diff --git a/examples/dummy/output/export.json b/examples/dummy/output/export.json index 0ed2f5e..58366e2 100644 --- a/examples/dummy/output/export.json +++ b/examples/dummy/output/export.json @@ -1,9 +1,9 @@ { - "build-date": "2016-12-20T11:30:36.474403064+01:00", - "build-hostname": "Zoon-MacBook.local", - "build-user": "zoon", - "go-pwd": "github.com/protoc-gen-gotemplate/examples/dummy", - "pwd": "/Users/zoon/Projects/gopath/src/github.com/protoc-gen-gotemplate/examples/dummy", + "build-date": "2017-03-31T17:59:35.936239356+02:00", + "build-hostname": "Valerios-MacBook-Pro.local", + "build-user": "vgheri", + "go-pwd": "github.com/moul/protoc-gen-gotemplate/examples/dummy", + "pwd": "/Users/vgheri/go/src/github.com/moul/protoc-gen-gotemplate/examples/dummy", "debug": false, "destination-dir": ".", "file": { @@ -842,40 +842,27 @@ ] }, "environment": [ - "TERM_PROGRAM=iTerm.app", - "ANDROID_HOME=/usr/local/opt/android-sdk", + "TERM_PROGRAM=platformio-ide-terminal", "TERM=xterm-256color", - "SHELL=/bin/zsh", + "SHELL=/bin/bash", "MAKEFLAGS=", - "TMPDIR=/var/folders/sq/wlptrlpn4v52xv7xpsgw0fc80000gn/T/", - "Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.q9vxeee00S/Render", - "TERM_PROGRAM_VERSION=3.0.12", - "TERM_SESSION_ID=w0t0p0:6D29EB08-1B96-41B8-8672-0B035605AEE5", - "ZSH=/Users/zoon/.oh-my-zsh", - "USER=zoon", - "SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.5ZcNGIwTRZ/Listeners", + "TMPDIR=/var/folders/9v/4b6h7ftd5ldfqv7gr82mbj340000gn/T/", + "Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.Zt6NPL5gZZ/Render", + "USER=vgheri", + "SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.UvxCW75B4v/Listeners", "__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0", "MAKELEVEL=2", - "PAGER=less", "MFLAGS=", - "LSCOLORS=Gxfxcxdxbxegedabagacad", - "PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/zoon/Projects/gopath/bin", - "_=/usr/local/bin/protoc", - "PWD=/Users/zoon/Projects/gopath/src/github.com/protoc-gen-gotemplate/examples/dummy", - "JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home", - "EDITOR=micro", + "PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:/usr/local/go/bin:/usr/local/protoc/bin:/Users/vgheri/go/bin:/usr/local/protoc/bin:/Users/vgheri/go/bin", + "_=/usr/local/protoc/bin/protoc", + "PWD=/Users/vgheri/go/src/github.com/moul/protoc-gen-gotemplate/examples/dummy", "LANG=en_US.UTF-8", - "ANDROID_SDK=/usr/local/opt/android-sdk", - "ITERM_PROFILE=Default", "XPC_FLAGS=0x0", "XPC_SERVICE_NAME=0", - "COLORFGBG=15;0", - "SHLVL=3", - "HOME=/Users/zoon", - "ITERM_SESSION_ID=w0t0p0:6D29EB08-1B96-41B8-8672-0B035605AEE5", - "LESS=-R", - "LOGNAME=zoon", - "LC_CTYPE=UTF-8", - "GOPATH=/Users/zoon/Projects/gopath" + "HISTCONTROL=ignoreboth:erasedups", + "SHLVL=15", + "HOME=/Users/vgheri", + "LOGNAME=vgheri", + "GOPATH=/Users/vgheri/go" ] } \ No newline at end of file diff --git a/examples/flow/output/test/test_grpc_js.js b/examples/flow/output/test/test_grpc_js.js index 27088ef..9410b6e 100644 --- a/examples/flow/output/test/test_grpc_js.js +++ b/examples/flow/output/test/test_grpc_js.js @@ -55,13 +55,13 @@ export type TestMessage = { setRList?: (r: Array) => void; addR?: (r: number) => void; clearRList?: () => void; - getU?: () => TestEnum; - setU?: (u: TestEnum) => void; - getV?: () => TestMessage$TestNestedEnum; - setV?: (v: TestMessage$TestNestedEnum) => void; - getWList?: () => Array; - setWList?: (w: Array) => void; - addW?: (w: TestMessage$TestNestedMessage) => void; + getU?: () => test$TestEnum; + setU?: (u: test$TestEnum) => void; + getV?: () => test$TestMessage$TestNestedEnum; + setV?: (v: test$TestMessage$TestNestedEnum) => void; + getWList?: () => Array; + setWList?: (w: Array) => void; + addW?: (w: test$TestMessage$TestNestedMessage) => void; clearWList?: () => void; }; @@ -70,8 +70,8 @@ export type TestMessage = { export type TestNoStreamRequest = { - getMessage?: () => TestMessage; - setMessage?: (message: TestMessage) => void; + getMessage?: () => test$TestMessage; + setMessage?: (message: test$TestMessage) => void; clearMessage?: () => void; hasMessage?: () => boolean; }; @@ -81,8 +81,8 @@ export type TestNoStreamRequest = { export type TestNoStreamReply = { - getMessage?: () => TestMessage; - setMessage?: (message: TestMessage) => void; + getMessage?: () => test$TestMessage; + setMessage?: (message: test$TestMessage) => void; clearMessage?: () => void; hasMessage?: () => boolean; getErrMsg?: () => string; @@ -94,8 +94,8 @@ export type TestNoStreamReply = { export type TestStreamRequestRequest = { - getMessage?: () => TestMessage; - setMessage?: (message: TestMessage) => void; + getMessage?: () => test$TestMessage; + setMessage?: (message: test$TestMessage) => void; clearMessage?: () => void; hasMessage?: () => boolean; }; @@ -105,8 +105,8 @@ export type TestStreamRequestRequest = { export type TestStreamRequestReply = { - getMessage?: () => TestMessage; - setMessage?: (message: TestMessage) => void; + getMessage?: () => test$TestMessage; + setMessage?: (message: test$TestMessage) => void; clearMessage?: () => void; hasMessage?: () => boolean; getErrMsg?: () => string; @@ -118,8 +118,8 @@ export type TestStreamRequestReply = { export type TestStreamReplyRequest = { - getMessage?: () => TestMessage; - setMessage?: (message: TestMessage) => void; + getMessage?: () => test$TestMessage; + setMessage?: (message: test$TestMessage) => void; clearMessage?: () => void; hasMessage?: () => boolean; }; @@ -129,8 +129,8 @@ export type TestStreamReplyRequest = { export type TestStreamReplyReply = { - getMessage?: () => TestMessage; - setMessage?: (message: TestMessage) => void; + getMessage?: () => test$TestMessage; + setMessage?: (message: test$TestMessage) => void; clearMessage?: () => void; hasMessage?: () => boolean; getErrMsg?: () => string; @@ -142,8 +142,8 @@ export type TestStreamReplyReply = { export type TestStreamBothRequest = { - getMessage?: () => TestMessage; - setMessage?: (message: TestMessage) => void; + getMessage?: () => test$TestMessage; + setMessage?: (message: test$TestMessage) => void; clearMessage?: () => void; hasMessage?: () => boolean; }; @@ -153,8 +153,8 @@ export type TestStreamBothRequest = { export type TestStreamBothReply = { - getMessage?: () => TestMessage; - setMessage?: (message: TestMessage) => void; + getMessage?: () => test$TestMessage; + setMessage?: (message: test$TestMessage) => void; clearMessage?: () => void; hasMessage?: () => boolean; getErrMsg?: () => string; diff --git a/examples/go-kit/services/session/gen/pb/pb.go b/examples/go-kit/services/session/gen/pb/pb.go index b86cb5c..499933d 100644 --- a/examples/go-kit/services/session/gen/pb/pb.go +++ b/examples/go-kit/services/session/gen/pb/pb.go @@ -163,7 +163,7 @@ func init() { proto.RegisterFile("services/session/session.proto", fileDescripto var fileDescriptor0 = []byte{ // 188 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x4e, 0x2d, 0x2a, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x2d, 0xd6, 0x2f, 0x4e, 0x2d, 0x2e, 0xce, 0xcc, 0xcf, 0x83, 0xd1, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0xec, 0x50, 0xae, 0x92, 0x1b, 0x17, 0x8f, 0x4f, 0x7e, 0x7a, 0x66, 0x5e, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x90, 0x14, 0x17, 0x47, 0x69, 0x71, 0x6a, 0x51, diff --git a/examples/go-kit/services/sprint/gen/pb/pb.go b/examples/go-kit/services/sprint/gen/pb/pb.go index a96058e..81c7f94 100644 --- a/examples/go-kit/services/sprint/gen/pb/pb.go +++ b/examples/go-kit/services/sprint/gen/pb/pb.go @@ -335,7 +335,7 @@ func init() { proto.RegisterFile("services/sprint/sprint.proto", fileDescriptor0 var fileDescriptor0 = []byte{ // 290 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0x4d, 0x4b, 0xc3, 0x40, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x52, 0x4d, 0x4b, 0xc3, 0x40, 0x10, 0x6d, 0xaa, 0x44, 0x32, 0xa5, 0xa5, 0x1d, 0x0f, 0xc6, 0xa8, 0x20, 0x8b, 0x14, 0x4f, 0x11, 0xea, 0x2f, 0x68, 0x3d, 0x28, 0x88, 0x97, 0xb4, 0xf7, 0x12, 0xbb, 0x43, 0x09, 0xd8, 0x24, 0xee, 0xac, 0xfe, 0x5f, 0xff, 0x89, 0xb0, 0xbb, 0xcd, 0x57, 0x8b, 0x27, 0x4f, 0xc9, 0xec, 0xbc, 0x7d, diff --git a/examples/go-kit/services/user/gen/pb/pb.go b/examples/go-kit/services/user/gen/pb/pb.go index e1f2850..1327d40 100644 --- a/examples/go-kit/services/user/gen/pb/pb.go +++ b/examples/go-kit/services/user/gen/pb/pb.go @@ -258,7 +258,7 @@ func init() { proto.RegisterFile("services/user/user.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 236 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x28, 0x4e, 0x2d, 0x2a, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x28, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x2d, 0xd6, 0x2f, 0x2d, 0x4e, 0x2d, 0x02, 0x13, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x2c, 0x20, 0xb6, 0x92, 0x3a, 0x97, 0xa0, 0x73, 0x51, 0x6a, 0x62, 0x49, 0x6a, 0x68, 0x71, 0x6a, 0x51, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x90, 0x10, 0x17, 0x4b, 0x5e, 0x62, diff --git a/examples/sitemap/sitemap.xml b/examples/sitemap/sitemap.xml index 315b7ce..2a7a647 100644 --- a/examples/sitemap/sitemap.xml +++ b/examples/sitemap/sitemap.xml @@ -4,18 +4,18 @@ /posts 0.5 monthly - 2017-03-16 + 2017-03-31 /authors 0.5 monthly - 2017-03-16 + 2017-03-31 /comments 0.5 monthly - 2017-03-16 + 2017-03-31 diff --git a/glide.lock b/glide.lock index c0fee5c..9baa9ce 100644 --- a/glide.lock +++ b/glide.lock @@ -1,21 +1,86 @@ -hash: 488701437e53b39667ed5a84ed1500e727ea8d4902d804c3ea7eb50b1fc022a1 -updated: 2016-12-21T10:24:42.512734471+01:00 +hash: 952872c40b8721f6bcd8bc1eab4f174aa0aebc5e8d9acb70ecdffb91068845b5 +updated: 2017-03-31T17:55:29.337081111+02:00 imports: - name: github.com/aokoli/goutils version: 9c37978a95bd5c709a15883b6242714ea6709e64 +- name: github.com/dgrijalva/jwt-go + version: d2709f9f1f31ebcda9651b03077758c1f3a0018c +- name: github.com/go-kit/kit + version: fadad6fffe0466b19df9efd9acde5c9a52df5fa4 + subpackages: + - auth/jwt + - endpoint + - log + - transport/grpc + - transport/http +- name: github.com/go-logfmt/logfmt + version: 390ab7935ee28ec6b286364bba9b4dd6410cb3d5 +- name: github.com/go-stack/stack + version: 100eb0c0a9c5b306ca2fb4f165df21d80ada4b82 - name: github.com/golang/protobuf - version: 8ee79997227bf9b34611aee7946ae64735e6fd93 + version: 2bba0603135d7d7f5cb73b2125beeda19c09f4ef subpackages: - proto - protoc-gen-go/descriptor - protoc-gen-go/generator - protoc-gen-go/plugin +- name: github.com/gorilla/handlers + version: 13d73096a474cac93275c679c7b8a2dc17ddba82 +- name: github.com/grpc-ecosystem/grpc-gateway + version: 18d159699f2e83fc5bb9ef2f79465ca3f3122676 + subpackages: + - third_party/googleapis/google/api - name: github.com/huandu/xstrings version: 3959339b333561bf62a38b424fd41517c2c90f40 - name: github.com/kr/fs version: 2788f0dbd16903de03cb8186e5c7d97b69ad387b +- name: github.com/kr/logfmt + version: b84e30acd515aadc4b783ad4ff83aff3299bdfe0 +- name: github.com/Masterminds/semver + version: 59c29afe1a994eacb71c833025ca7acf874bb1da - name: github.com/Masterminds/sprig - version: 69011c0cd9b4d2e0733c4d9e2c8e2a5a0d0a2f2f + version: cd9291e11ed2b78cdc1991bdd3e8adf51d6236bb - name: github.com/satori/go.uuid version: 879c5887cd475cd7864858769793b2ceb0d44feb +- name: golang.org/x/crypto + version: 3cb07270c9455e8ad27956a70891c962d121a228 + subpackages: + - pbkdf2 + - scrypt +- name: golang.org/x/net + version: ffcf1bedda3b04ebb15a168a59800a73d6dc0f4d + subpackages: + - context + - context/ctxhttp + - http2 + - http2/hpack + - idna + - internal/timeseries + - lex/httplex + - trace +- name: golang.org/x/text + version: c3b0cbb40eb9a862fdc91f79bed8c7ac8e7a36e8 + subpackages: + - secure/bidirule + - transform + - unicode/bidi + - unicode/norm +- name: google.golang.org/genproto + version: de9f5e90fe9b278809363f08c2072d2f2a429de7 + subpackages: + - googleapis/api/annotations +- name: google.golang.org/grpc + version: cdee119ee21e61eef7093a41ba148fa83585e143 + subpackages: + - codes + - credentials + - grpclog + - internal + - keepalive + - metadata + - naming + - peer + - stats + - tap + - transport testImports: [] diff --git a/glide.yaml b/glide.yaml index fa5d984..26f560a 100644 --- a/glide.yaml +++ b/glide.yaml @@ -9,3 +9,6 @@ import: - package: github.com/kr/fs - package: github.com/Masterminds/sprig - package: github.com/huandu/xstrings +- package: google.golang.org/genproto + subpackages: + - googleapis/api/annotations diff --git a/helpers.go b/helpers.go index 812e5eb..48dee17 100644 --- a/helpers.go +++ b/helpers.go @@ -11,7 +11,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/protoc-gen-go/descriptor" - options "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api" + options "google.golang.org/genproto/googleapis/api/annotations" ) var ProtoHelpersFuncMap = template.FuncMap{ diff --git a/vendor/github.com/Masterminds/semver/.travis.yml b/vendor/github.com/Masterminds/semver/.travis.yml new file mode 100644 index 0000000..3231840 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/.travis.yml @@ -0,0 +1,25 @@ +language: go + +go: + - 1.5 + - 1.6 + - 1.7 + - tip + +# Setting sudo access to false will let Travis CI use containers rather than +# VMs to run the tests. For more details see: +# - http://docs.travis-ci.com/user/workers/container-based-infrastructure/ +# - http://docs.travis-ci.com/user/workers/standard-infrastructure/ +sudo: false + +script: + - GO15VENDOREXPERIMENT=1 make setup + - GO15VENDOREXPERIMENT=1 make test + +notifications: + webhooks: + urls: + - https://webhooks.gitter.im/e/06e3328629952dabe3e0 + on_success: change # options: [always|never|change] default: always + on_failure: always # options: [always|never|change] default: always + on_start: never # options: [always|never|change] default: always diff --git a/vendor/github.com/Masterminds/semver/CHANGELOG.md b/vendor/github.com/Masterminds/semver/CHANGELOG.md new file mode 100644 index 0000000..237d53a --- /dev/null +++ b/vendor/github.com/Masterminds/semver/CHANGELOG.md @@ -0,0 +1,45 @@ +# Release 1.2.2 (2016-12-13) + +## Fixed +- #34: Fixed issue where hyphen range was not working with pre-release parsing. + +# Release 1.2.1 (2016-11-28) + +## Fixed +- #24: Fixed edge case issue where constraint "> 0" does not handle "0.0.1-alpha" + properly. + +# Release 1.2.0 (2016-11-04) + +## Added +- #20: Added MustParse function for versions (thanks @adamreese) +- #15: Added increment methods on versions (thanks @mh-cbon) + +## Fixed +- Issue #21: Per the SemVer spec (section 9) a pre-release is unstable and + might not satisfy the intended compatibility. The change here ignores pre-releases + on constraint checks (e.g., ~ or ^) when a pre-release is not part of the + constraint. For example, `^1.2.3` will ignore pre-releases while + `^1.2.3-alpha` will include them. + +# Release 1.1.1 (2016-06-30) + +## Changed +- Issue #9: Speed up version comparison performance (thanks @sdboyer) +- Issue #8: Added benchmarks (thanks @sdboyer) +- Updated Go Report Card URL to new location +- Updated Readme to add code snippet formatting (thanks @mh-cbon) +- Updating tagging to v[SemVer] structure for compatibility with other tools. + +# Release 1.1.0 (2016-03-11) + +- Issue #2: Implemented validation to provide reasons a versions failed a + constraint. + +# Release 1.0.1 (2015-12-31) + +- Fixed #1: * constraint failing on valid versions. + +# Release 1.0.0 (2015-10-20) + +- Initial release diff --git a/vendor/github.com/Masterminds/semver/LICENSE.txt b/vendor/github.com/Masterminds/semver/LICENSE.txt new file mode 100644 index 0000000..0da4aea --- /dev/null +++ b/vendor/github.com/Masterminds/semver/LICENSE.txt @@ -0,0 +1,20 @@ +The Masterminds +Copyright (C) 2014-2015, Matt Butcher and Matt Farina + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/github.com/Masterminds/semver/Makefile b/vendor/github.com/Masterminds/semver/Makefile new file mode 100644 index 0000000..a7a1b4e --- /dev/null +++ b/vendor/github.com/Masterminds/semver/Makefile @@ -0,0 +1,36 @@ +.PHONY: setup +setup: + go get -u gopkg.in/alecthomas/gometalinter.v1 + gometalinter.v1 --install + +.PHONY: test +test: validate lint + @echo "==> Running tests" + go test -v + +.PHONY: validate +validate: + @echo "==> Running static validations" + @gometalinter.v1 \ + --disable-all \ + --enable deadcode \ + --severity deadcode:error \ + --enable gofmt \ + --enable gosimple \ + --enable ineffassign \ + --enable misspell \ + --enable vet \ + --tests \ + --vendor \ + --deadline 60s \ + ./... || exit_code=1 + +.PHONY: lint +lint: + @echo "==> Running linters" + @gometalinter.v1 \ + --disable-all \ + --enable golint \ + --vendor \ + --deadline 60s \ + ./... || : diff --git a/vendor/github.com/Masterminds/semver/README.md b/vendor/github.com/Masterminds/semver/README.md new file mode 100644 index 0000000..9a9ed45 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/README.md @@ -0,0 +1,163 @@ +# SemVer + +The `semver` package provides the ability to work with [Semantic Versions](http://semver.org) in Go. Specifically it provides the ability to: + +* Parse semantic versions +* Sort semantic versions +* Check if a semantic version fits within a set of constraints +* Optionally work with a `v` prefix + +[![Build Status](https://travis-ci.org/Masterminds/semver.svg)](https://travis-ci.org/Masterminds/semver) [![Build status](https://ci.appveyor.com/api/projects/status/jfk66lib7hb985k8/branch/master?svg=true&passingText=windows%20build%20passing&failingText=windows%20build%20failing)](https://ci.appveyor.com/project/mattfarina/semver/branch/master) [![GoDoc](https://godoc.org/github.com/Masterminds/semver?status.png)](https://godoc.org/github.com/Masterminds/semver) [![Go Report Card](https://goreportcard.com/badge/github.com/Masterminds/semver)](https://goreportcard.com/report/github.com/Masterminds/semver) + +## Parsing Semantic Versions + +To parse a semantic version use the `NewVersion` function. For example, + +```go + v, err := semver.NewVersion("1.2.3-beta.1+build345") +``` + +If there is an error the version wasn't parseable. The version object has methods +to get the parts of the version, compare it to other versions, convert the +version back into a string, and get the original string. For more details +please see the [documentation](https://godoc.org/github.com/Masterminds/semver). + +## Sorting Semantic Versions + +A set of versions can be sorted using the [`sort`](https://golang.org/pkg/sort/) +package from the standard library. For example, + +```go + raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",} + vs := make([]*semver.Version, len(raw)) + for i, r := range raw { + v, err := semver.NewVersion(r) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + vs[i] = v + } + + sort.Sort(semver.Collection(vs)) +``` + +## Checking Version Constraints + +Checking a version against version constraints is one of the most featureful +parts of the package. + +```go + c, err := semver.NewConstraint(">= 1.2.3") + if err != nil { + // Handle constraint not being parseable. + } + + v, _ := semver.NewVersion("1.3") + if err != nil { + // Handle version not being parseable. + } + // Check if the version meets the constraints. The a variable will be true. + a := c.Check(v) +``` + +## Basic Comparisons + +There are two elements to the comparisons. First, a comparison string is a list +of comma separated and comparisons. These are then separated by || separated or +comparisons. For example, `">= 1.2, < 3.0.0 || >= 4.2.3"` is looking for a +comparison that's greater than or equal to 1.2 and less than 3.0.0 or is +greater than or equal to 4.2.3. + +The basic comparisons are: + +* `=`: equal (aliased to no operator) +* `!=`: not equal +* `>`: greater than +* `<`: less than +* `>=`: greater than or equal to +* `<=`: less than or equal to + +_Note, according to the Semantic Version specification pre-releases may not be +API compliant with their release counterpart. It says,_ + +> _A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version._ + +_SemVer comparisons without a pre-release value will skip pre-release versions. +For example, `>1.2.3` will skip pre-releases when looking at a list of values +while `>1.2.3-alpha.1` will evaluate pre-releases._ + +## Hyphen Range Comparisons + +There are multiple methods to handle ranges and the first is hyphens ranges. +These look like: + +* `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5` +* `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5` + +## Wildcards In Comparisons + +The `x`, `X`, and `*` characters can be used as a wildcard character. This works +for all comparison operators. When used on the `=` operator it falls +back to the pack level comparison (see tilde below). For example, + +* `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` +* `>= 1.2.x` is equivalent to `>= 1.2.0` +* `<= 2.x` is equivalent to `<= 3` +* `*` is equivalent to `>= 0.0.0` + +## Tilde Range Comparisons (Patch) + +The tilde (`~`) comparison operator is for patch level ranges when a minor +version is specified and major level changes when the minor number is missing. +For example, + +* `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0` +* `~1` is equivalent to `>= 1, < 2` +* `~2.3` is equivalent to `>= 2.3, < 2.4` +* `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` +* `~1.x` is equivalent to `>= 1, < 2` + +## Caret Range Comparisons (Major) + +The caret (`^`) comparison operator is for major level changes. This is useful +when comparisons of API versions as a major change is API breaking. For example, + +* `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0` +* `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0` +* `^2.3` is equivalent to `>= 2.3, < 3` +* `^2.x` is equivalent to `>= 2.0.0, < 3` + +# Validation + +In addition to testing a version against a constraint, a version can be validated +against a constraint. When validation fails a slice of errors containing why a +version didn't meet the constraint is returned. For example, + +```go + c, err := semver.NewConstraint("<= 1.2.3, >= 1.4") + if err != nil { + // Handle constraint not being parseable. + } + + v, _ := semver.NewVersion("1.3") + if err != nil { + // Handle version not being parseable. + } + + // Validate a version against a constraint. + a, msgs := c.Validate(v) + // a is false + for _, m := range msgs { + fmt.Println(m) + + // Loops over the errors which would read + // "1.3 is greater than 1.2.3" + // "1.3 is less than 1.4" + } +``` + +# Contribute + +If you find an issue or want to contribute please file an [issue](https://github.com/Masterminds/semver/issues) +or [create a pull request](https://github.com/Masterminds/semver/pulls). diff --git a/vendor/github.com/Masterminds/semver/appveyor.yml b/vendor/github.com/Masterminds/semver/appveyor.yml new file mode 100644 index 0000000..b2778df --- /dev/null +++ b/vendor/github.com/Masterminds/semver/appveyor.yml @@ -0,0 +1,44 @@ +version: build-{build}.{branch} + +clone_folder: C:\gopath\src\github.com\Masterminds\semver +shallow_clone: true + +environment: + GOPATH: C:\gopath + +platform: + - x64 + +install: + - go version + - go env + - go get -u gopkg.in/alecthomas/gometalinter.v1 + - set PATH=%PATH%;%GOPATH%\bin + - gometalinter.v1.exe --install + +build_script: + - go install -v ./... + +test_script: + - "gometalinter.v1 \ + --disable-all \ + --enable deadcode \ + --severity deadcode:error \ + --enable gofmt \ + --enable gosimple \ + --enable ineffassign \ + --enable misspell \ + --enable vet \ + --tests \ + --vendor \ + --deadline 60s \ + ./... || exit_code=1" + - "gometalinter.v1 \ + --disable-all \ + --enable golint \ + --vendor \ + --deadline 60s \ + ./... || :" + - go test -v + +deploy: off diff --git a/vendor/github.com/Masterminds/semver/benchmark_test.go b/vendor/github.com/Masterminds/semver/benchmark_test.go new file mode 100644 index 0000000..58a5c28 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/benchmark_test.go @@ -0,0 +1,157 @@ +package semver_test + +import ( + "testing" + + "github.com/Masterminds/semver" +) + +/* Constraint creation benchmarks */ + +func benchNewConstraint(c string, b *testing.B) { + for i := 0; i < b.N; i++ { + semver.NewConstraint(c) + } +} + +func BenchmarkNewConstraintUnary(b *testing.B) { + benchNewConstraint("=2.0", b) +} + +func BenchmarkNewConstraintTilde(b *testing.B) { + benchNewConstraint("~2.0.0", b) +} + +func BenchmarkNewConstraintCaret(b *testing.B) { + benchNewConstraint("^2.0.0", b) +} + +func BenchmarkNewConstraintWildcard(b *testing.B) { + benchNewConstraint("1.x", b) +} + +func BenchmarkNewConstraintRange(b *testing.B) { + benchNewConstraint(">=2.1.x, <3.1.0", b) +} + +func BenchmarkNewConstraintUnion(b *testing.B) { + benchNewConstraint("~2.0.0 || =3.1.0", b) +} + +/* Check benchmarks */ + +func benchCheckVersion(c, v string, b *testing.B) { + version, _ := semver.NewVersion(v) + constraint, _ := semver.NewConstraint(c) + + for i := 0; i < b.N; i++ { + constraint.Check(version) + } +} + +func BenchmarkCheckVersionUnary(b *testing.B) { + benchCheckVersion("=2.0", "2.0.0", b) +} + +func BenchmarkCheckVersionTilde(b *testing.B) { + benchCheckVersion("~2.0.0", "2.0.5", b) +} + +func BenchmarkCheckVersionCaret(b *testing.B) { + benchCheckVersion("^2.0.0", "2.1.0", b) +} + +func BenchmarkCheckVersionWildcard(b *testing.B) { + benchCheckVersion("1.x", "1.4.0", b) +} + +func BenchmarkCheckVersionRange(b *testing.B) { + benchCheckVersion(">=2.1.x, <3.1.0", "2.4.5", b) +} + +func BenchmarkCheckVersionUnion(b *testing.B) { + benchCheckVersion("~2.0.0 || =3.1.0", "3.1.0", b) +} + +func benchValidateVersion(c, v string, b *testing.B) { + version, _ := semver.NewVersion(v) + constraint, _ := semver.NewConstraint(c) + + for i := 0; i < b.N; i++ { + constraint.Validate(version) + } +} + +/* Validate benchmarks, including fails */ + +func BenchmarkValidateVersionUnary(b *testing.B) { + benchValidateVersion("=2.0", "2.0.0", b) +} + +func BenchmarkValidateVersionUnaryFail(b *testing.B) { + benchValidateVersion("=2.0", "2.0.1", b) +} + +func BenchmarkValidateVersionTilde(b *testing.B) { + benchValidateVersion("~2.0.0", "2.0.5", b) +} + +func BenchmarkValidateVersionTildeFail(b *testing.B) { + benchValidateVersion("~2.0.0", "1.0.5", b) +} + +func BenchmarkValidateVersionCaret(b *testing.B) { + benchValidateVersion("^2.0.0", "2.1.0", b) +} + +func BenchmarkValidateVersionCaretFail(b *testing.B) { + benchValidateVersion("^2.0.0", "4.1.0", b) +} + +func BenchmarkValidateVersionWildcard(b *testing.B) { + benchValidateVersion("1.x", "1.4.0", b) +} + +func BenchmarkValidateVersionWildcardFail(b *testing.B) { + benchValidateVersion("1.x", "2.4.0", b) +} + +func BenchmarkValidateVersionRange(b *testing.B) { + benchValidateVersion(">=2.1.x, <3.1.0", "2.4.5", b) +} + +func BenchmarkValidateVersionRangeFail(b *testing.B) { + benchValidateVersion(">=2.1.x, <3.1.0", "1.4.5", b) +} + +func BenchmarkValidateVersionUnion(b *testing.B) { + benchValidateVersion("~2.0.0 || =3.1.0", "3.1.0", b) +} + +func BenchmarkValidateVersionUnionFail(b *testing.B) { + benchValidateVersion("~2.0.0 || =3.1.0", "3.1.1", b) +} + +/* Version creation benchmarks */ + +func benchNewVersion(v string, b *testing.B) { + for i := 0; i < b.N; i++ { + semver.NewVersion(v) + } +} + +func BenchmarkNewVersionSimple(b *testing.B) { + benchNewVersion("1.0.0", b) +} + +func BenchmarkNewVersionPre(b *testing.B) { + benchNewVersion("1.0.0-alpha", b) +} + +func BenchmarkNewVersionMeta(b *testing.B) { + benchNewVersion("1.0.0+metadata", b) +} + +func BenchmarkNewVersionMetaDash(b *testing.B) { + benchNewVersion("1.0.0+metadata-dash", b) +} diff --git a/vendor/github.com/Masterminds/semver/collection.go b/vendor/github.com/Masterminds/semver/collection.go new file mode 100644 index 0000000..a782358 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/collection.go @@ -0,0 +1,24 @@ +package semver + +// Collection is a collection of Version instances and implements the sort +// interface. See the sort package for more details. +// https://golang.org/pkg/sort/ +type Collection []*Version + +// Len returns the length of a collection. The number of Version instances +// on the slice. +func (c Collection) Len() int { + return len(c) +} + +// Less is needed for the sort interface to compare two Version objects on the +// slice. If checks if one is less than the other. +func (c Collection) Less(i, j int) bool { + return c[i].LessThan(c[j]) +} + +// Swap is needed for the sort interface to replace the Version objects +// at two different positions in the slice. +func (c Collection) Swap(i, j int) { + c[i], c[j] = c[j], c[i] +} diff --git a/vendor/github.com/Masterminds/semver/collection_test.go b/vendor/github.com/Masterminds/semver/collection_test.go new file mode 100644 index 0000000..71b909c --- /dev/null +++ b/vendor/github.com/Masterminds/semver/collection_test.go @@ -0,0 +1,46 @@ +package semver + +import ( + "reflect" + "sort" + "testing" +) + +func TestCollection(t *testing.T) { + raw := []string{ + "1.2.3", + "1.0", + "1.3", + "2", + "0.4.2", + } + + vs := make([]*Version, len(raw)) + for i, r := range raw { + v, err := NewVersion(r) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + vs[i] = v + } + + sort.Sort(Collection(vs)) + + e := []string{ + "0.4.2", + "1.0.0", + "1.2.3", + "1.3.0", + "2.0.0", + } + + a := make([]string, len(vs)) + for i, v := range vs { + a[i] = v.String() + } + + if !reflect.DeepEqual(a, e) { + t.Error("Sorting Collection failed") + } +} diff --git a/vendor/github.com/Masterminds/semver/constraints.go b/vendor/github.com/Masterminds/semver/constraints.go new file mode 100644 index 0000000..4c4fac3 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/constraints.go @@ -0,0 +1,421 @@ +package semver + +import ( + "errors" + "fmt" + "regexp" + "strings" +) + +// Constraints is one or more constraint that a semantic version can be +// checked against. +type Constraints struct { + constraints [][]*constraint +} + +// NewConstraint returns a Constraints instance that a Version instance can +// be checked against. If there is a parse error it will be returned. +func NewConstraint(c string) (*Constraints, error) { + + // Rewrite - ranges into a comparison operation. + c = rewriteRange(c) + + ors := strings.Split(c, "||") + or := make([][]*constraint, len(ors)) + for k, v := range ors { + cs := strings.Split(v, ",") + result := make([]*constraint, len(cs)) + for i, s := range cs { + pc, err := parseConstraint(s) + if err != nil { + return nil, err + } + + result[i] = pc + } + or[k] = result + } + + o := &Constraints{constraints: or} + return o, nil +} + +// Check tests if a version satisfies the constraints. +func (cs Constraints) Check(v *Version) bool { + // loop over the ORs and check the inner ANDs + for _, o := range cs.constraints { + joy := true + for _, c := range o { + if !c.check(v) { + joy = false + break + } + } + + if joy { + return true + } + } + + return false +} + +// Validate checks if a version satisfies a constraint. If not a slice of +// reasons for the failure are returned in addition to a bool. +func (cs Constraints) Validate(v *Version) (bool, []error) { + // loop over the ORs and check the inner ANDs + var e []error + for _, o := range cs.constraints { + joy := true + for _, c := range o { + if !c.check(v) { + em := fmt.Errorf(c.msg, v, c.orig) + e = append(e, em) + joy = false + } + } + + if joy { + return true, []error{} + } + } + + return false, e +} + +var constraintOps map[string]cfunc +var constraintMsg map[string]string +var constraintRegex *regexp.Regexp + +func init() { + constraintOps = map[string]cfunc{ + "": constraintTildeOrEqual, + "=": constraintTildeOrEqual, + "!=": constraintNotEqual, + ">": constraintGreaterThan, + "<": constraintLessThan, + ">=": constraintGreaterThanEqual, + "=>": constraintGreaterThanEqual, + "<=": constraintLessThanEqual, + "=<": constraintLessThanEqual, + "~": constraintTilde, + "~>": constraintTilde, + "^": constraintCaret, + } + + constraintMsg = map[string]string{ + "": "%s is not equal to %s", + "=": "%s is not equal to %s", + "!=": "%s is equal to %s", + ">": "%s is less than or equal to %s", + "<": "%s is greater than or equal to %s", + ">=": "%s is less than %s", + "=>": "%s is less than %s", + "<=": "%s is greater than %s", + "=<": "%s is greater than %s", + "~": "%s does not have same major and minor version as %s", + "~>": "%s does not have same major and minor version as %s", + "^": "%s does not have same major version as %s", + } + + ops := make([]string, 0, len(constraintOps)) + for k := range constraintOps { + ops = append(ops, regexp.QuoteMeta(k)) + } + + constraintRegex = regexp.MustCompile(fmt.Sprintf( + `^\s*(%s)\s*(%s)\s*$`, + strings.Join(ops, "|"), + cvRegex)) + + constraintRangeRegex = regexp.MustCompile(fmt.Sprintf( + `\s*(%s)\s+-\s+(%s)\s*`, + cvRegex, cvRegex)) +} + +// An individual constraint +type constraint struct { + // The callback function for the restraint. It performs the logic for + // the constraint. + function cfunc + + msg string + + // The version used in the constraint check. For example, if a constraint + // is '<= 2.0.0' the con a version instance representing 2.0.0. + con *Version + + // The original parsed version (e.g., 4.x from != 4.x) + orig string + + // When an x is used as part of the version (e.g., 1.x) + minorDirty bool + dirty bool +} + +// Check if a version meets the constraint +func (c *constraint) check(v *Version) bool { + return c.function(v, c) +} + +type cfunc func(v *Version, c *constraint) bool + +func parseConstraint(c string) (*constraint, error) { + m := constraintRegex.FindStringSubmatch(c) + if m == nil { + return nil, fmt.Errorf("improper constraint: %s", c) + } + + ver := m[2] + orig := ver + minorDirty := false + dirty := false + if isX(m[3]) { + ver = "0.0.0" + dirty = true + } else if isX(strings.TrimPrefix(m[4], ".")) { + minorDirty = true + dirty = true + ver = fmt.Sprintf("%s.0.0%s", m[3], m[6]) + } else if isX(strings.TrimPrefix(m[5], ".")) { + dirty = true + ver = fmt.Sprintf("%s%s.0%s", m[3], m[4], m[6]) + } + + con, err := NewVersion(ver) + if err != nil { + + // The constraintRegex should catch any regex parsing errors. So, + // we should never get here. + return nil, errors.New("constraint Parser Error") + } + + cs := &constraint{ + function: constraintOps[m[1]], + msg: constraintMsg[m[1]], + con: con, + orig: orig, + minorDirty: minorDirty, + dirty: dirty, + } + return cs, nil +} + +// Constraint functions +func constraintNotEqual(v *Version, c *constraint) bool { + if c.dirty { + + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false + } + + if c.con.Major() != v.Major() { + return true + } + if c.con.Minor() != v.Minor() && !c.minorDirty { + return true + } else if c.minorDirty { + return false + } + + return false + } + + return !v.Equal(c.con) +} + +func constraintGreaterThan(v *Version, c *constraint) bool { + + // An edge case the constraint is 0.0.0 and the version is 0.0.0-someprerelease + // exists. This that case. + if !isNonZero(c.con) && isNonZero(v) { + return true + } + + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false + } + + return v.Compare(c.con) == 1 +} + +func constraintLessThan(v *Version, c *constraint) bool { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false + } + + if !c.dirty { + return v.Compare(c.con) < 0 + } + + if v.Major() > c.con.Major() { + return false + } else if v.Minor() > c.con.Minor() && !c.minorDirty { + return false + } + + return true +} + +func constraintGreaterThanEqual(v *Version, c *constraint) bool { + // An edge case the constraint is 0.0.0 and the version is 0.0.0-someprerelease + // exists. This that case. + if !isNonZero(c.con) && isNonZero(v) { + return true + } + + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false + } + + return v.Compare(c.con) >= 0 +} + +func constraintLessThanEqual(v *Version, c *constraint) bool { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false + } + + if !c.dirty { + return v.Compare(c.con) <= 0 + } + + if v.Major() > c.con.Major() { + return false + } else if v.Minor() > c.con.Minor() && !c.minorDirty { + return false + } + + return true +} + +// ~*, ~>* --> >= 0.0.0 (any) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0, <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0, <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0, <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3, <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0, <1.3.0 +func constraintTilde(v *Version, c *constraint) bool { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false + } + + if v.LessThan(c.con) { + return false + } + + // ~0.0.0 is a special case where all constraints are accepted. It's + // equivalent to >= 0.0.0. + if c.con.Major() == 0 && c.con.Minor() == 0 && c.con.Patch() == 0 { + return true + } + + if v.Major() != c.con.Major() { + return false + } + + if v.Minor() != c.con.Minor() && !c.minorDirty { + return false + } + + return true +} + +// When there is a .x (dirty) status it automatically opts in to ~. Otherwise +// it's a straight = +func constraintTildeOrEqual(v *Version, c *constraint) bool { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false + } + + if c.dirty { + c.msg = constraintMsg["~"] + return constraintTilde(v, c) + } + + return v.Equal(c.con) +} + +// ^* --> (any) +// ^2, ^2.x, ^2.x.x --> >=2.0.0, <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0, <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0, <2.0.0 +// ^1.2.3 --> >=1.2.3, <2.0.0 +// ^1.2.0 --> >=1.2.0, <2.0.0 +func constraintCaret(v *Version, c *constraint) bool { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false + } + + if v.LessThan(c.con) { + return false + } + + if v.Major() != c.con.Major() { + return false + } + + return true +} + +var constraintRangeRegex *regexp.Regexp + +const cvRegex string = `v?([0-9|x|X|\*]+)(\.[0-9|x|X|\*]+)?(\.[0-9|x|X|\*]+)?` + + `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + + `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + +func isX(x string) bool { + switch x { + case "x", "*", "X": + return true + default: + return false + } +} + +func rewriteRange(i string) string { + m := constraintRangeRegex.FindAllStringSubmatch(i, -1) + if m == nil { + return i + } + o := i + for _, v := range m { + t := fmt.Sprintf(">= %s, <= %s", v[1], v[11]) + o = strings.Replace(o, v[0], t, 1) + } + + return o +} + +// Detect if a version is not zero (0.0.0) +func isNonZero(v *Version) bool { + if v.Major() != 0 || v.Minor() != 0 || v.Patch() != 0 || v.Prerelease() != "" { + return true + } + + return false +} diff --git a/vendor/github.com/Masterminds/semver/constraints_test.go b/vendor/github.com/Masterminds/semver/constraints_test.go new file mode 100644 index 0000000..5910622 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/constraints_test.go @@ -0,0 +1,452 @@ +package semver + +import ( + "reflect" + "testing" +) + +func TestParseConstraint(t *testing.T) { + tests := []struct { + in string + f cfunc + v string + err bool + }{ + {">= 1.2", constraintGreaterThanEqual, "1.2.0", false}, + {"1.0", constraintTildeOrEqual, "1.0.0", false}, + {"foo", nil, "", true}, + {"<= 1.2", constraintLessThanEqual, "1.2.0", false}, + {"=< 1.2", constraintLessThanEqual, "1.2.0", false}, + {"=> 1.2", constraintGreaterThanEqual, "1.2.0", false}, + {"v1.2", constraintTildeOrEqual, "1.2.0", false}, + {"=1.5", constraintTildeOrEqual, "1.5.0", false}, + {"> 1.3", constraintGreaterThan, "1.3.0", false}, + {"< 1.4.1", constraintLessThan, "1.4.1", false}, + } + + for _, tc := range tests { + c, err := parseConstraint(tc.in) + if tc.err && err == nil { + t.Errorf("Expected error for %s didn't occur", tc.in) + } else if !tc.err && err != nil { + t.Errorf("Unexpected error for %s", tc.in) + } + + // If an error was expected continue the loop and don't try the other + // tests as they will cause errors. + if tc.err { + continue + } + + if tc.v != c.con.String() { + t.Errorf("Incorrect version found on %s", tc.in) + } + + f1 := reflect.ValueOf(tc.f) + f2 := reflect.ValueOf(c.function) + if f1 != f2 { + t.Errorf("Wrong constraint found for %s", tc.in) + } + } +} + +func TestConstraintCheck(t *testing.T) { + tests := []struct { + constraint string + version string + check bool + }{ + {"= 2.0", "1.2.3", false}, + {"= 2.0", "2.0.0", true}, + {"4.1", "4.1.0", true}, + {"!=4.1", "4.1.0", false}, + {"!=4.1", "5.1.0", true}, + {">1.1", "4.1.0", true}, + {">1.1", "1.1.0", false}, + {"<1.1", "0.1.0", true}, + {"<1.1", "1.1.0", false}, + {"<1.1", "1.1.1", false}, + {">=1.1", "4.1.0", true}, + {">=1.1", "1.1.0", true}, + {">=1.1", "0.0.9", false}, + {"<=1.1", "0.1.0", true}, + {"<=1.1", "1.1.0", true}, + {"<=1.1", "1.1.1", false}, + {">0", "0.0.1-alpha", true}, + {">=0", "0.0.1-alpha", true}, + {">0", "0", false}, + {">=0", "0", true}, + } + + for _, tc := range tests { + c, err := parseConstraint(tc.constraint) + if err != nil { + t.Errorf("err: %s", err) + continue + } + + v, err := NewVersion(tc.version) + if err != nil { + t.Errorf("err: %s", err) + continue + } + + a := c.check(v) + if a != tc.check { + t.Errorf("Constraint %q failing with %q", tc.constraint, tc.version) + } + } +} + +func TestNewConstraint(t *testing.T) { + tests := []struct { + input string + ors int + count int + err bool + }{ + {">= 1.1", 1, 1, false}, + {"2.0", 1, 1, false}, + {"v2.3.5-20161202202307-sha.e8fc5e5", 1, 1, false}, + {">= bar", 0, 0, true}, + {">= 1.2.3, < 2.0", 1, 2, false}, + {">= 1.2.3, < 2.0 || => 3.0, < 4", 2, 2, false}, + + // The 3 - 4 should be broken into 2 by the range rewriting + {"3 - 4 || => 3.0, < 4", 2, 2, false}, + } + + for _, tc := range tests { + v, err := NewConstraint(tc.input) + if tc.err && err == nil { + t.Errorf("expected but did not get error for: %s", tc.input) + continue + } else if !tc.err && err != nil { + t.Errorf("unexpectederror for input %s: %s", tc.input, err) + continue + } + if tc.err { + continue + } + + l := len(v.constraints) + if tc.ors != l { + t.Errorf("Expected %s to have %d ORs but got %d", + tc.input, tc.ors, l) + } + + l = len(v.constraints[0]) + if tc.count != l { + t.Errorf("Expected %s to have %d constraints but got %d", + tc.input, tc.count, l) + } + } +} + +func TestConstraintsCheck(t *testing.T) { + tests := []struct { + constraint string + version string + check bool + }{ + {"*", "1.2.3", true}, + {"~0.0.0", "1.2.3", true}, + {"= 2.0", "1.2.3", false}, + {"= 2.0", "2.0.0", true}, + {"4.1", "4.1.0", true}, + {"4.1.x", "4.1.3", true}, + {"1.x", "1.4", true}, + {"!=4.1", "4.1.0", false}, + {"!=4.1-alpha", "4.1.0-alpha", false}, + {"!=4.1-alpha", "4.1.0", true}, + {"!=4.1", "5.1.0", true}, + {"!=4.x", "5.1.0", true}, + {"!=4.x", "4.1.0", false}, + {"!=4.1.x", "4.2.0", true}, + {"!=4.2.x", "4.2.3", false}, + {">1.1", "4.1.0", true}, + {">1.1", "1.1.0", false}, + {"<1.1", "0.1.0", true}, + {"<1.1", "1.1.0", false}, + {"<1.1", "1.1.1", false}, + {"<1.x", "1.1.1", true}, + {"<1.x", "2.1.1", false}, + {"<1.1.x", "1.2.1", false}, + {"<1.1.x", "1.1.500", true}, + {"<1.2.x", "1.1.1", true}, + {">=1.1", "4.1.0", true}, + {">=1.1", "4.1.0-beta", false}, + {">=1.1", "1.1.0", true}, + {">=1.1", "0.0.9", false}, + {"<=1.1", "0.1.0", true}, + {"<=1.1", "0.1.0-alpha", false}, + {"<=1.1-a", "0.1.0-alpha", true}, + {"<=1.1", "1.1.0", true}, + {"<=1.x", "1.1.0", true}, + {"<=2.x", "3.1.0", false}, + {"<=1.1", "1.1.1", false}, + {"<=1.1.x", "1.2.500", false}, + {">1.1, <2", "1.1.1", true}, + {">1.1, <3", "4.3.2", false}, + {">=1.1, <2, !=1.2.3", "1.2.3", false}, + {">=1.1, <2, !=1.2.3 || > 3", "3.1.2", true}, + {">=1.1, <2, !=1.2.3 || >= 3", "3.0.0", true}, + {">=1.1, <2, !=1.2.3 || > 3", "3.0.0", false}, + {">=1.1, <2, !=1.2.3 || > 3", "1.2.3", false}, + {"1.1 - 2", "1.1.1", true}, + {"1.1-3", "4.3.2", false}, + {"^1.1", "1.1.1", true}, + {"^1.1", "4.3.2", false}, + {"^1.x", "1.1.1", true}, + {"^2.x", "1.1.1", false}, + {"^1.x", "2.1.1", false}, + {"^1.x", "1.1.1-beta1", false}, + {"^1.1.2-alpha", "1.2.1-beta1", true}, + {"^1.2.x-alpha", "1.1.1-beta1", false}, + {"~*", "2.1.1", true}, + {"~1.x", "2.1.1", false}, + {"~1.x", "1.3.5", true}, + {"~1.x", "1.4", true}, + {"~1.1", "1.1.1", true}, + {"~1.1", "1.1.1-alpha", false}, + {"~1.1-alpha", "1.1.1-beta", true}, + {"~1.1.1-beta", "1.1.1-alpha", false}, + {"~1.1.1-beta", "1.1.1", true}, + {"~1.2.3", "1.2.5", true}, + {"~1.2.3", "1.2.2", false}, + {"~1.2.3", "1.3.2", false}, + {"~1.1", "1.2.3", false}, + {"~1.3", "2.4.5", false}, + } + + for _, tc := range tests { + c, err := NewConstraint(tc.constraint) + if err != nil { + t.Errorf("err: %s", err) + continue + } + + v, err := NewVersion(tc.version) + if err != nil { + t.Errorf("err: %s", err) + continue + } + + a := c.Check(v) + if a != tc.check { + t.Errorf("Constraint '%s' failing with '%s'", tc.constraint, tc.version) + } + } +} + +func TestRewriteRange(t *testing.T) { + tests := []struct { + c string + nc string + }{ + {"2 - 3", ">= 2, <= 3"}, + {"2 - 3, 2 - 3", ">= 2, <= 3,>= 2, <= 3"}, + {"2 - 3, 4.0.0 - 5.1", ">= 2, <= 3,>= 4.0.0, <= 5.1"}, + } + + for _, tc := range tests { + o := rewriteRange(tc.c) + + if o != tc.nc { + t.Errorf("Range %s rewritten incorrectly as '%s'", tc.c, o) + } + } +} + +func TestIsX(t *testing.T) { + tests := []struct { + t string + c bool + }{ + {"A", false}, + {"%", false}, + {"X", true}, + {"x", true}, + {"*", true}, + } + + for _, tc := range tests { + a := isX(tc.t) + if a != tc.c { + t.Errorf("Function isX error on %s", tc.t) + } + } +} + +func TestConstraintsValidate(t *testing.T) { + tests := []struct { + constraint string + version string + check bool + }{ + {"*", "1.2.3", true}, + {"~0.0.0", "1.2.3", true}, + {"= 2.0", "1.2.3", false}, + {"= 2.0", "2.0.0", true}, + {"4.1", "4.1.0", true}, + {"4.1.x", "4.1.3", true}, + {"1.x", "1.4", true}, + {"!=4.1", "4.1.0", false}, + {"!=4.1", "5.1.0", true}, + {"!=4.x", "5.1.0", true}, + {"!=4.x", "4.1.0", false}, + {"!=4.1.x", "4.2.0", true}, + {"!=4.2.x", "4.2.3", false}, + {">1.1", "4.1.0", true}, + {">1.1", "1.1.0", false}, + {"<1.1", "0.1.0", true}, + {"<1.1", "1.1.0", false}, + {"<1.1", "1.1.1", false}, + {"<1.x", "1.1.1", true}, + {"<1.x", "2.1.1", false}, + {"<1.1.x", "1.2.1", false}, + {"<1.1.x", "1.1.500", true}, + {"<1.2.x", "1.1.1", true}, + {">=1.1", "4.1.0", true}, + {">=1.1", "1.1.0", true}, + {">=1.1", "0.0.9", false}, + {"<=1.1", "0.1.0", true}, + {"<=1.1", "1.1.0", true}, + {"<=1.x", "1.1.0", true}, + {"<=2.x", "3.1.0", false}, + {"<=1.1", "1.1.1", false}, + {"<=1.1.x", "1.2.500", false}, + {">1.1, <2", "1.1.1", true}, + {">1.1, <3", "4.3.2", false}, + {">=1.1, <2, !=1.2.3", "1.2.3", false}, + {">=1.1, <2, !=1.2.3 || > 3", "3.1.2", true}, + {">=1.1, <2, !=1.2.3 || >= 3", "3.0.0", true}, + {">=1.1, <2, !=1.2.3 || > 3", "3.0.0", false}, + {">=1.1, <2, !=1.2.3 || > 3", "1.2.3", false}, + {"1.1 - 2", "1.1.1", true}, + {"1.1-3", "4.3.2", false}, + {"^1.1", "1.1.1", true}, + {"^1.1", "1.1.1-alpha", false}, + {"^1.1.1-alpha", "1.1.1-beta", true}, + {"^1.1.1-beta", "1.1.1-alpha", false}, + {"^1.1", "4.3.2", false}, + {"^1.x", "1.1.1", true}, + {"^2.x", "1.1.1", false}, + {"^1.x", "2.1.1", false}, + {"~*", "2.1.1", true}, + {"~1.x", "2.1.1", false}, + {"~1.x", "1.3.5", true}, + {"~1.x", "1.3.5-beta", false}, + {"~1.3.6-alpha", "1.3.5-beta", false}, + {"~1.3.5-alpha", "1.3.5-beta", true}, + {"~1.3.5-beta", "1.3.5-alpha", false}, + {"~1.x", "1.4", true}, + {"~1.1", "1.1.1", true}, + {"~1.2.3", "1.2.5", true}, + {"~1.2.3", "1.2.2", false}, + {"~1.2.3", "1.3.2", false}, + {"~1.1", "1.2.3", false}, + {"~1.3", "2.4.5", false}, + } + + for _, tc := range tests { + c, err := NewConstraint(tc.constraint) + if err != nil { + t.Errorf("err: %s", err) + continue + } + + v, err := NewVersion(tc.version) + if err != nil { + t.Errorf("err: %s", err) + continue + } + + a, msgs := c.Validate(v) + if a != tc.check { + t.Errorf("Constraint '%s' failing with '%s'", tc.constraint, tc.version) + } else if !a && len(msgs) == 0 { + t.Errorf("%q failed with %q but no errors returned", tc.constraint, tc.version) + } + + // if a == false { + // for _, m := range msgs { + // t.Errorf("%s", m) + // } + // } + } + + v, err := NewVersion("1.2.3") + if err != nil { + t.Errorf("err: %s", err) + } + + c, err := NewConstraint("!= 1.2.5, ^2, <= 1.1.x") + if err != nil { + t.Errorf("err: %s", err) + } + + _, msgs := c.Validate(v) + if len(msgs) != 2 { + t.Error("Invalid number of validations found") + } + e := msgs[0].Error() + if e != "1.2.3 does not have same major version as 2" { + t.Error("Did not get expected message: 1.2.3 does not have same major version as 2") + } + e = msgs[1].Error() + if e != "1.2.3 is greater than 1.1.x" { + t.Error("Did not get expected message: 1.2.3 is greater than 1.1.x") + } + + tests2 := []struct { + constraint, version, msg string + }{ + {"= 2.0", "1.2.3", "1.2.3 is not equal to 2.0"}, + {"!=4.1", "4.1.0", "4.1.0 is equal to 4.1"}, + {"!=4.x", "4.1.0", "4.1.0 is equal to 4.x"}, + {"!=4.2.x", "4.2.3", "4.2.3 is equal to 4.2.x"}, + {">1.1", "1.1.0", "1.1.0 is less than or equal to 1.1"}, + {"<1.1", "1.1.0", "1.1.0 is greater than or equal to 1.1"}, + {"<1.1", "1.1.1", "1.1.1 is greater than or equal to 1.1"}, + {"<1.x", "2.1.1", "2.1.1 is greater than or equal to 1.x"}, + {"<1.1.x", "1.2.1", "1.2.1 is greater than or equal to 1.1.x"}, + {">=1.1", "0.0.9", "0.0.9 is less than 1.1"}, + {"<=2.x", "3.1.0", "3.1.0 is greater than 2.x"}, + {"<=1.1", "1.1.1", "1.1.1 is greater than 1.1"}, + {"<=1.1.x", "1.2.500", "1.2.500 is greater than 1.1.x"}, + {">1.1, <3", "4.3.2", "4.3.2 is greater than or equal to 3"}, + {">=1.1, <2, !=1.2.3", "1.2.3", "1.2.3 is equal to 1.2.3"}, + {">=1.1, <2, !=1.2.3 || > 3", "3.0.0", "3.0.0 is greater than or equal to 2"}, + {">=1.1, <2, !=1.2.3 || > 3", "1.2.3", "1.2.3 is equal to 1.2.3"}, + {"1.1 - 3", "4.3.2", "4.3.2 is greater than 3"}, + {"^1.1", "4.3.2", "4.3.2 does not have same major version as 1.1"}, + {"^2.x", "1.1.1", "1.1.1 does not have same major version as 2.x"}, + {"^1.x", "2.1.1", "2.1.1 does not have same major version as 1.x"}, + {"~1.x", "2.1.1", "2.1.1 does not have same major and minor version as 1.x"}, + {"~1.2.3", "1.2.2", "1.2.2 does not have same major and minor version as 1.2.3"}, + {"~1.2.3", "1.3.2", "1.3.2 does not have same major and minor version as 1.2.3"}, + {"~1.1", "1.2.3", "1.2.3 does not have same major and minor version as 1.1"}, + {"~1.3", "2.4.5", "2.4.5 does not have same major and minor version as 1.3"}, + } + + for _, tc := range tests2 { + c, err := NewConstraint(tc.constraint) + if err != nil { + t.Errorf("err: %s", err) + continue + } + + v, err := NewVersion(tc.version) + if err != nil { + t.Errorf("err: %s", err) + continue + } + + _, msgs := c.Validate(v) + e := msgs[0].Error() + if e != tc.msg { + t.Errorf("Did not get expected message %q: %s", tc.msg, e) + } + } +} diff --git a/vendor/github.com/Masterminds/semver/doc.go b/vendor/github.com/Masterminds/semver/doc.go new file mode 100644 index 0000000..e00f65e --- /dev/null +++ b/vendor/github.com/Masterminds/semver/doc.go @@ -0,0 +1,115 @@ +/* +Package semver provides the ability to work with Semantic Versions (http://semver.org) in Go. + +Specifically it provides the ability to: + + * Parse semantic versions + * Sort semantic versions + * Check if a semantic version fits within a set of constraints + * Optionally work with a `v` prefix + +Parsing Semantic Versions + +To parse a semantic version use the `NewVersion` function. For example, + + v, err := semver.NewVersion("1.2.3-beta.1+build345") + +If there is an error the version wasn't parseable. The version object has methods +to get the parts of the version, compare it to other versions, convert the +version back into a string, and get the original string. For more details +please see the documentation at https://godoc.org/github.com/Masterminds/semver. + +Sorting Semantic Versions + +A set of versions can be sorted using the `sort` package from the standard library. +For example, + + raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",} + vs := make([]*semver.Version, len(raw)) + for i, r := range raw { + v, err := semver.NewVersion(r) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + vs[i] = v + } + + sort.Sort(semver.Collection(vs)) + +Checking Version Constraints + +Checking a version against version constraints is one of the most featureful +parts of the package. + + c, err := semver.NewConstraint(">= 1.2.3") + if err != nil { + // Handle constraint not being parseable. + } + + v, _ := semver.NewVersion("1.3") + if err != nil { + // Handle version not being parseable. + } + // Check if the version meets the constraints. The a variable will be true. + a := c.Check(v) + +Basic Comparisons + +There are two elements to the comparisons. First, a comparison string is a list +of comma separated and comparisons. These are then separated by || separated or +comparisons. For example, `">= 1.2, < 3.0.0 || >= 4.2.3"` is looking for a +comparison that's greater than or equal to 1.2 and less than 3.0.0 or is +greater than or equal to 4.2.3. + +The basic comparisons are: + + * `=`: equal (aliased to no operator) + * `!=`: not equal + * `>`: greater than + * `<`: less than + * `>=`: greater than or equal to + * `<=`: less than or equal to + +Hyphen Range Comparisons + +There are multiple methods to handle ranges and the first is hyphens ranges. +These look like: + + * `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5` + * `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5` + +Wildcards In Comparisons + +The `x`, `X`, and `*` characters can be used as a wildcard character. This works +for all comparison operators. When used on the `=` operator it falls +back to the pack level comparison (see tilde below). For example, + + * `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` + * `>= 1.2.x` is equivalent to `>= 1.2.0` + * `<= 2.x` is equivalent to `<= 3` + * `*` is equivalent to `>= 0.0.0` + +Tilde Range Comparisons (Patch) + +The tilde (`~`) comparison operator is for patch level ranges when a minor +version is specified and major level changes when the minor number is missing. +For example, + + * `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0` + * `~1` is equivalent to `>= 1, < 2` + * `~2.3` is equivalent to `>= 2.3, < 2.4` + * `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` + * `~1.x` is equivalent to `>= 1, < 2` + +Caret Range Comparisons (Major) + +The caret (`^`) comparison operator is for major level changes. This is useful +when comparisons of API versions as a major change is API breaking. For example, + + * `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0` + * `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0` + * `^2.3` is equivalent to `>= 2.3, < 3` + * `^2.x` is equivalent to `>= 2.0.0, < 3` +*/ +package semver diff --git a/vendor/github.com/Masterminds/semver/version.go b/vendor/github.com/Masterminds/semver/version.go new file mode 100644 index 0000000..28b26ac --- /dev/null +++ b/vendor/github.com/Masterminds/semver/version.go @@ -0,0 +1,375 @@ +package semver + +import ( + "bytes" + "errors" + "fmt" + "regexp" + "strconv" + "strings" +) + +// The compiled version of the regex created at init() is cached here so it +// only needs to be created once. +var versionRegex *regexp.Regexp +var validPrereleaseRegex *regexp.Regexp + +var ( + // ErrInvalidSemVer is returned a version is found to be invalid when + // being parsed. + ErrInvalidSemVer = errors.New("Invalid Semantic Version") + + // ErrInvalidMetadata is returned when the metadata is an invalid format + ErrInvalidMetadata = errors.New("Invalid Metadata string") + + // ErrInvalidPrerelease is returned when the pre-release is an invalid format + ErrInvalidPrerelease = errors.New("Invalid Prerelease string") +) + +// SemVerRegex is the regular expression used to parse a semantic version. +const SemVerRegex string = `v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` + + `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + + `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + +// ValidPrerelease is the regular expression which validates +// both prerelease and metadata values. +const ValidPrerelease string = `^([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*)` + +// Version represents a single semantic version. +type Version struct { + major, minor, patch int64 + pre string + metadata string + original string +} + +func init() { + versionRegex = regexp.MustCompile("^" + SemVerRegex + "$") + validPrereleaseRegex = regexp.MustCompile(ValidPrerelease) +} + +// NewVersion parses a given version and returns an instance of Version or +// an error if unable to parse the version. +func NewVersion(v string) (*Version, error) { + m := versionRegex.FindStringSubmatch(v) + if m == nil { + return nil, ErrInvalidSemVer + } + + sv := &Version{ + metadata: m[8], + pre: m[5], + original: v, + } + + var temp int64 + temp, err := strconv.ParseInt(m[1], 10, 32) + if err != nil { + return nil, fmt.Errorf("Error parsing version segment: %s", err) + } + sv.major = temp + + if m[2] != "" { + temp, err = strconv.ParseInt(strings.TrimPrefix(m[2], "."), 10, 32) + if err != nil { + return nil, fmt.Errorf("Error parsing version segment: %s", err) + } + sv.minor = temp + } else { + sv.minor = 0 + } + + if m[3] != "" { + temp, err = strconv.ParseInt(strings.TrimPrefix(m[3], "."), 10, 32) + if err != nil { + return nil, fmt.Errorf("Error parsing version segment: %s", err) + } + sv.patch = temp + } else { + sv.patch = 0 + } + + return sv, nil +} + +// MustParse parses a given version and panics on error. +func MustParse(v string) *Version { + sv, err := NewVersion(v) + if err != nil { + panic(err) + } + return sv +} + +// String converts a Version object to a string. +// Note, if the original version contained a leading v this version will not. +// See the Original() method to retrieve the original value. Semantic Versions +// don't contain a leading v per the spec. Instead it's optional on +// impelementation. +func (v *Version) String() string { + var buf bytes.Buffer + + fmt.Fprintf(&buf, "%d.%d.%d", v.major, v.minor, v.patch) + if v.pre != "" { + fmt.Fprintf(&buf, "-%s", v.pre) + } + if v.metadata != "" { + fmt.Fprintf(&buf, "+%s", v.metadata) + } + + return buf.String() +} + +// Original returns the original value passed in to be parsed. +func (v *Version) Original() string { + return v.original +} + +// Major returns the major version. +func (v *Version) Major() int64 { + return v.major +} + +// Minor returns the minor version. +func (v *Version) Minor() int64 { + return v.minor +} + +// Patch returns the patch version. +func (v *Version) Patch() int64 { + return v.patch +} + +// Prerelease returns the pre-release version. +func (v *Version) Prerelease() string { + return v.pre +} + +// Metadata returns the metadata on the version. +func (v *Version) Metadata() string { + return v.metadata +} + +// originalVPrefix returns the original 'v' prefix if any. +func (v *Version) originalVPrefix() string { + + // Note, only lowercase v is supported as a prefix by the parser. + if v.original != "" && v.original[:1] == "v" { + return v.original[:1] + } + return "" +} + +// IncPatch produces the next patch version. +// If the current version does not have prerelease/metadata information, +// it unsets metadata and prerelease values, increments patch number. +// If the current version has any of prerelease or metadata information, +// it unsets both values and keeps curent patch value +func (v Version) IncPatch() Version { + vNext := v + // according to http://semver.org/#spec-item-9 + // Pre-release versions have a lower precedence than the associated normal version. + // according to http://semver.org/#spec-item-10 + // Build metadata SHOULD be ignored when determining version precedence. + if v.pre != "" { + vNext.metadata = "" + vNext.pre = "" + } else { + vNext.metadata = "" + vNext.pre = "" + vNext.patch = v.patch + 1 + } + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext +} + +// IncMinor produces the next minor version. +// Sets patch to 0. +// Increments minor number. +// Unsets metadata. +// Unsets prerelease status. +func (v Version) IncMinor() Version { + vNext := v + vNext.metadata = "" + vNext.pre = "" + vNext.patch = 0 + vNext.minor = v.minor + 1 + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext +} + +// IncMajor produces the next major version. +// Sets patch to 0. +// Sets minor to 0. +// Increments major number. +// Unsets metadata. +// Unsets prerelease status. +func (v Version) IncMajor() Version { + vNext := v + vNext.metadata = "" + vNext.pre = "" + vNext.patch = 0 + vNext.minor = 0 + vNext.major = v.major + 1 + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext +} + +// SetPrerelease defines the prerelease value. +// Value must not include the required 'hypen' prefix. +func (v Version) SetPrerelease(prerelease string) (Version, error) { + vNext := v + if len(prerelease) > 0 && !validPrereleaseRegex.MatchString(prerelease) { + return vNext, ErrInvalidPrerelease + } + vNext.pre = prerelease + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext, nil +} + +// SetMetadata defines metadata value. +// Value must not include the required 'plus' prefix. +func (v Version) SetMetadata(metadata string) (Version, error) { + vNext := v + if len(metadata) > 0 && !validPrereleaseRegex.MatchString(metadata) { + return vNext, ErrInvalidMetadata + } + vNext.metadata = metadata + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext, nil +} + +// LessThan tests if one version is less than another one. +func (v *Version) LessThan(o *Version) bool { + return v.Compare(o) < 0 +} + +// GreaterThan tests if one version is greater than another one. +func (v *Version) GreaterThan(o *Version) bool { + return v.Compare(o) > 0 +} + +// Equal tests if two versions are equal to each other. +// Note, versions can be equal with different metadata since metadata +// is not considered part of the comparable version. +func (v *Version) Equal(o *Version) bool { + return v.Compare(o) == 0 +} + +// Compare compares this version to another one. It returns -1, 0, or 1 if +// the version smaller, equal, or larger than the other version. +// +// Versions are compared by X.Y.Z. Build metadata is ignored. Prerelease is +// lower than the version without a prerelease. +func (v *Version) Compare(o *Version) int { + // Compare the major, minor, and patch version for differences. If a + // difference is found return the comparison. + if d := compareSegment(v.Major(), o.Major()); d != 0 { + return d + } + if d := compareSegment(v.Minor(), o.Minor()); d != 0 { + return d + } + if d := compareSegment(v.Patch(), o.Patch()); d != 0 { + return d + } + + // At this point the major, minor, and patch versions are the same. + ps := v.pre + po := o.Prerelease() + + if ps == "" && po == "" { + return 0 + } + if ps == "" { + return 1 + } + if po == "" { + return -1 + } + + return comparePrerelease(ps, po) +} + +func compareSegment(v, o int64) int { + if v < o { + return -1 + } + if v > o { + return 1 + } + + return 0 +} + +func comparePrerelease(v, o string) int { + + // split the prelease versions by their part. The separator, per the spec, + // is a . + sparts := strings.Split(v, ".") + oparts := strings.Split(o, ".") + + // Find the longer length of the parts to know how many loop iterations to + // go through. + slen := len(sparts) + olen := len(oparts) + + l := slen + if olen > slen { + l = olen + } + + // Iterate over each part of the prereleases to compare the differences. + for i := 0; i < l; i++ { + // Since the lentgh of the parts can be different we need to create + // a placeholder. This is to avoid out of bounds issues. + stemp := "" + if i < slen { + stemp = sparts[i] + } + + otemp := "" + if i < olen { + otemp = oparts[i] + } + + d := comparePrePart(stemp, otemp) + if d != 0 { + return d + } + } + + // Reaching here means two versions are of equal value but have different + // metadata (the part following a +). They are not identical in string form + // but the version comparison finds them to be equal. + return 0 +} + +func comparePrePart(s, o string) int { + // Fastpath if they are equal + if s == o { + return 0 + } + + // When s or o are empty we can use the other in an attempt to determine + // the response. + if o == "" { + _, n := strconv.ParseInt(s, 10, 64) + if n != nil { + return -1 + } + return 1 + } + if s == "" { + _, n := strconv.ParseInt(o, 10, 64) + if n != nil { + return 1 + } + return -1 + } + + if s > o { + return 1 + } + return -1 +} diff --git a/vendor/github.com/Masterminds/semver/version_test.go b/vendor/github.com/Masterminds/semver/version_test.go new file mode 100644 index 0000000..0e02a6a --- /dev/null +++ b/vendor/github.com/Masterminds/semver/version_test.go @@ -0,0 +1,450 @@ +package semver + +import ( + "testing" +) + +func TestNewVersion(t *testing.T) { + tests := []struct { + version string + err bool + }{ + {"1.2.3", false}, + {"v1.2.3", false}, + {"1.0", false}, + {"v1.0", false}, + {"1", false}, + {"v1", false}, + {"1.2.beta", true}, + {"v1.2.beta", true}, + {"foo", true}, + {"1.2-5", false}, + {"v1.2-5", false}, + {"1.2-beta.5", false}, + {"v1.2-beta.5", false}, + {"\n1.2", true}, + {"\nv1.2", true}, + {"1.2.0-x.Y.0+metadata", false}, + {"v1.2.0-x.Y.0+metadata", false}, + {"1.2.0-x.Y.0+metadata-width-hypen", false}, + {"v1.2.0-x.Y.0+metadata-width-hypen", false}, + {"1.2.3-rc1-with-hypen", false}, + {"v1.2.3-rc1-with-hypen", false}, + {"1.2.3.4", true}, + {"v1.2.3.4", true}, + } + + for _, tc := range tests { + _, err := NewVersion(tc.version) + if tc.err && err == nil { + t.Fatalf("expected error for version: %s", tc.version) + } else if !tc.err && err != nil { + t.Fatalf("error for version %s: %s", tc.version, err) + } + } +} + +func TestOriginal(t *testing.T) { + tests := []string{ + "1.2.3", + "v1.2.3", + "1.0", + "v1.0", + "1", + "v1", + "1.2-5", + "v1.2-5", + "1.2-beta.5", + "v1.2-beta.5", + "1.2.0-x.Y.0+metadata", + "v1.2.0-x.Y.0+metadata", + "1.2.0-x.Y.0+metadata-width-hypen", + "v1.2.0-x.Y.0+metadata-width-hypen", + "1.2.3-rc1-with-hypen", + "v1.2.3-rc1-with-hypen", + } + + for _, tc := range tests { + v, err := NewVersion(tc) + if err != nil { + t.Errorf("Error parsing version %s", tc) + } + + o := v.Original() + if o != tc { + t.Errorf("Error retrieving originl. Expected '%s' but got '%s'", tc, v) + } + } +} + +func TestParts(t *testing.T) { + v, err := NewVersion("1.2.3-beta.1+build.123") + if err != nil { + t.Error("Error parsing version 1.2.3-beta.1+build.123") + } + + if v.Major() != 1 { + t.Error("Major() returning wrong value") + } + if v.Minor() != 2 { + t.Error("Minor() returning wrong value") + } + if v.Patch() != 3 { + t.Error("Patch() returning wrong value") + } + if v.Prerelease() != "beta.1" { + t.Error("Prerelease() returning wrong value") + } + if v.Metadata() != "build.123" { + t.Error("Metadata() returning wrong value") + } +} + +func TestString(t *testing.T) { + tests := []struct { + version string + expected string + }{ + {"1.2.3", "1.2.3"}, + {"v1.2.3", "1.2.3"}, + {"1.0", "1.0.0"}, + {"v1.0", "1.0.0"}, + {"1", "1.0.0"}, + {"v1", "1.0.0"}, + {"1.2-5", "1.2.0-5"}, + {"v1.2-5", "1.2.0-5"}, + {"1.2-beta.5", "1.2.0-beta.5"}, + {"v1.2-beta.5", "1.2.0-beta.5"}, + {"1.2.0-x.Y.0+metadata", "1.2.0-x.Y.0+metadata"}, + {"v1.2.0-x.Y.0+metadata", "1.2.0-x.Y.0+metadata"}, + {"1.2.0-x.Y.0+metadata-width-hypen", "1.2.0-x.Y.0+metadata-width-hypen"}, + {"v1.2.0-x.Y.0+metadata-width-hypen", "1.2.0-x.Y.0+metadata-width-hypen"}, + {"1.2.3-rc1-with-hypen", "1.2.3-rc1-with-hypen"}, + {"v1.2.3-rc1-with-hypen", "1.2.3-rc1-with-hypen"}, + } + + for _, tc := range tests { + v, err := NewVersion(tc.version) + if err != nil { + t.Errorf("Error parsing version %s", tc) + } + + s := v.String() + if s != tc.expected { + t.Errorf("Error generating string. Expected '%s' but got '%s'", tc.expected, s) + } + } +} + +func TestCompare(t *testing.T) { + tests := []struct { + v1 string + v2 string + expected int + }{ + {"1.2.3", "1.5.1", -1}, + {"2.2.3", "1.5.1", 1}, + {"2.2.3", "2.2.2", 1}, + {"3.2-beta", "3.2-beta", 0}, + {"1.3", "1.1.4", 1}, + {"4.2", "4.2-beta", 1}, + {"4.2-beta", "4.2", -1}, + {"4.2-alpha", "4.2-beta", -1}, + {"4.2-alpha", "4.2-alpha", 0}, + {"4.2-beta.2", "4.2-beta.1", 1}, + {"4.2-beta2", "4.2-beta1", 1}, + {"4.2-beta", "4.2-beta.2", -1}, + {"4.2-beta", "4.2-beta.foo", 1}, + {"4.2-beta.2", "4.2-beta", 1}, + {"4.2-beta.foo", "4.2-beta", -1}, + {"1.2+bar", "1.2+baz", 0}, + } + + for _, tc := range tests { + v1, err := NewVersion(tc.v1) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + v2, err := NewVersion(tc.v2) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + a := v1.Compare(v2) + e := tc.expected + if a != e { + t.Errorf( + "Comparison of '%s' and '%s' failed. Expected '%d', got '%d'", + tc.v1, tc.v2, e, a, + ) + } + } +} + +func TestLessThan(t *testing.T) { + tests := []struct { + v1 string + v2 string + expected bool + }{ + {"1.2.3", "1.5.1", true}, + {"2.2.3", "1.5.1", false}, + {"3.2-beta", "3.2-beta", false}, + } + + for _, tc := range tests { + v1, err := NewVersion(tc.v1) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + v2, err := NewVersion(tc.v2) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + a := v1.LessThan(v2) + e := tc.expected + if a != e { + t.Errorf( + "Comparison of '%s' and '%s' failed. Expected '%t', got '%t'", + tc.v1, tc.v2, e, a, + ) + } + } +} + +func TestGreaterThan(t *testing.T) { + tests := []struct { + v1 string + v2 string + expected bool + }{ + {"1.2.3", "1.5.1", false}, + {"2.2.3", "1.5.1", true}, + {"3.2-beta", "3.2-beta", false}, + } + + for _, tc := range tests { + v1, err := NewVersion(tc.v1) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + v2, err := NewVersion(tc.v2) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + a := v1.GreaterThan(v2) + e := tc.expected + if a != e { + t.Errorf( + "Comparison of '%s' and '%s' failed. Expected '%t', got '%t'", + tc.v1, tc.v2, e, a, + ) + } + } +} + +func TestEqual(t *testing.T) { + tests := []struct { + v1 string + v2 string + expected bool + }{ + {"1.2.3", "1.5.1", false}, + {"2.2.3", "1.5.1", false}, + {"3.2-beta", "3.2-beta", true}, + {"3.2-beta+foo", "3.2-beta+bar", true}, + } + + for _, tc := range tests { + v1, err := NewVersion(tc.v1) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + v2, err := NewVersion(tc.v2) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + a := v1.Equal(v2) + e := tc.expected + if a != e { + t.Errorf( + "Comparison of '%s' and '%s' failed. Expected '%t', got '%t'", + tc.v1, tc.v2, e, a, + ) + } + } +} + +func TestInc(t *testing.T) { + tests := []struct { + v1 string + expected string + how string + expectedOriginal string + }{ + {"1.2.3", "1.2.4", "patch", "1.2.4"}, + {"v1.2.4", "1.2.5", "patch", "v1.2.5"}, + {"1.2.3", "1.3.0", "minor", "1.3.0"}, + {"v1.2.4", "1.3.0", "minor", "v1.3.0"}, + {"1.2.3", "2.0.0", "major", "2.0.0"}, + {"v1.2.4", "2.0.0", "major", "v2.0.0"}, + {"1.2.3+meta", "1.2.4", "patch", "1.2.4"}, + {"1.2.3-beta+meta", "1.2.3", "patch", "1.2.3"}, + {"v1.2.4-beta+meta", "1.2.4", "patch", "v1.2.4"}, + {"1.2.3-beta+meta", "1.3.0", "minor", "1.3.0"}, + {"v1.2.4-beta+meta", "1.3.0", "minor", "v1.3.0"}, + {"1.2.3-beta+meta", "2.0.0", "major", "2.0.0"}, + {"v1.2.4-beta+meta", "2.0.0", "major", "v2.0.0"}, + } + + for _, tc := range tests { + v1, err := NewVersion(tc.v1) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + var v2 Version + switch tc.how { + case "patch": + v2 = v1.IncPatch() + case "minor": + v2 = v1.IncMinor() + case "major": + v2 = v1.IncMajor() + } + + a := v2.String() + e := tc.expected + if a != e { + t.Errorf( + "Inc %q failed. Expected %q got %q", + tc.how, e, a, + ) + } + + a = v2.Original() + e = tc.expectedOriginal + if a != e { + t.Errorf( + "Inc %q failed. Expected original %q got %q", + tc.how, e, a, + ) + } + } +} + +func TestSetPrerelease(t *testing.T) { + tests := []struct { + v1 string + prerelease string + expectedVersion string + expectedPrerelease string + expectedOriginal string + expectedErr error + }{ + {"1.2.3", "**", "1.2.3", "", "1.2.3", ErrInvalidPrerelease}, + {"1.2.3", "beta", "1.2.3-beta", "beta", "1.2.3-beta", nil}, + {"v1.2.4", "beta", "1.2.4-beta", "beta", "v1.2.4-beta", nil}, + } + + for _, tc := range tests { + v1, err := NewVersion(tc.v1) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + v2, err := v1.SetPrerelease(tc.prerelease) + if err != tc.expectedErr { + t.Errorf("Expected to get err=%s, but got err=%s", tc.expectedErr, err) + } + + a := v2.Prerelease() + e := tc.expectedPrerelease + if a != e { + t.Errorf("Expected prerelease value=%q, but got %q", e, a) + } + + a = v2.String() + e = tc.expectedVersion + if a != e { + t.Errorf("Expected version string=%q, but got %q", e, a) + } + + a = v2.Original() + e = tc.expectedOriginal + if a != e { + t.Errorf("Expected version original=%q, but got %q", e, a) + } + } +} + +func TestSetMetadata(t *testing.T) { + tests := []struct { + v1 string + metadata string + expectedVersion string + expectedMetadata string + expectedOriginal string + expectedErr error + }{ + {"1.2.3", "**", "1.2.3", "", "1.2.3", ErrInvalidMetadata}, + {"1.2.3", "meta", "1.2.3+meta", "meta", "1.2.3+meta", nil}, + {"v1.2.4", "meta", "1.2.4+meta", "meta", "v1.2.4+meta", nil}, + } + + for _, tc := range tests { + v1, err := NewVersion(tc.v1) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + v2, err := v1.SetMetadata(tc.metadata) + if err != tc.expectedErr { + t.Errorf("Expected to get err=%s, but got err=%s", tc.expectedErr, err) + } + + a := v2.Metadata() + e := tc.expectedMetadata + if a != e { + t.Errorf("Expected metadata value=%q, but got %q", e, a) + } + + a = v2.String() + e = tc.expectedVersion + if e != a { + t.Errorf("Expected version string=%q, but got %q", e, a) + } + + a = v2.Original() + e = tc.expectedOriginal + if a != e { + t.Errorf("Expected version original=%q, but got %q", e, a) + } + } +} + +func TestOriginalVPrefix(t *testing.T) { + tests := []struct { + version string + vprefix string + }{ + {"1.2.3", ""}, + {"v1.2.4", "v"}, + } + + for _, tc := range tests { + v1, _ := NewVersion(tc.version) + a := v1.originalVPrefix() + e := tc.vprefix + if a != e { + t.Errorf("Expected vprefix=%q, but got %q", e, a) + } + } +} diff --git a/vendor/github.com/Masterminds/sprig/.gitignore b/vendor/github.com/Masterminds/sprig/.gitignore index 48b8bf9..5e3002f 100644 --- a/vendor/github.com/Masterminds/sprig/.gitignore +++ b/vendor/github.com/Masterminds/sprig/.gitignore @@ -1 +1,2 @@ vendor/ +/.glide diff --git a/vendor/github.com/Masterminds/sprig/.travis.yml b/vendor/github.com/Masterminds/sprig/.travis.yml index 3caed53..933b295 100644 --- a/vendor/github.com/Masterminds/sprig/.travis.yml +++ b/vendor/github.com/Masterminds/sprig/.travis.yml @@ -1,9 +1,9 @@ language: go go: - - 1.3 - - 1.4 - - 1.5 + - 1.6 + - 1.7 + - 1.8 - tip # Setting sudo access to false will let Travis CI use containers rather than @@ -12,6 +12,9 @@ go: # - http://docs.travis-ci.com/user/workers/standard-infrastructure/ sudo: false +script: + - make setup test + notifications: webhooks: urls: diff --git a/vendor/github.com/Masterminds/sprig/Makefile b/vendor/github.com/Masterminds/sprig/Makefile new file mode 100644 index 0000000..63a93fd --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/Makefile @@ -0,0 +1,13 @@ + +HAS_GLIDE := $(shell command -v glide;) + +.PHONY: test +test: + go test -v . + +.PHONY: setup +setup: +ifndef HAS_GLIDE + go get -u github.com/Masterminds/glide +endif + glide install diff --git a/vendor/github.com/Masterminds/sprig/README.md b/vendor/github.com/Masterminds/sprig/README.md index a80835f..097f1c1 100644 --- a/vendor/github.com/Masterminds/sprig/README.md +++ b/vendor/github.com/Masterminds/sprig/README.md @@ -108,6 +108,7 @@ parse, it returns the time unaltered. See `time.ParseDuration` for info on durat "one anchovy" "many anchovies"` - uuidv4: Generate a UUID v4 string - sha256sum: Generate a hex encoded sha256 hash of the input +- toString: Convert something to a string ### String Slice Functions: @@ -115,6 +116,10 @@ parse, it returns the time unaltered. See `time.ParseDuration` for info on durat - split: strings.Split, but as `split SEP STRING`. The results are returned as a map with the indexes set to _N, where N is an integer starting from 0. Use it like this: `{{$v := "foo/bar/baz" | split "/"}}{{$v._0}}` (Prints `foo`) +- splitList: strings.Split, but as `split SEP STRING`. The results are returned + as an array. +- toStrings: convert a list to a list of strings. 'list 1 2 3 | toStrings' produces '["1" "2" "3"]' +- sortAlpha: sort a list lexicographically. ### Integer Slice Functions: @@ -141,12 +146,26 @@ parse, it returns the time unaltered. See `time.ParseDuration` for info on durat no clear empty condition). For everything else, nil value triggers a default. - empty: Returns true if the given value is the zero value for that type. Structs are always non-empty. +- coalesce: Given a list of items, return the first non-empty one. + This follows the same rules as 'empty'. `{{ coalesce .someVal 0 "hello" }}` + will return `.someVal` if set, or else return "hello". The 0 is skipped + because it is an empty value. +- compact: Return a copy of a list with all of the empty values removed. + `list 0 1 2 "" | compact` will return `[1 2]` ### OS: - env: Read an environment variable. - expandenv: Expand all environment variables in a string. +### File Paths: +- base: Return the last element of a path. https://golang.org/pkg/path#Base +- dir: Remove the last element of a path. https://golang.org/pkg/path#Dir +- clean: Clean a path to the shortest equivalent name. (e.g. remove "foo/.." + from "foo/../bar.html") https://golang.org/pkg/path#Clean +- ext: Get the extension for a file path: https://golang.org/pkg/path#Ext +- isAbs: Returns true if a path is absolute: https://golang.org/pkg/path#IsAbs + ### Encoding: - b32enc: Encode a string into a Base32 string @@ -156,8 +175,11 @@ parse, it returns the time unaltered. See `time.ParseDuration` for info on durat ### Data Structures: -- tuple: A sequence of related objects. It is implemented as a - `[]interface{}`, where each item can be accessed using `index`. +- tuple: Takes an arbitrary list of items and returns a slice of items. Its + tuple-ish properties are mainly gained through the template idiom, and not + through an API provided here. WARNING: The implementation of tuple will + change in the future. +- list: An arbitrary ordered list of items. (This is prefered over tuple.) - dict: Takes a list of name/values and returns a map[string]interface{}. The first parameter is converted to a string and stored as a key, the second parameter is treated as the value. And so on, with odds as keys and @@ -165,7 +187,43 @@ parse, it returns the time unaltered. See `time.ParseDuration` for info on durat be assigned the empty string. Non-string keys are converted to strings as follows: []byte are converted, fmt.Stringers will have String() called. errors will have Error() called. All others will be passed through - fmt.Sprtinf("%v"). + fmt.Sprtinf("%v"). _dicts are unordered_. + +List: + +``` +{{$t := list 1 "a" "foo"}} +{{index $t 2}}{{index $t 0 }}{{index $t 1}} +{{/* Prints foo1a *}} +``` + +Dict: +``` +{{ $t := map "key1" "value1" "key2" "value2" }} +{{ $t.key2 }} +{{ /* Prints value2 *}} +``` + + +### Lists Functions: + +These are used to manipulate lists: `{{ list 1 2 3 | reverse | first }}` + +- first: Get the first item in a 'list'. 'list 1 2 3 | first' prints '1' +- last: Get the last item in a 'list': 'list 1 2 3 | last ' prints '3' +- rest: Get all but the first item in a list: 'list 1 2 3 | rest' returns '[2 3]' +- initial: Get all but the last item in a list: 'list 1 2 3 | initial' returns '[1 2]' +- append: Add an item to the end of a list: 'append $list 4' adds '4' to the end of '$list' +- prepend: Add an item to the beginning of a list: 'prepend $list 4' puts 4 at the beginning of the list. +- reverse: Reverse the items in a list. +- uniq: Remove duplicates from a list. +- without: Return a list with the given values removed: 'without (list 1 2 3) 1' would return '[2 3]' +- has: Return 'tru' if the item is found in the list: 'has "foo" $list' will return 'true' if the list contains "foo" + +### Dict Functions: + +These are used to manipulate dicts. + - set: Takes a dict, a key, and a value, and sets that key/value pair in the dict. `set $dict $key $value`. For convenience, it returns the dict, even though the dict was modified in place. @@ -173,12 +231,10 @@ parse, it returns the time unaltered. See `time.ParseDuration` for info on durat dict. `unset $dict $key`. This returns the dict for convenience. - hasKey: Takes a dict and a key, and returns boolean true if the key is in the dict. - -``` -{{$t := tuple 1 "a" "foo"}} -{{index $t 2}}{{index $t 0 }}{{index $t 1}} -{{/* Prints foo1a *}} -``` +- pluck: Given a key and one or more maps, get all of the values for that key. +- keys: Get an array of all of the keys in a dict. Order is not guaranteed. +- pick: Select just the given keys out of the dict, and return a new dict. +- omit: Return a dict without the given keys. ### Reflection: @@ -215,6 +271,23 @@ string is passed in, functions will attempt to conver with - min: Return the smallest of a series of integers. `min 1 2 3` returns `1`. +### Cryptographic Functions: + +- derivePassword: Derive a password from the given parameters according to the "Master Password" algorithm (http://masterpasswordapp.com/algorithm.html) + Given parameters (in order) are: + `counter` (starting with 1), `password_type` (maximum, long, medium, short, basic, or pin), `password`, + `user`, and `site`. The following line generates a long password for the user "user" and with a master-password "password" on the site "example.com": + ``` + {{ derivePassword 1 "long" "password" "user" "example.com" }} + ``` + +## SemVer Functions: + +These functions provide version parsing and comparisons for SemVer 2 version +strings. + +- semver: Parse a semantic version and return a Version object. +- semverCompare: Compare a SemVer range to a particular version. ## Principles: diff --git a/vendor/github.com/Masterminds/sprig/crypto.go b/vendor/github.com/Masterminds/sprig/crypto.go new file mode 100644 index 0000000..a935b6c --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/crypto.go @@ -0,0 +1,148 @@ +package sprig + +import ( + "bytes" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/hmac" + "crypto/rand" + "crypto/rsa" + "crypto/sha256" + "crypto/x509" + "encoding/asn1" + "encoding/binary" + "encoding/hex" + "encoding/pem" + "fmt" + "math/big" + + uuid "github.com/satori/go.uuid" + "golang.org/x/crypto/scrypt" +) + +func sha256sum(input string) string { + hash := sha256.Sum256([]byte(input)) + return hex.EncodeToString(hash[:]) +} + +// uuidv4 provides a safe and secure UUID v4 implementation +func uuidv4() string { + return fmt.Sprintf("%s", uuid.NewV4()) +} + +var master_password_seed = "com.lyndir.masterpassword" + +var password_type_templates = map[string][][]byte{ + "maximum": {[]byte("anoxxxxxxxxxxxxxxxxx"), []byte("axxxxxxxxxxxxxxxxxno")}, + "long": {[]byte("CvcvnoCvcvCvcv"), []byte("CvcvCvcvnoCvcv"), []byte("CvcvCvcvCvcvno"), []byte("CvccnoCvcvCvcv"), []byte("CvccCvcvnoCvcv"), + []byte("CvccCvcvCvcvno"), []byte("CvcvnoCvccCvcv"), []byte("CvcvCvccnoCvcv"), []byte("CvcvCvccCvcvno"), []byte("CvcvnoCvcvCvcc"), + []byte("CvcvCvcvnoCvcc"), []byte("CvcvCvcvCvccno"), []byte("CvccnoCvccCvcv"), []byte("CvccCvccnoCvcv"), []byte("CvccCvccCvcvno"), + []byte("CvcvnoCvccCvcc"), []byte("CvcvCvccnoCvcc"), []byte("CvcvCvccCvccno"), []byte("CvccnoCvcvCvcc"), []byte("CvccCvcvnoCvcc"), + []byte("CvccCvcvCvccno")}, + "medium": {[]byte("CvcnoCvc"), []byte("CvcCvcno")}, + "short": {[]byte("Cvcn")}, + "basic": {[]byte("aaanaaan"), []byte("aannaaan"), []byte("aaannaaa")}, + "pin": {[]byte("nnnn")}, +} + +var template_characters = map[byte]string{ + 'V': "AEIOU", + 'C': "BCDFGHJKLMNPQRSTVWXYZ", + 'v': "aeiou", + 'c': "bcdfghjklmnpqrstvwxyz", + 'A': "AEIOUBCDFGHJKLMNPQRSTVWXYZ", + 'a': "AEIOUaeiouBCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz", + 'n': "0123456789", + 'o': "@&%?,=[]_:-+*$#!'^~;()/.", + 'x': "AEIOUaeiouBCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz0123456789!@#$%^&*()", +} + +func derivePassword(counter uint32, password_type, password, user, site string) string { + var templates = password_type_templates[password_type] + if templates == nil { + return fmt.Sprintf("cannot find password template %s", password_type) + } + + var buffer bytes.Buffer + buffer.WriteString(master_password_seed) + binary.Write(&buffer, binary.BigEndian, uint32(len(user))) + buffer.WriteString(user) + + salt := buffer.Bytes() + key, err := scrypt.Key([]byte(password), salt, 32768, 8, 2, 64) + if err != nil { + return fmt.Sprintf("failed to derive password: %s", err) + } + + buffer.Truncate(len(master_password_seed)) + binary.Write(&buffer, binary.BigEndian, uint32(len(site))) + buffer.WriteString(site) + binary.Write(&buffer, binary.BigEndian, counter) + + var hmacv = hmac.New(sha256.New, key) + hmacv.Write(buffer.Bytes()) + var seed = hmacv.Sum(nil) + var temp = templates[int(seed[0])%len(templates)] + + buffer.Truncate(0) + for i, element := range temp { + pass_chars := template_characters[element] + pass_char := pass_chars[int(seed[i+1])%len(pass_chars)] + buffer.WriteByte(pass_char) + } + + return buffer.String() +} + +func generatePrivateKey(typ string) string { + var priv interface{} + var err error + switch typ { + case "", "rsa": + // good enough for government work + priv, err = rsa.GenerateKey(rand.Reader, 4096) + case "dsa": + key := new(dsa.PrivateKey) + // again, good enough for government work + if err = dsa.GenerateParameters(&key.Parameters, rand.Reader, dsa.L2048N256); err != nil { + return fmt.Sprintf("failed to generate dsa params: %s", err) + } + err = dsa.GenerateKey(key, rand.Reader) + priv = key + case "ecdsa": + // again, good enough for government work + priv, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + default: + return "Unknown type " + typ + } + if err != nil { + return fmt.Sprintf("failed to generate private key: %s", err) + } + + return string(pem.EncodeToMemory(pemBlockForKey(priv))) +} + +type DSAKeyFormat struct { + Version int + P, Q, G, Y, X *big.Int +} + +func pemBlockForKey(priv interface{}) *pem.Block { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} + case *dsa.PrivateKey: + val := DSAKeyFormat{ + P: k.P, Q: k.Q, G: k.G, + Y: k.Y, X: k.X, + } + bytes, _ := asn1.Marshal(val) + return &pem.Block{Type: "DSA PRIVATE KEY", Bytes: bytes} + case *ecdsa.PrivateKey: + b, _ := x509.MarshalECPrivateKey(k) + return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + default: + return nil + } +} diff --git a/vendor/github.com/Masterminds/sprig/crypto_test.go b/vendor/github.com/Masterminds/sprig/crypto_test.go new file mode 100644 index 0000000..01b3bfc --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/crypto_test.go @@ -0,0 +1,110 @@ +package sprig + +import ( + "strings" + "testing" +) + +func TestSha256Sum(t *testing.T) { + tpl := `{{"abc" | sha256sum}}` + if err := runt(tpl, "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"); err != nil { + t.Error(err) + } +} + +func TestDerivePassword(t *testing.T) { + expectations := map[string]string{ + `{{derivePassword 1 "long" "password" "user" "example.com"}}`: "ZedaFaxcZaso9*", + `{{derivePassword 2 "long" "password" "user" "example.com"}}`: "Fovi2@JifpTupx", + `{{derivePassword 1 "maximum" "password" "user" "example.com"}}`: "pf4zS1LjCg&LjhsZ7T2~", + `{{derivePassword 1 "medium" "password" "user" "example.com"}}`: "ZedJuz8$", + `{{derivePassword 1 "basic" "password" "user" "example.com"}}`: "pIS54PLs", + `{{derivePassword 1 "short" "password" "user" "example.com"}}`: "Zed5", + `{{derivePassword 1 "pin" "password" "user" "example.com"}}`: "6685", + } + + for tpl, result := range expectations { + out, err := runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + if 0 != strings.Compare(out, result) { + t.Error("Generated password does not match for", tpl) + } + } +} + +// NOTE(bacongobbler): this test is really _slow_ because of how long it takes to compute +// and generate a new crypto key. +func TestGenPrivateKey(t *testing.T) { + // test that calling by default generates an RSA private key + tpl := `{{genPrivateKey ""}}` + out, err := runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + if !strings.Contains(out, "RSA PRIVATE KEY") { + t.Error("Expected RSA PRIVATE KEY") + } + // test all acceptable arguments + tpl = `{{genPrivateKey "rsa"}}` + out, err = runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + if !strings.Contains(out, "RSA PRIVATE KEY") { + t.Error("Expected RSA PRIVATE KEY") + } + tpl = `{{genPrivateKey "dsa"}}` + out, err = runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + if !strings.Contains(out, "DSA PRIVATE KEY") { + t.Error("Expected DSA PRIVATE KEY") + } + tpl = `{{genPrivateKey "ecdsa"}}` + out, err = runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + if !strings.Contains(out, "EC PRIVATE KEY") { + t.Error("Expected EC PRIVATE KEY") + } + // test bad + tpl = `{{genPrivateKey "bad"}}` + out, err = runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + if out != "Unknown type bad" { + t.Error("Expected type 'bad' to be an unknown crypto algorithm") + } + // ensure that we can base64 encode the string + tpl = `{{genPrivateKey "rsa" | b64enc}}` + out, err = runRaw(tpl, nil) + if err != nil { + t.Error(err) + } +} + +func TestUUIDGeneration(t *testing.T) { + tpl := `{{uuidv4}}` + out, err := runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + + if len(out) != 36 { + t.Error("Expected UUID of length 36") + } + + out2, err := runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + + if out == out2 { + t.Error("Expected subsequent UUID generations to be different") + } +} diff --git a/vendor/github.com/Masterminds/sprig/date.go b/vendor/github.com/Masterminds/sprig/date.go new file mode 100644 index 0000000..dc5263f --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/date.go @@ -0,0 +1,53 @@ +package sprig + +import ( + "time" +) + +// Given a format and a date, format the date string. +// +// Date can be a `time.Time` or an `int, int32, int64`. +// In the later case, it is treated as seconds since UNIX +// epoch. +func date(fmt string, date interface{}) string { + return dateInZone(fmt, date, "Local") +} + +func htmlDate(date interface{}) string { + return dateInZone("2006-01-02", date, "Local") +} + +func htmlDateInZone(date interface{}, zone string) string { + return dateInZone("2006-01-02", date, zone) +} + +func dateInZone(fmt string, date interface{}, zone string) string { + var t time.Time + switch date := date.(type) { + default: + t = time.Now() + case time.Time: + t = date + case int64: + t = time.Unix(date, 0) + case int: + t = time.Unix(int64(date), 0) + case int32: + t = time.Unix(int64(date), 0) + } + + loc, err := time.LoadLocation(zone) + if err != nil { + loc, _ = time.LoadLocation("UTC") + } + + return t.In(loc).Format(fmt) +} + +func dateModify(fmt string, date time.Time) time.Time { + d, err := time.ParseDuration(fmt) + if err != nil { + return date + } + return date.Add(d) +} diff --git a/vendor/github.com/Masterminds/sprig/date_test.go b/vendor/github.com/Masterminds/sprig/date_test.go new file mode 100644 index 0000000..8e98b8c --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/date_test.go @@ -0,0 +1,13 @@ +package sprig + +import ( + "testing" +) + +func TestHtmlDate(t *testing.T) { + t.Skip() + tpl := `{{ htmlDate 0}}` + if err := runt(tpl, "1970-01-01"); err != nil { + t.Error(err) + } +} diff --git a/vendor/github.com/Masterminds/sprig/defaults.go b/vendor/github.com/Masterminds/sprig/defaults.go new file mode 100644 index 0000000..9892f07 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/defaults.go @@ -0,0 +1,62 @@ +package sprig + +import ( + "reflect" +) + +// dfault checks whether `given` is set, and returns default if not set. +// +// This returns `d` if `given` appears not to be set, and `given` otherwise. +// +// For numeric types 0 is unset. +// For strings, maps, arrays, and slices, len() = 0 is considered unset. +// For bool, false is unset. +// Structs are never considered unset. +// +// For everything else, including pointers, a nil value is unset. +func dfault(d interface{}, given ...interface{}) interface{} { + + if empty(given) || empty(given[0]) { + return d + } + return given[0] +} + +// empty returns true if the given value has the zero value for its type. +func empty(given interface{}) bool { + g := reflect.ValueOf(given) + if !g.IsValid() { + return true + } + + // Basically adapted from text/template.isTrue + switch g.Kind() { + default: + return g.IsNil() + case reflect.Array, reflect.Slice, reflect.Map, reflect.String: + return g.Len() == 0 + case reflect.Bool: + return g.Bool() == false + case reflect.Complex64, reflect.Complex128: + return g.Complex() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return g.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return g.Uint() == 0 + case reflect.Float32, reflect.Float64: + return g.Float() == 0 + case reflect.Struct: + return false + } + return true +} + +// coalesce returns the first non-empty value. +func coalesce(v ...interface{}) interface{} { + for _, val := range v { + if !empty(val) { + return val + } + } + return nil +} diff --git a/vendor/github.com/Masterminds/sprig/defaults_test.go b/vendor/github.com/Masterminds/sprig/defaults_test.go new file mode 100644 index 0000000..6bb48f6 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/defaults_test.go @@ -0,0 +1,84 @@ +package sprig + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestDefault(t *testing.T) { + tpl := `{{"" | default "foo"}}` + if err := runt(tpl, "foo"); err != nil { + t.Error(err) + } + tpl = `{{default "foo" 234}}` + if err := runt(tpl, "234"); err != nil { + t.Error(err) + } + tpl = `{{default "foo" 2.34}}` + if err := runt(tpl, "2.34"); err != nil { + t.Error(err) + } + + tpl = `{{ .Nothing | default "123" }}` + if err := runt(tpl, "123"); err != nil { + t.Error(err) + } + tpl = `{{ default "123" }}` + if err := runt(tpl, "123"); err != nil { + t.Error(err) + } +} + +func TestEmpty(t *testing.T) { + tpl := `{{if empty 1}}1{{else}}0{{end}}` + if err := runt(tpl, "0"); err != nil { + t.Error(err) + } + + tpl = `{{if empty 0}}1{{else}}0{{end}}` + if err := runt(tpl, "1"); err != nil { + t.Error(err) + } + tpl = `{{if empty ""}}1{{else}}0{{end}}` + if err := runt(tpl, "1"); err != nil { + t.Error(err) + } + tpl = `{{if empty 0.0}}1{{else}}0{{end}}` + if err := runt(tpl, "1"); err != nil { + t.Error(err) + } + tpl = `{{if empty false}}1{{else}}0{{end}}` + if err := runt(tpl, "1"); err != nil { + t.Error(err) + } + + dict := map[string]interface{}{"top": map[string]interface{}{}} + tpl = `{{if empty .top.NoSuchThing}}1{{else}}0{{end}}` + if err := runtv(tpl, "1", dict); err != nil { + t.Error(err) + } + tpl = `{{if empty .bottom.NoSuchThing}}1{{else}}0{{end}}` + if err := runtv(tpl, "1", dict); err != nil { + t.Error(err) + } +} +func TestCoalesce(t *testing.T) { + tests := map[string]string{ + `{{ coalesce 1 }}`: "1", + `{{ coalesce "" 0 nil 2 }}`: "2", + `{{ $two := 2 }}{{ coalesce "" 0 nil $two }}`: "2", + `{{ $two := 2 }}{{ coalesce "" $two 0 0 0 }}`: "2", + `{{ $two := 2 }}{{ coalesce "" $two 3 4 5 }}`: "2", + `{{ coalesce }}`: "", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } + + dict := map[string]interface{}{"top": map[string]interface{}{}} + tpl := `{{ coalesce .top.NoSuchThing .bottom .bottom.dollar "airplane"}}` + if err := runtv(tpl, "airplane", dict); err != nil { + t.Error(err) + } +} diff --git a/vendor/github.com/Masterminds/sprig/dict.go b/vendor/github.com/Masterminds/sprig/dict.go new file mode 100644 index 0000000..d50e11c --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/dict.go @@ -0,0 +1,74 @@ +package sprig + +func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} { + d[key] = value + return d +} + +func unset(d map[string]interface{}, key string) map[string]interface{} { + delete(d, key) + return d +} + +func hasKey(d map[string]interface{}, key string) bool { + _, ok := d[key] + return ok +} + +func pluck(key string, d ...map[string]interface{}) []interface{} { + res := []interface{}{} + for _, dict := range d { + if val, ok := dict[key]; ok { + res = append(res, val) + } + } + return res +} + +func keys(dict map[string]interface{}) []string { + k := []string{} + for key := range dict { + k = append(k, key) + } + return k +} + +func pick(dict map[string]interface{}, keys ...string) map[string]interface{} { + res := map[string]interface{}{} + for _, k := range keys { + if v, ok := dict[k]; ok { + res[k] = v + } + } + return res +} + +func omit(dict map[string]interface{}, keys ...string) map[string]interface{} { + res := map[string]interface{}{} + + omit := make(map[string]bool, len(keys)) + for _, k := range keys { + omit[k] = true + } + + for k, v := range dict { + if _, ok := omit[k]; !ok { + res[k] = v + } + } + return res +} + +func dict(v ...interface{}) map[string]interface{} { + dict := map[string]interface{}{} + lenv := len(v) + for i := 0; i < lenv; i += 2 { + key := strval(v[i]) + if i+1 >= lenv { + dict[key] = "" + continue + } + dict[key] = v[i+1] + } + return dict +} diff --git a/vendor/github.com/Masterminds/sprig/dict_test.go b/vendor/github.com/Masterminds/sprig/dict_test.go new file mode 100644 index 0000000..2a78647 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/dict_test.go @@ -0,0 +1,137 @@ +package sprig + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestDict(t *testing.T) { + tpl := `{{$d := dict 1 2 "three" "four" 5}}{{range $k, $v := $d}}{{$k}}{{$v}}{{end}}` + out, err := runRaw(tpl, nil) + if err != nil { + t.Error(err) + } + if len(out) != 12 { + t.Errorf("Expected length 12, got %d", len(out)) + } + // dict does not guarantee ordering because it is backed by a map. + if !strings.Contains(out, "12") { + t.Error("Expected grouping 12") + } + if !strings.Contains(out, "threefour") { + t.Error("Expected grouping threefour") + } + if !strings.Contains(out, "5") { + t.Error("Expected 5") + } + tpl = `{{$t := dict "I" "shot" "the" "albatross"}}{{$t.the}} {{$t.I}}` + if err := runt(tpl, "albatross shot"); err != nil { + t.Error(err) + } +} + +func TestUnset(t *testing.T) { + tpl := `{{- $d := dict "one" 1 "two" 222222 -}} + {{- $_ := unset $d "two" -}} + {{- range $k, $v := $d}}{{$k}}{{$v}}{{- end -}} + ` + + expect := "one1" + if err := runt(tpl, expect); err != nil { + t.Error(err) + } +} +func TestHasKey(t *testing.T) { + tpl := `{{- $d := dict "one" 1 "two" 222222 -}} + {{- if hasKey $d "one" -}}1{{- end -}} + ` + + expect := "1" + if err := runt(tpl, expect); err != nil { + t.Error(err) + } +} + +func TestPluck(t *testing.T) { + tpl := ` + {{- $d := dict "one" 1 "two" 222222 -}} + {{- $d2 := dict "one" 1 "two" 33333 -}} + {{- $d3 := dict "one" 1 -}} + {{- $d4 := dict "one" 1 "two" 4444 -}} + {{- pluck "two" $d $d2 $d3 $d4 -}} + ` + + expect := "[222222 33333 4444]" + if err := runt(tpl, expect); err != nil { + t.Error(err) + } +} + +func TestKeys(t *testing.T) { + tests := map[string]string{ + `{{ dict "foo" 1 "bar" 2 | keys | sortAlpha }}`: "[bar foo]", + `{{ dict | keys }}`: "[]", + } + for tpl, expect := range tests { + if err := runt(tpl, expect); err != nil { + t.Error(err) + } + } +} + +func TestPick(t *testing.T) { + tests := map[string]string{ + `{{- $d := dict "one" 1 "two" 222222 }}{{ pick $d "two" | len -}}`: "1", + `{{- $d := dict "one" 1 "two" 222222 }}{{ pick $d "two" -}}`: "map[two:222222]", + `{{- $d := dict "one" 1 "two" 222222 }}{{ pick $d "one" "two" | len -}}`: "2", + `{{- $d := dict "one" 1 "two" 222222 }}{{ pick $d "one" "two" "three" | len -}}`: "2", + `{{- $d := dict }}{{ pick $d "two" | len -}}`: "0", + } + for tpl, expect := range tests { + if err := runt(tpl, expect); err != nil { + t.Error(err) + } + } +} +func TestOmit(t *testing.T) { + tests := map[string]string{ + `{{- $d := dict "one" 1 "two" 222222 }}{{ omit $d "one" | len -}}`: "1", + `{{- $d := dict "one" 1 "two" 222222 }}{{ omit $d "one" -}}`: "map[two:222222]", + `{{- $d := dict "one" 1 "two" 222222 }}{{ omit $d "one" "two" | len -}}`: "0", + `{{- $d := dict "one" 1 "two" 222222 }}{{ omit $d "two" "three" | len -}}`: "1", + `{{- $d := dict }}{{ omit $d "two" | len -}}`: "0", + } + for tpl, expect := range tests { + if err := runt(tpl, expect); err != nil { + t.Error(err) + } + } +} + +func TestSet(t *testing.T) { + tpl := `{{- $d := dict "one" 1 "two" 222222 -}} + {{- $_ := set $d "two" 2 -}} + {{- $_ := set $d "three" 3 -}} + {{- if hasKey $d "one" -}}{{$d.one}}{{- end -}} + {{- if hasKey $d "two" -}}{{$d.two}}{{- end -}} + {{- if hasKey $d "three" -}}{{$d.three}}{{- end -}} + ` + + expect := "123" + if err := runt(tpl, expect); err != nil { + t.Error(err) + } +} + +func TestCompact(t *testing.T) { + tests := map[string]string{ + `{{ list 1 0 "" "hello" | compact }}`: `[1 hello]`, + `{{ list "" "" | compact }}`: `[]`, + `{{ list | compact }}`: `[]`, + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} diff --git a/vendor/github.com/Masterminds/sprig/doc.go b/vendor/github.com/Masterminds/sprig/doc.go new file mode 100644 index 0000000..7ecb5e2 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/doc.go @@ -0,0 +1,225 @@ +/* +Sprig: Template functions for Go. + +This package contains a number of utility functions for working with data +inside of Go `html/template` and `text/template` files. + +To add these functions, use the `template.Funcs()` method: + + t := templates.New("foo").Funcs(sprig.FuncMap()) + +Note that you should add the function map before you parse any template files. + + In several cases, Sprig reverses the order of arguments from the way they + appear in the standard library. This is to make it easier to pipe + arguments into functions. + +Date Functions + + - date FORMAT TIME: Format a date, where a date is an integer type or a time.Time type, and + format is a time.Format formatting string. + - dateModify: Given a date, modify it with a duration: `date_modify "-1.5h" now`. If the duration doesn't + parse, it returns the time unaltered. See `time.ParseDuration` for info on duration strings. + - now: Current time.Time, for feeding into date-related functions. + - htmlDate TIME: Format a date for use in the value field of an HTML "date" form element. + - dateInZone FORMAT TIME TZ: Like date, but takes three arguments: format, timestamp, + timezone. + - htmlDateInZone TIME TZ: Like htmlDate, but takes two arguments: timestamp, + timezone. + +String Functions + + - abbrev: Truncate a string with ellipses. `abbrev 5 "hello world"` yields "he..." + - abbrevboth: Abbreviate from both sides, yielding "...lo wo..." + - trunc: Truncate a string (no suffix). `trunc 5 "Hello World"` yields "hello". + - trim: strings.TrimSpace + - trimAll: strings.Trim, but with the argument order reversed `trimAll "$" "$5.00"` or `"$5.00 | trimAll "$"` + - trimSuffix: strings.TrimSuffix, but with the argument order reversed: `trimSuffix "-" "ends-with-"` + - trimPrefix: strings.TrimPrefix, but with the argument order reversed `trimPrefix "$" "$5"` + - upper: strings.ToUpper + - lower: strings.ToLower + - nospace: Remove all space characters from a string. `nospace "h e l l o"` becomes "hello" + - title: strings.Title + - untitle: Remove title casing + - repeat: strings.Repeat, but with the arguments switched: `repeat count str`. (This simplifies common pipelines) + - substr: Given string, start, and length, return a substr. + - initials: Given a multi-word string, return the initials. `initials "Matt Butcher"` returns "MB" + - randAlphaNum: Given a length, generate a random alphanumeric sequence + - randAlpha: Given a length, generate an alphabetic string + - randAscii: Given a length, generate a random ASCII string (symbols included) + - randNumeric: Given a length, generate a string of digits. + - wrap: Force a line wrap at the given width. `wrap 80 "imagine a longer string"` + - wrapWith: Wrap a line at the given length, but using 'sep' instead of a newline. `wrapWith 50, "
", $html` + - contains: strings.Contains, but with the arguments switched: `contains substr str`. (This simplifies common pipelines) + - hasPrefix: strings.hasPrefix, but with the arguments switched + - hasSuffix: strings.hasSuffix, but with the arguments switched + - quote: Wrap string(s) in double quotation marks, escape the contents by adding '\' before '"'. + - squote: Wrap string(s) in double quotation marks, does not escape content. + - cat: Concatenate strings, separating them by spaces. `cat $a $b $c`. + - indent: Indent a string using space characters. `indent 4 "foo\nbar"` produces " foo\n bar" + - replace: Replace an old with a new in a string: `$name | replace " " "-"` + - plural: Choose singular or plural based on length: `len $fish | plural "one anchovy" "many anchovies"` + - sha256sum: Generate a hex encoded sha256 hash of the input + - toString: Convert something to a string + +String Slice Functions: + + - join: strings.Join, but as `join SEP SLICE` + - split: strings.Split, but as `split SEP STRING`. The results are returned + as a map with the indexes set to _N, where N is an integer starting from 0. + Use it like this: `{{$v := "foo/bar/baz" | split "/"}}{{$v._0}}` (Prints `foo`) + - splitList: strings.Split, but as `split SEP STRING`. The results are returned + as an array. + - toStrings: convert a list to a list of strings. 'list 1 2 3 | toStrings' produces '["1" "2" "3"]' + - sortAlpha: sort a list lexicographically. + +Integer Slice Functions: + + - until: Given an integer, returns a slice of counting integers from 0 to one + less than the given integer: `range $i, $e := until 5` + - untilStep: Given start, stop, and step, return an integer slice starting at + 'start', stopping at `stop`, and incrementing by 'step. This is the same + as Python's long-form of 'range'. + +Conversions: + + - atoi: Convert a string to an integer. 0 if the integer could not be parsed. + - in64: Convert a string or another numeric type to an int64. + - int: Convert a string or another numeric type to an int. + - float64: Convert a string or another numeric type to a float64. + +Defaults: + + - default: Give a default value. Used like this: trim " "| default "empty". + Since trim produces an empty string, the default value is returned. For + things with a length (strings, slices, maps), len(0) will trigger the default. + For numbers, the value 0 will trigger the default. For booleans, false will + trigger the default. For structs, the default is never returned (there is + no clear empty condition). For everything else, nil value triggers a default. + - empty: Return true if the given value is the zero value for its type. + Caveats: structs are always non-empty. This should match the behavior of + {{if pipeline}}, but can be used inside of a pipeline. + - coalesce: Given a list of items, return the first non-empty one. + This follows the same rules as 'empty'. '{{ coalesce .someVal 0 "hello" }}` + will return `.someVal` if set, or else return "hello". The 0 is skipped + because it is an empty value. + - compact: Return a copy of a list with all of the empty values removed. + 'list 0 1 2 "" | compact' will return '[1 2]' + +OS: + - env: Resolve an environment variable + - expandenv: Expand a string through the environment + +File Paths: + - base: Return the last element of a path. https://golang.org/pkg/path#Base + - dir: Remove the last element of a path. https://golang.org/pkg/path#Dir + - clean: Clean a path to the shortest equivalent name. (e.g. remove "foo/.." + from "foo/../bar.html") https://golang.org/pkg/path#Clean + - ext: https://golang.org/pkg/path#Ext + - isAbs: https://golang.org/pkg/path#IsAbs + +Encoding: + - b64enc: Base 64 encode a string. + - b64dec: Base 64 decode a string. + +Reflection: + + - typeOf: Takes an interface and returns a string representation of the type. + For pointers, this will return a type prefixed with an asterisk(`*`). So + a pointer to type `Foo` will be `*Foo`. + - typeIs: Compares an interface with a string name, and returns true if they match. + Note that a pointer will not match a reference. For example `*Foo` will not + match `Foo`. + - typeIsLike: Compares an interface with a string name and returns true if + the interface is that `name` or that `*name`. In other words, if the given + value matches the given type or is a pointer to the given type, this returns + true. + - kindOf: Takes an interface and returns a string representation of its kind. + - kindIs: Returns true if the given string matches the kind of the given interface. + + Note: None of these can test whether or not something implements a given + interface, since doing so would require compiling the interface in ahead of + time. + +Data Structures: + + - tuple: Takes an arbitrary list of items and returns a slice of items. Its + tuple-ish properties are mainly gained through the template idiom, and not + through an API provided here. WARNING: The implementation of tuple will + change in the future. + - list: An arbitrary ordered list of items. (This is prefered over tuple.) + - dict: Takes a list of name/values and returns a map[string]interface{}. + The first parameter is converted to a string and stored as a key, the + second parameter is treated as the value. And so on, with odds as keys and + evens as values. If the function call ends with an odd, the last key will + be assigned the empty string. Non-string keys are converted to strings as + follows: []byte are converted, fmt.Stringers will have String() called. + errors will have Error() called. All others will be passed through + fmt.Sprtinf("%v"). + +Lists Functions: + +These are used to manipulate lists: '{{ list 1 2 3 | reverse | first }}' + + - first: Get the first item in a 'list'. 'list 1 2 3 | first' prints '1' + - last: Get the last item in a 'list': 'list 1 2 3 | last ' prints '3' + - rest: Get all but the first item in a list: 'list 1 2 3 | rest' returns '[2 3]' + - initial: Get all but the last item in a list: 'list 1 2 3 | initial' returns '[1 2]' + - append: Add an item to the end of a list: 'append $list 4' adds '4' to the end of '$list' + - prepend: Add an item to the beginning of a list: 'prepend $list 4' puts 4 at the beginning of the list. + - reverse: Reverse the items in a list. + - uniq: Remove duplicates from a list. + - without: Return a list with the given values removed: 'without (list 1 2 3) 1' would return '[2 3]' + - has: Return 'true' if the item is found in the list: 'has "foo" $list' will return 'true' if the list contains "foo" + +Dict Functions: + +These are used to manipulate dicts. + + - set: Takes a dict, a key, and a value, and sets that key/value pair in + the dict. `set $dict $key $value`. For convenience, it returns the dict, + even though the dict was modified in place. + - unset: Takes a dict and a key, and deletes that key/value pair from the + dict. `unset $dict $key`. This returns the dict for convenience. + - hasKey: Takes a dict and a key, and returns boolean true if the key is in + the dict. + - pluck: Given a key and one or more maps, get all of the values for that key. + - keys: Get an array of all of the keys in a dict. + - pick: Select just the given keys out of the dict, and return a new dict. + - omit: Return a dict without the given keys. + +Math Functions: + +Integer functions will convert integers of any width to `int64`. If a +string is passed in, functions will attempt to convert with +`strconv.ParseInt(s, 1064)`. If this fails, the value will be treated as 0. + + - add1: Increment an integer by 1 + - add: Sum an arbitrary number of integers + - sub: Subtract the second integer from the first + - div: Divide the first integer by the second + - mod: Module of first integer divided by second + - mul: Multiply integers + - max: Return the biggest of a series of one or more integers + - min: Return the smallest of a series of one or more integers + - biggest: DEPRECATED. Return the biggest of a series of one or more integers + +Crypto Functions: + + - genPrivateKey: Generate a private key for the given cryptosystem. If no + argument is supplied, by default it will generate a private key using + the RSA algorithm. Accepted values are `rsa`, `dsa`, and `ecdsa`. + - derivePassword: Derive a password from the given parameters according to the ["Master Password" algorithm](http://masterpasswordapp.com/algorithm.html) + Given parameters (in order) are: + `counter` (starting with 1), `password_type` (maximum, long, medium, short, basic, or pin), `password`, + `user`, and `site` + +SemVer Functions: + +These functions provide version parsing and comparisons for SemVer 2 version +strings. + + - semver: Parse a semantic version and return a Version object. + - semverCompare: Compare a SemVer range to a particular version. +*/ +package sprig diff --git a/vendor/github.com/Masterminds/sprig/docs/_config.yml b/vendor/github.com/Masterminds/sprig/docs/_config.yml new file mode 100644 index 0000000..c741881 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file diff --git a/vendor/github.com/Masterminds/sprig/docs/conversion.md b/vendor/github.com/Masterminds/sprig/docs/conversion.md new file mode 100644 index 0000000..06f4f77 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/conversion.md @@ -0,0 +1,25 @@ +# Type Conversion Functions + +The following type conversion functions are provided by Sprig: + +- `atoi`: Convert a string to an integer +- `float64`: Convert to a float64 +- `int`: Convert to an `int` at the system's width. +- `int64`: Convert to an `int64` +- `toString`: Convert to a string +- `toStrings`: Convert a list, slice, or array to a list of strings. + +Only `atoi` requires that the input be a specific type. The others will attempt +to convert from any type to the destination type. For example, `int64` can convert +floats to ints, and it can also convert strings to ints. + +## toStrings + +Given a list-like collection, produce a slice of strings. + +``` +list 1 2 3 | toStrings +``` + +The above converts `1` to `"1"`, `2` to `"2"`, and so on, and then returns +them as a list. diff --git a/vendor/github.com/Masterminds/sprig/docs/crypto.md b/vendor/github.com/Masterminds/sprig/docs/crypto.md new file mode 100644 index 0000000..d9d1234 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/crypto.md @@ -0,0 +1,37 @@ +# Cryptographic and Security Functions + +Sprig provides a couple of advanced cryptographic functions. + +## sha256sum + +The `sha256sum` function receives a string, and computes it's SHA256 digest. + +``` +sha256sum "Hello world!" +``` + +The above will compute the SHA 256 sum in an "ASCII armored" format that is +safe to print. + +## derivePassword + +The `derivePassword` function can be used to derive a specific password based on +some shared "master password" constraints. The algorithm for this is +[well specified](http://masterpasswordapp.com/algorithm.html). + +``` +derivePassword 1 "long" "password" "user" "example.com" +``` + +Note that it is considered insecure to store the parts directly in the template. + +## generatePrivateKey + +The `generatePrivateKey` function generates a new private key encoded into a PEM +block. + +It takes one of the values for its first param: + +- `ecdsa`: Generate an elyptical curve DSA key (P256) +- `dsa`: Generate a DSA key (L2048N256) +- `rsa`: Generate an RSA 4096 key diff --git a/vendor/github.com/Masterminds/sprig/docs/date.md b/vendor/github.com/Masterminds/sprig/docs/date.md new file mode 100644 index 0000000..5e7209d --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/date.md @@ -0,0 +1,62 @@ +# Date Functions + +## now + +The current date/time. Use this in conjunction with other date functions. + +## date + +The `date` function formats a date. + + +Format the date to YEAR-MONTH-DAY: +``` +now | date "2006-01-02" +``` + +Date formatting in Go is a [little bit different](https://pauladamsmith.com/blog/2011/05/go_time.html). + +In short, take this as the base date: + +``` +Mon Jan 2 15:04:05 MST 2006 +``` + +Write it in the format you want. Above, `2006-01-02` is the same date, but +in the format we want. + +## dateInZone + +Same as `date`, but with a timezone. + +``` +date "2006-01-02" (now) "UTC" +``` + +## dateModify + +The `dateModify` takes a modification and a date and returns the timestamp. + +Subtract an hour and thirty minutes from the current time: + +``` +now | date_modify "-1.5h" +``` + +## htmlDate + +The `htmlDate` function formates a date for inserting into an HTML date picker +input field. + +``` +now | htmlDate +``` + +## htmlDateInZone + +Same as htmlDate, but with a timezone. + +``` +htmlDate (now) "UTC" +``` + diff --git a/vendor/github.com/Masterminds/sprig/docs/defaults.md b/vendor/github.com/Masterminds/sprig/docs/defaults.md new file mode 100644 index 0000000..d6baccc --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/defaults.md @@ -0,0 +1,59 @@ +# Default Functions + +Sprig provides tools for setting default values for templates. + +## default + +To set a simple default value, use `default`: + +``` +default "foo" .Bar +``` + +In the above, if `.Bar` evaluates to a non-empty value, it will be used. But if +it is empty, `foo` will be returned instead. + +The definition of "empty" depends on type: + +- Numeric: 0 +- String: "" +- Lists: `[]` +- Dicts: `{}` +- Boolean: `false` +- And always `nil` (aka null) + +For structs, there is no definition of empty, so a struct will never return the +default. + +## empty + +The `empty` function returns `true` if the given value is considered empty, and +`false` otherwise. The empty values are listed in the `default` section. + +``` +empty .Foo +``` + +Note that in Go template conditionals, emptiness is calculated for you. Thus, +you rarely need `if empty .Foo`. Instead, just use `if .Foo`. + +## coalesce + +The `coalesce` function takes a list of values and returns the first non-empty +one. + +``` +coalesce 0 1 2 +``` + +The above returns `1`. + +This function is useful for scanning through multiple variables or values: + +``` +coalesce .name .parent.name "Matt" +``` + +The above will first check to see if `.name` is empty. If it is not, it will return +that value. If it _is_ empty, `coalesce` will evaluate `.parent.name` for emptiness. +Finally, if both `.name` and `.parent.name` are empty, it will return `Matt`. diff --git a/vendor/github.com/Masterminds/sprig/docs/dicts.md b/vendor/github.com/Masterminds/sprig/docs/dicts.md new file mode 100644 index 0000000..c33140d --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/dicts.md @@ -0,0 +1,115 @@ +# Dictionaries and Dict Functions + +Sprig provides a key/value storage type called a `dict` (short for "dictionary", +as in Python). A `dict` is an _unorder_ type. + +The key to a dictionary **must be a string**. However, the value can be any +type, even another `dict` or `list`. + +Unlike `list`s, `dict`s are not immutable. The `set` and `unset` functions will +modify the contents of a dictionary. + +## dict + +Creating dictionaries is done by calling the `dict` function and passing it a +list of pairs. + +The following creates a dictionary with three items: + +``` +$myDict := dict "name1" "value1" "name2" "value2" "name3" "value 3" +``` + +## set + +Use `set` to add a new key/value pair to a dictionary. + +``` +$_ := set $myDict "name4" "value4" +``` + +Note that `set` _returns the dictionary_ (a requirement of Go template functions), +so you may need to trap the value as done above with the `$_` assignment. + +## unset + +Given a map and a key, delete the key from the map. + +``` +$_ := unset $myDict "name4" +``` + +As with `set`, this returns the dictionary. + +Note that if the key is not found, this operation will simply return. No error +will be generated. + +## hasKey + +The `hasKey` function returns `true` if the given dict contains the given key. + +``` +hasKey $myDict "name1" +``` + +If the key is not found, this returns `false`. + +## pluck + +The `pluck` function makes it possible to give one key and multiple maps, and +get a list of all of the matches: + +``` +pluck "name1" $myDict $myOtherDict +``` + +The above will return a `list` containing every found value (`[value1 otherValue1]`). + +If the give key is _not found_ in a map, that map will not have an item in the +list (and the length of the returned list will be less than the number of dicts +in the call to `pluck`. + +If the key is _found_ but the value is an empty value, that value will be +inserted. + +A common idiom in Sprig templates is to uses `pluck... | first` to get the first +matching key out of a collection of dictionaries. + + +## keys + +The `keys` function will return a `list` of all of the keys in a `dict`. Since +a dictionary is _unordered_, the keys will not be in a predictable order. They +can be sorted with `sortAlpha`. + +``` +keys $myDict | sortAlpha +``` + +## pick + +The `pick` function selects just the given keys out of a dictionary, creating a +new `dict`. + +``` +$new := pick $myDict "name1" "name3" +``` + +The above returns `{name1: value1, name2: value2}` + +## omit + +The `omit` function is similar to `pick`, except it returns a new `dict` with all +the keys that _do not_ match the given keys. + +``` +$new := omit $myDict "name1" "name3" +``` + +The above returns `{name2: value2}` + +## A Note on Dict Internals + +A `dict` is implemented in Go as a `map[string]interface{}`. Go developers can +pass `map[string]interface{}` values into the context to make them available +to templates as `dict`s. diff --git a/vendor/github.com/Masterminds/sprig/docs/encoding.md b/vendor/github.com/Masterminds/sprig/docs/encoding.md new file mode 100644 index 0000000..1c7a36f --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/encoding.md @@ -0,0 +1,6 @@ +# Encoding Functions + +Sprig has the following encoding and decoding functions: + +- `b64enc`/`b64dec`: Encode or decode with Base64 +- `b32enc`/`b32dec`: Encode or decode with Base32 diff --git a/vendor/github.com/Masterminds/sprig/docs/index.md b/vendor/github.com/Masterminds/sprig/docs/index.md new file mode 100644 index 0000000..584b789 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/index.md @@ -0,0 +1,22 @@ +# Sprig Function Documentation + +The Sprig library provides over 70 template functions for Go's template language. + +- [String Functions](strings.html): `trim`, `wrap`, `randAlpha`, `plural`, etc. + - [String List Functions](string_slice.html): `splitList`, `sortAlpha`, etc. +- [Math Functions](math.html): `add`, `max`, `mul`, etc. + - [Integer Slice Functions](integer_slice.html): `until`, `untilStep` +- [Date Functions](date.html): `now`, `date`, etc. +- [Defaults Functions](defaults.html): `default`, `empty`, `coalesce` +- [Encoding Functions](encoding.html): `b64enc`, `b64dec`, etc. +- [Lists and List Functions](lists.html): `list`, `first`, `uniq`, etc. +- [Dictionaries and Dict Functions](dicts.html): `dict`, `hasKey`, `pluck`, etc. +- [Type Conversion Functions](conversion.html): `atoi`, `int64`, `toString`, etc. +- [File Path Functions](paths.html): `base`, `dir`, `ext`, `clean`, `isAbs` +- Advanced Functions + - [UUID Functions](uuid.html): `uuidv4` + - [OS Functions](os.html): `env`, `expandenv` + - [Version Comparison Functions](semver.html): `semver`, `semverCompare` + - [Reflection](reflection.html): `typeOf`, `kindIs`, `typeIsLike`, etc. + - [Cryptographic and Security Functions](crypto.html): `derivePassword`, `sha256sum`, `genPrivateKey` + diff --git a/vendor/github.com/Masterminds/sprig/docs/integer_slice.md b/vendor/github.com/Masterminds/sprig/docs/integer_slice.md new file mode 100644 index 0000000..8929d30 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/integer_slice.md @@ -0,0 +1,25 @@ +# Integer Slice Functions + +## until + +The `until` function builds a range of integers. + +``` +until 5 +``` + +The above generates the list `[0, 1, 2, 3, 4]`. + +This is useful for looping with `range $i, $e := until 5`. + +## untilStep + +Like `until`, `untilStep` generates a list of counting integers. But it allows +you to define a start, stop, and step: + +``` +untilStep 3 6 2 +``` + +The above will produce `[3 5]` by starting with 3, and adding 2 until it is equal +or greater than 6. This is similar to Python's `range` function. diff --git a/vendor/github.com/Masterminds/sprig/docs/lists.md b/vendor/github.com/Masterminds/sprig/docs/lists.md new file mode 100644 index 0000000..22441ce --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/lists.md @@ -0,0 +1,111 @@ +# Lists and List Functions + +Sprig provides a simple `list` type that can contain arbitrary sequential lists +of data. This is similar to arrays or slices, but lists are designed to be used +as immutable data types. + +Create a list of integers: + +``` +$myList := list 1 2 3 4 5 +``` + +The above creates a list of `[1 2 3 4 5]`. + +## first + +To get the head item on a list, use `first`. + +`first $myList` returns `1` + +## rest + +To get the tail of the list (everything but the first item), use `rest`. + +`rest $myList` returns `[2 3 4 5]` + +## last + +To get the last item on a list, use `last`: + +`last $myList` returns `5`. This is roughly analogous to reversing a list and +then calling `first`. + +## initial + +This compliments `last` by returning all _but_ the last element. +`initial $myList` returns `[1 2 3 4]`. + +## append + +Append a new item to an existing list, creating a new list. + +``` +$new = append $myList 6 +``` + +The above would set `$new` to `[1 2 3 4 5 6]`. `$myList` would remain unaltered. + +## prepend + +Push an alement onto the front of a list, creating a new list. + +``` +prepend $myList 0 +``` + +The above would produce `[0 1 2 3 4 5]`. `$myList` would remain unaltered. + +## reverse + +Produce a new list with the reversed elements of the given list. + +``` +reverse $myList +``` + +The above would generate the list `[5 4 3 2 1]`. + +## uniq + +Generate a list with all of the duplicates removed. + +``` +list 1 1 1 2 | uniq +``` + +The above would produce `[1 2]` + +## without + +The `without` function filters items out of a list. + +``` +without $myList 3 +``` + +The above would produce `[1 2 4 5]` + +Without can take more than one filter: + +``` +without $myList 1 3 5 +``` + +That would produce `[2 4]` + +## has + +Test to see if a list has a particular element. + +``` +has $myList 4 +``` + +The above would return `true`, while `has $myList "hello"` would return false. + +## A Note on List Internals + +A list is implemented in Go as a `[]interface{}`. For Go developers embedding +Sprig, you may pass `[]interface{}` items into your template context and be +able to use all of the `list` functions on those items. diff --git a/vendor/github.com/Masterminds/sprig/docs/math.md b/vendor/github.com/Masterminds/sprig/docs/math.md new file mode 100644 index 0000000..d0940fa --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/math.md @@ -0,0 +1,46 @@ +# Math Functions + +All math functions operate on `int64` values unless specified otherwise. + +(In the future, these will be extended to handle floats as well) + +## add + +Sum numbers with `add` + +## add1 + +To increment by 1, use `add1` + +## sub + +To subtract, use `sub` + +## div + +Perform integer division with `div` + +## mod + +Modulo with `mod` + +## mul + +Multiply with `mul` + +## max + +Return the largest of a series of integers: + +This will return `3`: + +``` +max 1 2 3 +``` + +## min + +Return the smallest of a series of integers. + +`min 1 2 3` will return `1`. + diff --git a/vendor/github.com/Masterminds/sprig/docs/os.md b/vendor/github.com/Masterminds/sprig/docs/os.md new file mode 100644 index 0000000..e4c197a --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/os.md @@ -0,0 +1,24 @@ +# OS Functions + +_WARNING:_ These functions can lead to information leakage if not used +appropriately. + +_WARNING:_ Some notable implementations of Sprig (such as +[Kubernetes Helm](http://helm.sh) _do not provide these functions for security +reasons_. + +## env + +The `env` function reads an environment variable: + +``` +env "HOME" +``` + +## expandenv + +To substitute environment variables in a string, use `expandenv`: + +``` +expandenv "Your path is set to $PATH" +``` diff --git a/vendor/github.com/Masterminds/sprig/docs/paths.md b/vendor/github.com/Masterminds/sprig/docs/paths.md new file mode 100644 index 0000000..87ec6d4 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/paths.md @@ -0,0 +1,43 @@ +# File Path Functions + +While Sprig does not grant access to the filesystem, it does provide functions +for working with strings that follow file path conventions. + +# base + +Return the last element of a path. + +``` +base "foo/bar/baz" +``` + +The above prints "baz" + +# dir + +Return the directory, stripping the last part of the path. So `dir "foo/bar/baz"` +returns `foo/bar` + +# clean + +Clean up a path. + +``` +clean "foo/bar/../baz" +``` + +The above resolves the `..` and returns `foo/baz` + +# ext + +Return the file extension. + +``` +ext "foo.bar" +``` + +The above returns `.bar`. + +# isAbs + +To check whether a file path is absolute, use `isAbs`. diff --git a/vendor/github.com/Masterminds/sprig/docs/reflection.md b/vendor/github.com/Masterminds/sprig/docs/reflection.md new file mode 100644 index 0000000..597871f --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/reflection.md @@ -0,0 +1,38 @@ +# Reflection Functions + +Sprig provides rudimentary reflection tools. These help advanced template +developers understand the underlying Go type information for a particular value. + +Go has several primitive _kinds_, like `string`, `slice`, `int64`, and `bool`. + +Go has an open _type_ system that allows developers to create their own types. + +Sprig provides a set of functions for each. + +## Kind Functions + +There are two Kind functions: `kindOf` returns the kind of an object. + +``` +kindOf "hello" +``` + +The above would return `string`. For simple tests (like in `if` blocks), the +`isKind` function will let you verify that a value is a particular kind: + +``` +kindIs "int" 123 +``` + +The above will return `true` + +## Type Functions + +Types are slightly harder to work with, so there are three different functions: + +- `typeOf` returns the underlying type of a value: `typeOf $foo` +- `typeIs` is like `kindIs`, but for types: `typeIs "*io.Buffer" $myVal` +- `typeIsLike` works as `kindIs`, except that it also dereferences pointers. + +**Note:** None of these can test whether or not something implements a given +interface, since doing so would require compiling the interface in ahead of time. diff --git a/vendor/github.com/Masterminds/sprig/docs/semver.md b/vendor/github.com/Masterminds/sprig/docs/semver.md new file mode 100644 index 0000000..e0cbfeb --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/semver.md @@ -0,0 +1,124 @@ +# Semantic Version Functions + +Some version schemes are easily parseable and comparable. Sprig provides functions +for working with [SemVer 2](http://semver.org) versions. + +## semver + +The `semver` function parses a string into a Semantic Version: + +``` +$version := semver "1.2.3-alpha.1+123" +``` + +_If the parser fails, it will cause template execution to halt with an error._ + +At this point, `$version` is a pointer to a `Version` object with the following +properties: + +- `$version.Major`: The major number (`1` above) +- `$version.Minor`: The minor number (`2` above) +- `$version.Patch`: The patch number (`3` above) +- `$version.Prerelease`: The prerelease (`alpha.1` above) +- `$version.Metadata`: The build metadata (`123` above) +- `$version.Original`: The original version as a string + +Additionally, you can compare a `Version` to another `version` using the `Compare` +function: + +``` +semver "1.4.3" | (semver "1.2.3").Compare +``` + +The above will return `-1`. + +The return values are: + +- `-1` if the given semver is greater than the semver whose `Compare` method was called +- `1` if the version who's `Compare` function was called is greater. +- `0` if they are the same version + +(Note that in SemVer, the `Metadata` field is not compared during version +comparison operations.) + + +## semverCompare + +A more robust comparison function is provided as `semverCompare`. This version +supports version ranges: + +- `semverCompare "1.2.3" "1.2.3"` checks for an exact match +- `semverCompare "^1.2.0" "1.2.3"` checks that the major and minor versions match, and that the patch + number of the second version is _greater than or equal to_ the first parameter. + +The SemVer functions use the [Masterminds semver library](https://github.com/Masterminds/semver), +from the creators of Sprig. + + +## Basic Comparisons + +There are two elements to the comparisons. First, a comparison string is a list +of comma separated and comparisons. These are then separated by || separated or +comparisons. For example, `">= 1.2, < 3.0.0 || >= 4.2.3"` is looking for a +comparison that's greater than or equal to 1.2 and less than 3.0.0 or is +greater than or equal to 4.2.3. + +The basic comparisons are: + +* `=`: equal (aliased to no operator) +* `!=`: not equal +* `>`: greater than +* `<`: less than +* `>=`: greater than or equal to +* `<=`: less than or equal to + +_Note, according to the Semantic Version specification pre-releases may not be +API compliant with their release counterpart. It says,_ + +> _A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version._ + +_SemVer comparisons without a pre-release value will skip pre-release versions. +For example, `>1.2.3` will skip pre-releases when looking at a list of values +while `>1.2.3-alpha.1` will evaluate pre-releases._ + +## Hyphen Range Comparisons + +There are multiple methods to handle ranges and the first is hyphens ranges. +These look like: + +* `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5` +* `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5` + +## Wildcards In Comparisons + +The `x`, `X`, and `*` characters can be used as a wildcard character. This works +for all comparison operators. When used on the `=` operator it falls +back to the pack level comparison (see tilde below). For example, + +* `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` +* `>= 1.2.x` is equivalent to `>= 1.2.0` +* `<= 2.x` is equivalent to `<= 3` +* `*` is equivalent to `>= 0.0.0` + +## Tilde Range Comparisons (Patch) + +The tilde (`~`) comparison operator is for patch level ranges when a minor +version is specified and major level changes when the minor number is missing. +For example, + +* `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0` +* `~1` is equivalent to `>= 1, < 2` +* `~2.3` is equivalent to `>= 2.3, < 2.4` +* `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` +* `~1.x` is equivalent to `>= 1, < 2` + +## Caret Range Comparisons (Major) + +The caret (`^`) comparison operator is for major level changes. This is useful +when comparisons of API versions as a major change is API breaking. For example, + +* `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0` +* `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0` +* `^2.3` is equivalent to `>= 2.3, < 3` +* `^2.x` is equivalent to `>= 2.0.0, < 3` + diff --git a/vendor/github.com/Masterminds/sprig/docs/string_slice.md b/vendor/github.com/Masterminds/sprig/docs/string_slice.md new file mode 100644 index 0000000..25643ec --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/string_slice.md @@ -0,0 +1,55 @@ +# String Slice Functions + +These function operate on or generate slices of strings. In Go, a slice is a +growable array. In Sprig, it's a special case of a `list`. + +## join + +Join a list of strings into a single string, with the given separator. + +``` +list "hello" "world" | join "_" +``` + +The above will produce `hello_world` + +`join` will try to convert non-strings to a string value: + +``` +list 1 2 3 | join "+" +``` + +The above will produce `1+2+3` + +## splitList and split + +Split a string into a list of strings: + +``` +splitList "$" "foo$bar$baz" +``` + +The above will return `[foo bar baz]` + +The older `split` function splits a string into a `dict`. It is designed to make +it easy to use template dot notation for accessing members: + +``` +$a := split "$" "foo$bar$baz" +``` + +The above produces a map with index keys. `{_0: foo, _1: bar, _2: baz}` + +``` +$a._0 +``` + +The above produces `foo` + +## sortAlpha + +The `sortAlpha` function sorts a list of strings into alphabetical (lexicographical) +order. + +It does _not_ sort in place, but returns a sorted copy of the list, in keeping +with the immutability of lists. diff --git a/vendor/github.com/Masterminds/sprig/docs/strings.md b/vendor/github.com/Masterminds/sprig/docs/strings.md new file mode 100644 index 0000000..3776f01 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/strings.md @@ -0,0 +1,285 @@ +# String Functions + +Sprig has a number of string manipulation functions. + +## trim + +The `trim` function removes space from either side of a string: + +``` +trim " hello " +``` + +The above produces `hello` + +## trimAll + +Remove given characters from the front or back of a string: + +``` +trimAll "$" "$5.00" +``` + +The above returns `5.00` (as a string). + +## trimSuffix + +Trim just the suffix from a string: + +``` +trimSuffix "-" "hello-" +``` + +The above returns `hello` + +## upper + +Convert the entire string to uppercase: + +``` +upper "hello" +``` + +The above returns `HELLO` + +## lower + +Convert the entire string to lowercase: + +``` +lower "HELLO" +``` + +The above returns `hello` + +## title + +Convert to title case: + +``` +title "hello world" +``` + +The above returns `Hello World` + +## untitle + +Remove title casing. `untitle "Hello World"` produces `hello world`. + +## repeat + +Repeat a string multiple times: + +``` +repeat 3 "hello" +``` + +The above returns `hellohellohello` + +## substr + +Get a substring from a string. It takes three parameters: + +- start (int) +- length (int) +- string (string) + +``` +substr 0 5 "hello world" +``` + +The above returns `hello` + +## nospace + +Remove all whitespace from a string. + +``` +nospace "hello w o r l d" +``` + +The above returns `helloworld` + +## trunc + +Truncate a string (and add no suffix) + +``` +trunc 5 "hello world" +``` + +The above produces `hello`. + +## abbrev + +Truncate a string with ellipses (`...`) + +Parameters: +- max length +- the string + +``` +abbrev 5 "hello world" +``` + +The above returns `he...`, since it counts the width of the ellipses against the +maximum length. + +## abbrevboth + +Abbreviate both sides: + +``` +abbrevboth 5 10 "1234 5678 9123" +``` + +the above produces `...5678...` + +It takes: + +- left offset +- max length +- the string + +## initials + +Given multiple words, take the first letter of each word and combine. + +``` +initials "First Try" +``` + +The above returns `FT` + +## randAlphaNum, randAlpha, randNumeric, and randAscii + +These four functions generate random strings, but with different base character +sets: + +- `randAlphaNum` uses `0-9a-zA-Z` +- `randAlpha` uses `a-zA-Z` +- `randNumeric` uses `0-9` +- `randAscii` uses all printable ASCII characters + +Each of them takes one parameter: the integer length of the string. + +``` +randNumeric 3 +``` + +The above will produce a random string with three digits. + +## wrap + +Wrap text at a given column count: + +``` +wrap 80 $someText +``` + +The above will wrap the string in `$someText` at 80 columns. + +## wrapWith + +`wrapWith` works as `wrap`, but lets you specify the string to wrap with. +(`wrap` uses `\n`) + +``` +wrapWith 5 "\t" "Hello World" +``` + +The above produces `hello world` (where the whitespace is an ASCII tab +character) + +## contains + +Test to see if one string is contained inside of another: + +``` +contains "cat" "catch" +``` + +The above returns `true` because `catch` contains `cat`. + +## hasPrefix and hasSuffix + +The `hasPrefix` and `hasSuffix` functions test whether a string has a given +prefix or suffix: + +``` +hasPrefix "cat" "catch" +``` + +The above returns `true` because `catch` has the prefix `cat`. + +## quote and squote + +These functions wrap a string in double quotes (`quote`) or single quotes +(`squote`). + +## cat + +The `cat` function concatenates multiple strings together into one, separating +them with spaces: + +``` +cat "hello" "beautiful" "world" +``` + +The above produces `hello beautiful world` + +## indent + +The `indent` function indents every line in a given string to the specified +indent width. This is useful when aligning multi-line strings: + +``` +indent 4 $lots_of_text +``` + +The above will indent every line of text by 4 space characters. + +## replace + +Perform simple string replacement. + +It takes three arguments: + +- string to replace +- string to replace with +- source string + +``` +"I Am Henry VIII" | replace " " "-" +``` + +The above will produce `I-Am-Henry-VIII` + +## plural + +Pluralize a string. + +``` +len $fish | plural "one anchovy" "many anchovies" +``` + +In the above, if the length of the string is 1, the first argument will be +printed (`one anchovy`). Otherwise, the second argument will be printed +(`many anchovies`). + +The arguments are: + +- singular string +- plural string +- length integer + +NOTE: Sprig does not currently support languages with more complex pluralization +rules. And `0` is considered a plural because the English language treats it +as such (`zero anchovies`). The Sprig developers are working on a solution for +better internationalization. + +## See Also... + +The [Conversion Functions](conversion.html) contain functions for converting +strings. The [String Slice Functions](string_slice.html) contains functions +for working with an array of strings. diff --git a/vendor/github.com/Masterminds/sprig/docs/uuid.md b/vendor/github.com/Masterminds/sprig/docs/uuid.md new file mode 100644 index 0000000..1b57a33 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/docs/uuid.md @@ -0,0 +1,9 @@ +# UUID Functions + +Sprig can generate UUID v4 universally unique IDs. + +``` +uuidv4 +``` + +The above returns a new UUID of the v4 (randomly generated) type. diff --git a/vendor/github.com/Masterminds/sprig/functions.go b/vendor/github.com/Masterminds/sprig/functions.go index 601f3b5..be10836 100644 --- a/vendor/github.com/Masterminds/sprig/functions.go +++ b/vendor/github.com/Masterminds/sprig/functions.go @@ -1,215 +1,22 @@ -/* -Sprig: Template functions for Go. - -This package contains a number of utility functions for working with data -inside of Go `html/template` and `text/template` files. - -To add these functions, use the `template.Funcs()` method: - - t := templates.New("foo").Funcs(sprig.FuncMap()) - -Note that you should add the function map before you parse any template files. - - In several cases, Sprig reverses the order of arguments from the way they - appear in the standard library. This is to make it easier to pipe - arguments into functions. - -Date Functions - - - date FORMAT TIME: Format a date, where a date is an integer type or a time.Time type, and - format is a time.Format formatting string. - - dateModify: Given a date, modify it with a duration: `date_modify "-1.5h" now`. If the duration doesn't - parse, it returns the time unaltered. See `time.ParseDuration` for info on duration strings. - - now: Current time.Time, for feeding into date-related functions. - - htmlDate TIME: Format a date for use in the value field of an HTML "date" form element. - - dateInZone FORMAT TIME TZ: Like date, but takes three arguments: format, timestamp, - timezone. - - htmlDateInZone TIME TZ: Like htmlDate, but takes two arguments: timestamp, - timezone. - -String Functions - - - abbrev: Truncate a string with ellipses. `abbrev 5 "hello world"` yields "he..." - - abbrevboth: Abbreviate from both sides, yielding "...lo wo..." - - trunc: Truncate a string (no suffix). `trunc 5 "Hello World"` yields "hello". - - trim: strings.TrimSpace - - trimAll: strings.Trim, but with the argument order reversed `trimAll "$" "$5.00"` or `"$5.00 | trimAll "$"` - - trimSuffix: strings.TrimSuffix, but with the argument order reversed: `trimSuffix "-" "ends-with-"` - - trimPrefix: strings.TrimPrefix, but with the argument order reversed `trimPrefix "$" "$5"` - - upper: strings.ToUpper - - lower: strings.ToLower - - nospace: Remove all space characters from a string. `nospace "h e l l o"` becomes "hello" - - title: strings.Title - - untitle: Remove title casing - - repeat: strings.Repeat, but with the arguments switched: `repeat count str`. (This simplifies common pipelines) - - substr: Given string, start, and length, return a substr. - - initials: Given a multi-word string, return the initials. `initials "Matt Butcher"` returns "MB" - - randAlphaNum: Given a length, generate a random alphanumeric sequence - - randAlpha: Given a length, generate an alphabetic string - - randAscii: Given a length, generate a random ASCII string (symbols included) - - randNumeric: Given a length, generate a string of digits. - - wrap: Force a line wrap at the given width. `wrap 80 "imagine a longer string"` - - wrapWith: Wrap a line at the given length, but using 'sep' instead of a newline. `wrapWith 50, "
", $html` - - contains: strings.Contains, but with the arguments switched: `contains substr str`. (This simplifies common pipelines) - - hasPrefix: strings.hasPrefix, but with the arguments switched - - hasSuffix: strings.hasSuffix, but with the arguments switched - - quote: Wrap string(s) in double quotation marks, escape the contents by adding '\' before '"'. - - squote: Wrap string(s) in double quotation marks, does not escape content. - - cat: Concatenate strings, separating them by spaces. `cat $a $b $c`. - - indent: Indent a string using space characters. `indent 4 "foo\nbar"` produces " foo\n bar" - - replace: Replace an old with a new in a string: `$name | replace " " "-"` - - plural: Choose singular or plural based on length: `len $fish | plural "one anchovy" "many anchovies"` - - sha256sum: Generate a hex encoded sha256 hash of the input - -String Slice Functions: - - - join: strings.Join, but as `join SEP SLICE` - - split: strings.Split, but as `split SEP STRING`. The results are returned - as a map with the indexes set to _N, where N is an integer starting from 0. - Use it like this: `{{$v := "foo/bar/baz" | split "/"}}{{$v._0}}` (Prints `foo`) - -Integer Slice Functions: - - - until: Given an integer, returns a slice of counting integers from 0 to one - less than the given integer: `range $i, $e := until 5` - - untilStep: Given start, stop, and step, return an integer slice starting at - 'start', stopping at `stop`, and incrementing by 'step. This is the same - as Python's long-form of 'range'. - -Conversions: - - - atoi: Convert a string to an integer. 0 if the integer could not be parsed. - - in64: Convert a string or another numeric type to an int64. - - int: Convert a string or another numeric type to an int. - - float64: Convert a string or another numeric type to a float64. - -Defaults: - - - default: Give a default value. Used like this: trim " "| default "empty". - Since trim produces an empty string, the default value is returned. For - things with a length (strings, slices, maps), len(0) will trigger the default. - For numbers, the value 0 will trigger the default. For booleans, false will - trigger the default. For structs, the default is never returned (there is - no clear empty condition). For everything else, nil value triggers a default. - - empty: Return true if the given value is the zero value for its type. - Caveats: structs are always non-empty. This should match the behavior of - {{if pipeline}}, but can be used inside of a pipeline. - -OS: - - env: Resolve an environment variable - - expandenv: Expand a string through the environment - -File Paths: - - base: Return the last element of a path. https://golang.org/pkg/path#Base - - dir: Remove the last element of a path. https://golang.org/pkg/path#Dir - - clean: Clean a path to the shortest equivalent name. (e.g. remove "foo/.." - from "foo/../bar.html") https://golang.org/pkg/path#Clean - - ext: https://golang.org/pkg/path#Ext - - isAbs: https://golang.org/pkg/path#IsAbs - -Encoding: - - b64enc: Base 64 encode a string. - - b64dec: Base 64 decode a string. - -Reflection: - - - typeOf: Takes an interface and returns a string representation of the type. - For pointers, this will return a type prefixed with an asterisk(`*`). So - a pointer to type `Foo` will be `*Foo`. - - typeIs: Compares an interface with a string name, and returns true if they match. - Note that a pointer will not match a reference. For example `*Foo` will not - match `Foo`. - - typeIsLike: Compares an interface with a string name and returns true if - the interface is that `name` or that `*name`. In other words, if the given - value matches the given type or is a pointer to the given type, this returns - true. - - kindOf: Takes an interface and returns a string representation of its kind. - - kindIs: Returns true if the given string matches the kind of the given interface. - - Note: None of these can test whether or not something implements a given - interface, since doing so would require compiling the interface in ahead of - time. - -Data Structures: - - - tuple: Takes an arbitrary list of items and returns a slice of items. Its - tuple-ish properties are mainly gained through the template idiom, and not - through an API provided here. - - dict: Takes a list of name/values and returns a map[string]interface{}. - The first parameter is converted to a string and stored as a key, the - second parameter is treated as the value. And so on, with odds as keys and - evens as values. If the function call ends with an odd, the last key will - be assigned the empty string. Non-string keys are converted to strings as - follows: []byte are converted, fmt.Stringers will have String() called. - errors will have Error() called. All others will be passed through - fmt.Sprtinf("%v"). - - set: Takes a dict, a key, and a value, and sets that key/value pair in - the dict. `set $dict $key $value`. For convenience, it returns the dict, - even though the dict was modified in place. - - unset: Takes a dict and a key, and deletes that key/value pair from the - dict. `unset $dict $key`. This returns the dict for convenience. - - hasKey: Takes a dict and a key, and returns boolean true if the key is in - the dict. - -Math Functions: - -Integer functions will convert integers of any width to `int64`. If a -string is passed in, functions will attempt to convert with -`strconv.ParseInt(s, 1064)`. If this fails, the value will be treated as 0. - - - add1: Increment an integer by 1 - - add: Sum an arbitrary number of integers - - sub: Subtract the second integer from the first - - div: Divide the first integer by the second - - mod: Module of first integer divided by second - - mul: Multiply integers - - max: Return the biggest of a series of one or more integers - - min: Return the smallest of a series of one or more integers - - biggest: DEPRECATED. Return the biggest of a series of one or more integers - -Crypto Functions: - - - genPrivateKey: Generate a private key for the given cryptosystem. If no - argument is supplied, by default it will generate a private key using - the RSA algorithm. Accepted values are `rsa`, `dsa`, and `ecdsa`. - -*/ package sprig import ( - "crypto/dsa" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rand" - "crypto/rsa" - "crypto/sha256" - "crypto/x509" - "encoding/asn1" - "encoding/base32" - "encoding/base64" - "encoding/hex" - "encoding/pem" - "fmt" "html/template" - "math" - "math/big" "os" "path" - "reflect" "strconv" "strings" ttemplate "text/template" "time" util "github.com/aokoli/goutils" - uuid "github.com/satori/go.uuid" ) // Produce the function map. // // Use this to pass the functions into the template engine: // -// tpl := template.New("foo").Funcs(sprig.FuncMap)) +// tpl := template.New("foo").Funcs(sprig.FuncMap())) // func FuncMap() template.FuncMap { return HtmlFuncMap() @@ -235,12 +42,21 @@ func HermeticHtmlFuncMap() template.FuncMap { // TextFuncMap returns a 'text/template'.FuncMap func TxtFuncMap() ttemplate.FuncMap { - return ttemplate.FuncMap(genericMap) + return ttemplate.FuncMap(GenericFuncMap()) } // HtmlFuncMap returns an 'html/template'.Funcmap func HtmlFuncMap() template.FuncMap { - return template.FuncMap(genericMap) + return template.FuncMap(GenericFuncMap()) +} + +// GenericFuncMap returns a copy of the basic function map as a map[string]interface{}. +func GenericFuncMap() map[string]interface{} { + gfm := make(map[string]interface{}, len(genericMap)) + for k, v := range genericMap { + gfm[k] = v + } + return gfm } // These functions are not guaranteed to evaluate to the same result for given input, because they @@ -319,6 +135,7 @@ var genericMap = map[string]interface{}{ "replace": replace, "plural": plural, "sha256sum": sha256sum, + "toString": strval, // Wrap Atoi to stop errors. "atoi": func(a string) int { i, _ := strconv.Atoi(a); return i }, @@ -332,7 +149,9 @@ var genericMap = map[string]interface{}{ //"lte": func(a, b int) bool {return a <= b}, // split "/" foo/bar returns map[int]string{0: foo, 1: bar} - "split": split, + "split": split, + "splitList": func(sep, orig string) []string { return strings.Split(orig, sep) }, + "toStrings": strslice, "until": until, "untilStep": untilStep, @@ -362,11 +181,14 @@ var genericMap = map[string]interface{}{ // string slices. Note that we reverse the order b/c that's better // for template processing. - "join": func(sep string, ss []string) string { return strings.Join(ss, sep) }, + "join": join, + "sortAlpha": sortAlpha, // Defaults - "default": dfault, - "empty": empty, + "default": dfault, + "empty": empty, + "coalesce": coalesce, + "compact": compact, // Reflection "typeOf": typeOf, @@ -393,503 +215,36 @@ var genericMap = map[string]interface{}{ "b32dec": base32decode, // Data Structures: - "tuple": tuple, + "tuple": list, // FIXME: with the addition of append/prepend these are no longer immutable. + "list": list, "dict": dict, "set": set, "unset": unset, "hasKey": hasKey, + "pluck": pluck, + "keys": keys, + "pick": pick, + "omit": omit, + + "append": push, "push": push, + "prepend": prepend, + "first": first, + "rest": rest, + "last": last, + "initial": initial, + "reverse": reverse, + "uniq": uniq, + "without": without, + "has": func(needle interface{}, haystack []interface{}) bool { return inList(haystack, needle) }, // Crypto: - "genPrivateKey": generatePrivateKey, + "genPrivateKey": generatePrivateKey, + "derivePassword": derivePassword, // UUIDs: "uuidv4": uuidv4, -} - -func split(sep, orig string) map[string]string { - parts := strings.Split(orig, sep) - res := make(map[string]string, len(parts)) - for i, v := range parts { - res["_"+strconv.Itoa(i)] = v - } - return res -} - -// substring creates a substring of the given string. -// -// If start is < 0, this calls string[:length]. -// -// If start is >= 0 and length < 0, this calls string[start:] -// -// Otherwise, this calls string[start, length]. -func substring(start, length int, s string) string { - if start < 0 { - return s[:length] - } - if length < 0 { - return s[start:] - } - return s[start:length] -} - -// Given a format and a date, format the date string. -// -// Date can be a `time.Time` or an `int, int32, int64`. -// In the later case, it is treated as seconds since UNIX -// epoch. -func date(fmt string, date interface{}) string { - return dateInZone(fmt, date, "Local") -} - -func htmlDate(date interface{}) string { - return dateInZone("2006-01-02", date, "Local") -} - -func htmlDateInZone(date interface{}, zone string) string { - return dateInZone("2006-01-02", date, zone) -} - -func dateInZone(fmt string, date interface{}, zone string) string { - var t time.Time - switch date := date.(type) { - default: - t = time.Now() - case time.Time: - t = date - case int64: - t = time.Unix(date, 0) - case int: - t = time.Unix(int64(date), 0) - case int32: - t = time.Unix(int64(date), 0) - } - - loc, err := time.LoadLocation(zone) - if err != nil { - loc, _ = time.LoadLocation("UTC") - } - - return t.In(loc).Format(fmt) -} - -func dateModify(fmt string, date time.Time) time.Time { - d, err := time.ParseDuration(fmt) - if err != nil { - return date - } - return date.Add(d) -} - -func max(a interface{}, i ...interface{}) int64 { - aa := toInt64(a) - for _, b := range i { - bb := toInt64(b) - if bb > aa { - aa = bb - } - } - return aa -} - -func min(a interface{}, i ...interface{}) int64 { - aa := toInt64(a) - for _, b := range i { - bb := toInt64(b) - if bb < aa { - aa = bb - } - } - return aa -} - -// dfault checks whether `given` is set, and returns default if not set. -// -// This returns `d` if `given` appears not to be set, and `given` otherwise. -// -// For numeric types 0 is unset. -// For strings, maps, arrays, and slices, len() = 0 is considered unset. -// For bool, false is unset. -// Structs are never considered unset. -// -// For everything else, including pointers, a nil value is unset. -func dfault(d interface{}, given ...interface{}) interface{} { - - if empty(given) || empty(given[0]) { - return d - } - return given[0] -} - -// empty returns true if the given value has the zero value for its type. -func empty(given interface{}) bool { - g := reflect.ValueOf(given) - if !g.IsValid() { - return true - } - - // Basically adapted from text/template.isTrue - switch g.Kind() { - default: - return g.IsNil() - case reflect.Array, reflect.Slice, reflect.Map, reflect.String: - return g.Len() == 0 - case reflect.Bool: - return g.Bool() == false - case reflect.Complex64, reflect.Complex128: - return g.Complex() == 0 - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return g.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return g.Uint() == 0 - case reflect.Float32, reflect.Float64: - return g.Float() == 0 - case reflect.Struct: - return false - } - return true -} - -// typeIs returns true if the src is the type named in target. -func typeIs(target string, src interface{}) bool { - return target == typeOf(src) -} - -func typeIsLike(target string, src interface{}) bool { - t := typeOf(src) - return target == t || "*"+target == t -} - -func typeOf(src interface{}) string { - return fmt.Sprintf("%T", src) -} - -func kindIs(target string, src interface{}) bool { - return target == kindOf(src) -} - -func kindOf(src interface{}) string { - return reflect.ValueOf(src).Kind().String() -} - -func base64encode(v string) string { - return base64.StdEncoding.EncodeToString([]byte(v)) -} - -func base64decode(v string) string { - data, err := base64.StdEncoding.DecodeString(v) - if err != nil { - return err.Error() - } - return string(data) -} - -func base32encode(v string) string { - return base32.StdEncoding.EncodeToString([]byte(v)) -} - -func base32decode(v string) string { - data, err := base32.StdEncoding.DecodeString(v) - if err != nil { - return err.Error() - } - return string(data) -} - -func abbrev(width int, s string) string { - if width < 4 { - return s - } - r, _ := util.Abbreviate(s, width) - return r -} - -func abbrevboth(left, right int, s string) string { - if right < 4 || left > 0 && right < 7 { - return s - } - r, _ := util.AbbreviateFull(s, left, right) - return r -} -func initials(s string) string { - // Wrap this just to eliminate the var args, which templates don't do well. - return util.Initials(s) -} - -func randAlphaNumeric(count int) string { - // It is not possible, it appears, to actually generate an error here. - r, _ := util.RandomAlphaNumeric(count) - return r -} - -func randAlpha(count int) string { - r, _ := util.RandomAlphabetic(count) - return r -} - -func randAscii(count int) string { - r, _ := util.RandomAscii(count) - return r -} - -func randNumeric(count int) string { - r, _ := util.RandomNumeric(count) - return r -} - -func untitle(str string) string { - return util.Uncapitalize(str) -} - -func quote(str ...interface{}) string { - out := make([]string, len(str)) - for i, s := range str { - out[i] = fmt.Sprintf("%q", strval(s)) - } - return strings.Join(out, " ") -} - -func squote(str ...interface{}) string { - out := make([]string, len(str)) - for i, s := range str { - out[i] = fmt.Sprintf("'%v'", s) - } - return strings.Join(out, " ") -} - -func tuple(v ...interface{}) []interface{} { - return v -} - -func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} { - d[key] = value - return d -} - -func unset(d map[string]interface{}, key string) map[string]interface{} { - delete(d, key) - return d -} - -func hasKey(d map[string]interface{}, key string) bool { - _, ok := d[key] - return ok -} - -func dict(v ...interface{}) map[string]interface{} { - dict := map[string]interface{}{} - lenv := len(v) - for i := 0; i < lenv; i += 2 { - key := strval(v[i]) - if i+1 >= lenv { - dict[key] = "" - continue - } - dict[key] = v[i+1] - } - return dict -} - -func strval(v interface{}) string { - switch v := v.(type) { - case string: - return v - case []byte: - return string(v) - case error: - return v.Error() - case fmt.Stringer: - return v.String() - default: - return fmt.Sprintf("%v", v) - } -} - -// toFloat64 converts 64-bit floats -func toFloat64(v interface{}) float64 { - if str, ok := v.(string); ok { - iv, err := strconv.ParseFloat(str, 64) - if err != nil { - return 0 - } - return iv - } - - val := reflect.Indirect(reflect.ValueOf(v)) - switch val.Kind() { - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - return float64(val.Int()) - case reflect.Uint8, reflect.Uint16, reflect.Uint32: - return float64(val.Uint()) - case reflect.Uint, reflect.Uint64: - return float64(val.Uint()) - case reflect.Float32, reflect.Float64: - return val.Float() - case reflect.Bool: - if val.Bool() == true { - return 1 - } - return 0 - default: - return 0 - } -} - -func toInt(v interface{}) int { - //It's not optimal. Bud I don't want duplicate toInt64 code. - return int(toInt64(v)) -} - -// toInt64 converts integer types to 64-bit integers -func toInt64(v interface{}) int64 { - if str, ok := v.(string); ok { - iv, err := strconv.ParseInt(str, 10, 64) - if err != nil { - return 0 - } - return iv - } - - val := reflect.Indirect(reflect.ValueOf(v)) - switch val.Kind() { - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - return val.Int() - case reflect.Uint8, reflect.Uint16, reflect.Uint32: - return int64(val.Uint()) - case reflect.Uint, reflect.Uint64: - tv := val.Uint() - if tv <= math.MaxInt64 { - return int64(tv) - } - // TODO: What is the sensible thing to do here? - return math.MaxInt64 - case reflect.Float32, reflect.Float64: - return int64(val.Float()) - case reflect.Bool: - if val.Bool() == true { - return 1 - } - return 0 - default: - return 0 - } -} - -func generatePrivateKey(typ string) string { - var priv interface{} - var err error - switch typ { - case "", "rsa": - // good enough for government work - priv, err = rsa.GenerateKey(rand.Reader, 4096) - case "dsa": - key := new(dsa.PrivateKey) - // again, good enough for government work - if err = dsa.GenerateParameters(&key.Parameters, rand.Reader, dsa.L2048N256); err != nil { - return fmt.Sprintf("failed to generate dsa params: %s", err) - } - err = dsa.GenerateKey(key, rand.Reader) - priv = key - case "ecdsa": - // again, good enough for government work - priv, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader) - default: - return "Unknown type " + typ - } - if err != nil { - return fmt.Sprintf("failed to generate private key: %s", err) - } - - return string(pem.EncodeToMemory(pemBlockForKey(priv))) -} - -type DSAKeyFormat struct { - Version int - P, Q, G, Y, X *big.Int -} - -func pemBlockForKey(priv interface{}) *pem.Block { - switch k := priv.(type) { - case *rsa.PrivateKey: - return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} - case *dsa.PrivateKey: - val := DSAKeyFormat{ - P: k.P, Q: k.Q, G: k.G, - Y: k.Y, X: k.X, - } - bytes, _ := asn1.Marshal(val) - return &pem.Block{Type: "DSA PRIVATE KEY", Bytes: bytes} - case *ecdsa.PrivateKey: - b, _ := x509.MarshalECPrivateKey(k) - return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} - default: - return nil - } -} - -func trunc(c int, s string) string { - if len(s) <= c { - return s - } - return s[0:c] -} - -func cat(v ...interface{}) string { - r := strings.TrimSpace(strings.Repeat("%v ", len(v))) - return fmt.Sprintf(r, v...) -} - -func indent(spaces int, v string) string { - pad := strings.Repeat(" ", spaces) - return pad + strings.Replace(v, "\n", "\n"+pad, -1) -} - -func replace(old, new, src string) string { - return strings.Replace(src, old, new, -1) -} - -func plural(one, many string, count int) string { - if count == 1 { - return one - } - return many -} - -func sha256sum(input string) string { - hash := sha256.Sum256([]byte(input)) - return hex.EncodeToString(hash[:]) -} - -func until(count int) []int { - step := 1 - if count < 0 { - step = -1 - } - return untilStep(0, count, step) -} - -func untilStep(start, stop, step int) []int { - v := []int{} - - if stop < start { - if step >= 0 { - return v - } - for i := start; i > stop; i += step { - v = append(v, i) - } - return v - } - - if step <= 0 { - return v - } - for i := start; i < stop; i += step { - v = append(v, i) - } - return v -} - -// uuidv4 provides a safe and secure UUID v4 implementation -func uuidv4() string { - return fmt.Sprintf("%s", uuid.NewV4()) + + // SemVer: + "semver": semver, + "semverCompare": semverCompare, } diff --git a/vendor/github.com/Masterminds/sprig/functions_test.go b/vendor/github.com/Masterminds/sprig/functions_test.go index 2b47923..499d488 100644 --- a/vendor/github.com/Masterminds/sprig/functions_test.go +++ b/vendor/github.com/Masterminds/sprig/functions_test.go @@ -2,376 +2,14 @@ package sprig import ( "bytes" - "encoding/base32" - "encoding/base64" "fmt" - "math/rand" "os" - "strings" "testing" "text/template" - "github.com/aokoli/goutils" "github.com/stretchr/testify/assert" ) -// This is woefully incomplete. Please help. - -func TestSubstr(t *testing.T) { - tpl := `{{"fooo" | substr 0 3 }}` - if err := runt(tpl, "foo"); err != nil { - t.Error(err) - } -} - -func TestTrunc(t *testing.T) { - tpl := `{{ "foooooo" | trunc 3 }}` - if err := runt(tpl, "foo"); err != nil { - t.Error(err) - } -} - -func TestQuote(t *testing.T) { - tpl := `{{quote "a" "b" "c"}}` - if err := runt(tpl, `"a" "b" "c"`); err != nil { - t.Error(err) - } - tpl = `{{quote "\"a\"" "b" "c"}}` - if err := runt(tpl, `"\"a\"" "b" "c"`); err != nil { - t.Error(err) - } - tpl = `{{quote 1 2 3 }}` - if err := runt(tpl, `"1" "2" "3"`); err != nil { - t.Error(err) - } -} -func TestSquote(t *testing.T) { - tpl := `{{squote "a" "b" "c"}}` - if err := runt(tpl, `'a' 'b' 'c'`); err != nil { - t.Error(err) - } - tpl = `{{squote 1 2 3 }}` - if err := runt(tpl, `'1' '2' '3'`); err != nil { - t.Error(err) - } -} - -func TestContains(t *testing.T) { - // Mainly, we're just verifying the paramater order swap. - tests := []string{ - `{{if contains "cat" "fair catch"}}1{{end}}`, - `{{if hasPrefix "cat" "catch"}}1{{end}}`, - `{{if hasSuffix "cat" "ducat"}}1{{end}}`, - } - for _, tt := range tests { - if err := runt(tt, "1"); err != nil { - t.Error(err) - } - } -} - -func TestTrim(t *testing.T) { - tests := []string{ - `{{trim " 5.00 "}}`, - `{{trimAll "$" "$5.00$"}}`, - `{{trimPrefix "$" "$5.00"}}`, - `{{trimSuffix "$" "5.00$"}}`, - } - for _, tt := range tests { - if err := runt(tt, "5.00"); err != nil { - t.Error(err) - } - } -} - -func TestAdd(t *testing.T) { - tpl := `{{ 3 | add 1 2}}` - if err := runt(tpl, `6`); err != nil { - t.Error(err) - } -} - -func TestMul(t *testing.T) { - tpl := `{{ 1 | mul "2" 3 "4"}}` - if err := runt(tpl, `24`); err != nil { - t.Error(err) - } -} - -func TestHtmlDate(t *testing.T) { - t.Skip() - tpl := `{{ htmlDate 0}}` - if err := runt(tpl, "1970-01-01"); err != nil { - t.Error(err) - } -} - -func TestBiggest(t *testing.T) { - tpl := `{{ biggest 1 2 3 345 5 6 7}}` - if err := runt(tpl, `345`); err != nil { - t.Error(err) - } - - tpl = `{{ max 345}}` - if err := runt(tpl, `345`); err != nil { - t.Error(err) - } -} -func TestMin(t *testing.T) { - tpl := `{{ min 1 2 3 345 5 6 7}}` - if err := runt(tpl, `1`); err != nil { - t.Error(err) - } - - tpl = `{{ min 345}}` - if err := runt(tpl, `345`); err != nil { - t.Error(err) - } -} - -func TestDefault(t *testing.T) { - tpl := `{{"" | default "foo"}}` - if err := runt(tpl, "foo"); err != nil { - t.Error(err) - } - tpl = `{{default "foo" 234}}` - if err := runt(tpl, "234"); err != nil { - t.Error(err) - } - tpl = `{{default "foo" 2.34}}` - if err := runt(tpl, "2.34"); err != nil { - t.Error(err) - } - - tpl = `{{ .Nothing | default "123" }}` - if err := runt(tpl, "123"); err != nil { - t.Error(err) - } - tpl = `{{ default "123" }}` - if err := runt(tpl, "123"); err != nil { - t.Error(err) - } -} - -func TestToFloat64(t *testing.T) { - target := float64(102) - if target != toFloat64(int8(102)) { - t.Errorf("Expected 102") - } - if target != toFloat64(int(102)) { - t.Errorf("Expected 102") - } - if target != toFloat64(int32(102)) { - t.Errorf("Expected 102") - } - if target != toFloat64(int16(102)) { - t.Errorf("Expected 102") - } - if target != toFloat64(int64(102)) { - t.Errorf("Expected 102") - } - if target != toFloat64("102") { - t.Errorf("Expected 102") - } - if 0 != toFloat64("frankie") { - t.Errorf("Expected 0") - } - if target != toFloat64(uint16(102)) { - t.Errorf("Expected 102") - } - if target != toFloat64(uint64(102)) { - t.Errorf("Expected 102") - } - if 102.1234 != toFloat64(float64(102.1234)) { - t.Errorf("Expected 102.1234") - } - if 1 != toFloat64(true) { - t.Errorf("Expected 102") - } -} -func TestToInt64(t *testing.T) { - target := int64(102) - if target != toInt64(int8(102)) { - t.Errorf("Expected 102") - } - if target != toInt64(int(102)) { - t.Errorf("Expected 102") - } - if target != toInt64(int32(102)) { - t.Errorf("Expected 102") - } - if target != toInt64(int16(102)) { - t.Errorf("Expected 102") - } - if target != toInt64(int64(102)) { - t.Errorf("Expected 102") - } - if target != toInt64("102") { - t.Errorf("Expected 102") - } - if 0 != toInt64("frankie") { - t.Errorf("Expected 0") - } - if target != toInt64(uint16(102)) { - t.Errorf("Expected 102") - } - if target != toInt64(uint64(102)) { - t.Errorf("Expected 102") - } - if target != toInt64(float64(102.1234)) { - t.Errorf("Expected 102") - } - if 1 != toInt64(true) { - t.Errorf("Expected 102") - } -} - -func TestToInt(t *testing.T) { - target := int(102) - if target != toInt(int8(102)) { - t.Errorf("Expected 102") - } - if target != toInt(int(102)) { - t.Errorf("Expected 102") - } - if target != toInt(int32(102)) { - t.Errorf("Expected 102") - } - if target != toInt(int16(102)) { - t.Errorf("Expected 102") - } - if target != toInt(int64(102)) { - t.Errorf("Expected 102") - } - if target != toInt("102") { - t.Errorf("Expected 102") - } - if 0 != toInt("frankie") { - t.Errorf("Expected 0") - } - if target != toInt(uint16(102)) { - t.Errorf("Expected 102") - } - if target != toInt(uint64(102)) { - t.Errorf("Expected 102") - } - if target != toInt(float64(102.1234)) { - t.Errorf("Expected 102") - } - if 1 != toInt(true) { - t.Errorf("Expected 102") - } -} - -func TestEmpty(t *testing.T) { - tpl := `{{if empty 1}}1{{else}}0{{end}}` - if err := runt(tpl, "0"); err != nil { - t.Error(err) - } - - tpl = `{{if empty 0}}1{{else}}0{{end}}` - if err := runt(tpl, "1"); err != nil { - t.Error(err) - } - tpl = `{{if empty ""}}1{{else}}0{{end}}` - if err := runt(tpl, "1"); err != nil { - t.Error(err) - } - tpl = `{{if empty 0.0}}1{{else}}0{{end}}` - if err := runt(tpl, "1"); err != nil { - t.Error(err) - } - tpl = `{{if empty false}}1{{else}}0{{end}}` - if err := runt(tpl, "1"); err != nil { - t.Error(err) - } - - dict := map[string]interface{}{"top": map[string]interface{}{}} - tpl = `{{if empty .top.NoSuchThing}}1{{else}}0{{end}}` - if err := runtv(tpl, "1", dict); err != nil { - t.Error(err) - } - tpl = `{{if empty .bottom.NoSuchThing}}1{{else}}0{{end}}` - if err := runtv(tpl, "1", dict); err != nil { - t.Error(err) - } -} - -func TestSplit(t *testing.T) { - tpl := `{{$v := "foo$bar$baz" | split "$"}}{{$v._0}}` - if err := runt(tpl, "foo"); err != nil { - t.Error(err) - } -} - -type fixtureTO struct { - Name, Value string -} - -func TestTypeOf(t *testing.T) { - f := &fixtureTO{"hello", "world"} - tpl := `{{typeOf .}}` - if err := runtv(tpl, "*sprig.fixtureTO", f); err != nil { - t.Error(err) - } -} - -func TestKindOf(t *testing.T) { - tpl := `{{kindOf .}}` - - f := fixtureTO{"hello", "world"} - if err := runtv(tpl, "struct", f); err != nil { - t.Error(err) - } - - f2 := []string{"hello"} - if err := runtv(tpl, "slice", f2); err != nil { - t.Error(err) - } - - var f3 *fixtureTO = nil - if err := runtv(tpl, "ptr", f3); err != nil { - t.Error(err) - } -} - -func TestTypeIs(t *testing.T) { - f := &fixtureTO{"hello", "world"} - tpl := `{{if typeIs "*sprig.fixtureTO" .}}t{{else}}f{{end}}` - if err := runtv(tpl, "t", f); err != nil { - t.Error(err) - } - - f2 := "hello" - if err := runtv(tpl, "f", f2); err != nil { - t.Error(err) - } -} -func TestTypeIsLike(t *testing.T) { - f := "foo" - tpl := `{{if typeIsLike "string" .}}t{{else}}f{{end}}` - if err := runtv(tpl, "t", f); err != nil { - t.Error(err) - } - - // Now make a pointer. Should still match. - f2 := &f - if err := runtv(tpl, "t", f2); err != nil { - t.Error(err) - } -} -func TestKindIs(t *testing.T) { - f := &fixtureTO{"hello", "world"} - tpl := `{{if kindIs "ptr" .}}t{{else}}f{{end}}` - if err := runtv(tpl, "t", f); err != nil { - t.Error(err) - } - f2 := "hello" - if err := runtv(tpl, "f", f2); err != nil { - t.Error(err) - } -} - func TestEnv(t *testing.T) { os.Setenv("FOO", "bar") tpl := `{{env "FOO"}}` @@ -388,217 +26,6 @@ func TestExpandEnv(t *testing.T) { } } -func TestBase64EncodeDecode(t *testing.T) { - magicWord := "coffee" - expect := base64.StdEncoding.EncodeToString([]byte(magicWord)) - - if expect == magicWord { - t.Fatal("Encoder doesn't work.") - } - - tpl := `{{b64enc "coffee"}}` - if err := runt(tpl, expect); err != nil { - t.Error(err) - } - tpl = fmt.Sprintf("{{b64dec %q}}", expect) - if err := runt(tpl, magicWord); err != nil { - t.Error(err) - } -} -func TestBase32EncodeDecode(t *testing.T) { - magicWord := "coffee" - expect := base32.StdEncoding.EncodeToString([]byte(magicWord)) - - if expect == magicWord { - t.Fatal("Encoder doesn't work.") - } - - tpl := `{{b32enc "coffee"}}` - if err := runt(tpl, expect); err != nil { - t.Error(err) - } - tpl = fmt.Sprintf("{{b32dec %q}}", expect) - if err := runt(tpl, magicWord); err != nil { - t.Error(err) - } -} - -func TestGoutils(t *testing.T) { - tests := map[string]string{ - `{{abbrev 5 "hello world"}}`: "he...", - `{{abbrevboth 5 10 "1234 5678 9123"}}`: "...5678...", - `{{nospace "h e l l o "}}`: "hello", - `{{untitle "First Try"}}`: "first try", //https://youtu.be/44-RsrF_V_w - `{{initials "First Try"}}`: "FT", - `{{wrap 5 "Hello World"}}`: "Hello\nWorld", - `{{wrapWith 5 "\t" "Hello World"}}`: "Hello\tWorld", - } - for k, v := range tests { - t.Log(k) - if err := runt(k, v); err != nil { - t.Errorf("Error on tpl %s: %s", err) - } - } -} - -func TestRandom(t *testing.T) { - // One of the things I love about Go: - goutils.RANDOM = rand.New(rand.NewSource(1)) - - // Because we're using a random number generator, we need these to go in - // a predictable sequence: - if err := runt(`{{randAlphaNum 5}}`, "9bzRv"); err != nil { - t.Errorf("Error on tpl %s: %s", err) - } - if err := runt(`{{randAlpha 5}}`, "VjwGe"); err != nil { - t.Errorf("Error on tpl %s: %s", err) - } - if err := runt(`{{randAscii 5}}`, "1KA5p"); err != nil { - t.Errorf("Error on tpl %s: %s", err) - } - if err := runt(`{{randNumeric 5}}`, "26018"); err != nil { - t.Errorf("Error on tpl %s: %s", err) - } - -} - -func TestCat(t *testing.T) { - tpl := `{{$b := "b"}}{{"c" | cat "a" $b}}` - if err := runt(tpl, "a b c"); err != nil { - t.Error(err) - } -} - -func TestIndent(t *testing.T) { - tpl := `{{indent 4 "a\nb\nc"}}` - if err := runt(tpl, " a\n b\n c"); err != nil { - t.Error(err) - } -} - -func TestReplace(t *testing.T) { - tpl := `{{"I Am Henry VIII" | replace " " "-"}}` - if err := runt(tpl, "I-Am-Henry-VIII"); err != nil { - t.Error(err) - } -} - -func TestPlural(t *testing.T) { - tpl := `{{$num := len "two"}}{{$num}} {{$num | plural "1 char" "chars"}}` - if err := runt(tpl, "3 chars"); err != nil { - t.Error(err) - } - tpl = `{{len "t" | plural "cheese" "%d chars"}}` - if err := runt(tpl, "cheese"); err != nil { - t.Error(err) - } -} - -func TestSha256Sum(t *testing.T) { - tpl := `{{"abc" | sha256sum}}` - if err := runt(tpl, "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"); err != nil { - t.Error(err) - } -} - -func TestTuple(t *testing.T) { - tpl := `{{$t := tuple 1 "a" "foo"}}{{index $t 2}}{{index $t 0 }}{{index $t 1}}` - if err := runt(tpl, "foo1a"); err != nil { - t.Error(err) - } -} - -func TestDict(t *testing.T) { - tpl := `{{$d := dict 1 2 "three" "four" 5}}{{range $k, $v := $d}}{{$k}}{{$v}}{{end}}` - out, err := runRaw(tpl, nil) - if err != nil { - t.Error(err) - } - if len(out) != 12 { - t.Errorf("Expected length 12, got %d", len(out)) - } - // dict does not guarantee ordering because it is backed by a map. - if !strings.Contains(out, "12") { - t.Error("Expected grouping 12") - } - if !strings.Contains(out, "threefour") { - t.Error("Expected grouping threefour") - } - if !strings.Contains(out, "5") { - t.Error("Expected 5") - } - tpl = `{{$t := dict "I" "shot" "the" "albatross"}}{{$t.the}} {{$t.I}}` - if err := runt(tpl, "albatross shot"); err != nil { - t.Error(err) - } -} - -func TestUnset(t *testing.T) { - tpl := `{{- $d := dict "one" 1 "two" 222222 -}} - {{- $_ := unset $d "two" -}} - {{- range $k, $v := $d}}{{$k}}{{$v}}{{- end -}} - ` - - expect := "one1" - if err := runt(tpl, expect); err != nil { - t.Error(err) - } -} -func TestHasKey(t *testing.T) { - tpl := `{{- $d := dict "one" 1 "two" 222222 -}} - {{- if hasKey $d "one" -}}1{{- end -}} - ` - - expect := "1" - if err := runt(tpl, expect); err != nil { - t.Error(err) - } -} - -func TestSet(t *testing.T) { - tpl := `{{- $d := dict "one" 1 "two" 222222 -}} - {{- $_ := set $d "two" 2 -}} - {{- $_ := set $d "three" 3 -}} - {{- if hasKey $d "one" -}}{{$d.one}}{{- end -}} - {{- if hasKey $d "two" -}}{{$d.two}}{{- end -}} - {{- if hasKey $d "three" -}}{{$d.three}}{{- end -}} - ` - - expect := "123" - if err := runt(tpl, expect); err != nil { - t.Error(err) - } -} - -func TestUntil(t *testing.T) { - tests := map[string]string{ - `{{range $i, $e := until 5}}{{$i}}{{$e}}{{end}}`: "0011223344", - `{{range $i, $e := until -5}}{{$i}}{{$e}} {{end}}`: "00 1-1 2-2 3-3 4-4 ", - } - for tpl, expect := range tests { - if err := runt(tpl, expect); err != nil { - t.Error(err) - } - } -} -func TestUntilStep(t *testing.T) { - tests := map[string]string{ - `{{range $i, $e := untilStep 0 5 1}}{{$i}}{{$e}}{{end}}`: "0011223344", - `{{range $i, $e := untilStep 3 6 1}}{{$i}}{{$e}}{{end}}`: "031425", - `{{range $i, $e := untilStep 0 -10 -2}}{{$i}}{{$e}} {{end}}`: "00 1-2 2-4 3-6 4-8 ", - `{{range $i, $e := untilStep 3 0 1}}{{$i}}{{$e}}{{end}}`: "", - `{{range $i, $e := untilStep 3 99 0}}{{$i}}{{$e}}{{end}}`: "", - `{{range $i, $e := untilStep 3 99 -1}}{{$i}}{{$e}}{{end}}`: "", - `{{range $i, $e := untilStep 3 0 0}}{{$i}}{{$e}}{{end}}`: "", - } - for tpl, expect := range tests { - if err := runt(tpl, expect); err != nil { - t.Error(err) - } - } - -} - func TestBase(t *testing.T) { assert.NoError(t, runt(`{{ base "foo/bar" }}`, "bar")) } @@ -620,92 +47,14 @@ func TestExt(t *testing.T) { assert.NoError(t, runt(`{{ ext "/foo/bar/baz.txt" }}`, ".txt")) } -func TestDelete(t *testing.T) { - fmap := TxtFuncMap() - delete(fmap, "split") - if _, ok := fmap["split"]; ok { - t.Error("Failed to delete split from map") - } -} - -// NOTE(bacongobbler): this test is really _slow_ because of how long it takes to compute -// and generate a new crypto key. -func TestGenPrivateKey(t *testing.T) { - // test that calling by default generates an RSA private key - tpl := `{{genPrivateKey ""}}` - out, err := runRaw(tpl, nil) - if err != nil { - t.Error(err) - } - if !strings.Contains(out, "RSA PRIVATE KEY") { - t.Error("Expected RSA PRIVATE KEY") - } - // test all acceptable arguments - tpl = `{{genPrivateKey "rsa"}}` - out, err = runRaw(tpl, nil) - if err != nil { - t.Error(err) - } - if !strings.Contains(out, "RSA PRIVATE KEY") { - t.Error("Expected RSA PRIVATE KEY") - } - tpl = `{{genPrivateKey "dsa"}}` - out, err = runRaw(tpl, nil) - if err != nil { - t.Error(err) - } - if !strings.Contains(out, "DSA PRIVATE KEY") { - t.Error("Expected DSA PRIVATE KEY") - } - tpl = `{{genPrivateKey "ecdsa"}}` - out, err = runRaw(tpl, nil) - if err != nil { - t.Error(err) - } - if !strings.Contains(out, "EC PRIVATE KEY") { - t.Error("Expected EC PRIVATE KEY") - } - // test bad - tpl = `{{genPrivateKey "bad"}}` - out, err = runRaw(tpl, nil) - if err != nil { - t.Error(err) - } - if out != "Unknown type bad" { - t.Error("Expected type 'bad' to be an unknown crypto algorithm") - } - // ensure that we can base64 encode the string - tpl = `{{genPrivateKey "rsa" | b64enc}}` - out, err = runRaw(tpl, nil) - if err != nil { - t.Error(err) - } -} - -func TestUUIDGeneration(t *testing.T) { - tpl := `{{uuidv4}}` - out, err := runRaw(tpl, nil) - if err != nil { - t.Error(err) - } - - if len(out) != 36 { - t.Error("Expected UUID of length 36") - } - - out2, err := runRaw(tpl, nil) - if err != nil { - t.Error(err) - } - - if out == out2 { - t.Error("Expected subsequent UUID generations to be different") - } -} - +// runt runs a template and checks that the output exactly matches the expected string. func runt(tpl, expect string) error { return runtv(tpl, expect, map[string]string{}) } + +// runtv takes a template, and expected return, and values for substitution. +// +// It runs the template and verifies that the output is an exact match. func runtv(tpl, expect string, vars interface{}) error { fmap := TxtFuncMap() t := template.Must(template.New("test").Funcs(fmap).Parse(tpl)) @@ -719,6 +68,8 @@ func runtv(tpl, expect string, vars interface{}) error { } return nil } + +// runRaw runs a template with the given variables and returns the result. func runRaw(tpl string, vars interface{}) (string, error) { fmap := TxtFuncMap() t := template.Must(template.New("test").Funcs(fmap).Parse(tpl)) diff --git a/vendor/github.com/Masterminds/sprig/glide.lock b/vendor/github.com/Masterminds/sprig/glide.lock index c3894b5..209cefc 100644 --- a/vendor/github.com/Masterminds/sprig/glide.lock +++ b/vendor/github.com/Masterminds/sprig/glide.lock @@ -1,8 +1,27 @@ -hash: a8ed42a70698b4d199b5de7fa33e7c48251651e6ccf97d007f546cb72a5d0f8f -updated: 2016-09-30T12:23:39.512939213-06:00 +hash: c2d7cb87ff32a0aba767b90bff630c3e4c1ca9904fc72568414d20d79a41e70f +updated: 2017-03-13T18:38:30.597881175-06:00 imports: - name: github.com/aokoli/goutils version: 9c37978a95bd5c709a15883b6242714ea6709e64 +- name: github.com/Masterminds/semver + version: 59c29afe1a994eacb71c833025ca7acf874bb1da - name: github.com/satori/go.uuid version: 879c5887cd475cd7864858769793b2ceb0d44feb -testImports: [] +- name: golang.org/x/crypto + version: 1f22c0103821b9390939b6776727195525381532 + subpackages: + - pbkdf2 + - scrypt +testImports: +- name: github.com/davecgh/go-spew + version: 5215b55f46b2b919f50a1df0eaa5886afe4e3b3d + subpackages: + - spew +- name: github.com/pmezard/go-difflib + version: d8ed2627bdf02c080bf22230dbb337003b7aba2d + subpackages: + - difflib +- name: github.com/stretchr/testify + version: e3a8ff8ce36581f87a15341206f205b1da467059 + subpackages: + - assert diff --git a/vendor/github.com/Masterminds/sprig/glide.yaml b/vendor/github.com/Masterminds/sprig/glide.yaml index 2fc21e2..b6c8b61 100644 --- a/vendor/github.com/Masterminds/sprig/glide.yaml +++ b/vendor/github.com/Masterminds/sprig/glide.yaml @@ -3,3 +3,8 @@ import: - package: github.com/aokoli/goutils - package: github.com/satori/go.uuid version: ^1.1.0 +- package: golang.org/x/crypto + subpackages: + - scrypt +- package: github.com/Masterminds/semver + version: v1.2.2 diff --git a/vendor/github.com/Masterminds/sprig/list.go b/vendor/github.com/Masterminds/sprig/list.go new file mode 100644 index 0000000..0c47b8c --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/list.go @@ -0,0 +1,109 @@ +package sprig + +import ( + "reflect" + "sort" +) + +func list(v ...interface{}) []interface{} { + return v +} + +func push(list []interface{}, v interface{}) []interface{} { + return append(list, v) +} + +func prepend(list []interface{}, v interface{}) []interface{} { + return append([]interface{}{v}, list...) +} + +func last(list []interface{}) interface{} { + l := len(list) + if l == 0 { + return nil + } + return list[l-1] +} + +func first(list []interface{}) interface{} { + if len(list) == 0 { + return nil + } + return list[0] +} + +func rest(list []interface{}) []interface{} { + if len(list) == 0 { + return list + } + return list[1:] +} + +func initial(list []interface{}) []interface{} { + l := len(list) + if l == 0 { + return list + } + return list[:l-1] +} + +func sortAlpha(list interface{}) []string { + k := reflect.Indirect(reflect.ValueOf(list)).Kind() + switch k { + case reflect.Slice, reflect.Array: + a := strslice(list) + s := sort.StringSlice(a) + s.Sort() + return s + } + return []string{strval(list)} +} + +func reverse(v []interface{}) []interface{} { + // We do not sort in place because the incomming array should not be altered. + l := len(v) + c := make([]interface{}, l) + for i := 0; i < l; i++ { + c[l-i-1] = v[i] + } + return c +} + +func compact(list []interface{}) []interface{} { + res := []interface{}{} + for _, item := range list { + if !empty(item) { + res = append(res, item) + } + } + return res +} + +func uniq(list []interface{}) []interface{} { + dest := []interface{}{} + for _, item := range list { + if !inList(dest, item) { + dest = append(dest, item) + } + } + return dest +} + +func inList(haystack []interface{}, needle interface{}) bool { + for _, h := range haystack { + if reflect.DeepEqual(needle, h) { + return true + } + } + return false +} + +func without(list []interface{}, omit ...interface{}) []interface{} { + res := []interface{}{} + for _, i := range list { + if !inList(omit, i) { + res = append(res, i) + } + } + return res +} diff --git a/vendor/github.com/Masterminds/sprig/list_test.go b/vendor/github.com/Masterminds/sprig/list_test.go new file mode 100644 index 0000000..03e8f70 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/list_test.go @@ -0,0 +1,135 @@ +package sprig + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestTuple(t *testing.T) { + tpl := `{{$t := tuple 1 "a" "foo"}}{{index $t 2}}{{index $t 0 }}{{index $t 1}}` + if err := runt(tpl, "foo1a"); err != nil { + t.Error(err) + } +} + +func TestList(t *testing.T) { + tpl := `{{$t := list 1 "a" "foo"}}{{index $t 2}}{{index $t 0 }}{{index $t 1}}` + if err := runt(tpl, "foo1a"); err != nil { + t.Error(err) + } +} + +func TestPush(t *testing.T) { + // Named `append` in the function map + tests := map[string]string{ + `{{ $t := tuple 1 2 3 }}{{ append $t 4 | len }}`: "4", + `{{ $t := tuple 1 2 3 4 }}{{ append $t 5 | join "-" }}`: "1-2-3-4-5", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} +func TestPrepend(t *testing.T) { + tests := map[string]string{ + `{{ $t := tuple 1 2 3 }}{{ prepend $t 0 | len }}`: "4", + `{{ $t := tuple 1 2 3 4 }}{{ prepend $t 0 | join "-" }}`: "0-1-2-3-4", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} + +func TestFirst(t *testing.T) { + tests := map[string]string{ + `{{ list 1 2 3 | first }}`: "1", + `{{ list | first }}`: "", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} +func TestLast(t *testing.T) { + tests := map[string]string{ + `{{ list 1 2 3 | last }}`: "3", + `{{ list | last }}`: "", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} + +func TestInitial(t *testing.T) { + tests := map[string]string{ + `{{ list 1 2 3 | initial | len }}`: "2", + `{{ list 1 2 3 | initial | last }}`: "2", + `{{ list 1 2 3 | initial | first }}`: "1", + `{{ list | initial }}`: "[]", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} + +func TestRest(t *testing.T) { + tests := map[string]string{ + `{{ list 1 2 3 | rest | len }}`: "2", + `{{ list 1 2 3 | rest | last }}`: "3", + `{{ list 1 2 3 | rest | first }}`: "2", + `{{ list | rest }}`: "[]", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} + +func TestReverse(t *testing.T) { + tests := map[string]string{ + `{{ list 1 2 3 | reverse | first }}`: "3", + `{{ list 1 2 3 | reverse | rest | first }}`: "2", + `{{ list 1 2 3 | reverse | last }}`: "1", + `{{ list 1 2 3 4 | reverse }}`: "[4 3 2 1]", + `{{ list 1 | reverse }}`: "[1]", + `{{ list | reverse }}`: "[]", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} + +func TestUniq(t *testing.T) { + tests := map[string]string{ + `{{ list 1 2 3 4 | uniq }}`: `[1 2 3 4]`, + `{{ list "a" "b" "c" "d" | uniq }}`: `[a b c d]`, + `{{ list 1 1 1 1 2 2 2 2 | uniq }}`: `[1 2]`, + `{{ list "foo" 1 1 1 1 "foo" "foo" | uniq }}`: `[foo 1]`, + `{{ list | uniq }}`: `[]`, + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} + +func TestWithout(t *testing.T) { + tests := map[string]string{ + `{{ without (list 1 2 3 4) 1 }}`: `[2 3 4]`, + `{{ without (list "a" "b" "c" "d") "a" }}`: `[b c d]`, + `{{ without (list 1 1 1 1 2) 1 }}`: `[2]`, + `{{ without (list) 1 }}`: `[]`, + `{{ without (list 1 2 3) }}`: `[1 2 3]`, + `{{ without list }}`: `[]`, + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} + +func TestHas(t *testing.T) { + tests := map[string]string{ + `{{ list 1 2 3 | has 1 }}`: `true`, + `{{ list 1 2 3 | has 4 }}`: `false`, + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} diff --git a/vendor/github.com/Masterminds/sprig/numeric.go b/vendor/github.com/Masterminds/sprig/numeric.go new file mode 100644 index 0000000..191e3b9 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/numeric.go @@ -0,0 +1,129 @@ +package sprig + +import ( + "math" + "reflect" + "strconv" +) + +// toFloat64 converts 64-bit floats +func toFloat64(v interface{}) float64 { + if str, ok := v.(string); ok { + iv, err := strconv.ParseFloat(str, 64) + if err != nil { + return 0 + } + return iv + } + + val := reflect.Indirect(reflect.ValueOf(v)) + switch val.Kind() { + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + return float64(val.Int()) + case reflect.Uint8, reflect.Uint16, reflect.Uint32: + return float64(val.Uint()) + case reflect.Uint, reflect.Uint64: + return float64(val.Uint()) + case reflect.Float32, reflect.Float64: + return val.Float() + case reflect.Bool: + if val.Bool() == true { + return 1 + } + return 0 + default: + return 0 + } +} + +func toInt(v interface{}) int { + //It's not optimal. Bud I don't want duplicate toInt64 code. + return int(toInt64(v)) +} + +// toInt64 converts integer types to 64-bit integers +func toInt64(v interface{}) int64 { + if str, ok := v.(string); ok { + iv, err := strconv.ParseInt(str, 10, 64) + if err != nil { + return 0 + } + return iv + } + + val := reflect.Indirect(reflect.ValueOf(v)) + switch val.Kind() { + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + return val.Int() + case reflect.Uint8, reflect.Uint16, reflect.Uint32: + return int64(val.Uint()) + case reflect.Uint, reflect.Uint64: + tv := val.Uint() + if tv <= math.MaxInt64 { + return int64(tv) + } + // TODO: What is the sensible thing to do here? + return math.MaxInt64 + case reflect.Float32, reflect.Float64: + return int64(val.Float()) + case reflect.Bool: + if val.Bool() == true { + return 1 + } + return 0 + default: + return 0 + } +} + +func max(a interface{}, i ...interface{}) int64 { + aa := toInt64(a) + for _, b := range i { + bb := toInt64(b) + if bb > aa { + aa = bb + } + } + return aa +} + +func min(a interface{}, i ...interface{}) int64 { + aa := toInt64(a) + for _, b := range i { + bb := toInt64(b) + if bb < aa { + aa = bb + } + } + return aa +} + +func until(count int) []int { + step := 1 + if count < 0 { + step = -1 + } + return untilStep(0, count, step) +} + +func untilStep(start, stop, step int) []int { + v := []int{} + + if stop < start { + if step >= 0 { + return v + } + for i := start; i > stop; i += step { + v = append(v, i) + } + return v + } + + if step <= 0 { + return v + } + for i := start; i < stop; i += step { + v = append(v, i) + } + return v +} diff --git a/vendor/github.com/Masterminds/sprig/numeric_test.go b/vendor/github.com/Masterminds/sprig/numeric_test.go new file mode 100644 index 0000000..97888f4 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/numeric_test.go @@ -0,0 +1,180 @@ +package sprig + +import ( + "testing" +) + +func TestUntil(t *testing.T) { + tests := map[string]string{ + `{{range $i, $e := until 5}}{{$i}}{{$e}}{{end}}`: "0011223344", + `{{range $i, $e := until -5}}{{$i}}{{$e}} {{end}}`: "00 1-1 2-2 3-3 4-4 ", + } + for tpl, expect := range tests { + if err := runt(tpl, expect); err != nil { + t.Error(err) + } + } +} +func TestUntilStep(t *testing.T) { + tests := map[string]string{ + `{{range $i, $e := untilStep 0 5 1}}{{$i}}{{$e}}{{end}}`: "0011223344", + `{{range $i, $e := untilStep 3 6 1}}{{$i}}{{$e}}{{end}}`: "031425", + `{{range $i, $e := untilStep 0 -10 -2}}{{$i}}{{$e}} {{end}}`: "00 1-2 2-4 3-6 4-8 ", + `{{range $i, $e := untilStep 3 0 1}}{{$i}}{{$e}}{{end}}`: "", + `{{range $i, $e := untilStep 3 99 0}}{{$i}}{{$e}}{{end}}`: "", + `{{range $i, $e := untilStep 3 99 -1}}{{$i}}{{$e}}{{end}}`: "", + `{{range $i, $e := untilStep 3 0 0}}{{$i}}{{$e}}{{end}}`: "", + } + for tpl, expect := range tests { + if err := runt(tpl, expect); err != nil { + t.Error(err) + } + } + +} +func TestBiggest(t *testing.T) { + tpl := `{{ biggest 1 2 3 345 5 6 7}}` + if err := runt(tpl, `345`); err != nil { + t.Error(err) + } + + tpl = `{{ max 345}}` + if err := runt(tpl, `345`); err != nil { + t.Error(err) + } +} +func TestMin(t *testing.T) { + tpl := `{{ min 1 2 3 345 5 6 7}}` + if err := runt(tpl, `1`); err != nil { + t.Error(err) + } + + tpl = `{{ min 345}}` + if err := runt(tpl, `345`); err != nil { + t.Error(err) + } +} + +func TestToFloat64(t *testing.T) { + target := float64(102) + if target != toFloat64(int8(102)) { + t.Errorf("Expected 102") + } + if target != toFloat64(int(102)) { + t.Errorf("Expected 102") + } + if target != toFloat64(int32(102)) { + t.Errorf("Expected 102") + } + if target != toFloat64(int16(102)) { + t.Errorf("Expected 102") + } + if target != toFloat64(int64(102)) { + t.Errorf("Expected 102") + } + if target != toFloat64("102") { + t.Errorf("Expected 102") + } + if 0 != toFloat64("frankie") { + t.Errorf("Expected 0") + } + if target != toFloat64(uint16(102)) { + t.Errorf("Expected 102") + } + if target != toFloat64(uint64(102)) { + t.Errorf("Expected 102") + } + if 102.1234 != toFloat64(float64(102.1234)) { + t.Errorf("Expected 102.1234") + } + if 1 != toFloat64(true) { + t.Errorf("Expected 102") + } +} +func TestToInt64(t *testing.T) { + target := int64(102) + if target != toInt64(int8(102)) { + t.Errorf("Expected 102") + } + if target != toInt64(int(102)) { + t.Errorf("Expected 102") + } + if target != toInt64(int32(102)) { + t.Errorf("Expected 102") + } + if target != toInt64(int16(102)) { + t.Errorf("Expected 102") + } + if target != toInt64(int64(102)) { + t.Errorf("Expected 102") + } + if target != toInt64("102") { + t.Errorf("Expected 102") + } + if 0 != toInt64("frankie") { + t.Errorf("Expected 0") + } + if target != toInt64(uint16(102)) { + t.Errorf("Expected 102") + } + if target != toInt64(uint64(102)) { + t.Errorf("Expected 102") + } + if target != toInt64(float64(102.1234)) { + t.Errorf("Expected 102") + } + if 1 != toInt64(true) { + t.Errorf("Expected 102") + } +} + +func TestToInt(t *testing.T) { + target := int(102) + if target != toInt(int8(102)) { + t.Errorf("Expected 102") + } + if target != toInt(int(102)) { + t.Errorf("Expected 102") + } + if target != toInt(int32(102)) { + t.Errorf("Expected 102") + } + if target != toInt(int16(102)) { + t.Errorf("Expected 102") + } + if target != toInt(int64(102)) { + t.Errorf("Expected 102") + } + if target != toInt("102") { + t.Errorf("Expected 102") + } + if 0 != toInt("frankie") { + t.Errorf("Expected 0") + } + if target != toInt(uint16(102)) { + t.Errorf("Expected 102") + } + if target != toInt(uint64(102)) { + t.Errorf("Expected 102") + } + if target != toInt(float64(102.1234)) { + t.Errorf("Expected 102") + } + if 1 != toInt(true) { + t.Errorf("Expected 102") + } +} + +func TestAdd(t *testing.T) { + tpl := `{{ 3 | add 1 2}}` + if err := runt(tpl, `6`); err != nil { + t.Error(err) + } +} + +func TestMul(t *testing.T) { + tpl := `{{ 1 | mul "2" 3 "4"}}` + if err := runt(tpl, `24`); err != nil { + t.Error(err) + } +} diff --git a/vendor/github.com/Masterminds/sprig/reflect.go b/vendor/github.com/Masterminds/sprig/reflect.go new file mode 100644 index 0000000..8a65c13 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/reflect.go @@ -0,0 +1,28 @@ +package sprig + +import ( + "fmt" + "reflect" +) + +// typeIs returns true if the src is the type named in target. +func typeIs(target string, src interface{}) bool { + return target == typeOf(src) +} + +func typeIsLike(target string, src interface{}) bool { + t := typeOf(src) + return target == t || "*"+target == t +} + +func typeOf(src interface{}) string { + return fmt.Sprintf("%T", src) +} + +func kindIs(target string, src interface{}) bool { + return target == kindOf(src) +} + +func kindOf(src interface{}) string { + return reflect.ValueOf(src).Kind().String() +} diff --git a/vendor/github.com/Masterminds/sprig/reflect_test.go b/vendor/github.com/Masterminds/sprig/reflect_test.go new file mode 100644 index 0000000..515fae9 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/reflect_test.go @@ -0,0 +1,73 @@ +package sprig + +import ( + "testing" +) + +type fixtureTO struct { + Name, Value string +} + +func TestTypeOf(t *testing.T) { + f := &fixtureTO{"hello", "world"} + tpl := `{{typeOf .}}` + if err := runtv(tpl, "*sprig.fixtureTO", f); err != nil { + t.Error(err) + } +} + +func TestKindOf(t *testing.T) { + tpl := `{{kindOf .}}` + + f := fixtureTO{"hello", "world"} + if err := runtv(tpl, "struct", f); err != nil { + t.Error(err) + } + + f2 := []string{"hello"} + if err := runtv(tpl, "slice", f2); err != nil { + t.Error(err) + } + + var f3 *fixtureTO = nil + if err := runtv(tpl, "ptr", f3); err != nil { + t.Error(err) + } +} + +func TestTypeIs(t *testing.T) { + f := &fixtureTO{"hello", "world"} + tpl := `{{if typeIs "*sprig.fixtureTO" .}}t{{else}}f{{end}}` + if err := runtv(tpl, "t", f); err != nil { + t.Error(err) + } + + f2 := "hello" + if err := runtv(tpl, "f", f2); err != nil { + t.Error(err) + } +} +func TestTypeIsLike(t *testing.T) { + f := "foo" + tpl := `{{if typeIsLike "string" .}}t{{else}}f{{end}}` + if err := runtv(tpl, "t", f); err != nil { + t.Error(err) + } + + // Now make a pointer. Should still match. + f2 := &f + if err := runtv(tpl, "t", f2); err != nil { + t.Error(err) + } +} +func TestKindIs(t *testing.T) { + f := &fixtureTO{"hello", "world"} + tpl := `{{if kindIs "ptr" .}}t{{else}}f{{end}}` + if err := runtv(tpl, "t", f); err != nil { + t.Error(err) + } + f2 := "hello" + if err := runtv(tpl, "f", f2); err != nil { + t.Error(err) + } +} diff --git a/vendor/github.com/Masterminds/sprig/semver.go b/vendor/github.com/Masterminds/sprig/semver.go new file mode 100644 index 0000000..c2bf8a1 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/semver.go @@ -0,0 +1,23 @@ +package sprig + +import ( + sv2 "github.com/Masterminds/semver" +) + +func semverCompare(constraint, version string) (bool, error) { + c, err := sv2.NewConstraint(constraint) + if err != nil { + return false, err + } + + v, err := sv2.NewVersion(version) + if err != nil { + return false, err + } + + return c.Check(v), nil +} + +func semver(version string) (*sv2.Version, error) { + return sv2.NewVersion(version) +} diff --git a/vendor/github.com/Masterminds/sprig/semver_test.go b/vendor/github.com/Masterminds/sprig/semver_test.go new file mode 100644 index 0000000..53d3c8b --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/semver_test.go @@ -0,0 +1,31 @@ +package sprig + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestSemverCompare(t *testing.T) { + tests := map[string]string{ + `{{ semverCompare "1.2.3" "1.2.3" }}`: `true`, + `{{ semverCompare "^1.2.0" "1.2.3" }}`: `true`, + `{{ semverCompare "^1.2.0" "2.2.3" }}`: `false`, + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} + +func TestSemver(t *testing.T) { + tests := map[string]string{ + `{{ $s := semver "1.2.3-beta.1+c0ff33" }}{{ $s.Prerelease }}`: "beta.1", + `{{ $s := semver "1.2.3-beta.1+c0ff33" }}{{ $s.Major}}`: "1", + `{{ semver "1.2.3" | (semver "1.2.3").Compare }}`: `0`, + `{{ semver "1.2.3" | (semver "1.3.3").Compare }}`: `1`, + `{{ semver "1.4.3" | (semver "1.2.3").Compare }}`: `-1`, + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} diff --git a/vendor/github.com/Masterminds/sprig/strings.go b/vendor/github.com/Masterminds/sprig/strings.go new file mode 100644 index 0000000..69bcd98 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/strings.go @@ -0,0 +1,197 @@ +package sprig + +import ( + "encoding/base32" + "encoding/base64" + "fmt" + "reflect" + "strconv" + "strings" + + util "github.com/aokoli/goutils" +) + +func base64encode(v string) string { + return base64.StdEncoding.EncodeToString([]byte(v)) +} + +func base64decode(v string) string { + data, err := base64.StdEncoding.DecodeString(v) + if err != nil { + return err.Error() + } + return string(data) +} + +func base32encode(v string) string { + return base32.StdEncoding.EncodeToString([]byte(v)) +} + +func base32decode(v string) string { + data, err := base32.StdEncoding.DecodeString(v) + if err != nil { + return err.Error() + } + return string(data) +} + +func abbrev(width int, s string) string { + if width < 4 { + return s + } + r, _ := util.Abbreviate(s, width) + return r +} + +func abbrevboth(left, right int, s string) string { + if right < 4 || left > 0 && right < 7 { + return s + } + r, _ := util.AbbreviateFull(s, left, right) + return r +} +func initials(s string) string { + // Wrap this just to eliminate the var args, which templates don't do well. + return util.Initials(s) +} + +func randAlphaNumeric(count int) string { + // It is not possible, it appears, to actually generate an error here. + r, _ := util.RandomAlphaNumeric(count) + return r +} + +func randAlpha(count int) string { + r, _ := util.RandomAlphabetic(count) + return r +} + +func randAscii(count int) string { + r, _ := util.RandomAscii(count) + return r +} + +func randNumeric(count int) string { + r, _ := util.RandomNumeric(count) + return r +} + +func untitle(str string) string { + return util.Uncapitalize(str) +} + +func quote(str ...interface{}) string { + out := make([]string, len(str)) + for i, s := range str { + out[i] = fmt.Sprintf("%q", strval(s)) + } + return strings.Join(out, " ") +} + +func squote(str ...interface{}) string { + out := make([]string, len(str)) + for i, s := range str { + out[i] = fmt.Sprintf("'%v'", s) + } + return strings.Join(out, " ") +} + +func cat(v ...interface{}) string { + r := strings.TrimSpace(strings.Repeat("%v ", len(v))) + return fmt.Sprintf(r, v...) +} + +func indent(spaces int, v string) string { + pad := strings.Repeat(" ", spaces) + return pad + strings.Replace(v, "\n", "\n"+pad, -1) +} + +func replace(old, new, src string) string { + return strings.Replace(src, old, new, -1) +} + +func plural(one, many string, count int) string { + if count == 1 { + return one + } + return many +} + +func strslice(v interface{}) []string { + switch v := v.(type) { + case []string: + return v + case []interface{}: + l := len(v) + b := make([]string, l) + for i := 0; i < l; i++ { + b[i] = strval(v[i]) + } + return b + default: + val := reflect.ValueOf(v) + switch val.Kind() { + case reflect.Array, reflect.Slice: + l := val.Len() + b := make([]string, l) + for i := 0; i < l; i++ { + b[i] = strval(val.Index(i).Interface()) + } + return b + default: + return []string{strval(v)} + } + } +} + +func strval(v interface{}) string { + switch v := v.(type) { + case string: + return v + case []byte: + return string(v) + case error: + return v.Error() + case fmt.Stringer: + return v.String() + default: + return fmt.Sprintf("%v", v) + } +} + +func trunc(c int, s string) string { + if len(s) <= c { + return s + } + return s[0:c] +} + +func join(sep string, v interface{}) string { + return strings.Join(strslice(v), sep) +} + +func split(sep, orig string) map[string]string { + parts := strings.Split(orig, sep) + res := make(map[string]string, len(parts)) + for i, v := range parts { + res["_"+strconv.Itoa(i)] = v + } + return res +} + +// substring creates a substring of the given string. +// +// If start is < 0, this calls string[:length]. +// +// If start is >= 0 and length < 0, this calls string[start:] +// +// Otherwise, this calls string[start, length]. +func substring(start, length int, s string) string { + if start < 0 { + return s[:length] + } + if length < 0 { + return s[start:] + } + return s[start:length] +} diff --git a/vendor/github.com/Masterminds/sprig/strings_test.go b/vendor/github.com/Masterminds/sprig/strings_test.go new file mode 100644 index 0000000..742e6d7 --- /dev/null +++ b/vendor/github.com/Masterminds/sprig/strings_test.go @@ -0,0 +1,220 @@ +package sprig + +import ( + "encoding/base32" + "encoding/base64" + "fmt" + "math/rand" + "testing" + + "github.com/aokoli/goutils" + "github.com/stretchr/testify/assert" +) + +func TestSubstr(t *testing.T) { + tpl := `{{"fooo" | substr 0 3 }}` + if err := runt(tpl, "foo"); err != nil { + t.Error(err) + } +} + +func TestTrunc(t *testing.T) { + tpl := `{{ "foooooo" | trunc 3 }}` + if err := runt(tpl, "foo"); err != nil { + t.Error(err) + } +} + +func TestQuote(t *testing.T) { + tpl := `{{quote "a" "b" "c"}}` + if err := runt(tpl, `"a" "b" "c"`); err != nil { + t.Error(err) + } + tpl = `{{quote "\"a\"" "b" "c"}}` + if err := runt(tpl, `"\"a\"" "b" "c"`); err != nil { + t.Error(err) + } + tpl = `{{quote 1 2 3 }}` + if err := runt(tpl, `"1" "2" "3"`); err != nil { + t.Error(err) + } +} +func TestSquote(t *testing.T) { + tpl := `{{squote "a" "b" "c"}}` + if err := runt(tpl, `'a' 'b' 'c'`); err != nil { + t.Error(err) + } + tpl = `{{squote 1 2 3 }}` + if err := runt(tpl, `'1' '2' '3'`); err != nil { + t.Error(err) + } +} + +func TestContains(t *testing.T) { + // Mainly, we're just verifying the paramater order swap. + tests := []string{ + `{{if contains "cat" "fair catch"}}1{{end}}`, + `{{if hasPrefix "cat" "catch"}}1{{end}}`, + `{{if hasSuffix "cat" "ducat"}}1{{end}}`, + } + for _, tt := range tests { + if err := runt(tt, "1"); err != nil { + t.Error(err) + } + } +} + +func TestTrim(t *testing.T) { + tests := []string{ + `{{trim " 5.00 "}}`, + `{{trimAll "$" "$5.00$"}}`, + `{{trimPrefix "$" "$5.00"}}`, + `{{trimSuffix "$" "5.00$"}}`, + } + for _, tt := range tests { + if err := runt(tt, "5.00"); err != nil { + t.Error(err) + } + } +} + +func TestSplit(t *testing.T) { + tpl := `{{$v := "foo$bar$baz" | split "$"}}{{$v._0}}` + if err := runt(tpl, "foo"); err != nil { + t.Error(err) + } +} + +func TestToString(t *testing.T) { + tpl := `{{ toString 1 | kindOf }}` + assert.NoError(t, runt(tpl, "string")) +} + +func TestToStrings(t *testing.T) { + tpl := `{{ $s := list 1 2 3 | toStrings }}{{ index $s 1 | kindOf }}` + assert.NoError(t, runt(tpl, "string")) +} + +func TestJoin(t *testing.T) { + assert.NoError(t, runt(`{{ tuple "a" "b" "c" | join "-" }}`, "a-b-c")) + assert.NoError(t, runt(`{{ tuple 1 2 3 | join "-" }}`, "1-2-3")) + assert.NoError(t, runtv(`{{ join "-" .V }}`, "a-b-c", map[string]interface{}{"V": []string{"a", "b", "c"}})) + assert.NoError(t, runtv(`{{ join "-" .V }}`, "abc", map[string]interface{}{"V": "abc"})) + assert.NoError(t, runtv(`{{ join "-" .V }}`, "1-2-3", map[string]interface{}{"V": []int{1, 2, 3}})) +} + +func TestSortAlpha(t *testing.T) { + // Named `append` in the function map + tests := map[string]string{ + `{{ list "c" "a" "b" | sortAlpha | join "" }}`: "abc", + `{{ list 2 1 4 3 | sortAlpha | join "" }}`: "1234", + } + for tpl, expect := range tests { + assert.NoError(t, runt(tpl, expect)) + } +} +func TestBase64EncodeDecode(t *testing.T) { + magicWord := "coffee" + expect := base64.StdEncoding.EncodeToString([]byte(magicWord)) + + if expect == magicWord { + t.Fatal("Encoder doesn't work.") + } + + tpl := `{{b64enc "coffee"}}` + if err := runt(tpl, expect); err != nil { + t.Error(err) + } + tpl = fmt.Sprintf("{{b64dec %q}}", expect) + if err := runt(tpl, magicWord); err != nil { + t.Error(err) + } +} +func TestBase32EncodeDecode(t *testing.T) { + magicWord := "coffee" + expect := base32.StdEncoding.EncodeToString([]byte(magicWord)) + + if expect == magicWord { + t.Fatal("Encoder doesn't work.") + } + + tpl := `{{b32enc "coffee"}}` + if err := runt(tpl, expect); err != nil { + t.Error(err) + } + tpl = fmt.Sprintf("{{b32dec %q}}", expect) + if err := runt(tpl, magicWord); err != nil { + t.Error(err) + } +} + +func TestGoutils(t *testing.T) { + tests := map[string]string{ + `{{abbrev 5 "hello world"}}`: "he...", + `{{abbrevboth 5 10 "1234 5678 9123"}}`: "...5678...", + `{{nospace "h e l l o "}}`: "hello", + `{{untitle "First Try"}}`: "first try", //https://youtu.be/44-RsrF_V_w + `{{initials "First Try"}}`: "FT", + `{{wrap 5 "Hello World"}}`: "Hello\nWorld", + `{{wrapWith 5 "\t" "Hello World"}}`: "Hello\tWorld", + } + for k, v := range tests { + t.Log(k) + if err := runt(k, v); err != nil { + t.Errorf("Error on tpl %s: %s", err) + } + } +} + +func TestRandom(t *testing.T) { + // One of the things I love about Go: + goutils.RANDOM = rand.New(rand.NewSource(1)) + + // Because we're using a random number generator, we need these to go in + // a predictable sequence: + if err := runt(`{{randAlphaNum 5}}`, "9bzRv"); err != nil { + t.Errorf("Error on tpl %s: %s", err) + } + if err := runt(`{{randAlpha 5}}`, "VjwGe"); err != nil { + t.Errorf("Error on tpl %s: %s", err) + } + if err := runt(`{{randAscii 5}}`, "1KA5p"); err != nil { + t.Errorf("Error on tpl %s: %s", err) + } + if err := runt(`{{randNumeric 5}}`, "26018"); err != nil { + t.Errorf("Error on tpl %s: %s", err) + } + +} + +func TestCat(t *testing.T) { + tpl := `{{$b := "b"}}{{"c" | cat "a" $b}}` + if err := runt(tpl, "a b c"); err != nil { + t.Error(err) + } +} + +func TestIndent(t *testing.T) { + tpl := `{{indent 4 "a\nb\nc"}}` + if err := runt(tpl, " a\n b\n c"); err != nil { + t.Error(err) + } +} + +func TestReplace(t *testing.T) { + tpl := `{{"I Am Henry VIII" | replace " " "-"}}` + if err := runt(tpl, "I-Am-Henry-VIII"); err != nil { + t.Error(err) + } +} + +func TestPlural(t *testing.T) { + tpl := `{{$num := len "two"}}{{$num}} {{$num | plural "1 char" "chars"}}` + if err := runt(tpl, "3 chars"); err != nil { + t.Error(err) + } + tpl = `{{len "t" | plural "cheese" "%d chars"}}` + if err := runt(tpl, "cheese"); err != nil { + t.Error(err) + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/.gitignore b/vendor/github.com/dgrijalva/jwt-go/.gitignore new file mode 100644 index 0000000..80bed65 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +bin + + diff --git a/vendor/github.com/dgrijalva/jwt-go/.travis.yml b/vendor/github.com/dgrijalva/jwt-go/.travis.yml new file mode 100644 index 0000000..bde823d --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/.travis.yml @@ -0,0 +1,8 @@ +language: go + +go: + - 1.3 + - 1.4 + - 1.5 + - 1.6 + - tip diff --git a/vendor/github.com/dgrijalva/jwt-go/LICENSE b/vendor/github.com/dgrijalva/jwt-go/LICENSE new file mode 100644 index 0000000..df83a9c --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/LICENSE @@ -0,0 +1,8 @@ +Copyright (c) 2012 Dave Grijalva + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md b/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md new file mode 100644 index 0000000..fd62e94 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md @@ -0,0 +1,96 @@ +## Migration Guide from v2 -> v3 + +Version 3 adds several new, frequently requested features. To do so, it introduces a few breaking changes. We've worked to keep these as minimal as possible. This guide explains the breaking changes and how you can quickly update your code. + +### `Token.Claims` is now an interface type + +The most requested feature from the 2.0 verison of this library was the ability to provide a custom type to the JSON parser for claims. This was implemented by introducing a new interface, `Claims`, to replace `map[string]interface{}`. We also included two concrete implementations of `Claims`: `MapClaims` and `StandardClaims`. + +`MapClaims` is an alias for `map[string]interface{}` with built in validation behavior. It is the default claims type when using `Parse`. The usage is unchanged except you must type cast the claims property. + +The old example for parsing a token looked like this.. + +```go + if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { + fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) + } +``` + +is now directly mapped to... + +```go + if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { + claims := token.Claims.(jwt.MapClaims) + fmt.Printf("Token for user %v expires %v", claims["user"], claims["exp"]) + } +``` + +`StandardClaims` is designed to be embedded in your custom type. You can supply a custom claims type with the new `ParseWithClaims` function. Here's an example of using a custom claims type. + +```go + type MyCustomClaims struct { + User string + *StandardClaims + } + + if token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, keyLookupFunc); err == nil { + claims := token.Claims.(*MyCustomClaims) + fmt.Printf("Token for user %v expires %v", claims.User, claims.StandardClaims.ExpiresAt) + } +``` + +### `ParseFromRequest` has been moved + +To keep this library focused on the tokens without becoming overburdened with complex request processing logic, `ParseFromRequest` and its new companion `ParseFromRequestWithClaims` have been moved to a subpackage, `request`. The method signatues have also been augmented to receive a new argument: `Extractor`. + +`Extractors` do the work of picking the token string out of a request. The interface is simple and composable. + +This simple parsing example: + +```go + if token, err := jwt.ParseFromRequest(tokenString, req, keyLookupFunc); err == nil { + fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) + } +``` + +is directly mapped to: + +```go + if token, err := request.ParseFromRequest(tokenString, request.OAuth2Extractor, req, keyLookupFunc); err == nil { + fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) + } +``` + +There are several concrete `Extractor` types provided for your convenience: + +* `HeaderExtractor` will search a list of headers until one contains content. +* `ArgumentExtractor` will search a list of keys in request query and form arguments until one contains content. +* `MultiExtractor` will try a list of `Extractors` in order until one returns content. +* `AuthorizationHeaderExtractor` will look in the `Authorization` header for a `Bearer` token. +* `OAuth2Extractor` searches the places an OAuth2 token would be specified (per the spec): `Authorization` header and `access_token` argument +* `PostExtractionFilter` wraps an `Extractor`, allowing you to process the content before it's parsed. A simple example is stripping the `Bearer ` text from a header + + +### RSA signing methods no longer accept `[]byte` keys + +Due to a [critical vulnerability](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/), we've decided the convenience of accepting `[]byte` instead of `rsa.PublicKey` or `rsa.PrivateKey` isn't worth the risk of misuse. + +To replace this behavior, we've added two helper methods: `ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error)` and `ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error)`. These are just simple helpers for unpacking PEM encoded PKCS1 and PKCS8 keys. If your keys are encoded any other way, all you need to do is convert them to the `crypto/rsa` package's types. + +```go + func keyLookupFunc(*Token) (interface{}, error) { + // Don't forget to validate the alg is what you expect: + if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { + return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) + } + + // Look up key + key, err := lookupPublicKey(token.Header["kid"]) + if err != nil { + return nil, err + } + + // Unpack key from PEM encoded PKCS8 + return jwt.ParseRSAPublicKeyFromPEM(key) + } +``` diff --git a/vendor/github.com/dgrijalva/jwt-go/README.md b/vendor/github.com/dgrijalva/jwt-go/README.md new file mode 100644 index 0000000..00f6136 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/README.md @@ -0,0 +1,85 @@ +A [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) + +[![Build Status](https://travis-ci.org/dgrijalva/jwt-go.svg?branch=master)](https://travis-ci.org/dgrijalva/jwt-go) + +**BREAKING CHANGES:*** Version 3.0.0 is here. It includes _a lot_ of changes including a few that break the API. We've tried to break as few things as possible, so there should just be a few type signature changes. A full list of breaking changes is available in `VERSION_HISTORY.md`. See `MIGRATION_GUIDE.md` for more information on updating your code. + +**NOTICE:** A vulnerability in JWT was [recently published](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/). As this library doesn't force users to validate the `alg` is what they expected, it's possible your usage is effected. There will be an update soon to remedy this, and it will likey require backwards-incompatible changes to the API. In the short term, please make sure your implementation verifies the `alg` is what you expect. + + +## What the heck is a JWT? + +JWT.io has [a great introduction](https://jwt.io/introduction) to JSON Web Tokens. + +In short, it's a signed JSON object that does something useful (for example, authentication). It's commonly used for `Bearer` tokens in Oauth 2. A token is made of three parts, separated by `.`'s. The first two parts are JSON objects, that have been [base64url](http://tools.ietf.org/html/rfc4648) encoded. The last part is the signature, encoded the same way. + +The first part is called the header. It contains the necessary information for verifying the last part, the signature. For example, which encryption method was used for signing and what key was used. + +The part in the middle is the interesting bit. It's called the Claims and contains the actual stuff you care about. Refer to [the RFC](http://self-issued.info/docs/draft-jones-json-web-token.html) for information about reserved keys and the proper way to add your own. + +## What's in the box? + +This library supports the parsing and verification as well as the generation and signing of JWTs. Current supported signing algorithms are HMAC SHA, RSA, RSA-PSS, and ECDSA, though hooks are present for adding your own. + +## Examples + +See [the project documentation](https://godoc.org/github.com/dgrijalva/jwt-go) for examples of usage: + +* [Simple example of parsing and validating a token](https://godoc.org/github.com/dgrijalva/jwt-go#example_Parse_hmac) +* [Simple example of building and signing a token](https://godoc.org/github.com/dgrijalva/jwt-go#example_New_hmac) +* [Directory of Examples](https://godoc.org/github.com/dgrijalva/jwt-go#pkg-examples) + +## Extensions + +This library publishes all the necessary components for adding your own signing methods. Simply implement the `SigningMethod` interface and register a factory method using `RegisterSigningMethod`. + +Here's an example of an extension that integrates with the Google App Engine signing tools: https://github.com/someone1/gcp-jwt-go + +## Compliance + +This library was last reviewed to comply with [RTF 7519](http://www.rfc-editor.org/info/rfc7519) dated May 2015 with a few notable differences: + +* In order to protect against accidental use of [Unsecured JWTs](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#UnsecuredJWT), tokens using `alg=none` will only be accepted if the constant `jwt.UnsafeAllowNoneSignatureType` is provided as the key. + +## Project Status & Versioning + +This library is considered production ready. Feedback and feature requests are appreciated. The API should be considered stable. There should be very few backwards-incompatible changes outside of major version updates (and only with good reason). + +This project uses [Semantic Versioning 2.0.0](http://semver.org). Accepted pull requests will land on `master`. Periodically, versions will be tagged from `master`. You can find all the releases on [the project releases page](https://github.com/dgrijalva/jwt-go/releases). + +While we try to make it obvious when we make breaking changes, there isn't a great mechanism for pushing announcements out to users. You may want to use this alternative package include: `gopkg.in/dgrijalva/jwt-go.v2`. It will do the right thing WRT semantic versioning. + +## Usage Tips + +### Signing vs Encryption + +A token is simply a JSON object that is signed by its author. this tells you exactly two things about the data: + +* The author of the token was in the possession of the signing secret +* The data has not been modified since it was signed + +It's important to know that JWT does not provide encryption, which means anyone who has access to the token can read its contents. If you need to protect (encrypt) the data, there is a companion spec, `JWE`, that provides this functionality. JWE is currently outside the scope of this library. + +### Choosing a Signing Method + +There are several signing methods available, and you should probably take the time to learn about the various options before choosing one. The principal design decision is most likely going to be symmetric vs asymmetric. + +Symmetric signing methods, such as HSA, use only a single secret. This is probably the simplest signing method to use since any `[]byte` can be used as a valid secret. They are also slightly computationally faster to use, though this rarely is enough to matter. Symmetric signing methods work the best when both producers and consumers of tokens are trusted, or even the same system. Since the same secret is used to both sign and validate tokens, you can't easily distribute the key for validation. + +Asymmetric signing methods, such as RSA, use different keys for signing and verifying tokens. This makes it possible to produce tokens with a private key, and allow any consumer to access the public key for verification. + +### JWT and OAuth + +It's worth mentioning that OAuth and JWT are not the same thing. A JWT token is simply a signed JSON object. It can be used anywhere such a thing is useful. There is some confusion, though, as JWT is the most common type of bearer token used in OAuth2 authentication. + +Without going too far down the rabbit hole, here's a description of the interaction of these technologies: + +* OAuth is a protocol for allowing an identity provider to be separate from the service a user is logging in to. For example, whenever you use Facebook to log into a different service (Yelp, Spotify, etc), you are using OAuth. +* OAuth defines several options for passing around authentication data. One popular method is called a "bearer token". A bearer token is simply a string that _should_ only be held by an authenticated user. Thus, simply presenting this token proves your identity. You can probably derive from here why a JWT might make a good bearer token. +* Because bearer tokens are used for authentication, it's important they're kept secret. This is why transactions that use bearer tokens typically happen over SSL. + +## More + +Documentation can be found [on godoc.org](http://godoc.org/github.com/dgrijalva/jwt-go). + +The command line utility included in this project (cmd/jwt) provides a straightforward example of token creation and parsing as well as a useful tool for debugging your own integration. You'll also find several implementation examples in to documentation. diff --git a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md b/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md new file mode 100644 index 0000000..b605b45 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md @@ -0,0 +1,105 @@ +## `jwt-go` Version History + +#### 3.0.0 + +* **Compatibility Breaking Changes**: See MIGRATION_GUIDE.md for tips on updating your code + * Dropped support for `[]byte` keys when using RSA signing methods. This convenience feature could contribute to security vulnerabilities involving mismatched key types with signing methods. + * `ParseFromRequest` has been moved to `request` subpackage and usage has changed + * The `Claims` property on `Token` is now type `Claims` instead of `map[string]interface{}`. The default value is type `MapClaims`, which is an alias to `map[string]interface{}`. This makes it possible to use a custom type when decoding claims. +* Other Additions and Changes + * Added `Claims` interface type to allow users to decode the claims into a custom type + * Added `ParseWithClaims`, which takes a third argument of type `Claims`. Use this function instead of `Parse` if you have a custom type you'd like to decode into. + * Dramatically improved the functionality and flexibility of `ParseFromRequest`, which is now in the `request` subpackage + * Added `ParseFromRequestWithClaims` which is the `FromRequest` equivalent of `ParseWithClaims` + * Added new interface type `Extractor`, which is used for extracting JWT strings from http requests. Used with `ParseFromRequest` and `ParseFromRequestWithClaims`. + * Added several new, more specific, validation errors to error type bitmask + * Moved examples from README to executable example files + * Signing method registry is now thread safe + * Added new property to `ValidationError`, which contains the raw error returned by calls made by parse/verify (such as those returned by keyfunc or json parser) + +#### 2.7.0 + +This will likely be the last backwards compatible release before 3.0.0, excluding essential bug fixes. + +* Added new option `-show` to the `jwt` command that will just output the decoded token without verifying +* Error text for expired tokens includes how long it's been expired +* Fixed incorrect error returned from `ParseRSAPublicKeyFromPEM` +* Documentation updates + +#### 2.6.0 + +* Exposed inner error within ValidationError +* Fixed validation errors when using UseJSONNumber flag +* Added several unit tests + +#### 2.5.0 + +* Added support for signing method none. You shouldn't use this. The API tries to make this clear. +* Updated/fixed some documentation +* Added more helpful error message when trying to parse tokens that begin with `BEARER ` + +#### 2.4.0 + +* Added new type, Parser, to allow for configuration of various parsing parameters + * You can now specify a list of valid signing methods. Anything outside this set will be rejected. + * You can now opt to use the `json.Number` type instead of `float64` when parsing token JSON +* Added support for [Travis CI](https://travis-ci.org/dgrijalva/jwt-go) +* Fixed some bugs with ECDSA parsing + +#### 2.3.0 + +* Added support for ECDSA signing methods +* Added support for RSA PSS signing methods (requires go v1.4) + +#### 2.2.0 + +* Gracefully handle a `nil` `Keyfunc` being passed to `Parse`. Result will now be the parsed token and an error, instead of a panic. + +#### 2.1.0 + +Backwards compatible API change that was missed in 2.0.0. + +* The `SignedString` method on `Token` now takes `interface{}` instead of `[]byte` + +#### 2.0.0 + +There were two major reasons for breaking backwards compatibility with this update. The first was a refactor required to expand the width of the RSA and HMAC-SHA signing implementations. There will likely be no required code changes to support this change. + +The second update, while unfortunately requiring a small change in integration, is required to open up this library to other signing methods. Not all keys used for all signing methods have a single standard on-disk representation. Requiring `[]byte` as the type for all keys proved too limiting. Additionally, this implementation allows for pre-parsed tokens to be reused, which might matter in an application that parses a high volume of tokens with a small set of keys. Backwards compatibilty has been maintained for passing `[]byte` to the RSA signing methods, but they will also accept `*rsa.PublicKey` and `*rsa.PrivateKey`. + +It is likely the only integration change required here will be to change `func(t *jwt.Token) ([]byte, error)` to `func(t *jwt.Token) (interface{}, error)` when calling `Parse`. + +* **Compatibility Breaking Changes** + * `SigningMethodHS256` is now `*SigningMethodHMAC` instead of `type struct` + * `SigningMethodRS256` is now `*SigningMethodRSA` instead of `type struct` + * `KeyFunc` now returns `interface{}` instead of `[]byte` + * `SigningMethod.Sign` now takes `interface{}` instead of `[]byte` for the key + * `SigningMethod.Verify` now takes `interface{}` instead of `[]byte` for the key +* Renamed type `SigningMethodHS256` to `SigningMethodHMAC`. Specific sizes are now just instances of this type. + * Added public package global `SigningMethodHS256` + * Added public package global `SigningMethodHS384` + * Added public package global `SigningMethodHS512` +* Renamed type `SigningMethodRS256` to `SigningMethodRSA`. Specific sizes are now just instances of this type. + * Added public package global `SigningMethodRS256` + * Added public package global `SigningMethodRS384` + * Added public package global `SigningMethodRS512` +* Moved sample private key for HMAC tests from an inline value to a file on disk. Value is unchanged. +* Refactored the RSA implementation to be easier to read +* Exposed helper methods `ParseRSAPrivateKeyFromPEM` and `ParseRSAPublicKeyFromPEM` + +#### 1.0.2 + +* Fixed bug in parsing public keys from certificates +* Added more tests around the parsing of keys for RS256 +* Code refactoring in RS256 implementation. No functional changes + +#### 1.0.1 + +* Fixed panic if RS256 signing method was passed an invalid key + +#### 1.0.0 + +* First versioned release +* API stabilized +* Supports creating, signing, parsing, and validating JWT tokens +* Supports RS256 and HS256 signing methods \ No newline at end of file diff --git a/vendor/github.com/dgrijalva/jwt-go/claims.go b/vendor/github.com/dgrijalva/jwt-go/claims.go new file mode 100644 index 0000000..f0228f0 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/claims.go @@ -0,0 +1,134 @@ +package jwt + +import ( + "crypto/subtle" + "fmt" + "time" +) + +// For a type to be a Claims object, it must just have a Valid method that determines +// if the token is invalid for any supported reason +type Claims interface { + Valid() error +} + +// Structured version of Claims Section, as referenced at +// https://tools.ietf.org/html/rfc7519#section-4.1 +// See examples for how to use this with your own claim types +type StandardClaims struct { + Audience string `json:"aud,omitempty"` + ExpiresAt int64 `json:"exp,omitempty"` + Id string `json:"jti,omitempty"` + IssuedAt int64 `json:"iat,omitempty"` + Issuer string `json:"iss,omitempty"` + NotBefore int64 `json:"nbf,omitempty"` + Subject string `json:"sub,omitempty"` +} + +// Validates time based claims "exp, iat, nbf". +// There is no accounting for clock skew. +// As well, if any of the above claims are not in the token, it will still +// be considered a valid claim. +func (c StandardClaims) Valid() error { + vErr := new(ValidationError) + now := TimeFunc().Unix() + + // The claims below are optional, by default, so if they are set to the + // default value in Go, let's not fail the verification for them. + if c.VerifyExpiresAt(now, false) == false { + delta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0)) + vErr.Inner = fmt.Errorf("token is expired by %v", delta) + vErr.Errors |= ValidationErrorExpired + } + + if c.VerifyIssuedAt(now, false) == false { + vErr.Inner = fmt.Errorf("Token used before issued") + vErr.Errors |= ValidationErrorIssuedAt + } + + if c.VerifyNotBefore(now, false) == false { + vErr.Inner = fmt.Errorf("token is not valid yet") + vErr.Errors |= ValidationErrorNotValidYet + } + + if vErr.valid() { + return nil + } + + return vErr +} + +// Compares the aud claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyAudience(cmp string, req bool) bool { + return verifyAud(c.Audience, cmp, req) +} + +// Compares the exp claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyExpiresAt(cmp int64, req bool) bool { + return verifyExp(c.ExpiresAt, cmp, req) +} + +// Compares the iat claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyIssuedAt(cmp int64, req bool) bool { + return verifyIat(c.IssuedAt, cmp, req) +} + +// Compares the iss claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyIssuer(cmp string, req bool) bool { + return verifyIss(c.Issuer, cmp, req) +} + +// Compares the nbf claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyNotBefore(cmp int64, req bool) bool { + return verifyNbf(c.NotBefore, cmp, req) +} + +// ----- helpers + +func verifyAud(aud string, cmp string, required bool) bool { + if aud == "" { + return !required + } + if subtle.ConstantTimeCompare([]byte(aud), []byte(cmp)) != 0 { + return true + } else { + return false + } +} + +func verifyExp(exp int64, now int64, required bool) bool { + if exp == 0 { + return !required + } + return now <= exp +} + +func verifyIat(iat int64, now int64, required bool) bool { + if iat == 0 { + return !required + } + return now >= iat +} + +func verifyIss(iss string, cmp string, required bool) bool { + if iss == "" { + return !required + } + if subtle.ConstantTimeCompare([]byte(iss), []byte(cmp)) != 0 { + return true + } else { + return false + } +} + +func verifyNbf(nbf int64, now int64, required bool) bool { + if nbf == 0 { + return !required + } + return now >= nbf +} diff --git a/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/README.md b/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/README.md new file mode 100644 index 0000000..4a68ba4 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/README.md @@ -0,0 +1,13 @@ +`jwt` command-line tool +======================= + +This is a simple tool to sign, verify and show JSON Web Tokens from +the command line. + +The following will create and sign a token, then verify it and output the original claims: + + echo {\"foo\":\"bar\"} | bin/jwt -key test/sample_key -alg RS256 -sign - | bin/jwt -key test/sample_key.pub -verify - + +To simply display a token, use: + + echo $JWT | jwt -show - diff --git a/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/app.go b/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/app.go new file mode 100644 index 0000000..c037114 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/app.go @@ -0,0 +1,245 @@ +// A useful example app. You can use this to debug your tokens on the command line. +// This is also a great place to look at how you might use this library. +// +// Example usage: +// The following will create and sign a token, then verify it and output the original claims. +// echo {\"foo\":\"bar\"} | bin/jwt -key test/sample_key -alg RS256 -sign - | bin/jwt -key test/sample_key.pub -verify - +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io" + "io/ioutil" + "os" + "regexp" + "strings" + + jwt "github.com/dgrijalva/jwt-go" +) + +var ( + // Options + flagAlg = flag.String("alg", "", "signing algorithm identifier") + flagKey = flag.String("key", "", "path to key file or '-' to read from stdin") + flagCompact = flag.Bool("compact", false, "output compact JSON") + flagDebug = flag.Bool("debug", false, "print out all kinds of debug data") + + // Modes - exactly one of these is required + flagSign = flag.String("sign", "", "path to claims object to sign or '-' to read from stdin") + flagVerify = flag.String("verify", "", "path to JWT token to verify or '-' to read from stdin") + flagShow = flag.String("show", "", "path to JWT file or '-' to read from stdin") +) + +func main() { + // Usage message if you ask for -help or if you mess up inputs. + flag.Usage = func() { + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " One of the following flags is required: sign, verify\n") + flag.PrintDefaults() + } + + // Parse command line options + flag.Parse() + + // Do the thing. If something goes wrong, print error to stderr + // and exit with a non-zero status code + if err := start(); err != nil { + fmt.Fprintf(os.Stderr, "Error: %v\n", err) + os.Exit(1) + } +} + +// Figure out which thing to do and then do that +func start() error { + if *flagSign != "" { + return signToken() + } else if *flagVerify != "" { + return verifyToken() + } else if *flagShow != "" { + return showToken() + } else { + flag.Usage() + return fmt.Errorf("None of the required flags are present. What do you want me to do?") + } +} + +// Helper func: Read input from specified file or stdin +func loadData(p string) ([]byte, error) { + if p == "" { + return nil, fmt.Errorf("No path specified") + } + + var rdr io.Reader + if p == "-" { + rdr = os.Stdin + } else { + if f, err := os.Open(p); err == nil { + rdr = f + defer f.Close() + } else { + return nil, err + } + } + return ioutil.ReadAll(rdr) +} + +// Print a json object in accordance with the prophecy (or the command line options) +func printJSON(j interface{}) error { + var out []byte + var err error + + if *flagCompact == false { + out, err = json.MarshalIndent(j, "", " ") + } else { + out, err = json.Marshal(j) + } + + if err == nil { + fmt.Println(string(out)) + } + + return err +} + +// Verify a token and output the claims. This is a great example +// of how to verify and view a token. +func verifyToken() error { + // get the token + tokData, err := loadData(*flagVerify) + if err != nil { + return fmt.Errorf("Couldn't read token: %v", err) + } + + // trim possible whitespace from token + tokData = regexp.MustCompile(`\s*$`).ReplaceAll(tokData, []byte{}) + if *flagDebug { + fmt.Fprintf(os.Stderr, "Token len: %v bytes\n", len(tokData)) + } + + // Parse the token. Load the key from command line option + token, err := jwt.Parse(string(tokData), func(t *jwt.Token) (interface{}, error) { + data, err := loadData(*flagKey) + if err != nil { + return nil, err + } + if isEs() { + return jwt.ParseECPublicKeyFromPEM(data) + } + return data, nil + }) + + // Print some debug data + if *flagDebug && token != nil { + fmt.Fprintf(os.Stderr, "Header:\n%v\n", token.Header) + fmt.Fprintf(os.Stderr, "Claims:\n%v\n", token.Claims) + } + + // Print an error if we can't parse for some reason + if err != nil { + return fmt.Errorf("Couldn't parse token: %v", err) + } + + // Is token invalid? + if !token.Valid { + return fmt.Errorf("Token is invalid") + } + + // Print the token details + if err := printJSON(token.Claims); err != nil { + return fmt.Errorf("Failed to output claims: %v", err) + } + + return nil +} + +// Create, sign, and output a token. This is a great, simple example of +// how to use this library to create and sign a token. +func signToken() error { + // get the token data from command line arguments + tokData, err := loadData(*flagSign) + if err != nil { + return fmt.Errorf("Couldn't read token: %v", err) + } else if *flagDebug { + fmt.Fprintf(os.Stderr, "Token: %v bytes", len(tokData)) + } + + // parse the JSON of the claims + var claims jwt.MapClaims + if err := json.Unmarshal(tokData, &claims); err != nil { + return fmt.Errorf("Couldn't parse claims JSON: %v", err) + } + + // get the key + var key interface{} + key, err = loadData(*flagKey) + if err != nil { + return fmt.Errorf("Couldn't read key: %v", err) + } + + // get the signing alg + alg := jwt.GetSigningMethod(*flagAlg) + if alg == nil { + return fmt.Errorf("Couldn't find signing method: %v", *flagAlg) + } + + // create a new token + token := jwt.NewWithClaims(alg, claims) + + if isEs() { + if k, ok := key.([]byte); !ok { + return fmt.Errorf("Couldn't convert key data to key") + } else { + key, err = jwt.ParseECPrivateKeyFromPEM(k) + if err != nil { + return err + } + } + } + + if out, err := token.SignedString(key); err == nil { + fmt.Println(out) + } else { + return fmt.Errorf("Error signing token: %v", err) + } + + return nil +} + +// showToken pretty-prints the token on the command line. +func showToken() error { + // get the token + tokData, err := loadData(*flagShow) + if err != nil { + return fmt.Errorf("Couldn't read token: %v", err) + } + + // trim possible whitespace from token + tokData = regexp.MustCompile(`\s*$`).ReplaceAll(tokData, []byte{}) + if *flagDebug { + fmt.Fprintf(os.Stderr, "Token len: %v bytes\n", len(tokData)) + } + + token, err := jwt.Parse(string(tokData), nil) + if token == nil { + return fmt.Errorf("malformed token: %v", err) + } + + // Print the token details + fmt.Println("Header:") + if err := printJSON(token.Header); err != nil { + return fmt.Errorf("Failed to output header: %v", err) + } + + fmt.Println("Claims:") + if err := printJSON(token.Claims); err != nil { + return fmt.Errorf("Failed to output claims: %v", err) + } + + return nil +} + +func isEs() bool { + return strings.HasPrefix(*flagAlg, "ES") +} diff --git a/vendor/github.com/dgrijalva/jwt-go/doc.go b/vendor/github.com/dgrijalva/jwt-go/doc.go new file mode 100644 index 0000000..a86dc1a --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/doc.go @@ -0,0 +1,4 @@ +// Package jwt is a Go implementation of JSON Web Tokens: http://self-issued.info/docs/draft-jones-json-web-token.html +// +// See README.md for more info. +package jwt diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa.go new file mode 100644 index 0000000..2f59a22 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/ecdsa.go @@ -0,0 +1,147 @@ +package jwt + +import ( + "crypto" + "crypto/ecdsa" + "crypto/rand" + "errors" + "math/big" +) + +var ( + // Sadly this is missing from crypto/ecdsa compared to crypto/rsa + ErrECDSAVerification = errors.New("crypto/ecdsa: verification error") +) + +// Implements the ECDSA family of signing methods signing methods +type SigningMethodECDSA struct { + Name string + Hash crypto.Hash + KeySize int + CurveBits int +} + +// Specific instances for EC256 and company +var ( + SigningMethodES256 *SigningMethodECDSA + SigningMethodES384 *SigningMethodECDSA + SigningMethodES512 *SigningMethodECDSA +) + +func init() { + // ES256 + SigningMethodES256 = &SigningMethodECDSA{"ES256", crypto.SHA256, 32, 256} + RegisterSigningMethod(SigningMethodES256.Alg(), func() SigningMethod { + return SigningMethodES256 + }) + + // ES384 + SigningMethodES384 = &SigningMethodECDSA{"ES384", crypto.SHA384, 48, 384} + RegisterSigningMethod(SigningMethodES384.Alg(), func() SigningMethod { + return SigningMethodES384 + }) + + // ES512 + SigningMethodES512 = &SigningMethodECDSA{"ES512", crypto.SHA512, 66, 521} + RegisterSigningMethod(SigningMethodES512.Alg(), func() SigningMethod { + return SigningMethodES512 + }) +} + +func (m *SigningMethodECDSA) Alg() string { + return m.Name +} + +// Implements the Verify method from SigningMethod +// For this verify method, key must be an ecdsa.PublicKey struct +func (m *SigningMethodECDSA) Verify(signingString, signature string, key interface{}) error { + var err error + + // Decode the signature + var sig []byte + if sig, err = DecodeSegment(signature); err != nil { + return err + } + + // Get the key + var ecdsaKey *ecdsa.PublicKey + switch k := key.(type) { + case *ecdsa.PublicKey: + ecdsaKey = k + default: + return ErrInvalidKeyType + } + + if len(sig) != 2*m.KeySize { + return ErrECDSAVerification + } + + r := big.NewInt(0).SetBytes(sig[:m.KeySize]) + s := big.NewInt(0).SetBytes(sig[m.KeySize:]) + + // Create hasher + if !m.Hash.Available() { + return ErrHashUnavailable + } + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + // Verify the signature + if verifystatus := ecdsa.Verify(ecdsaKey, hasher.Sum(nil), r, s); verifystatus == true { + return nil + } else { + return ErrECDSAVerification + } +} + +// Implements the Sign method from SigningMethod +// For this signing method, key must be an ecdsa.PrivateKey struct +func (m *SigningMethodECDSA) Sign(signingString string, key interface{}) (string, error) { + // Get the key + var ecdsaKey *ecdsa.PrivateKey + switch k := key.(type) { + case *ecdsa.PrivateKey: + ecdsaKey = k + default: + return "", ErrInvalidKeyType + } + + // Create the hasher + if !m.Hash.Available() { + return "", ErrHashUnavailable + } + + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + // Sign the string and return r, s + if r, s, err := ecdsa.Sign(rand.Reader, ecdsaKey, hasher.Sum(nil)); err == nil { + curveBits := ecdsaKey.Curve.Params().BitSize + + if m.CurveBits != curveBits { + return "", ErrInvalidKey + } + + keyBytes := curveBits / 8 + if curveBits%8 > 0 { + keyBytes += 1 + } + + // We serialize the outpus (r and s) into big-endian byte arrays and pad + // them with zeros on the left to make sure the sizes work out. Both arrays + // must be keyBytes long, and the output must be 2*keyBytes long. + rBytes := r.Bytes() + rBytesPadded := make([]byte, keyBytes) + copy(rBytesPadded[keyBytes-len(rBytes):], rBytes) + + sBytes := s.Bytes() + sBytesPadded := make([]byte, keyBytes) + copy(sBytesPadded[keyBytes-len(sBytes):], sBytes) + + out := append(rBytesPadded, sBytesPadded...) + + return EncodeSegment(out), nil + } else { + return "", err + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa_test.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa_test.go new file mode 100644 index 0000000..753047b --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/ecdsa_test.go @@ -0,0 +1,100 @@ +package jwt_test + +import ( + "crypto/ecdsa" + "io/ioutil" + "strings" + "testing" + + "github.com/dgrijalva/jwt-go" +) + +var ecdsaTestData = []struct { + name string + keys map[string]string + tokenString string + alg string + claims map[string]interface{} + valid bool +}{ + { + "Basic ES256", + map[string]string{"private": "test/ec256-private.pem", "public": "test/ec256-public.pem"}, + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJmb28iOiJiYXIifQ.feG39E-bn8HXAKhzDZq7yEAPWYDhZlwTn3sePJnU9VrGMmwdXAIEyoOnrjreYlVM_Z4N13eK9-TmMTWyfKJtHQ", + "ES256", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "Basic ES384", + map[string]string{"private": "test/ec384-private.pem", "public": "test/ec384-public.pem"}, + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzM4NCJ9.eyJmb28iOiJiYXIifQ.ngAfKMbJUh0WWubSIYe5GMsA-aHNKwFbJk_wq3lq23aPp8H2anb1rRILIzVR0gUf4a8WzDtrzmiikuPWyCS6CN4-PwdgTk-5nehC7JXqlaBZU05p3toM3nWCwm_LXcld", + "ES384", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "Basic ES512", + map[string]string{"private": "test/ec512-private.pem", "public": "test/ec512-public.pem"}, + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzUxMiJ9.eyJmb28iOiJiYXIifQ.AAU0TvGQOcdg2OvrwY73NHKgfk26UDekh9Prz-L_iWuTBIBqOFCWwwLsRiHB1JOddfKAls5do1W0jR_F30JpVd-6AJeTjGKA4C1A1H6gIKwRY0o_tFDIydZCl_lMBMeG5VNFAjO86-WCSKwc3hqaGkq1MugPRq_qrF9AVbuEB4JPLyL5", + "ES512", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "basic ES256 invalid: foo => bar", + map[string]string{"private": "test/ec256-private.pem", "public": "test/ec256-public.pem"}, + "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.MEQCIHoSJnmGlPaVQDqacx_2XlXEhhqtWceVopjomc2PJLtdAiAUTeGPoNYxZw0z8mgOnnIcjoxRuNDVZvybRZF3wR1l8W", + "ES256", + map[string]interface{}{"foo": "bar"}, + false, + }, +} + +func TestECDSAVerify(t *testing.T) { + for _, data := range ecdsaTestData { + var err error + + key, _ := ioutil.ReadFile(data.keys["public"]) + + var ecdsaKey *ecdsa.PublicKey + if ecdsaKey, err = jwt.ParseECPublicKeyFromPEM(key); err != nil { + t.Errorf("Unable to parse ECDSA public key: %v", err) + } + + parts := strings.Split(data.tokenString, ".") + + method := jwt.GetSigningMethod(data.alg) + err = method.Verify(strings.Join(parts[0:2], "."), parts[2], ecdsaKey) + if data.valid && err != nil { + t.Errorf("[%v] Error while verifying key: %v", data.name, err) + } + if !data.valid && err == nil { + t.Errorf("[%v] Invalid key passed validation", data.name) + } + } +} + +func TestECDSASign(t *testing.T) { + for _, data := range ecdsaTestData { + var err error + key, _ := ioutil.ReadFile(data.keys["private"]) + + var ecdsaKey *ecdsa.PrivateKey + if ecdsaKey, err = jwt.ParseECPrivateKeyFromPEM(key); err != nil { + t.Errorf("Unable to parse ECDSA private key: %v", err) + } + + if data.valid { + parts := strings.Split(data.tokenString, ".") + method := jwt.GetSigningMethod(data.alg) + sig, err := method.Sign(strings.Join(parts[0:2], "."), ecdsaKey) + if err != nil { + t.Errorf("[%v] Error signing token: %v", data.name, err) + } + if sig == parts[2] { + t.Errorf("[%v] Identical signatures\nbefore:\n%v\nafter:\n%v", data.name, parts[2], sig) + } + } + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go new file mode 100644 index 0000000..d19624b --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go @@ -0,0 +1,67 @@ +package jwt + +import ( + "crypto/ecdsa" + "crypto/x509" + "encoding/pem" + "errors" +) + +var ( + ErrNotECPublicKey = errors.New("Key is not a valid ECDSA public key") + ErrNotECPrivateKey = errors.New("Key is not a valid ECDSA private key") +) + +// Parse PEM encoded Elliptic Curve Private Key Structure +func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParseECPrivateKey(block.Bytes); err != nil { + return nil, err + } + + var pkey *ecdsa.PrivateKey + var ok bool + if pkey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { + return nil, ErrNotECPrivateKey + } + + return pkey, nil +} + +// Parse PEM encoded PKCS1 or PKCS8 public key +func ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { + if cert, err := x509.ParseCertificate(block.Bytes); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + var pkey *ecdsa.PublicKey + var ok bool + if pkey, ok = parsedKey.(*ecdsa.PublicKey); !ok { + return nil, ErrNotECPublicKey + } + + return pkey, nil +} diff --git a/vendor/github.com/dgrijalva/jwt-go/errors.go b/vendor/github.com/dgrijalva/jwt-go/errors.go new file mode 100644 index 0000000..662df19 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/errors.go @@ -0,0 +1,63 @@ +package jwt + +import ( + "errors" +) + +// Error constants +var ( + ErrInvalidKey = errors.New("key is invalid") + ErrInvalidKeyType = errors.New("key is of invalid type") + ErrHashUnavailable = errors.New("the requested hash function is unavailable") +) + +// The errors that might occur when parsing and validating a token +const ( + ValidationErrorMalformed uint32 = 1 << iota // Token is malformed + ValidationErrorUnverifiable // Token could not be verified because of signing problems + ValidationErrorSignatureInvalid // Signature validation failed + + // Standard Claim validation errors + ValidationErrorAudience // AUD validation failed + ValidationErrorExpired // EXP validation failed + ValidationErrorIssuedAt // IAT validation failed + ValidationErrorIssuer // ISS validation failed + ValidationErrorNotValidYet // NBF validation failed + ValidationErrorId // JTI validation failed + ValidationErrorClaimsInvalid // Generic claims validation error +) + +// Helper for constructing a ValidationError with a string error message +func NewValidationError(errorText string, errorFlags uint32) *ValidationError { + return &ValidationError{ + text: errorText, + Errors: errorFlags, + } +} + +// The error from Parse if token is not valid +type ValidationError struct { + Inner error // stores the error returned by external dependencies, i.e.: KeyFunc + Errors uint32 // bitfield. see ValidationError... constants + text string // errors that do not have a valid error just have text +} + +// Validation error is an error type +func (e ValidationError) Error() string { + if e.Inner != nil { + return e.Inner.Error() + } else if e.text != "" { + return e.text + } else { + return "token is invalid" + } + return e.Inner.Error() +} + +// No errors +func (e *ValidationError) valid() bool { + if e.Errors > 0 { + return false + } + return true +} diff --git a/vendor/github.com/dgrijalva/jwt-go/example_test.go b/vendor/github.com/dgrijalva/jwt-go/example_test.go new file mode 100644 index 0000000..ae8b788 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/example_test.go @@ -0,0 +1,114 @@ +package jwt_test + +import ( + "fmt" + "github.com/dgrijalva/jwt-go" + "time" +) + +// Example (atypical) using the StandardClaims type by itself to parse a token. +// The StandardClaims type is designed to be embedded into your custom types +// to provide standard validation features. You can use it alone, but there's +// no way to retrieve other fields after parsing. +// See the CustomClaimsType example for intended usage. +func ExampleNewWithClaims_standardClaims() { + mySigningKey := []byte("AllYourBase") + + // Create the Claims + claims := &jwt.StandardClaims{ + ExpiresAt: 15000, + Issuer: "test", + } + + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + ss, err := token.SignedString(mySigningKey) + fmt.Printf("%v %v", ss, err) + //Output: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.QsODzZu3lUZMVdhbO76u3Jv02iYCvEHcYVUI1kOWEU0 +} + +// Example creating a token using a custom claims type. The StandardClaim is embedded +// in the custom type to allow for easy encoding, parsing and validation of standard claims. +func ExampleNewWithClaims_customClaimsType() { + mySigningKey := []byte("AllYourBase") + + type MyCustomClaims struct { + Foo string `json:"foo"` + jwt.StandardClaims + } + + // Create the Claims + claims := MyCustomClaims{ + "bar", + jwt.StandardClaims{ + ExpiresAt: 15000, + Issuer: "test", + }, + } + + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + ss, err := token.SignedString(mySigningKey) + fmt.Printf("%v %v", ss, err) + //Output: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c +} + +// Example creating a token using a custom claims type. The StandardClaim is embedded +// in the custom type to allow for easy encoding, parsing and validation of standard claims. +func ExampleParseWithClaims_customClaimsType() { + tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c" + + type MyCustomClaims struct { + Foo string `json:"foo"` + jwt.StandardClaims + } + + // sample token is expired. override time so it parses as valid + at(time.Unix(0, 0), func() { + token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) { + return []byte("AllYourBase"), nil + }) + + if claims, ok := token.Claims.(*MyCustomClaims); ok && token.Valid { + fmt.Printf("%v %v", claims.Foo, claims.StandardClaims.ExpiresAt) + } else { + fmt.Println(err) + } + }) + + // Output: bar 15000 +} + +// Override time value for tests. Restore default value after. +func at(t time.Time, f func()) { + jwt.TimeFunc = func() time.Time { + return t + } + f() + jwt.TimeFunc = time.Now +} + +// An example of parsing the error types using bitfield checks +func ExampleParse_errorChecking() { + // Token from another example. This token is expired + var tokenString = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c" + + token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { + return []byte("AllYourBase"), nil + }) + + if token.Valid { + fmt.Println("You look nice today") + } else if ve, ok := err.(*jwt.ValidationError); ok { + if ve.Errors&jwt.ValidationErrorMalformed != 0 { + fmt.Println("That's not even a token") + } else if ve.Errors&(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != 0 { + // Token is either expired or not active yet + fmt.Println("Timing is everything") + } else { + fmt.Println("Couldn't handle this token:", err) + } + } else { + fmt.Println("Couldn't handle this token:", err) + } + + // Output: Timing is everything +} diff --git a/vendor/github.com/dgrijalva/jwt-go/hmac.go b/vendor/github.com/dgrijalva/jwt-go/hmac.go new file mode 100644 index 0000000..c229919 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/hmac.go @@ -0,0 +1,94 @@ +package jwt + +import ( + "crypto" + "crypto/hmac" + "errors" +) + +// Implements the HMAC-SHA family of signing methods signing methods +type SigningMethodHMAC struct { + Name string + Hash crypto.Hash +} + +// Specific instances for HS256 and company +var ( + SigningMethodHS256 *SigningMethodHMAC + SigningMethodHS384 *SigningMethodHMAC + SigningMethodHS512 *SigningMethodHMAC + ErrSignatureInvalid = errors.New("signature is invalid") +) + +func init() { + // HS256 + SigningMethodHS256 = &SigningMethodHMAC{"HS256", crypto.SHA256} + RegisterSigningMethod(SigningMethodHS256.Alg(), func() SigningMethod { + return SigningMethodHS256 + }) + + // HS384 + SigningMethodHS384 = &SigningMethodHMAC{"HS384", crypto.SHA384} + RegisterSigningMethod(SigningMethodHS384.Alg(), func() SigningMethod { + return SigningMethodHS384 + }) + + // HS512 + SigningMethodHS512 = &SigningMethodHMAC{"HS512", crypto.SHA512} + RegisterSigningMethod(SigningMethodHS512.Alg(), func() SigningMethod { + return SigningMethodHS512 + }) +} + +func (m *SigningMethodHMAC) Alg() string { + return m.Name +} + +// Verify the signature of HSXXX tokens. Returns nil if the signature is valid. +func (m *SigningMethodHMAC) Verify(signingString, signature string, key interface{}) error { + // Verify the key is the right type + keyBytes, ok := key.([]byte) + if !ok { + return ErrInvalidKeyType + } + + // Decode signature, for comparison + sig, err := DecodeSegment(signature) + if err != nil { + return err + } + + // Can we use the specified hashing method? + if !m.Hash.Available() { + return ErrHashUnavailable + } + + // This signing method is symmetric, so we validate the signature + // by reproducing the signature from the signing string and key, then + // comparing that against the provided signature. + hasher := hmac.New(m.Hash.New, keyBytes) + hasher.Write([]byte(signingString)) + if !hmac.Equal(sig, hasher.Sum(nil)) { + return ErrSignatureInvalid + } + + // No validation errors. Signature is good. + return nil +} + +// Implements the Sign method from SigningMethod for this signing method. +// Key must be []byte +func (m *SigningMethodHMAC) Sign(signingString string, key interface{}) (string, error) { + if keyBytes, ok := key.([]byte); ok { + if !m.Hash.Available() { + return "", ErrHashUnavailable + } + + hasher := hmac.New(m.Hash.New, keyBytes) + hasher.Write([]byte(signingString)) + + return EncodeSegment(hasher.Sum(nil)), nil + } + + return "", ErrInvalidKey +} diff --git a/vendor/github.com/dgrijalva/jwt-go/hmac_example_test.go b/vendor/github.com/dgrijalva/jwt-go/hmac_example_test.go new file mode 100644 index 0000000..8fb5678 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/hmac_example_test.go @@ -0,0 +1,64 @@ +package jwt_test + +import ( + "fmt" + "github.com/dgrijalva/jwt-go" + "io/ioutil" + "time" +) + +// For HMAC signing method, the key can be any []byte. It is recommended to generate +// a key using crypto/rand or something equivalent. You need the same key for signing +// and validating. +var hmacSampleSecret []byte + +func init() { + // Load sample key data + if keyData, e := ioutil.ReadFile("test/hmacTestKey"); e == nil { + hmacSampleSecret = keyData + } else { + panic(e) + } +} + +// Example creating, signing, and encoding a JWT token using the HMAC signing method +func ExampleNew_hmac() { + // Create a new token object, specifying signing method and the claims + // you would like it to contain. + token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ + "foo": "bar", + "nbf": time.Date(2015, 10, 10, 12, 0, 0, 0, time.UTC).Unix(), + }) + + // Sign and get the complete encoded token as a string using the secret + tokenString, err := token.SignedString(hmacSampleSecret) + + fmt.Println(tokenString, err) + // Output: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYmYiOjE0NDQ0Nzg0MDB9.u1riaD1rW97opCoAuRCTy4w58Br-Zk-bh7vLiRIsrpU +} + +// Example parsing and validating a token using the HMAC signing method +func ExampleParse_hmac() { + // sample token string taken from the New example + tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYmYiOjE0NDQ0Nzg0MDB9.u1riaD1rW97opCoAuRCTy4w58Br-Zk-bh7vLiRIsrpU" + + // Parse takes the token string and a function for looking up the key. The latter is especially + // useful if you use multiple keys for your application. The standard is to use 'kid' in the + // head of the token to identify which key to use, but the parsed token (head and claims) is provided + // to the callback, providing flexibility. + token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { + // Don't forget to validate the alg is what you expect: + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) + } + return hmacSampleSecret, nil + }) + + if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { + fmt.Println(claims["foo"], claims["nbf"]) + } else { + fmt.Println(err) + } + + // Output: bar 1.4444784e+09 +} diff --git a/vendor/github.com/dgrijalva/jwt-go/hmac_test.go b/vendor/github.com/dgrijalva/jwt-go/hmac_test.go new file mode 100644 index 0000000..c7e114f --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/hmac_test.go @@ -0,0 +1,91 @@ +package jwt_test + +import ( + "github.com/dgrijalva/jwt-go" + "io/ioutil" + "strings" + "testing" +) + +var hmacTestData = []struct { + name string + tokenString string + alg string + claims map[string]interface{} + valid bool +}{ + { + "web sample", + "eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk", + "HS256", + map[string]interface{}{"iss": "joe", "exp": 1300819380, "http://example.com/is_root": true}, + true, + }, + { + "HS384", + "eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJleHAiOjEuMzAwODE5MzhlKzA5LCJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZSwiaXNzIjoiam9lIn0.KWZEuOD5lbBxZ34g7F-SlVLAQ_r5KApWNWlZIIMyQVz5Zs58a7XdNzj5_0EcNoOy", + "HS384", + map[string]interface{}{"iss": "joe", "exp": 1300819380, "http://example.com/is_root": true}, + true, + }, + { + "HS512", + "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEuMzAwODE5MzhlKzA5LCJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZSwiaXNzIjoiam9lIn0.CN7YijRX6Aw1n2jyI2Id1w90ja-DEMYiWixhYCyHnrZ1VfJRaFQz1bEbjjA5Fn4CLYaUG432dEYmSbS4Saokmw", + "HS512", + map[string]interface{}{"iss": "joe", "exp": 1300819380, "http://example.com/is_root": true}, + true, + }, + { + "web sample: invalid", + "eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXo", + "HS256", + map[string]interface{}{"iss": "joe", "exp": 1300819380, "http://example.com/is_root": true}, + false, + }, +} + +// Sample data from http://tools.ietf.org/html/draft-jones-json-web-signature-04#appendix-A.1 +var hmacTestKey, _ = ioutil.ReadFile("test/hmacTestKey") + +func TestHMACVerify(t *testing.T) { + for _, data := range hmacTestData { + parts := strings.Split(data.tokenString, ".") + + method := jwt.GetSigningMethod(data.alg) + err := method.Verify(strings.Join(parts[0:2], "."), parts[2], hmacTestKey) + if data.valid && err != nil { + t.Errorf("[%v] Error while verifying key: %v", data.name, err) + } + if !data.valid && err == nil { + t.Errorf("[%v] Invalid key passed validation", data.name) + } + } +} + +func TestHMACSign(t *testing.T) { + for _, data := range hmacTestData { + if data.valid { + parts := strings.Split(data.tokenString, ".") + method := jwt.GetSigningMethod(data.alg) + sig, err := method.Sign(strings.Join(parts[0:2], "."), hmacTestKey) + if err != nil { + t.Errorf("[%v] Error signing token: %v", data.name, err) + } + if sig != parts[2] { + t.Errorf("[%v] Incorrect signature.\nwas:\n%v\nexpecting:\n%v", data.name, sig, parts[2]) + } + } + } +} + +func BenchmarkHS256Signing(b *testing.B) { + benchmarkSigning(b, jwt.SigningMethodHS256, hmacTestKey) +} + +func BenchmarkHS384Signing(b *testing.B) { + benchmarkSigning(b, jwt.SigningMethodHS384, hmacTestKey) +} + +func BenchmarkHS512Signing(b *testing.B) { + benchmarkSigning(b, jwt.SigningMethodHS512, hmacTestKey) +} diff --git a/vendor/github.com/dgrijalva/jwt-go/http_example_test.go b/vendor/github.com/dgrijalva/jwt-go/http_example_test.go new file mode 100644 index 0000000..82e9c50 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/http_example_test.go @@ -0,0 +1,216 @@ +package jwt_test + +// Example HTTP auth using asymmetric crypto/RSA keys +// This is based on a (now outdated) example at https://gist.github.com/cryptix/45c33ecf0ae54828e63b + +import ( + "bytes" + "crypto/rsa" + "fmt" + "github.com/dgrijalva/jwt-go" + "github.com/dgrijalva/jwt-go/request" + "io" + "io/ioutil" + "log" + "net" + "net/http" + "net/url" + "strings" + "time" +) + +// location of the files used for signing and verification +const ( + privKeyPath = "test/sample_key" // openssl genrsa -out app.rsa keysize + pubKeyPath = "test/sample_key.pub" // openssl rsa -in app.rsa -pubout > app.rsa.pub +) + +var ( + verifyKey *rsa.PublicKey + signKey *rsa.PrivateKey + serverPort int + // storing sample username/password pairs + // don't do this on a real server + users = map[string]string{ + "test": "known", + } +) + +// read the key files before starting http handlers +func init() { + signBytes, err := ioutil.ReadFile(privKeyPath) + fatal(err) + + signKey, err = jwt.ParseRSAPrivateKeyFromPEM(signBytes) + fatal(err) + + verifyBytes, err := ioutil.ReadFile(pubKeyPath) + fatal(err) + + verifyKey, err = jwt.ParseRSAPublicKeyFromPEM(verifyBytes) + fatal(err) + + http.HandleFunc("/authenticate", authHandler) + http.HandleFunc("/restricted", restrictedHandler) + + // Setup listener + listener, err := net.ListenTCP("tcp", &net.TCPAddr{}) + serverPort = listener.Addr().(*net.TCPAddr).Port + + log.Println("Listening...") + go func() { + fatal(http.Serve(listener, nil)) + }() +} + +var start func() + +func fatal(err error) { + if err != nil { + log.Fatal(err) + } +} + +// Define some custom types were going to use within our tokens +type CustomerInfo struct { + Name string + Kind string +} + +type CustomClaimsExample struct { + *jwt.StandardClaims + TokenType string + CustomerInfo +} + +func Example_getTokenViaHTTP() { + // See func authHandler for an example auth handler that produces a token + res, err := http.PostForm(fmt.Sprintf("http://localhost:%v/authenticate", serverPort), url.Values{ + "user": {"test"}, + "pass": {"known"}, + }) + if err != nil { + fatal(err) + } + + if res.StatusCode != 200 { + fmt.Println("Unexpected status code", res.StatusCode) + } + + // Read the token out of the response body + buf := new(bytes.Buffer) + io.Copy(buf, res.Body) + res.Body.Close() + tokenString := strings.TrimSpace(buf.String()) + + // Parse the token + token, err := jwt.ParseWithClaims(tokenString, &CustomClaimsExample{}, func(token *jwt.Token) (interface{}, error) { + // since we only use the one private key to sign the tokens, + // we also only use its public counter part to verify + return verifyKey, nil + }) + fatal(err) + + claims := token.Claims.(*CustomClaimsExample) + fmt.Println(claims.CustomerInfo.Name) + + //Output: test +} + +func Example_useTokenViaHTTP() { + + // Make a sample token + // In a real world situation, this token will have been acquired from + // some other API call (see Example_getTokenViaHTTP) + token, err := createToken("foo") + fatal(err) + + // Make request. See func restrictedHandler for example request processor + req, err := http.NewRequest("GET", fmt.Sprintf("http://localhost:%v/restricted", serverPort), nil) + fatal(err) + req.Header.Set("Authorization", fmt.Sprintf("Bearer %v", token)) + res, err := http.DefaultClient.Do(req) + fatal(err) + + // Read the response body + buf := new(bytes.Buffer) + io.Copy(buf, res.Body) + res.Body.Close() + fmt.Println(buf.String()) + + // Output: Welcome, foo +} + +func createToken(user string) (string, error) { + // create a signer for rsa 256 + t := jwt.New(jwt.GetSigningMethod("RS256")) + + // set our claims + t.Claims = &CustomClaimsExample{ + &jwt.StandardClaims{ + // set the expire time + // see http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-20#section-4.1.4 + ExpiresAt: time.Now().Add(time.Minute * 1).Unix(), + }, + "level1", + CustomerInfo{user, "human"}, + } + + // Creat token string + return t.SignedString(signKey) +} + +// reads the form values, checks them and creates the token +func authHandler(w http.ResponseWriter, r *http.Request) { + // make sure its post + if r.Method != "POST" { + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintln(w, "No POST", r.Method) + return + } + + user := r.FormValue("user") + pass := r.FormValue("pass") + + log.Printf("Authenticate: user[%s] pass[%s]\n", user, pass) + + // check values + if user != "test" || pass != "known" { + w.WriteHeader(http.StatusForbidden) + fmt.Fprintln(w, "Wrong info") + return + } + + tokenString, err := createToken(user) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintln(w, "Sorry, error while Signing Token!") + log.Printf("Token Signing error: %v\n", err) + return + } + + w.Header().Set("Content-Type", "application/jwt") + w.WriteHeader(http.StatusOK) + fmt.Fprintln(w, tokenString) +} + +// only accessible with a valid token +func restrictedHandler(w http.ResponseWriter, r *http.Request) { + // Get token from request + token, err := request.ParseFromRequestWithClaims(r, request.OAuth2Extractor, &CustomClaimsExample{}, func(token *jwt.Token) (interface{}, error) { + // since we only use the one private key to sign the tokens, + // we also only use its public counter part to verify + return verifyKey, nil + }) + + // If the token is missing or invalid, return error + if err != nil { + w.WriteHeader(http.StatusUnauthorized) + fmt.Fprintln(w, "Invalid token:", err) + return + } + + // Token is valid + fmt.Fprintln(w, "Welcome,", token.Claims.(*CustomClaimsExample).Name) + return +} diff --git a/vendor/github.com/dgrijalva/jwt-go/map_claims.go b/vendor/github.com/dgrijalva/jwt-go/map_claims.go new file mode 100644 index 0000000..291213c --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/map_claims.go @@ -0,0 +1,94 @@ +package jwt + +import ( + "encoding/json" + "errors" + // "fmt" +) + +// Claims type that uses the map[string]interface{} for JSON decoding +// This is the default claims type if you don't supply one +type MapClaims map[string]interface{} + +// Compares the aud claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyAudience(cmp string, req bool) bool { + aud, _ := m["aud"].(string) + return verifyAud(aud, cmp, req) +} + +// Compares the exp claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyExpiresAt(cmp int64, req bool) bool { + switch exp := m["exp"].(type) { + case float64: + return verifyExp(int64(exp), cmp, req) + case json.Number: + v, _ := exp.Int64() + return verifyExp(v, cmp, req) + } + return req == false +} + +// Compares the iat claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyIssuedAt(cmp int64, req bool) bool { + switch iat := m["iat"].(type) { + case float64: + return verifyIat(int64(iat), cmp, req) + case json.Number: + v, _ := iat.Int64() + return verifyIat(v, cmp, req) + } + return req == false +} + +// Compares the iss claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyIssuer(cmp string, req bool) bool { + iss, _ := m["iss"].(string) + return verifyIss(iss, cmp, req) +} + +// Compares the nbf claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyNotBefore(cmp int64, req bool) bool { + switch nbf := m["nbf"].(type) { + case float64: + return verifyNbf(int64(nbf), cmp, req) + case json.Number: + v, _ := nbf.Int64() + return verifyNbf(v, cmp, req) + } + return req == false +} + +// Validates time based claims "exp, iat, nbf". +// There is no accounting for clock skew. +// As well, if any of the above claims are not in the token, it will still +// be considered a valid claim. +func (m MapClaims) Valid() error { + vErr := new(ValidationError) + now := TimeFunc().Unix() + + if m.VerifyExpiresAt(now, false) == false { + vErr.Inner = errors.New("Token is expired") + vErr.Errors |= ValidationErrorExpired + } + + if m.VerifyIssuedAt(now, false) == false { + vErr.Inner = errors.New("Token used before issued") + vErr.Errors |= ValidationErrorIssuedAt + } + + if m.VerifyNotBefore(now, false) == false { + vErr.Inner = errors.New("Token is not valid yet") + vErr.Errors |= ValidationErrorNotValidYet + } + + if vErr.valid() { + return nil + } + + return vErr +} diff --git a/vendor/github.com/dgrijalva/jwt-go/none.go b/vendor/github.com/dgrijalva/jwt-go/none.go new file mode 100644 index 0000000..f04d189 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/none.go @@ -0,0 +1,52 @@ +package jwt + +// Implements the none signing method. This is required by the spec +// but you probably should never use it. +var SigningMethodNone *signingMethodNone + +const UnsafeAllowNoneSignatureType unsafeNoneMagicConstant = "none signing method allowed" + +var NoneSignatureTypeDisallowedError error + +type signingMethodNone struct{} +type unsafeNoneMagicConstant string + +func init() { + SigningMethodNone = &signingMethodNone{} + NoneSignatureTypeDisallowedError = NewValidationError("'none' signature type is not allowed", ValidationErrorSignatureInvalid) + + RegisterSigningMethod(SigningMethodNone.Alg(), func() SigningMethod { + return SigningMethodNone + }) +} + +func (m *signingMethodNone) Alg() string { + return "none" +} + +// Only allow 'none' alg type if UnsafeAllowNoneSignatureType is specified as the key +func (m *signingMethodNone) Verify(signingString, signature string, key interface{}) (err error) { + // Key must be UnsafeAllowNoneSignatureType to prevent accidentally + // accepting 'none' signing method + if _, ok := key.(unsafeNoneMagicConstant); !ok { + return NoneSignatureTypeDisallowedError + } + // If signing method is none, signature must be an empty string + if signature != "" { + return NewValidationError( + "'none' signing method with non-empty signature", + ValidationErrorSignatureInvalid, + ) + } + + // Accept 'none' signing method. + return nil +} + +// Only allow 'none' signing if UnsafeAllowNoneSignatureType is specified as the key +func (m *signingMethodNone) Sign(signingString string, key interface{}) (string, error) { + if _, ok := key.(unsafeNoneMagicConstant); ok { + return "", nil + } + return "", NoneSignatureTypeDisallowedError +} diff --git a/vendor/github.com/dgrijalva/jwt-go/none_test.go b/vendor/github.com/dgrijalva/jwt-go/none_test.go new file mode 100644 index 0000000..29a69ef --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/none_test.go @@ -0,0 +1,72 @@ +package jwt_test + +import ( + "github.com/dgrijalva/jwt-go" + "strings" + "testing" +) + +var noneTestData = []struct { + name string + tokenString string + alg string + key interface{} + claims map[string]interface{} + valid bool +}{ + { + "Basic", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.", + "none", + jwt.UnsafeAllowNoneSignatureType, + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "Basic - no key", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.", + "none", + nil, + map[string]interface{}{"foo": "bar"}, + false, + }, + { + "Signed", + "eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.W-jEzRfBigtCWsinvVVuldiuilzVdU5ty0MvpLaSaqK9PlAWWlDQ1VIQ_qSKzwL5IXaZkvZFJXT3yL3n7OUVu7zCNJzdwznbC8Z-b0z2lYvcklJYi2VOFRcGbJtXUqgjk2oGsiqUMUMOLP70TTefkpsgqDxbRh9CDUfpOJgW-dU7cmgaoswe3wjUAUi6B6G2YEaiuXC0XScQYSYVKIzgKXJV8Zw-7AN_DBUI4GkTpsvQ9fVVjZM9csQiEXhYekyrKu1nu_POpQonGd8yqkIyXPECNmmqH5jH4sFiF67XhD7_JpkvLziBpI-uh86evBUadmHhb9Otqw3uV3NTaXLzJw", + "none", + jwt.UnsafeAllowNoneSignatureType, + map[string]interface{}{"foo": "bar"}, + false, + }, +} + +func TestNoneVerify(t *testing.T) { + for _, data := range noneTestData { + parts := strings.Split(data.tokenString, ".") + + method := jwt.GetSigningMethod(data.alg) + err := method.Verify(strings.Join(parts[0:2], "."), parts[2], data.key) + if data.valid && err != nil { + t.Errorf("[%v] Error while verifying key: %v", data.name, err) + } + if !data.valid && err == nil { + t.Errorf("[%v] Invalid key passed validation", data.name) + } + } +} + +func TestNoneSign(t *testing.T) { + for _, data := range noneTestData { + if data.valid { + parts := strings.Split(data.tokenString, ".") + method := jwt.GetSigningMethod(data.alg) + sig, err := method.Sign(strings.Join(parts[0:2], "."), data.key) + if err != nil { + t.Errorf("[%v] Error signing token: %v", data.name, err) + } + if sig != parts[2] { + t.Errorf("[%v] Incorrect signature.\nwas:\n%v\nexpecting:\n%v", data.name, sig, parts[2]) + } + } + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/parser.go b/vendor/github.com/dgrijalva/jwt-go/parser.go new file mode 100644 index 0000000..7020c52 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/parser.go @@ -0,0 +1,128 @@ +package jwt + +import ( + "bytes" + "encoding/json" + "fmt" + "strings" +) + +type Parser struct { + ValidMethods []string // If populated, only these methods will be considered valid + UseJSONNumber bool // Use JSON Number format in JSON decoder +} + +// Parse, validate, and return a token. +// keyFunc will receive the parsed token and should return the key for validating. +// If everything is kosher, err will be nil +func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { + return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) +} + +func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { + parts := strings.Split(tokenString, ".") + if len(parts) != 3 { + return nil, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) + } + + var err error + token := &Token{Raw: tokenString} + + // parse Header + var headerBytes []byte + if headerBytes, err = DecodeSegment(parts[0]); err != nil { + if strings.HasPrefix(strings.ToLower(tokenString), "bearer ") { + return token, NewValidationError("tokenstring should not contain 'bearer '", ValidationErrorMalformed) + } + return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + if err = json.Unmarshal(headerBytes, &token.Header); err != nil { + return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + + // parse Claims + var claimBytes []byte + token.Claims = claims + + if claimBytes, err = DecodeSegment(parts[1]); err != nil { + return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + dec := json.NewDecoder(bytes.NewBuffer(claimBytes)) + if p.UseJSONNumber { + dec.UseNumber() + } + // JSON Decode. Special case for map type to avoid weird pointer behavior + if c, ok := token.Claims.(MapClaims); ok { + err = dec.Decode(&c) + } else { + err = dec.Decode(&claims) + } + // Handle decode error + if err != nil { + return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + + // Lookup signature method + if method, ok := token.Header["alg"].(string); ok { + if token.Method = GetSigningMethod(method); token.Method == nil { + return token, NewValidationError("signing method (alg) is unavailable.", ValidationErrorUnverifiable) + } + } else { + return token, NewValidationError("signing method (alg) is unspecified.", ValidationErrorUnverifiable) + } + + // Verify signing method is in the required set + if p.ValidMethods != nil { + var signingMethodValid = false + var alg = token.Method.Alg() + for _, m := range p.ValidMethods { + if m == alg { + signingMethodValid = true + break + } + } + if !signingMethodValid { + // signing method is not in the listed set + return token, NewValidationError(fmt.Sprintf("signing method %v is invalid", alg), ValidationErrorSignatureInvalid) + } + } + + // Lookup key + var key interface{} + if keyFunc == nil { + // keyFunc was not provided. short circuiting validation + return token, NewValidationError("no Keyfunc was provided.", ValidationErrorUnverifiable) + } + if key, err = keyFunc(token); err != nil { + // keyFunc returned an error + return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} + } + + vErr := &ValidationError{} + + // Validate Claims + if err := token.Claims.Valid(); err != nil { + + // If the Claims Valid returned an error, check if it is a validation error, + // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set + if e, ok := err.(*ValidationError); !ok { + vErr = &ValidationError{Inner: err, Errors: ValidationErrorClaimsInvalid} + } else { + vErr = e + } + } + + // Perform validation + token.Signature = parts[2] + if err = token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { + vErr.Inner = err + vErr.Errors |= ValidationErrorSignatureInvalid + } + + if vErr.valid() { + token.Valid = true + return token, nil + } + + return token, vErr +} diff --git a/vendor/github.com/dgrijalva/jwt-go/parser_test.go b/vendor/github.com/dgrijalva/jwt-go/parser_test.go new file mode 100644 index 0000000..0c86801 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/parser_test.go @@ -0,0 +1,252 @@ +package jwt_test + +import ( + "crypto/rsa" + "encoding/json" + "fmt" + "reflect" + "testing" + "time" + + "github.com/dgrijalva/jwt-go" + "github.com/dgrijalva/jwt-go/test" +) + +var keyFuncError error = fmt.Errorf("error loading key") + +var ( + jwtTestDefaultKey *rsa.PublicKey + defaultKeyFunc jwt.Keyfunc = func(t *jwt.Token) (interface{}, error) { return jwtTestDefaultKey, nil } + emptyKeyFunc jwt.Keyfunc = func(t *jwt.Token) (interface{}, error) { return nil, nil } + errorKeyFunc jwt.Keyfunc = func(t *jwt.Token) (interface{}, error) { return nil, keyFuncError } + nilKeyFunc jwt.Keyfunc = nil +) + +func init() { + jwtTestDefaultKey = test.LoadRSAPublicKeyFromDisk("test/sample_key.pub") +} + +var jwtTestData = []struct { + name string + tokenString string + keyfunc jwt.Keyfunc + claims jwt.Claims + valid bool + errors uint32 + parser *jwt.Parser +}{ + { + "basic", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", + defaultKeyFunc, + jwt.MapClaims{"foo": "bar"}, + true, + 0, + nil, + }, + { + "basic expired", + "", // autogen + defaultKeyFunc, + jwt.MapClaims{"foo": "bar", "exp": float64(time.Now().Unix() - 100)}, + false, + jwt.ValidationErrorExpired, + nil, + }, + { + "basic nbf", + "", // autogen + defaultKeyFunc, + jwt.MapClaims{"foo": "bar", "nbf": float64(time.Now().Unix() + 100)}, + false, + jwt.ValidationErrorNotValidYet, + nil, + }, + { + "expired and nbf", + "", // autogen + defaultKeyFunc, + jwt.MapClaims{"foo": "bar", "nbf": float64(time.Now().Unix() + 100), "exp": float64(time.Now().Unix() - 100)}, + false, + jwt.ValidationErrorNotValidYet | jwt.ValidationErrorExpired, + nil, + }, + { + "basic invalid", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.EhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", + defaultKeyFunc, + jwt.MapClaims{"foo": "bar"}, + false, + jwt.ValidationErrorSignatureInvalid, + nil, + }, + { + "basic nokeyfunc", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", + nilKeyFunc, + jwt.MapClaims{"foo": "bar"}, + false, + jwt.ValidationErrorUnverifiable, + nil, + }, + { + "basic nokey", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", + emptyKeyFunc, + jwt.MapClaims{"foo": "bar"}, + false, + jwt.ValidationErrorSignatureInvalid, + nil, + }, + { + "basic errorkey", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", + errorKeyFunc, + jwt.MapClaims{"foo": "bar"}, + false, + jwt.ValidationErrorUnverifiable, + nil, + }, + { + "invalid signing method", + "", + defaultKeyFunc, + jwt.MapClaims{"foo": "bar"}, + false, + jwt.ValidationErrorSignatureInvalid, + &jwt.Parser{ValidMethods: []string{"HS256"}}, + }, + { + "valid signing method", + "", + defaultKeyFunc, + jwt.MapClaims{"foo": "bar"}, + true, + 0, + &jwt.Parser{ValidMethods: []string{"RS256", "HS256"}}, + }, + { + "JSON Number", + "", + defaultKeyFunc, + jwt.MapClaims{"foo": json.Number("123.4")}, + true, + 0, + &jwt.Parser{UseJSONNumber: true}, + }, + { + "Standard Claims", + "", + defaultKeyFunc, + &jwt.StandardClaims{ + ExpiresAt: time.Now().Add(time.Second * 10).Unix(), + }, + true, + 0, + &jwt.Parser{UseJSONNumber: true}, + }, + { + "JSON Number - basic expired", + "", // autogen + defaultKeyFunc, + jwt.MapClaims{"foo": "bar", "exp": json.Number(fmt.Sprintf("%v", time.Now().Unix()-100))}, + false, + jwt.ValidationErrorExpired, + &jwt.Parser{UseJSONNumber: true}, + }, + { + "JSON Number - basic nbf", + "", // autogen + defaultKeyFunc, + jwt.MapClaims{"foo": "bar", "nbf": json.Number(fmt.Sprintf("%v", time.Now().Unix()+100))}, + false, + jwt.ValidationErrorNotValidYet, + &jwt.Parser{UseJSONNumber: true}, + }, + { + "JSON Number - expired and nbf", + "", // autogen + defaultKeyFunc, + jwt.MapClaims{"foo": "bar", "nbf": json.Number(fmt.Sprintf("%v", time.Now().Unix()+100)), "exp": json.Number(fmt.Sprintf("%v", time.Now().Unix()-100))}, + false, + jwt.ValidationErrorNotValidYet | jwt.ValidationErrorExpired, + &jwt.Parser{UseJSONNumber: true}, + }, +} + +func TestParser_Parse(t *testing.T) { + privateKey := test.LoadRSAPrivateKeyFromDisk("test/sample_key") + + // Iterate over test data set and run tests + for _, data := range jwtTestData { + // If the token string is blank, use helper function to generate string + if data.tokenString == "" { + data.tokenString = test.MakeSampleToken(data.claims, privateKey) + } + + // Parse the token + var token *jwt.Token + var err error + var parser = data.parser + if parser == nil { + parser = new(jwt.Parser) + } + // Figure out correct claims type + switch data.claims.(type) { + case jwt.MapClaims: + token, err = parser.ParseWithClaims(data.tokenString, jwt.MapClaims{}, data.keyfunc) + case *jwt.StandardClaims: + token, err = parser.ParseWithClaims(data.tokenString, &jwt.StandardClaims{}, data.keyfunc) + } + + // Verify result matches expectation + if !reflect.DeepEqual(data.claims, token.Claims) { + t.Errorf("[%v] Claims mismatch. Expecting: %v Got: %v", data.name, data.claims, token.Claims) + } + + if data.valid && err != nil { + t.Errorf("[%v] Error while verifying token: %T:%v", data.name, err, err) + } + + if !data.valid && err == nil { + t.Errorf("[%v] Invalid token passed validation", data.name) + } + + if (err == nil && !token.Valid) || (err != nil && token.Valid) { + t.Errorf("[%v] Inconsistent behavior between returned error and token.Valid") + } + + if data.errors != 0 { + if err == nil { + t.Errorf("[%v] Expecting error. Didn't get one.", data.name) + } else { + + ve := err.(*jwt.ValidationError) + // compare the bitfield part of the error + if e := ve.Errors; e != data.errors { + t.Errorf("[%v] Errors don't match expectation. %v != %v", data.name, e, data.errors) + } + + if err.Error() == keyFuncError.Error() && ve.Inner != keyFuncError { + t.Errorf("[%v] Inner error does not match expectation. %v != %v", data.name, ve.Inner, keyFuncError) + } + } + } + if data.valid && token.Signature == "" { + t.Errorf("[%v] Signature is left unpopulated after parsing", data.name) + } + } +} + +// Helper method for benchmarking various methods +func benchmarkSigning(b *testing.B, method jwt.SigningMethod, key interface{}) { + t := jwt.New(method) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + if _, err := t.SignedString(key); err != nil { + b.Fatal(err) + } + } + }) + +} diff --git a/vendor/github.com/dgrijalva/jwt-go/request/doc.go b/vendor/github.com/dgrijalva/jwt-go/request/doc.go new file mode 100644 index 0000000..c01069c --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/request/doc.go @@ -0,0 +1,7 @@ +// Utility package for extracting JWT tokens from +// HTTP requests. +// +// The main function is ParseFromRequest and it's WithClaims variant. +// See examples for how to use the various Extractor implementations +// or roll your own. +package request diff --git a/vendor/github.com/dgrijalva/jwt-go/request/extractor.go b/vendor/github.com/dgrijalva/jwt-go/request/extractor.go new file mode 100644 index 0000000..14414fe --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/request/extractor.go @@ -0,0 +1,81 @@ +package request + +import ( + "errors" + "net/http" +) + +// Errors +var ( + ErrNoTokenInRequest = errors.New("no token present in request") +) + +// Interface for extracting a token from an HTTP request. +// The ExtractToken method should return a token string or an error. +// If no token is present, you must return ErrNoTokenInRequest. +type Extractor interface { + ExtractToken(*http.Request) (string, error) +} + +// Extractor for finding a token in a header. Looks at each specified +// header in order until there's a match +type HeaderExtractor []string + +func (e HeaderExtractor) ExtractToken(req *http.Request) (string, error) { + // loop over header names and return the first one that contains data + for _, header := range e { + if ah := req.Header.Get(header); ah != "" { + return ah, nil + } + } + return "", ErrNoTokenInRequest +} + +// Extract token from request arguments. This includes a POSTed form or +// GET URL arguments. Argument names are tried in order until there's a match. +// This extractor calls `ParseMultipartForm` on the request +type ArgumentExtractor []string + +func (e ArgumentExtractor) ExtractToken(req *http.Request) (string, error) { + // Make sure form is parsed + req.ParseMultipartForm(10e6) + + // loop over arg names and return the first one that contains data + for _, arg := range e { + if ah := req.Form.Get(arg); ah != "" { + return ah, nil + } + } + + return "", ErrNoTokenInRequest +} + +// Tries Extractors in order until one returns a token string or an error occurs +type MultiExtractor []Extractor + +func (e MultiExtractor) ExtractToken(req *http.Request) (string, error) { + // loop over header names and return the first one that contains data + for _, extractor := range e { + if tok, err := extractor.ExtractToken(req); tok != "" { + return tok, nil + } else if err != ErrNoTokenInRequest { + return "", err + } + } + return "", ErrNoTokenInRequest +} + +// Wrap an Extractor in this to post-process the value before it's handed off. +// See AuthorizationHeaderExtractor for an example +type PostExtractionFilter struct { + Extractor + Filter func(string) (string, error) +} + +func (e *PostExtractionFilter) ExtractToken(req *http.Request) (string, error) { + if tok, err := e.Extractor.ExtractToken(req); tok != "" { + return e.Filter(tok) + } else { + return "", err + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/request/extractor_example_test.go b/vendor/github.com/dgrijalva/jwt-go/request/extractor_example_test.go new file mode 100644 index 0000000..a994ffe --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/request/extractor_example_test.go @@ -0,0 +1,32 @@ +package request + +import ( + "fmt" + "net/url" +) + +const ( + exampleTokenA = "A" +) + +func ExampleHeaderExtractor() { + req := makeExampleRequest("GET", "/", map[string]string{"Token": exampleTokenA}, nil) + tokenString, err := HeaderExtractor{"Token"}.ExtractToken(req) + if err == nil { + fmt.Println(tokenString) + } else { + fmt.Println(err) + } + //Output: A +} + +func ExampleArgumentExtractor() { + req := makeExampleRequest("GET", "/", nil, url.Values{"token": {extractorTestTokenA}}) + tokenString, err := ArgumentExtractor{"token"}.ExtractToken(req) + if err == nil { + fmt.Println(tokenString) + } else { + fmt.Println(err) + } + //Output: A +} diff --git a/vendor/github.com/dgrijalva/jwt-go/request/extractor_test.go b/vendor/github.com/dgrijalva/jwt-go/request/extractor_test.go new file mode 100644 index 0000000..e3bbb0a --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/request/extractor_test.go @@ -0,0 +1,91 @@ +package request + +import ( + "fmt" + "net/http" + "net/url" + "testing" +) + +var extractorTestTokenA = "A" +var extractorTestTokenB = "B" + +var extractorTestData = []struct { + name string + extractor Extractor + headers map[string]string + query url.Values + token string + err error +}{ + { + name: "simple header", + extractor: HeaderExtractor{"Foo"}, + headers: map[string]string{"Foo": extractorTestTokenA}, + query: nil, + token: extractorTestTokenA, + err: nil, + }, + { + name: "simple argument", + extractor: ArgumentExtractor{"token"}, + headers: map[string]string{}, + query: url.Values{"token": {extractorTestTokenA}}, + token: extractorTestTokenA, + err: nil, + }, + { + name: "multiple extractors", + extractor: MultiExtractor{ + HeaderExtractor{"Foo"}, + ArgumentExtractor{"token"}, + }, + headers: map[string]string{"Foo": extractorTestTokenA}, + query: url.Values{"token": {extractorTestTokenB}}, + token: extractorTestTokenA, + err: nil, + }, + { + name: "simple miss", + extractor: HeaderExtractor{"This-Header-Is-Not-Set"}, + headers: map[string]string{"Foo": extractorTestTokenA}, + query: nil, + token: "", + err: ErrNoTokenInRequest, + }, + { + name: "filter", + extractor: AuthorizationHeaderExtractor, + headers: map[string]string{"Authorization": "Bearer " + extractorTestTokenA}, + query: nil, + token: extractorTestTokenA, + err: nil, + }, +} + +func TestExtractor(t *testing.T) { + // Bearer token request + for _, data := range extractorTestData { + // Make request from test struct + r := makeExampleRequest("GET", "/", data.headers, data.query) + + // Test extractor + token, err := data.extractor.ExtractToken(r) + if token != data.token { + t.Errorf("[%v] Expected token '%v'. Got '%v'", data.name, data.token, token) + continue + } + if err != data.err { + t.Errorf("[%v] Expected error '%v'. Got '%v'", data.name, data.err, err) + continue + } + } +} + +func makeExampleRequest(method, path string, headers map[string]string, urlArgs url.Values) *http.Request { + r, _ := http.NewRequest(method, fmt.Sprintf("%v?%v", path, urlArgs.Encode()), nil) + for k, v := range headers { + r.Header.Set(k, v) + } + return r +} diff --git a/vendor/github.com/dgrijalva/jwt-go/request/oauth2.go b/vendor/github.com/dgrijalva/jwt-go/request/oauth2.go new file mode 100644 index 0000000..5948694 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/request/oauth2.go @@ -0,0 +1,28 @@ +package request + +import ( + "strings" +) + +// Strips 'Bearer ' prefix from bearer token string +func stripBearerPrefixFromTokenString(tok string) (string, error) { + // Should be a bearer token + if len(tok) > 6 && strings.ToUpper(tok[0:7]) == "BEARER " { + return tok[7:], nil + } + return tok, nil +} + +// Extract bearer token from Authorization header +// Uses PostExtractionFilter to strip "Bearer " prefix from header +var AuthorizationHeaderExtractor = &PostExtractionFilter{ + HeaderExtractor{"Authorization"}, + stripBearerPrefixFromTokenString, +} + +// Extractor for OAuth2 access tokens. Looks in 'Authorization' +// header then 'access_token' argument for a token. +var OAuth2Extractor = &MultiExtractor{ + AuthorizationHeaderExtractor, + ArgumentExtractor{"access_token"}, +} diff --git a/vendor/github.com/dgrijalva/jwt-go/request/request.go b/vendor/github.com/dgrijalva/jwt-go/request/request.go new file mode 100644 index 0000000..1807b39 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/request/request.go @@ -0,0 +1,24 @@ +package request + +import ( + "github.com/dgrijalva/jwt-go" + "net/http" +) + +// Extract and parse a JWT token from an HTTP request. +// This behaves the same as Parse, but accepts a request and an extractor +// instead of a token string. The Extractor interface allows you to define +// the logic for extracting a token. Several useful implementations are provided. +func ParseFromRequest(req *http.Request, extractor Extractor, keyFunc jwt.Keyfunc) (token *jwt.Token, err error) { + return ParseFromRequestWithClaims(req, extractor, jwt.MapClaims{}, keyFunc) +} + +// ParseFromRequest but with custom Claims type +func ParseFromRequestWithClaims(req *http.Request, extractor Extractor, claims jwt.Claims, keyFunc jwt.Keyfunc) (token *jwt.Token, err error) { + // Extract token from request + if tokStr, err := extractor.ExtractToken(req); err == nil { + return jwt.ParseWithClaims(tokStr, claims, keyFunc) + } else { + return nil, err + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/request/request_test.go b/vendor/github.com/dgrijalva/jwt-go/request/request_test.go new file mode 100644 index 0000000..b4365cd --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/request/request_test.go @@ -0,0 +1,103 @@ +package request + +import ( + "fmt" + "github.com/dgrijalva/jwt-go" + "github.com/dgrijalva/jwt-go/test" + "net/http" + "net/url" + "reflect" + "strings" + "testing" +) + +var requestTestData = []struct { + name string + claims jwt.MapClaims + extractor Extractor + headers map[string]string + query url.Values + valid bool +}{ + { + "authorization bearer token", + jwt.MapClaims{"foo": "bar"}, + AuthorizationHeaderExtractor, + map[string]string{"Authorization": "Bearer %v"}, + url.Values{}, + true, + }, + { + "oauth bearer token - header", + jwt.MapClaims{"foo": "bar"}, + OAuth2Extractor, + map[string]string{"Authorization": "Bearer %v"}, + url.Values{}, + true, + }, + { + "oauth bearer token - url", + jwt.MapClaims{"foo": "bar"}, + OAuth2Extractor, + map[string]string{}, + url.Values{"access_token": {"%v"}}, + true, + }, + { + "url token", + jwt.MapClaims{"foo": "bar"}, + ArgumentExtractor{"token"}, + map[string]string{}, + url.Values{"token": {"%v"}}, + true, + }, +} + +func TestParseRequest(t *testing.T) { + // load keys from disk + privateKey := test.LoadRSAPrivateKeyFromDisk("../test/sample_key") + publicKey := test.LoadRSAPublicKeyFromDisk("../test/sample_key.pub") + keyfunc := func(*jwt.Token) (interface{}, error) { + return publicKey, nil + } + + // Bearer token request + for _, data := range requestTestData { + // Make token from claims + tokenString := test.MakeSampleToken(data.claims, privateKey) + + // Make query string + for k, vv := range data.query { + for i, v := range vv { + if strings.Contains(v, "%v") { + data.query[k][i] = fmt.Sprintf(v, tokenString) + } + } + } + + // Make request from test struct + r, _ := http.NewRequest("GET", fmt.Sprintf("/?%v", data.query.Encode()), nil) + for k, v := range data.headers { + if strings.Contains(v, "%v") { + r.Header.Set(k, fmt.Sprintf(v, tokenString)) + } else { + r.Header.Set(k, tokenString) + } + } + token, err := ParseFromRequestWithClaims(r, data.extractor, jwt.MapClaims{}, keyfunc) + + if token == nil { + t.Errorf("[%v] Token was not found: %v", data.name, err) + continue + } + if !reflect.DeepEqual(data.claims, token.Claims) { + t.Errorf("[%v] Claims mismatch. Expecting: %v Got: %v", data.name, data.claims, token.Claims) + } + if data.valid && err != nil { + t.Errorf("[%v] Error while verifying token: %v", data.name, err) + } + if !data.valid && err == nil { + t.Errorf("[%v] Invalid token passed validation", data.name) + } + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa.go b/vendor/github.com/dgrijalva/jwt-go/rsa.go new file mode 100644 index 0000000..0ae0b19 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/rsa.go @@ -0,0 +1,100 @@ +package jwt + +import ( + "crypto" + "crypto/rand" + "crypto/rsa" +) + +// Implements the RSA family of signing methods signing methods +type SigningMethodRSA struct { + Name string + Hash crypto.Hash +} + +// Specific instances for RS256 and company +var ( + SigningMethodRS256 *SigningMethodRSA + SigningMethodRS384 *SigningMethodRSA + SigningMethodRS512 *SigningMethodRSA +) + +func init() { + // RS256 + SigningMethodRS256 = &SigningMethodRSA{"RS256", crypto.SHA256} + RegisterSigningMethod(SigningMethodRS256.Alg(), func() SigningMethod { + return SigningMethodRS256 + }) + + // RS384 + SigningMethodRS384 = &SigningMethodRSA{"RS384", crypto.SHA384} + RegisterSigningMethod(SigningMethodRS384.Alg(), func() SigningMethod { + return SigningMethodRS384 + }) + + // RS512 + SigningMethodRS512 = &SigningMethodRSA{"RS512", crypto.SHA512} + RegisterSigningMethod(SigningMethodRS512.Alg(), func() SigningMethod { + return SigningMethodRS512 + }) +} + +func (m *SigningMethodRSA) Alg() string { + return m.Name +} + +// Implements the Verify method from SigningMethod +// For this signing method, must be an rsa.PublicKey structure. +func (m *SigningMethodRSA) Verify(signingString, signature string, key interface{}) error { + var err error + + // Decode the signature + var sig []byte + if sig, err = DecodeSegment(signature); err != nil { + return err + } + + var rsaKey *rsa.PublicKey + var ok bool + + if rsaKey, ok = key.(*rsa.PublicKey); !ok { + return ErrInvalidKeyType + } + + // Create hasher + if !m.Hash.Available() { + return ErrHashUnavailable + } + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + // Verify the signature + return rsa.VerifyPKCS1v15(rsaKey, m.Hash, hasher.Sum(nil), sig) +} + +// Implements the Sign method from SigningMethod +// For this signing method, must be an rsa.PrivateKey structure. +func (m *SigningMethodRSA) Sign(signingString string, key interface{}) (string, error) { + var rsaKey *rsa.PrivateKey + var ok bool + + // Validate type of key + if rsaKey, ok = key.(*rsa.PrivateKey); !ok { + return "", ErrInvalidKey + } + + // Create the hasher + if !m.Hash.Available() { + return "", ErrHashUnavailable + } + + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + // Sign the string and return the encoded bytes + if sigBytes, err := rsa.SignPKCS1v15(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil)); err == nil { + return EncodeSegment(sigBytes), nil + } else { + return "", err + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go b/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go new file mode 100644 index 0000000..10ee9db --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go @@ -0,0 +1,126 @@ +// +build go1.4 + +package jwt + +import ( + "crypto" + "crypto/rand" + "crypto/rsa" +) + +// Implements the RSAPSS family of signing methods signing methods +type SigningMethodRSAPSS struct { + *SigningMethodRSA + Options *rsa.PSSOptions +} + +// Specific instances for RS/PS and company +var ( + SigningMethodPS256 *SigningMethodRSAPSS + SigningMethodPS384 *SigningMethodRSAPSS + SigningMethodPS512 *SigningMethodRSAPSS +) + +func init() { + // PS256 + SigningMethodPS256 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS256", + Hash: crypto.SHA256, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA256, + }, + } + RegisterSigningMethod(SigningMethodPS256.Alg(), func() SigningMethod { + return SigningMethodPS256 + }) + + // PS384 + SigningMethodPS384 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS384", + Hash: crypto.SHA384, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA384, + }, + } + RegisterSigningMethod(SigningMethodPS384.Alg(), func() SigningMethod { + return SigningMethodPS384 + }) + + // PS512 + SigningMethodPS512 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS512", + Hash: crypto.SHA512, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA512, + }, + } + RegisterSigningMethod(SigningMethodPS512.Alg(), func() SigningMethod { + return SigningMethodPS512 + }) +} + +// Implements the Verify method from SigningMethod +// For this verify method, key must be an rsa.PublicKey struct +func (m *SigningMethodRSAPSS) Verify(signingString, signature string, key interface{}) error { + var err error + + // Decode the signature + var sig []byte + if sig, err = DecodeSegment(signature); err != nil { + return err + } + + var rsaKey *rsa.PublicKey + switch k := key.(type) { + case *rsa.PublicKey: + rsaKey = k + default: + return ErrInvalidKey + } + + // Create hasher + if !m.Hash.Available() { + return ErrHashUnavailable + } + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + return rsa.VerifyPSS(rsaKey, m.Hash, hasher.Sum(nil), sig, m.Options) +} + +// Implements the Sign method from SigningMethod +// For this signing method, key must be an rsa.PrivateKey struct +func (m *SigningMethodRSAPSS) Sign(signingString string, key interface{}) (string, error) { + var rsaKey *rsa.PrivateKey + + switch k := key.(type) { + case *rsa.PrivateKey: + rsaKey = k + default: + return "", ErrInvalidKeyType + } + + // Create the hasher + if !m.Hash.Available() { + return "", ErrHashUnavailable + } + + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + // Sign the string and return the encoded bytes + if sigBytes, err := rsa.SignPSS(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil), m.Options); err == nil { + return EncodeSegment(sigBytes), nil + } else { + return "", err + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_pss_test.go b/vendor/github.com/dgrijalva/jwt-go/rsa_pss_test.go new file mode 100644 index 0000000..9045aaf --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/rsa_pss_test.go @@ -0,0 +1,96 @@ +// +build go1.4 + +package jwt_test + +import ( + "crypto/rsa" + "io/ioutil" + "strings" + "testing" + + "github.com/dgrijalva/jwt-go" +) + +var rsaPSSTestData = []struct { + name string + tokenString string + alg string + claims map[string]interface{} + valid bool +}{ + { + "Basic PS256", + "eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.PPG4xyDVY8ffp4CcxofNmsTDXsrVG2npdQuibLhJbv4ClyPTUtR5giNSvuxo03kB6I8VXVr0Y9X7UxhJVEoJOmULAwRWaUsDnIewQa101cVhMa6iR8X37kfFoiZ6NkS-c7henVkkQWu2HtotkEtQvN5hFlk8IevXXPmvZlhQhwzB1sGzGYnoi1zOfuL98d3BIjUjtlwii5w6gYG2AEEzp7HnHCsb3jIwUPdq86Oe6hIFjtBwduIK90ca4UqzARpcfwxHwVLMpatKask00AgGVI0ysdk0BLMjmLutquD03XbThHScC2C2_Pp4cHWgMzvbgLU2RYYZcZRKr46QeNgz9w", + "PS256", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "Basic PS384", + "eyJhbGciOiJQUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.w7-qqgj97gK4fJsq_DCqdYQiylJjzWONvD0qWWWhqEOFk2P1eDULPnqHRnjgTXoO4HAw4YIWCsZPet7nR3Xxq4ZhMqvKW8b7KlfRTb9cH8zqFvzMmybQ4jv2hKc3bXYqVow3AoR7hN_CWXI3Dv6Kd2X5xhtxRHI6IL39oTVDUQ74LACe-9t4c3QRPuj6Pq1H4FAT2E2kW_0KOc6EQhCLWEhm2Z2__OZskDC8AiPpP8Kv4k2vB7l0IKQu8Pr4RcNBlqJdq8dA5D3hk5TLxP8V5nG1Ib80MOMMqoS3FQvSLyolFX-R_jZ3-zfq6Ebsqr0yEb0AH2CfsECF7935Pa0FKQ", + "PS384", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "Basic PS512", + "eyJhbGciOiJQUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.GX1HWGzFaJevuSLavqqFYaW8_TpvcjQ8KfC5fXiSDzSiT9UD9nB_ikSmDNyDILNdtjZLSvVKfXxZJqCfefxAtiozEDDdJthZ-F0uO4SPFHlGiXszvKeodh7BuTWRI2wL9-ZO4mFa8nq3GMeQAfo9cx11i7nfN8n2YNQ9SHGovG7_T_AvaMZB_jT6jkDHpwGR9mz7x1sycckEo6teLdHRnH_ZdlHlxqknmyTu8Odr5Xh0sJFOL8BepWbbvIIn-P161rRHHiDWFv6nhlHwZnVzjx7HQrWSGb6-s2cdLie9QL_8XaMcUpjLkfOMKkDOfHo6AvpL7Jbwi83Z2ZTHjJWB-A", + "PS512", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "basic PS256 invalid: foo => bar", + "eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.PPG4xyDVY8ffp4CcxofNmsTDXsrVG2npdQuibLhJbv4ClyPTUtR5giNSvuxo03kB6I8VXVr0Y9X7UxhJVEoJOmULAwRWaUsDnIewQa101cVhMa6iR8X37kfFoiZ6NkS-c7henVkkQWu2HtotkEtQvN5hFlk8IevXXPmvZlhQhwzB1sGzGYnoi1zOfuL98d3BIjUjtlwii5w6gYG2AEEzp7HnHCsb3jIwUPdq86Oe6hIFjtBwduIK90ca4UqzARpcfwxHwVLMpatKask00AgGVI0ysdk0BLMjmLutquD03XbThHScC2C2_Pp4cHWgMzvbgLU2RYYZcZRKr46QeNgz9W", + "PS256", + map[string]interface{}{"foo": "bar"}, + false, + }, +} + +func TestRSAPSSVerify(t *testing.T) { + var err error + + key, _ := ioutil.ReadFile("test/sample_key.pub") + var rsaPSSKey *rsa.PublicKey + if rsaPSSKey, err = jwt.ParseRSAPublicKeyFromPEM(key); err != nil { + t.Errorf("Unable to parse RSA public key: %v", err) + } + + for _, data := range rsaPSSTestData { + parts := strings.Split(data.tokenString, ".") + + method := jwt.GetSigningMethod(data.alg) + err := method.Verify(strings.Join(parts[0:2], "."), parts[2], rsaPSSKey) + if data.valid && err != nil { + t.Errorf("[%v] Error while verifying key: %v", data.name, err) + } + if !data.valid && err == nil { + t.Errorf("[%v] Invalid key passed validation", data.name) + } + } +} + +func TestRSAPSSSign(t *testing.T) { + var err error + + key, _ := ioutil.ReadFile("test/sample_key") + var rsaPSSKey *rsa.PrivateKey + if rsaPSSKey, err = jwt.ParseRSAPrivateKeyFromPEM(key); err != nil { + t.Errorf("Unable to parse RSA private key: %v", err) + } + + for _, data := range rsaPSSTestData { + if data.valid { + parts := strings.Split(data.tokenString, ".") + method := jwt.GetSigningMethod(data.alg) + sig, err := method.Sign(strings.Join(parts[0:2], "."), rsaPSSKey) + if err != nil { + t.Errorf("[%v] Error signing token: %v", data.name, err) + } + if sig == parts[2] { + t.Errorf("[%v] Signatures shouldn't match\nnew:\n%v\noriginal:\n%v", data.name, sig, parts[2]) + } + } + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_test.go b/vendor/github.com/dgrijalva/jwt-go/rsa_test.go new file mode 100644 index 0000000..2e0f785 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/rsa_test.go @@ -0,0 +1,176 @@ +package jwt_test + +import ( + "github.com/dgrijalva/jwt-go" + "io/ioutil" + "strings" + "testing" +) + +var rsaTestData = []struct { + name string + tokenString string + alg string + claims map[string]interface{} + valid bool +}{ + { + "Basic RS256", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", + "RS256", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "Basic RS384", + "eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.W-jEzRfBigtCWsinvVVuldiuilzVdU5ty0MvpLaSaqK9PlAWWlDQ1VIQ_qSKzwL5IXaZkvZFJXT3yL3n7OUVu7zCNJzdwznbC8Z-b0z2lYvcklJYi2VOFRcGbJtXUqgjk2oGsiqUMUMOLP70TTefkpsgqDxbRh9CDUfpOJgW-dU7cmgaoswe3wjUAUi6B6G2YEaiuXC0XScQYSYVKIzgKXJV8Zw-7AN_DBUI4GkTpsvQ9fVVjZM9csQiEXhYekyrKu1nu_POpQonGd8yqkIyXPECNmmqH5jH4sFiF67XhD7_JpkvLziBpI-uh86evBUadmHhb9Otqw3uV3NTaXLzJw", + "RS384", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "Basic RS512", + "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.zBlLlmRrUxx4SJPUbV37Q1joRcI9EW13grnKduK3wtYKmDXbgDpF1cZ6B-2Jsm5RB8REmMiLpGms-EjXhgnyh2TSHE-9W2gA_jvshegLWtwRVDX40ODSkTb7OVuaWgiy9y7llvcknFBTIg-FnVPVpXMmeV_pvwQyhaz1SSwSPrDyxEmksz1hq7YONXhXPpGaNbMMeDTNP_1oj8DZaqTIL9TwV8_1wb2Odt_Fy58Ke2RVFijsOLdnyEAjt2n9Mxihu9i3PhNBkkxa2GbnXBfq3kzvZ_xxGGopLdHhJjcGWXO-NiwI9_tiu14NRv4L2xC0ItD9Yz68v2ZIZEp_DuzwRQ", + "RS512", + map[string]interface{}{"foo": "bar"}, + true, + }, + { + "basic invalid: foo => bar", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.EhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", + "RS256", + map[string]interface{}{"foo": "bar"}, + false, + }, +} + +func TestRSAVerify(t *testing.T) { + keyData, _ := ioutil.ReadFile("test/sample_key.pub") + key, _ := jwt.ParseRSAPublicKeyFromPEM(keyData) + + for _, data := range rsaTestData { + parts := strings.Split(data.tokenString, ".") + + method := jwt.GetSigningMethod(data.alg) + err := method.Verify(strings.Join(parts[0:2], "."), parts[2], key) + if data.valid && err != nil { + t.Errorf("[%v] Error while verifying key: %v", data.name, err) + } + if !data.valid && err == nil { + t.Errorf("[%v] Invalid key passed validation", data.name) + } + } +} + +func TestRSASign(t *testing.T) { + keyData, _ := ioutil.ReadFile("test/sample_key") + key, _ := jwt.ParseRSAPrivateKeyFromPEM(keyData) + + for _, data := range rsaTestData { + if data.valid { + parts := strings.Split(data.tokenString, ".") + method := jwt.GetSigningMethod(data.alg) + sig, err := method.Sign(strings.Join(parts[0:2], "."), key) + if err != nil { + t.Errorf("[%v] Error signing token: %v", data.name, err) + } + if sig != parts[2] { + t.Errorf("[%v] Incorrect signature.\nwas:\n%v\nexpecting:\n%v", data.name, sig, parts[2]) + } + } + } +} + +func TestRSAVerifyWithPreParsedPrivateKey(t *testing.T) { + key, _ := ioutil.ReadFile("test/sample_key.pub") + parsedKey, err := jwt.ParseRSAPublicKeyFromPEM(key) + if err != nil { + t.Fatal(err) + } + testData := rsaTestData[0] + parts := strings.Split(testData.tokenString, ".") + err = jwt.SigningMethodRS256.Verify(strings.Join(parts[0:2], "."), parts[2], parsedKey) + if err != nil { + t.Errorf("[%v] Error while verifying key: %v", testData.name, err) + } +} + +func TestRSAWithPreParsedPrivateKey(t *testing.T) { + key, _ := ioutil.ReadFile("test/sample_key") + parsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key) + if err != nil { + t.Fatal(err) + } + testData := rsaTestData[0] + parts := strings.Split(testData.tokenString, ".") + sig, err := jwt.SigningMethodRS256.Sign(strings.Join(parts[0:2], "."), parsedKey) + if err != nil { + t.Errorf("[%v] Error signing token: %v", testData.name, err) + } + if sig != parts[2] { + t.Errorf("[%v] Incorrect signature.\nwas:\n%v\nexpecting:\n%v", testData.name, sig, parts[2]) + } +} + +func TestRSAKeyParsing(t *testing.T) { + key, _ := ioutil.ReadFile("test/sample_key") + pubKey, _ := ioutil.ReadFile("test/sample_key.pub") + badKey := []byte("All your base are belong to key") + + // Test parsePrivateKey + if _, e := jwt.ParseRSAPrivateKeyFromPEM(key); e != nil { + t.Errorf("Failed to parse valid private key: %v", e) + } + + if k, e := jwt.ParseRSAPrivateKeyFromPEM(pubKey); e == nil { + t.Errorf("Parsed public key as valid private key: %v", k) + } + + if k, e := jwt.ParseRSAPrivateKeyFromPEM(badKey); e == nil { + t.Errorf("Parsed invalid key as valid private key: %v", k) + } + + // Test parsePublicKey + if _, e := jwt.ParseRSAPublicKeyFromPEM(pubKey); e != nil { + t.Errorf("Failed to parse valid public key: %v", e) + } + + if k, e := jwt.ParseRSAPublicKeyFromPEM(key); e == nil { + t.Errorf("Parsed private key as valid public key: %v", k) + } + + if k, e := jwt.ParseRSAPublicKeyFromPEM(badKey); e == nil { + t.Errorf("Parsed invalid key as valid private key: %v", k) + } + +} + +func BenchmarkRS256Signing(b *testing.B) { + key, _ := ioutil.ReadFile("test/sample_key") + parsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key) + if err != nil { + b.Fatal(err) + } + + benchmarkSigning(b, jwt.SigningMethodRS256, parsedKey) +} + +func BenchmarkRS384Signing(b *testing.B) { + key, _ := ioutil.ReadFile("test/sample_key") + parsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key) + if err != nil { + b.Fatal(err) + } + + benchmarkSigning(b, jwt.SigningMethodRS384, parsedKey) +} + +func BenchmarkRS512Signing(b *testing.B) { + key, _ := ioutil.ReadFile("test/sample_key") + parsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key) + if err != nil { + b.Fatal(err) + } + + benchmarkSigning(b, jwt.SigningMethodRS512, parsedKey) +} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go new file mode 100644 index 0000000..213a90d --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go @@ -0,0 +1,69 @@ +package jwt + +import ( + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "errors" +) + +var ( + ErrKeyMustBePEMEncoded = errors.New("Invalid Key: Key must be PEM encoded PKCS1 or PKCS8 private key") + ErrNotRSAPrivateKey = errors.New("Key is not a valid RSA private key") + ErrNotRSAPublicKey = errors.New("Key is not a valid RSA public key") +) + +// Parse PEM encoded PKCS1 or PKCS8 private key +func ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + var parsedKey interface{} + if parsedKey, err = x509.ParsePKCS1PrivateKey(block.Bytes); err != nil { + if parsedKey, err = x509.ParsePKCS8PrivateKey(block.Bytes); err != nil { + return nil, err + } + } + + var pkey *rsa.PrivateKey + var ok bool + if pkey, ok = parsedKey.(*rsa.PrivateKey); !ok { + return nil, ErrNotRSAPrivateKey + } + + return pkey, nil +} + +// Parse PEM encoded PKCS1 or PKCS8 public key +func ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { + if cert, err := x509.ParseCertificate(block.Bytes); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + var pkey *rsa.PublicKey + var ok bool + if pkey, ok = parsedKey.(*rsa.PublicKey); !ok { + return nil, ErrNotRSAPublicKey + } + + return pkey, nil +} diff --git a/vendor/github.com/dgrijalva/jwt-go/signing_method.go b/vendor/github.com/dgrijalva/jwt-go/signing_method.go new file mode 100644 index 0000000..ed1f212 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/signing_method.go @@ -0,0 +1,35 @@ +package jwt + +import ( + "sync" +) + +var signingMethods = map[string]func() SigningMethod{} +var signingMethodLock = new(sync.RWMutex) + +// Implement SigningMethod to add new methods for signing or verifying tokens. +type SigningMethod interface { + Verify(signingString, signature string, key interface{}) error // Returns nil if signature is valid + Sign(signingString string, key interface{}) (string, error) // Returns encoded signature or error + Alg() string // returns the alg identifier for this method (example: 'HS256') +} + +// Register the "alg" name and a factory function for signing method. +// This is typically done during init() in the method's implementation +func RegisterSigningMethod(alg string, f func() SigningMethod) { + signingMethodLock.Lock() + defer signingMethodLock.Unlock() + + signingMethods[alg] = f +} + +// Get a signing method from an "alg" string +func GetSigningMethod(alg string) (method SigningMethod) { + signingMethodLock.RLock() + defer signingMethodLock.RUnlock() + + if methodF, ok := signingMethods[alg]; ok { + method = methodF() + } + return +} diff --git a/vendor/github.com/dgrijalva/jwt-go/test/ec256-private.pem b/vendor/github.com/dgrijalva/jwt-go/test/ec256-private.pem new file mode 100644 index 0000000..a6882b3 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/ec256-private.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIAh5qA3rmqQQuu0vbKV/+zouz/y/Iy2pLpIcWUSyImSwoAoGCCqGSM49 +AwEHoUQDQgAEYD54V/vp+54P9DXarYqx4MPcm+HKRIQzNasYSoRQHQ/6S6Ps8tpM +cT+KvIIC8W/e9k0W7Cm72M1P9jU7SLf/vg== +-----END EC PRIVATE KEY----- diff --git a/vendor/github.com/dgrijalva/jwt-go/test/ec256-public.pem b/vendor/github.com/dgrijalva/jwt-go/test/ec256-public.pem new file mode 100644 index 0000000..7191361 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/ec256-public.pem @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYD54V/vp+54P9DXarYqx4MPcm+HK +RIQzNasYSoRQHQ/6S6Ps8tpMcT+KvIIC8W/e9k0W7Cm72M1P9jU7SLf/vg== +-----END PUBLIC KEY----- diff --git a/vendor/github.com/dgrijalva/jwt-go/test/ec384-private.pem b/vendor/github.com/dgrijalva/jwt-go/test/ec384-private.pem new file mode 100644 index 0000000..a86c823 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/ec384-private.pem @@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGkAgEBBDCaCvMHKhcG/qT7xsNLYnDT7sE/D+TtWIol1ROdaK1a564vx5pHbsRy +SEKcIxISi1igBwYFK4EEACKhZANiAATYa7rJaU7feLMqrAx6adZFNQOpaUH/Uylb +ZLriOLON5YFVwtVUpO1FfEXZUIQpptRPtc5ixIPY658yhBSb6irfIJUSP9aYTflJ +GKk/mDkK4t8mWBzhiD5B6jg9cEGhGgA= +-----END EC PRIVATE KEY----- diff --git a/vendor/github.com/dgrijalva/jwt-go/test/ec384-public.pem b/vendor/github.com/dgrijalva/jwt-go/test/ec384-public.pem new file mode 100644 index 0000000..e80d005 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/ec384-public.pem @@ -0,0 +1,5 @@ +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2Gu6yWlO33izKqwMemnWRTUDqWlB/1Mp +W2S64jizjeWBVcLVVKTtRXxF2VCEKabUT7XOYsSD2OufMoQUm+oq3yCVEj/WmE35 +SRipP5g5CuLfJlgc4Yg+Qeo4PXBBoRoA +-----END PUBLIC KEY----- diff --git a/vendor/github.com/dgrijalva/jwt-go/test/ec512-private.pem b/vendor/github.com/dgrijalva/jwt-go/test/ec512-private.pem new file mode 100644 index 0000000..213afaf --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/ec512-private.pem @@ -0,0 +1,7 @@ +-----BEGIN EC PRIVATE KEY----- +MIHcAgEBBEIB0pE4uFaWRx7t03BsYlYvF1YvKaBGyvoakxnodm9ou0R9wC+sJAjH +QZZJikOg4SwNqgQ/hyrOuDK2oAVHhgVGcYmgBwYFK4EEACOhgYkDgYYABAAJXIuw +12MUzpHggia9POBFYXSxaOGKGbMjIyDI+6q7wi7LMw3HgbaOmgIqFG72o8JBQwYN +4IbXHf+f86CRY1AA2wHzbHvt6IhkCXTNxBEffa1yMUgu8n9cKKF2iLgyQKcKqW33 +8fGOw/n3Rm2Yd/EB56u2rnD29qS+nOM9eGS+gy39OQ== +-----END EC PRIVATE KEY----- diff --git a/vendor/github.com/dgrijalva/jwt-go/test/ec512-public.pem b/vendor/github.com/dgrijalva/jwt-go/test/ec512-public.pem new file mode 100644 index 0000000..02ea022 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/ec512-public.pem @@ -0,0 +1,6 @@ +-----BEGIN PUBLIC KEY----- +MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQACVyLsNdjFM6R4IImvTzgRWF0sWjh +ihmzIyMgyPuqu8IuyzMNx4G2jpoCKhRu9qPCQUMGDeCG1x3/n/OgkWNQANsB82x7 +7eiIZAl0zcQRH32tcjFILvJ/XCihdoi4MkCnCqlt9/HxjsP590ZtmHfxAeertq5w +9vakvpzjPXhkvoMt/Tk= +-----END PUBLIC KEY----- diff --git a/vendor/github.com/dgrijalva/jwt-go/test/helpers.go b/vendor/github.com/dgrijalva/jwt-go/test/helpers.go new file mode 100644 index 0000000..f84c3ef --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/helpers.go @@ -0,0 +1,42 @@ +package test + +import ( + "crypto/rsa" + "github.com/dgrijalva/jwt-go" + "io/ioutil" +) + +func LoadRSAPrivateKeyFromDisk(location string) *rsa.PrivateKey { + keyData, e := ioutil.ReadFile(location) + if e != nil { + panic(e.Error()) + } + key, e := jwt.ParseRSAPrivateKeyFromPEM(keyData) + if e != nil { + panic(e.Error()) + } + return key +} + +func LoadRSAPublicKeyFromDisk(location string) *rsa.PublicKey { + keyData, e := ioutil.ReadFile(location) + if e != nil { + panic(e.Error()) + } + key, e := jwt.ParseRSAPublicKeyFromPEM(keyData) + if e != nil { + panic(e.Error()) + } + return key +} + +func MakeSampleToken(c jwt.Claims, key interface{}) string { + token := jwt.NewWithClaims(jwt.SigningMethodRS256, c) + s, e := token.SignedString(key) + + if e != nil { + panic(e.Error()) + } + + return s +} diff --git a/vendor/github.com/dgrijalva/jwt-go/test/hmacTestKey b/vendor/github.com/dgrijalva/jwt-go/test/hmacTestKey new file mode 100644 index 0000000..435b8dd --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/hmacTestKey @@ -0,0 +1 @@ +#5K+~ew{Z(T(P.ZGwb="=.!r.O͚gЀ \ No newline at end of file diff --git a/vendor/github.com/dgrijalva/jwt-go/test/sample_key b/vendor/github.com/dgrijalva/jwt-go/test/sample_key new file mode 100644 index 0000000..abdbade --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/sample_key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA4f5wg5l2hKsTeNem/V41fGnJm6gOdrj8ym3rFkEU/wT8RDtn +SgFEZOQpHEgQ7JL38xUfU0Y3g6aYw9QT0hJ7mCpz9Er5qLaMXJwZxzHzAahlfA0i +cqabvJOMvQtzD6uQv6wPEyZtDTWiQi9AXwBpHssPnpYGIn20ZZuNlX2BrClciHhC +PUIIZOQn/MmqTD31jSyjoQoV7MhhMTATKJx2XrHhR+1DcKJzQBSTAGnpYVaqpsAR +ap+nwRipr3nUTuxyGohBTSmjJ2usSeQXHI3bODIRe1AuTyHceAbewn8b462yEWKA +Rdpd9AjQW5SIVPfdsz5B6GlYQ5LdYKtznTuy7wIDAQABAoIBAQCwia1k7+2oZ2d3 +n6agCAbqIE1QXfCmh41ZqJHbOY3oRQG3X1wpcGH4Gk+O+zDVTV2JszdcOt7E5dAy +MaomETAhRxB7hlIOnEN7WKm+dGNrKRvV0wDU5ReFMRHg31/Lnu8c+5BvGjZX+ky9 +POIhFFYJqwCRlopGSUIxmVj5rSgtzk3iWOQXr+ah1bjEXvlxDOWkHN6YfpV5ThdE +KdBIPGEVqa63r9n2h+qazKrtiRqJqGnOrHzOECYbRFYhexsNFz7YT02xdfSHn7gM +IvabDDP/Qp0PjE1jdouiMaFHYnLBbgvlnZW9yuVf/rpXTUq/njxIXMmvmEyyvSDn +FcFikB8pAoGBAPF77hK4m3/rdGT7X8a/gwvZ2R121aBcdPwEaUhvj/36dx596zvY +mEOjrWfZhF083/nYWE2kVquj2wjs+otCLfifEEgXcVPTnEOPO9Zg3uNSL0nNQghj +FuD3iGLTUBCtM66oTe0jLSslHe8gLGEQqyMzHOzYxNqibxcOZIe8Qt0NAoGBAO+U +I5+XWjWEgDmvyC3TrOSf/KCGjtu0TSv30ipv27bDLMrpvPmD/5lpptTFwcxvVhCs +2b+chCjlghFSWFbBULBrfci2FtliClOVMYrlNBdUSJhf3aYSG2Doe6Bgt1n2CpNn +/iu37Y3NfemZBJA7hNl4dYe+f+uzM87cdQ214+jrAoGAXA0XxX8ll2+ToOLJsaNT +OvNB9h9Uc5qK5X5w+7G7O998BN2PC/MWp8H+2fVqpXgNENpNXttkRm1hk1dych86 +EunfdPuqsX+as44oCyJGFHVBnWpm33eWQw9YqANRI+pCJzP08I5WK3osnPiwshd+ +hR54yjgfYhBFNI7B95PmEQkCgYBzFSz7h1+s34Ycr8SvxsOBWxymG5zaCsUbPsL0 +4aCgLScCHb9J+E86aVbbVFdglYa5Id7DPTL61ixhl7WZjujspeXZGSbmq0Kcnckb +mDgqkLECiOJW2NHP/j0McAkDLL4tysF8TLDO8gvuvzNC+WQ6drO2ThrypLVZQ+ry +eBIPmwKBgEZxhqa0gVvHQG/7Od69KWj4eJP28kq13RhKay8JOoN0vPmspXJo1HY3 +CKuHRG+AP579dncdUnOMvfXOtkdM4vk0+hWASBQzM9xzVcztCa+koAugjVaLS9A+ +9uQoqEeVNTckxx0S2bYevRy7hGQmUJTyQm3j1zEUR5jpdbL83Fbq +-----END RSA PRIVATE KEY----- diff --git a/vendor/github.com/dgrijalva/jwt-go/test/sample_key.pub b/vendor/github.com/dgrijalva/jwt-go/test/sample_key.pub new file mode 100644 index 0000000..03dc982 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/test/sample_key.pub @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4f5wg5l2hKsTeNem/V41 +fGnJm6gOdrj8ym3rFkEU/wT8RDtnSgFEZOQpHEgQ7JL38xUfU0Y3g6aYw9QT0hJ7 +mCpz9Er5qLaMXJwZxzHzAahlfA0icqabvJOMvQtzD6uQv6wPEyZtDTWiQi9AXwBp +HssPnpYGIn20ZZuNlX2BrClciHhCPUIIZOQn/MmqTD31jSyjoQoV7MhhMTATKJx2 +XrHhR+1DcKJzQBSTAGnpYVaqpsARap+nwRipr3nUTuxyGohBTSmjJ2usSeQXHI3b +ODIRe1AuTyHceAbewn8b462yEWKARdpd9AjQW5SIVPfdsz5B6GlYQ5LdYKtznTuy +7wIDAQAB +-----END PUBLIC KEY----- diff --git a/vendor/github.com/dgrijalva/jwt-go/token.go b/vendor/github.com/dgrijalva/jwt-go/token.go new file mode 100644 index 0000000..d637e08 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/token.go @@ -0,0 +1,108 @@ +package jwt + +import ( + "encoding/base64" + "encoding/json" + "strings" + "time" +) + +// TimeFunc provides the current time when parsing token to validate "exp" claim (expiration time). +// You can override it to use another time value. This is useful for testing or if your +// server uses a different time zone than your tokens. +var TimeFunc = time.Now + +// Parse methods use this callback function to supply +// the key for verification. The function receives the parsed, +// but unverified Token. This allows you to use properties in the +// Header of the token (such as `kid`) to identify which key to use. +type Keyfunc func(*Token) (interface{}, error) + +// A JWT Token. Different fields will be used depending on whether you're +// creating or parsing/verifying a token. +type Token struct { + Raw string // The raw token. Populated when you Parse a token + Method SigningMethod // The signing method used or to be used + Header map[string]interface{} // The first segment of the token + Claims Claims // The second segment of the token + Signature string // The third segment of the token. Populated when you Parse a token + Valid bool // Is the token valid? Populated when you Parse/Verify a token +} + +// Create a new Token. Takes a signing method +func New(method SigningMethod) *Token { + return NewWithClaims(method, MapClaims{}) +} + +func NewWithClaims(method SigningMethod, claims Claims) *Token { + return &Token{ + Header: map[string]interface{}{ + "typ": "JWT", + "alg": method.Alg(), + }, + Claims: claims, + Method: method, + } +} + +// Get the complete, signed token +func (t *Token) SignedString(key interface{}) (string, error) { + var sig, sstr string + var err error + if sstr, err = t.SigningString(); err != nil { + return "", err + } + if sig, err = t.Method.Sign(sstr, key); err != nil { + return "", err + } + return strings.Join([]string{sstr, sig}, "."), nil +} + +// Generate the signing string. This is the +// most expensive part of the whole deal. Unless you +// need this for something special, just go straight for +// the SignedString. +func (t *Token) SigningString() (string, error) { + var err error + parts := make([]string, 2) + for i, _ := range parts { + var jsonValue []byte + if i == 0 { + if jsonValue, err = json.Marshal(t.Header); err != nil { + return "", err + } + } else { + if jsonValue, err = json.Marshal(t.Claims); err != nil { + return "", err + } + } + + parts[i] = EncodeSegment(jsonValue) + } + return strings.Join(parts, "."), nil +} + +// Parse, validate, and return a token. +// keyFunc will receive the parsed token and should return the key for validating. +// If everything is kosher, err will be nil +func Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { + return new(Parser).Parse(tokenString, keyFunc) +} + +func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { + return new(Parser).ParseWithClaims(tokenString, claims, keyFunc) +} + +// Encode JWT specific base64url encoding with padding stripped +func EncodeSegment(seg []byte) string { + return strings.TrimRight(base64.URLEncoding.EncodeToString(seg), "=") +} + +// Decode JWT specific base64url encoding with padding stripped +func DecodeSegment(seg string) ([]byte, error) { + if l := len(seg) % 4; l > 0 { + seg += strings.Repeat("=", 4-l) + } + + return base64.URLEncoding.DecodeString(seg) +} diff --git a/vendor/github.com/go-kit/kit/.gitignore b/vendor/github.com/go-kit/kit/.gitignore new file mode 100644 index 0000000..6062401 --- /dev/null +++ b/vendor/github.com/go-kit/kit/.gitignore @@ -0,0 +1,45 @@ +examples/addsvc/addsvc +examples/addsvc/client/client +examples/apigateway/apigateway +examples/profilesvc/profilesvc +examples/stringsvc1/stringsvc1 +examples/stringsvc2/stringsvc2 +examples/stringsvc3/stringsvc3 +*.coverprofile + +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test +_old* + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe + +# https://github.com/github/gitignore/blob/master/Global/Vim.gitignore +# swap +[._]*.s[a-w][a-z] +[._]s[a-w][a-z] +# session +Session.vim +# temporary +.netrwhist +*~ +# auto-generated tag files +tags + diff --git a/vendor/github.com/go-kit/kit/.travis.yml b/vendor/github.com/go-kit/kit/.travis.yml new file mode 100644 index 0000000..b6074eb --- /dev/null +++ b/vendor/github.com/go-kit/kit/.travis.yml @@ -0,0 +1,8 @@ +language: go + +script: go test -race -v ./... + +go: + - 1.7.5 + - 1.8 + - tip diff --git a/vendor/github.com/go-kit/kit/CONTRIBUTING.md b/vendor/github.com/go-kit/kit/CONTRIBUTING.md new file mode 100644 index 0000000..c0751f8 --- /dev/null +++ b/vendor/github.com/go-kit/kit/CONTRIBUTING.md @@ -0,0 +1,18 @@ +# Contributing + +First, thank you for contributing! We love and encourage pull requests from everyone. + +Before submitting major changes, here are a few guidelines to follow: + +1. Check the [open issues][issues] and [pull requests][prs] for existing discussions. +1. Open an [issue][issues] first, to discuss a new feature or enhancement. +1. Write tests, and make sure the test suite passes locally and on CI. +1. Open a pull request, and reference the relevant issue(s). +1. After receiving feedback, [squash your commits][squash] and add a [great commit message][message]. +1. Have fun! + +[issues]: https://github.com/go-kit/kit/issues +[prs]: https://github.com/go-kit/kit/pulls +[squash]: http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html +[message]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html + diff --git a/vendor/github.com/go-kit/kit/LICENSE b/vendor/github.com/go-kit/kit/LICENSE new file mode 100644 index 0000000..9d83342 --- /dev/null +++ b/vendor/github.com/go-kit/kit/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Peter Bourgon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/vendor/github.com/go-kit/kit/README.md b/vendor/github.com/go-kit/kit/README.md new file mode 100644 index 0000000..542d7e0 --- /dev/null +++ b/vendor/github.com/go-kit/kit/README.md @@ -0,0 +1,121 @@ +# Go kit [![Circle CI](https://circleci.com/gh/go-kit/kit.svg?style=svg)](https://circleci.com/gh/go-kit/kit) [![Travis CI](https://travis-ci.org/go-kit/kit.svg?branch=master)](https://travis-ci.org/go-kit/kit) [![GoDoc](https://godoc.org/github.com/go-kit/kit?status.svg)](https://godoc.org/github.com/go-kit/kit) [![Coverage Status](https://coveralls.io/repos/go-kit/kit/badge.svg?branch=master&service=github)](https://coveralls.io/github/go-kit/kit?branch=master) [![Go Report Card](https://goreportcard.com/badge/go-kit/kit)](https://goreportcard.com/report/go-kit/kit) [![Sourcegraph](https://sourcegraph.com/github.com/go-kit/kit/-/badge.svg)](https://sourcegraph.com/github.com/go-kit/kit?badge) + +**Go kit** is a **distributed programming toolkit** for building microservices +in large organizations. We solve common problems in distributed systems, so +you can focus on your business logic. + +- Website: [gokit.io](https://gokit.io) +- Mailing list: [go-kit](https://groups.google.com/forum/#!forum/go-kit) +- Slack: [gophers.slack.com](https://gophers.slack.com) **#go-kit** ([invite](https://gophersinvite.herokuapp.com/)) + +## Motivation + +Go has emerged as the language of the server, but it remains underrepresented +in large, consumer-focused tech companies like Facebook, Twitter, Netflix, and +SoundCloud. These organizations have largely adopted JVM-based stacks for +their business logic, owing in large part to libraries and ecosystems that +directly support their microservice architectures. + +To reach its next level of success, Go needs more than simple primitives and +idioms. It needs a comprehensive toolkit, for coherent distributed programming +in the large. Go kit is a set of packages and best practices, which provide a +comprehensive, robust, and trustable way of building microservices for +organizations of any size. + +For more details, see + [the website](https://gokit.io), + [the motivating blog post](http://peter.bourgon.org/go-kit/) and + [the video of the talk](https://www.youtube.com/watch?v=iFR_7AKkJFU). +See also the + [Go kit talk at GopherCon 2015](https://www.youtube.com/watch?v=1AjaZi4QuGo). + +## Goals + +- Operate in a heterogeneous SOA — expect to interact with mostly non-Go-kit services +- RPC as the primary messaging pattern +- Pluggable serialization and transport — not just JSON over HTTP +- Operate within existing infrastructures — no mandates for specific tools or technologies + +## Non-goals + +- Supporting messaging patterns other than RPC (for now) — e.g. MPI, pub/sub, CQRS, etc. +- Re-implementing functionality that can be provided by adapting existing software +- Having opinions on operational concerns: deployment, configuration, process supervision, orchestration, etc. + +## Contributing + +Please see [CONTRIBUTING.md](/CONTRIBUTING.md). +Thank you, [contributors](https://github.com/go-kit/kit/graphs/contributors)! + +## Dependency management + +Go kit is a library, designed to be imported into a binary package. +Vendoring is currently the best way for binary package authors + to ensure reliable, reproducible builds. +Therefore, we strongly recommend our users use vendoring for all of their dependencies, + including Go kit. +To avoid compatibility and availability issues, + Go kit doesn't vendor its own dependencies, + and doesn't recommend use of third-party import proxies. + +There are several tools which make vendoring easier, including + [gb](http://getgb.io), + [glide](https://github.com/Masterminds/glide), + [gvt](https://github.com/FiloSottile/gvt), + [govendor](https://github.com/kardianos/govendor), and + [vendetta](https://github.com/dpw/vendetta). +In addition, Go kit uses a variety of continuous integration providers + to find and fix compatibility problems as soon as they occur. + +## Related projects + +Projects with a ★ have had particular influence on Go kit's design (or vice-versa). + +### Service frameworks + +- [gizmo](https://github.com/nytimes/gizmo), a microservice toolkit from The New York Times ★ +- [go-micro](https://github.com/myodc/go-micro), a microservices client/server library ★ +- [h2](https://github.com/hailocab/h2), a microservices framework ★ +- [gotalk](https://github.com/rsms/gotalk), async peer communication protocol & library +- [Kite](https://github.com/koding/kite), a micro-service framework +- [gocircuit](https://github.com/gocircuit/circuit), dynamic cloud orchestration + +### Individual components + +- [afex/hystrix-go](https://github.com/afex/hystrix-go), client-side latency and fault tolerance library +- [armon/go-metrics](https://github.com/armon/go-metrics), library for exporting performance and runtime metrics to external metrics systems +- [codahale/lunk](https://github.com/codahale/lunk), structured logging in the style of Google's Dapper or Twitter's Zipkin +- [eapache/go-resiliency](https://github.com/eapache/go-resiliency), resiliency patterns +- [sasbury/logging](https://github.com/sasbury/logging), a tagged style of logging +- [grpc/grpc-go](https://github.com/grpc/grpc-go), HTTP/2 based RPC +- [inconshreveable/log15](https://github.com/inconshreveable/log15), simple, powerful logging for Go ★ +- [mailgun/vulcand](https://github.com/vulcand/vulcand), programmatic load balancer backed by etcd +- [mattheath/phosphor](https://github.com/mondough/phosphor), distributed system tracing +- [pivotal-golang/lager](https://github.com/pivotal-golang/lager), an opinionated logging library +- [rubyist/circuitbreaker](https://github.com/rubyist/circuitbreaker), circuit breaker library +- [Sirupsen/logrus](https://github.com/Sirupsen/logrus), structured, pluggable logging for Go ★ +- [sourcegraph/appdash](https://github.com/sourcegraph/appdash), application tracing system based on Google's Dapper +- [spacemonkeygo/monitor](https://github.com/spacemonkeygo/monitor), data collection, monitoring, instrumentation, and Zipkin client library +- [streadway/handy](https://github.com/streadway/handy), net/http handler filters +- [vitess/rpcplus](https://godoc.org/github.com/youtube/vitess/go/rpcplus), package rpc + context.Context +- [gdamore/mangos](https://github.com/gdamore/mangos), nanomsg implementation in pure Go + +### Web frameworks + +- [Gorilla](http://www.gorillatoolkit.org) +- [Gin](https://gin-gonic.github.io/gin/) +- [Negroni](https://github.com/codegangsta/negroni) +- [Goji](https://github.com/zenazn/goji) +- [Martini](https://github.com/go-martini/martini) +- [Beego](http://beego.me/) +- [Revel](https://revel.github.io/) (considered [harmful](https://github.com/go-kit/kit/issues/350)) + +## Additional reading + +- [Architecting for the Cloud](http://fr.slideshare.net/stonse/architecting-for-the-cloud-using-netflixoss-codemash-workshop-29852233) — Netflix +- [Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html) — Google +- [Your Server as a Function](http://monkey.org/~marius/funsrv.pdf) (PDF) — Twitter + +--- + +Development supported by [DigitalOcean](https://digitalocean.com). diff --git a/vendor/github.com/go-kit/kit/ROADMAP.md b/vendor/github.com/go-kit/kit/ROADMAP.md new file mode 100644 index 0000000..5c462aa --- /dev/null +++ b/vendor/github.com/go-kit/kit/ROADMAP.md @@ -0,0 +1,17 @@ +# Roadmap + +This is a coarse-grained roadmap of Go kit development direction in the short +to mid-term future. It will be kept reasonably up-to-date by the project +maintainers. Suggest new ideas, enhancements, and features using the standard +[issues](https://github.com/go-kit/kit/issues) model. + +## Prioritized + +1. kitgen code generation (#308, #70) +1. package pubsub (#298, #295) + +## Unprioritized + +- package log/levels refactor (#250, #269, #252) +- package auth/jwt (#255) + diff --git a/vendor/github.com/go-kit/kit/auth/jwt/README.md b/vendor/github.com/go-kit/kit/auth/jwt/README.md new file mode 100644 index 0000000..d435e0f --- /dev/null +++ b/vendor/github.com/go-kit/kit/auth/jwt/README.md @@ -0,0 +1,122 @@ +# package auth/jwt + +`package auth/jwt` provides a set of interfaces for service authorization +through [JSON Web Tokens](https://jwt.io/). + +## Usage + +NewParser takes a key function and an expected signing method and returns an +`endpoint.Middleware`. The middleware will parse a token passed into the +context via the `jwt.JWTTokenContextKey`. If the token is valid, any claims +will be added to the context via the `jwt.JWTClaimsContextKey`. + +```go +import ( + stdjwt "github.com/dgrijalva/jwt-go" + + "github.com/go-kit/kit/auth/jwt" + "github.com/go-kit/kit/endpoint" +) + +func main() { + var exampleEndpoint endpoint.Endpoint + { + kf := func(token *stdjwt.Token) (interface{}, error) { return []byte("SigningString"), nil } + exampleEndpoint = MakeExampleEndpoint(service) + exampleEndpoint = jwt.NewParser(kf, stdjwt.SigningMethodHS256)(exampleEndpoint) + } +} +``` + +NewSigner takes a JWT key ID header, the signing key, signing method, and a +claims object. It returns an `endpoint.Middleware`. The middleware will build +the token string and add it to the context via the `jwt.JWTTokenContextKey`. + +```go +import ( + stdjwt "github.com/dgrijalva/jwt-go" + + "github.com/go-kit/kit/auth/jwt" + "github.com/go-kit/kit/endpoint" +) + +func main() { + var exampleEndpoint endpoint.Endpoint + { + exampleEndpoint = grpctransport.NewClient(...).Endpoint() + exampleEndpoint = jwt.NewSigner( + "kid-header", + []byte("SigningString"), + stdjwt.SigningMethodHS256, + jwt.Claims{}, + )(exampleEndpoint) + } +} +``` + +In order for the parser and the signer to work, the authorization headers need +to be passed between the request and the context. `ToHTTPContext()`, +`FromHTTPContext()`, `ToGRPCContext()`, and `FromGRPCContext()` are given as +helpers to do this. These functions implement the correlating transport's +RequestFunc interface and can be passed as ClientBefore or ServerBefore +options. + +Example of use in a client: + +```go +import ( + stdjwt "github.com/dgrijalva/jwt-go" + + grpctransport "github.com/go-kit/kit/transport/grpc" + "github.com/go-kit/kit/auth/jwt" + "github.com/go-kit/kit/endpoint" +) + +func main() { + + options := []httptransport.ClientOption{} + var exampleEndpoint endpoint.Endpoint + { + exampleEndpoint = grpctransport.NewClient(..., grpctransport.ClientBefore(jwt.FromGRPCContext())).Endpoint() + exampleEndpoint = jwt.NewSigner( + "kid-header", + []byte("SigningString"), + stdjwt.SigningMethodHS256, + jwt.Claims{}, + )(exampleEndpoint) + } +} +``` + +Example of use in a server: + +```go +import ( + "context" + + "github.com/go-kit/kit/auth/jwt" + "github.com/go-kit/kit/log" + grpctransport "github.com/go-kit/kit/transport/grpc" +) + +func MakeGRPCServer(ctx context.Context, endpoints Endpoints, logger log.Logger) pb.ExampleServer { + options := []grpctransport.ServerOption{grpctransport.ServerErrorLogger(logger)} + + return &grpcServer{ + createUser: grpctransport.NewServer( + ctx, + endpoints.CreateUserEndpoint, + DecodeGRPCCreateUserRequest, + EncodeGRPCCreateUserResponse, + append(options, grpctransport.ServerBefore(jwt.ToGRPCContext()))..., + ), + getUser: grpctransport.NewServer( + ctx, + endpoints.GetUserEndpoint, + DecodeGRPCGetUserRequest, + EncodeGRPCGetUserResponse, + options..., + ), + } +} +``` diff --git a/vendor/github.com/go-kit/kit/auth/jwt/middleware.go b/vendor/github.com/go-kit/kit/auth/jwt/middleware.go new file mode 100644 index 0000000..b5ccf0b --- /dev/null +++ b/vendor/github.com/go-kit/kit/auth/jwt/middleware.go @@ -0,0 +1,129 @@ +package jwt + +import ( + "context" + "errors" + + jwt "github.com/dgrijalva/jwt-go" + + "github.com/go-kit/kit/endpoint" +) + +type contextKey string + +const ( + // JWTTokenContextKey holds the key used to store a JWT Token in the + // context. + JWTTokenContextKey contextKey = "JWTToken" + + // JWTClaimsContextKey holds the key used to store the JWT Claims in the + // context. + JWTClaimsContextKey contextKey = "JWTClaims" +) + +var ( + // ErrTokenContextMissing denotes a token was not passed into the parsing + // middleware's context. + ErrTokenContextMissing = errors.New("token up for parsing was not passed through the context") + + // ErrTokenInvalid denotes a token was not able to be validated. + ErrTokenInvalid = errors.New("JWT Token was invalid") + + // ErrTokenExpired denotes a token's expire header (exp) has since passed. + ErrTokenExpired = errors.New("JWT Token is expired") + + // ErrTokenMalformed denotes a token was not formatted as a JWT token. + ErrTokenMalformed = errors.New("JWT Token is malformed") + + // ErrTokenNotActive denotes a token's not before header (nbf) is in the + // future. + ErrTokenNotActive = errors.New("token is not valid yet") + + // ErrUnexpectedSigningMethod denotes a token was signed with an unexpected + // signing method. + ErrUnexpectedSigningMethod = errors.New("unexpected signing method") +) + +// Claims is a map of arbitrary claim data. +type Claims map[string]interface{} + +// NewSigner creates a new JWT token generating middleware, specifying key ID, +// signing string, signing method and the claims you would like it to contain. +// Tokens are signed with a Key ID header (kid) which is useful for determining +// the key to use for parsing. Particularly useful for clients. +func NewSigner(kid string, key []byte, method jwt.SigningMethod, claims Claims) endpoint.Middleware { + return func(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + token := jwt.NewWithClaims(method, jwt.MapClaims(claims)) + token.Header["kid"] = kid + + // Sign and get the complete encoded token as a string using the secret + tokenString, err := token.SignedString(key) + if err != nil { + return nil, err + } + ctx = context.WithValue(ctx, JWTTokenContextKey, tokenString) + + return next(ctx, request) + } + } +} + +// NewParser creates a new JWT token parsing middleware, specifying a +// jwt.Keyfunc interface and the signing method. NewParser adds the resulting +// claims to endpoint context or returns error on invalid token. Particularly +// useful for servers. +func NewParser(keyFunc jwt.Keyfunc, method jwt.SigningMethod) endpoint.Middleware { + return func(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + // tokenString is stored in the context from the transport handlers. + tokenString, ok := ctx.Value(JWTTokenContextKey).(string) + if !ok { + return nil, ErrTokenContextMissing + } + + // Parse takes the token string and a function for looking up the + // key. The latter is especially useful if you use multiple keys + // for your application. The standard is to use 'kid' in the head + // of the token to identify which key to use, but the parsed token + // (head and claims) is provided to the callback, providing + // flexibility. + token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { + // Don't forget to validate the alg is what you expect: + if token.Method != method { + return nil, ErrUnexpectedSigningMethod + } + + return keyFunc(token) + }) + if err != nil { + if e, ok := err.(*jwt.ValidationError); ok && e.Inner != nil { + if e.Errors&jwt.ValidationErrorMalformed != 0 { + // Token is malformed + return nil, ErrTokenMalformed + } else if e.Errors&jwt.ValidationErrorExpired != 0 { + // Token is expired + return nil, ErrTokenExpired + } else if e.Errors&jwt.ValidationErrorNotValidYet != 0 { + // Token is not active yet + return nil, ErrTokenNotActive + } + + return nil, e.Inner + } + + return nil, err + } + + if !token.Valid { + return nil, ErrTokenInvalid + } + + if claims, ok := token.Claims.(jwt.MapClaims); ok { + ctx = context.WithValue(ctx, JWTClaimsContextKey, Claims(claims)) + } + + return next(ctx, request) + } + } +} diff --git a/vendor/github.com/go-kit/kit/auth/jwt/middleware_test.go b/vendor/github.com/go-kit/kit/auth/jwt/middleware_test.go new file mode 100644 index 0000000..99b943c --- /dev/null +++ b/vendor/github.com/go-kit/kit/auth/jwt/middleware_test.go @@ -0,0 +1,105 @@ +package jwt + +import ( + "context" + "testing" + + jwt "github.com/dgrijalva/jwt-go" +) + +var ( + kid = "kid" + key = []byte("test_signing_key") + method = jwt.SigningMethodHS256 + invalidMethod = jwt.SigningMethodRS256 + claims = Claims{"user": "go-kit"} + // Signed tokens generated at https://jwt.io/ + signedKey = "eyJhbGciOiJIUzI1NiIsImtpZCI6ImtpZCIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiZ28ta2l0In0.14M2VmYyApdSlV_LZ88ajjwuaLeIFplB8JpyNy0A19E" + invalidKey = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.e30.vKVCKto-Wn6rgz3vBdaZaCBGfCBDTXOENSo_X2Gq7qA" +) + +func TestSigner(t *testing.T) { + e := func(ctx context.Context, i interface{}) (interface{}, error) { return ctx, nil } + + signer := NewSigner(kid, key, method, claims)(e) + ctx, err := signer(context.Background(), struct{}{}) + if err != nil { + t.Fatalf("Signer returned error: %s", err) + } + + token, ok := ctx.(context.Context).Value(JWTTokenContextKey).(string) + if !ok { + t.Fatal("Token did not exist in context") + } + + if token != signedKey { + t.Fatalf("JWT tokens did not match: expecting %s got %s", signedKey, token) + } +} + +func TestJWTParser(t *testing.T) { + e := func(ctx context.Context, i interface{}) (interface{}, error) { return ctx, nil } + + keys := func(token *jwt.Token) (interface{}, error) { + return key, nil + } + + parser := NewParser(keys, method)(e) + + // No Token is passed into the parser + _, err := parser(context.Background(), struct{}{}) + if err == nil { + t.Error("Parser should have returned an error") + } + + if err != ErrTokenContextMissing { + t.Errorf("unexpected error returned, expected: %s got: %s", ErrTokenContextMissing, err) + } + + // Invalid Token is passed into the parser + ctx := context.WithValue(context.Background(), JWTTokenContextKey, invalidKey) + _, err = parser(ctx, struct{}{}) + if err == nil { + t.Error("Parser should have returned an error") + } + + // Invalid Method is used in the parser + badParser := NewParser(keys, invalidMethod)(e) + ctx = context.WithValue(context.Background(), JWTTokenContextKey, signedKey) + _, err = badParser(ctx, struct{}{}) + if err == nil { + t.Error("Parser should have returned an error") + } + + if err != ErrUnexpectedSigningMethod { + t.Errorf("unexpected error returned, expected: %s got: %s", ErrUnexpectedSigningMethod, err) + } + + // Invalid key is used in the parser + invalidKeys := func(token *jwt.Token) (interface{}, error) { + return []byte("bad"), nil + } + + badParser = NewParser(invalidKeys, method)(e) + ctx = context.WithValue(context.Background(), JWTTokenContextKey, signedKey) + _, err = badParser(ctx, struct{}{}) + if err == nil { + t.Error("Parser should have returned an error") + } + + // Correct token is passed into the parser + ctx = context.WithValue(context.Background(), JWTTokenContextKey, signedKey) + ctx1, err := parser(ctx, struct{}{}) + if err != nil { + t.Fatalf("Parser returned error: %s", err) + } + + cl, ok := ctx1.(context.Context).Value(JWTClaimsContextKey).(Claims) + if !ok { + t.Fatal("Claims were not passed into context correctly") + } + + if cl["user"] != claims["user"] { + t.Fatalf("JWT Claims.user did not match: expecting %s got %s", claims["user"], cl["user"]) + } +} diff --git a/vendor/github.com/go-kit/kit/auth/jwt/transport.go b/vendor/github.com/go-kit/kit/auth/jwt/transport.go new file mode 100644 index 0000000..7be7db4 --- /dev/null +++ b/vendor/github.com/go-kit/kit/auth/jwt/transport.go @@ -0,0 +1,89 @@ +package jwt + +import ( + "context" + "fmt" + stdhttp "net/http" + "strings" + + "google.golang.org/grpc/metadata" + + "github.com/go-kit/kit/transport/grpc" + "github.com/go-kit/kit/transport/http" +) + +const ( + bearer string = "bearer" + bearerFormat string = "Bearer %s" +) + +// ToHTTPContext moves JWT token from request header to context. Particularly +// useful for servers. +func ToHTTPContext() http.RequestFunc { + return func(ctx context.Context, r *stdhttp.Request) context.Context { + token, ok := extractTokenFromAuthHeader(r.Header.Get("Authorization")) + if !ok { + return ctx + } + + return context.WithValue(ctx, JWTTokenContextKey, token) + } +} + +// FromHTTPContext moves JWT token from context to request header. Particularly +// useful for clients. +func FromHTTPContext() http.RequestFunc { + return func(ctx context.Context, r *stdhttp.Request) context.Context { + token, ok := ctx.Value(JWTTokenContextKey).(string) + if ok { + r.Header.Add("Authorization", generateAuthHeaderFromToken(token)) + } + return ctx + } +} + +// ToGRPCContext moves JWT token from grpc metadata to context. Particularly +// userful for servers. +func ToGRPCContext() grpc.ServerRequestFunc { + return func(ctx context.Context, md metadata.MD) context.Context { + // capital "Key" is illegal in HTTP/2. + authHeader, ok := md["authorization"] + if !ok { + return ctx + } + + token, ok := extractTokenFromAuthHeader(authHeader[0]) + if ok { + ctx = context.WithValue(ctx, JWTTokenContextKey, token) + } + + return ctx + } +} + +// FromGRPCContext moves JWT token from context to grpc metadata. Particularly +// useful for clients. +func FromGRPCContext() grpc.ClientRequestFunc { + return func(ctx context.Context, md *metadata.MD) context.Context { + token, ok := ctx.Value(JWTTokenContextKey).(string) + if ok { + // capital "Key" is illegal in HTTP/2. + (*md)["authorization"] = []string{generateAuthHeaderFromToken(token)} + } + + return ctx + } +} + +func extractTokenFromAuthHeader(val string) (token string, ok bool) { + authHeaderParts := strings.Split(val, " ") + if len(authHeaderParts) != 2 || strings.ToLower(authHeaderParts[0]) != bearer { + return "", false + } + + return authHeaderParts[1], true +} + +func generateAuthHeaderFromToken(token string) string { + return fmt.Sprintf(bearerFormat, token) +} diff --git a/vendor/github.com/go-kit/kit/auth/jwt/transport_test.go b/vendor/github.com/go-kit/kit/auth/jwt/transport_test.go new file mode 100644 index 0000000..b04d76f --- /dev/null +++ b/vendor/github.com/go-kit/kit/auth/jwt/transport_test.go @@ -0,0 +1,125 @@ +package jwt + +import ( + "context" + "fmt" + "net/http" + "testing" + + "google.golang.org/grpc/metadata" +) + +func TestToHTTPContext(t *testing.T) { + reqFunc := ToHTTPContext() + + // When the header doesn't exist + ctx := reqFunc(context.Background(), &http.Request{}) + + if ctx.Value(JWTTokenContextKey) != nil { + t.Error("Context shouldn't contain the encoded JWT") + } + + // Authorization header value has invalid format + header := http.Header{} + header.Set("Authorization", "no expected auth header format value") + ctx = reqFunc(context.Background(), &http.Request{Header: header}) + + if ctx.Value(JWTTokenContextKey) != nil { + t.Error("Context shouldn't contain the encoded JWT") + } + + // Authorization header is correct + header.Set("Authorization", generateAuthHeaderFromToken(signedKey)) + ctx = reqFunc(context.Background(), &http.Request{Header: header}) + + token := ctx.Value(JWTTokenContextKey).(string) + if token != signedKey { + t.Errorf("Context doesn't contain the expected encoded token value; expected: %s, got: %s", signedKey, token) + } +} + +func TestFromHTTPContext(t *testing.T) { + reqFunc := FromHTTPContext() + + // No JWT Token is passed in the context + ctx := context.Background() + r := http.Request{} + reqFunc(ctx, &r) + + token := r.Header.Get("Authorization") + if token != "" { + t.Error("authorization key should not exist in metadata") + } + + // Correct JWT Token is passed in the context + ctx = context.WithValue(context.Background(), JWTTokenContextKey, signedKey) + r = http.Request{Header: http.Header{}} + reqFunc(ctx, &r) + + token = r.Header.Get("Authorization") + expected := generateAuthHeaderFromToken(signedKey) + + if token != expected { + t.Errorf("Authorization header does not contain the expected JWT token; expected %s, got %s", expected, token) + } +} + +func TestToGRPCContext(t *testing.T) { + md := metadata.MD{} + reqFunc := ToGRPCContext() + + // No Authorization header is passed + ctx := reqFunc(context.Background(), md) + token := ctx.Value(JWTTokenContextKey) + if token != nil { + t.Error("Context should not contain a JWT Token") + } + + // Invalid Authorization header is passed + md["authorization"] = []string{fmt.Sprintf("%s", signedKey)} + ctx = reqFunc(context.Background(), md) + token = ctx.Value(JWTTokenContextKey) + if token != nil { + t.Error("Context should not contain a JWT Token") + } + + // Authorization header is correct + md["authorization"] = []string{fmt.Sprintf("Bearer %s", signedKey)} + ctx = reqFunc(context.Background(), md) + token, ok := ctx.Value(JWTTokenContextKey).(string) + if !ok { + t.Fatal("JWT Token not passed to context correctly") + } + + if token != signedKey { + t.Errorf("JWT tokens did not match: expecting %s got %s", signedKey, token) + } +} + +func TestFromGRPCContext(t *testing.T) { + reqFunc := FromGRPCContext() + + // No JWT Token is passed in the context + ctx := context.Background() + md := metadata.MD{} + reqFunc(ctx, &md) + + _, ok := md["authorization"] + if ok { + t.Error("authorization key should not exist in metadata") + } + + // Correct JWT Token is passed in the context + ctx = context.WithValue(context.Background(), JWTTokenContextKey, signedKey) + md = metadata.MD{} + reqFunc(ctx, &md) + + token, ok := md["authorization"] + if !ok { + t.Fatal("JWT Token not passed to metadata correctly") + } + + if token[0] != generateAuthHeaderFromToken(signedKey) { + t.Errorf("JWT tokens did not match: expecting %s got %s", signedKey, token[0]) + } +} diff --git a/vendor/github.com/go-kit/kit/circle.yml b/vendor/github.com/go-kit/kit/circle.yml new file mode 100644 index 0000000..0c35bb2 --- /dev/null +++ b/vendor/github.com/go-kit/kit/circle.yml @@ -0,0 +1,26 @@ +machine: + pre: + - curl -sSL https://s3.amazonaws.com/circle-downloads/install-circleci-docker.sh | bash -s -- 1.10.0 + - sudo rm -rf /usr/local/go + - curl -sSL https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz | sudo tar xz -C /usr/local + services: + - docker + +dependencies: + pre: + - sudo curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose + - sudo chmod +x /usr/local/bin/docker-compose + - docker-compose -f docker-compose-integration.yml up -d --force-recreate + +test: + pre: + - mkdir -p /home/ubuntu/.go_workspace/src/github.com/go-kit + - mv /home/ubuntu/kit /home/ubuntu/.go_workspace/src/github.com/go-kit + - ln -s /home/ubuntu/.go_workspace/src/github.com/go-kit/kit /home/ubuntu/kit + - go get github.com/go-kit/kit/... + override: + - go test -v -race -tags integration github.com/go-kit/kit/...: + environment: + ETCD_ADDR: http://localhost:2379 + CONSUL_ADDR: localhost:8500 + ZK_ADDR: localhost:2181 diff --git a/vendor/github.com/go-kit/kit/circuitbreaker/doc.go b/vendor/github.com/go-kit/kit/circuitbreaker/doc.go new file mode 100644 index 0000000..fe74957 --- /dev/null +++ b/vendor/github.com/go-kit/kit/circuitbreaker/doc.go @@ -0,0 +1,10 @@ +// Package circuitbreaker implements the circuit breaker pattern. +// +// Circuit breakers prevent thundering herds, and improve resiliency against +// intermittent errors. Every client-side endpoint should be wrapped in a +// circuit breaker. +// +// We provide several implementations in this package, but if you're looking +// for guidance, Gobreaker is probably the best place to start. It has a +// simple and intuitive API, and is well-tested. +package circuitbreaker diff --git a/vendor/github.com/go-kit/kit/circuitbreaker/gobreaker.go b/vendor/github.com/go-kit/kit/circuitbreaker/gobreaker.go new file mode 100644 index 0000000..cf06304 --- /dev/null +++ b/vendor/github.com/go-kit/kit/circuitbreaker/gobreaker.go @@ -0,0 +1,22 @@ +package circuitbreaker + +import ( + "context" + + "github.com/sony/gobreaker" + + "github.com/go-kit/kit/endpoint" +) + +// Gobreaker returns an endpoint.Middleware that implements the circuit +// breaker pattern using the sony/gobreaker package. Only errors returned by +// the wrapped endpoint count against the circuit breaker's error count. +// +// See http://godoc.org/github.com/sony/gobreaker for more information. +func Gobreaker(cb *gobreaker.CircuitBreaker) endpoint.Middleware { + return func(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + return cb.Execute(func() (interface{}, error) { return next(ctx, request) }) + } + } +} diff --git a/vendor/github.com/go-kit/kit/circuitbreaker/gobreaker_test.go b/vendor/github.com/go-kit/kit/circuitbreaker/gobreaker_test.go new file mode 100644 index 0000000..b581cfe --- /dev/null +++ b/vendor/github.com/go-kit/kit/circuitbreaker/gobreaker_test.go @@ -0,0 +1,19 @@ +package circuitbreaker_test + +import ( + "testing" + + "github.com/sony/gobreaker" + + "github.com/go-kit/kit/circuitbreaker" +) + +func TestGobreaker(t *testing.T) { + var ( + breaker = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{})) + primeWith = 100 + shouldPass = func(n int) bool { return n <= 5 } // https://github.com/sony/gobreaker/blob/bfa846d/gobreaker.go#L76 + circuitOpenError = "circuit breaker is open" + ) + testFailingEndpoint(t, breaker, primeWith, shouldPass, 0, circuitOpenError) +} diff --git a/vendor/github.com/go-kit/kit/circuitbreaker/handy_breaker.go b/vendor/github.com/go-kit/kit/circuitbreaker/handy_breaker.go new file mode 100644 index 0000000..a5b60be --- /dev/null +++ b/vendor/github.com/go-kit/kit/circuitbreaker/handy_breaker.go @@ -0,0 +1,38 @@ +package circuitbreaker + +import ( + "context" + "time" + + "github.com/streadway/handy/breaker" + + "github.com/go-kit/kit/endpoint" +) + +// HandyBreaker returns an endpoint.Middleware that implements the circuit +// breaker pattern using the streadway/handy/breaker package. Only errors +// returned by the wrapped endpoint count against the circuit breaker's error +// count. +// +// See http://godoc.org/github.com/streadway/handy/breaker for more +// information. +func HandyBreaker(cb breaker.Breaker) endpoint.Middleware { + return func(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + if !cb.Allow() { + return nil, breaker.ErrCircuitOpen + } + + defer func(begin time.Time) { + if err == nil { + cb.Success(time.Since(begin)) + } else { + cb.Failure(time.Since(begin)) + } + }(time.Now()) + + response, err = next(ctx, request) + return + } + } +} diff --git a/vendor/github.com/go-kit/kit/circuitbreaker/handy_breaker_test.go b/vendor/github.com/go-kit/kit/circuitbreaker/handy_breaker_test.go new file mode 100644 index 0000000..f3642a1 --- /dev/null +++ b/vendor/github.com/go-kit/kit/circuitbreaker/handy_breaker_test.go @@ -0,0 +1,20 @@ +package circuitbreaker_test + +import ( + "testing" + + handybreaker "github.com/streadway/handy/breaker" + + "github.com/go-kit/kit/circuitbreaker" +) + +func TestHandyBreaker(t *testing.T) { + var ( + failureRatio = 0.05 + breaker = circuitbreaker.HandyBreaker(handybreaker.NewBreaker(failureRatio)) + primeWith = handybreaker.DefaultMinObservations * 10 + shouldPass = func(n int) bool { return (float64(n) / float64(primeWith+n)) <= failureRatio } + openCircuitError = handybreaker.ErrCircuitOpen.Error() + ) + testFailingEndpoint(t, breaker, primeWith, shouldPass, 0, openCircuitError) +} diff --git a/vendor/github.com/go-kit/kit/circuitbreaker/hystrix.go b/vendor/github.com/go-kit/kit/circuitbreaker/hystrix.go new file mode 100644 index 0000000..3c59ec4 --- /dev/null +++ b/vendor/github.com/go-kit/kit/circuitbreaker/hystrix.go @@ -0,0 +1,31 @@ +package circuitbreaker + +import ( + "context" + + "github.com/afex/hystrix-go/hystrix" + + "github.com/go-kit/kit/endpoint" +) + +// Hystrix returns an endpoint.Middleware that implements the circuit +// breaker pattern using the afex/hystrix-go package. +// +// When using this circuit breaker, please configure your commands separately. +// +// See https://godoc.org/github.com/afex/hystrix-go/hystrix for more +// information. +func Hystrix(commandName string) endpoint.Middleware { + return func(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + var resp interface{} + if err := hystrix.Do(commandName, func() (err error) { + resp, err = next(ctx, request) + return err + }, nil); err != nil { + return nil, err + } + return resp, nil + } + } +} diff --git a/vendor/github.com/go-kit/kit/circuitbreaker/hystrix_test.go b/vendor/github.com/go-kit/kit/circuitbreaker/hystrix_test.go new file mode 100644 index 0000000..da52757 --- /dev/null +++ b/vendor/github.com/go-kit/kit/circuitbreaker/hystrix_test.go @@ -0,0 +1,40 @@ +package circuitbreaker_test + +import ( + "io/ioutil" + stdlog "log" + "testing" + "time" + + "github.com/afex/hystrix-go/hystrix" + + "github.com/go-kit/kit/circuitbreaker" +) + +func TestHystrix(t *testing.T) { + stdlog.SetOutput(ioutil.Discard) + + const ( + commandName = "my-endpoint" + errorPercent = 5 + maxConcurrent = 1000 + ) + hystrix.ConfigureCommand(commandName, hystrix.CommandConfig{ + ErrorPercentThreshold: errorPercent, + MaxConcurrentRequests: maxConcurrent, + }) + + var ( + breaker = circuitbreaker.Hystrix(commandName) + primeWith = hystrix.DefaultVolumeThreshold * 2 + shouldPass = func(n int) bool { return (float64(n) / float64(primeWith+n)) <= (float64(errorPercent-1) / 100.0) } + openCircuitError = hystrix.ErrCircuitOpen.Error() + ) + + // hystrix-go uses buffered channels to receive reports on request success/failure, + // and so is basically impossible to test deterministically. We have to make sure + // the report buffer is emptied, by injecting a sleep between each invocation. + requestDelay := 5 * time.Millisecond + + testFailingEndpoint(t, breaker, primeWith, shouldPass, requestDelay, openCircuitError) +} diff --git a/vendor/github.com/go-kit/kit/circuitbreaker/util_test.go b/vendor/github.com/go-kit/kit/circuitbreaker/util_test.go new file mode 100644 index 0000000..2512380 --- /dev/null +++ b/vendor/github.com/go-kit/kit/circuitbreaker/util_test.go @@ -0,0 +1,75 @@ +package circuitbreaker_test + +import ( + "context" + "errors" + "fmt" + "path/filepath" + "runtime" + "testing" + "time" + + "github.com/go-kit/kit/endpoint" +) + +func testFailingEndpoint( + t *testing.T, + breaker endpoint.Middleware, + primeWith int, + shouldPass func(int) bool, + requestDelay time.Duration, + openCircuitError string, +) { + _, file, line, _ := runtime.Caller(1) + caller := fmt.Sprintf("%s:%d", filepath.Base(file), line) + + // Create a mock endpoint and wrap it with the breaker. + m := mock{} + var e endpoint.Endpoint + e = m.endpoint + e = breaker(e) + + // Prime the endpoint with successful requests. + for i := 0; i < primeWith; i++ { + if _, err := e(context.Background(), struct{}{}); err != nil { + t.Fatalf("%s: during priming, got error: %v", caller, err) + } + time.Sleep(requestDelay) + } + + // Switch the endpoint to start throwing errors. + m.err = errors.New("tragedy+disaster") + m.through = 0 + + // The first several should be allowed through and yield our error. + for i := 0; shouldPass(i); i++ { + if _, err := e(context.Background(), struct{}{}); err != m.err { + t.Fatalf("%s: want %v, have %v", caller, m.err, err) + } + time.Sleep(requestDelay) + } + through := m.through + + // But the rest should be blocked by an open circuit. + for i := 0; i < 10; i++ { + if _, err := e(context.Background(), struct{}{}); err.Error() != openCircuitError { + t.Fatalf("%s: want %q, have %q", caller, openCircuitError, err.Error()) + } + time.Sleep(requestDelay) + } + + // Make sure none of those got through. + if want, have := through, m.through; want != have { + t.Errorf("%s: want %d, have %d", caller, want, have) + } +} + +type mock struct { + through int + err error +} + +func (m *mock) endpoint(context.Context, interface{}) (interface{}, error) { + m.through++ + return struct{}{}, m.err +} diff --git a/vendor/github.com/go-kit/kit/coverage.bash b/vendor/github.com/go-kit/kit/coverage.bash new file mode 100755 index 0000000..f4b0524 --- /dev/null +++ b/vendor/github.com/go-kit/kit/coverage.bash @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +# This script runs the cover tool on all packages with test files. If you set a +# WEB environment variable, it will additionally open the web-based coverage +# visualizer for each package. + +set -e + +function go_files { find . -name '*_test.go' ; } +function filter { grep -v '/_' ; } +function remove_relative_prefix { sed -e 's/^\.\///g' ; } + +function directories { + go_files | filter | remove_relative_prefix | while read f + do + dirname $f + done +} + +function unique_directories { directories | sort | uniq ; } + +PATHS=${1:-$(unique_directories)} + +function report { + for path in $PATHS + do + go test -coverprofile=$path/cover.coverprofile ./$path + done +} + +function combine { + gover +} + +function clean { + find . -name cover.coverprofile | xargs rm +} + +report +combine +clean + +if [ -n "${WEB+x}" ] +then + go tool cover -html=gover.coverprofile +fi + diff --git a/vendor/github.com/go-kit/kit/docker-compose-integration.yml b/vendor/github.com/go-kit/kit/docker-compose-integration.yml new file mode 100644 index 0000000..f316a13 --- /dev/null +++ b/vendor/github.com/go-kit/kit/docker-compose-integration.yml @@ -0,0 +1,16 @@ +version: '2' +services: + etcd: + image: quay.io/coreos/etcd + ports: + - "2379:2379" + command: /usr/local/bin/etcd -advertise-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 -listen-client-urls "http://0.0.0.0:2379,http://0.0.0.0:4001" + consul: + image: progrium/consul + ports: + - "8500:8500" + command: -server -bootstrap + zk: + image: zookeeper + ports: + - "2181:2181" diff --git a/vendor/github.com/go-kit/kit/endpoint/doc.go b/vendor/github.com/go-kit/kit/endpoint/doc.go new file mode 100644 index 0000000..84e27b9 --- /dev/null +++ b/vendor/github.com/go-kit/kit/endpoint/doc.go @@ -0,0 +1,5 @@ +// Package endpoint defines an abstraction for RPCs. +// +// Endpoints are a fundamental building block for many Go kit components. +// Endpoints are implemented by servers, and called by clients. +package endpoint diff --git a/vendor/github.com/go-kit/kit/endpoint/endpoint.go b/vendor/github.com/go-kit/kit/endpoint/endpoint.go new file mode 100644 index 0000000..1b64f50 --- /dev/null +++ b/vendor/github.com/go-kit/kit/endpoint/endpoint.go @@ -0,0 +1,28 @@ +package endpoint + +import ( + "context" +) + +// Endpoint is the fundamental building block of servers and clients. +// It represents a single RPC method. +type Endpoint func(ctx context.Context, request interface{}) (response interface{}, err error) + +// Nop is an endpoint that does nothing and returns a nil error. +// Useful for tests. +func Nop(context.Context, interface{}) (interface{}, error) { return struct{}{}, nil } + +// Middleware is a chainable behavior modifier for endpoints. +type Middleware func(Endpoint) Endpoint + +// Chain is a helper function for composing middlewares. Requests will +// traverse them in the order they're declared. That is, the first middleware +// is treated as the outermost middleware. +func Chain(outer Middleware, others ...Middleware) Middleware { + return func(next Endpoint) Endpoint { + for i := len(others) - 1; i >= 0; i-- { // reverse + next = others[i](next) + } + return outer(next) + } +} diff --git a/vendor/github.com/go-kit/kit/endpoint/endpoint_example_test.go b/vendor/github.com/go-kit/kit/endpoint/endpoint_example_test.go new file mode 100644 index 0000000..e950623 --- /dev/null +++ b/vendor/github.com/go-kit/kit/endpoint/endpoint_example_test.go @@ -0,0 +1,49 @@ +package endpoint_test + +import ( + "context" + "fmt" + + "github.com/go-kit/kit/endpoint" +) + +func ExampleChain() { + e := endpoint.Chain( + annotate("first"), + annotate("second"), + annotate("third"), + )(myEndpoint) + + if _, err := e(ctx, req); err != nil { + panic(err) + } + + // Output: + // first pre + // second pre + // third pre + // my endpoint! + // third post + // second post + // first post +} + +var ( + ctx = context.Background() + req = struct{}{} +) + +func annotate(s string) endpoint.Middleware { + return func(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + fmt.Println(s, "pre") + defer fmt.Println(s, "post") + return next(ctx, request) + } + } +} + +func myEndpoint(context.Context, interface{}) (interface{}, error) { + fmt.Println("my endpoint!") + return struct{}{}, nil +} diff --git a/vendor/github.com/go-kit/kit/examples/README.md b/vendor/github.com/go-kit/kit/examples/README.md new file mode 100644 index 0000000..2891d78 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/README.md @@ -0,0 +1,5 @@ +# Examples + +For more information about these examples, + including a walkthrough of the stringsvc example, + see [gokit.io/examples](https://gokit.io/examples). diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/client/grpc/client.go b/vendor/github.com/go-kit/kit/examples/addsvc/client/grpc/client.go new file mode 100644 index 0000000..5ede619 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/client/grpc/client.go @@ -0,0 +1,75 @@ +// Package grpc provides a gRPC client for the add service. +package grpc + +import ( + "time" + + jujuratelimit "github.com/juju/ratelimit" + stdopentracing "github.com/opentracing/opentracing-go" + "github.com/sony/gobreaker" + "google.golang.org/grpc" + + "github.com/go-kit/kit/circuitbreaker" + "github.com/go-kit/kit/endpoint" + "github.com/go-kit/kit/examples/addsvc" + "github.com/go-kit/kit/examples/addsvc/pb" + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/ratelimit" + "github.com/go-kit/kit/tracing/opentracing" + grpctransport "github.com/go-kit/kit/transport/grpc" +) + +// New returns an AddService backed by a gRPC client connection. It is the +// responsibility of the caller to dial, and later close, the connection. +func New(conn *grpc.ClientConn, tracer stdopentracing.Tracer, logger log.Logger) addsvc.Service { + // We construct a single ratelimiter middleware, to limit the total outgoing + // QPS from this client to all methods on the remote instance. We also + // construct per-endpoint circuitbreaker middlewares to demonstrate how + // that's done, although they could easily be combined into a single breaker + // for the entire remote instance, too. + + limiter := ratelimit.NewTokenBucketLimiter(jujuratelimit.NewBucketWithRate(100, 100)) + + var sumEndpoint endpoint.Endpoint + { + sumEndpoint = grpctransport.NewClient( + conn, + "Add", + "Sum", + addsvc.EncodeGRPCSumRequest, + addsvc.DecodeGRPCSumResponse, + pb.SumReply{}, + grpctransport.ClientBefore(opentracing.ToGRPCRequest(tracer, logger)), + ).Endpoint() + sumEndpoint = opentracing.TraceClient(tracer, "Sum")(sumEndpoint) + sumEndpoint = limiter(sumEndpoint) + sumEndpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{ + Name: "Sum", + Timeout: 30 * time.Second, + }))(sumEndpoint) + } + + var concatEndpoint endpoint.Endpoint + { + concatEndpoint = grpctransport.NewClient( + conn, + "Add", + "Concat", + addsvc.EncodeGRPCConcatRequest, + addsvc.DecodeGRPCConcatResponse, + pb.ConcatReply{}, + grpctransport.ClientBefore(opentracing.ToGRPCRequest(tracer, logger)), + ).Endpoint() + concatEndpoint = opentracing.TraceClient(tracer, "Concat")(concatEndpoint) + concatEndpoint = limiter(concatEndpoint) + concatEndpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{ + Name: "Concat", + Timeout: 30 * time.Second, + }))(concatEndpoint) + } + + return addsvc.Endpoints{ + SumEndpoint: sumEndpoint, + ConcatEndpoint: concatEndpoint, + } +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/client/http/client.go b/vendor/github.com/go-kit/kit/examples/addsvc/client/http/client.go new file mode 100644 index 0000000..be8d8e2 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/client/http/client.go @@ -0,0 +1,86 @@ +// Package http provides an HTTP client for the add service. +package http + +import ( + "net/url" + "strings" + "time" + + jujuratelimit "github.com/juju/ratelimit" + stdopentracing "github.com/opentracing/opentracing-go" + "github.com/sony/gobreaker" + + "github.com/go-kit/kit/circuitbreaker" + "github.com/go-kit/kit/endpoint" + "github.com/go-kit/kit/examples/addsvc" + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/ratelimit" + "github.com/go-kit/kit/tracing/opentracing" + httptransport "github.com/go-kit/kit/transport/http" +) + +// New returns an AddService backed by an HTTP server living at the remote +// instance. We expect instance to come from a service discovery system, so +// likely of the form "host:port". +func New(instance string, tracer stdopentracing.Tracer, logger log.Logger) (addsvc.Service, error) { + if !strings.HasPrefix(instance, "http") { + instance = "http://" + instance + } + u, err := url.Parse(instance) + if err != nil { + return nil, err + } + + // We construct a single ratelimiter middleware, to limit the total outgoing + // QPS from this client to all methods on the remote instance. We also + // construct per-endpoint circuitbreaker middlewares to demonstrate how + // that's done, although they could easily be combined into a single breaker + // for the entire remote instance, too. + + limiter := ratelimit.NewTokenBucketLimiter(jujuratelimit.NewBucketWithRate(100, 100)) + + var sumEndpoint endpoint.Endpoint + { + sumEndpoint = httptransport.NewClient( + "POST", + copyURL(u, "/sum"), + addsvc.EncodeHTTPGenericRequest, + addsvc.DecodeHTTPSumResponse, + httptransport.ClientBefore(opentracing.ToHTTPRequest(tracer, logger)), + ).Endpoint() + sumEndpoint = opentracing.TraceClient(tracer, "Sum")(sumEndpoint) + sumEndpoint = limiter(sumEndpoint) + sumEndpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{ + Name: "Sum", + Timeout: 30 * time.Second, + }))(sumEndpoint) + } + + var concatEndpoint endpoint.Endpoint + { + concatEndpoint = httptransport.NewClient( + "POST", + copyURL(u, "/concat"), + addsvc.EncodeHTTPGenericRequest, + addsvc.DecodeHTTPConcatResponse, + httptransport.ClientBefore(opentracing.ToHTTPRequest(tracer, logger)), + ).Endpoint() + concatEndpoint = opentracing.TraceClient(tracer, "Concat")(concatEndpoint) + concatEndpoint = limiter(concatEndpoint) + concatEndpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{ + Name: "Concat", + Timeout: 30 * time.Second, + }))(concatEndpoint) + } + + return addsvc.Endpoints{ + SumEndpoint: sumEndpoint, + ConcatEndpoint: concatEndpoint, + }, nil +} + +func copyURL(base *url.URL, path string) *url.URL { + next := *base + next.Path = path + return &next +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/client/thrift/client.go b/vendor/github.com/go-kit/kit/examples/addsvc/client/thrift/client.go new file mode 100644 index 0000000..4463ae8 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/client/thrift/client.go @@ -0,0 +1,55 @@ +// Package thrift provides a Thrift client for the add service. +package thrift + +import ( + "time" + + jujuratelimit "github.com/juju/ratelimit" + "github.com/sony/gobreaker" + + "github.com/go-kit/kit/circuitbreaker" + "github.com/go-kit/kit/endpoint" + "github.com/go-kit/kit/examples/addsvc" + thriftadd "github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc" + "github.com/go-kit/kit/ratelimit" +) + +// New returns an AddService backed by a Thrift server described by the provided +// client. The caller is responsible for constructing the client, and eventually +// closing the underlying transport. +func New(client *thriftadd.AddServiceClient) addsvc.Service { + // We construct a single ratelimiter middleware, to limit the total outgoing + // QPS from this client to all methods on the remote instance. We also + // construct per-endpoint circuitbreaker middlewares to demonstrate how + // that's done, although they could easily be combined into a single breaker + // for the entire remote instance, too. + + limiter := ratelimit.NewTokenBucketLimiter(jujuratelimit.NewBucketWithRate(100, 100)) + + // Thrift does not currently have tracer bindings, so we skip tracing. + + var sumEndpoint endpoint.Endpoint + { + sumEndpoint = addsvc.MakeThriftSumEndpoint(client) + sumEndpoint = limiter(sumEndpoint) + sumEndpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{ + Name: "Sum", + Timeout: 30 * time.Second, + }))(sumEndpoint) + } + + var concatEndpoint endpoint.Endpoint + { + concatEndpoint = addsvc.MakeThriftConcatEndpoint(client) + concatEndpoint = limiter(concatEndpoint) + concatEndpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{ + Name: "Concat", + Timeout: 30 * time.Second, + }))(concatEndpoint) + } + + return addsvc.Endpoints{ + SumEndpoint: sumEndpoint, + ConcatEndpoint: concatEndpoint, + } +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/cmd/addcli/main.go b/vendor/github.com/go-kit/kit/examples/addsvc/cmd/addcli/main.go new file mode 100644 index 0000000..feaf40a --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/cmd/addcli/main.go @@ -0,0 +1,197 @@ +package main + +import ( + "context" + "flag" + "fmt" + "os" + "strconv" + "strings" + "time" + + "github.com/apache/thrift/lib/go/thrift" + "github.com/lightstep/lightstep-tracer-go" + stdopentracing "github.com/opentracing/opentracing-go" + zipkin "github.com/openzipkin/zipkin-go-opentracing" + "google.golang.org/grpc" + "sourcegraph.com/sourcegraph/appdash" + appdashot "sourcegraph.com/sourcegraph/appdash/opentracing" + + "github.com/go-kit/kit/examples/addsvc" + grpcclient "github.com/go-kit/kit/examples/addsvc/client/grpc" + httpclient "github.com/go-kit/kit/examples/addsvc/client/http" + thriftclient "github.com/go-kit/kit/examples/addsvc/client/thrift" + thriftadd "github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc" + "github.com/go-kit/kit/log" +) + +func main() { + // The addcli presumes no service discovery system, and expects users to + // provide the direct address of an addsvc. This presumption is reflected in + // the addcli binary and the the client packages: the -transport.addr flags + // and various client constructors both expect host:port strings. For an + // example service with a client built on top of a service discovery system, + // see profilesvc. + + var ( + httpAddr = flag.String("http.addr", "", "HTTP address of addsvc") + grpcAddr = flag.String("grpc.addr", "", "gRPC (HTTP) address of addsvc") + thriftAddr = flag.String("thrift.addr", "", "Thrift address of addsvc") + thriftProtocol = flag.String("thrift.protocol", "binary", "binary, compact, json, simplejson") + thriftBufferSize = flag.Int("thrift.buffer.size", 0, "0 for unbuffered") + thriftFramed = flag.Bool("thrift.framed", false, "true to enable framing") + zipkinAddr = flag.String("zipkin.addr", "", "Enable Zipkin tracing via a Zipkin HTTP Collector endpoint") + zipkinKafkaAddr = flag.String("zipkin.kafka.addr", "", "Enable Zipkin tracing via a Kafka server host:port") + appdashAddr = flag.String("appdash.addr", "", "Enable Appdash tracing via an Appdash server host:port") + lightstepToken = flag.String("lightstep.token", "", "Enable LightStep tracing via a LightStep access token") + method = flag.String("method", "sum", "sum, concat") + ) + flag.Parse() + + if len(flag.Args()) != 2 { + fmt.Fprintf(os.Stderr, "usage: addcli [flags] \n") + os.Exit(1) + } + + // This is a demonstration client, which supports multiple tracers. + // Your clients will probably just use one tracer. + var tracer stdopentracing.Tracer + { + if *zipkinAddr != "" { + // endpoint typically looks like: http://zipkinhost:9411/api/v1/spans + collector, err := zipkin.NewHTTPCollector(*zipkinAddr) + if err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } + defer collector.Close() + + tracer, err = zipkin.NewTracer( + zipkin.NewRecorder(collector, false, "0.0.0.0:0", "addcli"), + ) + if err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } + } else if *zipkinKafkaAddr != "" { + collector, err := zipkin.NewKafkaCollector( + strings.Split(*zipkinKafkaAddr, ","), + zipkin.KafkaLogger(log.NewNopLogger()), + ) + if err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } + defer collector.Close() + + tracer, err = zipkin.NewTracer( + zipkin.NewRecorder(collector, false, "0.0.0.0:0", "addcli"), + ) + if err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } + } else if *appdashAddr != "" { + tracer = appdashot.NewTracer(appdash.NewRemoteCollector(*appdashAddr)) + } else if *lightstepToken != "" { + tracer = lightstep.NewTracer(lightstep.Options{ + AccessToken: *lightstepToken, + }) + defer lightstep.FlushLightStepTracer(tracer) + } else { + tracer = stdopentracing.GlobalTracer() // no-op + } + } + + // This is a demonstration client, which supports multiple transports. + // Your clients will probably just define and stick with 1 transport. + + var ( + service addsvc.Service + err error + ) + if *httpAddr != "" { + service, err = httpclient.New(*httpAddr, tracer, log.NewNopLogger()) + } else if *grpcAddr != "" { + conn, err := grpc.Dial(*grpcAddr, grpc.WithInsecure(), grpc.WithTimeout(time.Second)) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v", err) + os.Exit(1) + } + defer conn.Close() + service = grpcclient.New(conn, tracer, log.NewNopLogger()) + } else if *thriftAddr != "" { + // It's necessary to do all of this construction in the func main, + // because (among other reasons) we need to control the lifecycle of the + // Thrift transport, i.e. close it eventually. + var protocolFactory thrift.TProtocolFactory + switch *thriftProtocol { + case "compact": + protocolFactory = thrift.NewTCompactProtocolFactory() + case "simplejson": + protocolFactory = thrift.NewTSimpleJSONProtocolFactory() + case "json": + protocolFactory = thrift.NewTJSONProtocolFactory() + case "binary", "": + protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() + default: + fmt.Fprintf(os.Stderr, "error: invalid protocol %q\n", *thriftProtocol) + os.Exit(1) + } + var transportFactory thrift.TTransportFactory + if *thriftBufferSize > 0 { + transportFactory = thrift.NewTBufferedTransportFactory(*thriftBufferSize) + } else { + transportFactory = thrift.NewTTransportFactory() + } + if *thriftFramed { + transportFactory = thrift.NewTFramedTransportFactory(transportFactory) + } + transportSocket, err := thrift.NewTSocket(*thriftAddr) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + transport := transportFactory.GetTransport(transportSocket) + if err := transport.Open(); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + defer transport.Close() + client := thriftadd.NewAddServiceClientFactory(transport, protocolFactory) + service = thriftclient.New(client) + } else { + fmt.Fprintf(os.Stderr, "error: no remote address specified\n") + os.Exit(1) + } + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + + switch *method { + case "sum": + a, _ := strconv.ParseInt(flag.Args()[0], 10, 64) + b, _ := strconv.ParseInt(flag.Args()[1], 10, 64) + v, err := service.Sum(context.Background(), int(a), int(b)) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + fmt.Fprintf(os.Stdout, "%d + %d = %d\n", a, b, v) + + case "concat": + a := flag.Args()[0] + b := flag.Args()[1] + v, err := service.Concat(context.Background(), a, b) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + fmt.Fprintf(os.Stdout, "%q + %q = %q\n", a, b, v) + + default: + fmt.Fprintf(os.Stderr, "error: invalid method %q\n", method) + os.Exit(1) + } +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/cmd/addsvc/main.go b/vendor/github.com/go-kit/kit/examples/addsvc/cmd/addsvc/main.go new file mode 100644 index 0000000..247a028 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/cmd/addsvc/main.go @@ -0,0 +1,279 @@ +package main + +import ( + "context" + "flag" + "fmt" + "net" + "net/http" + "net/http/pprof" + "os" + "os/signal" + "strings" + "syscall" + + "github.com/apache/thrift/lib/go/thrift" + lightstep "github.com/lightstep/lightstep-tracer-go" + stdopentracing "github.com/opentracing/opentracing-go" + zipkin "github.com/openzipkin/zipkin-go-opentracing" + stdprometheus "github.com/prometheus/client_golang/prometheus" + "google.golang.org/grpc" + "sourcegraph.com/sourcegraph/appdash" + appdashot "sourcegraph.com/sourcegraph/appdash/opentracing" + + "github.com/go-kit/kit/endpoint" + "github.com/go-kit/kit/examples/addsvc" + "github.com/go-kit/kit/examples/addsvc/pb" + thriftadd "github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc" + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/metrics" + "github.com/go-kit/kit/metrics/prometheus" + "github.com/go-kit/kit/tracing/opentracing" +) + +func main() { + var ( + debugAddr = flag.String("debug.addr", ":8080", "Debug and metrics listen address") + httpAddr = flag.String("http.addr", ":8081", "HTTP listen address") + grpcAddr = flag.String("grpc.addr", ":8082", "gRPC (HTTP) listen address") + thriftAddr = flag.String("thrift.addr", ":8083", "Thrift listen address") + thriftProtocol = flag.String("thrift.protocol", "binary", "binary, compact, json, simplejson") + thriftBufferSize = flag.Int("thrift.buffer.size", 0, "0 for unbuffered") + thriftFramed = flag.Bool("thrift.framed", false, "true to enable framing") + zipkinAddr = flag.String("zipkin.addr", "", "Enable Zipkin tracing via a Zipkin HTTP Collector endpoint") + zipkinKafkaAddr = flag.String("zipkin.kafka.addr", "", "Enable Zipkin tracing via a Kafka server host:port") + appdashAddr = flag.String("appdash.addr", "", "Enable Appdash tracing via an Appdash server host:port") + lightstepToken = flag.String("lightstep.token", "", "Enable LightStep tracing via a LightStep access token") + ) + flag.Parse() + + // Logging domain. + var logger log.Logger + { + logger = log.NewLogfmtLogger(os.Stdout) + logger = log.With(logger, "ts", log.DefaultTimestampUTC) + logger = log.With(logger, "caller", log.DefaultCaller) + } + logger.Log("msg", "hello") + defer logger.Log("msg", "goodbye") + + // Metrics domain. + var ints, chars metrics.Counter + { + // Business level metrics. + ints = prometheus.NewCounterFrom(stdprometheus.CounterOpts{ + Namespace: "addsvc", + Name: "integers_summed", + Help: "Total count of integers summed via the Sum method.", + }, []string{}) + chars = prometheus.NewCounterFrom(stdprometheus.CounterOpts{ + Namespace: "addsvc", + Name: "characters_concatenated", + Help: "Total count of characters concatenated via the Concat method.", + }, []string{}) + } + var duration metrics.Histogram + { + // Transport level metrics. + duration = prometheus.NewSummaryFrom(stdprometheus.SummaryOpts{ + Namespace: "addsvc", + Name: "request_duration_ns", + Help: "Request duration in nanoseconds.", + }, []string{"method", "success"}) + } + + // Tracing domain. + var tracer stdopentracing.Tracer + { + if *zipkinAddr != "" { + logger := log.With(logger, "tracer", "ZipkinHTTP") + logger.Log("addr", *zipkinAddr) + + // endpoint typically looks like: http://zipkinhost:9411/api/v1/spans + collector, err := zipkin.NewHTTPCollector(*zipkinAddr) + if err != nil { + logger.Log("err", err) + os.Exit(1) + } + defer collector.Close() + + tracer, err = zipkin.NewTracer( + zipkin.NewRecorder(collector, false, "localhost:80", "addsvc"), + ) + if err != nil { + logger.Log("err", err) + os.Exit(1) + } + } else if *zipkinKafkaAddr != "" { + logger := log.With(logger, "tracer", "ZipkinKafka") + logger.Log("addr", *zipkinKafkaAddr) + + collector, err := zipkin.NewKafkaCollector( + strings.Split(*zipkinKafkaAddr, ","), + zipkin.KafkaLogger(log.NewNopLogger()), + ) + if err != nil { + logger.Log("err", err) + os.Exit(1) + } + defer collector.Close() + + tracer, err = zipkin.NewTracer( + zipkin.NewRecorder(collector, false, "localhost:80", "addsvc"), + ) + if err != nil { + logger.Log("err", err) + os.Exit(1) + } + } else if *appdashAddr != "" { + logger := log.With(logger, "tracer", "Appdash") + logger.Log("addr", *appdashAddr) + tracer = appdashot.NewTracer(appdash.NewRemoteCollector(*appdashAddr)) + } else if *lightstepToken != "" { + logger := log.With(logger, "tracer", "LightStep") + logger.Log() // probably don't want to print out the token :) + tracer = lightstep.NewTracer(lightstep.Options{ + AccessToken: *lightstepToken, + }) + defer lightstep.FlushLightStepTracer(tracer) + } else { + logger := log.With(logger, "tracer", "none") + logger.Log() + tracer = stdopentracing.GlobalTracer() // no-op + } + } + + // Business domain. + var service addsvc.Service + { + service = addsvc.NewBasicService() + service = addsvc.ServiceLoggingMiddleware(logger)(service) + service = addsvc.ServiceInstrumentingMiddleware(ints, chars)(service) + } + + // Endpoint domain. + var sumEndpoint endpoint.Endpoint + { + sumDuration := duration.With("method", "Sum") + sumLogger := log.With(logger, "method", "Sum") + + sumEndpoint = addsvc.MakeSumEndpoint(service) + sumEndpoint = opentracing.TraceServer(tracer, "Sum")(sumEndpoint) + sumEndpoint = addsvc.EndpointInstrumentingMiddleware(sumDuration)(sumEndpoint) + sumEndpoint = addsvc.EndpointLoggingMiddleware(sumLogger)(sumEndpoint) + } + var concatEndpoint endpoint.Endpoint + { + concatDuration := duration.With("method", "Concat") + concatLogger := log.With(logger, "method", "Concat") + + concatEndpoint = addsvc.MakeConcatEndpoint(service) + concatEndpoint = opentracing.TraceServer(tracer, "Concat")(concatEndpoint) + concatEndpoint = addsvc.EndpointInstrumentingMiddleware(concatDuration)(concatEndpoint) + concatEndpoint = addsvc.EndpointLoggingMiddleware(concatLogger)(concatEndpoint) + } + endpoints := addsvc.Endpoints{ + SumEndpoint: sumEndpoint, + ConcatEndpoint: concatEndpoint, + } + + // Mechanical domain. + errc := make(chan error) + ctx := context.Background() + + // Interrupt handler. + go func() { + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + errc <- fmt.Errorf("%s", <-c) + }() + + // Debug listener. + go func() { + logger := log.With(logger, "transport", "debug") + + m := http.NewServeMux() + m.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index)) + m.Handle("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline)) + m.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile)) + m.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol)) + m.Handle("/debug/pprof/trace", http.HandlerFunc(pprof.Trace)) + m.Handle("/metrics", stdprometheus.Handler()) + + logger.Log("addr", *debugAddr) + errc <- http.ListenAndServe(*debugAddr, m) + }() + + // HTTP transport. + go func() { + logger := log.With(logger, "transport", "HTTP") + h := addsvc.MakeHTTPHandler(endpoints, tracer, logger) + logger.Log("addr", *httpAddr) + errc <- http.ListenAndServe(*httpAddr, h) + }() + + // gRPC transport. + go func() { + logger := log.With(logger, "transport", "gRPC") + + ln, err := net.Listen("tcp", *grpcAddr) + if err != nil { + errc <- err + return + } + + srv := addsvc.MakeGRPCServer(endpoints, tracer, logger) + s := grpc.NewServer() + pb.RegisterAddServer(s, srv) + + logger.Log("addr", *grpcAddr) + errc <- s.Serve(ln) + }() + + // Thrift transport. + go func() { + logger := log.With(logger, "transport", "Thrift") + + var protocolFactory thrift.TProtocolFactory + switch *thriftProtocol { + case "binary": + protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() + case "compact": + protocolFactory = thrift.NewTCompactProtocolFactory() + case "json": + protocolFactory = thrift.NewTJSONProtocolFactory() + case "simplejson": + protocolFactory = thrift.NewTSimpleJSONProtocolFactory() + default: + errc <- fmt.Errorf("invalid Thrift protocol %q", *thriftProtocol) + return + } + + var transportFactory thrift.TTransportFactory + if *thriftBufferSize > 0 { + transportFactory = thrift.NewTBufferedTransportFactory(*thriftBufferSize) + } else { + transportFactory = thrift.NewTTransportFactory() + } + if *thriftFramed { + transportFactory = thrift.NewTFramedTransportFactory(transportFactory) + } + + transport, err := thrift.NewTServerSocket(*thriftAddr) + if err != nil { + errc <- err + return + } + + logger.Log("addr", *thriftAddr) + errc <- thrift.NewTSimpleServer4( + thriftadd.NewAddServiceProcessor(addsvc.MakeThriftHandler(ctx, endpoints)), + transport, + transportFactory, + protocolFactory, + ).Serve() + }() + + // Run! + logger.Log("exit", <-errc) +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/doc.go b/vendor/github.com/go-kit/kit/examples/addsvc/doc.go new file mode 100644 index 0000000..4dd8414 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/doc.go @@ -0,0 +1,5 @@ +// Package addsvc is an example microservice, useful for education. It can sum +// integers and concatenate strings. A client library is available in the client +// subdirectory. A server binary is available in cmd/addsrv. An example client +// binary is available in cmd/addcli. +package addsvc diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/endpoints.go b/vendor/github.com/go-kit/kit/examples/addsvc/endpoints.go new file mode 100644 index 0000000..1da33e4 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/endpoints.go @@ -0,0 +1,134 @@ +package addsvc + +// This file contains methods to make individual endpoints from services, +// request and response types to serve those endpoints, as well as encoders and +// decoders for those types, for all of our supported transport serialization +// formats. It also includes endpoint middlewares. + +import ( + "context" + "fmt" + "time" + + "github.com/go-kit/kit/endpoint" + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/metrics" +) + +// Endpoints collects all of the endpoints that compose an add service. It's +// meant to be used as a helper struct, to collect all of the endpoints into a +// single parameter. +// +// In a server, it's useful for functions that need to operate on a per-endpoint +// basis. For example, you might pass an Endpoints to a function that produces +// an http.Handler, with each method (endpoint) wired up to a specific path. (It +// is probably a mistake in design to invoke the Service methods on the +// Endpoints struct in a server.) +// +// In a client, it's useful to collect individually constructed endpoints into a +// single type that implements the Service interface. For example, you might +// construct individual endpoints using transport/http.NewClient, combine them +// into an Endpoints, and return it to the caller as a Service. +type Endpoints struct { + SumEndpoint endpoint.Endpoint + ConcatEndpoint endpoint.Endpoint +} + +// Sum implements Service. Primarily useful in a client. +func (e Endpoints) Sum(ctx context.Context, a, b int) (int, error) { + request := sumRequest{A: a, B: b} + response, err := e.SumEndpoint(ctx, request) + if err != nil { + return 0, err + } + return response.(sumResponse).V, response.(sumResponse).Err +} + +// Concat implements Service. Primarily useful in a client. +func (e Endpoints) Concat(ctx context.Context, a, b string) (string, error) { + request := concatRequest{A: a, B: b} + response, err := e.ConcatEndpoint(ctx, request) + if err != nil { + return "", err + } + return response.(concatResponse).V, response.(concatResponse).Err +} + +// MakeSumEndpoint returns an endpoint that invokes Sum on the service. +// Primarily useful in a server. +func MakeSumEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + sumReq := request.(sumRequest) + v, err := s.Sum(ctx, sumReq.A, sumReq.B) + if err == ErrIntOverflow { + return nil, err // special case; see comment on ErrIntOverflow + } + return sumResponse{ + V: v, + Err: err, + }, nil + } +} + +// MakeConcatEndpoint returns an endpoint that invokes Concat on the service. +// Primarily useful in a server. +func MakeConcatEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + concatReq := request.(concatRequest) + v, err := s.Concat(ctx, concatReq.A, concatReq.B) + return concatResponse{ + V: v, + Err: err, + }, nil + } +} + +// EndpointInstrumentingMiddleware returns an endpoint middleware that records +// the duration of each invocation to the passed histogram. The middleware adds +// a single field: "success", which is "true" if no error is returned, and +// "false" otherwise. +func EndpointInstrumentingMiddleware(duration metrics.Histogram) endpoint.Middleware { + return func(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + + defer func(begin time.Time) { + duration.With("success", fmt.Sprint(err == nil)).Observe(time.Since(begin).Seconds()) + }(time.Now()) + return next(ctx, request) + + } + } +} + +// EndpointLoggingMiddleware returns an endpoint middleware that logs the +// duration of each invocation, and the resulting error, if any. +func EndpointLoggingMiddleware(logger log.Logger) endpoint.Middleware { + return func(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + + defer func(begin time.Time) { + logger.Log("error", err, "took", time.Since(begin)) + }(time.Now()) + return next(ctx, request) + + } + } +} + +// These types are unexported because they only exist to serve the endpoint +// domain, which is totally encapsulated in this package. They are otherwise +// opaque to all callers. + +type sumRequest struct{ A, B int } + +type sumResponse struct { + V int + Err error +} + +type concatRequest struct{ A, B string } + +type concatResponse struct { + V string + Err error +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/pb/addsvc.pb.go b/vendor/github.com/go-kit/kit/examples/addsvc/pb/addsvc.pb.go new file mode 100644 index 0000000..a685eef --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/pb/addsvc.pb.go @@ -0,0 +1,215 @@ +// Code generated by protoc-gen-go. +// source: addsvc.proto +// DO NOT EDIT! + +/* +Package pb is a generated protocol buffer package. + +It is generated from these files: + addsvc.proto + +It has these top-level messages: + SumRequest + SumReply + ConcatRequest + ConcatReply +*/ +package pb + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The sum request contains two parameters. +type SumRequest struct { + A int64 `protobuf:"varint,1,opt,name=a" json:"a,omitempty"` + B int64 `protobuf:"varint,2,opt,name=b" json:"b,omitempty"` +} + +func (m *SumRequest) Reset() { *m = SumRequest{} } +func (m *SumRequest) String() string { return proto.CompactTextString(m) } +func (*SumRequest) ProtoMessage() {} +func (*SumRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// The sum response contains the result of the calculation. +type SumReply struct { + V int64 `protobuf:"varint,1,opt,name=v" json:"v,omitempty"` + Err string `protobuf:"bytes,2,opt,name=err" json:"err,omitempty"` +} + +func (m *SumReply) Reset() { *m = SumReply{} } +func (m *SumReply) String() string { return proto.CompactTextString(m) } +func (*SumReply) ProtoMessage() {} +func (*SumReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// The Concat request contains two parameters. +type ConcatRequest struct { + A string `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b" json:"b,omitempty"` +} + +func (m *ConcatRequest) Reset() { *m = ConcatRequest{} } +func (m *ConcatRequest) String() string { return proto.CompactTextString(m) } +func (*ConcatRequest) ProtoMessage() {} +func (*ConcatRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// The Concat response contains the result of the concatenation. +type ConcatReply struct { + V string `protobuf:"bytes,1,opt,name=v" json:"v,omitempty"` + Err string `protobuf:"bytes,2,opt,name=err" json:"err,omitempty"` +} + +func (m *ConcatReply) Reset() { *m = ConcatReply{} } +func (m *ConcatReply) String() string { return proto.CompactTextString(m) } +func (*ConcatReply) ProtoMessage() {} +func (*ConcatReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func init() { + proto.RegisterType((*SumRequest)(nil), "pb.SumRequest") + proto.RegisterType((*SumReply)(nil), "pb.SumReply") + proto.RegisterType((*ConcatRequest)(nil), "pb.ConcatRequest") + proto.RegisterType((*ConcatReply)(nil), "pb.ConcatReply") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Add service + +type AddClient interface { + // Sums two integers. + Sum(ctx context.Context, in *SumRequest, opts ...grpc.CallOption) (*SumReply, error) + // Concatenates two strings + Concat(ctx context.Context, in *ConcatRequest, opts ...grpc.CallOption) (*ConcatReply, error) +} + +type addClient struct { + cc *grpc.ClientConn +} + +func NewAddClient(cc *grpc.ClientConn) AddClient { + return &addClient{cc} +} + +func (c *addClient) Sum(ctx context.Context, in *SumRequest, opts ...grpc.CallOption) (*SumReply, error) { + out := new(SumReply) + err := grpc.Invoke(ctx, "/pb.Add/Sum", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *addClient) Concat(ctx context.Context, in *ConcatRequest, opts ...grpc.CallOption) (*ConcatReply, error) { + out := new(ConcatReply) + err := grpc.Invoke(ctx, "/pb.Add/Concat", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Add service + +type AddServer interface { + // Sums two integers. + Sum(context.Context, *SumRequest) (*SumReply, error) + // Concatenates two strings + Concat(context.Context, *ConcatRequest) (*ConcatReply, error) +} + +func RegisterAddServer(s *grpc.Server, srv AddServer) { + s.RegisterService(&_Add_serviceDesc, srv) +} + +func _Add_Sum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SumRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AddServer).Sum(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.Add/Sum", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AddServer).Sum(ctx, req.(*SumRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Add_Concat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConcatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AddServer).Concat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.Add/Concat", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AddServer).Concat(ctx, req.(*ConcatRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Add_serviceDesc = grpc.ServiceDesc{ + ServiceName: "pb.Add", + HandlerType: (*AddServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Sum", + Handler: _Add_Sum_Handler, + }, + { + MethodName: "Concat", + Handler: _Add_Concat_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "addsvc.proto", +} + +func init() { proto.RegisterFile("addsvc.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 189 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x49, 0x4c, 0x49, 0x29, + 0x2e, 0x4b, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2a, 0x48, 0x52, 0xd2, 0xe0, 0xe2, + 0x0a, 0x2e, 0xcd, 0x0d, 0x4a, 0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0x11, 0xe2, 0xe1, 0x62, 0x4c, 0x94, + 0x60, 0x54, 0x60, 0xd4, 0x60, 0x0e, 0x62, 0x4c, 0x04, 0xf1, 0x92, 0x24, 0x98, 0x20, 0xbc, 0x24, + 0x25, 0x2d, 0x2e, 0x0e, 0xb0, 0xca, 0x82, 0x9c, 0x4a, 0x90, 0x4c, 0x19, 0x4c, 0x5d, 0x99, 0x90, + 0x00, 0x17, 0x73, 0x6a, 0x51, 0x11, 0x58, 0x25, 0x67, 0x10, 0x88, 0xa9, 0xa4, 0xcd, 0xc5, 0xeb, + 0x9c, 0x9f, 0x97, 0x9c, 0x58, 0x82, 0x61, 0x30, 0x27, 0x8a, 0xc1, 0x9c, 0x20, 0x83, 0x75, 0xb9, + 0xb8, 0x61, 0x8a, 0x51, 0xcc, 0xe6, 0xc4, 0x6a, 0xb6, 0x51, 0x0c, 0x17, 0xb3, 0x63, 0x4a, 0x8a, + 0x90, 0x2a, 0x17, 0x73, 0x70, 0x69, 0xae, 0x10, 0x9f, 0x5e, 0x41, 0x92, 0x1e, 0xc2, 0x07, 0x52, + 0x3c, 0x70, 0x7e, 0x41, 0x4e, 0xa5, 0x12, 0x83, 0x90, 0x1e, 0x17, 0x1b, 0xc4, 0x70, 0x21, 0x41, + 0x90, 0x0c, 0x8a, 0xab, 0xa4, 0xf8, 0x91, 0x85, 0xc0, 0xea, 0x93, 0xd8, 0xc0, 0x41, 0x63, 0x0c, + 0x08, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x37, 0x81, 0x99, 0x2a, 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/pb/addsvc.proto b/vendor/github.com/go-kit/kit/examples/addsvc/pb/addsvc.proto new file mode 100644 index 0000000..cf61532 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/pb/addsvc.proto @@ -0,0 +1,36 @@ +syntax = "proto3"; + +package pb; + +// The Add service definition. +service Add { + // Sums two integers. + rpc Sum (SumRequest) returns (SumReply) {} + + // Concatenates two strings + rpc Concat (ConcatRequest) returns (ConcatReply) {} +} + +// The sum request contains two parameters. +message SumRequest { + int64 a = 1; + int64 b = 2; +} + +// The sum response contains the result of the calculation. +message SumReply { + int64 v = 1; + string err = 2; +} + +// The Concat request contains two parameters. +message ConcatRequest { + string a = 1; + string b = 2; +} + +// The Concat response contains the result of the concatenation. +message ConcatReply { + string v = 1; + string err = 2; +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/pb/compile.sh b/vendor/github.com/go-kit/kit/examples/addsvc/pb/compile.sh new file mode 100755 index 0000000..c026844 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/pb/compile.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env sh + +# Install proto3 from source +# brew install autoconf automake libtool +# git clone https://github.com/google/protobuf +# ./autogen.sh ; ./configure ; make ; make install +# +# Update protoc Go bindings via +# go get -u github.com/golang/protobuf/{proto,protoc-gen-go} +# +# See also +# https://github.com/grpc/grpc-go/tree/master/examples + +protoc addsvc.proto --go_out=plugins=grpc:. diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/service.go b/vendor/github.com/go-kit/kit/examples/addsvc/service.go new file mode 100644 index 0000000..971590c --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/service.go @@ -0,0 +1,163 @@ +package addsvc + +// This file contains the Service definition, and a basic service +// implementation. It also includes service middlewares. + +import ( + "context" + "errors" + "time" + + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/metrics" +) + +// Service describes a service that adds things together. +type Service interface { + Sum(ctx context.Context, a, b int) (int, error) + Concat(ctx context.Context, a, b string) (string, error) +} + +// Business-domain errors like these may be served in two ways: returned +// directly by endpoints, or bundled into the response struct. Both methods can +// be made to work, but errors returned directly by endpoints are counted by +// middlewares that check errors, like circuit breakers. +// +// If you don't want that behavior -- and you probably don't -- then it's better +// to bundle errors into the response struct. + +var ( + // ErrTwoZeroes is an arbitrary business rule for the Add method. + ErrTwoZeroes = errors.New("can't sum two zeroes") + + // ErrIntOverflow protects the Add method. We've decided that this error + // indicates a misbehaving service and should count against e.g. circuit + // breakers. So, we return it directly in endpoints, to illustrate the + // difference. In a real service, this probably wouldn't be the case. + ErrIntOverflow = errors.New("integer overflow") + + // ErrMaxSizeExceeded protects the Concat method. + ErrMaxSizeExceeded = errors.New("result exceeds maximum size") +) + +// These annoying helper functions are required to translate Go error types to +// and from strings, which is the type we use in our IDLs to represent errors. +// There is special casing to treat empty strings as nil errors. + +func str2err(s string) error { + if s == "" { + return nil + } + return errors.New(s) +} + +func err2str(err error) string { + if err == nil { + return "" + } + return err.Error() +} + +// NewBasicService returns a naïve, stateless implementation of Service. +func NewBasicService() Service { + return basicService{} +} + +type basicService struct{} + +const ( + intMax = 1<<31 - 1 + intMin = -(intMax + 1) + maxLen = 102400 +) + +// Sum implements Service. +func (s basicService) Sum(_ context.Context, a, b int) (int, error) { + if a == 0 && b == 0 { + return 0, ErrTwoZeroes + } + if (b > 0 && a > (intMax-b)) || (b < 0 && a < (intMin-b)) { + return 0, ErrIntOverflow + } + return a + b, nil +} + +// Concat implements Service. +func (s basicService) Concat(_ context.Context, a, b string) (string, error) { + if len(a)+len(b) > maxLen { + return "", ErrMaxSizeExceeded + } + return a + b, nil +} + +// Middleware describes a service (as opposed to endpoint) middleware. +type Middleware func(Service) Service + +// ServiceLoggingMiddleware returns a service middleware that logs the +// parameters and result of each method invocation. +func ServiceLoggingMiddleware(logger log.Logger) Middleware { + return func(next Service) Service { + return serviceLoggingMiddleware{ + logger: logger, + next: next, + } + } +} + +type serviceLoggingMiddleware struct { + logger log.Logger + next Service +} + +func (mw serviceLoggingMiddleware) Sum(ctx context.Context, a, b int) (v int, err error) { + defer func(begin time.Time) { + mw.logger.Log( + "method", "Sum", + "a", a, "b", b, "result", v, "error", err, + "took", time.Since(begin), + ) + }(time.Now()) + return mw.next.Sum(ctx, a, b) +} + +func (mw serviceLoggingMiddleware) Concat(ctx context.Context, a, b string) (v string, err error) { + defer func(begin time.Time) { + mw.logger.Log( + "method", "Concat", + "a", a, "b", b, "result", v, "error", err, + "took", time.Since(begin), + ) + }(time.Now()) + return mw.next.Concat(ctx, a, b) +} + +// ServiceInstrumentingMiddleware returns a service middleware that instruments +// the number of integers summed and characters concatenated over the lifetime of +// the service. +func ServiceInstrumentingMiddleware(ints, chars metrics.Counter) Middleware { + return func(next Service) Service { + return serviceInstrumentingMiddleware{ + ints: ints, + chars: chars, + next: next, + } + } +} + +type serviceInstrumentingMiddleware struct { + ints metrics.Counter + chars metrics.Counter + next Service +} + +func (mw serviceInstrumentingMiddleware) Sum(ctx context.Context, a, b int) (int, error) { + v, err := mw.next.Sum(ctx, a, b) + mw.ints.Add(float64(v)) + return v, err +} + +func (mw serviceInstrumentingMiddleware) Concat(ctx context.Context, a, b string) (string, error) { + v, err := mw.next.Concat(ctx, a, b) + mw.chars.Add(float64(len(v))) + return v, err +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/thrift/addsvc.thrift b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/addsvc.thrift new file mode 100644 index 0000000..e67ce1b --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/addsvc.thrift @@ -0,0 +1,14 @@ +struct SumReply { + 1: i64 value + 2: string err +} + +struct ConcatReply { + 1: string value + 2: string err +} + +service AddService { + SumReply Sum(1: i64 a, 2: i64 b) + ConcatReply Concat(1: string a, 2: string b) +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/thrift/compile.sh b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/compile.sh new file mode 100755 index 0000000..2ecce5b --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/compile.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env sh + +# See also https://thrift.apache.org/tutorial/go + +thrift -r --gen "go:package_prefix=github.com/go-kit/kit/examples/addsvc/thrift/gen-go/,thrift_import=github.com/apache/thrift/lib/go/thrift" addsvc.thrift diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/add_service-remote/add_service-remote.go b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/add_service-remote/add_service-remote.go new file mode 100755 index 0000000..b8ce67c --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/add_service-remote/add_service-remote.go @@ -0,0 +1,157 @@ +// Autogenerated by Thrift Compiler (0.9.3) +// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + +package main + +import ( + "flag" + "fmt" + "github.com/apache/thrift/lib/go/thrift" + "github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc" + "math" + "net" + "net/url" + "os" + "strconv" + "strings" +) + +func Usage() { + fmt.Fprintln(os.Stderr, "Usage of ", os.Args[0], " [-h host:port] [-u url] [-f[ramed]] function [arg1 [arg2...]]:") + flag.PrintDefaults() + fmt.Fprintln(os.Stderr, "\nFunctions:") + fmt.Fprintln(os.Stderr, " SumReply Sum(i64 a, i64 b)") + fmt.Fprintln(os.Stderr, " ConcatReply Concat(string a, string b)") + fmt.Fprintln(os.Stderr) + os.Exit(0) +} + +func main() { + flag.Usage = Usage + var host string + var port int + var protocol string + var urlString string + var framed bool + var useHttp bool + var parsedUrl url.URL + var trans thrift.TTransport + _ = strconv.Atoi + _ = math.Abs + flag.Usage = Usage + flag.StringVar(&host, "h", "localhost", "Specify host and port") + flag.IntVar(&port, "p", 9090, "Specify port") + flag.StringVar(&protocol, "P", "binary", "Specify the protocol (binary, compact, simplejson, json)") + flag.StringVar(&urlString, "u", "", "Specify the url") + flag.BoolVar(&framed, "framed", false, "Use framed transport") + flag.BoolVar(&useHttp, "http", false, "Use http") + flag.Parse() + + if len(urlString) > 0 { + parsedUrl, err := url.Parse(urlString) + if err != nil { + fmt.Fprintln(os.Stderr, "Error parsing URL: ", err) + flag.Usage() + } + host = parsedUrl.Host + useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == "http" + } else if useHttp { + _, err := url.Parse(fmt.Sprint("http://", host, ":", port)) + if err != nil { + fmt.Fprintln(os.Stderr, "Error parsing URL: ", err) + flag.Usage() + } + } + + cmd := flag.Arg(0) + var err error + if useHttp { + trans, err = thrift.NewTHttpClient(parsedUrl.String()) + } else { + portStr := fmt.Sprint(port) + if strings.Contains(host, ":") { + host, portStr, err = net.SplitHostPort(host) + if err != nil { + fmt.Fprintln(os.Stderr, "error with host:", err) + os.Exit(1) + } + } + trans, err = thrift.NewTSocket(net.JoinHostPort(host, portStr)) + if err != nil { + fmt.Fprintln(os.Stderr, "error resolving address:", err) + os.Exit(1) + } + if framed { + trans = thrift.NewTFramedTransport(trans) + } + } + if err != nil { + fmt.Fprintln(os.Stderr, "Error creating transport", err) + os.Exit(1) + } + defer trans.Close() + var protocolFactory thrift.TProtocolFactory + switch protocol { + case "compact": + protocolFactory = thrift.NewTCompactProtocolFactory() + break + case "simplejson": + protocolFactory = thrift.NewTSimpleJSONProtocolFactory() + break + case "json": + protocolFactory = thrift.NewTJSONProtocolFactory() + break + case "binary", "": + protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() + break + default: + fmt.Fprintln(os.Stderr, "Invalid protocol specified: ", protocol) + Usage() + os.Exit(1) + } + client := addsvc.NewAddServiceClientFactory(trans, protocolFactory) + if err := trans.Open(); err != nil { + fmt.Fprintln(os.Stderr, "Error opening socket to ", host, ":", port, " ", err) + os.Exit(1) + } + + switch cmd { + case "Sum": + if flag.NArg()-1 != 2 { + fmt.Fprintln(os.Stderr, "Sum requires 2 args") + flag.Usage() + } + argvalue0, err6 := (strconv.ParseInt(flag.Arg(1), 10, 64)) + if err6 != nil { + Usage() + return + } + value0 := argvalue0 + argvalue1, err7 := (strconv.ParseInt(flag.Arg(2), 10, 64)) + if err7 != nil { + Usage() + return + } + value1 := argvalue1 + fmt.Print(client.Sum(value0, value1)) + fmt.Print("\n") + break + case "Concat": + if flag.NArg()-1 != 2 { + fmt.Fprintln(os.Stderr, "Concat requires 2 args") + flag.Usage() + } + argvalue0 := flag.Arg(1) + value0 := argvalue0 + argvalue1 := flag.Arg(2) + value1 := argvalue1 + fmt.Print(client.Concat(value0, value1)) + fmt.Print("\n") + break + case "": + Usage() + break + default: + fmt.Fprintln(os.Stderr, "Invalid function ", cmd) + } +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/addservice.go b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/addservice.go new file mode 100644 index 0000000..3f3aeeb --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/addservice.go @@ -0,0 +1,807 @@ +// Autogenerated by Thrift Compiler (0.9.3) +// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + +package addsvc + +import ( + "bytes" + "fmt" + "github.com/apache/thrift/lib/go/thrift" +) + +// (needed to ensure safety because of naive import list construction.) +var _ = thrift.ZERO +var _ = fmt.Printf +var _ = bytes.Equal + +type AddService interface { + // Parameters: + // - A + // - B + Sum(a int64, b int64) (r *SumReply, err error) + // Parameters: + // - A + // - B + Concat(a string, b string) (r *ConcatReply, err error) +} + +type AddServiceClient struct { + Transport thrift.TTransport + ProtocolFactory thrift.TProtocolFactory + InputProtocol thrift.TProtocol + OutputProtocol thrift.TProtocol + SeqId int32 +} + +func NewAddServiceClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *AddServiceClient { + return &AddServiceClient{Transport: t, + ProtocolFactory: f, + InputProtocol: f.GetProtocol(t), + OutputProtocol: f.GetProtocol(t), + SeqId: 0, + } +} + +func NewAddServiceClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *AddServiceClient { + return &AddServiceClient{Transport: t, + ProtocolFactory: nil, + InputProtocol: iprot, + OutputProtocol: oprot, + SeqId: 0, + } +} + +// Parameters: +// - A +// - B +func (p *AddServiceClient) Sum(a int64, b int64) (r *SumReply, err error) { + if err = p.sendSum(a, b); err != nil { + return + } + return p.recvSum() +} + +func (p *AddServiceClient) sendSum(a int64, b int64) (err error) { + oprot := p.OutputProtocol + if oprot == nil { + oprot = p.ProtocolFactory.GetProtocol(p.Transport) + p.OutputProtocol = oprot + } + p.SeqId++ + if err = oprot.WriteMessageBegin("Sum", thrift.CALL, p.SeqId); err != nil { + return + } + args := AddServiceSumArgs{ + A: a, + B: b, + } + if err = args.Write(oprot); err != nil { + return + } + if err = oprot.WriteMessageEnd(); err != nil { + return + } + return oprot.Flush() +} + +func (p *AddServiceClient) recvSum() (value *SumReply, err error) { + iprot := p.InputProtocol + if iprot == nil { + iprot = p.ProtocolFactory.GetProtocol(p.Transport) + p.InputProtocol = iprot + } + method, mTypeId, seqId, err := iprot.ReadMessageBegin() + if err != nil { + return + } + if method != "Sum" { + err = thrift.NewTApplicationException(thrift.WRONG_METHOD_NAME, "Sum failed: wrong method name") + return + } + if p.SeqId != seqId { + err = thrift.NewTApplicationException(thrift.BAD_SEQUENCE_ID, "Sum failed: out of sequence response") + return + } + if mTypeId == thrift.EXCEPTION { + error0 := thrift.NewTApplicationException(thrift.UNKNOWN_APPLICATION_EXCEPTION, "Unknown Exception") + var error1 error + error1, err = error0.Read(iprot) + if err != nil { + return + } + if err = iprot.ReadMessageEnd(); err != nil { + return + } + err = error1 + return + } + if mTypeId != thrift.REPLY { + err = thrift.NewTApplicationException(thrift.INVALID_MESSAGE_TYPE_EXCEPTION, "Sum failed: invalid message type") + return + } + result := AddServiceSumResult{} + if err = result.Read(iprot); err != nil { + return + } + if err = iprot.ReadMessageEnd(); err != nil { + return + } + value = result.GetSuccess() + return +} + +// Parameters: +// - A +// - B +func (p *AddServiceClient) Concat(a string, b string) (r *ConcatReply, err error) { + if err = p.sendConcat(a, b); err != nil { + return + } + return p.recvConcat() +} + +func (p *AddServiceClient) sendConcat(a string, b string) (err error) { + oprot := p.OutputProtocol + if oprot == nil { + oprot = p.ProtocolFactory.GetProtocol(p.Transport) + p.OutputProtocol = oprot + } + p.SeqId++ + if err = oprot.WriteMessageBegin("Concat", thrift.CALL, p.SeqId); err != nil { + return + } + args := AddServiceConcatArgs{ + A: a, + B: b, + } + if err = args.Write(oprot); err != nil { + return + } + if err = oprot.WriteMessageEnd(); err != nil { + return + } + return oprot.Flush() +} + +func (p *AddServiceClient) recvConcat() (value *ConcatReply, err error) { + iprot := p.InputProtocol + if iprot == nil { + iprot = p.ProtocolFactory.GetProtocol(p.Transport) + p.InputProtocol = iprot + } + method, mTypeId, seqId, err := iprot.ReadMessageBegin() + if err != nil { + return + } + if method != "Concat" { + err = thrift.NewTApplicationException(thrift.WRONG_METHOD_NAME, "Concat failed: wrong method name") + return + } + if p.SeqId != seqId { + err = thrift.NewTApplicationException(thrift.BAD_SEQUENCE_ID, "Concat failed: out of sequence response") + return + } + if mTypeId == thrift.EXCEPTION { + error2 := thrift.NewTApplicationException(thrift.UNKNOWN_APPLICATION_EXCEPTION, "Unknown Exception") + var error3 error + error3, err = error2.Read(iprot) + if err != nil { + return + } + if err = iprot.ReadMessageEnd(); err != nil { + return + } + err = error3 + return + } + if mTypeId != thrift.REPLY { + err = thrift.NewTApplicationException(thrift.INVALID_MESSAGE_TYPE_EXCEPTION, "Concat failed: invalid message type") + return + } + result := AddServiceConcatResult{} + if err = result.Read(iprot); err != nil { + return + } + if err = iprot.ReadMessageEnd(); err != nil { + return + } + value = result.GetSuccess() + return +} + +type AddServiceProcessor struct { + processorMap map[string]thrift.TProcessorFunction + handler AddService +} + +func (p *AddServiceProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { + p.processorMap[key] = processor +} + +func (p *AddServiceProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { + processor, ok = p.processorMap[key] + return processor, ok +} + +func (p *AddServiceProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { + return p.processorMap +} + +func NewAddServiceProcessor(handler AddService) *AddServiceProcessor { + + self4 := &AddServiceProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} + self4.processorMap["Sum"] = &addServiceProcessorSum{handler: handler} + self4.processorMap["Concat"] = &addServiceProcessorConcat{handler: handler} + return self4 +} + +func (p *AddServiceProcessor) Process(iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + name, _, seqId, err := iprot.ReadMessageBegin() + if err != nil { + return false, err + } + if processor, ok := p.GetProcessorFunction(name); ok { + return processor.Process(seqId, iprot, oprot) + } + iprot.Skip(thrift.STRUCT) + iprot.ReadMessageEnd() + x5 := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function "+name) + oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId) + x5.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush() + return false, x5 + +} + +type addServiceProcessorSum struct { + handler AddService +} + +func (p *addServiceProcessorSum) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + args := AddServiceSumArgs{} + if err = args.Read(iprot); err != nil { + iprot.ReadMessageEnd() + x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) + oprot.WriteMessageBegin("Sum", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush() + return false, err + } + + iprot.ReadMessageEnd() + result := AddServiceSumResult{} + var retval *SumReply + var err2 error + if retval, err2 = p.handler.Sum(args.A, args.B); err2 != nil { + x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing Sum: "+err2.Error()) + oprot.WriteMessageBegin("Sum", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush() + return true, err2 + } else { + result.Success = retval + } + if err2 = oprot.WriteMessageBegin("Sum", thrift.REPLY, seqId); err2 != nil { + err = err2 + } + if err2 = result.Write(oprot); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.Flush(); err == nil && err2 != nil { + err = err2 + } + if err != nil { + return + } + return true, err +} + +type addServiceProcessorConcat struct { + handler AddService +} + +func (p *addServiceProcessorConcat) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + args := AddServiceConcatArgs{} + if err = args.Read(iprot); err != nil { + iprot.ReadMessageEnd() + x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) + oprot.WriteMessageBegin("Concat", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush() + return false, err + } + + iprot.ReadMessageEnd() + result := AddServiceConcatResult{} + var retval *ConcatReply + var err2 error + if retval, err2 = p.handler.Concat(args.A, args.B); err2 != nil { + x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing Concat: "+err2.Error()) + oprot.WriteMessageBegin("Concat", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush() + return true, err2 + } else { + result.Success = retval + } + if err2 = oprot.WriteMessageBegin("Concat", thrift.REPLY, seqId); err2 != nil { + err = err2 + } + if err2 = result.Write(oprot); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.Flush(); err == nil && err2 != nil { + err = err2 + } + if err != nil { + return + } + return true, err +} + +// HELPER FUNCTIONS AND STRUCTURES + +// Attributes: +// - A +// - B +type AddServiceSumArgs struct { + A int64 `thrift:"a,1" json:"a"` + B int64 `thrift:"b,2" json:"b"` +} + +func NewAddServiceSumArgs() *AddServiceSumArgs { + return &AddServiceSumArgs{} +} + +func (p *AddServiceSumArgs) GetA() int64 { + return p.A +} + +func (p *AddServiceSumArgs) GetB() int64 { + return p.B +} +func (p *AddServiceSumArgs) Read(iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if err := p.readField1(iprot); err != nil { + return err + } + case 2: + if err := p.readField2(iprot); err != nil { + return err + } + default: + if err := iprot.Skip(fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *AddServiceSumArgs) readField1(iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + p.A = v + } + return nil +} + +func (p *AddServiceSumArgs) readField2(iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(); err != nil { + return thrift.PrependError("error reading field 2: ", err) + } else { + p.B = v + } + return nil +} + +func (p *AddServiceSumArgs) Write(oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin("Sum_args"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if err := p.writeField1(oprot); err != nil { + return err + } + if err := p.writeField2(oprot); err != nil { + return err + } + if err := oprot.WriteFieldStop(); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *AddServiceSumArgs) writeField1(oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin("a", thrift.I64, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:a: ", p), err) + } + if err := oprot.WriteI64(int64(p.A)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.a (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:a: ", p), err) + } + return err +} + +func (p *AddServiceSumArgs) writeField2(oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin("b", thrift.I64, 2); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:b: ", p), err) + } + if err := oprot.WriteI64(int64(p.B)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.b (2) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 2:b: ", p), err) + } + return err +} + +func (p *AddServiceSumArgs) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("AddServiceSumArgs(%+v)", *p) +} + +// Attributes: +// - Success +type AddServiceSumResult struct { + Success *SumReply `thrift:"success,0" json:"success,omitempty"` +} + +func NewAddServiceSumResult() *AddServiceSumResult { + return &AddServiceSumResult{} +} + +var AddServiceSumResult_Success_DEFAULT *SumReply + +func (p *AddServiceSumResult) GetSuccess() *SumReply { + if !p.IsSetSuccess() { + return AddServiceSumResult_Success_DEFAULT + } + return p.Success +} +func (p *AddServiceSumResult) IsSetSuccess() bool { + return p.Success != nil +} + +func (p *AddServiceSumResult) Read(iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 0: + if err := p.readField0(iprot); err != nil { + return err + } + default: + if err := iprot.Skip(fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *AddServiceSumResult) readField0(iprot thrift.TProtocol) error { + p.Success = &SumReply{} + if err := p.Success.Read(iprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Success), err) + } + return nil +} + +func (p *AddServiceSumResult) Write(oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin("Sum_result"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if err := p.writeField0(oprot); err != nil { + return err + } + if err := oprot.WriteFieldStop(); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *AddServiceSumResult) writeField0(oprot thrift.TProtocol) (err error) { + if p.IsSetSuccess() { + if err := oprot.WriteFieldBegin("success", thrift.STRUCT, 0); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 0:success: ", p), err) + } + if err := p.Success.Write(oprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Success), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 0:success: ", p), err) + } + } + return err +} + +func (p *AddServiceSumResult) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("AddServiceSumResult(%+v)", *p) +} + +// Attributes: +// - A +// - B +type AddServiceConcatArgs struct { + A string `thrift:"a,1" json:"a"` + B string `thrift:"b,2" json:"b"` +} + +func NewAddServiceConcatArgs() *AddServiceConcatArgs { + return &AddServiceConcatArgs{} +} + +func (p *AddServiceConcatArgs) GetA() string { + return p.A +} + +func (p *AddServiceConcatArgs) GetB() string { + return p.B +} +func (p *AddServiceConcatArgs) Read(iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if err := p.readField1(iprot); err != nil { + return err + } + case 2: + if err := p.readField2(iprot); err != nil { + return err + } + default: + if err := iprot.Skip(fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *AddServiceConcatArgs) readField1(iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + p.A = v + } + return nil +} + +func (p *AddServiceConcatArgs) readField2(iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(); err != nil { + return thrift.PrependError("error reading field 2: ", err) + } else { + p.B = v + } + return nil +} + +func (p *AddServiceConcatArgs) Write(oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin("Concat_args"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if err := p.writeField1(oprot); err != nil { + return err + } + if err := p.writeField2(oprot); err != nil { + return err + } + if err := oprot.WriteFieldStop(); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *AddServiceConcatArgs) writeField1(oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin("a", thrift.STRING, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:a: ", p), err) + } + if err := oprot.WriteString(string(p.A)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.a (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:a: ", p), err) + } + return err +} + +func (p *AddServiceConcatArgs) writeField2(oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin("b", thrift.STRING, 2); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:b: ", p), err) + } + if err := oprot.WriteString(string(p.B)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.b (2) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 2:b: ", p), err) + } + return err +} + +func (p *AddServiceConcatArgs) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("AddServiceConcatArgs(%+v)", *p) +} + +// Attributes: +// - Success +type AddServiceConcatResult struct { + Success *ConcatReply `thrift:"success,0" json:"success,omitempty"` +} + +func NewAddServiceConcatResult() *AddServiceConcatResult { + return &AddServiceConcatResult{} +} + +var AddServiceConcatResult_Success_DEFAULT *ConcatReply + +func (p *AddServiceConcatResult) GetSuccess() *ConcatReply { + if !p.IsSetSuccess() { + return AddServiceConcatResult_Success_DEFAULT + } + return p.Success +} +func (p *AddServiceConcatResult) IsSetSuccess() bool { + return p.Success != nil +} + +func (p *AddServiceConcatResult) Read(iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 0: + if err := p.readField0(iprot); err != nil { + return err + } + default: + if err := iprot.Skip(fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *AddServiceConcatResult) readField0(iprot thrift.TProtocol) error { + p.Success = &ConcatReply{} + if err := p.Success.Read(iprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Success), err) + } + return nil +} + +func (p *AddServiceConcatResult) Write(oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin("Concat_result"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if err := p.writeField0(oprot); err != nil { + return err + } + if err := oprot.WriteFieldStop(); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *AddServiceConcatResult) writeField0(oprot thrift.TProtocol) (err error) { + if p.IsSetSuccess() { + if err := oprot.WriteFieldBegin("success", thrift.STRUCT, 0); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 0:success: ", p), err) + } + if err := p.Success.Write(oprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Success), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 0:success: ", p), err) + } + } + return err +} + +func (p *AddServiceConcatResult) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("AddServiceConcatResult(%+v)", *p) +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/constants.go b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/constants.go new file mode 100644 index 0000000..2f0079a --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/constants.go @@ -0,0 +1,18 @@ +// Autogenerated by Thrift Compiler (0.9.3) +// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + +package addsvc + +import ( + "bytes" + "fmt" + "github.com/apache/thrift/lib/go/thrift" +) + +// (needed to ensure safety because of naive import list construction.) +var _ = thrift.ZERO +var _ = fmt.Printf +var _ = bytes.Equal + +func init() { +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/ttypes.go b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/ttypes.go new file mode 100644 index 0000000..2fcbd55 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc/ttypes.go @@ -0,0 +1,269 @@ +// Autogenerated by Thrift Compiler (0.9.3) +// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + +package addsvc + +import ( + "bytes" + "fmt" + "github.com/apache/thrift/lib/go/thrift" +) + +// (needed to ensure safety because of naive import list construction.) +var _ = thrift.ZERO +var _ = fmt.Printf +var _ = bytes.Equal + +var GoUnusedProtection__ int + +// Attributes: +// - Value +// - Err +type SumReply struct { + Value int64 `thrift:"value,1" json:"value"` + Err string `thrift:"err,2" json:"err"` +} + +func NewSumReply() *SumReply { + return &SumReply{} +} + +func (p *SumReply) GetValue() int64 { + return p.Value +} + +func (p *SumReply) GetErr() string { + return p.Err +} +func (p *SumReply) Read(iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if err := p.readField1(iprot); err != nil { + return err + } + case 2: + if err := p.readField2(iprot); err != nil { + return err + } + default: + if err := iprot.Skip(fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *SumReply) readField1(iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + p.Value = v + } + return nil +} + +func (p *SumReply) readField2(iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(); err != nil { + return thrift.PrependError("error reading field 2: ", err) + } else { + p.Err = v + } + return nil +} + +func (p *SumReply) Write(oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin("SumReply"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if err := p.writeField1(oprot); err != nil { + return err + } + if err := p.writeField2(oprot); err != nil { + return err + } + if err := oprot.WriteFieldStop(); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *SumReply) writeField1(oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin("value", thrift.I64, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:value: ", p), err) + } + if err := oprot.WriteI64(int64(p.Value)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.value (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:value: ", p), err) + } + return err +} + +func (p *SumReply) writeField2(oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin("err", thrift.STRING, 2); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:err: ", p), err) + } + if err := oprot.WriteString(string(p.Err)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.err (2) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 2:err: ", p), err) + } + return err +} + +func (p *SumReply) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("SumReply(%+v)", *p) +} + +// Attributes: +// - Value +// - Err +type ConcatReply struct { + Value string `thrift:"value,1" json:"value"` + Err string `thrift:"err,2" json:"err"` +} + +func NewConcatReply() *ConcatReply { + return &ConcatReply{} +} + +func (p *ConcatReply) GetValue() string { + return p.Value +} + +func (p *ConcatReply) GetErr() string { + return p.Err +} +func (p *ConcatReply) Read(iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if err := p.readField1(iprot); err != nil { + return err + } + case 2: + if err := p.readField2(iprot); err != nil { + return err + } + default: + if err := iprot.Skip(fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *ConcatReply) readField1(iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + p.Value = v + } + return nil +} + +func (p *ConcatReply) readField2(iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(); err != nil { + return thrift.PrependError("error reading field 2: ", err) + } else { + p.Err = v + } + return nil +} + +func (p *ConcatReply) Write(oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin("ConcatReply"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if err := p.writeField1(oprot); err != nil { + return err + } + if err := p.writeField2(oprot); err != nil { + return err + } + if err := oprot.WriteFieldStop(); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *ConcatReply) writeField1(oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin("value", thrift.STRING, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:value: ", p), err) + } + if err := oprot.WriteString(string(p.Value)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.value (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:value: ", p), err) + } + return err +} + +func (p *ConcatReply) writeField2(oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin("err", thrift.STRING, 2); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:err: ", p), err) + } + if err := oprot.WriteString(string(p.Err)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.err (2) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 2:err: ", p), err) + } + return err +} + +func (p *ConcatReply) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("ConcatReply(%+v)", *p) +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/transport_grpc.go b/vendor/github.com/go-kit/kit/examples/addsvc/transport_grpc.go new file mode 100644 index 0000000..dcfc03a --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/transport_grpc.go @@ -0,0 +1,118 @@ +package addsvc + +// This file provides server-side bindings for the gRPC transport. +// It utilizes the transport/grpc.Server. + +import ( + "context" + + stdopentracing "github.com/opentracing/opentracing-go" + oldcontext "golang.org/x/net/context" + + "github.com/go-kit/kit/examples/addsvc/pb" + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/tracing/opentracing" + grpctransport "github.com/go-kit/kit/transport/grpc" +) + +// MakeGRPCServer makes a set of endpoints available as a gRPC AddServer. +func MakeGRPCServer(endpoints Endpoints, tracer stdopentracing.Tracer, logger log.Logger) pb.AddServer { + options := []grpctransport.ServerOption{ + grpctransport.ServerErrorLogger(logger), + } + return &grpcServer{ + sum: grpctransport.NewServer( + endpoints.SumEndpoint, + DecodeGRPCSumRequest, + EncodeGRPCSumResponse, + append(options, grpctransport.ServerBefore(opentracing.FromGRPCRequest(tracer, "Sum", logger)))..., + ), + concat: grpctransport.NewServer( + endpoints.ConcatEndpoint, + DecodeGRPCConcatRequest, + EncodeGRPCConcatResponse, + append(options, grpctransport.ServerBefore(opentracing.FromGRPCRequest(tracer, "Concat", logger)))..., + ), + } +} + +type grpcServer struct { + sum grpctransport.Handler + concat grpctransport.Handler +} + +func (s *grpcServer) Sum(ctx oldcontext.Context, req *pb.SumRequest) (*pb.SumReply, error) { + _, rep, err := s.sum.ServeGRPC(ctx, req) + if err != nil { + return nil, err + } + return rep.(*pb.SumReply), nil +} + +func (s *grpcServer) Concat(ctx oldcontext.Context, req *pb.ConcatRequest) (*pb.ConcatReply, error) { + _, rep, err := s.concat.ServeGRPC(ctx, req) + if err != nil { + return nil, err + } + return rep.(*pb.ConcatReply), nil +} + +// DecodeGRPCSumRequest is a transport/grpc.DecodeRequestFunc that converts a +// gRPC sum request to a user-domain sum request. Primarily useful in a server. +func DecodeGRPCSumRequest(_ context.Context, grpcReq interface{}) (interface{}, error) { + req := grpcReq.(*pb.SumRequest) + return sumRequest{A: int(req.A), B: int(req.B)}, nil +} + +// DecodeGRPCConcatRequest is a transport/grpc.DecodeRequestFunc that converts a +// gRPC concat request to a user-domain concat request. Primarily useful in a +// server. +func DecodeGRPCConcatRequest(_ context.Context, grpcReq interface{}) (interface{}, error) { + req := grpcReq.(*pb.ConcatRequest) + return concatRequest{A: req.A, B: req.B}, nil +} + +// DecodeGRPCSumResponse is a transport/grpc.DecodeResponseFunc that converts a +// gRPC sum reply to a user-domain sum response. Primarily useful in a client. +func DecodeGRPCSumResponse(_ context.Context, grpcReply interface{}) (interface{}, error) { + reply := grpcReply.(*pb.SumReply) + return sumResponse{V: int(reply.V), Err: str2err(reply.Err)}, nil +} + +// DecodeGRPCConcatResponse is a transport/grpc.DecodeResponseFunc that converts +// a gRPC concat reply to a user-domain concat response. Primarily useful in a +// client. +func DecodeGRPCConcatResponse(_ context.Context, grpcReply interface{}) (interface{}, error) { + reply := grpcReply.(*pb.ConcatReply) + return concatResponse{V: reply.V, Err: str2err(reply.Err)}, nil +} + +// EncodeGRPCSumResponse is a transport/grpc.EncodeResponseFunc that converts a +// user-domain sum response to a gRPC sum reply. Primarily useful in a server. +func EncodeGRPCSumResponse(_ context.Context, response interface{}) (interface{}, error) { + resp := response.(sumResponse) + return &pb.SumReply{V: int64(resp.V), Err: err2str(resp.Err)}, nil +} + +// EncodeGRPCConcatResponse is a transport/grpc.EncodeResponseFunc that converts +// a user-domain concat response to a gRPC concat reply. Primarily useful in a +// server. +func EncodeGRPCConcatResponse(_ context.Context, response interface{}) (interface{}, error) { + resp := response.(concatResponse) + return &pb.ConcatReply{V: resp.V, Err: err2str(resp.Err)}, nil +} + +// EncodeGRPCSumRequest is a transport/grpc.EncodeRequestFunc that converts a +// user-domain sum request to a gRPC sum request. Primarily useful in a client. +func EncodeGRPCSumRequest(_ context.Context, request interface{}) (interface{}, error) { + req := request.(sumRequest) + return &pb.SumRequest{A: int64(req.A), B: int64(req.B)}, nil +} + +// EncodeGRPCConcatRequest is a transport/grpc.EncodeRequestFunc that converts a +// user-domain concat request to a gRPC concat request. Primarily useful in a +// client. +func EncodeGRPCConcatRequest(_ context.Context, request interface{}) (interface{}, error) { + req := request.(concatRequest) + return &pb.ConcatRequest{A: req.A, B: req.B}, nil +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/transport_http.go b/vendor/github.com/go-kit/kit/examples/addsvc/transport_http.go new file mode 100644 index 0000000..75a9b83 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/transport_http.go @@ -0,0 +1,130 @@ +package addsvc + +// This file provides server-side bindings for the HTTP transport. +// It utilizes the transport/http.Server. + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "io/ioutil" + "net/http" + + stdopentracing "github.com/opentracing/opentracing-go" + + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/tracing/opentracing" + httptransport "github.com/go-kit/kit/transport/http" +) + +// MakeHTTPHandler returns a handler that makes a set of endpoints available +// on predefined paths. +func MakeHTTPHandler(endpoints Endpoints, tracer stdopentracing.Tracer, logger log.Logger) http.Handler { + options := []httptransport.ServerOption{ + httptransport.ServerErrorEncoder(errorEncoder), + httptransport.ServerErrorLogger(logger), + } + m := http.NewServeMux() + m.Handle("/sum", httptransport.NewServer( + endpoints.SumEndpoint, + DecodeHTTPSumRequest, + EncodeHTTPGenericResponse, + append(options, httptransport.ServerBefore(opentracing.FromHTTPRequest(tracer, "Sum", logger)))..., + )) + m.Handle("/concat", httptransport.NewServer( + endpoints.ConcatEndpoint, + DecodeHTTPConcatRequest, + EncodeHTTPGenericResponse, + append(options, httptransport.ServerBefore(opentracing.FromHTTPRequest(tracer, "Concat", logger)))..., + )) + return m +} + +func errorEncoder(_ context.Context, err error, w http.ResponseWriter) { + code := http.StatusInternalServerError + msg := err.Error() + + switch err { + case ErrTwoZeroes, ErrMaxSizeExceeded, ErrIntOverflow: + code = http.StatusBadRequest + } + + w.WriteHeader(code) + json.NewEncoder(w).Encode(errorWrapper{Error: msg}) +} + +func errorDecoder(r *http.Response) error { + var w errorWrapper + if err := json.NewDecoder(r.Body).Decode(&w); err != nil { + return err + } + return errors.New(w.Error) +} + +type errorWrapper struct { + Error string `json:"error"` +} + +// DecodeHTTPSumRequest is a transport/http.DecodeRequestFunc that decodes a +// JSON-encoded sum request from the HTTP request body. Primarily useful in a +// server. +func DecodeHTTPSumRequest(_ context.Context, r *http.Request) (interface{}, error) { + var req sumRequest + err := json.NewDecoder(r.Body).Decode(&req) + return req, err +} + +// DecodeHTTPConcatRequest is a transport/http.DecodeRequestFunc that decodes a +// JSON-encoded concat request from the HTTP request body. Primarily useful in a +// server. +func DecodeHTTPConcatRequest(_ context.Context, r *http.Request) (interface{}, error) { + var req concatRequest + err := json.NewDecoder(r.Body).Decode(&req) + return req, err +} + +// DecodeHTTPSumResponse is a transport/http.DecodeResponseFunc that decodes a +// JSON-encoded sum response from the HTTP response body. If the response has a +// non-200 status code, we will interpret that as an error and attempt to decode +// the specific error message from the response body. Primarily useful in a +// client. +func DecodeHTTPSumResponse(_ context.Context, r *http.Response) (interface{}, error) { + if r.StatusCode != http.StatusOK { + return nil, errorDecoder(r) + } + var resp sumResponse + err := json.NewDecoder(r.Body).Decode(&resp) + return resp, err +} + +// DecodeHTTPConcatResponse is a transport/http.DecodeResponseFunc that decodes +// a JSON-encoded concat response from the HTTP response body. If the response +// has a non-200 status code, we will interpret that as an error and attempt to +// decode the specific error message from the response body. Primarily useful in +// a client. +func DecodeHTTPConcatResponse(_ context.Context, r *http.Response) (interface{}, error) { + if r.StatusCode != http.StatusOK { + return nil, errorDecoder(r) + } + var resp concatResponse + err := json.NewDecoder(r.Body).Decode(&resp) + return resp, err +} + +// EncodeHTTPGenericRequest is a transport/http.EncodeRequestFunc that +// JSON-encodes any request to the request body. Primarily useful in a client. +func EncodeHTTPGenericRequest(_ context.Context, r *http.Request, request interface{}) error { + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(request); err != nil { + return err + } + r.Body = ioutil.NopCloser(&buf) + return nil +} + +// EncodeHTTPGenericResponse is a transport/http.EncodeResponseFunc that encodes +// the response as JSON to the response writer. Primarily useful in a server. +func EncodeHTTPGenericResponse(_ context.Context, w http.ResponseWriter, response interface{}) error { + return json.NewEncoder(w).Encode(response) +} diff --git a/vendor/github.com/go-kit/kit/examples/addsvc/transport_thrift.go b/vendor/github.com/go-kit/kit/examples/addsvc/transport_thrift.go new file mode 100644 index 0000000..593cd31 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/addsvc/transport_thrift.go @@ -0,0 +1,73 @@ +package addsvc + +// This file provides server-side bindings for the Thrift transport. +// +// This file also provides endpoint constructors that utilize a Thrift client, +// for use in client packages, because package transport/thrift doesn't exist +// yet. See https://github.com/go-kit/kit/issues/184. + +import ( + "context" + + "github.com/go-kit/kit/endpoint" + thriftadd "github.com/go-kit/kit/examples/addsvc/thrift/gen-go/addsvc" +) + +// MakeThriftHandler makes a set of endpoints available as a Thrift service. +func MakeThriftHandler(ctx context.Context, e Endpoints) thriftadd.AddService { + return &thriftServer{ + ctx: ctx, + sum: e.SumEndpoint, + concat: e.ConcatEndpoint, + } +} + +type thriftServer struct { + ctx context.Context + sum endpoint.Endpoint + concat endpoint.Endpoint +} + +func (s *thriftServer) Sum(a int64, b int64) (*thriftadd.SumReply, error) { + request := sumRequest{A: int(a), B: int(b)} + response, err := s.sum(s.ctx, request) + if err != nil { + return nil, err + } + resp := response.(sumResponse) + return &thriftadd.SumReply{Value: int64(resp.V), Err: err2str(resp.Err)}, nil +} + +func (s *thriftServer) Concat(a string, b string) (*thriftadd.ConcatReply, error) { + request := concatRequest{A: a, B: b} + response, err := s.concat(s.ctx, request) + if err != nil { + return nil, err + } + resp := response.(concatResponse) + return &thriftadd.ConcatReply{Value: resp.V, Err: err2str(resp.Err)}, nil +} + +// MakeThriftSumEndpoint returns an endpoint that invokes the passed Thrift client. +// Useful only in clients, and only until a proper transport/thrift.Client exists. +func MakeThriftSumEndpoint(client *thriftadd.AddServiceClient) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(sumRequest) + reply, err := client.Sum(int64(req.A), int64(req.B)) + if err == ErrIntOverflow { + return nil, err // special case; see comment on ErrIntOverflow + } + return sumResponse{V: int(reply.Value), Err: err}, nil + } +} + +// MakeThriftConcatEndpoint returns an endpoint that invokes the passed Thrift +// client. Useful only in clients, and only until a proper +// transport/thrift.Client exists. +func MakeThriftConcatEndpoint(client *thriftadd.AddServiceClient) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(concatRequest) + reply, err := client.Concat(req.A, req.B) + return concatResponse{V: reply.Value, Err: err}, nil + } +} diff --git a/vendor/github.com/go-kit/kit/examples/apigateway/main.go b/vendor/github.com/go-kit/kit/examples/apigateway/main.go new file mode 100644 index 0000000..bedb368 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/apigateway/main.go @@ -0,0 +1,282 @@ +package main + +import ( + "bytes" + "context" + "encoding/json" + "flag" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "os" + "os/signal" + "strings" + "syscall" + "time" + + "github.com/gorilla/mux" + "github.com/hashicorp/consul/api" + stdopentracing "github.com/opentracing/opentracing-go" + + "github.com/go-kit/kit/endpoint" + "github.com/go-kit/kit/examples/addsvc" + addsvcgrpcclient "github.com/go-kit/kit/examples/addsvc/client/grpc" + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/sd" + consulsd "github.com/go-kit/kit/sd/consul" + "github.com/go-kit/kit/sd/lb" + httptransport "github.com/go-kit/kit/transport/http" + "google.golang.org/grpc" +) + +func main() { + var ( + httpAddr = flag.String("http.addr", ":8000", "Address for HTTP (JSON) server") + consulAddr = flag.String("consul.addr", "", "Consul agent address") + retryMax = flag.Int("retry.max", 3, "per-request retries to different instances") + retryTimeout = flag.Duration("retry.timeout", 500*time.Millisecond, "per-request timeout, including retries") + ) + flag.Parse() + + // Logging domain. + var logger log.Logger + { + logger = log.NewLogfmtLogger(os.Stderr) + logger = log.With(logger, "ts", log.DefaultTimestampUTC) + logger = log.With(logger, "caller", log.DefaultCaller) + } + + // Service discovery domain. In this example we use Consul. + var client consulsd.Client + { + consulConfig := api.DefaultConfig() + if len(*consulAddr) > 0 { + consulConfig.Address = *consulAddr + } + consulClient, err := api.NewClient(consulConfig) + if err != nil { + logger.Log("err", err) + os.Exit(1) + } + client = consulsd.NewClient(consulClient) + } + + // Transport domain. + tracer := stdopentracing.GlobalTracer() // no-op + ctx := context.Background() + r := mux.NewRouter() + + // Now we begin installing the routes. Each route corresponds to a single + // method: sum, concat, uppercase, and count. + + // addsvc routes. + { + // Each method gets constructed with a factory. Factories take an + // instance string, and return a specific endpoint. In the factory we + // dial the instance string we get from Consul, and then leverage an + // addsvc client package to construct a complete service. We can then + // leverage the addsvc.Make{Sum,Concat}Endpoint constructors to convert + // the complete service to specific endpoint. + + var ( + tags = []string{} + passingOnly = true + endpoints = addsvc.Endpoints{} + ) + { + factory := addsvcFactory(addsvc.MakeSumEndpoint, tracer, logger) + subscriber := consulsd.NewSubscriber(client, factory, logger, "addsvc", tags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(*retryMax, *retryTimeout, balancer) + endpoints.SumEndpoint = retry + } + { + factory := addsvcFactory(addsvc.MakeConcatEndpoint, tracer, logger) + subscriber := consulsd.NewSubscriber(client, factory, logger, "addsvc", tags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(*retryMax, *retryTimeout, balancer) + endpoints.ConcatEndpoint = retry + } + + // Here we leverage the fact that addsvc comes with a constructor for an + // HTTP handler, and just install it under a particular path prefix in + // our router. + + r.PathPrefix("/addsvc").Handler(http.StripPrefix("/addsvc", addsvc.MakeHTTPHandler(endpoints, tracer, logger))) + } + + // stringsvc routes. + { + // addsvc had lots of nice importable Go packages we could leverage. + // With stringsvc we are not so fortunate, it just has some endpoints + // that we assume will exist. So we have to write that logic here. This + // is by design, so you can see two totally different methods of + // proxying to a remote service. + + var ( + tags = []string{} + passingOnly = true + uppercase endpoint.Endpoint + count endpoint.Endpoint + ) + { + factory := stringsvcFactory(ctx, "GET", "/uppercase") + subscriber := consulsd.NewSubscriber(client, factory, logger, "stringsvc", tags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(*retryMax, *retryTimeout, balancer) + uppercase = retry + } + { + factory := stringsvcFactory(ctx, "GET", "/count") + subscriber := consulsd.NewSubscriber(client, factory, logger, "stringsvc", tags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(*retryMax, *retryTimeout, balancer) + count = retry + } + + // We can use the transport/http.Server to act as our handler, all we + // have to do provide it with the encode and decode functions for our + // stringsvc methods. + + r.Handle("/stringsvc/uppercase", httptransport.NewServer(uppercase, decodeUppercaseRequest, encodeJSONResponse)) + r.Handle("/stringsvc/count", httptransport.NewServer(count, decodeCountRequest, encodeJSONResponse)) + } + + // Interrupt handler. + errc := make(chan error) + go func() { + c := make(chan os.Signal) + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + errc <- fmt.Errorf("%s", <-c) + }() + + // HTTP transport. + go func() { + logger.Log("transport", "HTTP", "addr", *httpAddr) + errc <- http.ListenAndServe(*httpAddr, r) + }() + + // Run! + logger.Log("exit", <-errc) +} + +func addsvcFactory(makeEndpoint func(addsvc.Service) endpoint.Endpoint, tracer stdopentracing.Tracer, logger log.Logger) sd.Factory { + return func(instance string) (endpoint.Endpoint, io.Closer, error) { + // We could just as easily use the HTTP or Thrift client package to make + // the connection to addsvc. We've chosen gRPC arbitrarily. Note that + // the transport is an implementation detail: it doesn't leak out of + // this function. Nice! + + conn, err := grpc.Dial(instance, grpc.WithInsecure()) + if err != nil { + return nil, nil, err + } + service := addsvcgrpcclient.New(conn, tracer, logger) + endpoint := makeEndpoint(service) + + // Notice that the addsvc gRPC client converts the connection to a + // complete addsvc, and we just throw away everything except the method + // we're interested in. A smarter factory would mux multiple methods + // over the same connection. But that would require more work to manage + // the returned io.Closer, e.g. reference counting. Since this is for + // the purposes of demonstration, we'll just keep it simple. + + return endpoint, conn, nil + } +} + +func stringsvcFactory(ctx context.Context, method, path string) sd.Factory { + return func(instance string) (endpoint.Endpoint, io.Closer, error) { + if !strings.HasPrefix(instance, "http") { + instance = "http://" + instance + } + tgt, err := url.Parse(instance) + if err != nil { + return nil, nil, err + } + tgt.Path = path + + // Since stringsvc doesn't have any kind of package we can import, or + // any formal spec, we are forced to just assert where the endpoints + // live, and write our own code to encode and decode requests and + // responses. Ideally, if you write the service, you will want to + // provide stronger guarantees to your clients. + + var ( + enc httptransport.EncodeRequestFunc + dec httptransport.DecodeResponseFunc + ) + switch path { + case "/uppercase": + enc, dec = encodeJSONRequest, decodeUppercaseResponse + case "/count": + enc, dec = encodeJSONRequest, decodeCountResponse + default: + return nil, nil, fmt.Errorf("unknown stringsvc path %q", path) + } + + return httptransport.NewClient(method, tgt, enc, dec).Endpoint(), nil, nil + } +} + +func encodeJSONRequest(_ context.Context, req *http.Request, request interface{}) error { + // Both uppercase and count requests are encoded in the same way: + // simple JSON serialization to the request body. + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(request); err != nil { + return err + } + req.Body = ioutil.NopCloser(&buf) + return nil +} + +func encodeJSONResponse(_ context.Context, w http.ResponseWriter, response interface{}) error { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + return json.NewEncoder(w).Encode(response) +} + +// I've just copied these functions from stringsvc3/transport.go, inlining the +// struct definitions. + +func decodeUppercaseResponse(ctx context.Context, resp *http.Response) (interface{}, error) { + var response struct { + V string `json:"v"` + Err string `json:"err,omitempty"` + } + if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { + return nil, err + } + return response, nil +} + +func decodeCountResponse(ctx context.Context, resp *http.Response) (interface{}, error) { + var response struct { + V int `json:"v"` + } + if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { + return nil, err + } + return response, nil +} + +func decodeUppercaseRequest(ctx context.Context, req *http.Request) (interface{}, error) { + var request struct { + S string `json:"s"` + } + if err := json.NewDecoder(req.Body).Decode(&request); err != nil { + return nil, err + } + return request, nil +} + +func decodeCountRequest(ctx context.Context, req *http.Request) (interface{}, error) { + var request struct { + S string `json:"s"` + } + if err := json.NewDecoder(req.Body).Decode(&request); err != nil { + return nil, err + } + return request, nil +} diff --git a/vendor/github.com/go-kit/kit/examples/profilesvc/README.md b/vendor/github.com/go-kit/kit/examples/profilesvc/README.md new file mode 100644 index 0000000..68c4125 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/profilesvc/README.md @@ -0,0 +1,4 @@ +# profilesvc + +This example demonstrates how to use Go kit to implement a REST-y HTTP service. +It leverages the excellent [gorilla mux package](https://github.com/gorilla/mux) for routing. diff --git a/vendor/github.com/go-kit/kit/examples/profilesvc/client/client.go b/vendor/github.com/go-kit/kit/examples/profilesvc/client/client.go new file mode 100644 index 0000000..6b1dff0 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/profilesvc/client/client.go @@ -0,0 +1,120 @@ +// Package client provides a profilesvc client based on a predefined Consul +// service name and relevant tags. Users must only provide the address of a +// Consul server. +package client + +import ( + "io" + "time" + + consulapi "github.com/hashicorp/consul/api" + + "github.com/go-kit/kit/endpoint" + "github.com/go-kit/kit/examples/profilesvc" + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/sd" + "github.com/go-kit/kit/sd/consul" + "github.com/go-kit/kit/sd/lb" +) + +// New returns a service that's load-balanced over instances of profilesvc found +// in the provided Consul server. The mechanism of looking up profilesvc +// instances in Consul is hard-coded into the client. +func New(consulAddr string, logger log.Logger) (profilesvc.Service, error) { + apiclient, err := consulapi.NewClient(&consulapi.Config{ + Address: consulAddr, + }) + if err != nil { + return nil, err + } + + // As the implementer of profilesvc, we declare and enforce these + // parameters for all of the profilesvc consumers. + var ( + consulService = "profilesvc" + consulTags = []string{"prod"} + passingOnly = true + retryMax = 3 + retryTimeout = 500 * time.Millisecond + ) + + var ( + sdclient = consul.NewClient(apiclient) + endpoints profilesvc.Endpoints + ) + { + factory := factoryFor(profilesvc.MakePostProfileEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.PostProfileEndpoint = retry + } + { + factory := factoryFor(profilesvc.MakeGetProfileEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.GetProfileEndpoint = retry + } + { + factory := factoryFor(profilesvc.MakePutProfileEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.PutProfileEndpoint = retry + } + { + factory := factoryFor(profilesvc.MakePatchProfileEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.PatchProfileEndpoint = retry + } + { + factory := factoryFor(profilesvc.MakeDeleteProfileEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.DeleteProfileEndpoint = retry + } + { + factory := factoryFor(profilesvc.MakeGetAddressesEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.GetAddressesEndpoint = retry + } + { + factory := factoryFor(profilesvc.MakeGetAddressEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.GetAddressEndpoint = retry + } + { + factory := factoryFor(profilesvc.MakePostAddressEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.PostAddressEndpoint = retry + } + { + factory := factoryFor(profilesvc.MakeDeleteAddressEndpoint) + subscriber := consul.NewSubscriber(sdclient, factory, logger, consulService, consulTags, passingOnly) + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(retryMax, retryTimeout, balancer) + endpoints.DeleteAddressEndpoint = retry + } + + return endpoints, nil +} + +func factoryFor(makeEndpoint func(profilesvc.Service) endpoint.Endpoint) sd.Factory { + return func(instance string) (endpoint.Endpoint, io.Closer, error) { + service, err := profilesvc.MakeClientEndpoints(instance) + if err != nil { + return nil, nil, err + } + return makeEndpoint(service), nil, nil + } +} diff --git a/vendor/github.com/go-kit/kit/examples/profilesvc/cmd/profilesvc/main.go b/vendor/github.com/go-kit/kit/examples/profilesvc/cmd/profilesvc/main.go new file mode 100644 index 0000000..58c5cdd --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/profilesvc/cmd/profilesvc/main.go @@ -0,0 +1,52 @@ +package main + +import ( + "flag" + "fmt" + "net/http" + "os" + "os/signal" + "syscall" + + "github.com/go-kit/kit/examples/profilesvc" + "github.com/go-kit/kit/log" +) + +func main() { + var ( + httpAddr = flag.String("http.addr", ":8080", "HTTP listen address") + ) + flag.Parse() + + var logger log.Logger + { + logger = log.NewLogfmtLogger(os.Stderr) + logger = log.With(logger, "ts", log.DefaultTimestampUTC) + logger = log.With(logger, "caller", log.DefaultCaller) + } + + var s profilesvc.Service + { + s = profilesvc.NewInmemService() + s = profilesvc.LoggingMiddleware(logger)(s) + } + + var h http.Handler + { + h = profilesvc.MakeHTTPHandler(s, log.With(logger, "component", "HTTP")) + } + + errs := make(chan error) + go func() { + c := make(chan os.Signal) + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + errs <- fmt.Errorf("%s", <-c) + }() + + go func() { + logger.Log("transport", "HTTP", "addr", *httpAddr) + errs <- http.ListenAndServe(*httpAddr, h) + }() + + logger.Log("exit", <-errs) +} diff --git a/vendor/github.com/go-kit/kit/examples/profilesvc/endpoints.go b/vendor/github.com/go-kit/kit/examples/profilesvc/endpoints.go new file mode 100644 index 0000000..3da29b4 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/profilesvc/endpoints.go @@ -0,0 +1,387 @@ +package profilesvc + +import ( + "context" + "net/url" + "strings" + + "github.com/go-kit/kit/endpoint" + httptransport "github.com/go-kit/kit/transport/http" +) + +// Endpoints collects all of the endpoints that compose a profile service. It's +// meant to be used as a helper struct, to collect all of the endpoints into a +// single parameter. +// +// In a server, it's useful for functions that need to operate on a per-endpoint +// basis. For example, you might pass an Endpoints to a function that produces +// an http.Handler, with each method (endpoint) wired up to a specific path. (It +// is probably a mistake in design to invoke the Service methods on the +// Endpoints struct in a server.) +// +// In a client, it's useful to collect individually constructed endpoints into a +// single type that implements the Service interface. For example, you might +// construct individual endpoints using transport/http.NewClient, combine them +// into an Endpoints, and return it to the caller as a Service. +type Endpoints struct { + PostProfileEndpoint endpoint.Endpoint + GetProfileEndpoint endpoint.Endpoint + PutProfileEndpoint endpoint.Endpoint + PatchProfileEndpoint endpoint.Endpoint + DeleteProfileEndpoint endpoint.Endpoint + GetAddressesEndpoint endpoint.Endpoint + GetAddressEndpoint endpoint.Endpoint + PostAddressEndpoint endpoint.Endpoint + DeleteAddressEndpoint endpoint.Endpoint +} + +// MakeServerEndpoints returns an Endpoints struct where each endpoint invokes +// the corresponding method on the provided service. Useful in a profilesvc +// server. +func MakeServerEndpoints(s Service) Endpoints { + return Endpoints{ + PostProfileEndpoint: MakePostProfileEndpoint(s), + GetProfileEndpoint: MakeGetProfileEndpoint(s), + PutProfileEndpoint: MakePutProfileEndpoint(s), + PatchProfileEndpoint: MakePatchProfileEndpoint(s), + DeleteProfileEndpoint: MakeDeleteProfileEndpoint(s), + GetAddressesEndpoint: MakeGetAddressesEndpoint(s), + GetAddressEndpoint: MakeGetAddressEndpoint(s), + PostAddressEndpoint: MakePostAddressEndpoint(s), + DeleteAddressEndpoint: MakeDeleteAddressEndpoint(s), + } +} + +// MakeClientEndpoints returns an Endpoints struct where each endpoint invokes +// the corresponding method on the remote instance, via a transport/http.Client. +// Useful in a profilesvc client. +func MakeClientEndpoints(instance string) (Endpoints, error) { + if !strings.HasPrefix(instance, "http") { + instance = "http://" + instance + } + tgt, err := url.Parse(instance) + if err != nil { + return Endpoints{}, err + } + tgt.Path = "" + + options := []httptransport.ClientOption{} + + // Note that the request encoders need to modify the request URL, changing + // the path and method. That's fine: we simply need to provide specific + // encoders for each endpoint. + + return Endpoints{ + PostProfileEndpoint: httptransport.NewClient("POST", tgt, encodePostProfileRequest, decodePostProfileResponse, options...).Endpoint(), + GetProfileEndpoint: httptransport.NewClient("GET", tgt, encodeGetProfileRequest, decodeGetProfileResponse, options...).Endpoint(), + PutProfileEndpoint: httptransport.NewClient("PUT", tgt, encodePutProfileRequest, decodePutProfileResponse, options...).Endpoint(), + PatchProfileEndpoint: httptransport.NewClient("PATCH", tgt, encodePatchProfileRequest, decodePatchProfileResponse, options...).Endpoint(), + DeleteProfileEndpoint: httptransport.NewClient("DELETE", tgt, encodeDeleteProfileRequest, decodeDeleteProfileResponse, options...).Endpoint(), + GetAddressesEndpoint: httptransport.NewClient("GET", tgt, encodeGetAddressesRequest, decodeGetAddressesResponse, options...).Endpoint(), + GetAddressEndpoint: httptransport.NewClient("GET", tgt, encodeGetAddressRequest, decodeGetAddressResponse, options...).Endpoint(), + PostAddressEndpoint: httptransport.NewClient("POST", tgt, encodePostAddressRequest, decodePostAddressResponse, options...).Endpoint(), + DeleteAddressEndpoint: httptransport.NewClient("DELETE", tgt, encodeDeleteAddressRequest, decodeDeleteAddressResponse, options...).Endpoint(), + }, nil +} + +// PostProfile implements Service. Primarily useful in a client. +func (e Endpoints) PostProfile(ctx context.Context, p Profile) error { + request := postProfileRequest{Profile: p} + response, err := e.PostProfileEndpoint(ctx, request) + if err != nil { + return err + } + resp := response.(postProfileResponse) + return resp.Err +} + +// GetProfile implements Service. Primarily useful in a client. +func (e Endpoints) GetProfile(ctx context.Context, id string) (Profile, error) { + request := getProfileRequest{ID: id} + response, err := e.GetProfileEndpoint(ctx, request) + if err != nil { + return Profile{}, err + } + resp := response.(getProfileResponse) + return resp.Profile, resp.Err +} + +// PutProfile implements Service. Primarily useful in a client. +func (e Endpoints) PutProfile(ctx context.Context, id string, p Profile) error { + request := putProfileRequest{ID: id, Profile: p} + response, err := e.PutProfileEndpoint(ctx, request) + if err != nil { + return err + } + resp := response.(putProfileResponse) + return resp.Err +} + +// PatchProfile implements Service. Primarily useful in a client. +func (e Endpoints) PatchProfile(ctx context.Context, id string, p Profile) error { + request := patchProfileRequest{ID: id, Profile: p} + response, err := e.PatchProfileEndpoint(ctx, request) + if err != nil { + return err + } + resp := response.(patchProfileResponse) + return resp.Err +} + +// DeleteProfile implements Service. Primarily useful in a client. +func (e Endpoints) DeleteProfile(ctx context.Context, id string) error { + request := deleteProfileRequest{ID: id} + response, err := e.DeleteProfileEndpoint(ctx, request) + if err != nil { + return err + } + resp := response.(deleteProfileResponse) + return resp.Err +} + +// GetAddresses implements Service. Primarily useful in a client. +func (e Endpoints) GetAddresses(ctx context.Context, profileID string) ([]Address, error) { + request := getAddressesRequest{ProfileID: profileID} + response, err := e.GetAddressesEndpoint(ctx, request) + if err != nil { + return nil, err + } + resp := response.(getAddressesResponse) + return resp.Addresses, resp.Err +} + +// GetAddress implements Service. Primarily useful in a client. +func (e Endpoints) GetAddress(ctx context.Context, profileID string, addressID string) (Address, error) { + request := getAddressRequest{ProfileID: profileID, AddressID: addressID} + response, err := e.GetAddressEndpoint(ctx, request) + if err != nil { + return Address{}, err + } + resp := response.(getAddressResponse) + return resp.Address, resp.Err +} + +// PostAddress implements Service. Primarily useful in a client. +func (e Endpoints) PostAddress(ctx context.Context, profileID string, a Address) error { + request := postAddressRequest{ProfileID: profileID, Address: a} + response, err := e.PostAddressEndpoint(ctx, request) + if err != nil { + return err + } + resp := response.(postAddressResponse) + return resp.Err +} + +// DeleteAddress implements Service. Primarily useful in a client. +func (e Endpoints) DeleteAddress(ctx context.Context, profileID string, addressID string) error { + request := deleteAddressRequest{ProfileID: profileID, AddressID: addressID} + response, err := e.DeleteAddressEndpoint(ctx, request) + if err != nil { + return err + } + resp := response.(deleteAddressResponse) + return resp.Err +} + +// MakePostProfileEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakePostProfileEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(postProfileRequest) + e := s.PostProfile(ctx, req.Profile) + return postProfileResponse{Err: e}, nil + } +} + +// MakeGetProfileEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakeGetProfileEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(getProfileRequest) + p, e := s.GetProfile(ctx, req.ID) + return getProfileResponse{Profile: p, Err: e}, nil + } +} + +// MakePutProfileEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakePutProfileEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(putProfileRequest) + e := s.PutProfile(ctx, req.ID, req.Profile) + return putProfileResponse{Err: e}, nil + } +} + +// MakePatchProfileEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakePatchProfileEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(patchProfileRequest) + e := s.PatchProfile(ctx, req.ID, req.Profile) + return patchProfileResponse{Err: e}, nil + } +} + +// MakeDeleteProfileEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakeDeleteProfileEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(deleteProfileRequest) + e := s.DeleteProfile(ctx, req.ID) + return deleteProfileResponse{Err: e}, nil + } +} + +// MakeGetAddressesEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakeGetAddressesEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(getAddressesRequest) + a, e := s.GetAddresses(ctx, req.ProfileID) + return getAddressesResponse{Addresses: a, Err: e}, nil + } +} + +// MakeGetAddressEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakeGetAddressEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(getAddressRequest) + a, e := s.GetAddress(ctx, req.ProfileID, req.AddressID) + return getAddressResponse{Address: a, Err: e}, nil + } +} + +// MakePostAddressEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakePostAddressEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(postAddressRequest) + e := s.PostAddress(ctx, req.ProfileID, req.Address) + return postAddressResponse{Err: e}, nil + } +} + +// MakeDeleteAddressEndpoint returns an endpoint via the passed service. +// Primarily useful in a server. +func MakeDeleteAddressEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + req := request.(deleteAddressRequest) + e := s.DeleteAddress(ctx, req.ProfileID, req.AddressID) + return deleteAddressResponse{Err: e}, nil + } +} + +// We have two options to return errors from the business logic. +// +// We could return the error via the endpoint itself. That makes certain things +// a little bit easier, like providing non-200 HTTP responses to the client. But +// Go kit assumes that endpoint errors are (or may be treated as) +// transport-domain errors. For example, an endpoint error will count against a +// circuit breaker error count. +// +// Therefore, it's often better to return service (business logic) errors in the +// response object. This means we have to do a bit more work in the HTTP +// response encoder to detect e.g. a not-found error and provide a proper HTTP +// status code. That work is done with the errorer interface, in transport.go. +// Response types that may contain business-logic errors implement that +// interface. + +type postProfileRequest struct { + Profile Profile +} + +type postProfileResponse struct { + Err error `json:"err,omitempty"` +} + +func (r postProfileResponse) error() error { return r.Err } + +type getProfileRequest struct { + ID string +} + +type getProfileResponse struct { + Profile Profile `json:"profile,omitempty"` + Err error `json:"err,omitempty"` +} + +func (r getProfileResponse) error() error { return r.Err } + +type putProfileRequest struct { + ID string + Profile Profile +} + +type putProfileResponse struct { + Err error `json:"err,omitempty"` +} + +func (r putProfileResponse) error() error { return nil } + +type patchProfileRequest struct { + ID string + Profile Profile +} + +type patchProfileResponse struct { + Err error `json:"err,omitempty"` +} + +func (r patchProfileResponse) error() error { return r.Err } + +type deleteProfileRequest struct { + ID string +} + +type deleteProfileResponse struct { + Err error `json:"err,omitempty"` +} + +func (r deleteProfileResponse) error() error { return r.Err } + +type getAddressesRequest struct { + ProfileID string +} + +type getAddressesResponse struct { + Addresses []Address `json:"addresses,omitempty"` + Err error `json:"err,omitempty"` +} + +func (r getAddressesResponse) error() error { return r.Err } + +type getAddressRequest struct { + ProfileID string + AddressID string +} + +type getAddressResponse struct { + Address Address `json:"address,omitempty"` + Err error `json:"err,omitempty"` +} + +func (r getAddressResponse) error() error { return r.Err } + +type postAddressRequest struct { + ProfileID string + Address Address +} + +type postAddressResponse struct { + Err error `json:"err,omitempty"` +} + +func (r postAddressResponse) error() error { return r.Err } + +type deleteAddressRequest struct { + ProfileID string + AddressID string +} + +type deleteAddressResponse struct { + Err error `json:"err,omitempty"` +} + +func (r deleteAddressResponse) error() error { return r.Err } diff --git a/vendor/github.com/go-kit/kit/examples/profilesvc/middlewares.go b/vendor/github.com/go-kit/kit/examples/profilesvc/middlewares.go new file mode 100644 index 0000000..1b738f5 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/profilesvc/middlewares.go @@ -0,0 +1,88 @@ +package profilesvc + +import ( + "context" + "time" + + "github.com/go-kit/kit/log" +) + +// Middleware describes a service (as opposed to endpoint) middleware. +type Middleware func(Service) Service + +func LoggingMiddleware(logger log.Logger) Middleware { + return func(next Service) Service { + return &loggingMiddleware{ + next: next, + logger: logger, + } + } +} + +type loggingMiddleware struct { + next Service + logger log.Logger +} + +func (mw loggingMiddleware) PostProfile(ctx context.Context, p Profile) (err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "PostProfile", "id", p.ID, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.PostProfile(ctx, p) +} + +func (mw loggingMiddleware) GetProfile(ctx context.Context, id string) (p Profile, err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "GetProfile", "id", id, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.GetProfile(ctx, id) +} + +func (mw loggingMiddleware) PutProfile(ctx context.Context, id string, p Profile) (err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "PutProfile", "id", id, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.PutProfile(ctx, id, p) +} + +func (mw loggingMiddleware) PatchProfile(ctx context.Context, id string, p Profile) (err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "PatchProfile", "id", id, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.PatchProfile(ctx, id, p) +} + +func (mw loggingMiddleware) DeleteProfile(ctx context.Context, id string) (err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "DeleteProfile", "id", id, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.DeleteProfile(ctx, id) +} + +func (mw loggingMiddleware) GetAddresses(ctx context.Context, profileID string) (addresses []Address, err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "GetAddresses", "profileID", profileID, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.GetAddresses(ctx, profileID) +} + +func (mw loggingMiddleware) GetAddress(ctx context.Context, profileID string, addressID string) (a Address, err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "GetAddress", "profileID", profileID, "addressID", addressID, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.GetAddress(ctx, profileID, addressID) +} + +func (mw loggingMiddleware) PostAddress(ctx context.Context, profileID string, a Address) (err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "PostAddress", "profileID", profileID, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.PostAddress(ctx, profileID, a) +} + +func (mw loggingMiddleware) DeleteAddress(ctx context.Context, profileID string, addressID string) (err error) { + defer func(begin time.Time) { + mw.logger.Log("method", "DeleteAddress", "profileID", profileID, "addressID", addressID, "took", time.Since(begin), "err", err) + }(time.Now()) + return mw.next.DeleteAddress(ctx, profileID, addressID) +} diff --git a/vendor/github.com/go-kit/kit/examples/profilesvc/service.go b/vendor/github.com/go-kit/kit/examples/profilesvc/service.go new file mode 100644 index 0000000..cd34ecd --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/profilesvc/service.go @@ -0,0 +1,185 @@ +package profilesvc + +import ( + "context" + "errors" + "sync" +) + +// Service is a simple CRUD interface for user profiles. +type Service interface { + PostProfile(ctx context.Context, p Profile) error + GetProfile(ctx context.Context, id string) (Profile, error) + PutProfile(ctx context.Context, id string, p Profile) error + PatchProfile(ctx context.Context, id string, p Profile) error + DeleteProfile(ctx context.Context, id string) error + GetAddresses(ctx context.Context, profileID string) ([]Address, error) + GetAddress(ctx context.Context, profileID string, addressID string) (Address, error) + PostAddress(ctx context.Context, profileID string, a Address) error + DeleteAddress(ctx context.Context, profileID string, addressID string) error +} + +// Profile represents a single user profile. +// ID should be globally unique. +type Profile struct { + ID string `json:"id"` + Name string `json:"name,omitempty"` + Addresses []Address `json:"addresses,omitempty"` +} + +// Address is a field of a user profile. +// ID should be unique within the profile (at a minimum). +type Address struct { + ID string `json:"id"` + Location string `json:"location,omitempty"` +} + +var ( + ErrInconsistentIDs = errors.New("inconsistent IDs") + ErrAlreadyExists = errors.New("already exists") + ErrNotFound = errors.New("not found") +) + +type inmemService struct { + mtx sync.RWMutex + m map[string]Profile +} + +func NewInmemService() Service { + return &inmemService{ + m: map[string]Profile{}, + } +} + +func (s *inmemService) PostProfile(ctx context.Context, p Profile) error { + s.mtx.Lock() + defer s.mtx.Unlock() + if _, ok := s.m[p.ID]; ok { + return ErrAlreadyExists // POST = create, don't overwrite + } + s.m[p.ID] = p + return nil +} + +func (s *inmemService) GetProfile(ctx context.Context, id string) (Profile, error) { + s.mtx.RLock() + defer s.mtx.RUnlock() + p, ok := s.m[id] + if !ok { + return Profile{}, ErrNotFound + } + return p, nil +} + +func (s *inmemService) PutProfile(ctx context.Context, id string, p Profile) error { + if id != p.ID { + return ErrInconsistentIDs + } + s.mtx.Lock() + defer s.mtx.Unlock() + s.m[id] = p // PUT = create or update + return nil +} + +func (s *inmemService) PatchProfile(ctx context.Context, id string, p Profile) error { + if p.ID != "" && id != p.ID { + return ErrInconsistentIDs + } + + s.mtx.Lock() + defer s.mtx.Unlock() + + existing, ok := s.m[id] + if !ok { + return ErrNotFound // PATCH = update existing, don't create + } + + // We assume that it's not possible to PATCH the ID, and that it's not + // possible to PATCH any field to its zero value. That is, the zero value + // means not specified. The way around this is to use e.g. Name *string in + // the Profile definition. But since this is just a demonstrative example, + // I'm leaving that out. + + if p.Name != "" { + existing.Name = p.Name + } + if len(p.Addresses) > 0 { + existing.Addresses = p.Addresses + } + s.m[id] = existing + return nil +} + +func (s *inmemService) DeleteProfile(ctx context.Context, id string) error { + s.mtx.Lock() + defer s.mtx.Unlock() + if _, ok := s.m[id]; !ok { + return ErrNotFound + } + delete(s.m, id) + return nil +} + +func (s *inmemService) GetAddresses(ctx context.Context, profileID string) ([]Address, error) { + s.mtx.RLock() + defer s.mtx.RUnlock() + p, ok := s.m[profileID] + if !ok { + return []Address{}, ErrNotFound + } + return p.Addresses, nil +} + +func (s *inmemService) GetAddress(ctx context.Context, profileID string, addressID string) (Address, error) { + s.mtx.RLock() + defer s.mtx.RUnlock() + p, ok := s.m[profileID] + if !ok { + return Address{}, ErrNotFound + } + for _, address := range p.Addresses { + if address.ID == addressID { + return address, nil + } + } + return Address{}, ErrNotFound +} + +func (s *inmemService) PostAddress(ctx context.Context, profileID string, a Address) error { + s.mtx.Lock() + defer s.mtx.Unlock() + p, ok := s.m[profileID] + if !ok { + return ErrNotFound + } + for _, address := range p.Addresses { + if address.ID == a.ID { + return ErrAlreadyExists + } + } + p.Addresses = append(p.Addresses, a) + s.m[profileID] = p + return nil +} + +func (s *inmemService) DeleteAddress(ctx context.Context, profileID string, addressID string) error { + s.mtx.Lock() + defer s.mtx.Unlock() + p, ok := s.m[profileID] + if !ok { + return ErrNotFound + } + newAddresses := make([]Address, 0, len(p.Addresses)) + for _, address := range p.Addresses { + if address.ID == addressID { + continue // delete + } + newAddresses = append(newAddresses, address) + } + if len(newAddresses) == len(p.Addresses) { + return ErrNotFound + } + p.Addresses = newAddresses + s.m[profileID] = p + return nil +} diff --git a/vendor/github.com/go-kit/kit/examples/profilesvc/transport.go b/vendor/github.com/go-kit/kit/examples/profilesvc/transport.go new file mode 100644 index 0000000..a0136ee --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/profilesvc/transport.go @@ -0,0 +1,400 @@ +package profilesvc + +// The profilesvc is just over HTTP, so we just have a single transport.go. + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "io/ioutil" + "net/http" + "net/url" + + "github.com/gorilla/mux" + + "github.com/go-kit/kit/log" + httptransport "github.com/go-kit/kit/transport/http" +) + +var ( + // ErrBadRouting is returned when an expected path variable is missing. + // It always indicates programmer error. + ErrBadRouting = errors.New("inconsistent mapping between route and handler (programmer error)") +) + +// MakeHTTPHandler mounts all of the service endpoints into an http.Handler. +// Useful in a profilesvc server. +func MakeHTTPHandler(s Service, logger log.Logger) http.Handler { + r := mux.NewRouter() + e := MakeServerEndpoints(s) + options := []httptransport.ServerOption{ + httptransport.ServerErrorLogger(logger), + httptransport.ServerErrorEncoder(encodeError), + } + + // POST /profiles/ adds another profile + // GET /profiles/:id retrieves the given profile by id + // PUT /profiles/:id post updated profile information about the profile + // PATCH /profiles/:id partial updated profile information + // DELETE /profiles/:id remove the given profile + // GET /profiles/:id/addresses/ retrieve addresses associated with the profile + // GET /profiles/:id/addresses/:addressID retrieve a particular profile address + // POST /profiles/:id/addresses/ add a new address + // DELETE /profiles/:id/addresses/:addressID remove an address + + r.Methods("POST").Path("/profiles/").Handler(httptransport.NewServer( + e.PostProfileEndpoint, + decodePostProfileRequest, + encodeResponse, + options..., + )) + r.Methods("GET").Path("/profiles/{id}").Handler(httptransport.NewServer( + e.GetProfileEndpoint, + decodeGetProfileRequest, + encodeResponse, + options..., + )) + r.Methods("PUT").Path("/profiles/{id}").Handler(httptransport.NewServer( + e.PutProfileEndpoint, + decodePutProfileRequest, + encodeResponse, + options..., + )) + r.Methods("PATCH").Path("/profiles/{id}").Handler(httptransport.NewServer( + e.PatchProfileEndpoint, + decodePatchProfileRequest, + encodeResponse, + options..., + )) + r.Methods("DELETE").Path("/profiles/{id}").Handler(httptransport.NewServer( + e.DeleteProfileEndpoint, + decodeDeleteProfileRequest, + encodeResponse, + options..., + )) + r.Methods("GET").Path("/profiles/{id}/addresses/").Handler(httptransport.NewServer( + e.GetAddressesEndpoint, + decodeGetAddressesRequest, + encodeResponse, + options..., + )) + r.Methods("GET").Path("/profiles/{id}/addresses/{addressID}").Handler(httptransport.NewServer( + e.GetAddressEndpoint, + decodeGetAddressRequest, + encodeResponse, + options..., + )) + r.Methods("POST").Path("/profiles/{id}/addresses/").Handler(httptransport.NewServer( + e.PostAddressEndpoint, + decodePostAddressRequest, + encodeResponse, + options..., + )) + r.Methods("DELETE").Path("/profiles/{id}/addresses/{addressID}").Handler(httptransport.NewServer( + e.DeleteAddressEndpoint, + decodeDeleteAddressRequest, + encodeResponse, + options..., + )) + return r +} + +func decodePostProfileRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + var req postProfileRequest + if e := json.NewDecoder(r.Body).Decode(&req.Profile); e != nil { + return nil, e + } + return req, nil +} + +func decodeGetProfileRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, ErrBadRouting + } + return getProfileRequest{ID: id}, nil +} + +func decodePutProfileRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, ErrBadRouting + } + var profile Profile + if err := json.NewDecoder(r.Body).Decode(&profile); err != nil { + return nil, err + } + return putProfileRequest{ + ID: id, + Profile: profile, + }, nil +} + +func decodePatchProfileRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, ErrBadRouting + } + var profile Profile + if err := json.NewDecoder(r.Body).Decode(&profile); err != nil { + return nil, err + } + return patchProfileRequest{ + ID: id, + Profile: profile, + }, nil +} + +func decodeDeleteProfileRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, ErrBadRouting + } + return deleteProfileRequest{ID: id}, nil +} + +func decodeGetAddressesRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, ErrBadRouting + } + return getAddressesRequest{ProfileID: id}, nil +} + +func decodeGetAddressRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, ErrBadRouting + } + addressID, ok := vars["addressID"] + if !ok { + return nil, ErrBadRouting + } + return getAddressRequest{ + ProfileID: id, + AddressID: addressID, + }, nil +} + +func decodePostAddressRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, ErrBadRouting + } + var address Address + if err := json.NewDecoder(r.Body).Decode(&address); err != nil { + return nil, err + } + return postAddressRequest{ + ProfileID: id, + Address: address, + }, nil +} + +func decodeDeleteAddressRequest(_ context.Context, r *http.Request) (request interface{}, err error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, ErrBadRouting + } + addressID, ok := vars["addressID"] + if !ok { + return nil, ErrBadRouting + } + return deleteAddressRequest{ + ProfileID: id, + AddressID: addressID, + }, nil +} + +func encodePostProfileRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("POST").Path("/profiles/") + req.Method, req.URL.Path = "POST", "/profiles/" + return encodeRequest(ctx, req, request) +} + +func encodeGetProfileRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("GET").Path("/profiles/{id}") + r := request.(getProfileRequest) + profileID := url.QueryEscape(r.ID) + req.Method, req.URL.Path = "GET", "/profiles/"+profileID + return encodeRequest(ctx, req, request) +} + +func encodePutProfileRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("PUT").Path("/profiles/{id}") + r := request.(putProfileRequest) + profileID := url.QueryEscape(r.ID) + req.Method, req.URL.Path = "PUT", "/profiles/"+profileID + return encodeRequest(ctx, req, request) +} + +func encodePatchProfileRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("PATCH").Path("/profiles/{id}") + r := request.(patchProfileRequest) + profileID := url.QueryEscape(r.ID) + req.Method, req.URL.Path = "PATCH", "/profiles/"+profileID + return encodeRequest(ctx, req, request) +} + +func encodeDeleteProfileRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("DELETE").Path("/profiles/{id}") + r := request.(deleteProfileRequest) + profileID := url.QueryEscape(r.ID) + req.Method, req.URL.Path = "DELETE", "/profiles/"+profileID + return encodeRequest(ctx, req, request) +} + +func encodeGetAddressesRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("GET").Path("/profiles/{id}/addresses/") + r := request.(getAddressesRequest) + profileID := url.QueryEscape(r.ProfileID) + req.Method, req.URL.Path = "GET", "/profiles/"+profileID+"/addresses/" + return encodeRequest(ctx, req, request) +} + +func encodeGetAddressRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("GET").Path("/profiles/{id}/addresses/{addressID}") + r := request.(getAddressRequest) + profileID := url.QueryEscape(r.ProfileID) + addressID := url.QueryEscape(r.AddressID) + req.Method, req.URL.Path = "GET", "/profiles/"+profileID+"/addresses/"+addressID + return encodeRequest(ctx, req, request) +} + +func encodePostAddressRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("POST").Path("/profiles/{id}/addresses/") + r := request.(postAddressRequest) + profileID := url.QueryEscape(r.ProfileID) + req.Method, req.URL.Path = "POST", "/profiles/"+profileID+"/addresses/" + return encodeRequest(ctx, req, request) +} + +func encodeDeleteAddressRequest(ctx context.Context, req *http.Request, request interface{}) error { + // r.Methods("DELETE").Path("/profiles/{id}/addresses/{addressID}") + r := request.(deleteAddressRequest) + profileID := url.QueryEscape(r.ProfileID) + addressID := url.QueryEscape(r.AddressID) + req.Method, req.URL.Path = "DELETE", "/profiles/"+profileID+"/addresses/"+addressID + return encodeRequest(ctx, req, request) +} + +func decodePostProfileResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response postProfileResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +func decodeGetProfileResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response getProfileResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +func decodePutProfileResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response putProfileResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +func decodePatchProfileResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response patchProfileResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +func decodeDeleteProfileResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response deleteProfileResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +func decodeGetAddressesResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response getAddressesResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +func decodeGetAddressResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response getAddressResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +func decodePostAddressResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response postAddressResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +func decodeDeleteAddressResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response deleteAddressResponse + err := json.NewDecoder(resp.Body).Decode(&response) + return response, err +} + +// errorer is implemented by all concrete response types that may contain +// errors. It allows us to change the HTTP response code without needing to +// trigger an endpoint (transport-level) error. For more information, read the +// big comment in endpoints.go. +type errorer interface { + error() error +} + +// encodeResponse is the common method to encode all response types to the +// client. I chose to do it this way because, since we're using JSON, there's no +// reason to provide anything more specific. It's certainly possible to +// specialize on a per-response (per-method) basis. +func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error { + if e, ok := response.(errorer); ok && e.error() != nil { + // Not a Go kit transport error, but a business-logic error. + // Provide those as HTTP errors. + encodeError(ctx, e.error(), w) + return nil + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + return json.NewEncoder(w).Encode(response) +} + +// encodeRequest likewise JSON-encodes the request to the HTTP request body. +// Don't use it directly as a transport/http.Client EncodeRequestFunc: +// profilesvc endpoints require mutating the HTTP method and request path. +func encodeRequest(_ context.Context, req *http.Request, request interface{}) error { + var buf bytes.Buffer + err := json.NewEncoder(&buf).Encode(request) + if err != nil { + return err + } + req.Body = ioutil.NopCloser(&buf) + return nil +} + +func encodeError(_ context.Context, err error, w http.ResponseWriter) { + if err == nil { + panic("encodeError with nil error") + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(codeFrom(err)) + json.NewEncoder(w).Encode(map[string]interface{}{ + "error": err.Error(), + }) +} + +func codeFrom(err error) int { + switch err { + case ErrNotFound: + return http.StatusNotFound + case ErrAlreadyExists, ErrInconsistentIDs: + return http.StatusBadRequest + default: + return http.StatusInternalServerError + } +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/README.md b/vendor/github.com/go-kit/kit/examples/shipping/README.md new file mode 100644 index 0000000..1a9a14e --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/README.md @@ -0,0 +1,25 @@ +# shipping + +This example demonstrates a more real-world application consisting of multiple services. + +## Description + +The implementation is based on the container shipping domain from the [Domain Driven Design](http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215) book by Eric Evans, which was [originally](http://dddsample.sourceforge.net/) implemented in Java but has since been ported to Go. This example is a somewhat stripped down version to demonstrate the use of Go kit. The [original Go application](https://github.com/marcusolsson/goddd) is maintained separately and accompanied by an [AngularJS application](https://github.com/marcusolsson/dddelivery-angularjs) as well as a mock [routing service](https://github.com/marcusolsson/pathfinder). + +### Organization + +The application consists of three application services, `booking`, `handling` and `tracking`. Each of these is an individual Go kit service as seen in previous examples. + +- __booking__ - used by the shipping company to book and route cargos. +- __handling__ - used by our staff around the world to register whenever the cargo has been received, loaded etc. +- __tracking__ - used by the customer to track the cargo along the route + +There are also a few pure domain packages that contain some intricate business-logic. They provide domain objects and services that are used by each application service to provide interesting use-cases for the user. + +`inmem` contains in-memory implementations for the repositories found in the domain packages. + +The `routing` package provides a _domain service_ that is used to query an external application for possible routes. + +## Contributing + +As with all Go kit examples you are more than welcome to contribute. If you do however, please consider contributing back to the original project as well. diff --git a/vendor/github.com/go-kit/kit/examples/shipping/booking/endpoint.go b/vendor/github.com/go-kit/kit/examples/shipping/booking/endpoint.go new file mode 100644 index 0000000..abe83f7 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/booking/endpoint.go @@ -0,0 +1,139 @@ +package booking + +import ( + "context" + "time" + + "github.com/go-kit/kit/endpoint" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" +) + +type bookCargoRequest struct { + Origin location.UNLocode + Destination location.UNLocode + ArrivalDeadline time.Time +} + +type bookCargoResponse struct { + ID cargo.TrackingID `json:"tracking_id,omitempty"` + Err error `json:"error,omitempty"` +} + +func (r bookCargoResponse) error() error { return r.Err } + +func makeBookCargoEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(bookCargoRequest) + id, err := s.BookNewCargo(req.Origin, req.Destination, req.ArrivalDeadline) + return bookCargoResponse{ID: id, Err: err}, nil + } +} + +type loadCargoRequest struct { + ID cargo.TrackingID +} + +type loadCargoResponse struct { + Cargo *Cargo `json:"cargo,omitempty"` + Err error `json:"error,omitempty"` +} + +func (r loadCargoResponse) error() error { return r.Err } + +func makeLoadCargoEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(loadCargoRequest) + c, err := s.LoadCargo(req.ID) + return loadCargoResponse{Cargo: &c, Err: err}, nil + } +} + +type requestRoutesRequest struct { + ID cargo.TrackingID +} + +type requestRoutesResponse struct { + Routes []cargo.Itinerary `json:"routes,omitempty"` + Err error `json:"error,omitempty"` +} + +func (r requestRoutesResponse) error() error { return r.Err } + +func makeRequestRoutesEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(requestRoutesRequest) + itin := s.RequestPossibleRoutesForCargo(req.ID) + return requestRoutesResponse{Routes: itin, Err: nil}, nil + } +} + +type assignToRouteRequest struct { + ID cargo.TrackingID + Itinerary cargo.Itinerary +} + +type assignToRouteResponse struct { + Err error `json:"error,omitempty"` +} + +func (r assignToRouteResponse) error() error { return r.Err } + +func makeAssignToRouteEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(assignToRouteRequest) + err := s.AssignCargoToRoute(req.ID, req.Itinerary) + return assignToRouteResponse{Err: err}, nil + } +} + +type changeDestinationRequest struct { + ID cargo.TrackingID + Destination location.UNLocode +} + +type changeDestinationResponse struct { + Err error `json:"error,omitempty"` +} + +func (r changeDestinationResponse) error() error { return r.Err } + +func makeChangeDestinationEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(changeDestinationRequest) + err := s.ChangeDestination(req.ID, req.Destination) + return changeDestinationResponse{Err: err}, nil + } +} + +type listCargosRequest struct{} + +type listCargosResponse struct { + Cargos []Cargo `json:"cargos,omitempty"` + Err error `json:"error,omitempty"` +} + +func (r listCargosResponse) error() error { return r.Err } + +func makeListCargosEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + _ = request.(listCargosRequest) + return listCargosResponse{Cargos: s.Cargos(), Err: nil}, nil + } +} + +type listLocationsRequest struct { +} + +type listLocationsResponse struct { + Locations []Location `json:"locations,omitempty"` + Err error `json:"error,omitempty"` +} + +func makeListLocationsEndpoint(s Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + _ = request.(listLocationsRequest) + return listLocationsResponse{Locations: s.Locations(), Err: nil}, nil + } +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/booking/instrumenting.go b/vendor/github.com/go-kit/kit/examples/shipping/booking/instrumenting.go new file mode 100644 index 0000000..b9b03b9 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/booking/instrumenting.go @@ -0,0 +1,88 @@ +package booking + +import ( + "time" + + "github.com/go-kit/kit/metrics" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" +) + +type instrumentingService struct { + requestCount metrics.Counter + requestLatency metrics.Histogram + Service +} + +// NewInstrumentingService returns an instance of an instrumenting Service. +func NewInstrumentingService(counter metrics.Counter, latency metrics.Histogram, s Service) Service { + return &instrumentingService{ + requestCount: counter, + requestLatency: latency, + Service: s, + } +} + +func (s *instrumentingService) BookNewCargo(origin, destination location.UNLocode, deadline time.Time) (cargo.TrackingID, error) { + defer func(begin time.Time) { + s.requestCount.With("method", "book").Add(1) + s.requestLatency.With("method", "book").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.BookNewCargo(origin, destination, deadline) +} + +func (s *instrumentingService) LoadCargo(id cargo.TrackingID) (c Cargo, err error) { + defer func(begin time.Time) { + s.requestCount.With("method", "load").Add(1) + s.requestLatency.With("method", "load").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.LoadCargo(id) +} + +func (s *instrumentingService) RequestPossibleRoutesForCargo(id cargo.TrackingID) []cargo.Itinerary { + defer func(begin time.Time) { + s.requestCount.With("method", "request_routes").Add(1) + s.requestLatency.With("method", "request_routes").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.RequestPossibleRoutesForCargo(id) +} + +func (s *instrumentingService) AssignCargoToRoute(id cargo.TrackingID, itinerary cargo.Itinerary) (err error) { + defer func(begin time.Time) { + s.requestCount.With("method", "assign_to_route").Add(1) + s.requestLatency.With("method", "assign_to_route").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.AssignCargoToRoute(id, itinerary) +} + +func (s *instrumentingService) ChangeDestination(id cargo.TrackingID, l location.UNLocode) (err error) { + defer func(begin time.Time) { + s.requestCount.With("method", "change_destination").Add(1) + s.requestLatency.With("method", "change_destination").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.ChangeDestination(id, l) +} + +func (s *instrumentingService) Cargos() []Cargo { + defer func(begin time.Time) { + s.requestCount.With("method", "list_cargos").Add(1) + s.requestLatency.With("method", "list_cargos").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.Cargos() +} + +func (s *instrumentingService) Locations() []Location { + defer func(begin time.Time) { + s.requestCount.With("method", "list_locations").Add(1) + s.requestLatency.With("method", "list_locations").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.Locations() +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/booking/logging.go b/vendor/github.com/go-kit/kit/examples/shipping/booking/logging.go new file mode 100644 index 0000000..931d430 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/booking/logging.go @@ -0,0 +1,102 @@ +package booking + +import ( + "time" + + "github.com/go-kit/kit/log" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" +) + +type loggingService struct { + logger log.Logger + Service +} + +// NewLoggingService returns a new instance of a logging Service. +func NewLoggingService(logger log.Logger, s Service) Service { + return &loggingService{logger, s} +} + +func (s *loggingService) BookNewCargo(origin location.UNLocode, destination location.UNLocode, deadline time.Time) (id cargo.TrackingID, err error) { + defer func(begin time.Time) { + s.logger.Log( + "method", "book", + "origin", origin, + "destination", destination, + "arrival_deadline", deadline, + "took", time.Since(begin), + "err", err, + ) + }(time.Now()) + return s.Service.BookNewCargo(origin, destination, deadline) +} + +func (s *loggingService) LoadCargo(id cargo.TrackingID) (c Cargo, err error) { + defer func(begin time.Time) { + s.logger.Log( + "method", "load", + "tracking_id", id, + "took", time.Since(begin), + "err", err, + ) + }(time.Now()) + return s.Service.LoadCargo(id) +} + +func (s *loggingService) RequestPossibleRoutesForCargo(id cargo.TrackingID) []cargo.Itinerary { + defer func(begin time.Time) { + s.logger.Log( + "method", "request_routes", + "tracking_id", id, + "took", time.Since(begin), + ) + }(time.Now()) + return s.Service.RequestPossibleRoutesForCargo(id) +} + +func (s *loggingService) AssignCargoToRoute(id cargo.TrackingID, itinerary cargo.Itinerary) (err error) { + defer func(begin time.Time) { + s.logger.Log( + "method", "assign_to_route", + "tracking_id", id, + "took", time.Since(begin), + "err", err, + ) + }(time.Now()) + return s.Service.AssignCargoToRoute(id, itinerary) +} + +func (s *loggingService) ChangeDestination(id cargo.TrackingID, l location.UNLocode) (err error) { + defer func(begin time.Time) { + s.logger.Log( + "method", "change_destination", + "tracking_id", id, + "destination", l, + "took", time.Since(begin), + "err", err, + ) + }(time.Now()) + return s.Service.ChangeDestination(id, l) +} + +func (s *loggingService) Cargos() []Cargo { + defer func(begin time.Time) { + s.logger.Log( + "method", "list_cargos", + "took", time.Since(begin), + ) + }(time.Now()) + return s.Service.Cargos() +} + +func (s *loggingService) Locations() []Location { + defer func(begin time.Time) { + s.logger.Log( + "method", "list_locations", + "took", time.Since(begin), + ) + }(time.Now()) + return s.Service.Locations() +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/booking/service.go b/vendor/github.com/go-kit/kit/examples/shipping/booking/service.go new file mode 100644 index 0000000..8689a5a --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/booking/service.go @@ -0,0 +1,197 @@ +// Package booking provides the use-case of booking a cargo. Used by views +// facing an administrator. +package booking + +import ( + "errors" + "time" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/routing" +) + +// ErrInvalidArgument is returned when one or more arguments are invalid. +var ErrInvalidArgument = errors.New("invalid argument") + +// Service is the interface that provides booking methods. +type Service interface { + // BookNewCargo registers a new cargo in the tracking system, not yet + // routed. + BookNewCargo(origin location.UNLocode, destination location.UNLocode, deadline time.Time) (cargo.TrackingID, error) + + // LoadCargo returns a read model of a cargo. + LoadCargo(id cargo.TrackingID) (Cargo, error) + + // RequestPossibleRoutesForCargo requests a list of itineraries describing + // possible routes for this cargo. + RequestPossibleRoutesForCargo(id cargo.TrackingID) []cargo.Itinerary + + // AssignCargoToRoute assigns a cargo to the route specified by the + // itinerary. + AssignCargoToRoute(id cargo.TrackingID, itinerary cargo.Itinerary) error + + // ChangeDestination changes the destination of a cargo. + ChangeDestination(id cargo.TrackingID, destination location.UNLocode) error + + // Cargos returns a list of all cargos that have been booked. + Cargos() []Cargo + + // Locations returns a list of registered locations. + Locations() []Location +} + +type service struct { + cargos cargo.Repository + locations location.Repository + handlingEvents cargo.HandlingEventRepository + routingService routing.Service +} + +func (s *service) AssignCargoToRoute(id cargo.TrackingID, itinerary cargo.Itinerary) error { + if id == "" || len(itinerary.Legs) == 0 { + return ErrInvalidArgument + } + + c, err := s.cargos.Find(id) + if err != nil { + return err + } + + c.AssignToRoute(itinerary) + + return s.cargos.Store(c) +} + +func (s *service) BookNewCargo(origin, destination location.UNLocode, deadline time.Time) (cargo.TrackingID, error) { + if origin == "" || destination == "" || deadline.IsZero() { + return "", ErrInvalidArgument + } + + id := cargo.NextTrackingID() + rs := cargo.RouteSpecification{ + Origin: origin, + Destination: destination, + ArrivalDeadline: deadline, + } + + c := cargo.New(id, rs) + + if err := s.cargos.Store(c); err != nil { + return "", err + } + + return c.TrackingID, nil +} + +func (s *service) LoadCargo(id cargo.TrackingID) (Cargo, error) { + if id == "" { + return Cargo{}, ErrInvalidArgument + } + + c, err := s.cargos.Find(id) + if err != nil { + return Cargo{}, err + } + + return assemble(c, s.handlingEvents), nil +} + +func (s *service) ChangeDestination(id cargo.TrackingID, destination location.UNLocode) error { + if id == "" || destination == "" { + return ErrInvalidArgument + } + + c, err := s.cargos.Find(id) + if err != nil { + return err + } + + l, err := s.locations.Find(destination) + if err != nil { + return err + } + + c.SpecifyNewRoute(cargo.RouteSpecification{ + Origin: c.Origin, + Destination: l.UNLocode, + ArrivalDeadline: c.RouteSpecification.ArrivalDeadline, + }) + + if err := s.cargos.Store(c); err != nil { + return err + } + + return nil +} + +func (s *service) RequestPossibleRoutesForCargo(id cargo.TrackingID) []cargo.Itinerary { + if id == "" { + return nil + } + + c, err := s.cargos.Find(id) + if err != nil { + return []cargo.Itinerary{} + } + + return s.routingService.FetchRoutesForSpecification(c.RouteSpecification) +} + +func (s *service) Cargos() []Cargo { + var result []Cargo + for _, c := range s.cargos.FindAll() { + result = append(result, assemble(c, s.handlingEvents)) + } + return result +} + +func (s *service) Locations() []Location { + var result []Location + for _, v := range s.locations.FindAll() { + result = append(result, Location{ + UNLocode: string(v.UNLocode), + Name: v.Name, + }) + } + return result +} + +// NewService creates a booking service with necessary dependencies. +func NewService(cargos cargo.Repository, locations location.Repository, events cargo.HandlingEventRepository, rs routing.Service) Service { + return &service{ + cargos: cargos, + locations: locations, + handlingEvents: events, + routingService: rs, + } +} + +// Location is a read model for booking views. +type Location struct { + UNLocode string `json:"locode"` + Name string `json:"name"` +} + +// Cargo is a read model for booking views. +type Cargo struct { + ArrivalDeadline time.Time `json:"arrival_deadline"` + Destination string `json:"destination"` + Legs []cargo.Leg `json:"legs,omitempty"` + Misrouted bool `json:"misrouted"` + Origin string `json:"origin"` + Routed bool `json:"routed"` + TrackingID string `json:"tracking_id"` +} + +func assemble(c *cargo.Cargo, events cargo.HandlingEventRepository) Cargo { + return Cargo{ + TrackingID: string(c.TrackingID), + Origin: string(c.Origin), + Destination: string(c.RouteSpecification.Destination), + Misrouted: c.Delivery.RoutingStatus == cargo.Misrouted, + Routed: !c.Itinerary.IsEmpty(), + ArrivalDeadline: c.RouteSpecification.ArrivalDeadline, + Legs: c.Itinerary.Legs, + } +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/booking/transport.go b/vendor/github.com/go-kit/kit/examples/shipping/booking/transport.go new file mode 100644 index 0000000..6592a9d --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/booking/transport.go @@ -0,0 +1,194 @@ +package booking + +import ( + "context" + "encoding/json" + "errors" + "net/http" + "time" + + "github.com/gorilla/mux" + + kitlog "github.com/go-kit/kit/log" + kithttp "github.com/go-kit/kit/transport/http" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" +) + +// MakeHandler returns a handler for the booking service. +func MakeHandler(bs Service, logger kitlog.Logger) http.Handler { + opts := []kithttp.ServerOption{ + kithttp.ServerErrorLogger(logger), + kithttp.ServerErrorEncoder(encodeError), + } + + bookCargoHandler := kithttp.NewServer( + makeBookCargoEndpoint(bs), + decodeBookCargoRequest, + encodeResponse, + opts..., + ) + loadCargoHandler := kithttp.NewServer( + makeLoadCargoEndpoint(bs), + decodeLoadCargoRequest, + encodeResponse, + opts..., + ) + requestRoutesHandler := kithttp.NewServer( + makeRequestRoutesEndpoint(bs), + decodeRequestRoutesRequest, + encodeResponse, + opts..., + ) + assignToRouteHandler := kithttp.NewServer( + makeAssignToRouteEndpoint(bs), + decodeAssignToRouteRequest, + encodeResponse, + opts..., + ) + changeDestinationHandler := kithttp.NewServer( + makeChangeDestinationEndpoint(bs), + decodeChangeDestinationRequest, + encodeResponse, + opts..., + ) + listCargosHandler := kithttp.NewServer( + makeListCargosEndpoint(bs), + decodeListCargosRequest, + encodeResponse, + opts..., + ) + listLocationsHandler := kithttp.NewServer( + makeListLocationsEndpoint(bs), + decodeListLocationsRequest, + encodeResponse, + opts..., + ) + + r := mux.NewRouter() + + r.Handle("/booking/v1/cargos", bookCargoHandler).Methods("POST") + r.Handle("/booking/v1/cargos", listCargosHandler).Methods("GET") + r.Handle("/booking/v1/cargos/{id}", loadCargoHandler).Methods("GET") + r.Handle("/booking/v1/cargos/{id}/request_routes", requestRoutesHandler).Methods("GET") + r.Handle("/booking/v1/cargos/{id}/assign_to_route", assignToRouteHandler).Methods("POST") + r.Handle("/booking/v1/cargos/{id}/change_destination", changeDestinationHandler).Methods("POST") + r.Handle("/booking/v1/locations", listLocationsHandler).Methods("GET") + + return r +} + +var errBadRoute = errors.New("bad route") + +func decodeBookCargoRequest(_ context.Context, r *http.Request) (interface{}, error) { + var body struct { + Origin string `json:"origin"` + Destination string `json:"destination"` + ArrivalDeadline time.Time `json:"arrival_deadline"` + } + + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + return nil, err + } + + return bookCargoRequest{ + Origin: location.UNLocode(body.Origin), + Destination: location.UNLocode(body.Destination), + ArrivalDeadline: body.ArrivalDeadline, + }, nil +} + +func decodeLoadCargoRequest(_ context.Context, r *http.Request) (interface{}, error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, errBadRoute + } + return loadCargoRequest{ID: cargo.TrackingID(id)}, nil +} + +func decodeRequestRoutesRequest(_ context.Context, r *http.Request) (interface{}, error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, errBadRoute + } + return requestRoutesRequest{ID: cargo.TrackingID(id)}, nil +} + +func decodeAssignToRouteRequest(_ context.Context, r *http.Request) (interface{}, error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, errBadRoute + } + + var itinerary cargo.Itinerary + if err := json.NewDecoder(r.Body).Decode(&itinerary); err != nil { + return nil, err + } + + return assignToRouteRequest{ + ID: cargo.TrackingID(id), + Itinerary: itinerary, + }, nil +} + +func decodeChangeDestinationRequest(_ context.Context, r *http.Request) (interface{}, error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, errBadRoute + } + + var body struct { + Destination string `json:"destination"` + } + + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + return nil, err + } + + return changeDestinationRequest{ + ID: cargo.TrackingID(id), + Destination: location.UNLocode(body.Destination), + }, nil +} + +func decodeListCargosRequest(_ context.Context, r *http.Request) (interface{}, error) { + return listCargosRequest{}, nil +} + +func decodeListLocationsRequest(_ context.Context, r *http.Request) (interface{}, error) { + return listLocationsRequest{}, nil +} + +func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error { + if e, ok := response.(errorer); ok && e.error() != nil { + encodeError(ctx, e.error(), w) + return nil + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + return json.NewEncoder(w).Encode(response) +} + +type errorer interface { + error() error +} + +// encode errors from business-logic +func encodeError(_ context.Context, err error, w http.ResponseWriter) { + switch err { + case cargo.ErrUnknown: + w.WriteHeader(http.StatusNotFound) + case ErrInvalidArgument: + w.WriteHeader(http.StatusBadRequest) + default: + w.WriteHeader(http.StatusInternalServerError) + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + json.NewEncoder(w).Encode(map[string]interface{}{ + "error": err.Error(), + }) +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/cargo/cargo.go b/vendor/github.com/go-kit/kit/examples/shipping/cargo/cargo.go new file mode 100644 index 0000000..a9440f5 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/cargo/cargo.go @@ -0,0 +1,137 @@ +// Package cargo contains the heart of the domain model. +package cargo + +import ( + "errors" + "strings" + "time" + + "github.com/pborman/uuid" + + "github.com/go-kit/kit/examples/shipping/location" +) + +// TrackingID uniquely identifies a particular cargo. +type TrackingID string + +// Cargo is the central class in the domain model. +type Cargo struct { + TrackingID TrackingID + Origin location.UNLocode + RouteSpecification RouteSpecification + Itinerary Itinerary + Delivery Delivery +} + +// SpecifyNewRoute specifies a new route for this cargo. +func (c *Cargo) SpecifyNewRoute(rs RouteSpecification) { + c.RouteSpecification = rs + c.Delivery = c.Delivery.UpdateOnRouting(c.RouteSpecification, c.Itinerary) +} + +// AssignToRoute attaches a new itinerary to this cargo. +func (c *Cargo) AssignToRoute(itinerary Itinerary) { + c.Itinerary = itinerary + c.Delivery = c.Delivery.UpdateOnRouting(c.RouteSpecification, c.Itinerary) +} + +// DeriveDeliveryProgress updates all aspects of the cargo aggregate status +// based on the current route specification, itinerary and handling of the cargo. +func (c *Cargo) DeriveDeliveryProgress(history HandlingHistory) { + c.Delivery = DeriveDeliveryFrom(c.RouteSpecification, c.Itinerary, history) +} + +// New creates a new, unrouted cargo. +func New(id TrackingID, rs RouteSpecification) *Cargo { + itinerary := Itinerary{} + history := HandlingHistory{make([]HandlingEvent, 0)} + + return &Cargo{ + TrackingID: id, + Origin: rs.Origin, + RouteSpecification: rs, + Delivery: DeriveDeliveryFrom(rs, itinerary, history), + } +} + +// Repository provides access a cargo store. +type Repository interface { + Store(cargo *Cargo) error + Find(id TrackingID) (*Cargo, error) + FindAll() []*Cargo +} + +// ErrUnknown is used when a cargo could not be found. +var ErrUnknown = errors.New("unknown cargo") + +// NextTrackingID generates a new tracking ID. +// TODO: Move to infrastructure(?) +func NextTrackingID() TrackingID { + return TrackingID(strings.Split(strings.ToUpper(uuid.New()), "-")[0]) +} + +// RouteSpecification Contains information about a route: its origin, +// destination and arrival deadline. +type RouteSpecification struct { + Origin location.UNLocode + Destination location.UNLocode + ArrivalDeadline time.Time +} + +// IsSatisfiedBy checks whether provided itinerary satisfies this +// specification. +func (s RouteSpecification) IsSatisfiedBy(itinerary Itinerary) bool { + return itinerary.Legs != nil && + s.Origin == itinerary.InitialDepartureLocation() && + s.Destination == itinerary.FinalArrivalLocation() +} + +// RoutingStatus describes status of cargo routing. +type RoutingStatus int + +// Valid routing statuses. +const ( + NotRouted RoutingStatus = iota + Misrouted + Routed +) + +func (s RoutingStatus) String() string { + switch s { + case NotRouted: + return "Not routed" + case Misrouted: + return "Misrouted" + case Routed: + return "Routed" + } + return "" +} + +// TransportStatus describes status of cargo transportation. +type TransportStatus int + +// Valid transport statuses. +const ( + NotReceived TransportStatus = iota + InPort + OnboardCarrier + Claimed + Unknown +) + +func (s TransportStatus) String() string { + switch s { + case NotReceived: + return "Not received" + case InPort: + return "In port" + case OnboardCarrier: + return "Onboard carrier" + case Claimed: + return "Claimed" + case Unknown: + return "Unknown" + } + return "" +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/cargo/delivery.go b/vendor/github.com/go-kit/kit/examples/shipping/cargo/delivery.go new file mode 100644 index 0000000..34f079d --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/cargo/delivery.go @@ -0,0 +1,174 @@ +package cargo + +import ( + "time" + + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +// Delivery is the actual transportation of the cargo, as opposed to the +// customer requirement (RouteSpecification) and the plan (Itinerary). +type Delivery struct { + Itinerary Itinerary + RouteSpecification RouteSpecification + RoutingStatus RoutingStatus + TransportStatus TransportStatus + NextExpectedActivity HandlingActivity + LastEvent HandlingEvent + LastKnownLocation location.UNLocode + CurrentVoyage voyage.Number + ETA time.Time + IsMisdirected bool + IsUnloadedAtDestination bool +} + +// UpdateOnRouting creates a new delivery snapshot to reflect changes in +// routing, i.e. when the route specification or the itinerary has changed but +// no additional handling of the cargo has been performed. +func (d Delivery) UpdateOnRouting(rs RouteSpecification, itinerary Itinerary) Delivery { + return newDelivery(d.LastEvent, itinerary, rs) +} + +// IsOnTrack checks if the delivery is on track. +func (d Delivery) IsOnTrack() bool { + return d.RoutingStatus == Routed && !d.IsMisdirected +} + +// DeriveDeliveryFrom creates a new delivery snapshot based on the complete +// handling history of a cargo, as well as its route specification and +// itinerary. +func DeriveDeliveryFrom(rs RouteSpecification, itinerary Itinerary, history HandlingHistory) Delivery { + lastEvent, _ := history.MostRecentlyCompletedEvent() + return newDelivery(lastEvent, itinerary, rs) +} + +// newDelivery creates a up-to-date delivery based on an handling event, +// itinerary and a route specification. +func newDelivery(lastEvent HandlingEvent, itinerary Itinerary, rs RouteSpecification) Delivery { + var ( + routingStatus = calculateRoutingStatus(itinerary, rs) + transportStatus = calculateTransportStatus(lastEvent) + lastKnownLocation = calculateLastKnownLocation(lastEvent) + isMisdirected = calculateMisdirectedStatus(lastEvent, itinerary) + isUnloadedAtDestination = calculateUnloadedAtDestination(lastEvent, rs) + currentVoyage = calculateCurrentVoyage(transportStatus, lastEvent) + ) + + d := Delivery{ + LastEvent: lastEvent, + Itinerary: itinerary, + RouteSpecification: rs, + RoutingStatus: routingStatus, + TransportStatus: transportStatus, + LastKnownLocation: lastKnownLocation, + IsMisdirected: isMisdirected, + IsUnloadedAtDestination: isUnloadedAtDestination, + CurrentVoyage: currentVoyage, + } + + d.NextExpectedActivity = calculateNextExpectedActivity(d) + d.ETA = calculateETA(d) + + return d +} + +// Below are internal functions used when creating a new delivery. + +func calculateRoutingStatus(itinerary Itinerary, rs RouteSpecification) RoutingStatus { + if itinerary.Legs == nil { + return NotRouted + } + + if rs.IsSatisfiedBy(itinerary) { + return Routed + } + + return Misrouted +} + +func calculateMisdirectedStatus(event HandlingEvent, itinerary Itinerary) bool { + if event.Activity.Type == NotHandled { + return false + } + + return !itinerary.IsExpected(event) +} + +func calculateUnloadedAtDestination(event HandlingEvent, rs RouteSpecification) bool { + if event.Activity.Type == NotHandled { + return false + } + + return event.Activity.Type == Unload && rs.Destination == event.Activity.Location +} + +func calculateTransportStatus(event HandlingEvent) TransportStatus { + switch event.Activity.Type { + case NotHandled: + return NotReceived + case Load: + return OnboardCarrier + case Unload: + return InPort + case Receive: + return InPort + case Customs: + return InPort + case Claim: + return Claimed + } + return Unknown +} + +func calculateLastKnownLocation(event HandlingEvent) location.UNLocode { + return event.Activity.Location +} + +func calculateNextExpectedActivity(d Delivery) HandlingActivity { + if !d.IsOnTrack() { + return HandlingActivity{} + } + + switch d.LastEvent.Activity.Type { + case NotHandled: + return HandlingActivity{Type: Receive, Location: d.RouteSpecification.Origin} + case Receive: + l := d.Itinerary.Legs[0] + return HandlingActivity{Type: Load, Location: l.LoadLocation, VoyageNumber: l.VoyageNumber} + case Load: + for _, l := range d.Itinerary.Legs { + if l.LoadLocation == d.LastEvent.Activity.Location { + return HandlingActivity{Type: Unload, Location: l.UnloadLocation, VoyageNumber: l.VoyageNumber} + } + } + case Unload: + for i, l := range d.Itinerary.Legs { + if l.UnloadLocation == d.LastEvent.Activity.Location { + if i < len(d.Itinerary.Legs)-1 { + return HandlingActivity{Type: Load, Location: d.Itinerary.Legs[i+1].LoadLocation, VoyageNumber: d.Itinerary.Legs[i+1].VoyageNumber} + } + + return HandlingActivity{Type: Claim, Location: l.UnloadLocation} + } + } + } + + return HandlingActivity{} +} + +func calculateCurrentVoyage(transportStatus TransportStatus, event HandlingEvent) voyage.Number { + if transportStatus == OnboardCarrier && event.Activity.Type != NotHandled { + return event.Activity.VoyageNumber + } + + return voyage.Number("") +} + +func calculateETA(d Delivery) time.Time { + if !d.IsOnTrack() { + return time.Time{} + } + + return d.Itinerary.FinalArrivalTime() +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/cargo/handling.go b/vendor/github.com/go-kit/kit/examples/shipping/cargo/handling.go new file mode 100644 index 0000000..bec8509 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/cargo/handling.go @@ -0,0 +1,121 @@ +package cargo + +// TODO: It would make sense to have this in its own package. Unfortunately, +// then there would be a circular dependency between the cargo and handling +// packages since cargo.Delivery would use handling.HandlingEvent and +// handling.HandlingEvent would use cargo.TrackingID. Also, +// HandlingEventFactory depends on the cargo repository. +// +// It would make sense not having the cargo package depend on handling. + +import ( + "errors" + "time" + + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +// HandlingActivity represents how and where a cargo can be handled, and can +// be used to express predictions about what is expected to happen to a cargo +// in the future. +type HandlingActivity struct { + Type HandlingEventType + Location location.UNLocode + VoyageNumber voyage.Number +} + +// HandlingEvent is used to register the event when, for instance, a cargo is +// unloaded from a carrier at a some location at a given time. +type HandlingEvent struct { + TrackingID TrackingID + Activity HandlingActivity +} + +// HandlingEventType describes type of a handling event. +type HandlingEventType int + +// Valid handling event types. +const ( + NotHandled HandlingEventType = iota + Load + Unload + Receive + Claim + Customs +) + +func (t HandlingEventType) String() string { + switch t { + case NotHandled: + return "Not Handled" + case Load: + return "Load" + case Unload: + return "Unload" + case Receive: + return "Receive" + case Claim: + return "Claim" + case Customs: + return "Customs" + } + + return "" +} + +// HandlingHistory is the handling history of a cargo. +type HandlingHistory struct { + HandlingEvents []HandlingEvent +} + +// MostRecentlyCompletedEvent returns most recently completed handling event. +func (h HandlingHistory) MostRecentlyCompletedEvent() (HandlingEvent, error) { + if len(h.HandlingEvents) == 0 { + return HandlingEvent{}, errors.New("delivery history is empty") + } + + return h.HandlingEvents[len(h.HandlingEvents)-1], nil +} + +// HandlingEventRepository provides access a handling event store. +type HandlingEventRepository interface { + Store(e HandlingEvent) + QueryHandlingHistory(TrackingID) HandlingHistory +} + +// HandlingEventFactory creates handling events. +type HandlingEventFactory struct { + CargoRepository Repository + VoyageRepository voyage.Repository + LocationRepository location.Repository +} + +// CreateHandlingEvent creates a validated handling event. +func (f *HandlingEventFactory) CreateHandlingEvent(registered time.Time, completed time.Time, id TrackingID, + voyageNumber voyage.Number, unLocode location.UNLocode, eventType HandlingEventType) (HandlingEvent, error) { + + if _, err := f.CargoRepository.Find(id); err != nil { + return HandlingEvent{}, err + } + + if _, err := f.VoyageRepository.Find(voyageNumber); err != nil { + // TODO: This is pretty ugly, but when creating a Receive event, the voyage number is not known. + if len(voyageNumber) > 0 { + return HandlingEvent{}, err + } + } + + if _, err := f.LocationRepository.Find(unLocode); err != nil { + return HandlingEvent{}, err + } + + return HandlingEvent{ + TrackingID: id, + Activity: HandlingActivity{ + Type: eventType, + Location: unLocode, + VoyageNumber: voyageNumber, + }, + }, nil +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/cargo/itinerary.go b/vendor/github.com/go-kit/kit/examples/shipping/cargo/itinerary.go new file mode 100644 index 0000000..6b5088e --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/cargo/itinerary.go @@ -0,0 +1,91 @@ +package cargo + +import ( + "time" + + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +// Leg describes the transportation between two locations on a voyage. +type Leg struct { + VoyageNumber voyage.Number `json:"voyage_number"` + LoadLocation location.UNLocode `json:"from"` + UnloadLocation location.UNLocode `json:"to"` + LoadTime time.Time `json:"load_time"` + UnloadTime time.Time `json:"unload_time"` +} + +// NewLeg creates a new itinerary leg. +func NewLeg(voyageNumber voyage.Number, loadLocation, unloadLocation location.UNLocode, loadTime, unloadTime time.Time) Leg { + return Leg{ + VoyageNumber: voyageNumber, + LoadLocation: loadLocation, + UnloadLocation: unloadLocation, + LoadTime: loadTime, + UnloadTime: unloadTime, + } +} + +// Itinerary specifies steps required to transport a cargo from its origin to +// destination. +type Itinerary struct { + Legs []Leg `json:"legs"` +} + +// InitialDepartureLocation returns the start of the itinerary. +func (i Itinerary) InitialDepartureLocation() location.UNLocode { + if i.IsEmpty() { + return location.UNLocode("") + } + return i.Legs[0].LoadLocation +} + +// FinalArrivalLocation returns the end of the itinerary. +func (i Itinerary) FinalArrivalLocation() location.UNLocode { + if i.IsEmpty() { + return location.UNLocode("") + } + return i.Legs[len(i.Legs)-1].UnloadLocation +} + +// FinalArrivalTime returns the expected arrival time at final destination. +func (i Itinerary) FinalArrivalTime() time.Time { + return i.Legs[len(i.Legs)-1].UnloadTime +} + +// IsEmpty checks if the itinerary contains at least one leg. +func (i Itinerary) IsEmpty() bool { + return i.Legs == nil || len(i.Legs) == 0 +} + +// IsExpected checks if the given handling event is expected when executing +// this itinerary. +func (i Itinerary) IsExpected(event HandlingEvent) bool { + if i.IsEmpty() { + return true + } + + switch event.Activity.Type { + case Receive: + return i.InitialDepartureLocation() == event.Activity.Location + case Load: + for _, l := range i.Legs { + if l.LoadLocation == event.Activity.Location && l.VoyageNumber == event.Activity.VoyageNumber { + return true + } + } + return false + case Unload: + for _, l := range i.Legs { + if l.UnloadLocation == event.Activity.Location && l.VoyageNumber == event.Activity.VoyageNumber { + return true + } + } + return false + case Claim: + return i.FinalArrivalLocation() == event.Activity.Location + } + + return true +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/handling/endpoint.go b/vendor/github.com/go-kit/kit/examples/shipping/handling/endpoint.go new file mode 100644 index 0000000..555d087 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/handling/endpoint.go @@ -0,0 +1,34 @@ +package handling + +import ( + "context" + "time" + + "github.com/go-kit/kit/endpoint" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +type registerIncidentRequest struct { + ID cargo.TrackingID + Location location.UNLocode + Voyage voyage.Number + EventType cargo.HandlingEventType + CompletionTime time.Time +} + +type registerIncidentResponse struct { + Err error `json:"error,omitempty"` +} + +func (r registerIncidentResponse) error() error { return r.Err } + +func makeRegisterIncidentEndpoint(hs Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(registerIncidentRequest) + err := hs.RegisterHandlingEvent(req.CompletionTime, req.ID, req.Voyage, req.Location, req.EventType) + return registerIncidentResponse{Err: err}, nil + } +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/handling/instrumenting.go b/vendor/github.com/go-kit/kit/examples/shipping/handling/instrumenting.go new file mode 100644 index 0000000..fecce04 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/handling/instrumenting.go @@ -0,0 +1,37 @@ +package handling + +import ( + "time" + + "github.com/go-kit/kit/metrics" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +type instrumentingService struct { + requestCount metrics.Counter + requestLatency metrics.Histogram + Service +} + +// NewInstrumentingService returns an instance of an instrumenting Service. +func NewInstrumentingService(counter metrics.Counter, latency metrics.Histogram, s Service) Service { + return &instrumentingService{ + requestCount: counter, + requestLatency: latency, + Service: s, + } +} + +func (s *instrumentingService) RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number, + loc location.UNLocode, eventType cargo.HandlingEventType) error { + + defer func(begin time.Time) { + s.requestCount.With("method", "register_incident").Add(1) + s.requestLatency.With("method", "register_incident").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.RegisterHandlingEvent(completed, id, voyageNumber, loc, eventType) +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/handling/logging.go b/vendor/github.com/go-kit/kit/examples/shipping/handling/logging.go new file mode 100644 index 0000000..84722fb --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/handling/logging.go @@ -0,0 +1,38 @@ +package handling + +import ( + "time" + + "github.com/go-kit/kit/log" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +type loggingService struct { + logger log.Logger + Service +} + +// NewLoggingService returns a new instance of a logging Service. +func NewLoggingService(logger log.Logger, s Service) Service { + return &loggingService{logger, s} +} + +func (s *loggingService) RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number, + unLocode location.UNLocode, eventType cargo.HandlingEventType) (err error) { + defer func(begin time.Time) { + s.logger.Log( + "method", "register_incident", + "tracking_id", id, + "location", unLocode, + "voyage", voyageNumber, + "event_type", eventType, + "completion_time", completed, + "took", time.Since(begin), + "err", err, + ) + }(time.Now()) + return s.Service.RegisterHandlingEvent(completed, id, voyageNumber, unLocode, eventType) +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/handling/service.go b/vendor/github.com/go-kit/kit/examples/shipping/handling/service.go new file mode 100644 index 0000000..83d503a --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/handling/service.go @@ -0,0 +1,76 @@ +// Package handling provides the use-case for registering incidents. Used by +// views facing the people handling the cargo along its route. +package handling + +import ( + "errors" + "time" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/inspection" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +// ErrInvalidArgument is returned when one or more arguments are invalid. +var ErrInvalidArgument = errors.New("invalid argument") + +// EventHandler provides a means of subscribing to registered handling events. +type EventHandler interface { + CargoWasHandled(cargo.HandlingEvent) +} + +// Service provides handling operations. +type Service interface { + // RegisterHandlingEvent registers a handling event in the system, and + // notifies interested parties that a cargo has been handled. + RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number, + unLocode location.UNLocode, eventType cargo.HandlingEventType) error +} + +type service struct { + handlingEventRepository cargo.HandlingEventRepository + handlingEventFactory cargo.HandlingEventFactory + handlingEventHandler EventHandler +} + +func (s *service) RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number, + loc location.UNLocode, eventType cargo.HandlingEventType) error { + if completed.IsZero() || id == "" || loc == "" || eventType == cargo.NotHandled { + return ErrInvalidArgument + } + + e, err := s.handlingEventFactory.CreateHandlingEvent(time.Now(), completed, id, voyageNumber, loc, eventType) + if err != nil { + return err + } + + s.handlingEventRepository.Store(e) + s.handlingEventHandler.CargoWasHandled(e) + + return nil +} + +// NewService creates a handling event service with necessary dependencies. +func NewService(r cargo.HandlingEventRepository, f cargo.HandlingEventFactory, h EventHandler) Service { + return &service{ + handlingEventRepository: r, + handlingEventFactory: f, + handlingEventHandler: h, + } +} + +type handlingEventHandler struct { + InspectionService inspection.Service +} + +func (h *handlingEventHandler) CargoWasHandled(event cargo.HandlingEvent) { + h.InspectionService.InspectCargo(event.TrackingID) +} + +// NewEventHandler returns a new instance of a EventHandler. +func NewEventHandler(s inspection.Service) EventHandler { + return &handlingEventHandler{ + InspectionService: s, + } +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/handling/transport.go b/vendor/github.com/go-kit/kit/examples/shipping/handling/transport.go new file mode 100644 index 0000000..065bda1 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/handling/transport.go @@ -0,0 +1,100 @@ +package handling + +import ( + "context" + "encoding/json" + "net/http" + "time" + + "github.com/gorilla/mux" + + kitlog "github.com/go-kit/kit/log" + kithttp "github.com/go-kit/kit/transport/http" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +// MakeHandler returns a handler for the handling service. +func MakeHandler(hs Service, logger kitlog.Logger) http.Handler { + r := mux.NewRouter() + + opts := []kithttp.ServerOption{ + kithttp.ServerErrorLogger(logger), + kithttp.ServerErrorEncoder(encodeError), + } + + registerIncidentHandler := kithttp.NewServer( + makeRegisterIncidentEndpoint(hs), + decodeRegisterIncidentRequest, + encodeResponse, + opts..., + ) + + r.Handle("/handling/v1/incidents", registerIncidentHandler).Methods("POST") + + return r +} + +func decodeRegisterIncidentRequest(_ context.Context, r *http.Request) (interface{}, error) { + var body struct { + CompletionTime time.Time `json:"completion_time"` + TrackingID string `json:"tracking_id"` + VoyageNumber string `json:"voyage"` + Location string `json:"location"` + EventType string `json:"event_type"` + } + + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + return nil, err + } + + return registerIncidentRequest{ + CompletionTime: body.CompletionTime, + ID: cargo.TrackingID(body.TrackingID), + Voyage: voyage.Number(body.VoyageNumber), + Location: location.UNLocode(body.Location), + EventType: stringToEventType(body.EventType), + }, nil +} + +func stringToEventType(s string) cargo.HandlingEventType { + types := map[string]cargo.HandlingEventType{ + cargo.Receive.String(): cargo.Receive, + cargo.Load.String(): cargo.Load, + cargo.Unload.String(): cargo.Unload, + cargo.Customs.String(): cargo.Customs, + cargo.Claim.String(): cargo.Claim, + } + return types[s] +} + +func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error { + if e, ok := response.(errorer); ok && e.error() != nil { + encodeError(ctx, e.error(), w) + return nil + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + return json.NewEncoder(w).Encode(response) +} + +type errorer interface { + error() error +} + +// encode errors from business-logic +func encodeError(_ context.Context, err error, w http.ResponseWriter) { + switch err { + case cargo.ErrUnknown: + w.WriteHeader(http.StatusNotFound) + case ErrInvalidArgument: + w.WriteHeader(http.StatusBadRequest) + default: + w.WriteHeader(http.StatusInternalServerError) + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + json.NewEncoder(w).Encode(map[string]interface{}{ + "error": err.Error(), + }) +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/inmem/inmem.go b/vendor/github.com/go-kit/kit/examples/shipping/inmem/inmem.go new file mode 100644 index 0000000..f941b7e --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/inmem/inmem.go @@ -0,0 +1,142 @@ +// Package inmem provides in-memory implementations of all the domain repositories. +package inmem + +import ( + "sync" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +type cargoRepository struct { + mtx sync.RWMutex + cargos map[cargo.TrackingID]*cargo.Cargo +} + +func (r *cargoRepository) Store(c *cargo.Cargo) error { + r.mtx.Lock() + defer r.mtx.Unlock() + r.cargos[c.TrackingID] = c + return nil +} + +func (r *cargoRepository) Find(id cargo.TrackingID) (*cargo.Cargo, error) { + r.mtx.RLock() + defer r.mtx.RUnlock() + if val, ok := r.cargos[id]; ok { + return val, nil + } + return nil, cargo.ErrUnknown +} + +func (r *cargoRepository) FindAll() []*cargo.Cargo { + r.mtx.RLock() + defer r.mtx.RUnlock() + c := make([]*cargo.Cargo, 0, len(r.cargos)) + for _, val := range r.cargos { + c = append(c, val) + } + return c +} + +// NewCargoRepository returns a new instance of a in-memory cargo repository. +func NewCargoRepository() cargo.Repository { + return &cargoRepository{ + cargos: make(map[cargo.TrackingID]*cargo.Cargo), + } +} + +type locationRepository struct { + locations map[location.UNLocode]*location.Location +} + +func (r *locationRepository) Find(locode location.UNLocode) (*location.Location, error) { + if l, ok := r.locations[locode]; ok { + return l, nil + } + return nil, location.ErrUnknown +} + +func (r *locationRepository) FindAll() []*location.Location { + l := make([]*location.Location, 0, len(r.locations)) + for _, val := range r.locations { + l = append(l, val) + } + return l +} + +// NewLocationRepository returns a new instance of a in-memory location repository. +func NewLocationRepository() location.Repository { + r := &locationRepository{ + locations: make(map[location.UNLocode]*location.Location), + } + + r.locations[location.SESTO] = location.Stockholm + r.locations[location.AUMEL] = location.Melbourne + r.locations[location.CNHKG] = location.Hongkong + r.locations[location.JNTKO] = location.Tokyo + r.locations[location.NLRTM] = location.Rotterdam + r.locations[location.DEHAM] = location.Hamburg + + return r +} + +type voyageRepository struct { + voyages map[voyage.Number]*voyage.Voyage +} + +func (r *voyageRepository) Find(voyageNumber voyage.Number) (*voyage.Voyage, error) { + if v, ok := r.voyages[voyageNumber]; ok { + return v, nil + } + + return nil, voyage.ErrUnknown +} + +// NewVoyageRepository returns a new instance of a in-memory voyage repository. +func NewVoyageRepository() voyage.Repository { + r := &voyageRepository{ + voyages: make(map[voyage.Number]*voyage.Voyage), + } + + r.voyages[voyage.V100.Number] = voyage.V100 + r.voyages[voyage.V300.Number] = voyage.V300 + r.voyages[voyage.V400.Number] = voyage.V400 + + r.voyages[voyage.V0100S.Number] = voyage.V0100S + r.voyages[voyage.V0200T.Number] = voyage.V0200T + r.voyages[voyage.V0300A.Number] = voyage.V0300A + r.voyages[voyage.V0301S.Number] = voyage.V0301S + r.voyages[voyage.V0400S.Number] = voyage.V0400S + + return r +} + +type handlingEventRepository struct { + mtx sync.RWMutex + events map[cargo.TrackingID][]cargo.HandlingEvent +} + +func (r *handlingEventRepository) Store(e cargo.HandlingEvent) { + r.mtx.Lock() + defer r.mtx.Unlock() + // Make array if it's the first event with this tracking ID. + if _, ok := r.events[e.TrackingID]; !ok { + r.events[e.TrackingID] = make([]cargo.HandlingEvent, 0) + } + r.events[e.TrackingID] = append(r.events[e.TrackingID], e) +} + +func (r *handlingEventRepository) QueryHandlingHistory(id cargo.TrackingID) cargo.HandlingHistory { + r.mtx.RLock() + defer r.mtx.RUnlock() + return cargo.HandlingHistory{HandlingEvents: r.events[id]} +} + +// NewHandlingEventRepository returns a new instance of a in-memory handling event repository. +func NewHandlingEventRepository() cargo.HandlingEventRepository { + return &handlingEventRepository{ + events: make(map[cargo.TrackingID][]cargo.HandlingEvent), + } +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/inspection/inspection.go b/vendor/github.com/go-kit/kit/examples/shipping/inspection/inspection.go new file mode 100644 index 0000000..2ebf73d --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/inspection/inspection.go @@ -0,0 +1,53 @@ +// Package inspection provides means to inspect cargos. +package inspection + +import ( + "github.com/go-kit/kit/examples/shipping/cargo" +) + +// EventHandler provides means of subscribing to inspection events. +type EventHandler interface { + CargoWasMisdirected(*cargo.Cargo) + CargoHasArrived(*cargo.Cargo) +} + +// Service provides cargo inspection operations. +type Service interface { + // InspectCargo inspects cargo and send relevant notifications to + // interested parties, for example if a cargo has been misdirected, or + // unloaded at the final destination. + InspectCargo(id cargo.TrackingID) +} + +type service struct { + cargos cargo.Repository + events cargo.HandlingEventRepository + handler EventHandler +} + +// TODO: Should be transactional +func (s *service) InspectCargo(id cargo.TrackingID) { + c, err := s.cargos.Find(id) + if err != nil { + return + } + + h := s.events.QueryHandlingHistory(id) + + c.DeriveDeliveryProgress(h) + + if c.Delivery.IsMisdirected { + s.handler.CargoWasMisdirected(c) + } + + if c.Delivery.IsUnloadedAtDestination { + s.handler.CargoHasArrived(c) + } + + s.cargos.Store(c) +} + +// NewService creates a inspection service with necessary dependencies. +func NewService(cargos cargo.Repository, events cargo.HandlingEventRepository, handler EventHandler) Service { + return &service{cargos, events, handler} +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/location/location.go b/vendor/github.com/go-kit/kit/examples/shipping/location/location.go new file mode 100644 index 0000000..ee2e5d4 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/location/location.go @@ -0,0 +1,29 @@ +// Package location provides the Location aggregate. +package location + +import ( + "errors" +) + +// UNLocode is the United Nations location code that uniquely identifies a +// particular location. +// +// http://www.unece.org/cefact/locode/ +// http://www.unece.org/cefact/locode/DocColumnDescription.htm#LOCODE +type UNLocode string + +// Location is a location is our model is stops on a journey, such as cargo +// origin or destination, or carrier movement endpoints. +type Location struct { + UNLocode UNLocode + Name string +} + +// ErrUnknown is used when a location could not be found. +var ErrUnknown = errors.New("unknown location") + +// Repository provides access a location store. +type Repository interface { + Find(locode UNLocode) (*Location, error) + FindAll() []*Location +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/location/sample_locations.go b/vendor/github.com/go-kit/kit/examples/shipping/location/sample_locations.go new file mode 100644 index 0000000..7fd34ef --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/location/sample_locations.go @@ -0,0 +1,27 @@ +package location + +// Sample UN locodes. +var ( + SESTO UNLocode = "SESTO" + AUMEL UNLocode = "AUMEL" + CNHKG UNLocode = "CNHKG" + USNYC UNLocode = "USNYC" + USCHI UNLocode = "USCHI" + JNTKO UNLocode = "JNTKO" + DEHAM UNLocode = "DEHAM" + NLRTM UNLocode = "NLRTM" + FIHEL UNLocode = "FIHEL" +) + +// Sample locations. +var ( + Stockholm = &Location{SESTO, "Stockholm"} + Melbourne = &Location{AUMEL, "Melbourne"} + Hongkong = &Location{CNHKG, "Hongkong"} + NewYork = &Location{USNYC, "New York"} + Chicago = &Location{USCHI, "Chicago"} + Tokyo = &Location{JNTKO, "Tokyo"} + Hamburg = &Location{DEHAM, "Hamburg"} + Rotterdam = &Location{NLRTM, "Rotterdam"} + Helsinki = &Location{FIHEL, "Helsinki"} +) diff --git a/vendor/github.com/go-kit/kit/examples/shipping/main.go b/vendor/github.com/go-kit/kit/examples/shipping/main.go new file mode 100644 index 0000000..a4b42f7 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/main.go @@ -0,0 +1,212 @@ +package main + +import ( + "context" + "flag" + "fmt" + "net/http" + "os" + "os/signal" + "sync" + "syscall" + "time" + + stdprometheus "github.com/prometheus/client_golang/prometheus" + + "github.com/go-kit/kit/log" + kitprometheus "github.com/go-kit/kit/metrics/prometheus" + + "github.com/go-kit/kit/examples/shipping/booking" + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/handling" + "github.com/go-kit/kit/examples/shipping/inmem" + "github.com/go-kit/kit/examples/shipping/inspection" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/routing" + "github.com/go-kit/kit/examples/shipping/tracking" +) + +const ( + defaultPort = "8080" + defaultRoutingServiceURL = "http://localhost:7878" +) + +func main() { + var ( + addr = envString("PORT", defaultPort) + rsurl = envString("ROUTINGSERVICE_URL", defaultRoutingServiceURL) + + httpAddr = flag.String("http.addr", ":"+addr, "HTTP listen address") + routingServiceURL = flag.String("service.routing", rsurl, "routing service URL") + + ctx = context.Background() + ) + + flag.Parse() + + var logger log.Logger + logger = log.NewLogfmtLogger(os.Stderr) + logger = &serializedLogger{Logger: logger} + logger = log.With(logger, "ts", log.DefaultTimestampUTC) + + var ( + cargos = inmem.NewCargoRepository() + locations = inmem.NewLocationRepository() + voyages = inmem.NewVoyageRepository() + handlingEvents = inmem.NewHandlingEventRepository() + ) + + // Configure some questionable dependencies. + var ( + handlingEventFactory = cargo.HandlingEventFactory{ + CargoRepository: cargos, + VoyageRepository: voyages, + LocationRepository: locations, + } + handlingEventHandler = handling.NewEventHandler( + inspection.NewService(cargos, handlingEvents, nil), + ) + ) + + // Facilitate testing by adding some cargos. + storeTestData(cargos) + + fieldKeys := []string{"method"} + + var rs routing.Service + rs = routing.NewProxyingMiddleware(ctx, *routingServiceURL)(rs) + + var bs booking.Service + bs = booking.NewService(cargos, locations, handlingEvents, rs) + bs = booking.NewLoggingService(log.With(logger, "component", "booking"), bs) + bs = booking.NewInstrumentingService( + kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{ + Namespace: "api", + Subsystem: "booking_service", + Name: "request_count", + Help: "Number of requests received.", + }, fieldKeys), + kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{ + Namespace: "api", + Subsystem: "booking_service", + Name: "request_latency_microseconds", + Help: "Total duration of requests in microseconds.", + }, fieldKeys), + bs, + ) + + var ts tracking.Service + ts = tracking.NewService(cargos, handlingEvents) + ts = tracking.NewLoggingService(log.With(logger, "component", "tracking"), ts) + ts = tracking.NewInstrumentingService( + kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{ + Namespace: "api", + Subsystem: "tracking_service", + Name: "request_count", + Help: "Number of requests received.", + }, fieldKeys), + kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{ + Namespace: "api", + Subsystem: "tracking_service", + Name: "request_latency_microseconds", + Help: "Total duration of requests in microseconds.", + }, fieldKeys), + ts, + ) + + var hs handling.Service + hs = handling.NewService(handlingEvents, handlingEventFactory, handlingEventHandler) + hs = handling.NewLoggingService(log.With(logger, "component", "handling"), hs) + hs = handling.NewInstrumentingService( + kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{ + Namespace: "api", + Subsystem: "handling_service", + Name: "request_count", + Help: "Number of requests received.", + }, fieldKeys), + kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{ + Namespace: "api", + Subsystem: "handling_service", + Name: "request_latency_microseconds", + Help: "Total duration of requests in microseconds.", + }, fieldKeys), + hs, + ) + + httpLogger := log.With(logger, "component", "http") + + mux := http.NewServeMux() + + mux.Handle("/booking/v1/", booking.MakeHandler(bs, httpLogger)) + mux.Handle("/tracking/v1/", tracking.MakeHandler(ts, httpLogger)) + mux.Handle("/handling/v1/", handling.MakeHandler(hs, httpLogger)) + + http.Handle("/", accessControl(mux)) + http.Handle("/metrics", stdprometheus.Handler()) + + errs := make(chan error, 2) + go func() { + logger.Log("transport", "http", "address", *httpAddr, "msg", "listening") + errs <- http.ListenAndServe(*httpAddr, nil) + }() + go func() { + c := make(chan os.Signal) + signal.Notify(c, syscall.SIGINT) + errs <- fmt.Errorf("%s", <-c) + }() + + logger.Log("terminated", <-errs) +} + +func accessControl(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "Origin, Content-Type") + + if r.Method == "OPTIONS" { + return + } + + h.ServeHTTP(w, r) + }) +} + +func envString(env, fallback string) string { + e := os.Getenv(env) + if e == "" { + return fallback + } + return e +} + +func storeTestData(r cargo.Repository) { + test1 := cargo.New("FTL456", cargo.RouteSpecification{ + Origin: location.AUMEL, + Destination: location.SESTO, + ArrivalDeadline: time.Now().AddDate(0, 0, 7), + }) + if err := r.Store(test1); err != nil { + panic(err) + } + + test2 := cargo.New("ABC123", cargo.RouteSpecification{ + Origin: location.SESTO, + Destination: location.CNHKG, + ArrivalDeadline: time.Now().AddDate(0, 0, 14), + }) + if err := r.Store(test2); err != nil { + panic(err) + } +} + +type serializedLogger struct { + mtx sync.Mutex + log.Logger +} + +func (l *serializedLogger) Log(keyvals ...interface{}) error { + l.mtx.Lock() + defer l.mtx.Unlock() + return l.Logger.Log(keyvals...) +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/routing/proxying.go b/vendor/github.com/go-kit/kit/examples/shipping/routing/proxying.go new file mode 100644 index 0000000..0c9150b --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/routing/proxying.go @@ -0,0 +1,117 @@ +package routing + +import ( + "context" + "encoding/json" + "net/http" + "net/url" + "time" + + "github.com/go-kit/kit/circuitbreaker" + "github.com/go-kit/kit/endpoint" + kithttp "github.com/go-kit/kit/transport/http" + + "github.com/go-kit/kit/examples/shipping/cargo" + "github.com/go-kit/kit/examples/shipping/location" + "github.com/go-kit/kit/examples/shipping/voyage" +) + +type proxyService struct { + context.Context + FetchRoutesEndpoint endpoint.Endpoint + Service +} + +func (s proxyService) FetchRoutesForSpecification(rs cargo.RouteSpecification) []cargo.Itinerary { + response, err := s.FetchRoutesEndpoint(s.Context, fetchRoutesRequest{ + From: string(rs.Origin), + To: string(rs.Destination), + }) + if err != nil { + return []cargo.Itinerary{} + } + + resp := response.(fetchRoutesResponse) + + var itineraries []cargo.Itinerary + for _, r := range resp.Paths { + var legs []cargo.Leg + for _, e := range r.Edges { + legs = append(legs, cargo.Leg{ + VoyageNumber: voyage.Number(e.Voyage), + LoadLocation: location.UNLocode(e.Origin), + UnloadLocation: location.UNLocode(e.Destination), + LoadTime: e.Departure, + UnloadTime: e.Arrival, + }) + } + + itineraries = append(itineraries, cargo.Itinerary{Legs: legs}) + } + + return itineraries +} + +// ServiceMiddleware defines a middleware for a routing service. +type ServiceMiddleware func(Service) Service + +// NewProxyingMiddleware returns a new instance of a proxying middleware. +func NewProxyingMiddleware(ctx context.Context, proxyURL string) ServiceMiddleware { + return func(next Service) Service { + var e endpoint.Endpoint + e = makeFetchRoutesEndpoint(ctx, proxyURL) + e = circuitbreaker.Hystrix("fetch-routes")(e) + return proxyService{ctx, e, next} + } +} + +type fetchRoutesRequest struct { + From string + To string +} + +type fetchRoutesResponse struct { + Paths []struct { + Edges []struct { + Origin string `json:"origin"` + Destination string `json:"destination"` + Voyage string `json:"voyage"` + Departure time.Time `json:"departure"` + Arrival time.Time `json:"arrival"` + } `json:"edges"` + } `json:"paths"` +} + +func makeFetchRoutesEndpoint(ctx context.Context, instance string) endpoint.Endpoint { + u, err := url.Parse(instance) + if err != nil { + panic(err) + } + if u.Path == "" { + u.Path = "/paths" + } + return kithttp.NewClient( + "GET", u, + encodeFetchRoutesRequest, + decodeFetchRoutesResponse, + ).Endpoint() +} + +func decodeFetchRoutesResponse(_ context.Context, resp *http.Response) (interface{}, error) { + var response fetchRoutesResponse + if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { + return nil, err + } + return response, nil +} + +func encodeFetchRoutesRequest(_ context.Context, r *http.Request, request interface{}) error { + req := request.(fetchRoutesRequest) + + vals := r.URL.Query() + vals.Add("from", req.From) + vals.Add("to", req.To) + r.URL.RawQuery = vals.Encode() + + return nil +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/routing/routing.go b/vendor/github.com/go-kit/kit/examples/shipping/routing/routing.go new file mode 100644 index 0000000..50496f2 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/routing/routing.go @@ -0,0 +1,15 @@ +// Package routing provides the routing domain service. It does not actually +// implement the routing service but merely acts as a proxy for a separate +// bounded context. +package routing + +import ( + "github.com/go-kit/kit/examples/shipping/cargo" +) + +// Service provides access to an external routing service. +type Service interface { + // FetchRoutesForSpecification finds all possible routes that satisfy a + // given specification. + FetchRoutesForSpecification(rs cargo.RouteSpecification) []cargo.Itinerary +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/tracking/endpoint.go b/vendor/github.com/go-kit/kit/examples/shipping/tracking/endpoint.go new file mode 100644 index 0000000..ddb1317 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/tracking/endpoint.go @@ -0,0 +1,26 @@ +package tracking + +import ( + "context" + + "github.com/go-kit/kit/endpoint" +) + +type trackCargoRequest struct { + ID string +} + +type trackCargoResponse struct { + Cargo *Cargo `json:"cargo,omitempty"` + Err error `json:"error,omitempty"` +} + +func (r trackCargoResponse) error() error { return r.Err } + +func makeTrackCargoEndpoint(ts Service) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(trackCargoRequest) + c, err := ts.Track(req.ID) + return trackCargoResponse{Cargo: &c, Err: err}, nil + } +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/tracking/instrumenting.go b/vendor/github.com/go-kit/kit/examples/shipping/tracking/instrumenting.go new file mode 100644 index 0000000..f5dc018 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/tracking/instrumenting.go @@ -0,0 +1,31 @@ +package tracking + +import ( + "time" + + "github.com/go-kit/kit/metrics" +) + +type instrumentingService struct { + requestCount metrics.Counter + requestLatency metrics.Histogram + Service +} + +// NewInstrumentingService returns an instance of an instrumenting Service. +func NewInstrumentingService(counter metrics.Counter, latency metrics.Histogram, s Service) Service { + return &instrumentingService{ + requestCount: counter, + requestLatency: latency, + Service: s, + } +} + +func (s *instrumentingService) Track(id string) (Cargo, error) { + defer func(begin time.Time) { + s.requestCount.With("method", "track").Add(1) + s.requestLatency.With("method", "track").Observe(time.Since(begin).Seconds()) + }(time.Now()) + + return s.Service.Track(id) +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/tracking/logging.go b/vendor/github.com/go-kit/kit/examples/shipping/tracking/logging.go new file mode 100644 index 0000000..584aeaa --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/tracking/logging.go @@ -0,0 +1,24 @@ +package tracking + +import ( + "time" + + "github.com/go-kit/kit/log" +) + +type loggingService struct { + logger log.Logger + Service +} + +// NewLoggingService returns a new instance of a logging Service. +func NewLoggingService(logger log.Logger, s Service) Service { + return &loggingService{logger, s} +} + +func (s *loggingService) Track(id string) (c Cargo, err error) { + defer func(begin time.Time) { + s.logger.Log("method", "track", "tracking_id", id, "took", time.Since(begin), "err", err) + }(time.Now()) + return s.Service.Track(id) +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/tracking/service.go b/vendor/github.com/go-kit/kit/examples/shipping/tracking/service.go new file mode 100644 index 0000000..b0e360b --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/tracking/service.go @@ -0,0 +1,163 @@ +// Package tracking provides the use-case of tracking a cargo. Used by views +// facing the end-user. +package tracking + +import ( + "errors" + "fmt" + "strings" + "time" + + "github.com/go-kit/kit/examples/shipping/cargo" +) + +// ErrInvalidArgument is returned when one or more arguments are invalid. +var ErrInvalidArgument = errors.New("invalid argument") + +// Service is the interface that provides the basic Track method. +type Service interface { + // Track returns a cargo matching a tracking ID. + Track(id string) (Cargo, error) +} + +type service struct { + cargos cargo.Repository + handlingEvents cargo.HandlingEventRepository +} + +func (s *service) Track(id string) (Cargo, error) { + if id == "" { + return Cargo{}, ErrInvalidArgument + } + c, err := s.cargos.Find(cargo.TrackingID(id)) + if err != nil { + return Cargo{}, err + } + return assemble(c, s.handlingEvents), nil +} + +// NewService returns a new instance of the default Service. +func NewService(cargos cargo.Repository, events cargo.HandlingEventRepository) Service { + return &service{ + cargos: cargos, + handlingEvents: events, + } +} + +// Cargo is a read model for tracking views. +type Cargo struct { + TrackingID string `json:"tracking_id"` + StatusText string `json:"status_text"` + Origin string `json:"origin"` + Destination string `json:"destination"` + ETA time.Time `json:"eta"` + NextExpectedActivity string `json:"next_expected_activity"` + ArrivalDeadline time.Time `json:"arrival_deadline"` + Events []Event `json:"events"` +} + +// Leg is a read model for booking views. +type Leg struct { + VoyageNumber string `json:"voyage_number"` + From string `json:"from"` + To string `json:"to"` + LoadTime time.Time `json:"load_time"` + UnloadTime time.Time `json:"unload_time"` +} + +// Event is a read model for tracking views. +type Event struct { + Description string `json:"description"` + Expected bool `json:"expected"` +} + +func assemble(c *cargo.Cargo, events cargo.HandlingEventRepository) Cargo { + return Cargo{ + TrackingID: string(c.TrackingID), + Origin: string(c.Origin), + Destination: string(c.RouteSpecification.Destination), + ETA: c.Delivery.ETA, + NextExpectedActivity: nextExpectedActivity(c), + ArrivalDeadline: c.RouteSpecification.ArrivalDeadline, + StatusText: assembleStatusText(c), + Events: assembleEvents(c, events), + } +} + +func assembleLegs(c cargo.Cargo) []Leg { + var legs []Leg + for _, l := range c.Itinerary.Legs { + legs = append(legs, Leg{ + VoyageNumber: string(l.VoyageNumber), + From: string(l.LoadLocation), + To: string(l.UnloadLocation), + LoadTime: l.LoadTime, + UnloadTime: l.UnloadTime, + }) + } + return legs +} + +func nextExpectedActivity(c *cargo.Cargo) string { + a := c.Delivery.NextExpectedActivity + prefix := "Next expected activity is to" + + switch a.Type { + case cargo.Load: + return fmt.Sprintf("%s %s cargo onto voyage %s in %s.", prefix, strings.ToLower(a.Type.String()), a.VoyageNumber, a.Location) + case cargo.Unload: + return fmt.Sprintf("%s %s cargo off of voyage %s in %s.", prefix, strings.ToLower(a.Type.String()), a.VoyageNumber, a.Location) + case cargo.NotHandled: + return "There are currently no expected activities for this cargo." + } + + return fmt.Sprintf("%s %s cargo in %s.", prefix, strings.ToLower(a.Type.String()), a.Location) +} + +func assembleStatusText(c *cargo.Cargo) string { + switch c.Delivery.TransportStatus { + case cargo.NotReceived: + return "Not received" + case cargo.InPort: + return fmt.Sprintf("In port %s", c.Delivery.LastKnownLocation) + case cargo.OnboardCarrier: + return fmt.Sprintf("Onboard voyage %s", c.Delivery.CurrentVoyage) + case cargo.Claimed: + return "Claimed" + default: + return "Unknown" + } +} + +func assembleEvents(c *cargo.Cargo, handlingEvents cargo.HandlingEventRepository) []Event { + h := handlingEvents.QueryHandlingHistory(c.TrackingID) + + var events []Event + for _, e := range h.HandlingEvents { + var description string + + switch e.Activity.Type { + case cargo.NotHandled: + description = "Cargo has not yet been received." + case cargo.Receive: + description = fmt.Sprintf("Received in %s, at %s", e.Activity.Location, time.Now().Format(time.RFC3339)) + case cargo.Load: + description = fmt.Sprintf("Loaded onto voyage %s in %s, at %s.", e.Activity.VoyageNumber, e.Activity.Location, time.Now().Format(time.RFC3339)) + case cargo.Unload: + description = fmt.Sprintf("Unloaded off voyage %s in %s, at %s.", e.Activity.VoyageNumber, e.Activity.Location, time.Now().Format(time.RFC3339)) + case cargo.Claim: + description = fmt.Sprintf("Claimed in %s, at %s.", e.Activity.Location, time.Now().Format(time.RFC3339)) + case cargo.Customs: + description = fmt.Sprintf("Cleared customs in %s, at %s.", e.Activity.Location, time.Now().Format(time.RFC3339)) + default: + description = "[Unknown status]" + } + + events = append(events, Event{ + Description: description, + Expected: c.Itinerary.IsExpected(e), + }) + } + + return events +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/tracking/transport.go b/vendor/github.com/go-kit/kit/examples/shipping/tracking/transport.go new file mode 100644 index 0000000..13d17f2 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/tracking/transport.go @@ -0,0 +1,74 @@ +package tracking + +import ( + "context" + "encoding/json" + "errors" + "net/http" + + "github.com/gorilla/mux" + + kitlog "github.com/go-kit/kit/log" + kithttp "github.com/go-kit/kit/transport/http" + + "github.com/go-kit/kit/examples/shipping/cargo" +) + +// MakeHandler returns a handler for the tracking service. +func MakeHandler(ts Service, logger kitlog.Logger) http.Handler { + r := mux.NewRouter() + + opts := []kithttp.ServerOption{ + kithttp.ServerErrorLogger(logger), + kithttp.ServerErrorEncoder(encodeError), + } + + trackCargoHandler := kithttp.NewServer( + makeTrackCargoEndpoint(ts), + decodeTrackCargoRequest, + encodeResponse, + opts..., + ) + + r.Handle("/tracking/v1/cargos/{id}", trackCargoHandler).Methods("GET") + + return r +} + +func decodeTrackCargoRequest(_ context.Context, r *http.Request) (interface{}, error) { + vars := mux.Vars(r) + id, ok := vars["id"] + if !ok { + return nil, errors.New("bad route") + } + return trackCargoRequest{ID: id}, nil +} + +func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error { + if e, ok := response.(errorer); ok && e.error() != nil { + encodeError(ctx, e.error(), w) + return nil + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + return json.NewEncoder(w).Encode(response) +} + +type errorer interface { + error() error +} + +// encode errors from business-logic +func encodeError(_ context.Context, err error, w http.ResponseWriter) { + switch err { + case cargo.ErrUnknown: + w.WriteHeader(http.StatusNotFound) + case ErrInvalidArgument: + w.WriteHeader(http.StatusBadRequest) + default: + w.WriteHeader(http.StatusInternalServerError) + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + json.NewEncoder(w).Encode(map[string]interface{}{ + "error": err.Error(), + }) +} diff --git a/vendor/github.com/go-kit/kit/examples/shipping/voyage/sample_voyages.go b/vendor/github.com/go-kit/kit/examples/shipping/voyage/sample_voyages.go new file mode 100644 index 0000000..751f588 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/voyage/sample_voyages.go @@ -0,0 +1,40 @@ +package voyage + +import "github.com/go-kit/kit/examples/shipping/location" + +// A set of sample voyages. +var ( + V100 = New("V100", Schedule{ + []CarrierMovement{ + {DepartureLocation: location.CNHKG, ArrivalLocation: location.JNTKO}, + {DepartureLocation: location.JNTKO, ArrivalLocation: location.USNYC}, + }, + }) + + V300 = New("V300", Schedule{ + []CarrierMovement{ + {DepartureLocation: location.JNTKO, ArrivalLocation: location.NLRTM}, + {DepartureLocation: location.NLRTM, ArrivalLocation: location.DEHAM}, + {DepartureLocation: location.DEHAM, ArrivalLocation: location.AUMEL}, + {DepartureLocation: location.AUMEL, ArrivalLocation: location.JNTKO}, + }, + }) + + V400 = New("V400", Schedule{ + []CarrierMovement{ + {DepartureLocation: location.DEHAM, ArrivalLocation: location.SESTO}, + {DepartureLocation: location.SESTO, ArrivalLocation: location.FIHEL}, + {DepartureLocation: location.FIHEL, ArrivalLocation: location.DEHAM}, + }, + }) +) + +// These voyages are hard-coded into the current pathfinder. Make sure +// they exist. +var ( + V0100S = New("0100S", Schedule{[]CarrierMovement{}}) + V0200T = New("0200T", Schedule{[]CarrierMovement{}}) + V0300A = New("0300A", Schedule{[]CarrierMovement{}}) + V0301S = New("0301S", Schedule{[]CarrierMovement{}}) + V0400S = New("0400S", Schedule{[]CarrierMovement{}}) +) diff --git a/vendor/github.com/go-kit/kit/examples/shipping/voyage/voyage.go b/vendor/github.com/go-kit/kit/examples/shipping/voyage/voyage.go new file mode 100644 index 0000000..37366af --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/shipping/voyage/voyage.go @@ -0,0 +1,44 @@ +// Package voyage provides the Voyage aggregate. +package voyage + +import ( + "errors" + "time" + + "github.com/go-kit/kit/examples/shipping/location" +) + +// Number uniquely identifies a particular Voyage. +type Number string + +// Voyage is a uniquely identifiable series of carrier movements. +type Voyage struct { + Number Number + Schedule Schedule +} + +// New creates a voyage with a voyage number and a provided schedule. +func New(n Number, s Schedule) *Voyage { + return &Voyage{Number: n, Schedule: s} +} + +// Schedule describes a voyage schedule. +type Schedule struct { + CarrierMovements []CarrierMovement +} + +// CarrierMovement is a vessel voyage from one location to another. +type CarrierMovement struct { + DepartureLocation location.UNLocode + ArrivalLocation location.UNLocode + DepartureTime time.Time + ArrivalTime time.Time +} + +// ErrUnknown is used when a voyage could not be found. +var ErrUnknown = errors.New("unknown voyage") + +// Repository provides access a voyage store. +type Repository interface { + Find(Number) (*Voyage, error) +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc1/main.go b/vendor/github.com/go-kit/kit/examples/stringsvc1/main.go new file mode 100644 index 0000000..03fc793 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc1/main.go @@ -0,0 +1,111 @@ +package main + +import ( + "context" + "encoding/json" + "errors" + "log" + "net/http" + "strings" + + "github.com/go-kit/kit/endpoint" + httptransport "github.com/go-kit/kit/transport/http" +) + +// StringService provides operations on strings. +type StringService interface { + Uppercase(string) (string, error) + Count(string) int +} + +type stringService struct{} + +func (stringService) Uppercase(s string) (string, error) { + if s == "" { + return "", ErrEmpty + } + return strings.ToUpper(s), nil +} + +func (stringService) Count(s string) int { + return len(s) +} + +func main() { + svc := stringService{} + + uppercaseHandler := httptransport.NewServer( + makeUppercaseEndpoint(svc), + decodeUppercaseRequest, + encodeResponse, + ) + + countHandler := httptransport.NewServer( + makeCountEndpoint(svc), + decodeCountRequest, + encodeResponse, + ) + + http.Handle("/uppercase", uppercaseHandler) + http.Handle("/count", countHandler) + log.Fatal(http.ListenAndServe(":8080", nil)) +} + +func makeUppercaseEndpoint(svc StringService) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(uppercaseRequest) + v, err := svc.Uppercase(req.S) + if err != nil { + return uppercaseResponse{v, err.Error()}, nil + } + return uppercaseResponse{v, ""}, nil + } +} + +func makeCountEndpoint(svc StringService) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(countRequest) + v := svc.Count(req.S) + return countResponse{v}, nil + } +} + +func decodeUppercaseRequest(_ context.Context, r *http.Request) (interface{}, error) { + var request uppercaseRequest + if err := json.NewDecoder(r.Body).Decode(&request); err != nil { + return nil, err + } + return request, nil +} + +func decodeCountRequest(_ context.Context, r *http.Request) (interface{}, error) { + var request countRequest + if err := json.NewDecoder(r.Body).Decode(&request); err != nil { + return nil, err + } + return request, nil +} + +func encodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error { + return json.NewEncoder(w).Encode(response) +} + +type uppercaseRequest struct { + S string `json:"s"` +} + +type uppercaseResponse struct { + V string `json:"v"` + Err string `json:"err,omitempty"` // errors don't define JSON marshaling +} + +type countRequest struct { + S string `json:"s"` +} + +type countResponse struct { + V int `json:"v"` +} + +// ErrEmpty is returned when an input string is empty. +var ErrEmpty = errors.New("empty string") diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc2/instrumenting.go b/vendor/github.com/go-kit/kit/examples/stringsvc2/instrumenting.go new file mode 100644 index 0000000..675617d --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc2/instrumenting.go @@ -0,0 +1,38 @@ +package main + +import ( + "fmt" + "time" + + "github.com/go-kit/kit/metrics" +) + +type instrumentingMiddleware struct { + requestCount metrics.Counter + requestLatency metrics.Histogram + countResult metrics.Histogram + next StringService +} + +func (mw instrumentingMiddleware) Uppercase(s string) (output string, err error) { + defer func(begin time.Time) { + lvs := []string{"method", "uppercase", "error", fmt.Sprint(err != nil)} + mw.requestCount.With(lvs...).Add(1) + mw.requestLatency.With(lvs...).Observe(time.Since(begin).Seconds()) + }(time.Now()) + + output, err = mw.next.Uppercase(s) + return +} + +func (mw instrumentingMiddleware) Count(s string) (n int) { + defer func(begin time.Time) { + lvs := []string{"method", "count", "error", "false"} + mw.requestCount.With(lvs...).Add(1) + mw.requestLatency.With(lvs...).Observe(time.Since(begin).Seconds()) + mw.countResult.Observe(float64(n)) + }(time.Now()) + + n = mw.next.Count(s) + return +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc2/logging.go b/vendor/github.com/go-kit/kit/examples/stringsvc2/logging.go new file mode 100644 index 0000000..b958f3b --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc2/logging.go @@ -0,0 +1,41 @@ +package main + +import ( + "time" + + "github.com/go-kit/kit/log" +) + +type loggingMiddleware struct { + logger log.Logger + next StringService +} + +func (mw loggingMiddleware) Uppercase(s string) (output string, err error) { + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "uppercase", + "input", s, + "output", output, + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + output, err = mw.next.Uppercase(s) + return +} + +func (mw loggingMiddleware) Count(s string) (n int) { + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "count", + "input", s, + "n", n, + "took", time.Since(begin), + ) + }(time.Now()) + + n = mw.next.Count(s) + return +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc2/main.go b/vendor/github.com/go-kit/kit/examples/stringsvc2/main.go new file mode 100644 index 0000000..d67d2a5 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc2/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "net/http" + "os" + + stdprometheus "github.com/prometheus/client_golang/prometheus" + + "github.com/go-kit/kit/log" + kitprometheus "github.com/go-kit/kit/metrics/prometheus" + httptransport "github.com/go-kit/kit/transport/http" +) + +func main() { + logger := log.NewLogfmtLogger(os.Stderr) + + fieldKeys := []string{"method", "error"} + requestCount := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{ + Namespace: "my_group", + Subsystem: "string_service", + Name: "request_count", + Help: "Number of requests received.", + }, fieldKeys) + requestLatency := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{ + Namespace: "my_group", + Subsystem: "string_service", + Name: "request_latency_microseconds", + Help: "Total duration of requests in microseconds.", + }, fieldKeys) + countResult := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{ + Namespace: "my_group", + Subsystem: "string_service", + Name: "count_result", + Help: "The result of each count method.", + }, []string{}) // no fields here + + var svc StringService + svc = stringService{} + svc = loggingMiddleware{logger, svc} + svc = instrumentingMiddleware{requestCount, requestLatency, countResult, svc} + + uppercaseHandler := httptransport.NewServer( + makeUppercaseEndpoint(svc), + decodeUppercaseRequest, + encodeResponse, + ) + + countHandler := httptransport.NewServer( + makeCountEndpoint(svc), + decodeCountRequest, + encodeResponse, + ) + + http.Handle("/uppercase", uppercaseHandler) + http.Handle("/count", countHandler) + http.Handle("/metrics", stdprometheus.Handler()) + logger.Log("msg", "HTTP", "addr", ":8080") + logger.Log("err", http.ListenAndServe(":8080", nil)) +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc2/service.go b/vendor/github.com/go-kit/kit/examples/stringsvc2/service.go new file mode 100644 index 0000000..1da2f3e --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc2/service.go @@ -0,0 +1,28 @@ +package main + +import ( + "errors" + "strings" +) + +// StringService provides operations on strings. +type StringService interface { + Uppercase(string) (string, error) + Count(string) int +} + +type stringService struct{} + +func (stringService) Uppercase(s string) (string, error) { + if s == "" { + return "", ErrEmpty + } + return strings.ToUpper(s), nil +} + +func (stringService) Count(s string) int { + return len(s) +} + +// ErrEmpty is returned when an input string is empty. +var ErrEmpty = errors.New("empty string") diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc2/transport.go b/vendor/github.com/go-kit/kit/examples/stringsvc2/transport.go new file mode 100644 index 0000000..297b3ff --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc2/transport.go @@ -0,0 +1,65 @@ +package main + +import ( + "context" + "encoding/json" + "net/http" + + "github.com/go-kit/kit/endpoint" +) + +func makeUppercaseEndpoint(svc StringService) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(uppercaseRequest) + v, err := svc.Uppercase(req.S) + if err != nil { + return uppercaseResponse{v, err.Error()}, nil + } + return uppercaseResponse{v, ""}, nil + } +} + +func makeCountEndpoint(svc StringService) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(countRequest) + v := svc.Count(req.S) + return countResponse{v}, nil + } +} + +func decodeUppercaseRequest(_ context.Context, r *http.Request) (interface{}, error) { + var request uppercaseRequest + if err := json.NewDecoder(r.Body).Decode(&request); err != nil { + return nil, err + } + return request, nil +} + +func decodeCountRequest(_ context.Context, r *http.Request) (interface{}, error) { + var request countRequest + if err := json.NewDecoder(r.Body).Decode(&request); err != nil { + return nil, err + } + return request, nil +} + +func encodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error { + return json.NewEncoder(w).Encode(response) +} + +type uppercaseRequest struct { + S string `json:"s"` +} + +type uppercaseResponse struct { + V string `json:"v"` + Err string `json:"err,omitempty"` +} + +type countRequest struct { + S string `json:"s"` +} + +type countResponse struct { + V int `json:"v"` +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc3/instrumenting.go b/vendor/github.com/go-kit/kit/examples/stringsvc3/instrumenting.go new file mode 100644 index 0000000..b21c016 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc3/instrumenting.go @@ -0,0 +1,48 @@ +package main + +import ( + "fmt" + "time" + + "github.com/go-kit/kit/metrics" +) + +func instrumentingMiddleware( + requestCount metrics.Counter, + requestLatency metrics.Histogram, + countResult metrics.Histogram, +) ServiceMiddleware { + return func(next StringService) StringService { + return instrmw{requestCount, requestLatency, countResult, next} + } +} + +type instrmw struct { + requestCount metrics.Counter + requestLatency metrics.Histogram + countResult metrics.Histogram + StringService +} + +func (mw instrmw) Uppercase(s string) (output string, err error) { + defer func(begin time.Time) { + lvs := []string{"method", "uppercase", "error", fmt.Sprint(err != nil)} + mw.requestCount.With(lvs...).Add(1) + mw.requestLatency.With(lvs...).Observe(time.Since(begin).Seconds()) + }(time.Now()) + + output, err = mw.StringService.Uppercase(s) + return +} + +func (mw instrmw) Count(s string) (n int) { + defer func(begin time.Time) { + lvs := []string{"method", "count", "error", "false"} + mw.requestCount.With(lvs...).Add(1) + mw.requestLatency.With(lvs...).Observe(time.Since(begin).Seconds()) + mw.countResult.Observe(float64(n)) + }(time.Now()) + + n = mw.StringService.Count(s) + return +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc3/logging.go b/vendor/github.com/go-kit/kit/examples/stringsvc3/logging.go new file mode 100644 index 0000000..72a2709 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc3/logging.go @@ -0,0 +1,47 @@ +package main + +import ( + "time" + + "github.com/go-kit/kit/log" +) + +func loggingMiddleware(logger log.Logger) ServiceMiddleware { + return func(next StringService) StringService { + return logmw{logger, next} + } +} + +type logmw struct { + logger log.Logger + StringService +} + +func (mw logmw) Uppercase(s string) (output string, err error) { + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "uppercase", + "input", s, + "output", output, + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + output, err = mw.StringService.Uppercase(s) + return +} + +func (mw logmw) Count(s string) (n int) { + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "count", + "input", s, + "n", n, + "took", time.Since(begin), + ) + }(time.Now()) + + n = mw.StringService.Count(s) + return +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc3/main.go b/vendor/github.com/go-kit/kit/examples/stringsvc3/main.go new file mode 100644 index 0000000..0e2b6b7 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc3/main.go @@ -0,0 +1,69 @@ +package main + +import ( + "context" + "flag" + "net/http" + "os" + + stdprometheus "github.com/prometheus/client_golang/prometheus" + + "github.com/go-kit/kit/log" + kitprometheus "github.com/go-kit/kit/metrics/prometheus" + httptransport "github.com/go-kit/kit/transport/http" +) + +func main() { + var ( + listen = flag.String("listen", ":8080", "HTTP listen address") + proxy = flag.String("proxy", "", "Optional comma-separated list of URLs to proxy uppercase requests") + ) + flag.Parse() + + var logger log.Logger + logger = log.NewLogfmtLogger(os.Stderr) + logger = log.With(logger, "listen", *listen, "caller", log.DefaultCaller) + + fieldKeys := []string{"method", "error"} + requestCount := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{ + Namespace: "my_group", + Subsystem: "string_service", + Name: "request_count", + Help: "Number of requests received.", + }, fieldKeys) + requestLatency := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{ + Namespace: "my_group", + Subsystem: "string_service", + Name: "request_latency_microseconds", + Help: "Total duration of requests in microseconds.", + }, fieldKeys) + countResult := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{ + Namespace: "my_group", + Subsystem: "string_service", + Name: "count_result", + Help: "The result of each count method.", + }, []string{}) + + var svc StringService + svc = stringService{} + svc = proxyingMiddleware(context.Background(), *proxy, logger)(svc) + svc = loggingMiddleware(logger)(svc) + svc = instrumentingMiddleware(requestCount, requestLatency, countResult)(svc) + + uppercaseHandler := httptransport.NewServer( + makeUppercaseEndpoint(svc), + decodeUppercaseRequest, + encodeResponse, + ) + countHandler := httptransport.NewServer( + makeCountEndpoint(svc), + decodeCountRequest, + encodeResponse, + ) + + http.Handle("/uppercase", uppercaseHandler) + http.Handle("/count", countHandler) + http.Handle("/metrics", stdprometheus.Handler()) + logger.Log("msg", "HTTP", "addr", *listen) + logger.Log("err", http.ListenAndServe(*listen, nil)) +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc3/proxying.go b/vendor/github.com/go-kit/kit/examples/stringsvc3/proxying.go new file mode 100644 index 0000000..8d67d38 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc3/proxying.go @@ -0,0 +1,116 @@ +package main + +import ( + "context" + "errors" + "fmt" + "net/url" + "strings" + "time" + + jujuratelimit "github.com/juju/ratelimit" + "github.com/sony/gobreaker" + + "github.com/go-kit/kit/circuitbreaker" + "github.com/go-kit/kit/endpoint" + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/ratelimit" + "github.com/go-kit/kit/sd" + "github.com/go-kit/kit/sd/lb" + httptransport "github.com/go-kit/kit/transport/http" +) + +func proxyingMiddleware(ctx context.Context, instances string, logger log.Logger) ServiceMiddleware { + // If instances is empty, don't proxy. + if instances == "" { + logger.Log("proxy_to", "none") + return func(next StringService) StringService { return next } + } + + // Set some parameters for our client. + var ( + qps = 100 // beyond which we will return an error + maxAttempts = 3 // per request, before giving up + maxTime = 250 * time.Millisecond // wallclock time, before giving up + ) + + // Otherwise, construct an endpoint for each instance in the list, and add + // it to a fixed set of endpoints. In a real service, rather than doing this + // by hand, you'd probably use package sd's support for your service + // discovery system. + var ( + instanceList = split(instances) + subscriber sd.FixedSubscriber + ) + logger.Log("proxy_to", fmt.Sprint(instanceList)) + for _, instance := range instanceList { + var e endpoint.Endpoint + e = makeUppercaseProxy(ctx, instance) + e = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{}))(e) + e = ratelimit.NewTokenBucketLimiter(jujuratelimit.NewBucketWithRate(float64(qps), int64(qps)))(e) + subscriber = append(subscriber, e) + } + + // Now, build a single, retrying, load-balancing endpoint out of all of + // those individual endpoints. + balancer := lb.NewRoundRobin(subscriber) + retry := lb.Retry(maxAttempts, maxTime, balancer) + + // And finally, return the ServiceMiddleware, implemented by proxymw. + return func(next StringService) StringService { + return proxymw{ctx, next, retry} + } +} + +// proxymw implements StringService, forwarding Uppercase requests to the +// provided endpoint, and serving all other (i.e. Count) requests via the +// next StringService. +type proxymw struct { + ctx context.Context + next StringService // Serve most requests via this service... + uppercase endpoint.Endpoint // ...except Uppercase, which gets served by this endpoint +} + +func (mw proxymw) Count(s string) int { + return mw.next.Count(s) +} + +func (mw proxymw) Uppercase(s string) (string, error) { + response, err := mw.uppercase(mw.ctx, uppercaseRequest{S: s}) + if err != nil { + return "", err + } + + resp := response.(uppercaseResponse) + if resp.Err != "" { + return resp.V, errors.New(resp.Err) + } + return resp.V, nil +} + +func makeUppercaseProxy(ctx context.Context, instance string) endpoint.Endpoint { + if !strings.HasPrefix(instance, "http") { + instance = "http://" + instance + } + u, err := url.Parse(instance) + if err != nil { + panic(err) + } + if u.Path == "" { + u.Path = "/uppercase" + } + return httptransport.NewClient( + "GET", + u, + encodeRequest, + decodeUppercaseResponse, + ).Endpoint() +} + +func split(s string) []string { + a := strings.Split(s, ",") + for i := range a { + a[i] = strings.TrimSpace(a[i]) + } + return a +} diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc3/service.go b/vendor/github.com/go-kit/kit/examples/stringsvc3/service.go new file mode 100644 index 0000000..7e1773a --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc3/service.go @@ -0,0 +1,31 @@ +package main + +import ( + "errors" + "strings" +) + +// StringService provides operations on strings. +type StringService interface { + Uppercase(string) (string, error) + Count(string) int +} + +type stringService struct{} + +func (stringService) Uppercase(s string) (string, error) { + if s == "" { + return "", ErrEmpty + } + return strings.ToUpper(s), nil +} + +func (stringService) Count(s string) int { + return len(s) +} + +// ErrEmpty is returned when an input string is empty. +var ErrEmpty = errors.New("empty string") + +// ServiceMiddleware is a chainable behavior modifier for StringService. +type ServiceMiddleware func(StringService) StringService diff --git a/vendor/github.com/go-kit/kit/examples/stringsvc3/transport.go b/vendor/github.com/go-kit/kit/examples/stringsvc3/transport.go new file mode 100644 index 0000000..c17a055 --- /dev/null +++ b/vendor/github.com/go-kit/kit/examples/stringsvc3/transport.go @@ -0,0 +1,84 @@ +package main + +import ( + "bytes" + "context" + "encoding/json" + "io/ioutil" + "net/http" + + "github.com/go-kit/kit/endpoint" +) + +func makeUppercaseEndpoint(svc StringService) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(uppercaseRequest) + v, err := svc.Uppercase(req.S) + if err != nil { + return uppercaseResponse{v, err.Error()}, nil + } + return uppercaseResponse{v, ""}, nil + } +} + +func makeCountEndpoint(svc StringService) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (interface{}, error) { + req := request.(countRequest) + v := svc.Count(req.S) + return countResponse{v}, nil + } +} + +func decodeUppercaseRequest(_ context.Context, r *http.Request) (interface{}, error) { + var request uppercaseRequest + if err := json.NewDecoder(r.Body).Decode(&request); err != nil { + return nil, err + } + return request, nil +} + +func decodeCountRequest(_ context.Context, r *http.Request) (interface{}, error) { + var request countRequest + if err := json.NewDecoder(r.Body).Decode(&request); err != nil { + return nil, err + } + return request, nil +} + +func decodeUppercaseResponse(_ context.Context, r *http.Response) (interface{}, error) { + var response uppercaseResponse + if err := json.NewDecoder(r.Body).Decode(&response); err != nil { + return nil, err + } + return response, nil +} + +func encodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error { + return json.NewEncoder(w).Encode(response) +} + +func encodeRequest(_ context.Context, r *http.Request, request interface{}) error { + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(request); err != nil { + return err + } + r.Body = ioutil.NopCloser(&buf) + return nil +} + +type uppercaseRequest struct { + S string `json:"s"` +} + +type uppercaseResponse struct { + V string `json:"v"` + Err string `json:"err,omitempty"` +} + +type countRequest struct { + S string `json:"s"` +} + +type countResponse struct { + V int `json:"v"` +} diff --git a/vendor/github.com/go-kit/kit/lint b/vendor/github.com/go-kit/kit/lint new file mode 100755 index 0000000..12e3072 --- /dev/null +++ b/vendor/github.com/go-kit/kit/lint @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +if [ ! $(command -v gometalinter) ] +then + go get github.com/alecthomas/gometalinter + gometalinter --update --install +fi + +time gometalinter \ + --exclude='error return value not checked.*(Close|Log|Print).*\(errcheck\)$' \ + --exclude='.*_test\.go:.*error return value not checked.*\(errcheck\)$' \ + --exclude='/thrift/' \ + --exclude='/pb/' \ + --exclude='no args in Log call \(vet\)' \ + --disable=dupl \ + --disable=aligncheck \ + --disable=gotype \ + --cyclo-over=20 \ + --tests \ + --concurrency=2 \ + --deadline=300s \ + ./... diff --git a/vendor/github.com/go-kit/kit/log/README.md b/vendor/github.com/go-kit/kit/log/README.md new file mode 100644 index 0000000..7222f80 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/README.md @@ -0,0 +1,147 @@ +# package log + +`package log` provides a minimal interface for structured logging in services. +It may be wrapped to encode conventions, enforce type-safety, provide leveled +logging, and so on. It can be used for both typical application log events, +and log-structured data streams. + +## Structured logging + +Structured logging is, basically, conceding to the reality that logs are +_data_, and warrant some level of schematic rigor. Using a stricter, +key/value-oriented message format for our logs, containing contextual and +semantic information, makes it much easier to get insight into the +operational activity of the systems we build. Consequently, `package log` is +of the strong belief that "[the benefits of structured logging outweigh the +minimal effort involved](https://www.thoughtworks.com/radar/techniques/structured-logging)". + +Migrating from unstructured to structured logging is probably a lot easier +than you'd expect. + +```go +// Unstructured +log.Printf("HTTP server listening on %s", addr) + +// Structured +logger.Log("transport", "HTTP", "addr", addr, "msg", "listening") +``` + +## Usage + +### Typical application logging + +```go +w := log.NewSyncWriter(os.Stderr) +logger := log.NewLogfmtLogger(w) +logger.Log("question", "what is the meaning of life?", "answer", 42) + +// Output: +// question="what is the meaning of life?" answer=42 +``` + +### Contextual Loggers + +```go +func main() { + var logger log.Logger + logger = log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)) + logger = log.With(logger, "instance_id", 123) + + logger.Log("msg", "starting") + NewWorker(log.With(logger, "component", "worker")).Run() + NewSlacker(log.With(logger, "component", "slacker")).Run() +} + +// Output: +// instance_id=123 msg=starting +// instance_id=123 component=worker msg=running +// instance_id=123 component=slacker msg=running +``` + +### Interact with stdlib logger + +Redirect stdlib logger to Go kit logger. + +```go +import ( + "os" + stdlog "log" + kitlog "github.com/go-kit/kit/log" +) + +func main() { + logger := kitlog.NewJSONLogger(kitlog.NewSyncWriter(os.Stdout)) + stdlog.SetOutput(kitlog.NewStdlibAdapter(logger)) + stdlog.Print("I sure like pie") +} + +// Output: +// {"msg":"I sure like pie","ts":"2016/01/01 12:34:56"} +``` + +Or, if, for legacy reasons, you need to pipe all of your logging through the +stdlib log package, you can redirect Go kit logger to the stdlib logger. + +```go +logger := kitlog.NewLogfmtLogger(kitlog.StdlibWriter{}) +logger.Log("legacy", true, "msg", "at least it's something") + +// Output: +// 2016/01/01 12:34:56 legacy=true msg="at least it's something" +``` + +### Timestamps and callers + +```go +var logger log.Logger +logger = log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)) +logger = log.With(logger, "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller) + +logger.Log("msg", "hello") + +// Output: +// ts=2016-01-01T12:34:56Z caller=main.go:15 msg=hello +``` + +## Supported output formats + +- [Logfmt](https://brandur.org/logfmt) ([see also](https://blog.codeship.com/logfmt-a-log-format-thats-easy-to-read-and-write)) +- JSON + +## Enhancements + +`package log` is centered on the one-method Logger interface. + +```go +type Logger interface { + Log(keyvals ...interface{}) error +} +``` + +This interface, and its supporting code like is the product of much iteration +and evaluation. For more details on the evolution of the Logger interface, +see [The Hunt for a Logger Interface](http://go-talks.appspot.com/github.com/ChrisHines/talks/structured-logging/structured-logging.slide#1), +a talk by [Chris Hines](https://github.com/ChrisHines). +Also, please see +[#63](https://github.com/go-kit/kit/issues/63), +[#76](https://github.com/go-kit/kit/pull/76), +[#131](https://github.com/go-kit/kit/issues/131), +[#157](https://github.com/go-kit/kit/pull/157), +[#164](https://github.com/go-kit/kit/issues/164), and +[#252](https://github.com/go-kit/kit/pull/252) +to review historical conversations about package log and the Logger interface. + +Value-add packages and suggestions, +like improvements to [the leveled logger](https://godoc.org/github.com/go-kit/kit/log/level), +are of course welcome. Good proposals should + +- Be composable with [contextual loggers](https://godoc.org/github.com/go-kit/kit/log#With), +- Not break the behavior of [log.Caller](https://godoc.org/github.com/go-kit/kit/log#Caller) in any wrapped contextual loggers, and +- Be friendly to packages that accept only an unadorned log.Logger. + +## Benchmarks & comparisons + +There are a few Go logging benchmarks and comparisons that include Go kit's package log. + +- [imkira/go-loggers-bench](https://github.com/imkira/go-loggers-bench) includes kit/log +- [uber-common/zap](https://github.com/uber-common/zap), a zero-alloc logging library, includes a comparison with kit/log diff --git a/vendor/github.com/go-kit/kit/log/benchmark_test.go b/vendor/github.com/go-kit/kit/log/benchmark_test.go new file mode 100644 index 0000000..126bfa5 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/benchmark_test.go @@ -0,0 +1,21 @@ +package log_test + +import ( + "testing" + + "github.com/go-kit/kit/log" +) + +func benchmarkRunner(b *testing.B, logger log.Logger, f func(log.Logger)) { + lc := log.With(logger, "common_key", "common_value") + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + f(lc) + } +} + +var ( + baseMessage = func(logger log.Logger) { logger.Log("foo_key", "foo_value") } + withMessage = func(logger log.Logger) { log.With(logger, "a", "b").Log("c", "d") } +) diff --git a/vendor/github.com/go-kit/kit/log/concurrency_test.go b/vendor/github.com/go-kit/kit/log/concurrency_test.go new file mode 100644 index 0000000..95a749e --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/concurrency_test.go @@ -0,0 +1,40 @@ +package log_test + +import ( + "math" + "testing" + + "github.com/go-kit/kit/log" +) + +// These test are designed to be run with the race detector. + +func testConcurrency(t *testing.T, logger log.Logger, total int) { + n := int(math.Sqrt(float64(total))) + share := total / n + + errC := make(chan error, n) + + for i := 0; i < n; i++ { + go func() { + errC <- spam(logger, share) + }() + } + + for i := 0; i < n; i++ { + err := <-errC + if err != nil { + t.Fatalf("concurrent logging error: %v", err) + } + } +} + +func spam(logger log.Logger, count int) error { + for i := 0; i < count; i++ { + err := logger.Log("key", i) + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/go-kit/kit/log/deprecated_levels/levels.go b/vendor/github.com/go-kit/kit/log/deprecated_levels/levels.go new file mode 100644 index 0000000..a034212 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/deprecated_levels/levels.go @@ -0,0 +1,127 @@ +package levels + +import "github.com/go-kit/kit/log" + +// Levels provides a leveled logging wrapper around a logger. It has five +// levels: debug, info, warning (warn), error, and critical (crit). If you +// want a different set of levels, you can create your own levels type very +// easily, and you can elide the configuration. +type Levels struct { + logger log.Logger + levelKey string + + // We have a choice between storing level values in string fields or + // making a separate context for each level. When using string fields the + // Log method must combine the base context, the level data, and the + // logged keyvals; but the With method only requires updating one context. + // If we instead keep a separate context for each level the Log method + // must only append the new keyvals; but the With method would have to + // update all five contexts. + + // Roughly speaking, storing multiple contexts breaks even if the ratio of + // Log/With calls is more than the number of levels. We have chosen to + // make the With method cheap and the Log method a bit more costly because + // we do not expect most applications to Log more than five times for each + // call to With. + + debugValue string + infoValue string + warnValue string + errorValue string + critValue string +} + +// New creates a new leveled logger, wrapping the passed logger. +func New(logger log.Logger, options ...Option) Levels { + l := Levels{ + logger: logger, + levelKey: "level", + + debugValue: "debug", + infoValue: "info", + warnValue: "warn", + errorValue: "error", + critValue: "crit", + } + for _, option := range options { + option(&l) + } + return l +} + +// With returns a new leveled logger that includes keyvals in all log events. +func (l Levels) With(keyvals ...interface{}) Levels { + return Levels{ + logger: log.With(l.logger, keyvals...), + levelKey: l.levelKey, + debugValue: l.debugValue, + infoValue: l.infoValue, + warnValue: l.warnValue, + errorValue: l.errorValue, + critValue: l.critValue, + } +} + +// Debug returns a debug level logger. +func (l Levels) Debug() log.Logger { + return log.WithPrefix(l.logger, l.levelKey, l.debugValue) +} + +// Info returns an info level logger. +func (l Levels) Info() log.Logger { + return log.WithPrefix(l.logger, l.levelKey, l.infoValue) +} + +// Warn returns a warning level logger. +func (l Levels) Warn() log.Logger { + return log.WithPrefix(l.logger, l.levelKey, l.warnValue) +} + +// Error returns an error level logger. +func (l Levels) Error() log.Logger { + return log.WithPrefix(l.logger, l.levelKey, l.errorValue) +} + +// Crit returns a critical level logger. +func (l Levels) Crit() log.Logger { + return log.WithPrefix(l.logger, l.levelKey, l.critValue) +} + +// Option sets a parameter for leveled loggers. +type Option func(*Levels) + +// Key sets the key for the field used to indicate log level. By default, +// the key is "level". +func Key(key string) Option { + return func(l *Levels) { l.levelKey = key } +} + +// DebugValue sets the value for the field used to indicate the debug log +// level. By default, the value is "debug". +func DebugValue(value string) Option { + return func(l *Levels) { l.debugValue = value } +} + +// InfoValue sets the value for the field used to indicate the info log level. +// By default, the value is "info". +func InfoValue(value string) Option { + return func(l *Levels) { l.infoValue = value } +} + +// WarnValue sets the value for the field used to indicate the warning log +// level. By default, the value is "warn". +func WarnValue(value string) Option { + return func(l *Levels) { l.warnValue = value } +} + +// ErrorValue sets the value for the field used to indicate the error log +// level. By default, the value is "error". +func ErrorValue(value string) Option { + return func(l *Levels) { l.errorValue = value } +} + +// CritValue sets the value for the field used to indicate the critical log +// level. By default, the value is "crit". +func CritValue(value string) Option { + return func(l *Levels) { l.critValue = value } +} diff --git a/vendor/github.com/go-kit/kit/log/deprecated_levels/levels_test.go b/vendor/github.com/go-kit/kit/log/deprecated_levels/levels_test.go new file mode 100644 index 0000000..8d4a7f5 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/deprecated_levels/levels_test.go @@ -0,0 +1,65 @@ +package levels_test + +import ( + "bytes" + "os" + "testing" + + "github.com/go-kit/kit/log" + levels "github.com/go-kit/kit/log/deprecated_levels" +) + +func TestDefaultLevels(t *testing.T) { + buf := bytes.Buffer{} + logger := levels.New(log.NewLogfmtLogger(&buf)) + + logger.Debug().Log("msg", "résumé") // of course you'd want to do this + if want, have := "level=debug msg=résumé\n", buf.String(); want != have { + t.Errorf("want %#v, have %#v", want, have) + } + + buf.Reset() + logger.Info().Log("msg", "Åhus") + if want, have := "level=info msg=Åhus\n", buf.String(); want != have { + t.Errorf("want %#v, have %#v", want, have) + } + + buf.Reset() + logger.Error().Log("msg", "© violation") + if want, have := "level=error msg=\"© violation\"\n", buf.String(); want != have { + t.Errorf("want %#v, have %#v", want, have) + } + + buf.Reset() + logger.Crit().Log("msg", " ") + if want, have := "level=crit msg=\"\\t\"\n", buf.String(); want != have { + t.Errorf("want %#v, have %#v", want, have) + } +} + +func TestModifiedLevels(t *testing.T) { + buf := bytes.Buffer{} + logger := levels.New( + log.NewJSONLogger(&buf), + levels.Key("l"), + levels.DebugValue("dbg"), + levels.InfoValue("nfo"), + levels.WarnValue("wrn"), + levels.ErrorValue("err"), + levels.CritValue("crt"), + ) + logger.With("easter_island", "176°").Debug().Log("msg", "moai") + if want, have := `{"easter_island":"176°","l":"dbg","msg":"moai"}`+"\n", buf.String(); want != have { + t.Errorf("want %#v, have %#v", want, have) + } +} + +func ExampleLevels() { + logger := levels.New(log.NewLogfmtLogger(os.Stdout)) + logger.Debug().Log("msg", "hello") + logger.With("context", "foo").Warn().Log("err", "error") + + // Output: + // level=debug msg=hello + // level=warn context=foo err=error +} diff --git a/vendor/github.com/go-kit/kit/log/doc.go b/vendor/github.com/go-kit/kit/log/doc.go new file mode 100644 index 0000000..918c0af --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/doc.go @@ -0,0 +1,116 @@ +// Package log provides a structured logger. +// +// Structured logging produces logs easily consumed later by humans or +// machines. Humans might be interested in debugging errors, or tracing +// specific requests. Machines might be interested in counting interesting +// events, or aggregating information for off-line processing. In both cases, +// it is important that the log messages are structured and actionable. +// Package log is designed to encourage both of these best practices. +// +// Basic Usage +// +// The fundamental interface is Logger. Loggers create log events from +// key/value data. The Logger interface has a single method, Log, which +// accepts a sequence of alternating key/value pairs, which this package names +// keyvals. +// +// type Logger interface { +// Log(keyvals ...interface{}) error +// } +// +// Here is an example of a function using a Logger to create log events. +// +// func RunTask(task Task, logger log.Logger) string { +// logger.Log("taskID", task.ID, "event", "starting task") +// ... +// logger.Log("taskID", task.ID, "event", "task complete") +// } +// +// The keys in the above example are "taskID" and "event". The values are +// task.ID, "starting task", and "task complete". Every key is followed +// immediately by its value. +// +// Keys are usually plain strings. Values may be any type that has a sensible +// encoding in the chosen log format. With structured logging it is a good +// idea to log simple values without formatting them. This practice allows +// the chosen logger to encode values in the most appropriate way. +// +// Contextual Loggers +// +// A contextual logger stores keyvals that it includes in all log events. +// Building appropriate contextual loggers reduces repetition and aids +// consistency in the resulting log output. With and WithPrefix add context to +// a logger. We can use With to improve the RunTask example. +// +// func RunTask(task Task, logger log.Logger) string { +// logger = log.With(logger, "taskID", task.ID) +// logger.Log("event", "starting task") +// ... +// taskHelper(task.Cmd, logger) +// ... +// logger.Log("event", "task complete") +// } +// +// The improved version emits the same log events as the original for the +// first and last calls to Log. Passing the contextual logger to taskHelper +// enables each log event created by taskHelper to include the task.ID even +// though taskHelper does not have access to that value. Using contextual +// loggers this way simplifies producing log output that enables tracing the +// life cycle of individual tasks. (See the Contextual example for the full +// code of the above snippet.) +// +// Dynamic Contextual Values +// +// A Valuer function stored in a contextual logger generates a new value each +// time an event is logged. The Valuer example demonstrates how this feature +// works. +// +// Valuers provide the basis for consistently logging timestamps and source +// code location. The log package defines several valuers for that purpose. +// See Timestamp, DefaultTimestamp, DefaultTimestampUTC, Caller, and +// DefaultCaller. A common logger initialization sequence that ensures all log +// entries contain a timestamp and source location looks like this: +// +// logger := log.NewLogfmtLogger(log.NewSyncWriter(os.Stdout)) +// logger = log.With(logger, "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller) +// +// Concurrent Safety +// +// Applications with multiple goroutines want each log event written to the +// same logger to remain separate from other log events. Package log provides +// two simple solutions for concurrent safe logging. +// +// NewSyncWriter wraps an io.Writer and serializes each call to its Write +// method. Using a SyncWriter has the benefit that the smallest practical +// portion of the logging logic is performed within a mutex, but it requires +// the formatting Logger to make only one call to Write per log event. +// +// NewSyncLogger wraps any Logger and serializes each call to its Log method. +// Using a SyncLogger has the benefit that it guarantees each log event is +// handled atomically within the wrapped logger, but it typically serializes +// both the formatting and output logic. Use a SyncLogger if the formatting +// logger may perform multiple writes per log event. +// +// Error Handling +// +// This package relies on the practice of wrapping or decorating loggers with +// other loggers to provide composable pieces of functionality. It also means +// that Logger.Log must return an error because some +// implementations—especially those that output log data to an io.Writer—may +// encounter errors that cannot be handled locally. This in turn means that +// Loggers that wrap other loggers should return errors from the wrapped +// logger up the stack. +// +// Fortunately, the decorator pattern also provides a way to avoid the +// necessity to check for errors every time an application calls Logger.Log. +// An application required to panic whenever its Logger encounters +// an error could initialize its logger as follows. +// +// fmtlogger := log.NewLogfmtLogger(log.NewSyncWriter(os.Stdout)) +// logger := log.LoggerFunc(func(keyvals ...interface{}) error { +// if err := fmtlogger.Log(keyvals...); err != nil { +// panic(err) +// } +// return nil +// }) +package log diff --git a/vendor/github.com/go-kit/kit/log/example_test.go b/vendor/github.com/go-kit/kit/log/example_test.go new file mode 100644 index 0000000..9766774 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/example_test.go @@ -0,0 +1,137 @@ +package log_test + +import ( + "math/rand" + "os" + "sync" + "time" + + "github.com/go-kit/kit/log" +) + +func Example_basic() { + logger := log.NewLogfmtLogger(os.Stdout) + + type Task struct { + ID int + } + + RunTask := func(task Task, logger log.Logger) { + logger.Log("taskID", task.ID, "event", "starting task") + + logger.Log("taskID", task.ID, "event", "task complete") + } + + RunTask(Task{ID: 1}, logger) + + // Output: + // taskID=1 event="starting task" + // taskID=1 event="task complete" +} + +func Example_contextual() { + logger := log.NewLogfmtLogger(os.Stdout) + + type Task struct { + ID int + Cmd string + } + + taskHelper := func(cmd string, logger log.Logger) { + // execute(cmd) + logger.Log("cmd", cmd, "dur", 42*time.Millisecond) + } + + RunTask := func(task Task, logger log.Logger) { + logger = log.With(logger, "taskID", task.ID) + logger.Log("event", "starting task") + + taskHelper(task.Cmd, logger) + + logger.Log("event", "task complete") + } + + RunTask(Task{ID: 1, Cmd: "echo Hello, world!"}, logger) + + // Output: + // taskID=1 event="starting task" + // taskID=1 cmd="echo Hello, world!" dur=42ms + // taskID=1 event="task complete" +} + +func Example_valuer() { + logger := log.NewLogfmtLogger(os.Stdout) + + count := 0 + counter := func() interface{} { + count++ + return count + } + + logger = log.With(logger, "count", log.Valuer(counter)) + + logger.Log("call", "first") + logger.Log("call", "second") + + // Output: + // count=1 call=first + // count=2 call=second +} + +func Example_debugInfo() { + logger := log.NewLogfmtLogger(os.Stdout) + + // make time predictable for this test + baseTime := time.Date(2015, time.February, 3, 10, 0, 0, 0, time.UTC) + mockTime := func() time.Time { + baseTime = baseTime.Add(time.Second) + return baseTime + } + + logger = log.With(logger, "time", log.Timestamp(mockTime), "caller", log.DefaultCaller) + + logger.Log("call", "first") + logger.Log("call", "second") + + // ... + + logger.Log("call", "third") + + // Output: + // time=2015-02-03T10:00:01Z caller=example_test.go:93 call=first + // time=2015-02-03T10:00:02Z caller=example_test.go:94 call=second + // time=2015-02-03T10:00:03Z caller=example_test.go:98 call=third +} + +func Example_syncWriter() { + w := log.NewSyncWriter(os.Stdout) + logger := log.NewLogfmtLogger(w) + + type Task struct { + ID int + } + + var wg sync.WaitGroup + + RunTask := func(task Task, logger log.Logger) { + logger.Log("taskID", task.ID, "event", "starting task") + + time.Sleep(time.Duration(rand.Intn(200)) * time.Millisecond) + + logger.Log("taskID", task.ID, "event", "task complete") + wg.Done() + } + + wg.Add(2) + + go RunTask(Task{ID: 1}, logger) + go RunTask(Task{ID: 2}, logger) + + wg.Wait() + + // Unordered output: + // taskID=1 event="starting task" + // taskID=2 event="starting task" + // taskID=1 event="task complete" + // taskID=2 event="task complete" +} diff --git a/vendor/github.com/go-kit/kit/log/json_logger.go b/vendor/github.com/go-kit/kit/log/json_logger.go new file mode 100644 index 0000000..231e099 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/json_logger.go @@ -0,0 +1,92 @@ +package log + +import ( + "encoding" + "encoding/json" + "fmt" + "io" + "reflect" +) + +type jsonLogger struct { + io.Writer +} + +// NewJSONLogger returns a Logger that encodes keyvals to the Writer as a +// single JSON object. Each log event produces no more than one call to +// w.Write. The passed Writer must be safe for concurrent use by multiple +// goroutines if the returned Logger will be used concurrently. +func NewJSONLogger(w io.Writer) Logger { + return &jsonLogger{w} +} + +func (l *jsonLogger) Log(keyvals ...interface{}) error { + n := (len(keyvals) + 1) / 2 // +1 to handle case when len is odd + m := make(map[string]interface{}, n) + for i := 0; i < len(keyvals); i += 2 { + k := keyvals[i] + var v interface{} = ErrMissingValue + if i+1 < len(keyvals) { + v = keyvals[i+1] + } + merge(m, k, v) + } + return json.NewEncoder(l.Writer).Encode(m) +} + +func merge(dst map[string]interface{}, k, v interface{}) { + var key string + switch x := k.(type) { + case string: + key = x + case fmt.Stringer: + key = safeString(x) + default: + key = fmt.Sprint(x) + } + if x, ok := v.(error); ok { + v = safeError(x) + } + + // We want json.Marshaler and encoding.TextMarshaller to take priority over + // err.Error() and v.String(). But json.Marshall (called later) does that by + // default so we force a no-op if it's one of those 2 case. + switch x := v.(type) { + case json.Marshaler: + case encoding.TextMarshaler: + case error: + v = safeError(x) + case fmt.Stringer: + v = safeString(x) + } + + dst[key] = v +} + +func safeString(str fmt.Stringer) (s string) { + defer func() { + if panicVal := recover(); panicVal != nil { + if v := reflect.ValueOf(str); v.Kind() == reflect.Ptr && v.IsNil() { + s = "NULL" + } else { + panic(panicVal) + } + } + }() + s = str.String() + return +} + +func safeError(err error) (s interface{}) { + defer func() { + if panicVal := recover(); panicVal != nil { + if v := reflect.ValueOf(err); v.Kind() == reflect.Ptr && v.IsNil() { + s = nil + } else { + panic(panicVal) + } + } + }() + s = err.Error() + return +} diff --git a/vendor/github.com/go-kit/kit/log/json_logger_test.go b/vendor/github.com/go-kit/kit/log/json_logger_test.go new file mode 100644 index 0000000..00e6910 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/json_logger_test.go @@ -0,0 +1,158 @@ +package log_test + +import ( + "bytes" + "errors" + "io/ioutil" + "testing" + + "github.com/go-kit/kit/log" +) + +func TestJSONLoggerCaller(t *testing.T) { + t.Parallel() + buf := &bytes.Buffer{} + logger := log.NewJSONLogger(buf) + logger = log.With(logger, "caller", log.DefaultCaller) + + if err := logger.Log(); err != nil { + t.Fatal(err) + } + if want, have := `{"caller":"json_logger_test.go:18"}`+"\n", buf.String(); want != have { + t.Errorf("\nwant %#v\nhave %#v", want, have) + } +} + +func TestJSONLogger(t *testing.T) { + t.Parallel() + buf := &bytes.Buffer{} + logger := log.NewJSONLogger(buf) + if err := logger.Log("err", errors.New("err"), "m", map[string]int{"0": 0}, "a", []int{1, 2, 3}); err != nil { + t.Fatal(err) + } + if want, have := `{"a":[1,2,3],"err":"err","m":{"0":0}}`+"\n", buf.String(); want != have { + t.Errorf("\nwant %#v\nhave %#v", want, have) + } +} + +func TestJSONLoggerMissingValue(t *testing.T) { + t.Parallel() + buf := &bytes.Buffer{} + logger := log.NewJSONLogger(buf) + if err := logger.Log("k"); err != nil { + t.Fatal(err) + } + if want, have := `{"k":"(MISSING)"}`+"\n", buf.String(); want != have { + t.Errorf("\nwant %#v\nhave %#v", want, have) + } +} + +func TestJSONLoggerNilStringerKey(t *testing.T) { + t.Parallel() + + buf := &bytes.Buffer{} + logger := log.NewJSONLogger(buf) + if err := logger.Log((*stringer)(nil), "v"); err != nil { + t.Fatal(err) + } + if want, have := `{"NULL":"v"}`+"\n", buf.String(); want != have { + t.Errorf("\nwant %#v\nhave %#v", want, have) + } +} + +func TestJSONLoggerNilErrorValue(t *testing.T) { + t.Parallel() + + buf := &bytes.Buffer{} + logger := log.NewJSONLogger(buf) + if err := logger.Log("err", (*stringError)(nil)); err != nil { + t.Fatal(err) + } + if want, have := `{"err":null}`+"\n", buf.String(); want != have { + t.Errorf("\nwant %#v\nhave %#v", want, have) + } +} + +// aller implements json.Marshaler, encoding.TextMarshaler, and fmt.Stringer. +type aller struct{} + +func (aller) MarshalJSON() ([]byte, error) { + return []byte("\"json\""), nil +} + +func (aller) MarshalText() ([]byte, error) { + return []byte("text"), nil +} + +func (aller) String() string { + return "string" +} + +// textstringer implements encoding.TextMarshaler and fmt.Stringer. +type textstringer struct{} + +func (textstringer) MarshalText() ([]byte, error) { + return []byte("text"), nil +} + +func (textstringer) String() string { + return "string" +} + +func TestJSONLoggerStringValue(t *testing.T) { + t.Parallel() + tests := []struct { + v interface{} + expected string + }{ + { + v: aller{}, + expected: `{"v":"json"}`, + }, + { + v: textstringer{}, + expected: `{"v":"text"}`, + }, + { + v: stringer("string"), + expected: `{"v":"string"}`, + }, + } + + for _, test := range tests { + buf := &bytes.Buffer{} + logger := log.NewJSONLogger(buf) + if err := logger.Log("v", test.v); err != nil { + t.Fatal(err) + } + + if want, have := test.expected+"\n", buf.String(); want != have { + t.Errorf("\nwant %#v\nhave %#v", want, have) + } + } +} + +type stringer string + +func (s stringer) String() string { + return string(s) +} + +type stringError string + +func (s stringError) Error() string { + return string(s) +} + +func BenchmarkJSONLoggerSimple(b *testing.B) { + benchmarkRunner(b, log.NewJSONLogger(ioutil.Discard), baseMessage) +} + +func BenchmarkJSONLoggerContextual(b *testing.B) { + benchmarkRunner(b, log.NewJSONLogger(ioutil.Discard), withMessage) +} + +func TestJSONLoggerConcurrency(t *testing.T) { + t.Parallel() + testConcurrency(t, log.NewJSONLogger(ioutil.Discard), 10000) +} diff --git a/vendor/github.com/go-kit/kit/log/level/benchmark_test.go b/vendor/github.com/go-kit/kit/log/level/benchmark_test.go new file mode 100644 index 0000000..4fca6f0 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/level/benchmark_test.go @@ -0,0 +1,72 @@ +package level_test + +import ( + "io/ioutil" + "testing" + + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/log/level" +) + +func Benchmark(b *testing.B) { + contexts := []struct { + name string + context func(log.Logger) log.Logger + }{ + {"NoContext", func(l log.Logger) log.Logger { + return l + }}, + {"TimeContext", func(l log.Logger) log.Logger { + return log.With(l, "time", log.DefaultTimestampUTC) + }}, + {"CallerContext", func(l log.Logger) log.Logger { + return log.With(l, "caller", log.DefaultCaller) + }}, + {"TimeCallerReqIDContext", func(l log.Logger) log.Logger { + return log.With(l, "time", log.DefaultTimestampUTC, "caller", log.DefaultCaller, "reqID", 29) + }}, + } + + loggers := []struct { + name string + logger log.Logger + }{ + {"Nop", log.NewNopLogger()}, + {"Logfmt", log.NewLogfmtLogger(ioutil.Discard)}, + {"JSON", log.NewJSONLogger(ioutil.Discard)}, + } + + filters := []struct { + name string + filter func(log.Logger) log.Logger + }{ + {"Baseline", func(l log.Logger) log.Logger { + return l + }}, + {"DisallowedLevel", func(l log.Logger) log.Logger { + return level.NewFilter(l, level.AllowInfo()) + }}, + {"AllowedLevel", func(l log.Logger) log.Logger { + return level.NewFilter(l, level.AllowAll()) + }}, + } + + for _, c := range contexts { + b.Run(c.name, func(b *testing.B) { + for _, f := range filters { + b.Run(f.name, func(b *testing.B) { + for _, l := range loggers { + b.Run(l.name, func(b *testing.B) { + logger := c.context(f.filter(l.logger)) + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + level.Debug(logger).Log("foo", "bar") + } + }) + } + }) + } + }) + } +} diff --git a/vendor/github.com/go-kit/kit/log/level/doc.go b/vendor/github.com/go-kit/kit/log/level/doc.go new file mode 100644 index 0000000..e3cbe55 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/level/doc.go @@ -0,0 +1,22 @@ +// Package level implements leveled logging on top of package log. To use the +// level package, create a logger as per normal in your func main, and wrap it +// with level.NewFilter. +// +// var logger log.Logger +// logger = log.NewLogfmtLogger(os.Stderr) +// logger = level.NewFilter(logger, level.AllowInfoAndAbove()) // <-- +// logger = log.NewContext(logger).With("ts", log.DefaultTimestampUTC) +// +// Then, at the callsites, use one of the level.Debug, Info, Warn, or Error +// helper methods to emit leveled log events. +// +// logger.Log("foo", "bar") // as normal, no level +// level.Debug(logger).Log("request_id", reqID, "trace_data", trace.Get()) +// if value > 100 { +// level.Error(logger).Log("value", value) +// } +// +// NewFilter allows precise control over what happens when a log event is +// emitted without a level key, or if a squelched level is used. Check the +// Option functions for details. +package level diff --git a/vendor/github.com/go-kit/kit/log/level/example_test.go b/vendor/github.com/go-kit/kit/log/level/example_test.go new file mode 100644 index 0000000..fed52e5 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/level/example_test.go @@ -0,0 +1,25 @@ +package level_test + +import ( + "errors" + "os" + + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/log/level" +) + +func Example_basic() { + // setup logger with level filter + logger := log.NewLogfmtLogger(os.Stdout) + logger = level.NewFilter(logger, level.AllowInfo()) + logger = log.With(logger, "caller", log.DefaultCaller) + + // use level helpers to log at different levels + level.Error(logger).Log("err", errors.New("bad data")) + level.Info(logger).Log("event", "data saved") + level.Debug(logger).Log("next item", 17) // filtered + + // Output: + // level=error caller=example_test.go:18 err="bad data" + // level=info caller=example_test.go:19 event="data saved" +} diff --git a/vendor/github.com/go-kit/kit/log/level/level.go b/vendor/github.com/go-kit/kit/log/level/level.go new file mode 100644 index 0000000..6833b0d --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/level/level.go @@ -0,0 +1,205 @@ +package level + +import "github.com/go-kit/kit/log" + +// Error returns a logger that includes a Key/ErrorValue pair. +func Error(logger log.Logger) log.Logger { + return log.WithPrefix(logger, Key(), ErrorValue()) +} + +// Warn returns a logger that includes a Key/WarnValue pair. +func Warn(logger log.Logger) log.Logger { + return log.WithPrefix(logger, Key(), WarnValue()) +} + +// Info returns a logger that includes a Key/InfoValue pair. +func Info(logger log.Logger) log.Logger { + return log.WithPrefix(logger, Key(), InfoValue()) +} + +// Debug returns a logger that includes a Key/DebugValue pair. +func Debug(logger log.Logger) log.Logger { + return log.WithPrefix(logger, Key(), DebugValue()) +} + +// NewFilter wraps next and implements level filtering. See the commentary on +// the Option functions for a detailed description of how to configure levels. +// If no options are provided, all leveled log events created with Debug, +// Info, Warn or Error helper methods are squelched and non-leveled log +// events are passed to next unmodified. +func NewFilter(next log.Logger, options ...Option) log.Logger { + l := &logger{ + next: next, + } + for _, option := range options { + option(l) + } + return l +} + +type logger struct { + next log.Logger + allowed level + squelchNoLevel bool + errNotAllowed error + errNoLevel error +} + +func (l *logger) Log(keyvals ...interface{}) error { + var hasLevel, levelAllowed bool + for i := 1; i < len(keyvals); i += 2 { + if v, ok := keyvals[i].(*levelValue); ok { + hasLevel = true + levelAllowed = l.allowed&v.level != 0 + break + } + } + if !hasLevel && l.squelchNoLevel { + return l.errNoLevel + } + if hasLevel && !levelAllowed { + return l.errNotAllowed + } + return l.next.Log(keyvals...) +} + +// Option sets a parameter for the leveled logger. +type Option func(*logger) + +// AllowAll is an alias for AllowDebug. +func AllowAll() Option { + return AllowDebug() +} + +// AllowDebug allows error, warn, info and debug level log events to pass. +func AllowDebug() Option { + return allowed(levelError | levelWarn | levelInfo | levelDebug) +} + +// AllowInfo allows error, warn and info level log events to pass. +func AllowInfo() Option { + return allowed(levelError | levelWarn | levelInfo) +} + +// AllowWarn allows error and warn level log events to pass. +func AllowWarn() Option { + return allowed(levelError | levelWarn) +} + +// AllowError allows only error level log events to pass. +func AllowError() Option { + return allowed(levelError) +} + +// AllowNone allows no leveled log events to pass. +func AllowNone() Option { + return allowed(0) +} + +func allowed(allowed level) Option { + return func(l *logger) { l.allowed = allowed } +} + +// ErrNotAllowed sets the error to return from Log when it squelches a log +// event disallowed by the configured Allow[Level] option. By default, +// ErrNotAllowed is nil; in this case the log event is squelched with no +// error. +func ErrNotAllowed(err error) Option { + return func(l *logger) { l.errNotAllowed = err } +} + +// SquelchNoLevel instructs Log to squelch log events with no level, so that +// they don't proceed through to the wrapped logger. If SquelchNoLevel is set +// to true and a log event is squelched in this way, the error value +// configured with ErrNoLevel is returned to the caller. +func SquelchNoLevel(squelch bool) Option { + return func(l *logger) { l.squelchNoLevel = squelch } +} + +// ErrNoLevel sets the error to return from Log when it squelches a log event +// with no level. By default, ErrNoLevel is nil; in this case the log event is +// squelched with no error. +func ErrNoLevel(err error) Option { + return func(l *logger) { l.errNoLevel = err } +} + +// NewInjector wraps next and returns a logger that adds a Key/level pair to +// the beginning of log events that don't already contain a level. In effect, +// this gives a default level to logs without a level. +func NewInjector(next log.Logger, level Value) log.Logger { + return &injector{ + next: next, + level: level, + } +} + +type injector struct { + next log.Logger + level interface{} +} + +func (l *injector) Log(keyvals ...interface{}) error { + for i := 1; i < len(keyvals); i += 2 { + if _, ok := keyvals[i].(*levelValue); ok { + return l.next.Log(keyvals...) + } + } + kvs := make([]interface{}, len(keyvals)+2) + kvs[0], kvs[1] = key, l.level + copy(kvs[2:], keyvals) + return l.next.Log(kvs...) +} + +// Value is the interface that each of the canonical level values implement. +// It contains unexported methods that prevent types from other packages from +// implementing it and guaranteeing that NewFilter can distinguish the levels +// defined in this package from all other values. +type Value interface { + String() string + levelVal() +} + +// Key returns the unique key added to log events by the loggers in this +// package. +func Key() interface{} { return key } + +// ErrorValue returns the unique value added to log events by Error. +func ErrorValue() Value { return errorValue } + +// WarnValue returns the unique value added to log events by Warn. +func WarnValue() Value { return warnValue } + +// InfoValue returns the unique value added to log events by Info. +func InfoValue() Value { return infoValue } + +// DebugValue returns the unique value added to log events by Warn. +func DebugValue() Value { return debugValue } + +var ( + // key is of type interfae{} so that it allocates once during package + // initialization and avoids allocating every type the value is added to a + // []interface{} later. + key interface{} = "level" + + errorValue = &levelValue{level: levelError, name: "error"} + warnValue = &levelValue{level: levelWarn, name: "warn"} + infoValue = &levelValue{level: levelInfo, name: "info"} + debugValue = &levelValue{level: levelDebug, name: "debug"} +) + +type level byte + +const ( + levelDebug level = 1 << iota + levelInfo + levelWarn + levelError +) + +type levelValue struct { + name string + level +} + +func (v *levelValue) String() string { return v.name } +func (v *levelValue) levelVal() {} diff --git a/vendor/github.com/go-kit/kit/log/level/level_test.go b/vendor/github.com/go-kit/kit/log/level/level_test.go new file mode 100644 index 0000000..4d2aca5 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/level/level_test.go @@ -0,0 +1,235 @@ +package level_test + +import ( + "bytes" + "errors" + "io" + "strings" + "testing" + + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/log/level" +) + +func TestVariousLevels(t *testing.T) { + testCases := []struct { + name string + allowed level.Option + want string + }{ + { + "AllowAll", + level.AllowAll(), + strings.Join([]string{ + `{"level":"debug","this is":"debug log"}`, + `{"level":"info","this is":"info log"}`, + `{"level":"warn","this is":"warn log"}`, + `{"level":"error","this is":"error log"}`, + }, "\n"), + }, + { + "AllowDebug", + level.AllowDebug(), + strings.Join([]string{ + `{"level":"debug","this is":"debug log"}`, + `{"level":"info","this is":"info log"}`, + `{"level":"warn","this is":"warn log"}`, + `{"level":"error","this is":"error log"}`, + }, "\n"), + }, + { + "AllowDebug", + level.AllowInfo(), + strings.Join([]string{ + `{"level":"info","this is":"info log"}`, + `{"level":"warn","this is":"warn log"}`, + `{"level":"error","this is":"error log"}`, + }, "\n"), + }, + { + "AllowWarn", + level.AllowWarn(), + strings.Join([]string{ + `{"level":"warn","this is":"warn log"}`, + `{"level":"error","this is":"error log"}`, + }, "\n"), + }, + { + "AllowError", + level.AllowError(), + strings.Join([]string{ + `{"level":"error","this is":"error log"}`, + }, "\n"), + }, + { + "AllowNone", + level.AllowNone(), + ``, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + var buf bytes.Buffer + logger := level.NewFilter(log.NewJSONLogger(&buf), tc.allowed) + + level.Debug(logger).Log("this is", "debug log") + level.Info(logger).Log("this is", "info log") + level.Warn(logger).Log("this is", "warn log") + level.Error(logger).Log("this is", "error log") + + if want, have := tc.want, strings.TrimSpace(buf.String()); want != have { + t.Errorf("\nwant:\n%s\nhave:\n%s", want, have) + } + }) + } +} + +func TestErrNotAllowed(t *testing.T) { + myError := errors.New("squelched!") + opts := []level.Option{ + level.AllowWarn(), + level.ErrNotAllowed(myError), + } + logger := level.NewFilter(log.NewNopLogger(), opts...) + + if want, have := myError, level.Info(logger).Log("foo", "bar"); want != have { + t.Errorf("want %#+v, have %#+v", want, have) + } + + if want, have := error(nil), level.Warn(logger).Log("foo", "bar"); want != have { + t.Errorf("want %#+v, have %#+v", want, have) + } +} + +func TestErrNoLevel(t *testing.T) { + myError := errors.New("no level specified") + + var buf bytes.Buffer + opts := []level.Option{ + level.SquelchNoLevel(true), + level.ErrNoLevel(myError), + } + logger := level.NewFilter(log.NewJSONLogger(&buf), opts...) + + if want, have := myError, logger.Log("foo", "bar"); want != have { + t.Errorf("want %v, have %v", want, have) + } + if want, have := ``, strings.TrimSpace(buf.String()); want != have { + t.Errorf("\nwant '%s'\nhave '%s'", want, have) + } +} + +func TestAllowNoLevel(t *testing.T) { + var buf bytes.Buffer + opts := []level.Option{ + level.SquelchNoLevel(false), + level.ErrNoLevel(errors.New("I should never be returned!")), + } + logger := level.NewFilter(log.NewJSONLogger(&buf), opts...) + + if want, have := error(nil), logger.Log("foo", "bar"); want != have { + t.Errorf("want %v, have %v", want, have) + } + if want, have := `{"foo":"bar"}`, strings.TrimSpace(buf.String()); want != have { + t.Errorf("\nwant '%s'\nhave '%s'", want, have) + } +} + +func TestLevelContext(t *testing.T) { + var buf bytes.Buffer + + // Wrapping the level logger with a context allows users to use + // log.DefaultCaller as per normal. + var logger log.Logger + logger = log.NewLogfmtLogger(&buf) + logger = level.NewFilter(logger, level.AllowAll()) + logger = log.With(logger, "caller", log.DefaultCaller) + + level.Info(logger).Log("foo", "bar") + if want, have := `level=info caller=level_test.go:149 foo=bar`, strings.TrimSpace(buf.String()); want != have { + t.Errorf("\nwant '%s'\nhave '%s'", want, have) + } +} + +func TestContextLevel(t *testing.T) { + var buf bytes.Buffer + + // Wrapping a context with the level logger still works, but requires users + // to specify a higher callstack depth value. + var logger log.Logger + logger = log.NewLogfmtLogger(&buf) + logger = log.With(logger, "caller", log.Caller(5)) + logger = level.NewFilter(logger, level.AllowAll()) + + level.Info(logger).Log("foo", "bar") + if want, have := `caller=level_test.go:165 level=info foo=bar`, strings.TrimSpace(buf.String()); want != have { + t.Errorf("\nwant '%s'\nhave '%s'", want, have) + } +} + +func TestLevelFormatting(t *testing.T) { + testCases := []struct { + name string + format func(io.Writer) log.Logger + output string + }{ + { + name: "logfmt", + format: log.NewLogfmtLogger, + output: `level=info foo=bar`, + }, + { + name: "JSON", + format: log.NewJSONLogger, + output: `{"foo":"bar","level":"info"}`, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + var buf bytes.Buffer + + logger := tc.format(&buf) + level.Info(logger).Log("foo", "bar") + if want, have := tc.output, strings.TrimSpace(buf.String()); want != have { + t.Errorf("\nwant: '%s'\nhave '%s'", want, have) + } + }) + } +} + +func TestInjector(t *testing.T) { + var ( + output []interface{} + logger log.Logger + ) + + logger = log.LoggerFunc(func(keyvals ...interface{}) error { + output = keyvals + return nil + }) + logger = level.NewInjector(logger, level.InfoValue()) + + logger.Log("foo", "bar") + if got, want := len(output), 4; got != want { + t.Errorf("missing level not injected: got len==%d, want len==%d", got, want) + } + if got, want := output[0], level.Key(); got != want { + t.Errorf("wrong level key: got %#v, want %#v", got, want) + } + if got, want := output[1], level.InfoValue(); got != want { + t.Errorf("wrong level value: got %#v, want %#v", got, want) + } + + level.Error(logger).Log("foo", "bar") + if got, want := len(output), 4; got != want { + t.Errorf("leveled record modified: got len==%d, want len==%d", got, want) + } + if got, want := output[0], level.Key(); got != want { + t.Errorf("wrong level key: got %#v, want %#v", got, want) + } + if got, want := output[1], level.ErrorValue(); got != want { + t.Errorf("wrong level value: got %#v, want %#v", got, want) + } +} diff --git a/vendor/github.com/go-kit/kit/log/log.go b/vendor/github.com/go-kit/kit/log/log.go new file mode 100644 index 0000000..66a9e2f --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/log.go @@ -0,0 +1,135 @@ +package log + +import "errors" + +// Logger is the fundamental interface for all log operations. Log creates a +// log event from keyvals, a variadic sequence of alternating keys and values. +// Implementations must be safe for concurrent use by multiple goroutines. In +// particular, any implementation of Logger that appends to keyvals or +// modifies or retains any of its elements must make a copy first. +type Logger interface { + Log(keyvals ...interface{}) error +} + +// ErrMissingValue is appended to keyvals slices with odd length to substitute +// the missing value. +var ErrMissingValue = errors.New("(MISSING)") + +// With returns a new contextual logger with keyvals prepended to those passed +// to calls to Log. If logger is also a contextual logger created by With or +// WithPrefix, keyvals is appended to the existing context. +// +// The returned Logger replaces all value elements (odd indexes) containing a +// Valuer with their generated value for each call to its Log method. +func With(logger Logger, keyvals ...interface{}) Logger { + if len(keyvals) == 0 { + return logger + } + l := newContext(logger) + kvs := append(l.keyvals, keyvals...) + if len(kvs)%2 != 0 { + kvs = append(kvs, ErrMissingValue) + } + return &context{ + logger: l.logger, + // Limiting the capacity of the stored keyvals ensures that a new + // backing array is created if the slice must grow in Log or With. + // Using the extra capacity without copying risks a data race that + // would violate the Logger interface contract. + keyvals: kvs[:len(kvs):len(kvs)], + hasValuer: l.hasValuer || containsValuer(keyvals), + } +} + +// WithPrefix returns a new contextual logger with keyvals prepended to those +// passed to calls to Log. If logger is also a contextual logger created by +// With or WithPrefix, keyvals is prepended to the existing context. +// +// The returned Logger replaces all value elements (odd indexes) containing a +// Valuer with their generated value for each call to its Log method. +func WithPrefix(logger Logger, keyvals ...interface{}) Logger { + if len(keyvals) == 0 { + return logger + } + l := newContext(logger) + // Limiting the capacity of the stored keyvals ensures that a new + // backing array is created if the slice must grow in Log or With. + // Using the extra capacity without copying risks a data race that + // would violate the Logger interface contract. + n := len(l.keyvals) + len(keyvals) + if len(keyvals)%2 != 0 { + n++ + } + kvs := make([]interface{}, 0, n) + kvs = append(kvs, keyvals...) + if len(kvs)%2 != 0 { + kvs = append(kvs, ErrMissingValue) + } + kvs = append(kvs, l.keyvals...) + return &context{ + logger: l.logger, + keyvals: kvs, + hasValuer: l.hasValuer || containsValuer(keyvals), + } +} + +// context is the Logger implementation returned by With and WithPrefix. It +// wraps a Logger and holds keyvals that it includes in all log events. Its +// Log method calls bindValues to generate values for each Valuer in the +// context keyvals. +// +// A context must always have the same number of stack frames between calls to +// its Log method and the eventual binding of Valuers to their value. This +// requirement comes from the functional requirement to allow a context to +// resolve application call site information for a Caller stored in the +// context. To do this we must be able to predict the number of logging +// functions on the stack when bindValues is called. +// +// Two implementation details provide the needed stack depth consistency. +// +// 1. newContext avoids introducing an additional layer when asked to +// wrap another context. +// 2. With and WithPrefix avoid introducing an additional layer by +// returning a newly constructed context with a merged keyvals rather +// than simply wrapping the existing context. +type context struct { + logger Logger + keyvals []interface{} + hasValuer bool +} + +func newContext(logger Logger) *context { + if c, ok := logger.(*context); ok { + return c + } + return &context{logger: logger} +} + +// Log replaces all value elements (odd indexes) containing a Valuer in the +// stored context with their generated value, appends keyvals, and passes the +// result to the wrapped Logger. +func (l *context) Log(keyvals ...interface{}) error { + kvs := append(l.keyvals, keyvals...) + if len(kvs)%2 != 0 { + kvs = append(kvs, ErrMissingValue) + } + if l.hasValuer { + // If no keyvals were appended above then we must copy l.keyvals so + // that future log events will reevaluate the stored Valuers. + if len(keyvals) == 0 { + kvs = append([]interface{}{}, l.keyvals...) + } + bindValues(kvs[:len(l.keyvals)]) + } + return l.logger.Log(kvs...) +} + +// LoggerFunc is an adapter to allow use of ordinary functions as Loggers. If +// f is a function with the appropriate signature, LoggerFunc(f) is a Logger +// object that calls f. +type LoggerFunc func(...interface{}) error + +// Log implements Logger by calling f(keyvals...). +func (f LoggerFunc) Log(keyvals ...interface{}) error { + return f(keyvals...) +} diff --git a/vendor/github.com/go-kit/kit/log/log_test.go b/vendor/github.com/go-kit/kit/log/log_test.go new file mode 100644 index 0000000..1bf2972 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/log_test.go @@ -0,0 +1,191 @@ +package log_test + +import ( + "bytes" + "fmt" + "sync" + "testing" + + "github.com/go-kit/kit/log" + "github.com/go-stack/stack" +) + +func TestContext(t *testing.T) { + t.Parallel() + buf := &bytes.Buffer{} + logger := log.NewLogfmtLogger(buf) + + kvs := []interface{}{"a", 123} + lc := log.With(logger, kvs...) + kvs[1] = 0 // With should copy its key values + + lc = log.With(lc, "b", "c") // With should stack + if err := lc.Log("msg", "message"); err != nil { + t.Fatal(err) + } + if want, have := "a=123 b=c msg=message\n", buf.String(); want != have { + t.Errorf("\nwant: %shave: %s", want, have) + } + + buf.Reset() + lc = log.WithPrefix(lc, "p", "first") + if err := lc.Log("msg", "message"); err != nil { + t.Fatal(err) + } + if want, have := "p=first a=123 b=c msg=message\n", buf.String(); want != have { + t.Errorf("\nwant: %shave: %s", want, have) + } +} + +func TestContextMissingValue(t *testing.T) { + t.Parallel() + var output []interface{} + logger := log.Logger(log.LoggerFunc(func(keyvals ...interface{}) error { + output = keyvals + return nil + })) + + log.WithPrefix(log.With(logger, "k1"), "k0").Log("k2") + if want, have := 6, len(output); want != have { + t.Errorf("want len(output) == %v, have %v", want, have) + } + for i := 1; i < 6; i += 2 { + if want, have := log.ErrMissingValue, output[i]; want != have { + t.Errorf("want output[%d] == %#v, have %#v", i, want, have) + } + } +} + +// Test that context.Log has a consistent function stack depth when binding +// Valuers, regardless of how many times With has been called. +func TestContextStackDepth(t *testing.T) { + t.Parallel() + fn := fmt.Sprintf("%n", stack.Caller(0)) + + var output []interface{} + + logger := log.Logger(log.LoggerFunc(func(keyvals ...interface{}) error { + output = keyvals + return nil + })) + + stackValuer := log.Valuer(func() interface{} { + for i, c := range stack.Trace() { + if fmt.Sprintf("%n", c) == fn { + return i + } + } + t.Fatal("Test function not found in stack trace.") + return nil + }) + + logger = log.With(logger, "stack", stackValuer) + + // Call through interface to get baseline. + logger.Log("k", "v") + want := output[1].(int) + + for len(output) < 10 { + logger.Log("k", "v") + if have := output[1]; have != want { + t.Errorf("%d Withs: have %v, want %v", len(output)/2-1, have, want) + } + + wrapped := log.With(logger) + wrapped.Log("k", "v") + if have := output[1]; have != want { + t.Errorf("%d Withs: have %v, want %v", len(output)/2-1, have, want) + } + + logger = log.With(logger, "k", "v") + } +} + +// Test that With returns a Logger safe for concurrent use. This test +// validates that the stored logging context does not get corrupted when +// multiple clients concurrently log additional keyvals. +// +// This test must be run with go test -cpu 2 (or more) to achieve its goal. +func TestWithConcurrent(t *testing.T) { + // Create some buckets to count how many events each goroutine logs. + const goroutines = 8 + counts := [goroutines]int{} + + // This logger extracts a goroutine id from the last value field and + // increments the referenced bucket. + logger := log.LoggerFunc(func(kv ...interface{}) error { + goroutine := kv[len(kv)-1].(int) + counts[goroutine]++ + return nil + }) + + // With must be careful about handling slices that can grow without + // copying the underlying array, so give it a challenge. + l := log.With(logger, make([]interface{}, 0, 2)...) + + // Start logging concurrently. Each goroutine logs its id so the logger + // can bucket the event counts. + var wg sync.WaitGroup + wg.Add(goroutines) + const n = 10000 + for i := 0; i < goroutines; i++ { + go func(idx int) { + defer wg.Done() + for j := 0; j < n; j++ { + l.Log("goroutineIdx", idx) + } + }(i) + } + wg.Wait() + + for bucket, have := range counts { + if want := n; want != have { + t.Errorf("bucket %d: want %d, have %d", bucket, want, have) // note Errorf + } + } +} + +func BenchmarkDiscard(b *testing.B) { + logger := log.NewNopLogger() + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + logger.Log("k", "v") + } +} + +func BenchmarkOneWith(b *testing.B) { + logger := log.NewNopLogger() + lc := log.With(logger, "k", "v") + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + lc.Log("k", "v") + } +} + +func BenchmarkTwoWith(b *testing.B) { + logger := log.NewNopLogger() + lc := log.With(logger, "k", "v") + for i := 1; i < 2; i++ { + lc = log.With(lc, "k", "v") + } + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + lc.Log("k", "v") + } +} + +func BenchmarkTenWith(b *testing.B) { + logger := log.NewNopLogger() + lc := log.With(logger, "k", "v") + for i := 1; i < 10; i++ { + lc = log.With(lc, "k", "v") + } + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + lc.Log("k", "v") + } +} diff --git a/vendor/github.com/go-kit/kit/log/logfmt_logger.go b/vendor/github.com/go-kit/kit/log/logfmt_logger.go new file mode 100644 index 0000000..a003052 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/logfmt_logger.go @@ -0,0 +1,62 @@ +package log + +import ( + "bytes" + "io" + "sync" + + "github.com/go-logfmt/logfmt" +) + +type logfmtEncoder struct { + *logfmt.Encoder + buf bytes.Buffer +} + +func (l *logfmtEncoder) Reset() { + l.Encoder.Reset() + l.buf.Reset() +} + +var logfmtEncoderPool = sync.Pool{ + New: func() interface{} { + var enc logfmtEncoder + enc.Encoder = logfmt.NewEncoder(&enc.buf) + return &enc + }, +} + +type logfmtLogger struct { + w io.Writer +} + +// NewLogfmtLogger returns a logger that encodes keyvals to the Writer in +// logfmt format. Each log event produces no more than one call to w.Write. +// The passed Writer must be safe for concurrent use by multiple goroutines if +// the returned Logger will be used concurrently. +func NewLogfmtLogger(w io.Writer) Logger { + return &logfmtLogger{w} +} + +func (l logfmtLogger) Log(keyvals ...interface{}) error { + enc := logfmtEncoderPool.Get().(*logfmtEncoder) + enc.Reset() + defer logfmtEncoderPool.Put(enc) + + if err := enc.EncodeKeyvals(keyvals...); err != nil { + return err + } + + // Add newline to the end of the buffer + if err := enc.EndRecord(); err != nil { + return err + } + + // The Logger interface requires implementations to be safe for concurrent + // use by multiple goroutines. For this implementation that means making + // only one call to l.w.Write() for each call to Log. + if _, err := l.w.Write(enc.buf.Bytes()); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/go-kit/kit/log/logfmt_logger_test.go b/vendor/github.com/go-kit/kit/log/logfmt_logger_test.go new file mode 100644 index 0000000..91bbca1 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/logfmt_logger_test.go @@ -0,0 +1,57 @@ +package log_test + +import ( + "bytes" + "errors" + "io/ioutil" + "testing" + + "github.com/go-kit/kit/log" + "github.com/go-logfmt/logfmt" +) + +func TestLogfmtLogger(t *testing.T) { + t.Parallel() + buf := &bytes.Buffer{} + logger := log.NewLogfmtLogger(buf) + + if err := logger.Log("hello", "world"); err != nil { + t.Fatal(err) + } + if want, have := "hello=world\n", buf.String(); want != have { + t.Errorf("want %#v, have %#v", want, have) + } + + buf.Reset() + if err := logger.Log("a", 1, "err", errors.New("error")); err != nil { + t.Fatal(err) + } + if want, have := "a=1 err=error\n", buf.String(); want != have { + t.Errorf("want %#v, have %#v", want, have) + } + + buf.Reset() + if err := logger.Log("std_map", map[int]int{1: 2}, "my_map", mymap{0: 0}); err != nil { + t.Fatal(err) + } + if want, have := "std_map=\""+logfmt.ErrUnsupportedValueType.Error()+"\" my_map=special_behavior\n", buf.String(); want != have { + t.Errorf("want %#v, have %#v", want, have) + } +} + +func BenchmarkLogfmtLoggerSimple(b *testing.B) { + benchmarkRunner(b, log.NewLogfmtLogger(ioutil.Discard), baseMessage) +} + +func BenchmarkLogfmtLoggerContextual(b *testing.B) { + benchmarkRunner(b, log.NewLogfmtLogger(ioutil.Discard), withMessage) +} + +func TestLogfmtLoggerConcurrency(t *testing.T) { + t.Parallel() + testConcurrency(t, log.NewLogfmtLogger(ioutil.Discard), 10000) +} + +type mymap map[int]int + +func (m mymap) String() string { return "special_behavior" } diff --git a/vendor/github.com/go-kit/kit/log/nop_logger.go b/vendor/github.com/go-kit/kit/log/nop_logger.go new file mode 100644 index 0000000..1047d62 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/nop_logger.go @@ -0,0 +1,8 @@ +package log + +type nopLogger struct{} + +// NewNopLogger returns a logger that doesn't do anything. +func NewNopLogger() Logger { return nopLogger{} } + +func (nopLogger) Log(...interface{}) error { return nil } diff --git a/vendor/github.com/go-kit/kit/log/nop_logger_test.go b/vendor/github.com/go-kit/kit/log/nop_logger_test.go new file mode 100644 index 0000000..908ddd8 --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/nop_logger_test.go @@ -0,0 +1,26 @@ +package log_test + +import ( + "testing" + + "github.com/go-kit/kit/log" +) + +func TestNopLogger(t *testing.T) { + t.Parallel() + logger := log.NewNopLogger() + if err := logger.Log("abc", 123); err != nil { + t.Error(err) + } + if err := log.With(logger, "def", "ghi").Log(); err != nil { + t.Error(err) + } +} + +func BenchmarkNopLoggerSimple(b *testing.B) { + benchmarkRunner(b, log.NewNopLogger(), baseMessage) +} + +func BenchmarkNopLoggerContextual(b *testing.B) { + benchmarkRunner(b, log.NewNopLogger(), withMessage) +} diff --git a/vendor/github.com/go-kit/kit/log/stdlib.go b/vendor/github.com/go-kit/kit/log/stdlib.go new file mode 100644 index 0000000..ff96b5d --- /dev/null +++ b/vendor/github.com/go-kit/kit/log/stdlib.go @@ -0,0 +1,116 @@ +package log + +import ( + "io" + "log" + "regexp" + "strings" +) + +// StdlibWriter implements io.Writer by invoking the stdlib log.Print. It's +// designed to be passed to a Go kit logger as the writer, for cases where +// it's necessary to redirect all Go kit log output to the stdlib logger. +// +// If you have any choice in the matter, you shouldn't use this. Prefer to +// redirect the stdlib log to the Go kit logger via NewStdlibAdapter. +type StdlibWriter struct{} + +// Write implements io.Writer. +func (w StdlibWriter) Write(p []byte) (int, error) { + log.Print(strings.TrimSpace(string(p))) + return len(p), nil +} + +// StdlibAdapter wraps a Logger and allows it to be passed to the stdlib +// logger's SetOutput. It will extract date/timestamps, filenames, and +// messages, and place them under relevant keys. +type StdlibAdapter struct { + Logger + timestampKey string + fileKey string + messageKey string +} + +// StdlibAdapterOption sets a parameter for the StdlibAdapter. +type StdlibAdapterOption func(*StdlibAdapter) + +// TimestampKey sets the key for the timestamp field. By default, it's "ts". +func TimestampKey(key string) StdlibAdapterOption { + return func(a *StdlibAdapter) { a.timestampKey = key } +} + +// FileKey sets the key for the file and line field. By default, it's "caller". +func FileKey(key string) StdlibAdapterOption { + return func(a *StdlibAdapter) { a.fileKey = key } +} + +// MessageKey sets the key for the actual log message. By default, it's "msg". +func MessageKey(key string) StdlibAdapterOption { + return func(a *StdlibAdapter) { a.messageKey = key } +} + +// NewStdlibAdapter returns a new StdlibAdapter wrapper around the passed +// logger. It's designed to be passed to log.SetOutput. +func NewStdlibAdapter(logger Logger, options ...StdlibAdapterOption) io.Writer { + a := StdlibAdapter{ + Logger: logger, + timestampKey: "ts", + fileKey: "caller", + messageKey: "msg", + } + for _, option := range options { + option(&a) + } + return a +} + +func (a StdlibAdapter) Write(p []byte) (int, error) { + result := subexps(p) + keyvals := []interface{}{} + var timestamp string + if date, ok := result["date"]; ok && date != "" { + timestamp = date + } + if time, ok := result["time"]; ok && time != "" { + if timestamp != "" { + timestamp += " " + } + timestamp += time + } + if timestamp != "" { + keyvals = append(keyvals, a.timestampKey, timestamp) + } + if file, ok := result["file"]; ok && file != "" { + keyvals = append(keyvals, a.fileKey, file) + } + if msg, ok := result["msg"]; ok { + keyvals = append(keyvals, a.messageKey, msg) + } + if err := a.Logger.Log(keyvals...); err != nil { + return 0, err + } + return len(p), nil +} + +const ( + logRegexpDate = `(?P[0-9]{4}/[0-9]{2}/[0-9]{2})?[ ]?` + logRegexpTime = `(?Pr\xe9sum\xe9" + + d := xml.NewDecoder(strings.NewReader(s)) + d.CharsetReader = NewReaderLabel + + var a struct { + Word string + } + err := d.Decode(&a) + if err != nil { + t.Fatalf("Decode: %v", err) + } + + want := "résumé" + if a.Word != want { + t.Errorf("got %q, want %q", a.Word, want) + } +} diff --git a/vendor/golang.org/x/net/html/charset/testdata/HTTP-charset.html b/vendor/golang.org/x/net/html/charset/testdata/HTTP-charset.html new file mode 100644 index 0000000..9915fa0 --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/HTTP-charset.html @@ -0,0 +1,48 @@ + + + + HTTP charset + + + + + + + + + + + +

HTTP charset

+ + +
+ + +
 
+ + + + + +
+

The character encoding of a page can be set using the HTTP header charset declaration.

+

The test contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ÜÀÚ. This matches the sequence of bytes above when they are interpreted as ISO 8859-15. If the class name matches the selector then the test will pass.

The only character encoding declaration for this HTML file is in the HTTP header, which sets the encoding to ISO 8859-15.

+
+
+
HTML5
+

the-input-byte-stream-001
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The default encoding for the browser you are testing is not set to ISO 8859-15.
  • +
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-UTF-8-BOM.html b/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-UTF-8-BOM.html new file mode 100644 index 0000000..26e5d8b --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-UTF-8-BOM.html @@ -0,0 +1,48 @@ + + + + HTTP vs UTF-8 BOM + + + + + + + + + + + +

HTTP vs UTF-8 BOM

+ + +
+ + +
 
+ + + + + +
+

A character encoding set in the HTTP header has lower precedence than the UTF-8 signature.

+

The HTTP header attempts to set the character encoding to ISO 8859-15. The page starts with a UTF-8 signature.

The test contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ýäè. This matches the sequence of bytes above when they are interpreted as UTF-8. If the class name matches the selector then the test will pass.

If the test is unsuccessful, the characters  should appear at the top of the page. These represent the bytes that make up the UTF-8 signature when encountered in the ISO 8859-15 encoding.

+
+
+
HTML5
+

the-input-byte-stream-034
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The default encoding for the browser you are testing is not set to ISO 8859-15.
  • +
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-charset.html b/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-charset.html new file mode 100644 index 0000000..2f07e95 --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-charset.html @@ -0,0 +1,49 @@ + + + + HTTP vs meta charset + + + + + + + + + + + +

HTTP vs meta charset

+ + +
+ + +
 
+ + + + + +
+

The HTTP header has a higher precedence than an encoding declaration in a meta charset attribute.

+

The HTTP header attempts to set the character encoding to ISO 8859-15. The page contains an encoding declaration in a meta charset attribute that attempts to set the character encoding to ISO 8859-1.

The test contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ÜÀÚ. This matches the sequence of bytes above when they are interpreted as ISO 8859-15. If the class name matches the selector then the test will pass.

+
+
+
HTML5
+

the-input-byte-stream-018
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The default encoding for the browser you are testing is not set to ISO 8859-15.
  • +
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-content.html b/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-content.html new file mode 100644 index 0000000..6853cdd --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-content.html @@ -0,0 +1,49 @@ + + + + HTTP vs meta content + + + + + + + + + + + +

HTTP vs meta content

+ + +
+ + +
 
+ + + + + +
+

The HTTP header has a higher precedence than an encoding declaration in a meta content attribute.

+

The HTTP header attempts to set the character encoding to ISO 8859-15. The page contains an encoding declaration in a meta content attribute that attempts to set the character encoding to ISO 8859-1.

The test contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ÜÀÚ. This matches the sequence of bytes above when they are interpreted as ISO 8859-15. If the class name matches the selector then the test will pass.

+
+
+
HTML5
+

the-input-byte-stream-016
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The default encoding for the browser you are testing is not set to ISO 8859-15.
  • +
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/charset/testdata/No-encoding-declaration.html b/vendor/golang.org/x/net/html/charset/testdata/No-encoding-declaration.html new file mode 100644 index 0000000..612e26c --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/No-encoding-declaration.html @@ -0,0 +1,47 @@ + + + + No encoding declaration + + + + + + + + + + + +

No encoding declaration

+ + +
+ + +
 
+ + + + + +
+

A page with no encoding information in HTTP, BOM, XML declaration or meta element will be treated as UTF-8.

+

The test on this page contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ýäè. This matches the sequence of bytes above when they are interpreted as UTF-8. If the class name matches the selector then the test will pass.

+
+
+
HTML5
+

the-input-byte-stream-015
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/charset/testdata/README b/vendor/golang.org/x/net/html/charset/testdata/README new file mode 100644 index 0000000..38ef0f9 --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/README @@ -0,0 +1,9 @@ +These test cases come from +http://www.w3.org/International/tests/repository/html5/the-input-byte-stream/results-basics + +Distributed under both the W3C Test Suite License +(http://www.w3.org/Consortium/Legal/2008/04-testsuite-license) +and the W3C 3-clause BSD License +(http://www.w3.org/Consortium/Legal/2008/03-bsd-license). +To contribute to a W3C Test Suite, see the policies and contribution +forms (http://www.w3.org/2004/10/27-testcases). diff --git a/vendor/golang.org/x/net/html/charset/testdata/UTF-16BE-BOM.html b/vendor/golang.org/x/net/html/charset/testdata/UTF-16BE-BOM.html new file mode 100644 index 0000000..3abf7a9 Binary files /dev/null and b/vendor/golang.org/x/net/html/charset/testdata/UTF-16BE-BOM.html differ diff --git a/vendor/golang.org/x/net/html/charset/testdata/UTF-16LE-BOM.html b/vendor/golang.org/x/net/html/charset/testdata/UTF-16LE-BOM.html new file mode 100644 index 0000000..76254c9 Binary files /dev/null and b/vendor/golang.org/x/net/html/charset/testdata/UTF-16LE-BOM.html differ diff --git a/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-charset.html b/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-charset.html new file mode 100644 index 0000000..83de433 --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-charset.html @@ -0,0 +1,49 @@ + + + + UTF-8 BOM vs meta charset + + + + + + + + + + + +

UTF-8 BOM vs meta charset

+ + +
+ + +
 
+ + + + + +
+

A page with a UTF-8 BOM will be recognized as UTF-8 even if the meta charset attribute declares a different encoding.

+

The page contains an encoding declaration in a meta charset attribute that attempts to set the character encoding to ISO 8859-15, but the file starts with a UTF-8 signature.

The test contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ýäè. This matches the sequence of bytes above when they are interpreted as UTF-8. If the class name matches the selector then the test will pass.

+
+
+
HTML5
+

the-input-byte-stream-038
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The default encoding for the browser you are testing is not set to ISO 8859-15.
  • +
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-content.html b/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-content.html new file mode 100644 index 0000000..501aac2 --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-content.html @@ -0,0 +1,48 @@ + + + + UTF-8 BOM vs meta content + + + + + + + + + + + +

UTF-8 BOM vs meta content

+ + +
+ + +
 
+ + + + + +
+

A page with a UTF-8 BOM will be recognized as UTF-8 even if the meta content attribute declares a different encoding.

+

The page contains an encoding declaration in a meta content attribute that attempts to set the character encoding to ISO 8859-15, but the file starts with a UTF-8 signature.

The test contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ýäè. This matches the sequence of bytes above when they are interpreted as UTF-8. If the class name matches the selector then the test will pass.

+
+
+
HTML5
+

the-input-byte-stream-037
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The default encoding for the browser you are testing is not set to ISO 8859-15.
  • +
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/charset/testdata/meta-charset-attribute.html b/vendor/golang.org/x/net/html/charset/testdata/meta-charset-attribute.html new file mode 100644 index 0000000..2d7d25a --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/meta-charset-attribute.html @@ -0,0 +1,48 @@ + + + + meta charset attribute + + + + + + + + + + + +

meta charset attribute

+ + +
+ + +
 
+ + + + + +
+

The character encoding of the page can be set by a meta element with charset attribute.

+

The only character encoding declaration for this HTML file is in the charset attribute of the meta element, which declares the encoding to be ISO 8859-15.

The test contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ÜÀÚ. This matches the sequence of bytes above when they are interpreted as ISO 8859-15. If the class name matches the selector then the test will pass.

+
+
+
HTML5
+

the-input-byte-stream-009
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The default encoding for the browser you are testing is not set to ISO 8859-15.
  • +
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/charset/testdata/meta-content-attribute.html b/vendor/golang.org/x/net/html/charset/testdata/meta-content-attribute.html new file mode 100644 index 0000000..1c3f228 --- /dev/null +++ b/vendor/golang.org/x/net/html/charset/testdata/meta-content-attribute.html @@ -0,0 +1,48 @@ + + + + meta content attribute + + + + + + + + + + + +

meta content attribute

+ + +
+ + +
 
+ + + + + +
+

The character encoding of the page can be set by a meta element with http-equiv and content attributes.

+

The only character encoding declaration for this HTML file is in the content attribute of the meta element, which declares the encoding to be ISO 8859-15.

The test contains a div with a class name that contains the following sequence of bytes: 0xC3 0xBD 0xC3 0xA4 0xC3 0xA8. These represent different sequences of characters in ISO 8859-15, ISO 8859-1 and UTF-8. The external, UTF-8-encoded stylesheet contains a selector .test div.ÜÀÚ. This matches the sequence of bytes above when they are interpreted as ISO 8859-15. If the class name matches the selector then the test will pass.

+
+
+
HTML5
+

the-input-byte-stream-007
Result summary & related tests
Detailed results for this test
Link to spec

+
Assumptions:
  • The default encoding for the browser you are testing is not set to ISO 8859-15.
  • +
  • The test is read from a server that supports HTTP.
+
+ + + + + + diff --git a/vendor/golang.org/x/net/html/const.go b/vendor/golang.org/x/net/html/const.go new file mode 100644 index 0000000..52f651f --- /dev/null +++ b/vendor/golang.org/x/net/html/const.go @@ -0,0 +1,102 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +// Section 12.2.3.2 of the HTML5 specification says "The following elements +// have varying levels of special parsing rules". +// https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements +var isSpecialElementMap = map[string]bool{ + "address": true, + "applet": true, + "area": true, + "article": true, + "aside": true, + "base": true, + "basefont": true, + "bgsound": true, + "blockquote": true, + "body": true, + "br": true, + "button": true, + "caption": true, + "center": true, + "col": true, + "colgroup": true, + "dd": true, + "details": true, + "dir": true, + "div": true, + "dl": true, + "dt": true, + "embed": true, + "fieldset": true, + "figcaption": true, + "figure": true, + "footer": true, + "form": true, + "frame": true, + "frameset": true, + "h1": true, + "h2": true, + "h3": true, + "h4": true, + "h5": true, + "h6": true, + "head": true, + "header": true, + "hgroup": true, + "hr": true, + "html": true, + "iframe": true, + "img": true, + "input": true, + "isindex": true, + "li": true, + "link": true, + "listing": true, + "marquee": true, + "menu": true, + "meta": true, + "nav": true, + "noembed": true, + "noframes": true, + "noscript": true, + "object": true, + "ol": true, + "p": true, + "param": true, + "plaintext": true, + "pre": true, + "script": true, + "section": true, + "select": true, + "source": true, + "style": true, + "summary": true, + "table": true, + "tbody": true, + "td": true, + "template": true, + "textarea": true, + "tfoot": true, + "th": true, + "thead": true, + "title": true, + "tr": true, + "track": true, + "ul": true, + "wbr": true, + "xmp": true, +} + +func isSpecialElement(element *Node) bool { + switch element.Namespace { + case "", "html": + return isSpecialElementMap[element.Data] + case "svg": + return element.Data == "foreignObject" + } + return false +} diff --git a/vendor/golang.org/x/net/html/doc.go b/vendor/golang.org/x/net/html/doc.go new file mode 100644 index 0000000..94f4968 --- /dev/null +++ b/vendor/golang.org/x/net/html/doc.go @@ -0,0 +1,106 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package html implements an HTML5-compliant tokenizer and parser. + +Tokenization is done by creating a Tokenizer for an io.Reader r. It is the +caller's responsibility to ensure that r provides UTF-8 encoded HTML. + + z := html.NewTokenizer(r) + +Given a Tokenizer z, the HTML is tokenized by repeatedly calling z.Next(), +which parses the next token and returns its type, or an error: + + for { + tt := z.Next() + if tt == html.ErrorToken { + // ... + return ... + } + // Process the current token. + } + +There are two APIs for retrieving the current token. The high-level API is to +call Token; the low-level API is to call Text or TagName / TagAttr. Both APIs +allow optionally calling Raw after Next but before Token, Text, TagName, or +TagAttr. In EBNF notation, the valid call sequence per token is: + + Next {Raw} [ Token | Text | TagName {TagAttr} ] + +Token returns an independent data structure that completely describes a token. +Entities (such as "<") are unescaped, tag names and attribute keys are +lower-cased, and attributes are collected into a []Attribute. For example: + + for { + if z.Next() == html.ErrorToken { + // Returning io.EOF indicates success. + return z.Err() + } + emitToken(z.Token()) + } + +The low-level API performs fewer allocations and copies, but the contents of +the []byte values returned by Text, TagName and TagAttr may change on the next +call to Next. For example, to extract an HTML page's anchor text: + + depth := 0 + for { + tt := z.Next() + switch tt { + case ErrorToken: + return z.Err() + case TextToken: + if depth > 0 { + // emitBytes should copy the []byte it receives, + // if it doesn't process it immediately. + emitBytes(z.Text()) + } + case StartTagToken, EndTagToken: + tn, _ := z.TagName() + if len(tn) == 1 && tn[0] == 'a' { + if tt == StartTagToken { + depth++ + } else { + depth-- + } + } + } + } + +Parsing is done by calling Parse with an io.Reader, which returns the root of +the parse tree (the document element) as a *Node. It is the caller's +responsibility to ensure that the Reader provides UTF-8 encoded HTML. For +example, to process each anchor node in depth-first order: + + doc, err := html.Parse(r) + if err != nil { + // ... + } + var f func(*html.Node) + f = func(n *html.Node) { + if n.Type == html.ElementNode && n.Data == "a" { + // Do something with n... + } + for c := n.FirstChild; c != nil; c = c.NextSibling { + f(c) + } + } + f(doc) + +The relevant specifications include: +https://html.spec.whatwg.org/multipage/syntax.html and +https://html.spec.whatwg.org/multipage/syntax.html#tokenization +*/ +package html // import "golang.org/x/net/html" + +// The tokenization algorithm implemented by this package is not a line-by-line +// transliteration of the relatively verbose state-machine in the WHATWG +// specification. A more direct approach is used instead, where the program +// counter implies the state, such as whether it is tokenizing a tag or a text +// node. Specification compliance is verified by checking expected and actual +// outputs over a test suite rather than aiming for algorithmic fidelity. + +// TODO(nigeltao): Does a DOM API belong in this package or a separate one? +// TODO(nigeltao): How does parsing interact with a JavaScript engine? diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go new file mode 100644 index 0000000..c484e5a --- /dev/null +++ b/vendor/golang.org/x/net/html/doctype.go @@ -0,0 +1,156 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "strings" +) + +// parseDoctype parses the data from a DoctypeToken into a name, +// public identifier, and system identifier. It returns a Node whose Type +// is DoctypeNode, whose Data is the name, and which has attributes +// named "system" and "public" for the two identifiers if they were present. +// quirks is whether the document should be parsed in "quirks mode". +func parseDoctype(s string) (n *Node, quirks bool) { + n = &Node{Type: DoctypeNode} + + // Find the name. + space := strings.IndexAny(s, whitespace) + if space == -1 { + space = len(s) + } + n.Data = s[:space] + // The comparison to "html" is case-sensitive. + if n.Data != "html" { + quirks = true + } + n.Data = strings.ToLower(n.Data) + s = strings.TrimLeft(s[space:], whitespace) + + if len(s) < 6 { + // It can't start with "PUBLIC" or "SYSTEM". + // Ignore the rest of the string. + return n, quirks || s != "" + } + + key := strings.ToLower(s[:6]) + s = s[6:] + for key == "public" || key == "system" { + s = strings.TrimLeft(s, whitespace) + if s == "" { + break + } + quote := s[0] + if quote != '"' && quote != '\'' { + break + } + s = s[1:] + q := strings.IndexRune(s, rune(quote)) + var id string + if q == -1 { + id = s + s = "" + } else { + id = s[:q] + s = s[q+1:] + } + n.Attr = append(n.Attr, Attribute{Key: key, Val: id}) + if key == "public" { + key = "system" + } else { + key = "" + } + } + + if key != "" || s != "" { + quirks = true + } else if len(n.Attr) > 0 { + if n.Attr[0].Key == "public" { + public := strings.ToLower(n.Attr[0].Val) + switch public { + case "-//w3o//dtd w3 html strict 3.0//en//", "-/w3d/dtd html 4.0 transitional/en", "html": + quirks = true + default: + for _, q := range quirkyIDs { + if strings.HasPrefix(public, q) { + quirks = true + break + } + } + } + // The following two public IDs only cause quirks mode if there is no system ID. + if len(n.Attr) == 1 && (strings.HasPrefix(public, "-//w3c//dtd html 4.01 frameset//") || + strings.HasPrefix(public, "-//w3c//dtd html 4.01 transitional//")) { + quirks = true + } + } + if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && + strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" { + quirks = true + } + } + + return n, quirks +} + +// quirkyIDs is a list of public doctype identifiers that cause a document +// to be interpreted in quirks mode. The identifiers should be in lower case. +var quirkyIDs = []string{ + "+//silmaril//dtd html pro v0r11 19970101//", + "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", + "-//as//dtd html 3.0 aswedit + extensions//", + "-//ietf//dtd html 2.0 level 1//", + "-//ietf//dtd html 2.0 level 2//", + "-//ietf//dtd html 2.0 strict level 1//", + "-//ietf//dtd html 2.0 strict level 2//", + "-//ietf//dtd html 2.0 strict//", + "-//ietf//dtd html 2.0//", + "-//ietf//dtd html 2.1e//", + "-//ietf//dtd html 3.0//", + "-//ietf//dtd html 3.2 final//", + "-//ietf//dtd html 3.2//", + "-//ietf//dtd html 3//", + "-//ietf//dtd html level 0//", + "-//ietf//dtd html level 1//", + "-//ietf//dtd html level 2//", + "-//ietf//dtd html level 3//", + "-//ietf//dtd html strict level 0//", + "-//ietf//dtd html strict level 1//", + "-//ietf//dtd html strict level 2//", + "-//ietf//dtd html strict level 3//", + "-//ietf//dtd html strict//", + "-//ietf//dtd html//", + "-//metrius//dtd metrius presentational//", + "-//microsoft//dtd internet explorer 2.0 html strict//", + "-//microsoft//dtd internet explorer 2.0 html//", + "-//microsoft//dtd internet explorer 2.0 tables//", + "-//microsoft//dtd internet explorer 3.0 html strict//", + "-//microsoft//dtd internet explorer 3.0 html//", + "-//microsoft//dtd internet explorer 3.0 tables//", + "-//netscape comm. corp.//dtd html//", + "-//netscape comm. corp.//dtd strict html//", + "-//o'reilly and associates//dtd html 2.0//", + "-//o'reilly and associates//dtd html extended 1.0//", + "-//o'reilly and associates//dtd html extended relaxed 1.0//", + "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", + "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", + "-//spyglass//dtd html 2.0 extended//", + "-//sq//dtd html 2.0 hotmetal + extensions//", + "-//sun microsystems corp.//dtd hotjava html//", + "-//sun microsystems corp.//dtd hotjava strict html//", + "-//w3c//dtd html 3 1995-03-24//", + "-//w3c//dtd html 3.2 draft//", + "-//w3c//dtd html 3.2 final//", + "-//w3c//dtd html 3.2//", + "-//w3c//dtd html 3.2s draft//", + "-//w3c//dtd html 4.0 frameset//", + "-//w3c//dtd html 4.0 transitional//", + "-//w3c//dtd html experimental 19960712//", + "-//w3c//dtd html experimental 970421//", + "-//w3c//dtd w3 html//", + "-//w3o//dtd w3 html 3.0//", + "-//webtechs//dtd mozilla html 2.0//", + "-//webtechs//dtd mozilla html//", +} diff --git a/vendor/golang.org/x/net/html/entity.go b/vendor/golang.org/x/net/html/entity.go new file mode 100644 index 0000000..a50c04c --- /dev/null +++ b/vendor/golang.org/x/net/html/entity.go @@ -0,0 +1,2253 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +// All entities that do not end with ';' are 6 or fewer bytes long. +const longestEntityWithoutSemicolon = 6 + +// entity is a map from HTML entity names to their values. The semicolon matters: +// https://html.spec.whatwg.org/multipage/syntax.html#named-character-references +// lists both "amp" and "amp;" as two separate entries. +// +// Note that the HTML5 list is larger than the HTML4 list at +// http://www.w3.org/TR/html4/sgml/entities.html +var entity = map[string]rune{ + "AElig;": '\U000000C6', + "AMP;": '\U00000026', + "Aacute;": '\U000000C1', + "Abreve;": '\U00000102', + "Acirc;": '\U000000C2', + "Acy;": '\U00000410', + "Afr;": '\U0001D504', + "Agrave;": '\U000000C0', + "Alpha;": '\U00000391', + "Amacr;": '\U00000100', + "And;": '\U00002A53', + "Aogon;": '\U00000104', + "Aopf;": '\U0001D538', + "ApplyFunction;": '\U00002061', + "Aring;": '\U000000C5', + "Ascr;": '\U0001D49C', + "Assign;": '\U00002254', + "Atilde;": '\U000000C3', + "Auml;": '\U000000C4', + "Backslash;": '\U00002216', + "Barv;": '\U00002AE7', + "Barwed;": '\U00002306', + "Bcy;": '\U00000411', + "Because;": '\U00002235', + "Bernoullis;": '\U0000212C', + "Beta;": '\U00000392', + "Bfr;": '\U0001D505', + "Bopf;": '\U0001D539', + "Breve;": '\U000002D8', + "Bscr;": '\U0000212C', + "Bumpeq;": '\U0000224E', + "CHcy;": '\U00000427', + "COPY;": '\U000000A9', + "Cacute;": '\U00000106', + "Cap;": '\U000022D2', + "CapitalDifferentialD;": '\U00002145', + "Cayleys;": '\U0000212D', + "Ccaron;": '\U0000010C', + "Ccedil;": '\U000000C7', + "Ccirc;": '\U00000108', + "Cconint;": '\U00002230', + "Cdot;": '\U0000010A', + "Cedilla;": '\U000000B8', + "CenterDot;": '\U000000B7', + "Cfr;": '\U0000212D', + "Chi;": '\U000003A7', + "CircleDot;": '\U00002299', + "CircleMinus;": '\U00002296', + "CirclePlus;": '\U00002295', + "CircleTimes;": '\U00002297', + "ClockwiseContourIntegral;": '\U00002232', + "CloseCurlyDoubleQuote;": '\U0000201D', + "CloseCurlyQuote;": '\U00002019', + "Colon;": '\U00002237', + "Colone;": '\U00002A74', + "Congruent;": '\U00002261', + "Conint;": '\U0000222F', + "ContourIntegral;": '\U0000222E', + "Copf;": '\U00002102', + "Coproduct;": '\U00002210', + "CounterClockwiseContourIntegral;": '\U00002233', + "Cross;": '\U00002A2F', + "Cscr;": '\U0001D49E', + "Cup;": '\U000022D3', + "CupCap;": '\U0000224D', + "DD;": '\U00002145', + "DDotrahd;": '\U00002911', + "DJcy;": '\U00000402', + "DScy;": '\U00000405', + "DZcy;": '\U0000040F', + "Dagger;": '\U00002021', + "Darr;": '\U000021A1', + "Dashv;": '\U00002AE4', + "Dcaron;": '\U0000010E', + "Dcy;": '\U00000414', + "Del;": '\U00002207', + "Delta;": '\U00000394', + "Dfr;": '\U0001D507', + "DiacriticalAcute;": '\U000000B4', + "DiacriticalDot;": '\U000002D9', + "DiacriticalDoubleAcute;": '\U000002DD', + "DiacriticalGrave;": '\U00000060', + "DiacriticalTilde;": '\U000002DC', + "Diamond;": '\U000022C4', + "DifferentialD;": '\U00002146', + "Dopf;": '\U0001D53B', + "Dot;": '\U000000A8', + "DotDot;": '\U000020DC', + "DotEqual;": '\U00002250', + "DoubleContourIntegral;": '\U0000222F', + "DoubleDot;": '\U000000A8', + "DoubleDownArrow;": '\U000021D3', + "DoubleLeftArrow;": '\U000021D0', + "DoubleLeftRightArrow;": '\U000021D4', + "DoubleLeftTee;": '\U00002AE4', + "DoubleLongLeftArrow;": '\U000027F8', + "DoubleLongLeftRightArrow;": '\U000027FA', + "DoubleLongRightArrow;": '\U000027F9', + "DoubleRightArrow;": '\U000021D2', + "DoubleRightTee;": '\U000022A8', + "DoubleUpArrow;": '\U000021D1', + "DoubleUpDownArrow;": '\U000021D5', + "DoubleVerticalBar;": '\U00002225', + "DownArrow;": '\U00002193', + "DownArrowBar;": '\U00002913', + "DownArrowUpArrow;": '\U000021F5', + "DownBreve;": '\U00000311', + "DownLeftRightVector;": '\U00002950', + "DownLeftTeeVector;": '\U0000295E', + "DownLeftVector;": '\U000021BD', + "DownLeftVectorBar;": '\U00002956', + "DownRightTeeVector;": '\U0000295F', + "DownRightVector;": '\U000021C1', + "DownRightVectorBar;": '\U00002957', + "DownTee;": '\U000022A4', + "DownTeeArrow;": '\U000021A7', + "Downarrow;": '\U000021D3', + "Dscr;": '\U0001D49F', + "Dstrok;": '\U00000110', + "ENG;": '\U0000014A', + "ETH;": '\U000000D0', + "Eacute;": '\U000000C9', + "Ecaron;": '\U0000011A', + "Ecirc;": '\U000000CA', + "Ecy;": '\U0000042D', + "Edot;": '\U00000116', + "Efr;": '\U0001D508', + "Egrave;": '\U000000C8', + "Element;": '\U00002208', + "Emacr;": '\U00000112', + "EmptySmallSquare;": '\U000025FB', + "EmptyVerySmallSquare;": '\U000025AB', + "Eogon;": '\U00000118', + "Eopf;": '\U0001D53C', + "Epsilon;": '\U00000395', + "Equal;": '\U00002A75', + "EqualTilde;": '\U00002242', + "Equilibrium;": '\U000021CC', + "Escr;": '\U00002130', + "Esim;": '\U00002A73', + "Eta;": '\U00000397', + "Euml;": '\U000000CB', + "Exists;": '\U00002203', + "ExponentialE;": '\U00002147', + "Fcy;": '\U00000424', + "Ffr;": '\U0001D509', + "FilledSmallSquare;": '\U000025FC', + "FilledVerySmallSquare;": '\U000025AA', + "Fopf;": '\U0001D53D', + "ForAll;": '\U00002200', + "Fouriertrf;": '\U00002131', + "Fscr;": '\U00002131', + "GJcy;": '\U00000403', + "GT;": '\U0000003E', + "Gamma;": '\U00000393', + "Gammad;": '\U000003DC', + "Gbreve;": '\U0000011E', + "Gcedil;": '\U00000122', + "Gcirc;": '\U0000011C', + "Gcy;": '\U00000413', + "Gdot;": '\U00000120', + "Gfr;": '\U0001D50A', + "Gg;": '\U000022D9', + "Gopf;": '\U0001D53E', + "GreaterEqual;": '\U00002265', + "GreaterEqualLess;": '\U000022DB', + "GreaterFullEqual;": '\U00002267', + "GreaterGreater;": '\U00002AA2', + "GreaterLess;": '\U00002277', + "GreaterSlantEqual;": '\U00002A7E', + "GreaterTilde;": '\U00002273', + "Gscr;": '\U0001D4A2', + "Gt;": '\U0000226B', + "HARDcy;": '\U0000042A', + "Hacek;": '\U000002C7', + "Hat;": '\U0000005E', + "Hcirc;": '\U00000124', + "Hfr;": '\U0000210C', + "HilbertSpace;": '\U0000210B', + "Hopf;": '\U0000210D', + "HorizontalLine;": '\U00002500', + "Hscr;": '\U0000210B', + "Hstrok;": '\U00000126', + "HumpDownHump;": '\U0000224E', + "HumpEqual;": '\U0000224F', + "IEcy;": '\U00000415', + "IJlig;": '\U00000132', + "IOcy;": '\U00000401', + "Iacute;": '\U000000CD', + "Icirc;": '\U000000CE', + "Icy;": '\U00000418', + "Idot;": '\U00000130', + "Ifr;": '\U00002111', + "Igrave;": '\U000000CC', + "Im;": '\U00002111', + "Imacr;": '\U0000012A', + "ImaginaryI;": '\U00002148', + "Implies;": '\U000021D2', + "Int;": '\U0000222C', + "Integral;": '\U0000222B', + "Intersection;": '\U000022C2', + "InvisibleComma;": '\U00002063', + "InvisibleTimes;": '\U00002062', + "Iogon;": '\U0000012E', + "Iopf;": '\U0001D540', + "Iota;": '\U00000399', + "Iscr;": '\U00002110', + "Itilde;": '\U00000128', + "Iukcy;": '\U00000406', + "Iuml;": '\U000000CF', + "Jcirc;": '\U00000134', + "Jcy;": '\U00000419', + "Jfr;": '\U0001D50D', + "Jopf;": '\U0001D541', + "Jscr;": '\U0001D4A5', + "Jsercy;": '\U00000408', + "Jukcy;": '\U00000404', + "KHcy;": '\U00000425', + "KJcy;": '\U0000040C', + "Kappa;": '\U0000039A', + "Kcedil;": '\U00000136', + "Kcy;": '\U0000041A', + "Kfr;": '\U0001D50E', + "Kopf;": '\U0001D542', + "Kscr;": '\U0001D4A6', + "LJcy;": '\U00000409', + "LT;": '\U0000003C', + "Lacute;": '\U00000139', + "Lambda;": '\U0000039B', + "Lang;": '\U000027EA', + "Laplacetrf;": '\U00002112', + "Larr;": '\U0000219E', + "Lcaron;": '\U0000013D', + "Lcedil;": '\U0000013B', + "Lcy;": '\U0000041B', + "LeftAngleBracket;": '\U000027E8', + "LeftArrow;": '\U00002190', + "LeftArrowBar;": '\U000021E4', + "LeftArrowRightArrow;": '\U000021C6', + "LeftCeiling;": '\U00002308', + "LeftDoubleBracket;": '\U000027E6', + "LeftDownTeeVector;": '\U00002961', + "LeftDownVector;": '\U000021C3', + "LeftDownVectorBar;": '\U00002959', + "LeftFloor;": '\U0000230A', + "LeftRightArrow;": '\U00002194', + "LeftRightVector;": '\U0000294E', + "LeftTee;": '\U000022A3', + "LeftTeeArrow;": '\U000021A4', + "LeftTeeVector;": '\U0000295A', + "LeftTriangle;": '\U000022B2', + "LeftTriangleBar;": '\U000029CF', + "LeftTriangleEqual;": '\U000022B4', + "LeftUpDownVector;": '\U00002951', + "LeftUpTeeVector;": '\U00002960', + "LeftUpVector;": '\U000021BF', + "LeftUpVectorBar;": '\U00002958', + "LeftVector;": '\U000021BC', + "LeftVectorBar;": '\U00002952', + "Leftarrow;": '\U000021D0', + "Leftrightarrow;": '\U000021D4', + "LessEqualGreater;": '\U000022DA', + "LessFullEqual;": '\U00002266', + "LessGreater;": '\U00002276', + "LessLess;": '\U00002AA1', + "LessSlantEqual;": '\U00002A7D', + "LessTilde;": '\U00002272', + "Lfr;": '\U0001D50F', + "Ll;": '\U000022D8', + "Lleftarrow;": '\U000021DA', + "Lmidot;": '\U0000013F', + "LongLeftArrow;": '\U000027F5', + "LongLeftRightArrow;": '\U000027F7', + "LongRightArrow;": '\U000027F6', + "Longleftarrow;": '\U000027F8', + "Longleftrightarrow;": '\U000027FA', + "Longrightarrow;": '\U000027F9', + "Lopf;": '\U0001D543', + "LowerLeftArrow;": '\U00002199', + "LowerRightArrow;": '\U00002198', + "Lscr;": '\U00002112', + "Lsh;": '\U000021B0', + "Lstrok;": '\U00000141', + "Lt;": '\U0000226A', + "Map;": '\U00002905', + "Mcy;": '\U0000041C', + "MediumSpace;": '\U0000205F', + "Mellintrf;": '\U00002133', + "Mfr;": '\U0001D510', + "MinusPlus;": '\U00002213', + "Mopf;": '\U0001D544', + "Mscr;": '\U00002133', + "Mu;": '\U0000039C', + "NJcy;": '\U0000040A', + "Nacute;": '\U00000143', + "Ncaron;": '\U00000147', + "Ncedil;": '\U00000145', + "Ncy;": '\U0000041D', + "NegativeMediumSpace;": '\U0000200B', + "NegativeThickSpace;": '\U0000200B', + "NegativeThinSpace;": '\U0000200B', + "NegativeVeryThinSpace;": '\U0000200B', + "NestedGreaterGreater;": '\U0000226B', + "NestedLessLess;": '\U0000226A', + "NewLine;": '\U0000000A', + "Nfr;": '\U0001D511', + "NoBreak;": '\U00002060', + "NonBreakingSpace;": '\U000000A0', + "Nopf;": '\U00002115', + "Not;": '\U00002AEC', + "NotCongruent;": '\U00002262', + "NotCupCap;": '\U0000226D', + "NotDoubleVerticalBar;": '\U00002226', + "NotElement;": '\U00002209', + "NotEqual;": '\U00002260', + "NotExists;": '\U00002204', + "NotGreater;": '\U0000226F', + "NotGreaterEqual;": '\U00002271', + "NotGreaterLess;": '\U00002279', + "NotGreaterTilde;": '\U00002275', + "NotLeftTriangle;": '\U000022EA', + "NotLeftTriangleEqual;": '\U000022EC', + "NotLess;": '\U0000226E', + "NotLessEqual;": '\U00002270', + "NotLessGreater;": '\U00002278', + "NotLessTilde;": '\U00002274', + "NotPrecedes;": '\U00002280', + "NotPrecedesSlantEqual;": '\U000022E0', + "NotReverseElement;": '\U0000220C', + "NotRightTriangle;": '\U000022EB', + "NotRightTriangleEqual;": '\U000022ED', + "NotSquareSubsetEqual;": '\U000022E2', + "NotSquareSupersetEqual;": '\U000022E3', + "NotSubsetEqual;": '\U00002288', + "NotSucceeds;": '\U00002281', + "NotSucceedsSlantEqual;": '\U000022E1', + "NotSupersetEqual;": '\U00002289', + "NotTilde;": '\U00002241', + "NotTildeEqual;": '\U00002244', + "NotTildeFullEqual;": '\U00002247', + "NotTildeTilde;": '\U00002249', + "NotVerticalBar;": '\U00002224', + "Nscr;": '\U0001D4A9', + "Ntilde;": '\U000000D1', + "Nu;": '\U0000039D', + "OElig;": '\U00000152', + "Oacute;": '\U000000D3', + "Ocirc;": '\U000000D4', + "Ocy;": '\U0000041E', + "Odblac;": '\U00000150', + "Ofr;": '\U0001D512', + "Ograve;": '\U000000D2', + "Omacr;": '\U0000014C', + "Omega;": '\U000003A9', + "Omicron;": '\U0000039F', + "Oopf;": '\U0001D546', + "OpenCurlyDoubleQuote;": '\U0000201C', + "OpenCurlyQuote;": '\U00002018', + "Or;": '\U00002A54', + "Oscr;": '\U0001D4AA', + "Oslash;": '\U000000D8', + "Otilde;": '\U000000D5', + "Otimes;": '\U00002A37', + "Ouml;": '\U000000D6', + "OverBar;": '\U0000203E', + "OverBrace;": '\U000023DE', + "OverBracket;": '\U000023B4', + "OverParenthesis;": '\U000023DC', + "PartialD;": '\U00002202', + "Pcy;": '\U0000041F', + "Pfr;": '\U0001D513', + "Phi;": '\U000003A6', + "Pi;": '\U000003A0', + "PlusMinus;": '\U000000B1', + "Poincareplane;": '\U0000210C', + "Popf;": '\U00002119', + "Pr;": '\U00002ABB', + "Precedes;": '\U0000227A', + "PrecedesEqual;": '\U00002AAF', + "PrecedesSlantEqual;": '\U0000227C', + "PrecedesTilde;": '\U0000227E', + "Prime;": '\U00002033', + "Product;": '\U0000220F', + "Proportion;": '\U00002237', + "Proportional;": '\U0000221D', + "Pscr;": '\U0001D4AB', + "Psi;": '\U000003A8', + "QUOT;": '\U00000022', + "Qfr;": '\U0001D514', + "Qopf;": '\U0000211A', + "Qscr;": '\U0001D4AC', + "RBarr;": '\U00002910', + "REG;": '\U000000AE', + "Racute;": '\U00000154', + "Rang;": '\U000027EB', + "Rarr;": '\U000021A0', + "Rarrtl;": '\U00002916', + "Rcaron;": '\U00000158', + "Rcedil;": '\U00000156', + "Rcy;": '\U00000420', + "Re;": '\U0000211C', + "ReverseElement;": '\U0000220B', + "ReverseEquilibrium;": '\U000021CB', + "ReverseUpEquilibrium;": '\U0000296F', + "Rfr;": '\U0000211C', + "Rho;": '\U000003A1', + "RightAngleBracket;": '\U000027E9', + "RightArrow;": '\U00002192', + "RightArrowBar;": '\U000021E5', + "RightArrowLeftArrow;": '\U000021C4', + "RightCeiling;": '\U00002309', + "RightDoubleBracket;": '\U000027E7', + "RightDownTeeVector;": '\U0000295D', + "RightDownVector;": '\U000021C2', + "RightDownVectorBar;": '\U00002955', + "RightFloor;": '\U0000230B', + "RightTee;": '\U000022A2', + "RightTeeArrow;": '\U000021A6', + "RightTeeVector;": '\U0000295B', + "RightTriangle;": '\U000022B3', + "RightTriangleBar;": '\U000029D0', + "RightTriangleEqual;": '\U000022B5', + "RightUpDownVector;": '\U0000294F', + "RightUpTeeVector;": '\U0000295C', + "RightUpVector;": '\U000021BE', + "RightUpVectorBar;": '\U00002954', + "RightVector;": '\U000021C0', + "RightVectorBar;": '\U00002953', + "Rightarrow;": '\U000021D2', + "Ropf;": '\U0000211D', + "RoundImplies;": '\U00002970', + "Rrightarrow;": '\U000021DB', + "Rscr;": '\U0000211B', + "Rsh;": '\U000021B1', + "RuleDelayed;": '\U000029F4', + "SHCHcy;": '\U00000429', + "SHcy;": '\U00000428', + "SOFTcy;": '\U0000042C', + "Sacute;": '\U0000015A', + "Sc;": '\U00002ABC', + "Scaron;": '\U00000160', + "Scedil;": '\U0000015E', + "Scirc;": '\U0000015C', + "Scy;": '\U00000421', + "Sfr;": '\U0001D516', + "ShortDownArrow;": '\U00002193', + "ShortLeftArrow;": '\U00002190', + "ShortRightArrow;": '\U00002192', + "ShortUpArrow;": '\U00002191', + "Sigma;": '\U000003A3', + "SmallCircle;": '\U00002218', + "Sopf;": '\U0001D54A', + "Sqrt;": '\U0000221A', + "Square;": '\U000025A1', + "SquareIntersection;": '\U00002293', + "SquareSubset;": '\U0000228F', + "SquareSubsetEqual;": '\U00002291', + "SquareSuperset;": '\U00002290', + "SquareSupersetEqual;": '\U00002292', + "SquareUnion;": '\U00002294', + "Sscr;": '\U0001D4AE', + "Star;": '\U000022C6', + "Sub;": '\U000022D0', + "Subset;": '\U000022D0', + "SubsetEqual;": '\U00002286', + "Succeeds;": '\U0000227B', + "SucceedsEqual;": '\U00002AB0', + "SucceedsSlantEqual;": '\U0000227D', + "SucceedsTilde;": '\U0000227F', + "SuchThat;": '\U0000220B', + "Sum;": '\U00002211', + "Sup;": '\U000022D1', + "Superset;": '\U00002283', + "SupersetEqual;": '\U00002287', + "Supset;": '\U000022D1', + "THORN;": '\U000000DE', + "TRADE;": '\U00002122', + "TSHcy;": '\U0000040B', + "TScy;": '\U00000426', + "Tab;": '\U00000009', + "Tau;": '\U000003A4', + "Tcaron;": '\U00000164', + "Tcedil;": '\U00000162', + "Tcy;": '\U00000422', + "Tfr;": '\U0001D517', + "Therefore;": '\U00002234', + "Theta;": '\U00000398', + "ThinSpace;": '\U00002009', + "Tilde;": '\U0000223C', + "TildeEqual;": '\U00002243', + "TildeFullEqual;": '\U00002245', + "TildeTilde;": '\U00002248', + "Topf;": '\U0001D54B', + "TripleDot;": '\U000020DB', + "Tscr;": '\U0001D4AF', + "Tstrok;": '\U00000166', + "Uacute;": '\U000000DA', + "Uarr;": '\U0000219F', + "Uarrocir;": '\U00002949', + "Ubrcy;": '\U0000040E', + "Ubreve;": '\U0000016C', + "Ucirc;": '\U000000DB', + "Ucy;": '\U00000423', + "Udblac;": '\U00000170', + "Ufr;": '\U0001D518', + "Ugrave;": '\U000000D9', + "Umacr;": '\U0000016A', + "UnderBar;": '\U0000005F', + "UnderBrace;": '\U000023DF', + "UnderBracket;": '\U000023B5', + "UnderParenthesis;": '\U000023DD', + "Union;": '\U000022C3', + "UnionPlus;": '\U0000228E', + "Uogon;": '\U00000172', + "Uopf;": '\U0001D54C', + "UpArrow;": '\U00002191', + "UpArrowBar;": '\U00002912', + "UpArrowDownArrow;": '\U000021C5', + "UpDownArrow;": '\U00002195', + "UpEquilibrium;": '\U0000296E', + "UpTee;": '\U000022A5', + "UpTeeArrow;": '\U000021A5', + "Uparrow;": '\U000021D1', + "Updownarrow;": '\U000021D5', + "UpperLeftArrow;": '\U00002196', + "UpperRightArrow;": '\U00002197', + "Upsi;": '\U000003D2', + "Upsilon;": '\U000003A5', + "Uring;": '\U0000016E', + "Uscr;": '\U0001D4B0', + "Utilde;": '\U00000168', + "Uuml;": '\U000000DC', + "VDash;": '\U000022AB', + "Vbar;": '\U00002AEB', + "Vcy;": '\U00000412', + "Vdash;": '\U000022A9', + "Vdashl;": '\U00002AE6', + "Vee;": '\U000022C1', + "Verbar;": '\U00002016', + "Vert;": '\U00002016', + "VerticalBar;": '\U00002223', + "VerticalLine;": '\U0000007C', + "VerticalSeparator;": '\U00002758', + "VerticalTilde;": '\U00002240', + "VeryThinSpace;": '\U0000200A', + "Vfr;": '\U0001D519', + "Vopf;": '\U0001D54D', + "Vscr;": '\U0001D4B1', + "Vvdash;": '\U000022AA', + "Wcirc;": '\U00000174', + "Wedge;": '\U000022C0', + "Wfr;": '\U0001D51A', + "Wopf;": '\U0001D54E', + "Wscr;": '\U0001D4B2', + "Xfr;": '\U0001D51B', + "Xi;": '\U0000039E', + "Xopf;": '\U0001D54F', + "Xscr;": '\U0001D4B3', + "YAcy;": '\U0000042F', + "YIcy;": '\U00000407', + "YUcy;": '\U0000042E', + "Yacute;": '\U000000DD', + "Ycirc;": '\U00000176', + "Ycy;": '\U0000042B', + "Yfr;": '\U0001D51C', + "Yopf;": '\U0001D550', + "Yscr;": '\U0001D4B4', + "Yuml;": '\U00000178', + "ZHcy;": '\U00000416', + "Zacute;": '\U00000179', + "Zcaron;": '\U0000017D', + "Zcy;": '\U00000417', + "Zdot;": '\U0000017B', + "ZeroWidthSpace;": '\U0000200B', + "Zeta;": '\U00000396', + "Zfr;": '\U00002128', + "Zopf;": '\U00002124', + "Zscr;": '\U0001D4B5', + "aacute;": '\U000000E1', + "abreve;": '\U00000103', + "ac;": '\U0000223E', + "acd;": '\U0000223F', + "acirc;": '\U000000E2', + "acute;": '\U000000B4', + "acy;": '\U00000430', + "aelig;": '\U000000E6', + "af;": '\U00002061', + "afr;": '\U0001D51E', + "agrave;": '\U000000E0', + "alefsym;": '\U00002135', + "aleph;": '\U00002135', + "alpha;": '\U000003B1', + "amacr;": '\U00000101', + "amalg;": '\U00002A3F', + "amp;": '\U00000026', + "and;": '\U00002227', + "andand;": '\U00002A55', + "andd;": '\U00002A5C', + "andslope;": '\U00002A58', + "andv;": '\U00002A5A', + "ang;": '\U00002220', + "ange;": '\U000029A4', + "angle;": '\U00002220', + "angmsd;": '\U00002221', + "angmsdaa;": '\U000029A8', + "angmsdab;": '\U000029A9', + "angmsdac;": '\U000029AA', + "angmsdad;": '\U000029AB', + "angmsdae;": '\U000029AC', + "angmsdaf;": '\U000029AD', + "angmsdag;": '\U000029AE', + "angmsdah;": '\U000029AF', + "angrt;": '\U0000221F', + "angrtvb;": '\U000022BE', + "angrtvbd;": '\U0000299D', + "angsph;": '\U00002222', + "angst;": '\U000000C5', + "angzarr;": '\U0000237C', + "aogon;": '\U00000105', + "aopf;": '\U0001D552', + "ap;": '\U00002248', + "apE;": '\U00002A70', + "apacir;": '\U00002A6F', + "ape;": '\U0000224A', + "apid;": '\U0000224B', + "apos;": '\U00000027', + "approx;": '\U00002248', + "approxeq;": '\U0000224A', + "aring;": '\U000000E5', + "ascr;": '\U0001D4B6', + "ast;": '\U0000002A', + "asymp;": '\U00002248', + "asympeq;": '\U0000224D', + "atilde;": '\U000000E3', + "auml;": '\U000000E4', + "awconint;": '\U00002233', + "awint;": '\U00002A11', + "bNot;": '\U00002AED', + "backcong;": '\U0000224C', + "backepsilon;": '\U000003F6', + "backprime;": '\U00002035', + "backsim;": '\U0000223D', + "backsimeq;": '\U000022CD', + "barvee;": '\U000022BD', + "barwed;": '\U00002305', + "barwedge;": '\U00002305', + "bbrk;": '\U000023B5', + "bbrktbrk;": '\U000023B6', + "bcong;": '\U0000224C', + "bcy;": '\U00000431', + "bdquo;": '\U0000201E', + "becaus;": '\U00002235', + "because;": '\U00002235', + "bemptyv;": '\U000029B0', + "bepsi;": '\U000003F6', + "bernou;": '\U0000212C', + "beta;": '\U000003B2', + "beth;": '\U00002136', + "between;": '\U0000226C', + "bfr;": '\U0001D51F', + "bigcap;": '\U000022C2', + "bigcirc;": '\U000025EF', + "bigcup;": '\U000022C3', + "bigodot;": '\U00002A00', + "bigoplus;": '\U00002A01', + "bigotimes;": '\U00002A02', + "bigsqcup;": '\U00002A06', + "bigstar;": '\U00002605', + "bigtriangledown;": '\U000025BD', + "bigtriangleup;": '\U000025B3', + "biguplus;": '\U00002A04', + "bigvee;": '\U000022C1', + "bigwedge;": '\U000022C0', + "bkarow;": '\U0000290D', + "blacklozenge;": '\U000029EB', + "blacksquare;": '\U000025AA', + "blacktriangle;": '\U000025B4', + "blacktriangledown;": '\U000025BE', + "blacktriangleleft;": '\U000025C2', + "blacktriangleright;": '\U000025B8', + "blank;": '\U00002423', + "blk12;": '\U00002592', + "blk14;": '\U00002591', + "blk34;": '\U00002593', + "block;": '\U00002588', + "bnot;": '\U00002310', + "bopf;": '\U0001D553', + "bot;": '\U000022A5', + "bottom;": '\U000022A5', + "bowtie;": '\U000022C8', + "boxDL;": '\U00002557', + "boxDR;": '\U00002554', + "boxDl;": '\U00002556', + "boxDr;": '\U00002553', + "boxH;": '\U00002550', + "boxHD;": '\U00002566', + "boxHU;": '\U00002569', + "boxHd;": '\U00002564', + "boxHu;": '\U00002567', + "boxUL;": '\U0000255D', + "boxUR;": '\U0000255A', + "boxUl;": '\U0000255C', + "boxUr;": '\U00002559', + "boxV;": '\U00002551', + "boxVH;": '\U0000256C', + "boxVL;": '\U00002563', + "boxVR;": '\U00002560', + "boxVh;": '\U0000256B', + "boxVl;": '\U00002562', + "boxVr;": '\U0000255F', + "boxbox;": '\U000029C9', + "boxdL;": '\U00002555', + "boxdR;": '\U00002552', + "boxdl;": '\U00002510', + "boxdr;": '\U0000250C', + "boxh;": '\U00002500', + "boxhD;": '\U00002565', + "boxhU;": '\U00002568', + "boxhd;": '\U0000252C', + "boxhu;": '\U00002534', + "boxminus;": '\U0000229F', + "boxplus;": '\U0000229E', + "boxtimes;": '\U000022A0', + "boxuL;": '\U0000255B', + "boxuR;": '\U00002558', + "boxul;": '\U00002518', + "boxur;": '\U00002514', + "boxv;": '\U00002502', + "boxvH;": '\U0000256A', + "boxvL;": '\U00002561', + "boxvR;": '\U0000255E', + "boxvh;": '\U0000253C', + "boxvl;": '\U00002524', + "boxvr;": '\U0000251C', + "bprime;": '\U00002035', + "breve;": '\U000002D8', + "brvbar;": '\U000000A6', + "bscr;": '\U0001D4B7', + "bsemi;": '\U0000204F', + "bsim;": '\U0000223D', + "bsime;": '\U000022CD', + "bsol;": '\U0000005C', + "bsolb;": '\U000029C5', + "bsolhsub;": '\U000027C8', + "bull;": '\U00002022', + "bullet;": '\U00002022', + "bump;": '\U0000224E', + "bumpE;": '\U00002AAE', + "bumpe;": '\U0000224F', + "bumpeq;": '\U0000224F', + "cacute;": '\U00000107', + "cap;": '\U00002229', + "capand;": '\U00002A44', + "capbrcup;": '\U00002A49', + "capcap;": '\U00002A4B', + "capcup;": '\U00002A47', + "capdot;": '\U00002A40', + "caret;": '\U00002041', + "caron;": '\U000002C7', + "ccaps;": '\U00002A4D', + "ccaron;": '\U0000010D', + "ccedil;": '\U000000E7', + "ccirc;": '\U00000109', + "ccups;": '\U00002A4C', + "ccupssm;": '\U00002A50', + "cdot;": '\U0000010B', + "cedil;": '\U000000B8', + "cemptyv;": '\U000029B2', + "cent;": '\U000000A2', + "centerdot;": '\U000000B7', + "cfr;": '\U0001D520', + "chcy;": '\U00000447', + "check;": '\U00002713', + "checkmark;": '\U00002713', + "chi;": '\U000003C7', + "cir;": '\U000025CB', + "cirE;": '\U000029C3', + "circ;": '\U000002C6', + "circeq;": '\U00002257', + "circlearrowleft;": '\U000021BA', + "circlearrowright;": '\U000021BB', + "circledR;": '\U000000AE', + "circledS;": '\U000024C8', + "circledast;": '\U0000229B', + "circledcirc;": '\U0000229A', + "circleddash;": '\U0000229D', + "cire;": '\U00002257', + "cirfnint;": '\U00002A10', + "cirmid;": '\U00002AEF', + "cirscir;": '\U000029C2', + "clubs;": '\U00002663', + "clubsuit;": '\U00002663', + "colon;": '\U0000003A', + "colone;": '\U00002254', + "coloneq;": '\U00002254', + "comma;": '\U0000002C', + "commat;": '\U00000040', + "comp;": '\U00002201', + "compfn;": '\U00002218', + "complement;": '\U00002201', + "complexes;": '\U00002102', + "cong;": '\U00002245', + "congdot;": '\U00002A6D', + "conint;": '\U0000222E', + "copf;": '\U0001D554', + "coprod;": '\U00002210', + "copy;": '\U000000A9', + "copysr;": '\U00002117', + "crarr;": '\U000021B5', + "cross;": '\U00002717', + "cscr;": '\U0001D4B8', + "csub;": '\U00002ACF', + "csube;": '\U00002AD1', + "csup;": '\U00002AD0', + "csupe;": '\U00002AD2', + "ctdot;": '\U000022EF', + "cudarrl;": '\U00002938', + "cudarrr;": '\U00002935', + "cuepr;": '\U000022DE', + "cuesc;": '\U000022DF', + "cularr;": '\U000021B6', + "cularrp;": '\U0000293D', + "cup;": '\U0000222A', + "cupbrcap;": '\U00002A48', + "cupcap;": '\U00002A46', + "cupcup;": '\U00002A4A', + "cupdot;": '\U0000228D', + "cupor;": '\U00002A45', + "curarr;": '\U000021B7', + "curarrm;": '\U0000293C', + "curlyeqprec;": '\U000022DE', + "curlyeqsucc;": '\U000022DF', + "curlyvee;": '\U000022CE', + "curlywedge;": '\U000022CF', + "curren;": '\U000000A4', + "curvearrowleft;": '\U000021B6', + "curvearrowright;": '\U000021B7', + "cuvee;": '\U000022CE', + "cuwed;": '\U000022CF', + "cwconint;": '\U00002232', + "cwint;": '\U00002231', + "cylcty;": '\U0000232D', + "dArr;": '\U000021D3', + "dHar;": '\U00002965', + "dagger;": '\U00002020', + "daleth;": '\U00002138', + "darr;": '\U00002193', + "dash;": '\U00002010', + "dashv;": '\U000022A3', + "dbkarow;": '\U0000290F', + "dblac;": '\U000002DD', + "dcaron;": '\U0000010F', + "dcy;": '\U00000434', + "dd;": '\U00002146', + "ddagger;": '\U00002021', + "ddarr;": '\U000021CA', + "ddotseq;": '\U00002A77', + "deg;": '\U000000B0', + "delta;": '\U000003B4', + "demptyv;": '\U000029B1', + "dfisht;": '\U0000297F', + "dfr;": '\U0001D521', + "dharl;": '\U000021C3', + "dharr;": '\U000021C2', + "diam;": '\U000022C4', + "diamond;": '\U000022C4', + "diamondsuit;": '\U00002666', + "diams;": '\U00002666', + "die;": '\U000000A8', + "digamma;": '\U000003DD', + "disin;": '\U000022F2', + "div;": '\U000000F7', + "divide;": '\U000000F7', + "divideontimes;": '\U000022C7', + "divonx;": '\U000022C7', + "djcy;": '\U00000452', + "dlcorn;": '\U0000231E', + "dlcrop;": '\U0000230D', + "dollar;": '\U00000024', + "dopf;": '\U0001D555', + "dot;": '\U000002D9', + "doteq;": '\U00002250', + "doteqdot;": '\U00002251', + "dotminus;": '\U00002238', + "dotplus;": '\U00002214', + "dotsquare;": '\U000022A1', + "doublebarwedge;": '\U00002306', + "downarrow;": '\U00002193', + "downdownarrows;": '\U000021CA', + "downharpoonleft;": '\U000021C3', + "downharpoonright;": '\U000021C2', + "drbkarow;": '\U00002910', + "drcorn;": '\U0000231F', + "drcrop;": '\U0000230C', + "dscr;": '\U0001D4B9', + "dscy;": '\U00000455', + "dsol;": '\U000029F6', + "dstrok;": '\U00000111', + "dtdot;": '\U000022F1', + "dtri;": '\U000025BF', + "dtrif;": '\U000025BE', + "duarr;": '\U000021F5', + "duhar;": '\U0000296F', + "dwangle;": '\U000029A6', + "dzcy;": '\U0000045F', + "dzigrarr;": '\U000027FF', + "eDDot;": '\U00002A77', + "eDot;": '\U00002251', + "eacute;": '\U000000E9', + "easter;": '\U00002A6E', + "ecaron;": '\U0000011B', + "ecir;": '\U00002256', + "ecirc;": '\U000000EA', + "ecolon;": '\U00002255', + "ecy;": '\U0000044D', + "edot;": '\U00000117', + "ee;": '\U00002147', + "efDot;": '\U00002252', + "efr;": '\U0001D522', + "eg;": '\U00002A9A', + "egrave;": '\U000000E8', + "egs;": '\U00002A96', + "egsdot;": '\U00002A98', + "el;": '\U00002A99', + "elinters;": '\U000023E7', + "ell;": '\U00002113', + "els;": '\U00002A95', + "elsdot;": '\U00002A97', + "emacr;": '\U00000113', + "empty;": '\U00002205', + "emptyset;": '\U00002205', + "emptyv;": '\U00002205', + "emsp;": '\U00002003', + "emsp13;": '\U00002004', + "emsp14;": '\U00002005', + "eng;": '\U0000014B', + "ensp;": '\U00002002', + "eogon;": '\U00000119', + "eopf;": '\U0001D556', + "epar;": '\U000022D5', + "eparsl;": '\U000029E3', + "eplus;": '\U00002A71', + "epsi;": '\U000003B5', + "epsilon;": '\U000003B5', + "epsiv;": '\U000003F5', + "eqcirc;": '\U00002256', + "eqcolon;": '\U00002255', + "eqsim;": '\U00002242', + "eqslantgtr;": '\U00002A96', + "eqslantless;": '\U00002A95', + "equals;": '\U0000003D', + "equest;": '\U0000225F', + "equiv;": '\U00002261', + "equivDD;": '\U00002A78', + "eqvparsl;": '\U000029E5', + "erDot;": '\U00002253', + "erarr;": '\U00002971', + "escr;": '\U0000212F', + "esdot;": '\U00002250', + "esim;": '\U00002242', + "eta;": '\U000003B7', + "eth;": '\U000000F0', + "euml;": '\U000000EB', + "euro;": '\U000020AC', + "excl;": '\U00000021', + "exist;": '\U00002203', + "expectation;": '\U00002130', + "exponentiale;": '\U00002147', + "fallingdotseq;": '\U00002252', + "fcy;": '\U00000444', + "female;": '\U00002640', + "ffilig;": '\U0000FB03', + "fflig;": '\U0000FB00', + "ffllig;": '\U0000FB04', + "ffr;": '\U0001D523', + "filig;": '\U0000FB01', + "flat;": '\U0000266D', + "fllig;": '\U0000FB02', + "fltns;": '\U000025B1', + "fnof;": '\U00000192', + "fopf;": '\U0001D557', + "forall;": '\U00002200', + "fork;": '\U000022D4', + "forkv;": '\U00002AD9', + "fpartint;": '\U00002A0D', + "frac12;": '\U000000BD', + "frac13;": '\U00002153', + "frac14;": '\U000000BC', + "frac15;": '\U00002155', + "frac16;": '\U00002159', + "frac18;": '\U0000215B', + "frac23;": '\U00002154', + "frac25;": '\U00002156', + "frac34;": '\U000000BE', + "frac35;": '\U00002157', + "frac38;": '\U0000215C', + "frac45;": '\U00002158', + "frac56;": '\U0000215A', + "frac58;": '\U0000215D', + "frac78;": '\U0000215E', + "frasl;": '\U00002044', + "frown;": '\U00002322', + "fscr;": '\U0001D4BB', + "gE;": '\U00002267', + "gEl;": '\U00002A8C', + "gacute;": '\U000001F5', + "gamma;": '\U000003B3', + "gammad;": '\U000003DD', + "gap;": '\U00002A86', + "gbreve;": '\U0000011F', + "gcirc;": '\U0000011D', + "gcy;": '\U00000433', + "gdot;": '\U00000121', + "ge;": '\U00002265', + "gel;": '\U000022DB', + "geq;": '\U00002265', + "geqq;": '\U00002267', + "geqslant;": '\U00002A7E', + "ges;": '\U00002A7E', + "gescc;": '\U00002AA9', + "gesdot;": '\U00002A80', + "gesdoto;": '\U00002A82', + "gesdotol;": '\U00002A84', + "gesles;": '\U00002A94', + "gfr;": '\U0001D524', + "gg;": '\U0000226B', + "ggg;": '\U000022D9', + "gimel;": '\U00002137', + "gjcy;": '\U00000453', + "gl;": '\U00002277', + "glE;": '\U00002A92', + "gla;": '\U00002AA5', + "glj;": '\U00002AA4', + "gnE;": '\U00002269', + "gnap;": '\U00002A8A', + "gnapprox;": '\U00002A8A', + "gne;": '\U00002A88', + "gneq;": '\U00002A88', + "gneqq;": '\U00002269', + "gnsim;": '\U000022E7', + "gopf;": '\U0001D558', + "grave;": '\U00000060', + "gscr;": '\U0000210A', + "gsim;": '\U00002273', + "gsime;": '\U00002A8E', + "gsiml;": '\U00002A90', + "gt;": '\U0000003E', + "gtcc;": '\U00002AA7', + "gtcir;": '\U00002A7A', + "gtdot;": '\U000022D7', + "gtlPar;": '\U00002995', + "gtquest;": '\U00002A7C', + "gtrapprox;": '\U00002A86', + "gtrarr;": '\U00002978', + "gtrdot;": '\U000022D7', + "gtreqless;": '\U000022DB', + "gtreqqless;": '\U00002A8C', + "gtrless;": '\U00002277', + "gtrsim;": '\U00002273', + "hArr;": '\U000021D4', + "hairsp;": '\U0000200A', + "half;": '\U000000BD', + "hamilt;": '\U0000210B', + "hardcy;": '\U0000044A', + "harr;": '\U00002194', + "harrcir;": '\U00002948', + "harrw;": '\U000021AD', + "hbar;": '\U0000210F', + "hcirc;": '\U00000125', + "hearts;": '\U00002665', + "heartsuit;": '\U00002665', + "hellip;": '\U00002026', + "hercon;": '\U000022B9', + "hfr;": '\U0001D525', + "hksearow;": '\U00002925', + "hkswarow;": '\U00002926', + "hoarr;": '\U000021FF', + "homtht;": '\U0000223B', + "hookleftarrow;": '\U000021A9', + "hookrightarrow;": '\U000021AA', + "hopf;": '\U0001D559', + "horbar;": '\U00002015', + "hscr;": '\U0001D4BD', + "hslash;": '\U0000210F', + "hstrok;": '\U00000127', + "hybull;": '\U00002043', + "hyphen;": '\U00002010', + "iacute;": '\U000000ED', + "ic;": '\U00002063', + "icirc;": '\U000000EE', + "icy;": '\U00000438', + "iecy;": '\U00000435', + "iexcl;": '\U000000A1', + "iff;": '\U000021D4', + "ifr;": '\U0001D526', + "igrave;": '\U000000EC', + "ii;": '\U00002148', + "iiiint;": '\U00002A0C', + "iiint;": '\U0000222D', + "iinfin;": '\U000029DC', + "iiota;": '\U00002129', + "ijlig;": '\U00000133', + "imacr;": '\U0000012B', + "image;": '\U00002111', + "imagline;": '\U00002110', + "imagpart;": '\U00002111', + "imath;": '\U00000131', + "imof;": '\U000022B7', + "imped;": '\U000001B5', + "in;": '\U00002208', + "incare;": '\U00002105', + "infin;": '\U0000221E', + "infintie;": '\U000029DD', + "inodot;": '\U00000131', + "int;": '\U0000222B', + "intcal;": '\U000022BA', + "integers;": '\U00002124', + "intercal;": '\U000022BA', + "intlarhk;": '\U00002A17', + "intprod;": '\U00002A3C', + "iocy;": '\U00000451', + "iogon;": '\U0000012F', + "iopf;": '\U0001D55A', + "iota;": '\U000003B9', + "iprod;": '\U00002A3C', + "iquest;": '\U000000BF', + "iscr;": '\U0001D4BE', + "isin;": '\U00002208', + "isinE;": '\U000022F9', + "isindot;": '\U000022F5', + "isins;": '\U000022F4', + "isinsv;": '\U000022F3', + "isinv;": '\U00002208', + "it;": '\U00002062', + "itilde;": '\U00000129', + "iukcy;": '\U00000456', + "iuml;": '\U000000EF', + "jcirc;": '\U00000135', + "jcy;": '\U00000439', + "jfr;": '\U0001D527', + "jmath;": '\U00000237', + "jopf;": '\U0001D55B', + "jscr;": '\U0001D4BF', + "jsercy;": '\U00000458', + "jukcy;": '\U00000454', + "kappa;": '\U000003BA', + "kappav;": '\U000003F0', + "kcedil;": '\U00000137', + "kcy;": '\U0000043A', + "kfr;": '\U0001D528', + "kgreen;": '\U00000138', + "khcy;": '\U00000445', + "kjcy;": '\U0000045C', + "kopf;": '\U0001D55C', + "kscr;": '\U0001D4C0', + "lAarr;": '\U000021DA', + "lArr;": '\U000021D0', + "lAtail;": '\U0000291B', + "lBarr;": '\U0000290E', + "lE;": '\U00002266', + "lEg;": '\U00002A8B', + "lHar;": '\U00002962', + "lacute;": '\U0000013A', + "laemptyv;": '\U000029B4', + "lagran;": '\U00002112', + "lambda;": '\U000003BB', + "lang;": '\U000027E8', + "langd;": '\U00002991', + "langle;": '\U000027E8', + "lap;": '\U00002A85', + "laquo;": '\U000000AB', + "larr;": '\U00002190', + "larrb;": '\U000021E4', + "larrbfs;": '\U0000291F', + "larrfs;": '\U0000291D', + "larrhk;": '\U000021A9', + "larrlp;": '\U000021AB', + "larrpl;": '\U00002939', + "larrsim;": '\U00002973', + "larrtl;": '\U000021A2', + "lat;": '\U00002AAB', + "latail;": '\U00002919', + "late;": '\U00002AAD', + "lbarr;": '\U0000290C', + "lbbrk;": '\U00002772', + "lbrace;": '\U0000007B', + "lbrack;": '\U0000005B', + "lbrke;": '\U0000298B', + "lbrksld;": '\U0000298F', + "lbrkslu;": '\U0000298D', + "lcaron;": '\U0000013E', + "lcedil;": '\U0000013C', + "lceil;": '\U00002308', + "lcub;": '\U0000007B', + "lcy;": '\U0000043B', + "ldca;": '\U00002936', + "ldquo;": '\U0000201C', + "ldquor;": '\U0000201E', + "ldrdhar;": '\U00002967', + "ldrushar;": '\U0000294B', + "ldsh;": '\U000021B2', + "le;": '\U00002264', + "leftarrow;": '\U00002190', + "leftarrowtail;": '\U000021A2', + "leftharpoondown;": '\U000021BD', + "leftharpoonup;": '\U000021BC', + "leftleftarrows;": '\U000021C7', + "leftrightarrow;": '\U00002194', + "leftrightarrows;": '\U000021C6', + "leftrightharpoons;": '\U000021CB', + "leftrightsquigarrow;": '\U000021AD', + "leftthreetimes;": '\U000022CB', + "leg;": '\U000022DA', + "leq;": '\U00002264', + "leqq;": '\U00002266', + "leqslant;": '\U00002A7D', + "les;": '\U00002A7D', + "lescc;": '\U00002AA8', + "lesdot;": '\U00002A7F', + "lesdoto;": '\U00002A81', + "lesdotor;": '\U00002A83', + "lesges;": '\U00002A93', + "lessapprox;": '\U00002A85', + "lessdot;": '\U000022D6', + "lesseqgtr;": '\U000022DA', + "lesseqqgtr;": '\U00002A8B', + "lessgtr;": '\U00002276', + "lesssim;": '\U00002272', + "lfisht;": '\U0000297C', + "lfloor;": '\U0000230A', + "lfr;": '\U0001D529', + "lg;": '\U00002276', + "lgE;": '\U00002A91', + "lhard;": '\U000021BD', + "lharu;": '\U000021BC', + "lharul;": '\U0000296A', + "lhblk;": '\U00002584', + "ljcy;": '\U00000459', + "ll;": '\U0000226A', + "llarr;": '\U000021C7', + "llcorner;": '\U0000231E', + "llhard;": '\U0000296B', + "lltri;": '\U000025FA', + "lmidot;": '\U00000140', + "lmoust;": '\U000023B0', + "lmoustache;": '\U000023B0', + "lnE;": '\U00002268', + "lnap;": '\U00002A89', + "lnapprox;": '\U00002A89', + "lne;": '\U00002A87', + "lneq;": '\U00002A87', + "lneqq;": '\U00002268', + "lnsim;": '\U000022E6', + "loang;": '\U000027EC', + "loarr;": '\U000021FD', + "lobrk;": '\U000027E6', + "longleftarrow;": '\U000027F5', + "longleftrightarrow;": '\U000027F7', + "longmapsto;": '\U000027FC', + "longrightarrow;": '\U000027F6', + "looparrowleft;": '\U000021AB', + "looparrowright;": '\U000021AC', + "lopar;": '\U00002985', + "lopf;": '\U0001D55D', + "loplus;": '\U00002A2D', + "lotimes;": '\U00002A34', + "lowast;": '\U00002217', + "lowbar;": '\U0000005F', + "loz;": '\U000025CA', + "lozenge;": '\U000025CA', + "lozf;": '\U000029EB', + "lpar;": '\U00000028', + "lparlt;": '\U00002993', + "lrarr;": '\U000021C6', + "lrcorner;": '\U0000231F', + "lrhar;": '\U000021CB', + "lrhard;": '\U0000296D', + "lrm;": '\U0000200E', + "lrtri;": '\U000022BF', + "lsaquo;": '\U00002039', + "lscr;": '\U0001D4C1', + "lsh;": '\U000021B0', + "lsim;": '\U00002272', + "lsime;": '\U00002A8D', + "lsimg;": '\U00002A8F', + "lsqb;": '\U0000005B', + "lsquo;": '\U00002018', + "lsquor;": '\U0000201A', + "lstrok;": '\U00000142', + "lt;": '\U0000003C', + "ltcc;": '\U00002AA6', + "ltcir;": '\U00002A79', + "ltdot;": '\U000022D6', + "lthree;": '\U000022CB', + "ltimes;": '\U000022C9', + "ltlarr;": '\U00002976', + "ltquest;": '\U00002A7B', + "ltrPar;": '\U00002996', + "ltri;": '\U000025C3', + "ltrie;": '\U000022B4', + "ltrif;": '\U000025C2', + "lurdshar;": '\U0000294A', + "luruhar;": '\U00002966', + "mDDot;": '\U0000223A', + "macr;": '\U000000AF', + "male;": '\U00002642', + "malt;": '\U00002720', + "maltese;": '\U00002720', + "map;": '\U000021A6', + "mapsto;": '\U000021A6', + "mapstodown;": '\U000021A7', + "mapstoleft;": '\U000021A4', + "mapstoup;": '\U000021A5', + "marker;": '\U000025AE', + "mcomma;": '\U00002A29', + "mcy;": '\U0000043C', + "mdash;": '\U00002014', + "measuredangle;": '\U00002221', + "mfr;": '\U0001D52A', + "mho;": '\U00002127', + "micro;": '\U000000B5', + "mid;": '\U00002223', + "midast;": '\U0000002A', + "midcir;": '\U00002AF0', + "middot;": '\U000000B7', + "minus;": '\U00002212', + "minusb;": '\U0000229F', + "minusd;": '\U00002238', + "minusdu;": '\U00002A2A', + "mlcp;": '\U00002ADB', + "mldr;": '\U00002026', + "mnplus;": '\U00002213', + "models;": '\U000022A7', + "mopf;": '\U0001D55E', + "mp;": '\U00002213', + "mscr;": '\U0001D4C2', + "mstpos;": '\U0000223E', + "mu;": '\U000003BC', + "multimap;": '\U000022B8', + "mumap;": '\U000022B8', + "nLeftarrow;": '\U000021CD', + "nLeftrightarrow;": '\U000021CE', + "nRightarrow;": '\U000021CF', + "nVDash;": '\U000022AF', + "nVdash;": '\U000022AE', + "nabla;": '\U00002207', + "nacute;": '\U00000144', + "nap;": '\U00002249', + "napos;": '\U00000149', + "napprox;": '\U00002249', + "natur;": '\U0000266E', + "natural;": '\U0000266E', + "naturals;": '\U00002115', + "nbsp;": '\U000000A0', + "ncap;": '\U00002A43', + "ncaron;": '\U00000148', + "ncedil;": '\U00000146', + "ncong;": '\U00002247', + "ncup;": '\U00002A42', + "ncy;": '\U0000043D', + "ndash;": '\U00002013', + "ne;": '\U00002260', + "neArr;": '\U000021D7', + "nearhk;": '\U00002924', + "nearr;": '\U00002197', + "nearrow;": '\U00002197', + "nequiv;": '\U00002262', + "nesear;": '\U00002928', + "nexist;": '\U00002204', + "nexists;": '\U00002204', + "nfr;": '\U0001D52B', + "nge;": '\U00002271', + "ngeq;": '\U00002271', + "ngsim;": '\U00002275', + "ngt;": '\U0000226F', + "ngtr;": '\U0000226F', + "nhArr;": '\U000021CE', + "nharr;": '\U000021AE', + "nhpar;": '\U00002AF2', + "ni;": '\U0000220B', + "nis;": '\U000022FC', + "nisd;": '\U000022FA', + "niv;": '\U0000220B', + "njcy;": '\U0000045A', + "nlArr;": '\U000021CD', + "nlarr;": '\U0000219A', + "nldr;": '\U00002025', + "nle;": '\U00002270', + "nleftarrow;": '\U0000219A', + "nleftrightarrow;": '\U000021AE', + "nleq;": '\U00002270', + "nless;": '\U0000226E', + "nlsim;": '\U00002274', + "nlt;": '\U0000226E', + "nltri;": '\U000022EA', + "nltrie;": '\U000022EC', + "nmid;": '\U00002224', + "nopf;": '\U0001D55F', + "not;": '\U000000AC', + "notin;": '\U00002209', + "notinva;": '\U00002209', + "notinvb;": '\U000022F7', + "notinvc;": '\U000022F6', + "notni;": '\U0000220C', + "notniva;": '\U0000220C', + "notnivb;": '\U000022FE', + "notnivc;": '\U000022FD', + "npar;": '\U00002226', + "nparallel;": '\U00002226', + "npolint;": '\U00002A14', + "npr;": '\U00002280', + "nprcue;": '\U000022E0', + "nprec;": '\U00002280', + "nrArr;": '\U000021CF', + "nrarr;": '\U0000219B', + "nrightarrow;": '\U0000219B', + "nrtri;": '\U000022EB', + "nrtrie;": '\U000022ED', + "nsc;": '\U00002281', + "nsccue;": '\U000022E1', + "nscr;": '\U0001D4C3', + "nshortmid;": '\U00002224', + "nshortparallel;": '\U00002226', + "nsim;": '\U00002241', + "nsime;": '\U00002244', + "nsimeq;": '\U00002244', + "nsmid;": '\U00002224', + "nspar;": '\U00002226', + "nsqsube;": '\U000022E2', + "nsqsupe;": '\U000022E3', + "nsub;": '\U00002284', + "nsube;": '\U00002288', + "nsubseteq;": '\U00002288', + "nsucc;": '\U00002281', + "nsup;": '\U00002285', + "nsupe;": '\U00002289', + "nsupseteq;": '\U00002289', + "ntgl;": '\U00002279', + "ntilde;": '\U000000F1', + "ntlg;": '\U00002278', + "ntriangleleft;": '\U000022EA', + "ntrianglelefteq;": '\U000022EC', + "ntriangleright;": '\U000022EB', + "ntrianglerighteq;": '\U000022ED', + "nu;": '\U000003BD', + "num;": '\U00000023', + "numero;": '\U00002116', + "numsp;": '\U00002007', + "nvDash;": '\U000022AD', + "nvHarr;": '\U00002904', + "nvdash;": '\U000022AC', + "nvinfin;": '\U000029DE', + "nvlArr;": '\U00002902', + "nvrArr;": '\U00002903', + "nwArr;": '\U000021D6', + "nwarhk;": '\U00002923', + "nwarr;": '\U00002196', + "nwarrow;": '\U00002196', + "nwnear;": '\U00002927', + "oS;": '\U000024C8', + "oacute;": '\U000000F3', + "oast;": '\U0000229B', + "ocir;": '\U0000229A', + "ocirc;": '\U000000F4', + "ocy;": '\U0000043E', + "odash;": '\U0000229D', + "odblac;": '\U00000151', + "odiv;": '\U00002A38', + "odot;": '\U00002299', + "odsold;": '\U000029BC', + "oelig;": '\U00000153', + "ofcir;": '\U000029BF', + "ofr;": '\U0001D52C', + "ogon;": '\U000002DB', + "ograve;": '\U000000F2', + "ogt;": '\U000029C1', + "ohbar;": '\U000029B5', + "ohm;": '\U000003A9', + "oint;": '\U0000222E', + "olarr;": '\U000021BA', + "olcir;": '\U000029BE', + "olcross;": '\U000029BB', + "oline;": '\U0000203E', + "olt;": '\U000029C0', + "omacr;": '\U0000014D', + "omega;": '\U000003C9', + "omicron;": '\U000003BF', + "omid;": '\U000029B6', + "ominus;": '\U00002296', + "oopf;": '\U0001D560', + "opar;": '\U000029B7', + "operp;": '\U000029B9', + "oplus;": '\U00002295', + "or;": '\U00002228', + "orarr;": '\U000021BB', + "ord;": '\U00002A5D', + "order;": '\U00002134', + "orderof;": '\U00002134', + "ordf;": '\U000000AA', + "ordm;": '\U000000BA', + "origof;": '\U000022B6', + "oror;": '\U00002A56', + "orslope;": '\U00002A57', + "orv;": '\U00002A5B', + "oscr;": '\U00002134', + "oslash;": '\U000000F8', + "osol;": '\U00002298', + "otilde;": '\U000000F5', + "otimes;": '\U00002297', + "otimesas;": '\U00002A36', + "ouml;": '\U000000F6', + "ovbar;": '\U0000233D', + "par;": '\U00002225', + "para;": '\U000000B6', + "parallel;": '\U00002225', + "parsim;": '\U00002AF3', + "parsl;": '\U00002AFD', + "part;": '\U00002202', + "pcy;": '\U0000043F', + "percnt;": '\U00000025', + "period;": '\U0000002E', + "permil;": '\U00002030', + "perp;": '\U000022A5', + "pertenk;": '\U00002031', + "pfr;": '\U0001D52D', + "phi;": '\U000003C6', + "phiv;": '\U000003D5', + "phmmat;": '\U00002133', + "phone;": '\U0000260E', + "pi;": '\U000003C0', + "pitchfork;": '\U000022D4', + "piv;": '\U000003D6', + "planck;": '\U0000210F', + "planckh;": '\U0000210E', + "plankv;": '\U0000210F', + "plus;": '\U0000002B', + "plusacir;": '\U00002A23', + "plusb;": '\U0000229E', + "pluscir;": '\U00002A22', + "plusdo;": '\U00002214', + "plusdu;": '\U00002A25', + "pluse;": '\U00002A72', + "plusmn;": '\U000000B1', + "plussim;": '\U00002A26', + "plustwo;": '\U00002A27', + "pm;": '\U000000B1', + "pointint;": '\U00002A15', + "popf;": '\U0001D561', + "pound;": '\U000000A3', + "pr;": '\U0000227A', + "prE;": '\U00002AB3', + "prap;": '\U00002AB7', + "prcue;": '\U0000227C', + "pre;": '\U00002AAF', + "prec;": '\U0000227A', + "precapprox;": '\U00002AB7', + "preccurlyeq;": '\U0000227C', + "preceq;": '\U00002AAF', + "precnapprox;": '\U00002AB9', + "precneqq;": '\U00002AB5', + "precnsim;": '\U000022E8', + "precsim;": '\U0000227E', + "prime;": '\U00002032', + "primes;": '\U00002119', + "prnE;": '\U00002AB5', + "prnap;": '\U00002AB9', + "prnsim;": '\U000022E8', + "prod;": '\U0000220F', + "profalar;": '\U0000232E', + "profline;": '\U00002312', + "profsurf;": '\U00002313', + "prop;": '\U0000221D', + "propto;": '\U0000221D', + "prsim;": '\U0000227E', + "prurel;": '\U000022B0', + "pscr;": '\U0001D4C5', + "psi;": '\U000003C8', + "puncsp;": '\U00002008', + "qfr;": '\U0001D52E', + "qint;": '\U00002A0C', + "qopf;": '\U0001D562', + "qprime;": '\U00002057', + "qscr;": '\U0001D4C6', + "quaternions;": '\U0000210D', + "quatint;": '\U00002A16', + "quest;": '\U0000003F', + "questeq;": '\U0000225F', + "quot;": '\U00000022', + "rAarr;": '\U000021DB', + "rArr;": '\U000021D2', + "rAtail;": '\U0000291C', + "rBarr;": '\U0000290F', + "rHar;": '\U00002964', + "racute;": '\U00000155', + "radic;": '\U0000221A', + "raemptyv;": '\U000029B3', + "rang;": '\U000027E9', + "rangd;": '\U00002992', + "range;": '\U000029A5', + "rangle;": '\U000027E9', + "raquo;": '\U000000BB', + "rarr;": '\U00002192', + "rarrap;": '\U00002975', + "rarrb;": '\U000021E5', + "rarrbfs;": '\U00002920', + "rarrc;": '\U00002933', + "rarrfs;": '\U0000291E', + "rarrhk;": '\U000021AA', + "rarrlp;": '\U000021AC', + "rarrpl;": '\U00002945', + "rarrsim;": '\U00002974', + "rarrtl;": '\U000021A3', + "rarrw;": '\U0000219D', + "ratail;": '\U0000291A', + "ratio;": '\U00002236', + "rationals;": '\U0000211A', + "rbarr;": '\U0000290D', + "rbbrk;": '\U00002773', + "rbrace;": '\U0000007D', + "rbrack;": '\U0000005D', + "rbrke;": '\U0000298C', + "rbrksld;": '\U0000298E', + "rbrkslu;": '\U00002990', + "rcaron;": '\U00000159', + "rcedil;": '\U00000157', + "rceil;": '\U00002309', + "rcub;": '\U0000007D', + "rcy;": '\U00000440', + "rdca;": '\U00002937', + "rdldhar;": '\U00002969', + "rdquo;": '\U0000201D', + "rdquor;": '\U0000201D', + "rdsh;": '\U000021B3', + "real;": '\U0000211C', + "realine;": '\U0000211B', + "realpart;": '\U0000211C', + "reals;": '\U0000211D', + "rect;": '\U000025AD', + "reg;": '\U000000AE', + "rfisht;": '\U0000297D', + "rfloor;": '\U0000230B', + "rfr;": '\U0001D52F', + "rhard;": '\U000021C1', + "rharu;": '\U000021C0', + "rharul;": '\U0000296C', + "rho;": '\U000003C1', + "rhov;": '\U000003F1', + "rightarrow;": '\U00002192', + "rightarrowtail;": '\U000021A3', + "rightharpoondown;": '\U000021C1', + "rightharpoonup;": '\U000021C0', + "rightleftarrows;": '\U000021C4', + "rightleftharpoons;": '\U000021CC', + "rightrightarrows;": '\U000021C9', + "rightsquigarrow;": '\U0000219D', + "rightthreetimes;": '\U000022CC', + "ring;": '\U000002DA', + "risingdotseq;": '\U00002253', + "rlarr;": '\U000021C4', + "rlhar;": '\U000021CC', + "rlm;": '\U0000200F', + "rmoust;": '\U000023B1', + "rmoustache;": '\U000023B1', + "rnmid;": '\U00002AEE', + "roang;": '\U000027ED', + "roarr;": '\U000021FE', + "robrk;": '\U000027E7', + "ropar;": '\U00002986', + "ropf;": '\U0001D563', + "roplus;": '\U00002A2E', + "rotimes;": '\U00002A35', + "rpar;": '\U00000029', + "rpargt;": '\U00002994', + "rppolint;": '\U00002A12', + "rrarr;": '\U000021C9', + "rsaquo;": '\U0000203A', + "rscr;": '\U0001D4C7', + "rsh;": '\U000021B1', + "rsqb;": '\U0000005D', + "rsquo;": '\U00002019', + "rsquor;": '\U00002019', + "rthree;": '\U000022CC', + "rtimes;": '\U000022CA', + "rtri;": '\U000025B9', + "rtrie;": '\U000022B5', + "rtrif;": '\U000025B8', + "rtriltri;": '\U000029CE', + "ruluhar;": '\U00002968', + "rx;": '\U0000211E', + "sacute;": '\U0000015B', + "sbquo;": '\U0000201A', + "sc;": '\U0000227B', + "scE;": '\U00002AB4', + "scap;": '\U00002AB8', + "scaron;": '\U00000161', + "sccue;": '\U0000227D', + "sce;": '\U00002AB0', + "scedil;": '\U0000015F', + "scirc;": '\U0000015D', + "scnE;": '\U00002AB6', + "scnap;": '\U00002ABA', + "scnsim;": '\U000022E9', + "scpolint;": '\U00002A13', + "scsim;": '\U0000227F', + "scy;": '\U00000441', + "sdot;": '\U000022C5', + "sdotb;": '\U000022A1', + "sdote;": '\U00002A66', + "seArr;": '\U000021D8', + "searhk;": '\U00002925', + "searr;": '\U00002198', + "searrow;": '\U00002198', + "sect;": '\U000000A7', + "semi;": '\U0000003B', + "seswar;": '\U00002929', + "setminus;": '\U00002216', + "setmn;": '\U00002216', + "sext;": '\U00002736', + "sfr;": '\U0001D530', + "sfrown;": '\U00002322', + "sharp;": '\U0000266F', + "shchcy;": '\U00000449', + "shcy;": '\U00000448', + "shortmid;": '\U00002223', + "shortparallel;": '\U00002225', + "shy;": '\U000000AD', + "sigma;": '\U000003C3', + "sigmaf;": '\U000003C2', + "sigmav;": '\U000003C2', + "sim;": '\U0000223C', + "simdot;": '\U00002A6A', + "sime;": '\U00002243', + "simeq;": '\U00002243', + "simg;": '\U00002A9E', + "simgE;": '\U00002AA0', + "siml;": '\U00002A9D', + "simlE;": '\U00002A9F', + "simne;": '\U00002246', + "simplus;": '\U00002A24', + "simrarr;": '\U00002972', + "slarr;": '\U00002190', + "smallsetminus;": '\U00002216', + "smashp;": '\U00002A33', + "smeparsl;": '\U000029E4', + "smid;": '\U00002223', + "smile;": '\U00002323', + "smt;": '\U00002AAA', + "smte;": '\U00002AAC', + "softcy;": '\U0000044C', + "sol;": '\U0000002F', + "solb;": '\U000029C4', + "solbar;": '\U0000233F', + "sopf;": '\U0001D564', + "spades;": '\U00002660', + "spadesuit;": '\U00002660', + "spar;": '\U00002225', + "sqcap;": '\U00002293', + "sqcup;": '\U00002294', + "sqsub;": '\U0000228F', + "sqsube;": '\U00002291', + "sqsubset;": '\U0000228F', + "sqsubseteq;": '\U00002291', + "sqsup;": '\U00002290', + "sqsupe;": '\U00002292', + "sqsupset;": '\U00002290', + "sqsupseteq;": '\U00002292', + "squ;": '\U000025A1', + "square;": '\U000025A1', + "squarf;": '\U000025AA', + "squf;": '\U000025AA', + "srarr;": '\U00002192', + "sscr;": '\U0001D4C8', + "ssetmn;": '\U00002216', + "ssmile;": '\U00002323', + "sstarf;": '\U000022C6', + "star;": '\U00002606', + "starf;": '\U00002605', + "straightepsilon;": '\U000003F5', + "straightphi;": '\U000003D5', + "strns;": '\U000000AF', + "sub;": '\U00002282', + "subE;": '\U00002AC5', + "subdot;": '\U00002ABD', + "sube;": '\U00002286', + "subedot;": '\U00002AC3', + "submult;": '\U00002AC1', + "subnE;": '\U00002ACB', + "subne;": '\U0000228A', + "subplus;": '\U00002ABF', + "subrarr;": '\U00002979', + "subset;": '\U00002282', + "subseteq;": '\U00002286', + "subseteqq;": '\U00002AC5', + "subsetneq;": '\U0000228A', + "subsetneqq;": '\U00002ACB', + "subsim;": '\U00002AC7', + "subsub;": '\U00002AD5', + "subsup;": '\U00002AD3', + "succ;": '\U0000227B', + "succapprox;": '\U00002AB8', + "succcurlyeq;": '\U0000227D', + "succeq;": '\U00002AB0', + "succnapprox;": '\U00002ABA', + "succneqq;": '\U00002AB6', + "succnsim;": '\U000022E9', + "succsim;": '\U0000227F', + "sum;": '\U00002211', + "sung;": '\U0000266A', + "sup;": '\U00002283', + "sup1;": '\U000000B9', + "sup2;": '\U000000B2', + "sup3;": '\U000000B3', + "supE;": '\U00002AC6', + "supdot;": '\U00002ABE', + "supdsub;": '\U00002AD8', + "supe;": '\U00002287', + "supedot;": '\U00002AC4', + "suphsol;": '\U000027C9', + "suphsub;": '\U00002AD7', + "suplarr;": '\U0000297B', + "supmult;": '\U00002AC2', + "supnE;": '\U00002ACC', + "supne;": '\U0000228B', + "supplus;": '\U00002AC0', + "supset;": '\U00002283', + "supseteq;": '\U00002287', + "supseteqq;": '\U00002AC6', + "supsetneq;": '\U0000228B', + "supsetneqq;": '\U00002ACC', + "supsim;": '\U00002AC8', + "supsub;": '\U00002AD4', + "supsup;": '\U00002AD6', + "swArr;": '\U000021D9', + "swarhk;": '\U00002926', + "swarr;": '\U00002199', + "swarrow;": '\U00002199', + "swnwar;": '\U0000292A', + "szlig;": '\U000000DF', + "target;": '\U00002316', + "tau;": '\U000003C4', + "tbrk;": '\U000023B4', + "tcaron;": '\U00000165', + "tcedil;": '\U00000163', + "tcy;": '\U00000442', + "tdot;": '\U000020DB', + "telrec;": '\U00002315', + "tfr;": '\U0001D531', + "there4;": '\U00002234', + "therefore;": '\U00002234', + "theta;": '\U000003B8', + "thetasym;": '\U000003D1', + "thetav;": '\U000003D1', + "thickapprox;": '\U00002248', + "thicksim;": '\U0000223C', + "thinsp;": '\U00002009', + "thkap;": '\U00002248', + "thksim;": '\U0000223C', + "thorn;": '\U000000FE', + "tilde;": '\U000002DC', + "times;": '\U000000D7', + "timesb;": '\U000022A0', + "timesbar;": '\U00002A31', + "timesd;": '\U00002A30', + "tint;": '\U0000222D', + "toea;": '\U00002928', + "top;": '\U000022A4', + "topbot;": '\U00002336', + "topcir;": '\U00002AF1', + "topf;": '\U0001D565', + "topfork;": '\U00002ADA', + "tosa;": '\U00002929', + "tprime;": '\U00002034', + "trade;": '\U00002122', + "triangle;": '\U000025B5', + "triangledown;": '\U000025BF', + "triangleleft;": '\U000025C3', + "trianglelefteq;": '\U000022B4', + "triangleq;": '\U0000225C', + "triangleright;": '\U000025B9', + "trianglerighteq;": '\U000022B5', + "tridot;": '\U000025EC', + "trie;": '\U0000225C', + "triminus;": '\U00002A3A', + "triplus;": '\U00002A39', + "trisb;": '\U000029CD', + "tritime;": '\U00002A3B', + "trpezium;": '\U000023E2', + "tscr;": '\U0001D4C9', + "tscy;": '\U00000446', + "tshcy;": '\U0000045B', + "tstrok;": '\U00000167', + "twixt;": '\U0000226C', + "twoheadleftarrow;": '\U0000219E', + "twoheadrightarrow;": '\U000021A0', + "uArr;": '\U000021D1', + "uHar;": '\U00002963', + "uacute;": '\U000000FA', + "uarr;": '\U00002191', + "ubrcy;": '\U0000045E', + "ubreve;": '\U0000016D', + "ucirc;": '\U000000FB', + "ucy;": '\U00000443', + "udarr;": '\U000021C5', + "udblac;": '\U00000171', + "udhar;": '\U0000296E', + "ufisht;": '\U0000297E', + "ufr;": '\U0001D532', + "ugrave;": '\U000000F9', + "uharl;": '\U000021BF', + "uharr;": '\U000021BE', + "uhblk;": '\U00002580', + "ulcorn;": '\U0000231C', + "ulcorner;": '\U0000231C', + "ulcrop;": '\U0000230F', + "ultri;": '\U000025F8', + "umacr;": '\U0000016B', + "uml;": '\U000000A8', + "uogon;": '\U00000173', + "uopf;": '\U0001D566', + "uparrow;": '\U00002191', + "updownarrow;": '\U00002195', + "upharpoonleft;": '\U000021BF', + "upharpoonright;": '\U000021BE', + "uplus;": '\U0000228E', + "upsi;": '\U000003C5', + "upsih;": '\U000003D2', + "upsilon;": '\U000003C5', + "upuparrows;": '\U000021C8', + "urcorn;": '\U0000231D', + "urcorner;": '\U0000231D', + "urcrop;": '\U0000230E', + "uring;": '\U0000016F', + "urtri;": '\U000025F9', + "uscr;": '\U0001D4CA', + "utdot;": '\U000022F0', + "utilde;": '\U00000169', + "utri;": '\U000025B5', + "utrif;": '\U000025B4', + "uuarr;": '\U000021C8', + "uuml;": '\U000000FC', + "uwangle;": '\U000029A7', + "vArr;": '\U000021D5', + "vBar;": '\U00002AE8', + "vBarv;": '\U00002AE9', + "vDash;": '\U000022A8', + "vangrt;": '\U0000299C', + "varepsilon;": '\U000003F5', + "varkappa;": '\U000003F0', + "varnothing;": '\U00002205', + "varphi;": '\U000003D5', + "varpi;": '\U000003D6', + "varpropto;": '\U0000221D', + "varr;": '\U00002195', + "varrho;": '\U000003F1', + "varsigma;": '\U000003C2', + "vartheta;": '\U000003D1', + "vartriangleleft;": '\U000022B2', + "vartriangleright;": '\U000022B3', + "vcy;": '\U00000432', + "vdash;": '\U000022A2', + "vee;": '\U00002228', + "veebar;": '\U000022BB', + "veeeq;": '\U0000225A', + "vellip;": '\U000022EE', + "verbar;": '\U0000007C', + "vert;": '\U0000007C', + "vfr;": '\U0001D533', + "vltri;": '\U000022B2', + "vopf;": '\U0001D567', + "vprop;": '\U0000221D', + "vrtri;": '\U000022B3', + "vscr;": '\U0001D4CB', + "vzigzag;": '\U0000299A', + "wcirc;": '\U00000175', + "wedbar;": '\U00002A5F', + "wedge;": '\U00002227', + "wedgeq;": '\U00002259', + "weierp;": '\U00002118', + "wfr;": '\U0001D534', + "wopf;": '\U0001D568', + "wp;": '\U00002118', + "wr;": '\U00002240', + "wreath;": '\U00002240', + "wscr;": '\U0001D4CC', + "xcap;": '\U000022C2', + "xcirc;": '\U000025EF', + "xcup;": '\U000022C3', + "xdtri;": '\U000025BD', + "xfr;": '\U0001D535', + "xhArr;": '\U000027FA', + "xharr;": '\U000027F7', + "xi;": '\U000003BE', + "xlArr;": '\U000027F8', + "xlarr;": '\U000027F5', + "xmap;": '\U000027FC', + "xnis;": '\U000022FB', + "xodot;": '\U00002A00', + "xopf;": '\U0001D569', + "xoplus;": '\U00002A01', + "xotime;": '\U00002A02', + "xrArr;": '\U000027F9', + "xrarr;": '\U000027F6', + "xscr;": '\U0001D4CD', + "xsqcup;": '\U00002A06', + "xuplus;": '\U00002A04', + "xutri;": '\U000025B3', + "xvee;": '\U000022C1', + "xwedge;": '\U000022C0', + "yacute;": '\U000000FD', + "yacy;": '\U0000044F', + "ycirc;": '\U00000177', + "ycy;": '\U0000044B', + "yen;": '\U000000A5', + "yfr;": '\U0001D536', + "yicy;": '\U00000457', + "yopf;": '\U0001D56A', + "yscr;": '\U0001D4CE', + "yucy;": '\U0000044E', + "yuml;": '\U000000FF', + "zacute;": '\U0000017A', + "zcaron;": '\U0000017E', + "zcy;": '\U00000437', + "zdot;": '\U0000017C', + "zeetrf;": '\U00002128', + "zeta;": '\U000003B6', + "zfr;": '\U0001D537', + "zhcy;": '\U00000436', + "zigrarr;": '\U000021DD', + "zopf;": '\U0001D56B', + "zscr;": '\U0001D4CF', + "zwj;": '\U0000200D', + "zwnj;": '\U0000200C', + "AElig": '\U000000C6', + "AMP": '\U00000026', + "Aacute": '\U000000C1', + "Acirc": '\U000000C2', + "Agrave": '\U000000C0', + "Aring": '\U000000C5', + "Atilde": '\U000000C3', + "Auml": '\U000000C4', + "COPY": '\U000000A9', + "Ccedil": '\U000000C7', + "ETH": '\U000000D0', + "Eacute": '\U000000C9', + "Ecirc": '\U000000CA', + "Egrave": '\U000000C8', + "Euml": '\U000000CB', + "GT": '\U0000003E', + "Iacute": '\U000000CD', + "Icirc": '\U000000CE', + "Igrave": '\U000000CC', + "Iuml": '\U000000CF', + "LT": '\U0000003C', + "Ntilde": '\U000000D1', + "Oacute": '\U000000D3', + "Ocirc": '\U000000D4', + "Ograve": '\U000000D2', + "Oslash": '\U000000D8', + "Otilde": '\U000000D5', + "Ouml": '\U000000D6', + "QUOT": '\U00000022', + "REG": '\U000000AE', + "THORN": '\U000000DE', + "Uacute": '\U000000DA', + "Ucirc": '\U000000DB', + "Ugrave": '\U000000D9', + "Uuml": '\U000000DC', + "Yacute": '\U000000DD', + "aacute": '\U000000E1', + "acirc": '\U000000E2', + "acute": '\U000000B4', + "aelig": '\U000000E6', + "agrave": '\U000000E0', + "amp": '\U00000026', + "aring": '\U000000E5', + "atilde": '\U000000E3', + "auml": '\U000000E4', + "brvbar": '\U000000A6', + "ccedil": '\U000000E7', + "cedil": '\U000000B8', + "cent": '\U000000A2', + "copy": '\U000000A9', + "curren": '\U000000A4', + "deg": '\U000000B0', + "divide": '\U000000F7', + "eacute": '\U000000E9', + "ecirc": '\U000000EA', + "egrave": '\U000000E8', + "eth": '\U000000F0', + "euml": '\U000000EB', + "frac12": '\U000000BD', + "frac14": '\U000000BC', + "frac34": '\U000000BE', + "gt": '\U0000003E', + "iacute": '\U000000ED', + "icirc": '\U000000EE', + "iexcl": '\U000000A1', + "igrave": '\U000000EC', + "iquest": '\U000000BF', + "iuml": '\U000000EF', + "laquo": '\U000000AB', + "lt": '\U0000003C', + "macr": '\U000000AF', + "micro": '\U000000B5', + "middot": '\U000000B7', + "nbsp": '\U000000A0', + "not": '\U000000AC', + "ntilde": '\U000000F1', + "oacute": '\U000000F3', + "ocirc": '\U000000F4', + "ograve": '\U000000F2', + "ordf": '\U000000AA', + "ordm": '\U000000BA', + "oslash": '\U000000F8', + "otilde": '\U000000F5', + "ouml": '\U000000F6', + "para": '\U000000B6', + "plusmn": '\U000000B1', + "pound": '\U000000A3', + "quot": '\U00000022', + "raquo": '\U000000BB', + "reg": '\U000000AE', + "sect": '\U000000A7', + "shy": '\U000000AD', + "sup1": '\U000000B9', + "sup2": '\U000000B2', + "sup3": '\U000000B3', + "szlig": '\U000000DF', + "thorn": '\U000000FE', + "times": '\U000000D7', + "uacute": '\U000000FA', + "ucirc": '\U000000FB', + "ugrave": '\U000000F9', + "uml": '\U000000A8', + "uuml": '\U000000FC', + "yacute": '\U000000FD', + "yen": '\U000000A5', + "yuml": '\U000000FF', +} + +// HTML entities that are two unicode codepoints. +var entity2 = map[string][2]rune{ + // TODO(nigeltao): Handle replacements that are wider than their names. + // "nLt;": {'\u226A', '\u20D2'}, + // "nGt;": {'\u226B', '\u20D2'}, + "NotEqualTilde;": {'\u2242', '\u0338'}, + "NotGreaterFullEqual;": {'\u2267', '\u0338'}, + "NotGreaterGreater;": {'\u226B', '\u0338'}, + "NotGreaterSlantEqual;": {'\u2A7E', '\u0338'}, + "NotHumpDownHump;": {'\u224E', '\u0338'}, + "NotHumpEqual;": {'\u224F', '\u0338'}, + "NotLeftTriangleBar;": {'\u29CF', '\u0338'}, + "NotLessLess;": {'\u226A', '\u0338'}, + "NotLessSlantEqual;": {'\u2A7D', '\u0338'}, + "NotNestedGreaterGreater;": {'\u2AA2', '\u0338'}, + "NotNestedLessLess;": {'\u2AA1', '\u0338'}, + "NotPrecedesEqual;": {'\u2AAF', '\u0338'}, + "NotRightTriangleBar;": {'\u29D0', '\u0338'}, + "NotSquareSubset;": {'\u228F', '\u0338'}, + "NotSquareSuperset;": {'\u2290', '\u0338'}, + "NotSubset;": {'\u2282', '\u20D2'}, + "NotSucceedsEqual;": {'\u2AB0', '\u0338'}, + "NotSucceedsTilde;": {'\u227F', '\u0338'}, + "NotSuperset;": {'\u2283', '\u20D2'}, + "ThickSpace;": {'\u205F', '\u200A'}, + "acE;": {'\u223E', '\u0333'}, + "bne;": {'\u003D', '\u20E5'}, + "bnequiv;": {'\u2261', '\u20E5'}, + "caps;": {'\u2229', '\uFE00'}, + "cups;": {'\u222A', '\uFE00'}, + "fjlig;": {'\u0066', '\u006A'}, + "gesl;": {'\u22DB', '\uFE00'}, + "gvertneqq;": {'\u2269', '\uFE00'}, + "gvnE;": {'\u2269', '\uFE00'}, + "lates;": {'\u2AAD', '\uFE00'}, + "lesg;": {'\u22DA', '\uFE00'}, + "lvertneqq;": {'\u2268', '\uFE00'}, + "lvnE;": {'\u2268', '\uFE00'}, + "nGg;": {'\u22D9', '\u0338'}, + "nGtv;": {'\u226B', '\u0338'}, + "nLl;": {'\u22D8', '\u0338'}, + "nLtv;": {'\u226A', '\u0338'}, + "nang;": {'\u2220', '\u20D2'}, + "napE;": {'\u2A70', '\u0338'}, + "napid;": {'\u224B', '\u0338'}, + "nbump;": {'\u224E', '\u0338'}, + "nbumpe;": {'\u224F', '\u0338'}, + "ncongdot;": {'\u2A6D', '\u0338'}, + "nedot;": {'\u2250', '\u0338'}, + "nesim;": {'\u2242', '\u0338'}, + "ngE;": {'\u2267', '\u0338'}, + "ngeqq;": {'\u2267', '\u0338'}, + "ngeqslant;": {'\u2A7E', '\u0338'}, + "nges;": {'\u2A7E', '\u0338'}, + "nlE;": {'\u2266', '\u0338'}, + "nleqq;": {'\u2266', '\u0338'}, + "nleqslant;": {'\u2A7D', '\u0338'}, + "nles;": {'\u2A7D', '\u0338'}, + "notinE;": {'\u22F9', '\u0338'}, + "notindot;": {'\u22F5', '\u0338'}, + "nparsl;": {'\u2AFD', '\u20E5'}, + "npart;": {'\u2202', '\u0338'}, + "npre;": {'\u2AAF', '\u0338'}, + "npreceq;": {'\u2AAF', '\u0338'}, + "nrarrc;": {'\u2933', '\u0338'}, + "nrarrw;": {'\u219D', '\u0338'}, + "nsce;": {'\u2AB0', '\u0338'}, + "nsubE;": {'\u2AC5', '\u0338'}, + "nsubset;": {'\u2282', '\u20D2'}, + "nsubseteqq;": {'\u2AC5', '\u0338'}, + "nsucceq;": {'\u2AB0', '\u0338'}, + "nsupE;": {'\u2AC6', '\u0338'}, + "nsupset;": {'\u2283', '\u20D2'}, + "nsupseteqq;": {'\u2AC6', '\u0338'}, + "nvap;": {'\u224D', '\u20D2'}, + "nvge;": {'\u2265', '\u20D2'}, + "nvgt;": {'\u003E', '\u20D2'}, + "nvle;": {'\u2264', '\u20D2'}, + "nvlt;": {'\u003C', '\u20D2'}, + "nvltrie;": {'\u22B4', '\u20D2'}, + "nvrtrie;": {'\u22B5', '\u20D2'}, + "nvsim;": {'\u223C', '\u20D2'}, + "race;": {'\u223D', '\u0331'}, + "smtes;": {'\u2AAC', '\uFE00'}, + "sqcaps;": {'\u2293', '\uFE00'}, + "sqcups;": {'\u2294', '\uFE00'}, + "varsubsetneq;": {'\u228A', '\uFE00'}, + "varsubsetneqq;": {'\u2ACB', '\uFE00'}, + "varsupsetneq;": {'\u228B', '\uFE00'}, + "varsupsetneqq;": {'\u2ACC', '\uFE00'}, + "vnsub;": {'\u2282', '\u20D2'}, + "vnsup;": {'\u2283', '\u20D2'}, + "vsubnE;": {'\u2ACB', '\uFE00'}, + "vsubne;": {'\u228A', '\uFE00'}, + "vsupnE;": {'\u2ACC', '\uFE00'}, + "vsupne;": {'\u228B', '\uFE00'}, +} diff --git a/vendor/golang.org/x/net/html/entity_test.go b/vendor/golang.org/x/net/html/entity_test.go new file mode 100644 index 0000000..b53f866 --- /dev/null +++ b/vendor/golang.org/x/net/html/entity_test.go @@ -0,0 +1,29 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "testing" + "unicode/utf8" +) + +func TestEntityLength(t *testing.T) { + // We verify that the length of UTF-8 encoding of each value is <= 1 + len(key). + // The +1 comes from the leading "&". This property implies that the length of + // unescaped text is <= the length of escaped text. + for k, v := range entity { + if 1+len(k) < utf8.RuneLen(v) { + t.Error("escaped entity &" + k + " is shorter than its UTF-8 encoding " + string(v)) + } + if len(k) > longestEntityWithoutSemicolon && k[len(k)-1] != ';' { + t.Errorf("entity name %s is %d characters, but longestEntityWithoutSemicolon=%d", k, len(k), longestEntityWithoutSemicolon) + } + } + for k, v := range entity2 { + if 1+len(k) < utf8.RuneLen(v[0])+utf8.RuneLen(v[1]) { + t.Error("escaped entity &" + k + " is shorter than its UTF-8 encoding " + string(v[0]) + string(v[1])) + } + } +} diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go new file mode 100644 index 0000000..d856139 --- /dev/null +++ b/vendor/golang.org/x/net/html/escape.go @@ -0,0 +1,258 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "bytes" + "strings" + "unicode/utf8" +) + +// These replacements permit compatibility with old numeric entities that +// assumed Windows-1252 encoding. +// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference +var replacementTable = [...]rune{ + '\u20AC', // First entry is what 0x80 should be replaced with. + '\u0081', + '\u201A', + '\u0192', + '\u201E', + '\u2026', + '\u2020', + '\u2021', + '\u02C6', + '\u2030', + '\u0160', + '\u2039', + '\u0152', + '\u008D', + '\u017D', + '\u008F', + '\u0090', + '\u2018', + '\u2019', + '\u201C', + '\u201D', + '\u2022', + '\u2013', + '\u2014', + '\u02DC', + '\u2122', + '\u0161', + '\u203A', + '\u0153', + '\u009D', + '\u017E', + '\u0178', // Last entry is 0x9F. + // 0x00->'\uFFFD' is handled programmatically. + // 0x0D->'\u000D' is a no-op. +} + +// unescapeEntity reads an entity like "<" from b[src:] and writes the +// corresponding "<" to b[dst:], returning the incremented dst and src cursors. +// Precondition: b[src] == '&' && dst <= src. +// attribute should be true if parsing an attribute value. +func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { + // https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference + + // i starts at 1 because we already know that s[0] == '&'. + i, s := 1, b[src:] + + if len(s) <= 1 { + b[dst] = b[src] + return dst + 1, src + 1 + } + + if s[i] == '#' { + if len(s) <= 3 { // We need to have at least "&#.". + b[dst] = b[src] + return dst + 1, src + 1 + } + i++ + c := s[i] + hex := false + if c == 'x' || c == 'X' { + hex = true + i++ + } + + x := '\x00' + for i < len(s) { + c = s[i] + i++ + if hex { + if '0' <= c && c <= '9' { + x = 16*x + rune(c) - '0' + continue + } else if 'a' <= c && c <= 'f' { + x = 16*x + rune(c) - 'a' + 10 + continue + } else if 'A' <= c && c <= 'F' { + x = 16*x + rune(c) - 'A' + 10 + continue + } + } else if '0' <= c && c <= '9' { + x = 10*x + rune(c) - '0' + continue + } + if c != ';' { + i-- + } + break + } + + if i <= 3 { // No characters matched. + b[dst] = b[src] + return dst + 1, src + 1 + } + + if 0x80 <= x && x <= 0x9F { + // Replace characters from Windows-1252 with UTF-8 equivalents. + x = replacementTable[x-0x80] + } else if x == 0 || (0xD800 <= x && x <= 0xDFFF) || x > 0x10FFFF { + // Replace invalid characters with the replacement character. + x = '\uFFFD' + } + + return dst + utf8.EncodeRune(b[dst:], x), src + i + } + + // Consume the maximum number of characters possible, with the + // consumed characters matching one of the named references. + + for i < len(s) { + c := s[i] + i++ + // Lower-cased characters are more common in entities, so we check for them first. + if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' { + continue + } + if c != ';' { + i-- + } + break + } + + entityName := string(s[1:i]) + if entityName == "" { + // No-op. + } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' { + // No-op. + } else if x := entity[entityName]; x != 0 { + return dst + utf8.EncodeRune(b[dst:], x), src + i + } else if x := entity2[entityName]; x[0] != 0 { + dst1 := dst + utf8.EncodeRune(b[dst:], x[0]) + return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i + } else if !attribute { + maxLen := len(entityName) - 1 + if maxLen > longestEntityWithoutSemicolon { + maxLen = longestEntityWithoutSemicolon + } + for j := maxLen; j > 1; j-- { + if x := entity[entityName[:j]]; x != 0 { + return dst + utf8.EncodeRune(b[dst:], x), src + j + 1 + } + } + } + + dst1, src1 = dst+i, src+i + copy(b[dst:dst1], b[src:src1]) + return dst1, src1 +} + +// unescape unescapes b's entities in-place, so that "a<b" becomes "a': + esc = ">" + case '"': + // """ is shorter than """. + esc = """ + case '\r': + esc = " " + default: + panic("unrecognized escape character") + } + s = s[i+1:] + if _, err := w.WriteString(esc); err != nil { + return err + } + i = strings.IndexAny(s, escapedChars) + } + _, err := w.WriteString(s) + return err +} + +// EscapeString escapes special characters like "<" to become "<". It +// escapes only five such characters: <, >, &, ' and ". +// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't +// always true. +func EscapeString(s string) string { + if strings.IndexAny(s, escapedChars) == -1 { + return s + } + var buf bytes.Buffer + escape(&buf, s) + return buf.String() +} + +// UnescapeString unescapes entities like "<" to become "<". It unescapes a +// larger range of entities than EscapeString escapes. For example, "á" +// unescapes to "á", as does "á" and "&xE1;". +// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't +// always true. +func UnescapeString(s string) string { + for _, c := range s { + if c == '&' { + return string(unescape([]byte(s), false)) + } + } + return s +} diff --git a/vendor/golang.org/x/net/html/escape_test.go b/vendor/golang.org/x/net/html/escape_test.go new file mode 100644 index 0000000..b405d4b --- /dev/null +++ b/vendor/golang.org/x/net/html/escape_test.go @@ -0,0 +1,97 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import "testing" + +type unescapeTest struct { + // A short description of the test case. + desc string + // The HTML text. + html string + // The unescaped text. + unescaped string +} + +var unescapeTests = []unescapeTest{ + // Handle no entities. + { + "copy", + "A\ttext\nstring", + "A\ttext\nstring", + }, + // Handle simple named entities. + { + "simple", + "& > <", + "& > <", + }, + // Handle hitting the end of the string. + { + "stringEnd", + "& &", + "& &", + }, + // Handle entities with two codepoints. + { + "multiCodepoint", + "text ⋛︀ blah", + "text \u22db\ufe00 blah", + }, + // Handle decimal numeric entities. + { + "decimalEntity", + "Delta = Δ ", + "Delta = Δ ", + }, + // Handle hexadecimal numeric entities. + { + "hexadecimalEntity", + "Lambda = λ = λ ", + "Lambda = λ = λ ", + }, + // Handle numeric early termination. + { + "numericEnds", + "&# &#x €43 © = ©f = ©", + "&# &#x €43 © = ©f = ©", + }, + // Handle numeric ISO-8859-1 entity replacements. + { + "numericReplacements", + "Footnote‡", + "Footnote‡", + }, +} + +func TestUnescape(t *testing.T) { + for _, tt := range unescapeTests { + unescaped := UnescapeString(tt.html) + if unescaped != tt.unescaped { + t.Errorf("TestUnescape %s: want %q, got %q", tt.desc, tt.unescaped, unescaped) + } + } +} + +func TestUnescapeEscape(t *testing.T) { + ss := []string{ + ``, + `abc def`, + `a & b`, + `a&b`, + `a & b`, + `"`, + `"`, + `"<&>"`, + `"<&>"`, + `3&5==1 && 0<1, "0<1", a+acute=á`, + `The special characters are: <, >, &, ' and "`, + } + for _, s := range ss { + if got := UnescapeString(EscapeString(s)); got != s { + t.Errorf("got %q want %q", got, s) + } + } +} diff --git a/vendor/golang.org/x/net/html/example_test.go b/vendor/golang.org/x/net/html/example_test.go new file mode 100644 index 0000000..0b06ed7 --- /dev/null +++ b/vendor/golang.org/x/net/html/example_test.go @@ -0,0 +1,40 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This example demonstrates parsing HTML data and walking the resulting tree. +package html_test + +import ( + "fmt" + "log" + "strings" + + "golang.org/x/net/html" +) + +func ExampleParse() { + s := `

Links:

` + doc, err := html.Parse(strings.NewReader(s)) + if err != nil { + log.Fatal(err) + } + var f func(*html.Node) + f = func(n *html.Node) { + if n.Type == html.ElementNode && n.Data == "a" { + for _, a := range n.Attr { + if a.Key == "href" { + fmt.Println(a.Val) + break + } + } + } + for c := n.FirstChild; c != nil; c = c.NextSibling { + f(c) + } + } + f(doc) + // Output: + // foo + // /bar/baz +} diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go new file mode 100644 index 0000000..d3b3844 --- /dev/null +++ b/vendor/golang.org/x/net/html/foreign.go @@ -0,0 +1,226 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "strings" +) + +func adjustAttributeNames(aa []Attribute, nameMap map[string]string) { + for i := range aa { + if newName, ok := nameMap[aa[i].Key]; ok { + aa[i].Key = newName + } + } +} + +func adjustForeignAttributes(aa []Attribute) { + for i, a := range aa { + if a.Key == "" || a.Key[0] != 'x' { + continue + } + switch a.Key { + case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", + "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink": + j := strings.Index(a.Key, ":") + aa[i].Namespace = a.Key[:j] + aa[i].Key = a.Key[j+1:] + } + } +} + +func htmlIntegrationPoint(n *Node) bool { + if n.Type != ElementNode { + return false + } + switch n.Namespace { + case "math": + if n.Data == "annotation-xml" { + for _, a := range n.Attr { + if a.Key == "encoding" { + val := strings.ToLower(a.Val) + if val == "text/html" || val == "application/xhtml+xml" { + return true + } + } + } + } + case "svg": + switch n.Data { + case "desc", "foreignObject", "title": + return true + } + } + return false +} + +func mathMLTextIntegrationPoint(n *Node) bool { + if n.Namespace != "math" { + return false + } + switch n.Data { + case "mi", "mo", "mn", "ms", "mtext": + return true + } + return false +} + +// Section 12.2.5.5. +var breakout = map[string]bool{ + "b": true, + "big": true, + "blockquote": true, + "body": true, + "br": true, + "center": true, + "code": true, + "dd": true, + "div": true, + "dl": true, + "dt": true, + "em": true, + "embed": true, + "h1": true, + "h2": true, + "h3": true, + "h4": true, + "h5": true, + "h6": true, + "head": true, + "hr": true, + "i": true, + "img": true, + "li": true, + "listing": true, + "menu": true, + "meta": true, + "nobr": true, + "ol": true, + "p": true, + "pre": true, + "ruby": true, + "s": true, + "small": true, + "span": true, + "strong": true, + "strike": true, + "sub": true, + "sup": true, + "table": true, + "tt": true, + "u": true, + "ul": true, + "var": true, +} + +// Section 12.2.5.5. +var svgTagNameAdjustments = map[string]string{ + "altglyph": "altGlyph", + "altglyphdef": "altGlyphDef", + "altglyphitem": "altGlyphItem", + "animatecolor": "animateColor", + "animatemotion": "animateMotion", + "animatetransform": "animateTransform", + "clippath": "clipPath", + "feblend": "feBlend", + "fecolormatrix": "feColorMatrix", + "fecomponenttransfer": "feComponentTransfer", + "fecomposite": "feComposite", + "feconvolvematrix": "feConvolveMatrix", + "fediffuselighting": "feDiffuseLighting", + "fedisplacementmap": "feDisplacementMap", + "fedistantlight": "feDistantLight", + "feflood": "feFlood", + "fefunca": "feFuncA", + "fefuncb": "feFuncB", + "fefuncg": "feFuncG", + "fefuncr": "feFuncR", + "fegaussianblur": "feGaussianBlur", + "feimage": "feImage", + "femerge": "feMerge", + "femergenode": "feMergeNode", + "femorphology": "feMorphology", + "feoffset": "feOffset", + "fepointlight": "fePointLight", + "fespecularlighting": "feSpecularLighting", + "fespotlight": "feSpotLight", + "fetile": "feTile", + "feturbulence": "feTurbulence", + "foreignobject": "foreignObject", + "glyphref": "glyphRef", + "lineargradient": "linearGradient", + "radialgradient": "radialGradient", + "textpath": "textPath", +} + +// Section 12.2.5.1 +var mathMLAttributeAdjustments = map[string]string{ + "definitionurl": "definitionURL", +} + +var svgAttributeAdjustments = map[string]string{ + "attributename": "attributeName", + "attributetype": "attributeType", + "basefrequency": "baseFrequency", + "baseprofile": "baseProfile", + "calcmode": "calcMode", + "clippathunits": "clipPathUnits", + "contentscripttype": "contentScriptType", + "contentstyletype": "contentStyleType", + "diffuseconstant": "diffuseConstant", + "edgemode": "edgeMode", + "externalresourcesrequired": "externalResourcesRequired", + "filterres": "filterRes", + "filterunits": "filterUnits", + "glyphref": "glyphRef", + "gradienttransform": "gradientTransform", + "gradientunits": "gradientUnits", + "kernelmatrix": "kernelMatrix", + "kernelunitlength": "kernelUnitLength", + "keypoints": "keyPoints", + "keysplines": "keySplines", + "keytimes": "keyTimes", + "lengthadjust": "lengthAdjust", + "limitingconeangle": "limitingConeAngle", + "markerheight": "markerHeight", + "markerunits": "markerUnits", + "markerwidth": "markerWidth", + "maskcontentunits": "maskContentUnits", + "maskunits": "maskUnits", + "numoctaves": "numOctaves", + "pathlength": "pathLength", + "patterncontentunits": "patternContentUnits", + "patterntransform": "patternTransform", + "patternunits": "patternUnits", + "pointsatx": "pointsAtX", + "pointsaty": "pointsAtY", + "pointsatz": "pointsAtZ", + "preservealpha": "preserveAlpha", + "preserveaspectratio": "preserveAspectRatio", + "primitiveunits": "primitiveUnits", + "refx": "refX", + "refy": "refY", + "repeatcount": "repeatCount", + "repeatdur": "repeatDur", + "requiredextensions": "requiredExtensions", + "requiredfeatures": "requiredFeatures", + "specularconstant": "specularConstant", + "specularexponent": "specularExponent", + "spreadmethod": "spreadMethod", + "startoffset": "startOffset", + "stddeviation": "stdDeviation", + "stitchtiles": "stitchTiles", + "surfacescale": "surfaceScale", + "systemlanguage": "systemLanguage", + "tablevalues": "tableValues", + "targetx": "targetX", + "targety": "targetY", + "textlength": "textLength", + "viewbox": "viewBox", + "viewtarget": "viewTarget", + "xchannelselector": "xChannelSelector", + "ychannelselector": "yChannelSelector", + "zoomandpan": "zoomAndPan", +} diff --git a/vendor/golang.org/x/net/html/node.go b/vendor/golang.org/x/net/html/node.go new file mode 100644 index 0000000..26b657a --- /dev/null +++ b/vendor/golang.org/x/net/html/node.go @@ -0,0 +1,193 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "golang.org/x/net/html/atom" +) + +// A NodeType is the type of a Node. +type NodeType uint32 + +const ( + ErrorNode NodeType = iota + TextNode + DocumentNode + ElementNode + CommentNode + DoctypeNode + scopeMarkerNode +) + +// Section 12.2.3.3 says "scope markers are inserted when entering applet +// elements, buttons, object elements, marquees, table cells, and table +// captions, and are used to prevent formatting from 'leaking'". +var scopeMarker = Node{Type: scopeMarkerNode} + +// A Node consists of a NodeType and some Data (tag name for element nodes, +// content for text) and are part of a tree of Nodes. Element nodes may also +// have a Namespace and contain a slice of Attributes. Data is unescaped, so +// that it looks like "a 0 { + return (*s)[i-1] + } + return nil +} + +// index returns the index of the top-most occurrence of n in the stack, or -1 +// if n is not present. +func (s *nodeStack) index(n *Node) int { + for i := len(*s) - 1; i >= 0; i-- { + if (*s)[i] == n { + return i + } + } + return -1 +} + +// insert inserts a node at the given index. +func (s *nodeStack) insert(i int, n *Node) { + (*s) = append(*s, nil) + copy((*s)[i+1:], (*s)[i:]) + (*s)[i] = n +} + +// remove removes a node from the stack. It is a no-op if n is not present. +func (s *nodeStack) remove(n *Node) { + i := s.index(n) + if i == -1 { + return + } + copy((*s)[i:], (*s)[i+1:]) + j := len(*s) - 1 + (*s)[j] = nil + *s = (*s)[:j] +} diff --git a/vendor/golang.org/x/net/html/node_test.go b/vendor/golang.org/x/net/html/node_test.go new file mode 100644 index 0000000..471102f --- /dev/null +++ b/vendor/golang.org/x/net/html/node_test.go @@ -0,0 +1,146 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "fmt" +) + +// checkTreeConsistency checks that a node and its descendants are all +// consistent in their parent/child/sibling relationships. +func checkTreeConsistency(n *Node) error { + return checkTreeConsistency1(n, 0) +} + +func checkTreeConsistency1(n *Node, depth int) error { + if depth == 1e4 { + return fmt.Errorf("html: tree looks like it contains a cycle") + } + if err := checkNodeConsistency(n); err != nil { + return err + } + for c := n.FirstChild; c != nil; c = c.NextSibling { + if err := checkTreeConsistency1(c, depth+1); err != nil { + return err + } + } + return nil +} + +// checkNodeConsistency checks that a node's parent/child/sibling relationships +// are consistent. +func checkNodeConsistency(n *Node) error { + if n == nil { + return nil + } + + nParent := 0 + for p := n.Parent; p != nil; p = p.Parent { + nParent++ + if nParent == 1e4 { + return fmt.Errorf("html: parent list looks like an infinite loop") + } + } + + nForward := 0 + for c := n.FirstChild; c != nil; c = c.NextSibling { + nForward++ + if nForward == 1e6 { + return fmt.Errorf("html: forward list of children looks like an infinite loop") + } + if c.Parent != n { + return fmt.Errorf("html: inconsistent child/parent relationship") + } + } + + nBackward := 0 + for c := n.LastChild; c != nil; c = c.PrevSibling { + nBackward++ + if nBackward == 1e6 { + return fmt.Errorf("html: backward list of children looks like an infinite loop") + } + if c.Parent != n { + return fmt.Errorf("html: inconsistent child/parent relationship") + } + } + + if n.Parent != nil { + if n.Parent == n { + return fmt.Errorf("html: inconsistent parent relationship") + } + if n.Parent == n.FirstChild { + return fmt.Errorf("html: inconsistent parent/first relationship") + } + if n.Parent == n.LastChild { + return fmt.Errorf("html: inconsistent parent/last relationship") + } + if n.Parent == n.PrevSibling { + return fmt.Errorf("html: inconsistent parent/prev relationship") + } + if n.Parent == n.NextSibling { + return fmt.Errorf("html: inconsistent parent/next relationship") + } + + parentHasNAsAChild := false + for c := n.Parent.FirstChild; c != nil; c = c.NextSibling { + if c == n { + parentHasNAsAChild = true + break + } + } + if !parentHasNAsAChild { + return fmt.Errorf("html: inconsistent parent/child relationship") + } + } + + if n.PrevSibling != nil && n.PrevSibling.NextSibling != n { + return fmt.Errorf("html: inconsistent prev/next relationship") + } + if n.NextSibling != nil && n.NextSibling.PrevSibling != n { + return fmt.Errorf("html: inconsistent next/prev relationship") + } + + if (n.FirstChild == nil) != (n.LastChild == nil) { + return fmt.Errorf("html: inconsistent first/last relationship") + } + if n.FirstChild != nil && n.FirstChild == n.LastChild { + // We have a sole child. + if n.FirstChild.PrevSibling != nil || n.FirstChild.NextSibling != nil { + return fmt.Errorf("html: inconsistent sole child's sibling relationship") + } + } + + seen := map[*Node]bool{} + + var last *Node + for c := n.FirstChild; c != nil; c = c.NextSibling { + if seen[c] { + return fmt.Errorf("html: inconsistent repeated child") + } + seen[c] = true + last = c + } + if last != n.LastChild { + return fmt.Errorf("html: inconsistent last relationship") + } + + var first *Node + for c := n.LastChild; c != nil; c = c.PrevSibling { + if !seen[c] { + return fmt.Errorf("html: inconsistent missing child") + } + delete(seen, c) + first = c + } + if first != n.FirstChild { + return fmt.Errorf("html: inconsistent first relationship") + } + + if len(seen) != 0 { + return fmt.Errorf("html: inconsistent forwards/backwards child list") + } + + return nil +} diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go new file mode 100644 index 0000000..be4b2bf --- /dev/null +++ b/vendor/golang.org/x/net/html/parse.go @@ -0,0 +1,2094 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "errors" + "fmt" + "io" + "strings" + + a "golang.org/x/net/html/atom" +) + +// A parser implements the HTML5 parsing algorithm: +// https://html.spec.whatwg.org/multipage/syntax.html#tree-construction +type parser struct { + // tokenizer provides the tokens for the parser. + tokenizer *Tokenizer + // tok is the most recently read token. + tok Token + // Self-closing tags like
are treated as start tags, except that + // hasSelfClosingToken is set while they are being processed. + hasSelfClosingToken bool + // doc is the document root element. + doc *Node + // The stack of open elements (section 12.2.3.2) and active formatting + // elements (section 12.2.3.3). + oe, afe nodeStack + // Element pointers (section 12.2.3.4). + head, form *Node + // Other parsing state flags (section 12.2.3.5). + scripting, framesetOK bool + // im is the current insertion mode. + im insertionMode + // originalIM is the insertion mode to go back to after completing a text + // or inTableText insertion mode. + originalIM insertionMode + // fosterParenting is whether new elements should be inserted according to + // the foster parenting rules (section 12.2.5.3). + fosterParenting bool + // quirks is whether the parser is operating in "quirks mode." + quirks bool + // fragment is whether the parser is parsing an HTML fragment. + fragment bool + // context is the context element when parsing an HTML fragment + // (section 12.4). + context *Node +} + +func (p *parser) top() *Node { + if n := p.oe.top(); n != nil { + return n + } + return p.doc +} + +// Stop tags for use in popUntil. These come from section 12.2.3.2. +var ( + defaultScopeStopTags = map[string][]a.Atom{ + "": {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object, a.Template}, + "math": {a.AnnotationXml, a.Mi, a.Mn, a.Mo, a.Ms, a.Mtext}, + "svg": {a.Desc, a.ForeignObject, a.Title}, + } +) + +type scope int + +const ( + defaultScope scope = iota + listItemScope + buttonScope + tableScope + tableRowScope + tableBodyScope + selectScope +) + +// popUntil pops the stack of open elements at the highest element whose tag +// is in matchTags, provided there is no higher element in the scope's stop +// tags (as defined in section 12.2.3.2). It returns whether or not there was +// such an element. If there was not, popUntil leaves the stack unchanged. +// +// For example, the set of stop tags for table scope is: "html", "table". If +// the stack was: +// ["html", "body", "font", "table", "b", "i", "u"] +// then popUntil(tableScope, "font") would return false, but +// popUntil(tableScope, "i") would return true and the stack would become: +// ["html", "body", "font", "table", "b"] +// +// If an element's tag is in both the stop tags and matchTags, then the stack +// will be popped and the function returns true (provided, of course, there was +// no higher element in the stack that was also in the stop tags). For example, +// popUntil(tableScope, "table") returns true and leaves: +// ["html", "body", "font"] +func (p *parser) popUntil(s scope, matchTags ...a.Atom) bool { + if i := p.indexOfElementInScope(s, matchTags...); i != -1 { + p.oe = p.oe[:i] + return true + } + return false +} + +// indexOfElementInScope returns the index in p.oe of the highest element whose +// tag is in matchTags that is in scope. If no matching element is in scope, it +// returns -1. +func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { + for i := len(p.oe) - 1; i >= 0; i-- { + tagAtom := p.oe[i].DataAtom + if p.oe[i].Namespace == "" { + for _, t := range matchTags { + if t == tagAtom { + return i + } + } + switch s { + case defaultScope: + // No-op. + case listItemScope: + if tagAtom == a.Ol || tagAtom == a.Ul { + return -1 + } + case buttonScope: + if tagAtom == a.Button { + return -1 + } + case tableScope: + if tagAtom == a.Html || tagAtom == a.Table { + return -1 + } + case selectScope: + if tagAtom != a.Optgroup && tagAtom != a.Option { + return -1 + } + default: + panic("unreachable") + } + } + switch s { + case defaultScope, listItemScope, buttonScope: + for _, t := range defaultScopeStopTags[p.oe[i].Namespace] { + if t == tagAtom { + return -1 + } + } + } + } + return -1 +} + +// elementInScope is like popUntil, except that it doesn't modify the stack of +// open elements. +func (p *parser) elementInScope(s scope, matchTags ...a.Atom) bool { + return p.indexOfElementInScope(s, matchTags...) != -1 +} + +// clearStackToContext pops elements off the stack of open elements until a +// scope-defined element is found. +func (p *parser) clearStackToContext(s scope) { + for i := len(p.oe) - 1; i >= 0; i-- { + tagAtom := p.oe[i].DataAtom + switch s { + case tableScope: + if tagAtom == a.Html || tagAtom == a.Table { + p.oe = p.oe[:i+1] + return + } + case tableRowScope: + if tagAtom == a.Html || tagAtom == a.Tr { + p.oe = p.oe[:i+1] + return + } + case tableBodyScope: + if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead { + p.oe = p.oe[:i+1] + return + } + default: + panic("unreachable") + } + } +} + +// generateImpliedEndTags pops nodes off the stack of open elements as long as +// the top node has a tag name of dd, dt, li, option, optgroup, p, rp, or rt. +// If exceptions are specified, nodes with that name will not be popped off. +func (p *parser) generateImpliedEndTags(exceptions ...string) { + var i int +loop: + for i = len(p.oe) - 1; i >= 0; i-- { + n := p.oe[i] + if n.Type == ElementNode { + switch n.DataAtom { + case a.Dd, a.Dt, a.Li, a.Option, a.Optgroup, a.P, a.Rp, a.Rt: + for _, except := range exceptions { + if n.Data == except { + break loop + } + } + continue + } + } + break + } + + p.oe = p.oe[:i+1] +} + +// addChild adds a child node n to the top element, and pushes n onto the stack +// of open elements if it is an element node. +func (p *parser) addChild(n *Node) { + if p.shouldFosterParent() { + p.fosterParent(n) + } else { + p.top().AppendChild(n) + } + + if n.Type == ElementNode { + p.oe = append(p.oe, n) + } +} + +// shouldFosterParent returns whether the next node to be added should be +// foster parented. +func (p *parser) shouldFosterParent() bool { + if p.fosterParenting { + switch p.top().DataAtom { + case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr: + return true + } + } + return false +} + +// fosterParent adds a child node according to the foster parenting rules. +// Section 12.2.5.3, "foster parenting". +func (p *parser) fosterParent(n *Node) { + var table, parent, prev *Node + var i int + for i = len(p.oe) - 1; i >= 0; i-- { + if p.oe[i].DataAtom == a.Table { + table = p.oe[i] + break + } + } + + if table == nil { + // The foster parent is the html element. + parent = p.oe[0] + } else { + parent = table.Parent + } + if parent == nil { + parent = p.oe[i-1] + } + + if table != nil { + prev = table.PrevSibling + } else { + prev = parent.LastChild + } + if prev != nil && prev.Type == TextNode && n.Type == TextNode { + prev.Data += n.Data + return + } + + parent.InsertBefore(n, table) +} + +// addText adds text to the preceding node if it is a text node, or else it +// calls addChild with a new text node. +func (p *parser) addText(text string) { + if text == "" { + return + } + + if p.shouldFosterParent() { + p.fosterParent(&Node{ + Type: TextNode, + Data: text, + }) + return + } + + t := p.top() + if n := t.LastChild; n != nil && n.Type == TextNode { + n.Data += text + return + } + p.addChild(&Node{ + Type: TextNode, + Data: text, + }) +} + +// addElement adds a child element based on the current token. +func (p *parser) addElement() { + p.addChild(&Node{ + Type: ElementNode, + DataAtom: p.tok.DataAtom, + Data: p.tok.Data, + Attr: p.tok.Attr, + }) +} + +// Section 12.2.3.3. +func (p *parser) addFormattingElement() { + tagAtom, attr := p.tok.DataAtom, p.tok.Attr + p.addElement() + + // Implement the Noah's Ark clause, but with three per family instead of two. + identicalElements := 0 +findIdenticalElements: + for i := len(p.afe) - 1; i >= 0; i-- { + n := p.afe[i] + if n.Type == scopeMarkerNode { + break + } + if n.Type != ElementNode { + continue + } + if n.Namespace != "" { + continue + } + if n.DataAtom != tagAtom { + continue + } + if len(n.Attr) != len(attr) { + continue + } + compareAttributes: + for _, t0 := range n.Attr { + for _, t1 := range attr { + if t0.Key == t1.Key && t0.Namespace == t1.Namespace && t0.Val == t1.Val { + // Found a match for this attribute, continue with the next attribute. + continue compareAttributes + } + } + // If we get here, there is no attribute that matches a. + // Therefore the element is not identical to the new one. + continue findIdenticalElements + } + + identicalElements++ + if identicalElements >= 3 { + p.afe.remove(n) + } + } + + p.afe = append(p.afe, p.top()) +} + +// Section 12.2.3.3. +func (p *parser) clearActiveFormattingElements() { + for { + n := p.afe.pop() + if len(p.afe) == 0 || n.Type == scopeMarkerNode { + return + } + } +} + +// Section 12.2.3.3. +func (p *parser) reconstructActiveFormattingElements() { + n := p.afe.top() + if n == nil { + return + } + if n.Type == scopeMarkerNode || p.oe.index(n) != -1 { + return + } + i := len(p.afe) - 1 + for n.Type != scopeMarkerNode && p.oe.index(n) == -1 { + if i == 0 { + i = -1 + break + } + i-- + n = p.afe[i] + } + for { + i++ + clone := p.afe[i].clone() + p.addChild(clone) + p.afe[i] = clone + if i == len(p.afe)-1 { + break + } + } +} + +// Section 12.2.4. +func (p *parser) acknowledgeSelfClosingTag() { + p.hasSelfClosingToken = false +} + +// An insertion mode (section 12.2.3.1) is the state transition function from +// a particular state in the HTML5 parser's state machine. It updates the +// parser's fields depending on parser.tok (where ErrorToken means EOF). +// It returns whether the token was consumed. +type insertionMode func(*parser) bool + +// setOriginalIM sets the insertion mode to return to after completing a text or +// inTableText insertion mode. +// Section 12.2.3.1, "using the rules for". +func (p *parser) setOriginalIM() { + if p.originalIM != nil { + panic("html: bad parser state: originalIM was set twice") + } + p.originalIM = p.im +} + +// Section 12.2.3.1, "reset the insertion mode". +func (p *parser) resetInsertionMode() { + for i := len(p.oe) - 1; i >= 0; i-- { + n := p.oe[i] + if i == 0 && p.context != nil { + n = p.context + } + + switch n.DataAtom { + case a.Select: + p.im = inSelectIM + case a.Td, a.Th: + p.im = inCellIM + case a.Tr: + p.im = inRowIM + case a.Tbody, a.Thead, a.Tfoot: + p.im = inTableBodyIM + case a.Caption: + p.im = inCaptionIM + case a.Colgroup: + p.im = inColumnGroupIM + case a.Table: + p.im = inTableIM + case a.Head: + p.im = inBodyIM + case a.Body: + p.im = inBodyIM + case a.Frameset: + p.im = inFramesetIM + case a.Html: + p.im = beforeHeadIM + default: + continue + } + return + } + p.im = inBodyIM +} + +const whitespace = " \t\r\n\f" + +// Section 12.2.5.4.1. +func initialIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace) + if len(p.tok.Data) == 0 { + // It was all whitespace, so ignore it. + return true + } + case CommentToken: + p.doc.AppendChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + case DoctypeToken: + n, quirks := parseDoctype(p.tok.Data) + p.doc.AppendChild(n) + p.quirks = quirks + p.im = beforeHTMLIM + return true + } + p.quirks = true + p.im = beforeHTMLIM + return false +} + +// Section 12.2.5.4.2. +func beforeHTMLIM(p *parser) bool { + switch p.tok.Type { + case DoctypeToken: + // Ignore the token. + return true + case TextToken: + p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace) + if len(p.tok.Data) == 0 { + // It was all whitespace, so ignore it. + return true + } + case StartTagToken: + if p.tok.DataAtom == a.Html { + p.addElement() + p.im = beforeHeadIM + return true + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Head, a.Body, a.Html, a.Br: + p.parseImpliedToken(StartTagToken, a.Html, a.Html.String()) + return false + default: + // Ignore the token. + return true + } + case CommentToken: + p.doc.AppendChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + } + p.parseImpliedToken(StartTagToken, a.Html, a.Html.String()) + return false +} + +// Section 12.2.5.4.3. +func beforeHeadIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace) + if len(p.tok.Data) == 0 { + // It was all whitespace, so ignore it. + return true + } + case StartTagToken: + switch p.tok.DataAtom { + case a.Head: + p.addElement() + p.head = p.top() + p.im = inHeadIM + return true + case a.Html: + return inBodyIM(p) + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Head, a.Body, a.Html, a.Br: + p.parseImpliedToken(StartTagToken, a.Head, a.Head.String()) + return false + default: + // Ignore the token. + return true + } + case CommentToken: + p.addChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + case DoctypeToken: + // Ignore the token. + return true + } + + p.parseImpliedToken(StartTagToken, a.Head, a.Head.String()) + return false +} + +// Section 12.2.5.4.4. +func inHeadIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + s := strings.TrimLeft(p.tok.Data, whitespace) + if len(s) < len(p.tok.Data) { + // Add the initial whitespace to the current node. + p.addText(p.tok.Data[:len(p.tok.Data)-len(s)]) + if s == "" { + return true + } + p.tok.Data = s + } + case StartTagToken: + switch p.tok.DataAtom { + case a.Html: + return inBodyIM(p) + case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta: + p.addElement() + p.oe.pop() + p.acknowledgeSelfClosingTag() + return true + case a.Script, a.Title, a.Noscript, a.Noframes, a.Style: + p.addElement() + p.setOriginalIM() + p.im = textIM + return true + case a.Head: + // Ignore the token. + return true + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Head: + n := p.oe.pop() + if n.DataAtom != a.Head { + panic("html: bad parser state: element not found, in the in-head insertion mode") + } + p.im = afterHeadIM + return true + case a.Body, a.Html, a.Br: + p.parseImpliedToken(EndTagToken, a.Head, a.Head.String()) + return false + default: + // Ignore the token. + return true + } + case CommentToken: + p.addChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + case DoctypeToken: + // Ignore the token. + return true + } + + p.parseImpliedToken(EndTagToken, a.Head, a.Head.String()) + return false +} + +// Section 12.2.5.4.6. +func afterHeadIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + s := strings.TrimLeft(p.tok.Data, whitespace) + if len(s) < len(p.tok.Data) { + // Add the initial whitespace to the current node. + p.addText(p.tok.Data[:len(p.tok.Data)-len(s)]) + if s == "" { + return true + } + p.tok.Data = s + } + case StartTagToken: + switch p.tok.DataAtom { + case a.Html: + return inBodyIM(p) + case a.Body: + p.addElement() + p.framesetOK = false + p.im = inBodyIM + return true + case a.Frameset: + p.addElement() + p.im = inFramesetIM + return true + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title: + p.oe = append(p.oe, p.head) + defer p.oe.remove(p.head) + return inHeadIM(p) + case a.Head: + // Ignore the token. + return true + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Body, a.Html, a.Br: + // Drop down to creating an implied tag. + default: + // Ignore the token. + return true + } + case CommentToken: + p.addChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + case DoctypeToken: + // Ignore the token. + return true + } + + p.parseImpliedToken(StartTagToken, a.Body, a.Body.String()) + p.framesetOK = true + return false +} + +// copyAttributes copies attributes of src not found on dst to dst. +func copyAttributes(dst *Node, src Token) { + if len(src.Attr) == 0 { + return + } + attr := map[string]string{} + for _, t := range dst.Attr { + attr[t.Key] = t.Val + } + for _, t := range src.Attr { + if _, ok := attr[t.Key]; !ok { + dst.Attr = append(dst.Attr, t) + attr[t.Key] = t.Val + } + } +} + +// Section 12.2.5.4.7. +func inBodyIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + d := p.tok.Data + switch n := p.oe.top(); n.DataAtom { + case a.Pre, a.Listing: + if n.FirstChild == nil { + // Ignore a newline at the start of a
 block.
+				if d != "" && d[0] == '\r' {
+					d = d[1:]
+				}
+				if d != "" && d[0] == '\n' {
+					d = d[1:]
+				}
+			}
+		}
+		d = strings.Replace(d, "\x00", "", -1)
+		if d == "" {
+			return true
+		}
+		p.reconstructActiveFormattingElements()
+		p.addText(d)
+		if p.framesetOK && strings.TrimLeft(d, whitespace) != "" {
+			// There were non-whitespace characters inserted.
+			p.framesetOK = false
+		}
+	case StartTagToken:
+		switch p.tok.DataAtom {
+		case a.Html:
+			copyAttributes(p.oe[0], p.tok)
+		case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title:
+			return inHeadIM(p)
+		case a.Body:
+			if len(p.oe) >= 2 {
+				body := p.oe[1]
+				if body.Type == ElementNode && body.DataAtom == a.Body {
+					p.framesetOK = false
+					copyAttributes(body, p.tok)
+				}
+			}
+		case a.Frameset:
+			if !p.framesetOK || len(p.oe) < 2 || p.oe[1].DataAtom != a.Body {
+				// Ignore the token.
+				return true
+			}
+			body := p.oe[1]
+			if body.Parent != nil {
+				body.Parent.RemoveChild(body)
+			}
+			p.oe = p.oe[:1]
+			p.addElement()
+			p.im = inFramesetIM
+			return true
+		case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul:
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+		case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+			p.popUntil(buttonScope, a.P)
+			switch n := p.top(); n.DataAtom {
+			case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+				p.oe.pop()
+			}
+			p.addElement()
+		case a.Pre, a.Listing:
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+			// The newline, if any, will be dealt with by the TextToken case.
+			p.framesetOK = false
+		case a.Form:
+			if p.form == nil {
+				p.popUntil(buttonScope, a.P)
+				p.addElement()
+				p.form = p.top()
+			}
+		case a.Li:
+			p.framesetOK = false
+			for i := len(p.oe) - 1; i >= 0; i-- {
+				node := p.oe[i]
+				switch node.DataAtom {
+				case a.Li:
+					p.oe = p.oe[:i]
+				case a.Address, a.Div, a.P:
+					continue
+				default:
+					if !isSpecialElement(node) {
+						continue
+					}
+				}
+				break
+			}
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+		case a.Dd, a.Dt:
+			p.framesetOK = false
+			for i := len(p.oe) - 1; i >= 0; i-- {
+				node := p.oe[i]
+				switch node.DataAtom {
+				case a.Dd, a.Dt:
+					p.oe = p.oe[:i]
+				case a.Address, a.Div, a.P:
+					continue
+				default:
+					if !isSpecialElement(node) {
+						continue
+					}
+				}
+				break
+			}
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+		case a.Plaintext:
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+		case a.Button:
+			p.popUntil(defaultScope, a.Button)
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+			p.framesetOK = false
+		case a.A:
+			for i := len(p.afe) - 1; i >= 0 && p.afe[i].Type != scopeMarkerNode; i-- {
+				if n := p.afe[i]; n.Type == ElementNode && n.DataAtom == a.A {
+					p.inBodyEndTagFormatting(a.A)
+					p.oe.remove(n)
+					p.afe.remove(n)
+					break
+				}
+			}
+			p.reconstructActiveFormattingElements()
+			p.addFormattingElement()
+		case a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
+			p.reconstructActiveFormattingElements()
+			p.addFormattingElement()
+		case a.Nobr:
+			p.reconstructActiveFormattingElements()
+			if p.elementInScope(defaultScope, a.Nobr) {
+				p.inBodyEndTagFormatting(a.Nobr)
+				p.reconstructActiveFormattingElements()
+			}
+			p.addFormattingElement()
+		case a.Applet, a.Marquee, a.Object:
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+			p.afe = append(p.afe, &scopeMarker)
+			p.framesetOK = false
+		case a.Table:
+			if !p.quirks {
+				p.popUntil(buttonScope, a.P)
+			}
+			p.addElement()
+			p.framesetOK = false
+			p.im = inTableIM
+			return true
+		case a.Area, a.Br, a.Embed, a.Img, a.Input, a.Keygen, a.Wbr:
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+			p.oe.pop()
+			p.acknowledgeSelfClosingTag()
+			if p.tok.DataAtom == a.Input {
+				for _, t := range p.tok.Attr {
+					if t.Key == "type" {
+						if strings.ToLower(t.Val) == "hidden" {
+							// Skip setting framesetOK = false
+							return true
+						}
+					}
+				}
+			}
+			p.framesetOK = false
+		case a.Param, a.Source, a.Track:
+			p.addElement()
+			p.oe.pop()
+			p.acknowledgeSelfClosingTag()
+		case a.Hr:
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+			p.oe.pop()
+			p.acknowledgeSelfClosingTag()
+			p.framesetOK = false
+		case a.Image:
+			p.tok.DataAtom = a.Img
+			p.tok.Data = a.Img.String()
+			return false
+		case a.Isindex:
+			if p.form != nil {
+				// Ignore the token.
+				return true
+			}
+			action := ""
+			prompt := "This is a searchable index. Enter search keywords: "
+			attr := []Attribute{{Key: "name", Val: "isindex"}}
+			for _, t := range p.tok.Attr {
+				switch t.Key {
+				case "action":
+					action = t.Val
+				case "name":
+					// Ignore the attribute.
+				case "prompt":
+					prompt = t.Val
+				default:
+					attr = append(attr, t)
+				}
+			}
+			p.acknowledgeSelfClosingTag()
+			p.popUntil(buttonScope, a.P)
+			p.parseImpliedToken(StartTagToken, a.Form, a.Form.String())
+			if action != "" {
+				p.form.Attr = []Attribute{{Key: "action", Val: action}}
+			}
+			p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())
+			p.parseImpliedToken(StartTagToken, a.Label, a.Label.String())
+			p.addText(prompt)
+			p.addChild(&Node{
+				Type:     ElementNode,
+				DataAtom: a.Input,
+				Data:     a.Input.String(),
+				Attr:     attr,
+			})
+			p.oe.pop()
+			p.parseImpliedToken(EndTagToken, a.Label, a.Label.String())
+			p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())
+			p.parseImpliedToken(EndTagToken, a.Form, a.Form.String())
+		case a.Textarea:
+			p.addElement()
+			p.setOriginalIM()
+			p.framesetOK = false
+			p.im = textIM
+		case a.Xmp:
+			p.popUntil(buttonScope, a.P)
+			p.reconstructActiveFormattingElements()
+			p.framesetOK = false
+			p.addElement()
+			p.setOriginalIM()
+			p.im = textIM
+		case a.Iframe:
+			p.framesetOK = false
+			p.addElement()
+			p.setOriginalIM()
+			p.im = textIM
+		case a.Noembed, a.Noscript:
+			p.addElement()
+			p.setOriginalIM()
+			p.im = textIM
+		case a.Select:
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+			p.framesetOK = false
+			p.im = inSelectIM
+			return true
+		case a.Optgroup, a.Option:
+			if p.top().DataAtom == a.Option {
+				p.oe.pop()
+			}
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+		case a.Rp, a.Rt:
+			if p.elementInScope(defaultScope, a.Ruby) {
+				p.generateImpliedEndTags()
+			}
+			p.addElement()
+		case a.Math, a.Svg:
+			p.reconstructActiveFormattingElements()
+			if p.tok.DataAtom == a.Math {
+				adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)
+			} else {
+				adjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)
+			}
+			adjustForeignAttributes(p.tok.Attr)
+			p.addElement()
+			p.top().Namespace = p.tok.Data
+			if p.hasSelfClosingToken {
+				p.oe.pop()
+				p.acknowledgeSelfClosingTag()
+			}
+			return true
+		case a.Caption, a.Col, a.Colgroup, a.Frame, a.Head, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+			// Ignore the token.
+		default:
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+		}
+	case EndTagToken:
+		switch p.tok.DataAtom {
+		case a.Body:
+			if p.elementInScope(defaultScope, a.Body) {
+				p.im = afterBodyIM
+			}
+		case a.Html:
+			if p.elementInScope(defaultScope, a.Body) {
+				p.parseImpliedToken(EndTagToken, a.Body, a.Body.String())
+				return false
+			}
+			return true
+		case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul:
+			p.popUntil(defaultScope, p.tok.DataAtom)
+		case a.Form:
+			node := p.form
+			p.form = nil
+			i := p.indexOfElementInScope(defaultScope, a.Form)
+			if node == nil || i == -1 || p.oe[i] != node {
+				// Ignore the token.
+				return true
+			}
+			p.generateImpliedEndTags()
+			p.oe.remove(node)
+		case a.P:
+			if !p.elementInScope(buttonScope, a.P) {
+				p.parseImpliedToken(StartTagToken, a.P, a.P.String())
+			}
+			p.popUntil(buttonScope, a.P)
+		case a.Li:
+			p.popUntil(listItemScope, a.Li)
+		case a.Dd, a.Dt:
+			p.popUntil(defaultScope, p.tok.DataAtom)
+		case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+			p.popUntil(defaultScope, a.H1, a.H2, a.H3, a.H4, a.H5, a.H6)
+		case a.A, a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.Nobr, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
+			p.inBodyEndTagFormatting(p.tok.DataAtom)
+		case a.Applet, a.Marquee, a.Object:
+			if p.popUntil(defaultScope, p.tok.DataAtom) {
+				p.clearActiveFormattingElements()
+			}
+		case a.Br:
+			p.tok.Type = StartTagToken
+			return false
+		default:
+			p.inBodyEndTagOther(p.tok.DataAtom)
+		}
+	case CommentToken:
+		p.addChild(&Node{
+			Type: CommentNode,
+			Data: p.tok.Data,
+		})
+	}
+
+	return true
+}
+
+func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) {
+	// This is the "adoption agency" algorithm, described at
+	// https://html.spec.whatwg.org/multipage/syntax.html#adoptionAgency
+
+	// TODO: this is a fairly literal line-by-line translation of that algorithm.
+	// Once the code successfully parses the comprehensive test suite, we should
+	// refactor this code to be more idiomatic.
+
+	// Steps 1-4. The outer loop.
+	for i := 0; i < 8; i++ {
+		// Step 5. Find the formatting element.
+		var formattingElement *Node
+		for j := len(p.afe) - 1; j >= 0; j-- {
+			if p.afe[j].Type == scopeMarkerNode {
+				break
+			}
+			if p.afe[j].DataAtom == tagAtom {
+				formattingElement = p.afe[j]
+				break
+			}
+		}
+		if formattingElement == nil {
+			p.inBodyEndTagOther(tagAtom)
+			return
+		}
+		feIndex := p.oe.index(formattingElement)
+		if feIndex == -1 {
+			p.afe.remove(formattingElement)
+			return
+		}
+		if !p.elementInScope(defaultScope, tagAtom) {
+			// Ignore the tag.
+			return
+		}
+
+		// Steps 9-10. Find the furthest block.
+		var furthestBlock *Node
+		for _, e := range p.oe[feIndex:] {
+			if isSpecialElement(e) {
+				furthestBlock = e
+				break
+			}
+		}
+		if furthestBlock == nil {
+			e := p.oe.pop()
+			for e != formattingElement {
+				e = p.oe.pop()
+			}
+			p.afe.remove(e)
+			return
+		}
+
+		// Steps 11-12. Find the common ancestor and bookmark node.
+		commonAncestor := p.oe[feIndex-1]
+		bookmark := p.afe.index(formattingElement)
+
+		// Step 13. The inner loop. Find the lastNode to reparent.
+		lastNode := furthestBlock
+		node := furthestBlock
+		x := p.oe.index(node)
+		// Steps 13.1-13.2
+		for j := 0; j < 3; j++ {
+			// Step 13.3.
+			x--
+			node = p.oe[x]
+			// Step 13.4 - 13.5.
+			if p.afe.index(node) == -1 {
+				p.oe.remove(node)
+				continue
+			}
+			// Step 13.6.
+			if node == formattingElement {
+				break
+			}
+			// Step 13.7.
+			clone := node.clone()
+			p.afe[p.afe.index(node)] = clone
+			p.oe[p.oe.index(node)] = clone
+			node = clone
+			// Step 13.8.
+			if lastNode == furthestBlock {
+				bookmark = p.afe.index(node) + 1
+			}
+			// Step 13.9.
+			if lastNode.Parent != nil {
+				lastNode.Parent.RemoveChild(lastNode)
+			}
+			node.AppendChild(lastNode)
+			// Step 13.10.
+			lastNode = node
+		}
+
+		// Step 14. Reparent lastNode to the common ancestor,
+		// or for misnested table nodes, to the foster parent.
+		if lastNode.Parent != nil {
+			lastNode.Parent.RemoveChild(lastNode)
+		}
+		switch commonAncestor.DataAtom {
+		case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+			p.fosterParent(lastNode)
+		default:
+			commonAncestor.AppendChild(lastNode)
+		}
+
+		// Steps 15-17. Reparent nodes from the furthest block's children
+		// to a clone of the formatting element.
+		clone := formattingElement.clone()
+		reparentChildren(clone, furthestBlock)
+		furthestBlock.AppendChild(clone)
+
+		// Step 18. Fix up the list of active formatting elements.
+		if oldLoc := p.afe.index(formattingElement); oldLoc != -1 && oldLoc < bookmark {
+			// Move the bookmark with the rest of the list.
+			bookmark--
+		}
+		p.afe.remove(formattingElement)
+		p.afe.insert(bookmark, clone)
+
+		// Step 19. Fix up the stack of open elements.
+		p.oe.remove(formattingElement)
+		p.oe.insert(p.oe.index(furthestBlock)+1, clone)
+	}
+}
+
+// inBodyEndTagOther performs the "any other end tag" algorithm for inBodyIM.
+// "Any other end tag" handling from 12.2.5.5 The rules for parsing tokens in foreign content
+// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign
+func (p *parser) inBodyEndTagOther(tagAtom a.Atom) {
+	for i := len(p.oe) - 1; i >= 0; i-- {
+		if p.oe[i].DataAtom == tagAtom {
+			p.oe = p.oe[:i]
+			break
+		}
+		if isSpecialElement(p.oe[i]) {
+			break
+		}
+	}
+}
+
+// Section 12.2.5.4.8.
+func textIM(p *parser) bool {
+	switch p.tok.Type {
+	case ErrorToken:
+		p.oe.pop()
+	case TextToken:
+		d := p.tok.Data
+		if n := p.oe.top(); n.DataAtom == a.Textarea && n.FirstChild == nil {
+			// Ignore a newline at the start of a -->
+#errors
+#document
+| 
+|   
+|   
+|     -->
+#errors
+#document
+| 
+|   
+|   
+|     
+#errors
+Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
+#document
+| 
+|   
+|   
+|     
+#errors
+Line: 1 Col: 9 Unexpected end tag (strong). Expected DOCTYPE.
+Line: 1 Col: 9 Unexpected end tag (strong) after the (implied) root element.
+Line: 1 Col: 13 Unexpected end tag (b) after the (implied) root element.
+Line: 1 Col: 18 Unexpected end tag (em) after the (implied) root element.
+Line: 1 Col: 22 Unexpected end tag (i) after the (implied) root element.
+Line: 1 Col: 26 Unexpected end tag (u) after the (implied) root element.
+Line: 1 Col: 35 Unexpected end tag (strike) after the (implied) root element.
+Line: 1 Col: 39 Unexpected end tag (s) after the (implied) root element.
+Line: 1 Col: 47 Unexpected end tag (blink) after the (implied) root element.
+Line: 1 Col: 52 Unexpected end tag (tt) after the (implied) root element.
+Line: 1 Col: 58 Unexpected end tag (pre) after the (implied) root element.
+Line: 1 Col: 64 Unexpected end tag (big) after the (implied) root element.
+Line: 1 Col: 72 Unexpected end tag (small) after the (implied) root element.
+Line: 1 Col: 79 Unexpected end tag (font) after the (implied) root element.
+Line: 1 Col: 88 Unexpected end tag (select) after the (implied) root element.
+Line: 1 Col: 93 Unexpected end tag (h1) after the (implied) root element.
+Line: 1 Col: 98 Unexpected end tag (h2) after the (implied) root element.
+Line: 1 Col: 103 Unexpected end tag (h3) after the (implied) root element.
+Line: 1 Col: 108 Unexpected end tag (h4) after the (implied) root element.
+Line: 1 Col: 113 Unexpected end tag (h5) after the (implied) root element.
+Line: 1 Col: 118 Unexpected end tag (h6) after the (implied) root element.
+Line: 1 Col: 125 Unexpected end tag (body) after the (implied) root element.
+Line: 1 Col: 130 Unexpected end tag (br). Treated as br element.
+Line: 1 Col: 134 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+Line: 1 Col: 140 This element (img) has no end tag.
+Line: 1 Col: 148 Unexpected end tag (title). Ignored.
+Line: 1 Col: 155 Unexpected end tag (span). Ignored.
+Line: 1 Col: 163 Unexpected end tag (style). Ignored.
+Line: 1 Col: 172 Unexpected end tag (script). Ignored.
+Line: 1 Col: 180 Unexpected end tag (table). Ignored.
+Line: 1 Col: 185 Unexpected end tag (th). Ignored.
+Line: 1 Col: 190 Unexpected end tag (td). Ignored.
+Line: 1 Col: 195 Unexpected end tag (tr). Ignored.
+Line: 1 Col: 203 This element (frame) has no end tag.
+Line: 1 Col: 210 This element (area) has no end tag.
+Line: 1 Col: 217 Unexpected end tag (link). Ignored.
+Line: 1 Col: 225 This element (param) has no end tag.
+Line: 1 Col: 230 This element (hr) has no end tag.
+Line: 1 Col: 238 This element (input) has no end tag.
+Line: 1 Col: 244 Unexpected end tag (col). Ignored.
+Line: 1 Col: 251 Unexpected end tag (base). Ignored.
+Line: 1 Col: 258 Unexpected end tag (meta). Ignored.
+Line: 1 Col: 269 This element (basefont) has no end tag.
+Line: 1 Col: 279 This element (bgsound) has no end tag.
+Line: 1 Col: 287 This element (embed) has no end tag.
+Line: 1 Col: 296 This element (spacer) has no end tag.
+Line: 1 Col: 300 Unexpected end tag (p). Ignored.
+Line: 1 Col: 305 End tag (dd) seen too early. Expected other end tag.
+Line: 1 Col: 310 End tag (dt) seen too early. Expected other end tag.
+Line: 1 Col: 320 Unexpected end tag (caption). Ignored.
+Line: 1 Col: 331 Unexpected end tag (colgroup). Ignored.
+Line: 1 Col: 339 Unexpected end tag (tbody). Ignored.
+Line: 1 Col: 347 Unexpected end tag (tfoot). Ignored.
+Line: 1 Col: 355 Unexpected end tag (thead). Ignored.
+Line: 1 Col: 365 End tag (address) seen too early. Expected other end tag.
+Line: 1 Col: 378 End tag (blockquote) seen too early. Expected other end tag.
+Line: 1 Col: 387 End tag (center) seen too early. Expected other end tag.
+Line: 1 Col: 393 Unexpected end tag (dir). Ignored.
+Line: 1 Col: 399 End tag (div) seen too early. Expected other end tag.
+Line: 1 Col: 404 End tag (dl) seen too early. Expected other end tag.
+Line: 1 Col: 415 End tag (fieldset) seen too early. Expected other end tag.
+Line: 1 Col: 425 End tag (listing) seen too early. Expected other end tag.
+Line: 1 Col: 432 End tag (menu) seen too early. Expected other end tag.
+Line: 1 Col: 437 End tag (ol) seen too early. Expected other end tag.
+Line: 1 Col: 442 End tag (ul) seen too early. Expected other end tag.
+Line: 1 Col: 447 End tag (li) seen too early. Expected other end tag.
+Line: 1 Col: 454 End tag (nobr) violates step 1, paragraph 1 of the adoption agency algorithm.
+Line: 1 Col: 460 This element (wbr) has no end tag.
+Line: 1 Col: 476 End tag (button) seen too early. Expected other end tag.
+Line: 1 Col: 486 End tag (marquee) seen too early. Expected other end tag.
+Line: 1 Col: 495 End tag (object) seen too early. Expected other end tag.
+Line: 1 Col: 513 Unexpected end tag (html). Ignored.
+Line: 1 Col: 513 Unexpected end tag (frameset). Ignored.
+Line: 1 Col: 520 Unexpected end tag (head). Ignored.
+Line: 1 Col: 529 Unexpected end tag (iframe). Ignored.
+Line: 1 Col: 537 This element (image) has no end tag.
+Line: 1 Col: 547 This element (isindex) has no end tag.
+Line: 1 Col: 557 Unexpected end tag (noembed). Ignored.
+Line: 1 Col: 568 Unexpected end tag (noframes). Ignored.
+Line: 1 Col: 579 Unexpected end tag (noscript). Ignored.
+Line: 1 Col: 590 Unexpected end tag (optgroup). Ignored.
+Line: 1 Col: 599 Unexpected end tag (option). Ignored.
+Line: 1 Col: 611 Unexpected end tag (plaintext). Ignored.
+Line: 1 Col: 622 Unexpected end tag (textarea). Ignored.
+#document
+| 
+|   
+|   
+|     
+|

+ +#data +

+#errors +Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE. +Line: 1 Col: 20 Unexpected end tag (strong) in table context caused voodoo mode. +Line: 1 Col: 20 End tag (strong) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 24 Unexpected end tag (b) in table context caused voodoo mode. +Line: 1 Col: 24 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 29 Unexpected end tag (em) in table context caused voodoo mode. +Line: 1 Col: 29 End tag (em) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 33 Unexpected end tag (i) in table context caused voodoo mode. +Line: 1 Col: 33 End tag (i) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 37 Unexpected end tag (u) in table context caused voodoo mode. +Line: 1 Col: 37 End tag (u) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 46 Unexpected end tag (strike) in table context caused voodoo mode. +Line: 1 Col: 46 End tag (strike) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 50 Unexpected end tag (s) in table context caused voodoo mode. +Line: 1 Col: 50 End tag (s) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 58 Unexpected end tag (blink) in table context caused voodoo mode. +Line: 1 Col: 58 Unexpected end tag (blink). Ignored. +Line: 1 Col: 63 Unexpected end tag (tt) in table context caused voodoo mode. +Line: 1 Col: 63 End tag (tt) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 69 Unexpected end tag (pre) in table context caused voodoo mode. +Line: 1 Col: 69 End tag (pre) seen too early. Expected other end tag. +Line: 1 Col: 75 Unexpected end tag (big) in table context caused voodoo mode. +Line: 1 Col: 75 End tag (big) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 83 Unexpected end tag (small) in table context caused voodoo mode. +Line: 1 Col: 83 End tag (small) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 90 Unexpected end tag (font) in table context caused voodoo mode. +Line: 1 Col: 90 End tag (font) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 99 Unexpected end tag (select) in table context caused voodoo mode. +Line: 1 Col: 99 Unexpected end tag (select). Ignored. +Line: 1 Col: 104 Unexpected end tag (h1) in table context caused voodoo mode. +Line: 1 Col: 104 End tag (h1) seen too early. Expected other end tag. +Line: 1 Col: 109 Unexpected end tag (h2) in table context caused voodoo mode. +Line: 1 Col: 109 End tag (h2) seen too early. Expected other end tag. +Line: 1 Col: 114 Unexpected end tag (h3) in table context caused voodoo mode. +Line: 1 Col: 114 End tag (h3) seen too early. Expected other end tag. +Line: 1 Col: 119 Unexpected end tag (h4) in table context caused voodoo mode. +Line: 1 Col: 119 End tag (h4) seen too early. Expected other end tag. +Line: 1 Col: 124 Unexpected end tag (h5) in table context caused voodoo mode. +Line: 1 Col: 124 End tag (h5) seen too early. Expected other end tag. +Line: 1 Col: 129 Unexpected end tag (h6) in table context caused voodoo mode. +Line: 1 Col: 129 End tag (h6) seen too early. Expected other end tag. +Line: 1 Col: 136 Unexpected end tag (body) in the table row phase. Ignored. +Line: 1 Col: 141 Unexpected end tag (br) in table context caused voodoo mode. +Line: 1 Col: 141 Unexpected end tag (br). Treated as br element. +Line: 1 Col: 145 Unexpected end tag (a) in table context caused voodoo mode. +Line: 1 Col: 145 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 151 Unexpected end tag (img) in table context caused voodoo mode. +Line: 1 Col: 151 This element (img) has no end tag. +Line: 1 Col: 159 Unexpected end tag (title) in table context caused voodoo mode. +Line: 1 Col: 159 Unexpected end tag (title). Ignored. +Line: 1 Col: 166 Unexpected end tag (span) in table context caused voodoo mode. +Line: 1 Col: 166 Unexpected end tag (span). Ignored. +Line: 1 Col: 174 Unexpected end tag (style) in table context caused voodoo mode. +Line: 1 Col: 174 Unexpected end tag (style). Ignored. +Line: 1 Col: 183 Unexpected end tag (script) in table context caused voodoo mode. +Line: 1 Col: 183 Unexpected end tag (script). Ignored. +Line: 1 Col: 196 Unexpected end tag (th). Ignored. +Line: 1 Col: 201 Unexpected end tag (td). Ignored. +Line: 1 Col: 206 Unexpected end tag (tr). Ignored. +Line: 1 Col: 214 This element (frame) has no end tag. +Line: 1 Col: 221 This element (area) has no end tag. +Line: 1 Col: 228 Unexpected end tag (link). Ignored. +Line: 1 Col: 236 This element (param) has no end tag. +Line: 1 Col: 241 This element (hr) has no end tag. +Line: 1 Col: 249 This element (input) has no end tag. +Line: 1 Col: 255 Unexpected end tag (col). Ignored. +Line: 1 Col: 262 Unexpected end tag (base). Ignored. +Line: 1 Col: 269 Unexpected end tag (meta). Ignored. +Line: 1 Col: 280 This element (basefont) has no end tag. +Line: 1 Col: 290 This element (bgsound) has no end tag. +Line: 1 Col: 298 This element (embed) has no end tag. +Line: 1 Col: 307 This element (spacer) has no end tag. +Line: 1 Col: 311 Unexpected end tag (p). Ignored. +Line: 1 Col: 316 End tag (dd) seen too early. Expected other end tag. +Line: 1 Col: 321 End tag (dt) seen too early. Expected other end tag. +Line: 1 Col: 331 Unexpected end tag (caption). Ignored. +Line: 1 Col: 342 Unexpected end tag (colgroup). Ignored. +Line: 1 Col: 350 Unexpected end tag (tbody). Ignored. +Line: 1 Col: 358 Unexpected end tag (tfoot). Ignored. +Line: 1 Col: 366 Unexpected end tag (thead). Ignored. +Line: 1 Col: 376 End tag (address) seen too early. Expected other end tag. +Line: 1 Col: 389 End tag (blockquote) seen too early. Expected other end tag. +Line: 1 Col: 398 End tag (center) seen too early. Expected other end tag. +Line: 1 Col: 404 Unexpected end tag (dir). Ignored. +Line: 1 Col: 410 End tag (div) seen too early. Expected other end tag. +Line: 1 Col: 415 End tag (dl) seen too early. Expected other end tag. +Line: 1 Col: 426 End tag (fieldset) seen too early. Expected other end tag. +Line: 1 Col: 436 End tag (listing) seen too early. Expected other end tag. +Line: 1 Col: 443 End tag (menu) seen too early. Expected other end tag. +Line: 1 Col: 448 End tag (ol) seen too early. Expected other end tag. +Line: 1 Col: 453 End tag (ul) seen too early. Expected other end tag. +Line: 1 Col: 458 End tag (li) seen too early. Expected other end tag. +Line: 1 Col: 465 End tag (nobr) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 471 This element (wbr) has no end tag. +Line: 1 Col: 487 End tag (button) seen too early. Expected other end tag. +Line: 1 Col: 497 End tag (marquee) seen too early. Expected other end tag. +Line: 1 Col: 506 End tag (object) seen too early. Expected other end tag. +Line: 1 Col: 524 Unexpected end tag (html). Ignored. +Line: 1 Col: 524 Unexpected end tag (frameset). Ignored. +Line: 1 Col: 531 Unexpected end tag (head). Ignored. +Line: 1 Col: 540 Unexpected end tag (iframe). Ignored. +Line: 1 Col: 548 This element (image) has no end tag. +Line: 1 Col: 558 This element (isindex) has no end tag. +Line: 1 Col: 568 Unexpected end tag (noembed). Ignored. +Line: 1 Col: 579 Unexpected end tag (noframes). Ignored. +Line: 1 Col: 590 Unexpected end tag (noscript). Ignored. +Line: 1 Col: 601 Unexpected end tag (optgroup). Ignored. +Line: 1 Col: 610 Unexpected end tag (option). Ignored. +Line: 1 Col: 622 Unexpected end tag (plaintext). Ignored. +Line: 1 Col: 633 Unexpected end tag (textarea). Ignored. +#document +| +| +| +|
+| +| +| +|

+ +#data + +#errors +Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE. +Line: 1 Col: 10 Expected closing tag. Unexpected end of file. +#document +| +| +| diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests10.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests10.dat new file mode 100644 index 0000000..4f8df86 --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests10.dat @@ -0,0 +1,799 @@ +#data + +#errors +#document +| +| +| +| +| + +#data +a +#errors +29: Bogus comment +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| + +#data + +#errors +35: Stray “svg” start tag. +42: Stray end tag “svg” +#document +| +| +| +| +| +#errors +43: Stray “svg” start tag. +50: Stray end tag “svg” +#document +| +| +| +| +|

+#errors +34: Start tag “svg” seen in “table”. +41: Stray end tag “svg”. +#document +| +| +| +| +| +| + +#data +
foo
+#errors +34: Start tag “svg” seen in “table”. +46: Stray end tag “g”. +53: Stray end tag “svg”. +#document +| +| +| +| +| +| +| "foo" +| + +#data +
foobar
+#errors +34: Start tag “svg” seen in “table”. +46: Stray end tag “g”. +58: Stray end tag “g”. +65: Stray end tag “svg”. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +| + +#data +
foobar
+#errors +41: Start tag “svg” seen in “table”. +53: Stray end tag “g”. +65: Stray end tag “g”. +72: Stray end tag “svg”. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +| +| + +#data +
foobar
+#errors +45: Start tag “svg” seen in “table”. +57: Stray end tag “g”. +69: Stray end tag “g”. +76: Stray end tag “svg”. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +| +| +| + +#data +
foobar
+#errors +#document +| +| +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" + +#data +
foobar

baz

+#errors +#document +| +| +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" +|

+| "baz" + +#data +
foobar

baz

+#errors +#document +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" +|

+| "baz" + +#data +
foobar

baz

quux +#errors +70: HTML start tag “p” in a foreign namespace context. +81: “table” closed but “caption” was still open. +#document +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" +|

+| "baz" +|

+| "quux" + +#data +
foobarbaz

quux +#errors +78: “table” closed but “caption” was still open. +78: Unclosed elements on stack. +#document +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" +| "baz" +|

+| "quux" + +#data +foobar

baz

quux +#errors +44: Start tag “svg” seen in “table”. +56: Stray end tag “g”. +68: Stray end tag “g”. +71: HTML start tag “p” in a foreign namespace context. +71: Start tag “p” seen in “table”. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +|

+| "baz" +| +| +|

+| "quux" + +#data +

quux +#errors +50: Stray “svg” start tag. +54: Stray “g” start tag. +62: Stray end tag “g” +66: Stray “g” start tag. +74: Stray end tag “g” +77: Stray “p” start tag. +88: “table” end tag with “select” open. +#document +| +| +| +| +| +| +| +|
+|

quux +#errors +36: Start tag “select” seen in “table”. +42: Stray “svg” start tag. +46: Stray “g” start tag. +54: Stray end tag “g” +58: Stray “g” start tag. +66: Stray end tag “g” +69: Stray “p” start tag. +80: “table” end tag with “select” open. +#document +| +| +| +| +| +|

+| "quux" + +#data +foobar

baz +#errors +41: Stray “svg” start tag. +68: HTML start tag “p” in a foreign namespace context. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +|

+| "baz" + +#data +foobar

baz +#errors +34: Stray “svg” start tag. +61: HTML start tag “p” in a foreign namespace context. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +|

+| "baz" + +#data +

+#errors +31: Stray “svg” start tag. +35: Stray “g” start tag. +40: Stray end tag “g” +44: Stray “g” start tag. +49: Stray end tag “g” +52: Stray “p” start tag. +58: Stray “span” start tag. +58: End of file seen and there were open elements. +#document +| +| +| +| + +#data +

+#errors +42: Stray “svg” start tag. +46: Stray “g” start tag. +51: Stray end tag “g” +55: Stray “g” start tag. +60: Stray end tag “g” +63: Stray “p” start tag. +69: Stray “span” start tag. +#document +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| xlink:href="foo" +| +| xlink href="foo" + +#data + +#errors +#document +| +| +| +| +| xlink:href="foo" +| xml:lang="en" +| +| +| xlink href="foo" +| xml lang="en" + +#data + +#errors +#document +| +| +| +| +| xlink:href="foo" +| xml:lang="en" +| +| +| xlink href="foo" +| xml lang="en" + +#data +bar +#errors +#document +| +| +| +| +| xlink:href="foo" +| xml:lang="en" +| +| +| xlink href="foo" +| xml lang="en" +| "bar" + +#data + +#errors +#document +| +| +| +| + +#data +

a +#errors +#document +| +| +| +|
+| +| "a" + +#data +
a +#errors +#document +| +| +| +|
+| +| +| "a" + +#data +
+#errors +#document +| +| +| +|
+| +| +| + +#data +
a +#errors +#document +| +| +| +|
+| +| +| +| +| "a" + +#data +

a +#errors +#document +| +| +| +|

+| +| +| +|

+| "a" + +#data +
    a +#errors +40: HTML start tag “ul” in a foreign namespace context. +41: End of file in a foreign namespace context. +#document +| +| +| +| +| +| +|
    +| +|
      +| "a" + +#data +
        a +#errors +35: HTML start tag “ul” in a foreign namespace context. +36: End of file in a foreign namespace context. +#document +| +| +| +| +| +| +| +|
          +| "a" + +#data +

          +#errors +#document +| +| +| +| +|

          +| +| +|

          + +#data +

          +#errors +#document +| +| +| +| +|

          +| +| +|

          + +#data +

          +#errors +#document +| +| +| +|

          +| +| +| +|

          +|

          + +#data +
          +#errors +#document +| +| +| +| +| +|
          +| +|
          +| +| + +#data +
          +#errors +#document +| +| +| +| +| +| +| +|
          +|
          +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data +

+#errors +#document +| +| +| +| +|
+| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| + +#data +
+#errors +#document +| +| +| +| +| +| +| +|
+| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests11.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests11.dat new file mode 100644 index 0000000..638cde4 --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests11.dat @@ -0,0 +1,482 @@ +#data + +#errors +#document +| +| +| +| +| +| attributeName="" +| attributeType="" +| baseFrequency="" +| baseProfile="" +| calcMode="" +| clipPathUnits="" +| contentScriptType="" +| contentStyleType="" +| diffuseConstant="" +| edgeMode="" +| externalResourcesRequired="" +| filterRes="" +| filterUnits="" +| glyphRef="" +| gradientTransform="" +| gradientUnits="" +| kernelMatrix="" +| kernelUnitLength="" +| keyPoints="" +| keySplines="" +| keyTimes="" +| lengthAdjust="" +| limitingConeAngle="" +| markerHeight="" +| markerUnits="" +| markerWidth="" +| maskContentUnits="" +| maskUnits="" +| numOctaves="" +| pathLength="" +| patternContentUnits="" +| patternTransform="" +| patternUnits="" +| pointsAtX="" +| pointsAtY="" +| pointsAtZ="" +| preserveAlpha="" +| preserveAspectRatio="" +| primitiveUnits="" +| refX="" +| refY="" +| repeatCount="" +| repeatDur="" +| requiredExtensions="" +| requiredFeatures="" +| specularConstant="" +| specularExponent="" +| spreadMethod="" +| startOffset="" +| stdDeviation="" +| stitchTiles="" +| surfaceScale="" +| systemLanguage="" +| tableValues="" +| targetX="" +| targetY="" +| textLength="" +| viewBox="" +| viewTarget="" +| xChannelSelector="" +| yChannelSelector="" +| zoomAndPan="" + +#data + +#errors +#document +| +| +| +| +| +| attributeName="" +| attributeType="" +| baseFrequency="" +| baseProfile="" +| calcMode="" +| clipPathUnits="" +| contentScriptType="" +| contentStyleType="" +| diffuseConstant="" +| edgeMode="" +| externalResourcesRequired="" +| filterRes="" +| filterUnits="" +| glyphRef="" +| gradientTransform="" +| gradientUnits="" +| kernelMatrix="" +| kernelUnitLength="" +| keyPoints="" +| keySplines="" +| keyTimes="" +| lengthAdjust="" +| limitingConeAngle="" +| markerHeight="" +| markerUnits="" +| markerWidth="" +| maskContentUnits="" +| maskUnits="" +| numOctaves="" +| pathLength="" +| patternContentUnits="" +| patternTransform="" +| patternUnits="" +| pointsAtX="" +| pointsAtY="" +| pointsAtZ="" +| preserveAlpha="" +| preserveAspectRatio="" +| primitiveUnits="" +| refX="" +| refY="" +| repeatCount="" +| repeatDur="" +| requiredExtensions="" +| requiredFeatures="" +| specularConstant="" +| specularExponent="" +| spreadMethod="" +| startOffset="" +| stdDeviation="" +| stitchTiles="" +| surfaceScale="" +| systemLanguage="" +| tableValues="" +| targetX="" +| targetY="" +| textLength="" +| viewBox="" +| viewTarget="" +| xChannelSelector="" +| yChannelSelector="" +| zoomAndPan="" + +#data + +#errors +#document +| +| +| +| +| +| attributeName="" +| attributeType="" +| baseFrequency="" +| baseProfile="" +| calcMode="" +| clipPathUnits="" +| contentScriptType="" +| contentStyleType="" +| diffuseConstant="" +| edgeMode="" +| externalResourcesRequired="" +| filterRes="" +| filterUnits="" +| glyphRef="" +| gradientTransform="" +| gradientUnits="" +| kernelMatrix="" +| kernelUnitLength="" +| keyPoints="" +| keySplines="" +| keyTimes="" +| lengthAdjust="" +| limitingConeAngle="" +| markerHeight="" +| markerUnits="" +| markerWidth="" +| maskContentUnits="" +| maskUnits="" +| numOctaves="" +| pathLength="" +| patternContentUnits="" +| patternTransform="" +| patternUnits="" +| pointsAtX="" +| pointsAtY="" +| pointsAtZ="" +| preserveAlpha="" +| preserveAspectRatio="" +| primitiveUnits="" +| refX="" +| refY="" +| repeatCount="" +| repeatDur="" +| requiredExtensions="" +| requiredFeatures="" +| specularConstant="" +| specularExponent="" +| spreadMethod="" +| startOffset="" +| stdDeviation="" +| stitchTiles="" +| surfaceScale="" +| systemLanguage="" +| tableValues="" +| targetX="" +| targetY="" +| textLength="" +| viewBox="" +| viewTarget="" +| xChannelSelector="" +| yChannelSelector="" +| zoomAndPan="" + +#data + +#errors +#document +| +| +| +| +| +| attributename="" +| attributetype="" +| basefrequency="" +| baseprofile="" +| calcmode="" +| clippathunits="" +| contentscripttype="" +| contentstyletype="" +| diffuseconstant="" +| edgemode="" +| externalresourcesrequired="" +| filterres="" +| filterunits="" +| glyphref="" +| gradienttransform="" +| gradientunits="" +| kernelmatrix="" +| kernelunitlength="" +| keypoints="" +| keysplines="" +| keytimes="" +| lengthadjust="" +| limitingconeangle="" +| markerheight="" +| markerunits="" +| markerwidth="" +| maskcontentunits="" +| maskunits="" +| numoctaves="" +| pathlength="" +| patterncontentunits="" +| patterntransform="" +| patternunits="" +| pointsatx="" +| pointsaty="" +| pointsatz="" +| preservealpha="" +| preserveaspectratio="" +| primitiveunits="" +| refx="" +| refy="" +| repeatcount="" +| repeatdur="" +| requiredextensions="" +| requiredfeatures="" +| specularconstant="" +| specularexponent="" +| spreadmethod="" +| startoffset="" +| stddeviation="" +| stitchtiles="" +| surfacescale="" +| systemlanguage="" +| tablevalues="" +| targetx="" +| targety="" +| textlength="" +| viewbox="" +| viewtarget="" +| xchannelselector="" +| ychannelselector="" +| zoomandpan="" + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests12.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests12.dat new file mode 100644 index 0000000..63107d2 --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests12.dat @@ -0,0 +1,62 @@ +#data +

foobazeggs

spam

quuxbar +#errors +#document +| +| +| +| +|

+| "foo" +| +| +| +| "baz" +| +| +| +| +| "eggs" +| +| +|

+| "spam" +| +| +| +|
+| +| +| "quux" +| "bar" + +#data +foobazeggs

spam
quuxbar +#errors +#document +| +| +| +| +| "foo" +| +| +| +| "baz" +| +| +| +| +| "eggs" +| +| +|

+| "spam" +| +| +| +|
+| +| +| "quux" +| "bar" diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests14.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests14.dat new file mode 100644 index 0000000..b8713f8 --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests14.dat @@ -0,0 +1,74 @@ +#data + +#errors +#document +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +15: Unexpected start tag html +#document +| +| +| abc:def="gh" +| +| +| + +#data + +#errors +15: Unexpected start tag html +#document +| +| +| xml:lang="bar" +| +| + +#data + +#errors +#document +| +| +| 123="456" +| +| + +#data + +#errors +#document +| +| +| 123="456" +| 789="012" +| +| + +#data + +#errors +#document +| +| +| +| +| 789="012" diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests15.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests15.dat new file mode 100644 index 0000000..6ce1c0d --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests15.dat @@ -0,0 +1,208 @@ +#data +

X +#errors +Line: 1 Col: 31 Unexpected end tag (p). Ignored. +Line: 1 Col: 36 Expected closing tag. Unexpected end of file. +#document +| +| +| +| +|

+| +| +| +| +| +| +| " " +|

+| "X" + +#data +

+

X +#errors +Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE. +Line: 1 Col: 16 Unexpected end tag (p). Ignored. +Line: 2 Col: 4 Expected closing tag. Unexpected end of file. +#document +| +| +| +|

+| +| +| +| +| +| +| " +" +|

+| "X" + +#data + +#errors +Line: 1 Col: 22 Unexpected end tag (html) after the (implied) root element. +#document +| +| +| +| +| " " + +#data + +#errors +Line: 1 Col: 22 Unexpected end tag (body) after the (implied) root element. +#document +| +| +| +| +| + +#data + +#errors +Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end tag (html) after the (implied) root element. +#document +| +| +| +| + +#data +X +#errors +Line: 1 Col: 22 Unexpected end tag (body) after the (implied) root element. +#document +| +| +| +| +| +| "X" + +#data +<!doctype html><table> X<meta></table> +#errors +Line: 1 Col: 24 Unexpected non-space characters in table context caused voodoo mode. +Line: 1 Col: 30 Unexpected start tag (meta) in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " X" +| <meta> +| <table> + +#data +<!doctype html><table> x</table> +#errors +Line: 1 Col: 24 Unexpected non-space characters in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " x" +| <table> + +#data +<!doctype html><table> x </table> +#errors +Line: 1 Col: 25 Unexpected non-space characters in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " x " +| <table> + +#data +<!doctype html><table><tr> x</table> +#errors +Line: 1 Col: 28 Unexpected non-space characters in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " x" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table>X<style> <tr>x </style> </table> +#errors +Line: 1 Col: 23 Unexpected non-space characters in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "X" +| <table> +| <style> +| " <tr>x " +| " " + +#data +<!doctype html><div><table><a>foo</a> <tr><td>bar</td> </tr></table></div> +#errors +Line: 1 Col: 30 Unexpected start tag (a) in table context caused voodoo mode. +Line: 1 Col: 37 Unexpected end tag (a) in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <div> +| <a> +| "foo" +| <table> +| " " +| <tbody> +| <tr> +| <td> +| "bar" +| " " + +#data +<frame></frame></frame><frameset><frame><frameset><frame></frameset><noframes></frameset><noframes> +#errors +6: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”. +13: Stray start tag “frame”. +21: Stray end tag “frame”. +29: Stray end tag “frame”. +39: “frameset” start tag after “body” already open. +105: End of file seen inside an [R]CDATA element. +105: End of file seen and there were open elements. +XXX: These errors are wrong, please fix me! +#document +| <html> +| <head> +| <frameset> +| <frame> +| <frameset> +| <frame> +| <noframes> +| "</frameset><noframes>" + +#data +<!DOCTYPE html><object></html> +#errors +1: Expected closing tag. Unexpected end of file +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <object> diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests16.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests16.dat new file mode 100644 index 0000000..c8ef66f --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests16.dat @@ -0,0 +1,2299 @@ +#data +<!doctype html><script> +#errors +Line: 1 Col: 23 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| <body> + +#data +<!doctype html><script>a +#errors +Line: 1 Col: 24 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "a" +| <body> + +#data +<!doctype html><script>< +#errors +Line: 1 Col: 24 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<" +| <body> + +#data +<!doctype html><script></ +#errors +Line: 1 Col: 25 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</" +| <body> + +#data +<!doctype html><script></S +#errors +Line: 1 Col: 26 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</S" +| <body> + +#data +<!doctype html><script></SC +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SC" +| <body> + +#data +<!doctype html><script></SCR +#errors +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SCR" +| <body> + +#data +<!doctype html><script></SCRI +#errors +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SCRI" +| <body> + +#data +<!doctype html><script></SCRIP +#errors +Line: 1 Col: 30 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SCRIP" +| <body> + +#data +<!doctype html><script></SCRIPT +#errors +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SCRIPT" +| <body> + +#data +<!doctype html><script></SCRIPT +#errors +Line: 1 Col: 32 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| <body> + +#data +<!doctype html><script></s +#errors +Line: 1 Col: 26 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</s" +| <body> + +#data +<!doctype html><script></sc +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</sc" +| <body> + +#data +<!doctype html><script></scr +#errors +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</scr" +| <body> + +#data +<!doctype html><script></scri +#errors +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</scri" +| <body> + +#data +<!doctype html><script></scrip +#errors +Line: 1 Col: 30 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</scrip" +| <body> + +#data +<!doctype html><script></script +#errors +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</script" +| <body> + +#data +<!doctype html><script></script +#errors +Line: 1 Col: 32 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| <body> + +#data +<!doctype html><script><! +#errors +Line: 1 Col: 25 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!" +| <body> + +#data +<!doctype html><script><!a +#errors +Line: 1 Col: 26 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!a" +| <body> + +#data +<!doctype html><script><!- +#errors +Line: 1 Col: 26 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!-" +| <body> + +#data +<!doctype html><script><!-a +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!-a" +| <body> + +#data +<!doctype html><script><!-- +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--" +| <body> + +#data +<!doctype html><script><!--a +#errors +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--a" +| <body> + +#data +<!doctype html><script><!--< +#errors +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<" +| <body> + +#data +<!doctype html><script><!--<a +#errors +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<a" +| <body> + +#data +<!doctype html><script><!--</ +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--</" +| <body> + +#data +<!doctype html><script><!--</script +#errors +Line: 1 Col: 35 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--</script" +| <body> + +#data +<!doctype html><script><!--</script +#errors +Line: 1 Col: 36 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--" +| <body> + +#data +<!doctype html><script><!--<s +#errors +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<s" +| <body> + +#data +<!doctype html><script><!--<script +#errors +Line: 1 Col: 34 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script" +| <body> + +#data +<!doctype html><script><!--<script +#errors +Line: 1 Col: 35 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script " +| <body> + +#data +<!doctype html><script><!--<script < +#errors +Line: 1 Col: 36 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script <" +| <body> + +#data +<!doctype html><script><!--<script <a +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script <a" +| <body> + +#data +<!doctype html><script><!--<script </ +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </" +| <body> + +#data +<!doctype html><script><!--<script </s +#errors +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </s" +| <body> + +#data +<!doctype html><script><!--<script </script +#errors +Line: 1 Col: 43 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script" +| <body> + +#data +<!doctype html><script><!--<script </scripta +#errors +Line: 1 Col: 44 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </scripta" +| <body> + +#data +<!doctype html><script><!--<script </script +#errors +Line: 1 Col: 44 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<!doctype html><script><!--<script </script> +#errors +Line: 1 Col: 44 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script>" +| <body> + +#data +<!doctype html><script><!--<script </script/ +#errors +Line: 1 Col: 44 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script/" +| <body> + +#data +<!doctype html><script><!--<script </script < +#errors +Line: 1 Col: 45 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script <" +| <body> + +#data +<!doctype html><script><!--<script </script <a +#errors +Line: 1 Col: 46 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script <a" +| <body> + +#data +<!doctype html><script><!--<script </script </ +#errors +Line: 1 Col: 46 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script </" +| <body> + +#data +<!doctype html><script><!--<script </script </script +#errors +Line: 1 Col: 52 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script </script" +| <body> + +#data +<!doctype html><script><!--<script </script </script +#errors +Line: 1 Col: 53 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<!doctype html><script><!--<script </script </script/ +#errors +Line: 1 Col: 53 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<!doctype html><script><!--<script </script </script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<!doctype html><script><!--<script - +#errors +Line: 1 Col: 36 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -" +| <body> + +#data +<!doctype html><script><!--<script -a +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -a" +| <body> + +#data +<!doctype html><script><!--<script -< +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -<" +| <body> + +#data +<!doctype html><script><!--<script -- +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --" +| <body> + +#data +<!doctype html><script><!--<script --a +#errors +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --a" +| <body> + +#data +<!doctype html><script><!--<script --< +#errors +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --<" +| <body> + +#data +<!doctype html><script><!--<script --> +#errors +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<!doctype html><script><!--<script -->< +#errors +Line: 1 Col: 39 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --><" +| <body> + +#data +<!doctype html><script><!--<script --></ +#errors +Line: 1 Col: 40 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --></" +| <body> + +#data +<!doctype html><script><!--<script --></script +#errors +Line: 1 Col: 46 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --></script" +| <body> + +#data +<!doctype html><script><!--<script --></script +#errors +Line: 1 Col: 47 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<!doctype html><script><!--<script --></script/ +#errors +Line: 1 Col: 47 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<!doctype html><script><!--<script --></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<!doctype html><script><!--<script><\/script>--></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script><\/script>-->" +| <body> + +#data +<!doctype html><script><!--<script></scr'+'ipt>--></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></scr'+'ipt>-->" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>--><!--</script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>--><!--" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>-- ></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>-- >" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>- -></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>- ->" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>- - ></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>- - >" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>-></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>->" +| <body> + +#data +<!doctype html><script><!--<script>--!></script>X +#errors +Line: 1 Col: 49 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script>--!></script>X" +| <body> + +#data +<!doctype html><script><!--<scr'+'ipt></script>--></script> +#errors +Line: 1 Col: 59 Unexpected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<scr'+'ipt>" +| <body> +| "-->" + +#data +<!doctype html><script><!--<script></scr'+'ipt></script>X +#errors +Line: 1 Col: 57 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></scr'+'ipt></script>X" +| <body> + +#data +<!doctype html><style><!--<style></style>--></style> +#errors +Line: 1 Col: 52 Unexpected end tag (style). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--<style>" +| <body> +| "-->" + +#data +<!doctype html><style><!--</style>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--" +| <body> +| "X" + +#data +<!doctype html><style><!--...</style>...--></style> +#errors +Line: 1 Col: 51 Unexpected end tag (style). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--..." +| <body> +| "...-->" + +#data +<!doctype html><style><!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style></style>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style>" +| <body> +| "X" + +#data +<!doctype html><style><!--...<style><!--...--!></style>--></style> +#errors +Line: 1 Col: 66 Unexpected end tag (style). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--...<style><!--...--!>" +| <body> +| "-->" + +#data +<!doctype html><style><!--...</style><!-- --><style>@import ...</style> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--..." +| <!-- --> +| <style> +| "@import ..." +| <body> + +#data +<!doctype html><style>...<style><!--...</style><!-- --></style> +#errors +Line: 1 Col: 63 Unexpected end tag (style). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "...<style><!--..." +| <!-- --> +| <body> + +#data +<!doctype html><style>...<!--[if IE]><style>...</style>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "...<!--[if IE]><style>..." +| <body> +| "X" + +#data +<!doctype html><title><!--<title>--> +#errors +Line: 1 Col: 52 Unexpected end tag (title). +#document +| +| +| +| +| "<!--<title>" +| <body> +| "-->" + +#data +<!doctype html><title></title> +#errors +#document +| +| +| +| +| "" +| + +#data +foo/title><link></head><body>X +#errors +Line: 1 Col: 52 Unexpected end of file. Expected end tag (title). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <title> +| "foo/title><link></head><body>X" +| <body> + +#data +<!doctype html><noscript><!--<noscript></noscript>--></noscript> +#errors +Line: 1 Col: 64 Unexpected end tag (noscript). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noscript> +| "<!--<noscript>" +| <body> +| "-->" + +#data +<!doctype html><noscript><!--</noscript>X<noscript>--></noscript> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noscript> +| "<!--" +| <body> +| "X" +| <noscript> +| "-->" + +#data +<!doctype html><noscript><iframe></noscript>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noscript> +| "<iframe>" +| <body> +| "X" + +#data +<!doctype html><noframes><!--<noframes></noframes>--></noframes> +#errors +Line: 1 Col: 64 Unexpected end tag (noframes). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noframes> +| "<!--<noframes>" +| <body> +| "-->" + +#data +<!doctype html><noframes><body><script><!--...</script></body></noframes></html> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noframes> +| "<body><script><!--...</script></body>" +| <body> + +#data +<!doctype html><textarea><!--<textarea></textarea>--></textarea> +#errors +Line: 1 Col: 64 Unexpected end tag (textarea). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> +| "<!--<textarea>" +| "-->" + +#data +<!doctype html><textarea></textarea></textarea> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> +| "</textarea>" + +#data +<!doctype html><textarea><</textarea> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> +| "<" + +#data +<!doctype html><textarea>a<b</textarea> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> +| "a<b" + +#data +<!doctype html><iframe><!--<iframe></iframe>--></iframe> +#errors +Line: 1 Col: 56 Unexpected end tag (iframe). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <iframe> +| "<!--<iframe>" +| "-->" + +#data +<!doctype html><iframe>...<!--X->...<!--/X->...</iframe> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <iframe> +| "...<!--X->...<!--/X->..." + +#data +<!doctype html><xmp><!--<xmp></xmp>--></xmp> +#errors +Line: 1 Col: 44 Unexpected end tag (xmp). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <xmp> +| "<!--<xmp>" +| "-->" + +#data +<!doctype html><noembed><!--<noembed></noembed>--></noembed> +#errors +Line: 1 Col: 60 Unexpected end tag (noembed). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <noembed> +| "<!--<noembed>" +| "-->" + +#data +<script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 8 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| <body> + +#data +<script>a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 9 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "a" +| <body> + +#data +<script>< +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 9 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<" +| <body> + +#data +<script></ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 10 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</" +| <body> + +#data +<script></S +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</S" +| <body> + +#data +<script></SC +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 12 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SC" +| <body> + +#data +<script></SCR +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SCR" +| <body> + +#data +<script></SCRI +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SCRI" +| <body> + +#data +<script></SCRIP +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 15 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SCRIP" +| <body> + +#data +<script></SCRIPT +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 16 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SCRIPT" +| <body> + +#data +<script></SCRIPT +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 17 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| <body> + +#data +<script></s +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</s" +| <body> + +#data +<script></sc +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 12 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</sc" +| <body> + +#data +<script></scr +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</scr" +| <body> + +#data +<script></scri +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</scri" +| <body> + +#data +<script></scrip +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 15 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</scrip" +| <body> + +#data +<script></script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 16 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</script" +| <body> + +#data +<script></script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 17 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| <body> + +#data +<script><! +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 10 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!" +| <body> + +#data +<script><!a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!a" +| <body> + +#data +<script><!- +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!-" +| <body> + +#data +<script><!-a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 12 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!-a" +| <body> + +#data +<script><!-- +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 12 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--" +| <body> + +#data +<script><!--a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--a" +| <body> + +#data +<script><!--< +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<" +| <body> + +#data +<script><!--<a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<a" +| <body> + +#data +<script><!--</ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--</" +| <body> + +#data +<script><!--</script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 20 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--</script" +| <body> + +#data +<script><!--</script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 21 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--" +| <body> + +#data +<script><!--<s +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<s" +| <body> + +#data +<script><!--<script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 19 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script" +| <body> + +#data +<script><!--<script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 20 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script " +| <body> + +#data +<script><!--<script < +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 21 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script <" +| <body> + +#data +<script><!--<script <a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script <a" +| <body> + +#data +<script><!--<script </ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </" +| <body> + +#data +<script><!--<script </s +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 23 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </s" +| <body> + +#data +<script><!--<script </script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script" +| <body> + +#data +<script><!--<script </scripta +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </scripta" +| <body> + +#data +<script><!--<script </script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<script><!--<script </script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script>" +| <body> + +#data +<script><!--<script </script/ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script/" +| <body> + +#data +<script><!--<script </script < +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 30 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script <" +| <body> + +#data +<script><!--<script </script <a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script <a" +| <body> + +#data +<script><!--<script </script </ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script </" +| <body> + +#data +<script><!--<script </script </script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script </script" +| <body> + +#data +<script><!--<script </script </script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<script><!--<script </script </script/ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<script><!--<script </script </script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<script><!--<script - +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 21 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -" +| <body> + +#data +<script><!--<script -a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -a" +| <body> + +#data +<script><!--<script -- +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --" +| <body> + +#data +<script><!--<script --a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 23 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --a" +| <body> + +#data +<script><!--<script --> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 23 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<script><!--<script -->< +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 24 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --><" +| <body> + +#data +<script><!--<script --></ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 25 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --></" +| <body> + +#data +<script><!--<script --></script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --></script" +| <body> + +#data +<script><!--<script --></script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 32 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<script><!--<script --></script/ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 32 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<script><!--<script --></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<script><!--<script><\/script>--></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script><\/script>-->" +| <body> + +#data +<script><!--<script></scr'+'ipt>--></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></scr'+'ipt>-->" +| <body> + +#data +<script><!--<script></script><script></script></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>" +| <body> + +#data +<script><!--<script></script><script></script>--><!--</script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>--><!--" +| <body> + +#data +<script><!--<script></script><script></script>-- ></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>-- >" +| <body> + +#data +<script><!--<script></script><script></script>- -></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>- ->" +| <body> + +#data +<script><!--<script></script><script></script>- - ></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>- - >" +| <body> + +#data +<script><!--<script></script><script></script>-></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>->" +| <body> + +#data +<script><!--<script>--!></script>X +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 34 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script>--!></script>X" +| <body> + +#data +<script><!--<scr'+'ipt></script>--></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 44 Unexpected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<scr'+'ipt>" +| <body> +| "-->" + +#data +<script><!--<script></scr'+'ipt></script>X +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 42 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script></scr'+'ipt></script>X" +| <body> + +#data +<style><!--<style></style>--></style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 37 Unexpected end tag (style). +#document +| <html> +| <head> +| <style> +| "<!--<style>" +| <body> +| "-->" + +#data +<style><!--</style>X +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| <html> +| <head> +| <style> +| "<!--" +| <body> +| "X" + +#data +<style><!--...</style>...--></style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 36 Unexpected end tag (style). +#document +| <html> +| <head> +| <style> +| "<!--..." +| <body> +| "...-->" + +#data +<style><!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style></style>X +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| <html> +| <head> +| <style> +| "<!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style>" +| <body> +| "X" + +#data +<style><!--...<style><!--...--!></style>--></style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 51 Unexpected end tag (style). +#document +| <html> +| <head> +| <style> +| "<!--...<style><!--...--!>" +| <body> +| "-->" + +#data +<style><!--...</style><!-- --><style>@import ...</style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| <html> +| <head> +| <style> +| "<!--..." +| <!-- --> +| <style> +| "@import ..." +| <body> + +#data +<style>...<style><!--...</style><!-- --></style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 48 Unexpected end tag (style). +#document +| <html> +| <head> +| <style> +| "...<style><!--..." +| <!-- --> +| <body> + +#data +<style>...<!--[if IE]><style>...</style>X +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| <html> +| <head> +| <style> +| "...<!--[if IE]><style>..." +| <body> +| "X" + +#data +<title><!--<title>--> +#errors +Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE. +Line: 1 Col: 37 Unexpected end tag (title). +#document +| +| +| +| "<!--<title>" +| <body> +| "-->" + +#data +<title></title> +#errors +Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE. +#document +| +| +| +| "" +| + +#data +foo/title><link></head><body>X +#errors +Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE. +Line: 1 Col: 37 Unexpected end of file. Expected end tag (title). +#document +| <html> +| <head> +| <title> +| "foo/title><link></head><body>X" +| <body> + +#data +<noscript><!--<noscript></noscript>--></noscript> +#errors +Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE. +Line: 1 Col: 49 Unexpected end tag (noscript). +#document +| <html> +| <head> +| <noscript> +| "<!--<noscript>" +| <body> +| "-->" + +#data +<noscript><!--</noscript>X<noscript>--></noscript> +#errors +Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE. +#document +| <html> +| <head> +| <noscript> +| "<!--" +| <body> +| "X" +| <noscript> +| "-->" + +#data +<noscript><iframe></noscript>X +#errors +Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE. +#document +| <html> +| <head> +| <noscript> +| "<iframe>" +| <body> +| "X" + +#data +<noframes><!--<noframes></noframes>--></noframes> +#errors +Line: 1 Col: 10 Unexpected start tag (noframes). Expected DOCTYPE. +Line: 1 Col: 49 Unexpected end tag (noframes). +#document +| <html> +| <head> +| <noframes> +| "<!--<noframes>" +| <body> +| "-->" + +#data +<noframes><body><script><!--...</script></body></noframes></html> +#errors +Line: 1 Col: 10 Unexpected start tag (noframes). Expected DOCTYPE. +#document +| <html> +| <head> +| <noframes> +| "<body><script><!--...</script></body>" +| <body> + +#data +<textarea><!--<textarea></textarea>--></textarea> +#errors +Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE. +Line: 1 Col: 49 Unexpected end tag (textarea). +#document +| <html> +| <head> +| <body> +| <textarea> +| "<!--<textarea>" +| "-->" + +#data +<textarea></textarea></textarea> +#errors +Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| <textarea> +| "</textarea>" + +#data +<iframe><!--<iframe></iframe>--></iframe> +#errors +Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE. +Line: 1 Col: 41 Unexpected end tag (iframe). +#document +| <html> +| <head> +| <body> +| <iframe> +| "<!--<iframe>" +| "-->" + +#data +<iframe>...<!--X->...<!--/X->...</iframe> +#errors +Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| <iframe> +| "...<!--X->...<!--/X->..." + +#data +<xmp><!--<xmp></xmp>--></xmp> +#errors +Line: 1 Col: 5 Unexpected start tag (xmp). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end tag (xmp). +#document +| <html> +| <head> +| <body> +| <xmp> +| "<!--<xmp>" +| "-->" + +#data +<noembed><!--<noembed></noembed>--></noembed> +#errors +Line: 1 Col: 9 Unexpected start tag (noembed). Expected DOCTYPE. +Line: 1 Col: 45 Unexpected end tag (noembed). +#document +| <html> +| <head> +| <body> +| <noembed> +| "<!--<noembed>" +| "-->" + +#data +<!doctype html><table> + +#errors +Line 2 Col 0 Unexpected end of file. Expected table content. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| " +" + +#data +<!doctype html><table><td><span><font></span><span> +#errors +Line 1 Col 26 Unexpected table cell start tag (td) in the table body phase. +Line 1 Col 45 Unexpected end tag (span). +Line 1 Col 51 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <span> +| <font> +| <font> +| <span> + +#data +<!doctype html><form><table></form><form></table></form> +#errors +35: Stray end tag “form”. +41: Start tag “form” seen in “table”. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| <table> +| <form> diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests17.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests17.dat new file mode 100644 index 0000000..7b555f8 --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests17.dat @@ -0,0 +1,153 @@ +#data +<!doctype html><table><tbody><select><tr> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table><tr><select><td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <table> +| <tbody> +| <tr> +| <td> + +#data +<!doctype html><table><tr><td><select><td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <select> +| <td> + +#data +<!doctype html><table><tr><th><select><td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <th> +| <select> +| <td> + +#data +<!doctype html><table><caption><select><tr> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <caption> +| <select> +| <tbody> +| <tr> + +#data +<!doctype html><select><tr> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><th> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><tbody> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><thead> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><tfoot> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><caption> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><table><tr></table>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| "a" diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests18.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests18.dat new file mode 100644 index 0000000..680e1f0 --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests18.dat @@ -0,0 +1,269 @@ +#data +<!doctype html><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" + +#data +<!doctype html><table><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" +| <table> + +#data +<!doctype html><table><tbody><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" +| <table> +| <tbody> + +#data +<!doctype html><table><tbody><tr><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table><tbody><tr><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table><td><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <plaintext> +| "</plaintext>" + +#data +<!doctype html><table><caption><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <caption> +| <plaintext> +| "</plaintext>" + +#data +<!doctype html><table><tr><style></script></style>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "abc" +| <table> +| <tbody> +| <tr> +| <style> +| "</script>" + +#data +<!doctype html><table><tr><script></style></script>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "abc" +| <table> +| <tbody> +| <tr> +| <script> +| "</style>" + +#data +<!doctype html><table><caption><style></script></style>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <caption> +| <style> +| "</script>" +| "abc" + +#data +<!doctype html><table><td><style></script></style>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <style> +| "</script>" +| "abc" + +#data +<!doctype html><select><script></style></script>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <script> +| "</style>" +| "abc" + +#data +<!doctype html><table><select><script></style></script>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <script> +| "</style>" +| "abc" +| <table> + +#data +<!doctype html><table><tr><select><script></style></script>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <script> +| "</style>" +| "abc" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><frameset></frameset><noframes>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <noframes> +| "abc" + +#data +<!doctype html><frameset></frameset><noframes>abc</noframes><!--abc--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <noframes> +| "abc" +| <!-- abc --> + +#data +<!doctype html><frameset></frameset></html><noframes>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <noframes> +| "abc" + +#data +<!doctype html><frameset></frameset></html><noframes>abc</noframes><!--abc--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <noframes> +| "abc" +| <!-- abc --> + +#data +<!doctype html><table><tr></tbody><tfoot> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <tfoot> + +#data +<!doctype html><table><td><svg></svg>abc<td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <svg svg> +| "abc" +| <td> diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests19.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests19.dat new file mode 100644 index 0000000..0d62f5a --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests19.dat @@ -0,0 +1,1237 @@ +#data +<!doctype html><math><mn DefinitionUrl="foo"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <math math> +| <math mn> +| definitionURL="foo" + +#data +<!doctype html><html></p><!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <!-- foo --> +| <head> +| <body> + +#data +<!doctype html><head></head></p><!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <!-- foo --> +| <body> + +#data +<!doctype html><body><p><pre> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <pre> + +#data +<!doctype html><body><p><listing> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <listing> + +#data +<!doctype html><p><plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <plaintext> + +#data +<!doctype html><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <h1> + +#data +<!doctype html><form><isindex> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> + +#data +<!doctype html><isindex action="POST"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| action="POST" +| <hr> +| <label> +| "This is a searchable index. Enter search keywords: " +| <input> +| name="isindex" +| <hr> + +#data +<!doctype html><isindex prompt="this is isindex"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| <hr> +| <label> +| "this is isindex" +| <input> +| name="isindex" +| <hr> + +#data +<!doctype html><isindex type="hidden"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| <hr> +| <label> +| "This is a searchable index. Enter search keywords: " +| <input> +| name="isindex" +| type="hidden" +| <hr> + +#data +<!doctype html><isindex name="foo"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| <hr> +| <label> +| "This is a searchable index. Enter search keywords: " +| <input> +| name="isindex" +| <hr> + +#data +<!doctype html><ruby><p><rp> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <p> +| <rp> + +#data +<!doctype html><ruby><div><span><rp> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <div> +| <span> +| <rp> + +#data +<!doctype html><ruby><div><p><rp> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <div> +| <p> +| <rp> + +#data +<!doctype html><ruby><p><rt> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <p> +| <rt> + +#data +<!doctype html><ruby><div><span><rt> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <div> +| <span> +| <rt> + +#data +<!doctype html><ruby><div><p><rt> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <div> +| <p> +| <rt> + +#data +<!doctype html><math/><foo> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <math math> +| <foo> + +#data +<!doctype html><svg/><foo> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <svg svg> +| <foo> + +#data +<!doctype html><div></body><!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <div> +| <!-- foo --> + +#data +<!doctype html><h1><div><h3><span></h1>foo +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <h1> +| <div> +| <h3> +| <span> +| "foo" + +#data +<!doctype html><p></h3>foo +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| "foo" + +#data +<!doctype html><h3><li>abc</h2>foo +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <h3> +| <li> +| "abc" +| "foo" + +#data +<!doctype html><table>abc<!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "abc" +| <table> +| <!-- foo --> + +#data +<!doctype html><table> <!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| " " +| <!-- foo --> + +#data +<!doctype html><table> b <!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " b " +| <table> +| <!-- foo --> + +#data +<!doctype html><select><option><option> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <option> +| <option> + +#data +<!doctype html><select><option></optgroup> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <option> + +#data +<!doctype html><select><option></optgroup> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <option> + +#data +<!doctype html><p><math><mi><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mi> +| <p> +| <h1> + +#data +<!doctype html><p><math><mo><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mo> +| <p> +| <h1> + +#data +<!doctype html><p><math><mn><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mn> +| <p> +| <h1> + +#data +<!doctype html><p><math><ms><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math ms> +| <p> +| <h1> + +#data +<!doctype html><p><math><mtext><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mtext> +| <p> +| <h1> + +#data +<!doctype html><frameset></noframes> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!doctype html><html c=d><body></html><html a=b> +#errors +#document +| <!DOCTYPE html> +| <html> +| a="b" +| c="d" +| <head> +| <body> + +#data +<!doctype html><html c=d><frameset></frameset></html><html a=b> +#errors +#document +| <!DOCTYPE html> +| <html> +| a="b" +| c="d" +| <head> +| <frameset> + +#data +<!doctype html><html><frameset></frameset></html><!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <!-- foo --> + +#data +<!doctype html><html><frameset></frameset></html> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| " " + +#data +<!doctype html><html><frameset></frameset></html>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!doctype html><html><frameset></frameset></html><p> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!doctype html><html><frameset></frameset></html></p> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<html><frameset></frameset></html><!doctype html> +#errors +#document +| <html> +| <head> +| <frameset> + +#data +<!doctype html><body><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> + +#data +<!doctype html><p><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><p>a<frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| "a" + +#data +<!doctype html><p> <frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><pre><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <pre> + +#data +<!doctype html><listing><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <listing> + +#data +<!doctype html><li><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <li> + +#data +<!doctype html><dd><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <dd> + +#data +<!doctype html><dt><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <dt> + +#data +<!doctype html><button><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <button> + +#data +<!doctype html><applet><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <applet> + +#data +<!doctype html><marquee><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <marquee> + +#data +<!doctype html><object><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <object> + +#data +<!doctype html><table><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> + +#data +<!doctype html><area><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <area> + +#data +<!doctype html><basefont><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <basefont> +| <frameset> + +#data +<!doctype html><bgsound><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <bgsound> +| <frameset> + +#data +<!doctype html><br><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <br> + +#data +<!doctype html><embed><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <embed> + +#data +<!doctype html><img><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <img> + +#data +<!doctype html><input><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <input> + +#data +<!doctype html><keygen><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <keygen> + +#data +<!doctype html><wbr><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <wbr> + +#data +<!doctype html><hr><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <hr> + +#data +<!doctype html><textarea></textarea><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> + +#data +<!doctype html><xmp></xmp><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <xmp> + +#data +<!doctype html><iframe></iframe><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <iframe> + +#data +<!doctype html><select></select><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><svg></svg><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><math></math><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><svg><foreignObject><div> <frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><svg>a</svg><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <svg svg> +| "a" + +#data +<!doctype html><svg> </svg><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<html>aaa<frameset></frameset> +#errors +#document +| <html> +| <head> +| <body> +| "aaa" + +#data +<html> a <frameset></frameset> +#errors +#document +| <html> +| <head> +| <body> +| "a " + +#data +<!doctype html><div><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!doctype html><div><body><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <div> + +#data +<!doctype html><p><math></p>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| "a" + +#data +<!doctype html><p><math><mn><span></p>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mn> +| <span> +| <p> +| "a" + +#data +<!doctype html><math></html> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <math math> + +#data +<!doctype html><meta charset="ascii"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <meta> +| charset="ascii" +| <body> + +#data +<!doctype html><meta http-equiv="content-type" content="text/html;charset=ascii"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <meta> +| content="text/html;charset=ascii" +| http-equiv="content-type" +| <body> + +#data +<!doctype html><head><!--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa--><meta charset="utf8"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <!-- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa --> +| <meta> +| charset="utf8" +| <body> + +#data +<!doctype html><html a=b><head></head><html c=d> +#errors +#document +| <!DOCTYPE html> +| <html> +| a="b" +| c="d" +| <head> +| <body> + +#data +<!doctype html><image/> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <img> + +#data +<!doctype html>a<i>b<table>c<b>d</i>e</b>f +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "a" +| <i> +| "bc" +| <b> +| "de" +| "f" +| <table> + +#data +<!doctype html><table><i>a<b>b<div>c<a>d</i>e</b>f +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <b> +| "b" +| <b> +| <div> +| <b> +| <i> +| "c" +| <a> +| "d" +| <a> +| "e" +| <a> +| "f" +| <table> + +#data +<!doctype html><i>a<b>b<div>c<a>d</i>e</b>f +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <b> +| "b" +| <b> +| <div> +| <b> +| <i> +| "c" +| <a> +| "d" +| <a> +| "e" +| <a> +| "f" + +#data +<!doctype html><table><i>a<b>b<div>c</i> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <b> +| "b" +| <b> +| <div> +| <i> +| "c" +| <table> + +#data +<!doctype html><table><i>a<b>b<div>c<a>d</i>e</b>f +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <b> +| "b" +| <b> +| <div> +| <b> +| <i> +| "c" +| <a> +| "d" +| <a> +| "e" +| <a> +| "f" +| <table> + +#data +<!doctype html><table><i>a<div>b<tr>c<b>d</i>e +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <div> +| "b" +| <i> +| "c" +| <b> +| "d" +| <b> +| "e" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table><td><table><i>a<div>b<b>c</i>d +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <i> +| "a" +| <div> +| <i> +| "b" +| <b> +| "c" +| <b> +| "d" +| <table> + +#data +<!doctype html><body><bgsound> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <bgsound> + +#data +<!doctype html><body><basefont> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <basefont> + +#data +<!doctype html><a><b></a><basefont> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <a> +| <b> +| <basefont> + +#data +<!doctype html><a><b></a><bgsound> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <a> +| <b> +| <bgsound> + +#data +<!doctype html><figcaption><article></figcaption>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <figcaption> +| <article> +| "a" + +#data +<!doctype html><summary><article></summary>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <summary> +| <article> +| "a" + +#data +<!doctype html><p><a><plaintext>b +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <a> +| <plaintext> +| <a> +| "b" + +#data +<!DOCTYPE html><div>a<a></div>b<p>c</p>d +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <div> +| "a" +| <a> +| <a> +| "b" +| <p> +| "c" +| "d" diff --git a/vendor/golang.org/x/net/html/testdata/webkit/tests2.dat b/vendor/golang.org/x/net/html/testdata/webkit/tests2.dat new file mode 100644 index 0000000..60d8592 --- /dev/null +++ b/vendor/golang.org/x/net/html/testdata/webkit/tests2.dat @@ -0,0 +1,763 @@ +#data +<!DOCTYPE html>Test +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "Test" + +#data +<textarea>test</div>test +#errors +Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE. +Line: 1 Col: 24 Expected closing tag. Unexpected end of file. +#document +| <html> +| <head> +| <body> +| <textarea> +| "test</div>test" + +#data +<table><td> +#errors +Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected table cell start tag (td) in the table body phase. +Line: 1 Col: 11 Expected closing tag. Unexpected end of file. +#document +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> + +#data +<table><td>test</tbody></table> +#errors +Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected table cell start tag (td) in the table body phase. +#document +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| "test" + +#data +<frame>test +#errors +Line: 1 Col: 7 Unexpected start tag (frame). Expected DOCTYPE. +Line: 1 Col: 7 Unexpected start tag frame. Ignored. +#document +| <html> +| <head> +| <body> +| "test" + +#data +<!DOCTYPE html><frameset>test +#errors +Line: 1 Col: 29 Unepxected characters in the frameset phase. Characters ignored. +Line: 1 Col: 29 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!DOCTYPE html><frameset><!DOCTYPE html> +#errors +Line: 1 Col: 40 Unexpected DOCTYPE. Ignored. +Line: 1 Col: 40 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!DOCTYPE html><font><p><b>test</font> +#errors +Line: 1 Col: 38 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm. +Line: 1 Col: 38 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <font> +| <p> +| <font> +| <b> +| "test" + +#data +<!DOCTYPE html><dt><div><dd> +#errors +Line: 1 Col: 28 Missing end tag (div, dt). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <dt> +| <div> +| <dd> + +#data +<script></x +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</x" +| <body> + +#data +<table><plaintext><td> +#errors +Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE. +Line: 1 Col: 18 Unexpected start tag (plaintext) in table context caused voodoo mode. +Line: 1 Col: 22 Unexpected end of file. Expected table content. +#document +| <html> +| <head> +| <body> +| <plaintext> +| "<td>" +| <table> + +#data +<plaintext></plaintext> +#errors +Line: 1 Col: 11 Unexpected start tag (plaintext). Expected DOCTYPE. +Line: 1 Col: 23 Expected closing tag. Unexpected end of file. +#document +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" + +#data +<!DOCTYPE html><table><tr>TEST +#errors +Line: 1 Col: 30 Unexpected non-space characters in table context caused voodoo mode. +Line: 1 Col: 30 Unexpected end of file. Expected table content. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "TEST" +| <table> +| <tbody> +| <tr> + +#data +<!DOCTYPE html><body t1=1><body t2=2><body t3=3 t4=4> +#errors +Line: 1 Col: 37 Unexpected start tag (body). +Line: 1 Col: 53 Unexpected start tag (body). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| t1="1" +| t2="2" +| t3="3" +| t4="4" + +#data +</b test +#errors +Line: 1 Col: 8 Unexpected end of file in attribute name. +Line: 1 Col: 8 End tag contains unexpected attributes. +Line: 1 Col: 8 Unexpected end tag (b). Expected DOCTYPE. +Line: 1 Col: 8 Unexpected end tag (b) after the (implied) root element. +#document +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html></b test<b &=&>X +#errors +Line: 1 Col: 32 Named entity didn't end with ';'. +Line: 1 Col: 33 End tag contains unexpected attributes. +Line: 1 Col: 33 Unexpected end tag (b) after the (implied) root element. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "X" + +#data +<!doctypehtml><scrIPt type=text/x-foobar;baz>X</SCRipt +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +Line: 1 Col: 54 Unexpected end of file in the tag name. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| type="text/x-foobar;baz" +| "X</SCRipt" +| <body> + +#data +& +#errors +Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&" + +#data +&# +#errors +Line: 1 Col: 1 Numeric entity expected. Got end of file instead. +Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&#" + +#data +&#X +#errors +Line: 1 Col: 3 Numeric entity expected but none found. +Line: 1 Col: 3 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&#X" + +#data +&#x +#errors +Line: 1 Col: 3 Numeric entity expected but none found. +Line: 1 Col: 3 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&#x" + +#data +- +#errors +Line: 1 Col: 4 Numeric entity didn't end with ';'. +Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "-" + +#data +&x-test +#errors +Line: 1 Col: 1 Named entity expected. Got none. +Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&x-test" + +#data +<!doctypehtml><p><li> +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <li> + +#data +<!doctypehtml><p><dt> +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <dt> + +#data +<!doctypehtml><p><dd> +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <dd> + +#data +<!doctypehtml><p><form> +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +Line: 1 Col: 23 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <form> + +#data +<!DOCTYPE html><p></P>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| "X" + +#data +& +#errors +Line: 1 Col: 4 Named entity didn't end with ';'. +Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&" + +#data +&AMp; +#errors +Line: 1 Col: 1 Named entity expected. Got none. +Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&AMp;" + +#data +<!DOCTYPE html><html><head></head><body><thisISasillyTESTelementNameToMakeSureCrazyTagNamesArePARSEDcorrectLY> +#errors +Line: 1 Col: 110 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <thisisasillytestelementnametomakesurecrazytagnamesareparsedcorrectly> + +#data +<!DOCTYPE html>X</body>X +#errors +Line: 1 Col: 24 Unexpected non-space characters in the after body phase. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "XX" + +#data +<!DOCTYPE html><!-- X +#errors +Line: 1 Col: 21 Unexpected end of file in comment. +#document +| <!DOCTYPE html> +| <!-- X --> +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html><table><caption>test TEST</caption><td>test +#errors +Line: 1 Col: 54 Unexpected table cell start tag (td) in the table body phase. +Line: 1 Col: 58 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <caption> +| "test TEST" +| <tbody> +| <tr> +| <td> +| "test" + +#data +<!DOCTYPE html><select><option><optgroup> +#errors +Line: 1 Col: 41 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <option> +| <optgroup> + +#data +<!DOCTYPE html><select><optgroup><option></optgroup><option><select><option> +#errors +Line: 1 Col: 68 Unexpected select start tag in the select phase treated as select end tag. +Line: 1 Col: 76 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <optgroup> +| <option> +| <option> +| <option> + +#data +<!DOCTYPE html><select><optgroup><option><optgroup> +#errors +Line: 1 Col: 51 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <optgroup> +| <option> +| <optgroup> + +#data +<!DOCTYPE html><datalist><option>foo</datalist>bar +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <datalist> +| <option> +| "foo" +| "bar" + +#data +<!DOCTYPE html><font><input><input></font> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <font> +| <input> +| <input> + +#data +<!DOCTYPE html><!-- XXX - XXX --> +#errors +#document +| <!DOCTYPE html> +| <!-- XXX - XXX --> +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html><!-- XXX - XXX +#errors +Line: 1 Col: 29 Unexpected end of file in comment (-) +#document +| <!DOCTYPE html> +| <!-- XXX - XXX --> +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html><!-- XXX - XXX - XXX --> +#errors +#document +| <!DOCTYPE html> +| <!-- XXX - XXX - XXX --> +| <html> +| <head> +| <body> + +#data +<isindex test=x name=x> +#errors +Line: 1 Col: 23 Unexpected start tag (isindex). Expected DOCTYPE. +Line: 1 Col: 23 Unexpected start tag isindex. Don't use it! +#document +| <html> +| <head> +| <body> +| <form> +| <hr> +| <label> +| "This is a searchable index. Enter search keywords: " +| <input> +| name="isindex" +| test="x" +| <hr> + +#data +test +test +#errors +Line: 2 Col: 4 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "test +test" + +#data +<!DOCTYPE html><body><title>test</body> +#errors +#document +| +| +| +| +| +| "test</body>" + +#data +<!DOCTYPE html><body><title>X +#errors +#document +| +| +| +| +| +| "X" +| <meta> +| name="z" +| <link> +| rel="foo" +| <style> +| " +x { content:"</style" } " + +#data +<!DOCTYPE html><select><optgroup></optgroup></select> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <optgroup> + +#data + + +#errors +Line: 2 Col: 1 Unexpected End of file. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html> <html> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html><script> +</script> <title>x +#errors +#document +| +| +| +| +#errors +Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE. +Line: 1 Col: 21 Unexpected start tag (script) that can be in head. Moved. +#document +| +| +| +#errors +Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE. +Line: 1 Col: 28 Unexpected start tag (style) that can be in head. Moved. +#document +| +| +| +#errors +Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE. +#document +| +| +| +| +| "x" +| x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (style). +#document +| +| +| --> x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| +| +| x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| +| +| x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| +| +| x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| +| +|

+#errors +#document +| +| +| +| +| +| ddd +#errors +#document +| +| +| +#errors +#document +| +| +| +| +|
  • +| +| ", + " +
    << Back to Go HTTP/2 demo server`) + }) +} + +func httpsHost() string { + if *hostHTTPS != "" { + return *hostHTTPS + } + if v := *httpsAddr; strings.HasPrefix(v, ":") { + return "localhost" + v + } else { + return v + } +} + +func httpHost() string { + if *hostHTTP != "" { + return *hostHTTP + } + if v := *httpAddr; strings.HasPrefix(v, ":") { + return "localhost" + v + } else { + return v + } +} + +func serveProdTLS() error { + const cacheDir = "/var/cache/autocert" + if err := os.MkdirAll(cacheDir, 0700); err != nil { + return err + } + m := autocert.Manager{ + Cache: autocert.DirCache(cacheDir), + Prompt: autocert.AcceptTOS, + HostPolicy: autocert.HostWhitelist("http2.golang.org"), + } + srv := &http.Server{ + TLSConfig: &tls.Config{ + GetCertificate: m.GetCertificate, + }, + } + http2.ConfigureServer(srv, &http2.Server{ + NewWriteScheduler: func() http2.WriteScheduler { + return http2.NewPriorityWriteScheduler(nil) + }, + }) + ln, err := net.Listen("tcp", ":443") + if err != nil { + return err + } + return srv.Serve(tls.NewListener(tcpKeepAliveListener{ln.(*net.TCPListener)}, srv.TLSConfig)) +} + +type tcpKeepAliveListener struct { + *net.TCPListener +} + +func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { + tc, err := ln.AcceptTCP() + if err != nil { + return + } + tc.SetKeepAlive(true) + tc.SetKeepAlivePeriod(3 * time.Minute) + return tc, nil +} + +func serveProd() error { + errc := make(chan error, 2) + go func() { errc <- http.ListenAndServe(":80", nil) }() + go func() { errc <- serveProdTLS() }() + return <-errc +} + +const idleTimeout = 5 * time.Minute +const activeTimeout = 10 * time.Minute + +// TODO: put this into the standard library and actually send +// PING frames and GOAWAY, etc: golang.org/issue/14204 +func idleTimeoutHook() func(net.Conn, http.ConnState) { + var mu sync.Mutex + m := map[net.Conn]*time.Timer{} + return func(c net.Conn, cs http.ConnState) { + mu.Lock() + defer mu.Unlock() + if t, ok := m[c]; ok { + delete(m, c) + t.Stop() + } + var d time.Duration + switch cs { + case http.StateNew, http.StateIdle: + d = idleTimeout + case http.StateActive: + d = activeTimeout + default: + return + } + m[c] = time.AfterFunc(d, func() { + log.Printf("closing idle conn %v after %v", c.RemoteAddr(), d) + go c.Close() + }) + } +} + +func main() { + var srv http.Server + flag.BoolVar(&http2.VerboseLogs, "verbose", false, "Verbose HTTP/2 debugging.") + flag.Parse() + srv.Addr = *httpsAddr + srv.ConnState = idleTimeoutHook() + + registerHandlers() + + if *prod { + *hostHTTP = "http2.golang.org" + *hostHTTPS = "http2.golang.org" + log.Fatal(serveProd()) + } + + url := "https://" + httpsHost() + "/" + log.Printf("Listening on " + url) + http2.ConfigureServer(&srv, &http2.Server{}) + + if *httpAddr != "" { + go func() { + log.Printf("Listening on http://" + httpHost() + "/ (for unencrypted HTTP/1)") + log.Fatal(http.ListenAndServe(*httpAddr, nil)) + }() + } + + go func() { + log.Fatal(srv.ListenAndServeTLS("server.crt", "server.key")) + }() + select {} +} diff --git a/vendor/golang.org/x/net/http2/h2demo/launch.go b/vendor/golang.org/x/net/http2/h2demo/launch.go new file mode 100644 index 0000000..df0866a --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/launch.go @@ -0,0 +1,302 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "bufio" + "bytes" + "encoding/json" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "net/http" + "os" + "strings" + "time" + + "golang.org/x/oauth2" + "golang.org/x/oauth2/google" + compute "google.golang.org/api/compute/v1" +) + +var ( + proj = flag.String("project", "symbolic-datum-552", "name of Project") + zone = flag.String("zone", "us-central1-a", "GCE zone") + mach = flag.String("machinetype", "n1-standard-1", "Machine type") + instName = flag.String("instance_name", "http2-demo", "Name of VM instance.") + sshPub = flag.String("ssh_public_key", "", "ssh public key file to authorize. Can modify later in Google's web UI anyway.") + staticIP = flag.String("static_ip", "130.211.116.44", "Static IP to use. If empty, automatic.") + + writeObject = flag.String("write_object", "", "If non-empty, a VM isn't created and the flag value is Google Cloud Storage bucket/object to write. The contents from stdin.") + publicObject = flag.Bool("write_object_is_public", false, "Whether the object created by --write_object should be public.") +) + +func readFile(v string) string { + slurp, err := ioutil.ReadFile(v) + if err != nil { + log.Fatalf("Error reading %s: %v", v, err) + } + return strings.TrimSpace(string(slurp)) +} + +var config = &oauth2.Config{ + // The client-id and secret should be for an "Installed Application" when using + // the CLI. Later we'll use a web application with a callback. + ClientID: readFile("client-id.dat"), + ClientSecret: readFile("client-secret.dat"), + Endpoint: google.Endpoint, + Scopes: []string{ + compute.DevstorageFullControlScope, + compute.ComputeScope, + "https://www.googleapis.com/auth/sqlservice", + "https://www.googleapis.com/auth/sqlservice.admin", + }, + RedirectURL: "urn:ietf:wg:oauth:2.0:oob", +} + +const baseConfig = `#cloud-config +coreos: + units: + - name: h2demo.service + command: start + content: | + [Unit] + Description=HTTP2 Demo + + [Service] + ExecStartPre=/bin/bash -c 'mkdir -p /opt/bin && curl -s -o /opt/bin/h2demo http://storage.googleapis.com/http2-demo-server-tls/h2demo && chmod +x /opt/bin/h2demo' + ExecStart=/opt/bin/h2demo --prod + RestartSec=5s + Restart=always + Type=simple + + [Install] + WantedBy=multi-user.target +` + +func main() { + flag.Parse() + if *proj == "" { + log.Fatalf("Missing --project flag") + } + prefix := "https://www.googleapis.com/compute/v1/projects/" + *proj + machType := prefix + "/zones/" + *zone + "/machineTypes/" + *mach + + const tokenFileName = "token.dat" + tokenFile := tokenCacheFile(tokenFileName) + tokenSource := oauth2.ReuseTokenSource(nil, tokenFile) + token, err := tokenSource.Token() + if err != nil { + if *writeObject != "" { + log.Fatalf("Can't use --write_object without a valid token.dat file already cached.") + } + log.Printf("Error getting token from %s: %v", tokenFileName, err) + log.Printf("Get auth code from %v", config.AuthCodeURL("my-state")) + fmt.Print("\nEnter auth code: ") + sc := bufio.NewScanner(os.Stdin) + sc.Scan() + authCode := strings.TrimSpace(sc.Text()) + token, err = config.Exchange(oauth2.NoContext, authCode) + if err != nil { + log.Fatalf("Error exchanging auth code for a token: %v", err) + } + if err := tokenFile.WriteToken(token); err != nil { + log.Fatalf("Error writing to %s: %v", tokenFileName, err) + } + tokenSource = oauth2.ReuseTokenSource(token, nil) + } + + oauthClient := oauth2.NewClient(oauth2.NoContext, tokenSource) + + if *writeObject != "" { + writeCloudStorageObject(oauthClient) + return + } + + computeService, _ := compute.New(oauthClient) + + natIP := *staticIP + if natIP == "" { + // Try to find it by name. + aggAddrList, err := computeService.Addresses.AggregatedList(*proj).Do() + if err != nil { + log.Fatal(err) + } + // http://godoc.org/code.google.com/p/google-api-go-client/compute/v1#AddressAggregatedList + IPLoop: + for _, asl := range aggAddrList.Items { + for _, addr := range asl.Addresses { + if addr.Name == *instName+"-ip" && addr.Status == "RESERVED" { + natIP = addr.Address + break IPLoop + } + } + } + } + + cloudConfig := baseConfig + if *sshPub != "" { + key := strings.TrimSpace(readFile(*sshPub)) + cloudConfig += fmt.Sprintf("\nssh_authorized_keys:\n - %s\n", key) + } + if os.Getenv("USER") == "bradfitz" { + cloudConfig += fmt.Sprintf("\nssh_authorized_keys:\n - %s\n", "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwks9dwWKlRC+73gRbvYtVg0vdCwDSuIlyt4z6xa/YU/jTDynM4R4W10hm2tPjy8iR1k8XhDv4/qdxe6m07NjG/By1tkmGpm1mGwho4Pr5kbAAy/Qg+NLCSdAYnnE00FQEcFOC15GFVMOW2AzDGKisReohwH9eIzHPzdYQNPRWXE= bradfitz@papag.bradfitz.com") + } + const maxCloudConfig = 32 << 10 // per compute API docs + if len(cloudConfig) > maxCloudConfig { + log.Fatalf("cloud config length of %d bytes is over %d byte limit", len(cloudConfig), maxCloudConfig) + } + + instance := &compute.Instance{ + Name: *instName, + Description: "Go Builder", + MachineType: machType, + Disks: []*compute.AttachedDisk{instanceDisk(computeService)}, + Tags: &compute.Tags{ + Items: []string{"http-server", "https-server"}, + }, + Metadata: &compute.Metadata{ + Items: []*compute.MetadataItems{ + { + Key: "user-data", + Value: &cloudConfig, + }, + }, + }, + NetworkInterfaces: []*compute.NetworkInterface{ + { + AccessConfigs: []*compute.AccessConfig{ + { + Type: "ONE_TO_ONE_NAT", + Name: "External NAT", + NatIP: natIP, + }, + }, + Network: prefix + "/global/networks/default", + }, + }, + ServiceAccounts: []*compute.ServiceAccount{ + { + Email: "default", + Scopes: []string{ + compute.DevstorageFullControlScope, + compute.ComputeScope, + }, + }, + }, + } + + log.Printf("Creating instance...") + op, err := computeService.Instances.Insert(*proj, *zone, instance).Do() + if err != nil { + log.Fatalf("Failed to create instance: %v", err) + } + opName := op.Name + log.Printf("Created. Waiting on operation %v", opName) +OpLoop: + for { + time.Sleep(2 * time.Second) + op, err := computeService.ZoneOperations.Get(*proj, *zone, opName).Do() + if err != nil { + log.Fatalf("Failed to get op %s: %v", opName, err) + } + switch op.Status { + case "PENDING", "RUNNING": + log.Printf("Waiting on operation %v", opName) + continue + case "DONE": + if op.Error != nil { + for _, operr := range op.Error.Errors { + log.Printf("Error: %+v", operr) + } + log.Fatalf("Failed to start.") + } + log.Printf("Success. %+v", op) + break OpLoop + default: + log.Fatalf("Unknown status %q: %+v", op.Status, op) + } + } + + inst, err := computeService.Instances.Get(*proj, *zone, *instName).Do() + if err != nil { + log.Fatalf("Error getting instance after creation: %v", err) + } + ij, _ := json.MarshalIndent(inst, "", " ") + log.Printf("Instance: %s", ij) +} + +func instanceDisk(svc *compute.Service) *compute.AttachedDisk { + const imageURL = "https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-stable-444-5-0-v20141016" + diskName := *instName + "-disk" + + return &compute.AttachedDisk{ + AutoDelete: true, + Boot: true, + Type: "PERSISTENT", + InitializeParams: &compute.AttachedDiskInitializeParams{ + DiskName: diskName, + SourceImage: imageURL, + DiskSizeGb: 50, + }, + } +} + +func writeCloudStorageObject(httpClient *http.Client) { + content := os.Stdin + const maxSlurp = 1 << 20 + var buf bytes.Buffer + n, err := io.CopyN(&buf, content, maxSlurp) + if err != nil && err != io.EOF { + log.Fatalf("Error reading from stdin: %v, %v", n, err) + } + contentType := http.DetectContentType(buf.Bytes()) + + req, err := http.NewRequest("PUT", "https://storage.googleapis.com/"+*writeObject, io.MultiReader(&buf, content)) + if err != nil { + log.Fatal(err) + } + req.Header.Set("x-goog-api-version", "2") + if *publicObject { + req.Header.Set("x-goog-acl", "public-read") + } + req.Header.Set("Content-Type", contentType) + res, err := httpClient.Do(req) + if err != nil { + log.Fatal(err) + } + if res.StatusCode != 200 { + res.Write(os.Stderr) + log.Fatalf("Failed.") + } + log.Printf("Success.") + os.Exit(0) +} + +type tokenCacheFile string + +func (f tokenCacheFile) Token() (*oauth2.Token, error) { + slurp, err := ioutil.ReadFile(string(f)) + if err != nil { + return nil, err + } + t := new(oauth2.Token) + if err := json.Unmarshal(slurp, t); err != nil { + return nil, err + } + return t, nil +} + +func (f tokenCacheFile) WriteToken(t *oauth2.Token) error { + jt, err := json.Marshal(t) + if err != nil { + return err + } + return ioutil.WriteFile(string(f), jt, 0600) +} diff --git a/vendor/golang.org/x/net/http2/h2demo/rootCA.key b/vendor/golang.org/x/net/http2/h2demo/rootCA.key new file mode 100644 index 0000000..a15a6ab --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/rootCA.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAt5fAjp4fTcekWUTfzsp0kyih1OYbsGL0KX1eRbSSR8Od0+9Q +62Hyny+GFwMTb4A/KU8mssoHvcceSAAbwfbxFK/+s51TobqUnORZrOoTZjkUygby +XDSK99YBbcR1Pip8vwMTm4XKuLtCigeBBdjjAQdgUO28LENGlsMnmeYkJfODVGnV +mr5Ltb9ANA8IKyTfsnHJ4iOCS/PlPbUj2q7YnoVLposUBMlgUb/CykX3mOoLb4yJ +JQyA/iST6ZxiIEj36D4yWZ5lg7YJl+UiiBQHGCnPdGyipqV06ex0heYWcaiW8LWZ +SUQ93jQ+WVCH8hT7DQO1dmsvUmXlq/JeAlwQ/QIDAQABAoIBAFFHV7JMAqPWnMYA +nezY6J81v9+XN+7xABNWM2Q8uv4WdksbigGLTXR3/680Z2hXqJ7LMeC5XJACFT/e +/Gr0vmpgOCygnCPfjGehGKpavtfksXV3edikUlnCXsOP1C//c1bFL+sMYmFCVgTx +qYdDK8yKzXNGrKYT6q5YG7IglyRNV1rsQa8lM/5taFYiD1Ck/3tQi3YIq8Lcuser +hrxsMABcQ6mi+EIvG6Xr4mfJug0dGJMHG4RG1UGFQn6RXrQq2+q53fC8ZbVUSi0j +NQ918aKFzktwv+DouKU0ME4I9toks03gM860bAL7zCbKGmwR3hfgX/TqzVCWpG9E +LDVfvekCgYEA8fk9N53jbBRmULUGEf4qWypcLGiZnNU0OeXWpbPV9aa3H0VDytA7 +8fCN2dPAVDPqlthMDdVe983NCNwp2Yo8ZimDgowyIAKhdC25s1kejuaiH9OAPj3c +0f8KbriYX4n8zNHxFwK6Ae3pQ6EqOLJVCUsziUaZX9nyKY5aZlyX6xcCgYEAwjws +K62PjC64U5wYddNLp+kNdJ4edx+a7qBb3mEgPvSFT2RO3/xafJyG8kQB30Mfstjd +bRxyUV6N0vtX1zA7VQtRUAvfGCecpMo+VQZzcHXKzoRTnQ7eZg4Lmj5fQ9tOAKAo +QCVBoSW/DI4PZL26CAMDcAba4Pa22ooLapoRIQsCgYA6pIfkkbxLNkpxpt2YwLtt +Kr/590O7UaR9n6k8sW/aQBRDXNsILR1KDl2ifAIxpf9lnXgZJiwE7HiTfCAcW7c1 +nzwDCI0hWuHcMTS/NYsFYPnLsstyyjVZI3FY0h4DkYKV9Q9z3zJLQ2hz/nwoD3gy +b2pHC7giFcTts1VPV4Nt8wKBgHeFn4ihHJweg76vZz3Z78w7VNRWGFklUalVdDK7 +gaQ7w2y/ROn/146mo0OhJaXFIFRlrpvdzVrU3GDf2YXJYDlM5ZRkObwbZADjksev +WInzcgDy3KDg7WnPasRXbTfMU4t/AkW2p1QKbi3DnSVYuokDkbH2Beo45vxDxhKr +C69RAoGBAIyo3+OJenoZmoNzNJl2WPW5MeBUzSh8T/bgyjFTdqFHF5WiYRD/lfHj +x9Glyw2nutuT4hlOqHvKhgTYdDMsF2oQ72fe3v8Q5FU7FuKndNPEAyvKNXZaShVA +hnlhv5DjXKb0wFWnt5PCCiQLtzG0yyHaITrrEme7FikkIcTxaX/Y +-----END RSA PRIVATE KEY----- diff --git a/vendor/golang.org/x/net/http2/h2demo/rootCA.pem b/vendor/golang.org/x/net/http2/h2demo/rootCA.pem new file mode 100644 index 0000000..3a323e7 --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/rootCA.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEWjCCA0KgAwIBAgIJALfRlWsI8YQHMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV +BAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEUMBIG +A1UEChMLQnJhZGZpdHppbmMxEjAQBgNVBAMTCWxvY2FsaG9zdDEdMBsGCSqGSIb3 +DQEJARYOYnJhZEBkYW5nYS5jb20wHhcNMTQwNzE1MjA0NjA1WhcNMTcwNTA0MjA0 +NjA1WjB7MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xFDASBgNVBAoTC0JyYWRmaXR6aW5jMRIwEAYDVQQDEwlsb2NhbGhv +c3QxHTAbBgkqhkiG9w0BCQEWDmJyYWRAZGFuZ2EuY29tMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAt5fAjp4fTcekWUTfzsp0kyih1OYbsGL0KX1eRbSS +R8Od0+9Q62Hyny+GFwMTb4A/KU8mssoHvcceSAAbwfbxFK/+s51TobqUnORZrOoT +ZjkUygbyXDSK99YBbcR1Pip8vwMTm4XKuLtCigeBBdjjAQdgUO28LENGlsMnmeYk +JfODVGnVmr5Ltb9ANA8IKyTfsnHJ4iOCS/PlPbUj2q7YnoVLposUBMlgUb/CykX3 +mOoLb4yJJQyA/iST6ZxiIEj36D4yWZ5lg7YJl+UiiBQHGCnPdGyipqV06ex0heYW +caiW8LWZSUQ93jQ+WVCH8hT7DQO1dmsvUmXlq/JeAlwQ/QIDAQABo4HgMIHdMB0G +A1UdDgQWBBRcAROthS4P4U7vTfjByC569R7E6DCBrQYDVR0jBIGlMIGigBRcAROt +hS4P4U7vTfjByC569R7E6KF/pH0wezELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNB +MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtCcmFkZml0emluYzES +MBAGA1UEAxMJbG9jYWxob3N0MR0wGwYJKoZIhvcNAQkBFg5icmFkQGRhbmdhLmNv +bYIJALfRlWsI8YQHMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG6h +U9f9sNH0/6oBbGGy2EVU0UgITUQIrFWo9rFkrW5k/XkDjQm+3lzjT0iGR4IxE/Ao +eU6sQhua7wrWeFEn47GL98lnCsJdD7oZNhFmQ95Tb/LnDUjs5Yj9brP0NWzXfYU4 +UK2ZnINJRcJpB8iRCaCxE8DdcUF0XqIEq6pA272snoLmiXLMvNl3kYEdm+je6voD +58SNVEUsztzQyXmJEhCpwVI0A6QCjzXj+qvpmw3ZZHi8JwXei8ZZBLTSFBki8Z7n +sH9BBH38/SzUmAN4QHSPy1gjqm00OAE8NaYDkh/bzE4d7mLGGMWp/WE3KPSu82HF +kPe6XoSbiLm/kxk32T0= +-----END CERTIFICATE----- diff --git a/vendor/golang.org/x/net/http2/h2demo/rootCA.srl b/vendor/golang.org/x/net/http2/h2demo/rootCA.srl new file mode 100644 index 0000000..6db3891 --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/rootCA.srl @@ -0,0 +1 @@ +E2CE26BF3285059C diff --git a/vendor/golang.org/x/net/http2/h2demo/server.crt b/vendor/golang.org/x/net/http2/h2demo/server.crt new file mode 100644 index 0000000..c59059b --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/server.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPjCCAiYCCQDizia/MoUFnDANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFDASBgNVBAoT +C0JyYWRmaXR6aW5jMRIwEAYDVQQDEwlsb2NhbGhvc3QxHTAbBgkqhkiG9w0BCQEW +DmJyYWRAZGFuZ2EuY29tMB4XDTE0MDcxNTIwNTAyN1oXDTE1MTEyNzIwNTAyN1ow +RzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQHEwJTRjEeMBwGA1UE +ChMVYnJhZGZpdHogaHR0cDIgc2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAs1Y9CyLFrdL8VQWN1WaifDqaZFnoqjHhCMlc1TfG2zA+InDifx2l +gZD3o8FeNnAcfM2sPlk3+ZleOYw9P/CklFVDlvqmpCv9ss/BEp/dDaWvy1LmJ4c2 +dbQJfmTxn7CV1H3TsVJvKdwFmdoABb41NoBp6+NNO7OtDyhbIMiCI0pL3Nefb3HL +A7hIMo3DYbORTtJLTIH9W8YKrEWL0lwHLrYFx/UdutZnv+HjdmO6vCN4na55mjws +/vjKQUmc7xeY7Xe20xDEG2oDKVkL2eD7FfyrYMS3rO1ExP2KSqlXYG/1S9I/fz88 +F0GK7HX55b5WjZCl2J3ERVdnv/0MQv+sYQIDAQABMA0GCSqGSIb3DQEBBQUAA4IB +AQC0zL+n/YpRZOdulSu9tS8FxrstXqGWoxfe+vIUgqfMZ5+0MkjJ/vW0FqlLDl2R +rn4XaR3e7FmWkwdDVbq/UB6lPmoAaFkCgh9/5oapMaclNVNnfF3fjCJfRr+qj/iD +EmJStTIN0ZuUjAlpiACmfnpEU55PafT5Zx+i1yE4FGjw8bJpFoyD4Hnm54nGjX19 +KeCuvcYFUPnBm3lcL0FalF2AjqV02WTHYNQk7YF/oeO7NKBoEgvGvKG3x+xaOeBI +dwvdq175ZsGul30h+QjrRlXhH/twcuaT3GSdoysDl9cCYE8f1Mk8PD6gan3uBCJU +90p6/CbU71bGbfpM2PHot2fm +-----END CERTIFICATE----- diff --git a/vendor/golang.org/x/net/http2/h2demo/server.key b/vendor/golang.org/x/net/http2/h2demo/server.key new file mode 100644 index 0000000..f329c14 --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/server.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAs1Y9CyLFrdL8VQWN1WaifDqaZFnoqjHhCMlc1TfG2zA+InDi +fx2lgZD3o8FeNnAcfM2sPlk3+ZleOYw9P/CklFVDlvqmpCv9ss/BEp/dDaWvy1Lm +J4c2dbQJfmTxn7CV1H3TsVJvKdwFmdoABb41NoBp6+NNO7OtDyhbIMiCI0pL3Nef +b3HLA7hIMo3DYbORTtJLTIH9W8YKrEWL0lwHLrYFx/UdutZnv+HjdmO6vCN4na55 +mjws/vjKQUmc7xeY7Xe20xDEG2oDKVkL2eD7FfyrYMS3rO1ExP2KSqlXYG/1S9I/ +fz88F0GK7HX55b5WjZCl2J3ERVdnv/0MQv+sYQIDAQABAoIBADQ2spUwbY+bcz4p +3M66ECrNQTBggP40gYl2XyHxGGOu2xhZ94f9ELf1hjRWU2DUKWco1rJcdZClV6q3 +qwmXvcM2Q/SMS8JW0ImkNVl/0/NqPxGatEnj8zY30d/L8hGFb0orzFu/XYA5gCP4 +NbN2WrXgk3ZLeqwcNxHHtSiJWGJ/fPyeDWAu/apy75u9Xf2GlzBZmV6HYD9EfK80 +LTlI60f5FO487CrJnboL7ovPJrIHn+k05xRQqwma4orpz932rTXnTjs9Lg6KtbQN +a7PrqfAntIISgr11a66Mng3IYH1lYqJsWJJwX/xHT4WLEy0EH4/0+PfYemJekz2+ +Co62drECgYEA6O9zVJZXrLSDsIi54cfxA7nEZWm5CAtkYWeAHa4EJ+IlZ7gIf9sL +W8oFcEfFGpvwVqWZ+AsQ70dsjXAv3zXaG0tmg9FtqWp7pzRSMPidifZcQwWkKeTO +gJnFmnVyed8h6GfjTEu4gxo1/S5U0V+mYSha01z5NTnN6ltKx1Or3b0CgYEAxRgm +S30nZxnyg/V7ys61AZhst1DG2tkZXEMcA7dYhabMoXPJAP/EfhlWwpWYYUs/u0gS +Wwmf5IivX5TlYScgmkvb/NYz0u4ZmOXkLTnLPtdKKFXhjXJcHjUP67jYmOxNlJLp +V4vLRnFxTpffAV+OszzRxsXX6fvruwZBANYJeXUCgYBVouLFsFgfWGYp2rpr9XP4 +KK25kvrBqF6JKOIDB1zjxNJ3pUMKrl8oqccCFoCyXa4oTM2kUX0yWxHfleUjrMq4 +yimwQKiOZmV7fVLSSjSw6e/VfBd0h3gb82ygcplZkN0IclkwTY5SNKqwn/3y07V5 +drqdhkrgdJXtmQ6O5YYECQKBgATERcDToQ1USlI4sKrB/wyv1AlG8dg/IebiVJ4e +ZAyvcQmClFzq0qS+FiQUnB/WQw9TeeYrwGs1hxBHuJh16srwhLyDrbMvQP06qh8R +48F8UXXSRec22dV9MQphaROhu2qZdv1AC0WD3tqov6L33aqmEOi+xi8JgbT/PLk5 +c/c1AoGBAI1A/02ryksW6/wc7/6SP2M2rTy4m1sD/GnrTc67EHnRcVBdKO6qH2RY +nqC8YcveC2ZghgPTDsA3VGuzuBXpwY6wTyV99q6jxQJ6/xcrD9/NUG6Uwv/xfCxl +IJLeBYEqQundSSny3VtaAUK8Ul1nxpTvVRNwtcyWTo8RHAAyNPWd +-----END RSA PRIVATE KEY----- diff --git a/vendor/golang.org/x/net/http2/h2demo/tmpl.go b/vendor/golang.org/x/net/http2/h2demo/tmpl.go new file mode 100644 index 0000000..504d6a7 --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/tmpl.go @@ -0,0 +1,1991 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build h2demo + +package main + +import "html/template" + +var pushTmpl = template.Must(template.New("serverpush").Parse(` + + + + + + + + + HTTP/2 Server Push Demo + + + + + + + + + +
    +Note: This page exists for demonstration purposes. For the actual cmd/go docs, go to golang.org/cmd/go. +
    + + + +
    +... +
    + + + + +
    +
    +
    +
    + Run + Format + + + +
    +
    + + +
    +
    + + +

    Command go

    + + + + + + + + + + + + + + +

    +Go is a tool for managing Go source code. +

    +

    +Usage: +

    +
    go command [arguments]
    +
    +

    +The commands are: +

    +
    build       compile packages and dependencies
    +clean       remove object files
    +doc         show documentation for package or symbol
    +env         print Go environment information
    +bug         start a bug report
    +fix         run go tool fix on packages
    +fmt         run gofmt on package sources
    +generate    generate Go files by processing source
    +get         download and install packages and dependencies
    +install     compile and install packages and dependencies
    +list        list packages
    +run         compile and run Go program
    +test        test packages
    +tool        run specified go tool
    +version     print Go version
    +vet         run go tool vet on packages
    +
    +

    +Use "go help [command]" for more information about a command. +

    +

    +Additional help topics: +

    +
    c           calling between Go and C
    +buildmode   description of build modes
    +filetype    file types
    +gopath      GOPATH environment variable
    +environment environment variables
    +importpath  import path syntax
    +packages    description of package lists
    +testflag    description of testing flags
    +testfunc    description of testing functions
    +
    +

    +Use "go help [topic]" for more information about that topic. +

    +

    Compile packages and dependencies

    +

    +Usage: +

    +
    go build [-o output] [-i] [build flags] [packages]
    +
    +

    +Build compiles the packages named by the import paths, +along with their dependencies, but it does not install the results. +

    +

    +If the arguments to build are a list of .go files, build treats +them as a list of source files specifying a single package. +

    +

    +When compiling a single main package, build writes +the resulting executable to an output file named after +the first source file ('go build ed.go rx.go' writes 'ed' or 'ed.exe') +or the source code directory ('go build unix/sam' writes 'sam' or 'sam.exe'). +The '.exe' suffix is added when writing a Windows executable. +

    +

    +When compiling multiple packages or a single non-main package, +build compiles the packages but discards the resulting object, +serving only as a check that the packages can be built. +

    +

    +When compiling packages, build ignores files that end in '_test.go'. +

    +

    +The -o flag, only allowed when compiling a single package, +forces build to write the resulting executable or object +to the named output file, instead of the default behavior described +in the last two paragraphs. +

    +

    +The -i flag installs the packages that are dependencies of the target. +

    +

    +The build flags are shared by the build, clean, get, install, list, run, +and test commands: +

    +
    -a
    +	force rebuilding of packages that are already up-to-date.
    +-n
    +	print the commands but do not run them.
    +-p n
    +	the number of programs, such as build commands or
    +	test binaries, that can be run in parallel.
    +	The default is the number of CPUs available.
    +-race
    +	enable data race detection.
    +	Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
    +-msan
    +	enable interoperation with memory sanitizer.
    +	Supported only on linux/amd64,
    +	and only with Clang/LLVM as the host C compiler.
    +-v
    +	print the names of packages as they are compiled.
    +-work
    +	print the name of the temporary work directory and
    +	do not delete it when exiting.
    +-x
    +	print the commands.
    +
    +-asmflags 'flag list'
    +	arguments to pass on each go tool asm invocation.
    +-buildmode mode
    +	build mode to use. See 'go help buildmode' for more.
    +-compiler name
    +	name of compiler to use, as in runtime.Compiler (gccgo or gc).
    +-gccgoflags 'arg list'
    +	arguments to pass on each gccgo compiler/linker invocation.
    +-gcflags 'arg list'
    +	arguments to pass on each go tool compile invocation.
    +-installsuffix suffix
    +	a suffix to use in the name of the package installation directory,
    +	in order to keep output separate from default builds.
    +	If using the -race flag, the install suffix is automatically set to race
    +	or, if set explicitly, has _race appended to it.  Likewise for the -msan
    +	flag.  Using a -buildmode option that requires non-default compile flags
    +	has a similar effect.
    +-ldflags 'flag list'
    +	arguments to pass on each go tool link invocation.
    +-linkshared
    +	link against shared libraries previously created with
    +	-buildmode=shared.
    +-pkgdir dir
    +	install and load all packages from dir instead of the usual locations.
    +	For example, when building with a non-standard configuration,
    +	use -pkgdir to keep generated packages in a separate location.
    +-tags 'tag list'
    +	a list of build tags to consider satisfied during the build.
    +	For more information about build tags, see the description of
    +	build constraints in the documentation for the go/build package.
    +-toolexec 'cmd args'
    +	a program to use to invoke toolchain programs like vet and asm.
    +	For example, instead of running asm, the go command will run
    +	'cmd args /path/to/asm <arguments for asm>'.
    +
    +

    +The list flags accept a space-separated list of strings. To embed spaces +in an element in the list, surround it with either single or double quotes. +

    +

    +For more about specifying packages, see 'go help packages'. +For more about where packages and binaries are installed, +run 'go help gopath'. +For more about calling between Go and C/C++, run 'go help c'. +

    +

    +Note: Build adheres to certain conventions such as those described +by 'go help gopath'. Not all projects can follow these conventions, +however. Installations that have their own conventions or that use +a separate software build system may choose to use lower-level +invocations such as 'go tool compile' and 'go tool link' to avoid +some of the overheads and design decisions of the build tool. +

    +

    +See also: go install, go get, go clean. +

    +

    Remove object files

    +

    +Usage: +

    +
    go clean [-i] [-r] [-n] [-x] [build flags] [packages]
    +
    +

    +Clean removes object files from package source directories. +The go command builds most objects in a temporary directory, +so go clean is mainly concerned with object files left by other +tools or by manual invocations of go build. +

    +

    +Specifically, clean removes the following files from each of the +source directories corresponding to the import paths: +

    +
    _obj/            old object directory, left from Makefiles
    +_test/           old test directory, left from Makefiles
    +_testmain.go     old gotest file, left from Makefiles
    +test.out         old test log, left from Makefiles
    +build.out        old test log, left from Makefiles
    +*.[568ao]        object files, left from Makefiles
    +
    +DIR(.exe)        from go build
    +DIR.test(.exe)   from go test -c
    +MAINFILE(.exe)   from go build MAINFILE.go
    +*.so             from SWIG
    +
    +

    +In the list, DIR represents the final path element of the +directory, and MAINFILE is the base name of any Go source +file in the directory that is not included when building +the package. +

    +

    +The -i flag causes clean to remove the corresponding installed +archive or binary (what 'go install' would create). +

    +

    +The -n flag causes clean to print the remove commands it would execute, +but not run them. +

    +

    +The -r flag causes clean to be applied recursively to all the +dependencies of the packages named by the import paths. +

    +

    +The -x flag causes clean to print remove commands as it executes them. +

    +

    +For more about build flags, see 'go help build'. +

    +

    +For more about specifying packages, see 'go help packages'. +

    +

    Show documentation for package or symbol

    +

    +Usage: +

    +
    go doc [-u] [-c] [package|[package.]symbol[.method]]
    +
    +

    +Doc prints the documentation comments associated with the item identified by its +arguments (a package, const, func, type, var, or method) followed by a one-line +summary of each of the first-level items "under" that item (package-level +declarations for a package, methods for a type, etc.). +

    +

    +Doc accepts zero, one, or two arguments. +

    +

    +Given no arguments, that is, when run as +

    +
    go doc
    +
    +

    +it prints the package documentation for the package in the current directory. +If the package is a command (package main), the exported symbols of the package +are elided from the presentation unless the -cmd flag is provided. +

    +

    +When run with one argument, the argument is treated as a Go-syntax-like +representation of the item to be documented. What the argument selects depends +on what is installed in GOROOT and GOPATH, as well as the form of the argument, +which is schematically one of these: +

    +
    go doc <pkg>
    +go doc <sym>[.<method>]
    +go doc [<pkg>.]<sym>[.<method>]
    +go doc [<pkg>.][<sym>.]<method>
    +
    +

    +The first item in this list matched by the argument is the one whose documentation +is printed. (See the examples below.) However, if the argument starts with a capital +letter it is assumed to identify a symbol or method in the current directory. +

    +

    +For packages, the order of scanning is determined lexically in breadth-first order. +That is, the package presented is the one that matches the search and is nearest +the root and lexically first at its level of the hierarchy. The GOROOT tree is +always scanned in its entirety before GOPATH. +

    +

    +If there is no package specified or matched, the package in the current +directory is selected, so "go doc Foo" shows the documentation for symbol Foo in +the current package. +

    +

    +The package path must be either a qualified path or a proper suffix of a +path. The go tool's usual package mechanism does not apply: package path +elements like . and ... are not implemented by go doc. +

    +

    +When run with two arguments, the first must be a full package path (not just a +suffix), and the second is a symbol or symbol and method; this is similar to the +syntax accepted by godoc: +

    +
    go doc <pkg> <sym>[.<method>]
    +
    +

    +In all forms, when matching symbols, lower-case letters in the argument match +either case but upper-case letters match exactly. This means that there may be +multiple matches of a lower-case argument in a package if different symbols have +different cases. If this occurs, documentation for all matches is printed. +

    +

    +Examples: +

    +
    go doc
    +	Show documentation for current package.
    +go doc Foo
    +	Show documentation for Foo in the current package.
    +	(Foo starts with a capital letter so it cannot match
    +	a package path.)
    +go doc encoding/json
    +	Show documentation for the encoding/json package.
    +go doc json
    +	Shorthand for encoding/json.
    +go doc json.Number (or go doc json.number)
    +	Show documentation and method summary for json.Number.
    +go doc json.Number.Int64 (or go doc json.number.int64)
    +	Show documentation for json.Number's Int64 method.
    +go doc cmd/doc
    +	Show package docs for the doc command.
    +go doc -cmd cmd/doc
    +	Show package docs and exported symbols within the doc command.
    +go doc template.new
    +	Show documentation for html/template's New function.
    +	(html/template is lexically before text/template)
    +go doc text/template.new # One argument
    +	Show documentation for text/template's New function.
    +go doc text/template new # Two arguments
    +	Show documentation for text/template's New function.
    +
    +At least in the current tree, these invocations all print the
    +documentation for json.Decoder's Decode method:
    +
    +go doc json.Decoder.Decode
    +go doc json.decoder.decode
    +go doc json.decode
    +cd go/src/encoding/json; go doc decode
    +
    +

    +Flags: +

    +
    -c
    +	Respect case when matching symbols.
    +-cmd
    +	Treat a command (package main) like a regular package.
    +	Otherwise package main's exported symbols are hidden
    +	when showing the package's top-level documentation.
    +-u
    +	Show documentation for unexported as well as exported
    +	symbols and methods.
    +
    +

    Print Go environment information

    +

    +Usage: +

    +
    go env [var ...]
    +
    +

    +Env prints Go environment information. +

    +

    +By default env prints information as a shell script +(on Windows, a batch file). If one or more variable +names is given as arguments, env prints the value of +each named variable on its own line. +

    +

    Start a bug report

    +

    +Usage: +

    +
    go bug
    +
    +

    +Bug opens the default browser and starts a new bug report. +The report includes useful system information. +

    +

    Run go tool fix on packages

    +

    +Usage: +

    +
    go fix [packages]
    +
    +

    +Fix runs the Go fix command on the packages named by the import paths. +

    +

    +For more about fix, see 'go doc cmd/fix'. +For more about specifying packages, see 'go help packages'. +

    +

    +To run fix with specific options, run 'go tool fix'. +

    +

    +See also: go fmt, go vet. +

    +

    Run gofmt on package sources

    +

    +Usage: +

    +
    go fmt [-n] [-x] [packages]
    +
    +

    +Fmt runs the command 'gofmt -l -w' on the packages named +by the import paths. It prints the names of the files that are modified. +

    +

    +For more about gofmt, see 'go doc cmd/gofmt'. +For more about specifying packages, see 'go help packages'. +

    +

    +The -n flag prints commands that would be executed. +The -x flag prints commands as they are executed. +

    +

    +To run gofmt with specific options, run gofmt itself. +

    +

    +See also: go fix, go vet. +

    +

    Generate Go files by processing source

    +

    +Usage: +

    +
    go generate [-run regexp] [-n] [-v] [-x] [build flags] [file.go... | packages]
    +
    +

    +Generate runs commands described by directives within existing +files. Those commands can run any process but the intent is to +create or update Go source files. +

    +

    +Go generate is never run automatically by go build, go get, go test, +and so on. It must be run explicitly. +

    +

    +Go generate scans the file for directives, which are lines of +the form, +

    +
    //go:generate command argument...
    +
    +

    +(note: no leading spaces and no space in "//go") where command +is the generator to be run, corresponding to an executable file +that can be run locally. It must either be in the shell path +(gofmt), a fully qualified path (/usr/you/bin/mytool), or a +command alias, described below. +

    +

    +Note that go generate does not parse the file, so lines that look +like directives in comments or multiline strings will be treated +as directives. +

    +

    +The arguments to the directive are space-separated tokens or +double-quoted strings passed to the generator as individual +arguments when it is run. +

    +

    +Quoted strings use Go syntax and are evaluated before execution; a +quoted string appears as a single argument to the generator. +

    +

    +Go generate sets several variables when it runs the generator: +

    +
    $GOARCH
    +	The execution architecture (arm, amd64, etc.)
    +$GOOS
    +	The execution operating system (linux, windows, etc.)
    +$GOFILE
    +	The base name of the file.
    +$GOLINE
    +	The line number of the directive in the source file.
    +$GOPACKAGE
    +	The name of the package of the file containing the directive.
    +$DOLLAR
    +	A dollar sign.
    +
    +

    +Other than variable substitution and quoted-string evaluation, no +special processing such as "globbing" is performed on the command +line. +

    +

    +As a last step before running the command, any invocations of any +environment variables with alphanumeric names, such as $GOFILE or +$HOME, are expanded throughout the command line. The syntax for +variable expansion is $NAME on all operating systems. Due to the +order of evaluation, variables are expanded even inside quoted +strings. If the variable NAME is not set, $NAME expands to the +empty string. +

    +

    +A directive of the form, +

    +
    //go:generate -command xxx args...
    +
    +

    +specifies, for the remainder of this source file only, that the +string xxx represents the command identified by the arguments. This +can be used to create aliases or to handle multiword generators. +For example, +

    +
    //go:generate -command foo go tool foo
    +
    +

    +specifies that the command "foo" represents the generator +"go tool foo". +

    +

    +Generate processes packages in the order given on the command line, +one at a time. If the command line lists .go files, they are treated +as a single package. Within a package, generate processes the +source files in a package in file name order, one at a time. Within +a source file, generate runs generators in the order they appear +in the file, one at a time. +

    +

    +If any generator returns an error exit status, "go generate" skips +all further processing for that package. +

    +

    +The generator is run in the package's source directory. +

    +

    +Go generate accepts one specific flag: +

    +
    -run=""
    +	if non-empty, specifies a regular expression to select
    +	directives whose full original source text (excluding
    +	any trailing spaces and final newline) matches the
    +	expression.
    +
    +

    +It also accepts the standard build flags including -v, -n, and -x. +The -v flag prints the names of packages and files as they are +processed. +The -n flag prints commands that would be executed. +The -x flag prints commands as they are executed. +

    +

    +For more about build flags, see 'go help build'. +

    +

    +For more about specifying packages, see 'go help packages'. +

    +

    Download and install packages and dependencies

    +

    +Usage: +

    +
    go get [-d] [-f] [-fix] [-insecure] [-t] [-u] [build flags] [packages]
    +
    +

    +Get downloads the packages named by the import paths, along with their +dependencies. It then installs the named packages, like 'go install'. +

    +

    +The -d flag instructs get to stop after downloading the packages; that is, +it instructs get not to install the packages. +

    +

    +The -f flag, valid only when -u is set, forces get -u not to verify that +each package has been checked out from the source control repository +implied by its import path. This can be useful if the source is a local fork +of the original. +

    +

    +The -fix flag instructs get to run the fix tool on the downloaded packages +before resolving dependencies or building the code. +

    +

    +The -insecure flag permits fetching from repositories and resolving +custom domains using insecure schemes such as HTTP. Use with caution. +

    +

    +The -t flag instructs get to also download the packages required to build +the tests for the specified packages. +

    +

    +The -u flag instructs get to use the network to update the named packages +and their dependencies. By default, get uses the network to check out +missing packages but does not use it to look for updates to existing packages. +

    +

    +The -v flag enables verbose progress and debug output. +

    +

    +Get also accepts build flags to control the installation. See 'go help build'. +

    +

    +When checking out a new package, get creates the target directory +GOPATH/src/<import-path>. If the GOPATH contains multiple entries, +get uses the first one. For more details see: 'go help gopath'. +

    +

    +When checking out or updating a package, get looks for a branch or tag +that matches the locally installed version of Go. The most important +rule is that if the local installation is running version "go1", get +searches for a branch or tag named "go1". If no such version exists it +retrieves the most recent version of the package. +

    +

    +When go get checks out or updates a Git repository, +it also updates any git submodules referenced by the repository. +

    +

    +Get never checks out or updates code stored in vendor directories. +

    +

    +For more about specifying packages, see 'go help packages'. +

    +

    +For more about how 'go get' finds source code to +download, see 'go help importpath'. +

    +

    +See also: go build, go install, go clean. +

    +

    Compile and install packages and dependencies

    +

    +Usage: +

    +
    go install [build flags] [packages]
    +
    +

    +Install compiles and installs the packages named by the import paths, +along with their dependencies. +

    +

    +For more about the build flags, see 'go help build'. +For more about specifying packages, see 'go help packages'. +

    +

    +See also: go build, go get, go clean. +

    +

    List packages

    +

    +Usage: +

    +
    go list [-e] [-f format] [-json] [build flags] [packages]
    +
    +

    +List lists the packages named by the import paths, one per line. +

    +

    +The default output shows the package import path: +

    +
    bytes
    +encoding/json
    +github.com/gorilla/mux
    +golang.org/x/net/html
    +
    +

    +The -f flag specifies an alternate format for the list, using the +syntax of package template. The default output is equivalent to -f +''. The struct being passed to the template is: +

    +
    type Package struct {
    +    Dir           string // directory containing package sources
    +    ImportPath    string // import path of package in dir
    +    ImportComment string // path in import comment on package statement
    +    Name          string // package name
    +    Doc           string // package documentation string
    +    Target        string // install path
    +    Shlib         string // the shared library that contains this package (only set when -linkshared)
    +    Goroot        bool   // is this package in the Go root?
    +    Standard      bool   // is this package part of the standard Go library?
    +    Stale         bool   // would 'go install' do anything for this package?
    +    StaleReason   string // explanation for Stale==true
    +    Root          string // Go root or Go path dir containing this package
    +    ConflictDir   string // this directory shadows Dir in $GOPATH
    +    BinaryOnly    bool   // binary-only package: cannot be recompiled from sources
    +
    +    // Source files
    +    GoFiles        []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
    +    CgoFiles       []string // .go sources files that import "C"
    +    IgnoredGoFiles []string // .go sources ignored due to build constraints
    +    CFiles         []string // .c source files
    +    CXXFiles       []string // .cc, .cxx and .cpp source files
    +    MFiles         []string // .m source files
    +    HFiles         []string // .h, .hh, .hpp and .hxx source files
    +    FFiles         []string // .f, .F, .for and .f90 Fortran source files
    +    SFiles         []string // .s source files
    +    SwigFiles      []string // .swig files
    +    SwigCXXFiles   []string // .swigcxx files
    +    SysoFiles      []string // .syso object files to add to archive
    +    TestGoFiles    []string // _test.go files in package
    +    XTestGoFiles   []string // _test.go files outside package
    +
    +    // Cgo directives
    +    CgoCFLAGS    []string // cgo: flags for C compiler
    +    CgoCPPFLAGS  []string // cgo: flags for C preprocessor
    +    CgoCXXFLAGS  []string // cgo: flags for C++ compiler
    +    CgoFFLAGS    []string // cgo: flags for Fortran compiler
    +    CgoLDFLAGS   []string // cgo: flags for linker
    +    CgoPkgConfig []string // cgo: pkg-config names
    +
    +    // Dependency information
    +    Imports      []string // import paths used by this package
    +    Deps         []string // all (recursively) imported dependencies
    +    TestImports  []string // imports from TestGoFiles
    +    XTestImports []string // imports from XTestGoFiles
    +
    +    // Error information
    +    Incomplete bool            // this package or a dependency has an error
    +    Error      *PackageError   // error loading package
    +    DepsErrors []*PackageError // errors loading dependencies
    +}
    +
    +

    +Packages stored in vendor directories report an ImportPath that includes the +path to the vendor directory (for example, "d/vendor/p" instead of "p"), +so that the ImportPath uniquely identifies a given copy of a package. +The Imports, Deps, TestImports, and XTestImports lists also contain these +expanded imports paths. See golang.org/s/go15vendor for more about vendoring. +

    +

    +The error information, if any, is +

    +
    type PackageError struct {
    +    ImportStack   []string // shortest path from package named on command line to this one
    +    Pos           string   // position of error (if present, file:line:col)
    +    Err           string   // the error itself
    +}
    +
    +

    +The template function "join" calls strings.Join. +

    +

    +The template function "context" returns the build context, defined as: +

    +
    type Context struct {
    +	GOARCH        string   // target architecture
    +	GOOS          string   // target operating system
    +	GOROOT        string   // Go root
    +	GOPATH        string   // Go path
    +	CgoEnabled    bool     // whether cgo can be used
    +	UseAllFiles   bool     // use files regardless of +build lines, file names
    +	Compiler      string   // compiler to assume when computing target paths
    +	BuildTags     []string // build constraints to match in +build lines
    +	ReleaseTags   []string // releases the current release is compatible with
    +	InstallSuffix string   // suffix to use in the name of the install dir
    +}
    +
    +

    +For more information about the meaning of these fields see the documentation +for the go/build package's Context type. +

    +

    +The -json flag causes the package data to be printed in JSON format +instead of using the template format. +

    +

    +The -e flag changes the handling of erroneous packages, those that +cannot be found or are malformed. By default, the list command +prints an error to standard error for each erroneous package and +omits the packages from consideration during the usual printing. +With the -e flag, the list command never prints errors to standard +error and instead processes the erroneous packages with the usual +printing. Erroneous packages will have a non-empty ImportPath and +a non-nil Error field; other information may or may not be missing +(zeroed). +

    +

    +For more about build flags, see 'go help build'. +

    +

    +For more about specifying packages, see 'go help packages'. +

    +

    Compile and run Go program

    +

    +Usage: +

    +
    go run [build flags] [-exec xprog] gofiles... [arguments...]
    +
    +

    +Run compiles and runs the main package comprising the named Go source files. +A Go source file is defined to be a file ending in a literal ".go" suffix. +

    +

    +By default, 'go run' runs the compiled binary directly: 'a.out arguments...'. +If the -exec flag is given, 'go run' invokes the binary using xprog: +

    +
    'xprog a.out arguments...'.
    +
    +

    +If the -exec flag is not given, GOOS or GOARCH is different from the system +default, and a program named go_$GOOS_$GOARCH_exec can be found +on the current search path, 'go run' invokes the binary using that program, +for example 'go_nacl_386_exec a.out arguments...'. This allows execution of +cross-compiled programs when a simulator or other execution method is +available. +

    +

    +For more about build flags, see 'go help build'. +

    +

    +See also: go build. +

    +

    Test packages

    +

    +Usage: +

    +
    go test [build/test flags] [packages] [build/test flags & test binary flags]
    +
    +

    +'Go test' automates testing the packages named by the import paths. +It prints a summary of the test results in the format: +

    +
    ok   archive/tar   0.011s
    +FAIL archive/zip   0.022s
    +ok   compress/gzip 0.033s
    +...
    +
    +

    +followed by detailed output for each failed package. +

    +

    +'Go test' recompiles each package along with any files with names matching +the file pattern "*_test.go". +Files whose names begin with "_" (including "_test.go") or "." are ignored. +These additional files can contain test functions, benchmark functions, and +example functions. See 'go help testfunc' for more. +Each listed package causes the execution of a separate test binary. +

    +

    +Test files that declare a package with the suffix "_test" will be compiled as a +separate package, and then linked and run with the main test binary. +

    +

    +The go tool will ignore a directory named "testdata", making it available +to hold ancillary data needed by the tests. +

    +

    +By default, go test needs no arguments. It compiles and tests the package +with source in the current directory, including tests, and runs the tests. +

    +

    +The package is built in a temporary directory so it does not interfere with the +non-test installation. +

    +

    +In addition to the build flags, the flags handled by 'go test' itself are: +

    +
    -args
    +    Pass the remainder of the command line (everything after -args)
    +    to the test binary, uninterpreted and unchanged.
    +    Because this flag consumes the remainder of the command line,
    +    the package list (if present) must appear before this flag.
    +
    +-c
    +    Compile the test binary to pkg.test but do not run it
    +    (where pkg is the last element of the package's import path).
    +    The file name can be changed with the -o flag.
    +
    +-exec xprog
    +    Run the test binary using xprog. The behavior is the same as
    +    in 'go run'. See 'go help run' for details.
    +
    +-i
    +    Install packages that are dependencies of the test.
    +    Do not run the test.
    +
    +-o file
    +    Compile the test binary to the named file.
    +    The test still runs (unless -c or -i is specified).
    +
    +

    +The test binary also accepts flags that control execution of the test; these +flags are also accessible by 'go test'. See 'go help testflag' for details. +

    +

    +For more about build flags, see 'go help build'. +For more about specifying packages, see 'go help packages'. +

    +

    +See also: go build, go vet. +

    +

    Run specified go tool

    +

    +Usage: +

    +
    go tool [-n] command [args...]
    +
    +

    +Tool runs the go tool command identified by the arguments. +With no arguments it prints the list of known tools. +

    +

    +The -n flag causes tool to print the command that would be +executed but not execute it. +

    +

    +For more about each tool command, see 'go tool command -h'. +

    +

    Print Go version

    +

    +Usage: +

    +
    go version
    +
    +

    +Version prints the Go version, as reported by runtime.Version. +

    +

    Run go tool vet on packages

    +

    +Usage: +

    +
    go vet [-n] [-x] [build flags] [packages]
    +
    +

    +Vet runs the Go vet command on the packages named by the import paths. +

    +

    +For more about vet, see 'go doc cmd/vet'. +For more about specifying packages, see 'go help packages'. +

    +

    +To run the vet tool with specific options, run 'go tool vet'. +

    +

    +The -n flag prints commands that would be executed. +The -x flag prints commands as they are executed. +

    +

    +For more about build flags, see 'go help build'. +

    +

    +See also: go fmt, go fix. +

    +

    Calling between Go and C

    +

    +There are two different ways to call between Go and C/C++ code. +

    +

    +The first is the cgo tool, which is part of the Go distribution. For +information on how to use it see the cgo documentation (go doc cmd/cgo). +

    +

    +The second is the SWIG program, which is a general tool for +interfacing between languages. For information on SWIG see +http://swig.org/. When running go build, any file with a .swig +extension will be passed to SWIG. Any file with a .swigcxx extension +will be passed to SWIG with the -c++ option. +

    +

    +When either cgo or SWIG is used, go build will pass any .c, .m, .s, +or .S files to the C compiler, and any .cc, .cpp, .cxx files to the C++ +compiler. The CC or CXX environment variables may be set to determine +the C or C++ compiler, respectively, to use. +

    +

    Description of build modes

    +

    +The 'go build' and 'go install' commands take a -buildmode argument which +indicates which kind of object file is to be built. Currently supported values +are: +

    +
    -buildmode=archive
    +	Build the listed non-main packages into .a files. Packages named
    +	main are ignored.
    +
    +-buildmode=c-archive
    +	Build the listed main package, plus all packages it imports,
    +	into a C archive file. The only callable symbols will be those
    +	functions exported using a cgo //export comment. Requires
    +	exactly one main package to be listed.
    +
    +-buildmode=c-shared
    +	Build the listed main packages, plus all packages that they
    +	import, into C shared libraries. The only callable symbols will
    +	be those functions exported using a cgo //export comment.
    +	Non-main packages are ignored.
    +
    +-buildmode=default
    +	Listed main packages are built into executables and listed
    +	non-main packages are built into .a files (the default
    +	behavior).
    +
    +-buildmode=shared
    +	Combine all the listed non-main packages into a single shared
    +	library that will be used when building with the -linkshared
    +	option. Packages named main are ignored.
    +
    +-buildmode=exe
    +	Build the listed main packages and everything they import into
    +	executables. Packages not named main are ignored.
    +
    +-buildmode=pie
    +	Build the listed main packages and everything they import into
    +	position independent executables (PIE). Packages not named
    +	main are ignored.
    +
    +-buildmode=plugin
    +	Build the listed main packages, plus all packages that they
    +	import, into a Go plugin. Packages not named main are ignored.
    +
    +

    File types

    +

    +The go command examines the contents of a restricted set of files +in each directory. It identifies which files to examine based on +the extension of the file name. These extensions are: +

    +
    .go
    +	Go source files.
    +.c, .h
    +	C source files.
    +	If the package uses cgo or SWIG, these will be compiled with the
    +	OS-native compiler (typically gcc); otherwise they will
    +	trigger an error.
    +.cc, .cpp, .cxx, .hh, .hpp, .hxx
    +	C++ source files. Only useful with cgo or SWIG, and always
    +	compiled with the OS-native compiler.
    +.m
    +	Objective-C source files. Only useful with cgo, and always
    +	compiled with the OS-native compiler.
    +.s, .S
    +	Assembler source files.
    +	If the package uses cgo or SWIG, these will be assembled with the
    +	OS-native assembler (typically gcc (sic)); otherwise they
    +	will be assembled with the Go assembler.
    +.swig, .swigcxx
    +	SWIG definition files.
    +.syso
    +	System object files.
    +
    +

    +Files of each of these types except .syso may contain build +constraints, but the go command stops scanning for build constraints +at the first item in the file that is not a blank line or //-style +line comment. See the go/build package documentation for +more details. +

    +

    +Non-test Go source files can also include a //go:binary-only-package +comment, indicating that the package sources are included +for documentation only and must not be used to build the +package binary. This enables distribution of Go packages in +their compiled form alone. See the go/build package documentation +for more details. +

    +

    GOPATH environment variable

    +

    +The Go path is used to resolve import statements. +It is implemented by and documented in the go/build package. +

    +

    +The GOPATH environment variable lists places to look for Go code. +On Unix, the value is a colon-separated string. +On Windows, the value is a semicolon-separated string. +On Plan 9, the value is a list. +

    +

    +If the environment variable is unset, GOPATH defaults +to a subdirectory named "go" in the user's home directory +($HOME/go on Unix, %USERPROFILE%\go on Windows), +unless that directory holds a Go distribution. +Run "go env GOPATH" to see the current GOPATH. +

    +

    +See https://golang.org/wiki/SettingGOPATH to set a custom GOPATH. +

    +

    +Each directory listed in GOPATH must have a prescribed structure: +

    +

    +The src directory holds source code. The path below src +determines the import path or executable name. +

    +

    +The pkg directory holds installed package objects. +As in the Go tree, each target operating system and +architecture pair has its own subdirectory of pkg +(pkg/GOOS_GOARCH). +

    +

    +If DIR is a directory listed in the GOPATH, a package with +source in DIR/src/foo/bar can be imported as "foo/bar" and +has its compiled form installed to "DIR/pkg/GOOS_GOARCH/foo/bar.a". +

    +

    +The bin directory holds compiled commands. +Each command is named for its source directory, but only +the final element, not the entire path. That is, the +command with source in DIR/src/foo/quux is installed into +DIR/bin/quux, not DIR/bin/foo/quux. The "foo/" prefix is stripped +so that you can add DIR/bin to your PATH to get at the +installed commands. If the GOBIN environment variable is +set, commands are installed to the directory it names instead +of DIR/bin. GOBIN must be an absolute path. +

    +

    +Here's an example directory layout: +

    +
    GOPATH=/home/user/go
    +
    +/home/user/go/
    +    src/
    +        foo/
    +            bar/               (go code in package bar)
    +                x.go
    +            quux/              (go code in package main)
    +                y.go
    +    bin/
    +        quux                   (installed command)
    +    pkg/
    +        linux_amd64/
    +            foo/
    +                bar.a          (installed package object)
    +
    +

    +Go searches each directory listed in GOPATH to find source code, +but new packages are always downloaded into the first directory +in the list. +

    +

    +See https://golang.org/doc/code.html for an example. +

    +

    Internal Directories

    +

    +Code in or below a directory named "internal" is importable only +by code in the directory tree rooted at the parent of "internal". +Here's an extended version of the directory layout above: +

    +
    /home/user/go/
    +    src/
    +        crash/
    +            bang/              (go code in package bang)
    +                b.go
    +        foo/                   (go code in package foo)
    +            f.go
    +            bar/               (go code in package bar)
    +                x.go
    +            internal/
    +                baz/           (go code in package baz)
    +                    z.go
    +            quux/              (go code in package main)
    +                y.go
    +
    +

    +The code in z.go is imported as "foo/internal/baz", but that +import statement can only appear in source files in the subtree +rooted at foo. The source files foo/f.go, foo/bar/x.go, and +foo/quux/y.go can all import "foo/internal/baz", but the source file +crash/bang/b.go cannot. +

    +

    +See https://golang.org/s/go14internal for details. +

    +

    Vendor Directories

    +

    +Go 1.6 includes support for using local copies of external dependencies +to satisfy imports of those dependencies, often referred to as vendoring. +

    +

    +Code below a directory named "vendor" is importable only +by code in the directory tree rooted at the parent of "vendor", +and only using an import path that omits the prefix up to and +including the vendor element. +

    +

    +Here's the example from the previous section, +but with the "internal" directory renamed to "vendor" +and a new foo/vendor/crash/bang directory added: +

    +
    /home/user/go/
    +    src/
    +        crash/
    +            bang/              (go code in package bang)
    +                b.go
    +        foo/                   (go code in package foo)
    +            f.go
    +            bar/               (go code in package bar)
    +                x.go
    +            vendor/
    +                crash/
    +                    bang/      (go code in package bang)
    +                        b.go
    +                baz/           (go code in package baz)
    +                    z.go
    +            quux/              (go code in package main)
    +                y.go
    +
    +

    +The same visibility rules apply as for internal, but the code +in z.go is imported as "baz", not as "foo/vendor/baz". +

    +

    +Code in vendor directories deeper in the source tree shadows +code in higher directories. Within the subtree rooted at foo, an import +of "crash/bang" resolves to "foo/vendor/crash/bang", not the +top-level "crash/bang". +

    +

    +Code in vendor directories is not subject to import path +checking (see 'go help importpath'). +

    +

    +When 'go get' checks out or updates a git repository, it now also +updates submodules. +

    +

    +Vendor directories do not affect the placement of new repositories +being checked out for the first time by 'go get': those are always +placed in the main GOPATH, never in a vendor subtree. +

    +

    +See https://golang.org/s/go15vendor for details. +

    +

    Environment variables

    +

    +The go command, and the tools it invokes, examine a few different +environment variables. For many of these, you can see the default +value of on your system by running 'go env NAME', where NAME is the +name of the variable. +

    +

    +General-purpose environment variables: +

    +
    GCCGO
    +	The gccgo command to run for 'go build -compiler=gccgo'.
    +GOARCH
    +	The architecture, or processor, for which to compile code.
    +	Examples are amd64, 386, arm, ppc64.
    +GOBIN
    +	The directory where 'go install' will install a command.
    +GOOS
    +	The operating system for which to compile code.
    +	Examples are linux, darwin, windows, netbsd.
    +GOPATH
    +	For more details see: 'go help gopath'.
    +GORACE
    +	Options for the race detector.
    +	See https://golang.org/doc/articles/race_detector.html.
    +GOROOT
    +	The root of the go tree.
    +
    +

    +Environment variables for use with cgo: +

    +
    CC
    +	The command to use to compile C code.
    +CGO_ENABLED
    +	Whether the cgo command is supported.  Either 0 or 1.
    +CGO_CFLAGS
    +	Flags that cgo will pass to the compiler when compiling
    +	C code.
    +CGO_CPPFLAGS
    +	Flags that cgo will pass to the compiler when compiling
    +	C or C++ code.
    +CGO_CXXFLAGS
    +	Flags that cgo will pass to the compiler when compiling
    +	C++ code.
    +CGO_FFLAGS
    +	Flags that cgo will pass to the compiler when compiling
    +	Fortran code.
    +CGO_LDFLAGS
    +	Flags that cgo will pass to the compiler when linking.
    +CXX
    +	The command to use to compile C++ code.
    +PKG_CONFIG
    +	Path to pkg-config tool.
    +
    +

    +Architecture-specific environment variables: +

    +
    GOARM
    +	For GOARCH=arm, the ARM architecture for which to compile.
    +	Valid values are 5, 6, 7.
    +GO386
    +	For GOARCH=386, the floating point instruction set.
    +	Valid values are 387, sse2.
    +
    +

    +Special-purpose environment variables: +

    +
    GOROOT_FINAL
    +	The root of the installed Go tree, when it is
    +	installed in a location other than where it is built.
    +	File names in stack traces are rewritten from GOROOT to
    +	GOROOT_FINAL.
    +GO_EXTLINK_ENABLED
    +	Whether the linker should use external linking mode
    +	when using -linkmode=auto with code that uses cgo.
    +	Set to 0 to disable external linking mode, 1 to enable it.
    +GIT_ALLOW_PROTOCOL
    +	Defined by Git. A colon-separated list of schemes that are allowed to be used
    +	with git fetch/clone. If set, any scheme not explicitly mentioned will be
    +	considered insecure by 'go get'.
    +
    +

    Import path syntax

    +

    +An import path (see 'go help packages') denotes a package stored in the local +file system. In general, an import path denotes either a standard package (such +as "unicode/utf8") or a package found in one of the work spaces (For more +details see: 'go help gopath'). +

    +

    Relative import paths

    +

    +An import path beginning with ./ or ../ is called a relative path. +The toolchain supports relative import paths as a shortcut in two ways. +

    +

    +First, a relative path can be used as a shorthand on the command line. +If you are working in the directory containing the code imported as +"unicode" and want to run the tests for "unicode/utf8", you can type +"go test ./utf8" instead of needing to specify the full path. +Similarly, in the reverse situation, "go test .." will test "unicode" from +the "unicode/utf8" directory. Relative patterns are also allowed, like +"go test ./..." to test all subdirectories. See 'go help packages' for details +on the pattern syntax. +

    +

    +Second, if you are compiling a Go program not in a work space, +you can use a relative path in an import statement in that program +to refer to nearby code also not in a work space. +This makes it easy to experiment with small multipackage programs +outside of the usual work spaces, but such programs cannot be +installed with "go install" (there is no work space in which to install them), +so they are rebuilt from scratch each time they are built. +To avoid ambiguity, Go programs cannot use relative import paths +within a work space. +

    +

    Remote import paths

    +

    +Certain import paths also +describe how to obtain the source code for the package using +a revision control system. +

    +

    +A few common code hosting sites have special syntax: +

    +
    Bitbucket (Git, Mercurial)
    +
    +	import "bitbucket.org/user/project"
    +	import "bitbucket.org/user/project/sub/directory"
    +
    +GitHub (Git)
    +
    +	import "github.com/user/project"
    +	import "github.com/user/project/sub/directory"
    +
    +Launchpad (Bazaar)
    +
    +	import "launchpad.net/project"
    +	import "launchpad.net/project/series"
    +	import "launchpad.net/project/series/sub/directory"
    +
    +	import "launchpad.net/~user/project/branch"
    +	import "launchpad.net/~user/project/branch/sub/directory"
    +
    +IBM DevOps Services (Git)
    +
    +	import "hub.jazz.net/git/user/project"
    +	import "hub.jazz.net/git/user/project/sub/directory"
    +
    +

    +For code hosted on other servers, import paths may either be qualified +with the version control type, or the go tool can dynamically fetch +the import path over https/http and discover where the code resides +from a <meta> tag in the HTML. +

    +

    +To declare the code location, an import path of the form +

    +
    repository.vcs/path
    +
    +

    +specifies the given repository, with or without the .vcs suffix, +using the named version control system, and then the path inside +that repository. The supported version control systems are: +

    +
    Bazaar      .bzr
    +Git         .git
    +Mercurial   .hg
    +Subversion  .svn
    +
    +

    +For example, +

    +
    import "example.org/user/foo.hg"
    +
    +

    +denotes the root directory of the Mercurial repository at +example.org/user/foo or foo.hg, and +

    +
    import "example.org/repo.git/foo/bar"
    +
    +

    +denotes the foo/bar directory of the Git repository at +example.org/repo or repo.git. +

    +

    +When a version control system supports multiple protocols, +each is tried in turn when downloading. For example, a Git +download tries https://, then git+ssh://. +

    +

    +By default, downloads are restricted to known secure protocols +(e.g. https, ssh). To override this setting for Git downloads, the +GIT_ALLOW_PROTOCOL environment variable can be set (For more details see: +'go help environment'). +

    +

    +If the import path is not a known code hosting site and also lacks a +version control qualifier, the go tool attempts to fetch the import +over https/http and looks for a <meta> tag in the document's HTML +<head>. +

    +

    +The meta tag has the form: +

    +
    <meta name="go-import" content="import-prefix vcs repo-root">
    +
    +

    +The import-prefix is the import path corresponding to the repository +root. It must be a prefix or an exact match of the package being +fetched with "go get". If it's not an exact match, another http +request is made at the prefix to verify the <meta> tags match. +

    +

    +The meta tag should appear as early in the file as possible. +In particular, it should appear before any raw JavaScript or CSS, +to avoid confusing the go command's restricted parser. +

    +

    +The vcs is one of "git", "hg", "svn", etc, +

    +

    +The repo-root is the root of the version control system +containing a scheme and not containing a .vcs qualifier. +

    +

    +For example, +

    +
    import "example.org/pkg/foo"
    +
    +

    +will result in the following requests: +

    +
    https://example.org/pkg/foo?go-get=1 (preferred)
    +http://example.org/pkg/foo?go-get=1  (fallback, only with -insecure)
    +
    +

    +If that page contains the meta tag +

    +
    <meta name="go-import" content="example.org git https://code.org/r/p/exproj">
    +
    +

    +the go tool will verify that https://example.org/?go-get=1 contains the +same meta tag and then git clone https://code.org/r/p/exproj into +GOPATH/src/example.org. +

    +

    +New downloaded packages are written to the first directory listed in the GOPATH +environment variable (For more details see: 'go help gopath'). +

    +

    +The go command attempts to download the version of the +package appropriate for the Go release being used. +Run 'go help get' for more. +

    +

    Import path checking

    +

    +When the custom import path feature described above redirects to a +known code hosting site, each of the resulting packages has two possible +import paths, using the custom domain or the known hosting site. +

    +

    +A package statement is said to have an "import comment" if it is immediately +followed (before the next newline) by a comment of one of these two forms: +

    +
    package math // import "path"
    +package math /* import "path" */
    +
    +

    +The go command will refuse to install a package with an import comment +unless it is being referred to by that import path. In this way, import comments +let package authors make sure the custom import path is used and not a +direct path to the underlying code hosting site. +

    +

    +Import path checking is disabled for code found within vendor trees. +This makes it possible to copy code into alternate locations in vendor trees +without needing to update import comments. +

    +

    +See https://golang.org/s/go14customimport for details. +

    +

    Description of package lists

    +

    +Many commands apply to a set of packages: +

    +
    go action [packages]
    +
    +

    +Usually, [packages] is a list of import paths. +

    +

    +An import path that is a rooted path or that begins with +a . or .. element is interpreted as a file system path and +denotes the package in that directory. +

    +

    +Otherwise, the import path P denotes the package found in +the directory DIR/src/P for some DIR listed in the GOPATH +environment variable (For more details see: 'go help gopath'). +

    +

    +If no import paths are given, the action applies to the +package in the current directory. +

    +

    +There are four reserved names for paths that should not be used +for packages to be built with the go tool: +

    +

    +- "main" denotes the top-level package in a stand-alone executable. +

    +

    +- "all" expands to all package directories found in all the GOPATH +trees. For example, 'go list all' lists all the packages on the local +system. +

    +

    +- "std" is like all but expands to just the packages in the standard +Go library. +

    +

    +- "cmd" expands to the Go repository's commands and their +internal libraries. +

    +

    +Import paths beginning with "cmd/" only match source code in +the Go repository. +

    +

    +An import path is a pattern if it includes one or more "..." wildcards, +each of which can match any string, including the empty string and +strings containing slashes. Such a pattern expands to all package +directories found in the GOPATH trees with names matching the +patterns. As a special case, x/... matches x as well as x's subdirectories. +For example, net/... expands to net and packages in its subdirectories. +

    +

    +An import path can also name a package to be downloaded from +a remote repository. Run 'go help importpath' for details. +

    +

    +Every package in a program must have a unique import path. +By convention, this is arranged by starting each path with a +unique prefix that belongs to you. For example, paths used +internally at Google all begin with 'google', and paths +denoting remote repositories begin with the path to the code, +such as 'github.com/user/repo'. +

    +

    +Packages in a program need not have unique package names, +but there are two reserved package names with special meaning. +The name main indicates a command, not a library. +Commands are built into binaries and cannot be imported. +The name documentation indicates documentation for +a non-Go program in the directory. Files in package documentation +are ignored by the go command. +

    +

    +As a special case, if the package list is a list of .go files from a +single directory, the command is applied to a single synthesized +package made up of exactly those files, ignoring any build constraints +in those files and ignoring any other files in the directory. +

    +

    +Directory and file names that begin with "." or "_" are ignored +by the go tool, as are directories named "testdata". +

    +

    Description of testing flags

    +

    +The 'go test' command takes both flags that apply to 'go test' itself +and flags that apply to the resulting test binary. +

    +

    +Several of the flags control profiling and write an execution profile +suitable for "go tool pprof"; run "go tool pprof -h" for more +information. The --alloc_space, --alloc_objects, and --show_bytes +options of pprof control how the information is presented. +

    +

    +The following flags are recognized by the 'go test' command and +control the execution of any test: +

    +
    -bench regexp
    +    Run (sub)benchmarks matching a regular expression.
    +    The given regular expression is split into smaller ones by
    +    top-level '/', where each must match the corresponding part of a
    +    benchmark's identifier.
    +    By default, no benchmarks run. To run all benchmarks,
    +    use '-bench .' or '-bench=.'.
    +
    +-benchtime t
    +    Run enough iterations of each benchmark to take t, specified
    +    as a time.Duration (for example, -benchtime 1h30s).
    +    The default is 1 second (1s).
    +
    +-count n
    +    Run each test and benchmark n times (default 1).
    +    If -cpu is set, run n times for each GOMAXPROCS value.
    +    Examples are always run once.
    +
    +-cover
    +    Enable coverage analysis.
    +
    +-covermode set,count,atomic
    +    Set the mode for coverage analysis for the package[s]
    +    being tested. The default is "set" unless -race is enabled,
    +    in which case it is "atomic".
    +    The values:
    +	set: bool: does this statement run?
    +	count: int: how many times does this statement run?
    +	atomic: int: count, but correct in multithreaded tests;
    +		significantly more expensive.
    +    Sets -cover.
    +
    +-coverpkg pkg1,pkg2,pkg3
    +    Apply coverage analysis in each test to the given list of packages.
    +    The default is for each test to analyze only the package being tested.
    +    Packages are specified as import paths.
    +    Sets -cover.
    +
    +-cpu 1,2,4
    +    Specify a list of GOMAXPROCS values for which the tests or
    +    benchmarks should be executed.  The default is the current value
    +    of GOMAXPROCS.
    +
    +-parallel n
    +    Allow parallel execution of test functions that call t.Parallel.
    +    The value of this flag is the maximum number of tests to run
    +    simultaneously; by default, it is set to the value of GOMAXPROCS.
    +    Note that -parallel only applies within a single test binary.
    +    The 'go test' command may run tests for different packages
    +    in parallel as well, according to the setting of the -p flag
    +    (see 'go help build').
    +
    +-run regexp
    +    Run only those tests and examples matching the regular expression.
    +    For tests the regular expression is split into smaller ones by
    +    top-level '/', where each must match the corresponding part of a
    +    test's identifier.
    +
    +-short
    +    Tell long-running tests to shorten their run time.
    +    It is off by default but set during all.bash so that installing
    +    the Go tree can run a sanity check but not spend time running
    +    exhaustive tests.
    +
    +-timeout t
    +    If a test runs longer than t, panic.
    +    The default is 10 minutes (10m).
    +
    +-v
    +    Verbose output: log all tests as they are run. Also print all
    +    text from Log and Logf calls even if the test succeeds.
    +
    +

    +The following flags are also recognized by 'go test' and can be used to +profile the tests during execution: +

    +
    -benchmem
    +    Print memory allocation statistics for benchmarks.
    +
    +-blockprofile block.out
    +    Write a goroutine blocking profile to the specified file
    +    when all tests are complete.
    +    Writes test binary as -c would.
    +
    +-blockprofilerate n
    +    Control the detail provided in goroutine blocking profiles by
    +    calling runtime.SetBlockProfileRate with n.
    +    See 'go doc runtime.SetBlockProfileRate'.
    +    The profiler aims to sample, on average, one blocking event every
    +    n nanoseconds the program spends blocked.  By default,
    +    if -test.blockprofile is set without this flag, all blocking events
    +    are recorded, equivalent to -test.blockprofilerate=1.
    +
    +-coverprofile cover.out
    +    Write a coverage profile to the file after all tests have passed.
    +    Sets -cover.
    +
    +-cpuprofile cpu.out
    +    Write a CPU profile to the specified file before exiting.
    +    Writes test binary as -c would.
    +
    +-memprofile mem.out
    +    Write a memory profile to the file after all tests have passed.
    +    Writes test binary as -c would.
    +
    +-memprofilerate n
    +    Enable more precise (and expensive) memory profiles by setting
    +    runtime.MemProfileRate.  See 'go doc runtime.MemProfileRate'.
    +    To profile all memory allocations, use -test.memprofilerate=1
    +    and pass --alloc_space flag to the pprof tool.
    +
    +-mutexprofile mutex.out
    +    Write a mutex contention profile to the specified file
    +    when all tests are complete.
    +    Writes test binary as -c would.
    +
    +-mutexprofilefraction n
    +    Sample 1 in n stack traces of goroutines holding a
    +    contended mutex.
    +
    +-outputdir directory
    +    Place output files from profiling in the specified directory,
    +    by default the directory in which "go test" is running.
    +
    +-trace trace.out
    +    Write an execution trace to the specified file before exiting.
    +
    +

    +Each of these flags is also recognized with an optional 'test.' prefix, +as in -test.v. When invoking the generated test binary (the result of +'go test -c') directly, however, the prefix is mandatory. +

    +

    +The 'go test' command rewrites or removes recognized flags, +as appropriate, both before and after the optional package list, +before invoking the test binary. +

    +

    +For instance, the command +

    +
    go test -v -myflag testdata -cpuprofile=prof.out -x
    +
    +

    +will compile the test binary and then run it as +

    +
    pkg.test -test.v -myflag testdata -test.cpuprofile=prof.out
    +
    +

    +(The -x flag is removed because it applies only to the go command's +execution, not to the test itself.) +

    +

    +The test flags that generate profiles (other than for coverage) also +leave the test binary in pkg.test for use when analyzing the profiles. +

    +

    +When 'go test' runs a test binary, it does so from within the +corresponding package's source code directory. Depending on the test, +it may be necessary to do the same when invoking a generated test +binary directly. +

    +

    +The command-line package list, if present, must appear before any +flag not known to the go test command. Continuing the example above, +the package list would have to appear before -myflag, but could appear +on either side of -v. +

    +

    +To keep an argument for a test binary from being interpreted as a +known flag or a package name, use -args (see 'go help test') which +passes the remainder of the command line through to the test binary +uninterpreted and unaltered. +

    +

    +For instance, the command +

    +
    go test -v -args -x -v
    +
    +

    +will compile the test binary and then run it as +

    +
    pkg.test -test.v -x -v
    +
    +

    +Similarly, +

    +
    go test -args math
    +
    +

    +will compile the test binary and then run it as +

    +
    pkg.test math
    +
    +

    +In the first example, the -x and the second -v are passed through to the +test binary unchanged and with no effect on the go command itself. +In the second example, the argument math is passed through to the test +binary, instead of being interpreted as the package list. +

    +

    Description of testing functions

    +

    +The 'go test' command expects to find test, benchmark, and example functions +in the "*_test.go" files corresponding to the package under test. +

    +

    +A test function is one named TestXXX (where XXX is any alphanumeric string +not starting with a lower case letter) and should have the signature, +

    +
    func TestXXX(t *testing.T) { ... }
    +
    +

    +A benchmark function is one named BenchmarkXXX and should have the signature, +

    +
    func BenchmarkXXX(b *testing.B) { ... }
    +
    +

    +An example function is similar to a test function but, instead of using +*testing.T to report success or failure, prints output to os.Stdout. +If the last comment in the function starts with "Output:" then the output +is compared exactly against the comment (see examples below). If the last +comment begins with "Unordered output:" then the output is compared to the +comment, however the order of the lines is ignored. An example with no such +comment is compiled but not executed. An example with no text after +"Output:" is compiled, executed, and expected to produce no output. +

    +

    +Godoc displays the body of ExampleXXX to demonstrate the use +of the function, constant, or variable XXX. An example of a method M with +receiver type T or *T is named ExampleT_M. There may be multiple examples +for a given function, constant, or variable, distinguished by a trailing _xxx, +where xxx is a suffix not beginning with an upper case letter. +

    +

    +Here is an example of an example: +

    +
    func ExamplePrintln() {
    +	Println("The output of\nthis example.")
    +	// Output: The output of
    +	// this example.
    +}
    +
    +

    +Here is another example where the ordering of the output is ignored: +

    +
    func ExamplePerm() {
    +	for _, value := range Perm(4) {
    +		fmt.Println(value)
    +	}
    +
    +	// Unordered output: 4
    +	// 2
    +	// 1
    +	// 3
    +	// 0
    +}
    +
    +

    +The entire test file is presented as the example when it contains a single +example function, at least one other function, type, variable, or constant +declaration, and no test or benchmark functions. +

    +

    +See the documentation of the testing package for more information. +

    + + + +
    +
    + + + + + + + + +`)) diff --git a/vendor/golang.org/x/net/http2/h2i/README.md b/vendor/golang.org/x/net/http2/h2i/README.md new file mode 100644 index 0000000..fb5c5ef --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2i/README.md @@ -0,0 +1,97 @@ +# h2i + +**h2i** is an interactive HTTP/2 ("h2") console debugger. Miss the good ol' +days of telnetting to your HTTP/1.n servers? We're bringing you +back. + +Features: +- send raw HTTP/2 frames + - PING + - SETTINGS + - HEADERS + - etc +- type in HTTP/1.n and have it auto-HPACK/frame-ify it for HTTP/2 +- pretty print all received HTTP/2 frames from the peer (including HPACK decoding) +- tab completion of commands, options + +Not yet features, but soon: +- unnecessary CONTINUATION frames on short boundaries, to test peer implementations +- request bodies (DATA frames) +- send invalid frames for testing server implementations (supported by underlying Framer) + +Later: +- act like a server + +## Installation + +``` +$ go get golang.org/x/net/http2/h2i +$ h2i +``` + +## Demo + +``` +$ h2i +Usage: h2i + + -insecure + Whether to skip TLS cert validation + -nextproto string + Comma-separated list of NPN/ALPN protocol names to negotiate. (default "h2,h2-14") + +$ h2i google.com +Connecting to google.com:443 ... +Connected to 74.125.224.41:443 +Negotiated protocol "h2-14" +[FrameHeader SETTINGS len=18] + [MAX_CONCURRENT_STREAMS = 100] + [INITIAL_WINDOW_SIZE = 1048576] + [MAX_FRAME_SIZE = 16384] +[FrameHeader WINDOW_UPDATE len=4] + Window-Increment = 983041 + +h2i> PING h2iSayHI +[FrameHeader PING flags=ACK len=8] + Data = "h2iSayHI" +h2i> headers +(as HTTP/1.1)> GET / HTTP/1.1 +(as HTTP/1.1)> Host: ip.appspot.com +(as HTTP/1.1)> User-Agent: h2i/brad-n-blake +(as HTTP/1.1)> +Opening Stream-ID 1: + :authority = ip.appspot.com + :method = GET + :path = / + :scheme = https + user-agent = h2i/brad-n-blake +[FrameHeader HEADERS flags=END_HEADERS stream=1 len=77] + :status = "200" + alternate-protocol = "443:quic,p=1" + content-length = "15" + content-type = "text/html" + date = "Fri, 01 May 2015 23:06:56 GMT" + server = "Google Frontend" +[FrameHeader DATA flags=END_STREAM stream=1 len=15] + "173.164.155.78\n" +[FrameHeader PING len=8] + Data = "\x00\x00\x00\x00\x00\x00\x00\x00" +h2i> ping +[FrameHeader PING flags=ACK len=8] + Data = "h2i_ping" +h2i> ping +[FrameHeader PING flags=ACK len=8] + Data = "h2i_ping" +h2i> ping +[FrameHeader GOAWAY len=22] + Last-Stream-ID = 1; Error-Code = PROTOCOL_ERROR (1) + +ReadFrame: EOF +``` + +## Status + +Quick few hour hack. So much yet to do. Feel free to file issues for +bugs or wishlist items, but [@bmizerany](https://github.com/bmizerany/) +and I aren't yet accepting pull requests until things settle down. + diff --git a/vendor/golang.org/x/net/http2/h2i/h2i.go b/vendor/golang.org/x/net/http2/h2i/h2i.go new file mode 100644 index 0000000..76c7787 --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2i/h2i.go @@ -0,0 +1,509 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !plan9,!solaris + +/* +The h2i command is an interactive HTTP/2 console. + +Usage: + $ h2i [flags] + +Interactive commands in the console: (all parts case-insensitive) + + ping [data] + settings ack + settings FOO=n BAR=z + headers (open a new stream by typing HTTP/1.1) +*/ +package main + +import ( + "bufio" + "bytes" + "crypto/tls" + "errors" + "flag" + "fmt" + "io" + "log" + "net" + "net/http" + "os" + "regexp" + "strconv" + "strings" + + "golang.org/x/crypto/ssh/terminal" + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" +) + +// Flags +var ( + flagNextProto = flag.String("nextproto", "h2,h2-14", "Comma-separated list of NPN/ALPN protocol names to negotiate.") + flagInsecure = flag.Bool("insecure", false, "Whether to skip TLS cert validation") + flagSettings = flag.String("settings", "empty", "comma-separated list of KEY=value settings for the initial SETTINGS frame. The magic value 'empty' sends an empty initial settings frame, and the magic value 'omit' causes no initial settings frame to be sent.") +) + +type command struct { + run func(*h2i, []string) error // required + + // complete optionally specifies tokens (case-insensitive) which are + // valid for this subcommand. + complete func() []string +} + +var commands = map[string]command{ + "ping": {run: (*h2i).cmdPing}, + "settings": { + run: (*h2i).cmdSettings, + complete: func() []string { + return []string{ + "ACK", + http2.SettingHeaderTableSize.String(), + http2.SettingEnablePush.String(), + http2.SettingMaxConcurrentStreams.String(), + http2.SettingInitialWindowSize.String(), + http2.SettingMaxFrameSize.String(), + http2.SettingMaxHeaderListSize.String(), + } + }, + }, + "quit": {run: (*h2i).cmdQuit}, + "headers": {run: (*h2i).cmdHeaders}, +} + +func usage() { + fmt.Fprintf(os.Stderr, "Usage: h2i \n\n") + flag.PrintDefaults() +} + +// withPort adds ":443" if another port isn't already present. +func withPort(host string) string { + if _, _, err := net.SplitHostPort(host); err != nil { + return net.JoinHostPort(host, "443") + } + return host +} + +// withoutPort strips the port from addr if present. +func withoutPort(addr string) string { + if h, _, err := net.SplitHostPort(addr); err == nil { + return h + } + return addr +} + +// h2i is the app's state. +type h2i struct { + host string + tc *tls.Conn + framer *http2.Framer + term *terminal.Terminal + + // owned by the command loop: + streamID uint32 + hbuf bytes.Buffer + henc *hpack.Encoder + + // owned by the readFrames loop: + peerSetting map[http2.SettingID]uint32 + hdec *hpack.Decoder +} + +func main() { + flag.Usage = usage + flag.Parse() + if flag.NArg() != 1 { + usage() + os.Exit(2) + } + log.SetFlags(0) + + host := flag.Arg(0) + app := &h2i{ + host: host, + peerSetting: make(map[http2.SettingID]uint32), + } + app.henc = hpack.NewEncoder(&app.hbuf) + + if err := app.Main(); err != nil { + if app.term != nil { + app.logf("%v\n", err) + } else { + fmt.Fprintf(os.Stderr, "%v\n", err) + } + os.Exit(1) + } + fmt.Fprintf(os.Stdout, "\n") +} + +func (app *h2i) Main() error { + cfg := &tls.Config{ + ServerName: withoutPort(app.host), + NextProtos: strings.Split(*flagNextProto, ","), + InsecureSkipVerify: *flagInsecure, + } + + hostAndPort := withPort(app.host) + log.Printf("Connecting to %s ...", hostAndPort) + tc, err := tls.Dial("tcp", hostAndPort, cfg) + if err != nil { + return fmt.Errorf("Error dialing %s: %v", withPort(app.host), err) + } + log.Printf("Connected to %v", tc.RemoteAddr()) + defer tc.Close() + + if err := tc.Handshake(); err != nil { + return fmt.Errorf("TLS handshake: %v", err) + } + if !*flagInsecure { + if err := tc.VerifyHostname(app.host); err != nil { + return fmt.Errorf("VerifyHostname: %v", err) + } + } + state := tc.ConnectionState() + log.Printf("Negotiated protocol %q", state.NegotiatedProtocol) + if !state.NegotiatedProtocolIsMutual || state.NegotiatedProtocol == "" { + return fmt.Errorf("Could not negotiate protocol mutually") + } + + if _, err := io.WriteString(tc, http2.ClientPreface); err != nil { + return err + } + + app.framer = http2.NewFramer(tc, tc) + + oldState, err := terminal.MakeRaw(int(os.Stdin.Fd())) + if err != nil { + return err + } + defer terminal.Restore(0, oldState) + + var screen = struct { + io.Reader + io.Writer + }{os.Stdin, os.Stdout} + + app.term = terminal.NewTerminal(screen, "h2i> ") + lastWord := regexp.MustCompile(`.+\W(\w+)$`) + app.term.AutoCompleteCallback = func(line string, pos int, key rune) (newLine string, newPos int, ok bool) { + if key != '\t' { + return + } + if pos != len(line) { + // TODO: we're being lazy for now, only supporting tab completion at the end. + return + } + // Auto-complete for the command itself. + if !strings.Contains(line, " ") { + var name string + name, _, ok = lookupCommand(line) + if !ok { + return + } + return name, len(name), true + } + _, c, ok := lookupCommand(line[:strings.IndexByte(line, ' ')]) + if !ok || c.complete == nil { + return + } + if strings.HasSuffix(line, " ") { + app.logf("%s", strings.Join(c.complete(), " ")) + return line, pos, true + } + m := lastWord.FindStringSubmatch(line) + if m == nil { + return line, len(line), true + } + soFar := m[1] + var match []string + for _, cand := range c.complete() { + if len(soFar) > len(cand) || !strings.EqualFold(cand[:len(soFar)], soFar) { + continue + } + match = append(match, cand) + } + if len(match) == 0 { + return + } + if len(match) > 1 { + // TODO: auto-complete any common prefix + app.logf("%s", strings.Join(match, " ")) + return line, pos, true + } + newLine = line[:len(line)-len(soFar)] + match[0] + return newLine, len(newLine), true + + } + + errc := make(chan error, 2) + go func() { errc <- app.readFrames() }() + go func() { errc <- app.readConsole() }() + return <-errc +} + +func (app *h2i) logf(format string, args ...interface{}) { + fmt.Fprintf(app.term, format+"\r\n", args...) +} + +func (app *h2i) readConsole() error { + if s := *flagSettings; s != "omit" { + var args []string + if s != "empty" { + args = strings.Split(s, ",") + } + _, c, ok := lookupCommand("settings") + if !ok { + panic("settings command not found") + } + c.run(app, args) + } + + for { + line, err := app.term.ReadLine() + if err == io.EOF { + return nil + } + if err != nil { + return fmt.Errorf("terminal.ReadLine: %v", err) + } + f := strings.Fields(line) + if len(f) == 0 { + continue + } + cmd, args := f[0], f[1:] + if _, c, ok := lookupCommand(cmd); ok { + err = c.run(app, args) + } else { + app.logf("Unknown command %q", line) + } + if err == errExitApp { + return nil + } + if err != nil { + return err + } + } +} + +func lookupCommand(prefix string) (name string, c command, ok bool) { + prefix = strings.ToLower(prefix) + if c, ok = commands[prefix]; ok { + return prefix, c, ok + } + + for full, candidate := range commands { + if strings.HasPrefix(full, prefix) { + if c.run != nil { + return "", command{}, false // ambiguous + } + c = candidate + name = full + } + } + return name, c, c.run != nil +} + +var errExitApp = errors.New("internal sentinel error value to quit the console reading loop") + +func (a *h2i) cmdQuit(args []string) error { + if len(args) > 0 { + a.logf("the QUIT command takes no argument") + return nil + } + return errExitApp +} + +func (a *h2i) cmdSettings(args []string) error { + if len(args) == 1 && strings.EqualFold(args[0], "ACK") { + return a.framer.WriteSettingsAck() + } + var settings []http2.Setting + for _, arg := range args { + if strings.EqualFold(arg, "ACK") { + a.logf("Error: ACK must be only argument with the SETTINGS command") + return nil + } + eq := strings.Index(arg, "=") + if eq == -1 { + a.logf("Error: invalid argument %q (expected SETTING_NAME=nnnn)", arg) + return nil + } + sid, ok := settingByName(arg[:eq]) + if !ok { + a.logf("Error: unknown setting name %q", arg[:eq]) + return nil + } + val, err := strconv.ParseUint(arg[eq+1:], 10, 32) + if err != nil { + a.logf("Error: invalid argument %q (expected SETTING_NAME=nnnn)", arg) + return nil + } + settings = append(settings, http2.Setting{ + ID: sid, + Val: uint32(val), + }) + } + a.logf("Sending: %v", settings) + return a.framer.WriteSettings(settings...) +} + +func settingByName(name string) (http2.SettingID, bool) { + for _, sid := range [...]http2.SettingID{ + http2.SettingHeaderTableSize, + http2.SettingEnablePush, + http2.SettingMaxConcurrentStreams, + http2.SettingInitialWindowSize, + http2.SettingMaxFrameSize, + http2.SettingMaxHeaderListSize, + } { + if strings.EqualFold(sid.String(), name) { + return sid, true + } + } + return 0, false +} + +func (app *h2i) cmdPing(args []string) error { + if len(args) > 1 { + app.logf("invalid PING usage: only accepts 0 or 1 args") + return nil // nil means don't end the program + } + var data [8]byte + if len(args) == 1 { + copy(data[:], args[0]) + } else { + copy(data[:], "h2i_ping") + } + return app.framer.WritePing(false, data) +} + +func (app *h2i) cmdHeaders(args []string) error { + if len(args) > 0 { + app.logf("Error: HEADERS doesn't yet take arguments.") + // TODO: flags for restricting window size, to force CONTINUATION + // frames. + return nil + } + var h1req bytes.Buffer + app.term.SetPrompt("(as HTTP/1.1)> ") + defer app.term.SetPrompt("h2i> ") + for { + line, err := app.term.ReadLine() + if err != nil { + return err + } + h1req.WriteString(line) + h1req.WriteString("\r\n") + if line == "" { + break + } + } + req, err := http.ReadRequest(bufio.NewReader(&h1req)) + if err != nil { + app.logf("Invalid HTTP/1.1 request: %v", err) + return nil + } + if app.streamID == 0 { + app.streamID = 1 + } else { + app.streamID += 2 + } + app.logf("Opening Stream-ID %d:", app.streamID) + hbf := app.encodeHeaders(req) + if len(hbf) > 16<<10 { + app.logf("TODO: h2i doesn't yet write CONTINUATION frames. Copy it from transport.go") + return nil + } + return app.framer.WriteHeaders(http2.HeadersFrameParam{ + StreamID: app.streamID, + BlockFragment: hbf, + EndStream: req.Method == "GET" || req.Method == "HEAD", // good enough for now + EndHeaders: true, // for now + }) +} + +func (app *h2i) readFrames() error { + for { + f, err := app.framer.ReadFrame() + if err != nil { + return fmt.Errorf("ReadFrame: %v", err) + } + app.logf("%v", f) + switch f := f.(type) { + case *http2.PingFrame: + app.logf(" Data = %q", f.Data) + case *http2.SettingsFrame: + f.ForeachSetting(func(s http2.Setting) error { + app.logf(" %v", s) + app.peerSetting[s.ID] = s.Val + return nil + }) + case *http2.WindowUpdateFrame: + app.logf(" Window-Increment = %v", f.Increment) + case *http2.GoAwayFrame: + app.logf(" Last-Stream-ID = %d; Error-Code = %v (%d)", f.LastStreamID, f.ErrCode, f.ErrCode) + case *http2.DataFrame: + app.logf(" %q", f.Data()) + case *http2.HeadersFrame: + if f.HasPriority() { + app.logf(" PRIORITY = %v", f.Priority) + } + if app.hdec == nil { + // TODO: if the user uses h2i to send a SETTINGS frame advertising + // something larger, we'll need to respect SETTINGS_HEADER_TABLE_SIZE + // and stuff here instead of using the 4k default. But for now: + tableSize := uint32(4 << 10) + app.hdec = hpack.NewDecoder(tableSize, app.onNewHeaderField) + } + app.hdec.Write(f.HeaderBlockFragment()) + } + } +} + +// called from readLoop +func (app *h2i) onNewHeaderField(f hpack.HeaderField) { + if f.Sensitive { + app.logf(" %s = %q (SENSITIVE)", f.Name, f.Value) + } + app.logf(" %s = %q", f.Name, f.Value) +} + +func (app *h2i) encodeHeaders(req *http.Request) []byte { + app.hbuf.Reset() + + // TODO(bradfitz): figure out :authority-vs-Host stuff between http2 and Go + host := req.Host + if host == "" { + host = req.URL.Host + } + + path := req.RequestURI + if path == "" { + path = "/" + } + + app.writeHeader(":authority", host) // probably not right for all sites + app.writeHeader(":method", req.Method) + app.writeHeader(":path", path) + app.writeHeader(":scheme", "https") + + for k, vv := range req.Header { + lowKey := strings.ToLower(k) + if lowKey == "host" { + continue + } + for _, v := range vv { + app.writeHeader(lowKey, v) + } + } + return app.hbuf.Bytes() +} + +func (app *h2i) writeHeader(name, value string) { + app.henc.WriteField(hpack.HeaderField{Name: name, Value: value}) + app.logf(" %s = %s", name, value) +} diff --git a/vendor/golang.org/x/net/http2/headermap.go b/vendor/golang.org/x/net/http2/headermap.go new file mode 100644 index 0000000..c2805f6 --- /dev/null +++ b/vendor/golang.org/x/net/http2/headermap.go @@ -0,0 +1,78 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "net/http" + "strings" +) + +var ( + commonLowerHeader = map[string]string{} // Go-Canonical-Case -> lower-case + commonCanonHeader = map[string]string{} // lower-case -> Go-Canonical-Case +) + +func init() { + for _, v := range []string{ + "accept", + "accept-charset", + "accept-encoding", + "accept-language", + "accept-ranges", + "age", + "access-control-allow-origin", + "allow", + "authorization", + "cache-control", + "content-disposition", + "content-encoding", + "content-language", + "content-length", + "content-location", + "content-range", + "content-type", + "cookie", + "date", + "etag", + "expect", + "expires", + "from", + "host", + "if-match", + "if-modified-since", + "if-none-match", + "if-unmodified-since", + "last-modified", + "link", + "location", + "max-forwards", + "proxy-authenticate", + "proxy-authorization", + "range", + "referer", + "refresh", + "retry-after", + "server", + "set-cookie", + "strict-transport-security", + "trailer", + "transfer-encoding", + "user-agent", + "vary", + "via", + "www-authenticate", + } { + chk := http.CanonicalHeaderKey(v) + commonLowerHeader[chk] = v + commonCanonHeader[v] = chk + } +} + +func lowerHeader(v string) string { + if s, ok := commonLowerHeader[v]; ok { + return s + } + return strings.ToLower(v) +} diff --git a/vendor/golang.org/x/net/http2/hpack/encode.go b/vendor/golang.org/x/net/http2/hpack/encode.go new file mode 100644 index 0000000..54726c2 --- /dev/null +++ b/vendor/golang.org/x/net/http2/hpack/encode.go @@ -0,0 +1,240 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package hpack + +import ( + "io" +) + +const ( + uint32Max = ^uint32(0) + initialHeaderTableSize = 4096 +) + +type Encoder struct { + dynTab dynamicTable + // minSize is the minimum table size set by + // SetMaxDynamicTableSize after the previous Header Table Size + // Update. + minSize uint32 + // maxSizeLimit is the maximum table size this encoder + // supports. This will protect the encoder from too large + // size. + maxSizeLimit uint32 + // tableSizeUpdate indicates whether "Header Table Size + // Update" is required. + tableSizeUpdate bool + w io.Writer + buf []byte +} + +// NewEncoder returns a new Encoder which performs HPACK encoding. An +// encoded data is written to w. +func NewEncoder(w io.Writer) *Encoder { + e := &Encoder{ + minSize: uint32Max, + maxSizeLimit: initialHeaderTableSize, + tableSizeUpdate: false, + w: w, + } + e.dynTab.table.init() + e.dynTab.setMaxSize(initialHeaderTableSize) + return e +} + +// WriteField encodes f into a single Write to e's underlying Writer. +// This function may also produce bytes for "Header Table Size Update" +// if necessary. If produced, it is done before encoding f. +func (e *Encoder) WriteField(f HeaderField) error { + e.buf = e.buf[:0] + + if e.tableSizeUpdate { + e.tableSizeUpdate = false + if e.minSize < e.dynTab.maxSize { + e.buf = appendTableSize(e.buf, e.minSize) + } + e.minSize = uint32Max + e.buf = appendTableSize(e.buf, e.dynTab.maxSize) + } + + idx, nameValueMatch := e.searchTable(f) + if nameValueMatch { + e.buf = appendIndexed(e.buf, idx) + } else { + indexing := e.shouldIndex(f) + if indexing { + e.dynTab.add(f) + } + + if idx == 0 { + e.buf = appendNewName(e.buf, f, indexing) + } else { + e.buf = appendIndexedName(e.buf, f, idx, indexing) + } + } + n, err := e.w.Write(e.buf) + if err == nil && n != len(e.buf) { + err = io.ErrShortWrite + } + return err +} + +// searchTable searches f in both stable and dynamic header tables. +// The static header table is searched first. Only when there is no +// exact match for both name and value, the dynamic header table is +// then searched. If there is no match, i is 0. If both name and value +// match, i is the matched index and nameValueMatch becomes true. If +// only name matches, i points to that index and nameValueMatch +// becomes false. +func (e *Encoder) searchTable(f HeaderField) (i uint64, nameValueMatch bool) { + i, nameValueMatch = staticTable.search(f) + if nameValueMatch { + return i, true + } + + j, nameValueMatch := e.dynTab.table.search(f) + if nameValueMatch || (i == 0 && j != 0) { + return j + uint64(staticTable.len()), nameValueMatch + } + + return i, false +} + +// SetMaxDynamicTableSize changes the dynamic header table size to v. +// The actual size is bounded by the value passed to +// SetMaxDynamicTableSizeLimit. +func (e *Encoder) SetMaxDynamicTableSize(v uint32) { + if v > e.maxSizeLimit { + v = e.maxSizeLimit + } + if v < e.minSize { + e.minSize = v + } + e.tableSizeUpdate = true + e.dynTab.setMaxSize(v) +} + +// SetMaxDynamicTableSizeLimit changes the maximum value that can be +// specified in SetMaxDynamicTableSize to v. By default, it is set to +// 4096, which is the same size of the default dynamic header table +// size described in HPACK specification. If the current maximum +// dynamic header table size is strictly greater than v, "Header Table +// Size Update" will be done in the next WriteField call and the +// maximum dynamic header table size is truncated to v. +func (e *Encoder) SetMaxDynamicTableSizeLimit(v uint32) { + e.maxSizeLimit = v + if e.dynTab.maxSize > v { + e.tableSizeUpdate = true + e.dynTab.setMaxSize(v) + } +} + +// shouldIndex reports whether f should be indexed. +func (e *Encoder) shouldIndex(f HeaderField) bool { + return !f.Sensitive && f.Size() <= e.dynTab.maxSize +} + +// appendIndexed appends index i, as encoded in "Indexed Header Field" +// representation, to dst and returns the extended buffer. +func appendIndexed(dst []byte, i uint64) []byte { + first := len(dst) + dst = appendVarInt(dst, 7, i) + dst[first] |= 0x80 + return dst +} + +// appendNewName appends f, as encoded in one of "Literal Header field +// - New Name" representation variants, to dst and returns the +// extended buffer. +// +// If f.Sensitive is true, "Never Indexed" representation is used. If +// f.Sensitive is false and indexing is true, "Inremental Indexing" +// representation is used. +func appendNewName(dst []byte, f HeaderField, indexing bool) []byte { + dst = append(dst, encodeTypeByte(indexing, f.Sensitive)) + dst = appendHpackString(dst, f.Name) + return appendHpackString(dst, f.Value) +} + +// appendIndexedName appends f and index i referring indexed name +// entry, as encoded in one of "Literal Header field - Indexed Name" +// representation variants, to dst and returns the extended buffer. +// +// If f.Sensitive is true, "Never Indexed" representation is used. If +// f.Sensitive is false and indexing is true, "Incremental Indexing" +// representation is used. +func appendIndexedName(dst []byte, f HeaderField, i uint64, indexing bool) []byte { + first := len(dst) + var n byte + if indexing { + n = 6 + } else { + n = 4 + } + dst = appendVarInt(dst, n, i) + dst[first] |= encodeTypeByte(indexing, f.Sensitive) + return appendHpackString(dst, f.Value) +} + +// appendTableSize appends v, as encoded in "Header Table Size Update" +// representation, to dst and returns the extended buffer. +func appendTableSize(dst []byte, v uint32) []byte { + first := len(dst) + dst = appendVarInt(dst, 5, uint64(v)) + dst[first] |= 0x20 + return dst +} + +// appendVarInt appends i, as encoded in variable integer form using n +// bit prefix, to dst and returns the extended buffer. +// +// See +// http://http2.github.io/http2-spec/compression.html#integer.representation +func appendVarInt(dst []byte, n byte, i uint64) []byte { + k := uint64((1 << n) - 1) + if i < k { + return append(dst, byte(i)) + } + dst = append(dst, byte(k)) + i -= k + for ; i >= 128; i >>= 7 { + dst = append(dst, byte(0x80|(i&0x7f))) + } + return append(dst, byte(i)) +} + +// appendHpackString appends s, as encoded in "String Literal" +// representation, to dst and returns the the extended buffer. +// +// s will be encoded in Huffman codes only when it produces strictly +// shorter byte string. +func appendHpackString(dst []byte, s string) []byte { + huffmanLength := HuffmanEncodeLength(s) + if huffmanLength < uint64(len(s)) { + first := len(dst) + dst = appendVarInt(dst, 7, huffmanLength) + dst = AppendHuffmanString(dst, s) + dst[first] |= 0x80 + } else { + dst = appendVarInt(dst, 7, uint64(len(s))) + dst = append(dst, s...) + } + return dst +} + +// encodeTypeByte returns type byte. If sensitive is true, type byte +// for "Never Indexed" representation is returned. If sensitive is +// false and indexing is true, type byte for "Incremental Indexing" +// representation is returned. Otherwise, type byte for "Without +// Indexing" is returned. +func encodeTypeByte(indexing, sensitive bool) byte { + if sensitive { + return 0x10 + } + if indexing { + return 0x40 + } + return 0 +} diff --git a/vendor/golang.org/x/net/http2/hpack/encode_test.go b/vendor/golang.org/x/net/http2/hpack/encode_test.go new file mode 100644 index 0000000..05f12db --- /dev/null +++ b/vendor/golang.org/x/net/http2/hpack/encode_test.go @@ -0,0 +1,386 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package hpack + +import ( + "bytes" + "encoding/hex" + "fmt" + "math/rand" + "reflect" + "strings" + "testing" +) + +func TestEncoderTableSizeUpdate(t *testing.T) { + tests := []struct { + size1, size2 uint32 + wantHex string + }{ + // Should emit 2 table size updates (2048 and 4096) + {2048, 4096, "3fe10f 3fe11f 82"}, + + // Should emit 1 table size update (2048) + {16384, 2048, "3fe10f 82"}, + } + for _, tt := range tests { + var buf bytes.Buffer + e := NewEncoder(&buf) + e.SetMaxDynamicTableSize(tt.size1) + e.SetMaxDynamicTableSize(tt.size2) + if err := e.WriteField(pair(":method", "GET")); err != nil { + t.Fatal(err) + } + want := removeSpace(tt.wantHex) + if got := hex.EncodeToString(buf.Bytes()); got != want { + t.Errorf("e.SetDynamicTableSize %v, %v = %q; want %q", tt.size1, tt.size2, got, want) + } + } +} + +func TestEncoderWriteField(t *testing.T) { + var buf bytes.Buffer + e := NewEncoder(&buf) + var got []HeaderField + d := NewDecoder(4<<10, func(f HeaderField) { + got = append(got, f) + }) + + tests := []struct { + hdrs []HeaderField + }{ + {[]HeaderField{ + pair(":method", "GET"), + pair(":scheme", "http"), + pair(":path", "/"), + pair(":authority", "www.example.com"), + }}, + {[]HeaderField{ + pair(":method", "GET"), + pair(":scheme", "http"), + pair(":path", "/"), + pair(":authority", "www.example.com"), + pair("cache-control", "no-cache"), + }}, + {[]HeaderField{ + pair(":method", "GET"), + pair(":scheme", "https"), + pair(":path", "/index.html"), + pair(":authority", "www.example.com"), + pair("custom-key", "custom-value"), + }}, + } + for i, tt := range tests { + buf.Reset() + got = got[:0] + for _, hf := range tt.hdrs { + if err := e.WriteField(hf); err != nil { + t.Fatal(err) + } + } + _, err := d.Write(buf.Bytes()) + if err != nil { + t.Errorf("%d. Decoder Write = %v", i, err) + } + if !reflect.DeepEqual(got, tt.hdrs) { + t.Errorf("%d. Decoded %+v; want %+v", i, got, tt.hdrs) + } + } +} + +func TestEncoderSearchTable(t *testing.T) { + e := NewEncoder(nil) + + e.dynTab.add(pair("foo", "bar")) + e.dynTab.add(pair("blake", "miz")) + e.dynTab.add(pair(":method", "GET")) + + tests := []struct { + hf HeaderField + wantI uint64 + wantMatch bool + }{ + // Name and Value match + {pair("foo", "bar"), uint64(staticTable.len()) + 3, true}, + {pair("blake", "miz"), uint64(staticTable.len()) + 2, true}, + {pair(":method", "GET"), 2, true}, + + // Only name match because Sensitive == true. This is allowed to match + // any ":method" entry. The current implementation uses the last entry + // added in newStaticTable. + {HeaderField{":method", "GET", true}, 3, false}, + + // Only Name matches + {pair("foo", "..."), uint64(staticTable.len()) + 3, false}, + {pair("blake", "..."), uint64(staticTable.len()) + 2, false}, + // As before, this is allowed to match any ":method" entry. + {pair(":method", "..."), 3, false}, + + // None match + {pair("foo-", "bar"), 0, false}, + } + for _, tt := range tests { + if gotI, gotMatch := e.searchTable(tt.hf); gotI != tt.wantI || gotMatch != tt.wantMatch { + t.Errorf("d.search(%+v) = %v, %v; want %v, %v", tt.hf, gotI, gotMatch, tt.wantI, tt.wantMatch) + } + } +} + +func TestAppendVarInt(t *testing.T) { + tests := []struct { + n byte + i uint64 + want []byte + }{ + // Fits in a byte: + {1, 0, []byte{0}}, + {2, 2, []byte{2}}, + {3, 6, []byte{6}}, + {4, 14, []byte{14}}, + {5, 30, []byte{30}}, + {6, 62, []byte{62}}, + {7, 126, []byte{126}}, + {8, 254, []byte{254}}, + + // Multiple bytes: + {5, 1337, []byte{31, 154, 10}}, + } + for _, tt := range tests { + got := appendVarInt(nil, tt.n, tt.i) + if !bytes.Equal(got, tt.want) { + t.Errorf("appendVarInt(nil, %v, %v) = %v; want %v", tt.n, tt.i, got, tt.want) + } + } +} + +func TestAppendHpackString(t *testing.T) { + tests := []struct { + s, wantHex string + }{ + // Huffman encoded + {"www.example.com", "8c f1e3 c2e5 f23a 6ba0 ab90 f4ff"}, + + // Not Huffman encoded + {"a", "01 61"}, + + // zero length + {"", "00"}, + } + for _, tt := range tests { + want := removeSpace(tt.wantHex) + buf := appendHpackString(nil, tt.s) + if got := hex.EncodeToString(buf); want != got { + t.Errorf("appendHpackString(nil, %q) = %q; want %q", tt.s, got, want) + } + } +} + +func TestAppendIndexed(t *testing.T) { + tests := []struct { + i uint64 + wantHex string + }{ + // 1 byte + {1, "81"}, + {126, "fe"}, + + // 2 bytes + {127, "ff00"}, + {128, "ff01"}, + } + for _, tt := range tests { + want := removeSpace(tt.wantHex) + buf := appendIndexed(nil, tt.i) + if got := hex.EncodeToString(buf); want != got { + t.Errorf("appendIndex(nil, %v) = %q; want %q", tt.i, got, want) + } + } +} + +func TestAppendNewName(t *testing.T) { + tests := []struct { + f HeaderField + indexing bool + wantHex string + }{ + // Incremental indexing + {HeaderField{"custom-key", "custom-value", false}, true, "40 88 25a8 49e9 5ba9 7d7f 89 25a8 49e9 5bb8 e8b4 bf"}, + + // Without indexing + {HeaderField{"custom-key", "custom-value", false}, false, "00 88 25a8 49e9 5ba9 7d7f 89 25a8 49e9 5bb8 e8b4 bf"}, + + // Never indexed + {HeaderField{"custom-key", "custom-value", true}, true, "10 88 25a8 49e9 5ba9 7d7f 89 25a8 49e9 5bb8 e8b4 bf"}, + {HeaderField{"custom-key", "custom-value", true}, false, "10 88 25a8 49e9 5ba9 7d7f 89 25a8 49e9 5bb8 e8b4 bf"}, + } + for _, tt := range tests { + want := removeSpace(tt.wantHex) + buf := appendNewName(nil, tt.f, tt.indexing) + if got := hex.EncodeToString(buf); want != got { + t.Errorf("appendNewName(nil, %+v, %v) = %q; want %q", tt.f, tt.indexing, got, want) + } + } +} + +func TestAppendIndexedName(t *testing.T) { + tests := []struct { + f HeaderField + i uint64 + indexing bool + wantHex string + }{ + // Incremental indexing + {HeaderField{":status", "302", false}, 8, true, "48 82 6402"}, + + // Without indexing + {HeaderField{":status", "302", false}, 8, false, "08 82 6402"}, + + // Never indexed + {HeaderField{":status", "302", true}, 8, true, "18 82 6402"}, + {HeaderField{":status", "302", true}, 8, false, "18 82 6402"}, + } + for _, tt := range tests { + want := removeSpace(tt.wantHex) + buf := appendIndexedName(nil, tt.f, tt.i, tt.indexing) + if got := hex.EncodeToString(buf); want != got { + t.Errorf("appendIndexedName(nil, %+v, %v) = %q; want %q", tt.f, tt.indexing, got, want) + } + } +} + +func TestAppendTableSize(t *testing.T) { + tests := []struct { + i uint32 + wantHex string + }{ + // Fits into 1 byte + {30, "3e"}, + + // Extra byte + {31, "3f00"}, + {32, "3f01"}, + } + for _, tt := range tests { + want := removeSpace(tt.wantHex) + buf := appendTableSize(nil, tt.i) + if got := hex.EncodeToString(buf); want != got { + t.Errorf("appendTableSize(nil, %v) = %q; want %q", tt.i, got, want) + } + } +} + +func TestEncoderSetMaxDynamicTableSize(t *testing.T) { + var buf bytes.Buffer + e := NewEncoder(&buf) + tests := []struct { + v uint32 + wantUpdate bool + wantMinSize uint32 + wantMaxSize uint32 + }{ + // Set new table size to 2048 + {2048, true, 2048, 2048}, + + // Set new table size to 16384, but still limited to + // 4096 + {16384, true, 2048, 4096}, + } + for _, tt := range tests { + e.SetMaxDynamicTableSize(tt.v) + if got := e.tableSizeUpdate; tt.wantUpdate != got { + t.Errorf("e.tableSizeUpdate = %v; want %v", got, tt.wantUpdate) + } + if got := e.minSize; tt.wantMinSize != got { + t.Errorf("e.minSize = %v; want %v", got, tt.wantMinSize) + } + if got := e.dynTab.maxSize; tt.wantMaxSize != got { + t.Errorf("e.maxSize = %v; want %v", got, tt.wantMaxSize) + } + } +} + +func TestEncoderSetMaxDynamicTableSizeLimit(t *testing.T) { + e := NewEncoder(nil) + // 4095 < initialHeaderTableSize means maxSize is truncated to + // 4095. + e.SetMaxDynamicTableSizeLimit(4095) + if got, want := e.dynTab.maxSize, uint32(4095); got != want { + t.Errorf("e.dynTab.maxSize = %v; want %v", got, want) + } + if got, want := e.maxSizeLimit, uint32(4095); got != want { + t.Errorf("e.maxSizeLimit = %v; want %v", got, want) + } + if got, want := e.tableSizeUpdate, true; got != want { + t.Errorf("e.tableSizeUpdate = %v; want %v", got, want) + } + // maxSize will be truncated to maxSizeLimit + e.SetMaxDynamicTableSize(16384) + if got, want := e.dynTab.maxSize, uint32(4095); got != want { + t.Errorf("e.dynTab.maxSize = %v; want %v", got, want) + } + // 8192 > current maxSizeLimit, so maxSize does not change. + e.SetMaxDynamicTableSizeLimit(8192) + if got, want := e.dynTab.maxSize, uint32(4095); got != want { + t.Errorf("e.dynTab.maxSize = %v; want %v", got, want) + } + if got, want := e.maxSizeLimit, uint32(8192); got != want { + t.Errorf("e.maxSizeLimit = %v; want %v", got, want) + } +} + +func removeSpace(s string) string { + return strings.Replace(s, " ", "", -1) +} + +func BenchmarkEncoderSearchTable(b *testing.B) { + e := NewEncoder(nil) + + // A sample of possible header fields. + // This is not based on any actual data from HTTP/2 traces. + var possible []HeaderField + for _, f := range staticTable.ents { + if f.Value == "" { + possible = append(possible, f) + continue + } + // Generate 5 random values, except for cookie and set-cookie, + // which we know can have many values in practice. + num := 5 + if f.Name == "cookie" || f.Name == "set-cookie" { + num = 25 + } + for i := 0; i < num; i++ { + f.Value = fmt.Sprintf("%s-%d", f.Name, i) + possible = append(possible, f) + } + } + for k := 0; k < 10; k++ { + f := HeaderField{ + Name: fmt.Sprintf("x-header-%d", k), + Sensitive: rand.Int()%2 == 0, + } + for i := 0; i < 5; i++ { + f.Value = fmt.Sprintf("%s-%d", f.Name, i) + possible = append(possible, f) + } + } + + // Add a random sample to the dynamic table. This very loosely simulates + // a history of 100 requests with 20 header fields per request. + for r := 0; r < 100*20; r++ { + f := possible[rand.Int31n(int32(len(possible)))] + // Skip if this is in the staticTable verbatim. + if _, has := staticTable.search(f); !has { + e.dynTab.add(f) + } + } + + b.ResetTimer() + for n := 0; n < b.N; n++ { + for _, f := range possible { + e.searchTable(f) + } + } +} diff --git a/vendor/golang.org/x/net/http2/hpack/hpack.go b/vendor/golang.org/x/net/http2/hpack/hpack.go new file mode 100644 index 0000000..176644a --- /dev/null +++ b/vendor/golang.org/x/net/http2/hpack/hpack.go @@ -0,0 +1,490 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package hpack implements HPACK, a compression format for +// efficiently representing HTTP header fields in the context of HTTP/2. +// +// See http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-09 +package hpack + +import ( + "bytes" + "errors" + "fmt" +) + +// A DecodingError is something the spec defines as a decoding error. +type DecodingError struct { + Err error +} + +func (de DecodingError) Error() string { + return fmt.Sprintf("decoding error: %v", de.Err) +} + +// An InvalidIndexError is returned when an encoder references a table +// entry before the static table or after the end of the dynamic table. +type InvalidIndexError int + +func (e InvalidIndexError) Error() string { + return fmt.Sprintf("invalid indexed representation index %d", int(e)) +} + +// A HeaderField is a name-value pair. Both the name and value are +// treated as opaque sequences of octets. +type HeaderField struct { + Name, Value string + + // Sensitive means that this header field should never be + // indexed. + Sensitive bool +} + +// IsPseudo reports whether the header field is an http2 pseudo header. +// That is, it reports whether it starts with a colon. +// It is not otherwise guaranteed to be a valid pseudo header field, +// though. +func (hf HeaderField) IsPseudo() bool { + return len(hf.Name) != 0 && hf.Name[0] == ':' +} + +func (hf HeaderField) String() string { + var suffix string + if hf.Sensitive { + suffix = " (sensitive)" + } + return fmt.Sprintf("header field %q = %q%s", hf.Name, hf.Value, suffix) +} + +// Size returns the size of an entry per RFC 7541 section 4.1. +func (hf HeaderField) Size() uint32 { + // http://http2.github.io/http2-spec/compression.html#rfc.section.4.1 + // "The size of the dynamic table is the sum of the size of + // its entries. The size of an entry is the sum of its name's + // length in octets (as defined in Section 5.2), its value's + // length in octets (see Section 5.2), plus 32. The size of + // an entry is calculated using the length of the name and + // value without any Huffman encoding applied." + + // This can overflow if somebody makes a large HeaderField + // Name and/or Value by hand, but we don't care, because that + // won't happen on the wire because the encoding doesn't allow + // it. + return uint32(len(hf.Name) + len(hf.Value) + 32) +} + +// A Decoder is the decoding context for incremental processing of +// header blocks. +type Decoder struct { + dynTab dynamicTable + emit func(f HeaderField) + + emitEnabled bool // whether calls to emit are enabled + maxStrLen int // 0 means unlimited + + // buf is the unparsed buffer. It's only written to + // saveBuf if it was truncated in the middle of a header + // block. Because it's usually not owned, we can only + // process it under Write. + buf []byte // not owned; only valid during Write + + // saveBuf is previous data passed to Write which we weren't able + // to fully parse before. Unlike buf, we own this data. + saveBuf bytes.Buffer +} + +// NewDecoder returns a new decoder with the provided maximum dynamic +// table size. The emitFunc will be called for each valid field +// parsed, in the same goroutine as calls to Write, before Write returns. +func NewDecoder(maxDynamicTableSize uint32, emitFunc func(f HeaderField)) *Decoder { + d := &Decoder{ + emit: emitFunc, + emitEnabled: true, + } + d.dynTab.table.init() + d.dynTab.allowedMaxSize = maxDynamicTableSize + d.dynTab.setMaxSize(maxDynamicTableSize) + return d +} + +// ErrStringLength is returned by Decoder.Write when the max string length +// (as configured by Decoder.SetMaxStringLength) would be violated. +var ErrStringLength = errors.New("hpack: string too long") + +// SetMaxStringLength sets the maximum size of a HeaderField name or +// value string. If a string exceeds this length (even after any +// decompression), Write will return ErrStringLength. +// A value of 0 means unlimited and is the default from NewDecoder. +func (d *Decoder) SetMaxStringLength(n int) { + d.maxStrLen = n +} + +// SetEmitFunc changes the callback used when new header fields +// are decoded. +// It must be non-nil. It does not affect EmitEnabled. +func (d *Decoder) SetEmitFunc(emitFunc func(f HeaderField)) { + d.emit = emitFunc +} + +// SetEmitEnabled controls whether the emitFunc provided to NewDecoder +// should be called. The default is true. +// +// This facility exists to let servers enforce MAX_HEADER_LIST_SIZE +// while still decoding and keeping in-sync with decoder state, but +// without doing unnecessary decompression or generating unnecessary +// garbage for header fields past the limit. +func (d *Decoder) SetEmitEnabled(v bool) { d.emitEnabled = v } + +// EmitEnabled reports whether calls to the emitFunc provided to NewDecoder +// are currently enabled. The default is true. +func (d *Decoder) EmitEnabled() bool { return d.emitEnabled } + +// TODO: add method *Decoder.Reset(maxSize, emitFunc) to let callers re-use Decoders and their +// underlying buffers for garbage reasons. + +func (d *Decoder) SetMaxDynamicTableSize(v uint32) { + d.dynTab.setMaxSize(v) +} + +// SetAllowedMaxDynamicTableSize sets the upper bound that the encoded +// stream (via dynamic table size updates) may set the maximum size +// to. +func (d *Decoder) SetAllowedMaxDynamicTableSize(v uint32) { + d.dynTab.allowedMaxSize = v +} + +type dynamicTable struct { + // http://http2.github.io/http2-spec/compression.html#rfc.section.2.3.2 + table headerFieldTable + size uint32 // in bytes + maxSize uint32 // current maxSize + allowedMaxSize uint32 // maxSize may go up to this, inclusive +} + +func (dt *dynamicTable) setMaxSize(v uint32) { + dt.maxSize = v + dt.evict() +} + +func (dt *dynamicTable) add(f HeaderField) { + dt.table.addEntry(f) + dt.size += f.Size() + dt.evict() +} + +// If we're too big, evict old stuff. +func (dt *dynamicTable) evict() { + var n int + for dt.size > dt.maxSize && n < dt.table.len() { + dt.size -= dt.table.ents[n].Size() + n++ + } + dt.table.evictOldest(n) +} + +func (d *Decoder) maxTableIndex() int { + // This should never overflow. RFC 7540 Section 6.5.2 limits the size of + // the dynamic table to 2^32 bytes, where each entry will occupy more than + // one byte. Further, the staticTable has a fixed, small length. + return d.dynTab.table.len() + staticTable.len() +} + +func (d *Decoder) at(i uint64) (hf HeaderField, ok bool) { + // See Section 2.3.3. + if i == 0 { + return + } + if i <= uint64(staticTable.len()) { + return staticTable.ents[i-1], true + } + if i > uint64(d.maxTableIndex()) { + return + } + // In the dynamic table, newer entries have lower indices. + // However, dt.ents[0] is the oldest entry. Hence, dt.ents is + // the reversed dynamic table. + dt := d.dynTab.table + return dt.ents[dt.len()-(int(i)-staticTable.len())], true +} + +// Decode decodes an entire block. +// +// TODO: remove this method and make it incremental later? This is +// easier for debugging now. +func (d *Decoder) DecodeFull(p []byte) ([]HeaderField, error) { + var hf []HeaderField + saveFunc := d.emit + defer func() { d.emit = saveFunc }() + d.emit = func(f HeaderField) { hf = append(hf, f) } + if _, err := d.Write(p); err != nil { + return nil, err + } + if err := d.Close(); err != nil { + return nil, err + } + return hf, nil +} + +func (d *Decoder) Close() error { + if d.saveBuf.Len() > 0 { + d.saveBuf.Reset() + return DecodingError{errors.New("truncated headers")} + } + return nil +} + +func (d *Decoder) Write(p []byte) (n int, err error) { + if len(p) == 0 { + // Prevent state machine CPU attacks (making us redo + // work up to the point of finding out we don't have + // enough data) + return + } + // Only copy the data if we have to. Optimistically assume + // that p will contain a complete header block. + if d.saveBuf.Len() == 0 { + d.buf = p + } else { + d.saveBuf.Write(p) + d.buf = d.saveBuf.Bytes() + d.saveBuf.Reset() + } + + for len(d.buf) > 0 { + err = d.parseHeaderFieldRepr() + if err == errNeedMore { + // Extra paranoia, making sure saveBuf won't + // get too large. All the varint and string + // reading code earlier should already catch + // overlong things and return ErrStringLength, + // but keep this as a last resort. + const varIntOverhead = 8 // conservative + if d.maxStrLen != 0 && int64(len(d.buf)) > 2*(int64(d.maxStrLen)+varIntOverhead) { + return 0, ErrStringLength + } + d.saveBuf.Write(d.buf) + return len(p), nil + } + if err != nil { + break + } + } + return len(p), err +} + +// errNeedMore is an internal sentinel error value that means the +// buffer is truncated and we need to read more data before we can +// continue parsing. +var errNeedMore = errors.New("need more data") + +type indexType int + +const ( + indexedTrue indexType = iota + indexedFalse + indexedNever +) + +func (v indexType) indexed() bool { return v == indexedTrue } +func (v indexType) sensitive() bool { return v == indexedNever } + +// returns errNeedMore if there isn't enough data available. +// any other error is fatal. +// consumes d.buf iff it returns nil. +// precondition: must be called with len(d.buf) > 0 +func (d *Decoder) parseHeaderFieldRepr() error { + b := d.buf[0] + switch { + case b&128 != 0: + // Indexed representation. + // High bit set? + // http://http2.github.io/http2-spec/compression.html#rfc.section.6.1 + return d.parseFieldIndexed() + case b&192 == 64: + // 6.2.1 Literal Header Field with Incremental Indexing + // 0b10xxxxxx: top two bits are 10 + // http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.1 + return d.parseFieldLiteral(6, indexedTrue) + case b&240 == 0: + // 6.2.2 Literal Header Field without Indexing + // 0b0000xxxx: top four bits are 0000 + // http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.2 + return d.parseFieldLiteral(4, indexedFalse) + case b&240 == 16: + // 6.2.3 Literal Header Field never Indexed + // 0b0001xxxx: top four bits are 0001 + // http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.3 + return d.parseFieldLiteral(4, indexedNever) + case b&224 == 32: + // 6.3 Dynamic Table Size Update + // Top three bits are '001'. + // http://http2.github.io/http2-spec/compression.html#rfc.section.6.3 + return d.parseDynamicTableSizeUpdate() + } + + return DecodingError{errors.New("invalid encoding")} +} + +// (same invariants and behavior as parseHeaderFieldRepr) +func (d *Decoder) parseFieldIndexed() error { + buf := d.buf + idx, buf, err := readVarInt(7, buf) + if err != nil { + return err + } + hf, ok := d.at(idx) + if !ok { + return DecodingError{InvalidIndexError(idx)} + } + d.buf = buf + return d.callEmit(HeaderField{Name: hf.Name, Value: hf.Value}) +} + +// (same invariants and behavior as parseHeaderFieldRepr) +func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error { + buf := d.buf + nameIdx, buf, err := readVarInt(n, buf) + if err != nil { + return err + } + + var hf HeaderField + wantStr := d.emitEnabled || it.indexed() + if nameIdx > 0 { + ihf, ok := d.at(nameIdx) + if !ok { + return DecodingError{InvalidIndexError(nameIdx)} + } + hf.Name = ihf.Name + } else { + hf.Name, buf, err = d.readString(buf, wantStr) + if err != nil { + return err + } + } + hf.Value, buf, err = d.readString(buf, wantStr) + if err != nil { + return err + } + d.buf = buf + if it.indexed() { + d.dynTab.add(hf) + } + hf.Sensitive = it.sensitive() + return d.callEmit(hf) +} + +func (d *Decoder) callEmit(hf HeaderField) error { + if d.maxStrLen != 0 { + if len(hf.Name) > d.maxStrLen || len(hf.Value) > d.maxStrLen { + return ErrStringLength + } + } + if d.emitEnabled { + d.emit(hf) + } + return nil +} + +// (same invariants and behavior as parseHeaderFieldRepr) +func (d *Decoder) parseDynamicTableSizeUpdate() error { + buf := d.buf + size, buf, err := readVarInt(5, buf) + if err != nil { + return err + } + if size > uint64(d.dynTab.allowedMaxSize) { + return DecodingError{errors.New("dynamic table size update too large")} + } + d.dynTab.setMaxSize(uint32(size)) + d.buf = buf + return nil +} + +var errVarintOverflow = DecodingError{errors.New("varint integer overflow")} + +// readVarInt reads an unsigned variable length integer off the +// beginning of p. n is the parameter as described in +// http://http2.github.io/http2-spec/compression.html#rfc.section.5.1. +// +// n must always be between 1 and 8. +// +// The returned remain buffer is either a smaller suffix of p, or err != nil. +// The error is errNeedMore if p doesn't contain a complete integer. +func readVarInt(n byte, p []byte) (i uint64, remain []byte, err error) { + if n < 1 || n > 8 { + panic("bad n") + } + if len(p) == 0 { + return 0, p, errNeedMore + } + i = uint64(p[0]) + if n < 8 { + i &= (1 << uint64(n)) - 1 + } + if i < (1< 0 { + b := p[0] + p = p[1:] + i += uint64(b&127) << m + if b&128 == 0 { + return i, p, nil + } + m += 7 + if m >= 63 { // TODO: proper overflow check. making this up. + return 0, origP, errVarintOverflow + } + } + return 0, origP, errNeedMore +} + +// readString decodes an hpack string from p. +// +// wantStr is whether s will be used. If false, decompression and +// []byte->string garbage are skipped if s will be ignored +// anyway. This does mean that huffman decoding errors for non-indexed +// strings past the MAX_HEADER_LIST_SIZE are ignored, but the server +// is returning an error anyway, and because they're not indexed, the error +// won't affect the decoding state. +func (d *Decoder) readString(p []byte, wantStr bool) (s string, remain []byte, err error) { + if len(p) == 0 { + return "", p, errNeedMore + } + isHuff := p[0]&128 != 0 + strLen, p, err := readVarInt(7, p) + if err != nil { + return "", p, err + } + if d.maxStrLen != 0 && strLen > uint64(d.maxStrLen) { + return "", nil, ErrStringLength + } + if uint64(len(p)) < strLen { + return "", p, errNeedMore + } + if !isHuff { + if wantStr { + s = string(p[:strLen]) + } + return s, p[strLen:], nil + } + + if wantStr { + buf := bufPool.Get().(*bytes.Buffer) + buf.Reset() // don't trust others + defer bufPool.Put(buf) + if err := huffmanDecode(buf, d.maxStrLen, p[:strLen]); err != nil { + buf.Reset() + return "", nil, err + } + s = buf.String() + buf.Reset() // be nice to GC + } + return s, p[strLen:], nil +} diff --git a/vendor/golang.org/x/net/http2/hpack/hpack_test.go b/vendor/golang.org/x/net/http2/hpack/hpack_test.go new file mode 100644 index 0000000..c2f8fd1 --- /dev/null +++ b/vendor/golang.org/x/net/http2/hpack/hpack_test.go @@ -0,0 +1,718 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package hpack + +import ( + "bytes" + "encoding/hex" + "fmt" + "math/rand" + "reflect" + "strings" + "testing" + "time" +) + +func (d *Decoder) mustAt(idx int) HeaderField { + if hf, ok := d.at(uint64(idx)); !ok { + panic(fmt.Sprintf("bogus index %d", idx)) + } else { + return hf + } +} + +func TestDynamicTableAt(t *testing.T) { + d := NewDecoder(4096, nil) + at := d.mustAt + if got, want := at(2), (pair(":method", "GET")); got != want { + t.Errorf("at(2) = %v; want %v", got, want) + } + d.dynTab.add(pair("foo", "bar")) + d.dynTab.add(pair("blake", "miz")) + if got, want := at(staticTable.len()+1), (pair("blake", "miz")); got != want { + t.Errorf("at(dyn 1) = %v; want %v", got, want) + } + if got, want := at(staticTable.len()+2), (pair("foo", "bar")); got != want { + t.Errorf("at(dyn 2) = %v; want %v", got, want) + } + if got, want := at(3), (pair(":method", "POST")); got != want { + t.Errorf("at(3) = %v; want %v", got, want) + } +} + +func TestDynamicTableSizeEvict(t *testing.T) { + d := NewDecoder(4096, nil) + if want := uint32(0); d.dynTab.size != want { + t.Fatalf("size = %d; want %d", d.dynTab.size, want) + } + add := d.dynTab.add + add(pair("blake", "eats pizza")) + if want := uint32(15 + 32); d.dynTab.size != want { + t.Fatalf("after pizza, size = %d; want %d", d.dynTab.size, want) + } + add(pair("foo", "bar")) + if want := uint32(15 + 32 + 6 + 32); d.dynTab.size != want { + t.Fatalf("after foo bar, size = %d; want %d", d.dynTab.size, want) + } + d.dynTab.setMaxSize(15 + 32 + 1 /* slop */) + if want := uint32(6 + 32); d.dynTab.size != want { + t.Fatalf("after setMaxSize, size = %d; want %d", d.dynTab.size, want) + } + if got, want := d.mustAt(staticTable.len()+1), (pair("foo", "bar")); got != want { + t.Errorf("at(dyn 1) = %v; want %v", got, want) + } + add(pair("long", strings.Repeat("x", 500))) + if want := uint32(0); d.dynTab.size != want { + t.Fatalf("after big one, size = %d; want %d", d.dynTab.size, want) + } +} + +func TestDecoderDecode(t *testing.T) { + tests := []struct { + name string + in []byte + want []HeaderField + wantDynTab []HeaderField // newest entry first + }{ + // C.2.1 Literal Header Field with Indexing + // http://http2.github.io/http2-spec/compression.html#rfc.section.C.2.1 + {"C.2.1", dehex("400a 6375 7374 6f6d 2d6b 6579 0d63 7573 746f 6d2d 6865 6164 6572"), + []HeaderField{pair("custom-key", "custom-header")}, + []HeaderField{pair("custom-key", "custom-header")}, + }, + + // C.2.2 Literal Header Field without Indexing + // http://http2.github.io/http2-spec/compression.html#rfc.section.C.2.2 + {"C.2.2", dehex("040c 2f73 616d 706c 652f 7061 7468"), + []HeaderField{pair(":path", "/sample/path")}, + []HeaderField{}}, + + // C.2.3 Literal Header Field never Indexed + // http://http2.github.io/http2-spec/compression.html#rfc.section.C.2.3 + {"C.2.3", dehex("1008 7061 7373 776f 7264 0673 6563 7265 74"), + []HeaderField{{"password", "secret", true}}, + []HeaderField{}}, + + // C.2.4 Indexed Header Field + // http://http2.github.io/http2-spec/compression.html#rfc.section.C.2.4 + {"C.2.4", []byte("\x82"), + []HeaderField{pair(":method", "GET")}, + []HeaderField{}}, + } + for _, tt := range tests { + d := NewDecoder(4096, nil) + hf, err := d.DecodeFull(tt.in) + if err != nil { + t.Errorf("%s: %v", tt.name, err) + continue + } + if !reflect.DeepEqual(hf, tt.want) { + t.Errorf("%s: Got %v; want %v", tt.name, hf, tt.want) + } + gotDynTab := d.dynTab.reverseCopy() + if !reflect.DeepEqual(gotDynTab, tt.wantDynTab) { + t.Errorf("%s: dynamic table after = %v; want %v", tt.name, gotDynTab, tt.wantDynTab) + } + } +} + +func (dt *dynamicTable) reverseCopy() (hf []HeaderField) { + hf = make([]HeaderField, len(dt.table.ents)) + for i := range hf { + hf[i] = dt.table.ents[len(dt.table.ents)-1-i] + } + return +} + +type encAndWant struct { + enc []byte + want []HeaderField + wantDynTab []HeaderField + wantDynSize uint32 +} + +// C.3 Request Examples without Huffman Coding +// http://http2.github.io/http2-spec/compression.html#rfc.section.C.3 +func TestDecodeC3_NoHuffman(t *testing.T) { + testDecodeSeries(t, 4096, []encAndWant{ + {dehex("8286 8441 0f77 7777 2e65 7861 6d70 6c65 2e63 6f6d"), + []HeaderField{ + pair(":method", "GET"), + pair(":scheme", "http"), + pair(":path", "/"), + pair(":authority", "www.example.com"), + }, + []HeaderField{ + pair(":authority", "www.example.com"), + }, + 57, + }, + {dehex("8286 84be 5808 6e6f 2d63 6163 6865"), + []HeaderField{ + pair(":method", "GET"), + pair(":scheme", "http"), + pair(":path", "/"), + pair(":authority", "www.example.com"), + pair("cache-control", "no-cache"), + }, + []HeaderField{ + pair("cache-control", "no-cache"), + pair(":authority", "www.example.com"), + }, + 110, + }, + {dehex("8287 85bf 400a 6375 7374 6f6d 2d6b 6579 0c63 7573 746f 6d2d 7661 6c75 65"), + []HeaderField{ + pair(":method", "GET"), + pair(":scheme", "https"), + pair(":path", "/index.html"), + pair(":authority", "www.example.com"), + pair("custom-key", "custom-value"), + }, + []HeaderField{ + pair("custom-key", "custom-value"), + pair("cache-control", "no-cache"), + pair(":authority", "www.example.com"), + }, + 164, + }, + }) +} + +// C.4 Request Examples with Huffman Coding +// http://http2.github.io/http2-spec/compression.html#rfc.section.C.4 +func TestDecodeC4_Huffman(t *testing.T) { + testDecodeSeries(t, 4096, []encAndWant{ + {dehex("8286 8441 8cf1 e3c2 e5f2 3a6b a0ab 90f4 ff"), + []HeaderField{ + pair(":method", "GET"), + pair(":scheme", "http"), + pair(":path", "/"), + pair(":authority", "www.example.com"), + }, + []HeaderField{ + pair(":authority", "www.example.com"), + }, + 57, + }, + {dehex("8286 84be 5886 a8eb 1064 9cbf"), + []HeaderField{ + pair(":method", "GET"), + pair(":scheme", "http"), + pair(":path", "/"), + pair(":authority", "www.example.com"), + pair("cache-control", "no-cache"), + }, + []HeaderField{ + pair("cache-control", "no-cache"), + pair(":authority", "www.example.com"), + }, + 110, + }, + {dehex("8287 85bf 4088 25a8 49e9 5ba9 7d7f 8925 a849 e95b b8e8 b4bf"), + []HeaderField{ + pair(":method", "GET"), + pair(":scheme", "https"), + pair(":path", "/index.html"), + pair(":authority", "www.example.com"), + pair("custom-key", "custom-value"), + }, + []HeaderField{ + pair("custom-key", "custom-value"), + pair("cache-control", "no-cache"), + pair(":authority", "www.example.com"), + }, + 164, + }, + }) +} + +// http://http2.github.io/http2-spec/compression.html#rfc.section.C.5 +// "This section shows several consecutive header lists, corresponding +// to HTTP responses, on the same connection. The HTTP/2 setting +// parameter SETTINGS_HEADER_TABLE_SIZE is set to the value of 256 +// octets, causing some evictions to occur." +func TestDecodeC5_ResponsesNoHuff(t *testing.T) { + testDecodeSeries(t, 256, []encAndWant{ + {dehex(` +4803 3330 3258 0770 7269 7661 7465 611d +4d6f 6e2c 2032 3120 4f63 7420 3230 3133 +2032 303a 3133 3a32 3120 474d 546e 1768 +7474 7073 3a2f 2f77 7777 2e65 7861 6d70 +6c65 2e63 6f6d +`), + []HeaderField{ + pair(":status", "302"), + pair("cache-control", "private"), + pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"), + pair("location", "https://www.example.com"), + }, + []HeaderField{ + pair("location", "https://www.example.com"), + pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"), + pair("cache-control", "private"), + pair(":status", "302"), + }, + 222, + }, + {dehex("4803 3330 37c1 c0bf"), + []HeaderField{ + pair(":status", "307"), + pair("cache-control", "private"), + pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"), + pair("location", "https://www.example.com"), + }, + []HeaderField{ + pair(":status", "307"), + pair("location", "https://www.example.com"), + pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"), + pair("cache-control", "private"), + }, + 222, + }, + {dehex(` +88c1 611d 4d6f 6e2c 2032 3120 4f63 7420 +3230 3133 2032 303a 3133 3a32 3220 474d +54c0 5a04 677a 6970 7738 666f 6f3d 4153 +444a 4b48 514b 425a 584f 5157 454f 5049 +5541 5851 5745 4f49 553b 206d 6178 2d61 +6765 3d33 3630 303b 2076 6572 7369 6f6e +3d31 +`), + []HeaderField{ + pair(":status", "200"), + pair("cache-control", "private"), + pair("date", "Mon, 21 Oct 2013 20:13:22 GMT"), + pair("location", "https://www.example.com"), + pair("content-encoding", "gzip"), + pair("set-cookie", "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"), + }, + []HeaderField{ + pair("set-cookie", "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"), + pair("content-encoding", "gzip"), + pair("date", "Mon, 21 Oct 2013 20:13:22 GMT"), + }, + 215, + }, + }) +} + +// http://http2.github.io/http2-spec/compression.html#rfc.section.C.6 +// "This section shows the same examples as the previous section, but +// using Huffman encoding for the literal values. The HTTP/2 setting +// parameter SETTINGS_HEADER_TABLE_SIZE is set to the value of 256 +// octets, causing some evictions to occur. The eviction mechanism +// uses the length of the decoded literal values, so the same +// evictions occurs as in the previous section." +func TestDecodeC6_ResponsesHuffman(t *testing.T) { + testDecodeSeries(t, 256, []encAndWant{ + {dehex(` +4882 6402 5885 aec3 771a 4b61 96d0 7abe +9410 54d4 44a8 2005 9504 0b81 66e0 82a6 +2d1b ff6e 919d 29ad 1718 63c7 8f0b 97c8 +e9ae 82ae 43d3 +`), + []HeaderField{ + pair(":status", "302"), + pair("cache-control", "private"), + pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"), + pair("location", "https://www.example.com"), + }, + []HeaderField{ + pair("location", "https://www.example.com"), + pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"), + pair("cache-control", "private"), + pair(":status", "302"), + }, + 222, + }, + {dehex("4883 640e ffc1 c0bf"), + []HeaderField{ + pair(":status", "307"), + pair("cache-control", "private"), + pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"), + pair("location", "https://www.example.com"), + }, + []HeaderField{ + pair(":status", "307"), + pair("location", "https://www.example.com"), + pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"), + pair("cache-control", "private"), + }, + 222, + }, + {dehex(` +88c1 6196 d07a be94 1054 d444 a820 0595 +040b 8166 e084 a62d 1bff c05a 839b d9ab +77ad 94e7 821d d7f2 e6c7 b335 dfdf cd5b +3960 d5af 2708 7f36 72c1 ab27 0fb5 291f +9587 3160 65c0 03ed 4ee5 b106 3d50 07 +`), + []HeaderField{ + pair(":status", "200"), + pair("cache-control", "private"), + pair("date", "Mon, 21 Oct 2013 20:13:22 GMT"), + pair("location", "https://www.example.com"), + pair("content-encoding", "gzip"), + pair("set-cookie", "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"), + }, + []HeaderField{ + pair("set-cookie", "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"), + pair("content-encoding", "gzip"), + pair("date", "Mon, 21 Oct 2013 20:13:22 GMT"), + }, + 215, + }, + }) +} + +func testDecodeSeries(t *testing.T, size uint32, steps []encAndWant) { + d := NewDecoder(size, nil) + for i, step := range steps { + hf, err := d.DecodeFull(step.enc) + if err != nil { + t.Fatalf("Error at step index %d: %v", i, err) + } + if !reflect.DeepEqual(hf, step.want) { + t.Fatalf("At step index %d: Got headers %v; want %v", i, hf, step.want) + } + gotDynTab := d.dynTab.reverseCopy() + if !reflect.DeepEqual(gotDynTab, step.wantDynTab) { + t.Errorf("After step index %d, dynamic table = %v; want %v", i, gotDynTab, step.wantDynTab) + } + if d.dynTab.size != step.wantDynSize { + t.Errorf("After step index %d, dynamic table size = %v; want %v", i, d.dynTab.size, step.wantDynSize) + } + } +} + +func TestHuffmanDecodeExcessPadding(t *testing.T) { + tests := [][]byte{ + {0xff}, // Padding Exceeds 7 bits + {0x1f, 0xff}, // {"a", 1 byte excess padding} + {0x1f, 0xff, 0xff}, // {"a", 2 byte excess padding} + {0x1f, 0xff, 0xff, 0xff}, // {"a", 3 byte excess padding} + {0xff, 0x9f, 0xff, 0xff, 0xff}, // {"a", 29 bit excess padding} + {'R', 0xbc, '0', 0xff, 0xff, 0xff, 0xff}, // Padding ends on partial symbol. + } + for i, in := range tests { + var buf bytes.Buffer + if _, err := HuffmanDecode(&buf, in); err != ErrInvalidHuffman { + t.Errorf("test-%d: decode(%q) = %v; want ErrInvalidHuffman", i, in, err) + } + } +} + +func TestHuffmanDecodeEOS(t *testing.T) { + in := []byte{0xff, 0xff, 0xff, 0xff, 0xfc} // {EOS, "?"} + var buf bytes.Buffer + if _, err := HuffmanDecode(&buf, in); err != ErrInvalidHuffman { + t.Errorf("error = %v; want ErrInvalidHuffman", err) + } +} + +func TestHuffmanDecodeMaxLengthOnTrailingByte(t *testing.T) { + in := []byte{0x00, 0x01} // {"0", "0", "0"} + var buf bytes.Buffer + if err := huffmanDecode(&buf, 2, in); err != ErrStringLength { + t.Errorf("error = %v; want ErrStringLength", err) + } +} + +func TestHuffmanDecodeCorruptPadding(t *testing.T) { + in := []byte{0x00} + var buf bytes.Buffer + if _, err := HuffmanDecode(&buf, in); err != ErrInvalidHuffman { + t.Errorf("error = %v; want ErrInvalidHuffman", err) + } +} + +func TestHuffmanDecode(t *testing.T) { + tests := []struct { + inHex, want string + }{ + {"f1e3 c2e5 f23a 6ba0 ab90 f4ff", "www.example.com"}, + {"a8eb 1064 9cbf", "no-cache"}, + {"25a8 49e9 5ba9 7d7f", "custom-key"}, + {"25a8 49e9 5bb8 e8b4 bf", "custom-value"}, + {"6402", "302"}, + {"aec3 771a 4b", "private"}, + {"d07a be94 1054 d444 a820 0595 040b 8166 e082 a62d 1bff", "Mon, 21 Oct 2013 20:13:21 GMT"}, + {"9d29 ad17 1863 c78f 0b97 c8e9 ae82 ae43 d3", "https://www.example.com"}, + {"9bd9 ab", "gzip"}, + {"94e7 821d d7f2 e6c7 b335 dfdf cd5b 3960 d5af 2708 7f36 72c1 ab27 0fb5 291f 9587 3160 65c0 03ed 4ee5 b106 3d50 07", + "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"}, + } + for i, tt := range tests { + var buf bytes.Buffer + in, err := hex.DecodeString(strings.Replace(tt.inHex, " ", "", -1)) + if err != nil { + t.Errorf("%d. hex input error: %v", i, err) + continue + } + if _, err := HuffmanDecode(&buf, in); err != nil { + t.Errorf("%d. decode error: %v", i, err) + continue + } + if got := buf.String(); tt.want != got { + t.Errorf("%d. decode = %q; want %q", i, got, tt.want) + } + } +} + +func TestAppendHuffmanString(t *testing.T) { + tests := []struct { + in, want string + }{ + {"www.example.com", "f1e3 c2e5 f23a 6ba0 ab90 f4ff"}, + {"no-cache", "a8eb 1064 9cbf"}, + {"custom-key", "25a8 49e9 5ba9 7d7f"}, + {"custom-value", "25a8 49e9 5bb8 e8b4 bf"}, + {"302", "6402"}, + {"private", "aec3 771a 4b"}, + {"Mon, 21 Oct 2013 20:13:21 GMT", "d07a be94 1054 d444 a820 0595 040b 8166 e082 a62d 1bff"}, + {"https://www.example.com", "9d29 ad17 1863 c78f 0b97 c8e9 ae82 ae43 d3"}, + {"gzip", "9bd9 ab"}, + {"foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", + "94e7 821d d7f2 e6c7 b335 dfdf cd5b 3960 d5af 2708 7f36 72c1 ab27 0fb5 291f 9587 3160 65c0 03ed 4ee5 b106 3d50 07"}, + } + for i, tt := range tests { + buf := []byte{} + want := strings.Replace(tt.want, " ", "", -1) + buf = AppendHuffmanString(buf, tt.in) + if got := hex.EncodeToString(buf); want != got { + t.Errorf("%d. encode = %q; want %q", i, got, want) + } + } +} + +func TestHuffmanMaxStrLen(t *testing.T) { + const msg = "Some string" + huff := AppendHuffmanString(nil, msg) + + testGood := func(max int) { + var out bytes.Buffer + if err := huffmanDecode(&out, max, huff); err != nil { + t.Errorf("For maxLen=%d, unexpected error: %v", max, err) + } + if out.String() != msg { + t.Errorf("For maxLen=%d, out = %q; want %q", max, out.String(), msg) + } + } + testGood(0) + testGood(len(msg)) + testGood(len(msg) + 1) + + var out bytes.Buffer + if err := huffmanDecode(&out, len(msg)-1, huff); err != ErrStringLength { + t.Errorf("err = %v; want ErrStringLength", err) + } +} + +func TestHuffmanRoundtripStress(t *testing.T) { + const Len = 50 // of uncompressed string + input := make([]byte, Len) + var output bytes.Buffer + var huff []byte + + n := 5000 + if testing.Short() { + n = 100 + } + seed := time.Now().UnixNano() + t.Logf("Seed = %v", seed) + src := rand.New(rand.NewSource(seed)) + var encSize int64 + for i := 0; i < n; i++ { + for l := range input { + input[l] = byte(src.Intn(256)) + } + huff = AppendHuffmanString(huff[:0], string(input)) + encSize += int64(len(huff)) + output.Reset() + if err := huffmanDecode(&output, 0, huff); err != nil { + t.Errorf("Failed to decode %q -> %q -> error %v", input, huff, err) + continue + } + if !bytes.Equal(output.Bytes(), input) { + t.Errorf("Roundtrip failure on %q -> %q -> %q", input, huff, output.Bytes()) + } + } + t.Logf("Compressed size of original: %0.02f%% (%v -> %v)", 100*(float64(encSize)/(Len*float64(n))), Len*n, encSize) +} + +func TestHuffmanDecodeFuzz(t *testing.T) { + const Len = 50 // of compressed + var buf, zbuf bytes.Buffer + + n := 5000 + if testing.Short() { + n = 100 + } + seed := time.Now().UnixNano() + t.Logf("Seed = %v", seed) + src := rand.New(rand.NewSource(seed)) + numFail := 0 + for i := 0; i < n; i++ { + zbuf.Reset() + if i == 0 { + // Start with at least one invalid one. + zbuf.WriteString("00\x91\xff\xff\xff\xff\xc8") + } else { + for l := 0; l < Len; l++ { + zbuf.WriteByte(byte(src.Intn(256))) + } + } + + buf.Reset() + if err := huffmanDecode(&buf, 0, zbuf.Bytes()); err != nil { + if err == ErrInvalidHuffman { + numFail++ + continue + } + t.Errorf("Failed to decode %q: %v", zbuf.Bytes(), err) + continue + } + } + t.Logf("%0.02f%% are invalid (%d / %d)", 100*float64(numFail)/float64(n), numFail, n) + if numFail < 1 { + t.Error("expected at least one invalid huffman encoding (test starts with one)") + } +} + +func TestReadVarInt(t *testing.T) { + type res struct { + i uint64 + consumed int + err error + } + tests := []struct { + n byte + p []byte + want res + }{ + // Fits in a byte: + {1, []byte{0}, res{0, 1, nil}}, + {2, []byte{2}, res{2, 1, nil}}, + {3, []byte{6}, res{6, 1, nil}}, + {4, []byte{14}, res{14, 1, nil}}, + {5, []byte{30}, res{30, 1, nil}}, + {6, []byte{62}, res{62, 1, nil}}, + {7, []byte{126}, res{126, 1, nil}}, + {8, []byte{254}, res{254, 1, nil}}, + + // Doesn't fit in a byte: + {1, []byte{1}, res{0, 0, errNeedMore}}, + {2, []byte{3}, res{0, 0, errNeedMore}}, + {3, []byte{7}, res{0, 0, errNeedMore}}, + {4, []byte{15}, res{0, 0, errNeedMore}}, + {5, []byte{31}, res{0, 0, errNeedMore}}, + {6, []byte{63}, res{0, 0, errNeedMore}}, + {7, []byte{127}, res{0, 0, errNeedMore}}, + {8, []byte{255}, res{0, 0, errNeedMore}}, + + // Ignoring top bits: + {5, []byte{255, 154, 10}, res{1337, 3, nil}}, // high dummy three bits: 111 + {5, []byte{159, 154, 10}, res{1337, 3, nil}}, // high dummy three bits: 100 + {5, []byte{191, 154, 10}, res{1337, 3, nil}}, // high dummy three bits: 101 + + // Extra byte: + {5, []byte{191, 154, 10, 2}, res{1337, 3, nil}}, // extra byte + + // Short a byte: + {5, []byte{191, 154}, res{0, 0, errNeedMore}}, + + // integer overflow: + {1, []byte{255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128}, res{0, 0, errVarintOverflow}}, + } + for _, tt := range tests { + i, remain, err := readVarInt(tt.n, tt.p) + consumed := len(tt.p) - len(remain) + got := res{i, consumed, err} + if got != tt.want { + t.Errorf("readVarInt(%d, %v ~ %x) = %+v; want %+v", tt.n, tt.p, tt.p, got, tt.want) + } + } +} + +// Fuzz crash, originally reported at https://github.com/bradfitz/http2/issues/56 +func TestHuffmanFuzzCrash(t *testing.T) { + got, err := HuffmanDecodeToString([]byte("00\x91\xff\xff\xff\xff\xc8")) + if got != "" { + t.Errorf("Got %q; want empty string", got) + } + if err != ErrInvalidHuffman { + t.Errorf("Err = %v; want ErrInvalidHuffman", err) + } +} + +func dehex(s string) []byte { + s = strings.Replace(s, " ", "", -1) + s = strings.Replace(s, "\n", "", -1) + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return b +} + +func TestEmitEnabled(t *testing.T) { + var buf bytes.Buffer + enc := NewEncoder(&buf) + enc.WriteField(HeaderField{Name: "foo", Value: "bar"}) + enc.WriteField(HeaderField{Name: "foo", Value: "bar"}) + + numCallback := 0 + var dec *Decoder + dec = NewDecoder(8<<20, func(HeaderField) { + numCallback++ + dec.SetEmitEnabled(false) + }) + if !dec.EmitEnabled() { + t.Errorf("initial emit enabled = false; want true") + } + if _, err := dec.Write(buf.Bytes()); err != nil { + t.Error(err) + } + if numCallback != 1 { + t.Errorf("num callbacks = %d; want 1", numCallback) + } + if dec.EmitEnabled() { + t.Errorf("emit enabled = true; want false") + } +} + +func TestSaveBufLimit(t *testing.T) { + const maxStr = 1 << 10 + var got []HeaderField + dec := NewDecoder(initialHeaderTableSize, func(hf HeaderField) { + got = append(got, hf) + }) + dec.SetMaxStringLength(maxStr) + var frag []byte + frag = append(frag[:0], encodeTypeByte(false, false)) + frag = appendVarInt(frag, 7, 3) + frag = append(frag, "foo"...) + frag = appendVarInt(frag, 7, 3) + frag = append(frag, "bar"...) + + if _, err := dec.Write(frag); err != nil { + t.Fatal(err) + } + + want := []HeaderField{{Name: "foo", Value: "bar"}} + if !reflect.DeepEqual(got, want) { + t.Errorf("After small writes, got %v; want %v", got, want) + } + + frag = append(frag[:0], encodeTypeByte(false, false)) + frag = appendVarInt(frag, 7, maxStr*3) + frag = append(frag, make([]byte, maxStr*3)...) + + _, err := dec.Write(frag) + if err != ErrStringLength { + t.Fatalf("Write error = %v; want ErrStringLength", err) + } +} diff --git a/vendor/golang.org/x/net/http2/hpack/huffman.go b/vendor/golang.org/x/net/http2/hpack/huffman.go new file mode 100644 index 0000000..8850e39 --- /dev/null +++ b/vendor/golang.org/x/net/http2/hpack/huffman.go @@ -0,0 +1,212 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package hpack + +import ( + "bytes" + "errors" + "io" + "sync" +) + +var bufPool = sync.Pool{ + New: func() interface{} { return new(bytes.Buffer) }, +} + +// HuffmanDecode decodes the string in v and writes the expanded +// result to w, returning the number of bytes written to w and the +// Write call's return value. At most one Write call is made. +func HuffmanDecode(w io.Writer, v []byte) (int, error) { + buf := bufPool.Get().(*bytes.Buffer) + buf.Reset() + defer bufPool.Put(buf) + if err := huffmanDecode(buf, 0, v); err != nil { + return 0, err + } + return w.Write(buf.Bytes()) +} + +// HuffmanDecodeToString decodes the string in v. +func HuffmanDecodeToString(v []byte) (string, error) { + buf := bufPool.Get().(*bytes.Buffer) + buf.Reset() + defer bufPool.Put(buf) + if err := huffmanDecode(buf, 0, v); err != nil { + return "", err + } + return buf.String(), nil +} + +// ErrInvalidHuffman is returned for errors found decoding +// Huffman-encoded strings. +var ErrInvalidHuffman = errors.New("hpack: invalid Huffman-encoded data") + +// huffmanDecode decodes v to buf. +// If maxLen is greater than 0, attempts to write more to buf than +// maxLen bytes will return ErrStringLength. +func huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error { + n := rootHuffmanNode + // cur is the bit buffer that has not been fed into n. + // cbits is the number of low order bits in cur that are valid. + // sbits is the number of bits of the symbol prefix being decoded. + cur, cbits, sbits := uint(0), uint8(0), uint8(0) + for _, b := range v { + cur = cur<<8 | uint(b) + cbits += 8 + sbits += 8 + for cbits >= 8 { + idx := byte(cur >> (cbits - 8)) + n = n.children[idx] + if n == nil { + return ErrInvalidHuffman + } + if n.children == nil { + if maxLen != 0 && buf.Len() == maxLen { + return ErrStringLength + } + buf.WriteByte(n.sym) + cbits -= n.codeLen + n = rootHuffmanNode + sbits = cbits + } else { + cbits -= 8 + } + } + } + for cbits > 0 { + n = n.children[byte(cur<<(8-cbits))] + if n == nil { + return ErrInvalidHuffman + } + if n.children != nil || n.codeLen > cbits { + break + } + if maxLen != 0 && buf.Len() == maxLen { + return ErrStringLength + } + buf.WriteByte(n.sym) + cbits -= n.codeLen + n = rootHuffmanNode + sbits = cbits + } + if sbits > 7 { + // Either there was an incomplete symbol, or overlong padding. + // Both are decoding errors per RFC 7541 section 5.2. + return ErrInvalidHuffman + } + if mask := uint(1< 8 { + codeLen -= 8 + i := uint8(code >> codeLen) + if cur.children[i] == nil { + cur.children[i] = newInternalNode() + } + cur = cur.children[i] + } + shift := 8 - codeLen + start, end := int(uint8(code<> (nbits - rembits)) + dst[len(dst)-1] |= t + } + + return dst +} + +// HuffmanEncodeLength returns the number of bytes required to encode +// s in Huffman codes. The result is round up to byte boundary. +func HuffmanEncodeLength(s string) uint64 { + n := uint64(0) + for i := 0; i < len(s); i++ { + n += uint64(huffmanCodeLen[s[i]]) + } + return (n + 7) / 8 +} + +// appendByteToHuffmanCode appends Huffman code for c to dst and +// returns the extended buffer and the remaining bits in the last +// element. The appending is not byte aligned and the remaining bits +// in the last element of dst is given in rembits. +func appendByteToHuffmanCode(dst []byte, rembits uint8, c byte) ([]byte, uint8) { + code := huffmanCodes[c] + nbits := huffmanCodeLen[c] + + for { + if rembits > nbits { + t := uint8(code << (rembits - nbits)) + dst[len(dst)-1] |= t + rembits -= nbits + break + } + + t := uint8(code >> (nbits - rembits)) + dst[len(dst)-1] |= t + + nbits -= rembits + rembits = 8 + + if nbits == 0 { + break + } + + dst = append(dst, 0) + } + + return dst, rembits +} diff --git a/vendor/golang.org/x/net/http2/hpack/tables.go b/vendor/golang.org/x/net/http2/hpack/tables.go new file mode 100644 index 0000000..31bd5a5 --- /dev/null +++ b/vendor/golang.org/x/net/http2/hpack/tables.go @@ -0,0 +1,478 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package hpack + +import ( + "fmt" +) + +// headerFieldTable implements a list of HeaderFields. +// This is used to implement the static and dynamic tables. +type headerFieldTable struct { + // For static tables, entries are never evicted. + // + // For dynamic tables, entries are evicted from ents[0] and added to the end. + // Each entry has a unique id that starts at one and increments for each + // entry that is added. This unique id is stable across evictions, meaning + // it can be used as a pointer to a specific entry. As in hpack, unique ids + // are 1-based. The unique id for ents[k] is k + evictCount + 1. + // + // Zero is not a valid unique id. + // + // evictCount should not overflow in any remotely practical situation. In + // practice, we will have one dynamic table per HTTP/2 connection. If we + // assume a very powerful server that handles 1M QPS per connection and each + // request adds (then evicts) 100 entries from the table, it would still take + // 2M years for evictCount to overflow. + ents []HeaderField + evictCount uint64 + + // byName maps a HeaderField name to the unique id of the newest entry with + // the same name. See above for a definition of "unique id". + byName map[string]uint64 + + // byNameValue maps a HeaderField name/value pair to the unique id of the newest + // entry with the same name and value. See above for a definition of "unique id". + byNameValue map[pairNameValue]uint64 +} + +type pairNameValue struct { + name, value string +} + +func (t *headerFieldTable) init() { + t.byName = make(map[string]uint64) + t.byNameValue = make(map[pairNameValue]uint64) +} + +// len reports the number of entries in the table. +func (t *headerFieldTable) len() int { + return len(t.ents) +} + +// addEntry adds a new entry. +func (t *headerFieldTable) addEntry(f HeaderField) { + id := uint64(t.len()) + t.evictCount + 1 + t.byName[f.Name] = id + t.byNameValue[pairNameValue{f.Name, f.Value}] = id + t.ents = append(t.ents, f) +} + +// evictOldest evicts the n oldest entries in the table. +func (t *headerFieldTable) evictOldest(n int) { + if n > t.len() { + panic(fmt.Sprintf("evictOldest(%v) on table with %v entries", n, t.len())) + } + for k := 0; k < n; k++ { + f := t.ents[k] + id := t.evictCount + uint64(k) + 1 + if t.byName[f.Name] == id { + delete(t.byName, f.Name) + } + if p := (pairNameValue{f.Name, f.Value}); t.byNameValue[p] == id { + delete(t.byNameValue, p) + } + } + copy(t.ents, t.ents[n:]) + for k := t.len() - n; k < t.len(); k++ { + t.ents[k] = HeaderField{} // so strings can be garbage collected + } + t.ents = t.ents[:t.len()-n] + if t.evictCount+uint64(n) < t.evictCount { + panic("evictCount overflow") + } + t.evictCount += uint64(n) +} + +// search finds f in the table. If there is no match, i is 0. +// If both name and value match, i is the matched index and nameValueMatch +// becomes true. If only name matches, i points to that index and +// nameValueMatch becomes false. +// +// The returned index is a 1-based HPACK index. For dynamic tables, HPACK says +// that index 1 should be the newest entry, but t.ents[0] is the oldest entry, +// meaning t.ents is reversed for dynamic tables. Hence, when t is a dynamic +// table, the return value i actually refers to the entry t.ents[t.len()-i]. +// +// All tables are assumed to be a dynamic tables except for the global +// staticTable pointer. +// +// See Section 2.3.3. +func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) { + if !f.Sensitive { + if id := t.byNameValue[pairNameValue{f.Name, f.Value}]; id != 0 { + return t.idToIndex(id), true + } + } + if id := t.byName[f.Name]; id != 0 { + return t.idToIndex(id), false + } + return 0, false +} + +// idToIndex converts a unique id to an HPACK index. +// See Section 2.3.3. +func (t *headerFieldTable) idToIndex(id uint64) uint64 { + if id <= t.evictCount { + panic(fmt.Sprintf("id (%v) <= evictCount (%v)", id, t.evictCount)) + } + k := id - t.evictCount - 1 // convert id to an index t.ents[k] + if t != staticTable { + return uint64(t.len()) - k // dynamic table + } + return k + 1 +} + +func pair(name, value string) HeaderField { + return HeaderField{Name: name, Value: value} +} + +// http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B +var staticTable = newStaticTable() + +func newStaticTable() *headerFieldTable { + t := &headerFieldTable{} + t.init() + t.addEntry(pair(":authority", "")) + t.addEntry(pair(":method", "GET")) + t.addEntry(pair(":method", "POST")) + t.addEntry(pair(":path", "/")) + t.addEntry(pair(":path", "/index.html")) + t.addEntry(pair(":scheme", "http")) + t.addEntry(pair(":scheme", "https")) + t.addEntry(pair(":status", "200")) + t.addEntry(pair(":status", "204")) + t.addEntry(pair(":status", "206")) + t.addEntry(pair(":status", "304")) + t.addEntry(pair(":status", "400")) + t.addEntry(pair(":status", "404")) + t.addEntry(pair(":status", "500")) + t.addEntry(pair("accept-charset", "")) + t.addEntry(pair("accept-encoding", "gzip, deflate")) + t.addEntry(pair("accept-language", "")) + t.addEntry(pair("accept-ranges", "")) + t.addEntry(pair("accept", "")) + t.addEntry(pair("access-control-allow-origin", "")) + t.addEntry(pair("age", "")) + t.addEntry(pair("allow", "")) + t.addEntry(pair("authorization", "")) + t.addEntry(pair("cache-control", "")) + t.addEntry(pair("content-disposition", "")) + t.addEntry(pair("content-encoding", "")) + t.addEntry(pair("content-language", "")) + t.addEntry(pair("content-length", "")) + t.addEntry(pair("content-location", "")) + t.addEntry(pair("content-range", "")) + t.addEntry(pair("content-type", "")) + t.addEntry(pair("cookie", "")) + t.addEntry(pair("date", "")) + t.addEntry(pair("etag", "")) + t.addEntry(pair("expect", "")) + t.addEntry(pair("expires", "")) + t.addEntry(pair("from", "")) + t.addEntry(pair("host", "")) + t.addEntry(pair("if-match", "")) + t.addEntry(pair("if-modified-since", "")) + t.addEntry(pair("if-none-match", "")) + t.addEntry(pair("if-range", "")) + t.addEntry(pair("if-unmodified-since", "")) + t.addEntry(pair("last-modified", "")) + t.addEntry(pair("link", "")) + t.addEntry(pair("location", "")) + t.addEntry(pair("max-forwards", "")) + t.addEntry(pair("proxy-authenticate", "")) + t.addEntry(pair("proxy-authorization", "")) + t.addEntry(pair("range", "")) + t.addEntry(pair("referer", "")) + t.addEntry(pair("refresh", "")) + t.addEntry(pair("retry-after", "")) + t.addEntry(pair("server", "")) + t.addEntry(pair("set-cookie", "")) + t.addEntry(pair("strict-transport-security", "")) + t.addEntry(pair("transfer-encoding", "")) + t.addEntry(pair("user-agent", "")) + t.addEntry(pair("vary", "")) + t.addEntry(pair("via", "")) + t.addEntry(pair("www-authenticate", "")) + return t +} + +var huffmanCodes = [256]uint32{ + 0x1ff8, + 0x7fffd8, + 0xfffffe2, + 0xfffffe3, + 0xfffffe4, + 0xfffffe5, + 0xfffffe6, + 0xfffffe7, + 0xfffffe8, + 0xffffea, + 0x3ffffffc, + 0xfffffe9, + 0xfffffea, + 0x3ffffffd, + 0xfffffeb, + 0xfffffec, + 0xfffffed, + 0xfffffee, + 0xfffffef, + 0xffffff0, + 0xffffff1, + 0xffffff2, + 0x3ffffffe, + 0xffffff3, + 0xffffff4, + 0xffffff5, + 0xffffff6, + 0xffffff7, + 0xffffff8, + 0xffffff9, + 0xffffffa, + 0xffffffb, + 0x14, + 0x3f8, + 0x3f9, + 0xffa, + 0x1ff9, + 0x15, + 0xf8, + 0x7fa, + 0x3fa, + 0x3fb, + 0xf9, + 0x7fb, + 0xfa, + 0x16, + 0x17, + 0x18, + 0x0, + 0x1, + 0x2, + 0x19, + 0x1a, + 0x1b, + 0x1c, + 0x1d, + 0x1e, + 0x1f, + 0x5c, + 0xfb, + 0x7ffc, + 0x20, + 0xffb, + 0x3fc, + 0x1ffa, + 0x21, + 0x5d, + 0x5e, + 0x5f, + 0x60, + 0x61, + 0x62, + 0x63, + 0x64, + 0x65, + 0x66, + 0x67, + 0x68, + 0x69, + 0x6a, + 0x6b, + 0x6c, + 0x6d, + 0x6e, + 0x6f, + 0x70, + 0x71, + 0x72, + 0xfc, + 0x73, + 0xfd, + 0x1ffb, + 0x7fff0, + 0x1ffc, + 0x3ffc, + 0x22, + 0x7ffd, + 0x3, + 0x23, + 0x4, + 0x24, + 0x5, + 0x25, + 0x26, + 0x27, + 0x6, + 0x74, + 0x75, + 0x28, + 0x29, + 0x2a, + 0x7, + 0x2b, + 0x76, + 0x2c, + 0x8, + 0x9, + 0x2d, + 0x77, + 0x78, + 0x79, + 0x7a, + 0x7b, + 0x7ffe, + 0x7fc, + 0x3ffd, + 0x1ffd, + 0xffffffc, + 0xfffe6, + 0x3fffd2, + 0xfffe7, + 0xfffe8, + 0x3fffd3, + 0x3fffd4, + 0x3fffd5, + 0x7fffd9, + 0x3fffd6, + 0x7fffda, + 0x7fffdb, + 0x7fffdc, + 0x7fffdd, + 0x7fffde, + 0xffffeb, + 0x7fffdf, + 0xffffec, + 0xffffed, + 0x3fffd7, + 0x7fffe0, + 0xffffee, + 0x7fffe1, + 0x7fffe2, + 0x7fffe3, + 0x7fffe4, + 0x1fffdc, + 0x3fffd8, + 0x7fffe5, + 0x3fffd9, + 0x7fffe6, + 0x7fffe7, + 0xffffef, + 0x3fffda, + 0x1fffdd, + 0xfffe9, + 0x3fffdb, + 0x3fffdc, + 0x7fffe8, + 0x7fffe9, + 0x1fffde, + 0x7fffea, + 0x3fffdd, + 0x3fffde, + 0xfffff0, + 0x1fffdf, + 0x3fffdf, + 0x7fffeb, + 0x7fffec, + 0x1fffe0, + 0x1fffe1, + 0x3fffe0, + 0x1fffe2, + 0x7fffed, + 0x3fffe1, + 0x7fffee, + 0x7fffef, + 0xfffea, + 0x3fffe2, + 0x3fffe3, + 0x3fffe4, + 0x7ffff0, + 0x3fffe5, + 0x3fffe6, + 0x7ffff1, + 0x3ffffe0, + 0x3ffffe1, + 0xfffeb, + 0x7fff1, + 0x3fffe7, + 0x7ffff2, + 0x3fffe8, + 0x1ffffec, + 0x3ffffe2, + 0x3ffffe3, + 0x3ffffe4, + 0x7ffffde, + 0x7ffffdf, + 0x3ffffe5, + 0xfffff1, + 0x1ffffed, + 0x7fff2, + 0x1fffe3, + 0x3ffffe6, + 0x7ffffe0, + 0x7ffffe1, + 0x3ffffe7, + 0x7ffffe2, + 0xfffff2, + 0x1fffe4, + 0x1fffe5, + 0x3ffffe8, + 0x3ffffe9, + 0xffffffd, + 0x7ffffe3, + 0x7ffffe4, + 0x7ffffe5, + 0xfffec, + 0xfffff3, + 0xfffed, + 0x1fffe6, + 0x3fffe9, + 0x1fffe7, + 0x1fffe8, + 0x7ffff3, + 0x3fffea, + 0x3fffeb, + 0x1ffffee, + 0x1ffffef, + 0xfffff4, + 0xfffff5, + 0x3ffffea, + 0x7ffff4, + 0x3ffffeb, + 0x7ffffe6, + 0x3ffffec, + 0x3ffffed, + 0x7ffffe7, + 0x7ffffe8, + 0x7ffffe9, + 0x7ffffea, + 0x7ffffeb, + 0xffffffe, + 0x7ffffec, + 0x7ffffed, + 0x7ffffee, + 0x7ffffef, + 0x7fffff0, + 0x3ffffee, +} + +var huffmanCodeLen = [256]uint8{ + 13, 23, 28, 28, 28, 28, 28, 28, 28, 24, 30, 28, 28, 30, 28, 28, + 28, 28, 28, 28, 28, 28, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 6, 10, 10, 12, 13, 6, 8, 11, 10, 10, 8, 11, 8, 6, 6, 6, + 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 8, 15, 6, 12, 10, + 13, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 13, 19, 13, 14, 6, + 15, 5, 6, 5, 6, 5, 6, 6, 6, 5, 7, 7, 6, 6, 6, 5, + 6, 7, 6, 5, 5, 6, 7, 7, 7, 7, 7, 15, 11, 14, 13, 28, + 20, 22, 20, 20, 22, 22, 22, 23, 22, 23, 23, 23, 23, 23, 24, 23, + 24, 24, 22, 23, 24, 23, 23, 23, 23, 21, 22, 23, 22, 23, 23, 24, + 22, 21, 20, 22, 22, 23, 23, 21, 23, 22, 22, 24, 21, 22, 23, 23, + 21, 21, 22, 21, 23, 22, 23, 23, 20, 22, 22, 22, 23, 22, 22, 23, + 26, 26, 20, 19, 22, 23, 22, 25, 26, 26, 26, 27, 27, 26, 24, 25, + 19, 21, 26, 27, 27, 26, 27, 24, 21, 21, 26, 26, 28, 27, 27, 27, + 20, 24, 20, 21, 22, 21, 21, 23, 22, 22, 25, 25, 24, 24, 26, 23, + 26, 27, 26, 26, 27, 27, 27, 27, 27, 28, 27, 27, 27, 27, 27, 26, +} diff --git a/vendor/golang.org/x/net/http2/hpack/tables_test.go b/vendor/golang.org/x/net/http2/hpack/tables_test.go new file mode 100644 index 0000000..d963f36 --- /dev/null +++ b/vendor/golang.org/x/net/http2/hpack/tables_test.go @@ -0,0 +1,214 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package hpack + +import ( + "bufio" + "regexp" + "strconv" + "strings" + "testing" +) + +func TestHeaderFieldTable(t *testing.T) { + table := &headerFieldTable{} + table.init() + table.addEntry(pair("key1", "value1-1")) + table.addEntry(pair("key2", "value2-1")) + table.addEntry(pair("key1", "value1-2")) + table.addEntry(pair("key3", "value3-1")) + table.addEntry(pair("key4", "value4-1")) + table.addEntry(pair("key2", "value2-2")) + + // Tests will be run twice: once before evicting anything, and + // again after evicting the three oldest entries. + tests := []struct { + f HeaderField + beforeWantStaticI uint64 + beforeWantMatch bool + afterWantStaticI uint64 + afterWantMatch bool + }{ + {HeaderField{"key1", "value1-1", false}, 1, true, 0, false}, + {HeaderField{"key1", "value1-2", false}, 3, true, 0, false}, + {HeaderField{"key1", "value1-3", false}, 3, false, 0, false}, + {HeaderField{"key2", "value2-1", false}, 2, true, 3, false}, + {HeaderField{"key2", "value2-2", false}, 6, true, 3, true}, + {HeaderField{"key2", "value2-3", false}, 6, false, 3, false}, + {HeaderField{"key4", "value4-1", false}, 5, true, 2, true}, + // Name match only, because sensitive. + {HeaderField{"key4", "value4-1", true}, 5, false, 2, false}, + // Key not found. + {HeaderField{"key5", "value5-x", false}, 0, false, 0, false}, + } + + staticToDynamic := func(i uint64) uint64 { + if i == 0 { + return 0 + } + return uint64(table.len()) - i + 1 // dynamic is the reversed table + } + + searchStatic := func(f HeaderField) (uint64, bool) { + old := staticTable + staticTable = table + defer func() { staticTable = old }() + return staticTable.search(f) + } + + searchDynamic := func(f HeaderField) (uint64, bool) { + return table.search(f) + } + + for _, test := range tests { + gotI, gotMatch := searchStatic(test.f) + if wantI, wantMatch := test.beforeWantStaticI, test.beforeWantMatch; gotI != wantI || gotMatch != wantMatch { + t.Errorf("before evictions: searchStatic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch) + } + gotI, gotMatch = searchDynamic(test.f) + wantDynamicI := staticToDynamic(test.beforeWantStaticI) + if wantI, wantMatch := wantDynamicI, test.beforeWantMatch; gotI != wantI || gotMatch != wantMatch { + t.Errorf("before evictions: searchDynamic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch) + } + } + + table.evictOldest(3) + + for _, test := range tests { + gotI, gotMatch := searchStatic(test.f) + if wantI, wantMatch := test.afterWantStaticI, test.afterWantMatch; gotI != wantI || gotMatch != wantMatch { + t.Errorf("after evictions: searchStatic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch) + } + gotI, gotMatch = searchDynamic(test.f) + wantDynamicI := staticToDynamic(test.afterWantStaticI) + if wantI, wantMatch := wantDynamicI, test.afterWantMatch; gotI != wantI || gotMatch != wantMatch { + t.Errorf("after evictions: searchDynamic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch) + } + } +} + +func TestHeaderFieldTable_LookupMapEviction(t *testing.T) { + table := &headerFieldTable{} + table.init() + table.addEntry(pair("key1", "value1-1")) + table.addEntry(pair("key2", "value2-1")) + table.addEntry(pair("key1", "value1-2")) + table.addEntry(pair("key3", "value3-1")) + table.addEntry(pair("key4", "value4-1")) + table.addEntry(pair("key2", "value2-2")) + + // evict all pairs + table.evictOldest(table.len()) + + if l := table.len(); l > 0 { + t.Errorf("table.len() = %d, want 0", l) + } + + if l := len(table.byName); l > 0 { + t.Errorf("len(table.byName) = %d, want 0", l) + } + + if l := len(table.byNameValue); l > 0 { + t.Errorf("len(table.byNameValue) = %d, want 0", l) + } +} + +func TestStaticTable(t *testing.T) { + fromSpec := ` + +-------+-----------------------------+---------------+ + | 1 | :authority | | + | 2 | :method | GET | + | 3 | :method | POST | + | 4 | :path | / | + | 5 | :path | /index.html | + | 6 | :scheme | http | + | 7 | :scheme | https | + | 8 | :status | 200 | + | 9 | :status | 204 | + | 10 | :status | 206 | + | 11 | :status | 304 | + | 12 | :status | 400 | + | 13 | :status | 404 | + | 14 | :status | 500 | + | 15 | accept-charset | | + | 16 | accept-encoding | gzip, deflate | + | 17 | accept-language | | + | 18 | accept-ranges | | + | 19 | accept | | + | 20 | access-control-allow-origin | | + | 21 | age | | + | 22 | allow | | + | 23 | authorization | | + | 24 | cache-control | | + | 25 | content-disposition | | + | 26 | content-encoding | | + | 27 | content-language | | + | 28 | content-length | | + | 29 | content-location | | + | 30 | content-range | | + | 31 | content-type | | + | 32 | cookie | | + | 33 | date | | + | 34 | etag | | + | 35 | expect | | + | 36 | expires | | + | 37 | from | | + | 38 | host | | + | 39 | if-match | | + | 40 | if-modified-since | | + | 41 | if-none-match | | + | 42 | if-range | | + | 43 | if-unmodified-since | | + | 44 | last-modified | | + | 45 | link | | + | 46 | location | | + | 47 | max-forwards | | + | 48 | proxy-authenticate | | + | 49 | proxy-authorization | | + | 50 | range | | + | 51 | referer | | + | 52 | refresh | | + | 53 | retry-after | | + | 54 | server | | + | 55 | set-cookie | | + | 56 | strict-transport-security | | + | 57 | transfer-encoding | | + | 58 | user-agent | | + | 59 | vary | | + | 60 | via | | + | 61 | www-authenticate | | + +-------+-----------------------------+---------------+ +` + bs := bufio.NewScanner(strings.NewReader(fromSpec)) + re := regexp.MustCompile(`\| (\d+)\s+\| (\S+)\s*\| (\S(.*\S)?)?\s+\|`) + for bs.Scan() { + l := bs.Text() + if !strings.Contains(l, "|") { + continue + } + m := re.FindStringSubmatch(l) + if m == nil { + continue + } + i, err := strconv.Atoi(m[1]) + if err != nil { + t.Errorf("Bogus integer on line %q", l) + continue + } + if i < 1 || i > staticTable.len() { + t.Errorf("Bogus index %d on line %q", i, l) + continue + } + if got, want := staticTable.ents[i-1].Name, m[2]; got != want { + t.Errorf("header index %d name = %q; want %q", i, got, want) + } + if got, want := staticTable.ents[i-1].Value, m[3]; got != want { + t.Errorf("header index %d value = %q; want %q", i, got, want) + } + } + if err := bs.Err(); err != nil { + t.Error(err) + } +} diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go new file mode 100644 index 0000000..b6b0f9a --- /dev/null +++ b/vendor/golang.org/x/net/http2/http2.go @@ -0,0 +1,387 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package http2 implements the HTTP/2 protocol. +// +// This package is low-level and intended to be used directly by very +// few people. Most users will use it indirectly through the automatic +// use by the net/http package (from Go 1.6 and later). +// For use in earlier Go versions see ConfigureServer. (Transport support +// requires Go 1.6 or later) +// +// See https://http2.github.io/ for more information on HTTP/2. +// +// See https://http2.golang.org/ for a test server running this code. +// +package http2 // import "golang.org/x/net/http2" + +import ( + "bufio" + "crypto/tls" + "errors" + "fmt" + "io" + "net/http" + "os" + "sort" + "strconv" + "strings" + "sync" + + "golang.org/x/net/lex/httplex" +) + +var ( + VerboseLogs bool + logFrameWrites bool + logFrameReads bool + inTests bool +) + +func init() { + e := os.Getenv("GODEBUG") + if strings.Contains(e, "http2debug=1") { + VerboseLogs = true + } + if strings.Contains(e, "http2debug=2") { + VerboseLogs = true + logFrameWrites = true + logFrameReads = true + } +} + +const ( + // ClientPreface is the string that must be sent by new + // connections from clients. + ClientPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" + + // SETTINGS_MAX_FRAME_SIZE default + // http://http2.github.io/http2-spec/#rfc.section.6.5.2 + initialMaxFrameSize = 16384 + + // NextProtoTLS is the NPN/ALPN protocol negotiated during + // HTTP/2's TLS setup. + NextProtoTLS = "h2" + + // http://http2.github.io/http2-spec/#SettingValues + initialHeaderTableSize = 4096 + + initialWindowSize = 65535 // 6.9.2 Initial Flow Control Window Size + + defaultMaxReadFrameSize = 1 << 20 +) + +var ( + clientPreface = []byte(ClientPreface) +) + +type streamState int + +// HTTP/2 stream states. +// +// See http://tools.ietf.org/html/rfc7540#section-5.1. +// +// For simplicity, the server code merges "reserved (local)" into +// "half-closed (remote)". This is one less state transition to track. +// The only downside is that we send PUSH_PROMISEs slightly less +// liberally than allowable. More discussion here: +// https://lists.w3.org/Archives/Public/ietf-http-wg/2016JulSep/0599.html +// +// "reserved (remote)" is omitted since the client code does not +// support server push. +const ( + stateIdle streamState = iota + stateOpen + stateHalfClosedLocal + stateHalfClosedRemote + stateClosed +) + +var stateName = [...]string{ + stateIdle: "Idle", + stateOpen: "Open", + stateHalfClosedLocal: "HalfClosedLocal", + stateHalfClosedRemote: "HalfClosedRemote", + stateClosed: "Closed", +} + +func (st streamState) String() string { + return stateName[st] +} + +// Setting is a setting parameter: which setting it is, and its value. +type Setting struct { + // ID is which setting is being set. + // See http://http2.github.io/http2-spec/#SettingValues + ID SettingID + + // Val is the value. + Val uint32 +} + +func (s Setting) String() string { + return fmt.Sprintf("[%v = %d]", s.ID, s.Val) +} + +// Valid reports whether the setting is valid. +func (s Setting) Valid() error { + // Limits and error codes from 6.5.2 Defined SETTINGS Parameters + switch s.ID { + case SettingEnablePush: + if s.Val != 1 && s.Val != 0 { + return ConnectionError(ErrCodeProtocol) + } + case SettingInitialWindowSize: + if s.Val > 1<<31-1 { + return ConnectionError(ErrCodeFlowControl) + } + case SettingMaxFrameSize: + if s.Val < 16384 || s.Val > 1<<24-1 { + return ConnectionError(ErrCodeProtocol) + } + } + return nil +} + +// A SettingID is an HTTP/2 setting as defined in +// http://http2.github.io/http2-spec/#iana-settings +type SettingID uint16 + +const ( + SettingHeaderTableSize SettingID = 0x1 + SettingEnablePush SettingID = 0x2 + SettingMaxConcurrentStreams SettingID = 0x3 + SettingInitialWindowSize SettingID = 0x4 + SettingMaxFrameSize SettingID = 0x5 + SettingMaxHeaderListSize SettingID = 0x6 +) + +var settingName = map[SettingID]string{ + SettingHeaderTableSize: "HEADER_TABLE_SIZE", + SettingEnablePush: "ENABLE_PUSH", + SettingMaxConcurrentStreams: "MAX_CONCURRENT_STREAMS", + SettingInitialWindowSize: "INITIAL_WINDOW_SIZE", + SettingMaxFrameSize: "MAX_FRAME_SIZE", + SettingMaxHeaderListSize: "MAX_HEADER_LIST_SIZE", +} + +func (s SettingID) String() string { + if v, ok := settingName[s]; ok { + return v + } + return fmt.Sprintf("UNKNOWN_SETTING_%d", uint16(s)) +} + +var ( + errInvalidHeaderFieldName = errors.New("http2: invalid header field name") + errInvalidHeaderFieldValue = errors.New("http2: invalid header field value") +) + +// validWireHeaderFieldName reports whether v is a valid header field +// name (key). See httplex.ValidHeaderName for the base rules. +// +// Further, http2 says: +// "Just as in HTTP/1.x, header field names are strings of ASCII +// characters that are compared in a case-insensitive +// fashion. However, header field names MUST be converted to +// lowercase prior to their encoding in HTTP/2. " +func validWireHeaderFieldName(v string) bool { + if len(v) == 0 { + return false + } + for _, r := range v { + if !httplex.IsTokenRune(r) { + return false + } + if 'A' <= r && r <= 'Z' { + return false + } + } + return true +} + +var httpCodeStringCommon = map[int]string{} // n -> strconv.Itoa(n) + +func init() { + for i := 100; i <= 999; i++ { + if v := http.StatusText(i); v != "" { + httpCodeStringCommon[i] = strconv.Itoa(i) + } + } +} + +func httpCodeString(code int) string { + if s, ok := httpCodeStringCommon[code]; ok { + return s + } + return strconv.Itoa(code) +} + +// from pkg io +type stringWriter interface { + WriteString(s string) (n int, err error) +} + +// A gate lets two goroutines coordinate their activities. +type gate chan struct{} + +func (g gate) Done() { g <- struct{}{} } +func (g gate) Wait() { <-g } + +// A closeWaiter is like a sync.WaitGroup but only goes 1 to 0 (open to closed). +type closeWaiter chan struct{} + +// Init makes a closeWaiter usable. +// It exists because so a closeWaiter value can be placed inside a +// larger struct and have the Mutex and Cond's memory in the same +// allocation. +func (cw *closeWaiter) Init() { + *cw = make(chan struct{}) +} + +// Close marks the closeWaiter as closed and unblocks any waiters. +func (cw closeWaiter) Close() { + close(cw) +} + +// Wait waits for the closeWaiter to become closed. +func (cw closeWaiter) Wait() { + <-cw +} + +// bufferedWriter is a buffered writer that writes to w. +// Its buffered writer is lazily allocated as needed, to minimize +// idle memory usage with many connections. +type bufferedWriter struct { + w io.Writer // immutable + bw *bufio.Writer // non-nil when data is buffered +} + +func newBufferedWriter(w io.Writer) *bufferedWriter { + return &bufferedWriter{w: w} +} + +// bufWriterPoolBufferSize is the size of bufio.Writer's +// buffers created using bufWriterPool. +// +// TODO: pick a less arbitrary value? this is a bit under +// (3 x typical 1500 byte MTU) at least. Other than that, +// not much thought went into it. +const bufWriterPoolBufferSize = 4 << 10 + +var bufWriterPool = sync.Pool{ + New: func() interface{} { + return bufio.NewWriterSize(nil, bufWriterPoolBufferSize) + }, +} + +func (w *bufferedWriter) Available() int { + if w.bw == nil { + return bufWriterPoolBufferSize + } + return w.bw.Available() +} + +func (w *bufferedWriter) Write(p []byte) (n int, err error) { + if w.bw == nil { + bw := bufWriterPool.Get().(*bufio.Writer) + bw.Reset(w.w) + w.bw = bw + } + return w.bw.Write(p) +} + +func (w *bufferedWriter) Flush() error { + bw := w.bw + if bw == nil { + return nil + } + err := bw.Flush() + bw.Reset(nil) + bufWriterPool.Put(bw) + w.bw = nil + return err +} + +func mustUint31(v int32) uint32 { + if v < 0 || v > 2147483647 { + panic("out of range") + } + return uint32(v) +} + +// bodyAllowedForStatus reports whether a given response status code +// permits a body. See RFC 2616, section 4.4. +func bodyAllowedForStatus(status int) bool { + switch { + case status >= 100 && status <= 199: + return false + case status == 204: + return false + case status == 304: + return false + } + return true +} + +type httpError struct { + msg string + timeout bool +} + +func (e *httpError) Error() string { return e.msg } +func (e *httpError) Timeout() bool { return e.timeout } +func (e *httpError) Temporary() bool { return true } + +var errTimeout error = &httpError{msg: "http2: timeout awaiting response headers", timeout: true} + +type connectionStater interface { + ConnectionState() tls.ConnectionState +} + +var sorterPool = sync.Pool{New: func() interface{} { return new(sorter) }} + +type sorter struct { + v []string // owned by sorter +} + +func (s *sorter) Len() int { return len(s.v) } +func (s *sorter) Swap(i, j int) { s.v[i], s.v[j] = s.v[j], s.v[i] } +func (s *sorter) Less(i, j int) bool { return s.v[i] < s.v[j] } + +// Keys returns the sorted keys of h. +// +// The returned slice is only valid until s used again or returned to +// its pool. +func (s *sorter) Keys(h http.Header) []string { + keys := s.v[:0] + for k := range h { + keys = append(keys, k) + } + s.v = keys + sort.Sort(s) + return keys +} + +func (s *sorter) SortStrings(ss []string) { + // Our sorter works on s.v, which sorter owns, so + // stash it away while we sort the user's buffer. + save := s.v + s.v = ss + sort.Sort(s) + s.v = save +} + +// validPseudoPath reports whether v is a valid :path pseudo-header +// value. It must be either: +// +// *) a non-empty string starting with '/', but not with with "//", +// *) the string '*', for OPTIONS requests. +// +// For now this is only used a quick check for deciding when to clean +// up Opaque URLs before sending requests from the Transport. +// See golang.org/issue/16847 +func validPseudoPath(v string) bool { + return (len(v) > 0 && v[0] == '/' && (len(v) == 1 || v[1] != '/')) || v == "*" +} diff --git a/vendor/golang.org/x/net/http2/http2_test.go b/vendor/golang.org/x/net/http2/http2_test.go new file mode 100644 index 0000000..5248776 --- /dev/null +++ b/vendor/golang.org/x/net/http2/http2_test.go @@ -0,0 +1,199 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "bytes" + "errors" + "flag" + "fmt" + "net/http" + "os/exec" + "strconv" + "strings" + "testing" + + "golang.org/x/net/http2/hpack" +) + +var knownFailing = flag.Bool("known_failing", false, "Run known-failing tests.") + +func condSkipFailingTest(t *testing.T) { + if !*knownFailing { + t.Skip("Skipping known-failing test without --known_failing") + } +} + +func init() { + inTests = true + DebugGoroutines = true + flag.BoolVar(&VerboseLogs, "verboseh2", VerboseLogs, "Verbose HTTP/2 debug logging") +} + +func TestSettingString(t *testing.T) { + tests := []struct { + s Setting + want string + }{ + {Setting{SettingMaxFrameSize, 123}, "[MAX_FRAME_SIZE = 123]"}, + {Setting{1<<16 - 1, 123}, "[UNKNOWN_SETTING_65535 = 123]"}, + } + for i, tt := range tests { + got := fmt.Sprint(tt.s) + if got != tt.want { + t.Errorf("%d. for %#v, string = %q; want %q", i, tt.s, got, tt.want) + } + } +} + +type twriter struct { + t testing.TB + st *serverTester // optional +} + +func (w twriter) Write(p []byte) (n int, err error) { + if w.st != nil { + ps := string(p) + for _, phrase := range w.st.logFilter { + if strings.Contains(ps, phrase) { + return len(p), nil // no logging + } + } + } + w.t.Logf("%s", p) + return len(p), nil +} + +// like encodeHeader, but don't add implicit pseudo headers. +func encodeHeaderNoImplicit(t *testing.T, headers ...string) []byte { + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + for len(headers) > 0 { + k, v := headers[0], headers[1] + headers = headers[2:] + if err := enc.WriteField(hpack.HeaderField{Name: k, Value: v}); err != nil { + t.Fatalf("HPACK encoding error for %q/%q: %v", k, v, err) + } + } + return buf.Bytes() +} + +// Verify that curl has http2. +func requireCurl(t *testing.T) { + out, err := dockerLogs(curl(t, "--version")) + if err != nil { + t.Skipf("failed to determine curl features; skipping test") + } + if !strings.Contains(string(out), "HTTP2") { + t.Skip("curl doesn't support HTTP2; skipping test") + } +} + +func curl(t *testing.T, args ...string) (container string) { + out, err := exec.Command("docker", append([]string{"run", "-d", "--net=host", "gohttp2/curl"}, args...)...).Output() + if err != nil { + t.Skipf("Failed to run curl in docker: %v, %s", err, out) + } + return strings.TrimSpace(string(out)) +} + +// Verify that h2load exists. +func requireH2load(t *testing.T) { + out, err := dockerLogs(h2load(t, "--version")) + if err != nil { + t.Skipf("failed to probe h2load; skipping test: %s", out) + } + if !strings.Contains(string(out), "h2load nghttp2/") { + t.Skipf("h2load not present; skipping test. (Output=%q)", out) + } +} + +func h2load(t *testing.T, args ...string) (container string) { + out, err := exec.Command("docker", append([]string{"run", "-d", "--net=host", "--entrypoint=/usr/local/bin/h2load", "gohttp2/curl"}, args...)...).Output() + if err != nil { + t.Skipf("Failed to run h2load in docker: %v, %s", err, out) + } + return strings.TrimSpace(string(out)) +} + +type puppetCommand struct { + fn func(w http.ResponseWriter, r *http.Request) + done chan<- bool +} + +type handlerPuppet struct { + ch chan puppetCommand +} + +func newHandlerPuppet() *handlerPuppet { + return &handlerPuppet{ + ch: make(chan puppetCommand), + } +} + +func (p *handlerPuppet) act(w http.ResponseWriter, r *http.Request) { + for cmd := range p.ch { + cmd.fn(w, r) + cmd.done <- true + } +} + +func (p *handlerPuppet) done() { close(p.ch) } +func (p *handlerPuppet) do(fn func(http.ResponseWriter, *http.Request)) { + done := make(chan bool) + p.ch <- puppetCommand{fn, done} + <-done +} +func dockerLogs(container string) ([]byte, error) { + out, err := exec.Command("docker", "wait", container).CombinedOutput() + if err != nil { + return out, err + } + exitStatus, err := strconv.Atoi(strings.TrimSpace(string(out))) + if err != nil { + return out, errors.New("unexpected exit status from docker wait") + } + out, err = exec.Command("docker", "logs", container).CombinedOutput() + exec.Command("docker", "rm", container).Run() + if err == nil && exitStatus != 0 { + err = fmt.Errorf("exit status %d: %s", exitStatus, out) + } + return out, err +} + +func kill(container string) { + exec.Command("docker", "kill", container).Run() + exec.Command("docker", "rm", container).Run() +} + +func cleanDate(res *http.Response) { + if d := res.Header["Date"]; len(d) == 1 { + d[0] = "XXX" + } +} + +func TestSorterPoolAllocs(t *testing.T) { + ss := []string{"a", "b", "c"} + h := http.Header{ + "a": nil, + "b": nil, + "c": nil, + } + sorter := new(sorter) + + if allocs := testing.AllocsPerRun(100, func() { + sorter.SortStrings(ss) + }); allocs >= 1 { + t.Logf("SortStrings allocs = %v; want <1", allocs) + } + + if allocs := testing.AllocsPerRun(5, func() { + if len(sorter.Keys(h)) != 3 { + t.Fatal("wrong result") + } + }); allocs > 0 { + t.Logf("Keys allocs = %v; want <1", allocs) + } +} diff --git a/vendor/golang.org/x/net/http2/not_go16.go b/vendor/golang.org/x/net/http2/not_go16.go new file mode 100644 index 0000000..efd2e12 --- /dev/null +++ b/vendor/golang.org/x/net/http2/not_go16.go @@ -0,0 +1,46 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.6 + +package http2 + +import ( + "crypto/tls" + "net/http" + "time" +) + +func configureTransport(t1 *http.Transport) (*Transport, error) { + return nil, errTransportVersion +} + +func transportExpectContinueTimeout(t1 *http.Transport) time.Duration { + return 0 + +} + +// isBadCipher reports whether the cipher is blacklisted by the HTTP/2 spec. +func isBadCipher(cipher uint16) bool { + switch cipher { + case tls.TLS_RSA_WITH_RC4_128_SHA, + tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, + tls.TLS_RSA_WITH_AES_128_CBC_SHA, + tls.TLS_RSA_WITH_AES_256_CBC_SHA, + tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, + tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, + tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, + tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, + tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + // Reject cipher suites from Appendix A. + // "This list includes those cipher suites that do not + // offer an ephemeral key exchange and those that are + // based on the TLS null, stream or block cipher type" + return true + default: + return false + } +} diff --git a/vendor/golang.org/x/net/http2/not_go17.go b/vendor/golang.org/x/net/http2/not_go17.go new file mode 100644 index 0000000..140434a --- /dev/null +++ b/vendor/golang.org/x/net/http2/not_go17.go @@ -0,0 +1,87 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7 + +package http2 + +import ( + "crypto/tls" + "net" + "net/http" + "time" +) + +type contextContext interface { + Done() <-chan struct{} + Err() error +} + +type fakeContext struct{} + +func (fakeContext) Done() <-chan struct{} { return nil } +func (fakeContext) Err() error { panic("should not be called") } + +func reqContext(r *http.Request) fakeContext { + return fakeContext{} +} + +func setResponseUncompressed(res *http.Response) { + // Nothing. +} + +type clientTrace struct{} + +func requestTrace(*http.Request) *clientTrace { return nil } +func traceGotConn(*http.Request, *ClientConn) {} +func traceFirstResponseByte(*clientTrace) {} +func traceWroteHeaders(*clientTrace) {} +func traceWroteRequest(*clientTrace, error) {} +func traceGot100Continue(trace *clientTrace) {} +func traceWait100Continue(trace *clientTrace) {} + +func nop() {} + +func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx contextContext, cancel func()) { + return nil, nop +} + +func contextWithCancel(ctx contextContext) (_ contextContext, cancel func()) { + return ctx, nop +} + +func requestWithContext(req *http.Request, ctx contextContext) *http.Request { + return req +} + +// temporary copy of Go 1.6's private tls.Config.clone: +func cloneTLSConfig(c *tls.Config) *tls.Config { + return &tls.Config{ + Rand: c.Rand, + Time: c.Time, + Certificates: c.Certificates, + NameToCertificate: c.NameToCertificate, + GetCertificate: c.GetCertificate, + RootCAs: c.RootCAs, + NextProtos: c.NextProtos, + ServerName: c.ServerName, + ClientAuth: c.ClientAuth, + ClientCAs: c.ClientCAs, + InsecureSkipVerify: c.InsecureSkipVerify, + CipherSuites: c.CipherSuites, + PreferServerCipherSuites: c.PreferServerCipherSuites, + SessionTicketsDisabled: c.SessionTicketsDisabled, + SessionTicketKey: c.SessionTicketKey, + ClientSessionCache: c.ClientSessionCache, + MinVersion: c.MinVersion, + MaxVersion: c.MaxVersion, + CurvePreferences: c.CurvePreferences, + } +} + +func (cc *ClientConn) Ping(ctx contextContext) error { + return cc.ping(ctx) +} + +func (t *Transport) idleConnTimeout() time.Duration { return 0 } diff --git a/vendor/golang.org/x/net/http2/not_go18.go b/vendor/golang.org/x/net/http2/not_go18.go new file mode 100644 index 0000000..efbf83c --- /dev/null +++ b/vendor/golang.org/x/net/http2/not_go18.go @@ -0,0 +1,27 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.8 + +package http2 + +import ( + "io" + "net/http" +) + +func configureServer18(h1 *http.Server, h2 *Server) error { + // No IdleTimeout to sync prior to Go 1.8. + return nil +} + +func shouldLogPanic(panicValue interface{}) bool { + return panicValue != nil +} + +func reqGetBody(req *http.Request) func() (io.ReadCloser, error) { + return nil +} + +func reqBodyIsNoBody(io.ReadCloser) bool { return false } diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go new file mode 100644 index 0000000..914aaf8 --- /dev/null +++ b/vendor/golang.org/x/net/http2/pipe.go @@ -0,0 +1,153 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "errors" + "io" + "sync" +) + +// pipe is a goroutine-safe io.Reader/io.Writer pair. It's like +// io.Pipe except there are no PipeReader/PipeWriter halves, and the +// underlying buffer is an interface. (io.Pipe is always unbuffered) +type pipe struct { + mu sync.Mutex + c sync.Cond // c.L lazily initialized to &p.mu + b pipeBuffer + err error // read error once empty. non-nil means closed. + breakErr error // immediate read error (caller doesn't see rest of b) + donec chan struct{} // closed on error + readFn func() // optional code to run in Read before error +} + +type pipeBuffer interface { + Len() int + io.Writer + io.Reader +} + +func (p *pipe) Len() int { + p.mu.Lock() + defer p.mu.Unlock() + return p.b.Len() +} + +// Read waits until data is available and copies bytes +// from the buffer into p. +func (p *pipe) Read(d []byte) (n int, err error) { + p.mu.Lock() + defer p.mu.Unlock() + if p.c.L == nil { + p.c.L = &p.mu + } + for { + if p.breakErr != nil { + return 0, p.breakErr + } + if p.b.Len() > 0 { + return p.b.Read(d) + } + if p.err != nil { + if p.readFn != nil { + p.readFn() // e.g. copy trailers + p.readFn = nil // not sticky like p.err + } + return 0, p.err + } + p.c.Wait() + } +} + +var errClosedPipeWrite = errors.New("write on closed buffer") + +// Write copies bytes from p into the buffer and wakes a reader. +// It is an error to write more data than the buffer can hold. +func (p *pipe) Write(d []byte) (n int, err error) { + p.mu.Lock() + defer p.mu.Unlock() + if p.c.L == nil { + p.c.L = &p.mu + } + defer p.c.Signal() + if p.err != nil { + return 0, errClosedPipeWrite + } + return p.b.Write(d) +} + +// CloseWithError causes the next Read (waking up a current blocked +// Read if needed) to return the provided err after all data has been +// read. +// +// The error must be non-nil. +func (p *pipe) CloseWithError(err error) { p.closeWithError(&p.err, err, nil) } + +// BreakWithError causes the next Read (waking up a current blocked +// Read if needed) to return the provided err immediately, without +// waiting for unread data. +func (p *pipe) BreakWithError(err error) { p.closeWithError(&p.breakErr, err, nil) } + +// closeWithErrorAndCode is like CloseWithError but also sets some code to run +// in the caller's goroutine before returning the error. +func (p *pipe) closeWithErrorAndCode(err error, fn func()) { p.closeWithError(&p.err, err, fn) } + +func (p *pipe) closeWithError(dst *error, err error, fn func()) { + if err == nil { + panic("err must be non-nil") + } + p.mu.Lock() + defer p.mu.Unlock() + if p.c.L == nil { + p.c.L = &p.mu + } + defer p.c.Signal() + if *dst != nil { + // Already been done. + return + } + p.readFn = fn + *dst = err + p.closeDoneLocked() +} + +// requires p.mu be held. +func (p *pipe) closeDoneLocked() { + if p.donec == nil { + return + } + // Close if unclosed. This isn't racy since we always + // hold p.mu while closing. + select { + case <-p.donec: + default: + close(p.donec) + } +} + +// Err returns the error (if any) first set by BreakWithError or CloseWithError. +func (p *pipe) Err() error { + p.mu.Lock() + defer p.mu.Unlock() + if p.breakErr != nil { + return p.breakErr + } + return p.err +} + +// Done returns a channel which is closed if and when this pipe is closed +// with CloseWithError. +func (p *pipe) Done() <-chan struct{} { + p.mu.Lock() + defer p.mu.Unlock() + if p.donec == nil { + p.donec = make(chan struct{}) + if p.err != nil || p.breakErr != nil { + // Already hit an error. + p.closeDoneLocked() + } + } + return p.donec +} diff --git a/vendor/golang.org/x/net/http2/pipe_test.go b/vendor/golang.org/x/net/http2/pipe_test.go new file mode 100644 index 0000000..7632299 --- /dev/null +++ b/vendor/golang.org/x/net/http2/pipe_test.go @@ -0,0 +1,109 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "bytes" + "errors" + "io" + "io/ioutil" + "testing" +) + +func TestPipeClose(t *testing.T) { + var p pipe + p.b = new(bytes.Buffer) + a := errors.New("a") + b := errors.New("b") + p.CloseWithError(a) + p.CloseWithError(b) + _, err := p.Read(make([]byte, 1)) + if err != a { + t.Errorf("err = %v want %v", err, a) + } +} + +func TestPipeDoneChan(t *testing.T) { + var p pipe + done := p.Done() + select { + case <-done: + t.Fatal("done too soon") + default: + } + p.CloseWithError(io.EOF) + select { + case <-done: + default: + t.Fatal("should be done") + } +} + +func TestPipeDoneChan_ErrFirst(t *testing.T) { + var p pipe + p.CloseWithError(io.EOF) + done := p.Done() + select { + case <-done: + default: + t.Fatal("should be done") + } +} + +func TestPipeDoneChan_Break(t *testing.T) { + var p pipe + done := p.Done() + select { + case <-done: + t.Fatal("done too soon") + default: + } + p.BreakWithError(io.EOF) + select { + case <-done: + default: + t.Fatal("should be done") + } +} + +func TestPipeDoneChan_Break_ErrFirst(t *testing.T) { + var p pipe + p.BreakWithError(io.EOF) + done := p.Done() + select { + case <-done: + default: + t.Fatal("should be done") + } +} + +func TestPipeCloseWithError(t *testing.T) { + p := &pipe{b: new(bytes.Buffer)} + const body = "foo" + io.WriteString(p, body) + a := errors.New("test error") + p.CloseWithError(a) + all, err := ioutil.ReadAll(p) + if string(all) != body { + t.Errorf("read bytes = %q; want %q", all, body) + } + if err != a { + t.Logf("read error = %v, %v", err, a) + } +} + +func TestPipeBreakWithError(t *testing.T) { + p := &pipe{b: new(bytes.Buffer)} + io.WriteString(p, "foo") + a := errors.New("test err") + p.BreakWithError(a) + all, err := ioutil.ReadAll(p) + if string(all) != "" { + t.Errorf("read bytes = %q; want empty string", all) + } + if err != a { + t.Logf("read error = %v, %v", err, a) + } +} diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go new file mode 100644 index 0000000..550427d --- /dev/null +++ b/vendor/golang.org/x/net/http2/server.go @@ -0,0 +1,2758 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO: turn off the serve goroutine when idle, so +// an idle conn only has the readFrames goroutine active. (which could +// also be optimized probably to pin less memory in crypto/tls). This +// would involve tracking when the serve goroutine is active (atomic +// int32 read/CAS probably?) and starting it up when frames arrive, +// and shutting it down when all handlers exit. the occasional PING +// packets could use time.AfterFunc to call sc.wakeStartServeLoop() +// (which is a no-op if already running) and then queue the PING write +// as normal. The serve loop would then exit in most cases (if no +// Handlers running) and not be woken up again until the PING packet +// returns. + +// TODO (maybe): add a mechanism for Handlers to going into +// half-closed-local mode (rw.(io.Closer) test?) but not exit their +// handler, and continue to be able to read from the +// Request.Body. This would be a somewhat semantic change from HTTP/1 +// (or at least what we expose in net/http), so I'd probably want to +// add it there too. For now, this package says that returning from +// the Handler ServeHTTP function means you're both done reading and +// done writing, without a way to stop just one or the other. + +package http2 + +import ( + "bufio" + "bytes" + "crypto/tls" + "errors" + "fmt" + "io" + "log" + "math" + "net" + "net/http" + "net/textproto" + "net/url" + "os" + "reflect" + "runtime" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/net/http2/hpack" +) + +const ( + prefaceTimeout = 10 * time.Second + firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway + handlerChunkWriteSize = 4 << 10 + defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to? +) + +var ( + errClientDisconnected = errors.New("client disconnected") + errClosedBody = errors.New("body closed by handler") + errHandlerComplete = errors.New("http2: request body closed due to handler exiting") + errStreamClosed = errors.New("http2: stream closed") +) + +var responseWriterStatePool = sync.Pool{ + New: func() interface{} { + rws := &responseWriterState{} + rws.bw = bufio.NewWriterSize(chunkWriter{rws}, handlerChunkWriteSize) + return rws + }, +} + +// Test hooks. +var ( + testHookOnConn func() + testHookGetServerConn func(*serverConn) + testHookOnPanicMu *sync.Mutex // nil except in tests + testHookOnPanic func(sc *serverConn, panicVal interface{}) (rePanic bool) +) + +// Server is an HTTP/2 server. +type Server struct { + // MaxHandlers limits the number of http.Handler ServeHTTP goroutines + // which may run at a time over all connections. + // Negative or zero no limit. + // TODO: implement + MaxHandlers int + + // MaxConcurrentStreams optionally specifies the number of + // concurrent streams that each client may have open at a + // time. This is unrelated to the number of http.Handler goroutines + // which may be active globally, which is MaxHandlers. + // If zero, MaxConcurrentStreams defaults to at least 100, per + // the HTTP/2 spec's recommendations. + MaxConcurrentStreams uint32 + + // MaxReadFrameSize optionally specifies the largest frame + // this server is willing to read. A valid value is between + // 16k and 16M, inclusive. If zero or otherwise invalid, a + // default value is used. + MaxReadFrameSize uint32 + + // PermitProhibitedCipherSuites, if true, permits the use of + // cipher suites prohibited by the HTTP/2 spec. + PermitProhibitedCipherSuites bool + + // IdleTimeout specifies how long until idle clients should be + // closed with a GOAWAY frame. PING frames are not considered + // activity for the purposes of IdleTimeout. + IdleTimeout time.Duration + + // MaxUploadBufferPerConnection is the size of the initial flow + // control window for each connections. The HTTP/2 spec does not + // allow this to be smaller than 65535 or larger than 2^32-1. + // If the value is outside this range, a default value will be + // used instead. + MaxUploadBufferPerConnection int32 + + // MaxUploadBufferPerStream is the size of the initial flow control + // window for each stream. The HTTP/2 spec does not allow this to + // be larger than 2^32-1. If the value is zero or larger than the + // maximum, a default value will be used instead. + MaxUploadBufferPerStream int32 + + // NewWriteScheduler constructs a write scheduler for a connection. + // If nil, a default scheduler is chosen. + NewWriteScheduler func() WriteScheduler +} + +func (s *Server) initialConnRecvWindowSize() int32 { + if s.MaxUploadBufferPerConnection > initialWindowSize { + return s.MaxUploadBufferPerConnection + } + return 1 << 20 +} + +func (s *Server) initialStreamRecvWindowSize() int32 { + if s.MaxUploadBufferPerStream > 0 { + return s.MaxUploadBufferPerStream + } + return 1 << 20 +} + +func (s *Server) maxReadFrameSize() uint32 { + if v := s.MaxReadFrameSize; v >= minMaxFrameSize && v <= maxFrameSize { + return v + } + return defaultMaxReadFrameSize +} + +func (s *Server) maxConcurrentStreams() uint32 { + if v := s.MaxConcurrentStreams; v > 0 { + return v + } + return defaultMaxStreams +} + +// ConfigureServer adds HTTP/2 support to a net/http Server. +// +// The configuration conf may be nil. +// +// ConfigureServer must be called before s begins serving. +func ConfigureServer(s *http.Server, conf *Server) error { + if s == nil { + panic("nil *http.Server") + } + if conf == nil { + conf = new(Server) + } + if err := configureServer18(s, conf); err != nil { + return err + } + + if s.TLSConfig == nil { + s.TLSConfig = new(tls.Config) + } else if s.TLSConfig.CipherSuites != nil { + // If they already provided a CipherSuite list, return + // an error if it has a bad order or is missing + // ECDHE_RSA_WITH_AES_128_GCM_SHA256. + const requiredCipher = tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + haveRequired := false + sawBad := false + for i, cs := range s.TLSConfig.CipherSuites { + if cs == requiredCipher { + haveRequired = true + } + if isBadCipher(cs) { + sawBad = true + } else if sawBad { + return fmt.Errorf("http2: TLSConfig.CipherSuites index %d contains an HTTP/2-approved cipher suite (%#04x), but it comes after unapproved cipher suites. With this configuration, clients that don't support previous, approved cipher suites may be given an unapproved one and reject the connection.", i, cs) + } + } + if !haveRequired { + return fmt.Errorf("http2: TLSConfig.CipherSuites is missing HTTP/2-required TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256") + } + } + + // Note: not setting MinVersion to tls.VersionTLS12, + // as we don't want to interfere with HTTP/1.1 traffic + // on the user's server. We enforce TLS 1.2 later once + // we accept a connection. Ideally this should be done + // during next-proto selection, but using TLS <1.2 with + // HTTP/2 is still the client's bug. + + s.TLSConfig.PreferServerCipherSuites = true + + haveNPN := false + for _, p := range s.TLSConfig.NextProtos { + if p == NextProtoTLS { + haveNPN = true + break + } + } + if !haveNPN { + s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, NextProtoTLS) + } + + if s.TLSNextProto == nil { + s.TLSNextProto = map[string]func(*http.Server, *tls.Conn, http.Handler){} + } + protoHandler := func(hs *http.Server, c *tls.Conn, h http.Handler) { + if testHookOnConn != nil { + testHookOnConn() + } + conf.ServeConn(c, &ServeConnOpts{ + Handler: h, + BaseConfig: hs, + }) + } + s.TLSNextProto[NextProtoTLS] = protoHandler + return nil +} + +// ServeConnOpts are options for the Server.ServeConn method. +type ServeConnOpts struct { + // BaseConfig optionally sets the base configuration + // for values. If nil, defaults are used. + BaseConfig *http.Server + + // Handler specifies which handler to use for processing + // requests. If nil, BaseConfig.Handler is used. If BaseConfig + // or BaseConfig.Handler is nil, http.DefaultServeMux is used. + Handler http.Handler +} + +func (o *ServeConnOpts) baseConfig() *http.Server { + if o != nil && o.BaseConfig != nil { + return o.BaseConfig + } + return new(http.Server) +} + +func (o *ServeConnOpts) handler() http.Handler { + if o != nil { + if o.Handler != nil { + return o.Handler + } + if o.BaseConfig != nil && o.BaseConfig.Handler != nil { + return o.BaseConfig.Handler + } + } + return http.DefaultServeMux +} + +// ServeConn serves HTTP/2 requests on the provided connection and +// blocks until the connection is no longer readable. +// +// ServeConn starts speaking HTTP/2 assuming that c has not had any +// reads or writes. It writes its initial settings frame and expects +// to be able to read the preface and settings frame from the +// client. If c has a ConnectionState method like a *tls.Conn, the +// ConnectionState is used to verify the TLS ciphersuite and to set +// the Request.TLS field in Handlers. +// +// ServeConn does not support h2c by itself. Any h2c support must be +// implemented in terms of providing a suitably-behaving net.Conn. +// +// The opts parameter is optional. If nil, default values are used. +func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { + baseCtx, cancel := serverConnBaseContext(c, opts) + defer cancel() + + sc := &serverConn{ + srv: s, + hs: opts.baseConfig(), + conn: c, + baseCtx: baseCtx, + remoteAddrStr: c.RemoteAddr().String(), + bw: newBufferedWriter(c), + handler: opts.handler(), + streams: make(map[uint32]*stream), + readFrameCh: make(chan readFrameResult), + wantWriteFrameCh: make(chan FrameWriteRequest, 8), + wantStartPushCh: make(chan startPushRequest, 8), + wroteFrameCh: make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync + bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way + doneServing: make(chan struct{}), + clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value" + advMaxStreams: s.maxConcurrentStreams(), + initialStreamSendWindowSize: initialWindowSize, + maxFrameSize: initialMaxFrameSize, + headerTableSize: initialHeaderTableSize, + serveG: newGoroutineLock(), + pushEnabled: true, + } + + // The net/http package sets the write deadline from the + // http.Server.WriteTimeout during the TLS handshake, but then + // passes the connection off to us with the deadline already + // set. Disarm it here so that it is not applied to additional + // streams opened on this connection. + // TODO: implement WriteTimeout fully. See Issue 18437. + if sc.hs.WriteTimeout != 0 { + sc.conn.SetWriteDeadline(time.Time{}) + } + + if s.NewWriteScheduler != nil { + sc.writeSched = s.NewWriteScheduler() + } else { + sc.writeSched = NewRandomWriteScheduler() + } + + // These start at the RFC-specified defaults. If there is a higher + // configured value for inflow, that will be updated when we send a + // WINDOW_UPDATE shortly after sending SETTINGS. + sc.flow.add(initialWindowSize) + sc.inflow.add(initialWindowSize) + sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf) + + fr := NewFramer(sc.bw, c) + fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil) + fr.MaxHeaderListSize = sc.maxHeaderListSize() + fr.SetMaxReadFrameSize(s.maxReadFrameSize()) + sc.framer = fr + + if tc, ok := c.(connectionStater); ok { + sc.tlsState = new(tls.ConnectionState) + *sc.tlsState = tc.ConnectionState() + // 9.2 Use of TLS Features + // An implementation of HTTP/2 over TLS MUST use TLS + // 1.2 or higher with the restrictions on feature set + // and cipher suite described in this section. Due to + // implementation limitations, it might not be + // possible to fail TLS negotiation. An endpoint MUST + // immediately terminate an HTTP/2 connection that + // does not meet the TLS requirements described in + // this section with a connection error (Section + // 5.4.1) of type INADEQUATE_SECURITY. + if sc.tlsState.Version < tls.VersionTLS12 { + sc.rejectConn(ErrCodeInadequateSecurity, "TLS version too low") + return + } + + if sc.tlsState.ServerName == "" { + // Client must use SNI, but we don't enforce that anymore, + // since it was causing problems when connecting to bare IP + // addresses during development. + // + // TODO: optionally enforce? Or enforce at the time we receive + // a new request, and verify the the ServerName matches the :authority? + // But that precludes proxy situations, perhaps. + // + // So for now, do nothing here again. + } + + if !s.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) { + // "Endpoints MAY choose to generate a connection error + // (Section 5.4.1) of type INADEQUATE_SECURITY if one of + // the prohibited cipher suites are negotiated." + // + // We choose that. In my opinion, the spec is weak + // here. It also says both parties must support at least + // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 so there's no + // excuses here. If we really must, we could allow an + // "AllowInsecureWeakCiphers" option on the server later. + // Let's see how it plays out first. + sc.rejectConn(ErrCodeInadequateSecurity, fmt.Sprintf("Prohibited TLS 1.2 Cipher Suite: %x", sc.tlsState.CipherSuite)) + return + } + } + + if hook := testHookGetServerConn; hook != nil { + hook(sc) + } + sc.serve() +} + +func (sc *serverConn) rejectConn(err ErrCode, debug string) { + sc.vlogf("http2: server rejecting conn: %v, %s", err, debug) + // ignoring errors. hanging up anyway. + sc.framer.WriteGoAway(0, err, []byte(debug)) + sc.bw.Flush() + sc.conn.Close() +} + +type serverConn struct { + // Immutable: + srv *Server + hs *http.Server + conn net.Conn + bw *bufferedWriter // writing to conn + handler http.Handler + baseCtx contextContext + framer *Framer + doneServing chan struct{} // closed when serverConn.serve ends + readFrameCh chan readFrameResult // written by serverConn.readFrames + wantWriteFrameCh chan FrameWriteRequest // from handlers -> serve + wantStartPushCh chan startPushRequest // from handlers -> serve + wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes + bodyReadCh chan bodyReadMsg // from handlers -> serve + testHookCh chan func(int) // code to run on the serve loop + flow flow // conn-wide (not stream-specific) outbound flow control + inflow flow // conn-wide inbound flow control + tlsState *tls.ConnectionState // shared by all handlers, like net/http + remoteAddrStr string + writeSched WriteScheduler + + // Everything following is owned by the serve loop; use serveG.check(): + serveG goroutineLock // used to verify funcs are on serve() + pushEnabled bool + sawFirstSettings bool // got the initial SETTINGS frame after the preface + needToSendSettingsAck bool + unackedSettings int // how many SETTINGS have we sent without ACKs? + clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit) + advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client + curClientStreams uint32 // number of open streams initiated by the client + curPushedStreams uint32 // number of open streams initiated by server push + maxClientStreamID uint32 // max ever seen from client (odd), or 0 if there have been no client requests + maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes + streams map[uint32]*stream + initialStreamSendWindowSize int32 + maxFrameSize int32 + headerTableSize uint32 + peerMaxHeaderListSize uint32 // zero means unknown (default) + canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case + writingFrame bool // started writing a frame (on serve goroutine or separate) + writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh + needsFrameFlush bool // last frame write wasn't a flush + inGoAway bool // we've started to or sent GOAWAY + inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop + needToSendGoAway bool // we need to schedule a GOAWAY frame write + goAwayCode ErrCode + shutdownTimerCh <-chan time.Time // nil until used + shutdownTimer *time.Timer // nil until used + idleTimer *time.Timer // nil if unused + idleTimerCh <-chan time.Time // nil if unused + + // Owned by the writeFrameAsync goroutine: + headerWriteBuf bytes.Buffer + hpackEncoder *hpack.Encoder +} + +func (sc *serverConn) maxHeaderListSize() uint32 { + n := sc.hs.MaxHeaderBytes + if n <= 0 { + n = http.DefaultMaxHeaderBytes + } + // http2's count is in a slightly different unit and includes 32 bytes per pair. + // So, take the net/http.Server value and pad it up a bit, assuming 10 headers. + const perFieldOverhead = 32 // per http2 spec + const typicalHeaders = 10 // conservative + return uint32(n + typicalHeaders*perFieldOverhead) +} + +func (sc *serverConn) curOpenStreams() uint32 { + sc.serveG.check() + return sc.curClientStreams + sc.curPushedStreams +} + +// stream represents a stream. This is the minimal metadata needed by +// the serve goroutine. Most of the actual stream state is owned by +// the http.Handler's goroutine in the responseWriter. Because the +// responseWriter's responseWriterState is recycled at the end of a +// handler, this struct intentionally has no pointer to the +// *responseWriter{,State} itself, as the Handler ending nils out the +// responseWriter's state field. +type stream struct { + // immutable: + sc *serverConn + id uint32 + body *pipe // non-nil if expecting DATA frames + cw closeWaiter // closed wait stream transitions to closed state + ctx contextContext + cancelCtx func() + + // owned by serverConn's serve loop: + bodyBytes int64 // body bytes seen so far + declBodyBytes int64 // or -1 if undeclared + flow flow // limits writing from Handler to client + inflow flow // what the client is allowed to POST/etc to us + parent *stream // or nil + numTrailerValues int64 + weight uint8 + state streamState + resetQueued bool // RST_STREAM queued for write; set by sc.resetStream + gotTrailerHeader bool // HEADER frame for trailers was seen + wroteHeaders bool // whether we wrote headers (not status 100) + + trailer http.Header // accumulated trailers + reqTrailer http.Header // handler's Request.Trailer +} + +func (sc *serverConn) Framer() *Framer { return sc.framer } +func (sc *serverConn) CloseConn() error { return sc.conn.Close() } +func (sc *serverConn) Flush() error { return sc.bw.Flush() } +func (sc *serverConn) HeaderEncoder() (*hpack.Encoder, *bytes.Buffer) { + return sc.hpackEncoder, &sc.headerWriteBuf +} + +func (sc *serverConn) state(streamID uint32) (streamState, *stream) { + sc.serveG.check() + // http://tools.ietf.org/html/rfc7540#section-5.1 + if st, ok := sc.streams[streamID]; ok { + return st.state, st + } + // "The first use of a new stream identifier implicitly closes all + // streams in the "idle" state that might have been initiated by + // that peer with a lower-valued stream identifier. For example, if + // a client sends a HEADERS frame on stream 7 without ever sending a + // frame on stream 5, then stream 5 transitions to the "closed" + // state when the first frame for stream 7 is sent or received." + if streamID%2 == 1 { + if streamID <= sc.maxClientStreamID { + return stateClosed, nil + } + } else { + if streamID <= sc.maxPushPromiseID { + return stateClosed, nil + } + } + return stateIdle, nil +} + +// setConnState calls the net/http ConnState hook for this connection, if configured. +// Note that the net/http package does StateNew and StateClosed for us. +// There is currently no plan for StateHijacked or hijacking HTTP/2 connections. +func (sc *serverConn) setConnState(state http.ConnState) { + if sc.hs.ConnState != nil { + sc.hs.ConnState(sc.conn, state) + } +} + +func (sc *serverConn) vlogf(format string, args ...interface{}) { + if VerboseLogs { + sc.logf(format, args...) + } +} + +func (sc *serverConn) logf(format string, args ...interface{}) { + if lg := sc.hs.ErrorLog; lg != nil { + lg.Printf(format, args...) + } else { + log.Printf(format, args...) + } +} + +// errno returns v's underlying uintptr, else 0. +// +// TODO: remove this helper function once http2 can use build +// tags. See comment in isClosedConnError. +func errno(v error) uintptr { + if rv := reflect.ValueOf(v); rv.Kind() == reflect.Uintptr { + return uintptr(rv.Uint()) + } + return 0 +} + +// isClosedConnError reports whether err is an error from use of a closed +// network connection. +func isClosedConnError(err error) bool { + if err == nil { + return false + } + + // TODO: remove this string search and be more like the Windows + // case below. That might involve modifying the standard library + // to return better error types. + str := err.Error() + if strings.Contains(str, "use of closed network connection") { + return true + } + + // TODO(bradfitz): x/tools/cmd/bundle doesn't really support + // build tags, so I can't make an http2_windows.go file with + // Windows-specific stuff. Fix that and move this, once we + // have a way to bundle this into std's net/http somehow. + if runtime.GOOS == "windows" { + if oe, ok := err.(*net.OpError); ok && oe.Op == "read" { + if se, ok := oe.Err.(*os.SyscallError); ok && se.Syscall == "wsarecv" { + const WSAECONNABORTED = 10053 + const WSAECONNRESET = 10054 + if n := errno(se.Err); n == WSAECONNRESET || n == WSAECONNABORTED { + return true + } + } + } + } + return false +} + +func (sc *serverConn) condlogf(err error, format string, args ...interface{}) { + if err == nil { + return + } + if err == io.EOF || err == io.ErrUnexpectedEOF || isClosedConnError(err) { + // Boring, expected errors. + sc.vlogf(format, args...) + } else { + sc.logf(format, args...) + } +} + +func (sc *serverConn) canonicalHeader(v string) string { + sc.serveG.check() + cv, ok := commonCanonHeader[v] + if ok { + return cv + } + cv, ok = sc.canonHeader[v] + if ok { + return cv + } + if sc.canonHeader == nil { + sc.canonHeader = make(map[string]string) + } + cv = http.CanonicalHeaderKey(v) + sc.canonHeader[v] = cv + return cv +} + +type readFrameResult struct { + f Frame // valid until readMore is called + err error + + // readMore should be called once the consumer no longer needs or + // retains f. After readMore, f is invalid and more frames can be + // read. + readMore func() +} + +// readFrames is the loop that reads incoming frames. +// It takes care to only read one frame at a time, blocking until the +// consumer is done with the frame. +// It's run on its own goroutine. +func (sc *serverConn) readFrames() { + gate := make(gate) + gateDone := gate.Done + for { + f, err := sc.framer.ReadFrame() + select { + case sc.readFrameCh <- readFrameResult{f, err, gateDone}: + case <-sc.doneServing: + return + } + select { + case <-gate: + case <-sc.doneServing: + return + } + if terminalReadFrameError(err) { + return + } + } +} + +// frameWriteResult is the message passed from writeFrameAsync to the serve goroutine. +type frameWriteResult struct { + wr FrameWriteRequest // what was written (or attempted) + err error // result of the writeFrame call +} + +// writeFrameAsync runs in its own goroutine and writes a single frame +// and then reports when it's done. +// At most one goroutine can be running writeFrameAsync at a time per +// serverConn. +func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) { + err := wr.write.writeFrame(sc) + sc.wroteFrameCh <- frameWriteResult{wr, err} +} + +func (sc *serverConn) closeAllStreamsOnConnClose() { + sc.serveG.check() + for _, st := range sc.streams { + sc.closeStream(st, errClientDisconnected) + } +} + +func (sc *serverConn) stopShutdownTimer() { + sc.serveG.check() + if t := sc.shutdownTimer; t != nil { + t.Stop() + } +} + +func (sc *serverConn) notePanic() { + // Note: this is for serverConn.serve panicking, not http.Handler code. + if testHookOnPanicMu != nil { + testHookOnPanicMu.Lock() + defer testHookOnPanicMu.Unlock() + } + if testHookOnPanic != nil { + if e := recover(); e != nil { + if testHookOnPanic(sc, e) { + panic(e) + } + } + } +} + +func (sc *serverConn) serve() { + sc.serveG.check() + defer sc.notePanic() + defer sc.conn.Close() + defer sc.closeAllStreamsOnConnClose() + defer sc.stopShutdownTimer() + defer close(sc.doneServing) // unblocks handlers trying to send + + if VerboseLogs { + sc.vlogf("http2: server connection from %v on %p", sc.conn.RemoteAddr(), sc.hs) + } + + sc.writeFrame(FrameWriteRequest{ + write: writeSettings{ + {SettingMaxFrameSize, sc.srv.maxReadFrameSize()}, + {SettingMaxConcurrentStreams, sc.advMaxStreams}, + {SettingMaxHeaderListSize, sc.maxHeaderListSize()}, + {SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())}, + }, + }) + sc.unackedSettings++ + + // Each connection starts with intialWindowSize inflow tokens. + // If a higher value is configured, we add more tokens. + if diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 { + sc.sendWindowUpdate(nil, int(diff)) + } + + if err := sc.readPreface(); err != nil { + sc.condlogf(err, "http2: server: error reading preface from client %v: %v", sc.conn.RemoteAddr(), err) + return + } + // Now that we've got the preface, get us out of the + // "StateNew" state. We can't go directly to idle, though. + // Active means we read some data and anticipate a request. We'll + // do another Active when we get a HEADERS frame. + sc.setConnState(http.StateActive) + sc.setConnState(http.StateIdle) + + if sc.srv.IdleTimeout != 0 { + sc.idleTimer = time.NewTimer(sc.srv.IdleTimeout) + defer sc.idleTimer.Stop() + sc.idleTimerCh = sc.idleTimer.C + } + + var gracefulShutdownCh <-chan struct{} + if sc.hs != nil { + gracefulShutdownCh = h1ServerShutdownChan(sc.hs) + } + + go sc.readFrames() // closed by defer sc.conn.Close above + + settingsTimer := time.NewTimer(firstSettingsTimeout) + loopNum := 0 + for { + loopNum++ + select { + case wr := <-sc.wantWriteFrameCh: + sc.writeFrame(wr) + case spr := <-sc.wantStartPushCh: + sc.startPush(spr) + case res := <-sc.wroteFrameCh: + sc.wroteFrame(res) + case res := <-sc.readFrameCh: + if !sc.processFrameFromReader(res) { + return + } + res.readMore() + if settingsTimer.C != nil { + settingsTimer.Stop() + settingsTimer.C = nil + } + case m := <-sc.bodyReadCh: + sc.noteBodyRead(m.st, m.n) + case <-settingsTimer.C: + sc.logf("timeout waiting for SETTINGS frames from %v", sc.conn.RemoteAddr()) + return + case <-gracefulShutdownCh: + gracefulShutdownCh = nil + sc.startGracefulShutdown() + case <-sc.shutdownTimerCh: + sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr()) + return + case <-sc.idleTimerCh: + sc.vlogf("connection is idle") + sc.goAway(ErrCodeNo) + case fn := <-sc.testHookCh: + fn(loopNum) + } + + if sc.inGoAway && sc.curOpenStreams() == 0 && !sc.needToSendGoAway && !sc.writingFrame { + return + } + } +} + +// readPreface reads the ClientPreface greeting from the peer +// or returns an error on timeout or an invalid greeting. +func (sc *serverConn) readPreface() error { + errc := make(chan error, 1) + go func() { + // Read the client preface + buf := make([]byte, len(ClientPreface)) + if _, err := io.ReadFull(sc.conn, buf); err != nil { + errc <- err + } else if !bytes.Equal(buf, clientPreface) { + errc <- fmt.Errorf("bogus greeting %q", buf) + } else { + errc <- nil + } + }() + timer := time.NewTimer(prefaceTimeout) // TODO: configurable on *Server? + defer timer.Stop() + select { + case <-timer.C: + return errors.New("timeout waiting for client preface") + case err := <-errc: + if err == nil { + if VerboseLogs { + sc.vlogf("http2: server: client %v said hello", sc.conn.RemoteAddr()) + } + } + return err + } +} + +var errChanPool = sync.Pool{ + New: func() interface{} { return make(chan error, 1) }, +} + +var writeDataPool = sync.Pool{ + New: func() interface{} { return new(writeData) }, +} + +// writeDataFromHandler writes DATA response frames from a handler on +// the given stream. +func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStream bool) error { + ch := errChanPool.Get().(chan error) + writeArg := writeDataPool.Get().(*writeData) + *writeArg = writeData{stream.id, data, endStream} + err := sc.writeFrameFromHandler(FrameWriteRequest{ + write: writeArg, + stream: stream, + done: ch, + }) + if err != nil { + return err + } + var frameWriteDone bool // the frame write is done (successfully or not) + select { + case err = <-ch: + frameWriteDone = true + case <-sc.doneServing: + return errClientDisconnected + case <-stream.cw: + // If both ch and stream.cw were ready (as might + // happen on the final Write after an http.Handler + // ends), prefer the write result. Otherwise this + // might just be us successfully closing the stream. + // The writeFrameAsync and serve goroutines guarantee + // that the ch send will happen before the stream.cw + // close. + select { + case err = <-ch: + frameWriteDone = true + default: + return errStreamClosed + } + } + errChanPool.Put(ch) + if frameWriteDone { + writeDataPool.Put(writeArg) + } + return err +} + +// writeFrameFromHandler sends wr to sc.wantWriteFrameCh, but aborts +// if the connection has gone away. +// +// This must not be run from the serve goroutine itself, else it might +// deadlock writing to sc.wantWriteFrameCh (which is only mildly +// buffered and is read by serve itself). If you're on the serve +// goroutine, call writeFrame instead. +func (sc *serverConn) writeFrameFromHandler(wr FrameWriteRequest) error { + sc.serveG.checkNotOn() // NOT + select { + case sc.wantWriteFrameCh <- wr: + return nil + case <-sc.doneServing: + // Serve loop is gone. + // Client has closed their connection to the server. + return errClientDisconnected + } +} + +// writeFrame schedules a frame to write and sends it if there's nothing +// already being written. +// +// There is no pushback here (the serve goroutine never blocks). It's +// the http.Handlers that block, waiting for their previous frames to +// make it onto the wire +// +// If you're not on the serve goroutine, use writeFrameFromHandler instead. +func (sc *serverConn) writeFrame(wr FrameWriteRequest) { + sc.serveG.check() + + // If true, wr will not be written and wr.done will not be signaled. + var ignoreWrite bool + + // We are not allowed to write frames on closed streams. RFC 7540 Section + // 5.1.1 says: "An endpoint MUST NOT send frames other than PRIORITY on + // a closed stream." Our server never sends PRIORITY, so that exception + // does not apply. + // + // The serverConn might close an open stream while the stream's handler + // is still running. For example, the server might close a stream when it + // receives bad data from the client. If this happens, the handler might + // attempt to write a frame after the stream has been closed (since the + // handler hasn't yet been notified of the close). In this case, we simply + // ignore the frame. The handler will notice that the stream is closed when + // it waits for the frame to be written. + // + // As an exception to this rule, we allow sending RST_STREAM after close. + // This allows us to immediately reject new streams without tracking any + // state for those streams (except for the queued RST_STREAM frame). This + // may result in duplicate RST_STREAMs in some cases, but the client should + // ignore those. + if wr.StreamID() != 0 { + _, isReset := wr.write.(StreamError) + if state, _ := sc.state(wr.StreamID()); state == stateClosed && !isReset { + ignoreWrite = true + } + } + + // Don't send a 100-continue response if we've already sent headers. + // See golang.org/issue/14030. + switch wr.write.(type) { + case *writeResHeaders: + wr.stream.wroteHeaders = true + case write100ContinueHeadersFrame: + if wr.stream.wroteHeaders { + // We do not need to notify wr.done because this frame is + // never written with wr.done != nil. + if wr.done != nil { + panic("wr.done != nil for write100ContinueHeadersFrame") + } + ignoreWrite = true + } + } + + if !ignoreWrite { + sc.writeSched.Push(wr) + } + sc.scheduleFrameWrite() +} + +// startFrameWrite starts a goroutine to write wr (in a separate +// goroutine since that might block on the network), and updates the +// serve goroutine's state about the world, updated from info in wr. +func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) { + sc.serveG.check() + if sc.writingFrame { + panic("internal error: can only be writing one frame at a time") + } + + st := wr.stream + if st != nil { + switch st.state { + case stateHalfClosedLocal: + switch wr.write.(type) { + case StreamError, handlerPanicRST, writeWindowUpdate: + // RFC 7540 Section 5.1 allows sending RST_STREAM, PRIORITY, and WINDOW_UPDATE + // in this state. (We never send PRIORITY from the server, so that is not checked.) + default: + panic(fmt.Sprintf("internal error: attempt to send frame on a half-closed-local stream: %v", wr)) + } + case stateClosed: + panic(fmt.Sprintf("internal error: attempt to send frame on a closed stream: %v", wr)) + } + } + if wpp, ok := wr.write.(*writePushPromise); ok { + var err error + wpp.promisedID, err = wpp.allocatePromisedID() + if err != nil { + sc.writingFrameAsync = false + wr.replyToWriter(err) + return + } + } + + sc.writingFrame = true + sc.needsFrameFlush = true + if wr.write.staysWithinBuffer(sc.bw.Available()) { + sc.writingFrameAsync = false + err := wr.write.writeFrame(sc) + sc.wroteFrame(frameWriteResult{wr, err}) + } else { + sc.writingFrameAsync = true + go sc.writeFrameAsync(wr) + } +} + +// errHandlerPanicked is the error given to any callers blocked in a read from +// Request.Body when the main goroutine panics. Since most handlers read in the +// the main ServeHTTP goroutine, this will show up rarely. +var errHandlerPanicked = errors.New("http2: handler panicked") + +// wroteFrame is called on the serve goroutine with the result of +// whatever happened on writeFrameAsync. +func (sc *serverConn) wroteFrame(res frameWriteResult) { + sc.serveG.check() + if !sc.writingFrame { + panic("internal error: expected to be already writing a frame") + } + sc.writingFrame = false + sc.writingFrameAsync = false + + wr := res.wr + + if writeEndsStream(wr.write) { + st := wr.stream + if st == nil { + panic("internal error: expecting non-nil stream") + } + switch st.state { + case stateOpen: + // Here we would go to stateHalfClosedLocal in + // theory, but since our handler is done and + // the net/http package provides no mechanism + // for closing a ResponseWriter while still + // reading data (see possible TODO at top of + // this file), we go into closed state here + // anyway, after telling the peer we're + // hanging up on them. We'll transition to + // stateClosed after the RST_STREAM frame is + // written. + st.state = stateHalfClosedLocal + sc.resetStream(streamError(st.id, ErrCodeCancel)) + case stateHalfClosedRemote: + sc.closeStream(st, errHandlerComplete) + } + } else { + switch v := wr.write.(type) { + case StreamError: + // st may be unknown if the RST_STREAM was generated to reject bad input. + if st, ok := sc.streams[v.StreamID]; ok { + sc.closeStream(st, v) + } + case handlerPanicRST: + sc.closeStream(wr.stream, errHandlerPanicked) + } + } + + // Reply (if requested) to unblock the ServeHTTP goroutine. + wr.replyToWriter(res.err) + + sc.scheduleFrameWrite() +} + +// scheduleFrameWrite tickles the frame writing scheduler. +// +// If a frame is already being written, nothing happens. This will be called again +// when the frame is done being written. +// +// If a frame isn't being written we need to send one, the best frame +// to send is selected, preferring first things that aren't +// stream-specific (e.g. ACKing settings), and then finding the +// highest priority stream. +// +// If a frame isn't being written and there's nothing else to send, we +// flush the write buffer. +func (sc *serverConn) scheduleFrameWrite() { + sc.serveG.check() + if sc.writingFrame || sc.inFrameScheduleLoop { + return + } + sc.inFrameScheduleLoop = true + for !sc.writingFrameAsync { + if sc.needToSendGoAway { + sc.needToSendGoAway = false + sc.startFrameWrite(FrameWriteRequest{ + write: &writeGoAway{ + maxStreamID: sc.maxClientStreamID, + code: sc.goAwayCode, + }, + }) + continue + } + if sc.needToSendSettingsAck { + sc.needToSendSettingsAck = false + sc.startFrameWrite(FrameWriteRequest{write: writeSettingsAck{}}) + continue + } + if !sc.inGoAway || sc.goAwayCode == ErrCodeNo { + if wr, ok := sc.writeSched.Pop(); ok { + sc.startFrameWrite(wr) + continue + } + } + if sc.needsFrameFlush { + sc.startFrameWrite(FrameWriteRequest{write: flushFrameWriter{}}) + sc.needsFrameFlush = false // after startFrameWrite, since it sets this true + continue + } + break + } + sc.inFrameScheduleLoop = false +} + +// startGracefulShutdown sends a GOAWAY with ErrCodeNo to tell the +// client we're gracefully shutting down. The connection isn't closed +// until all current streams are done. +func (sc *serverConn) startGracefulShutdown() { + sc.goAwayIn(ErrCodeNo, 0) +} + +func (sc *serverConn) goAway(code ErrCode) { + sc.serveG.check() + var forceCloseIn time.Duration + if code != ErrCodeNo { + forceCloseIn = 250 * time.Millisecond + } else { + // TODO: configurable + forceCloseIn = 1 * time.Second + } + sc.goAwayIn(code, forceCloseIn) +} + +func (sc *serverConn) goAwayIn(code ErrCode, forceCloseIn time.Duration) { + sc.serveG.check() + if sc.inGoAway { + return + } + if forceCloseIn != 0 { + sc.shutDownIn(forceCloseIn) + } + sc.inGoAway = true + sc.needToSendGoAway = true + sc.goAwayCode = code + sc.scheduleFrameWrite() +} + +func (sc *serverConn) shutDownIn(d time.Duration) { + sc.serveG.check() + sc.shutdownTimer = time.NewTimer(d) + sc.shutdownTimerCh = sc.shutdownTimer.C +} + +func (sc *serverConn) resetStream(se StreamError) { + sc.serveG.check() + sc.writeFrame(FrameWriteRequest{write: se}) + if st, ok := sc.streams[se.StreamID]; ok { + st.resetQueued = true + } +} + +// processFrameFromReader processes the serve loop's read from readFrameCh from the +// frame-reading goroutine. +// processFrameFromReader returns whether the connection should be kept open. +func (sc *serverConn) processFrameFromReader(res readFrameResult) bool { + sc.serveG.check() + err := res.err + if err != nil { + if err == ErrFrameTooLarge { + sc.goAway(ErrCodeFrameSize) + return true // goAway will close the loop + } + clientGone := err == io.EOF || err == io.ErrUnexpectedEOF || isClosedConnError(err) + if clientGone { + // TODO: could we also get into this state if + // the peer does a half close + // (e.g. CloseWrite) because they're done + // sending frames but they're still wanting + // our open replies? Investigate. + // TODO: add CloseWrite to crypto/tls.Conn first + // so we have a way to test this? I suppose + // just for testing we could have a non-TLS mode. + return false + } + } else { + f := res.f + if VerboseLogs { + sc.vlogf("http2: server read frame %v", summarizeFrame(f)) + } + err = sc.processFrame(f) + if err == nil { + return true + } + } + + switch ev := err.(type) { + case StreamError: + sc.resetStream(ev) + return true + case goAwayFlowError: + sc.goAway(ErrCodeFlowControl) + return true + case ConnectionError: + sc.logf("http2: server connection error from %v: %v", sc.conn.RemoteAddr(), ev) + sc.goAway(ErrCode(ev)) + return true // goAway will handle shutdown + default: + if res.err != nil { + sc.vlogf("http2: server closing client connection; error reading frame from client %s: %v", sc.conn.RemoteAddr(), err) + } else { + sc.logf("http2: server closing client connection: %v", err) + } + return false + } +} + +func (sc *serverConn) processFrame(f Frame) error { + sc.serveG.check() + + // First frame received must be SETTINGS. + if !sc.sawFirstSettings { + if _, ok := f.(*SettingsFrame); !ok { + return ConnectionError(ErrCodeProtocol) + } + sc.sawFirstSettings = true + } + + switch f := f.(type) { + case *SettingsFrame: + return sc.processSettings(f) + case *MetaHeadersFrame: + return sc.processHeaders(f) + case *WindowUpdateFrame: + return sc.processWindowUpdate(f) + case *PingFrame: + return sc.processPing(f) + case *DataFrame: + return sc.processData(f) + case *RSTStreamFrame: + return sc.processResetStream(f) + case *PriorityFrame: + return sc.processPriority(f) + case *GoAwayFrame: + return sc.processGoAway(f) + case *PushPromiseFrame: + // A client cannot push. Thus, servers MUST treat the receipt of a PUSH_PROMISE + // frame as a connection error (Section 5.4.1) of type PROTOCOL_ERROR. + return ConnectionError(ErrCodeProtocol) + default: + sc.vlogf("http2: server ignoring frame: %v", f.Header()) + return nil + } +} + +func (sc *serverConn) processPing(f *PingFrame) error { + sc.serveG.check() + if f.IsAck() { + // 6.7 PING: " An endpoint MUST NOT respond to PING frames + // containing this flag." + return nil + } + if f.StreamID != 0 { + // "PING frames are not associated with any individual + // stream. If a PING frame is received with a stream + // identifier field value other than 0x0, the recipient MUST + // respond with a connection error (Section 5.4.1) of type + // PROTOCOL_ERROR." + return ConnectionError(ErrCodeProtocol) + } + if sc.inGoAway && sc.goAwayCode != ErrCodeNo { + return nil + } + sc.writeFrame(FrameWriteRequest{write: writePingAck{f}}) + return nil +} + +func (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error { + sc.serveG.check() + switch { + case f.StreamID != 0: // stream-level flow control + state, st := sc.state(f.StreamID) + if state == stateIdle { + // Section 5.1: "Receiving any frame other than HEADERS + // or PRIORITY on a stream in this state MUST be + // treated as a connection error (Section 5.4.1) of + // type PROTOCOL_ERROR." + return ConnectionError(ErrCodeProtocol) + } + if st == nil { + // "WINDOW_UPDATE can be sent by a peer that has sent a + // frame bearing the END_STREAM flag. This means that a + // receiver could receive a WINDOW_UPDATE frame on a "half + // closed (remote)" or "closed" stream. A receiver MUST + // NOT treat this as an error, see Section 5.1." + return nil + } + if !st.flow.add(int32(f.Increment)) { + return streamError(f.StreamID, ErrCodeFlowControl) + } + default: // connection-level flow control + if !sc.flow.add(int32(f.Increment)) { + return goAwayFlowError{} + } + } + sc.scheduleFrameWrite() + return nil +} + +func (sc *serverConn) processResetStream(f *RSTStreamFrame) error { + sc.serveG.check() + + state, st := sc.state(f.StreamID) + if state == stateIdle { + // 6.4 "RST_STREAM frames MUST NOT be sent for a + // stream in the "idle" state. If a RST_STREAM frame + // identifying an idle stream is received, the + // recipient MUST treat this as a connection error + // (Section 5.4.1) of type PROTOCOL_ERROR. + return ConnectionError(ErrCodeProtocol) + } + if st != nil { + st.cancelCtx() + sc.closeStream(st, streamError(f.StreamID, f.ErrCode)) + } + return nil +} + +func (sc *serverConn) closeStream(st *stream, err error) { + sc.serveG.check() + if st.state == stateIdle || st.state == stateClosed { + panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state)) + } + st.state = stateClosed + if st.isPushed() { + sc.curPushedStreams-- + } else { + sc.curClientStreams-- + } + delete(sc.streams, st.id) + if len(sc.streams) == 0 { + sc.setConnState(http.StateIdle) + if sc.srv.IdleTimeout != 0 { + sc.idleTimer.Reset(sc.srv.IdleTimeout) + } + if h1ServerKeepAlivesDisabled(sc.hs) { + sc.startGracefulShutdown() + } + } + if p := st.body; p != nil { + // Return any buffered unread bytes worth of conn-level flow control. + // See golang.org/issue/16481 + sc.sendWindowUpdate(nil, p.Len()) + + p.CloseWithError(err) + } + st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc + sc.writeSched.CloseStream(st.id) +} + +func (sc *serverConn) processSettings(f *SettingsFrame) error { + sc.serveG.check() + if f.IsAck() { + sc.unackedSettings-- + if sc.unackedSettings < 0 { + // Why is the peer ACKing settings we never sent? + // The spec doesn't mention this case, but + // hang up on them anyway. + return ConnectionError(ErrCodeProtocol) + } + return nil + } + if err := f.ForeachSetting(sc.processSetting); err != nil { + return err + } + sc.needToSendSettingsAck = true + sc.scheduleFrameWrite() + return nil +} + +func (sc *serverConn) processSetting(s Setting) error { + sc.serveG.check() + if err := s.Valid(); err != nil { + return err + } + if VerboseLogs { + sc.vlogf("http2: server processing setting %v", s) + } + switch s.ID { + case SettingHeaderTableSize: + sc.headerTableSize = s.Val + sc.hpackEncoder.SetMaxDynamicTableSize(s.Val) + case SettingEnablePush: + sc.pushEnabled = s.Val != 0 + case SettingMaxConcurrentStreams: + sc.clientMaxStreams = s.Val + case SettingInitialWindowSize: + return sc.processSettingInitialWindowSize(s.Val) + case SettingMaxFrameSize: + sc.maxFrameSize = int32(s.Val) // the maximum valid s.Val is < 2^31 + case SettingMaxHeaderListSize: + sc.peerMaxHeaderListSize = s.Val + default: + // Unknown setting: "An endpoint that receives a SETTINGS + // frame with any unknown or unsupported identifier MUST + // ignore that setting." + if VerboseLogs { + sc.vlogf("http2: server ignoring unknown setting %v", s) + } + } + return nil +} + +func (sc *serverConn) processSettingInitialWindowSize(val uint32) error { + sc.serveG.check() + // Note: val already validated to be within range by + // processSetting's Valid call. + + // "A SETTINGS frame can alter the initial flow control window + // size for all current streams. When the value of + // SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver MUST + // adjust the size of all stream flow control windows that it + // maintains by the difference between the new value and the + // old value." + old := sc.initialStreamSendWindowSize + sc.initialStreamSendWindowSize = int32(val) + growth := int32(val) - old // may be negative + for _, st := range sc.streams { + if !st.flow.add(growth) { + // 6.9.2 Initial Flow Control Window Size + // "An endpoint MUST treat a change to + // SETTINGS_INITIAL_WINDOW_SIZE that causes any flow + // control window to exceed the maximum size as a + // connection error (Section 5.4.1) of type + // FLOW_CONTROL_ERROR." + return ConnectionError(ErrCodeFlowControl) + } + } + return nil +} + +func (sc *serverConn) processData(f *DataFrame) error { + sc.serveG.check() + if sc.inGoAway && sc.goAwayCode != ErrCodeNo { + return nil + } + data := f.Data() + + // "If a DATA frame is received whose stream is not in "open" + // or "half closed (local)" state, the recipient MUST respond + // with a stream error (Section 5.4.2) of type STREAM_CLOSED." + id := f.Header().StreamID + state, st := sc.state(id) + if id == 0 || state == stateIdle { + // Section 5.1: "Receiving any frame other than HEADERS + // or PRIORITY on a stream in this state MUST be + // treated as a connection error (Section 5.4.1) of + // type PROTOCOL_ERROR." + return ConnectionError(ErrCodeProtocol) + } + if st == nil || state != stateOpen || st.gotTrailerHeader || st.resetQueued { + // This includes sending a RST_STREAM if the stream is + // in stateHalfClosedLocal (which currently means that + // the http.Handler returned, so it's done reading & + // done writing). Try to stop the client from sending + // more DATA. + + // But still enforce their connection-level flow control, + // and return any flow control bytes since we're not going + // to consume them. + if sc.inflow.available() < int32(f.Length) { + return streamError(id, ErrCodeFlowControl) + } + // Deduct the flow control from inflow, since we're + // going to immediately add it back in + // sendWindowUpdate, which also schedules sending the + // frames. + sc.inflow.take(int32(f.Length)) + sc.sendWindowUpdate(nil, int(f.Length)) // conn-level + + if st != nil && st.resetQueued { + // Already have a stream error in flight. Don't send another. + return nil + } + return streamError(id, ErrCodeStreamClosed) + } + if st.body == nil { + panic("internal error: should have a body in this state") + } + + // Sender sending more than they'd declared? + if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes { + st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes)) + return streamError(id, ErrCodeStreamClosed) + } + if f.Length > 0 { + // Check whether the client has flow control quota. + if st.inflow.available() < int32(f.Length) { + return streamError(id, ErrCodeFlowControl) + } + st.inflow.take(int32(f.Length)) + + if len(data) > 0 { + wrote, err := st.body.Write(data) + if err != nil { + return streamError(id, ErrCodeStreamClosed) + } + if wrote != len(data) { + panic("internal error: bad Writer") + } + st.bodyBytes += int64(len(data)) + } + + // Return any padded flow control now, since we won't + // refund it later on body reads. + if pad := int32(f.Length) - int32(len(data)); pad > 0 { + sc.sendWindowUpdate32(nil, pad) + sc.sendWindowUpdate32(st, pad) + } + } + if f.StreamEnded() { + st.endStream() + } + return nil +} + +func (sc *serverConn) processGoAway(f *GoAwayFrame) error { + sc.serveG.check() + if f.ErrCode != ErrCodeNo { + sc.logf("http2: received GOAWAY %+v, starting graceful shutdown", f) + } else { + sc.vlogf("http2: received GOAWAY %+v, starting graceful shutdown", f) + } + sc.startGracefulShutdown() + // http://tools.ietf.org/html/rfc7540#section-6.8 + // We should not create any new streams, which means we should disable push. + sc.pushEnabled = false + return nil +} + +// isPushed reports whether the stream is server-initiated. +func (st *stream) isPushed() bool { + return st.id%2 == 0 +} + +// endStream closes a Request.Body's pipe. It is called when a DATA +// frame says a request body is over (or after trailers). +func (st *stream) endStream() { + sc := st.sc + sc.serveG.check() + + if st.declBodyBytes != -1 && st.declBodyBytes != st.bodyBytes { + st.body.CloseWithError(fmt.Errorf("request declared a Content-Length of %d but only wrote %d bytes", + st.declBodyBytes, st.bodyBytes)) + } else { + st.body.closeWithErrorAndCode(io.EOF, st.copyTrailersToHandlerRequest) + st.body.CloseWithError(io.EOF) + } + st.state = stateHalfClosedRemote +} + +// copyTrailersToHandlerRequest is run in the Handler's goroutine in +// its Request.Body.Read just before it gets io.EOF. +func (st *stream) copyTrailersToHandlerRequest() { + for k, vv := range st.trailer { + if _, ok := st.reqTrailer[k]; ok { + // Only copy it over it was pre-declared. + st.reqTrailer[k] = vv + } + } +} + +func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { + sc.serveG.check() + id := f.StreamID + if sc.inGoAway { + // Ignore. + return nil + } + // http://tools.ietf.org/html/rfc7540#section-5.1.1 + // Streams initiated by a client MUST use odd-numbered stream + // identifiers. [...] An endpoint that receives an unexpected + // stream identifier MUST respond with a connection error + // (Section 5.4.1) of type PROTOCOL_ERROR. + if id%2 != 1 { + return ConnectionError(ErrCodeProtocol) + } + // A HEADERS frame can be used to create a new stream or + // send a trailer for an open one. If we already have a stream + // open, let it process its own HEADERS frame (trailers at this + // point, if it's valid). + if st := sc.streams[f.StreamID]; st != nil { + if st.resetQueued { + // We're sending RST_STREAM to close the stream, so don't bother + // processing this frame. + return nil + } + return st.processTrailerHeaders(f) + } + + // [...] The identifier of a newly established stream MUST be + // numerically greater than all streams that the initiating + // endpoint has opened or reserved. [...] An endpoint that + // receives an unexpected stream identifier MUST respond with + // a connection error (Section 5.4.1) of type PROTOCOL_ERROR. + if id <= sc.maxClientStreamID { + return ConnectionError(ErrCodeProtocol) + } + sc.maxClientStreamID = id + + if sc.idleTimer != nil { + sc.idleTimer.Stop() + } + + // http://tools.ietf.org/html/rfc7540#section-5.1.2 + // [...] Endpoints MUST NOT exceed the limit set by their peer. An + // endpoint that receives a HEADERS frame that causes their + // advertised concurrent stream limit to be exceeded MUST treat + // this as a stream error (Section 5.4.2) of type PROTOCOL_ERROR + // or REFUSED_STREAM. + if sc.curClientStreams+1 > sc.advMaxStreams { + if sc.unackedSettings == 0 { + // They should know better. + return streamError(id, ErrCodeProtocol) + } + // Assume it's a network race, where they just haven't + // received our last SETTINGS update. But actually + // this can't happen yet, because we don't yet provide + // a way for users to adjust server parameters at + // runtime. + return streamError(id, ErrCodeRefusedStream) + } + + initialState := stateOpen + if f.StreamEnded() { + initialState = stateHalfClosedRemote + } + st := sc.newStream(id, 0, initialState) + + if f.HasPriority() { + if err := checkPriority(f.StreamID, f.Priority); err != nil { + return err + } + sc.writeSched.AdjustStream(st.id, f.Priority) + } + + rw, req, err := sc.newWriterAndRequest(st, f) + if err != nil { + return err + } + st.reqTrailer = req.Trailer + if st.reqTrailer != nil { + st.trailer = make(http.Header) + } + st.body = req.Body.(*requestBody).pipe // may be nil + st.declBodyBytes = req.ContentLength + + handler := sc.handler.ServeHTTP + if f.Truncated { + // Their header list was too long. Send a 431 error. + handler = handleHeaderListTooLong + } else if err := checkValidHTTP2RequestHeaders(req.Header); err != nil { + handler = new400Handler(err) + } + + // The net/http package sets the read deadline from the + // http.Server.ReadTimeout during the TLS handshake, but then + // passes the connection off to us with the deadline already + // set. Disarm it here after the request headers are read, + // similar to how the http1 server works. Here it's + // technically more like the http1 Server's ReadHeaderTimeout + // (in Go 1.8), though. That's a more sane option anyway. + if sc.hs.ReadTimeout != 0 { + sc.conn.SetReadDeadline(time.Time{}) + } + + go sc.runHandler(rw, req, handler) + return nil +} + +func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error { + sc := st.sc + sc.serveG.check() + if st.gotTrailerHeader { + return ConnectionError(ErrCodeProtocol) + } + st.gotTrailerHeader = true + if !f.StreamEnded() { + return streamError(st.id, ErrCodeProtocol) + } + + if len(f.PseudoFields()) > 0 { + return streamError(st.id, ErrCodeProtocol) + } + if st.trailer != nil { + for _, hf := range f.RegularFields() { + key := sc.canonicalHeader(hf.Name) + if !ValidTrailerHeader(key) { + // TODO: send more details to the peer somehow. But http2 has + // no way to send debug data at a stream level. Discuss with + // HTTP folk. + return streamError(st.id, ErrCodeProtocol) + } + st.trailer[key] = append(st.trailer[key], hf.Value) + } + } + st.endStream() + return nil +} + +func checkPriority(streamID uint32, p PriorityParam) error { + if streamID == p.StreamDep { + // Section 5.3.1: "A stream cannot depend on itself. An endpoint MUST treat + // this as a stream error (Section 5.4.2) of type PROTOCOL_ERROR." + // Section 5.3.3 says that a stream can depend on one of its dependencies, + // so it's only self-dependencies that are forbidden. + return streamError(streamID, ErrCodeProtocol) + } + return nil +} + +func (sc *serverConn) processPriority(f *PriorityFrame) error { + if sc.inGoAway { + return nil + } + if err := checkPriority(f.StreamID, f.PriorityParam); err != nil { + return err + } + sc.writeSched.AdjustStream(f.StreamID, f.PriorityParam) + return nil +} + +func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream { + sc.serveG.check() + if id == 0 { + panic("internal error: cannot create stream with id 0") + } + + ctx, cancelCtx := contextWithCancel(sc.baseCtx) + st := &stream{ + sc: sc, + id: id, + state: state, + ctx: ctx, + cancelCtx: cancelCtx, + } + st.cw.Init() + st.flow.conn = &sc.flow // link to conn-level counter + st.flow.add(sc.initialStreamSendWindowSize) + st.inflow.conn = &sc.inflow // link to conn-level counter + st.inflow.add(sc.srv.initialStreamRecvWindowSize()) + + sc.streams[id] = st + sc.writeSched.OpenStream(st.id, OpenStreamOptions{PusherID: pusherID}) + if st.isPushed() { + sc.curPushedStreams++ + } else { + sc.curClientStreams++ + } + if sc.curOpenStreams() == 1 { + sc.setConnState(http.StateActive) + } + + return st +} + +func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) { + sc.serveG.check() + + rp := requestParam{ + method: f.PseudoValue("method"), + scheme: f.PseudoValue("scheme"), + authority: f.PseudoValue("authority"), + path: f.PseudoValue("path"), + } + + isConnect := rp.method == "CONNECT" + if isConnect { + if rp.path != "" || rp.scheme != "" || rp.authority == "" { + return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + } + } else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") { + // See 8.1.2.6 Malformed Requests and Responses: + // + // Malformed requests or responses that are detected + // MUST be treated as a stream error (Section 5.4.2) + // of type PROTOCOL_ERROR." + // + // 8.1.2.3 Request Pseudo-Header Fields + // "All HTTP/2 requests MUST include exactly one valid + // value for the :method, :scheme, and :path + // pseudo-header fields" + return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + } + + bodyOpen := !f.StreamEnded() + if rp.method == "HEAD" && bodyOpen { + // HEAD requests can't have bodies + return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + } + + rp.header = make(http.Header) + for _, hf := range f.RegularFields() { + rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value) + } + if rp.authority == "" { + rp.authority = rp.header.Get("Host") + } + + rw, req, err := sc.newWriterAndRequestNoBody(st, rp) + if err != nil { + return nil, nil, err + } + if bodyOpen { + if vv, ok := rp.header["Content-Length"]; ok { + req.ContentLength, _ = strconv.ParseInt(vv[0], 10, 64) + } else { + req.ContentLength = -1 + } + req.Body.(*requestBody).pipe = &pipe{ + b: &dataBuffer{expected: req.ContentLength}, + } + } + return rw, req, nil +} + +type requestParam struct { + method string + scheme, authority, path string + header http.Header +} + +func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*responseWriter, *http.Request, error) { + sc.serveG.check() + + var tlsState *tls.ConnectionState // nil if not scheme https + if rp.scheme == "https" { + tlsState = sc.tlsState + } + + needsContinue := rp.header.Get("Expect") == "100-continue" + if needsContinue { + rp.header.Del("Expect") + } + // Merge Cookie headers into one "; "-delimited value. + if cookies := rp.header["Cookie"]; len(cookies) > 1 { + rp.header.Set("Cookie", strings.Join(cookies, "; ")) + } + + // Setup Trailers + var trailer http.Header + for _, v := range rp.header["Trailer"] { + for _, key := range strings.Split(v, ",") { + key = http.CanonicalHeaderKey(strings.TrimSpace(key)) + switch key { + case "Transfer-Encoding", "Trailer", "Content-Length": + // Bogus. (copy of http1 rules) + // Ignore. + default: + if trailer == nil { + trailer = make(http.Header) + } + trailer[key] = nil + } + } + } + delete(rp.header, "Trailer") + + var url_ *url.URL + var requestURI string + if rp.method == "CONNECT" { + url_ = &url.URL{Host: rp.authority} + requestURI = rp.authority // mimic HTTP/1 server behavior + } else { + var err error + url_, err = url.ParseRequestURI(rp.path) + if err != nil { + return nil, nil, streamError(st.id, ErrCodeProtocol) + } + requestURI = rp.path + } + + body := &requestBody{ + conn: sc, + stream: st, + needsContinue: needsContinue, + } + req := &http.Request{ + Method: rp.method, + URL: url_, + RemoteAddr: sc.remoteAddrStr, + Header: rp.header, + RequestURI: requestURI, + Proto: "HTTP/2.0", + ProtoMajor: 2, + ProtoMinor: 0, + TLS: tlsState, + Host: rp.authority, + Body: body, + Trailer: trailer, + } + req = requestWithContext(req, st.ctx) + + rws := responseWriterStatePool.Get().(*responseWriterState) + bwSave := rws.bw + *rws = responseWriterState{} // zero all the fields + rws.conn = sc + rws.bw = bwSave + rws.bw.Reset(chunkWriter{rws}) + rws.stream = st + rws.req = req + rws.body = body + + rw := &responseWriter{rws: rws} + return rw, req, nil +} + +// Run on its own goroutine. +func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) { + didPanic := true + defer func() { + rw.rws.stream.cancelCtx() + if didPanic { + e := recover() + sc.writeFrameFromHandler(FrameWriteRequest{ + write: handlerPanicRST{rw.rws.stream.id}, + stream: rw.rws.stream, + }) + // Same as net/http: + if shouldLogPanic(e) { + const size = 64 << 10 + buf := make([]byte, size) + buf = buf[:runtime.Stack(buf, false)] + sc.logf("http2: panic serving %v: %v\n%s", sc.conn.RemoteAddr(), e, buf) + } + return + } + rw.handlerDone() + }() + handler(rw, req) + didPanic = false +} + +func handleHeaderListTooLong(w http.ResponseWriter, r *http.Request) { + // 10.5.1 Limits on Header Block Size: + // .. "A server that receives a larger header block than it is + // willing to handle can send an HTTP 431 (Request Header Fields Too + // Large) status code" + const statusRequestHeaderFieldsTooLarge = 431 // only in Go 1.6+ + w.WriteHeader(statusRequestHeaderFieldsTooLarge) + io.WriteString(w, "

    HTTP Error 431

    Request Header Field(s) Too Large

    ") +} + +// called from handler goroutines. +// h may be nil. +func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) error { + sc.serveG.checkNotOn() // NOT on + var errc chan error + if headerData.h != nil { + // If there's a header map (which we don't own), so we have to block on + // waiting for this frame to be written, so an http.Flush mid-handler + // writes out the correct value of keys, before a handler later potentially + // mutates it. + errc = errChanPool.Get().(chan error) + } + if err := sc.writeFrameFromHandler(FrameWriteRequest{ + write: headerData, + stream: st, + done: errc, + }); err != nil { + return err + } + if errc != nil { + select { + case err := <-errc: + errChanPool.Put(errc) + return err + case <-sc.doneServing: + return errClientDisconnected + case <-st.cw: + return errStreamClosed + } + } + return nil +} + +// called from handler goroutines. +func (sc *serverConn) write100ContinueHeaders(st *stream) { + sc.writeFrameFromHandler(FrameWriteRequest{ + write: write100ContinueHeadersFrame{st.id}, + stream: st, + }) +} + +// A bodyReadMsg tells the server loop that the http.Handler read n +// bytes of the DATA from the client on the given stream. +type bodyReadMsg struct { + st *stream + n int +} + +// called from handler goroutines. +// Notes that the handler for the given stream ID read n bytes of its body +// and schedules flow control tokens to be sent. +func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int, err error) { + sc.serveG.checkNotOn() // NOT on + if n > 0 { + select { + case sc.bodyReadCh <- bodyReadMsg{st, n}: + case <-sc.doneServing: + } + } +} + +func (sc *serverConn) noteBodyRead(st *stream, n int) { + sc.serveG.check() + sc.sendWindowUpdate(nil, n) // conn-level + if st.state != stateHalfClosedRemote && st.state != stateClosed { + // Don't send this WINDOW_UPDATE if the stream is closed + // remotely. + sc.sendWindowUpdate(st, n) + } +} + +// st may be nil for conn-level +func (sc *serverConn) sendWindowUpdate(st *stream, n int) { + sc.serveG.check() + // "The legal range for the increment to the flow control + // window is 1 to 2^31-1 (2,147,483,647) octets." + // A Go Read call on 64-bit machines could in theory read + // a larger Read than this. Very unlikely, but we handle it here + // rather than elsewhere for now. + const maxUint31 = 1<<31 - 1 + for n >= maxUint31 { + sc.sendWindowUpdate32(st, maxUint31) + n -= maxUint31 + } + sc.sendWindowUpdate32(st, int32(n)) +} + +// st may be nil for conn-level +func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) { + sc.serveG.check() + if n == 0 { + return + } + if n < 0 { + panic("negative update") + } + var streamID uint32 + if st != nil { + streamID = st.id + } + sc.writeFrame(FrameWriteRequest{ + write: writeWindowUpdate{streamID: streamID, n: uint32(n)}, + stream: st, + }) + var ok bool + if st == nil { + ok = sc.inflow.add(n) + } else { + ok = st.inflow.add(n) + } + if !ok { + panic("internal error; sent too many window updates without decrements?") + } +} + +// requestBody is the Handler's Request.Body type. +// Read and Close may be called concurrently. +type requestBody struct { + stream *stream + conn *serverConn + closed bool // for use by Close only + sawEOF bool // for use by Read only + pipe *pipe // non-nil if we have a HTTP entity message body + needsContinue bool // need to send a 100-continue +} + +func (b *requestBody) Close() error { + if b.pipe != nil && !b.closed { + b.pipe.BreakWithError(errClosedBody) + } + b.closed = true + return nil +} + +func (b *requestBody) Read(p []byte) (n int, err error) { + if b.needsContinue { + b.needsContinue = false + b.conn.write100ContinueHeaders(b.stream) + } + if b.pipe == nil || b.sawEOF { + return 0, io.EOF + } + n, err = b.pipe.Read(p) + if err == io.EOF { + b.sawEOF = true + } + if b.conn == nil && inTests { + return + } + b.conn.noteBodyReadFromHandler(b.stream, n, err) + return +} + +// responseWriter is the http.ResponseWriter implementation. It's +// intentionally small (1 pointer wide) to minimize garbage. The +// responseWriterState pointer inside is zeroed at the end of a +// request (in handlerDone) and calls on the responseWriter thereafter +// simply crash (caller's mistake), but the much larger responseWriterState +// and buffers are reused between multiple requests. +type responseWriter struct { + rws *responseWriterState +} + +// Optional http.ResponseWriter interfaces implemented. +var ( + _ http.CloseNotifier = (*responseWriter)(nil) + _ http.Flusher = (*responseWriter)(nil) + _ stringWriter = (*responseWriter)(nil) +) + +type responseWriterState struct { + // immutable within a request: + stream *stream + req *http.Request + body *requestBody // to close at end of request, if DATA frames didn't + conn *serverConn + + // TODO: adjust buffer writing sizes based on server config, frame size updates from peer, etc + bw *bufio.Writer // writing to a chunkWriter{this *responseWriterState} + + // mutated by http.Handler goroutine: + handlerHeader http.Header // nil until called + snapHeader http.Header // snapshot of handlerHeader at WriteHeader time + trailers []string // set in writeChunk + status int // status code passed to WriteHeader + wroteHeader bool // WriteHeader called (explicitly or implicitly). Not necessarily sent to user yet. + sentHeader bool // have we sent the header frame? + handlerDone bool // handler has finished + + sentContentLen int64 // non-zero if handler set a Content-Length header + wroteBytes int64 + + closeNotifierMu sync.Mutex // guards closeNotifierCh + closeNotifierCh chan bool // nil until first used +} + +type chunkWriter struct{ rws *responseWriterState } + +func (cw chunkWriter) Write(p []byte) (n int, err error) { return cw.rws.writeChunk(p) } + +func (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) != 0 } + +// declareTrailer is called for each Trailer header when the +// response header is written. It notes that a header will need to be +// written in the trailers at the end of the response. +func (rws *responseWriterState) declareTrailer(k string) { + k = http.CanonicalHeaderKey(k) + if !ValidTrailerHeader(k) { + // Forbidden by RFC 2616 14.40. + rws.conn.logf("ignoring invalid trailer %q", k) + return + } + if !strSliceContains(rws.trailers, k) { + rws.trailers = append(rws.trailers, k) + } +} + +// writeChunk writes chunks from the bufio.Writer. But because +// bufio.Writer may bypass its chunking, sometimes p may be +// arbitrarily large. +// +// writeChunk is also responsible (on the first chunk) for sending the +// HEADER response. +func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { + if !rws.wroteHeader { + rws.writeHeader(200) + } + + isHeadResp := rws.req.Method == "HEAD" + if !rws.sentHeader { + rws.sentHeader = true + var ctype, clen string + if clen = rws.snapHeader.Get("Content-Length"); clen != "" { + rws.snapHeader.Del("Content-Length") + clen64, err := strconv.ParseInt(clen, 10, 64) + if err == nil && clen64 >= 0 { + rws.sentContentLen = clen64 + } else { + clen = "" + } + } + if clen == "" && rws.handlerDone && bodyAllowedForStatus(rws.status) && (len(p) > 0 || !isHeadResp) { + clen = strconv.Itoa(len(p)) + } + _, hasContentType := rws.snapHeader["Content-Type"] + if !hasContentType && bodyAllowedForStatus(rws.status) { + ctype = http.DetectContentType(p) + } + var date string + if _, ok := rws.snapHeader["Date"]; !ok { + // TODO(bradfitz): be faster here, like net/http? measure. + date = time.Now().UTC().Format(http.TimeFormat) + } + + for _, v := range rws.snapHeader["Trailer"] { + foreachHeaderElement(v, rws.declareTrailer) + } + + endStream := (rws.handlerDone && !rws.hasTrailers() && len(p) == 0) || isHeadResp + err = rws.conn.writeHeaders(rws.stream, &writeResHeaders{ + streamID: rws.stream.id, + httpResCode: rws.status, + h: rws.snapHeader, + endStream: endStream, + contentType: ctype, + contentLength: clen, + date: date, + }) + if err != nil { + return 0, err + } + if endStream { + return 0, nil + } + } + if isHeadResp { + return len(p), nil + } + if len(p) == 0 && !rws.handlerDone { + return 0, nil + } + + if rws.handlerDone { + rws.promoteUndeclaredTrailers() + } + + endStream := rws.handlerDone && !rws.hasTrailers() + if len(p) > 0 || endStream { + // only send a 0 byte DATA frame if we're ending the stream. + if err := rws.conn.writeDataFromHandler(rws.stream, p, endStream); err != nil { + return 0, err + } + } + + if rws.handlerDone && rws.hasTrailers() { + err = rws.conn.writeHeaders(rws.stream, &writeResHeaders{ + streamID: rws.stream.id, + h: rws.handlerHeader, + trailers: rws.trailers, + endStream: true, + }) + return len(p), err + } + return len(p), nil +} + +// TrailerPrefix is a magic prefix for ResponseWriter.Header map keys +// that, if present, signals that the map entry is actually for +// the response trailers, and not the response headers. The prefix +// is stripped after the ServeHTTP call finishes and the values are +// sent in the trailers. +// +// This mechanism is intended only for trailers that are not known +// prior to the headers being written. If the set of trailers is fixed +// or known before the header is written, the normal Go trailers mechanism +// is preferred: +// https://golang.org/pkg/net/http/#ResponseWriter +// https://golang.org/pkg/net/http/#example_ResponseWriter_trailers +const TrailerPrefix = "Trailer:" + +// promoteUndeclaredTrailers permits http.Handlers to set trailers +// after the header has already been flushed. Because the Go +// ResponseWriter interface has no way to set Trailers (only the +// Header), and because we didn't want to expand the ResponseWriter +// interface, and because nobody used trailers, and because RFC 2616 +// says you SHOULD (but not must) predeclare any trailers in the +// header, the official ResponseWriter rules said trailers in Go must +// be predeclared, and then we reuse the same ResponseWriter.Header() +// map to mean both Headers and Trailers. When it's time to write the +// Trailers, we pick out the fields of Headers that were declared as +// trailers. That worked for a while, until we found the first major +// user of Trailers in the wild: gRPC (using them only over http2), +// and gRPC libraries permit setting trailers mid-stream without +// predeclarnig them. So: change of plans. We still permit the old +// way, but we also permit this hack: if a Header() key begins with +// "Trailer:", the suffix of that key is a Trailer. Because ':' is an +// invalid token byte anyway, there is no ambiguity. (And it's already +// filtered out) It's mildly hacky, but not terrible. +// +// This method runs after the Handler is done and promotes any Header +// fields to be trailers. +func (rws *responseWriterState) promoteUndeclaredTrailers() { + for k, vv := range rws.handlerHeader { + if !strings.HasPrefix(k, TrailerPrefix) { + continue + } + trailerKey := strings.TrimPrefix(k, TrailerPrefix) + rws.declareTrailer(trailerKey) + rws.handlerHeader[http.CanonicalHeaderKey(trailerKey)] = vv + } + + if len(rws.trailers) > 1 { + sorter := sorterPool.Get().(*sorter) + sorter.SortStrings(rws.trailers) + sorterPool.Put(sorter) + } +} + +func (w *responseWriter) Flush() { + rws := w.rws + if rws == nil { + panic("Header called after Handler finished") + } + if rws.bw.Buffered() > 0 { + if err := rws.bw.Flush(); err != nil { + // Ignore the error. The frame writer already knows. + return + } + } else { + // The bufio.Writer won't call chunkWriter.Write + // (writeChunk with zero bytes, so we have to do it + // ourselves to force the HTTP response header and/or + // final DATA frame (with END_STREAM) to be sent. + rws.writeChunk(nil) + } +} + +func (w *responseWriter) CloseNotify() <-chan bool { + rws := w.rws + if rws == nil { + panic("CloseNotify called after Handler finished") + } + rws.closeNotifierMu.Lock() + ch := rws.closeNotifierCh + if ch == nil { + ch = make(chan bool, 1) + rws.closeNotifierCh = ch + cw := rws.stream.cw + go func() { + cw.Wait() // wait for close + ch <- true + }() + } + rws.closeNotifierMu.Unlock() + return ch +} + +func (w *responseWriter) Header() http.Header { + rws := w.rws + if rws == nil { + panic("Header called after Handler finished") + } + if rws.handlerHeader == nil { + rws.handlerHeader = make(http.Header) + } + return rws.handlerHeader +} + +func (w *responseWriter) WriteHeader(code int) { + rws := w.rws + if rws == nil { + panic("WriteHeader called after Handler finished") + } + rws.writeHeader(code) +} + +func (rws *responseWriterState) writeHeader(code int) { + if !rws.wroteHeader { + rws.wroteHeader = true + rws.status = code + if len(rws.handlerHeader) > 0 { + rws.snapHeader = cloneHeader(rws.handlerHeader) + } + } +} + +func cloneHeader(h http.Header) http.Header { + h2 := make(http.Header, len(h)) + for k, vv := range h { + vv2 := make([]string, len(vv)) + copy(vv2, vv) + h2[k] = vv2 + } + return h2 +} + +// The Life Of A Write is like this: +// +// * Handler calls w.Write or w.WriteString -> +// * -> rws.bw (*bufio.Writer) -> +// * (Handler migth call Flush) +// * -> chunkWriter{rws} +// * -> responseWriterState.writeChunk(p []byte) +// * -> responseWriterState.writeChunk (most of the magic; see comment there) +func (w *responseWriter) Write(p []byte) (n int, err error) { + return w.write(len(p), p, "") +} + +func (w *responseWriter) WriteString(s string) (n int, err error) { + return w.write(len(s), nil, s) +} + +// either dataB or dataS is non-zero. +func (w *responseWriter) write(lenData int, dataB []byte, dataS string) (n int, err error) { + rws := w.rws + if rws == nil { + panic("Write called after Handler finished") + } + if !rws.wroteHeader { + w.WriteHeader(200) + } + if !bodyAllowedForStatus(rws.status) { + return 0, http.ErrBodyNotAllowed + } + rws.wroteBytes += int64(len(dataB)) + int64(len(dataS)) // only one can be set + if rws.sentContentLen != 0 && rws.wroteBytes > rws.sentContentLen { + // TODO: send a RST_STREAM + return 0, errors.New("http2: handler wrote more than declared Content-Length") + } + + if dataB != nil { + return rws.bw.Write(dataB) + } else { + return rws.bw.WriteString(dataS) + } +} + +func (w *responseWriter) handlerDone() { + rws := w.rws + rws.handlerDone = true + w.Flush() + w.rws = nil + responseWriterStatePool.Put(rws) +} + +// Push errors. +var ( + ErrRecursivePush = errors.New("http2: recursive push not allowed") + ErrPushLimitReached = errors.New("http2: push would exceed peer's SETTINGS_MAX_CONCURRENT_STREAMS") +) + +// pushOptions is the internal version of http.PushOptions, which we +// cannot include here because it's only defined in Go 1.8 and later. +type pushOptions struct { + Method string + Header http.Header +} + +func (w *responseWriter) push(target string, opts pushOptions) error { + st := w.rws.stream + sc := st.sc + sc.serveG.checkNotOn() + + // No recursive pushes: "PUSH_PROMISE frames MUST only be sent on a peer-initiated stream." + // http://tools.ietf.org/html/rfc7540#section-6.6 + if st.isPushed() { + return ErrRecursivePush + } + + // Default options. + if opts.Method == "" { + opts.Method = "GET" + } + if opts.Header == nil { + opts.Header = http.Header{} + } + wantScheme := "http" + if w.rws.req.TLS != nil { + wantScheme = "https" + } + + // Validate the request. + u, err := url.Parse(target) + if err != nil { + return err + } + if u.Scheme == "" { + if !strings.HasPrefix(target, "/") { + return fmt.Errorf("target must be an absolute URL or an absolute path: %q", target) + } + u.Scheme = wantScheme + u.Host = w.rws.req.Host + } else { + if u.Scheme != wantScheme { + return fmt.Errorf("cannot push URL with scheme %q from request with scheme %q", u.Scheme, wantScheme) + } + if u.Host == "" { + return errors.New("URL must have a host") + } + } + for k := range opts.Header { + if strings.HasPrefix(k, ":") { + return fmt.Errorf("promised request headers cannot include pseudo header %q", k) + } + // These headers are meaningful only if the request has a body, + // but PUSH_PROMISE requests cannot have a body. + // http://tools.ietf.org/html/rfc7540#section-8.2 + // Also disallow Host, since the promised URL must be absolute. + switch strings.ToLower(k) { + case "content-length", "content-encoding", "trailer", "te", "expect", "host": + return fmt.Errorf("promised request headers cannot include %q", k) + } + } + if err := checkValidHTTP2RequestHeaders(opts.Header); err != nil { + return err + } + + // The RFC effectively limits promised requests to GET and HEAD: + // "Promised requests MUST be cacheable [GET, HEAD, or POST], and MUST be safe [GET or HEAD]" + // http://tools.ietf.org/html/rfc7540#section-8.2 + if opts.Method != "GET" && opts.Method != "HEAD" { + return fmt.Errorf("method %q must be GET or HEAD", opts.Method) + } + + msg := startPushRequest{ + parent: st, + method: opts.Method, + url: u, + header: cloneHeader(opts.Header), + done: errChanPool.Get().(chan error), + } + + select { + case <-sc.doneServing: + return errClientDisconnected + case <-st.cw: + return errStreamClosed + case sc.wantStartPushCh <- msg: + } + + select { + case <-sc.doneServing: + return errClientDisconnected + case <-st.cw: + return errStreamClosed + case err := <-msg.done: + errChanPool.Put(msg.done) + return err + } +} + +type startPushRequest struct { + parent *stream + method string + url *url.URL + header http.Header + done chan error +} + +func (sc *serverConn) startPush(msg startPushRequest) { + sc.serveG.check() + + // http://tools.ietf.org/html/rfc7540#section-6.6. + // PUSH_PROMISE frames MUST only be sent on a peer-initiated stream that + // is in either the "open" or "half-closed (remote)" state. + if msg.parent.state != stateOpen && msg.parent.state != stateHalfClosedRemote { + // responseWriter.Push checks that the stream is peer-initiaed. + msg.done <- errStreamClosed + return + } + + // http://tools.ietf.org/html/rfc7540#section-6.6. + if !sc.pushEnabled { + msg.done <- http.ErrNotSupported + return + } + + // PUSH_PROMISE frames must be sent in increasing order by stream ID, so + // we allocate an ID for the promised stream lazily, when the PUSH_PROMISE + // is written. Once the ID is allocated, we start the request handler. + allocatePromisedID := func() (uint32, error) { + sc.serveG.check() + + // Check this again, just in case. Technically, we might have received + // an updated SETTINGS by the time we got around to writing this frame. + if !sc.pushEnabled { + return 0, http.ErrNotSupported + } + // http://tools.ietf.org/html/rfc7540#section-6.5.2. + if sc.curPushedStreams+1 > sc.clientMaxStreams { + return 0, ErrPushLimitReached + } + + // http://tools.ietf.org/html/rfc7540#section-5.1.1. + // Streams initiated by the server MUST use even-numbered identifiers. + // A server that is unable to establish a new stream identifier can send a GOAWAY + // frame so that the client is forced to open a new connection for new streams. + if sc.maxPushPromiseID+2 >= 1<<31 { + sc.startGracefulShutdown() + return 0, ErrPushLimitReached + } + sc.maxPushPromiseID += 2 + promisedID := sc.maxPushPromiseID + + // http://tools.ietf.org/html/rfc7540#section-8.2. + // Strictly speaking, the new stream should start in "reserved (local)", then + // transition to "half closed (remote)" after sending the initial HEADERS, but + // we start in "half closed (remote)" for simplicity. + // See further comments at the definition of stateHalfClosedRemote. + promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote) + rw, req, err := sc.newWriterAndRequestNoBody(promised, requestParam{ + method: msg.method, + scheme: msg.url.Scheme, + authority: msg.url.Host, + path: msg.url.RequestURI(), + header: cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE + }) + if err != nil { + // Should not happen, since we've already validated msg.url. + panic(fmt.Sprintf("newWriterAndRequestNoBody(%+v): %v", msg.url, err)) + } + + go sc.runHandler(rw, req, sc.handler.ServeHTTP) + return promisedID, nil + } + + sc.writeFrame(FrameWriteRequest{ + write: &writePushPromise{ + streamID: msg.parent.id, + method: msg.method, + url: msg.url, + h: msg.header, + allocatePromisedID: allocatePromisedID, + }, + stream: msg.parent, + done: msg.done, + }) +} + +// foreachHeaderElement splits v according to the "#rule" construction +// in RFC 2616 section 2.1 and calls fn for each non-empty element. +func foreachHeaderElement(v string, fn func(string)) { + v = textproto.TrimString(v) + if v == "" { + return + } + if !strings.Contains(v, ",") { + fn(v) + return + } + for _, f := range strings.Split(v, ",") { + if f = textproto.TrimString(f); f != "" { + fn(f) + } + } +} + +// From http://httpwg.org/specs/rfc7540.html#rfc.section.8.1.2.2 +var connHeaders = []string{ + "Connection", + "Keep-Alive", + "Proxy-Connection", + "Transfer-Encoding", + "Upgrade", +} + +// checkValidHTTP2RequestHeaders checks whether h is a valid HTTP/2 request, +// per RFC 7540 Section 8.1.2.2. +// The returned error is reported to users. +func checkValidHTTP2RequestHeaders(h http.Header) error { + for _, k := range connHeaders { + if _, ok := h[k]; ok { + return fmt.Errorf("request header %q is not valid in HTTP/2", k) + } + } + te := h["Te"] + if len(te) > 0 && (len(te) > 1 || (te[0] != "trailers" && te[0] != "")) { + return errors.New(`request header "TE" may only be "trailers" in HTTP/2`) + } + return nil +} + +func new400Handler(err error) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + http.Error(w, err.Error(), http.StatusBadRequest) + } +} + +// ValidTrailerHeader reports whether name is a valid header field name to appear +// in trailers. +// See: http://tools.ietf.org/html/rfc7230#section-4.1.2 +func ValidTrailerHeader(name string) bool { + name = http.CanonicalHeaderKey(name) + if strings.HasPrefix(name, "If-") || badTrailer[name] { + return false + } + return true +} + +var badTrailer = map[string]bool{ + "Authorization": true, + "Cache-Control": true, + "Connection": true, + "Content-Encoding": true, + "Content-Length": true, + "Content-Range": true, + "Content-Type": true, + "Expect": true, + "Host": true, + "Keep-Alive": true, + "Max-Forwards": true, + "Pragma": true, + "Proxy-Authenticate": true, + "Proxy-Authorization": true, + "Proxy-Connection": true, + "Range": true, + "Realm": true, + "Te": true, + "Trailer": true, + "Transfer-Encoding": true, + "Www-Authenticate": true, +} + +// h1ServerShutdownChan returns a channel that will be closed when the +// provided *http.Server wants to shut down. +// +// This is a somewhat hacky way to get at http1 innards. It works +// when the http2 code is bundled into the net/http package in the +// standard library. The alternatives ended up making the cmd/go tool +// depend on http Servers. This is the lightest option for now. +// This is tested via the TestServeShutdown* tests in net/http. +func h1ServerShutdownChan(hs *http.Server) <-chan struct{} { + if fn := testh1ServerShutdownChan; fn != nil { + return fn(hs) + } + var x interface{} = hs + type I interface { + getDoneChan() <-chan struct{} + } + if hs, ok := x.(I); ok { + return hs.getDoneChan() + } + return nil +} + +// optional test hook for h1ServerShutdownChan. +var testh1ServerShutdownChan func(hs *http.Server) <-chan struct{} + +// h1ServerKeepAlivesDisabled reports whether hs has its keep-alives +// disabled. See comments on h1ServerShutdownChan above for why +// the code is written this way. +func h1ServerKeepAlivesDisabled(hs *http.Server) bool { + var x interface{} = hs + type I interface { + doKeepAlives() bool + } + if hs, ok := x.(I); ok { + return !hs.doKeepAlives() + } + return false +} diff --git a/vendor/golang.org/x/net/http2/server_push_test.go b/vendor/golang.org/x/net/http2/server_push_test.go new file mode 100644 index 0000000..f70edd3 --- /dev/null +++ b/vendor/golang.org/x/net/http2/server_push_test.go @@ -0,0 +1,521 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.8 + +package http2 + +import ( + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "reflect" + "strconv" + "sync" + "testing" + "time" +) + +func TestServer_Push_Success(t *testing.T) { + const ( + mainBody = "index page" + pushedBody = "pushed page" + userAgent = "testagent" + cookie = "testcookie" + ) + + var stURL string + checkPromisedReq := func(r *http.Request, wantMethod string, wantH http.Header) error { + if got, want := r.Method, wantMethod; got != want { + return fmt.Errorf("promised Req.Method=%q, want %q", got, want) + } + if got, want := r.Header, wantH; !reflect.DeepEqual(got, want) { + return fmt.Errorf("promised Req.Header=%q, want %q", got, want) + } + if got, want := "https://"+r.Host, stURL; got != want { + return fmt.Errorf("promised Req.Host=%q, want %q", got, want) + } + if r.Body == nil { + return fmt.Errorf("nil Body") + } + if buf, err := ioutil.ReadAll(r.Body); err != nil || len(buf) != 0 { + return fmt.Errorf("ReadAll(Body)=%q,%v, want '',nil", buf, err) + } + return nil + } + + errc := make(chan error, 3) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + switch r.URL.RequestURI() { + case "/": + // Push "/pushed?get" as a GET request, using an absolute URL. + opt := &http.PushOptions{ + Header: http.Header{ + "User-Agent": {userAgent}, + }, + } + if err := w.(http.Pusher).Push(stURL+"/pushed?get", opt); err != nil { + errc <- fmt.Errorf("error pushing /pushed?get: %v", err) + return + } + // Push "/pushed?head" as a HEAD request, using a path. + opt = &http.PushOptions{ + Method: "HEAD", + Header: http.Header{ + "User-Agent": {userAgent}, + "Cookie": {cookie}, + }, + } + if err := w.(http.Pusher).Push("/pushed?head", opt); err != nil { + errc <- fmt.Errorf("error pushing /pushed?head: %v", err) + return + } + w.Header().Set("Content-Type", "text/html") + w.Header().Set("Content-Length", strconv.Itoa(len(mainBody))) + w.WriteHeader(200) + io.WriteString(w, mainBody) + errc <- nil + + case "/pushed?get": + wantH := http.Header{} + wantH.Set("User-Agent", userAgent) + if err := checkPromisedReq(r, "GET", wantH); err != nil { + errc <- fmt.Errorf("/pushed?get: %v", err) + return + } + w.Header().Set("Content-Type", "text/html") + w.Header().Set("Content-Length", strconv.Itoa(len(pushedBody))) + w.WriteHeader(200) + io.WriteString(w, pushedBody) + errc <- nil + + case "/pushed?head": + wantH := http.Header{} + wantH.Set("User-Agent", userAgent) + wantH.Set("Cookie", cookie) + if err := checkPromisedReq(r, "HEAD", wantH); err != nil { + errc <- fmt.Errorf("/pushed?head: %v", err) + return + } + w.WriteHeader(204) + errc <- nil + + default: + errc <- fmt.Errorf("unknown RequestURL %q", r.URL.RequestURI()) + } + }) + stURL = st.ts.URL + + // Send one request, which should push two responses. + st.greet() + getSlash(st) + for k := 0; k < 3; k++ { + select { + case <-time.After(2 * time.Second): + t.Errorf("timeout waiting for handler %d to finish", k) + case err := <-errc: + if err != nil { + t.Fatal(err) + } + } + } + + checkPushPromise := func(f Frame, promiseID uint32, wantH [][2]string) error { + pp, ok := f.(*PushPromiseFrame) + if !ok { + return fmt.Errorf("got a %T; want *PushPromiseFrame", f) + } + if !pp.HeadersEnded() { + return fmt.Errorf("want END_HEADERS flag in PushPromiseFrame") + } + if got, want := pp.PromiseID, promiseID; got != want { + return fmt.Errorf("got PromiseID %v; want %v", got, want) + } + gotH := st.decodeHeader(pp.HeaderBlockFragment()) + if !reflect.DeepEqual(gotH, wantH) { + return fmt.Errorf("got promised headers %v; want %v", gotH, wantH) + } + return nil + } + checkHeaders := func(f Frame, wantH [][2]string) error { + hf, ok := f.(*HeadersFrame) + if !ok { + return fmt.Errorf("got a %T; want *HeadersFrame", f) + } + gotH := st.decodeHeader(hf.HeaderBlockFragment()) + if !reflect.DeepEqual(gotH, wantH) { + return fmt.Errorf("got response headers %v; want %v", gotH, wantH) + } + return nil + } + checkData := func(f Frame, wantData string) error { + df, ok := f.(*DataFrame) + if !ok { + return fmt.Errorf("got a %T; want *DataFrame", f) + } + if gotData := string(df.Data()); gotData != wantData { + return fmt.Errorf("got response data %q; want %q", gotData, wantData) + } + return nil + } + + // Stream 1 has 2 PUSH_PROMISE + HEADERS + DATA + // Stream 2 has HEADERS + DATA + // Stream 4 has HEADERS + expected := map[uint32][]func(Frame) error{ + 1: { + func(f Frame) error { + return checkPushPromise(f, 2, [][2]string{ + {":method", "GET"}, + {":scheme", "https"}, + {":authority", st.ts.Listener.Addr().String()}, + {":path", "/pushed?get"}, + {"user-agent", userAgent}, + }) + }, + func(f Frame) error { + return checkPushPromise(f, 4, [][2]string{ + {":method", "HEAD"}, + {":scheme", "https"}, + {":authority", st.ts.Listener.Addr().String()}, + {":path", "/pushed?head"}, + {"cookie", cookie}, + {"user-agent", userAgent}, + }) + }, + func(f Frame) error { + return checkHeaders(f, [][2]string{ + {":status", "200"}, + {"content-type", "text/html"}, + {"content-length", strconv.Itoa(len(mainBody))}, + }) + }, + func(f Frame) error { + return checkData(f, mainBody) + }, + }, + 2: { + func(f Frame) error { + return checkHeaders(f, [][2]string{ + {":status", "200"}, + {"content-type", "text/html"}, + {"content-length", strconv.Itoa(len(pushedBody))}, + }) + }, + func(f Frame) error { + return checkData(f, pushedBody) + }, + }, + 4: { + func(f Frame) error { + return checkHeaders(f, [][2]string{ + {":status", "204"}, + }) + }, + }, + } + + consumed := map[uint32]int{} + for k := 0; len(expected) > 0; k++ { + f, err := st.readFrame() + if err != nil { + for id, left := range expected { + t.Errorf("stream %d: missing %d frames", id, len(left)) + } + t.Fatalf("readFrame %d: %v", k, err) + } + id := f.Header().StreamID + label := fmt.Sprintf("stream %d, frame %d", id, consumed[id]) + if len(expected[id]) == 0 { + t.Fatalf("%s: unexpected frame %#+v", label, f) + } + check := expected[id][0] + expected[id] = expected[id][1:] + if len(expected[id]) == 0 { + delete(expected, id) + } + if err := check(f); err != nil { + t.Fatalf("%s: %v", label, err) + } + consumed[id]++ + } +} + +func TestServer_Push_SuccessNoRace(t *testing.T) { + // Regression test for issue #18326. Ensure the request handler can mutate + // pushed request headers without racing with the PUSH_PROMISE write. + errc := make(chan error, 2) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + switch r.URL.RequestURI() { + case "/": + opt := &http.PushOptions{ + Header: http.Header{"User-Agent": {"testagent"}}, + } + if err := w.(http.Pusher).Push("/pushed", opt); err != nil { + errc <- fmt.Errorf("error pushing: %v", err) + return + } + w.WriteHeader(200) + errc <- nil + + case "/pushed": + // Update request header, ensure there is no race. + r.Header.Set("User-Agent", "newagent") + r.Header.Set("Cookie", "cookie") + w.WriteHeader(200) + errc <- nil + + default: + errc <- fmt.Errorf("unknown RequestURL %q", r.URL.RequestURI()) + } + }) + + // Send one request, which should push one response. + st.greet() + getSlash(st) + for k := 0; k < 2; k++ { + select { + case <-time.After(2 * time.Second): + t.Errorf("timeout waiting for handler %d to finish", k) + case err := <-errc: + if err != nil { + t.Fatal(err) + } + } + } +} + +func TestServer_Push_RejectRecursivePush(t *testing.T) { + // Expect two requests, but might get three if there's a bug and the second push succeeds. + errc := make(chan error, 3) + handler := func(w http.ResponseWriter, r *http.Request) error { + baseURL := "https://" + r.Host + switch r.URL.Path { + case "/": + if err := w.(http.Pusher).Push(baseURL+"/push1", nil); err != nil { + return fmt.Errorf("first Push()=%v, want nil", err) + } + return nil + + case "/push1": + if got, want := w.(http.Pusher).Push(baseURL+"/push2", nil), ErrRecursivePush; got != want { + return fmt.Errorf("Push()=%v, want %v", got, want) + } + return nil + + default: + return fmt.Errorf("unexpected path: %q", r.URL.Path) + } + } + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + errc <- handler(w, r) + }) + defer st.Close() + st.greet() + getSlash(st) + if err := <-errc; err != nil { + t.Errorf("First request failed: %v", err) + } + if err := <-errc; err != nil { + t.Errorf("Second request failed: %v", err) + } +} + +func testServer_Push_RejectSingleRequest(t *testing.T, doPush func(http.Pusher, *http.Request) error, settings ...Setting) { + // Expect one request, but might get two if there's a bug and the push succeeds. + errc := make(chan error, 2) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + errc <- doPush(w.(http.Pusher), r) + }) + defer st.Close() + st.greet() + if err := st.fr.WriteSettings(settings...); err != nil { + st.t.Fatalf("WriteSettings: %v", err) + } + st.wantSettingsAck() + getSlash(st) + if err := <-errc; err != nil { + t.Error(err) + } + // Should not get a PUSH_PROMISE frame. + hf := st.wantHeaders() + if !hf.StreamEnded() { + t.Error("stream should end after headers") + } +} + +func TestServer_Push_RejectIfDisabled(t *testing.T) { + testServer_Push_RejectSingleRequest(t, + func(p http.Pusher, r *http.Request) error { + if got, want := p.Push("https://"+r.Host+"/pushed", nil), http.ErrNotSupported; got != want { + return fmt.Errorf("Push()=%v, want %v", got, want) + } + return nil + }, + Setting{SettingEnablePush, 0}) +} + +func TestServer_Push_RejectWhenNoConcurrentStreams(t *testing.T) { + testServer_Push_RejectSingleRequest(t, + func(p http.Pusher, r *http.Request) error { + if got, want := p.Push("https://"+r.Host+"/pushed", nil), ErrPushLimitReached; got != want { + return fmt.Errorf("Push()=%v, want %v", got, want) + } + return nil + }, + Setting{SettingMaxConcurrentStreams, 0}) +} + +func TestServer_Push_RejectWrongScheme(t *testing.T) { + testServer_Push_RejectSingleRequest(t, + func(p http.Pusher, r *http.Request) error { + if err := p.Push("http://"+r.Host+"/pushed", nil); err == nil { + return errors.New("Push() should have failed (push target URL is http)") + } + return nil + }) +} + +func TestServer_Push_RejectMissingHost(t *testing.T) { + testServer_Push_RejectSingleRequest(t, + func(p http.Pusher, r *http.Request) error { + if err := p.Push("https:pushed", nil); err == nil { + return errors.New("Push() should have failed (push target URL missing host)") + } + return nil + }) +} + +func TestServer_Push_RejectRelativePath(t *testing.T) { + testServer_Push_RejectSingleRequest(t, + func(p http.Pusher, r *http.Request) error { + if err := p.Push("../test", nil); err == nil { + return errors.New("Push() should have failed (push target is a relative path)") + } + return nil + }) +} + +func TestServer_Push_RejectForbiddenMethod(t *testing.T) { + testServer_Push_RejectSingleRequest(t, + func(p http.Pusher, r *http.Request) error { + if err := p.Push("https://"+r.Host+"/pushed", &http.PushOptions{Method: "POST"}); err == nil { + return errors.New("Push() should have failed (cannot promise a POST)") + } + return nil + }) +} + +func TestServer_Push_RejectForbiddenHeader(t *testing.T) { + testServer_Push_RejectSingleRequest(t, + func(p http.Pusher, r *http.Request) error { + header := http.Header{ + "Content-Length": {"10"}, + "Content-Encoding": {"gzip"}, + "Trailer": {"Foo"}, + "Te": {"trailers"}, + "Host": {"test.com"}, + ":authority": {"test.com"}, + } + if err := p.Push("https://"+r.Host+"/pushed", &http.PushOptions{Header: header}); err == nil { + return errors.New("Push() should have failed (forbidden headers)") + } + return nil + }) +} + +func TestServer_Push_StateTransitions(t *testing.T) { + const body = "foo" + + gotPromise := make(chan bool) + finishedPush := make(chan bool) + + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + switch r.URL.RequestURI() { + case "/": + if err := w.(http.Pusher).Push("/pushed", nil); err != nil { + t.Errorf("Push error: %v", err) + } + // Don't finish this request until the push finishes so we don't + // nondeterministically interleave output frames with the push. + <-finishedPush + case "/pushed": + <-gotPromise + } + w.Header().Set("Content-Type", "text/html") + w.Header().Set("Content-Length", strconv.Itoa(len(body))) + w.WriteHeader(200) + io.WriteString(w, body) + }) + defer st.Close() + + st.greet() + if st.stream(2) != nil { + t.Fatal("stream 2 should be empty") + } + if got, want := st.streamState(2), stateIdle; got != want { + t.Fatalf("streamState(2)=%v, want %v", got, want) + } + getSlash(st) + // After the PUSH_PROMISE is sent, the stream should be stateHalfClosedRemote. + st.wantPushPromise() + if got, want := st.streamState(2), stateHalfClosedRemote; got != want { + t.Fatalf("streamState(2)=%v, want %v", got, want) + } + // We stall the HTTP handler for "/pushed" until the above check. If we don't + // stall the handler, then the handler might write HEADERS and DATA and finish + // the stream before we check st.streamState(2) -- should that happen, we'll + // see stateClosed and fail the above check. + close(gotPromise) + st.wantHeaders() + if df := st.wantData(); !df.StreamEnded() { + t.Fatal("expected END_STREAM flag on DATA") + } + if got, want := st.streamState(2), stateClosed; got != want { + t.Fatalf("streamState(2)=%v, want %v", got, want) + } + close(finishedPush) +} + +func TestServer_Push_RejectAfterGoAway(t *testing.T) { + var readyOnce sync.Once + ready := make(chan struct{}) + errc := make(chan error, 2) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + select { + case <-ready: + case <-time.After(5 * time.Second): + errc <- fmt.Errorf("timeout waiting for GOAWAY to be processed") + } + if got, want := w.(http.Pusher).Push("https://"+r.Host+"/pushed", nil), http.ErrNotSupported; got != want { + errc <- fmt.Errorf("Push()=%v, want %v", got, want) + } + errc <- nil + }) + defer st.Close() + st.greet() + getSlash(st) + + // Send GOAWAY and wait for it to be processed. + st.fr.WriteGoAway(1, ErrCodeNo, nil) + go func() { + for { + select { + case <-ready: + return + default: + } + st.sc.testHookCh <- func(loopNum int) { + if !st.sc.pushEnabled { + readyOnce.Do(func() { close(ready) }) + } + } + } + }() + if err := <-errc; err != nil { + t.Error(err) + } +} diff --git a/vendor/golang.org/x/net/http2/server_test.go b/vendor/golang.org/x/net/http2/server_test.go new file mode 100644 index 0000000..407fafc --- /dev/null +++ b/vendor/golang.org/x/net/http2/server_test.go @@ -0,0 +1,3731 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "bytes" + "crypto/tls" + "errors" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "net" + "net/http" + "net/http/httptest" + "os" + "os/exec" + "reflect" + "runtime" + "strconv" + "strings" + "sync" + "sync/atomic" + "testing" + "time" + + "golang.org/x/net/http2/hpack" +) + +var stderrVerbose = flag.Bool("stderr_verbose", false, "Mirror verbosity to stderr, unbuffered") + +func stderrv() io.Writer { + if *stderrVerbose { + return os.Stderr + } + + return ioutil.Discard +} + +type serverTester struct { + cc net.Conn // client conn + t testing.TB + ts *httptest.Server + fr *Framer + serverLogBuf bytes.Buffer // logger for httptest.Server + logFilter []string // substrings to filter out + scMu sync.Mutex // guards sc + sc *serverConn + hpackDec *hpack.Decoder + decodedHeaders [][2]string + + // If http2debug!=2, then we capture Frame debug logs that will be written + // to t.Log after a test fails. The read and write logs use separate locks + // and buffers so we don't accidentally introduce synchronization between + // the read and write goroutines, which may hide data races. + frameReadLogMu sync.Mutex + frameReadLogBuf bytes.Buffer + frameWriteLogMu sync.Mutex + frameWriteLogBuf bytes.Buffer + + // writing headers: + headerBuf bytes.Buffer + hpackEnc *hpack.Encoder +} + +func init() { + testHookOnPanicMu = new(sync.Mutex) +} + +func resetHooks() { + testHookOnPanicMu.Lock() + testHookOnPanic = nil + testHookOnPanicMu.Unlock() +} + +type serverTesterOpt string + +var optOnlyServer = serverTesterOpt("only_server") +var optQuiet = serverTesterOpt("quiet_logging") +var optFramerReuseFrames = serverTesterOpt("frame_reuse_frames") + +func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}) *serverTester { + resetHooks() + + ts := httptest.NewUnstartedServer(handler) + + tlsConfig := &tls.Config{ + InsecureSkipVerify: true, + NextProtos: []string{NextProtoTLS}, + } + + var onlyServer, quiet, framerReuseFrames bool + h2server := new(Server) + for _, opt := range opts { + switch v := opt.(type) { + case func(*tls.Config): + v(tlsConfig) + case func(*httptest.Server): + v(ts) + case func(*Server): + v(h2server) + case serverTesterOpt: + switch v { + case optOnlyServer: + onlyServer = true + case optQuiet: + quiet = true + case optFramerReuseFrames: + framerReuseFrames = true + } + case func(net.Conn, http.ConnState): + ts.Config.ConnState = v + default: + t.Fatalf("unknown newServerTester option type %T", v) + } + } + + ConfigureServer(ts.Config, h2server) + + st := &serverTester{ + t: t, + ts: ts, + } + st.hpackEnc = hpack.NewEncoder(&st.headerBuf) + st.hpackDec = hpack.NewDecoder(initialHeaderTableSize, st.onHeaderField) + + ts.TLS = ts.Config.TLSConfig // the httptest.Server has its own copy of this TLS config + if quiet { + ts.Config.ErrorLog = log.New(ioutil.Discard, "", 0) + } else { + ts.Config.ErrorLog = log.New(io.MultiWriter(stderrv(), twriter{t: t, st: st}, &st.serverLogBuf), "", log.LstdFlags) + } + ts.StartTLS() + + if VerboseLogs { + t.Logf("Running test server at: %s", ts.URL) + } + testHookGetServerConn = func(v *serverConn) { + st.scMu.Lock() + defer st.scMu.Unlock() + st.sc = v + st.sc.testHookCh = make(chan func(int)) + } + log.SetOutput(io.MultiWriter(stderrv(), twriter{t: t, st: st})) + if !onlyServer { + cc, err := tls.Dial("tcp", ts.Listener.Addr().String(), tlsConfig) + if err != nil { + t.Fatal(err) + } + st.cc = cc + st.fr = NewFramer(cc, cc) + if framerReuseFrames { + st.fr.SetReuseFrames() + } + if !logFrameReads && !logFrameWrites { + st.fr.debugReadLoggerf = func(m string, v ...interface{}) { + m = time.Now().Format("2006-01-02 15:04:05.999999999 ") + strings.TrimPrefix(m, "http2: ") + "\n" + st.frameReadLogMu.Lock() + fmt.Fprintf(&st.frameReadLogBuf, m, v...) + st.frameReadLogMu.Unlock() + } + st.fr.debugWriteLoggerf = func(m string, v ...interface{}) { + m = time.Now().Format("2006-01-02 15:04:05.999999999 ") + strings.TrimPrefix(m, "http2: ") + "\n" + st.frameWriteLogMu.Lock() + fmt.Fprintf(&st.frameWriteLogBuf, m, v...) + st.frameWriteLogMu.Unlock() + } + st.fr.logReads = true + st.fr.logWrites = true + } + } + return st +} + +func (st *serverTester) closeConn() { + st.scMu.Lock() + defer st.scMu.Unlock() + st.sc.conn.Close() +} + +func (st *serverTester) addLogFilter(phrase string) { + st.logFilter = append(st.logFilter, phrase) +} + +func (st *serverTester) stream(id uint32) *stream { + ch := make(chan *stream, 1) + st.sc.testHookCh <- func(int) { + ch <- st.sc.streams[id] + } + return <-ch +} + +func (st *serverTester) streamState(id uint32) streamState { + ch := make(chan streamState, 1) + st.sc.testHookCh <- func(int) { + state, _ := st.sc.state(id) + ch <- state + } + return <-ch +} + +// loopNum reports how many times this conn's select loop has gone around. +func (st *serverTester) loopNum() int { + lastc := make(chan int, 1) + st.sc.testHookCh <- func(loopNum int) { + lastc <- loopNum + } + return <-lastc +} + +// awaitIdle heuristically awaits for the server conn's select loop to be idle. +// The heuristic is that the server connection's serve loop must schedule +// 50 times in a row without any channel sends or receives occurring. +func (st *serverTester) awaitIdle() { + remain := 50 + last := st.loopNum() + for remain > 0 { + n := st.loopNum() + if n == last+1 { + remain-- + } else { + remain = 50 + } + last = n + } +} + +func (st *serverTester) Close() { + if st.t.Failed() { + st.frameReadLogMu.Lock() + if st.frameReadLogBuf.Len() > 0 { + st.t.Logf("Framer read log:\n%s", st.frameReadLogBuf.String()) + } + st.frameReadLogMu.Unlock() + + st.frameWriteLogMu.Lock() + if st.frameWriteLogBuf.Len() > 0 { + st.t.Logf("Framer write log:\n%s", st.frameWriteLogBuf.String()) + } + st.frameWriteLogMu.Unlock() + + // If we failed already (and are likely in a Fatal, + // unwindowing), force close the connection, so the + // httptest.Server doesn't wait forever for the conn + // to close. + if st.cc != nil { + st.cc.Close() + } + } + st.ts.Close() + if st.cc != nil { + st.cc.Close() + } + log.SetOutput(os.Stderr) +} + +// greet initiates the client's HTTP/2 connection into a state where +// frames may be sent. +func (st *serverTester) greet() { + st.greetAndCheckSettings(func(Setting) error { return nil }) +} + +func (st *serverTester) greetAndCheckSettings(checkSetting func(s Setting) error) { + st.writePreface() + st.writeInitialSettings() + st.wantSettings().ForeachSetting(checkSetting) + st.writeSettingsAck() + + // The initial WINDOW_UPDATE and SETTINGS ACK can come in any order. + var gotSettingsAck bool + var gotWindowUpdate bool + + for i := 0; i < 2; i++ { + f, err := st.readFrame() + if err != nil { + st.t.Fatal(err) + } + switch f := f.(type) { + case *SettingsFrame: + if !f.Header().Flags.Has(FlagSettingsAck) { + st.t.Fatal("Settings Frame didn't have ACK set") + } + gotSettingsAck = true + + case *WindowUpdateFrame: + if f.FrameHeader.StreamID != 0 { + st.t.Fatalf("WindowUpdate StreamID = %d; want 0", f.FrameHeader.StreamID, 0) + } + incr := uint32((&Server{}).initialConnRecvWindowSize() - initialWindowSize) + if f.Increment != incr { + st.t.Fatalf("WindowUpdate increment = %d; want %d", f.Increment, incr) + } + gotWindowUpdate = true + + default: + st.t.Fatalf("Wanting a settings ACK or window update, received a %T", f) + } + } + + if !gotSettingsAck { + st.t.Fatalf("Didn't get a settings ACK") + } + if !gotWindowUpdate { + st.t.Fatalf("Didn't get a window update") + } +} + +func (st *serverTester) writePreface() { + n, err := st.cc.Write(clientPreface) + if err != nil { + st.t.Fatalf("Error writing client preface: %v", err) + } + if n != len(clientPreface) { + st.t.Fatalf("Writing client preface, wrote %d bytes; want %d", n, len(clientPreface)) + } +} + +func (st *serverTester) writeInitialSettings() { + if err := st.fr.WriteSettings(); err != nil { + st.t.Fatalf("Error writing initial SETTINGS frame from client to server: %v", err) + } +} + +func (st *serverTester) writeSettingsAck() { + if err := st.fr.WriteSettingsAck(); err != nil { + st.t.Fatalf("Error writing ACK of server's SETTINGS: %v", err) + } +} + +func (st *serverTester) writeHeaders(p HeadersFrameParam) { + if err := st.fr.WriteHeaders(p); err != nil { + st.t.Fatalf("Error writing HEADERS: %v", err) + } +} + +func (st *serverTester) writePriority(id uint32, p PriorityParam) { + if err := st.fr.WritePriority(id, p); err != nil { + st.t.Fatalf("Error writing PRIORITY: %v", err) + } +} + +func (st *serverTester) encodeHeaderField(k, v string) { + err := st.hpackEnc.WriteField(hpack.HeaderField{Name: k, Value: v}) + if err != nil { + st.t.Fatalf("HPACK encoding error for %q/%q: %v", k, v, err) + } +} + +// encodeHeaderRaw is the magic-free version of encodeHeader. +// It takes 0 or more (k, v) pairs and encodes them. +func (st *serverTester) encodeHeaderRaw(headers ...string) []byte { + if len(headers)%2 == 1 { + panic("odd number of kv args") + } + st.headerBuf.Reset() + for len(headers) > 0 { + k, v := headers[0], headers[1] + st.encodeHeaderField(k, v) + headers = headers[2:] + } + return st.headerBuf.Bytes() +} + +// encodeHeader encodes headers and returns their HPACK bytes. headers +// must contain an even number of key/value pairs. There may be +// multiple pairs for keys (e.g. "cookie"). The :method, :path, and +// :scheme headers default to GET, / and https. The :authority header +// defaults to st.ts.Listener.Addr(). +func (st *serverTester) encodeHeader(headers ...string) []byte { + if len(headers)%2 == 1 { + panic("odd number of kv args") + } + + st.headerBuf.Reset() + defaultAuthority := st.ts.Listener.Addr().String() + + if len(headers) == 0 { + // Fast path, mostly for benchmarks, so test code doesn't pollute + // profiles when we're looking to improve server allocations. + st.encodeHeaderField(":method", "GET") + st.encodeHeaderField(":scheme", "https") + st.encodeHeaderField(":authority", defaultAuthority) + st.encodeHeaderField(":path", "/") + return st.headerBuf.Bytes() + } + + if len(headers) == 2 && headers[0] == ":method" { + // Another fast path for benchmarks. + st.encodeHeaderField(":method", headers[1]) + st.encodeHeaderField(":scheme", "https") + st.encodeHeaderField(":authority", defaultAuthority) + st.encodeHeaderField(":path", "/") + return st.headerBuf.Bytes() + } + + pseudoCount := map[string]int{} + keys := []string{":method", ":scheme", ":authority", ":path"} + vals := map[string][]string{ + ":method": {"GET"}, + ":scheme": {"https"}, + ":authority": {defaultAuthority}, + ":path": {"/"}, + } + for len(headers) > 0 { + k, v := headers[0], headers[1] + headers = headers[2:] + if _, ok := vals[k]; !ok { + keys = append(keys, k) + } + if strings.HasPrefix(k, ":") { + pseudoCount[k]++ + if pseudoCount[k] == 1 { + vals[k] = []string{v} + } else { + // Allows testing of invalid headers w/ dup pseudo fields. + vals[k] = append(vals[k], v) + } + } else { + vals[k] = append(vals[k], v) + } + } + for _, k := range keys { + for _, v := range vals[k] { + st.encodeHeaderField(k, v) + } + } + return st.headerBuf.Bytes() +} + +// bodylessReq1 writes a HEADERS frames with StreamID 1 and EndStream and EndHeaders set. +func (st *serverTester) bodylessReq1(headers ...string) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(headers...), + EndStream: true, + EndHeaders: true, + }) +} + +func (st *serverTester) writeData(streamID uint32, endStream bool, data []byte) { + if err := st.fr.WriteData(streamID, endStream, data); err != nil { + st.t.Fatalf("Error writing DATA: %v", err) + } +} + +func (st *serverTester) writeDataPadded(streamID uint32, endStream bool, data, pad []byte) { + if err := st.fr.WriteDataPadded(streamID, endStream, data, pad); err != nil { + st.t.Fatalf("Error writing DATA: %v", err) + } +} + +func readFrameTimeout(fr *Framer, wait time.Duration) (Frame, error) { + ch := make(chan interface{}, 1) + go func() { + fr, err := fr.ReadFrame() + if err != nil { + ch <- err + } else { + ch <- fr + } + }() + t := time.NewTimer(wait) + select { + case v := <-ch: + t.Stop() + if fr, ok := v.(Frame); ok { + return fr, nil + } + return nil, v.(error) + case <-t.C: + return nil, errors.New("timeout waiting for frame") + } +} + +func (st *serverTester) readFrame() (Frame, error) { + return readFrameTimeout(st.fr, 2*time.Second) +} + +func (st *serverTester) wantHeaders() *HeadersFrame { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting a HEADERS frame: %v", err) + } + hf, ok := f.(*HeadersFrame) + if !ok { + st.t.Fatalf("got a %T; want *HeadersFrame", f) + } + return hf +} + +func (st *serverTester) wantContinuation() *ContinuationFrame { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting a CONTINUATION frame: %v", err) + } + cf, ok := f.(*ContinuationFrame) + if !ok { + st.t.Fatalf("got a %T; want *ContinuationFrame", f) + } + return cf +} + +func (st *serverTester) wantData() *DataFrame { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting a DATA frame: %v", err) + } + df, ok := f.(*DataFrame) + if !ok { + st.t.Fatalf("got a %T; want *DataFrame", f) + } + return df +} + +func (st *serverTester) wantSettings() *SettingsFrame { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting a SETTINGS frame: %v", err) + } + sf, ok := f.(*SettingsFrame) + if !ok { + st.t.Fatalf("got a %T; want *SettingsFrame", f) + } + return sf +} + +func (st *serverTester) wantPing() *PingFrame { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting a PING frame: %v", err) + } + pf, ok := f.(*PingFrame) + if !ok { + st.t.Fatalf("got a %T; want *PingFrame", f) + } + return pf +} + +func (st *serverTester) wantGoAway() *GoAwayFrame { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting a GOAWAY frame: %v", err) + } + gf, ok := f.(*GoAwayFrame) + if !ok { + st.t.Fatalf("got a %T; want *GoAwayFrame", f) + } + return gf +} + +func (st *serverTester) wantRSTStream(streamID uint32, errCode ErrCode) { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting an RSTStream frame: %v", err) + } + rs, ok := f.(*RSTStreamFrame) + if !ok { + st.t.Fatalf("got a %T; want *RSTStreamFrame", f) + } + if rs.FrameHeader.StreamID != streamID { + st.t.Fatalf("RSTStream StreamID = %d; want %d", rs.FrameHeader.StreamID, streamID) + } + if rs.ErrCode != errCode { + st.t.Fatalf("RSTStream ErrCode = %d (%s); want %d (%s)", rs.ErrCode, rs.ErrCode, errCode, errCode) + } +} + +func (st *serverTester) wantWindowUpdate(streamID, incr uint32) { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting a WINDOW_UPDATE frame: %v", err) + } + wu, ok := f.(*WindowUpdateFrame) + if !ok { + st.t.Fatalf("got a %T; want *WindowUpdateFrame", f) + } + if wu.FrameHeader.StreamID != streamID { + st.t.Fatalf("WindowUpdate StreamID = %d; want %d", wu.FrameHeader.StreamID, streamID) + } + if wu.Increment != incr { + st.t.Fatalf("WindowUpdate increment = %d; want %d", wu.Increment, incr) + } +} + +func (st *serverTester) wantSettingsAck() { + f, err := st.readFrame() + if err != nil { + st.t.Fatal(err) + } + sf, ok := f.(*SettingsFrame) + if !ok { + st.t.Fatalf("Wanting a settings ACK, received a %T", f) + } + if !sf.Header().Flags.Has(FlagSettingsAck) { + st.t.Fatal("Settings Frame didn't have ACK set") + } +} + +func (st *serverTester) wantPushPromise() *PushPromiseFrame { + f, err := st.readFrame() + if err != nil { + st.t.Fatal(err) + } + ppf, ok := f.(*PushPromiseFrame) + if !ok { + st.t.Fatalf("Wanted PushPromise, received %T", ppf) + } + return ppf +} + +func TestServer(t *testing.T) { + gotReq := make(chan bool, 1) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Foo", "Bar") + gotReq <- true + }) + defer st.Close() + + covers("3.5", ` + The server connection preface consists of a potentially empty + SETTINGS frame ([SETTINGS]) that MUST be the first frame the + server sends in the HTTP/2 connection. + `) + + st.greet() + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(), + EndStream: true, // no DATA frames + EndHeaders: true, + }) + + select { + case <-gotReq: + case <-time.After(2 * time.Second): + t.Error("timeout waiting for request") + } +} + +func TestServer_Request_Get(t *testing.T) { + testServerRequest(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader("foo-bar", "some-value"), + EndStream: true, // no DATA frames + EndHeaders: true, + }) + }, func(r *http.Request) { + if r.Method != "GET" { + t.Errorf("Method = %q; want GET", r.Method) + } + if r.URL.Path != "/" { + t.Errorf("URL.Path = %q; want /", r.URL.Path) + } + if r.ContentLength != 0 { + t.Errorf("ContentLength = %v; want 0", r.ContentLength) + } + if r.Close { + t.Error("Close = true; want false") + } + if !strings.Contains(r.RemoteAddr, ":") { + t.Errorf("RemoteAddr = %q; want something with a colon", r.RemoteAddr) + } + if r.Proto != "HTTP/2.0" || r.ProtoMajor != 2 || r.ProtoMinor != 0 { + t.Errorf("Proto = %q Major=%v,Minor=%v; want HTTP/2.0", r.Proto, r.ProtoMajor, r.ProtoMinor) + } + wantHeader := http.Header{ + "Foo-Bar": []string{"some-value"}, + } + if !reflect.DeepEqual(r.Header, wantHeader) { + t.Errorf("Header = %#v; want %#v", r.Header, wantHeader) + } + if n, err := r.Body.Read([]byte(" ")); err != io.EOF || n != 0 { + t.Errorf("Read = %d, %v; want 0, EOF", n, err) + } + }) +} + +func TestServer_Request_Get_PathSlashes(t *testing.T) { + testServerRequest(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":path", "/%2f/"), + EndStream: true, // no DATA frames + EndHeaders: true, + }) + }, func(r *http.Request) { + if r.RequestURI != "/%2f/" { + t.Errorf("RequestURI = %q; want /%%2f/", r.RequestURI) + } + if r.URL.Path != "///" { + t.Errorf("URL.Path = %q; want ///", r.URL.Path) + } + }) +} + +// TODO: add a test with EndStream=true on the HEADERS but setting a +// Content-Length anyway. Should we just omit it and force it to +// zero? + +func TestServer_Request_Post_NoContentLength_EndStream(t *testing.T) { + testServerRequest(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: true, + EndHeaders: true, + }) + }, func(r *http.Request) { + if r.Method != "POST" { + t.Errorf("Method = %q; want POST", r.Method) + } + if r.ContentLength != 0 { + t.Errorf("ContentLength = %v; want 0", r.ContentLength) + } + if n, err := r.Body.Read([]byte(" ")); err != io.EOF || n != 0 { + t.Errorf("Read = %d, %v; want 0, EOF", n, err) + } + }) +} + +func TestServer_Request_Post_Body_ImmediateEOF(t *testing.T) { + testBodyContents(t, -1, "", func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, // to say DATA frames are coming + EndHeaders: true, + }) + st.writeData(1, true, nil) // just kidding. empty body. + }) +} + +func TestServer_Request_Post_Body_OneData(t *testing.T) { + const content = "Some content" + testBodyContents(t, -1, content, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, // to say DATA frames are coming + EndHeaders: true, + }) + st.writeData(1, true, []byte(content)) + }) +} + +func TestServer_Request_Post_Body_TwoData(t *testing.T) { + const content = "Some content" + testBodyContents(t, -1, content, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, // to say DATA frames are coming + EndHeaders: true, + }) + st.writeData(1, false, []byte(content[:5])) + st.writeData(1, true, []byte(content[5:])) + }) +} + +func TestServer_Request_Post_Body_ContentLength_Correct(t *testing.T) { + const content = "Some content" + testBodyContents(t, int64(len(content)), content, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader( + ":method", "POST", + "content-length", strconv.Itoa(len(content)), + ), + EndStream: false, // to say DATA frames are coming + EndHeaders: true, + }) + st.writeData(1, true, []byte(content)) + }) +} + +func TestServer_Request_Post_Body_ContentLength_TooLarge(t *testing.T) { + testBodyContentsFail(t, 3, "request declared a Content-Length of 3 but only wrote 2 bytes", + func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader( + ":method", "POST", + "content-length", "3", + ), + EndStream: false, // to say DATA frames are coming + EndHeaders: true, + }) + st.writeData(1, true, []byte("12")) + }) +} + +func TestServer_Request_Post_Body_ContentLength_TooSmall(t *testing.T) { + testBodyContentsFail(t, 4, "sender tried to send more than declared Content-Length of 4 bytes", + func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader( + ":method", "POST", + "content-length", "4", + ), + EndStream: false, // to say DATA frames are coming + EndHeaders: true, + }) + st.writeData(1, true, []byte("12345")) + }) +} + +func testBodyContents(t *testing.T, wantContentLength int64, wantBody string, write func(st *serverTester)) { + testServerRequest(t, write, func(r *http.Request) { + if r.Method != "POST" { + t.Errorf("Method = %q; want POST", r.Method) + } + if r.ContentLength != wantContentLength { + t.Errorf("ContentLength = %v; want %d", r.ContentLength, wantContentLength) + } + all, err := ioutil.ReadAll(r.Body) + if err != nil { + t.Fatal(err) + } + if string(all) != wantBody { + t.Errorf("Read = %q; want %q", all, wantBody) + } + if err := r.Body.Close(); err != nil { + t.Fatalf("Close: %v", err) + } + }) +} + +func testBodyContentsFail(t *testing.T, wantContentLength int64, wantReadError string, write func(st *serverTester)) { + testServerRequest(t, write, func(r *http.Request) { + if r.Method != "POST" { + t.Errorf("Method = %q; want POST", r.Method) + } + if r.ContentLength != wantContentLength { + t.Errorf("ContentLength = %v; want %d", r.ContentLength, wantContentLength) + } + all, err := ioutil.ReadAll(r.Body) + if err == nil { + t.Fatalf("expected an error (%q) reading from the body. Successfully read %q instead.", + wantReadError, all) + } + if !strings.Contains(err.Error(), wantReadError) { + t.Fatalf("Body.Read = %v; want substring %q", err, wantReadError) + } + if err := r.Body.Close(); err != nil { + t.Fatalf("Close: %v", err) + } + }) +} + +// Using a Host header, instead of :authority +func TestServer_Request_Get_Host(t *testing.T) { + const host = "example.com" + testServerRequest(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":authority", "", "host", host), + EndStream: true, + EndHeaders: true, + }) + }, func(r *http.Request) { + if r.Host != host { + t.Errorf("Host = %q; want %q", r.Host, host) + } + }) +} + +// Using an :authority pseudo-header, instead of Host +func TestServer_Request_Get_Authority(t *testing.T) { + const host = "example.com" + testServerRequest(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":authority", host), + EndStream: true, + EndHeaders: true, + }) + }, func(r *http.Request) { + if r.Host != host { + t.Errorf("Host = %q; want %q", r.Host, host) + } + }) +} + +func TestServer_Request_WithContinuation(t *testing.T) { + wantHeader := http.Header{ + "Foo-One": []string{"value-one"}, + "Foo-Two": []string{"value-two"}, + "Foo-Three": []string{"value-three"}, + } + testServerRequest(t, func(st *serverTester) { + fullHeaders := st.encodeHeader( + "foo-one", "value-one", + "foo-two", "value-two", + "foo-three", "value-three", + ) + remain := fullHeaders + chunks := 0 + for len(remain) > 0 { + const maxChunkSize = 5 + chunk := remain + if len(chunk) > maxChunkSize { + chunk = chunk[:maxChunkSize] + } + remain = remain[len(chunk):] + + if chunks == 0 { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: chunk, + EndStream: true, // no DATA frames + EndHeaders: false, // we'll have continuation frames + }) + } else { + err := st.fr.WriteContinuation(1, len(remain) == 0, chunk) + if err != nil { + t.Fatal(err) + } + } + chunks++ + } + if chunks < 2 { + t.Fatal("too few chunks") + } + }, func(r *http.Request) { + if !reflect.DeepEqual(r.Header, wantHeader) { + t.Errorf("Header = %#v; want %#v", r.Header, wantHeader) + } + }) +} + +// Concatenated cookie headers. ("8.1.2.5 Compressing the Cookie Header Field") +func TestServer_Request_CookieConcat(t *testing.T) { + const host = "example.com" + testServerRequest(t, func(st *serverTester) { + st.bodylessReq1( + ":authority", host, + "cookie", "a=b", + "cookie", "c=d", + "cookie", "e=f", + ) + }, func(r *http.Request) { + const want = "a=b; c=d; e=f" + if got := r.Header.Get("Cookie"); got != want { + t.Errorf("Cookie = %q; want %q", got, want) + } + }) +} + +func TestServer_Request_Reject_CapitalHeader(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1("UPPER", "v") }) +} + +func TestServer_Request_Reject_HeaderFieldNameColon(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1("has:colon", "v") }) +} + +func TestServer_Request_Reject_HeaderFieldNameNULL(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1("has\x00null", "v") }) +} + +func TestServer_Request_Reject_HeaderFieldNameEmpty(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1("", "v") }) +} + +func TestServer_Request_Reject_HeaderFieldValueNewline(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1("foo", "has\nnewline") }) +} + +func TestServer_Request_Reject_HeaderFieldValueCR(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1("foo", "has\rcarriage") }) +} + +func TestServer_Request_Reject_HeaderFieldValueDEL(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1("foo", "has\x7fdel") }) +} + +func TestServer_Request_Reject_Pseudo_Missing_method(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1(":method", "") }) +} + +func TestServer_Request_Reject_Pseudo_ExactlyOne(t *testing.T) { + // 8.1.2.3 Request Pseudo-Header Fields + // "All HTTP/2 requests MUST include exactly one valid value" ... + testRejectRequest(t, func(st *serverTester) { + st.addLogFilter("duplicate pseudo-header") + st.bodylessReq1(":method", "GET", ":method", "POST") + }) +} + +func TestServer_Request_Reject_Pseudo_AfterRegular(t *testing.T) { + // 8.1.2.3 Request Pseudo-Header Fields + // "All pseudo-header fields MUST appear in the header block + // before regular header fields. Any request or response that + // contains a pseudo-header field that appears in a header + // block after a regular header field MUST be treated as + // malformed (Section 8.1.2.6)." + testRejectRequest(t, func(st *serverTester) { + st.addLogFilter("pseudo-header after regular header") + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":method", Value: "GET"}) + enc.WriteField(hpack.HeaderField{Name: "regular", Value: "foobar"}) + enc.WriteField(hpack.HeaderField{Name: ":path", Value: "/"}) + enc.WriteField(hpack.HeaderField{Name: ":scheme", Value: "https"}) + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: buf.Bytes(), + EndStream: true, + EndHeaders: true, + }) + }) +} + +func TestServer_Request_Reject_Pseudo_Missing_path(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1(":path", "") }) +} + +func TestServer_Request_Reject_Pseudo_Missing_scheme(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1(":scheme", "") }) +} + +func TestServer_Request_Reject_Pseudo_scheme_invalid(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { st.bodylessReq1(":scheme", "bogus") }) +} + +func TestServer_Request_Reject_Pseudo_Unknown(t *testing.T) { + testRejectRequest(t, func(st *serverTester) { + st.addLogFilter(`invalid pseudo-header ":unknown_thing"`) + st.bodylessReq1(":unknown_thing", "") + }) +} + +func testRejectRequest(t *testing.T, send func(*serverTester)) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + t.Error("server request made it to handler; should've been rejected") + }) + defer st.Close() + + st.greet() + send(st) + st.wantRSTStream(1, ErrCodeProtocol) +} + +func testRejectRequestWithProtocolError(t *testing.T, send func(*serverTester)) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + t.Error("server request made it to handler; should've been rejected") + }, optQuiet) + defer st.Close() + + st.greet() + send(st) + gf := st.wantGoAway() + if gf.ErrCode != ErrCodeProtocol { + t.Errorf("err code = %v; want %v", gf.ErrCode, ErrCodeProtocol) + } +} + +// Section 5.1, on idle connections: "Receiving any frame other than +// HEADERS or PRIORITY on a stream in this state MUST be treated as a +// connection error (Section 5.4.1) of type PROTOCOL_ERROR." +func TestRejectFrameOnIdle_WindowUpdate(t *testing.T) { + testRejectRequestWithProtocolError(t, func(st *serverTester) { + st.fr.WriteWindowUpdate(123, 456) + }) +} +func TestRejectFrameOnIdle_Data(t *testing.T) { + testRejectRequestWithProtocolError(t, func(st *serverTester) { + st.fr.WriteData(123, true, nil) + }) +} +func TestRejectFrameOnIdle_RSTStream(t *testing.T) { + testRejectRequestWithProtocolError(t, func(st *serverTester) { + st.fr.WriteRSTStream(123, ErrCodeCancel) + }) +} + +func TestServer_Request_Connect(t *testing.T) { + testServerRequest(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeaderRaw( + ":method", "CONNECT", + ":authority", "example.com:123", + ), + EndStream: true, + EndHeaders: true, + }) + }, func(r *http.Request) { + if g, w := r.Method, "CONNECT"; g != w { + t.Errorf("Method = %q; want %q", g, w) + } + if g, w := r.RequestURI, "example.com:123"; g != w { + t.Errorf("RequestURI = %q; want %q", g, w) + } + if g, w := r.URL.Host, "example.com:123"; g != w { + t.Errorf("URL.Host = %q; want %q", g, w) + } + }) +} + +func TestServer_Request_Connect_InvalidPath(t *testing.T) { + testServerRejectsStream(t, ErrCodeProtocol, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeaderRaw( + ":method", "CONNECT", + ":authority", "example.com:123", + ":path", "/bogus", + ), + EndStream: true, + EndHeaders: true, + }) + }) +} + +func TestServer_Request_Connect_InvalidScheme(t *testing.T) { + testServerRejectsStream(t, ErrCodeProtocol, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeaderRaw( + ":method", "CONNECT", + ":authority", "example.com:123", + ":scheme", "https", + ), + EndStream: true, + EndHeaders: true, + }) + }) +} + +func TestServer_Ping(t *testing.T) { + st := newServerTester(t, nil) + defer st.Close() + st.greet() + + // Server should ignore this one, since it has ACK set. + ackPingData := [8]byte{1, 2, 4, 8, 16, 32, 64, 128} + if err := st.fr.WritePing(true, ackPingData); err != nil { + t.Fatal(err) + } + + // But the server should reply to this one, since ACK is false. + pingData := [8]byte{1, 2, 3, 4, 5, 6, 7, 8} + if err := st.fr.WritePing(false, pingData); err != nil { + t.Fatal(err) + } + + pf := st.wantPing() + if !pf.Flags.Has(FlagPingAck) { + t.Error("response ping doesn't have ACK set") + } + if pf.Data != pingData { + t.Errorf("response ping has data %q; want %q", pf.Data, pingData) + } +} + +func TestServer_RejectsLargeFrames(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("see golang.org/issue/13434") + } + + st := newServerTester(t, nil) + defer st.Close() + st.greet() + + // Write too large of a frame (too large by one byte) + // We ignore the return value because it's expected that the server + // will only read the first 9 bytes (the headre) and then disconnect. + st.fr.WriteRawFrame(0xff, 0, 0, make([]byte, defaultMaxReadFrameSize+1)) + + gf := st.wantGoAway() + if gf.ErrCode != ErrCodeFrameSize { + t.Errorf("GOAWAY err = %v; want %v", gf.ErrCode, ErrCodeFrameSize) + } + if st.serverLogBuf.Len() != 0 { + // Previously we spun here for a bit until the GOAWAY disconnect + // timer fired, logging while we fired. + t.Errorf("unexpected server output: %.500s\n", st.serverLogBuf.Bytes()) + } +} + +func TestServer_Handler_Sends_WindowUpdate(t *testing.T) { + puppet := newHandlerPuppet() + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + puppet.act(w, r) + }) + defer st.Close() + defer puppet.done() + + st.greet() + + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, // data coming + EndHeaders: true, + }) + st.writeData(1, false, []byte("abcdef")) + puppet.do(readBodyHandler(t, "abc")) + st.wantWindowUpdate(0, 3) + st.wantWindowUpdate(1, 3) + + puppet.do(readBodyHandler(t, "def")) + st.wantWindowUpdate(0, 3) + st.wantWindowUpdate(1, 3) + + st.writeData(1, true, []byte("ghijkl")) // END_STREAM here + puppet.do(readBodyHandler(t, "ghi")) + puppet.do(readBodyHandler(t, "jkl")) + st.wantWindowUpdate(0, 3) + st.wantWindowUpdate(0, 3) // no more stream-level, since END_STREAM +} + +// the version of the TestServer_Handler_Sends_WindowUpdate with padding. +// See golang.org/issue/16556 +func TestServer_Handler_Sends_WindowUpdate_Padding(t *testing.T) { + puppet := newHandlerPuppet() + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + puppet.act(w, r) + }) + defer st.Close() + defer puppet.done() + + st.greet() + + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, + EndHeaders: true, + }) + st.writeDataPadded(1, false, []byte("abcdef"), []byte{0, 0, 0, 0}) + + // Expect to immediately get our 5 bytes of padding back for + // both the connection and stream (4 bytes of padding + 1 byte of length) + st.wantWindowUpdate(0, 5) + st.wantWindowUpdate(1, 5) + + puppet.do(readBodyHandler(t, "abc")) + st.wantWindowUpdate(0, 3) + st.wantWindowUpdate(1, 3) + + puppet.do(readBodyHandler(t, "def")) + st.wantWindowUpdate(0, 3) + st.wantWindowUpdate(1, 3) +} + +func TestServer_Send_GoAway_After_Bogus_WindowUpdate(t *testing.T) { + st := newServerTester(t, nil) + defer st.Close() + st.greet() + if err := st.fr.WriteWindowUpdate(0, 1<<31-1); err != nil { + t.Fatal(err) + } + gf := st.wantGoAway() + if gf.ErrCode != ErrCodeFlowControl { + t.Errorf("GOAWAY err = %v; want %v", gf.ErrCode, ErrCodeFlowControl) + } + if gf.LastStreamID != 0 { + t.Errorf("GOAWAY last stream ID = %v; want %v", gf.LastStreamID, 0) + } +} + +func TestServer_Send_RstStream_After_Bogus_WindowUpdate(t *testing.T) { + inHandler := make(chan bool) + blockHandler := make(chan bool) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + inHandler <- true + <-blockHandler + }) + defer st.Close() + defer close(blockHandler) + st.greet() + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, // keep it open + EndHeaders: true, + }) + <-inHandler + // Send a bogus window update: + if err := st.fr.WriteWindowUpdate(1, 1<<31-1); err != nil { + t.Fatal(err) + } + st.wantRSTStream(1, ErrCodeFlowControl) +} + +// testServerPostUnblock sends a hanging POST with unsent data to handler, +// then runs fn once in the handler, and verifies that the error returned from +// handler is acceptable. It fails if takes over 5 seconds for handler to exit. +func testServerPostUnblock(t *testing.T, + handler func(http.ResponseWriter, *http.Request) error, + fn func(*serverTester), + checkErr func(error), + otherHeaders ...string) { + inHandler := make(chan bool) + errc := make(chan error, 1) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + inHandler <- true + errc <- handler(w, r) + }) + defer st.Close() + st.greet() + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(append([]string{":method", "POST"}, otherHeaders...)...), + EndStream: false, // keep it open + EndHeaders: true, + }) + <-inHandler + fn(st) + select { + case err := <-errc: + if checkErr != nil { + checkErr(err) + } + case <-time.After(5 * time.Second): + t.Fatal("timeout waiting for Handler to return") + } +} + +func TestServer_RSTStream_Unblocks_Read(t *testing.T) { + testServerPostUnblock(t, + func(w http.ResponseWriter, r *http.Request) (err error) { + _, err = r.Body.Read(make([]byte, 1)) + return + }, + func(st *serverTester) { + if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil { + t.Fatal(err) + } + }, + func(err error) { + want := StreamError{StreamID: 0x1, Code: 0x8} + if !reflect.DeepEqual(err, want) { + t.Errorf("Read error = %v; want %v", err, want) + } + }, + ) +} + +func TestServer_RSTStream_Unblocks_Header_Write(t *testing.T) { + // Run this test a bunch, because it doesn't always + // deadlock. But with a bunch, it did. + n := 50 + if testing.Short() { + n = 5 + } + for i := 0; i < n; i++ { + testServer_RSTStream_Unblocks_Header_Write(t) + } +} + +func testServer_RSTStream_Unblocks_Header_Write(t *testing.T) { + inHandler := make(chan bool, 1) + unblockHandler := make(chan bool, 1) + headerWritten := make(chan bool, 1) + wroteRST := make(chan bool, 1) + + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + inHandler <- true + <-wroteRST + w.Header().Set("foo", "bar") + w.WriteHeader(200) + w.(http.Flusher).Flush() + headerWritten <- true + <-unblockHandler + }) + defer st.Close() + + st.greet() + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, // keep it open + EndHeaders: true, + }) + <-inHandler + if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil { + t.Fatal(err) + } + wroteRST <- true + st.awaitIdle() + select { + case <-headerWritten: + case <-time.After(2 * time.Second): + t.Error("timeout waiting for header write") + } + unblockHandler <- true +} + +func TestServer_DeadConn_Unblocks_Read(t *testing.T) { + testServerPostUnblock(t, + func(w http.ResponseWriter, r *http.Request) (err error) { + _, err = r.Body.Read(make([]byte, 1)) + return + }, + func(st *serverTester) { st.cc.Close() }, + func(err error) { + if err == nil { + t.Error("unexpected nil error from Request.Body.Read") + } + }, + ) +} + +var blockUntilClosed = func(w http.ResponseWriter, r *http.Request) error { + <-w.(http.CloseNotifier).CloseNotify() + return nil +} + +func TestServer_CloseNotify_After_RSTStream(t *testing.T) { + testServerPostUnblock(t, blockUntilClosed, func(st *serverTester) { + if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil { + t.Fatal(err) + } + }, nil) +} + +func TestServer_CloseNotify_After_ConnClose(t *testing.T) { + testServerPostUnblock(t, blockUntilClosed, func(st *serverTester) { st.cc.Close() }, nil) +} + +// that CloseNotify unblocks after a stream error due to the client's +// problem that's unrelated to them explicitly canceling it (which is +// TestServer_CloseNotify_After_RSTStream above) +func TestServer_CloseNotify_After_StreamError(t *testing.T) { + testServerPostUnblock(t, blockUntilClosed, func(st *serverTester) { + // data longer than declared Content-Length => stream error + st.writeData(1, true, []byte("1234")) + }, nil, "content-length", "3") +} + +func TestServer_StateTransitions(t *testing.T) { + var st *serverTester + inHandler := make(chan bool) + writeData := make(chan bool) + leaveHandler := make(chan bool) + st = newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + inHandler <- true + if st.stream(1) == nil { + t.Errorf("nil stream 1 in handler") + } + if got, want := st.streamState(1), stateOpen; got != want { + t.Errorf("in handler, state is %v; want %v", got, want) + } + writeData <- true + if n, err := r.Body.Read(make([]byte, 1)); n != 0 || err != io.EOF { + t.Errorf("body read = %d, %v; want 0, EOF", n, err) + } + if got, want := st.streamState(1), stateHalfClosedRemote; got != want { + t.Errorf("in handler, state is %v; want %v", got, want) + } + + <-leaveHandler + }) + st.greet() + if st.stream(1) != nil { + t.Fatal("stream 1 should be empty") + } + if got := st.streamState(1); got != stateIdle { + t.Fatalf("stream 1 should be idle; got %v", got) + } + + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, // keep it open + EndHeaders: true, + }) + <-inHandler + <-writeData + st.writeData(1, true, nil) + + leaveHandler <- true + hf := st.wantHeaders() + if !hf.StreamEnded() { + t.Fatal("expected END_STREAM flag") + } + + if got, want := st.streamState(1), stateClosed; got != want { + t.Errorf("at end, state is %v; want %v", got, want) + } + if st.stream(1) != nil { + t.Fatal("at end, stream 1 should be gone") + } +} + +// test HEADERS w/o EndHeaders + another HEADERS (should get rejected) +func TestServer_Rejects_HeadersNoEnd_Then_Headers(t *testing.T) { + testServerRejectsConn(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: false, + }) + st.writeHeaders(HeadersFrameParam{ // Not a continuation. + StreamID: 3, // different stream. + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: true, + }) + }) +} + +// test HEADERS w/o EndHeaders + PING (should get rejected) +func TestServer_Rejects_HeadersNoEnd_Then_Ping(t *testing.T) { + testServerRejectsConn(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: false, + }) + if err := st.fr.WritePing(false, [8]byte{}); err != nil { + t.Fatal(err) + } + }) +} + +// test HEADERS w/ EndHeaders + a continuation HEADERS (should get rejected) +func TestServer_Rejects_HeadersEnd_Then_Continuation(t *testing.T) { + testServerRejectsConn(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: true, + }) + st.wantHeaders() + if err := st.fr.WriteContinuation(1, true, encodeHeaderNoImplicit(t, "foo", "bar")); err != nil { + t.Fatal(err) + } + }) +} + +// test HEADERS w/o EndHeaders + a continuation HEADERS on wrong stream ID +func TestServer_Rejects_HeadersNoEnd_Then_ContinuationWrongStream(t *testing.T) { + testServerRejectsConn(t, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: false, + }) + if err := st.fr.WriteContinuation(3, true, encodeHeaderNoImplicit(t, "foo", "bar")); err != nil { + t.Fatal(err) + } + }) +} + +// No HEADERS on stream 0. +func TestServer_Rejects_Headers0(t *testing.T) { + testServerRejectsConn(t, func(st *serverTester) { + st.fr.AllowIllegalWrites = true + st.writeHeaders(HeadersFrameParam{ + StreamID: 0, + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: true, + }) + }) +} + +// No CONTINUATION on stream 0. +func TestServer_Rejects_Continuation0(t *testing.T) { + testServerRejectsConn(t, func(st *serverTester) { + st.fr.AllowIllegalWrites = true + if err := st.fr.WriteContinuation(0, true, st.encodeHeader()); err != nil { + t.Fatal(err) + } + }) +} + +// No PRIORITY on stream 0. +func TestServer_Rejects_Priority0(t *testing.T) { + testServerRejectsConn(t, func(st *serverTester) { + st.fr.AllowIllegalWrites = true + st.writePriority(0, PriorityParam{StreamDep: 1}) + }) +} + +// No HEADERS frame with a self-dependence. +func TestServer_Rejects_HeadersSelfDependence(t *testing.T) { + testServerRejectsStream(t, ErrCodeProtocol, func(st *serverTester) { + st.fr.AllowIllegalWrites = true + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: true, + Priority: PriorityParam{StreamDep: 1}, + }) + }) +} + +// No PRIORTY frame with a self-dependence. +func TestServer_Rejects_PrioritySelfDependence(t *testing.T) { + testServerRejectsStream(t, ErrCodeProtocol, func(st *serverTester) { + st.fr.AllowIllegalWrites = true + st.writePriority(1, PriorityParam{StreamDep: 1}) + }) +} + +func TestServer_Rejects_PushPromise(t *testing.T) { + testServerRejectsConn(t, func(st *serverTester) { + pp := PushPromiseParam{ + StreamID: 1, + PromiseID: 3, + } + if err := st.fr.WritePushPromise(pp); err != nil { + t.Fatal(err) + } + }) +} + +// testServerRejectsConn tests that the server hangs up with a GOAWAY +// frame and a server close after the client does something +// deserving a CONNECTION_ERROR. +func testServerRejectsConn(t *testing.T, writeReq func(*serverTester)) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {}) + st.addLogFilter("connection error: PROTOCOL_ERROR") + defer st.Close() + st.greet() + writeReq(st) + + st.wantGoAway() + errc := make(chan error, 1) + go func() { + fr, err := st.fr.ReadFrame() + if err == nil { + err = fmt.Errorf("got frame of type %T", fr) + } + errc <- err + }() + select { + case err := <-errc: + if err != io.EOF { + t.Errorf("ReadFrame = %v; want io.EOF", err) + } + case <-time.After(2 * time.Second): + t.Error("timeout waiting for disconnect") + } +} + +// testServerRejectsStream tests that the server sends a RST_STREAM with the provided +// error code after a client sends a bogus request. +func testServerRejectsStream(t *testing.T, code ErrCode, writeReq func(*serverTester)) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {}) + defer st.Close() + st.greet() + writeReq(st) + st.wantRSTStream(1, code) +} + +// testServerRequest sets up an idle HTTP/2 connection and lets you +// write a single request with writeReq, and then verify that the +// *http.Request is built correctly in checkReq. +func testServerRequest(t *testing.T, writeReq func(*serverTester), checkReq func(*http.Request)) { + gotReq := make(chan bool, 1) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + if r.Body == nil { + t.Fatal("nil Body") + } + checkReq(r) + gotReq <- true + }) + defer st.Close() + + st.greet() + writeReq(st) + + select { + case <-gotReq: + case <-time.After(2 * time.Second): + t.Error("timeout waiting for request") + } +} + +func getSlash(st *serverTester) { st.bodylessReq1() } + +func TestServer_Response_NoData(t *testing.T) { + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + // Nothing. + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if !hf.StreamEnded() { + t.Fatal("want END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + }) +} + +func TestServer_Response_NoData_Header_FooBar(t *testing.T) { + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.Header().Set("Foo-Bar", "some-value") + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if !hf.StreamEnded() { + t.Fatal("want END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"foo-bar", "some-value"}, + {"content-type", "text/plain; charset=utf-8"}, + {"content-length", "0"}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + }) +} + +func TestServer_Response_Data_Sniff_DoesntOverride(t *testing.T) { + const msg = "this is HTML." + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.Header().Set("Content-Type", "foo/bar") + io.WriteString(w, msg) + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("don't want END_STREAM, expecting data") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"content-type", "foo/bar"}, + {"content-length", strconv.Itoa(len(msg))}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + df := st.wantData() + if !df.StreamEnded() { + t.Error("expected DATA to have END_STREAM flag") + } + if got := string(df.Data()); got != msg { + t.Errorf("got DATA %q; want %q", got, msg) + } + }) +} + +func TestServer_Response_TransferEncoding_chunked(t *testing.T) { + const msg = "hi" + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.Header().Set("Transfer-Encoding", "chunked") // should be stripped + io.WriteString(w, msg) + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"content-type", "text/plain; charset=utf-8"}, + {"content-length", strconv.Itoa(len(msg))}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + }) +} + +// Header accessed only after the initial write. +func TestServer_Response_Data_IgnoreHeaderAfterWrite_After(t *testing.T) { + const msg = "this is HTML." + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + io.WriteString(w, msg) + w.Header().Set("foo", "should be ignored") + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"content-type", "text/html; charset=utf-8"}, + {"content-length", strconv.Itoa(len(msg))}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + }) +} + +// Header accessed before the initial write and later mutated. +func TestServer_Response_Data_IgnoreHeaderAfterWrite_Overwrite(t *testing.T) { + const msg = "this is HTML." + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.Header().Set("foo", "proper value") + io.WriteString(w, msg) + w.Header().Set("foo", "should be ignored") + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"foo", "proper value"}, + {"content-type", "text/html; charset=utf-8"}, + {"content-length", strconv.Itoa(len(msg))}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + }) +} + +func TestServer_Response_Data_SniffLenType(t *testing.T) { + const msg = "this is HTML." + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + io.WriteString(w, msg) + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("don't want END_STREAM, expecting data") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"content-type", "text/html; charset=utf-8"}, + {"content-length", strconv.Itoa(len(msg))}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + df := st.wantData() + if !df.StreamEnded() { + t.Error("expected DATA to have END_STREAM flag") + } + if got := string(df.Data()); got != msg { + t.Errorf("got DATA %q; want %q", got, msg) + } + }) +} + +func TestServer_Response_Header_Flush_MidWrite(t *testing.T) { + const msg = "this is HTML" + const msg2 = ", and this is the next chunk" + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + io.WriteString(w, msg) + w.(http.Flusher).Flush() + io.WriteString(w, msg2) + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"content-type", "text/html; charset=utf-8"}, // sniffed + // and no content-length + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + { + df := st.wantData() + if df.StreamEnded() { + t.Error("unexpected END_STREAM flag") + } + if got := string(df.Data()); got != msg { + t.Errorf("got DATA %q; want %q", got, msg) + } + } + { + df := st.wantData() + if !df.StreamEnded() { + t.Error("wanted END_STREAM flag on last data chunk") + } + if got := string(df.Data()); got != msg2 { + t.Errorf("got DATA %q; want %q", got, msg2) + } + } + }) +} + +func TestServer_Response_LargeWrite(t *testing.T) { + const size = 1 << 20 + const maxFrameSize = 16 << 10 + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + n, err := w.Write(bytes.Repeat([]byte("a"), size)) + if err != nil { + return fmt.Errorf("Write error: %v", err) + } + if n != size { + return fmt.Errorf("wrong size %d from Write", n) + } + return nil + }, func(st *serverTester) { + if err := st.fr.WriteSettings( + Setting{SettingInitialWindowSize, 0}, + Setting{SettingMaxFrameSize, maxFrameSize}, + ); err != nil { + t.Fatal(err) + } + st.wantSettingsAck() + + getSlash(st) // make the single request + + // Give the handler quota to write: + if err := st.fr.WriteWindowUpdate(1, size); err != nil { + t.Fatal(err) + } + // Give the handler quota to write to connection-level + // window as well + if err := st.fr.WriteWindowUpdate(0, size); err != nil { + t.Fatal(err) + } + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"content-type", "text/plain; charset=utf-8"}, // sniffed + // and no content-length + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + var bytes, frames int + for { + df := st.wantData() + bytes += len(df.Data()) + frames++ + for _, b := range df.Data() { + if b != 'a' { + t.Fatal("non-'a' byte seen in DATA") + } + } + if df.StreamEnded() { + break + } + } + if bytes != size { + t.Errorf("Got %d bytes; want %d", bytes, size) + } + if want := int(size / maxFrameSize); frames < want || frames > want*2 { + t.Errorf("Got %d frames; want %d", frames, size) + } + }) +} + +// Test that the handler can't write more than the client allows +func TestServer_Response_LargeWrite_FlowControlled(t *testing.T) { + // Make these reads. Before each read, the client adds exactly enough + // flow-control to satisfy the read. Numbers chosen arbitrarily. + reads := []int{123, 1, 13, 127} + size := 0 + for _, n := range reads { + size += n + } + + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.(http.Flusher).Flush() + n, err := w.Write(bytes.Repeat([]byte("a"), size)) + if err != nil { + return fmt.Errorf("Write error: %v", err) + } + if n != size { + return fmt.Errorf("wrong size %d from Write", n) + } + return nil + }, func(st *serverTester) { + // Set the window size to something explicit for this test. + // It's also how much initial data we expect. + if err := st.fr.WriteSettings(Setting{SettingInitialWindowSize, uint32(reads[0])}); err != nil { + t.Fatal(err) + } + st.wantSettingsAck() + + getSlash(st) // make the single request + + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + + df := st.wantData() + if got := len(df.Data()); got != reads[0] { + t.Fatalf("Initial window size = %d but got DATA with %d bytes", reads[0], got) + } + + for _, quota := range reads[1:] { + if err := st.fr.WriteWindowUpdate(1, uint32(quota)); err != nil { + t.Fatal(err) + } + df := st.wantData() + if int(quota) != len(df.Data()) { + t.Fatalf("read %d bytes after giving %d quota", len(df.Data()), quota) + } + } + }) +} + +// Test that the handler blocked in a Write is unblocked if the server sends a RST_STREAM. +func TestServer_Response_RST_Unblocks_LargeWrite(t *testing.T) { + const size = 1 << 20 + const maxFrameSize = 16 << 10 + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.(http.Flusher).Flush() + errc := make(chan error, 1) + go func() { + _, err := w.Write(bytes.Repeat([]byte("a"), size)) + errc <- err + }() + select { + case err := <-errc: + if err == nil { + return errors.New("unexpected nil error from Write in handler") + } + return nil + case <-time.After(2 * time.Second): + return errors.New("timeout waiting for Write in handler") + } + }, func(st *serverTester) { + if err := st.fr.WriteSettings( + Setting{SettingInitialWindowSize, 0}, + Setting{SettingMaxFrameSize, maxFrameSize}, + ); err != nil { + t.Fatal(err) + } + st.wantSettingsAck() + + getSlash(st) // make the single request + + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + + if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil { + t.Fatal(err) + } + }) +} + +func TestServer_Response_Empty_Data_Not_FlowControlled(t *testing.T) { + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.(http.Flusher).Flush() + // Nothing; send empty DATA + return nil + }, func(st *serverTester) { + // Handler gets no data quota: + if err := st.fr.WriteSettings(Setting{SettingInitialWindowSize, 0}); err != nil { + t.Fatal(err) + } + st.wantSettingsAck() + + getSlash(st) // make the single request + + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + + df := st.wantData() + if got := len(df.Data()); got != 0 { + t.Fatalf("unexpected %d DATA bytes; want 0", got) + } + if !df.StreamEnded() { + t.Fatal("DATA didn't have END_STREAM") + } + }) +} + +func TestServer_Response_Automatic100Continue(t *testing.T) { + const msg = "foo" + const reply = "bar" + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + if v := r.Header.Get("Expect"); v != "" { + t.Errorf("Expect header = %q; want empty", v) + } + buf := make([]byte, len(msg)) + // This read should trigger the 100-continue being sent. + if n, err := io.ReadFull(r.Body, buf); err != nil || n != len(msg) || string(buf) != msg { + return fmt.Errorf("ReadFull = %q, %v; want %q, nil", buf[:n], err, msg) + } + _, err := io.WriteString(w, reply) + return err + }, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":method", "POST", "expect", "100-continue"), + EndStream: false, + EndHeaders: true, + }) + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "100"}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Fatalf("Got headers %v; want %v", goth, wanth) + } + + // Okay, they sent status 100, so we can send our + // gigantic and/or sensitive "foo" payload now. + st.writeData(1, true, []byte(msg)) + + st.wantWindowUpdate(0, uint32(len(msg))) + + hf = st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("expected data to follow") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + goth = st.decodeHeader(hf.HeaderBlockFragment()) + wanth = [][2]string{ + {":status", "200"}, + {"content-type", "text/plain; charset=utf-8"}, + {"content-length", strconv.Itoa(len(reply))}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + + df := st.wantData() + if string(df.Data()) != reply { + t.Errorf("Client read %q; want %q", df.Data(), reply) + } + if !df.StreamEnded() { + t.Errorf("expect data stream end") + } + }) +} + +func TestServer_HandlerWriteErrorOnDisconnect(t *testing.T) { + errc := make(chan error, 1) + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + p := []byte("some data.\n") + for { + _, err := w.Write(p) + if err != nil { + errc <- err + return nil + } + } + }, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(), + EndStream: false, + EndHeaders: true, + }) + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("unexpected END_STREAM flag") + } + if !hf.HeadersEnded() { + t.Fatal("want END_HEADERS flag") + } + // Close the connection and wait for the handler to (hopefully) notice. + st.cc.Close() + select { + case <-errc: + case <-time.After(5 * time.Second): + t.Error("timeout") + } + }) +} + +func TestServer_Rejects_Too_Many_Streams(t *testing.T) { + const testPath = "/some/path" + + inHandler := make(chan uint32) + leaveHandler := make(chan bool) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + id := w.(*responseWriter).rws.stream.id + inHandler <- id + if id == 1+(defaultMaxStreams+1)*2 && r.URL.Path != testPath { + t.Errorf("decoded final path as %q; want %q", r.URL.Path, testPath) + } + <-leaveHandler + }) + defer st.Close() + st.greet() + nextStreamID := uint32(1) + streamID := func() uint32 { + defer func() { nextStreamID += 2 }() + return nextStreamID + } + sendReq := func(id uint32, headers ...string) { + st.writeHeaders(HeadersFrameParam{ + StreamID: id, + BlockFragment: st.encodeHeader(headers...), + EndStream: true, + EndHeaders: true, + }) + } + for i := 0; i < defaultMaxStreams; i++ { + sendReq(streamID()) + <-inHandler + } + defer func() { + for i := 0; i < defaultMaxStreams; i++ { + leaveHandler <- true + } + }() + + // And this one should cross the limit: + // (It's also sent as a CONTINUATION, to verify we still track the decoder context, + // even if we're rejecting it) + rejectID := streamID() + headerBlock := st.encodeHeader(":path", testPath) + frag1, frag2 := headerBlock[:3], headerBlock[3:] + st.writeHeaders(HeadersFrameParam{ + StreamID: rejectID, + BlockFragment: frag1, + EndStream: true, + EndHeaders: false, // CONTINUATION coming + }) + if err := st.fr.WriteContinuation(rejectID, true, frag2); err != nil { + t.Fatal(err) + } + st.wantRSTStream(rejectID, ErrCodeProtocol) + + // But let a handler finish: + leaveHandler <- true + st.wantHeaders() + + // And now another stream should be able to start: + goodID := streamID() + sendReq(goodID, ":path", testPath) + select { + case got := <-inHandler: + if got != goodID { + t.Errorf("Got stream %d; want %d", got, goodID) + } + case <-time.After(3 * time.Second): + t.Error("timeout waiting for handler") + } +} + +// So many response headers that the server needs to use CONTINUATION frames: +func TestServer_Response_ManyHeaders_With_Continuation(t *testing.T) { + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + h := w.Header() + for i := 0; i < 5000; i++ { + h.Set(fmt.Sprintf("x-header-%d", i), fmt.Sprintf("x-value-%d", i)) + } + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if hf.HeadersEnded() { + t.Fatal("got unwanted END_HEADERS flag") + } + n := 0 + for { + n++ + cf := st.wantContinuation() + if cf.HeadersEnded() { + break + } + } + if n < 5 { + t.Errorf("Only got %d CONTINUATION frames; expected 5+ (currently 6)", n) + } + }) +} + +// This previously crashed (reported by Mathieu Lonjaret as observed +// while using Camlistore) because we got a DATA frame from the client +// after the handler exited and our logic at the time was wrong, +// keeping a stream in the map in stateClosed, which tickled an +// invariant check later when we tried to remove that stream (via +// defer sc.closeAllStreamsOnConnClose) when the serverConn serve loop +// ended. +func TestServer_NoCrash_HandlerClose_Then_ClientClose(t *testing.T) { + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + // nothing + return nil + }, func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(), + EndStream: false, // DATA is coming + EndHeaders: true, + }) + hf := st.wantHeaders() + if !hf.HeadersEnded() || !hf.StreamEnded() { + t.Fatalf("want END_HEADERS+END_STREAM, got %v", hf) + } + + // Sent when the a Handler closes while a client has + // indicated it's still sending DATA: + st.wantRSTStream(1, ErrCodeCancel) + + // Now the handler has ended, so it's ended its + // stream, but the client hasn't closed its side + // (stateClosedLocal). So send more data and verify + // it doesn't crash with an internal invariant panic, like + // it did before. + st.writeData(1, true, []byte("foo")) + + // Get our flow control bytes back, since the handler didn't get them. + st.wantWindowUpdate(0, uint32(len("foo"))) + + // Sent after a peer sends data anyway (admittedly the + // previous RST_STREAM might've still been in-flight), + // but they'll get the more friendly 'cancel' code + // first. + st.wantRSTStream(1, ErrCodeStreamClosed) + + // Set up a bunch of machinery to record the panic we saw + // previously. + var ( + panMu sync.Mutex + panicVal interface{} + ) + + testHookOnPanicMu.Lock() + testHookOnPanic = func(sc *serverConn, pv interface{}) bool { + panMu.Lock() + panicVal = pv + panMu.Unlock() + return true + } + testHookOnPanicMu.Unlock() + + // Now force the serve loop to end, via closing the connection. + st.cc.Close() + select { + case <-st.sc.doneServing: + // Loop has exited. + panMu.Lock() + got := panicVal + panMu.Unlock() + if got != nil { + t.Errorf("Got panic: %v", got) + } + case <-time.After(5 * time.Second): + t.Error("timeout") + } + }) +} + +func TestServer_Rejects_TLS10(t *testing.T) { testRejectTLS(t, tls.VersionTLS10) } +func TestServer_Rejects_TLS11(t *testing.T) { testRejectTLS(t, tls.VersionTLS11) } + +func testRejectTLS(t *testing.T, max uint16) { + st := newServerTester(t, nil, func(c *tls.Config) { + c.MaxVersion = max + }) + defer st.Close() + gf := st.wantGoAway() + if got, want := gf.ErrCode, ErrCodeInadequateSecurity; got != want { + t.Errorf("Got error code %v; want %v", got, want) + } +} + +func TestServer_Rejects_TLSBadCipher(t *testing.T) { + st := newServerTester(t, nil, func(c *tls.Config) { + // Only list bad ones: + c.CipherSuites = []uint16{ + tls.TLS_RSA_WITH_RC4_128_SHA, + tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, + tls.TLS_RSA_WITH_AES_128_CBC_SHA, + tls.TLS_RSA_WITH_AES_256_CBC_SHA, + tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, + tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, + tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, + tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, + tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + } + }) + defer st.Close() + gf := st.wantGoAway() + if got, want := gf.ErrCode, ErrCodeInadequateSecurity; got != want { + t.Errorf("Got error code %v; want %v", got, want) + } +} + +func TestServer_Advertises_Common_Cipher(t *testing.T) { + const requiredSuite = tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + st := newServerTester(t, nil, func(c *tls.Config) { + // Have the client only support the one required by the spec. + c.CipherSuites = []uint16{requiredSuite} + }, func(ts *httptest.Server) { + var srv *http.Server = ts.Config + // Have the server configured with no specific cipher suites. + // This tests that Go's defaults include the required one. + srv.TLSConfig = nil + }) + defer st.Close() + st.greet() +} + +func (st *serverTester) onHeaderField(f hpack.HeaderField) { + if f.Name == "date" { + return + } + st.decodedHeaders = append(st.decodedHeaders, [2]string{f.Name, f.Value}) +} + +func (st *serverTester) decodeHeader(headerBlock []byte) (pairs [][2]string) { + st.decodedHeaders = nil + if _, err := st.hpackDec.Write(headerBlock); err != nil { + st.t.Fatalf("hpack decoding error: %v", err) + } + if err := st.hpackDec.Close(); err != nil { + st.t.Fatalf("hpack decoding error: %v", err) + } + return st.decodedHeaders +} + +// testServerResponse sets up an idle HTTP/2 connection. The client function should +// write a single request that must be handled by the handler. This waits up to 5s +// for client to return, then up to an additional 2s for the handler to return. +func testServerResponse(t testing.TB, + handler func(http.ResponseWriter, *http.Request) error, + client func(*serverTester), +) { + errc := make(chan error, 1) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + if r.Body == nil { + t.Fatal("nil Body") + } + errc <- handler(w, r) + }) + defer st.Close() + + donec := make(chan bool) + go func() { + defer close(donec) + st.greet() + client(st) + }() + + select { + case <-donec: + case <-time.After(5 * time.Second): + t.Fatal("timeout in client") + } + + select { + case err := <-errc: + if err != nil { + t.Fatalf("Error in handler: %v", err) + } + case <-time.After(2 * time.Second): + t.Fatal("timeout in handler") + } +} + +// readBodyHandler returns an http Handler func that reads len(want) +// bytes from r.Body and fails t if the contents read were not +// the value of want. +func readBodyHandler(t *testing.T, want string) func(w http.ResponseWriter, r *http.Request) { + return func(w http.ResponseWriter, r *http.Request) { + buf := make([]byte, len(want)) + _, err := io.ReadFull(r.Body, buf) + if err != nil { + t.Error(err) + return + } + if string(buf) != want { + t.Errorf("read %q; want %q", buf, want) + } + } +} + +// TestServerWithCurl currently fails, hence the LenientCipherSuites test. See: +// https://github.com/tatsuhiro-t/nghttp2/issues/140 & +// http://sourceforge.net/p/curl/bugs/1472/ +func TestServerWithCurl(t *testing.T) { testServerWithCurl(t, false) } +func TestServerWithCurl_LenientCipherSuites(t *testing.T) { testServerWithCurl(t, true) } + +func testServerWithCurl(t *testing.T, permitProhibitedCipherSuites bool) { + if runtime.GOOS != "linux" { + t.Skip("skipping Docker test when not on Linux; requires --net which won't work with boot2docker anyway") + } + if testing.Short() { + t.Skip("skipping curl test in short mode") + } + requireCurl(t) + var gotConn int32 + testHookOnConn = func() { atomic.StoreInt32(&gotConn, 1) } + + const msg = "Hello from curl!\n" + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Foo", "Bar") + w.Header().Set("Client-Proto", r.Proto) + io.WriteString(w, msg) + })) + ConfigureServer(ts.Config, &Server{ + PermitProhibitedCipherSuites: permitProhibitedCipherSuites, + }) + ts.TLS = ts.Config.TLSConfig // the httptest.Server has its own copy of this TLS config + ts.StartTLS() + defer ts.Close() + + t.Logf("Running test server for curl to hit at: %s", ts.URL) + container := curl(t, "--silent", "--http2", "--insecure", "-v", ts.URL) + defer kill(container) + resc := make(chan interface{}, 1) + go func() { + res, err := dockerLogs(container) + if err != nil { + resc <- err + } else { + resc <- res + } + }() + select { + case res := <-resc: + if err, ok := res.(error); ok { + t.Fatal(err) + } + body := string(res.([]byte)) + // Search for both "key: value" and "key:value", since curl changed their format + // Our Dockerfile contains the latest version (no space), but just in case people + // didn't rebuild, check both. + if !strings.Contains(body, "foo: Bar") && !strings.Contains(body, "foo:Bar") { + t.Errorf("didn't see foo: Bar header") + t.Logf("Got: %s", body) + } + if !strings.Contains(body, "client-proto: HTTP/2") && !strings.Contains(body, "client-proto:HTTP/2") { + t.Errorf("didn't see client-proto: HTTP/2 header") + t.Logf("Got: %s", res) + } + if !strings.Contains(string(res.([]byte)), msg) { + t.Errorf("didn't see %q content", msg) + t.Logf("Got: %s", res) + } + case <-time.After(3 * time.Second): + t.Errorf("timeout waiting for curl") + } + + if atomic.LoadInt32(&gotConn) == 0 { + t.Error("never saw an http2 connection") + } +} + +var doh2load = flag.Bool("h2load", false, "Run h2load test") + +func TestServerWithH2Load(t *testing.T) { + if !*doh2load { + t.Skip("Skipping without --h2load flag.") + } + if runtime.GOOS != "linux" { + t.Skip("skipping Docker test when not on Linux; requires --net which won't work with boot2docker anyway") + } + requireH2load(t) + + msg := strings.Repeat("Hello, h2load!\n", 5000) + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, msg) + w.(http.Flusher).Flush() + io.WriteString(w, msg) + })) + ts.StartTLS() + defer ts.Close() + + cmd := exec.Command("docker", "run", "--net=host", "--entrypoint=/usr/local/bin/h2load", "gohttp2/curl", + "-n100000", "-c100", "-m100", ts.URL) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + t.Fatal(err) + } +} + +// Issue 12843 +func TestServerDoS_MaxHeaderListSize(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {}) + defer st.Close() + + // shake hands + frameSize := defaultMaxReadFrameSize + var advHeaderListSize *uint32 + st.greetAndCheckSettings(func(s Setting) error { + switch s.ID { + case SettingMaxFrameSize: + if s.Val < minMaxFrameSize { + frameSize = minMaxFrameSize + } else if s.Val > maxFrameSize { + frameSize = maxFrameSize + } else { + frameSize = int(s.Val) + } + case SettingMaxHeaderListSize: + advHeaderListSize = &s.Val + } + return nil + }) + + if advHeaderListSize == nil { + t.Errorf("server didn't advertise a max header list size") + } else if *advHeaderListSize == 0 { + t.Errorf("server advertised a max header list size of 0") + } + + st.encodeHeaderField(":method", "GET") + st.encodeHeaderField(":path", "/") + st.encodeHeaderField(":scheme", "https") + cookie := strings.Repeat("*", 4058) + st.encodeHeaderField("cookie", cookie) + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.headerBuf.Bytes(), + EndStream: true, + EndHeaders: false, + }) + + // Capture the short encoding of a duplicate ~4K cookie, now + // that we've already sent it once. + st.headerBuf.Reset() + st.encodeHeaderField("cookie", cookie) + + // Now send 1MB of it. + const size = 1 << 20 + b := bytes.Repeat(st.headerBuf.Bytes(), size/st.headerBuf.Len()) + for len(b) > 0 { + chunk := b + if len(chunk) > frameSize { + chunk = chunk[:frameSize] + } + b = b[len(chunk):] + st.fr.WriteContinuation(1, len(b) == 0, chunk) + } + + h := st.wantHeaders() + if !h.HeadersEnded() { + t.Fatalf("Got HEADERS without END_HEADERS set: %v", h) + } + headers := st.decodeHeader(h.HeaderBlockFragment()) + want := [][2]string{ + {":status", "431"}, + {"content-type", "text/html; charset=utf-8"}, + {"content-length", "63"}, + } + if !reflect.DeepEqual(headers, want) { + t.Errorf("Headers mismatch.\n got: %q\nwant: %q\n", headers, want) + } +} + +func TestCompressionErrorOnWrite(t *testing.T) { + const maxStrLen = 8 << 10 + var serverConfig *http.Server + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + // No response body. + }, func(ts *httptest.Server) { + serverConfig = ts.Config + serverConfig.MaxHeaderBytes = maxStrLen + }) + st.addLogFilter("connection error: COMPRESSION_ERROR") + defer st.Close() + st.greet() + + maxAllowed := st.sc.framer.maxHeaderStringLen() + + // Crank this up, now that we have a conn connected with the + // hpack.Decoder's max string length set has been initialized + // from the earlier low ~8K value. We want this higher so don't + // hit the max header list size. We only want to test hitting + // the max string size. + serverConfig.MaxHeaderBytes = 1 << 20 + + // First a request with a header that's exactly the max allowed size + // for the hpack compression. It's still too long for the header list + // size, so we'll get the 431 error, but that keeps the compression + // context still valid. + hbf := st.encodeHeader("foo", strings.Repeat("a", maxAllowed)) + + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: hbf, + EndStream: true, + EndHeaders: true, + }) + h := st.wantHeaders() + if !h.HeadersEnded() { + t.Fatalf("Got HEADERS without END_HEADERS set: %v", h) + } + headers := st.decodeHeader(h.HeaderBlockFragment()) + want := [][2]string{ + {":status", "431"}, + {"content-type", "text/html; charset=utf-8"}, + {"content-length", "63"}, + } + if !reflect.DeepEqual(headers, want) { + t.Errorf("Headers mismatch.\n got: %q\nwant: %q\n", headers, want) + } + df := st.wantData() + if !strings.Contains(string(df.Data()), "HTTP Error 431") { + t.Errorf("Unexpected data body: %q", df.Data()) + } + if !df.StreamEnded() { + t.Fatalf("expect data stream end") + } + + // And now send one that's just one byte too big. + hbf = st.encodeHeader("bar", strings.Repeat("b", maxAllowed+1)) + st.writeHeaders(HeadersFrameParam{ + StreamID: 3, + BlockFragment: hbf, + EndStream: true, + EndHeaders: true, + }) + ga := st.wantGoAway() + if ga.ErrCode != ErrCodeCompression { + t.Errorf("GOAWAY err = %v; want ErrCodeCompression", ga.ErrCode) + } +} + +func TestCompressionErrorOnClose(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + // No response body. + }) + st.addLogFilter("connection error: COMPRESSION_ERROR") + defer st.Close() + st.greet() + + hbf := st.encodeHeader("foo", "bar") + hbf = hbf[:len(hbf)-1] // truncate one byte from the end, so hpack.Decoder.Close fails. + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: hbf, + EndStream: true, + EndHeaders: true, + }) + ga := st.wantGoAway() + if ga.ErrCode != ErrCodeCompression { + t.Errorf("GOAWAY err = %v; want ErrCodeCompression", ga.ErrCode) + } +} + +// test that a server handler can read trailers from a client +func TestServerReadsTrailers(t *testing.T) { + const testBody = "some test body" + writeReq := func(st *serverTester) { + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader("trailer", "Foo, Bar", "trailer", "Baz"), + EndStream: false, + EndHeaders: true, + }) + st.writeData(1, false, []byte(testBody)) + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeaderRaw( + "foo", "foov", + "bar", "barv", + "baz", "bazv", + "surprise", "wasn't declared; shouldn't show up", + ), + EndStream: true, + EndHeaders: true, + }) + } + checkReq := func(r *http.Request) { + wantTrailer := http.Header{ + "Foo": nil, + "Bar": nil, + "Baz": nil, + } + if !reflect.DeepEqual(r.Trailer, wantTrailer) { + t.Errorf("initial Trailer = %v; want %v", r.Trailer, wantTrailer) + } + slurp, err := ioutil.ReadAll(r.Body) + if string(slurp) != testBody { + t.Errorf("read body %q; want %q", slurp, testBody) + } + if err != nil { + t.Fatalf("Body slurp: %v", err) + } + wantTrailerAfter := http.Header{ + "Foo": {"foov"}, + "Bar": {"barv"}, + "Baz": {"bazv"}, + } + if !reflect.DeepEqual(r.Trailer, wantTrailerAfter) { + t.Errorf("final Trailer = %v; want %v", r.Trailer, wantTrailerAfter) + } + } + testServerRequest(t, writeReq, checkReq) +} + +// test that a server handler can send trailers +func TestServerWritesTrailers_WithFlush(t *testing.T) { testServerWritesTrailers(t, true) } +func TestServerWritesTrailers_WithoutFlush(t *testing.T) { testServerWritesTrailers(t, false) } + +func testServerWritesTrailers(t *testing.T, withFlush bool) { + // See https://httpwg.github.io/specs/rfc7540.html#rfc.section.8.1.3 + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.Header().Set("Trailer", "Server-Trailer-A, Server-Trailer-B") + w.Header().Add("Trailer", "Server-Trailer-C") + w.Header().Add("Trailer", "Transfer-Encoding, Content-Length, Trailer") // filtered + + // Regular headers: + w.Header().Set("Foo", "Bar") + w.Header().Set("Content-Length", "5") // len("Hello") + + io.WriteString(w, "Hello") + if withFlush { + w.(http.Flusher).Flush() + } + w.Header().Set("Server-Trailer-A", "valuea") + w.Header().Set("Server-Trailer-C", "valuec") // skipping B + // After a flush, random keys like Server-Surprise shouldn't show up: + w.Header().Set("Server-Surpise", "surprise! this isn't predeclared!") + // But we do permit promoting keys to trailers after a + // flush if they start with the magic + // otherwise-invalid "Trailer:" prefix: + w.Header().Set("Trailer:Post-Header-Trailer", "hi1") + w.Header().Set("Trailer:post-header-trailer2", "hi2") + w.Header().Set("Trailer:Range", "invalid") + w.Header().Set("Trailer:Foo\x01Bogus", "invalid") + w.Header().Set("Transfer-Encoding", "should not be included; Forbidden by RFC 2616 14.40") + w.Header().Set("Content-Length", "should not be included; Forbidden by RFC 2616 14.40") + w.Header().Set("Trailer", "should not be included; Forbidden by RFC 2616 14.40") + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if hf.StreamEnded() { + t.Fatal("response HEADERS had END_STREAM") + } + if !hf.HeadersEnded() { + t.Fatal("response HEADERS didn't have END_HEADERS") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"foo", "Bar"}, + {"trailer", "Server-Trailer-A, Server-Trailer-B"}, + {"trailer", "Server-Trailer-C"}, + {"trailer", "Transfer-Encoding, Content-Length, Trailer"}, + {"content-type", "text/plain; charset=utf-8"}, + {"content-length", "5"}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Header mismatch.\n got: %v\nwant: %v", goth, wanth) + } + df := st.wantData() + if string(df.Data()) != "Hello" { + t.Fatalf("Client read %q; want Hello", df.Data()) + } + if df.StreamEnded() { + t.Fatalf("data frame had STREAM_ENDED") + } + tf := st.wantHeaders() // for the trailers + if !tf.StreamEnded() { + t.Fatalf("trailers HEADERS lacked END_STREAM") + } + if !tf.HeadersEnded() { + t.Fatalf("trailers HEADERS lacked END_HEADERS") + } + wanth = [][2]string{ + {"post-header-trailer", "hi1"}, + {"post-header-trailer2", "hi2"}, + {"server-trailer-a", "valuea"}, + {"server-trailer-c", "valuec"}, + } + goth = st.decodeHeader(tf.HeaderBlockFragment()) + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Header mismatch.\n got: %v\nwant: %v", goth, wanth) + } + }) +} + +// validate transmitted header field names & values +// golang.org/issue/14048 +func TestServerDoesntWriteInvalidHeaders(t *testing.T) { + testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error { + w.Header().Add("OK1", "x") + w.Header().Add("Bad:Colon", "x") // colon (non-token byte) in key + w.Header().Add("Bad1\x00", "x") // null in key + w.Header().Add("Bad2", "x\x00y") // null in value + return nil + }, func(st *serverTester) { + getSlash(st) + hf := st.wantHeaders() + if !hf.StreamEnded() { + t.Error("response HEADERS lacked END_STREAM") + } + if !hf.HeadersEnded() { + t.Fatal("response HEADERS didn't have END_HEADERS") + } + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"ok1", "x"}, + {"content-type", "text/plain; charset=utf-8"}, + {"content-length", "0"}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Header mismatch.\n got: %v\nwant: %v", goth, wanth) + } + }) +} + +func BenchmarkServerGets(b *testing.B) { + defer disableGoroutineTracking()() + b.ReportAllocs() + + const msg = "Hello, world" + st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, msg) + }) + defer st.Close() + st.greet() + + // Give the server quota to reply. (plus it has the the 64KB) + if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil { + b.Fatal(err) + } + + for i := 0; i < b.N; i++ { + id := 1 + uint32(i)*2 + st.writeHeaders(HeadersFrameParam{ + StreamID: id, + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: true, + }) + st.wantHeaders() + df := st.wantData() + if !df.StreamEnded() { + b.Fatalf("DATA didn't have END_STREAM; got %v", df) + } + } +} + +func BenchmarkServerPosts(b *testing.B) { + defer disableGoroutineTracking()() + b.ReportAllocs() + + const msg = "Hello, world" + st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) { + // Consume the (empty) body from th peer before replying, otherwise + // the server will sometimes (depending on scheduling) send the peer a + // a RST_STREAM with the CANCEL error code. + if n, err := io.Copy(ioutil.Discard, r.Body); n != 0 || err != nil { + b.Errorf("Copy error; got %v, %v; want 0, nil", n, err) + } + io.WriteString(w, msg) + }) + defer st.Close() + st.greet() + + // Give the server quota to reply. (plus it has the the 64KB) + if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil { + b.Fatal(err) + } + + for i := 0; i < b.N; i++ { + id := 1 + uint32(i)*2 + st.writeHeaders(HeadersFrameParam{ + StreamID: id, + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, + EndHeaders: true, + }) + st.writeData(id, true, nil) + st.wantHeaders() + df := st.wantData() + if !df.StreamEnded() { + b.Fatalf("DATA didn't have END_STREAM; got %v", df) + } + } +} + +// Send a stream of messages from server to client in separate data frames. +// Brings up performance issues seen in long streams. +// Created to show problem in go issue #18502 +func BenchmarkServerToClientStreamDefaultOptions(b *testing.B) { + benchmarkServerToClientStream(b) +} + +// Justification for Change-Id: Iad93420ef6c3918f54249d867098f1dadfa324d8 +// Expect to see memory/alloc reduction by opting in to Frame reuse with the Framer. +func BenchmarkServerToClientStreamReuseFrames(b *testing.B) { + benchmarkServerToClientStream(b, optFramerReuseFrames) +} + +func benchmarkServerToClientStream(b *testing.B, newServerOpts ...interface{}) { + defer disableGoroutineTracking()() + b.ReportAllocs() + const msgLen = 1 + // default window size + const windowSize = 1<<16 - 1 + + // next message to send from the server and for the client to expect + nextMsg := func(i int) []byte { + msg := make([]byte, msgLen) + msg[0] = byte(i) + if len(msg) != msgLen { + panic("invalid test setup msg length") + } + return msg + } + + st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) { + // Consume the (empty) body from th peer before replying, otherwise + // the server will sometimes (depending on scheduling) send the peer a + // a RST_STREAM with the CANCEL error code. + if n, err := io.Copy(ioutil.Discard, r.Body); n != 0 || err != nil { + b.Errorf("Copy error; got %v, %v; want 0, nil", n, err) + } + for i := 0; i < b.N; i += 1 { + w.Write(nextMsg(i)) + w.(http.Flusher).Flush() + } + }, newServerOpts...) + defer st.Close() + st.greet() + + const id = uint32(1) + + st.writeHeaders(HeadersFrameParam{ + StreamID: id, + BlockFragment: st.encodeHeader(":method", "POST"), + EndStream: false, + EndHeaders: true, + }) + + st.writeData(id, true, nil) + st.wantHeaders() + + var pendingWindowUpdate = uint32(0) + + for i := 0; i < b.N; i += 1 { + expected := nextMsg(i) + df := st.wantData() + if bytes.Compare(expected, df.data) != 0 { + b.Fatalf("Bad message received; want %v; got %v", expected, df.data) + } + // try to send infrequent but large window updates so they don't overwhelm the test + pendingWindowUpdate += uint32(len(df.data)) + if pendingWindowUpdate >= windowSize/2 { + if err := st.fr.WriteWindowUpdate(0, pendingWindowUpdate); err != nil { + b.Fatal(err) + } + if err := st.fr.WriteWindowUpdate(id, pendingWindowUpdate); err != nil { + b.Fatal(err) + } + pendingWindowUpdate = 0 + } + } + df := st.wantData() + if !df.StreamEnded() { + b.Fatalf("DATA didn't have END_STREAM; got %v", df) + } +} + +// go-fuzz bug, originally reported at https://github.com/bradfitz/http2/issues/53 +// Verify we don't hang. +func TestIssue53(t *testing.T) { + const data = "PRI * HTTP/2.0\r\n\r\nSM" + + "\r\n\r\n\x00\x00\x00\x01\ainfinfin\ad" + s := &http.Server{ + ErrorLog: log.New(io.MultiWriter(stderrv(), twriter{t: t}), "", log.LstdFlags), + Handler: http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + w.Write([]byte("hello")) + }), + } + s2 := &Server{ + MaxReadFrameSize: 1 << 16, + PermitProhibitedCipherSuites: true, + } + c := &issue53Conn{[]byte(data), false, false} + s2.ServeConn(c, &ServeConnOpts{BaseConfig: s}) + if !c.closed { + t.Fatal("connection is not closed") + } +} + +type issue53Conn struct { + data []byte + closed bool + written bool +} + +func (c *issue53Conn) Read(b []byte) (n int, err error) { + if len(c.data) == 0 { + return 0, io.EOF + } + n = copy(b, c.data) + c.data = c.data[n:] + return +} + +func (c *issue53Conn) Write(b []byte) (n int, err error) { + c.written = true + return len(b), nil +} + +func (c *issue53Conn) Close() error { + c.closed = true + return nil +} + +func (c *issue53Conn) LocalAddr() net.Addr { + return &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 49706} +} +func (c *issue53Conn) RemoteAddr() net.Addr { + return &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 49706} +} +func (c *issue53Conn) SetDeadline(t time.Time) error { return nil } +func (c *issue53Conn) SetReadDeadline(t time.Time) error { return nil } +func (c *issue53Conn) SetWriteDeadline(t time.Time) error { return nil } + +// golang.org/issue/12895 +func TestConfigureServer(t *testing.T) { + tests := []struct { + name string + tlsConfig *tls.Config + wantErr string + }{ + { + name: "empty server", + }, + { + name: "just the required cipher suite", + tlsConfig: &tls.Config{ + CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256}, + }, + }, + { + name: "missing required cipher suite", + tlsConfig: &tls.Config{ + CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384}, + }, + wantErr: "is missing HTTP/2-required TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + }, + { + name: "required after bad", + tlsConfig: &tls.Config{ + CipherSuites: []uint16{tls.TLS_RSA_WITH_RC4_128_SHA, tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256}, + }, + wantErr: "contains an HTTP/2-approved cipher suite (0xc02f), but it comes after", + }, + { + name: "bad after required", + tlsConfig: &tls.Config{ + CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, tls.TLS_RSA_WITH_RC4_128_SHA}, + }, + }, + } + for _, tt := range tests { + srv := &http.Server{TLSConfig: tt.tlsConfig} + err := ConfigureServer(srv, nil) + if (err != nil) != (tt.wantErr != "") { + if tt.wantErr != "" { + t.Errorf("%s: success, but want error", tt.name) + } else { + t.Errorf("%s: unexpected error: %v", tt.name, err) + } + } + if err != nil && tt.wantErr != "" && !strings.Contains(err.Error(), tt.wantErr) { + t.Errorf("%s: err = %v; want substring %q", tt.name, err, tt.wantErr) + } + if err == nil && !srv.TLSConfig.PreferServerCipherSuites { + t.Errorf("%s: PreferServerCipherSuite is false; want true", tt.name) + } + } +} + +func TestServerRejectHeadWithBody(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + // No response body. + }) + defer st.Close() + st.greet() + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":method", "HEAD"), + EndStream: false, // what we're testing, a bogus HEAD request with body + EndHeaders: true, + }) + st.wantRSTStream(1, ErrCodeProtocol) +} + +func TestServerNoAutoContentLengthOnHead(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + // No response body. (or smaller than one frame) + }) + defer st.Close() + st.greet() + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, // clients send odd numbers + BlockFragment: st.encodeHeader(":method", "HEAD"), + EndStream: true, + EndHeaders: true, + }) + h := st.wantHeaders() + headers := st.decodeHeader(h.HeaderBlockFragment()) + want := [][2]string{ + {":status", "200"}, + {"content-type", "text/plain; charset=utf-8"}, + } + if !reflect.DeepEqual(headers, want) { + t.Errorf("Headers mismatch.\n got: %q\nwant: %q\n", headers, want) + } +} + +// golang.org/issue/13495 +func TestServerNoDuplicateContentType(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + w.Header()["Content-Type"] = []string{""} + fmt.Fprintf(w, "hi") + }) + defer st.Close() + st.greet() + st.writeHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: st.encodeHeader(), + EndStream: true, + EndHeaders: true, + }) + h := st.wantHeaders() + headers := st.decodeHeader(h.HeaderBlockFragment()) + want := [][2]string{ + {":status", "200"}, + {"content-type", ""}, + {"content-length", "41"}, + } + if !reflect.DeepEqual(headers, want) { + t.Errorf("Headers mismatch.\n got: %q\nwant: %q\n", headers, want) + } +} + +func disableGoroutineTracking() (restore func()) { + old := DebugGoroutines + DebugGoroutines = false + return func() { DebugGoroutines = old } +} + +func BenchmarkServer_GetRequest(b *testing.B) { + defer disableGoroutineTracking()() + b.ReportAllocs() + const msg = "Hello, world." + st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) { + n, err := io.Copy(ioutil.Discard, r.Body) + if err != nil || n > 0 { + b.Errorf("Read %d bytes, error %v; want 0 bytes.", n, err) + } + io.WriteString(w, msg) + }) + defer st.Close() + + st.greet() + // Give the server quota to reply. (plus it has the the 64KB) + if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil { + b.Fatal(err) + } + hbf := st.encodeHeader(":method", "GET") + for i := 0; i < b.N; i++ { + streamID := uint32(1 + 2*i) + st.writeHeaders(HeadersFrameParam{ + StreamID: streamID, + BlockFragment: hbf, + EndStream: true, + EndHeaders: true, + }) + st.wantHeaders() + st.wantData() + } +} + +func BenchmarkServer_PostRequest(b *testing.B) { + defer disableGoroutineTracking()() + b.ReportAllocs() + const msg = "Hello, world." + st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) { + n, err := io.Copy(ioutil.Discard, r.Body) + if err != nil || n > 0 { + b.Errorf("Read %d bytes, error %v; want 0 bytes.", n, err) + } + io.WriteString(w, msg) + }) + defer st.Close() + st.greet() + // Give the server quota to reply. (plus it has the the 64KB) + if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil { + b.Fatal(err) + } + hbf := st.encodeHeader(":method", "POST") + for i := 0; i < b.N; i++ { + streamID := uint32(1 + 2*i) + st.writeHeaders(HeadersFrameParam{ + StreamID: streamID, + BlockFragment: hbf, + EndStream: false, + EndHeaders: true, + }) + st.writeData(streamID, true, nil) + st.wantHeaders() + st.wantData() + } +} + +type connStateConn struct { + net.Conn + cs tls.ConnectionState +} + +func (c connStateConn) ConnectionState() tls.ConnectionState { return c.cs } + +// golang.org/issue/12737 -- handle any net.Conn, not just +// *tls.Conn. +func TestServerHandleCustomConn(t *testing.T) { + var s Server + c1, c2 := net.Pipe() + clientDone := make(chan struct{}) + handlerDone := make(chan struct{}) + var req *http.Request + go func() { + defer close(clientDone) + defer c2.Close() + fr := NewFramer(c2, c2) + io.WriteString(c2, ClientPreface) + fr.WriteSettings() + fr.WriteSettingsAck() + f, err := fr.ReadFrame() + if err != nil { + t.Error(err) + return + } + if sf, ok := f.(*SettingsFrame); !ok || sf.IsAck() { + t.Errorf("Got %v; want non-ACK SettingsFrame", summarizeFrame(f)) + return + } + f, err = fr.ReadFrame() + if err != nil { + t.Error(err) + return + } + if sf, ok := f.(*SettingsFrame); !ok || !sf.IsAck() { + t.Errorf("Got %v; want ACK SettingsFrame", summarizeFrame(f)) + return + } + var henc hpackEncoder + fr.WriteHeaders(HeadersFrameParam{ + StreamID: 1, + BlockFragment: henc.encodeHeaderRaw(t, ":method", "GET", ":path", "/", ":scheme", "https", ":authority", "foo.com"), + EndStream: true, + EndHeaders: true, + }) + go io.Copy(ioutil.Discard, c2) + <-handlerDone + }() + const testString = "my custom ConnectionState" + fakeConnState := tls.ConnectionState{ + ServerName: testString, + Version: tls.VersionTLS12, + } + go s.ServeConn(connStateConn{c1, fakeConnState}, &ServeConnOpts{ + BaseConfig: &http.Server{ + Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer close(handlerDone) + req = r + }), + }}) + select { + case <-clientDone: + case <-time.After(5 * time.Second): + t.Fatal("timeout waiting for handler") + } + if req.TLS == nil { + t.Fatalf("Request.TLS is nil. Got: %#v", req) + } + if req.TLS.ServerName != testString { + t.Fatalf("Request.TLS = %+v; want ServerName of %q", req.TLS, testString) + } +} + +// golang.org/issue/14214 +func TestServer_Rejects_ConnHeaders(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + t.Error("should not get to Handler") + }) + defer st.Close() + st.greet() + st.bodylessReq1("connection", "foo") + hf := st.wantHeaders() + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "400"}, + {"content-type", "text/plain; charset=utf-8"}, + {"x-content-type-options", "nosniff"}, + {"content-length", "51"}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } +} + +type hpackEncoder struct { + enc *hpack.Encoder + buf bytes.Buffer +} + +func (he *hpackEncoder) encodeHeaderRaw(t *testing.T, headers ...string) []byte { + if len(headers)%2 == 1 { + panic("odd number of kv args") + } + he.buf.Reset() + if he.enc == nil { + he.enc = hpack.NewEncoder(&he.buf) + } + for len(headers) > 0 { + k, v := headers[0], headers[1] + err := he.enc.WriteField(hpack.HeaderField{Name: k, Value: v}) + if err != nil { + t.Fatalf("HPACK encoding error for %q/%q: %v", k, v, err) + } + headers = headers[2:] + } + return he.buf.Bytes() +} + +func TestCheckValidHTTP2Request(t *testing.T) { + tests := []struct { + h http.Header + want error + }{ + { + h: http.Header{"Te": {"trailers"}}, + want: nil, + }, + { + h: http.Header{"Te": {"trailers", "bogus"}}, + want: errors.New(`request header "TE" may only be "trailers" in HTTP/2`), + }, + { + h: http.Header{"Foo": {""}}, + want: nil, + }, + { + h: http.Header{"Connection": {""}}, + want: errors.New(`request header "Connection" is not valid in HTTP/2`), + }, + { + h: http.Header{"Proxy-Connection": {""}}, + want: errors.New(`request header "Proxy-Connection" is not valid in HTTP/2`), + }, + { + h: http.Header{"Keep-Alive": {""}}, + want: errors.New(`request header "Keep-Alive" is not valid in HTTP/2`), + }, + { + h: http.Header{"Upgrade": {""}}, + want: errors.New(`request header "Upgrade" is not valid in HTTP/2`), + }, + } + for i, tt := range tests { + got := checkValidHTTP2RequestHeaders(tt.h) + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("%d. checkValidHTTP2Request = %v; want %v", i, got, tt.want) + } + } +} + +// golang.org/issue/14030 +func TestExpect100ContinueAfterHandlerWrites(t *testing.T) { + const msg = "Hello" + const msg2 = "World" + + doRead := make(chan bool, 1) + defer close(doRead) // fallback cleanup + + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, msg) + w.(http.Flusher).Flush() + + // Do a read, which might force a 100-continue status to be sent. + <-doRead + r.Body.Read(make([]byte, 10)) + + io.WriteString(w, msg2) + + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + req, _ := http.NewRequest("POST", st.ts.URL, io.LimitReader(neverEnding('A'), 2<<20)) + req.Header.Set("Expect", "100-continue") + + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + + buf := make([]byte, len(msg)) + if _, err := io.ReadFull(res.Body, buf); err != nil { + t.Fatal(err) + } + if string(buf) != msg { + t.Fatalf("msg = %q; want %q", buf, msg) + } + + doRead <- true + + if _, err := io.ReadFull(res.Body, buf); err != nil { + t.Fatal(err) + } + if string(buf) != msg2 { + t.Fatalf("second msg = %q; want %q", buf, msg2) + } +} + +type funcReader func([]byte) (n int, err error) + +func (f funcReader) Read(p []byte) (n int, err error) { return f(p) } + +// golang.org/issue/16481 -- return flow control when streams close with unread data. +// (The Server version of the bug. See also TestUnreadFlowControlReturned_Transport) +func TestUnreadFlowControlReturned_Server(t *testing.T) { + unblock := make(chan bool, 1) + defer close(unblock) + + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + // Don't read the 16KB request body. Wait until the client's + // done sending it and then return. This should cause the Server + // to then return those 16KB of flow control to the client. + <-unblock + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + // This previously hung on the 4th iteration. + for i := 0; i < 6; i++ { + body := io.MultiReader( + io.LimitReader(neverEnding('A'), 16<<10), + funcReader(func([]byte) (n int, err error) { + unblock <- true + return 0, io.EOF + }), + ) + req, _ := http.NewRequest("POST", st.ts.URL, body) + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + res.Body.Close() + } + +} + +func TestServerIdleTimeout(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + }, func(h2s *Server) { + h2s.IdleTimeout = 500 * time.Millisecond + }) + defer st.Close() + + st.greet() + ga := st.wantGoAway() + if ga.ErrCode != ErrCodeNo { + t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode) + } +} + +func TestServerIdleTimeout_AfterRequest(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + const timeout = 250 * time.Millisecond + + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + time.Sleep(timeout * 2) + }, func(h2s *Server) { + h2s.IdleTimeout = timeout + }) + defer st.Close() + + st.greet() + + // Send a request which takes twice the timeout. Verifies the + // idle timeout doesn't fire while we're in a request: + st.bodylessReq1() + st.wantHeaders() + + // But the idle timeout should be rearmed after the request + // is done: + ga := st.wantGoAway() + if ga.ErrCode != ErrCodeNo { + t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode) + } +} + +// grpc-go closes the Request.Body currently with a Read. +// Verify that it doesn't race. +// See https://github.com/grpc/grpc-go/pull/938 +func TestRequestBodyReadCloseRace(t *testing.T) { + for i := 0; i < 100; i++ { + body := &requestBody{ + pipe: &pipe{ + b: new(bytes.Buffer), + }, + } + body.pipe.CloseWithError(io.EOF) + + done := make(chan bool, 1) + buf := make([]byte, 10) + go func() { + time.Sleep(1 * time.Millisecond) + body.Close() + done <- true + }() + body.Read(buf) + <-done + } +} + +func TestServerGracefulShutdown(t *testing.T) { + shutdownCh := make(chan struct{}) + defer func() { testh1ServerShutdownChan = nil }() + testh1ServerShutdownChan = func(*http.Server) <-chan struct{} { return shutdownCh } + + var st *serverTester + handlerDone := make(chan struct{}) + st = newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + defer close(handlerDone) + close(shutdownCh) + + ga := st.wantGoAway() + if ga.ErrCode != ErrCodeNo { + t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode) + } + if ga.LastStreamID != 1 { + t.Errorf("GOAWAY LastStreamID = %v; want 1", ga.LastStreamID) + } + + w.Header().Set("x-foo", "bar") + }) + defer st.Close() + + st.greet() + st.bodylessReq1() + + <-handlerDone + hf := st.wantHeaders() + goth := st.decodeHeader(hf.HeaderBlockFragment()) + wanth := [][2]string{ + {":status", "200"}, + {"x-foo", "bar"}, + {"content-type", "text/plain; charset=utf-8"}, + {"content-length", "0"}, + } + if !reflect.DeepEqual(goth, wanth) { + t.Errorf("Got headers %v; want %v", goth, wanth) + } + + n, err := st.cc.Read([]byte{0}) + if n != 0 || err == nil { + t.Errorf("Read = %v, %v; want 0, non-nil", n, err) + } +} diff --git a/vendor/golang.org/x/net/http2/testdata/draft-ietf-httpbis-http2.xml b/vendor/golang.org/x/net/http2/testdata/draft-ietf-httpbis-http2.xml new file mode 100644 index 0000000..31a84be --- /dev/null +++ b/vendor/golang.org/x/net/http2/testdata/draft-ietf-httpbis-http2.xml @@ -0,0 +1,5021 @@ + + + + + + + + + + + + + + + + + + + Hypertext Transfer Protocol version 2 + + + Twist +
    + mbelshe@chromium.org +
    +
    + + + Google, Inc +
    + fenix@google.com +
    +
    + + + Mozilla +
    + + 331 E Evelyn Street + Mountain View + CA + 94041 + US + + martin.thomson@gmail.com +
    +
    + + + Applications + HTTPbis + HTTP + SPDY + Web + + + + This specification describes an optimized expression of the semantics of the Hypertext + Transfer Protocol (HTTP). HTTP/2 enables a more efficient use of network resources and a + reduced perception of latency by introducing header field compression and allowing multiple + concurrent messages on the same connection. It also introduces unsolicited push of + representations from servers to clients. + + + This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. + HTTP's existing semantics remain unchanged. + + + + + + Discussion of this draft takes place on the HTTPBIS working group mailing list + (ietf-http-wg@w3.org), which is archived at . + + + Working Group information can be found at ; that specific to HTTP/2 are at . + + + The changes in this draft are summarized in . + + + +
    + + +
    + + + The Hypertext Transfer Protocol (HTTP) is a wildly successful protocol. However, the + HTTP/1.1 message format () has + several characteristics that have a negative overall effect on application performance + today. + + + In particular, HTTP/1.0 allowed only one request to be outstanding at a time on a given + TCP connection. HTTP/1.1 added request pipelining, but this only partially addressed + request concurrency and still suffers from head-of-line blocking. Therefore, HTTP/1.1 + clients that need to make many requests typically use multiple connections to a server in + order to achieve concurrency and thereby reduce latency. + + + Furthermore, HTTP header fields are often repetitive and verbose, causing unnecessary + network traffic, as well as causing the initial TCP congestion + window to quickly fill. This can result in excessive latency when multiple requests are + made on a new TCP connection. + + + HTTP/2 addresses these issues by defining an optimized mapping of HTTP's semantics to an + underlying connection. Specifically, it allows interleaving of request and response + messages on the same connection and uses an efficient coding for HTTP header fields. It + also allows prioritization of requests, letting more important requests complete more + quickly, further improving performance. + + + The resulting protocol is more friendly to the network, because fewer TCP connections can + be used in comparison to HTTP/1.x. This means less competition with other flows, and + longer-lived connections, which in turn leads to better utilization of available network + capacity. + + + Finally, HTTP/2 also enables more efficient processing of messages through use of binary + message framing. + +
    + +
    + + HTTP/2 provides an optimized transport for HTTP semantics. HTTP/2 supports all of the core + features of HTTP/1.1, but aims to be more efficient in several ways. + + + The basic protocol unit in HTTP/2 is a frame. Each frame + type serves a different purpose. For example, HEADERS and + DATA frames form the basis of HTTP requests and + responses; other frame types like SETTINGS, + WINDOW_UPDATE, and PUSH_PROMISE are used in support of other + HTTP/2 features. + + + Multiplexing of requests is achieved by having each HTTP request-response exchange + associated with its own stream. Streams are largely + independent of each other, so a blocked or stalled request or response does not prevent + progress on other streams. + + + Flow control and prioritization ensure that it is possible to efficiently use multiplexed + streams. Flow control helps to ensure that only data that + can be used by a receiver is transmitted. Prioritization ensures that limited resources can be directed + to the most important streams first. + + + HTTP/2 adds a new interaction mode, whereby a server can push + responses to a client. Server push allows a server to speculatively send a client + data that the server anticipates the client will need, trading off some network usage + against a potential latency gain. The server does this by synthesizing a request, which it + sends as a PUSH_PROMISE frame. The server is then able to send a response to + the synthetic request on a separate stream. + + + Frames that contain HTTP header fields are compressed. + HTTP requests can be highly redundant, so compression can reduce the size of requests and + responses significantly. + + +
    + + The HTTP/2 specification is split into four parts: + + + Starting HTTP/2 covers how an HTTP/2 connection is + initiated. + + + The framing and streams layers describe the way HTTP/2 frames are + structured and formed into multiplexed streams. + + + Frame and error + definitions include details of the frame and error types used in HTTP/2. + + + HTTP mappings and additional + requirements describe how HTTP semantics are expressed using frames and + streams. + + + + + While some of the frame and stream layer concepts are isolated from HTTP, this + specification does not define a completely generic framing layer. The framing and streams + layers are tailored to the needs of the HTTP protocol and server push. + +
    + +
    + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD + NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as + described in RFC 2119. + + + All numeric values are in network byte order. Values are unsigned unless otherwise + indicated. Literal values are provided in decimal or hexadecimal as appropriate. + Hexadecimal literals are prefixed with 0x to distinguish them + from decimal literals. + + + The following terms are used: + + + The endpoint initiating the HTTP/2 connection. + + + A transport-layer connection between two endpoints. + + + An error that affects the entire HTTP/2 connection. + + + Either the client or server of the connection. + + + The smallest unit of communication within an HTTP/2 connection, consisting of a header + and a variable-length sequence of octets structured according to the frame type. + + + An endpoint. When discussing a particular endpoint, "peer" refers to the endpoint + that is remote to the primary subject of discussion. + + + An endpoint that is receiving frames. + + + An endpoint that is transmitting frames. + + + The endpoint which did not initiate the HTTP/2 connection. + + + A bi-directional flow of frames across a virtual channel within the HTTP/2 connection. + + + An error on the individual HTTP/2 stream. + + + + + Finally, the terms "gateway", "intermediary", "proxy", and "tunnel" are defined + in . + +
    +
    + +
    + + An HTTP/2 connection is an application layer protocol running on top of a TCP connection + (). The client is the TCP connection initiator. + + + HTTP/2 uses the same "http" and "https" URI schemes used by HTTP/1.1. HTTP/2 shares the same + default port numbers: 80 for "http" URIs and 443 for "https" URIs. As a result, + implementations processing requests for target resource URIs like http://example.org/foo or https://example.com/bar are required to first discover whether the + upstream server (the immediate peer to which the client wishes to establish a connection) + supports HTTP/2. + + + + The means by which support for HTTP/2 is determined is different for "http" and "https" + URIs. Discovery for "http" URIs is described in . Discovery + for "https" URIs is described in . + + +
    + + The protocol defined in this document has two identifiers. + + + + The string "h2" identifies the protocol where HTTP/2 uses TLS. This identifier is used in the TLS application layer protocol negotiation extension (ALPN) + field and any place that HTTP/2 over TLS is identified. + + + The "h2" string is serialized into an ALPN protocol identifier as the two octet + sequence: 0x68, 0x32. + + + + + The string "h2c" identifies the protocol where HTTP/2 is run over cleartext TCP. + This identifier is used in the HTTP/1.1 Upgrade header field and any place that + HTTP/2 over TCP is identified. + + + + + + Negotiating "h2" or "h2c" implies the use of the transport, security, framing and message + semantics described in this document. + + + RFC Editor's Note: please remove the remainder of this section prior to the + publication of a final version of this document. + + + Only implementations of the final, published RFC can identify themselves as "h2" or "h2c". + Until such an RFC exists, implementations MUST NOT identify themselves using these + strings. + + + Examples and text throughout the rest of this document use "h2" as a matter of + editorial convenience only. Implementations of draft versions MUST NOT identify using + this string. + + + Implementations of draft versions of the protocol MUST add the string "-" and the + corresponding draft number to the identifier. For example, draft-ietf-httpbis-http2-11 + over TLS is identified using the string "h2-11". + + + Non-compatible experiments that are based on these draft versions MUST append the string + "-" and an experiment name to the identifier. For example, an experimental implementation + of packet mood-based encoding based on draft-ietf-httpbis-http2-09 might identify itself + as "h2-09-emo". Note that any label MUST conform to the "token" syntax defined in + . Experimenters are + encouraged to coordinate their experiments on the ietf-http-wg@w3.org mailing list. + +
    + +
    + + A client that makes a request for an "http" URI without prior knowledge about support for + HTTP/2 uses the HTTP Upgrade mechanism (). The client makes an HTTP/1.1 request that includes an Upgrade + header field identifying HTTP/2 with the "h2c" token. The HTTP/1.1 request MUST include + exactly one HTTP2-Settings header field. + +
    + For example: + + +]]> +
    + + Requests that contain an entity body MUST be sent in their entirety before the client can + send HTTP/2 frames. This means that a large request entity can block the use of the + connection until it is completely sent. + + + If concurrency of an initial request with subsequent requests is important, an OPTIONS + request can be used to perform the upgrade to HTTP/2, at the cost of an additional + round-trip. + + + A server that does not support HTTP/2 can respond to the request as though the Upgrade + header field were absent: + +
    + +HTTP/1.1 200 OK +Content-Length: 243 +Content-Type: text/html + +... + +
    + + A server MUST ignore a "h2" token in an Upgrade header field. Presence of a token with + "h2" implies HTTP/2 over TLS, which is instead negotiated as described in . + + + A server that supports HTTP/2 can accept the upgrade with a 101 (Switching Protocols) + response. After the empty line that terminates the 101 response, the server can begin + sending HTTP/2 frames. These frames MUST include a response to the request that initiated + the Upgrade. + + +
    + + For example: + + +HTTP/1.1 101 Switching Protocols +Connection: Upgrade +Upgrade: h2c + +[ HTTP/2 connection ... + +
    + + The first HTTP/2 frame sent by the server is a SETTINGS frame () as the server connection preface (). Upon receiving the 101 response, the client sends a connection preface, which includes a + SETTINGS frame. + + + The HTTP/1.1 request that is sent prior to upgrade is assigned stream identifier 1 and is + assigned default priority values. Stream 1 is + implicitly half closed from the client toward the server, since the request is completed + as an HTTP/1.1 request. After commencing the HTTP/2 connection, stream 1 is used for the + response. + + +
    + + A request that upgrades from HTTP/1.1 to HTTP/2 MUST include exactly one HTTP2-Settings header field. The HTTP2-Settings header field is a connection-specific header field + that includes parameters that govern the HTTP/2 connection, provided in anticipation of + the server accepting the request to upgrade. + +
    + +
    + + A server MUST NOT upgrade the connection to HTTP/2 if this header field is not present, + or if more than one is present. A server MUST NOT send this header field. + + + + The content of the HTTP2-Settings header field is the + payload of a SETTINGS frame (), encoded as a + base64url string (that is, the URL- and filename-safe Base64 encoding described in , with any trailing '=' characters omitted). The + ABNF production for token68 is + defined in . + + + Since the upgrade is only intended to apply to the immediate connection, a client + sending HTTP2-Settings MUST also send HTTP2-Settings as a connection option in the Connection header field to prevent it from being forwarded + downstream. + + + A server decodes and interprets these values as it would any other + SETTINGS frame. Acknowledgement of the + SETTINGS parameters is not necessary, since a 101 response serves as implicit + acknowledgment. Providing these values in the Upgrade request gives a client an + opportunity to provide parameters prior to receiving any frames from the server. + +
    +
    + +
    + + A client that makes a request to an "https" URI uses TLS + with the application layer protocol negotiation extension. + + + HTTP/2 over TLS uses the "h2" application token. The "h2c" token MUST NOT be sent by a + client or selected by a server. + + + Once TLS negotiation is complete, both the client and the server send a connection preface. + +
    + +
    + + A client can learn that a particular server supports HTTP/2 by other means. For example, + describes a mechanism for advertising this capability. + + + A client MAY immediately send HTTP/2 frames to a server that is known to support HTTP/2, + after the connection preface; a server can + identify such a connection by the presence of the connection preface. This only affects + the establishment of HTTP/2 connections over cleartext TCP; implementations that support + HTTP/2 over TLS MUST use protocol negotiation in TLS. + + + Without additional information, prior support for HTTP/2 is not a strong signal that a + given server will support HTTP/2 for future connections. For example, it is possible for + server configurations to change, for configurations to differ between instances in + clustered servers, or for network conditions to change. + +
    + +
    + + Upon establishment of a TCP connection and determination that HTTP/2 will be used by both + peers, each endpoint MUST send a connection preface as a final confirmation and to + establish the initial SETTINGS parameters for the HTTP/2 connection. The client and + server each send a different connection preface. + + + The client connection preface starts with a sequence of 24 octets, which in hex notation + are: + +
    + +
    + + (the string PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n). This sequence + is followed by a SETTINGS frame (). The + SETTINGS frame MAY be empty. The client sends the client connection + preface immediately upon receipt of a 101 Switching Protocols response (indicating a + successful upgrade), or as the first application data octets of a TLS connection. If + starting an HTTP/2 connection with prior knowledge of server support for the protocol, the + client connection preface is sent upon connection establishment. + + + + + The client connection preface is selected so that a large proportion of HTTP/1.1 or + HTTP/1.0 servers and intermediaries do not attempt to process further frames. Note + that this does not address the concerns raised in . + + + + + The server connection preface consists of a potentially empty SETTINGS + frame () that MUST be the first frame the server sends in the + HTTP/2 connection. + + + The SETTINGS frames received from a peer as part of the connection preface + MUST be acknowledged (see ) after sending the connection + preface. + + + To avoid unnecessary latency, clients are permitted to send additional frames to the + server immediately after sending the client connection preface, without waiting to receive + the server connection preface. It is important to note, however, that the server + connection preface SETTINGS frame might include parameters that necessarily + alter how a client is expected to communicate with the server. Upon receiving the + SETTINGS frame, the client is expected to honor any parameters established. + In some configurations, it is possible for the server to transmit SETTINGS + before the client sends additional frames, providing an opportunity to avoid this issue. + + + Clients and servers MUST treat an invalid connection preface as a connection error of type + PROTOCOL_ERROR. A GOAWAY frame () + MAY be omitted in this case, since an invalid preface indicates that the peer is not using + HTTP/2. + +
    +
    + +
    + + Once the HTTP/2 connection is established, endpoints can begin exchanging frames. + + +
    + + All frames begin with a fixed 9-octet header followed by a variable-length payload. + +
    + +
    + + The fields of the frame header are defined as: + + + + The length of the frame payload expressed as an unsigned 24-bit integer. Values + greater than 214 (16,384) MUST NOT be sent unless the receiver has + set a larger value for SETTINGS_MAX_FRAME_SIZE. + + + The 9 octets of the frame header are not included in this value. + + + + + The 8-bit type of the frame. The frame type determines the format and semantics of + the frame. Implementations MUST ignore and discard any frame that has a type that + is unknown. + + + + + An 8-bit field reserved for frame-type specific boolean flags. + + + Flags are assigned semantics specific to the indicated frame type. Flags that have + no defined semantics for a particular frame type MUST be ignored, and MUST be left + unset (0) when sending. + + + + + A reserved 1-bit field. The semantics of this bit are undefined and the bit MUST + remain unset (0) when sending and MUST be ignored when receiving. + + + + + A 31-bit stream identifier (see ). The value 0 is + reserved for frames that are associated with the connection as a whole as opposed to + an individual stream. + + + + + + The structure and content of the frame payload is dependent entirely on the frame type. + +
    + +
    + + The size of a frame payload is limited by the maximum size that a receiver advertises in + the SETTINGS_MAX_FRAME_SIZE setting. This setting can have any value + between 214 (16,384) and 224-1 (16,777,215) octets, + inclusive. + + + All implementations MUST be capable of receiving and minimally processing frames up to + 214 octets in length, plus the 9 octet frame + header. The size of the frame header is not included when describing frame sizes. + + + Certain frame types, such as PING, impose additional limits + on the amount of payload data allowed. + + + + + If a frame size exceeds any defined limit, or is too small to contain mandatory frame + data, the endpoint MUST send a FRAME_SIZE_ERROR error. A frame size error + in a frame that could alter the state of the entire connection MUST be treated as a connection error; this includes any frame carrying + a header block (that is, HEADERS, + PUSH_PROMISE, and CONTINUATION), SETTINGS, + and any WINDOW_UPDATE frame with a stream identifier of 0. + + + Endpoints are not obligated to use all available space in a frame. Responsiveness can be + improved by using frames that are smaller than the permitted maximum size. Sending large + frames can result in delays in sending time-sensitive frames (such + RST_STREAM, WINDOW_UPDATE, or PRIORITY) + which if blocked by the transmission of a large frame, could affect performance. + +
    + +
    + + Just as in HTTP/1, a header field in HTTP/2 is a name with one or more associated values. + They are used within HTTP request and response messages as well as server push operations + (see ). + + + Header lists are collections of zero or more header fields. When transmitted over a + connection, a header list is serialized into a header block using HTTP Header Compression. The serialized header block is then + divided into one or more octet sequences, called header block fragments, and transmitted + within the payload of HEADERS, PUSH_PROMISE or CONTINUATION frames. + + + The Cookie header field is treated specially by the HTTP + mapping (see ). + + + A receiving endpoint reassembles the header block by concatenating its fragments, then + decompresses the block to reconstruct the header list. + + + A complete header block consists of either: + + + a single HEADERS or PUSH_PROMISE frame, + with the END_HEADERS flag set, or + + + a HEADERS or PUSH_PROMISE frame with the END_HEADERS + flag cleared and one or more CONTINUATION frames, + where the last CONTINUATION frame has the END_HEADERS flag set. + + + + + Header compression is stateful. One compression context and one decompression context is + used for the entire connection. Each header block is processed as a discrete unit. + Header blocks MUST be transmitted as a contiguous sequence of frames, with no interleaved + frames of any other type or from any other stream. The last frame in a sequence of + HEADERS or CONTINUATION frames MUST have the END_HEADERS + flag set. The last frame in a sequence of PUSH_PROMISE or + CONTINUATION frames MUST have the END_HEADERS flag set. This allows a + header block to be logically equivalent to a single frame. + + + Header block fragments can only be sent as the payload of HEADERS, + PUSH_PROMISE or CONTINUATION frames, because these frames + carry data that can modify the compression context maintained by a receiver. An endpoint + receiving HEADERS, PUSH_PROMISE or + CONTINUATION frames MUST reassemble header blocks and perform decompression + even if the frames are to be discarded. A receiver MUST terminate the connection with a + connection error of type + COMPRESSION_ERROR if it does not decompress a header block. + +
    +
    + +
    + + A "stream" is an independent, bi-directional sequence of frames exchanged between the client + and server within an HTTP/2 connection. Streams have several important characteristics: + + + A single HTTP/2 connection can contain multiple concurrently open streams, with either + endpoint interleaving frames from multiple streams. + + + Streams can be established and used unilaterally or shared by either the client or + server. + + + Streams can be closed by either endpoint. + + + The order in which frames are sent on a stream is significant. Recipients process frames + in the order they are received. In particular, the order of HEADERS, + and DATA frames is semantically significant. + + + Streams are identified by an integer. Stream identifiers are assigned to streams by the + endpoint initiating the stream. + + + + +
    + + The lifecycle of a stream is shown in . + + +
    + + | |<-----------' | + | R | closed | R | + `-------------------->| |<--------------------' + +--------+ + + H: HEADERS frame (with implied CONTINUATIONs) + PP: PUSH_PROMISE frame (with implied CONTINUATIONs) + ES: END_STREAM flag + R: RST_STREAM frame +]]> + +
    + + + Note that this diagram shows stream state transitions and the frames and flags that affect + those transitions only. In this regard, CONTINUATION frames do not result + in state transitions; they are effectively part of the HEADERS or + PUSH_PROMISE that they follow. For this purpose, the END_STREAM flag is + processed as a separate event to the frame that bears it; a HEADERS frame + with the END_STREAM flag set can cause two state transitions. + + + Both endpoints have a subjective view of the state of a stream that could be different + when frames are in transit. Endpoints do not coordinate the creation of streams; they are + created unilaterally by either endpoint. The negative consequences of a mismatch in + states are limited to the "closed" state after sending RST_STREAM, where + frames might be received for some time after closing. + + + Streams have the following states: + + + + + + All streams start in the "idle" state. In this state, no frames have been + exchanged. + + + The following transitions are valid from this state: + + + Sending or receiving a HEADERS frame causes the stream to become + "open". The stream identifier is selected as described in . The same HEADERS frame can also + cause a stream to immediately become "half closed". + + + Sending a PUSH_PROMISE frame marks the associated stream for + later use. The stream state for the reserved stream transitions to "reserved + (local)". + + + Receiving a PUSH_PROMISE frame marks the associated stream as + reserved by the remote peer. The state of the stream becomes "reserved + (remote)". + + + + + Receiving any frames other than HEADERS or + PUSH_PROMISE on a stream in this state MUST be treated as a connection error of type + PROTOCOL_ERROR. + + + + + + + A stream in the "reserved (local)" state is one that has been promised by sending a + PUSH_PROMISE frame. A PUSH_PROMISE frame reserves an + idle stream by associating the stream with an open stream that was initiated by the + remote peer (see ). + + + In this state, only the following transitions are possible: + + + The endpoint can send a HEADERS frame. This causes the stream to + open in a "half closed (remote)" state. + + + Either endpoint can send a RST_STREAM frame to cause the stream + to become "closed". This releases the stream reservation. + + + + + An endpoint MUST NOT send any type of frame other than HEADERS or + RST_STREAM in this state. + + + A PRIORITY frame MAY be received in this state. Receiving any type + of frame other than RST_STREAM or PRIORITY on a stream + in this state MUST be treated as a connection + error of type PROTOCOL_ERROR. + + + + + + + A stream in the "reserved (remote)" state has been reserved by a remote peer. + + + In this state, only the following transitions are possible: + + + Receiving a HEADERS frame causes the stream to transition to + "half closed (local)". + + + Either endpoint can send a RST_STREAM frame to cause the stream + to become "closed". This releases the stream reservation. + + + + + An endpoint MAY send a PRIORITY frame in this state to reprioritize + the reserved stream. An endpoint MUST NOT send any type of frame other than + RST_STREAM, WINDOW_UPDATE, or PRIORITY + in this state. + + + Receiving any type of frame other than HEADERS or + RST_STREAM on a stream in this state MUST be treated as a connection error of type + PROTOCOL_ERROR. + + + + + + + A stream in the "open" state may be used by both peers to send frames of any type. + In this state, sending peers observe advertised stream + level flow control limits. + + + From this state either endpoint can send a frame with an END_STREAM flag set, which + causes the stream to transition into one of the "half closed" states: an endpoint + sending an END_STREAM flag causes the stream state to become "half closed (local)"; + an endpoint receiving an END_STREAM flag causes the stream state to become "half + closed (remote)". + + + Either endpoint can send a RST_STREAM frame from this state, causing + it to transition immediately to "closed". + + + + + + + A stream that is in the "half closed (local)" state cannot be used for sending + frames. Only WINDOW_UPDATE, PRIORITY and + RST_STREAM frames can be sent in this state. + + + A stream transitions from this state to "closed" when a frame that contains an + END_STREAM flag is received, or when either peer sends a RST_STREAM + frame. + + + A receiver can ignore WINDOW_UPDATE frames in this state, which might + arrive for a short period after a frame bearing the END_STREAM flag is sent. + + + PRIORITY frames received in this state are used to reprioritize + streams that depend on the current stream. + + + + + + + A stream that is "half closed (remote)" is no longer being used by the peer to send + frames. In this state, an endpoint is no longer obligated to maintain a receiver + flow control window if it performs flow control. + + + If an endpoint receives additional frames for a stream that is in this state, other + than WINDOW_UPDATE, PRIORITY or + RST_STREAM, it MUST respond with a stream error of type + STREAM_CLOSED. + + + A stream that is "half closed (remote)" can be used by the endpoint to send frames + of any type. In this state, the endpoint continues to observe advertised stream level flow control limits. + + + A stream can transition from this state to "closed" by sending a frame that contains + an END_STREAM flag, or when either peer sends a RST_STREAM frame. + + + + + + + The "closed" state is the terminal state. + + + An endpoint MUST NOT send frames other than PRIORITY on a closed + stream. An endpoint that receives any frame other than PRIORITY + after receiving a RST_STREAM MUST treat that as a stream error of type + STREAM_CLOSED. Similarly, an endpoint that receives any frames after + receiving a frame with the END_STREAM flag set MUST treat that as a connection error of type + STREAM_CLOSED, unless the frame is permitted as described below. + + + WINDOW_UPDATE or RST_STREAM frames can be received in + this state for a short period after a DATA or HEADERS + frame containing an END_STREAM flag is sent. Until the remote peer receives and + processes RST_STREAM or the frame bearing the END_STREAM flag, it + might send frames of these types. Endpoints MUST ignore + WINDOW_UPDATE or RST_STREAM frames received in this + state, though endpoints MAY choose to treat frames that arrive a significant time + after sending END_STREAM as a connection + error of type PROTOCOL_ERROR. + + + PRIORITY frames can be sent on closed streams to prioritize streams + that are dependent on the closed stream. Endpoints SHOULD process + PRIORITY frame, though they can be ignored if the stream has been + removed from the dependency tree (see ). + + + If this state is reached as a result of sending a RST_STREAM frame, + the peer that receives the RST_STREAM might have already sent - or + enqueued for sending - frames on the stream that cannot be withdrawn. An endpoint + MUST ignore frames that it receives on closed streams after it has sent a + RST_STREAM frame. An endpoint MAY choose to limit the period over + which it ignores frames and treat frames that arrive after this time as being in + error. + + + Flow controlled frames (i.e., DATA) received after sending + RST_STREAM are counted toward the connection flow control window. + Even though these frames might be ignored, because they are sent before the sender + receives the RST_STREAM, the sender will consider the frames to count + against the flow control window. + + + An endpoint might receive a PUSH_PROMISE frame after it sends + RST_STREAM. PUSH_PROMISE causes a stream to become + "reserved" even if the associated stream has been reset. Therefore, a + RST_STREAM is needed to close an unwanted promised stream. + + + + + + In the absence of more specific guidance elsewhere in this document, implementations + SHOULD treat the receipt of a frame that is not expressly permitted in the description of + a state as a connection error of type + PROTOCOL_ERROR. Frame of unknown types are ignored. + + + An example of the state transitions for an HTTP request/response exchange can be found in + . An example of the state transitions for server push can be + found in and . + + +
    + + Streams are identified with an unsigned 31-bit integer. Streams initiated by a client + MUST use odd-numbered stream identifiers; those initiated by the server MUST use + even-numbered stream identifiers. A stream identifier of zero (0x0) is used for + connection control messages; the stream identifier zero cannot be used to establish a + new stream. + + + HTTP/1.1 requests that are upgraded to HTTP/2 (see ) are + responded to with a stream identifier of one (0x1). After the upgrade + completes, stream 0x1 is "half closed (local)" to the client. Therefore, stream 0x1 + cannot be selected as a new stream identifier by a client that upgrades from HTTP/1.1. + + + The identifier of a newly established stream MUST be numerically greater than all + streams that the initiating endpoint has opened or reserved. This governs streams that + are opened using a HEADERS frame and streams that are reserved using + PUSH_PROMISE. An endpoint that receives an unexpected stream identifier + MUST respond with a connection error of + type PROTOCOL_ERROR. + + + The first use of a new stream identifier implicitly closes all streams in the "idle" + state that might have been initiated by that peer with a lower-valued stream identifier. + For example, if a client sends a HEADERS frame on stream 7 without ever + sending a frame on stream 5, then stream 5 transitions to the "closed" state when the + first frame for stream 7 is sent or received. + + + Stream identifiers cannot be reused. Long-lived connections can result in an endpoint + exhausting the available range of stream identifiers. A client that is unable to + establish a new stream identifier can establish a new connection for new streams. A + server that is unable to establish a new stream identifier can send a + GOAWAY frame so that the client is forced to open a new connection for + new streams. + +
    + +
    + + A peer can limit the number of concurrently active streams using the + SETTINGS_MAX_CONCURRENT_STREAMS parameter (see ) within a SETTINGS frame. The maximum concurrent + streams setting is specific to each endpoint and applies only to the peer that receives + the setting. That is, clients specify the maximum number of concurrent streams the + server can initiate, and servers specify the maximum number of concurrent streams the + client can initiate. + + + Streams that are in the "open" state, or either of the "half closed" states count toward + the maximum number of streams that an endpoint is permitted to open. Streams in any of + these three states count toward the limit advertised in the + SETTINGS_MAX_CONCURRENT_STREAMS setting. Streams in either of the + "reserved" states do not count toward the stream limit. + + + Endpoints MUST NOT exceed the limit set by their peer. An endpoint that receives a + HEADERS frame that causes their advertised concurrent stream limit to be + exceeded MUST treat this as a stream error. An + endpoint that wishes to reduce the value of + SETTINGS_MAX_CONCURRENT_STREAMS to a value that is below the current + number of open streams can either close streams that exceed the new value or allow + streams to complete. + +
    +
    + +
    + + Using streams for multiplexing introduces contention over use of the TCP connection, + resulting in blocked streams. A flow control scheme ensures that streams on the same + connection do not destructively interfere with each other. Flow control is used for both + individual streams and for the connection as a whole. + + + HTTP/2 provides for flow control through use of the WINDOW_UPDATE frame. + + +
    + + HTTP/2 stream flow control aims to allow a variety of flow control algorithms to be + used without requiring protocol changes. Flow control in HTTP/2 has the following + characteristics: + + + Flow control is specific to a connection; i.e., it is "hop-by-hop", not + "end-to-end". + + + Flow control is based on window update frames. Receivers advertise how many octets + they are prepared to receive on a stream and for the entire connection. This is a + credit-based scheme. + + + Flow control is directional with overall control provided by the receiver. A + receiver MAY choose to set any window size that it desires for each stream and for + the entire connection. A sender MUST respect flow control limits imposed by a + receiver. Clients, servers and intermediaries all independently advertise their + flow control window as a receiver and abide by the flow control limits set by + their peer when sending. + + + The initial value for the flow control window is 65,535 octets for both new streams + and the overall connection. + + + The frame type determines whether flow control applies to a frame. Of the frames + specified in this document, only DATA frames are subject to flow + control; all other frame types do not consume space in the advertised flow control + window. This ensures that important control frames are not blocked by flow control. + + + Flow control cannot be disabled. + + + HTTP/2 defines only the format and semantics of the WINDOW_UPDATE + frame (). This document does not stipulate how a + receiver decides when to send this frame or the value that it sends, nor does it + specify how a sender chooses to send packets. Implementations are able to select + any algorithm that suits their needs. + + + + + Implementations are also responsible for managing how requests and responses are sent + based on priority; choosing how to avoid head of line blocking for requests; and + managing the creation of new streams. Algorithm choices for these could interact with + any flow control algorithm. + +
    + +
    + + Flow control is defined to protect endpoints that are operating under resource + constraints. For example, a proxy needs to share memory between many connections, and + also might have a slow upstream connection and a fast downstream one. Flow control + addresses cases where the receiver is unable process data on one stream, yet wants to + continue to process other streams in the same connection. + + + Deployments that do not require this capability can advertise a flow control window of + the maximum size, incrementing the available space when new data is received. This + effectively disables flow control for that receiver. Conversely, a sender is always + subject to the flow control window advertised by the receiver. + + + Deployments with constrained resources (for example, memory) can employ flow control to + limit the amount of memory a peer can consume. Note, however, that this can lead to + suboptimal use of available network resources if flow control is enabled without + knowledge of the bandwidth-delay product (see ). + + + Even with full awareness of the current bandwidth-delay product, implementation of flow + control can be difficult. When using flow control, the receiver MUST read from the TCP + receive buffer in a timely fashion. Failure to do so could lead to a deadlock when + critical frames, such as WINDOW_UPDATE, are not read and acted upon. + +
    +
    + +
    + + A client can assign a priority for a new stream by including prioritization information in + the HEADERS frame that opens the stream. For an existing + stream, the PRIORITY frame can be used to change the + priority. + + + The purpose of prioritization is to allow an endpoint to express how it would prefer its + peer allocate resources when managing concurrent streams. Most importantly, priority can + be used to select streams for transmitting frames when there is limited capacity for + sending. + + + Streams can be prioritized by marking them as dependent on the completion of other streams + (). Each dependency is assigned a relative weight, a number + that is used to determine the relative proportion of available resources that are assigned + to streams dependent on the same stream. + + + + Explicitly setting the priority for a stream is input to a prioritization process. It + does not guarantee any particular processing or transmission order for the stream relative + to any other stream. An endpoint cannot force a peer to process concurrent streams in a + particular order using priority. Expressing priority is therefore only ever a suggestion. + + + Providing prioritization information is optional, so default values are used if no + explicit indicator is provided (). + + +
    + + Each stream can be given an explicit dependency on another stream. Including a + dependency expresses a preference to allocate resources to the identified stream rather + than to the dependent stream. + + + A stream that is not dependent on any other stream is given a stream dependency of 0x0. + In other words, the non-existent stream 0 forms the root of the tree. + + + A stream that depends on another stream is a dependent stream. The stream upon which a + stream is dependent is a parent stream. A dependency on a stream that is not currently + in the tree - such as a stream in the "idle" state - results in that stream being given + a default priority. + + + When assigning a dependency on another stream, the stream is added as a new dependency + of the parent stream. Dependent streams that share the same parent are not ordered with + respect to each other. For example, if streams B and C are dependent on stream A, and + if stream D is created with a dependency on stream A, this results in a dependency order + of A followed by B, C, and D in any order. + +
    + /|\ + B C B D C +]]> +
    + + An exclusive flag allows for the insertion of a new level of dependencies. The + exclusive flag causes the stream to become the sole dependency of its parent stream, + causing other dependencies to become dependent on the exclusive stream. In the + previous example, if stream D is created with an exclusive dependency on stream A, this + results in D becoming the dependency parent of B and C. + +
    + D + B C / \ + B C +]]> +
    + + Inside the dependency tree, a dependent stream SHOULD only be allocated resources if all + of the streams that it depends on (the chain of parent streams up to 0x0) are either + closed, or it is not possible to make progress on them. + + + A stream cannot depend on itself. An endpoint MUST treat this as a stream error of type PROTOCOL_ERROR. + +
    + +
    + + All dependent streams are allocated an integer weight between 1 and 256 (inclusive). + + + Streams with the same parent SHOULD be allocated resources proportionally based on their + weight. Thus, if stream B depends on stream A with weight 4, and C depends on stream A + with weight 12, and if no progress can be made on A, stream B ideally receives one third + of the resources allocated to stream C. + +
    + +
    + + Stream priorities are changed using the PRIORITY frame. Setting a + dependency causes a stream to become dependent on the identified parent stream. + + + Dependent streams move with their parent stream if the parent is reprioritized. Setting + a dependency with the exclusive flag for a reprioritized stream moves all the + dependencies of the new parent stream to become dependent on the reprioritized stream. + + + If a stream is made dependent on one of its own dependencies, the formerly dependent + stream is first moved to be dependent on the reprioritized stream's previous parent. + The moved dependency retains its weight. + +
    + + For example, consider an original dependency tree where B and C depend on A, D and E + depend on C, and F depends on D. If A is made dependent on D, then D takes the place + of A. All other dependency relationships stay the same, except for F, which becomes + dependent on A if the reprioritization is exclusive. + + F B C ==> F A OR A + / \ | / \ /|\ + D E E B C B C F + | | | + F E E + (intermediate) (non-exclusive) (exclusive) +]]> +
    +
    + +
    + + When a stream is removed from the dependency tree, its dependencies can be moved to + become dependent on the parent of the closed stream. The weights of new dependencies + are recalculated by distributing the weight of the dependency of the closed stream + proportionally based on the weights of its dependencies. + + + Streams that are removed from the dependency tree cause some prioritization information + to be lost. Resources are shared between streams with the same parent stream, which + means that if a stream in that set closes or becomes blocked, any spare capacity + allocated to a stream is distributed to the immediate neighbors of the stream. However, + if the common dependency is removed from the tree, those streams share resources with + streams at the next highest level. + + + For example, assume streams A and B share a parent, and streams C and D both depend on + stream A. Prior to the removal of stream A, if streams A and D are unable to proceed, + then stream C receives all the resources dedicated to stream A. If stream A is removed + from the tree, the weight of stream A is divided between streams C and D. If stream D + is still unable to proceed, this results in stream C receiving a reduced proportion of + resources. For equal starting weights, C receives one third, rather than one half, of + available resources. + + + It is possible for a stream to become closed while prioritization information that + creates a dependency on that stream is in transit. If a stream identified in a + dependency has no associated priority information, then the dependent stream is instead + assigned a default priority. This potentially creates + suboptimal prioritization, since the stream could be given a priority that is different + to what is intended. + + + To avoid these problems, an endpoint SHOULD retain stream prioritization state for a + period after streams become closed. The longer state is retained, the lower the chance + that streams are assigned incorrect or default priority values. + + + This could create a large state burden for an endpoint, so this state MAY be limited. + An endpoint MAY apply a fixed upper limit on the number of closed streams for which + prioritization state is tracked to limit state exposure. The amount of additional state + an endpoint maintains could be dependent on load; under high load, prioritization state + can be discarded to limit resource commitments. In extreme cases, an endpoint could + even discard prioritization state for active or reserved streams. If a fixed limit is + applied, endpoints SHOULD maintain state for at least as many streams as allowed by + their setting for SETTINGS_MAX_CONCURRENT_STREAMS. + + + An endpoint receiving a PRIORITY frame that changes the priority of a + closed stream SHOULD alter the dependencies of the streams that depend on it, if it has + retained enough state to do so. + +
    + +
    + + Providing priority information is optional. Streams are assigned a non-exclusive + dependency on stream 0x0 by default. Pushed streams + initially depend on their associated stream. In both cases, streams are assigned a + default weight of 16. + +
    +
    + +
    + + HTTP/2 framing permits two classes of error: + + + An error condition that renders the entire connection unusable is a connection error. + + + An error in an individual stream is a stream error. + + + + + A list of error codes is included in . + + +
    + + A connection error is any error which prevents further processing of the framing layer, + or which corrupts any connection state. + + + An endpoint that encounters a connection error SHOULD first send a GOAWAY + frame () with the stream identifier of the last stream that it + successfully received from its peer. The GOAWAY frame includes an error + code that indicates why the connection is terminating. After sending the + GOAWAY frame, the endpoint MUST close the TCP connection. + + + It is possible that the GOAWAY will not be reliably received by the + receiving endpoint (see ). In the event of a connection error, + GOAWAY only provides a best effort attempt to communicate with the peer + about why the connection is being terminated. + + + An endpoint can end a connection at any time. In particular, an endpoint MAY choose to + treat a stream error as a connection error. Endpoints SHOULD send a + GOAWAY frame when ending a connection, providing that circumstances + permit it. + +
    + +
    + + A stream error is an error related to a specific stream that does not affect processing + of other streams. + + + An endpoint that detects a stream error sends a RST_STREAM frame () that contains the stream identifier of the stream where the error + occurred. The RST_STREAM frame includes an error code that indicates the + type of error. + + + A RST_STREAM is the last frame that an endpoint can send on a stream. + The peer that sends the RST_STREAM frame MUST be prepared to receive any + frames that were sent or enqueued for sending by the remote peer. These frames can be + ignored, except where they modify connection state (such as the state maintained for + header compression, or flow control). + + + Normally, an endpoint SHOULD NOT send more than one RST_STREAM frame for + any stream. However, an endpoint MAY send additional RST_STREAM frames if + it receives frames on a closed stream after more than a round-trip time. This behavior + is permitted to deal with misbehaving implementations. + + + An endpoint MUST NOT send a RST_STREAM in response to an + RST_STREAM frame, to avoid looping. + +
    + +
    + + If the TCP connection is closed or reset while streams remain in open or half closed + states, then the endpoint MUST assume that those streams were abnormally interrupted and + could be incomplete. + +
    +
    + +
    + + HTTP/2 permits extension of the protocol. Protocol extensions can be used to provide + additional services or alter any aspect of the protocol, within the limitations described + in this section. Extensions are effective only within the scope of a single HTTP/2 + connection. + + + Extensions are permitted to use new frame types, new + settings, or new error + codes. Registries are established for managing these extension points: frame types, settings and + error codes. + + + Implementations MUST ignore unknown or unsupported values in all extensible protocol + elements. Implementations MUST discard frames that have unknown or unsupported types. + This means that any of these extension points can be safely used by extensions without + prior arrangement or negotiation. However, extension frames that appear in the middle of + a header block are not permitted; these MUST be treated + as a connection error of type + PROTOCOL_ERROR. + + + However, extensions that could change the semantics of existing protocol components MUST + be negotiated before being used. For example, an extension that changes the layout of the + HEADERS frame cannot be used until the peer has given a positive signal + that this is acceptable. In this case, it could also be necessary to coordinate when the + revised layout comes into effect. Note that treating any frame other than + DATA frames as flow controlled is such a change in semantics, and can only + be done through negotiation. + + + This document doesn't mandate a specific method for negotiating the use of an extension, + but notes that a setting could be used for that + purpose. If both peers set a value that indicates willingness to use the extension, then + the extension can be used. If a setting is used for extension negotiation, the initial + value MUST be defined so that the extension is initially disabled. + +
    +
    + +
    + + This specification defines a number of frame types, each identified by a unique 8-bit type + code. Each frame type serves a distinct purpose either in the establishment and management + of the connection as a whole, or of individual streams. + + + The transmission of specific frame types can alter the state of a connection. If endpoints + fail to maintain a synchronized view of the connection state, successful communication + within the connection will no longer be possible. Therefore, it is important that endpoints + have a shared comprehension of how the state is affected by the use any given frame. + + +
    + + DATA frames (type=0x0) convey arbitrary, variable-length sequences of octets associated + with a stream. One or more DATA frames are used, for instance, to carry HTTP request or + response payloads. + + + DATA frames MAY also contain arbitrary padding. Padding can be added to DATA frames to + obscure the size of messages. + +
    + +
    + + The DATA frame contains the following fields: + + + An 8-bit field containing the length of the frame padding in units of octets. This + field is optional and is only present if the PADDED flag is set. + + + Application data. The amount of data is the remainder of the frame payload after + subtracting the length of the other fields that are present. + + + Padding octets that contain no application semantic value. Padding octets MUST be set + to zero when sending and ignored when receiving. + + + + + + The DATA frame defines the following flags: + + + Bit 1 being set indicates that this frame is the last that the endpoint will send for + the identified stream. Setting this flag causes the stream to enter one of the "half closed" states or the "closed" state. + + + Bit 4 being set indicates that the Pad Length field and any padding that it describes + is present. + + + + + DATA frames MUST be associated with a stream. If a DATA frame is received whose stream + identifier field is 0x0, the recipient MUST respond with a connection error of type + PROTOCOL_ERROR. + + + DATA frames are subject to flow control and can only be sent when a stream is in the + "open" or "half closed (remote)" states. The entire DATA frame payload is included in flow + control, including Pad Length and Padding fields if present. If a DATA frame is received + whose stream is not in "open" or "half closed (local)" state, the recipient MUST respond + with a stream error of type + STREAM_CLOSED. + + + The total number of padding octets is determined by the value of the Pad Length field. If + the length of the padding is greater than the length of the frame payload, the recipient + MUST treat this as a connection error of + type PROTOCOL_ERROR. + + + A frame can be increased in size by one octet by including a Pad Length field with a + value of zero. + + + + + Padding is a security feature; see . + +
    + +
    + + The HEADERS frame (type=0x1) is used to open a stream, + and additionally carries a header block fragment. HEADERS frames can be sent on a stream + in the "open" or "half closed (remote)" states. + +
    + +
    + + The HEADERS frame payload has the following fields: + + + An 8-bit field containing the length of the frame padding in units of octets. This + field is only present if the PADDED flag is set. + + + A single bit flag indicates that the stream dependency is exclusive, see . This field is only present if the PRIORITY flag is set. + + + A 31-bit stream identifier for the stream that this stream depends on, see . This field is only present if the PRIORITY flag is set. + + + An 8-bit weight for the stream, see . Add one to the + value to obtain a weight between 1 and 256. This field is only present if the + PRIORITY flag is set. + + + A header block fragment. + + + Padding octets that contain no application semantic value. Padding octets MUST be set + to zero when sending and ignored when receiving. + + + + + + The HEADERS frame defines the following flags: + + + + Bit 1 being set indicates that the header block is + the last that the endpoint will send for the identified stream. Setting this flag + causes the stream to enter one of "half closed" + states. + + + A HEADERS frame carries the END_STREAM flag that signals the end of a stream. + However, a HEADERS frame with the END_STREAM flag set can be followed by + CONTINUATION frames on the same stream. Logically, the + CONTINUATION frames are part of the HEADERS frame. + + + + + Bit 3 being set indicates that this frame contains an entire header block and is not followed by any + CONTINUATION frames. + + + A HEADERS frame without the END_HEADERS flag set MUST be followed by a + CONTINUATION frame for the same stream. A receiver MUST treat the + receipt of any other type of frame or a frame on a different stream as a connection error of type + PROTOCOL_ERROR. + + + + + Bit 4 being set indicates that the Pad Length field and any padding that it + describes is present. + + + + + Bit 6 being set indicates that the Exclusive Flag (E), Stream Dependency, and Weight + fields are present; see . + + + + + + + The payload of a HEADERS frame contains a header block + fragment. A header block that does not fit within a HEADERS frame is continued in + a CONTINUATION frame. + + + + HEADERS frames MUST be associated with a stream. If a HEADERS frame is received whose + stream identifier field is 0x0, the recipient MUST respond with a connection error of type + PROTOCOL_ERROR. + + + + The HEADERS frame changes the connection state as described in . + + + + The HEADERS frame includes optional padding. Padding fields and flags are identical to + those defined for DATA frames. + + + Prioritization information in a HEADERS frame is logically equivalent to a separate + PRIORITY frame, but inclusion in HEADERS avoids the potential for churn in + stream prioritization when new streams are created. Priorization fields in HEADERS frames + subsequent to the first on a stream reprioritize the + stream. + +
    + +
    + + The PRIORITY frame (type=0x2) specifies the sender-advised + priority of a stream. It can be sent at any time for an existing stream, including + closed streams. This enables reprioritization of existing streams. + +
    + +
    + + The payload of a PRIORITY frame contains the following fields: + + + A single bit flag indicates that the stream dependency is exclusive, see . + + + A 31-bit stream identifier for the stream that this stream depends on, see . + + + An 8-bit weight for the identified stream dependency, see . Add one to the value to obtain a weight between 1 and 256. + + + + + + The PRIORITY frame does not define any flags. + + + + The PRIORITY frame is associated with an existing stream. If a PRIORITY frame is received + with a stream identifier of 0x0, the recipient MUST respond with a connection error of type + PROTOCOL_ERROR. + + + The PRIORITY frame can be sent on a stream in any of the "reserved (remote)", "open", + "half closed (local)", "half closed (remote)", or "closed" states, though it cannot be + sent between consecutive frames that comprise a single header + block. Note that this frame could arrive after processing or frame sending has + completed, which would cause it to have no effect on the current stream. For a stream + that is in the "half closed (remote)" or "closed" - state, this frame can only affect + processing of the current stream and not frame transmission. + + + The PRIORITY frame is the only frame that can be sent for a stream in the "closed" state. + This allows for the reprioritization of a group of dependent streams by altering the + priority of a parent stream, which might be closed. However, a PRIORITY frame sent on a + closed stream risks being ignored due to the peer having discarded priority state + information for that stream. + +
    + +
    + + The RST_STREAM frame (type=0x3) allows for abnormal termination of a stream. When sent by + the initiator of a stream, it indicates that they wish to cancel the stream or that an + error condition has occurred. When sent by the receiver of a stream, it indicates that + either the receiver is rejecting the stream, requesting that the stream be cancelled, or + that an error condition has occurred. + +
    + +
    + + + The RST_STREAM frame contains a single unsigned, 32-bit integer identifying the error code. The error code indicates why the stream is being + terminated. + + + + The RST_STREAM frame does not define any flags. + + + + The RST_STREAM frame fully terminates the referenced stream and causes it to enter the + closed state. After receiving a RST_STREAM on a stream, the receiver MUST NOT send + additional frames for that stream, with the exception of PRIORITY. However, + after sending the RST_STREAM, the sending endpoint MUST be prepared to receive and process + additional frames sent on the stream that might have been sent by the peer prior to the + arrival of the RST_STREAM. + + + + RST_STREAM frames MUST be associated with a stream. If a RST_STREAM frame is received + with a stream identifier of 0x0, the recipient MUST treat this as a connection error of type + PROTOCOL_ERROR. + + + + RST_STREAM frames MUST NOT be sent for a stream in the "idle" state. If a RST_STREAM + frame identifying an idle stream is received, the recipient MUST treat this as a connection error of type + PROTOCOL_ERROR. + + +
    + +
    + + The SETTINGS frame (type=0x4) conveys configuration parameters that affect how endpoints + communicate, such as preferences and constraints on peer behavior. The SETTINGS frame is + also used to acknowledge the receipt of those parameters. Individually, a SETTINGS + parameter can also be referred to as a "setting". + + + SETTINGS parameters are not negotiated; they describe characteristics of the sending peer, + which are used by the receiving peer. Different values for the same parameter can be + advertised by each peer. For example, a client might set a high initial flow control + window, whereas a server might set a lower value to conserve resources. + + + + A SETTINGS frame MUST be sent by both endpoints at the start of a connection, and MAY be + sent at any other time by either endpoint over the lifetime of the connection. + Implementations MUST support all of the parameters defined by this specification. + + + + Each parameter in a SETTINGS frame replaces any existing value for that parameter. + Parameters are processed in the order in which they appear, and a receiver of a SETTINGS + frame does not need to maintain any state other than the current value of its + parameters. Therefore, the value of a SETTINGS parameter is the last value that is seen by + a receiver. + + + SETTINGS parameters are acknowledged by the receiving peer. To enable this, the SETTINGS + frame defines the following flag: + + + Bit 1 being set indicates that this frame acknowledges receipt and application of the + peer's SETTINGS frame. When this bit is set, the payload of the SETTINGS frame MUST + be empty. Receipt of a SETTINGS frame with the ACK flag set and a length field value + other than 0 MUST be treated as a connection + error of type FRAME_SIZE_ERROR. For more info, see Settings Synchronization. + + + + + SETTINGS frames always apply to a connection, never a single stream. The stream + identifier for a SETTINGS frame MUST be zero (0x0). If an endpoint receives a SETTINGS + frame whose stream identifier field is anything other than 0x0, the endpoint MUST respond + with a connection error of type + PROTOCOL_ERROR. + + + The SETTINGS frame affects connection state. A badly formed or incomplete SETTINGS frame + MUST be treated as a connection error of type + PROTOCOL_ERROR. + + +
    + + The payload of a SETTINGS frame consists of zero or more parameters, each consisting of + an unsigned 16-bit setting identifier and an unsigned 32-bit value. + + +
    + +
    +
    + +
    + + The following parameters are defined: + + + + Allows the sender to inform the remote endpoint of the maximum size of the header + compression table used to decode header blocks, in octets. The encoder can select + any size equal to or less than this value by using signaling specific to the + header compression format inside a header block. The initial value is 4,096 + octets. + + + + + This setting can be use to disable server + push. An endpoint MUST NOT send a PUSH_PROMISE frame if it + receives this parameter set to a value of 0. An endpoint that has both set this + parameter to 0 and had it acknowledged MUST treat the receipt of a + PUSH_PROMISE frame as a connection error of type + PROTOCOL_ERROR. + + + The initial value is 1, which indicates that server push is permitted. Any value + other than 0 or 1 MUST be treated as a connection error of type + PROTOCOL_ERROR. + + + + + Indicates the maximum number of concurrent streams that the sender will allow. + This limit is directional: it applies to the number of streams that the sender + permits the receiver to create. Initially there is no limit to this value. It is + recommended that this value be no smaller than 100, so as to not unnecessarily + limit parallelism. + + + A value of 0 for SETTINGS_MAX_CONCURRENT_STREAMS SHOULD NOT be treated as special + by endpoints. A zero value does prevent the creation of new streams, however this + can also happen for any limit that is exhausted with active streams. Servers + SHOULD only set a zero value for short durations; if a server does not wish to + accept requests, closing the connection could be preferable. + + + + + Indicates the sender's initial window size (in octets) for stream level flow + control. The initial value is 216-1 (65,535) octets. + + + This setting affects the window size of all streams, including existing streams, + see . + + + Values above the maximum flow control window size of 231-1 MUST + be treated as a connection error of + type FLOW_CONTROL_ERROR. + + + + + Indicates the size of the largest frame payload that the sender is willing to + receive, in octets. + + + The initial value is 214 (16,384) octets. The value advertised by + an endpoint MUST be between this initial value and the maximum allowed frame size + (224-1 or 16,777,215 octets), inclusive. Values outside this range + MUST be treated as a connection error + of type PROTOCOL_ERROR. + + + + + This advisory setting informs a peer of the maximum size of header list that the + sender is prepared to accept, in octets. The value is based on the uncompressed + size of header fields, including the length of the name and value in octets plus + an overhead of 32 octets for each header field. + + + For any given request, a lower limit than what is advertised MAY be enforced. The + initial value of this setting is unlimited. + + + + + + An endpoint that receives a SETTINGS frame with any unknown or unsupported identifier + MUST ignore that setting. + +
    + +
    + + Most values in SETTINGS benefit from or require an understanding of when the peer has + received and applied the changed parameter values. In order to provide + such synchronization timepoints, the recipient of a SETTINGS frame in which the ACK flag + is not set MUST apply the updated parameters as soon as possible upon receipt. + + + The values in the SETTINGS frame MUST be processed in the order they appear, with no + other frame processing between values. Unsupported parameters MUST be ignored. Once + all values have been processed, the recipient MUST immediately emit a SETTINGS frame + with the ACK flag set. Upon receiving a SETTINGS frame with the ACK flag set, the sender + of the altered parameters can rely on the setting having been applied. + + + If the sender of a SETTINGS frame does not receive an acknowledgement within a + reasonable amount of time, it MAY issue a connection error of type + SETTINGS_TIMEOUT. + +
    +
    + +
    + + The PUSH_PROMISE frame (type=0x5) is used to notify the peer endpoint in advance of + streams the sender intends to initiate. The PUSH_PROMISE frame includes the unsigned + 31-bit identifier of the stream the endpoint plans to create along with a set of headers + that provide additional context for the stream. contains a + thorough description of the use of PUSH_PROMISE frames. + + +
    + +
    + + The PUSH_PROMISE frame payload has the following fields: + + + An 8-bit field containing the length of the frame padding in units of octets. This + field is only present if the PADDED flag is set. + + + A single reserved bit. + + + An unsigned 31-bit integer that identifies the stream that is reserved by the + PUSH_PROMISE. The promised stream identifier MUST be a valid choice for the next + stream sent by the sender (see new stream + identifier). + + + A header block fragment containing request header + fields. + + + Padding octets. + + + + + + The PUSH_PROMISE frame defines the following flags: + + + + Bit 3 being set indicates that this frame contains an entire header block and is not followed by any + CONTINUATION frames. + + + A PUSH_PROMISE frame without the END_HEADERS flag set MUST be followed by a + CONTINUATION frame for the same stream. A receiver MUST treat the receipt of any + other type of frame or a frame on a different stream as a connection error of type + PROTOCOL_ERROR. + + + + + Bit 4 being set indicates that the Pad Length field and any padding that it + describes is present. + + + + + + + PUSH_PROMISE frames MUST be associated with an existing, peer-initiated stream. The stream + identifier of a PUSH_PROMISE frame indicates the stream it is associated with. If the + stream identifier field specifies the value 0x0, a recipient MUST respond with a connection error of type + PROTOCOL_ERROR. + + + + Promised streams are not required to be used in the order they are promised. The + PUSH_PROMISE only reserves stream identifiers for later use. + + + + PUSH_PROMISE MUST NOT be sent if the SETTINGS_ENABLE_PUSH setting of the + peer endpoint is set to 0. An endpoint that has set this setting and has received + acknowledgement MUST treat the receipt of a PUSH_PROMISE frame as a connection error of type + PROTOCOL_ERROR. + + + Recipients of PUSH_PROMISE frames can choose to reject promised streams by returning a + RST_STREAM referencing the promised stream identifier back to the sender of + the PUSH_PROMISE. + + + + A PUSH_PROMISE frame modifies the connection state in two ways. The inclusion of a header block potentially modifies the state maintained for + header compression. PUSH_PROMISE also reserves a stream for later use, causing the + promised stream to enter the "reserved" state. A sender MUST NOT send a PUSH_PROMISE on a + stream unless that stream is either "open" or "half closed (remote)"; the sender MUST + ensure that the promised stream is a valid choice for a new stream identifier (that is, the promised stream MUST + be in the "idle" state). + + + Since PUSH_PROMISE reserves a stream, ignoring a PUSH_PROMISE frame causes the stream + state to become indeterminate. A receiver MUST treat the receipt of a PUSH_PROMISE on a + stream that is neither "open" nor "half closed (local)" as a connection error of type + PROTOCOL_ERROR. However, an endpoint that has sent + RST_STREAM on the associated stream MUST handle PUSH_PROMISE frames that + might have been created before the RST_STREAM frame is received and + processed. + + + A receiver MUST treat the receipt of a PUSH_PROMISE that promises an illegal stream identifier (that is, an identifier for a + stream that is not currently in the "idle" state) as a connection error of type + PROTOCOL_ERROR. + + + + The PUSH_PROMISE frame includes optional padding. Padding fields and flags are identical + to those defined for DATA frames. + +
    + +
    + + The PING frame (type=0x6) is a mechanism for measuring a minimal round trip time from the + sender, as well as determining whether an idle connection is still functional. PING + frames can be sent from any endpoint. + +
    + +
    + + + In addition to the frame header, PING frames MUST contain 8 octets of data in the payload. + A sender can include any value it chooses and use those bytes in any fashion. + + + Receivers of a PING frame that does not include an ACK flag MUST send a PING frame with + the ACK flag set in response, with an identical payload. PING responses SHOULD be given + higher priority than any other frame. + + + + The PING frame defines the following flags: + + + Bit 1 being set indicates that this PING frame is a PING response. An endpoint MUST + set this flag in PING responses. An endpoint MUST NOT respond to PING frames + containing this flag. + + + + + PING frames are not associated with any individual stream. If a PING frame is received + with a stream identifier field value other than 0x0, the recipient MUST respond with a + connection error of type + PROTOCOL_ERROR. + + + Receipt of a PING frame with a length field value other than 8 MUST be treated as a connection error of type + FRAME_SIZE_ERROR. + + +
    + +
    + + The GOAWAY frame (type=0x7) informs the remote peer to stop creating streams on this + connection. GOAWAY can be sent by either the client or the server. Once sent, the sender + will ignore frames sent on any new streams with identifiers higher than the included last + stream identifier. Receivers of a GOAWAY frame MUST NOT open additional streams on the + connection, although a new connection can be established for new streams. + + + The purpose of this frame is to allow an endpoint to gracefully stop accepting new + streams, while still finishing processing of previously established streams. This enables + administrative actions, like server maintainance. + + + There is an inherent race condition between an endpoint starting new streams and the + remote sending a GOAWAY frame. To deal with this case, the GOAWAY contains the stream + identifier of the last peer-initiated stream which was or might be processed on the + sending endpoint in this connection. For instance, if the server sends a GOAWAY frame, + the identified stream is the highest numbered stream initiated by the client. + + + If the receiver of the GOAWAY has sent data on streams with a higher stream identifier + than what is indicated in the GOAWAY frame, those streams are not or will not be + processed. The receiver of the GOAWAY frame can treat the streams as though they had + never been created at all, thereby allowing those streams to be retried later on a new + connection. + + + Endpoints SHOULD always send a GOAWAY frame before closing a connection so that the remote + can know whether a stream has been partially processed or not. For example, if an HTTP + client sends a POST at the same time that a server closes a connection, the client cannot + know if the server started to process that POST request if the server does not send a + GOAWAY frame to indicate what streams it might have acted on. + + + An endpoint might choose to close a connection without sending GOAWAY for misbehaving + peers. + + +
    + +
    + + The GOAWAY frame does not define any flags. + + + The GOAWAY frame applies to the connection, not a specific stream. An endpoint MUST treat + a GOAWAY frame with a stream identifier other than 0x0 as a connection error of type + PROTOCOL_ERROR. + + + The last stream identifier in the GOAWAY frame contains the highest numbered stream + identifier for which the sender of the GOAWAY frame might have taken some action on, or + might yet take action on. All streams up to and including the identified stream might + have been processed in some way. The last stream identifier can be set to 0 if no streams + were processed. + + + In this context, "processed" means that some data from the stream was passed to some + higher layer of software that might have taken some action as a result. + + + If a connection terminates without a GOAWAY frame, the last stream identifier is + effectively the highest possible stream identifier. + + + On streams with lower or equal numbered identifiers that were not closed completely prior + to the connection being closed, re-attempting requests, transactions, or any protocol + activity is not possible, with the exception of idempotent actions like HTTP GET, PUT, or + DELETE. Any protocol activity that uses higher numbered streams can be safely retried + using a new connection. + + + Activity on streams numbered lower or equal to the last stream identifier might still + complete successfully. The sender of a GOAWAY frame might gracefully shut down a + connection by sending a GOAWAY frame, maintaining the connection in an open state until + all in-progress streams complete. + + + An endpoint MAY send multiple GOAWAY frames if circumstances change. For instance, an + endpoint that sends GOAWAY with NO_ERROR during graceful shutdown could + subsequently encounter an condition that requires immediate termination of the connection. + The last stream identifier from the last GOAWAY frame received indicates which streams + could have been acted upon. Endpoints MUST NOT increase the value they send in the last + stream identifier, since the peers might already have retried unprocessed requests on + another connection. + + + A client that is unable to retry requests loses all requests that are in flight when the + server closes the connection. This is especially true for intermediaries that might + not be serving clients using HTTP/2. A server that is attempting to gracefully shut down + a connection SHOULD send an initial GOAWAY frame with the last stream identifier set to + 231-1 and a NO_ERROR code. This signals to the client that + a shutdown is imminent and that no further requests can be initiated. After waiting at + least one round trip time, the server can send another GOAWAY frame with an updated last + stream identifier. This ensures that a connection can be cleanly shut down without losing + requests. + + + + After sending a GOAWAY frame, the sender can discard frames for streams with identifiers + higher than the identified last stream. However, any frames that alter connection state + cannot be completely ignored. For instance, HEADERS, + PUSH_PROMISE and CONTINUATION frames MUST be minimally + processed to ensure the state maintained for header compression is consistent (see ); similarly DATA frames MUST be counted toward the connection flow + control window. Failure to process these frames can cause flow control or header + compression state to become unsynchronized. + + + + The GOAWAY frame also contains a 32-bit error code that + contains the reason for closing the connection. + + + Endpoints MAY append opaque data to the payload of any GOAWAY frame. Additional debug + data is intended for diagnostic purposes only and carries no semantic value. Debug + information could contain security- or privacy-sensitive data. Logged or otherwise + persistently stored debug data MUST have adequate safeguards to prevent unauthorized + access. + +
    + +
    + + The WINDOW_UPDATE frame (type=0x8) is used to implement flow control; see for an overview. + + + Flow control operates at two levels: on each individual stream and on the entire + connection. + + + Both types of flow control are hop-by-hop; that is, only between the two endpoints. + Intermediaries do not forward WINDOW_UPDATE frames between dependent connections. + However, throttling of data transfer by any receiver can indirectly cause the propagation + of flow control information toward the original sender. + + + Flow control only applies to frames that are identified as being subject to flow control. + Of the frame types defined in this document, this includes only DATA frames. + Frames that are exempt from flow control MUST be accepted and processed, unless the + receiver is unable to assign resources to handling the frame. A receiver MAY respond with + a stream error or connection error of type + FLOW_CONTROL_ERROR if it is unable to accept a frame. + +
    + +
    + + The payload of a WINDOW_UPDATE frame is one reserved bit, plus an unsigned 31-bit integer + indicating the number of octets that the sender can transmit in addition to the existing + flow control window. The legal range for the increment to the flow control window is 1 to + 231-1 (0x7fffffff) octets. + + + The WINDOW_UPDATE frame does not define any flags. + + + The WINDOW_UPDATE frame can be specific to a stream or to the entire connection. In the + former case, the frame's stream identifier indicates the affected stream; in the latter, + the value "0" indicates that the entire connection is the subject of the frame. + + + A receiver MUST treat the receipt of a WINDOW_UPDATE frame with an flow control window + increment of 0 as a stream error of type + PROTOCOL_ERROR; errors on the connection flow control window MUST be + treated as a connection error. + + + WINDOW_UPDATE can be sent by a peer that has sent a frame bearing the END_STREAM flag. + This means that a receiver could receive a WINDOW_UPDATE frame on a "half closed (remote)" + or "closed" stream. A receiver MUST NOT treat this as an error, see . + + + A receiver that receives a flow controlled frame MUST always account for its contribution + against the connection flow control window, unless the receiver treats this as a connection error. This is necessary even if the + frame is in error. Since the sender counts the frame toward the flow control window, if + the receiver does not, the flow control window at sender and receiver can become + different. + + +
    + + Flow control in HTTP/2 is implemented using a window kept by each sender on every + stream. The flow control window is a simple integer value that indicates how many octets + of data the sender is permitted to transmit; as such, its size is a measure of the + buffering capacity of the receiver. + + + Two flow control windows are applicable: the stream flow control window and the + connection flow control window. The sender MUST NOT send a flow controlled frame with a + length that exceeds the space available in either of the flow control windows advertised + by the receiver. Frames with zero length with the END_STREAM flag set (that is, an + empty DATA frame) MAY be sent if there is no available space in either + flow control window. + + + For flow control calculations, the 9 octet frame header is not counted. + + + After sending a flow controlled frame, the sender reduces the space available in both + windows by the length of the transmitted frame. + + + The receiver of a frame sends a WINDOW_UPDATE frame as it consumes data and frees up + space in flow control windows. Separate WINDOW_UPDATE frames are sent for the stream + and connection level flow control windows. + + + A sender that receives a WINDOW_UPDATE frame updates the corresponding window by the + amount specified in the frame. + + + A sender MUST NOT allow a flow control window to exceed 231-1 octets. + If a sender receives a WINDOW_UPDATE that causes a flow control window to exceed this + maximum it MUST terminate either the stream or the connection, as appropriate. For + streams, the sender sends a RST_STREAM with the error code of + FLOW_CONTROL_ERROR code; for the connection, a GOAWAY + frame with a FLOW_CONTROL_ERROR code. + + + Flow controlled frames from the sender and WINDOW_UPDATE frames from the receiver are + completely asynchronous with respect to each other. This property allows a receiver to + aggressively update the window size kept by the sender to prevent streams from stalling. + +
    + +
    + + When an HTTP/2 connection is first established, new streams are created with an initial + flow control window size of 65,535 octets. The connection flow control window is 65,535 + octets. Both endpoints can adjust the initial window size for new streams by including + a value for SETTINGS_INITIAL_WINDOW_SIZE in the SETTINGS + frame that forms part of the connection preface. The connection flow control window can + only be changed using WINDOW_UPDATE frames. + + + Prior to receiving a SETTINGS frame that sets a value for + SETTINGS_INITIAL_WINDOW_SIZE, an endpoint can only use the default + initial window size when sending flow controlled frames. Similarly, the connection flow + control window is set to the default initial window size until a WINDOW_UPDATE frame is + received. + + + A SETTINGS frame can alter the initial flow control window size for all + current streams. When the value of SETTINGS_INITIAL_WINDOW_SIZE changes, + a receiver MUST adjust the size of all stream flow control windows that it maintains by + the difference between the new value and the old value. + + + A change to SETTINGS_INITIAL_WINDOW_SIZE can cause the available space in + a flow control window to become negative. A sender MUST track the negative flow control + window, and MUST NOT send new flow controlled frames until it receives WINDOW_UPDATE + frames that cause the flow control window to become positive. + + + For example, if the client sends 60KB immediately on connection establishment, and the + server sets the initial window size to be 16KB, the client will recalculate the + available flow control window to be -44KB on receipt of the SETTINGS + frame. The client retains a negative flow control window until WINDOW_UPDATE frames + restore the window to being positive, after which the client can resume sending. + + + A SETTINGS frame cannot alter the connection flow control window. + + + An endpoint MUST treat a change to SETTINGS_INITIAL_WINDOW_SIZE that + causes any flow control window to exceed the maximum size as a connection error of type + FLOW_CONTROL_ERROR. + +
    + +
    + + A receiver that wishes to use a smaller flow control window than the current size can + send a new SETTINGS frame. However, the receiver MUST be prepared to + receive data that exceeds this window size, since the sender might send data that + exceeds the lower limit prior to processing the SETTINGS frame. + + + After sending a SETTINGS frame that reduces the initial flow control window size, a + receiver has two options for handling streams that exceed flow control limits: + + + The receiver can immediately send RST_STREAM with + FLOW_CONTROL_ERROR error code for the affected streams. + + + The receiver can accept the streams and tolerate the resulting head of line + blocking, sending WINDOW_UPDATE frames as it consumes data. + + + +
    +
    + +
    + + The CONTINUATION frame (type=0x9) is used to continue a sequence of header block fragments. Any number of CONTINUATION frames can + be sent on an existing stream, as long as the preceding frame is on the same stream and is + a HEADERS, PUSH_PROMISE or CONTINUATION frame without the + END_HEADERS flag set. + + +
    + +
    + + The CONTINUATION frame payload contains a header block + fragment. + + + + The CONTINUATION frame defines the following flag: + + + + Bit 3 being set indicates that this frame ends a header + block. + + + If the END_HEADERS bit is not set, this frame MUST be followed by another + CONTINUATION frame. A receiver MUST treat the receipt of any other type of frame or + a frame on a different stream as a connection + error of type PROTOCOL_ERROR. + + + + + + + The CONTINUATION frame changes the connection state as defined in . + + + + CONTINUATION frames MUST be associated with a stream. If a CONTINUATION frame is received + whose stream identifier field is 0x0, the recipient MUST respond with a connection error of type PROTOCOL_ERROR. + + + + A CONTINUATION frame MUST be preceded by a HEADERS, + PUSH_PROMISE or CONTINUATION frame without the END_HEADERS flag set. A + recipient that observes violation of this rule MUST respond with a connection error of type + PROTOCOL_ERROR. + +
    +
    + +
    + + Error codes are 32-bit fields that are used in RST_STREAM and + GOAWAY frames to convey the reasons for the stream or connection error. + + + + Error codes share a common code space. Some error codes apply only to either streams or the + entire connection and have no defined semantics in the other context. + + + + The following error codes are defined: + + + The associated condition is not as a result of an error. For example, a + GOAWAY might include this code to indicate graceful shutdown of a + connection. + + + The endpoint detected an unspecific protocol error. This error is for use when a more + specific error code is not available. + + + The endpoint encountered an unexpected internal error. + + + The endpoint detected that its peer violated the flow control protocol. + + + The endpoint sent a SETTINGS frame, but did not receive a response in a + timely manner. See Settings Synchronization. + + + The endpoint received a frame after a stream was half closed. + + + The endpoint received a frame with an invalid size. + + + The endpoint refuses the stream prior to performing any application processing, see + for details. + + + Used by the endpoint to indicate that the stream is no longer needed. + + + The endpoint is unable to maintain the header compression context for the connection. + + + The connection established in response to a CONNECT + request was reset or abnormally closed. + + + The endpoint detected that its peer is exhibiting a behavior that might be generating + excessive load. + + + The underlying transport has properties that do not meet minimum security + requirements (see ). + + + + + Unknown or unsupported error codes MUST NOT trigger any special behavior. These MAY be + treated by an implementation as being equivalent to INTERNAL_ERROR. + +
    + +
    + + HTTP/2 is intended to be as compatible as possible with current uses of HTTP. This means + that, from the application perspective, the features of the protocol are largely + unchanged. To achieve this, all request and response semantics are preserved, although the + syntax of conveying those semantics has changed. + + + Thus, the specification and requirements of HTTP/1.1 Semantics and Content , Conditional Requests , Range Requests , Caching and Authentication are applicable to HTTP/2. Selected portions of HTTP/1.1 Message Syntax + and Routing , such as the HTTP and HTTPS URI schemes, are also + applicable in HTTP/2, but the expression of those semantics for this protocol are defined + in the sections below. + + +
    + + A client sends an HTTP request on a new stream, using a previously unused stream identifier. A server sends an HTTP response on + the same stream as the request. + + + An HTTP message (request or response) consists of: + + + for a response only, zero or more HEADERS frames (each followed by zero + or more CONTINUATION frames) containing the message headers of + informational (1xx) HTTP responses (see and ), + and + + + one HEADERS frame (followed by zero or more CONTINUATION + frames) containing the message headers (see ), and + + + zero or more DATA frames containing the message payload (see ), and + + + optionally, one HEADERS frame, followed by zero or more + CONTINUATION frames containing the trailer-part, if present (see ). + + + The last frame in the sequence bears an END_STREAM flag, noting that a + HEADERS frame bearing the END_STREAM flag can be followed by + CONTINUATION frames that carry any remaining portions of the header block. + + + Other frames (from any stream) MUST NOT occur between either HEADERS frame + and any CONTINUATION frames that might follow. + + + + Trailing header fields are carried in a header block that also terminates the stream. + That is, a sequence starting with a HEADERS frame, followed by zero or more + CONTINUATION frames, where the HEADERS frame bears an + END_STREAM flag. Header blocks after the first that do not terminate the stream are not + part of an HTTP request or response. + + + A HEADERS frame (and associated CONTINUATION frames) can + only appear at the start or end of a stream. An endpoint that receives a + HEADERS frame without the END_STREAM flag set after receiving a final + (non-informational) status code MUST treat the corresponding request or response as malformed. + + + + An HTTP request/response exchange fully consumes a single stream. A request starts with + the HEADERS frame that puts the stream into an "open" state. The request + ends with a frame bearing END_STREAM, which causes the stream to become "half closed + (local)" for the client and "half closed (remote)" for the server. A response starts with + a HEADERS frame and ends with a frame bearing END_STREAM, which places the + stream in the "closed" state. + + + +
    + + HTTP/2 removes support for the 101 (Switching Protocols) informational status code + (). + + + The semantics of 101 (Switching Protocols) aren't applicable to a multiplexed protocol. + Alternative protocols are able to use the same mechanisms that HTTP/2 uses to negotiate + their use (see ). + +
    + +
    + + HTTP header fields carry information as a series of key-value pairs. For a listing of + registered HTTP headers, see the Message Header Field Registry maintained at . + + +
    + + While HTTP/1.x used the message start-line (see ) to convey the target URI and method of the request, and the + status code for the response, HTTP/2 uses special pseudo-header fields beginning with + ':' character (ASCII 0x3a) for this purpose. + + + Pseudo-header fields are not HTTP header fields. Endpoints MUST NOT generate + pseudo-header fields other than those defined in this document. + + + Pseudo-header fields are only valid in the context in which they are defined. + Pseudo-header fields defined for requests MUST NOT appear in responses; pseudo-header + fields defined for responses MUST NOT appear in requests. Pseudo-header fields MUST + NOT appear in trailers. Endpoints MUST treat a request or response that contains + undefined or invalid pseudo-header fields as malformed. + + + Just as in HTTP/1.x, header field names are strings of ASCII characters that are + compared in a case-insensitive fashion. However, header field names MUST be converted + to lowercase prior to their encoding in HTTP/2. A request or response containing + uppercase header field names MUST be treated as malformed. + + + All pseudo-header fields MUST appear in the header block before regular header fields. + Any request or response that contains a pseudo-header field that appears in a header + block after a regular header field MUST be treated as malformed. + +
    + +
    + + HTTP/2 does not use the Connection header field to + indicate connection-specific header fields; in this protocol, connection-specific + metadata is conveyed by other means. An endpoint MUST NOT generate a HTTP/2 message + containing connection-specific header fields; any message containing + connection-specific header fields MUST be treated as malformed. + + + This means that an intermediary transforming an HTTP/1.x message to HTTP/2 will need + to remove any header fields nominated by the Connection header field, along with the + Connection header field itself. Such intermediaries SHOULD also remove other + connection-specific header fields, such as Keep-Alive, Proxy-Connection, + Transfer-Encoding and Upgrade, even if they are not nominated by Connection. + + + One exception to this is the TE header field, which MAY be present in an HTTP/2 + request, but when it is MUST NOT contain any value other than "trailers". + + + + + HTTP/2 purposefully does not support upgrade to another protocol. The handshake + methods described in are believed sufficient to + negotiate the use of alternative protocols. + + + +
    + +
    + + The following pseudo-header fields are defined for HTTP/2 requests: + + + + The :method pseudo-header field includes the HTTP + method (). + + + + + The :scheme pseudo-header field includes the scheme + portion of the target URI (). + + + :scheme is not restricted to http and https schemed URIs. A + proxy or gateway can translate requests for non-HTTP schemes, enabling the use + of HTTP to interact with non-HTTP services. + + + + + The :authority pseudo-header field includes the + authority portion of the target URI (). The authority MUST NOT include the deprecated userinfo subcomponent for http + or https schemed URIs. + + + To ensure that the HTTP/1.1 request line can be reproduced accurately, this + pseudo-header field MUST be omitted when translating from an HTTP/1.1 request + that has a request target in origin or asterisk form (see ). Clients that generate + HTTP/2 requests directly SHOULD use the :authority pseudo-header + field instead of the Host header field. An + intermediary that converts an HTTP/2 request to HTTP/1.1 MUST create a Host header field if one is not present in a request by + copying the value of the :authority pseudo-header + field. + + + + + The :path pseudo-header field includes the path and + query parts of the target URI (the path-absolute + production from and optionally a '?' character + followed by the query production, see and ). A request in asterisk form includes the value '*' for the + :path pseudo-header field. + + + This pseudo-header field MUST NOT be empty for http + or https URIs; http or + https URIs that do not contain a path component + MUST include a value of '/'. The exception to this rule is an OPTIONS request + for an http or https + URI that does not include a path component; these MUST include a :path pseudo-header field with a value of '*' (see ). + + + + + + All HTTP/2 requests MUST include exactly one valid value for the :method, :scheme, and :path pseudo-header fields, unless it is a CONNECT request. An HTTP request that omits mandatory + pseudo-header fields is malformed. + + + HTTP/2 does not define a way to carry the version identifier that is included in the + HTTP/1.1 request line. + +
    + +
    + + For HTTP/2 responses, a single :status pseudo-header + field is defined that carries the HTTP status code field (see ). This pseudo-header field MUST be included in all + responses, otherwise the response is malformed. + + + HTTP/2 does not define a way to carry the version or reason phrase that is included in + an HTTP/1.1 status line. + +
    + +
    + + The Cookie header field can carry a significant amount of + redundant data. + + + The Cookie header field uses a semi-colon (";") to delimit cookie-pairs (or "crumbs"). + This header field doesn't follow the list construction rules in HTTP (see ), which prevents cookie-pairs from + being separated into different name-value pairs. This can significantly reduce + compression efficiency as individual cookie-pairs are updated. + + + To allow for better compression efficiency, the Cookie header field MAY be split into + separate header fields, each with one or more cookie-pairs. If there are multiple + Cookie header fields after decompression, these MUST be concatenated into a single + octet string using the two octet delimiter of 0x3B, 0x20 (the ASCII string "; ") + before being passed into a non-HTTP/2 context, such as an HTTP/1.1 connection, or a + generic HTTP server application. + +
    + + Therefore, the following two lists of Cookie header fields are semantically + equivalent. + + +
    +
    + +
    + + A malformed request or response is one that is an otherwise valid sequence of HTTP/2 + frames, but is otherwise invalid due to the presence of extraneous frames, prohibited + header fields, the absence of mandatory header fields, or the inclusion of uppercase + header field names. + + + A request or response that includes an entity body can include a content-length header field. A request or response is also + malformed if the value of a content-length header field + does not equal the sum of the DATA frame payload lengths that form the + body. A response that is defined to have no payload, as described in , can have a non-zero + content-length header field, even though no content is + included in DATA frames. + + + Intermediaries that process HTTP requests or responses (i.e., any intermediary not + acting as a tunnel) MUST NOT forward a malformed request or response. Malformed + requests or responses that are detected MUST be treated as a stream error of type PROTOCOL_ERROR. + + + For malformed requests, a server MAY send an HTTP response prior to closing or + resetting the stream. Clients MUST NOT accept a malformed response. Note that these + requirements are intended to protect against several types of common attacks against + HTTP; they are deliberately strict, because being permissive can expose + implementations to these vulnerabilities. + +
    +
    + +
    + + This section shows HTTP/1.1 requests and responses, with illustrations of equivalent + HTTP/2 requests and responses. + + + An HTTP GET request includes request header fields and no body and is therefore + transmitted as a single HEADERS frame, followed by zero or more + CONTINUATION frames containing the serialized block of request header + fields. The HEADERS frame in the following has both the END_HEADERS and + END_STREAM flags set; no CONTINUATION frames are sent: + + +
    + + END_STREAM + Accept: image/jpeg + END_HEADERS + :method = GET + :scheme = https + :path = /resource + host = example.org + accept = image/jpeg +]]> +
    + + + Similarly, a response that includes only response header fields is transmitted as a + HEADERS frame (again, followed by zero or more + CONTINUATION frames) containing the serialized block of response header + fields. + + +
    + + END_STREAM + Expires: Thu, 23 Jan ... + END_HEADERS + :status = 304 + etag = "xyzzy" + expires = Thu, 23 Jan ... +]]> +
    + + + An HTTP POST request that includes request header fields and payload data is transmitted + as one HEADERS frame, followed by zero or more + CONTINUATION frames containing the request header fields, followed by one + or more DATA frames, with the last CONTINUATION (or + HEADERS) frame having the END_HEADERS flag set and the final + DATA frame having the END_STREAM flag set: + + +
    + - END_STREAM + Content-Type: image/jpeg - END_HEADERS + Content-Length: 123 :method = POST + :path = /resource + {binary data} :scheme = https + + CONTINUATION + + END_HEADERS + content-type = image/jpeg + host = example.org + content-length = 123 + + DATA + + END_STREAM + {binary data} +]]> + + Note that data contributing to any given header field could be spread between header + block fragments. The allocation of header fields to frames in this example is + illustrative only. + +
    + + + A response that includes header fields and payload data is transmitted as a + HEADERS frame, followed by zero or more CONTINUATION + frames, followed by one or more DATA frames, with the last + DATA frame in the sequence having the END_STREAM flag set: + + +
    + - END_STREAM + Content-Length: 123 + END_HEADERS + :status = 200 + {binary data} content-type = image/jpeg + content-length = 123 + + DATA + + END_STREAM + {binary data} +]]> +
    + + + Trailing header fields are sent as a header block after both the request or response + header block and all the DATA frames have been sent. The + HEADERS frame starting the trailers header block has the END_STREAM flag + set. + + +
    + - END_STREAM + Transfer-Encoding: chunked + END_HEADERS + Trailer: Foo :status = 200 + content-length = 123 + 123 content-type = image/jpeg + {binary data} trailer = Foo + 0 + Foo: bar DATA + - END_STREAM + {binary data} + + HEADERS + + END_STREAM + + END_HEADERS + foo = bar +]]> +
    + + +
    + + An informational response using a 1xx status code other than 101 is transmitted as a + HEADERS frame, followed by zero or more CONTINUATION + frames: + + - END_STREAM + + END_HEADERS + :status = 103 + extension-field = bar +]]> +
    +
    + +
    + + In HTTP/1.1, an HTTP client is unable to retry a non-idempotent request when an error + occurs, because there is no means to determine the nature of the error. It is possible + that some server processing occurred prior to the error, which could result in + undesirable effects if the request were reattempted. + + + HTTP/2 provides two mechanisms for providing a guarantee to a client that a request has + not been processed: + + + The GOAWAY frame indicates the highest stream number that might have + been processed. Requests on streams with higher numbers are therefore guaranteed to + be safe to retry. + + + The REFUSED_STREAM error code can be included in a + RST_STREAM frame to indicate that the stream is being closed prior to + any processing having occurred. Any request that was sent on the reset stream can + be safely retried. + + + + + Requests that have not been processed have not failed; clients MAY automatically retry + them, even those with non-idempotent methods. + + + A server MUST NOT indicate that a stream has not been processed unless it can guarantee + that fact. If frames that are on a stream are passed to the application layer for any + stream, then REFUSED_STREAM MUST NOT be used for that stream, and a + GOAWAY frame MUST include a stream identifier that is greater than or + equal to the given stream identifier. + + + In addition to these mechanisms, the PING frame provides a way for a + client to easily test a connection. Connections that remain idle can become broken as + some middleboxes (for instance, network address translators, or load balancers) silently + discard connection bindings. The PING frame allows a client to safely + test whether a connection is still active without sending a request. + +
    +
    + +
    + + HTTP/2 allows a server to pre-emptively send (or "push") responses (along with + corresponding "promised" requests) to a client in association with a previous + client-initiated request. This can be useful when the server knows the client will need + to have those responses available in order to fully process the response to the original + request. + + + + Pushing additional message exchanges in this fashion is optional, and is negotiated + between individual endpoints. The SETTINGS_ENABLE_PUSH setting can be set + to 0 to indicate that server push is disabled. + + + Promised requests MUST be cacheable (see ), MUST be safe (see ) and MUST NOT include a request body. Clients that receive a + promised request that is not cacheable, unsafe or that includes a request body MUST + reset the stream with a stream error of type + PROTOCOL_ERROR. + + + Pushed responses that are cacheable (see ) can be stored by the client, if it implements a HTTP + cache. Pushed responses are considered successfully validated on the origin server (e.g., + if the "no-cache" cache response directive is present) while the stream identified by the + promised stream ID is still open. + + + Pushed responses that are not cacheable MUST NOT be stored by any HTTP cache. They MAY + be made available to the application separately. + + + An intermediary can receive pushes from the server and choose not to forward them on to + the client. In other words, how to make use of the pushed information is up to that + intermediary. Equally, the intermediary might choose to make additional pushes to the + client, without any action taken by the server. + + + A client cannot push. Thus, servers MUST treat the receipt of a + PUSH_PROMISE frame as a connection + error of type PROTOCOL_ERROR. Clients MUST reject any attempt to + change the SETTINGS_ENABLE_PUSH setting to a value other than 0 by treating + the message as a connection error of type + PROTOCOL_ERROR. + + +
    + + Server push is semantically equivalent to a server responding to a request; however, in + this case that request is also sent by the server, as a PUSH_PROMISE + frame. + + + The PUSH_PROMISE frame includes a header block that contains a complete + set of request header fields that the server attributes to the request. It is not + possible to push a response to a request that includes a request body. + + + + Pushed responses are always associated with an explicit request from the client. The + PUSH_PROMISE frames sent by the server are sent on that explicit + request's stream. The PUSH_PROMISE frame also includes a promised stream + identifier, chosen from the stream identifiers available to the server (see ). + + + + The header fields in PUSH_PROMISE and any subsequent + CONTINUATION frames MUST be a valid and complete set of request header fields. The server MUST include a method in + the :method header field that is safe and cacheable. If a + client receives a PUSH_PROMISE that does not include a complete and valid + set of header fields, or the :method header field identifies + a method that is not safe, it MUST respond with a stream error of type PROTOCOL_ERROR. + + + + The server SHOULD send PUSH_PROMISE () + frames prior to sending any frames that reference the promised responses. This avoids a + race where clients issue requests prior to receiving any PUSH_PROMISE + frames. + + + For example, if the server receives a request for a document containing embedded links + to multiple image files, and the server chooses to push those additional images to the + client, sending push promises before the DATA frames that contain the + image links ensures that the client is able to see the promises before discovering + embedded links. Similarly, if the server pushes responses referenced by the header block + (for instance, in Link header fields), sending the push promises before sending the + header block ensures that clients do not request them. + + + + PUSH_PROMISE frames MUST NOT be sent by the client. + + + PUSH_PROMISE frames can be sent by the server in response to any + client-initiated stream, but the stream MUST be in either the "open" or "half closed + (remote)" state with respect to the server. PUSH_PROMISE frames are + interspersed with the frames that comprise a response, though they cannot be + interspersed with HEADERS and CONTINUATION frames that + comprise a single header block. + + + Sending a PUSH_PROMISE frame creates a new stream and puts the stream + into the “reserved (local)” state for the server and the “reserved (remote)” state for + the client. + +
    + +
    + + After sending the PUSH_PROMISE frame, the server can begin delivering the + pushed response as a response on a server-initiated + stream that uses the promised stream identifier. The server uses this stream to + transmit an HTTP response, using the same sequence of frames as defined in . This stream becomes "half closed" + to the client after the initial HEADERS frame is sent. + + + + Once a client receives a PUSH_PROMISE frame and chooses to accept the + pushed response, the client SHOULD NOT issue any requests for the promised response + until after the promised stream has closed. + + + + If the client determines, for any reason, that it does not wish to receive the pushed + response from the server, or if the server takes too long to begin sending the promised + response, the client can send an RST_STREAM frame, using either the + CANCEL or REFUSED_STREAM codes, and referencing the pushed + stream's identifier. + + + A client can use the SETTINGS_MAX_CONCURRENT_STREAMS setting to limit the + number of responses that can be concurrently pushed by a server. Advertising a + SETTINGS_MAX_CONCURRENT_STREAMS value of zero disables server push by + preventing the server from creating the necessary streams. This does not prohibit a + server from sending PUSH_PROMISE frames; clients need to reset any + promised streams that are not wanted. + + + + Clients receiving a pushed response MUST validate that either the server is + authoritative (see ), or the proxy that provided the pushed + response is configured for the corresponding request. For example, a server that offers + a certificate for only the example.com DNS-ID or Common Name + is not permitted to push a response for https://www.example.org/doc. + + + The response for a PUSH_PROMISE stream begins with a + HEADERS frame, which immediately puts the stream into the “half closed + (remote)” state for the server and “half closed (local)” state for the client, and ends + with a frame bearing END_STREAM, which places the stream in the "closed" state. + + + The client never sends a frame with the END_STREAM flag for a server push. + + + +
    + +
    + +
    + + In HTTP/1.x, the pseudo-method CONNECT () is used to convert an HTTP connection into a tunnel to a remote host. + CONNECT is primarily used with HTTP proxies to establish a TLS session with an origin + server for the purposes of interacting with https resources. + + + In HTTP/2, the CONNECT method is used to establish a tunnel over a single HTTP/2 stream to + a remote host, for similar purposes. The HTTP header field mapping works as defined in + Request Header Fields, with a few + differences. Specifically: + + + The :method header field is set to CONNECT. + + + The :scheme and :path header + fields MUST be omitted. + + + The :authority header field contains the host and port to + connect to (equivalent to the authority-form of the request-target of CONNECT + requests, see ). + + + + + A proxy that supports CONNECT establishes a TCP connection to + the server identified in the :authority header field. Once + this connection is successfully established, the proxy sends a HEADERS + frame containing a 2xx series status code to the client, as defined in . + + + After the initial HEADERS frame sent by each peer, all subsequent + DATA frames correspond to data sent on the TCP connection. The payload of + any DATA frames sent by the client is transmitted by the proxy to the TCP + server; data received from the TCP server is assembled into DATA frames by + the proxy. Frame types other than DATA or stream management frames + (RST_STREAM, WINDOW_UPDATE, and PRIORITY) + MUST NOT be sent on a connected stream, and MUST be treated as a stream error if received. + + + The TCP connection can be closed by either peer. The END_STREAM flag on a + DATA frame is treated as being equivalent to the TCP FIN bit. A client is + expected to send a DATA frame with the END_STREAM flag set after receiving + a frame bearing the END_STREAM flag. A proxy that receives a DATA frame + with the END_STREAM flag set sends the attached data with the FIN bit set on the last TCP + segment. A proxy that receives a TCP segment with the FIN bit set sends a + DATA frame with the END_STREAM flag set. Note that the final TCP segment + or DATA frame could be empty. + + + A TCP connection error is signaled with RST_STREAM. A proxy treats any + error in the TCP connection, which includes receiving a TCP segment with the RST bit set, + as a stream error of type + CONNECT_ERROR. Correspondingly, a proxy MUST send a TCP segment with the + RST bit set if it detects an error with the stream or the HTTP/2 connection. + +
    +
    + +
    + + This section outlines attributes of the HTTP protocol that improve interoperability, reduce + exposure to known security vulnerabilities, or reduce the potential for implementation + variation. + + +
    + + HTTP/2 connections are persistent. For best performance, it is expected clients will not + close connections until it is determined that no further communication with a server is + necessary (for example, when a user navigates away from a particular web page), or until + the server closes the connection. + + + Clients SHOULD NOT open more than one HTTP/2 connection to a given host and port pair, + where host is derived from a URI, a selected alternative + service, or a configured proxy. + + + A client can create additional connections as replacements, either to replace connections + that are near to exhausting the available stream + identifier space, to refresh the keying material for a TLS connection, or to + replace connections that have encountered errors. + + + A client MAY open multiple connections to the same IP address and TCP port using different + Server Name Indication values or to provide different TLS + client certificates, but SHOULD avoid creating multiple connections with the same + configuration. + + + Servers are encouraged to maintain open connections for as long as possible, but are + permitted to terminate idle connections if necessary. When either endpoint chooses to + close the transport-layer TCP connection, the terminating endpoint SHOULD first send a + GOAWAY () frame so that both endpoints can reliably + determine whether previously sent frames have been processed and gracefully complete or + terminate any necessary remaining tasks. + + +
    + + Connections that are made to an origin servers, either directly or through a tunnel + created using the CONNECT method MAY be reused for + requests with multiple different URI authority components. A connection can be reused + as long as the origin server is authoritative. For + http resources, this depends on the host having resolved to + the same IP address. + + + For https resources, connection reuse additionally depends + on having a certificate that is valid for the host in the URI. An origin server might + offer a certificate with multiple subjectAltName attributes, + or names with wildcards, one of which is valid for the authority in the URI. For + example, a certificate with a subjectAltName of *.example.com might permit the use of the same connection for + requests to URIs starting with https://a.example.com/ and + https://b.example.com/. + + + In some deployments, reusing a connection for multiple origins can result in requests + being directed to the wrong origin server. For example, TLS termination might be + performed by a middlebox that uses the TLS Server Name Indication + (SNI) extension to select an origin server. This means that it is possible + for clients to send confidential information to servers that might not be the intended + target for the request, even though the server is otherwise authoritative. + + + A server that does not wish clients to reuse connections can indicate that it is not + authoritative for a request by sending a 421 (Misdirected Request) status code in response + to the request (see ). + + + A client that is configured to use a proxy over HTTP/2 directs requests to that proxy + through a single connection. That is, all requests sent via a proxy reuse the + connection to the proxy. + +
    + +
    + + The 421 (Misdirected Request) status code indicates that the request was directed at a + server that is not able to produce a response. This can be sent by a server that is not + configured to produce responses for the combination of scheme and authority that are + included in the request URI. + + + Clients receiving a 421 (Misdirected Request) response from a server MAY retry the + request - whether the request method is idempotent or not - over a different connection. + This is possible if a connection is reused () or if an alternative + service is selected (). + + + This status code MUST NOT be generated by proxies. + + + A 421 response is cacheable by default; i.e., unless otherwise indicated by the method + definition or explicit cache controls (see ). + +
    +
    + +
    + + Implementations of HTTP/2 MUST support TLS 1.2 for HTTP/2 over + TLS. The general TLS usage guidance in SHOULD be followed, with + some additional restrictions that are specific to HTTP/2. + + + + An implementation of HTTP/2 over TLS MUST use TLS 1.2 or higher with the restrictions on + feature set and cipher suite described in this section. Due to implementation + limitations, it might not be possible to fail TLS negotiation. An endpoint MUST + immediately terminate an HTTP/2 connection that does not meet these minimum requirements + with a connection error of type + INADEQUATE_SECURITY. + + +
    + + The TLS implementation MUST support the Server Name Indication + (SNI) extension to TLS. HTTP/2 clients MUST indicate the target domain name when + negotiating TLS. + + + The TLS implementation MUST disable compression. TLS compression can lead to the + exposure of information that would not otherwise be revealed . + Generic compression is unnecessary since HTTP/2 provides compression features that are + more aware of context and therefore likely to be more appropriate for use for + performance, security or other reasons. + + + The TLS implementation MUST disable renegotiation. An endpoint MUST treat a TLS + renegotiation as a connection error of type + PROTOCOL_ERROR. Note that disabling renegotiation can result in + long-lived connections becoming unusable due to limits on the number of messages the + underlying cipher suite can encipher. + + + A client MAY use renegotiation to provide confidentiality protection for client + credentials offered in the handshake, but any renegotiation MUST occur prior to sending + the connection preface. A server SHOULD request a client certificate if it sees a + renegotiation request immediately after establishing a connection. + + + This effectively prevents the use of renegotiation in response to a request for a + specific protected resource. A future specification might provide a way to support this + use case. + +
    + +
    + + The set of TLS cipher suites that are permitted in HTTP/2 is restricted. HTTP/2 MUST + only be used with cipher suites that have ephemeral key exchange, such as the ephemeral Diffie-Hellman (DHE) or the elliptic curve variant (ECDHE). Ephemeral key exchange MUST + have a minimum size of 2048 bits for DHE or security level of 128 bits for ECDHE. + Clients MUST accept DHE sizes of up to 4096 bits. HTTP MUST NOT be used with cipher + suites that use stream or block ciphers. Authenticated Encryption with Additional Data + (AEAD) modes, such as the Galois Counter Model (GCM) mode for + AES are acceptable. + + + The effect of these restrictions is that TLS 1.2 implementations could have + non-intersecting sets of available cipher suites, since these prevent the use of the + cipher suite that TLS 1.2 makes mandatory. To avoid this problem, implementations of + HTTP/2 that use TLS 1.2 MUST support TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 with P256 . + + + Clients MAY advertise support of cipher suites that are prohibited by the above + restrictions in order to allow for connection to servers that do not support HTTP/2. + This enables a fallback to protocols without these constraints without the additional + latency imposed by using a separate connection for fallback. + +
    +
    +
    + +
    +
    + + HTTP/2 relies on the HTTP/1.1 definition of authority for determining whether a server is + authoritative in providing a given response, see . This relies on local name resolution for the "http" + URI scheme, and the authenticated server identity for the "https" scheme (see ). + +
    + +
    + + In a cross-protocol attack, an attacker causes a client to initiate a transaction in one + protocol toward a server that understands a different protocol. An attacker might be able + to cause the transaction to appear as valid transaction in the second protocol. In + combination with the capabilities of the web context, this can be used to interact with + poorly protected servers in private networks. + + + Completing a TLS handshake with an ALPN identifier for HTTP/2 can be considered sufficient + protection against cross protocol attacks. ALPN provides a positive indication that a + server is willing to proceed with HTTP/2, which prevents attacks on other TLS-based + protocols. + + + The encryption in TLS makes it difficult for attackers to control the data which could be + used in a cross-protocol attack on a cleartext protocol. + + + The cleartext version of HTTP/2 has minimal protection against cross-protocol attacks. + The connection preface contains a string that is + designed to confuse HTTP/1.1 servers, but no special protection is offered for other + protocols. A server that is willing to ignore parts of an HTTP/1.1 request containing an + Upgrade header field in addition to the client connection preface could be exposed to a + cross-protocol attack. + +
    + +
    + + HTTP/2 header field names and values are encoded as sequences of octets with a length + prefix. This enables HTTP/2 to carry any string of octets as the name or value of a + header field. An intermediary that translates HTTP/2 requests or responses into HTTP/1.1 + directly could permit the creation of corrupted HTTP/1.1 messages. An attacker might + exploit this behavior to cause the intermediary to create HTTP/1.1 messages with illegal + header fields, extra header fields, or even new messages that are entirely falsified. + + + Header field names or values that contain characters not permitted by HTTP/1.1, including + carriage return (ASCII 0xd) or line feed (ASCII 0xa) MUST NOT be translated verbatim by an + intermediary, as stipulated in . + + + Translation from HTTP/1.x to HTTP/2 does not produce the same opportunity to an attacker. + Intermediaries that perform translation to HTTP/2 MUST remove any instances of the obs-fold production from header field values. + +
    + +
    + + Pushed responses do not have an explicit request from the client; the request + is provided by the server in the PUSH_PROMISE frame. + + + Caching responses that are pushed is possible based on the guidance provided by the origin + server in the Cache-Control header field. However, this can cause issues if a single + server hosts more than one tenant. For example, a server might offer multiple users each + a small portion of its URI space. + + + Where multiple tenants share space on the same server, that server MUST ensure that + tenants are not able to push representations of resources that they do not have authority + over. Failure to enforce this would allow a tenant to provide a representation that would + be served out of cache, overriding the actual representation that the authoritative tenant + provides. + + + Pushed responses for which an origin server is not authoritative (see + ) are never cached or used. + +
    + +
    + + An HTTP/2 connection can demand a greater commitment of resources to operate than a + HTTP/1.1 connection. The use of header compression and flow control depend on a + commitment of resources for storing a greater amount of state. Settings for these + features ensure that memory commitments for these features are strictly bounded. + + + The number of PUSH_PROMISE frames is not constrained in the same fashion. + A client that accepts server push SHOULD limit the number of streams it allows to be in + the "reserved (remote)" state. Excessive number of server push streams can be treated as + a stream error of type + ENHANCE_YOUR_CALM. + + + Processing capacity cannot be guarded as effectively as state capacity. + + + The SETTINGS frame can be abused to cause a peer to expend additional + processing time. This might be done by pointlessly changing SETTINGS parameters, setting + multiple undefined parameters, or changing the same setting multiple times in the same + frame. WINDOW_UPDATE or PRIORITY frames can be abused to + cause an unnecessary waste of resources. + + + Large numbers of small or empty frames can be abused to cause a peer to expend time + processing frame headers. Note however that some uses are entirely legitimate, such as + the sending of an empty DATA frame to end a stream. + + + Header compression also offers some opportunities to waste processing resources; see for more details on potential abuses. + + + Limits in SETTINGS parameters cannot be reduced instantaneously, which + leaves an endpoint exposed to behavior from a peer that could exceed the new limits. In + particular, immediately after establishing a connection, limits set by a server are not + known to clients and could be exceeded without being an obvious protocol violation. + + + All these features - i.e., SETTINGS changes, small frames, header + compression - have legitimate uses. These features become a burden only when they are + used unnecessarily or to excess. + + + An endpoint that doesn't monitor this behavior exposes itself to a risk of denial of + service attack. Implementations SHOULD track the use of these features and set limits on + their use. An endpoint MAY treat activity that is suspicious as a connection error of type + ENHANCE_YOUR_CALM. + + +
    + + A large header block can cause an implementation to + commit a large amount of state. Header fields that are critical for routing can appear + toward the end of a header block, which prevents streaming of header fields to their + ultimate destination. For this an other reasons, such as ensuring cache correctness, + means that an endpoint might need to buffer the entire header block. Since there is no + hard limit to the size of a header block, some endpoints could be forced commit a large + amount of available memory for header fields. + + + An endpoint can use the SETTINGS_MAX_HEADER_LIST_SIZE to advise peers of + limits that might apply on the size of header blocks. This setting is only advisory, so + endpoints MAY choose to send header blocks that exceed this limit and risk having the + request or response being treated as malformed. This setting specific to a connection, + so any request or response could encounter a hop with a lower, unknown limit. An + intermediary can attempt to avoid this problem by passing on values presented by + different peers, but they are not obligated to do so. + + + A server that receives a larger header block than it is willing to handle can send an + HTTP 431 (Request Header Fields Too Large) status code . A + client can discard responses that it cannot process. The header block MUST be processed + to ensure a consistent connection state, unless the connection is closed. + +
    +
    + +
    + + HTTP/2 enables greater use of compression for both header fields () and entity bodies. Compression can allow an attacker to recover + secret data when it is compressed in the same context as data under attacker control. + + + There are demonstrable attacks on compression that exploit the characteristics of the web + (e.g., ). The attacker induces multiple requests containing + varying plaintext, observing the length of the resulting ciphertext in each, which + reveals a shorter length when a guess about the secret is correct. + + + Implementations communicating on a secure channel MUST NOT compress content that includes + both confidential and attacker-controlled data unless separate compression dictionaries + are used for each source of data. Compression MUST NOT be used if the source of data + cannot be reliably determined. Generic stream compression, such as that provided by TLS + MUST NOT be used with HTTP/2 (). + + + Further considerations regarding the compression of header fields are described in . + +
    + +
    + + Padding within HTTP/2 is not intended as a replacement for general purpose padding, such + as might be provided by TLS. Redundant padding could even be + counterproductive. Correct application can depend on having specific knowledge of the + data that is being padded. + + + To mitigate attacks that rely on compression, disabling or limiting compression might be + preferable to padding as a countermeasure. + + + Padding can be used to obscure the exact size of frame content, and is provided to + mitigate specific attacks within HTTP. For example, attacks where compressed content + includes both attacker-controlled plaintext and secret data (see for example, ). + + + Use of padding can result in less protection than might seem immediately obvious. At + best, padding only makes it more difficult for an attacker to infer length information by + increasing the number of frames an attacker has to observe. Incorrectly implemented + padding schemes can be easily defeated. In particular, randomized padding with a + predictable distribution provides very little protection; similarly, padding payloads to a + fixed size exposes information as payload sizes cross the fixed size boundary, which could + be possible if an attacker can control plaintext. + + + Intermediaries SHOULD retain padding for DATA frames, but MAY drop padding + for HEADERS and PUSH_PROMISE frames. A valid reason for an + intermediary to change the amount of padding of frames is to improve the protections that + padding provides. + +
    + +
    + + Several characteristics of HTTP/2 provide an observer an opportunity to correlate actions + of a single client or server over time. This includes the value of settings, the manner + in which flow control windows are managed, the way priorities are allocated to streams, + timing of reactions to stimulus, and handling of any optional features. + + + As far as this creates observable differences in behavior, they could be used as a basis + for fingerprinting a specific client, as defined in . + +
    +
    + +
    + + A string for identifying HTTP/2 is entered into the "Application Layer Protocol Negotiation + (ALPN) Protocol IDs" registry established in . + + + This document establishes a registry for frame types, settings, and error codes. These new + registries are entered into a new "Hypertext Transfer Protocol (HTTP) 2 Parameters" section. + + + This document registers the HTTP2-Settings header field for + use in HTTP; and the 421 (Misdirected Request) status code. + + + This document registers the PRI method for use in HTTP, to avoid + collisions with the connection preface. + + +
    + + This document creates two registrations for the identification of HTTP/2 in the + "Application Layer Protocol Negotiation (ALPN) Protocol IDs" registry established in . + + + The "h2" string identifies HTTP/2 when used over TLS: + + HTTP/2 over TLS + 0x68 0x32 ("h2") + This document + + + + The "h2c" string identifies HTTP/2 when used over cleartext TCP: + + HTTP/2 over TCP + 0x68 0x32 0x63 ("h2c") + This document + + +
    + +
    + + This document establishes a registry for HTTP/2 frame type codes. The "HTTP/2 Frame + Type" registry manages an 8-bit space. The "HTTP/2 Frame Type" registry operates under + either of the "IETF Review" or "IESG Approval" policies for + values between 0x00 and 0xef, with values between 0xf0 and 0xff being reserved for + experimental use. + + + New entries in this registry require the following information: + + + A name or label for the frame type. + + + The 8-bit code assigned to the frame type. + + + A reference to a specification that includes a description of the frame layout, + it's semantics and flags that the frame type uses, including any parts of the frame + that are conditionally present based on the value of flags. + + + + + The entries in the following table are registered by this document. + + + Frame Type + Code + Section + DATA0x0 + HEADERS0x1 + PRIORITY0x2 + RST_STREAM0x3 + SETTINGS0x4 + PUSH_PROMISE0x5 + PING0x6 + GOAWAY0x7 + WINDOW_UPDATE0x8 + CONTINUATION0x9 + +
    + +
    + + This document establishes a registry for HTTP/2 settings. The "HTTP/2 Settings" registry + manages a 16-bit space. The "HTTP/2 Settings" registry operates under the "Expert Review" policy for values in the range from 0x0000 to + 0xefff, with values between and 0xf000 and 0xffff being reserved for experimental use. + + + New registrations are advised to provide the following information: + + + A symbolic name for the setting. Specifying a setting name is optional. + + + The 16-bit code assigned to the setting. + + + An initial value for the setting. + + + An optional reference to a specification that describes the use of the setting. + + + + + An initial set of setting registrations can be found in . + + + Name + Code + Initial Value + Specification + HEADER_TABLE_SIZE + 0x14096 + ENABLE_PUSH + 0x21 + MAX_CONCURRENT_STREAMS + 0x3(infinite) + INITIAL_WINDOW_SIZE + 0x465535 + MAX_FRAME_SIZE + 0x516384 + MAX_HEADER_LIST_SIZE + 0x6(infinite) + + +
    + +
    + + This document establishes a registry for HTTP/2 error codes. The "HTTP/2 Error Code" + registry manages a 32-bit space. The "HTTP/2 Error Code" registry operates under the + "Expert Review" policy. + + + Registrations for error codes are required to include a description of the error code. An + expert reviewer is advised to examine new registrations for possible duplication with + existing error codes. Use of existing registrations is to be encouraged, but not + mandated. + + + New registrations are advised to provide the following information: + + + A name for the error code. Specifying an error code name is optional. + + + The 32-bit error code value. + + + A brief description of the error code semantics, longer if no detailed specification + is provided. + + + An optional reference for a specification that defines the error code. + + + + + The entries in the following table are registered by this document. + + + Name + Code + Description + Specification + NO_ERROR0x0 + Graceful shutdown + + PROTOCOL_ERROR0x1 + Protocol error detected + + INTERNAL_ERROR0x2 + Implementation fault + + FLOW_CONTROL_ERROR0x3 + Flow control limits exceeded + + SETTINGS_TIMEOUT0x4 + Settings not acknowledged + + STREAM_CLOSED0x5 + Frame received for closed stream + + FRAME_SIZE_ERROR0x6 + Frame size incorrect + + REFUSED_STREAM0x7 + Stream not processed + + CANCEL0x8 + Stream cancelled + + COMPRESSION_ERROR0x9 + Compression state not updated + + CONNECT_ERROR0xa + TCP connection error for CONNECT method + + ENHANCE_YOUR_CALM0xb + Processing capacity exceeded + + INADEQUATE_SECURITY0xc + Negotiated TLS parameters not acceptable + + + +
    + +
    + + This section registers the HTTP2-Settings header field in the + Permanent Message Header Field Registry. + + + HTTP2-Settings + + + http + + + standard + + + IETF + + + of this document + + + This header field is only used by an HTTP/2 client for Upgrade-based negotiation. + + + +
    + +
    + + This section registers the PRI method in the HTTP Method + Registry (). + + + PRI + + + No + + + No + + + of this document + + + This method is never used by an actual client. This method will appear to be used + when an HTTP/1.1 server or intermediary attempts to parse an HTTP/2 connection + preface. + + + +
    + +
    + + This document registers the 421 (Misdirected Request) HTTP Status code in the Hypertext + Transfer Protocol (HTTP) Status Code Registry (). + + + + + 421 + + + Misdirected Request + + + of this document + + + +
    + +
    + +
    + + This document includes substantial input from the following individuals: + + + Adam Langley, Wan-Teh Chang, Jim Morrison, Mark Nottingham, Alyssa Wilk, Costin + Manolache, William Chan, Vitaliy Lvin, Joe Chan, Adam Barth, Ryan Hamilton, Gavin + Peters, Kent Alstad, Kevin Lindsay, Paul Amer, Fan Yang, Jonathan Leighton (SPDY + contributors). + + + Gabriel Montenegro and Willy Tarreau (Upgrade mechanism). + + + William Chan, Salvatore Loreto, Osama Mazahir, Gabriel Montenegro, Jitu Padhye, Roberto + Peon, Rob Trace (Flow control). + + + Mike Bishop (Extensibility). + + + Mark Nottingham, Julian Reschke, James Snell, Jeff Pinner, Mike Bishop, Herve Ruellan + (Substantial editorial contributions). + + + Kari Hurtta, Tatsuhiro Tsujikawa, Greg Wilkins, Poul-Henning Kamp. + + + Alexey Melnikov was an editor of this document during 2013. + + + A substantial proportion of Martin's contribution was supported by Microsoft during his + employment there. + + + +
    +
    + + + + + + HPACK - Header Compression for HTTP/2 + + + + + + + + + + + + Transmission Control Protocol + + + University of Southern California (USC)/Information Sciences + Institute + + + + + + + + + + + Key words for use in RFCs to Indicate Requirement Levels + + + Harvard University +
    sob@harvard.edu
    +
    + +
    + + +
    + + + + + HTTP Over TLS + + + + + + + + + + Uniform Resource Identifier (URI): Generic + Syntax + + + + + + + + + + + + The Base16, Base32, and Base64 Data Encodings + + + + + + + + + Guidelines for Writing an IANA Considerations Section in RFCs + + + + + + + + + + + Augmented BNF for Syntax Specifications: ABNF + + + + + + + + + + + The Transport Layer Security (TLS) Protocol Version 1.2 + + + + + + + + + + + Transport Layer Security (TLS) Extensions: Extension Definitions + + + + + + + + + + Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension + + + + + + + + + + + + + TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois + Counter Mode (GCM) + + + + + + + + + + + Digital Signature Standard (DSS) + + NIST + + + + + + + + + Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing + + Adobe Systems Incorporated +
    fielding@gbiv.com
    +
    + + greenbytes GmbH +
    julian.reschke@greenbytes.de
    +
    + +
    + + +
    + + + + Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content + + Adobe Systems Incorporated +
    fielding@gbiv.com
    +
    + + greenbytes GmbH +
    julian.reschke@greenbytes.de
    +
    + +
    + + +
    + + + Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests + + Adobe Systems Incorporated +
    fielding@gbiv.com
    +
    + + greenbytes GmbH +
    julian.reschke@greenbytes.de
    +
    + +
    + +
    + + + Hypertext Transfer Protocol (HTTP/1.1): Range Requests + + Adobe Systems Incorporated +
    fielding@gbiv.com
    +
    + + World Wide Web Consortium +
    ylafon@w3.org
    +
    + + greenbytes GmbH +
    julian.reschke@greenbytes.de
    +
    + +
    + +
    + + + Hypertext Transfer Protocol (HTTP/1.1): Caching + + Adobe Systems Incorporated +
    fielding@gbiv.com
    +
    + + Akamai +
    mnot@mnot.net
    +
    + + greenbytes GmbH +
    julian.reschke@greenbytes.de
    +
    + +
    + + +
    + + + Hypertext Transfer Protocol (HTTP/1.1): Authentication + + Adobe Systems Incorporated +
    fielding@gbiv.com
    +
    + + greenbytes GmbH +
    julian.reschke@greenbytes.de
    +
    + +
    + + +
    + + + + HTTP State Management Mechanism + + + + + +
    + + + + + + TCP Extensions for High Performance + + + + + + + + + + + + Transport Layer Security Protocol Compression Methods + + + + + + + + + Additional HTTP Status Codes + + + + + + + + + + + Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) + + + + + + + + + + + + + + + AES Galois Counter Mode (GCM) Cipher Suites for TLS + + + + + + + + + + + + HTML5 + + + + + + + + + + + Latest version available at + . + + + + + + + Talking to Yourself for Fun and Profit + + + + + + + + + + + + + + BREACH: Reviving the CRIME Attack + + + + + + + + + + + Registration Procedures for Message Header Fields + + Nine by Nine +
    GK-IETF@ninebynine.org
    +
    + + BEA Systems +
    mnot@pobox.com
    +
    + + HP Labs +
    JeffMogul@acm.org
    +
    + +
    + + +
    + + + + Recommendations for Secure Use of TLS and DTLS + + + + + + + + + + + + + + + + + + HTTP Alternative Services + + + Akamai + + + Mozilla + + + greenbytes + + + + + + +
    + +
    + + This section is to be removed by RFC Editor before publication. + + +
    + + Renamed Not Authoritative status code to Misdirected Request. + +
    + +
    + + Pseudo-header fields are now required to appear strictly before regular ones. + + + Restored 1xx series status codes, except 101. + + + Changed frame length field 24-bits. Expanded frame header to 9 octets. Added a setting + to limit the damage. + + + Added a setting to advise peers of header set size limits. + + + Removed segments. + + + Made non-semantic-bearing HEADERS frames illegal in the HTTP mapping. + +
    + +
    + + Restored extensibility options. + + + Restricting TLS cipher suites to AEAD only. + + + Removing Content-Encoding requirements. + + + Permitting the use of PRIORITY after stream close. + + + Removed ALTSVC frame. + + + Removed BLOCKED frame. + + + Reducing the maximum padding size to 256 octets; removing padding from + CONTINUATION frames. + + + Removed per-frame GZIP compression. + +
    + +
    + + Added BLOCKED frame (at risk). + + + Simplified priority scheme. + + + Added DATA per-frame GZIP compression. + +
    + +
    + + Changed "connection header" to "connection preface" to avoid confusion. + + + Added dependency-based stream prioritization. + + + Added "h2c" identifier to distinguish between cleartext and secured HTTP/2. + + + Adding missing padding to PUSH_PROMISE. + + + Integrate ALTSVC frame and supporting text. + + + Dropping requirement on "deflate" Content-Encoding. + + + Improving security considerations around use of compression. + +
    + +
    + + Adding padding for data frames. + + + Renumbering frame types, error codes, and settings. + + + Adding INADEQUATE_SECURITY error code. + + + Updating TLS usage requirements to 1.2; forbidding TLS compression. + + + Removing extensibility for frames and settings. + + + Changing setting identifier size. + + + Removing the ability to disable flow control. + + + Changing the protocol identification token to "h2". + + + Changing the use of :authority to make it optional and to allow userinfo in non-HTTP + cases. + + + Allowing split on 0x0 for Cookie. + + + Reserved PRI method in HTTP/1.1 to avoid possible future collisions. + +
    + +
    + + Added cookie crumbling for more efficient header compression. + + + Added header field ordering with the value-concatenation mechanism. + +
    + +
    + + Marked draft for implementation. + +
    + +
    + + Adding definition for CONNECT method. + + + Constraining the use of push to safe, cacheable methods with no request body. + + + Changing from :host to :authority to remove any potential confusion. + + + Adding setting for header compression table size. + + + Adding settings acknowledgement. + + + Removing unnecessary and potentially problematic flags from CONTINUATION. + + + Added denial of service considerations. + +
    +
    + + Marking the draft ready for implementation. + + + Renumbering END_PUSH_PROMISE flag. + + + Editorial clarifications and changes. + +
    + +
    + + Added CONTINUATION frame for HEADERS and PUSH_PROMISE. + + + PUSH_PROMISE is no longer implicitly prohibited if SETTINGS_MAX_CONCURRENT_STREAMS is + zero. + + + Push expanded to allow all safe methods without a request body. + + + Clarified the use of HTTP header fields in requests and responses. Prohibited HTTP/1.1 + hop-by-hop header fields. + + + Requiring that intermediaries not forward requests with missing or illegal routing + :-headers. + + + Clarified requirements around handling different frames after stream close, stream reset + and GOAWAY. + + + Added more specific prohibitions for sending of different frame types in various stream + states. + + + Making the last received setting value the effective value. + + + Clarified requirements on TLS version, extension and ciphers. + +
    + +
    + + Committed major restructuring atrocities. + + + Added reference to first header compression draft. + + + Added more formal description of frame lifecycle. + + + Moved END_STREAM (renamed from FINAL) back to HEADERS/DATA. + + + Removed HEADERS+PRIORITY, added optional priority to HEADERS frame. + + + Added PRIORITY frame. + +
    + +
    + + Added continuations to frames carrying header blocks. + + + Replaced use of "session" with "connection" to avoid confusion with other HTTP stateful + concepts, like cookies. + + + Removed "message". + + + Switched to TLS ALPN from NPN. + + + Editorial changes. + +
    + +
    + + Added IANA considerations section for frame types, error codes and settings. + + + Removed data frame compression. + + + Added PUSH_PROMISE. + + + Added globally applicable flags to framing. + + + Removed zlib-based header compression mechanism. + + + Updated references. + + + Clarified stream identifier reuse. + + + Removed CREDENTIALS frame and associated mechanisms. + + + Added advice against naive implementation of flow control. + + + Added session header section. + + + Restructured frame header. Removed distinction between data and control frames. + + + Altered flow control properties to include session-level limits. + + + Added note on cacheability of pushed resources and multiple tenant servers. + + + Changed protocol label form based on discussions. + +
    + +
    + + Changed title throughout. + + + Removed section on Incompatibilities with SPDY draft#2. + + + Changed INTERNAL_ERROR on GOAWAY to have a value of 2 . + + + Replaced abstract and introduction. + + + Added section on starting HTTP/2.0, including upgrade mechanism. + + + Removed unused references. + + + Added flow control principles based on . + +
    + +
    + + Adopted as base for draft-ietf-httpbis-http2. + + + Updated authors/editors list. + + + Added status note. + +
    +
    + +
    +
    + diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go new file mode 100644 index 0000000..84d042d --- /dev/null +++ b/vendor/golang.org/x/net/http2/transport.go @@ -0,0 +1,2128 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Transport code. + +package http2 + +import ( + "bufio" + "bytes" + "compress/gzip" + "crypto/rand" + "crypto/tls" + "errors" + "fmt" + "io" + "io/ioutil" + "log" + "math" + "net" + "net/http" + "sort" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/net/http2/hpack" + "golang.org/x/net/idna" + "golang.org/x/net/lex/httplex" +) + +const ( + // transportDefaultConnFlow is how many connection-level flow control + // tokens we give the server at start-up, past the default 64k. + transportDefaultConnFlow = 1 << 30 + + // transportDefaultStreamFlow is how many stream-level flow + // control tokens we announce to the peer, and how many bytes + // we buffer per stream. + transportDefaultStreamFlow = 4 << 20 + + // transportDefaultStreamMinRefresh is the minimum number of bytes we'll send + // a stream-level WINDOW_UPDATE for at a time. + transportDefaultStreamMinRefresh = 4 << 10 + + defaultUserAgent = "Go-http-client/2.0" +) + +// Transport is an HTTP/2 Transport. +// +// A Transport internally caches connections to servers. It is safe +// for concurrent use by multiple goroutines. +type Transport struct { + // DialTLS specifies an optional dial function for creating + // TLS connections for requests. + // + // If DialTLS is nil, tls.Dial is used. + // + // If the returned net.Conn has a ConnectionState method like tls.Conn, + // it will be used to set http.Response.TLS. + DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error) + + // TLSClientConfig specifies the TLS configuration to use with + // tls.Client. If nil, the default configuration is used. + TLSClientConfig *tls.Config + + // ConnPool optionally specifies an alternate connection pool to use. + // If nil, the default is used. + ConnPool ClientConnPool + + // DisableCompression, if true, prevents the Transport from + // requesting compression with an "Accept-Encoding: gzip" + // request header when the Request contains no existing + // Accept-Encoding value. If the Transport requests gzip on + // its own and gets a gzipped response, it's transparently + // decoded in the Response.Body. However, if the user + // explicitly requested gzip it is not automatically + // uncompressed. + DisableCompression bool + + // AllowHTTP, if true, permits HTTP/2 requests using the insecure, + // plain-text "http" scheme. Note that this does not enable h2c support. + AllowHTTP bool + + // MaxHeaderListSize is the http2 SETTINGS_MAX_HEADER_LIST_SIZE to + // send in the initial settings frame. It is how many bytes + // of response headers are allow. Unlike the http2 spec, zero here + // means to use a default limit (currently 10MB). If you actually + // want to advertise an ulimited value to the peer, Transport + // interprets the highest possible value here (0xffffffff or 1<<32-1) + // to mean no limit. + MaxHeaderListSize uint32 + + // t1, if non-nil, is the standard library Transport using + // this transport. Its settings are used (but not its + // RoundTrip method, etc). + t1 *http.Transport + + connPoolOnce sync.Once + connPoolOrDef ClientConnPool // non-nil version of ConnPool +} + +func (t *Transport) maxHeaderListSize() uint32 { + if t.MaxHeaderListSize == 0 { + return 10 << 20 + } + if t.MaxHeaderListSize == 0xffffffff { + return 0 + } + return t.MaxHeaderListSize +} + +func (t *Transport) disableCompression() bool { + return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression) +} + +var errTransportVersion = errors.New("http2: ConfigureTransport is only supported starting at Go 1.6") + +// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2. +// It requires Go 1.6 or later and returns an error if the net/http package is too old +// or if t1 has already been HTTP/2-enabled. +func ConfigureTransport(t1 *http.Transport) error { + _, err := configureTransport(t1) // in configure_transport.go (go1.6) or not_go16.go + return err +} + +func (t *Transport) connPool() ClientConnPool { + t.connPoolOnce.Do(t.initConnPool) + return t.connPoolOrDef +} + +func (t *Transport) initConnPool() { + if t.ConnPool != nil { + t.connPoolOrDef = t.ConnPool + } else { + t.connPoolOrDef = &clientConnPool{t: t} + } +} + +// ClientConn is the state of a single HTTP/2 client connection to an +// HTTP/2 server. +type ClientConn struct { + t *Transport + tconn net.Conn // usually *tls.Conn, except specialized impls + tlsState *tls.ConnectionState // nil only for specialized impls + singleUse bool // whether being used for a single http.Request + + // readLoop goroutine fields: + readerDone chan struct{} // closed on error + readerErr error // set before readerDone is closed + + idleTimeout time.Duration // or 0 for never + idleTimer *time.Timer + + mu sync.Mutex // guards following + cond *sync.Cond // hold mu; broadcast on flow/closed changes + flow flow // our conn-level flow control quota (cs.flow is per stream) + inflow flow // peer's conn-level flow control + closed bool + wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back + goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received + goAwayDebug string // goAway frame's debug data, retained as a string + streams map[uint32]*clientStream // client-initiated + nextStreamID uint32 + pings map[[8]byte]chan struct{} // in flight ping data to notification channel + bw *bufio.Writer + br *bufio.Reader + fr *Framer + lastActive time.Time + // Settings from peer: (also guarded by mu) + maxFrameSize uint32 + maxConcurrentStreams uint32 + initialWindowSize uint32 + + hbuf bytes.Buffer // HPACK encoder writes into this + henc *hpack.Encoder + freeBuf [][]byte + + wmu sync.Mutex // held while writing; acquire AFTER mu if holding both + werr error // first write error that has occurred +} + +// clientStream is the state for a single HTTP/2 stream. One of these +// is created for each Transport.RoundTrip call. +type clientStream struct { + cc *ClientConn + req *http.Request + trace *clientTrace // or nil + ID uint32 + resc chan resAndError + bufPipe pipe // buffered pipe with the flow-controlled response payload + startedWrite bool // started request body write; guarded by cc.mu + requestedGzip bool + on100 func() // optional code to run if get a 100 continue response + + flow flow // guarded by cc.mu + inflow flow // guarded by cc.mu + bytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read + readErr error // sticky read error; owned by transportResponseBody.Read + stopReqBody error // if non-nil, stop writing req body; guarded by cc.mu + didReset bool // whether we sent a RST_STREAM to the server; guarded by cc.mu + + peerReset chan struct{} // closed on peer reset + resetErr error // populated before peerReset is closed + + done chan struct{} // closed when stream remove from cc.streams map; close calls guarded by cc.mu + + // owned by clientConnReadLoop: + firstByte bool // got the first response byte + pastHeaders bool // got first MetaHeadersFrame (actual headers) + pastTrailers bool // got optional second MetaHeadersFrame (trailers) + + trailer http.Header // accumulated trailers + resTrailer *http.Header // client's Response.Trailer +} + +// awaitRequestCancel runs in its own goroutine and waits for the user +// to cancel a RoundTrip request, its context to expire, or for the +// request to be done (any way it might be removed from the cc.streams +// map: peer reset, successful completion, TCP connection breakage, +// etc) +func (cs *clientStream) awaitRequestCancel(req *http.Request) { + ctx := reqContext(req) + if req.Cancel == nil && ctx.Done() == nil { + return + } + select { + case <-req.Cancel: + cs.cancelStream() + cs.bufPipe.CloseWithError(errRequestCanceled) + case <-ctx.Done(): + cs.cancelStream() + cs.bufPipe.CloseWithError(ctx.Err()) + case <-cs.done: + } +} + +func (cs *clientStream) cancelStream() { + cs.cc.mu.Lock() + didReset := cs.didReset + cs.didReset = true + cs.cc.mu.Unlock() + + if !didReset { + cs.cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) + } +} + +// checkResetOrDone reports any error sent in a RST_STREAM frame by the +// server, or errStreamClosed if the stream is complete. +func (cs *clientStream) checkResetOrDone() error { + select { + case <-cs.peerReset: + return cs.resetErr + case <-cs.done: + return errStreamClosed + default: + return nil + } +} + +func (cs *clientStream) abortRequestBodyWrite(err error) { + if err == nil { + panic("nil error") + } + cc := cs.cc + cc.mu.Lock() + cs.stopReqBody = err + cc.cond.Broadcast() + cc.mu.Unlock() +} + +type stickyErrWriter struct { + w io.Writer + err *error +} + +func (sew stickyErrWriter) Write(p []byte) (n int, err error) { + if *sew.err != nil { + return 0, *sew.err + } + n, err = sew.w.Write(p) + *sew.err = err + return +} + +var ErrNoCachedConn = errors.New("http2: no cached connection was available") + +// RoundTripOpt are options for the Transport.RoundTripOpt method. +type RoundTripOpt struct { + // OnlyCachedConn controls whether RoundTripOpt may + // create a new TCP connection. If set true and + // no cached connection is available, RoundTripOpt + // will return ErrNoCachedConn. + OnlyCachedConn bool +} + +func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { + return t.RoundTripOpt(req, RoundTripOpt{}) +} + +// authorityAddr returns a given authority (a host/IP, or host:port / ip:port) +// and returns a host:port. The port 443 is added if needed. +func authorityAddr(scheme string, authority string) (addr string) { + host, port, err := net.SplitHostPort(authority) + if err != nil { // authority didn't have a port + port = "443" + if scheme == "http" { + port = "80" + } + host = authority + } + if a, err := idna.ToASCII(host); err == nil { + host = a + } + // IPv6 address literal, without a port: + if strings.HasPrefix(host, "[") && strings.HasSuffix(host, "]") { + return host + ":" + port + } + return net.JoinHostPort(host, port) +} + +// RoundTripOpt is like RoundTrip, but takes options. +func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) { + if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) { + return nil, errors.New("http2: unsupported scheme") + } + + addr := authorityAddr(req.URL.Scheme, req.URL.Host) + for { + cc, err := t.connPool().GetClientConn(req, addr) + if err != nil { + t.vlogf("http2: Transport failed to get client conn for %s: %v", addr, err) + return nil, err + } + traceGotConn(req, cc) + res, err := cc.RoundTrip(req) + if err != nil { + if req, err = shouldRetryRequest(req, err); err == nil { + continue + } + } + if err != nil { + t.vlogf("RoundTrip failure: %v", err) + return nil, err + } + return res, nil + } +} + +// CloseIdleConnections closes any connections which were previously +// connected from previous requests but are now sitting idle. +// It does not interrupt any connections currently in use. +func (t *Transport) CloseIdleConnections() { + if cp, ok := t.connPool().(clientConnPoolIdleCloser); ok { + cp.closeIdleConnections() + } +} + +var ( + errClientConnClosed = errors.New("http2: client conn is closed") + errClientConnUnusable = errors.New("http2: client conn not usable") + + errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY") + errClientConnGotGoAwayAfterSomeReqBody = errors.New("http2: Transport received Server's graceful shutdown GOAWAY; some request body already written") +) + +// shouldRetryRequest is called by RoundTrip when a request fails to get +// response headers. It is always called with a non-nil error. +// It returns either a request to retry (either the same request, or a +// modified clone), or an error if the request can't be replayed. +func shouldRetryRequest(req *http.Request, err error) (*http.Request, error) { + switch err { + default: + return nil, err + case errClientConnUnusable, errClientConnGotGoAway: + return req, nil + case errClientConnGotGoAwayAfterSomeReqBody: + // If the Body is nil (or http.NoBody), it's safe to reuse + // this request and its Body. + if req.Body == nil || reqBodyIsNoBody(req.Body) { + return req, nil + } + // Otherwise we depend on the Request having its GetBody + // func defined. + getBody := reqGetBody(req) // Go 1.8: getBody = req.GetBody + if getBody == nil { + return nil, errors.New("http2: Transport: peer server initiated graceful shutdown after some of Request.Body was written; define Request.GetBody to avoid this error") + } + body, err := getBody() + if err != nil { + return nil, err + } + newReq := *req + newReq.Body = body + return &newReq, nil + } +} + +func (t *Transport) dialClientConn(addr string, singleUse bool) (*ClientConn, error) { + host, _, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + tconn, err := t.dialTLS()("tcp", addr, t.newTLSConfig(host)) + if err != nil { + return nil, err + } + return t.newClientConn(tconn, singleUse) +} + +func (t *Transport) newTLSConfig(host string) *tls.Config { + cfg := new(tls.Config) + if t.TLSClientConfig != nil { + *cfg = *cloneTLSConfig(t.TLSClientConfig) + } + if !strSliceContains(cfg.NextProtos, NextProtoTLS) { + cfg.NextProtos = append([]string{NextProtoTLS}, cfg.NextProtos...) + } + if cfg.ServerName == "" { + cfg.ServerName = host + } + return cfg +} + +func (t *Transport) dialTLS() func(string, string, *tls.Config) (net.Conn, error) { + if t.DialTLS != nil { + return t.DialTLS + } + return t.dialTLSDefault +} + +func (t *Transport) dialTLSDefault(network, addr string, cfg *tls.Config) (net.Conn, error) { + cn, err := tls.Dial(network, addr, cfg) + if err != nil { + return nil, err + } + if err := cn.Handshake(); err != nil { + return nil, err + } + if !cfg.InsecureSkipVerify { + if err := cn.VerifyHostname(cfg.ServerName); err != nil { + return nil, err + } + } + state := cn.ConnectionState() + if p := state.NegotiatedProtocol; p != NextProtoTLS { + return nil, fmt.Errorf("http2: unexpected ALPN protocol %q; want %q", p, NextProtoTLS) + } + if !state.NegotiatedProtocolIsMutual { + return nil, errors.New("http2: could not negotiate protocol mutually") + } + return cn, nil +} + +// disableKeepAlives reports whether connections should be closed as +// soon as possible after handling the first request. +func (t *Transport) disableKeepAlives() bool { + return t.t1 != nil && t.t1.DisableKeepAlives +} + +func (t *Transport) expectContinueTimeout() time.Duration { + if t.t1 == nil { + return 0 + } + return transportExpectContinueTimeout(t.t1) +} + +func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { + return t.newClientConn(c, false) +} + +func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) { + cc := &ClientConn{ + t: t, + tconn: c, + readerDone: make(chan struct{}), + nextStreamID: 1, + maxFrameSize: 16 << 10, // spec default + initialWindowSize: 65535, // spec default + maxConcurrentStreams: 1000, // "infinite", per spec. 1000 seems good enough. + streams: make(map[uint32]*clientStream), + singleUse: singleUse, + wantSettingsAck: true, + pings: make(map[[8]byte]chan struct{}), + } + if d := t.idleConnTimeout(); d != 0 { + cc.idleTimeout = d + cc.idleTimer = time.AfterFunc(d, cc.onIdleTimeout) + } + if VerboseLogs { + t.vlogf("http2: Transport creating client conn %p to %v", cc, c.RemoteAddr()) + } + + cc.cond = sync.NewCond(&cc.mu) + cc.flow.add(int32(initialWindowSize)) + + // TODO: adjust this writer size to account for frame size + + // MTU + crypto/tls record padding. + cc.bw = bufio.NewWriter(stickyErrWriter{c, &cc.werr}) + cc.br = bufio.NewReader(c) + cc.fr = NewFramer(cc.bw, cc.br) + cc.fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil) + cc.fr.MaxHeaderListSize = t.maxHeaderListSize() + + // TODO: SetMaxDynamicTableSize, SetMaxDynamicTableSizeLimit on + // henc in response to SETTINGS frames? + cc.henc = hpack.NewEncoder(&cc.hbuf) + + if cs, ok := c.(connectionStater); ok { + state := cs.ConnectionState() + cc.tlsState = &state + } + + initialSettings := []Setting{ + {ID: SettingEnablePush, Val: 0}, + {ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow}, + } + if max := t.maxHeaderListSize(); max != 0 { + initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max}) + } + + cc.bw.Write(clientPreface) + cc.fr.WriteSettings(initialSettings...) + cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow) + cc.inflow.add(transportDefaultConnFlow + initialWindowSize) + cc.bw.Flush() + if cc.werr != nil { + return nil, cc.werr + } + + go cc.readLoop() + return cc, nil +} + +func (cc *ClientConn) setGoAway(f *GoAwayFrame) { + cc.mu.Lock() + defer cc.mu.Unlock() + + old := cc.goAway + cc.goAway = f + + // Merge the previous and current GoAway error frames. + if cc.goAwayDebug == "" { + cc.goAwayDebug = string(f.DebugData()) + } + if old != nil && old.ErrCode != ErrCodeNo { + cc.goAway.ErrCode = old.ErrCode + } + last := f.LastStreamID + for streamID, cs := range cc.streams { + if streamID > last { + select { + case cs.resc <- resAndError{err: errClientConnGotGoAway}: + default: + } + } + } +} + +func (cc *ClientConn) CanTakeNewRequest() bool { + cc.mu.Lock() + defer cc.mu.Unlock() + return cc.canTakeNewRequestLocked() +} + +func (cc *ClientConn) canTakeNewRequestLocked() bool { + if cc.singleUse && cc.nextStreamID > 1 { + return false + } + return cc.goAway == nil && !cc.closed && + int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams) && + cc.nextStreamID < math.MaxInt32 +} + +// onIdleTimeout is called from a time.AfterFunc goroutine. It will +// only be called when we're idle, but because we're coming from a new +// goroutine, there could be a new request coming in at the same time, +// so this simply calls the synchronized closeIfIdle to shut down this +// connection. The timer could just call closeIfIdle, but this is more +// clear. +func (cc *ClientConn) onIdleTimeout() { + cc.closeIfIdle() +} + +func (cc *ClientConn) closeIfIdle() { + cc.mu.Lock() + if len(cc.streams) > 0 { + cc.mu.Unlock() + return + } + cc.closed = true + nextID := cc.nextStreamID + // TODO: do clients send GOAWAY too? maybe? Just Close: + cc.mu.Unlock() + + if VerboseLogs { + cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, nextID-2) + } + cc.tconn.Close() +} + +const maxAllocFrameSize = 512 << 10 + +// frameBuffer returns a scratch buffer suitable for writing DATA frames. +// They're capped at the min of the peer's max frame size or 512KB +// (kinda arbitrarily), but definitely capped so we don't allocate 4GB +// bufers. +func (cc *ClientConn) frameScratchBuffer() []byte { + cc.mu.Lock() + size := cc.maxFrameSize + if size > maxAllocFrameSize { + size = maxAllocFrameSize + } + for i, buf := range cc.freeBuf { + if len(buf) >= int(size) { + cc.freeBuf[i] = nil + cc.mu.Unlock() + return buf[:size] + } + } + cc.mu.Unlock() + return make([]byte, size) +} + +func (cc *ClientConn) putFrameScratchBuffer(buf []byte) { + cc.mu.Lock() + defer cc.mu.Unlock() + const maxBufs = 4 // arbitrary; 4 concurrent requests per conn? investigate. + if len(cc.freeBuf) < maxBufs { + cc.freeBuf = append(cc.freeBuf, buf) + return + } + for i, old := range cc.freeBuf { + if old == nil { + cc.freeBuf[i] = buf + return + } + } + // forget about it. +} + +// errRequestCanceled is a copy of net/http's errRequestCanceled because it's not +// exported. At least they'll be DeepEqual for h1-vs-h2 comparisons tests. +var errRequestCanceled = errors.New("net/http: request canceled") + +func commaSeparatedTrailers(req *http.Request) (string, error) { + keys := make([]string, 0, len(req.Trailer)) + for k := range req.Trailer { + k = http.CanonicalHeaderKey(k) + switch k { + case "Transfer-Encoding", "Trailer", "Content-Length": + return "", &badStringError{"invalid Trailer key", k} + } + keys = append(keys, k) + } + if len(keys) > 0 { + sort.Strings(keys) + return strings.Join(keys, ","), nil + } + return "", nil +} + +func (cc *ClientConn) responseHeaderTimeout() time.Duration { + if cc.t.t1 != nil { + return cc.t.t1.ResponseHeaderTimeout + } + // No way to do this (yet?) with just an http2.Transport. Probably + // no need. Request.Cancel this is the new way. We only need to support + // this for compatibility with the old http.Transport fields when + // we're doing transparent http2. + return 0 +} + +// checkConnHeaders checks whether req has any invalid connection-level headers. +// per RFC 7540 section 8.1.2.2: Connection-Specific Header Fields. +// Certain headers are special-cased as okay but not transmitted later. +func checkConnHeaders(req *http.Request) error { + if v := req.Header.Get("Upgrade"); v != "" { + return fmt.Errorf("http2: invalid Upgrade request header: %q", req.Header["Upgrade"]) + } + if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { + return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv) + } + if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "close" && vv[0] != "keep-alive") { + return fmt.Errorf("http2: invalid Connection request header: %q", vv) + } + return nil +} + +// actualContentLength returns a sanitized version of +// req.ContentLength, where 0 actually means zero (not unknown) and -1 +// means unknown. +func actualContentLength(req *http.Request) int64 { + if req.Body == nil { + return 0 + } + if req.ContentLength != 0 { + return req.ContentLength + } + return -1 +} + +func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { + if err := checkConnHeaders(req); err != nil { + return nil, err + } + if cc.idleTimer != nil { + cc.idleTimer.Stop() + } + + trailers, err := commaSeparatedTrailers(req) + if err != nil { + return nil, err + } + hasTrailers := trailers != "" + + cc.mu.Lock() + cc.lastActive = time.Now() + if cc.closed || !cc.canTakeNewRequestLocked() { + cc.mu.Unlock() + return nil, errClientConnUnusable + } + + body := req.Body + hasBody := body != nil + contentLen := actualContentLength(req) + + // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? + var requestedGzip bool + if !cc.t.disableCompression() && + req.Header.Get("Accept-Encoding") == "" && + req.Header.Get("Range") == "" && + req.Method != "HEAD" { + // Request gzip only, not deflate. Deflate is ambiguous and + // not as universally supported anyway. + // See: http://www.gzip.org/zlib/zlib_faq.html#faq38 + // + // Note that we don't request this for HEAD requests, + // due to a bug in nginx: + // http://trac.nginx.org/nginx/ticket/358 + // https://golang.org/issue/5522 + // + // We don't request gzip if the request is for a range, since + // auto-decoding a portion of a gzipped document will just fail + // anyway. See https://golang.org/issue/8923 + requestedGzip = true + } + + // we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is + // sent by writeRequestBody below, along with any Trailers, + // again in form HEADERS{1}, CONTINUATION{0,}) + hdrs, err := cc.encodeHeaders(req, requestedGzip, trailers, contentLen) + if err != nil { + cc.mu.Unlock() + return nil, err + } + + cs := cc.newStream() + cs.req = req + cs.trace = requestTrace(req) + cs.requestedGzip = requestedGzip + bodyWriter := cc.t.getBodyWriterState(cs, body) + cs.on100 = bodyWriter.on100 + + cc.wmu.Lock() + endStream := !hasBody && !hasTrailers + werr := cc.writeHeaders(cs.ID, endStream, hdrs) + cc.wmu.Unlock() + traceWroteHeaders(cs.trace) + cc.mu.Unlock() + + if werr != nil { + if hasBody { + req.Body.Close() // per RoundTripper contract + bodyWriter.cancel() + } + cc.forgetStreamID(cs.ID) + // Don't bother sending a RST_STREAM (our write already failed; + // no need to keep writing) + traceWroteRequest(cs.trace, werr) + return nil, werr + } + + var respHeaderTimer <-chan time.Time + if hasBody { + bodyWriter.scheduleBodyWrite() + } else { + traceWroteRequest(cs.trace, nil) + if d := cc.responseHeaderTimeout(); d != 0 { + timer := time.NewTimer(d) + defer timer.Stop() + respHeaderTimer = timer.C + } + } + + readLoopResCh := cs.resc + bodyWritten := false + ctx := reqContext(req) + + handleReadLoopResponse := func(re resAndError) (*http.Response, error) { + res := re.res + if re.err != nil || res.StatusCode > 299 { + // On error or status code 3xx, 4xx, 5xx, etc abort any + // ongoing write, assuming that the server doesn't care + // about our request body. If the server replied with 1xx or + // 2xx, however, then assume the server DOES potentially + // want our body (e.g. full-duplex streaming: + // golang.org/issue/13444). If it turns out the server + // doesn't, they'll RST_STREAM us soon enough. This is a + // heuristic to avoid adding knobs to Transport. Hopefully + // we can keep it. + bodyWriter.cancel() + cs.abortRequestBodyWrite(errStopReqBodyWrite) + } + if re.err != nil { + if re.err == errClientConnGotGoAway { + cc.mu.Lock() + if cs.startedWrite { + re.err = errClientConnGotGoAwayAfterSomeReqBody + } + cc.mu.Unlock() + } + cc.forgetStreamID(cs.ID) + return nil, re.err + } + res.Request = req + res.TLS = cc.tlsState + return res, nil + } + + for { + select { + case re := <-readLoopResCh: + return handleReadLoopResponse(re) + case <-respHeaderTimer: + cc.forgetStreamID(cs.ID) + if !hasBody || bodyWritten { + cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) + } else { + bodyWriter.cancel() + cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) + } + return nil, errTimeout + case <-ctx.Done(): + cc.forgetStreamID(cs.ID) + if !hasBody || bodyWritten { + cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) + } else { + bodyWriter.cancel() + cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) + } + return nil, ctx.Err() + case <-req.Cancel: + cc.forgetStreamID(cs.ID) + if !hasBody || bodyWritten { + cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) + } else { + bodyWriter.cancel() + cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) + } + return nil, errRequestCanceled + case <-cs.peerReset: + // processResetStream already removed the + // stream from the streams map; no need for + // forgetStreamID. + return nil, cs.resetErr + case err := <-bodyWriter.resc: + // Prefer the read loop's response, if available. Issue 16102. + select { + case re := <-readLoopResCh: + return handleReadLoopResponse(re) + default: + } + if err != nil { + return nil, err + } + bodyWritten = true + if d := cc.responseHeaderTimeout(); d != 0 { + timer := time.NewTimer(d) + defer timer.Stop() + respHeaderTimer = timer.C + } + } + } +} + +// requires cc.wmu be held +func (cc *ClientConn) writeHeaders(streamID uint32, endStream bool, hdrs []byte) error { + first := true // first frame written (HEADERS is first, then CONTINUATION) + frameSize := int(cc.maxFrameSize) + for len(hdrs) > 0 && cc.werr == nil { + chunk := hdrs + if len(chunk) > frameSize { + chunk = chunk[:frameSize] + } + hdrs = hdrs[len(chunk):] + endHeaders := len(hdrs) == 0 + if first { + cc.fr.WriteHeaders(HeadersFrameParam{ + StreamID: streamID, + BlockFragment: chunk, + EndStream: endStream, + EndHeaders: endHeaders, + }) + first = false + } else { + cc.fr.WriteContinuation(streamID, endHeaders, chunk) + } + } + // TODO(bradfitz): this Flush could potentially block (as + // could the WriteHeaders call(s) above), which means they + // wouldn't respond to Request.Cancel being readable. That's + // rare, but this should probably be in a goroutine. + cc.bw.Flush() + return cc.werr +} + +// internal error values; they don't escape to callers +var ( + // abort request body write; don't send cancel + errStopReqBodyWrite = errors.New("http2: aborting request body write") + + // abort request body write, but send stream reset of cancel. + errStopReqBodyWriteAndCancel = errors.New("http2: canceling request") +) + +func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) (err error) { + cc := cs.cc + sentEnd := false // whether we sent the final DATA frame w/ END_STREAM + buf := cc.frameScratchBuffer() + defer cc.putFrameScratchBuffer(buf) + + defer func() { + traceWroteRequest(cs.trace, err) + // TODO: write h12Compare test showing whether + // Request.Body is closed by the Transport, + // and in multiple cases: server replies <=299 and >299 + // while still writing request body + cerr := bodyCloser.Close() + if err == nil { + err = cerr + } + }() + + req := cs.req + hasTrailers := req.Trailer != nil + + var sawEOF bool + for !sawEOF { + n, err := body.Read(buf) + if err == io.EOF { + sawEOF = true + err = nil + } else if err != nil { + return err + } + + remain := buf[:n] + for len(remain) > 0 && err == nil { + var allowed int32 + allowed, err = cs.awaitFlowControl(len(remain)) + switch { + case err == errStopReqBodyWrite: + return err + case err == errStopReqBodyWriteAndCancel: + cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) + return err + case err != nil: + return err + } + cc.wmu.Lock() + data := remain[:allowed] + remain = remain[allowed:] + sentEnd = sawEOF && len(remain) == 0 && !hasTrailers + err = cc.fr.WriteData(cs.ID, sentEnd, data) + if err == nil { + // TODO(bradfitz): this flush is for latency, not bandwidth. + // Most requests won't need this. Make this opt-in or + // opt-out? Use some heuristic on the body type? Nagel-like + // timers? Based on 'n'? Only last chunk of this for loop, + // unless flow control tokens are low? For now, always. + // If we change this, see comment below. + err = cc.bw.Flush() + } + cc.wmu.Unlock() + } + if err != nil { + return err + } + } + + if sentEnd { + // Already sent END_STREAM (which implies we have no + // trailers) and flushed, because currently all + // WriteData frames above get a flush. So we're done. + return nil + } + + var trls []byte + if hasTrailers { + cc.mu.Lock() + defer cc.mu.Unlock() + trls = cc.encodeTrailers(req) + } + + cc.wmu.Lock() + defer cc.wmu.Unlock() + + // Two ways to send END_STREAM: either with trailers, or + // with an empty DATA frame. + if len(trls) > 0 { + err = cc.writeHeaders(cs.ID, true, trls) + } else { + err = cc.fr.WriteData(cs.ID, true, nil) + } + if ferr := cc.bw.Flush(); ferr != nil && err == nil { + err = ferr + } + return err +} + +// awaitFlowControl waits for [1, min(maxBytes, cc.cs.maxFrameSize)] flow +// control tokens from the server. +// It returns either the non-zero number of tokens taken or an error +// if the stream is dead. +func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) { + cc := cs.cc + cc.mu.Lock() + defer cc.mu.Unlock() + for { + if cc.closed { + return 0, errClientConnClosed + } + if cs.stopReqBody != nil { + return 0, cs.stopReqBody + } + if err := cs.checkResetOrDone(); err != nil { + return 0, err + } + if a := cs.flow.available(); a > 0 { + take := a + if int(take) > maxBytes { + + take = int32(maxBytes) // can't truncate int; take is int32 + } + if take > int32(cc.maxFrameSize) { + take = int32(cc.maxFrameSize) + } + cs.flow.take(take) + return take, nil + } + cc.cond.Wait() + } +} + +type badStringError struct { + what string + str string +} + +func (e *badStringError) Error() string { return fmt.Sprintf("%s %q", e.what, e.str) } + +// requires cc.mu be held. +func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) { + cc.hbuf.Reset() + + host := req.Host + if host == "" { + host = req.URL.Host + } + host, err := httplex.PunycodeHostPort(host) + if err != nil { + return nil, err + } + + var path string + if req.Method != "CONNECT" { + path = req.URL.RequestURI() + if !validPseudoPath(path) { + orig := path + path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) + if !validPseudoPath(path) { + if req.URL.Opaque != "" { + return nil, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) + } else { + return nil, fmt.Errorf("invalid request :path %q", orig) + } + } + } + } + + // Check for any invalid headers and return an error before we + // potentially pollute our hpack state. (We want to be able to + // continue to reuse the hpack encoder for future requests) + for k, vv := range req.Header { + if !httplex.ValidHeaderFieldName(k) { + return nil, fmt.Errorf("invalid HTTP header name %q", k) + } + for _, v := range vv { + if !httplex.ValidHeaderFieldValue(v) { + return nil, fmt.Errorf("invalid HTTP header value %q for header %q", v, k) + } + } + } + + // 8.1.2.3 Request Pseudo-Header Fields + // The :path pseudo-header field includes the path and query parts of the + // target URI (the path-absolute production and optionally a '?' character + // followed by the query production (see Sections 3.3 and 3.4 of + // [RFC3986]). + cc.writeHeader(":authority", host) + cc.writeHeader(":method", req.Method) + if req.Method != "CONNECT" { + cc.writeHeader(":path", path) + cc.writeHeader(":scheme", req.URL.Scheme) + } + if trailers != "" { + cc.writeHeader("trailer", trailers) + } + + var didUA bool + for k, vv := range req.Header { + lowKey := strings.ToLower(k) + switch lowKey { + case "host", "content-length": + // Host is :authority, already sent. + // Content-Length is automatic, set below. + continue + case "connection", "proxy-connection", "transfer-encoding", "upgrade", "keep-alive": + // Per 8.1.2.2 Connection-Specific Header + // Fields, don't send connection-specific + // fields. We have already checked if any + // are error-worthy so just ignore the rest. + continue + case "user-agent": + // Match Go's http1 behavior: at most one + // User-Agent. If set to nil or empty string, + // then omit it. Otherwise if not mentioned, + // include the default (below). + didUA = true + if len(vv) < 1 { + continue + } + vv = vv[:1] + if vv[0] == "" { + continue + } + } + for _, v := range vv { + cc.writeHeader(lowKey, v) + } + } + if shouldSendReqContentLength(req.Method, contentLength) { + cc.writeHeader("content-length", strconv.FormatInt(contentLength, 10)) + } + if addGzipHeader { + cc.writeHeader("accept-encoding", "gzip") + } + if !didUA { + cc.writeHeader("user-agent", defaultUserAgent) + } + return cc.hbuf.Bytes(), nil +} + +// shouldSendReqContentLength reports whether the http2.Transport should send +// a "content-length" request header. This logic is basically a copy of the net/http +// transferWriter.shouldSendContentLength. +// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown). +// -1 means unknown. +func shouldSendReqContentLength(method string, contentLength int64) bool { + if contentLength > 0 { + return true + } + if contentLength < 0 { + return false + } + // For zero bodies, whether we send a content-length depends on the method. + // It also kinda doesn't matter for http2 either way, with END_STREAM. + switch method { + case "POST", "PUT", "PATCH": + return true + default: + return false + } +} + +// requires cc.mu be held. +func (cc *ClientConn) encodeTrailers(req *http.Request) []byte { + cc.hbuf.Reset() + for k, vv := range req.Trailer { + // Transfer-Encoding, etc.. have already been filter at the + // start of RoundTrip + lowKey := strings.ToLower(k) + for _, v := range vv { + cc.writeHeader(lowKey, v) + } + } + return cc.hbuf.Bytes() +} + +func (cc *ClientConn) writeHeader(name, value string) { + if VerboseLogs { + log.Printf("http2: Transport encoding header %q = %q", name, value) + } + cc.henc.WriteField(hpack.HeaderField{Name: name, Value: value}) +} + +type resAndError struct { + res *http.Response + err error +} + +// requires cc.mu be held. +func (cc *ClientConn) newStream() *clientStream { + cs := &clientStream{ + cc: cc, + ID: cc.nextStreamID, + resc: make(chan resAndError, 1), + peerReset: make(chan struct{}), + done: make(chan struct{}), + } + cs.flow.add(int32(cc.initialWindowSize)) + cs.flow.setConnFlow(&cc.flow) + cs.inflow.add(transportDefaultStreamFlow) + cs.inflow.setConnFlow(&cc.inflow) + cc.nextStreamID += 2 + cc.streams[cs.ID] = cs + return cs +} + +func (cc *ClientConn) forgetStreamID(id uint32) { + cc.streamByID(id, true) +} + +func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream { + cc.mu.Lock() + defer cc.mu.Unlock() + cs := cc.streams[id] + if andRemove && cs != nil && !cc.closed { + cc.lastActive = time.Now() + delete(cc.streams, id) + if len(cc.streams) == 0 && cc.idleTimer != nil { + cc.idleTimer.Reset(cc.idleTimeout) + } + close(cs.done) + cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl + } + return cs +} + +// clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop. +type clientConnReadLoop struct { + cc *ClientConn + activeRes map[uint32]*clientStream // keyed by streamID + closeWhenIdle bool +} + +// readLoop runs in its own goroutine and reads and dispatches frames. +func (cc *ClientConn) readLoop() { + rl := &clientConnReadLoop{ + cc: cc, + activeRes: make(map[uint32]*clientStream), + } + + defer rl.cleanup() + cc.readerErr = rl.run() + if ce, ok := cc.readerErr.(ConnectionError); ok { + cc.wmu.Lock() + cc.fr.WriteGoAway(0, ErrCode(ce), nil) + cc.wmu.Unlock() + } +} + +// GoAwayError is returned by the Transport when the server closes the +// TCP connection after sending a GOAWAY frame. +type GoAwayError struct { + LastStreamID uint32 + ErrCode ErrCode + DebugData string +} + +func (e GoAwayError) Error() string { + return fmt.Sprintf("http2: server sent GOAWAY and closed the connection; LastStreamID=%v, ErrCode=%v, debug=%q", + e.LastStreamID, e.ErrCode, e.DebugData) +} + +func isEOFOrNetReadError(err error) bool { + if err == io.EOF { + return true + } + ne, ok := err.(*net.OpError) + return ok && ne.Op == "read" +} + +func (rl *clientConnReadLoop) cleanup() { + cc := rl.cc + defer cc.tconn.Close() + defer cc.t.connPool().MarkDead(cc) + defer close(cc.readerDone) + + if cc.idleTimer != nil { + cc.idleTimer.Stop() + } + + // Close any response bodies if the server closes prematurely. + // TODO: also do this if we've written the headers but not + // gotten a response yet. + err := cc.readerErr + cc.mu.Lock() + if cc.goAway != nil && isEOFOrNetReadError(err) { + err = GoAwayError{ + LastStreamID: cc.goAway.LastStreamID, + ErrCode: cc.goAway.ErrCode, + DebugData: cc.goAwayDebug, + } + } else if err == io.EOF { + err = io.ErrUnexpectedEOF + } + for _, cs := range rl.activeRes { + cs.bufPipe.CloseWithError(err) + } + for _, cs := range cc.streams { + select { + case cs.resc <- resAndError{err: err}: + default: + } + close(cs.done) + } + cc.closed = true + cc.cond.Broadcast() + cc.mu.Unlock() +} + +func (rl *clientConnReadLoop) run() error { + cc := rl.cc + rl.closeWhenIdle = cc.t.disableKeepAlives() || cc.singleUse + gotReply := false // ever saw a HEADERS reply + gotSettings := false + for { + f, err := cc.fr.ReadFrame() + if err != nil { + cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err) + } + if se, ok := err.(StreamError); ok { + if cs := cc.streamByID(se.StreamID, true /*ended; remove it*/); cs != nil { + cs.cc.writeStreamReset(cs.ID, se.Code, err) + if se.Cause == nil { + se.Cause = cc.fr.errDetail + } + rl.endStreamError(cs, se) + } + continue + } else if err != nil { + return err + } + if VerboseLogs { + cc.vlogf("http2: Transport received %s", summarizeFrame(f)) + } + if !gotSettings { + if _, ok := f.(*SettingsFrame); !ok { + cc.logf("protocol error: received %T before a SETTINGS frame", f) + return ConnectionError(ErrCodeProtocol) + } + gotSettings = true + } + maybeIdle := false // whether frame might transition us to idle + + switch f := f.(type) { + case *MetaHeadersFrame: + err = rl.processHeaders(f) + maybeIdle = true + gotReply = true + case *DataFrame: + err = rl.processData(f) + maybeIdle = true + case *GoAwayFrame: + err = rl.processGoAway(f) + maybeIdle = true + case *RSTStreamFrame: + err = rl.processResetStream(f) + maybeIdle = true + case *SettingsFrame: + err = rl.processSettings(f) + case *PushPromiseFrame: + err = rl.processPushPromise(f) + case *WindowUpdateFrame: + err = rl.processWindowUpdate(f) + case *PingFrame: + err = rl.processPing(f) + default: + cc.logf("Transport: unhandled response frame type %T", f) + } + if err != nil { + if VerboseLogs { + cc.vlogf("http2: Transport conn %p received error from processing frame %v: %v", cc, summarizeFrame(f), err) + } + return err + } + if rl.closeWhenIdle && gotReply && maybeIdle && len(rl.activeRes) == 0 { + cc.closeIfIdle() + } + } +} + +func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { + cc := rl.cc + cs := cc.streamByID(f.StreamID, f.StreamEnded()) + if cs == nil { + // We'd get here if we canceled a request while the + // server had its response still in flight. So if this + // was just something we canceled, ignore it. + return nil + } + if !cs.firstByte { + if cs.trace != nil { + // TODO(bradfitz): move first response byte earlier, + // when we first read the 9 byte header, not waiting + // until all the HEADERS+CONTINUATION frames have been + // merged. This works for now. + traceFirstResponseByte(cs.trace) + } + cs.firstByte = true + } + if !cs.pastHeaders { + cs.pastHeaders = true + } else { + return rl.processTrailers(cs, f) + } + + res, err := rl.handleResponse(cs, f) + if err != nil { + if _, ok := err.(ConnectionError); ok { + return err + } + // Any other error type is a stream error. + cs.cc.writeStreamReset(f.StreamID, ErrCodeProtocol, err) + cs.resc <- resAndError{err: err} + return nil // return nil from process* funcs to keep conn alive + } + if res == nil { + // (nil, nil) special case. See handleResponse docs. + return nil + } + if res.Body != noBody { + rl.activeRes[cs.ID] = cs + } + cs.resTrailer = &res.Trailer + cs.resc <- resAndError{res: res} + return nil +} + +// may return error types nil, or ConnectionError. Any other error value +// is a StreamError of type ErrCodeProtocol. The returned error in that case +// is the detail. +// +// As a special case, handleResponse may return (nil, nil) to skip the +// frame (currently only used for 100 expect continue). This special +// case is going away after Issue 13851 is fixed. +func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFrame) (*http.Response, error) { + if f.Truncated { + return nil, errResponseHeaderListSize + } + + status := f.PseudoValue("status") + if status == "" { + return nil, errors.New("missing status pseudo header") + } + statusCode, err := strconv.Atoi(status) + if err != nil { + return nil, errors.New("malformed non-numeric status pseudo header") + } + + if statusCode == 100 { + traceGot100Continue(cs.trace) + if cs.on100 != nil { + cs.on100() // forces any write delay timer to fire + } + cs.pastHeaders = false // do it all again + return nil, nil + } + + header := make(http.Header) + res := &http.Response{ + Proto: "HTTP/2.0", + ProtoMajor: 2, + Header: header, + StatusCode: statusCode, + Status: status + " " + http.StatusText(statusCode), + } + for _, hf := range f.RegularFields() { + key := http.CanonicalHeaderKey(hf.Name) + if key == "Trailer" { + t := res.Trailer + if t == nil { + t = make(http.Header) + res.Trailer = t + } + foreachHeaderElement(hf.Value, func(v string) { + t[http.CanonicalHeaderKey(v)] = nil + }) + } else { + header[key] = append(header[key], hf.Value) + } + } + + streamEnded := f.StreamEnded() + isHead := cs.req.Method == "HEAD" + if !streamEnded || isHead { + res.ContentLength = -1 + if clens := res.Header["Content-Length"]; len(clens) == 1 { + if clen64, err := strconv.ParseInt(clens[0], 10, 64); err == nil { + res.ContentLength = clen64 + } else { + // TODO: care? unlike http/1, it won't mess up our framing, so it's + // more safe smuggling-wise to ignore. + } + } else if len(clens) > 1 { + // TODO: care? unlike http/1, it won't mess up our framing, so it's + // more safe smuggling-wise to ignore. + } + } + + if streamEnded || isHead { + res.Body = noBody + return res, nil + } + + cs.bufPipe = pipe{b: &dataBuffer{expected: res.ContentLength}} + cs.bytesRemain = res.ContentLength + res.Body = transportResponseBody{cs} + go cs.awaitRequestCancel(cs.req) + + if cs.requestedGzip && res.Header.Get("Content-Encoding") == "gzip" { + res.Header.Del("Content-Encoding") + res.Header.Del("Content-Length") + res.ContentLength = -1 + res.Body = &gzipReader{body: res.Body} + setResponseUncompressed(res) + } + return res, nil +} + +func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFrame) error { + if cs.pastTrailers { + // Too many HEADERS frames for this stream. + return ConnectionError(ErrCodeProtocol) + } + cs.pastTrailers = true + if !f.StreamEnded() { + // We expect that any headers for trailers also + // has END_STREAM. + return ConnectionError(ErrCodeProtocol) + } + if len(f.PseudoFields()) > 0 { + // No pseudo header fields are defined for trailers. + // TODO: ConnectionError might be overly harsh? Check. + return ConnectionError(ErrCodeProtocol) + } + + trailer := make(http.Header) + for _, hf := range f.RegularFields() { + key := http.CanonicalHeaderKey(hf.Name) + trailer[key] = append(trailer[key], hf.Value) + } + cs.trailer = trailer + + rl.endStream(cs) + return nil +} + +// transportResponseBody is the concrete type of Transport.RoundTrip's +// Response.Body. It is an io.ReadCloser. On Read, it reads from cs.body. +// On Close it sends RST_STREAM if EOF wasn't already seen. +type transportResponseBody struct { + cs *clientStream +} + +func (b transportResponseBody) Read(p []byte) (n int, err error) { + cs := b.cs + cc := cs.cc + + if cs.readErr != nil { + return 0, cs.readErr + } + n, err = b.cs.bufPipe.Read(p) + if cs.bytesRemain != -1 { + if int64(n) > cs.bytesRemain { + n = int(cs.bytesRemain) + if err == nil { + err = errors.New("net/http: server replied with more than declared Content-Length; truncated") + cc.writeStreamReset(cs.ID, ErrCodeProtocol, err) + } + cs.readErr = err + return int(cs.bytesRemain), err + } + cs.bytesRemain -= int64(n) + if err == io.EOF && cs.bytesRemain > 0 { + err = io.ErrUnexpectedEOF + cs.readErr = err + return n, err + } + } + if n == 0 { + // No flow control tokens to send back. + return + } + + cc.mu.Lock() + defer cc.mu.Unlock() + + var connAdd, streamAdd int32 + // Check the conn-level first, before the stream-level. + if v := cc.inflow.available(); v < transportDefaultConnFlow/2 { + connAdd = transportDefaultConnFlow - v + cc.inflow.add(connAdd) + } + if err == nil { // No need to refresh if the stream is over or failed. + // Consider any buffered body data (read from the conn but not + // consumed by the client) when computing flow control for this + // stream. + v := int(cs.inflow.available()) + cs.bufPipe.Len() + if v < transportDefaultStreamFlow-transportDefaultStreamMinRefresh { + streamAdd = int32(transportDefaultStreamFlow - v) + cs.inflow.add(streamAdd) + } + } + if connAdd != 0 || streamAdd != 0 { + cc.wmu.Lock() + defer cc.wmu.Unlock() + if connAdd != 0 { + cc.fr.WriteWindowUpdate(0, mustUint31(connAdd)) + } + if streamAdd != 0 { + cc.fr.WriteWindowUpdate(cs.ID, mustUint31(streamAdd)) + } + cc.bw.Flush() + } + return +} + +var errClosedResponseBody = errors.New("http2: response body closed") + +func (b transportResponseBody) Close() error { + cs := b.cs + cc := cs.cc + + serverSentStreamEnd := cs.bufPipe.Err() == io.EOF + unread := cs.bufPipe.Len() + + if unread > 0 || !serverSentStreamEnd { + cc.mu.Lock() + cc.wmu.Lock() + if !serverSentStreamEnd { + cc.fr.WriteRSTStream(cs.ID, ErrCodeCancel) + } + // Return connection-level flow control. + if unread > 0 { + cc.inflow.add(int32(unread)) + cc.fr.WriteWindowUpdate(0, uint32(unread)) + } + cc.bw.Flush() + cc.wmu.Unlock() + cc.mu.Unlock() + } + + cs.bufPipe.BreakWithError(errClosedResponseBody) + return nil +} + +func (rl *clientConnReadLoop) processData(f *DataFrame) error { + cc := rl.cc + cs := cc.streamByID(f.StreamID, f.StreamEnded()) + data := f.Data() + if cs == nil { + cc.mu.Lock() + neverSent := cc.nextStreamID + cc.mu.Unlock() + if f.StreamID >= neverSent { + // We never asked for this. + cc.logf("http2: Transport received unsolicited DATA frame; closing connection") + return ConnectionError(ErrCodeProtocol) + } + // We probably did ask for this, but canceled. Just ignore it. + // TODO: be stricter here? only silently ignore things which + // we canceled, but not things which were closed normally + // by the peer? Tough without accumulating too much state. + + // But at least return their flow control: + if f.Length > 0 { + cc.mu.Lock() + cc.inflow.add(int32(f.Length)) + cc.mu.Unlock() + + cc.wmu.Lock() + cc.fr.WriteWindowUpdate(0, uint32(f.Length)) + cc.bw.Flush() + cc.wmu.Unlock() + } + return nil + } + if f.Length > 0 { + if len(data) > 0 && cs.bufPipe.b == nil { + // Data frame after it's already closed? + cc.logf("http2: Transport received DATA frame for closed stream; closing connection") + return ConnectionError(ErrCodeProtocol) + } + + // Check connection-level flow control. + cc.mu.Lock() + if cs.inflow.available() >= int32(f.Length) { + cs.inflow.take(int32(f.Length)) + } else { + cc.mu.Unlock() + return ConnectionError(ErrCodeFlowControl) + } + // Return any padded flow control now, since we won't + // refund it later on body reads. + if pad := int32(f.Length) - int32(len(data)); pad > 0 { + cs.inflow.add(pad) + cc.inflow.add(pad) + cc.wmu.Lock() + cc.fr.WriteWindowUpdate(0, uint32(pad)) + cc.fr.WriteWindowUpdate(cs.ID, uint32(pad)) + cc.bw.Flush() + cc.wmu.Unlock() + } + didReset := cs.didReset + cc.mu.Unlock() + + if len(data) > 0 && !didReset { + if _, err := cs.bufPipe.Write(data); err != nil { + rl.endStreamError(cs, err) + return err + } + } + } + + if f.StreamEnded() { + rl.endStream(cs) + } + return nil +} + +var errInvalidTrailers = errors.New("http2: invalid trailers") + +func (rl *clientConnReadLoop) endStream(cs *clientStream) { + // TODO: check that any declared content-length matches, like + // server.go's (*stream).endStream method. + rl.endStreamError(cs, nil) +} + +func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) { + var code func() + if err == nil { + err = io.EOF + code = cs.copyTrailers + } + cs.bufPipe.closeWithErrorAndCode(err, code) + delete(rl.activeRes, cs.ID) + if isConnectionCloseRequest(cs.req) { + rl.closeWhenIdle = true + } + + select { + case cs.resc <- resAndError{err: err}: + default: + } +} + +func (cs *clientStream) copyTrailers() { + for k, vv := range cs.trailer { + t := cs.resTrailer + if *t == nil { + *t = make(http.Header) + } + (*t)[k] = vv + } +} + +func (rl *clientConnReadLoop) processGoAway(f *GoAwayFrame) error { + cc := rl.cc + cc.t.connPool().MarkDead(cc) + if f.ErrCode != 0 { + // TODO: deal with GOAWAY more. particularly the error code + cc.vlogf("transport got GOAWAY with error code = %v", f.ErrCode) + } + cc.setGoAway(f) + return nil +} + +func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { + cc := rl.cc + cc.mu.Lock() + defer cc.mu.Unlock() + + if f.IsAck() { + if cc.wantSettingsAck { + cc.wantSettingsAck = false + return nil + } + return ConnectionError(ErrCodeProtocol) + } + + err := f.ForeachSetting(func(s Setting) error { + switch s.ID { + case SettingMaxFrameSize: + cc.maxFrameSize = s.Val + case SettingMaxConcurrentStreams: + cc.maxConcurrentStreams = s.Val + case SettingInitialWindowSize: + // Values above the maximum flow-control + // window size of 2^31-1 MUST be treated as a + // connection error (Section 5.4.1) of type + // FLOW_CONTROL_ERROR. + if s.Val > math.MaxInt32 { + return ConnectionError(ErrCodeFlowControl) + } + + // Adjust flow control of currently-open + // frames by the difference of the old initial + // window size and this one. + delta := int32(s.Val) - int32(cc.initialWindowSize) + for _, cs := range cc.streams { + cs.flow.add(delta) + } + cc.cond.Broadcast() + + cc.initialWindowSize = s.Val + default: + // TODO(bradfitz): handle more settings? SETTINGS_HEADER_TABLE_SIZE probably. + cc.vlogf("Unhandled Setting: %v", s) + } + return nil + }) + if err != nil { + return err + } + + cc.wmu.Lock() + defer cc.wmu.Unlock() + + cc.fr.WriteSettingsAck() + cc.bw.Flush() + return cc.werr +} + +func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { + cc := rl.cc + cs := cc.streamByID(f.StreamID, false) + if f.StreamID != 0 && cs == nil { + return nil + } + + cc.mu.Lock() + defer cc.mu.Unlock() + + fl := &cc.flow + if cs != nil { + fl = &cs.flow + } + if !fl.add(int32(f.Increment)) { + return ConnectionError(ErrCodeFlowControl) + } + cc.cond.Broadcast() + return nil +} + +func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error { + cs := rl.cc.streamByID(f.StreamID, true) + if cs == nil { + // TODO: return error if server tries to RST_STEAM an idle stream + return nil + } + select { + case <-cs.peerReset: + // Already reset. + // This is the only goroutine + // which closes this, so there + // isn't a race. + default: + err := streamError(cs.ID, f.ErrCode) + cs.resetErr = err + close(cs.peerReset) + cs.bufPipe.CloseWithError(err) + cs.cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl + } + delete(rl.activeRes, cs.ID) + return nil +} + +// Ping sends a PING frame to the server and waits for the ack. +// Public implementation is in go17.go and not_go17.go +func (cc *ClientConn) ping(ctx contextContext) error { + c := make(chan struct{}) + // Generate a random payload + var p [8]byte + for { + if _, err := rand.Read(p[:]); err != nil { + return err + } + cc.mu.Lock() + // check for dup before insert + if _, found := cc.pings[p]; !found { + cc.pings[p] = c + cc.mu.Unlock() + break + } + cc.mu.Unlock() + } + cc.wmu.Lock() + if err := cc.fr.WritePing(false, p); err != nil { + cc.wmu.Unlock() + return err + } + if err := cc.bw.Flush(); err != nil { + cc.wmu.Unlock() + return err + } + cc.wmu.Unlock() + select { + case <-c: + return nil + case <-ctx.Done(): + return ctx.Err() + case <-cc.readerDone: + // connection closed + return cc.readerErr + } +} + +func (rl *clientConnReadLoop) processPing(f *PingFrame) error { + if f.IsAck() { + cc := rl.cc + cc.mu.Lock() + defer cc.mu.Unlock() + // If ack, notify listener if any + if c, ok := cc.pings[f.Data]; ok { + close(c) + delete(cc.pings, f.Data) + } + return nil + } + cc := rl.cc + cc.wmu.Lock() + defer cc.wmu.Unlock() + if err := cc.fr.WritePing(true, f.Data); err != nil { + return err + } + return cc.bw.Flush() +} + +func (rl *clientConnReadLoop) processPushPromise(f *PushPromiseFrame) error { + // We told the peer we don't want them. + // Spec says: + // "PUSH_PROMISE MUST NOT be sent if the SETTINGS_ENABLE_PUSH + // setting of the peer endpoint is set to 0. An endpoint that + // has set this setting and has received acknowledgement MUST + // treat the receipt of a PUSH_PROMISE frame as a connection + // error (Section 5.4.1) of type PROTOCOL_ERROR." + return ConnectionError(ErrCodeProtocol) +} + +func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) { + // TODO: map err to more interesting error codes, once the + // HTTP community comes up with some. But currently for + // RST_STREAM there's no equivalent to GOAWAY frame's debug + // data, and the error codes are all pretty vague ("cancel"). + cc.wmu.Lock() + cc.fr.WriteRSTStream(streamID, code) + cc.bw.Flush() + cc.wmu.Unlock() +} + +var ( + errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit") + errPseudoTrailers = errors.New("http2: invalid pseudo header in trailers") +) + +func (cc *ClientConn) logf(format string, args ...interface{}) { + cc.t.logf(format, args...) +} + +func (cc *ClientConn) vlogf(format string, args ...interface{}) { + cc.t.vlogf(format, args...) +} + +func (t *Transport) vlogf(format string, args ...interface{}) { + if VerboseLogs { + t.logf(format, args...) + } +} + +func (t *Transport) logf(format string, args ...interface{}) { + log.Printf(format, args...) +} + +var noBody io.ReadCloser = ioutil.NopCloser(bytes.NewReader(nil)) + +func strSliceContains(ss []string, s string) bool { + for _, v := range ss { + if v == s { + return true + } + } + return false +} + +type erringRoundTripper struct{ err error } + +func (rt erringRoundTripper) RoundTrip(*http.Request) (*http.Response, error) { return nil, rt.err } + +// gzipReader wraps a response body so it can lazily +// call gzip.NewReader on the first call to Read +type gzipReader struct { + body io.ReadCloser // underlying Response.Body + zr *gzip.Reader // lazily-initialized gzip reader + zerr error // sticky error +} + +func (gz *gzipReader) Read(p []byte) (n int, err error) { + if gz.zerr != nil { + return 0, gz.zerr + } + if gz.zr == nil { + gz.zr, err = gzip.NewReader(gz.body) + if err != nil { + gz.zerr = err + return 0, err + } + } + return gz.zr.Read(p) +} + +func (gz *gzipReader) Close() error { + return gz.body.Close() +} + +type errorReader struct{ err error } + +func (r errorReader) Read(p []byte) (int, error) { return 0, r.err } + +// bodyWriterState encapsulates various state around the Transport's writing +// of the request body, particularly regarding doing delayed writes of the body +// when the request contains "Expect: 100-continue". +type bodyWriterState struct { + cs *clientStream + timer *time.Timer // if non-nil, we're doing a delayed write + fnonce *sync.Once // to call fn with + fn func() // the code to run in the goroutine, writing the body + resc chan error // result of fn's execution + delay time.Duration // how long we should delay a delayed write for +} + +func (t *Transport) getBodyWriterState(cs *clientStream, body io.Reader) (s bodyWriterState) { + s.cs = cs + if body == nil { + return + } + resc := make(chan error, 1) + s.resc = resc + s.fn = func() { + cs.cc.mu.Lock() + cs.startedWrite = true + cs.cc.mu.Unlock() + resc <- cs.writeRequestBody(body, cs.req.Body) + } + s.delay = t.expectContinueTimeout() + if s.delay == 0 || + !httplex.HeaderValuesContainsToken( + cs.req.Header["Expect"], + "100-continue") { + return + } + s.fnonce = new(sync.Once) + + // Arm the timer with a very large duration, which we'll + // intentionally lower later. It has to be large now because + // we need a handle to it before writing the headers, but the + // s.delay value is defined to not start until after the + // request headers were written. + const hugeDuration = 365 * 24 * time.Hour + s.timer = time.AfterFunc(hugeDuration, func() { + s.fnonce.Do(s.fn) + }) + return +} + +func (s bodyWriterState) cancel() { + if s.timer != nil { + s.timer.Stop() + } +} + +func (s bodyWriterState) on100() { + if s.timer == nil { + // If we didn't do a delayed write, ignore the server's + // bogus 100 continue response. + return + } + s.timer.Stop() + go func() { s.fnonce.Do(s.fn) }() +} + +// scheduleBodyWrite starts writing the body, either immediately (in +// the common case) or after the delay timeout. It should not be +// called until after the headers have been written. +func (s bodyWriterState) scheduleBodyWrite() { + if s.timer == nil { + // We're not doing a delayed write (see + // getBodyWriterState), so just start the writing + // goroutine immediately. + go s.fn() + return + } + traceWait100Continue(s.cs.trace) + if s.timer.Stop() { + s.timer.Reset(s.delay) + } +} + +// isConnectionCloseRequest reports whether req should use its own +// connection for a single request and then close the connection. +func isConnectionCloseRequest(req *http.Request) bool { + return req.Close || httplex.HeaderValuesContainsToken(req.Header["Connection"], "close") +} diff --git a/vendor/golang.org/x/net/http2/transport_test.go b/vendor/golang.org/x/net/http2/transport_test.go new file mode 100644 index 0000000..7ae8ff7 --- /dev/null +++ b/vendor/golang.org/x/net/http2/transport_test.go @@ -0,0 +1,2916 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "bufio" + "bytes" + "crypto/tls" + "errors" + "flag" + "fmt" + "io" + "io/ioutil" + "math/rand" + "net" + "net/http" + "net/url" + "os" + "reflect" + "runtime" + "sort" + "strconv" + "strings" + "sync" + "sync/atomic" + "testing" + "time" + + "golang.org/x/net/http2/hpack" +) + +var ( + extNet = flag.Bool("extnet", false, "do external network tests") + transportHost = flag.String("transporthost", "http2.golang.org", "hostname to use for TestTransport") + insecure = flag.Bool("insecure", false, "insecure TLS dials") // TODO: dead code. remove? +) + +var tlsConfigInsecure = &tls.Config{InsecureSkipVerify: true} + +type testContext struct{} + +func (testContext) Done() <-chan struct{} { return make(chan struct{}) } +func (testContext) Err() error { panic("should not be called") } +func (testContext) Deadline() (deadline time.Time, ok bool) { return time.Time{}, false } +func (testContext) Value(key interface{}) interface{} { return nil } + +func TestTransportExternal(t *testing.T) { + if !*extNet { + t.Skip("skipping external network test") + } + req, _ := http.NewRequest("GET", "https://"+*transportHost+"/", nil) + rt := &Transport{TLSClientConfig: tlsConfigInsecure} + res, err := rt.RoundTrip(req) + if err != nil { + t.Fatalf("%v", err) + } + res.Write(os.Stdout) +} + +type fakeTLSConn struct { + net.Conn +} + +func (c *fakeTLSConn) ConnectionState() tls.ConnectionState { + return tls.ConnectionState{ + Version: tls.VersionTLS12, + } +} + +func startH2cServer(t *testing.T) net.Listener { + h2Server := &Server{} + l := newLocalListener(t) + go func() { + conn, err := l.Accept() + if err != nil { + t.Error(err) + return + } + h2Server.ServeConn(&fakeTLSConn{conn}, &ServeConnOpts{Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello, %v, http: %v", r.URL.Path, r.TLS == nil) + })}) + }() + return l +} + +func TestTransportH2c(t *testing.T) { + l := startH2cServer(t) + defer l.Close() + req, err := http.NewRequest("GET", "http://"+l.Addr().String()+"/foobar", nil) + if err != nil { + t.Fatal(err) + } + tr := &Transport{ + AllowHTTP: true, + DialTLS: func(network, addr string, cfg *tls.Config) (net.Conn, error) { + return net.Dial(network, addr) + }, + } + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + if res.ProtoMajor != 2 { + t.Fatal("proto not h2c") + } + body, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Fatal(err) + } + if got, want := string(body), "Hello, /foobar, http: true"; got != want { + t.Fatalf("response got %v, want %v", got, want) + } +} + +func TestTransport(t *testing.T) { + const body = "sup" + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, body) + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + req, err := http.NewRequest("GET", st.ts.URL, nil) + if err != nil { + t.Fatal(err) + } + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + + t.Logf("Got res: %+v", res) + if g, w := res.StatusCode, 200; g != w { + t.Errorf("StatusCode = %v; want %v", g, w) + } + if g, w := res.Status, "200 OK"; g != w { + t.Errorf("Status = %q; want %q", g, w) + } + wantHeader := http.Header{ + "Content-Length": []string{"3"}, + "Content-Type": []string{"text/plain; charset=utf-8"}, + "Date": []string{"XXX"}, // see cleanDate + } + cleanDate(res) + if !reflect.DeepEqual(res.Header, wantHeader) { + t.Errorf("res Header = %v; want %v", res.Header, wantHeader) + } + if res.Request != req { + t.Errorf("Response.Request = %p; want %p", res.Request, req) + } + if res.TLS == nil { + t.Error("Response.TLS = nil; want non-nil") + } + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Errorf("Body read: %v", err) + } else if string(slurp) != body { + t.Errorf("Body = %q; want %q", slurp, body) + } +} + +func onSameConn(t *testing.T, modReq func(*http.Request)) bool { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, r.RemoteAddr) + }, optOnlyServer, func(c net.Conn, st http.ConnState) { + t.Logf("conn %v is now state %v", c.RemoteAddr(), st) + }) + defer st.Close() + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + get := func() string { + req, err := http.NewRequest("GET", st.ts.URL, nil) + if err != nil { + t.Fatal(err) + } + modReq(req) + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Fatalf("Body read: %v", err) + } + addr := strings.TrimSpace(string(slurp)) + if addr == "" { + t.Fatalf("didn't get an addr in response") + } + return addr + } + first := get() + second := get() + return first == second +} + +func TestTransportReusesConns(t *testing.T) { + if !onSameConn(t, func(*http.Request) {}) { + t.Errorf("first and second responses were on different connections") + } +} + +func TestTransportReusesConn_RequestClose(t *testing.T) { + if onSameConn(t, func(r *http.Request) { r.Close = true }) { + t.Errorf("first and second responses were not on different connections") + } +} + +func TestTransportReusesConn_ConnClose(t *testing.T) { + if onSameConn(t, func(r *http.Request) { r.Header.Set("Connection", "close") }) { + t.Errorf("first and second responses were not on different connections") + } +} + +// Tests that the Transport only keeps one pending dial open per destination address. +// https://golang.org/issue/13397 +func TestTransportGroupsPendingDials(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, r.RemoteAddr) + }, optOnlyServer) + defer st.Close() + tr := &Transport{ + TLSClientConfig: tlsConfigInsecure, + } + defer tr.CloseIdleConnections() + var ( + mu sync.Mutex + dials = map[string]int{} + ) + var wg sync.WaitGroup + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + req, err := http.NewRequest("GET", st.ts.URL, nil) + if err != nil { + t.Error(err) + return + } + res, err := tr.RoundTrip(req) + if err != nil { + t.Error(err) + return + } + defer res.Body.Close() + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Errorf("Body read: %v", err) + } + addr := strings.TrimSpace(string(slurp)) + if addr == "" { + t.Errorf("didn't get an addr in response") + } + mu.Lock() + dials[addr]++ + mu.Unlock() + }() + } + wg.Wait() + if len(dials) != 1 { + t.Errorf("saw %d dials; want 1: %v", len(dials), dials) + } + tr.CloseIdleConnections() + if err := retry(50, 10*time.Millisecond, func() error { + cp, ok := tr.connPool().(*clientConnPool) + if !ok { + return fmt.Errorf("Conn pool is %T; want *clientConnPool", tr.connPool()) + } + cp.mu.Lock() + defer cp.mu.Unlock() + if len(cp.dialing) != 0 { + return fmt.Errorf("dialing map = %v; want empty", cp.dialing) + } + if len(cp.conns) != 0 { + return fmt.Errorf("conns = %v; want empty", cp.conns) + } + if len(cp.keys) != 0 { + return fmt.Errorf("keys = %v; want empty", cp.keys) + } + return nil + }); err != nil { + t.Errorf("State of pool after CloseIdleConnections: %v", err) + } +} + +func retry(tries int, delay time.Duration, fn func() error) error { + var err error + for i := 0; i < tries; i++ { + err = fn() + if err == nil { + return nil + } + time.Sleep(delay) + } + return err +} + +func TestTransportAbortClosesPipes(t *testing.T) { + shutdown := make(chan struct{}) + st := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + w.(http.Flusher).Flush() + <-shutdown + }, + optOnlyServer, + ) + defer st.Close() + defer close(shutdown) // we must shutdown before st.Close() to avoid hanging + + done := make(chan struct{}) + requestMade := make(chan struct{}) + go func() { + defer close(done) + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + req, err := http.NewRequest("GET", st.ts.URL, nil) + if err != nil { + t.Fatal(err) + } + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + close(requestMade) + _, err = ioutil.ReadAll(res.Body) + if err == nil { + t.Error("expected error from res.Body.Read") + } + }() + + <-requestMade + // Now force the serve loop to end, via closing the connection. + st.closeConn() + // deadlock? that's a bug. + select { + case <-done: + case <-time.After(3 * time.Second): + t.Fatal("timeout") + } +} + +// TODO: merge this with TestTransportBody to make TestTransportRequest? This +// could be a table-driven test with extra goodies. +func TestTransportPath(t *testing.T) { + gotc := make(chan *url.URL, 1) + st := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + gotc <- r.URL + }, + optOnlyServer, + ) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + const ( + path = "/testpath" + query = "q=1" + ) + surl := st.ts.URL + path + "?" + query + req, err := http.NewRequest("POST", surl, nil) + if err != nil { + t.Fatal(err) + } + c := &http.Client{Transport: tr} + res, err := c.Do(req) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + got := <-gotc + if got.Path != path { + t.Errorf("Read Path = %q; want %q", got.Path, path) + } + if got.RawQuery != query { + t.Errorf("Read RawQuery = %q; want %q", got.RawQuery, query) + } +} + +func randString(n int) string { + rnd := rand.New(rand.NewSource(int64(n))) + b := make([]byte, n) + for i := range b { + b[i] = byte(rnd.Intn(256)) + } + return string(b) +} + +type panicReader struct{} + +func (panicReader) Read([]byte) (int, error) { panic("unexpected Read") } +func (panicReader) Close() error { panic("unexpected Close") } + +func TestActualContentLength(t *testing.T) { + tests := []struct { + req *http.Request + want int64 + }{ + // Verify we don't read from Body: + 0: { + req: &http.Request{Body: panicReader{}}, + want: -1, + }, + // nil Body means 0, regardless of ContentLength: + 1: { + req: &http.Request{Body: nil, ContentLength: 5}, + want: 0, + }, + // ContentLength is used if set. + 2: { + req: &http.Request{Body: panicReader{}, ContentLength: 5}, + want: 5, + }, + } + for i, tt := range tests { + got := actualContentLength(tt.req) + if got != tt.want { + t.Errorf("test[%d]: got %d; want %d", i, got, tt.want) + } + } +} + +func TestTransportBody(t *testing.T) { + bodyTests := []struct { + body string + noContentLen bool + }{ + {body: "some message"}, + {body: "some message", noContentLen: true}, + {body: strings.Repeat("a", 1<<20), noContentLen: true}, + {body: strings.Repeat("a", 1<<20)}, + {body: randString(16<<10 - 1)}, + {body: randString(16 << 10)}, + {body: randString(16<<10 + 1)}, + {body: randString(512<<10 - 1)}, + {body: randString(512 << 10)}, + {body: randString(512<<10 + 1)}, + {body: randString(1<<20 - 1)}, + {body: randString(1 << 20)}, + {body: randString(1<<20 + 2)}, + } + + type reqInfo struct { + req *http.Request + slurp []byte + err error + } + gotc := make(chan reqInfo, 1) + st := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + slurp, err := ioutil.ReadAll(r.Body) + if err != nil { + gotc <- reqInfo{err: err} + } else { + gotc <- reqInfo{req: r, slurp: slurp} + } + }, + optOnlyServer, + ) + defer st.Close() + + for i, tt := range bodyTests { + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + var body io.Reader = strings.NewReader(tt.body) + if tt.noContentLen { + body = struct{ io.Reader }{body} // just a Reader, hiding concrete type and other methods + } + req, err := http.NewRequest("POST", st.ts.URL, body) + if err != nil { + t.Fatalf("#%d: %v", i, err) + } + c := &http.Client{Transport: tr} + res, err := c.Do(req) + if err != nil { + t.Fatalf("#%d: %v", i, err) + } + defer res.Body.Close() + ri := <-gotc + if ri.err != nil { + t.Errorf("#%d: read error: %v", i, ri.err) + continue + } + if got := string(ri.slurp); got != tt.body { + t.Errorf("#%d: Read body mismatch.\n got: %q (len %d)\nwant: %q (len %d)", i, shortString(got), len(got), shortString(tt.body), len(tt.body)) + } + wantLen := int64(len(tt.body)) + if tt.noContentLen && tt.body != "" { + wantLen = -1 + } + if ri.req.ContentLength != wantLen { + t.Errorf("#%d. handler got ContentLength = %v; want %v", i, ri.req.ContentLength, wantLen) + } + } +} + +func shortString(v string) string { + const maxLen = 100 + if len(v) <= maxLen { + return v + } + return fmt.Sprintf("%v[...%d bytes omitted...]%v", v[:maxLen/2], len(v)-maxLen, v[len(v)-maxLen/2:]) +} + +func TestTransportDialTLS(t *testing.T) { + var mu sync.Mutex // guards following + var gotReq, didDial bool + + ts := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + mu.Lock() + gotReq = true + mu.Unlock() + }, + optOnlyServer, + ) + defer ts.Close() + tr := &Transport{ + DialTLS: func(netw, addr string, cfg *tls.Config) (net.Conn, error) { + mu.Lock() + didDial = true + mu.Unlock() + cfg.InsecureSkipVerify = true + c, err := tls.Dial(netw, addr, cfg) + if err != nil { + return nil, err + } + return c, c.Handshake() + }, + } + defer tr.CloseIdleConnections() + client := &http.Client{Transport: tr} + res, err := client.Get(ts.ts.URL) + if err != nil { + t.Fatal(err) + } + res.Body.Close() + mu.Lock() + if !gotReq { + t.Error("didn't get request") + } + if !didDial { + t.Error("didn't use dial hook") + } +} + +func TestConfigureTransport(t *testing.T) { + t1 := &http.Transport{} + err := ConfigureTransport(t1) + if err == errTransportVersion { + t.Skip(err) + } + if err != nil { + t.Fatal(err) + } + if got := fmt.Sprintf("%#v", t1); !strings.Contains(got, `"h2"`) { + // Laziness, to avoid buildtags. + t.Errorf("stringification of HTTP/1 transport didn't contain \"h2\": %v", got) + } + wantNextProtos := []string{"h2", "http/1.1"} + if t1.TLSClientConfig == nil { + t.Errorf("nil t1.TLSClientConfig") + } else if !reflect.DeepEqual(t1.TLSClientConfig.NextProtos, wantNextProtos) { + t.Errorf("TLSClientConfig.NextProtos = %q; want %q", t1.TLSClientConfig.NextProtos, wantNextProtos) + } + if err := ConfigureTransport(t1); err == nil { + t.Error("unexpected success on second call to ConfigureTransport") + } + + // And does it work? + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, r.Proto) + }, optOnlyServer) + defer st.Close() + + t1.TLSClientConfig.InsecureSkipVerify = true + c := &http.Client{Transport: t1} + res, err := c.Get(st.ts.URL) + if err != nil { + t.Fatal(err) + } + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Fatal(err) + } + if got, want := string(slurp), "HTTP/2.0"; got != want { + t.Errorf("body = %q; want %q", got, want) + } +} + +type capitalizeReader struct { + r io.Reader +} + +func (cr capitalizeReader) Read(p []byte) (n int, err error) { + n, err = cr.r.Read(p) + for i, b := range p[:n] { + if b >= 'a' && b <= 'z' { + p[i] = b - ('a' - 'A') + } + } + return +} + +type flushWriter struct { + w io.Writer +} + +func (fw flushWriter) Write(p []byte) (n int, err error) { + n, err = fw.w.Write(p) + if f, ok := fw.w.(http.Flusher); ok { + f.Flush() + } + return +} + +type clientTester struct { + t *testing.T + tr *Transport + sc, cc net.Conn // server and client conn + fr *Framer // server's framer + client func() error + server func() error +} + +func newClientTester(t *testing.T) *clientTester { + var dialOnce struct { + sync.Mutex + dialed bool + } + ct := &clientTester{ + t: t, + } + ct.tr = &Transport{ + TLSClientConfig: tlsConfigInsecure, + DialTLS: func(network, addr string, cfg *tls.Config) (net.Conn, error) { + dialOnce.Lock() + defer dialOnce.Unlock() + if dialOnce.dialed { + return nil, errors.New("only one dial allowed in test mode") + } + dialOnce.dialed = true + return ct.cc, nil + }, + } + + ln := newLocalListener(t) + cc, err := net.Dial("tcp", ln.Addr().String()) + if err != nil { + t.Fatal(err) + + } + sc, err := ln.Accept() + if err != nil { + t.Fatal(err) + } + ln.Close() + ct.cc = cc + ct.sc = sc + ct.fr = NewFramer(sc, sc) + return ct +} + +func newLocalListener(t *testing.T) net.Listener { + ln, err := net.Listen("tcp4", "127.0.0.1:0") + if err == nil { + return ln + } + ln, err = net.Listen("tcp6", "[::1]:0") + if err != nil { + t.Fatal(err) + } + return ln +} + +func (ct *clientTester) greet() { + buf := make([]byte, len(ClientPreface)) + _, err := io.ReadFull(ct.sc, buf) + if err != nil { + ct.t.Fatalf("reading client preface: %v", err) + } + f, err := ct.fr.ReadFrame() + if err != nil { + ct.t.Fatalf("Reading client settings frame: %v", err) + } + if sf, ok := f.(*SettingsFrame); !ok { + ct.t.Fatalf("Wanted client settings frame; got %v", f) + _ = sf // stash it away? + } + if err := ct.fr.WriteSettings(); err != nil { + ct.t.Fatal(err) + } + if err := ct.fr.WriteSettingsAck(); err != nil { + ct.t.Fatal(err) + } +} + +func (ct *clientTester) readNonSettingsFrame() (Frame, error) { + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return nil, err + } + if _, ok := f.(*SettingsFrame); ok { + continue + } + return f, nil + } +} + +func (ct *clientTester) cleanup() { + ct.tr.CloseIdleConnections() +} + +func (ct *clientTester) run() { + errc := make(chan error, 2) + ct.start("client", errc, ct.client) + ct.start("server", errc, ct.server) + defer ct.cleanup() + for i := 0; i < 2; i++ { + if err := <-errc; err != nil { + ct.t.Error(err) + return + } + } +} + +func (ct *clientTester) start(which string, errc chan<- error, fn func() error) { + go func() { + finished := false + var err error + defer func() { + if !finished { + err = fmt.Errorf("%s goroutine didn't finish.", which) + } else if err != nil { + err = fmt.Errorf("%s: %v", which, err) + } + errc <- err + }() + err = fn() + finished = true + }() +} + +func (ct *clientTester) readFrame() (Frame, error) { + return readFrameTimeout(ct.fr, 2*time.Second) +} + +func (ct *clientTester) firstHeaders() (*HeadersFrame, error) { + for { + f, err := ct.readFrame() + if err != nil { + return nil, fmt.Errorf("ReadFrame while waiting for Headers: %v", err) + } + switch f.(type) { + case *WindowUpdateFrame, *SettingsFrame: + continue + } + hf, ok := f.(*HeadersFrame) + if !ok { + return nil, fmt.Errorf("Got %T; want HeadersFrame", f) + } + return hf, nil + } +} + +type countingReader struct { + n *int64 +} + +func (r countingReader) Read(p []byte) (n int, err error) { + for i := range p { + p[i] = byte(i) + } + atomic.AddInt64(r.n, int64(len(p))) + return len(p), err +} + +func TestTransportReqBodyAfterResponse_200(t *testing.T) { testTransportReqBodyAfterResponse(t, 200) } +func TestTransportReqBodyAfterResponse_403(t *testing.T) { testTransportReqBodyAfterResponse(t, 403) } + +func testTransportReqBodyAfterResponse(t *testing.T, status int) { + const bodySize = 10 << 20 + clientDone := make(chan struct{}) + ct := newClientTester(t) + ct.client = func() error { + defer ct.cc.(*net.TCPConn).CloseWrite() + defer close(clientDone) + + var n int64 // atomic + req, err := http.NewRequest("PUT", "https://dummy.tld/", io.LimitReader(countingReader{&n}, bodySize)) + if err != nil { + return err + } + res, err := ct.tr.RoundTrip(req) + if err != nil { + return fmt.Errorf("RoundTrip: %v", err) + } + defer res.Body.Close() + if res.StatusCode != status { + return fmt.Errorf("status code = %v; want %v", res.StatusCode, status) + } + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + return fmt.Errorf("Slurp: %v", err) + } + if len(slurp) > 0 { + return fmt.Errorf("unexpected body: %q", slurp) + } + if status == 200 { + if got := atomic.LoadInt64(&n); got != bodySize { + return fmt.Errorf("For 200 response, Transport wrote %d bytes; want %d", got, bodySize) + } + } else { + if got := atomic.LoadInt64(&n); got == 0 || got >= bodySize { + return fmt.Errorf("For %d response, Transport wrote %d bytes; want (0,%d) exclusive", status, got, bodySize) + } + } + return nil + } + ct.server = func() error { + ct.greet() + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + var dataRecv int64 + var closed bool + for { + f, err := ct.fr.ReadFrame() + if err != nil { + select { + case <-clientDone: + // If the client's done, it + // will have reported any + // errors on its side. + return nil + default: + return err + } + } + //println(fmt.Sprintf("server got frame: %v", f)) + switch f := f.(type) { + case *WindowUpdateFrame, *SettingsFrame: + case *HeadersFrame: + if !f.HeadersEnded() { + return fmt.Errorf("headers should have END_HEADERS be ended: %v", f) + } + if f.StreamEnded() { + return fmt.Errorf("headers contains END_STREAM unexpectedly: %v", f) + } + case *DataFrame: + dataLen := len(f.Data()) + if dataLen > 0 { + if dataRecv == 0 { + enc.WriteField(hpack.HeaderField{Name: ":status", Value: strconv.Itoa(status)}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.StreamID, + EndHeaders: true, + EndStream: false, + BlockFragment: buf.Bytes(), + }) + } + if err := ct.fr.WriteWindowUpdate(0, uint32(dataLen)); err != nil { + return err + } + if err := ct.fr.WriteWindowUpdate(f.StreamID, uint32(dataLen)); err != nil { + return err + } + } + dataRecv += int64(dataLen) + + if !closed && ((status != 200 && dataRecv > 0) || + (status == 200 && dataRecv == bodySize)) { + closed = true + if err := ct.fr.WriteData(f.StreamID, true, nil); err != nil { + return err + } + } + default: + return fmt.Errorf("Unexpected client frame %v", f) + } + } + } + ct.run() +} + +// See golang.org/issue/13444 +func TestTransportFullDuplex(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(200) // redundant but for clarity + w.(http.Flusher).Flush() + io.Copy(flushWriter{w}, capitalizeReader{r.Body}) + fmt.Fprintf(w, "bye.\n") + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + c := &http.Client{Transport: tr} + + pr, pw := io.Pipe() + req, err := http.NewRequest("PUT", st.ts.URL, ioutil.NopCloser(pr)) + if err != nil { + t.Fatal(err) + } + req.ContentLength = -1 + res, err := c.Do(req) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + if res.StatusCode != 200 { + t.Fatalf("StatusCode = %v; want %v", res.StatusCode, 200) + } + bs := bufio.NewScanner(res.Body) + want := func(v string) { + if !bs.Scan() { + t.Fatalf("wanted to read %q but Scan() = false, err = %v", v, bs.Err()) + } + } + write := func(v string) { + _, err := io.WriteString(pw, v) + if err != nil { + t.Fatalf("pipe write: %v", err) + } + } + write("foo\n") + want("FOO") + write("bar\n") + want("BAR") + pw.Close() + want("bye.") + if err := bs.Err(); err != nil { + t.Fatal(err) + } +} + +func TestTransportConnectRequest(t *testing.T) { + gotc := make(chan *http.Request, 1) + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + gotc <- r + }, optOnlyServer) + defer st.Close() + + u, err := url.Parse(st.ts.URL) + if err != nil { + t.Fatal(err) + } + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + c := &http.Client{Transport: tr} + + tests := []struct { + req *http.Request + want string + }{ + { + req: &http.Request{ + Method: "CONNECT", + Header: http.Header{}, + URL: u, + }, + want: u.Host, + }, + { + req: &http.Request{ + Method: "CONNECT", + Header: http.Header{}, + URL: u, + Host: "example.com:123", + }, + want: "example.com:123", + }, + } + + for i, tt := range tests { + res, err := c.Do(tt.req) + if err != nil { + t.Errorf("%d. RoundTrip = %v", i, err) + continue + } + res.Body.Close() + req := <-gotc + if req.Method != "CONNECT" { + t.Errorf("method = %q; want CONNECT", req.Method) + } + if req.Host != tt.want { + t.Errorf("Host = %q; want %q", req.Host, tt.want) + } + if req.URL.Host != tt.want { + t.Errorf("URL.Host = %q; want %q", req.URL.Host, tt.want) + } + } +} + +type headerType int + +const ( + noHeader headerType = iota // omitted + oneHeader + splitHeader // broken into continuation on purpose +) + +const ( + f0 = noHeader + f1 = oneHeader + f2 = splitHeader + d0 = false + d1 = true +) + +// Test all 36 combinations of response frame orders: +// (3 ways of 100-continue) * (2 ways of headers) * (2 ways of data) * (3 ways of trailers):func TestTransportResponsePattern_00f0(t *testing.T) { testTransportResponsePattern(h0, h1, false, h0) } +// Generated by http://play.golang.org/p/SScqYKJYXd +func TestTransportResPattern_c0h1d0t0(t *testing.T) { testTransportResPattern(t, f0, f1, d0, f0) } +func TestTransportResPattern_c0h1d0t1(t *testing.T) { testTransportResPattern(t, f0, f1, d0, f1) } +func TestTransportResPattern_c0h1d0t2(t *testing.T) { testTransportResPattern(t, f0, f1, d0, f2) } +func TestTransportResPattern_c0h1d1t0(t *testing.T) { testTransportResPattern(t, f0, f1, d1, f0) } +func TestTransportResPattern_c0h1d1t1(t *testing.T) { testTransportResPattern(t, f0, f1, d1, f1) } +func TestTransportResPattern_c0h1d1t2(t *testing.T) { testTransportResPattern(t, f0, f1, d1, f2) } +func TestTransportResPattern_c0h2d0t0(t *testing.T) { testTransportResPattern(t, f0, f2, d0, f0) } +func TestTransportResPattern_c0h2d0t1(t *testing.T) { testTransportResPattern(t, f0, f2, d0, f1) } +func TestTransportResPattern_c0h2d0t2(t *testing.T) { testTransportResPattern(t, f0, f2, d0, f2) } +func TestTransportResPattern_c0h2d1t0(t *testing.T) { testTransportResPattern(t, f0, f2, d1, f0) } +func TestTransportResPattern_c0h2d1t1(t *testing.T) { testTransportResPattern(t, f0, f2, d1, f1) } +func TestTransportResPattern_c0h2d1t2(t *testing.T) { testTransportResPattern(t, f0, f2, d1, f2) } +func TestTransportResPattern_c1h1d0t0(t *testing.T) { testTransportResPattern(t, f1, f1, d0, f0) } +func TestTransportResPattern_c1h1d0t1(t *testing.T) { testTransportResPattern(t, f1, f1, d0, f1) } +func TestTransportResPattern_c1h1d0t2(t *testing.T) { testTransportResPattern(t, f1, f1, d0, f2) } +func TestTransportResPattern_c1h1d1t0(t *testing.T) { testTransportResPattern(t, f1, f1, d1, f0) } +func TestTransportResPattern_c1h1d1t1(t *testing.T) { testTransportResPattern(t, f1, f1, d1, f1) } +func TestTransportResPattern_c1h1d1t2(t *testing.T) { testTransportResPattern(t, f1, f1, d1, f2) } +func TestTransportResPattern_c1h2d0t0(t *testing.T) { testTransportResPattern(t, f1, f2, d0, f0) } +func TestTransportResPattern_c1h2d0t1(t *testing.T) { testTransportResPattern(t, f1, f2, d0, f1) } +func TestTransportResPattern_c1h2d0t2(t *testing.T) { testTransportResPattern(t, f1, f2, d0, f2) } +func TestTransportResPattern_c1h2d1t0(t *testing.T) { testTransportResPattern(t, f1, f2, d1, f0) } +func TestTransportResPattern_c1h2d1t1(t *testing.T) { testTransportResPattern(t, f1, f2, d1, f1) } +func TestTransportResPattern_c1h2d1t2(t *testing.T) { testTransportResPattern(t, f1, f2, d1, f2) } +func TestTransportResPattern_c2h1d0t0(t *testing.T) { testTransportResPattern(t, f2, f1, d0, f0) } +func TestTransportResPattern_c2h1d0t1(t *testing.T) { testTransportResPattern(t, f2, f1, d0, f1) } +func TestTransportResPattern_c2h1d0t2(t *testing.T) { testTransportResPattern(t, f2, f1, d0, f2) } +func TestTransportResPattern_c2h1d1t0(t *testing.T) { testTransportResPattern(t, f2, f1, d1, f0) } +func TestTransportResPattern_c2h1d1t1(t *testing.T) { testTransportResPattern(t, f2, f1, d1, f1) } +func TestTransportResPattern_c2h1d1t2(t *testing.T) { testTransportResPattern(t, f2, f1, d1, f2) } +func TestTransportResPattern_c2h2d0t0(t *testing.T) { testTransportResPattern(t, f2, f2, d0, f0) } +func TestTransportResPattern_c2h2d0t1(t *testing.T) { testTransportResPattern(t, f2, f2, d0, f1) } +func TestTransportResPattern_c2h2d0t2(t *testing.T) { testTransportResPattern(t, f2, f2, d0, f2) } +func TestTransportResPattern_c2h2d1t0(t *testing.T) { testTransportResPattern(t, f2, f2, d1, f0) } +func TestTransportResPattern_c2h2d1t1(t *testing.T) { testTransportResPattern(t, f2, f2, d1, f1) } +func TestTransportResPattern_c2h2d1t2(t *testing.T) { testTransportResPattern(t, f2, f2, d1, f2) } + +func testTransportResPattern(t *testing.T, expect100Continue, resHeader headerType, withData bool, trailers headerType) { + const reqBody = "some request body" + const resBody = "some response body" + + if resHeader == noHeader { + // TODO: test 100-continue followed by immediate + // server stream reset, without headers in the middle? + panic("invalid combination") + } + + ct := newClientTester(t) + ct.client = func() error { + req, _ := http.NewRequest("POST", "https://dummy.tld/", strings.NewReader(reqBody)) + if expect100Continue != noHeader { + req.Header.Set("Expect", "100-continue") + } + res, err := ct.tr.RoundTrip(req) + if err != nil { + return fmt.Errorf("RoundTrip: %v", err) + } + defer res.Body.Close() + if res.StatusCode != 200 { + return fmt.Errorf("status code = %v; want 200", res.StatusCode) + } + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + return fmt.Errorf("Slurp: %v", err) + } + wantBody := resBody + if !withData { + wantBody = "" + } + if string(slurp) != wantBody { + return fmt.Errorf("body = %q; want %q", slurp, wantBody) + } + if trailers == noHeader { + if len(res.Trailer) > 0 { + t.Errorf("Trailer = %v; want none", res.Trailer) + } + } else { + want := http.Header{"Some-Trailer": {"some-value"}} + if !reflect.DeepEqual(res.Trailer, want) { + t.Errorf("Trailer = %v; want %v", res.Trailer, want) + } + } + return nil + } + ct.server = func() error { + ct.greet() + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return err + } + endStream := false + send := func(mode headerType) { + hbf := buf.Bytes() + switch mode { + case oneHeader: + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.Header().StreamID, + EndHeaders: true, + EndStream: endStream, + BlockFragment: hbf, + }) + case splitHeader: + if len(hbf) < 2 { + panic("too small") + } + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.Header().StreamID, + EndHeaders: false, + EndStream: endStream, + BlockFragment: hbf[:1], + }) + ct.fr.WriteContinuation(f.Header().StreamID, true, hbf[1:]) + default: + panic("bogus mode") + } + } + switch f := f.(type) { + case *WindowUpdateFrame, *SettingsFrame: + case *DataFrame: + if !f.StreamEnded() { + // No need to send flow control tokens. The test request body is tiny. + continue + } + // Response headers (1+ frames; 1 or 2 in this test, but never 0) + { + buf.Reset() + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: "x-foo", Value: "blah"}) + enc.WriteField(hpack.HeaderField{Name: "x-bar", Value: "more"}) + if trailers != noHeader { + enc.WriteField(hpack.HeaderField{Name: "trailer", Value: "some-trailer"}) + } + endStream = withData == false && trailers == noHeader + send(resHeader) + } + if withData { + endStream = trailers == noHeader + ct.fr.WriteData(f.StreamID, endStream, []byte(resBody)) + } + if trailers != noHeader { + endStream = true + buf.Reset() + enc.WriteField(hpack.HeaderField{Name: "some-trailer", Value: "some-value"}) + send(trailers) + } + if endStream { + return nil + } + case *HeadersFrame: + if expect100Continue != noHeader { + buf.Reset() + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "100"}) + send(expect100Continue) + } + } + } + } + ct.run() +} + +func TestTransportReceiveUndeclaredTrailer(t *testing.T) { + ct := newClientTester(t) + ct.client = func() error { + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if err != nil { + return fmt.Errorf("RoundTrip: %v", err) + } + defer res.Body.Close() + if res.StatusCode != 200 { + return fmt.Errorf("status code = %v; want 200", res.StatusCode) + } + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + return fmt.Errorf("res.Body ReadAll error = %q, %v; want %v", slurp, err, nil) + } + if len(slurp) > 0 { + return fmt.Errorf("body = %q; want nothing", slurp) + } + if _, ok := res.Trailer["Some-Trailer"]; !ok { + return fmt.Errorf("expected Some-Trailer") + } + return nil + } + ct.server = func() error { + ct.greet() + + var n int + var hf *HeadersFrame + for hf == nil && n < 10 { + f, err := ct.fr.ReadFrame() + if err != nil { + return err + } + hf, _ = f.(*HeadersFrame) + n++ + } + + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + + // send headers without Trailer header + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: false, + BlockFragment: buf.Bytes(), + }) + + // send trailers + buf.Reset() + enc.WriteField(hpack.HeaderField{Name: "some-trailer", Value: "I'm an undeclared Trailer!"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: true, + BlockFragment: buf.Bytes(), + }) + return nil + } + ct.run() +} + +func TestTransportInvalidTrailer_Pseudo1(t *testing.T) { + testTransportInvalidTrailer_Pseudo(t, oneHeader) +} +func TestTransportInvalidTrailer_Pseudo2(t *testing.T) { + testTransportInvalidTrailer_Pseudo(t, splitHeader) +} +func testTransportInvalidTrailer_Pseudo(t *testing.T, trailers headerType) { + testInvalidTrailer(t, trailers, pseudoHeaderError(":colon"), func(enc *hpack.Encoder) { + enc.WriteField(hpack.HeaderField{Name: ":colon", Value: "foo"}) + enc.WriteField(hpack.HeaderField{Name: "foo", Value: "bar"}) + }) +} + +func TestTransportInvalidTrailer_Capital1(t *testing.T) { + testTransportInvalidTrailer_Capital(t, oneHeader) +} +func TestTransportInvalidTrailer_Capital2(t *testing.T) { + testTransportInvalidTrailer_Capital(t, splitHeader) +} +func testTransportInvalidTrailer_Capital(t *testing.T, trailers headerType) { + testInvalidTrailer(t, trailers, headerFieldNameError("Capital"), func(enc *hpack.Encoder) { + enc.WriteField(hpack.HeaderField{Name: "foo", Value: "bar"}) + enc.WriteField(hpack.HeaderField{Name: "Capital", Value: "bad"}) + }) +} +func TestTransportInvalidTrailer_EmptyFieldName(t *testing.T) { + testInvalidTrailer(t, oneHeader, headerFieldNameError(""), func(enc *hpack.Encoder) { + enc.WriteField(hpack.HeaderField{Name: "", Value: "bad"}) + }) +} +func TestTransportInvalidTrailer_BinaryFieldValue(t *testing.T) { + testInvalidTrailer(t, oneHeader, headerFieldValueError("has\nnewline"), func(enc *hpack.Encoder) { + enc.WriteField(hpack.HeaderField{Name: "x", Value: "has\nnewline"}) + }) +} + +func testInvalidTrailer(t *testing.T, trailers headerType, wantErr error, writeTrailer func(*hpack.Encoder)) { + ct := newClientTester(t) + ct.client = func() error { + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if err != nil { + return fmt.Errorf("RoundTrip: %v", err) + } + defer res.Body.Close() + if res.StatusCode != 200 { + return fmt.Errorf("status code = %v; want 200", res.StatusCode) + } + slurp, err := ioutil.ReadAll(res.Body) + se, ok := err.(StreamError) + if !ok || se.Cause != wantErr { + return fmt.Errorf("res.Body ReadAll error = %q, %#v; want StreamError with cause %T, %#v", slurp, err, wantErr, wantErr) + } + if len(slurp) > 0 { + return fmt.Errorf("body = %q; want nothing", slurp) + } + return nil + } + ct.server = func() error { + ct.greet() + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return err + } + switch f := f.(type) { + case *HeadersFrame: + var endStream bool + send := func(mode headerType) { + hbf := buf.Bytes() + switch mode { + case oneHeader: + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.StreamID, + EndHeaders: true, + EndStream: endStream, + BlockFragment: hbf, + }) + case splitHeader: + if len(hbf) < 2 { + panic("too small") + } + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.StreamID, + EndHeaders: false, + EndStream: endStream, + BlockFragment: hbf[:1], + }) + ct.fr.WriteContinuation(f.StreamID, true, hbf[1:]) + default: + panic("bogus mode") + } + } + // Response headers (1+ frames; 1 or 2 in this test, but never 0) + { + buf.Reset() + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: "trailer", Value: "declared"}) + endStream = false + send(oneHeader) + } + // Trailers: + { + endStream = true + buf.Reset() + writeTrailer(enc) + send(trailers) + } + return nil + } + } + } + ct.run() +} + +func TestTransportChecksResponseHeaderListSize(t *testing.T) { + ct := newClientTester(t) + ct.client = func() error { + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if err != errResponseHeaderListSize { + if res != nil { + res.Body.Close() + } + size := int64(0) + for k, vv := range res.Header { + for _, v := range vv { + size += int64(len(k)) + int64(len(v)) + 32 + } + } + return fmt.Errorf("RoundTrip Error = %v (and %d bytes of response headers); want errResponseHeaderListSize", err, size) + } + return nil + } + ct.server = func() error { + ct.greet() + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return err + } + switch f := f.(type) { + case *HeadersFrame: + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + large := strings.Repeat("a", 1<<10) + for i := 0; i < 5042; i++ { + enc.WriteField(hpack.HeaderField{Name: large, Value: large}) + } + if size, want := buf.Len(), 6329; size != want { + // Note: this number might change if + // our hpack implementation + // changes. That's fine. This is + // just a sanity check that our + // response can fit in a single + // header block fragment frame. + return fmt.Errorf("encoding over 10MB of duplicate keypairs took %d bytes; expected %d", size, want) + } + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.StreamID, + EndHeaders: true, + EndStream: true, + BlockFragment: buf.Bytes(), + }) + return nil + } + } + } + ct.run() +} + +// Test that the the Transport returns a typed error from Response.Body.Read calls +// when the server sends an error. (here we use a panic, since that should generate +// a stream error, but others like cancel should be similar) +func TestTransportBodyReadErrorType(t *testing.T) { + doPanic := make(chan bool, 1) + st := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + w.(http.Flusher).Flush() // force headers out + <-doPanic + panic("boom") + }, + optOnlyServer, + optQuiet, + ) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + c := &http.Client{Transport: tr} + + res, err := c.Get(st.ts.URL) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + doPanic <- true + buf := make([]byte, 100) + n, err := res.Body.Read(buf) + want := StreamError{StreamID: 0x1, Code: 0x2} + if !reflect.DeepEqual(want, err) { + t.Errorf("Read = %v, %#v; want error %#v", n, err, want) + } +} + +// golang.org/issue/13924 +// This used to fail after many iterations, especially with -race: +// go test -v -run=TestTransportDoubleCloseOnWriteError -count=500 -race +func TestTransportDoubleCloseOnWriteError(t *testing.T) { + var ( + mu sync.Mutex + conn net.Conn // to close if set + ) + + st := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + mu.Lock() + defer mu.Unlock() + if conn != nil { + conn.Close() + } + }, + optOnlyServer, + ) + defer st.Close() + + tr := &Transport{ + TLSClientConfig: tlsConfigInsecure, + DialTLS: func(network, addr string, cfg *tls.Config) (net.Conn, error) { + tc, err := tls.Dial(network, addr, cfg) + if err != nil { + return nil, err + } + mu.Lock() + defer mu.Unlock() + conn = tc + return tc, nil + }, + } + defer tr.CloseIdleConnections() + c := &http.Client{Transport: tr} + c.Get(st.ts.URL) +} + +// Test that the http1 Transport.DisableKeepAlives option is respected +// and connections are closed as soon as idle. +// See golang.org/issue/14008 +func TestTransportDisableKeepAlives(t *testing.T) { + st := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, "hi") + }, + optOnlyServer, + ) + defer st.Close() + + connClosed := make(chan struct{}) // closed on tls.Conn.Close + tr := &Transport{ + t1: &http.Transport{ + DisableKeepAlives: true, + }, + TLSClientConfig: tlsConfigInsecure, + DialTLS: func(network, addr string, cfg *tls.Config) (net.Conn, error) { + tc, err := tls.Dial(network, addr, cfg) + if err != nil { + return nil, err + } + return ¬eCloseConn{Conn: tc, closefn: func() { close(connClosed) }}, nil + }, + } + c := &http.Client{Transport: tr} + res, err := c.Get(st.ts.URL) + if err != nil { + t.Fatal(err) + } + if _, err := ioutil.ReadAll(res.Body); err != nil { + t.Fatal(err) + } + defer res.Body.Close() + + select { + case <-connClosed: + case <-time.After(1 * time.Second): + t.Errorf("timeout") + } + +} + +// Test concurrent requests with Transport.DisableKeepAlives. We can share connections, +// but when things are totally idle, it still needs to close. +func TestTransportDisableKeepAlives_Concurrency(t *testing.T) { + const D = 25 * time.Millisecond + st := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + time.Sleep(D) + io.WriteString(w, "hi") + }, + optOnlyServer, + ) + defer st.Close() + + var dials int32 + var conns sync.WaitGroup + tr := &Transport{ + t1: &http.Transport{ + DisableKeepAlives: true, + }, + TLSClientConfig: tlsConfigInsecure, + DialTLS: func(network, addr string, cfg *tls.Config) (net.Conn, error) { + tc, err := tls.Dial(network, addr, cfg) + if err != nil { + return nil, err + } + atomic.AddInt32(&dials, 1) + conns.Add(1) + return ¬eCloseConn{Conn: tc, closefn: func() { conns.Done() }}, nil + }, + } + c := &http.Client{Transport: tr} + var reqs sync.WaitGroup + const N = 20 + for i := 0; i < N; i++ { + reqs.Add(1) + if i == N-1 { + // For the final request, try to make all the + // others close. This isn't verified in the + // count, other than the Log statement, since + // it's so timing dependent. This test is + // really to make sure we don't interrupt a + // valid request. + time.Sleep(D * 2) + } + go func() { + defer reqs.Done() + res, err := c.Get(st.ts.URL) + if err != nil { + t.Error(err) + return + } + if _, err := ioutil.ReadAll(res.Body); err != nil { + t.Error(err) + return + } + res.Body.Close() + }() + } + reqs.Wait() + conns.Wait() + t.Logf("did %d dials, %d requests", atomic.LoadInt32(&dials), N) +} + +type noteCloseConn struct { + net.Conn + onceClose sync.Once + closefn func() +} + +func (c *noteCloseConn) Close() error { + c.onceClose.Do(c.closefn) + return c.Conn.Close() +} + +func isTimeout(err error) bool { + switch err := err.(type) { + case nil: + return false + case *url.Error: + return isTimeout(err.Err) + case net.Error: + return err.Timeout() + } + return false +} + +// Test that the http1 Transport.ResponseHeaderTimeout option and cancel is sent. +func TestTransportResponseHeaderTimeout_NoBody(t *testing.T) { + testTransportResponseHeaderTimeout(t, false) +} +func TestTransportResponseHeaderTimeout_Body(t *testing.T) { + testTransportResponseHeaderTimeout(t, true) +} + +func testTransportResponseHeaderTimeout(t *testing.T, body bool) { + ct := newClientTester(t) + ct.tr.t1 = &http.Transport{ + ResponseHeaderTimeout: 5 * time.Millisecond, + } + ct.client = func() error { + c := &http.Client{Transport: ct.tr} + var err error + var n int64 + const bodySize = 4 << 20 + if body { + _, err = c.Post("https://dummy.tld/", "text/foo", io.LimitReader(countingReader{&n}, bodySize)) + } else { + _, err = c.Get("https://dummy.tld/") + } + if !isTimeout(err) { + t.Errorf("client expected timeout error; got %#v", err) + } + if body && n != bodySize { + t.Errorf("only read %d bytes of body; want %d", n, bodySize) + } + return nil + } + ct.server = func() error { + ct.greet() + for { + f, err := ct.fr.ReadFrame() + if err != nil { + t.Logf("ReadFrame: %v", err) + return nil + } + switch f := f.(type) { + case *DataFrame: + dataLen := len(f.Data()) + if dataLen > 0 { + if err := ct.fr.WriteWindowUpdate(0, uint32(dataLen)); err != nil { + return err + } + if err := ct.fr.WriteWindowUpdate(f.StreamID, uint32(dataLen)); err != nil { + return err + } + } + case *RSTStreamFrame: + if f.StreamID == 1 && f.ErrCode == ErrCodeCancel { + return nil + } + } + } + } + ct.run() +} + +func TestTransportDisableCompression(t *testing.T) { + const body = "sup" + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + want := http.Header{ + "User-Agent": []string{"Go-http-client/2.0"}, + } + if !reflect.DeepEqual(r.Header, want) { + t.Errorf("request headers = %v; want %v", r.Header, want) + } + }, optOnlyServer) + defer st.Close() + + tr := &Transport{ + TLSClientConfig: tlsConfigInsecure, + t1: &http.Transport{ + DisableCompression: true, + }, + } + defer tr.CloseIdleConnections() + + req, err := http.NewRequest("GET", st.ts.URL, nil) + if err != nil { + t.Fatal(err) + } + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() +} + +// RFC 7540 section 8.1.2.2 +func TestTransportRejectsConnHeaders(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + var got []string + for k := range r.Header { + got = append(got, k) + } + sort.Strings(got) + w.Header().Set("Got-Header", strings.Join(got, ",")) + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + tests := []struct { + key string + value []string + want string + }{ + { + key: "Upgrade", + value: []string{"anything"}, + want: "ERROR: http2: invalid Upgrade request header: [\"anything\"]", + }, + { + key: "Connection", + value: []string{"foo"}, + want: "ERROR: http2: invalid Connection request header: [\"foo\"]", + }, + { + key: "Connection", + value: []string{"close"}, + want: "Accept-Encoding,User-Agent", + }, + { + key: "Connection", + value: []string{"close", "something-else"}, + want: "ERROR: http2: invalid Connection request header: [\"close\" \"something-else\"]", + }, + { + key: "Connection", + value: []string{"keep-alive"}, + want: "Accept-Encoding,User-Agent", + }, + { + key: "Proxy-Connection", // just deleted and ignored + value: []string{"keep-alive"}, + want: "Accept-Encoding,User-Agent", + }, + { + key: "Transfer-Encoding", + value: []string{""}, + want: "Accept-Encoding,User-Agent", + }, + { + key: "Transfer-Encoding", + value: []string{"foo"}, + want: "ERROR: http2: invalid Transfer-Encoding request header: [\"foo\"]", + }, + { + key: "Transfer-Encoding", + value: []string{"chunked"}, + want: "Accept-Encoding,User-Agent", + }, + { + key: "Transfer-Encoding", + value: []string{"chunked", "other"}, + want: "ERROR: http2: invalid Transfer-Encoding request header: [\"chunked\" \"other\"]", + }, + { + key: "Content-Length", + value: []string{"123"}, + want: "Accept-Encoding,User-Agent", + }, + { + key: "Keep-Alive", + value: []string{"doop"}, + want: "Accept-Encoding,User-Agent", + }, + } + + for _, tt := range tests { + req, _ := http.NewRequest("GET", st.ts.URL, nil) + req.Header[tt.key] = tt.value + res, err := tr.RoundTrip(req) + var got string + if err != nil { + got = fmt.Sprintf("ERROR: %v", err) + } else { + got = res.Header.Get("Got-Header") + res.Body.Close() + } + if got != tt.want { + t.Errorf("For key %q, value %q, got = %q; want %q", tt.key, tt.value, got, tt.want) + } + } +} + +// golang.org/issue/14048 +func TestTransportFailsOnInvalidHeaders(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + var got []string + for k := range r.Header { + got = append(got, k) + } + sort.Strings(got) + w.Header().Set("Got-Header", strings.Join(got, ",")) + }, optOnlyServer) + defer st.Close() + + tests := [...]struct { + h http.Header + wantErr string + }{ + 0: { + h: http.Header{"with space": {"foo"}}, + wantErr: `invalid HTTP header name "with space"`, + }, + 1: { + h: http.Header{"name": {"Брэд"}}, + wantErr: "", // okay + }, + 2: { + h: http.Header{"имя": {"Brad"}}, + wantErr: `invalid HTTP header name "имя"`, + }, + 3: { + h: http.Header{"foo": {"foo\x01bar"}}, + wantErr: `invalid HTTP header value "foo\x01bar" for header "foo"`, + }, + } + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + for i, tt := range tests { + req, _ := http.NewRequest("GET", st.ts.URL, nil) + req.Header = tt.h + res, err := tr.RoundTrip(req) + var bad bool + if tt.wantErr == "" { + if err != nil { + bad = true + t.Errorf("case %d: error = %v; want no error", i, err) + } + } else { + if !strings.Contains(fmt.Sprint(err), tt.wantErr) { + bad = true + t.Errorf("case %d: error = %v; want error %q", i, err, tt.wantErr) + } + } + if err == nil { + if bad { + t.Logf("case %d: server got headers %q", i, res.Header.Get("Got-Header")) + } + res.Body.Close() + } + } +} + +// Tests that gzipReader doesn't crash on a second Read call following +// the first Read call's gzip.NewReader returning an error. +func TestGzipReader_DoubleReadCrash(t *testing.T) { + gz := &gzipReader{ + body: ioutil.NopCloser(strings.NewReader("0123456789")), + } + var buf [1]byte + n, err1 := gz.Read(buf[:]) + if n != 0 || !strings.Contains(fmt.Sprint(err1), "invalid header") { + t.Fatalf("Read = %v, %v; want 0, invalid header", n, err1) + } + n, err2 := gz.Read(buf[:]) + if n != 0 || err2 != err1 { + t.Fatalf("second Read = %v, %v; want 0, %v", n, err2, err1) + } +} + +func TestTransportNewTLSConfig(t *testing.T) { + tests := [...]struct { + conf *tls.Config + host string + want *tls.Config + }{ + // Normal case. + 0: { + conf: nil, + host: "foo.com", + want: &tls.Config{ + ServerName: "foo.com", + NextProtos: []string{NextProtoTLS}, + }, + }, + + // User-provided name (bar.com) takes precedence: + 1: { + conf: &tls.Config{ + ServerName: "bar.com", + }, + host: "foo.com", + want: &tls.Config{ + ServerName: "bar.com", + NextProtos: []string{NextProtoTLS}, + }, + }, + + // NextProto is prepended: + 2: { + conf: &tls.Config{ + NextProtos: []string{"foo", "bar"}, + }, + host: "example.com", + want: &tls.Config{ + ServerName: "example.com", + NextProtos: []string{NextProtoTLS, "foo", "bar"}, + }, + }, + + // NextProto is not duplicated: + 3: { + conf: &tls.Config{ + NextProtos: []string{"foo", "bar", NextProtoTLS}, + }, + host: "example.com", + want: &tls.Config{ + ServerName: "example.com", + NextProtos: []string{"foo", "bar", NextProtoTLS}, + }, + }, + } + for i, tt := range tests { + // Ignore the session ticket keys part, which ends up populating + // unexported fields in the Config: + if tt.conf != nil { + tt.conf.SessionTicketsDisabled = true + } + + tr := &Transport{TLSClientConfig: tt.conf} + got := tr.newTLSConfig(tt.host) + + got.SessionTicketsDisabled = false + + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("%d. got %#v; want %#v", i, got, tt.want) + } + } +} + +// The Google GFE responds to HEAD requests with a HEADERS frame +// without END_STREAM, followed by a 0-length DATA frame with +// END_STREAM. Make sure we don't get confused by that. (We did.) +func TestTransportReadHeadResponse(t *testing.T) { + ct := newClientTester(t) + clientDone := make(chan struct{}) + ct.client = func() error { + defer close(clientDone) + req, _ := http.NewRequest("HEAD", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if err != nil { + return err + } + if res.ContentLength != 123 { + return fmt.Errorf("Content-Length = %d; want 123", res.ContentLength) + } + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + return fmt.Errorf("ReadAll: %v", err) + } + if len(slurp) > 0 { + return fmt.Errorf("Unexpected non-empty ReadAll body: %q", slurp) + } + return nil + } + ct.server = func() error { + ct.greet() + for { + f, err := ct.fr.ReadFrame() + if err != nil { + t.Logf("ReadFrame: %v", err) + return nil + } + hf, ok := f.(*HeadersFrame) + if !ok { + continue + } + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: "content-length", Value: "123"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: false, // as the GFE does + BlockFragment: buf.Bytes(), + }) + ct.fr.WriteData(hf.StreamID, true, nil) + + <-clientDone + return nil + } + } + ct.run() +} + +type neverEnding byte + +func (b neverEnding) Read(p []byte) (int, error) { + for i := range p { + p[i] = byte(b) + } + return len(p), nil +} + +// golang.org/issue/15425: test that a handler closing the request +// body doesn't terminate the stream to the peer. (It just stops +// readability from the handler's side, and eventually the client +// runs out of flow control tokens) +func TestTransportHandlerBodyClose(t *testing.T) { + const bodySize = 10 << 20 + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + r.Body.Close() + io.Copy(w, io.LimitReader(neverEnding('A'), bodySize)) + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + g0 := runtime.NumGoroutine() + + const numReq = 10 + for i := 0; i < numReq; i++ { + req, err := http.NewRequest("POST", st.ts.URL, struct{ io.Reader }{io.LimitReader(neverEnding('A'), bodySize)}) + if err != nil { + t.Fatal(err) + } + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + n, err := io.Copy(ioutil.Discard, res.Body) + res.Body.Close() + if n != bodySize || err != nil { + t.Fatalf("req#%d: Copy = %d, %v; want %d, nil", i, n, err, bodySize) + } + } + tr.CloseIdleConnections() + + gd := runtime.NumGoroutine() - g0 + if gd > numReq/2 { + t.Errorf("appeared to leak goroutines") + } + +} + +// https://golang.org/issue/15930 +func TestTransportFlowControl(t *testing.T) { + const bufLen = 64 << 10 + var total int64 = 100 << 20 // 100MB + if testing.Short() { + total = 10 << 20 + } + + var wrote int64 // updated atomically + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + b := make([]byte, bufLen) + for wrote < total { + n, err := w.Write(b) + atomic.AddInt64(&wrote, int64(n)) + if err != nil { + t.Errorf("ResponseWriter.Write error: %v", err) + break + } + w.(http.Flusher).Flush() + } + }, optOnlyServer) + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + req, err := http.NewRequest("GET", st.ts.URL, nil) + if err != nil { + t.Fatal("NewRequest error:", err) + } + resp, err := tr.RoundTrip(req) + if err != nil { + t.Fatal("RoundTrip error:", err) + } + defer resp.Body.Close() + + var read int64 + b := make([]byte, bufLen) + for { + n, err := resp.Body.Read(b) + if err == io.EOF { + break + } + if err != nil { + t.Fatal("Read error:", err) + } + read += int64(n) + + const max = transportDefaultStreamFlow + if w := atomic.LoadInt64(&wrote); -max > read-w || read-w > max { + t.Fatalf("Too much data inflight: server wrote %v bytes but client only received %v", w, read) + } + + // Let the server get ahead of the client. + time.Sleep(1 * time.Millisecond) + } +} + +// golang.org/issue/14627 -- if the server sends a GOAWAY frame, make +// the Transport remember it and return it back to users (via +// RoundTrip or request body reads) if needed (e.g. if the server +// proceeds to close the TCP connection before the client gets its +// response) +func TestTransportUsesGoAwayDebugError_RoundTrip(t *testing.T) { + testTransportUsesGoAwayDebugError(t, false) +} + +func TestTransportUsesGoAwayDebugError_Body(t *testing.T) { + testTransportUsesGoAwayDebugError(t, true) +} + +func testTransportUsesGoAwayDebugError(t *testing.T, failMidBody bool) { + ct := newClientTester(t) + clientDone := make(chan struct{}) + + const goAwayErrCode = ErrCodeHTTP11Required // arbitrary + const goAwayDebugData = "some debug data" + + ct.client = func() error { + defer close(clientDone) + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if failMidBody { + if err != nil { + return fmt.Errorf("unexpected client RoundTrip error: %v", err) + } + _, err = io.Copy(ioutil.Discard, res.Body) + res.Body.Close() + } + want := GoAwayError{ + LastStreamID: 5, + ErrCode: goAwayErrCode, + DebugData: goAwayDebugData, + } + if !reflect.DeepEqual(err, want) { + t.Errorf("RoundTrip error = %T: %#v, want %T (%#v)", err, err, want, want) + } + return nil + } + ct.server = func() error { + ct.greet() + for { + f, err := ct.fr.ReadFrame() + if err != nil { + t.Logf("ReadFrame: %v", err) + return nil + } + hf, ok := f.(*HeadersFrame) + if !ok { + continue + } + if failMidBody { + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: "content-length", Value: "123"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: false, + BlockFragment: buf.Bytes(), + }) + } + // Write two GOAWAY frames, to test that the Transport takes + // the interesting parts of both. + ct.fr.WriteGoAway(5, ErrCodeNo, []byte(goAwayDebugData)) + ct.fr.WriteGoAway(5, goAwayErrCode, nil) + ct.sc.(*net.TCPConn).CloseWrite() + <-clientDone + return nil + } + } + ct.run() +} + +// See golang.org/issue/16481 +func TestTransportReturnsUnusedFlowControl(t *testing.T) { + ct := newClientTester(t) + + clientClosed := make(chan bool, 1) + serverWroteBody := make(chan bool, 1) + + ct.client = func() error { + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if err != nil { + return err + } + <-serverWroteBody + + if n, err := res.Body.Read(make([]byte, 1)); err != nil || n != 1 { + return fmt.Errorf("body read = %v, %v; want 1, nil", n, err) + } + res.Body.Close() // leaving 4999 bytes unread + clientClosed <- true + + return nil + } + ct.server = func() error { + ct.greet() + + var hf *HeadersFrame + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return fmt.Errorf("ReadFrame while waiting for Headers: %v", err) + } + switch f.(type) { + case *WindowUpdateFrame, *SettingsFrame: + continue + } + var ok bool + hf, ok = f.(*HeadersFrame) + if !ok { + return fmt.Errorf("Got %T; want HeadersFrame", f) + } + break + } + + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: "content-length", Value: "5000"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: false, + BlockFragment: buf.Bytes(), + }) + ct.fr.WriteData(hf.StreamID, false, make([]byte, 5000)) // without ending stream + serverWroteBody <- true + + <-clientClosed + + waitingFor := "RSTStreamFrame" + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return fmt.Errorf("ReadFrame while waiting for %s: %v", waitingFor, err) + } + if _, ok := f.(*SettingsFrame); ok { + continue + } + switch waitingFor { + case "RSTStreamFrame": + if rf, ok := f.(*RSTStreamFrame); !ok || rf.ErrCode != ErrCodeCancel { + return fmt.Errorf("Expected a WindowUpdateFrame with code cancel; got %v", summarizeFrame(f)) + } + waitingFor = "WindowUpdateFrame" + case "WindowUpdateFrame": + if wuf, ok := f.(*WindowUpdateFrame); !ok || wuf.Increment != 4999 { + return fmt.Errorf("Expected WindowUpdateFrame for 4999 bytes; got %v", summarizeFrame(f)) + } + return nil + } + } + } + ct.run() +} + +// Issue 16612: adjust flow control on open streams when transport +// receives SETTINGS with INITIAL_WINDOW_SIZE from server. +func TestTransportAdjustsFlowControl(t *testing.T) { + ct := newClientTester(t) + clientDone := make(chan struct{}) + + const bodySize = 1 << 20 + + ct.client = func() error { + defer ct.cc.(*net.TCPConn).CloseWrite() + defer close(clientDone) + + req, _ := http.NewRequest("POST", "https://dummy.tld/", struct{ io.Reader }{io.LimitReader(neverEnding('A'), bodySize)}) + res, err := ct.tr.RoundTrip(req) + if err != nil { + return err + } + res.Body.Close() + return nil + } + ct.server = func() error { + _, err := io.ReadFull(ct.sc, make([]byte, len(ClientPreface))) + if err != nil { + return fmt.Errorf("reading client preface: %v", err) + } + + var gotBytes int64 + var sentSettings bool + for { + f, err := ct.fr.ReadFrame() + if err != nil { + select { + case <-clientDone: + return nil + default: + return fmt.Errorf("ReadFrame while waiting for Headers: %v", err) + } + } + switch f := f.(type) { + case *DataFrame: + gotBytes += int64(len(f.Data())) + // After we've got half the client's + // initial flow control window's worth + // of request body data, give it just + // enough flow control to finish. + if gotBytes >= initialWindowSize/2 && !sentSettings { + sentSettings = true + + ct.fr.WriteSettings(Setting{ID: SettingInitialWindowSize, Val: bodySize}) + ct.fr.WriteWindowUpdate(0, bodySize) + ct.fr.WriteSettingsAck() + } + + if f.StreamEnded() { + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.StreamID, + EndHeaders: true, + EndStream: true, + BlockFragment: buf.Bytes(), + }) + } + } + } + } + ct.run() +} + +// See golang.org/issue/16556 +func TestTransportReturnsDataPaddingFlowControl(t *testing.T) { + ct := newClientTester(t) + + unblockClient := make(chan bool, 1) + + ct.client = func() error { + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if err != nil { + return err + } + defer res.Body.Close() + <-unblockClient + return nil + } + ct.server = func() error { + ct.greet() + + var hf *HeadersFrame + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return fmt.Errorf("ReadFrame while waiting for Headers: %v", err) + } + switch f.(type) { + case *WindowUpdateFrame, *SettingsFrame: + continue + } + var ok bool + hf, ok = f.(*HeadersFrame) + if !ok { + return fmt.Errorf("Got %T; want HeadersFrame", f) + } + break + } + + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: "content-length", Value: "5000"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: false, + BlockFragment: buf.Bytes(), + }) + pad := make([]byte, 5) + ct.fr.WriteDataPadded(hf.StreamID, false, make([]byte, 5000), pad) // without ending stream + + f, err := ct.readNonSettingsFrame() + if err != nil { + return fmt.Errorf("ReadFrame while waiting for first WindowUpdateFrame: %v", err) + } + wantBack := uint32(len(pad)) + 1 // one byte for the length of the padding + if wuf, ok := f.(*WindowUpdateFrame); !ok || wuf.Increment != wantBack || wuf.StreamID != 0 { + return fmt.Errorf("Expected conn WindowUpdateFrame for %d bytes; got %v", wantBack, summarizeFrame(f)) + } + + f, err = ct.readNonSettingsFrame() + if err != nil { + return fmt.Errorf("ReadFrame while waiting for second WindowUpdateFrame: %v", err) + } + if wuf, ok := f.(*WindowUpdateFrame); !ok || wuf.Increment != wantBack || wuf.StreamID == 0 { + return fmt.Errorf("Expected stream WindowUpdateFrame for %d bytes; got %v", wantBack, summarizeFrame(f)) + } + unblockClient <- true + return nil + } + ct.run() +} + +// golang.org/issue/16572 -- RoundTrip shouldn't hang when it gets a +// StreamError as a result of the response HEADERS +func TestTransportReturnsErrorOnBadResponseHeaders(t *testing.T) { + ct := newClientTester(t) + + ct.client = func() error { + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if err == nil { + res.Body.Close() + return errors.New("unexpected successful GET") + } + want := StreamError{1, ErrCodeProtocol, headerFieldNameError(" content-type")} + if !reflect.DeepEqual(want, err) { + t.Errorf("RoundTrip error = %#v; want %#v", err, want) + } + return nil + } + ct.server = func() error { + ct.greet() + + hf, err := ct.firstHeaders() + if err != nil { + return err + } + + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: " content-type", Value: "bogus"}) // bogus spaces + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: false, + BlockFragment: buf.Bytes(), + }) + + for { + fr, err := ct.readFrame() + if err != nil { + return fmt.Errorf("error waiting for RST_STREAM from client: %v", err) + } + if _, ok := fr.(*SettingsFrame); ok { + continue + } + if rst, ok := fr.(*RSTStreamFrame); !ok || rst.StreamID != 1 || rst.ErrCode != ErrCodeProtocol { + t.Errorf("Frame = %v; want RST_STREAM for stream 1 with ErrCodeProtocol", summarizeFrame(fr)) + } + break + } + + return nil + } + ct.run() +} + +// byteAndEOFReader returns is in an io.Reader which reads one byte +// (the underlying byte) and io.EOF at once in its Read call. +type byteAndEOFReader byte + +func (b byteAndEOFReader) Read(p []byte) (n int, err error) { + if len(p) == 0 { + panic("unexpected useless call") + } + p[0] = byte(b) + return 1, io.EOF +} + +// Issue 16788: the Transport had a regression where it started +// sending a spurious DATA frame with a duplicate END_STREAM bit after +// the request body writer goroutine had already read an EOF from the +// Request.Body and included the END_STREAM on a data-carrying DATA +// frame. +// +// Notably, to trigger this, the requests need to use a Request.Body +// which returns (non-0, io.EOF) and also needs to set the ContentLength +// explicitly. +func TestTransportBodyDoubleEndStream(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + // Nothing. + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + for i := 0; i < 2; i++ { + req, _ := http.NewRequest("POST", st.ts.URL, byteAndEOFReader('a')) + req.ContentLength = 1 + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatalf("failure on req %d: %v", i+1, err) + } + defer res.Body.Close() + } +} + +// golangorg/issue/16847 +func TestTransportRequestPathPseudo(t *testing.T) { + type result struct { + path string + err string + } + tests := []struct { + req *http.Request + want result + }{ + 0: { + req: &http.Request{ + Method: "GET", + URL: &url.URL{ + Host: "foo.com", + Path: "/foo", + }, + }, + want: result{path: "/foo"}, + }, + // I guess we just don't let users request "//foo" as + // a path, since it's illegal to start with two + // slashes.... + 1: { + req: &http.Request{ + Method: "GET", + URL: &url.URL{ + Host: "foo.com", + Path: "//foo", + }, + }, + want: result{err: `invalid request :path "//foo"`}, + }, + + // Opaque with //$Matching_Hostname/path + 2: { + req: &http.Request{ + Method: "GET", + URL: &url.URL{ + Scheme: "https", + Opaque: "//foo.com/path", + Host: "foo.com", + Path: "/ignored", + }, + }, + want: result{path: "/path"}, + }, + + // Opaque with some other Request.Host instead: + 3: { + req: &http.Request{ + Method: "GET", + Host: "bar.com", + URL: &url.URL{ + Scheme: "https", + Opaque: "//bar.com/path", + Host: "foo.com", + Path: "/ignored", + }, + }, + want: result{path: "/path"}, + }, + + // Opaque without the leading "//": + 4: { + req: &http.Request{ + Method: "GET", + URL: &url.URL{ + Opaque: "/path", + Host: "foo.com", + Path: "/ignored", + }, + }, + want: result{path: "/path"}, + }, + + // Opaque we can't handle: + 5: { + req: &http.Request{ + Method: "GET", + URL: &url.URL{ + Scheme: "https", + Opaque: "//unknown_host/path", + Host: "foo.com", + Path: "/ignored", + }, + }, + want: result{err: `invalid request :path "https://unknown_host/path" from URL.Opaque = "//unknown_host/path"`}, + }, + + // A CONNECT request: + 6: { + req: &http.Request{ + Method: "CONNECT", + URL: &url.URL{ + Host: "foo.com", + }, + }, + want: result{}, + }, + } + for i, tt := range tests { + cc := &ClientConn{} + cc.henc = hpack.NewEncoder(&cc.hbuf) + cc.mu.Lock() + hdrs, err := cc.encodeHeaders(tt.req, false, "", -1) + cc.mu.Unlock() + var got result + hpackDec := hpack.NewDecoder(initialHeaderTableSize, func(f hpack.HeaderField) { + if f.Name == ":path" { + got.path = f.Value + } + }) + if err != nil { + got.err = err.Error() + } else if len(hdrs) > 0 { + if _, err := hpackDec.Write(hdrs); err != nil { + t.Errorf("%d. bogus hpack: %v", i, err) + continue + } + } + if got != tt.want { + t.Errorf("%d. got %+v; want %+v", i, got, tt.want) + } + + } + +} + +// golang.org/issue/17071 -- don't sniff the first byte of the request body +// before we've determined that the ClientConn is usable. +func TestRoundTripDoesntConsumeRequestBodyEarly(t *testing.T) { + const body = "foo" + req, _ := http.NewRequest("POST", "http://foo.com/", ioutil.NopCloser(strings.NewReader(body))) + cc := &ClientConn{ + closed: true, + } + _, err := cc.RoundTrip(req) + if err != errClientConnUnusable { + t.Fatalf("RoundTrip = %v; want errClientConnUnusable", err) + } + slurp, err := ioutil.ReadAll(req.Body) + if err != nil { + t.Errorf("ReadAll = %v", err) + } + if string(slurp) != body { + t.Errorf("Body = %q; want %q", slurp, body) + } +} + +func TestClientConnPing(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {}, optOnlyServer) + defer st.Close() + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + cc, err := tr.dialClientConn(st.ts.Listener.Addr().String(), false) + if err != nil { + t.Fatal(err) + } + if err = cc.Ping(testContext{}); err != nil { + t.Fatal(err) + } +} + +// Issue 16974: if the server sent a DATA frame after the user +// canceled the Transport's Request, the Transport previously wrote to a +// closed pipe, got an error, and ended up closing the whole TCP +// connection. +func TestTransportCancelDataResponseRace(t *testing.T) { + cancel := make(chan struct{}) + clientGotError := make(chan bool, 1) + + const msg = "Hello." + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + if strings.Contains(r.URL.Path, "/hello") { + time.Sleep(50 * time.Millisecond) + io.WriteString(w, msg) + return + } + for i := 0; i < 50; i++ { + io.WriteString(w, "Some data.") + w.(http.Flusher).Flush() + if i == 2 { + close(cancel) + <-clientGotError + } + time.Sleep(10 * time.Millisecond) + } + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + c := &http.Client{Transport: tr} + req, _ := http.NewRequest("GET", st.ts.URL, nil) + req.Cancel = cancel + res, err := c.Do(req) + if err != nil { + t.Fatal(err) + } + if _, err = io.Copy(ioutil.Discard, res.Body); err == nil { + t.Fatal("unexpected success") + } + clientGotError <- true + + res, err = c.Get(st.ts.URL + "/hello") + if err != nil { + t.Fatal(err) + } + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Fatal(err) + } + if string(slurp) != msg { + t.Errorf("Got = %q; want %q", slurp, msg) + } +} + +func TestTransportRetryAfterGOAWAY(t *testing.T) { + var dialer struct { + sync.Mutex + count int + } + ct1 := make(chan *clientTester) + ct2 := make(chan *clientTester) + + ln := newLocalListener(t) + defer ln.Close() + + tr := &Transport{ + TLSClientConfig: tlsConfigInsecure, + } + tr.DialTLS = func(network, addr string, cfg *tls.Config) (net.Conn, error) { + dialer.Lock() + defer dialer.Unlock() + dialer.count++ + if dialer.count == 3 { + return nil, errors.New("unexpected number of dials") + } + cc, err := net.Dial("tcp", ln.Addr().String()) + if err != nil { + return nil, fmt.Errorf("dial error: %v", err) + } + sc, err := ln.Accept() + if err != nil { + return nil, fmt.Errorf("accept error: %v", err) + } + ct := &clientTester{ + t: t, + tr: tr, + cc: cc, + sc: sc, + fr: NewFramer(sc, sc), + } + switch dialer.count { + case 1: + ct1 <- ct + case 2: + ct2 <- ct + } + return cc, nil + } + + errs := make(chan error, 3) + done := make(chan struct{}) + defer close(done) + + // Client. + go func() { + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + res, err := tr.RoundTrip(req) + if res != nil { + res.Body.Close() + if got := res.Header.Get("Foo"); got != "bar" { + err = fmt.Errorf("foo header = %q; want bar", got) + } + } + if err != nil { + err = fmt.Errorf("RoundTrip: %v", err) + } + errs <- err + }() + + connToClose := make(chan io.Closer, 2) + + // Server for the first request. + go func() { + var ct *clientTester + select { + case ct = <-ct1: + case <-done: + return + } + + connToClose <- ct.cc + ct.greet() + hf, err := ct.firstHeaders() + if err != nil { + errs <- fmt.Errorf("server1 failed reading HEADERS: %v", err) + return + } + t.Logf("server1 got %v", hf) + if err := ct.fr.WriteGoAway(0 /*max id*/, ErrCodeNo, nil); err != nil { + errs <- fmt.Errorf("server1 failed writing GOAWAY: %v", err) + return + } + errs <- nil + }() + + // Server for the second request. + go func() { + var ct *clientTester + select { + case ct = <-ct2: + case <-done: + return + } + + connToClose <- ct.cc + ct.greet() + hf, err := ct.firstHeaders() + if err != nil { + errs <- fmt.Errorf("server2 failed reading HEADERS: %v", err) + return + } + t.Logf("server2 got %v", hf) + + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: "foo", Value: "bar"}) + err = ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: false, + BlockFragment: buf.Bytes(), + }) + if err != nil { + errs <- fmt.Errorf("server2 failed writing response HEADERS: %v", err) + } else { + errs <- nil + } + }() + + for k := 0; k < 3; k++ { + select { + case err := <-errs: + if err != nil { + t.Error(err) + } + case <-time.After(1 * time.Second): + t.Errorf("timed out") + } + } + + for { + select { + case c := <-connToClose: + c.Close() + default: + return + } + } +} + +func TestAuthorityAddr(t *testing.T) { + tests := []struct { + scheme, authority string + want string + }{ + {"http", "foo.com", "foo.com:80"}, + {"https", "foo.com", "foo.com:443"}, + {"https", "foo.com:1234", "foo.com:1234"}, + {"https", "1.2.3.4:1234", "1.2.3.4:1234"}, + {"https", "1.2.3.4", "1.2.3.4:443"}, + {"https", "[::1]:1234", "[::1]:1234"}, + {"https", "[::1]", "[::1]:443"}, + } + for _, tt := range tests { + got := authorityAddr(tt.scheme, tt.authority) + if got != tt.want { + t.Errorf("authorityAddr(%q, %q) = %q; want %q", tt.scheme, tt.authority, got, tt.want) + } + } +} diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go new file mode 100644 index 0000000..6b0dfae --- /dev/null +++ b/vendor/golang.org/x/net/http2/write.go @@ -0,0 +1,370 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "bytes" + "fmt" + "log" + "net/http" + "net/url" + "time" + + "golang.org/x/net/http2/hpack" + "golang.org/x/net/lex/httplex" +) + +// writeFramer is implemented by any type that is used to write frames. +type writeFramer interface { + writeFrame(writeContext) error + + // staysWithinBuffer reports whether this writer promises that + // it will only write less than or equal to size bytes, and it + // won't Flush the write context. + staysWithinBuffer(size int) bool +} + +// writeContext is the interface needed by the various frame writer +// types below. All the writeFrame methods below are scheduled via the +// frame writing scheduler (see writeScheduler in writesched.go). +// +// This interface is implemented by *serverConn. +// +// TODO: decide whether to a) use this in the client code (which didn't +// end up using this yet, because it has a simpler design, not +// currently implementing priorities), or b) delete this and +// make the server code a bit more concrete. +type writeContext interface { + Framer() *Framer + Flush() error + CloseConn() error + // HeaderEncoder returns an HPACK encoder that writes to the + // returned buffer. + HeaderEncoder() (*hpack.Encoder, *bytes.Buffer) +} + +// writeEndsStream reports whether w writes a frame that will transition +// the stream to a half-closed local state. This returns false for RST_STREAM, +// which closes the entire stream (not just the local half). +func writeEndsStream(w writeFramer) bool { + switch v := w.(type) { + case *writeData: + return v.endStream + case *writeResHeaders: + return v.endStream + case nil: + // This can only happen if the caller reuses w after it's + // been intentionally nil'ed out to prevent use. Keep this + // here to catch future refactoring breaking it. + panic("writeEndsStream called on nil writeFramer") + } + return false +} + +type flushFrameWriter struct{} + +func (flushFrameWriter) writeFrame(ctx writeContext) error { + return ctx.Flush() +} + +func (flushFrameWriter) staysWithinBuffer(max int) bool { return false } + +type writeSettings []Setting + +func (s writeSettings) staysWithinBuffer(max int) bool { + const settingSize = 6 // uint16 + uint32 + return frameHeaderLen+settingSize*len(s) <= max + +} + +func (s writeSettings) writeFrame(ctx writeContext) error { + return ctx.Framer().WriteSettings([]Setting(s)...) +} + +type writeGoAway struct { + maxStreamID uint32 + code ErrCode +} + +func (p *writeGoAway) writeFrame(ctx writeContext) error { + err := ctx.Framer().WriteGoAway(p.maxStreamID, p.code, nil) + if p.code != 0 { + ctx.Flush() // ignore error: we're hanging up on them anyway + time.Sleep(50 * time.Millisecond) + ctx.CloseConn() + } + return err +} + +func (*writeGoAway) staysWithinBuffer(max int) bool { return false } // flushes + +type writeData struct { + streamID uint32 + p []byte + endStream bool +} + +func (w *writeData) String() string { + return fmt.Sprintf("writeData(stream=%d, p=%d, endStream=%v)", w.streamID, len(w.p), w.endStream) +} + +func (w *writeData) writeFrame(ctx writeContext) error { + return ctx.Framer().WriteData(w.streamID, w.endStream, w.p) +} + +func (w *writeData) staysWithinBuffer(max int) bool { + return frameHeaderLen+len(w.p) <= max +} + +// handlerPanicRST is the message sent from handler goroutines when +// the handler panics. +type handlerPanicRST struct { + StreamID uint32 +} + +func (hp handlerPanicRST) writeFrame(ctx writeContext) error { + return ctx.Framer().WriteRSTStream(hp.StreamID, ErrCodeInternal) +} + +func (hp handlerPanicRST) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max } + +func (se StreamError) writeFrame(ctx writeContext) error { + return ctx.Framer().WriteRSTStream(se.StreamID, se.Code) +} + +func (se StreamError) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max } + +type writePingAck struct{ pf *PingFrame } + +func (w writePingAck) writeFrame(ctx writeContext) error { + return ctx.Framer().WritePing(true, w.pf.Data) +} + +func (w writePingAck) staysWithinBuffer(max int) bool { return frameHeaderLen+len(w.pf.Data) <= max } + +type writeSettingsAck struct{} + +func (writeSettingsAck) writeFrame(ctx writeContext) error { + return ctx.Framer().WriteSettingsAck() +} + +func (writeSettingsAck) staysWithinBuffer(max int) bool { return frameHeaderLen <= max } + +// splitHeaderBlock splits headerBlock into fragments so that each fragment fits +// in a single frame, then calls fn for each fragment. firstFrag/lastFrag are true +// for the first/last fragment, respectively. +func splitHeaderBlock(ctx writeContext, headerBlock []byte, fn func(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error) error { + // For now we're lazy and just pick the minimum MAX_FRAME_SIZE + // that all peers must support (16KB). Later we could care + // more and send larger frames if the peer advertised it, but + // there's little point. Most headers are small anyway (so we + // generally won't have CONTINUATION frames), and extra frames + // only waste 9 bytes anyway. + const maxFrameSize = 16384 + + first := true + for len(headerBlock) > 0 { + frag := headerBlock + if len(frag) > maxFrameSize { + frag = frag[:maxFrameSize] + } + headerBlock = headerBlock[len(frag):] + if err := fn(ctx, frag, first, len(headerBlock) == 0); err != nil { + return err + } + first = false + } + return nil +} + +// writeResHeaders is a request to write a HEADERS and 0+ CONTINUATION frames +// for HTTP response headers or trailers from a server handler. +type writeResHeaders struct { + streamID uint32 + httpResCode int // 0 means no ":status" line + h http.Header // may be nil + trailers []string // if non-nil, which keys of h to write. nil means all. + endStream bool + + date string + contentType string + contentLength string +} + +func encKV(enc *hpack.Encoder, k, v string) { + if VerboseLogs { + log.Printf("http2: server encoding header %q = %q", k, v) + } + enc.WriteField(hpack.HeaderField{Name: k, Value: v}) +} + +func (w *writeResHeaders) staysWithinBuffer(max int) bool { + // TODO: this is a common one. It'd be nice to return true + // here and get into the fast path if we could be clever and + // calculate the size fast enough, or at least a conservative + // uppper bound that usually fires. (Maybe if w.h and + // w.trailers are nil, so we don't need to enumerate it.) + // Otherwise I'm afraid that just calculating the length to + // answer this question would be slower than the ~2µs benefit. + return false +} + +func (w *writeResHeaders) writeFrame(ctx writeContext) error { + enc, buf := ctx.HeaderEncoder() + buf.Reset() + + if w.httpResCode != 0 { + encKV(enc, ":status", httpCodeString(w.httpResCode)) + } + + encodeHeaders(enc, w.h, w.trailers) + + if w.contentType != "" { + encKV(enc, "content-type", w.contentType) + } + if w.contentLength != "" { + encKV(enc, "content-length", w.contentLength) + } + if w.date != "" { + encKV(enc, "date", w.date) + } + + headerBlock := buf.Bytes() + if len(headerBlock) == 0 && w.trailers == nil { + panic("unexpected empty hpack") + } + + return splitHeaderBlock(ctx, headerBlock, w.writeHeaderBlock) +} + +func (w *writeResHeaders) writeHeaderBlock(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error { + if firstFrag { + return ctx.Framer().WriteHeaders(HeadersFrameParam{ + StreamID: w.streamID, + BlockFragment: frag, + EndStream: w.endStream, + EndHeaders: lastFrag, + }) + } else { + return ctx.Framer().WriteContinuation(w.streamID, lastFrag, frag) + } +} + +// writePushPromise is a request to write a PUSH_PROMISE and 0+ CONTINUATION frames. +type writePushPromise struct { + streamID uint32 // pusher stream + method string // for :method + url *url.URL // for :scheme, :authority, :path + h http.Header + + // Creates an ID for a pushed stream. This runs on serveG just before + // the frame is written. The returned ID is copied to promisedID. + allocatePromisedID func() (uint32, error) + promisedID uint32 +} + +func (w *writePushPromise) staysWithinBuffer(max int) bool { + // TODO: see writeResHeaders.staysWithinBuffer + return false +} + +func (w *writePushPromise) writeFrame(ctx writeContext) error { + enc, buf := ctx.HeaderEncoder() + buf.Reset() + + encKV(enc, ":method", w.method) + encKV(enc, ":scheme", w.url.Scheme) + encKV(enc, ":authority", w.url.Host) + encKV(enc, ":path", w.url.RequestURI()) + encodeHeaders(enc, w.h, nil) + + headerBlock := buf.Bytes() + if len(headerBlock) == 0 { + panic("unexpected empty hpack") + } + + return splitHeaderBlock(ctx, headerBlock, w.writeHeaderBlock) +} + +func (w *writePushPromise) writeHeaderBlock(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error { + if firstFrag { + return ctx.Framer().WritePushPromise(PushPromiseParam{ + StreamID: w.streamID, + PromiseID: w.promisedID, + BlockFragment: frag, + EndHeaders: lastFrag, + }) + } else { + return ctx.Framer().WriteContinuation(w.streamID, lastFrag, frag) + } +} + +type write100ContinueHeadersFrame struct { + streamID uint32 +} + +func (w write100ContinueHeadersFrame) writeFrame(ctx writeContext) error { + enc, buf := ctx.HeaderEncoder() + buf.Reset() + encKV(enc, ":status", "100") + return ctx.Framer().WriteHeaders(HeadersFrameParam{ + StreamID: w.streamID, + BlockFragment: buf.Bytes(), + EndStream: false, + EndHeaders: true, + }) +} + +func (w write100ContinueHeadersFrame) staysWithinBuffer(max int) bool { + // Sloppy but conservative: + return 9+2*(len(":status")+len("100")) <= max +} + +type writeWindowUpdate struct { + streamID uint32 // or 0 for conn-level + n uint32 +} + +func (wu writeWindowUpdate) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max } + +func (wu writeWindowUpdate) writeFrame(ctx writeContext) error { + return ctx.Framer().WriteWindowUpdate(wu.streamID, wu.n) +} + +// encodeHeaders encodes an http.Header. If keys is not nil, then (k, h[k]) +// is encoded only only if k is in keys. +func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) { + if keys == nil { + sorter := sorterPool.Get().(*sorter) + // Using defer here, since the returned keys from the + // sorter.Keys method is only valid until the sorter + // is returned: + defer sorterPool.Put(sorter) + keys = sorter.Keys(h) + } + for _, k := range keys { + vv := h[k] + k = lowerHeader(k) + if !validWireHeaderFieldName(k) { + // Skip it as backup paranoia. Per + // golang.org/issue/14048, these should + // already be rejected at a higher level. + continue + } + isTE := k == "transfer-encoding" + for _, v := range vv { + if !httplex.ValidHeaderFieldValue(v) { + // TODO: return an error? golang.org/issue/14048 + // For now just omit it. + continue + } + // TODO: more of "8.1.2.2 Connection-Specific Header Fields" + if isTE && v != "trailers" { + continue + } + encKV(enc, k, v) + } + } +} diff --git a/vendor/golang.org/x/net/http2/writesched.go b/vendor/golang.org/x/net/http2/writesched.go new file mode 100644 index 0000000..4fe3073 --- /dev/null +++ b/vendor/golang.org/x/net/http2/writesched.go @@ -0,0 +1,242 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import "fmt" + +// WriteScheduler is the interface implemented by HTTP/2 write schedulers. +// Methods are never called concurrently. +type WriteScheduler interface { + // OpenStream opens a new stream in the write scheduler. + // It is illegal to call this with streamID=0 or with a streamID that is + // already open -- the call may panic. + OpenStream(streamID uint32, options OpenStreamOptions) + + // CloseStream closes a stream in the write scheduler. Any frames queued on + // this stream should be discarded. It is illegal to call this on a stream + // that is not open -- the call may panic. + CloseStream(streamID uint32) + + // AdjustStream adjusts the priority of the given stream. This may be called + // on a stream that has not yet been opened or has been closed. Note that + // RFC 7540 allows PRIORITY frames to be sent on streams in any state. See: + // https://tools.ietf.org/html/rfc7540#section-5.1 + AdjustStream(streamID uint32, priority PriorityParam) + + // Push queues a frame in the scheduler. In most cases, this will not be + // called with wr.StreamID()!=0 unless that stream is currently open. The one + // exception is RST_STREAM frames, which may be sent on idle or closed streams. + Push(wr FrameWriteRequest) + + // Pop dequeues the next frame to write. Returns false if no frames can + // be written. Frames with a given wr.StreamID() are Pop'd in the same + // order they are Push'd. + Pop() (wr FrameWriteRequest, ok bool) +} + +// OpenStreamOptions specifies extra options for WriteScheduler.OpenStream. +type OpenStreamOptions struct { + // PusherID is zero if the stream was initiated by the client. Otherwise, + // PusherID names the stream that pushed the newly opened stream. + PusherID uint32 +} + +// FrameWriteRequest is a request to write a frame. +type FrameWriteRequest struct { + // write is the interface value that does the writing, once the + // WriteScheduler has selected this frame to write. The write + // functions are all defined in write.go. + write writeFramer + + // stream is the stream on which this frame will be written. + // nil for non-stream frames like PING and SETTINGS. + stream *stream + + // done, if non-nil, must be a buffered channel with space for + // 1 message and is sent the return value from write (or an + // earlier error) when the frame has been written. + done chan error +} + +// StreamID returns the id of the stream this frame will be written to. +// 0 is used for non-stream frames such as PING and SETTINGS. +func (wr FrameWriteRequest) StreamID() uint32 { + if wr.stream == nil { + if se, ok := wr.write.(StreamError); ok { + // (*serverConn).resetStream doesn't set + // stream because it doesn't necessarily have + // one. So special case this type of write + // message. + return se.StreamID + } + return 0 + } + return wr.stream.id +} + +// DataSize returns the number of flow control bytes that must be consumed +// to write this entire frame. This is 0 for non-DATA frames. +func (wr FrameWriteRequest) DataSize() int { + if wd, ok := wr.write.(*writeData); ok { + return len(wd.p) + } + return 0 +} + +// Consume consumes min(n, available) bytes from this frame, where available +// is the number of flow control bytes available on the stream. Consume returns +// 0, 1, or 2 frames, where the integer return value gives the number of frames +// returned. +// +// If flow control prevents consuming any bytes, this returns (_, _, 0). If +// the entire frame was consumed, this returns (wr, _, 1). Otherwise, this +// returns (consumed, rest, 2), where 'consumed' contains the consumed bytes and +// 'rest' contains the remaining bytes. The consumed bytes are deducted from the +// underlying stream's flow control budget. +func (wr FrameWriteRequest) Consume(n int32) (FrameWriteRequest, FrameWriteRequest, int) { + var empty FrameWriteRequest + + // Non-DATA frames are always consumed whole. + wd, ok := wr.write.(*writeData) + if !ok || len(wd.p) == 0 { + return wr, empty, 1 + } + + // Might need to split after applying limits. + allowed := wr.stream.flow.available() + if n < allowed { + allowed = n + } + if wr.stream.sc.maxFrameSize < allowed { + allowed = wr.stream.sc.maxFrameSize + } + if allowed <= 0 { + return empty, empty, 0 + } + if len(wd.p) > int(allowed) { + wr.stream.flow.take(allowed) + consumed := FrameWriteRequest{ + stream: wr.stream, + write: &writeData{ + streamID: wd.streamID, + p: wd.p[:allowed], + // Even if the original had endStream set, there + // are bytes remaining because len(wd.p) > allowed, + // so we know endStream is false. + endStream: false, + }, + // Our caller is blocking on the final DATA frame, not + // this intermediate frame, so no need to wait. + done: nil, + } + rest := FrameWriteRequest{ + stream: wr.stream, + write: &writeData{ + streamID: wd.streamID, + p: wd.p[allowed:], + endStream: wd.endStream, + }, + done: wr.done, + } + return consumed, rest, 2 + } + + // The frame is consumed whole. + // NB: This cast cannot overflow because allowed is <= math.MaxInt32. + wr.stream.flow.take(int32(len(wd.p))) + return wr, empty, 1 +} + +// String is for debugging only. +func (wr FrameWriteRequest) String() string { + var des string + if s, ok := wr.write.(fmt.Stringer); ok { + des = s.String() + } else { + des = fmt.Sprintf("%T", wr.write) + } + return fmt.Sprintf("[FrameWriteRequest stream=%d, ch=%v, writer=%v]", wr.StreamID(), wr.done != nil, des) +} + +// replyToWriter sends err to wr.done and panics if the send must block +// This does nothing if wr.done is nil. +func (wr *FrameWriteRequest) replyToWriter(err error) { + if wr.done == nil { + return + } + select { + case wr.done <- err: + default: + panic(fmt.Sprintf("unbuffered done channel passed in for type %T", wr.write)) + } + wr.write = nil // prevent use (assume it's tainted after wr.done send) +} + +// writeQueue is used by implementations of WriteScheduler. +type writeQueue struct { + s []FrameWriteRequest +} + +func (q *writeQueue) empty() bool { return len(q.s) == 0 } + +func (q *writeQueue) push(wr FrameWriteRequest) { + q.s = append(q.s, wr) +} + +func (q *writeQueue) shift() FrameWriteRequest { + if len(q.s) == 0 { + panic("invalid use of queue") + } + wr := q.s[0] + // TODO: less copy-happy queue. + copy(q.s, q.s[1:]) + q.s[len(q.s)-1] = FrameWriteRequest{} + q.s = q.s[:len(q.s)-1] + return wr +} + +// consume consumes up to n bytes from q.s[0]. If the frame is +// entirely consumed, it is removed from the queue. If the frame +// is partially consumed, the frame is kept with the consumed +// bytes removed. Returns true iff any bytes were consumed. +func (q *writeQueue) consume(n int32) (FrameWriteRequest, bool) { + if len(q.s) == 0 { + return FrameWriteRequest{}, false + } + consumed, rest, numresult := q.s[0].Consume(n) + switch numresult { + case 0: + return FrameWriteRequest{}, false + case 1: + q.shift() + case 2: + q.s[0] = rest + } + return consumed, true +} + +type writeQueuePool []*writeQueue + +// put inserts an unused writeQueue into the pool. +func (p *writeQueuePool) put(q *writeQueue) { + for i := range q.s { + q.s[i] = FrameWriteRequest{} + } + q.s = q.s[:0] + *p = append(*p, q) +} + +// get returns an empty writeQueue. +func (p *writeQueuePool) get() *writeQueue { + ln := len(*p) + if ln == 0 { + return new(writeQueue) + } + x := ln - 1 + q := (*p)[x] + (*p)[x] = nil + *p = (*p)[:x] + return q +} diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority.go new file mode 100644 index 0000000..0113272 --- /dev/null +++ b/vendor/golang.org/x/net/http2/writesched_priority.go @@ -0,0 +1,452 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "fmt" + "math" + "sort" +) + +// RFC 7540, Section 5.3.5: the default weight is 16. +const priorityDefaultWeight = 15 // 16 = 15 + 1 + +// PriorityWriteSchedulerConfig configures a priorityWriteScheduler. +type PriorityWriteSchedulerConfig struct { + // MaxClosedNodesInTree controls the maximum number of closed streams to + // retain in the priority tree. Setting this to zero saves a small amount + // of memory at the cost of performance. + // + // See RFC 7540, Section 5.3.4: + // "It is possible for a stream to become closed while prioritization + // information ... is in transit. ... This potentially creates suboptimal + // prioritization, since the stream could be given a priority that is + // different from what is intended. To avoid these problems, an endpoint + // SHOULD retain stream prioritization state for a period after streams + // become closed. The longer state is retained, the lower the chance that + // streams are assigned incorrect or default priority values." + MaxClosedNodesInTree int + + // MaxIdleNodesInTree controls the maximum number of idle streams to + // retain in the priority tree. Setting this to zero saves a small amount + // of memory at the cost of performance. + // + // See RFC 7540, Section 5.3.4: + // Similarly, streams that are in the "idle" state can be assigned + // priority or become a parent of other streams. This allows for the + // creation of a grouping node in the dependency tree, which enables + // more flexible expressions of priority. Idle streams begin with a + // default priority (Section 5.3.5). + MaxIdleNodesInTree int + + // ThrottleOutOfOrderWrites enables write throttling to help ensure that + // data is delivered in priority order. This works around a race where + // stream B depends on stream A and both streams are about to call Write + // to queue DATA frames. If B wins the race, a naive scheduler would eagerly + // write as much data from B as possible, but this is suboptimal because A + // is a higher-priority stream. With throttling enabled, we write a small + // amount of data from B to minimize the amount of bandwidth that B can + // steal from A. + ThrottleOutOfOrderWrites bool +} + +// NewPriorityWriteScheduler constructs a WriteScheduler that schedules +// frames by following HTTP/2 priorities as described in RFC 7340 Section 5.3. +// If cfg is nil, default options are used. +func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler { + if cfg == nil { + // For justification of these defaults, see: + // https://docs.google.com/document/d/1oLhNg1skaWD4_DtaoCxdSRN5erEXrH-KnLrMwEpOtFY + cfg = &PriorityWriteSchedulerConfig{ + MaxClosedNodesInTree: 10, + MaxIdleNodesInTree: 10, + ThrottleOutOfOrderWrites: false, + } + } + + ws := &priorityWriteScheduler{ + nodes: make(map[uint32]*priorityNode), + maxClosedNodesInTree: cfg.MaxClosedNodesInTree, + maxIdleNodesInTree: cfg.MaxIdleNodesInTree, + enableWriteThrottle: cfg.ThrottleOutOfOrderWrites, + } + ws.nodes[0] = &ws.root + if cfg.ThrottleOutOfOrderWrites { + ws.writeThrottleLimit = 1024 + } else { + ws.writeThrottleLimit = math.MaxInt32 + } + return ws +} + +type priorityNodeState int + +const ( + priorityNodeOpen priorityNodeState = iota + priorityNodeClosed + priorityNodeIdle +) + +// priorityNode is a node in an HTTP/2 priority tree. +// Each node is associated with a single stream ID. +// See RFC 7540, Section 5.3. +type priorityNode struct { + q writeQueue // queue of pending frames to write + id uint32 // id of the stream, or 0 for the root of the tree + weight uint8 // the actual weight is weight+1, so the value is in [1,256] + state priorityNodeState // open | closed | idle + bytes int64 // number of bytes written by this node, or 0 if closed + subtreeBytes int64 // sum(node.bytes) of all nodes in this subtree + + // These links form the priority tree. + parent *priorityNode + kids *priorityNode // start of the kids list + prev, next *priorityNode // doubly-linked list of siblings +} + +func (n *priorityNode) setParent(parent *priorityNode) { + if n == parent { + panic("setParent to self") + } + if n.parent == parent { + return + } + // Unlink from current parent. + if parent := n.parent; parent != nil { + if n.prev == nil { + parent.kids = n.next + } else { + n.prev.next = n.next + } + if n.next != nil { + n.next.prev = n.prev + } + } + // Link to new parent. + // If parent=nil, remove n from the tree. + // Always insert at the head of parent.kids (this is assumed by walkReadyInOrder). + n.parent = parent + if parent == nil { + n.next = nil + n.prev = nil + } else { + n.next = parent.kids + n.prev = nil + if n.next != nil { + n.next.prev = n + } + parent.kids = n + } +} + +func (n *priorityNode) addBytes(b int64) { + n.bytes += b + for ; n != nil; n = n.parent { + n.subtreeBytes += b + } +} + +// walkReadyInOrder iterates over the tree in priority order, calling f for each node +// with a non-empty write queue. When f returns true, this funcion returns true and the +// walk halts. tmp is used as scratch space for sorting. +// +// f(n, openParent) takes two arguments: the node to visit, n, and a bool that is true +// if any ancestor p of n is still open (ignoring the root node). +func (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f func(*priorityNode, bool) bool) bool { + if !n.q.empty() && f(n, openParent) { + return true + } + if n.kids == nil { + return false + } + + // Don't consider the root "open" when updating openParent since + // we can't send data frames on the root stream (only control frames). + if n.id != 0 { + openParent = openParent || (n.state == priorityNodeOpen) + } + + // Common case: only one kid or all kids have the same weight. + // Some clients don't use weights; other clients (like web browsers) + // use mostly-linear priority trees. + w := n.kids.weight + needSort := false + for k := n.kids.next; k != nil; k = k.next { + if k.weight != w { + needSort = true + break + } + } + if !needSort { + for k := n.kids; k != nil; k = k.next { + if k.walkReadyInOrder(openParent, tmp, f) { + return true + } + } + return false + } + + // Uncommon case: sort the child nodes. We remove the kids from the parent, + // then re-insert after sorting so we can reuse tmp for future sort calls. + *tmp = (*tmp)[:0] + for n.kids != nil { + *tmp = append(*tmp, n.kids) + n.kids.setParent(nil) + } + sort.Sort(sortPriorityNodeSiblings(*tmp)) + for i := len(*tmp) - 1; i >= 0; i-- { + (*tmp)[i].setParent(n) // setParent inserts at the head of n.kids + } + for k := n.kids; k != nil; k = k.next { + if k.walkReadyInOrder(openParent, tmp, f) { + return true + } + } + return false +} + +type sortPriorityNodeSiblings []*priorityNode + +func (z sortPriorityNodeSiblings) Len() int { return len(z) } +func (z sortPriorityNodeSiblings) Swap(i, k int) { z[i], z[k] = z[k], z[i] } +func (z sortPriorityNodeSiblings) Less(i, k int) bool { + // Prefer the subtree that has sent fewer bytes relative to its weight. + // See sections 5.3.2 and 5.3.4. + wi, bi := float64(z[i].weight+1), float64(z[i].subtreeBytes) + wk, bk := float64(z[k].weight+1), float64(z[k].subtreeBytes) + if bi == 0 && bk == 0 { + return wi >= wk + } + if bk == 0 { + return false + } + return bi/bk <= wi/wk +} + +type priorityWriteScheduler struct { + // root is the root of the priority tree, where root.id = 0. + // The root queues control frames that are not associated with any stream. + root priorityNode + + // nodes maps stream ids to priority tree nodes. + nodes map[uint32]*priorityNode + + // maxID is the maximum stream id in nodes. + maxID uint32 + + // lists of nodes that have been closed or are idle, but are kept in + // the tree for improved prioritization. When the lengths exceed either + // maxClosedNodesInTree or maxIdleNodesInTree, old nodes are discarded. + closedNodes, idleNodes []*priorityNode + + // From the config. + maxClosedNodesInTree int + maxIdleNodesInTree int + writeThrottleLimit int32 + enableWriteThrottle bool + + // tmp is scratch space for priorityNode.walkReadyInOrder to reduce allocations. + tmp []*priorityNode + + // pool of empty queues for reuse. + queuePool writeQueuePool +} + +func (ws *priorityWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) { + // The stream may be currently idle but cannot be opened or closed. + if curr := ws.nodes[streamID]; curr != nil { + if curr.state != priorityNodeIdle { + panic(fmt.Sprintf("stream %d already opened", streamID)) + } + curr.state = priorityNodeOpen + return + } + + // RFC 7540, Section 5.3.5: + // "All streams are initially assigned a non-exclusive dependency on stream 0x0. + // Pushed streams initially depend on their associated stream. In both cases, + // streams are assigned a default weight of 16." + parent := ws.nodes[options.PusherID] + if parent == nil { + parent = &ws.root + } + n := &priorityNode{ + q: *ws.queuePool.get(), + id: streamID, + weight: priorityDefaultWeight, + state: priorityNodeOpen, + } + n.setParent(parent) + ws.nodes[streamID] = n + if streamID > ws.maxID { + ws.maxID = streamID + } +} + +func (ws *priorityWriteScheduler) CloseStream(streamID uint32) { + if streamID == 0 { + panic("violation of WriteScheduler interface: cannot close stream 0") + } + if ws.nodes[streamID] == nil { + panic(fmt.Sprintf("violation of WriteScheduler interface: unknown stream %d", streamID)) + } + if ws.nodes[streamID].state != priorityNodeOpen { + panic(fmt.Sprintf("violation of WriteScheduler interface: stream %d already closed", streamID)) + } + + n := ws.nodes[streamID] + n.state = priorityNodeClosed + n.addBytes(-n.bytes) + + q := n.q + ws.queuePool.put(&q) + n.q.s = nil + if ws.maxClosedNodesInTree > 0 { + ws.addClosedOrIdleNode(&ws.closedNodes, ws.maxClosedNodesInTree, n) + } else { + ws.removeNode(n) + } +} + +func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) { + if streamID == 0 { + panic("adjustPriority on root") + } + + // If streamID does not exist, there are two cases: + // - A closed stream that has been removed (this will have ID <= maxID) + // - An idle stream that is being used for "grouping" (this will have ID > maxID) + n := ws.nodes[streamID] + if n == nil { + if streamID <= ws.maxID || ws.maxIdleNodesInTree == 0 { + return + } + ws.maxID = streamID + n = &priorityNode{ + q: *ws.queuePool.get(), + id: streamID, + weight: priorityDefaultWeight, + state: priorityNodeIdle, + } + n.setParent(&ws.root) + ws.nodes[streamID] = n + ws.addClosedOrIdleNode(&ws.idleNodes, ws.maxIdleNodesInTree, n) + } + + // Section 5.3.1: A dependency on a stream that is not currently in the tree + // results in that stream being given a default priority (Section 5.3.5). + parent := ws.nodes[priority.StreamDep] + if parent == nil { + n.setParent(&ws.root) + n.weight = priorityDefaultWeight + return + } + + // Ignore if the client tries to make a node its own parent. + if n == parent { + return + } + + // Section 5.3.3: + // "If a stream is made dependent on one of its own dependencies, the + // formerly dependent stream is first moved to be dependent on the + // reprioritized stream's previous parent. The moved dependency retains + // its weight." + // + // That is: if parent depends on n, move parent to depend on n.parent. + for x := parent.parent; x != nil; x = x.parent { + if x == n { + parent.setParent(n.parent) + break + } + } + + // Section 5.3.3: The exclusive flag causes the stream to become the sole + // dependency of its parent stream, causing other dependencies to become + // dependent on the exclusive stream. + if priority.Exclusive { + k := parent.kids + for k != nil { + next := k.next + if k != n { + k.setParent(n) + } + k = next + } + } + + n.setParent(parent) + n.weight = priority.Weight +} + +func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) { + var n *priorityNode + if id := wr.StreamID(); id == 0 { + n = &ws.root + } else { + n = ws.nodes[id] + if n == nil { + // id is an idle or closed stream. wr should not be a HEADERS or + // DATA frame. However, wr can be a RST_STREAM. In this case, we + // push wr onto the root, rather than creating a new priorityNode, + // since RST_STREAM is tiny and the stream's priority is unknown + // anyway. See issue #17919. + if wr.DataSize() > 0 { + panic("add DATA on non-open stream") + } + n = &ws.root + } + } + n.q.push(wr) +} + +func (ws *priorityWriteScheduler) Pop() (wr FrameWriteRequest, ok bool) { + ws.root.walkReadyInOrder(false, &ws.tmp, func(n *priorityNode, openParent bool) bool { + limit := int32(math.MaxInt32) + if openParent { + limit = ws.writeThrottleLimit + } + wr, ok = n.q.consume(limit) + if !ok { + return false + } + n.addBytes(int64(wr.DataSize())) + // If B depends on A and B continuously has data available but A + // does not, gradually increase the throttling limit to allow B to + // steal more and more bandwidth from A. + if openParent { + ws.writeThrottleLimit += 1024 + if ws.writeThrottleLimit < 0 { + ws.writeThrottleLimit = math.MaxInt32 + } + } else if ws.enableWriteThrottle { + ws.writeThrottleLimit = 1024 + } + return true + }) + return wr, ok +} + +func (ws *priorityWriteScheduler) addClosedOrIdleNode(list *[]*priorityNode, maxSize int, n *priorityNode) { + if maxSize == 0 { + return + } + if len(*list) == maxSize { + // Remove the oldest node, then shift left. + ws.removeNode((*list)[0]) + x := (*list)[1:] + copy(*list, x) + *list = (*list)[:len(x)] + } + *list = append(*list, n) +} + +func (ws *priorityWriteScheduler) removeNode(n *priorityNode) { + for k := n.kids; k != nil; k = k.next { + k.setParent(n.parent) + } + n.setParent(nil) + delete(ws.nodes, n.id) +} diff --git a/vendor/golang.org/x/net/http2/writesched_priority_test.go b/vendor/golang.org/x/net/http2/writesched_priority_test.go new file mode 100644 index 0000000..f2b535a --- /dev/null +++ b/vendor/golang.org/x/net/http2/writesched_priority_test.go @@ -0,0 +1,541 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "bytes" + "fmt" + "sort" + "testing" +) + +func defaultPriorityWriteScheduler() *priorityWriteScheduler { + return NewPriorityWriteScheduler(nil).(*priorityWriteScheduler) +} + +func checkPriorityWellFormed(ws *priorityWriteScheduler) error { + for id, n := range ws.nodes { + if id != n.id { + return fmt.Errorf("bad ws.nodes: ws.nodes[%d] = %d", id, n.id) + } + if n.parent == nil { + if n.next != nil || n.prev != nil { + return fmt.Errorf("bad node %d: nil parent but prev/next not nil", id) + } + continue + } + found := false + for k := n.parent.kids; k != nil; k = k.next { + if k.id == id { + found = true + break + } + } + if !found { + return fmt.Errorf("bad node %d: not found in parent %d kids list", id, n.parent.id) + } + } + return nil +} + +func fmtTree(ws *priorityWriteScheduler, fmtNode func(*priorityNode) string) string { + var ids []int + for _, n := range ws.nodes { + ids = append(ids, int(n.id)) + } + sort.Ints(ids) + + var buf bytes.Buffer + for _, id := range ids { + if buf.Len() != 0 { + buf.WriteString(" ") + } + if id == 0 { + buf.WriteString(fmtNode(&ws.root)) + } else { + buf.WriteString(fmtNode(ws.nodes[uint32(id)])) + } + } + return buf.String() +} + +func fmtNodeParentSkipRoot(n *priorityNode) string { + switch { + case n.id == 0: + return "" + case n.parent == nil: + return fmt.Sprintf("%d{parent:nil}", n.id) + default: + return fmt.Sprintf("%d{parent:%d}", n.id, n.parent.id) + } +} + +func fmtNodeWeightParentSkipRoot(n *priorityNode) string { + switch { + case n.id == 0: + return "" + case n.parent == nil: + return fmt.Sprintf("%d{weight:%d,parent:nil}", n.id, n.weight) + default: + return fmt.Sprintf("%d{weight:%d,parent:%d}", n.id, n.weight, n.parent.id) + } +} + +func TestPriorityTwoStreams(t *testing.T) { + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{}) + + want := "1{weight:15,parent:0} 2{weight:15,parent:0}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After open\ngot %q\nwant %q", got, want) + } + + // Move 1's parent to 2. + ws.AdjustStream(1, PriorityParam{ + StreamDep: 2, + Weight: 32, + Exclusive: false, + }) + want = "1{weight:32,parent:2} 2{weight:15,parent:0}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After adjust\ngot %q\nwant %q", got, want) + } + + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPriorityAdjustExclusiveZero(t *testing.T) { + // 1, 2, and 3 are all children of the 0 stream. + // Exclusive reprioritization to any of the streams should bring + // the rest of the streams under the reprioritized stream. + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{}) + ws.OpenStream(3, OpenStreamOptions{}) + + want := "1{weight:15,parent:0} 2{weight:15,parent:0} 3{weight:15,parent:0}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After open\ngot %q\nwant %q", got, want) + } + + ws.AdjustStream(2, PriorityParam{ + StreamDep: 0, + Weight: 20, + Exclusive: true, + }) + want = "1{weight:15,parent:2} 2{weight:20,parent:0} 3{weight:15,parent:2}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After adjust\ngot %q\nwant %q", got, want) + } + + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPriorityAdjustOwnParent(t *testing.T) { + // Assigning a node as its own parent should have no effect. + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{}) + ws.AdjustStream(2, PriorityParam{ + StreamDep: 2, + Weight: 20, + Exclusive: true, + }) + want := "1{weight:15,parent:0} 2{weight:15,parent:0}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After adjust\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPriorityClosedStreams(t *testing.T) { + ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{MaxClosedNodesInTree: 2}).(*priorityWriteScheduler) + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(3, OpenStreamOptions{PusherID: 2}) + ws.OpenStream(4, OpenStreamOptions{PusherID: 3}) + + // Close the first three streams. We lose 1, but keep 2 and 3. + ws.CloseStream(1) + ws.CloseStream(2) + ws.CloseStream(3) + + want := "2{weight:15,parent:0} 3{weight:15,parent:2} 4{weight:15,parent:3}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After close\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } + + // Adding a stream as an exclusive child of 1 gives it default + // priorities, since 1 is gone. + ws.OpenStream(5, OpenStreamOptions{}) + ws.AdjustStream(5, PriorityParam{StreamDep: 1, Weight: 15, Exclusive: true}) + + // Adding a stream as an exclusive child of 2 should work, since 2 is not gone. + ws.OpenStream(6, OpenStreamOptions{}) + ws.AdjustStream(6, PriorityParam{StreamDep: 2, Weight: 15, Exclusive: true}) + + want = "2{weight:15,parent:0} 3{weight:15,parent:6} 4{weight:15,parent:3} 5{weight:15,parent:0} 6{weight:15,parent:2}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After add streams\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPriorityClosedStreamsDisabled(t *testing.T) { + ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{}).(*priorityWriteScheduler) + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(3, OpenStreamOptions{PusherID: 2}) + + // Close the first two streams. We keep only 3. + ws.CloseStream(1) + ws.CloseStream(2) + + want := "3{weight:15,parent:0}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After close\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPriorityIdleStreams(t *testing.T) { + ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{MaxIdleNodesInTree: 2}).(*priorityWriteScheduler) + ws.AdjustStream(1, PriorityParam{StreamDep: 0, Weight: 15}) // idle + ws.AdjustStream(2, PriorityParam{StreamDep: 0, Weight: 15}) // idle + ws.AdjustStream(3, PriorityParam{StreamDep: 2, Weight: 20}) // idle + ws.OpenStream(4, OpenStreamOptions{}) + ws.OpenStream(5, OpenStreamOptions{}) + ws.OpenStream(6, OpenStreamOptions{}) + ws.AdjustStream(4, PriorityParam{StreamDep: 1, Weight: 15}) + ws.AdjustStream(5, PriorityParam{StreamDep: 2, Weight: 15}) + ws.AdjustStream(6, PriorityParam{StreamDep: 3, Weight: 15}) + + want := "2{weight:15,parent:0} 3{weight:20,parent:2} 4{weight:15,parent:0} 5{weight:15,parent:2} 6{weight:15,parent:3}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After open\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPriorityIdleStreamsDisabled(t *testing.T) { + ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{}).(*priorityWriteScheduler) + ws.AdjustStream(1, PriorityParam{StreamDep: 0, Weight: 15}) // idle + ws.AdjustStream(2, PriorityParam{StreamDep: 0, Weight: 15}) // idle + ws.AdjustStream(3, PriorityParam{StreamDep: 2, Weight: 20}) // idle + ws.OpenStream(4, OpenStreamOptions{}) + + want := "4{weight:15,parent:0}" + if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want { + t.Errorf("After open\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPrioritySection531NonExclusive(t *testing.T) { + // Example from RFC 7540 Section 5.3.1. + // A,B,C,D = 1,2,3,4 + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(3, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(4, OpenStreamOptions{}) + ws.AdjustStream(4, PriorityParam{ + StreamDep: 1, + Weight: 15, + Exclusive: false, + }) + want := "1{parent:0} 2{parent:1} 3{parent:1} 4{parent:1}" + if got := fmtTree(ws, fmtNodeParentSkipRoot); got != want { + t.Errorf("After adjust\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPrioritySection531Exclusive(t *testing.T) { + // Example from RFC 7540 Section 5.3.1. + // A,B,C,D = 1,2,3,4 + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(3, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(4, OpenStreamOptions{}) + ws.AdjustStream(4, PriorityParam{ + StreamDep: 1, + Weight: 15, + Exclusive: true, + }) + want := "1{parent:0} 2{parent:4} 3{parent:4} 4{parent:1}" + if got := fmtTree(ws, fmtNodeParentSkipRoot); got != want { + t.Errorf("After adjust\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func makeSection533Tree() *priorityWriteScheduler { + // Initial tree from RFC 7540 Section 5.3.3. + // A,B,C,D,E,F = 1,2,3,4,5,6 + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(3, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(4, OpenStreamOptions{PusherID: 3}) + ws.OpenStream(5, OpenStreamOptions{PusherID: 3}) + ws.OpenStream(6, OpenStreamOptions{PusherID: 4}) + return ws +} + +func TestPrioritySection533NonExclusive(t *testing.T) { + // Example from RFC 7540 Section 5.3.3. + // A,B,C,D,E,F = 1,2,3,4,5,6 + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(3, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(4, OpenStreamOptions{PusherID: 3}) + ws.OpenStream(5, OpenStreamOptions{PusherID: 3}) + ws.OpenStream(6, OpenStreamOptions{PusherID: 4}) + ws.AdjustStream(1, PriorityParam{ + StreamDep: 4, + Weight: 15, + Exclusive: false, + }) + want := "1{parent:4} 2{parent:1} 3{parent:1} 4{parent:0} 5{parent:3} 6{parent:4}" + if got := fmtTree(ws, fmtNodeParentSkipRoot); got != want { + t.Errorf("After adjust\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func TestPrioritySection533Exclusive(t *testing.T) { + // Example from RFC 7540 Section 5.3.3. + // A,B,C,D,E,F = 1,2,3,4,5,6 + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(3, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(4, OpenStreamOptions{PusherID: 3}) + ws.OpenStream(5, OpenStreamOptions{PusherID: 3}) + ws.OpenStream(6, OpenStreamOptions{PusherID: 4}) + ws.AdjustStream(1, PriorityParam{ + StreamDep: 4, + Weight: 15, + Exclusive: true, + }) + want := "1{parent:4} 2{parent:1} 3{parent:1} 4{parent:0} 5{parent:3} 6{parent:1}" + if got := fmtTree(ws, fmtNodeParentSkipRoot); got != want { + t.Errorf("After adjust\ngot %q\nwant %q", got, want) + } + if err := checkPriorityWellFormed(ws); err != nil { + t.Error(err) + } +} + +func checkPopAll(ws WriteScheduler, order []uint32) error { + for k, id := range order { + wr, ok := ws.Pop() + if !ok { + return fmt.Errorf("Pop[%d]: got ok=false, want %d (order=%v)", k, id, order) + } + if got := wr.StreamID(); got != id { + return fmt.Errorf("Pop[%d]: got %v, want %d (order=%v)", k, got, id, order) + } + } + wr, ok := ws.Pop() + if ok { + return fmt.Errorf("Pop[%d]: got %v, want ok=false (order=%v)", len(order), wr.StreamID(), order) + } + return nil +} + +func TestPriorityPopFrom533Tree(t *testing.T) { + ws := makeSection533Tree() + + ws.Push(makeWriteHeadersRequest(3 /*C*/)) + ws.Push(makeWriteNonStreamRequest()) + ws.Push(makeWriteHeadersRequest(5 /*E*/)) + ws.Push(makeWriteHeadersRequest(1 /*A*/)) + t.Log("tree:", fmtTree(ws, fmtNodeParentSkipRoot)) + + if err := checkPopAll(ws, []uint32{0 /*NonStream*/, 1, 3, 5}); err != nil { + t.Error(err) + } +} + +func TestPriorityPopFromLinearTree(t *testing.T) { + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + ws.OpenStream(3, OpenStreamOptions{PusherID: 2}) + ws.OpenStream(4, OpenStreamOptions{PusherID: 3}) + + ws.Push(makeWriteHeadersRequest(3)) + ws.Push(makeWriteHeadersRequest(4)) + ws.Push(makeWriteHeadersRequest(1)) + ws.Push(makeWriteHeadersRequest(2)) + ws.Push(makeWriteNonStreamRequest()) + ws.Push(makeWriteNonStreamRequest()) + t.Log("tree:", fmtTree(ws, fmtNodeParentSkipRoot)) + + if err := checkPopAll(ws, []uint32{0, 0 /*NonStreams*/, 1, 2, 3, 4}); err != nil { + t.Error(err) + } +} + +func TestPriorityFlowControl(t *testing.T) { + ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{ThrottleOutOfOrderWrites: false}) + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + + sc := &serverConn{maxFrameSize: 16} + st1 := &stream{id: 1, sc: sc} + st2 := &stream{id: 2, sc: sc} + + ws.Push(FrameWriteRequest{&writeData{1, make([]byte, 16), false}, st1, nil}) + ws.Push(FrameWriteRequest{&writeData{2, make([]byte, 16), false}, st2, nil}) + ws.AdjustStream(2, PriorityParam{StreamDep: 1}) + + // No flow-control bytes available. + if wr, ok := ws.Pop(); ok { + t.Fatalf("Pop(limited by flow control)=%v,true, want false", wr) + } + + // Add enough flow-control bytes to write st2 in two Pop calls. + // Should write data from st2 even though it's lower priority than st1. + for i := 1; i <= 2; i++ { + st2.flow.add(8) + wr, ok := ws.Pop() + if !ok { + t.Fatalf("Pop(%d)=false, want true", i) + } + if got, want := wr.DataSize(), 8; got != want { + t.Fatalf("Pop(%d)=%d bytes, want %d bytes", i, got, want) + } + } +} + +func TestPriorityThrottleOutOfOrderWrites(t *testing.T) { + ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{ThrottleOutOfOrderWrites: true}) + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{PusherID: 1}) + + sc := &serverConn{maxFrameSize: 4096} + st1 := &stream{id: 1, sc: sc} + st2 := &stream{id: 2, sc: sc} + st1.flow.add(4096) + st2.flow.add(4096) + ws.Push(FrameWriteRequest{&writeData{2, make([]byte, 4096), false}, st2, nil}) + ws.AdjustStream(2, PriorityParam{StreamDep: 1}) + + // We have enough flow-control bytes to write st2 in a single Pop call. + // However, due to out-of-order write throttling, the first call should + // only write 1KB. + wr, ok := ws.Pop() + if !ok { + t.Fatalf("Pop(st2.first)=false, want true") + } + if got, want := wr.StreamID(), uint32(2); got != want { + t.Fatalf("Pop(st2.first)=stream %d, want stream %d", got, want) + } + if got, want := wr.DataSize(), 1024; got != want { + t.Fatalf("Pop(st2.first)=%d bytes, want %d bytes", got, want) + } + + // Now add data on st1. This should take precedence. + ws.Push(FrameWriteRequest{&writeData{1, make([]byte, 4096), false}, st1, nil}) + wr, ok = ws.Pop() + if !ok { + t.Fatalf("Pop(st1)=false, want true") + } + if got, want := wr.StreamID(), uint32(1); got != want { + t.Fatalf("Pop(st1)=stream %d, want stream %d", got, want) + } + if got, want := wr.DataSize(), 4096; got != want { + t.Fatalf("Pop(st1)=%d bytes, want %d bytes", got, want) + } + + // Should go back to writing 1KB from st2. + wr, ok = ws.Pop() + if !ok { + t.Fatalf("Pop(st2.last)=false, want true") + } + if got, want := wr.StreamID(), uint32(2); got != want { + t.Fatalf("Pop(st2.last)=stream %d, want stream %d", got, want) + } + if got, want := wr.DataSize(), 1024; got != want { + t.Fatalf("Pop(st2.last)=%d bytes, want %d bytes", got, want) + } +} + +func TestPriorityWeights(t *testing.T) { + ws := defaultPriorityWriteScheduler() + ws.OpenStream(1, OpenStreamOptions{}) + ws.OpenStream(2, OpenStreamOptions{}) + + sc := &serverConn{maxFrameSize: 8} + st1 := &stream{id: 1, sc: sc} + st2 := &stream{id: 2, sc: sc} + st1.flow.add(40) + st2.flow.add(40) + + ws.Push(FrameWriteRequest{&writeData{1, make([]byte, 40), false}, st1, nil}) + ws.Push(FrameWriteRequest{&writeData{2, make([]byte, 40), false}, st2, nil}) + ws.AdjustStream(1, PriorityParam{StreamDep: 0, Weight: 34}) + ws.AdjustStream(2, PriorityParam{StreamDep: 0, Weight: 9}) + + // st1 gets 3.5x the bandwidth of st2 (3.5 = (34+1)/(9+1)). + // The maximum frame size is 8 bytes. The write sequence should be: + // st1, total bytes so far is (st1=8, st=0) + // st2, total bytes so far is (st1=8, st=8) + // st1, total bytes so far is (st1=16, st=8) + // st1, total bytes so far is (st1=24, st=8) // 3x bandwidth + // st1, total bytes so far is (st1=32, st=8) // 4x bandwidth + // st2, total bytes so far is (st1=32, st=16) // 2x bandwidth + // st1, total bytes so far is (st1=40, st=16) + // st2, total bytes so far is (st1=40, st=24) + // st2, total bytes so far is (st1=40, st=32) + // st2, total bytes so far is (st1=40, st=40) + if err := checkPopAll(ws, []uint32{1, 2, 1, 1, 1, 2, 1, 2, 2, 2}); err != nil { + t.Error(err) + } +} + +func TestPriorityRstStreamOnNonOpenStreams(t *testing.T) { + ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{ + MaxClosedNodesInTree: 0, + MaxIdleNodesInTree: 0, + }) + ws.OpenStream(1, OpenStreamOptions{}) + ws.CloseStream(1) + ws.Push(FrameWriteRequest{write: streamError(1, ErrCodeProtocol)}) + ws.Push(FrameWriteRequest{write: streamError(2, ErrCodeProtocol)}) + + if err := checkPopAll(ws, []uint32{1, 2}); err != nil { + t.Error(err) + } +} diff --git a/vendor/golang.org/x/net/http2/writesched_random.go b/vendor/golang.org/x/net/http2/writesched_random.go new file mode 100644 index 0000000..36d7919 --- /dev/null +++ b/vendor/golang.org/x/net/http2/writesched_random.go @@ -0,0 +1,72 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import "math" + +// NewRandomWriteScheduler constructs a WriteScheduler that ignores HTTP/2 +// priorities. Control frames like SETTINGS and PING are written before DATA +// frames, but if no control frames are queued and multiple streams have queued +// HEADERS or DATA frames, Pop selects a ready stream arbitrarily. +func NewRandomWriteScheduler() WriteScheduler { + return &randomWriteScheduler{sq: make(map[uint32]*writeQueue)} +} + +type randomWriteScheduler struct { + // zero are frames not associated with a specific stream. + zero writeQueue + + // sq contains the stream-specific queues, keyed by stream ID. + // When a stream is idle or closed, it's deleted from the map. + sq map[uint32]*writeQueue + + // pool of empty queues for reuse. + queuePool writeQueuePool +} + +func (ws *randomWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) { + // no-op: idle streams are not tracked +} + +func (ws *randomWriteScheduler) CloseStream(streamID uint32) { + q, ok := ws.sq[streamID] + if !ok { + return + } + delete(ws.sq, streamID) + ws.queuePool.put(q) +} + +func (ws *randomWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) { + // no-op: priorities are ignored +} + +func (ws *randomWriteScheduler) Push(wr FrameWriteRequest) { + id := wr.StreamID() + if id == 0 { + ws.zero.push(wr) + return + } + q, ok := ws.sq[id] + if !ok { + q = ws.queuePool.get() + ws.sq[id] = q + } + q.push(wr) +} + +func (ws *randomWriteScheduler) Pop() (FrameWriteRequest, bool) { + // Control frames first. + if !ws.zero.empty() { + return ws.zero.shift(), true + } + // Iterate over all non-idle streams until finding one that can be consumed. + for _, q := range ws.sq { + if wr, ok := q.consume(math.MaxInt32); ok { + return wr, true + } + } + return FrameWriteRequest{}, false +} diff --git a/vendor/golang.org/x/net/http2/writesched_random_test.go b/vendor/golang.org/x/net/http2/writesched_random_test.go new file mode 100644 index 0000000..3bf4aa3 --- /dev/null +++ b/vendor/golang.org/x/net/http2/writesched_random_test.go @@ -0,0 +1,44 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import "testing" + +func TestRandomScheduler(t *testing.T) { + ws := NewRandomWriteScheduler() + ws.Push(makeWriteHeadersRequest(3)) + ws.Push(makeWriteHeadersRequest(4)) + ws.Push(makeWriteHeadersRequest(1)) + ws.Push(makeWriteHeadersRequest(2)) + ws.Push(makeWriteNonStreamRequest()) + ws.Push(makeWriteNonStreamRequest()) + + // Pop all frames. Should get the non-stream requests first, + // followed by the stream requests in any order. + var order []FrameWriteRequest + for { + wr, ok := ws.Pop() + if !ok { + break + } + order = append(order, wr) + } + t.Logf("got frames: %v", order) + if len(order) != 6 { + t.Fatalf("got %d frames, expected 6", len(order)) + } + if order[0].StreamID() != 0 || order[1].StreamID() != 0 { + t.Fatal("expected non-stream frames first", order[0], order[1]) + } + got := make(map[uint32]bool) + for _, wr := range order[2:] { + got[wr.StreamID()] = true + } + for id := uint32(1); id <= 4; id++ { + if !got[id] { + t.Errorf("frame not found for stream %d", id) + } + } +} diff --git a/vendor/golang.org/x/net/http2/writesched_test.go b/vendor/golang.org/x/net/http2/writesched_test.go new file mode 100644 index 0000000..0807056 --- /dev/null +++ b/vendor/golang.org/x/net/http2/writesched_test.go @@ -0,0 +1,125 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "fmt" + "math" + "reflect" + "testing" +) + +func makeWriteNonStreamRequest() FrameWriteRequest { + return FrameWriteRequest{writeSettingsAck{}, nil, nil} +} + +func makeWriteHeadersRequest(streamID uint32) FrameWriteRequest { + st := &stream{id: streamID} + return FrameWriteRequest{&writeResHeaders{streamID: streamID, httpResCode: 200}, st, nil} +} + +func checkConsume(wr FrameWriteRequest, nbytes int32, want []FrameWriteRequest) error { + consumed, rest, n := wr.Consume(nbytes) + var wantConsumed, wantRest FrameWriteRequest + switch len(want) { + case 0: + case 1: + wantConsumed = want[0] + case 2: + wantConsumed = want[0] + wantRest = want[1] + } + if !reflect.DeepEqual(consumed, wantConsumed) || !reflect.DeepEqual(rest, wantRest) || n != len(want) { + return fmt.Errorf("got %v, %v, %v\nwant %v, %v, %v", consumed, rest, n, wantConsumed, wantRest, len(want)) + } + return nil +} + +func TestFrameWriteRequestNonData(t *testing.T) { + wr := makeWriteNonStreamRequest() + if got, want := wr.DataSize(), 0; got != want { + t.Errorf("DataSize: got %v, want %v", got, want) + } + + // Non-DATA frames are always consumed whole. + if err := checkConsume(wr, 0, []FrameWriteRequest{wr}); err != nil { + t.Errorf("Consume:\n%v", err) + } +} + +func TestFrameWriteRequestData(t *testing.T) { + st := &stream{ + id: 1, + sc: &serverConn{maxFrameSize: 16}, + } + const size = 32 + wr := FrameWriteRequest{&writeData{st.id, make([]byte, size), true}, st, make(chan error)} + if got, want := wr.DataSize(), size; got != want { + t.Errorf("DataSize: got %v, want %v", got, want) + } + + // No flow-control bytes available: cannot consume anything. + if err := checkConsume(wr, math.MaxInt32, []FrameWriteRequest{}); err != nil { + t.Errorf("Consume(limited by flow control):\n%v", err) + } + + // Add enough flow-control bytes to consume the entire frame, + // but we're now restricted by st.sc.maxFrameSize. + st.flow.add(size) + want := []FrameWriteRequest{ + { + write: &writeData{st.id, make([]byte, st.sc.maxFrameSize), false}, + stream: st, + done: nil, + }, + { + write: &writeData{st.id, make([]byte, size-st.sc.maxFrameSize), true}, + stream: st, + done: wr.done, + }, + } + if err := checkConsume(wr, math.MaxInt32, want); err != nil { + t.Errorf("Consume(limited by maxFrameSize):\n%v", err) + } + rest := want[1] + + // Consume 8 bytes from the remaining frame. + want = []FrameWriteRequest{ + { + write: &writeData{st.id, make([]byte, 8), false}, + stream: st, + done: nil, + }, + { + write: &writeData{st.id, make([]byte, size-st.sc.maxFrameSize-8), true}, + stream: st, + done: wr.done, + }, + } + if err := checkConsume(rest, 8, want); err != nil { + t.Errorf("Consume(8):\n%v", err) + } + rest = want[1] + + // Consume all remaining bytes. + want = []FrameWriteRequest{ + { + write: &writeData{st.id, make([]byte, size-st.sc.maxFrameSize-8), true}, + stream: st, + done: wr.done, + }, + } + if err := checkConsume(rest, math.MaxInt32, want); err != nil { + t.Errorf("Consume(remainder):\n%v", err) + } +} + +func TestFrameWriteRequest_StreamID(t *testing.T) { + const streamID = 123 + wr := FrameWriteRequest{write: streamError(streamID, ErrCodeNo)} + if got := wr.StreamID(); got != streamID { + t.Errorf("FrameWriteRequest(StreamError) = %v; want %v", got, streamID) + } +} diff --git a/vendor/golang.org/x/net/http2/z_spec_test.go b/vendor/golang.org/x/net/http2/z_spec_test.go new file mode 100644 index 0000000..610b2cd --- /dev/null +++ b/vendor/golang.org/x/net/http2/z_spec_test.go @@ -0,0 +1,356 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "bytes" + "encoding/xml" + "flag" + "fmt" + "io" + "os" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "sync" + "testing" +) + +var coverSpec = flag.Bool("coverspec", false, "Run spec coverage tests") + +// The global map of sentence coverage for the http2 spec. +var defaultSpecCoverage specCoverage + +var loadSpecOnce sync.Once + +func loadSpec() { + if f, err := os.Open("testdata/draft-ietf-httpbis-http2.xml"); err != nil { + panic(err) + } else { + defaultSpecCoverage = readSpecCov(f) + f.Close() + } +} + +// covers marks all sentences for section sec in defaultSpecCoverage. Sentences not +// "covered" will be included in report outputted by TestSpecCoverage. +func covers(sec, sentences string) { + loadSpecOnce.Do(loadSpec) + defaultSpecCoverage.cover(sec, sentences) +} + +type specPart struct { + section string + sentence string +} + +func (ss specPart) Less(oo specPart) bool { + atoi := func(s string) int { + n, err := strconv.Atoi(s) + if err != nil { + panic(err) + } + return n + } + a := strings.Split(ss.section, ".") + b := strings.Split(oo.section, ".") + for len(a) > 0 { + if len(b) == 0 { + return false + } + x, y := atoi(a[0]), atoi(b[0]) + if x == y { + a, b = a[1:], b[1:] + continue + } + return x < y + } + if len(b) > 0 { + return true + } + return false +} + +type bySpecSection []specPart + +func (a bySpecSection) Len() int { return len(a) } +func (a bySpecSection) Less(i, j int) bool { return a[i].Less(a[j]) } +func (a bySpecSection) Swap(i, j int) { a[i], a[j] = a[j], a[i] } + +type specCoverage struct { + coverage map[specPart]bool + d *xml.Decoder +} + +func joinSection(sec []int) string { + s := fmt.Sprintf("%d", sec[0]) + for _, n := range sec[1:] { + s = fmt.Sprintf("%s.%d", s, n) + } + return s +} + +func (sc specCoverage) readSection(sec []int) { + var ( + buf = new(bytes.Buffer) + sub = 0 + ) + for { + tk, err := sc.d.Token() + if err != nil { + if err == io.EOF { + return + } + panic(err) + } + switch v := tk.(type) { + case xml.StartElement: + if skipElement(v) { + if err := sc.d.Skip(); err != nil { + panic(err) + } + if v.Name.Local == "section" { + sub++ + } + break + } + switch v.Name.Local { + case "section": + sub++ + sc.readSection(append(sec, sub)) + case "xref": + buf.Write(sc.readXRef(v)) + } + case xml.CharData: + if len(sec) == 0 { + break + } + buf.Write(v) + case xml.EndElement: + if v.Name.Local == "section" { + sc.addSentences(joinSection(sec), buf.String()) + return + } + } + } +} + +func (sc specCoverage) readXRef(se xml.StartElement) []byte { + var b []byte + for { + tk, err := sc.d.Token() + if err != nil { + panic(err) + } + switch v := tk.(type) { + case xml.CharData: + if b != nil { + panic("unexpected CharData") + } + b = []byte(string(v)) + case xml.EndElement: + if v.Name.Local != "xref" { + panic("expected ") + } + if b != nil { + return b + } + sig := attrSig(se) + switch sig { + case "target": + return []byte(fmt.Sprintf("[%s]", attrValue(se, "target"))) + case "fmt-of,rel,target", "fmt-,,rel,target": + return []byte(fmt.Sprintf("[%s, %s]", attrValue(se, "target"), attrValue(se, "rel"))) + case "fmt-of,sec,target", "fmt-,,sec,target": + return []byte(fmt.Sprintf("[section %s of %s]", attrValue(se, "sec"), attrValue(se, "target"))) + case "fmt-of,rel,sec,target": + return []byte(fmt.Sprintf("[section %s of %s, %s]", attrValue(se, "sec"), attrValue(se, "target"), attrValue(se, "rel"))) + default: + panic(fmt.Sprintf("unknown attribute signature %q in %#v", sig, fmt.Sprintf("%#v", se))) + } + default: + panic(fmt.Sprintf("unexpected tag %q", v)) + } + } +} + +var skipAnchor = map[string]bool{ + "intro": true, + "Overview": true, +} + +var skipTitle = map[string]bool{ + "Acknowledgements": true, + "Change Log": true, + "Document Organization": true, + "Conventions and Terminology": true, +} + +func skipElement(s xml.StartElement) bool { + switch s.Name.Local { + case "artwork": + return true + case "section": + for _, attr := range s.Attr { + switch attr.Name.Local { + case "anchor": + if skipAnchor[attr.Value] || strings.HasPrefix(attr.Value, "changes.since.") { + return true + } + case "title": + if skipTitle[attr.Value] { + return true + } + } + } + } + return false +} + +func readSpecCov(r io.Reader) specCoverage { + sc := specCoverage{ + coverage: map[specPart]bool{}, + d: xml.NewDecoder(r)} + sc.readSection(nil) + return sc +} + +func (sc specCoverage) addSentences(sec string, sentence string) { + for _, s := range parseSentences(sentence) { + sc.coverage[specPart{sec, s}] = false + } +} + +func (sc specCoverage) cover(sec string, sentence string) { + for _, s := range parseSentences(sentence) { + p := specPart{sec, s} + if _, ok := sc.coverage[p]; !ok { + panic(fmt.Sprintf("Not found in spec: %q, %q", sec, s)) + } + sc.coverage[specPart{sec, s}] = true + } + +} + +var whitespaceRx = regexp.MustCompile(`\s+`) + +func parseSentences(sens string) []string { + sens = strings.TrimSpace(sens) + if sens == "" { + return nil + } + ss := strings.Split(whitespaceRx.ReplaceAllString(sens, " "), ". ") + for i, s := range ss { + s = strings.TrimSpace(s) + if !strings.HasSuffix(s, ".") { + s += "." + } + ss[i] = s + } + return ss +} + +func TestSpecParseSentences(t *testing.T) { + tests := []struct { + ss string + want []string + }{ + {"Sentence 1. Sentence 2.", + []string{ + "Sentence 1.", + "Sentence 2.", + }}, + {"Sentence 1. \nSentence 2.\tSentence 3.", + []string{ + "Sentence 1.", + "Sentence 2.", + "Sentence 3.", + }}, + } + + for i, tt := range tests { + got := parseSentences(tt.ss) + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("%d: got = %q, want %q", i, got, tt.want) + } + } +} + +func TestSpecCoverage(t *testing.T) { + if !*coverSpec { + t.Skip() + } + + loadSpecOnce.Do(loadSpec) + + var ( + list []specPart + cv = defaultSpecCoverage.coverage + total = len(cv) + complete = 0 + ) + + for sp, touched := range defaultSpecCoverage.coverage { + if touched { + complete++ + } else { + list = append(list, sp) + } + } + sort.Stable(bySpecSection(list)) + + if testing.Short() && len(list) > 5 { + list = list[:5] + } + + for _, p := range list { + t.Errorf("\tSECTION %s: %s", p.section, p.sentence) + } + + t.Logf("%d/%d (%d%%) sentences covered", complete, total, (complete/total)*100) +} + +func attrSig(se xml.StartElement) string { + var names []string + for _, attr := range se.Attr { + if attr.Name.Local == "fmt" { + names = append(names, "fmt-"+attr.Value) + } else { + names = append(names, attr.Name.Local) + } + } + sort.Strings(names) + return strings.Join(names, ",") +} + +func attrValue(se xml.StartElement, attr string) string { + for _, a := range se.Attr { + if a.Name.Local == attr { + return a.Value + } + } + panic("unknown attribute " + attr) +} + +func TestSpecPartLess(t *testing.T) { + tests := []struct { + sec1, sec2 string + want bool + }{ + {"6.2.1", "6.2", false}, + {"6.2", "6.2.1", true}, + {"6.10", "6.10.1", true}, + {"6.10", "6.1.1", false}, // 10, not 1 + {"6.1", "6.1", false}, // equal, so not less + } + for _, tt := range tests { + got := (specPart{tt.sec1, "foo"}).Less(specPart{tt.sec2, "foo"}) + if got != tt.want { + t.Errorf("Less(%q, %q) = %v; want %v", tt.sec1, tt.sec2, got, tt.want) + } + } +} diff --git a/vendor/golang.org/x/net/icmp/dstunreach.go b/vendor/golang.org/x/net/icmp/dstunreach.go new file mode 100644 index 0000000..75db991 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/dstunreach.go @@ -0,0 +1,41 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +// A DstUnreach represents an ICMP destination unreachable message +// body. +type DstUnreach struct { + Data []byte // data, known as original datagram field + Extensions []Extension // extensions +} + +// Len implements the Len method of MessageBody interface. +func (p *DstUnreach) Len(proto int) int { + if p == nil { + return 0 + } + l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions) + return 4 + l +} + +// Marshal implements the Marshal method of MessageBody interface. +func (p *DstUnreach) Marshal(proto int) ([]byte, error) { + return marshalMultipartMessageBody(proto, p.Data, p.Extensions) +} + +// parseDstUnreach parses b as an ICMP destination unreachable message +// body. +func parseDstUnreach(proto int, b []byte) (MessageBody, error) { + if len(b) < 4 { + return nil, errMessageTooShort + } + p := &DstUnreach{} + var err error + p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b) + if err != nil { + return nil, err + } + return p, nil +} diff --git a/vendor/golang.org/x/net/icmp/echo.go b/vendor/golang.org/x/net/icmp/echo.go new file mode 100644 index 0000000..e6f15ef --- /dev/null +++ b/vendor/golang.org/x/net/icmp/echo.go @@ -0,0 +1,45 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import "encoding/binary" + +// An Echo represents an ICMP echo request or reply message body. +type Echo struct { + ID int // identifier + Seq int // sequence number + Data []byte // data +} + +// Len implements the Len method of MessageBody interface. +func (p *Echo) Len(proto int) int { + if p == nil { + return 0 + } + return 4 + len(p.Data) +} + +// Marshal implements the Marshal method of MessageBody interface. +func (p *Echo) Marshal(proto int) ([]byte, error) { + b := make([]byte, 4+len(p.Data)) + binary.BigEndian.PutUint16(b[:2], uint16(p.ID)) + binary.BigEndian.PutUint16(b[2:4], uint16(p.Seq)) + copy(b[4:], p.Data) + return b, nil +} + +// parseEcho parses b as an ICMP echo request or reply message body. +func parseEcho(proto int, b []byte) (MessageBody, error) { + bodyLen := len(b) + if bodyLen < 4 { + return nil, errMessageTooShort + } + p := &Echo{ID: int(binary.BigEndian.Uint16(b[:2])), Seq: int(binary.BigEndian.Uint16(b[2:4]))} + if bodyLen > 4 { + p.Data = make([]byte, bodyLen-4) + copy(p.Data, b[4:]) + } + return p, nil +} diff --git a/vendor/golang.org/x/net/icmp/endpoint.go b/vendor/golang.org/x/net/icmp/endpoint.go new file mode 100644 index 0000000..a68bfb0 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/endpoint.go @@ -0,0 +1,113 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import ( + "net" + "runtime" + "syscall" + "time" + + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +var _ net.PacketConn = &PacketConn{} + +// A PacketConn represents a packet network endpoint that uses either +// ICMPv4 or ICMPv6. +type PacketConn struct { + c net.PacketConn + p4 *ipv4.PacketConn + p6 *ipv6.PacketConn +} + +func (c *PacketConn) ok() bool { return c != nil && c.c != nil } + +// IPv4PacketConn returns the ipv4.PacketConn of c. +// It returns nil when c is not created as the endpoint for ICMPv4. +func (c *PacketConn) IPv4PacketConn() *ipv4.PacketConn { + if !c.ok() { + return nil + } + return c.p4 +} + +// IPv6PacketConn returns the ipv6.PacketConn of c. +// It returns nil when c is not created as the endpoint for ICMPv6. +func (c *PacketConn) IPv6PacketConn() *ipv6.PacketConn { + if !c.ok() { + return nil + } + return c.p6 +} + +// ReadFrom reads an ICMP message from the connection. +func (c *PacketConn) ReadFrom(b []byte) (int, net.Addr, error) { + if !c.ok() { + return 0, nil, syscall.EINVAL + } + // Please be informed that ipv4.NewPacketConn enables + // IP_STRIPHDR option by default on Darwin. + // See golang.org/issue/9395 for further information. + if runtime.GOOS == "darwin" && c.p4 != nil { + n, _, peer, err := c.p4.ReadFrom(b) + return n, peer, err + } + return c.c.ReadFrom(b) +} + +// WriteTo writes the ICMP message b to dst. +// Dst must be net.UDPAddr when c is a non-privileged +// datagram-oriented ICMP endpoint. Otherwise it must be net.IPAddr. +func (c *PacketConn) WriteTo(b []byte, dst net.Addr) (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + return c.c.WriteTo(b, dst) +} + +// Close closes the endpoint. +func (c *PacketConn) Close() error { + if !c.ok() { + return syscall.EINVAL + } + return c.c.Close() +} + +// LocalAddr returns the local network address. +func (c *PacketConn) LocalAddr() net.Addr { + if !c.ok() { + return nil + } + return c.c.LocalAddr() +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *PacketConn) SetDeadline(t time.Time) error { + if !c.ok() { + return syscall.EINVAL + } + return c.c.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *PacketConn) SetReadDeadline(t time.Time) error { + if !c.ok() { + return syscall.EINVAL + } + return c.c.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *PacketConn) SetWriteDeadline(t time.Time) error { + if !c.ok() { + return syscall.EINVAL + } + return c.c.SetWriteDeadline(t) +} diff --git a/vendor/golang.org/x/net/icmp/example_test.go b/vendor/golang.org/x/net/icmp/example_test.go new file mode 100644 index 0000000..1df4cec --- /dev/null +++ b/vendor/golang.org/x/net/icmp/example_test.go @@ -0,0 +1,63 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp_test + +import ( + "log" + "net" + "os" + "runtime" + + "golang.org/x/net/icmp" + "golang.org/x/net/ipv6" +) + +func ExamplePacketConn_nonPrivilegedPing() { + switch runtime.GOOS { + case "darwin": + case "linux": + log.Println("you may need to adjust the net.ipv4.ping_group_range kernel state") + default: + log.Println("not supported on", runtime.GOOS) + return + } + + c, err := icmp.ListenPacket("udp6", "fe80::1%en0") + if err != nil { + log.Fatal(err) + } + defer c.Close() + + wm := icmp.Message{ + Type: ipv6.ICMPTypeEchoRequest, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, Seq: 1, + Data: []byte("HELLO-R-U-THERE"), + }, + } + wb, err := wm.Marshal(nil) + if err != nil { + log.Fatal(err) + } + if _, err := c.WriteTo(wb, &net.UDPAddr{IP: net.ParseIP("ff02::1"), Zone: "en0"}); err != nil { + log.Fatal(err) + } + + rb := make([]byte, 1500) + n, peer, err := c.ReadFrom(rb) + if err != nil { + log.Fatal(err) + } + rm, err := icmp.ParseMessage(58, rb[:n]) + if err != nil { + log.Fatal(err) + } + switch rm.Type { + case ipv6.ICMPTypeEchoReply: + log.Printf("got reflection from %v", peer) + default: + log.Printf("got %+v; want echo reply", rm) + } +} diff --git a/vendor/golang.org/x/net/icmp/extension.go b/vendor/golang.org/x/net/icmp/extension.go new file mode 100644 index 0000000..402a751 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/extension.go @@ -0,0 +1,89 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import "encoding/binary" + +// An Extension represents an ICMP extension. +type Extension interface { + // Len returns the length of ICMP extension. + // Proto must be either the ICMPv4 or ICMPv6 protocol number. + Len(proto int) int + + // Marshal returns the binary encoding of ICMP extension. + // Proto must be either the ICMPv4 or ICMPv6 protocol number. + Marshal(proto int) ([]byte, error) +} + +const extensionVersion = 2 + +func validExtensionHeader(b []byte) bool { + v := int(b[0]&0xf0) >> 4 + s := binary.BigEndian.Uint16(b[2:4]) + if s != 0 { + s = checksum(b) + } + if v != extensionVersion || s != 0 { + return false + } + return true +} + +// parseExtensions parses b as a list of ICMP extensions. +// The length attribute l must be the length attribute field in +// received icmp messages. +// +// It will return a list of ICMP extensions and an adjusted length +// attribute that represents the length of the padded original +// datagram field. Otherwise, it returns an error. +func parseExtensions(b []byte, l int) ([]Extension, int, error) { + // Still a lot of non-RFC 4884 compliant implementations are + // out there. Set the length attribute l to 128 when it looks + // inappropriate for backwards compatibility. + // + // A minimal extension at least requires 8 octets; 4 octets + // for an extension header, and 4 octets for a single object + // header. + // + // See RFC 4884 for further information. + if 128 > l || l+8 > len(b) { + l = 128 + } + if l+8 > len(b) { + return nil, -1, errNoExtension + } + if !validExtensionHeader(b[l:]) { + if l == 128 { + return nil, -1, errNoExtension + } + l = 128 + if !validExtensionHeader(b[l:]) { + return nil, -1, errNoExtension + } + } + var exts []Extension + for b = b[l+4:]; len(b) >= 4; { + ol := int(binary.BigEndian.Uint16(b[:2])) + if 4 > ol || ol > len(b) { + break + } + switch b[2] { + case classMPLSLabelStack: + ext, err := parseMPLSLabelStack(b[:ol]) + if err != nil { + return nil, -1, err + } + exts = append(exts, ext) + case classInterfaceInfo: + ext, err := parseInterfaceInfo(b[:ol]) + if err != nil { + return nil, -1, err + } + exts = append(exts, ext) + } + b = b[ol:] + } + return exts, l, nil +} diff --git a/vendor/golang.org/x/net/icmp/extension_test.go b/vendor/golang.org/x/net/icmp/extension_test.go new file mode 100644 index 0000000..0b3f7b9 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/extension_test.go @@ -0,0 +1,259 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import ( + "net" + "reflect" + "testing" + + "golang.org/x/net/internal/iana" +) + +var marshalAndParseExtensionTests = []struct { + proto int + hdr []byte + obj []byte + exts []Extension +}{ + // MPLS label stack with no label + { + proto: iana.ProtocolICMP, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x04, 0x01, 0x01, + }, + exts: []Extension{ + &MPLSLabelStack{ + Class: classMPLSLabelStack, + Type: typeIncomingMPLSLabelStack, + }, + }, + }, + // MPLS label stack with a single label + { + proto: iana.ProtocolIPv6ICMP, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x08, 0x01, 0x01, + 0x03, 0xe8, 0xe9, 0xff, + }, + exts: []Extension{ + &MPLSLabelStack{ + Class: classMPLSLabelStack, + Type: typeIncomingMPLSLabelStack, + Labels: []MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + }, + }, + // MPLS label stack with multiple labels + { + proto: iana.ProtocolICMP, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x0c, 0x01, 0x01, + 0x03, 0xe8, 0xde, 0xfe, + 0x03, 0xe8, 0xe1, 0xff, + }, + exts: []Extension{ + &MPLSLabelStack{ + Class: classMPLSLabelStack, + Type: typeIncomingMPLSLabelStack, + Labels: []MPLSLabel{ + { + Label: 16013, + TC: 0x7, + S: false, + TTL: 254, + }, + { + Label: 16014, + TC: 0, + S: true, + TTL: 255, + }, + }, + }, + }, + }, + // Interface information with no attribute + { + proto: iana.ProtocolICMP, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x04, 0x02, 0x00, + }, + exts: []Extension{ + &InterfaceInfo{ + Class: classInterfaceInfo, + }, + }, + }, + // Interface information with ifIndex and name + { + proto: iana.ProtocolICMP, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x10, 0x02, 0x0a, + 0x00, 0x00, 0x00, 0x10, + 0x08, byte('e'), byte('n'), byte('1'), + byte('0'), byte('1'), 0x00, 0x00, + }, + exts: []Extension{ + &InterfaceInfo{ + Class: classInterfaceInfo, + Type: 0x0a, + Interface: &net.Interface{ + Index: 16, + Name: "en101", + }, + }, + }, + }, + // Interface information with ifIndex, IPAddr, name and MTU + { + proto: iana.ProtocolIPv6ICMP, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x28, 0x02, 0x0f, + 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x02, 0x00, 0x00, + 0xfe, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, + 0x08, byte('e'), byte('n'), byte('1'), + byte('0'), byte('1'), 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, + }, + exts: []Extension{ + &InterfaceInfo{ + Class: classInterfaceInfo, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.ParseIP("fe80::1"), + Zone: "en101", + }, + }, + }, + }, +} + +func TestMarshalAndParseExtension(t *testing.T) { + for i, tt := range marshalAndParseExtensionTests { + for j, ext := range tt.exts { + var err error + var b []byte + switch ext := ext.(type) { + case *MPLSLabelStack: + b, err = ext.Marshal(tt.proto) + if err != nil { + t.Errorf("#%v/%v: %v", i, j, err) + continue + } + case *InterfaceInfo: + b, err = ext.Marshal(tt.proto) + if err != nil { + t.Errorf("#%v/%v: %v", i, j, err) + continue + } + } + if !reflect.DeepEqual(b, tt.obj) { + t.Errorf("#%v/%v: got %#v; want %#v", i, j, b, tt.obj) + continue + } + } + + for j, wire := range []struct { + data []byte // original datagram + inlattr int // length of padded original datagram, a hint + outlattr int // length of padded original datagram, a want + err error + }{ + {nil, 0, -1, errNoExtension}, + {make([]byte, 127), 128, -1, errNoExtension}, + + {make([]byte, 128), 127, -1, errNoExtension}, + {make([]byte, 128), 128, -1, errNoExtension}, + {make([]byte, 128), 129, -1, errNoExtension}, + + {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 127, 128, nil}, + {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 128, 128, nil}, + {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 129, 128, nil}, + + {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 511, -1, errNoExtension}, + {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 512, 512, nil}, + {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 513, -1, errNoExtension}, + } { + exts, l, err := parseExtensions(wire.data, wire.inlattr) + if err != wire.err { + t.Errorf("#%v/%v: got %v; want %v", i, j, err, wire.err) + continue + } + if wire.err != nil { + continue + } + if l != wire.outlattr { + t.Errorf("#%v/%v: got %v; want %v", i, j, l, wire.outlattr) + } + if !reflect.DeepEqual(exts, tt.exts) { + for j, ext := range exts { + switch ext := ext.(type) { + case *MPLSLabelStack: + want := tt.exts[j].(*MPLSLabelStack) + t.Errorf("#%v/%v: got %#v; want %#v", i, j, ext, want) + case *InterfaceInfo: + want := tt.exts[j].(*InterfaceInfo) + t.Errorf("#%v/%v: got %#v; want %#v", i, j, ext, want) + } + } + continue + } + } + } +} + +var parseInterfaceNameTests = []struct { + b []byte + error +}{ + {[]byte{0, 'e', 'n', '0'}, errInvalidExtension}, + {[]byte{4, 'e', 'n', '0'}, nil}, + {[]byte{7, 'e', 'n', '0', 0xff, 0xff, 0xff, 0xff}, errInvalidExtension}, + {[]byte{8, 'e', 'n', '0', 0xff, 0xff, 0xff}, errMessageTooShort}, +} + +func TestParseInterfaceName(t *testing.T) { + ifi := InterfaceInfo{Interface: &net.Interface{}} + for i, tt := range parseInterfaceNameTests { + if _, err := ifi.parseName(tt.b); err != tt.error { + t.Errorf("#%d: got %v; want %v", i, err, tt.error) + } + } +} diff --git a/vendor/golang.org/x/net/icmp/helper.go b/vendor/golang.org/x/net/icmp/helper.go new file mode 100644 index 0000000..6c4e633 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/helper.go @@ -0,0 +1,27 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import ( + "encoding/binary" + "unsafe" +) + +var ( + // See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html. + freebsdVersion uint32 + + nativeEndian binary.ByteOrder +) + +func init() { + i := uint32(1) + b := (*[4]byte)(unsafe.Pointer(&i)) + if b[0] == 1 { + nativeEndian = binary.LittleEndian + } else { + nativeEndian = binary.BigEndian + } +} diff --git a/vendor/golang.org/x/net/icmp/helper_posix.go b/vendor/golang.org/x/net/icmp/helper_posix.go new file mode 100644 index 0000000..398fd38 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/helper_posix.go @@ -0,0 +1,75 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package icmp + +import ( + "net" + "strconv" + "syscall" +) + +func sockaddr(family int, address string) (syscall.Sockaddr, error) { + switch family { + case syscall.AF_INET: + a, err := net.ResolveIPAddr("ip4", address) + if err != nil { + return nil, err + } + if len(a.IP) == 0 { + a.IP = net.IPv4zero + } + if a.IP = a.IP.To4(); a.IP == nil { + return nil, net.InvalidAddrError("non-ipv4 address") + } + sa := &syscall.SockaddrInet4{} + copy(sa.Addr[:], a.IP) + return sa, nil + case syscall.AF_INET6: + a, err := net.ResolveIPAddr("ip6", address) + if err != nil { + return nil, err + } + if len(a.IP) == 0 { + a.IP = net.IPv6unspecified + } + if a.IP.Equal(net.IPv4zero) { + a.IP = net.IPv6unspecified + } + if a.IP = a.IP.To16(); a.IP == nil || a.IP.To4() != nil { + return nil, net.InvalidAddrError("non-ipv6 address") + } + sa := &syscall.SockaddrInet6{ZoneId: zoneToUint32(a.Zone)} + copy(sa.Addr[:], a.IP) + return sa, nil + default: + return nil, net.InvalidAddrError("unexpected family") + } +} + +func zoneToUint32(zone string) uint32 { + if zone == "" { + return 0 + } + if ifi, err := net.InterfaceByName(zone); err == nil { + return uint32(ifi.Index) + } + n, err := strconv.Atoi(zone) + if err != nil { + return 0 + } + return uint32(n) +} + +func last(s string, b byte) int { + i := len(s) + for i--; i >= 0; i-- { + if s[i] == b { + break + } + } + return i +} diff --git a/vendor/golang.org/x/net/icmp/interface.go b/vendor/golang.org/x/net/icmp/interface.go new file mode 100644 index 0000000..78b5b98 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/interface.go @@ -0,0 +1,236 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import ( + "encoding/binary" + "net" + "strings" + + "golang.org/x/net/internal/iana" +) + +const ( + classInterfaceInfo = 2 + + afiIPv4 = 1 + afiIPv6 = 2 +) + +const ( + attrMTU = 1 << iota + attrName + attrIPAddr + attrIfIndex +) + +// An InterfaceInfo represents interface and next-hop identification. +type InterfaceInfo struct { + Class int // extension object class number + Type int // extension object sub-type + Interface *net.Interface + Addr *net.IPAddr +} + +func (ifi *InterfaceInfo) nameLen() int { + if len(ifi.Interface.Name) > 63 { + return 64 + } + l := 1 + len(ifi.Interface.Name) + return (l + 3) &^ 3 +} + +func (ifi *InterfaceInfo) attrsAndLen(proto int) (attrs, l int) { + l = 4 + if ifi.Interface != nil && ifi.Interface.Index > 0 { + attrs |= attrIfIndex + l += 4 + if len(ifi.Interface.Name) > 0 { + attrs |= attrName + l += ifi.nameLen() + } + if ifi.Interface.MTU > 0 { + attrs |= attrMTU + l += 4 + } + } + if ifi.Addr != nil { + switch proto { + case iana.ProtocolICMP: + if ifi.Addr.IP.To4() != nil { + attrs |= attrIPAddr + l += 4 + net.IPv4len + } + case iana.ProtocolIPv6ICMP: + if ifi.Addr.IP.To16() != nil && ifi.Addr.IP.To4() == nil { + attrs |= attrIPAddr + l += 4 + net.IPv6len + } + } + } + return +} + +// Len implements the Len method of Extension interface. +func (ifi *InterfaceInfo) Len(proto int) int { + _, l := ifi.attrsAndLen(proto) + return l +} + +// Marshal implements the Marshal method of Extension interface. +func (ifi *InterfaceInfo) Marshal(proto int) ([]byte, error) { + attrs, l := ifi.attrsAndLen(proto) + b := make([]byte, l) + if err := ifi.marshal(proto, b, attrs, l); err != nil { + return nil, err + } + return b, nil +} + +func (ifi *InterfaceInfo) marshal(proto int, b []byte, attrs, l int) error { + binary.BigEndian.PutUint16(b[:2], uint16(l)) + b[2], b[3] = classInterfaceInfo, byte(ifi.Type) + for b = b[4:]; len(b) > 0 && attrs != 0; { + switch { + case attrs&attrIfIndex != 0: + b = ifi.marshalIfIndex(proto, b) + attrs &^= attrIfIndex + case attrs&attrIPAddr != 0: + b = ifi.marshalIPAddr(proto, b) + attrs &^= attrIPAddr + case attrs&attrName != 0: + b = ifi.marshalName(proto, b) + attrs &^= attrName + case attrs&attrMTU != 0: + b = ifi.marshalMTU(proto, b) + attrs &^= attrMTU + } + } + return nil +} + +func (ifi *InterfaceInfo) marshalIfIndex(proto int, b []byte) []byte { + binary.BigEndian.PutUint32(b[:4], uint32(ifi.Interface.Index)) + return b[4:] +} + +func (ifi *InterfaceInfo) parseIfIndex(b []byte) ([]byte, error) { + if len(b) < 4 { + return nil, errMessageTooShort + } + ifi.Interface.Index = int(binary.BigEndian.Uint32(b[:4])) + return b[4:], nil +} + +func (ifi *InterfaceInfo) marshalIPAddr(proto int, b []byte) []byte { + switch proto { + case iana.ProtocolICMP: + binary.BigEndian.PutUint16(b[:2], uint16(afiIPv4)) + copy(b[4:4+net.IPv4len], ifi.Addr.IP.To4()) + b = b[4+net.IPv4len:] + case iana.ProtocolIPv6ICMP: + binary.BigEndian.PutUint16(b[:2], uint16(afiIPv6)) + copy(b[4:4+net.IPv6len], ifi.Addr.IP.To16()) + b = b[4+net.IPv6len:] + } + return b +} + +func (ifi *InterfaceInfo) parseIPAddr(b []byte) ([]byte, error) { + if len(b) < 4 { + return nil, errMessageTooShort + } + afi := int(binary.BigEndian.Uint16(b[:2])) + b = b[4:] + switch afi { + case afiIPv4: + if len(b) < net.IPv4len { + return nil, errMessageTooShort + } + ifi.Addr.IP = make(net.IP, net.IPv4len) + copy(ifi.Addr.IP, b[:net.IPv4len]) + b = b[net.IPv4len:] + case afiIPv6: + if len(b) < net.IPv6len { + return nil, errMessageTooShort + } + ifi.Addr.IP = make(net.IP, net.IPv6len) + copy(ifi.Addr.IP, b[:net.IPv6len]) + b = b[net.IPv6len:] + } + return b, nil +} + +func (ifi *InterfaceInfo) marshalName(proto int, b []byte) []byte { + l := byte(ifi.nameLen()) + b[0] = l + copy(b[1:], []byte(ifi.Interface.Name)) + return b[l:] +} + +func (ifi *InterfaceInfo) parseName(b []byte) ([]byte, error) { + if 4 > len(b) || len(b) < int(b[0]) { + return nil, errMessageTooShort + } + l := int(b[0]) + if l%4 != 0 || 4 > l || l > 64 { + return nil, errInvalidExtension + } + var name [63]byte + copy(name[:], b[1:l]) + ifi.Interface.Name = strings.Trim(string(name[:]), "\000") + return b[l:], nil +} + +func (ifi *InterfaceInfo) marshalMTU(proto int, b []byte) []byte { + binary.BigEndian.PutUint32(b[:4], uint32(ifi.Interface.MTU)) + return b[4:] +} + +func (ifi *InterfaceInfo) parseMTU(b []byte) ([]byte, error) { + if len(b) < 4 { + return nil, errMessageTooShort + } + ifi.Interface.MTU = int(binary.BigEndian.Uint32(b[:4])) + return b[4:], nil +} + +func parseInterfaceInfo(b []byte) (Extension, error) { + ifi := &InterfaceInfo{ + Class: int(b[2]), + Type: int(b[3]), + } + if ifi.Type&(attrIfIndex|attrName|attrMTU) != 0 { + ifi.Interface = &net.Interface{} + } + if ifi.Type&attrIPAddr != 0 { + ifi.Addr = &net.IPAddr{} + } + attrs := ifi.Type & (attrIfIndex | attrIPAddr | attrName | attrMTU) + for b = b[4:]; len(b) > 0 && attrs != 0; { + var err error + switch { + case attrs&attrIfIndex != 0: + b, err = ifi.parseIfIndex(b) + attrs &^= attrIfIndex + case attrs&attrIPAddr != 0: + b, err = ifi.parseIPAddr(b) + attrs &^= attrIPAddr + case attrs&attrName != 0: + b, err = ifi.parseName(b) + attrs &^= attrName + case attrs&attrMTU != 0: + b, err = ifi.parseMTU(b) + attrs &^= attrMTU + } + if err != nil { + return nil, err + } + } + if ifi.Interface != nil && ifi.Interface.Name != "" && ifi.Addr != nil && ifi.Addr.IP.To16() != nil && ifi.Addr.IP.To4() == nil { + ifi.Addr.Zone = ifi.Interface.Name + } + return ifi, nil +} diff --git a/vendor/golang.org/x/net/icmp/ipv4.go b/vendor/golang.org/x/net/icmp/ipv4.go new file mode 100644 index 0000000..729ddc9 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/ipv4.go @@ -0,0 +1,56 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import ( + "encoding/binary" + "net" + "runtime" + + "golang.org/x/net/ipv4" +) + +// ParseIPv4Header parses b as an IPv4 header of ICMP error message +// invoking packet, which is contained in ICMP error message. +func ParseIPv4Header(b []byte) (*ipv4.Header, error) { + if len(b) < ipv4.HeaderLen { + return nil, errHeaderTooShort + } + hdrlen := int(b[0]&0x0f) << 2 + if hdrlen > len(b) { + return nil, errBufferTooShort + } + h := &ipv4.Header{ + Version: int(b[0] >> 4), + Len: hdrlen, + TOS: int(b[1]), + ID: int(binary.BigEndian.Uint16(b[4:6])), + FragOff: int(binary.BigEndian.Uint16(b[6:8])), + TTL: int(b[8]), + Protocol: int(b[9]), + Checksum: int(binary.BigEndian.Uint16(b[10:12])), + Src: net.IPv4(b[12], b[13], b[14], b[15]), + Dst: net.IPv4(b[16], b[17], b[18], b[19]), + } + switch runtime.GOOS { + case "darwin": + h.TotalLen = int(nativeEndian.Uint16(b[2:4])) + case "freebsd": + if freebsdVersion >= 1000000 { + h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) + } else { + h.TotalLen = int(nativeEndian.Uint16(b[2:4])) + } + default: + h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) + } + h.Flags = ipv4.HeaderFlags(h.FragOff&0xe000) >> 13 + h.FragOff = h.FragOff & 0x1fff + if hdrlen-ipv4.HeaderLen > 0 { + h.Options = make([]byte, hdrlen-ipv4.HeaderLen) + copy(h.Options, b[ipv4.HeaderLen:]) + } + return h, nil +} diff --git a/vendor/golang.org/x/net/icmp/ipv4_test.go b/vendor/golang.org/x/net/icmp/ipv4_test.go new file mode 100644 index 0000000..47cc00d --- /dev/null +++ b/vendor/golang.org/x/net/icmp/ipv4_test.go @@ -0,0 +1,82 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import ( + "encoding/binary" + "net" + "reflect" + "runtime" + "testing" + + "golang.org/x/net/ipv4" +) + +type ipv4HeaderTest struct { + wireHeaderFromKernel [ipv4.HeaderLen]byte + wireHeaderFromTradBSDKernel [ipv4.HeaderLen]byte + Header *ipv4.Header +} + +var ipv4HeaderLittleEndianTest = ipv4HeaderTest{ + // TODO(mikio): Add platform dependent wire header formats when + // we support new platforms. + wireHeaderFromKernel: [ipv4.HeaderLen]byte{ + 0x45, 0x01, 0xbe, 0xef, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderFromTradBSDKernel: [ipv4.HeaderLen]byte{ + 0x45, 0x01, 0xef, 0xbe, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + Header: &ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TOS: 1, + TotalLen: 0xbeef, + ID: 0xcafe, + Flags: ipv4.DontFragment, + FragOff: 1500, + TTL: 255, + Protocol: 1, + Checksum: 0xdead, + Src: net.IPv4(172, 16, 254, 254), + Dst: net.IPv4(192, 168, 0, 1), + }, +} + +func TestParseIPv4Header(t *testing.T) { + tt := &ipv4HeaderLittleEndianTest + if nativeEndian != binary.LittleEndian { + t.Skip("no test for non-little endian machine yet") + } + + var wh []byte + switch runtime.GOOS { + case "darwin": + wh = tt.wireHeaderFromTradBSDKernel[:] + case "freebsd": + if freebsdVersion >= 1000000 { + wh = tt.wireHeaderFromKernel[:] + } else { + wh = tt.wireHeaderFromTradBSDKernel[:] + } + default: + wh = tt.wireHeaderFromKernel[:] + } + h, err := ParseIPv4Header(wh) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(h, tt.Header) { + t.Fatalf("got %#v; want %#v", h, tt.Header) + } +} diff --git a/vendor/golang.org/x/net/icmp/ipv6.go b/vendor/golang.org/x/net/icmp/ipv6.go new file mode 100644 index 0000000..2e8cfeb --- /dev/null +++ b/vendor/golang.org/x/net/icmp/ipv6.go @@ -0,0 +1,23 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import ( + "net" + + "golang.org/x/net/internal/iana" +) + +const ipv6PseudoHeaderLen = 2*net.IPv6len + 8 + +// IPv6PseudoHeader returns an IPv6 pseudo header for checksum +// calculation. +func IPv6PseudoHeader(src, dst net.IP) []byte { + b := make([]byte, ipv6PseudoHeaderLen) + copy(b, src.To16()) + copy(b[net.IPv6len:], dst.To16()) + b[len(b)-1] = byte(iana.ProtocolIPv6ICMP) + return b +} diff --git a/vendor/golang.org/x/net/icmp/listen_posix.go b/vendor/golang.org/x/net/icmp/listen_posix.go new file mode 100644 index 0000000..7fac4f9 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/listen_posix.go @@ -0,0 +1,100 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package icmp + +import ( + "net" + "os" + "runtime" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +const sysIP_STRIPHDR = 0x17 // for now only darwin supports this option + +// ListenPacket listens for incoming ICMP packets addressed to +// address. See net.Dial for the syntax of address. +// +// For non-privileged datagram-oriented ICMP endpoints, network must +// be "udp4" or "udp6". The endpoint allows to read, write a few +// limited ICMP messages such as echo request and echo reply. +// Currently only Darwin and Linux support this. +// +// Examples: +// ListenPacket("udp4", "192.168.0.1") +// ListenPacket("udp4", "0.0.0.0") +// ListenPacket("udp6", "fe80::1%en0") +// ListenPacket("udp6", "::") +// +// For privileged raw ICMP endpoints, network must be "ip4" or "ip6" +// followed by a colon and an ICMP protocol number or name. +// +// Examples: +// ListenPacket("ip4:icmp", "192.168.0.1") +// ListenPacket("ip4:1", "0.0.0.0") +// ListenPacket("ip6:ipv6-icmp", "fe80::1%en0") +// ListenPacket("ip6:58", "::") +func ListenPacket(network, address string) (*PacketConn, error) { + var family, proto int + switch network { + case "udp4": + family, proto = syscall.AF_INET, iana.ProtocolICMP + case "udp6": + family, proto = syscall.AF_INET6, iana.ProtocolIPv6ICMP + default: + i := last(network, ':') + switch network[:i] { + case "ip4": + proto = iana.ProtocolICMP + case "ip6": + proto = iana.ProtocolIPv6ICMP + } + } + var cerr error + var c net.PacketConn + switch family { + case syscall.AF_INET, syscall.AF_INET6: + s, err := syscall.Socket(family, syscall.SOCK_DGRAM, proto) + if err != nil { + return nil, os.NewSyscallError("socket", err) + } + if runtime.GOOS == "darwin" && family == syscall.AF_INET { + if err := syscall.SetsockoptInt(s, iana.ProtocolIP, sysIP_STRIPHDR, 1); err != nil { + syscall.Close(s) + return nil, os.NewSyscallError("setsockopt", err) + } + } + sa, err := sockaddr(family, address) + if err != nil { + syscall.Close(s) + return nil, err + } + if err := syscall.Bind(s, sa); err != nil { + syscall.Close(s) + return nil, os.NewSyscallError("bind", err) + } + f := os.NewFile(uintptr(s), "datagram-oriented icmp") + c, cerr = net.FilePacketConn(f) + f.Close() + default: + c, cerr = net.ListenPacket(network, address) + } + if cerr != nil { + return nil, cerr + } + switch proto { + case iana.ProtocolICMP: + return &PacketConn{c: c, p4: ipv4.NewPacketConn(c)}, nil + case iana.ProtocolIPv6ICMP: + return &PacketConn{c: c, p6: ipv6.NewPacketConn(c)}, nil + default: + return &PacketConn{c: c}, nil + } +} diff --git a/vendor/golang.org/x/net/icmp/listen_stub.go b/vendor/golang.org/x/net/icmp/listen_stub.go new file mode 100644 index 0000000..668728d --- /dev/null +++ b/vendor/golang.org/x/net/icmp/listen_stub.go @@ -0,0 +1,33 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package icmp + +// ListenPacket listens for incoming ICMP packets addressed to +// address. See net.Dial for the syntax of address. +// +// For non-privileged datagram-oriented ICMP endpoints, network must +// be "udp4" or "udp6". The endpoint allows to read, write a few +// limited ICMP messages such as echo request and echo reply. +// Currently only Darwin and Linux support this. +// +// Examples: +// ListenPacket("udp4", "192.168.0.1") +// ListenPacket("udp4", "0.0.0.0") +// ListenPacket("udp6", "fe80::1%en0") +// ListenPacket("udp6", "::") +// +// For privileged raw ICMP endpoints, network must be "ip4" or "ip6" +// followed by a colon and an ICMP protocol number or name. +// +// Examples: +// ListenPacket("ip4:icmp", "192.168.0.1") +// ListenPacket("ip4:1", "0.0.0.0") +// ListenPacket("ip6:ipv6-icmp", "fe80::1%en0") +// ListenPacket("ip6:58", "::") +func ListenPacket(network, address string) (*PacketConn, error) { + return nil, errOpNoSupport +} diff --git a/vendor/golang.org/x/net/icmp/message.go b/vendor/golang.org/x/net/icmp/message.go new file mode 100644 index 0000000..81140b0 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/message.go @@ -0,0 +1,152 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package icmp provides basic functions for the manipulation of +// messages used in the Internet Control Message Protocols, +// ICMPv4 and ICMPv6. +// +// ICMPv4 and ICMPv6 are defined in RFC 792 and RFC 4443. +// Multi-part message support for ICMP is defined in RFC 4884. +// ICMP extensions for MPLS are defined in RFC 4950. +// ICMP extensions for interface and next-hop identification are +// defined in RFC 5837. +package icmp // import "golang.org/x/net/icmp" + +import ( + "encoding/binary" + "errors" + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +// BUG(mikio): This package is not implemented on NaCl and Plan 9. + +var ( + errMessageTooShort = errors.New("message too short") + errHeaderTooShort = errors.New("header too short") + errBufferTooShort = errors.New("buffer too short") + errOpNoSupport = errors.New("operation not supported") + errNoExtension = errors.New("no extension") + errInvalidExtension = errors.New("invalid extension") +) + +func checksum(b []byte) uint16 { + csumcv := len(b) - 1 // checksum coverage + s := uint32(0) + for i := 0; i < csumcv; i += 2 { + s += uint32(b[i+1])<<8 | uint32(b[i]) + } + if csumcv&1 == 0 { + s += uint32(b[csumcv]) + } + s = s>>16 + s&0xffff + s = s + s>>16 + return ^uint16(s) +} + +// A Type represents an ICMP message type. +type Type interface { + Protocol() int +} + +// A Message represents an ICMP message. +type Message struct { + Type Type // type, either ipv4.ICMPType or ipv6.ICMPType + Code int // code + Checksum int // checksum + Body MessageBody // body +} + +// Marshal returns the binary encoding of the ICMP message m. +// +// For an ICMPv4 message, the returned message always contains the +// calculated checksum field. +// +// For an ICMPv6 message, the returned message contains the calculated +// checksum field when psh is not nil, otherwise the kernel will +// compute the checksum field during the message transmission. +// When psh is not nil, it must be the pseudo header for IPv6. +func (m *Message) Marshal(psh []byte) ([]byte, error) { + var mtype int + switch typ := m.Type.(type) { + case ipv4.ICMPType: + mtype = int(typ) + case ipv6.ICMPType: + mtype = int(typ) + default: + return nil, syscall.EINVAL + } + b := []byte{byte(mtype), byte(m.Code), 0, 0} + if m.Type.Protocol() == iana.ProtocolIPv6ICMP && psh != nil { + b = append(psh, b...) + } + if m.Body != nil && m.Body.Len(m.Type.Protocol()) != 0 { + mb, err := m.Body.Marshal(m.Type.Protocol()) + if err != nil { + return nil, err + } + b = append(b, mb...) + } + if m.Type.Protocol() == iana.ProtocolIPv6ICMP { + if psh == nil { // cannot calculate checksum here + return b, nil + } + off, l := 2*net.IPv6len, len(b)-len(psh) + binary.BigEndian.PutUint32(b[off:off+4], uint32(l)) + } + s := checksum(b) + // Place checksum back in header; using ^= avoids the + // assumption the checksum bytes are zero. + b[len(psh)+2] ^= byte(s) + b[len(psh)+3] ^= byte(s >> 8) + return b[len(psh):], nil +} + +var parseFns = map[Type]func(int, []byte) (MessageBody, error){ + ipv4.ICMPTypeDestinationUnreachable: parseDstUnreach, + ipv4.ICMPTypeTimeExceeded: parseTimeExceeded, + ipv4.ICMPTypeParameterProblem: parseParamProb, + + ipv4.ICMPTypeEcho: parseEcho, + ipv4.ICMPTypeEchoReply: parseEcho, + + ipv6.ICMPTypeDestinationUnreachable: parseDstUnreach, + ipv6.ICMPTypePacketTooBig: parsePacketTooBig, + ipv6.ICMPTypeTimeExceeded: parseTimeExceeded, + ipv6.ICMPTypeParameterProblem: parseParamProb, + + ipv6.ICMPTypeEchoRequest: parseEcho, + ipv6.ICMPTypeEchoReply: parseEcho, +} + +// ParseMessage parses b as an ICMP message. +// Proto must be either the ICMPv4 or ICMPv6 protocol number. +func ParseMessage(proto int, b []byte) (*Message, error) { + if len(b) < 4 { + return nil, errMessageTooShort + } + var err error + m := &Message{Code: int(b[1]), Checksum: int(binary.BigEndian.Uint16(b[2:4]))} + switch proto { + case iana.ProtocolICMP: + m.Type = ipv4.ICMPType(b[0]) + case iana.ProtocolIPv6ICMP: + m.Type = ipv6.ICMPType(b[0]) + default: + return nil, syscall.EINVAL + } + if fn, ok := parseFns[m.Type]; !ok { + m.Body, err = parseDefaultMessageBody(proto, b[4:]) + } else { + m.Body, err = fn(proto, b[4:]) + } + if err != nil { + return nil, err + } + return m, nil +} diff --git a/vendor/golang.org/x/net/icmp/message_test.go b/vendor/golang.org/x/net/icmp/message_test.go new file mode 100644 index 0000000..5d2605f --- /dev/null +++ b/vendor/golang.org/x/net/icmp/message_test.go @@ -0,0 +1,134 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp_test + +import ( + "net" + "reflect" + "testing" + + "golang.org/x/net/icmp" + "golang.org/x/net/internal/iana" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +var marshalAndParseMessageForIPv4Tests = []icmp.Message{ + { + Type: ipv4.ICMPTypeDestinationUnreachable, Code: 15, + Body: &icmp.DstUnreach{ + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv4.ICMPTypeTimeExceeded, Code: 1, + Body: &icmp.TimeExceeded{ + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv4.ICMPTypeParameterProblem, Code: 2, + Body: &icmp.ParamProb{ + Pointer: 8, + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: 1, Seq: 2, + Data: []byte("HELLO-R-U-THERE"), + }, + }, + { + Type: ipv4.ICMPTypePhoturis, + Body: &icmp.DefaultMessageBody{ + Data: []byte{0x80, 0x40, 0x20, 0x10}, + }, + }, +} + +func TestMarshalAndParseMessageForIPv4(t *testing.T) { + for i, tt := range marshalAndParseMessageForIPv4Tests { + b, err := tt.Marshal(nil) + if err != nil { + t.Fatal(err) + } + m, err := icmp.ParseMessage(iana.ProtocolICMP, b) + if err != nil { + t.Fatal(err) + } + if m.Type != tt.Type || m.Code != tt.Code { + t.Errorf("#%v: got %v; want %v", i, m, &tt) + } + if !reflect.DeepEqual(m.Body, tt.Body) { + t.Errorf("#%v: got %v; want %v", i, m.Body, tt.Body) + } + } +} + +var marshalAndParseMessageForIPv6Tests = []icmp.Message{ + { + Type: ipv6.ICMPTypeDestinationUnreachable, Code: 6, + Body: &icmp.DstUnreach{ + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv6.ICMPTypePacketTooBig, Code: 0, + Body: &icmp.PacketTooBig{ + MTU: 1<<16 - 1, + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv6.ICMPTypeTimeExceeded, Code: 1, + Body: &icmp.TimeExceeded{ + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv6.ICMPTypeParameterProblem, Code: 2, + Body: &icmp.ParamProb{ + Pointer: 8, + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv6.ICMPTypeEchoRequest, Code: 0, + Body: &icmp.Echo{ + ID: 1, Seq: 2, + Data: []byte("HELLO-R-U-THERE"), + }, + }, + { + Type: ipv6.ICMPTypeDuplicateAddressConfirmation, + Body: &icmp.DefaultMessageBody{ + Data: []byte{0x80, 0x40, 0x20, 0x10}, + }, + }, +} + +func TestMarshalAndParseMessageForIPv6(t *testing.T) { + pshicmp := icmp.IPv6PseudoHeader(net.ParseIP("fe80::1"), net.ParseIP("ff02::1")) + for i, tt := range marshalAndParseMessageForIPv6Tests { + for _, psh := range [][]byte{pshicmp, nil} { + b, err := tt.Marshal(psh) + if err != nil { + t.Fatal(err) + } + m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, b) + if err != nil { + t.Fatal(err) + } + if m.Type != tt.Type || m.Code != tt.Code { + t.Errorf("#%v: got %v; want %v", i, m, &tt) + } + if !reflect.DeepEqual(m.Body, tt.Body) { + t.Errorf("#%v: got %v; want %v", i, m.Body, tt.Body) + } + } + } +} diff --git a/vendor/golang.org/x/net/icmp/messagebody.go b/vendor/golang.org/x/net/icmp/messagebody.go new file mode 100644 index 0000000..2463730 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/messagebody.go @@ -0,0 +1,41 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +// A MessageBody represents an ICMP message body. +type MessageBody interface { + // Len returns the length of ICMP message body. + // Proto must be either the ICMPv4 or ICMPv6 protocol number. + Len(proto int) int + + // Marshal returns the binary encoding of ICMP message body. + // Proto must be either the ICMPv4 or ICMPv6 protocol number. + Marshal(proto int) ([]byte, error) +} + +// A DefaultMessageBody represents the default message body. +type DefaultMessageBody struct { + Data []byte // data +} + +// Len implements the Len method of MessageBody interface. +func (p *DefaultMessageBody) Len(proto int) int { + if p == nil { + return 0 + } + return len(p.Data) +} + +// Marshal implements the Marshal method of MessageBody interface. +func (p *DefaultMessageBody) Marshal(proto int) ([]byte, error) { + return p.Data, nil +} + +// parseDefaultMessageBody parses b as an ICMP message body. +func parseDefaultMessageBody(proto int, b []byte) (MessageBody, error) { + p := &DefaultMessageBody{Data: make([]byte, len(b))} + copy(p.Data, b) + return p, nil +} diff --git a/vendor/golang.org/x/net/icmp/mpls.go b/vendor/golang.org/x/net/icmp/mpls.go new file mode 100644 index 0000000..c314917 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/mpls.go @@ -0,0 +1,77 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import "encoding/binary" + +// A MPLSLabel represents a MPLS label stack entry. +type MPLSLabel struct { + Label int // label value + TC int // traffic class; formerly experimental use + S bool // bottom of stack + TTL int // time to live +} + +const ( + classMPLSLabelStack = 1 + typeIncomingMPLSLabelStack = 1 +) + +// A MPLSLabelStack represents a MPLS label stack. +type MPLSLabelStack struct { + Class int // extension object class number + Type int // extension object sub-type + Labels []MPLSLabel +} + +// Len implements the Len method of Extension interface. +func (ls *MPLSLabelStack) Len(proto int) int { + return 4 + (4 * len(ls.Labels)) +} + +// Marshal implements the Marshal method of Extension interface. +func (ls *MPLSLabelStack) Marshal(proto int) ([]byte, error) { + b := make([]byte, ls.Len(proto)) + if err := ls.marshal(proto, b); err != nil { + return nil, err + } + return b, nil +} + +func (ls *MPLSLabelStack) marshal(proto int, b []byte) error { + l := ls.Len(proto) + binary.BigEndian.PutUint16(b[:2], uint16(l)) + b[2], b[3] = classMPLSLabelStack, typeIncomingMPLSLabelStack + off := 4 + for _, ll := range ls.Labels { + b[off], b[off+1], b[off+2] = byte(ll.Label>>12), byte(ll.Label>>4&0xff), byte(ll.Label<<4&0xf0) + b[off+2] |= byte(ll.TC << 1 & 0x0e) + if ll.S { + b[off+2] |= 0x1 + } + b[off+3] = byte(ll.TTL) + off += 4 + } + return nil +} + +func parseMPLSLabelStack(b []byte) (Extension, error) { + ls := &MPLSLabelStack{ + Class: int(b[2]), + Type: int(b[3]), + } + for b = b[4:]; len(b) >= 4; b = b[4:] { + ll := MPLSLabel{ + Label: int(b[0])<<12 | int(b[1])<<4 | int(b[2])>>4, + TC: int(b[2]&0x0e) >> 1, + TTL: int(b[3]), + } + if b[2]&0x1 != 0 { + ll.S = true + } + ls.Labels = append(ls.Labels, ll) + } + return ls, nil +} diff --git a/vendor/golang.org/x/net/icmp/multipart.go b/vendor/golang.org/x/net/icmp/multipart.go new file mode 100644 index 0000000..f271356 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/multipart.go @@ -0,0 +1,109 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import "golang.org/x/net/internal/iana" + +// multipartMessageBodyDataLen takes b as an original datagram and +// exts as extensions, and returns a required length for message body +// and a required length for a padded original datagram in wire +// format. +func multipartMessageBodyDataLen(proto int, b []byte, exts []Extension) (bodyLen, dataLen int) { + for _, ext := range exts { + bodyLen += ext.Len(proto) + } + if bodyLen > 0 { + dataLen = multipartMessageOrigDatagramLen(proto, b) + bodyLen += 4 // length of extension header + } else { + dataLen = len(b) + } + bodyLen += dataLen + return bodyLen, dataLen +} + +// multipartMessageOrigDatagramLen takes b as an original datagram, +// and returns a required length for a padded orignal datagram in wire +// format. +func multipartMessageOrigDatagramLen(proto int, b []byte) int { + roundup := func(b []byte, align int) int { + // According to RFC 4884, the padded original datagram + // field must contain at least 128 octets. + if len(b) < 128 { + return 128 + } + r := len(b) + return (r + align - 1) & ^(align - 1) + } + switch proto { + case iana.ProtocolICMP: + return roundup(b, 4) + case iana.ProtocolIPv6ICMP: + return roundup(b, 8) + default: + return len(b) + } +} + +// marshalMultipartMessageBody takes data as an original datagram and +// exts as extesnsions, and returns a binary encoding of message body. +// It can be used for non-multipart message bodies when exts is nil. +func marshalMultipartMessageBody(proto int, data []byte, exts []Extension) ([]byte, error) { + bodyLen, dataLen := multipartMessageBodyDataLen(proto, data, exts) + b := make([]byte, 4+bodyLen) + copy(b[4:], data) + off := dataLen + 4 + if len(exts) > 0 { + b[dataLen+4] = byte(extensionVersion << 4) + off += 4 // length of object header + for _, ext := range exts { + switch ext := ext.(type) { + case *MPLSLabelStack: + if err := ext.marshal(proto, b[off:]); err != nil { + return nil, err + } + off += ext.Len(proto) + case *InterfaceInfo: + attrs, l := ext.attrsAndLen(proto) + if err := ext.marshal(proto, b[off:], attrs, l); err != nil { + return nil, err + } + off += ext.Len(proto) + } + } + s := checksum(b[dataLen+4:]) + b[dataLen+4+2] ^= byte(s) + b[dataLen+4+3] ^= byte(s >> 8) + switch proto { + case iana.ProtocolICMP: + b[1] = byte(dataLen / 4) + case iana.ProtocolIPv6ICMP: + b[0] = byte(dataLen / 8) + } + } + return b, nil +} + +// parseMultipartMessageBody parses b as either a non-multipart +// message body or a multipart message body. +func parseMultipartMessageBody(proto int, b []byte) ([]byte, []Extension, error) { + var l int + switch proto { + case iana.ProtocolICMP: + l = 4 * int(b[1]) + case iana.ProtocolIPv6ICMP: + l = 8 * int(b[0]) + } + if len(b) == 4 { + return nil, nil, nil + } + exts, l, err := parseExtensions(b[4:], l) + if err != nil { + l = len(b) - 4 + } + data := make([]byte, l) + copy(data, b[4:]) + return data, exts, nil +} diff --git a/vendor/golang.org/x/net/icmp/multipart_test.go b/vendor/golang.org/x/net/icmp/multipart_test.go new file mode 100644 index 0000000..966ccb8 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/multipart_test.go @@ -0,0 +1,442 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp_test + +import ( + "fmt" + "net" + "reflect" + "testing" + + "golang.org/x/net/icmp" + "golang.org/x/net/internal/iana" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +var marshalAndParseMultipartMessageForIPv4Tests = []icmp.Message{ + { + Type: ipv4.ICMPTypeDestinationUnreachable, Code: 15, + Body: &icmp.DstUnreach{ + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.IPv4(192, 168, 0, 1).To4(), + }, + }, + }, + }, + }, + { + Type: ipv4.ICMPTypeTimeExceeded, Code: 1, + Body: &icmp.TimeExceeded{ + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.IPv4(192, 168, 0, 1).To4(), + }, + }, + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + }, + }, + }, + { + Type: ipv4.ICMPTypeParameterProblem, Code: 2, + Body: &icmp.ParamProb{ + Pointer: 8, + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.IPv4(192, 168, 0, 1).To4(), + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x2f, + Interface: &net.Interface{ + Index: 16, + Name: "en102", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.IPv4(192, 168, 0, 2).To4(), + }, + }, + }, + }, + }, +} + +func TestMarshalAndParseMultipartMessageForIPv4(t *testing.T) { + for i, tt := range marshalAndParseMultipartMessageForIPv4Tests { + b, err := tt.Marshal(nil) + if err != nil { + t.Fatal(err) + } + if b[5] != 32 { + t.Errorf("#%v: got %v; want 32", i, b[5]) + } + m, err := icmp.ParseMessage(iana.ProtocolICMP, b) + if err != nil { + t.Fatal(err) + } + if m.Type != tt.Type || m.Code != tt.Code { + t.Errorf("#%v: got %v; want %v", i, m, &tt) + } + switch m.Type { + case ipv4.ICMPTypeDestinationUnreachable: + got, want := m.Body.(*icmp.DstUnreach), tt.Body.(*icmp.DstUnreach) + if !reflect.DeepEqual(got.Extensions, want.Extensions) { + t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) + } + if len(got.Data) != 128 { + t.Errorf("#%v: got %v; want 128", i, len(got.Data)) + } + case ipv4.ICMPTypeTimeExceeded: + got, want := m.Body.(*icmp.TimeExceeded), tt.Body.(*icmp.TimeExceeded) + if !reflect.DeepEqual(got.Extensions, want.Extensions) { + t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) + } + if len(got.Data) != 128 { + t.Errorf("#%v: got %v; want 128", i, len(got.Data)) + } + case ipv4.ICMPTypeParameterProblem: + got, want := m.Body.(*icmp.ParamProb), tt.Body.(*icmp.ParamProb) + if !reflect.DeepEqual(got.Extensions, want.Extensions) { + t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) + } + if len(got.Data) != 128 { + t.Errorf("#%v: got %v; want 128", i, len(got.Data)) + } + } + } +} + +var marshalAndParseMultipartMessageForIPv6Tests = []icmp.Message{ + { + Type: ipv6.ICMPTypeDestinationUnreachable, Code: 6, + Body: &icmp.DstUnreach{ + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.ParseIP("fe80::1"), + Zone: "en101", + }, + }, + }, + }, + }, + { + Type: ipv6.ICMPTypeTimeExceeded, Code: 1, + Body: &icmp.TimeExceeded{ + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.ParseIP("fe80::1"), + Zone: "en101", + }, + }, + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x2f, + Interface: &net.Interface{ + Index: 16, + Name: "en102", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.ParseIP("fe80::1"), + Zone: "en102", + }, + }, + }, + }, + }, +} + +func TestMarshalAndParseMultipartMessageForIPv6(t *testing.T) { + pshicmp := icmp.IPv6PseudoHeader(net.ParseIP("fe80::1"), net.ParseIP("ff02::1")) + for i, tt := range marshalAndParseMultipartMessageForIPv6Tests { + for _, psh := range [][]byte{pshicmp, nil} { + b, err := tt.Marshal(psh) + if err != nil { + t.Fatal(err) + } + if b[4] != 16 { + t.Errorf("#%v: got %v; want 16", i, b[4]) + } + m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, b) + if err != nil { + t.Fatal(err) + } + if m.Type != tt.Type || m.Code != tt.Code { + t.Errorf("#%v: got %v; want %v", i, m, &tt) + } + switch m.Type { + case ipv6.ICMPTypeDestinationUnreachable: + got, want := m.Body.(*icmp.DstUnreach), tt.Body.(*icmp.DstUnreach) + if !reflect.DeepEqual(got.Extensions, want.Extensions) { + t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) + } + if len(got.Data) != 128 { + t.Errorf("#%v: got %v; want 128", i, len(got.Data)) + } + case ipv6.ICMPTypeTimeExceeded: + got, want := m.Body.(*icmp.TimeExceeded), tt.Body.(*icmp.TimeExceeded) + if !reflect.DeepEqual(got.Extensions, want.Extensions) { + t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) + } + if len(got.Data) != 128 { + t.Errorf("#%v: got %v; want 128", i, len(got.Data)) + } + } + } + } +} + +func dumpExtensions(i int, gotExts, wantExts []icmp.Extension) string { + var s string + for j, got := range gotExts { + switch got := got.(type) { + case *icmp.MPLSLabelStack: + want := wantExts[j].(*icmp.MPLSLabelStack) + if !reflect.DeepEqual(got, want) { + s += fmt.Sprintf("#%v/%v: got %#v; want %#v\n", i, j, got, want) + } + case *icmp.InterfaceInfo: + want := wantExts[j].(*icmp.InterfaceInfo) + if !reflect.DeepEqual(got, want) { + s += fmt.Sprintf("#%v/%v: got %#v, %#v, %#v; want %#v, %#v, %#v\n", i, j, got, got.Interface, got.Addr, want, want.Interface, want.Addr) + } + } + } + return s[:len(s)-1] +} + +var multipartMessageBodyLenTests = []struct { + proto int + in icmp.MessageBody + out int +}{ + { + iana.ProtocolICMP, + &icmp.DstUnreach{ + Data: make([]byte, ipv4.HeaderLen), + }, + 4 + ipv4.HeaderLen, // unused and original datagram + }, + { + iana.ProtocolICMP, + &icmp.TimeExceeded{ + Data: make([]byte, ipv4.HeaderLen), + }, + 4 + ipv4.HeaderLen, // unused and original datagram + }, + { + iana.ProtocolICMP, + &icmp.ParamProb{ + Data: make([]byte, ipv4.HeaderLen), + }, + 4 + ipv4.HeaderLen, // [pointer, unused] and original datagram + }, + + { + iana.ProtocolICMP, + &icmp.ParamProb{ + Data: make([]byte, ipv4.HeaderLen), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, + }, + 4 + 4 + 4 + 0 + 128, // [pointer, length, unused], extension header, object header, object payload, original datagram + }, + { + iana.ProtocolICMP, + &icmp.ParamProb{ + Data: make([]byte, 128), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, + }, + 4 + 4 + 4 + 0 + 128, // [pointer, length, unused], extension header, object header, object payload and original datagram + }, + { + iana.ProtocolICMP, + &icmp.ParamProb{ + Data: make([]byte, 129), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, + }, + 4 + 4 + 4 + 0 + 132, // [pointer, length, unused], extension header, object header, object payload and original datagram + }, + + { + iana.ProtocolIPv6ICMP, + &icmp.DstUnreach{ + Data: make([]byte, ipv6.HeaderLen), + }, + 4 + ipv6.HeaderLen, // unused and original datagram + }, + { + iana.ProtocolIPv6ICMP, + &icmp.PacketTooBig{ + Data: make([]byte, ipv6.HeaderLen), + }, + 4 + ipv6.HeaderLen, // mtu and original datagram + }, + { + iana.ProtocolIPv6ICMP, + &icmp.TimeExceeded{ + Data: make([]byte, ipv6.HeaderLen), + }, + 4 + ipv6.HeaderLen, // unused and original datagram + }, + { + iana.ProtocolIPv6ICMP, + &icmp.ParamProb{ + Data: make([]byte, ipv6.HeaderLen), + }, + 4 + ipv6.HeaderLen, // pointer and original datagram + }, + + { + iana.ProtocolIPv6ICMP, + &icmp.DstUnreach{ + Data: make([]byte, 127), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, + }, + 4 + 4 + 4 + 0 + 128, // [length, unused], extension header, object header, object payload and original datagram + }, + { + iana.ProtocolIPv6ICMP, + &icmp.DstUnreach{ + Data: make([]byte, 128), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, + }, + 4 + 4 + 4 + 0 + 128, // [length, unused], extension header, object header, object payload and original datagram + }, + { + iana.ProtocolIPv6ICMP, + &icmp.DstUnreach{ + Data: make([]byte, 129), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, + }, + 4 + 4 + 4 + 0 + 136, // [length, unused], extension header, object header, object payload and original datagram + }, +} + +func TestMultipartMessageBodyLen(t *testing.T) { + for i, tt := range multipartMessageBodyLenTests { + if out := tt.in.Len(tt.proto); out != tt.out { + t.Errorf("#%d: got %d; want %d", i, out, tt.out) + } + } +} diff --git a/vendor/golang.org/x/net/icmp/packettoobig.go b/vendor/golang.org/x/net/icmp/packettoobig.go new file mode 100644 index 0000000..a1c9df7 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/packettoobig.go @@ -0,0 +1,43 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import "encoding/binary" + +// A PacketTooBig represents an ICMP packet too big message body. +type PacketTooBig struct { + MTU int // maximum transmission unit of the nexthop link + Data []byte // data, known as original datagram field +} + +// Len implements the Len method of MessageBody interface. +func (p *PacketTooBig) Len(proto int) int { + if p == nil { + return 0 + } + return 4 + len(p.Data) +} + +// Marshal implements the Marshal method of MessageBody interface. +func (p *PacketTooBig) Marshal(proto int) ([]byte, error) { + b := make([]byte, 4+len(p.Data)) + binary.BigEndian.PutUint32(b[:4], uint32(p.MTU)) + copy(b[4:], p.Data) + return b, nil +} + +// parsePacketTooBig parses b as an ICMP packet too big message body. +func parsePacketTooBig(proto int, b []byte) (MessageBody, error) { + bodyLen := len(b) + if bodyLen < 4 { + return nil, errMessageTooShort + } + p := &PacketTooBig{MTU: int(binary.BigEndian.Uint32(b[:4]))} + if bodyLen > 4 { + p.Data = make([]byte, bodyLen-4) + copy(p.Data, b[4:]) + } + return p, nil +} diff --git a/vendor/golang.org/x/net/icmp/paramprob.go b/vendor/golang.org/x/net/icmp/paramprob.go new file mode 100644 index 0000000..0a2548d --- /dev/null +++ b/vendor/golang.org/x/net/icmp/paramprob.go @@ -0,0 +1,63 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import ( + "encoding/binary" + "golang.org/x/net/internal/iana" +) + +// A ParamProb represents an ICMP parameter problem message body. +type ParamProb struct { + Pointer uintptr // offset within the data where the error was detected + Data []byte // data, known as original datagram field + Extensions []Extension // extensions +} + +// Len implements the Len method of MessageBody interface. +func (p *ParamProb) Len(proto int) int { + if p == nil { + return 0 + } + l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions) + return 4 + l +} + +// Marshal implements the Marshal method of MessageBody interface. +func (p *ParamProb) Marshal(proto int) ([]byte, error) { + if proto == iana.ProtocolIPv6ICMP { + b := make([]byte, p.Len(proto)) + binary.BigEndian.PutUint32(b[:4], uint32(p.Pointer)) + copy(b[4:], p.Data) + return b, nil + } + b, err := marshalMultipartMessageBody(proto, p.Data, p.Extensions) + if err != nil { + return nil, err + } + b[0] = byte(p.Pointer) + return b, nil +} + +// parseParamProb parses b as an ICMP parameter problem message body. +func parseParamProb(proto int, b []byte) (MessageBody, error) { + if len(b) < 4 { + return nil, errMessageTooShort + } + p := &ParamProb{} + if proto == iana.ProtocolIPv6ICMP { + p.Pointer = uintptr(binary.BigEndian.Uint32(b[:4])) + p.Data = make([]byte, len(b)-4) + copy(p.Data, b[4:]) + return p, nil + } + p.Pointer = uintptr(b[0]) + var err error + p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b) + if err != nil { + return nil, err + } + return p, nil +} diff --git a/vendor/golang.org/x/net/icmp/ping_test.go b/vendor/golang.org/x/net/icmp/ping_test.go new file mode 100644 index 0000000..3171dad --- /dev/null +++ b/vendor/golang.org/x/net/icmp/ping_test.go @@ -0,0 +1,200 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp_test + +import ( + "errors" + "fmt" + "net" + "os" + "runtime" + "sync" + "testing" + "time" + + "golang.org/x/net/icmp" + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +func googleAddr(c *icmp.PacketConn, protocol int) (net.Addr, error) { + const host = "www.google.com" + ips, err := net.LookupIP(host) + if err != nil { + return nil, err + } + netaddr := func(ip net.IP) (net.Addr, error) { + switch c.LocalAddr().(type) { + case *net.UDPAddr: + return &net.UDPAddr{IP: ip}, nil + case *net.IPAddr: + return &net.IPAddr{IP: ip}, nil + default: + return nil, errors.New("neither UDPAddr nor IPAddr") + } + } + for _, ip := range ips { + switch protocol { + case iana.ProtocolICMP: + if ip.To4() != nil { + return netaddr(ip) + } + case iana.ProtocolIPv6ICMP: + if ip.To16() != nil && ip.To4() == nil { + return netaddr(ip) + } + } + } + return nil, errors.New("no A or AAAA record") +} + +type pingTest struct { + network, address string + protocol int + mtype icmp.Type +} + +var nonPrivilegedPingTests = []pingTest{ + {"udp4", "0.0.0.0", iana.ProtocolICMP, ipv4.ICMPTypeEcho}, + + {"udp6", "::", iana.ProtocolIPv6ICMP, ipv6.ICMPTypeEchoRequest}, +} + +func TestNonPrivilegedPing(t *testing.T) { + if testing.Short() { + t.Skip("avoid external network") + } + switch runtime.GOOS { + case "darwin": + case "linux": + t.Log("you may need to adjust the net.ipv4.ping_group_range kernel state") + default: + t.Skipf("not supported on %s", runtime.GOOS) + } + + for i, tt := range nonPrivilegedPingTests { + if err := doPing(tt, i); err != nil { + t.Error(err) + } + } +} + +var privilegedPingTests = []pingTest{ + {"ip4:icmp", "0.0.0.0", iana.ProtocolICMP, ipv4.ICMPTypeEcho}, + + {"ip6:ipv6-icmp", "::", iana.ProtocolIPv6ICMP, ipv6.ICMPTypeEchoRequest}, +} + +func TestPrivilegedPing(t *testing.T) { + if testing.Short() { + t.Skip("avoid external network") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + for i, tt := range privilegedPingTests { + if err := doPing(tt, i); err != nil { + t.Error(err) + } + } +} + +func doPing(tt pingTest, seq int) error { + c, err := icmp.ListenPacket(tt.network, tt.address) + if err != nil { + return err + } + defer c.Close() + + dst, err := googleAddr(c, tt.protocol) + if err != nil { + return err + } + + if tt.network != "udp6" && tt.protocol == iana.ProtocolIPv6ICMP { + var f ipv6.ICMPFilter + f.SetAll(true) + f.Accept(ipv6.ICMPTypeDestinationUnreachable) + f.Accept(ipv6.ICMPTypePacketTooBig) + f.Accept(ipv6.ICMPTypeTimeExceeded) + f.Accept(ipv6.ICMPTypeParameterProblem) + f.Accept(ipv6.ICMPTypeEchoReply) + if err := c.IPv6PacketConn().SetICMPFilter(&f); err != nil { + return err + } + } + + wm := icmp.Message{ + Type: tt.mtype, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, Seq: 1 << uint(seq), + Data: []byte("HELLO-R-U-THERE"), + }, + } + wb, err := wm.Marshal(nil) + if err != nil { + return err + } + if n, err := c.WriteTo(wb, dst); err != nil { + return err + } else if n != len(wb) { + return fmt.Errorf("got %v; want %v", n, len(wb)) + } + + rb := make([]byte, 1500) + if err := c.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil { + return err + } + n, peer, err := c.ReadFrom(rb) + if err != nil { + return err + } + rm, err := icmp.ParseMessage(tt.protocol, rb[:n]) + if err != nil { + return err + } + switch rm.Type { + case ipv4.ICMPTypeEchoReply, ipv6.ICMPTypeEchoReply: + return nil + default: + return fmt.Errorf("got %+v from %v; want echo reply", rm, peer) + } +} + +func TestConcurrentNonPrivilegedListenPacket(t *testing.T) { + if testing.Short() { + t.Skip("avoid external network") + } + switch runtime.GOOS { + case "darwin": + case "linux": + t.Log("you may need to adjust the net.ipv4.ping_group_range kernel state") + default: + t.Skipf("not supported on %s", runtime.GOOS) + } + + network, address := "udp4", "127.0.0.1" + if !nettest.SupportsIPv4() { + network, address = "udp6", "::1" + } + const N = 1000 + var wg sync.WaitGroup + wg.Add(N) + for i := 0; i < N; i++ { + go func() { + defer wg.Done() + c, err := icmp.ListenPacket(network, address) + if err != nil { + t.Error(err) + return + } + c.Close() + }() + } + wg.Wait() +} diff --git a/vendor/golang.org/x/net/icmp/sys_freebsd.go b/vendor/golang.org/x/net/icmp/sys_freebsd.go new file mode 100644 index 0000000..c75f3dd --- /dev/null +++ b/vendor/golang.org/x/net/icmp/sys_freebsd.go @@ -0,0 +1,11 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +import "syscall" + +func init() { + freebsdVersion, _ = syscall.SysctlUint32("kern.osreldate") +} diff --git a/vendor/golang.org/x/net/icmp/timeexceeded.go b/vendor/golang.org/x/net/icmp/timeexceeded.go new file mode 100644 index 0000000..344e158 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/timeexceeded.go @@ -0,0 +1,39 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package icmp + +// A TimeExceeded represents an ICMP time exceeded message body. +type TimeExceeded struct { + Data []byte // data, known as original datagram field + Extensions []Extension // extensions +} + +// Len implements the Len method of MessageBody interface. +func (p *TimeExceeded) Len(proto int) int { + if p == nil { + return 0 + } + l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions) + return 4 + l +} + +// Marshal implements the Marshal method of MessageBody interface. +func (p *TimeExceeded) Marshal(proto int) ([]byte, error) { + return marshalMultipartMessageBody(proto, p.Data, p.Extensions) +} + +// parseTimeExceeded parses b as an ICMP time exceeded message body. +func parseTimeExceeded(proto int, b []byte) (MessageBody, error) { + if len(b) < 4 { + return nil, errMessageTooShort + } + p := &TimeExceeded{} + var err error + p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b) + if err != nil { + return nil, err + } + return p, nil +} diff --git a/vendor/golang.org/x/net/idna/example_test.go b/vendor/golang.org/x/net/idna/example_test.go new file mode 100644 index 0000000..941e707 --- /dev/null +++ b/vendor/golang.org/x/net/idna/example_test.go @@ -0,0 +1,65 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna_test + +import ( + "fmt" + + "golang.org/x/net/idna" +) + +func ExampleProfile() { + // Raw Punycode has no restrictions and does no mappings. + fmt.Println(idna.ToASCII("")) + fmt.Println(idna.ToASCII("*.faß.com")) + fmt.Println(idna.Punycode.ToASCII("*.faß.com")) + + // Rewrite IDN for lookup. This (currently) uses transitional mappings to + // find a balance between IDNA2003 and IDNA2008 compatibility. + fmt.Println(idna.Lookup.ToASCII("")) + fmt.Println(idna.Lookup.ToASCII("www.faß.com")) + + // Convert an IDN to ASCII for registration purposes. This changes the + // encoding, but reports an error if the input was illformed. + fmt.Println(idna.Registration.ToASCII("")) + fmt.Println(idna.Registration.ToASCII("www.faß.com")) + + // Output: + // + // *.xn--fa-hia.com + // *.xn--fa-hia.com + // + // www.fass.com + // idna: invalid label "" + // www.xn--fa-hia.com +} + +func ExampleNew() { + var p *idna.Profile + + // Raw Punycode has no restrictions and does no mappings. + p = idna.New() + fmt.Println(p.ToASCII("*.faß.com")) + + // Do mappings. Note that star is not allowed in a DNS lookup. + p = idna.New( + idna.MapForLookup(), + idna.Transitional(true)) // Map ß -> ss + fmt.Println(p.ToASCII("*.faß.com")) + + // Set up a profile maps for lookup, but allows wild cards. + p = idna.New( + idna.MapForLookup(), + idna.Transitional(true), // Map ß -> ss + idna.StrictDomainName(false)) // Set more permissive ASCII rules. + fmt.Println(p.ToASCII("*.faß.com")) + + // Output: + // *.xn--fa-hia.com + // *.fass.com idna: disallowed rune U+002E + // *.fass.com +} diff --git a/vendor/golang.org/x/net/idna/idna.go b/vendor/golang.org/x/net/idna/idna.go new file mode 100644 index 0000000..ee2dbda --- /dev/null +++ b/vendor/golang.org/x/net/idna/idna.go @@ -0,0 +1,668 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package idna implements IDNA2008 using the compatibility processing +// defined by UTS (Unicode Technical Standard) #46, which defines a standard to +// deal with the transition from IDNA2003. +// +// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC +// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894. +// UTS #46 is defined in http://www.unicode.org/reports/tr46. +// See http://unicode.org/cldr/utility/idna.jsp for a visualization of the +// differences between these two standards. +package idna // import "golang.org/x/net/idna" + +import ( + "fmt" + "strings" + "unicode/utf8" + + "golang.org/x/text/secure/bidirule" + "golang.org/x/text/unicode/norm" +) + +// NOTE: Unlike common practice in Go APIs, the functions will return a +// sanitized domain name in case of errors. Browsers sometimes use a partially +// evaluated string as lookup. +// TODO: the current error handling is, in my opinion, the least opinionated. +// Other strategies are also viable, though: +// Option 1) Return an empty string in case of error, but allow the user to +// specify explicitly which errors to ignore. +// Option 2) Return the partially evaluated string if it is itself a valid +// string, otherwise return the empty string in case of error. +// Option 3) Option 1 and 2. +// Option 4) Always return an empty string for now and implement Option 1 as +// needed, and document that the return string may not be empty in case of +// error in the future. +// I think Option 1 is best, but it is quite opinionated. + +// ToASCII is a wrapper for Punycode.ToASCII. +func ToASCII(s string) (string, error) { + return Punycode.process(s, true) +} + +// ToUnicode is a wrapper for Punycode.ToUnicode. +func ToUnicode(s string) (string, error) { + return Punycode.process(s, false) +} + +// An Option configures a Profile at creation time. +type Option func(*options) + +// Transitional sets a Profile to use the Transitional mapping as defined in UTS +// #46. This will cause, for example, "ß" to be mapped to "ss". Using the +// transitional mapping provides a compromise between IDNA2003 and IDNA2008 +// compatibility. It is used by most browsers when resolving domain names. This +// option is only meaningful if combined with MapForLookup. +func Transitional(transitional bool) Option { + return func(o *options) { o.transitional = true } +} + +// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts +// are longer than allowed by the RFC. +func VerifyDNSLength(verify bool) Option { + return func(o *options) { o.verifyDNSLength = verify } +} + +// ValidateLabels sets whether to check the mandatory label validation criteria +// as defined in Section 5.4 of RFC 5891. This includes testing for correct use +// of hyphens ('-'), normalization, validity of runes, and the context rules. +func ValidateLabels(enable bool) Option { + return func(o *options) { + // Don't override existing mappings, but set one that at least checks + // normalization if it is not set. + if o.mapping == nil && enable { + o.mapping = normalize + } + o.trie = trie + o.validateLabels = enable + o.fromPuny = validateFromPunycode + } +} + +// StrictDomainName limits the set of permissable ASCII characters to those +// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the +// hyphen). This is set by default for MapForLookup and ValidateForRegistration. +// +// This option is useful, for instance, for browsers that allow characters +// outside this range, for example a '_' (U+005F LOW LINE). See +// http://www.rfc-editor.org/std/std3.txt for more details This option +// corresponds to the UseSTD3ASCIIRules option in UTS #46. +func StrictDomainName(use bool) Option { + return func(o *options) { + o.trie = trie + o.useSTD3Rules = use + o.fromPuny = validateFromPunycode + } +} + +// NOTE: the following options pull in tables. The tables should not be linked +// in as long as the options are not used. + +// BidiRule enables the Bidi rule as defined in RFC 5893. Any application +// that relies on proper validation of labels should include this rule. +func BidiRule() Option { + return func(o *options) { o.bidirule = bidirule.ValidString } +} + +// ValidateForRegistration sets validation options to verify that a given IDN is +// properly formatted for registration as defined by Section 4 of RFC 5891. +func ValidateForRegistration() Option { + return func(o *options) { + o.mapping = validateRegistration + StrictDomainName(true)(o) + ValidateLabels(true)(o) + VerifyDNSLength(true)(o) + BidiRule()(o) + } +} + +// MapForLookup sets validation and mapping options such that a given IDN is +// transformed for domain name lookup according to the requirements set out in +// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894, +// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option +// to add this check. +// +// The mappings include normalization and mapping case, width and other +// compatibility mappings. +func MapForLookup() Option { + return func(o *options) { + o.mapping = validateAndMap + StrictDomainName(true)(o) + ValidateLabels(true)(o) + } +} + +type options struct { + transitional bool + useSTD3Rules bool + validateLabels bool + verifyDNSLength bool + + trie *idnaTrie + + // fromPuny calls validation rules when converting A-labels to U-labels. + fromPuny func(p *Profile, s string) error + + // mapping implements a validation and mapping step as defined in RFC 5895 + // or UTS 46, tailored to, for example, domain registration or lookup. + mapping func(p *Profile, s string) (string, error) + + // bidirule, if specified, checks whether s conforms to the Bidi Rule + // defined in RFC 5893. + bidirule func(s string) bool +} + +// A Profile defines the configuration of a IDNA mapper. +type Profile struct { + options +} + +func apply(o *options, opts []Option) { + for _, f := range opts { + f(o) + } +} + +// New creates a new Profile. +// +// With no options, the returned Profile is the most permissive and equals the +// Punycode Profile. Options can be passed to further restrict the Profile. The +// MapForLookup and ValidateForRegistration options set a collection of options, +// for lookup and registration purposes respectively, which can be tailored by +// adding more fine-grained options, where later options override earlier +// options. +func New(o ...Option) *Profile { + p := &Profile{} + apply(&p.options, o) + return p +} + +// ToASCII converts a domain or domain label to its ASCII form. For example, +// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and +// ToASCII("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToASCII(s string) (string, error) { + return p.process(s, true) +} + +// ToUnicode converts a domain or domain label to its Unicode form. For example, +// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and +// ToUnicode("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToUnicode(s string) (string, error) { + pp := *p + pp.transitional = false + return pp.process(s, false) +} + +// String reports a string with a description of the profile for debugging +// purposes. The string format may change with different versions. +func (p *Profile) String() string { + s := "" + if p.transitional { + s = "Transitional" + } else { + s = "NonTransitional" + } + if p.useSTD3Rules { + s += ":UseSTD3Rules" + } + if p.validateLabels { + s += ":ValidateLabels" + } + if p.verifyDNSLength { + s += ":VerifyDNSLength" + } + return s +} + +var ( + // Punycode is a Profile that does raw punycode processing with a minimum + // of validation. + Punycode *Profile = punycode + + // Lookup is the recommended profile for looking up domain names, according + // to Section 5 of RFC 5891. The exact configuration of this profile may + // change over time. + Lookup *Profile = lookup + + // Display is the recommended profile for displaying domain names. + // The configuration of this profile may change over time. + Display *Profile = display + + // Registration is the recommended profile for checking whether a given + // IDN is valid for registration, according to Section 4 of RFC 5891. + Registration *Profile = registration + + punycode = &Profile{} + lookup = &Profile{options{ + transitional: true, + useSTD3Rules: true, + validateLabels: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + display = &Profile{options{ + useSTD3Rules: true, + validateLabels: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + registration = &Profile{options{ + useSTD3Rules: true, + validateLabels: true, + verifyDNSLength: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateRegistration, + bidirule: bidirule.ValidString, + }} + + // TODO: profiles + // Register: recommended for approving domain names: don't do any mappings + // but rather reject on invalid input. Bundle or block deviation characters. +) + +type labelError struct{ label, code_ string } + +func (e labelError) code() string { return e.code_ } +func (e labelError) Error() string { + return fmt.Sprintf("idna: invalid label %q", e.label) +} + +type runeError rune + +func (e runeError) code() string { return "P1" } +func (e runeError) Error() string { + return fmt.Sprintf("idna: disallowed rune %U", e) +} + +// process implements the algorithm described in section 4 of UTS #46, +// see http://www.unicode.org/reports/tr46. +func (p *Profile) process(s string, toASCII bool) (string, error) { + var err error + if p.mapping != nil { + s, err = p.mapping(p, s) + } + // Remove leading empty labels. + for ; len(s) > 0 && s[0] == '.'; s = s[1:] { + } + // It seems like we should only create this error on ToASCII, but the + // UTS 46 conformance tests suggests we should always check this. + if err == nil && p.verifyDNSLength && s == "" { + err = &labelError{s, "A4"} + } + labels := labelIter{orig: s} + for ; !labels.done(); labels.next() { + label := labels.label() + if label == "" { + // Empty labels are not okay. The label iterator skips the last + // label if it is empty. + if err == nil && p.verifyDNSLength { + err = &labelError{s, "A4"} + } + continue + } + if strings.HasPrefix(label, acePrefix) { + u, err2 := decode(label[len(acePrefix):]) + if err2 != nil { + if err == nil { + err = err2 + } + // Spec says keep the old label. + continue + } + labels.set(u) + if err == nil && p.validateLabels { + err = p.fromPuny(p, u) + } + if err == nil { + // This should be called on NonTransitional, according to the + // spec, but that currently does not have any effect. Use the + // original profile to preserve options. + err = p.validateLabel(u) + } + } else if err == nil { + err = p.validateLabel(label) + } + } + if toASCII { + for labels.reset(); !labels.done(); labels.next() { + label := labels.label() + if !ascii(label) { + a, err2 := encode(acePrefix, label) + if err == nil { + err = err2 + } + label = a + labels.set(a) + } + n := len(label) + if p.verifyDNSLength && err == nil && (n == 0 || n > 63) { + err = &labelError{label, "A4"} + } + } + } + s = labels.result() + if toASCII && p.verifyDNSLength && err == nil { + // Compute the length of the domain name minus the root label and its dot. + n := len(s) + if n > 0 && s[n-1] == '.' { + n-- + } + if len(s) < 1 || n > 253 { + err = &labelError{s, "A4"} + } + } + return s, err +} + +func normalize(p *Profile, s string) (string, error) { + return norm.NFC.String(s), nil +} + +func validateRegistration(p *Profile, s string) (string, error) { + if !norm.NFC.IsNormalString(s) { + return s, &labelError{s, "V1"} + } + var err error + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + i += sz + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + // TODO: handle the NV8 defined in the Unicode idna data set to allow + // for strict conformance to IDNA2008. + case valid, deviation: + case disallowed, mapped, unknown, ignored: + if err == nil { + r, _ := utf8.DecodeRuneInString(s[i:]) + err = runeError(r) + } + } + } + return s, err +} + +func validateAndMap(p *Profile, s string) (string, error) { + var ( + err error + b []byte + k int + ) + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + start := i + i += sz + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + case valid: + continue + case disallowed: + if err == nil { + r, _ := utf8.DecodeRuneInString(s[i:]) + err = runeError(r) + } + continue + case mapped, deviation: + b = append(b, s[k:start]...) + b = info(v).appendMapping(b, s[start:i]) + case ignored: + b = append(b, s[k:start]...) + // drop the rune + case unknown: + b = append(b, s[k:start]...) + b = append(b, "\ufffd"...) + } + k = i + } + if k == 0 { + // No changes so far. + s = norm.NFC.String(s) + } else { + b = append(b, s[k:]...) + if norm.NFC.QuickSpan(b) != len(b) { + b = norm.NFC.Bytes(b) + } + // TODO: the punycode converters require strings as input. + s = string(b) + } + return s, err +} + +// A labelIter allows iterating over domain name labels. +type labelIter struct { + orig string + slice []string + curStart int + curEnd int + i int +} + +func (l *labelIter) reset() { + l.curStart = 0 + l.curEnd = 0 + l.i = 0 +} + +func (l *labelIter) done() bool { + return l.curStart >= len(l.orig) +} + +func (l *labelIter) result() string { + if l.slice != nil { + return strings.Join(l.slice, ".") + } + return l.orig +} + +func (l *labelIter) label() string { + if l.slice != nil { + return l.slice[l.i] + } + p := strings.IndexByte(l.orig[l.curStart:], '.') + l.curEnd = l.curStart + p + if p == -1 { + l.curEnd = len(l.orig) + } + return l.orig[l.curStart:l.curEnd] +} + +// next sets the value to the next label. It skips the last label if it is empty. +func (l *labelIter) next() { + l.i++ + if l.slice != nil { + if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" { + l.curStart = len(l.orig) + } + } else { + l.curStart = l.curEnd + 1 + if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' { + l.curStart = len(l.orig) + } + } +} + +func (l *labelIter) set(s string) { + if l.slice == nil { + l.slice = strings.Split(l.orig, ".") + } + l.slice[l.i] = s +} + +// acePrefix is the ASCII Compatible Encoding prefix. +const acePrefix = "xn--" + +func (p *Profile) simplify(cat category) category { + switch cat { + case disallowedSTD3Mapped: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = mapped + } + case disallowedSTD3Valid: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = valid + } + case deviation: + if !p.transitional { + cat = valid + } + case validNV8, validXV8: + // TODO: handle V2008 + cat = valid + } + return cat +} + +func validateFromPunycode(p *Profile, s string) error { + if !norm.NFC.IsNormalString(s) { + return &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if c := p.simplify(info(v).category()); c != valid && c != deviation { + return &labelError{s, "V6"} + } + i += sz + } + return nil +} + +const ( + zwnj = "\u200c" + zwj = "\u200d" +) + +type joinState int8 + +const ( + stateStart joinState = iota + stateVirama + stateBefore + stateBeforeVirama + stateAfter + stateFAIL +) + +var joinStates = [][numJoinTypes]joinState{ + stateStart: { + joiningL: stateBefore, + joiningD: stateBefore, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateVirama, + }, + stateVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + }, + stateBefore: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + joinZWNJ: stateAfter, + joinZWJ: stateFAIL, + joinVirama: stateBeforeVirama, + }, + stateBeforeVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + }, + stateAfter: { + joiningL: stateFAIL, + joiningD: stateBefore, + joiningT: stateAfter, + joiningR: stateStart, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateAfter, // no-op as we can't accept joiners here + }, + stateFAIL: { + 0: stateFAIL, + joiningL: stateFAIL, + joiningD: stateFAIL, + joiningT: stateFAIL, + joiningR: stateFAIL, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateFAIL, + }, +} + +// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are +// already implicitly satisfied by the overall implementation. +func (p *Profile) validateLabel(s string) error { + if s == "" { + if p.verifyDNSLength { + return &labelError{s, "A4"} + } + return nil + } + if p.bidirule != nil && !p.bidirule(s) { + return &labelError{s, "B"} + } + if !p.validateLabels { + return nil + } + trie := p.trie // p.validateLabels is only set if trie is set. + if len(s) > 4 && s[2] == '-' && s[3] == '-' { + return &labelError{s, "V2"} + } + if s[0] == '-' || s[len(s)-1] == '-' { + return &labelError{s, "V3"} + } + // TODO: merge the use of this in the trie. + v, sz := trie.lookupString(s) + x := info(v) + if x.isModifier() { + return &labelError{s, "V5"} + } + // Quickly return in the absence of zero-width (non) joiners. + if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 { + return nil + } + st := stateStart + for i := 0; ; { + jt := x.joinType() + if s[i:i+sz] == zwj { + jt = joinZWJ + } else if s[i:i+sz] == zwnj { + jt = joinZWNJ + } + st = joinStates[st][jt] + if x.isViramaModifier() { + st = joinStates[st][joinVirama] + } + if i += sz; i == len(s) { + break + } + v, sz = trie.lookupString(s[i:]) + x = info(v) + } + if st == stateFAIL || st == stateAfter { + return &labelError{s, "C"} + } + return nil +} + +func ascii(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/net/idna/idna_test.go b/vendor/golang.org/x/net/idna/idna_test.go new file mode 100644 index 0000000..b1bc6fa --- /dev/null +++ b/vendor/golang.org/x/net/idna/idna_test.go @@ -0,0 +1,43 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +import ( + "testing" +) + +var idnaTestCases = [...]struct { + ascii, unicode string +}{ + // Labels. + {"books", "books"}, + {"xn--bcher-kva", "bücher"}, + + // Domains. + {"foo--xn--bar.org", "foo--xn--bar.org"}, + {"golang.org", "golang.org"}, + {"example.xn--p1ai", "example.рф"}, + {"xn--czrw28b.tw", "商業.tw"}, + {"www.xn--mller-kva.de", "www.müller.de"}, +} + +func TestIDNA(t *testing.T) { + for _, tc := range idnaTestCases { + if a, err := ToASCII(tc.unicode); err != nil { + t.Errorf("ToASCII(%q): %v", tc.unicode, err) + } else if a != tc.ascii { + t.Errorf("ToASCII(%q): got %q, want %q", tc.unicode, a, tc.ascii) + } + + if u, err := ToUnicode(tc.ascii); err != nil { + t.Errorf("ToUnicode(%q): %v", tc.ascii, err) + } else if u != tc.unicode { + t.Errorf("ToUnicode(%q): got %q, want %q", tc.ascii, u, tc.unicode) + } + } +} + +// TODO(nigeltao): test errors, once we've specified when ToASCII and ToUnicode +// return errors. diff --git a/vendor/golang.org/x/net/idna/punycode.go b/vendor/golang.org/x/net/idna/punycode.go new file mode 100644 index 0000000..02c7d59 --- /dev/null +++ b/vendor/golang.org/x/net/idna/punycode.go @@ -0,0 +1,203 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +// This file implements the Punycode algorithm from RFC 3492. + +import ( + "math" + "strings" + "unicode/utf8" +) + +// These parameter values are specified in section 5. +// +// All computation is done with int32s, so that overflow behavior is identical +// regardless of whether int is 32-bit or 64-bit. +const ( + base int32 = 36 + damp int32 = 700 + initialBias int32 = 72 + initialN int32 = 128 + skew int32 = 38 + tmax int32 = 26 + tmin int32 = 1 +) + +func punyError(s string) error { return &labelError{s, "A3"} } + +// decode decodes a string as specified in section 6.2. +func decode(encoded string) (string, error) { + if encoded == "" { + return "", nil + } + pos := 1 + strings.LastIndex(encoded, "-") + if pos == 1 { + return "", punyError(encoded) + } + if pos == len(encoded) { + return encoded[:len(encoded)-1], nil + } + output := make([]rune, 0, len(encoded)) + if pos != 0 { + for _, r := range encoded[:pos-1] { + output = append(output, r) + } + } + i, n, bias := int32(0), initialN, initialBias + for pos < len(encoded) { + oldI, w := i, int32(1) + for k := base; ; k += base { + if pos == len(encoded) { + return "", punyError(encoded) + } + digit, ok := decodeDigit(encoded[pos]) + if !ok { + return "", punyError(encoded) + } + pos++ + i += digit * w + if i < 0 { + return "", punyError(encoded) + } + t := k - bias + if t < tmin { + t = tmin + } else if t > tmax { + t = tmax + } + if digit < t { + break + } + w *= base - t + if w >= math.MaxInt32/base { + return "", punyError(encoded) + } + } + x := int32(len(output) + 1) + bias = adapt(i-oldI, x, oldI == 0) + n += i / x + i %= x + if n > utf8.MaxRune || len(output) >= 1024 { + return "", punyError(encoded) + } + output = append(output, 0) + copy(output[i+1:], output[i:]) + output[i] = n + i++ + } + return string(output), nil +} + +// encode encodes a string as specified in section 6.3 and prepends prefix to +// the result. +// +// The "while h < length(input)" line in the specification becomes "for +// remaining != 0" in the Go code, because len(s) in Go is in bytes, not runes. +func encode(prefix, s string) (string, error) { + output := make([]byte, len(prefix), len(prefix)+1+2*len(s)) + copy(output, prefix) + delta, n, bias := int32(0), initialN, initialBias + b, remaining := int32(0), int32(0) + for _, r := range s { + if r < 0x80 { + b++ + output = append(output, byte(r)) + } else { + remaining++ + } + } + h := b + if b > 0 { + output = append(output, '-') + } + for remaining != 0 { + m := int32(0x7fffffff) + for _, r := range s { + if m > r && r >= n { + m = r + } + } + delta += (m - n) * (h + 1) + if delta < 0 { + return "", punyError(s) + } + n = m + for _, r := range s { + if r < n { + delta++ + if delta < 0 { + return "", punyError(s) + } + continue + } + if r > n { + continue + } + q := delta + for k := base; ; k += base { + t := k - bias + if t < tmin { + t = tmin + } else if t > tmax { + t = tmax + } + if q < t { + break + } + output = append(output, encodeDigit(t+(q-t)%(base-t))) + q = (q - t) / (base - t) + } + output = append(output, encodeDigit(q)) + bias = adapt(delta, h+1, h == b) + delta = 0 + h++ + remaining-- + } + delta++ + n++ + } + return string(output), nil +} + +func decodeDigit(x byte) (digit int32, ok bool) { + switch { + case '0' <= x && x <= '9': + return int32(x - ('0' - 26)), true + case 'A' <= x && x <= 'Z': + return int32(x - 'A'), true + case 'a' <= x && x <= 'z': + return int32(x - 'a'), true + } + return 0, false +} + +func encodeDigit(digit int32) byte { + switch { + case 0 <= digit && digit < 26: + return byte(digit + 'a') + case 26 <= digit && digit < 36: + return byte(digit + ('0' - 26)) + } + panic("idna: internal error in punycode encoding") +} + +// adapt is the bias adaptation function specified in section 6.1. +func adapt(delta, numPoints int32, firstTime bool) int32 { + if firstTime { + delta /= damp + } else { + delta /= 2 + } + delta += delta / numPoints + k := int32(0) + for delta > ((base-tmin)*tmax)/2 { + delta /= base - tmin + k += base + } + return k + (base-tmin+1)*delta/(delta+skew) +} diff --git a/vendor/golang.org/x/net/idna/punycode_test.go b/vendor/golang.org/x/net/idna/punycode_test.go new file mode 100644 index 0000000..bfec81d --- /dev/null +++ b/vendor/golang.org/x/net/idna/punycode_test.go @@ -0,0 +1,198 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +import ( + "strings" + "testing" +) + +var punycodeTestCases = [...]struct { + s, encoded string +}{ + {"", ""}, + {"-", "--"}, + {"-a", "-a-"}, + {"-a-", "-a--"}, + {"a", "a-"}, + {"a-", "a--"}, + {"a-b", "a-b-"}, + {"books", "books-"}, + {"bücher", "bcher-kva"}, + {"Hello世界", "Hello-ck1hg65u"}, + {"ü", "tda"}, + {"üý", "tdac"}, + + // The test cases below come from RFC 3492 section 7.1 with Errata 3026. + { + // (A) Arabic (Egyptian). + "\u0644\u064A\u0647\u0645\u0627\u0628\u062A\u0643\u0644" + + "\u0645\u0648\u0634\u0639\u0631\u0628\u064A\u061F", + "egbpdaj6bu4bxfgehfvwxn", + }, + { + // (B) Chinese (simplified). + "\u4ED6\u4EEC\u4E3A\u4EC0\u4E48\u4E0D\u8BF4\u4E2D\u6587", + "ihqwcrb4cv8a8dqg056pqjye", + }, + { + // (C) Chinese (traditional). + "\u4ED6\u5011\u7232\u4EC0\u9EBD\u4E0D\u8AAA\u4E2D\u6587", + "ihqwctvzc91f659drss3x8bo0yb", + }, + { + // (D) Czech. + "\u0050\u0072\u006F\u010D\u0070\u0072\u006F\u0073\u0074" + + "\u011B\u006E\u0065\u006D\u006C\u0075\u0076\u00ED\u010D" + + "\u0065\u0073\u006B\u0079", + "Proprostnemluvesky-uyb24dma41a", + }, + { + // (E) Hebrew. + "\u05DC\u05DE\u05D4\u05D4\u05DD\u05E4\u05E9\u05D5\u05D8" + + "\u05DC\u05D0\u05DE\u05D3\u05D1\u05E8\u05D9\u05DD\u05E2" + + "\u05D1\u05E8\u05D9\u05EA", + "4dbcagdahymbxekheh6e0a7fei0b", + }, + { + // (F) Hindi (Devanagari). + "\u092F\u0939\u0932\u094B\u0917\u0939\u093F\u0928\u094D" + + "\u0926\u0940\u0915\u094D\u092F\u094B\u0902\u0928\u0939" + + "\u0940\u0902\u092C\u094B\u0932\u0938\u0915\u0924\u0947" + + "\u0939\u0948\u0902", + "i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd", + }, + { + // (G) Japanese (kanji and hiragana). + "\u306A\u305C\u307F\u3093\u306A\u65E5\u672C\u8A9E\u3092" + + "\u8A71\u3057\u3066\u304F\u308C\u306A\u3044\u306E\u304B", + "n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa", + }, + { + // (H) Korean (Hangul syllables). + "\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774" + + "\uD55C\uAD6D\uC5B4\uB97C\uC774\uD574\uD55C\uB2E4\uBA74" + + "\uC5BC\uB9C8\uB098\uC88B\uC744\uAE4C", + "989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5j" + + "psd879ccm6fea98c", + }, + { + // (I) Russian (Cyrillic). + "\u043F\u043E\u0447\u0435\u043C\u0443\u0436\u0435\u043E" + + "\u043D\u0438\u043D\u0435\u0433\u043E\u0432\u043E\u0440" + + "\u044F\u0442\u043F\u043E\u0440\u0443\u0441\u0441\u043A" + + "\u0438", + "b1abfaaepdrnnbgefbadotcwatmq2g4l", + }, + { + // (J) Spanish. + "\u0050\u006F\u0072\u0071\u0075\u00E9\u006E\u006F\u0070" + + "\u0075\u0065\u0064\u0065\u006E\u0073\u0069\u006D\u0070" + + "\u006C\u0065\u006D\u0065\u006E\u0074\u0065\u0068\u0061" + + "\u0062\u006C\u0061\u0072\u0065\u006E\u0045\u0073\u0070" + + "\u0061\u00F1\u006F\u006C", + "PorqunopuedensimplementehablarenEspaol-fmd56a", + }, + { + // (K) Vietnamese. + "\u0054\u1EA1\u0069\u0073\u0061\u006F\u0068\u1ECD\u006B" + + "\u0068\u00F4\u006E\u0067\u0074\u0068\u1EC3\u0063\u0068" + + "\u1EC9\u006E\u00F3\u0069\u0074\u0069\u1EBF\u006E\u0067" + + "\u0056\u0069\u1EC7\u0074", + "TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g", + }, + { + // (L) 3B. + "\u0033\u5E74\u0042\u7D44\u91D1\u516B\u5148\u751F", + "3B-ww4c5e180e575a65lsy2b", + }, + { + // (M) -with-SUPER-MONKEYS. + "\u5B89\u5BA4\u5948\u7F8E\u6075\u002D\u0077\u0069\u0074" + + "\u0068\u002D\u0053\u0055\u0050\u0045\u0052\u002D\u004D" + + "\u004F\u004E\u004B\u0045\u0059\u0053", + "-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n", + }, + { + // (N) Hello-Another-Way-. + "\u0048\u0065\u006C\u006C\u006F\u002D\u0041\u006E\u006F" + + "\u0074\u0068\u0065\u0072\u002D\u0057\u0061\u0079\u002D" + + "\u305D\u308C\u305E\u308C\u306E\u5834\u6240", + "Hello-Another-Way--fc4qua05auwb3674vfr0b", + }, + { + // (O) 2. + "\u3072\u3068\u3064\u5C4B\u6839\u306E\u4E0B\u0032", + "2-u9tlzr9756bt3uc0v", + }, + { + // (P) MajiKoi5 + "\u004D\u0061\u006A\u0069\u3067\u004B\u006F\u0069\u3059" + + "\u308B\u0035\u79D2\u524D", + "MajiKoi5-783gue6qz075azm5e", + }, + { + // (Q) de + "\u30D1\u30D5\u30A3\u30FC\u0064\u0065\u30EB\u30F3\u30D0", + "de-jg4avhby1noc0d", + }, + { + // (R) + "\u305D\u306E\u30B9\u30D4\u30FC\u30C9\u3067", + "d9juau41awczczp", + }, + { + // (S) -> $1.00 <- + "\u002D\u003E\u0020\u0024\u0031\u002E\u0030\u0030\u0020" + + "\u003C\u002D", + "-> $1.00 <--", + }, +} + +func TestPunycode(t *testing.T) { + for _, tc := range punycodeTestCases { + if got, err := decode(tc.encoded); err != nil { + t.Errorf("decode(%q): %v", tc.encoded, err) + } else if got != tc.s { + t.Errorf("decode(%q): got %q, want %q", tc.encoded, got, tc.s) + } + + if got, err := encode("", tc.s); err != nil { + t.Errorf(`encode("", %q): %v`, tc.s, err) + } else if got != tc.encoded { + t.Errorf(`encode("", %q): got %q, want %q`, tc.s, got, tc.encoded) + } + } +} + +var punycodeErrorTestCases = [...]string{ + "decode -", // A sole '-' is invalid. + "decode foo\x00bar", // '\x00' is not in [0-9A-Za-z]. + "decode foo#bar", // '#' is not in [0-9A-Za-z]. + "decode foo\u00A3bar", // '\u00A3' is not in [0-9A-Za-z]. + "decode 9", // "9a" decodes to codepoint \u00A3; "9" is truncated. + "decode 99999a", // "99999a" decodes to codepoint \U0048A3C1, which is > \U0010FFFF. + "decode 9999999999a", // "9999999999a" overflows the int32 calculation. + + "encode " + strings.Repeat("x", 65536) + "\uff00", // int32 overflow. +} + +func TestPunycodeErrors(t *testing.T) { + for _, tc := range punycodeErrorTestCases { + var err error + switch { + case strings.HasPrefix(tc, "decode "): + _, err = decode(tc[7:]) + case strings.HasPrefix(tc, "encode "): + _, err = encode("", tc[7:]) + } + if err == nil { + if len(tc) > 256 { + tc = tc[:100] + "..." + tc[len(tc)-100:] + } + t.Errorf("no error for %s", tc) + } + } +} diff --git a/vendor/golang.org/x/net/idna/tables.go b/vendor/golang.org/x/net/idna/tables.go new file mode 100644 index 0000000..d281934 --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables.go @@ -0,0 +1,4477 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +var mappings string = "" + // Size: 8176 bytes + "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + + "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + + "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + + "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + + "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + + "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + + "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + + "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + + "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + + "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + + "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + + "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + + "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + + "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + + "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + + "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + + "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + + "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + + "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + + "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + + "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + + "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + + "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + + "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + + "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + + "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + + ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + + "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + + "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + + "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + + "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + + "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + + "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + + "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + + "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + + "月\x0511月\x0512月\x02hg\x02ev\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニング\x09" + + "インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー\x09ガロ" + + "ン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0fキロワッ" + + "ト\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル\x0fサンチ" + + "ーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット\x09ハイツ" + + "\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0cフィート" + + "\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ\x0cポイ" + + "ント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク\x0fマ" + + "ンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09ユアン" + + "\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x042点" + + "\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + + "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + + "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + + "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + + "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + + "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + + "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + + "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + + "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + + "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + + "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + + "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x04𤋮\x04𢡊\x04𢡄\x04𣏕\x04𥉉" + + "\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ\x04יִ" + + "\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּׂ\x04א" + + "ַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04ךּ\x04" + + "כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ\x04תּ" + + "\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ\x02ڤ" + + "\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ\x02ڳ" + + "\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ\x02ۅ" + + "\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02ی\x04" + + "ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04تح" + + "\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج\x04حم" + + "\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح\x04ضخ" + + "\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ\x04فم" + + "\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل\x04كم" + + "\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ\x04مم" + + "\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى\x04هي" + + "\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 ٍّ\x05" + + " َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04تر\x04تز" + + "\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04ين\x04ئخ" + + "\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه\x04شم\x04شه" + + "\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي\x04سى\x04سي" + + "\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي\x04ضى\x04ضي" + + "\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06تحج\x06تحم" + + "\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سجح\x06سجى" + + "\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم\x06ضحى" + + "\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي\x06غمى" + + "\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح\x06محج" + + "\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم\x06نحم" + + "\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى\x06تخي" + + "\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي\x06ضحي" + + "\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي\x06كمي" + + "\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي\x06سخي" + + "\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08عليه" + + "\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:\x01!" + + "\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\\x01$" + + "\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ\x02إ" + + "\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز\x02س" + + "\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن\x02ه" + + "\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~\x02¢" + + "\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲\x08𝆹" + + "𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η\x02" + + "κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ\x02ڡ" + + "\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029,\x03(a)" + + "\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)\x03(k)" + + "\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)\x03(u)" + + "\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03ppv\x02w" + + "c\x02mc\x02md\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ\x03二\x03多\x03解" + + "\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終\x03生\x03販\x03声" + + "\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指\x03走\x03打\x03禁" + + "\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔三〕\x09〔二〕\x09〔安" + + "〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03丸\x03乁\x03你\x03" + + "侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03具\x03㒹\x03內\x03" + + "冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03㔕\x03勇\x03勉\x03" + + "勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03灰\x03及\x03叟\x03" + + "叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03啣\x03善\x03喙\x03" + + "喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03埴\x03堍\x03型\x03" + + "堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03姘\x03婦\x03㛮\x03" + + "嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03屮\x03峀\x03岍\x03" + + "嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03㡢\x03㡼\x03庰\x03" + + "庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03忍\x03志\x03忹\x03" + + "悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03憤\x03憯\x03懞\x03" + + "懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03掃\x03揤\x03搢\x03" + + "揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03書\x03晉\x03㬙\x03" + + "暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03朡\x03杞\x03杓\x03" + + "㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03槪\x03檨\x03櫛\x03" + + "㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03汧\x03洖\x03派\x03" + + "海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03淹\x03潮\x03濆\x03" + + "瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03爵\x03牐\x03犀\x03" + + "犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03㼛\x03甤\x03甾\x03" + + "異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03䂖\x03硎\x03碌\x03" + + "磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03築\x03䈧\x03糒\x03" + + "䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03罺\x03羕\x03翺\x03" + + "者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03䑫\x03芑\x03芋\x03" + + "芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03莽\x03菧\x03著\x03" + + "荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03䕫\x03虐\x03虜\x03" + + "虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03蠁\x03䗹\x03衠\x03" + + "衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03豕\x03貫\x03賁\x03" + + "贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03鈸\x03鋗\x03鋘\x03" + + "鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03䩶\x03韠\x03䪲\x03" + + "頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03鳽\x03䳎\x03䳭\x03" + + "鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" + +var xorData string = "" + // Size: 4855 bytes + "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + + "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + + "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + + "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + + "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + + "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + + "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + + "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + + "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + + "\x03\x037 \x03\x0b+\x03\x02\x01\x04\x02\x01\x02\x02\x019\x02\x03\x1c\x02" + + "\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03\xc1r\x02" + + "\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<\x03\xc1s*" + + "\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03\x83\xab" + + "\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96\xe1\xcd" + + "\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03\x9a\xec" + + "\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c!\x03" + + "\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03ʦ\x93" + + "\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7\x03" + + "\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca\xfa" + + "\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e\x03" + + "\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca\xe3" + + "\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99\x03" + + "\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca\xe8" + + "\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03\x0b" + + "\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06\x05" + + "\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03\x0786" + + "\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/\x03" + + "\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f\x03" + + "\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-\x03" + + "\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03\x07" + + "\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03\x07" + + "\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03\x07" + + "\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b\x0a" + + "\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03\x07" + + "\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+\x03" + + "\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03\x04" + + "4\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03\x04+ " + + "\x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!\x22" + + "\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04\x03" + + "\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>\x03" + + "\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03\x054" + + "\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03\x05)" + + ":\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$\x1e" + + "\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226\x03" + + "\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05\x1b" + + "\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05\x03" + + "\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03\x06" + + "\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08\x03" + + "\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03\x0a6" + + "\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a\x1f" + + "\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03\x0a" + + "\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f\x02" + + "\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/\x03" + + "\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a\x00" + + "\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+\x10" + + "\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#<" + + "\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!\x00" + + "\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18.\x03" + + "\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15\x22" + + "\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b\x12" + + "\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05<" + + "\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + + "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + + "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + + "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + + "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + + "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + + "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + + "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + + "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + + "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + + "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + + "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + + "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + + "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + + "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + + "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + + "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + + "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + + "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + + "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + + "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + + "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + + "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + + "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + + "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + + "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + + "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + + "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + + "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + + "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + + "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + + "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + + ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + + "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + + "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + + "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + + "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + + "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + + "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + + "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + + "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + + "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + + "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + + "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + + "(\x04\x023 \x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!\x10\x03\x0b!0" + + "\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b\x03\x09\x1f" + + "\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14\x03\x0a\x01" + + "\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03\x08='\x03" + + "\x08\x1a\x0a\x03\x07\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07\x01\x00" + + "\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03\x09\x11" + + "\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03\x0a/1" + + "\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03\x07<3" + + "\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06\x13\x00" + + "\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(;\x03" + + "\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08\x14$" + + "\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03\x0a" + + "\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19\x01" + + "\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18\x03" + + "\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03\x07" + + "\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03\x0a" + + "\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03\x0b" + + "\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03\x08" + + "\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05\x03" + + "\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11\x03" + + "\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03\x09" + + "\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a." + + "\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + + "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + + "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + + "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + + "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + + "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + + "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + + "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + + "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + + "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + + "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + + "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + + "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + + "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + + "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + + "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + + "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + + "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + + "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + + "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + + "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + + "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + + "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + + "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + + "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + + "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + + "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + + "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + + "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + + "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + + "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + + "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + + "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + + "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + + "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + + "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + + "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + + "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + + "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + + "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + + "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + + "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + + "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + + "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + + "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + + "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + + "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + + "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + + "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + + "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + + "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + + "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + + "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + + "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + + "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + + "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + + "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + + "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + + "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + + "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + + "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + + "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + + "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + + "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + + "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + + "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + + "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + + "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + + "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + + "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + + "\x04\x03\x0c?\x05\x03\x0c" + + "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + + "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + + "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + + "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + + "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + + "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x01\x1e\x03\x0f$!\x03" + + "\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08\x18\x03\x0f" + + "\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$\x03\x0e\x0d)" + + "\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d\x03\x0d. \x03" + + "\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03\x0d\x0d\x0f\x03" + + "\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03\x0c\x09:\x03\x0e" + + "\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18\x03\x0c\x1f\x1c" + + "\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03\x0b<+\x03\x0b8" + + "\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d\x22&\x03\x0b\x1a" + + "\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03\x0a!\x1a\x03\x0a!" + + "7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03\x0a\x00 \x03\x0a" + + "\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a\x1b-\x03\x09-" + + "\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091\x1f\x03\x093" + + "\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(\x16\x03\x09" + + "\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!\x03\x09\x1a" + + "\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03\x08\x02*" + + "\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03\x070\x0c" + + "\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x0671\x03" + + "\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 \x1d\x03" + + "\x05\x22\x05\x03\x050\x1d" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *idnaTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = idnaIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *idnaTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *idnaTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = idnaIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// idnaTrie. Total size: 28496 bytes (27.83 KiB). Checksum: 43288b883596640e. +type idnaTrie struct{} + +func newIdnaTrie(i int) *idnaTrie { + return &idnaTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 123: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 123 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 125 blocks, 8000 entries, 16000 bytes +// The third block is the zero block. +var idnaValues = [8000]uint16{ + // Block 0x0, offset 0x0 + 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, + 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, + 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, + 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, + 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, + 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, + 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, + 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, + 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, + 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, + 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, + // Block 0x1, offset 0x40 + 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, + 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, + 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, + 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, + 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, + 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, + 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, + 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, + 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, + 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, + 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, + 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, + 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, + // Block 0x4, offset 0x100 + 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, + 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, + 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, + 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, + 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, + 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, + 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, + 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, + 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, + // Block 0x5, offset 0x140 + 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, + 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, + 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, + 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, + 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, + 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, + 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, + 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, + // Block 0x6, offset 0x180 + 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, + 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, + 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, + 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, + 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, + 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, + 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, + 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, + 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, + 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, + 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, + 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, + 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, + 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, + 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, + 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, + 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, + 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, + 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, + // Block 0x8, offset 0x200 + 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, + 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, + 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, + 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, + 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, + 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, + 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, + 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, + 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, + // Block 0x9, offset 0x240 + 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, + 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, + 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, + 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, + 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, + 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, + 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, + 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, + 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, + 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, + // Block 0xa, offset 0x280 + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x1308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, + 0x286: 0x1308, 0x287: 0x1308, 0x288: 0x1308, 0x289: 0x1308, 0x28a: 0x1308, 0x28b: 0x1308, + 0x28c: 0x1308, 0x28d: 0x1308, 0x28e: 0x1308, 0x28f: 0x13c0, 0x290: 0x1308, 0x291: 0x1308, + 0x292: 0x1308, 0x293: 0x1308, 0x294: 0x1308, 0x295: 0x1308, 0x296: 0x1308, 0x297: 0x1308, + 0x298: 0x1308, 0x299: 0x1308, 0x29a: 0x1308, 0x29b: 0x1308, 0x29c: 0x1308, 0x29d: 0x1308, + 0x29e: 0x1308, 0x29f: 0x1308, 0x2a0: 0x1308, 0x2a1: 0x1308, 0x2a2: 0x1308, 0x2a3: 0x1308, + 0x2a4: 0x1308, 0x2a5: 0x1308, 0x2a6: 0x1308, 0x2a7: 0x1308, 0x2a8: 0x1308, 0x2a9: 0x1308, + 0x2aa: 0x1308, 0x2ab: 0x1308, 0x2ac: 0x1308, 0x2ad: 0x1308, 0x2ae: 0x1308, 0x2af: 0x1308, + 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, + 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, + 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, + 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, + 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, + 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, + 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, + 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, + 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, + 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, + // Block 0xc, offset 0x300 + 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, + 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, + 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, + 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, + 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, + 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, + 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, + 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, + 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, + 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, + 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, + // Block 0xd, offset 0x340 + 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, + 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, + 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, + 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, + 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, + 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, + 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, + 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, + 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, + 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, + 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, + // Block 0xe, offset 0x380 + 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x1308, 0x384: 0x1308, 0x385: 0x1308, + 0x386: 0x1308, 0x387: 0x1308, 0x388: 0x1318, 0x389: 0x1318, 0x38a: 0xe00d, 0x38b: 0x0008, + 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, + 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, + 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, + 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, + 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, + 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, + 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, + 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, + 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, + 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, + 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, + 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, + 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, + 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, + 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, + 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, + 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, + 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, + 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, + // Block 0x10, offset 0x400 + 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, + 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, + 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, + 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, + 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, + 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, + 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, + 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, + 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, + 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, + 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, + // Block 0x11, offset 0x440 + 0x440: 0x0040, 0x441: 0x0040, 0x442: 0x0040, 0x443: 0x0040, 0x444: 0x0040, 0x445: 0x0040, + 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0018, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0018, + 0x44c: 0x0018, 0x44d: 0x0018, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x1308, 0x451: 0x1308, + 0x452: 0x1308, 0x453: 0x1308, 0x454: 0x1308, 0x455: 0x1308, 0x456: 0x1308, 0x457: 0x1308, + 0x458: 0x1308, 0x459: 0x1308, 0x45a: 0x1308, 0x45b: 0x0018, 0x45c: 0x0340, 0x45d: 0x0040, + 0x45e: 0x0018, 0x45f: 0x0018, 0x460: 0x0208, 0x461: 0x0008, 0x462: 0x0408, 0x463: 0x0408, + 0x464: 0x0408, 0x465: 0x0408, 0x466: 0x0208, 0x467: 0x0408, 0x468: 0x0208, 0x469: 0x0408, + 0x46a: 0x0208, 0x46b: 0x0208, 0x46c: 0x0208, 0x46d: 0x0208, 0x46e: 0x0208, 0x46f: 0x0408, + 0x470: 0x0408, 0x471: 0x0408, 0x472: 0x0408, 0x473: 0x0208, 0x474: 0x0208, 0x475: 0x0208, + 0x476: 0x0208, 0x477: 0x0208, 0x478: 0x0208, 0x479: 0x0208, 0x47a: 0x0208, 0x47b: 0x0208, + 0x47c: 0x0208, 0x47d: 0x0208, 0x47e: 0x0208, 0x47f: 0x0208, + // Block 0x12, offset 0x480 + 0x480: 0x0408, 0x481: 0x0208, 0x482: 0x0208, 0x483: 0x0408, 0x484: 0x0408, 0x485: 0x0408, + 0x486: 0x0408, 0x487: 0x0408, 0x488: 0x0408, 0x489: 0x0408, 0x48a: 0x0408, 0x48b: 0x0408, + 0x48c: 0x0208, 0x48d: 0x0408, 0x48e: 0x0208, 0x48f: 0x0408, 0x490: 0x0208, 0x491: 0x0208, + 0x492: 0x0408, 0x493: 0x0408, 0x494: 0x0018, 0x495: 0x0408, 0x496: 0x1308, 0x497: 0x1308, + 0x498: 0x1308, 0x499: 0x1308, 0x49a: 0x1308, 0x49b: 0x1308, 0x49c: 0x1308, 0x49d: 0x0040, + 0x49e: 0x0018, 0x49f: 0x1308, 0x4a0: 0x1308, 0x4a1: 0x1308, 0x4a2: 0x1308, 0x4a3: 0x1308, + 0x4a4: 0x1308, 0x4a5: 0x0008, 0x4a6: 0x0008, 0x4a7: 0x1308, 0x4a8: 0x1308, 0x4a9: 0x0018, + 0x4aa: 0x1308, 0x4ab: 0x1308, 0x4ac: 0x1308, 0x4ad: 0x1308, 0x4ae: 0x0408, 0x4af: 0x0408, + 0x4b0: 0x0008, 0x4b1: 0x0008, 0x4b2: 0x0008, 0x4b3: 0x0008, 0x4b4: 0x0008, 0x4b5: 0x0008, + 0x4b6: 0x0008, 0x4b7: 0x0008, 0x4b8: 0x0008, 0x4b9: 0x0008, 0x4ba: 0x0208, 0x4bb: 0x0208, + 0x4bc: 0x0208, 0x4bd: 0x0008, 0x4be: 0x0008, 0x4bf: 0x0208, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0018, 0x4c1: 0x0018, 0x4c2: 0x0018, 0x4c3: 0x0018, 0x4c4: 0x0018, 0x4c5: 0x0018, + 0x4c6: 0x0018, 0x4c7: 0x0018, 0x4c8: 0x0018, 0x4c9: 0x0018, 0x4ca: 0x0018, 0x4cb: 0x0018, + 0x4cc: 0x0018, 0x4cd: 0x0018, 0x4ce: 0x0040, 0x4cf: 0x0340, 0x4d0: 0x0408, 0x4d1: 0x1308, + 0x4d2: 0x0208, 0x4d3: 0x0208, 0x4d4: 0x0208, 0x4d5: 0x0408, 0x4d6: 0x0408, 0x4d7: 0x0408, + 0x4d8: 0x0408, 0x4d9: 0x0408, 0x4da: 0x0208, 0x4db: 0x0208, 0x4dc: 0x0208, 0x4dd: 0x0208, + 0x4de: 0x0408, 0x4df: 0x0208, 0x4e0: 0x0208, 0x4e1: 0x0208, 0x4e2: 0x0208, 0x4e3: 0x0208, + 0x4e4: 0x0208, 0x4e5: 0x0208, 0x4e6: 0x0208, 0x4e7: 0x0208, 0x4e8: 0x0408, 0x4e9: 0x0208, + 0x4ea: 0x0408, 0x4eb: 0x0208, 0x4ec: 0x0408, 0x4ed: 0x0208, 0x4ee: 0x0208, 0x4ef: 0x0408, + 0x4f0: 0x1308, 0x4f1: 0x1308, 0x4f2: 0x1308, 0x4f3: 0x1308, 0x4f4: 0x1308, 0x4f5: 0x1308, + 0x4f6: 0x1308, 0x4f7: 0x1308, 0x4f8: 0x1308, 0x4f9: 0x1308, 0x4fa: 0x1308, 0x4fb: 0x1308, + 0x4fc: 0x1308, 0x4fd: 0x1308, 0x4fe: 0x1308, 0x4ff: 0x1308, + // Block 0x14, offset 0x500 + 0x500: 0x1008, 0x501: 0x1308, 0x502: 0x1308, 0x503: 0x1308, 0x504: 0x1308, 0x505: 0x1308, + 0x506: 0x1308, 0x507: 0x1308, 0x508: 0x1308, 0x509: 0x1008, 0x50a: 0x1008, 0x50b: 0x1008, + 0x50c: 0x1008, 0x50d: 0x1b08, 0x50e: 0x1008, 0x50f: 0x1008, 0x510: 0x0008, 0x511: 0x1308, + 0x512: 0x1308, 0x513: 0x1308, 0x514: 0x1308, 0x515: 0x1308, 0x516: 0x1308, 0x517: 0x1308, + 0x518: 0x04c9, 0x519: 0x0501, 0x51a: 0x0539, 0x51b: 0x0571, 0x51c: 0x05a9, 0x51d: 0x05e1, + 0x51e: 0x0619, 0x51f: 0x0651, 0x520: 0x0008, 0x521: 0x0008, 0x522: 0x1308, 0x523: 0x1308, + 0x524: 0x0018, 0x525: 0x0018, 0x526: 0x0008, 0x527: 0x0008, 0x528: 0x0008, 0x529: 0x0008, + 0x52a: 0x0008, 0x52b: 0x0008, 0x52c: 0x0008, 0x52d: 0x0008, 0x52e: 0x0008, 0x52f: 0x0008, + 0x530: 0x0018, 0x531: 0x0008, 0x532: 0x0008, 0x533: 0x0008, 0x534: 0x0008, 0x535: 0x0008, + 0x536: 0x0008, 0x537: 0x0008, 0x538: 0x0008, 0x539: 0x0008, 0x53a: 0x0008, 0x53b: 0x0008, + 0x53c: 0x0008, 0x53d: 0x0008, 0x53e: 0x0008, 0x53f: 0x0008, + // Block 0x15, offset 0x540 + 0x540: 0x0008, 0x541: 0x1308, 0x542: 0x1008, 0x543: 0x1008, 0x544: 0x0040, 0x545: 0x0008, + 0x546: 0x0008, 0x547: 0x0008, 0x548: 0x0008, 0x549: 0x0008, 0x54a: 0x0008, 0x54b: 0x0008, + 0x54c: 0x0008, 0x54d: 0x0040, 0x54e: 0x0040, 0x54f: 0x0008, 0x550: 0x0008, 0x551: 0x0040, + 0x552: 0x0040, 0x553: 0x0008, 0x554: 0x0008, 0x555: 0x0008, 0x556: 0x0008, 0x557: 0x0008, + 0x558: 0x0008, 0x559: 0x0008, 0x55a: 0x0008, 0x55b: 0x0008, 0x55c: 0x0008, 0x55d: 0x0008, + 0x55e: 0x0008, 0x55f: 0x0008, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x0008, 0x563: 0x0008, + 0x564: 0x0008, 0x565: 0x0008, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0040, + 0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008, + 0x570: 0x0008, 0x571: 0x0040, 0x572: 0x0008, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x1308, 0x57d: 0x0008, 0x57e: 0x1008, 0x57f: 0x1008, + // Block 0x16, offset 0x580 + 0x580: 0x1008, 0x581: 0x1308, 0x582: 0x1308, 0x583: 0x1308, 0x584: 0x1308, 0x585: 0x0040, + 0x586: 0x0040, 0x587: 0x1008, 0x588: 0x1008, 0x589: 0x0040, 0x58a: 0x0040, 0x58b: 0x1008, + 0x58c: 0x1008, 0x58d: 0x1b08, 0x58e: 0x0008, 0x58f: 0x0040, 0x590: 0x0040, 0x591: 0x0040, + 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x1008, + 0x598: 0x0040, 0x599: 0x0040, 0x59a: 0x0040, 0x59b: 0x0040, 0x59c: 0x0689, 0x59d: 0x06c1, + 0x59e: 0x0040, 0x59f: 0x06f9, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x1308, 0x5a3: 0x1308, + 0x5a4: 0x0040, 0x5a5: 0x0040, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, + 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, + 0x5b0: 0x0008, 0x5b1: 0x0008, 0x5b2: 0x0018, 0x5b3: 0x0018, 0x5b4: 0x0018, 0x5b5: 0x0018, + 0x5b6: 0x0018, 0x5b7: 0x0018, 0x5b8: 0x0018, 0x5b9: 0x0018, 0x5ba: 0x0018, 0x5bb: 0x0018, + 0x5bc: 0x0040, 0x5bd: 0x0040, 0x5be: 0x0040, 0x5bf: 0x0040, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0040, 0x5c1: 0x1308, 0x5c2: 0x1308, 0x5c3: 0x1008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0040, + 0x5cc: 0x0040, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, + 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, + 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, + 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0731, 0x5f4: 0x0040, 0x5f5: 0x0008, + 0x5f6: 0x0769, 0x5f7: 0x0040, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x1308, 0x5fd: 0x0040, 0x5fe: 0x1008, 0x5ff: 0x1008, + // Block 0x18, offset 0x600 + 0x600: 0x1008, 0x601: 0x1308, 0x602: 0x1308, 0x603: 0x0040, 0x604: 0x0040, 0x605: 0x0040, + 0x606: 0x0040, 0x607: 0x1308, 0x608: 0x1308, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x1308, + 0x60c: 0x1308, 0x60d: 0x1b08, 0x60e: 0x0040, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x1308, + 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x0040, + 0x618: 0x0040, 0x619: 0x07a1, 0x61a: 0x07d9, 0x61b: 0x0811, 0x61c: 0x0008, 0x61d: 0x0040, + 0x61e: 0x0849, 0x61f: 0x0040, 0x620: 0x0040, 0x621: 0x0040, 0x622: 0x0040, 0x623: 0x0040, + 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, + 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, + 0x630: 0x1308, 0x631: 0x1308, 0x632: 0x0008, 0x633: 0x0008, 0x634: 0x0008, 0x635: 0x1308, + 0x636: 0x0040, 0x637: 0x0040, 0x638: 0x0040, 0x639: 0x0040, 0x63a: 0x0040, 0x63b: 0x0040, + 0x63c: 0x0040, 0x63d: 0x0040, 0x63e: 0x0040, 0x63f: 0x0040, + // Block 0x19, offset 0x640 + 0x640: 0x0040, 0x641: 0x1308, 0x642: 0x1308, 0x643: 0x1008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0008, + 0x64c: 0x0008, 0x64d: 0x0008, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0008, + 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, + 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, + 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, + 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, + 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, + 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0040, 0x675: 0x0008, + 0x676: 0x0008, 0x677: 0x0008, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, + 0x67c: 0x1308, 0x67d: 0x0008, 0x67e: 0x1008, 0x67f: 0x1008, + // Block 0x1a, offset 0x680 + 0x680: 0x1008, 0x681: 0x1308, 0x682: 0x1308, 0x683: 0x1308, 0x684: 0x1308, 0x685: 0x1308, + 0x686: 0x0040, 0x687: 0x1308, 0x688: 0x1308, 0x689: 0x1008, 0x68a: 0x0040, 0x68b: 0x1008, + 0x68c: 0x1008, 0x68d: 0x1b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0008, 0x691: 0x0040, + 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, + 0x698: 0x0040, 0x699: 0x0040, 0x69a: 0x0040, 0x69b: 0x0040, 0x69c: 0x0040, 0x69d: 0x0040, + 0x69e: 0x0040, 0x69f: 0x0040, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x1308, 0x6a3: 0x1308, + 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, + 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, + 0x6b0: 0x0018, 0x6b1: 0x0018, 0x6b2: 0x0040, 0x6b3: 0x0040, 0x6b4: 0x0040, 0x6b5: 0x0040, + 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x0040, 0x6c1: 0x1308, 0x6c2: 0x1008, 0x6c3: 0x1008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, + 0x6cc: 0x0008, 0x6cd: 0x0040, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0040, + 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, + 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, + 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, + 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, + 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x1308, 0x6fd: 0x0008, 0x6fe: 0x1008, 0x6ff: 0x1308, + // Block 0x1c, offset 0x700 + 0x700: 0x1008, 0x701: 0x1308, 0x702: 0x1308, 0x703: 0x1308, 0x704: 0x1308, 0x705: 0x0040, + 0x706: 0x0040, 0x707: 0x1008, 0x708: 0x1008, 0x709: 0x0040, 0x70a: 0x0040, 0x70b: 0x1008, + 0x70c: 0x1008, 0x70d: 0x1b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0040, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x1308, 0x717: 0x1008, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0881, 0x71d: 0x08b9, + 0x71e: 0x0040, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x1308, 0x723: 0x1308, + 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0018, 0x731: 0x0008, 0x732: 0x0018, 0x733: 0x0018, 0x734: 0x0018, 0x735: 0x0018, + 0x736: 0x0018, 0x737: 0x0018, 0x738: 0x0040, 0x739: 0x0040, 0x73a: 0x0040, 0x73b: 0x0040, + 0x73c: 0x0040, 0x73d: 0x0040, 0x73e: 0x0040, 0x73f: 0x0040, + // Block 0x1d, offset 0x740 + 0x740: 0x0040, 0x741: 0x0040, 0x742: 0x1308, 0x743: 0x0008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0040, + 0x74c: 0x0040, 0x74d: 0x0040, 0x74e: 0x0008, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0008, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0040, 0x757: 0x0040, + 0x758: 0x0040, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0040, 0x75c: 0x0008, 0x75d: 0x0040, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0040, 0x761: 0x0040, 0x762: 0x0040, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0040, 0x766: 0x0040, 0x767: 0x0040, 0x768: 0x0008, 0x769: 0x0008, + 0x76a: 0x0008, 0x76b: 0x0040, 0x76c: 0x0040, 0x76d: 0x0040, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0008, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0008, 0x775: 0x0008, + 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x1008, 0x77f: 0x1008, + // Block 0x1e, offset 0x780 + 0x780: 0x1308, 0x781: 0x1008, 0x782: 0x1008, 0x783: 0x1008, 0x784: 0x1008, 0x785: 0x0040, + 0x786: 0x1308, 0x787: 0x1308, 0x788: 0x1308, 0x789: 0x0040, 0x78a: 0x1308, 0x78b: 0x1308, + 0x78c: 0x1308, 0x78d: 0x1b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, + 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x1308, 0x796: 0x1308, 0x797: 0x0040, + 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0040, 0x79d: 0x0040, + 0x79e: 0x0040, 0x79f: 0x0040, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x1308, 0x7a3: 0x1308, + 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, + 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, + 0x7b0: 0x0040, 0x7b1: 0x0040, 0x7b2: 0x0040, 0x7b3: 0x0040, 0x7b4: 0x0040, 0x7b5: 0x0040, + 0x7b6: 0x0040, 0x7b7: 0x0040, 0x7b8: 0x0018, 0x7b9: 0x0018, 0x7ba: 0x0018, 0x7bb: 0x0018, + 0x7bc: 0x0018, 0x7bd: 0x0018, 0x7be: 0x0018, 0x7bf: 0x0018, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0008, 0x7c1: 0x1308, 0x7c2: 0x1008, 0x7c3: 0x1008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0008, + 0x7cc: 0x0008, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0008, 0x7d7: 0x0008, + 0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0008, 0x7dc: 0x0008, 0x7dd: 0x0008, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x0008, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0008, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0040, + 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0040, 0x7f5: 0x0008, + 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x1308, 0x7fd: 0x0008, 0x7fe: 0x1008, 0x7ff: 0x1308, + // Block 0x20, offset 0x800 + 0x800: 0x1008, 0x801: 0x1008, 0x802: 0x1008, 0x803: 0x1008, 0x804: 0x1008, 0x805: 0x0040, + 0x806: 0x1308, 0x807: 0x1008, 0x808: 0x1008, 0x809: 0x0040, 0x80a: 0x1008, 0x80b: 0x1008, + 0x80c: 0x1308, 0x80d: 0x1b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x1008, 0x816: 0x1008, 0x817: 0x0040, + 0x818: 0x0040, 0x819: 0x0040, 0x81a: 0x0040, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0008, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x1308, 0x823: 0x1308, + 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0040, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0040, 0x839: 0x0040, 0x83a: 0x0040, 0x83b: 0x0040, + 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x0040, 0x83f: 0x0040, + // Block 0x21, offset 0x840 + 0x840: 0x1008, 0x841: 0x1308, 0x842: 0x1308, 0x843: 0x1308, 0x844: 0x1308, 0x845: 0x0040, + 0x846: 0x1008, 0x847: 0x1008, 0x848: 0x1008, 0x849: 0x0040, 0x84a: 0x1008, 0x84b: 0x1008, + 0x84c: 0x1008, 0x84d: 0x1b08, 0x84e: 0x0008, 0x84f: 0x0018, 0x850: 0x0040, 0x851: 0x0040, + 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x1008, + 0x858: 0x0018, 0x859: 0x0018, 0x85a: 0x0018, 0x85b: 0x0018, 0x85c: 0x0018, 0x85d: 0x0018, + 0x85e: 0x0018, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x1308, 0x863: 0x1308, + 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0018, 0x871: 0x0018, 0x872: 0x0018, 0x873: 0x0018, 0x874: 0x0018, 0x875: 0x0018, + 0x876: 0x0018, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0008, 0x87b: 0x0008, + 0x87c: 0x0008, 0x87d: 0x0008, 0x87e: 0x0008, 0x87f: 0x0008, + // Block 0x22, offset 0x880 + 0x880: 0x0040, 0x881: 0x0008, 0x882: 0x0008, 0x883: 0x0040, 0x884: 0x0008, 0x885: 0x0040, + 0x886: 0x0040, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0040, 0x88a: 0x0008, 0x88b: 0x0040, + 0x88c: 0x0040, 0x88d: 0x0008, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008, + 0x898: 0x0040, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008, + 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0040, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008, + 0x8a4: 0x0040, 0x8a5: 0x0008, 0x8a6: 0x0040, 0x8a7: 0x0008, 0x8a8: 0x0040, 0x8a9: 0x0040, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0040, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0008, 0x8b1: 0x1308, 0x8b2: 0x0008, 0x8b3: 0x0929, 0x8b4: 0x1308, 0x8b5: 0x1308, + 0x8b6: 0x1308, 0x8b7: 0x1308, 0x8b8: 0x1308, 0x8b9: 0x1308, 0x8ba: 0x0040, 0x8bb: 0x1308, + 0x8bc: 0x1308, 0x8bd: 0x0008, 0x8be: 0x0040, 0x8bf: 0x0040, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0008, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x09d1, 0x8c4: 0x0008, 0x8c5: 0x0008, + 0x8c6: 0x0008, 0x8c7: 0x0008, 0x8c8: 0x0040, 0x8c9: 0x0008, 0x8ca: 0x0008, 0x8cb: 0x0008, + 0x8cc: 0x0008, 0x8cd: 0x0a09, 0x8ce: 0x0008, 0x8cf: 0x0008, 0x8d0: 0x0008, 0x8d1: 0x0008, + 0x8d2: 0x0a41, 0x8d3: 0x0008, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0a79, + 0x8d8: 0x0008, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0ab1, 0x8dd: 0x0008, + 0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008, + 0x8e4: 0x0008, 0x8e5: 0x0008, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0ae9, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0040, 0x8ee: 0x0040, 0x8ef: 0x0040, + 0x8f0: 0x0040, 0x8f1: 0x1308, 0x8f2: 0x1308, 0x8f3: 0x0b21, 0x8f4: 0x1308, 0x8f5: 0x0b59, + 0x8f6: 0x0b91, 0x8f7: 0x0bc9, 0x8f8: 0x0c19, 0x8f9: 0x0c51, 0x8fa: 0x1308, 0x8fb: 0x1308, + 0x8fc: 0x1308, 0x8fd: 0x1308, 0x8fe: 0x1308, 0x8ff: 0x1008, + // Block 0x24, offset 0x900 + 0x900: 0x1308, 0x901: 0x0ca1, 0x902: 0x1308, 0x903: 0x1308, 0x904: 0x1b08, 0x905: 0x0018, + 0x906: 0x1308, 0x907: 0x1308, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008, + 0x90c: 0x0008, 0x90d: 0x1308, 0x90e: 0x1308, 0x90f: 0x1308, 0x910: 0x1308, 0x911: 0x1308, + 0x912: 0x1308, 0x913: 0x0cd9, 0x914: 0x1308, 0x915: 0x1308, 0x916: 0x1308, 0x917: 0x1308, + 0x918: 0x0040, 0x919: 0x1308, 0x91a: 0x1308, 0x91b: 0x1308, 0x91c: 0x1308, 0x91d: 0x0d11, + 0x91e: 0x1308, 0x91f: 0x1308, 0x920: 0x1308, 0x921: 0x1308, 0x922: 0x0d49, 0x923: 0x1308, + 0x924: 0x1308, 0x925: 0x1308, 0x926: 0x1308, 0x927: 0x0d81, 0x928: 0x1308, 0x929: 0x1308, + 0x92a: 0x1308, 0x92b: 0x1308, 0x92c: 0x0db9, 0x92d: 0x1308, 0x92e: 0x1308, 0x92f: 0x1308, + 0x930: 0x1308, 0x931: 0x1308, 0x932: 0x1308, 0x933: 0x1308, 0x934: 0x1308, 0x935: 0x1308, + 0x936: 0x1308, 0x937: 0x1308, 0x938: 0x1308, 0x939: 0x0df1, 0x93a: 0x1308, 0x93b: 0x1308, + 0x93c: 0x1308, 0x93d: 0x0040, 0x93e: 0x0018, 0x93f: 0x0018, + // Block 0x25, offset 0x940 + 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0008, 0x944: 0x0008, 0x945: 0x0008, + 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, + 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008, + 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0039, 0x96d: 0x0ed1, 0x96e: 0x0ee9, 0x96f: 0x0008, + 0x970: 0x0ef9, 0x971: 0x0f09, 0x972: 0x0f19, 0x973: 0x0f31, 0x974: 0x0249, 0x975: 0x0f41, + 0x976: 0x0259, 0x977: 0x0f51, 0x978: 0x0359, 0x979: 0x0f61, 0x97a: 0x0f71, 0x97b: 0x0008, + 0x97c: 0x00d9, 0x97d: 0x0f81, 0x97e: 0x0f99, 0x97f: 0x0269, + // Block 0x26, offset 0x980 + 0x980: 0x0fa9, 0x981: 0x0fb9, 0x982: 0x0279, 0x983: 0x0039, 0x984: 0x0fc9, 0x985: 0x0fe1, + 0x986: 0x059d, 0x987: 0x0ee9, 0x988: 0x0ef9, 0x989: 0x0f09, 0x98a: 0x0ff9, 0x98b: 0x1011, + 0x98c: 0x1029, 0x98d: 0x0f31, 0x98e: 0x0008, 0x98f: 0x0f51, 0x990: 0x0f61, 0x991: 0x1041, + 0x992: 0x00d9, 0x993: 0x1059, 0x994: 0x05b5, 0x995: 0x05b5, 0x996: 0x0f99, 0x997: 0x0fa9, + 0x998: 0x0fb9, 0x999: 0x059d, 0x99a: 0x1071, 0x99b: 0x1089, 0x99c: 0x05cd, 0x99d: 0x1099, + 0x99e: 0x10b1, 0x99f: 0x10c9, 0x9a0: 0x10e1, 0x9a1: 0x10f9, 0x9a2: 0x0f41, 0x9a3: 0x0269, + 0x9a4: 0x0fb9, 0x9a5: 0x1089, 0x9a6: 0x1099, 0x9a7: 0x10b1, 0x9a8: 0x1111, 0x9a9: 0x10e1, + 0x9aa: 0x10f9, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0008, 0x9ae: 0x0008, 0x9af: 0x0008, + 0x9b0: 0x0008, 0x9b1: 0x0008, 0x9b2: 0x0008, 0x9b3: 0x0008, 0x9b4: 0x0008, 0x9b5: 0x0008, + 0x9b6: 0x0008, 0x9b7: 0x0008, 0x9b8: 0x1129, 0x9b9: 0x0008, 0x9ba: 0x0008, 0x9bb: 0x0008, + 0x9bc: 0x0008, 0x9bd: 0x0008, 0x9be: 0x0008, 0x9bf: 0x0008, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, + 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, + 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, + 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x1141, 0x9dc: 0x1159, 0x9dd: 0x1169, + 0x9de: 0x1181, 0x9df: 0x1029, 0x9e0: 0x1199, 0x9e1: 0x11a9, 0x9e2: 0x11c1, 0x9e3: 0x11d9, + 0x9e4: 0x11f1, 0x9e5: 0x1209, 0x9e6: 0x1221, 0x9e7: 0x05e5, 0x9e8: 0x1239, 0x9e9: 0x1251, + 0x9ea: 0xe17d, 0x9eb: 0x1269, 0x9ec: 0x1281, 0x9ed: 0x1299, 0x9ee: 0x12b1, 0x9ef: 0x12c9, + 0x9f0: 0x12e1, 0x9f1: 0x12f9, 0x9f2: 0x1311, 0x9f3: 0x1329, 0x9f4: 0x1341, 0x9f5: 0x1359, + 0x9f6: 0x1371, 0x9f7: 0x1389, 0x9f8: 0x05fd, 0x9f9: 0x13a1, 0x9fa: 0x13b9, 0x9fb: 0x13d1, + 0x9fc: 0x13e1, 0x9fd: 0x13f9, 0x9fe: 0x1411, 0x9ff: 0x1429, + // Block 0x28, offset 0xa00 + 0xa00: 0xe00d, 0xa01: 0x0008, 0xa02: 0xe00d, 0xa03: 0x0008, 0xa04: 0xe00d, 0xa05: 0x0008, + 0xa06: 0xe00d, 0xa07: 0x0008, 0xa08: 0xe00d, 0xa09: 0x0008, 0xa0a: 0xe00d, 0xa0b: 0x0008, + 0xa0c: 0xe00d, 0xa0d: 0x0008, 0xa0e: 0xe00d, 0xa0f: 0x0008, 0xa10: 0xe00d, 0xa11: 0x0008, + 0xa12: 0xe00d, 0xa13: 0x0008, 0xa14: 0xe00d, 0xa15: 0x0008, 0xa16: 0xe00d, 0xa17: 0x0008, + 0xa18: 0xe00d, 0xa19: 0x0008, 0xa1a: 0xe00d, 0xa1b: 0x0008, 0xa1c: 0xe00d, 0xa1d: 0x0008, + 0xa1e: 0xe00d, 0xa1f: 0x0008, 0xa20: 0xe00d, 0xa21: 0x0008, 0xa22: 0xe00d, 0xa23: 0x0008, + 0xa24: 0xe00d, 0xa25: 0x0008, 0xa26: 0xe00d, 0xa27: 0x0008, 0xa28: 0xe00d, 0xa29: 0x0008, + 0xa2a: 0xe00d, 0xa2b: 0x0008, 0xa2c: 0xe00d, 0xa2d: 0x0008, 0xa2e: 0xe00d, 0xa2f: 0x0008, + 0xa30: 0xe00d, 0xa31: 0x0008, 0xa32: 0xe00d, 0xa33: 0x0008, 0xa34: 0xe00d, 0xa35: 0x0008, + 0xa36: 0xe00d, 0xa37: 0x0008, 0xa38: 0xe00d, 0xa39: 0x0008, 0xa3a: 0xe00d, 0xa3b: 0x0008, + 0xa3c: 0xe00d, 0xa3d: 0x0008, 0xa3e: 0xe00d, 0xa3f: 0x0008, + // Block 0x29, offset 0xa40 + 0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008, + 0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008, + 0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008, + 0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, + 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0615, 0xa5b: 0x0635, 0xa5c: 0x0008, 0xa5d: 0x0008, + 0xa5e: 0x1441, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008, + 0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008, + 0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008, + 0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008, + 0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008, + 0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008, + 0xa86: 0x0040, 0xa87: 0x0040, 0xa88: 0xe045, 0xa89: 0xe045, 0xa8a: 0xe045, 0xa8b: 0xe045, + 0xa8c: 0xe045, 0xa8d: 0xe045, 0xa8e: 0x0040, 0xa8f: 0x0040, 0xa90: 0x0008, 0xa91: 0x0008, + 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, + 0xa98: 0x0040, 0xa99: 0xe045, 0xa9a: 0x0040, 0xa9b: 0xe045, 0xa9c: 0x0040, 0xa9d: 0xe045, + 0xa9e: 0x0040, 0xa9f: 0xe045, 0xaa0: 0x0008, 0xaa1: 0x0008, 0xaa2: 0x0008, 0xaa3: 0x0008, + 0xaa4: 0x0008, 0xaa5: 0x0008, 0xaa6: 0x0008, 0xaa7: 0x0008, 0xaa8: 0xe045, 0xaa9: 0xe045, + 0xaaa: 0xe045, 0xaab: 0xe045, 0xaac: 0xe045, 0xaad: 0xe045, 0xaae: 0xe045, 0xaaf: 0xe045, + 0xab0: 0x0008, 0xab1: 0x1459, 0xab2: 0x0008, 0xab3: 0x1471, 0xab4: 0x0008, 0xab5: 0x1489, + 0xab6: 0x0008, 0xab7: 0x14a1, 0xab8: 0x0008, 0xab9: 0x14b9, 0xaba: 0x0008, 0xabb: 0x14d1, + 0xabc: 0x0008, 0xabd: 0x14e9, 0xabe: 0x0040, 0xabf: 0x0040, + // Block 0x2b, offset 0xac0 + 0xac0: 0x1501, 0xac1: 0x1531, 0xac2: 0x1561, 0xac3: 0x1591, 0xac4: 0x15c1, 0xac5: 0x15f1, + 0xac6: 0x1621, 0xac7: 0x1651, 0xac8: 0x1501, 0xac9: 0x1531, 0xaca: 0x1561, 0xacb: 0x1591, + 0xacc: 0x15c1, 0xacd: 0x15f1, 0xace: 0x1621, 0xacf: 0x1651, 0xad0: 0x1681, 0xad1: 0x16b1, + 0xad2: 0x16e1, 0xad3: 0x1711, 0xad4: 0x1741, 0xad5: 0x1771, 0xad6: 0x17a1, 0xad7: 0x17d1, + 0xad8: 0x1681, 0xad9: 0x16b1, 0xada: 0x16e1, 0xadb: 0x1711, 0xadc: 0x1741, 0xadd: 0x1771, + 0xade: 0x17a1, 0xadf: 0x17d1, 0xae0: 0x1801, 0xae1: 0x1831, 0xae2: 0x1861, 0xae3: 0x1891, + 0xae4: 0x18c1, 0xae5: 0x18f1, 0xae6: 0x1921, 0xae7: 0x1951, 0xae8: 0x1801, 0xae9: 0x1831, + 0xaea: 0x1861, 0xaeb: 0x1891, 0xaec: 0x18c1, 0xaed: 0x18f1, 0xaee: 0x1921, 0xaef: 0x1951, + 0xaf0: 0x0008, 0xaf1: 0x0008, 0xaf2: 0x1981, 0xaf3: 0x19b1, 0xaf4: 0x19d9, 0xaf5: 0x0040, + 0xaf6: 0x0008, 0xaf7: 0x1a01, 0xaf8: 0xe045, 0xaf9: 0xe045, 0xafa: 0x064d, 0xafb: 0x1459, + 0xafc: 0x19b1, 0xafd: 0x0666, 0xafe: 0x1a31, 0xaff: 0x0686, + // Block 0x2c, offset 0xb00 + 0xb00: 0x06a6, 0xb01: 0x1a4a, 0xb02: 0x1a79, 0xb03: 0x1aa9, 0xb04: 0x1ad1, 0xb05: 0x0040, + 0xb06: 0x0008, 0xb07: 0x1af9, 0xb08: 0x06c5, 0xb09: 0x1471, 0xb0a: 0x06dd, 0xb0b: 0x1489, + 0xb0c: 0x1aa9, 0xb0d: 0x1b2a, 0xb0e: 0x1b5a, 0xb0f: 0x1b8a, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x1bb9, 0xb14: 0x0040, 0xb15: 0x0040, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0xe045, 0xb19: 0xe045, 0xb1a: 0x06f5, 0xb1b: 0x14a1, 0xb1c: 0x0040, 0xb1d: 0x1bd2, + 0xb1e: 0x1c02, 0xb1f: 0x1c32, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x1c61, + 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, + 0xb2a: 0x070d, 0xb2b: 0x14d1, 0xb2c: 0xe04d, 0xb2d: 0x1c7a, 0xb2e: 0x03d2, 0xb2f: 0x1caa, + 0xb30: 0x0040, 0xb31: 0x0040, 0xb32: 0x1cb9, 0xb33: 0x1ce9, 0xb34: 0x1d11, 0xb35: 0x0040, + 0xb36: 0x0008, 0xb37: 0x1d39, 0xb38: 0x0725, 0xb39: 0x14b9, 0xb3a: 0x0515, 0xb3b: 0x14e9, + 0xb3c: 0x1ce9, 0xb3d: 0x073e, 0xb3e: 0x075e, 0xb3f: 0x0040, + // Block 0x2d, offset 0xb40 + 0xb40: 0x000a, 0xb41: 0x000a, 0xb42: 0x000a, 0xb43: 0x000a, 0xb44: 0x000a, 0xb45: 0x000a, + 0xb46: 0x000a, 0xb47: 0x000a, 0xb48: 0x000a, 0xb49: 0x000a, 0xb4a: 0x000a, 0xb4b: 0x03c0, + 0xb4c: 0x0003, 0xb4d: 0x0003, 0xb4e: 0x0340, 0xb4f: 0x0340, 0xb50: 0x0018, 0xb51: 0xe00d, + 0xb52: 0x0018, 0xb53: 0x0018, 0xb54: 0x0018, 0xb55: 0x0018, 0xb56: 0x0018, 0xb57: 0x077e, + 0xb58: 0x0018, 0xb59: 0x0018, 0xb5a: 0x0018, 0xb5b: 0x0018, 0xb5c: 0x0018, 0xb5d: 0x0018, + 0xb5e: 0x0018, 0xb5f: 0x0018, 0xb60: 0x0018, 0xb61: 0x0018, 0xb62: 0x0018, 0xb63: 0x0018, + 0xb64: 0x0040, 0xb65: 0x0040, 0xb66: 0x0040, 0xb67: 0x0018, 0xb68: 0x0040, 0xb69: 0x0040, + 0xb6a: 0x0340, 0xb6b: 0x0340, 0xb6c: 0x0340, 0xb6d: 0x0340, 0xb6e: 0x0340, 0xb6f: 0x000a, + 0xb70: 0x0018, 0xb71: 0x0018, 0xb72: 0x0018, 0xb73: 0x1d69, 0xb74: 0x1da1, 0xb75: 0x0018, + 0xb76: 0x1df1, 0xb77: 0x1e29, 0xb78: 0x0018, 0xb79: 0x0018, 0xb7a: 0x0018, 0xb7b: 0x0018, + 0xb7c: 0x1e7a, 0xb7d: 0x0018, 0xb7e: 0x079e, 0xb7f: 0x0018, + // Block 0x2e, offset 0xb80 + 0xb80: 0x0018, 0xb81: 0x0018, 0xb82: 0x0018, 0xb83: 0x0018, 0xb84: 0x0018, 0xb85: 0x0018, + 0xb86: 0x0018, 0xb87: 0x1e92, 0xb88: 0x1eaa, 0xb89: 0x1ec2, 0xb8a: 0x0018, 0xb8b: 0x0018, + 0xb8c: 0x0018, 0xb8d: 0x0018, 0xb8e: 0x0018, 0xb8f: 0x0018, 0xb90: 0x0018, 0xb91: 0x0018, + 0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x1ed9, + 0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018, + 0xb9e: 0x0018, 0xb9f: 0x000a, 0xba0: 0x03c0, 0xba1: 0x0340, 0xba2: 0x0340, 0xba3: 0x0340, + 0xba4: 0x03c0, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0040, 0xba8: 0x0040, 0xba9: 0x0040, + 0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x0340, + 0xbb0: 0x1f41, 0xbb1: 0x0f41, 0xbb2: 0x0040, 0xbb3: 0x0040, 0xbb4: 0x1f51, 0xbb5: 0x1f61, + 0xbb6: 0x1f71, 0xbb7: 0x1f81, 0xbb8: 0x1f91, 0xbb9: 0x1fa1, 0xbba: 0x1fb2, 0xbbb: 0x07bd, + 0xbbc: 0x1fc2, 0xbbd: 0x1fd2, 0xbbe: 0x1fe2, 0xbbf: 0x0f71, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x1f41, 0xbc1: 0x00c9, 0xbc2: 0x0069, 0xbc3: 0x0079, 0xbc4: 0x1f51, 0xbc5: 0x1f61, + 0xbc6: 0x1f71, 0xbc7: 0x1f81, 0xbc8: 0x1f91, 0xbc9: 0x1fa1, 0xbca: 0x1fb2, 0xbcb: 0x07d5, + 0xbcc: 0x1fc2, 0xbcd: 0x1fd2, 0xbce: 0x1fe2, 0xbcf: 0x0040, 0xbd0: 0x0039, 0xbd1: 0x0f09, + 0xbd2: 0x00d9, 0xbd3: 0x0369, 0xbd4: 0x0ff9, 0xbd5: 0x0249, 0xbd6: 0x0f51, 0xbd7: 0x0359, + 0xbd8: 0x0f61, 0xbd9: 0x0f71, 0xbda: 0x0f99, 0xbdb: 0x01d9, 0xbdc: 0x0fa9, 0xbdd: 0x0040, + 0xbde: 0x0040, 0xbdf: 0x0040, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, + 0xbe4: 0x0018, 0xbe5: 0x0018, 0xbe6: 0x0018, 0xbe7: 0x0018, 0xbe8: 0x1ff1, 0xbe9: 0x0018, + 0xbea: 0x0018, 0xbeb: 0x0018, 0xbec: 0x0018, 0xbed: 0x0018, 0xbee: 0x0018, 0xbef: 0x0018, + 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0018, 0xbf4: 0x0018, 0xbf5: 0x0018, + 0xbf6: 0x0018, 0xbf7: 0x0018, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, + 0xbfc: 0x0018, 0xbfd: 0x0018, 0xbfe: 0x0018, 0xbff: 0x0040, + // Block 0x30, offset 0xc00 + 0xc00: 0x07ee, 0xc01: 0x080e, 0xc02: 0x1159, 0xc03: 0x082d, 0xc04: 0x0018, 0xc05: 0x084e, + 0xc06: 0x086e, 0xc07: 0x1011, 0xc08: 0x0018, 0xc09: 0x088d, 0xc0a: 0x0f31, 0xc0b: 0x0249, + 0xc0c: 0x0249, 0xc0d: 0x0249, 0xc0e: 0x0249, 0xc0f: 0x2009, 0xc10: 0x0f41, 0xc11: 0x0f41, + 0xc12: 0x0359, 0xc13: 0x0359, 0xc14: 0x0018, 0xc15: 0x0f71, 0xc16: 0x2021, 0xc17: 0x0018, + 0xc18: 0x0018, 0xc19: 0x0f99, 0xc1a: 0x2039, 0xc1b: 0x0269, 0xc1c: 0x0269, 0xc1d: 0x0269, + 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x2049, 0xc21: 0x08ad, 0xc22: 0x2061, 0xc23: 0x0018, + 0xc24: 0x13d1, 0xc25: 0x0018, 0xc26: 0x2079, 0xc27: 0x0018, 0xc28: 0x13d1, 0xc29: 0x0018, + 0xc2a: 0x0f51, 0xc2b: 0x2091, 0xc2c: 0x0ee9, 0xc2d: 0x1159, 0xc2e: 0x0018, 0xc2f: 0x0f09, + 0xc30: 0x0f09, 0xc31: 0x1199, 0xc32: 0x0040, 0xc33: 0x0f61, 0xc34: 0x00d9, 0xc35: 0x20a9, + 0xc36: 0x20c1, 0xc37: 0x20d9, 0xc38: 0x20f1, 0xc39: 0x0f41, 0xc3a: 0x0018, 0xc3b: 0x08cd, + 0xc3c: 0x2109, 0xc3d: 0x10b1, 0xc3e: 0x10b1, 0xc3f: 0x2109, + // Block 0x31, offset 0xc40 + 0xc40: 0x08ed, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0ef9, + 0xc46: 0x0ef9, 0xc47: 0x0f09, 0xc48: 0x0f41, 0xc49: 0x0259, 0xc4a: 0x0018, 0xc4b: 0x0018, + 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0008, 0xc4f: 0x0018, 0xc50: 0x2121, 0xc51: 0x2151, + 0xc52: 0x2181, 0xc53: 0x21b9, 0xc54: 0x21e9, 0xc55: 0x2219, 0xc56: 0x2249, 0xc57: 0x2279, + 0xc58: 0x22a9, 0xc59: 0x22d9, 0xc5a: 0x2309, 0xc5b: 0x2339, 0xc5c: 0x2369, 0xc5d: 0x2399, + 0xc5e: 0x23c9, 0xc5f: 0x23f9, 0xc60: 0x0f41, 0xc61: 0x2421, 0xc62: 0x0905, 0xc63: 0x2439, + 0xc64: 0x1089, 0xc65: 0x2451, 0xc66: 0x0925, 0xc67: 0x2469, 0xc68: 0x2491, 0xc69: 0x0369, + 0xc6a: 0x24a9, 0xc6b: 0x0945, 0xc6c: 0x0359, 0xc6d: 0x1159, 0xc6e: 0x0ef9, 0xc6f: 0x0f61, + 0xc70: 0x0f41, 0xc71: 0x2421, 0xc72: 0x0965, 0xc73: 0x2439, 0xc74: 0x1089, 0xc75: 0x2451, + 0xc76: 0x0985, 0xc77: 0x2469, 0xc78: 0x2491, 0xc79: 0x0369, 0xc7a: 0x24a9, 0xc7b: 0x09a5, + 0xc7c: 0x0359, 0xc7d: 0x1159, 0xc7e: 0x0ef9, 0xc7f: 0x0f61, + // Block 0x32, offset 0xc80 + 0xc80: 0x0018, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0018, + 0xc86: 0x0018, 0xc87: 0x0018, 0xc88: 0x0018, 0xc89: 0x0018, 0xc8a: 0x0018, 0xc8b: 0x0040, + 0xc8c: 0x0040, 0xc8d: 0x0040, 0xc8e: 0x0040, 0xc8f: 0x0040, 0xc90: 0x0040, 0xc91: 0x0040, + 0xc92: 0x0040, 0xc93: 0x0040, 0xc94: 0x0040, 0xc95: 0x0040, 0xc96: 0x0040, 0xc97: 0x0040, + 0xc98: 0x0040, 0xc99: 0x0040, 0xc9a: 0x0040, 0xc9b: 0x0040, 0xc9c: 0x0040, 0xc9d: 0x0040, + 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x00c9, 0xca1: 0x0069, 0xca2: 0x0079, 0xca3: 0x1f51, + 0xca4: 0x1f61, 0xca5: 0x1f71, 0xca6: 0x1f81, 0xca7: 0x1f91, 0xca8: 0x1fa1, 0xca9: 0x2601, + 0xcaa: 0x2619, 0xcab: 0x2631, 0xcac: 0x2649, 0xcad: 0x2661, 0xcae: 0x2679, 0xcaf: 0x2691, + 0xcb0: 0x26a9, 0xcb1: 0x26c1, 0xcb2: 0x26d9, 0xcb3: 0x26f1, 0xcb4: 0x0a06, 0xcb5: 0x0a26, + 0xcb6: 0x0a46, 0xcb7: 0x0a66, 0xcb8: 0x0a86, 0xcb9: 0x0aa6, 0xcba: 0x0ac6, 0xcbb: 0x0ae6, + 0xcbc: 0x0b06, 0xcbd: 0x270a, 0xcbe: 0x2732, 0xcbf: 0x275a, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x2782, 0xcc1: 0x27aa, 0xcc2: 0x27d2, 0xcc3: 0x27fa, 0xcc4: 0x2822, 0xcc5: 0x284a, + 0xcc6: 0x2872, 0xcc7: 0x289a, 0xcc8: 0x0040, 0xcc9: 0x0040, 0xcca: 0x0040, 0xccb: 0x0040, + 0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040, + 0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040, + 0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0b26, 0xcdd: 0x0b46, + 0xcde: 0x0b66, 0xcdf: 0x0b86, 0xce0: 0x0ba6, 0xce1: 0x0bc6, 0xce2: 0x0be6, 0xce3: 0x0c06, + 0xce4: 0x0c26, 0xce5: 0x0c46, 0xce6: 0x0c66, 0xce7: 0x0c86, 0xce8: 0x0ca6, 0xce9: 0x0cc6, + 0xcea: 0x0ce6, 0xceb: 0x0d06, 0xcec: 0x0d26, 0xced: 0x0d46, 0xcee: 0x0d66, 0xcef: 0x0d86, + 0xcf0: 0x0da6, 0xcf1: 0x0dc6, 0xcf2: 0x0de6, 0xcf3: 0x0e06, 0xcf4: 0x0e26, 0xcf5: 0x0e46, + 0xcf6: 0x0039, 0xcf7: 0x0ee9, 0xcf8: 0x1159, 0xcf9: 0x0ef9, 0xcfa: 0x0f09, 0xcfb: 0x1199, + 0xcfc: 0x0f31, 0xcfd: 0x0249, 0xcfe: 0x0f41, 0xcff: 0x0259, + // Block 0x34, offset 0xd00 + 0xd00: 0x0f51, 0xd01: 0x0359, 0xd02: 0x0f61, 0xd03: 0x0f71, 0xd04: 0x00d9, 0xd05: 0x0f99, + 0xd06: 0x2039, 0xd07: 0x0269, 0xd08: 0x01d9, 0xd09: 0x0fa9, 0xd0a: 0x0fb9, 0xd0b: 0x1089, + 0xd0c: 0x0279, 0xd0d: 0x0369, 0xd0e: 0x0289, 0xd0f: 0x13d1, 0xd10: 0x0039, 0xd11: 0x0ee9, + 0xd12: 0x1159, 0xd13: 0x0ef9, 0xd14: 0x0f09, 0xd15: 0x1199, 0xd16: 0x0f31, 0xd17: 0x0249, + 0xd18: 0x0f41, 0xd19: 0x0259, 0xd1a: 0x0f51, 0xd1b: 0x0359, 0xd1c: 0x0f61, 0xd1d: 0x0f71, + 0xd1e: 0x00d9, 0xd1f: 0x0f99, 0xd20: 0x2039, 0xd21: 0x0269, 0xd22: 0x01d9, 0xd23: 0x0fa9, + 0xd24: 0x0fb9, 0xd25: 0x1089, 0xd26: 0x0279, 0xd27: 0x0369, 0xd28: 0x0289, 0xd29: 0x13d1, + 0xd2a: 0x1f41, 0xd2b: 0x0018, 0xd2c: 0x0018, 0xd2d: 0x0018, 0xd2e: 0x0018, 0xd2f: 0x0018, + 0xd30: 0x0018, 0xd31: 0x0018, 0xd32: 0x0018, 0xd33: 0x0018, 0xd34: 0x0018, 0xd35: 0x0018, + 0xd36: 0x0018, 0xd37: 0x0018, 0xd38: 0x0018, 0xd39: 0x0018, 0xd3a: 0x0018, 0xd3b: 0x0018, + 0xd3c: 0x0018, 0xd3d: 0x0018, 0xd3e: 0x0018, 0xd3f: 0x0018, + // Block 0x35, offset 0xd40 + 0xd40: 0x0008, 0xd41: 0x0008, 0xd42: 0x0008, 0xd43: 0x0008, 0xd44: 0x0008, 0xd45: 0x0008, + 0xd46: 0x0008, 0xd47: 0x0008, 0xd48: 0x0008, 0xd49: 0x0008, 0xd4a: 0x0008, 0xd4b: 0x0008, + 0xd4c: 0x0008, 0xd4d: 0x0008, 0xd4e: 0x0008, 0xd4f: 0x0008, 0xd50: 0x0008, 0xd51: 0x0008, + 0xd52: 0x0008, 0xd53: 0x0008, 0xd54: 0x0008, 0xd55: 0x0008, 0xd56: 0x0008, 0xd57: 0x0008, + 0xd58: 0x0008, 0xd59: 0x0008, 0xd5a: 0x0008, 0xd5b: 0x0008, 0xd5c: 0x0008, 0xd5d: 0x0008, + 0xd5e: 0x0008, 0xd5f: 0x0040, 0xd60: 0xe00d, 0xd61: 0x0008, 0xd62: 0x2971, 0xd63: 0x0ebd, + 0xd64: 0x2989, 0xd65: 0x0008, 0xd66: 0x0008, 0xd67: 0xe07d, 0xd68: 0x0008, 0xd69: 0xe01d, + 0xd6a: 0x0008, 0xd6b: 0xe03d, 0xd6c: 0x0008, 0xd6d: 0x0fe1, 0xd6e: 0x1281, 0xd6f: 0x0fc9, + 0xd70: 0x1141, 0xd71: 0x0008, 0xd72: 0xe00d, 0xd73: 0x0008, 0xd74: 0x0008, 0xd75: 0xe01d, + 0xd76: 0x0008, 0xd77: 0x0008, 0xd78: 0x0008, 0xd79: 0x0008, 0xd7a: 0x0008, 0xd7b: 0x0008, + 0xd7c: 0x0259, 0xd7d: 0x1089, 0xd7e: 0x29a1, 0xd7f: 0x29b9, + // Block 0x36, offset 0xd80 + 0xd80: 0xe00d, 0xd81: 0x0008, 0xd82: 0xe00d, 0xd83: 0x0008, 0xd84: 0xe00d, 0xd85: 0x0008, + 0xd86: 0xe00d, 0xd87: 0x0008, 0xd88: 0xe00d, 0xd89: 0x0008, 0xd8a: 0xe00d, 0xd8b: 0x0008, + 0xd8c: 0xe00d, 0xd8d: 0x0008, 0xd8e: 0xe00d, 0xd8f: 0x0008, 0xd90: 0xe00d, 0xd91: 0x0008, + 0xd92: 0xe00d, 0xd93: 0x0008, 0xd94: 0xe00d, 0xd95: 0x0008, 0xd96: 0xe00d, 0xd97: 0x0008, + 0xd98: 0xe00d, 0xd99: 0x0008, 0xd9a: 0xe00d, 0xd9b: 0x0008, 0xd9c: 0xe00d, 0xd9d: 0x0008, + 0xd9e: 0xe00d, 0xd9f: 0x0008, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0xe00d, 0xda3: 0x0008, + 0xda4: 0x0008, 0xda5: 0x0018, 0xda6: 0x0018, 0xda7: 0x0018, 0xda8: 0x0018, 0xda9: 0x0018, + 0xdaa: 0x0018, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0xe01d, 0xdae: 0x0008, 0xdaf: 0x1308, + 0xdb0: 0x1308, 0xdb1: 0x1308, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0040, 0xdb5: 0x0040, + 0xdb6: 0x0040, 0xdb7: 0x0040, 0xdb8: 0x0040, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, + 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x26fd, 0xdc1: 0x271d, 0xdc2: 0x273d, 0xdc3: 0x275d, 0xdc4: 0x277d, 0xdc5: 0x279d, + 0xdc6: 0x27bd, 0xdc7: 0x27dd, 0xdc8: 0x27fd, 0xdc9: 0x281d, 0xdca: 0x283d, 0xdcb: 0x285d, + 0xdcc: 0x287d, 0xdcd: 0x289d, 0xdce: 0x28bd, 0xdcf: 0x28dd, 0xdd0: 0x28fd, 0xdd1: 0x291d, + 0xdd2: 0x293d, 0xdd3: 0x295d, 0xdd4: 0x297d, 0xdd5: 0x299d, 0xdd6: 0x0040, 0xdd7: 0x0040, + 0xdd8: 0x0040, 0xdd9: 0x0040, 0xdda: 0x0040, 0xddb: 0x0040, 0xddc: 0x0040, 0xddd: 0x0040, + 0xdde: 0x0040, 0xddf: 0x0040, 0xde0: 0x0040, 0xde1: 0x0040, 0xde2: 0x0040, 0xde3: 0x0040, + 0xde4: 0x0040, 0xde5: 0x0040, 0xde6: 0x0040, 0xde7: 0x0040, 0xde8: 0x0040, 0xde9: 0x0040, + 0xdea: 0x0040, 0xdeb: 0x0040, 0xdec: 0x0040, 0xded: 0x0040, 0xdee: 0x0040, 0xdef: 0x0040, + 0xdf0: 0x0040, 0xdf1: 0x0040, 0xdf2: 0x0040, 0xdf3: 0x0040, 0xdf4: 0x0040, 0xdf5: 0x0040, + 0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0040, 0xdfa: 0x0040, 0xdfb: 0x0040, + 0xdfc: 0x0040, 0xdfd: 0x0040, 0xdfe: 0x0040, 0xdff: 0x0040, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, 0xe01: 0x0018, 0xe02: 0x29d1, 0xe03: 0x0018, 0xe04: 0x0018, 0xe05: 0x0008, + 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0018, 0xe09: 0x0018, 0xe0a: 0x0018, 0xe0b: 0x0018, + 0xe0c: 0x0018, 0xe0d: 0x0018, 0xe0e: 0x0018, 0xe0f: 0x0018, 0xe10: 0x0018, 0xe11: 0x0018, + 0xe12: 0x0018, 0xe13: 0x0018, 0xe14: 0x0018, 0xe15: 0x0018, 0xe16: 0x0018, 0xe17: 0x0018, + 0xe18: 0x0018, 0xe19: 0x0018, 0xe1a: 0x0018, 0xe1b: 0x0018, 0xe1c: 0x0018, 0xe1d: 0x0018, + 0xe1e: 0x0018, 0xe1f: 0x0018, 0xe20: 0x0018, 0xe21: 0x0018, 0xe22: 0x0018, 0xe23: 0x0018, + 0xe24: 0x0018, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x1308, 0xe2b: 0x1308, 0xe2c: 0x1308, 0xe2d: 0x1308, 0xe2e: 0x1018, 0xe2f: 0x1018, + 0xe30: 0x0018, 0xe31: 0x0018, 0xe32: 0x0018, 0xe33: 0x0018, 0xe34: 0x0018, 0xe35: 0x0018, + 0xe36: 0xe125, 0xe37: 0x0018, 0xe38: 0x29bd, 0xe39: 0x29dd, 0xe3a: 0x29fd, 0xe3b: 0x0018, + 0xe3c: 0x0008, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + // Block 0x39, offset 0xe40 + 0xe40: 0x2b3d, 0xe41: 0x2b5d, 0xe42: 0x2b7d, 0xe43: 0x2b9d, 0xe44: 0x2bbd, 0xe45: 0x2bdd, + 0xe46: 0x2bdd, 0xe47: 0x2bdd, 0xe48: 0x2bfd, 0xe49: 0x2bfd, 0xe4a: 0x2bfd, 0xe4b: 0x2bfd, + 0xe4c: 0x2c1d, 0xe4d: 0x2c1d, 0xe4e: 0x2c1d, 0xe4f: 0x2c3d, 0xe50: 0x2c5d, 0xe51: 0x2c5d, + 0xe52: 0x2a7d, 0xe53: 0x2a7d, 0xe54: 0x2c5d, 0xe55: 0x2c5d, 0xe56: 0x2c7d, 0xe57: 0x2c7d, + 0xe58: 0x2c5d, 0xe59: 0x2c5d, 0xe5a: 0x2a7d, 0xe5b: 0x2a7d, 0xe5c: 0x2c5d, 0xe5d: 0x2c5d, + 0xe5e: 0x2c3d, 0xe5f: 0x2c3d, 0xe60: 0x2c9d, 0xe61: 0x2c9d, 0xe62: 0x2cbd, 0xe63: 0x2cbd, + 0xe64: 0x0040, 0xe65: 0x2cdd, 0xe66: 0x2cfd, 0xe67: 0x2d1d, 0xe68: 0x2d1d, 0xe69: 0x2d3d, + 0xe6a: 0x2d5d, 0xe6b: 0x2d7d, 0xe6c: 0x2d9d, 0xe6d: 0x2dbd, 0xe6e: 0x2ddd, 0xe6f: 0x2dfd, + 0xe70: 0x2e1d, 0xe71: 0x2e3d, 0xe72: 0x2e3d, 0xe73: 0x2e5d, 0xe74: 0x2e7d, 0xe75: 0x2e7d, + 0xe76: 0x2e9d, 0xe77: 0x2ebd, 0xe78: 0x2e5d, 0xe79: 0x2edd, 0xe7a: 0x2efd, 0xe7b: 0x2edd, + 0xe7c: 0x2e5d, 0xe7d: 0x2f1d, 0xe7e: 0x2f3d, 0xe7f: 0x2f5d, + // Block 0x3a, offset 0xe80 + 0xe80: 0x2f7d, 0xe81: 0x2f9d, 0xe82: 0x2cfd, 0xe83: 0x2cdd, 0xe84: 0x2fbd, 0xe85: 0x2fdd, + 0xe86: 0x2ffd, 0xe87: 0x301d, 0xe88: 0x303d, 0xe89: 0x305d, 0xe8a: 0x307d, 0xe8b: 0x309d, + 0xe8c: 0x30bd, 0xe8d: 0x30dd, 0xe8e: 0x30fd, 0xe8f: 0x0040, 0xe90: 0x0018, 0xe91: 0x0018, + 0xe92: 0x311d, 0xe93: 0x313d, 0xe94: 0x315d, 0xe95: 0x317d, 0xe96: 0x319d, 0xe97: 0x31bd, + 0xe98: 0x31dd, 0xe99: 0x31fd, 0xe9a: 0x321d, 0xe9b: 0x323d, 0xe9c: 0x315d, 0xe9d: 0x325d, + 0xe9e: 0x327d, 0xe9f: 0x329d, 0xea0: 0x0008, 0xea1: 0x0008, 0xea2: 0x0008, 0xea3: 0x0008, + 0xea4: 0x0008, 0xea5: 0x0008, 0xea6: 0x0008, 0xea7: 0x0008, 0xea8: 0x0008, 0xea9: 0x0008, + 0xeaa: 0x0008, 0xeab: 0x0008, 0xeac: 0x0008, 0xead: 0x0008, 0xeae: 0x0008, 0xeaf: 0x0008, + 0xeb0: 0x0008, 0xeb1: 0x0008, 0xeb2: 0x0008, 0xeb3: 0x0008, 0xeb4: 0x0008, 0xeb5: 0x0008, + 0xeb6: 0x0008, 0xeb7: 0x0008, 0xeb8: 0x0008, 0xeb9: 0x0008, 0xeba: 0x0008, 0xebb: 0x0040, + 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040, + // Block 0x3b, offset 0xec0 + 0xec0: 0x36a2, 0xec1: 0x36d2, 0xec2: 0x3702, 0xec3: 0x3732, 0xec4: 0x32bd, 0xec5: 0x32dd, + 0xec6: 0x32fd, 0xec7: 0x331d, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018, + 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x333d, 0xed1: 0x3761, + 0xed2: 0x3779, 0xed3: 0x3791, 0xed4: 0x37a9, 0xed5: 0x37c1, 0xed6: 0x37d9, 0xed7: 0x37f1, + 0xed8: 0x3809, 0xed9: 0x3821, 0xeda: 0x3839, 0xedb: 0x3851, 0xedc: 0x3869, 0xedd: 0x3881, + 0xede: 0x3899, 0xedf: 0x38b1, 0xee0: 0x335d, 0xee1: 0x337d, 0xee2: 0x339d, 0xee3: 0x33bd, + 0xee4: 0x33dd, 0xee5: 0x33dd, 0xee6: 0x33fd, 0xee7: 0x341d, 0xee8: 0x343d, 0xee9: 0x345d, + 0xeea: 0x347d, 0xeeb: 0x349d, 0xeec: 0x34bd, 0xeed: 0x34dd, 0xeee: 0x34fd, 0xeef: 0x351d, + 0xef0: 0x353d, 0xef1: 0x355d, 0xef2: 0x357d, 0xef3: 0x359d, 0xef4: 0x35bd, 0xef5: 0x35dd, + 0xef6: 0x35fd, 0xef7: 0x361d, 0xef8: 0x363d, 0xef9: 0x365d, 0xefa: 0x367d, 0xefb: 0x369d, + 0xefc: 0x38c9, 0xefd: 0x3901, 0xefe: 0x36bd, 0xeff: 0x0018, + // Block 0x3c, offset 0xf00 + 0xf00: 0x36dd, 0xf01: 0x36fd, 0xf02: 0x371d, 0xf03: 0x373d, 0xf04: 0x375d, 0xf05: 0x377d, + 0xf06: 0x379d, 0xf07: 0x37bd, 0xf08: 0x37dd, 0xf09: 0x37fd, 0xf0a: 0x381d, 0xf0b: 0x383d, + 0xf0c: 0x385d, 0xf0d: 0x387d, 0xf0e: 0x389d, 0xf0f: 0x38bd, 0xf10: 0x38dd, 0xf11: 0x38fd, + 0xf12: 0x391d, 0xf13: 0x393d, 0xf14: 0x395d, 0xf15: 0x397d, 0xf16: 0x399d, 0xf17: 0x39bd, + 0xf18: 0x39dd, 0xf19: 0x39fd, 0xf1a: 0x3a1d, 0xf1b: 0x3a3d, 0xf1c: 0x3a5d, 0xf1d: 0x3a7d, + 0xf1e: 0x3a9d, 0xf1f: 0x3abd, 0xf20: 0x3add, 0xf21: 0x3afd, 0xf22: 0x3b1d, 0xf23: 0x3b3d, + 0xf24: 0x3b5d, 0xf25: 0x3b7d, 0xf26: 0x127d, 0xf27: 0x3b9d, 0xf28: 0x3bbd, 0xf29: 0x3bdd, + 0xf2a: 0x3bfd, 0xf2b: 0x3c1d, 0xf2c: 0x3c3d, 0xf2d: 0x3c5d, 0xf2e: 0x239d, 0xf2f: 0x3c7d, + 0xf30: 0x3c9d, 0xf31: 0x3939, 0xf32: 0x3951, 0xf33: 0x3969, 0xf34: 0x3981, 0xf35: 0x3999, + 0xf36: 0x39b1, 0xf37: 0x39c9, 0xf38: 0x39e1, 0xf39: 0x39f9, 0xf3a: 0x3a11, 0xf3b: 0x3a29, + 0xf3c: 0x3a41, 0xf3d: 0x3a59, 0xf3e: 0x3a71, 0xf3f: 0x3a89, + // Block 0x3d, offset 0xf40 + 0xf40: 0x3aa1, 0xf41: 0x3ac9, 0xf42: 0x3af1, 0xf43: 0x3b19, 0xf44: 0x3b41, 0xf45: 0x3b69, + 0xf46: 0x3b91, 0xf47: 0x3bb9, 0xf48: 0x3be1, 0xf49: 0x3c09, 0xf4a: 0x3c39, 0xf4b: 0x3c69, + 0xf4c: 0x3c99, 0xf4d: 0x3cbd, 0xf4e: 0x3cb1, 0xf4f: 0x3cdd, 0xf50: 0x3cfd, 0xf51: 0x3d15, + 0xf52: 0x3d2d, 0xf53: 0x3d45, 0xf54: 0x3d5d, 0xf55: 0x3d5d, 0xf56: 0x3d45, 0xf57: 0x3d75, + 0xf58: 0x07bd, 0xf59: 0x3d8d, 0xf5a: 0x3da5, 0xf5b: 0x3dbd, 0xf5c: 0x3dd5, 0xf5d: 0x3ded, + 0xf5e: 0x3e05, 0xf5f: 0x3e1d, 0xf60: 0x3e35, 0xf61: 0x3e4d, 0xf62: 0x3e65, 0xf63: 0x3e7d, + 0xf64: 0x3e95, 0xf65: 0x3e95, 0xf66: 0x3ead, 0xf67: 0x3ead, 0xf68: 0x3ec5, 0xf69: 0x3ec5, + 0xf6a: 0x3edd, 0xf6b: 0x3ef5, 0xf6c: 0x3f0d, 0xf6d: 0x3f25, 0xf6e: 0x3f3d, 0xf6f: 0x3f3d, + 0xf70: 0x3f55, 0xf71: 0x3f55, 0xf72: 0x3f55, 0xf73: 0x3f6d, 0xf74: 0x3f85, 0xf75: 0x3f9d, + 0xf76: 0x3fb5, 0xf77: 0x3f9d, 0xf78: 0x3fcd, 0xf79: 0x3fe5, 0xf7a: 0x3f6d, 0xf7b: 0x3ffd, + 0xf7c: 0x4015, 0xf7d: 0x4015, 0xf7e: 0x4015, 0xf7f: 0x0040, + // Block 0x3e, offset 0xf80 + 0xf80: 0x3cc9, 0xf81: 0x3d31, 0xf82: 0x3d99, 0xf83: 0x3e01, 0xf84: 0x3e51, 0xf85: 0x3eb9, + 0xf86: 0x3f09, 0xf87: 0x3f59, 0xf88: 0x3fd9, 0xf89: 0x4041, 0xf8a: 0x4091, 0xf8b: 0x40e1, + 0xf8c: 0x4131, 0xf8d: 0x4199, 0xf8e: 0x4201, 0xf8f: 0x4251, 0xf90: 0x42a1, 0xf91: 0x42d9, + 0xf92: 0x4329, 0xf93: 0x4391, 0xf94: 0x43f9, 0xf95: 0x4431, 0xf96: 0x44b1, 0xf97: 0x4549, + 0xf98: 0x45c9, 0xf99: 0x4619, 0xf9a: 0x4699, 0xf9b: 0x4719, 0xf9c: 0x4781, 0xf9d: 0x47d1, + 0xf9e: 0x4821, 0xf9f: 0x4871, 0xfa0: 0x48d9, 0xfa1: 0x4959, 0xfa2: 0x49c1, 0xfa3: 0x4a11, + 0xfa4: 0x4a61, 0xfa5: 0x4ab1, 0xfa6: 0x4ae9, 0xfa7: 0x4b21, 0xfa8: 0x4b59, 0xfa9: 0x4b91, + 0xfaa: 0x4be1, 0xfab: 0x4c31, 0xfac: 0x4cb1, 0xfad: 0x4d01, 0xfae: 0x4d69, 0xfaf: 0x4de9, + 0xfb0: 0x4e39, 0xfb1: 0x4e71, 0xfb2: 0x4ea9, 0xfb3: 0x4f29, 0xfb4: 0x4f91, 0xfb5: 0x5011, + 0xfb6: 0x5061, 0xfb7: 0x50e1, 0xfb8: 0x5119, 0xfb9: 0x5169, 0xfba: 0x51b9, 0xfbb: 0x5209, + 0xfbc: 0x5259, 0xfbd: 0x52a9, 0xfbe: 0x5311, 0xfbf: 0x5361, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x5399, 0xfc1: 0x53e9, 0xfc2: 0x5439, 0xfc3: 0x5489, 0xfc4: 0x54f1, 0xfc5: 0x5541, + 0xfc6: 0x5591, 0xfc7: 0x55e1, 0xfc8: 0x5661, 0xfc9: 0x56c9, 0xfca: 0x5701, 0xfcb: 0x5781, + 0xfcc: 0x57b9, 0xfcd: 0x5821, 0xfce: 0x5889, 0xfcf: 0x58d9, 0xfd0: 0x5929, 0xfd1: 0x5979, + 0xfd2: 0x59e1, 0xfd3: 0x5a19, 0xfd4: 0x5a69, 0xfd5: 0x5ad1, 0xfd6: 0x5b09, 0xfd7: 0x5b89, + 0xfd8: 0x5bd9, 0xfd9: 0x5c01, 0xfda: 0x5c29, 0xfdb: 0x5c51, 0xfdc: 0x5c79, 0xfdd: 0x5ca1, + 0xfde: 0x5cc9, 0xfdf: 0x5cf1, 0xfe0: 0x5d19, 0xfe1: 0x5d41, 0xfe2: 0x5d69, 0xfe3: 0x5d99, + 0xfe4: 0x5dc9, 0xfe5: 0x5df9, 0xfe6: 0x5e29, 0xfe7: 0x5e59, 0xfe8: 0x5e89, 0xfe9: 0x5eb9, + 0xfea: 0x5ee9, 0xfeb: 0x5f19, 0xfec: 0x5f49, 0xfed: 0x5f79, 0xfee: 0x5fa9, 0xfef: 0x5fd9, + 0xff0: 0x6009, 0xff1: 0x402d, 0xff2: 0x6039, 0xff3: 0x6051, 0xff4: 0x404d, 0xff5: 0x6069, + 0xff6: 0x6081, 0xff7: 0x6099, 0xff8: 0x406d, 0xff9: 0x406d, 0xffa: 0x60b1, 0xffb: 0x60c9, + 0xffc: 0x6101, 0xffd: 0x6139, 0xffe: 0x6171, 0xfff: 0x61a9, + // Block 0x40, offset 0x1000 + 0x1000: 0x6211, 0x1001: 0x6229, 0x1002: 0x408d, 0x1003: 0x6241, 0x1004: 0x6259, 0x1005: 0x6271, + 0x1006: 0x6289, 0x1007: 0x62a1, 0x1008: 0x40ad, 0x1009: 0x62b9, 0x100a: 0x62e1, 0x100b: 0x62f9, + 0x100c: 0x40cd, 0x100d: 0x40cd, 0x100e: 0x6311, 0x100f: 0x6329, 0x1010: 0x6341, 0x1011: 0x40ed, + 0x1012: 0x410d, 0x1013: 0x412d, 0x1014: 0x414d, 0x1015: 0x416d, 0x1016: 0x6359, 0x1017: 0x6371, + 0x1018: 0x6389, 0x1019: 0x63a1, 0x101a: 0x63b9, 0x101b: 0x418d, 0x101c: 0x63d1, 0x101d: 0x63e9, + 0x101e: 0x6401, 0x101f: 0x41ad, 0x1020: 0x41cd, 0x1021: 0x6419, 0x1022: 0x41ed, 0x1023: 0x420d, + 0x1024: 0x422d, 0x1025: 0x6431, 0x1026: 0x424d, 0x1027: 0x6449, 0x1028: 0x6479, 0x1029: 0x6211, + 0x102a: 0x426d, 0x102b: 0x428d, 0x102c: 0x42ad, 0x102d: 0x42cd, 0x102e: 0x64b1, 0x102f: 0x64f1, + 0x1030: 0x6539, 0x1031: 0x6551, 0x1032: 0x42ed, 0x1033: 0x6569, 0x1034: 0x6581, 0x1035: 0x6599, + 0x1036: 0x430d, 0x1037: 0x65b1, 0x1038: 0x65c9, 0x1039: 0x65b1, 0x103a: 0x65e1, 0x103b: 0x65f9, + 0x103c: 0x432d, 0x103d: 0x6611, 0x103e: 0x6629, 0x103f: 0x6611, + // Block 0x41, offset 0x1040 + 0x1040: 0x434d, 0x1041: 0x436d, 0x1042: 0x0040, 0x1043: 0x6641, 0x1044: 0x6659, 0x1045: 0x6671, + 0x1046: 0x6689, 0x1047: 0x0040, 0x1048: 0x66c1, 0x1049: 0x66d9, 0x104a: 0x66f1, 0x104b: 0x6709, + 0x104c: 0x6721, 0x104d: 0x6739, 0x104e: 0x6401, 0x104f: 0x6751, 0x1050: 0x6769, 0x1051: 0x6781, + 0x1052: 0x438d, 0x1053: 0x6799, 0x1054: 0x6289, 0x1055: 0x43ad, 0x1056: 0x43cd, 0x1057: 0x67b1, + 0x1058: 0x0040, 0x1059: 0x43ed, 0x105a: 0x67c9, 0x105b: 0x67e1, 0x105c: 0x67f9, 0x105d: 0x6811, + 0x105e: 0x6829, 0x105f: 0x6859, 0x1060: 0x6889, 0x1061: 0x68b1, 0x1062: 0x68d9, 0x1063: 0x6901, + 0x1064: 0x6929, 0x1065: 0x6951, 0x1066: 0x6979, 0x1067: 0x69a1, 0x1068: 0x69c9, 0x1069: 0x69f1, + 0x106a: 0x6a21, 0x106b: 0x6a51, 0x106c: 0x6a81, 0x106d: 0x6ab1, 0x106e: 0x6ae1, 0x106f: 0x6b11, + 0x1070: 0x6b41, 0x1071: 0x6b71, 0x1072: 0x6ba1, 0x1073: 0x6bd1, 0x1074: 0x6c01, 0x1075: 0x6c31, + 0x1076: 0x6c61, 0x1077: 0x6c91, 0x1078: 0x6cc1, 0x1079: 0x6cf1, 0x107a: 0x6d21, 0x107b: 0x6d51, + 0x107c: 0x6d81, 0x107d: 0x6db1, 0x107e: 0x6de1, 0x107f: 0x440d, + // Block 0x42, offset 0x1080 + 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008, + 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008, + 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008, + 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008, + 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008, + 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008, + 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008, + 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x1308, + 0x10b0: 0x1318, 0x10b1: 0x1318, 0x10b2: 0x1318, 0x10b3: 0x0018, 0x10b4: 0x1308, 0x10b5: 0x1308, + 0x10b6: 0x1308, 0x10b7: 0x1308, 0x10b8: 0x1308, 0x10b9: 0x1308, 0x10ba: 0x1308, 0x10bb: 0x1308, + 0x10bc: 0x1308, 0x10bd: 0x1308, 0x10be: 0x0018, 0x10bf: 0x0008, + // Block 0x43, offset 0x10c0 + 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, + 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, + 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, + 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, + 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x0ea1, 0x10dd: 0x6e11, + 0x10de: 0x1308, 0x10df: 0x1308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008, + 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008, + 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008, + 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008, + 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008, + 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008, + // Block 0x44, offset 0x1100 + 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018, + 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018, + 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018, + 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008, + 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008, + 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008, + 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, + 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008, + 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008, + 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008, + 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008, + // Block 0x45, offset 0x1140 + 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, + 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, + 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, + 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, + 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008, + 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008, + 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, + 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, + 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, + 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d, + 0x117c: 0x0008, 0x117d: 0x442d, 0x117e: 0xe00d, 0x117f: 0x0008, + // Block 0x46, offset 0x1180 + 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, + 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d, + 0x118c: 0x0008, 0x118d: 0x11d9, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, + 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, + 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, + 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, + 0x11aa: 0x6e29, 0x11ab: 0x1029, 0x11ac: 0x11c1, 0x11ad: 0x6e41, 0x11ae: 0x1221, 0x11af: 0x0040, + 0x11b0: 0x6e59, 0x11b1: 0x6e71, 0x11b2: 0x1239, 0x11b3: 0x444d, 0x11b4: 0xe00d, 0x11b5: 0x0008, + 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0x0040, 0x11b9: 0x0040, 0x11ba: 0x0040, 0x11bb: 0x0040, + 0x11bc: 0x0040, 0x11bd: 0x0040, 0x11be: 0x0040, 0x11bf: 0x0040, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x64d5, 0x11c1: 0x64f5, 0x11c2: 0x6515, 0x11c3: 0x6535, 0x11c4: 0x6555, 0x11c5: 0x6575, + 0x11c6: 0x6595, 0x11c7: 0x65b5, 0x11c8: 0x65d5, 0x11c9: 0x65f5, 0x11ca: 0x6615, 0x11cb: 0x6635, + 0x11cc: 0x6655, 0x11cd: 0x6675, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x6695, 0x11d1: 0x0008, + 0x11d2: 0x66b5, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x66d5, 0x11d6: 0x66f5, 0x11d7: 0x6715, + 0x11d8: 0x6735, 0x11d9: 0x6755, 0x11da: 0x6775, 0x11db: 0x6795, 0x11dc: 0x67b5, 0x11dd: 0x67d5, + 0x11de: 0x67f5, 0x11df: 0x0008, 0x11e0: 0x6815, 0x11e1: 0x0008, 0x11e2: 0x6835, 0x11e3: 0x0008, + 0x11e4: 0x0008, 0x11e5: 0x6855, 0x11e6: 0x6875, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008, + 0x11ea: 0x6895, 0x11eb: 0x68b5, 0x11ec: 0x68d5, 0x11ed: 0x68f5, 0x11ee: 0x6915, 0x11ef: 0x6935, + 0x11f0: 0x6955, 0x11f1: 0x6975, 0x11f2: 0x6995, 0x11f3: 0x69b5, 0x11f4: 0x69d5, 0x11f5: 0x69f5, + 0x11f6: 0x6a15, 0x11f7: 0x6a35, 0x11f8: 0x6a55, 0x11f9: 0x6a75, 0x11fa: 0x6a95, 0x11fb: 0x6ab5, + 0x11fc: 0x6ad5, 0x11fd: 0x6af5, 0x11fe: 0x6b15, 0x11ff: 0x6b35, + // Block 0x48, offset 0x1200 + 0x1200: 0x7a95, 0x1201: 0x7ab5, 0x1202: 0x7ad5, 0x1203: 0x7af5, 0x1204: 0x7b15, 0x1205: 0x7b35, + 0x1206: 0x7b55, 0x1207: 0x7b75, 0x1208: 0x7b95, 0x1209: 0x7bb5, 0x120a: 0x7bd5, 0x120b: 0x7bf5, + 0x120c: 0x7c15, 0x120d: 0x7c35, 0x120e: 0x7c55, 0x120f: 0x6ec9, 0x1210: 0x6ef1, 0x1211: 0x6f19, + 0x1212: 0x7c75, 0x1213: 0x7c95, 0x1214: 0x7cb5, 0x1215: 0x6f41, 0x1216: 0x6f69, 0x1217: 0x6f91, + 0x1218: 0x7cd5, 0x1219: 0x7cf5, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, + 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, + 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, + 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, + 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040, + 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, + 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, + // Block 0x49, offset 0x1240 + 0x1240: 0x6fb9, 0x1241: 0x6fd1, 0x1242: 0x6fe9, 0x1243: 0x7d15, 0x1244: 0x7d35, 0x1245: 0x7001, + 0x1246: 0x7001, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040, + 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040, + 0x1252: 0x0040, 0x1253: 0x7019, 0x1254: 0x7041, 0x1255: 0x7069, 0x1256: 0x7091, 0x1257: 0x70b9, + 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x70e1, + 0x125e: 0x1308, 0x125f: 0x7109, 0x1260: 0x7131, 0x1261: 0x20a9, 0x1262: 0x20f1, 0x1263: 0x7149, + 0x1264: 0x7161, 0x1265: 0x7179, 0x1266: 0x7191, 0x1267: 0x71a9, 0x1268: 0x71c1, 0x1269: 0x1fb2, + 0x126a: 0x71d9, 0x126b: 0x7201, 0x126c: 0x7229, 0x126d: 0x7261, 0x126e: 0x7299, 0x126f: 0x72c1, + 0x1270: 0x72e9, 0x1271: 0x7311, 0x1272: 0x7339, 0x1273: 0x7361, 0x1274: 0x7389, 0x1275: 0x73b1, + 0x1276: 0x73d9, 0x1277: 0x0040, 0x1278: 0x7401, 0x1279: 0x7429, 0x127a: 0x7451, 0x127b: 0x7479, + 0x127c: 0x74a1, 0x127d: 0x0040, 0x127e: 0x74c9, 0x127f: 0x0040, + // Block 0x4a, offset 0x1280 + 0x1280: 0x74f1, 0x1281: 0x7519, 0x1282: 0x0040, 0x1283: 0x7541, 0x1284: 0x7569, 0x1285: 0x0040, + 0x1286: 0x7591, 0x1287: 0x75b9, 0x1288: 0x75e1, 0x1289: 0x7609, 0x128a: 0x7631, 0x128b: 0x7659, + 0x128c: 0x7681, 0x128d: 0x76a9, 0x128e: 0x76d1, 0x128f: 0x76f9, 0x1290: 0x7721, 0x1291: 0x7721, + 0x1292: 0x7739, 0x1293: 0x7739, 0x1294: 0x7739, 0x1295: 0x7739, 0x1296: 0x7751, 0x1297: 0x7751, + 0x1298: 0x7751, 0x1299: 0x7751, 0x129a: 0x7769, 0x129b: 0x7769, 0x129c: 0x7769, 0x129d: 0x7769, + 0x129e: 0x7781, 0x129f: 0x7781, 0x12a0: 0x7781, 0x12a1: 0x7781, 0x12a2: 0x7799, 0x12a3: 0x7799, + 0x12a4: 0x7799, 0x12a5: 0x7799, 0x12a6: 0x77b1, 0x12a7: 0x77b1, 0x12a8: 0x77b1, 0x12a9: 0x77b1, + 0x12aa: 0x77c9, 0x12ab: 0x77c9, 0x12ac: 0x77c9, 0x12ad: 0x77c9, 0x12ae: 0x77e1, 0x12af: 0x77e1, + 0x12b0: 0x77e1, 0x12b1: 0x77e1, 0x12b2: 0x77f9, 0x12b3: 0x77f9, 0x12b4: 0x77f9, 0x12b5: 0x77f9, + 0x12b6: 0x7811, 0x12b7: 0x7811, 0x12b8: 0x7811, 0x12b9: 0x7811, 0x12ba: 0x7829, 0x12bb: 0x7829, + 0x12bc: 0x7829, 0x12bd: 0x7829, 0x12be: 0x7841, 0x12bf: 0x7841, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x7841, 0x12c1: 0x7841, 0x12c2: 0x7859, 0x12c3: 0x7859, 0x12c4: 0x7871, 0x12c5: 0x7871, + 0x12c6: 0x7889, 0x12c7: 0x7889, 0x12c8: 0x78a1, 0x12c9: 0x78a1, 0x12ca: 0x78b9, 0x12cb: 0x78b9, + 0x12cc: 0x78d1, 0x12cd: 0x78d1, 0x12ce: 0x78e9, 0x12cf: 0x78e9, 0x12d0: 0x78e9, 0x12d1: 0x78e9, + 0x12d2: 0x7901, 0x12d3: 0x7901, 0x12d4: 0x7901, 0x12d5: 0x7901, 0x12d6: 0x7919, 0x12d7: 0x7919, + 0x12d8: 0x7919, 0x12d9: 0x7919, 0x12da: 0x7931, 0x12db: 0x7931, 0x12dc: 0x7931, 0x12dd: 0x7931, + 0x12de: 0x7949, 0x12df: 0x7949, 0x12e0: 0x7961, 0x12e1: 0x7961, 0x12e2: 0x7961, 0x12e3: 0x7961, + 0x12e4: 0x7979, 0x12e5: 0x7979, 0x12e6: 0x7991, 0x12e7: 0x7991, 0x12e8: 0x7991, 0x12e9: 0x7991, + 0x12ea: 0x79a9, 0x12eb: 0x79a9, 0x12ec: 0x79a9, 0x12ed: 0x79a9, 0x12ee: 0x79c1, 0x12ef: 0x79c1, + 0x12f0: 0x79d9, 0x12f1: 0x79d9, 0x12f2: 0x0018, 0x12f3: 0x0018, 0x12f4: 0x0018, 0x12f5: 0x0018, + 0x12f6: 0x0018, 0x12f7: 0x0018, 0x12f8: 0x0018, 0x12f9: 0x0018, 0x12fa: 0x0018, 0x12fb: 0x0018, + 0x12fc: 0x0018, 0x12fd: 0x0018, 0x12fe: 0x0018, 0x12ff: 0x0018, + // Block 0x4c, offset 0x1300 + 0x1300: 0x0018, 0x1301: 0x0018, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040, + 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040, + 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040, + 0x1312: 0x0040, 0x1313: 0x79f1, 0x1314: 0x79f1, 0x1315: 0x79f1, 0x1316: 0x79f1, 0x1317: 0x7a09, + 0x1318: 0x7a09, 0x1319: 0x7a21, 0x131a: 0x7a21, 0x131b: 0x7a39, 0x131c: 0x7a39, 0x131d: 0x0479, + 0x131e: 0x7a51, 0x131f: 0x7a51, 0x1320: 0x7a69, 0x1321: 0x7a69, 0x1322: 0x7a81, 0x1323: 0x7a81, + 0x1324: 0x7a99, 0x1325: 0x7a99, 0x1326: 0x7a99, 0x1327: 0x7a99, 0x1328: 0x7ab1, 0x1329: 0x7ab1, + 0x132a: 0x7ac9, 0x132b: 0x7ac9, 0x132c: 0x7af1, 0x132d: 0x7af1, 0x132e: 0x7b19, 0x132f: 0x7b19, + 0x1330: 0x7b41, 0x1331: 0x7b41, 0x1332: 0x7b69, 0x1333: 0x7b69, 0x1334: 0x7b91, 0x1335: 0x7b91, + 0x1336: 0x7bb9, 0x1337: 0x7bb9, 0x1338: 0x7bb9, 0x1339: 0x7be1, 0x133a: 0x7be1, 0x133b: 0x7be1, + 0x133c: 0x7c09, 0x133d: 0x7c09, 0x133e: 0x7c09, 0x133f: 0x7c09, + // Block 0x4d, offset 0x1340 + 0x1340: 0x85f9, 0x1341: 0x8621, 0x1342: 0x8649, 0x1343: 0x8671, 0x1344: 0x8699, 0x1345: 0x86c1, + 0x1346: 0x86e9, 0x1347: 0x8711, 0x1348: 0x8739, 0x1349: 0x8761, 0x134a: 0x8789, 0x134b: 0x87b1, + 0x134c: 0x87d9, 0x134d: 0x8801, 0x134e: 0x8829, 0x134f: 0x8851, 0x1350: 0x8879, 0x1351: 0x88a1, + 0x1352: 0x88c9, 0x1353: 0x88f1, 0x1354: 0x8919, 0x1355: 0x8941, 0x1356: 0x8969, 0x1357: 0x8991, + 0x1358: 0x89b9, 0x1359: 0x89e1, 0x135a: 0x8a09, 0x135b: 0x8a31, 0x135c: 0x8a59, 0x135d: 0x8a81, + 0x135e: 0x8aaa, 0x135f: 0x8ada, 0x1360: 0x8b0a, 0x1361: 0x8b3a, 0x1362: 0x8b6a, 0x1363: 0x8b9a, + 0x1364: 0x8bc9, 0x1365: 0x8bf1, 0x1366: 0x7c71, 0x1367: 0x8c19, 0x1368: 0x7be1, 0x1369: 0x7c99, + 0x136a: 0x8c41, 0x136b: 0x8c69, 0x136c: 0x7d39, 0x136d: 0x8c91, 0x136e: 0x7d61, 0x136f: 0x7d89, + 0x1370: 0x8cb9, 0x1371: 0x8ce1, 0x1372: 0x7e29, 0x1373: 0x8d09, 0x1374: 0x7e51, 0x1375: 0x7e79, + 0x1376: 0x8d31, 0x1377: 0x8d59, 0x1378: 0x7ec9, 0x1379: 0x8d81, 0x137a: 0x7ef1, 0x137b: 0x7f19, + 0x137c: 0x83a1, 0x137d: 0x83c9, 0x137e: 0x8441, 0x137f: 0x8469, + // Block 0x4e, offset 0x1380 + 0x1380: 0x8491, 0x1381: 0x8531, 0x1382: 0x8559, 0x1383: 0x8581, 0x1384: 0x85a9, 0x1385: 0x8649, + 0x1386: 0x8671, 0x1387: 0x8699, 0x1388: 0x8da9, 0x1389: 0x8739, 0x138a: 0x8dd1, 0x138b: 0x8df9, + 0x138c: 0x8829, 0x138d: 0x8e21, 0x138e: 0x8851, 0x138f: 0x8879, 0x1390: 0x8a81, 0x1391: 0x8e49, + 0x1392: 0x8e71, 0x1393: 0x89b9, 0x1394: 0x8e99, 0x1395: 0x89e1, 0x1396: 0x8a09, 0x1397: 0x7c21, + 0x1398: 0x7c49, 0x1399: 0x8ec1, 0x139a: 0x7c71, 0x139b: 0x8ee9, 0x139c: 0x7cc1, 0x139d: 0x7ce9, + 0x139e: 0x7d11, 0x139f: 0x7d39, 0x13a0: 0x8f11, 0x13a1: 0x7db1, 0x13a2: 0x7dd9, 0x13a3: 0x7e01, + 0x13a4: 0x7e29, 0x13a5: 0x8f39, 0x13a6: 0x7ec9, 0x13a7: 0x7f41, 0x13a8: 0x7f69, 0x13a9: 0x7f91, + 0x13aa: 0x7fb9, 0x13ab: 0x7fe1, 0x13ac: 0x8031, 0x13ad: 0x8059, 0x13ae: 0x8081, 0x13af: 0x80a9, + 0x13b0: 0x80d1, 0x13b1: 0x80f9, 0x13b2: 0x8f61, 0x13b3: 0x8121, 0x13b4: 0x8149, 0x13b5: 0x8171, + 0x13b6: 0x8199, 0x13b7: 0x81c1, 0x13b8: 0x81e9, 0x13b9: 0x8239, 0x13ba: 0x8261, 0x13bb: 0x8289, + 0x13bc: 0x82b1, 0x13bd: 0x82d9, 0x13be: 0x8301, 0x13bf: 0x8329, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x8351, 0x13c1: 0x8379, 0x13c2: 0x83f1, 0x13c3: 0x8419, 0x13c4: 0x84b9, 0x13c5: 0x84e1, + 0x13c6: 0x8509, 0x13c7: 0x8531, 0x13c8: 0x8559, 0x13c9: 0x85d1, 0x13ca: 0x85f9, 0x13cb: 0x8621, + 0x13cc: 0x8649, 0x13cd: 0x8f89, 0x13ce: 0x86c1, 0x13cf: 0x86e9, 0x13d0: 0x8711, 0x13d1: 0x8739, + 0x13d2: 0x87b1, 0x13d3: 0x87d9, 0x13d4: 0x8801, 0x13d5: 0x8829, 0x13d6: 0x8fb1, 0x13d7: 0x88a1, + 0x13d8: 0x88c9, 0x13d9: 0x8fd9, 0x13da: 0x8941, 0x13db: 0x8969, 0x13dc: 0x8991, 0x13dd: 0x89b9, + 0x13de: 0x9001, 0x13df: 0x7c71, 0x13e0: 0x8ee9, 0x13e1: 0x7d39, 0x13e2: 0x8f11, 0x13e3: 0x7e29, + 0x13e4: 0x8f39, 0x13e5: 0x7ec9, 0x13e6: 0x9029, 0x13e7: 0x80d1, 0x13e8: 0x9051, 0x13e9: 0x9079, + 0x13ea: 0x90a1, 0x13eb: 0x8531, 0x13ec: 0x8559, 0x13ed: 0x8649, 0x13ee: 0x8829, 0x13ef: 0x8fb1, + 0x13f0: 0x89b9, 0x13f1: 0x9001, 0x13f2: 0x90c9, 0x13f3: 0x9101, 0x13f4: 0x9139, 0x13f5: 0x9171, + 0x13f6: 0x9199, 0x13f7: 0x91c1, 0x13f8: 0x91e9, 0x13f9: 0x9211, 0x13fa: 0x9239, 0x13fb: 0x9261, + 0x13fc: 0x9289, 0x13fd: 0x92b1, 0x13fe: 0x92d9, 0x13ff: 0x9301, + // Block 0x50, offset 0x1400 + 0x1400: 0x9329, 0x1401: 0x9351, 0x1402: 0x9379, 0x1403: 0x93a1, 0x1404: 0x93c9, 0x1405: 0x93f1, + 0x1406: 0x9419, 0x1407: 0x9441, 0x1408: 0x9469, 0x1409: 0x9491, 0x140a: 0x94b9, 0x140b: 0x94e1, + 0x140c: 0x9079, 0x140d: 0x9509, 0x140e: 0x9531, 0x140f: 0x9559, 0x1410: 0x9581, 0x1411: 0x9171, + 0x1412: 0x9199, 0x1413: 0x91c1, 0x1414: 0x91e9, 0x1415: 0x9211, 0x1416: 0x9239, 0x1417: 0x9261, + 0x1418: 0x9289, 0x1419: 0x92b1, 0x141a: 0x92d9, 0x141b: 0x9301, 0x141c: 0x9329, 0x141d: 0x9351, + 0x141e: 0x9379, 0x141f: 0x93a1, 0x1420: 0x93c9, 0x1421: 0x93f1, 0x1422: 0x9419, 0x1423: 0x9441, + 0x1424: 0x9469, 0x1425: 0x9491, 0x1426: 0x94b9, 0x1427: 0x94e1, 0x1428: 0x9079, 0x1429: 0x9509, + 0x142a: 0x9531, 0x142b: 0x9559, 0x142c: 0x9581, 0x142d: 0x9491, 0x142e: 0x94b9, 0x142f: 0x94e1, + 0x1430: 0x9079, 0x1431: 0x9051, 0x1432: 0x90a1, 0x1433: 0x8211, 0x1434: 0x8059, 0x1435: 0x8081, + 0x1436: 0x80a9, 0x1437: 0x9491, 0x1438: 0x94b9, 0x1439: 0x94e1, 0x143a: 0x8211, 0x143b: 0x8239, + 0x143c: 0x95a9, 0x143d: 0x95a9, 0x143e: 0x0018, 0x143f: 0x0018, + // Block 0x51, offset 0x1440 + 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040, + 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040, + 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x95d1, 0x1451: 0x9609, + 0x1452: 0x9609, 0x1453: 0x9641, 0x1454: 0x9679, 0x1455: 0x96b1, 0x1456: 0x96e9, 0x1457: 0x9721, + 0x1458: 0x9759, 0x1459: 0x9759, 0x145a: 0x9791, 0x145b: 0x97c9, 0x145c: 0x9801, 0x145d: 0x9839, + 0x145e: 0x9871, 0x145f: 0x98a9, 0x1460: 0x98a9, 0x1461: 0x98e1, 0x1462: 0x9919, 0x1463: 0x9919, + 0x1464: 0x9951, 0x1465: 0x9951, 0x1466: 0x9989, 0x1467: 0x99c1, 0x1468: 0x99c1, 0x1469: 0x99f9, + 0x146a: 0x9a31, 0x146b: 0x9a31, 0x146c: 0x9a69, 0x146d: 0x9a69, 0x146e: 0x9aa1, 0x146f: 0x9ad9, + 0x1470: 0x9ad9, 0x1471: 0x9b11, 0x1472: 0x9b11, 0x1473: 0x9b49, 0x1474: 0x9b81, 0x1475: 0x9bb9, + 0x1476: 0x9bf1, 0x1477: 0x9bf1, 0x1478: 0x9c29, 0x1479: 0x9c61, 0x147a: 0x9c99, 0x147b: 0x9cd1, + 0x147c: 0x9d09, 0x147d: 0x9d09, 0x147e: 0x9d41, 0x147f: 0x9d79, + // Block 0x52, offset 0x1480 + 0x1480: 0xa949, 0x1481: 0xa981, 0x1482: 0xa9b9, 0x1483: 0xa8a1, 0x1484: 0x9bb9, 0x1485: 0x9989, + 0x1486: 0xa9f1, 0x1487: 0xaa29, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, + 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040, + 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040, + 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040, + 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040, + 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040, + 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040, + 0x14b0: 0xaa61, 0x14b1: 0xaa99, 0x14b2: 0xaad1, 0x14b3: 0xab19, 0x14b4: 0xab61, 0x14b5: 0xaba9, + 0x14b6: 0xabf1, 0x14b7: 0xac39, 0x14b8: 0xac81, 0x14b9: 0xacc9, 0x14ba: 0xad02, 0x14bb: 0xae12, + 0x14bc: 0xae91, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x13c0, 0x14c1: 0x13c0, 0x14c2: 0x13c0, 0x14c3: 0x13c0, 0x14c4: 0x13c0, 0x14c5: 0x13c0, + 0x14c6: 0x13c0, 0x14c7: 0x13c0, 0x14c8: 0x13c0, 0x14c9: 0x13c0, 0x14ca: 0x13c0, 0x14cb: 0x13c0, + 0x14cc: 0x13c0, 0x14cd: 0x13c0, 0x14ce: 0x13c0, 0x14cf: 0x13c0, 0x14d0: 0xaeda, 0x14d1: 0x7d55, + 0x14d2: 0x0040, 0x14d3: 0xaeea, 0x14d4: 0x03c2, 0x14d5: 0xaefa, 0x14d6: 0xaf0a, 0x14d7: 0x7d75, + 0x14d8: 0x7d95, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, + 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x1308, 0x14e1: 0x1308, 0x14e2: 0x1308, 0x14e3: 0x1308, + 0x14e4: 0x1308, 0x14e5: 0x1308, 0x14e6: 0x1308, 0x14e7: 0x1308, 0x14e8: 0x1308, 0x14e9: 0x1308, + 0x14ea: 0x1308, 0x14eb: 0x1308, 0x14ec: 0x1308, 0x14ed: 0x1308, 0x14ee: 0x1308, 0x14ef: 0x1308, + 0x14f0: 0x0040, 0x14f1: 0x7db5, 0x14f2: 0x7dd5, 0x14f3: 0xaf1a, 0x14f4: 0xaf1a, 0x14f5: 0x1fd2, + 0x14f6: 0x1fe2, 0x14f7: 0xaf2a, 0x14f8: 0xaf3a, 0x14f9: 0x7df5, 0x14fa: 0x7e15, 0x14fb: 0x7e35, + 0x14fc: 0x7df5, 0x14fd: 0x7e55, 0x14fe: 0x7e75, 0x14ff: 0x7e55, + // Block 0x54, offset 0x1500 + 0x1500: 0x7e95, 0x1501: 0x7eb5, 0x1502: 0x7ed5, 0x1503: 0x7eb5, 0x1504: 0x7ef5, 0x1505: 0x0018, + 0x1506: 0x0018, 0x1507: 0xaf4a, 0x1508: 0xaf5a, 0x1509: 0x7f16, 0x150a: 0x7f36, 0x150b: 0x7f56, + 0x150c: 0x7f76, 0x150d: 0xaf1a, 0x150e: 0xaf1a, 0x150f: 0xaf1a, 0x1510: 0xaeda, 0x1511: 0x7f95, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x03c2, 0x1515: 0xaeea, 0x1516: 0xaf0a, 0x1517: 0xaefa, + 0x1518: 0x7fb5, 0x1519: 0x1fd2, 0x151a: 0x1fe2, 0x151b: 0xaf2a, 0x151c: 0xaf3a, 0x151d: 0x7e95, + 0x151e: 0x7ef5, 0x151f: 0xaf6a, 0x1520: 0xaf7a, 0x1521: 0xaf8a, 0x1522: 0x1fb2, 0x1523: 0xaf99, + 0x1524: 0xafaa, 0x1525: 0xafba, 0x1526: 0x1fc2, 0x1527: 0x0040, 0x1528: 0xafca, 0x1529: 0xafda, + 0x152a: 0xafea, 0x152b: 0xaffa, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0x7fd6, 0x1531: 0xb009, 0x1532: 0x7ff6, 0x1533: 0x0008, 0x1534: 0x8016, 0x1535: 0x0040, + 0x1536: 0x8036, 0x1537: 0xb031, 0x1538: 0x8056, 0x1539: 0xb059, 0x153a: 0x8076, 0x153b: 0xb081, + 0x153c: 0x8096, 0x153d: 0xb0a9, 0x153e: 0x80b6, 0x153f: 0xb0d1, + // Block 0x55, offset 0x1540 + 0x1540: 0xb0f9, 0x1541: 0xb111, 0x1542: 0xb111, 0x1543: 0xb129, 0x1544: 0xb129, 0x1545: 0xb141, + 0x1546: 0xb141, 0x1547: 0xb159, 0x1548: 0xb159, 0x1549: 0xb171, 0x154a: 0xb171, 0x154b: 0xb171, + 0x154c: 0xb171, 0x154d: 0xb189, 0x154e: 0xb189, 0x154f: 0xb1a1, 0x1550: 0xb1a1, 0x1551: 0xb1a1, + 0x1552: 0xb1a1, 0x1553: 0xb1b9, 0x1554: 0xb1b9, 0x1555: 0xb1d1, 0x1556: 0xb1d1, 0x1557: 0xb1d1, + 0x1558: 0xb1d1, 0x1559: 0xb1e9, 0x155a: 0xb1e9, 0x155b: 0xb1e9, 0x155c: 0xb1e9, 0x155d: 0xb201, + 0x155e: 0xb201, 0x155f: 0xb201, 0x1560: 0xb201, 0x1561: 0xb219, 0x1562: 0xb219, 0x1563: 0xb219, + 0x1564: 0xb219, 0x1565: 0xb231, 0x1566: 0xb231, 0x1567: 0xb231, 0x1568: 0xb231, 0x1569: 0xb249, + 0x156a: 0xb249, 0x156b: 0xb261, 0x156c: 0xb261, 0x156d: 0xb279, 0x156e: 0xb279, 0x156f: 0xb291, + 0x1570: 0xb291, 0x1571: 0xb2a9, 0x1572: 0xb2a9, 0x1573: 0xb2a9, 0x1574: 0xb2a9, 0x1575: 0xb2c1, + 0x1576: 0xb2c1, 0x1577: 0xb2c1, 0x1578: 0xb2c1, 0x1579: 0xb2d9, 0x157a: 0xb2d9, 0x157b: 0xb2d9, + 0x157c: 0xb2d9, 0x157d: 0xb2f1, 0x157e: 0xb2f1, 0x157f: 0xb2f1, + // Block 0x56, offset 0x1580 + 0x1580: 0xb2f1, 0x1581: 0xb309, 0x1582: 0xb309, 0x1583: 0xb309, 0x1584: 0xb309, 0x1585: 0xb321, + 0x1586: 0xb321, 0x1587: 0xb321, 0x1588: 0xb321, 0x1589: 0xb339, 0x158a: 0xb339, 0x158b: 0xb339, + 0x158c: 0xb339, 0x158d: 0xb351, 0x158e: 0xb351, 0x158f: 0xb351, 0x1590: 0xb351, 0x1591: 0xb369, + 0x1592: 0xb369, 0x1593: 0xb369, 0x1594: 0xb369, 0x1595: 0xb381, 0x1596: 0xb381, 0x1597: 0xb381, + 0x1598: 0xb381, 0x1599: 0xb399, 0x159a: 0xb399, 0x159b: 0xb399, 0x159c: 0xb399, 0x159d: 0xb3b1, + 0x159e: 0xb3b1, 0x159f: 0xb3b1, 0x15a0: 0xb3b1, 0x15a1: 0xb3c9, 0x15a2: 0xb3c9, 0x15a3: 0xb3c9, + 0x15a4: 0xb3c9, 0x15a5: 0xb3e1, 0x15a6: 0xb3e1, 0x15a7: 0xb3e1, 0x15a8: 0xb3e1, 0x15a9: 0xb3f9, + 0x15aa: 0xb3f9, 0x15ab: 0xb3f9, 0x15ac: 0xb3f9, 0x15ad: 0xb411, 0x15ae: 0xb411, 0x15af: 0x7ab1, + 0x15b0: 0x7ab1, 0x15b1: 0xb429, 0x15b2: 0xb429, 0x15b3: 0xb429, 0x15b4: 0xb429, 0x15b5: 0xb441, + 0x15b6: 0xb441, 0x15b7: 0xb469, 0x15b8: 0xb469, 0x15b9: 0xb491, 0x15ba: 0xb491, 0x15bb: 0xb4b9, + 0x15bc: 0xb4b9, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x0040, 0x15c1: 0xaefa, 0x15c2: 0xb4e2, 0x15c3: 0xaf6a, 0x15c4: 0xafda, 0x15c5: 0xafea, + 0x15c6: 0xaf7a, 0x15c7: 0xb4f2, 0x15c8: 0x1fd2, 0x15c9: 0x1fe2, 0x15ca: 0xaf8a, 0x15cb: 0x1fb2, + 0x15cc: 0xaeda, 0x15cd: 0xaf99, 0x15ce: 0x29d1, 0x15cf: 0xb502, 0x15d0: 0x1f41, 0x15d1: 0x00c9, + 0x15d2: 0x0069, 0x15d3: 0x0079, 0x15d4: 0x1f51, 0x15d5: 0x1f61, 0x15d6: 0x1f71, 0x15d7: 0x1f81, + 0x15d8: 0x1f91, 0x15d9: 0x1fa1, 0x15da: 0xaeea, 0x15db: 0x03c2, 0x15dc: 0xafaa, 0x15dd: 0x1fc2, + 0x15de: 0xafba, 0x15df: 0xaf0a, 0x15e0: 0xaffa, 0x15e1: 0x0039, 0x15e2: 0x0ee9, 0x15e3: 0x1159, + 0x15e4: 0x0ef9, 0x15e5: 0x0f09, 0x15e6: 0x1199, 0x15e7: 0x0f31, 0x15e8: 0x0249, 0x15e9: 0x0f41, + 0x15ea: 0x0259, 0x15eb: 0x0f51, 0x15ec: 0x0359, 0x15ed: 0x0f61, 0x15ee: 0x0f71, 0x15ef: 0x00d9, + 0x15f0: 0x0f99, 0x15f1: 0x2039, 0x15f2: 0x0269, 0x15f3: 0x01d9, 0x15f4: 0x0fa9, 0x15f5: 0x0fb9, + 0x15f6: 0x1089, 0x15f7: 0x0279, 0x15f8: 0x0369, 0x15f9: 0x0289, 0x15fa: 0x13d1, 0x15fb: 0xaf4a, + 0x15fc: 0xafca, 0x15fd: 0xaf5a, 0x15fe: 0xb512, 0x15ff: 0xaf1a, + // Block 0x58, offset 0x1600 + 0x1600: 0x1caa, 0x1601: 0x0039, 0x1602: 0x0ee9, 0x1603: 0x1159, 0x1604: 0x0ef9, 0x1605: 0x0f09, + 0x1606: 0x1199, 0x1607: 0x0f31, 0x1608: 0x0249, 0x1609: 0x0f41, 0x160a: 0x0259, 0x160b: 0x0f51, + 0x160c: 0x0359, 0x160d: 0x0f61, 0x160e: 0x0f71, 0x160f: 0x00d9, 0x1610: 0x0f99, 0x1611: 0x2039, + 0x1612: 0x0269, 0x1613: 0x01d9, 0x1614: 0x0fa9, 0x1615: 0x0fb9, 0x1616: 0x1089, 0x1617: 0x0279, + 0x1618: 0x0369, 0x1619: 0x0289, 0x161a: 0x13d1, 0x161b: 0xaf2a, 0x161c: 0xb522, 0x161d: 0xaf3a, + 0x161e: 0xb532, 0x161f: 0x80d5, 0x1620: 0x80f5, 0x1621: 0x29d1, 0x1622: 0x8115, 0x1623: 0x8115, + 0x1624: 0x8135, 0x1625: 0x8155, 0x1626: 0x8175, 0x1627: 0x8195, 0x1628: 0x81b5, 0x1629: 0x81d5, + 0x162a: 0x81f5, 0x162b: 0x8215, 0x162c: 0x8235, 0x162d: 0x8255, 0x162e: 0x8275, 0x162f: 0x8295, + 0x1630: 0x82b5, 0x1631: 0x82d5, 0x1632: 0x82f5, 0x1633: 0x8315, 0x1634: 0x8335, 0x1635: 0x8355, + 0x1636: 0x8375, 0x1637: 0x8395, 0x1638: 0x83b5, 0x1639: 0x83d5, 0x163a: 0x83f5, 0x163b: 0x8415, + 0x163c: 0x81b5, 0x163d: 0x8435, 0x163e: 0x8455, 0x163f: 0x8215, + // Block 0x59, offset 0x1640 + 0x1640: 0x8475, 0x1641: 0x8495, 0x1642: 0x84b5, 0x1643: 0x84d5, 0x1644: 0x84f5, 0x1645: 0x8515, + 0x1646: 0x8535, 0x1647: 0x8555, 0x1648: 0x84d5, 0x1649: 0x8575, 0x164a: 0x84d5, 0x164b: 0x8595, + 0x164c: 0x8595, 0x164d: 0x85b5, 0x164e: 0x85b5, 0x164f: 0x85d5, 0x1650: 0x8515, 0x1651: 0x85f5, + 0x1652: 0x8615, 0x1653: 0x85f5, 0x1654: 0x8635, 0x1655: 0x8615, 0x1656: 0x8655, 0x1657: 0x8655, + 0x1658: 0x8675, 0x1659: 0x8675, 0x165a: 0x8695, 0x165b: 0x8695, 0x165c: 0x8615, 0x165d: 0x8115, + 0x165e: 0x86b5, 0x165f: 0x86d5, 0x1660: 0x0040, 0x1661: 0x86f5, 0x1662: 0x8715, 0x1663: 0x8735, + 0x1664: 0x8755, 0x1665: 0x8735, 0x1666: 0x8775, 0x1667: 0x8795, 0x1668: 0x87b5, 0x1669: 0x87b5, + 0x166a: 0x87d5, 0x166b: 0x87d5, 0x166c: 0x87f5, 0x166d: 0x87f5, 0x166e: 0x87d5, 0x166f: 0x87d5, + 0x1670: 0x8815, 0x1671: 0x8835, 0x1672: 0x8855, 0x1673: 0x8875, 0x1674: 0x8895, 0x1675: 0x88b5, + 0x1676: 0x88b5, 0x1677: 0x88b5, 0x1678: 0x88d5, 0x1679: 0x88d5, 0x167a: 0x88d5, 0x167b: 0x88d5, + 0x167c: 0x87b5, 0x167d: 0x87b5, 0x167e: 0x87b5, 0x167f: 0x0040, + // Block 0x5a, offset 0x1680 + 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x8715, 0x1683: 0x86f5, 0x1684: 0x88f5, 0x1685: 0x86f5, + 0x1686: 0x8715, 0x1687: 0x86f5, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x8915, 0x168b: 0x8715, + 0x168c: 0x8935, 0x168d: 0x88f5, 0x168e: 0x8935, 0x168f: 0x8715, 0x1690: 0x0040, 0x1691: 0x0040, + 0x1692: 0x8955, 0x1693: 0x8975, 0x1694: 0x8875, 0x1695: 0x8935, 0x1696: 0x88f5, 0x1697: 0x8935, + 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x8995, 0x169b: 0x89b5, 0x169c: 0x8995, 0x169d: 0x0040, + 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0xb541, 0x16a1: 0xb559, 0x16a2: 0xb571, 0x16a3: 0x89d6, + 0x16a4: 0xb589, 0x16a5: 0xb5a1, 0x16a6: 0x89f5, 0x16a7: 0x0040, 0x16a8: 0x8a15, 0x16a9: 0x8a35, + 0x16aa: 0x8a55, 0x16ab: 0x8a35, 0x16ac: 0x8a75, 0x16ad: 0x8a95, 0x16ae: 0x8ab5, 0x16af: 0x0040, + 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040, + 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340, + 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x0208, 0x16c1: 0x0208, 0x16c2: 0x0208, 0x16c3: 0x0208, 0x16c4: 0x0208, 0x16c5: 0x0408, + 0x16c6: 0x0008, 0x16c7: 0x0408, 0x16c8: 0x0018, 0x16c9: 0x0408, 0x16ca: 0x0408, 0x16cb: 0x0008, + 0x16cc: 0x0008, 0x16cd: 0x0108, 0x16ce: 0x0408, 0x16cf: 0x0408, 0x16d0: 0x0408, 0x16d1: 0x0408, + 0x16d2: 0x0408, 0x16d3: 0x0208, 0x16d4: 0x0208, 0x16d5: 0x0208, 0x16d6: 0x0208, 0x16d7: 0x0108, + 0x16d8: 0x0208, 0x16d9: 0x0208, 0x16da: 0x0208, 0x16db: 0x0208, 0x16dc: 0x0208, 0x16dd: 0x0408, + 0x16de: 0x0208, 0x16df: 0x0208, 0x16e0: 0x0208, 0x16e1: 0x0408, 0x16e2: 0x0008, 0x16e3: 0x0008, + 0x16e4: 0x0408, 0x16e5: 0x1308, 0x16e6: 0x1308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040, + 0x16ea: 0x0040, 0x16eb: 0x0218, 0x16ec: 0x0218, 0x16ed: 0x0218, 0x16ee: 0x0218, 0x16ef: 0x0418, + 0x16f0: 0x0018, 0x16f1: 0x0018, 0x16f2: 0x0018, 0x16f3: 0x0018, 0x16f4: 0x0018, 0x16f5: 0x0018, + 0x16f6: 0x0018, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040, + 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0208, 0x1701: 0x0408, 0x1702: 0x0208, 0x1703: 0x0408, 0x1704: 0x0408, 0x1705: 0x0408, + 0x1706: 0x0208, 0x1707: 0x0208, 0x1708: 0x0208, 0x1709: 0x0408, 0x170a: 0x0208, 0x170b: 0x0208, + 0x170c: 0x0408, 0x170d: 0x0208, 0x170e: 0x0408, 0x170f: 0x0408, 0x1710: 0x0208, 0x1711: 0x0408, + 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040, + 0x1718: 0x0040, 0x1719: 0x0018, 0x171a: 0x0018, 0x171b: 0x0018, 0x171c: 0x0018, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040, + 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0418, + 0x172a: 0x0418, 0x172b: 0x0418, 0x172c: 0x0418, 0x172d: 0x0218, 0x172e: 0x0218, 0x172f: 0x0018, + 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, + 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, + // Block 0x5d, offset 0x1740 + 0x1740: 0x1308, 0x1741: 0x1308, 0x1742: 0x1008, 0x1743: 0x1008, 0x1744: 0x0040, 0x1745: 0x0008, + 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, + 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040, + 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, + 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, + 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, + 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040, + 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008, + 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008, + 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x0040, + 0x177c: 0x1308, 0x177d: 0x0008, 0x177e: 0x1008, 0x177f: 0x1008, + // Block 0x5e, offset 0x1780 + 0x1780: 0x1308, 0x1781: 0x1008, 0x1782: 0x1008, 0x1783: 0x1008, 0x1784: 0x1008, 0x1785: 0x0040, + 0x1786: 0x0040, 0x1787: 0x1008, 0x1788: 0x1008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x1008, + 0x178c: 0x1008, 0x178d: 0x1808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040, + 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x1008, + 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008, + 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x1008, 0x17a3: 0x1008, + 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x1308, 0x17a7: 0x1308, 0x17a8: 0x1308, 0x17a9: 0x1308, + 0x17aa: 0x1308, 0x17ab: 0x1308, 0x17ac: 0x1308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040, + 0x17b0: 0x1308, 0x17b1: 0x1308, 0x17b2: 0x1308, 0x17b3: 0x1308, 0x17b4: 0x1308, 0x17b5: 0x0040, + 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, + 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x0039, 0x17c1: 0x0ee9, 0x17c2: 0x1159, 0x17c3: 0x0ef9, 0x17c4: 0x0f09, 0x17c5: 0x1199, + 0x17c6: 0x0f31, 0x17c7: 0x0249, 0x17c8: 0x0f41, 0x17c9: 0x0259, 0x17ca: 0x0f51, 0x17cb: 0x0359, + 0x17cc: 0x0f61, 0x17cd: 0x0f71, 0x17ce: 0x00d9, 0x17cf: 0x0f99, 0x17d0: 0x2039, 0x17d1: 0x0269, + 0x17d2: 0x01d9, 0x17d3: 0x0fa9, 0x17d4: 0x0fb9, 0x17d5: 0x1089, 0x17d6: 0x0279, 0x17d7: 0x0369, + 0x17d8: 0x0289, 0x17d9: 0x13d1, 0x17da: 0x0039, 0x17db: 0x0ee9, 0x17dc: 0x1159, 0x17dd: 0x0ef9, + 0x17de: 0x0f09, 0x17df: 0x1199, 0x17e0: 0x0f31, 0x17e1: 0x0249, 0x17e2: 0x0f41, 0x17e3: 0x0259, + 0x17e4: 0x0f51, 0x17e5: 0x0359, 0x17e6: 0x0f61, 0x17e7: 0x0f71, 0x17e8: 0x00d9, 0x17e9: 0x0f99, + 0x17ea: 0x2039, 0x17eb: 0x0269, 0x17ec: 0x01d9, 0x17ed: 0x0fa9, 0x17ee: 0x0fb9, 0x17ef: 0x1089, + 0x17f0: 0x0279, 0x17f1: 0x0369, 0x17f2: 0x0289, 0x17f3: 0x13d1, 0x17f4: 0x0039, 0x17f5: 0x0ee9, + 0x17f6: 0x1159, 0x17f7: 0x0ef9, 0x17f8: 0x0f09, 0x17f9: 0x1199, 0x17fa: 0x0f31, 0x17fb: 0x0249, + 0x17fc: 0x0f41, 0x17fd: 0x0259, 0x17fe: 0x0f51, 0x17ff: 0x0359, + // Block 0x60, offset 0x1800 + 0x1800: 0x0f61, 0x1801: 0x0f71, 0x1802: 0x00d9, 0x1803: 0x0f99, 0x1804: 0x2039, 0x1805: 0x0269, + 0x1806: 0x01d9, 0x1807: 0x0fa9, 0x1808: 0x0fb9, 0x1809: 0x1089, 0x180a: 0x0279, 0x180b: 0x0369, + 0x180c: 0x0289, 0x180d: 0x13d1, 0x180e: 0x0039, 0x180f: 0x0ee9, 0x1810: 0x1159, 0x1811: 0x0ef9, + 0x1812: 0x0f09, 0x1813: 0x1199, 0x1814: 0x0f31, 0x1815: 0x0040, 0x1816: 0x0f41, 0x1817: 0x0259, + 0x1818: 0x0f51, 0x1819: 0x0359, 0x181a: 0x0f61, 0x181b: 0x0f71, 0x181c: 0x00d9, 0x181d: 0x0f99, + 0x181e: 0x2039, 0x181f: 0x0269, 0x1820: 0x01d9, 0x1821: 0x0fa9, 0x1822: 0x0fb9, 0x1823: 0x1089, + 0x1824: 0x0279, 0x1825: 0x0369, 0x1826: 0x0289, 0x1827: 0x13d1, 0x1828: 0x0039, 0x1829: 0x0ee9, + 0x182a: 0x1159, 0x182b: 0x0ef9, 0x182c: 0x0f09, 0x182d: 0x1199, 0x182e: 0x0f31, 0x182f: 0x0249, + 0x1830: 0x0f41, 0x1831: 0x0259, 0x1832: 0x0f51, 0x1833: 0x0359, 0x1834: 0x0f61, 0x1835: 0x0f71, + 0x1836: 0x00d9, 0x1837: 0x0f99, 0x1838: 0x2039, 0x1839: 0x0269, 0x183a: 0x01d9, 0x183b: 0x0fa9, + 0x183c: 0x0fb9, 0x183d: 0x1089, 0x183e: 0x0279, 0x183f: 0x0369, + // Block 0x61, offset 0x1840 + 0x1840: 0x0289, 0x1841: 0x13d1, 0x1842: 0x0039, 0x1843: 0x0ee9, 0x1844: 0x1159, 0x1845: 0x0ef9, + 0x1846: 0x0f09, 0x1847: 0x1199, 0x1848: 0x0f31, 0x1849: 0x0249, 0x184a: 0x0f41, 0x184b: 0x0259, + 0x184c: 0x0f51, 0x184d: 0x0359, 0x184e: 0x0f61, 0x184f: 0x0f71, 0x1850: 0x00d9, 0x1851: 0x0f99, + 0x1852: 0x2039, 0x1853: 0x0269, 0x1854: 0x01d9, 0x1855: 0x0fa9, 0x1856: 0x0fb9, 0x1857: 0x1089, + 0x1858: 0x0279, 0x1859: 0x0369, 0x185a: 0x0289, 0x185b: 0x13d1, 0x185c: 0x0039, 0x185d: 0x0040, + 0x185e: 0x1159, 0x185f: 0x0ef9, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0f31, 0x1863: 0x0040, + 0x1864: 0x0040, 0x1865: 0x0259, 0x1866: 0x0f51, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0f71, + 0x186a: 0x00d9, 0x186b: 0x0f99, 0x186c: 0x2039, 0x186d: 0x0040, 0x186e: 0x01d9, 0x186f: 0x0fa9, + 0x1870: 0x0fb9, 0x1871: 0x1089, 0x1872: 0x0279, 0x1873: 0x0369, 0x1874: 0x0289, 0x1875: 0x13d1, + 0x1876: 0x0039, 0x1877: 0x0ee9, 0x1878: 0x1159, 0x1879: 0x0ef9, 0x187a: 0x0040, 0x187b: 0x1199, + 0x187c: 0x0040, 0x187d: 0x0249, 0x187e: 0x0f41, 0x187f: 0x0259, + // Block 0x62, offset 0x1880 + 0x1880: 0x0f51, 0x1881: 0x0359, 0x1882: 0x0f61, 0x1883: 0x0f71, 0x1884: 0x0040, 0x1885: 0x0f99, + 0x1886: 0x2039, 0x1887: 0x0269, 0x1888: 0x01d9, 0x1889: 0x0fa9, 0x188a: 0x0fb9, 0x188b: 0x1089, + 0x188c: 0x0279, 0x188d: 0x0369, 0x188e: 0x0289, 0x188f: 0x13d1, 0x1890: 0x0039, 0x1891: 0x0ee9, + 0x1892: 0x1159, 0x1893: 0x0ef9, 0x1894: 0x0f09, 0x1895: 0x1199, 0x1896: 0x0f31, 0x1897: 0x0249, + 0x1898: 0x0f41, 0x1899: 0x0259, 0x189a: 0x0f51, 0x189b: 0x0359, 0x189c: 0x0f61, 0x189d: 0x0f71, + 0x189e: 0x00d9, 0x189f: 0x0f99, 0x18a0: 0x2039, 0x18a1: 0x0269, 0x18a2: 0x01d9, 0x18a3: 0x0fa9, + 0x18a4: 0x0fb9, 0x18a5: 0x1089, 0x18a6: 0x0279, 0x18a7: 0x0369, 0x18a8: 0x0289, 0x18a9: 0x13d1, + 0x18aa: 0x0039, 0x18ab: 0x0ee9, 0x18ac: 0x1159, 0x18ad: 0x0ef9, 0x18ae: 0x0f09, 0x18af: 0x1199, + 0x18b0: 0x0f31, 0x18b1: 0x0249, 0x18b2: 0x0f41, 0x18b3: 0x0259, 0x18b4: 0x0f51, 0x18b5: 0x0359, + 0x18b6: 0x0f61, 0x18b7: 0x0f71, 0x18b8: 0x00d9, 0x18b9: 0x0f99, 0x18ba: 0x2039, 0x18bb: 0x0269, + 0x18bc: 0x01d9, 0x18bd: 0x0fa9, 0x18be: 0x0fb9, 0x18bf: 0x1089, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0279, 0x18c1: 0x0369, 0x18c2: 0x0289, 0x18c3: 0x13d1, 0x18c4: 0x0039, 0x18c5: 0x0ee9, + 0x18c6: 0x0040, 0x18c7: 0x0ef9, 0x18c8: 0x0f09, 0x18c9: 0x1199, 0x18ca: 0x0f31, 0x18cb: 0x0040, + 0x18cc: 0x0040, 0x18cd: 0x0259, 0x18ce: 0x0f51, 0x18cf: 0x0359, 0x18d0: 0x0f61, 0x18d1: 0x0f71, + 0x18d2: 0x00d9, 0x18d3: 0x0f99, 0x18d4: 0x2039, 0x18d5: 0x0040, 0x18d6: 0x01d9, 0x18d7: 0x0fa9, + 0x18d8: 0x0fb9, 0x18d9: 0x1089, 0x18da: 0x0279, 0x18db: 0x0369, 0x18dc: 0x0289, 0x18dd: 0x0040, + 0x18de: 0x0039, 0x18df: 0x0ee9, 0x18e0: 0x1159, 0x18e1: 0x0ef9, 0x18e2: 0x0f09, 0x18e3: 0x1199, + 0x18e4: 0x0f31, 0x18e5: 0x0249, 0x18e6: 0x0f41, 0x18e7: 0x0259, 0x18e8: 0x0f51, 0x18e9: 0x0359, + 0x18ea: 0x0f61, 0x18eb: 0x0f71, 0x18ec: 0x00d9, 0x18ed: 0x0f99, 0x18ee: 0x2039, 0x18ef: 0x0269, + 0x18f0: 0x01d9, 0x18f1: 0x0fa9, 0x18f2: 0x0fb9, 0x18f3: 0x1089, 0x18f4: 0x0279, 0x18f5: 0x0369, + 0x18f6: 0x0289, 0x18f7: 0x13d1, 0x18f8: 0x0039, 0x18f9: 0x0ee9, 0x18fa: 0x0040, 0x18fb: 0x0ef9, + 0x18fc: 0x0f09, 0x18fd: 0x1199, 0x18fe: 0x0f31, 0x18ff: 0x0040, + // Block 0x64, offset 0x1900 + 0x1900: 0x0f41, 0x1901: 0x0259, 0x1902: 0x0f51, 0x1903: 0x0359, 0x1904: 0x0f61, 0x1905: 0x0040, + 0x1906: 0x00d9, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0040, 0x190a: 0x01d9, 0x190b: 0x0fa9, + 0x190c: 0x0fb9, 0x190d: 0x1089, 0x190e: 0x0279, 0x190f: 0x0369, 0x1910: 0x0289, 0x1911: 0x0040, + 0x1912: 0x0039, 0x1913: 0x0ee9, 0x1914: 0x1159, 0x1915: 0x0ef9, 0x1916: 0x0f09, 0x1917: 0x1199, + 0x1918: 0x0f31, 0x1919: 0x0249, 0x191a: 0x0f41, 0x191b: 0x0259, 0x191c: 0x0f51, 0x191d: 0x0359, + 0x191e: 0x0f61, 0x191f: 0x0f71, 0x1920: 0x00d9, 0x1921: 0x0f99, 0x1922: 0x2039, 0x1923: 0x0269, + 0x1924: 0x01d9, 0x1925: 0x0fa9, 0x1926: 0x0fb9, 0x1927: 0x1089, 0x1928: 0x0279, 0x1929: 0x0369, + 0x192a: 0x0289, 0x192b: 0x13d1, 0x192c: 0x0039, 0x192d: 0x0ee9, 0x192e: 0x1159, 0x192f: 0x0ef9, + 0x1930: 0x0f09, 0x1931: 0x1199, 0x1932: 0x0f31, 0x1933: 0x0249, 0x1934: 0x0f41, 0x1935: 0x0259, + 0x1936: 0x0f51, 0x1937: 0x0359, 0x1938: 0x0f61, 0x1939: 0x0f71, 0x193a: 0x00d9, 0x193b: 0x0f99, + 0x193c: 0x2039, 0x193d: 0x0269, 0x193e: 0x01d9, 0x193f: 0x0fa9, + // Block 0x65, offset 0x1940 + 0x1940: 0x0fb9, 0x1941: 0x1089, 0x1942: 0x0279, 0x1943: 0x0369, 0x1944: 0x0289, 0x1945: 0x13d1, + 0x1946: 0x0039, 0x1947: 0x0ee9, 0x1948: 0x1159, 0x1949: 0x0ef9, 0x194a: 0x0f09, 0x194b: 0x1199, + 0x194c: 0x0f31, 0x194d: 0x0249, 0x194e: 0x0f41, 0x194f: 0x0259, 0x1950: 0x0f51, 0x1951: 0x0359, + 0x1952: 0x0f61, 0x1953: 0x0f71, 0x1954: 0x00d9, 0x1955: 0x0f99, 0x1956: 0x2039, 0x1957: 0x0269, + 0x1958: 0x01d9, 0x1959: 0x0fa9, 0x195a: 0x0fb9, 0x195b: 0x1089, 0x195c: 0x0279, 0x195d: 0x0369, + 0x195e: 0x0289, 0x195f: 0x13d1, 0x1960: 0x0039, 0x1961: 0x0ee9, 0x1962: 0x1159, 0x1963: 0x0ef9, + 0x1964: 0x0f09, 0x1965: 0x1199, 0x1966: 0x0f31, 0x1967: 0x0249, 0x1968: 0x0f41, 0x1969: 0x0259, + 0x196a: 0x0f51, 0x196b: 0x0359, 0x196c: 0x0f61, 0x196d: 0x0f71, 0x196e: 0x00d9, 0x196f: 0x0f99, + 0x1970: 0x2039, 0x1971: 0x0269, 0x1972: 0x01d9, 0x1973: 0x0fa9, 0x1974: 0x0fb9, 0x1975: 0x1089, + 0x1976: 0x0279, 0x1977: 0x0369, 0x1978: 0x0289, 0x1979: 0x13d1, 0x197a: 0x0039, 0x197b: 0x0ee9, + 0x197c: 0x1159, 0x197d: 0x0ef9, 0x197e: 0x0f09, 0x197f: 0x1199, + // Block 0x66, offset 0x1980 + 0x1980: 0x0f31, 0x1981: 0x0249, 0x1982: 0x0f41, 0x1983: 0x0259, 0x1984: 0x0f51, 0x1985: 0x0359, + 0x1986: 0x0f61, 0x1987: 0x0f71, 0x1988: 0x00d9, 0x1989: 0x0f99, 0x198a: 0x2039, 0x198b: 0x0269, + 0x198c: 0x01d9, 0x198d: 0x0fa9, 0x198e: 0x0fb9, 0x198f: 0x1089, 0x1990: 0x0279, 0x1991: 0x0369, + 0x1992: 0x0289, 0x1993: 0x13d1, 0x1994: 0x0039, 0x1995: 0x0ee9, 0x1996: 0x1159, 0x1997: 0x0ef9, + 0x1998: 0x0f09, 0x1999: 0x1199, 0x199a: 0x0f31, 0x199b: 0x0249, 0x199c: 0x0f41, 0x199d: 0x0259, + 0x199e: 0x0f51, 0x199f: 0x0359, 0x19a0: 0x0f61, 0x19a1: 0x0f71, 0x19a2: 0x00d9, 0x19a3: 0x0f99, + 0x19a4: 0x2039, 0x19a5: 0x0269, 0x19a6: 0x01d9, 0x19a7: 0x0fa9, 0x19a8: 0x0fb9, 0x19a9: 0x1089, + 0x19aa: 0x0279, 0x19ab: 0x0369, 0x19ac: 0x0289, 0x19ad: 0x13d1, 0x19ae: 0x0039, 0x19af: 0x0ee9, + 0x19b0: 0x1159, 0x19b1: 0x0ef9, 0x19b2: 0x0f09, 0x19b3: 0x1199, 0x19b4: 0x0f31, 0x19b5: 0x0249, + 0x19b6: 0x0f41, 0x19b7: 0x0259, 0x19b8: 0x0f51, 0x19b9: 0x0359, 0x19ba: 0x0f61, 0x19bb: 0x0f71, + 0x19bc: 0x00d9, 0x19bd: 0x0f99, 0x19be: 0x2039, 0x19bf: 0x0269, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x01d9, 0x19c1: 0x0fa9, 0x19c2: 0x0fb9, 0x19c3: 0x1089, 0x19c4: 0x0279, 0x19c5: 0x0369, + 0x19c6: 0x0289, 0x19c7: 0x13d1, 0x19c8: 0x0039, 0x19c9: 0x0ee9, 0x19ca: 0x1159, 0x19cb: 0x0ef9, + 0x19cc: 0x0f09, 0x19cd: 0x1199, 0x19ce: 0x0f31, 0x19cf: 0x0249, 0x19d0: 0x0f41, 0x19d1: 0x0259, + 0x19d2: 0x0f51, 0x19d3: 0x0359, 0x19d4: 0x0f61, 0x19d5: 0x0f71, 0x19d6: 0x00d9, 0x19d7: 0x0f99, + 0x19d8: 0x2039, 0x19d9: 0x0269, 0x19da: 0x01d9, 0x19db: 0x0fa9, 0x19dc: 0x0fb9, 0x19dd: 0x1089, + 0x19de: 0x0279, 0x19df: 0x0369, 0x19e0: 0x0289, 0x19e1: 0x13d1, 0x19e2: 0x0039, 0x19e3: 0x0ee9, + 0x19e4: 0x1159, 0x19e5: 0x0ef9, 0x19e6: 0x0f09, 0x19e7: 0x1199, 0x19e8: 0x0f31, 0x19e9: 0x0249, + 0x19ea: 0x0f41, 0x19eb: 0x0259, 0x19ec: 0x0f51, 0x19ed: 0x0359, 0x19ee: 0x0f61, 0x19ef: 0x0f71, + 0x19f0: 0x00d9, 0x19f1: 0x0f99, 0x19f2: 0x2039, 0x19f3: 0x0269, 0x19f4: 0x01d9, 0x19f5: 0x0fa9, + 0x19f6: 0x0fb9, 0x19f7: 0x1089, 0x19f8: 0x0279, 0x19f9: 0x0369, 0x19fa: 0x0289, 0x19fb: 0x13d1, + 0x19fc: 0x0039, 0x19fd: 0x0ee9, 0x19fe: 0x1159, 0x19ff: 0x0ef9, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0f09, 0x1a01: 0x1199, 0x1a02: 0x0f31, 0x1a03: 0x0249, 0x1a04: 0x0f41, 0x1a05: 0x0259, + 0x1a06: 0x0f51, 0x1a07: 0x0359, 0x1a08: 0x0f61, 0x1a09: 0x0f71, 0x1a0a: 0x00d9, 0x1a0b: 0x0f99, + 0x1a0c: 0x2039, 0x1a0d: 0x0269, 0x1a0e: 0x01d9, 0x1a0f: 0x0fa9, 0x1a10: 0x0fb9, 0x1a11: 0x1089, + 0x1a12: 0x0279, 0x1a13: 0x0369, 0x1a14: 0x0289, 0x1a15: 0x13d1, 0x1a16: 0x0039, 0x1a17: 0x0ee9, + 0x1a18: 0x1159, 0x1a19: 0x0ef9, 0x1a1a: 0x0f09, 0x1a1b: 0x1199, 0x1a1c: 0x0f31, 0x1a1d: 0x0249, + 0x1a1e: 0x0f41, 0x1a1f: 0x0259, 0x1a20: 0x0f51, 0x1a21: 0x0359, 0x1a22: 0x0f61, 0x1a23: 0x0f71, + 0x1a24: 0x00d9, 0x1a25: 0x0f99, 0x1a26: 0x2039, 0x1a27: 0x0269, 0x1a28: 0x01d9, 0x1a29: 0x0fa9, + 0x1a2a: 0x0fb9, 0x1a2b: 0x1089, 0x1a2c: 0x0279, 0x1a2d: 0x0369, 0x1a2e: 0x0289, 0x1a2f: 0x13d1, + 0x1a30: 0x0039, 0x1a31: 0x0ee9, 0x1a32: 0x1159, 0x1a33: 0x0ef9, 0x1a34: 0x0f09, 0x1a35: 0x1199, + 0x1a36: 0x0f31, 0x1a37: 0x0249, 0x1a38: 0x0f41, 0x1a39: 0x0259, 0x1a3a: 0x0f51, 0x1a3b: 0x0359, + 0x1a3c: 0x0f61, 0x1a3d: 0x0f71, 0x1a3e: 0x00d9, 0x1a3f: 0x0f99, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x2039, 0x1a41: 0x0269, 0x1a42: 0x01d9, 0x1a43: 0x0fa9, 0x1a44: 0x0fb9, 0x1a45: 0x1089, + 0x1a46: 0x0279, 0x1a47: 0x0369, 0x1a48: 0x0289, 0x1a49: 0x13d1, 0x1a4a: 0x0039, 0x1a4b: 0x0ee9, + 0x1a4c: 0x1159, 0x1a4d: 0x0ef9, 0x1a4e: 0x0f09, 0x1a4f: 0x1199, 0x1a50: 0x0f31, 0x1a51: 0x0249, + 0x1a52: 0x0f41, 0x1a53: 0x0259, 0x1a54: 0x0f51, 0x1a55: 0x0359, 0x1a56: 0x0f61, 0x1a57: 0x0f71, + 0x1a58: 0x00d9, 0x1a59: 0x0f99, 0x1a5a: 0x2039, 0x1a5b: 0x0269, 0x1a5c: 0x01d9, 0x1a5d: 0x0fa9, + 0x1a5e: 0x0fb9, 0x1a5f: 0x1089, 0x1a60: 0x0279, 0x1a61: 0x0369, 0x1a62: 0x0289, 0x1a63: 0x13d1, + 0x1a64: 0xba81, 0x1a65: 0xba99, 0x1a66: 0x0040, 0x1a67: 0x0040, 0x1a68: 0xbab1, 0x1a69: 0x1099, + 0x1a6a: 0x10b1, 0x1a6b: 0x10c9, 0x1a6c: 0xbac9, 0x1a6d: 0xbae1, 0x1a6e: 0xbaf9, 0x1a6f: 0x1429, + 0x1a70: 0x1a31, 0x1a71: 0xbb11, 0x1a72: 0xbb29, 0x1a73: 0xbb41, 0x1a74: 0xbb59, 0x1a75: 0xbb71, + 0x1a76: 0xbb89, 0x1a77: 0x2109, 0x1a78: 0x1111, 0x1a79: 0x1429, 0x1a7a: 0xbba1, 0x1a7b: 0xbbb9, + 0x1a7c: 0xbbd1, 0x1a7d: 0x10e1, 0x1a7e: 0x10f9, 0x1a7f: 0xbbe9, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x2079, 0x1a81: 0xbc01, 0x1a82: 0xbab1, 0x1a83: 0x1099, 0x1a84: 0x10b1, 0x1a85: 0x10c9, + 0x1a86: 0xbac9, 0x1a87: 0xbae1, 0x1a88: 0xbaf9, 0x1a89: 0x1429, 0x1a8a: 0x1a31, 0x1a8b: 0xbb11, + 0x1a8c: 0xbb29, 0x1a8d: 0xbb41, 0x1a8e: 0xbb59, 0x1a8f: 0xbb71, 0x1a90: 0xbb89, 0x1a91: 0x2109, + 0x1a92: 0x1111, 0x1a93: 0xbba1, 0x1a94: 0xbba1, 0x1a95: 0xbbb9, 0x1a96: 0xbbd1, 0x1a97: 0x10e1, + 0x1a98: 0x10f9, 0x1a99: 0xbbe9, 0x1a9a: 0x2079, 0x1a9b: 0xbc21, 0x1a9c: 0xbac9, 0x1a9d: 0x1429, + 0x1a9e: 0xbb11, 0x1a9f: 0x10e1, 0x1aa0: 0x1111, 0x1aa1: 0x2109, 0x1aa2: 0xbab1, 0x1aa3: 0x1099, + 0x1aa4: 0x10b1, 0x1aa5: 0x10c9, 0x1aa6: 0xbac9, 0x1aa7: 0xbae1, 0x1aa8: 0xbaf9, 0x1aa9: 0x1429, + 0x1aaa: 0x1a31, 0x1aab: 0xbb11, 0x1aac: 0xbb29, 0x1aad: 0xbb41, 0x1aae: 0xbb59, 0x1aaf: 0xbb71, + 0x1ab0: 0xbb89, 0x1ab1: 0x2109, 0x1ab2: 0x1111, 0x1ab3: 0x1429, 0x1ab4: 0xbba1, 0x1ab5: 0xbbb9, + 0x1ab6: 0xbbd1, 0x1ab7: 0x10e1, 0x1ab8: 0x10f9, 0x1ab9: 0xbbe9, 0x1aba: 0x2079, 0x1abb: 0xbc01, + 0x1abc: 0xbab1, 0x1abd: 0x1099, 0x1abe: 0x10b1, 0x1abf: 0x10c9, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0xbac9, 0x1ac1: 0xbae1, 0x1ac2: 0xbaf9, 0x1ac3: 0x1429, 0x1ac4: 0x1a31, 0x1ac5: 0xbb11, + 0x1ac6: 0xbb29, 0x1ac7: 0xbb41, 0x1ac8: 0xbb59, 0x1ac9: 0xbb71, 0x1aca: 0xbb89, 0x1acb: 0x2109, + 0x1acc: 0x1111, 0x1acd: 0xbba1, 0x1ace: 0xbba1, 0x1acf: 0xbbb9, 0x1ad0: 0xbbd1, 0x1ad1: 0x10e1, + 0x1ad2: 0x10f9, 0x1ad3: 0xbbe9, 0x1ad4: 0x2079, 0x1ad5: 0xbc21, 0x1ad6: 0xbac9, 0x1ad7: 0x1429, + 0x1ad8: 0xbb11, 0x1ad9: 0x10e1, 0x1ada: 0x1111, 0x1adb: 0x2109, 0x1adc: 0xbab1, 0x1add: 0x1099, + 0x1ade: 0x10b1, 0x1adf: 0x10c9, 0x1ae0: 0xbac9, 0x1ae1: 0xbae1, 0x1ae2: 0xbaf9, 0x1ae3: 0x1429, + 0x1ae4: 0x1a31, 0x1ae5: 0xbb11, 0x1ae6: 0xbb29, 0x1ae7: 0xbb41, 0x1ae8: 0xbb59, 0x1ae9: 0xbb71, + 0x1aea: 0xbb89, 0x1aeb: 0x2109, 0x1aec: 0x1111, 0x1aed: 0x1429, 0x1aee: 0xbba1, 0x1aef: 0xbbb9, + 0x1af0: 0xbbd1, 0x1af1: 0x10e1, 0x1af2: 0x10f9, 0x1af3: 0xbbe9, 0x1af4: 0x2079, 0x1af5: 0xbc01, + 0x1af6: 0xbab1, 0x1af7: 0x1099, 0x1af8: 0x10b1, 0x1af9: 0x10c9, 0x1afa: 0xbac9, 0x1afb: 0xbae1, + 0x1afc: 0xbaf9, 0x1afd: 0x1429, 0x1afe: 0x1a31, 0x1aff: 0xbb11, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0xbb29, 0x1b01: 0xbb41, 0x1b02: 0xbb59, 0x1b03: 0xbb71, 0x1b04: 0xbb89, 0x1b05: 0x2109, + 0x1b06: 0x1111, 0x1b07: 0xbba1, 0x1b08: 0xbba1, 0x1b09: 0xbbb9, 0x1b0a: 0xbbd1, 0x1b0b: 0x10e1, + 0x1b0c: 0x10f9, 0x1b0d: 0xbbe9, 0x1b0e: 0x2079, 0x1b0f: 0xbc21, 0x1b10: 0xbac9, 0x1b11: 0x1429, + 0x1b12: 0xbb11, 0x1b13: 0x10e1, 0x1b14: 0x1111, 0x1b15: 0x2109, 0x1b16: 0xbab1, 0x1b17: 0x1099, + 0x1b18: 0x10b1, 0x1b19: 0x10c9, 0x1b1a: 0xbac9, 0x1b1b: 0xbae1, 0x1b1c: 0xbaf9, 0x1b1d: 0x1429, + 0x1b1e: 0x1a31, 0x1b1f: 0xbb11, 0x1b20: 0xbb29, 0x1b21: 0xbb41, 0x1b22: 0xbb59, 0x1b23: 0xbb71, + 0x1b24: 0xbb89, 0x1b25: 0x2109, 0x1b26: 0x1111, 0x1b27: 0x1429, 0x1b28: 0xbba1, 0x1b29: 0xbbb9, + 0x1b2a: 0xbbd1, 0x1b2b: 0x10e1, 0x1b2c: 0x10f9, 0x1b2d: 0xbbe9, 0x1b2e: 0x2079, 0x1b2f: 0xbc01, + 0x1b30: 0xbab1, 0x1b31: 0x1099, 0x1b32: 0x10b1, 0x1b33: 0x10c9, 0x1b34: 0xbac9, 0x1b35: 0xbae1, + 0x1b36: 0xbaf9, 0x1b37: 0x1429, 0x1b38: 0x1a31, 0x1b39: 0xbb11, 0x1b3a: 0xbb29, 0x1b3b: 0xbb41, + 0x1b3c: 0xbb59, 0x1b3d: 0xbb71, 0x1b3e: 0xbb89, 0x1b3f: 0x2109, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x1111, 0x1b41: 0xbba1, 0x1b42: 0xbba1, 0x1b43: 0xbbb9, 0x1b44: 0xbbd1, 0x1b45: 0x10e1, + 0x1b46: 0x10f9, 0x1b47: 0xbbe9, 0x1b48: 0x2079, 0x1b49: 0xbc21, 0x1b4a: 0xbac9, 0x1b4b: 0x1429, + 0x1b4c: 0xbb11, 0x1b4d: 0x10e1, 0x1b4e: 0x1111, 0x1b4f: 0x2109, 0x1b50: 0xbab1, 0x1b51: 0x1099, + 0x1b52: 0x10b1, 0x1b53: 0x10c9, 0x1b54: 0xbac9, 0x1b55: 0xbae1, 0x1b56: 0xbaf9, 0x1b57: 0x1429, + 0x1b58: 0x1a31, 0x1b59: 0xbb11, 0x1b5a: 0xbb29, 0x1b5b: 0xbb41, 0x1b5c: 0xbb59, 0x1b5d: 0xbb71, + 0x1b5e: 0xbb89, 0x1b5f: 0x2109, 0x1b60: 0x1111, 0x1b61: 0x1429, 0x1b62: 0xbba1, 0x1b63: 0xbbb9, + 0x1b64: 0xbbd1, 0x1b65: 0x10e1, 0x1b66: 0x10f9, 0x1b67: 0xbbe9, 0x1b68: 0x2079, 0x1b69: 0xbc01, + 0x1b6a: 0xbab1, 0x1b6b: 0x1099, 0x1b6c: 0x10b1, 0x1b6d: 0x10c9, 0x1b6e: 0xbac9, 0x1b6f: 0xbae1, + 0x1b70: 0xbaf9, 0x1b71: 0x1429, 0x1b72: 0x1a31, 0x1b73: 0xbb11, 0x1b74: 0xbb29, 0x1b75: 0xbb41, + 0x1b76: 0xbb59, 0x1b77: 0xbb71, 0x1b78: 0xbb89, 0x1b79: 0x2109, 0x1b7a: 0x1111, 0x1b7b: 0xbba1, + 0x1b7c: 0xbba1, 0x1b7d: 0xbbb9, 0x1b7e: 0xbbd1, 0x1b7f: 0x10e1, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x10f9, 0x1b81: 0xbbe9, 0x1b82: 0x2079, 0x1b83: 0xbc21, 0x1b84: 0xbac9, 0x1b85: 0x1429, + 0x1b86: 0xbb11, 0x1b87: 0x10e1, 0x1b88: 0x1111, 0x1b89: 0x2109, 0x1b8a: 0xbc41, 0x1b8b: 0xbc41, + 0x1b8c: 0x0040, 0x1b8d: 0x0040, 0x1b8e: 0x1f41, 0x1b8f: 0x00c9, 0x1b90: 0x0069, 0x1b91: 0x0079, + 0x1b92: 0x1f51, 0x1b93: 0x1f61, 0x1b94: 0x1f71, 0x1b95: 0x1f81, 0x1b96: 0x1f91, 0x1b97: 0x1fa1, + 0x1b98: 0x1f41, 0x1b99: 0x00c9, 0x1b9a: 0x0069, 0x1b9b: 0x0079, 0x1b9c: 0x1f51, 0x1b9d: 0x1f61, + 0x1b9e: 0x1f71, 0x1b9f: 0x1f81, 0x1ba0: 0x1f91, 0x1ba1: 0x1fa1, 0x1ba2: 0x1f41, 0x1ba3: 0x00c9, + 0x1ba4: 0x0069, 0x1ba5: 0x0079, 0x1ba6: 0x1f51, 0x1ba7: 0x1f61, 0x1ba8: 0x1f71, 0x1ba9: 0x1f81, + 0x1baa: 0x1f91, 0x1bab: 0x1fa1, 0x1bac: 0x1f41, 0x1bad: 0x00c9, 0x1bae: 0x0069, 0x1baf: 0x0079, + 0x1bb0: 0x1f51, 0x1bb1: 0x1f61, 0x1bb2: 0x1f71, 0x1bb3: 0x1f81, 0x1bb4: 0x1f91, 0x1bb5: 0x1fa1, + 0x1bb6: 0x1f41, 0x1bb7: 0x00c9, 0x1bb8: 0x0069, 0x1bb9: 0x0079, 0x1bba: 0x1f51, 0x1bbb: 0x1f61, + 0x1bbc: 0x1f71, 0x1bbd: 0x1f81, 0x1bbe: 0x1f91, 0x1bbf: 0x1fa1, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0xe115, 0x1bc1: 0xe115, 0x1bc2: 0xe135, 0x1bc3: 0xe135, 0x1bc4: 0xe115, 0x1bc5: 0xe115, + 0x1bc6: 0xe175, 0x1bc7: 0xe175, 0x1bc8: 0xe115, 0x1bc9: 0xe115, 0x1bca: 0xe135, 0x1bcb: 0xe135, + 0x1bcc: 0xe115, 0x1bcd: 0xe115, 0x1bce: 0xe1f5, 0x1bcf: 0xe1f5, 0x1bd0: 0xe115, 0x1bd1: 0xe115, + 0x1bd2: 0xe135, 0x1bd3: 0xe135, 0x1bd4: 0xe115, 0x1bd5: 0xe115, 0x1bd6: 0xe175, 0x1bd7: 0xe175, + 0x1bd8: 0xe115, 0x1bd9: 0xe115, 0x1bda: 0xe135, 0x1bdb: 0xe135, 0x1bdc: 0xe115, 0x1bdd: 0xe115, + 0x1bde: 0x8b05, 0x1bdf: 0x8b05, 0x1be0: 0x04b5, 0x1be1: 0x04b5, 0x1be2: 0x0208, 0x1be3: 0x0208, + 0x1be4: 0x0208, 0x1be5: 0x0208, 0x1be6: 0x0208, 0x1be7: 0x0208, 0x1be8: 0x0208, 0x1be9: 0x0208, + 0x1bea: 0x0208, 0x1beb: 0x0208, 0x1bec: 0x0208, 0x1bed: 0x0208, 0x1bee: 0x0208, 0x1bef: 0x0208, + 0x1bf0: 0x0208, 0x1bf1: 0x0208, 0x1bf2: 0x0208, 0x1bf3: 0x0208, 0x1bf4: 0x0208, 0x1bf5: 0x0208, + 0x1bf6: 0x0208, 0x1bf7: 0x0208, 0x1bf8: 0x0208, 0x1bf9: 0x0208, 0x1bfa: 0x0208, 0x1bfb: 0x0208, + 0x1bfc: 0x0208, 0x1bfd: 0x0208, 0x1bfe: 0x0208, 0x1bff: 0x0208, + // Block 0x70, offset 0x1c00 + 0x1c00: 0xb189, 0x1c01: 0xb1a1, 0x1c02: 0xb201, 0x1c03: 0xb249, 0x1c04: 0x0040, 0x1c05: 0xb411, + 0x1c06: 0xb291, 0x1c07: 0xb219, 0x1c08: 0xb309, 0x1c09: 0xb429, 0x1c0a: 0xb399, 0x1c0b: 0xb3b1, + 0x1c0c: 0xb3c9, 0x1c0d: 0xb3e1, 0x1c0e: 0xb2a9, 0x1c0f: 0xb339, 0x1c10: 0xb369, 0x1c11: 0xb2d9, + 0x1c12: 0xb381, 0x1c13: 0xb279, 0x1c14: 0xb2c1, 0x1c15: 0xb1d1, 0x1c16: 0xb1e9, 0x1c17: 0xb231, + 0x1c18: 0xb261, 0x1c19: 0xb2f1, 0x1c1a: 0xb321, 0x1c1b: 0xb351, 0x1c1c: 0xbc59, 0x1c1d: 0x7949, + 0x1c1e: 0xbc71, 0x1c1f: 0xbc89, 0x1c20: 0x0040, 0x1c21: 0xb1a1, 0x1c22: 0xb201, 0x1c23: 0x0040, + 0x1c24: 0xb3f9, 0x1c25: 0x0040, 0x1c26: 0x0040, 0x1c27: 0xb219, 0x1c28: 0x0040, 0x1c29: 0xb429, + 0x1c2a: 0xb399, 0x1c2b: 0xb3b1, 0x1c2c: 0xb3c9, 0x1c2d: 0xb3e1, 0x1c2e: 0xb2a9, 0x1c2f: 0xb339, + 0x1c30: 0xb369, 0x1c31: 0xb2d9, 0x1c32: 0xb381, 0x1c33: 0x0040, 0x1c34: 0xb2c1, 0x1c35: 0xb1d1, + 0x1c36: 0xb1e9, 0x1c37: 0xb231, 0x1c38: 0x0040, 0x1c39: 0xb2f1, 0x1c3a: 0x0040, 0x1c3b: 0xb351, + 0x1c3c: 0x0040, 0x1c3d: 0x0040, 0x1c3e: 0x0040, 0x1c3f: 0x0040, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x0040, 0x1c41: 0x0040, 0x1c42: 0xb201, 0x1c43: 0x0040, 0x1c44: 0x0040, 0x1c45: 0x0040, + 0x1c46: 0x0040, 0x1c47: 0xb219, 0x1c48: 0x0040, 0x1c49: 0xb429, 0x1c4a: 0x0040, 0x1c4b: 0xb3b1, + 0x1c4c: 0x0040, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0x0040, 0x1c51: 0xb2d9, + 0x1c52: 0xb381, 0x1c53: 0x0040, 0x1c54: 0xb2c1, 0x1c55: 0x0040, 0x1c56: 0x0040, 0x1c57: 0xb231, + 0x1c58: 0x0040, 0x1c59: 0xb2f1, 0x1c5a: 0x0040, 0x1c5b: 0xb351, 0x1c5c: 0x0040, 0x1c5d: 0x7949, + 0x1c5e: 0x0040, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040, + 0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0xb309, 0x1c69: 0xb429, + 0x1c6a: 0xb399, 0x1c6b: 0x0040, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339, + 0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1, + 0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0xb321, 0x1c7b: 0xb351, + 0x1c7c: 0xbc59, 0x1c7d: 0x0040, 0x1c7e: 0xbc71, 0x1c7f: 0x0040, + // Block 0x72, offset 0x1c80 + 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0xb3f9, 0x1c85: 0xb411, + 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1, + 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, + 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x0040, + 0x1c9e: 0x0040, 0x1c9f: 0x0040, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0xb249, + 0x1ca4: 0x0040, 0x1ca5: 0xb411, 0x1ca6: 0xb291, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429, + 0x1caa: 0x0040, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0xb279, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0xb261, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351, + 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0040, 0x1cc1: 0xbca2, 0x1cc2: 0xbcba, 0x1cc3: 0xbcd2, 0x1cc4: 0xbcea, 0x1cc5: 0xbd02, + 0x1cc6: 0xbd1a, 0x1cc7: 0xbd32, 0x1cc8: 0xbd4a, 0x1cc9: 0xbd62, 0x1cca: 0xbd7a, 0x1ccb: 0x0018, + 0x1ccc: 0x0018, 0x1ccd: 0x0040, 0x1cce: 0x0040, 0x1ccf: 0x0040, 0x1cd0: 0xbd92, 0x1cd1: 0xbdb2, + 0x1cd2: 0xbdd2, 0x1cd3: 0xbdf2, 0x1cd4: 0xbe12, 0x1cd5: 0xbe32, 0x1cd6: 0xbe52, 0x1cd7: 0xbe72, + 0x1cd8: 0xbe92, 0x1cd9: 0xbeb2, 0x1cda: 0xbed2, 0x1cdb: 0xbef2, 0x1cdc: 0xbf12, 0x1cdd: 0xbf32, + 0x1cde: 0xbf52, 0x1cdf: 0xbf72, 0x1ce0: 0xbf92, 0x1ce1: 0xbfb2, 0x1ce2: 0xbfd2, 0x1ce3: 0xbff2, + 0x1ce4: 0xc012, 0x1ce5: 0xc032, 0x1ce6: 0xc052, 0x1ce7: 0xc072, 0x1ce8: 0xc092, 0x1ce9: 0xc0b2, + 0x1cea: 0xc0d1, 0x1ceb: 0x1159, 0x1cec: 0x0269, 0x1ced: 0x6671, 0x1cee: 0xc111, 0x1cef: 0x0040, + 0x1cf0: 0x0039, 0x1cf1: 0x0ee9, 0x1cf2: 0x1159, 0x1cf3: 0x0ef9, 0x1cf4: 0x0f09, 0x1cf5: 0x1199, + 0x1cf6: 0x0f31, 0x1cf7: 0x0249, 0x1cf8: 0x0f41, 0x1cf9: 0x0259, 0x1cfa: 0x0f51, 0x1cfb: 0x0359, + 0x1cfc: 0x0f61, 0x1cfd: 0x0f71, 0x1cfe: 0x00d9, 0x1cff: 0x0f99, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x2039, 0x1d01: 0x0269, 0x1d02: 0x01d9, 0x1d03: 0x0fa9, 0x1d04: 0x0fb9, 0x1d05: 0x1089, + 0x1d06: 0x0279, 0x1d07: 0x0369, 0x1d08: 0x0289, 0x1d09: 0x13d1, 0x1d0a: 0xc129, 0x1d0b: 0x65b1, + 0x1d0c: 0xc141, 0x1d0d: 0x1441, 0x1d0e: 0xc159, 0x1d0f: 0xc179, 0x1d10: 0x0018, 0x1d11: 0x0018, + 0x1d12: 0x0018, 0x1d13: 0x0018, 0x1d14: 0x0018, 0x1d15: 0x0018, 0x1d16: 0x0018, 0x1d17: 0x0018, + 0x1d18: 0x0018, 0x1d19: 0x0018, 0x1d1a: 0x0018, 0x1d1b: 0x0018, 0x1d1c: 0x0018, 0x1d1d: 0x0018, + 0x1d1e: 0x0018, 0x1d1f: 0x0018, 0x1d20: 0x0018, 0x1d21: 0x0018, 0x1d22: 0x0018, 0x1d23: 0x0018, + 0x1d24: 0x0018, 0x1d25: 0x0018, 0x1d26: 0x0018, 0x1d27: 0x0018, 0x1d28: 0x0018, 0x1d29: 0x0018, + 0x1d2a: 0xc191, 0x1d2b: 0xc1a9, 0x1d2c: 0x0040, 0x1d2d: 0x0040, 0x1d2e: 0x0040, 0x1d2f: 0x0040, + 0x1d30: 0x0018, 0x1d31: 0x0018, 0x1d32: 0x0018, 0x1d33: 0x0018, 0x1d34: 0x0018, 0x1d35: 0x0018, + 0x1d36: 0x0018, 0x1d37: 0x0018, 0x1d38: 0x0018, 0x1d39: 0x0018, 0x1d3a: 0x0018, 0x1d3b: 0x0018, + 0x1d3c: 0x0018, 0x1d3d: 0x0018, 0x1d3e: 0x0018, 0x1d3f: 0x0018, + // Block 0x75, offset 0x1d40 + 0x1d40: 0xc1d9, 0x1d41: 0xc211, 0x1d42: 0xc249, 0x1d43: 0x0040, 0x1d44: 0x0040, 0x1d45: 0x0040, + 0x1d46: 0x0040, 0x1d47: 0x0040, 0x1d48: 0x0040, 0x1d49: 0x0040, 0x1d4a: 0x0040, 0x1d4b: 0x0040, + 0x1d4c: 0x0040, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xc269, 0x1d51: 0xc289, + 0x1d52: 0xc2a9, 0x1d53: 0xc2c9, 0x1d54: 0xc2e9, 0x1d55: 0xc309, 0x1d56: 0xc329, 0x1d57: 0xc349, + 0x1d58: 0xc369, 0x1d59: 0xc389, 0x1d5a: 0xc3a9, 0x1d5b: 0xc3c9, 0x1d5c: 0xc3e9, 0x1d5d: 0xc409, + 0x1d5e: 0xc429, 0x1d5f: 0xc449, 0x1d60: 0xc469, 0x1d61: 0xc489, 0x1d62: 0xc4a9, 0x1d63: 0xc4c9, + 0x1d64: 0xc4e9, 0x1d65: 0xc509, 0x1d66: 0xc529, 0x1d67: 0xc549, 0x1d68: 0xc569, 0x1d69: 0xc589, + 0x1d6a: 0xc5a9, 0x1d6b: 0xc5c9, 0x1d6c: 0xc5e9, 0x1d6d: 0xc609, 0x1d6e: 0xc629, 0x1d6f: 0xc649, + 0x1d70: 0xc669, 0x1d71: 0xc689, 0x1d72: 0xc6a9, 0x1d73: 0xc6c9, 0x1d74: 0xc6e9, 0x1d75: 0xc709, + 0x1d76: 0xc729, 0x1d77: 0xc749, 0x1d78: 0xc769, 0x1d79: 0xc789, 0x1d7a: 0xc7a9, 0x1d7b: 0xc7c9, + 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040, + // Block 0x76, offset 0x1d80 + 0x1d80: 0xcaf9, 0x1d81: 0xcb19, 0x1d82: 0xcb39, 0x1d83: 0x8b1d, 0x1d84: 0xcb59, 0x1d85: 0xcb79, + 0x1d86: 0xcb99, 0x1d87: 0xcbb9, 0x1d88: 0xcbd9, 0x1d89: 0xcbf9, 0x1d8a: 0xcc19, 0x1d8b: 0xcc39, + 0x1d8c: 0xcc59, 0x1d8d: 0x8b3d, 0x1d8e: 0xcc79, 0x1d8f: 0xcc99, 0x1d90: 0xccb9, 0x1d91: 0xccd9, + 0x1d92: 0x8b5d, 0x1d93: 0xccf9, 0x1d94: 0xcd19, 0x1d95: 0xc429, 0x1d96: 0x8b7d, 0x1d97: 0xcd39, + 0x1d98: 0xcd59, 0x1d99: 0xcd79, 0x1d9a: 0xcd99, 0x1d9b: 0xcdb9, 0x1d9c: 0x8b9d, 0x1d9d: 0xcdd9, + 0x1d9e: 0xcdf9, 0x1d9f: 0xce19, 0x1da0: 0xce39, 0x1da1: 0xce59, 0x1da2: 0xc789, 0x1da3: 0xce79, + 0x1da4: 0xce99, 0x1da5: 0xceb9, 0x1da6: 0xced9, 0x1da7: 0xcef9, 0x1da8: 0xcf19, 0x1da9: 0xcf39, + 0x1daa: 0xcf59, 0x1dab: 0xcf79, 0x1dac: 0xcf99, 0x1dad: 0xcfb9, 0x1dae: 0xcfd9, 0x1daf: 0xcff9, + 0x1db0: 0xd019, 0x1db1: 0xd039, 0x1db2: 0xd039, 0x1db3: 0xd039, 0x1db4: 0x8bbd, 0x1db5: 0xd059, + 0x1db6: 0xd079, 0x1db7: 0xd099, 0x1db8: 0x8bdd, 0x1db9: 0xd0b9, 0x1dba: 0xd0d9, 0x1dbb: 0xd0f9, + 0x1dbc: 0xd119, 0x1dbd: 0xd139, 0x1dbe: 0xd159, 0x1dbf: 0xd179, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xd199, 0x1dc1: 0xd1b9, 0x1dc2: 0xd1d9, 0x1dc3: 0xd1f9, 0x1dc4: 0xd219, 0x1dc5: 0xd239, + 0x1dc6: 0xd239, 0x1dc7: 0xd259, 0x1dc8: 0xd279, 0x1dc9: 0xd299, 0x1dca: 0xd2b9, 0x1dcb: 0xd2d9, + 0x1dcc: 0xd2f9, 0x1dcd: 0xd319, 0x1dce: 0xd339, 0x1dcf: 0xd359, 0x1dd0: 0xd379, 0x1dd1: 0xd399, + 0x1dd2: 0xd3b9, 0x1dd3: 0xd3d9, 0x1dd4: 0xd3f9, 0x1dd5: 0xd419, 0x1dd6: 0xd439, 0x1dd7: 0xd459, + 0x1dd8: 0xd479, 0x1dd9: 0x8bfd, 0x1dda: 0xd499, 0x1ddb: 0xd4b9, 0x1ddc: 0xd4d9, 0x1ddd: 0xc309, + 0x1dde: 0xd4f9, 0x1ddf: 0xd519, 0x1de0: 0x8c1d, 0x1de1: 0x8c3d, 0x1de2: 0xd539, 0x1de3: 0xd559, + 0x1de4: 0xd579, 0x1de5: 0xd599, 0x1de6: 0xd5b9, 0x1de7: 0xd5d9, 0x1de8: 0x0040, 0x1de9: 0xd5f9, + 0x1dea: 0xd619, 0x1deb: 0xd619, 0x1dec: 0x8c5d, 0x1ded: 0xd639, 0x1dee: 0xd659, 0x1def: 0xd679, + 0x1df0: 0xd699, 0x1df1: 0x8c7d, 0x1df2: 0xd6b9, 0x1df3: 0xd6d9, 0x1df4: 0x0040, 0x1df5: 0xd6f9, + 0x1df6: 0xd719, 0x1df7: 0xd739, 0x1df8: 0xd759, 0x1df9: 0xd779, 0x1dfa: 0xd799, 0x1dfb: 0x8c9d, + 0x1dfc: 0xd7b9, 0x1dfd: 0x8cbd, 0x1dfe: 0xd7d9, 0x1dff: 0xd7f9, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xd819, 0x1e01: 0xd839, 0x1e02: 0xd859, 0x1e03: 0xd879, 0x1e04: 0xd899, 0x1e05: 0xd8b9, + 0x1e06: 0xd8d9, 0x1e07: 0xd8f9, 0x1e08: 0xd919, 0x1e09: 0x8cdd, 0x1e0a: 0xd939, 0x1e0b: 0xd959, + 0x1e0c: 0xd979, 0x1e0d: 0xd999, 0x1e0e: 0xd9b9, 0x1e0f: 0x8cfd, 0x1e10: 0xd9d9, 0x1e11: 0x8d1d, + 0x1e12: 0x8d3d, 0x1e13: 0xd9f9, 0x1e14: 0xda19, 0x1e15: 0xda19, 0x1e16: 0xda39, 0x1e17: 0x8d5d, + 0x1e18: 0x8d7d, 0x1e19: 0xda59, 0x1e1a: 0xda79, 0x1e1b: 0xda99, 0x1e1c: 0xdab9, 0x1e1d: 0xdad9, + 0x1e1e: 0xdaf9, 0x1e1f: 0xdb19, 0x1e20: 0xdb39, 0x1e21: 0xdb59, 0x1e22: 0xdb79, 0x1e23: 0xdb99, + 0x1e24: 0x8d9d, 0x1e25: 0xdbb9, 0x1e26: 0xdbd9, 0x1e27: 0xdbf9, 0x1e28: 0xdc19, 0x1e29: 0xdbf9, + 0x1e2a: 0xdc39, 0x1e2b: 0xdc59, 0x1e2c: 0xdc79, 0x1e2d: 0xdc99, 0x1e2e: 0xdcb9, 0x1e2f: 0xdcd9, + 0x1e30: 0xdcf9, 0x1e31: 0xdd19, 0x1e32: 0xdd39, 0x1e33: 0xdd59, 0x1e34: 0xdd79, 0x1e35: 0xdd99, + 0x1e36: 0xddb9, 0x1e37: 0xddd9, 0x1e38: 0x8dbd, 0x1e39: 0xddf9, 0x1e3a: 0xde19, 0x1e3b: 0xde39, + 0x1e3c: 0xde59, 0x1e3d: 0xde79, 0x1e3e: 0x8ddd, 0x1e3f: 0xde99, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xe599, 0x1e41: 0xe5b9, 0x1e42: 0xe5d9, 0x1e43: 0xe5f9, 0x1e44: 0xe619, 0x1e45: 0xe639, + 0x1e46: 0x8efd, 0x1e47: 0xe659, 0x1e48: 0xe679, 0x1e49: 0xe699, 0x1e4a: 0xe6b9, 0x1e4b: 0xe6d9, + 0x1e4c: 0xe6f9, 0x1e4d: 0x8f1d, 0x1e4e: 0xe719, 0x1e4f: 0xe739, 0x1e50: 0x8f3d, 0x1e51: 0x8f5d, + 0x1e52: 0xe759, 0x1e53: 0xe779, 0x1e54: 0xe799, 0x1e55: 0xe7b9, 0x1e56: 0xe7d9, 0x1e57: 0xe7f9, + 0x1e58: 0xe819, 0x1e59: 0xe839, 0x1e5a: 0xe859, 0x1e5b: 0x8f7d, 0x1e5c: 0xe879, 0x1e5d: 0x8f9d, + 0x1e5e: 0xe899, 0x1e5f: 0x0040, 0x1e60: 0xe8b9, 0x1e61: 0xe8d9, 0x1e62: 0xe8f9, 0x1e63: 0x8fbd, + 0x1e64: 0xe919, 0x1e65: 0xe939, 0x1e66: 0x8fdd, 0x1e67: 0x8ffd, 0x1e68: 0xe959, 0x1e69: 0xe979, + 0x1e6a: 0xe999, 0x1e6b: 0xe9b9, 0x1e6c: 0xe9d9, 0x1e6d: 0xe9d9, 0x1e6e: 0xe9f9, 0x1e6f: 0xea19, + 0x1e70: 0xea39, 0x1e71: 0xea59, 0x1e72: 0xea79, 0x1e73: 0xea99, 0x1e74: 0xeab9, 0x1e75: 0x901d, + 0x1e76: 0xead9, 0x1e77: 0x903d, 0x1e78: 0xeaf9, 0x1e79: 0x905d, 0x1e7a: 0xeb19, 0x1e7b: 0x907d, + 0x1e7c: 0x909d, 0x1e7d: 0x90bd, 0x1e7e: 0xeb39, 0x1e7f: 0xeb59, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xeb79, 0x1e81: 0x90dd, 0x1e82: 0x90fd, 0x1e83: 0x911d, 0x1e84: 0x913d, 0x1e85: 0xeb99, + 0x1e86: 0xebb9, 0x1e87: 0xebb9, 0x1e88: 0xebd9, 0x1e89: 0xebf9, 0x1e8a: 0xec19, 0x1e8b: 0xec39, + 0x1e8c: 0xec59, 0x1e8d: 0x915d, 0x1e8e: 0xec79, 0x1e8f: 0xec99, 0x1e90: 0xecb9, 0x1e91: 0xecd9, + 0x1e92: 0x917d, 0x1e93: 0xecf9, 0x1e94: 0x919d, 0x1e95: 0x91bd, 0x1e96: 0xed19, 0x1e97: 0xed39, + 0x1e98: 0xed59, 0x1e99: 0xed79, 0x1e9a: 0xed99, 0x1e9b: 0xedb9, 0x1e9c: 0x91dd, 0x1e9d: 0x91fd, + 0x1e9e: 0x921d, 0x1e9f: 0x0040, 0x1ea0: 0xedd9, 0x1ea1: 0x923d, 0x1ea2: 0xedf9, 0x1ea3: 0xee19, + 0x1ea4: 0xee39, 0x1ea5: 0x925d, 0x1ea6: 0xee59, 0x1ea7: 0xee79, 0x1ea8: 0xee99, 0x1ea9: 0xeeb9, + 0x1eaa: 0xeed9, 0x1eab: 0x927d, 0x1eac: 0xeef9, 0x1ead: 0xef19, 0x1eae: 0xef39, 0x1eaf: 0xef59, + 0x1eb0: 0xef79, 0x1eb1: 0xef99, 0x1eb2: 0x929d, 0x1eb3: 0x92bd, 0x1eb4: 0xefb9, 0x1eb5: 0x92dd, + 0x1eb6: 0xefd9, 0x1eb7: 0x92fd, 0x1eb8: 0xeff9, 0x1eb9: 0xf019, 0x1eba: 0xf039, 0x1ebb: 0x931d, + 0x1ebc: 0x933d, 0x1ebd: 0xf059, 0x1ebe: 0x935d, 0x1ebf: 0xf079, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xf6b9, 0x1ec1: 0xf6d9, 0x1ec2: 0xf6f9, 0x1ec3: 0xf719, 0x1ec4: 0xf739, 0x1ec5: 0x951d, + 0x1ec6: 0xf759, 0x1ec7: 0xf779, 0x1ec8: 0xf799, 0x1ec9: 0xf7b9, 0x1eca: 0xf7d9, 0x1ecb: 0x953d, + 0x1ecc: 0x955d, 0x1ecd: 0xf7f9, 0x1ece: 0xf819, 0x1ecf: 0xf839, 0x1ed0: 0xf859, 0x1ed1: 0xf879, + 0x1ed2: 0xf899, 0x1ed3: 0x957d, 0x1ed4: 0xf8b9, 0x1ed5: 0xf8d9, 0x1ed6: 0xf8f9, 0x1ed7: 0xf919, + 0x1ed8: 0x959d, 0x1ed9: 0x95bd, 0x1eda: 0xf939, 0x1edb: 0xf959, 0x1edc: 0xf979, 0x1edd: 0x95dd, + 0x1ede: 0xf999, 0x1edf: 0xf9b9, 0x1ee0: 0x6815, 0x1ee1: 0x95fd, 0x1ee2: 0xf9d9, 0x1ee3: 0xf9f9, + 0x1ee4: 0xfa19, 0x1ee5: 0x961d, 0x1ee6: 0xfa39, 0x1ee7: 0xfa59, 0x1ee8: 0xfa79, 0x1ee9: 0xfa99, + 0x1eea: 0xfab9, 0x1eeb: 0xfad9, 0x1eec: 0xfaf9, 0x1eed: 0x963d, 0x1eee: 0xfb19, 0x1eef: 0xfb39, + 0x1ef0: 0xfb59, 0x1ef1: 0x965d, 0x1ef2: 0xfb79, 0x1ef3: 0xfb99, 0x1ef4: 0xfbb9, 0x1ef5: 0xfbd9, + 0x1ef6: 0x7b35, 0x1ef7: 0x967d, 0x1ef8: 0xfbf9, 0x1ef9: 0xfc19, 0x1efa: 0xfc39, 0x1efb: 0x969d, + 0x1efc: 0xfc59, 0x1efd: 0x96bd, 0x1efe: 0xfc79, 0x1eff: 0xfc79, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xfc99, 0x1f01: 0x96dd, 0x1f02: 0xfcb9, 0x1f03: 0xfcd9, 0x1f04: 0xfcf9, 0x1f05: 0xfd19, + 0x1f06: 0xfd39, 0x1f07: 0xfd59, 0x1f08: 0xfd79, 0x1f09: 0x96fd, 0x1f0a: 0xfd99, 0x1f0b: 0xfdb9, + 0x1f0c: 0xfdd9, 0x1f0d: 0xfdf9, 0x1f0e: 0xfe19, 0x1f0f: 0xfe39, 0x1f10: 0x971d, 0x1f11: 0xfe59, + 0x1f12: 0x973d, 0x1f13: 0x975d, 0x1f14: 0x977d, 0x1f15: 0xfe79, 0x1f16: 0xfe99, 0x1f17: 0xfeb9, + 0x1f18: 0xfed9, 0x1f19: 0xfef9, 0x1f1a: 0xff19, 0x1f1b: 0xff39, 0x1f1c: 0xff59, 0x1f1d: 0x979d, + 0x1f1e: 0x0040, 0x1f1f: 0x0040, 0x1f20: 0x0040, 0x1f21: 0x0040, 0x1f22: 0x0040, 0x1f23: 0x0040, + 0x1f24: 0x0040, 0x1f25: 0x0040, 0x1f26: 0x0040, 0x1f27: 0x0040, 0x1f28: 0x0040, 0x1f29: 0x0040, + 0x1f2a: 0x0040, 0x1f2b: 0x0040, 0x1f2c: 0x0040, 0x1f2d: 0x0040, 0x1f2e: 0x0040, 0x1f2f: 0x0040, + 0x1f30: 0x0040, 0x1f31: 0x0040, 0x1f32: 0x0040, 0x1f33: 0x0040, 0x1f34: 0x0040, 0x1f35: 0x0040, + 0x1f36: 0x0040, 0x1f37: 0x0040, 0x1f38: 0x0040, 0x1f39: 0x0040, 0x1f3a: 0x0040, 0x1f3b: 0x0040, + 0x1f3c: 0x0040, 0x1f3d: 0x0040, 0x1f3e: 0x0040, 0x1f3f: 0x0040, +} + +// idnaIndex: 35 blocks, 2240 entries, 4480 bytes +// Block 0 is the zero block. +var idnaIndex = [2240]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7b, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7c, 0xca: 0x7d, 0xcb: 0x07, 0xcc: 0x7e, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x7f, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x80, 0xd6: 0x81, 0xd7: 0x82, + 0xd8: 0x0f, 0xd9: 0x83, 0xda: 0x84, 0xdb: 0x10, 0xdc: 0x11, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20, + // Block 0x4, offset 0x100 + 0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x12, 0x126: 0x13, 0x127: 0x14, + 0x128: 0x15, 0x129: 0x16, 0x12a: 0x17, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1c, 0x132: 0x1d, 0x133: 0x1e, 0x134: 0x8f, 0x135: 0x1f, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x20, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x21, 0x13e: 0x22, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9b, 0x147: 0x9b, + 0x148: 0x9d, 0x149: 0x9e, 0x14a: 0x9f, 0x14b: 0xa0, 0x14c: 0xa1, 0x14d: 0xa2, 0x14e: 0xa3, 0x14f: 0xa4, + 0x150: 0xa5, 0x151: 0x9d, 0x152: 0x9d, 0x153: 0x9d, 0x154: 0x9d, 0x155: 0x9d, 0x156: 0x9d, 0x157: 0x9d, + 0x158: 0x9d, 0x159: 0xa6, 0x15a: 0xa7, 0x15b: 0xa8, 0x15c: 0xa9, 0x15d: 0xaa, 0x15e: 0xab, 0x15f: 0xac, + 0x160: 0xad, 0x161: 0xae, 0x162: 0xaf, 0x163: 0xb0, 0x164: 0xb1, 0x165: 0xb2, 0x166: 0xb3, 0x167: 0xb4, + 0x168: 0xb5, 0x169: 0xb6, 0x16a: 0xb7, 0x16b: 0xb8, 0x16c: 0xb9, 0x16d: 0xba, 0x16e: 0xbb, 0x16f: 0xbc, + 0x170: 0xbd, 0x171: 0xbe, 0x172: 0xbf, 0x173: 0xc0, 0x174: 0x23, 0x175: 0x24, 0x176: 0x25, 0x177: 0xc1, + 0x178: 0x26, 0x179: 0x26, 0x17a: 0x27, 0x17b: 0x26, 0x17c: 0xc2, 0x17d: 0x28, 0x17e: 0x29, 0x17f: 0x2a, + // Block 0x6, offset 0x180 + 0x180: 0x2b, 0x181: 0x2c, 0x182: 0x2d, 0x183: 0xc3, 0x184: 0x2e, 0x185: 0x2f, 0x186: 0xc4, 0x187: 0x9b, + 0x188: 0xc5, 0x189: 0xc6, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc7, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xc8, + 0x190: 0xc9, 0x191: 0x30, 0x192: 0x31, 0x193: 0x32, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xca, 0x1a9: 0xcb, 0x1aa: 0x9b, 0x1ab: 0xcc, 0x1ac: 0x9b, 0x1ad: 0xcd, 0x1ae: 0xce, 0x1af: 0xcf, + 0x1b0: 0xd0, 0x1b1: 0x33, 0x1b2: 0x26, 0x1b3: 0x34, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4, + 0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x35, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x36, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x37, 0x1c6: 0x38, 0x1c7: 0xe0, + 0x1c8: 0xe1, 0x1c9: 0x39, 0x1ca: 0x3a, 0x1cb: 0x3b, 0x1cc: 0x3c, 0x1cd: 0x3d, 0x1ce: 0x3e, 0x1cf: 0x3f, + 0x1d0: 0x9d, 0x1d1: 0x9d, 0x1d2: 0x9d, 0x1d3: 0x9d, 0x1d4: 0x9d, 0x1d5: 0x9d, 0x1d6: 0x9d, 0x1d7: 0x9d, + 0x1d8: 0x9d, 0x1d9: 0x9d, 0x1da: 0x9d, 0x1db: 0x9d, 0x1dc: 0x9d, 0x1dd: 0x9d, 0x1de: 0x9d, 0x1df: 0x9d, + 0x1e0: 0x9d, 0x1e1: 0x9d, 0x1e2: 0x9d, 0x1e3: 0x9d, 0x1e4: 0x9d, 0x1e5: 0x9d, 0x1e6: 0x9d, 0x1e7: 0x9d, + 0x1e8: 0x9d, 0x1e9: 0x9d, 0x1ea: 0x9d, 0x1eb: 0x9d, 0x1ec: 0x9d, 0x1ed: 0x9d, 0x1ee: 0x9d, 0x1ef: 0x9d, + 0x1f0: 0x9d, 0x1f1: 0x9d, 0x1f2: 0x9d, 0x1f3: 0x9d, 0x1f4: 0x9d, 0x1f5: 0x9d, 0x1f6: 0x9d, 0x1f7: 0x9d, + 0x1f8: 0x9d, 0x1f9: 0x9d, 0x1fa: 0x9d, 0x1fb: 0x9d, 0x1fc: 0x9d, 0x1fd: 0x9d, 0x1fe: 0x9d, 0x1ff: 0x9d, + // Block 0x8, offset 0x200 + 0x200: 0x9d, 0x201: 0x9d, 0x202: 0x9d, 0x203: 0x9d, 0x204: 0x9d, 0x205: 0x9d, 0x206: 0x9d, 0x207: 0x9d, + 0x208: 0x9d, 0x209: 0x9d, 0x20a: 0x9d, 0x20b: 0x9d, 0x20c: 0x9d, 0x20d: 0x9d, 0x20e: 0x9d, 0x20f: 0x9d, + 0x210: 0x9d, 0x211: 0x9d, 0x212: 0x9d, 0x213: 0x9d, 0x214: 0x9d, 0x215: 0x9d, 0x216: 0x9d, 0x217: 0x9d, + 0x218: 0x9d, 0x219: 0x9d, 0x21a: 0x9d, 0x21b: 0x9d, 0x21c: 0x9d, 0x21d: 0x9d, 0x21e: 0x9d, 0x21f: 0x9d, + 0x220: 0x9d, 0x221: 0x9d, 0x222: 0x9d, 0x223: 0x9d, 0x224: 0x9d, 0x225: 0x9d, 0x226: 0x9d, 0x227: 0x9d, + 0x228: 0x9d, 0x229: 0x9d, 0x22a: 0x9d, 0x22b: 0x9d, 0x22c: 0x9d, 0x22d: 0x9d, 0x22e: 0x9d, 0x22f: 0x9d, + 0x230: 0x9d, 0x231: 0x9d, 0x232: 0x9d, 0x233: 0x9d, 0x234: 0x9d, 0x235: 0x9d, 0x236: 0xb0, 0x237: 0x9b, + 0x238: 0x9d, 0x239: 0x9d, 0x23a: 0x9d, 0x23b: 0x9d, 0x23c: 0x9d, 0x23d: 0x9d, 0x23e: 0x9d, 0x23f: 0x9d, + // Block 0x9, offset 0x240 + 0x240: 0x9d, 0x241: 0x9d, 0x242: 0x9d, 0x243: 0x9d, 0x244: 0x9d, 0x245: 0x9d, 0x246: 0x9d, 0x247: 0x9d, + 0x248: 0x9d, 0x249: 0x9d, 0x24a: 0x9d, 0x24b: 0x9d, 0x24c: 0x9d, 0x24d: 0x9d, 0x24e: 0x9d, 0x24f: 0x9d, + 0x250: 0x9d, 0x251: 0x9d, 0x252: 0x9d, 0x253: 0x9d, 0x254: 0x9d, 0x255: 0x9d, 0x256: 0x9d, 0x257: 0x9d, + 0x258: 0x9d, 0x259: 0x9d, 0x25a: 0x9d, 0x25b: 0x9d, 0x25c: 0x9d, 0x25d: 0x9d, 0x25e: 0x9d, 0x25f: 0x9d, + 0x260: 0x9d, 0x261: 0x9d, 0x262: 0x9d, 0x263: 0x9d, 0x264: 0x9d, 0x265: 0x9d, 0x266: 0x9d, 0x267: 0x9d, + 0x268: 0x9d, 0x269: 0x9d, 0x26a: 0x9d, 0x26b: 0x9d, 0x26c: 0x9d, 0x26d: 0x9d, 0x26e: 0x9d, 0x26f: 0x9d, + 0x270: 0x9d, 0x271: 0x9d, 0x272: 0x9d, 0x273: 0x9d, 0x274: 0x9d, 0x275: 0x9d, 0x276: 0x9d, 0x277: 0x9d, + 0x278: 0x9d, 0x279: 0x9d, 0x27a: 0x9d, 0x27b: 0x9d, 0x27c: 0x9d, 0x27d: 0x9d, 0x27e: 0x9d, 0x27f: 0x9d, + // Block 0xa, offset 0x280 + 0x280: 0x9d, 0x281: 0x9d, 0x282: 0x9d, 0x283: 0x9d, 0x284: 0x9d, 0x285: 0x9d, 0x286: 0x9d, 0x287: 0x9d, + 0x288: 0x9d, 0x289: 0x9d, 0x28a: 0x9d, 0x28b: 0x9d, 0x28c: 0x9d, 0x28d: 0x9d, 0x28e: 0x9d, 0x28f: 0x9d, + 0x290: 0x9d, 0x291: 0x9d, 0x292: 0x9d, 0x293: 0x9d, 0x294: 0x9d, 0x295: 0x9d, 0x296: 0x9d, 0x297: 0x9d, + 0x298: 0x9d, 0x299: 0x9d, 0x29a: 0x9d, 0x29b: 0x9d, 0x29c: 0x9d, 0x29d: 0x9d, 0x29e: 0x9d, 0x29f: 0x9d, + 0x2a0: 0x9d, 0x2a1: 0x9d, 0x2a2: 0x9d, 0x2a3: 0x9d, 0x2a4: 0x9d, 0x2a5: 0x9d, 0x2a6: 0x9d, 0x2a7: 0x9d, + 0x2a8: 0x9d, 0x2a9: 0x9d, 0x2aa: 0x9d, 0x2ab: 0x9d, 0x2ac: 0x9d, 0x2ad: 0x9d, 0x2ae: 0x9d, 0x2af: 0x9d, + 0x2b0: 0x9d, 0x2b1: 0x9d, 0x2b2: 0x9d, 0x2b3: 0x9d, 0x2b4: 0x9d, 0x2b5: 0x9d, 0x2b6: 0x9d, 0x2b7: 0x9d, + 0x2b8: 0x9d, 0x2b9: 0x9d, 0x2ba: 0x9d, 0x2bb: 0x9d, 0x2bc: 0x9d, 0x2bd: 0x9d, 0x2be: 0x9d, 0x2bf: 0xe2, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9d, 0x2c1: 0x9d, 0x2c2: 0x9d, 0x2c3: 0x9d, 0x2c4: 0x9d, 0x2c5: 0x9d, 0x2c6: 0x9d, 0x2c7: 0x9d, + 0x2c8: 0x9d, 0x2c9: 0x9d, 0x2ca: 0x9d, 0x2cb: 0x9d, 0x2cc: 0x9d, 0x2cd: 0x9d, 0x2ce: 0x9d, 0x2cf: 0x9d, + 0x2d0: 0x9d, 0x2d1: 0x9d, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9d, 0x2d5: 0x9d, 0x2d6: 0x9d, 0x2d7: 0x9d, + 0x2d8: 0xe5, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe6, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xe7, + 0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef, + 0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7, + 0x2f0: 0x9d, 0x2f1: 0x9d, 0x2f2: 0x9d, 0x2f3: 0x9d, 0x2f4: 0x9d, 0x2f5: 0x9d, 0x2f6: 0x9d, 0x2f7: 0x9d, + 0x2f8: 0x9d, 0x2f9: 0x9d, 0x2fa: 0x9d, 0x2fb: 0x9d, 0x2fc: 0x9d, 0x2fd: 0x9d, 0x2fe: 0x9d, 0x2ff: 0x9d, + // Block 0xc, offset 0x300 + 0x300: 0x9d, 0x301: 0x9d, 0x302: 0x9d, 0x303: 0x9d, 0x304: 0x9d, 0x305: 0x9d, 0x306: 0x9d, 0x307: 0x9d, + 0x308: 0x9d, 0x309: 0x9d, 0x30a: 0x9d, 0x30b: 0x9d, 0x30c: 0x9d, 0x30d: 0x9d, 0x30e: 0x9d, 0x30f: 0x9d, + 0x310: 0x9d, 0x311: 0x9d, 0x312: 0x9d, 0x313: 0x9d, 0x314: 0x9d, 0x315: 0x9d, 0x316: 0x9d, 0x317: 0x9d, + 0x318: 0x9d, 0x319: 0x9d, 0x31a: 0x9d, 0x31b: 0x9d, 0x31c: 0x9d, 0x31d: 0x9d, 0x31e: 0xf8, 0x31f: 0xf9, + // Block 0xd, offset 0x340 + 0x340: 0xb8, 0x341: 0xb8, 0x342: 0xb8, 0x343: 0xb8, 0x344: 0xb8, 0x345: 0xb8, 0x346: 0xb8, 0x347: 0xb8, + 0x348: 0xb8, 0x349: 0xb8, 0x34a: 0xb8, 0x34b: 0xb8, 0x34c: 0xb8, 0x34d: 0xb8, 0x34e: 0xb8, 0x34f: 0xb8, + 0x350: 0xb8, 0x351: 0xb8, 0x352: 0xb8, 0x353: 0xb8, 0x354: 0xb8, 0x355: 0xb8, 0x356: 0xb8, 0x357: 0xb8, + 0x358: 0xb8, 0x359: 0xb8, 0x35a: 0xb8, 0x35b: 0xb8, 0x35c: 0xb8, 0x35d: 0xb8, 0x35e: 0xb8, 0x35f: 0xb8, + 0x360: 0xb8, 0x361: 0xb8, 0x362: 0xb8, 0x363: 0xb8, 0x364: 0xb8, 0x365: 0xb8, 0x366: 0xb8, 0x367: 0xb8, + 0x368: 0xb8, 0x369: 0xb8, 0x36a: 0xb8, 0x36b: 0xb8, 0x36c: 0xb8, 0x36d: 0xb8, 0x36e: 0xb8, 0x36f: 0xb8, + 0x370: 0xb8, 0x371: 0xb8, 0x372: 0xb8, 0x373: 0xb8, 0x374: 0xb8, 0x375: 0xb8, 0x376: 0xb8, 0x377: 0xb8, + 0x378: 0xb8, 0x379: 0xb8, 0x37a: 0xb8, 0x37b: 0xb8, 0x37c: 0xb8, 0x37d: 0xb8, 0x37e: 0xb8, 0x37f: 0xb8, + // Block 0xe, offset 0x380 + 0x380: 0xb8, 0x381: 0xb8, 0x382: 0xb8, 0x383: 0xb8, 0x384: 0xb8, 0x385: 0xb8, 0x386: 0xb8, 0x387: 0xb8, + 0x388: 0xb8, 0x389: 0xb8, 0x38a: 0xb8, 0x38b: 0xb8, 0x38c: 0xb8, 0x38d: 0xb8, 0x38e: 0xb8, 0x38f: 0xb8, + 0x390: 0xb8, 0x391: 0xb8, 0x392: 0xb8, 0x393: 0xb8, 0x394: 0xb8, 0x395: 0xb8, 0x396: 0xb8, 0x397: 0xb8, + 0x398: 0xb8, 0x399: 0xb8, 0x39a: 0xb8, 0x39b: 0xb8, 0x39c: 0xb8, 0x39d: 0xb8, 0x39e: 0xb8, 0x39f: 0xb8, + 0x3a0: 0xb8, 0x3a1: 0xb8, 0x3a2: 0xb8, 0x3a3: 0xb8, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd, + 0x3a8: 0x45, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a, + 0x3b0: 0x100, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x101, 0x3b7: 0x50, + 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9d, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107, + 0x3c8: 0xb8, 0x3c9: 0xb8, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d, + 0x3d0: 0x10e, 0x3d1: 0x9d, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xb8, 0x3d7: 0xb8, + 0x3d8: 0x9d, 0x3d9: 0x9d, 0x3da: 0x9d, 0x3db: 0x9d, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xb8, 0x3df: 0xb8, + 0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xb8, 0x3e6: 0x11a, 0x3e7: 0x11b, + 0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x59, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5a, 0x3ef: 0xb8, + 0x3f0: 0x9d, 0x3f1: 0x121, 0x3f2: 0x122, 0x3f3: 0x123, 0x3f4: 0xb8, 0x3f5: 0xb8, 0x3f6: 0xb8, 0x3f7: 0xb8, + 0x3f8: 0xb8, 0x3f9: 0x124, 0x3fa: 0xb8, 0x3fb: 0xb8, 0x3fc: 0xb8, 0x3fd: 0xb8, 0x3fe: 0xb8, 0x3ff: 0xb8, + // Block 0x10, offset 0x400 + 0x400: 0x125, 0x401: 0x126, 0x402: 0x127, 0x403: 0x128, 0x404: 0x129, 0x405: 0x12a, 0x406: 0x12b, 0x407: 0x12c, + 0x408: 0x12d, 0x409: 0xb8, 0x40a: 0x12e, 0x40b: 0x12f, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xb8, 0x40f: 0xb8, + 0x410: 0x130, 0x411: 0x131, 0x412: 0x132, 0x413: 0x133, 0x414: 0xb8, 0x415: 0xb8, 0x416: 0x134, 0x417: 0x135, + 0x418: 0x136, 0x419: 0x137, 0x41a: 0x138, 0x41b: 0x139, 0x41c: 0x13a, 0x41d: 0xb8, 0x41e: 0xb8, 0x41f: 0xb8, + 0x420: 0xb8, 0x421: 0xb8, 0x422: 0x13b, 0x423: 0x13c, 0x424: 0xb8, 0x425: 0xb8, 0x426: 0xb8, 0x427: 0xb8, + 0x428: 0xb8, 0x429: 0xb8, 0x42a: 0xb8, 0x42b: 0x13d, 0x42c: 0xb8, 0x42d: 0xb8, 0x42e: 0xb8, 0x42f: 0xb8, + 0x430: 0x13e, 0x431: 0x13f, 0x432: 0x140, 0x433: 0xb8, 0x434: 0xb8, 0x435: 0xb8, 0x436: 0xb8, 0x437: 0xb8, + 0x438: 0xb8, 0x439: 0xb8, 0x43a: 0xb8, 0x43b: 0xb8, 0x43c: 0xb8, 0x43d: 0xb8, 0x43e: 0xb8, 0x43f: 0xb8, + // Block 0x11, offset 0x440 + 0x440: 0x9d, 0x441: 0x9d, 0x442: 0x9d, 0x443: 0x9d, 0x444: 0x9d, 0x445: 0x9d, 0x446: 0x9d, 0x447: 0x9d, + 0x448: 0x9d, 0x449: 0x9d, 0x44a: 0x9d, 0x44b: 0x9d, 0x44c: 0x9d, 0x44d: 0x9d, 0x44e: 0x141, 0x44f: 0xb8, + 0x450: 0x9b, 0x451: 0x142, 0x452: 0x9d, 0x453: 0x9d, 0x454: 0x9d, 0x455: 0x143, 0x456: 0xb8, 0x457: 0xb8, + 0x458: 0xb8, 0x459: 0xb8, 0x45a: 0xb8, 0x45b: 0xb8, 0x45c: 0xb8, 0x45d: 0xb8, 0x45e: 0xb8, 0x45f: 0xb8, + 0x460: 0xb8, 0x461: 0xb8, 0x462: 0xb8, 0x463: 0xb8, 0x464: 0xb8, 0x465: 0xb8, 0x466: 0xb8, 0x467: 0xb8, + 0x468: 0xb8, 0x469: 0xb8, 0x46a: 0xb8, 0x46b: 0xb8, 0x46c: 0xb8, 0x46d: 0xb8, 0x46e: 0xb8, 0x46f: 0xb8, + 0x470: 0xb8, 0x471: 0xb8, 0x472: 0xb8, 0x473: 0xb8, 0x474: 0xb8, 0x475: 0xb8, 0x476: 0xb8, 0x477: 0xb8, + 0x478: 0xb8, 0x479: 0xb8, 0x47a: 0xb8, 0x47b: 0xb8, 0x47c: 0xb8, 0x47d: 0xb8, 0x47e: 0xb8, 0x47f: 0xb8, + // Block 0x12, offset 0x480 + 0x480: 0x9d, 0x481: 0x9d, 0x482: 0x9d, 0x483: 0x9d, 0x484: 0x9d, 0x485: 0x9d, 0x486: 0x9d, 0x487: 0x9d, + 0x488: 0x9d, 0x489: 0x9d, 0x48a: 0x9d, 0x48b: 0x9d, 0x48c: 0x9d, 0x48d: 0x9d, 0x48e: 0x9d, 0x48f: 0x9d, + 0x490: 0x144, 0x491: 0xb8, 0x492: 0xb8, 0x493: 0xb8, 0x494: 0xb8, 0x495: 0xb8, 0x496: 0xb8, 0x497: 0xb8, + 0x498: 0xb8, 0x499: 0xb8, 0x49a: 0xb8, 0x49b: 0xb8, 0x49c: 0xb8, 0x49d: 0xb8, 0x49e: 0xb8, 0x49f: 0xb8, + 0x4a0: 0xb8, 0x4a1: 0xb8, 0x4a2: 0xb8, 0x4a3: 0xb8, 0x4a4: 0xb8, 0x4a5: 0xb8, 0x4a6: 0xb8, 0x4a7: 0xb8, + 0x4a8: 0xb8, 0x4a9: 0xb8, 0x4aa: 0xb8, 0x4ab: 0xb8, 0x4ac: 0xb8, 0x4ad: 0xb8, 0x4ae: 0xb8, 0x4af: 0xb8, + 0x4b0: 0xb8, 0x4b1: 0xb8, 0x4b2: 0xb8, 0x4b3: 0xb8, 0x4b4: 0xb8, 0x4b5: 0xb8, 0x4b6: 0xb8, 0x4b7: 0xb8, + 0x4b8: 0xb8, 0x4b9: 0xb8, 0x4ba: 0xb8, 0x4bb: 0xb8, 0x4bc: 0xb8, 0x4bd: 0xb8, 0x4be: 0xb8, 0x4bf: 0xb8, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xb8, 0x4c1: 0xb8, 0x4c2: 0xb8, 0x4c3: 0xb8, 0x4c4: 0xb8, 0x4c5: 0xb8, 0x4c6: 0xb8, 0x4c7: 0xb8, + 0x4c8: 0xb8, 0x4c9: 0xb8, 0x4ca: 0xb8, 0x4cb: 0xb8, 0x4cc: 0xb8, 0x4cd: 0xb8, 0x4ce: 0xb8, 0x4cf: 0xb8, + 0x4d0: 0x9d, 0x4d1: 0x9d, 0x4d2: 0x9d, 0x4d3: 0x9d, 0x4d4: 0x9d, 0x4d5: 0x9d, 0x4d6: 0x9d, 0x4d7: 0x9d, + 0x4d8: 0x9d, 0x4d9: 0x145, 0x4da: 0xb8, 0x4db: 0xb8, 0x4dc: 0xb8, 0x4dd: 0xb8, 0x4de: 0xb8, 0x4df: 0xb8, + 0x4e0: 0xb8, 0x4e1: 0xb8, 0x4e2: 0xb8, 0x4e3: 0xb8, 0x4e4: 0xb8, 0x4e5: 0xb8, 0x4e6: 0xb8, 0x4e7: 0xb8, + 0x4e8: 0xb8, 0x4e9: 0xb8, 0x4ea: 0xb8, 0x4eb: 0xb8, 0x4ec: 0xb8, 0x4ed: 0xb8, 0x4ee: 0xb8, 0x4ef: 0xb8, + 0x4f0: 0xb8, 0x4f1: 0xb8, 0x4f2: 0xb8, 0x4f3: 0xb8, 0x4f4: 0xb8, 0x4f5: 0xb8, 0x4f6: 0xb8, 0x4f7: 0xb8, + 0x4f8: 0xb8, 0x4f9: 0xb8, 0x4fa: 0xb8, 0x4fb: 0xb8, 0x4fc: 0xb8, 0x4fd: 0xb8, 0x4fe: 0xb8, 0x4ff: 0xb8, + // Block 0x14, offset 0x500 + 0x500: 0xb8, 0x501: 0xb8, 0x502: 0xb8, 0x503: 0xb8, 0x504: 0xb8, 0x505: 0xb8, 0x506: 0xb8, 0x507: 0xb8, + 0x508: 0xb8, 0x509: 0xb8, 0x50a: 0xb8, 0x50b: 0xb8, 0x50c: 0xb8, 0x50d: 0xb8, 0x50e: 0xb8, 0x50f: 0xb8, + 0x510: 0xb8, 0x511: 0xb8, 0x512: 0xb8, 0x513: 0xb8, 0x514: 0xb8, 0x515: 0xb8, 0x516: 0xb8, 0x517: 0xb8, + 0x518: 0xb8, 0x519: 0xb8, 0x51a: 0xb8, 0x51b: 0xb8, 0x51c: 0xb8, 0x51d: 0xb8, 0x51e: 0xb8, 0x51f: 0xb8, + 0x520: 0x9d, 0x521: 0x9d, 0x522: 0x9d, 0x523: 0x9d, 0x524: 0x9d, 0x525: 0x9d, 0x526: 0x9d, 0x527: 0x9d, + 0x528: 0x13d, 0x529: 0x146, 0x52a: 0xb8, 0x52b: 0x147, 0x52c: 0x148, 0x52d: 0x149, 0x52e: 0x14a, 0x52f: 0xb8, + 0x530: 0xb8, 0x531: 0xb8, 0x532: 0xb8, 0x533: 0xb8, 0x534: 0xb8, 0x535: 0xb8, 0x536: 0xb8, 0x537: 0xb8, + 0x538: 0xb8, 0x539: 0xb8, 0x53a: 0xb8, 0x53b: 0xb8, 0x53c: 0x9d, 0x53d: 0x14b, 0x53e: 0x14c, 0x53f: 0x14d, + // Block 0x15, offset 0x540 + 0x540: 0x9d, 0x541: 0x9d, 0x542: 0x9d, 0x543: 0x9d, 0x544: 0x9d, 0x545: 0x9d, 0x546: 0x9d, 0x547: 0x9d, + 0x548: 0x9d, 0x549: 0x9d, 0x54a: 0x9d, 0x54b: 0x9d, 0x54c: 0x9d, 0x54d: 0x9d, 0x54e: 0x9d, 0x54f: 0x9d, + 0x550: 0x9d, 0x551: 0x9d, 0x552: 0x9d, 0x553: 0x9d, 0x554: 0x9d, 0x555: 0x9d, 0x556: 0x9d, 0x557: 0x9d, + 0x558: 0x9d, 0x559: 0x9d, 0x55a: 0x9d, 0x55b: 0x9d, 0x55c: 0x9d, 0x55d: 0x9d, 0x55e: 0x9d, 0x55f: 0x14e, + 0x560: 0x9d, 0x561: 0x9d, 0x562: 0x9d, 0x563: 0x9d, 0x564: 0x9d, 0x565: 0x9d, 0x566: 0x9d, 0x567: 0x9d, + 0x568: 0x9d, 0x569: 0x9d, 0x56a: 0x9d, 0x56b: 0x14f, 0x56c: 0xb8, 0x56d: 0xb8, 0x56e: 0xb8, 0x56f: 0xb8, + 0x570: 0xb8, 0x571: 0xb8, 0x572: 0xb8, 0x573: 0xb8, 0x574: 0xb8, 0x575: 0xb8, 0x576: 0xb8, 0x577: 0xb8, + 0x578: 0xb8, 0x579: 0xb8, 0x57a: 0xb8, 0x57b: 0xb8, 0x57c: 0xb8, 0x57d: 0xb8, 0x57e: 0xb8, 0x57f: 0xb8, + // Block 0x16, offset 0x580 + 0x580: 0x150, 0x581: 0xb8, 0x582: 0xb8, 0x583: 0xb8, 0x584: 0xb8, 0x585: 0xb8, 0x586: 0xb8, 0x587: 0xb8, + 0x588: 0xb8, 0x589: 0xb8, 0x58a: 0xb8, 0x58b: 0xb8, 0x58c: 0xb8, 0x58d: 0xb8, 0x58e: 0xb8, 0x58f: 0xb8, + 0x590: 0xb8, 0x591: 0xb8, 0x592: 0xb8, 0x593: 0xb8, 0x594: 0xb8, 0x595: 0xb8, 0x596: 0xb8, 0x597: 0xb8, + 0x598: 0xb8, 0x599: 0xb8, 0x59a: 0xb8, 0x59b: 0xb8, 0x59c: 0xb8, 0x59d: 0xb8, 0x59e: 0xb8, 0x59f: 0xb8, + 0x5a0: 0xb8, 0x5a1: 0xb8, 0x5a2: 0xb8, 0x5a3: 0xb8, 0x5a4: 0xb8, 0x5a5: 0xb8, 0x5a6: 0xb8, 0x5a7: 0xb8, + 0x5a8: 0xb8, 0x5a9: 0xb8, 0x5aa: 0xb8, 0x5ab: 0xb8, 0x5ac: 0xb8, 0x5ad: 0xb8, 0x5ae: 0xb8, 0x5af: 0xb8, + 0x5b0: 0x9d, 0x5b1: 0x151, 0x5b2: 0x152, 0x5b3: 0xb8, 0x5b4: 0xb8, 0x5b5: 0xb8, 0x5b6: 0xb8, 0x5b7: 0xb8, + 0x5b8: 0xb8, 0x5b9: 0xb8, 0x5ba: 0xb8, 0x5bb: 0xb8, 0x5bc: 0xb8, 0x5bd: 0xb8, 0x5be: 0xb8, 0x5bf: 0xb8, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x153, 0x5c4: 0x154, 0x5c5: 0x155, 0x5c6: 0x156, 0x5c7: 0x157, + 0x5c8: 0x9b, 0x5c9: 0x158, 0x5ca: 0xb8, 0x5cb: 0xb8, 0x5cc: 0x9b, 0x5cd: 0x159, 0x5ce: 0xb8, 0x5cf: 0xb8, + 0x5d0: 0x5d, 0x5d1: 0x5e, 0x5d2: 0x5f, 0x5d3: 0x60, 0x5d4: 0x61, 0x5d5: 0x62, 0x5d6: 0x63, 0x5d7: 0x64, + 0x5d8: 0x65, 0x5d9: 0x66, 0x5da: 0x67, 0x5db: 0x68, 0x5dc: 0x69, 0x5dd: 0x6a, 0x5de: 0x6b, 0x5df: 0x6c, + 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x15a, 0x5e9: 0x15b, 0x5ea: 0x15c, 0x5eb: 0xb8, 0x5ec: 0xb8, 0x5ed: 0xb8, 0x5ee: 0xb8, 0x5ef: 0xb8, + 0x5f0: 0xb8, 0x5f1: 0xb8, 0x5f2: 0xb8, 0x5f3: 0xb8, 0x5f4: 0xb8, 0x5f5: 0xb8, 0x5f6: 0xb8, 0x5f7: 0xb8, + 0x5f8: 0xb8, 0x5f9: 0xb8, 0x5fa: 0xb8, 0x5fb: 0xb8, 0x5fc: 0xb8, 0x5fd: 0xb8, 0x5fe: 0xb8, 0x5ff: 0xb8, + // Block 0x18, offset 0x600 + 0x600: 0x15d, 0x601: 0xb8, 0x602: 0xb8, 0x603: 0xb8, 0x604: 0xb8, 0x605: 0xb8, 0x606: 0xb8, 0x607: 0xb8, + 0x608: 0xb8, 0x609: 0xb8, 0x60a: 0xb8, 0x60b: 0xb8, 0x60c: 0xb8, 0x60d: 0xb8, 0x60e: 0xb8, 0x60f: 0xb8, + 0x610: 0xb8, 0x611: 0xb8, 0x612: 0xb8, 0x613: 0xb8, 0x614: 0xb8, 0x615: 0xb8, 0x616: 0xb8, 0x617: 0xb8, + 0x618: 0xb8, 0x619: 0xb8, 0x61a: 0xb8, 0x61b: 0xb8, 0x61c: 0xb8, 0x61d: 0xb8, 0x61e: 0xb8, 0x61f: 0xb8, + 0x620: 0x9d, 0x621: 0x9d, 0x622: 0x9d, 0x623: 0x15e, 0x624: 0x6d, 0x625: 0x15f, 0x626: 0xb8, 0x627: 0xb8, + 0x628: 0xb8, 0x629: 0xb8, 0x62a: 0xb8, 0x62b: 0xb8, 0x62c: 0xb8, 0x62d: 0xb8, 0x62e: 0xb8, 0x62f: 0xb8, + 0x630: 0xb8, 0x631: 0xb8, 0x632: 0xb8, 0x633: 0xb8, 0x634: 0xb8, 0x635: 0xb8, 0x636: 0xb8, 0x637: 0xb8, + 0x638: 0x6e, 0x639: 0x6f, 0x63a: 0x70, 0x63b: 0x160, 0x63c: 0xb8, 0x63d: 0xb8, 0x63e: 0xb8, 0x63f: 0xb8, + // Block 0x19, offset 0x640 + 0x640: 0x161, 0x641: 0x9b, 0x642: 0x162, 0x643: 0x163, 0x644: 0x71, 0x645: 0x72, 0x646: 0x164, 0x647: 0x165, + 0x648: 0x73, 0x649: 0x166, 0x64a: 0xb8, 0x64b: 0xb8, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x167, 0x65c: 0x9b, 0x65d: 0x168, 0x65e: 0x9b, 0x65f: 0x169, + 0x660: 0x16a, 0x661: 0x16b, 0x662: 0x16c, 0x663: 0xb8, 0x664: 0x16d, 0x665: 0x16e, 0x666: 0x16f, 0x667: 0x170, + 0x668: 0xb8, 0x669: 0xb8, 0x66a: 0xb8, 0x66b: 0xb8, 0x66c: 0xb8, 0x66d: 0xb8, 0x66e: 0xb8, 0x66f: 0xb8, + 0x670: 0xb8, 0x671: 0xb8, 0x672: 0xb8, 0x673: 0xb8, 0x674: 0xb8, 0x675: 0xb8, 0x676: 0xb8, 0x677: 0xb8, + 0x678: 0xb8, 0x679: 0xb8, 0x67a: 0xb8, 0x67b: 0xb8, 0x67c: 0xb8, 0x67d: 0xb8, 0x67e: 0xb8, 0x67f: 0xb8, + // Block 0x1a, offset 0x680 + 0x680: 0x9d, 0x681: 0x9d, 0x682: 0x9d, 0x683: 0x9d, 0x684: 0x9d, 0x685: 0x9d, 0x686: 0x9d, 0x687: 0x9d, + 0x688: 0x9d, 0x689: 0x9d, 0x68a: 0x9d, 0x68b: 0x9d, 0x68c: 0x9d, 0x68d: 0x9d, 0x68e: 0x9d, 0x68f: 0x9d, + 0x690: 0x9d, 0x691: 0x9d, 0x692: 0x9d, 0x693: 0x9d, 0x694: 0x9d, 0x695: 0x9d, 0x696: 0x9d, 0x697: 0x9d, + 0x698: 0x9d, 0x699: 0x9d, 0x69a: 0x9d, 0x69b: 0x171, 0x69c: 0x9d, 0x69d: 0x9d, 0x69e: 0x9d, 0x69f: 0x9d, + 0x6a0: 0x9d, 0x6a1: 0x9d, 0x6a2: 0x9d, 0x6a3: 0x9d, 0x6a4: 0x9d, 0x6a5: 0x9d, 0x6a6: 0x9d, 0x6a7: 0x9d, + 0x6a8: 0x9d, 0x6a9: 0x9d, 0x6aa: 0x9d, 0x6ab: 0x9d, 0x6ac: 0x9d, 0x6ad: 0x9d, 0x6ae: 0x9d, 0x6af: 0x9d, + 0x6b0: 0x9d, 0x6b1: 0x9d, 0x6b2: 0x9d, 0x6b3: 0x9d, 0x6b4: 0x9d, 0x6b5: 0x9d, 0x6b6: 0x9d, 0x6b7: 0x9d, + 0x6b8: 0x9d, 0x6b9: 0x9d, 0x6ba: 0x9d, 0x6bb: 0x9d, 0x6bc: 0x9d, 0x6bd: 0x9d, 0x6be: 0x9d, 0x6bf: 0x9d, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9d, 0x6c1: 0x9d, 0x6c2: 0x9d, 0x6c3: 0x9d, 0x6c4: 0x9d, 0x6c5: 0x9d, 0x6c6: 0x9d, 0x6c7: 0x9d, + 0x6c8: 0x9d, 0x6c9: 0x9d, 0x6ca: 0x9d, 0x6cb: 0x9d, 0x6cc: 0x9d, 0x6cd: 0x9d, 0x6ce: 0x9d, 0x6cf: 0x9d, + 0x6d0: 0x9d, 0x6d1: 0x9d, 0x6d2: 0x9d, 0x6d3: 0x9d, 0x6d4: 0x9d, 0x6d5: 0x9d, 0x6d6: 0x9d, 0x6d7: 0x9d, + 0x6d8: 0x9d, 0x6d9: 0x9d, 0x6da: 0x9d, 0x6db: 0x9d, 0x6dc: 0x172, 0x6dd: 0x9d, 0x6de: 0x9d, 0x6df: 0x9d, + 0x6e0: 0x173, 0x6e1: 0x9d, 0x6e2: 0x9d, 0x6e3: 0x9d, 0x6e4: 0x9d, 0x6e5: 0x9d, 0x6e6: 0x9d, 0x6e7: 0x9d, + 0x6e8: 0x9d, 0x6e9: 0x9d, 0x6ea: 0x9d, 0x6eb: 0x9d, 0x6ec: 0x9d, 0x6ed: 0x9d, 0x6ee: 0x9d, 0x6ef: 0x9d, + 0x6f0: 0x9d, 0x6f1: 0x9d, 0x6f2: 0x9d, 0x6f3: 0x9d, 0x6f4: 0x9d, 0x6f5: 0x9d, 0x6f6: 0x9d, 0x6f7: 0x9d, + 0x6f8: 0x9d, 0x6f9: 0x9d, 0x6fa: 0x9d, 0x6fb: 0x9d, 0x6fc: 0x9d, 0x6fd: 0x9d, 0x6fe: 0x9d, 0x6ff: 0x9d, + // Block 0x1c, offset 0x700 + 0x700: 0x9d, 0x701: 0x9d, 0x702: 0x9d, 0x703: 0x9d, 0x704: 0x9d, 0x705: 0x9d, 0x706: 0x9d, 0x707: 0x9d, + 0x708: 0x9d, 0x709: 0x9d, 0x70a: 0x9d, 0x70b: 0x9d, 0x70c: 0x9d, 0x70d: 0x9d, 0x70e: 0x9d, 0x70f: 0x9d, + 0x710: 0x9d, 0x711: 0x9d, 0x712: 0x9d, 0x713: 0x9d, 0x714: 0x9d, 0x715: 0x9d, 0x716: 0x9d, 0x717: 0x9d, + 0x718: 0x9d, 0x719: 0x9d, 0x71a: 0x9d, 0x71b: 0x9d, 0x71c: 0x9d, 0x71d: 0x9d, 0x71e: 0x9d, 0x71f: 0x9d, + 0x720: 0x9d, 0x721: 0x9d, 0x722: 0x9d, 0x723: 0x9d, 0x724: 0x9d, 0x725: 0x9d, 0x726: 0x9d, 0x727: 0x9d, + 0x728: 0x9d, 0x729: 0x9d, 0x72a: 0x9d, 0x72b: 0x9d, 0x72c: 0x9d, 0x72d: 0x9d, 0x72e: 0x9d, 0x72f: 0x9d, + 0x730: 0x9d, 0x731: 0x9d, 0x732: 0x9d, 0x733: 0x9d, 0x734: 0x9d, 0x735: 0x9d, 0x736: 0x9d, 0x737: 0x9d, + 0x738: 0x9d, 0x739: 0x9d, 0x73a: 0x174, 0x73b: 0xb8, 0x73c: 0xb8, 0x73d: 0xb8, 0x73e: 0xb8, 0x73f: 0xb8, + // Block 0x1d, offset 0x740 + 0x740: 0xb8, 0x741: 0xb8, 0x742: 0xb8, 0x743: 0xb8, 0x744: 0xb8, 0x745: 0xb8, 0x746: 0xb8, 0x747: 0xb8, + 0x748: 0xb8, 0x749: 0xb8, 0x74a: 0xb8, 0x74b: 0xb8, 0x74c: 0xb8, 0x74d: 0xb8, 0x74e: 0xb8, 0x74f: 0xb8, + 0x750: 0xb8, 0x751: 0xb8, 0x752: 0xb8, 0x753: 0xb8, 0x754: 0xb8, 0x755: 0xb8, 0x756: 0xb8, 0x757: 0xb8, + 0x758: 0xb8, 0x759: 0xb8, 0x75a: 0xb8, 0x75b: 0xb8, 0x75c: 0xb8, 0x75d: 0xb8, 0x75e: 0xb8, 0x75f: 0xb8, + 0x760: 0x74, 0x761: 0x75, 0x762: 0x76, 0x763: 0x175, 0x764: 0x77, 0x765: 0x78, 0x766: 0x176, 0x767: 0x79, + 0x768: 0x7a, 0x769: 0xb8, 0x76a: 0xb8, 0x76b: 0xb8, 0x76c: 0xb8, 0x76d: 0xb8, 0x76e: 0xb8, 0x76f: 0xb8, + 0x770: 0xb8, 0x771: 0xb8, 0x772: 0xb8, 0x773: 0xb8, 0x774: 0xb8, 0x775: 0xb8, 0x776: 0xb8, 0x777: 0xb8, + 0x778: 0xb8, 0x779: 0xb8, 0x77a: 0xb8, 0x77b: 0xb8, 0x77c: 0xb8, 0x77d: 0xb8, 0x77e: 0xb8, 0x77f: 0xb8, + // Block 0x1e, offset 0x780 + 0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07, + 0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17, + 0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07, + 0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b, + 0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b, + 0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b, + 0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b, + 0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b, + 0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b, + 0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b, + 0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x177, 0x801: 0x178, 0x802: 0xb8, 0x803: 0xb8, 0x804: 0x179, 0x805: 0x179, 0x806: 0x179, 0x807: 0x17a, + 0x808: 0xb8, 0x809: 0xb8, 0x80a: 0xb8, 0x80b: 0xb8, 0x80c: 0xb8, 0x80d: 0xb8, 0x80e: 0xb8, 0x80f: 0xb8, + 0x810: 0xb8, 0x811: 0xb8, 0x812: 0xb8, 0x813: 0xb8, 0x814: 0xb8, 0x815: 0xb8, 0x816: 0xb8, 0x817: 0xb8, + 0x818: 0xb8, 0x819: 0xb8, 0x81a: 0xb8, 0x81b: 0xb8, 0x81c: 0xb8, 0x81d: 0xb8, 0x81e: 0xb8, 0x81f: 0xb8, + 0x820: 0xb8, 0x821: 0xb8, 0x822: 0xb8, 0x823: 0xb8, 0x824: 0xb8, 0x825: 0xb8, 0x826: 0xb8, 0x827: 0xb8, + 0x828: 0xb8, 0x829: 0xb8, 0x82a: 0xb8, 0x82b: 0xb8, 0x82c: 0xb8, 0x82d: 0xb8, 0x82e: 0xb8, 0x82f: 0xb8, + 0x830: 0xb8, 0x831: 0xb8, 0x832: 0xb8, 0x833: 0xb8, 0x834: 0xb8, 0x835: 0xb8, 0x836: 0xb8, 0x837: 0xb8, + 0x838: 0xb8, 0x839: 0xb8, 0x83a: 0xb8, 0x83b: 0xb8, 0x83c: 0xb8, 0x83d: 0xb8, 0x83e: 0xb8, 0x83f: 0xb8, + // Block 0x21, offset 0x840 + 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b, + 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b, + 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b, + 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b, + 0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b, + 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b, + 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b, + 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b, + // Block 0x22, offset 0x880 + 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, +} + +// idnaSparseOffset: 256 entries, 512 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x5c, 0x60, 0x6f, 0x74, 0x7b, 0x87, 0x95, 0xa3, 0xa8, 0xb1, 0xc1, 0xcf, 0xdc, 0xe8, 0xf9, 0x103, 0x10a, 0x117, 0x128, 0x12f, 0x13a, 0x149, 0x157, 0x161, 0x163, 0x167, 0x169, 0x175, 0x180, 0x188, 0x18e, 0x194, 0x199, 0x19e, 0x1a1, 0x1a5, 0x1ab, 0x1b0, 0x1bc, 0x1c6, 0x1cc, 0x1dd, 0x1e7, 0x1ea, 0x1f2, 0x1f5, 0x202, 0x20a, 0x20e, 0x215, 0x21d, 0x22d, 0x239, 0x23b, 0x245, 0x251, 0x25d, 0x269, 0x271, 0x276, 0x280, 0x291, 0x295, 0x2a0, 0x2a4, 0x2ad, 0x2b5, 0x2bb, 0x2c0, 0x2c3, 0x2c6, 0x2ca, 0x2d0, 0x2d4, 0x2d8, 0x2de, 0x2e5, 0x2eb, 0x2f3, 0x2fa, 0x305, 0x30f, 0x313, 0x316, 0x31c, 0x320, 0x322, 0x325, 0x327, 0x32a, 0x334, 0x337, 0x346, 0x34a, 0x34f, 0x352, 0x356, 0x35b, 0x360, 0x366, 0x36c, 0x37b, 0x381, 0x385, 0x394, 0x399, 0x3a1, 0x3ab, 0x3b6, 0x3be, 0x3cf, 0x3d8, 0x3e8, 0x3f5, 0x3ff, 0x404, 0x411, 0x415, 0x41a, 0x41c, 0x420, 0x422, 0x426, 0x42f, 0x435, 0x439, 0x449, 0x453, 0x458, 0x45b, 0x461, 0x468, 0x46d, 0x471, 0x477, 0x47c, 0x485, 0x48a, 0x490, 0x497, 0x49e, 0x4a5, 0x4a9, 0x4ae, 0x4b1, 0x4b6, 0x4c2, 0x4c8, 0x4cd, 0x4d4, 0x4dc, 0x4e1, 0x4e5, 0x4f5, 0x4fc, 0x500, 0x504, 0x50b, 0x50e, 0x511, 0x515, 0x519, 0x51f, 0x528, 0x534, 0x53b, 0x544, 0x54c, 0x553, 0x561, 0x56e, 0x57b, 0x584, 0x588, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5e5, 0x5ea, 0x5ed, 0x5f7, 0x600, 0x60c, 0x60f, 0x614, 0x617, 0x61a, 0x61d, 0x624, 0x62b, 0x62f, 0x63a, 0x63d, 0x643, 0x648, 0x64c, 0x64f, 0x652, 0x655, 0x65a, 0x664, 0x667, 0x66b, 0x67a, 0x686, 0x68a, 0x68f, 0x694, 0x698, 0x69d, 0x6a6, 0x6b1, 0x6b7, 0x6bf, 0x6c3, 0x6c7, 0x6cd, 0x6d3, 0x6d8, 0x6db, 0x6e9, 0x6f0, 0x6f3, 0x6f6, 0x6fa, 0x700, 0x705, 0x70f, 0x714, 0x717, 0x71a, 0x71d, 0x720, 0x724, 0x727, 0x737, 0x748, 0x74d, 0x74f, 0x751} + +// idnaSparseValues: 1876 entries, 7504 bytes +var idnaSparseValues = [1876]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x07}, + {value: 0xe105, lo: 0x80, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x97}, + {value: 0xe105, lo: 0x98, hi: 0x9e}, + {value: 0x001f, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbf}, + // Block 0x1, offset 0x8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0xe01d, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0335, lo: 0x83, hi: 0x83}, + {value: 0x034d, lo: 0x84, hi: 0x84}, + {value: 0x0365, lo: 0x85, hi: 0x85}, + {value: 0xe00d, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0xe00d, lo: 0x88, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x89}, + {value: 0xe00d, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe00d, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0x8d}, + {value: 0xe00d, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0xbf}, + // Block 0x2, offset 0x19 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, lo: 0xb3, hi: 0xb3}, + {value: 0x034d, lo: 0xb4, hi: 0xb4}, + {value: 0x0395, lo: 0xb5, hi: 0xb5}, + {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, + {value: 0x0279, lo: 0xb7, hi: 0xb7}, + {value: 0x0289, lo: 0xb8, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbf}, + // Block 0x3, offset 0x25 + {value: 0x0000, lo: 0x01}, + {value: 0x1308, lo: 0x80, hi: 0xbf}, + // Block 0x4, offset 0x27 + {value: 0x0000, lo: 0x04}, + {value: 0x03f5, lo: 0x80, hi: 0x8f}, + {value: 0xe105, lo: 0x90, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x5, offset 0x2c + {value: 0x0000, lo: 0x07}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x0545, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x6, offset 0x34 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x88}, + {value: 0x0018, lo: 0x89, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x1308, lo: 0x91, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbe}, + {value: 0x1308, lo: 0xbf, hi: 0xbf}, + // Block 0x7, offset 0x3f + {value: 0x0000, lo: 0x0b}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x83}, + {value: 0x1308, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x1308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4b + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0208, lo: 0x81, hi: 0x87}, + {value: 0x0408, lo: 0x88, hi: 0x88}, + {value: 0x0208, lo: 0x89, hi: 0x8a}, + {value: 0x1308, lo: 0x8b, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xad}, + {value: 0x0208, lo: 0xae, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb0}, + {value: 0x0408, lo: 0xb1, hi: 0xb3}, + {value: 0x0008, lo: 0xb4, hi: 0xb4}, + {value: 0x0429, lo: 0xb5, hi: 0xb5}, + {value: 0x0451, lo: 0xb6, hi: 0xb6}, + {value: 0x0479, lo: 0xb7, hi: 0xb7}, + {value: 0x04a1, lo: 0xb8, hi: 0xb8}, + {value: 0x0208, lo: 0xb9, hi: 0xbf}, + // Block 0x9, offset 0x5c + {value: 0x0000, lo: 0x03}, + {value: 0x0208, lo: 0x80, hi: 0x87}, + {value: 0x0408, lo: 0x88, hi: 0x99}, + {value: 0x0208, lo: 0x9a, hi: 0xbf}, + // Block 0xa, offset 0x60 + {value: 0x0000, lo: 0x0e}, + {value: 0x1308, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0408, lo: 0x8d, hi: 0x8d}, + {value: 0x0208, lo: 0x8e, hi: 0x98}, + {value: 0x0408, lo: 0x99, hi: 0x9b}, + {value: 0x0208, lo: 0x9c, hi: 0xaa}, + {value: 0x0408, lo: 0xab, hi: 0xac}, + {value: 0x0208, lo: 0xad, hi: 0xb0}, + {value: 0x0408, lo: 0xb1, hi: 0xb1}, + {value: 0x0208, lo: 0xb2, hi: 0xb2}, + {value: 0x0408, lo: 0xb3, hi: 0xb4}, + {value: 0x0208, lo: 0xb5, hi: 0xb7}, + {value: 0x0408, lo: 0xb8, hi: 0xb9}, + {value: 0x0208, lo: 0xba, hi: 0xbf}, + // Block 0xb, offset 0x6f + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x1308, lo: 0xa6, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xc, offset 0x74 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0208, lo: 0x8a, hi: 0xaa}, + {value: 0x1308, lo: 0xab, hi: 0xb3}, + {value: 0x0008, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0xd, offset 0x7b + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x1308, lo: 0x96, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9a}, + {value: 0x1308, lo: 0x9b, hi: 0xa3}, + {value: 0x0008, lo: 0xa4, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xa8}, + {value: 0x1308, lo: 0xa9, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xe, offset 0x87 + {value: 0x0000, lo: 0x0d}, + {value: 0x0408, lo: 0x80, hi: 0x80}, + {value: 0x0208, lo: 0x81, hi: 0x85}, + {value: 0x0408, lo: 0x86, hi: 0x87}, + {value: 0x0208, lo: 0x88, hi: 0x88}, + {value: 0x0408, lo: 0x89, hi: 0x89}, + {value: 0x0208, lo: 0x8a, hi: 0x93}, + {value: 0x0408, lo: 0x94, hi: 0x94}, + {value: 0x0208, lo: 0x95, hi: 0x95}, + {value: 0x0008, lo: 0x96, hi: 0x98}, + {value: 0x1308, lo: 0x99, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xf, offset 0x95 + {value: 0x0000, lo: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xa9}, + {value: 0x0408, lo: 0xaa, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0408, lo: 0xae, hi: 0xae}, + {value: 0x0208, lo: 0xaf, hi: 0xb0}, + {value: 0x0408, lo: 0xb1, hi: 0xb2}, + {value: 0x0208, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0208, lo: 0xb6, hi: 0xb8}, + {value: 0x0408, lo: 0xb9, hi: 0xb9}, + {value: 0x0208, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x10, offset 0xa3 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x93}, + {value: 0x1308, lo: 0x94, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x1308, lo: 0xa3, hi: 0xbf}, + // Block 0x11, offset 0xa8 + {value: 0x0000, lo: 0x08}, + {value: 0x1308, lo: 0x80, hi: 0x82}, + {value: 0x1008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb9}, + {value: 0x1308, lo: 0xba, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0f}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x1008, lo: 0x81, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x85}, + {value: 0x1008, lo: 0x86, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x1008, lo: 0x8a, hi: 0x8c}, + {value: 0x1b08, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x96}, + {value: 0x1008, lo: 0x97, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x13, offset 0xc1 + {value: 0x0000, lo: 0x0d}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x1008, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x1308, lo: 0xbe, hi: 0xbf}, + // Block 0x14, offset 0xcf + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbf}, + // Block 0x15, offset 0xdc + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x16, offset 0xe8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x89}, + {value: 0x1b08, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x1008, lo: 0x8f, hi: 0x91}, + {value: 0x1308, lo: 0x92, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x95}, + {value: 0x1308, lo: 0x96, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x1008, lo: 0x98, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb1}, + {value: 0x1008, lo: 0xb2, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x17, offset 0xf9 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xb0}, + {value: 0x1308, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x08f1, lo: 0xb3, hi: 0xb3}, + {value: 0x1308, lo: 0xb4, hi: 0xb9}, + {value: 0x1b08, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x18, offset 0x103 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x1308, lo: 0x87, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0xbf}, + // Block 0x19, offset 0x10a + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x1308, lo: 0x88, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0961, lo: 0x9c, hi: 0x9c}, + {value: 0x0999, lo: 0x9d, hi: 0x9d}, + {value: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1a, offset 0x117 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe03d, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x97}, + {value: 0x1308, lo: 0x98, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb4}, + {value: 0x1308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb6}, + {value: 0x1308, lo: 0xb7, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xb8}, + {value: 0x1308, lo: 0xb9, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbf}, + // Block 0x1b, offset 0x128 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x1308, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0x1c, offset 0x12f + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x1008, lo: 0xab, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xb0}, + {value: 0x1008, lo: 0xb1, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb7}, + {value: 0x1008, lo: 0xb8, hi: 0xb8}, + {value: 0x1b08, lo: 0xb9, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbc}, + {value: 0x1308, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x1d, offset 0x13a + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x1008, lo: 0x96, hi: 0x97}, + {value: 0x1308, lo: 0x98, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x1308, lo: 0x9e, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x1008, lo: 0xa2, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xa6}, + {value: 0x1008, lo: 0xa7, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x1308, lo: 0xb1, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbf}, + // Block 0x1e, offset 0x149 + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x1308, lo: 0x82, hi: 0x82}, + {value: 0x1008, lo: 0x83, hi: 0x84}, + {value: 0x1308, lo: 0x85, hi: 0x86}, + {value: 0x1008, lo: 0x87, hi: 0x8c}, + {value: 0x1308, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x1008, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x1008, lo: 0x9a, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1f, offset 0x157 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x86}, + {value: 0x055d, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8c}, + {value: 0x055d, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0xe105, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0x20, offset 0x161 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x21, offset 0x163 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbf}, + // Block 0x22, offset 0x167 + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x23, offset 0x169 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x24, offset 0x175 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x25, offset 0x180 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x26, offset 0x188 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x27, offset 0x18e + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x28, offset 0x194 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x29, offset 0x199 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x2a, offset 0x19e + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2b, offset 0x1a1 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2c, offset 0x1a5 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x2d, offset 0x1ab + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x2e, offset 0x1b0 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x1308, lo: 0x92, hi: 0x93}, + {value: 0x1b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb3}, + {value: 0x1b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2f, offset 0x1bc + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x1308, lo: 0x92, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x30, offset 0x1c6 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xb3}, + {value: 0x1340, lo: 0xb4, hi: 0xb5}, + {value: 0x1008, lo: 0xb6, hi: 0xb6}, + {value: 0x1308, lo: 0xb7, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbf}, + // Block 0x31, offset 0x1cc + {value: 0x0000, lo: 0x10}, + {value: 0x1008, lo: 0x80, hi: 0x85}, + {value: 0x1308, lo: 0x86, hi: 0x86}, + {value: 0x1008, lo: 0x87, hi: 0x88}, + {value: 0x1308, lo: 0x89, hi: 0x91}, + {value: 0x1b08, lo: 0x92, hi: 0x92}, + {value: 0x1308, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0x96}, + {value: 0x0008, lo: 0x97, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x32, offset 0x1dd + {value: 0x0000, lo: 0x09}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x86}, + {value: 0x0218, lo: 0x87, hi: 0x87}, + {value: 0x0018, lo: 0x88, hi: 0x8a}, + {value: 0x13c0, lo: 0x8b, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x33, offset 0x1e7 + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x34, offset 0x1ea + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x1308, lo: 0x85, hi: 0x86}, + {value: 0x0208, lo: 0x87, hi: 0xa8}, + {value: 0x1308, lo: 0xa9, hi: 0xa9}, + {value: 0x0208, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x35, offset 0x1f2 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x36, offset 0x1f5 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x1308, lo: 0xa0, hi: 0xa2}, + {value: 0x1008, lo: 0xa3, hi: 0xa6}, + {value: 0x1308, lo: 0xa7, hi: 0xa8}, + {value: 0x1008, lo: 0xa9, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x1008, lo: 0xb0, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb2}, + {value: 0x1008, lo: 0xb3, hi: 0xb8}, + {value: 0x1308, lo: 0xb9, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x37, offset 0x202 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x38, offset 0x20a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x39, offset 0x20e + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0028, lo: 0x9a, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xbf}, + // Block 0x3a, offset 0x215 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x1308, lo: 0x97, hi: 0x98}, + {value: 0x1008, lo: 0x99, hi: 0x9a}, + {value: 0x1308, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x3b, offset 0x21d + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x94}, + {value: 0x1008, lo: 0x95, hi: 0x95}, + {value: 0x1308, lo: 0x96, hi: 0x96}, + {value: 0x1008, lo: 0x97, hi: 0x97}, + {value: 0x1308, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x1b08, lo: 0xa0, hi: 0xa0}, + {value: 0x1008, lo: 0xa1, hi: 0xa1}, + {value: 0x1308, lo: 0xa2, hi: 0xa2}, + {value: 0x1008, lo: 0xa3, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xac}, + {value: 0x1008, lo: 0xad, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x1308, lo: 0xbf, hi: 0xbf}, + // Block 0x3c, offset 0x22d + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xbd}, + {value: 0x1318, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x239 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3e, offset 0x23b + {value: 0x0000, lo: 0x09}, + {value: 0x1308, lo: 0x80, hi: 0x83}, + {value: 0x1008, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xb3}, + {value: 0x1308, lo: 0xb4, hi: 0xb4}, + {value: 0x1008, lo: 0xb5, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x1008, lo: 0xbd, hi: 0xbf}, + // Block 0x3f, offset 0x245 + {value: 0x0000, lo: 0x0b}, + {value: 0x1008, lo: 0x80, hi: 0x81}, + {value: 0x1308, lo: 0x82, hi: 0x82}, + {value: 0x1008, lo: 0x83, hi: 0x83}, + {value: 0x1808, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xaa}, + {value: 0x1308, lo: 0xab, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x251 + {value: 0x0000, lo: 0x0b}, + {value: 0x1308, lo: 0x80, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa0}, + {value: 0x1008, lo: 0xa1, hi: 0xa1}, + {value: 0x1308, lo: 0xa2, hi: 0xa5}, + {value: 0x1008, lo: 0xa6, hi: 0xa7}, + {value: 0x1308, lo: 0xa8, hi: 0xa9}, + {value: 0x1808, lo: 0xaa, hi: 0xaa}, + {value: 0x1b08, lo: 0xab, hi: 0xab}, + {value: 0x1308, lo: 0xac, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xbf}, + // Block 0x41, offset 0x25d + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x1308, lo: 0xa6, hi: 0xa6}, + {value: 0x1008, lo: 0xa7, hi: 0xa7}, + {value: 0x1308, lo: 0xa8, hi: 0xa9}, + {value: 0x1008, lo: 0xaa, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xad}, + {value: 0x1008, lo: 0xae, hi: 0xae}, + {value: 0x1308, lo: 0xaf, hi: 0xb1}, + {value: 0x1808, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbf}, + // Block 0x42, offset 0x269 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x1008, lo: 0xa4, hi: 0xab}, + {value: 0x1308, lo: 0xac, hi: 0xb3}, + {value: 0x1008, lo: 0xb4, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x43, offset 0x271 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x44, offset 0x276 + {value: 0x0000, lo: 0x09}, + {value: 0x0e29, lo: 0x80, hi: 0x80}, + {value: 0x0e41, lo: 0x81, hi: 0x81}, + {value: 0x0e59, lo: 0x82, hi: 0x82}, + {value: 0x0e71, lo: 0x83, hi: 0x83}, + {value: 0x0e89, lo: 0x84, hi: 0x85}, + {value: 0x0ea1, lo: 0x86, hi: 0x86}, + {value: 0x0eb9, lo: 0x87, hi: 0x87}, + {value: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0x45, offset 0x280 + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x1308, lo: 0x90, hi: 0x92}, + {value: 0x0018, lo: 0x93, hi: 0x93}, + {value: 0x1308, lo: 0x94, hi: 0xa0}, + {value: 0x1008, lo: 0xa1, hi: 0xa1}, + {value: 0x1308, lo: 0xa2, hi: 0xa8}, + {value: 0x0008, lo: 0xa9, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb1}, + {value: 0x1008, lo: 0xb2, hi: 0xb3}, + {value: 0x1308, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x46, offset 0x291 + {value: 0x0000, lo: 0x03}, + {value: 0x1308, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x1308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x295 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x87}, + {value: 0xe045, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0xe045, lo: 0x98, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0xe045, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbf}, + // Block 0x48, offset 0x2a0 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x1318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x2a4 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x24c1, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x4a, offset 0x2ad + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4b, offset 0x2b5 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x9f}, + {value: 0x0080, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xad}, + {value: 0x0080, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x4c, offset 0x2bb + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09c5, lo: 0xa9, hi: 0xa9}, + {value: 0x09e5, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4d, offset 0x2c0 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x4e, offset 0x2c3 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4f, offset 0x2c6 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x50, offset 0x2ca + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e66, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e86, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x51, offset 0x2d0 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x52, offset 0x2d4 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x53, offset 0x2d8 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0018, lo: 0xbd, hi: 0xbf}, + // Block 0x54, offset 0x2de + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xab}, + {value: 0x0018, lo: 0xac, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x55, offset 0x2e5 + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ea5, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x56, offset 0x2eb + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x57, offset 0x2f3 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xae}, + {value: 0xe075, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0x58, offset 0x2fa + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x59, offset 0x305 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x1308, lo: 0xa0, hi: 0xbf}, + // Block 0x5a, offset 0x30f + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x5b, offset 0x313 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0xbf}, + // Block 0x5c, offset 0x316 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0edd, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x5d, offset 0x31c + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0efd, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5e, offset 0x320 + {value: 0x0020, lo: 0x01}, + {value: 0x0f1d, lo: 0x80, hi: 0xbf}, + // Block 0x5f, offset 0x322 + {value: 0x0020, lo: 0x02}, + {value: 0x171d, lo: 0x80, hi: 0x8f}, + {value: 0x18fd, lo: 0x90, hi: 0xbf}, + // Block 0x60, offset 0x325 + {value: 0x0020, lo: 0x01}, + {value: 0x1efd, lo: 0x80, hi: 0xbf}, + // Block 0x61, offset 0x327 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x62, offset 0x32a + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x1308, lo: 0x99, hi: 0x9a}, + {value: 0x29e2, lo: 0x9b, hi: 0x9b}, + {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x63, offset 0x334 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x64, offset 0x337 + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xb0}, + {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, + {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, + {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, + {value: 0x2a7d, lo: 0xb4, hi: 0xb4}, + {value: 0x2a5d, lo: 0xb5, hi: 0xb5}, + {value: 0x2a9d, lo: 0xb6, hi: 0xb6}, + {value: 0x2abd, lo: 0xb7, hi: 0xb7}, + {value: 0x2add, lo: 0xb8, hi: 0xb9}, + {value: 0x2afd, lo: 0xba, hi: 0xbb}, + {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, + {value: 0x2afd, lo: 0xbe, hi: 0xbf}, + // Block 0x65, offset 0x346 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x66, offset 0x34a + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x67, offset 0x34f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x68, offset 0x352 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x69, offset 0x356 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x6a, offset 0x35b + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0x6b, offset 0x360 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb1}, + {value: 0x0018, lo: 0xb2, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6c, offset 0x366 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6d, offset 0x36c + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x1308, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0x85}, + {value: 0x1b08, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x1308, lo: 0x8b, hi: 0x8b}, + {value: 0x0008, lo: 0x8c, hi: 0xa2}, + {value: 0x1008, lo: 0xa3, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xa6}, + {value: 0x1008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6e, offset 0x37b + {value: 0x0000, lo: 0x05}, + {value: 0x0208, lo: 0x80, hi: 0xb1}, + {value: 0x0108, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6f, offset 0x381 + {value: 0x0000, lo: 0x03}, + {value: 0x1008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x1008, lo: 0xb4, hi: 0xbf}, + // Block 0x70, offset 0x385 + {value: 0x0000, lo: 0x0e}, + {value: 0x1008, lo: 0x80, hi: 0x83}, + {value: 0x1b08, lo: 0x84, hi: 0x84}, + {value: 0x1308, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x1308, lo: 0xa0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0008, lo: 0xbb, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x71, offset 0x394 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x1308, lo: 0xa6, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x72, offset 0x399 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x1308, lo: 0x87, hi: 0x91}, + {value: 0x1008, lo: 0x92, hi: 0x92}, + {value: 0x1808, lo: 0x93, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x73, offset 0x3a1 + {value: 0x0000, lo: 0x09}, + {value: 0x1308, lo: 0x80, hi: 0x82}, + {value: 0x1008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xb3}, + {value: 0x1008, lo: 0xb4, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xb9}, + {value: 0x1008, lo: 0xba, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x1008, lo: 0xbd, hi: 0xbf}, + // Block 0x74, offset 0x3ab + {value: 0x0000, lo: 0x0a}, + {value: 0x1808, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x75, offset 0x3b6 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa8}, + {value: 0x1308, lo: 0xa9, hi: 0xae}, + {value: 0x1008, lo: 0xaf, hi: 0xb0}, + {value: 0x1308, lo: 0xb1, hi: 0xb2}, + {value: 0x1008, lo: 0xb3, hi: 0xb4}, + {value: 0x1308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x76, offset 0x3be + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x82}, + {value: 0x1308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8b}, + {value: 0x1308, lo: 0x8c, hi: 0x8c}, + {value: 0x1008, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x1008, lo: 0xbd, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0x77, offset 0x3cf + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x1308, lo: 0xb7, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbd}, + {value: 0x1308, lo: 0xbe, hi: 0xbf}, + // Block 0x78, offset 0x3d8 + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x9a}, + {value: 0x0008, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xaa}, + {value: 0x1008, lo: 0xab, hi: 0xab}, + {value: 0x1308, lo: 0xac, hi: 0xad}, + {value: 0x1008, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb4}, + {value: 0x1008, lo: 0xb5, hi: 0xb5}, + {value: 0x1b08, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x79, offset 0x3e8 + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x90}, + {value: 0x0008, lo: 0x91, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x7a, offset 0x3f5 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x4465, lo: 0x9c, hi: 0x9c}, + {value: 0x447d, lo: 0x9d, hi: 0x9d}, + {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xaf}, + {value: 0x4495, lo: 0xb0, hi: 0xbf}, + // Block 0x7b, offset 0x3ff + {value: 0x0000, lo: 0x04}, + {value: 0x44b5, lo: 0x80, hi: 0x8f}, + {value: 0x44d5, lo: 0x90, hi: 0x9f}, + {value: 0x44f5, lo: 0xa0, hi: 0xaf}, + {value: 0x44d5, lo: 0xb0, hi: 0xbf}, + // Block 0x7c, offset 0x404 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x1008, lo: 0xa3, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xa5}, + {value: 0x1008, lo: 0xa6, hi: 0xa7}, + {value: 0x1308, lo: 0xa8, hi: 0xa8}, + {value: 0x1008, lo: 0xa9, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xab}, + {value: 0x1008, lo: 0xac, hi: 0xac}, + {value: 0x1b08, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x7d, offset 0x411 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7e, offset 0x415 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x7f, offset 0x41a + {value: 0x0020, lo: 0x01}, + {value: 0x4515, lo: 0x80, hi: 0xbf}, + // Block 0x80, offset 0x41c + {value: 0x0020, lo: 0x03}, + {value: 0x4d15, lo: 0x80, hi: 0x94}, + {value: 0x4ad5, lo: 0x95, hi: 0x95}, + {value: 0x4fb5, lo: 0x96, hi: 0xbf}, + // Block 0x81, offset 0x420 + {value: 0x0020, lo: 0x01}, + {value: 0x54f5, lo: 0x80, hi: 0xbf}, + // Block 0x82, offset 0x422 + {value: 0x0020, lo: 0x03}, + {value: 0x5cf5, lo: 0x80, hi: 0x84}, + {value: 0x5655, lo: 0x85, hi: 0x85}, + {value: 0x5d95, lo: 0x86, hi: 0xbf}, + // Block 0x83, offset 0x426 + {value: 0x0020, lo: 0x08}, + {value: 0x6b55, lo: 0x80, hi: 0x8f}, + {value: 0x6d15, lo: 0x90, hi: 0x90}, + {value: 0x6d55, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, lo: 0xac, hi: 0xac}, + {value: 0x70b5, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x70d5, lo: 0xb0, hi: 0xbf}, + // Block 0x84, offset 0x42f + {value: 0x0020, lo: 0x05}, + {value: 0x72d5, lo: 0x80, hi: 0xad}, + {value: 0x6535, lo: 0xae, hi: 0xae}, + {value: 0x7895, lo: 0xaf, hi: 0xb5}, + {value: 0x6f55, lo: 0xb6, hi: 0xb6}, + {value: 0x7975, lo: 0xb7, hi: 0xbf}, + // Block 0x85, offset 0x435 + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x86, offset 0x439 + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x87, offset 0x449 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x88, offset 0x453 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x89, offset 0x458 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x8a, offset 0x45b + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x8b, offset 0x461 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8c, offset 0x468 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbc}, + {value: 0x1308, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x8d, offset 0x46d + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8e, offset 0x471 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x9f}, + {value: 0x1308, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x8f, offset 0x477 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x90, offset 0x47c + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x91, offset 0x485 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x92, offset 0x48a + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x93, offset 0x490 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8ad5, lo: 0x98, hi: 0x9f}, + {value: 0x8aed, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x94, offset 0x497 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x8aed, lo: 0xb0, hi: 0xb7}, + {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, + // Block 0x95, offset 0x49e + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x96, offset 0x4a5 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x97, offset 0x4a9 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xae}, + {value: 0x0018, lo: 0xaf, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x98, offset 0x4ae + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x99, offset 0x4b1 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xbf}, + // Block 0x9a, offset 0x4b6 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x9b, offset 0x4c2 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x9c, offset 0x4c8 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa6}, + {value: 0x0018, lo: 0xa7, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x9d, offset 0x4cd + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb3}, + {value: 0x0008, lo: 0xb4, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x9e, offset 0x4d4 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0018, lo: 0x96, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x9f, offset 0x4dc + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0xa0, offset 0x4e1 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xbf}, + // Block 0xa1, offset 0x4e5 + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x1308, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8b}, + {value: 0x1308, lo: 0x8c, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x94}, + {value: 0x0008, lo: 0x95, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xa2, offset 0x4f5 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbc}, + {value: 0x0018, lo: 0xbd, hi: 0xbf}, + // Block 0xa3, offset 0x4fc + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa4, offset 0x500 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa5, offset 0x504 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbf}, + // Block 0xa6, offset 0x50b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa7, offset 0x50e + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa8, offset 0x511 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xa9, offset 0x515 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xaa, offset 0x519 + {value: 0x0000, lo: 0x05}, + {value: 0x1008, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xbf}, + // Block 0xab, offset 0x51f + {value: 0x0000, lo: 0x08}, + {value: 0x1308, lo: 0x80, hi: 0x85}, + {value: 0x1b08, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xac, offset 0x528 + {value: 0x0000, lo: 0x0b}, + {value: 0x1308, lo: 0x80, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xaf}, + {value: 0x1008, lo: 0xb0, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xb6}, + {value: 0x1008, lo: 0xb7, hi: 0xb8}, + {value: 0x1b08, lo: 0xb9, hi: 0xb9}, + {value: 0x1308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbc}, + {value: 0x0340, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xad, offset 0x534 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xae, offset 0x53b + {value: 0x0000, lo: 0x08}, + {value: 0x1308, lo: 0x80, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa6}, + {value: 0x1308, lo: 0xa7, hi: 0xab}, + {value: 0x1008, lo: 0xac, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xb2}, + {value: 0x1b08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xbf}, + // Block 0xaf, offset 0x544 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xb0, offset 0x54c + {value: 0x0000, lo: 0x06}, + {value: 0x1308, lo: 0x80, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb2}, + {value: 0x1008, lo: 0xb3, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xbe}, + {value: 0x1008, lo: 0xbf, hi: 0xbf}, + // Block 0xb1, offset 0x553 + {value: 0x0000, lo: 0x0d}, + {value: 0x1808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x89}, + {value: 0x1308, lo: 0x8a, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xb2, offset 0x561 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0xab}, + {value: 0x1008, lo: 0xac, hi: 0xae}, + {value: 0x1308, lo: 0xaf, hi: 0xb1}, + {value: 0x1008, lo: 0xb2, hi: 0xb3}, + {value: 0x1308, lo: 0xb4, hi: 0xb4}, + {value: 0x1808, lo: 0xb5, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbd}, + {value: 0x1308, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb3, offset 0x56e + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xb4, offset 0x57b + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x1308, lo: 0x9f, hi: 0x9f}, + {value: 0x1008, lo: 0xa0, hi: 0xa2}, + {value: 0x1308, lo: 0xa3, hi: 0xa9}, + {value: 0x1b08, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb5, offset 0x584 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x1008, lo: 0xb5, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xbf}, + // Block 0xb6, offset 0x588 + {value: 0x0000, lo: 0x0d}, + {value: 0x1008, lo: 0x80, hi: 0x81}, + {value: 0x1b08, lo: 0x82, hi: 0x82}, + {value: 0x1308, lo: 0x83, hi: 0x84}, + {value: 0x1008, lo: 0x85, hi: 0x85}, + {value: 0x1308, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xb7, offset 0x596 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x1008, lo: 0xb0, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xb8}, + {value: 0x1008, lo: 0xb9, hi: 0xb9}, + {value: 0x1308, lo: 0xba, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbe}, + {value: 0x1308, lo: 0xbf, hi: 0xbf}, + // Block 0xb8, offset 0x59e + {value: 0x0000, lo: 0x0a}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x1008, lo: 0x81, hi: 0x81}, + {value: 0x1b08, lo: 0x82, hi: 0x82}, + {value: 0x1308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xb9, offset 0x5a9 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x1008, lo: 0xaf, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x1008, lo: 0xb8, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xba, offset 0x5b2 + {value: 0x0000, lo: 0x05}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9b}, + {value: 0x1308, lo: 0x9c, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xbb, offset 0x5b8 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x1008, lo: 0xb0, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbc}, + {value: 0x1308, lo: 0xbd, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbc, offset 0x5c0 + {value: 0x0000, lo: 0x08}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xbd, offset 0x5c9 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x1308, lo: 0xab, hi: 0xab}, + {value: 0x1008, lo: 0xac, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xad}, + {value: 0x1008, lo: 0xae, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb5}, + {value: 0x1808, lo: 0xb6, hi: 0xb6}, + {value: 0x1308, lo: 0xb7, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xbe, offset 0x5d3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xbf, offset 0x5d6 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9f}, + {value: 0x1008, lo: 0xa0, hi: 0xa1}, + {value: 0x1308, lo: 0xa2, hi: 0xa5}, + {value: 0x1008, lo: 0xa6, hi: 0xa6}, + {value: 0x1308, lo: 0xa7, hi: 0xaa}, + {value: 0x1b08, lo: 0xab, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xc0, offset 0x5e2 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc1, offset 0x5e5 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xc2, offset 0x5ea + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc3, offset 0x5ed + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xae}, + {value: 0x1008, lo: 0xaf, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xc4, offset 0x5f7 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xbf}, + // Block 0xc5, offset 0x600 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x1308, lo: 0x92, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa8}, + {value: 0x1008, lo: 0xa9, hi: 0xa9}, + {value: 0x1308, lo: 0xaa, hi: 0xb0}, + {value: 0x1008, lo: 0xb1, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb3}, + {value: 0x1008, lo: 0xb4, hi: 0xb4}, + {value: 0x1308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xc6, offset 0x60c + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xc7, offset 0x60f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xc8, offset 0x614 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xc9, offset 0x617 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0xca, offset 0x61a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xcb, offset 0x61d + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xcc, offset 0x624 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xcd, offset 0x62b + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xce, offset 0x62f + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0xcf, offset 0x63a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xd0, offset 0x63d + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x1008, lo: 0x91, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd1, offset 0x643 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x1308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xd2, offset 0x648 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0xd3, offset 0x64c + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xd4, offset 0x64f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xd5, offset 0x652 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0xbf}, + // Block 0xd6, offset 0x655 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0xd7, offset 0x65a + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x03c0, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xd8, offset 0x664 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xd9, offset 0x667 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xda, offset 0x66b + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, lo: 0xa4, hi: 0xa4}, + {value: 0x1018, lo: 0xa5, hi: 0xa6}, + {value: 0x1318, lo: 0xa7, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xac}, + {value: 0x1018, lo: 0xad, hi: 0xb2}, + {value: 0x0340, lo: 0xb3, hi: 0xba}, + {value: 0x1318, lo: 0xbb, hi: 0xbf}, + // Block 0xdb, offset 0x67a + {value: 0x0000, lo: 0x0b}, + {value: 0x1318, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x84}, + {value: 0x1318, lo: 0x85, hi: 0x8b}, + {value: 0x0018, lo: 0x8c, hi: 0xa9}, + {value: 0x1318, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xba}, + {value: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xdc, offset 0x686 + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xdd, offset 0x68a + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x1318, lo: 0x82, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0xbf}, + // Block 0xde, offset 0x68f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xdf, offset 0x694 + {value: 0x0000, lo: 0x03}, + {value: 0x1308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x1308, lo: 0xbb, hi: 0xbf}, + // Block 0xe0, offset 0x698 + {value: 0x0000, lo: 0x04}, + {value: 0x1308, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xb4}, + {value: 0x1308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0xe1, offset 0x69d + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x1308, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9a}, + {value: 0x1308, lo: 0x9b, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x1308, lo: 0xa1, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xe2, offset 0x6a6 + {value: 0x0000, lo: 0x0a}, + {value: 0x1308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x1308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x1308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x1308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x1308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xe3, offset 0x6b1 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8f}, + {value: 0x1308, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xe4, offset 0x6b7 + {value: 0x0000, lo: 0x07}, + {value: 0x0208, lo: 0x80, hi: 0x83}, + {value: 0x1308, lo: 0x84, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xe5, offset 0x6bf + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe6, offset 0x6c3 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0xe7, offset 0x6c7 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0xe8, offset 0x6cd + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xe9, offset 0x6d3 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1c1, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xea, offset 0x6d8 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0xeb, offset 0x6db + {value: 0x0000, lo: 0x0d}, + {value: 0xc7e9, lo: 0x80, hi: 0x80}, + {value: 0xc839, lo: 0x81, hi: 0x81}, + {value: 0xc889, lo: 0x82, hi: 0x82}, + {value: 0xc8d9, lo: 0x83, hi: 0x83}, + {value: 0xc929, lo: 0x84, hi: 0x84}, + {value: 0xc979, lo: 0x85, hi: 0x85}, + {value: 0xc9c9, lo: 0x86, hi: 0x86}, + {value: 0xca19, lo: 0x87, hi: 0x87}, + {value: 0xca69, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcab9, lo: 0x90, hi: 0x90}, + {value: 0xcad9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xbf}, + // Block 0xec, offset 0x6e9 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xed, offset 0x6f0 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xee, offset 0x6f3 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0xbf}, + // Block 0xef, offset 0x6f6 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0xf0, offset 0x6fa + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0xf1, offset 0x700 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0xf2, offset 0x705 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb2}, + {value: 0x0018, lo: 0xb3, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xf3, offset 0x70f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xf4, offset 0x714 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xbf}, + // Block 0xf5, offset 0x717 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0xbf}, + // Block 0xf6, offset 0x71a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xf7, offset 0x71d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xf8, offset 0x720 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xf9, offset 0x724 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xfa, offset 0x727 + {value: 0x0020, lo: 0x0f}, + {value: 0xdeb9, lo: 0x80, hi: 0x89}, + {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, + {value: 0xdff9, lo: 0x8b, hi: 0x9c}, + {value: 0x8e1d, lo: 0x9d, hi: 0x9d}, + {value: 0xe239, lo: 0x9e, hi: 0xa2}, + {value: 0x8e3d, lo: 0xa3, hi: 0xa3}, + {value: 0xe2d9, lo: 0xa4, hi: 0xab}, + {value: 0x7ed5, lo: 0xac, hi: 0xac}, + {value: 0xe3d9, lo: 0xad, hi: 0xaf}, + {value: 0x8e5d, lo: 0xb0, hi: 0xb0}, + {value: 0xe439, lo: 0xb1, hi: 0xb6}, + {value: 0x8e7d, lo: 0xb7, hi: 0xb9}, + {value: 0xe4f9, lo: 0xba, hi: 0xba}, + {value: 0x8edd, lo: 0xbb, hi: 0xbb}, + {value: 0xe519, lo: 0xbc, hi: 0xbf}, + // Block 0xfb, offset 0x737 + {value: 0x0020, lo: 0x10}, + {value: 0x937d, lo: 0x80, hi: 0x80}, + {value: 0xf099, lo: 0x81, hi: 0x86}, + {value: 0x939d, lo: 0x87, hi: 0x8a}, + {value: 0xd9f9, lo: 0x8b, hi: 0x8b}, + {value: 0xf159, lo: 0x8c, hi: 0x96}, + {value: 0x941d, lo: 0x97, hi: 0x97}, + {value: 0xf2b9, lo: 0x98, hi: 0xa3}, + {value: 0x943d, lo: 0xa4, hi: 0xa6}, + {value: 0xf439, lo: 0xa7, hi: 0xaa}, + {value: 0x949d, lo: 0xab, hi: 0xab}, + {value: 0xf4b9, lo: 0xac, hi: 0xac}, + {value: 0x94bd, lo: 0xad, hi: 0xad}, + {value: 0xf4d9, lo: 0xae, hi: 0xaf}, + {value: 0x94dd, lo: 0xb0, hi: 0xb1}, + {value: 0xf519, lo: 0xb2, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xfc, offset 0x748 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0340, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x9f}, + {value: 0x0340, lo: 0xa0, hi: 0xbf}, + // Block 0xfd, offset 0x74d + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0xfe, offset 0x74f + {value: 0x0000, lo: 0x01}, + {value: 0x13c0, lo: 0x80, hi: 0xbf}, + // Block 0xff, offset 0x751 + {value: 0x0000, lo: 0x02}, + {value: 0x13c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 41559 bytes (40KiB); checksum: F4A1FA4E diff --git a/vendor/golang.org/x/net/idna/trie.go b/vendor/golang.org/x/net/idna/trie.go new file mode 100644 index 0000000..c4ef847 --- /dev/null +++ b/vendor/golang.org/x/net/idna/trie.go @@ -0,0 +1,72 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +// appendMapping appends the mapping for the respective rune. isMapped must be +// true. A mapping is a categorization of a rune as defined in UTS #46. +func (c info) appendMapping(b []byte, s string) []byte { + index := int(c >> indexShift) + if c&xorBit == 0 { + s := mappings[index:] + return append(b, s[1:s[0]+1]...) + } + b = append(b, s...) + if c&inlineXOR == inlineXOR { + // TODO: support and handle two-byte inline masks + b[len(b)-1] ^= byte(index) + } else { + for p := len(b) - int(xorData[index]); p < len(b); p++ { + index++ + b[p] ^= xorData[index] + } + } + return b +} + +// Sparse block handling code. + +type valueRange struct { + value uint16 // header: value:stride + lo, hi byte // header: lo:n +} + +type sparseBlocks struct { + values []valueRange + offset []uint16 +} + +var idnaSparse = sparseBlocks{ + values: idnaSparseValues[:], + offset: idnaSparseOffset[:], +} + +// Don't use newIdnaTrie to avoid unconditional linking in of the table. +var trie = &idnaTrie{} + +// lookup determines the type of block n and looks up the value for b. +// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block +// is a list of ranges with an accompanying value. Given a matching range r, +// the value for b is by r.value + (b - r.lo) * stride. +func (t *sparseBlocks) lookup(n uint32, b byte) uint16 { + offset := t.offset[n] + header := t.values[offset] + lo := offset + 1 + hi := lo + uint16(header.lo) + for lo < hi { + m := lo + (hi-lo)/2 + r := t.values[m] + if r.lo <= b && b <= r.hi { + return r.value + uint16(b-r.lo)*header.value + } + if b < r.lo { + hi = m + } else { + lo = m + 1 + } + } + return 0 +} diff --git a/vendor/golang.org/x/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go new file mode 100644 index 0000000..63cb03b --- /dev/null +++ b/vendor/golang.org/x/net/idna/trieval.go @@ -0,0 +1,114 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package idna + +// This file contains definitions for interpreting the trie value of the idna +// trie generated by "go run gen*.go". It is shared by both the generator +// program and the resultant package. Sharing is achieved by the generator +// copying gen_trieval.go to trieval.go and changing what's above this comment. + +// info holds information from the IDNA mapping table for a single rune. It is +// the value returned by a trie lookup. In most cases, all information fits in +// a 16-bit value. For mappings, this value may contain an index into a slice +// with the mapped string. Such mappings can consist of the actual mapped value +// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the +// input rune. This technique is used by the cases packages and reduces the +// table size significantly. +// +// The per-rune values have the following format: +// +// if mapped { +// if inlinedXOR { +// 15..13 inline XOR marker +// 12..11 unused +// 10..3 inline XOR mask +// } else { +// 15..3 index into xor or mapping table +// } +// } else { +// 15..13 unused +// 12 modifier (including virama) +// 11 virama modifier +// 10..8 joining type +// 7..3 category type +// } +// 2 use xor pattern +// 1..0 mapped category +// +// See the definitions below for a more detailed description of the various +// bits. +type info uint16 + +const ( + catSmallMask = 0x3 + catBigMask = 0xF8 + indexShift = 3 + xorBit = 0x4 // interpret the index as an xor pattern + inlineXOR = 0xE000 // These bits are set if the XOR pattern is inlined. + + joinShift = 8 + joinMask = 0x07 + + viramaModifier = 0x0800 + modifier = 0x1000 +) + +// A category corresponds to a category defined in the IDNA mapping table. +type category uint16 + +const ( + unknown category = 0 // not defined currently in unicode. + mapped category = 1 + disallowedSTD3Mapped category = 2 + deviation category = 3 +) + +const ( + valid category = 0x08 + validNV8 category = 0x18 + validXV8 category = 0x28 + disallowed category = 0x40 + disallowedSTD3Valid category = 0x80 + ignored category = 0xC0 +) + +// join types and additional rune information +const ( + joiningL = (iota + 1) + joiningD + joiningT + joiningR + + //the following types are derived during processing + joinZWJ + joinZWNJ + joinVirama + numJoinTypes +) + +func (c info) isMapped() bool { + return c&0x3 != 0 +} + +func (c info) category() category { + small := c & catSmallMask + if small != 0 { + return category(small) + } + return category(c & catBigMask) +} + +func (c info) joinType() info { + if c.isMapped() { + return 0 + } + return (c >> joinShift) & joinMask +} + +func (c info) isModifier() bool { + return c&(modifier|catSmallMask) == modifier +} + +func (c info) isViramaModifier() bool { + return c&(viramaModifier|catSmallMask) == viramaModifier +} diff --git a/vendor/golang.org/x/net/internal/iana/const.go b/vendor/golang.org/x/net/internal/iana/const.go new file mode 100644 index 0000000..3438a27 --- /dev/null +++ b/vendor/golang.org/x/net/internal/iana/const.go @@ -0,0 +1,180 @@ +// go generate gen.go +// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA). +package iana // import "golang.org/x/net/internal/iana" + +// Differentiated Services Field Codepoints (DSCP), Updated: 2013-06-25 +const ( + DiffServCS0 = 0x0 // CS0 + DiffServCS1 = 0x20 // CS1 + DiffServCS2 = 0x40 // CS2 + DiffServCS3 = 0x60 // CS3 + DiffServCS4 = 0x80 // CS4 + DiffServCS5 = 0xa0 // CS5 + DiffServCS6 = 0xc0 // CS6 + DiffServCS7 = 0xe0 // CS7 + DiffServAF11 = 0x28 // AF11 + DiffServAF12 = 0x30 // AF12 + DiffServAF13 = 0x38 // AF13 + DiffServAF21 = 0x48 // AF21 + DiffServAF22 = 0x50 // AF22 + DiffServAF23 = 0x58 // AF23 + DiffServAF31 = 0x68 // AF31 + DiffServAF32 = 0x70 // AF32 + DiffServAF33 = 0x78 // AF33 + DiffServAF41 = 0x88 // AF41 + DiffServAF42 = 0x90 // AF42 + DiffServAF43 = 0x98 // AF43 + DiffServEFPHB = 0xb8 // EF PHB + DiffServVOICEADMIT = 0xb0 // VOICE-ADMIT +) + +// IPv4 TOS Byte and IPv6 Traffic Class Octet, Updated: 2001-09-06 +const ( + NotECNTransport = 0x0 // Not-ECT (Not ECN-Capable Transport) + ECNTransport1 = 0x1 // ECT(1) (ECN-Capable Transport(1)) + ECNTransport0 = 0x2 // ECT(0) (ECN-Capable Transport(0)) + CongestionExperienced = 0x3 // CE (Congestion Experienced) +) + +// Protocol Numbers, Updated: 2015-10-06 +const ( + ProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number + ProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option + ProtocolICMP = 1 // Internet Control Message + ProtocolIGMP = 2 // Internet Group Management + ProtocolGGP = 3 // Gateway-to-Gateway + ProtocolIPv4 = 4 // IPv4 encapsulation + ProtocolST = 5 // Stream + ProtocolTCP = 6 // Transmission Control + ProtocolCBT = 7 // CBT + ProtocolEGP = 8 // Exterior Gateway Protocol + ProtocolIGP = 9 // any private interior gateway (used by Cisco for their IGRP) + ProtocolBBNRCCMON = 10 // BBN RCC Monitoring + ProtocolNVPII = 11 // Network Voice Protocol + ProtocolPUP = 12 // PUP + ProtocolEMCON = 14 // EMCON + ProtocolXNET = 15 // Cross Net Debugger + ProtocolCHAOS = 16 // Chaos + ProtocolUDP = 17 // User Datagram + ProtocolMUX = 18 // Multiplexing + ProtocolDCNMEAS = 19 // DCN Measurement Subsystems + ProtocolHMP = 20 // Host Monitoring + ProtocolPRM = 21 // Packet Radio Measurement + ProtocolXNSIDP = 22 // XEROX NS IDP + ProtocolTRUNK1 = 23 // Trunk-1 + ProtocolTRUNK2 = 24 // Trunk-2 + ProtocolLEAF1 = 25 // Leaf-1 + ProtocolLEAF2 = 26 // Leaf-2 + ProtocolRDP = 27 // Reliable Data Protocol + ProtocolIRTP = 28 // Internet Reliable Transaction + ProtocolISOTP4 = 29 // ISO Transport Protocol Class 4 + ProtocolNETBLT = 30 // Bulk Data Transfer Protocol + ProtocolMFENSP = 31 // MFE Network Services Protocol + ProtocolMERITINP = 32 // MERIT Internodal Protocol + ProtocolDCCP = 33 // Datagram Congestion Control Protocol + Protocol3PC = 34 // Third Party Connect Protocol + ProtocolIDPR = 35 // Inter-Domain Policy Routing Protocol + ProtocolXTP = 36 // XTP + ProtocolDDP = 37 // Datagram Delivery Protocol + ProtocolIDPRCMTP = 38 // IDPR Control Message Transport Proto + ProtocolTPPP = 39 // TP++ Transport Protocol + ProtocolIL = 40 // IL Transport Protocol + ProtocolIPv6 = 41 // IPv6 encapsulation + ProtocolSDRP = 42 // Source Demand Routing Protocol + ProtocolIPv6Route = 43 // Routing Header for IPv6 + ProtocolIPv6Frag = 44 // Fragment Header for IPv6 + ProtocolIDRP = 45 // Inter-Domain Routing Protocol + ProtocolRSVP = 46 // Reservation Protocol + ProtocolGRE = 47 // Generic Routing Encapsulation + ProtocolDSR = 48 // Dynamic Source Routing Protocol + ProtocolBNA = 49 // BNA + ProtocolESP = 50 // Encap Security Payload + ProtocolAH = 51 // Authentication Header + ProtocolINLSP = 52 // Integrated Net Layer Security TUBA + ProtocolNARP = 54 // NBMA Address Resolution Protocol + ProtocolMOBILE = 55 // IP Mobility + ProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management + ProtocolSKIP = 57 // SKIP + ProtocolIPv6ICMP = 58 // ICMP for IPv6 + ProtocolIPv6NoNxt = 59 // No Next Header for IPv6 + ProtocolIPv6Opts = 60 // Destination Options for IPv6 + ProtocolCFTP = 62 // CFTP + ProtocolSATEXPAK = 64 // SATNET and Backroom EXPAK + ProtocolKRYPTOLAN = 65 // Kryptolan + ProtocolRVD = 66 // MIT Remote Virtual Disk Protocol + ProtocolIPPC = 67 // Internet Pluribus Packet Core + ProtocolSATMON = 69 // SATNET Monitoring + ProtocolVISA = 70 // VISA Protocol + ProtocolIPCV = 71 // Internet Packet Core Utility + ProtocolCPNX = 72 // Computer Protocol Network Executive + ProtocolCPHB = 73 // Computer Protocol Heart Beat + ProtocolWSN = 74 // Wang Span Network + ProtocolPVP = 75 // Packet Video Protocol + ProtocolBRSATMON = 76 // Backroom SATNET Monitoring + ProtocolSUNND = 77 // SUN ND PROTOCOL-Temporary + ProtocolWBMON = 78 // WIDEBAND Monitoring + ProtocolWBEXPAK = 79 // WIDEBAND EXPAK + ProtocolISOIP = 80 // ISO Internet Protocol + ProtocolVMTP = 81 // VMTP + ProtocolSECUREVMTP = 82 // SECURE-VMTP + ProtocolVINES = 83 // VINES + ProtocolTTP = 84 // Transaction Transport Protocol + ProtocolIPTM = 84 // Internet Protocol Traffic Manager + ProtocolNSFNETIGP = 85 // NSFNET-IGP + ProtocolDGP = 86 // Dissimilar Gateway Protocol + ProtocolTCF = 87 // TCF + ProtocolEIGRP = 88 // EIGRP + ProtocolOSPFIGP = 89 // OSPFIGP + ProtocolSpriteRPC = 90 // Sprite RPC Protocol + ProtocolLARP = 91 // Locus Address Resolution Protocol + ProtocolMTP = 92 // Multicast Transport Protocol + ProtocolAX25 = 93 // AX.25 Frames + ProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol + ProtocolSCCSP = 96 // Semaphore Communications Sec. Pro. + ProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation + ProtocolENCAP = 98 // Encapsulation Header + ProtocolGMTP = 100 // GMTP + ProtocolIFMP = 101 // Ipsilon Flow Management Protocol + ProtocolPNNI = 102 // PNNI over IP + ProtocolPIM = 103 // Protocol Independent Multicast + ProtocolARIS = 104 // ARIS + ProtocolSCPS = 105 // SCPS + ProtocolQNX = 106 // QNX + ProtocolAN = 107 // Active Networks + ProtocolIPComp = 108 // IP Payload Compression Protocol + ProtocolSNP = 109 // Sitara Networks Protocol + ProtocolCompaqPeer = 110 // Compaq Peer Protocol + ProtocolIPXinIP = 111 // IPX in IP + ProtocolVRRP = 112 // Virtual Router Redundancy Protocol + ProtocolPGM = 113 // PGM Reliable Transport Protocol + ProtocolL2TP = 115 // Layer Two Tunneling Protocol + ProtocolDDX = 116 // D-II Data Exchange (DDX) + ProtocolIATP = 117 // Interactive Agent Transfer Protocol + ProtocolSTP = 118 // Schedule Transfer Protocol + ProtocolSRP = 119 // SpectraLink Radio Protocol + ProtocolUTI = 120 // UTI + ProtocolSMP = 121 // Simple Message Protocol + ProtocolPTP = 123 // Performance Transparency Protocol + ProtocolISIS = 124 // ISIS over IPv4 + ProtocolFIRE = 125 // FIRE + ProtocolCRTP = 126 // Combat Radio Transport Protocol + ProtocolCRUDP = 127 // Combat Radio User Datagram + ProtocolSSCOPMCE = 128 // SSCOPMCE + ProtocolIPLT = 129 // IPLT + ProtocolSPS = 130 // Secure Packet Shield + ProtocolPIPE = 131 // Private IP Encapsulation within IP + ProtocolSCTP = 132 // Stream Control Transmission Protocol + ProtocolFC = 133 // Fibre Channel + ProtocolRSVPE2EIGNORE = 134 // RSVP-E2E-IGNORE + ProtocolMobilityHeader = 135 // Mobility Header + ProtocolUDPLite = 136 // UDPLite + ProtocolMPLSinIP = 137 // MPLS-in-IP + ProtocolMANET = 138 // MANET Protocols + ProtocolHIP = 139 // Host Identity Protocol + ProtocolShim6 = 140 // Shim6 Protocol + ProtocolWESP = 141 // Wrapped Encapsulating Security Payload + ProtocolROHC = 142 // Robust Header Compression + ProtocolReserved = 255 // Reserved +) diff --git a/vendor/golang.org/x/net/internal/iana/gen.go b/vendor/golang.org/x/net/internal/iana/gen.go new file mode 100644 index 0000000..86c78b3 --- /dev/null +++ b/vendor/golang.org/x/net/internal/iana/gen.go @@ -0,0 +1,293 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +//go:generate go run gen.go + +// This program generates internet protocol constants and tables by +// reading IANA protocol registries. +package main + +import ( + "bytes" + "encoding/xml" + "fmt" + "go/format" + "io" + "io/ioutil" + "net/http" + "os" + "strconv" + "strings" +) + +var registries = []struct { + url string + parse func(io.Writer, io.Reader) error +}{ + { + "http://www.iana.org/assignments/dscp-registry/dscp-registry.xml", + parseDSCPRegistry, + }, + { + "http://www.iana.org/assignments/ipv4-tos-byte/ipv4-tos-byte.xml", + parseTOSTCByte, + }, + { + "http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml", + parseProtocolNumbers, + }, +} + +func main() { + var bb bytes.Buffer + fmt.Fprintf(&bb, "// go generate gen.go\n") + fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n") + fmt.Fprintf(&bb, "// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA).\n") + fmt.Fprintf(&bb, `package iana // import "golang.org/x/net/internal/iana"`+"\n\n") + for _, r := range registries { + resp, err := http.Get(r.url) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url) + os.Exit(1) + } + if err := r.parse(&bb, resp.Body); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + fmt.Fprintf(&bb, "\n") + } + b, err := format.Source(bb.Bytes()) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + if err := ioutil.WriteFile("const.go", b, 0644); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func parseDSCPRegistry(w io.Writer, r io.Reader) error { + dec := xml.NewDecoder(r) + var dr dscpRegistry + if err := dec.Decode(&dr); err != nil { + return err + } + drs := dr.escape() + fmt.Fprintf(w, "// %s, Updated: %s\n", dr.Title, dr.Updated) + fmt.Fprintf(w, "const (\n") + for _, dr := range drs { + fmt.Fprintf(w, "DiffServ%s = %#x", dr.Name, dr.Value) + fmt.Fprintf(w, "// %s\n", dr.OrigName) + } + fmt.Fprintf(w, ")\n") + return nil +} + +type dscpRegistry struct { + XMLName xml.Name `xml:"registry"` + Title string `xml:"title"` + Updated string `xml:"updated"` + Note string `xml:"note"` + RegTitle string `xml:"registry>title"` + PoolRecords []struct { + Name string `xml:"name"` + Space string `xml:"space"` + } `xml:"registry>record"` + Records []struct { + Name string `xml:"name"` + Space string `xml:"space"` + } `xml:"registry>registry>record"` +} + +type canonDSCPRecord struct { + OrigName string + Name string + Value int +} + +func (drr *dscpRegistry) escape() []canonDSCPRecord { + drs := make([]canonDSCPRecord, len(drr.Records)) + sr := strings.NewReplacer( + "+", "", + "-", "", + "/", "", + ".", "", + " ", "", + ) + for i, dr := range drr.Records { + s := strings.TrimSpace(dr.Name) + drs[i].OrigName = s + drs[i].Name = sr.Replace(s) + n, err := strconv.ParseUint(dr.Space, 2, 8) + if err != nil { + continue + } + drs[i].Value = int(n) << 2 + } + return drs +} + +func parseTOSTCByte(w io.Writer, r io.Reader) error { + dec := xml.NewDecoder(r) + var ttb tosTCByte + if err := dec.Decode(&ttb); err != nil { + return err + } + trs := ttb.escape() + fmt.Fprintf(w, "// %s, Updated: %s\n", ttb.Title, ttb.Updated) + fmt.Fprintf(w, "const (\n") + for _, tr := range trs { + fmt.Fprintf(w, "%s = %#x", tr.Keyword, tr.Value) + fmt.Fprintf(w, "// %s\n", tr.OrigKeyword) + } + fmt.Fprintf(w, ")\n") + return nil +} + +type tosTCByte struct { + XMLName xml.Name `xml:"registry"` + Title string `xml:"title"` + Updated string `xml:"updated"` + Note string `xml:"note"` + RegTitle string `xml:"registry>title"` + Records []struct { + Binary string `xml:"binary"` + Keyword string `xml:"keyword"` + } `xml:"registry>record"` +} + +type canonTOSTCByteRecord struct { + OrigKeyword string + Keyword string + Value int +} + +func (ttb *tosTCByte) escape() []canonTOSTCByteRecord { + trs := make([]canonTOSTCByteRecord, len(ttb.Records)) + sr := strings.NewReplacer( + "Capable", "", + "(", "", + ")", "", + "+", "", + "-", "", + "/", "", + ".", "", + " ", "", + ) + for i, tr := range ttb.Records { + s := strings.TrimSpace(tr.Keyword) + trs[i].OrigKeyword = s + ss := strings.Split(s, " ") + if len(ss) > 1 { + trs[i].Keyword = strings.Join(ss[1:], " ") + } else { + trs[i].Keyword = ss[0] + } + trs[i].Keyword = sr.Replace(trs[i].Keyword) + n, err := strconv.ParseUint(tr.Binary, 2, 8) + if err != nil { + continue + } + trs[i].Value = int(n) + } + return trs +} + +func parseProtocolNumbers(w io.Writer, r io.Reader) error { + dec := xml.NewDecoder(r) + var pn protocolNumbers + if err := dec.Decode(&pn); err != nil { + return err + } + prs := pn.escape() + prs = append([]canonProtocolRecord{{ + Name: "IP", + Descr: "IPv4 encapsulation, pseudo protocol number", + Value: 0, + }}, prs...) + fmt.Fprintf(w, "// %s, Updated: %s\n", pn.Title, pn.Updated) + fmt.Fprintf(w, "const (\n") + for _, pr := range prs { + if pr.Name == "" { + continue + } + fmt.Fprintf(w, "Protocol%s = %d", pr.Name, pr.Value) + s := pr.Descr + if s == "" { + s = pr.OrigName + } + fmt.Fprintf(w, "// %s\n", s) + } + fmt.Fprintf(w, ")\n") + return nil +} + +type protocolNumbers struct { + XMLName xml.Name `xml:"registry"` + Title string `xml:"title"` + Updated string `xml:"updated"` + RegTitle string `xml:"registry>title"` + Note string `xml:"registry>note"` + Records []struct { + Value string `xml:"value"` + Name string `xml:"name"` + Descr string `xml:"description"` + } `xml:"registry>record"` +} + +type canonProtocolRecord struct { + OrigName string + Name string + Descr string + Value int +} + +func (pn *protocolNumbers) escape() []canonProtocolRecord { + prs := make([]canonProtocolRecord, len(pn.Records)) + sr := strings.NewReplacer( + "-in-", "in", + "-within-", "within", + "-over-", "over", + "+", "P", + "-", "", + "/", "", + ".", "", + " ", "", + ) + for i, pr := range pn.Records { + if strings.Contains(pr.Name, "Deprecated") || + strings.Contains(pr.Name, "deprecated") { + continue + } + prs[i].OrigName = pr.Name + s := strings.TrimSpace(pr.Name) + switch pr.Name { + case "ISIS over IPv4": + prs[i].Name = "ISIS" + case "manet": + prs[i].Name = "MANET" + default: + prs[i].Name = sr.Replace(s) + } + ss := strings.Split(pr.Descr, "\n") + for i := range ss { + ss[i] = strings.TrimSpace(ss[i]) + } + if len(ss) > 1 { + prs[i].Descr = strings.Join(ss, " ") + } else { + prs[i].Descr = ss[0] + } + prs[i].Value, _ = strconv.Atoi(pr.Value) + } + return prs +} diff --git a/vendor/golang.org/x/net/internal/netreflect/socket.go b/vendor/golang.org/x/net/internal/netreflect/socket.go new file mode 100644 index 0000000..1495b65 --- /dev/null +++ b/vendor/golang.org/x/net/internal/netreflect/socket.go @@ -0,0 +1,41 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +// Package netreflect implements run-time reflection for the +// facilities of net package. +// +// This package works only for Go 1.8 or below. +package netreflect + +import ( + "errors" + "net" +) + +var ( + errInvalidType = errors.New("invalid type") + errOpNoSupport = errors.New("operation not supported") +) + +// SocketOf returns the socket descriptor of c. +func SocketOf(c net.Conn) (uintptr, error) { + switch c.(type) { + case *net.TCPConn, *net.UDPConn, *net.IPConn, *net.UnixConn: + return socketOf(c) + default: + return 0, errInvalidType + } +} + +// PacketSocketOf returns the socket descriptor of c. +func PacketSocketOf(c net.PacketConn) (uintptr, error) { + switch c.(type) { + case *net.UDPConn, *net.IPConn, *net.UnixConn: + return socketOf(c.(net.Conn)) + default: + return 0, errInvalidType + } +} diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_19.go b/vendor/golang.org/x/net/internal/netreflect/socket_19.go new file mode 100644 index 0000000..74df52e --- /dev/null +++ b/vendor/golang.org/x/net/internal/netreflect/socket_19.go @@ -0,0 +1,37 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package netreflect + +import ( + "errors" + "net" +) + +var ( + errInvalidType = errors.New("invalid type") + errOpNoSupport = errors.New("operation not supported") +) + +// SocketOf returns the socket descriptor of c. +func SocketOf(c net.Conn) (uintptr, error) { + switch c.(type) { + case *net.TCPConn, *net.UDPConn, *net.IPConn, *net.UnixConn: + return 0, errOpNoSupport + default: + return 0, errInvalidType + } +} + +// PacketSocketOf returns the socket descriptor of c. +func PacketSocketOf(c net.PacketConn) (uintptr, error) { + switch c.(type) { + case *net.UDPConn, *net.IPConn, *net.UnixConn: + return 0, errOpNoSupport + default: + return 0, errInvalidType + } +} diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_posix.go b/vendor/golang.org/x/net/internal/netreflect/socket_posix.go new file mode 100644 index 0000000..410c092 --- /dev/null +++ b/vendor/golang.org/x/net/internal/netreflect/socket_posix.go @@ -0,0 +1,31 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package netreflect + +import ( + "net" + "reflect" + "runtime" +) + +func socketOf(c net.Conn) (uintptr, error) { + v := reflect.ValueOf(c) + switch e := v.Elem(); e.Kind() { + case reflect.Struct: + fd := e.FieldByName("conn").FieldByName("fd") + switch e := fd.Elem(); e.Kind() { + case reflect.Struct: + sysfd := e.FieldByName("sysfd") + if runtime.GOOS == "windows" { + return uintptr(sysfd.Uint()), nil + } + return uintptr(sysfd.Int()), nil + } + } + return 0, errInvalidType +} diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_stub.go b/vendor/golang.org/x/net/internal/netreflect/socket_stub.go new file mode 100644 index 0000000..17b20c4 --- /dev/null +++ b/vendor/golang.org/x/net/internal/netreflect/socket_stub.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package netreflect + +import "net" + +func socketOf(c net.Conn) (uintptr, error) { return 0, errOpNoSupport } diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_test.go b/vendor/golang.org/x/net/internal/netreflect/socket_test.go new file mode 100644 index 0000000..b3aad0d --- /dev/null +++ b/vendor/golang.org/x/net/internal/netreflect/socket_test.go @@ -0,0 +1,65 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package netreflect_test + +import ( + "net" + "os" + "testing" + + "golang.org/x/net/internal/netreflect" + "golang.org/x/net/internal/nettest" +) + +func TestSocketOf(t *testing.T) { + for _, network := range []string{"tcp", "unix", "unixpacket"} { + if !nettest.TestableNetwork(network) { + continue + } + ln, err := nettest.NewLocalListener(network) + if err != nil { + t.Error(err) + continue + } + defer func() { + path := ln.Addr().String() + ln.Close() + if network == "unix" || network == "unixpacket" { + os.Remove(path) + } + }() + c, err := net.Dial(ln.Addr().Network(), ln.Addr().String()) + if err != nil { + t.Error(err) + continue + } + defer c.Close() + if _, err := netreflect.SocketOf(c); err != nil { + t.Error(err) + continue + } + } +} + +func TestPacketSocketOf(t *testing.T) { + for _, network := range []string{"udp", "unixgram"} { + if !nettest.TestableNetwork(network) { + continue + } + c, err := nettest.NewLocalPacketListener(network) + if err != nil { + t.Error(err) + continue + } + defer c.Close() + if _, err := netreflect.PacketSocketOf(c); err != nil { + t.Error(err) + continue + } + } +} diff --git a/vendor/golang.org/x/net/internal/nettest/helper_bsd.go b/vendor/golang.org/x/net/internal/nettest/helper_bsd.go new file mode 100644 index 0000000..a6e433b --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/helper_bsd.go @@ -0,0 +1,53 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package nettest + +import ( + "runtime" + "strconv" + "strings" + "syscall" +) + +var darwinVersion int + +func init() { + if runtime.GOOS == "darwin" { + // See http://support.apple.com/kb/HT1633. + s, err := syscall.Sysctl("kern.osrelease") + if err != nil { + return + } + ss := strings.Split(s, ".") + if len(ss) == 0 { + return + } + darwinVersion, _ = strconv.Atoi(ss[0]) + } +} + +func supportsIPv6MulticastDeliveryOnLoopback() bool { + switch runtime.GOOS { + case "freebsd": + // See http://www.freebsd.org/cgi/query-pr.cgi?pr=180065. + // Even after the fix, it looks like the latest + // kernels don't deliver link-local scoped multicast + // packets correctly. + return false + case "darwin": + return !causesIPv6Crash() + default: + return true + } +} + +func causesIPv6Crash() bool { + // We see some kernel crash when running IPv6 with IP-level + // options on Darwin kernel version 12 or below. + // See golang.org/issues/17015. + return darwinVersion < 13 +} diff --git a/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go b/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go new file mode 100644 index 0000000..bc7da5e --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux solaris + +package nettest + +func supportsIPv6MulticastDeliveryOnLoopback() bool { + return true +} + +func causesIPv6Crash() bool { + return false +} diff --git a/vendor/golang.org/x/net/internal/nettest/helper_posix.go b/vendor/golang.org/x/net/internal/nettest/helper_posix.go new file mode 100644 index 0000000..963ed99 --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/helper_posix.go @@ -0,0 +1,31 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package nettest + +import ( + "os" + "syscall" +) + +func protocolNotSupported(err error) bool { + switch err := err.(type) { + case syscall.Errno: + switch err { + case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT: + return true + } + case *os.SyscallError: + switch err := err.Err.(type) { + case syscall.Errno: + switch err { + case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT: + return true + } + } + } + return false +} diff --git a/vendor/golang.org/x/net/internal/nettest/helper_stub.go b/vendor/golang.org/x/net/internal/nettest/helper_stub.go new file mode 100644 index 0000000..ea61b6f --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/helper_stub.go @@ -0,0 +1,32 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package nettest + +import ( + "fmt" + "runtime" +) + +func maxOpenFiles() int { + return defaultMaxOpenFiles +} + +func supportsRawIPSocket() (string, bool) { + return fmt.Sprintf("not supported on %s", runtime.GOOS), false +} + +func supportsIPv6MulticastDeliveryOnLoopback() bool { + return false +} + +func causesIPv6Crash() bool { + return false +} + +func protocolNotSupported(err error) bool { + return false +} diff --git a/vendor/golang.org/x/net/internal/nettest/helper_unix.go b/vendor/golang.org/x/net/internal/nettest/helper_unix.go new file mode 100644 index 0000000..ed13e44 --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/helper_unix.go @@ -0,0 +1,29 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package nettest + +import ( + "fmt" + "os" + "runtime" + "syscall" +) + +func maxOpenFiles() int { + var rlim syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlim); err != nil { + return defaultMaxOpenFiles + } + return int(rlim.Cur) +} + +func supportsRawIPSocket() (string, bool) { + if os.Getuid() != 0 { + return fmt.Sprintf("must be root on %s", runtime.GOOS), false + } + return "", true +} diff --git a/vendor/golang.org/x/net/internal/nettest/helper_windows.go b/vendor/golang.org/x/net/internal/nettest/helper_windows.go new file mode 100644 index 0000000..3dcb727 --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/helper_windows.go @@ -0,0 +1,42 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package nettest + +import ( + "fmt" + "runtime" + "syscall" +) + +func maxOpenFiles() int { + return 4 * defaultMaxOpenFiles /* actually it's 16581375 */ +} + +func supportsRawIPSocket() (string, bool) { + // From http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548.aspx: + // Note: To use a socket of type SOCK_RAW requires administrative privileges. + // Users running Winsock applications that use raw sockets must be a member of + // the Administrators group on the local computer, otherwise raw socket calls + // will fail with an error code of WSAEACCES. On Windows Vista and later, access + // for raw sockets is enforced at socket creation. In earlier versions of Windows, + // access for raw sockets is enforced during other socket operations. + s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, 0) + if err == syscall.WSAEACCES { + return fmt.Sprintf("no access to raw socket allowed on %s", runtime.GOOS), false + } + if err != nil { + return err.Error(), false + } + syscall.Closesocket(s) + return "", true +} + +func supportsIPv6MulticastDeliveryOnLoopback() bool { + return true +} + +func causesIPv6Crash() bool { + return false +} diff --git a/vendor/golang.org/x/net/internal/nettest/interface.go b/vendor/golang.org/x/net/internal/nettest/interface.go new file mode 100644 index 0000000..8e6333a --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/interface.go @@ -0,0 +1,94 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package nettest + +import "net" + +// IsMulticastCapable reports whether ifi is an IP multicast-capable +// network interface. Network must be "ip", "ip4" or "ip6". +func IsMulticastCapable(network string, ifi *net.Interface) (net.IP, bool) { + switch network { + case "ip", "ip4", "ip6": + default: + return nil, false + } + if ifi == nil || ifi.Flags&net.FlagUp == 0 || ifi.Flags&net.FlagMulticast == 0 { + return nil, false + } + return hasRoutableIP(network, ifi) +} + +// RoutedInterface returns a network interface that can route IP +// traffic and satisfies flags. It returns nil when an appropriate +// network interface is not found. Network must be "ip", "ip4" or +// "ip6". +func RoutedInterface(network string, flags net.Flags) *net.Interface { + switch network { + case "ip", "ip4", "ip6": + default: + return nil + } + ift, err := net.Interfaces() + if err != nil { + return nil + } + for _, ifi := range ift { + if ifi.Flags&flags != flags { + continue + } + if _, ok := hasRoutableIP(network, &ifi); !ok { + continue + } + return &ifi + } + return nil +} + +func hasRoutableIP(network string, ifi *net.Interface) (net.IP, bool) { + ifat, err := ifi.Addrs() + if err != nil { + return nil, false + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip := routableIP(network, ifa.IP); ip != nil { + return ip, true + } + case *net.IPNet: + if ip := routableIP(network, ifa.IP); ip != nil { + return ip, true + } + } + } + return nil, false +} + +func routableIP(network string, ip net.IP) net.IP { + if !ip.IsLoopback() && !ip.IsLinkLocalUnicast() && !ip.IsGlobalUnicast() { + return nil + } + switch network { + case "ip4": + if ip := ip.To4(); ip != nil { + return ip + } + case "ip6": + if ip.IsLoopback() { // addressing scope of the loopback address depends on each implementation + return nil + } + if ip := ip.To16(); ip != nil && ip.To4() == nil { + return ip + } + default: + if ip := ip.To4(); ip != nil { + return ip + } + if ip := ip.To16(); ip != nil { + return ip + } + } + return nil +} diff --git a/vendor/golang.org/x/net/internal/nettest/rlimit.go b/vendor/golang.org/x/net/internal/nettest/rlimit.go new file mode 100644 index 0000000..bb34aec --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/rlimit.go @@ -0,0 +1,11 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package nettest + +const defaultMaxOpenFiles = 256 + +// MaxOpenFiles returns the maximum number of open files for the +// caller's process. +func MaxOpenFiles() int { return maxOpenFiles() } diff --git a/vendor/golang.org/x/net/internal/nettest/stack.go b/vendor/golang.org/x/net/internal/nettest/stack.go new file mode 100644 index 0000000..cc92c03 --- /dev/null +++ b/vendor/golang.org/x/net/internal/nettest/stack.go @@ -0,0 +1,147 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package nettest provides utilities for network testing. +package nettest // import "golang.org/x/net/internal/nettest" + +import ( + "fmt" + "io/ioutil" + "net" + "os" + "runtime" +) + +var ( + supportsIPv4 bool + supportsIPv6 bool +) + +func init() { + if ln, err := net.Listen("tcp4", "127.0.0.1:0"); err == nil { + ln.Close() + supportsIPv4 = true + } + if ln, err := net.Listen("tcp6", "[::1]:0"); err == nil { + ln.Close() + supportsIPv6 = true + } +} + +// SupportsIPv4 reports whether the platform supports IPv4 networking +// functionality. +func SupportsIPv4() bool { return supportsIPv4 } + +// SupportsIPv6 reports whether the platform supports IPv6 networking +// functionality. +func SupportsIPv6() bool { return supportsIPv6 } + +// SupportsRawIPSocket reports whether the platform supports raw IP +// sockets. +func SupportsRawIPSocket() (string, bool) { + return supportsRawIPSocket() +} + +// SupportsIPv6MulticastDeliveryOnLoopback reports whether the +// platform supports IPv6 multicast packet delivery on software +// loopback interface. +func SupportsIPv6MulticastDeliveryOnLoopback() bool { + return supportsIPv6MulticastDeliveryOnLoopback() +} + +// ProtocolNotSupported reports whether err is a protocol not +// supported error. +func ProtocolNotSupported(err error) bool { + return protocolNotSupported(err) +} + +// TestableNetwork reports whether network is testable on the current +// platform configuration. +func TestableNetwork(network string) bool { + // This is based on logic from standard library's + // net/platform_test.go. + switch network { + case "unix", "unixgram": + switch runtime.GOOS { + case "android", "nacl", "plan9", "windows": + return false + } + if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { + return false + } + case "unixpacket": + switch runtime.GOOS { + case "android", "darwin", "freebsd", "nacl", "plan9", "windows": + return false + } + } + return true +} + +// NewLocalListener returns a listener which listens to a loopback IP +// address or local file system path. +// Network must be "tcp", "tcp4", "tcp6", "unix" or "unixpacket". +func NewLocalListener(network string) (net.Listener, error) { + switch network { + case "tcp": + if supportsIPv4 { + if ln, err := net.Listen("tcp4", "127.0.0.1:0"); err == nil { + return ln, nil + } + } + if supportsIPv6 { + return net.Listen("tcp6", "[::1]:0") + } + case "tcp4": + if supportsIPv4 { + return net.Listen("tcp4", "127.0.0.1:0") + } + case "tcp6": + if supportsIPv6 { + return net.Listen("tcp6", "[::1]:0") + } + case "unix", "unixpacket": + return net.Listen(network, localPath()) + } + return nil, fmt.Errorf("%s is not supported", network) +} + +// NewLocalPacketListener returns a packet listener which listens to a +// loopback IP address or local file system path. +// Network must be "udp", "udp4", "udp6" or "unixgram". +func NewLocalPacketListener(network string) (net.PacketConn, error) { + switch network { + case "udp": + if supportsIPv4 { + if c, err := net.ListenPacket("udp4", "127.0.0.1:0"); err == nil { + return c, nil + } + } + if supportsIPv6 { + return net.ListenPacket("udp6", "[::1]:0") + } + case "udp4": + if supportsIPv4 { + return net.ListenPacket("udp4", "127.0.0.1:0") + } + case "udp6": + if supportsIPv6 { + return net.ListenPacket("udp6", "[::1]:0") + } + case "unixgram": + return net.ListenPacket(network, localPath()) + } + return nil, fmt.Errorf("%s is not supported", network) +} + +func localPath() string { + f, err := ioutil.TempFile("", "nettest") + if err != nil { + panic(err) + } + path := f.Name() + f.Close() + os.Remove(path) + return path +} diff --git a/vendor/golang.org/x/net/internal/timeseries/timeseries.go b/vendor/golang.org/x/net/internal/timeseries/timeseries.go new file mode 100644 index 0000000..685f0e7 --- /dev/null +++ b/vendor/golang.org/x/net/internal/timeseries/timeseries.go @@ -0,0 +1,525 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package timeseries implements a time series structure for stats collection. +package timeseries // import "golang.org/x/net/internal/timeseries" + +import ( + "fmt" + "log" + "time" +) + +const ( + timeSeriesNumBuckets = 64 + minuteHourSeriesNumBuckets = 60 +) + +var timeSeriesResolutions = []time.Duration{ + 1 * time.Second, + 10 * time.Second, + 1 * time.Minute, + 10 * time.Minute, + 1 * time.Hour, + 6 * time.Hour, + 24 * time.Hour, // 1 day + 7 * 24 * time.Hour, // 1 week + 4 * 7 * 24 * time.Hour, // 4 weeks + 16 * 7 * 24 * time.Hour, // 16 weeks +} + +var minuteHourSeriesResolutions = []time.Duration{ + 1 * time.Second, + 1 * time.Minute, +} + +// An Observable is a kind of data that can be aggregated in a time series. +type Observable interface { + Multiply(ratio float64) // Multiplies the data in self by a given ratio + Add(other Observable) // Adds the data from a different observation to self + Clear() // Clears the observation so it can be reused. + CopyFrom(other Observable) // Copies the contents of a given observation to self +} + +// Float attaches the methods of Observable to a float64. +type Float float64 + +// NewFloat returns a Float. +func NewFloat() Observable { + f := Float(0) + return &f +} + +// String returns the float as a string. +func (f *Float) String() string { return fmt.Sprintf("%g", f.Value()) } + +// Value returns the float's value. +func (f *Float) Value() float64 { return float64(*f) } + +func (f *Float) Multiply(ratio float64) { *f *= Float(ratio) } + +func (f *Float) Add(other Observable) { + o := other.(*Float) + *f += *o +} + +func (f *Float) Clear() { *f = 0 } + +func (f *Float) CopyFrom(other Observable) { + o := other.(*Float) + *f = *o +} + +// A Clock tells the current time. +type Clock interface { + Time() time.Time +} + +type defaultClock int + +var defaultClockInstance defaultClock + +func (defaultClock) Time() time.Time { return time.Now() } + +// Information kept per level. Each level consists of a circular list of +// observations. The start of the level may be derived from end and the +// len(buckets) * sizeInMillis. +type tsLevel struct { + oldest int // index to oldest bucketed Observable + newest int // index to newest bucketed Observable + end time.Time // end timestamp for this level + size time.Duration // duration of the bucketed Observable + buckets []Observable // collections of observations + provider func() Observable // used for creating new Observable +} + +func (l *tsLevel) Clear() { + l.oldest = 0 + l.newest = len(l.buckets) - 1 + l.end = time.Time{} + for i := range l.buckets { + if l.buckets[i] != nil { + l.buckets[i].Clear() + l.buckets[i] = nil + } + } +} + +func (l *tsLevel) InitLevel(size time.Duration, numBuckets int, f func() Observable) { + l.size = size + l.provider = f + l.buckets = make([]Observable, numBuckets) +} + +// Keeps a sequence of levels. Each level is responsible for storing data at +// a given resolution. For example, the first level stores data at a one +// minute resolution while the second level stores data at a one hour +// resolution. + +// Each level is represented by a sequence of buckets. Each bucket spans an +// interval equal to the resolution of the level. New observations are added +// to the last bucket. +type timeSeries struct { + provider func() Observable // make more Observable + numBuckets int // number of buckets in each level + levels []*tsLevel // levels of bucketed Observable + lastAdd time.Time // time of last Observable tracked + total Observable // convenient aggregation of all Observable + clock Clock // Clock for getting current time + pending Observable // observations not yet bucketed + pendingTime time.Time // what time are we keeping in pending + dirty bool // if there are pending observations +} + +// init initializes a level according to the supplied criteria. +func (ts *timeSeries) init(resolutions []time.Duration, f func() Observable, numBuckets int, clock Clock) { + ts.provider = f + ts.numBuckets = numBuckets + ts.clock = clock + ts.levels = make([]*tsLevel, len(resolutions)) + + for i := range resolutions { + if i > 0 && resolutions[i-1] >= resolutions[i] { + log.Print("timeseries: resolutions must be monotonically increasing") + break + } + newLevel := new(tsLevel) + newLevel.InitLevel(resolutions[i], ts.numBuckets, ts.provider) + ts.levels[i] = newLevel + } + + ts.Clear() +} + +// Clear removes all observations from the time series. +func (ts *timeSeries) Clear() { + ts.lastAdd = time.Time{} + ts.total = ts.resetObservation(ts.total) + ts.pending = ts.resetObservation(ts.pending) + ts.pendingTime = time.Time{} + ts.dirty = false + + for i := range ts.levels { + ts.levels[i].Clear() + } +} + +// Add records an observation at the current time. +func (ts *timeSeries) Add(observation Observable) { + ts.AddWithTime(observation, ts.clock.Time()) +} + +// AddWithTime records an observation at the specified time. +func (ts *timeSeries) AddWithTime(observation Observable, t time.Time) { + + smallBucketDuration := ts.levels[0].size + + if t.After(ts.lastAdd) { + ts.lastAdd = t + } + + if t.After(ts.pendingTime) { + ts.advance(t) + ts.mergePendingUpdates() + ts.pendingTime = ts.levels[0].end + ts.pending.CopyFrom(observation) + ts.dirty = true + } else if t.After(ts.pendingTime.Add(-1 * smallBucketDuration)) { + // The observation is close enough to go into the pending bucket. + // This compensates for clock skewing and small scheduling delays + // by letting the update stay in the fast path. + ts.pending.Add(observation) + ts.dirty = true + } else { + ts.mergeValue(observation, t) + } +} + +// mergeValue inserts the observation at the specified time in the past into all levels. +func (ts *timeSeries) mergeValue(observation Observable, t time.Time) { + for _, level := range ts.levels { + index := (ts.numBuckets - 1) - int(level.end.Sub(t)/level.size) + if 0 <= index && index < ts.numBuckets { + bucketNumber := (level.oldest + index) % ts.numBuckets + if level.buckets[bucketNumber] == nil { + level.buckets[bucketNumber] = level.provider() + } + level.buckets[bucketNumber].Add(observation) + } + } + ts.total.Add(observation) +} + +// mergePendingUpdates applies the pending updates into all levels. +func (ts *timeSeries) mergePendingUpdates() { + if ts.dirty { + ts.mergeValue(ts.pending, ts.pendingTime) + ts.pending = ts.resetObservation(ts.pending) + ts.dirty = false + } +} + +// advance cycles the buckets at each level until the latest bucket in +// each level can hold the time specified. +func (ts *timeSeries) advance(t time.Time) { + if !t.After(ts.levels[0].end) { + return + } + for i := 0; i < len(ts.levels); i++ { + level := ts.levels[i] + if !level.end.Before(t) { + break + } + + // If the time is sufficiently far, just clear the level and advance + // directly. + if !t.Before(level.end.Add(level.size * time.Duration(ts.numBuckets))) { + for _, b := range level.buckets { + ts.resetObservation(b) + } + level.end = time.Unix(0, (t.UnixNano()/level.size.Nanoseconds())*level.size.Nanoseconds()) + } + + for t.After(level.end) { + level.end = level.end.Add(level.size) + level.newest = level.oldest + level.oldest = (level.oldest + 1) % ts.numBuckets + ts.resetObservation(level.buckets[level.newest]) + } + + t = level.end + } +} + +// Latest returns the sum of the num latest buckets from the level. +func (ts *timeSeries) Latest(level, num int) Observable { + now := ts.clock.Time() + if ts.levels[0].end.Before(now) { + ts.advance(now) + } + + ts.mergePendingUpdates() + + result := ts.provider() + l := ts.levels[level] + index := l.newest + + for i := 0; i < num; i++ { + if l.buckets[index] != nil { + result.Add(l.buckets[index]) + } + if index == 0 { + index = ts.numBuckets + } + index-- + } + + return result +} + +// LatestBuckets returns a copy of the num latest buckets from level. +func (ts *timeSeries) LatestBuckets(level, num int) []Observable { + if level < 0 || level > len(ts.levels) { + log.Print("timeseries: bad level argument: ", level) + return nil + } + if num < 0 || num >= ts.numBuckets { + log.Print("timeseries: bad num argument: ", num) + return nil + } + + results := make([]Observable, num) + now := ts.clock.Time() + if ts.levels[0].end.Before(now) { + ts.advance(now) + } + + ts.mergePendingUpdates() + + l := ts.levels[level] + index := l.newest + + for i := 0; i < num; i++ { + result := ts.provider() + results[i] = result + if l.buckets[index] != nil { + result.CopyFrom(l.buckets[index]) + } + + if index == 0 { + index = ts.numBuckets + } + index -= 1 + } + return results +} + +// ScaleBy updates observations by scaling by factor. +func (ts *timeSeries) ScaleBy(factor float64) { + for _, l := range ts.levels { + for i := 0; i < ts.numBuckets; i++ { + l.buckets[i].Multiply(factor) + } + } + + ts.total.Multiply(factor) + ts.pending.Multiply(factor) +} + +// Range returns the sum of observations added over the specified time range. +// If start or finish times don't fall on bucket boundaries of the same +// level, then return values are approximate answers. +func (ts *timeSeries) Range(start, finish time.Time) Observable { + return ts.ComputeRange(start, finish, 1)[0] +} + +// Recent returns the sum of observations from the last delta. +func (ts *timeSeries) Recent(delta time.Duration) Observable { + now := ts.clock.Time() + return ts.Range(now.Add(-delta), now) +} + +// Total returns the total of all observations. +func (ts *timeSeries) Total() Observable { + ts.mergePendingUpdates() + return ts.total +} + +// ComputeRange computes a specified number of values into a slice using +// the observations recorded over the specified time period. The return +// values are approximate if the start or finish times don't fall on the +// bucket boundaries at the same level or if the number of buckets spanning +// the range is not an integral multiple of num. +func (ts *timeSeries) ComputeRange(start, finish time.Time, num int) []Observable { + if start.After(finish) { + log.Printf("timeseries: start > finish, %v>%v", start, finish) + return nil + } + + if num < 0 { + log.Printf("timeseries: num < 0, %v", num) + return nil + } + + results := make([]Observable, num) + + for _, l := range ts.levels { + if !start.Before(l.end.Add(-l.size * time.Duration(ts.numBuckets))) { + ts.extract(l, start, finish, num, results) + return results + } + } + + // Failed to find a level that covers the desired range. So just + // extract from the last level, even if it doesn't cover the entire + // desired range. + ts.extract(ts.levels[len(ts.levels)-1], start, finish, num, results) + + return results +} + +// RecentList returns the specified number of values in slice over the most +// recent time period of the specified range. +func (ts *timeSeries) RecentList(delta time.Duration, num int) []Observable { + if delta < 0 { + return nil + } + now := ts.clock.Time() + return ts.ComputeRange(now.Add(-delta), now, num) +} + +// extract returns a slice of specified number of observations from a given +// level over a given range. +func (ts *timeSeries) extract(l *tsLevel, start, finish time.Time, num int, results []Observable) { + ts.mergePendingUpdates() + + srcInterval := l.size + dstInterval := finish.Sub(start) / time.Duration(num) + dstStart := start + srcStart := l.end.Add(-srcInterval * time.Duration(ts.numBuckets)) + + srcIndex := 0 + + // Where should scanning start? + if dstStart.After(srcStart) { + advance := dstStart.Sub(srcStart) / srcInterval + srcIndex += int(advance) + srcStart = srcStart.Add(advance * srcInterval) + } + + // The i'th value is computed as show below. + // interval = (finish/start)/num + // i'th value = sum of observation in range + // [ start + i * interval, + // start + (i + 1) * interval ) + for i := 0; i < num; i++ { + results[i] = ts.resetObservation(results[i]) + dstEnd := dstStart.Add(dstInterval) + for srcIndex < ts.numBuckets && srcStart.Before(dstEnd) { + srcEnd := srcStart.Add(srcInterval) + if srcEnd.After(ts.lastAdd) { + srcEnd = ts.lastAdd + } + + if !srcEnd.Before(dstStart) { + srcValue := l.buckets[(srcIndex+l.oldest)%ts.numBuckets] + if !srcStart.Before(dstStart) && !srcEnd.After(dstEnd) { + // dst completely contains src. + if srcValue != nil { + results[i].Add(srcValue) + } + } else { + // dst partially overlaps src. + overlapStart := maxTime(srcStart, dstStart) + overlapEnd := minTime(srcEnd, dstEnd) + base := srcEnd.Sub(srcStart) + fraction := overlapEnd.Sub(overlapStart).Seconds() / base.Seconds() + + used := ts.provider() + if srcValue != nil { + used.CopyFrom(srcValue) + } + used.Multiply(fraction) + results[i].Add(used) + } + + if srcEnd.After(dstEnd) { + break + } + } + srcIndex++ + srcStart = srcStart.Add(srcInterval) + } + dstStart = dstStart.Add(dstInterval) + } +} + +// resetObservation clears the content so the struct may be reused. +func (ts *timeSeries) resetObservation(observation Observable) Observable { + if observation == nil { + observation = ts.provider() + } else { + observation.Clear() + } + return observation +} + +// TimeSeries tracks data at granularities from 1 second to 16 weeks. +type TimeSeries struct { + timeSeries +} + +// NewTimeSeries creates a new TimeSeries using the function provided for creating new Observable. +func NewTimeSeries(f func() Observable) *TimeSeries { + return NewTimeSeriesWithClock(f, defaultClockInstance) +} + +// NewTimeSeriesWithClock creates a new TimeSeries using the function provided for creating new Observable and the clock for +// assigning timestamps. +func NewTimeSeriesWithClock(f func() Observable, clock Clock) *TimeSeries { + ts := new(TimeSeries) + ts.timeSeries.init(timeSeriesResolutions, f, timeSeriesNumBuckets, clock) + return ts +} + +// MinuteHourSeries tracks data at granularities of 1 minute and 1 hour. +type MinuteHourSeries struct { + timeSeries +} + +// NewMinuteHourSeries creates a new MinuteHourSeries using the function provided for creating new Observable. +func NewMinuteHourSeries(f func() Observable) *MinuteHourSeries { + return NewMinuteHourSeriesWithClock(f, defaultClockInstance) +} + +// NewMinuteHourSeriesWithClock creates a new MinuteHourSeries using the function provided for creating new Observable and the clock for +// assigning timestamps. +func NewMinuteHourSeriesWithClock(f func() Observable, clock Clock) *MinuteHourSeries { + ts := new(MinuteHourSeries) + ts.timeSeries.init(minuteHourSeriesResolutions, f, + minuteHourSeriesNumBuckets, clock) + return ts +} + +func (ts *MinuteHourSeries) Minute() Observable { + return ts.timeSeries.Latest(0, 60) +} + +func (ts *MinuteHourSeries) Hour() Observable { + return ts.timeSeries.Latest(1, 60) +} + +func minTime(a, b time.Time) time.Time { + if a.Before(b) { + return a + } + return b +} + +func maxTime(a, b time.Time) time.Time { + if a.After(b) { + return a + } + return b +} diff --git a/vendor/golang.org/x/net/internal/timeseries/timeseries_test.go b/vendor/golang.org/x/net/internal/timeseries/timeseries_test.go new file mode 100644 index 0000000..66325a9 --- /dev/null +++ b/vendor/golang.org/x/net/internal/timeseries/timeseries_test.go @@ -0,0 +1,170 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package timeseries + +import ( + "math" + "testing" + "time" +) + +func isNear(x *Float, y float64, tolerance float64) bool { + return math.Abs(x.Value()-y) < tolerance +} + +func isApproximate(x *Float, y float64) bool { + return isNear(x, y, 1e-2) +} + +func checkApproximate(t *testing.T, o Observable, y float64) { + x := o.(*Float) + if !isApproximate(x, y) { + t.Errorf("Wanted %g, got %g", y, x.Value()) + } +} + +func checkNear(t *testing.T, o Observable, y, tolerance float64) { + x := o.(*Float) + if !isNear(x, y, tolerance) { + t.Errorf("Wanted %g +- %g, got %g", y, tolerance, x.Value()) + } +} + +var baseTime = time.Date(2013, 1, 1, 0, 0, 0, 0, time.UTC) + +func tu(s int64) time.Time { + return baseTime.Add(time.Duration(s) * time.Second) +} + +func tu2(s int64, ns int64) time.Time { + return baseTime.Add(time.Duration(s)*time.Second + time.Duration(ns)*time.Nanosecond) +} + +func TestBasicTimeSeries(t *testing.T) { + ts := NewTimeSeries(NewFloat) + fo := new(Float) + *fo = Float(10) + ts.AddWithTime(fo, tu(1)) + ts.AddWithTime(fo, tu(1)) + ts.AddWithTime(fo, tu(1)) + ts.AddWithTime(fo, tu(1)) + checkApproximate(t, ts.Range(tu(0), tu(1)), 40) + checkApproximate(t, ts.Total(), 40) + ts.AddWithTime(fo, tu(3)) + ts.AddWithTime(fo, tu(3)) + ts.AddWithTime(fo, tu(3)) + checkApproximate(t, ts.Range(tu(0), tu(2)), 40) + checkApproximate(t, ts.Range(tu(2), tu(4)), 30) + checkApproximate(t, ts.Total(), 70) + ts.AddWithTime(fo, tu(1)) + ts.AddWithTime(fo, tu(1)) + checkApproximate(t, ts.Range(tu(0), tu(2)), 60) + checkApproximate(t, ts.Range(tu(2), tu(4)), 30) + checkApproximate(t, ts.Total(), 90) + *fo = Float(100) + ts.AddWithTime(fo, tu(100)) + checkApproximate(t, ts.Range(tu(99), tu(100)), 100) + checkApproximate(t, ts.Range(tu(0), tu(4)), 36) + checkApproximate(t, ts.Total(), 190) + *fo = Float(10) + ts.AddWithTime(fo, tu(1)) + ts.AddWithTime(fo, tu(1)) + checkApproximate(t, ts.Range(tu(0), tu(4)), 44) + checkApproximate(t, ts.Range(tu(37), tu2(100, 100e6)), 100) + checkApproximate(t, ts.Range(tu(50), tu2(100, 100e6)), 100) + checkApproximate(t, ts.Range(tu(99), tu2(100, 100e6)), 100) + checkApproximate(t, ts.Total(), 210) + + for i, l := range ts.ComputeRange(tu(36), tu(100), 64) { + if i == 63 { + checkApproximate(t, l, 100) + } else { + checkApproximate(t, l, 0) + } + } + + checkApproximate(t, ts.Range(tu(0), tu(100)), 210) + checkApproximate(t, ts.Range(tu(10), tu(100)), 100) + + for i, l := range ts.ComputeRange(tu(0), tu(100), 100) { + if i < 10 { + checkApproximate(t, l, 11) + } else if i >= 90 { + checkApproximate(t, l, 10) + } else { + checkApproximate(t, l, 0) + } + } +} + +func TestFloat(t *testing.T) { + f := Float(1) + if g, w := f.String(), "1"; g != w { + t.Errorf("Float(1).String = %q; want %q", g, w) + } + f2 := Float(2) + var o Observable = &f2 + f.Add(o) + if g, w := f.Value(), 3.0; g != w { + t.Errorf("Float post-add = %v; want %v", g, w) + } + f.Multiply(2) + if g, w := f.Value(), 6.0; g != w { + t.Errorf("Float post-multiply = %v; want %v", g, w) + } + f.Clear() + if g, w := f.Value(), 0.0; g != w { + t.Errorf("Float post-clear = %v; want %v", g, w) + } + f.CopyFrom(&f2) + if g, w := f.Value(), 2.0; g != w { + t.Errorf("Float post-CopyFrom = %v; want %v", g, w) + } +} + +type mockClock struct { + time time.Time +} + +func (m *mockClock) Time() time.Time { return m.time } +func (m *mockClock) Set(t time.Time) { m.time = t } + +const buckets = 6 + +var testResolutions = []time.Duration{ + 10 * time.Second, // level holds one minute of observations + 100 * time.Second, // level holds ten minutes of observations + 10 * time.Minute, // level holds one hour of observations +} + +// TestTimeSeries uses a small number of buckets to force a higher +// error rate on approximations from the timeseries. +type TestTimeSeries struct { + timeSeries +} + +func TestExpectedErrorRate(t *testing.T) { + ts := new(TestTimeSeries) + fake := new(mockClock) + fake.Set(time.Now()) + ts.timeSeries.init(testResolutions, NewFloat, buckets, fake) + for i := 1; i <= 61*61; i++ { + fake.Set(fake.Time().Add(1 * time.Second)) + ob := Float(1) + ts.AddWithTime(&ob, fake.Time()) + + // The results should be accurate within one missing bucket (1/6) of the observations recorded. + checkNear(t, ts.Latest(0, buckets), min(float64(i), 60), 10) + checkNear(t, ts.Latest(1, buckets), min(float64(i), 600), 100) + checkNear(t, ts.Latest(2, buckets), min(float64(i), 3600), 600) + } +} + +func min(a, b float64) float64 { + if a < b { + return a + } + return b +} diff --git a/vendor/golang.org/x/net/ipv4/bpf_test.go b/vendor/golang.org/x/net/ipv4/bpf_test.go new file mode 100644 index 0000000..b44da90 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/bpf_test.go @@ -0,0 +1,93 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "net" + "runtime" + "testing" + "time" + + "golang.org/x/net/bpf" + "golang.org/x/net/ipv4" +) + +func TestBPF(t *testing.T) { + if runtime.GOOS != "linux" { + t.Skipf("not supported on %s", runtime.GOOS) + } + + l, err := net.ListenPacket("udp4", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer l.Close() + + p := ipv4.NewPacketConn(l) + + // This filter accepts UDP packets whose first payload byte is + // even. + prog, err := bpf.Assemble([]bpf.Instruction{ + // Load the first byte of the payload (skipping UDP header). + bpf.LoadAbsolute{Off: 8, Size: 1}, + // Select LSB of the byte. + bpf.ALUOpConstant{Op: bpf.ALUOpAnd, Val: 1}, + // Byte is even? + bpf.JumpIf{Cond: bpf.JumpEqual, Val: 0, SkipFalse: 1}, + // Accept. + bpf.RetConstant{Val: 4096}, + // Ignore. + bpf.RetConstant{Val: 0}, + }) + if err != nil { + t.Fatalf("compiling BPF: %s", err) + } + + if err = p.SetBPF(prog); err != nil { + t.Fatalf("attaching filter to Conn: %s", err) + } + + s, err := net.Dial("udp4", l.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + defer s.Close() + go func() { + for i := byte(0); i < 10; i++ { + s.Write([]byte{i}) + } + }() + + l.SetDeadline(time.Now().Add(2 * time.Second)) + seen := make([]bool, 5) + for { + var b [512]byte + n, _, err := l.ReadFrom(b[:]) + if err != nil { + t.Fatalf("reading from listener: %s", err) + } + if n != 1 { + t.Fatalf("unexpected packet length, want 1, got %d", n) + } + if b[0] >= 10 { + t.Fatalf("unexpected byte, want 0-9, got %d", b[0]) + } + if b[0]%2 != 0 { + t.Fatalf("got odd byte %d, wanted only even bytes", b[0]) + } + seen[b[0]/2] = true + + seenAll := true + for _, v := range seen { + if !v { + seenAll = false + break + } + } + if seenAll { + break + } + } +} diff --git a/vendor/golang.org/x/net/ipv4/bpfopt_linux.go b/vendor/golang.org/x/net/ipv4/bpfopt_linux.go new file mode 100644 index 0000000..2d626d9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/bpfopt_linux.go @@ -0,0 +1,28 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "os" + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/netreflect" +) + +// SetBPF attaches a BPF program to the connection. +// +// Only supported on Linux. +func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error { + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + prog := sockFProg{ + Len: uint16(len(filter)), + Filter: (*sockFilter)(unsafe.Pointer(&filter[0])), + } + return os.NewSyscallError("setsockopt", setsockopt(s, sysSOL_SOCKET, sysSO_ATTACH_FILTER, unsafe.Pointer(&prog), uint32(unsafe.Sizeof(prog)))) +} diff --git a/vendor/golang.org/x/net/ipv4/bpfopt_stub.go b/vendor/golang.org/x/net/ipv4/bpfopt_stub.go new file mode 100644 index 0000000..c4a8481 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/bpfopt_stub.go @@ -0,0 +1,16 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !linux + +package ipv4 + +import "golang.org/x/net/bpf" + +// SetBPF attaches a BPF program to the connection. +// +// Only supported on Linux. +func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv4/control.go b/vendor/golang.org/x/net/ipv4/control.go new file mode 100644 index 0000000..da4da2d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control.go @@ -0,0 +1,70 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "fmt" + "net" + "sync" +) + +type rawOpt struct { + sync.RWMutex + cflags ControlFlags +} + +func (c *rawOpt) set(f ControlFlags) { c.cflags |= f } +func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f } +func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 } + +type ControlFlags uint + +const ( + FlagTTL ControlFlags = 1 << iota // pass the TTL on the received packet + FlagSrc // pass the source address on the received packet + FlagDst // pass the destination address on the received packet + FlagInterface // pass the interface index on the received packet +) + +// A ControlMessage represents per packet basis IP-level socket options. +type ControlMessage struct { + // Receiving socket options: SetControlMessage allows to + // receive the options from the protocol stack using ReadFrom + // method of PacketConn or RawConn. + // + // Specifying socket options: ControlMessage for WriteTo + // method of PacketConn or RawConn allows to send the options + // to the protocol stack. + // + TTL int // time-to-live, receiving only + Src net.IP // source address, specifying only + Dst net.IP // destination address, receiving only + IfIndex int // interface index, must be 1 <= value when specifying +} + +func (cm *ControlMessage) String() string { + if cm == nil { + return "" + } + return fmt.Sprintf("ttl=%d src=%v dst=%v ifindex=%d", cm.TTL, cm.Src, cm.Dst, cm.IfIndex) +} + +// Ancillary data socket options +const ( + ctlTTL = iota // header field + ctlSrc // header field + ctlDst // header field + ctlInterface // inbound or outbound interface + ctlPacketInfo // inbound or outbound packet path + ctlMax +) + +// A ctlOpt represents a binding for ancillary data socket option. +type ctlOpt struct { + name int // option name, must be equal or greater than 1 + length int // option length + marshal func([]byte, *ControlMessage) []byte + parse func(*ControlMessage, []byte) +} diff --git a/vendor/golang.org/x/net/ipv4/control_bsd.go b/vendor/golang.org/x/net/ipv4/control_bsd.go new file mode 100644 index 0000000..3f27f99 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_bsd.go @@ -0,0 +1,40 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +func marshalDst(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIP + m.Type = sysIP_RECVDSTADDR + m.SetLen(syscall.CmsgLen(net.IPv4len)) + return b[syscall.CmsgSpace(net.IPv4len):] +} + +func parseDst(cm *ControlMessage, b []byte) { + cm.Dst = b[:net.IPv4len] +} + +func marshalInterface(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIP + m.Type = sysIP_RECVIF + m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrDatalink)) + return b[syscall.CmsgSpace(syscall.SizeofSockaddrDatalink):] +} + +func parseInterface(cm *ControlMessage, b []byte) { + sadl := (*syscall.SockaddrDatalink)(unsafe.Pointer(&b[0])) + cm.IfIndex = int(sadl.Index) +} diff --git a/vendor/golang.org/x/net/ipv4/control_pktinfo.go b/vendor/golang.org/x/net/ipv4/control_pktinfo.go new file mode 100644 index 0000000..9ed9773 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_pktinfo.go @@ -0,0 +1,37 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin linux solaris + +package ipv4 + +import ( + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIP + m.Type = sysIP_PKTINFO + m.SetLen(syscall.CmsgLen(sizeofInetPktinfo)) + if cm != nil { + pi := (*inetPktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + if ip := cm.Src.To4(); ip != nil { + copy(pi.Spec_dst[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return b[syscall.CmsgSpace(sizeofInetPktinfo):] +} + +func parsePacketInfo(cm *ControlMessage, b []byte) { + pi := (*inetPktinfo)(unsafe.Pointer(&b[0])) + cm.IfIndex = int(pi.Ifindex) + cm.Dst = pi.Addr[:] +} diff --git a/vendor/golang.org/x/net/ipv4/control_stub.go b/vendor/golang.org/x/net/ipv4/control_stub.go new file mode 100644 index 0000000..27e618b --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_stub.go @@ -0,0 +1,23 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv4 + +func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error { + return errOpNoSupport +} + +func newControlMessage(opt *rawOpt) []byte { + return nil +} + +func parseControlMessage(b []byte) (*ControlMessage, error) { + return nil, errOpNoSupport +} + +func marshalControlMessage(cm *ControlMessage) []byte { + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/control_unix.go b/vendor/golang.org/x/net/ipv4/control_unix.go new file mode 100644 index 0000000..25ef661 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_unix.go @@ -0,0 +1,148 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package ipv4 + +import ( + "os" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error { + opt.Lock() + defer opt.Unlock() + if cf&FlagTTL != 0 && sockOpts[ssoReceiveTTL].name > 0 { + if err := setInt(s, &sockOpts[ssoReceiveTTL], boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagTTL) + } else { + opt.clear(FlagTTL) + } + } + if sockOpts[ssoPacketInfo].name > 0 { + if cf&(FlagSrc|FlagDst|FlagInterface) != 0 { + if err := setInt(s, &sockOpts[ssoPacketInfo], boolint(on)); err != nil { + return err + } + if on { + opt.set(cf & (FlagSrc | FlagDst | FlagInterface)) + } else { + opt.clear(cf & (FlagSrc | FlagDst | FlagInterface)) + } + } + } else { + if cf&FlagDst != 0 && sockOpts[ssoReceiveDst].name > 0 { + if err := setInt(s, &sockOpts[ssoReceiveDst], boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagDst) + } else { + opt.clear(FlagDst) + } + } + if cf&FlagInterface != 0 && sockOpts[ssoReceiveInterface].name > 0 { + if err := setInt(s, &sockOpts[ssoReceiveInterface], boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagInterface) + } else { + opt.clear(FlagInterface) + } + } + } + return nil +} + +func newControlMessage(opt *rawOpt) (oob []byte) { + opt.RLock() + var l int + if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 { + l += syscall.CmsgSpace(ctlOpts[ctlTTL].length) + } + if ctlOpts[ctlPacketInfo].name > 0 { + if opt.isset(FlagSrc | FlagDst | FlagInterface) { + l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length) + } + } else { + if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 { + l += syscall.CmsgSpace(ctlOpts[ctlDst].length) + } + if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 { + l += syscall.CmsgSpace(ctlOpts[ctlInterface].length) + } + } + if l > 0 { + oob = make([]byte, l) + } + opt.RUnlock() + return +} + +func parseControlMessage(b []byte) (*ControlMessage, error) { + if len(b) == 0 { + return nil, nil + } + cmsgs, err := syscall.ParseSocketControlMessage(b) + if err != nil { + return nil, os.NewSyscallError("parse socket control message", err) + } + cm := &ControlMessage{} + for _, m := range cmsgs { + if m.Header.Level != iana.ProtocolIP { + continue + } + switch int(m.Header.Type) { + case ctlOpts[ctlTTL].name: + ctlOpts[ctlTTL].parse(cm, m.Data[:]) + case ctlOpts[ctlDst].name: + ctlOpts[ctlDst].parse(cm, m.Data[:]) + case ctlOpts[ctlInterface].name: + ctlOpts[ctlInterface].parse(cm, m.Data[:]) + case ctlOpts[ctlPacketInfo].name: + ctlOpts[ctlPacketInfo].parse(cm, m.Data[:]) + } + } + return cm, nil +} + +func marshalControlMessage(cm *ControlMessage) (oob []byte) { + if cm == nil { + return nil + } + var l int + pktinfo := false + if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To4() != nil || cm.IfIndex > 0) { + pktinfo = true + l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length) + } + if l > 0 { + oob = make([]byte, l) + b := oob + if pktinfo { + b = ctlOpts[ctlPacketInfo].marshal(b, cm) + } + } + return +} + +func marshalTTL(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIP + m.Type = sysIP_RECVTTL + m.SetLen(syscall.CmsgLen(1)) + return b[syscall.CmsgSpace(1):] +} + +func parseTTL(cm *ControlMessage, b []byte) { + cm.TTL = int(*(*byte)(unsafe.Pointer(&b[:1][0]))) +} diff --git a/vendor/golang.org/x/net/ipv4/control_windows.go b/vendor/golang.org/x/net/ipv4/control_windows.go new file mode 100644 index 0000000..b27407d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_windows.go @@ -0,0 +1,27 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import "syscall" + +func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error { + // TODO(mikio): implement this + return syscall.EWINDOWS +} + +func newControlMessage(opt *rawOpt) []byte { + // TODO(mikio): implement this + return nil +} + +func parseControlMessage(b []byte) (*ControlMessage, error) { + // TODO(mikio): implement this + return nil, syscall.EWINDOWS +} + +func marshalControlMessage(cm *ControlMessage) []byte { + // TODO(mikio): implement this + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/defs_darwin.go b/vendor/golang.org/x/net/ipv4/defs_darwin.go new file mode 100644 index 0000000..c8f2e05 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/defs_darwin.go @@ -0,0 +1,77 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ + +package ipv4 + +/* +#include + +#include +*/ +import "C" + +const ( + sysIP_OPTIONS = C.IP_OPTIONS + sysIP_HDRINCL = C.IP_HDRINCL + sysIP_TOS = C.IP_TOS + sysIP_TTL = C.IP_TTL + sysIP_RECVOPTS = C.IP_RECVOPTS + sysIP_RECVRETOPTS = C.IP_RECVRETOPTS + sysIP_RECVDSTADDR = C.IP_RECVDSTADDR + sysIP_RETOPTS = C.IP_RETOPTS + sysIP_RECVIF = C.IP_RECVIF + sysIP_STRIPHDR = C.IP_STRIPHDR + sysIP_RECVTTL = C.IP_RECVTTL + sysIP_BOUND_IF = C.IP_BOUND_IF + sysIP_PKTINFO = C.IP_PKTINFO + sysIP_RECVPKTINFO = C.IP_RECVPKTINFO + + sysIP_MULTICAST_IF = C.IP_MULTICAST_IF + sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL + sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP + sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP + sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP + sysIP_MULTICAST_VIF = C.IP_MULTICAST_VIF + sysIP_MULTICAST_IFINDEX = C.IP_MULTICAST_IFINDEX + sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP + sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP + sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE + sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE + sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP + sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP + sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP + sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP + sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE + sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofInetPktinfo = C.sizeof_struct_in_pktinfo + + sizeofIPMreq = C.sizeof_struct_ip_mreq + sizeofIPMreqn = C.sizeof_struct_ip_mreqn + sizeofIPMreqSource = C.sizeof_struct_ip_mreq_source + sizeofGroupReq = C.sizeof_struct_group_req + sizeofGroupSourceReq = C.sizeof_struct_group_source_req +) + +type sockaddrStorage C.struct_sockaddr_storage + +type sockaddrInet C.struct_sockaddr_in + +type inetPktinfo C.struct_in_pktinfo + +type ipMreq C.struct_ip_mreq + +type ipMreqn C.struct_ip_mreqn + +type ipMreqSource C.struct_ip_mreq_source + +type groupReq C.struct_group_req + +type groupSourceReq C.struct_group_source_req diff --git a/vendor/golang.org/x/net/ipv4/defs_dragonfly.go b/vendor/golang.org/x/net/ipv4/defs_dragonfly.go new file mode 100644 index 0000000..f30544e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/defs_dragonfly.go @@ -0,0 +1,38 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ + +package ipv4 + +/* +#include +*/ +import "C" + +const ( + sysIP_OPTIONS = C.IP_OPTIONS + sysIP_HDRINCL = C.IP_HDRINCL + sysIP_TOS = C.IP_TOS + sysIP_TTL = C.IP_TTL + sysIP_RECVOPTS = C.IP_RECVOPTS + sysIP_RECVRETOPTS = C.IP_RECVRETOPTS + sysIP_RECVDSTADDR = C.IP_RECVDSTADDR + sysIP_RETOPTS = C.IP_RETOPTS + sysIP_RECVIF = C.IP_RECVIF + sysIP_RECVTTL = C.IP_RECVTTL + + sysIP_MULTICAST_IF = C.IP_MULTICAST_IF + sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL + sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP + sysIP_MULTICAST_VIF = C.IP_MULTICAST_VIF + sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP + sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP + + sizeofIPMreq = C.sizeof_struct_ip_mreq +) + +type ipMreq C.struct_ip_mreq diff --git a/vendor/golang.org/x/net/ipv4/defs_freebsd.go b/vendor/golang.org/x/net/ipv4/defs_freebsd.go new file mode 100644 index 0000000..4dd57d8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/defs_freebsd.go @@ -0,0 +1,75 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ + +package ipv4 + +/* +#include + +#include +*/ +import "C" + +const ( + sysIP_OPTIONS = C.IP_OPTIONS + sysIP_HDRINCL = C.IP_HDRINCL + sysIP_TOS = C.IP_TOS + sysIP_TTL = C.IP_TTL + sysIP_RECVOPTS = C.IP_RECVOPTS + sysIP_RECVRETOPTS = C.IP_RECVRETOPTS + sysIP_RECVDSTADDR = C.IP_RECVDSTADDR + sysIP_SENDSRCADDR = C.IP_SENDSRCADDR + sysIP_RETOPTS = C.IP_RETOPTS + sysIP_RECVIF = C.IP_RECVIF + sysIP_ONESBCAST = C.IP_ONESBCAST + sysIP_BINDANY = C.IP_BINDANY + sysIP_RECVTTL = C.IP_RECVTTL + sysIP_MINTTL = C.IP_MINTTL + sysIP_DONTFRAG = C.IP_DONTFRAG + sysIP_RECVTOS = C.IP_RECVTOS + + sysIP_MULTICAST_IF = C.IP_MULTICAST_IF + sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL + sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP + sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP + sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP + sysIP_MULTICAST_VIF = C.IP_MULTICAST_VIF + sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP + sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP + sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE + sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE + sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP + sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP + sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP + sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP + sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE + sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + + sizeofIPMreq = C.sizeof_struct_ip_mreq + sizeofIPMreqn = C.sizeof_struct_ip_mreqn + sizeofIPMreqSource = C.sizeof_struct_ip_mreq_source + sizeofGroupReq = C.sizeof_struct_group_req + sizeofGroupSourceReq = C.sizeof_struct_group_source_req +) + +type sockaddrStorage C.struct_sockaddr_storage + +type sockaddrInet C.struct_sockaddr_in + +type ipMreq C.struct_ip_mreq + +type ipMreqn C.struct_ip_mreqn + +type ipMreqSource C.struct_ip_mreq_source + +type groupReq C.struct_group_req + +type groupSourceReq C.struct_group_source_req diff --git a/vendor/golang.org/x/net/ipv4/defs_linux.go b/vendor/golang.org/x/net/ipv4/defs_linux.go new file mode 100644 index 0000000..31dfa09 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/defs_linux.go @@ -0,0 +1,120 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ + +package ipv4 + +/* +#include + +#include +#include +#include +#include +#include +*/ +import "C" + +const ( + sysIP_TOS = C.IP_TOS + sysIP_TTL = C.IP_TTL + sysIP_HDRINCL = C.IP_HDRINCL + sysIP_OPTIONS = C.IP_OPTIONS + sysIP_ROUTER_ALERT = C.IP_ROUTER_ALERT + sysIP_RECVOPTS = C.IP_RECVOPTS + sysIP_RETOPTS = C.IP_RETOPTS + sysIP_PKTINFO = C.IP_PKTINFO + sysIP_PKTOPTIONS = C.IP_PKTOPTIONS + sysIP_MTU_DISCOVER = C.IP_MTU_DISCOVER + sysIP_RECVERR = C.IP_RECVERR + sysIP_RECVTTL = C.IP_RECVTTL + sysIP_RECVTOS = C.IP_RECVTOS + sysIP_MTU = C.IP_MTU + sysIP_FREEBIND = C.IP_FREEBIND + sysIP_TRANSPARENT = C.IP_TRANSPARENT + sysIP_RECVRETOPTS = C.IP_RECVRETOPTS + sysIP_ORIGDSTADDR = C.IP_ORIGDSTADDR + sysIP_RECVORIGDSTADDR = C.IP_RECVORIGDSTADDR + sysIP_MINTTL = C.IP_MINTTL + sysIP_NODEFRAG = C.IP_NODEFRAG + sysIP_UNICAST_IF = C.IP_UNICAST_IF + + sysIP_MULTICAST_IF = C.IP_MULTICAST_IF + sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL + sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP + sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP + sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP + sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE + sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE + sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP + sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP + sysIP_MSFILTER = C.IP_MSFILTER + sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP + sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP + sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP + sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP + sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE + sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE + sysMCAST_MSFILTER = C.MCAST_MSFILTER + sysIP_MULTICAST_ALL = C.IP_MULTICAST_ALL + + //sysIP_PMTUDISC_DONT = C.IP_PMTUDISC_DONT + //sysIP_PMTUDISC_WANT = C.IP_PMTUDISC_WANT + //sysIP_PMTUDISC_DO = C.IP_PMTUDISC_DO + //sysIP_PMTUDISC_PROBE = C.IP_PMTUDISC_PROBE + //sysIP_PMTUDISC_INTERFACE = C.IP_PMTUDISC_INTERFACE + //sysIP_PMTUDISC_OMIT = C.IP_PMTUDISC_OMIT + + sysICMP_FILTER = C.ICMP_FILTER + + sysSO_EE_ORIGIN_NONE = C.SO_EE_ORIGIN_NONE + sysSO_EE_ORIGIN_LOCAL = C.SO_EE_ORIGIN_LOCAL + sysSO_EE_ORIGIN_ICMP = C.SO_EE_ORIGIN_ICMP + sysSO_EE_ORIGIN_ICMP6 = C.SO_EE_ORIGIN_ICMP6 + sysSO_EE_ORIGIN_TXSTATUS = C.SO_EE_ORIGIN_TXSTATUS + sysSO_EE_ORIGIN_TIMESTAMPING = C.SO_EE_ORIGIN_TIMESTAMPING + + sysSOL_SOCKET = C.SOL_SOCKET + sysSO_ATTACH_FILTER = C.SO_ATTACH_FILTER + + sizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofInetPktinfo = C.sizeof_struct_in_pktinfo + sizeofSockExtendedErr = C.sizeof_struct_sock_extended_err + + sizeofIPMreq = C.sizeof_struct_ip_mreq + sizeofIPMreqn = C.sizeof_struct_ip_mreqn + sizeofIPMreqSource = C.sizeof_struct_ip_mreq_source + sizeofGroupReq = C.sizeof_struct_group_req + sizeofGroupSourceReq = C.sizeof_struct_group_source_req + + sizeofICMPFilter = C.sizeof_struct_icmp_filter +) + +type kernelSockaddrStorage C.struct___kernel_sockaddr_storage + +type sockaddrInet C.struct_sockaddr_in + +type inetPktinfo C.struct_in_pktinfo + +type sockExtendedErr C.struct_sock_extended_err + +type ipMreq C.struct_ip_mreq + +type ipMreqn C.struct_ip_mreqn + +type ipMreqSource C.struct_ip_mreq_source + +type groupReq C.struct_group_req + +type groupSourceReq C.struct_group_source_req + +type icmpFilter C.struct_icmp_filter + +type sockFProg C.struct_sock_fprog + +type sockFilter C.struct_sock_filter diff --git a/vendor/golang.org/x/net/ipv4/defs_netbsd.go b/vendor/golang.org/x/net/ipv4/defs_netbsd.go new file mode 100644 index 0000000..8f8af1b --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/defs_netbsd.go @@ -0,0 +1,37 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ + +package ipv4 + +/* +#include +*/ +import "C" + +const ( + sysIP_OPTIONS = C.IP_OPTIONS + sysIP_HDRINCL = C.IP_HDRINCL + sysIP_TOS = C.IP_TOS + sysIP_TTL = C.IP_TTL + sysIP_RECVOPTS = C.IP_RECVOPTS + sysIP_RECVRETOPTS = C.IP_RECVRETOPTS + sysIP_RECVDSTADDR = C.IP_RECVDSTADDR + sysIP_RETOPTS = C.IP_RETOPTS + sysIP_RECVIF = C.IP_RECVIF + sysIP_RECVTTL = C.IP_RECVTTL + + sysIP_MULTICAST_IF = C.IP_MULTICAST_IF + sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL + sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP + sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP + sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP + + sizeofIPMreq = C.sizeof_struct_ip_mreq +) + +type ipMreq C.struct_ip_mreq diff --git a/vendor/golang.org/x/net/ipv4/defs_openbsd.go b/vendor/golang.org/x/net/ipv4/defs_openbsd.go new file mode 100644 index 0000000..8f8af1b --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/defs_openbsd.go @@ -0,0 +1,37 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ + +package ipv4 + +/* +#include +*/ +import "C" + +const ( + sysIP_OPTIONS = C.IP_OPTIONS + sysIP_HDRINCL = C.IP_HDRINCL + sysIP_TOS = C.IP_TOS + sysIP_TTL = C.IP_TTL + sysIP_RECVOPTS = C.IP_RECVOPTS + sysIP_RECVRETOPTS = C.IP_RECVRETOPTS + sysIP_RECVDSTADDR = C.IP_RECVDSTADDR + sysIP_RETOPTS = C.IP_RETOPTS + sysIP_RECVIF = C.IP_RECVIF + sysIP_RECVTTL = C.IP_RECVTTL + + sysIP_MULTICAST_IF = C.IP_MULTICAST_IF + sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL + sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP + sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP + sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP + + sizeofIPMreq = C.sizeof_struct_ip_mreq +) + +type ipMreq C.struct_ip_mreq diff --git a/vendor/golang.org/x/net/ipv4/defs_solaris.go b/vendor/golang.org/x/net/ipv4/defs_solaris.go new file mode 100644 index 0000000..aeb33e9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/defs_solaris.go @@ -0,0 +1,84 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ + +package ipv4 + +/* +#include + +#include +*/ +import "C" + +const ( + sysIP_OPTIONS = C.IP_OPTIONS + sysIP_HDRINCL = C.IP_HDRINCL + sysIP_TOS = C.IP_TOS + sysIP_TTL = C.IP_TTL + sysIP_RECVOPTS = C.IP_RECVOPTS + sysIP_RECVRETOPTS = C.IP_RECVRETOPTS + sysIP_RECVDSTADDR = C.IP_RECVDSTADDR + sysIP_RETOPTS = C.IP_RETOPTS + sysIP_RECVIF = C.IP_RECVIF + sysIP_RECVSLLA = C.IP_RECVSLLA + sysIP_RECVTTL = C.IP_RECVTTL + + sysIP_MULTICAST_IF = C.IP_MULTICAST_IF + sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL + sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP + sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP + sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP + sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE + sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE + sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP + sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP + sysIP_NEXTHOP = C.IP_NEXTHOP + + sysIP_PKTINFO = C.IP_PKTINFO + sysIP_RECVPKTINFO = C.IP_RECVPKTINFO + sysIP_DONTFRAG = C.IP_DONTFRAG + + sysIP_BOUND_IF = C.IP_BOUND_IF + sysIP_UNSPEC_SRC = C.IP_UNSPEC_SRC + sysIP_BROADCAST_TTL = C.IP_BROADCAST_TTL + sysIP_DHCPINIT_IF = C.IP_DHCPINIT_IF + + sysIP_REUSEADDR = C.IP_REUSEADDR + sysIP_DONTROUTE = C.IP_DONTROUTE + sysIP_BROADCAST = C.IP_BROADCAST + + sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP + sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP + sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE + sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE + sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP + sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofInetPktinfo = C.sizeof_struct_in_pktinfo + + sizeofIPMreq = C.sizeof_struct_ip_mreq + sizeofIPMreqSource = C.sizeof_struct_ip_mreq_source + sizeofGroupReq = C.sizeof_struct_group_req + sizeofGroupSourceReq = C.sizeof_struct_group_source_req +) + +type sockaddrStorage C.struct_sockaddr_storage + +type sockaddrInet C.struct_sockaddr_in + +type inetPktinfo C.struct_in_pktinfo + +type ipMreq C.struct_ip_mreq + +type ipMreqSource C.struct_ip_mreq_source + +type groupReq C.struct_group_req + +type groupSourceReq C.struct_group_source_req diff --git a/vendor/golang.org/x/net/ipv4/dgramopt_posix.go b/vendor/golang.org/x/net/ipv4/dgramopt_posix.go new file mode 100644 index 0000000..fbc5df1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/dgramopt_posix.go @@ -0,0 +1,253 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv4 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/netreflect" +) + +// MulticastTTL returns the time-to-live field value for outgoing +// multicast packets. +func (c *dgramOpt) MulticastTTL() (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return 0, err + } + return getInt(s, &sockOpts[ssoMulticastTTL]) +} + +// SetMulticastTTL sets the time-to-live field value for future +// outgoing multicast packets. +func (c *dgramOpt) SetMulticastTTL(ttl int) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + return setInt(s, &sockOpts[ssoMulticastTTL], ttl) +} + +// MulticastInterface returns the default interface for multicast +// packet transmissions. +func (c *dgramOpt) MulticastInterface() (*net.Interface, error) { + if !c.ok() { + return nil, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return nil, err + } + return getInterface(s, &sockOpts[ssoMulticastInterface]) +} + +// SetMulticastInterface sets the default interface for future +// multicast packet transmissions. +func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + return setInterface(s, &sockOpts[ssoMulticastInterface], ifi) +} + +// MulticastLoopback reports whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) MulticastLoopback() (bool, error) { + if !c.ok() { + return false, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return false, err + } + on, err := getInt(s, &sockOpts[ssoMulticastLoopback]) + if err != nil { + return false, err + } + return on == 1, nil +} + +// SetMulticastLoopback sets whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) SetMulticastLoopback(on bool) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + return setInt(s, &sockOpts[ssoMulticastLoopback], boolint(on)) +} + +// JoinGroup joins the group address group on the interface ifi. +// By default all sources that can cast data to group are accepted. +// It's possible to mute and unmute data transmission from a specific +// source by using ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup. +// JoinGroup uses the system assigned multicast interface when ifi is +// nil, although this is not recommended because the assignment +// depends on platforms and sometimes it might require routing +// configuration. +func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + return setGroup(s, &sockOpts[ssoJoinGroup], ifi, grp) +} + +// LeaveGroup leaves the group address group on the interface ifi +// regardless of whether the group is any-source group or +// source-specific group. +func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + return setGroup(s, &sockOpts[ssoLeaveGroup], ifi, grp) +} + +// JoinSourceSpecificGroup joins the source-specific group comprising +// group and source on the interface ifi. +// JoinSourceSpecificGroup uses the system assigned multicast +// interface when ifi is nil, although this is not recommended because +// the assignment depends on platforms and sometimes it might require +// routing configuration. +func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return setSourceGroup(s, &sockOpts[ssoJoinSourceGroup], ifi, grp, src) +} + +// LeaveSourceSpecificGroup leaves the source-specific group on the +// interface ifi. +func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return setSourceGroup(s, &sockOpts[ssoLeaveSourceGroup], ifi, grp, src) +} + +// ExcludeSourceSpecificGroup excludes the source-specific group from +// the already joined any-source groups by JoinGroup on the interface +// ifi. +func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return setSourceGroup(s, &sockOpts[ssoBlockSourceGroup], ifi, grp, src) +} + +// IncludeSourceSpecificGroup includes the excluded source-specific +// group by ExcludeSourceSpecificGroup again on the interface ifi. +func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return setSourceGroup(s, &sockOpts[ssoUnblockSourceGroup], ifi, grp, src) +} + +// ICMPFilter returns an ICMP filter. +// Currently only Linux supports this. +func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) { + if !c.ok() { + return nil, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return nil, err + } + return getICMPFilter(s, &sockOpts[ssoICMPFilter]) +} + +// SetICMPFilter deploys the ICMP filter. +// Currently only Linux supports this. +func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + return setICMPFilter(s, &sockOpts[ssoICMPFilter], f) +} diff --git a/vendor/golang.org/x/net/ipv4/dgramopt_stub.go b/vendor/golang.org/x/net/ipv4/dgramopt_stub.go new file mode 100644 index 0000000..f6b867f --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/dgramopt_stub.go @@ -0,0 +1,106 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv4 + +import "net" + +// MulticastTTL returns the time-to-live field value for outgoing +// multicast packets. +func (c *dgramOpt) MulticastTTL() (int, error) { + return 0, errOpNoSupport +} + +// SetMulticastTTL sets the time-to-live field value for future +// outgoing multicast packets. +func (c *dgramOpt) SetMulticastTTL(ttl int) error { + return errOpNoSupport +} + +// MulticastInterface returns the default interface for multicast +// packet transmissions. +func (c *dgramOpt) MulticastInterface() (*net.Interface, error) { + return nil, errOpNoSupport +} + +// SetMulticastInterface sets the default interface for future +// multicast packet transmissions. +func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error { + return errOpNoSupport +} + +// MulticastLoopback reports whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) MulticastLoopback() (bool, error) { + return false, errOpNoSupport +} + +// SetMulticastLoopback sets whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) SetMulticastLoopback(on bool) error { + return errOpNoSupport +} + +// JoinGroup joins the group address group on the interface ifi. +// By default all sources that can cast data to group are accepted. +// It's possible to mute and unmute data transmission from a specific +// source by using ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup. +// JoinGroup uses the system assigned multicast interface when ifi is +// nil, although this is not recommended because the assignment +// depends on platforms and sometimes it might require routing +// configuration. +func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error { + return errOpNoSupport +} + +// LeaveGroup leaves the group address group on the interface ifi +// regardless of whether the group is any-source group or +// source-specific group. +func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error { + return errOpNoSupport +} + +// JoinSourceSpecificGroup joins the source-specific group comprising +// group and source on the interface ifi. +// JoinSourceSpecificGroup uses the system assigned multicast +// interface when ifi is nil, although this is not recommended because +// the assignment depends on platforms and sometimes it might require +// routing configuration. +func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + return errOpNoSupport +} + +// LeaveSourceSpecificGroup leaves the source-specific group on the +// interface ifi. +func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + return errOpNoSupport +} + +// ExcludeSourceSpecificGroup excludes the source-specific group from +// the already joined any-source groups by JoinGroup on the interface +// ifi. +func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + return errOpNoSupport +} + +// IncludeSourceSpecificGroup includes the excluded source-specific +// group by ExcludeSourceSpecificGroup again on the interface ifi. +func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + return errOpNoSupport +} + +// ICMPFilter returns an ICMP filter. +// Currently only Linux supports this. +func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) { + return nil, errOpNoSupport +} + +// SetICMPFilter deploys the ICMP filter. +// Currently only Linux supports this. +func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv4/doc.go b/vendor/golang.org/x/net/ipv4/doc.go new file mode 100644 index 0000000..b43935a --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/doc.go @@ -0,0 +1,244 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ipv4 implements IP-level socket options for the Internet +// Protocol version 4. +// +// The package provides IP-level socket options that allow +// manipulation of IPv4 facilities. +// +// The IPv4 protocol and basic host requirements for IPv4 are defined +// in RFC 791 and RFC 1122. +// Host extensions for multicasting and socket interface extensions +// for multicast source filters are defined in RFC 1112 and RFC 3678. +// IGMPv1, IGMPv2 and IGMPv3 are defined in RFC 1112, RFC 2236 and RFC +// 3376. +// Source-specific multicast is defined in RFC 4607. +// +// +// Unicasting +// +// The options for unicasting are available for net.TCPConn, +// net.UDPConn and net.IPConn which are created as network connections +// that use the IPv4 transport. When a single TCP connection carrying +// a data flow of multiple packets needs to indicate the flow is +// important, Conn is used to set the type-of-service field on the +// IPv4 header for each packet. +// +// ln, err := net.Listen("tcp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer ln.Close() +// for { +// c, err := ln.Accept() +// if err != nil { +// // error handling +// } +// go func(c net.Conn) { +// defer c.Close() +// +// The outgoing packets will be labeled DiffServ assured forwarding +// class 1 low drop precedence, known as AF11 packets. +// +// if err := ipv4.NewConn(c).SetTOS(0x28); err != nil { +// // error handling +// } +// if _, err := c.Write(data); err != nil { +// // error handling +// } +// }(c) +// } +// +// +// Multicasting +// +// The options for multicasting are available for net.UDPConn and +// net.IPconn which are created as network connections that use the +// IPv4 transport. A few network facilities must be prepared before +// you begin multicasting, at a minimum joining network interfaces and +// multicast groups. +// +// en0, err := net.InterfaceByName("en0") +// if err != nil { +// // error handling +// } +// en1, err := net.InterfaceByIndex(911) +// if err != nil { +// // error handling +// } +// group := net.IPv4(224, 0, 0, 250) +// +// First, an application listens to an appropriate address with an +// appropriate service port. +// +// c, err := net.ListenPacket("udp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// +// Second, the application joins multicast groups, starts listening to +// the groups on the specified network interfaces. Note that the +// service port for transport layer protocol does not matter with this +// operation as joining groups affects only network and link layer +// protocols, such as IPv4 and Ethernet. +// +// p := ipv4.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// +// The application might set per packet control message transmissions +// between the protocol stack within the kernel. When the application +// needs a destination address on an incoming packet, +// SetControlMessage of PacketConn is used to enable control message +// transmissions. +// +// if err := p.SetControlMessage(ipv4.FlagDst, true); err != nil { +// // error handling +// } +// +// The application could identify whether the received packets are +// of interest by using the control message that contains the +// destination address of the received packet. +// +// b := make([]byte, 1500) +// for { +// n, cm, src, err := p.ReadFrom(b) +// if err != nil { +// // error handling +// } +// if cm.Dst.IsMulticast() { +// if cm.Dst.Equal(group) { +// // joined group, do something +// } else { +// // unknown group, discard +// continue +// } +// } +// +// The application can also send both unicast and multicast packets. +// +// p.SetTOS(0x0) +// p.SetTTL(16) +// if _, err := p.WriteTo(data, nil, src); err != nil { +// // error handling +// } +// dst := &net.UDPAddr{IP: group, Port: 1024} +// for _, ifi := range []*net.Interface{en0, en1} { +// if err := p.SetMulticastInterface(ifi); err != nil { +// // error handling +// } +// p.SetMulticastTTL(2) +// if _, err := p.WriteTo(data, nil, dst); err != nil { +// // error handling +// } +// } +// } +// +// +// More multicasting +// +// An application that uses PacketConn or RawConn may join multiple +// multicast groups. For example, a UDP listener with port 1024 might +// join two different groups across over two different network +// interfaces by using: +// +// c, err := net.ListenPacket("udp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// p := ipv4.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil { +// // error handling +// } +// +// It is possible for multiple UDP listeners that listen on the same +// UDP port to join the same multicast group. The net package will +// provide a socket that listens to a wildcard address with reusable +// UDP port when an appropriate multicast address prefix is passed to +// the net.ListenPacket or net.ListenUDP. +// +// c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c1.Close() +// c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c2.Close() +// p1 := ipv4.NewPacketConn(c1) +// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// p2 := ipv4.NewPacketConn(c2) +// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// +// Also it is possible for the application to leave or rejoin a +// multicast group on the network interface. +// +// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)}); err != nil { +// // error handling +// } +// +// +// Source-specific multicasting +// +// An application that uses PacketConn or RawConn on IGMPv3 supported +// platform is able to join source-specific multicast groups. +// The application may use JoinSourceSpecificGroup and +// LeaveSourceSpecificGroup for the operation known as "include" mode, +// +// ssmgroup := net.UDPAddr{IP: net.IPv4(232, 7, 8, 9)} +// ssmsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 1)}) +// if err := p.JoinSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// if err := p.LeaveSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// +// or JoinGroup, ExcludeSourceSpecificGroup, +// IncludeSourceSpecificGroup and LeaveGroup for the operation known +// as "exclude" mode. +// +// exclsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 254)} +// if err := p.JoinGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// if err := p.ExcludeSourceSpecificGroup(en0, &ssmgroup, &exclsource); err != nil { +// // error handling +// } +// if err := p.LeaveGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// +// Note that it depends on each platform implementation what happens +// when an application which runs on IGMPv3 unsupported platform uses +// JoinSourceSpecificGroup and LeaveSourceSpecificGroup. +// In general the platform tries to fall back to conversations using +// IGMPv1 or IGMPv2 and starts to listen to multicast traffic. +// In the fallback case, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup may return an error. +package ipv4 // import "golang.org/x/net/ipv4" + +// BUG(mikio): This package is not implemented on NaCl and Plan 9. diff --git a/vendor/golang.org/x/net/ipv4/endpoint.go b/vendor/golang.org/x/net/ipv4/endpoint.go new file mode 100644 index 0000000..8f7e07a --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/endpoint.go @@ -0,0 +1,194 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" + "time" + + "golang.org/x/net/internal/netreflect" +) + +// BUG(mikio): On Windows, the JoinSourceSpecificGroup, +// LeaveSourceSpecificGroup, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup methods of PacketConn and RawConn are +// not implemented. + +// A Conn represents a network endpoint that uses the IPv4 transport. +// It is used to control basic IP-level socket options such as TOS and +// TTL. +type Conn struct { + genericOpt +} + +type genericOpt struct { + net.Conn +} + +func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil } + +// NewConn returns a new Conn. +func NewConn(c net.Conn) *Conn { + return &Conn{ + genericOpt: genericOpt{Conn: c}, + } +} + +// A PacketConn represents a packet network endpoint that uses the +// IPv4 transport. It is used to control several IP-level socket +// options including multicasting. It also provides datagram based +// network I/O methods specific to the IPv4 and higher layer protocols +// such as UDP. +type PacketConn struct { + genericOpt + dgramOpt + payloadHandler +} + +type dgramOpt struct { + net.PacketConn +} + +func (c *dgramOpt) ok() bool { return c != nil && c.PacketConn != nil } + +// SetControlMessage sets the per packet IP-level socket options. +func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.dgramOpt.PacketConn) + if err != nil { + return err + } + return setControlMessage(s, &c.payloadHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *PacketConn) SetDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + return c.payloadHandler.PacketConn.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *PacketConn) SetReadDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + return c.payloadHandler.PacketConn.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *PacketConn) SetWriteDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + return c.payloadHandler.PacketConn.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *PacketConn) Close() error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + return c.payloadHandler.PacketConn.Close() +} + +// NewPacketConn returns a new PacketConn using c as its underlying +// transport. +func NewPacketConn(c net.PacketConn) *PacketConn { + p := &PacketConn{ + genericOpt: genericOpt{Conn: c.(net.Conn)}, + dgramOpt: dgramOpt{PacketConn: c}, + payloadHandler: payloadHandler{PacketConn: c}, + } + if _, ok := c.(*net.IPConn); ok && sockOpts[ssoStripHeader].name > 0 { + if s, err := netreflect.PacketSocketOf(c); err == nil { + setInt(s, &sockOpts[ssoStripHeader], boolint(true)) + } + } + return p +} + +// A RawConn represents a packet network endpoint that uses the IPv4 +// transport. It is used to control several IP-level socket options +// including IPv4 header manipulation. It also provides datagram +// based network I/O methods specific to the IPv4 and higher layer +// protocols that handle IPv4 datagram directly such as OSPF, GRE. +type RawConn struct { + genericOpt + dgramOpt + packetHandler +} + +// SetControlMessage sets the per packet IP-level socket options. +func (c *RawConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.packetHandler.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.dgramOpt.PacketConn) + if err != nil { + return err + } + return setControlMessage(s, &c.packetHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *RawConn) SetDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return syscall.EINVAL + } + return c.packetHandler.c.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *RawConn) SetReadDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return syscall.EINVAL + } + return c.packetHandler.c.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *RawConn) SetWriteDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return syscall.EINVAL + } + return c.packetHandler.c.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *RawConn) Close() error { + if !c.packetHandler.ok() { + return syscall.EINVAL + } + return c.packetHandler.c.Close() +} + +// NewRawConn returns a new RawConn using c as its underlying +// transport. +func NewRawConn(c net.PacketConn) (*RawConn, error) { + r := &RawConn{ + genericOpt: genericOpt{Conn: c.(net.Conn)}, + dgramOpt: dgramOpt{PacketConn: c}, + packetHandler: packetHandler{c: c.(*net.IPConn)}, + } + s, err := netreflect.PacketSocketOf(c) + if err != nil { + return nil, err + } + if err := setInt(s, &sockOpts[ssoHeaderPrepend], boolint(true)); err != nil { + return nil, err + } + return r, nil +} diff --git a/vendor/golang.org/x/net/ipv4/example_test.go b/vendor/golang.org/x/net/ipv4/example_test.go new file mode 100644 index 0000000..ddc7577 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/example_test.go @@ -0,0 +1,224 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "fmt" + "log" + "net" + "os" + "runtime" + "time" + + "golang.org/x/net/icmp" + "golang.org/x/net/ipv4" +) + +func ExampleConn_markingTCP() { + ln, err := net.Listen("tcp", "0.0.0.0:1024") + if err != nil { + log.Fatal(err) + } + defer ln.Close() + + for { + c, err := ln.Accept() + if err != nil { + log.Fatal(err) + } + go func(c net.Conn) { + defer c.Close() + if c.RemoteAddr().(*net.TCPAddr).IP.To4() != nil { + p := ipv4.NewConn(c) + if err := p.SetTOS(0x28); err != nil { // DSCP AF11 + log.Fatal(err) + } + if err := p.SetTTL(128); err != nil { + log.Fatal(err) + } + } + if _, err := c.Write([]byte("HELLO-R-U-THERE-ACK")); err != nil { + log.Fatal(err) + } + }(c) + } +} + +func ExamplePacketConn_servingOneShotMulticastDNS() { + c, err := net.ListenPacket("udp4", "0.0.0.0:5353") // mDNS over UDP + if err != nil { + log.Fatal(err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + + en0, err := net.InterfaceByName("en0") + if err != nil { + log.Fatal(err) + } + mDNSLinkLocal := net.UDPAddr{IP: net.IPv4(224, 0, 0, 251)} + if err := p.JoinGroup(en0, &mDNSLinkLocal); err != nil { + log.Fatal(err) + } + defer p.LeaveGroup(en0, &mDNSLinkLocal) + if err := p.SetControlMessage(ipv4.FlagDst, true); err != nil { + log.Fatal(err) + } + + b := make([]byte, 1500) + for { + _, cm, peer, err := p.ReadFrom(b) + if err != nil { + log.Fatal(err) + } + if !cm.Dst.IsMulticast() || !cm.Dst.Equal(mDNSLinkLocal.IP) { + continue + } + answers := []byte("FAKE-MDNS-ANSWERS") // fake mDNS answers, you need to implement this + if _, err := p.WriteTo(answers, nil, peer); err != nil { + log.Fatal(err) + } + } +} + +func ExamplePacketConn_tracingIPPacketRoute() { + // Tracing an IP packet route to www.google.com. + + const host = "www.google.com" + ips, err := net.LookupIP(host) + if err != nil { + log.Fatal(err) + } + var dst net.IPAddr + for _, ip := range ips { + if ip.To4() != nil { + dst.IP = ip + fmt.Printf("using %v for tracing an IP packet route to %s\n", dst.IP, host) + break + } + } + if dst.IP == nil { + log.Fatal("no A record found") + } + + c, err := net.ListenPacket("ip4:1", "0.0.0.0") // ICMP for IPv4 + if err != nil { + log.Fatal(err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + + if err := p.SetControlMessage(ipv4.FlagTTL|ipv4.FlagSrc|ipv4.FlagDst|ipv4.FlagInterface, true); err != nil { + log.Fatal(err) + } + wm := icmp.Message{ + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, + Data: []byte("HELLO-R-U-THERE"), + }, + } + + rb := make([]byte, 1500) + for i := 1; i <= 64; i++ { // up to 64 hops + wm.Body.(*icmp.Echo).Seq = i + wb, err := wm.Marshal(nil) + if err != nil { + log.Fatal(err) + } + if err := p.SetTTL(i); err != nil { + log.Fatal(err) + } + + // In the real world usually there are several + // multiple traffic-engineered paths for each hop. + // You may need to probe a few times to each hop. + begin := time.Now() + if _, err := p.WriteTo(wb, nil, &dst); err != nil { + log.Fatal(err) + } + if err := p.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil { + log.Fatal(err) + } + n, cm, peer, err := p.ReadFrom(rb) + if err != nil { + if err, ok := err.(net.Error); ok && err.Timeout() { + fmt.Printf("%v\t*\n", i) + continue + } + log.Fatal(err) + } + rm, err := icmp.ParseMessage(1, rb[:n]) + if err != nil { + log.Fatal(err) + } + rtt := time.Since(begin) + + // In the real world you need to determine whether the + // received message is yours using ControlMessage.Src, + // ControlMessage.Dst, icmp.Echo.ID and icmp.Echo.Seq. + switch rm.Type { + case ipv4.ICMPTypeTimeExceeded: + names, _ := net.LookupAddr(peer.String()) + fmt.Printf("%d\t%v %+v %v\n\t%+v\n", i, peer, names, rtt, cm) + case ipv4.ICMPTypeEchoReply: + names, _ := net.LookupAddr(peer.String()) + fmt.Printf("%d\t%v %+v %v\n\t%+v\n", i, peer, names, rtt, cm) + return + default: + log.Printf("unknown ICMP message: %+v\n", rm) + } + } +} + +func ExampleRawConn_advertisingOSPFHello() { + c, err := net.ListenPacket("ip4:89", "0.0.0.0") // OSPF for IPv4 + if err != nil { + log.Fatal(err) + } + defer c.Close() + r, err := ipv4.NewRawConn(c) + if err != nil { + log.Fatal(err) + } + + en0, err := net.InterfaceByName("en0") + if err != nil { + log.Fatal(err) + } + allSPFRouters := net.IPAddr{IP: net.IPv4(224, 0, 0, 5)} + if err := r.JoinGroup(en0, &allSPFRouters); err != nil { + log.Fatal(err) + } + defer r.LeaveGroup(en0, &allSPFRouters) + + hello := make([]byte, 24) // fake hello data, you need to implement this + ospf := make([]byte, 24) // fake ospf header, you need to implement this + ospf[0] = 2 // version 2 + ospf[1] = 1 // hello packet + ospf = append(ospf, hello...) + iph := &ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TOS: 0xc0, // DSCP CS6 + TotalLen: ipv4.HeaderLen + len(ospf), + TTL: 1, + Protocol: 89, + Dst: allSPFRouters.IP.To4(), + } + + var cm *ipv4.ControlMessage + switch runtime.GOOS { + case "darwin", "linux": + cm = &ipv4.ControlMessage{IfIndex: en0.Index} + default: + if err := r.SetMulticastInterface(en0); err != nil { + log.Fatal(err) + } + } + if err := r.WriteTo(iph, ospf, cm); err != nil { + log.Fatal(err) + } +} diff --git a/vendor/golang.org/x/net/ipv4/gen.go b/vendor/golang.org/x/net/ipv4/gen.go new file mode 100644 index 0000000..ffb44fe --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/gen.go @@ -0,0 +1,199 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +//go:generate go run gen.go + +// This program generates system adaptation constants and types, +// internet protocol constants and tables by reading template files +// and IANA protocol registries. +package main + +import ( + "bytes" + "encoding/xml" + "fmt" + "go/format" + "io" + "io/ioutil" + "net/http" + "os" + "os/exec" + "runtime" + "strconv" + "strings" +) + +func main() { + if err := genzsys(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + if err := geniana(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func genzsys() error { + defs := "defs_" + runtime.GOOS + ".go" + f, err := os.Open(defs) + if err != nil { + if os.IsNotExist(err) { + return nil + } + return err + } + f.Close() + cmd := exec.Command("go", "tool", "cgo", "-godefs", defs) + b, err := cmd.Output() + if err != nil { + return err + } + b, err = format.Source(b) + if err != nil { + return err + } + zsys := "zsys_" + runtime.GOOS + ".go" + switch runtime.GOOS { + case "freebsd", "linux": + zsys = "zsys_" + runtime.GOOS + "_" + runtime.GOARCH + ".go" + } + if err := ioutil.WriteFile(zsys, b, 0644); err != nil { + return err + } + return nil +} + +var registries = []struct { + url string + parse func(io.Writer, io.Reader) error +}{ + { + "http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml", + parseICMPv4Parameters, + }, +} + +func geniana() error { + var bb bytes.Buffer + fmt.Fprintf(&bb, "// go generate gen.go\n") + fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n") + fmt.Fprintf(&bb, "package ipv4\n\n") + for _, r := range registries { + resp, err := http.Get(r.url) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("got HTTP status code %v for %v\n", resp.StatusCode, r.url) + } + if err := r.parse(&bb, resp.Body); err != nil { + return err + } + fmt.Fprintf(&bb, "\n") + } + b, err := format.Source(bb.Bytes()) + if err != nil { + return err + } + if err := ioutil.WriteFile("iana.go", b, 0644); err != nil { + return err + } + return nil +} + +func parseICMPv4Parameters(w io.Writer, r io.Reader) error { + dec := xml.NewDecoder(r) + var icp icmpv4Parameters + if err := dec.Decode(&icp); err != nil { + return err + } + prs := icp.escape() + fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated) + fmt.Fprintf(w, "const (\n") + for _, pr := range prs { + if pr.Descr == "" { + continue + } + fmt.Fprintf(w, "ICMPType%s ICMPType = %d", pr.Descr, pr.Value) + fmt.Fprintf(w, "// %s\n", pr.OrigDescr) + } + fmt.Fprintf(w, ")\n\n") + fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated) + fmt.Fprintf(w, "var icmpTypes = map[ICMPType]string{\n") + for _, pr := range prs { + if pr.Descr == "" { + continue + } + fmt.Fprintf(w, "%d: %q,\n", pr.Value, strings.ToLower(pr.OrigDescr)) + } + fmt.Fprintf(w, "}\n") + return nil +} + +type icmpv4Parameters struct { + XMLName xml.Name `xml:"registry"` + Title string `xml:"title"` + Updated string `xml:"updated"` + Registries []struct { + Title string `xml:"title"` + Records []struct { + Value string `xml:"value"` + Descr string `xml:"description"` + } `xml:"record"` + } `xml:"registry"` +} + +type canonICMPv4ParamRecord struct { + OrigDescr string + Descr string + Value int +} + +func (icp *icmpv4Parameters) escape() []canonICMPv4ParamRecord { + id := -1 + for i, r := range icp.Registries { + if strings.Contains(r.Title, "Type") || strings.Contains(r.Title, "type") { + id = i + break + } + } + if id < 0 { + return nil + } + prs := make([]canonICMPv4ParamRecord, len(icp.Registries[id].Records)) + sr := strings.NewReplacer( + "Messages", "", + "Message", "", + "ICMP", "", + "+", "P", + "-", "", + "/", "", + ".", "", + " ", "", + ) + for i, pr := range icp.Registries[id].Records { + if strings.Contains(pr.Descr, "Reserved") || + strings.Contains(pr.Descr, "Unassigned") || + strings.Contains(pr.Descr, "Deprecated") || + strings.Contains(pr.Descr, "Experiment") || + strings.Contains(pr.Descr, "experiment") { + continue + } + ss := strings.Split(pr.Descr, "\n") + if len(ss) > 1 { + prs[i].Descr = strings.Join(ss, " ") + } else { + prs[i].Descr = ss[0] + } + s := strings.TrimSpace(prs[i].Descr) + prs[i].OrigDescr = s + prs[i].Descr = sr.Replace(s) + prs[i].Value, _ = strconv.Atoi(pr.Value) + } + return prs +} diff --git a/vendor/golang.org/x/net/ipv4/genericopt_posix.go b/vendor/golang.org/x/net/ipv4/genericopt_posix.go new file mode 100644 index 0000000..58168b7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/genericopt_posix.go @@ -0,0 +1,63 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv4 + +import ( + "syscall" + + "golang.org/x/net/internal/netreflect" +) + +// TOS returns the type-of-service field value for outgoing packets. +func (c *genericOpt) TOS() (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + s, err := netreflect.SocketOf(c.Conn) + if err != nil { + return 0, err + } + return getInt(s, &sockOpts[ssoTOS]) +} + +// SetTOS sets the type-of-service field value for future outgoing +// packets. +func (c *genericOpt) SetTOS(tos int) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.SocketOf(c.Conn) + if err != nil { + return err + } + return setInt(s, &sockOpts[ssoTOS], tos) +} + +// TTL returns the time-to-live field value for outgoing packets. +func (c *genericOpt) TTL() (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + s, err := netreflect.SocketOf(c.Conn) + if err != nil { + return 0, err + } + return getInt(s, &sockOpts[ssoTTL]) +} + +// SetTTL sets the time-to-live field value for future outgoing +// packets. +func (c *genericOpt) SetTTL(ttl int) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.SocketOf(c.Conn) + if err != nil { + return err + } + return setInt(s, &sockOpts[ssoTTL], ttl) +} diff --git a/vendor/golang.org/x/net/ipv4/genericopt_stub.go b/vendor/golang.org/x/net/ipv4/genericopt_stub.go new file mode 100644 index 0000000..661a4d1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/genericopt_stub.go @@ -0,0 +1,29 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv4 + +// TOS returns the type-of-service field value for outgoing packets. +func (c *genericOpt) TOS() (int, error) { + return 0, errOpNoSupport +} + +// SetTOS sets the type-of-service field value for future outgoing +// packets. +func (c *genericOpt) SetTOS(tos int) error { + return errOpNoSupport +} + +// TTL returns the time-to-live field value for outgoing packets. +func (c *genericOpt) TTL() (int, error) { + return 0, errOpNoSupport +} + +// SetTTL sets the time-to-live field value for future outgoing +// packets. +func (c *genericOpt) SetTTL(ttl int) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv4/go19_test.go b/vendor/golang.org/x/net/ipv4/go19_test.go new file mode 100644 index 0000000..82a27b1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/go19_test.go @@ -0,0 +1,11 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package ipv4 + +func init() { + disableTests = true +} diff --git a/vendor/golang.org/x/net/ipv4/header.go b/vendor/golang.org/x/net/ipv4/header.go new file mode 100644 index 0000000..6dc26d4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/header.go @@ -0,0 +1,145 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "encoding/binary" + "fmt" + "net" + "runtime" + "syscall" +) + +const ( + Version = 4 // protocol version + HeaderLen = 20 // header length without extension headers + maxHeaderLen = 60 // sensible default, revisit if later RFCs define new usage of version and header length fields +) + +type HeaderFlags int + +const ( + MoreFragments HeaderFlags = 1 << iota // more fragments flag + DontFragment // don't fragment flag +) + +// A Header represents an IPv4 header. +type Header struct { + Version int // protocol version + Len int // header length + TOS int // type-of-service + TotalLen int // packet total length + ID int // identification + Flags HeaderFlags // flags + FragOff int // fragment offset + TTL int // time-to-live + Protocol int // next protocol + Checksum int // checksum + Src net.IP // source address + Dst net.IP // destination address + Options []byte // options, extension headers +} + +func (h *Header) String() string { + if h == nil { + return "" + } + return fmt.Sprintf("ver=%d hdrlen=%d tos=%#x totallen=%d id=%#x flags=%#x fragoff=%#x ttl=%d proto=%d cksum=%#x src=%v dst=%v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.Flags, h.FragOff, h.TTL, h.Protocol, h.Checksum, h.Src, h.Dst) +} + +// Marshal returns the binary encoding of the IPv4 header h. +func (h *Header) Marshal() ([]byte, error) { + if h == nil { + return nil, syscall.EINVAL + } + if h.Len < HeaderLen { + return nil, errHeaderTooShort + } + hdrlen := HeaderLen + len(h.Options) + b := make([]byte, hdrlen) + b[0] = byte(Version<<4 | (hdrlen >> 2 & 0x0f)) + b[1] = byte(h.TOS) + flagsAndFragOff := (h.FragOff & 0x1fff) | int(h.Flags<<13) + switch runtime.GOOS { + case "darwin", "dragonfly", "netbsd": + nativeEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + nativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + case "freebsd": + if freebsdVersion < 1100000 { + nativeEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + nativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } else { + binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } + default: + binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } + binary.BigEndian.PutUint16(b[4:6], uint16(h.ID)) + b[8] = byte(h.TTL) + b[9] = byte(h.Protocol) + binary.BigEndian.PutUint16(b[10:12], uint16(h.Checksum)) + if ip := h.Src.To4(); ip != nil { + copy(b[12:16], ip[:net.IPv4len]) + } + if ip := h.Dst.To4(); ip != nil { + copy(b[16:20], ip[:net.IPv4len]) + } else { + return nil, errMissingAddress + } + if len(h.Options) > 0 { + copy(b[HeaderLen:], h.Options) + } + return b, nil +} + +// ParseHeader parses b as an IPv4 header. +func ParseHeader(b []byte) (*Header, error) { + if len(b) < HeaderLen { + return nil, errHeaderTooShort + } + hdrlen := int(b[0]&0x0f) << 2 + if hdrlen > len(b) { + return nil, errBufferTooShort + } + h := &Header{ + Version: int(b[0] >> 4), + Len: hdrlen, + TOS: int(b[1]), + ID: int(binary.BigEndian.Uint16(b[4:6])), + TTL: int(b[8]), + Protocol: int(b[9]), + Checksum: int(binary.BigEndian.Uint16(b[10:12])), + Src: net.IPv4(b[12], b[13], b[14], b[15]), + Dst: net.IPv4(b[16], b[17], b[18], b[19]), + } + switch runtime.GOOS { + case "darwin", "dragonfly", "netbsd": + h.TotalLen = int(nativeEndian.Uint16(b[2:4])) + hdrlen + h.FragOff = int(nativeEndian.Uint16(b[6:8])) + case "freebsd": + if freebsdVersion < 1100000 { + h.TotalLen = int(nativeEndian.Uint16(b[2:4])) + if freebsdVersion < 1000000 { + h.TotalLen += hdrlen + } + h.FragOff = int(nativeEndian.Uint16(b[6:8])) + } else { + h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) + h.FragOff = int(binary.BigEndian.Uint16(b[6:8])) + } + default: + h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) + h.FragOff = int(binary.BigEndian.Uint16(b[6:8])) + } + h.Flags = HeaderFlags(h.FragOff&0xe000) >> 13 + h.FragOff = h.FragOff & 0x1fff + if hdrlen-HeaderLen > 0 { + h.Options = make([]byte, hdrlen-HeaderLen) + copy(h.Options, b[HeaderLen:]) + } + return h, nil +} diff --git a/vendor/golang.org/x/net/ipv4/header_test.go b/vendor/golang.org/x/net/ipv4/header_test.go new file mode 100644 index 0000000..cdf27fd --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/header_test.go @@ -0,0 +1,152 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "bytes" + "encoding/binary" + "net" + "reflect" + "runtime" + "strings" + "testing" +) + +type headerTest struct { + wireHeaderFromKernel [HeaderLen]byte + wireHeaderToKernel [HeaderLen]byte + wireHeaderFromTradBSDKernel [HeaderLen]byte + wireHeaderToTradBSDKernel [HeaderLen]byte + wireHeaderFromFreeBSD10Kernel [HeaderLen]byte + wireHeaderToFreeBSD10Kernel [HeaderLen]byte + *Header +} + +var headerLittleEndianTest = headerTest{ + // TODO(mikio): Add platform dependent wire header formats when + // we support new platforms. + wireHeaderFromKernel: [HeaderLen]byte{ + 0x45, 0x01, 0xbe, 0xef, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderToKernel: [HeaderLen]byte{ + 0x45, 0x01, 0xbe, 0xef, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderFromTradBSDKernel: [HeaderLen]byte{ + 0x45, 0x01, 0xdb, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderToTradBSDKernel: [HeaderLen]byte{ + 0x45, 0x01, 0xef, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderFromFreeBSD10Kernel: [HeaderLen]byte{ + 0x45, 0x01, 0xef, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderToFreeBSD10Kernel: [HeaderLen]byte{ + 0x45, 0x01, 0xef, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + Header: &Header{ + Version: Version, + Len: HeaderLen, + TOS: 1, + TotalLen: 0xbeef, + ID: 0xcafe, + Flags: DontFragment, + FragOff: 1500, + TTL: 255, + Protocol: 1, + Checksum: 0xdead, + Src: net.IPv4(172, 16, 254, 254), + Dst: net.IPv4(192, 168, 0, 1), + }, +} + +func TestMarshalHeader(t *testing.T) { + tt := &headerLittleEndianTest + if nativeEndian != binary.LittleEndian { + t.Skip("no test for non-little endian machine yet") + } + + b, err := tt.Header.Marshal() + if err != nil { + t.Fatal(err) + } + var wh []byte + switch runtime.GOOS { + case "darwin", "dragonfly", "netbsd": + wh = tt.wireHeaderToTradBSDKernel[:] + case "freebsd": + switch { + case freebsdVersion < 1000000: + wh = tt.wireHeaderToTradBSDKernel[:] + case 1000000 <= freebsdVersion && freebsdVersion < 1100000: + wh = tt.wireHeaderToFreeBSD10Kernel[:] + default: + wh = tt.wireHeaderToKernel[:] + } + default: + wh = tt.wireHeaderToKernel[:] + } + if !bytes.Equal(b, wh) { + t.Fatalf("got %#v; want %#v", b, wh) + } +} + +func TestParseHeader(t *testing.T) { + tt := &headerLittleEndianTest + if nativeEndian != binary.LittleEndian { + t.Skip("no test for big endian machine yet") + } + + var wh []byte + switch runtime.GOOS { + case "darwin", "dragonfly", "netbsd": + wh = tt.wireHeaderFromTradBSDKernel[:] + case "freebsd": + switch { + case freebsdVersion < 1000000: + wh = tt.wireHeaderFromTradBSDKernel[:] + case 1000000 <= freebsdVersion && freebsdVersion < 1100000: + wh = tt.wireHeaderFromFreeBSD10Kernel[:] + default: + wh = tt.wireHeaderFromKernel[:] + } + default: + wh = tt.wireHeaderFromKernel[:] + } + h, err := ParseHeader(wh) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(h, tt.Header) { + t.Fatalf("got %#v; want %#v", h, tt.Header) + } + s := h.String() + if strings.Contains(s, ",") { + t.Fatalf("should be space-separated values: %s", s) + } +} diff --git a/vendor/golang.org/x/net/ipv4/helper.go b/vendor/golang.org/x/net/ipv4/helper.go new file mode 100644 index 0000000..0838979 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/helper.go @@ -0,0 +1,59 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "encoding/binary" + "errors" + "net" + "unsafe" +) + +var ( + errMissingAddress = errors.New("missing address") + errMissingHeader = errors.New("missing header") + errHeaderTooShort = errors.New("header too short") + errBufferTooShort = errors.New("buffer too short") + errInvalidConnType = errors.New("invalid conn type") + errOpNoSupport = errors.New("operation not supported") + errNoSuchInterface = errors.New("no such interface") + errNoSuchMulticastInterface = errors.New("no such multicast interface") + + // See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html. + freebsdVersion uint32 + + nativeEndian binary.ByteOrder +) + +func init() { + i := uint32(1) + b := (*[4]byte)(unsafe.Pointer(&i)) + if b[0] == 1 { + nativeEndian = binary.LittleEndian + } else { + nativeEndian = binary.BigEndian + } +} + +func boolint(b bool) int { + if b { + return 1 + } + return 0 +} + +func netAddrToIP4(a net.Addr) net.IP { + switch v := a.(type) { + case *net.UDPAddr: + if ip := v.IP.To4(); ip != nil { + return ip + } + case *net.IPAddr: + if ip := v.IP.To4(); ip != nil { + return ip + } + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/iana.go b/vendor/golang.org/x/net/ipv4/iana.go new file mode 100644 index 0000000..be10c94 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/iana.go @@ -0,0 +1,34 @@ +// go generate gen.go +// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +package ipv4 + +// Internet Control Message Protocol (ICMP) Parameters, Updated: 2013-04-19 +const ( + ICMPTypeEchoReply ICMPType = 0 // Echo Reply + ICMPTypeDestinationUnreachable ICMPType = 3 // Destination Unreachable + ICMPTypeRedirect ICMPType = 5 // Redirect + ICMPTypeEcho ICMPType = 8 // Echo + ICMPTypeRouterAdvertisement ICMPType = 9 // Router Advertisement + ICMPTypeRouterSolicitation ICMPType = 10 // Router Solicitation + ICMPTypeTimeExceeded ICMPType = 11 // Time Exceeded + ICMPTypeParameterProblem ICMPType = 12 // Parameter Problem + ICMPTypeTimestamp ICMPType = 13 // Timestamp + ICMPTypeTimestampReply ICMPType = 14 // Timestamp Reply + ICMPTypePhoturis ICMPType = 40 // Photuris +) + +// Internet Control Message Protocol (ICMP) Parameters, Updated: 2013-04-19 +var icmpTypes = map[ICMPType]string{ + 0: "echo reply", + 3: "destination unreachable", + 5: "redirect", + 8: "echo", + 9: "router advertisement", + 10: "router solicitation", + 11: "time exceeded", + 12: "parameter problem", + 13: "timestamp", + 14: "timestamp reply", + 40: "photuris", +} diff --git a/vendor/golang.org/x/net/ipv4/icmp.go b/vendor/golang.org/x/net/ipv4/icmp.go new file mode 100644 index 0000000..097bea8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/icmp.go @@ -0,0 +1,57 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import "golang.org/x/net/internal/iana" + +// An ICMPType represents a type of ICMP message. +type ICMPType int + +func (typ ICMPType) String() string { + s, ok := icmpTypes[typ] + if !ok { + return "" + } + return s +} + +// Protocol returns the ICMPv4 protocol number. +func (typ ICMPType) Protocol() int { + return iana.ProtocolICMP +} + +// An ICMPFilter represents an ICMP message filter for incoming +// packets. The filter belongs to a packet delivery path on a host and +// it cannot interact with forwarding packets or tunnel-outer packets. +// +// Note: RFC 2460 defines a reasonable role model and it works not +// only for IPv6 but IPv4. A node means a device that implements IP. +// A router means a node that forwards IP packets not explicitly +// addressed to itself, and a host means a node that is not a router. +type ICMPFilter struct { + icmpFilter +} + +// Accept accepts incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Accept(typ ICMPType) { + f.accept(typ) +} + +// Block blocks incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Block(typ ICMPType) { + f.block(typ) +} + +// SetAll sets the filter action to the filter. +func (f *ICMPFilter) SetAll(block bool) { + f.setAll(block) +} + +// WillBlock reports whether the ICMP type will be blocked. +func (f *ICMPFilter) WillBlock(typ ICMPType) bool { + return f.willBlock(typ) +} diff --git a/vendor/golang.org/x/net/ipv4/icmp_linux.go b/vendor/golang.org/x/net/ipv4/icmp_linux.go new file mode 100644 index 0000000..6e1c5c8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/icmp_linux.go @@ -0,0 +1,25 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +func (f *icmpFilter) accept(typ ICMPType) { + f.Data &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpFilter) block(typ ICMPType) { + f.Data |= 1 << (uint32(typ) & 31) +} + +func (f *icmpFilter) setAll(block bool) { + if block { + f.Data = 1<<32 - 1 + } else { + f.Data = 0 + } +} + +func (f *icmpFilter) willBlock(typ ICMPType) bool { + return f.Data&(1<<(uint32(typ)&31)) != 0 +} diff --git a/vendor/golang.org/x/net/ipv4/icmp_stub.go b/vendor/golang.org/x/net/ipv4/icmp_stub.go new file mode 100644 index 0000000..21bb29a --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/icmp_stub.go @@ -0,0 +1,25 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !linux + +package ipv4 + +const sizeofICMPFilter = 0x0 + +type icmpFilter struct { +} + +func (f *icmpFilter) accept(typ ICMPType) { +} + +func (f *icmpFilter) block(typ ICMPType) { +} + +func (f *icmpFilter) setAll(block bool) { +} + +func (f *icmpFilter) willBlock(typ ICMPType) bool { + return false +} diff --git a/vendor/golang.org/x/net/ipv4/icmp_test.go b/vendor/golang.org/x/net/ipv4/icmp_test.go new file mode 100644 index 0000000..3324b54 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/icmp_test.go @@ -0,0 +1,95 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "net" + "reflect" + "runtime" + "testing" + + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +var icmpStringTests = []struct { + in ipv4.ICMPType + out string +}{ + {ipv4.ICMPTypeDestinationUnreachable, "destination unreachable"}, + + {256, ""}, +} + +func TestICMPString(t *testing.T) { + for _, tt := range icmpStringTests { + s := tt.in.String() + if s != tt.out { + t.Errorf("got %s; want %s", s, tt.out) + } + } +} + +func TestICMPFilter(t *testing.T) { + switch runtime.GOOS { + case "linux": + default: + t.Skipf("not supported on %s", runtime.GOOS) + } + + var f ipv4.ICMPFilter + for _, toggle := range []bool{false, true} { + f.SetAll(toggle) + for _, typ := range []ipv4.ICMPType{ + ipv4.ICMPTypeDestinationUnreachable, + ipv4.ICMPTypeEchoReply, + ipv4.ICMPTypeTimeExceeded, + ipv4.ICMPTypeParameterProblem, + } { + f.Accept(typ) + if f.WillBlock(typ) { + t.Errorf("ipv4.ICMPFilter.Set(%v, false) failed", typ) + } + f.Block(typ) + if !f.WillBlock(typ) { + t.Errorf("ipv4.ICMPFilter.Set(%v, true) failed", typ) + } + } + } +} + +func TestSetICMPFilter(t *testing.T) { + switch runtime.GOOS { + case "linux": + default: + t.Skipf("not supported on %s", runtime.GOOS) + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + c, err := net.ListenPacket("ip4:icmp", "127.0.0.1") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + p := ipv4.NewPacketConn(c) + + var f ipv4.ICMPFilter + f.SetAll(true) + f.Accept(ipv4.ICMPTypeEcho) + f.Accept(ipv4.ICMPTypeEchoReply) + if err := p.SetICMPFilter(&f); err != nil { + t.Fatal(err) + } + kf, err := p.ICMPFilter() + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(kf, &f) { + t.Fatalf("got %#v; want %#v", kf, f) + } +} diff --git a/vendor/golang.org/x/net/ipv4/ipv4_test.go b/vendor/golang.org/x/net/ipv4/ipv4_test.go new file mode 100644 index 0000000..9172992 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/ipv4_test.go @@ -0,0 +1,22 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "fmt" + "os" + "testing" +) + +var disableTests = false + +func TestMain(m *testing.M) { + if disableTests { + fmt.Fprintf(os.Stderr, "ipv4 tests disabled in Go 1.9 until netreflect is fixed. (Issue 19051)\n") + os.Exit(0) + } + // call flag.Parse() here if TestMain uses flags + os.Exit(m.Run()) +} diff --git a/vendor/golang.org/x/net/ipv4/multicast_test.go b/vendor/golang.org/x/net/ipv4/multicast_test.go new file mode 100644 index 0000000..bcf4973 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/multicast_test.go @@ -0,0 +1,334 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "bytes" + "net" + "os" + "runtime" + "testing" + "time" + + "golang.org/x/net/icmp" + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +var packetConnReadWriteMulticastUDPTests = []struct { + addr string + grp, src *net.UDPAddr +}{ + {"224.0.0.0:0", &net.UDPAddr{IP: net.IPv4(224, 0, 0, 254)}, nil}, // see RFC 4727 + + {"232.0.1.0:0", &net.UDPAddr{IP: net.IPv4(232, 0, 1, 254)}, &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771 +} + +func TestPacketConnReadWriteMulticastUDP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "solaris", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + for _, tt := range packetConnReadWriteMulticastUDPTests { + c, err := net.ListenPacket("udp4", tt.addr) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + grp := *tt.grp + grp.Port = c.LocalAddr().(*net.UDPAddr).Port + p := ipv4.NewPacketConn(c) + defer p.Close() + if tt.src == nil { + if err := p.JoinGroup(ifi, &grp); err != nil { + t.Fatal(err) + } + defer p.LeaveGroup(ifi, &grp) + } else { + if err := p.JoinSourceSpecificGroup(ifi, &grp, tt.src); err != nil { + switch runtime.GOOS { + case "freebsd", "linux": + default: // platforms that don't support IGMPv2/3 fail here + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + defer p.LeaveSourceSpecificGroup(ifi, &grp, tt.src) + } + if err := p.SetMulticastInterface(ifi); err != nil { + t.Fatal(err) + } + if _, err := p.MulticastInterface(); err != nil { + t.Fatal(err) + } + if err := p.SetMulticastLoopback(true); err != nil { + t.Fatal(err) + } + if _, err := p.MulticastLoopback(); err != nil { + t.Fatal(err) + } + cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface + wb := []byte("HELLO-R-U-THERE") + + for i, toggle := range []bool{true, false, true} { + if err := p.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil { + t.Fatal(err) + } + p.SetMulticastTTL(i + 1) + if n, err := p.WriteTo(wb, nil, &grp); err != nil { + t.Fatal(err) + } else if n != len(wb) { + t.Fatalf("got %v; want %v", n, len(wb)) + } + rb := make([]byte, 128) + if n, _, _, err := p.ReadFrom(rb); err != nil { + t.Fatal(err) + } else if !bytes.Equal(rb[:n], wb) { + t.Fatalf("got %v; want %v", rb[:n], wb) + } + } + } +} + +var packetConnReadWriteMulticastICMPTests = []struct { + grp, src *net.IPAddr +}{ + {&net.IPAddr{IP: net.IPv4(224, 0, 0, 254)}, nil}, // see RFC 4727 + + {&net.IPAddr{IP: net.IPv4(232, 0, 1, 254)}, &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771 +} + +func TestPacketConnReadWriteMulticastICMP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "solaris", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + for _, tt := range packetConnReadWriteMulticastICMPTests { + c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + p := ipv4.NewPacketConn(c) + defer p.Close() + if tt.src == nil { + if err := p.JoinGroup(ifi, tt.grp); err != nil { + t.Fatal(err) + } + defer p.LeaveGroup(ifi, tt.grp) + } else { + if err := p.JoinSourceSpecificGroup(ifi, tt.grp, tt.src); err != nil { + switch runtime.GOOS { + case "freebsd", "linux": + default: // platforms that don't support IGMPv2/3 fail here + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + defer p.LeaveSourceSpecificGroup(ifi, tt.grp, tt.src) + } + if err := p.SetMulticastInterface(ifi); err != nil { + t.Fatal(err) + } + if _, err := p.MulticastInterface(); err != nil { + t.Fatal(err) + } + if err := p.SetMulticastLoopback(true); err != nil { + t.Fatal(err) + } + if _, err := p.MulticastLoopback(); err != nil { + t.Fatal(err) + } + cf := ipv4.FlagDst | ipv4.FlagInterface + if runtime.GOOS != "solaris" { + // Solaris never allows to modify ICMP properties. + cf |= ipv4.FlagTTL + } + + for i, toggle := range []bool{true, false, true} { + wb, err := (&icmp.Message{ + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, Seq: i + 1, + Data: []byte("HELLO-R-U-THERE"), + }, + }).Marshal(nil) + if err != nil { + t.Fatal(err) + } + if err := p.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil { + t.Fatal(err) + } + p.SetMulticastTTL(i + 1) + if n, err := p.WriteTo(wb, nil, tt.grp); err != nil { + t.Fatal(err) + } else if n != len(wb) { + t.Fatalf("got %v; want %v", n, len(wb)) + } + rb := make([]byte, 128) + if n, _, _, err := p.ReadFrom(rb); err != nil { + t.Fatal(err) + } else { + m, err := icmp.ParseMessage(iana.ProtocolICMP, rb[:n]) + if err != nil { + t.Fatal(err) + } + switch { + case m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1 + case m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0 + default: + t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0) + } + } + } + } +} + +var rawConnReadWriteMulticastICMPTests = []struct { + grp, src *net.IPAddr +}{ + {&net.IPAddr{IP: net.IPv4(224, 0, 0, 254)}, nil}, // see RFC 4727 + + {&net.IPAddr{IP: net.IPv4(232, 0, 1, 254)}, &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771 +} + +func TestRawConnReadWriteMulticastICMP(t *testing.T) { + if testing.Short() { + t.Skip("to avoid external network") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + for _, tt := range rawConnReadWriteMulticastICMPTests { + c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + r, err := ipv4.NewRawConn(c) + if err != nil { + t.Fatal(err) + } + defer r.Close() + if tt.src == nil { + if err := r.JoinGroup(ifi, tt.grp); err != nil { + t.Fatal(err) + } + defer r.LeaveGroup(ifi, tt.grp) + } else { + if err := r.JoinSourceSpecificGroup(ifi, tt.grp, tt.src); err != nil { + switch runtime.GOOS { + case "freebsd", "linux": + default: // platforms that don't support IGMPv2/3 fail here + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + defer r.LeaveSourceSpecificGroup(ifi, tt.grp, tt.src) + } + if err := r.SetMulticastInterface(ifi); err != nil { + t.Fatal(err) + } + if _, err := r.MulticastInterface(); err != nil { + t.Fatal(err) + } + if err := r.SetMulticastLoopback(true); err != nil { + t.Fatal(err) + } + if _, err := r.MulticastLoopback(); err != nil { + t.Fatal(err) + } + cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface + + for i, toggle := range []bool{true, false, true} { + wb, err := (&icmp.Message{ + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, Seq: i + 1, + Data: []byte("HELLO-R-U-THERE"), + }, + }).Marshal(nil) + if err != nil { + t.Fatal(err) + } + wh := &ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TOS: i + 1, + TotalLen: ipv4.HeaderLen + len(wb), + Protocol: 1, + Dst: tt.grp.IP, + } + if err := r.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + if err := r.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil { + t.Fatal(err) + } + r.SetMulticastTTL(i + 1) + if err := r.WriteTo(wh, wb, nil); err != nil { + t.Fatal(err) + } + rb := make([]byte, ipv4.HeaderLen+128) + if rh, b, _, err := r.ReadFrom(rb); err != nil { + t.Fatal(err) + } else { + m, err := icmp.ParseMessage(iana.ProtocolICMP, b) + if err != nil { + t.Fatal(err) + } + switch { + case (rh.Dst.IsLoopback() || rh.Dst.IsLinkLocalUnicast() || rh.Dst.IsGlobalUnicast()) && m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1 + case rh.Dst.IsMulticast() && m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0 + default: + t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0) + } + } + } + } +} diff --git a/vendor/golang.org/x/net/ipv4/multicastlistener_test.go b/vendor/golang.org/x/net/ipv4/multicastlistener_test.go new file mode 100644 index 0000000..a0c24b5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/multicastlistener_test.go @@ -0,0 +1,249 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "net" + "runtime" + "testing" + + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +var udpMultipleGroupListenerTests = []net.Addr{ + &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}, // see RFC 4727 + &net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)}, + &net.UDPAddr{IP: net.IPv4(224, 0, 0, 254)}, +} + +func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if testing.Short() { + t.Skip("to avoid external network") + } + + for _, gaddr := range udpMultipleGroupListenerTests { + c, err := net.ListenPacket("udp4", "0.0.0.0:0") // wildcard address with no reusable port + if err != nil { + t.Fatal(err) + } + defer c.Close() + + p := ipv4.NewPacketConn(c) + var mift []*net.Interface + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok { + continue + } + if err := p.JoinGroup(&ifi, gaddr); err != nil { + t.Fatal(err) + } + mift = append(mift, &ift[i]) + } + for _, ifi := range mift { + if err := p.LeaveGroup(ifi, gaddr); err != nil { + t.Fatal(err) + } + } + } +} + +func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if testing.Short() { + t.Skip("to avoid external network") + } + + for _, gaddr := range udpMultipleGroupListenerTests { + c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port + if err != nil { + t.Fatal(err) + } + defer c1.Close() + + c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port + if err != nil { + t.Fatal(err) + } + defer c2.Close() + + var ps [2]*ipv4.PacketConn + ps[0] = ipv4.NewPacketConn(c1) + ps[1] = ipv4.NewPacketConn(c2) + var mift []*net.Interface + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok { + continue + } + for _, p := range ps { + if err := p.JoinGroup(&ifi, gaddr); err != nil { + t.Fatal(err) + } + } + mift = append(mift, &ift[i]) + } + for _, ifi := range mift { + for _, p := range ps { + if err := p.LeaveGroup(ifi, gaddr); err != nil { + t.Fatal(err) + } + } + } + } +} + +func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if testing.Short() { + t.Skip("to avoid external network") + } + + gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727 + type ml struct { + c *ipv4.PacketConn + ifi *net.Interface + } + var mlt []*ml + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + ip, ok := nettest.IsMulticastCapable("ip4", &ifi) + if !ok { + continue + } + c, err := net.ListenPacket("udp4", ip.String()+":"+"1024") // unicast address with non-reusable port + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + if err := p.JoinGroup(&ifi, &gaddr); err != nil { + t.Fatal(err) + } + mlt = append(mlt, &ml{p, &ift[i]}) + } + for _, m := range mlt { + if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil { + t.Fatal(err) + } + } +} + +func TestIPSingleRawConnWithSingleGroupListener(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if testing.Short() { + t.Skip("to avoid external network") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") // wildcard address + if err != nil { + t.Fatal(err) + } + defer c.Close() + + r, err := ipv4.NewRawConn(c) + if err != nil { + t.Fatal(err) + } + gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727 + var mift []*net.Interface + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok { + continue + } + if err := r.JoinGroup(&ifi, &gaddr); err != nil { + t.Fatal(err) + } + mift = append(mift, &ift[i]) + } + for _, ifi := range mift { + if err := r.LeaveGroup(ifi, &gaddr); err != nil { + t.Fatal(err) + } + } +} + +func TestIPPerInterfaceSingleRawConnWithSingleGroupListener(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if testing.Short() { + t.Skip("to avoid external network") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727 + type ml struct { + c *ipv4.RawConn + ifi *net.Interface + } + var mlt []*ml + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + ip, ok := nettest.IsMulticastCapable("ip4", &ifi) + if !ok { + continue + } + c, err := net.ListenPacket("ip4:253", ip.String()) // unicast address + if err != nil { + t.Fatal(err) + } + defer c.Close() + r, err := ipv4.NewRawConn(c) + if err != nil { + t.Fatal(err) + } + if err := r.JoinGroup(&ifi, &gaddr); err != nil { + t.Fatal(err) + } + mlt = append(mlt, &ml{r, &ift[i]}) + } + for _, m := range mlt { + if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil { + t.Fatal(err) + } + } +} diff --git a/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go b/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go new file mode 100644 index 0000000..f7efac2 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go @@ -0,0 +1,195 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "net" + "runtime" + "testing" + + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +var packetConnMulticastSocketOptionTests = []struct { + net, proto, addr string + grp, src net.Addr +}{ + {"udp4", "", "224.0.0.0:0", &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}, nil}, // see RFC 4727 + {"ip4", ":icmp", "0.0.0.0", &net.IPAddr{IP: net.IPv4(224, 0, 0, 250)}, nil}, // see RFC 4727 + + {"udp4", "", "232.0.0.0:0", &net.UDPAddr{IP: net.IPv4(232, 0, 1, 249)}, &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771 + {"ip4", ":icmp", "0.0.0.0", &net.IPAddr{IP: net.IPv4(232, 0, 1, 250)}, &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771 +} + +func TestPacketConnMulticastSocketOptions(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9": + t.Skipf("not supported on %s", runtime.GOOS) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + m, ok := nettest.SupportsRawIPSocket() + for _, tt := range packetConnMulticastSocketOptionTests { + if tt.net == "ip4" && !ok { + t.Log(m) + continue + } + c, err := net.ListenPacket(tt.net+tt.proto, tt.addr) + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + defer p.Close() + + if tt.src == nil { + testMulticastSocketOptions(t, p, ifi, tt.grp) + } else { + testSourceSpecificMulticastSocketOptions(t, p, ifi, tt.grp, tt.src) + } + } +} + +var rawConnMulticastSocketOptionTests = []struct { + grp, src net.Addr +}{ + {&net.IPAddr{IP: net.IPv4(224, 0, 0, 250)}, nil}, // see RFC 4727 + + {&net.IPAddr{IP: net.IPv4(232, 0, 1, 250)}, &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771 +} + +func TestRawConnMulticastSocketOptions(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9": + t.Skipf("not supported on %s", runtime.GOOS) + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + for _, tt := range rawConnMulticastSocketOptionTests { + c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + r, err := ipv4.NewRawConn(c) + if err != nil { + t.Fatal(err) + } + defer r.Close() + + if tt.src == nil { + testMulticastSocketOptions(t, r, ifi, tt.grp) + } else { + testSourceSpecificMulticastSocketOptions(t, r, ifi, tt.grp, tt.src) + } + } +} + +type testIPv4MulticastConn interface { + MulticastTTL() (int, error) + SetMulticastTTL(ttl int) error + MulticastLoopback() (bool, error) + SetMulticastLoopback(bool) error + JoinGroup(*net.Interface, net.Addr) error + LeaveGroup(*net.Interface, net.Addr) error + JoinSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error + LeaveSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error + ExcludeSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error + IncludeSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error +} + +func testMulticastSocketOptions(t *testing.T, c testIPv4MulticastConn, ifi *net.Interface, grp net.Addr) { + const ttl = 255 + if err := c.SetMulticastTTL(ttl); err != nil { + t.Error(err) + return + } + if v, err := c.MulticastTTL(); err != nil { + t.Error(err) + return + } else if v != ttl { + t.Errorf("got %v; want %v", v, ttl) + return + } + + for _, toggle := range []bool{true, false} { + if err := c.SetMulticastLoopback(toggle); err != nil { + t.Error(err) + return + } + if v, err := c.MulticastLoopback(); err != nil { + t.Error(err) + return + } else if v != toggle { + t.Errorf("got %v; want %v", v, toggle) + return + } + } + + if err := c.JoinGroup(ifi, grp); err != nil { + t.Error(err) + return + } + if err := c.LeaveGroup(ifi, grp); err != nil { + t.Error(err) + return + } +} + +func testSourceSpecificMulticastSocketOptions(t *testing.T, c testIPv4MulticastConn, ifi *net.Interface, grp, src net.Addr) { + // MCAST_JOIN_GROUP -> MCAST_BLOCK_SOURCE -> MCAST_UNBLOCK_SOURCE -> MCAST_LEAVE_GROUP + if err := c.JoinGroup(ifi, grp); err != nil { + t.Error(err) + return + } + if err := c.ExcludeSourceSpecificGroup(ifi, grp, src); err != nil { + switch runtime.GOOS { + case "freebsd", "linux": + default: // platforms that don't support IGMPv2/3 fail here + t.Logf("not supported on %s", runtime.GOOS) + return + } + t.Error(err) + return + } + if err := c.IncludeSourceSpecificGroup(ifi, grp, src); err != nil { + t.Error(err) + return + } + if err := c.LeaveGroup(ifi, grp); err != nil { + t.Error(err) + return + } + + // MCAST_JOIN_SOURCE_GROUP -> MCAST_LEAVE_SOURCE_GROUP + if err := c.JoinSourceSpecificGroup(ifi, grp, src); err != nil { + t.Error(err) + return + } + if err := c.LeaveSourceSpecificGroup(ifi, grp, src); err != nil { + t.Error(err) + return + } + + // MCAST_JOIN_SOURCE_GROUP -> MCAST_LEAVE_GROUP + if err := c.JoinSourceSpecificGroup(ifi, grp, src); err != nil { + t.Error(err) + return + } + if err := c.LeaveGroup(ifi, grp); err != nil { + t.Error(err) + return + } +} diff --git a/vendor/golang.org/x/net/ipv4/packet.go b/vendor/golang.org/x/net/ipv4/packet.go new file mode 100644 index 0000000..d43723c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/packet.go @@ -0,0 +1,100 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" +) + +// BUG(mikio): On Windows, the ReadFrom and WriteTo methods of RawConn +// are not implemented. + +// A packetHandler represents the IPv4 datagram handler. +type packetHandler struct { + c *net.IPConn + rawOpt +} + +func (c *packetHandler) ok() bool { return c != nil && c.c != nil } + +// ReadFrom reads an IPv4 datagram from the endpoint c, copying the +// datagram into b. It returns the received datagram as the IPv4 +// header h, the payload p and the control message cm. +func (c *packetHandler) ReadFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) { + if !c.ok() { + return nil, nil, nil, syscall.EINVAL + } + oob := newControlMessage(&c.rawOpt) + n, oobn, _, src, err := c.c.ReadMsgIP(b, oob) + if err != nil { + return nil, nil, nil, err + } + var hs []byte + if hs, p, err = slicePacket(b[:n]); err != nil { + return nil, nil, nil, err + } + if h, err = ParseHeader(hs); err != nil { + return nil, nil, nil, err + } + if cm, err = parseControlMessage(oob[:oobn]); err != nil { + return nil, nil, nil, err + } + if src != nil && cm != nil { + cm.Src = src.IP + } + return +} + +func slicePacket(b []byte) (h, p []byte, err error) { + if len(b) < HeaderLen { + return nil, nil, errHeaderTooShort + } + hdrlen := int(b[0]&0x0f) << 2 + return b[:hdrlen], b[hdrlen:], nil +} + +// WriteTo writes an IPv4 datagram through the endpoint c, copying the +// datagram from the IPv4 header h and the payload p. The control +// message cm allows the datagram path and the outgoing interface to be +// specified. Currently only Darwin and Linux support this. The cm +// may be nil if control of the outgoing datagram is not required. +// +// The IPv4 header h must contain appropriate fields that include: +// +// Version = +// Len = +// TOS = +// TotalLen = +// ID = platform sets an appropriate value if ID is zero +// FragOff = +// TTL = +// Protocol = +// Checksum = platform sets an appropriate value if Checksum is zero +// Src = platform sets an appropriate value if Src is nil +// Dst = +// Options = optional +func (c *packetHandler) WriteTo(h *Header, p []byte, cm *ControlMessage) error { + if !c.ok() { + return syscall.EINVAL + } + oob := marshalControlMessage(cm) + wh, err := h.Marshal() + if err != nil { + return err + } + dst := &net.IPAddr{} + if cm != nil { + if ip := cm.Dst.To4(); ip != nil { + dst.IP = ip + } + } + if dst.IP == nil { + dst.IP = h.Dst + } + wh = append(wh, p...) + _, _, err = c.c.WriteMsgIP(wh, oob, dst) + return err +} diff --git a/vendor/golang.org/x/net/ipv4/payload.go b/vendor/golang.org/x/net/ipv4/payload.go new file mode 100644 index 0000000..be130e4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload.go @@ -0,0 +1,18 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import "net" + +// BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo +// methods of PacketConn is not implemented. + +// A payloadHandler represents the IPv4 datagram payload handler. +type payloadHandler struct { + net.PacketConn + rawOpt +} + +func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil } diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg.go b/vendor/golang.org/x/net/ipv4/payload_cmsg.go new file mode 100644 index 0000000..5e6e55c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload_cmsg.go @@ -0,0 +1,81 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !plan9,!windows + +package ipv4 + +import ( + "net" + "syscall" +) + +// ReadFrom reads a payload of the received IPv4 datagram, from the +// endpoint c, copying the payload into b. It returns the number of +// bytes copied into b, the control message cm and the source address +// src of the received datagram. +func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + if !c.ok() { + return 0, nil, nil, syscall.EINVAL + } + oob := newControlMessage(&c.rawOpt) + var oobn int + switch c := c.PacketConn.(type) { + case *net.UDPConn: + if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil { + return 0, nil, nil, err + } + case *net.IPConn: + if sockOpts[ssoStripHeader].name > 0 { + if n, oobn, _, src, err = c.ReadMsgIP(b, oob); err != nil { + return 0, nil, nil, err + } + } else { + nb := make([]byte, maxHeaderLen+len(b)) + if n, oobn, _, src, err = c.ReadMsgIP(nb, oob); err != nil { + return 0, nil, nil, err + } + hdrlen := int(nb[0]&0x0f) << 2 + copy(b, nb[hdrlen:]) + n -= hdrlen + } + default: + return 0, nil, nil, errInvalidConnType + } + if cm, err = parseControlMessage(oob[:oobn]); err != nil { + return 0, nil, nil, err + } + if cm != nil { + cm.Src = netAddrToIP4(src) + } + return +} + +// WriteTo writes a payload of the IPv4 datagram, to the destination +// address dst through the endpoint c, copying the payload from b. It +// returns the number of bytes written. The control message cm allows +// the datagram path and the outgoing interface to be specified. +// Currently only Darwin and Linux support this. The cm may be nil if +// control of the outgoing datagram is not required. +func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + if !c.ok() { + return 0, syscall.EINVAL + } + oob := marshalControlMessage(cm) + if dst == nil { + return 0, errMissingAddress + } + switch c := c.PacketConn.(type) { + case *net.UDPConn: + n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr)) + case *net.IPConn: + n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr)) + default: + return 0, errInvalidConnType + } + if err != nil { + return 0, err + } + return +} diff --git a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go new file mode 100644 index 0000000..6f9d5b0 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go @@ -0,0 +1,42 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build plan9 windows + +package ipv4 + +import ( + "net" + "syscall" +) + +// ReadFrom reads a payload of the received IPv4 datagram, from the +// endpoint c, copying the payload into b. It returns the number of +// bytes copied into b, the control message cm and the source address +// src of the received datagram. +func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + if !c.ok() { + return 0, nil, nil, syscall.EINVAL + } + if n, src, err = c.PacketConn.ReadFrom(b); err != nil { + return 0, nil, nil, err + } + return +} + +// WriteTo writes a payload of the IPv4 datagram, to the destination +// address dst through the endpoint c, copying the payload from b. It +// returns the number of bytes written. The control message cm allows +// the datagram path and the outgoing interface to be specified. +// Currently only Darwin and Linux support this. The cm may be nil if +// control of the outgoing datagram is not required. +func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + if !c.ok() { + return 0, syscall.EINVAL + } + if dst == nil { + return 0, errMissingAddress + } + return c.PacketConn.WriteTo(b, dst) +} diff --git a/vendor/golang.org/x/net/ipv4/readwrite_test.go b/vendor/golang.org/x/net/ipv4/readwrite_test.go new file mode 100644 index 0000000..a2384b8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/readwrite_test.go @@ -0,0 +1,174 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "bytes" + "net" + "runtime" + "strings" + "sync" + "testing" + + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +func benchmarkUDPListener() (net.PacketConn, net.Addr, error) { + c, err := net.ListenPacket("udp4", "127.0.0.1:0") + if err != nil { + return nil, nil, err + } + dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String()) + if err != nil { + c.Close() + return nil, nil, err + } + return c, dst, nil +} + +func BenchmarkReadWriteNetUDP(b *testing.B) { + c, dst, err := benchmarkUDPListener() + if err != nil { + b.Fatal(err) + } + defer c.Close() + + wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128) + b.ResetTimer() + for i := 0; i < b.N; i++ { + benchmarkReadWriteNetUDP(b, c, wb, rb, dst) + } +} + +func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) { + if _, err := c.WriteTo(wb, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(rb); err != nil { + b.Fatal(err) + } +} + +func BenchmarkReadWriteIPv4UDP(b *testing.B) { + c, dst, err := benchmarkUDPListener() + if err != nil { + b.Fatal(err) + } + defer c.Close() + + p := ipv4.NewPacketConn(c) + defer p.Close() + cf := ipv4.FlagTTL | ipv4.FlagInterface + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + + wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128) + b.ResetTimer() + for i := 0; i < b.N; i++ { + benchmarkReadWriteIPv4UDP(b, p, wb, rb, dst, ifi) + } +} + +func benchmarkReadWriteIPv4UDP(b *testing.B, p *ipv4.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) { + cm := ipv4.ControlMessage{TTL: 1} + if ifi != nil { + cm.IfIndex = ifi.Index + } + if n, err := p.WriteTo(wb, &cm, dst); err != nil { + b.Fatal(err) + } else if n != len(wb) { + b.Fatalf("got %v; want %v", n, len(wb)) + } + if _, _, _, err := p.ReadFrom(rb); err != nil { + b.Fatal(err) + } +} + +func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + + c, err := net.ListenPacket("udp4", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + defer p.Close() + + dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface + wb := []byte("HELLO-R-U-THERE") + + if err := p.SetControlMessage(cf, true); err != nil { // probe before test + if nettest.ProtocolNotSupported(err) { + t.Skipf("not supported on %s", runtime.GOOS) + } + t.Fatal(err) + } + + var wg sync.WaitGroup + reader := func() { + defer wg.Done() + rb := make([]byte, 128) + if n, cm, _, err := p.ReadFrom(rb); err != nil { + t.Error(err) + return + } else if !bytes.Equal(rb[:n], wb) { + t.Errorf("got %v; want %v", rb[:n], wb) + return + } else { + s := cm.String() + if strings.Contains(s, ",") { + t.Errorf("should be space-separated values: %s", s) + } + } + } + writer := func(toggle bool) { + defer wg.Done() + cm := ipv4.ControlMessage{ + Src: net.IPv4(127, 0, 0, 1), + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if err := p.SetControlMessage(cf, toggle); err != nil { + t.Error(err) + return + } + if n, err := p.WriteTo(wb, &cm, dst); err != nil { + t.Error(err) + return + } else if n != len(wb) { + t.Errorf("short write: %v", n) + return + } + } + + const N = 10 + wg.Add(N) + for i := 0; i < N; i++ { + go reader() + } + wg.Add(2 * N) + for i := 0; i < 2*N; i++ { + go writer(i%2 != 0) + } + wg.Add(N) + for i := 0; i < N; i++ { + go reader() + } + wg.Wait() +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt.go b/vendor/golang.org/x/net/ipv4/sockopt.go new file mode 100644 index 0000000..ace37d3 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt.go @@ -0,0 +1,46 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +// Sticky socket options +const ( + ssoTOS = iota // header field for unicast packet + ssoTTL // header field for unicast packet + ssoMulticastTTL // header field for multicast packet + ssoMulticastInterface // outbound interface for multicast packet + ssoMulticastLoopback // loopback for multicast packet + ssoReceiveTTL // header field on received packet + ssoReceiveDst // header field on received packet + ssoReceiveInterface // inbound interface on received packet + ssoPacketInfo // incbound or outbound packet path + ssoHeaderPrepend // ipv4 header prepend + ssoStripHeader // strip ipv4 header + ssoICMPFilter // icmp filter + ssoJoinGroup // any-source multicast + ssoLeaveGroup // any-source multicast + ssoJoinSourceGroup // source-specific multicast + ssoLeaveSourceGroup // source-specific multicast + ssoBlockSourceGroup // any-source or source-specific multicast + ssoUnblockSourceGroup // any-source or source-specific multicast + ssoMax +) + +// Sticky socket option value types +const ( + ssoTypeByte = iota + 1 + ssoTypeInt + ssoTypeInterface + ssoTypeICMPFilter + ssoTypeIPMreq + ssoTypeIPMreqn + ssoTypeGroupReq + ssoTypeGroupSourceReq +) + +// A sockOpt represents a binding for sticky socket option. +type sockOpt struct { + name int // option name, must be equal or greater than 1 + typ int // option value type, must be equal or greater than 1 +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go new file mode 100644 index 0000000..8092f1d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go @@ -0,0 +1,83 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd solaris windows + +package ipv4 + +import "net" + +func setIPMreqInterface(mreq *ipMreq, ifi *net.Interface) error { + if ifi == nil { + return nil + } + ifat, err := ifi.Addrs() + if err != nil { + return err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip := ifa.IP.To4(); ip != nil { + copy(mreq.Interface[:], ip) + return nil + } + case *net.IPNet: + if ip := ifa.IP.To4(); ip != nil { + copy(mreq.Interface[:], ip) + return nil + } + } + } + return errNoSuchInterface +} + +func netIP4ToInterface(ip net.IP) (*net.Interface, error) { + ift, err := net.Interfaces() + if err != nil { + return nil, err + } + for _, ifi := range ift { + ifat, err := ifi.Addrs() + if err != nil { + return nil, err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip.Equal(ifa.IP) { + return &ifi, nil + } + case *net.IPNet: + if ip.Equal(ifa.IP) { + return &ifi, nil + } + } + } + } + return nil, errNoSuchInterface +} + +func netInterfaceToIP4(ifi *net.Interface) (net.IP, error) { + if ifi == nil { + return net.IPv4zero.To4(), nil + } + ifat, err := ifi.Addrs() + if err != nil { + return nil, err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip := ifa.IP.To4(); ip != nil { + return ip, nil + } + case *net.IPNet: + if ip := ifa.IP.To4(); ip != nil { + return ip, nil + } + } + } + return nil, errNoSuchInterface +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go new file mode 100644 index 0000000..2259a39 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go @@ -0,0 +1,46 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd solaris windows + +package ipv4 + +import ( + "net" + "os" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +func setsockoptIPMreq(s uintptr, name int, ifi *net.Interface, grp net.IP) error { + mreq := ipMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}} + if err := setIPMreqInterface(&mreq, ifi); err != nil { + return err + } + return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreq), sizeofIPMreq)) +} + +func getsockoptInterface(s uintptr, name int) (*net.Interface, error) { + var b [4]byte + l := uint32(4) + if err := getsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&b[0]), &l); err != nil { + return nil, os.NewSyscallError("getsockopt", err) + } + ifi, err := netIP4ToInterface(net.IPv4(b[0], b[1], b[2], b[3])) + if err != nil { + return nil, err + } + return ifi, nil +} + +func setsockoptInterface(s uintptr, name int, ifi *net.Interface) error { + ip, err := netInterfaceToIP4(ifi) + if err != nil { + return err + } + var b [4]byte + copy(b[:], ip) + return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&b[0]), uint32(4))) +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go new file mode 100644 index 0000000..e655635 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go @@ -0,0 +1,21 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!windows + +package ipv4 + +import "net" + +func setsockoptIPMreq(s uintptr, name int, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} + +func getsockoptInterface(s uintptr, name int) (*net.Interface, error) { + return nil, errOpNoSupport +} + +func setsockoptInterface(s uintptr, name int, ifi *net.Interface) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_stub.go new file mode 100644 index 0000000..0c7f0f8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_stub.go @@ -0,0 +1,17 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!freebsd,!linux + +package ipv4 + +import "net" + +func getsockoptIPMreqn(s uintptr, name int) (*net.Interface, error) { + return nil, errOpNoSupport +} + +func setsockoptIPMreqn(s uintptr, name int, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go new file mode 100644 index 0000000..92daffb --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go @@ -0,0 +1,42 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux + +package ipv4 + +import ( + "net" + "os" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +func getsockoptIPMreqn(s uintptr, name int) (*net.Interface, error) { + var mreqn ipMreqn + l := uint32(sizeofIPMreqn) + if err := getsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), &l); err != nil { + return nil, os.NewSyscallError("getsockopt", err) + } + if mreqn.Ifindex == 0 { + return nil, nil + } + ifi, err := net.InterfaceByIndex(int(mreqn.Ifindex)) + if err != nil { + return nil, err + } + return ifi, nil +} + +func setsockoptIPMreqn(s uintptr, name int, ifi *net.Interface, grp net.IP) error { + var mreqn ipMreqn + if ifi != nil { + mreqn.Ifindex = int32(ifi.Index) + } + if grp != nil { + mreqn.Multiaddr = [4]byte{grp[0], grp[1], grp[2], grp[3]} + } + return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), sizeofIPMreqn)) +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_posix.go b/vendor/golang.org/x/net/ipv4/sockopt_posix.go new file mode 100644 index 0000000..d806803 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_posix.go @@ -0,0 +1,122 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv4 + +import ( + "net" + "os" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +func getInt(s uintptr, opt *sockOpt) (int, error) { + if opt.name < 1 || (opt.typ != ssoTypeByte && opt.typ != ssoTypeInt) { + return 0, errOpNoSupport + } + var i int32 + var b byte + p := unsafe.Pointer(&i) + l := uint32(4) + if opt.typ == ssoTypeByte { + p = unsafe.Pointer(&b) + l = 1 + } + if err := getsockopt(s, iana.ProtocolIP, opt.name, p, &l); err != nil { + return 0, os.NewSyscallError("getsockopt", err) + } + if opt.typ == ssoTypeByte { + return int(b), nil + } + return int(i), nil +} + +func setInt(s uintptr, opt *sockOpt, v int) error { + if opt.name < 1 || (opt.typ != ssoTypeByte && opt.typ != ssoTypeInt) { + return errOpNoSupport + } + i := int32(v) + var b byte + p := unsafe.Pointer(&i) + l := uint32(4) + if opt.typ == ssoTypeByte { + b = byte(v) + p = unsafe.Pointer(&b) + l = 1 + } + return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, opt.name, p, l)) +} + +func getInterface(s uintptr, opt *sockOpt) (*net.Interface, error) { + if opt.name < 1 { + return nil, errOpNoSupport + } + switch opt.typ { + case ssoTypeInterface: + return getsockoptInterface(s, opt.name) + case ssoTypeIPMreqn: + return getsockoptIPMreqn(s, opt.name) + default: + return nil, errOpNoSupport + } +} + +func setInterface(s uintptr, opt *sockOpt, ifi *net.Interface) error { + if opt.name < 1 { + return errOpNoSupport + } + switch opt.typ { + case ssoTypeInterface: + return setsockoptInterface(s, opt.name, ifi) + case ssoTypeIPMreqn: + return setsockoptIPMreqn(s, opt.name, ifi, nil) + default: + return errOpNoSupport + } +} + +func getICMPFilter(s uintptr, opt *sockOpt) (*ICMPFilter, error) { + if opt.name < 1 || opt.typ != ssoTypeICMPFilter { + return nil, errOpNoSupport + } + var f ICMPFilter + l := uint32(sizeofICMPFilter) + if err := getsockopt(s, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.icmpFilter), &l); err != nil { + return nil, os.NewSyscallError("getsockopt", err) + } + return &f, nil +} + +func setICMPFilter(s uintptr, opt *sockOpt, f *ICMPFilter) error { + if opt.name < 1 || opt.typ != ssoTypeICMPFilter { + return errOpNoSupport + } + return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.icmpFilter), sizeofICMPFilter)) +} + +func setGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error { + if opt.name < 1 { + return errOpNoSupport + } + switch opt.typ { + case ssoTypeIPMreq: + return setsockoptIPMreq(s, opt.name, ifi, grp) + case ssoTypeIPMreqn: + return setsockoptIPMreqn(s, opt.name, ifi, grp) + case ssoTypeGroupReq: + return setsockoptGroupReq(s, opt.name, ifi, grp) + default: + return errOpNoSupport + } +} + +func setSourceGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error { + if opt.name < 1 || opt.typ != ssoTypeGroupSourceReq { + return errOpNoSupport + } + return setsockoptGroupSourceReq(s, opt.name, ifi, grp, src) +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go new file mode 100644 index 0000000..0287396 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go @@ -0,0 +1,17 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!freebsd,!linux,!solaris + +package ipv4 + +import "net" + +func setsockoptGroupReq(s uintptr, name int, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} + +func setsockoptGroupSourceReq(s uintptr, name int, ifi *net.Interface, grp, src net.IP) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go b/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go new file mode 100644 index 0000000..c9af55b --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go @@ -0,0 +1,61 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux solaris + +package ipv4 + +import ( + "net" + "os" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +var freebsd32o64 bool + +func setsockoptGroupReq(s uintptr, name int, ifi *net.Interface, grp net.IP) error { + var gr groupReq + if ifi != nil { + gr.Interface = uint32(ifi.Index) + } + gr.setGroup(grp) + var p unsafe.Pointer + var l uint32 + if freebsd32o64 { + var d [sizeofGroupReq + 4]byte + s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + p = unsafe.Pointer(&d[0]) + l = sizeofGroupReq + 4 + } else { + p = unsafe.Pointer(&gr) + l = sizeofGroupReq + } + return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, p, l)) +} + +func setsockoptGroupSourceReq(s uintptr, name int, ifi *net.Interface, grp, src net.IP) error { + var gsr groupSourceReq + if ifi != nil { + gsr.Interface = uint32(ifi.Index) + } + gsr.setSourceGroup(grp, src) + var p unsafe.Pointer + var l uint32 + if freebsd32o64 { + var d [sizeofGroupSourceReq + 4]byte + s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + p = unsafe.Pointer(&d[0]) + l = sizeofGroupSourceReq + 4 + } else { + p = unsafe.Pointer(&gsr) + l = sizeofGroupSourceReq + } + return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, p, l)) +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_stub.go new file mode 100644 index 0000000..4ff6099 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_stub.go @@ -0,0 +1,11 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv4 + +func setInt(s uintptr, opt *sockOpt, v int) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv4/sys_bsd.go b/vendor/golang.org/x/net/ipv4/sys_bsd.go new file mode 100644 index 0000000..203033d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_bsd.go @@ -0,0 +1,34 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build dragonfly netbsd + +package ipv4 + +import ( + "net" + "syscall" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTOS: {sysIP_TOS, ssoTypeInt}, + ssoTTL: {sysIP_TTL, ssoTypeInt}, + ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte}, + ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt}, + ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt}, + ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt}, + ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt}, + ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq}, + ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq}, + } +) diff --git a/vendor/golang.org/x/net/ipv4/sys_darwin.go b/vendor/golang.org/x/net/ipv4/sys_darwin.go new file mode 100644 index 0000000..abfffca --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_darwin.go @@ -0,0 +1,97 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "strconv" + "strings" + "syscall" + "unsafe" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTOS: {sysIP_TOS, ssoTypeInt}, + ssoTTL: {sysIP_TTL, ssoTypeInt}, + ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte}, + ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt}, + ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt}, + ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt}, + ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt}, + ssoStripHeader: {sysIP_STRIPHDR, ssoTypeInt}, + ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq}, + ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq}, + } +) + +func init() { + // Seems like kern.osreldate is veiled on latest OS X. We use + // kern.osrelease instead. + s, err := syscall.Sysctl("kern.osrelease") + if err != nil { + return + } + ss := strings.Split(s, ".") + if len(ss) == 0 { + return + } + // The IP_PKTINFO and protocol-independent multicast API were + // introduced in OS X 10.7 (Darwin 11). But it looks like + // those features require OS X 10.8 (Darwin 12) or above. + // See http://support.apple.com/kb/HT1633. + if mjver, err := strconv.Atoi(ss[0]); err != nil || mjver < 12 { + return + } + ctlOpts[ctlPacketInfo].name = sysIP_PKTINFO + ctlOpts[ctlPacketInfo].length = sizeofInetPktinfo + ctlOpts[ctlPacketInfo].marshal = marshalPacketInfo + ctlOpts[ctlPacketInfo].parse = parsePacketInfo + sockOpts[ssoPacketInfo].name = sysIP_RECVPKTINFO + sockOpts[ssoPacketInfo].typ = ssoTypeInt + sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn + sockOpts[ssoJoinGroup].name = sysMCAST_JOIN_GROUP + sockOpts[ssoJoinGroup].typ = ssoTypeGroupReq + sockOpts[ssoLeaveGroup].name = sysMCAST_LEAVE_GROUP + sockOpts[ssoLeaveGroup].typ = ssoTypeGroupReq + sockOpts[ssoJoinSourceGroup].name = sysMCAST_JOIN_SOURCE_GROUP + sockOpts[ssoJoinSourceGroup].typ = ssoTypeGroupSourceReq + sockOpts[ssoLeaveSourceGroup].name = sysMCAST_LEAVE_SOURCE_GROUP + sockOpts[ssoLeaveSourceGroup].typ = ssoTypeGroupSourceReq + sockOpts[ssoBlockSourceGroup].name = sysMCAST_BLOCK_SOURCE + sockOpts[ssoBlockSourceGroup].typ = ssoTypeGroupSourceReq + sockOpts[ssoUnblockSourceGroup].name = sysMCAST_UNBLOCK_SOURCE + sockOpts[ssoUnblockSourceGroup].typ = ssoTypeGroupSourceReq +} + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_freebsd.go b/vendor/golang.org/x/net/ipv4/sys_freebsd.go new file mode 100644 index 0000000..fceffe9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_freebsd.go @@ -0,0 +1,73 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "runtime" + "strings" + "syscall" + "unsafe" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTOS: {sysIP_TOS, ssoTypeInt}, + ssoTTL: {sysIP_TTL, ssoTypeInt}, + ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte}, + ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt}, + ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt}, + ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt}, + ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt}, + ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq}, + ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq}, + ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq}, + } +) + +func init() { + freebsdVersion, _ = syscall.SysctlUint32("kern.osreldate") + if freebsdVersion >= 1000000 { + sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn + } + if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" { + archs, _ := syscall.Sysctl("kern.supported_archs") + for _, s := range strings.Fields(archs) { + if s == "amd64" { + freebsd32o64 = true + break + } + } + } +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gr.Group)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gsr.Group)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(&gsr.Source)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_linux.go b/vendor/golang.org/x/net/ipv4/sys_linux.go new file mode 100644 index 0000000..c6c2a50 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_linux.go @@ -0,0 +1,55 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_TTL, 1, marshalTTL, parseTTL}, + ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTOS: {sysIP_TOS, ssoTypeInt}, + ssoTTL: {sysIP_TTL, ssoTypeInt}, + ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt}, + ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeIPMreqn}, + ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt}, + ssoPacketInfo: {sysIP_PKTINFO, ssoTypeInt}, + ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt}, + ssoICMPFilter: {sysICMP_FILTER, ssoTypeICMPFilter}, + ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq}, + ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq}, + ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gr.Group)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gsr.Group)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(&gsr.Source)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_linux_386.s b/vendor/golang.org/x/net/ipv4/sys_linux_386.s new file mode 100644 index 0000000..b85551a --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_linux_386.s @@ -0,0 +1,8 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) diff --git a/vendor/golang.org/x/net/ipv4/sys_openbsd.go b/vendor/golang.org/x/net/ipv4/sys_openbsd.go new file mode 100644 index 0000000..d78083a --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_openbsd.go @@ -0,0 +1,32 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTOS: {sysIP_TOS, ssoTypeInt}, + ssoTTL: {sysIP_TTL, ssoTypeInt}, + ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte}, + ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeByte}, + ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt}, + ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt}, + ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt}, + ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt}, + ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq}, + ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq}, + } +) diff --git a/vendor/golang.org/x/net/ipv4/sys_solaris.go b/vendor/golang.org/x/net/ipv4/sys_solaris.go new file mode 100644 index 0000000..879f39e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_solaris.go @@ -0,0 +1,54 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 4, marshalTTL, parseTTL}, + ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTOS: {sysIP_TOS, ssoTypeInt}, + ssoTTL: {sysIP_TTL, ssoTypeInt}, + ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte}, + ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeByte}, + ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt}, + ssoPacketInfo: {sysIP_RECVPKTINFO, ssoTypeInt}, + ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt}, + ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq}, + ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq}, + ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 260)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s b/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s new file mode 100644 index 0000000..39d76af --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s @@ -0,0 +1,8 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) diff --git a/vendor/golang.org/x/net/ipv4/sys_stub.go b/vendor/golang.org/x/net/ipv4/sys_stub.go new file mode 100644 index 0000000..d6dd812 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_stub.go @@ -0,0 +1,13 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv4 + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = [ssoMax]sockOpt{} +) diff --git a/vendor/golang.org/x/net/ipv4/sys_windows.go b/vendor/golang.org/x/net/ipv4/sys_windows.go new file mode 100644 index 0000000..fac00bd --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_windows.go @@ -0,0 +1,62 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +const ( + // See ws2tcpip.h. + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_DONTFRAGMENT = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0xf + sysIP_DROP_SOURCE_MEMBERSHIP = 0x10 + sysIP_PKTINFO = 0x13 + + sizeofInetPktinfo = 0x8 + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc +) + +type inetPktinfo struct { + Addr [4]byte + Ifindex int32 +} + +type ipMreq struct { + Multiaddr [4]byte + Interface [4]byte +} + +type ipMreqSource struct { + Multiaddr [4]byte + Sourceaddr [4]byte + Interface [4]byte +} + +// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs.85).aspx +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = [ssoMax]sockOpt{ + ssoTOS: {sysIP_TOS, ssoTypeInt}, + ssoTTL: {sysIP_TTL, ssoTypeInt}, + ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt}, + ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt}, + ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt}, + ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq}, + ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} diff --git a/vendor/golang.org/x/net/ipv4/syscall_linux_386.go b/vendor/golang.org/x/net/ipv4/syscall_linux_386.go new file mode 100644 index 0000000..84f60bf --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/syscall_linux_386.go @@ -0,0 +1,31 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "syscall" + "unsafe" +) + +const ( + sysGETSOCKOPT = 0xf + sysSETSOCKOPT = 0xe +) + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) + +func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { + if _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 { + return error(errno) + } + return nil +} + +func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error { + if _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 { + return error(errno) + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/syscall_solaris.go b/vendor/golang.org/x/net/ipv4/syscall_solaris.go new file mode 100644 index 0000000..8b0e1e4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/syscall_solaris.go @@ -0,0 +1,38 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" + +//go:linkname procGetsockopt libc___xnet_getsockopt +//go:linkname procSetsockopt libc_setsockopt + +var ( + procGetsockopt uintptr + procSetsockopt uintptr +) + +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) + +func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { + _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0) + if errno != 0 { + return error(errno) + } + return nil +} + +func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error { + if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 { + return error(errno) + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/syscall_unix.go b/vendor/golang.org/x/net/ipv4/syscall_unix.go new file mode 100644 index 0000000..d952763 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/syscall_unix.go @@ -0,0 +1,26 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux,!386 netbsd openbsd + +package ipv4 + +import ( + "syscall" + "unsafe" +) + +func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { + if _, _, errno := syscall.Syscall6(syscall.SYS_GETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 { + return error(errno) + } + return nil +} + +func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error { + if _, _, errno := syscall.Syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 { + return error(errno) + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/syscall_windows.go b/vendor/golang.org/x/net/ipv4/syscall_windows.go new file mode 100644 index 0000000..0f42d22 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/syscall_windows.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "syscall" + "unsafe" +) + +func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { + return syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), (*int32)(unsafe.Pointer(l))) +} + +func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error { + return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), int32(l)) +} diff --git a/vendor/golang.org/x/net/ipv4/unicast_test.go b/vendor/golang.org/x/net/ipv4/unicast_test.go new file mode 100644 index 0000000..bce8763 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/unicast_test.go @@ -0,0 +1,250 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "bytes" + "net" + "os" + "runtime" + "testing" + "time" + + "golang.org/x/net/icmp" + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +func TestPacketConnReadWriteUnicastUDP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + c, err := net.ListenPacket("udp4", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + p := ipv4.NewPacketConn(c) + defer p.Close() + cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface + wb := []byte("HELLO-R-U-THERE") + + for i, toggle := range []bool{true, false, true} { + if err := p.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + p.SetTTL(i + 1) + if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if n, err := p.WriteTo(wb, nil, dst); err != nil { + t.Fatal(err) + } else if n != len(wb) { + t.Fatalf("got %v; want %v", n, len(wb)) + } + rb := make([]byte, 128) + if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if n, _, _, err := p.ReadFrom(rb); err != nil { + t.Fatal(err) + } else if !bytes.Equal(rb[:n], wb) { + t.Fatalf("got %v; want %v", rb[:n], wb) + } + } +} + +func TestPacketConnReadWriteUnicastICMP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + dst, err := net.ResolveIPAddr("ip4", "127.0.0.1") + if err != nil { + t.Fatal(err) + } + p := ipv4.NewPacketConn(c) + defer p.Close() + cf := ipv4.FlagDst | ipv4.FlagInterface + if runtime.GOOS != "solaris" { + // Solaris never allows to modify ICMP properties. + cf |= ipv4.FlagTTL + } + + for i, toggle := range []bool{true, false, true} { + wb, err := (&icmp.Message{ + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, Seq: i + 1, + Data: []byte("HELLO-R-U-THERE"), + }, + }).Marshal(nil) + if err != nil { + t.Fatal(err) + } + if err := p.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + p.SetTTL(i + 1) + if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if n, err := p.WriteTo(wb, nil, dst); err != nil { + t.Fatal(err) + } else if n != len(wb) { + t.Fatalf("got %v; want %v", n, len(wb)) + } + rb := make([]byte, 128) + loop: + if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if n, _, _, err := p.ReadFrom(rb); err != nil { + switch runtime.GOOS { + case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } else { + m, err := icmp.ParseMessage(iana.ProtocolICMP, rb[:n]) + if err != nil { + t.Fatal(err) + } + if runtime.GOOS == "linux" && m.Type == ipv4.ICMPTypeEcho { + // On Linux we must handle own sent packets. + goto loop + } + if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 { + t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0) + } + } + } +} + +func TestRawConnReadWriteUnicastICMP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + dst, err := net.ResolveIPAddr("ip4", "127.0.0.1") + if err != nil { + t.Fatal(err) + } + r, err := ipv4.NewRawConn(c) + if err != nil { + t.Fatal(err) + } + defer r.Close() + cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface + + for i, toggle := range []bool{true, false, true} { + wb, err := (&icmp.Message{ + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, Seq: i + 1, + Data: []byte("HELLO-R-U-THERE"), + }, + }).Marshal(nil) + if err != nil { + t.Fatal(err) + } + wh := &ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TOS: i + 1, + TotalLen: ipv4.HeaderLen + len(wb), + TTL: i + 1, + Protocol: 1, + Dst: dst.IP, + } + if err := r.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + if err := r.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if err := r.WriteTo(wh, wb, nil); err != nil { + t.Fatal(err) + } + rb := make([]byte, ipv4.HeaderLen+128) + loop: + if err := r.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if _, b, _, err := r.ReadFrom(rb); err != nil { + switch runtime.GOOS { + case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } else { + m, err := icmp.ParseMessage(iana.ProtocolICMP, b) + if err != nil { + t.Fatal(err) + } + if runtime.GOOS == "linux" && m.Type == ipv4.ICMPTypeEcho { + // On Linux we must handle own sent packets. + goto loop + } + if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 { + t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0) + } + } + } +} diff --git a/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go b/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go new file mode 100644 index 0000000..db5213b --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go @@ -0,0 +1,148 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4_test + +import ( + "net" + "runtime" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +func TestConnUnicastSocketOptions(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + ln, err := net.Listen("tcp4", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + errc := make(chan error, 1) + go func() { + c, err := ln.Accept() + if err != nil { + errc <- err + return + } + errc <- c.Close() + }() + + c, err := net.Dial("tcp4", ln.Addr().String()) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + testUnicastSocketOptions(t, ipv4.NewConn(c)) + + if err := <-errc; err != nil { + t.Errorf("server: %v", err) + } +} + +var packetConnUnicastSocketOptionTests = []struct { + net, proto, addr string +}{ + {"udp4", "", "127.0.0.1:0"}, + {"ip4", ":icmp", "127.0.0.1"}, +} + +func TestPacketConnUnicastSocketOptions(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + m, ok := nettest.SupportsRawIPSocket() + for _, tt := range packetConnUnicastSocketOptionTests { + if tt.net == "ip4" && !ok { + t.Log(m) + continue + } + c, err := net.ListenPacket(tt.net+tt.proto, tt.addr) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + testUnicastSocketOptions(t, ipv4.NewPacketConn(c)) + } +} + +func TestRawConnUnicastSocketOptions(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + c, err := net.ListenPacket("ip4:icmp", "127.0.0.1") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + r, err := ipv4.NewRawConn(c) + if err != nil { + t.Fatal(err) + } + + testUnicastSocketOptions(t, r) +} + +type testIPv4UnicastConn interface { + TOS() (int, error) + SetTOS(int) error + TTL() (int, error) + SetTTL(int) error +} + +func testUnicastSocketOptions(t *testing.T, c testIPv4UnicastConn) { + tos := iana.DiffServCS0 | iana.NotECNTransport + switch runtime.GOOS { + case "windows": + // IP_TOS option is supported on Windows 8 and beyond. + t.Skipf("not supported on %s", runtime.GOOS) + } + + if err := c.SetTOS(tos); err != nil { + t.Fatal(err) + } + if v, err := c.TOS(); err != nil { + t.Fatal(err) + } else if v != tos { + t.Fatalf("got %v; want %v", v, tos) + } + const ttl = 255 + if err := c.SetTTL(ttl); err != nil { + t.Fatal(err) + } + if v, err := c.TTL(); err != nil { + t.Fatal(err) + } else if v != ttl { + t.Fatalf("got %v; want %v", v, ttl) + } +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_darwin.go b/vendor/golang.org/x/net/ipv4/zsys_darwin.go new file mode 100644 index 0000000..c07cc88 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_darwin.go @@ -0,0 +1,99 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_STRIPHDR = 0x17 + sysIP_RECVTTL = 0x18 + sysIP_BOUND_IF = 0x19 + sysIP_PKTINFO = 0x1a + sysIP_RECVPKTINFO = 0x1a + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_MULTICAST_IFINDEX = 0x42 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type inetPktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [128]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [128]byte + Pad_cgo_1 [128]byte +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go b/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go new file mode 100644 index 0000000..c4365e9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go @@ -0,0 +1,31 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_dragonfly.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_RECVTTL = 0x41 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go new file mode 100644 index 0000000..8c4aec9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go @@ -0,0 +1,93 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_SENDSRCADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_ONESBCAST = 0x17 + sysIP_BINDANY = 0x18 + sysIP_RECVTTL = 0x41 + sysIP_MINTTL = 0x42 + sysIP_DONTFRAG = 0x43 + sysIP_RECVTOS = 0x44 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go new file mode 100644 index 0000000..4b10b7c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go @@ -0,0 +1,95 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_SENDSRCADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_ONESBCAST = 0x17 + sysIP_BINDANY = 0x18 + sysIP_RECVTTL = 0x41 + sysIP_MINTTL = 0x42 + sysIP_DONTFRAG = 0x43 + sysIP_RECVTOS = 0x44 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go new file mode 100644 index 0000000..4b10b7c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go @@ -0,0 +1,95 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_SENDSRCADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_ONESBCAST = 0x17 + sysIP_BINDANY = 0x18 + sysIP_RECVTTL = 0x41 + sysIP_MINTTL = 0x42 + sysIP_DONTFRAG = 0x43 + sysIP_RECVTOS = 0x44 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go new file mode 100644 index 0000000..4da6720 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go @@ -0,0 +1,146 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go new file mode 100644 index 0000000..65945bb --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go new file mode 100644 index 0000000..4da6720 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go @@ -0,0 +1,146 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go new file mode 100644 index 0000000..65945bb --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go new file mode 100644 index 0000000..4da6720 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go @@ -0,0 +1,146 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go new file mode 100644 index 0000000..65945bb --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go new file mode 100644 index 0000000..65945bb --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go new file mode 100644 index 0000000..4da6720 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go @@ -0,0 +1,146 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go new file mode 100644 index 0000000..b825a18 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go @@ -0,0 +1,146 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]uint8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go new file mode 100644 index 0000000..65945bb --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go new file mode 100644 index 0000000..65945bb --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go new file mode 100644 index 0000000..65945bb --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_netbsd.go b/vendor/golang.org/x/net/ipv4/zsys_netbsd.go new file mode 100644 index 0000000..fd3624d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_netbsd.go @@ -0,0 +1,30 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_RECVTTL = 0x17 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_openbsd.go b/vendor/golang.org/x/net/ipv4/zsys_openbsd.go new file mode 100644 index 0000000..12f36be --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_openbsd.go @@ -0,0 +1,30 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x1e + sysIP_RECVTTL = 0x1f + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_solaris.go b/vendor/golang.org/x/net/ipv4/zsys_solaris.go new file mode 100644 index 0000000..0a3875c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_solaris.go @@ -0,0 +1,100 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_solaris.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x9 + sysIP_RECVSLLA = 0xa + sysIP_RECVTTL = 0xb + + sysIP_MULTICAST_IF = 0x10 + sysIP_MULTICAST_TTL = 0x11 + sysIP_MULTICAST_LOOP = 0x12 + sysIP_ADD_MEMBERSHIP = 0x13 + sysIP_DROP_MEMBERSHIP = 0x14 + sysIP_BLOCK_SOURCE = 0x15 + sysIP_UNBLOCK_SOURCE = 0x16 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x17 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x18 + sysIP_NEXTHOP = 0x19 + + sysIP_PKTINFO = 0x1a + sysIP_RECVPKTINFO = 0x1a + sysIP_DONTFRAG = 0x1b + + sysIP_BOUND_IF = 0x41 + sysIP_UNSPEC_SRC = 0x42 + sysIP_BROADCAST_TTL = 0x43 + sysIP_DHCPINIT_IF = 0x45 + + sysIP_REUSEADDR = 0x104 + sysIP_DONTROUTE = 0x105 + sysIP_BROADCAST = 0x106 + + sysMCAST_JOIN_GROUP = 0x29 + sysMCAST_LEAVE_GROUP = 0x2a + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_JOIN_SOURCE_GROUP = 0x2d + sysMCAST_LEAVE_SOURCE_GROUP = 0x2e + + sizeofSockaddrStorage = 0x100 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x104 + sizeofGroupSourceReq = 0x204 +) + +type sockaddrStorage struct { + Family uint16 + X_ss_pad1 [6]int8 + X_ss_align float64 + X_ss_pad2 [240]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type inetPktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [256]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [256]byte + Pad_cgo_1 [256]byte +} diff --git a/vendor/golang.org/x/net/ipv6/bpf_test.go b/vendor/golang.org/x/net/ipv6/bpf_test.go new file mode 100644 index 0000000..8253e1f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/bpf_test.go @@ -0,0 +1,96 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "net" + "runtime" + "testing" + "time" + + "golang.org/x/net/bpf" + "golang.org/x/net/ipv6" +) + +func TestBPF(t *testing.T) { + if runtime.GOOS != "linux" { + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + l, err := net.ListenPacket("udp6", "[::1]:0") + if err != nil { + t.Fatal(err) + } + defer l.Close() + + p := ipv6.NewPacketConn(l) + + // This filter accepts UDP packets whose first payload byte is + // even. + prog, err := bpf.Assemble([]bpf.Instruction{ + // Load the first byte of the payload (skipping UDP header). + bpf.LoadAbsolute{Off: 8, Size: 1}, + // Select LSB of the byte. + bpf.ALUOpConstant{Op: bpf.ALUOpAnd, Val: 1}, + // Byte is even? + bpf.JumpIf{Cond: bpf.JumpEqual, Val: 0, SkipFalse: 1}, + // Accept. + bpf.RetConstant{Val: 4096}, + // Ignore. + bpf.RetConstant{Val: 0}, + }) + if err != nil { + t.Fatalf("compiling BPF: %s", err) + } + + if err = p.SetBPF(prog); err != nil { + t.Fatalf("attaching filter to Conn: %s", err) + } + + s, err := net.Dial("udp6", l.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + defer s.Close() + go func() { + for i := byte(0); i < 10; i++ { + s.Write([]byte{i}) + } + }() + + l.SetDeadline(time.Now().Add(2 * time.Second)) + seen := make([]bool, 5) + for { + var b [512]byte + n, _, err := l.ReadFrom(b[:]) + if err != nil { + t.Fatalf("reading from listener: %s", err) + } + if n != 1 { + t.Fatalf("unexpected packet length, want 1, got %d", n) + } + if b[0] >= 10 { + t.Fatalf("unexpected byte, want 0-9, got %d", b[0]) + } + if b[0]%2 != 0 { + t.Fatalf("got odd byte %d, wanted only even bytes", b[0]) + } + seen[b[0]/2] = true + + seenAll := true + for _, v := range seen { + if !v { + seenAll = false + break + } + } + if seenAll { + break + } + } +} diff --git a/vendor/golang.org/x/net/ipv6/bpfopt_linux.go b/vendor/golang.org/x/net/ipv6/bpfopt_linux.go new file mode 100644 index 0000000..daf7ea8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/bpfopt_linux.go @@ -0,0 +1,28 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "os" + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/netreflect" +) + +// SetBPF attaches a BPF program to the connection. +// +// Only supported on Linux. +func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error { + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + prog := sockFProg{ + Len: uint16(len(filter)), + Filter: (*sockFilter)(unsafe.Pointer(&filter[0])), + } + return os.NewSyscallError("setsockopt", setsockopt(s, sysSOL_SOCKET, sysSO_ATTACH_FILTER, unsafe.Pointer(&prog), uint32(unsafe.Sizeof(prog)))) +} diff --git a/vendor/golang.org/x/net/ipv6/bpfopt_stub.go b/vendor/golang.org/x/net/ipv6/bpfopt_stub.go new file mode 100644 index 0000000..2e4de5f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/bpfopt_stub.go @@ -0,0 +1,16 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !linux + +package ipv6 + +import "golang.org/x/net/bpf" + +// SetBPF attaches a BPF program to the connection. +// +// Only supported on Linux. +func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv6/control.go b/vendor/golang.org/x/net/ipv6/control.go new file mode 100644 index 0000000..674628d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control.go @@ -0,0 +1,85 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "fmt" + "net" + "sync" +) + +// Note that RFC 3542 obsoletes RFC 2292 but OS X Snow Leopard and the +// former still support RFC 2292 only. Please be aware that almost +// all protocol implementations prohibit using a combination of RFC +// 2292 and RFC 3542 for some practical reasons. + +type rawOpt struct { + sync.RWMutex + cflags ControlFlags +} + +func (c *rawOpt) set(f ControlFlags) { c.cflags |= f } +func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f } +func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 } + +// A ControlFlags represents per packet basis IP-level socket option +// control flags. +type ControlFlags uint + +const ( + FlagTrafficClass ControlFlags = 1 << iota // pass the traffic class on the received packet + FlagHopLimit // pass the hop limit on the received packet + FlagSrc // pass the source address on the received packet + FlagDst // pass the destination address on the received packet + FlagInterface // pass the interface index on the received packet + FlagPathMTU // pass the path MTU on the received packet path +) + +const flagPacketInfo = FlagDst | FlagInterface + +// A ControlMessage represents per packet basis IP-level socket +// options. +type ControlMessage struct { + // Receiving socket options: SetControlMessage allows to + // receive the options from the protocol stack using ReadFrom + // method of PacketConn. + // + // Specifying socket options: ControlMessage for WriteTo + // method of PacketConn allows to send the options to the + // protocol stack. + // + TrafficClass int // traffic class, must be 1 <= value <= 255 when specifying + HopLimit int // hop limit, must be 1 <= value <= 255 when specifying + Src net.IP // source address, specifying only + Dst net.IP // destination address, receiving only + IfIndex int // interface index, must be 1 <= value when specifying + NextHop net.IP // next hop address, specifying only + MTU int // path MTU, receiving only +} + +func (cm *ControlMessage) String() string { + if cm == nil { + return "" + } + return fmt.Sprintf("tclass=%#x hoplim=%d src=%v dst=%v ifindex=%d nexthop=%v mtu=%d", cm.TrafficClass, cm.HopLimit, cm.Src, cm.Dst, cm.IfIndex, cm.NextHop, cm.MTU) +} + +// Ancillary data socket options +const ( + ctlTrafficClass = iota // header field + ctlHopLimit // header field + ctlPacketInfo // inbound or outbound packet path + ctlNextHop // nexthop + ctlPathMTU // path mtu + ctlMax +) + +// A ctlOpt represents a binding for ancillary data socket option. +type ctlOpt struct { + name int // option name, must be equal or greater than 1 + length int // option length + marshal func([]byte, *ControlMessage) []byte + parse func(*ControlMessage, []byte) +} diff --git a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go new file mode 100644 index 0000000..d1693af --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go @@ -0,0 +1,55 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin + +package ipv6 + +import ( + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +func marshal2292HopLimit(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIPv6 + m.Type = sysIPV6_2292HOPLIMIT + m.SetLen(syscall.CmsgLen(4)) + if cm != nil { + data := b[syscall.CmsgLen(0):] + nativeEndian.PutUint32(data[:4], uint32(cm.HopLimit)) + } + return b[syscall.CmsgSpace(4):] +} + +func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIPv6 + m.Type = sysIPV6_2292PKTINFO + m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo)) + if cm != nil { + pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + if ip := cm.Src.To16(); ip != nil && ip.To4() == nil { + copy(pi.Addr[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return b[syscall.CmsgSpace(sizeofInet6Pktinfo):] +} + +func marshal2292NextHop(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIPv6 + m.Type = sysIPV6_2292NEXTHOP + m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6)) + if cm != nil { + sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + sa.setSockaddr(cm.NextHop, cm.IfIndex) + } + return b[syscall.CmsgSpace(sizeofSockaddrInet6):] +} diff --git a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go new file mode 100644 index 0000000..2800df4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go @@ -0,0 +1,99 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package ipv6 + +import ( + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +func marshalTrafficClass(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIPv6 + m.Type = sysIPV6_TCLASS + m.SetLen(syscall.CmsgLen(4)) + if cm != nil { + data := b[syscall.CmsgLen(0):] + nativeEndian.PutUint32(data[:4], uint32(cm.TrafficClass)) + } + return b[syscall.CmsgSpace(4):] +} + +func parseTrafficClass(cm *ControlMessage, b []byte) { + cm.TrafficClass = int(nativeEndian.Uint32(b[:4])) +} + +func marshalHopLimit(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIPv6 + m.Type = sysIPV6_HOPLIMIT + m.SetLen(syscall.CmsgLen(4)) + if cm != nil { + data := b[syscall.CmsgLen(0):] + nativeEndian.PutUint32(data[:4], uint32(cm.HopLimit)) + } + return b[syscall.CmsgSpace(4):] +} + +func parseHopLimit(cm *ControlMessage, b []byte) { + cm.HopLimit = int(nativeEndian.Uint32(b[:4])) +} + +func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIPv6 + m.Type = sysIPV6_PKTINFO + m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo)) + if cm != nil { + pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + if ip := cm.Src.To16(); ip != nil && ip.To4() == nil { + copy(pi.Addr[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return b[syscall.CmsgSpace(sizeofInet6Pktinfo):] +} + +func parsePacketInfo(cm *ControlMessage, b []byte) { + pi := (*inet6Pktinfo)(unsafe.Pointer(&b[0])) + cm.Dst = pi.Addr[:] + cm.IfIndex = int(pi.Ifindex) +} + +func marshalNextHop(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIPv6 + m.Type = sysIPV6_NEXTHOP + m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6)) + if cm != nil { + sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + sa.setSockaddr(cm.NextHop, cm.IfIndex) + } + return b[syscall.CmsgSpace(sizeofSockaddrInet6):] +} + +func parseNextHop(cm *ControlMessage, b []byte) { +} + +func marshalPathMTU(b []byte, cm *ControlMessage) []byte { + m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) + m.Level = iana.ProtocolIPv6 + m.Type = sysIPV6_PATHMTU + m.SetLen(syscall.CmsgLen(sizeofIPv6Mtuinfo)) + return b[syscall.CmsgSpace(sizeofIPv6Mtuinfo):] +} + +func parsePathMTU(cm *ControlMessage, b []byte) { + mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0])) + cm.Dst = mi.Addr.Addr[:] + cm.IfIndex = int(mi.Addr.Scope_id) + cm.MTU = int(mi.Mtu) +} diff --git a/vendor/golang.org/x/net/ipv6/control_stub.go b/vendor/golang.org/x/net/ipv6/control_stub.go new file mode 100644 index 0000000..24b40a8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_stub.go @@ -0,0 +1,23 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv6 + +func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error { + return errOpNoSupport +} + +func newControlMessage(opt *rawOpt) (oob []byte) { + return nil +} + +func parseControlMessage(b []byte) (*ControlMessage, error) { + return nil, errOpNoSupport +} + +func marshalControlMessage(cm *ControlMessage) (oob []byte) { + return nil +} diff --git a/vendor/golang.org/x/net/ipv6/control_unix.go b/vendor/golang.org/x/net/ipv6/control_unix.go new file mode 100644 index 0000000..7bd4210 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_unix.go @@ -0,0 +1,153 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package ipv6 + +import ( + "os" + "syscall" + + "golang.org/x/net/internal/iana" +) + +func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error { + opt.Lock() + defer opt.Unlock() + if cf&FlagTrafficClass != 0 && sockOpts[ssoReceiveTrafficClass].name > 0 { + if err := setInt(s, &sockOpts[ssoReceiveTrafficClass], boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagTrafficClass) + } else { + opt.clear(FlagTrafficClass) + } + } + if cf&FlagHopLimit != 0 && sockOpts[ssoReceiveHopLimit].name > 0 { + if err := setInt(s, &sockOpts[ssoReceiveHopLimit], boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagHopLimit) + } else { + opt.clear(FlagHopLimit) + } + } + if cf&flagPacketInfo != 0 && sockOpts[ssoReceivePacketInfo].name > 0 { + if err := setInt(s, &sockOpts[ssoReceivePacketInfo], boolint(on)); err != nil { + return err + } + if on { + opt.set(cf & flagPacketInfo) + } else { + opt.clear(cf & flagPacketInfo) + } + } + if cf&FlagPathMTU != 0 && sockOpts[ssoReceivePathMTU].name > 0 { + if err := setInt(s, &sockOpts[ssoReceivePathMTU], boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagPathMTU) + } else { + opt.clear(FlagPathMTU) + } + } + return nil +} + +func newControlMessage(opt *rawOpt) (oob []byte) { + opt.RLock() + var l int + if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 { + l += syscall.CmsgSpace(ctlOpts[ctlTrafficClass].length) + } + if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 { + l += syscall.CmsgSpace(ctlOpts[ctlHopLimit].length) + } + if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 { + l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length) + } + if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 { + l += syscall.CmsgSpace(ctlOpts[ctlPathMTU].length) + } + if l > 0 { + oob = make([]byte, l) + } + opt.RUnlock() + return +} + +func parseControlMessage(b []byte) (*ControlMessage, error) { + if len(b) == 0 { + return nil, nil + } + cmsgs, err := syscall.ParseSocketControlMessage(b) + if err != nil { + return nil, os.NewSyscallError("parse socket control message", err) + } + cm := &ControlMessage{} + for _, m := range cmsgs { + if m.Header.Level != iana.ProtocolIPv6 { + continue + } + switch int(m.Header.Type) { + case ctlOpts[ctlTrafficClass].name: + ctlOpts[ctlTrafficClass].parse(cm, m.Data[:]) + case ctlOpts[ctlHopLimit].name: + ctlOpts[ctlHopLimit].parse(cm, m.Data[:]) + case ctlOpts[ctlPacketInfo].name: + ctlOpts[ctlPacketInfo].parse(cm, m.Data[:]) + case ctlOpts[ctlPathMTU].name: + ctlOpts[ctlPathMTU].parse(cm, m.Data[:]) + } + } + return cm, nil +} + +func marshalControlMessage(cm *ControlMessage) (oob []byte) { + if cm == nil { + return + } + var l int + tclass := false + if ctlOpts[ctlTrafficClass].name > 0 && cm.TrafficClass > 0 { + tclass = true + l += syscall.CmsgSpace(ctlOpts[ctlTrafficClass].length) + } + hoplimit := false + if ctlOpts[ctlHopLimit].name > 0 && cm.HopLimit > 0 { + hoplimit = true + l += syscall.CmsgSpace(ctlOpts[ctlHopLimit].length) + } + pktinfo := false + if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To16() != nil && cm.Src.To4() == nil || cm.IfIndex > 0) { + pktinfo = true + l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length) + } + nexthop := false + if ctlOpts[ctlNextHop].name > 0 && cm.NextHop.To16() != nil && cm.NextHop.To4() == nil { + nexthop = true + l += syscall.CmsgSpace(ctlOpts[ctlNextHop].length) + } + if l > 0 { + oob = make([]byte, l) + b := oob + if tclass { + b = ctlOpts[ctlTrafficClass].marshal(b, cm) + } + if hoplimit { + b = ctlOpts[ctlHopLimit].marshal(b, cm) + } + if pktinfo { + b = ctlOpts[ctlPacketInfo].marshal(b, cm) + } + if nexthop { + b = ctlOpts[ctlNextHop].marshal(b, cm) + } + } + return +} diff --git a/vendor/golang.org/x/net/ipv6/control_windows.go b/vendor/golang.org/x/net/ipv6/control_windows.go new file mode 100644 index 0000000..feef6ab --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_windows.go @@ -0,0 +1,27 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import "syscall" + +func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error { + // TODO(mikio): implement this + return syscall.EWINDOWS +} + +func newControlMessage(opt *rawOpt) (oob []byte) { + // TODO(mikio): implement this + return nil +} + +func parseControlMessage(b []byte) (*ControlMessage, error) { + // TODO(mikio): implement this + return nil, syscall.EWINDOWS +} + +func marshalControlMessage(cm *ControlMessage) (oob []byte) { + // TODO(mikio): implement this + return nil +} diff --git a/vendor/golang.org/x/net/ipv6/defs_darwin.go b/vendor/golang.org/x/net/ipv6/defs_darwin.go new file mode 100644 index 0000000..55ddc11 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/defs_darwin.go @@ -0,0 +1,112 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package ipv6 + +/* +#define __APPLE_USE_RFC_3542 +#include +#include +*/ +import "C" + +const ( + sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS + sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF + sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS + sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP + sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP + sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP + + sysIPV6_PORTRANGE = C.IPV6_PORTRANGE + sysICMP6_FILTER = C.ICMP6_FILTER + sysIPV6_2292PKTINFO = C.IPV6_2292PKTINFO + sysIPV6_2292HOPLIMIT = C.IPV6_2292HOPLIMIT + sysIPV6_2292NEXTHOP = C.IPV6_2292NEXTHOP + sysIPV6_2292HOPOPTS = C.IPV6_2292HOPOPTS + sysIPV6_2292DSTOPTS = C.IPV6_2292DSTOPTS + sysIPV6_2292RTHDR = C.IPV6_2292RTHDR + + sysIPV6_2292PKTOPTIONS = C.IPV6_2292PKTOPTIONS + + sysIPV6_CHECKSUM = C.IPV6_CHECKSUM + sysIPV6_V6ONLY = C.IPV6_V6ONLY + + sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY + + sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS + sysIPV6_TCLASS = C.IPV6_TCLASS + + sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS + + sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO + + sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT + sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR + sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS + sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS + + sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU + sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU + + sysIPV6_PATHMTU = C.IPV6_PATHMTU + + sysIPV6_PKTINFO = C.IPV6_PKTINFO + sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT + sysIPV6_NEXTHOP = C.IPV6_NEXTHOP + sysIPV6_HOPOPTS = C.IPV6_HOPOPTS + sysIPV6_DSTOPTS = C.IPV6_DSTOPTS + sysIPV6_RTHDR = C.IPV6_RTHDR + + sysIPV6_AUTOFLOWLABEL = C.IPV6_AUTOFLOWLABEL + + sysIPV6_DONTFRAG = C.IPV6_DONTFRAG + + sysIPV6_PREFER_TEMPADDR = C.IPV6_PREFER_TEMPADDR + + sysIPV6_MSFILTER = C.IPV6_MSFILTER + sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP + sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP + sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP + sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP + sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE + sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE + + sysIPV6_BOUND_IF = C.IPV6_BOUND_IF + + sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT + sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH + sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo + + sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + sizeofGroupReq = C.sizeof_struct_group_req + sizeofGroupSourceReq = C.sizeof_struct_group_source_req + + sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +type sockaddrStorage C.struct_sockaddr_storage + +type sockaddrInet6 C.struct_sockaddr_in6 + +type inet6Pktinfo C.struct_in6_pktinfo + +type ipv6Mtuinfo C.struct_ip6_mtuinfo + +type ipv6Mreq C.struct_ipv6_mreq + +type icmpv6Filter C.struct_icmp6_filter + +type groupReq C.struct_group_req + +type groupSourceReq C.struct_group_source_req diff --git a/vendor/golang.org/x/net/ipv6/defs_dragonfly.go b/vendor/golang.org/x/net/ipv6/defs_dragonfly.go new file mode 100644 index 0000000..a4c383a --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/defs_dragonfly.go @@ -0,0 +1,84 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package ipv6 + +/* +#include +#include + +#include +#include +*/ +import "C" + +const ( + sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS + sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF + sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS + sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP + sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP + sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP + sysIPV6_PORTRANGE = C.IPV6_PORTRANGE + sysICMP6_FILTER = C.ICMP6_FILTER + + sysIPV6_CHECKSUM = C.IPV6_CHECKSUM + sysIPV6_V6ONLY = C.IPV6_V6ONLY + + sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY + + sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS + sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO + sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT + sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR + sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS + sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS + + sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU + sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU + + sysIPV6_PATHMTU = C.IPV6_PATHMTU + + sysIPV6_PKTINFO = C.IPV6_PKTINFO + sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT + sysIPV6_NEXTHOP = C.IPV6_NEXTHOP + sysIPV6_HOPOPTS = C.IPV6_HOPOPTS + sysIPV6_DSTOPTS = C.IPV6_DSTOPTS + sysIPV6_RTHDR = C.IPV6_RTHDR + + sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS + + sysIPV6_AUTOFLOWLABEL = C.IPV6_AUTOFLOWLABEL + + sysIPV6_TCLASS = C.IPV6_TCLASS + sysIPV6_DONTFRAG = C.IPV6_DONTFRAG + + sysIPV6_PREFER_TEMPADDR = C.IPV6_PREFER_TEMPADDR + + sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT + sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH + sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW + + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo + + sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + + sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +type sockaddrInet6 C.struct_sockaddr_in6 + +type inet6Pktinfo C.struct_in6_pktinfo + +type ipv6Mtuinfo C.struct_ip6_mtuinfo + +type ipv6Mreq C.struct_ipv6_mreq + +type icmpv6Filter C.struct_icmp6_filter diff --git a/vendor/golang.org/x/net/ipv6/defs_freebsd.go b/vendor/golang.org/x/net/ipv6/defs_freebsd.go new file mode 100644 index 0000000..53e6253 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/defs_freebsd.go @@ -0,0 +1,105 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package ipv6 + +/* +#include +#include + +#include +#include +*/ +import "C" + +const ( + sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS + sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF + sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS + sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP + sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP + sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP + sysIPV6_PORTRANGE = C.IPV6_PORTRANGE + sysICMP6_FILTER = C.ICMP6_FILTER + + sysIPV6_CHECKSUM = C.IPV6_CHECKSUM + sysIPV6_V6ONLY = C.IPV6_V6ONLY + + sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY + + sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS + + sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO + sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT + sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR + sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS + sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS + + sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU + sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU + + sysIPV6_PATHMTU = C.IPV6_PATHMTU + + sysIPV6_PKTINFO = C.IPV6_PKTINFO + sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT + sysIPV6_NEXTHOP = C.IPV6_NEXTHOP + sysIPV6_HOPOPTS = C.IPV6_HOPOPTS + sysIPV6_DSTOPTS = C.IPV6_DSTOPTS + sysIPV6_RTHDR = C.IPV6_RTHDR + + sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS + + sysIPV6_AUTOFLOWLABEL = C.IPV6_AUTOFLOWLABEL + + sysIPV6_TCLASS = C.IPV6_TCLASS + sysIPV6_DONTFRAG = C.IPV6_DONTFRAG + + sysIPV6_PREFER_TEMPADDR = C.IPV6_PREFER_TEMPADDR + + sysIPV6_BINDANY = C.IPV6_BINDANY + + sysIPV6_MSFILTER = C.IPV6_MSFILTER + + sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP + sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP + sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP + sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP + sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE + sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE + + sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT + sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH + sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo + + sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + sizeofGroupReq = C.sizeof_struct_group_req + sizeofGroupSourceReq = C.sizeof_struct_group_source_req + + sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +type sockaddrStorage C.struct_sockaddr_storage + +type sockaddrInet6 C.struct_sockaddr_in6 + +type inet6Pktinfo C.struct_in6_pktinfo + +type ipv6Mtuinfo C.struct_ip6_mtuinfo + +type ipv6Mreq C.struct_ipv6_mreq + +type groupReq C.struct_group_req + +type groupSourceReq C.struct_group_source_req + +type icmpv6Filter C.struct_icmp6_filter diff --git a/vendor/golang.org/x/net/ipv6/defs_linux.go b/vendor/golang.org/x/net/ipv6/defs_linux.go new file mode 100644 index 0000000..8a967fd --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/defs_linux.go @@ -0,0 +1,145 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package ipv6 + +/* +#include +#include +#include +#include +#include +#include +*/ +import "C" + +const ( + sysIPV6_ADDRFORM = C.IPV6_ADDRFORM + sysIPV6_2292PKTINFO = C.IPV6_2292PKTINFO + sysIPV6_2292HOPOPTS = C.IPV6_2292HOPOPTS + sysIPV6_2292DSTOPTS = C.IPV6_2292DSTOPTS + sysIPV6_2292RTHDR = C.IPV6_2292RTHDR + sysIPV6_2292PKTOPTIONS = C.IPV6_2292PKTOPTIONS + sysIPV6_CHECKSUM = C.IPV6_CHECKSUM + sysIPV6_2292HOPLIMIT = C.IPV6_2292HOPLIMIT + sysIPV6_NEXTHOP = C.IPV6_NEXTHOP + sysIPV6_FLOWINFO = C.IPV6_FLOWINFO + + sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS + sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF + sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS + sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP + sysIPV6_ADD_MEMBERSHIP = C.IPV6_ADD_MEMBERSHIP + sysIPV6_DROP_MEMBERSHIP = C.IPV6_DROP_MEMBERSHIP + sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP + sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP + sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP + sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP + sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE + sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE + sysMCAST_MSFILTER = C.MCAST_MSFILTER + sysIPV6_ROUTER_ALERT = C.IPV6_ROUTER_ALERT + sysIPV6_MTU_DISCOVER = C.IPV6_MTU_DISCOVER + sysIPV6_MTU = C.IPV6_MTU + sysIPV6_RECVERR = C.IPV6_RECVERR + sysIPV6_V6ONLY = C.IPV6_V6ONLY + sysIPV6_JOIN_ANYCAST = C.IPV6_JOIN_ANYCAST + sysIPV6_LEAVE_ANYCAST = C.IPV6_LEAVE_ANYCAST + + //sysIPV6_PMTUDISC_DONT = C.IPV6_PMTUDISC_DONT + //sysIPV6_PMTUDISC_WANT = C.IPV6_PMTUDISC_WANT + //sysIPV6_PMTUDISC_DO = C.IPV6_PMTUDISC_DO + //sysIPV6_PMTUDISC_PROBE = C.IPV6_PMTUDISC_PROBE + //sysIPV6_PMTUDISC_INTERFACE = C.IPV6_PMTUDISC_INTERFACE + //sysIPV6_PMTUDISC_OMIT = C.IPV6_PMTUDISC_OMIT + + sysIPV6_FLOWLABEL_MGR = C.IPV6_FLOWLABEL_MGR + sysIPV6_FLOWINFO_SEND = C.IPV6_FLOWINFO_SEND + + sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY + sysIPV6_XFRM_POLICY = C.IPV6_XFRM_POLICY + + sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO + sysIPV6_PKTINFO = C.IPV6_PKTINFO + sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT + sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT + sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS + sysIPV6_HOPOPTS = C.IPV6_HOPOPTS + sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS + sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR + sysIPV6_RTHDR = C.IPV6_RTHDR + sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS + sysIPV6_DSTOPTS = C.IPV6_DSTOPTS + sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU + sysIPV6_PATHMTU = C.IPV6_PATHMTU + sysIPV6_DONTFRAG = C.IPV6_DONTFRAG + + sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS + sysIPV6_TCLASS = C.IPV6_TCLASS + + sysIPV6_ADDR_PREFERENCES = C.IPV6_ADDR_PREFERENCES + + sysIPV6_PREFER_SRC_TMP = C.IPV6_PREFER_SRC_TMP + sysIPV6_PREFER_SRC_PUBLIC = C.IPV6_PREFER_SRC_PUBLIC + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = C.IPV6_PREFER_SRC_PUBTMP_DEFAULT + sysIPV6_PREFER_SRC_COA = C.IPV6_PREFER_SRC_COA + sysIPV6_PREFER_SRC_HOME = C.IPV6_PREFER_SRC_HOME + sysIPV6_PREFER_SRC_CGA = C.IPV6_PREFER_SRC_CGA + sysIPV6_PREFER_SRC_NONCGA = C.IPV6_PREFER_SRC_NONCGA + + sysIPV6_MINHOPCOUNT = C.IPV6_MINHOPCOUNT + + sysIPV6_ORIGDSTADDR = C.IPV6_ORIGDSTADDR + sysIPV6_RECVORIGDSTADDR = C.IPV6_RECVORIGDSTADDR + sysIPV6_TRANSPARENT = C.IPV6_TRANSPARENT + sysIPV6_UNICAST_IF = C.IPV6_UNICAST_IF + + sysICMPV6_FILTER = C.ICMPV6_FILTER + + sysICMPV6_FILTER_BLOCK = C.ICMPV6_FILTER_BLOCK + sysICMPV6_FILTER_PASS = C.ICMPV6_FILTER_PASS + sysICMPV6_FILTER_BLOCKOTHERS = C.ICMPV6_FILTER_BLOCKOTHERS + sysICMPV6_FILTER_PASSONLY = C.ICMPV6_FILTER_PASSONLY + + sysSOL_SOCKET = C.SOL_SOCKET + sysSO_ATTACH_FILTER = C.SO_ATTACH_FILTER + + sizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo + sizeofIPv6FlowlabelReq = C.sizeof_struct_in6_flowlabel_req + + sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + sizeofGroupReq = C.sizeof_struct_group_req + sizeofGroupSourceReq = C.sizeof_struct_group_source_req + + sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +type kernelSockaddrStorage C.struct___kernel_sockaddr_storage + +type sockaddrInet6 C.struct_sockaddr_in6 + +type inet6Pktinfo C.struct_in6_pktinfo + +type ipv6Mtuinfo C.struct_ip6_mtuinfo + +type ipv6FlowlabelReq C.struct_in6_flowlabel_req + +type ipv6Mreq C.struct_ipv6_mreq + +type groupReq C.struct_group_req + +type groupSourceReq C.struct_group_source_req + +type icmpv6Filter C.struct_icmp6_filter + +type sockFProg C.struct_sock_fprog + +type sockFilter C.struct_sock_filter diff --git a/vendor/golang.org/x/net/ipv6/defs_netbsd.go b/vendor/golang.org/x/net/ipv6/defs_netbsd.go new file mode 100644 index 0000000..be9ceb9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/defs_netbsd.go @@ -0,0 +1,80 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package ipv6 + +/* +#include +#include + +#include +#include +*/ +import "C" + +const ( + sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS + sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF + sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS + sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP + sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP + sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP + sysIPV6_PORTRANGE = C.IPV6_PORTRANGE + sysICMP6_FILTER = C.ICMP6_FILTER + + sysIPV6_CHECKSUM = C.IPV6_CHECKSUM + sysIPV6_V6ONLY = C.IPV6_V6ONLY + + sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY + + sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS + + sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO + sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT + sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR + sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS + sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS + + sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU + sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU + sysIPV6_PATHMTU = C.IPV6_PATHMTU + + sysIPV6_PKTINFO = C.IPV6_PKTINFO + sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT + sysIPV6_NEXTHOP = C.IPV6_NEXTHOP + sysIPV6_HOPOPTS = C.IPV6_HOPOPTS + sysIPV6_DSTOPTS = C.IPV6_DSTOPTS + sysIPV6_RTHDR = C.IPV6_RTHDR + + sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS + + sysIPV6_TCLASS = C.IPV6_TCLASS + sysIPV6_DONTFRAG = C.IPV6_DONTFRAG + + sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT + sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH + sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW + + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo + + sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + + sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +type sockaddrInet6 C.struct_sockaddr_in6 + +type inet6Pktinfo C.struct_in6_pktinfo + +type ipv6Mtuinfo C.struct_ip6_mtuinfo + +type ipv6Mreq C.struct_ipv6_mreq + +type icmpv6Filter C.struct_icmp6_filter diff --git a/vendor/golang.org/x/net/ipv6/defs_openbsd.go b/vendor/golang.org/x/net/ipv6/defs_openbsd.go new file mode 100644 index 0000000..177ddf8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/defs_openbsd.go @@ -0,0 +1,89 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package ipv6 + +/* +#include +#include + +#include +#include +*/ +import "C" + +const ( + sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS + sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF + sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS + sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP + sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP + sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP + sysIPV6_PORTRANGE = C.IPV6_PORTRANGE + sysICMP6_FILTER = C.ICMP6_FILTER + + sysIPV6_CHECKSUM = C.IPV6_CHECKSUM + sysIPV6_V6ONLY = C.IPV6_V6ONLY + + sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS + + sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO + sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT + sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR + sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS + sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS + + sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU + sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU + + sysIPV6_PATHMTU = C.IPV6_PATHMTU + + sysIPV6_PKTINFO = C.IPV6_PKTINFO + sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT + sysIPV6_NEXTHOP = C.IPV6_NEXTHOP + sysIPV6_HOPOPTS = C.IPV6_HOPOPTS + sysIPV6_DSTOPTS = C.IPV6_DSTOPTS + sysIPV6_RTHDR = C.IPV6_RTHDR + + sysIPV6_AUTH_LEVEL = C.IPV6_AUTH_LEVEL + sysIPV6_ESP_TRANS_LEVEL = C.IPV6_ESP_TRANS_LEVEL + sysIPV6_ESP_NETWORK_LEVEL = C.IPV6_ESP_NETWORK_LEVEL + sysIPSEC6_OUTSA = C.IPSEC6_OUTSA + sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS + + sysIPV6_AUTOFLOWLABEL = C.IPV6_AUTOFLOWLABEL + sysIPV6_IPCOMP_LEVEL = C.IPV6_IPCOMP_LEVEL + + sysIPV6_TCLASS = C.IPV6_TCLASS + sysIPV6_DONTFRAG = C.IPV6_DONTFRAG + sysIPV6_PIPEX = C.IPV6_PIPEX + + sysIPV6_RTABLE = C.IPV6_RTABLE + + sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT + sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH + sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW + + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo + + sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + + sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +type sockaddrInet6 C.struct_sockaddr_in6 + +type inet6Pktinfo C.struct_in6_pktinfo + +type ipv6Mtuinfo C.struct_ip6_mtuinfo + +type ipv6Mreq C.struct_ipv6_mreq + +type icmpv6Filter C.struct_icmp6_filter diff --git a/vendor/golang.org/x/net/ipv6/defs_solaris.go b/vendor/golang.org/x/net/ipv6/defs_solaris.go new file mode 100644 index 0000000..0f8ce2b --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/defs_solaris.go @@ -0,0 +1,114 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package ipv6 + +/* +#include + +#include +#include +*/ +import "C" + +const ( + sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS + sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF + sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS + sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP + sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP + sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP + + sysIPV6_PKTINFO = C.IPV6_PKTINFO + + sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT + sysIPV6_NEXTHOP = C.IPV6_NEXTHOP + sysIPV6_HOPOPTS = C.IPV6_HOPOPTS + sysIPV6_DSTOPTS = C.IPV6_DSTOPTS + + sysIPV6_RTHDR = C.IPV6_RTHDR + sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS + + sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO + sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT + sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS + + sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR + + sysIPV6_RECVRTHDRDSTOPTS = C.IPV6_RECVRTHDRDSTOPTS + + sysIPV6_CHECKSUM = C.IPV6_CHECKSUM + sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS + sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU + sysIPV6_DONTFRAG = C.IPV6_DONTFRAG + sysIPV6_SEC_OPT = C.IPV6_SEC_OPT + sysIPV6_SRC_PREFERENCES = C.IPV6_SRC_PREFERENCES + sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU + sysIPV6_PATHMTU = C.IPV6_PATHMTU + sysIPV6_TCLASS = C.IPV6_TCLASS + sysIPV6_V6ONLY = C.IPV6_V6ONLY + + sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS + + sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP + sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP + sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE + sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE + sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP + sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP + + sysIPV6_PREFER_SRC_HOME = C.IPV6_PREFER_SRC_HOME + sysIPV6_PREFER_SRC_COA = C.IPV6_PREFER_SRC_COA + sysIPV6_PREFER_SRC_PUBLIC = C.IPV6_PREFER_SRC_PUBLIC + sysIPV6_PREFER_SRC_TMP = C.IPV6_PREFER_SRC_TMP + sysIPV6_PREFER_SRC_NONCGA = C.IPV6_PREFER_SRC_NONCGA + sysIPV6_PREFER_SRC_CGA = C.IPV6_PREFER_SRC_CGA + + sysIPV6_PREFER_SRC_MIPMASK = C.IPV6_PREFER_SRC_MIPMASK + sysIPV6_PREFER_SRC_MIPDEFAULT = C.IPV6_PREFER_SRC_MIPDEFAULT + sysIPV6_PREFER_SRC_TMPMASK = C.IPV6_PREFER_SRC_TMPMASK + sysIPV6_PREFER_SRC_TMPDEFAULT = C.IPV6_PREFER_SRC_TMPDEFAULT + sysIPV6_PREFER_SRC_CGAMASK = C.IPV6_PREFER_SRC_CGAMASK + sysIPV6_PREFER_SRC_CGADEFAULT = C.IPV6_PREFER_SRC_CGADEFAULT + + sysIPV6_PREFER_SRC_MASK = C.IPV6_PREFER_SRC_MASK + + sysIPV6_PREFER_SRC_DEFAULT = C.IPV6_PREFER_SRC_DEFAULT + + sysIPV6_BOUND_IF = C.IPV6_BOUND_IF + sysIPV6_UNSPEC_SRC = C.IPV6_UNSPEC_SRC + + sysICMP6_FILTER = C.ICMP6_FILTER + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo + + sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + sizeofGroupReq = C.sizeof_struct_group_req + sizeofGroupSourceReq = C.sizeof_struct_group_source_req + + sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +type sockaddrStorage C.struct_sockaddr_storage + +type sockaddrInet6 C.struct_sockaddr_in6 + +type inet6Pktinfo C.struct_in6_pktinfo + +type ipv6Mtuinfo C.struct_ip6_mtuinfo + +type ipv6Mreq C.struct_ipv6_mreq + +type groupReq C.struct_group_req + +type groupSourceReq C.struct_group_source_req + +type icmpv6Filter C.struct_icmp6_filter diff --git a/vendor/golang.org/x/net/ipv6/dgramopt_posix.go b/vendor/golang.org/x/net/ipv6/dgramopt_posix.go new file mode 100644 index 0000000..a448cba --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/dgramopt_posix.go @@ -0,0 +1,290 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv6 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/netreflect" +) + +// MulticastHopLimit returns the hop limit field value for outgoing +// multicast packets. +func (c *dgramOpt) MulticastHopLimit() (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return 0, err + } + return getInt(s, &sockOpts[ssoMulticastHopLimit]) +} + +// SetMulticastHopLimit sets the hop limit field value for future +// outgoing multicast packets. +func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + return setInt(s, &sockOpts[ssoMulticastHopLimit], hoplim) +} + +// MulticastInterface returns the default interface for multicast +// packet transmissions. +func (c *dgramOpt) MulticastInterface() (*net.Interface, error) { + if !c.ok() { + return nil, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return nil, err + } + return getInterface(s, &sockOpts[ssoMulticastInterface]) +} + +// SetMulticastInterface sets the default interface for future +// multicast packet transmissions. +func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + return setInterface(s, &sockOpts[ssoMulticastInterface], ifi) +} + +// MulticastLoopback reports whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) MulticastLoopback() (bool, error) { + if !c.ok() { + return false, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return false, err + } + on, err := getInt(s, &sockOpts[ssoMulticastLoopback]) + if err != nil { + return false, err + } + return on == 1, nil +} + +// SetMulticastLoopback sets whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) SetMulticastLoopback(on bool) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + return setInt(s, &sockOpts[ssoMulticastLoopback], boolint(on)) +} + +// JoinGroup joins the group address group on the interface ifi. +// By default all sources that can cast data to group are accepted. +// It's possible to mute and unmute data transmission from a specific +// source by using ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup. +// JoinGroup uses the system assigned multicast interface when ifi is +// nil, although this is not recommended because the assignment +// depends on platforms and sometimes it might require routing +// configuration. +func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + return setGroup(s, &sockOpts[ssoJoinGroup], ifi, grp) +} + +// LeaveGroup leaves the group address group on the interface ifi +// regardless of whether the group is any-source group or +// source-specific group. +func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + return setGroup(s, &sockOpts[ssoLeaveGroup], ifi, grp) +} + +// JoinSourceSpecificGroup joins the source-specific group comprising +// group and source on the interface ifi. +// JoinSourceSpecificGroup uses the system assigned multicast +// interface when ifi is nil, although this is not recommended because +// the assignment depends on platforms and sometimes it might require +// routing configuration. +func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return setSourceGroup(s, &sockOpts[ssoJoinSourceGroup], ifi, grp, src) +} + +// LeaveSourceSpecificGroup leaves the source-specific group on the +// interface ifi. +func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return setSourceGroup(s, &sockOpts[ssoLeaveSourceGroup], ifi, grp, src) +} + +// ExcludeSourceSpecificGroup excludes the source-specific group from +// the already joined any-source groups by JoinGroup on the interface +// ifi. +func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return setSourceGroup(s, &sockOpts[ssoBlockSourceGroup], ifi, grp, src) +} + +// IncludeSourceSpecificGroup includes the excluded source-specific +// group by ExcludeSourceSpecificGroup again on the interface ifi. +func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return setSourceGroup(s, &sockOpts[ssoUnblockSourceGroup], ifi, grp, src) +} + +// Checksum reports whether the kernel will compute, store or verify a +// checksum for both incoming and outgoing packets. If on is true, it +// returns an offset in bytes into the data of where the checksum +// field is located. +func (c *dgramOpt) Checksum() (on bool, offset int, err error) { + if !c.ok() { + return false, 0, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return false, 0, err + } + offset, err = getInt(s, &sockOpts[ssoChecksum]) + if err != nil { + return false, 0, err + } + if offset < 0 { + return false, 0, nil + } + return true, offset, nil +} + +// SetChecksum enables the kernel checksum processing. If on is ture, +// the offset should be an offset in bytes into the data of where the +// checksum field is located. +func (c *dgramOpt) SetChecksum(on bool, offset int) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + if !on { + offset = -1 + } + return setInt(s, &sockOpts[ssoChecksum], offset) +} + +// ICMPFilter returns an ICMP filter. +func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) { + if !c.ok() { + return nil, syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return nil, err + } + return getICMPFilter(s, &sockOpts[ssoICMPFilter]) +} + +// SetICMPFilter deploys the ICMP filter. +func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.PacketConn) + if err != nil { + return err + } + return setICMPFilter(s, &sockOpts[ssoICMPFilter], f) +} diff --git a/vendor/golang.org/x/net/ipv6/dgramopt_stub.go b/vendor/golang.org/x/net/ipv6/dgramopt_stub.go new file mode 100644 index 0000000..82b0686 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/dgramopt_stub.go @@ -0,0 +1,119 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv6 + +import "net" + +// MulticastHopLimit returns the hop limit field value for outgoing +// multicast packets. +func (c *dgramOpt) MulticastHopLimit() (int, error) { + return 0, errOpNoSupport +} + +// SetMulticastHopLimit sets the hop limit field value for future +// outgoing multicast packets. +func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error { + return errOpNoSupport +} + +// MulticastInterface returns the default interface for multicast +// packet transmissions. +func (c *dgramOpt) MulticastInterface() (*net.Interface, error) { + return nil, errOpNoSupport +} + +// SetMulticastInterface sets the default interface for future +// multicast packet transmissions. +func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error { + return errOpNoSupport +} + +// MulticastLoopback reports whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) MulticastLoopback() (bool, error) { + return false, errOpNoSupport +} + +// SetMulticastLoopback sets whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) SetMulticastLoopback(on bool) error { + return errOpNoSupport +} + +// JoinGroup joins the group address group on the interface ifi. +// By default all sources that can cast data to group are accepted. +// It's possible to mute and unmute data transmission from a specific +// source by using ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup. +// JoinGroup uses the system assigned multicast interface when ifi is +// nil, although this is not recommended because the assignment +// depends on platforms and sometimes it might require routing +// configuration. +func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error { + return errOpNoSupport +} + +// LeaveGroup leaves the group address group on the interface ifi +// regardless of whether the group is any-source group or +// source-specific group. +func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error { + return errOpNoSupport +} + +// JoinSourceSpecificGroup joins the source-specific group comprising +// group and source on the interface ifi. +// JoinSourceSpecificGroup uses the system assigned multicast +// interface when ifi is nil, although this is not recommended because +// the assignment depends on platforms and sometimes it might require +// routing configuration. +func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + return errOpNoSupport +} + +// LeaveSourceSpecificGroup leaves the source-specific group on the +// interface ifi. +func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + return errOpNoSupport +} + +// ExcludeSourceSpecificGroup excludes the source-specific group from +// the already joined any-source groups by JoinGroup on the interface +// ifi. +func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + return errOpNoSupport +} + +// IncludeSourceSpecificGroup includes the excluded source-specific +// group by ExcludeSourceSpecificGroup again on the interface ifi. +func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + return errOpNoSupport +} + +// Checksum reports whether the kernel will compute, store or verify a +// checksum for both incoming and outgoing packets. If on is true, it +// returns an offset in bytes into the data of where the checksum +// field is located. +func (c *dgramOpt) Checksum() (on bool, offset int, err error) { + return false, 0, errOpNoSupport +} + +// SetChecksum enables the kernel checksum processing. If on is ture, +// the offset should be an offset in bytes into the data of where the +// checksum field is located. +func (c *dgramOpt) SetChecksum(on bool, offset int) error { + return errOpNoSupport +} + +// ICMPFilter returns an ICMP filter. +func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) { + return nil, errOpNoSupport +} + +// SetICMPFilter deploys the ICMP filter. +func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv6/doc.go b/vendor/golang.org/x/net/ipv6/doc.go new file mode 100644 index 0000000..eaa24c5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/doc.go @@ -0,0 +1,243 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ipv6 implements IP-level socket options for the Internet +// Protocol version 6. +// +// The package provides IP-level socket options that allow +// manipulation of IPv6 facilities. +// +// The IPv6 protocol is defined in RFC 2460. +// Socket interface extensions are defined in RFC 3493, RFC 3542 and +// RFC 3678. +// MLDv1 and MLDv2 are defined in RFC 2710 and RFC 3810. +// Source-specific multicast is defined in RFC 4607. +// +// On Darwin, this package requires OS X Mavericks version 10.9 or +// above, or equivalent. +// +// +// Unicasting +// +// The options for unicasting are available for net.TCPConn, +// net.UDPConn and net.IPConn which are created as network connections +// that use the IPv6 transport. When a single TCP connection carrying +// a data flow of multiple packets needs to indicate the flow is +// important, Conn is used to set the traffic class field on the IPv6 +// header for each packet. +// +// ln, err := net.Listen("tcp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer ln.Close() +// for { +// c, err := ln.Accept() +// if err != nil { +// // error handling +// } +// go func(c net.Conn) { +// defer c.Close() +// +// The outgoing packets will be labeled DiffServ assured forwarding +// class 1 low drop precedence, known as AF11 packets. +// +// if err := ipv6.NewConn(c).SetTrafficClass(0x28); err != nil { +// // error handling +// } +// if _, err := c.Write(data); err != nil { +// // error handling +// } +// }(c) +// } +// +// +// Multicasting +// +// The options for multicasting are available for net.UDPConn and +// net.IPconn which are created as network connections that use the +// IPv6 transport. A few network facilities must be prepared before +// you begin multicasting, at a minimum joining network interfaces and +// multicast groups. +// +// en0, err := net.InterfaceByName("en0") +// if err != nil { +// // error handling +// } +// en1, err := net.InterfaceByIndex(911) +// if err != nil { +// // error handling +// } +// group := net.ParseIP("ff02::114") +// +// First, an application listens to an appropriate address with an +// appropriate service port. +// +// c, err := net.ListenPacket("udp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// +// Second, the application joins multicast groups, starts listening to +// the groups on the specified network interfaces. Note that the +// service port for transport layer protocol does not matter with this +// operation as joining groups affects only network and link layer +// protocols, such as IPv6 and Ethernet. +// +// p := ipv6.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// +// The application might set per packet control message transmissions +// between the protocol stack within the kernel. When the application +// needs a destination address on an incoming packet, +// SetControlMessage of PacketConn is used to enable control message +// transmissions. +// +// if err := p.SetControlMessage(ipv6.FlagDst, true); err != nil { +// // error handling +// } +// +// The application could identify whether the received packets are +// of interest by using the control message that contains the +// destination address of the received packet. +// +// b := make([]byte, 1500) +// for { +// n, rcm, src, err := p.ReadFrom(b) +// if err != nil { +// // error handling +// } +// if rcm.Dst.IsMulticast() { +// if rcm.Dst.Equal(group) { +// // joined group, do something +// } else { +// // unknown group, discard +// continue +// } +// } +// +// The application can also send both unicast and multicast packets. +// +// p.SetTrafficClass(0x0) +// p.SetHopLimit(16) +// if _, err := p.WriteTo(data[:n], nil, src); err != nil { +// // error handling +// } +// dst := &net.UDPAddr{IP: group, Port: 1024} +// wcm := ipv6.ControlMessage{TrafficClass: 0xe0, HopLimit: 1} +// for _, ifi := range []*net.Interface{en0, en1} { +// wcm.IfIndex = ifi.Index +// if _, err := p.WriteTo(data[:n], &wcm, dst); err != nil { +// // error handling +// } +// } +// } +// +// +// More multicasting +// +// An application that uses PacketConn may join multiple multicast +// groups. For example, a UDP listener with port 1024 might join two +// different groups across over two different network interfaces by +// using: +// +// c, err := net.ListenPacket("udp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// p := ipv6.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::1:114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil { +// // error handling +// } +// +// It is possible for multiple UDP listeners that listen on the same +// UDP port to join the same multicast group. The net package will +// provide a socket that listens to a wildcard address with reusable +// UDP port when an appropriate multicast address prefix is passed to +// the net.ListenPacket or net.ListenUDP. +// +// c1, err := net.ListenPacket("udp6", "[ff02::]:1024") +// if err != nil { +// // error handling +// } +// defer c1.Close() +// c2, err := net.ListenPacket("udp6", "[ff02::]:1024") +// if err != nil { +// // error handling +// } +// defer c2.Close() +// p1 := ipv6.NewPacketConn(c1) +// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// p2 := ipv6.NewPacketConn(c2) +// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// +// Also it is possible for the application to leave or rejoin a +// multicast group on the network interface. +// +// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff01::114")}); err != nil { +// // error handling +// } +// +// +// Source-specific multicasting +// +// An application that uses PacketConn on MLDv2 supported platform is +// able to join source-specific multicast groups. +// The application may use JoinSourceSpecificGroup and +// LeaveSourceSpecificGroup for the operation known as "include" mode, +// +// ssmgroup := net.UDPAddr{IP: net.ParseIP("ff32::8000:9")} +// ssmsource := net.UDPAddr{IP: net.ParseIP("fe80::cafe")} +// if err := p.JoinSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// if err := p.LeaveSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// +// or JoinGroup, ExcludeSourceSpecificGroup, +// IncludeSourceSpecificGroup and LeaveGroup for the operation known +// as "exclude" mode. +// +// exclsource := net.UDPAddr{IP: net.ParseIP("fe80::dead")} +// if err := p.JoinGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// if err := p.ExcludeSourceSpecificGroup(en0, &ssmgroup, &exclsource); err != nil { +// // error handling +// } +// if err := p.LeaveGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// +// Note that it depends on each platform implementation what happens +// when an application which runs on MLDv2 unsupported platform uses +// JoinSourceSpecificGroup and LeaveSourceSpecificGroup. +// In general the platform tries to fall back to conversations using +// MLDv1 and starts to listen to multicast traffic. +// In the fallback case, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup may return an error. +package ipv6 // import "golang.org/x/net/ipv6" + +// BUG(mikio): This package is not implemented on NaCl and Plan 9. diff --git a/vendor/golang.org/x/net/ipv6/endpoint.go b/vendor/golang.org/x/net/ipv6/endpoint.go new file mode 100644 index 0000000..ce0b0ce --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/endpoint.go @@ -0,0 +1,130 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + "time" + + "golang.org/x/net/internal/netreflect" +) + +// BUG(mikio): On Windows, the JoinSourceSpecificGroup, +// LeaveSourceSpecificGroup, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup methods of PacketConn are not +// implemented. + +// A Conn represents a network endpoint that uses IPv6 transport. +// It allows to set basic IP-level socket options such as traffic +// class and hop limit. +type Conn struct { + genericOpt +} + +type genericOpt struct { + net.Conn +} + +func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil } + +// PathMTU returns a path MTU value for the destination associated +// with the endpoint. +func (c *Conn) PathMTU() (int, error) { + if !c.genericOpt.ok() { + return 0, syscall.EINVAL + } + s, err := netreflect.SocketOf(c.genericOpt.Conn) + if err != nil { + return 0, err + } + _, mtu, err := getMTUInfo(s, &sockOpts[ssoPathMTU]) + if err != nil { + return 0, err + } + return mtu, nil +} + +// NewConn returns a new Conn. +func NewConn(c net.Conn) *Conn { + return &Conn{ + genericOpt: genericOpt{Conn: c}, + } +} + +// A PacketConn represents a packet network endpoint that uses IPv6 +// transport. It is used to control several IP-level socket options +// including IPv6 header manipulation. It also provides datagram +// based network I/O methods specific to the IPv6 and higher layer +// protocols such as OSPF, GRE, and UDP. +type PacketConn struct { + genericOpt + dgramOpt + payloadHandler +} + +type dgramOpt struct { + net.PacketConn +} + +func (c *dgramOpt) ok() bool { return c != nil && c.PacketConn != nil } + +// SetControlMessage allows to receive the per packet basis IP-level +// socket options. +func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + s, err := netreflect.PacketSocketOf(c.dgramOpt.PacketConn) + if err != nil { + return err + } + return setControlMessage(s, &c.payloadHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *PacketConn) SetDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + return c.payloadHandler.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *PacketConn) SetReadDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + return c.payloadHandler.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *PacketConn) SetWriteDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + return c.payloadHandler.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *PacketConn) Close() error { + if !c.payloadHandler.ok() { + return syscall.EINVAL + } + return c.payloadHandler.Close() +} + +// NewPacketConn returns a new PacketConn using c as its underlying +// transport. +func NewPacketConn(c net.PacketConn) *PacketConn { + return &PacketConn{ + genericOpt: genericOpt{Conn: c.(net.Conn)}, + dgramOpt: dgramOpt{PacketConn: c}, + payloadHandler: payloadHandler{PacketConn: c}, + } +} diff --git a/vendor/golang.org/x/net/ipv6/example_test.go b/vendor/golang.org/x/net/ipv6/example_test.go new file mode 100644 index 0000000..e761aa2 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/example_test.go @@ -0,0 +1,216 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "fmt" + "log" + "net" + "os" + "time" + + "golang.org/x/net/icmp" + "golang.org/x/net/ipv6" +) + +func ExampleConn_markingTCP() { + ln, err := net.Listen("tcp", "[::]:1024") + if err != nil { + log.Fatal(err) + } + defer ln.Close() + + for { + c, err := ln.Accept() + if err != nil { + log.Fatal(err) + } + go func(c net.Conn) { + defer c.Close() + if c.RemoteAddr().(*net.TCPAddr).IP.To16() != nil && c.RemoteAddr().(*net.TCPAddr).IP.To4() == nil { + p := ipv6.NewConn(c) + if err := p.SetTrafficClass(0x28); err != nil { // DSCP AF11 + log.Fatal(err) + } + if err := p.SetHopLimit(128); err != nil { + log.Fatal(err) + } + } + if _, err := c.Write([]byte("HELLO-R-U-THERE-ACK")); err != nil { + log.Fatal(err) + } + }(c) + } +} + +func ExamplePacketConn_servingOneShotMulticastDNS() { + c, err := net.ListenPacket("udp6", "[::]:5353") // mDNS over UDP + if err != nil { + log.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + + en0, err := net.InterfaceByName("en0") + if err != nil { + log.Fatal(err) + } + mDNSLinkLocal := net.UDPAddr{IP: net.ParseIP("ff02::fb")} + if err := p.JoinGroup(en0, &mDNSLinkLocal); err != nil { + log.Fatal(err) + } + defer p.LeaveGroup(en0, &mDNSLinkLocal) + if err := p.SetControlMessage(ipv6.FlagDst|ipv6.FlagInterface, true); err != nil { + log.Fatal(err) + } + + var wcm ipv6.ControlMessage + b := make([]byte, 1500) + for { + _, rcm, peer, err := p.ReadFrom(b) + if err != nil { + log.Fatal(err) + } + if !rcm.Dst.IsMulticast() || !rcm.Dst.Equal(mDNSLinkLocal.IP) { + continue + } + wcm.IfIndex = rcm.IfIndex + answers := []byte("FAKE-MDNS-ANSWERS") // fake mDNS answers, you need to implement this + if _, err := p.WriteTo(answers, &wcm, peer); err != nil { + log.Fatal(err) + } + } +} + +func ExamplePacketConn_tracingIPPacketRoute() { + // Tracing an IP packet route to www.google.com. + + const host = "www.google.com" + ips, err := net.LookupIP(host) + if err != nil { + log.Fatal(err) + } + var dst net.IPAddr + for _, ip := range ips { + if ip.To16() != nil && ip.To4() == nil { + dst.IP = ip + fmt.Printf("using %v for tracing an IP packet route to %s\n", dst.IP, host) + break + } + } + if dst.IP == nil { + log.Fatal("no AAAA record found") + } + + c, err := net.ListenPacket("ip6:58", "::") // ICMP for IPv6 + if err != nil { + log.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + + if err := p.SetControlMessage(ipv6.FlagHopLimit|ipv6.FlagSrc|ipv6.FlagDst|ipv6.FlagInterface, true); err != nil { + log.Fatal(err) + } + wm := icmp.Message{ + Type: ipv6.ICMPTypeEchoRequest, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, + Data: []byte("HELLO-R-U-THERE"), + }, + } + var f ipv6.ICMPFilter + f.SetAll(true) + f.Accept(ipv6.ICMPTypeTimeExceeded) + f.Accept(ipv6.ICMPTypeEchoReply) + if err := p.SetICMPFilter(&f); err != nil { + log.Fatal(err) + } + + var wcm ipv6.ControlMessage + rb := make([]byte, 1500) + for i := 1; i <= 64; i++ { // up to 64 hops + wm.Body.(*icmp.Echo).Seq = i + wb, err := wm.Marshal(nil) + if err != nil { + log.Fatal(err) + } + + // In the real world usually there are several + // multiple traffic-engineered paths for each hop. + // You may need to probe a few times to each hop. + begin := time.Now() + wcm.HopLimit = i + if _, err := p.WriteTo(wb, &wcm, &dst); err != nil { + log.Fatal(err) + } + if err := p.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil { + log.Fatal(err) + } + n, rcm, peer, err := p.ReadFrom(rb) + if err != nil { + if err, ok := err.(net.Error); ok && err.Timeout() { + fmt.Printf("%v\t*\n", i) + continue + } + log.Fatal(err) + } + rm, err := icmp.ParseMessage(58, rb[:n]) + if err != nil { + log.Fatal(err) + } + rtt := time.Since(begin) + + // In the real world you need to determine whether the + // received message is yours using ControlMessage.Src, + // ControlMesage.Dst, icmp.Echo.ID and icmp.Echo.Seq. + switch rm.Type { + case ipv6.ICMPTypeTimeExceeded: + names, _ := net.LookupAddr(peer.String()) + fmt.Printf("%d\t%v %+v %v\n\t%+v\n", i, peer, names, rtt, rcm) + case ipv6.ICMPTypeEchoReply: + names, _ := net.LookupAddr(peer.String()) + fmt.Printf("%d\t%v %+v %v\n\t%+v\n", i, peer, names, rtt, rcm) + return + } + } +} + +func ExamplePacketConn_advertisingOSPFHello() { + c, err := net.ListenPacket("ip6:89", "::") // OSPF for IPv6 + if err != nil { + log.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + + en0, err := net.InterfaceByName("en0") + if err != nil { + log.Fatal(err) + } + allSPFRouters := net.IPAddr{IP: net.ParseIP("ff02::5")} + if err := p.JoinGroup(en0, &allSPFRouters); err != nil { + log.Fatal(err) + } + defer p.LeaveGroup(en0, &allSPFRouters) + + hello := make([]byte, 24) // fake hello data, you need to implement this + ospf := make([]byte, 16) // fake ospf header, you need to implement this + ospf[0] = 3 // version 3 + ospf[1] = 1 // hello packet + ospf = append(ospf, hello...) + if err := p.SetChecksum(true, 12); err != nil { + log.Fatal(err) + } + + cm := ipv6.ControlMessage{ + TrafficClass: 0xc0, // DSCP CS6 + HopLimit: 1, + IfIndex: en0.Index, + } + if _, err := p.WriteTo(ospf, &cm, &allSPFRouters); err != nil { + log.Fatal(err) + } +} diff --git a/vendor/golang.org/x/net/ipv6/gen.go b/vendor/golang.org/x/net/ipv6/gen.go new file mode 100644 index 0000000..41886ec --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/gen.go @@ -0,0 +1,199 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +//go:generate go run gen.go + +// This program generates system adaptation constants and types, +// internet protocol constants and tables by reading template files +// and IANA protocol registries. +package main + +import ( + "bytes" + "encoding/xml" + "fmt" + "go/format" + "io" + "io/ioutil" + "net/http" + "os" + "os/exec" + "runtime" + "strconv" + "strings" +) + +func main() { + if err := genzsys(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + if err := geniana(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func genzsys() error { + defs := "defs_" + runtime.GOOS + ".go" + f, err := os.Open(defs) + if err != nil { + if os.IsNotExist(err) { + return nil + } + return err + } + f.Close() + cmd := exec.Command("go", "tool", "cgo", "-godefs", defs) + b, err := cmd.Output() + if err != nil { + return err + } + b, err = format.Source(b) + if err != nil { + return err + } + zsys := "zsys_" + runtime.GOOS + ".go" + switch runtime.GOOS { + case "freebsd", "linux": + zsys = "zsys_" + runtime.GOOS + "_" + runtime.GOARCH + ".go" + } + if err := ioutil.WriteFile(zsys, b, 0644); err != nil { + return err + } + return nil +} + +var registries = []struct { + url string + parse func(io.Writer, io.Reader) error +}{ + { + "http://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xml", + parseICMPv6Parameters, + }, +} + +func geniana() error { + var bb bytes.Buffer + fmt.Fprintf(&bb, "// go generate gen.go\n") + fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n") + fmt.Fprintf(&bb, "package ipv6\n\n") + for _, r := range registries { + resp, err := http.Get(r.url) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("got HTTP status code %v for %v\n", resp.StatusCode, r.url) + } + if err := r.parse(&bb, resp.Body); err != nil { + return err + } + fmt.Fprintf(&bb, "\n") + } + b, err := format.Source(bb.Bytes()) + if err != nil { + return err + } + if err := ioutil.WriteFile("iana.go", b, 0644); err != nil { + return err + } + return nil +} + +func parseICMPv6Parameters(w io.Writer, r io.Reader) error { + dec := xml.NewDecoder(r) + var icp icmpv6Parameters + if err := dec.Decode(&icp); err != nil { + return err + } + prs := icp.escape() + fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated) + fmt.Fprintf(w, "const (\n") + for _, pr := range prs { + if pr.Name == "" { + continue + } + fmt.Fprintf(w, "ICMPType%s ICMPType = %d", pr.Name, pr.Value) + fmt.Fprintf(w, "// %s\n", pr.OrigName) + } + fmt.Fprintf(w, ")\n\n") + fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated) + fmt.Fprintf(w, "var icmpTypes = map[ICMPType]string{\n") + for _, pr := range prs { + if pr.Name == "" { + continue + } + fmt.Fprintf(w, "%d: %q,\n", pr.Value, strings.ToLower(pr.OrigName)) + } + fmt.Fprintf(w, "}\n") + return nil +} + +type icmpv6Parameters struct { + XMLName xml.Name `xml:"registry"` + Title string `xml:"title"` + Updated string `xml:"updated"` + Registries []struct { + Title string `xml:"title"` + Records []struct { + Value string `xml:"value"` + Name string `xml:"name"` + } `xml:"record"` + } `xml:"registry"` +} + +type canonICMPv6ParamRecord struct { + OrigName string + Name string + Value int +} + +func (icp *icmpv6Parameters) escape() []canonICMPv6ParamRecord { + id := -1 + for i, r := range icp.Registries { + if strings.Contains(r.Title, "Type") || strings.Contains(r.Title, "type") { + id = i + break + } + } + if id < 0 { + return nil + } + prs := make([]canonICMPv6ParamRecord, len(icp.Registries[id].Records)) + sr := strings.NewReplacer( + "Messages", "", + "Message", "", + "ICMP", "", + "+", "P", + "-", "", + "/", "", + ".", "", + " ", "", + ) + for i, pr := range icp.Registries[id].Records { + if strings.Contains(pr.Name, "Reserved") || + strings.Contains(pr.Name, "Unassigned") || + strings.Contains(pr.Name, "Deprecated") || + strings.Contains(pr.Name, "Experiment") || + strings.Contains(pr.Name, "experiment") { + continue + } + ss := strings.Split(pr.Name, "\n") + if len(ss) > 1 { + prs[i].Name = strings.Join(ss, " ") + } else { + prs[i].Name = ss[0] + } + s := strings.TrimSpace(prs[i].Name) + prs[i].OrigName = s + prs[i].Name = sr.Replace(s) + prs[i].Value, _ = strconv.Atoi(pr.Value) + } + return prs +} diff --git a/vendor/golang.org/x/net/ipv6/genericopt_posix.go b/vendor/golang.org/x/net/ipv6/genericopt_posix.go new file mode 100644 index 0000000..0a8d988 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/genericopt_posix.go @@ -0,0 +1,64 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv6 + +import ( + "syscall" + + "golang.org/x/net/internal/netreflect" +) + +// TrafficClass returns the traffic class field value for outgoing +// packets. +func (c *genericOpt) TrafficClass() (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + s, err := netreflect.SocketOf(c.Conn) + if err != nil { + return 0, err + } + return getInt(s, &sockOpts[ssoTrafficClass]) +} + +// SetTrafficClass sets the traffic class field value for future +// outgoing packets. +func (c *genericOpt) SetTrafficClass(tclass int) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.SocketOf(c.Conn) + if err != nil { + return err + } + return setInt(s, &sockOpts[ssoTrafficClass], tclass) +} + +// HopLimit returns the hop limit field value for outgoing packets. +func (c *genericOpt) HopLimit() (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + s, err := netreflect.SocketOf(c.Conn) + if err != nil { + return 0, err + } + return getInt(s, &sockOpts[ssoHopLimit]) +} + +// SetHopLimit sets the hop limit field value for future outgoing +// packets. +func (c *genericOpt) SetHopLimit(hoplim int) error { + if !c.ok() { + return syscall.EINVAL + } + s, err := netreflect.SocketOf(c.Conn) + if err != nil { + return err + } + return setInt(s, &sockOpts[ssoHopLimit], hoplim) +} diff --git a/vendor/golang.org/x/net/ipv6/genericopt_stub.go b/vendor/golang.org/x/net/ipv6/genericopt_stub.go new file mode 100644 index 0000000..9dfc57d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/genericopt_stub.go @@ -0,0 +1,30 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv6 + +// TrafficClass returns the traffic class field value for outgoing +// packets. +func (c *genericOpt) TrafficClass() (int, error) { + return 0, errOpNoSupport +} + +// SetTrafficClass sets the traffic class field value for future +// outgoing packets. +func (c *genericOpt) SetTrafficClass(tclass int) error { + return errOpNoSupport +} + +// HopLimit returns the hop limit field value for outgoing packets. +func (c *genericOpt) HopLimit() (int, error) { + return 0, errOpNoSupport +} + +// SetHopLimit sets the hop limit field value for future outgoing +// packets. +func (c *genericOpt) SetHopLimit(hoplim int) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv6/go19_test.go b/vendor/golang.org/x/net/ipv6/go19_test.go new file mode 100644 index 0000000..c7cb057 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/go19_test.go @@ -0,0 +1,11 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package ipv6 + +func init() { + disableTests = true +} diff --git a/vendor/golang.org/x/net/ipv6/header.go b/vendor/golang.org/x/net/ipv6/header.go new file mode 100644 index 0000000..e05cb08 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/header.go @@ -0,0 +1,55 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "encoding/binary" + "fmt" + "net" +) + +const ( + Version = 6 // protocol version + HeaderLen = 40 // header length +) + +// A Header represents an IPv6 base header. +type Header struct { + Version int // protocol version + TrafficClass int // traffic class + FlowLabel int // flow label + PayloadLen int // payload length + NextHeader int // next header + HopLimit int // hop limit + Src net.IP // source address + Dst net.IP // destination address +} + +func (h *Header) String() string { + if h == nil { + return "" + } + return fmt.Sprintf("ver=%d tclass=%#x flowlbl=%#x payloadlen=%d nxthdr=%d hoplim=%d src=%v dst=%v", h.Version, h.TrafficClass, h.FlowLabel, h.PayloadLen, h.NextHeader, h.HopLimit, h.Src, h.Dst) +} + +// ParseHeader parses b as an IPv6 base header. +func ParseHeader(b []byte) (*Header, error) { + if len(b) < HeaderLen { + return nil, errHeaderTooShort + } + h := &Header{ + Version: int(b[0]) >> 4, + TrafficClass: int(b[0]&0x0f)<<4 | int(b[1])>>4, + FlowLabel: int(b[1]&0x0f)<<16 | int(b[2])<<8 | int(b[3]), + PayloadLen: int(binary.BigEndian.Uint16(b[4:6])), + NextHeader: int(b[6]), + HopLimit: int(b[7]), + } + h.Src = make(net.IP, net.IPv6len) + copy(h.Src, b[8:24]) + h.Dst = make(net.IP, net.IPv6len) + copy(h.Dst, b[24:40]) + return h, nil +} diff --git a/vendor/golang.org/x/net/ipv6/header_test.go b/vendor/golang.org/x/net/ipv6/header_test.go new file mode 100644 index 0000000..ca11dc2 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/header_test.go @@ -0,0 +1,55 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "net" + "reflect" + "strings" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/ipv6" +) + +var ( + wireHeaderFromKernel = [ipv6.HeaderLen]byte{ + 0x69, 0x8b, 0xee, 0xf1, + 0xca, 0xfe, 0x2c, 0x01, + 0x20, 0x01, 0x0d, 0xb8, + 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, + 0x20, 0x01, 0x0d, 0xb8, + 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, + } + + testHeader = &ipv6.Header{ + Version: ipv6.Version, + TrafficClass: iana.DiffServAF43, + FlowLabel: 0xbeef1, + PayloadLen: 0xcafe, + NextHeader: iana.ProtocolIPv6Frag, + HopLimit: 1, + Src: net.ParseIP("2001:db8:1::1"), + Dst: net.ParseIP("2001:db8:2::1"), + } +) + +func TestParseHeader(t *testing.T) { + h, err := ipv6.ParseHeader(wireHeaderFromKernel[:]) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(h, testHeader) { + t.Fatalf("got %#v; want %#v", h, testHeader) + } + s := h.String() + if strings.Contains(s, ",") { + t.Fatalf("should be space-separated values: %s", s) + } +} diff --git a/vendor/golang.org/x/net/ipv6/helper.go b/vendor/golang.org/x/net/ipv6/helper.go new file mode 100644 index 0000000..7a42e58 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/helper.go @@ -0,0 +1,53 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "encoding/binary" + "errors" + "net" + "unsafe" +) + +var ( + errMissingAddress = errors.New("missing address") + errHeaderTooShort = errors.New("header too short") + errInvalidConnType = errors.New("invalid conn type") + errOpNoSupport = errors.New("operation not supported") + errNoSuchInterface = errors.New("no such interface") + + nativeEndian binary.ByteOrder +) + +func init() { + i := uint32(1) + b := (*[4]byte)(unsafe.Pointer(&i)) + if b[0] == 1 { + nativeEndian = binary.LittleEndian + } else { + nativeEndian = binary.BigEndian + } +} + +func boolint(b bool) int { + if b { + return 1 + } + return 0 +} + +func netAddrToIP16(a net.Addr) net.IP { + switch v := a.(type) { + case *net.UDPAddr: + if ip := v.IP.To16(); ip != nil && ip.To4() == nil { + return ip + } + case *net.IPAddr: + if ip := v.IP.To16(); ip != nil && ip.To4() == nil { + return ip + } + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv6/iana.go b/vendor/golang.org/x/net/ipv6/iana.go new file mode 100644 index 0000000..3c6214f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/iana.go @@ -0,0 +1,82 @@ +// go generate gen.go +// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +package ipv6 + +// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2015-07-07 +const ( + ICMPTypeDestinationUnreachable ICMPType = 1 // Destination Unreachable + ICMPTypePacketTooBig ICMPType = 2 // Packet Too Big + ICMPTypeTimeExceeded ICMPType = 3 // Time Exceeded + ICMPTypeParameterProblem ICMPType = 4 // Parameter Problem + ICMPTypeEchoRequest ICMPType = 128 // Echo Request + ICMPTypeEchoReply ICMPType = 129 // Echo Reply + ICMPTypeMulticastListenerQuery ICMPType = 130 // Multicast Listener Query + ICMPTypeMulticastListenerReport ICMPType = 131 // Multicast Listener Report + ICMPTypeMulticastListenerDone ICMPType = 132 // Multicast Listener Done + ICMPTypeRouterSolicitation ICMPType = 133 // Router Solicitation + ICMPTypeRouterAdvertisement ICMPType = 134 // Router Advertisement + ICMPTypeNeighborSolicitation ICMPType = 135 // Neighbor Solicitation + ICMPTypeNeighborAdvertisement ICMPType = 136 // Neighbor Advertisement + ICMPTypeRedirect ICMPType = 137 // Redirect Message + ICMPTypeRouterRenumbering ICMPType = 138 // Router Renumbering + ICMPTypeNodeInformationQuery ICMPType = 139 // ICMP Node Information Query + ICMPTypeNodeInformationResponse ICMPType = 140 // ICMP Node Information Response + ICMPTypeInverseNeighborDiscoverySolicitation ICMPType = 141 // Inverse Neighbor Discovery Solicitation Message + ICMPTypeInverseNeighborDiscoveryAdvertisement ICMPType = 142 // Inverse Neighbor Discovery Advertisement Message + ICMPTypeVersion2MulticastListenerReport ICMPType = 143 // Version 2 Multicast Listener Report + ICMPTypeHomeAgentAddressDiscoveryRequest ICMPType = 144 // Home Agent Address Discovery Request Message + ICMPTypeHomeAgentAddressDiscoveryReply ICMPType = 145 // Home Agent Address Discovery Reply Message + ICMPTypeMobilePrefixSolicitation ICMPType = 146 // Mobile Prefix Solicitation + ICMPTypeMobilePrefixAdvertisement ICMPType = 147 // Mobile Prefix Advertisement + ICMPTypeCertificationPathSolicitation ICMPType = 148 // Certification Path Solicitation Message + ICMPTypeCertificationPathAdvertisement ICMPType = 149 // Certification Path Advertisement Message + ICMPTypeMulticastRouterAdvertisement ICMPType = 151 // Multicast Router Advertisement + ICMPTypeMulticastRouterSolicitation ICMPType = 152 // Multicast Router Solicitation + ICMPTypeMulticastRouterTermination ICMPType = 153 // Multicast Router Termination + ICMPTypeFMIPv6 ICMPType = 154 // FMIPv6 Messages + ICMPTypeRPLControl ICMPType = 155 // RPL Control Message + ICMPTypeILNPv6LocatorUpdate ICMPType = 156 // ILNPv6 Locator Update Message + ICMPTypeDuplicateAddressRequest ICMPType = 157 // Duplicate Address Request + ICMPTypeDuplicateAddressConfirmation ICMPType = 158 // Duplicate Address Confirmation + ICMPTypeMPLControl ICMPType = 159 // MPL Control Message +) + +// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2015-07-07 +var icmpTypes = map[ICMPType]string{ + 1: "destination unreachable", + 2: "packet too big", + 3: "time exceeded", + 4: "parameter problem", + 128: "echo request", + 129: "echo reply", + 130: "multicast listener query", + 131: "multicast listener report", + 132: "multicast listener done", + 133: "router solicitation", + 134: "router advertisement", + 135: "neighbor solicitation", + 136: "neighbor advertisement", + 137: "redirect message", + 138: "router renumbering", + 139: "icmp node information query", + 140: "icmp node information response", + 141: "inverse neighbor discovery solicitation message", + 142: "inverse neighbor discovery advertisement message", + 143: "version 2 multicast listener report", + 144: "home agent address discovery request message", + 145: "home agent address discovery reply message", + 146: "mobile prefix solicitation", + 147: "mobile prefix advertisement", + 148: "certification path solicitation message", + 149: "certification path advertisement message", + 151: "multicast router advertisement", + 152: "multicast router solicitation", + 153: "multicast router termination", + 154: "fmipv6 messages", + 155: "rpl control message", + 156: "ilnpv6 locator update message", + 157: "duplicate address request", + 158: "duplicate address confirmation", + 159: "mpl control message", +} diff --git a/vendor/golang.org/x/net/ipv6/icmp.go b/vendor/golang.org/x/net/ipv6/icmp.go new file mode 100644 index 0000000..ff21d10 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp.go @@ -0,0 +1,60 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import "golang.org/x/net/internal/iana" + +// BUG(mikio): On Windows, methods related to ICMPFilter are not +// implemented. + +// An ICMPType represents a type of ICMP message. +type ICMPType int + +func (typ ICMPType) String() string { + s, ok := icmpTypes[typ] + if !ok { + return "" + } + return s +} + +// Protocol returns the ICMPv6 protocol number. +func (typ ICMPType) Protocol() int { + return iana.ProtocolIPv6ICMP +} + +// An ICMPFilter represents an ICMP message filter for incoming +// packets. The filter belongs to a packet delivery path on a host and +// it cannot interact with forwarding packets or tunnel-outer packets. +// +// Note: RFC 2460 defines a reasonable role model. A node means a +// device that implements IP. A router means a node that forwards IP +// packets not explicitly addressed to itself, and a host means a node +// that is not a router. +type ICMPFilter struct { + icmpv6Filter +} + +// Accept accepts incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Accept(typ ICMPType) { + f.accept(typ) +} + +// Block blocks incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Block(typ ICMPType) { + f.block(typ) +} + +// SetAll sets the filter action to the filter. +func (f *ICMPFilter) SetAll(block bool) { + f.setAll(block) +} + +// WillBlock reports whether the ICMP type will be blocked. +func (f *ICMPFilter) WillBlock(typ ICMPType) bool { + return f.willBlock(typ) +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_bsd.go b/vendor/golang.org/x/net/ipv6/icmp_bsd.go new file mode 100644 index 0000000..e1a791d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_bsd.go @@ -0,0 +1,29 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.Filt[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.Filt { + if block { + f.Filt[i] = 0 + } else { + f.Filt[i] = 1<<32 - 1 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.Filt[typ>>5]&(1<<(uint32(typ)&31)) == 0 +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_linux.go b/vendor/golang.org/x/net/ipv6/icmp_linux.go new file mode 100644 index 0000000..647f6b4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_linux.go @@ -0,0 +1,27 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.Data[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.Data[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.Data { + if block { + f.Data[i] = 1<<32 - 1 + } else { + f.Data[i] = 0 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.Data[typ>>5]&(1<<(uint32(typ)&31)) != 0 +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_solaris.go b/vendor/golang.org/x/net/ipv6/icmp_solaris.go new file mode 100644 index 0000000..7c23bb1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_solaris.go @@ -0,0 +1,27 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.X__icmp6_filt[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.X__icmp6_filt[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.X__icmp6_filt { + if block { + f.X__icmp6_filt[i] = 0 + } else { + f.X__icmp6_filt[i] = 1<<32 - 1 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.X__icmp6_filt[typ>>5]&(1<<(uint32(typ)&31)) == 0 +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_stub.go b/vendor/golang.org/x/net/ipv6/icmp_stub.go new file mode 100644 index 0000000..3cd84e1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_stub.go @@ -0,0 +1,23 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv6 + +type icmpv6Filter struct { +} + +func (f *icmpv6Filter) accept(typ ICMPType) { +} + +func (f *icmpv6Filter) block(typ ICMPType) { +} + +func (f *icmpv6Filter) setAll(block bool) { +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return false +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_test.go b/vendor/golang.org/x/net/ipv6/icmp_test.go new file mode 100644 index 0000000..d8e9675 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_test.go @@ -0,0 +1,96 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "net" + "reflect" + "runtime" + "testing" + + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +var icmpStringTests = []struct { + in ipv6.ICMPType + out string +}{ + {ipv6.ICMPTypeDestinationUnreachable, "destination unreachable"}, + + {256, ""}, +} + +func TestICMPString(t *testing.T) { + for _, tt := range icmpStringTests { + s := tt.in.String() + if s != tt.out { + t.Errorf("got %s; want %s", s, tt.out) + } + } +} + +func TestICMPFilter(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + + var f ipv6.ICMPFilter + for _, toggle := range []bool{false, true} { + f.SetAll(toggle) + for _, typ := range []ipv6.ICMPType{ + ipv6.ICMPTypeDestinationUnreachable, + ipv6.ICMPTypeEchoReply, + ipv6.ICMPTypeNeighborSolicitation, + ipv6.ICMPTypeDuplicateAddressConfirmation, + } { + f.Accept(typ) + if f.WillBlock(typ) { + t.Errorf("ipv6.ICMPFilter.Set(%v, false) failed", typ) + } + f.Block(typ) + if !f.WillBlock(typ) { + t.Errorf("ipv6.ICMPFilter.Set(%v, true) failed", typ) + } + } + } +} + +func TestSetICMPFilter(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + c, err := net.ListenPacket("ip6:ipv6-icmp", "::1") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + p := ipv6.NewPacketConn(c) + + var f ipv6.ICMPFilter + f.SetAll(true) + f.Accept(ipv6.ICMPTypeEchoRequest) + f.Accept(ipv6.ICMPTypeEchoReply) + if err := p.SetICMPFilter(&f); err != nil { + t.Fatal(err) + } + kf, err := p.ICMPFilter() + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(kf, &f) { + t.Fatalf("got %#v; want %#v", kf, f) + } +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_windows.go b/vendor/golang.org/x/net/ipv6/icmp_windows.go new file mode 100644 index 0000000..443cd07 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_windows.go @@ -0,0 +1,22 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) block(typ ICMPType) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) setAll(block bool) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + // TODO(mikio): implement this + return false +} diff --git a/vendor/golang.org/x/net/ipv6/ipv6_test.go b/vendor/golang.org/x/net/ipv6/ipv6_test.go new file mode 100644 index 0000000..8d2d235 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/ipv6_test.go @@ -0,0 +1,22 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "fmt" + "os" + "testing" +) + +var disableTests = false + +func TestMain(m *testing.M) { + if disableTests { + fmt.Fprintf(os.Stderr, "ipv6 tests disabled in Go 1.9 until netreflect is fixed (Issue 19051)\n") + os.Exit(0) + } + // call flag.Parse() here if TestMain uses flags + os.Exit(m.Run()) +} diff --git a/vendor/golang.org/x/net/ipv6/mocktransponder_test.go b/vendor/golang.org/x/net/ipv6/mocktransponder_test.go new file mode 100644 index 0000000..6efe56c --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/mocktransponder_test.go @@ -0,0 +1,32 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "net" + "testing" +) + +func connector(t *testing.T, network, addr string, done chan<- bool) { + defer func() { done <- true }() + + c, err := net.Dial(network, addr) + if err != nil { + t.Error(err) + return + } + c.Close() +} + +func acceptor(t *testing.T, ln net.Listener, done chan<- bool) { + defer func() { done <- true }() + + c, err := ln.Accept() + if err != nil { + t.Error(err) + return + } + c.Close() +} diff --git a/vendor/golang.org/x/net/ipv6/multicast_test.go b/vendor/golang.org/x/net/ipv6/multicast_test.go new file mode 100644 index 0000000..69a21cd --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/multicast_test.go @@ -0,0 +1,264 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "bytes" + "net" + "os" + "runtime" + "testing" + "time" + + "golang.org/x/net/icmp" + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +var packetConnReadWriteMulticastUDPTests = []struct { + addr string + grp, src *net.UDPAddr +}{ + {"[ff02::]:0", &net.UDPAddr{IP: net.ParseIP("ff02::114")}, nil}, // see RFC 4727 + + {"[ff30::8000:0]:0", &net.UDPAddr{IP: net.ParseIP("ff30::8000:1")}, &net.UDPAddr{IP: net.IPv6loopback}}, // see RFC 5771 +} + +func TestPacketConnReadWriteMulticastUDP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + if !nettest.SupportsIPv6MulticastDeliveryOnLoopback() { + t.Skipf("multicast delivery doesn't work correctly on %s", runtime.GOOS) + } + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + for _, tt := range packetConnReadWriteMulticastUDPTests { + c, err := net.ListenPacket("udp6", tt.addr) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + grp := *tt.grp + grp.Port = c.LocalAddr().(*net.UDPAddr).Port + p := ipv6.NewPacketConn(c) + defer p.Close() + if tt.src == nil { + if err := p.JoinGroup(ifi, &grp); err != nil { + t.Fatal(err) + } + defer p.LeaveGroup(ifi, &grp) + } else { + if err := p.JoinSourceSpecificGroup(ifi, &grp, tt.src); err != nil { + switch runtime.GOOS { + case "freebsd", "linux": + default: // platforms that don't support MLDv2 fail here + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + defer p.LeaveSourceSpecificGroup(ifi, &grp, tt.src) + } + if err := p.SetMulticastInterface(ifi); err != nil { + t.Fatal(err) + } + if _, err := p.MulticastInterface(); err != nil { + t.Fatal(err) + } + if err := p.SetMulticastLoopback(true); err != nil { + t.Fatal(err) + } + if _, err := p.MulticastLoopback(); err != nil { + t.Fatal(err) + } + + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + Src: net.IPv6loopback, + IfIndex: ifi.Index, + } + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + wb := []byte("HELLO-R-U-THERE") + + for i, toggle := range []bool{true, false, true} { + if err := p.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil { + t.Fatal(err) + } + cm.HopLimit = i + 1 + if n, err := p.WriteTo(wb, &cm, &grp); err != nil { + t.Fatal(err) + } else if n != len(wb) { + t.Fatal(err) + } + rb := make([]byte, 128) + if n, _, _, err := p.ReadFrom(rb); err != nil { + t.Fatal(err) + } else if !bytes.Equal(rb[:n], wb) { + t.Fatalf("got %v; want %v", rb[:n], wb) + } + } + } +} + +var packetConnReadWriteMulticastICMPTests = []struct { + grp, src *net.IPAddr +}{ + {&net.IPAddr{IP: net.ParseIP("ff02::114")}, nil}, // see RFC 4727 + + {&net.IPAddr{IP: net.ParseIP("ff30::8000:1")}, &net.IPAddr{IP: net.IPv6loopback}}, // see RFC 5771 +} + +func TestPacketConnReadWriteMulticastICMP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + if !nettest.SupportsIPv6MulticastDeliveryOnLoopback() { + t.Skipf("multicast delivery doesn't work correctly on %s", runtime.GOOS) + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + for _, tt := range packetConnReadWriteMulticastICMPTests { + c, err := net.ListenPacket("ip6:ipv6-icmp", "::") + if err != nil { + t.Fatal(err) + } + defer c.Close() + + pshicmp := icmp.IPv6PseudoHeader(c.LocalAddr().(*net.IPAddr).IP, tt.grp.IP) + p := ipv6.NewPacketConn(c) + defer p.Close() + if tt.src == nil { + if err := p.JoinGroup(ifi, tt.grp); err != nil { + t.Fatal(err) + } + defer p.LeaveGroup(ifi, tt.grp) + } else { + if err := p.JoinSourceSpecificGroup(ifi, tt.grp, tt.src); err != nil { + switch runtime.GOOS { + case "freebsd", "linux": + default: // platforms that don't support MLDv2 fail here + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + defer p.LeaveSourceSpecificGroup(ifi, tt.grp, tt.src) + } + if err := p.SetMulticastInterface(ifi); err != nil { + t.Fatal(err) + } + if _, err := p.MulticastInterface(); err != nil { + t.Fatal(err) + } + if err := p.SetMulticastLoopback(true); err != nil { + t.Fatal(err) + } + if _, err := p.MulticastLoopback(); err != nil { + t.Fatal(err) + } + + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + Src: net.IPv6loopback, + IfIndex: ifi.Index, + } + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + + var f ipv6.ICMPFilter + f.SetAll(true) + f.Accept(ipv6.ICMPTypeEchoReply) + if err := p.SetICMPFilter(&f); err != nil { + t.Fatal(err) + } + + var psh []byte + for i, toggle := range []bool{true, false, true} { + if toggle { + psh = nil + if err := p.SetChecksum(true, 2); err != nil { + // Solaris never allows to + // modify ICMP properties. + if runtime.GOOS != "solaris" { + t.Fatal(err) + } + } + } else { + psh = pshicmp + // Some platforms never allow to + // disable the kernel checksum + // processing. + p.SetChecksum(false, -1) + } + wb, err := (&icmp.Message{ + Type: ipv6.ICMPTypeEchoRequest, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, Seq: i + 1, + Data: []byte("HELLO-R-U-THERE"), + }, + }).Marshal(psh) + if err != nil { + t.Fatal(err) + } + if err := p.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } + if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil { + t.Fatal(err) + } + cm.HopLimit = i + 1 + if n, err := p.WriteTo(wb, &cm, tt.grp); err != nil { + t.Fatal(err) + } else if n != len(wb) { + t.Fatalf("got %v; want %v", n, len(wb)) + } + rb := make([]byte, 128) + if n, _, _, err := p.ReadFrom(rb); err != nil { + switch runtime.GOOS { + case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } else { + if m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, rb[:n]); err != nil { + t.Fatal(err) + } else if m.Type != ipv6.ICMPTypeEchoReply || m.Code != 0 { + t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv6.ICMPTypeEchoReply, 0) + } + } + } + } +} diff --git a/vendor/golang.org/x/net/ipv6/multicastlistener_test.go b/vendor/golang.org/x/net/ipv6/multicastlistener_test.go new file mode 100644 index 0000000..044db15 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/multicastlistener_test.go @@ -0,0 +1,246 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "fmt" + "net" + "runtime" + "testing" + + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +var udpMultipleGroupListenerTests = []net.Addr{ + &net.UDPAddr{IP: net.ParseIP("ff02::114")}, // see RFC 4727 + &net.UDPAddr{IP: net.ParseIP("ff02::1:114")}, + &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}, +} + +func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + for _, gaddr := range udpMultipleGroupListenerTests { + c, err := net.ListenPacket("udp6", "[::]:0") // wildcard address with non-reusable port + if err != nil { + t.Fatal(err) + } + defer c.Close() + + p := ipv6.NewPacketConn(c) + var mift []*net.Interface + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + if _, ok := nettest.IsMulticastCapable("ip6", &ifi); !ok { + continue + } + if err := p.JoinGroup(&ifi, gaddr); err != nil { + t.Fatal(err) + } + mift = append(mift, &ift[i]) + } + for _, ifi := range mift { + if err := p.LeaveGroup(ifi, gaddr); err != nil { + t.Fatal(err) + } + } + } +} + +func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + for _, gaddr := range udpMultipleGroupListenerTests { + c1, err := net.ListenPacket("udp6", "[ff02::]:1024") // wildcard address with reusable port + if err != nil { + t.Fatal(err) + } + defer c1.Close() + + c2, err := net.ListenPacket("udp6", "[ff02::]:1024") // wildcard address with reusable port + if err != nil { + t.Fatal(err) + } + defer c2.Close() + + var ps [2]*ipv6.PacketConn + ps[0] = ipv6.NewPacketConn(c1) + ps[1] = ipv6.NewPacketConn(c2) + var mift []*net.Interface + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + if _, ok := nettest.IsMulticastCapable("ip6", &ifi); !ok { + continue + } + for _, p := range ps { + if err := p.JoinGroup(&ifi, gaddr); err != nil { + t.Fatal(err) + } + } + mift = append(mift, &ift[i]) + } + for _, ifi := range mift { + for _, p := range ps { + if err := p.LeaveGroup(ifi, gaddr); err != nil { + t.Fatal(err) + } + } + } + } +} + +func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + gaddr := net.IPAddr{IP: net.ParseIP("ff02::114")} // see RFC 4727 + type ml struct { + c *ipv6.PacketConn + ifi *net.Interface + } + var mlt []*ml + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + ip, ok := nettest.IsMulticastCapable("ip6", &ifi) + if !ok { + continue + } + c, err := net.ListenPacket("udp6", fmt.Sprintf("[%s%%%s]:1024", ip.String(), ifi.Name)) // unicast address with non-reusable port + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + if err := p.JoinGroup(&ifi, &gaddr); err != nil { + t.Fatal(err) + } + mlt = append(mlt, &ml{p, &ift[i]}) + } + for _, m := range mlt { + if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil { + t.Fatal(err) + } + } +} + +func TestIPSinglePacketConnWithSingleGroupListener(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + c, err := net.ListenPacket("ip6:ipv6-icmp", "::") // wildcard address + if err != nil { + t.Fatal(err) + } + defer c.Close() + + p := ipv6.NewPacketConn(c) + gaddr := net.IPAddr{IP: net.ParseIP("ff02::114")} // see RFC 4727 + var mift []*net.Interface + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + if _, ok := nettest.IsMulticastCapable("ip6", &ifi); !ok { + continue + } + if err := p.JoinGroup(&ifi, &gaddr); err != nil { + t.Fatal(err) + } + mift = append(mift, &ift[i]) + } + for _, ifi := range mift { + if err := p.LeaveGroup(ifi, &gaddr); err != nil { + t.Fatal(err) + } + } +} + +func TestIPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) { + switch runtime.GOOS { + case "darwin", "dragonfly", "openbsd": // platforms that return fe80::1%lo0: bind: can't assign requested address + t.Skipf("not supported on %s", runtime.GOOS) + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + gaddr := net.IPAddr{IP: net.ParseIP("ff02::114")} // see RFC 4727 + type ml struct { + c *ipv6.PacketConn + ifi *net.Interface + } + var mlt []*ml + + ift, err := net.Interfaces() + if err != nil { + t.Fatal(err) + } + for i, ifi := range ift { + ip, ok := nettest.IsMulticastCapable("ip6", &ifi) + if !ok { + continue + } + c, err := net.ListenPacket("ip6:ipv6-icmp", fmt.Sprintf("%s%%%s", ip.String(), ifi.Name)) // unicast address + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + if err := p.JoinGroup(&ifi, &gaddr); err != nil { + t.Fatal(err) + } + mlt = append(mlt, &ml{p, &ift[i]}) + } + for _, m := range mlt { + if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil { + t.Fatal(err) + } + } +} diff --git a/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go b/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go new file mode 100644 index 0000000..9e6b902 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go @@ -0,0 +1,157 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "net" + "runtime" + "testing" + + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +var packetConnMulticastSocketOptionTests = []struct { + net, proto, addr string + grp, src net.Addr +}{ + {"udp6", "", "[ff02::]:0", &net.UDPAddr{IP: net.ParseIP("ff02::114")}, nil}, // see RFC 4727 + {"ip6", ":ipv6-icmp", "::", &net.IPAddr{IP: net.ParseIP("ff02::115")}, nil}, // see RFC 4727 + + {"udp6", "", "[ff30::8000:0]:0", &net.UDPAddr{IP: net.ParseIP("ff30::8000:1")}, &net.UDPAddr{IP: net.IPv6loopback}}, // see RFC 5771 + {"ip6", ":ipv6-icmp", "::", &net.IPAddr{IP: net.ParseIP("ff30::8000:2")}, &net.IPAddr{IP: net.IPv6loopback}}, // see RFC 5771 +} + +func TestPacketConnMulticastSocketOptions(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback) + if ifi == nil { + t.Skipf("not available on %s", runtime.GOOS) + } + + m, ok := nettest.SupportsRawIPSocket() + for _, tt := range packetConnMulticastSocketOptionTests { + if tt.net == "ip6" && !ok { + t.Log(m) + continue + } + c, err := net.ListenPacket(tt.net+tt.proto, tt.addr) + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + defer p.Close() + + if tt.src == nil { + testMulticastSocketOptions(t, p, ifi, tt.grp) + } else { + testSourceSpecificMulticastSocketOptions(t, p, ifi, tt.grp, tt.src) + } + } +} + +type testIPv6MulticastConn interface { + MulticastHopLimit() (int, error) + SetMulticastHopLimit(ttl int) error + MulticastLoopback() (bool, error) + SetMulticastLoopback(bool) error + JoinGroup(*net.Interface, net.Addr) error + LeaveGroup(*net.Interface, net.Addr) error + JoinSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error + LeaveSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error + ExcludeSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error + IncludeSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error +} + +func testMulticastSocketOptions(t *testing.T, c testIPv6MulticastConn, ifi *net.Interface, grp net.Addr) { + const hoplim = 255 + if err := c.SetMulticastHopLimit(hoplim); err != nil { + t.Error(err) + return + } + if v, err := c.MulticastHopLimit(); err != nil { + t.Error(err) + return + } else if v != hoplim { + t.Errorf("got %v; want %v", v, hoplim) + return + } + + for _, toggle := range []bool{true, false} { + if err := c.SetMulticastLoopback(toggle); err != nil { + t.Error(err) + return + } + if v, err := c.MulticastLoopback(); err != nil { + t.Error(err) + return + } else if v != toggle { + t.Errorf("got %v; want %v", v, toggle) + return + } + } + + if err := c.JoinGroup(ifi, grp); err != nil { + t.Error(err) + return + } + if err := c.LeaveGroup(ifi, grp); err != nil { + t.Error(err) + return + } +} + +func testSourceSpecificMulticastSocketOptions(t *testing.T, c testIPv6MulticastConn, ifi *net.Interface, grp, src net.Addr) { + // MCAST_JOIN_GROUP -> MCAST_BLOCK_SOURCE -> MCAST_UNBLOCK_SOURCE -> MCAST_LEAVE_GROUP + if err := c.JoinGroup(ifi, grp); err != nil { + t.Error(err) + return + } + if err := c.ExcludeSourceSpecificGroup(ifi, grp, src); err != nil { + switch runtime.GOOS { + case "freebsd", "linux": + default: // platforms that don't support MLDv2 fail here + t.Logf("not supported on %s", runtime.GOOS) + return + } + t.Error(err) + return + } + if err := c.IncludeSourceSpecificGroup(ifi, grp, src); err != nil { + t.Error(err) + return + } + if err := c.LeaveGroup(ifi, grp); err != nil { + t.Error(err) + return + } + + // MCAST_JOIN_SOURCE_GROUP -> MCAST_LEAVE_SOURCE_GROUP + if err := c.JoinSourceSpecificGroup(ifi, grp, src); err != nil { + t.Error(err) + return + } + if err := c.LeaveSourceSpecificGroup(ifi, grp, src); err != nil { + t.Error(err) + return + } + + // MCAST_JOIN_SOURCE_GROUP -> MCAST_LEAVE_GROUP + if err := c.JoinSourceSpecificGroup(ifi, grp, src); err != nil { + t.Error(err) + return + } + if err := c.LeaveGroup(ifi, grp); err != nil { + t.Error(err) + return + } +} diff --git a/vendor/golang.org/x/net/ipv6/payload.go b/vendor/golang.org/x/net/ipv6/payload.go new file mode 100644 index 0000000..d9f8225 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload.go @@ -0,0 +1,18 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import "net" + +// BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo +// methods of PacketConn is not implemented. + +// A payloadHandler represents the IPv6 datagram payload handler. +type payloadHandler struct { + net.PacketConn + rawOpt +} + +func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil } diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg.go b/vendor/golang.org/x/net/ipv6/payload_cmsg.go new file mode 100644 index 0000000..e853c80 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload_cmsg.go @@ -0,0 +1,70 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !nacl,!plan9,!windows + +package ipv6 + +import ( + "net" + "syscall" +) + +// ReadFrom reads a payload of the received IPv6 datagram, from the +// endpoint c, copying the payload into b. It returns the number of +// bytes copied into b, the control message cm and the source address +// src of the received datagram. +func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + if !c.ok() { + return 0, nil, nil, syscall.EINVAL + } + oob := newControlMessage(&c.rawOpt) + var oobn int + switch c := c.PacketConn.(type) { + case *net.UDPConn: + if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil { + return 0, nil, nil, err + } + case *net.IPConn: + if n, oobn, _, src, err = c.ReadMsgIP(b, oob); err != nil { + return 0, nil, nil, err + } + default: + return 0, nil, nil, errInvalidConnType + } + if cm, err = parseControlMessage(oob[:oobn]); err != nil { + return 0, nil, nil, err + } + if cm != nil { + cm.Src = netAddrToIP16(src) + } + return +} + +// WriteTo writes a payload of the IPv6 datagram, to the destination +// address dst through the endpoint c, copying the payload from b. It +// returns the number of bytes written. The control message cm allows +// the IPv6 header fields and the datagram path to be specified. The +// cm may be nil if control of the outgoing datagram is not required. +func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + if !c.ok() { + return 0, syscall.EINVAL + } + oob := marshalControlMessage(cm) + if dst == nil { + return 0, errMissingAddress + } + switch c := c.PacketConn.(type) { + case *net.UDPConn: + n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr)) + case *net.IPConn: + n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr)) + default: + return 0, errInvalidConnType + } + if err != nil { + return 0, err + } + return +} diff --git a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go new file mode 100644 index 0000000..99a4354 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go @@ -0,0 +1,41 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 windows + +package ipv6 + +import ( + "net" + "syscall" +) + +// ReadFrom reads a payload of the received IPv6 datagram, from the +// endpoint c, copying the payload into b. It returns the number of +// bytes copied into b, the control message cm and the source address +// src of the received datagram. +func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + if !c.ok() { + return 0, nil, nil, syscall.EINVAL + } + if n, src, err = c.PacketConn.ReadFrom(b); err != nil { + return 0, nil, nil, err + } + return +} + +// WriteTo writes a payload of the IPv6 datagram, to the destination +// address dst through the endpoint c, copying the payload from b. It +// returns the number of bytes written. The control message cm allows +// the IPv6 header fields and the datagram path to be specified. The +// cm may be nil if control of the outgoing datagram is not required. +func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + if !c.ok() { + return 0, syscall.EINVAL + } + if dst == nil { + return 0, errMissingAddress + } + return c.PacketConn.WriteTo(b, dst) +} diff --git a/vendor/golang.org/x/net/ipv6/readwrite_test.go b/vendor/golang.org/x/net/ipv6/readwrite_test.go new file mode 100644 index 0000000..41f59be --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/readwrite_test.go @@ -0,0 +1,189 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "bytes" + "net" + "runtime" + "strings" + "sync" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +func benchmarkUDPListener() (net.PacketConn, net.Addr, error) { + c, err := net.ListenPacket("udp6", "[::1]:0") + if err != nil { + return nil, nil, err + } + dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String()) + if err != nil { + c.Close() + return nil, nil, err + } + return c, dst, nil +} + +func BenchmarkReadWriteNetUDP(b *testing.B) { + if !supportsIPv6 { + b.Skip("ipv6 is not supported") + } + + c, dst, err := benchmarkUDPListener() + if err != nil { + b.Fatal(err) + } + defer c.Close() + + wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128) + b.ResetTimer() + for i := 0; i < b.N; i++ { + benchmarkReadWriteNetUDP(b, c, wb, rb, dst) + } +} + +func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) { + if _, err := c.WriteTo(wb, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(rb); err != nil { + b.Fatal(err) + } +} + +func BenchmarkReadWriteIPv6UDP(b *testing.B) { + if !supportsIPv6 { + b.Skip("ipv6 is not supported") + } + + c, dst, err := benchmarkUDPListener() + if err != nil { + b.Fatal(err) + } + defer c.Close() + + p := ipv6.NewPacketConn(c) + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) + + wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128) + b.ResetTimer() + for i := 0; i < b.N; i++ { + benchmarkReadWriteIPv6UDP(b, p, wb, rb, dst, ifi) + } +} + +func benchmarkReadWriteIPv6UDP(b *testing.B, p *ipv6.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) { + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + HopLimit: 1, + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if n, err := p.WriteTo(wb, &cm, dst); err != nil { + b.Fatal(err) + } else if n != len(wb) { + b.Fatalf("got %v; want %v", n, len(wb)) + } + if _, _, _, err := p.ReadFrom(rb); err != nil { + b.Fatal(err) + } +} + +func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + c, err := net.ListenPacket("udp6", "[::1]:0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + defer p.Close() + + dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + wb := []byte("HELLO-R-U-THERE") + + if err := p.SetControlMessage(cf, true); err != nil { // probe before test + if nettest.ProtocolNotSupported(err) { + t.Skipf("not supported on %s", runtime.GOOS) + } + t.Fatal(err) + } + + var wg sync.WaitGroup + reader := func() { + defer wg.Done() + rb := make([]byte, 128) + if n, cm, _, err := p.ReadFrom(rb); err != nil { + t.Error(err) + return + } else if !bytes.Equal(rb[:n], wb) { + t.Errorf("got %v; want %v", rb[:n], wb) + return + } else { + s := cm.String() + if strings.Contains(s, ",") { + t.Errorf("should be space-separated values: %s", s) + } + } + } + writer := func(toggle bool) { + defer wg.Done() + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + Src: net.IPv6loopback, + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if err := p.SetControlMessage(cf, toggle); err != nil { + t.Error(err) + return + } + if n, err := p.WriteTo(wb, &cm, dst); err != nil { + t.Error(err) + return + } else if n != len(wb) { + t.Errorf("got %v; want %v", n, len(wb)) + return + } + } + + const N = 10 + wg.Add(N) + for i := 0; i < N; i++ { + go reader() + } + wg.Add(2 * N) + for i := 0; i < 2*N; i++ { + go writer(i%2 != 0) + } + wg.Add(N) + for i := 0; i < N; i++ { + go reader() + } + wg.Wait() +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt.go b/vendor/golang.org/x/net/ipv6/sockopt.go new file mode 100644 index 0000000..f0cfc2f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt.go @@ -0,0 +1,46 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +// Sticky socket options +const ( + ssoTrafficClass = iota // header field for unicast packet, RFC 3542 + ssoHopLimit // header field for unicast packet, RFC 3493 + ssoMulticastInterface // outbound interface for multicast packet, RFC 3493 + ssoMulticastHopLimit // header field for multicast packet, RFC 3493 + ssoMulticastLoopback // loopback for multicast packet, RFC 3493 + ssoReceiveTrafficClass // header field on received packet, RFC 3542 + ssoReceiveHopLimit // header field on received packet, RFC 2292 or 3542 + ssoReceivePacketInfo // incbound or outbound packet path, RFC 2292 or 3542 + ssoReceivePathMTU // path mtu, RFC 3542 + ssoPathMTU // path mtu, RFC 3542 + ssoChecksum // packet checksum, RFC 2292 or 3542 + ssoICMPFilter // icmp filter, RFC 2292 or 3542 + ssoJoinGroup // any-source multicast, RFC 3493 + ssoLeaveGroup // any-source multicast, RFC 3493 + ssoJoinSourceGroup // source-specific multicast + ssoLeaveSourceGroup // source-specific multicast + ssoBlockSourceGroup // any-source or source-specific multicast + ssoUnblockSourceGroup // any-source or source-specific multicast + ssoMax +) + +// Sticky socket option value types +const ( + ssoTypeInt = iota + 1 + ssoTypeInterface + ssoTypeICMPFilter + ssoTypeMTUInfo + ssoTypeIPMreq + ssoTypeGroupReq + ssoTypeGroupSourceReq +) + +// A sockOpt represents a binding for sticky socket option. +type sockOpt struct { + level int // option level + name int // option name, must be equal or greater than 1 + typ int // option value type, must be equal or greater than 1 +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go b/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go new file mode 100644 index 0000000..cd36739 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go @@ -0,0 +1,22 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv6 + +import ( + "net" + "os" + "unsafe" +) + +func setsockoptIPMreq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error { + var mreq ipv6Mreq + copy(mreq.Multiaddr[:], grp) + if ifi != nil { + mreq.setIfindex(ifi.Index) + } + return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&mreq), sizeofIPv6Mreq)) +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt_posix.go b/vendor/golang.org/x/net/ipv6/sockopt_posix.go new file mode 100644 index 0000000..e0a3fa6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_posix.go @@ -0,0 +1,122 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv6 + +import ( + "net" + "os" + "unsafe" +) + +func getInt(s uintptr, opt *sockOpt) (int, error) { + if opt.name < 1 || opt.typ != ssoTypeInt { + return 0, errOpNoSupport + } + var i int32 + l := uint32(4) + if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&i), &l); err != nil { + return 0, os.NewSyscallError("getsockopt", err) + } + return int(i), nil +} + +func setInt(s uintptr, opt *sockOpt, v int) error { + if opt.name < 1 || opt.typ != ssoTypeInt { + return errOpNoSupport + } + i := int32(v) + return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&i), 4)) +} + +func getInterface(s uintptr, opt *sockOpt) (*net.Interface, error) { + if opt.name < 1 || opt.typ != ssoTypeInterface { + return nil, errOpNoSupport + } + var i int32 + l := uint32(4) + if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&i), &l); err != nil { + return nil, os.NewSyscallError("getsockopt", err) + } + if i == 0 { + return nil, nil + } + ifi, err := net.InterfaceByIndex(int(i)) + if err != nil { + return nil, err + } + return ifi, nil +} + +func setInterface(s uintptr, opt *sockOpt, ifi *net.Interface) error { + if opt.name < 1 || opt.typ != ssoTypeInterface { + return errOpNoSupport + } + var i int32 + if ifi != nil { + i = int32(ifi.Index) + } + return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&i), 4)) +} + +func getICMPFilter(s uintptr, opt *sockOpt) (*ICMPFilter, error) { + if opt.name < 1 || opt.typ != ssoTypeICMPFilter { + return nil, errOpNoSupport + } + var f ICMPFilter + l := uint32(sizeofICMPv6Filter) + if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&f.icmpv6Filter), &l); err != nil { + return nil, os.NewSyscallError("getsockopt", err) + } + return &f, nil +} + +func setICMPFilter(s uintptr, opt *sockOpt, f *ICMPFilter) error { + if opt.name < 1 || opt.typ != ssoTypeICMPFilter { + return errOpNoSupport + } + return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&f.icmpv6Filter), sizeofICMPv6Filter)) +} + +func getMTUInfo(s uintptr, opt *sockOpt) (*net.Interface, int, error) { + if opt.name < 1 || opt.typ != ssoTypeMTUInfo { + return nil, 0, errOpNoSupport + } + var mi ipv6Mtuinfo + l := uint32(sizeofIPv6Mtuinfo) + if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&mi), &l); err != nil { + return nil, 0, os.NewSyscallError("getsockopt", err) + } + if mi.Addr.Scope_id == 0 { + return nil, int(mi.Mtu), nil + } + ifi, err := net.InterfaceByIndex(int(mi.Addr.Scope_id)) + if err != nil { + return nil, 0, err + } + return ifi, int(mi.Mtu), nil +} + +func setGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error { + if opt.name < 1 { + return errOpNoSupport + } + switch opt.typ { + case ssoTypeIPMreq: + return setsockoptIPMreq(s, opt, ifi, grp) + case ssoTypeGroupReq: + return setsockoptGroupReq(s, opt, ifi, grp) + default: + return errOpNoSupport + } +} + +func setSourceGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error { + if opt.name < 1 || opt.typ != ssoTypeGroupSourceReq { + return errOpNoSupport + } + return setsockoptGroupSourceReq(s, opt, ifi, grp, src) +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go b/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go new file mode 100644 index 0000000..1a88290 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go @@ -0,0 +1,17 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!freebsd,!linux,!solaris + +package ipv6 + +import "net" + +func setsockoptGroupReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} + +func setsockoptGroupSourceReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error { + return errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go b/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go new file mode 100644 index 0000000..f3668ae --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go @@ -0,0 +1,59 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux solaris + +package ipv6 + +import ( + "net" + "os" + "unsafe" +) + +var freebsd32o64 bool + +func setsockoptGroupReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error { + var gr groupReq + if ifi != nil { + gr.Interface = uint32(ifi.Index) + } + gr.setGroup(grp) + var p unsafe.Pointer + var l uint32 + if freebsd32o64 { + var d [sizeofGroupReq + 4]byte + s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + p = unsafe.Pointer(&d[0]) + l = sizeofGroupReq + 4 + } else { + p = unsafe.Pointer(&gr) + l = sizeofGroupReq + } + return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, p, l)) +} + +func setsockoptGroupSourceReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error { + var gsr groupSourceReq + if ifi != nil { + gsr.Interface = uint32(ifi.Index) + } + gsr.setSourceGroup(grp, src) + var p unsafe.Pointer + var l uint32 + if freebsd32o64 { + var d [sizeofGroupSourceReq + 4]byte + s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + p = unsafe.Pointer(&d[0]) + l = sizeofGroupSourceReq + 4 + } else { + p = unsafe.Pointer(&gsr) + l = sizeofGroupSourceReq + } + return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, p, l)) +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt_stub.go b/vendor/golang.org/x/net/ipv6/sockopt_stub.go new file mode 100644 index 0000000..6d59a00 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_stub.go @@ -0,0 +1,13 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv6 + +import "net" + +func getMTUInfo(s uintptr, opt *sockOpt) (*net.Interface, int, error) { + return nil, 0, errOpNoSupport +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt_test.go b/vendor/golang.org/x/net/ipv6/sockopt_test.go new file mode 100644 index 0000000..774338d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_test.go @@ -0,0 +1,133 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "fmt" + "net" + "runtime" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +var supportsIPv6 bool = nettest.SupportsIPv6() + +func TestConnInitiatorPathMTU(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + ln, err := net.Listen("tcp6", "[::1]:0") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + done := make(chan bool) + go acceptor(t, ln, done) + + c, err := net.Dial("tcp6", ln.Addr().String()) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil { + switch runtime.GOOS { + case "darwin": // older darwin kernels don't support IPV6_PATHMTU option + t.Logf("not supported on %s", runtime.GOOS) + default: + t.Fatal(err) + } + } else { + t.Logf("path mtu for %v: %v", c.RemoteAddr(), pmtu) + } + + <-done +} + +func TestConnResponderPathMTU(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + ln, err := net.Listen("tcp6", "[::1]:0") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + done := make(chan bool) + go connector(t, "tcp6", ln.Addr().String(), done) + + c, err := ln.Accept() + if err != nil { + t.Fatal(err) + } + defer c.Close() + + if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil { + switch runtime.GOOS { + case "darwin": // older darwin kernels don't support IPV6_PATHMTU option + t.Logf("not supported on %s", runtime.GOOS) + default: + t.Fatal(err) + } + } else { + t.Logf("path mtu for %v: %v", c.RemoteAddr(), pmtu) + } + + <-done +} + +func TestPacketConnChecksum(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolOSPFIGP), "::") // OSPF for IPv6 + if err != nil { + t.Fatal(err) + } + defer c.Close() + + p := ipv6.NewPacketConn(c) + offset := 12 // see RFC 5340 + + for _, toggle := range []bool{false, true} { + if err := p.SetChecksum(toggle, offset); err != nil { + if toggle { + t.Fatalf("ipv6.PacketConn.SetChecksum(%v, %v) failed: %v", toggle, offset, err) + } else { + // Some platforms never allow to disable the kernel + // checksum processing. + t.Logf("ipv6.PacketConn.SetChecksum(%v, %v) failed: %v", toggle, offset, err) + } + } + if on, offset, err := p.Checksum(); err != nil { + t.Fatal(err) + } else { + t.Logf("kernel checksum processing enabled=%v, offset=%v", on, offset) + } + } +} diff --git a/vendor/golang.org/x/net/ipv6/sys_bsd.go b/vendor/golang.org/x/net/ipv6/sys_bsd.go new file mode 100644 index 0000000..c22f8ac --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_bsd.go @@ -0,0 +1,56 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build dragonfly netbsd openbsd + +package ipv6 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt}, + ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt}, + ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt}, + ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt}, + ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt}, + ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt}, + ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt}, + ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo}, + ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt}, + ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter}, + ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq}, + ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_darwin.go b/vendor/golang.org/x/net/ipv6/sys_darwin.go new file mode 100644 index 0000000..ffcc9d4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_darwin.go @@ -0,0 +1,105 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "strconv" + "strings" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlHopLimit: {sysIPV6_2292HOPLIMIT, 4, marshal2292HopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_2292PKTINFO, sizeofInet6Pktinfo, marshal2292PacketInfo, parsePacketInfo}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt}, + ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt}, + ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_2292HOPLIMIT, ssoTypeInt}, + ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_2292PKTINFO, ssoTypeInt}, + ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt}, + ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter}, + ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq}, + ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq}, + } +) + +func init() { + // Seems like kern.osreldate is veiled on latest OS X. We use + // kern.osrelease instead. + s, err := syscall.Sysctl("kern.osrelease") + if err != nil { + return + } + ss := strings.Split(s, ".") + if len(ss) == 0 { + return + } + // The IP_PKTINFO and protocol-independent multicast API were + // introduced in OS X 10.7 (Darwin 11). But it looks like + // those features require OS X 10.8 (Darwin 12) or above. + // See http://support.apple.com/kb/HT1633. + if mjver, err := strconv.Atoi(ss[0]); err != nil || mjver < 12 { + return + } + ctlOpts[ctlTrafficClass] = ctlOpt{sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass} + ctlOpts[ctlHopLimit] = ctlOpt{sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit} + ctlOpts[ctlPacketInfo] = ctlOpt{sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo} + ctlOpts[ctlNextHop] = ctlOpt{sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop} + ctlOpts[ctlPathMTU] = ctlOpt{sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU} + sockOpts[ssoTrafficClass] = sockOpt{iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt} + sockOpts[ssoReceiveTrafficClass] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt} + sockOpts[ssoReceiveHopLimit] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt} + sockOpts[ssoReceivePacketInfo] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt} + sockOpts[ssoReceivePathMTU] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt} + sockOpts[ssoPathMTU] = sockOpt{iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo} + sockOpts[ssoJoinGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq} + sockOpts[ssoLeaveGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq} + sockOpts[ssoJoinSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq} + sockOpts[ssoLeaveSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq} + sockOpts[ssoBlockSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq} + sockOpts[ssoUnblockSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq} +} + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_freebsd.go b/vendor/golang.org/x/net/ipv6/sys_freebsd.go new file mode 100644 index 0000000..fd5204b --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_freebsd.go @@ -0,0 +1,91 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "runtime" + "strings" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt}, + ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt}, + ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt}, + ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt}, + ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt}, + ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt}, + ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt}, + ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo}, + ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt}, + ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter}, + ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq}, + ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq}, + ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq}, + } +) + +func init() { + if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" { + archs, _ := syscall.Sysctl("kern.supported_archs") + for _, s := range strings.Fields(archs) { + if s == "amd64" { + freebsd32o64 = true + break + } + } + } +} + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_linux.go b/vendor/golang.org/x/net/ipv6/sys_linux.go new file mode 100644 index 0000000..42f5f78 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_linux.go @@ -0,0 +1,72 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt}, + ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt}, + ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt}, + ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt}, + ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt}, + ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt}, + ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt}, + ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo}, + ssoChecksum: {iana.ProtocolReserved, sysIPV6_CHECKSUM, ssoTypeInt}, + ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMPV6_FILTER, ssoTypeICMPFilter}, + ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq}, + ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq}, + ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Ifindex = int32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_linux_386.s b/vendor/golang.org/x/net/ipv6/sys_linux_386.s new file mode 100644 index 0000000..b85551a --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_linux_386.s @@ -0,0 +1,8 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) diff --git a/vendor/golang.org/x/net/ipv6/sys_solaris.go b/vendor/golang.org/x/net/ipv6/sys_solaris.go new file mode 100644 index 0000000..9bd2d66 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_solaris.go @@ -0,0 +1,73 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = [ssoMax]sockOpt{ + ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt}, + ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt}, + ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt}, + ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt}, + ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt}, + ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt}, + ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt}, + ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt}, + ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo}, + ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt}, + ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter}, + ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq}, + ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq}, + ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 260)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s b/vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s new file mode 100644 index 0000000..39d76af --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s @@ -0,0 +1,8 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) diff --git a/vendor/golang.org/x/net/ipv6/sys_stub.go b/vendor/golang.org/x/net/ipv6/sys_stub.go new file mode 100644 index 0000000..7663bfc --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_stub.go @@ -0,0 +1,13 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build nacl plan9 + +package ipv6 + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = [ssoMax]sockOpt{} +) diff --git a/vendor/golang.org/x/net/ipv6/sys_windows.go b/vendor/golang.org/x/net/ipv6/sys_windows.go new file mode 100644 index 0000000..003c507 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_windows.go @@ -0,0 +1,74 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" +) + +const ( + // See ws2tcpip.h. + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PKTINFO = 0x13 + + sizeofSockaddrInet6 = 0x1c + + sizeofIPv6Mreq = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofICMPv6Filter = 0 +) + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type icmpv6Filter struct { + // TODO(mikio): implement this +} + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = [ssoMax]sockOpt{ + ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt}, + ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface}, + ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt}, + ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt}, + ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq}, + ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} diff --git a/vendor/golang.org/x/net/ipv6/syscall_linux_386.go b/vendor/golang.org/x/net/ipv6/syscall_linux_386.go new file mode 100644 index 0000000..5184dbe --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/syscall_linux_386.go @@ -0,0 +1,31 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "syscall" + "unsafe" +) + +const ( + sysGETSOCKOPT = 0xf + sysSETSOCKOPT = 0xe +) + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) + +func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { + if _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 { + return error(errno) + } + return nil +} + +func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error { + if _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 { + return error(errno) + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv6/syscall_solaris.go b/vendor/golang.org/x/net/ipv6/syscall_solaris.go new file mode 100644 index 0000000..2a5c8ee --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/syscall_solaris.go @@ -0,0 +1,38 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" + +//go:linkname procGetsockopt libc___xnet_getsockopt +//go:linkname procSetsockopt libc_setsockopt + +var ( + procGetsockopt uintptr + procSetsockopt uintptr +) + +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) + +func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { + _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0) + if errno != 0 { + return error(errno) + } + return nil +} + +func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error { + if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 { + return error(errno) + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv6/syscall_unix.go b/vendor/golang.org/x/net/ipv6/syscall_unix.go new file mode 100644 index 0000000..58a75b5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/syscall_unix.go @@ -0,0 +1,26 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux,!386 netbsd openbsd + +package ipv6 + +import ( + "syscall" + "unsafe" +) + +func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { + if _, _, errno := syscall.Syscall6(syscall.SYS_GETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 { + return error(errno) + } + return nil +} + +func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error { + if _, _, errno := syscall.Syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 { + return error(errno) + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv6/syscall_windows.go b/vendor/golang.org/x/net/ipv6/syscall_windows.go new file mode 100644 index 0000000..c1f649d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/syscall_windows.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "syscall" + "unsafe" +) + +func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { + return syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), (*int32)(unsafe.Pointer(l))) +} + +func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error { + return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), int32(l)) +} diff --git a/vendor/golang.org/x/net/ipv6/unicast_test.go b/vendor/golang.org/x/net/ipv6/unicast_test.go new file mode 100644 index 0000000..406d071 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/unicast_test.go @@ -0,0 +1,186 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "bytes" + "net" + "os" + "runtime" + "testing" + "time" + + "golang.org/x/net/icmp" + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +func TestPacketConnReadWriteUnicastUDP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + c, err := net.ListenPacket("udp6", "[::1]:0") + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + defer p.Close() + + dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + Src: net.IPv6loopback, + } + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) + if ifi != nil { + cm.IfIndex = ifi.Index + } + wb := []byte("HELLO-R-U-THERE") + + for i, toggle := range []bool{true, false, true} { + if err := p.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Skipf("not supported on %s", runtime.GOOS) + } + t.Fatal(err) + } + cm.HopLimit = i + 1 + if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if n, err := p.WriteTo(wb, &cm, dst); err != nil { + t.Fatal(err) + } else if n != len(wb) { + t.Fatalf("got %v; want %v", n, len(wb)) + } + rb := make([]byte, 128) + if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if n, _, _, err := p.ReadFrom(rb); err != nil { + t.Fatal(err) + } else if !bytes.Equal(rb[:n], wb) { + t.Fatalf("got %v; want %v", rb[:n], wb) + } + } +} + +func TestPacketConnReadWriteUnicastICMP(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + + c, err := net.ListenPacket("ip6:ipv6-icmp", "::1") + if err != nil { + t.Fatal(err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + defer p.Close() + + dst, err := net.ResolveIPAddr("ip6", "::1") + if err != nil { + t.Fatal(err) + } + + pshicmp := icmp.IPv6PseudoHeader(c.LocalAddr().(*net.IPAddr).IP, dst.IP) + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + Src: net.IPv6loopback, + } + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) + if ifi != nil { + cm.IfIndex = ifi.Index + } + + var f ipv6.ICMPFilter + f.SetAll(true) + f.Accept(ipv6.ICMPTypeEchoReply) + if err := p.SetICMPFilter(&f); err != nil { + t.Fatal(err) + } + + var psh []byte + for i, toggle := range []bool{true, false, true} { + if toggle { + psh = nil + if err := p.SetChecksum(true, 2); err != nil { + // Solaris never allows to modify + // ICMP properties. + if runtime.GOOS != "solaris" { + t.Fatal(err) + } + } + } else { + psh = pshicmp + // Some platforms never allow to disable the + // kernel checksum processing. + p.SetChecksum(false, -1) + } + wb, err := (&icmp.Message{ + Type: ipv6.ICMPTypeEchoRequest, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, Seq: i + 1, + Data: []byte("HELLO-R-U-THERE"), + }, + }).Marshal(psh) + if err != nil { + t.Fatal(err) + } + if err := p.SetControlMessage(cf, toggle); err != nil { + if nettest.ProtocolNotSupported(err) { + t.Skipf("not supported on %s", runtime.GOOS) + } + t.Fatal(err) + } + cm.HopLimit = i + 1 + if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if n, err := p.WriteTo(wb, &cm, dst); err != nil { + t.Fatal(err) + } else if n != len(wb) { + t.Fatalf("got %v; want %v", n, len(wb)) + } + rb := make([]byte, 128) + if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil { + t.Fatal(err) + } + if n, _, _, err := p.ReadFrom(rb); err != nil { + switch runtime.GOOS { + case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket + t.Logf("not supported on %s", runtime.GOOS) + continue + } + t.Fatal(err) + } else { + if m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, rb[:n]); err != nil { + t.Fatal(err) + } else if m.Type != ipv6.ICMPTypeEchoReply || m.Code != 0 { + t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv6.ICMPTypeEchoReply, 0) + } + } + } +} diff --git a/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go b/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go new file mode 100644 index 0000000..e175dcc --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go @@ -0,0 +1,120 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6_test + +import ( + "net" + "runtime" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +func TestConnUnicastSocketOptions(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + ln, err := net.Listen("tcp6", "[::1]:0") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + errc := make(chan error, 1) + go func() { + c, err := ln.Accept() + if err != nil { + errc <- err + return + } + errc <- c.Close() + }() + + c, err := net.Dial("tcp6", ln.Addr().String()) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + testUnicastSocketOptions(t, ipv6.NewConn(c)) + + if err := <-errc; err != nil { + t.Errorf("server: %v", err) + } +} + +var packetConnUnicastSocketOptionTests = []struct { + net, proto, addr string +}{ + {"udp6", "", "[::1]:0"}, + {"ip6", ":ipv6-icmp", "::1"}, +} + +func TestPacketConnUnicastSocketOptions(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + if !supportsIPv6 { + t.Skip("ipv6 is not supported") + } + + m, ok := nettest.SupportsRawIPSocket() + for _, tt := range packetConnUnicastSocketOptionTests { + if tt.net == "ip6" && !ok { + t.Log(m) + continue + } + c, err := net.ListenPacket(tt.net+tt.proto, tt.addr) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + testUnicastSocketOptions(t, ipv6.NewPacketConn(c)) + } +} + +type testIPv6UnicastConn interface { + TrafficClass() (int, error) + SetTrafficClass(int) error + HopLimit() (int, error) + SetHopLimit(int) error +} + +func testUnicastSocketOptions(t *testing.T, c testIPv6UnicastConn) { + tclass := iana.DiffServCS0 | iana.NotECNTransport + if err := c.SetTrafficClass(tclass); err != nil { + switch runtime.GOOS { + case "darwin": // older darwin kernels don't support IPV6_TCLASS option + t.Logf("not supported on %s", runtime.GOOS) + goto next + } + t.Fatal(err) + } + if v, err := c.TrafficClass(); err != nil { + t.Fatal(err) + } else if v != tclass { + t.Fatalf("got %v; want %v", v, tclass) + } + +next: + hoplim := 255 + if err := c.SetHopLimit(hoplim); err != nil { + t.Fatal(err) + } + if v, err := c.HopLimit(); err != nil { + t.Fatal(err) + } else if v != hoplim { + t.Fatalf("got %v; want %v", v, hoplim) + } +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_darwin.go b/vendor/golang.org/x/net/ipv6/zsys_darwin.go new file mode 100644 index 0000000..6aab1df --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_darwin.go @@ -0,0 +1,131 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + sysIPV6_2292PKTINFO = 0x13 + sysIPV6_2292HOPLIMIT = 0x14 + sysIPV6_2292NEXTHOP = 0x15 + sysIPV6_2292HOPOPTS = 0x16 + sysIPV6_2292DSTOPTS = 0x17 + sysIPV6_2292RTHDR = 0x18 + + sysIPV6_2292PKTOPTIONS = 0x19 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RECVTCLASS = 0x23 + sysIPV6_TCLASS = 0x24 + + sysIPV6_RTHDRDSTOPTS = 0x39 + + sysIPV6_RECVPKTINFO = 0x3d + + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_MSFILTER = 0x4a + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_BOUND_IF = 0x7d + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [128]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [128]byte + Pad_cgo_1 [128]byte +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go b/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go new file mode 100644 index 0000000..d2de804 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go @@ -0,0 +1,88 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_dragonfly.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go new file mode 100644 index 0000000..919e572 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go @@ -0,0 +1,122 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_BINDANY = 0x40 + + sysIPV6_MSFILTER = 0x4a + + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go new file mode 100644 index 0000000..cb8141f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go @@ -0,0 +1,124 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_BINDANY = 0x40 + + sysIPV6_MSFILTER = 0x4a + + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go new file mode 100644 index 0000000..cb8141f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go @@ -0,0 +1,124 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_BINDANY = 0x40 + + sysIPV6_MSFILTER = 0x4a + + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go new file mode 100644 index 0000000..f5a4109 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go @@ -0,0 +1,168 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go new file mode 100644 index 0000000..f9376b6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go new file mode 100644 index 0000000..f5a4109 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go @@ -0,0 +1,168 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go new file mode 100644 index 0000000..f9376b6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go new file mode 100644 index 0000000..f5a4109 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go @@ -0,0 +1,168 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go new file mode 100644 index 0000000..f9376b6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go new file mode 100644 index 0000000..f9376b6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go new file mode 100644 index 0000000..f5a4109 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go @@ -0,0 +1,168 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go new file mode 100644 index 0000000..be2dbd6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go @@ -0,0 +1,168 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go new file mode 100644 index 0000000..f9376b6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go new file mode 100644 index 0000000..f9376b6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go new file mode 100644 index 0000000..f9376b6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_netbsd.go b/vendor/golang.org/x/net/ipv6/zsys_netbsd.go new file mode 100644 index 0000000..bcada13 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_netbsd.go @@ -0,0 +1,84 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_openbsd.go b/vendor/golang.org/x/net/ipv6/zsys_openbsd.go new file mode 100644 index 0000000..86cf3c6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_openbsd.go @@ -0,0 +1,93 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_AUTH_LEVEL = 0x35 + sysIPV6_ESP_TRANS_LEVEL = 0x36 + sysIPV6_ESP_NETWORK_LEVEL = 0x37 + sysIPSEC6_OUTSA = 0x38 + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + sysIPV6_IPCOMP_LEVEL = 0x3c + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + sysIPV6_PIPEX = 0x3f + + sysIPV6_RTABLE = 0x1021 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_solaris.go b/vendor/golang.org/x/net/ipv6/zsys_solaris.go new file mode 100644 index 0000000..cf1837d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_solaris.go @@ -0,0 +1,131 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_solaris.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x5 + sysIPV6_MULTICAST_IF = 0x6 + sysIPV6_MULTICAST_HOPS = 0x7 + sysIPV6_MULTICAST_LOOP = 0x8 + sysIPV6_JOIN_GROUP = 0x9 + sysIPV6_LEAVE_GROUP = 0xa + + sysIPV6_PKTINFO = 0xb + + sysIPV6_HOPLIMIT = 0xc + sysIPV6_NEXTHOP = 0xd + sysIPV6_HOPOPTS = 0xe + sysIPV6_DSTOPTS = 0xf + + sysIPV6_RTHDR = 0x10 + sysIPV6_RTHDRDSTOPTS = 0x11 + + sysIPV6_RECVPKTINFO = 0x12 + sysIPV6_RECVHOPLIMIT = 0x13 + sysIPV6_RECVHOPOPTS = 0x14 + + sysIPV6_RECVRTHDR = 0x16 + + sysIPV6_RECVRTHDRDSTOPTS = 0x17 + + sysIPV6_CHECKSUM = 0x18 + sysIPV6_RECVTCLASS = 0x19 + sysIPV6_USE_MIN_MTU = 0x20 + sysIPV6_DONTFRAG = 0x21 + sysIPV6_SEC_OPT = 0x22 + sysIPV6_SRC_PREFERENCES = 0x23 + sysIPV6_RECVPATHMTU = 0x24 + sysIPV6_PATHMTU = 0x25 + sysIPV6_TCLASS = 0x26 + sysIPV6_V6ONLY = 0x27 + + sysIPV6_RECVDSTOPTS = 0x28 + + sysMCAST_JOIN_GROUP = 0x29 + sysMCAST_LEAVE_GROUP = 0x2a + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_JOIN_SOURCE_GROUP = 0x2d + sysMCAST_LEAVE_SOURCE_GROUP = 0x2e + + sysIPV6_PREFER_SRC_HOME = 0x1 + sysIPV6_PREFER_SRC_COA = 0x2 + sysIPV6_PREFER_SRC_PUBLIC = 0x4 + sysIPV6_PREFER_SRC_TMP = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x10 + sysIPV6_PREFER_SRC_CGA = 0x20 + + sysIPV6_PREFER_SRC_MIPMASK = 0x3 + sysIPV6_PREFER_SRC_MIPDEFAULT = 0x1 + sysIPV6_PREFER_SRC_TMPMASK = 0xc + sysIPV6_PREFER_SRC_TMPDEFAULT = 0x4 + sysIPV6_PREFER_SRC_CGAMASK = 0x30 + sysIPV6_PREFER_SRC_CGADEFAULT = 0x10 + + sysIPV6_PREFER_SRC_MASK = 0x3f + + sysIPV6_PREFER_SRC_DEFAULT = 0x15 + + sysIPV6_BOUND_IF = 0x41 + sysIPV6_UNSPEC_SRC = 0x42 + + sysICMP6_FILTER = 0x1 + + sizeofSockaddrStorage = 0x100 + sizeofSockaddrInet6 = 0x20 + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x24 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x104 + sizeofGroupSourceReq = 0x204 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Family uint16 + X_ss_pad1 [6]int8 + X_ss_align float64 + X_ss_pad2 [240]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [256]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [256]byte + Pad_cgo_1 [256]byte +} + +type icmpv6Filter struct { + X__icmp6_filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/lex/httplex/httplex.go b/vendor/golang.org/x/net/lex/httplex/httplex.go new file mode 100644 index 0000000..20f2b89 --- /dev/null +++ b/vendor/golang.org/x/net/lex/httplex/httplex.go @@ -0,0 +1,351 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package httplex contains rules around lexical matters of various +// HTTP-related specifications. +// +// This package is shared by the standard library (which vendors it) +// and x/net/http2. It comes with no API stability promise. +package httplex + +import ( + "net" + "strings" + "unicode/utf8" + + "golang.org/x/net/idna" +) + +var isTokenTable = [127]bool{ + '!': true, + '#': true, + '$': true, + '%': true, + '&': true, + '\'': true, + '*': true, + '+': true, + '-': true, + '.': true, + '0': true, + '1': true, + '2': true, + '3': true, + '4': true, + '5': true, + '6': true, + '7': true, + '8': true, + '9': true, + 'A': true, + 'B': true, + 'C': true, + 'D': true, + 'E': true, + 'F': true, + 'G': true, + 'H': true, + 'I': true, + 'J': true, + 'K': true, + 'L': true, + 'M': true, + 'N': true, + 'O': true, + 'P': true, + 'Q': true, + 'R': true, + 'S': true, + 'T': true, + 'U': true, + 'W': true, + 'V': true, + 'X': true, + 'Y': true, + 'Z': true, + '^': true, + '_': true, + '`': true, + 'a': true, + 'b': true, + 'c': true, + 'd': true, + 'e': true, + 'f': true, + 'g': true, + 'h': true, + 'i': true, + 'j': true, + 'k': true, + 'l': true, + 'm': true, + 'n': true, + 'o': true, + 'p': true, + 'q': true, + 'r': true, + 's': true, + 't': true, + 'u': true, + 'v': true, + 'w': true, + 'x': true, + 'y': true, + 'z': true, + '|': true, + '~': true, +} + +func IsTokenRune(r rune) bool { + i := int(r) + return i < len(isTokenTable) && isTokenTable[i] +} + +func isNotToken(r rune) bool { + return !IsTokenRune(r) +} + +// HeaderValuesContainsToken reports whether any string in values +// contains the provided token, ASCII case-insensitively. +func HeaderValuesContainsToken(values []string, token string) bool { + for _, v := range values { + if headerValueContainsToken(v, token) { + return true + } + } + return false +} + +// isOWS reports whether b is an optional whitespace byte, as defined +// by RFC 7230 section 3.2.3. +func isOWS(b byte) bool { return b == ' ' || b == '\t' } + +// trimOWS returns x with all optional whitespace removes from the +// beginning and end. +func trimOWS(x string) string { + // TODO: consider using strings.Trim(x, " \t") instead, + // if and when it's fast enough. See issue 10292. + // But this ASCII-only code will probably always beat UTF-8 + // aware code. + for len(x) > 0 && isOWS(x[0]) { + x = x[1:] + } + for len(x) > 0 && isOWS(x[len(x)-1]) { + x = x[:len(x)-1] + } + return x +} + +// headerValueContainsToken reports whether v (assumed to be a +// 0#element, in the ABNF extension described in RFC 7230 section 7) +// contains token amongst its comma-separated tokens, ASCII +// case-insensitively. +func headerValueContainsToken(v string, token string) bool { + v = trimOWS(v) + if comma := strings.IndexByte(v, ','); comma != -1 { + return tokenEqual(trimOWS(v[:comma]), token) || headerValueContainsToken(v[comma+1:], token) + } + return tokenEqual(v, token) +} + +// lowerASCII returns the ASCII lowercase version of b. +func lowerASCII(b byte) byte { + if 'A' <= b && b <= 'Z' { + return b + ('a' - 'A') + } + return b +} + +// tokenEqual reports whether t1 and t2 are equal, ASCII case-insensitively. +func tokenEqual(t1, t2 string) bool { + if len(t1) != len(t2) { + return false + } + for i, b := range t1 { + if b >= utf8.RuneSelf { + // No UTF-8 or non-ASCII allowed in tokens. + return false + } + if lowerASCII(byte(b)) != lowerASCII(t2[i]) { + return false + } + } + return true +} + +// isLWS reports whether b is linear white space, according +// to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 +// LWS = [CRLF] 1*( SP | HT ) +func isLWS(b byte) bool { return b == ' ' || b == '\t' } + +// isCTL reports whether b is a control byte, according +// to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 +// CTL = +func isCTL(b byte) bool { + const del = 0x7f // a CTL + return b < ' ' || b == del +} + +// ValidHeaderFieldName reports whether v is a valid HTTP/1.x header name. +// HTTP/2 imposes the additional restriction that uppercase ASCII +// letters are not allowed. +// +// RFC 7230 says: +// header-field = field-name ":" OWS field-value OWS +// field-name = token +// token = 1*tchar +// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / +// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA +func ValidHeaderFieldName(v string) bool { + if len(v) == 0 { + return false + } + for _, r := range v { + if !IsTokenRune(r) { + return false + } + } + return true +} + +// ValidHostHeader reports whether h is a valid host header. +func ValidHostHeader(h string) bool { + // The latest spec is actually this: + // + // http://tools.ietf.org/html/rfc7230#section-5.4 + // Host = uri-host [ ":" port ] + // + // Where uri-host is: + // http://tools.ietf.org/html/rfc3986#section-3.2.2 + // + // But we're going to be much more lenient for now and just + // search for any byte that's not a valid byte in any of those + // expressions. + for i := 0; i < len(h); i++ { + if !validHostByte[h[i]] { + return false + } + } + return true +} + +// See the validHostHeader comment. +var validHostByte = [256]bool{ + '0': true, '1': true, '2': true, '3': true, '4': true, '5': true, '6': true, '7': true, + '8': true, '9': true, + + 'a': true, 'b': true, 'c': true, 'd': true, 'e': true, 'f': true, 'g': true, 'h': true, + 'i': true, 'j': true, 'k': true, 'l': true, 'm': true, 'n': true, 'o': true, 'p': true, + 'q': true, 'r': true, 's': true, 't': true, 'u': true, 'v': true, 'w': true, 'x': true, + 'y': true, 'z': true, + + 'A': true, 'B': true, 'C': true, 'D': true, 'E': true, 'F': true, 'G': true, 'H': true, + 'I': true, 'J': true, 'K': true, 'L': true, 'M': true, 'N': true, 'O': true, 'P': true, + 'Q': true, 'R': true, 'S': true, 'T': true, 'U': true, 'V': true, 'W': true, 'X': true, + 'Y': true, 'Z': true, + + '!': true, // sub-delims + '$': true, // sub-delims + '%': true, // pct-encoded (and used in IPv6 zones) + '&': true, // sub-delims + '(': true, // sub-delims + ')': true, // sub-delims + '*': true, // sub-delims + '+': true, // sub-delims + ',': true, // sub-delims + '-': true, // unreserved + '.': true, // unreserved + ':': true, // IPv6address + Host expression's optional port + ';': true, // sub-delims + '=': true, // sub-delims + '[': true, + '\'': true, // sub-delims + ']': true, + '_': true, // unreserved + '~': true, // unreserved +} + +// ValidHeaderFieldValue reports whether v is a valid "field-value" according to +// http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 : +// +// message-header = field-name ":" [ field-value ] +// field-value = *( field-content | LWS ) +// field-content = +// +// http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 : +// +// TEXT = +// LWS = [CRLF] 1*( SP | HT ) +// CTL = +// +// RFC 7230 says: +// field-value = *( field-content / obs-fold ) +// obj-fold = N/A to http2, and deprecated +// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] +// field-vchar = VCHAR / obs-text +// obs-text = %x80-FF +// VCHAR = "any visible [USASCII] character" +// +// http2 further says: "Similarly, HTTP/2 allows header field values +// that are not valid. While most of the values that can be encoded +// will not alter header field parsing, carriage return (CR, ASCII +// 0xd), line feed (LF, ASCII 0xa), and the zero character (NUL, ASCII +// 0x0) might be exploited by an attacker if they are translated +// verbatim. Any request or response that contains a character not +// permitted in a header field value MUST be treated as malformed +// (Section 8.1.2.6). Valid characters are defined by the +// field-content ABNF rule in Section 3.2 of [RFC7230]." +// +// This function does not (yet?) properly handle the rejection of +// strings that begin or end with SP or HTAB. +func ValidHeaderFieldValue(v string) bool { + for i := 0; i < len(v); i++ { + b := v[i] + if isCTL(b) && !isLWS(b) { + return false + } + } + return true +} + +func isASCII(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} + +// PunycodeHostPort returns the IDNA Punycode version +// of the provided "host" or "host:port" string. +func PunycodeHostPort(v string) (string, error) { + if isASCII(v) { + return v, nil + } + + host, port, err := net.SplitHostPort(v) + if err != nil { + // The input 'v' argument was just a "host" argument, + // without a port. This error should not be returned + // to the caller. + host = v + port = "" + } + host, err = idna.ToASCII(host) + if err != nil { + // Non-UTF-8? Not representable in Punycode, in any + // case. + return "", err + } + if port == "" { + return host, nil + } + return net.JoinHostPort(host, port), nil +} diff --git a/vendor/golang.org/x/net/lex/httplex/httplex_test.go b/vendor/golang.org/x/net/lex/httplex/httplex_test.go new file mode 100644 index 0000000..f47adc9 --- /dev/null +++ b/vendor/golang.org/x/net/lex/httplex/httplex_test.go @@ -0,0 +1,119 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package httplex + +import ( + "testing" +) + +func isChar(c rune) bool { return c <= 127 } + +func isCtl(c rune) bool { return c <= 31 || c == 127 } + +func isSeparator(c rune) bool { + switch c { + case '(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', '/', '[', ']', '?', '=', '{', '}', ' ', '\t': + return true + } + return false +} + +func TestIsToken(t *testing.T) { + for i := 0; i <= 130; i++ { + r := rune(i) + expected := isChar(r) && !isCtl(r) && !isSeparator(r) + if IsTokenRune(r) != expected { + t.Errorf("isToken(0x%x) = %v", r, !expected) + } + } +} + +func TestHeaderValuesContainsToken(t *testing.T) { + tests := []struct { + vals []string + token string + want bool + }{ + { + vals: []string{"foo"}, + token: "foo", + want: true, + }, + { + vals: []string{"bar", "foo"}, + token: "foo", + want: true, + }, + { + vals: []string{"foo"}, + token: "FOO", + want: true, + }, + { + vals: []string{"foo"}, + token: "bar", + want: false, + }, + { + vals: []string{" foo "}, + token: "FOO", + want: true, + }, + { + vals: []string{"foo,bar"}, + token: "FOO", + want: true, + }, + { + vals: []string{"bar,foo,bar"}, + token: "FOO", + want: true, + }, + { + vals: []string{"bar , foo"}, + token: "FOO", + want: true, + }, + { + vals: []string{"foo ,bar "}, + token: "FOO", + want: true, + }, + { + vals: []string{"bar, foo ,bar"}, + token: "FOO", + want: true, + }, + { + vals: []string{"bar , foo"}, + token: "FOO", + want: true, + }, + } + for _, tt := range tests { + got := HeaderValuesContainsToken(tt.vals, tt.token) + if got != tt.want { + t.Errorf("headerValuesContainsToken(%q, %q) = %v; want %v", tt.vals, tt.token, got, tt.want) + } + } +} + +func TestPunycodeHostPort(t *testing.T) { + tests := []struct { + in, want string + }{ + {"www.google.com", "www.google.com"}, + {"гофер.рф", "xn--c1ae0ajs.xn--p1ai"}, + {"bücher.de", "xn--bcher-kva.de"}, + {"bücher.de:8080", "xn--bcher-kva.de:8080"}, + {"[1::6]:8080", "[1::6]:8080"}, + } + for _, tt := range tests { + got, err := PunycodeHostPort(tt.in) + if tt.want != got || err != nil { + t.Errorf("PunycodeHostPort(%q) = %q, %v, want %q, nil", tt.in, got, err, tt.want) + } + } +} diff --git a/vendor/golang.org/x/net/lif/address.go b/vendor/golang.org/x/net/lif/address.go new file mode 100644 index 0000000..afb957f --- /dev/null +++ b/vendor/golang.org/x/net/lif/address.go @@ -0,0 +1,105 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package lif + +import ( + "errors" + "unsafe" +) + +// An Addr represents an address associated with packet routing. +type Addr interface { + // Family returns an address family. + Family() int +} + +// An Inet4Addr represents an internet address for IPv4. +type Inet4Addr struct { + IP [4]byte // IP address + PrefixLen int // address prefix length +} + +// Family implements the Family method of Addr interface. +func (a *Inet4Addr) Family() int { return sysAF_INET } + +// An Inet6Addr represents an internet address for IPv6. +type Inet6Addr struct { + IP [16]byte // IP address + PrefixLen int // address prefix length + ZoneID int // zone identifier +} + +// Family implements the Family method of Addr interface. +func (a *Inet6Addr) Family() int { return sysAF_INET6 } + +// Addrs returns a list of interface addresses. +// +// The provided af must be an address family and name must be a data +// link name. The zero value of af or name means a wildcard. +func Addrs(af int, name string) ([]Addr, error) { + eps, err := newEndpoints(af) + if len(eps) == 0 { + return nil, err + } + defer func() { + for _, ep := range eps { + ep.close() + } + }() + lls, err := links(eps, name) + if len(lls) == 0 { + return nil, err + } + var as []Addr + for _, ll := range lls { + var lifr lifreq + for i := 0; i < len(ll.Name); i++ { + lifr.Name[i] = int8(ll.Name[i]) + } + for _, ep := range eps { + ioc := int64(sysSIOCGLIFADDR) + err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifr)) + if err != nil { + continue + } + sa := (*sockaddrStorage)(unsafe.Pointer(&lifr.Lifru[0])) + l := int(nativeEndian.Uint32(lifr.Lifru1[:4])) + if l == 0 { + continue + } + switch sa.Family { + case sysAF_INET: + a := &Inet4Addr{PrefixLen: l} + copy(a.IP[:], lifr.Lifru[4:8]) + as = append(as, a) + case sysAF_INET6: + a := &Inet6Addr{PrefixLen: l, ZoneID: int(nativeEndian.Uint32(lifr.Lifru[24:28]))} + copy(a.IP[:], lifr.Lifru[8:24]) + as = append(as, a) + } + } + } + return as, nil +} + +func parseLinkAddr(b []byte) ([]byte, error) { + nlen, alen, slen := int(b[1]), int(b[2]), int(b[3]) + l := 4 + nlen + alen + slen + if len(b) < l { + return nil, errors.New("invalid address") + } + b = b[4:] + var addr []byte + if nlen > 0 { + b = b[nlen:] + } + if alen > 0 { + addr = make([]byte, alen) + copy(addr, b[:alen]) + } + return addr, nil +} diff --git a/vendor/golang.org/x/net/lif/address_test.go b/vendor/golang.org/x/net/lif/address_test.go new file mode 100644 index 0000000..f62ed93 --- /dev/null +++ b/vendor/golang.org/x/net/lif/address_test.go @@ -0,0 +1,121 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package lif + +import ( + "fmt" + "testing" +) + +type addrFamily int + +func (af addrFamily) String() string { + switch af { + case sysAF_UNSPEC: + return "unspec" + case sysAF_INET: + return "inet4" + case sysAF_INET6: + return "inet6" + default: + return fmt.Sprintf("%d", af) + } +} + +const hexDigit = "0123456789abcdef" + +type llAddr []byte + +func (a llAddr) String() string { + if len(a) == 0 { + return "" + } + buf := make([]byte, 0, len(a)*3-1) + for i, b := range a { + if i > 0 { + buf = append(buf, ':') + } + buf = append(buf, hexDigit[b>>4]) + buf = append(buf, hexDigit[b&0xF]) + } + return string(buf) +} + +type ipAddr []byte + +func (a ipAddr) String() string { + if len(a) == 0 { + return "" + } + if len(a) == 4 { + return fmt.Sprintf("%d.%d.%d.%d", a[0], a[1], a[2], a[3]) + } + if len(a) == 16 { + return fmt.Sprintf("%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]) + } + s := make([]byte, len(a)*2) + for i, tn := range a { + s[i*2], s[i*2+1] = hexDigit[tn>>4], hexDigit[tn&0xf] + } + return string(s) +} + +func (a *Inet4Addr) String() string { + return fmt.Sprintf("(%s %s %d)", addrFamily(a.Family()), ipAddr(a.IP[:]), a.PrefixLen) +} + +func (a *Inet6Addr) String() string { + return fmt.Sprintf("(%s %s %d %d)", addrFamily(a.Family()), ipAddr(a.IP[:]), a.PrefixLen, a.ZoneID) +} + +type addrPack struct { + af int + as []Addr +} + +func addrPacks() ([]addrPack, error) { + var aps []addrPack + for _, af := range [...]int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} { + as, err := Addrs(af, "") + if err != nil { + return nil, err + } + aps = append(aps, addrPack{af: af, as: as}) + } + return aps, nil +} + +func TestAddrs(t *testing.T) { + aps, err := addrPacks() + if len(aps) == 0 && err != nil { + t.Fatal(err) + } + lps, err := linkPacks() + if len(lps) == 0 && err != nil { + t.Fatal(err) + } + for _, lp := range lps { + n := 0 + for _, ll := range lp.lls { + as, err := Addrs(lp.af, ll.Name) + if err != nil { + t.Fatal(lp.af, ll.Name, err) + } + t.Logf("af=%s name=%s %v", addrFamily(lp.af), ll.Name, as) + n += len(as) + } + for _, ap := range aps { + if ap.af != lp.af { + continue + } + if n != len(ap.as) { + t.Errorf("af=%s got %d; want %d", addrFamily(lp.af), n, len(ap.as)) + continue + } + } + } +} diff --git a/vendor/golang.org/x/net/lif/binary.go b/vendor/golang.org/x/net/lif/binary.go new file mode 100644 index 0000000..738a94f --- /dev/null +++ b/vendor/golang.org/x/net/lif/binary.go @@ -0,0 +1,115 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package lif + +// This file contains duplicates of encoding/binary package. +// +// This package is supposed to be used by the net package of standard +// library. Therefore the package set used in the package must be the +// same as net package. + +var ( + littleEndian binaryLittleEndian + bigEndian binaryBigEndian +) + +type binaryByteOrder interface { + Uint16([]byte) uint16 + Uint32([]byte) uint32 + Uint64([]byte) uint64 + PutUint16([]byte, uint16) + PutUint32([]byte, uint32) + PutUint64([]byte, uint64) +} + +type binaryLittleEndian struct{} + +func (binaryLittleEndian) Uint16(b []byte) uint16 { + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint16(b[0]) | uint16(b[1])<<8 +} + +func (binaryLittleEndian) PutUint16(b []byte, v uint16) { + _ = b[1] // early bounds check to guarantee safety of writes below + b[0] = byte(v) + b[1] = byte(v >> 8) +} + +func (binaryLittleEndian) Uint32(b []byte) uint32 { + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 +} + +func (binaryLittleEndian) PutUint32(b []byte, v uint32) { + _ = b[3] // early bounds check to guarantee safety of writes below + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) +} + +func (binaryLittleEndian) Uint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +func (binaryLittleEndian) PutUint64(b []byte, v uint64) { + _ = b[7] // early bounds check to guarantee safety of writes below + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) + b[4] = byte(v >> 32) + b[5] = byte(v >> 40) + b[6] = byte(v >> 48) + b[7] = byte(v >> 56) +} + +type binaryBigEndian struct{} + +func (binaryBigEndian) Uint16(b []byte) uint16 { + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint16(b[1]) | uint16(b[0])<<8 +} + +func (binaryBigEndian) PutUint16(b []byte, v uint16) { + _ = b[1] // early bounds check to guarantee safety of writes below + b[0] = byte(v >> 8) + b[1] = byte(v) +} + +func (binaryBigEndian) Uint32(b []byte) uint32 { + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 +} + +func (binaryBigEndian) PutUint32(b []byte, v uint32) { + _ = b[3] // early bounds check to guarantee safety of writes below + b[0] = byte(v >> 24) + b[1] = byte(v >> 16) + b[2] = byte(v >> 8) + b[3] = byte(v) +} + +func (binaryBigEndian) Uint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 +} + +func (binaryBigEndian) PutUint64(b []byte, v uint64) { + _ = b[7] // early bounds check to guarantee safety of writes below + b[0] = byte(v >> 56) + b[1] = byte(v >> 48) + b[2] = byte(v >> 40) + b[3] = byte(v >> 32) + b[4] = byte(v >> 24) + b[5] = byte(v >> 16) + b[6] = byte(v >> 8) + b[7] = byte(v) +} diff --git a/vendor/golang.org/x/net/lif/defs_solaris.go b/vendor/golang.org/x/net/lif/defs_solaris.go new file mode 100644 index 0000000..8b84ba5 --- /dev/null +++ b/vendor/golang.org/x/net/lif/defs_solaris.go @@ -0,0 +1,90 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package lif + +/* +#include +#include + +#include +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_INET6 = C.AF_INET6 + + sysSOCK_DGRAM = C.SOCK_DGRAM +) + +type sockaddrStorage C.struct_sockaddr_storage + +const ( + sysLIFC_NOXMIT = C.LIFC_NOXMIT + sysLIFC_EXTERNAL_SOURCE = C.LIFC_EXTERNAL_SOURCE + sysLIFC_TEMPORARY = C.LIFC_TEMPORARY + sysLIFC_ALLZONES = C.LIFC_ALLZONES + sysLIFC_UNDER_IPMP = C.LIFC_UNDER_IPMP + sysLIFC_ENABLED = C.LIFC_ENABLED + + sysSIOCGLIFADDR = C.SIOCGLIFADDR + sysSIOCGLIFDSTADDR = C.SIOCGLIFDSTADDR + sysSIOCGLIFFLAGS = C.SIOCGLIFFLAGS + sysSIOCGLIFMTU = C.SIOCGLIFMTU + sysSIOCGLIFNETMASK = C.SIOCGLIFNETMASK + sysSIOCGLIFMETRIC = C.SIOCGLIFMETRIC + sysSIOCGLIFNUM = C.SIOCGLIFNUM + sysSIOCGLIFINDEX = C.SIOCGLIFINDEX + sysSIOCGLIFSUBNET = C.SIOCGLIFSUBNET + sysSIOCGLIFLNKINFO = C.SIOCGLIFLNKINFO + sysSIOCGLIFCONF = C.SIOCGLIFCONF + sysSIOCGLIFHWADDR = C.SIOCGLIFHWADDR +) + +const ( + sysIFF_UP = C.IFF_UP + sysIFF_BROADCAST = C.IFF_BROADCAST + sysIFF_DEBUG = C.IFF_DEBUG + sysIFF_LOOPBACK = C.IFF_LOOPBACK + sysIFF_POINTOPOINT = C.IFF_POINTOPOINT + sysIFF_NOTRAILERS = C.IFF_NOTRAILERS + sysIFF_RUNNING = C.IFF_RUNNING + sysIFF_NOARP = C.IFF_NOARP + sysIFF_PROMISC = C.IFF_PROMISC + sysIFF_ALLMULTI = C.IFF_ALLMULTI + sysIFF_INTELLIGENT = C.IFF_INTELLIGENT + sysIFF_MULTICAST = C.IFF_MULTICAST + sysIFF_MULTI_BCAST = C.IFF_MULTI_BCAST + sysIFF_UNNUMBERED = C.IFF_UNNUMBERED + sysIFF_PRIVATE = C.IFF_PRIVATE +) + +const ( + sizeofLifnum = C.sizeof_struct_lifnum + sizeofLifreq = C.sizeof_struct_lifreq + sizeofLifconf = C.sizeof_struct_lifconf + sizeofLifIfinfoReq = C.sizeof_struct_lif_ifinfo_req +) + +type sysLifnum C.struct_lifnum + +type lifreq C.struct_lifreq + +type lifconf C.struct_lifconf + +type lifIfinfoReq C.struct_lif_ifinfo_req + +const ( + sysIFT_IPV4 = C.IFT_IPV4 + sysIFT_IPV6 = C.IFT_IPV6 + sysIFT_6TO4 = C.IFT_6TO4 +) diff --git a/vendor/golang.org/x/net/lif/lif.go b/vendor/golang.org/x/net/lif/lif.go new file mode 100644 index 0000000..6e81f81 --- /dev/null +++ b/vendor/golang.org/x/net/lif/lif.go @@ -0,0 +1,43 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +// Package lif provides basic functions for the manipulation of +// logical network interfaces and interface addresses on Solaris. +// +// The package supports Solaris 11 or above. +package lif + +import "syscall" + +type endpoint struct { + af int + s uintptr +} + +func (ep *endpoint) close() error { + return syscall.Close(int(ep.s)) +} + +func newEndpoints(af int) ([]endpoint, error) { + var lastErr error + var eps []endpoint + afs := []int{sysAF_INET, sysAF_INET6} + if af != sysAF_UNSPEC { + afs = []int{af} + } + for _, af := range afs { + s, err := syscall.Socket(af, sysSOCK_DGRAM, 0) + if err != nil { + lastErr = err + continue + } + eps = append(eps, endpoint{af: af, s: uintptr(s)}) + } + if len(eps) == 0 { + return nil, lastErr + } + return eps, nil +} diff --git a/vendor/golang.org/x/net/lif/link.go b/vendor/golang.org/x/net/lif/link.go new file mode 100644 index 0000000..fce6b21 --- /dev/null +++ b/vendor/golang.org/x/net/lif/link.go @@ -0,0 +1,126 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package lif + +import "unsafe" + +// A Link represents logical data link information. +// +// It also represents base information for logical network interface. +// On Solaris, each logical network interface represents network layer +// adjacency information and the interface has a only single network +// address or address pair for tunneling. It's usual that multiple +// logical network interfaces share the same logical data link. +type Link struct { + Name string // name, equivalent to IP interface name + Index int // index, equivalent to IP interface index + Type int // type + Flags int // flags + MTU int // maximum transmission unit, basically link MTU but may differ between IP address families + Addr []byte // address +} + +func (ll *Link) fetch(s uintptr) { + var lifr lifreq + for i := 0; i < len(ll.Name); i++ { + lifr.Name[i] = int8(ll.Name[i]) + } + ioc := int64(sysSIOCGLIFINDEX) + if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil { + ll.Index = int(nativeEndian.Uint32(lifr.Lifru[:4])) + } + ioc = int64(sysSIOCGLIFFLAGS) + if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil { + ll.Flags = int(nativeEndian.Uint64(lifr.Lifru[:8])) + } + ioc = int64(sysSIOCGLIFMTU) + if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil { + ll.MTU = int(nativeEndian.Uint32(lifr.Lifru[:4])) + } + switch ll.Type { + case sysIFT_IPV4, sysIFT_IPV6, sysIFT_6TO4: + default: + ioc = int64(sysSIOCGLIFHWADDR) + if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil { + ll.Addr, _ = parseLinkAddr(lifr.Lifru[4:]) + } + } +} + +// Links returns a list of logical data links. +// +// The provided af must be an address family and name must be a data +// link name. The zero value of af or name means a wildcard. +func Links(af int, name string) ([]Link, error) { + eps, err := newEndpoints(af) + if len(eps) == 0 { + return nil, err + } + defer func() { + for _, ep := range eps { + ep.close() + } + }() + return links(eps, name) +} + +func links(eps []endpoint, name string) ([]Link, error) { + var lls []Link + lifn := sysLifnum{Flags: sysLIFC_NOXMIT | sysLIFC_TEMPORARY | sysLIFC_ALLZONES | sysLIFC_UNDER_IPMP} + lifc := lifconf{Flags: sysLIFC_NOXMIT | sysLIFC_TEMPORARY | sysLIFC_ALLZONES | sysLIFC_UNDER_IPMP} + for _, ep := range eps { + lifn.Family = uint16(ep.af) + ioc := int64(sysSIOCGLIFNUM) + if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifn)); err != nil { + continue + } + if lifn.Count == 0 { + continue + } + b := make([]byte, lifn.Count*sizeofLifreq) + lifc.Family = uint16(ep.af) + lifc.Len = lifn.Count * sizeofLifreq + if len(lifc.Lifcu) == 8 { + nativeEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0])))) + } else { + nativeEndian.PutUint32(lifc.Lifcu[:], uint32(uintptr(unsafe.Pointer(&b[0])))) + } + ioc = int64(sysSIOCGLIFCONF) + if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifc)); err != nil { + continue + } + nb := make([]byte, 32) // see LIFNAMSIZ in net/if.h + for i := 0; i < int(lifn.Count); i++ { + lifr := (*lifreq)(unsafe.Pointer(&b[i*sizeofLifreq])) + for i := 0; i < 32; i++ { + if lifr.Name[i] == 0 { + nb = nb[:i] + break + } + nb[i] = byte(lifr.Name[i]) + } + llname := string(nb) + nb = nb[:32] + if isDupLink(lls, llname) || name != "" && name != llname { + continue + } + ll := Link{Name: llname, Type: int(lifr.Type)} + ll.fetch(ep.s) + lls = append(lls, ll) + } + } + return lls, nil +} + +func isDupLink(lls []Link, name string) bool { + for _, ll := range lls { + if ll.Name == name { + return true + } + } + return false +} diff --git a/vendor/golang.org/x/net/lif/link_test.go b/vendor/golang.org/x/net/lif/link_test.go new file mode 100644 index 0000000..8fb2bf6 --- /dev/null +++ b/vendor/golang.org/x/net/lif/link_test.go @@ -0,0 +1,61 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package lif + +import ( + "fmt" + "testing" +) + +func (ll *Link) String() string { + return fmt.Sprintf("name=%s index=%d type=%d flags=%#x mtu=%d addr=%v", ll.Name, ll.Index, ll.Type, ll.Flags, ll.MTU, llAddr(ll.Addr)) +} + +type linkPack struct { + af int + lls []Link +} + +func linkPacks() ([]linkPack, error) { + var lps []linkPack + for _, af := range [...]int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} { + lls, err := Links(af, "") + if err != nil { + return nil, err + } + lps = append(lps, linkPack{af: af, lls: lls}) + } + return lps, nil +} + +func TestLinks(t *testing.T) { + lps, err := linkPacks() + if len(lps) == 0 && err != nil { + t.Fatal(err) + } + for _, lp := range lps { + n := 0 + for _, sll := range lp.lls { + lls, err := Links(lp.af, sll.Name) + if err != nil { + t.Fatal(lp.af, sll.Name, err) + } + for _, ll := range lls { + if ll.Name != sll.Name || ll.Index != sll.Index { + t.Errorf("af=%s got %v; want %v", addrFamily(lp.af), &ll, &sll) + continue + } + t.Logf("af=%s name=%s %v", addrFamily(lp.af), sll.Name, &ll) + n++ + } + } + if n != len(lp.lls) { + t.Errorf("af=%s got %d; want %d", addrFamily(lp.af), n, len(lp.lls)) + continue + } + } +} diff --git a/vendor/golang.org/x/net/lif/sys.go b/vendor/golang.org/x/net/lif/sys.go new file mode 100644 index 0000000..c896041 --- /dev/null +++ b/vendor/golang.org/x/net/lif/sys.go @@ -0,0 +1,21 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package lif + +import "unsafe" + +var nativeEndian binaryByteOrder + +func init() { + i := uint32(1) + b := (*[4]byte)(unsafe.Pointer(&i)) + if b[0] == 1 { + nativeEndian = littleEndian + } else { + nativeEndian = bigEndian + } +} diff --git a/vendor/golang.org/x/net/lif/sys_solaris_amd64.s b/vendor/golang.org/x/net/lif/sys_solaris_amd64.s new file mode 100644 index 0000000..39d76af --- /dev/null +++ b/vendor/golang.org/x/net/lif/sys_solaris_amd64.s @@ -0,0 +1,8 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) diff --git a/vendor/golang.org/x/net/lif/syscall.go b/vendor/golang.org/x/net/lif/syscall.go new file mode 100644 index 0000000..aadab2e --- /dev/null +++ b/vendor/golang.org/x/net/lif/syscall.go @@ -0,0 +1,28 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package lif + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" + +//go:linkname procIoctl libc_ioctl + +var procIoctl uintptr + +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) + +func ioctl(s, ioc uintptr, arg unsafe.Pointer) error { + _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procIoctl)), 3, s, ioc, uintptr(arg), 0, 0, 0) + if errno != 0 { + return error(errno) + } + return nil +} diff --git a/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go b/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go new file mode 100644 index 0000000..94231c4 --- /dev/null +++ b/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go @@ -0,0 +1,103 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_solaris.go + +package lif + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1a + + sysSOCK_DGRAM = 0x1 +) + +type sockaddrStorage struct { + Family uint16 + X_ss_pad1 [6]int8 + X_ss_align float64 + X_ss_pad2 [240]int8 +} + +const ( + sysLIFC_NOXMIT = 0x1 + sysLIFC_EXTERNAL_SOURCE = 0x2 + sysLIFC_TEMPORARY = 0x4 + sysLIFC_ALLZONES = 0x8 + sysLIFC_UNDER_IPMP = 0x10 + sysLIFC_ENABLED = 0x20 + + sysSIOCGLIFADDR = -0x3f87968f + sysSIOCGLIFDSTADDR = -0x3f87968d + sysSIOCGLIFFLAGS = -0x3f87968b + sysSIOCGLIFMTU = -0x3f879686 + sysSIOCGLIFNETMASK = -0x3f879683 + sysSIOCGLIFMETRIC = -0x3f879681 + sysSIOCGLIFNUM = -0x3ff3967e + sysSIOCGLIFINDEX = -0x3f87967b + sysSIOCGLIFSUBNET = -0x3f879676 + sysSIOCGLIFLNKINFO = -0x3f879674 + sysSIOCGLIFCONF = -0x3fef965b + sysSIOCGLIFHWADDR = -0x3f879640 +) + +const ( + sysIFF_UP = 0x1 + sysIFF_BROADCAST = 0x2 + sysIFF_DEBUG = 0x4 + sysIFF_LOOPBACK = 0x8 + sysIFF_POINTOPOINT = 0x10 + sysIFF_NOTRAILERS = 0x20 + sysIFF_RUNNING = 0x40 + sysIFF_NOARP = 0x80 + sysIFF_PROMISC = 0x100 + sysIFF_ALLMULTI = 0x200 + sysIFF_INTELLIGENT = 0x400 + sysIFF_MULTICAST = 0x800 + sysIFF_MULTI_BCAST = 0x1000 + sysIFF_UNNUMBERED = 0x2000 + sysIFF_PRIVATE = 0x8000 +) + +const ( + sizeofLifnum = 0xc + sizeofLifreq = 0x178 + sizeofLifconf = 0x18 + sizeofLifIfinfoReq = 0x10 +) + +type sysLifnum struct { + Family uint16 + Pad_cgo_0 [2]byte + Flags int32 + Count int32 +} + +type lifreq struct { + Name [32]int8 + Lifru1 [4]byte + Type uint32 + Lifru [336]byte +} + +type lifconf struct { + Family uint16 + Pad_cgo_0 [2]byte + Flags int32 + Len int32 + Pad_cgo_1 [4]byte + Lifcu [8]byte +} + +type lifIfinfoReq struct { + Maxhops uint8 + Pad_cgo_0 [3]byte + Reachtime uint32 + Reachretrans uint32 + Maxmtu uint32 +} + +const ( + sysIFT_IPV4 = 0xc8 + sysIFT_IPV6 = 0xc9 + sysIFT_6TO4 = 0xca +) diff --git a/vendor/golang.org/x/net/nettest/conntest.go b/vendor/golang.org/x/net/nettest/conntest.go new file mode 100644 index 0000000..c246bbe --- /dev/null +++ b/vendor/golang.org/x/net/nettest/conntest.go @@ -0,0 +1,451 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package nettest provides utilities for network testing. +package nettest + +import ( + "bytes" + "encoding/binary" + "io" + "io/ioutil" + "math/rand" + "net" + "sync" + "testing" + "time" +) + +var ( + aLongTimeAgo = time.Unix(233431200, 0) + neverTimeout = time.Time{} +) + +// MakePipe creates a connection between two endpoints and returns the pair +// as c1 and c2, such that anything written to c1 is read by c2 and vice-versa. +// The stop function closes all resources, including c1, c2, and the underlying +// net.Listener (if there is one), and should not be nil. +type MakePipe func() (c1, c2 net.Conn, stop func(), err error) + +// TestConn tests that a net.Conn implementation properly satisfies the interface. +// The tests should not produce any false positives, but may experience +// false negatives. Thus, some issues may only be detected when the test is +// run multiple times. For maximal effectiveness, run the tests under the +// race detector. +func TestConn(t *testing.T, mp MakePipe) { + testConn(t, mp) +} + +type connTester func(t *testing.T, c1, c2 net.Conn) + +func timeoutWrapper(t *testing.T, mp MakePipe, f connTester) { + c1, c2, stop, err := mp() + if err != nil { + t.Fatalf("unable to make pipe: %v", err) + } + var once sync.Once + defer once.Do(func() { stop() }) + timer := time.AfterFunc(time.Minute, func() { + once.Do(func() { + t.Error("test timed out; terminating pipe") + stop() + }) + }) + defer timer.Stop() + f(t, c1, c2) +} + +// testBasicIO tests that the data sent on c1 is properly received on c2. +func testBasicIO(t *testing.T, c1, c2 net.Conn) { + want := make([]byte, 1<<20) + rand.New(rand.NewSource(0)).Read(want) + + dataCh := make(chan []byte) + go func() { + rd := bytes.NewReader(want) + if err := chunkedCopy(c1, rd); err != nil { + t.Errorf("unexpected c1.Write error: %v", err) + } + if err := c1.Close(); err != nil { + t.Errorf("unexpected c1.Close error: %v", err) + } + }() + + go func() { + wr := new(bytes.Buffer) + if err := chunkedCopy(wr, c2); err != nil { + t.Errorf("unexpected c2.Read error: %v", err) + } + if err := c2.Close(); err != nil { + t.Errorf("unexpected c2.Close error: %v", err) + } + dataCh <- wr.Bytes() + }() + + if got := <-dataCh; !bytes.Equal(got, want) { + t.Errorf("transmitted data differs") + } +} + +// testPingPong tests that the two endpoints can synchronously send data to +// each other in a typical request-response pattern. +func testPingPong(t *testing.T, c1, c2 net.Conn) { + var wg sync.WaitGroup + defer wg.Wait() + + pingPonger := func(c net.Conn) { + defer wg.Done() + buf := make([]byte, 8) + var prev uint64 + for { + if _, err := io.ReadFull(c, buf); err != nil { + if err == io.EOF { + break + } + t.Errorf("unexpected Read error: %v", err) + } + + v := binary.LittleEndian.Uint64(buf) + binary.LittleEndian.PutUint64(buf, v+1) + if prev != 0 && prev+2 != v { + t.Errorf("mismatching value: got %d, want %d", v, prev+2) + } + prev = v + if v == 1000 { + break + } + + if _, err := c.Write(buf); err != nil { + t.Errorf("unexpected Write error: %v", err) + break + } + } + if err := c.Close(); err != nil { + t.Errorf("unexpected Close error: %v", err) + } + } + + wg.Add(2) + go pingPonger(c1) + go pingPonger(c2) + + // Start off the chain reaction. + if _, err := c1.Write(make([]byte, 8)); err != nil { + t.Errorf("unexpected c1.Write error: %v", err) + } +} + +// testRacyRead tests that it is safe to mutate the input Read buffer +// immediately after cancelation has occurred. +func testRacyRead(t *testing.T, c1, c2 net.Conn) { + go chunkedCopy(c2, rand.New(rand.NewSource(0))) + + var wg sync.WaitGroup + defer wg.Wait() + + c1.SetReadDeadline(time.Now().Add(time.Millisecond)) + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + + b1 := make([]byte, 1024) + b2 := make([]byte, 1024) + for j := 0; j < 100; j++ { + _, err := c1.Read(b1) + copy(b1, b2) // Mutate b1 to trigger potential race + if err != nil { + checkForTimeoutError(t, err) + c1.SetReadDeadline(time.Now().Add(time.Millisecond)) + } + } + }() + } +} + +// testRacyWrite tests that it is safe to mutate the input Write buffer +// immediately after cancelation has occurred. +func testRacyWrite(t *testing.T, c1, c2 net.Conn) { + go chunkedCopy(ioutil.Discard, c2) + + var wg sync.WaitGroup + defer wg.Wait() + + c1.SetWriteDeadline(time.Now().Add(time.Millisecond)) + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + + b1 := make([]byte, 1024) + b2 := make([]byte, 1024) + for j := 0; j < 100; j++ { + _, err := c1.Write(b1) + copy(b1, b2) // Mutate b1 to trigger potential race + if err != nil { + checkForTimeoutError(t, err) + c1.SetWriteDeadline(time.Now().Add(time.Millisecond)) + } + } + }() + } +} + +// testReadTimeout tests that Read timeouts do not affect Write. +func testReadTimeout(t *testing.T, c1, c2 net.Conn) { + go chunkedCopy(ioutil.Discard, c2) + + c1.SetReadDeadline(aLongTimeAgo) + _, err := c1.Read(make([]byte, 1024)) + checkForTimeoutError(t, err) + if _, err := c1.Write(make([]byte, 1024)); err != nil { + t.Errorf("unexpected Write error: %v", err) + } +} + +// testWriteTimeout tests that Write timeouts do not affect Read. +func testWriteTimeout(t *testing.T, c1, c2 net.Conn) { + go chunkedCopy(c2, rand.New(rand.NewSource(0))) + + c1.SetWriteDeadline(aLongTimeAgo) + _, err := c1.Write(make([]byte, 1024)) + checkForTimeoutError(t, err) + if _, err := c1.Read(make([]byte, 1024)); err != nil { + t.Errorf("unexpected Read error: %v", err) + } +} + +// testPastTimeout tests that a deadline set in the past immediately times out +// Read and Write requests. +func testPastTimeout(t *testing.T, c1, c2 net.Conn) { + go chunkedCopy(c2, c2) + + testRoundtrip(t, c1) + + c1.SetDeadline(aLongTimeAgo) + n, err := c1.Write(make([]byte, 1024)) + if n != 0 { + t.Errorf("unexpected Write count: got %d, want 0", n) + } + checkForTimeoutError(t, err) + n, err = c1.Read(make([]byte, 1024)) + if n != 0 { + t.Errorf("unexpected Read count: got %d, want 0", n) + } + checkForTimeoutError(t, err) + + testRoundtrip(t, c1) +} + +// testPresentTimeout tests that a deadline set while there are pending +// Read and Write operations immediately times out those operations. +func testPresentTimeout(t *testing.T, c1, c2 net.Conn) { + var wg sync.WaitGroup + defer wg.Wait() + wg.Add(3) + + deadlineSet := make(chan bool, 1) + go func() { + defer wg.Done() + time.Sleep(100 * time.Millisecond) + deadlineSet <- true + c1.SetReadDeadline(aLongTimeAgo) + c1.SetWriteDeadline(aLongTimeAgo) + }() + go func() { + defer wg.Done() + n, err := c1.Read(make([]byte, 1024)) + if n != 0 { + t.Errorf("unexpected Read count: got %d, want 0", n) + } + checkForTimeoutError(t, err) + if len(deadlineSet) == 0 { + t.Error("Read timed out before deadline is set") + } + }() + go func() { + defer wg.Done() + var err error + for err == nil { + _, err = c1.Write(make([]byte, 1024)) + } + checkForTimeoutError(t, err) + if len(deadlineSet) == 0 { + t.Error("Write timed out before deadline is set") + } + }() +} + +// testFutureTimeout tests that a future deadline will eventually time out +// Read and Write operations. +func testFutureTimeout(t *testing.T, c1, c2 net.Conn) { + var wg sync.WaitGroup + wg.Add(2) + + c1.SetDeadline(time.Now().Add(100 * time.Millisecond)) + go func() { + defer wg.Done() + _, err := c1.Read(make([]byte, 1024)) + checkForTimeoutError(t, err) + }() + go func() { + defer wg.Done() + var err error + for err == nil { + _, err = c1.Write(make([]byte, 1024)) + } + checkForTimeoutError(t, err) + }() + wg.Wait() + + go chunkedCopy(c2, c2) + resyncConn(t, c1) + testRoundtrip(t, c1) +} + +// testCloseTimeout tests that calling Close immediately times out pending +// Read and Write operations. +func testCloseTimeout(t *testing.T, c1, c2 net.Conn) { + go chunkedCopy(c2, c2) + + var wg sync.WaitGroup + defer wg.Wait() + wg.Add(3) + + // Test for cancelation upon connection closure. + c1.SetDeadline(neverTimeout) + go func() { + defer wg.Done() + time.Sleep(100 * time.Millisecond) + c1.Close() + }() + go func() { + defer wg.Done() + var err error + buf := make([]byte, 1024) + for err == nil { + _, err = c1.Read(buf) + } + }() + go func() { + defer wg.Done() + var err error + buf := make([]byte, 1024) + for err == nil { + _, err = c1.Write(buf) + } + }() +} + +// testConcurrentMethods tests that the methods of net.Conn can safely +// be called concurrently. +func testConcurrentMethods(t *testing.T, c1, c2 net.Conn) { + go chunkedCopy(c2, c2) + + // The results of the calls may be nonsensical, but this should + // not trigger a race detector warning. + var wg sync.WaitGroup + for i := 0; i < 100; i++ { + wg.Add(7) + go func() { + defer wg.Done() + c1.Read(make([]byte, 1024)) + }() + go func() { + defer wg.Done() + c1.Write(make([]byte, 1024)) + }() + go func() { + defer wg.Done() + c1.SetDeadline(time.Now().Add(10 * time.Millisecond)) + }() + go func() { + defer wg.Done() + c1.SetReadDeadline(aLongTimeAgo) + }() + go func() { + defer wg.Done() + c1.SetWriteDeadline(aLongTimeAgo) + }() + go func() { + defer wg.Done() + c1.LocalAddr() + }() + go func() { + defer wg.Done() + c1.RemoteAddr() + }() + } + wg.Wait() // At worst, the deadline is set 10ms into the future + + resyncConn(t, c1) + testRoundtrip(t, c1) +} + +// checkForTimeoutError checks that the error satisfies the Error interface +// and that Timeout returns true. +func checkForTimeoutError(t *testing.T, err error) { + if nerr, ok := err.(net.Error); ok { + if !nerr.Timeout() { + t.Errorf("err.Timeout() = false, want true") + } + } else { + t.Errorf("got %T, want net.Error", err) + } +} + +// testRoundtrip writes something into c and reads it back. +// It assumes that everything written into c is echoed back to itself. +func testRoundtrip(t *testing.T, c net.Conn) { + if err := c.SetDeadline(neverTimeout); err != nil { + t.Errorf("roundtrip SetDeadline error: %v", err) + } + + const s = "Hello, world!" + buf := []byte(s) + if _, err := c.Write(buf); err != nil { + t.Errorf("roundtrip Write error: %v", err) + } + if _, err := io.ReadFull(c, buf); err != nil { + t.Errorf("roundtrip Read error: %v", err) + } + if string(buf) != s { + t.Errorf("roundtrip data mismatch: got %q, want %q", buf, s) + } +} + +// resyncConn resynchronizes the connection into a sane state. +// It assumes that everything written into c is echoed back to itself. +// It assumes that 0xff is not currently on the wire or in the read buffer. +func resyncConn(t *testing.T, c net.Conn) { + c.SetDeadline(neverTimeout) + errCh := make(chan error) + go func() { + _, err := c.Write([]byte{0xff}) + errCh <- err + }() + buf := make([]byte, 1024) + for { + n, err := c.Read(buf) + if n > 0 && bytes.IndexByte(buf[:n], 0xff) == n-1 { + break + } + if err != nil { + t.Errorf("unexpected Read error: %v", err) + } + } + if err := <-errCh; err != nil { + t.Errorf("unexpected Write error: %v", err) + } +} + +// chunkedCopy copies from r to w in fixed-width chunks to avoid +// causing a Write that exceeds the maximum packet size for packet-based +// connections like "unixpacket". +// We assume that the maximum packet size is at least 1024. +func chunkedCopy(w io.Writer, r io.Reader) error { + b := make([]byte, 1024) + _, err := io.CopyBuffer(struct{ io.Writer }{w}, struct{ io.Reader }{r}, b) + return err +} diff --git a/vendor/golang.org/x/net/nettest/conntest_go16.go b/vendor/golang.org/x/net/nettest/conntest_go16.go new file mode 100644 index 0000000..4cbf48e --- /dev/null +++ b/vendor/golang.org/x/net/nettest/conntest_go16.go @@ -0,0 +1,24 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7 + +package nettest + +import "testing" + +func testConn(t *testing.T, mp MakePipe) { + // Avoid using subtests on Go 1.6 and below. + timeoutWrapper(t, mp, testBasicIO) + timeoutWrapper(t, mp, testPingPong) + timeoutWrapper(t, mp, testRacyRead) + timeoutWrapper(t, mp, testRacyWrite) + timeoutWrapper(t, mp, testReadTimeout) + timeoutWrapper(t, mp, testWriteTimeout) + timeoutWrapper(t, mp, testPastTimeout) + timeoutWrapper(t, mp, testPresentTimeout) + timeoutWrapper(t, mp, testFutureTimeout) + timeoutWrapper(t, mp, testCloseTimeout) + timeoutWrapper(t, mp, testConcurrentMethods) +} diff --git a/vendor/golang.org/x/net/nettest/conntest_go17.go b/vendor/golang.org/x/net/nettest/conntest_go17.go new file mode 100644 index 0000000..fa039f0 --- /dev/null +++ b/vendor/golang.org/x/net/nettest/conntest_go17.go @@ -0,0 +1,24 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package nettest + +import "testing" + +func testConn(t *testing.T, mp MakePipe) { + // Use subtests on Go 1.7 and above since it is better organized. + t.Run("BasicIO", func(t *testing.T) { timeoutWrapper(t, mp, testBasicIO) }) + t.Run("PingPong", func(t *testing.T) { timeoutWrapper(t, mp, testPingPong) }) + t.Run("RacyRead", func(t *testing.T) { timeoutWrapper(t, mp, testRacyRead) }) + t.Run("RacyWrite", func(t *testing.T) { timeoutWrapper(t, mp, testRacyWrite) }) + t.Run("ReadTimeout", func(t *testing.T) { timeoutWrapper(t, mp, testReadTimeout) }) + t.Run("WriteTimeout", func(t *testing.T) { timeoutWrapper(t, mp, testWriteTimeout) }) + t.Run("PastTimeout", func(t *testing.T) { timeoutWrapper(t, mp, testPastTimeout) }) + t.Run("PresentTimeout", func(t *testing.T) { timeoutWrapper(t, mp, testPresentTimeout) }) + t.Run("FutureTimeout", func(t *testing.T) { timeoutWrapper(t, mp, testFutureTimeout) }) + t.Run("CloseTimeout", func(t *testing.T) { timeoutWrapper(t, mp, testCloseTimeout) }) + t.Run("ConcurrentMethods", func(t *testing.T) { timeoutWrapper(t, mp, testConcurrentMethods) }) +} diff --git a/vendor/golang.org/x/net/nettest/conntest_test.go b/vendor/golang.org/x/net/nettest/conntest_test.go new file mode 100644 index 0000000..9f9453f --- /dev/null +++ b/vendor/golang.org/x/net/nettest/conntest_test.go @@ -0,0 +1,76 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.8 + +package nettest + +import ( + "net" + "os" + "runtime" + "testing" + + "golang.org/x/net/internal/nettest" +) + +func TestTestConn(t *testing.T) { + tests := []struct{ name, network string }{ + {"TCP", "tcp"}, + {"UnixPipe", "unix"}, + {"UnixPacketPipe", "unixpacket"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if !nettest.TestableNetwork(tt.network) { + t.Skipf("not supported on %s", runtime.GOOS) + } + + mp := func() (c1, c2 net.Conn, stop func(), err error) { + ln, err := nettest.NewLocalListener(tt.network) + if err != nil { + return nil, nil, nil, err + } + + // Start a connection between two endpoints. + var err1, err2 error + done := make(chan bool) + go func() { + c2, err2 = ln.Accept() + close(done) + }() + c1, err1 = net.Dial(ln.Addr().Network(), ln.Addr().String()) + <-done + + stop = func() { + if err1 == nil { + c1.Close() + } + if err2 == nil { + c2.Close() + } + ln.Close() + switch tt.network { + case "unix", "unixpacket": + os.Remove(ln.Addr().String()) + } + } + + switch { + case err1 != nil: + stop() + return nil, nil, nil, err1 + case err2 != nil: + stop() + return nil, nil, nil, err2 + default: + return c1, c2, stop, nil + } + } + + TestConn(t, mp) + }) + } +} diff --git a/vendor/golang.org/x/net/netutil/listen.go b/vendor/golang.org/x/net/netutil/listen.go new file mode 100644 index 0000000..56f43bf --- /dev/null +++ b/vendor/golang.org/x/net/netutil/listen.go @@ -0,0 +1,48 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package netutil provides network utility functions, complementing the more +// common ones in the net package. +package netutil // import "golang.org/x/net/netutil" + +import ( + "net" + "sync" +) + +// LimitListener returns a Listener that accepts at most n simultaneous +// connections from the provided Listener. +func LimitListener(l net.Listener, n int) net.Listener { + return &limitListener{l, make(chan struct{}, n)} +} + +type limitListener struct { + net.Listener + sem chan struct{} +} + +func (l *limitListener) acquire() { l.sem <- struct{}{} } +func (l *limitListener) release() { <-l.sem } + +func (l *limitListener) Accept() (net.Conn, error) { + l.acquire() + c, err := l.Listener.Accept() + if err != nil { + l.release() + return nil, err + } + return &limitListenerConn{Conn: c, release: l.release}, nil +} + +type limitListenerConn struct { + net.Conn + releaseOnce sync.Once + release func() +} + +func (l *limitListenerConn) Close() error { + err := l.Conn.Close() + l.releaseOnce.Do(l.release) + return err +} diff --git a/vendor/golang.org/x/net/netutil/listen_test.go b/vendor/golang.org/x/net/netutil/listen_test.go new file mode 100644 index 0000000..5e07d7b --- /dev/null +++ b/vendor/golang.org/x/net/netutil/listen_test.go @@ -0,0 +1,101 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package netutil + +import ( + "errors" + "fmt" + "io" + "io/ioutil" + "net" + "net/http" + "sync" + "sync/atomic" + "testing" + "time" + + "golang.org/x/net/internal/nettest" +) + +func TestLimitListener(t *testing.T) { + const max = 5 + attempts := (nettest.MaxOpenFiles() - max) / 2 + if attempts > 256 { // maximum length of accept queue is 128 by default + attempts = 256 + } + + l, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer l.Close() + l = LimitListener(l, max) + + var open int32 + go http.Serve(l, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if n := atomic.AddInt32(&open, 1); n > max { + t.Errorf("%d open connections, want <= %d", n, max) + } + defer atomic.AddInt32(&open, -1) + time.Sleep(10 * time.Millisecond) + fmt.Fprint(w, "some body") + })) + + var wg sync.WaitGroup + var failed int32 + for i := 0; i < attempts; i++ { + wg.Add(1) + go func() { + defer wg.Done() + c := http.Client{Timeout: 3 * time.Second} + r, err := c.Get("http://" + l.Addr().String()) + if err != nil { + t.Log(err) + atomic.AddInt32(&failed, 1) + return + } + defer r.Body.Close() + io.Copy(ioutil.Discard, r.Body) + }() + } + wg.Wait() + + // We expect some Gets to fail as the kernel's accept queue is filled, + // but most should succeed. + if int(failed) >= attempts/2 { + t.Errorf("%d requests failed within %d attempts", failed, attempts) + } +} + +type errorListener struct { + net.Listener +} + +func (errorListener) Accept() (net.Conn, error) { + return nil, errFake +} + +var errFake = errors.New("fake error from errorListener") + +// This used to hang. +func TestLimitListenerError(t *testing.T) { + donec := make(chan bool, 1) + go func() { + const n = 2 + ll := LimitListener(errorListener{}, n) + for i := 0; i < n+1; i++ { + _, err := ll.Accept() + if err != errFake { + t.Fatalf("Accept error = %v; want errFake", err) + } + } + donec <- true + }() + select { + case <-donec: + case <-time.After(5 * time.Second): + t.Fatal("timeout. deadlock?") + } +} diff --git a/vendor/golang.org/x/net/proxy/direct.go b/vendor/golang.org/x/net/proxy/direct.go new file mode 100644 index 0000000..4c5ad88 --- /dev/null +++ b/vendor/golang.org/x/net/proxy/direct.go @@ -0,0 +1,18 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "net" +) + +type direct struct{} + +// Direct is a direct proxy: one that makes network connections directly. +var Direct = direct{} + +func (direct) Dial(network, addr string) (net.Conn, error) { + return net.Dial(network, addr) +} diff --git a/vendor/golang.org/x/net/proxy/per_host.go b/vendor/golang.org/x/net/proxy/per_host.go new file mode 100644 index 0000000..f540b19 --- /dev/null +++ b/vendor/golang.org/x/net/proxy/per_host.go @@ -0,0 +1,140 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "net" + "strings" +) + +// A PerHost directs connections to a default Dialer unless the hostname +// requested matches one of a number of exceptions. +type PerHost struct { + def, bypass Dialer + + bypassNetworks []*net.IPNet + bypassIPs []net.IP + bypassZones []string + bypassHosts []string +} + +// NewPerHost returns a PerHost Dialer that directs connections to either +// defaultDialer or bypass, depending on whether the connection matches one of +// the configured rules. +func NewPerHost(defaultDialer, bypass Dialer) *PerHost { + return &PerHost{ + def: defaultDialer, + bypass: bypass, + } +} + +// Dial connects to the address addr on the given network through either +// defaultDialer or bypass. +func (p *PerHost) Dial(network, addr string) (c net.Conn, err error) { + host, _, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + + return p.dialerForRequest(host).Dial(network, addr) +} + +func (p *PerHost) dialerForRequest(host string) Dialer { + if ip := net.ParseIP(host); ip != nil { + for _, net := range p.bypassNetworks { + if net.Contains(ip) { + return p.bypass + } + } + for _, bypassIP := range p.bypassIPs { + if bypassIP.Equal(ip) { + return p.bypass + } + } + return p.def + } + + for _, zone := range p.bypassZones { + if strings.HasSuffix(host, zone) { + return p.bypass + } + if host == zone[1:] { + // For a zone "example.com", we match "example.com" + // too. + return p.bypass + } + } + for _, bypassHost := range p.bypassHosts { + if bypassHost == host { + return p.bypass + } + } + return p.def +} + +// AddFromString parses a string that contains comma-separated values +// specifying hosts that should use the bypass proxy. Each value is either an +// IP address, a CIDR range, a zone (*.example.com) or a hostname +// (localhost). A best effort is made to parse the string and errors are +// ignored. +func (p *PerHost) AddFromString(s string) { + hosts := strings.Split(s, ",") + for _, host := range hosts { + host = strings.TrimSpace(host) + if len(host) == 0 { + continue + } + if strings.Contains(host, "/") { + // We assume that it's a CIDR address like 127.0.0.0/8 + if _, net, err := net.ParseCIDR(host); err == nil { + p.AddNetwork(net) + } + continue + } + if ip := net.ParseIP(host); ip != nil { + p.AddIP(ip) + continue + } + if strings.HasPrefix(host, "*.") { + p.AddZone(host[1:]) + continue + } + p.AddHost(host) + } +} + +// AddIP specifies an IP address that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match an IP. +func (p *PerHost) AddIP(ip net.IP) { + p.bypassIPs = append(p.bypassIPs, ip) +} + +// AddNetwork specifies an IP range that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match. +func (p *PerHost) AddNetwork(net *net.IPNet) { + p.bypassNetworks = append(p.bypassNetworks, net) +} + +// AddZone specifies a DNS suffix that will use the bypass proxy. A zone of +// "example.com" matches "example.com" and all of its subdomains. +func (p *PerHost) AddZone(zone string) { + if strings.HasSuffix(zone, ".") { + zone = zone[:len(zone)-1] + } + if !strings.HasPrefix(zone, ".") { + zone = "." + zone + } + p.bypassZones = append(p.bypassZones, zone) +} + +// AddHost specifies a hostname that will use the bypass proxy. +func (p *PerHost) AddHost(host string) { + if strings.HasSuffix(host, ".") { + host = host[:len(host)-1] + } + p.bypassHosts = append(p.bypassHosts, host) +} diff --git a/vendor/golang.org/x/net/proxy/per_host_test.go b/vendor/golang.org/x/net/proxy/per_host_test.go new file mode 100644 index 0000000..a7d8095 --- /dev/null +++ b/vendor/golang.org/x/net/proxy/per_host_test.go @@ -0,0 +1,55 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "errors" + "net" + "reflect" + "testing" +) + +type recordingProxy struct { + addrs []string +} + +func (r *recordingProxy) Dial(network, addr string) (net.Conn, error) { + r.addrs = append(r.addrs, addr) + return nil, errors.New("recordingProxy") +} + +func TestPerHost(t *testing.T) { + var def, bypass recordingProxy + perHost := NewPerHost(&def, &bypass) + perHost.AddFromString("localhost,*.zone,127.0.0.1,10.0.0.1/8,1000::/16") + + expectedDef := []string{ + "example.com:123", + "1.2.3.4:123", + "[1001::]:123", + } + expectedBypass := []string{ + "localhost:123", + "zone:123", + "foo.zone:123", + "127.0.0.1:123", + "10.1.2.3:123", + "[1000::]:123", + } + + for _, addr := range expectedDef { + perHost.Dial("tcp", addr) + } + for _, addr := range expectedBypass { + perHost.Dial("tcp", addr) + } + + if !reflect.DeepEqual(expectedDef, def.addrs) { + t.Errorf("Hosts which went to the default proxy didn't match. Got %v, want %v", def.addrs, expectedDef) + } + if !reflect.DeepEqual(expectedBypass, bypass.addrs) { + t.Errorf("Hosts which went to the bypass proxy didn't match. Got %v, want %v", bypass.addrs, expectedBypass) + } +} diff --git a/vendor/golang.org/x/net/proxy/proxy.go b/vendor/golang.org/x/net/proxy/proxy.go new file mode 100644 index 0000000..78a8b7b --- /dev/null +++ b/vendor/golang.org/x/net/proxy/proxy.go @@ -0,0 +1,94 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package proxy provides support for a variety of protocols to proxy network +// data. +package proxy // import "golang.org/x/net/proxy" + +import ( + "errors" + "net" + "net/url" + "os" +) + +// A Dialer is a means to establish a connection. +type Dialer interface { + // Dial connects to the given address via the proxy. + Dial(network, addr string) (c net.Conn, err error) +} + +// Auth contains authentication parameters that specific Dialers may require. +type Auth struct { + User, Password string +} + +// FromEnvironment returns the dialer specified by the proxy related variables in +// the environment. +func FromEnvironment() Dialer { + allProxy := os.Getenv("all_proxy") + if len(allProxy) == 0 { + return Direct + } + + proxyURL, err := url.Parse(allProxy) + if err != nil { + return Direct + } + proxy, err := FromURL(proxyURL, Direct) + if err != nil { + return Direct + } + + noProxy := os.Getenv("no_proxy") + if len(noProxy) == 0 { + return proxy + } + + perHost := NewPerHost(proxy, Direct) + perHost.AddFromString(noProxy) + return perHost +} + +// proxySchemes is a map from URL schemes to a function that creates a Dialer +// from a URL with such a scheme. +var proxySchemes map[string]func(*url.URL, Dialer) (Dialer, error) + +// RegisterDialerType takes a URL scheme and a function to generate Dialers from +// a URL with that scheme and a forwarding Dialer. Registered schemes are used +// by FromURL. +func RegisterDialerType(scheme string, f func(*url.URL, Dialer) (Dialer, error)) { + if proxySchemes == nil { + proxySchemes = make(map[string]func(*url.URL, Dialer) (Dialer, error)) + } + proxySchemes[scheme] = f +} + +// FromURL returns a Dialer given a URL specification and an underlying +// Dialer for it to make network requests. +func FromURL(u *url.URL, forward Dialer) (Dialer, error) { + var auth *Auth + if u.User != nil { + auth = new(Auth) + auth.User = u.User.Username() + if p, ok := u.User.Password(); ok { + auth.Password = p + } + } + + switch u.Scheme { + case "socks5": + return SOCKS5("tcp", u.Host, auth, forward) + } + + // If the scheme doesn't match any of the built-in schemes, see if it + // was registered by another package. + if proxySchemes != nil { + if f, ok := proxySchemes[u.Scheme]; ok { + return f(u, forward) + } + } + + return nil, errors.New("proxy: unknown scheme: " + u.Scheme) +} diff --git a/vendor/golang.org/x/net/proxy/proxy_test.go b/vendor/golang.org/x/net/proxy/proxy_test.go new file mode 100644 index 0000000..c19a5c0 --- /dev/null +++ b/vendor/golang.org/x/net/proxy/proxy_test.go @@ -0,0 +1,142 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "io" + "net" + "net/url" + "strconv" + "sync" + "testing" +) + +func TestFromURL(t *testing.T) { + endSystem, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("net.Listen failed: %v", err) + } + defer endSystem.Close() + gateway, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("net.Listen failed: %v", err) + } + defer gateway.Close() + + var wg sync.WaitGroup + wg.Add(1) + go socks5Gateway(t, gateway, endSystem, socks5Domain, &wg) + + url, err := url.Parse("socks5://user:password@" + gateway.Addr().String()) + if err != nil { + t.Fatalf("url.Parse failed: %v", err) + } + proxy, err := FromURL(url, Direct) + if err != nil { + t.Fatalf("FromURL failed: %v", err) + } + _, port, err := net.SplitHostPort(endSystem.Addr().String()) + if err != nil { + t.Fatalf("net.SplitHostPort failed: %v", err) + } + if c, err := proxy.Dial("tcp", "localhost:"+port); err != nil { + t.Fatalf("FromURL.Dial failed: %v", err) + } else { + c.Close() + } + + wg.Wait() +} + +func TestSOCKS5(t *testing.T) { + endSystem, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("net.Listen failed: %v", err) + } + defer endSystem.Close() + gateway, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("net.Listen failed: %v", err) + } + defer gateway.Close() + + var wg sync.WaitGroup + wg.Add(1) + go socks5Gateway(t, gateway, endSystem, socks5IP4, &wg) + + proxy, err := SOCKS5("tcp", gateway.Addr().String(), nil, Direct) + if err != nil { + t.Fatalf("SOCKS5 failed: %v", err) + } + if c, err := proxy.Dial("tcp", endSystem.Addr().String()); err != nil { + t.Fatalf("SOCKS5.Dial failed: %v", err) + } else { + c.Close() + } + + wg.Wait() +} + +func socks5Gateway(t *testing.T, gateway, endSystem net.Listener, typ byte, wg *sync.WaitGroup) { + defer wg.Done() + + c, err := gateway.Accept() + if err != nil { + t.Errorf("net.Listener.Accept failed: %v", err) + return + } + defer c.Close() + + b := make([]byte, 32) + var n int + if typ == socks5Domain { + n = 4 + } else { + n = 3 + } + if _, err := io.ReadFull(c, b[:n]); err != nil { + t.Errorf("io.ReadFull failed: %v", err) + return + } + if _, err := c.Write([]byte{socks5Version, socks5AuthNone}); err != nil { + t.Errorf("net.Conn.Write failed: %v", err) + return + } + if typ == socks5Domain { + n = 16 + } else { + n = 10 + } + if _, err := io.ReadFull(c, b[:n]); err != nil { + t.Errorf("io.ReadFull failed: %v", err) + return + } + if b[0] != socks5Version || b[1] != socks5Connect || b[2] != 0x00 || b[3] != typ { + t.Errorf("got an unexpected packet: %#02x %#02x %#02x %#02x", b[0], b[1], b[2], b[3]) + return + } + if typ == socks5Domain { + copy(b[:5], []byte{socks5Version, 0x00, 0x00, socks5Domain, 9}) + b = append(b, []byte("localhost")...) + } else { + copy(b[:4], []byte{socks5Version, 0x00, 0x00, socks5IP4}) + } + host, port, err := net.SplitHostPort(endSystem.Addr().String()) + if err != nil { + t.Errorf("net.SplitHostPort failed: %v", err) + return + } + b = append(b, []byte(net.ParseIP(host).To4())...) + p, err := strconv.Atoi(port) + if err != nil { + t.Errorf("strconv.Atoi failed: %v", err) + return + } + b = append(b, []byte{byte(p >> 8), byte(p)}...) + if _, err := c.Write(b); err != nil { + t.Errorf("net.Conn.Write failed: %v", err) + return + } +} diff --git a/vendor/golang.org/x/net/proxy/socks5.go b/vendor/golang.org/x/net/proxy/socks5.go new file mode 100644 index 0000000..973f57f --- /dev/null +++ b/vendor/golang.org/x/net/proxy/socks5.go @@ -0,0 +1,213 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "errors" + "io" + "net" + "strconv" +) + +// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given address +// with an optional username and password. See RFC 1928. +func SOCKS5(network, addr string, auth *Auth, forward Dialer) (Dialer, error) { + s := &socks5{ + network: network, + addr: addr, + forward: forward, + } + if auth != nil { + s.user = auth.User + s.password = auth.Password + } + + return s, nil +} + +type socks5 struct { + user, password string + network, addr string + forward Dialer +} + +const socks5Version = 5 + +const ( + socks5AuthNone = 0 + socks5AuthPassword = 2 +) + +const socks5Connect = 1 + +const ( + socks5IP4 = 1 + socks5Domain = 3 + socks5IP6 = 4 +) + +var socks5Errors = []string{ + "", + "general failure", + "connection forbidden", + "network unreachable", + "host unreachable", + "connection refused", + "TTL expired", + "command not supported", + "address type not supported", +} + +// Dial connects to the address addr on the network net via the SOCKS5 proxy. +func (s *socks5) Dial(network, addr string) (net.Conn, error) { + switch network { + case "tcp", "tcp6", "tcp4": + default: + return nil, errors.New("proxy: no support for SOCKS5 proxy connections of type " + network) + } + + conn, err := s.forward.Dial(s.network, s.addr) + if err != nil { + return nil, err + } + if err := s.connect(conn, addr); err != nil { + conn.Close() + return nil, err + } + return conn, nil +} + +// connect takes an existing connection to a socks5 proxy server, +// and commands the server to extend that connection to target, +// which must be a canonical address with a host and port. +func (s *socks5) connect(conn net.Conn, target string) error { + host, portStr, err := net.SplitHostPort(target) + if err != nil { + return err + } + + port, err := strconv.Atoi(portStr) + if err != nil { + return errors.New("proxy: failed to parse port number: " + portStr) + } + if port < 1 || port > 0xffff { + return errors.New("proxy: port number out of range: " + portStr) + } + + // the size here is just an estimate + buf := make([]byte, 0, 6+len(host)) + + buf = append(buf, socks5Version) + if len(s.user) > 0 && len(s.user) < 256 && len(s.password) < 256 { + buf = append(buf, 2 /* num auth methods */, socks5AuthNone, socks5AuthPassword) + } else { + buf = append(buf, 1 /* num auth methods */, socks5AuthNone) + } + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + if buf[0] != 5 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0]))) + } + if buf[1] == 0xff { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication") + } + + if buf[1] == socks5AuthPassword { + buf = buf[:0] + buf = append(buf, 1 /* password protocol version */) + buf = append(buf, uint8(len(s.user))) + buf = append(buf, s.user...) + buf = append(buf, uint8(len(s.password))) + buf = append(buf, s.password...) + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if buf[1] != 0 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password") + } + } + + buf = buf[:0] + buf = append(buf, socks5Version, socks5Connect, 0 /* reserved */) + + if ip := net.ParseIP(host); ip != nil { + if ip4 := ip.To4(); ip4 != nil { + buf = append(buf, socks5IP4) + ip = ip4 + } else { + buf = append(buf, socks5IP6) + } + buf = append(buf, ip...) + } else { + if len(host) > 255 { + return errors.New("proxy: destination hostname too long: " + host) + } + buf = append(buf, socks5Domain) + buf = append(buf, byte(len(host))) + buf = append(buf, host...) + } + buf = append(buf, byte(port>>8), byte(port)) + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:4]); err != nil { + return errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + failure := "unknown error" + if int(buf[1]) < len(socks5Errors) { + failure = socks5Errors[buf[1]] + } + + if len(failure) > 0 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure) + } + + bytesToDiscard := 0 + switch buf[3] { + case socks5IP4: + bytesToDiscard = net.IPv4len + case socks5IP6: + bytesToDiscard = net.IPv6len + case socks5Domain: + _, err := io.ReadFull(conn, buf[:1]) + if err != nil { + return errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + bytesToDiscard = int(buf[0]) + default: + return errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr) + } + + if cap(buf) < bytesToDiscard { + buf = make([]byte, bytesToDiscard) + } else { + buf = buf[:bytesToDiscard] + } + if _, err := io.ReadFull(conn, buf); err != nil { + return errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + // Also need to discard the port number + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + return nil +} diff --git a/vendor/golang.org/x/net/publicsuffix/gen.go b/vendor/golang.org/x/net/publicsuffix/gen.go new file mode 100644 index 0000000..a2d4995 --- /dev/null +++ b/vendor/golang.org/x/net/publicsuffix/gen.go @@ -0,0 +1,713 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This program generates table.go and table_test.go based on the authoritative +// public suffix list at https://publicsuffix.org/list/effective_tld_names.dat +// +// The version is derived from +// https://api.github.com/repos/publicsuffix/list/commits?path=public_suffix_list.dat +// and a human-readable form is at +// https://github.com/publicsuffix/list/commits/master/public_suffix_list.dat +// +// To fetch a particular git revision, such as 5c70ccd250, pass +// -url "https://raw.githubusercontent.com/publicsuffix/list/5c70ccd250/public_suffix_list.dat" +// and -version "an explicit version string". + +import ( + "bufio" + "bytes" + "flag" + "fmt" + "go/format" + "io" + "io/ioutil" + "net/http" + "os" + "regexp" + "sort" + "strings" + + "golang.org/x/net/idna" +) + +const ( + // These sum of these four values must be no greater than 32. + nodesBitsChildren = 9 + nodesBitsICANN = 1 + nodesBitsTextOffset = 15 + nodesBitsTextLength = 6 + + // These sum of these four values must be no greater than 32. + childrenBitsWildcard = 1 + childrenBitsNodeType = 2 + childrenBitsHi = 14 + childrenBitsLo = 14 +) + +var ( + maxChildren int + maxTextOffset int + maxTextLength int + maxHi uint32 + maxLo uint32 +) + +func max(a, b int) int { + if a < b { + return b + } + return a +} + +func u32max(a, b uint32) uint32 { + if a < b { + return b + } + return a +} + +const ( + nodeTypeNormal = 0 + nodeTypeException = 1 + nodeTypeParentOnly = 2 + numNodeType = 3 +) + +func nodeTypeStr(n int) string { + switch n { + case nodeTypeNormal: + return "+" + case nodeTypeException: + return "!" + case nodeTypeParentOnly: + return "o" + } + panic("unreachable") +} + +const ( + defaultURL = "https://publicsuffix.org/list/effective_tld_names.dat" + gitCommitURL = "https://api.github.com/repos/publicsuffix/list/commits?path=public_suffix_list.dat" +) + +var ( + labelEncoding = map[string]uint32{} + labelsList = []string{} + labelsMap = map[string]bool{} + rules = []string{} + + // validSuffixRE is used to check that the entries in the public suffix + // list are in canonical form (after Punycode encoding). Specifically, + // capital letters are not allowed. + validSuffixRE = regexp.MustCompile(`^[a-z0-9_\!\*\-\.]+$`) + + shaRE = regexp.MustCompile(`"sha":"([^"]+)"`) + dateRE = regexp.MustCompile(`"committer":{[^{]+"date":"([^"]+)"`) + + comments = flag.Bool("comments", false, "generate table.go comments, for debugging") + subset = flag.Bool("subset", false, "generate only a subset of the full table, for debugging") + url = flag.String("url", defaultURL, "URL of the publicsuffix.org list. If empty, stdin is read instead") + v = flag.Bool("v", false, "verbose output (to stderr)") + version = flag.String("version", "", "the effective_tld_names.dat version") +) + +func main() { + if err := main1(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func main1() error { + flag.Parse() + if nodesBitsTextLength+nodesBitsTextOffset+nodesBitsICANN+nodesBitsChildren > 32 { + return fmt.Errorf("not enough bits to encode the nodes table") + } + if childrenBitsLo+childrenBitsHi+childrenBitsNodeType+childrenBitsWildcard > 32 { + return fmt.Errorf("not enough bits to encode the children table") + } + if *version == "" { + if *url != defaultURL { + return fmt.Errorf("-version was not specified, and the -url is not the default one") + } + sha, date, err := gitCommit() + if err != nil { + return err + } + *version = fmt.Sprintf("publicsuffix.org's public_suffix_list.dat, git revision %s (%s)", sha, date) + } + var r io.Reader = os.Stdin + if *url != "" { + res, err := http.Get(*url) + if err != nil { + return err + } + if res.StatusCode != http.StatusOK { + return fmt.Errorf("bad GET status for %s: %d", *url, res.Status) + } + r = res.Body + defer res.Body.Close() + } + + var root node + icann := false + br := bufio.NewReader(r) + for { + s, err := br.ReadString('\n') + if err != nil { + if err == io.EOF { + break + } + return err + } + s = strings.TrimSpace(s) + if strings.Contains(s, "BEGIN ICANN DOMAINS") { + icann = true + continue + } + if strings.Contains(s, "END ICANN DOMAINS") { + icann = false + continue + } + if s == "" || strings.HasPrefix(s, "//") { + continue + } + s, err = idna.ToASCII(s) + if err != nil { + return err + } + if !validSuffixRE.MatchString(s) { + return fmt.Errorf("bad publicsuffix.org list data: %q", s) + } + + if *subset { + switch { + case s == "ac.jp" || strings.HasSuffix(s, ".ac.jp"): + case s == "ak.us" || strings.HasSuffix(s, ".ak.us"): + case s == "ao" || strings.HasSuffix(s, ".ao"): + case s == "ar" || strings.HasSuffix(s, ".ar"): + case s == "arpa" || strings.HasSuffix(s, ".arpa"): + case s == "cy" || strings.HasSuffix(s, ".cy"): + case s == "dyndns.org" || strings.HasSuffix(s, ".dyndns.org"): + case s == "jp": + case s == "kobe.jp" || strings.HasSuffix(s, ".kobe.jp"): + case s == "kyoto.jp" || strings.HasSuffix(s, ".kyoto.jp"): + case s == "om" || strings.HasSuffix(s, ".om"): + case s == "uk" || strings.HasSuffix(s, ".uk"): + case s == "uk.com" || strings.HasSuffix(s, ".uk.com"): + case s == "tw" || strings.HasSuffix(s, ".tw"): + case s == "zw" || strings.HasSuffix(s, ".zw"): + case s == "xn--p1ai" || strings.HasSuffix(s, ".xn--p1ai"): + // xn--p1ai is Russian-Cyrillic "рф". + default: + continue + } + } + + rules = append(rules, s) + + nt, wildcard := nodeTypeNormal, false + switch { + case strings.HasPrefix(s, "*."): + s, nt = s[2:], nodeTypeParentOnly + wildcard = true + case strings.HasPrefix(s, "!"): + s, nt = s[1:], nodeTypeException + } + labels := strings.Split(s, ".") + for n, i := &root, len(labels)-1; i >= 0; i-- { + label := labels[i] + n = n.child(label) + if i == 0 { + if nt != nodeTypeParentOnly && n.nodeType == nodeTypeParentOnly { + n.nodeType = nt + } + n.icann = n.icann && icann + n.wildcard = n.wildcard || wildcard + } + labelsMap[label] = true + } + } + labelsList = make([]string, 0, len(labelsMap)) + for label := range labelsMap { + labelsList = append(labelsList, label) + } + sort.Strings(labelsList) + + if err := generate(printReal, &root, "table.go"); err != nil { + return err + } + if err := generate(printTest, &root, "table_test.go"); err != nil { + return err + } + return nil +} + +func generate(p func(io.Writer, *node) error, root *node, filename string) error { + buf := new(bytes.Buffer) + if err := p(buf, root); err != nil { + return err + } + b, err := format.Source(buf.Bytes()) + if err != nil { + return err + } + return ioutil.WriteFile(filename, b, 0644) +} + +func gitCommit() (sha, date string, retErr error) { + res, err := http.Get(gitCommitURL) + if err != nil { + return "", "", err + } + if res.StatusCode != http.StatusOK { + return "", "", fmt.Errorf("bad GET status for %s: %d", gitCommitURL, res.Status) + } + defer res.Body.Close() + b, err := ioutil.ReadAll(res.Body) + if err != nil { + return "", "", err + } + if m := shaRE.FindSubmatch(b); m != nil { + sha = string(m[1]) + } + if m := dateRE.FindSubmatch(b); m != nil { + date = string(m[1]) + } + if sha == "" || date == "" { + retErr = fmt.Errorf("could not find commit SHA and date in %s", gitCommitURL) + } + return sha, date, retErr +} + +func printTest(w io.Writer, n *node) error { + fmt.Fprintf(w, "// generated by go run gen.go; DO NOT EDIT\n\n") + fmt.Fprintf(w, "package publicsuffix\n\nvar rules = [...]string{\n") + for _, rule := range rules { + fmt.Fprintf(w, "%q,\n", rule) + } + fmt.Fprintf(w, "}\n\nvar nodeLabels = [...]string{\n") + if err := n.walk(w, printNodeLabel); err != nil { + return err + } + fmt.Fprintf(w, "}\n") + return nil +} + +func printReal(w io.Writer, n *node) error { + const header = `// generated by go run gen.go; DO NOT EDIT + +package publicsuffix + +const version = %q + +const ( + nodesBitsChildren = %d + nodesBitsICANN = %d + nodesBitsTextOffset = %d + nodesBitsTextLength = %d + + childrenBitsWildcard = %d + childrenBitsNodeType = %d + childrenBitsHi = %d + childrenBitsLo = %d +) + +const ( + nodeTypeNormal = %d + nodeTypeException = %d + nodeTypeParentOnly = %d +) + +// numTLD is the number of top level domains. +const numTLD = %d + +` + fmt.Fprintf(w, header, *version, + nodesBitsChildren, nodesBitsICANN, nodesBitsTextOffset, nodesBitsTextLength, + childrenBitsWildcard, childrenBitsNodeType, childrenBitsHi, childrenBitsLo, + nodeTypeNormal, nodeTypeException, nodeTypeParentOnly, len(n.children)) + + text := combineText(labelsList) + if text == "" { + return fmt.Errorf("internal error: makeText returned no text") + } + for _, label := range labelsList { + offset, length := strings.Index(text, label), len(label) + if offset < 0 { + return fmt.Errorf("internal error: could not find %q in text %q", label, text) + } + maxTextOffset, maxTextLength = max(maxTextOffset, offset), max(maxTextLength, length) + if offset >= 1<= 1< 64 { + n, plus = 64, " +" + } + fmt.Fprintf(w, "%q%s\n", text[:n], plus) + text = text[n:] + } + + if err := n.walk(w, assignIndexes); err != nil { + return err + } + + fmt.Fprintf(w, ` + +// nodes is the list of nodes. Each node is represented as a uint32, which +// encodes the node's children, wildcard bit and node type (as an index into +// the children array), ICANN bit and text. +// +// If the table was generated with the -comments flag, there is a //-comment +// after each node's data. In it is the nodes-array indexes of the children, +// formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The +// nodeType is printed as + for normal, ! for exception, and o for parent-only +// nodes that have children but don't match a domain label in their own right. +// An I denotes an ICANN domain. +// +// The layout within the uint32, from MSB to LSB, is: +// [%2d bits] unused +// [%2d bits] children index +// [%2d bits] ICANN bit +// [%2d bits] text index +// [%2d bits] text length +var nodes = [...]uint32{ +`, + 32-nodesBitsChildren-nodesBitsICANN-nodesBitsTextOffset-nodesBitsTextLength, + nodesBitsChildren, nodesBitsICANN, nodesBitsTextOffset, nodesBitsTextLength) + if err := n.walk(w, printNode); err != nil { + return err + } + fmt.Fprintf(w, `} + +// children is the list of nodes' children, the parent's wildcard bit and the +// parent's node type. If a node has no children then their children index +// will be in the range [0, 6), depending on the wildcard bit and node type. +// +// The layout within the uint32, from MSB to LSB, is: +// [%2d bits] unused +// [%2d bits] wildcard bit +// [%2d bits] node type +// [%2d bits] high nodes index (exclusive) of children +// [%2d bits] low nodes index (inclusive) of children +var children=[...]uint32{ +`, + 32-childrenBitsWildcard-childrenBitsNodeType-childrenBitsHi-childrenBitsLo, + childrenBitsWildcard, childrenBitsNodeType, childrenBitsHi, childrenBitsLo) + for i, c := range childrenEncoding { + s := "---------------" + lo := c & (1<> childrenBitsLo) & (1<>(childrenBitsLo+childrenBitsHi)) & (1<>(childrenBitsLo+childrenBitsHi+childrenBitsNodeType) != 0 + if *comments { + fmt.Fprintf(w, "0x%08x, // c0x%04x (%s)%s %s\n", + c, i, s, wildcardStr(wildcard), nodeTypeStr(nodeType)) + } else { + fmt.Fprintf(w, "0x%x,\n", c) + } + } + fmt.Fprintf(w, "}\n\n") + fmt.Fprintf(w, "// max children %d (capacity %d)\n", maxChildren, 1<= 1<= 1<= 1< 0 && ss[0] == "" { + ss = ss[1:] + } + return ss +} + +// crush combines a list of strings, taking advantage of overlaps. It returns a +// single string that contains each input string as a substring. +func crush(ss []string) string { + maxLabelLen := 0 + for _, s := range ss { + if maxLabelLen < len(s) { + maxLabelLen = len(s) + } + } + + for prefixLen := maxLabelLen; prefixLen > 0; prefixLen-- { + prefixes := makePrefixMap(ss, prefixLen) + for i, s := range ss { + if len(s) <= prefixLen { + continue + } + mergeLabel(ss, i, prefixLen, prefixes) + } + } + + return strings.Join(ss, "") +} + +// mergeLabel merges the label at ss[i] with the first available matching label +// in prefixMap, where the last "prefixLen" characters in ss[i] match the first +// "prefixLen" characters in the matching label. +// It will merge ss[i] repeatedly until no more matches are available. +// All matching labels merged into ss[i] are replaced by "". +func mergeLabel(ss []string, i, prefixLen int, prefixes prefixMap) { + s := ss[i] + suffix := s[len(s)-prefixLen:] + for _, j := range prefixes[suffix] { + // Empty strings mean "already used." Also avoid merging with self. + if ss[j] == "" || i == j { + continue + } + if *v { + fmt.Fprintf(os.Stderr, "%d-length overlap at (%4d,%4d): %q and %q share %q\n", + prefixLen, i, j, ss[i], ss[j], suffix) + } + ss[i] += ss[j][prefixLen:] + ss[j] = "" + // ss[i] has a new suffix, so merge again if possible. + // Note: we only have to merge again at the same prefix length. Shorter + // prefix lengths will be handled in the next iteration of crush's for loop. + // Can there be matches for longer prefix lengths, introduced by the merge? + // I believe that any such matches would by necessity have been eliminated + // during substring removal or merged at a higher prefix length. For + // instance, in crush("abc", "cde", "bcdef"), combining "abc" and "cde" + // would yield "abcde", which could be merged with "bcdef." However, in + // practice "cde" would already have been elimintated by removeSubstrings. + mergeLabel(ss, i, prefixLen, prefixes) + return + } +} + +// prefixMap maps from a prefix to a list of strings containing that prefix. The +// list of strings is represented as indexes into a slice of strings stored +// elsewhere. +type prefixMap map[string][]int + +// makePrefixMap constructs a prefixMap from a slice of strings. +func makePrefixMap(ss []string, prefixLen int) prefixMap { + prefixes := make(prefixMap) + for i, s := range ss { + // We use < rather than <= because if a label matches on a prefix equal to + // its full length, that's actually a substring match handled by + // removeSubstrings. + if prefixLen < len(s) { + prefix := s[:prefixLen] + prefixes[prefix] = append(prefixes[prefix], i) + } + } + + return prefixes +} diff --git a/vendor/golang.org/x/net/publicsuffix/list.go b/vendor/golang.org/x/net/publicsuffix/list.go new file mode 100644 index 0000000..8bbf3bc --- /dev/null +++ b/vendor/golang.org/x/net/publicsuffix/list.go @@ -0,0 +1,135 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package publicsuffix provides a public suffix list based on data from +// http://publicsuffix.org/. A public suffix is one under which Internet users +// can directly register names. +package publicsuffix // import "golang.org/x/net/publicsuffix" + +// TODO: specify case sensitivity and leading/trailing dot behavior for +// func PublicSuffix and func EffectiveTLDPlusOne. + +import ( + "fmt" + "net/http/cookiejar" + "strings" +) + +// List implements the cookiejar.PublicSuffixList interface by calling the +// PublicSuffix function. +var List cookiejar.PublicSuffixList = list{} + +type list struct{} + +func (list) PublicSuffix(domain string) string { + ps, _ := PublicSuffix(domain) + return ps +} + +func (list) String() string { + return version +} + +// PublicSuffix returns the public suffix of the domain using a copy of the +// publicsuffix.org database compiled into the library. +// +// icann is whether the public suffix is managed by the Internet Corporation +// for Assigned Names and Numbers. If not, the public suffix is privately +// managed. For example, foo.org and foo.co.uk are ICANN domains, +// foo.dyndns.org and foo.blogspot.co.uk are private domains. +// +// Use cases for distinguishing ICANN domains like foo.com from private +// domains like foo.appspot.com can be found at +// https://wiki.mozilla.org/Public_Suffix_List/Use_Cases +func PublicSuffix(domain string) (publicSuffix string, icann bool) { + lo, hi := uint32(0), uint32(numTLD) + s, suffix, wildcard := domain, len(domain), false +loop: + for { + dot := strings.LastIndex(s, ".") + if wildcard { + suffix = 1 + dot + } + if lo == hi { + break + } + f := find(s[1+dot:], lo, hi) + if f == notFound { + break + } + + u := nodes[f] >> (nodesBitsTextOffset + nodesBitsTextLength) + icann = u&(1<>= nodesBitsICANN + u = children[u&(1<>= childrenBitsLo + hi = u & (1<>= childrenBitsHi + switch u & (1<>= childrenBitsNodeType + wildcard = u&(1<>= nodesBitsTextLength + offset := x & (1< len(b[j]) +} + +// eTLDPlusOneTestCases come from +// https://github.com/publicsuffix/list/blob/master/tests/test_psl.txt +var eTLDPlusOneTestCases = []struct { + domain, want string +}{ + // Empty input. + {"", ""}, + // Unlisted TLD. + {"example", ""}, + {"example.example", "example.example"}, + {"b.example.example", "example.example"}, + {"a.b.example.example", "example.example"}, + // TLD with only 1 rule. + {"biz", ""}, + {"domain.biz", "domain.biz"}, + {"b.domain.biz", "domain.biz"}, + {"a.b.domain.biz", "domain.biz"}, + // TLD with some 2-level rules. + {"com", ""}, + {"example.com", "example.com"}, + {"b.example.com", "example.com"}, + {"a.b.example.com", "example.com"}, + {"uk.com", ""}, + {"example.uk.com", "example.uk.com"}, + {"b.example.uk.com", "example.uk.com"}, + {"a.b.example.uk.com", "example.uk.com"}, + {"test.ac", "test.ac"}, + // TLD with only 1 (wildcard) rule. + {"mm", ""}, + {"c.mm", ""}, + {"b.c.mm", "b.c.mm"}, + {"a.b.c.mm", "b.c.mm"}, + // More complex TLD. + {"jp", ""}, + {"test.jp", "test.jp"}, + {"www.test.jp", "test.jp"}, + {"ac.jp", ""}, + {"test.ac.jp", "test.ac.jp"}, + {"www.test.ac.jp", "test.ac.jp"}, + {"kyoto.jp", ""}, + {"test.kyoto.jp", "test.kyoto.jp"}, + {"ide.kyoto.jp", ""}, + {"b.ide.kyoto.jp", "b.ide.kyoto.jp"}, + {"a.b.ide.kyoto.jp", "b.ide.kyoto.jp"}, + {"c.kobe.jp", ""}, + {"b.c.kobe.jp", "b.c.kobe.jp"}, + {"a.b.c.kobe.jp", "b.c.kobe.jp"}, + {"city.kobe.jp", "city.kobe.jp"}, + {"www.city.kobe.jp", "city.kobe.jp"}, + // TLD with a wildcard rule and exceptions. + {"ck", ""}, + {"test.ck", ""}, + {"b.test.ck", "b.test.ck"}, + {"a.b.test.ck", "b.test.ck"}, + {"www.ck", "www.ck"}, + {"www.www.ck", "www.ck"}, + // US K12. + {"us", ""}, + {"test.us", "test.us"}, + {"www.test.us", "test.us"}, + {"ak.us", ""}, + {"test.ak.us", "test.ak.us"}, + {"www.test.ak.us", "test.ak.us"}, + {"k12.ak.us", ""}, + {"test.k12.ak.us", "test.k12.ak.us"}, + {"www.test.k12.ak.us", "test.k12.ak.us"}, + // Punycoded IDN labels + {"xn--85x722f.com.cn", "xn--85x722f.com.cn"}, + {"xn--85x722f.xn--55qx5d.cn", "xn--85x722f.xn--55qx5d.cn"}, + {"www.xn--85x722f.xn--55qx5d.cn", "xn--85x722f.xn--55qx5d.cn"}, + {"shishi.xn--55qx5d.cn", "shishi.xn--55qx5d.cn"}, + {"xn--55qx5d.cn", ""}, + {"xn--85x722f.xn--fiqs8s", "xn--85x722f.xn--fiqs8s"}, + {"www.xn--85x722f.xn--fiqs8s", "xn--85x722f.xn--fiqs8s"}, + {"shishi.xn--fiqs8s", "shishi.xn--fiqs8s"}, + {"xn--fiqs8s", ""}, +} + +func TestEffectiveTLDPlusOne(t *testing.T) { + for _, tc := range eTLDPlusOneTestCases { + got, _ := EffectiveTLDPlusOne(tc.domain) + if got != tc.want { + t.Errorf("%q: got %q, want %q", tc.domain, got, tc.want) + } + } +} diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go new file mode 100644 index 0000000..5db1e69 --- /dev/null +++ b/vendor/golang.org/x/net/publicsuffix/table.go @@ -0,0 +1,9093 @@ +// generated by go run gen.go; DO NOT EDIT + +package publicsuffix + +const version = "publicsuffix.org's public_suffix_list.dat, git revision 45a2bf8ef3e22000fbe4bfa5f9252db41d777001 (2017-01-18T01:04:06Z)" + +const ( + nodesBitsChildren = 9 + nodesBitsICANN = 1 + nodesBitsTextOffset = 15 + nodesBitsTextLength = 6 + + childrenBitsWildcard = 1 + childrenBitsNodeType = 2 + childrenBitsHi = 14 + childrenBitsLo = 14 +) + +const ( + nodeTypeNormal = 0 + nodeTypeException = 1 + nodeTypeParentOnly = 2 +) + +// numTLD is the number of top level domains. +const numTLD = 1554 + +// Text is the combined text of all labels. +const text = "bikedagestangeorgeorgiaxagrocerybnikahokutobishimaizuruhreportar" + + "nobrzegyptianaturalhistorymuseumcentereviewskrakoweddinggfarmers" + + "einexus-2bilbaogakievenesalangenikiiyamanouchikuhokuryugasakitau" + + "rayasudabillustrationikkoebenhavnikolaevennodessagamiharabiomuta" + + "shinainfinitintuitattoolsztynsettlersalondonetskarpaczeladzjcbre" + + "mangerbirdartcenterprisesakikuchikuseikarugapartmentsaltdalimoli" + + "serniabirkenesoddtangenovaravennagasukeverbankaruizawabirthplace" + + "vje-og-hornnesalvadordalibabajddarchaeologyusuisserveexchangebja" + + "rkoyuufcfanikonantanangerbjerkreimbalsanagochihayaakasakawaharau" + + "malopolskanlandds3-us-west-1bjugninohekinannestadrangedalindasda" + + "burblockbusternidray-dnsupdaterbloombergbauerninomiyakonojosoyro" + + "rosalzburgjovikarumaifarmsteadraydnsamegawabloxcmsamnangerblueda" + + "ncebmoattachmentsamsclubindalindesnesamsungladell-ogliastraderbm" + + "sandvikcoromantovalle-d-aostatic-accessanfranciscofreakunemurora" + + "ngeiseiyoichiropracticasinordre-landrivelandrobaknoluoktabuseekl" + + "ogesurancertmgretachikawakkanaibetsubamericanfamilydscloudcontro" + + "lledekafjordrudunsangoppdalivornobmweirbnpparibaselburglassassin" + + "ationalheritagematsubarakawagoebnrwfarsundupontariobonnirasakinu" + + "yamashinashikitchenishiazainvestmentsanjournalismailillesandefjo" + + "rdurbanamexhibitionishigobookingliwicebootsannanishiharaboschaef" + + "flerdalomzaporizhzhegurinzais-a-bulls-fanishiizunazukis-a-candid" + + "atebostikasaokamiminersannohelplfinancialorenskoglobalashovhachi" + + "nohedmarkashibatakasakiyokawarabostonakijinsekikogentinglobodoes" + + "-itvedestrandurhamburglogowhalingloppenzaogashimadachicagoboatsa" + + "nokashiharabotanicalgardenishikatakayamatta-varjjataxihuanishika" + + "tsuragithubusercontentgoryuzawabotanicgardenishikawazukamitondab" + + "ayashiogamagoriziabotanybouncemerckmsdnipropetrovskjakdnepropetr" + + "ovskiervaapsteiermarkashiwarabounty-fullensakerrypropertiesantab" + + "arbaraboutiquebecngmbhartiffanybozentsujiiebradescorporationishi" + + "merabrandywinevalleybrasiliabresciabrindisibenikebristoloslocalh" + + "istoryggeelvinckashiwazakiyosatokashikiyosemitebritishcolumbialo" + + "wiezachpomorskienishinomiyashironobroadcastlefrakkestadvrcambrid" + + "gestonextdirectjeldsundvrdnsantacruzsantafedextraspacekitagataji" + + "rittogoldpoint2thisamitsukebroadwaybroke-itjmaxxxboxenapponazure" + + "-mobilebrokerbronnoysundwgminakamichiharabrothermesaverdeatnurem" + + "bergmodellingmxfinitybrowsersafetymarketsanukis-a-catererbrumund" + + "dalotenkawabrunelasticbeanstalkasukabedzin-the-bandaikawachinaga" + + "noharamcoalaskanittedallasalleasinglest-mon-blogueurovisionthewi" + + "fiat-band-campaniabrusselsaotomemergencyberlevagangaviikanonjis-" + + "a-celticsfanishinoomotegobruxellesapodlasiellakasamatsudovre-eik" + + "erbryanskjervoyagebrynewhampshirebungoonordlandyndns-at-workingg" + + "roupalacebuskerudinewjerseybuzenishinoshimattelefonicarbonia-igl" + + "esias-carboniaiglesiascarboniabuzzlgrimstadyndns-blogdnsapporobw" + + "hoswhokksundyndns-freebox-ostrowiecateringebuilderschmidtre-gaul" + + "dalottebzhitomirumalselvendrellottokonamegatakasugais-a-chefashi" + + "onishiokoppegardyndns-homednsardegnamsskoganeis-a-conservativefs" + + "nillfjordyndns-ipaleocondoshichinohealth-carereformitakeharaconf" + + "erenceconstructionconsuladoesntexistanbullensvanguardyndns-wikin" + + "dlegokasells-for-lessaudaconsultanthropologyconsultingvolluxuryc" + + "ontactoyookanmakiwakunigamifunecontemporaryarteducationalchikugo" + + "doharuovatoyosatoyakokonoecontractorskenconventureshinodesashibe" + + "tsuikinderoycookingchannelblagdenesnaaseralingenkainanaejrietisa" + + "latinabenonichernihivanovodkagoshimalvikasumigaurawa-mazowszexjc" + + "palermomahachijorpelandyndns-mailouvreisenishitosashimizunaminam" + + "iashigaracoolkuszkoladbrokesauheradyndns-workisboringrpamperedch" + + "efastlylbaltimore-og-romsdalwaysdatabaseballangenoamishirasatoch" + + "igiessenebakkeshibechambagriculturennebudejjudygarlandigitalavan" + + "genavigationavuotnaklodzkodairamusementarumizusawabruzzoologyeon" + + "gbuk12cooperaunitemasekatsushikabeeldengeluidyndns1copenhagencyc" + + "lopedichernivtsiciliacorsicagliarightathomeftpanamacorvettenriku" + + "zentakataitogliattiresavannahgacosenzaganquannakadomaritimekeepi" + + "ngatlantaijis-a-financialadvisor-aurdaluzerncosidnsfor-better-th" + + "anawawildlifedjeffersoncostumedio-campidano-mediocampidanomedioc" + + "ouchpotatofriesaves-the-whalessandria-trani-barletta-andriatrani" + + "barlettaandriacouncilvivano-frankivskatsuyamasfjordencouponsavon" + + "aplesaxocoursesbschokoladencq-acranbrookuwanalyticscholarshipsch" + + "oolcreditcardynnschulezajskydivingruecreditunioncremonashorokana" + + "iecrewilliamhillcricketrzyncrimeastcoastaldefencecrotonewyorkshi" + + "recipesaro-urbino-pesarourbinopesaromasvuotnaharimamurogawacrown" + + "providercrsvpanasonichernovtsykkylvenetogakushimotoganewportllig" + + "atjxn--0trq7p7nnishiwakis-a-cpadoval-daostavalleycruiseschwarzgw" + + "angjuegoshikiminokamoenairtraffichiryukyuragifuchungbukasuyaltak" + + "ashimaseratis-a-cubicle-slavellinowtvalleaostatoilowiczest-le-pa" + + "trondheimmobilienissandnessjoenissayokoshibahikariwanumatakazaki" + + "s-a-democratkmaxxn--11b4c3dyndns-office-on-the-webcampobassociat" + + "esardiniacryptonomichigangwoncuisinellahppiacenzakopanerairguard" + + "ynv6culturalcentertainmentoyotaris-a-geekgalaxycuneocupcakecxn--" + + "1ctwolominamatakkokaminokawanishiaizubangecymrussiacyonabarulsan" + + "doycyouthdfcbankaufenfiguerestaurantoyotomiyazakis-a-greenfilate" + + "liafilminamiawajikis-a-guruslivinghistoryfinalfinancefineartscie" + + "ntistoragefinlandfinnoyfirebaseapparliamentoyotsukaidownloadfire" + + "nzefirestonefirmdaleirfjordfishingolffanscjohnsonfitjarqhachioji" + + "yahikobeatscotlandfitnessettlementoyourafjalerflesbergushikamifu" + + "ranoshiroomuraflickragerotikakamigaharaflightscrapper-siteflirfl" + + "ogintogurafloraflorencefloridavvesiidazaifudaigojomedizinhistori" + + "schescrappingxn--1lqs71dfloristanohatakahamaniwakuratexascolipic" + + "enord-aurdalipayflorogerserveftparmaflowerservegame-serversaille" + + "servehalflifestyleflynnhubambleclercartoonartdecoldwarmiamibugat" + + "tipschlesisches3-us-west-2fndfoodnetworkshoppingfor-ourfor-somee" + + "thnologyfor-theaterforexrothruherecreationforgotdnservehttparoch" + + "erkasyno-dservehumourforli-cesena-forlicesenaforlikescandynamic-" + + "dnserveirchitachinakagawatchandclockaszubyforsaleirvikazoforsand" + + "asuoloftoystre-slidrettozawafortmissoulair-traffic-controlleyfor" + + "tworthachirogatakahatakaishimogosenforuminamibosogndalfosneserve" + + "minecraftozsdev-myqnapcloudcontrolappspotagerfotaruis-a-hard-wor" + + "kerfoxfordedyn-ip24freeboxoservemp3utilitiesquarezzoologicalvink" + + "lein-addrammenuernbergdyniabogadocscbnl-o-g-i-nativeamericananti" + + "ques3-ap-northeast-1kappchizippodhaleangaviikadenadexeterepbodyn" + + "athomebuilt3l3p0rtargets-itargiving12000emmafanconagawakayamadri" + + "dvagsoyericssonyoursidealerimo-i-ranaamesjevuemielno-ip6freemaso" + + "nryfreiburgfreightcminamidaitomangotsukisosakitagawafreseniuscou" + + "ntryestateofdelawaredstonefribourgfriuli-v-giuliafriuli-ve-giuli" + + "afriuli-vegiuliafriuli-venezia-giuliafriuli-veneziagiuliafriuli-" + + "vgiuliafriuliv-giuliafriulive-giuliafriulivegiuliafriulivenezia-" + + "giuliafriuliveneziagiuliafriulivgiuliafrlfroganservep2parservepi" + + "cservequakefrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azwinbana" + + "narepublicasadelamonedatsunanjoburgjerstadotsuruokakegawasnesodd" + + "enmarkhangelskiptveterinairealtychyattorneyagawalmartatamotors3-" + + "ap-south-1from-capebretonamiastapleservesarcasmatartanddesignfro" + + "m-collectionfrom-ctrani-andria-barletta-trani-andriafrom-dchitos" + + "etogitsuldalucaniafrom-defenseljordfrom-flanderservicesettsurgeo" + + "nshalloffamemorialfrom-gausdalfrom-higashiagatsumagoizumizakiraf" + + "rom-iafrom-idfrom-ilfrom-incheonfrom-ksevastopolefrom-kyowariasa" + + "hikawafrom-lajollamericanexpressexyfrom-mannortonsbergfrom-mdfro" + + "m-megurokunohealthcareersevenassisicilyfrom-midoris-a-hunterfrom" + + "-mnfrom-mochizukirkenesewindmillfrom-msfranziskanerdpolicefrom-m" + + "tnfrom-nchloefrom-ndfrom-nefrom-nhktraniandriabarlettatraniandri" + + "afrom-njelenia-gorafrom-nminamiechizenfrom-nvalled-aostavangerfr" + + "om-nyfrom-ohkurafrom-oketohmansionshangrilanciafrom-orfrom-pader" + + "bornfrom-pratohnoshoooshikamaishimodatextileitungsenfrom-ris-a-k" + + "nightpointtokaizukameokameyamatotakadafrom-schoenbrunnfrom-sdfro" + + "m-tnfrom-txn--1qqw23afrom-utazuerichardlillehammerfeste-ipartis-" + + "a-landscaperfrom-vaksdalfrom-vtranoyfrom-wafrom-wielunnerfrom-wv" + + "alledaostavernfrom-wyfrosinonefrostalowa-wolawafroyahababyglandf" + + "stcgroupartnersharis-a-lawyerfujiiderafujikawaguchikonefujiminoh" + + "tawaramotoineppubolognakanotoddenfujinomiyadafujiokayamanxn--2m4" + + "a15efujisatoshonairportland-4-salernoboribetsucksharpartshawaiij" + + "imarugame-hostrodawarafujisawafujishiroishidakabiratoridegreefuj" + + "itsurugashimamateramodalenfujixeroxn--30rr7yfujiyoshidafukayabea" + + "rdubaiduckdnshellaspeziafukuchiyamadafukudominichocolatelevision" + + "issedaluccapitalonewmexicoffeedbackplaneapplinzis-a-designerimar" + + "umorimachidafukuis-a-liberalfukumitsubishigakirovogradoyfukuokaz" + + "akiryuohadanotaireshimojis-a-libertarianfukuroishikarikaturindal" + + "fukusakisarazurewebsiteshikagamiishibukawafukuyamagatakaharustka" + + "noyakagefunabashiriuchinadafunagatakahashimamakishiwadafunahashi" + + "kamiamakusatsumasendaisennangonohejis-a-linux-useranishiaritabas" + + "hijonawatefundaciofuoiskujukuriyamaoris-a-llamarylandfuosskoczow" + + "indowshimokawafurnituredumbrellanbibaidarfurubiraquarelleborkang" + + "erfurudonostiaarpartyfurukawairtelecityeatshimokitayamafusodegau" + + "rafussaikisofukushimapasadenamsosnowiechofunatorientexpressarluc" + + "ernefutabayamaguchinomigawafutboldlygoingnowhere-for-moregontrai" + + "lroadfuttsurugimperiafuturehostingfuturemailingfvgfyis-a-musicia" + + "nfylkesbiblackfridayfyresdalhangglidinghangoutsystemscloudfrontd" + + "oorhannanmokuizumodenakasatsunais-a-painteractivegarsheis-a-pats" + + "fanhannotteroyhanyuzenhapmirhareidsbergenharstadharvestcelebrati" + + "onhasamarnardalhasaminami-alpssells-itransportransurlhashbanghas" + + "udahasura-appassenger-associationhasvikazunohatogayahoohatoyamaz" + + "akitahiroshimarriottrapaniimimatakatoris-a-personaltrainerhatsuk" + + "aichikaiseis-a-photographerokuappaviancargodaddynaliascoli-picen" + + "oipirangamvikddielddanuorrissagaeroclubmedecincinnationwidealsta" + + "haugesunderseaportsinfolldalabamagasakishimabarackmazehattfjelld" + + "alhayashimamotobungotakadapliernewhollandhazuminobusellsyourhome" + + "goodshimotsumahboehringerikehelsinkitakamiizumisanofidelitysvard" + + "ollshinichinanhembygdsforbundhemneshinjournalistjohnhemsedalhepf" + + "orgeherokussldheroyhgtvallee-aosteroyhigashichichibunkyonanaoshi" + + "mageandsoundandvisionhigashihiroshimanehigashiizumozakitakatakam" + + "oriokalmykiahigashikagawahigashikagurasoedahigashikawakitaaikita" + + "kyushuaiahigashikurumeiwamarshallstatebankfhappouhigashimatsushi" + + "maritimodernhigashimatsuyamakitaakitadaitoigawahigashimurayamamo" + + "torcycleshinjukumanohigashinarusembokukitamidsundhigashinehigash" + + "iomihachimanchesterhigashiosakasayamanakakogawahigashishirakawam" + + "atakanabeautydalhigashisumiyoshikawaminamiaikitamotosumitakagild" + + "eskaliszhigashitsunowruzhgorodeohigashiurausukitanakagusukumodum" + + "inamiiselectravelchannelhigashiyamatokoriyamanashifteditchyourip" + + "fizerhigashiyodogawahigashiyoshinogaris-a-playerhiraizumisatohob" + + "by-sitehirakatashinagawahiranais-a-republicancerresearchaeologic" + + "aliforniahirarahiratsukagawahirayaitakanezawahistorichouseshinka" + + "migotoyohashimotoshimahitachiomiyaginankokubunjis-a-rockstaracho" + + "wicehitachiotagooglecodespotravelersinsurancehitraeumtgeradeloit" + + "tevadsoccertificationhjartdalhjelmelandholeckobierzyceholidayhom" + + "eipgfoggiahomelinkhakassiahomelinuxn--32vp30haebaruminamifuranoh" + + "omeofficehomesecuritymaceratakaokaluganskodjejuifminamiizukamiok" + + "amikitayamatsuris-a-socialistmein-vigorgehomesecuritypccwinnersh" + + "inshinotsurgeryhomesenseminehomeunixn--3bst00minamimakis-a-soxfa" + + "nhondahoneywellbeingzonehongopocznosegawahonjyoitakarazukamakura" + + "zakitashiobarahornindalhorseoulminamiminowahortendofinternet-dns" + + "hinshirohospitalhoteleshintokushimahotmailhoyangerhoylandetroits" + + "kolelhumanitieshintomikasaharahurdalhurumajis-a-studentalhyllest" + + "adhyogoris-a-teacherkassymantechnologyhyugawarahyundaiwafunehzch" + + "onanbuildingripescaravantaajlchoyodobashichikashukujitawarajlljm" + + "pharmacienshirakofuefukihaboromskoguchikuzenjnjeonnamerikawauejo" + + "yokaichibahcavuotnagaranzannefrankfurtrentino-alto-adigejpmorgan" + + "jpnjprshiranukamogawajuniperjurkoshunantokigawakosugekotohiradom" + + "ainsureggiocalabriakotourakouhokutamakis-an-artisteinkjerusalemb" + + "roiderykounosupplieshiraokanagawakouyamashikokuchuokouzushimasoy" + + "kozagawakozakis-an-engineeringkpnkppspdnshiratakahagivestbytomar" + + "idagawassamukawataricohdatingkrasnodarkredirectmeldalkristiansan" + + "dcatshishikuis-an-entertainerkristiansundkrodsheradkrokstadelval" + + "daostarostwodzislawioshisognekryminamisanrikubetsupportrentino-a" + + "ltoadigekumatorinokumejimasudakumenanyokkaichirurgiens-dentistes" + + "-en-francekunisakis-bykunitachiarailwaykunitomigusukumamotoyamas" + + "sa-carrara-massacarraramassabusinessebyklegallocus-1kunneppulawy" + + "kunstsammlungkunstunddesignkuokgrouphdkureggioemiliaromagnakayam" + + "atsumaebashikshacknetrentino-s-tirollagrigentomologyeonggiehtavu" + + "oatnagaivuotnagaokakyotambabia-goracleaningkurgankurobelaudibleb" + + "timnetzkurogimilanokuroisoftwarendalenugkuromatsunais-certifiedo" + + "gawarabikomaezakirunorthwesternmutualkurotakikawasakis-foundatio" + + "nkushirogawakusupplykutchanelkutnokuzumakis-gonekvafjordkvalsund" + + "kvamfamberkeleykvanangenkvinesdalkvinnheradkviteseidskogkvitsoyk" + + "wpspiegelkzmissilevangermisugitokorozawamitourismolancastermitoy" + + "oakemiuramiyazumiyotamanomjondalenmlbfanmonmouthagebostadmonster" + + "monticellombardiamondshisuifuelveruminamitanemontrealestatefarme" + + "quipmentrentino-stirolmonza-brianzaporizhzhiamonza-e-della-brian" + + "zapposhitaramamonzabrianzaptokuyamatsusakahoginowaniihamatamakaw" + + "ajimarburgmonzaebrianzaramonzaedellabrianzamoparachutingmordovia" + + "jessheiminamiuonumatsumotofukemoriyamatsushigemoriyoshimilitarym" + + "ormoneymoroyamatsuuramortgagemoscowitdkmpspbarcelonagasakijobser" + + "verisignieznord-odalaziobihirosakikamijimassnasaarlandd-dnshome-" + + "webservercellikes-piedmontblancomeeres3-ap-southeast-1moseushist" + + "orymosjoenmoskeneshizukuishimofusaitamatsukuris-into-gamessinats" + + "ukigatakasagotembaixadamosshizuokananporovigotpantheonsitemosvik" + + "nx-serveronakatsugawamoteginozawaonsenmoviemovistargardmtpchrist" + + "masakikugawatchesarufutsunomiyawakasaikaitakoelniyodogawamtranby" + + "muenstermugithubcloudusercontentrentino-sud-tirolmuikamisatokama" + + "chippubetsubetsugarumukochikushinonsenergymulhouservebeermunakat" + + "anemuncieszynmuosattemuphiladelphiaareadmyblogsitemurmanskolobrz" + + "egersundmurotorcraftrentino-sudtirolmusashimurayamatsuzakis-leet" + + "rdmusashinoharamuseetrentino-sued-tirolmuseumverenigingmutsuzawa" + + "mutuellewismillermy-vigorlicemy-wanggouvicenzamyactivedirectorym" + + "yasustor-elvdalmycdn77-securechtrainingmydissentrentino-suedtiro" + + "lmydrobofagemydshoujis-lostre-toteneis-a-techietis-a-therapistoi" + + "amyeffectrentinoa-adigemyfirewallonieruchomoscienceandindustrynm" + + "yfritzmyftpaccesshowamyfusionmyhome-serverrankoshigayamelhusgard" + + "enmykolaivaolbia-tempio-olbiatempioolbialystokkepnogiftshowtimet" + + "eorapphilatelymymediapchromedicaltanissettairamyokohamamatsudamy" + + "pepsongdalenviknakanojohanamakinoharamypetshriramlidlugolekagami" + + "nogatagajobojis-not-certifieducatorahimeshimakanegasakinkobayash" + + "ikaoirminamiogunicomcastresistancemyphotoshibahccavuotnagareyama" + + "lborkdalvdalcesienarashinomypsxn--3e0b707emysecuritycamerakermys" + + "hopblocksigdalmyvnchryslerpictetrentinoaadigepicturesimple-urlpi" + + "emontepilotsirdalpimientaketomisatolgapinkomakiyosunndalpioneerp" + + "ippuphoenixn--3oq18vl8pn36apiszpittsburghofauskedsmokorsetagayas" + + "ells-for-ulvikautokeinopiwatepizzapkomatsushimashikizunokunimiho" + + "boleslawiechristiansburgriwataraidyndns-picsarpsborgroks-thisaya" + + "manobeokakudamatsueplanetariuminamiyamashirokawanabellevuelosang" + + "elesjaguarchitecturealtorlandplantationplantslingplatforminanopl" + + "aystationplazaplchungnamdalseidfjordyndns-remotewdyndns-serverda" + + "luroyplombardynamisches-dnslupskomforbarclaycards3-website-ap-no" + + "rtheast-1plumbingopmnpodzonepohlpoivronpokerpokrovskommunalforbu" + + "ndpolitiendapolkowicepoltavalle-aostathellexusdecorativeartsnoas" + + "aitomobellunorddalpomorzeszowithgoogleapisa-hockeynutsiracusakat" + + "akinouepordenonepornporsangerporsanguidelmenhorstalbansokanazawa" + + "porsgrunnanpoznanpraxis-a-bookkeeperugiaprdpreservationpresidiop" + + "rgmrprimeloyalistockholmestrandprincipeprivatizehealthinsurancep" + + "rochowiceproductionsokndalprofbsbxn--1lqs03nprogressivegasiaproj" + + "ectrentinoalto-adigepromombetsurfbx-ostrowwlkpmgulenpropertyprot" + + "ectionprotonetrentinoaltoadigeprudentialpruszkowithyoutubentleyp" + + "rzeworskogptplusterpvtrentinos-tirolpwchurchaseljeepostfoldnavyp" + + "zqldqponqslgbtrentinostirolquicksytesolarssonqvcirclegnicafedera" + + "tionstufftoread-booksnesolundbeckommunestuttgartrentoyokawasusak" + + "is-slickharkovalleeaosteigensusonosuzakaneyamazoesuzukaniepcesuz" + + "ukis-uberleetrentino-a-adigesvalbardunloppacificircustomersveios" + + "velvikomvuxn--3ds443gsvizzeraswedenswidnicarrierswiebodzindianap" + + "olis-a-bloggerswiftcoversicherungswinoujscienceandhistoryswisshi" + + "kis-very-badaddjamisonsynology-dsolutionsolognetuscanytushuissie" + + "r-justicetuvalle-daostaticsootuxfamilyvenneslaskerrylogisticsopo" + + "trentinosud-tirolvestfoldvestnesor-odalvestre-slidreamhostersor-" + + "varangervestre-totennishiawakuravestvagoyvevelstadvibo-valentiav" + + "ibovalentiavideovillaskoyabearalvahkihokumakogengerdalpha-myqnap" + + "cloudapplebesbydgoszczecinemakeupowiathletajimabariakembuchikuma" + + "gayagawakuyabukicks-assedicitadeliveryvinnicartiervinnytsiavipsi" + + "naapphonefossilkomaganevirginiavirtualvirtueeldomeindianmarketin" + + "gvirtuelvisakegawavistaprinternationalfirearmsorfoldviterboltroa" + + "ndinosaurepaircraftrevisohughesomavivoldavlaanderenvladikavkazim" + + "ierz-dolnyvladimirvlogoiphotographysiovolkswagentsorreisahayakaw" + + "akamiichikawamisatotalvologdanskongsvingervolvolkenkundenvolyngd" + + "alvossevangenvotevotingvotoyonakagyokutoursortlandworldworse-tha" + + "ndawowiwatsukiyonowritesthisblogsytewroclawloclawekoninjavald-ao" + + "starnbergwtciticatholicheltenham-radio-opencraftranagatorodoywtf" + + "bxosciencecentersciencehistorywuozuwwwmflabsorumincommbanklabudh" + + "abikinokawabarthagakhanamigawawzmiuwajimaxn--4gq48lf9jetztrentin" + + "o-aadigexn--4it168dxn--4it797konsulatrobeepilepsydneyxn--4pvxsou" + + "thcarolinazawaxn--54b7fta0ccivilizationxn--55qw42gxn--55qx5dxn--" + + "5js045dxn--5rtp49civilwarmanagementmpalmspringsakerxn--5rtq34kon" + + "yvelolxn--5su34j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2r" + + "xn--6qq986b3xlxn--7t0a264claimsasayamaxn--80adxhksouthwestfalenx" + + "n--80ao21axn--80aqecdr1axn--80asehdbarefootballooningjesdalillyo" + + "mbondiscountysnes3-website-ap-southeast-2xn--80aswgxn--80audneda" + + "lnxn--8ltr62kooris-an-actorxn--8pvr4uxn--8y0a063axn--90a3academy" + + "-firewall-gatewayxn--90aishobaraomoriguchiharahkkeravjuedischesa" + + "peakebayernrtrogstadxn--90azhytomyrxn--9dbhblg6dietcimdbargainst" + + "itutelemarkaratsuginamikatagamiharuconnectatarantottoribestadisc" + + "overyomitanobirastronomy-gatewayokosukanzakiwienaturalsciencesna" + + "turelles3-ap-southeast-2xn--9dbq2axn--9et52uxn--9krt00axn--andy-" + + "iraxn--aroport-byanaizuxn--asky-iraxn--aurskog-hland-jnbarreauct" + + "ionayorovnobninskarelianceu-1xn--avery-yuasakuhokkaidontexistein" + + "geekopervikhmelnitskiyamashikexn--b-5gaxn--b4w605ferdxn--bck1b9a" + + "5dre4clickatowicexn--bdddj-mrabdxn--bearalvhki-y4axn--berlevg-jx" + + "axn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr-5nachikatsuuraxn-" + + "-bievt-0qa2xn--bjarky-fyandexn--3pxu8konskowolayangroupharmacysh" + + "iraois-an-accountantshinyoshitomiokamitsuexn--bjddar-ptamayufuet" + + "tertdasnetzxn--blt-elabourxn--bmlo-graingerxn--bod-2naroyxn--brn" + + "ny-wuaccident-investigation-aptibleaseating-organicbcn-north-1xn" + + "--brnnysund-m8accident-prevention-webhopenairbusantiquest-a-la-m" + + "aisondre-landebudapest-a-la-masionionjukudoyamagazineat-urlxn--b" + + "rum-voagatromsakakinokiaxn--btsfjord-9zaxn--c1avgxn--c2br7gxn--c" + + "3s14mintelligencexn--cck2b3barrel-of-knowledgemologicallyngenvir" + + "onmentalconservationflfanfshostrolekamisunagawaugustowadaegubs3-" + + "ca-central-1xn--cg4bkis-very-evillagexn--ciqpnxn--clchc0ea0b2g2a" + + "9gcdn77-sslattumisakis-into-carshioyanagawaxn--comunicaes-v6a2ox" + + "n--correios-e-telecomunicaes-ghc29axn--czr694barrell-of-knowledg" + + "eologyonagoyaukraanghkeymachineustarhubalestrandabergamoareke164" + + "xn--czrs0tromsojaworznoxn--czru2dxn--czrw28bashkiriaurskog-holan" + + "droverhalla-speziaeroportalaheadjudaicaaarborteaches-yogasawarac" + + "ingroks-theatree12xn--d1acj3basilicataniaustevollarvikarasjokara" + + "suyamarylhurstjordalshalsenaturbruksgymnaturhistorisches3-eu-cen" + + "tral-1xn--d1alfaromeoxn--d1atrusteexn--d5qv7z876clinichernigover" + + "nmentjometlifeinsurancexn--davvenjrga-y4axn--djrs72d6uyxn--djty4" + + "koryokamikawanehonbetsurutaharaxn--dnna-grajewolterskluwerxn--dr" + + "bak-wuaxn--dyry-iraxn--e1a4cliniquenoharaxn--eckvdtc9dxn--efvn9s" + + "owaxn--efvy88haibarakitahatakamatsukawaxn--ehqz56nxn--elqq16hair" + + "-surveillancexn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct429ko" + + "saigawaxn--fhbeiarnxn--finny-yuaxn--fiq228c5hspjelkavikomonoxn--" + + "fiq64basketballfinanzgoraustinnatuurwetenschappenaumburgjemnes3-" + + "eu-west-1xn--fiqs8spreadbettingxn--fiqz9spydebergxn--fjord-lraxn" + + "--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-" + + "grandrapidsrlxn--frna-woaraisaijotrvarggatritonxn--frya-hraxn--f" + + "zc2c9e2clintonoshoesaseboknowsitallutskypexn--fzys8d69uvgmailxn-" + + "-g2xx48clothingrondarxn--gckr3f0fermobilyxn--gecrj9cloudnsdojoet" + + "suwanouchikujogaszczytnore-og-uvdaluxembourgrongaxn--ggaviika-8y" + + "a47hakatanotogawaxn--gildeskl-g0axn--givuotna-8yaotsurreyxn--gjv" + + "ik-wuaxn--gk3at1exn--gls-elacaixaxn--gmq050is-very-goodhandsonxn" + + "--gmqw5axn--h-2failxn--h1aeghakodatexn--h2brj9cnsaskatchewanxn--" + + "hbmer-xqaxn--hcesuolo-7ya35batodayonaguniversityoriikariyakumold" + + "eltaiwanairlinedre-eikerxn--hery-iraxn--hgebostad-g3axn--hmmrfea" + + "sta-s4acctrysiljan-mayenxn--hnefoss-q1axn--hobl-iraxn--holtlen-h" + + "xaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b" + + "6b1a6a2exn--imr513nxn--indery-fyasakaiminatoyonezawaxn--io0a7is-" + + "very-nicexn--j1aeferraraxn--j1amhakonexn--j6w193gxn--jlq61u9w7ba" + + "tsfjordishakotankarlsoyoshiokarasjohkamikoaniikappugliaustraliai" + + "sondriodejaneirochesterhcloudfunctions3-external-1xn--jlster-bya" + + "sugis-very-sweetpepperxn--jrpeland-54axn--jvr189misasaguris-into" + + "-cartoonshirahamatonbetsurnadalxn--k7yn95exn--karmy-yuaxn--kbrq7" + + "oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dx" + + "n--kltx9axn--klty5xn--42c2d9axn--koluokta-7ya57hakubadajozorahol" + + "taleniwaizumiotsukumiyamazonawsabaerobaticketshimonosekikawaxn--" + + "kprw13dxn--kpry57dxn--kpu716ferrarivnexn--kput3is-with-thebandoo" + + "mdnsiskinkyotobetsumidatlantichoseiroumuenchenisshingugexn--krag" + + "er-gyasuokanraxn--kranghke-b0axn--krdsherad-m8axn--krehamn-dxaxn" + + "--krjohka-hwab49jevnakershuscultureggio-emilia-romagnakatombetsu" + + "my-routerxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyatomitamamurax" + + "n--kvnangen-k0axn--l-1fairwindsrtrentinosudtirolxn--l1accenturek" + + "lamborghiniizaxn--laheadju-7yatsukanumazuryxn--langevg-jxaxn--lc" + + "vr32dxn--ldingen-q1axn--leagaviika-52bauhausposts-and-telecommun" + + "icationsncfdivtasvuodnakaiwamizawaustrheimatunduhrennesoyokotebi" + + "nagisochildrensgardenaustdalavagiskebinorfolkebibleikangerxn--le" + + "sund-huaxn--lgbbat1ad8jewelryxn--lgrd-poacoachampionshiphoptobam" + + "agentositelekommunikationlinebraskaunjargallupinbbcaseihichisobe" + + "tsuitainairforceoceanographics3-website-eu-west-1xn--lhppi-xqaxn" + + "--linds-pramericanartulangevagrarboretumbriamallamaintenancechir" + + "ealminnesotaketakatsukis-into-animelbournexn--lns-qlansrvareserv" + + "eblogspotrentinosued-tirolxn--loabt-0qaxn--lrdal-sraxn--lrenskog" + + "-54axn--lt-liacntoyonoxn--lten-granexn--lury-iraxn--mely-iraxn--" + + "merker-kuaxn--mgb2ddestordalxn--mgb9awbferreroticanonoichinomiya" + + "kexn--mgba3a3ejtunesomnaritakurashikis-savedunetbankharkivguccip" + + "rianiigataishinomakimobetsuliguriaxn--mgba3a4f16axn--mgba3a4fran" + + "amizuholdingsmileksvikosakaerodromegalsacebetsukubankhmelnytskyi" + + "vanylvenicexn--mgba7c0bbn0axn--mgbaakc7dvfetsundynvpnxn--mgbaam7" + + "a8hakuis-a-nascarfanxn--mgbab2bdxn--mgbai9a5eva00bbtateshinanoma" + + "chintaifun-dnsaliaskimitsubatamicable-modembetsukuibigawauthorda" + + "landroiddnskingjerdrumckinseyokozebizenakaniikawatanaguraetnagah" + + "amaroygardendoftheinternetflixilovecollegefantasyleaguernseyboml" + + "oans3-ap-northeast-2xn--mgbai9azgqp6jewishartgalleryxn--mgbayh7g" + + "padualstackspace-to-rentalstomakomaibaraxn--mgbb9fbpobanazawaxn-" + + "-mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mgberp4a5d4a87gxn--m" + + "gberp4a5d4arxn--mgbi4ecexposedxn--mgbpl2fhskleppiagetmyiphilipsy" + + "nology-diskstationxn--mgbqly7c0a67fbcolonialwilliamsburgrossetou" + + "chijiwadellogliastradingroundhandlingroznyxn--mgbqly7cvafredriks" + + "tadtvstoreitrentinosuedtirolxn--mgbt3dhdxn--mgbtf8flatangerxn--m" + + "gbtx2bbvacationswatch-and-clockerxn--mgbx4cd0abbottunkongsbergxn" + + "--mix082fgunmarcheaparisor-fronxn--mix891fhvalerxn--mjndalen-64a" + + "xn--mk0axindustriesteambulancexn--mk1bu44coloradoplateaudioxn--m" + + "kru45isleofmandalxn--mlatvuopmi-s4axn--mli-tlanxesstorfjordxn--m" + + "lselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn--mosjen-eyatsushir" + + "oxn--mot-tlapyxn--mre-og-romsdal-qqbeppublishproxyzgorzeleccolog" + + "newspaperxn--msy-ula0hakusandiegoodyearthadselfipassagenshimonit" + + "ayanagitlaborxn--mtta-vrjjat-k7afamilycompanycolumbusheyxn--muos" + + "t-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9ci" + + "vilaviationxn--nit225koseis-an-actresshiojirishirifujiedaxn--nme" + + "sjevuemie-tcbalatinord-frontierxn--nnx388axn--nodexn--nqv7fs00em" + + "axn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--nttery-byaeservecount" + + "erstrikexn--nvuotna-hwaxn--nyqy26axn--o1achattanooganordreisa-ge" + + "ekosherbrookegawaxn--o3cw4haldenxn--od0algxn--od0aq3bernuorockar" + + "tuzyukibmdivttasvuotnakamagayachts3-website-sa-east-1xn--ogbpf8f" + + "lekkefjordxn--oppegrd-ixaxn--ostery-fyawaraxn--osyro-wuaxn--p1ac" + + "fidonnakamuratajimicrolightinguovdageaidnunzenxn--p1aissmarterth" + + "anyouxn--pbt977communitysfjordyndns-weberlincolnxn--pgbs0dhlxn--" + + "porsgu-sta26fieldyroyrvikinguitarschweizparaglidingujolsterxn--p" + + "ssu33lxn--pssy2uxn--q9jyb4comobaraxn--qcka1pmcdonaldstpetersburg" + + "xn--qqqt11misconfusedxn--qxamuneuestreamsterdamnserverbaniaxn--r" + + "ady-iraxn--rdal-poaxn--rde-ulaquilancashirehabmerxn--rdy-0nabari" + + "wchoshibuyachiyodavvenjargaulardalukowiiheyaizuwakamatsubushikus" + + "akadogawaxn--rennesy-v1axn--rhkkervju-01aflakstadaokagakibichuox" + + "n--rholt-mragowoodsidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn" + + "--risa-5narusawaxn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmsk" + + "og-byawatahamaxn--rny31halsaintlouis-a-anarchistoireggio-calabri" + + "axn--rovu88beskidyn-vpncasertaipeiheijiinetnedalimanowarudautomo" + + "tivecodyn-o-saurlandes3-fips-us-gov-west-1xn--rros-granvindafjor" + + "dxn--rskog-uuaxn--rst-0narutokyotangovturystykannamihamadaxn--rs" + + "ta-francaiseharaxn--ryken-vuaxn--ryrvik-byaxn--s-1faitheguardian" + + "xn--s9brj9comparemarkerryhotelsassaris-a-doctorayxn--sandnessjen" + + "-ogbizxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gratangenxn-" + + "-skierv-utazaskvolloabathsbcompute-1xn--skjervy-v1axn--skjk-soax" + + "n--sknit-yqaxn--sknland-fxaxn--slat-5narviikamishihoronobeauxart" + + "sandcraftstudioxn--slt-elabbvieeexn--smla-hraxn--smna-gratis-a-b" + + "ruinsfanxn--snase-nraxn--sndre-land-0cbstudyndns-at-homedepotenz" + + "amamicrosoftbankomorotsukaminoyamaxunusualpersonxn--snes-poaxn--" + + "snsa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-va" + + "ranger-ggbestbuyshouses3-website-us-east-1xn--srfold-byaxn--srre" + + "isa-q1axn--srum-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshal" + + "sen-sqbetainaboxfusejnynysadodgeometre-experts-comptables3-websi" + + "te-us-west-1xn--stre-toten-zcbieigersundiyukuhashimoichinosekiga" + + "harautoscanadaejeonbukaratehimeji234xn--t60b56axn--tckweathercha" + + "nnelxn--tiq49xqyjfkhersonxn--tjme-hraxn--tn0agrinet-freakstuff-4" + + "-salexn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1axn--t" + + "rna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvaroyxn--uc0ay4axn--ui" + + "st22hammarfeastafricapetownnews-stagingxn--uisz3gxn--unjrga-rtao" + + "baokinawashirosatochiokinoshimalatvuopmiasakuchinotsuchiurakawal" + + "brzycharternopilawalesundxn--unup4yxn--uuwu58axn--vads-jraxn--va" + + "rd-jraxn--vegrshei-c0axn--vermgensberater-ctbielawalterxn--vermg" + + "ensberatung-pwbiellaakesvuemielecceu-2xn--vestvgy-ixa6oxn--vg-yi" + + "abcgxn--vgan-qoaxn--vgsy-qoa0jgoraxn--vgu402computerhistoryofsci" + + "ence-fictionxn--vhquvbarclays3-website-ap-southeast-1xn--vler-qo" + + "axn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bieszczad" + + "ygeyachimataikikonaioirasebastopologyeongnamegawakeisenbahnhlfan" + + "hs3-website-us-west-2xn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dx" + + "n--wgbh1comsecuritytacticsatxn--1ck2e1balsfjordgcahcesuolodingen" + + "aval-d-aosta-valleyolasitemrxn--wgbl6axn--xhq521bievatmallorcada" + + "quesakuraiitatebayashiibaghdadultateyamaveroykenglanddnss3-sa-ea" + + "st-1xn--xkc2al3hye2axn--xkc2dl3a5ee0hamurakamigoriginshimosuwalk" + + "is-a-nurservebbshimotsukexn--y9a3aquariumishimatsunoxn--yer-znar" + + "vikoshimizumakis-an-anarchistoricalsocietyxn--yfro4i67oxn--ygard" + + "en-p1axn--ygbi2ammxn--45q11civilisationxn--ystre-slidre-ujbifuka" + + "gawarszawashingtondclkarmoyurihonjoyentatsunoceanographiquevents" + + "akyotanabeneventoeidsvollimitednpagefrontappagespeedmobilizerodd" + + "avocatanzarowegroweibolzanordkappgafanpachigasakidsmynasushiobar" + + "agusarts3-us-east-2xn--zbx025dxn--zf0ao64axn--zf0avxn--4gbrimini" + + "ngxn--zfr164bihorologyusuharavoues3-us-gov-west-1xperiaxz" + +// nodes is the list of nodes. Each node is represented as a uint32, which +// encodes the node's children, wildcard bit and node type (as an index into +// the children array), ICANN bit and text. +// +// If the table was generated with the -comments flag, there is a //-comment +// after each node's data. In it is the nodes-array indexes of the children, +// formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The +// nodeType is printed as + for normal, ! for exception, and o for parent-only +// nodes that have children but don't match a domain label in their own right. +// An I denotes an ICANN domain. +// +// The layout within the uint32, from MSB to LSB, is: +// [ 1 bits] unused +// [ 9 bits] children index +// [ 1 bits] ICANN bit +// [15 bits] text index +// [ 6 bits] text length +var nodes = [...]uint32{ + 0x32f983, + 0x28a344, + 0x30e286, + 0x371b43, + 0x371b46, + 0x394646, + 0x3a5003, + 0x367844, + 0x260687, + 0x30dec8, + 0x1a04cc2, + 0x316e47, + 0x355d89, + 0x32228a, + 0x32228b, + 0x22eec3, + 0x28fac6, + 0x2327c5, + 0x1e04e02, + 0x217c04, + 0x2a90c3, + 0x3ac705, + 0x2203942, + 0x329e03, + 0x26957c4, + 0x368e05, + 0x2a10182, + 0x3787ce, + 0x253343, + 0x3a03c6, + 0x2e00142, + 0x30e407, + 0x23ae46, + 0x3200c42, + 0x22a343, + 0x254b04, + 0x325a86, + 0x35c208, + 0x28a706, + 0x21ad04, + 0x3601442, + 0x332309, + 0x207587, + 0x256286, + 0x339309, + 0x29d788, + 0x328d44, + 0x364906, + 0x36b606, + 0x3a02942, + 0x27144f, + 0x20f94e, + 0x2131c4, + 0x2c6085, + 0x367745, + 0x385989, + 0x241a89, + 0x368047, + 0x23c9c6, + 0x273a43, + 0x3e02342, + 0x2df283, + 0x205aca, + 0x221d83, + 0x303145, + 0x289c02, + 0x289c09, + 0x4200f82, + 0x203d84, + 0x2250c6, + 0x2eb205, + 0x34cbc4, + 0x4a04c04, + 0x205283, + 0x231ac4, + 0x4e02e02, + 0x209f04, + 0x52f4e04, + 0x24ae0a, + 0x5601342, + 0x303907, + 0x26b8c8, + 0x6202f82, + 0x31cf07, + 0x2c2e04, + 0x2c2e07, + 0x373d85, + 0x357a47, + 0x367e06, + 0x2e8384, + 0x39c0c5, + 0x294847, + 0x7206cc2, + 0x34f703, + 0x200582, + 0x200583, + 0x76125c2, + 0x221ec5, + 0x7a02302, + 0x27bd84, + 0x2810c5, + 0x213107, + 0x269f0e, + 0x224bc4, + 0x206a84, + 0x211503, + 0x2ceac9, + 0x2ed94b, + 0x3a6548, + 0x3148c8, + 0x318dc8, + 0x237908, + 0x33914a, + 0x357947, + 0x318146, + 0x7ea4fc2, + 0x35bc03, + 0x366c43, + 0x371144, + 0x3a5043, + 0x324cc3, + 0x171f542, + 0x8203682, + 0x252185, + 0x2a11c6, + 0x2d6d44, + 0x2f6e07, + 0x382986, + 0x319dc4, + 0x398247, + 0x20f7c3, + 0x86c8902, + 0x8b124c2, + 0x8e1c502, + 0x21c506, + 0x9200002, + 0x359b85, + 0x320a83, + 0x200004, + 0x2ee344, + 0x2ee345, + 0x203e43, + 0x9768883, + 0x9a07f42, + 0x28e245, + 0x28e24b, + 0x2d0686, + 0x20a0cb, + 0x225b04, + 0x20a7c9, + 0x20be84, + 0x9e0c0c2, + 0x20cf83, + 0x210843, + 0x1600802, + 0x260903, + 0x2109ca, + 0xa211cc2, + 0x217e85, + 0x2983ca, + 0x2dc184, + 0x369f03, + 0x315044, + 0x213643, + 0x213644, + 0x213647, + 0x213985, + 0x213e05, + 0x2150c6, + 0x2167c6, + 0x2182c3, + 0x21c188, + 0x221c43, + 0xa601082, + 0x21cac8, + 0x21ff0b, + 0x2216c8, + 0x2221c6, + 0x222a47, + 0x226488, + 0xb2413c2, + 0xb6c2fc2, + 0x326388, + 0x257ec7, + 0x22bac5, + 0x22bac8, + 0x2bf708, + 0x3871c3, + 0x22a784, + 0x371182, + 0xba2af82, + 0xbe5ba02, + 0xc62c1c2, + 0x22c1c3, + 0xca0e542, + 0x367803, + 0x2f8e04, + 0x218443, + 0x328d04, + 0x25fe4b, + 0x21fe43, + 0x2e4d06, + 0x226284, + 0x2a5a8e, + 0x361c05, + 0x3a04c8, + 0x282247, + 0x28224a, + 0x229d03, + 0x2b3447, + 0x2edb05, + 0x22ea44, + 0x272486, + 0x272487, + 0x32b704, + 0x304ac7, + 0x26a244, + 0x35bc84, + 0x35bc86, + 0x386904, + 0x20e546, + 0x223c83, + 0x22b888, + 0x30c3c8, + 0x24e2c3, + 0x2608c3, + 0x204f04, + 0x395943, + 0xce0d882, + 0xd2db442, + 0x20c043, + 0x201806, + 0x35c383, + 0x28bfc4, + 0xd6081c2, + 0x2081c3, + 0x358243, + 0x219942, + 0xda02ac2, + 0x2c55c6, + 0x2334c7, + 0x2f7a85, + 0x37da44, + 0x3723c5, + 0x367007, + 0x274205, + 0x2d3e89, + 0x2e0586, + 0x2e5488, + 0x2f7986, + 0xde0db42, + 0x362f48, + 0x2f8bc6, + 0x20db45, + 0x304687, + 0x30c2c4, + 0x30c2c5, + 0x28a8c4, + 0x28a8c8, + 0xe20a182, + 0xe60c502, + 0x313646, + 0x2c28c8, + 0x31f145, + 0x332c06, + 0x3356c8, + 0x33e1c8, + 0xea0fd45, + 0xee0c504, + 0x2958c7, + 0xf20bbc2, + 0xf61c402, + 0x1060d1c2, + 0x35aa45, + 0x2a8505, + 0x282606, + 0x3698c7, + 0x376ec7, + 0x10ed0783, + 0x2e3447, + 0x30dc88, + 0x3823c9, + 0x378987, + 0x390287, + 0x3a5b08, + 0x3aa206, + 0x22e546, + 0x22f18c, + 0x230b0a, + 0x230fc7, + 0x23268b, + 0x233307, + 0x23330e, + 0x236244, + 0x23a184, + 0x23b547, + 0x264f47, + 0x240d46, + 0x240d47, + 0x241207, + 0x18a20802, + 0x2420c6, + 0x2420ca, + 0x24294b, + 0x243407, + 0x244ec5, + 0x245203, + 0x246c46, + 0x246c47, + 0x241c43, + 0x18e38702, + 0x24b74a, + 0x19356fc2, + 0x196acdc2, + 0x19a4cec2, + 0x19e26982, + 0x24da85, + 0x24e0c4, + 0x1a604d02, + 0x209f85, + 0x294ac3, + 0x20bf85, + 0x237804, + 0x20a684, + 0x2ba5c6, + 0x26a546, + 0x28e443, + 0x3b1484, + 0x209383, + 0x1aa03b02, + 0x263544, + 0x263546, + 0x295e45, + 0x27fdc6, + 0x304788, + 0x20cb44, + 0x2a8e88, + 0x343fc5, + 0x24a108, + 0x2b1cc6, + 0x2bddc7, + 0x26cdc4, + 0x26cdc6, + 0x25e303, + 0x382e43, + 0x2c9388, + 0x318bc4, + 0x238d47, + 0x220246, + 0x2dad89, + 0x315108, + 0x319f08, + 0x349184, + 0x39b9c3, + 0x23e342, + 0x1ba34682, + 0x1be16102, + 0x3b2783, + 0x1c204a42, + 0x2607c4, + 0x390a46, + 0x39a6c5, + 0x2a4383, + 0x232004, + 0x2b6f47, + 0x26aa43, + 0x250d08, + 0x20e8c5, + 0x370083, + 0x281045, + 0x281184, + 0x2fb8c6, + 0x210384, + 0x211a46, + 0x213046, + 0x263004, + 0x21fd83, + 0x2225c3, + 0x1c604e42, + 0x377905, + 0x222e03, + 0x1ca1c3c2, + 0x22f143, + 0x210085, + 0x231b83, + 0x231b89, + 0x1ce07d02, + 0x1d601142, + 0x28d9c5, + 0x21a746, + 0x2d6906, + 0x2b94c8, + 0x2b94cb, + 0x20538b, + 0x2f7c85, + 0x2e1045, + 0x2c9fc9, + 0x1600742, + 0x2631c8, + 0x206044, + 0x1de001c2, + 0x25fa83, + 0x1e665106, + 0x20f088, + 0x1ea04782, + 0x233ec8, + 0x1ee01742, + 0x225c4a, + 0x1f2d0e43, + 0x3b1e86, + 0x206988, + 0x207d48, + 0x39a9c6, + 0x36d5c7, + 0x271647, + 0x220b0a, + 0x2dc204, + 0x3423c4, + 0x355589, + 0x1fb8fc85, + 0x20fb46, + 0x208203, + 0x251944, + 0x201e44, + 0x201e47, + 0x22cec7, + 0x237044, + 0x220a45, + 0x2826c8, + 0x350707, + 0x3619c7, + 0x1fe041c2, + 0x226004, + 0x298cc8, + 0x381004, + 0x24f0c4, + 0x24fa45, + 0x24fb87, + 0x215809, + 0x2505c4, + 0x2510c9, + 0x251308, + 0x2516c4, + 0x2516c7, + 0x20251c43, + 0x252487, + 0x16101c2, + 0x179d442, + 0x253386, + 0x2539c7, + 0x253e84, + 0x255607, + 0x256907, + 0x257483, + 0x2abc02, + 0x229c02, + 0x258743, + 0x258744, + 0x25874b, + 0x3149c8, + 0x25f184, + 0x2594c5, + 0x25ba87, + 0x25d8c5, + 0x2c4dca, + 0x25f0c3, + 0x2060da42, + 0x22b484, + 0x264d09, + 0x268983, + 0x268a47, + 0x28ee89, + 0x37b5c8, + 0x2d8483, + 0x27ff47, + 0x280689, + 0x2316c3, + 0x288284, + 0x289389, + 0x28c6c6, + 0x28dc83, + 0x2023c2, + 0x24ca43, + 0x36ab47, + 0x2bfa85, + 0x35ba06, + 0x256bc4, + 0x2d1d45, + 0x205a83, + 0x218506, + 0x20a9c2, + 0x391084, + 0x22ad02, + 0x22ad03, + 0x20a00182, + 0x29b083, + 0x216c44, + 0x216c47, + 0x200306, + 0x201e02, + 0x20e01dc2, + 0x21e184, + 0x2123b882, + 0x21600502, + 0x2dfcc4, + 0x2dfcc5, + 0x2b9cc5, + 0x262746, + 0x21a0ca82, + 0x20ca85, + 0x210d85, + 0x225883, + 0x215c06, + 0x216dc5, + 0x21c482, + 0x33de05, + 0x21c484, + 0x2230c3, + 0x223303, + 0x21e097c2, + 0x294a47, + 0x221144, + 0x221149, + 0x251844, + 0x228903, + 0x341cc9, + 0x3777c8, + 0x2a8384, + 0x2a8386, + 0x210503, + 0x259b43, + 0x332ec3, + 0x222ebc02, + 0x30eb82, + 0x22600642, + 0x3238c8, + 0x35c588, + 0x394d86, + 0x24ed45, + 0x2b32c5, + 0x200647, + 0x228fc5, + 0x2630c2, + 0x22a9a502, + 0x1614502, + 0x38fe08, + 0x362e85, + 0x351d04, + 0x2f18c5, + 0x3836c7, + 0x24f5c4, + 0x246f82, + 0x22e01182, + 0x336f04, + 0x2173c7, + 0x28e9c7, + 0x357a04, + 0x298383, + 0x24e204, + 0x24e208, + 0x22e886, + 0x27230a, + 0x2156c4, + 0x298708, + 0x259784, + 0x222b46, + 0x29a4c4, + 0x35ad46, + 0x221409, + 0x25b287, + 0x234483, + 0x23274842, + 0x274843, + 0x20c2c2, + 0x23651b02, + 0x2f0b06, + 0x364148, + 0x2a9d87, + 0x395d09, + 0x297f09, + 0x2ab245, + 0x2ad3c9, + 0x2ae045, + 0x2ae189, + 0x2af5c5, + 0x2b0208, + 0x27f284, + 0x23a8d6c7, + 0x294403, + 0x2b0407, + 0x390646, + 0x2b08c7, + 0x2a6d45, + 0x2a7f83, + 0x23e00dc2, + 0x392604, + 0x2423b8c2, + 0x264403, + 0x24618d82, + 0x307646, + 0x26b845, + 0x2b2bc7, + 0x37f183, + 0x324c44, + 0x2138c3, + 0x2386c3, + 0x24a0a3c2, + 0x25201a02, + 0x394744, + 0x2abbc3, + 0x38c985, + 0x226d85, + 0x25602282, + 0x25e00bc2, + 0x280286, + 0x318d04, + 0x2491c4, + 0x2491ca, + 0x26601d42, + 0x37324a, + 0x204148, + 0x26a964c4, + 0x201d43, + 0x25ff43, + 0x318f09, + 0x2a8909, + 0x2b7046, + 0x26e04303, + 0x328145, + 0x30664d, + 0x204306, + 0x21268b, + 0x27203482, + 0x295048, + 0x27e1c282, + 0x282051c2, + 0x37aa85, + 0x28600b02, + 0x2a3147, + 0x212b87, + 0x201503, + 0x22f848, + 0x28a02f02, + 0x202f04, + 0x217043, + 0x38d045, + 0x386fc3, + 0x2eb106, + 0x30bdc4, + 0x204ec3, + 0x234f83, + 0x28e07042, + 0x2f7c04, + 0x30ed45, + 0x35a587, + 0x27dbc3, + 0x2b36c3, + 0x2b3ec3, + 0x1621ac2, + 0x2b3f83, + 0x2b4b03, + 0x2920ae42, + 0x2cee84, + 0x26a746, + 0x33c7c3, + 0x2b4f83, + 0x296b5e02, + 0x2b5e08, + 0x2b60c4, + 0x2470c6, + 0x2b6547, + 0x24e3c6, + 0x295304, + 0x37200082, + 0x39050b, + 0x2ffbce, + 0x21bb0f, + 0x29da43, + 0x37a4ca02, + 0x166b142, + 0x37e02442, + 0x29c243, + 0x2472c3, + 0x233106, + 0x22ff46, + 0x212307, + 0x31aa84, + 0x3821a882, + 0x3860ec02, + 0x2d4ac5, + 0x2e88c7, + 0x37e046, + 0x38a82882, + 0x2f5b04, + 0x2b9783, + 0x38e01b02, + 0x39352883, + 0x2ba984, + 0x2c06c9, + 0x16c6fc2, + 0x39642682, + 0x351245, + 0x39ac7242, + 0x39e02682, + 0x341687, + 0x2364c9, + 0x35600b, + 0x271405, + 0x2c7c89, + 0x276a46, + 0x2d06c7, + 0x3a2092c4, + 0x32ef49, + 0x374b07, + 0x2255c7, + 0x234003, + 0x37b386, + 0x30f887, + 0x265383, + 0x27c5c6, + 0x3aa022c2, + 0x3ae31e02, + 0x220443, + 0x324845, + 0x257747, + 0x21fac6, + 0x2bfa05, + 0x230044, + 0x2efa45, + 0x2f8284, + 0x3b205e82, + 0x349f07, + 0x2e1c44, + 0x23e244, + 0x33328d, + 0x257249, + 0x381588, + 0x25ac04, + 0x314e85, + 0x3b2607, + 0x205e84, + 0x382a47, + 0x20c705, + 0x3b6aa384, + 0x36dec5, + 0x267644, + 0x24f706, + 0x3696c5, + 0x3ba24742, + 0x369fc4, + 0x369fc5, + 0x3716c6, + 0x2bfb45, + 0x25c104, + 0x3120c3, + 0x204986, + 0x22c085, + 0x22c785, + 0x3697c4, + 0x215743, + 0x21574c, + 0x3be8d002, + 0x3c2045c2, + 0x3c605d82, + 0x205d83, + 0x205d84, + 0x3ca032c2, + 0x2f9648, + 0x35bac5, + 0x33f884, + 0x230e46, + 0x3ce073c2, + 0x3d20fc42, + 0x3d600c02, + 0x321e85, + 0x262ec6, + 0x20b484, + 0x325fc6, + 0x3036c6, + 0x202983, + 0x3db1164a, + 0x264785, + 0x28b4c3, + 0x223886, + 0x305e09, + 0x223887, + 0x293308, + 0x29d649, + 0x248108, + 0x229a46, + 0x208843, + 0x3de017c2, + 0x384b03, + 0x384b09, + 0x368548, + 0x3e2513c2, + 0x3e601f02, + 0x22d603, + 0x2e0405, + 0x258f44, + 0x35e849, + 0x226784, + 0x26f288, + 0x205c03, + 0x2602c4, + 0x2784c3, + 0x21a788, + 0x3331c7, + 0x3ea0f302, + 0x2432c2, + 0x257d85, + 0x3960c9, + 0x20fbc3, + 0x281ac4, + 0x328104, + 0x219e03, + 0x28380a, + 0x3ef73102, + 0x3f2c0202, + 0x2c8883, + 0x374fc3, + 0x1649202, + 0x262a43, + 0x3f60bcc2, + 0x3fa05f02, + 0x3fe22044, + 0x222046, + 0x33e8c6, + 0x277844, + 0x2474c3, + 0x39bc83, + 0x235143, + 0x242cc6, + 0x2ce085, + 0x2c8e47, + 0x2d0589, + 0x2ccac5, + 0x2cdfc6, + 0x2ce548, + 0x2ce746, + 0x245bc4, + 0x29ef8b, + 0x2d3983, + 0x2d3985, + 0x2d3ac8, + 0x226302, + 0x341982, + 0x4024db02, + 0x4060b602, + 0x21a8c3, + 0x40a73fc2, + 0x273fc3, + 0x2d3dc4, + 0x2d4e43, + 0x41201682, + 0x41601686, + 0x2c47c6, + 0x2da008, + 0x41a95242, + 0x41e10882, + 0x42223342, + 0x4265e402, + 0x42a14202, + 0x42e01302, + 0x234103, + 0x261c05, + 0x32d1c6, + 0x43213184, + 0x295c4a, + 0x201306, + 0x2f7ec4, + 0x269ec3, + 0x43e0c002, + 0x202082, + 0x231743, + 0x44204ac3, + 0x362b47, + 0x3695c7, + 0x45a58847, + 0x32d747, + 0x228543, + 0x2977ca, + 0x377004, + 0x220144, + 0x22014a, + 0x202085, + 0x45e04182, + 0x3294c3, + 0x462002c2, + 0x2104c3, + 0x274803, + 0x46a00842, + 0x2e33c4, + 0x21db44, + 0x208285, + 0x30bd05, + 0x249406, + 0x249786, + 0x46e09282, + 0x47201002, + 0x3274c5, + 0x2c44d2, + 0x271ac6, + 0x248803, + 0x2a2486, + 0x248805, + 0x1610a02, + 0x4f611802, + 0x3522c3, + 0x211803, + 0x278203, + 0x4fa11f82, + 0x378ac3, + 0x4fe14602, + 0x200a83, + 0x2ceec8, + 0x24a843, + 0x24a846, + 0x3a1087, + 0x321b06, + 0x321b0b, + 0x2f7e07, + 0x392404, + 0x50603ec2, + 0x364805, + 0x50a04a83, + 0x239f83, + 0x326805, + 0x35b5c3, + 0x35b5c6, + 0x26334a, + 0x2774c3, + 0x23ad04, + 0x2c2806, + 0x20df46, + 0x50e00383, + 0x324b07, + 0x28bb8d, + 0x3adbc7, + 0x2a0685, + 0x250b46, + 0x22c0c3, + 0x52a15e43, + 0x52e04c82, + 0x3b2804, + 0x236d8c, + 0x245309, + 0x24bcc7, + 0x3724c5, + 0x268d84, + 0x27c1c8, + 0x27ed05, + 0x5328a405, + 0x377c09, + 0x256343, + 0x2acd44, + 0x53617902, + 0x21aac3, + 0x53a99f82, + 0x2a3fc6, + 0x16aa082, + 0x53e943c2, + 0x321d88, + 0x2c08c3, + 0x36de07, + 0x305105, + 0x2943c5, + 0x30860b, + 0x2e3906, + 0x308806, + 0x36dbc6, + 0x268f84, + 0x2e5686, + 0x2e5b48, + 0x23e943, + 0x23cf83, + 0x23cf84, + 0x2e6984, + 0x2e6e07, + 0x2e8745, + 0x542e8882, + 0x54606ec2, + 0x206ec5, + 0x2a4a84, + 0x2ebf8b, + 0x2ee248, + 0x2f7304, + 0x290602, + 0x54eb6042, + 0x38c543, + 0x2ee704, + 0x2ee9c5, + 0x2ef087, + 0x2f1404, + 0x2f7cc4, + 0x552054c2, + 0x35d209, + 0x2f2445, + 0x2716c5, + 0x2f3105, + 0x5561aa03, + 0x2f4244, + 0x2f424b, + 0x2f4684, + 0x2f4b0b, + 0x2f5505, + 0x21bc4a, + 0x2f5d08, + 0x2f5f0a, + 0x2f6783, + 0x2f678a, + 0x55a1b282, + 0x55e01202, + 0x26a103, + 0x562f7902, + 0x2f7903, + 0x5673aa42, + 0x56b21202, + 0x2f8104, + 0x21c2c6, + 0x325d05, + 0x2f8b43, + 0x32ff46, + 0x30c845, + 0x2e9784, + 0x56e00e02, + 0x2d7904, + 0x2c9c4a, + 0x2eb487, + 0x26b686, + 0x244007, + 0x236ec3, + 0x265488, + 0x28954b, + 0x386a45, + 0x235905, + 0x235906, + 0x370204, + 0x31d488, + 0x215a83, + 0x2b5984, + 0x36b507, + 0x307206, + 0x200e06, + 0x2a58ca, + 0x24e684, + 0x24e68a, + 0x57201946, + 0x201947, + 0x259547, + 0x279804, + 0x279809, + 0x2ba485, + 0x23b80b, + 0x2769c3, + 0x211c03, + 0x2a3f43, + 0x22ec44, + 0x57600682, + 0x259f06, + 0x2a7d05, + 0x2a26c5, + 0x2564c6, + 0x2531c4, + 0x57a01f82, + 0x245244, + 0x57e00d42, + 0x200d44, + 0x224303, + 0x58211842, + 0x3398c3, + 0x2478c6, + 0x58602602, + 0x2cfb88, + 0x223704, + 0x223706, + 0x375846, + 0x25bb44, + 0x204905, + 0x20c408, + 0x20c907, + 0x20d007, + 0x20d00f, + 0x298bc6, + 0x227843, + 0x227844, + 0x28be84, + 0x210e83, + 0x222c84, + 0x241104, + 0x58a36b82, + 0x28e183, + 0x241383, + 0x58e0c4c2, + 0x22a543, + 0x260883, + 0x213e8a, + 0x22bc87, + 0x241c8c, + 0x241f46, + 0x242406, + 0x246dc7, + 0x592ddb07, + 0x251a09, + 0x21cc04, + 0x252284, + 0x59609f42, + 0x59a01702, + 0x2a5c86, + 0x324904, + 0x2db5c6, + 0x2ab348, + 0x20eec4, + 0x2a3186, + 0x2d68c5, + 0x26ebc8, + 0x205583, + 0x272605, + 0x273583, + 0x2717c3, + 0x2717c4, + 0x273983, + 0x59edeec2, + 0x5a200b42, + 0x276889, + 0x27ec05, + 0x27ee04, + 0x281305, + 0x212504, + 0x2c1247, + 0x33d3c5, + 0x258a04, + 0x258a08, + 0x2dc3c6, + 0x2de404, + 0x2dfdc8, + 0x2e1a87, + 0x5a60e5c2, + 0x305304, + 0x210f44, + 0x2257c7, + 0x5aa53d84, + 0x249682, + 0x5ae01ac2, + 0x21b083, + 0x351144, + 0x242643, + 0x33d945, + 0x5b21de42, + 0x2ebb05, + 0x212bc2, + 0x381dc5, + 0x364305, + 0x5b60c842, + 0x3581c4, + 0x5ba06342, + 0x2a9146, + 0x2ac506, + 0x396208, + 0x2c3608, + 0x3075c4, + 0x2f8905, + 0x2fe809, + 0x2e10c4, + 0x263304, + 0x20aec3, + 0x5be20c45, + 0x2c7087, + 0x25e944, + 0x33a48d, + 0x33c282, + 0x33c283, + 0x355783, + 0x5c200202, + 0x388b45, + 0x26c747, + 0x2a7e04, + 0x32d807, + 0x29d849, + 0x2c9d89, + 0x248ac7, + 0x243843, + 0x27c008, + 0x2f33c9, + 0x2500c7, + 0x370145, + 0x385886, + 0x394246, + 0x3959c5, + 0x257345, + 0x5c603102, + 0x27eb05, + 0x2b8308, + 0x2c5386, + 0x2bcc07, + 0x2f5744, + 0x2ad207, + 0x2faf46, + 0x5ca2fb02, + 0x3713c6, + 0x2fd38a, + 0x2fde45, + 0x5cee4742, + 0x5d245702, + 0x30fbc6, + 0x2b25c8, + 0x5d68eb87, + 0x5da04602, + 0x20edc3, + 0x38c706, + 0x2246c4, + 0x3a0f46, + 0x262446, + 0x26bd0a, + 0x319a45, + 0x204446, + 0x218c83, + 0x218c84, + 0x205302, + 0x30c283, + 0x5de05dc2, + 0x2ce903, + 0x3734c4, + 0x2b2704, + 0x2b270a, + 0x229b03, + 0x28a7c8, + 0x229b0a, + 0x23a407, + 0x301446, + 0x2a9004, + 0x296e42, + 0x219542, + 0x5e206e42, + 0x24e1c3, + 0x259307, + 0x330207, + 0x38fd4b, + 0x28a2c4, + 0x34f9c7, + 0x2ef186, + 0x21c607, + 0x258004, + 0x23c445, + 0x2c17c5, + 0x5e620382, + 0x221a86, + 0x246043, + 0x24a2c2, + 0x24a2c6, + 0x5ea04802, + 0x5ee05bc2, + 0x3abd45, + 0x5f222e82, + 0x5f600a42, + 0x343745, + 0x38e6c5, + 0x204505, + 0x270ac3, + 0x390b05, + 0x2e39c7, + 0x309445, + 0x30a985, + 0x3a05c4, + 0x24c646, + 0x25c1c4, + 0x5fa03382, + 0x6060ce05, + 0x36f447, + 0x2db7c8, + 0x2a32c6, + 0x2a32cd, + 0x2a86c9, + 0x2a86d2, + 0x332705, + 0x33c843, + 0x60a044c2, + 0x2f6d84, + 0x204383, + 0x3623c5, + 0x2fed85, + 0x60e17082, + 0x3700c3, + 0x6124d082, + 0x616c3142, + 0x61a18dc2, + 0x364c05, + 0x329ec3, + 0x319888, + 0x61e02d82, + 0x62206902, + 0x2e3386, + 0x34398a, + 0x272243, + 0x25c083, + 0x2ed703, + 0x62e016c2, + 0x71211fc2, + 0x71a19682, + 0x206602, + 0x3711c9, + 0x2c6404, + 0x22fb48, + 0x71ef8b82, + 0x72202502, + 0x2f4d45, + 0x232ac8, + 0x2cf008, + 0x2fd54c, + 0x23bd83, + 0x267002, + 0x726019c2, + 0x2ccf46, + 0x3022c5, + 0x239103, + 0x383586, + 0x302406, + 0x21e2c3, + 0x304ec3, + 0x3055c6, + 0x306204, + 0x225d46, + 0x2d3b45, + 0x30648a, + 0x240544, + 0x307884, + 0x307a4a, + 0x72a037c2, + 0x234605, + 0x30898a, + 0x309a85, + 0x30a344, + 0x30a446, + 0x30a5c4, + 0x228306, + 0x72e39342, + 0x2eadc6, + 0x3a2445, + 0x26bb87, + 0x3a3c46, + 0x246fc4, + 0x2da807, + 0x311586, + 0x25b5c5, + 0x2d4287, + 0x39cd87, + 0x39cd8e, + 0x24abc6, + 0x382905, + 0x285407, + 0x201c43, + 0x201c47, + 0x3b3445, + 0x2108c4, + 0x211882, + 0x22afc7, + 0x31ab04, + 0x22fec4, + 0x24314b, + 0x21d283, + 0x288fc7, + 0x21d284, + 0x2ace07, + 0x2824c3, + 0x334b4d, + 0x389388, + 0x228e04, + 0x258905, + 0x30ac85, + 0x30b0c3, + 0x73201a82, + 0x30c243, + 0x30cf43, + 0x221c04, + 0x280785, + 0x223387, + 0x218d06, + 0x373203, + 0x24a40b, + 0x3aa70b, + 0x27928b, + 0x28088a, + 0x2ad8cb, + 0x2fc28b, + 0x2e478c, + 0x2e7291, + 0x32170a, + 0x34e48b, + 0x379d0b, + 0x3b048a, + 0x3b4cca, + 0x30ea4d, + 0x31038e, + 0x3109cb, + 0x310c8a, + 0x312191, + 0x3125ca, + 0x312acb, + 0x31300e, + 0x31398c, + 0x313fcb, + 0x31428e, + 0x31460c, + 0x315a4a, + 0x31694c, + 0x73716c4a, + 0x317449, + 0x31b60a, + 0x31b88a, + 0x31bb0b, + 0x31e9ce, + 0x31ed51, + 0x327a09, + 0x327c4a, + 0x32844b, + 0x32a30a, + 0x32ab96, + 0x32c8cb, + 0x32e00a, + 0x32e5ca, + 0x33048b, + 0x332189, + 0x3354c9, + 0x335a4d, + 0x3360cb, + 0x33734b, + 0x337d0b, + 0x3381c9, + 0x33880e, + 0x338f0a, + 0x33a24a, + 0x33a7ca, + 0x33af8b, + 0x33b7cb, + 0x33ba8d, + 0x33cecd, + 0x33da90, + 0x33df4b, + 0x33e54c, + 0x33ea4b, + 0x34118b, + 0x34290b, + 0x3463cb, + 0x346e4f, + 0x34720b, + 0x347d0a, + 0x348249, + 0x348609, + 0x34898b, + 0x348c4e, + 0x34b98b, + 0x34d04f, + 0x34ff0b, + 0x3501cb, + 0x35048b, + 0x35098a, + 0x355c09, + 0x35a20f, + 0x36128c, + 0x36170c, + 0x36208e, + 0x36388f, + 0x363c4e, + 0x3652d0, + 0x3656cf, + 0x365d4e, + 0x36650c, + 0x366812, + 0x36a511, + 0x36ad0e, + 0x36ba0e, + 0x36bf4e, + 0x36c2cf, + 0x36c68e, + 0x36ca13, + 0x36ced1, + 0x36d30e, + 0x36d78c, + 0x36e493, + 0x36fa90, + 0x37070c, + 0x370a0c, + 0x370ecb, + 0x37184e, + 0x371f8b, + 0x3727cb, + 0x37378c, + 0x37914a, + 0x37950c, + 0x37980c, + 0x379b09, + 0x37b7cb, + 0x37ba88, + 0x37bc89, + 0x37bc8f, + 0x37d5cb, + 0x37e44a, + 0x37fd4c, + 0x380e09, + 0x381b88, + 0x38214b, + 0x382c0b, + 0x38418a, + 0x38440b, + 0x38488c, + 0x385548, + 0x38958b, + 0x38c04b, + 0x39000b, + 0x39180b, + 0x39c90b, + 0x39cbc9, + 0x39d10d, + 0x3a264a, + 0x3a3597, + 0x3a3dd8, + 0x3a6309, + 0x3a7b4b, + 0x3a9554, + 0x3a9a4b, + 0x3a9fca, + 0x3ab70a, + 0x3ab98b, + 0x3ad110, + 0x3ad511, + 0x3ae64a, + 0x3afa8d, + 0x3b018d, + 0x3b508b, + 0x3b5c46, + 0x221b83, + 0x73b76c03, + 0x37f706, + 0x292c85, + 0x396787, + 0x3215c6, + 0x1639f02, + 0x2b3809, + 0x32fd44, + 0x2e0bc8, + 0x24e103, + 0x2f6cc7, + 0x241b82, + 0x2b2c03, + 0x73e06c82, + 0x2cb006, + 0x2cc544, + 0x3b2e84, + 0x2616c3, + 0x2616c5, + 0x746c7282, + 0x74aae504, + 0x279747, + 0x1669e02, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x20abc3, + 0x204cc2, + 0x15f048, + 0x20d1c2, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x213e83, + 0x324156, + 0x325393, + 0x34f849, + 0x2957c8, + 0x364689, + 0x308b06, + 0x336f50, + 0x25c9d3, + 0x3072c8, + 0x344207, + 0x27e407, + 0x2475ca, + 0x373549, + 0x239789, + 0x29258b, + 0x367e06, + 0x314aca, + 0x2221c6, + 0x32f943, + 0x294985, + 0x22b888, + 0x2a920d, + 0x35ab0c, + 0x3a2107, + 0x379f8d, + 0x20c504, + 0x22ef0a, + 0x23064a, + 0x230b0a, + 0x20fe87, + 0x240387, + 0x243084, + 0x26cdc6, + 0x3aab84, + 0x2e26c8, + 0x2267c9, + 0x2b94c6, + 0x2b94c8, + 0x24c34d, + 0x2c9fc9, + 0x207d48, + 0x271647, + 0x2f8e8a, + 0x2539c6, + 0x2642c7, + 0x2c96c4, + 0x28e807, + 0x332eca, + 0x36f5ce, + 0x228fc5, + 0x28e70b, + 0x262089, + 0x2a8909, + 0x2129c7, + 0x29998a, + 0x225707, + 0x2ffd09, + 0x326b48, + 0x35dc4b, + 0x2e0405, + 0x38144a, + 0x223109, + 0x23908a, + 0x2ccb4b, + 0x383a0b, + 0x292315, + 0x2e6185, + 0x2716c5, + 0x2f424a, + 0x25980a, + 0x261e07, + 0x21d743, + 0x2a5c08, + 0x2d828a, + 0x223706, + 0x24ff09, + 0x26ebc8, + 0x2de404, + 0x242649, + 0x2c3608, + 0x2b1c07, + 0x20ce06, + 0x36f447, + 0x293cc7, + 0x242ac5, + 0x228e0c, + 0x258905, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x20d1c2, + 0x2d0783, + 0x204ac3, + 0x20abc3, + 0x200383, + 0x2d0783, + 0x204ac3, + 0x24a843, + 0x200383, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x15f048, + 0x20d1c2, + 0x2000c2, + 0x230d42, + 0x202f02, + 0x202382, + 0x261e82, + 0x46d0783, + 0x231b83, + 0x2135c3, + 0x332ec3, + 0x204303, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x201383, + 0x15f048, + 0x32df04, + 0x260087, + 0x263d43, + 0x37aa84, + 0x214543, + 0x212a43, + 0x332ec3, + 0x13ecc7, + 0x204cc2, + 0x168883, + 0x5a0d1c2, + 0x8d54d, + 0x8d88d, + 0x230d42, + 0x964c4, + 0x200382, + 0x5e963c8, + 0xf39c4, + 0x15f048, + 0x14020c2, + 0x1509cc6, + 0x20e443, + 0x26ae03, + 0x66d0783, + 0x22ef04, + 0x6a31b83, + 0x6f32ec3, + 0x20a3c2, + 0x2964c4, + 0x204ac3, + 0x2fc883, + 0x201882, + 0x200383, + 0x21c802, + 0x2f8043, + 0x202602, + 0x203f83, + 0x26ec83, + 0x206d02, + 0x15f048, + 0x20e443, + 0x2fc883, + 0x201882, + 0x2f8043, + 0x202602, + 0x203f83, + 0x26ec83, + 0x206d02, + 0x2f8043, + 0x202602, + 0x203f83, + 0x26ec83, + 0x206d02, + 0x2d0783, + 0x368883, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x204303, + 0x20fbc3, + 0x213184, + 0x204ac3, + 0x200383, + 0x210582, + 0x21aa03, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x368883, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x204ac3, + 0x200383, + 0x370145, + 0x217082, + 0x204cc2, + 0x15f048, + 0x1491b48, + 0x332ec3, + 0x2461c1, + 0x2096c1, + 0x202201, + 0x209441, + 0x24a5c1, + 0x27e081, + 0x24c0c1, + 0x2462c1, + 0x2e7481, + 0x30ed01, + 0x200141, + 0x200001, + 0x15f048, + 0x200701, + 0x200101, + 0x2000c1, + 0x201e41, + 0x200181, + 0x200941, + 0x200041, + 0x204ec1, + 0x200081, + 0x201481, + 0x200c01, + 0x2002c1, + 0x200381, + 0x200e81, + 0x21c2c1, + 0x2003c1, + 0x200201, + 0x200241, + 0x200a01, + 0x2019c1, + 0x201a81, + 0x2005c1, + 0x2007c1, + 0x200cc1, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x200382, + 0x200383, + 0x13ecc7, + 0xfcc7, + 0x28b86, + 0x3dcca, + 0x8cc48, + 0x58dc8, + 0x59207, + 0x62a46, + 0xde185, + 0x63c85, + 0x177ac6, + 0x125886, + 0x24ae04, + 0x31cdc7, + 0x15f048, + 0x2da904, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x332ec3, + 0x204303, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x217082, + 0x2c8dc3, + 0x21fd43, + 0x200603, + 0x202942, + 0x251d43, + 0x205283, + 0x21e743, + 0x200001, + 0x203e43, + 0x225b04, + 0x37f1c3, + 0x318cc3, + 0x21c403, + 0x360383, + 0xaad0783, + 0x23a184, + 0x21c3c3, + 0x22f143, + 0x231b83, + 0x2318c3, + 0x23a943, + 0x2a85c3, + 0x318c43, + 0x233ec3, + 0x201e43, + 0x253f84, + 0x2abc02, + 0x258683, + 0x25eb43, + 0x27bfc3, + 0x262883, + 0x201dc3, + 0x332ec3, + 0x208803, + 0x209e43, + 0x204143, + 0x210203, + 0x2ff083, + 0xae30043, + 0x2b1083, + 0x2113c3, + 0x22d603, + 0x20fbc3, + 0x226302, + 0x201683, + 0x204ac3, + 0x160abc3, + 0x27d643, + 0x20ff03, + 0x216ec3, + 0x200383, + 0x3b37c3, + 0x21aa03, + 0x241f03, + 0x304f43, + 0x2f8203, + 0x30c845, + 0x2202c3, + 0x2f8243, + 0x35ed83, + 0x218c84, + 0x265203, + 0x311883, + 0x2d8fc3, + 0x201383, + 0x217082, + 0x23bd83, + 0x308484, + 0x22fec4, + 0x22a843, + 0x15f048, + 0x4cc2, + 0x1442, + 0x2942, + 0x5ac2, + 0x2302, + 0x702, + 0x4e242, + 0x1c2, + 0x8a42, + 0xc02, + 0xf302, + 0xb602, + 0x73fc2, + 0x4c82, + 0x61e82, + 0x17902, + 0x3cf82, + 0x54c2, + 0x18b82, + 0xfc2, + 0x682, + 0x1bb82, + 0x1f82, + 0xc4c2, + 0x1702, + 0x20c42, + 0xa42, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x20d1c2, + 0x200383, + 0xc2d0783, + 0x332ec3, + 0x20fbc3, + 0x20dc42, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x6c82, + 0x2031c2, + 0x24ac42, + 0x15f048, + 0xd1c2, + 0x233482, + 0x208842, + 0x22f942, + 0x204182, + 0x209282, + 0x63c85, + 0x204702, + 0x201882, + 0x211f82, + 0x2034c2, + 0x217902, + 0x384982, + 0x201ac2, + 0x245742, + 0x13ecc7, + 0x169a8d, + 0xde209, + 0x56bcb, + 0xe3888, + 0x55109, + 0x332ec3, + 0x15f048, + 0x15f048, + 0x59b46, + 0x204cc2, + 0x24ae04, + 0x20d1c2, + 0x2d0783, + 0x2000c2, + 0x231b83, + 0x208a42, + 0x2da904, + 0x204303, + 0x2513c2, + 0x204ac3, + 0x200382, + 0x200383, + 0x2716c6, + 0x31c0cf, + 0x70d8c3, + 0x15f048, + 0x20d1c2, + 0x2135c3, + 0x332ec3, + 0x20fbc3, + 0x155afcb, + 0xde548, + 0x14ff507, + 0x13ecc7, + 0x20d1c2, + 0x2d0783, + 0x332ec3, + 0x204ac3, + 0x204cc2, + 0x200902, + 0x207f42, + 0xfad0783, + 0x2416c2, + 0x231b83, + 0x2101c2, + 0x22ad02, + 0x332ec3, + 0x2630c2, + 0x255302, + 0x2ae4c2, + 0x203742, + 0x291e02, + 0x209902, + 0x200b82, + 0x274842, + 0x258142, + 0x251b02, + 0x2b36c2, + 0x242602, + 0x246082, + 0x263c42, + 0x20fbc3, + 0x205f02, + 0x204ac3, + 0x231302, + 0x27de02, + 0x200383, + 0x251dc2, + 0x20c4c2, + 0x209f42, + 0x200b42, + 0x20c842, + 0x2e4742, + 0x220382, + 0x24d082, + 0x234f42, + 0x310c8a, + 0x347d0a, + 0x37e80a, + 0x3b5dc2, + 0x2046c2, + 0x204e82, + 0xff4f589, + 0x10324d0a, + 0x15926c7, + 0x1410c43, + 0x243d0, + 0x9402, + 0x24fe44, + 0x10ad0783, + 0x231b83, + 0x251304, + 0x332ec3, + 0x2964c4, + 0x204303, + 0x20fbc3, + 0x204ac3, + 0x20abc3, + 0x200383, + 0x2202c3, + 0x24abc3, + 0x15f048, + 0x14629c4, + 0x614c5, + 0x5f88a, + 0x1168c2, + 0x1a03c6, + 0x102d11, + 0x1134f589, + 0x61548, + 0x82a08, + 0x5e887, + 0xf82, + 0x19a18a, + 0x2ac47, + 0x15f048, + 0x10b708, + 0xbac7, + 0x16c1b74b, + 0x1082, + 0x15de87, + 0xdb4a, + 0x5e58f, + 0xfd4f, + 0x1c402, + 0xd1c2, + 0xa8508, + 0x185b0a, + 0x1681c8, + 0x3b02, + 0x5e30f, + 0xa3d4b, + 0x1672c8, + 0x13edc7, + 0x15104a, + 0x2f64b, + 0x11dd09, + 0x150f47, + 0x100c4c, + 0x1b3c47, + 0x18d18a, + 0x94b88, + 0x195a8e, + 0x28b8e, + 0x2aa8b, + 0x2b2cb, + 0x2d3cb, + 0x2e209, + 0x3558b, + 0x4a68d, + 0xe984b, + 0xec8cd, + 0xecc4d, + 0x18274a, + 0x2fd0b, + 0x3688b, + 0x42305, + 0x14243d0, + 0x125d8f, + 0x1264cf, + 0x48dcd, + 0x25910, + 0x1742, + 0x17203988, + 0xfb48, + 0x176f4745, + 0x505cb, + 0x117050, + 0x57488, + 0x2b48a, + 0x5f4c9, + 0x695c7, + 0x69907, + 0x69ac7, + 0x6c287, + 0x6d307, + 0x6dd07, + 0x6e487, + 0x6e8c7, + 0x6f487, + 0x6f787, + 0x6ffc7, + 0x70187, + 0x70347, + 0x70507, + 0x70807, + 0x70c47, + 0x718c7, + 0x71d87, + 0x729c7, + 0x72f07, + 0x730c7, + 0x73807, + 0x73e87, + 0x74087, + 0x74347, + 0x74507, + 0x746c7, + 0x75047, + 0x754c7, + 0x75987, + 0x76147, + 0x76407, + 0x76bc7, + 0x76d87, + 0x77107, + 0x77d07, + 0x78987, + 0x78d87, + 0x78f47, + 0x79107, + 0x79547, + 0x7a307, + 0x7a607, + 0x7a907, + 0x7aac7, + 0x7ae47, + 0x7b387, + 0xa9c2, + 0x4c94a, + 0x16dc87, + 0x178d528b, + 0x14d5296, + 0x19151, + 0xf080a, + 0xa838a, + 0x59b46, + 0xd2acb, + 0x642, + 0x2e891, + 0x94609, + 0x9a109, + 0x74842, + 0xa4f4a, + 0xaa689, + 0xab24f, + 0xaca4e, + 0xad708, + 0x18d82, + 0x15da89, + 0x18b88e, + 0xfd08c, + 0xf254f, + 0x146ce, + 0x23b4c, + 0x2ccc9, + 0x2db51, + 0x465c8, + 0x482d2, + 0x49fcd, + 0x82bcd, + 0x19090b, + 0x3d2d5, + 0x4c809, + 0x4ec0a, + 0x4f489, + 0x5ecd0, + 0x72c4b, + 0x79f4f, + 0x7c48b, + 0x8340c, + 0x84610, + 0x8894a, + 0x8dd0d, + 0x16618e, + 0x1ae00a, + 0x8f7cc, + 0x93994, + 0x94291, + 0xa494b, + 0xa578f, + 0xa7bcd, + 0xac3ce, + 0xb1acc, + 0xb220c, + 0xdc90b, + 0xdcc0e, + 0x122110, + 0x11640b, + 0x17a64d, + 0x1af38f, + 0xb798c, + 0xb934e, + 0xbb311, + 0xc3ccc, + 0xc5a47, + 0x15e58d, + 0x12b50c, + 0x14be50, + 0xd1b4d, + 0xd8e47, + 0xe2350, + 0xfa008, + 0xfb08b, + 0x150bcf, + 0x17de88, + 0xf0a0d, + 0x181d50, + 0x17fb1846, + 0xb6003, + 0x1b02, + 0xd0309, + 0x5ac0a, + 0x1084c6, + 0x180dff49, + 0x13203, + 0xdab91, + 0xdafc9, + 0xdc047, + 0x5e40b, + 0xe4a90, + 0xe4f4c, + 0xe5385, + 0x126cc8, + 0x19dc0a, + 0x129607, + 0x1002, + 0x12464a, + 0x25e49, + 0x3a20a, + 0x8eacf, + 0x44f4b, + 0x1b280c, + 0x1b2ad2, + 0xaa085, + 0x2124a, + 0x186f2fc5, + 0x17698c, + 0x121203, + 0x184982, + 0xf86ca, + 0x96b88, + 0xeca88, + 0x14a587, + 0xd42, + 0x2602, + 0x3f390, + 0x1702, + 0x1aa2cf, + 0x177ac6, + 0x301ce, + 0xe7fcb, + 0x1ae208, + 0xd6c09, + 0x17cd92, + 0x7c0d, + 0x56608, + 0x56a89, + 0x5700d, + 0x59c89, + 0x5a28b, + 0x5b088, + 0x5f6c8, + 0x68bc8, + 0x68e49, + 0x6904a, + 0x6c8cc, + 0xe5d0a, + 0x104f87, + 0x16b2cd, + 0xf910b, + 0x12fb4c, + 0x1a05d0, + 0x6902, + 0x1968cd, + 0x16c2, + 0x11fc2, + 0x104eca, + 0xf070a, + 0xf6bcb, + 0x36a4c, + 0x10b48e, + 0x21ccd, + 0x1ab488, + 0x6c82, + 0x1166118e, + 0x11f6a18e, + 0x1266c00a, + 0x12ed0a0e, + 0x137156ce, + 0x13f2a00c, + 0x15926c7, + 0x15926c9, + 0x1410c43, + 0x14731e8c, + 0x14f3a009, + 0x1409402, + 0x610d1, + 0x16a0d1, + 0x6bf4d, + 0xd0951, + 0x11b1d1, + 0x129f4f, + 0x131dcf, + 0x139f4c, + 0x14a94d, + 0x18d555, + 0x1ace0c, + 0x1b41cc, + 0x1b5850, + 0x940c, + 0x5838c, + 0xedc19, + 0x1a6719, + 0x115419, + 0x15c754, + 0x17f854, + 0x198594, + 0x19ae14, + 0x1a9054, + 0x1577fb09, + 0x15d98849, + 0x167b4289, + 0x11b6b089, + 0x9402, + 0x1236b089, + 0x9402, + 0xedc0a, + 0x9402, + 0x12b6b089, + 0x9402, + 0xedc0a, + 0x9402, + 0x1336b089, + 0x9402, + 0x13b6b089, + 0x9402, + 0x1436b089, + 0x9402, + 0xedc0a, + 0x9402, + 0x14b6b089, + 0x9402, + 0xedc0a, + 0x9402, + 0x1536b089, + 0x9402, + 0x15b6b089, + 0x9402, + 0x1636b089, + 0x9402, + 0x16b6b089, + 0x9402, + 0xedc0a, + 0x9402, + 0x102d05, + 0x19a184, + 0x11d644, + 0x1a4884, + 0xbfc04, + 0x2144, + 0x5e884, + 0x1482283, + 0x1420183, + 0xffd84, + 0x1542b83, + 0x1742, + 0x21cc3, + 0x204cc2, + 0x20d1c2, + 0x2000c2, + 0x2041c2, + 0x208a42, + 0x200382, + 0x202602, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204143, + 0x204ac3, + 0x200383, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x204ac3, + 0x200383, + 0x3b943, + 0x332ec3, + 0x204cc2, + 0x368883, + 0x1a2d0783, + 0x20ef47, + 0x332ec3, + 0x205d83, + 0x213184, + 0x204ac3, + 0x200383, + 0x25084a, + 0x2716c5, + 0x21aa03, + 0x205bc2, + 0x15f048, + 0x15f048, + 0xd1c2, + 0x11f0c2, + 0x15dfc5, + 0x15f048, + 0xd0783, + 0x1ae3db07, + 0xcfd46, + 0x1b1acd05, + 0xcfe07, + 0xa54a, + 0xa408, + 0xb747, + 0x5f2c8, + 0x18c407, + 0xed30f, + 0x3ab07, + 0x165bc6, + 0x117050, + 0x122f0f, + 0x108544, + 0x1b4cfece, + 0xafd0c, + 0x11de8a, + 0xac687, + 0x12d54a, + 0x60989, + 0xc2f4a, + 0x77a8a, + 0x1084c6, + 0xac74a, + 0x11a58a, + 0x154009, + 0xda448, + 0xda746, + 0xde74d, + 0xb9905, + 0x5a107, + 0x16df94, + 0xfe58b, + 0x16710a, + 0xa8bcd, + 0x28b83, + 0x28b83, + 0x28b86, + 0x28b83, + 0x168883, + 0x15f048, + 0xd1c2, + 0x51304, + 0x8cdc3, + 0x170145, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x205283, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x29a2c3, + 0x24abc3, + 0x205283, + 0x24ae04, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x209103, + 0x2d0783, + 0x231b83, + 0x2041c3, + 0x2135c3, + 0x332ec3, + 0x2964c4, + 0x23a0c3, + 0x22d603, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x21aa03, + 0x38c743, + 0x1d2d0783, + 0x231b83, + 0x2c3ec3, + 0x332ec3, + 0x2075c3, + 0x22d603, + 0x200383, + 0x2054c3, + 0x343c44, + 0x15f048, + 0x1dad0783, + 0x231b83, + 0x2ad7c3, + 0x332ec3, + 0x20fbc3, + 0x213184, + 0x204ac3, + 0x200383, + 0x21d7c3, + 0x15f048, + 0x1e2d0783, + 0x231b83, + 0x2135c3, + 0x20abc3, + 0x200383, + 0x15f048, + 0x15926c7, + 0x368883, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x213184, + 0x204ac3, + 0x200383, + 0x13ecc7, + 0x16e1cb, + 0xdb3c4, + 0xb9905, + 0x1491b48, + 0xae2cd, + 0x1f68a405, + 0x192c4, + 0x1a5c3, + 0x367fc5, + 0x15f048, + 0x1d202, + 0x2803, + 0xf7286, + 0x32f448, + 0x304507, + 0x24ae04, + 0x3b3006, + 0x3b5706, + 0x15f048, + 0x310683, + 0x2384c9, + 0x2bdad5, + 0xbdadf, + 0x2d0783, + 0x39a9d2, + 0xf5806, + 0x10cfc5, + 0x2b48a, + 0x5f4c9, + 0x39a78f, + 0x2da904, + 0x20f345, + 0x2fee50, + 0x2959c7, + 0x20abc3, + 0x2842c8, + 0x1257c6, + 0x2b400a, + 0x200e84, + 0x2f2a03, + 0x2716c6, + 0x205bc2, + 0x26b44b, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x2f74c3, + 0x20d1c2, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x205d83, + 0x223103, + 0x200383, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x204ac3, + 0x200383, + 0x204cc2, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x24ae04, + 0x2d0783, + 0x231b83, + 0x222044, + 0x204ac3, + 0x200383, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x209e43, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x262fc3, + 0x1e303, + 0x5d83, + 0x204ac3, + 0x200383, + 0x310c8a, + 0x32a949, + 0x34184b, + 0x341f8a, + 0x347d0a, + 0x356e8b, + 0x37300a, + 0x37914a, + 0x37e80a, + 0x37ea8b, + 0x39d949, + 0x39f84a, + 0x39fbcb, + 0x3a9d0b, + 0x3b4a8a, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x10c9c9, + 0x15f048, + 0x2d0783, + 0x2695c4, + 0x200c82, + 0x213184, + 0x3ac705, + 0x205283, + 0x24ae04, + 0x2d0783, + 0x23a184, + 0x231b83, + 0x251304, + 0x2da904, + 0x2964c4, + 0x22d603, + 0x204ac3, + 0x200383, + 0x293ac5, + 0x209103, + 0x21aa03, + 0x22c6c3, + 0x258a04, + 0x262904, + 0x35d705, + 0x15f048, + 0x306e44, + 0x20e546, + 0x28a8c4, + 0x20d1c2, + 0x361ac7, + 0x253587, + 0x24f0c4, + 0x25d8c5, + 0x2d1d45, + 0x2b0405, + 0x2964c4, + 0x23cfc8, + 0x33f306, + 0x311f48, + 0x227b05, + 0x2e0405, + 0x377004, + 0x200383, + 0x2f39c4, + 0x355f46, + 0x2717c3, + 0x258a04, + 0x291a45, + 0x363644, + 0x234e84, + 0x205bc2, + 0x25e206, + 0x392206, + 0x3022c5, + 0x204cc2, + 0x368883, + 0x24e0d1c2, + 0x232dc4, + 0x208a42, + 0x20fbc3, + 0x25e402, + 0x204ac3, + 0x200382, + 0x213e83, + 0x24abc3, + 0x15f048, + 0x15f048, + 0x332ec3, + 0x204cc2, + 0x25a0d1c2, + 0x332ec3, + 0x2702c3, + 0x23a0c3, + 0x32bc44, + 0x204ac3, + 0x200383, + 0x15f048, + 0x204cc2, + 0x2620d1c2, + 0x2d0783, + 0x204ac3, + 0x200383, + 0x682, + 0x2044c2, + 0x217082, + 0x205d83, + 0x2ec383, + 0x204cc2, + 0x15f048, + 0x13ecc7, + 0x20d1c2, + 0x231b83, + 0x251304, + 0x202743, + 0x332ec3, + 0x209e43, + 0x20fbc3, + 0x204ac3, + 0x2183c3, + 0x200383, + 0x21d743, + 0x1286d3, + 0x12cb54, + 0x13ecc7, + 0x1fd86, + 0x5ae0b, + 0x28b86, + 0x58c07, + 0x130089, + 0xe9cca, + 0x8cb0d, + 0x16978c, + 0x13d64a, + 0x63c85, + 0xa588, + 0x177ac6, + 0x125886, + 0x201742, + 0x827cc, + 0x19a347, + 0x23551, + 0x2d0783, + 0x5f245, + 0x102c4, + 0x274341c6, + 0x19146, + 0x178146, + 0x920ca, + 0xb2f03, + 0x27a5c984, + 0x130045, + 0xa383, + 0xd2b8c, + 0xf6188, + 0xbaf48, + 0xa3bc9, + 0x20c48, + 0x141dd06, + 0xfbc88, + 0x5e884, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x204cc2, + 0x20d1c2, + 0x332ec3, + 0x20a3c2, + 0x204ac3, + 0x200383, + 0x213e83, + 0x36388f, + 0x363c4e, + 0x15f048, + 0x2d0783, + 0x4cd07, + 0x231b83, + 0x332ec3, + 0x204303, + 0x204ac3, + 0x200383, + 0x21d0c3, + 0x239c47, + 0x200142, + 0x2c1949, + 0x201442, + 0x23f68b, + 0x2b5b8a, + 0x2bcfc9, + 0x200282, + 0x262b46, + 0x26d615, + 0x23f7d5, + 0x274a13, + 0x23fd53, + 0x202342, + 0x20d605, + 0x3ab1cc, + 0x24698b, + 0x29a745, + 0x205ac2, + 0x289c02, + 0x386746, + 0x200f82, + 0x25fb86, + 0x294d0d, + 0x255dcc, + 0x224444, + 0x201342, + 0x203782, + 0x248688, + 0x202302, + 0x208886, + 0x303bc4, + 0x26d7d5, + 0x274b93, + 0x210b83, + 0x33070a, + 0x2f0187, + 0x3b2209, + 0x32dc47, + 0x3124c2, + 0x200002, + 0x3a4386, + 0x20a0c2, + 0x15f048, + 0x200802, + 0x211cc2, + 0x27d407, + 0x3b3507, + 0x21c7c5, + 0x201082, + 0x21d707, + 0x21d8c8, + 0x2413c2, + 0x2c2fc2, + 0x22c1c2, + 0x20e542, + 0x23b688, + 0x218443, + 0x2b72c8, + 0x2e078d, + 0x21fe43, + 0x226288, + 0x23e88f, + 0x23ec4e, + 0x24ac8a, + 0x229d11, + 0x22a190, + 0x2bf0cd, + 0x2bf40c, + 0x38c5c7, + 0x330887, + 0x3b30c9, + 0x204f02, + 0x200702, + 0x25a6cc, + 0x25a9cb, + 0x202ac2, + 0x2dcac6, + 0x20db42, + 0x20c502, + 0x21c402, + 0x20d1c2, + 0x384684, + 0x23c7c7, + 0x220802, + 0x242c07, + 0x243c47, + 0x2271c2, + 0x20e482, + 0x24cbc5, + 0x204d02, + 0x20cb4e, + 0x36f1cd, + 0x231b83, + 0x353a0e, + 0x2c0b8d, + 0x3ab643, + 0x201842, + 0x206744, + 0x208182, + 0x220a42, + 0x33e805, + 0x348447, + 0x372202, + 0x2041c2, + 0x250f07, + 0x2543c8, + 0x2abc02, + 0x2aa106, + 0x25a54c, + 0x25a88b, + 0x20da42, + 0x26588f, + 0x265c50, + 0x26604f, + 0x266415, + 0x266954, + 0x266e4e, + 0x2671ce, + 0x26754f, + 0x26790e, + 0x267c94, + 0x268193, + 0x26864d, + 0x27b549, + 0x28dbc3, + 0x200182, + 0x237b85, + 0x206506, + 0x208a42, + 0x21a2c7, + 0x332ec3, + 0x200642, + 0x36edc8, + 0x229f51, + 0x22a390, + 0x200bc2, + 0x28d387, + 0x200b02, + 0x205fc7, + 0x201b02, + 0x32f249, + 0x386707, + 0x281408, + 0x234006, + 0x2cf4c3, + 0x2cf4c5, + 0x231e02, + 0x204842, + 0x3a4785, + 0x376e05, + 0x205e82, + 0x245f43, + 0x3636c7, + 0x210687, + 0x204982, + 0x3aae04, + 0x214183, + 0x2c9209, + 0x2ed188, + 0x205d82, + 0x2032c2, + 0x26e2c7, + 0x282185, + 0x2ab548, + 0x20d2c7, + 0x216143, + 0x372306, + 0x2bef4d, + 0x2bf2cc, + 0x280346, + 0x208842, + 0x2017c2, + 0x201f02, + 0x23e70f, + 0x23eb0e, + 0x2d1dc7, + 0x203cc2, + 0x2c3345, + 0x2c3346, + 0x20bcc2, + 0x205f02, + 0x28f406, + 0x205f03, + 0x205f06, + 0x2ca585, + 0x2ca58d, + 0x2cab55, + 0x2cb38c, + 0x2cc28d, + 0x2cc652, + 0x20b602, + 0x273fc2, + 0x201302, + 0x240fc6, + 0x2fcf46, + 0x201002, + 0x206586, + 0x211f82, + 0x37edc5, + 0x202382, + 0x20cc89, + 0x2df2cc, + 0x2df60b, + 0x200382, + 0x255688, + 0x213a02, + 0x204c82, + 0x246746, + 0x36b005, + 0x235007, + 0x2567c5, + 0x294805, + 0x24cd82, + 0x20a642, + 0x217902, + 0x2f2847, + 0x24410d, + 0x24448c, + 0x2b3387, + 0x2aa082, + 0x23cf82, + 0x24ba48, + 0x2d0488, + 0x2e5f88, + 0x2f09c4, + 0x2dce87, + 0x2ee483, + 0x2b6042, + 0x200e82, + 0x2f11c9, + 0x395e87, + 0x2054c2, + 0x277245, + 0x201202, + 0x26a102, + 0x349c43, + 0x349c46, + 0x2f74c2, + 0x2f7fc2, + 0x201402, + 0x3b3fc6, + 0x206687, + 0x207842, + 0x200e02, + 0x38bc8f, + 0x35384d, + 0x2b714e, + 0x2c0a0c, + 0x2003c2, + 0x205502, + 0x233e45, + 0x3b4e86, + 0x201ec2, + 0x200fc2, + 0x200682, + 0x20d244, + 0x2e0604, + 0x2d29c6, + 0x202602, + 0x27e787, + 0x22d703, + 0x22d708, + 0x24b048, + 0x390787, + 0x240ec6, + 0x20e5c2, + 0x23b383, + 0x23b387, + 0x272846, + 0x2e4385, + 0x2f0d48, + 0x206342, + 0x34a007, + 0x220c42, + 0x33c282, + 0x203b82, + 0x2dbe09, + 0x22fb02, + 0x200242, + 0x240183, + 0x319ac7, + 0x2018c2, + 0x2df44c, + 0x2df74b, + 0x2803c6, + 0x20a2c5, + 0x222e82, + 0x200a42, + 0x2bd306, + 0x235b83, + 0x39c147, + 0x23bb02, + 0x203382, + 0x26d495, + 0x23f995, + 0x2748d3, + 0x23fed3, + 0x2934c7, + 0x2b5948, + 0x2fb310, + 0x30ee4f, + 0x2b5953, + 0x2bcd92, + 0x2c1510, + 0x2ca1cf, + 0x2d57d2, + 0x2d84d1, + 0x2d9513, + 0x2dbbd2, + 0x2dd20f, + 0x2e57ce, + 0x2f5092, + 0x2f6351, + 0x2f754f, + 0x2f834e, + 0x300011, + 0x355810, + 0x35f212, + 0x3702d1, + 0x2f9bc6, + 0x307487, + 0x373387, + 0x204b42, + 0x284e05, + 0x2febc7, + 0x217082, + 0x203142, + 0x2293c5, + 0x21ee43, + 0x35d986, + 0x2442cd, + 0x24460c, + 0x206602, + 0x3ab04b, + 0x24684a, + 0x30be4a, + 0x2bbf49, + 0x2ef68b, + 0x20d40d, + 0x2ff2cc, + 0x24890a, + 0x275b0c, + 0x27afcb, + 0x29a58c, + 0x2fa34b, + 0x2df243, + 0x35ee06, + 0x3a6502, + 0x2f8b82, + 0x2db2c3, + 0x202502, + 0x202503, + 0x245886, + 0x2665c7, + 0x365146, + 0x385cc8, + 0x2d0188, + 0x2d3186, + 0x2019c2, + 0x301c8d, + 0x301fcc, + 0x2da9c7, + 0x306d07, + 0x21fdc2, + 0x21ac02, + 0x23b302, + 0x254782, + 0x20d1c2, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x213184, + 0x204ac3, + 0x200383, + 0x213e83, + 0x204cc2, + 0x204e02, + 0x29a94005, + 0x29e02e85, + 0x2a3177c6, + 0x15f048, + 0x2a6b5145, + 0x20d1c2, + 0x2000c2, + 0x2ab9c685, + 0x2ae83305, + 0x2b283e07, + 0x2b68b309, + 0x2ba47ac4, + 0x208a42, + 0x200642, + 0x2bf72245, + 0x2c293149, + 0x2c71db88, + 0x2cab2085, + 0x2cf363c7, + 0x2d219b08, + 0x2d6e8605, + 0x2da5b4c6, + 0x2de346c9, + 0x2e2b8648, + 0x2e6c4b48, + 0x2ea9cf0a, + 0x2ee52104, + 0x2f2d6585, + 0x2f6becc8, + 0x2fb51245, + 0x2184c2, + 0x2fe63b83, + 0x302a7786, + 0x3064ea48, + 0x30a24f06, + 0x30ecec88, + 0x3132d1c6, + 0x316e4444, + 0x202082, + 0x31b630c7, + 0x31eaeb84, + 0x3227dc47, + 0x327a1087, + 0x200382, + 0x32aa0685, + 0x32e03bc4, + 0x332d1807, + 0x3362adc7, + 0x33a87406, + 0x33e36085, + 0x3429b807, + 0x346d2688, + 0x34a37f07, + 0x34eb0689, + 0x3538e6c5, + 0x35719c07, + 0x35a92e46, + 0x35e62d48, + 0x2460cd, + 0x24cf09, + 0x2f484b, + 0x25534b, + 0x27de4b, + 0x2aa88b, + 0x30f20b, + 0x30f4cb, + 0x30fd49, + 0x310f0b, + 0x3111cb, + 0x311ccb, + 0x31284a, + 0x312d8a, + 0x31338c, + 0x31608b, + 0x3166ca, + 0x327eca, + 0x3328ce, + 0x333a4e, + 0x333dca, + 0x335d8a, + 0x3369cb, + 0x336c8b, + 0x337a4b, + 0x34c7cb, + 0x34cdca, + 0x34da8b, + 0x34dd4a, + 0x34dfca, + 0x34e24a, + 0x373ecb, + 0x37a2cb, + 0x37c38e, + 0x37c70b, + 0x383ecb, + 0x38500b, + 0x38984a, + 0x389ac9, + 0x389d0a, + 0x38b38a, + 0x39e50b, + 0x39fe8b, + 0x3a09ca, + 0x3a28cb, + 0x3a588b, + 0x3b44cb, + 0x36285b88, + 0x3668c289, + 0x36aa3a49, + 0x36ee0bc8, + 0x33c685, + 0x202943, + 0x212944, + 0x206885, + 0x247806, + 0x25b245, + 0x28adc4, + 0x21a1c8, + 0x30af85, + 0x297a44, + 0x209907, + 0x2a280a, + 0x361d8a, + 0x3101c7, + 0x211f47, + 0x2fdec7, + 0x255b47, + 0x2fad45, + 0x343d06, + 0x22cb47, + 0x26fec4, + 0x2e6b46, + 0x2e6a46, + 0x208305, + 0x3492c4, + 0x38ec86, + 0x2a1647, + 0x22d046, + 0x351b47, + 0x26a783, + 0x2b4846, + 0x232045, + 0x283f07, + 0x270e0a, + 0x26dfc4, + 0x218ec8, + 0x2affc9, + 0x2cb147, + 0x334646, + 0x255908, + 0x200a49, + 0x3b23c4, + 0x2210c4, + 0x278285, + 0x22c848, + 0x2c7f47, + 0x2a7109, + 0x2f9cc8, + 0x347a86, + 0x24c646, + 0x29de88, + 0x354c46, + 0x202e85, + 0x2874c6, + 0x27e108, + 0x254b86, + 0x25d14b, + 0x29dac6, + 0x29f50d, + 0x3b1785, + 0x2aea46, + 0x20f505, + 0x349909, + 0x2abe87, + 0x3195c8, + 0x292986, + 0x29e709, + 0x364546, + 0x270d85, + 0x2a4dc6, + 0x2c99c6, + 0x2cdb89, + 0x200846, + 0x253087, + 0x277885, + 0x202383, + 0x25d2c5, + 0x29f7c7, + 0x358e06, + 0x3b1689, + 0x3177c6, + 0x287706, + 0x215ec9, + 0x286ec9, + 0x2a5607, + 0x2cf688, + 0x377f89, + 0x284a88, + 0x379386, + 0x2d9dc5, + 0x23cb4a, + 0x287786, + 0x3a8506, + 0x2cbbc5, + 0x272188, + 0x215587, + 0x22e68a, + 0x251746, + 0x24d345, + 0x329cc6, + 0x2d6347, + 0x334507, + 0x2c4145, + 0x270f45, + 0x2b2f86, + 0x351746, + 0x387046, + 0x2b8bc4, + 0x286209, + 0x28d146, + 0x30e50a, + 0x222848, + 0x309148, + 0x361d8a, + 0x2145c5, + 0x2a1585, + 0x37f588, + 0x2b6348, + 0x21b507, + 0x293846, + 0x320d48, + 0x3674c7, + 0x285188, + 0x2b9206, + 0x2885c8, + 0x29ad46, + 0x227c87, + 0x272b06, + 0x38ec86, + 0x25d9ca, + 0x384706, + 0x2d9dc9, + 0x2b5446, + 0x2e3d8a, + 0x2e4449, + 0x362586, + 0x2ba844, + 0x237c4d, + 0x28c507, + 0x3268c6, + 0x2c4a05, + 0x3645c5, + 0x375846, + 0x2d1649, + 0x2b4287, + 0x27f886, + 0x2c9546, + 0x28ae49, + 0x264a04, + 0x2d4a44, + 0x3ac808, + 0x245c46, + 0x277308, + 0x2e66c8, + 0x202fc7, + 0x3a80c9, + 0x387247, + 0x2b500a, + 0x2498cf, + 0x250b0a, + 0x233c45, + 0x27e345, + 0x218745, + 0x303b07, + 0x20e183, + 0x2cf888, + 0x3028c6, + 0x3029c9, + 0x2d4006, + 0x3aeb47, + 0x29e4c9, + 0x3194c8, + 0x2cbc87, + 0x30d803, + 0x33c705, + 0x20e105, + 0x2b8a0b, + 0x351304, + 0x257984, + 0x27cbc6, + 0x30e887, + 0x38b10a, + 0x2757c7, + 0x38c807, + 0x283305, + 0x200045, + 0x240909, + 0x38ec86, + 0x27564d, + 0x35af05, + 0x29f4c3, + 0x20ad83, + 0x34f785, + 0x347845, + 0x255908, + 0x280047, + 0x2d47c6, + 0x2a36c6, + 0x2296c5, + 0x231e47, + 0x202ac7, + 0x33f1c7, + 0x2d660a, + 0x2b4908, + 0x2b8bc4, + 0x254907, + 0x281607, + 0x3400c6, + 0x26f8c7, + 0x2eaa08, + 0x2e9e88, + 0x2abd86, + 0x2d1ec8, + 0x2008c4, + 0x22cb46, + 0x247d86, + 0x216646, + 0x3a8c46, + 0x22d9c4, + 0x255c06, + 0x2c31c6, + 0x29d406, + 0x235ec6, + 0x20ac46, + 0x2ea846, + 0x2d46c8, + 0x3af1c8, + 0x2d6e48, + 0x25b448, + 0x37f506, + 0x212485, + 0x2e2006, + 0x2b2105, + 0x388c87, + 0x216605, + 0x2136c3, + 0x203ec5, + 0x33fb44, + 0x20ad85, + 0x2266c3, + 0x338007, + 0x34bc88, + 0x351c06, + 0x32250d, + 0x27e306, + 0x29c985, + 0x2d9743, + 0x2be689, + 0x264b86, + 0x23c0c6, + 0x2a4ec4, + 0x250a87, + 0x233006, + 0x2b4545, + 0x234a83, + 0x207ac4, + 0x2817c6, + 0x2ded04, + 0x32b8c8, + 0x39ba49, + 0x24d849, + 0x2a4cca, + 0x387acd, + 0x208d07, + 0x224bc6, + 0x20a684, + 0x28b309, + 0x28a088, + 0x28c106, + 0x23dfc6, + 0x26f8c7, + 0x2b9a46, + 0x21f706, + 0x3ac246, + 0x3a110a, + 0x219b08, + 0x2464c5, + 0x26fd09, + 0x28568a, + 0x2fa988, + 0x2a0ec8, + 0x29bd48, + 0x2af08c, + 0x316305, + 0x2a3948, + 0x2e8e06, + 0x319746, + 0x3aea07, + 0x2756c5, + 0x287645, + 0x24d709, + 0x213487, + 0x302985, + 0x227487, + 0x20ad83, + 0x2c8485, + 0x20b8c8, + 0x25d647, + 0x2a0d89, + 0x2de405, + 0x307784, + 0x2a6508, + 0x363207, + 0x2cbe48, + 0x368c48, + 0x2dc805, + 0x304286, + 0x278686, + 0x2ac1c9, + 0x31c407, + 0x2b29c6, + 0x3b3907, + 0x221d03, + 0x247ac4, + 0x2a7885, + 0x231f84, + 0x383c84, + 0x286947, + 0x35bdc7, + 0x27fa44, + 0x2a0bd0, + 0x367c87, + 0x200045, + 0x2536cc, + 0x225344, + 0x2b1588, + 0x227b89, + 0x2b4e06, + 0x220d88, + 0x247344, + 0x247348, + 0x22ec86, + 0x235d48, + 0x2a1c06, + 0x2d328b, + 0x202385, + 0x2cb988, + 0x216ac4, + 0x39be8a, + 0x2a0d89, + 0x381346, + 0x218808, + 0x25ebc5, + 0x2b69c4, + 0x2b1486, + 0x33f088, + 0x285b88, + 0x340bc6, + 0x31d104, + 0x23cac6, + 0x3872c7, + 0x27db47, + 0x26f8cf, + 0x205547, + 0x362647, + 0x38eb45, + 0x352245, + 0x2a52c9, + 0x30e1c6, + 0x284045, + 0x2871c7, + 0x2c1108, + 0x29d505, + 0x272b06, + 0x222688, + 0x224f0a, + 0x2e13c8, + 0x28f187, + 0x249d06, + 0x26fcc6, + 0x20df43, + 0x218303, + 0x285849, + 0x377e09, + 0x2b0586, + 0x2de405, + 0x2163c8, + 0x218808, + 0x354dc8, + 0x3ac2cb, + 0x322747, + 0x30b249, + 0x26fb48, + 0x335844, + 0x349588, + 0x291409, + 0x2b2cc5, + 0x303a07, + 0x247b45, + 0x285a88, + 0x293e8b, + 0x29b550, + 0x2ae605, + 0x216a0c, + 0x2d4985, + 0x283383, + 0x29f386, + 0x2c0984, + 0x203cc6, + 0x2a1647, + 0x222704, + 0x24b388, + 0x2cf74d, + 0x35e245, + 0x208d44, + 0x233984, + 0x287bc9, + 0x2990c8, + 0x317647, + 0x22ed08, + 0x2862c8, + 0x27fb85, + 0x20f747, + 0x27fb07, + 0x238287, + 0x270f49, + 0x232e89, + 0x242d86, + 0x2bf606, + 0x26fb06, + 0x289845, + 0x39b744, + 0x3b0e86, + 0x3b5306, + 0x27fbc8, + 0x2d600b, + 0x26de87, + 0x20a684, + 0x364a46, + 0x367a47, + 0x34f0c5, + 0x263645, + 0x212dc4, + 0x232e06, + 0x3b0f08, + 0x28b309, + 0x252f86, + 0x289a48, + 0x2b4606, + 0x342708, + 0x34c34c, + 0x27fa46, + 0x29c64d, + 0x29cacb, + 0x253145, + 0x202c07, + 0x200946, + 0x3343c8, + 0x242e09, + 0x393c88, + 0x200045, + 0x2e2a87, + 0x284b88, + 0x358649, + 0x344106, + 0x252e8a, + 0x334148, + 0x393acb, + 0x3298cc, + 0x247448, + 0x280e46, + 0x303d08, + 0x3a8347, + 0x363489, + 0x29304d, + 0x29f986, + 0x21e608, + 0x3af089, + 0x2bfd08, + 0x2886c8, + 0x2c3a0c, + 0x2c5047, + 0x2c5507, + 0x270d85, + 0x31e5c7, + 0x2c0fc8, + 0x2b1506, + 0x2aaccc, + 0x2f55c8, + 0x2d0d88, + 0x2ba286, + 0x20de87, + 0x242f84, + 0x25b448, + 0x28f50c, + 0x353d0c, + 0x233cc5, + 0x2d2887, + 0x31d086, + 0x20de06, + 0x349ac8, + 0x2027c4, + 0x22d04b, + 0x27e8cb, + 0x249d06, + 0x2cf5c7, + 0x31a2c5, + 0x276545, + 0x22d186, + 0x25eb85, + 0x3512c5, + 0x2cd5c7, + 0x27d1c9, + 0x351904, + 0x34ee05, + 0x2e6fc5, + 0x2dea88, + 0x2287c5, + 0x2bca49, + 0x37aac7, + 0x37aacb, + 0x244806, + 0x2d4409, + 0x349208, + 0x27c385, + 0x238388, + 0x232ec8, + 0x23a6c7, + 0x2e2f87, + 0x2869c9, + 0x235c87, + 0x289149, + 0x2acf8c, + 0x2b0588, + 0x2b6189, + 0x321f87, + 0x286389, + 0x35bf07, + 0x3299c8, + 0x3a8285, + 0x22cac6, + 0x2c4a48, + 0x2f0fc8, + 0x285549, + 0x351307, + 0x276605, + 0x36b6c9, + 0x2b9ec6, + 0x2323c4, + 0x2323c6, + 0x24e8c8, + 0x252847, + 0x2d6208, + 0x2d1f89, + 0x3a1e07, + 0x2a29c6, + 0x202cc4, + 0x203f49, + 0x20f5c8, + 0x2ba147, + 0x343e06, + 0x20e1c6, + 0x3a8484, + 0x247f86, + 0x201b83, + 0x296789, + 0x202346, + 0x2d2205, + 0x2a36c6, + 0x24f305, + 0x285008, + 0x247187, + 0x244b46, + 0x39c6c6, + 0x309148, + 0x2a5447, + 0x29f9c5, + 0x2a09c8, + 0x3ada88, + 0x334148, + 0x2d4845, + 0x22cb46, + 0x24d609, + 0x2ac044, + 0x24f18b, + 0x21f40b, + 0x2463c9, + 0x20ad83, + 0x25bf05, + 0x213a86, + 0x313788, + 0x249844, + 0x351c06, + 0x2d6749, + 0x2bc545, + 0x2cd506, + 0x363206, + 0x2163c4, + 0x2aec0a, + 0x2d2148, + 0x2f0fc6, + 0x2c2585, + 0x3b1987, + 0x231147, + 0x304284, + 0x21f647, + 0x2165c4, + 0x2165c6, + 0x203c83, + 0x270f45, + 0x350e85, + 0x205788, + 0x254ac5, + 0x27f789, + 0x25b287, + 0x25b28b, + 0x2a758c, + 0x2a810a, + 0x3363c7, + 0x204083, + 0x212188, + 0x2d4a05, + 0x29d585, + 0x20ae44, + 0x3298c6, + 0x227b86, + 0x247fc7, + 0x2349cb, + 0x22d9c4, + 0x2e8f04, + 0x219e04, + 0x2cd786, + 0x222704, + 0x22c948, + 0x33c5c5, + 0x244d85, + 0x354d07, + 0x202d09, + 0x347845, + 0x37584a, + 0x277789, + 0x29810a, + 0x3a1249, + 0x335fc4, + 0x2c9605, + 0x2b9b48, + 0x2d18cb, + 0x278285, + 0x2f0086, + 0x2200c4, + 0x27fcc6, + 0x3a1c89, + 0x364b07, + 0x317988, + 0x387e46, + 0x387247, + 0x285b88, + 0x380946, + 0x37f0c4, + 0x363f87, + 0x366085, + 0x377547, + 0x25b4c4, + 0x2008c6, + 0x2f1e08, + 0x29cc88, + 0x2e88c7, + 0x27d548, + 0x29ae05, + 0x20abc4, + 0x361c88, + 0x27d644, + 0x2186c5, + 0x2fac44, + 0x3675c7, + 0x28d207, + 0x2864c8, + 0x2cbfc6, + 0x254a45, + 0x27f588, + 0x2e15c8, + 0x2a4c09, + 0x21f706, + 0x22e708, + 0x39bd0a, + 0x34f148, + 0x2e8605, + 0x2e2206, + 0x277648, + 0x2e2b4a, + 0x20b387, + 0x28a645, + 0x298888, + 0x2b3c44, + 0x272206, + 0x2c5888, + 0x20ac46, + 0x239a88, + 0x29bfc7, + 0x209806, + 0x2ba844, + 0x28ba07, + 0x2b6804, + 0x3a1c47, + 0x23bf0d, + 0x21b585, + 0x2d144b, + 0x2a1d06, + 0x255788, + 0x24b344, + 0x27bc86, + 0x2817c6, + 0x304047, + 0x29c30d, + 0x226dc7, + 0x2b6d48, + 0x271a05, + 0x27f048, + 0x2c7ec6, + 0x29ae88, + 0x223a06, + 0x26a9c7, + 0x336689, + 0x33d2c7, + 0x28c3c8, + 0x279685, + 0x21c848, + 0x20dd45, + 0x396005, + 0x3a14c5, + 0x221443, + 0x235984, + 0x26fd05, + 0x2346c9, + 0x285f86, + 0x2eab08, + 0x2e2d45, + 0x2b8847, + 0x2aee8a, + 0x2cd449, + 0x2c98ca, + 0x2d6ec8, + 0x2272cc, + 0x28724d, + 0x2ff683, + 0x239988, + 0x207a85, + 0x224cc6, + 0x319346, + 0x2e7f05, + 0x3b3a09, + 0x358f45, + 0x27f588, + 0x2841c6, + 0x348806, + 0x2a63c9, + 0x38f247, + 0x294146, + 0x2aee08, + 0x216548, + 0x2e0dc7, + 0x235ece, + 0x2c8105, + 0x358545, + 0x20ab48, + 0x27f3c7, + 0x20e202, + 0x2c3584, + 0x203bca, + 0x2ba208, + 0x367b46, + 0x29e608, + 0x278686, + 0x31a7c8, + 0x2b29c8, + 0x395fc4, + 0x2b8d85, + 0x68a8c4, + 0x68a8c4, + 0x68a8c4, + 0x202403, + 0x20e046, + 0x27fa46, + 0x2a220c, + 0x209843, + 0x285686, + 0x215344, + 0x264b08, + 0x2d6585, + 0x203cc6, + 0x2bedc8, + 0x2d8206, + 0x244ac6, + 0x381148, + 0x2a7907, + 0x235a49, + 0x2d4bca, + 0x208a84, + 0x216605, + 0x2a70c5, + 0x264886, + 0x208d46, + 0x2a2dc6, + 0x2f9ec6, + 0x235b84, + 0x235b8b, + 0x231144, + 0x2a23c5, + 0x2b19c5, + 0x203086, + 0x3b5548, + 0x287107, + 0x317744, + 0x2453c3, + 0x2b3745, + 0x30a847, + 0x28700b, + 0x205687, + 0x2becc8, + 0x2e8b47, + 0x231646, + 0x24d1c8, + 0x2e318b, + 0x2067c6, + 0x213bc9, + 0x2e3305, + 0x30d803, + 0x2cd506, + 0x29bec8, + 0x214cc3, + 0x200a03, + 0x285b86, + 0x278686, + 0x375dca, + 0x280e85, + 0x28160b, + 0x2a360b, + 0x245103, + 0x202043, + 0x2b4f84, + 0x278447, + 0x247444, + 0x202ec4, + 0x2e8c84, + 0x34f448, + 0x2c24c8, + 0x3b2049, + 0x38e748, + 0x200c07, + 0x235ec6, + 0x2ea74f, + 0x2c8246, + 0x2d6504, + 0x2c230a, + 0x30a747, + 0x208386, + 0x292e89, + 0x3b1fc5, + 0x2058c5, + 0x3b2106, + 0x21c983, + 0x2b3c89, + 0x219c86, + 0x212009, + 0x38b106, + 0x270f45, + 0x2340c5, + 0x205543, + 0x278588, + 0x211607, + 0x3028c4, + 0x264988, + 0x2313c4, + 0x338d86, + 0x29f386, + 0x2419c6, + 0x2cb849, + 0x29d505, + 0x38ec86, + 0x2a2fc9, + 0x2c7606, + 0x2ea846, + 0x386e86, + 0x200b45, + 0x2fac46, + 0x26a9c4, + 0x3a8285, + 0x2c4a44, + 0x2b7846, + 0x35aec4, + 0x20f843, + 0x28a145, + 0x232bc8, + 0x2e9687, + 0x2bd949, + 0x28a548, + 0x29dc51, + 0x36328a, + 0x249c47, + 0x2ea1c6, + 0x215344, + 0x2c4b48, + 0x282f48, + 0x29de0a, + 0x2bc80d, + 0x2a4dc6, + 0x381246, + 0x28bac6, + 0x2c3fc7, + 0x2b6e05, + 0x262c07, + 0x264a45, + 0x37ac04, + 0x2ad586, + 0x216287, + 0x2b398d, + 0x277587, + 0x21a0c8, + 0x27f889, + 0x2e2106, + 0x344085, + 0x226704, + 0x24e9c6, + 0x304186, + 0x2ba386, + 0x29ee88, + 0x2179c3, + 0x203043, + 0x3598c5, + 0x2300c6, + 0x2b2985, + 0x388048, + 0x2a180a, + 0x2cee04, + 0x264b08, + 0x29bd48, + 0x202ec7, + 0x2e2e09, + 0x2be9c8, + 0x28b387, + 0x2936c6, + 0x20ac4a, + 0x24ea48, + 0x396449, + 0x299188, + 0x21cec9, + 0x2ea087, + 0x2effc5, + 0x3ac4c6, + 0x2b1388, + 0x285d08, + 0x2a1048, + 0x249e08, + 0x2a23c5, + 0x20f444, + 0x211308, + 0x208484, + 0x3a1044, + 0x270f45, + 0x297a87, + 0x202ac9, + 0x303e47, + 0x215f45, + 0x27cdc6, + 0x34ebc6, + 0x203d44, + 0x2a6706, + 0x254884, + 0x27ef46, + 0x202886, + 0x214b06, + 0x200045, + 0x387f07, + 0x204083, + 0x206b49, + 0x308f48, + 0x264984, + 0x28b20d, + 0x29cd88, + 0x3053c8, + 0x3963c6, + 0x336789, + 0x2cd449, + 0x3a1985, + 0x2a190a, + 0x2adb4a, + 0x2af7cc, + 0x2af946, + 0x27d9c6, + 0x2c83c6, + 0x273209, + 0x224f06, + 0x262c46, + 0x359006, + 0x25b448, + 0x27d546, + 0x2d36cb, + 0x297c05, + 0x244d85, + 0x27dc45, + 0x366f46, + 0x20ac03, + 0x241946, + 0x277507, + 0x2c4a05, + 0x24c705, + 0x3645c5, + 0x327346, + 0x31da84, + 0x31da86, + 0x3add49, + 0x366dcc, + 0x37a948, + 0x33f004, + 0x2fa886, + 0x2a1e06, + 0x29bec8, + 0x218808, + 0x366cc9, + 0x3b1987, + 0x245989, + 0x254106, + 0x22c2c4, + 0x20bf04, + 0x286cc4, + 0x285b88, + 0x20290a, + 0x3477c6, + 0x352107, + 0x36f007, + 0x2d4505, + 0x2a7084, + 0x2913c6, + 0x2b6e46, + 0x202803, + 0x308d87, + 0x368b48, + 0x3a1aca, + 0x2ce348, + 0x2cec88, + 0x35af05, + 0x253245, + 0x26df85, + 0x2d48c6, + 0x33d4c6, + 0x35bd05, + 0x2969c9, + 0x2a6e8c, + 0x26e047, + 0x29de88, + 0x381a45, + 0x68a8c4, + 0x24df84, + 0x25d784, + 0x214486, + 0x2a450e, + 0x205947, + 0x2c41c5, + 0x2abfcc, + 0x231287, + 0x216207, + 0x218089, + 0x218f89, + 0x28a645, + 0x308f48, + 0x24d609, + 0x334005, + 0x2c4948, + 0x322906, + 0x361f06, + 0x2e4444, + 0x2ae848, + 0x251f43, + 0x303084, + 0x2b37c5, + 0x3ac0c7, + 0x210445, + 0x39bbc9, + 0x28aa8d, + 0x299886, + 0x245404, + 0x2937c8, + 0x27d00a, + 0x224107, + 0x23be45, + 0x203143, + 0x2a37ce, + 0x27868c, + 0x2faa87, + 0x2a46c7, + 0x203c03, + 0x224f45, + 0x25d785, + 0x29e9c8, + 0x29bb89, + 0x33ef06, + 0x247444, + 0x249b86, + 0x21e3cb, + 0x2cd1cc, + 0x221507, + 0x2d5c45, + 0x3ad988, + 0x2e0b85, + 0x2c2307, + 0x3630c7, + 0x251f45, + 0x20ac03, + 0x39a644, + 0x212905, + 0x351805, + 0x351806, + 0x34fd08, + 0x216287, + 0x319646, + 0x35c106, + 0x3a1406, + 0x2d5e89, + 0x20f847, + 0x26a5c6, + 0x2cd346, + 0x252006, + 0x2aeb45, + 0x219646, + 0x3768c5, + 0x228848, + 0x2973cb, + 0x291086, + 0x36f044, + 0x2e2909, + 0x25b284, + 0x322888, + 0x2324c7, + 0x2885c4, + 0x2be288, + 0x2c5304, + 0x2aeb84, + 0x28b145, + 0x35e286, + 0x34f387, + 0x239b43, + 0x2a2a85, + 0x322e84, + 0x358586, + 0x3a1a08, + 0x368885, + 0x297089, + 0x3363c5, + 0x2e1e88, + 0x215207, + 0x388dc8, + 0x2bd787, + 0x362709, + 0x255a86, + 0x32b3c6, + 0x359004, + 0x293605, + 0x30150c, + 0x27dc47, + 0x27e207, + 0x36eec8, + 0x299886, + 0x277444, + 0x32e344, + 0x286849, + 0x2c84c6, + 0x240987, + 0x3a8bc4, + 0x286086, + 0x343905, + 0x2cbb07, + 0x2d3646, + 0x252d49, + 0x2aab07, + 0x26f8c7, + 0x2a6246, + 0x3879c5, + 0x283988, + 0x219b08, + 0x2646c6, + 0x3688c5, + 0x261b06, + 0x209983, + 0x29e849, + 0x2a2b4e, + 0x2bd488, + 0x2314c8, + 0x2644cb, + 0x2972c6, + 0x2089c4, + 0x244ac4, + 0x2a2c4a, + 0x216907, + 0x26a685, + 0x213bc9, + 0x2c3285, + 0x3a1087, + 0x2b4c04, + 0x284487, + 0x2e65c8, + 0x2cb206, + 0x21e789, + 0x2beaca, + 0x216886, + 0x29c8c6, + 0x2b1945, + 0x37ccc5, + 0x31a107, + 0x24dd08, + 0x343848, + 0x395fc6, + 0x234145, + 0x208ace, + 0x2b8bc4, + 0x264645, + 0x27c749, + 0x30dfc8, + 0x28f0c6, + 0x2a04cc, + 0x2a1410, + 0x2a414f, + 0x2a51c8, + 0x3363c7, + 0x200045, + 0x26fd05, + 0x34f209, + 0x298a89, + 0x23cbc6, + 0x278307, + 0x2d2805, + 0x21b509, + 0x340146, + 0x224d4d, + 0x286b89, + 0x202ec4, + 0x2bd208, + 0x2113c9, + 0x347986, + 0x27cec5, + 0x32b3c6, + 0x317849, + 0x26ba08, + 0x212485, + 0x2ae844, + 0x2a068b, + 0x347845, + 0x2a07c6, + 0x287586, + 0x26ed86, + 0x287fcb, + 0x297189, + 0x35c045, + 0x388b87, + 0x363206, + 0x220f06, + 0x25d508, + 0x35e389, + 0x219e8c, + 0x30a648, + 0x360406, + 0x340bc3, + 0x303c06, + 0x287e05, + 0x281948, + 0x233b46, + 0x2cbd48, + 0x275845, + 0x29dfc5, + 0x215348, + 0x31a947, + 0x319287, + 0x247fc7, + 0x220d88, + 0x336508, + 0x31e4c6, + 0x2b7687, + 0x247987, + 0x287cca, + 0x254003, + 0x366f46, + 0x202a45, + 0x203bc4, + 0x27f889, + 0x362684, + 0x2a7e44, + 0x2a1c84, + 0x2a46cb, + 0x211547, + 0x208d05, + 0x29ab08, + 0x27cdc6, + 0x27cdc8, + 0x280dc6, + 0x2900c5, + 0x290385, + 0x291f46, + 0x292b08, + 0x292dc8, + 0x27fa46, + 0x29a94f, + 0x29e310, + 0x3b1785, + 0x204083, + 0x22c385, + 0x30b188, + 0x298989, + 0x334148, + 0x2d5d08, + 0x224788, + 0x211607, + 0x27ca89, + 0x2cbf48, + 0x25bd44, + 0x2a1b08, + 0x2deb49, + 0x2b81c7, + 0x29f904, + 0x303f08, + 0x387cca, + 0x2ebe06, + 0x2a4dc6, + 0x21f5c9, + 0x2a1647, + 0x2ce1c8, + 0x30cc88, + 0x3a8a48, + 0x356245, + 0x37dc45, + 0x244d85, + 0x25d745, + 0x37e287, + 0x20ac05, + 0x2c4a05, + 0x2b5546, + 0x334087, + 0x2d1807, + 0x387fc6, + 0x2d7405, + 0x2a07c6, + 0x212245, + 0x2b84c8, + 0x2f1d84, + 0x2c7686, + 0x343744, + 0x2b69c8, + 0x2c778a, + 0x28004c, + 0x234bc5, + 0x2c4086, + 0x21a046, + 0x368706, + 0x30b384, + 0x343bc5, + 0x280c07, + 0x2a16c9, + 0x2cdc87, + 0x68a8c4, + 0x68a8c4, + 0x3175c5, + 0x32dd04, + 0x29fe8a, + 0x27cc46, + 0x24d404, + 0x208305, + 0x37a545, + 0x2b6d44, + 0x2871c7, + 0x36b847, + 0x2cd788, + 0x368ec8, + 0x212489, + 0x340248, + 0x2a004b, + 0x250b44, + 0x221005, + 0x2840c5, + 0x247f49, + 0x35e389, + 0x2e2808, + 0x232248, + 0x203084, + 0x2a1e45, + 0x202943, + 0x264845, + 0x38ed06, + 0x29b9cc, + 0x20f4c6, + 0x247246, + 0x28f345, + 0x3273c8, + 0x2bd606, + 0x2ea346, + 0x2a4dc6, + 0x2297cc, + 0x2ba544, + 0x3a154a, + 0x28f288, + 0x29b807, + 0x322d86, + 0x33efc7, + 0x2f2185, + 0x343e06, + 0x34af86, + 0x356707, + 0x2be7c4, + 0x3676c5, + 0x27c744, + 0x37ac87, + 0x27c988, + 0x27d84a, + 0x284a07, + 0x2d22c7, + 0x336347, + 0x2e0cc9, + 0x29b9ca, + 0x219e43, + 0x2e9645, + 0x200c83, + 0x2e8cc9, + 0x26ac48, + 0x38eb47, + 0x334249, + 0x219c06, + 0x2d4108, + 0x337f85, + 0x2e16ca, + 0x2d8c49, + 0x2abc49, + 0x3aea07, + 0x283049, + 0x214a08, + 0x3568c6, + 0x2c4248, + 0x217b07, + 0x235c87, + 0x277787, + 0x2d2688, + 0x2fa706, + 0x387a85, + 0x280c07, + 0x29c3c8, + 0x3436c4, + 0x30e3c4, + 0x294047, + 0x2b2d47, + 0x24d48a, + 0x356846, + 0x330f0a, + 0x2c34c7, + 0x2b8987, + 0x257e44, + 0x289204, + 0x2d3546, + 0x3b3d44, + 0x3b3d4c, + 0x203505, + 0x218649, + 0x2dfc44, + 0x2b6e05, + 0x27cf88, + 0x292e85, + 0x375846, + 0x217f84, + 0x3ae3ca, + 0x32b7c6, + 0x2a68ca, + 0x237f07, + 0x2d3385, + 0x21c985, + 0x2d454a, + 0x2a6805, + 0x2a4cc6, + 0x208484, + 0x2b5106, + 0x31a1c5, + 0x233c06, + 0x2e88cc, + 0x2cd90a, + 0x2936c4, + 0x235ec6, + 0x2a1647, + 0x2d5204, + 0x25b448, + 0x38e5c6, + 0x208949, + 0x2bb109, + 0x2b0689, + 0x24f346, + 0x217c06, + 0x2c4387, + 0x296908, + 0x217a09, + 0x211547, + 0x29ac86, + 0x3872c7, + 0x28b985, + 0x2b8bc4, + 0x2c3f47, + 0x247b45, + 0x28b085, + 0x235247, + 0x251e08, + 0x3ad906, + 0x29d24d, + 0x29ebcf, + 0x2a360d, + 0x215f84, + 0x232cc6, + 0x2d91c8, + 0x358fc5, + 0x287e88, + 0x23a58a, + 0x202ec4, + 0x21e946, + 0x239607, + 0x22d9c7, + 0x2a79c9, + 0x2c4205, + 0x2b6d44, + 0x2b8cca, + 0x2be589, + 0x283147, + 0x272086, + 0x347986, + 0x2a1d86, + 0x364046, + 0x2d890f, + 0x2d9089, + 0x27d546, + 0x282e46, + 0x32fd89, + 0x2b7787, + 0x226743, + 0x229946, + 0x218303, + 0x2e7dc8, + 0x387107, + 0x2a53c9, + 0x29f208, + 0x3193c8, + 0x351446, + 0x20f409, + 0x23c1c5, + 0x2b7844, + 0x2a73c7, + 0x273285, + 0x215f84, + 0x208dc8, + 0x216bc4, + 0x2b74c7, + 0x34bc06, + 0x2b3045, + 0x299188, + 0x34784b, + 0x319c07, + 0x2d47c6, + 0x2c82c4, + 0x32d146, + 0x270f45, + 0x247b45, + 0x283709, + 0x286dc9, + 0x235cc4, + 0x235d05, + 0x235f05, + 0x2e1546, + 0x309048, + 0x2c2c46, + 0x36898b, + 0x2b4c8a, + 0x2b6905, + 0x290406, + 0x3025c5, + 0x2e0a45, + 0x2ab6c7, + 0x3ac808, + 0x245984, + 0x26c586, + 0x292e46, + 0x214bc7, + 0x30d7c4, + 0x2817c6, + 0x2b9f85, + 0x2b9f89, + 0x2135c4, + 0x2a7209, + 0x27fa46, + 0x2c5108, + 0x235f05, + 0x36f105, + 0x233c06, + 0x219d89, + 0x218f89, + 0x2472c6, + 0x30e0c8, + 0x28abc8, + 0x302584, + 0x2b9004, + 0x2b9008, + 0x3269c8, + 0x245a89, + 0x38ec86, + 0x2a4dc6, + 0x320c0d, + 0x351c06, + 0x34c209, + 0x23d1c5, + 0x3b2106, + 0x262d48, + 0x31d9c5, + 0x2479c4, + 0x270f45, + 0x2866c8, + 0x29fc49, + 0x27c804, + 0x2008c6, + 0x39660a, + 0x2fa988, + 0x24d609, + 0x244c4a, + 0x3341c6, + 0x29ed88, + 0x2c20c5, + 0x2c0e48, + 0x2bd885, + 0x219ac9, + 0x36bd09, + 0x203602, + 0x2e3305, + 0x276286, + 0x27f987, + 0x295705, + 0x2f0ec6, + 0x306288, + 0x299886, + 0x2b9a09, + 0x27e306, + 0x25d388, + 0x2afb85, + 0x25c586, + 0x26aac8, + 0x285b88, + 0x2e9f88, + 0x347b08, + 0x219644, + 0x209fc3, + 0x2b9c44, + 0x249b06, + 0x28b9c4, + 0x231407, + 0x2ea249, + 0x2c7a05, + 0x30cc86, + 0x229946, + 0x34fb4b, + 0x2b6846, + 0x20edc6, + 0x2cb6c8, + 0x24c646, + 0x2bcb03, + 0x2080c3, + 0x2b8bc4, + 0x22e605, + 0x2b4447, + 0x27c988, + 0x27c98f, + 0x280b0b, + 0x308e48, + 0x200946, + 0x30914e, + 0x233c03, + 0x2b43c4, + 0x2b67c5, + 0x2b6bc6, + 0x2914cb, + 0x297b46, + 0x222709, + 0x2b3045, + 0x38a208, + 0x211d88, + 0x218e4c, + 0x2a4706, + 0x264886, + 0x2de405, + 0x28c188, + 0x26aac5, + 0x335848, + 0x2a084a, + 0x2a3a49, + 0x68a8c4, + 0x3760d1c2, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x368883, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x204ac3, + 0x200383, + 0x210e03, + 0x24ae04, + 0x2d0783, + 0x23a184, + 0x231b83, + 0x2da904, + 0x332ec3, + 0x2959c7, + 0x20fbc3, + 0x20abc3, + 0x2842c8, + 0x200383, + 0x2b400b, + 0x2f2a03, + 0x2716c6, + 0x205bc2, + 0x26b44b, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x200383, + 0x200e03, + 0x203383, + 0x204cc2, + 0x15f048, + 0x325b45, + 0x247bc8, + 0x2ec408, + 0x20d1c2, + 0x329dc5, + 0x39c307, + 0x2001c2, + 0x24b587, + 0x208a42, + 0x246f87, + 0x239ec9, + 0x2c1c88, + 0x3a88c9, + 0x338b02, + 0x270647, + 0x2abac4, + 0x39c3c7, + 0x2b4b87, + 0x24ca02, + 0x20fbc3, + 0x20b602, + 0x202082, + 0x200382, + 0x217902, + 0x200e02, + 0x20c4c2, + 0x2af685, + 0x24dec5, + 0xd1c2, + 0x31b83, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x117c3, + 0x701, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x204303, + 0x204ac3, + 0x200383, + 0x21bd03, + 0x3a40d686, + 0x5e303, + 0x854c5, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x8082, + 0x15f048, + 0x4dcc4, + 0xe0f85, + 0x204cc2, + 0x2cfa44, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x236d03, + 0x2b0405, + 0x204303, + 0x205d83, + 0x204ac3, + 0x2104c3, + 0x200383, + 0x213e83, + 0x24ae83, + 0x24abc3, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x20d1c2, + 0x200383, + 0x15f048, + 0x332ec3, + 0x15f048, + 0x26ae03, + 0x2d0783, + 0x22ef04, + 0x231b83, + 0x332ec3, + 0x20a3c2, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20a3c2, + 0x22d603, + 0x204ac3, + 0x200383, + 0x2ec383, + 0x213e83, + 0x204cc2, + 0x20d1c2, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2716c5, + 0x1540c6, + 0x24ae04, + 0x205bc2, + 0x15f048, + 0x204cc2, + 0x1d508, + 0x20d1c2, + 0x97606, + 0x1681c4, + 0x16e1cb, + 0x3dc06, + 0xfcc7, + 0x231b83, + 0x332ec3, + 0x15ae05, + 0x19c804, + 0x221543, + 0x53fc7, + 0xdc304, + 0x204ac3, + 0x94fc4, + 0x200383, + 0x2f39c4, + 0xfe588, + 0x125886, + 0x114f85, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x20abc3, + 0x200383, + 0x2f2a03, + 0x205bc2, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204143, + 0x213184, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x2da904, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2716c6, + 0x231b83, + 0x332ec3, + 0x178ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0xfcc7, + 0x15f048, + 0x332ec3, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x40ed0783, + 0x231b83, + 0x204ac3, + 0x200383, + 0x15f048, + 0x204cc2, + 0x20d1c2, + 0x2d0783, + 0x332ec3, + 0x204ac3, + 0x200382, + 0x200383, + 0x316e47, + 0x23860b, + 0x2396c3, + 0x24be08, + 0x296687, + 0x225246, + 0x2c6145, + 0x373549, + 0x20f948, + 0x260d09, + 0x260d10, + 0x35d28b, + 0x385989, + 0x209303, + 0x2b5649, + 0x230806, + 0x23080c, + 0x260f08, + 0x3ae848, + 0x35d7c9, + 0x2a5d0e, + 0x20780b, + 0x2eb20c, + 0x205283, + 0x26cc4c, + 0x205289, + 0x257a87, + 0x231acc, + 0x36aa8a, + 0x24fe44, + 0x393f4d, + 0x26cb08, + 0x210e0d, + 0x272746, + 0x29258b, + 0x31a3c9, + 0x23d087, + 0x339606, + 0x349d89, + 0x38ce8a, + 0x37a0c8, + 0x2f24c4, + 0x34ecc7, + 0x3ac5c7, + 0x3a8dc4, + 0x32d984, + 0x237209, + 0x2ceac9, + 0x237908, + 0x210b85, + 0x392545, + 0x20aa06, + 0x393e09, + 0x23a80d, + 0x2eac88, + 0x20a907, + 0x2c61c8, + 0x382986, + 0x37ed04, + 0x359b85, + 0x202246, + 0x203204, + 0x205187, + 0x206d8a, + 0x211cc4, + 0x2167c6, + 0x2182c9, + 0x2182cf, + 0x2197cd, + 0x21a486, + 0x21d110, + 0x21d506, + 0x21dc47, + 0x21ebc7, + 0x21ebcf, + 0x21f889, + 0x2242c6, + 0x226487, + 0x226488, + 0x227649, + 0x2b3108, + 0x2e7907, + 0x20a203, + 0x378c86, + 0x3abf08, + 0x2a5fca, + 0x21fe49, + 0x20fa83, + 0x39c206, + 0x26c3ca, + 0x2fca47, + 0x2578ca, + 0x26a24e, + 0x21f9c6, + 0x2e3507, + 0x227086, + 0x201806, + 0x37da4b, + 0x30c58a, + 0x317ecd, + 0x217cc7, + 0x359188, + 0x359189, + 0x35918f, + 0x20e28c, + 0x281bc9, + 0x2e928e, + 0x295aca, + 0x3035c6, + 0x2fbbc6, + 0x3b06cc, + 0x3106cc, + 0x311448, + 0x33d1c7, + 0x25b7c5, + 0x2251c4, + 0x2438ce, + 0x38d104, + 0x257bc7, + 0x26d08a, + 0x36e914, + 0x373a4f, + 0x21ed88, + 0x378b48, + 0x357e8d, + 0x357e8e, + 0x3823c9, + 0x3a5b08, + 0x3a5b0f, + 0x2317cc, + 0x2317cf, + 0x232a07, + 0x23acca, + 0x21cc4b, + 0x23bcc8, + 0x23e5c7, + 0x264f4d, + 0x3151c6, + 0x394106, + 0x2417c9, + 0x259888, + 0x24c108, + 0x24c10e, + 0x238707, + 0x226985, + 0x24da85, + 0x205e04, + 0x225506, + 0x237808, + 0x260183, + 0x2efb8e, + 0x265308, + 0x2f198b, + 0x26afc7, + 0x395e05, + 0x26cdc6, + 0x2b0e07, + 0x307048, + 0x319f09, + 0x298fc5, + 0x28a188, + 0x217306, + 0x3a02ca, + 0x2437c9, + 0x231b89, + 0x231b8b, + 0x201148, + 0x3a8c89, + 0x210c46, + 0x22c54a, + 0x2b7f4a, + 0x23aecc, + 0x3acb87, + 0x2c1a8a, + 0x328ecb, + 0x328ed9, + 0x30fa48, + 0x271745, + 0x265106, + 0x258fc9, + 0x261cc6, + 0x21324a, + 0x20fb46, + 0x201e44, + 0x2c9ecd, + 0x201e47, + 0x20b549, + 0x383305, + 0x24e548, + 0x24ee89, + 0x24f0c4, + 0x24fd47, + 0x24fd48, + 0x250287, + 0x26ea08, + 0x2545c7, + 0x35c2c5, + 0x25c70c, + 0x25cf49, + 0x2c4dca, + 0x38f0c9, + 0x2b5749, + 0x2739cc, + 0x263e0b, + 0x2640c8, + 0x265688, + 0x268a44, + 0x288288, + 0x289389, + 0x36ab47, + 0x218506, + 0x317287, + 0x21e1c9, + 0x328b0b, + 0x32cfc7, + 0x200407, + 0x238047, + 0x210d84, + 0x210d85, + 0x2ac905, + 0x33c00b, + 0x399404, + 0x369d08, + 0x26f08a, + 0x2173c7, + 0x341dc7, + 0x290c12, + 0x27ee46, + 0x22e886, + 0x35898e, + 0x281346, + 0x298708, + 0x29938f, + 0x2111c8, + 0x38bb08, + 0x3af64a, + 0x3af651, + 0x2a6b4e, + 0x254e4a, + 0x254e4c, + 0x2014c7, + 0x3a5d10, + 0x3b5388, + 0x2a6d45, + 0x2b114a, + 0x20324c, + 0x29afcd, + 0x2fce06, + 0x2fce07, + 0x2fce0c, + 0x305c8c, + 0x32814c, + 0x28f98b, + 0x289b84, + 0x21f744, + 0x374149, + 0x2fe3c7, + 0x23e389, + 0x2b7d89, + 0x35a587, + 0x36a906, + 0x36a909, + 0x39d403, + 0x2129ca, + 0x32f807, + 0x238acb, + 0x317d4a, + 0x2abb44, + 0x39c546, + 0x284c89, + 0x3b3bc4, + 0x2035ca, + 0x2d4ac5, + 0x2c0005, + 0x2c000d, + 0x2c034e, + 0x378205, + 0x323506, + 0x2712c7, + 0x38684a, + 0x38d406, + 0x35ecc4, + 0x2f8987, + 0x2da18b, + 0x382a47, + 0x282ac4, + 0x24f706, + 0x24f70d, + 0x21de8c, + 0x204986, + 0x2eae8a, + 0x235806, + 0x2f3248, + 0x28bf47, + 0x33f88a, + 0x23d986, + 0x217bc3, + 0x262ec6, + 0x3abd88, + 0x2a024a, + 0x2766c7, + 0x2766c8, + 0x27dd84, + 0x2cc0c7, + 0x23ccc8, + 0x29e008, + 0x288b48, + 0x33110a, + 0x2e0405, + 0x2e0687, + 0x254c93, + 0x2d0806, + 0x26f288, + 0x222c09, + 0x24b448, + 0x3514cb, + 0x2cddc8, + 0x273704, + 0x215446, + 0x3b4f06, + 0x35e0c9, + 0x2c72c7, + 0x25c808, + 0x29e186, + 0x235144, + 0x2ce085, + 0x2c8a08, + 0x2c900a, + 0x2c9b48, + 0x2ce746, + 0x29ef8a, + 0x351988, + 0x2d5008, + 0x2d6a88, + 0x2d70c6, + 0x2d93c6, + 0x20168c, + 0x2d99d0, + 0x28de45, + 0x210fc8, + 0x306790, + 0x210fd0, + 0x260b8e, + 0x20130e, + 0x201314, + 0x31abcf, + 0x31af86, + 0x3319d1, + 0x339793, + 0x339c08, + 0x3aafc5, + 0x35b6c8, + 0x385785, + 0x22854c, + 0x229489, + 0x282449, + 0x245d47, + 0x377009, + 0x243d87, + 0x2fadc6, + 0x359987, + 0x261245, + 0x211803, + 0x260349, + 0x222ec9, + 0x378ac3, + 0x39a544, + 0x35c40d, + 0x3b1b0f, + 0x235185, + 0x35b5c6, + 0x211b07, + 0x325987, + 0x28cd86, + 0x28cd8b, + 0x2a82c5, + 0x25f106, + 0x2fba47, + 0x276ec9, + 0x2290c6, + 0x22e405, + 0x31190b, + 0x23bb46, + 0x3724c5, + 0x28b548, + 0x321d88, + 0x2d75cc, + 0x2d75d0, + 0x2e0149, + 0x2e7107, + 0x30860b, + 0x2e6186, + 0x2e77ca, + 0x2ea4cb, + 0x2eb74a, + 0x2eb9c6, + 0x2ec245, + 0x32f546, + 0x27e4c8, + 0x245e0a, + 0x357b1c, + 0x2f2acc, + 0x2f2dc8, + 0x2716c5, + 0x2f4f07, + 0x26a106, + 0x27d385, + 0x21c2c6, + 0x28cf48, + 0x2be807, + 0x2a5c08, + 0x2e360a, + 0x34a10c, + 0x34a389, + 0x37ee87, + 0x20d244, + 0x24db46, + 0x38b68a, + 0x2b7e85, + 0x20734c, + 0x20b088, + 0x377648, + 0x20d98c, + 0x21be8c, + 0x2206c9, + 0x220907, + 0x342c0c, + 0x3aa644, + 0x23c54a, + 0x2580cc, + 0x278acb, + 0x24140b, + 0x241f46, + 0x383847, + 0x2ddb07, + 0x3a5f4f, + 0x2fda11, + 0x2ddb12, + 0x30d0cd, + 0x30d0ce, + 0x30d40e, + 0x31ad88, + 0x31ad92, + 0x252288, + 0x2962c7, + 0x25260a, + 0x204748, + 0x281305, + 0x37e0ca, + 0x21da47, + 0x305304, + 0x21b083, + 0x2b0fc5, + 0x3af8c7, + 0x2fea07, + 0x29b1ce, + 0x30ff4d, + 0x313c49, + 0x220c45, + 0x33aa03, + 0x25fac6, + 0x36ffc5, + 0x2f1bc8, + 0x30c009, + 0x265145, + 0x26514f, + 0x2ec087, + 0x373485, + 0x21b2ca, + 0x299b86, + 0x2f33c9, + 0x384d0c, + 0x2f99c9, + 0x207b06, + 0x26ee8c, + 0x340cc6, + 0x2fc548, + 0x2fc746, + 0x30fbc6, + 0x349344, + 0x264443, + 0x2b270a, + 0x35b211, + 0x281d8a, + 0x255d05, + 0x277947, + 0x259307, + 0x23cdc4, + 0x23cdcb, + 0x3a8748, + 0x2bd306, + 0x36ef45, + 0x3a05c4, + 0x291949, + 0x330304, + 0x25cd87, + 0x332705, + 0x332707, + 0x358bc5, + 0x2af743, + 0x296188, + 0x34398a, + 0x239b43, + 0x325b8a, + 0x3b4086, + 0x264ecf, + 0x353689, + 0x2efb10, + 0x2dee88, + 0x2d0e89, + 0x29d087, + 0x24f68f, + 0x334604, + 0x2da984, + 0x21d386, + 0x2b3546, + 0x256dca, + 0x383586, + 0x32a787, + 0x3055c8, + 0x3057c7, + 0x306047, + 0x307a4a, + 0x309b4b, + 0x3a2445, + 0x2dd748, + 0x2166c3, + 0x3b120c, + 0x37140f, + 0x25b5cd, + 0x2c4607, + 0x313d89, + 0x217687, + 0x23e148, + 0x36eb0c, + 0x273608, + 0x258908, + 0x3188ce, + 0x32bad4, + 0x32bfe4, + 0x3424ca, + 0x35ea8b, + 0x243e44, + 0x243e49, + 0x21e9c8, + 0x24e105, + 0x25fc8a, + 0x239d87, + 0x2957c4, + 0x368883, + 0x2d0783, + 0x23a184, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x204303, + 0x20fbc3, + 0x201686, + 0x213184, + 0x204ac3, + 0x200383, + 0x21aa03, + 0x204cc2, + 0x368883, + 0x20d1c2, + 0x2d0783, + 0x23a184, + 0x231b83, + 0x332ec3, + 0x204303, + 0x201686, + 0x204ac3, + 0x200383, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x204ac3, + 0x200383, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x213184, + 0x204ac3, + 0x200383, + 0x204cc2, + 0x21fd43, + 0x20d1c2, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x20e542, + 0x20d882, + 0x20d1c2, + 0x2d0783, + 0x209c02, + 0x201d42, + 0x2964c4, + 0x222044, + 0x223342, + 0x213184, + 0x200382, + 0x200383, + 0x21aa03, + 0x241f46, + 0x217082, + 0x2016c2, + 0x201a82, + 0x436111c3, + 0x43a014c3, + 0x59a86, + 0x59a86, + 0x24ae04, + 0x143768a, + 0x2608c, + 0x21ecc, + 0x852cd, + 0x2ac47, + 0x1a608, + 0x218c8, + 0x19834a, + 0x446db445, + 0x12b089, + 0x103008, + 0x8ed4a, + 0x14a60e, + 0x144b24b, + 0x1681c4, + 0x1672c8, + 0x13edc7, + 0x16f07, + 0x11dd09, + 0x1b3c47, + 0x94b88, + 0x61f49, + 0x4bfc5, + 0x12494e, + 0xafbcd, + 0xfb48, + 0x44a37046, + 0x45437048, + 0x79c88, + 0x117050, + 0x69c87, + 0x6cf47, + 0x71187, + 0x75f87, + 0xa9c2, + 0x62507, + 0x10c74c, + 0x3b9c7, + 0xa9f46, + 0xaa689, + 0xad708, + 0x18d82, + 0x1d42, + 0x24a0b, + 0x2ccc9, + 0x4c809, + 0x17de88, + 0xb5e02, + 0x104389, + 0xd2fca, + 0xdb9c9, + 0xdd048, + 0xddfc7, + 0xe0389, + 0xe4685, + 0xe4a90, + 0x1a8e86, + 0x63c85, + 0x4a84d, + 0x1b3806, + 0xee547, + 0xf39d8, + 0x96b88, + 0xba9ca, + 0x53b4d, + 0x1702, + 0x177ac6, + 0x91788, + 0x1ae208, + 0x15ef09, + 0x56608, + 0x5dece, + 0xd68d, + 0xf8805, + 0x62288, + 0x59688, + 0x6902, + 0x125886, + 0x6c82, + 0x3c1, + 0x8b4c3, + 0x44ef4244, + 0x4529a283, + 0x141, + 0x15c06, + 0x141, + 0x1, + 0x15c06, + 0x8b4c3, + 0x14e4285, + 0x24fe44, + 0x2d0783, + 0x251304, + 0x2964c4, + 0x204ac3, + 0x222ac5, + 0x21bd03, + 0x2202c3, + 0x370145, + 0x24abc3, + 0x466d0783, + 0x231b83, + 0x332ec3, + 0x200041, + 0x20fbc3, + 0x222044, + 0x213184, + 0x204ac3, + 0x200383, + 0x213e83, + 0x15f048, + 0x204cc2, + 0x368883, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x201d42, + 0x2964c4, + 0x204303, + 0x20fbc3, + 0x204ac3, + 0x20abc3, + 0x200383, + 0x24abc3, + 0x15f048, + 0x371182, + 0xd1c2, + 0x1491b48, + 0x10598e, + 0x47608c42, + 0x32f9c8, + 0x233d86, + 0x210186, + 0x233707, + 0x47a00902, + 0x47f53508, + 0x20ebca, + 0x269708, + 0x201442, + 0x32f649, + 0x3a2487, + 0x218486, + 0x295ec9, + 0x247ec4, + 0x2e4186, + 0x2e1bc4, + 0x26bdc4, + 0x25bf49, + 0x326286, + 0x24df85, + 0x291285, + 0x390387, + 0x2c3747, + 0x2911c4, + 0x233946, + 0x2ffb45, + 0x367445, + 0x302505, + 0x392307, + 0x26ae05, + 0x315e49, + 0x32d305, + 0x307184, + 0x38d347, + 0x32ecce, + 0x330a09, + 0x358849, + 0x3ac9c6, + 0x2fe248, + 0x2b520b, + 0x2e3b0c, + 0x2898c6, + 0x2076c7, + 0x37b305, + 0x32d98a, + 0x237a09, + 0x3aa989, + 0x257646, + 0x2fb805, + 0x2aabc5, + 0x348f89, + 0x30268b, + 0x280f46, + 0x338346, + 0x20a904, + 0x2908c6, + 0x226a08, + 0x3abc06, + 0x20c5c6, + 0x206188, + 0x207f47, + 0x208649, + 0x209705, + 0x15f048, + 0x216e84, + 0x33d5c4, + 0x369f05, + 0x204f49, + 0x222347, + 0x22234b, + 0x223e4a, + 0x228485, + 0x4820a002, + 0x238987, + 0x48629248, + 0x27be07, + 0x2bf945, + 0x3aac0a, + 0xd1c2, + 0x38740b, + 0x25470a, + 0x222dc6, + 0x395e03, + 0x29538d, + 0x3582cc, + 0x37f24d, + 0x381085, + 0x227dc5, + 0x2601c7, + 0x209c09, + 0x20eac6, + 0x383405, + 0x2d8008, + 0x2907c3, + 0x2ec708, + 0x2907c8, + 0x2c6c47, + 0x3b2448, + 0x39b7c9, + 0x2c9747, + 0x238187, + 0x302b88, + 0x38ca44, + 0x38ca47, + 0x272648, + 0x2024c6, + 0x206fcf, + 0x2118c7, + 0x2e7a86, + 0x23e2c5, + 0x223783, + 0x365a47, + 0x36da03, + 0x250446, + 0x251c46, + 0x252a06, + 0x296e85, + 0x26ea03, + 0x388a48, + 0x370c89, + 0x37ffcb, + 0x252b88, + 0x254285, + 0x256405, + 0x48aabc02, + 0x359a49, + 0x296547, + 0x25f185, + 0x25be47, + 0x25dd86, + 0x363f05, + 0x36fe0b, + 0x2640c4, + 0x2692c5, + 0x269407, + 0x27b786, + 0x27bbc5, + 0x288487, + 0x288d47, + 0x2d1784, + 0x28e04a, + 0x28e508, + 0x2c2149, + 0x3648c5, + 0x2951c6, + 0x226bca, + 0x387646, + 0x26f5c7, + 0x2c1e0d, + 0x2a1f09, + 0x3597c5, + 0x339dc7, + 0x368388, + 0x26a888, + 0x314d07, + 0x20b246, + 0x217807, + 0x221143, + 0x33c004, + 0x3607c5, + 0x38dcc7, + 0x391d09, + 0x22a8c8, + 0x33fac5, + 0x242844, + 0x2f5bc5, + 0x38174d, + 0x203742, + 0x386ac6, + 0x377a06, + 0x2c8bca, + 0x37e686, + 0x38b5c5, + 0x368fc5, + 0x368fc7, + 0x3a010c, + 0x279b0a, + 0x290586, + 0x225085, + 0x290706, + 0x290a47, + 0x292846, + 0x296d8c, + 0x296009, + 0x48e16087, + 0x299745, + 0x299746, + 0x299d08, + 0x236785, + 0x2a8b45, + 0x2a9548, + 0x2a974a, + 0x49258142, + 0x4960c2c2, + 0x2e8f85, + 0x28b9c3, + 0x22b108, + 0x241d03, + 0x2a99c4, + 0x2f350b, + 0x34ef48, + 0x305148, + 0x49b67ec9, + 0x2af389, + 0x2afac6, + 0x2b0a88, + 0x2b0c89, + 0x2b1786, + 0x2b1905, + 0x372a86, + 0x2b1e49, + 0x319d87, + 0x25c446, + 0x233147, + 0x20e947, + 0x362e04, + 0x49f453c9, + 0x2cd008, + 0x353408, + 0x383d07, + 0x2c8686, + 0x235389, + 0x210147, + 0x34970a, + 0x330d48, + 0x349407, + 0x3b1546, + 0x2e834a, + 0x2733c8, + 0x30de45, + 0x36dac5, + 0x2f9807, + 0x371d49, + 0x3097cb, + 0x31e0c8, + 0x32d389, + 0x253487, + 0x2bad4c, + 0x2bb74c, + 0x2bba4a, + 0x2bbccc, + 0x2c5c08, + 0x2c5e08, + 0x2c6004, + 0x2c63c9, + 0x2c6609, + 0x2c684a, + 0x2c6ac9, + 0x2c6e07, + 0x3a448c, + 0x24b946, + 0x35d588, + 0x387706, + 0x330c06, + 0x3596c7, + 0x238ec8, + 0x2618cb, + 0x303207, + 0x359c49, + 0x251489, + 0x25bbc7, + 0x2e1e04, + 0x3643c7, + 0x2e1246, + 0x214046, + 0x2eb045, + 0x2c7408, + 0x2976c4, + 0x2976c6, + 0x2799cb, + 0x212cc9, + 0x209e06, + 0x20c709, + 0x392486, + 0x3aae08, + 0x214183, + 0x2fb985, + 0x215a09, + 0x224085, + 0x2f9644, + 0x27acc6, + 0x2ed005, + 0x2f7346, + 0x309ec7, + 0x328dc6, + 0x3a174b, + 0x22c447, + 0x234886, + 0x3742c6, + 0x390446, + 0x291189, + 0x240aca, + 0x2b8ec5, + 0x21898d, + 0x2a9846, + 0x2babc6, + 0x2ded86, + 0x2f31c5, + 0x2e4d87, + 0x29fa87, + 0x22bd4e, + 0x20fbc3, + 0x2c8649, + 0x263709, + 0x32dd87, + 0x2804c7, + 0x2a2ec5, + 0x343f05, + 0x4a23734f, + 0x2d10c7, + 0x2d1288, + 0x2d25c4, + 0x2d2e86, + 0x4a64db02, + 0x2d7346, + 0x201686, + 0x2638ce, + 0x2ec54a, + 0x28b6c6, + 0x22d88a, + 0x209a09, + 0x323d05, + 0x393948, + 0x3aef46, + 0x359508, + 0x2392c8, + 0x34434b, + 0x233805, + 0x26ae88, + 0x2062cc, + 0x2bf807, + 0x252546, + 0x281fc8, + 0x2253c8, + 0x4aa09282, + 0x25604b, + 0x37b489, + 0x2cf2c9, + 0x2f02c7, + 0x3b3648, + 0x4ae289c8, + 0x20e64b, + 0x37dd09, + 0x33f58d, + 0x27d648, + 0x290188, + 0x4b201882, + 0x3b2f44, + 0x4b60dc42, + 0x2f9486, + 0x4ba038c2, + 0x2448ca, + 0x210546, + 0x22d208, + 0x289e88, + 0x2e4086, + 0x2eb5c6, + 0x2f7106, + 0x2f1b45, + 0x23c804, + 0x4be1de04, + 0x20ae86, + 0x29a787, + 0x4c2f7d07, + 0x2dc60b, + 0x32f089, + 0x227e0a, + 0x263144, + 0x369108, + 0x25c20d, + 0x2f1509, + 0x2f1748, + 0x2f2009, + 0x2f39c4, + 0x20ce44, + 0x283cc5, + 0x317b0b, + 0x34eec6, + 0x33c645, + 0x21fb89, + 0x233a08, + 0x263844, + 0x32db09, + 0x208f45, + 0x2c3788, + 0x238847, + 0x358c48, + 0x284e86, + 0x22b987, + 0x2984c9, + 0x311a89, + 0x372545, + 0x295645, + 0x4c626a82, + 0x306f44, + 0x30ce05, + 0x2c1846, + 0x327285, + 0x2b4707, + 0x20af85, + 0x27b7c4, + 0x3aca86, + 0x383487, + 0x232106, + 0x21e105, + 0x202608, + 0x233f85, + 0x205d07, + 0x20bc49, + 0x212e0a, + 0x2494c7, + 0x2494cc, + 0x24df46, + 0x2e9ac9, + 0x230505, + 0x2366c8, + 0x210c03, + 0x210c05, + 0x2f7b45, + 0x26e707, + 0x4ca27202, + 0x227a07, + 0x2e5206, + 0x345306, + 0x2e62c6, + 0x225306, + 0x2091c8, + 0x35b805, + 0x2e7b47, + 0x2e7b4d, + 0x21b083, + 0x21f305, + 0x21b087, + 0x26b308, + 0x21ac45, + 0x2281c8, + 0x2ab9c6, + 0x32b247, + 0x2c7bc5, + 0x233886, + 0x2cfac5, + 0x22dfca, + 0x2efec6, + 0x25dbc7, + 0x2bc605, + 0x2f44c7, + 0x2f8904, + 0x2f95c6, + 0x3624c5, + 0x32608b, + 0x2e10c9, + 0x23d74a, + 0x3725c8, + 0x3007c8, + 0x300f0c, + 0x306b47, + 0x308c48, + 0x30aa88, + 0x30dac5, + 0x338b4a, + 0x33aa09, + 0x4ce00202, + 0x200206, + 0x20d684, + 0x2ef889, + 0x275d49, + 0x27b1c7, + 0x2fa547, + 0x2b7c09, + 0x331308, + 0x33130f, + 0x2dfa86, + 0x2db10b, + 0x361545, + 0x361547, + 0x374c89, + 0x2171c6, + 0x32da87, + 0x2dde85, + 0x22f544, + 0x26e186, + 0x211984, + 0x2e6c47, + 0x34c5c8, + 0x4d2fb708, + 0x2fbe85, + 0x2fbfc7, + 0x245709, + 0x208444, + 0x208448, + 0x4d7190c8, + 0x23cdc4, + 0x230c88, + 0x3396c4, + 0x220389, + 0x333105, + 0x4da05bc2, + 0x2dfac5, + 0x2e6845, + 0x271b88, + 0x232847, + 0x4de03382, + 0x30cbc5, + 0x2d4e86, + 0x27a786, + 0x306f08, + 0x318308, + 0x327246, + 0x32e246, + 0x249009, + 0x345246, + 0x21708b, + 0x2a12c5, + 0x204686, + 0x382588, + 0x3152c6, + 0x298e46, + 0x21b94a, + 0x22f9ca, + 0x2e8245, + 0x35b8c7, + 0x2f0cc6, + 0x4e206602, + 0x21b1c7, + 0x2a9085, + 0x226b44, + 0x226b45, + 0x263046, + 0x27a447, + 0x20d405, + 0x22fb44, + 0x365008, + 0x298f05, + 0x33c8c7, + 0x39fa85, + 0x22df05, + 0x256b44, + 0x28fbc9, + 0x2ff988, + 0x2ecec6, + 0x2de9c6, + 0x2b9d46, + 0x4e700448, + 0x300647, + 0x3009cd, + 0x30120c, + 0x301809, + 0x301a49, + 0x4eb546c2, + 0x3a5503, + 0x20b303, + 0x2e1305, + 0x38ddca, + 0x327106, + 0x307905, + 0x30a084, + 0x30a08b, + 0x31bdcc, + 0x31c5cc, + 0x31c8d5, + 0x31d74d, + 0x31f44f, + 0x31f812, + 0x31fc8f, + 0x320052, + 0x3204d3, + 0x32098d, + 0x320f4d, + 0x3212ce, + 0x322a8e, + 0x3232cc, + 0x32368c, + 0x323acb, + 0x323e4e, + 0x324f92, + 0x326ecc, + 0x327610, + 0x3335d2, + 0x3347cc, + 0x334e8d, + 0x3351cc, + 0x337611, + 0x3384cd, + 0x33ac4d, + 0x33b24a, + 0x33b4cc, + 0x33bdcc, + 0x33c34c, + 0x33cbcc, + 0x33fc53, + 0x340450, + 0x340850, + 0x340e4d, + 0x34144c, + 0x342209, + 0x342f0d, + 0x343253, + 0x344911, + 0x344d53, + 0x34560f, + 0x3459cc, + 0x345ccf, + 0x34608d, + 0x34668f, + 0x346a50, + 0x3474ce, + 0x34ac8e, + 0x34b590, + 0x34ca8d, + 0x34d40e, + 0x34d78c, + 0x34e753, + 0x351e0e, + 0x352390, + 0x352791, + 0x352bcf, + 0x352f93, + 0x35424d, + 0x35458f, + 0x35494e, + 0x354fd0, + 0x3553c9, + 0x356390, + 0x356acf, + 0x35714f, + 0x357512, + 0x359e8e, + 0x35a74d, + 0x35cc4d, + 0x35cf8d, + 0x35f68d, + 0x35f9cd, + 0x35fd10, + 0x36010b, + 0x36058c, + 0x36090c, + 0x360c0c, + 0x360f0e, + 0x372c10, + 0x374452, + 0x3748cb, + 0x374ece, + 0x37524e, + 0x375ace, + 0x37604b, + 0x4ef76396, + 0x37724d, + 0x378354, + 0x378e0d, + 0x37ae55, + 0x37c04d, + 0x37c9cf, + 0x37d20f, + 0x38028f, + 0x38064e, + 0x380acd, + 0x382f11, + 0x385ecc, + 0x3861cc, + 0x3864cb, + 0x386c4c, + 0x38824f, + 0x388612, + 0x388fcd, + 0x389f8c, + 0x38a40c, + 0x38a70d, + 0x38aa4f, + 0x38ae0e, + 0x38da8c, + 0x38e04d, + 0x38e38b, + 0x38ee8c, + 0x38f40d, + 0x38f74e, + 0x38fac9, + 0x390c53, + 0x39118d, + 0x3914cd, + 0x391acc, + 0x391f4e, + 0x39290f, + 0x392ccc, + 0x392fcd, + 0x39330f, + 0x3936cc, + 0x3943cc, + 0x39484c, + 0x394b4c, + 0x39520d, + 0x395552, + 0x396c0c, + 0x396f0c, + 0x397211, + 0x39764f, + 0x397a0f, + 0x397dd3, + 0x398a8e, + 0x398e0f, + 0x3991cc, + 0x4f39950e, + 0x39988f, + 0x399c56, + 0x39b312, + 0x39d64c, + 0x39e14f, + 0x39e7cd, + 0x39eb0f, + 0x39eecc, + 0x39f1cd, + 0x39f50d, + 0x3a0c4e, + 0x3a2b8c, + 0x3a2e8c, + 0x3a3190, + 0x3a4991, + 0x3a4dcb, + 0x3a510c, + 0x3a540e, + 0x3a7051, + 0x3a748e, + 0x3a780d, + 0x3aed0b, + 0x3afdcf, + 0x3b09d4, + 0x2630c2, + 0x2630c2, + 0x202583, + 0x2630c2, + 0x202583, + 0x2630c2, + 0x20ae82, + 0x372ac5, + 0x3a6d4c, + 0x2630c2, + 0x2630c2, + 0x20ae82, + 0x2630c2, + 0x29a385, + 0x212e05, + 0x2630c2, + 0x2630c2, + 0x211cc2, + 0x29a385, + 0x31e789, + 0x34460c, + 0x2630c2, + 0x2630c2, + 0x2630c2, + 0x2630c2, + 0x372ac5, + 0x2630c2, + 0x2630c2, + 0x2630c2, + 0x2630c2, + 0x211cc2, + 0x31e789, + 0x2630c2, + 0x2630c2, + 0x2630c2, + 0x212e05, + 0x2630c2, + 0x212e05, + 0x34460c, + 0x3a6d4c, + 0x368883, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x204ac3, + 0x200383, + 0x1f08, + 0x15444, + 0xc1348, + 0x204cc2, + 0x5020d1c2, + 0x243403, + 0x24c944, + 0x202743, + 0x38e8c4, + 0x22e886, + 0x213843, + 0x31aa84, + 0x288845, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x25084a, + 0x241f46, + 0x3755cc, + 0x15f048, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x22d603, + 0x201686, + 0x204ac3, + 0x200383, + 0x21aa03, + 0xaa288, + 0x3942, + 0x513856c5, + 0x2ac47, + 0xd7a88, + 0xc0ce, + 0x8c792, + 0x16780b, + 0x516db445, + 0x51adb44c, + 0xf207, + 0x13ecc7, + 0x1698ca, + 0x3efd0, + 0x1acd05, + 0x16e1cb, + 0x1672c8, + 0x13edc7, + 0x2f64b, + 0x11dd09, + 0x150f47, + 0x1b3c47, + 0x81187, + 0x20586, + 0x94b88, + 0x52028b86, + 0xafbcd, + 0x169290, + 0x52401742, + 0xfb48, + 0x71f47, + 0x7f149, + 0x59b46, + 0x99f08, + 0x74842, + 0xa4f4a, + 0x2d587, + 0x3b9c7, + 0xaa689, + 0xad708, + 0x15ae05, + 0x194e8e, + 0x14d4e, + 0x26f4f, + 0x2ccc9, + 0x4c809, + 0x77e8b, + 0x878cf, + 0x8fdcc, + 0xadd8b, + 0xc4d08, + 0xdc507, + 0x162908, + 0xfe04b, + 0x12a54c, + 0x141acc, + 0x147f4c, + 0x14b0cd, + 0x17de88, + 0x42602, + 0x104389, + 0x18528b, + 0xc8886, + 0x116f8b, + 0xdd5ca, + 0xde185, + 0xe4a90, + 0x1294c6, + 0x63c85, + 0xe6448, + 0xee547, + 0xee807, + 0x5e987, + 0xf92ca, + 0xd790a, + 0x177ac6, + 0x97ccd, + 0x1ae208, + 0x56608, + 0x56a89, + 0xb9905, + 0x19de4c, + 0x14b2cb, + 0x171c84, + 0xff749, + 0x8146, + 0x16c2, + 0x125886, + 0x10d947, + 0x6c82, + 0xcb605, + 0x29b04, + 0x701, + 0x2bc43, + 0x51fadbc6, + 0x9a283, + 0x8a42, + 0x2d584, + 0x1442, + 0x4ae04, + 0x1342, + 0x2f82, + 0x3682, + 0x1124c2, + 0xe542, + 0xdb442, + 0x2ac2, + 0x1c402, + 0x26982, + 0x4d02, + 0x3b02, + 0x34682, + 0x31b83, + 0x7d02, + 0x1c2, + 0x41c2, + 0xda42, + 0x642, + 0xdc2, + 0x18d82, + 0x1a02, + 0x2282, + 0x1d42, + 0x4303, + 0xb02, + 0x2f02, + 0xb5e02, + 0x1b02, + 0x5d82, + 0x32c2, + 0x73c2, + 0x17c2, + 0x1f02, + 0x173102, + 0x73fc2, + 0x5e402, + 0x4ac3, + 0x2c2, + 0x9282, + 0x1002, + 0x14602, + 0x1724c5, + 0x6ec2, + 0x1202, + 0x41703, + 0x682, + 0xd42, + 0x1702, + 0xe5c2, + 0x1ac2, + 0x3382, + 0x6902, + 0x16c2, + 0x73c07, + 0x213dc3, + 0x204cc2, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x201d43, + 0x22d603, + 0x204ac3, + 0x20abc3, + 0x200383, + 0x29a2c3, + 0x1a5c3, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x20fbc3, + 0x204ac3, + 0x20abc3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x200041, + 0x20fbc3, + 0x204ac3, + 0x2104c3, + 0x200383, + 0x368883, + 0x2d0783, + 0x231b83, + 0x20fb43, + 0x2135c3, + 0x2300c3, + 0x287703, + 0x210503, + 0x234743, + 0x332ec3, + 0x2964c4, + 0x204ac3, + 0x200383, + 0x24abc3, + 0x200604, + 0x250c83, + 0x5283, + 0x3abd03, + 0x329b88, + 0x2e8384, + 0x2c264a, + 0x224906, + 0x10f9c4, + 0x38c2c7, + 0x21eeca, + 0x2df949, + 0x3a3b07, + 0x3a7dca, + 0x368883, + 0x2e900b, + 0x303349, + 0x2b9e45, + 0x2d7187, + 0xd1c2, + 0x2d0783, + 0x204d07, + 0x248d45, + 0x2e1cc9, + 0x231b83, + 0x233606, + 0x2c56c3, + 0xe1183, + 0x109686, + 0x60546, + 0x137c7, + 0x217546, + 0x222645, + 0x2cf187, + 0x2da587, + 0x54b32ec3, + 0x334a07, + 0x3642c3, + 0x3a2385, + 0x2964c4, + 0x32e3c8, + 0x2751cc, + 0x3a5745, + 0x2a2086, + 0x204bc7, + 0x37ef47, + 0x25b8c7, + 0x31f248, + 0x307ecf, + 0x2dfb85, + 0x243507, + 0x2394c7, + 0x2a9b0a, + 0x2d7e49, + 0x30bc85, + 0x32194a, + 0x1b06, + 0x2c5745, + 0x376284, + 0x289dc6, + 0x2f8cc7, + 0x242507, + 0x38cbc8, + 0x214185, + 0x248c46, + 0x20c545, + 0x387845, + 0x212c04, + 0x2e3f87, + 0x20900a, + 0x234d48, + 0x356946, + 0x2d603, + 0x2e0405, + 0x26c686, + 0x3a46c6, + 0x263b86, + 0x20fbc3, + 0x389247, + 0x239445, + 0x204ac3, + 0x2dd88d, + 0x20abc3, + 0x38ccc8, + 0x39a5c4, + 0x27ba85, + 0x2a9a06, + 0x2362c6, + 0x204587, + 0x2ae707, + 0x270b05, + 0x200383, + 0x27f2c7, + 0x329709, + 0x22b689, + 0x2f590a, + 0x24cd82, + 0x3a2344, + 0x2e76c4, + 0x261787, + 0x2278c8, + 0x2ef309, + 0x21f1c9, + 0x2f0487, + 0x303806, + 0xf22c6, + 0x2f39c4, + 0x2f3fca, + 0x2f6a08, + 0x2f6fc9, + 0x2bfe86, + 0x2b6ec5, + 0x234c08, + 0x2c9c4a, + 0x22c6c3, + 0x200786, + 0x2f0587, + 0x217f85, + 0x39a485, + 0x2717c3, + 0x258a04, + 0x36da85, + 0x288e47, + 0x2ffac5, + 0x2ed686, + 0xfff05, + 0x264a03, + 0x28b789, + 0x27b84c, + 0x2a7e0c, + 0x2d3bc8, + 0x3ade87, + 0x2fc8c8, + 0x2fcc0a, + 0x2fd84b, + 0x303488, + 0x33f408, + 0x2363c6, + 0x262685, + 0x200f4a, + 0x219545, + 0x205bc2, + 0x2c7a87, + 0x2a32c6, + 0x355ec5, + 0x38e989, + 0x26b785, + 0x285ec5, + 0x3a1f49, + 0x257cc6, + 0x3b1088, + 0x23e0c3, + 0x3b3306, + 0x27ac06, + 0x30ba85, + 0x30ba89, + 0x2bc289, + 0x24d0c7, + 0x10b904, + 0x30b907, + 0x21f0c9, + 0x23c905, + 0x4bbc8, + 0x3b3205, + 0x339505, + 0x376c89, + 0x205ac2, + 0x2e95c4, + 0x20d782, + 0x200b02, + 0x2ce985, + 0x30f748, + 0x2b9845, + 0x2c6fc3, + 0x2c6fc5, + 0x2d7543, + 0x210882, + 0x2e30c4, + 0x351903, + 0x204c82, + 0x35bb44, + 0x2e85c3, + 0x200e82, + 0x25e903, + 0x291704, + 0x2e7083, + 0x246f04, + 0x202602, + 0x21a903, + 0x215b43, + 0x206342, + 0x33c282, + 0x2bc0c9, + 0x202d82, + 0x28d304, + 0x201782, + 0x234a84, + 0x3037c4, + 0x2bcc44, + 0x2016c2, + 0x241a02, + 0x220883, + 0x225f83, + 0x387944, + 0x269e44, + 0x2bc484, + 0x2ce884, + 0x30b143, + 0x34f743, + 0x201a84, + 0x30d784, + 0x30e786, + 0x2e7782, + 0x20d1c2, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x204cc2, + 0x368883, + 0x2d0783, + 0x231b83, + 0x2001c3, + 0x332ec3, + 0x2964c4, + 0x2bc384, + 0x213184, + 0x204ac3, + 0x200383, + 0x21aa03, + 0x2f4684, + 0x32f983, + 0x2bf3c3, + 0x345184, + 0x3b3006, + 0x211503, + 0x13ecc7, + 0x234fc3, + 0x23a943, + 0x2b6703, + 0x265383, + 0x22d603, + 0x2db6c5, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2ed143, + 0x2ab343, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204303, + 0x204ac3, + 0x23ee04, + 0x200383, + 0x26a104, + 0x2c2d45, + 0x13ecc7, + 0x20d1c2, + 0x2000c2, + 0x208a42, + 0x202082, + 0x200382, + 0x2d0783, + 0x23a184, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x213184, + 0x204ac3, + 0x200383, + 0x213e83, + 0x24ae04, + 0x15f048, + 0x2d0783, + 0x20abc3, + 0x1a5c3, + 0x24fe44, + 0x15f048, + 0x2d0783, + 0x251304, + 0x2964c4, + 0x20abc3, + 0x201882, + 0x200383, + 0x2202c3, + 0x58a04, + 0x370145, + 0x205bc2, + 0x30d8c3, + 0x204cc2, + 0x15f048, + 0x20d1c2, + 0x231b83, + 0x332ec3, + 0x201d42, + 0x200383, + 0x204cc2, + 0x15f048, + 0x231b83, + 0x332ec3, + 0x204303, + 0x20fbc3, + 0x30b544, + 0x204cc2, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x2da904, + 0x332ec3, + 0x204303, + 0x20fbc3, + 0x204ac3, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x22d603, + 0x204ac3, + 0x200383, + 0x26a103, + 0x213e83, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x1a5c3, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x22d603, + 0x204ac3, + 0x200383, + 0x217082, + 0x200141, + 0x204cc2, + 0x200001, + 0x31f542, + 0x15f048, + 0x21d105, + 0x200701, + 0xd0783, + 0x200101, + 0x2000c1, + 0x201e41, + 0x29da82, + 0x36da04, + 0x372a43, + 0x200181, + 0x200941, + 0x200041, + 0x200081, + 0x2ed7c7, + 0x2eeccf, + 0x2fc146, + 0x201481, + 0x289786, + 0x200c01, + 0x2002c1, + 0x33168e, + 0x200381, + 0x200383, + 0x200e81, + 0x279e45, + 0x210582, + 0x2716c5, + 0x2003c1, + 0x200201, + 0x200241, + 0x205bc2, + 0x200a01, + 0x201a81, + 0x2005c1, + 0x2007c1, + 0x200cc1, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x21bd03, + 0x2d0783, + 0x332ec3, + 0x91d48, + 0x20fbc3, + 0x204ac3, + 0x48803, + 0x200383, + 0x14ebc48, + 0x15f048, + 0x4dcc4, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x204ac3, + 0x200383, + 0x205283, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x2da904, + 0x200383, + 0x293ac5, + 0x343984, + 0x2d0783, + 0x204ac3, + 0x200383, + 0x16b18a, + 0x20d1c2, + 0x2d0783, + 0x22f489, + 0x231b83, + 0x2d2389, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x2f37c8, + 0x226647, + 0x370145, + 0x3a7f87, + 0x26b0cb, + 0x215cc8, + 0x32eac9, + 0x228087, + 0x200108, + 0x36f906, + 0x2344c7, + 0x29c108, + 0x2ab806, + 0x31d407, + 0x2aa449, + 0x2ba749, + 0x2c2ac6, + 0x2c38c5, + 0x2cce08, + 0x2b4783, + 0x2d7c88, + 0x231d87, + 0x206583, + 0x31d287, + 0x217905, + 0x2eeb08, + 0x359105, + 0x2cea43, + 0x23c289, + 0x2b0e87, + 0x35d504, + 0x2ff244, + 0x307ccb, + 0x308288, + 0x309587, + 0x2d0783, + 0x231b83, + 0x2135c3, + 0x200383, + 0x236ec3, + 0x332ec3, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x77fcb, + 0x204cc2, + 0x20d1c2, + 0x200383, + 0x15f048, + 0x204cc2, + 0x20d1c2, + 0x208a42, + 0x201d42, + 0x203cc2, + 0x204ac3, + 0x200382, + 0x204cc2, + 0x368883, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x208a42, + 0x332ec3, + 0x204303, + 0x20fbc3, + 0x213184, + 0x204ac3, + 0x2183c3, + 0x200383, + 0x30b544, + 0x24abc3, + 0x332ec3, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x20abc3, + 0x200383, + 0x39db07, + 0x2d0783, + 0x26e5c7, + 0x362a86, + 0x215ac3, + 0x2041c3, + 0x332ec3, + 0x209e43, + 0x2964c4, + 0x38b704, + 0x30dbc6, + 0x201303, + 0x204ac3, + 0x200383, + 0x293ac5, + 0x318244, + 0x369dc3, + 0x37ed83, + 0x2c7a87, + 0x2387c5, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x203782, + 0x3ae343, + 0x2c2d43, + 0x368883, + 0x5fed0783, + 0x209c02, + 0x231b83, + 0x202743, + 0x332ec3, + 0x2964c4, + 0x23a0c3, + 0x2dfb83, + 0x20fbc3, + 0x213184, + 0x6020c002, + 0x204ac3, + 0x200383, + 0x209103, + 0x229b03, + 0x217082, + 0x24abc3, + 0x15f048, + 0x332ec3, + 0x1a5c3, + 0x2957c4, + 0x368883, + 0x20d1c2, + 0x2d0783, + 0x23a184, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x204303, + 0x2cee84, + 0x222044, + 0x201686, + 0x213184, + 0x204ac3, + 0x200383, + 0x21aa03, + 0x2a32c6, + 0x3ddcb, + 0x28b86, + 0x4aa0a, + 0x10adca, + 0x15f048, + 0x20c504, + 0x2d0783, + 0x368844, + 0x231b83, + 0x256bc4, + 0x332ec3, + 0x262fc3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x32e84b, + 0x39f84a, + 0x3b478c, + 0x204cc2, + 0x20d1c2, + 0x208a42, + 0x2b0405, + 0x2964c4, + 0x201f02, + 0x20fbc3, + 0x222044, + 0x202082, + 0x200382, + 0x20c4c2, + 0x217082, + 0x168883, + 0xd882, + 0x2b2409, + 0x259f88, + 0x332d49, + 0x234309, + 0x23b18a, + 0x24550a, + 0x20a182, + 0x21c402, + 0xd1c2, + 0x2d0783, + 0x220802, + 0x2436c6, + 0x356fc2, + 0x20a542, + 0x21ad8e, + 0x21a94e, + 0x281a47, + 0x204a47, + 0x221202, + 0x231b83, + 0x332ec3, + 0x20b502, + 0x201d42, + 0x4143, + 0x24058f, + 0x26b142, + 0x362cc7, + 0x2fa1c7, + 0x39d487, + 0x31e28c, + 0x364d0c, + 0x202444, + 0x283b0a, + 0x21a882, + 0x201b02, + 0x2bc744, + 0x22b1c2, + 0x2c5c02, + 0x364f44, + 0x2184c2, + 0x205d82, + 0x5d83, + 0x2ab887, + 0x33d885, + 0x2073c2, + 0x240504, + 0x373102, + 0x2df088, + 0x204ac3, + 0x203808, + 0x203ac2, + 0x232d85, + 0x203ac6, + 0x200383, + 0x206ec2, + 0x2ef547, + 0x10582, + 0x350845, + 0x31d185, + 0x207c82, + 0x236b82, + 0x3a860a, + 0x27098a, + 0x212bc2, + 0x353f84, + 0x2018c2, + 0x3a2208, + 0x219682, + 0x2a2588, + 0x304987, + 0x304c89, + 0x2037c2, + 0x309e45, + 0x247e85, + 0x21424b, + 0x2ca84c, + 0x22c208, + 0x3186c8, + 0x2e7782, + 0x204642, + 0x204cc2, + 0x15f048, + 0x20d1c2, + 0x2d0783, + 0x208a42, + 0x202082, + 0x200382, + 0x200383, + 0x20c4c2, + 0x204cc2, + 0x6260d1c2, + 0x62b32ec3, + 0x205d83, + 0x201f02, + 0x204ac3, + 0x3a8fc3, + 0x200383, + 0x2ec383, + 0x273d06, + 0x1613e83, + 0x15f048, + 0x63c85, + 0xae2cd, + 0xaafca, + 0x6ebc7, + 0x63201b82, + 0x63601442, + 0x63a00f82, + 0x63e02e02, + 0x642125c2, + 0x6460e542, + 0x13ecc7, + 0x64a0d1c2, + 0x64e0e482, + 0x6520fe42, + 0x65603b02, + 0x21a943, + 0x102c4, + 0x220a43, + 0x65a14002, + 0x65e023c2, + 0x51847, + 0x66214502, + 0x66600b82, + 0x66a00542, + 0x66e0a3c2, + 0x67202282, + 0x67601d42, + 0xbe445, + 0x221443, + 0x3b3bc4, + 0x67a2b1c2, + 0x67e42682, + 0x68202682, + 0x7e5cb, + 0x68600c02, + 0x68e513c2, + 0x69201f02, + 0x69603cc2, + 0x69a0bcc2, + 0x69e05f02, + 0x6a20b602, + 0x6a673fc2, + 0x6aa0c002, + 0x6ae04a02, + 0x6b202082, + 0x6b603702, + 0x6ba12982, + 0x6be31302, + 0x94fc4, + 0x358183, + 0x6c2126c2, + 0x6c61a582, + 0x6ca098c2, + 0x6ce00982, + 0x6d200382, + 0x6d604c82, + 0x78147, + 0x6da054c2, + 0x6de05502, + 0x6e20c4c2, + 0x6e609f42, + 0x19de4c, + 0x6ea22e82, + 0x6ee79242, + 0x6f200a02, + 0x6f606602, + 0x6fa019c2, + 0x6fe3b302, + 0x70206d02, + 0x70613882, + 0x70a7af82, + 0x70e43e02, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x75c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x68a3a0c3, + 0x2075c3, + 0x2db744, + 0x259e86, + 0x2f74c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x20d882, + 0x20d882, + 0x23a0c3, + 0x2075c3, + 0x716d0783, + 0x231b83, + 0x329e83, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x15f048, + 0x20d1c2, + 0x2d0783, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x24fe44, + 0x20d1c2, + 0x2d0783, + 0x3303c3, + 0x231b83, + 0x251304, + 0x2135c3, + 0x332ec3, + 0x2964c4, + 0x204303, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x2202c3, + 0x370145, + 0x2b2703, + 0x24abc3, + 0x20d1c2, + 0x2d0783, + 0x23a0c3, + 0x204ac3, + 0x200383, + 0x204cc2, + 0x368883, + 0x15f048, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x22e886, + 0x2964c4, + 0x204303, + 0x213184, + 0x204ac3, + 0x200383, + 0x21aa03, + 0x2d0783, + 0x231b83, + 0x204ac3, + 0x200383, + 0x2d0783, + 0x28b86, + 0x231b83, + 0x332ec3, + 0xe1946, + 0x204ac3, + 0x200383, + 0x315cc8, + 0x318509, + 0x327a09, + 0x332548, + 0x37d888, + 0x37d889, + 0x9da85, + 0x204cc2, + 0x238605, + 0x205d43, + 0x7420d1c2, + 0x231b83, + 0x332ec3, + 0x33e387, + 0x265383, + 0x20fbc3, + 0x204ac3, + 0x2104c3, + 0x212483, + 0x20abc3, + 0x200383, + 0x241f46, + 0x205bc2, + 0x24abc3, + 0x15f048, + 0x204cc2, + 0x368883, + 0x20d1c2, + 0x2d0783, + 0x231b83, + 0x332ec3, + 0x2964c4, + 0x20fbc3, + 0x204ac3, + 0x200383, + 0x213e83, + 0x153ca46, +} + +// children is the list of nodes' children, the parent's wildcard bit and the +// parent's node type. If a node has no children then their children index +// will be in the range [0, 6), depending on the wildcard bit and node type. +// +// The layout within the uint32, from MSB to LSB, is: +// [ 1 bits] unused +// [ 1 bits] wildcard bit +// [ 2 bits] node type +// [14 bits] high nodes index (exclusive) of children +// [14 bits] low nodes index (inclusive) of children +var children = [...]uint32{ + 0x0, + 0x10000000, + 0x20000000, + 0x40000000, + 0x50000000, + 0x60000000, + 0x1860612, + 0x1864618, + 0x1884619, + 0x19e0621, + 0x19f4678, + 0x1a0867d, + 0x1a18682, + 0x1a34686, + 0x1a3868d, + 0x1a5068e, + 0x1a74694, + 0x1a7869d, + 0x1a9069e, + 0x1a946a4, + 0x1a986a5, + 0x1ac06a6, + 0x1ac46b0, + 0x21acc6b1, + 0x1b146b3, + 0x1b186c5, + 0x1b386c6, + 0x1b4c6ce, + 0x1b506d3, + 0x1b806d4, + 0x1b9c6e0, + 0x1bc46e7, + 0x1bd06f1, + 0x1bd46f4, + 0x1c686f5, + 0x1c7c71a, + 0x1c9071f, + 0x1cc0724, + 0x1cd0730, + 0x1ce4734, + 0x1d08739, + 0x1e20742, + 0x1e24788, + 0x1e90789, + 0x1ea47a4, + 0x1eb87a9, + 0x1ec07ae, + 0x1ed07b0, + 0x1ed47b4, + 0x1eec7b5, + 0x1f347bb, + 0x1f4c7cd, + 0x1f507d3, + 0x1f547d4, + 0x1f5c7d5, + 0x1f987d7, + 0x61f9c7e6, + 0x1fb07e7, + 0x1fbc7ec, + 0x1fc07ef, + 0x1fd07f0, + 0x20807f4, + 0x2084820, + 0x22090821, + 0x22098824, + 0x20cc826, + 0x20d0833, + 0x2514834, + 0x225ac945, + 0x225b096b, + 0x225b496c, + 0x225c096d, + 0x225c4970, + 0x225d0971, + 0x225d4974, + 0x225d8975, + 0x225dc976, + 0x225e0977, + 0x225e4978, + 0x225f0979, + 0x225f497c, + 0x2260097d, + 0x22604980, + 0x22608981, + 0x2260c982, + 0x22610983, + 0x22614984, + 0x2618985, + 0x2261c986, + 0x22628987, + 0x2262c98a, + 0x263498b, + 0x2264498d, + 0x22648991, + 0x2654992, + 0x22658995, + 0x265c996, + 0x22660997, + 0x267c998, + 0x269499f, + 0x26989a5, + 0x26a89a6, + 0x26b09aa, + 0x26e49ac, + 0x26e89b9, + 0x26f89ba, + 0x27909be, + 0x227949e4, + 0x279c9e5, + 0x27a09e7, + 0x27b89e8, + 0x27cc9ee, + 0x27f49f3, + 0x28149fd, + 0x2844a05, + 0x286ca11, + 0x2870a1b, + 0x2894a1c, + 0x2898a25, + 0x28aca26, + 0x28b0a2b, + 0x28b4a2c, + 0x28d4a2d, + 0x28eca35, + 0x28f0a3b, + 0x228f4a3c, + 0x28f8a3d, + 0x2908a3e, + 0x290ca42, + 0x2984a43, + 0x29a0a61, + 0x29aca68, + 0x29c0a6b, + 0x29d8a70, + 0x29eca76, + 0x2a04a7b, + 0x2a1ca81, + 0x2a34a87, + 0x2a50a8d, + 0x2a68a94, + 0x2ac8a9a, + 0x2ae0ab2, + 0x2ae4ab8, + 0x2af8ab9, + 0x2b3cabe, + 0x2bbcacf, + 0x2be8aef, + 0x2becafa, + 0x2bf4afb, + 0x2c14afd, + 0x2c18b05, + 0x2c38b06, + 0x2c40b0e, + 0x2c78b10, + 0x2cb8b1e, + 0x2cbcb2e, + 0x2d0cb2f, + 0x2d10b43, + 0x22d14b44, + 0x2d2cb45, + 0x2d50b4b, + 0x2d70b54, + 0x3334b5c, + 0x3340ccd, + 0x3360cd0, + 0x351ccd8, + 0x35ecd47, + 0x365cd7b, + 0x36b4d97, + 0x379cdad, + 0x37f4de7, + 0x3830dfd, + 0x392ce0c, + 0x39f8e4b, + 0x3a90e7e, + 0x3b20ea4, + 0x3b84ec8, + 0x3dbcee1, + 0x3e74f6f, + 0x3f40f9d, + 0x3f8cfd0, + 0x4014fe3, + 0x4051005, + 0x40a1014, + 0x4119028, + 0x6411d046, + 0x64121047, + 0x64125048, + 0x41a1049, + 0x41fd068, + 0x427907f, + 0x42f109e, + 0x43710bc, + 0x43dd0dc, + 0x45090f7, + 0x4561142, + 0x64565158, + 0x45fd159, + 0x468517f, + 0x46d11a1, + 0x47391b4, + 0x47e11ce, + 0x48a91f8, + 0x491122a, + 0x4a25244, + 0x64a29289, + 0x64a2d28a, + 0x4a8928b, + 0x4ae52a2, + 0x4b752b9, + 0x4bf12dd, + 0x4c352fc, + 0x4d1930d, + 0x4d4d346, + 0x4dad353, + 0x4e2136b, + 0x4ea9388, + 0x4ee93aa, + 0x4f593ba, + 0x64f5d3d6, + 0x64f613d7, + 0x24f653d8, + 0x4f7d3d9, + 0x4f993df, + 0x4fdd3e6, + 0x4fed3f7, + 0x50053fb, + 0x507d401, + 0x508541f, + 0x5099421, + 0x50b1426, + 0x50d942c, + 0x50dd436, + 0x50e5437, + 0x50f9439, + 0x511543e, + 0x5119445, + 0x5121446, + 0x515d448, + 0x5171457, + 0x517945c, + 0x518145e, + 0x5185460, + 0x51a9461, + 0x51cd46a, + 0x51e5473, + 0x51e9479, + 0x51f147a, + 0x51f547c, + 0x524d47d, + 0x5271493, + 0x529149c, + 0x52ad4a4, + 0x52bd4ab, + 0x52d14af, + 0x52d54b4, + 0x52dd4b5, + 0x52f14b7, + 0x53014bc, + 0x53054c0, + 0x53214c1, + 0x5bb14c8, + 0x5be96ec, + 0x5c156fa, + 0x5c2d705, + 0x5c4d70b, + 0x5c6d713, + 0x5cb171b, + 0x5cb972c, + 0x25cbd72e, + 0x25cc172f, + 0x5cc5730, + 0x5e01731, + 0x25e05780, + 0x25e11781, + 0x25e19784, + 0x25e25786, + 0x5e29789, + 0x5e2d78a, + 0x5e5578b, + 0x5e7d795, + 0x5e8179f, + 0x5eb97a0, + 0x5ecd7ae, + 0x6a257b3, + 0x6a29a89, + 0x6a2da8a, + 0x26a31a8b, + 0x6a35a8c, + 0x26a39a8d, + 0x6a3da8e, + 0x26a49a8f, + 0x6a4da92, + 0x6a51a93, + 0x26a55a94, + 0x6a59a95, + 0x26a61a96, + 0x6a65a98, + 0x6a69a99, + 0x26a79a9a, + 0x6a7da9e, + 0x6a81a9f, + 0x6a85aa0, + 0x6a89aa1, + 0x26a8daa2, + 0x6a91aa3, + 0x6a95aa4, + 0x6a99aa5, + 0x6a9daa6, + 0x26aa5aa7, + 0x6aa9aa9, + 0x6aadaaa, + 0x6ab1aab, + 0x26ab5aac, + 0x6ab9aad, + 0x26ac1aae, + 0x26ac5ab0, + 0x6ae1ab1, + 0x6aedab8, + 0x6b2dabb, + 0x6b31acb, + 0x6b55acc, + 0x6b59ad5, + 0x6cc1ad6, + 0x26cc5b30, + 0x26ccdb31, + 0x26cd1b33, + 0x26cd5b34, + 0x6cddb35, + 0x6db9b37, + 0x6dbdb6e, + 0x6de9b6f, + 0x6dedb7a, + 0x6e0db7b, + 0x6e19b83, + 0x6e39b86, + 0x6e71b8e, + 0x7109b9c, + 0x71c5c42, + 0x71d9c71, + 0x720dc76, + 0x723dc83, + 0x7259c8f, + 0x727dc96, + 0x7299c9f, + 0x72b5ca6, + 0x72d9cad, + 0x72e9cb6, + 0x72edcba, + 0x7321cbb, + 0x733dcc8, + 0x7359ccf, + 0x737dcd6, + 0x739dcdf, + 0x73b1ce7, + 0x73c5cec, + 0x73c9cf1, + 0x73e9cf2, + 0x748dcfa, + 0x74a9d23, + 0x74c9d2a, + 0x74cdd32, + 0x74d1d33, + 0x74d5d34, + 0x74e9d35, + 0x7509d3a, + 0x7515d42, + 0x7519d45, + 0x7549d46, + 0x75c9d52, + 0x75ddd72, + 0x75e1d77, + 0x75f9d78, + 0x75fdd7e, + 0x7609d7f, + 0x760dd82, + 0x7629d83, + 0x7665d8a, + 0x7669d99, + 0x7689d9a, + 0x76d9da2, + 0x76f1db6, + 0x7745dbc, + 0x7749dd1, + 0x774ddd2, + 0x7751dd3, + 0x7795dd4, + 0x77a5de5, + 0x77ddde9, + 0x780ddf7, + 0x7955e03, + 0x7979e55, + 0x79a5e5e, + 0x79b1e69, + 0x79b9e6c, + 0x7ac9e6e, + 0x7ad5eb2, + 0x7ae1eb5, + 0x7aedeb8, + 0x7af9ebb, + 0x7b05ebe, + 0x7b11ec1, + 0x7b1dec4, + 0x7b29ec7, + 0x7b35eca, + 0x7b41ecd, + 0x7b4ded0, + 0x7b59ed3, + 0x7b65ed6, + 0x7b6ded9, + 0x7b79edb, + 0x7b85ede, + 0x7b91ee1, + 0x7b9dee4, + 0x7ba9ee7, + 0x7bb5eea, + 0x7bc1eed, + 0x7bcdef0, + 0x7bd9ef3, + 0x7be5ef6, + 0x7bf1ef9, + 0x7bfdefc, + 0x7c09eff, + 0x7c15f02, + 0x7c21f05, + 0x7c2df08, + 0x7c39f0b, + 0x7c41f0e, + 0x7c4df10, + 0x7c59f13, + 0x7c65f16, + 0x7c71f19, + 0x7c7df1c, + 0x7c89f1f, + 0x7c95f22, + 0x7ca1f25, + 0x7cadf28, + 0x7cb9f2b, + 0x7cc5f2e, + 0x7cd1f31, + 0x7cddf34, + 0x7ce5f37, + 0x7cf1f39, + 0x7cfdf3c, + 0x7d09f3f, + 0x7d15f42, + 0x7d21f45, + 0x7d2df48, + 0x7d39f4b, + 0x7d45f4e, + 0x7d49f51, + 0x7d55f52, + 0x7d6df55, + 0x7d71f5b, + 0x7d81f5c, + 0x7d99f60, + 0x7dddf66, + 0x7df1f77, + 0x7e25f7c, + 0x7e35f89, + 0x7e51f8d, + 0x7e69f94, + 0x7e6df9a, + 0x27eb1f9b, + 0x7eb5fac, + 0x7ee1fad, + 0x7ee5fb8, +} + +// max children 466 (capacity 511) +// max text offset 28023 (capacity 32767) +// max text length 36 (capacity 63) +// max hi 8121 (capacity 16383) +// max lo 8120 (capacity 16383) diff --git a/vendor/golang.org/x/net/publicsuffix/table_test.go b/vendor/golang.org/x/net/publicsuffix/table_test.go new file mode 100644 index 0000000..f60c80e --- /dev/null +++ b/vendor/golang.org/x/net/publicsuffix/table_test.go @@ -0,0 +1,16196 @@ +// generated by go run gen.go; DO NOT EDIT + +package publicsuffix + +var rules = [...]string{ + "ac", + "com.ac", + "edu.ac", + "gov.ac", + "net.ac", + "mil.ac", + "org.ac", + "ad", + "nom.ad", + "ae", + "co.ae", + "net.ae", + "org.ae", + "sch.ae", + "ac.ae", + "gov.ae", + "mil.ae", + "aero", + "accident-investigation.aero", + "accident-prevention.aero", + "aerobatic.aero", + "aeroclub.aero", + "aerodrome.aero", + "agents.aero", + "aircraft.aero", + "airline.aero", + "airport.aero", + "air-surveillance.aero", + "airtraffic.aero", + "air-traffic-control.aero", + "ambulance.aero", + "amusement.aero", + "association.aero", + "author.aero", + "ballooning.aero", + "broker.aero", + "caa.aero", + "cargo.aero", + "catering.aero", + "certification.aero", + "championship.aero", + "charter.aero", + "civilaviation.aero", + "club.aero", + "conference.aero", + "consultant.aero", + "consulting.aero", + "control.aero", + "council.aero", + "crew.aero", + "design.aero", + "dgca.aero", + "educator.aero", + "emergency.aero", + "engine.aero", + "engineer.aero", + "entertainment.aero", + "equipment.aero", + "exchange.aero", + "express.aero", + "federation.aero", + "flight.aero", + "freight.aero", + "fuel.aero", + "gliding.aero", + "government.aero", + "groundhandling.aero", + "group.aero", + "hanggliding.aero", + "homebuilt.aero", + "insurance.aero", + "journal.aero", + "journalist.aero", + "leasing.aero", + "logistics.aero", + "magazine.aero", + "maintenance.aero", + "media.aero", + "microlight.aero", + "modelling.aero", + "navigation.aero", + "parachuting.aero", + "paragliding.aero", + "passenger-association.aero", + "pilot.aero", + "press.aero", + "production.aero", + "recreation.aero", + "repbody.aero", + "res.aero", + "research.aero", + "rotorcraft.aero", + "safety.aero", + "scientist.aero", + "services.aero", + "show.aero", + "skydiving.aero", + "software.aero", + "student.aero", + "trader.aero", + "trading.aero", + "trainer.aero", + "union.aero", + "workinggroup.aero", + "works.aero", + "af", + "gov.af", + "com.af", + "org.af", + "net.af", + "edu.af", + "ag", + "com.ag", + "org.ag", + "net.ag", + "co.ag", + "nom.ag", + "ai", + "off.ai", + "com.ai", + "net.ai", + "org.ai", + "al", + "com.al", + "edu.al", + "gov.al", + "mil.al", + "net.al", + "org.al", + "am", + "ao", + "ed.ao", + "gv.ao", + "og.ao", + "co.ao", + "pb.ao", + "it.ao", + "aq", + "ar", + "com.ar", + "edu.ar", + "gob.ar", + "gov.ar", + "int.ar", + "mil.ar", + "net.ar", + "org.ar", + "tur.ar", + "arpa", + "e164.arpa", + "in-addr.arpa", + "ip6.arpa", + "iris.arpa", + "uri.arpa", + "urn.arpa", + "as", + "gov.as", + "asia", + "at", + "ac.at", + "co.at", + "gv.at", + "or.at", + "au", + "com.au", + "net.au", + "org.au", + "edu.au", + "gov.au", + "asn.au", + "id.au", + "info.au", + "conf.au", + "oz.au", + "act.au", + "nsw.au", + "nt.au", + "qld.au", + "sa.au", + "tas.au", + "vic.au", + "wa.au", + "act.edu.au", + "nsw.edu.au", + "nt.edu.au", + "qld.edu.au", + "sa.edu.au", + "tas.edu.au", + "vic.edu.au", + "wa.edu.au", + "qld.gov.au", + "sa.gov.au", + "tas.gov.au", + "vic.gov.au", + "wa.gov.au", + "aw", + "com.aw", + "ax", + "az", + "com.az", + "net.az", + "int.az", + "gov.az", + "org.az", + "edu.az", + "info.az", + "pp.az", + "mil.az", + "name.az", + "pro.az", + "biz.az", + "ba", + "com.ba", + "edu.ba", + "gov.ba", + "mil.ba", + "net.ba", + "org.ba", + "bb", + "biz.bb", + "co.bb", + "com.bb", + "edu.bb", + "gov.bb", + "info.bb", + "net.bb", + "org.bb", + "store.bb", + "tv.bb", + "*.bd", + "be", + "ac.be", + "bf", + "gov.bf", + "bg", + "a.bg", + "b.bg", + "c.bg", + "d.bg", + "e.bg", + "f.bg", + "g.bg", + "h.bg", + "i.bg", + "j.bg", + "k.bg", + "l.bg", + "m.bg", + "n.bg", + "o.bg", + "p.bg", + "q.bg", + "r.bg", + "s.bg", + "t.bg", + "u.bg", + "v.bg", + "w.bg", + "x.bg", + "y.bg", + "z.bg", + "0.bg", + "1.bg", + "2.bg", + "3.bg", + "4.bg", + "5.bg", + "6.bg", + "7.bg", + "8.bg", + "9.bg", + "bh", + "com.bh", + "edu.bh", + "net.bh", + "org.bh", + "gov.bh", + "bi", + "co.bi", + "com.bi", + "edu.bi", + "or.bi", + "org.bi", + "biz", + "bj", + "asso.bj", + "barreau.bj", + "gouv.bj", + "bm", + "com.bm", + "edu.bm", + "gov.bm", + "net.bm", + "org.bm", + "*.bn", + "bo", + "com.bo", + "edu.bo", + "gov.bo", + "gob.bo", + "int.bo", + "org.bo", + "net.bo", + "mil.bo", + "tv.bo", + "br", + "adm.br", + "adv.br", + "agr.br", + "am.br", + "arq.br", + "art.br", + "ato.br", + "b.br", + "bio.br", + "blog.br", + "bmd.br", + "cim.br", + "cng.br", + "cnt.br", + "com.br", + "coop.br", + "ecn.br", + "eco.br", + "edu.br", + "emp.br", + "eng.br", + "esp.br", + "etc.br", + "eti.br", + "far.br", + "flog.br", + "fm.br", + "fnd.br", + "fot.br", + "fst.br", + "g12.br", + "ggf.br", + "gov.br", + "imb.br", + "ind.br", + "inf.br", + "jor.br", + "jus.br", + "leg.br", + "lel.br", + "mat.br", + "med.br", + "mil.br", + "mp.br", + "mus.br", + "net.br", + "*.nom.br", + "not.br", + "ntr.br", + "odo.br", + "org.br", + "ppg.br", + "pro.br", + "psc.br", + "psi.br", + "qsl.br", + "radio.br", + "rec.br", + "slg.br", + "srv.br", + "taxi.br", + "teo.br", + "tmp.br", + "trd.br", + "tur.br", + "tv.br", + "vet.br", + "vlog.br", + "wiki.br", + "zlg.br", + "bs", + "com.bs", + "net.bs", + "org.bs", + "edu.bs", + "gov.bs", + "bt", + "com.bt", + "edu.bt", + "gov.bt", + "net.bt", + "org.bt", + "bv", + "bw", + "co.bw", + "org.bw", + "by", + "gov.by", + "mil.by", + "com.by", + "of.by", + "bz", + "com.bz", + "net.bz", + "org.bz", + "edu.bz", + "gov.bz", + "ca", + "ab.ca", + "bc.ca", + "mb.ca", + "nb.ca", + "nf.ca", + "nl.ca", + "ns.ca", + "nt.ca", + "nu.ca", + "on.ca", + "pe.ca", + "qc.ca", + "sk.ca", + "yk.ca", + "gc.ca", + "cat", + "cc", + "cd", + "gov.cd", + "cf", + "cg", + "ch", + "ci", + "org.ci", + "or.ci", + "com.ci", + "co.ci", + "edu.ci", + "ed.ci", + "ac.ci", + "net.ci", + "go.ci", + "asso.ci", + "xn--aroport-bya.ci", + "int.ci", + "presse.ci", + "md.ci", + "gouv.ci", + "*.ck", + "!www.ck", + "cl", + "gov.cl", + "gob.cl", + "co.cl", + "mil.cl", + "cm", + "co.cm", + "com.cm", + "gov.cm", + "net.cm", + "cn", + "ac.cn", + "com.cn", + "edu.cn", + "gov.cn", + "net.cn", + "org.cn", + "mil.cn", + "xn--55qx5d.cn", + "xn--io0a7i.cn", + "xn--od0alg.cn", + "ah.cn", + "bj.cn", + "cq.cn", + "fj.cn", + "gd.cn", + "gs.cn", + "gz.cn", + "gx.cn", + "ha.cn", + "hb.cn", + "he.cn", + "hi.cn", + "hl.cn", + "hn.cn", + "jl.cn", + "js.cn", + "jx.cn", + "ln.cn", + "nm.cn", + "nx.cn", + "qh.cn", + "sc.cn", + "sd.cn", + "sh.cn", + "sn.cn", + "sx.cn", + "tj.cn", + "xj.cn", + "xz.cn", + "yn.cn", + "zj.cn", + "hk.cn", + "mo.cn", + "tw.cn", + "co", + "arts.co", + "com.co", + "edu.co", + "firm.co", + "gov.co", + "info.co", + "int.co", + "mil.co", + "net.co", + "nom.co", + "org.co", + "rec.co", + "web.co", + "com", + "coop", + "cr", + "ac.cr", + "co.cr", + "ed.cr", + "fi.cr", + "go.cr", + "or.cr", + "sa.cr", + "cu", + "com.cu", + "edu.cu", + "org.cu", + "net.cu", + "gov.cu", + "inf.cu", + "cv", + "cw", + "com.cw", + "edu.cw", + "net.cw", + "org.cw", + "cx", + "gov.cx", + "cy", + "ac.cy", + "biz.cy", + "com.cy", + "ekloges.cy", + "gov.cy", + "ltd.cy", + "name.cy", + "net.cy", + "org.cy", + "parliament.cy", + "press.cy", + "pro.cy", + "tm.cy", + "cz", + "de", + "dj", + "dk", + "dm", + "com.dm", + "net.dm", + "org.dm", + "edu.dm", + "gov.dm", + "do", + "art.do", + "com.do", + "edu.do", + "gob.do", + "gov.do", + "mil.do", + "net.do", + "org.do", + "sld.do", + "web.do", + "dz", + "com.dz", + "org.dz", + "net.dz", + "gov.dz", + "edu.dz", + "asso.dz", + "pol.dz", + "art.dz", + "ec", + "com.ec", + "info.ec", + "net.ec", + "fin.ec", + "k12.ec", + "med.ec", + "pro.ec", + "org.ec", + "edu.ec", + "gov.ec", + "gob.ec", + "mil.ec", + "edu", + "ee", + "edu.ee", + "gov.ee", + "riik.ee", + "lib.ee", + "med.ee", + "com.ee", + "pri.ee", + "aip.ee", + "org.ee", + "fie.ee", + "eg", + "com.eg", + "edu.eg", + "eun.eg", + "gov.eg", + "mil.eg", + "name.eg", + "net.eg", + "org.eg", + "sci.eg", + "*.er", + "es", + "com.es", + "nom.es", + "org.es", + "gob.es", + "edu.es", + "et", + "com.et", + "gov.et", + "org.et", + "edu.et", + "biz.et", + "name.et", + "info.et", + "net.et", + "eu", + "fi", + "aland.fi", + "*.fj", + "*.fk", + "fm", + "fo", + "fr", + "com.fr", + "asso.fr", + "nom.fr", + "prd.fr", + "presse.fr", + "tm.fr", + "aeroport.fr", + "assedic.fr", + "avocat.fr", + "avoues.fr", + "cci.fr", + "chambagri.fr", + "chirurgiens-dentistes.fr", + "experts-comptables.fr", + "geometre-expert.fr", + "gouv.fr", + "greta.fr", + "huissier-justice.fr", + "medecin.fr", + "notaires.fr", + "pharmacien.fr", + "port.fr", + "veterinaire.fr", + "ga", + "gb", + "gd", + "ge", + "com.ge", + "edu.ge", + "gov.ge", + "org.ge", + "mil.ge", + "net.ge", + "pvt.ge", + "gf", + "gg", + "co.gg", + "net.gg", + "org.gg", + "gh", + "com.gh", + "edu.gh", + "gov.gh", + "org.gh", + "mil.gh", + "gi", + "com.gi", + "ltd.gi", + "gov.gi", + "mod.gi", + "edu.gi", + "org.gi", + "gl", + "co.gl", + "com.gl", + "edu.gl", + "net.gl", + "org.gl", + "gm", + "gn", + "ac.gn", + "com.gn", + "edu.gn", + "gov.gn", + "org.gn", + "net.gn", + "gov", + "gp", + "com.gp", + "net.gp", + "mobi.gp", + "edu.gp", + "org.gp", + "asso.gp", + "gq", + "gr", + "com.gr", + "edu.gr", + "net.gr", + "org.gr", + "gov.gr", + "gs", + "gt", + "com.gt", + "edu.gt", + "gob.gt", + "ind.gt", + "mil.gt", + "net.gt", + "org.gt", + "*.gu", + "gw", + "gy", + "co.gy", + "com.gy", + "edu.gy", + "gov.gy", + "net.gy", + "org.gy", + "hk", + "com.hk", + "edu.hk", + "gov.hk", + "idv.hk", + "net.hk", + "org.hk", + "xn--55qx5d.hk", + "xn--wcvs22d.hk", + "xn--lcvr32d.hk", + "xn--mxtq1m.hk", + "xn--gmqw5a.hk", + "xn--ciqpn.hk", + "xn--gmq050i.hk", + "xn--zf0avx.hk", + "xn--io0a7i.hk", + "xn--mk0axi.hk", + "xn--od0alg.hk", + "xn--od0aq3b.hk", + "xn--tn0ag.hk", + "xn--uc0atv.hk", + "xn--uc0ay4a.hk", + "hm", + "hn", + "com.hn", + "edu.hn", + "org.hn", + "net.hn", + "mil.hn", + "gob.hn", + "hr", + "iz.hr", + "from.hr", + "name.hr", + "com.hr", + "ht", + "com.ht", + "shop.ht", + "firm.ht", + "info.ht", + "adult.ht", + "net.ht", + "pro.ht", + "org.ht", + "med.ht", + "art.ht", + "coop.ht", + "pol.ht", + "asso.ht", + "edu.ht", + "rel.ht", + "gouv.ht", + "perso.ht", + "hu", + "co.hu", + "info.hu", + "org.hu", + "priv.hu", + "sport.hu", + "tm.hu", + "2000.hu", + "agrar.hu", + "bolt.hu", + "casino.hu", + "city.hu", + "erotica.hu", + "erotika.hu", + "film.hu", + "forum.hu", + "games.hu", + "hotel.hu", + "ingatlan.hu", + "jogasz.hu", + "konyvelo.hu", + "lakas.hu", + "media.hu", + "news.hu", + "reklam.hu", + "sex.hu", + "shop.hu", + "suli.hu", + "szex.hu", + "tozsde.hu", + "utazas.hu", + "video.hu", + "id", + "ac.id", + "biz.id", + "co.id", + "desa.id", + "go.id", + "mil.id", + "my.id", + "net.id", + "or.id", + "sch.id", + "web.id", + "ie", + "gov.ie", + "il", + "ac.il", + "co.il", + "gov.il", + "idf.il", + "k12.il", + "muni.il", + "net.il", + "org.il", + "im", + "ac.im", + "co.im", + "com.im", + "ltd.co.im", + "net.im", + "org.im", + "plc.co.im", + "tt.im", + "tv.im", + "in", + "co.in", + "firm.in", + "net.in", + "org.in", + "gen.in", + "ind.in", + "nic.in", + "ac.in", + "edu.in", + "res.in", + "gov.in", + "mil.in", + "info", + "int", + "eu.int", + "io", + "com.io", + "iq", + "gov.iq", + "edu.iq", + "mil.iq", + "com.iq", + "org.iq", + "net.iq", + "ir", + "ac.ir", + "co.ir", + "gov.ir", + "id.ir", + "net.ir", + "org.ir", + "sch.ir", + "xn--mgba3a4f16a.ir", + "xn--mgba3a4fra.ir", + "is", + "net.is", + "com.is", + "edu.is", + "gov.is", + "org.is", + "int.is", + "it", + "gov.it", + "edu.it", + "abr.it", + "abruzzo.it", + "aosta-valley.it", + "aostavalley.it", + "bas.it", + "basilicata.it", + "cal.it", + "calabria.it", + "cam.it", + "campania.it", + "emilia-romagna.it", + "emiliaromagna.it", + "emr.it", + "friuli-v-giulia.it", + "friuli-ve-giulia.it", + "friuli-vegiulia.it", + "friuli-venezia-giulia.it", + "friuli-veneziagiulia.it", + "friuli-vgiulia.it", + "friuliv-giulia.it", + "friulive-giulia.it", + "friulivegiulia.it", + "friulivenezia-giulia.it", + "friuliveneziagiulia.it", + "friulivgiulia.it", + "fvg.it", + "laz.it", + "lazio.it", + "lig.it", + "liguria.it", + "lom.it", + "lombardia.it", + "lombardy.it", + "lucania.it", + "mar.it", + "marche.it", + "mol.it", + "molise.it", + "piedmont.it", + "piemonte.it", + "pmn.it", + "pug.it", + "puglia.it", + "sar.it", + "sardegna.it", + "sardinia.it", + "sic.it", + "sicilia.it", + "sicily.it", + "taa.it", + "tos.it", + "toscana.it", + "trentino-a-adige.it", + "trentino-aadige.it", + "trentino-alto-adige.it", + "trentino-altoadige.it", + "trentino-s-tirol.it", + "trentino-stirol.it", + "trentino-sud-tirol.it", + "trentino-sudtirol.it", + "trentino-sued-tirol.it", + "trentino-suedtirol.it", + "trentinoa-adige.it", + "trentinoaadige.it", + "trentinoalto-adige.it", + "trentinoaltoadige.it", + "trentinos-tirol.it", + "trentinostirol.it", + "trentinosud-tirol.it", + "trentinosudtirol.it", + "trentinosued-tirol.it", + "trentinosuedtirol.it", + "tuscany.it", + "umb.it", + "umbria.it", + "val-d-aosta.it", + "val-daosta.it", + "vald-aosta.it", + "valdaosta.it", + "valle-aosta.it", + "valle-d-aosta.it", + "valle-daosta.it", + "valleaosta.it", + "valled-aosta.it", + "valledaosta.it", + "vallee-aoste.it", + "valleeaoste.it", + "vao.it", + "vda.it", + "ven.it", + "veneto.it", + "ag.it", + "agrigento.it", + "al.it", + "alessandria.it", + "alto-adige.it", + "altoadige.it", + "an.it", + "ancona.it", + "andria-barletta-trani.it", + "andria-trani-barletta.it", + "andriabarlettatrani.it", + "andriatranibarletta.it", + "ao.it", + "aosta.it", + "aoste.it", + "ap.it", + "aq.it", + "aquila.it", + "ar.it", + "arezzo.it", + "ascoli-piceno.it", + "ascolipiceno.it", + "asti.it", + "at.it", + "av.it", + "avellino.it", + "ba.it", + "balsan.it", + "bari.it", + "barletta-trani-andria.it", + "barlettatraniandria.it", + "belluno.it", + "benevento.it", + "bergamo.it", + "bg.it", + "bi.it", + "biella.it", + "bl.it", + "bn.it", + "bo.it", + "bologna.it", + "bolzano.it", + "bozen.it", + "br.it", + "brescia.it", + "brindisi.it", + "bs.it", + "bt.it", + "bz.it", + "ca.it", + "cagliari.it", + "caltanissetta.it", + "campidano-medio.it", + "campidanomedio.it", + "campobasso.it", + "carbonia-iglesias.it", + "carboniaiglesias.it", + "carrara-massa.it", + "carraramassa.it", + "caserta.it", + "catania.it", + "catanzaro.it", + "cb.it", + "ce.it", + "cesena-forli.it", + "cesenaforli.it", + "ch.it", + "chieti.it", + "ci.it", + "cl.it", + "cn.it", + "co.it", + "como.it", + "cosenza.it", + "cr.it", + "cremona.it", + "crotone.it", + "cs.it", + "ct.it", + "cuneo.it", + "cz.it", + "dell-ogliastra.it", + "dellogliastra.it", + "en.it", + "enna.it", + "fc.it", + "fe.it", + "fermo.it", + "ferrara.it", + "fg.it", + "fi.it", + "firenze.it", + "florence.it", + "fm.it", + "foggia.it", + "forli-cesena.it", + "forlicesena.it", + "fr.it", + "frosinone.it", + "ge.it", + "genoa.it", + "genova.it", + "go.it", + "gorizia.it", + "gr.it", + "grosseto.it", + "iglesias-carbonia.it", + "iglesiascarbonia.it", + "im.it", + "imperia.it", + "is.it", + "isernia.it", + "kr.it", + "la-spezia.it", + "laquila.it", + "laspezia.it", + "latina.it", + "lc.it", + "le.it", + "lecce.it", + "lecco.it", + "li.it", + "livorno.it", + "lo.it", + "lodi.it", + "lt.it", + "lu.it", + "lucca.it", + "macerata.it", + "mantova.it", + "massa-carrara.it", + "massacarrara.it", + "matera.it", + "mb.it", + "mc.it", + "me.it", + "medio-campidano.it", + "mediocampidano.it", + "messina.it", + "mi.it", + "milan.it", + "milano.it", + "mn.it", + "mo.it", + "modena.it", + "monza-brianza.it", + "monza-e-della-brianza.it", + "monza.it", + "monzabrianza.it", + "monzaebrianza.it", + "monzaedellabrianza.it", + "ms.it", + "mt.it", + "na.it", + "naples.it", + "napoli.it", + "no.it", + "novara.it", + "nu.it", + "nuoro.it", + "og.it", + "ogliastra.it", + "olbia-tempio.it", + "olbiatempio.it", + "or.it", + "oristano.it", + "ot.it", + "pa.it", + "padova.it", + "padua.it", + "palermo.it", + "parma.it", + "pavia.it", + "pc.it", + "pd.it", + "pe.it", + "perugia.it", + "pesaro-urbino.it", + "pesarourbino.it", + "pescara.it", + "pg.it", + "pi.it", + "piacenza.it", + "pisa.it", + "pistoia.it", + "pn.it", + "po.it", + "pordenone.it", + "potenza.it", + "pr.it", + "prato.it", + "pt.it", + "pu.it", + "pv.it", + "pz.it", + "ra.it", + "ragusa.it", + "ravenna.it", + "rc.it", + "re.it", + "reggio-calabria.it", + "reggio-emilia.it", + "reggiocalabria.it", + "reggioemilia.it", + "rg.it", + "ri.it", + "rieti.it", + "rimini.it", + "rm.it", + "rn.it", + "ro.it", + "roma.it", + "rome.it", + "rovigo.it", + "sa.it", + "salerno.it", + "sassari.it", + "savona.it", + "si.it", + "siena.it", + "siracusa.it", + "so.it", + "sondrio.it", + "sp.it", + "sr.it", + "ss.it", + "suedtirol.it", + "sv.it", + "ta.it", + "taranto.it", + "te.it", + "tempio-olbia.it", + "tempioolbia.it", + "teramo.it", + "terni.it", + "tn.it", + "to.it", + "torino.it", + "tp.it", + "tr.it", + "trani-andria-barletta.it", + "trani-barletta-andria.it", + "traniandriabarletta.it", + "tranibarlettaandria.it", + "trapani.it", + "trentino.it", + "trento.it", + "treviso.it", + "trieste.it", + "ts.it", + "turin.it", + "tv.it", + "ud.it", + "udine.it", + "urbino-pesaro.it", + "urbinopesaro.it", + "va.it", + "varese.it", + "vb.it", + "vc.it", + "ve.it", + "venezia.it", + "venice.it", + "verbania.it", + "vercelli.it", + "verona.it", + "vi.it", + "vibo-valentia.it", + "vibovalentia.it", + "vicenza.it", + "viterbo.it", + "vr.it", + "vs.it", + "vt.it", + "vv.it", + "je", + "co.je", + "net.je", + "org.je", + "*.jm", + "jo", + "com.jo", + "org.jo", + "net.jo", + "edu.jo", + "sch.jo", + "gov.jo", + "mil.jo", + "name.jo", + "jobs", + "jp", + "ac.jp", + "ad.jp", + "co.jp", + "ed.jp", + "go.jp", + "gr.jp", + "lg.jp", + "ne.jp", + "or.jp", + "aichi.jp", + "akita.jp", + "aomori.jp", + "chiba.jp", + "ehime.jp", + "fukui.jp", + "fukuoka.jp", + "fukushima.jp", + "gifu.jp", + "gunma.jp", + "hiroshima.jp", + "hokkaido.jp", + "hyogo.jp", + "ibaraki.jp", + "ishikawa.jp", + "iwate.jp", + "kagawa.jp", + "kagoshima.jp", + "kanagawa.jp", + "kochi.jp", + "kumamoto.jp", + "kyoto.jp", + "mie.jp", + "miyagi.jp", + "miyazaki.jp", + "nagano.jp", + "nagasaki.jp", + "nara.jp", + "niigata.jp", + "oita.jp", + "okayama.jp", + "okinawa.jp", + "osaka.jp", + "saga.jp", + "saitama.jp", + "shiga.jp", + "shimane.jp", + "shizuoka.jp", + "tochigi.jp", + "tokushima.jp", + "tokyo.jp", + "tottori.jp", + "toyama.jp", + "wakayama.jp", + "yamagata.jp", + "yamaguchi.jp", + "yamanashi.jp", + "xn--4pvxs.jp", + "xn--vgu402c.jp", + "xn--c3s14m.jp", + "xn--f6qx53a.jp", + "xn--8pvr4u.jp", + "xn--uist22h.jp", + "xn--djrs72d6uy.jp", + "xn--mkru45i.jp", + "xn--0trq7p7nn.jp", + "xn--8ltr62k.jp", + "xn--2m4a15e.jp", + "xn--efvn9s.jp", + "xn--32vp30h.jp", + "xn--4it797k.jp", + "xn--1lqs71d.jp", + "xn--5rtp49c.jp", + "xn--5js045d.jp", + "xn--ehqz56n.jp", + "xn--1lqs03n.jp", + "xn--qqqt11m.jp", + "xn--kbrq7o.jp", + "xn--pssu33l.jp", + "xn--ntsq17g.jp", + "xn--uisz3g.jp", + "xn--6btw5a.jp", + "xn--1ctwo.jp", + "xn--6orx2r.jp", + "xn--rht61e.jp", + "xn--rht27z.jp", + "xn--djty4k.jp", + "xn--nit225k.jp", + "xn--rht3d.jp", + "xn--klty5x.jp", + "xn--kltx9a.jp", + "xn--kltp7d.jp", + "xn--uuwu58a.jp", + "xn--zbx025d.jp", + "xn--ntso0iqx3a.jp", + "xn--elqq16h.jp", + "xn--4it168d.jp", + "xn--klt787d.jp", + "xn--rny31h.jp", + "xn--7t0a264c.jp", + "xn--5rtq34k.jp", + "xn--k7yn95e.jp", + "xn--tor131o.jp", + "xn--d5qv7z876c.jp", + "*.kawasaki.jp", + "*.kitakyushu.jp", + "*.kobe.jp", + "*.nagoya.jp", + "*.sapporo.jp", + "*.sendai.jp", + "*.yokohama.jp", + "!city.kawasaki.jp", + "!city.kitakyushu.jp", + "!city.kobe.jp", + "!city.nagoya.jp", + "!city.sapporo.jp", + "!city.sendai.jp", + "!city.yokohama.jp", + "aisai.aichi.jp", + "ama.aichi.jp", + "anjo.aichi.jp", + "asuke.aichi.jp", + "chiryu.aichi.jp", + "chita.aichi.jp", + "fuso.aichi.jp", + "gamagori.aichi.jp", + "handa.aichi.jp", + "hazu.aichi.jp", + "hekinan.aichi.jp", + "higashiura.aichi.jp", + "ichinomiya.aichi.jp", + "inazawa.aichi.jp", + "inuyama.aichi.jp", + "isshiki.aichi.jp", + "iwakura.aichi.jp", + "kanie.aichi.jp", + "kariya.aichi.jp", + "kasugai.aichi.jp", + "kira.aichi.jp", + "kiyosu.aichi.jp", + "komaki.aichi.jp", + "konan.aichi.jp", + "kota.aichi.jp", + "mihama.aichi.jp", + "miyoshi.aichi.jp", + "nishio.aichi.jp", + "nisshin.aichi.jp", + "obu.aichi.jp", + "oguchi.aichi.jp", + "oharu.aichi.jp", + "okazaki.aichi.jp", + "owariasahi.aichi.jp", + "seto.aichi.jp", + "shikatsu.aichi.jp", + "shinshiro.aichi.jp", + "shitara.aichi.jp", + "tahara.aichi.jp", + "takahama.aichi.jp", + "tobishima.aichi.jp", + "toei.aichi.jp", + "togo.aichi.jp", + "tokai.aichi.jp", + "tokoname.aichi.jp", + "toyoake.aichi.jp", + "toyohashi.aichi.jp", + "toyokawa.aichi.jp", + "toyone.aichi.jp", + "toyota.aichi.jp", + "tsushima.aichi.jp", + "yatomi.aichi.jp", + "akita.akita.jp", + "daisen.akita.jp", + "fujisato.akita.jp", + "gojome.akita.jp", + "hachirogata.akita.jp", + "happou.akita.jp", + "higashinaruse.akita.jp", + "honjo.akita.jp", + "honjyo.akita.jp", + "ikawa.akita.jp", + "kamikoani.akita.jp", + "kamioka.akita.jp", + "katagami.akita.jp", + "kazuno.akita.jp", + "kitaakita.akita.jp", + "kosaka.akita.jp", + "kyowa.akita.jp", + "misato.akita.jp", + "mitane.akita.jp", + "moriyoshi.akita.jp", + "nikaho.akita.jp", + "noshiro.akita.jp", + "odate.akita.jp", + "oga.akita.jp", + "ogata.akita.jp", + "semboku.akita.jp", + "yokote.akita.jp", + "yurihonjo.akita.jp", + "aomori.aomori.jp", + "gonohe.aomori.jp", + "hachinohe.aomori.jp", + "hashikami.aomori.jp", + "hiranai.aomori.jp", + "hirosaki.aomori.jp", + "itayanagi.aomori.jp", + "kuroishi.aomori.jp", + "misawa.aomori.jp", + "mutsu.aomori.jp", + "nakadomari.aomori.jp", + "noheji.aomori.jp", + "oirase.aomori.jp", + "owani.aomori.jp", + "rokunohe.aomori.jp", + "sannohe.aomori.jp", + "shichinohe.aomori.jp", + "shingo.aomori.jp", + "takko.aomori.jp", + "towada.aomori.jp", + "tsugaru.aomori.jp", + "tsuruta.aomori.jp", + "abiko.chiba.jp", + "asahi.chiba.jp", + "chonan.chiba.jp", + "chosei.chiba.jp", + "choshi.chiba.jp", + "chuo.chiba.jp", + "funabashi.chiba.jp", + "futtsu.chiba.jp", + "hanamigawa.chiba.jp", + "ichihara.chiba.jp", + "ichikawa.chiba.jp", + "ichinomiya.chiba.jp", + "inzai.chiba.jp", + "isumi.chiba.jp", + "kamagaya.chiba.jp", + "kamogawa.chiba.jp", + "kashiwa.chiba.jp", + "katori.chiba.jp", + "katsuura.chiba.jp", + "kimitsu.chiba.jp", + "kisarazu.chiba.jp", + "kozaki.chiba.jp", + "kujukuri.chiba.jp", + "kyonan.chiba.jp", + "matsudo.chiba.jp", + "midori.chiba.jp", + "mihama.chiba.jp", + "minamiboso.chiba.jp", + "mobara.chiba.jp", + "mutsuzawa.chiba.jp", + "nagara.chiba.jp", + "nagareyama.chiba.jp", + "narashino.chiba.jp", + "narita.chiba.jp", + "noda.chiba.jp", + "oamishirasato.chiba.jp", + "omigawa.chiba.jp", + "onjuku.chiba.jp", + "otaki.chiba.jp", + "sakae.chiba.jp", + "sakura.chiba.jp", + "shimofusa.chiba.jp", + "shirako.chiba.jp", + "shiroi.chiba.jp", + "shisui.chiba.jp", + "sodegaura.chiba.jp", + "sosa.chiba.jp", + "tako.chiba.jp", + "tateyama.chiba.jp", + "togane.chiba.jp", + "tohnosho.chiba.jp", + "tomisato.chiba.jp", + "urayasu.chiba.jp", + "yachimata.chiba.jp", + "yachiyo.chiba.jp", + "yokaichiba.chiba.jp", + "yokoshibahikari.chiba.jp", + "yotsukaido.chiba.jp", + "ainan.ehime.jp", + "honai.ehime.jp", + "ikata.ehime.jp", + "imabari.ehime.jp", + "iyo.ehime.jp", + "kamijima.ehime.jp", + "kihoku.ehime.jp", + "kumakogen.ehime.jp", + "masaki.ehime.jp", + "matsuno.ehime.jp", + "matsuyama.ehime.jp", + "namikata.ehime.jp", + "niihama.ehime.jp", + "ozu.ehime.jp", + "saijo.ehime.jp", + "seiyo.ehime.jp", + "shikokuchuo.ehime.jp", + "tobe.ehime.jp", + "toon.ehime.jp", + "uchiko.ehime.jp", + "uwajima.ehime.jp", + "yawatahama.ehime.jp", + "echizen.fukui.jp", + "eiheiji.fukui.jp", + "fukui.fukui.jp", + "ikeda.fukui.jp", + "katsuyama.fukui.jp", + "mihama.fukui.jp", + "minamiechizen.fukui.jp", + "obama.fukui.jp", + "ohi.fukui.jp", + "ono.fukui.jp", + "sabae.fukui.jp", + "sakai.fukui.jp", + "takahama.fukui.jp", + "tsuruga.fukui.jp", + "wakasa.fukui.jp", + "ashiya.fukuoka.jp", + "buzen.fukuoka.jp", + "chikugo.fukuoka.jp", + "chikuho.fukuoka.jp", + "chikujo.fukuoka.jp", + "chikushino.fukuoka.jp", + "chikuzen.fukuoka.jp", + "chuo.fukuoka.jp", + "dazaifu.fukuoka.jp", + "fukuchi.fukuoka.jp", + "hakata.fukuoka.jp", + "higashi.fukuoka.jp", + "hirokawa.fukuoka.jp", + "hisayama.fukuoka.jp", + "iizuka.fukuoka.jp", + "inatsuki.fukuoka.jp", + "kaho.fukuoka.jp", + "kasuga.fukuoka.jp", + "kasuya.fukuoka.jp", + "kawara.fukuoka.jp", + "keisen.fukuoka.jp", + "koga.fukuoka.jp", + "kurate.fukuoka.jp", + "kurogi.fukuoka.jp", + "kurume.fukuoka.jp", + "minami.fukuoka.jp", + "miyako.fukuoka.jp", + "miyama.fukuoka.jp", + "miyawaka.fukuoka.jp", + "mizumaki.fukuoka.jp", + "munakata.fukuoka.jp", + "nakagawa.fukuoka.jp", + "nakama.fukuoka.jp", + "nishi.fukuoka.jp", + "nogata.fukuoka.jp", + "ogori.fukuoka.jp", + "okagaki.fukuoka.jp", + "okawa.fukuoka.jp", + "oki.fukuoka.jp", + "omuta.fukuoka.jp", + "onga.fukuoka.jp", + "onojo.fukuoka.jp", + "oto.fukuoka.jp", + "saigawa.fukuoka.jp", + "sasaguri.fukuoka.jp", + "shingu.fukuoka.jp", + "shinyoshitomi.fukuoka.jp", + "shonai.fukuoka.jp", + "soeda.fukuoka.jp", + "sue.fukuoka.jp", + "tachiarai.fukuoka.jp", + "tagawa.fukuoka.jp", + "takata.fukuoka.jp", + "toho.fukuoka.jp", + "toyotsu.fukuoka.jp", + "tsuiki.fukuoka.jp", + "ukiha.fukuoka.jp", + "umi.fukuoka.jp", + "usui.fukuoka.jp", + "yamada.fukuoka.jp", + "yame.fukuoka.jp", + "yanagawa.fukuoka.jp", + "yukuhashi.fukuoka.jp", + "aizubange.fukushima.jp", + "aizumisato.fukushima.jp", + "aizuwakamatsu.fukushima.jp", + "asakawa.fukushima.jp", + "bandai.fukushima.jp", + "date.fukushima.jp", + "fukushima.fukushima.jp", + "furudono.fukushima.jp", + "futaba.fukushima.jp", + "hanawa.fukushima.jp", + "higashi.fukushima.jp", + "hirata.fukushima.jp", + "hirono.fukushima.jp", + "iitate.fukushima.jp", + "inawashiro.fukushima.jp", + "ishikawa.fukushima.jp", + "iwaki.fukushima.jp", + "izumizaki.fukushima.jp", + "kagamiishi.fukushima.jp", + "kaneyama.fukushima.jp", + "kawamata.fukushima.jp", + "kitakata.fukushima.jp", + "kitashiobara.fukushima.jp", + "koori.fukushima.jp", + "koriyama.fukushima.jp", + "kunimi.fukushima.jp", + "miharu.fukushima.jp", + "mishima.fukushima.jp", + "namie.fukushima.jp", + "nango.fukushima.jp", + "nishiaizu.fukushima.jp", + "nishigo.fukushima.jp", + "okuma.fukushima.jp", + "omotego.fukushima.jp", + "ono.fukushima.jp", + "otama.fukushima.jp", + "samegawa.fukushima.jp", + "shimogo.fukushima.jp", + "shirakawa.fukushima.jp", + "showa.fukushima.jp", + "soma.fukushima.jp", + "sukagawa.fukushima.jp", + "taishin.fukushima.jp", + "tamakawa.fukushima.jp", + "tanagura.fukushima.jp", + "tenei.fukushima.jp", + "yabuki.fukushima.jp", + "yamato.fukushima.jp", + "yamatsuri.fukushima.jp", + "yanaizu.fukushima.jp", + "yugawa.fukushima.jp", + "anpachi.gifu.jp", + "ena.gifu.jp", + "gifu.gifu.jp", + "ginan.gifu.jp", + "godo.gifu.jp", + "gujo.gifu.jp", + "hashima.gifu.jp", + "hichiso.gifu.jp", + "hida.gifu.jp", + "higashishirakawa.gifu.jp", + "ibigawa.gifu.jp", + "ikeda.gifu.jp", + "kakamigahara.gifu.jp", + "kani.gifu.jp", + "kasahara.gifu.jp", + "kasamatsu.gifu.jp", + "kawaue.gifu.jp", + "kitagata.gifu.jp", + "mino.gifu.jp", + "minokamo.gifu.jp", + "mitake.gifu.jp", + "mizunami.gifu.jp", + "motosu.gifu.jp", + "nakatsugawa.gifu.jp", + "ogaki.gifu.jp", + "sakahogi.gifu.jp", + "seki.gifu.jp", + "sekigahara.gifu.jp", + "shirakawa.gifu.jp", + "tajimi.gifu.jp", + "takayama.gifu.jp", + "tarui.gifu.jp", + "toki.gifu.jp", + "tomika.gifu.jp", + "wanouchi.gifu.jp", + "yamagata.gifu.jp", + "yaotsu.gifu.jp", + "yoro.gifu.jp", + "annaka.gunma.jp", + "chiyoda.gunma.jp", + "fujioka.gunma.jp", + "higashiagatsuma.gunma.jp", + "isesaki.gunma.jp", + "itakura.gunma.jp", + "kanna.gunma.jp", + "kanra.gunma.jp", + "katashina.gunma.jp", + "kawaba.gunma.jp", + "kiryu.gunma.jp", + "kusatsu.gunma.jp", + "maebashi.gunma.jp", + "meiwa.gunma.jp", + "midori.gunma.jp", + "minakami.gunma.jp", + "naganohara.gunma.jp", + "nakanojo.gunma.jp", + "nanmoku.gunma.jp", + "numata.gunma.jp", + "oizumi.gunma.jp", + "ora.gunma.jp", + "ota.gunma.jp", + "shibukawa.gunma.jp", + "shimonita.gunma.jp", + "shinto.gunma.jp", + "showa.gunma.jp", + "takasaki.gunma.jp", + "takayama.gunma.jp", + "tamamura.gunma.jp", + "tatebayashi.gunma.jp", + "tomioka.gunma.jp", + "tsukiyono.gunma.jp", + "tsumagoi.gunma.jp", + "ueno.gunma.jp", + "yoshioka.gunma.jp", + "asaminami.hiroshima.jp", + "daiwa.hiroshima.jp", + "etajima.hiroshima.jp", + "fuchu.hiroshima.jp", + "fukuyama.hiroshima.jp", + "hatsukaichi.hiroshima.jp", + "higashihiroshima.hiroshima.jp", + "hongo.hiroshima.jp", + "jinsekikogen.hiroshima.jp", + "kaita.hiroshima.jp", + "kui.hiroshima.jp", + "kumano.hiroshima.jp", + "kure.hiroshima.jp", + "mihara.hiroshima.jp", + "miyoshi.hiroshima.jp", + "naka.hiroshima.jp", + "onomichi.hiroshima.jp", + "osakikamijima.hiroshima.jp", + "otake.hiroshima.jp", + "saka.hiroshima.jp", + "sera.hiroshima.jp", + "seranishi.hiroshima.jp", + "shinichi.hiroshima.jp", + "shobara.hiroshima.jp", + "takehara.hiroshima.jp", + "abashiri.hokkaido.jp", + "abira.hokkaido.jp", + "aibetsu.hokkaido.jp", + "akabira.hokkaido.jp", + "akkeshi.hokkaido.jp", + "asahikawa.hokkaido.jp", + "ashibetsu.hokkaido.jp", + "ashoro.hokkaido.jp", + "assabu.hokkaido.jp", + "atsuma.hokkaido.jp", + "bibai.hokkaido.jp", + "biei.hokkaido.jp", + "bifuka.hokkaido.jp", + "bihoro.hokkaido.jp", + "biratori.hokkaido.jp", + "chippubetsu.hokkaido.jp", + "chitose.hokkaido.jp", + "date.hokkaido.jp", + "ebetsu.hokkaido.jp", + "embetsu.hokkaido.jp", + "eniwa.hokkaido.jp", + "erimo.hokkaido.jp", + "esan.hokkaido.jp", + "esashi.hokkaido.jp", + "fukagawa.hokkaido.jp", + "fukushima.hokkaido.jp", + "furano.hokkaido.jp", + "furubira.hokkaido.jp", + "haboro.hokkaido.jp", + "hakodate.hokkaido.jp", + "hamatonbetsu.hokkaido.jp", + "hidaka.hokkaido.jp", + "higashikagura.hokkaido.jp", + "higashikawa.hokkaido.jp", + "hiroo.hokkaido.jp", + "hokuryu.hokkaido.jp", + "hokuto.hokkaido.jp", + "honbetsu.hokkaido.jp", + "horokanai.hokkaido.jp", + "horonobe.hokkaido.jp", + "ikeda.hokkaido.jp", + "imakane.hokkaido.jp", + "ishikari.hokkaido.jp", + "iwamizawa.hokkaido.jp", + "iwanai.hokkaido.jp", + "kamifurano.hokkaido.jp", + "kamikawa.hokkaido.jp", + "kamishihoro.hokkaido.jp", + "kamisunagawa.hokkaido.jp", + "kamoenai.hokkaido.jp", + "kayabe.hokkaido.jp", + "kembuchi.hokkaido.jp", + "kikonai.hokkaido.jp", + "kimobetsu.hokkaido.jp", + "kitahiroshima.hokkaido.jp", + "kitami.hokkaido.jp", + "kiyosato.hokkaido.jp", + "koshimizu.hokkaido.jp", + "kunneppu.hokkaido.jp", + "kuriyama.hokkaido.jp", + "kuromatsunai.hokkaido.jp", + "kushiro.hokkaido.jp", + "kutchan.hokkaido.jp", + "kyowa.hokkaido.jp", + "mashike.hokkaido.jp", + "matsumae.hokkaido.jp", + "mikasa.hokkaido.jp", + "minamifurano.hokkaido.jp", + "mombetsu.hokkaido.jp", + "moseushi.hokkaido.jp", + "mukawa.hokkaido.jp", + "muroran.hokkaido.jp", + "naie.hokkaido.jp", + "nakagawa.hokkaido.jp", + "nakasatsunai.hokkaido.jp", + "nakatombetsu.hokkaido.jp", + "nanae.hokkaido.jp", + "nanporo.hokkaido.jp", + "nayoro.hokkaido.jp", + "nemuro.hokkaido.jp", + "niikappu.hokkaido.jp", + "niki.hokkaido.jp", + "nishiokoppe.hokkaido.jp", + "noboribetsu.hokkaido.jp", + "numata.hokkaido.jp", + "obihiro.hokkaido.jp", + "obira.hokkaido.jp", + "oketo.hokkaido.jp", + "okoppe.hokkaido.jp", + "otaru.hokkaido.jp", + "otobe.hokkaido.jp", + "otofuke.hokkaido.jp", + "otoineppu.hokkaido.jp", + "oumu.hokkaido.jp", + "ozora.hokkaido.jp", + "pippu.hokkaido.jp", + "rankoshi.hokkaido.jp", + "rebun.hokkaido.jp", + "rikubetsu.hokkaido.jp", + "rishiri.hokkaido.jp", + "rishirifuji.hokkaido.jp", + "saroma.hokkaido.jp", + "sarufutsu.hokkaido.jp", + "shakotan.hokkaido.jp", + "shari.hokkaido.jp", + "shibecha.hokkaido.jp", + "shibetsu.hokkaido.jp", + "shikabe.hokkaido.jp", + "shikaoi.hokkaido.jp", + "shimamaki.hokkaido.jp", + "shimizu.hokkaido.jp", + "shimokawa.hokkaido.jp", + "shinshinotsu.hokkaido.jp", + "shintoku.hokkaido.jp", + "shiranuka.hokkaido.jp", + "shiraoi.hokkaido.jp", + "shiriuchi.hokkaido.jp", + "sobetsu.hokkaido.jp", + "sunagawa.hokkaido.jp", + "taiki.hokkaido.jp", + "takasu.hokkaido.jp", + "takikawa.hokkaido.jp", + "takinoue.hokkaido.jp", + "teshikaga.hokkaido.jp", + "tobetsu.hokkaido.jp", + "tohma.hokkaido.jp", + "tomakomai.hokkaido.jp", + "tomari.hokkaido.jp", + "toya.hokkaido.jp", + "toyako.hokkaido.jp", + "toyotomi.hokkaido.jp", + "toyoura.hokkaido.jp", + "tsubetsu.hokkaido.jp", + "tsukigata.hokkaido.jp", + "urakawa.hokkaido.jp", + "urausu.hokkaido.jp", + "uryu.hokkaido.jp", + "utashinai.hokkaido.jp", + "wakkanai.hokkaido.jp", + "wassamu.hokkaido.jp", + "yakumo.hokkaido.jp", + "yoichi.hokkaido.jp", + "aioi.hyogo.jp", + "akashi.hyogo.jp", + "ako.hyogo.jp", + "amagasaki.hyogo.jp", + "aogaki.hyogo.jp", + "asago.hyogo.jp", + "ashiya.hyogo.jp", + "awaji.hyogo.jp", + "fukusaki.hyogo.jp", + "goshiki.hyogo.jp", + "harima.hyogo.jp", + "himeji.hyogo.jp", + "ichikawa.hyogo.jp", + "inagawa.hyogo.jp", + "itami.hyogo.jp", + "kakogawa.hyogo.jp", + "kamigori.hyogo.jp", + "kamikawa.hyogo.jp", + "kasai.hyogo.jp", + "kasuga.hyogo.jp", + "kawanishi.hyogo.jp", + "miki.hyogo.jp", + "minamiawaji.hyogo.jp", + "nishinomiya.hyogo.jp", + "nishiwaki.hyogo.jp", + "ono.hyogo.jp", + "sanda.hyogo.jp", + "sannan.hyogo.jp", + "sasayama.hyogo.jp", + "sayo.hyogo.jp", + "shingu.hyogo.jp", + "shinonsen.hyogo.jp", + "shiso.hyogo.jp", + "sumoto.hyogo.jp", + "taishi.hyogo.jp", + "taka.hyogo.jp", + "takarazuka.hyogo.jp", + "takasago.hyogo.jp", + "takino.hyogo.jp", + "tamba.hyogo.jp", + "tatsuno.hyogo.jp", + "toyooka.hyogo.jp", + "yabu.hyogo.jp", + "yashiro.hyogo.jp", + "yoka.hyogo.jp", + "yokawa.hyogo.jp", + "ami.ibaraki.jp", + "asahi.ibaraki.jp", + "bando.ibaraki.jp", + "chikusei.ibaraki.jp", + "daigo.ibaraki.jp", + "fujishiro.ibaraki.jp", + "hitachi.ibaraki.jp", + "hitachinaka.ibaraki.jp", + "hitachiomiya.ibaraki.jp", + "hitachiota.ibaraki.jp", + "ibaraki.ibaraki.jp", + "ina.ibaraki.jp", + "inashiki.ibaraki.jp", + "itako.ibaraki.jp", + "iwama.ibaraki.jp", + "joso.ibaraki.jp", + "kamisu.ibaraki.jp", + "kasama.ibaraki.jp", + "kashima.ibaraki.jp", + "kasumigaura.ibaraki.jp", + "koga.ibaraki.jp", + "miho.ibaraki.jp", + "mito.ibaraki.jp", + "moriya.ibaraki.jp", + "naka.ibaraki.jp", + "namegata.ibaraki.jp", + "oarai.ibaraki.jp", + "ogawa.ibaraki.jp", + "omitama.ibaraki.jp", + "ryugasaki.ibaraki.jp", + "sakai.ibaraki.jp", + "sakuragawa.ibaraki.jp", + "shimodate.ibaraki.jp", + "shimotsuma.ibaraki.jp", + "shirosato.ibaraki.jp", + "sowa.ibaraki.jp", + "suifu.ibaraki.jp", + "takahagi.ibaraki.jp", + "tamatsukuri.ibaraki.jp", + "tokai.ibaraki.jp", + "tomobe.ibaraki.jp", + "tone.ibaraki.jp", + "toride.ibaraki.jp", + "tsuchiura.ibaraki.jp", + "tsukuba.ibaraki.jp", + "uchihara.ibaraki.jp", + "ushiku.ibaraki.jp", + "yachiyo.ibaraki.jp", + "yamagata.ibaraki.jp", + "yawara.ibaraki.jp", + "yuki.ibaraki.jp", + "anamizu.ishikawa.jp", + "hakui.ishikawa.jp", + "hakusan.ishikawa.jp", + "kaga.ishikawa.jp", + "kahoku.ishikawa.jp", + "kanazawa.ishikawa.jp", + "kawakita.ishikawa.jp", + "komatsu.ishikawa.jp", + "nakanoto.ishikawa.jp", + "nanao.ishikawa.jp", + "nomi.ishikawa.jp", + "nonoichi.ishikawa.jp", + "noto.ishikawa.jp", + "shika.ishikawa.jp", + "suzu.ishikawa.jp", + "tsubata.ishikawa.jp", + "tsurugi.ishikawa.jp", + "uchinada.ishikawa.jp", + "wajima.ishikawa.jp", + "fudai.iwate.jp", + "fujisawa.iwate.jp", + "hanamaki.iwate.jp", + "hiraizumi.iwate.jp", + "hirono.iwate.jp", + "ichinohe.iwate.jp", + "ichinoseki.iwate.jp", + "iwaizumi.iwate.jp", + "iwate.iwate.jp", + "joboji.iwate.jp", + "kamaishi.iwate.jp", + "kanegasaki.iwate.jp", + "karumai.iwate.jp", + "kawai.iwate.jp", + "kitakami.iwate.jp", + "kuji.iwate.jp", + "kunohe.iwate.jp", + "kuzumaki.iwate.jp", + "miyako.iwate.jp", + "mizusawa.iwate.jp", + "morioka.iwate.jp", + "ninohe.iwate.jp", + "noda.iwate.jp", + "ofunato.iwate.jp", + "oshu.iwate.jp", + "otsuchi.iwate.jp", + "rikuzentakata.iwate.jp", + "shiwa.iwate.jp", + "shizukuishi.iwate.jp", + "sumita.iwate.jp", + "tanohata.iwate.jp", + "tono.iwate.jp", + "yahaba.iwate.jp", + "yamada.iwate.jp", + "ayagawa.kagawa.jp", + "higashikagawa.kagawa.jp", + "kanonji.kagawa.jp", + "kotohira.kagawa.jp", + "manno.kagawa.jp", + "marugame.kagawa.jp", + "mitoyo.kagawa.jp", + "naoshima.kagawa.jp", + "sanuki.kagawa.jp", + "tadotsu.kagawa.jp", + "takamatsu.kagawa.jp", + "tonosho.kagawa.jp", + "uchinomi.kagawa.jp", + "utazu.kagawa.jp", + "zentsuji.kagawa.jp", + "akune.kagoshima.jp", + "amami.kagoshima.jp", + "hioki.kagoshima.jp", + "isa.kagoshima.jp", + "isen.kagoshima.jp", + "izumi.kagoshima.jp", + "kagoshima.kagoshima.jp", + "kanoya.kagoshima.jp", + "kawanabe.kagoshima.jp", + "kinko.kagoshima.jp", + "kouyama.kagoshima.jp", + "makurazaki.kagoshima.jp", + "matsumoto.kagoshima.jp", + "minamitane.kagoshima.jp", + "nakatane.kagoshima.jp", + "nishinoomote.kagoshima.jp", + "satsumasendai.kagoshima.jp", + "soo.kagoshima.jp", + "tarumizu.kagoshima.jp", + "yusui.kagoshima.jp", + "aikawa.kanagawa.jp", + "atsugi.kanagawa.jp", + "ayase.kanagawa.jp", + "chigasaki.kanagawa.jp", + "ebina.kanagawa.jp", + "fujisawa.kanagawa.jp", + "hadano.kanagawa.jp", + "hakone.kanagawa.jp", + "hiratsuka.kanagawa.jp", + "isehara.kanagawa.jp", + "kaisei.kanagawa.jp", + "kamakura.kanagawa.jp", + "kiyokawa.kanagawa.jp", + "matsuda.kanagawa.jp", + "minamiashigara.kanagawa.jp", + "miura.kanagawa.jp", + "nakai.kanagawa.jp", + "ninomiya.kanagawa.jp", + "odawara.kanagawa.jp", + "oi.kanagawa.jp", + "oiso.kanagawa.jp", + "sagamihara.kanagawa.jp", + "samukawa.kanagawa.jp", + "tsukui.kanagawa.jp", + "yamakita.kanagawa.jp", + "yamato.kanagawa.jp", + "yokosuka.kanagawa.jp", + "yugawara.kanagawa.jp", + "zama.kanagawa.jp", + "zushi.kanagawa.jp", + "aki.kochi.jp", + "geisei.kochi.jp", + "hidaka.kochi.jp", + "higashitsuno.kochi.jp", + "ino.kochi.jp", + "kagami.kochi.jp", + "kami.kochi.jp", + "kitagawa.kochi.jp", + "kochi.kochi.jp", + "mihara.kochi.jp", + "motoyama.kochi.jp", + "muroto.kochi.jp", + "nahari.kochi.jp", + "nakamura.kochi.jp", + "nankoku.kochi.jp", + "nishitosa.kochi.jp", + "niyodogawa.kochi.jp", + "ochi.kochi.jp", + "okawa.kochi.jp", + "otoyo.kochi.jp", + "otsuki.kochi.jp", + "sakawa.kochi.jp", + "sukumo.kochi.jp", + "susaki.kochi.jp", + "tosa.kochi.jp", + "tosashimizu.kochi.jp", + "toyo.kochi.jp", + "tsuno.kochi.jp", + "umaji.kochi.jp", + "yasuda.kochi.jp", + "yusuhara.kochi.jp", + "amakusa.kumamoto.jp", + "arao.kumamoto.jp", + "aso.kumamoto.jp", + "choyo.kumamoto.jp", + "gyokuto.kumamoto.jp", + "kamiamakusa.kumamoto.jp", + "kikuchi.kumamoto.jp", + "kumamoto.kumamoto.jp", + "mashiki.kumamoto.jp", + "mifune.kumamoto.jp", + "minamata.kumamoto.jp", + "minamioguni.kumamoto.jp", + "nagasu.kumamoto.jp", + "nishihara.kumamoto.jp", + "oguni.kumamoto.jp", + "ozu.kumamoto.jp", + "sumoto.kumamoto.jp", + "takamori.kumamoto.jp", + "uki.kumamoto.jp", + "uto.kumamoto.jp", + "yamaga.kumamoto.jp", + "yamato.kumamoto.jp", + "yatsushiro.kumamoto.jp", + "ayabe.kyoto.jp", + "fukuchiyama.kyoto.jp", + "higashiyama.kyoto.jp", + "ide.kyoto.jp", + "ine.kyoto.jp", + "joyo.kyoto.jp", + "kameoka.kyoto.jp", + "kamo.kyoto.jp", + "kita.kyoto.jp", + "kizu.kyoto.jp", + "kumiyama.kyoto.jp", + "kyotamba.kyoto.jp", + "kyotanabe.kyoto.jp", + "kyotango.kyoto.jp", + "maizuru.kyoto.jp", + "minami.kyoto.jp", + "minamiyamashiro.kyoto.jp", + "miyazu.kyoto.jp", + "muko.kyoto.jp", + "nagaokakyo.kyoto.jp", + "nakagyo.kyoto.jp", + "nantan.kyoto.jp", + "oyamazaki.kyoto.jp", + "sakyo.kyoto.jp", + "seika.kyoto.jp", + "tanabe.kyoto.jp", + "uji.kyoto.jp", + "ujitawara.kyoto.jp", + "wazuka.kyoto.jp", + "yamashina.kyoto.jp", + "yawata.kyoto.jp", + "asahi.mie.jp", + "inabe.mie.jp", + "ise.mie.jp", + "kameyama.mie.jp", + "kawagoe.mie.jp", + "kiho.mie.jp", + "kisosaki.mie.jp", + "kiwa.mie.jp", + "komono.mie.jp", + "kumano.mie.jp", + "kuwana.mie.jp", + "matsusaka.mie.jp", + "meiwa.mie.jp", + "mihama.mie.jp", + "minamiise.mie.jp", + "misugi.mie.jp", + "miyama.mie.jp", + "nabari.mie.jp", + "shima.mie.jp", + "suzuka.mie.jp", + "tado.mie.jp", + "taiki.mie.jp", + "taki.mie.jp", + "tamaki.mie.jp", + "toba.mie.jp", + "tsu.mie.jp", + "udono.mie.jp", + "ureshino.mie.jp", + "watarai.mie.jp", + "yokkaichi.mie.jp", + "furukawa.miyagi.jp", + "higashimatsushima.miyagi.jp", + "ishinomaki.miyagi.jp", + "iwanuma.miyagi.jp", + "kakuda.miyagi.jp", + "kami.miyagi.jp", + "kawasaki.miyagi.jp", + "marumori.miyagi.jp", + "matsushima.miyagi.jp", + "minamisanriku.miyagi.jp", + "misato.miyagi.jp", + "murata.miyagi.jp", + "natori.miyagi.jp", + "ogawara.miyagi.jp", + "ohira.miyagi.jp", + "onagawa.miyagi.jp", + "osaki.miyagi.jp", + "rifu.miyagi.jp", + "semine.miyagi.jp", + "shibata.miyagi.jp", + "shichikashuku.miyagi.jp", + "shikama.miyagi.jp", + "shiogama.miyagi.jp", + "shiroishi.miyagi.jp", + "tagajo.miyagi.jp", + "taiwa.miyagi.jp", + "tome.miyagi.jp", + "tomiya.miyagi.jp", + "wakuya.miyagi.jp", + "watari.miyagi.jp", + "yamamoto.miyagi.jp", + "zao.miyagi.jp", + "aya.miyazaki.jp", + "ebino.miyazaki.jp", + "gokase.miyazaki.jp", + "hyuga.miyazaki.jp", + "kadogawa.miyazaki.jp", + "kawaminami.miyazaki.jp", + "kijo.miyazaki.jp", + "kitagawa.miyazaki.jp", + "kitakata.miyazaki.jp", + "kitaura.miyazaki.jp", + "kobayashi.miyazaki.jp", + "kunitomi.miyazaki.jp", + "kushima.miyazaki.jp", + "mimata.miyazaki.jp", + "miyakonojo.miyazaki.jp", + "miyazaki.miyazaki.jp", + "morotsuka.miyazaki.jp", + "nichinan.miyazaki.jp", + "nishimera.miyazaki.jp", + "nobeoka.miyazaki.jp", + "saito.miyazaki.jp", + "shiiba.miyazaki.jp", + "shintomi.miyazaki.jp", + "takaharu.miyazaki.jp", + "takanabe.miyazaki.jp", + "takazaki.miyazaki.jp", + "tsuno.miyazaki.jp", + "achi.nagano.jp", + "agematsu.nagano.jp", + "anan.nagano.jp", + "aoki.nagano.jp", + "asahi.nagano.jp", + "azumino.nagano.jp", + "chikuhoku.nagano.jp", + "chikuma.nagano.jp", + "chino.nagano.jp", + "fujimi.nagano.jp", + "hakuba.nagano.jp", + "hara.nagano.jp", + "hiraya.nagano.jp", + "iida.nagano.jp", + "iijima.nagano.jp", + "iiyama.nagano.jp", + "iizuna.nagano.jp", + "ikeda.nagano.jp", + "ikusaka.nagano.jp", + "ina.nagano.jp", + "karuizawa.nagano.jp", + "kawakami.nagano.jp", + "kiso.nagano.jp", + "kisofukushima.nagano.jp", + "kitaaiki.nagano.jp", + "komagane.nagano.jp", + "komoro.nagano.jp", + "matsukawa.nagano.jp", + "matsumoto.nagano.jp", + "miasa.nagano.jp", + "minamiaiki.nagano.jp", + "minamimaki.nagano.jp", + "minamiminowa.nagano.jp", + "minowa.nagano.jp", + "miyada.nagano.jp", + "miyota.nagano.jp", + "mochizuki.nagano.jp", + "nagano.nagano.jp", + "nagawa.nagano.jp", + "nagiso.nagano.jp", + "nakagawa.nagano.jp", + "nakano.nagano.jp", + "nozawaonsen.nagano.jp", + "obuse.nagano.jp", + "ogawa.nagano.jp", + "okaya.nagano.jp", + "omachi.nagano.jp", + "omi.nagano.jp", + "ookuwa.nagano.jp", + "ooshika.nagano.jp", + "otaki.nagano.jp", + "otari.nagano.jp", + "sakae.nagano.jp", + "sakaki.nagano.jp", + "saku.nagano.jp", + "sakuho.nagano.jp", + "shimosuwa.nagano.jp", + "shinanomachi.nagano.jp", + "shiojiri.nagano.jp", + "suwa.nagano.jp", + "suzaka.nagano.jp", + "takagi.nagano.jp", + "takamori.nagano.jp", + "takayama.nagano.jp", + "tateshina.nagano.jp", + "tatsuno.nagano.jp", + "togakushi.nagano.jp", + "togura.nagano.jp", + "tomi.nagano.jp", + "ueda.nagano.jp", + "wada.nagano.jp", + "yamagata.nagano.jp", + "yamanouchi.nagano.jp", + "yasaka.nagano.jp", + "yasuoka.nagano.jp", + "chijiwa.nagasaki.jp", + "futsu.nagasaki.jp", + "goto.nagasaki.jp", + "hasami.nagasaki.jp", + "hirado.nagasaki.jp", + "iki.nagasaki.jp", + "isahaya.nagasaki.jp", + "kawatana.nagasaki.jp", + "kuchinotsu.nagasaki.jp", + "matsuura.nagasaki.jp", + "nagasaki.nagasaki.jp", + "obama.nagasaki.jp", + "omura.nagasaki.jp", + "oseto.nagasaki.jp", + "saikai.nagasaki.jp", + "sasebo.nagasaki.jp", + "seihi.nagasaki.jp", + "shimabara.nagasaki.jp", + "shinkamigoto.nagasaki.jp", + "togitsu.nagasaki.jp", + "tsushima.nagasaki.jp", + "unzen.nagasaki.jp", + "ando.nara.jp", + "gose.nara.jp", + "heguri.nara.jp", + "higashiyoshino.nara.jp", + "ikaruga.nara.jp", + "ikoma.nara.jp", + "kamikitayama.nara.jp", + "kanmaki.nara.jp", + "kashiba.nara.jp", + "kashihara.nara.jp", + "katsuragi.nara.jp", + "kawai.nara.jp", + "kawakami.nara.jp", + "kawanishi.nara.jp", + "koryo.nara.jp", + "kurotaki.nara.jp", + "mitsue.nara.jp", + "miyake.nara.jp", + "nara.nara.jp", + "nosegawa.nara.jp", + "oji.nara.jp", + "ouda.nara.jp", + "oyodo.nara.jp", + "sakurai.nara.jp", + "sango.nara.jp", + "shimoichi.nara.jp", + "shimokitayama.nara.jp", + "shinjo.nara.jp", + "soni.nara.jp", + "takatori.nara.jp", + "tawaramoto.nara.jp", + "tenkawa.nara.jp", + "tenri.nara.jp", + "uda.nara.jp", + "yamatokoriyama.nara.jp", + "yamatotakada.nara.jp", + "yamazoe.nara.jp", + "yoshino.nara.jp", + "aga.niigata.jp", + "agano.niigata.jp", + "gosen.niigata.jp", + "itoigawa.niigata.jp", + "izumozaki.niigata.jp", + "joetsu.niigata.jp", + "kamo.niigata.jp", + "kariwa.niigata.jp", + "kashiwazaki.niigata.jp", + "minamiuonuma.niigata.jp", + "mitsuke.niigata.jp", + "muika.niigata.jp", + "murakami.niigata.jp", + "myoko.niigata.jp", + "nagaoka.niigata.jp", + "niigata.niigata.jp", + "ojiya.niigata.jp", + "omi.niigata.jp", + "sado.niigata.jp", + "sanjo.niigata.jp", + "seiro.niigata.jp", + "seirou.niigata.jp", + "sekikawa.niigata.jp", + "shibata.niigata.jp", + "tagami.niigata.jp", + "tainai.niigata.jp", + "tochio.niigata.jp", + "tokamachi.niigata.jp", + "tsubame.niigata.jp", + "tsunan.niigata.jp", + "uonuma.niigata.jp", + "yahiko.niigata.jp", + "yoita.niigata.jp", + "yuzawa.niigata.jp", + "beppu.oita.jp", + "bungoono.oita.jp", + "bungotakada.oita.jp", + "hasama.oita.jp", + "hiji.oita.jp", + "himeshima.oita.jp", + "hita.oita.jp", + "kamitsue.oita.jp", + "kokonoe.oita.jp", + "kuju.oita.jp", + "kunisaki.oita.jp", + "kusu.oita.jp", + "oita.oita.jp", + "saiki.oita.jp", + "taketa.oita.jp", + "tsukumi.oita.jp", + "usa.oita.jp", + "usuki.oita.jp", + "yufu.oita.jp", + "akaiwa.okayama.jp", + "asakuchi.okayama.jp", + "bizen.okayama.jp", + "hayashima.okayama.jp", + "ibara.okayama.jp", + "kagamino.okayama.jp", + "kasaoka.okayama.jp", + "kibichuo.okayama.jp", + "kumenan.okayama.jp", + "kurashiki.okayama.jp", + "maniwa.okayama.jp", + "misaki.okayama.jp", + "nagi.okayama.jp", + "niimi.okayama.jp", + "nishiawakura.okayama.jp", + "okayama.okayama.jp", + "satosho.okayama.jp", + "setouchi.okayama.jp", + "shinjo.okayama.jp", + "shoo.okayama.jp", + "soja.okayama.jp", + "takahashi.okayama.jp", + "tamano.okayama.jp", + "tsuyama.okayama.jp", + "wake.okayama.jp", + "yakage.okayama.jp", + "aguni.okinawa.jp", + "ginowan.okinawa.jp", + "ginoza.okinawa.jp", + "gushikami.okinawa.jp", + "haebaru.okinawa.jp", + "higashi.okinawa.jp", + "hirara.okinawa.jp", + "iheya.okinawa.jp", + "ishigaki.okinawa.jp", + "ishikawa.okinawa.jp", + "itoman.okinawa.jp", + "izena.okinawa.jp", + "kadena.okinawa.jp", + "kin.okinawa.jp", + "kitadaito.okinawa.jp", + "kitanakagusuku.okinawa.jp", + "kumejima.okinawa.jp", + "kunigami.okinawa.jp", + "minamidaito.okinawa.jp", + "motobu.okinawa.jp", + "nago.okinawa.jp", + "naha.okinawa.jp", + "nakagusuku.okinawa.jp", + "nakijin.okinawa.jp", + "nanjo.okinawa.jp", + "nishihara.okinawa.jp", + "ogimi.okinawa.jp", + "okinawa.okinawa.jp", + "onna.okinawa.jp", + "shimoji.okinawa.jp", + "taketomi.okinawa.jp", + "tarama.okinawa.jp", + "tokashiki.okinawa.jp", + "tomigusuku.okinawa.jp", + "tonaki.okinawa.jp", + "urasoe.okinawa.jp", + "uruma.okinawa.jp", + "yaese.okinawa.jp", + "yomitan.okinawa.jp", + "yonabaru.okinawa.jp", + "yonaguni.okinawa.jp", + "zamami.okinawa.jp", + "abeno.osaka.jp", + "chihayaakasaka.osaka.jp", + "chuo.osaka.jp", + "daito.osaka.jp", + "fujiidera.osaka.jp", + "habikino.osaka.jp", + "hannan.osaka.jp", + "higashiosaka.osaka.jp", + "higashisumiyoshi.osaka.jp", + "higashiyodogawa.osaka.jp", + "hirakata.osaka.jp", + "ibaraki.osaka.jp", + "ikeda.osaka.jp", + "izumi.osaka.jp", + "izumiotsu.osaka.jp", + "izumisano.osaka.jp", + "kadoma.osaka.jp", + "kaizuka.osaka.jp", + "kanan.osaka.jp", + "kashiwara.osaka.jp", + "katano.osaka.jp", + "kawachinagano.osaka.jp", + "kishiwada.osaka.jp", + "kita.osaka.jp", + "kumatori.osaka.jp", + "matsubara.osaka.jp", + "minato.osaka.jp", + "minoh.osaka.jp", + "misaki.osaka.jp", + "moriguchi.osaka.jp", + "neyagawa.osaka.jp", + "nishi.osaka.jp", + "nose.osaka.jp", + "osakasayama.osaka.jp", + "sakai.osaka.jp", + "sayama.osaka.jp", + "sennan.osaka.jp", + "settsu.osaka.jp", + "shijonawate.osaka.jp", + "shimamoto.osaka.jp", + "suita.osaka.jp", + "tadaoka.osaka.jp", + "taishi.osaka.jp", + "tajiri.osaka.jp", + "takaishi.osaka.jp", + "takatsuki.osaka.jp", + "tondabayashi.osaka.jp", + "toyonaka.osaka.jp", + "toyono.osaka.jp", + "yao.osaka.jp", + "ariake.saga.jp", + "arita.saga.jp", + "fukudomi.saga.jp", + "genkai.saga.jp", + "hamatama.saga.jp", + "hizen.saga.jp", + "imari.saga.jp", + "kamimine.saga.jp", + "kanzaki.saga.jp", + "karatsu.saga.jp", + "kashima.saga.jp", + "kitagata.saga.jp", + "kitahata.saga.jp", + "kiyama.saga.jp", + "kouhoku.saga.jp", + "kyuragi.saga.jp", + "nishiarita.saga.jp", + "ogi.saga.jp", + "omachi.saga.jp", + "ouchi.saga.jp", + "saga.saga.jp", + "shiroishi.saga.jp", + "taku.saga.jp", + "tara.saga.jp", + "tosu.saga.jp", + "yoshinogari.saga.jp", + "arakawa.saitama.jp", + "asaka.saitama.jp", + "chichibu.saitama.jp", + "fujimi.saitama.jp", + "fujimino.saitama.jp", + "fukaya.saitama.jp", + "hanno.saitama.jp", + "hanyu.saitama.jp", + "hasuda.saitama.jp", + "hatogaya.saitama.jp", + "hatoyama.saitama.jp", + "hidaka.saitama.jp", + "higashichichibu.saitama.jp", + "higashimatsuyama.saitama.jp", + "honjo.saitama.jp", + "ina.saitama.jp", + "iruma.saitama.jp", + "iwatsuki.saitama.jp", + "kamiizumi.saitama.jp", + "kamikawa.saitama.jp", + "kamisato.saitama.jp", + "kasukabe.saitama.jp", + "kawagoe.saitama.jp", + "kawaguchi.saitama.jp", + "kawajima.saitama.jp", + "kazo.saitama.jp", + "kitamoto.saitama.jp", + "koshigaya.saitama.jp", + "kounosu.saitama.jp", + "kuki.saitama.jp", + "kumagaya.saitama.jp", + "matsubushi.saitama.jp", + "minano.saitama.jp", + "misato.saitama.jp", + "miyashiro.saitama.jp", + "miyoshi.saitama.jp", + "moroyama.saitama.jp", + "nagatoro.saitama.jp", + "namegawa.saitama.jp", + "niiza.saitama.jp", + "ogano.saitama.jp", + "ogawa.saitama.jp", + "ogose.saitama.jp", + "okegawa.saitama.jp", + "omiya.saitama.jp", + "otaki.saitama.jp", + "ranzan.saitama.jp", + "ryokami.saitama.jp", + "saitama.saitama.jp", + "sakado.saitama.jp", + "satte.saitama.jp", + "sayama.saitama.jp", + "shiki.saitama.jp", + "shiraoka.saitama.jp", + "soka.saitama.jp", + "sugito.saitama.jp", + "toda.saitama.jp", + "tokigawa.saitama.jp", + "tokorozawa.saitama.jp", + "tsurugashima.saitama.jp", + "urawa.saitama.jp", + "warabi.saitama.jp", + "yashio.saitama.jp", + "yokoze.saitama.jp", + "yono.saitama.jp", + "yorii.saitama.jp", + "yoshida.saitama.jp", + "yoshikawa.saitama.jp", + "yoshimi.saitama.jp", + "aisho.shiga.jp", + "gamo.shiga.jp", + "higashiomi.shiga.jp", + "hikone.shiga.jp", + "koka.shiga.jp", + "konan.shiga.jp", + "kosei.shiga.jp", + "koto.shiga.jp", + "kusatsu.shiga.jp", + "maibara.shiga.jp", + "moriyama.shiga.jp", + "nagahama.shiga.jp", + "nishiazai.shiga.jp", + "notogawa.shiga.jp", + "omihachiman.shiga.jp", + "otsu.shiga.jp", + "ritto.shiga.jp", + "ryuoh.shiga.jp", + "takashima.shiga.jp", + "takatsuki.shiga.jp", + "torahime.shiga.jp", + "toyosato.shiga.jp", + "yasu.shiga.jp", + "akagi.shimane.jp", + "ama.shimane.jp", + "gotsu.shimane.jp", + "hamada.shimane.jp", + "higashiizumo.shimane.jp", + "hikawa.shimane.jp", + "hikimi.shimane.jp", + "izumo.shimane.jp", + "kakinoki.shimane.jp", + "masuda.shimane.jp", + "matsue.shimane.jp", + "misato.shimane.jp", + "nishinoshima.shimane.jp", + "ohda.shimane.jp", + "okinoshima.shimane.jp", + "okuizumo.shimane.jp", + "shimane.shimane.jp", + "tamayu.shimane.jp", + "tsuwano.shimane.jp", + "unnan.shimane.jp", + "yakumo.shimane.jp", + "yasugi.shimane.jp", + "yatsuka.shimane.jp", + "arai.shizuoka.jp", + "atami.shizuoka.jp", + "fuji.shizuoka.jp", + "fujieda.shizuoka.jp", + "fujikawa.shizuoka.jp", + "fujinomiya.shizuoka.jp", + "fukuroi.shizuoka.jp", + "gotemba.shizuoka.jp", + "haibara.shizuoka.jp", + "hamamatsu.shizuoka.jp", + "higashiizu.shizuoka.jp", + "ito.shizuoka.jp", + "iwata.shizuoka.jp", + "izu.shizuoka.jp", + "izunokuni.shizuoka.jp", + "kakegawa.shizuoka.jp", + "kannami.shizuoka.jp", + "kawanehon.shizuoka.jp", + "kawazu.shizuoka.jp", + "kikugawa.shizuoka.jp", + "kosai.shizuoka.jp", + "makinohara.shizuoka.jp", + "matsuzaki.shizuoka.jp", + "minamiizu.shizuoka.jp", + "mishima.shizuoka.jp", + "morimachi.shizuoka.jp", + "nishiizu.shizuoka.jp", + "numazu.shizuoka.jp", + "omaezaki.shizuoka.jp", + "shimada.shizuoka.jp", + "shimizu.shizuoka.jp", + "shimoda.shizuoka.jp", + "shizuoka.shizuoka.jp", + "susono.shizuoka.jp", + "yaizu.shizuoka.jp", + "yoshida.shizuoka.jp", + "ashikaga.tochigi.jp", + "bato.tochigi.jp", + "haga.tochigi.jp", + "ichikai.tochigi.jp", + "iwafune.tochigi.jp", + "kaminokawa.tochigi.jp", + "kanuma.tochigi.jp", + "karasuyama.tochigi.jp", + "kuroiso.tochigi.jp", + "mashiko.tochigi.jp", + "mibu.tochigi.jp", + "moka.tochigi.jp", + "motegi.tochigi.jp", + "nasu.tochigi.jp", + "nasushiobara.tochigi.jp", + "nikko.tochigi.jp", + "nishikata.tochigi.jp", + "nogi.tochigi.jp", + "ohira.tochigi.jp", + "ohtawara.tochigi.jp", + "oyama.tochigi.jp", + "sakura.tochigi.jp", + "sano.tochigi.jp", + "shimotsuke.tochigi.jp", + "shioya.tochigi.jp", + "takanezawa.tochigi.jp", + "tochigi.tochigi.jp", + "tsuga.tochigi.jp", + "ujiie.tochigi.jp", + "utsunomiya.tochigi.jp", + "yaita.tochigi.jp", + "aizumi.tokushima.jp", + "anan.tokushima.jp", + "ichiba.tokushima.jp", + "itano.tokushima.jp", + "kainan.tokushima.jp", + "komatsushima.tokushima.jp", + "matsushige.tokushima.jp", + "mima.tokushima.jp", + "minami.tokushima.jp", + "miyoshi.tokushima.jp", + "mugi.tokushima.jp", + "nakagawa.tokushima.jp", + "naruto.tokushima.jp", + "sanagochi.tokushima.jp", + "shishikui.tokushima.jp", + "tokushima.tokushima.jp", + "wajiki.tokushima.jp", + "adachi.tokyo.jp", + "akiruno.tokyo.jp", + "akishima.tokyo.jp", + "aogashima.tokyo.jp", + "arakawa.tokyo.jp", + "bunkyo.tokyo.jp", + "chiyoda.tokyo.jp", + "chofu.tokyo.jp", + "chuo.tokyo.jp", + "edogawa.tokyo.jp", + "fuchu.tokyo.jp", + "fussa.tokyo.jp", + "hachijo.tokyo.jp", + "hachioji.tokyo.jp", + "hamura.tokyo.jp", + "higashikurume.tokyo.jp", + "higashimurayama.tokyo.jp", + "higashiyamato.tokyo.jp", + "hino.tokyo.jp", + "hinode.tokyo.jp", + "hinohara.tokyo.jp", + "inagi.tokyo.jp", + "itabashi.tokyo.jp", + "katsushika.tokyo.jp", + "kita.tokyo.jp", + "kiyose.tokyo.jp", + "kodaira.tokyo.jp", + "koganei.tokyo.jp", + "kokubunji.tokyo.jp", + "komae.tokyo.jp", + "koto.tokyo.jp", + "kouzushima.tokyo.jp", + "kunitachi.tokyo.jp", + "machida.tokyo.jp", + "meguro.tokyo.jp", + "minato.tokyo.jp", + "mitaka.tokyo.jp", + "mizuho.tokyo.jp", + "musashimurayama.tokyo.jp", + "musashino.tokyo.jp", + "nakano.tokyo.jp", + "nerima.tokyo.jp", + "ogasawara.tokyo.jp", + "okutama.tokyo.jp", + "ome.tokyo.jp", + "oshima.tokyo.jp", + "ota.tokyo.jp", + "setagaya.tokyo.jp", + "shibuya.tokyo.jp", + "shinagawa.tokyo.jp", + "shinjuku.tokyo.jp", + "suginami.tokyo.jp", + "sumida.tokyo.jp", + "tachikawa.tokyo.jp", + "taito.tokyo.jp", + "tama.tokyo.jp", + "toshima.tokyo.jp", + "chizu.tottori.jp", + "hino.tottori.jp", + "kawahara.tottori.jp", + "koge.tottori.jp", + "kotoura.tottori.jp", + "misasa.tottori.jp", + "nanbu.tottori.jp", + "nichinan.tottori.jp", + "sakaiminato.tottori.jp", + "tottori.tottori.jp", + "wakasa.tottori.jp", + "yazu.tottori.jp", + "yonago.tottori.jp", + "asahi.toyama.jp", + "fuchu.toyama.jp", + "fukumitsu.toyama.jp", + "funahashi.toyama.jp", + "himi.toyama.jp", + "imizu.toyama.jp", + "inami.toyama.jp", + "johana.toyama.jp", + "kamiichi.toyama.jp", + "kurobe.toyama.jp", + "nakaniikawa.toyama.jp", + "namerikawa.toyama.jp", + "nanto.toyama.jp", + "nyuzen.toyama.jp", + "oyabe.toyama.jp", + "taira.toyama.jp", + "takaoka.toyama.jp", + "tateyama.toyama.jp", + "toga.toyama.jp", + "tonami.toyama.jp", + "toyama.toyama.jp", + "unazuki.toyama.jp", + "uozu.toyama.jp", + "yamada.toyama.jp", + "arida.wakayama.jp", + "aridagawa.wakayama.jp", + "gobo.wakayama.jp", + "hashimoto.wakayama.jp", + "hidaka.wakayama.jp", + "hirogawa.wakayama.jp", + "inami.wakayama.jp", + "iwade.wakayama.jp", + "kainan.wakayama.jp", + "kamitonda.wakayama.jp", + "katsuragi.wakayama.jp", + "kimino.wakayama.jp", + "kinokawa.wakayama.jp", + "kitayama.wakayama.jp", + "koya.wakayama.jp", + "koza.wakayama.jp", + "kozagawa.wakayama.jp", + "kudoyama.wakayama.jp", + "kushimoto.wakayama.jp", + "mihama.wakayama.jp", + "misato.wakayama.jp", + "nachikatsuura.wakayama.jp", + "shingu.wakayama.jp", + "shirahama.wakayama.jp", + "taiji.wakayama.jp", + "tanabe.wakayama.jp", + "wakayama.wakayama.jp", + "yuasa.wakayama.jp", + "yura.wakayama.jp", + "asahi.yamagata.jp", + "funagata.yamagata.jp", + "higashine.yamagata.jp", + "iide.yamagata.jp", + "kahoku.yamagata.jp", + "kaminoyama.yamagata.jp", + "kaneyama.yamagata.jp", + "kawanishi.yamagata.jp", + "mamurogawa.yamagata.jp", + "mikawa.yamagata.jp", + "murayama.yamagata.jp", + "nagai.yamagata.jp", + "nakayama.yamagata.jp", + "nanyo.yamagata.jp", + "nishikawa.yamagata.jp", + "obanazawa.yamagata.jp", + "oe.yamagata.jp", + "oguni.yamagata.jp", + "ohkura.yamagata.jp", + "oishida.yamagata.jp", + "sagae.yamagata.jp", + "sakata.yamagata.jp", + "sakegawa.yamagata.jp", + "shinjo.yamagata.jp", + "shirataka.yamagata.jp", + "shonai.yamagata.jp", + "takahata.yamagata.jp", + "tendo.yamagata.jp", + "tozawa.yamagata.jp", + "tsuruoka.yamagata.jp", + "yamagata.yamagata.jp", + "yamanobe.yamagata.jp", + "yonezawa.yamagata.jp", + "yuza.yamagata.jp", + "abu.yamaguchi.jp", + "hagi.yamaguchi.jp", + "hikari.yamaguchi.jp", + "hofu.yamaguchi.jp", + "iwakuni.yamaguchi.jp", + "kudamatsu.yamaguchi.jp", + "mitou.yamaguchi.jp", + "nagato.yamaguchi.jp", + "oshima.yamaguchi.jp", + "shimonoseki.yamaguchi.jp", + "shunan.yamaguchi.jp", + "tabuse.yamaguchi.jp", + "tokuyama.yamaguchi.jp", + "toyota.yamaguchi.jp", + "ube.yamaguchi.jp", + "yuu.yamaguchi.jp", + "chuo.yamanashi.jp", + "doshi.yamanashi.jp", + "fuefuki.yamanashi.jp", + "fujikawa.yamanashi.jp", + "fujikawaguchiko.yamanashi.jp", + "fujiyoshida.yamanashi.jp", + "hayakawa.yamanashi.jp", + "hokuto.yamanashi.jp", + "ichikawamisato.yamanashi.jp", + "kai.yamanashi.jp", + "kofu.yamanashi.jp", + "koshu.yamanashi.jp", + "kosuge.yamanashi.jp", + "minami-alps.yamanashi.jp", + "minobu.yamanashi.jp", + "nakamichi.yamanashi.jp", + "nanbu.yamanashi.jp", + "narusawa.yamanashi.jp", + "nirasaki.yamanashi.jp", + "nishikatsura.yamanashi.jp", + "oshino.yamanashi.jp", + "otsuki.yamanashi.jp", + "showa.yamanashi.jp", + "tabayama.yamanashi.jp", + "tsuru.yamanashi.jp", + "uenohara.yamanashi.jp", + "yamanakako.yamanashi.jp", + "yamanashi.yamanashi.jp", + "*.ke", + "kg", + "org.kg", + "net.kg", + "com.kg", + "edu.kg", + "gov.kg", + "mil.kg", + "*.kh", + "ki", + "edu.ki", + "biz.ki", + "net.ki", + "org.ki", + "gov.ki", + "info.ki", + "com.ki", + "km", + "org.km", + "nom.km", + "gov.km", + "prd.km", + "tm.km", + "edu.km", + "mil.km", + "ass.km", + "com.km", + "coop.km", + "asso.km", + "presse.km", + "medecin.km", + "notaires.km", + "pharmaciens.km", + "veterinaire.km", + "gouv.km", + "kn", + "net.kn", + "org.kn", + "edu.kn", + "gov.kn", + "kp", + "com.kp", + "edu.kp", + "gov.kp", + "org.kp", + "rep.kp", + "tra.kp", + "kr", + "ac.kr", + "co.kr", + "es.kr", + "go.kr", + "hs.kr", + "kg.kr", + "mil.kr", + "ms.kr", + "ne.kr", + "or.kr", + "pe.kr", + "re.kr", + "sc.kr", + "busan.kr", + "chungbuk.kr", + "chungnam.kr", + "daegu.kr", + "daejeon.kr", + "gangwon.kr", + "gwangju.kr", + "gyeongbuk.kr", + "gyeonggi.kr", + "gyeongnam.kr", + "incheon.kr", + "jeju.kr", + "jeonbuk.kr", + "jeonnam.kr", + "seoul.kr", + "ulsan.kr", + "*.kw", + "ky", + "edu.ky", + "gov.ky", + "com.ky", + "org.ky", + "net.ky", + "kz", + "org.kz", + "edu.kz", + "net.kz", + "gov.kz", + "mil.kz", + "com.kz", + "la", + "int.la", + "net.la", + "info.la", + "edu.la", + "gov.la", + "per.la", + "com.la", + "org.la", + "lb", + "com.lb", + "edu.lb", + "gov.lb", + "net.lb", + "org.lb", + "lc", + "com.lc", + "net.lc", + "co.lc", + "org.lc", + "edu.lc", + "gov.lc", + "li", + "lk", + "gov.lk", + "sch.lk", + "net.lk", + "int.lk", + "com.lk", + "org.lk", + "edu.lk", + "ngo.lk", + "soc.lk", + "web.lk", + "ltd.lk", + "assn.lk", + "grp.lk", + "hotel.lk", + "ac.lk", + "lr", + "com.lr", + "edu.lr", + "gov.lr", + "org.lr", + "net.lr", + "ls", + "co.ls", + "org.ls", + "lt", + "gov.lt", + "lu", + "lv", + "com.lv", + "edu.lv", + "gov.lv", + "org.lv", + "mil.lv", + "id.lv", + "net.lv", + "asn.lv", + "conf.lv", + "ly", + "com.ly", + "net.ly", + "gov.ly", + "plc.ly", + "edu.ly", + "sch.ly", + "med.ly", + "org.ly", + "id.ly", + "ma", + "co.ma", + "net.ma", + "gov.ma", + "org.ma", + "ac.ma", + "press.ma", + "mc", + "tm.mc", + "asso.mc", + "md", + "me", + "co.me", + "net.me", + "org.me", + "edu.me", + "ac.me", + "gov.me", + "its.me", + "priv.me", + "mg", + "org.mg", + "nom.mg", + "gov.mg", + "prd.mg", + "tm.mg", + "edu.mg", + "mil.mg", + "com.mg", + "co.mg", + "mh", + "mil", + "mk", + "com.mk", + "org.mk", + "net.mk", + "edu.mk", + "gov.mk", + "inf.mk", + "name.mk", + "ml", + "com.ml", + "edu.ml", + "gouv.ml", + "gov.ml", + "net.ml", + "org.ml", + "presse.ml", + "*.mm", + "mn", + "gov.mn", + "edu.mn", + "org.mn", + "mo", + "com.mo", + "net.mo", + "org.mo", + "edu.mo", + "gov.mo", + "mobi", + "mp", + "mq", + "mr", + "gov.mr", + "ms", + "com.ms", + "edu.ms", + "gov.ms", + "net.ms", + "org.ms", + "mt", + "com.mt", + "edu.mt", + "net.mt", + "org.mt", + "mu", + "com.mu", + "net.mu", + "org.mu", + "gov.mu", + "ac.mu", + "co.mu", + "or.mu", + "museum", + "academy.museum", + "agriculture.museum", + "air.museum", + "airguard.museum", + "alabama.museum", + "alaska.museum", + "amber.museum", + "ambulance.museum", + "american.museum", + "americana.museum", + "americanantiques.museum", + "americanart.museum", + "amsterdam.museum", + "and.museum", + "annefrank.museum", + "anthro.museum", + "anthropology.museum", + "antiques.museum", + "aquarium.museum", + "arboretum.museum", + "archaeological.museum", + "archaeology.museum", + "architecture.museum", + "art.museum", + "artanddesign.museum", + "artcenter.museum", + "artdeco.museum", + "arteducation.museum", + "artgallery.museum", + "arts.museum", + "artsandcrafts.museum", + "asmatart.museum", + "assassination.museum", + "assisi.museum", + "association.museum", + "astronomy.museum", + "atlanta.museum", + "austin.museum", + "australia.museum", + "automotive.museum", + "aviation.museum", + "axis.museum", + "badajoz.museum", + "baghdad.museum", + "bahn.museum", + "bale.museum", + "baltimore.museum", + "barcelona.museum", + "baseball.museum", + "basel.museum", + "baths.museum", + "bauern.museum", + "beauxarts.museum", + "beeldengeluid.museum", + "bellevue.museum", + "bergbau.museum", + "berkeley.museum", + "berlin.museum", + "bern.museum", + "bible.museum", + "bilbao.museum", + "bill.museum", + "birdart.museum", + "birthplace.museum", + "bonn.museum", + "boston.museum", + "botanical.museum", + "botanicalgarden.museum", + "botanicgarden.museum", + "botany.museum", + "brandywinevalley.museum", + "brasil.museum", + "bristol.museum", + "british.museum", + "britishcolumbia.museum", + "broadcast.museum", + "brunel.museum", + "brussel.museum", + "brussels.museum", + "bruxelles.museum", + "building.museum", + "burghof.museum", + "bus.museum", + "bushey.museum", + "cadaques.museum", + "california.museum", + "cambridge.museum", + "can.museum", + "canada.museum", + "capebreton.museum", + "carrier.museum", + "cartoonart.museum", + "casadelamoneda.museum", + "castle.museum", + "castres.museum", + "celtic.museum", + "center.museum", + "chattanooga.museum", + "cheltenham.museum", + "chesapeakebay.museum", + "chicago.museum", + "children.museum", + "childrens.museum", + "childrensgarden.museum", + "chiropractic.museum", + "chocolate.museum", + "christiansburg.museum", + "cincinnati.museum", + "cinema.museum", + "circus.museum", + "civilisation.museum", + "civilization.museum", + "civilwar.museum", + "clinton.museum", + "clock.museum", + "coal.museum", + "coastaldefence.museum", + "cody.museum", + "coldwar.museum", + "collection.museum", + "colonialwilliamsburg.museum", + "coloradoplateau.museum", + "columbia.museum", + "columbus.museum", + "communication.museum", + "communications.museum", + "community.museum", + "computer.museum", + "computerhistory.museum", + "xn--comunicaes-v6a2o.museum", + "contemporary.museum", + "contemporaryart.museum", + "convent.museum", + "copenhagen.museum", + "corporation.museum", + "xn--correios-e-telecomunicaes-ghc29a.museum", + "corvette.museum", + "costume.museum", + "countryestate.museum", + "county.museum", + "crafts.museum", + "cranbrook.museum", + "creation.museum", + "cultural.museum", + "culturalcenter.museum", + "culture.museum", + "cyber.museum", + "cymru.museum", + "dali.museum", + "dallas.museum", + "database.museum", + "ddr.museum", + "decorativearts.museum", + "delaware.museum", + "delmenhorst.museum", + "denmark.museum", + "depot.museum", + "design.museum", + "detroit.museum", + "dinosaur.museum", + "discovery.museum", + "dolls.museum", + "donostia.museum", + "durham.museum", + "eastafrica.museum", + "eastcoast.museum", + "education.museum", + "educational.museum", + "egyptian.museum", + "eisenbahn.museum", + "elburg.museum", + "elvendrell.museum", + "embroidery.museum", + "encyclopedic.museum", + "england.museum", + "entomology.museum", + "environment.museum", + "environmentalconservation.museum", + "epilepsy.museum", + "essex.museum", + "estate.museum", + "ethnology.museum", + "exeter.museum", + "exhibition.museum", + "family.museum", + "farm.museum", + "farmequipment.museum", + "farmers.museum", + "farmstead.museum", + "field.museum", + "figueres.museum", + "filatelia.museum", + "film.museum", + "fineart.museum", + "finearts.museum", + "finland.museum", + "flanders.museum", + "florida.museum", + "force.museum", + "fortmissoula.museum", + "fortworth.museum", + "foundation.museum", + "francaise.museum", + "frankfurt.museum", + "franziskaner.museum", + "freemasonry.museum", + "freiburg.museum", + "fribourg.museum", + "frog.museum", + "fundacio.museum", + "furniture.museum", + "gallery.museum", + "garden.museum", + "gateway.museum", + "geelvinck.museum", + "gemological.museum", + "geology.museum", + "georgia.museum", + "giessen.museum", + "glas.museum", + "glass.museum", + "gorge.museum", + "grandrapids.museum", + "graz.museum", + "guernsey.museum", + "halloffame.museum", + "hamburg.museum", + "handson.museum", + "harvestcelebration.museum", + "hawaii.museum", + "health.museum", + "heimatunduhren.museum", + "hellas.museum", + "helsinki.museum", + "hembygdsforbund.museum", + "heritage.museum", + "histoire.museum", + "historical.museum", + "historicalsociety.museum", + "historichouses.museum", + "historisch.museum", + "historisches.museum", + "history.museum", + "historyofscience.museum", + "horology.museum", + "house.museum", + "humanities.museum", + "illustration.museum", + "imageandsound.museum", + "indian.museum", + "indiana.museum", + "indianapolis.museum", + "indianmarket.museum", + "intelligence.museum", + "interactive.museum", + "iraq.museum", + "iron.museum", + "isleofman.museum", + "jamison.museum", + "jefferson.museum", + "jerusalem.museum", + "jewelry.museum", + "jewish.museum", + "jewishart.museum", + "jfk.museum", + "journalism.museum", + "judaica.museum", + "judygarland.museum", + "juedisches.museum", + "juif.museum", + "karate.museum", + "karikatur.museum", + "kids.museum", + "koebenhavn.museum", + "koeln.museum", + "kunst.museum", + "kunstsammlung.museum", + "kunstunddesign.museum", + "labor.museum", + "labour.museum", + "lajolla.museum", + "lancashire.museum", + "landes.museum", + "lans.museum", + "xn--lns-qla.museum", + "larsson.museum", + "lewismiller.museum", + "lincoln.museum", + "linz.museum", + "living.museum", + "livinghistory.museum", + "localhistory.museum", + "london.museum", + "losangeles.museum", + "louvre.museum", + "loyalist.museum", + "lucerne.museum", + "luxembourg.museum", + "luzern.museum", + "mad.museum", + "madrid.museum", + "mallorca.museum", + "manchester.museum", + "mansion.museum", + "mansions.museum", + "manx.museum", + "marburg.museum", + "maritime.museum", + "maritimo.museum", + "maryland.museum", + "marylhurst.museum", + "media.museum", + "medical.museum", + "medizinhistorisches.museum", + "meeres.museum", + "memorial.museum", + "mesaverde.museum", + "michigan.museum", + "midatlantic.museum", + "military.museum", + "mill.museum", + "miners.museum", + "mining.museum", + "minnesota.museum", + "missile.museum", + "missoula.museum", + "modern.museum", + "moma.museum", + "money.museum", + "monmouth.museum", + "monticello.museum", + "montreal.museum", + "moscow.museum", + "motorcycle.museum", + "muenchen.museum", + "muenster.museum", + "mulhouse.museum", + "muncie.museum", + "museet.museum", + "museumcenter.museum", + "museumvereniging.museum", + "music.museum", + "national.museum", + "nationalfirearms.museum", + "nationalheritage.museum", + "nativeamerican.museum", + "naturalhistory.museum", + "naturalhistorymuseum.museum", + "naturalsciences.museum", + "nature.museum", + "naturhistorisches.museum", + "natuurwetenschappen.museum", + "naumburg.museum", + "naval.museum", + "nebraska.museum", + "neues.museum", + "newhampshire.museum", + "newjersey.museum", + "newmexico.museum", + "newport.museum", + "newspaper.museum", + "newyork.museum", + "niepce.museum", + "norfolk.museum", + "north.museum", + "nrw.museum", + "nuernberg.museum", + "nuremberg.museum", + "nyc.museum", + "nyny.museum", + "oceanographic.museum", + "oceanographique.museum", + "omaha.museum", + "online.museum", + "ontario.museum", + "openair.museum", + "oregon.museum", + "oregontrail.museum", + "otago.museum", + "oxford.museum", + "pacific.museum", + "paderborn.museum", + "palace.museum", + "paleo.museum", + "palmsprings.museum", + "panama.museum", + "paris.museum", + "pasadena.museum", + "pharmacy.museum", + "philadelphia.museum", + "philadelphiaarea.museum", + "philately.museum", + "phoenix.museum", + "photography.museum", + "pilots.museum", + "pittsburgh.museum", + "planetarium.museum", + "plantation.museum", + "plants.museum", + "plaza.museum", + "portal.museum", + "portland.museum", + "portlligat.museum", + "posts-and-telecommunications.museum", + "preservation.museum", + "presidio.museum", + "press.museum", + "project.museum", + "public.museum", + "pubol.museum", + "quebec.museum", + "railroad.museum", + "railway.museum", + "research.museum", + "resistance.museum", + "riodejaneiro.museum", + "rochester.museum", + "rockart.museum", + "roma.museum", + "russia.museum", + "saintlouis.museum", + "salem.museum", + "salvadordali.museum", + "salzburg.museum", + "sandiego.museum", + "sanfrancisco.museum", + "santabarbara.museum", + "santacruz.museum", + "santafe.museum", + "saskatchewan.museum", + "satx.museum", + "savannahga.museum", + "schlesisches.museum", + "schoenbrunn.museum", + "schokoladen.museum", + "school.museum", + "schweiz.museum", + "science.museum", + "scienceandhistory.museum", + "scienceandindustry.museum", + "sciencecenter.museum", + "sciencecenters.museum", + "science-fiction.museum", + "sciencehistory.museum", + "sciences.museum", + "sciencesnaturelles.museum", + "scotland.museum", + "seaport.museum", + "settlement.museum", + "settlers.museum", + "shell.museum", + "sherbrooke.museum", + "sibenik.museum", + "silk.museum", + "ski.museum", + "skole.museum", + "society.museum", + "sologne.museum", + "soundandvision.museum", + "southcarolina.museum", + "southwest.museum", + "space.museum", + "spy.museum", + "square.museum", + "stadt.museum", + "stalbans.museum", + "starnberg.museum", + "state.museum", + "stateofdelaware.museum", + "station.museum", + "steam.museum", + "steiermark.museum", + "stjohn.museum", + "stockholm.museum", + "stpetersburg.museum", + "stuttgart.museum", + "suisse.museum", + "surgeonshall.museum", + "surrey.museum", + "svizzera.museum", + "sweden.museum", + "sydney.museum", + "tank.museum", + "tcm.museum", + "technology.museum", + "telekommunikation.museum", + "television.museum", + "texas.museum", + "textile.museum", + "theater.museum", + "time.museum", + "timekeeping.museum", + "topology.museum", + "torino.museum", + "touch.museum", + "town.museum", + "transport.museum", + "tree.museum", + "trolley.museum", + "trust.museum", + "trustee.museum", + "uhren.museum", + "ulm.museum", + "undersea.museum", + "university.museum", + "usa.museum", + "usantiques.museum", + "usarts.museum", + "uscountryestate.museum", + "usculture.museum", + "usdecorativearts.museum", + "usgarden.museum", + "ushistory.museum", + "ushuaia.museum", + "uslivinghistory.museum", + "utah.museum", + "uvic.museum", + "valley.museum", + "vantaa.museum", + "versailles.museum", + "viking.museum", + "village.museum", + "virginia.museum", + "virtual.museum", + "virtuel.museum", + "vlaanderen.museum", + "volkenkunde.museum", + "wales.museum", + "wallonie.museum", + "war.museum", + "washingtondc.museum", + "watchandclock.museum", + "watch-and-clock.museum", + "western.museum", + "westfalen.museum", + "whaling.museum", + "wildlife.museum", + "williamsburg.museum", + "windmill.museum", + "workshop.museum", + "york.museum", + "yorkshire.museum", + "yosemite.museum", + "youth.museum", + "zoological.museum", + "zoology.museum", + "xn--9dbhblg6di.museum", + "xn--h1aegh.museum", + "mv", + "aero.mv", + "biz.mv", + "com.mv", + "coop.mv", + "edu.mv", + "gov.mv", + "info.mv", + "int.mv", + "mil.mv", + "museum.mv", + "name.mv", + "net.mv", + "org.mv", + "pro.mv", + "mw", + "ac.mw", + "biz.mw", + "co.mw", + "com.mw", + "coop.mw", + "edu.mw", + "gov.mw", + "int.mw", + "museum.mw", + "net.mw", + "org.mw", + "mx", + "com.mx", + "org.mx", + "gob.mx", + "edu.mx", + "net.mx", + "my", + "com.my", + "net.my", + "org.my", + "gov.my", + "edu.my", + "mil.my", + "name.my", + "mz", + "ac.mz", + "adv.mz", + "co.mz", + "edu.mz", + "gov.mz", + "mil.mz", + "net.mz", + "org.mz", + "na", + "info.na", + "pro.na", + "name.na", + "school.na", + "or.na", + "dr.na", + "us.na", + "mx.na", + "ca.na", + "in.na", + "cc.na", + "tv.na", + "ws.na", + "mobi.na", + "co.na", + "com.na", + "org.na", + "name", + "nc", + "asso.nc", + "ne", + "net", + "nf", + "com.nf", + "net.nf", + "per.nf", + "rec.nf", + "web.nf", + "arts.nf", + "firm.nf", + "info.nf", + "other.nf", + "store.nf", + "ng", + "com.ng", + "edu.ng", + "gov.ng", + "i.ng", + "mil.ng", + "mobi.ng", + "name.ng", + "net.ng", + "org.ng", + "sch.ng", + "ni", + "ac.ni", + "biz.ni", + "co.ni", + "com.ni", + "edu.ni", + "gob.ni", + "in.ni", + "info.ni", + "int.ni", + "mil.ni", + "net.ni", + "nom.ni", + "org.ni", + "web.ni", + "nl", + "bv.nl", + "no", + "fhs.no", + "vgs.no", + "fylkesbibl.no", + "folkebibl.no", + "museum.no", + "idrett.no", + "priv.no", + "mil.no", + "stat.no", + "dep.no", + "kommune.no", + "herad.no", + "aa.no", + "ah.no", + "bu.no", + "fm.no", + "hl.no", + "hm.no", + "jan-mayen.no", + "mr.no", + "nl.no", + "nt.no", + "of.no", + "ol.no", + "oslo.no", + "rl.no", + "sf.no", + "st.no", + "svalbard.no", + "tm.no", + "tr.no", + "va.no", + "vf.no", + "gs.aa.no", + "gs.ah.no", + "gs.bu.no", + "gs.fm.no", + "gs.hl.no", + "gs.hm.no", + "gs.jan-mayen.no", + "gs.mr.no", + "gs.nl.no", + "gs.nt.no", + "gs.of.no", + "gs.ol.no", + "gs.oslo.no", + "gs.rl.no", + "gs.sf.no", + "gs.st.no", + "gs.svalbard.no", + "gs.tm.no", + "gs.tr.no", + "gs.va.no", + "gs.vf.no", + "akrehamn.no", + "xn--krehamn-dxa.no", + "algard.no", + "xn--lgrd-poac.no", + "arna.no", + "brumunddal.no", + "bryne.no", + "bronnoysund.no", + "xn--brnnysund-m8ac.no", + "drobak.no", + "xn--drbak-wua.no", + "egersund.no", + "fetsund.no", + "floro.no", + "xn--flor-jra.no", + "fredrikstad.no", + "hokksund.no", + "honefoss.no", + "xn--hnefoss-q1a.no", + "jessheim.no", + "jorpeland.no", + "xn--jrpeland-54a.no", + "kirkenes.no", + "kopervik.no", + "krokstadelva.no", + "langevag.no", + "xn--langevg-jxa.no", + "leirvik.no", + "mjondalen.no", + "xn--mjndalen-64a.no", + "mo-i-rana.no", + "mosjoen.no", + "xn--mosjen-eya.no", + "nesoddtangen.no", + "orkanger.no", + "osoyro.no", + "xn--osyro-wua.no", + "raholt.no", + "xn--rholt-mra.no", + "sandnessjoen.no", + "xn--sandnessjen-ogb.no", + "skedsmokorset.no", + "slattum.no", + "spjelkavik.no", + "stathelle.no", + "stavern.no", + "stjordalshalsen.no", + "xn--stjrdalshalsen-sqb.no", + "tananger.no", + "tranby.no", + "vossevangen.no", + "afjord.no", + "xn--fjord-lra.no", + "agdenes.no", + "al.no", + "xn--l-1fa.no", + "alesund.no", + "xn--lesund-hua.no", + "alstahaug.no", + "alta.no", + "xn--lt-liac.no", + "alaheadju.no", + "xn--laheadju-7ya.no", + "alvdal.no", + "amli.no", + "xn--mli-tla.no", + "amot.no", + "xn--mot-tla.no", + "andebu.no", + "andoy.no", + "xn--andy-ira.no", + "andasuolo.no", + "ardal.no", + "xn--rdal-poa.no", + "aremark.no", + "arendal.no", + "xn--s-1fa.no", + "aseral.no", + "xn--seral-lra.no", + "asker.no", + "askim.no", + "askvoll.no", + "askoy.no", + "xn--asky-ira.no", + "asnes.no", + "xn--snes-poa.no", + "audnedaln.no", + "aukra.no", + "aure.no", + "aurland.no", + "aurskog-holand.no", + "xn--aurskog-hland-jnb.no", + "austevoll.no", + "austrheim.no", + "averoy.no", + "xn--avery-yua.no", + "balestrand.no", + "ballangen.no", + "balat.no", + "xn--blt-elab.no", + "balsfjord.no", + "bahccavuotna.no", + "xn--bhccavuotna-k7a.no", + "bamble.no", + "bardu.no", + "beardu.no", + "beiarn.no", + "bajddar.no", + "xn--bjddar-pta.no", + "baidar.no", + "xn--bidr-5nac.no", + "berg.no", + "bergen.no", + "berlevag.no", + "xn--berlevg-jxa.no", + "bearalvahki.no", + "xn--bearalvhki-y4a.no", + "bindal.no", + "birkenes.no", + "bjarkoy.no", + "xn--bjarky-fya.no", + "bjerkreim.no", + "bjugn.no", + "bodo.no", + "xn--bod-2na.no", + "badaddja.no", + "xn--bdddj-mrabd.no", + "budejju.no", + "bokn.no", + "bremanger.no", + "bronnoy.no", + "xn--brnny-wuac.no", + "bygland.no", + "bykle.no", + "barum.no", + "xn--brum-voa.no", + "bo.telemark.no", + "xn--b-5ga.telemark.no", + "bo.nordland.no", + "xn--b-5ga.nordland.no", + "bievat.no", + "xn--bievt-0qa.no", + "bomlo.no", + "xn--bmlo-gra.no", + "batsfjord.no", + "xn--btsfjord-9za.no", + "bahcavuotna.no", + "xn--bhcavuotna-s4a.no", + "dovre.no", + "drammen.no", + "drangedal.no", + "dyroy.no", + "xn--dyry-ira.no", + "donna.no", + "xn--dnna-gra.no", + "eid.no", + "eidfjord.no", + "eidsberg.no", + "eidskog.no", + "eidsvoll.no", + "eigersund.no", + "elverum.no", + "enebakk.no", + "engerdal.no", + "etne.no", + "etnedal.no", + "evenes.no", + "evenassi.no", + "xn--eveni-0qa01ga.no", + "evje-og-hornnes.no", + "farsund.no", + "fauske.no", + "fuossko.no", + "fuoisku.no", + "fedje.no", + "fet.no", + "finnoy.no", + "xn--finny-yua.no", + "fitjar.no", + "fjaler.no", + "fjell.no", + "flakstad.no", + "flatanger.no", + "flekkefjord.no", + "flesberg.no", + "flora.no", + "fla.no", + "xn--fl-zia.no", + "folldal.no", + "forsand.no", + "fosnes.no", + "frei.no", + "frogn.no", + "froland.no", + "frosta.no", + "frana.no", + "xn--frna-woa.no", + "froya.no", + "xn--frya-hra.no", + "fusa.no", + "fyresdal.no", + "forde.no", + "xn--frde-gra.no", + "gamvik.no", + "gangaviika.no", + "xn--ggaviika-8ya47h.no", + "gaular.no", + "gausdal.no", + "gildeskal.no", + "xn--gildeskl-g0a.no", + "giske.no", + "gjemnes.no", + "gjerdrum.no", + "gjerstad.no", + "gjesdal.no", + "gjovik.no", + "xn--gjvik-wua.no", + "gloppen.no", + "gol.no", + "gran.no", + "grane.no", + "granvin.no", + "gratangen.no", + "grimstad.no", + "grong.no", + "kraanghke.no", + "xn--kranghke-b0a.no", + "grue.no", + "gulen.no", + "hadsel.no", + "halden.no", + "halsa.no", + "hamar.no", + "hamaroy.no", + "habmer.no", + "xn--hbmer-xqa.no", + "hapmir.no", + "xn--hpmir-xqa.no", + "hammerfest.no", + "hammarfeasta.no", + "xn--hmmrfeasta-s4ac.no", + "haram.no", + "hareid.no", + "harstad.no", + "hasvik.no", + "aknoluokta.no", + "xn--koluokta-7ya57h.no", + "hattfjelldal.no", + "aarborte.no", + "haugesund.no", + "hemne.no", + "hemnes.no", + "hemsedal.no", + "heroy.more-og-romsdal.no", + "xn--hery-ira.xn--mre-og-romsdal-qqb.no", + "heroy.nordland.no", + "xn--hery-ira.nordland.no", + "hitra.no", + "hjartdal.no", + "hjelmeland.no", + "hobol.no", + "xn--hobl-ira.no", + "hof.no", + "hol.no", + "hole.no", + "holmestrand.no", + "holtalen.no", + "xn--holtlen-hxa.no", + "hornindal.no", + "horten.no", + "hurdal.no", + "hurum.no", + "hvaler.no", + "hyllestad.no", + "hagebostad.no", + "xn--hgebostad-g3a.no", + "hoyanger.no", + "xn--hyanger-q1a.no", + "hoylandet.no", + "xn--hylandet-54a.no", + "ha.no", + "xn--h-2fa.no", + "ibestad.no", + "inderoy.no", + "xn--indery-fya.no", + "iveland.no", + "jevnaker.no", + "jondal.no", + "jolster.no", + "xn--jlster-bya.no", + "karasjok.no", + "karasjohka.no", + "xn--krjohka-hwab49j.no", + "karlsoy.no", + "galsa.no", + "xn--gls-elac.no", + "karmoy.no", + "xn--karmy-yua.no", + "kautokeino.no", + "guovdageaidnu.no", + "klepp.no", + "klabu.no", + "xn--klbu-woa.no", + "kongsberg.no", + "kongsvinger.no", + "kragero.no", + "xn--krager-gya.no", + "kristiansand.no", + "kristiansund.no", + "krodsherad.no", + "xn--krdsherad-m8a.no", + "kvalsund.no", + "rahkkeravju.no", + "xn--rhkkervju-01af.no", + "kvam.no", + "kvinesdal.no", + "kvinnherad.no", + "kviteseid.no", + "kvitsoy.no", + "xn--kvitsy-fya.no", + "kvafjord.no", + "xn--kvfjord-nxa.no", + "giehtavuoatna.no", + "kvanangen.no", + "xn--kvnangen-k0a.no", + "navuotna.no", + "xn--nvuotna-hwa.no", + "kafjord.no", + "xn--kfjord-iua.no", + "gaivuotna.no", + "xn--givuotna-8ya.no", + "larvik.no", + "lavangen.no", + "lavagis.no", + "loabat.no", + "xn--loabt-0qa.no", + "lebesby.no", + "davvesiida.no", + "leikanger.no", + "leirfjord.no", + "leka.no", + "leksvik.no", + "lenvik.no", + "leangaviika.no", + "xn--leagaviika-52b.no", + "lesja.no", + "levanger.no", + "lier.no", + "lierne.no", + "lillehammer.no", + "lillesand.no", + "lindesnes.no", + "lindas.no", + "xn--linds-pra.no", + "lom.no", + "loppa.no", + "lahppi.no", + "xn--lhppi-xqa.no", + "lund.no", + "lunner.no", + "luroy.no", + "xn--lury-ira.no", + "luster.no", + "lyngdal.no", + "lyngen.no", + "ivgu.no", + "lardal.no", + "lerdal.no", + "xn--lrdal-sra.no", + "lodingen.no", + "xn--ldingen-q1a.no", + "lorenskog.no", + "xn--lrenskog-54a.no", + "loten.no", + "xn--lten-gra.no", + "malvik.no", + "masoy.no", + "xn--msy-ula0h.no", + "muosat.no", + "xn--muost-0qa.no", + "mandal.no", + "marker.no", + "marnardal.no", + "masfjorden.no", + "meland.no", + "meldal.no", + "melhus.no", + "meloy.no", + "xn--mely-ira.no", + "meraker.no", + "xn--merker-kua.no", + "moareke.no", + "xn--moreke-jua.no", + "midsund.no", + "midtre-gauldal.no", + "modalen.no", + "modum.no", + "molde.no", + "moskenes.no", + "moss.no", + "mosvik.no", + "malselv.no", + "xn--mlselv-iua.no", + "malatvuopmi.no", + "xn--mlatvuopmi-s4a.no", + "namdalseid.no", + "aejrie.no", + "namsos.no", + "namsskogan.no", + "naamesjevuemie.no", + "xn--nmesjevuemie-tcba.no", + "laakesvuemie.no", + "nannestad.no", + "narvik.no", + "narviika.no", + "naustdal.no", + "nedre-eiker.no", + "nes.akershus.no", + "nes.buskerud.no", + "nesna.no", + "nesodden.no", + "nesseby.no", + "unjarga.no", + "xn--unjrga-rta.no", + "nesset.no", + "nissedal.no", + "nittedal.no", + "nord-aurdal.no", + "nord-fron.no", + "nord-odal.no", + "norddal.no", + "nordkapp.no", + "davvenjarga.no", + "xn--davvenjrga-y4a.no", + "nordre-land.no", + "nordreisa.no", + "raisa.no", + "xn--risa-5na.no", + "nore-og-uvdal.no", + "notodden.no", + "naroy.no", + "xn--nry-yla5g.no", + "notteroy.no", + "xn--nttery-byae.no", + "odda.no", + "oksnes.no", + "xn--ksnes-uua.no", + "oppdal.no", + "oppegard.no", + "xn--oppegrd-ixa.no", + "orkdal.no", + "orland.no", + "xn--rland-uua.no", + "orskog.no", + "xn--rskog-uua.no", + "orsta.no", + "xn--rsta-fra.no", + "os.hedmark.no", + "os.hordaland.no", + "osen.no", + "osteroy.no", + "xn--ostery-fya.no", + "ostre-toten.no", + "xn--stre-toten-zcb.no", + "overhalla.no", + "ovre-eiker.no", + "xn--vre-eiker-k8a.no", + "oyer.no", + "xn--yer-zna.no", + "oygarden.no", + "xn--ygarden-p1a.no", + "oystre-slidre.no", + "xn--ystre-slidre-ujb.no", + "porsanger.no", + "porsangu.no", + "xn--porsgu-sta26f.no", + "porsgrunn.no", + "radoy.no", + "xn--rady-ira.no", + "rakkestad.no", + "rana.no", + "ruovat.no", + "randaberg.no", + "rauma.no", + "rendalen.no", + "rennebu.no", + "rennesoy.no", + "xn--rennesy-v1a.no", + "rindal.no", + "ringebu.no", + "ringerike.no", + "ringsaker.no", + "rissa.no", + "risor.no", + "xn--risr-ira.no", + "roan.no", + "rollag.no", + "rygge.no", + "ralingen.no", + "xn--rlingen-mxa.no", + "rodoy.no", + "xn--rdy-0nab.no", + "romskog.no", + "xn--rmskog-bya.no", + "roros.no", + "xn--rros-gra.no", + "rost.no", + "xn--rst-0na.no", + "royken.no", + "xn--ryken-vua.no", + "royrvik.no", + "xn--ryrvik-bya.no", + "rade.no", + "xn--rde-ula.no", + "salangen.no", + "siellak.no", + "saltdal.no", + "salat.no", + "xn--slt-elab.no", + "xn--slat-5na.no", + "samnanger.no", + "sande.more-og-romsdal.no", + "sande.xn--mre-og-romsdal-qqb.no", + "sande.vestfold.no", + "sandefjord.no", + "sandnes.no", + "sandoy.no", + "xn--sandy-yua.no", + "sarpsborg.no", + "sauda.no", + "sauherad.no", + "sel.no", + "selbu.no", + "selje.no", + "seljord.no", + "sigdal.no", + "siljan.no", + "sirdal.no", + "skaun.no", + "skedsmo.no", + "ski.no", + "skien.no", + "skiptvet.no", + "skjervoy.no", + "xn--skjervy-v1a.no", + "skierva.no", + "xn--skierv-uta.no", + "skjak.no", + "xn--skjk-soa.no", + "skodje.no", + "skanland.no", + "xn--sknland-fxa.no", + "skanit.no", + "xn--sknit-yqa.no", + "smola.no", + "xn--smla-hra.no", + "snillfjord.no", + "snasa.no", + "xn--snsa-roa.no", + "snoasa.no", + "snaase.no", + "xn--snase-nra.no", + "sogndal.no", + "sokndal.no", + "sola.no", + "solund.no", + "songdalen.no", + "sortland.no", + "spydeberg.no", + "stange.no", + "stavanger.no", + "steigen.no", + "steinkjer.no", + "stjordal.no", + "xn--stjrdal-s1a.no", + "stokke.no", + "stor-elvdal.no", + "stord.no", + "stordal.no", + "storfjord.no", + "omasvuotna.no", + "strand.no", + "stranda.no", + "stryn.no", + "sula.no", + "suldal.no", + "sund.no", + "sunndal.no", + "surnadal.no", + "sveio.no", + "svelvik.no", + "sykkylven.no", + "sogne.no", + "xn--sgne-gra.no", + "somna.no", + "xn--smna-gra.no", + "sondre-land.no", + "xn--sndre-land-0cb.no", + "sor-aurdal.no", + "xn--sr-aurdal-l8a.no", + "sor-fron.no", + "xn--sr-fron-q1a.no", + "sor-odal.no", + "xn--sr-odal-q1a.no", + "sor-varanger.no", + "xn--sr-varanger-ggb.no", + "matta-varjjat.no", + "xn--mtta-vrjjat-k7af.no", + "sorfold.no", + "xn--srfold-bya.no", + "sorreisa.no", + "xn--srreisa-q1a.no", + "sorum.no", + "xn--srum-gra.no", + "tana.no", + "deatnu.no", + "time.no", + "tingvoll.no", + "tinn.no", + "tjeldsund.no", + "dielddanuorri.no", + "tjome.no", + "xn--tjme-hra.no", + "tokke.no", + "tolga.no", + "torsken.no", + "tranoy.no", + "xn--trany-yua.no", + "tromso.no", + "xn--troms-zua.no", + "tromsa.no", + "romsa.no", + "trondheim.no", + "troandin.no", + "trysil.no", + "trana.no", + "xn--trna-woa.no", + "trogstad.no", + "xn--trgstad-r1a.no", + "tvedestrand.no", + "tydal.no", + "tynset.no", + "tysfjord.no", + "divtasvuodna.no", + "divttasvuotna.no", + "tysnes.no", + "tysvar.no", + "xn--tysvr-vra.no", + "tonsberg.no", + "xn--tnsberg-q1a.no", + "ullensaker.no", + "ullensvang.no", + "ulvik.no", + "utsira.no", + "vadso.no", + "xn--vads-jra.no", + "cahcesuolo.no", + "xn--hcesuolo-7ya35b.no", + "vaksdal.no", + "valle.no", + "vang.no", + "vanylven.no", + "vardo.no", + "xn--vard-jra.no", + "varggat.no", + "xn--vrggt-xqad.no", + "vefsn.no", + "vaapste.no", + "vega.no", + "vegarshei.no", + "xn--vegrshei-c0a.no", + "vennesla.no", + "verdal.no", + "verran.no", + "vestby.no", + "vestnes.no", + "vestre-slidre.no", + "vestre-toten.no", + "vestvagoy.no", + "xn--vestvgy-ixa6o.no", + "vevelstad.no", + "vik.no", + "vikna.no", + "vindafjord.no", + "volda.no", + "voss.no", + "varoy.no", + "xn--vry-yla5g.no", + "vagan.no", + "xn--vgan-qoa.no", + "voagat.no", + "vagsoy.no", + "xn--vgsy-qoa0j.no", + "vaga.no", + "xn--vg-yiab.no", + "valer.ostfold.no", + "xn--vler-qoa.xn--stfold-9xa.no", + "valer.hedmark.no", + "xn--vler-qoa.hedmark.no", + "*.np", + "nr", + "biz.nr", + "info.nr", + "gov.nr", + "edu.nr", + "org.nr", + "net.nr", + "com.nr", + "nu", + "nz", + "ac.nz", + "co.nz", + "cri.nz", + "geek.nz", + "gen.nz", + "govt.nz", + "health.nz", + "iwi.nz", + "kiwi.nz", + "maori.nz", + "mil.nz", + "xn--mori-qsa.nz", + "net.nz", + "org.nz", + "parliament.nz", + "school.nz", + "om", + "co.om", + "com.om", + "edu.om", + "gov.om", + "med.om", + "museum.om", + "net.om", + "org.om", + "pro.om", + "onion", + "org", + "pa", + "ac.pa", + "gob.pa", + "com.pa", + "org.pa", + "sld.pa", + "edu.pa", + "net.pa", + "ing.pa", + "abo.pa", + "med.pa", + "nom.pa", + "pe", + "edu.pe", + "gob.pe", + "nom.pe", + "mil.pe", + "org.pe", + "com.pe", + "net.pe", + "pf", + "com.pf", + "org.pf", + "edu.pf", + "*.pg", + "ph", + "com.ph", + "net.ph", + "org.ph", + "gov.ph", + "edu.ph", + "ngo.ph", + "mil.ph", + "i.ph", + "pk", + "com.pk", + "net.pk", + "edu.pk", + "org.pk", + "fam.pk", + "biz.pk", + "web.pk", + "gov.pk", + "gob.pk", + "gok.pk", + "gon.pk", + "gop.pk", + "gos.pk", + "info.pk", + "pl", + "com.pl", + "net.pl", + "org.pl", + "aid.pl", + "agro.pl", + "atm.pl", + "auto.pl", + "biz.pl", + "edu.pl", + "gmina.pl", + "gsm.pl", + "info.pl", + "mail.pl", + "miasta.pl", + "media.pl", + "mil.pl", + "nieruchomosci.pl", + "nom.pl", + "pc.pl", + "powiat.pl", + "priv.pl", + "realestate.pl", + "rel.pl", + "sex.pl", + "shop.pl", + "sklep.pl", + "sos.pl", + "szkola.pl", + "targi.pl", + "tm.pl", + "tourism.pl", + "travel.pl", + "turystyka.pl", + "gov.pl", + "ap.gov.pl", + "ic.gov.pl", + "is.gov.pl", + "us.gov.pl", + "kmpsp.gov.pl", + "kppsp.gov.pl", + "kwpsp.gov.pl", + "psp.gov.pl", + "wskr.gov.pl", + "kwp.gov.pl", + "mw.gov.pl", + "ug.gov.pl", + "um.gov.pl", + "umig.gov.pl", + "ugim.gov.pl", + "upow.gov.pl", + "uw.gov.pl", + "starostwo.gov.pl", + "pa.gov.pl", + "po.gov.pl", + "psse.gov.pl", + "pup.gov.pl", + "rzgw.gov.pl", + "sa.gov.pl", + "so.gov.pl", + "sr.gov.pl", + "wsa.gov.pl", + "sko.gov.pl", + "uzs.gov.pl", + "wiih.gov.pl", + "winb.gov.pl", + "pinb.gov.pl", + "wios.gov.pl", + "witd.gov.pl", + "wzmiuw.gov.pl", + "piw.gov.pl", + "wiw.gov.pl", + "griw.gov.pl", + "wif.gov.pl", + "oum.gov.pl", + "sdn.gov.pl", + "zp.gov.pl", + "uppo.gov.pl", + "mup.gov.pl", + "wuoz.gov.pl", + "konsulat.gov.pl", + "oirm.gov.pl", + "augustow.pl", + "babia-gora.pl", + "bedzin.pl", + "beskidy.pl", + "bialowieza.pl", + "bialystok.pl", + "bielawa.pl", + "bieszczady.pl", + "boleslawiec.pl", + "bydgoszcz.pl", + "bytom.pl", + "cieszyn.pl", + "czeladz.pl", + "czest.pl", + "dlugoleka.pl", + "elblag.pl", + "elk.pl", + "glogow.pl", + "gniezno.pl", + "gorlice.pl", + "grajewo.pl", + "ilawa.pl", + "jaworzno.pl", + "jelenia-gora.pl", + "jgora.pl", + "kalisz.pl", + "kazimierz-dolny.pl", + "karpacz.pl", + "kartuzy.pl", + "kaszuby.pl", + "katowice.pl", + "kepno.pl", + "ketrzyn.pl", + "klodzko.pl", + "kobierzyce.pl", + "kolobrzeg.pl", + "konin.pl", + "konskowola.pl", + "kutno.pl", + "lapy.pl", + "lebork.pl", + "legnica.pl", + "lezajsk.pl", + "limanowa.pl", + "lomza.pl", + "lowicz.pl", + "lubin.pl", + "lukow.pl", + "malbork.pl", + "malopolska.pl", + "mazowsze.pl", + "mazury.pl", + "mielec.pl", + "mielno.pl", + "mragowo.pl", + "naklo.pl", + "nowaruda.pl", + "nysa.pl", + "olawa.pl", + "olecko.pl", + "olkusz.pl", + "olsztyn.pl", + "opoczno.pl", + "opole.pl", + "ostroda.pl", + "ostroleka.pl", + "ostrowiec.pl", + "ostrowwlkp.pl", + "pila.pl", + "pisz.pl", + "podhale.pl", + "podlasie.pl", + "polkowice.pl", + "pomorze.pl", + "pomorskie.pl", + "prochowice.pl", + "pruszkow.pl", + "przeworsk.pl", + "pulawy.pl", + "radom.pl", + "rawa-maz.pl", + "rybnik.pl", + "rzeszow.pl", + "sanok.pl", + "sejny.pl", + "slask.pl", + "slupsk.pl", + "sosnowiec.pl", + "stalowa-wola.pl", + "skoczow.pl", + "starachowice.pl", + "stargard.pl", + "suwalki.pl", + "swidnica.pl", + "swiebodzin.pl", + "swinoujscie.pl", + "szczecin.pl", + "szczytno.pl", + "tarnobrzeg.pl", + "tgory.pl", + "turek.pl", + "tychy.pl", + "ustka.pl", + "walbrzych.pl", + "warmia.pl", + "warszawa.pl", + "waw.pl", + "wegrow.pl", + "wielun.pl", + "wlocl.pl", + "wloclawek.pl", + "wodzislaw.pl", + "wolomin.pl", + "wroclaw.pl", + "zachpomor.pl", + "zagan.pl", + "zarow.pl", + "zgora.pl", + "zgorzelec.pl", + "pm", + "pn", + "gov.pn", + "co.pn", + "org.pn", + "edu.pn", + "net.pn", + "post", + "pr", + "com.pr", + "net.pr", + "org.pr", + "gov.pr", + "edu.pr", + "isla.pr", + "pro.pr", + "biz.pr", + "info.pr", + "name.pr", + "est.pr", + "prof.pr", + "ac.pr", + "pro", + "aaa.pro", + "aca.pro", + "acct.pro", + "avocat.pro", + "bar.pro", + "cpa.pro", + "eng.pro", + "jur.pro", + "law.pro", + "med.pro", + "recht.pro", + "ps", + "edu.ps", + "gov.ps", + "sec.ps", + "plo.ps", + "com.ps", + "org.ps", + "net.ps", + "pt", + "net.pt", + "gov.pt", + "org.pt", + "edu.pt", + "int.pt", + "publ.pt", + "com.pt", + "nome.pt", + "pw", + "co.pw", + "ne.pw", + "or.pw", + "ed.pw", + "go.pw", + "belau.pw", + "py", + "com.py", + "coop.py", + "edu.py", + "gov.py", + "mil.py", + "net.py", + "org.py", + "qa", + "com.qa", + "edu.qa", + "gov.qa", + "mil.qa", + "name.qa", + "net.qa", + "org.qa", + "sch.qa", + "re", + "asso.re", + "com.re", + "nom.re", + "ro", + "arts.ro", + "com.ro", + "firm.ro", + "info.ro", + "nom.ro", + "nt.ro", + "org.ro", + "rec.ro", + "store.ro", + "tm.ro", + "www.ro", + "rs", + "ac.rs", + "co.rs", + "edu.rs", + "gov.rs", + "in.rs", + "org.rs", + "ru", + "ac.ru", + "edu.ru", + "gov.ru", + "int.ru", + "mil.ru", + "test.ru", + "rw", + "gov.rw", + "net.rw", + "edu.rw", + "ac.rw", + "com.rw", + "co.rw", + "int.rw", + "mil.rw", + "gouv.rw", + "sa", + "com.sa", + "net.sa", + "org.sa", + "gov.sa", + "med.sa", + "pub.sa", + "edu.sa", + "sch.sa", + "sb", + "com.sb", + "edu.sb", + "gov.sb", + "net.sb", + "org.sb", + "sc", + "com.sc", + "gov.sc", + "net.sc", + "org.sc", + "edu.sc", + "sd", + "com.sd", + "net.sd", + "org.sd", + "edu.sd", + "med.sd", + "tv.sd", + "gov.sd", + "info.sd", + "se", + "a.se", + "ac.se", + "b.se", + "bd.se", + "brand.se", + "c.se", + "d.se", + "e.se", + "f.se", + "fh.se", + "fhsk.se", + "fhv.se", + "g.se", + "h.se", + "i.se", + "k.se", + "komforb.se", + "kommunalforbund.se", + "komvux.se", + "l.se", + "lanbib.se", + "m.se", + "n.se", + "naturbruksgymn.se", + "o.se", + "org.se", + "p.se", + "parti.se", + "pp.se", + "press.se", + "r.se", + "s.se", + "t.se", + "tm.se", + "u.se", + "w.se", + "x.se", + "y.se", + "z.se", + "sg", + "com.sg", + "net.sg", + "org.sg", + "gov.sg", + "edu.sg", + "per.sg", + "sh", + "com.sh", + "net.sh", + "gov.sh", + "org.sh", + "mil.sh", + "si", + "sj", + "sk", + "sl", + "com.sl", + "net.sl", + "edu.sl", + "gov.sl", + "org.sl", + "sm", + "sn", + "art.sn", + "com.sn", + "edu.sn", + "gouv.sn", + "org.sn", + "perso.sn", + "univ.sn", + "so", + "com.so", + "net.so", + "org.so", + "sr", + "st", + "co.st", + "com.st", + "consulado.st", + "edu.st", + "embaixada.st", + "gov.st", + "mil.st", + "net.st", + "org.st", + "principe.st", + "saotome.st", + "store.st", + "su", + "adygeya.su", + "arkhangelsk.su", + "balashov.su", + "bashkiria.su", + "bryansk.su", + "dagestan.su", + "grozny.su", + "ivanovo.su", + "kalmykia.su", + "kaluga.su", + "karelia.su", + "khakassia.su", + "krasnodar.su", + "kurgan.su", + "lenug.su", + "mordovia.su", + "msk.su", + "murmansk.su", + "nalchik.su", + "nov.su", + "obninsk.su", + "penza.su", + "pokrovsk.su", + "sochi.su", + "spb.su", + "togliatti.su", + "troitsk.su", + "tula.su", + "tuva.su", + "vladikavkaz.su", + "vladimir.su", + "vologda.su", + "sv", + "com.sv", + "edu.sv", + "gob.sv", + "org.sv", + "red.sv", + "sx", + "gov.sx", + "sy", + "edu.sy", + "gov.sy", + "net.sy", + "mil.sy", + "com.sy", + "org.sy", + "sz", + "co.sz", + "ac.sz", + "org.sz", + "tc", + "td", + "tel", + "tf", + "tg", + "th", + "ac.th", + "co.th", + "go.th", + "in.th", + "mi.th", + "net.th", + "or.th", + "tj", + "ac.tj", + "biz.tj", + "co.tj", + "com.tj", + "edu.tj", + "go.tj", + "gov.tj", + "int.tj", + "mil.tj", + "name.tj", + "net.tj", + "nic.tj", + "org.tj", + "test.tj", + "web.tj", + "tk", + "tl", + "gov.tl", + "tm", + "com.tm", + "co.tm", + "org.tm", + "net.tm", + "nom.tm", + "gov.tm", + "mil.tm", + "edu.tm", + "tn", + "com.tn", + "ens.tn", + "fin.tn", + "gov.tn", + "ind.tn", + "intl.tn", + "nat.tn", + "net.tn", + "org.tn", + "info.tn", + "perso.tn", + "tourism.tn", + "edunet.tn", + "rnrt.tn", + "rns.tn", + "rnu.tn", + "mincom.tn", + "agrinet.tn", + "defense.tn", + "turen.tn", + "to", + "com.to", + "gov.to", + "net.to", + "org.to", + "edu.to", + "mil.to", + "tr", + "com.tr", + "info.tr", + "biz.tr", + "net.tr", + "org.tr", + "web.tr", + "gen.tr", + "tv.tr", + "av.tr", + "dr.tr", + "bbs.tr", + "name.tr", + "tel.tr", + "gov.tr", + "bel.tr", + "pol.tr", + "mil.tr", + "k12.tr", + "edu.tr", + "kep.tr", + "nc.tr", + "gov.nc.tr", + "travel", + "tt", + "co.tt", + "com.tt", + "org.tt", + "net.tt", + "biz.tt", + "info.tt", + "pro.tt", + "int.tt", + "coop.tt", + "jobs.tt", + "mobi.tt", + "travel.tt", + "museum.tt", + "aero.tt", + "name.tt", + "gov.tt", + "edu.tt", + "tv", + "tw", + "edu.tw", + "gov.tw", + "mil.tw", + "com.tw", + "net.tw", + "org.tw", + "idv.tw", + "game.tw", + "ebiz.tw", + "club.tw", + "xn--zf0ao64a.tw", + "xn--uc0atv.tw", + "xn--czrw28b.tw", + "tz", + "ac.tz", + "co.tz", + "go.tz", + "hotel.tz", + "info.tz", + "me.tz", + "mil.tz", + "mobi.tz", + "ne.tz", + "or.tz", + "sc.tz", + "tv.tz", + "ua", + "com.ua", + "edu.ua", + "gov.ua", + "in.ua", + "net.ua", + "org.ua", + "cherkassy.ua", + "cherkasy.ua", + "chernigov.ua", + "chernihiv.ua", + "chernivtsi.ua", + "chernovtsy.ua", + "ck.ua", + "cn.ua", + "cr.ua", + "crimea.ua", + "cv.ua", + "dn.ua", + "dnepropetrovsk.ua", + "dnipropetrovsk.ua", + "dominic.ua", + "donetsk.ua", + "dp.ua", + "if.ua", + "ivano-frankivsk.ua", + "kh.ua", + "kharkiv.ua", + "kharkov.ua", + "kherson.ua", + "khmelnitskiy.ua", + "khmelnytskyi.ua", + "kiev.ua", + "kirovograd.ua", + "km.ua", + "kr.ua", + "krym.ua", + "ks.ua", + "kv.ua", + "kyiv.ua", + "lg.ua", + "lt.ua", + "lugansk.ua", + "lutsk.ua", + "lv.ua", + "lviv.ua", + "mk.ua", + "mykolaiv.ua", + "nikolaev.ua", + "od.ua", + "odesa.ua", + "odessa.ua", + "pl.ua", + "poltava.ua", + "rivne.ua", + "rovno.ua", + "rv.ua", + "sb.ua", + "sebastopol.ua", + "sevastopol.ua", + "sm.ua", + "sumy.ua", + "te.ua", + "ternopil.ua", + "uz.ua", + "uzhgorod.ua", + "vinnica.ua", + "vinnytsia.ua", + "vn.ua", + "volyn.ua", + "yalta.ua", + "zaporizhzhe.ua", + "zaporizhzhia.ua", + "zhitomir.ua", + "zhytomyr.ua", + "zp.ua", + "zt.ua", + "ug", + "co.ug", + "or.ug", + "ac.ug", + "sc.ug", + "go.ug", + "ne.ug", + "com.ug", + "org.ug", + "uk", + "ac.uk", + "co.uk", + "gov.uk", + "ltd.uk", + "me.uk", + "net.uk", + "nhs.uk", + "org.uk", + "plc.uk", + "police.uk", + "*.sch.uk", + "us", + "dni.us", + "fed.us", + "isa.us", + "kids.us", + "nsn.us", + "ak.us", + "al.us", + "ar.us", + "as.us", + "az.us", + "ca.us", + "co.us", + "ct.us", + "dc.us", + "de.us", + "fl.us", + "ga.us", + "gu.us", + "hi.us", + "ia.us", + "id.us", + "il.us", + "in.us", + "ks.us", + "ky.us", + "la.us", + "ma.us", + "md.us", + "me.us", + "mi.us", + "mn.us", + "mo.us", + "ms.us", + "mt.us", + "nc.us", + "nd.us", + "ne.us", + "nh.us", + "nj.us", + "nm.us", + "nv.us", + "ny.us", + "oh.us", + "ok.us", + "or.us", + "pa.us", + "pr.us", + "ri.us", + "sc.us", + "sd.us", + "tn.us", + "tx.us", + "ut.us", + "vi.us", + "vt.us", + "va.us", + "wa.us", + "wi.us", + "wv.us", + "wy.us", + "k12.ak.us", + "k12.al.us", + "k12.ar.us", + "k12.as.us", + "k12.az.us", + "k12.ca.us", + "k12.co.us", + "k12.ct.us", + "k12.dc.us", + "k12.de.us", + "k12.fl.us", + "k12.ga.us", + "k12.gu.us", + "k12.ia.us", + "k12.id.us", + "k12.il.us", + "k12.in.us", + "k12.ks.us", + "k12.ky.us", + "k12.la.us", + "k12.ma.us", + "k12.md.us", + "k12.me.us", + "k12.mi.us", + "k12.mn.us", + "k12.mo.us", + "k12.ms.us", + "k12.mt.us", + "k12.nc.us", + "k12.ne.us", + "k12.nh.us", + "k12.nj.us", + "k12.nm.us", + "k12.nv.us", + "k12.ny.us", + "k12.oh.us", + "k12.ok.us", + "k12.or.us", + "k12.pa.us", + "k12.pr.us", + "k12.ri.us", + "k12.sc.us", + "k12.tn.us", + "k12.tx.us", + "k12.ut.us", + "k12.vi.us", + "k12.vt.us", + "k12.va.us", + "k12.wa.us", + "k12.wi.us", + "k12.wy.us", + "cc.ak.us", + "cc.al.us", + "cc.ar.us", + "cc.as.us", + "cc.az.us", + "cc.ca.us", + "cc.co.us", + "cc.ct.us", + "cc.dc.us", + "cc.de.us", + "cc.fl.us", + "cc.ga.us", + "cc.gu.us", + "cc.hi.us", + "cc.ia.us", + "cc.id.us", + "cc.il.us", + "cc.in.us", + "cc.ks.us", + "cc.ky.us", + "cc.la.us", + "cc.ma.us", + "cc.md.us", + "cc.me.us", + "cc.mi.us", + "cc.mn.us", + "cc.mo.us", + "cc.ms.us", + "cc.mt.us", + "cc.nc.us", + "cc.nd.us", + "cc.ne.us", + "cc.nh.us", + "cc.nj.us", + "cc.nm.us", + "cc.nv.us", + "cc.ny.us", + "cc.oh.us", + "cc.ok.us", + "cc.or.us", + "cc.pa.us", + "cc.pr.us", + "cc.ri.us", + "cc.sc.us", + "cc.sd.us", + "cc.tn.us", + "cc.tx.us", + "cc.ut.us", + "cc.vi.us", + "cc.vt.us", + "cc.va.us", + "cc.wa.us", + "cc.wi.us", + "cc.wv.us", + "cc.wy.us", + "lib.ak.us", + "lib.al.us", + "lib.ar.us", + "lib.as.us", + "lib.az.us", + "lib.ca.us", + "lib.co.us", + "lib.ct.us", + "lib.dc.us", + "lib.fl.us", + "lib.ga.us", + "lib.gu.us", + "lib.hi.us", + "lib.ia.us", + "lib.id.us", + "lib.il.us", + "lib.in.us", + "lib.ks.us", + "lib.ky.us", + "lib.la.us", + "lib.ma.us", + "lib.md.us", + "lib.me.us", + "lib.mi.us", + "lib.mn.us", + "lib.mo.us", + "lib.ms.us", + "lib.mt.us", + "lib.nc.us", + "lib.nd.us", + "lib.ne.us", + "lib.nh.us", + "lib.nj.us", + "lib.nm.us", + "lib.nv.us", + "lib.ny.us", + "lib.oh.us", + "lib.ok.us", + "lib.or.us", + "lib.pa.us", + "lib.pr.us", + "lib.ri.us", + "lib.sc.us", + "lib.sd.us", + "lib.tn.us", + "lib.tx.us", + "lib.ut.us", + "lib.vi.us", + "lib.vt.us", + "lib.va.us", + "lib.wa.us", + "lib.wi.us", + "lib.wy.us", + "pvt.k12.ma.us", + "chtr.k12.ma.us", + "paroch.k12.ma.us", + "uy", + "com.uy", + "edu.uy", + "gub.uy", + "mil.uy", + "net.uy", + "org.uy", + "uz", + "co.uz", + "com.uz", + "net.uz", + "org.uz", + "va", + "vc", + "com.vc", + "net.vc", + "org.vc", + "gov.vc", + "mil.vc", + "edu.vc", + "ve", + "arts.ve", + "co.ve", + "com.ve", + "e12.ve", + "edu.ve", + "firm.ve", + "gob.ve", + "gov.ve", + "info.ve", + "int.ve", + "mil.ve", + "net.ve", + "org.ve", + "rec.ve", + "store.ve", + "tec.ve", + "web.ve", + "vg", + "vi", + "co.vi", + "com.vi", + "k12.vi", + "net.vi", + "org.vi", + "vn", + "com.vn", + "net.vn", + "org.vn", + "edu.vn", + "gov.vn", + "int.vn", + "ac.vn", + "biz.vn", + "info.vn", + "name.vn", + "pro.vn", + "health.vn", + "vu", + "com.vu", + "edu.vu", + "net.vu", + "org.vu", + "wf", + "ws", + "com.ws", + "net.ws", + "org.ws", + "gov.ws", + "edu.ws", + "yt", + "xn--mgbaam7a8h", + "xn--y9a3aq", + "xn--54b7fta0cc", + "xn--90ais", + "xn--fiqs8s", + "xn--fiqz9s", + "xn--lgbbat1ad8j", + "xn--wgbh1c", + "xn--e1a4c", + "xn--node", + "xn--qxam", + "xn--j6w193g", + "xn--h2brj9c", + "xn--mgbbh1a71e", + "xn--fpcrj9c3d", + "xn--gecrj9c", + "xn--s9brj9c", + "xn--45brj9c", + "xn--xkc2dl3a5ee0h", + "xn--mgba3a4f16a", + "xn--mgba3a4fra", + "xn--mgbtx2b", + "xn--mgbayh7gpa", + "xn--3e0b707e", + "xn--80ao21a", + "xn--fzc2c9e2c", + "xn--xkc2al3hye2a", + "xn--mgbc0a9azcg", + "xn--d1alf", + "xn--l1acc", + "xn--mix891f", + "xn--mix082f", + "xn--mgbx4cd0ab", + "xn--mgb9awbf", + "xn--mgbai9azgqp6j", + "xn--mgbai9a5eva00b", + "xn--ygbi2ammx", + "xn--90a3ac", + "xn--o1ac.xn--90a3ac", + "xn--c1avg.xn--90a3ac", + "xn--90azh.xn--90a3ac", + "xn--d1at.xn--90a3ac", + "xn--o1ach.xn--90a3ac", + "xn--80au.xn--90a3ac", + "xn--p1ai", + "xn--wgbl6a", + "xn--mgberp4a5d4ar", + "xn--mgberp4a5d4a87g", + "xn--mgbqly7c0a67fbc", + "xn--mgbqly7cvafr", + "xn--mgbpl2fh", + "xn--yfro4i67o", + "xn--clchc0ea0b2g2a9gcd", + "xn--ogbpf8fl", + "xn--mgbtf8fl", + "xn--o3cw4h", + "xn--pgbs0dh", + "xn--kpry57d", + "xn--kprw13d", + "xn--nnx388a", + "xn--j1amh", + "xn--mgb2ddes", + "xxx", + "*.ye", + "ac.za", + "agric.za", + "alt.za", + "co.za", + "edu.za", + "gov.za", + "grondar.za", + "law.za", + "mil.za", + "net.za", + "ngo.za", + "nis.za", + "nom.za", + "org.za", + "school.za", + "tm.za", + "web.za", + "zm", + "ac.zm", + "biz.zm", + "co.zm", + "com.zm", + "edu.zm", + "gov.zm", + "info.zm", + "mil.zm", + "net.zm", + "org.zm", + "sch.zm", + "*.zw", + "aaa", + "aarp", + "abarth", + "abb", + "abbott", + "abbvie", + "abc", + "able", + "abogado", + "abudhabi", + "academy", + "accenture", + "accountant", + "accountants", + "aco", + "active", + "actor", + "adac", + "ads", + "adult", + "aeg", + "aetna", + "afamilycompany", + "afl", + "africa", + "agakhan", + "agency", + "aig", + "aigo", + "airbus", + "airforce", + "airtel", + "akdn", + "alfaromeo", + "alibaba", + "alipay", + "allfinanz", + "allstate", + "ally", + "alsace", + "alstom", + "americanexpress", + "americanfamily", + "amex", + "amfam", + "amica", + "amsterdam", + "analytics", + "android", + "anquan", + "anz", + "aol", + "apartments", + "app", + "apple", + "aquarelle", + "arab", + "aramco", + "archi", + "army", + "art", + "arte", + "asda", + "associates", + "athleta", + "attorney", + "auction", + "audi", + "audible", + "audio", + "auspost", + "author", + "auto", + "autos", + "avianca", + "aws", + "axa", + "azure", + "baby", + "baidu", + "banamex", + "bananarepublic", + "band", + "bank", + "bar", + "barcelona", + "barclaycard", + "barclays", + "barefoot", + "bargains", + "baseball", + "basketball", + "bauhaus", + "bayern", + "bbc", + "bbt", + "bbva", + "bcg", + "bcn", + "beats", + "beauty", + "beer", + "bentley", + "berlin", + "best", + "bestbuy", + "bet", + "bharti", + "bible", + "bid", + "bike", + "bing", + "bingo", + "bio", + "black", + "blackfriday", + "blanco", + "blockbuster", + "blog", + "bloomberg", + "blue", + "bms", + "bmw", + "bnl", + "bnpparibas", + "boats", + "boehringer", + "bofa", + "bom", + "bond", + "boo", + "book", + "booking", + "boots", + "bosch", + "bostik", + "boston", + "bot", + "boutique", + "box", + "bradesco", + "bridgestone", + "broadway", + "broker", + "brother", + "brussels", + "budapest", + "bugatti", + "build", + "builders", + "business", + "buy", + "buzz", + "bzh", + "cab", + "cafe", + "cal", + "call", + "calvinklein", + "cam", + "camera", + "camp", + "cancerresearch", + "canon", + "capetown", + "capital", + "capitalone", + "car", + "caravan", + "cards", + "care", + "career", + "careers", + "cars", + "cartier", + "casa", + "case", + "caseih", + "cash", + "casino", + "catering", + "catholic", + "cba", + "cbn", + "cbre", + "cbs", + "ceb", + "center", + "ceo", + "cern", + "cfa", + "cfd", + "chanel", + "channel", + "chase", + "chat", + "cheap", + "chintai", + "chloe", + "christmas", + "chrome", + "chrysler", + "church", + "cipriani", + "circle", + "cisco", + "citadel", + "citi", + "citic", + "city", + "cityeats", + "claims", + "cleaning", + "click", + "clinic", + "clinique", + "clothing", + "cloud", + "club", + "clubmed", + "coach", + "codes", + "coffee", + "college", + "cologne", + "comcast", + "commbank", + "community", + "company", + "compare", + "computer", + "comsec", + "condos", + "construction", + "consulting", + "contact", + "contractors", + "cooking", + "cookingchannel", + "cool", + "corsica", + "country", + "coupon", + "coupons", + "courses", + "credit", + "creditcard", + "creditunion", + "cricket", + "crown", + "crs", + "cruise", + "cruises", + "csc", + "cuisinella", + "cymru", + "cyou", + "dabur", + "dad", + "dance", + "data", + "date", + "dating", + "datsun", + "day", + "dclk", + "dds", + "deal", + "dealer", + "deals", + "degree", + "delivery", + "dell", + "deloitte", + "delta", + "democrat", + "dental", + "dentist", + "desi", + "design", + "dev", + "dhl", + "diamonds", + "diet", + "digital", + "direct", + "directory", + "discount", + "discover", + "dish", + "diy", + "dnp", + "docs", + "doctor", + "dodge", + "dog", + "doha", + "domains", + "dot", + "download", + "drive", + "dtv", + "dubai", + "duck", + "dunlop", + "duns", + "dupont", + "durban", + "dvag", + "dvr", + "dwg", + "earth", + "eat", + "eco", + "edeka", + "education", + "email", + "emerck", + "energy", + "engineer", + "engineering", + "enterprises", + "epost", + "epson", + "equipment", + "ericsson", + "erni", + "esq", + "estate", + "esurance", + "etisalat", + "eurovision", + "eus", + "events", + "everbank", + "exchange", + "expert", + "exposed", + "express", + "extraspace", + "fage", + "fail", + "fairwinds", + "faith", + "family", + "fan", + "fans", + "farm", + "farmers", + "fashion", + "fast", + "fedex", + "feedback", + "ferrari", + "ferrero", + "fiat", + "fidelity", + "fido", + "film", + "final", + "finance", + "financial", + "fire", + "firestone", + "firmdale", + "fish", + "fishing", + "fit", + "fitness", + "flickr", + "flights", + "flir", + "florist", + "flowers", + "fly", + "foo", + "food", + "foodnetwork", + "football", + "ford", + "forex", + "forsale", + "forum", + "foundation", + "fox", + "free", + "fresenius", + "frl", + "frogans", + "frontdoor", + "frontier", + "ftr", + "fujitsu", + "fujixerox", + "fun", + "fund", + "furniture", + "futbol", + "fyi", + "gal", + "gallery", + "gallo", + "gallup", + "game", + "games", + "gap", + "garden", + "gbiz", + "gdn", + "gea", + "gent", + "genting", + "george", + "ggee", + "gift", + "gifts", + "gives", + "giving", + "glade", + "glass", + "gle", + "global", + "globo", + "gmail", + "gmbh", + "gmo", + "gmx", + "godaddy", + "gold", + "goldpoint", + "golf", + "goo", + "goodhands", + "goodyear", + "goog", + "google", + "gop", + "got", + "grainger", + "graphics", + "gratis", + "green", + "gripe", + "grocery", + "group", + "guardian", + "gucci", + "guge", + "guide", + "guitars", + "guru", + "hair", + "hamburg", + "hangout", + "haus", + "hbo", + "hdfc", + "hdfcbank", + "health", + "healthcare", + "help", + "helsinki", + "here", + "hermes", + "hgtv", + "hiphop", + "hisamitsu", + "hitachi", + "hiv", + "hkt", + "hockey", + "holdings", + "holiday", + "homedepot", + "homegoods", + "homes", + "homesense", + "honda", + "honeywell", + "horse", + "hospital", + "host", + "hosting", + "hot", + "hoteles", + "hotels", + "hotmail", + "house", + "how", + "hsbc", + "htc", + "hughes", + "hyatt", + "hyundai", + "ibm", + "icbc", + "ice", + "icu", + "ieee", + "ifm", + "iinet", + "ikano", + "imamat", + "imdb", + "immo", + "immobilien", + "industries", + "infiniti", + "ing", + "ink", + "institute", + "insurance", + "insure", + "intel", + "international", + "intuit", + "investments", + "ipiranga", + "irish", + "iselect", + "ismaili", + "ist", + "istanbul", + "itau", + "itv", + "iveco", + "iwc", + "jaguar", + "java", + "jcb", + "jcp", + "jeep", + "jetzt", + "jewelry", + "jio", + "jlc", + "jll", + "jmp", + "jnj", + "joburg", + "jot", + "joy", + "jpmorgan", + "jprs", + "juegos", + "juniper", + "kaufen", + "kddi", + "kerryhotels", + "kerrylogistics", + "kerryproperties", + "kfh", + "kia", + "kim", + "kinder", + "kindle", + "kitchen", + "kiwi", + "koeln", + "komatsu", + "kosher", + "kpmg", + "kpn", + "krd", + "kred", + "kuokgroup", + "kyoto", + "lacaixa", + "ladbrokes", + "lamborghini", + "lamer", + "lancaster", + "lancia", + "lancome", + "land", + "landrover", + "lanxess", + "lasalle", + "lat", + "latino", + "latrobe", + "law", + "lawyer", + "lds", + "lease", + "leclerc", + "lefrak", + "legal", + "lego", + "lexus", + "lgbt", + "liaison", + "lidl", + "life", + "lifeinsurance", + "lifestyle", + "lighting", + "like", + "lilly", + "limited", + "limo", + "lincoln", + "linde", + "link", + "lipsy", + "live", + "living", + "lixil", + "loan", + "loans", + "locker", + "locus", + "loft", + "lol", + "london", + "lotte", + "lotto", + "love", + "lpl", + "lplfinancial", + "ltd", + "ltda", + "lundbeck", + "lupin", + "luxe", + "luxury", + "macys", + "madrid", + "maif", + "maison", + "makeup", + "man", + "management", + "mango", + "map", + "market", + "marketing", + "markets", + "marriott", + "marshalls", + "maserati", + "mattel", + "mba", + "mcd", + "mcdonalds", + "mckinsey", + "med", + "media", + "meet", + "melbourne", + "meme", + "memorial", + "men", + "menu", + "meo", + "merckmsd", + "metlife", + "miami", + "microsoft", + "mini", + "mint", + "mit", + "mitsubishi", + "mlb", + "mls", + "mma", + "mobile", + "mobily", + "moda", + "moe", + "moi", + "mom", + "monash", + "money", + "monster", + "montblanc", + "mopar", + "mormon", + "mortgage", + "moscow", + "moto", + "motorcycles", + "mov", + "movie", + "movistar", + "msd", + "mtn", + "mtpc", + "mtr", + "mutual", + "mutuelle", + "nab", + "nadex", + "nagoya", + "nationwide", + "natura", + "navy", + "nba", + "nec", + "netbank", + "netflix", + "network", + "neustar", + "new", + "newholland", + "news", + "next", + "nextdirect", + "nexus", + "nfl", + "ngo", + "nhk", + "nico", + "nike", + "nikon", + "ninja", + "nissan", + "nissay", + "nokia", + "northwesternmutual", + "norton", + "now", + "nowruz", + "nowtv", + "nra", + "nrw", + "ntt", + "nyc", + "obi", + "observer", + "off", + "office", + "okinawa", + "olayan", + "olayangroup", + "oldnavy", + "ollo", + "omega", + "one", + "ong", + "onl", + "online", + "onyourside", + "ooo", + "open", + "oracle", + "orange", + "organic", + "orientexpress", + "origins", + "osaka", + "otsuka", + "ott", + "ovh", + "page", + "pamperedchef", + "panasonic", + "panerai", + "paris", + "pars", + "partners", + "parts", + "party", + "passagens", + "pay", + "pccw", + "pet", + "pfizer", + "pharmacy", + "phd", + "philips", + "phone", + "photo", + "photography", + "photos", + "physio", + "piaget", + "pics", + "pictet", + "pictures", + "pid", + "pin", + "ping", + "pink", + "pioneer", + "pizza", + "place", + "play", + "playstation", + "plumbing", + "plus", + "pnc", + "pohl", + "poker", + "politie", + "porn", + "pramerica", + "praxi", + "press", + "prime", + "prod", + "productions", + "prof", + "progressive", + "promo", + "properties", + "property", + "protection", + "pru", + "prudential", + "pub", + "pwc", + "qpon", + "quebec", + "quest", + "qvc", + "racing", + "radio", + "raid", + "read", + "realestate", + "realtor", + "realty", + "recipes", + "red", + "redstone", + "redumbrella", + "rehab", + "reise", + "reisen", + "reit", + "reliance", + "ren", + "rent", + "rentals", + "repair", + "report", + "republican", + "rest", + "restaurant", + "review", + "reviews", + "rexroth", + "rich", + "richardli", + "ricoh", + "rightathome", + "ril", + "rio", + "rip", + "rmit", + "rocher", + "rocks", + "rodeo", + "rogers", + "room", + "rsvp", + "ruhr", + "run", + "rwe", + "ryukyu", + "saarland", + "safe", + "safety", + "sakura", + "sale", + "salon", + "samsclub", + "samsung", + "sandvik", + "sandvikcoromant", + "sanofi", + "sap", + "sapo", + "sarl", + "sas", + "save", + "saxo", + "sbi", + "sbs", + "sca", + "scb", + "schaeffler", + "schmidt", + "scholarships", + "school", + "schule", + "schwarz", + "science", + "scjohnson", + "scor", + "scot", + "search", + "seat", + "secure", + "security", + "seek", + "select", + "sener", + "services", + "ses", + "seven", + "sew", + "sex", + "sexy", + "sfr", + "shangrila", + "sharp", + "shaw", + "shell", + "shia", + "shiksha", + "shoes", + "shop", + "shopping", + "shouji", + "show", + "showtime", + "shriram", + "silk", + "sina", + "singles", + "site", + "ski", + "skin", + "sky", + "skype", + "sling", + "smart", + "smile", + "sncf", + "soccer", + "social", + "softbank", + "software", + "sohu", + "solar", + "solutions", + "song", + "sony", + "soy", + "space", + "spiegel", + "spot", + "spreadbetting", + "srl", + "srt", + "stada", + "staples", + "star", + "starhub", + "statebank", + "statefarm", + "statoil", + "stc", + "stcgroup", + "stockholm", + "storage", + "store", + "stream", + "studio", + "study", + "style", + "sucks", + "supplies", + "supply", + "support", + "surf", + "surgery", + "suzuki", + "swatch", + "swiftcover", + "swiss", + "sydney", + "symantec", + "systems", + "tab", + "taipei", + "talk", + "taobao", + "target", + "tatamotors", + "tatar", + "tattoo", + "tax", + "taxi", + "tci", + "tdk", + "team", + "tech", + "technology", + "telecity", + "telefonica", + "temasek", + "tennis", + "teva", + "thd", + "theater", + "theatre", + "theguardian", + "tiaa", + "tickets", + "tienda", + "tiffany", + "tips", + "tires", + "tirol", + "tjmaxx", + "tjx", + "tkmaxx", + "tmall", + "today", + "tokyo", + "tools", + "top", + "toray", + "toshiba", + "total", + "tours", + "town", + "toyota", + "toys", + "trade", + "trading", + "training", + "travelchannel", + "travelers", + "travelersinsurance", + "trust", + "trv", + "tube", + "tui", + "tunes", + "tushu", + "tvs", + "ubank", + "ubs", + "uconnect", + "unicom", + "university", + "uno", + "uol", + "ups", + "vacations", + "vana", + "vanguard", + "vegas", + "ventures", + "verisign", + "versicherung", + "vet", + "viajes", + "video", + "vig", + "viking", + "villas", + "vin", + "vip", + "virgin", + "visa", + "vision", + "vista", + "vistaprint", + "viva", + "vivo", + "vlaanderen", + "vodka", + "volkswagen", + "volvo", + "vote", + "voting", + "voto", + "voyage", + "vuelos", + "wales", + "walmart", + "walter", + "wang", + "wanggou", + "warman", + "watch", + "watches", + "weather", + "weatherchannel", + "webcam", + "weber", + "website", + "wed", + "wedding", + "weibo", + "weir", + "whoswho", + "wien", + "wiki", + "williamhill", + "win", + "windows", + "wine", + "winners", + "wme", + "wolterskluwer", + "woodside", + "work", + "works", + "world", + "wow", + "wtc", + "wtf", + "xbox", + "xerox", + "xfinity", + "xihuan", + "xin", + "xn--11b4c3d", + "xn--1ck2e1b", + "xn--1qqw23a", + "xn--30rr7y", + "xn--3bst00m", + "xn--3ds443g", + "xn--3oq18vl8pn36a", + "xn--3pxu8k", + "xn--42c2d9a", + "xn--45q11c", + "xn--4gbrim", + "xn--4gq48lf9j", + "xn--55qw42g", + "xn--55qx5d", + "xn--5su34j936bgsg", + "xn--5tzm5g", + "xn--6frz82g", + "xn--6qq986b3xl", + "xn--80adxhks", + "xn--80aqecdr1a", + "xn--80asehdb", + "xn--80aswg", + "xn--8y0a063a", + "xn--9dbq2a", + "xn--9et52u", + "xn--9krt00a", + "xn--b4w605ferd", + "xn--bck1b9a5dre4c", + "xn--c1avg", + "xn--c2br7g", + "xn--cck2b3b", + "xn--cg4bki", + "xn--czr694b", + "xn--czrs0t", + "xn--czru2d", + "xn--d1acj3b", + "xn--eckvdtc9d", + "xn--efvy88h", + "xn--estv75g", + "xn--fct429k", + "xn--fhbei", + "xn--fiq228c5hs", + "xn--fiq64b", + "xn--fjq720a", + "xn--flw351e", + "xn--fzys8d69uvgm", + "xn--g2xx48c", + "xn--gckr3f0f", + "xn--gk3at1e", + "xn--hxt814e", + "xn--i1b6b1a6a2e", + "xn--imr513n", + "xn--io0a7i", + "xn--j1aef", + "xn--jlq61u9w7b", + "xn--jvr189m", + "xn--kcrx77d1x4a", + "xn--kpu716f", + "xn--kput3i", + "xn--mgba3a3ejt", + "xn--mgba7c0bbn0a", + "xn--mgbaakc7dvf", + "xn--mgbab2bd", + "xn--mgbb9fbpob", + "xn--mgbca7dzdo", + "xn--mgbi4ecexp", + "xn--mgbt3dhd", + "xn--mk1bu44c", + "xn--mxtq1m", + "xn--ngbc5azd", + "xn--ngbe9e0a", + "xn--ngbrx", + "xn--nqv7f", + "xn--nqv7fs00ema", + "xn--nyqy26a", + "xn--p1acf", + "xn--pbt977c", + "xn--pssy2u", + "xn--q9jyb4c", + "xn--qcka1pmc", + "xn--rhqv96g", + "xn--rovu88b", + "xn--ses554g", + "xn--t60b56a", + "xn--tckwe", + "xn--tiq49xqyj", + "xn--unup4y", + "xn--vermgensberater-ctb", + "xn--vermgensberatung-pwb", + "xn--vhquv", + "xn--vuq861b", + "xn--w4r85el8fhu5dnra", + "xn--w4rs40l", + "xn--xhq521b", + "xn--zfr164b", + "xperia", + "xyz", + "yachts", + "yahoo", + "yamaxun", + "yandex", + "yodobashi", + "yoga", + "yokohama", + "you", + "youtube", + "yun", + "zappos", + "zara", + "zero", + "zip", + "zippo", + "zone", + "zuerich", + "beep.pl", + "*.compute.estate", + "*.alces.network", + "*.alwaysdata.net", + "cloudfront.net", + "*.compute.amazonaws.com", + "*.compute-1.amazonaws.com", + "*.compute.amazonaws.com.cn", + "us-east-1.amazonaws.com", + "elasticbeanstalk.cn-north-1.amazonaws.com.cn", + "*.elasticbeanstalk.com", + "*.elb.amazonaws.com", + "*.elb.amazonaws.com.cn", + "*.s3.amazonaws.com", + "s3-ap-northeast-1.amazonaws.com", + "s3-ap-northeast-2.amazonaws.com", + "s3-ap-south-1.amazonaws.com", + "s3-ap-southeast-1.amazonaws.com", + "s3-ap-southeast-2.amazonaws.com", + "s3-ca-central-1.amazonaws.com", + "s3-eu-central-1.amazonaws.com", + "s3-eu-west-1.amazonaws.com", + "s3-external-1.amazonaws.com", + "s3-fips-us-gov-west-1.amazonaws.com", + "s3-sa-east-1.amazonaws.com", + "s3-us-gov-west-1.amazonaws.com", + "s3-us-east-2.amazonaws.com", + "s3-us-west-1.amazonaws.com", + "s3-us-west-2.amazonaws.com", + "s3.ap-northeast-2.amazonaws.com", + "s3.ap-south-1.amazonaws.com", + "s3.cn-north-1.amazonaws.com.cn", + "s3.ca-central-1.amazonaws.com", + "s3.eu-central-1.amazonaws.com", + "s3.us-east-2.amazonaws.com", + "s3.dualstack.ap-northeast-1.amazonaws.com", + "s3.dualstack.ap-northeast-2.amazonaws.com", + "s3.dualstack.ap-south-1.amazonaws.com", + "s3.dualstack.ap-southeast-1.amazonaws.com", + "s3.dualstack.ap-southeast-2.amazonaws.com", + "s3.dualstack.ca-central-1.amazonaws.com", + "s3.dualstack.eu-central-1.amazonaws.com", + "s3.dualstack.eu-west-1.amazonaws.com", + "s3.dualstack.sa-east-1.amazonaws.com", + "s3.dualstack.us-east-1.amazonaws.com", + "s3.dualstack.us-east-2.amazonaws.com", + "s3-website-us-east-1.amazonaws.com", + "s3-website-us-west-1.amazonaws.com", + "s3-website-us-west-2.amazonaws.com", + "s3-website-ap-northeast-1.amazonaws.com", + "s3-website-ap-southeast-1.amazonaws.com", + "s3-website-ap-southeast-2.amazonaws.com", + "s3-website-eu-west-1.amazonaws.com", + "s3-website-sa-east-1.amazonaws.com", + "s3-website.ap-northeast-2.amazonaws.com", + "s3-website.ap-south-1.amazonaws.com", + "s3-website.ca-central-1.amazonaws.com", + "s3-website.eu-central-1.amazonaws.com", + "s3-website.us-east-2.amazonaws.com", + "t3l3p0rt.net", + "tele.amune.org", + "on-aptible.com", + "user.party.eus", + "pimienta.org", + "poivron.org", + "potager.org", + "sweetpepper.org", + "myasustor.com", + "myfritz.net", + "backplaneapp.io", + "betainabox.com", + "bnr.la", + "boxfuse.io", + "browsersafetymark.io", + "mycd.eu", + "ae.org", + "ar.com", + "br.com", + "cn.com", + "com.de", + "com.se", + "de.com", + "eu.com", + "gb.com", + "gb.net", + "hu.com", + "hu.net", + "jp.net", + "jpn.com", + "kr.com", + "mex.com", + "no.com", + "qc.com", + "ru.com", + "sa.com", + "se.com", + "se.net", + "uk.com", + "uk.net", + "us.com", + "uy.com", + "za.bz", + "za.com", + "africa.com", + "gr.com", + "in.net", + "us.org", + "co.com", + "c.la", + "certmgr.org", + "xenapponazure.com", + "virtueeldomein.nl", + "cloudcontrolled.com", + "cloudcontrolapp.com", + "co.ca", + "co.cz", + "c.cdn77.org", + "cdn77-ssl.net", + "r.cdn77.net", + "rsc.cdn77.org", + "ssl.origin.cdn77-secure.org", + "cloudns.asia", + "cloudns.biz", + "cloudns.club", + "cloudns.cc", + "cloudns.eu", + "cloudns.in", + "cloudns.info", + "cloudns.org", + "cloudns.pro", + "cloudns.pw", + "cloudns.us", + "co.nl", + "co.no", + "*.platform.sh", + "dyn.cosidns.de", + "dynamisches-dns.de", + "dnsupdater.de", + "internet-dns.de", + "l-o-g-i-n.de", + "dynamic-dns.info", + "feste-ip.net", + "knx-server.net", + "static-access.net", + "realm.cz", + "*.cryptonomic.net", + "cupcake.is", + "cyon.link", + "cyon.site", + "daplie.me", + "biz.dk", + "co.dk", + "firm.dk", + "reg.dk", + "store.dk", + "dedyn.io", + "dnshome.de", + "dreamhosters.com", + "mydrobo.com", + "drud.io", + "drud.us", + "duckdns.org", + "dy.fi", + "tunk.org", + "dyndns-at-home.com", + "dyndns-at-work.com", + "dyndns-blog.com", + "dyndns-free.com", + "dyndns-home.com", + "dyndns-ip.com", + "dyndns-mail.com", + "dyndns-office.com", + "dyndns-pics.com", + "dyndns-remote.com", + "dyndns-server.com", + "dyndns-web.com", + "dyndns-wiki.com", + "dyndns-work.com", + "dyndns.biz", + "dyndns.info", + "dyndns.org", + "dyndns.tv", + "at-band-camp.net", + "ath.cx", + "barrel-of-knowledge.info", + "barrell-of-knowledge.info", + "better-than.tv", + "blogdns.com", + "blogdns.net", + "blogdns.org", + "blogsite.org", + "boldlygoingnowhere.org", + "broke-it.net", + "buyshouses.net", + "cechire.com", + "dnsalias.com", + "dnsalias.net", + "dnsalias.org", + "dnsdojo.com", + "dnsdojo.net", + "dnsdojo.org", + "does-it.net", + "doesntexist.com", + "doesntexist.org", + "dontexist.com", + "dontexist.net", + "dontexist.org", + "doomdns.com", + "doomdns.org", + "dvrdns.org", + "dyn-o-saur.com", + "dynalias.com", + "dynalias.net", + "dynalias.org", + "dynathome.net", + "dyndns.ws", + "endofinternet.net", + "endofinternet.org", + "endoftheinternet.org", + "est-a-la-maison.com", + "est-a-la-masion.com", + "est-le-patron.com", + "est-mon-blogueur.com", + "for-better.biz", + "for-more.biz", + "for-our.info", + "for-some.biz", + "for-the.biz", + "forgot.her.name", + "forgot.his.name", + "from-ak.com", + "from-al.com", + "from-ar.com", + "from-az.net", + "from-ca.com", + "from-co.net", + "from-ct.com", + "from-dc.com", + "from-de.com", + "from-fl.com", + "from-ga.com", + "from-hi.com", + "from-ia.com", + "from-id.com", + "from-il.com", + "from-in.com", + "from-ks.com", + "from-ky.com", + "from-la.net", + "from-ma.com", + "from-md.com", + "from-me.org", + "from-mi.com", + "from-mn.com", + "from-mo.com", + "from-ms.com", + "from-mt.com", + "from-nc.com", + "from-nd.com", + "from-ne.com", + "from-nh.com", + "from-nj.com", + "from-nm.com", + "from-nv.com", + "from-ny.net", + "from-oh.com", + "from-ok.com", + "from-or.com", + "from-pa.com", + "from-pr.com", + "from-ri.com", + "from-sc.com", + "from-sd.com", + "from-tn.com", + "from-tx.com", + "from-ut.com", + "from-va.com", + "from-vt.com", + "from-wa.com", + "from-wi.com", + "from-wv.com", + "from-wy.com", + "ftpaccess.cc", + "fuettertdasnetz.de", + "game-host.org", + "game-server.cc", + "getmyip.com", + "gets-it.net", + "go.dyndns.org", + "gotdns.com", + "gotdns.org", + "groks-the.info", + "groks-this.info", + "ham-radio-op.net", + "here-for-more.info", + "hobby-site.com", + "hobby-site.org", + "home.dyndns.org", + "homedns.org", + "homeftp.net", + "homeftp.org", + "homeip.net", + "homelinux.com", + "homelinux.net", + "homelinux.org", + "homeunix.com", + "homeunix.net", + "homeunix.org", + "iamallama.com", + "in-the-band.net", + "is-a-anarchist.com", + "is-a-blogger.com", + "is-a-bookkeeper.com", + "is-a-bruinsfan.org", + "is-a-bulls-fan.com", + "is-a-candidate.org", + "is-a-caterer.com", + "is-a-celticsfan.org", + "is-a-chef.com", + "is-a-chef.net", + "is-a-chef.org", + "is-a-conservative.com", + "is-a-cpa.com", + "is-a-cubicle-slave.com", + "is-a-democrat.com", + "is-a-designer.com", + "is-a-doctor.com", + "is-a-financialadvisor.com", + "is-a-geek.com", + "is-a-geek.net", + "is-a-geek.org", + "is-a-green.com", + "is-a-guru.com", + "is-a-hard-worker.com", + "is-a-hunter.com", + "is-a-knight.org", + "is-a-landscaper.com", + "is-a-lawyer.com", + "is-a-liberal.com", + "is-a-libertarian.com", + "is-a-linux-user.org", + "is-a-llama.com", + "is-a-musician.com", + "is-a-nascarfan.com", + "is-a-nurse.com", + "is-a-painter.com", + "is-a-patsfan.org", + "is-a-personaltrainer.com", + "is-a-photographer.com", + "is-a-player.com", + "is-a-republican.com", + "is-a-rockstar.com", + "is-a-socialist.com", + "is-a-soxfan.org", + "is-a-student.com", + "is-a-teacher.com", + "is-a-techie.com", + "is-a-therapist.com", + "is-an-accountant.com", + "is-an-actor.com", + "is-an-actress.com", + "is-an-anarchist.com", + "is-an-artist.com", + "is-an-engineer.com", + "is-an-entertainer.com", + "is-by.us", + "is-certified.com", + "is-found.org", + "is-gone.com", + "is-into-anime.com", + "is-into-cars.com", + "is-into-cartoons.com", + "is-into-games.com", + "is-leet.com", + "is-lost.org", + "is-not-certified.com", + "is-saved.org", + "is-slick.com", + "is-uberleet.com", + "is-very-bad.org", + "is-very-evil.org", + "is-very-good.org", + "is-very-nice.org", + "is-very-sweet.org", + "is-with-theband.com", + "isa-geek.com", + "isa-geek.net", + "isa-geek.org", + "isa-hockeynut.com", + "issmarterthanyou.com", + "isteingeek.de", + "istmein.de", + "kicks-ass.net", + "kicks-ass.org", + "knowsitall.info", + "land-4-sale.us", + "lebtimnetz.de", + "leitungsen.de", + "likes-pie.com", + "likescandy.com", + "merseine.nu", + "mine.nu", + "misconfused.org", + "mypets.ws", + "myphotos.cc", + "neat-url.com", + "office-on-the.net", + "on-the-web.tv", + "podzone.net", + "podzone.org", + "readmyblog.org", + "saves-the-whales.com", + "scrapper-site.net", + "scrapping.cc", + "selfip.biz", + "selfip.com", + "selfip.info", + "selfip.net", + "selfip.org", + "sells-for-less.com", + "sells-for-u.com", + "sells-it.net", + "sellsyourhome.org", + "servebbs.com", + "servebbs.net", + "servebbs.org", + "serveftp.net", + "serveftp.org", + "servegame.org", + "shacknet.nu", + "simple-url.com", + "space-to-rent.com", + "stuff-4-sale.org", + "stuff-4-sale.us", + "teaches-yoga.com", + "thruhere.net", + "traeumtgerade.de", + "webhop.biz", + "webhop.info", + "webhop.net", + "webhop.org", + "worse-than.tv", + "writesthisblog.com", + "ddnss.de", + "dyn.ddnss.de", + "dyndns.ddnss.de", + "dyndns1.de", + "dyn-ip24.de", + "home-webserver.de", + "dyn.home-webserver.de", + "myhome-server.de", + "ddnss.org", + "dynv6.net", + "e4.cz", + "enonic.io", + "customer.enonic.io", + "eu.org", + "al.eu.org", + "asso.eu.org", + "at.eu.org", + "au.eu.org", + "be.eu.org", + "bg.eu.org", + "ca.eu.org", + "cd.eu.org", + "ch.eu.org", + "cn.eu.org", + "cy.eu.org", + "cz.eu.org", + "de.eu.org", + "dk.eu.org", + "edu.eu.org", + "ee.eu.org", + "es.eu.org", + "fi.eu.org", + "fr.eu.org", + "gr.eu.org", + "hr.eu.org", + "hu.eu.org", + "ie.eu.org", + "il.eu.org", + "in.eu.org", + "int.eu.org", + "is.eu.org", + "it.eu.org", + "jp.eu.org", + "kr.eu.org", + "lt.eu.org", + "lu.eu.org", + "lv.eu.org", + "mc.eu.org", + "me.eu.org", + "mk.eu.org", + "mt.eu.org", + "my.eu.org", + "net.eu.org", + "ng.eu.org", + "nl.eu.org", + "no.eu.org", + "nz.eu.org", + "paris.eu.org", + "pl.eu.org", + "pt.eu.org", + "q-a.eu.org", + "ro.eu.org", + "ru.eu.org", + "se.eu.org", + "si.eu.org", + "sk.eu.org", + "tr.eu.org", + "uk.eu.org", + "us.eu.org", + "eu-1.evennode.com", + "eu-2.evennode.com", + "us-1.evennode.com", + "us-2.evennode.com", + "apps.fbsbx.com", + "map.fastly.net", + "a.prod.fastly.net", + "global.prod.fastly.net", + "a.ssl.fastly.net", + "b.ssl.fastly.net", + "global.ssl.fastly.net", + "fastlylb.net", + "map.fastlylb.net", + "fhapp.xyz", + "firebaseapp.com", + "flynnhub.com", + "freebox-os.com", + "freeboxos.com", + "fbx-os.fr", + "fbxos.fr", + "freebox-os.fr", + "freeboxos.fr", + "myfusion.cloud", + "futurehosting.at", + "futuremailing.at", + "*.ex.ortsinfo.at", + "*.kunden.ortsinfo.at", + "*.statics.cloud", + "service.gov.uk", + "github.io", + "githubusercontent.com", + "githubcloud.com", + "*.api.githubcloud.com", + "*.ext.githubcloud.com", + "gist.githubcloud.com", + "*.githubcloudusercontent.com", + "gitlab.io", + "homeoffice.gov.uk", + "ro.im", + "shop.ro", + "goip.de", + "*.0emm.com", + "appspot.com", + "blogspot.ae", + "blogspot.al", + "blogspot.am", + "blogspot.ba", + "blogspot.be", + "blogspot.bg", + "blogspot.bj", + "blogspot.ca", + "blogspot.cf", + "blogspot.ch", + "blogspot.cl", + "blogspot.co.at", + "blogspot.co.id", + "blogspot.co.il", + "blogspot.co.ke", + "blogspot.co.nz", + "blogspot.co.uk", + "blogspot.co.za", + "blogspot.com", + "blogspot.com.ar", + "blogspot.com.au", + "blogspot.com.br", + "blogspot.com.by", + "blogspot.com.co", + "blogspot.com.cy", + "blogspot.com.ee", + "blogspot.com.eg", + "blogspot.com.es", + "blogspot.com.mt", + "blogspot.com.ng", + "blogspot.com.tr", + "blogspot.com.uy", + "blogspot.cv", + "blogspot.cz", + "blogspot.de", + "blogspot.dk", + "blogspot.fi", + "blogspot.fr", + "blogspot.gr", + "blogspot.hk", + "blogspot.hr", + "blogspot.hu", + "blogspot.ie", + "blogspot.in", + "blogspot.is", + "blogspot.it", + "blogspot.jp", + "blogspot.kr", + "blogspot.li", + "blogspot.lt", + "blogspot.lu", + "blogspot.md", + "blogspot.mk", + "blogspot.mr", + "blogspot.mx", + "blogspot.my", + "blogspot.nl", + "blogspot.no", + "blogspot.pe", + "blogspot.pt", + "blogspot.qa", + "blogspot.re", + "blogspot.ro", + "blogspot.rs", + "blogspot.ru", + "blogspot.se", + "blogspot.sg", + "blogspot.si", + "blogspot.sk", + "blogspot.sn", + "blogspot.td", + "blogspot.tw", + "blogspot.ug", + "blogspot.vn", + "cloudfunctions.net", + "codespot.com", + "googleapis.com", + "googlecode.com", + "pagespeedmobilizer.com", + "publishproxy.com", + "withgoogle.com", + "withyoutube.com", + "hashbang.sh", + "hasura-app.io", + "hepforge.org", + "herokuapp.com", + "herokussl.com", + "iki.fi", + "biz.at", + "info.at", + "ac.leg.br", + "al.leg.br", + "am.leg.br", + "ap.leg.br", + "ba.leg.br", + "ce.leg.br", + "df.leg.br", + "es.leg.br", + "go.leg.br", + "ma.leg.br", + "mg.leg.br", + "ms.leg.br", + "mt.leg.br", + "pa.leg.br", + "pb.leg.br", + "pe.leg.br", + "pi.leg.br", + "pr.leg.br", + "rj.leg.br", + "rn.leg.br", + "ro.leg.br", + "rr.leg.br", + "rs.leg.br", + "sc.leg.br", + "se.leg.br", + "sp.leg.br", + "to.leg.br", + "*.triton.zone", + "*.cns.joyent.com", + "js.org", + "keymachine.de", + "knightpoint.systems", + "co.krd", + "edu.krd", + "*.magentosite.cloud", + "meteorapp.com", + "eu.meteorapp.com", + "co.pl", + "azurewebsites.net", + "azure-mobile.net", + "cloudapp.net", + "bmoattachments.org", + "4u.com", + "ngrok.io", + "nfshost.com", + "nsupdate.info", + "nerdpol.ovh", + "blogsyte.com", + "brasilia.me", + "cable-modem.org", + "ciscofreak.com", + "collegefan.org", + "couchpotatofries.org", + "damnserver.com", + "ddns.me", + "ditchyourip.com", + "dnsfor.me", + "dnsiskinky.com", + "dvrcam.info", + "dynns.com", + "eating-organic.net", + "fantasyleague.cc", + "geekgalaxy.com", + "golffan.us", + "health-carereform.com", + "homesecuritymac.com", + "homesecuritypc.com", + "hopto.me", + "ilovecollege.info", + "loginto.me", + "mlbfan.org", + "mmafan.biz", + "myactivedirectory.com", + "mydissent.net", + "myeffect.net", + "mymediapc.net", + "mypsx.net", + "mysecuritycamera.com", + "mysecuritycamera.net", + "mysecuritycamera.org", + "net-freaks.com", + "nflfan.org", + "nhlfan.net", + "no-ip.ca", + "no-ip.co.uk", + "no-ip.net", + "noip.us", + "onthewifi.com", + "pgafan.net", + "point2this.com", + "pointto.us", + "privatizehealthinsurance.net", + "quicksytes.com", + "read-books.org", + "securitytactics.com", + "serveexchange.com", + "servehumour.com", + "servep2p.com", + "servesarcasm.com", + "stufftoread.com", + "ufcfan.org", + "unusualperson.com", + "workisboring.com", + "3utilities.com", + "bounceme.net", + "ddns.net", + "ddnsking.com", + "gotdns.ch", + "hopto.org", + "myftp.biz", + "myftp.org", + "myvnc.com", + "no-ip.biz", + "no-ip.info", + "no-ip.org", + "noip.me", + "redirectme.net", + "servebeer.com", + "serveblog.net", + "servecounterstrike.com", + "serveftp.com", + "servegame.com", + "servehalflife.com", + "servehttp.com", + "serveirc.com", + "serveminecraft.net", + "servemp3.com", + "servepics.com", + "servequake.com", + "sytes.net", + "webhop.me", + "zapto.org", + "nyc.mn", + "nid.io", + "opencraft.hosting", + "operaunite.com", + "outsystemscloud.com", + "ownprovider.com", + "oy.lc", + "pgfog.com", + "pagefrontapp.com", + "art.pl", + "gliwice.pl", + "krakow.pl", + "poznan.pl", + "wroc.pl", + "zakopane.pl", + "pantheonsite.io", + "gotpantheon.com", + "mypep.link", + "on-web.fr", + "xen.prgmr.com", + "priv.at", + "protonet.io", + "chirurgiens-dentistes-en-france.fr", + "qa2.com", + "dev-myqnapcloud.com", + "alpha-myqnapcloud.com", + "myqnapcloud.com", + "rackmaze.com", + "rackmaze.net", + "rhcloud.com", + "hzc.io", + "wellbeingzone.eu", + "ptplus.fit", + "wellbeingzone.co.uk", + "sandcats.io", + "logoip.de", + "logoip.com", + "firewall-gateway.com", + "firewall-gateway.de", + "my-gateway.de", + "my-router.de", + "spdns.de", + "spdns.eu", + "firewall-gateway.net", + "my-firewall.org", + "myfirewall.org", + "spdns.org", + "biz.ua", + "co.ua", + "pp.ua", + "shiftedit.io", + "myshopblocks.com", + "1kapp.com", + "appchizi.com", + "applinzi.com", + "sinaapp.com", + "vipsinaapp.com", + "bounty-full.com", + "alpha.bounty-full.com", + "beta.bounty-full.com", + "static.land", + "dev.static.land", + "sites.static.land", + "apps.lair.io", + "*.stolos.io", + "spacekit.io", + "stackspace.space", + "diskstation.me", + "dscloud.biz", + "dscloud.me", + "dscloud.mobi", + "dsmynas.com", + "dsmynas.net", + "dsmynas.org", + "familyds.com", + "familyds.net", + "familyds.org", + "i234.me", + "myds.me", + "synology.me", + "taifun-dns.de", + "gda.pl", + "gdansk.pl", + "gdynia.pl", + "med.pl", + "sopot.pl", + "bloxcms.com", + "townnews-staging.com", + "*.transurl.be", + "*.transurl.eu", + "*.transurl.nl", + "tuxfamily.org", + "dd-dns.de", + "diskstation.eu", + "diskstation.org", + "dray-dns.de", + "draydns.de", + "dyn-vpn.de", + "dynvpn.de", + "mein-vigor.de", + "my-vigor.de", + "my-wan.de", + "syno-ds.de", + "synology-diskstation.de", + "synology-ds.de", + "hk.com", + "hk.org", + "ltd.hk", + "inc.hk", + "lib.de.us", + "router.management", + "remotewd.com", + "wmflabs.org", + "yolasite.com", + "ybo.faith", + "yombo.me", + "homelink.one", + "ybo.party", + "ybo.review", + "ybo.science", + "ybo.trade", + "za.net", + "za.org", + "now.sh", + "cc.ua", + "inf.ua", + "ltd.ua", +} + +var nodeLabels = [...]string{ + "aaa", + "aarp", + "abarth", + "abb", + "abbott", + "abbvie", + "abc", + "able", + "abogado", + "abudhabi", + "ac", + "academy", + "accenture", + "accountant", + "accountants", + "aco", + "active", + "actor", + "ad", + "adac", + "ads", + "adult", + "ae", + "aeg", + "aero", + "aetna", + "af", + "afamilycompany", + "afl", + "africa", + "ag", + "agakhan", + "agency", + "ai", + "aig", + "aigo", + "airbus", + "airforce", + "airtel", + "akdn", + "al", + "alfaromeo", + "alibaba", + "alipay", + "allfinanz", + "allstate", + "ally", + "alsace", + "alstom", + "am", + "americanexpress", + "americanfamily", + "amex", + "amfam", + "amica", + "amsterdam", + "analytics", + "android", + "anquan", + "anz", + "ao", + "aol", + "apartments", + "app", + "apple", + "aq", + "aquarelle", + "ar", + "arab", + "aramco", + "archi", + "army", + "arpa", + "art", + "arte", + "as", + "asda", + "asia", + "associates", + "at", + "athleta", + "attorney", + "au", + "auction", + "audi", + "audible", + "audio", + "auspost", + "author", + "auto", + "autos", + "avianca", + "aw", + "aws", + "ax", + "axa", + "az", + "azure", + "ba", + "baby", + "baidu", + "banamex", + "bananarepublic", + "band", + "bank", + "bar", + "barcelona", + "barclaycard", + "barclays", + "barefoot", + "bargains", + "baseball", + "basketball", + "bauhaus", + "bayern", + "bb", + "bbc", + "bbt", + "bbva", + "bcg", + "bcn", + "bd", + "be", + "beats", + "beauty", + "beer", + "bentley", + "berlin", + "best", + "bestbuy", + "bet", + "bf", + "bg", + "bh", + "bharti", + "bi", + "bible", + "bid", + "bike", + "bing", + "bingo", + "bio", + "biz", + "bj", + "black", + "blackfriday", + "blanco", + "blockbuster", + "blog", + "bloomberg", + "blue", + "bm", + "bms", + "bmw", + "bn", + "bnl", + "bnpparibas", + "bo", + "boats", + "boehringer", + "bofa", + "bom", + "bond", + "boo", + "book", + "booking", + "boots", + "bosch", + "bostik", + "boston", + "bot", + "boutique", + "box", + "br", + "bradesco", + "bridgestone", + "broadway", + "broker", + "brother", + "brussels", + "bs", + "bt", + "budapest", + "bugatti", + "build", + "builders", + "business", + "buy", + "buzz", + "bv", + "bw", + "by", + "bz", + "bzh", + "ca", + "cab", + "cafe", + "cal", + "call", + "calvinklein", + "cam", + "camera", + "camp", + "cancerresearch", + "canon", + "capetown", + "capital", + "capitalone", + "car", + "caravan", + "cards", + "care", + "career", + "careers", + "cars", + "cartier", + "casa", + "case", + "caseih", + "cash", + "casino", + "cat", + "catering", + "catholic", + "cba", + "cbn", + "cbre", + "cbs", + "cc", + "cd", + "ceb", + "center", + "ceo", + "cern", + "cf", + "cfa", + "cfd", + "cg", + "ch", + "chanel", + "channel", + "chase", + "chat", + "cheap", + "chintai", + "chloe", + "christmas", + "chrome", + "chrysler", + "church", + "ci", + "cipriani", + "circle", + "cisco", + "citadel", + "citi", + "citic", + "city", + "cityeats", + "ck", + "cl", + "claims", + "cleaning", + "click", + "clinic", + "clinique", + "clothing", + "cloud", + "club", + "clubmed", + "cm", + "cn", + "co", + "coach", + "codes", + "coffee", + "college", + "cologne", + "com", + "comcast", + "commbank", + "community", + "company", + "compare", + "computer", + "comsec", + "condos", + "construction", + "consulting", + "contact", + "contractors", + "cooking", + "cookingchannel", + "cool", + "coop", + "corsica", + "country", + "coupon", + "coupons", + "courses", + "cr", + "credit", + "creditcard", + "creditunion", + "cricket", + "crown", + "crs", + "cruise", + "cruises", + "csc", + "cu", + "cuisinella", + "cv", + "cw", + "cx", + "cy", + "cymru", + "cyou", + "cz", + "dabur", + "dad", + "dance", + "data", + "date", + "dating", + "datsun", + "day", + "dclk", + "dds", + "de", + "deal", + "dealer", + "deals", + "degree", + "delivery", + "dell", + "deloitte", + "delta", + "democrat", + "dental", + "dentist", + "desi", + "design", + "dev", + "dhl", + "diamonds", + "diet", + "digital", + "direct", + "directory", + "discount", + "discover", + "dish", + "diy", + "dj", + "dk", + "dm", + "dnp", + "do", + "docs", + "doctor", + "dodge", + "dog", + "doha", + "domains", + "dot", + "download", + "drive", + "dtv", + "dubai", + "duck", + "dunlop", + "duns", + "dupont", + "durban", + "dvag", + "dvr", + "dwg", + "dz", + "earth", + "eat", + "ec", + "eco", + "edeka", + "edu", + "education", + "ee", + "eg", + "email", + "emerck", + "energy", + "engineer", + "engineering", + "enterprises", + "epost", + "epson", + "equipment", + "er", + "ericsson", + "erni", + "es", + "esq", + "estate", + "esurance", + "et", + "etisalat", + "eu", + "eurovision", + "eus", + "events", + "everbank", + "exchange", + "expert", + "exposed", + "express", + "extraspace", + "fage", + "fail", + "fairwinds", + "faith", + "family", + "fan", + "fans", + "farm", + "farmers", + "fashion", + "fast", + "fedex", + "feedback", + "ferrari", + "ferrero", + "fi", + "fiat", + "fidelity", + "fido", + "film", + "final", + "finance", + "financial", + "fire", + "firestone", + "firmdale", + "fish", + "fishing", + "fit", + "fitness", + "fj", + "fk", + "flickr", + "flights", + "flir", + "florist", + "flowers", + "fly", + "fm", + "fo", + "foo", + "food", + "foodnetwork", + "football", + "ford", + "forex", + "forsale", + "forum", + "foundation", + "fox", + "fr", + "free", + "fresenius", + "frl", + "frogans", + "frontdoor", + "frontier", + "ftr", + "fujitsu", + "fujixerox", + "fun", + "fund", + "furniture", + "futbol", + "fyi", + "ga", + "gal", + "gallery", + "gallo", + "gallup", + "game", + "games", + "gap", + "garden", + "gb", + "gbiz", + "gd", + "gdn", + "ge", + "gea", + "gent", + "genting", + "george", + "gf", + "gg", + "ggee", + "gh", + "gi", + "gift", + "gifts", + "gives", + "giving", + "gl", + "glade", + "glass", + "gle", + "global", + "globo", + "gm", + "gmail", + "gmbh", + "gmo", + "gmx", + "gn", + "godaddy", + "gold", + "goldpoint", + "golf", + "goo", + "goodhands", + "goodyear", + "goog", + "google", + "gop", + "got", + "gov", + "gp", + "gq", + "gr", + "grainger", + "graphics", + "gratis", + "green", + "gripe", + "grocery", + "group", + "gs", + "gt", + "gu", + "guardian", + "gucci", + "guge", + "guide", + "guitars", + "guru", + "gw", + "gy", + "hair", + "hamburg", + "hangout", + "haus", + "hbo", + "hdfc", + "hdfcbank", + "health", + "healthcare", + "help", + "helsinki", + "here", + "hermes", + "hgtv", + "hiphop", + "hisamitsu", + "hitachi", + "hiv", + "hk", + "hkt", + "hm", + "hn", + "hockey", + "holdings", + "holiday", + "homedepot", + "homegoods", + "homes", + "homesense", + "honda", + "honeywell", + "horse", + "hospital", + "host", + "hosting", + "hot", + "hoteles", + "hotels", + "hotmail", + "house", + "how", + "hr", + "hsbc", + "ht", + "htc", + "hu", + "hughes", + "hyatt", + "hyundai", + "ibm", + "icbc", + "ice", + "icu", + "id", + "ie", + "ieee", + "ifm", + "iinet", + "ikano", + "il", + "im", + "imamat", + "imdb", + "immo", + "immobilien", + "in", + "industries", + "infiniti", + "info", + "ing", + "ink", + "institute", + "insurance", + "insure", + "int", + "intel", + "international", + "intuit", + "investments", + "io", + "ipiranga", + "iq", + "ir", + "irish", + "is", + "iselect", + "ismaili", + "ist", + "istanbul", + "it", + "itau", + "itv", + "iveco", + "iwc", + "jaguar", + "java", + "jcb", + "jcp", + "je", + "jeep", + "jetzt", + "jewelry", + "jio", + "jlc", + "jll", + "jm", + "jmp", + "jnj", + "jo", + "jobs", + "joburg", + "jot", + "joy", + "jp", + "jpmorgan", + "jprs", + "juegos", + "juniper", + "kaufen", + "kddi", + "ke", + "kerryhotels", + "kerrylogistics", + "kerryproperties", + "kfh", + "kg", + "kh", + "ki", + "kia", + "kim", + "kinder", + "kindle", + "kitchen", + "kiwi", + "km", + "kn", + "koeln", + "komatsu", + "kosher", + "kp", + "kpmg", + "kpn", + "kr", + "krd", + "kred", + "kuokgroup", + "kw", + "ky", + "kyoto", + "kz", + "la", + "lacaixa", + "ladbrokes", + "lamborghini", + "lamer", + "lancaster", + "lancia", + "lancome", + "land", + "landrover", + "lanxess", + "lasalle", + "lat", + "latino", + "latrobe", + "law", + "lawyer", + "lb", + "lc", + "lds", + "lease", + "leclerc", + "lefrak", + "legal", + "lego", + "lexus", + "lgbt", + "li", + "liaison", + "lidl", + "life", + "lifeinsurance", + "lifestyle", + "lighting", + "like", + "lilly", + "limited", + "limo", + "lincoln", + "linde", + "link", + "lipsy", + "live", + "living", + "lixil", + "lk", + "loan", + "loans", + "locker", + "locus", + "loft", + "lol", + "london", + "lotte", + "lotto", + "love", + "lpl", + "lplfinancial", + "lr", + "ls", + "lt", + "ltd", + "ltda", + "lu", + "lundbeck", + "lupin", + "luxe", + "luxury", + "lv", + "ly", + "ma", + "macys", + "madrid", + "maif", + "maison", + "makeup", + "man", + "management", + "mango", + "map", + "market", + "marketing", + "markets", + "marriott", + "marshalls", + "maserati", + "mattel", + "mba", + "mc", + "mcd", + "mcdonalds", + "mckinsey", + "md", + "me", + "med", + "media", + "meet", + "melbourne", + "meme", + "memorial", + "men", + "menu", + "meo", + "merckmsd", + "metlife", + "mg", + "mh", + "miami", + "microsoft", + "mil", + "mini", + "mint", + "mit", + "mitsubishi", + "mk", + "ml", + "mlb", + "mls", + "mm", + "mma", + "mn", + "mo", + "mobi", + "mobile", + "mobily", + "moda", + "moe", + "moi", + "mom", + "monash", + "money", + "monster", + "montblanc", + "mopar", + "mormon", + "mortgage", + "moscow", + "moto", + "motorcycles", + "mov", + "movie", + "movistar", + "mp", + "mq", + "mr", + "ms", + "msd", + "mt", + "mtn", + "mtpc", + "mtr", + "mu", + "museum", + "mutual", + "mutuelle", + "mv", + "mw", + "mx", + "my", + "mz", + "na", + "nab", + "nadex", + "nagoya", + "name", + "nationwide", + "natura", + "navy", + "nba", + "nc", + "ne", + "nec", + "net", + "netbank", + "netflix", + "network", + "neustar", + "new", + "newholland", + "news", + "next", + "nextdirect", + "nexus", + "nf", + "nfl", + "ng", + "ngo", + "nhk", + "ni", + "nico", + "nike", + "nikon", + "ninja", + "nissan", + "nissay", + "nl", + "no", + "nokia", + "northwesternmutual", + "norton", + "now", + "nowruz", + "nowtv", + "np", + "nr", + "nra", + "nrw", + "ntt", + "nu", + "nyc", + "nz", + "obi", + "observer", + "off", + "office", + "okinawa", + "olayan", + "olayangroup", + "oldnavy", + "ollo", + "om", + "omega", + "one", + "ong", + "onion", + "onl", + "online", + "onyourside", + "ooo", + "open", + "oracle", + "orange", + "org", + "organic", + "orientexpress", + "origins", + "osaka", + "otsuka", + "ott", + "ovh", + "pa", + "page", + "pamperedchef", + "panasonic", + "panerai", + "paris", + "pars", + "partners", + "parts", + "party", + "passagens", + "pay", + "pccw", + "pe", + "pet", + "pf", + "pfizer", + "pg", + "ph", + "pharmacy", + "phd", + "philips", + "phone", + "photo", + "photography", + "photos", + "physio", + "piaget", + "pics", + "pictet", + "pictures", + "pid", + "pin", + "ping", + "pink", + "pioneer", + "pizza", + "pk", + "pl", + "place", + "play", + "playstation", + "plumbing", + "plus", + "pm", + "pn", + "pnc", + "pohl", + "poker", + "politie", + "porn", + "post", + "pr", + "pramerica", + "praxi", + "press", + "prime", + "pro", + "prod", + "productions", + "prof", + "progressive", + "promo", + "properties", + "property", + "protection", + "pru", + "prudential", + "ps", + "pt", + "pub", + "pw", + "pwc", + "py", + "qa", + "qpon", + "quebec", + "quest", + "qvc", + "racing", + "radio", + "raid", + "re", + "read", + "realestate", + "realtor", + "realty", + "recipes", + "red", + "redstone", + "redumbrella", + "rehab", + "reise", + "reisen", + "reit", + "reliance", + "ren", + "rent", + "rentals", + "repair", + "report", + "republican", + "rest", + "restaurant", + "review", + "reviews", + "rexroth", + "rich", + "richardli", + "ricoh", + "rightathome", + "ril", + "rio", + "rip", + "rmit", + "ro", + "rocher", + "rocks", + "rodeo", + "rogers", + "room", + "rs", + "rsvp", + "ru", + "ruhr", + "run", + "rw", + "rwe", + "ryukyu", + "sa", + "saarland", + "safe", + "safety", + "sakura", + "sale", + "salon", + "samsclub", + "samsung", + "sandvik", + "sandvikcoromant", + "sanofi", + "sap", + "sapo", + "sarl", + "sas", + "save", + "saxo", + "sb", + "sbi", + "sbs", + "sc", + "sca", + "scb", + "schaeffler", + "schmidt", + "scholarships", + "school", + "schule", + "schwarz", + "science", + "scjohnson", + "scor", + "scot", + "sd", + "se", + "search", + "seat", + "secure", + "security", + "seek", + "select", + "sener", + "services", + "ses", + "seven", + "sew", + "sex", + "sexy", + "sfr", + "sg", + "sh", + "shangrila", + "sharp", + "shaw", + "shell", + "shia", + "shiksha", + "shoes", + "shop", + "shopping", + "shouji", + "show", + "showtime", + "shriram", + "si", + "silk", + "sina", + "singles", + "site", + "sj", + "sk", + "ski", + "skin", + "sky", + "skype", + "sl", + "sling", + "sm", + "smart", + "smile", + "sn", + "sncf", + "so", + "soccer", + "social", + "softbank", + "software", + "sohu", + "solar", + "solutions", + "song", + "sony", + "soy", + "space", + "spiegel", + "spot", + "spreadbetting", + "sr", + "srl", + "srt", + "st", + "stada", + "staples", + "star", + "starhub", + "statebank", + "statefarm", + "statoil", + "stc", + "stcgroup", + "stockholm", + "storage", + "store", + "stream", + "studio", + "study", + "style", + "su", + "sucks", + "supplies", + "supply", + "support", + "surf", + "surgery", + "suzuki", + "sv", + "swatch", + "swiftcover", + "swiss", + "sx", + "sy", + "sydney", + "symantec", + "systems", + "sz", + "tab", + "taipei", + "talk", + "taobao", + "target", + "tatamotors", + "tatar", + "tattoo", + "tax", + "taxi", + "tc", + "tci", + "td", + "tdk", + "team", + "tech", + "technology", + "tel", + "telecity", + "telefonica", + "temasek", + "tennis", + "teva", + "tf", + "tg", + "th", + "thd", + "theater", + "theatre", + "theguardian", + "tiaa", + "tickets", + "tienda", + "tiffany", + "tips", + "tires", + "tirol", + "tj", + "tjmaxx", + "tjx", + "tk", + "tkmaxx", + "tl", + "tm", + "tmall", + "tn", + "to", + "today", + "tokyo", + "tools", + "top", + "toray", + "toshiba", + "total", + "tours", + "town", + "toyota", + "toys", + "tr", + "trade", + "trading", + "training", + "travel", + "travelchannel", + "travelers", + "travelersinsurance", + "trust", + "trv", + "tt", + "tube", + "tui", + "tunes", + "tushu", + "tv", + "tvs", + "tw", + "tz", + "ua", + "ubank", + "ubs", + "uconnect", + "ug", + "uk", + "unicom", + "university", + "uno", + "uol", + "ups", + "us", + "uy", + "uz", + "va", + "vacations", + "vana", + "vanguard", + "vc", + "ve", + "vegas", + "ventures", + "verisign", + "versicherung", + "vet", + "vg", + "vi", + "viajes", + "video", + "vig", + "viking", + "villas", + "vin", + "vip", + "virgin", + "visa", + "vision", + "vista", + "vistaprint", + "viva", + "vivo", + "vlaanderen", + "vn", + "vodka", + "volkswagen", + "volvo", + "vote", + "voting", + "voto", + "voyage", + "vu", + "vuelos", + "wales", + "walmart", + "walter", + "wang", + "wanggou", + "warman", + "watch", + "watches", + "weather", + "weatherchannel", + "webcam", + "weber", + "website", + "wed", + "wedding", + "weibo", + "weir", + "wf", + "whoswho", + "wien", + "wiki", + "williamhill", + "win", + "windows", + "wine", + "winners", + "wme", + "wolterskluwer", + "woodside", + "work", + "works", + "world", + "wow", + "ws", + "wtc", + "wtf", + "xbox", + "xerox", + "xfinity", + "xihuan", + "xin", + "xn--11b4c3d", + "xn--1ck2e1b", + "xn--1qqw23a", + "xn--30rr7y", + "xn--3bst00m", + "xn--3ds443g", + "xn--3e0b707e", + "xn--3oq18vl8pn36a", + "xn--3pxu8k", + "xn--42c2d9a", + "xn--45brj9c", + "xn--45q11c", + "xn--4gbrim", + "xn--4gq48lf9j", + "xn--54b7fta0cc", + "xn--55qw42g", + "xn--55qx5d", + "xn--5su34j936bgsg", + "xn--5tzm5g", + "xn--6frz82g", + "xn--6qq986b3xl", + "xn--80adxhks", + "xn--80ao21a", + "xn--80aqecdr1a", + "xn--80asehdb", + "xn--80aswg", + "xn--8y0a063a", + "xn--90a3ac", + "xn--90ais", + "xn--9dbq2a", + "xn--9et52u", + "xn--9krt00a", + "xn--b4w605ferd", + "xn--bck1b9a5dre4c", + "xn--c1avg", + "xn--c2br7g", + "xn--cck2b3b", + "xn--cg4bki", + "xn--clchc0ea0b2g2a9gcd", + "xn--czr694b", + "xn--czrs0t", + "xn--czru2d", + "xn--d1acj3b", + "xn--d1alf", + "xn--e1a4c", + "xn--eckvdtc9d", + "xn--efvy88h", + "xn--estv75g", + "xn--fct429k", + "xn--fhbei", + "xn--fiq228c5hs", + "xn--fiq64b", + "xn--fiqs8s", + "xn--fiqz9s", + "xn--fjq720a", + "xn--flw351e", + "xn--fpcrj9c3d", + "xn--fzc2c9e2c", + "xn--fzys8d69uvgm", + "xn--g2xx48c", + "xn--gckr3f0f", + "xn--gecrj9c", + "xn--gk3at1e", + "xn--h2brj9c", + "xn--hxt814e", + "xn--i1b6b1a6a2e", + "xn--imr513n", + "xn--io0a7i", + "xn--j1aef", + "xn--j1amh", + "xn--j6w193g", + "xn--jlq61u9w7b", + "xn--jvr189m", + "xn--kcrx77d1x4a", + "xn--kprw13d", + "xn--kpry57d", + "xn--kpu716f", + "xn--kput3i", + "xn--l1acc", + "xn--lgbbat1ad8j", + "xn--mgb2ddes", + "xn--mgb9awbf", + "xn--mgba3a3ejt", + "xn--mgba3a4f16a", + "xn--mgba3a4fra", + "xn--mgba7c0bbn0a", + "xn--mgbaakc7dvf", + "xn--mgbaam7a8h", + "xn--mgbab2bd", + "xn--mgbai9a5eva00b", + "xn--mgbai9azgqp6j", + "xn--mgbayh7gpa", + "xn--mgbb9fbpob", + "xn--mgbbh1a71e", + "xn--mgbc0a9azcg", + "xn--mgbca7dzdo", + "xn--mgberp4a5d4a87g", + "xn--mgberp4a5d4ar", + "xn--mgbi4ecexp", + "xn--mgbpl2fh", + "xn--mgbqly7c0a67fbc", + "xn--mgbqly7cvafr", + "xn--mgbt3dhd", + "xn--mgbtf8fl", + "xn--mgbtx2b", + "xn--mgbx4cd0ab", + "xn--mix082f", + "xn--mix891f", + "xn--mk1bu44c", + "xn--mxtq1m", + "xn--ngbc5azd", + "xn--ngbe9e0a", + "xn--ngbrx", + "xn--nnx388a", + "xn--node", + "xn--nqv7f", + "xn--nqv7fs00ema", + "xn--nyqy26a", + "xn--o3cw4h", + "xn--ogbpf8fl", + "xn--p1acf", + "xn--p1ai", + "xn--pbt977c", + "xn--pgbs0dh", + "xn--pssy2u", + "xn--q9jyb4c", + "xn--qcka1pmc", + "xn--qxam", + "xn--rhqv96g", + "xn--rovu88b", + "xn--s9brj9c", + "xn--ses554g", + "xn--t60b56a", + "xn--tckwe", + "xn--tiq49xqyj", + "xn--unup4y", + "xn--vermgensberater-ctb", + "xn--vermgensberatung-pwb", + "xn--vhquv", + "xn--vuq861b", + "xn--w4r85el8fhu5dnra", + "xn--w4rs40l", + "xn--wgbh1c", + "xn--wgbl6a", + "xn--xhq521b", + "xn--xkc2al3hye2a", + "xn--xkc2dl3a5ee0h", + "xn--y9a3aq", + "xn--yfro4i67o", + "xn--ygbi2ammx", + "xn--zfr164b", + "xperia", + "xxx", + "xyz", + "yachts", + "yahoo", + "yamaxun", + "yandex", + "ye", + "yodobashi", + "yoga", + "yokohama", + "you", + "youtube", + "yt", + "yun", + "za", + "zappos", + "zara", + "zero", + "zip", + "zippo", + "zm", + "zone", + "zuerich", + "zw", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "nom", + "ac", + "blogspot", + "co", + "gov", + "mil", + "net", + "org", + "sch", + "accident-investigation", + "accident-prevention", + "aerobatic", + "aeroclub", + "aerodrome", + "agents", + "air-surveillance", + "air-traffic-control", + "aircraft", + "airline", + "airport", + "airtraffic", + "ambulance", + "amusement", + "association", + "author", + "ballooning", + "broker", + "caa", + "cargo", + "catering", + "certification", + "championship", + "charter", + "civilaviation", + "club", + "conference", + "consultant", + "consulting", + "control", + "council", + "crew", + "design", + "dgca", + "educator", + "emergency", + "engine", + "engineer", + "entertainment", + "equipment", + "exchange", + "express", + "federation", + "flight", + "freight", + "fuel", + "gliding", + "government", + "groundhandling", + "group", + "hanggliding", + "homebuilt", + "insurance", + "journal", + "journalist", + "leasing", + "logistics", + "magazine", + "maintenance", + "media", + "microlight", + "modelling", + "navigation", + "parachuting", + "paragliding", + "passenger-association", + "pilot", + "press", + "production", + "recreation", + "repbody", + "res", + "research", + "rotorcraft", + "safety", + "scientist", + "services", + "show", + "skydiving", + "software", + "student", + "trader", + "trading", + "trainer", + "union", + "workinggroup", + "works", + "com", + "edu", + "gov", + "net", + "org", + "co", + "com", + "net", + "nom", + "org", + "com", + "net", + "off", + "org", + "blogspot", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "blogspot", + "co", + "ed", + "gv", + "it", + "og", + "pb", + "com", + "edu", + "gob", + "gov", + "int", + "mil", + "net", + "org", + "tur", + "blogspot", + "e164", + "in-addr", + "ip6", + "iris", + "uri", + "urn", + "gov", + "cloudns", + "ac", + "biz", + "co", + "futurehosting", + "futuremailing", + "gv", + "info", + "or", + "ortsinfo", + "priv", + "blogspot", + "ex", + "kunden", + "act", + "asn", + "com", + "conf", + "edu", + "gov", + "id", + "info", + "net", + "nsw", + "nt", + "org", + "oz", + "qld", + "sa", + "tas", + "vic", + "wa", + "blogspot", + "act", + "nsw", + "nt", + "qld", + "sa", + "tas", + "vic", + "wa", + "qld", + "sa", + "tas", + "vic", + "wa", + "com", + "biz", + "com", + "edu", + "gov", + "info", + "int", + "mil", + "name", + "net", + "org", + "pp", + "pro", + "blogspot", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "biz", + "co", + "com", + "edu", + "gov", + "info", + "net", + "org", + "store", + "tv", + "ac", + "blogspot", + "transurl", + "gov", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "a", + "b", + "blogspot", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "com", + "edu", + "gov", + "net", + "org", + "co", + "com", + "edu", + "or", + "org", + "cloudns", + "dscloud", + "dyndns", + "for-better", + "for-more", + "for-some", + "for-the", + "mmafan", + "myftp", + "no-ip", + "selfip", + "webhop", + "asso", + "barreau", + "blogspot", + "gouv", + "com", + "edu", + "gov", + "net", + "org", + "com", + "edu", + "gob", + "gov", + "int", + "mil", + "net", + "org", + "tv", + "adm", + "adv", + "agr", + "am", + "arq", + "art", + "ato", + "b", + "bio", + "blog", + "bmd", + "cim", + "cng", + "cnt", + "com", + "coop", + "ecn", + "eco", + "edu", + "emp", + "eng", + "esp", + "etc", + "eti", + "far", + "flog", + "fm", + "fnd", + "fot", + "fst", + "g12", + "ggf", + "gov", + "imb", + "ind", + "inf", + "jor", + "jus", + "leg", + "lel", + "mat", + "med", + "mil", + "mp", + "mus", + "net", + "nom", + "not", + "ntr", + "odo", + "org", + "ppg", + "pro", + "psc", + "psi", + "qsl", + "radio", + "rec", + "slg", + "srv", + "taxi", + "teo", + "tmp", + "trd", + "tur", + "tv", + "vet", + "vlog", + "wiki", + "zlg", + "blogspot", + "ac", + "al", + "am", + "ap", + "ba", + "ce", + "df", + "es", + "go", + "ma", + "mg", + "ms", + "mt", + "pa", + "pb", + "pe", + "pi", + "pr", + "rj", + "rn", + "ro", + "rr", + "rs", + "sc", + "se", + "sp", + "to", + "com", + "edu", + "gov", + "net", + "org", + "com", + "edu", + "gov", + "net", + "org", + "co", + "org", + "com", + "gov", + "mil", + "of", + "blogspot", + "com", + "edu", + "gov", + "net", + "org", + "za", + "ab", + "bc", + "blogspot", + "co", + "gc", + "mb", + "nb", + "nf", + "nl", + "no-ip", + "ns", + "nt", + "nu", + "on", + "pe", + "qc", + "sk", + "yk", + "cloudns", + "fantasyleague", + "ftpaccess", + "game-server", + "myphotos", + "scrapping", + "gov", + "blogspot", + "blogspot", + "gotdns", + "ac", + "asso", + "co", + "com", + "ed", + "edu", + "go", + "gouv", + "int", + "md", + "net", + "or", + "org", + "presse", + "xn--aroport-bya", + "www", + "blogspot", + "co", + "gob", + "gov", + "mil", + "magentosite", + "myfusion", + "statics", + "cloudns", + "co", + "com", + "gov", + "net", + "ac", + "ah", + "bj", + "com", + "cq", + "edu", + "fj", + "gd", + "gov", + "gs", + "gx", + "gz", + "ha", + "hb", + "he", + "hi", + "hk", + "hl", + "hn", + "jl", + "js", + "jx", + "ln", + "mil", + "mo", + "net", + "nm", + "nx", + "org", + "qh", + "sc", + "sd", + "sh", + "sn", + "sx", + "tj", + "tw", + "xj", + "xn--55qx5d", + "xn--io0a7i", + "xn--od0alg", + "xz", + "yn", + "zj", + "amazonaws", + "cn-north-1", + "compute", + "elb", + "elasticbeanstalk", + "s3", + "arts", + "com", + "edu", + "firm", + "gov", + "info", + "int", + "mil", + "net", + "nom", + "org", + "rec", + "web", + "blogspot", + "0emm", + "1kapp", + "3utilities", + "4u", + "africa", + "alpha-myqnapcloud", + "amazonaws", + "appchizi", + "applinzi", + "appspot", + "ar", + "betainabox", + "blogdns", + "blogspot", + "blogsyte", + "bloxcms", + "bounty-full", + "br", + "cechire", + "ciscofreak", + "cloudcontrolapp", + "cloudcontrolled", + "cn", + "co", + "codespot", + "damnserver", + "ddnsking", + "de", + "dev-myqnapcloud", + "ditchyourip", + "dnsalias", + "dnsdojo", + "dnsiskinky", + "doesntexist", + "dontexist", + "doomdns", + "dreamhosters", + "dsmynas", + "dyn-o-saur", + "dynalias", + "dyndns-at-home", + "dyndns-at-work", + "dyndns-blog", + "dyndns-free", + "dyndns-home", + "dyndns-ip", + "dyndns-mail", + "dyndns-office", + "dyndns-pics", + "dyndns-remote", + "dyndns-server", + "dyndns-web", + "dyndns-wiki", + "dyndns-work", + "dynns", + "elasticbeanstalk", + "est-a-la-maison", + "est-a-la-masion", + "est-le-patron", + "est-mon-blogueur", + "eu", + "evennode", + "familyds", + "fbsbx", + "firebaseapp", + "firewall-gateway", + "flynnhub", + "freebox-os", + "freeboxos", + "from-ak", + "from-al", + "from-ar", + "from-ca", + "from-ct", + "from-dc", + "from-de", + "from-fl", + "from-ga", + "from-hi", + "from-ia", + "from-id", + "from-il", + "from-in", + "from-ks", + "from-ky", + "from-ma", + "from-md", + "from-mi", + "from-mn", + "from-mo", + "from-ms", + "from-mt", + "from-nc", + "from-nd", + "from-ne", + "from-nh", + "from-nj", + "from-nm", + "from-nv", + "from-oh", + "from-ok", + "from-or", + "from-pa", + "from-pr", + "from-ri", + "from-sc", + "from-sd", + "from-tn", + "from-tx", + "from-ut", + "from-va", + "from-vt", + "from-wa", + "from-wi", + "from-wv", + "from-wy", + "gb", + "geekgalaxy", + "getmyip", + "githubcloud", + "githubcloudusercontent", + "githubusercontent", + "googleapis", + "googlecode", + "gotdns", + "gotpantheon", + "gr", + "health-carereform", + "herokuapp", + "herokussl", + "hk", + "hobby-site", + "homelinux", + "homesecuritymac", + "homesecuritypc", + "homeunix", + "hu", + "iamallama", + "is-a-anarchist", + "is-a-blogger", + "is-a-bookkeeper", + "is-a-bulls-fan", + "is-a-caterer", + "is-a-chef", + "is-a-conservative", + "is-a-cpa", + "is-a-cubicle-slave", + "is-a-democrat", + "is-a-designer", + "is-a-doctor", + "is-a-financialadvisor", + "is-a-geek", + "is-a-green", + "is-a-guru", + "is-a-hard-worker", + "is-a-hunter", + "is-a-landscaper", + "is-a-lawyer", + "is-a-liberal", + "is-a-libertarian", + "is-a-llama", + "is-a-musician", + "is-a-nascarfan", + "is-a-nurse", + "is-a-painter", + "is-a-personaltrainer", + "is-a-photographer", + "is-a-player", + "is-a-republican", + "is-a-rockstar", + "is-a-socialist", + "is-a-student", + "is-a-teacher", + "is-a-techie", + "is-a-therapist", + "is-an-accountant", + "is-an-actor", + "is-an-actress", + "is-an-anarchist", + "is-an-artist", + "is-an-engineer", + "is-an-entertainer", + "is-certified", + "is-gone", + "is-into-anime", + "is-into-cars", + "is-into-cartoons", + "is-into-games", + "is-leet", + "is-not-certified", + "is-slick", + "is-uberleet", + "is-with-theband", + "isa-geek", + "isa-hockeynut", + "issmarterthanyou", + "joyent", + "jpn", + "kr", + "likes-pie", + "likescandy", + "logoip", + "meteorapp", + "mex", + "myactivedirectory", + "myasustor", + "mydrobo", + "myqnapcloud", + "mysecuritycamera", + "myshopblocks", + "myvnc", + "neat-url", + "net-freaks", + "nfshost", + "no", + "on-aptible", + "onthewifi", + "operaunite", + "outsystemscloud", + "ownprovider", + "pagefrontapp", + "pagespeedmobilizer", + "pgfog", + "point2this", + "prgmr", + "publishproxy", + "qa2", + "qc", + "quicksytes", + "rackmaze", + "remotewd", + "rhcloud", + "ru", + "sa", + "saves-the-whales", + "se", + "securitytactics", + "selfip", + "sells-for-less", + "sells-for-u", + "servebbs", + "servebeer", + "servecounterstrike", + "serveexchange", + "serveftp", + "servegame", + "servehalflife", + "servehttp", + "servehumour", + "serveirc", + "servemp3", + "servep2p", + "servepics", + "servequake", + "servesarcasm", + "simple-url", + "sinaapp", + "space-to-rent", + "stufftoread", + "teaches-yoga", + "townnews-staging", + "uk", + "unusualperson", + "us", + "uy", + "vipsinaapp", + "withgoogle", + "withyoutube", + "workisboring", + "writesthisblog", + "xenapponazure", + "yolasite", + "za", + "ap-northeast-1", + "ap-northeast-2", + "ap-south-1", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "compute", + "compute-1", + "elb", + "eu-central-1", + "eu-west-1", + "s3", + "s3-ap-northeast-1", + "s3-ap-northeast-2", + "s3-ap-south-1", + "s3-ap-southeast-1", + "s3-ap-southeast-2", + "s3-ca-central-1", + "s3-eu-central-1", + "s3-eu-west-1", + "s3-external-1", + "s3-fips-us-gov-west-1", + "s3-sa-east-1", + "s3-us-east-2", + "s3-us-gov-west-1", + "s3-us-west-1", + "s3-us-west-2", + "s3-website-ap-northeast-1", + "s3-website-ap-southeast-1", + "s3-website-ap-southeast-2", + "s3-website-eu-west-1", + "s3-website-sa-east-1", + "s3-website-us-east-1", + "s3-website-us-west-1", + "s3-website-us-west-2", + "sa-east-1", + "us-east-1", + "us-east-2", + "dualstack", + "s3", + "dualstack", + "s3", + "s3-website", + "s3", + "dualstack", + "s3", + "s3-website", + "s3", + "dualstack", + "s3", + "dualstack", + "s3", + "dualstack", + "s3", + "s3-website", + "s3", + "dualstack", + "s3", + "s3-website", + "s3", + "dualstack", + "s3", + "dualstack", + "s3", + "dualstack", + "s3", + "dualstack", + "s3", + "s3-website", + "s3", + "alpha", + "beta", + "eu-1", + "eu-2", + "us-1", + "us-2", + "apps", + "api", + "ext", + "gist", + "cns", + "eu", + "xen", + "ac", + "co", + "ed", + "fi", + "go", + "or", + "sa", + "com", + "edu", + "gov", + "inf", + "net", + "org", + "blogspot", + "com", + "edu", + "net", + "org", + "ath", + "gov", + "ac", + "biz", + "com", + "ekloges", + "gov", + "ltd", + "name", + "net", + "org", + "parliament", + "press", + "pro", + "tm", + "blogspot", + "blogspot", + "co", + "e4", + "realm", + "blogspot", + "com", + "cosidns", + "dd-dns", + "ddnss", + "dnshome", + "dnsupdater", + "dray-dns", + "draydns", + "dyn-ip24", + "dyn-vpn", + "dynamisches-dns", + "dyndns1", + "dynvpn", + "firewall-gateway", + "fuettertdasnetz", + "goip", + "home-webserver", + "internet-dns", + "isteingeek", + "istmein", + "keymachine", + "l-o-g-i-n", + "lebtimnetz", + "leitungsen", + "logoip", + "mein-vigor", + "my-gateway", + "my-router", + "my-vigor", + "my-wan", + "myhome-server", + "spdns", + "syno-ds", + "synology-diskstation", + "synology-ds", + "taifun-dns", + "traeumtgerade", + "dyn", + "dyn", + "dyndns", + "dyn", + "biz", + "blogspot", + "co", + "firm", + "reg", + "store", + "com", + "edu", + "gov", + "net", + "org", + "art", + "com", + "edu", + "gob", + "gov", + "mil", + "net", + "org", + "sld", + "web", + "art", + "asso", + "com", + "edu", + "gov", + "net", + "org", + "pol", + "com", + "edu", + "fin", + "gob", + "gov", + "info", + "k12", + "med", + "mil", + "net", + "org", + "pro", + "aip", + "com", + "edu", + "fie", + "gov", + "lib", + "med", + "org", + "pri", + "riik", + "blogspot", + "com", + "edu", + "eun", + "gov", + "mil", + "name", + "net", + "org", + "sci", + "blogspot", + "com", + "edu", + "gob", + "nom", + "org", + "blogspot", + "compute", + "biz", + "com", + "edu", + "gov", + "info", + "name", + "net", + "org", + "cloudns", + "diskstation", + "mycd", + "spdns", + "transurl", + "wellbeingzone", + "party", + "user", + "ybo", + "aland", + "blogspot", + "dy", + "iki", + "ptplus", + "aeroport", + "assedic", + "asso", + "avocat", + "avoues", + "blogspot", + "cci", + "chambagri", + "chirurgiens-dentistes", + "chirurgiens-dentistes-en-france", + "com", + "experts-comptables", + "fbx-os", + "fbxos", + "freebox-os", + "freeboxos", + "geometre-expert", + "gouv", + "greta", + "huissier-justice", + "medecin", + "nom", + "notaires", + "on-web", + "pharmacien", + "port", + "prd", + "presse", + "tm", + "veterinaire", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "pvt", + "co", + "net", + "org", + "com", + "edu", + "gov", + "mil", + "org", + "com", + "edu", + "gov", + "ltd", + "mod", + "org", + "co", + "com", + "edu", + "net", + "org", + "ac", + "com", + "edu", + "gov", + "net", + "org", + "asso", + "com", + "edu", + "mobi", + "net", + "org", + "blogspot", + "com", + "edu", + "gov", + "net", + "org", + "com", + "edu", + "gob", + "ind", + "mil", + "net", + "org", + "co", + "com", + "edu", + "gov", + "net", + "org", + "blogspot", + "com", + "edu", + "gov", + "idv", + "inc", + "ltd", + "net", + "org", + "xn--55qx5d", + "xn--ciqpn", + "xn--gmq050i", + "xn--gmqw5a", + "xn--io0a7i", + "xn--lcvr32d", + "xn--mk0axi", + "xn--mxtq1m", + "xn--od0alg", + "xn--od0aq3b", + "xn--tn0ag", + "xn--uc0atv", + "xn--uc0ay4a", + "xn--wcvs22d", + "xn--zf0avx", + "com", + "edu", + "gob", + "mil", + "net", + "org", + "opencraft", + "blogspot", + "com", + "from", + "iz", + "name", + "adult", + "art", + "asso", + "com", + "coop", + "edu", + "firm", + "gouv", + "info", + "med", + "net", + "org", + "perso", + "pol", + "pro", + "rel", + "shop", + "2000", + "agrar", + "blogspot", + "bolt", + "casino", + "city", + "co", + "erotica", + "erotika", + "film", + "forum", + "games", + "hotel", + "info", + "ingatlan", + "jogasz", + "konyvelo", + "lakas", + "media", + "news", + "org", + "priv", + "reklam", + "sex", + "shop", + "sport", + "suli", + "szex", + "tm", + "tozsde", + "utazas", + "video", + "ac", + "biz", + "co", + "desa", + "go", + "mil", + "my", + "net", + "or", + "sch", + "web", + "blogspot", + "blogspot", + "gov", + "ac", + "co", + "gov", + "idf", + "k12", + "muni", + "net", + "org", + "blogspot", + "ac", + "co", + "com", + "net", + "org", + "ro", + "tt", + "tv", + "ltd", + "plc", + "ac", + "blogspot", + "cloudns", + "co", + "edu", + "firm", + "gen", + "gov", + "ind", + "mil", + "net", + "nic", + "org", + "res", + "barrel-of-knowledge", + "barrell-of-knowledge", + "cloudns", + "dvrcam", + "dynamic-dns", + "dyndns", + "for-our", + "groks-the", + "groks-this", + "here-for-more", + "ilovecollege", + "knowsitall", + "no-ip", + "nsupdate", + "selfip", + "webhop", + "eu", + "backplaneapp", + "boxfuse", + "browsersafetymark", + "com", + "dedyn", + "drud", + "enonic", + "github", + "gitlab", + "hasura-app", + "hzc", + "lair", + "ngrok", + "nid", + "pantheonsite", + "protonet", + "sandcats", + "shiftedit", + "spacekit", + "stolos", + "customer", + "apps", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "ac", + "co", + "gov", + "id", + "net", + "org", + "sch", + "xn--mgba3a4f16a", + "xn--mgba3a4fra", + "blogspot", + "com", + "cupcake", + "edu", + "gov", + "int", + "net", + "org", + "abr", + "abruzzo", + "ag", + "agrigento", + "al", + "alessandria", + "alto-adige", + "altoadige", + "an", + "ancona", + "andria-barletta-trani", + "andria-trani-barletta", + "andriabarlettatrani", + "andriatranibarletta", + "ao", + "aosta", + "aosta-valley", + "aostavalley", + "aoste", + "ap", + "aq", + "aquila", + "ar", + "arezzo", + "ascoli-piceno", + "ascolipiceno", + "asti", + "at", + "av", + "avellino", + "ba", + "balsan", + "bari", + "barletta-trani-andria", + "barlettatraniandria", + "bas", + "basilicata", + "belluno", + "benevento", + "bergamo", + "bg", + "bi", + "biella", + "bl", + "blogspot", + "bn", + "bo", + "bologna", + "bolzano", + "bozen", + "br", + "brescia", + "brindisi", + "bs", + "bt", + "bz", + "ca", + "cagliari", + "cal", + "calabria", + "caltanissetta", + "cam", + "campania", + "campidano-medio", + "campidanomedio", + "campobasso", + "carbonia-iglesias", + "carboniaiglesias", + "carrara-massa", + "carraramassa", + "caserta", + "catania", + "catanzaro", + "cb", + "ce", + "cesena-forli", + "cesenaforli", + "ch", + "chieti", + "ci", + "cl", + "cn", + "co", + "como", + "cosenza", + "cr", + "cremona", + "crotone", + "cs", + "ct", + "cuneo", + "cz", + "dell-ogliastra", + "dellogliastra", + "edu", + "emilia-romagna", + "emiliaromagna", + "emr", + "en", + "enna", + "fc", + "fe", + "fermo", + "ferrara", + "fg", + "fi", + "firenze", + "florence", + "fm", + "foggia", + "forli-cesena", + "forlicesena", + "fr", + "friuli-v-giulia", + "friuli-ve-giulia", + "friuli-vegiulia", + "friuli-venezia-giulia", + "friuli-veneziagiulia", + "friuli-vgiulia", + "friuliv-giulia", + "friulive-giulia", + "friulivegiulia", + "friulivenezia-giulia", + "friuliveneziagiulia", + "friulivgiulia", + "frosinone", + "fvg", + "ge", + "genoa", + "genova", + "go", + "gorizia", + "gov", + "gr", + "grosseto", + "iglesias-carbonia", + "iglesiascarbonia", + "im", + "imperia", + "is", + "isernia", + "kr", + "la-spezia", + "laquila", + "laspezia", + "latina", + "laz", + "lazio", + "lc", + "le", + "lecce", + "lecco", + "li", + "lig", + "liguria", + "livorno", + "lo", + "lodi", + "lom", + "lombardia", + "lombardy", + "lt", + "lu", + "lucania", + "lucca", + "macerata", + "mantova", + "mar", + "marche", + "massa-carrara", + "massacarrara", + "matera", + "mb", + "mc", + "me", + "medio-campidano", + "mediocampidano", + "messina", + "mi", + "milan", + "milano", + "mn", + "mo", + "modena", + "mol", + "molise", + "monza", + "monza-brianza", + "monza-e-della-brianza", + "monzabrianza", + "monzaebrianza", + "monzaedellabrianza", + "ms", + "mt", + "na", + "naples", + "napoli", + "no", + "novara", + "nu", + "nuoro", + "og", + "ogliastra", + "olbia-tempio", + "olbiatempio", + "or", + "oristano", + "ot", + "pa", + "padova", + "padua", + "palermo", + "parma", + "pavia", + "pc", + "pd", + "pe", + "perugia", + "pesaro-urbino", + "pesarourbino", + "pescara", + "pg", + "pi", + "piacenza", + "piedmont", + "piemonte", + "pisa", + "pistoia", + "pmn", + "pn", + "po", + "pordenone", + "potenza", + "pr", + "prato", + "pt", + "pu", + "pug", + "puglia", + "pv", + "pz", + "ra", + "ragusa", + "ravenna", + "rc", + "re", + "reggio-calabria", + "reggio-emilia", + "reggiocalabria", + "reggioemilia", + "rg", + "ri", + "rieti", + "rimini", + "rm", + "rn", + "ro", + "roma", + "rome", + "rovigo", + "sa", + "salerno", + "sar", + "sardegna", + "sardinia", + "sassari", + "savona", + "si", + "sic", + "sicilia", + "sicily", + "siena", + "siracusa", + "so", + "sondrio", + "sp", + "sr", + "ss", + "suedtirol", + "sv", + "ta", + "taa", + "taranto", + "te", + "tempio-olbia", + "tempioolbia", + "teramo", + "terni", + "tn", + "to", + "torino", + "tos", + "toscana", + "tp", + "tr", + "trani-andria-barletta", + "trani-barletta-andria", + "traniandriabarletta", + "tranibarlettaandria", + "trapani", + "trentino", + "trentino-a-adige", + "trentino-aadige", + "trentino-alto-adige", + "trentino-altoadige", + "trentino-s-tirol", + "trentino-stirol", + "trentino-sud-tirol", + "trentino-sudtirol", + "trentino-sued-tirol", + "trentino-suedtirol", + "trentinoa-adige", + "trentinoaadige", + "trentinoalto-adige", + "trentinoaltoadige", + "trentinos-tirol", + "trentinostirol", + "trentinosud-tirol", + "trentinosudtirol", + "trentinosued-tirol", + "trentinosuedtirol", + "trento", + "treviso", + "trieste", + "ts", + "turin", + "tuscany", + "tv", + "ud", + "udine", + "umb", + "umbria", + "urbino-pesaro", + "urbinopesaro", + "va", + "val-d-aosta", + "val-daosta", + "vald-aosta", + "valdaosta", + "valle-aosta", + "valle-d-aosta", + "valle-daosta", + "valleaosta", + "valled-aosta", + "valledaosta", + "vallee-aoste", + "valleeaoste", + "vao", + "varese", + "vb", + "vc", + "vda", + "ve", + "ven", + "veneto", + "venezia", + "venice", + "verbania", + "vercelli", + "verona", + "vi", + "vibo-valentia", + "vibovalentia", + "vicenza", + "viterbo", + "vr", + "vs", + "vt", + "vv", + "co", + "net", + "org", + "com", + "edu", + "gov", + "mil", + "name", + "net", + "org", + "sch", + "ac", + "ad", + "aichi", + "akita", + "aomori", + "blogspot", + "chiba", + "co", + "ed", + "ehime", + "fukui", + "fukuoka", + "fukushima", + "gifu", + "go", + "gr", + "gunma", + "hiroshima", + "hokkaido", + "hyogo", + "ibaraki", + "ishikawa", + "iwate", + "kagawa", + "kagoshima", + "kanagawa", + "kawasaki", + "kitakyushu", + "kobe", + "kochi", + "kumamoto", + "kyoto", + "lg", + "mie", + "miyagi", + "miyazaki", + "nagano", + "nagasaki", + "nagoya", + "nara", + "ne", + "niigata", + "oita", + "okayama", + "okinawa", + "or", + "osaka", + "saga", + "saitama", + "sapporo", + "sendai", + "shiga", + "shimane", + "shizuoka", + "tochigi", + "tokushima", + "tokyo", + "tottori", + "toyama", + "wakayama", + "xn--0trq7p7nn", + "xn--1ctwo", + "xn--1lqs03n", + "xn--1lqs71d", + "xn--2m4a15e", + "xn--32vp30h", + "xn--4it168d", + "xn--4it797k", + "xn--4pvxs", + "xn--5js045d", + "xn--5rtp49c", + "xn--5rtq34k", + "xn--6btw5a", + "xn--6orx2r", + "xn--7t0a264c", + "xn--8ltr62k", + "xn--8pvr4u", + "xn--c3s14m", + "xn--d5qv7z876c", + "xn--djrs72d6uy", + "xn--djty4k", + "xn--efvn9s", + "xn--ehqz56n", + "xn--elqq16h", + "xn--f6qx53a", + "xn--k7yn95e", + "xn--kbrq7o", + "xn--klt787d", + "xn--kltp7d", + "xn--kltx9a", + "xn--klty5x", + "xn--mkru45i", + "xn--nit225k", + "xn--ntso0iqx3a", + "xn--ntsq17g", + "xn--pssu33l", + "xn--qqqt11m", + "xn--rht27z", + "xn--rht3d", + "xn--rht61e", + "xn--rny31h", + "xn--tor131o", + "xn--uist22h", + "xn--uisz3g", + "xn--uuwu58a", + "xn--vgu402c", + "xn--zbx025d", + "yamagata", + "yamaguchi", + "yamanashi", + "yokohama", + "aisai", + "ama", + "anjo", + "asuke", + "chiryu", + "chita", + "fuso", + "gamagori", + "handa", + "hazu", + "hekinan", + "higashiura", + "ichinomiya", + "inazawa", + "inuyama", + "isshiki", + "iwakura", + "kanie", + "kariya", + "kasugai", + "kira", + "kiyosu", + "komaki", + "konan", + "kota", + "mihama", + "miyoshi", + "nishio", + "nisshin", + "obu", + "oguchi", + "oharu", + "okazaki", + "owariasahi", + "seto", + "shikatsu", + "shinshiro", + "shitara", + "tahara", + "takahama", + "tobishima", + "toei", + "togo", + "tokai", + "tokoname", + "toyoake", + "toyohashi", + "toyokawa", + "toyone", + "toyota", + "tsushima", + "yatomi", + "akita", + "daisen", + "fujisato", + "gojome", + "hachirogata", + "happou", + "higashinaruse", + "honjo", + "honjyo", + "ikawa", + "kamikoani", + "kamioka", + "katagami", + "kazuno", + "kitaakita", + "kosaka", + "kyowa", + "misato", + "mitane", + "moriyoshi", + "nikaho", + "noshiro", + "odate", + "oga", + "ogata", + "semboku", + "yokote", + "yurihonjo", + "aomori", + "gonohe", + "hachinohe", + "hashikami", + "hiranai", + "hirosaki", + "itayanagi", + "kuroishi", + "misawa", + "mutsu", + "nakadomari", + "noheji", + "oirase", + "owani", + "rokunohe", + "sannohe", + "shichinohe", + "shingo", + "takko", + "towada", + "tsugaru", + "tsuruta", + "abiko", + "asahi", + "chonan", + "chosei", + "choshi", + "chuo", + "funabashi", + "futtsu", + "hanamigawa", + "ichihara", + "ichikawa", + "ichinomiya", + "inzai", + "isumi", + "kamagaya", + "kamogawa", + "kashiwa", + "katori", + "katsuura", + "kimitsu", + "kisarazu", + "kozaki", + "kujukuri", + "kyonan", + "matsudo", + "midori", + "mihama", + "minamiboso", + "mobara", + "mutsuzawa", + "nagara", + "nagareyama", + "narashino", + "narita", + "noda", + "oamishirasato", + "omigawa", + "onjuku", + "otaki", + "sakae", + "sakura", + "shimofusa", + "shirako", + "shiroi", + "shisui", + "sodegaura", + "sosa", + "tako", + "tateyama", + "togane", + "tohnosho", + "tomisato", + "urayasu", + "yachimata", + "yachiyo", + "yokaichiba", + "yokoshibahikari", + "yotsukaido", + "ainan", + "honai", + "ikata", + "imabari", + "iyo", + "kamijima", + "kihoku", + "kumakogen", + "masaki", + "matsuno", + "matsuyama", + "namikata", + "niihama", + "ozu", + "saijo", + "seiyo", + "shikokuchuo", + "tobe", + "toon", + "uchiko", + "uwajima", + "yawatahama", + "echizen", + "eiheiji", + "fukui", + "ikeda", + "katsuyama", + "mihama", + "minamiechizen", + "obama", + "ohi", + "ono", + "sabae", + "sakai", + "takahama", + "tsuruga", + "wakasa", + "ashiya", + "buzen", + "chikugo", + "chikuho", + "chikujo", + "chikushino", + "chikuzen", + "chuo", + "dazaifu", + "fukuchi", + "hakata", + "higashi", + "hirokawa", + "hisayama", + "iizuka", + "inatsuki", + "kaho", + "kasuga", + "kasuya", + "kawara", + "keisen", + "koga", + "kurate", + "kurogi", + "kurume", + "minami", + "miyako", + "miyama", + "miyawaka", + "mizumaki", + "munakata", + "nakagawa", + "nakama", + "nishi", + "nogata", + "ogori", + "okagaki", + "okawa", + "oki", + "omuta", + "onga", + "onojo", + "oto", + "saigawa", + "sasaguri", + "shingu", + "shinyoshitomi", + "shonai", + "soeda", + "sue", + "tachiarai", + "tagawa", + "takata", + "toho", + "toyotsu", + "tsuiki", + "ukiha", + "umi", + "usui", + "yamada", + "yame", + "yanagawa", + "yukuhashi", + "aizubange", + "aizumisato", + "aizuwakamatsu", + "asakawa", + "bandai", + "date", + "fukushima", + "furudono", + "futaba", + "hanawa", + "higashi", + "hirata", + "hirono", + "iitate", + "inawashiro", + "ishikawa", + "iwaki", + "izumizaki", + "kagamiishi", + "kaneyama", + "kawamata", + "kitakata", + "kitashiobara", + "koori", + "koriyama", + "kunimi", + "miharu", + "mishima", + "namie", + "nango", + "nishiaizu", + "nishigo", + "okuma", + "omotego", + "ono", + "otama", + "samegawa", + "shimogo", + "shirakawa", + "showa", + "soma", + "sukagawa", + "taishin", + "tamakawa", + "tanagura", + "tenei", + "yabuki", + "yamato", + "yamatsuri", + "yanaizu", + "yugawa", + "anpachi", + "ena", + "gifu", + "ginan", + "godo", + "gujo", + "hashima", + "hichiso", + "hida", + "higashishirakawa", + "ibigawa", + "ikeda", + "kakamigahara", + "kani", + "kasahara", + "kasamatsu", + "kawaue", + "kitagata", + "mino", + "minokamo", + "mitake", + "mizunami", + "motosu", + "nakatsugawa", + "ogaki", + "sakahogi", + "seki", + "sekigahara", + "shirakawa", + "tajimi", + "takayama", + "tarui", + "toki", + "tomika", + "wanouchi", + "yamagata", + "yaotsu", + "yoro", + "annaka", + "chiyoda", + "fujioka", + "higashiagatsuma", + "isesaki", + "itakura", + "kanna", + "kanra", + "katashina", + "kawaba", + "kiryu", + "kusatsu", + "maebashi", + "meiwa", + "midori", + "minakami", + "naganohara", + "nakanojo", + "nanmoku", + "numata", + "oizumi", + "ora", + "ota", + "shibukawa", + "shimonita", + "shinto", + "showa", + "takasaki", + "takayama", + "tamamura", + "tatebayashi", + "tomioka", + "tsukiyono", + "tsumagoi", + "ueno", + "yoshioka", + "asaminami", + "daiwa", + "etajima", + "fuchu", + "fukuyama", + "hatsukaichi", + "higashihiroshima", + "hongo", + "jinsekikogen", + "kaita", + "kui", + "kumano", + "kure", + "mihara", + "miyoshi", + "naka", + "onomichi", + "osakikamijima", + "otake", + "saka", + "sera", + "seranishi", + "shinichi", + "shobara", + "takehara", + "abashiri", + "abira", + "aibetsu", + "akabira", + "akkeshi", + "asahikawa", + "ashibetsu", + "ashoro", + "assabu", + "atsuma", + "bibai", + "biei", + "bifuka", + "bihoro", + "biratori", + "chippubetsu", + "chitose", + "date", + "ebetsu", + "embetsu", + "eniwa", + "erimo", + "esan", + "esashi", + "fukagawa", + "fukushima", + "furano", + "furubira", + "haboro", + "hakodate", + "hamatonbetsu", + "hidaka", + "higashikagura", + "higashikawa", + "hiroo", + "hokuryu", + "hokuto", + "honbetsu", + "horokanai", + "horonobe", + "ikeda", + "imakane", + "ishikari", + "iwamizawa", + "iwanai", + "kamifurano", + "kamikawa", + "kamishihoro", + "kamisunagawa", + "kamoenai", + "kayabe", + "kembuchi", + "kikonai", + "kimobetsu", + "kitahiroshima", + "kitami", + "kiyosato", + "koshimizu", + "kunneppu", + "kuriyama", + "kuromatsunai", + "kushiro", + "kutchan", + "kyowa", + "mashike", + "matsumae", + "mikasa", + "minamifurano", + "mombetsu", + "moseushi", + "mukawa", + "muroran", + "naie", + "nakagawa", + "nakasatsunai", + "nakatombetsu", + "nanae", + "nanporo", + "nayoro", + "nemuro", + "niikappu", + "niki", + "nishiokoppe", + "noboribetsu", + "numata", + "obihiro", + "obira", + "oketo", + "okoppe", + "otaru", + "otobe", + "otofuke", + "otoineppu", + "oumu", + "ozora", + "pippu", + "rankoshi", + "rebun", + "rikubetsu", + "rishiri", + "rishirifuji", + "saroma", + "sarufutsu", + "shakotan", + "shari", + "shibecha", + "shibetsu", + "shikabe", + "shikaoi", + "shimamaki", + "shimizu", + "shimokawa", + "shinshinotsu", + "shintoku", + "shiranuka", + "shiraoi", + "shiriuchi", + "sobetsu", + "sunagawa", + "taiki", + "takasu", + "takikawa", + "takinoue", + "teshikaga", + "tobetsu", + "tohma", + "tomakomai", + "tomari", + "toya", + "toyako", + "toyotomi", + "toyoura", + "tsubetsu", + "tsukigata", + "urakawa", + "urausu", + "uryu", + "utashinai", + "wakkanai", + "wassamu", + "yakumo", + "yoichi", + "aioi", + "akashi", + "ako", + "amagasaki", + "aogaki", + "asago", + "ashiya", + "awaji", + "fukusaki", + "goshiki", + "harima", + "himeji", + "ichikawa", + "inagawa", + "itami", + "kakogawa", + "kamigori", + "kamikawa", + "kasai", + "kasuga", + "kawanishi", + "miki", + "minamiawaji", + "nishinomiya", + "nishiwaki", + "ono", + "sanda", + "sannan", + "sasayama", + "sayo", + "shingu", + "shinonsen", + "shiso", + "sumoto", + "taishi", + "taka", + "takarazuka", + "takasago", + "takino", + "tamba", + "tatsuno", + "toyooka", + "yabu", + "yashiro", + "yoka", + "yokawa", + "ami", + "asahi", + "bando", + "chikusei", + "daigo", + "fujishiro", + "hitachi", + "hitachinaka", + "hitachiomiya", + "hitachiota", + "ibaraki", + "ina", + "inashiki", + "itako", + "iwama", + "joso", + "kamisu", + "kasama", + "kashima", + "kasumigaura", + "koga", + "miho", + "mito", + "moriya", + "naka", + "namegata", + "oarai", + "ogawa", + "omitama", + "ryugasaki", + "sakai", + "sakuragawa", + "shimodate", + "shimotsuma", + "shirosato", + "sowa", + "suifu", + "takahagi", + "tamatsukuri", + "tokai", + "tomobe", + "tone", + "toride", + "tsuchiura", + "tsukuba", + "uchihara", + "ushiku", + "yachiyo", + "yamagata", + "yawara", + "yuki", + "anamizu", + "hakui", + "hakusan", + "kaga", + "kahoku", + "kanazawa", + "kawakita", + "komatsu", + "nakanoto", + "nanao", + "nomi", + "nonoichi", + "noto", + "shika", + "suzu", + "tsubata", + "tsurugi", + "uchinada", + "wajima", + "fudai", + "fujisawa", + "hanamaki", + "hiraizumi", + "hirono", + "ichinohe", + "ichinoseki", + "iwaizumi", + "iwate", + "joboji", + "kamaishi", + "kanegasaki", + "karumai", + "kawai", + "kitakami", + "kuji", + "kunohe", + "kuzumaki", + "miyako", + "mizusawa", + "morioka", + "ninohe", + "noda", + "ofunato", + "oshu", + "otsuchi", + "rikuzentakata", + "shiwa", + "shizukuishi", + "sumita", + "tanohata", + "tono", + "yahaba", + "yamada", + "ayagawa", + "higashikagawa", + "kanonji", + "kotohira", + "manno", + "marugame", + "mitoyo", + "naoshima", + "sanuki", + "tadotsu", + "takamatsu", + "tonosho", + "uchinomi", + "utazu", + "zentsuji", + "akune", + "amami", + "hioki", + "isa", + "isen", + "izumi", + "kagoshima", + "kanoya", + "kawanabe", + "kinko", + "kouyama", + "makurazaki", + "matsumoto", + "minamitane", + "nakatane", + "nishinoomote", + "satsumasendai", + "soo", + "tarumizu", + "yusui", + "aikawa", + "atsugi", + "ayase", + "chigasaki", + "ebina", + "fujisawa", + "hadano", + "hakone", + "hiratsuka", + "isehara", + "kaisei", + "kamakura", + "kiyokawa", + "matsuda", + "minamiashigara", + "miura", + "nakai", + "ninomiya", + "odawara", + "oi", + "oiso", + "sagamihara", + "samukawa", + "tsukui", + "yamakita", + "yamato", + "yokosuka", + "yugawara", + "zama", + "zushi", + "city", + "city", + "city", + "aki", + "geisei", + "hidaka", + "higashitsuno", + "ino", + "kagami", + "kami", + "kitagawa", + "kochi", + "mihara", + "motoyama", + "muroto", + "nahari", + "nakamura", + "nankoku", + "nishitosa", + "niyodogawa", + "ochi", + "okawa", + "otoyo", + "otsuki", + "sakawa", + "sukumo", + "susaki", + "tosa", + "tosashimizu", + "toyo", + "tsuno", + "umaji", + "yasuda", + "yusuhara", + "amakusa", + "arao", + "aso", + "choyo", + "gyokuto", + "kamiamakusa", + "kikuchi", + "kumamoto", + "mashiki", + "mifune", + "minamata", + "minamioguni", + "nagasu", + "nishihara", + "oguni", + "ozu", + "sumoto", + "takamori", + "uki", + "uto", + "yamaga", + "yamato", + "yatsushiro", + "ayabe", + "fukuchiyama", + "higashiyama", + "ide", + "ine", + "joyo", + "kameoka", + "kamo", + "kita", + "kizu", + "kumiyama", + "kyotamba", + "kyotanabe", + "kyotango", + "maizuru", + "minami", + "minamiyamashiro", + "miyazu", + "muko", + "nagaokakyo", + "nakagyo", + "nantan", + "oyamazaki", + "sakyo", + "seika", + "tanabe", + "uji", + "ujitawara", + "wazuka", + "yamashina", + "yawata", + "asahi", + "inabe", + "ise", + "kameyama", + "kawagoe", + "kiho", + "kisosaki", + "kiwa", + "komono", + "kumano", + "kuwana", + "matsusaka", + "meiwa", + "mihama", + "minamiise", + "misugi", + "miyama", + "nabari", + "shima", + "suzuka", + "tado", + "taiki", + "taki", + "tamaki", + "toba", + "tsu", + "udono", + "ureshino", + "watarai", + "yokkaichi", + "furukawa", + "higashimatsushima", + "ishinomaki", + "iwanuma", + "kakuda", + "kami", + "kawasaki", + "marumori", + "matsushima", + "minamisanriku", + "misato", + "murata", + "natori", + "ogawara", + "ohira", + "onagawa", + "osaki", + "rifu", + "semine", + "shibata", + "shichikashuku", + "shikama", + "shiogama", + "shiroishi", + "tagajo", + "taiwa", + "tome", + "tomiya", + "wakuya", + "watari", + "yamamoto", + "zao", + "aya", + "ebino", + "gokase", + "hyuga", + "kadogawa", + "kawaminami", + "kijo", + "kitagawa", + "kitakata", + "kitaura", + "kobayashi", + "kunitomi", + "kushima", + "mimata", + "miyakonojo", + "miyazaki", + "morotsuka", + "nichinan", + "nishimera", + "nobeoka", + "saito", + "shiiba", + "shintomi", + "takaharu", + "takanabe", + "takazaki", + "tsuno", + "achi", + "agematsu", + "anan", + "aoki", + "asahi", + "azumino", + "chikuhoku", + "chikuma", + "chino", + "fujimi", + "hakuba", + "hara", + "hiraya", + "iida", + "iijima", + "iiyama", + "iizuna", + "ikeda", + "ikusaka", + "ina", + "karuizawa", + "kawakami", + "kiso", + "kisofukushima", + "kitaaiki", + "komagane", + "komoro", + "matsukawa", + "matsumoto", + "miasa", + "minamiaiki", + "minamimaki", + "minamiminowa", + "minowa", + "miyada", + "miyota", + "mochizuki", + "nagano", + "nagawa", + "nagiso", + "nakagawa", + "nakano", + "nozawaonsen", + "obuse", + "ogawa", + "okaya", + "omachi", + "omi", + "ookuwa", + "ooshika", + "otaki", + "otari", + "sakae", + "sakaki", + "saku", + "sakuho", + "shimosuwa", + "shinanomachi", + "shiojiri", + "suwa", + "suzaka", + "takagi", + "takamori", + "takayama", + "tateshina", + "tatsuno", + "togakushi", + "togura", + "tomi", + "ueda", + "wada", + "yamagata", + "yamanouchi", + "yasaka", + "yasuoka", + "chijiwa", + "futsu", + "goto", + "hasami", + "hirado", + "iki", + "isahaya", + "kawatana", + "kuchinotsu", + "matsuura", + "nagasaki", + "obama", + "omura", + "oseto", + "saikai", + "sasebo", + "seihi", + "shimabara", + "shinkamigoto", + "togitsu", + "tsushima", + "unzen", + "city", + "ando", + "gose", + "heguri", + "higashiyoshino", + "ikaruga", + "ikoma", + "kamikitayama", + "kanmaki", + "kashiba", + "kashihara", + "katsuragi", + "kawai", + "kawakami", + "kawanishi", + "koryo", + "kurotaki", + "mitsue", + "miyake", + "nara", + "nosegawa", + "oji", + "ouda", + "oyodo", + "sakurai", + "sango", + "shimoichi", + "shimokitayama", + "shinjo", + "soni", + "takatori", + "tawaramoto", + "tenkawa", + "tenri", + "uda", + "yamatokoriyama", + "yamatotakada", + "yamazoe", + "yoshino", + "aga", + "agano", + "gosen", + "itoigawa", + "izumozaki", + "joetsu", + "kamo", + "kariwa", + "kashiwazaki", + "minamiuonuma", + "mitsuke", + "muika", + "murakami", + "myoko", + "nagaoka", + "niigata", + "ojiya", + "omi", + "sado", + "sanjo", + "seiro", + "seirou", + "sekikawa", + "shibata", + "tagami", + "tainai", + "tochio", + "tokamachi", + "tsubame", + "tsunan", + "uonuma", + "yahiko", + "yoita", + "yuzawa", + "beppu", + "bungoono", + "bungotakada", + "hasama", + "hiji", + "himeshima", + "hita", + "kamitsue", + "kokonoe", + "kuju", + "kunisaki", + "kusu", + "oita", + "saiki", + "taketa", + "tsukumi", + "usa", + "usuki", + "yufu", + "akaiwa", + "asakuchi", + "bizen", + "hayashima", + "ibara", + "kagamino", + "kasaoka", + "kibichuo", + "kumenan", + "kurashiki", + "maniwa", + "misaki", + "nagi", + "niimi", + "nishiawakura", + "okayama", + "satosho", + "setouchi", + "shinjo", + "shoo", + "soja", + "takahashi", + "tamano", + "tsuyama", + "wake", + "yakage", + "aguni", + "ginowan", + "ginoza", + "gushikami", + "haebaru", + "higashi", + "hirara", + "iheya", + "ishigaki", + "ishikawa", + "itoman", + "izena", + "kadena", + "kin", + "kitadaito", + "kitanakagusuku", + "kumejima", + "kunigami", + "minamidaito", + "motobu", + "nago", + "naha", + "nakagusuku", + "nakijin", + "nanjo", + "nishihara", + "ogimi", + "okinawa", + "onna", + "shimoji", + "taketomi", + "tarama", + "tokashiki", + "tomigusuku", + "tonaki", + "urasoe", + "uruma", + "yaese", + "yomitan", + "yonabaru", + "yonaguni", + "zamami", + "abeno", + "chihayaakasaka", + "chuo", + "daito", + "fujiidera", + "habikino", + "hannan", + "higashiosaka", + "higashisumiyoshi", + "higashiyodogawa", + "hirakata", + "ibaraki", + "ikeda", + "izumi", + "izumiotsu", + "izumisano", + "kadoma", + "kaizuka", + "kanan", + "kashiwara", + "katano", + "kawachinagano", + "kishiwada", + "kita", + "kumatori", + "matsubara", + "minato", + "minoh", + "misaki", + "moriguchi", + "neyagawa", + "nishi", + "nose", + "osakasayama", + "sakai", + "sayama", + "sennan", + "settsu", + "shijonawate", + "shimamoto", + "suita", + "tadaoka", + "taishi", + "tajiri", + "takaishi", + "takatsuki", + "tondabayashi", + "toyonaka", + "toyono", + "yao", + "ariake", + "arita", + "fukudomi", + "genkai", + "hamatama", + "hizen", + "imari", + "kamimine", + "kanzaki", + "karatsu", + "kashima", + "kitagata", + "kitahata", + "kiyama", + "kouhoku", + "kyuragi", + "nishiarita", + "ogi", + "omachi", + "ouchi", + "saga", + "shiroishi", + "taku", + "tara", + "tosu", + "yoshinogari", + "arakawa", + "asaka", + "chichibu", + "fujimi", + "fujimino", + "fukaya", + "hanno", + "hanyu", + "hasuda", + "hatogaya", + "hatoyama", + "hidaka", + "higashichichibu", + "higashimatsuyama", + "honjo", + "ina", + "iruma", + "iwatsuki", + "kamiizumi", + "kamikawa", + "kamisato", + "kasukabe", + "kawagoe", + "kawaguchi", + "kawajima", + "kazo", + "kitamoto", + "koshigaya", + "kounosu", + "kuki", + "kumagaya", + "matsubushi", + "minano", + "misato", + "miyashiro", + "miyoshi", + "moroyama", + "nagatoro", + "namegawa", + "niiza", + "ogano", + "ogawa", + "ogose", + "okegawa", + "omiya", + "otaki", + "ranzan", + "ryokami", + "saitama", + "sakado", + "satte", + "sayama", + "shiki", + "shiraoka", + "soka", + "sugito", + "toda", + "tokigawa", + "tokorozawa", + "tsurugashima", + "urawa", + "warabi", + "yashio", + "yokoze", + "yono", + "yorii", + "yoshida", + "yoshikawa", + "yoshimi", + "city", + "city", + "aisho", + "gamo", + "higashiomi", + "hikone", + "koka", + "konan", + "kosei", + "koto", + "kusatsu", + "maibara", + "moriyama", + "nagahama", + "nishiazai", + "notogawa", + "omihachiman", + "otsu", + "ritto", + "ryuoh", + "takashima", + "takatsuki", + "torahime", + "toyosato", + "yasu", + "akagi", + "ama", + "gotsu", + "hamada", + "higashiizumo", + "hikawa", + "hikimi", + "izumo", + "kakinoki", + "masuda", + "matsue", + "misato", + "nishinoshima", + "ohda", + "okinoshima", + "okuizumo", + "shimane", + "tamayu", + "tsuwano", + "unnan", + "yakumo", + "yasugi", + "yatsuka", + "arai", + "atami", + "fuji", + "fujieda", + "fujikawa", + "fujinomiya", + "fukuroi", + "gotemba", + "haibara", + "hamamatsu", + "higashiizu", + "ito", + "iwata", + "izu", + "izunokuni", + "kakegawa", + "kannami", + "kawanehon", + "kawazu", + "kikugawa", + "kosai", + "makinohara", + "matsuzaki", + "minamiizu", + "mishima", + "morimachi", + "nishiizu", + "numazu", + "omaezaki", + "shimada", + "shimizu", + "shimoda", + "shizuoka", + "susono", + "yaizu", + "yoshida", + "ashikaga", + "bato", + "haga", + "ichikai", + "iwafune", + "kaminokawa", + "kanuma", + "karasuyama", + "kuroiso", + "mashiko", + "mibu", + "moka", + "motegi", + "nasu", + "nasushiobara", + "nikko", + "nishikata", + "nogi", + "ohira", + "ohtawara", + "oyama", + "sakura", + "sano", + "shimotsuke", + "shioya", + "takanezawa", + "tochigi", + "tsuga", + "ujiie", + "utsunomiya", + "yaita", + "aizumi", + "anan", + "ichiba", + "itano", + "kainan", + "komatsushima", + "matsushige", + "mima", + "minami", + "miyoshi", + "mugi", + "nakagawa", + "naruto", + "sanagochi", + "shishikui", + "tokushima", + "wajiki", + "adachi", + "akiruno", + "akishima", + "aogashima", + "arakawa", + "bunkyo", + "chiyoda", + "chofu", + "chuo", + "edogawa", + "fuchu", + "fussa", + "hachijo", + "hachioji", + "hamura", + "higashikurume", + "higashimurayama", + "higashiyamato", + "hino", + "hinode", + "hinohara", + "inagi", + "itabashi", + "katsushika", + "kita", + "kiyose", + "kodaira", + "koganei", + "kokubunji", + "komae", + "koto", + "kouzushima", + "kunitachi", + "machida", + "meguro", + "minato", + "mitaka", + "mizuho", + "musashimurayama", + "musashino", + "nakano", + "nerima", + "ogasawara", + "okutama", + "ome", + "oshima", + "ota", + "setagaya", + "shibuya", + "shinagawa", + "shinjuku", + "suginami", + "sumida", + "tachikawa", + "taito", + "tama", + "toshima", + "chizu", + "hino", + "kawahara", + "koge", + "kotoura", + "misasa", + "nanbu", + "nichinan", + "sakaiminato", + "tottori", + "wakasa", + "yazu", + "yonago", + "asahi", + "fuchu", + "fukumitsu", + "funahashi", + "himi", + "imizu", + "inami", + "johana", + "kamiichi", + "kurobe", + "nakaniikawa", + "namerikawa", + "nanto", + "nyuzen", + "oyabe", + "taira", + "takaoka", + "tateyama", + "toga", + "tonami", + "toyama", + "unazuki", + "uozu", + "yamada", + "arida", + "aridagawa", + "gobo", + "hashimoto", + "hidaka", + "hirogawa", + "inami", + "iwade", + "kainan", + "kamitonda", + "katsuragi", + "kimino", + "kinokawa", + "kitayama", + "koya", + "koza", + "kozagawa", + "kudoyama", + "kushimoto", + "mihama", + "misato", + "nachikatsuura", + "shingu", + "shirahama", + "taiji", + "tanabe", + "wakayama", + "yuasa", + "yura", + "asahi", + "funagata", + "higashine", + "iide", + "kahoku", + "kaminoyama", + "kaneyama", + "kawanishi", + "mamurogawa", + "mikawa", + "murayama", + "nagai", + "nakayama", + "nanyo", + "nishikawa", + "obanazawa", + "oe", + "oguni", + "ohkura", + "oishida", + "sagae", + "sakata", + "sakegawa", + "shinjo", + "shirataka", + "shonai", + "takahata", + "tendo", + "tozawa", + "tsuruoka", + "yamagata", + "yamanobe", + "yonezawa", + "yuza", + "abu", + "hagi", + "hikari", + "hofu", + "iwakuni", + "kudamatsu", + "mitou", + "nagato", + "oshima", + "shimonoseki", + "shunan", + "tabuse", + "tokuyama", + "toyota", + "ube", + "yuu", + "chuo", + "doshi", + "fuefuki", + "fujikawa", + "fujikawaguchiko", + "fujiyoshida", + "hayakawa", + "hokuto", + "ichikawamisato", + "kai", + "kofu", + "koshu", + "kosuge", + "minami-alps", + "minobu", + "nakamichi", + "nanbu", + "narusawa", + "nirasaki", + "nishikatsura", + "oshino", + "otsuki", + "showa", + "tabayama", + "tsuru", + "uenohara", + "yamanakako", + "yamanashi", + "city", + "co", + "blogspot", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "biz", + "com", + "edu", + "gov", + "info", + "net", + "org", + "ass", + "asso", + "com", + "coop", + "edu", + "gouv", + "gov", + "medecin", + "mil", + "nom", + "notaires", + "org", + "pharmaciens", + "prd", + "presse", + "tm", + "veterinaire", + "edu", + "gov", + "net", + "org", + "com", + "edu", + "gov", + "org", + "rep", + "tra", + "ac", + "blogspot", + "busan", + "chungbuk", + "chungnam", + "co", + "daegu", + "daejeon", + "es", + "gangwon", + "go", + "gwangju", + "gyeongbuk", + "gyeonggi", + "gyeongnam", + "hs", + "incheon", + "jeju", + "jeonbuk", + "jeonnam", + "kg", + "mil", + "ms", + "ne", + "or", + "pe", + "re", + "sc", + "seoul", + "ulsan", + "co", + "edu", + "com", + "edu", + "gov", + "net", + "org", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "bnr", + "c", + "com", + "edu", + "gov", + "info", + "int", + "net", + "org", + "per", + "static", + "dev", + "sites", + "com", + "edu", + "gov", + "net", + "org", + "co", + "com", + "edu", + "gov", + "net", + "org", + "oy", + "blogspot", + "cyon", + "mypep", + "ac", + "assn", + "com", + "edu", + "gov", + "grp", + "hotel", + "int", + "ltd", + "net", + "ngo", + "org", + "sch", + "soc", + "web", + "com", + "edu", + "gov", + "net", + "org", + "co", + "org", + "blogspot", + "gov", + "blogspot", + "asn", + "com", + "conf", + "edu", + "gov", + "id", + "mil", + "net", + "org", + "com", + "edu", + "gov", + "id", + "med", + "net", + "org", + "plc", + "sch", + "ac", + "co", + "gov", + "net", + "org", + "press", + "router", + "asso", + "tm", + "blogspot", + "ac", + "brasilia", + "co", + "daplie", + "ddns", + "diskstation", + "dnsfor", + "dscloud", + "edu", + "gov", + "hopto", + "i234", + "its", + "loginto", + "myds", + "net", + "noip", + "org", + "priv", + "synology", + "webhop", + "yombo", + "co", + "com", + "edu", + "gov", + "mil", + "nom", + "org", + "prd", + "tm", + "blogspot", + "com", + "edu", + "gov", + "inf", + "name", + "net", + "org", + "com", + "edu", + "gouv", + "gov", + "net", + "org", + "presse", + "edu", + "gov", + "nyc", + "org", + "com", + "edu", + "gov", + "net", + "org", + "dscloud", + "blogspot", + "gov", + "com", + "edu", + "gov", + "net", + "org", + "com", + "edu", + "net", + "org", + "blogspot", + "ac", + "co", + "com", + "gov", + "net", + "or", + "org", + "academy", + "agriculture", + "air", + "airguard", + "alabama", + "alaska", + "amber", + "ambulance", + "american", + "americana", + "americanantiques", + "americanart", + "amsterdam", + "and", + "annefrank", + "anthro", + "anthropology", + "antiques", + "aquarium", + "arboretum", + "archaeological", + "archaeology", + "architecture", + "art", + "artanddesign", + "artcenter", + "artdeco", + "arteducation", + "artgallery", + "arts", + "artsandcrafts", + "asmatart", + "assassination", + "assisi", + "association", + "astronomy", + "atlanta", + "austin", + "australia", + "automotive", + "aviation", + "axis", + "badajoz", + "baghdad", + "bahn", + "bale", + "baltimore", + "barcelona", + "baseball", + "basel", + "baths", + "bauern", + "beauxarts", + "beeldengeluid", + "bellevue", + "bergbau", + "berkeley", + "berlin", + "bern", + "bible", + "bilbao", + "bill", + "birdart", + "birthplace", + "bonn", + "boston", + "botanical", + "botanicalgarden", + "botanicgarden", + "botany", + "brandywinevalley", + "brasil", + "bristol", + "british", + "britishcolumbia", + "broadcast", + "brunel", + "brussel", + "brussels", + "bruxelles", + "building", + "burghof", + "bus", + "bushey", + "cadaques", + "california", + "cambridge", + "can", + "canada", + "capebreton", + "carrier", + "cartoonart", + "casadelamoneda", + "castle", + "castres", + "celtic", + "center", + "chattanooga", + "cheltenham", + "chesapeakebay", + "chicago", + "children", + "childrens", + "childrensgarden", + "chiropractic", + "chocolate", + "christiansburg", + "cincinnati", + "cinema", + "circus", + "civilisation", + "civilization", + "civilwar", + "clinton", + "clock", + "coal", + "coastaldefence", + "cody", + "coldwar", + "collection", + "colonialwilliamsburg", + "coloradoplateau", + "columbia", + "columbus", + "communication", + "communications", + "community", + "computer", + "computerhistory", + "contemporary", + "contemporaryart", + "convent", + "copenhagen", + "corporation", + "corvette", + "costume", + "countryestate", + "county", + "crafts", + "cranbrook", + "creation", + "cultural", + "culturalcenter", + "culture", + "cyber", + "cymru", + "dali", + "dallas", + "database", + "ddr", + "decorativearts", + "delaware", + "delmenhorst", + "denmark", + "depot", + "design", + "detroit", + "dinosaur", + "discovery", + "dolls", + "donostia", + "durham", + "eastafrica", + "eastcoast", + "education", + "educational", + "egyptian", + "eisenbahn", + "elburg", + "elvendrell", + "embroidery", + "encyclopedic", + "england", + "entomology", + "environment", + "environmentalconservation", + "epilepsy", + "essex", + "estate", + "ethnology", + "exeter", + "exhibition", + "family", + "farm", + "farmequipment", + "farmers", + "farmstead", + "field", + "figueres", + "filatelia", + "film", + "fineart", + "finearts", + "finland", + "flanders", + "florida", + "force", + "fortmissoula", + "fortworth", + "foundation", + "francaise", + "frankfurt", + "franziskaner", + "freemasonry", + "freiburg", + "fribourg", + "frog", + "fundacio", + "furniture", + "gallery", + "garden", + "gateway", + "geelvinck", + "gemological", + "geology", + "georgia", + "giessen", + "glas", + "glass", + "gorge", + "grandrapids", + "graz", + "guernsey", + "halloffame", + "hamburg", + "handson", + "harvestcelebration", + "hawaii", + "health", + "heimatunduhren", + "hellas", + "helsinki", + "hembygdsforbund", + "heritage", + "histoire", + "historical", + "historicalsociety", + "historichouses", + "historisch", + "historisches", + "history", + "historyofscience", + "horology", + "house", + "humanities", + "illustration", + "imageandsound", + "indian", + "indiana", + "indianapolis", + "indianmarket", + "intelligence", + "interactive", + "iraq", + "iron", + "isleofman", + "jamison", + "jefferson", + "jerusalem", + "jewelry", + "jewish", + "jewishart", + "jfk", + "journalism", + "judaica", + "judygarland", + "juedisches", + "juif", + "karate", + "karikatur", + "kids", + "koebenhavn", + "koeln", + "kunst", + "kunstsammlung", + "kunstunddesign", + "labor", + "labour", + "lajolla", + "lancashire", + "landes", + "lans", + "larsson", + "lewismiller", + "lincoln", + "linz", + "living", + "livinghistory", + "localhistory", + "london", + "losangeles", + "louvre", + "loyalist", + "lucerne", + "luxembourg", + "luzern", + "mad", + "madrid", + "mallorca", + "manchester", + "mansion", + "mansions", + "manx", + "marburg", + "maritime", + "maritimo", + "maryland", + "marylhurst", + "media", + "medical", + "medizinhistorisches", + "meeres", + "memorial", + "mesaverde", + "michigan", + "midatlantic", + "military", + "mill", + "miners", + "mining", + "minnesota", + "missile", + "missoula", + "modern", + "moma", + "money", + "monmouth", + "monticello", + "montreal", + "moscow", + "motorcycle", + "muenchen", + "muenster", + "mulhouse", + "muncie", + "museet", + "museumcenter", + "museumvereniging", + "music", + "national", + "nationalfirearms", + "nationalheritage", + "nativeamerican", + "naturalhistory", + "naturalhistorymuseum", + "naturalsciences", + "nature", + "naturhistorisches", + "natuurwetenschappen", + "naumburg", + "naval", + "nebraska", + "neues", + "newhampshire", + "newjersey", + "newmexico", + "newport", + "newspaper", + "newyork", + "niepce", + "norfolk", + "north", + "nrw", + "nuernberg", + "nuremberg", + "nyc", + "nyny", + "oceanographic", + "oceanographique", + "omaha", + "online", + "ontario", + "openair", + "oregon", + "oregontrail", + "otago", + "oxford", + "pacific", + "paderborn", + "palace", + "paleo", + "palmsprings", + "panama", + "paris", + "pasadena", + "pharmacy", + "philadelphia", + "philadelphiaarea", + "philately", + "phoenix", + "photography", + "pilots", + "pittsburgh", + "planetarium", + "plantation", + "plants", + "plaza", + "portal", + "portland", + "portlligat", + "posts-and-telecommunications", + "preservation", + "presidio", + "press", + "project", + "public", + "pubol", + "quebec", + "railroad", + "railway", + "research", + "resistance", + "riodejaneiro", + "rochester", + "rockart", + "roma", + "russia", + "saintlouis", + "salem", + "salvadordali", + "salzburg", + "sandiego", + "sanfrancisco", + "santabarbara", + "santacruz", + "santafe", + "saskatchewan", + "satx", + "savannahga", + "schlesisches", + "schoenbrunn", + "schokoladen", + "school", + "schweiz", + "science", + "science-fiction", + "scienceandhistory", + "scienceandindustry", + "sciencecenter", + "sciencecenters", + "sciencehistory", + "sciences", + "sciencesnaturelles", + "scotland", + "seaport", + "settlement", + "settlers", + "shell", + "sherbrooke", + "sibenik", + "silk", + "ski", + "skole", + "society", + "sologne", + "soundandvision", + "southcarolina", + "southwest", + "space", + "spy", + "square", + "stadt", + "stalbans", + "starnberg", + "state", + "stateofdelaware", + "station", + "steam", + "steiermark", + "stjohn", + "stockholm", + "stpetersburg", + "stuttgart", + "suisse", + "surgeonshall", + "surrey", + "svizzera", + "sweden", + "sydney", + "tank", + "tcm", + "technology", + "telekommunikation", + "television", + "texas", + "textile", + "theater", + "time", + "timekeeping", + "topology", + "torino", + "touch", + "town", + "transport", + "tree", + "trolley", + "trust", + "trustee", + "uhren", + "ulm", + "undersea", + "university", + "usa", + "usantiques", + "usarts", + "uscountryestate", + "usculture", + "usdecorativearts", + "usgarden", + "ushistory", + "ushuaia", + "uslivinghistory", + "utah", + "uvic", + "valley", + "vantaa", + "versailles", + "viking", + "village", + "virginia", + "virtual", + "virtuel", + "vlaanderen", + "volkenkunde", + "wales", + "wallonie", + "war", + "washingtondc", + "watch-and-clock", + "watchandclock", + "western", + "westfalen", + "whaling", + "wildlife", + "williamsburg", + "windmill", + "workshop", + "xn--9dbhblg6di", + "xn--comunicaes-v6a2o", + "xn--correios-e-telecomunicaes-ghc29a", + "xn--h1aegh", + "xn--lns-qla", + "york", + "yorkshire", + "yosemite", + "youth", + "zoological", + "zoology", + "aero", + "biz", + "com", + "coop", + "edu", + "gov", + "info", + "int", + "mil", + "museum", + "name", + "net", + "org", + "pro", + "ac", + "biz", + "co", + "com", + "coop", + "edu", + "gov", + "int", + "museum", + "net", + "org", + "blogspot", + "com", + "edu", + "gob", + "net", + "org", + "blogspot", + "com", + "edu", + "gov", + "mil", + "name", + "net", + "org", + "ac", + "adv", + "co", + "edu", + "gov", + "mil", + "net", + "org", + "ca", + "cc", + "co", + "com", + "dr", + "in", + "info", + "mobi", + "mx", + "name", + "or", + "org", + "pro", + "school", + "tv", + "us", + "ws", + "her", + "his", + "forgot", + "forgot", + "asso", + "alwaysdata", + "at-band-camp", + "azure-mobile", + "azurewebsites", + "blogdns", + "bounceme", + "broke-it", + "buyshouses", + "cdn77", + "cdn77-ssl", + "cloudapp", + "cloudfront", + "cloudfunctions", + "cryptonomic", + "ddns", + "dnsalias", + "dnsdojo", + "does-it", + "dontexist", + "dsmynas", + "dynalias", + "dynathome", + "dynv6", + "eating-organic", + "endofinternet", + "familyds", + "fastly", + "fastlylb", + "feste-ip", + "firewall-gateway", + "from-az", + "from-co", + "from-la", + "from-ny", + "gb", + "gets-it", + "ham-radio-op", + "homeftp", + "homeip", + "homelinux", + "homeunix", + "hu", + "in", + "in-the-band", + "is-a-chef", + "is-a-geek", + "isa-geek", + "jp", + "kicks-ass", + "knx-server", + "mydissent", + "myeffect", + "myfritz", + "mymediapc", + "mypsx", + "mysecuritycamera", + "nhlfan", + "no-ip", + "office-on-the", + "pgafan", + "podzone", + "privatizehealthinsurance", + "rackmaze", + "redirectme", + "scrapper-site", + "se", + "selfip", + "sells-it", + "servebbs", + "serveblog", + "serveftp", + "serveminecraft", + "static-access", + "sytes", + "t3l3p0rt", + "thruhere", + "uk", + "webhop", + "za", + "r", + "map", + "prod", + "ssl", + "a", + "global", + "a", + "b", + "global", + "map", + "alces", + "arts", + "com", + "firm", + "info", + "net", + "other", + "per", + "rec", + "store", + "web", + "com", + "edu", + "gov", + "i", + "mil", + "mobi", + "name", + "net", + "org", + "sch", + "blogspot", + "ac", + "biz", + "co", + "com", + "edu", + "gob", + "in", + "info", + "int", + "mil", + "net", + "nom", + "org", + "web", + "blogspot", + "bv", + "co", + "transurl", + "virtueeldomein", + "aa", + "aarborte", + "aejrie", + "afjord", + "agdenes", + "ah", + "akershus", + "aknoluokta", + "akrehamn", + "al", + "alaheadju", + "alesund", + "algard", + "alstahaug", + "alta", + "alvdal", + "amli", + "amot", + "andasuolo", + "andebu", + "andoy", + "ardal", + "aremark", + "arendal", + "arna", + "aseral", + "asker", + "askim", + "askoy", + "askvoll", + "asnes", + "audnedaln", + "aukra", + "aure", + "aurland", + "aurskog-holand", + "austevoll", + "austrheim", + "averoy", + "badaddja", + "bahcavuotna", + "bahccavuotna", + "baidar", + "bajddar", + "balat", + "balestrand", + "ballangen", + "balsfjord", + "bamble", + "bardu", + "barum", + "batsfjord", + "bearalvahki", + "beardu", + "beiarn", + "berg", + "bergen", + "berlevag", + "bievat", + "bindal", + "birkenes", + "bjarkoy", + "bjerkreim", + "bjugn", + "blogspot", + "bodo", + "bokn", + "bomlo", + "bremanger", + "bronnoy", + "bronnoysund", + "brumunddal", + "bryne", + "bu", + "budejju", + "buskerud", + "bygland", + "bykle", + "cahcesuolo", + "co", + "davvenjarga", + "davvesiida", + "deatnu", + "dep", + "dielddanuorri", + "divtasvuodna", + "divttasvuotna", + "donna", + "dovre", + "drammen", + "drangedal", + "drobak", + "dyroy", + "egersund", + "eid", + "eidfjord", + "eidsberg", + "eidskog", + "eidsvoll", + "eigersund", + "elverum", + "enebakk", + "engerdal", + "etne", + "etnedal", + "evenassi", + "evenes", + "evje-og-hornnes", + "farsund", + "fauske", + "fedje", + "fet", + "fetsund", + "fhs", + "finnoy", + "fitjar", + "fjaler", + "fjell", + "fla", + "flakstad", + "flatanger", + "flekkefjord", + "flesberg", + "flora", + "floro", + "fm", + "folkebibl", + "folldal", + "forde", + "forsand", + "fosnes", + "frana", + "fredrikstad", + "frei", + "frogn", + "froland", + "frosta", + "froya", + "fuoisku", + "fuossko", + "fusa", + "fylkesbibl", + "fyresdal", + "gaivuotna", + "galsa", + "gamvik", + "gangaviika", + "gaular", + "gausdal", + "giehtavuoatna", + "gildeskal", + "giske", + "gjemnes", + "gjerdrum", + "gjerstad", + "gjesdal", + "gjovik", + "gloppen", + "gol", + "gran", + "grane", + "granvin", + "gratangen", + "grimstad", + "grong", + "grue", + "gulen", + "guovdageaidnu", + "ha", + "habmer", + "hadsel", + "hagebostad", + "halden", + "halsa", + "hamar", + "hamaroy", + "hammarfeasta", + "hammerfest", + "hapmir", + "haram", + "hareid", + "harstad", + "hasvik", + "hattfjelldal", + "haugesund", + "hedmark", + "hemne", + "hemnes", + "hemsedal", + "herad", + "hitra", + "hjartdal", + "hjelmeland", + "hl", + "hm", + "hobol", + "hof", + "hokksund", + "hol", + "hole", + "holmestrand", + "holtalen", + "honefoss", + "hordaland", + "hornindal", + "horten", + "hoyanger", + "hoylandet", + "hurdal", + "hurum", + "hvaler", + "hyllestad", + "ibestad", + "idrett", + "inderoy", + "iveland", + "ivgu", + "jan-mayen", + "jessheim", + "jevnaker", + "jolster", + "jondal", + "jorpeland", + "kafjord", + "karasjohka", + "karasjok", + "karlsoy", + "karmoy", + "kautokeino", + "kirkenes", + "klabu", + "klepp", + "kommune", + "kongsberg", + "kongsvinger", + "kopervik", + "kraanghke", + "kragero", + "kristiansand", + "kristiansund", + "krodsherad", + "krokstadelva", + "kvafjord", + "kvalsund", + "kvam", + "kvanangen", + "kvinesdal", + "kvinnherad", + "kviteseid", + "kvitsoy", + "laakesvuemie", + "lahppi", + "langevag", + "lardal", + "larvik", + "lavagis", + "lavangen", + "leangaviika", + "lebesby", + "leikanger", + "leirfjord", + "leirvik", + "leka", + "leksvik", + "lenvik", + "lerdal", + "lesja", + "levanger", + "lier", + "lierne", + "lillehammer", + "lillesand", + "lindas", + "lindesnes", + "loabat", + "lodingen", + "lom", + "loppa", + "lorenskog", + "loten", + "lund", + "lunner", + "luroy", + "luster", + "lyngdal", + "lyngen", + "malatvuopmi", + "malselv", + "malvik", + "mandal", + "marker", + "marnardal", + "masfjorden", + "masoy", + "matta-varjjat", + "meland", + "meldal", + "melhus", + "meloy", + "meraker", + "midsund", + "midtre-gauldal", + "mil", + "mjondalen", + "mo-i-rana", + "moareke", + "modalen", + "modum", + "molde", + "more-og-romsdal", + "mosjoen", + "moskenes", + "moss", + "mosvik", + "mr", + "muosat", + "museum", + "naamesjevuemie", + "namdalseid", + "namsos", + "namsskogan", + "nannestad", + "naroy", + "narviika", + "narvik", + "naustdal", + "navuotna", + "nedre-eiker", + "nesna", + "nesodden", + "nesoddtangen", + "nesseby", + "nesset", + "nissedal", + "nittedal", + "nl", + "nord-aurdal", + "nord-fron", + "nord-odal", + "norddal", + "nordkapp", + "nordland", + "nordre-land", + "nordreisa", + "nore-og-uvdal", + "notodden", + "notteroy", + "nt", + "odda", + "of", + "oksnes", + "ol", + "omasvuotna", + "oppdal", + "oppegard", + "orkanger", + "orkdal", + "orland", + "orskog", + "orsta", + "osen", + "oslo", + "osoyro", + "osteroy", + "ostfold", + "ostre-toten", + "overhalla", + "ovre-eiker", + "oyer", + "oygarden", + "oystre-slidre", + "porsanger", + "porsangu", + "porsgrunn", + "priv", + "rade", + "radoy", + "rahkkeravju", + "raholt", + "raisa", + "rakkestad", + "ralingen", + "rana", + "randaberg", + "rauma", + "rendalen", + "rennebu", + "rennesoy", + "rindal", + "ringebu", + "ringerike", + "ringsaker", + "risor", + "rissa", + "rl", + "roan", + "rodoy", + "rollag", + "romsa", + "romskog", + "roros", + "rost", + "royken", + "royrvik", + "ruovat", + "rygge", + "salangen", + "salat", + "saltdal", + "samnanger", + "sandefjord", + "sandnes", + "sandnessjoen", + "sandoy", + "sarpsborg", + "sauda", + "sauherad", + "sel", + "selbu", + "selje", + "seljord", + "sf", + "siellak", + "sigdal", + "siljan", + "sirdal", + "skanit", + "skanland", + "skaun", + "skedsmo", + "skedsmokorset", + "ski", + "skien", + "skierva", + "skiptvet", + "skjak", + "skjervoy", + "skodje", + "slattum", + "smola", + "snaase", + "snasa", + "snillfjord", + "snoasa", + "sogndal", + "sogne", + "sokndal", + "sola", + "solund", + "somna", + "sondre-land", + "songdalen", + "sor-aurdal", + "sor-fron", + "sor-odal", + "sor-varanger", + "sorfold", + "sorreisa", + "sortland", + "sorum", + "spjelkavik", + "spydeberg", + "st", + "stange", + "stat", + "stathelle", + "stavanger", + "stavern", + "steigen", + "steinkjer", + "stjordal", + "stjordalshalsen", + "stokke", + "stor-elvdal", + "stord", + "stordal", + "storfjord", + "strand", + "stranda", + "stryn", + "sula", + "suldal", + "sund", + "sunndal", + "surnadal", + "svalbard", + "sveio", + "svelvik", + "sykkylven", + "tana", + "tananger", + "telemark", + "time", + "tingvoll", + "tinn", + "tjeldsund", + "tjome", + "tm", + "tokke", + "tolga", + "tonsberg", + "torsken", + "tr", + "trana", + "tranby", + "tranoy", + "troandin", + "trogstad", + "tromsa", + "tromso", + "trondheim", + "trysil", + "tvedestrand", + "tydal", + "tynset", + "tysfjord", + "tysnes", + "tysvar", + "ullensaker", + "ullensvang", + "ulvik", + "unjarga", + "utsira", + "va", + "vaapste", + "vadso", + "vaga", + "vagan", + "vagsoy", + "vaksdal", + "valle", + "vang", + "vanylven", + "vardo", + "varggat", + "varoy", + "vefsn", + "vega", + "vegarshei", + "vennesla", + "verdal", + "verran", + "vestby", + "vestfold", + "vestnes", + "vestre-slidre", + "vestre-toten", + "vestvagoy", + "vevelstad", + "vf", + "vgs", + "vik", + "vikna", + "vindafjord", + "voagat", + "volda", + "voss", + "vossevangen", + "xn--andy-ira", + "xn--asky-ira", + "xn--aurskog-hland-jnb", + "xn--avery-yua", + "xn--bdddj-mrabd", + "xn--bearalvhki-y4a", + "xn--berlevg-jxa", + "xn--bhcavuotna-s4a", + "xn--bhccavuotna-k7a", + "xn--bidr-5nac", + "xn--bievt-0qa", + "xn--bjarky-fya", + "xn--bjddar-pta", + "xn--blt-elab", + "xn--bmlo-gra", + "xn--bod-2na", + "xn--brnny-wuac", + "xn--brnnysund-m8ac", + "xn--brum-voa", + "xn--btsfjord-9za", + "xn--davvenjrga-y4a", + "xn--dnna-gra", + "xn--drbak-wua", + "xn--dyry-ira", + "xn--eveni-0qa01ga", + "xn--finny-yua", + "xn--fjord-lra", + "xn--fl-zia", + "xn--flor-jra", + "xn--frde-gra", + "xn--frna-woa", + "xn--frya-hra", + "xn--ggaviika-8ya47h", + "xn--gildeskl-g0a", + "xn--givuotna-8ya", + "xn--gjvik-wua", + "xn--gls-elac", + "xn--h-2fa", + "xn--hbmer-xqa", + "xn--hcesuolo-7ya35b", + "xn--hgebostad-g3a", + "xn--hmmrfeasta-s4ac", + "xn--hnefoss-q1a", + "xn--hobl-ira", + "xn--holtlen-hxa", + "xn--hpmir-xqa", + "xn--hyanger-q1a", + "xn--hylandet-54a", + "xn--indery-fya", + "xn--jlster-bya", + "xn--jrpeland-54a", + "xn--karmy-yua", + "xn--kfjord-iua", + "xn--klbu-woa", + "xn--koluokta-7ya57h", + "xn--krager-gya", + "xn--kranghke-b0a", + "xn--krdsherad-m8a", + "xn--krehamn-dxa", + "xn--krjohka-hwab49j", + "xn--ksnes-uua", + "xn--kvfjord-nxa", + "xn--kvitsy-fya", + "xn--kvnangen-k0a", + "xn--l-1fa", + "xn--laheadju-7ya", + "xn--langevg-jxa", + "xn--ldingen-q1a", + "xn--leagaviika-52b", + "xn--lesund-hua", + "xn--lgrd-poac", + "xn--lhppi-xqa", + "xn--linds-pra", + "xn--loabt-0qa", + "xn--lrdal-sra", + "xn--lrenskog-54a", + "xn--lt-liac", + "xn--lten-gra", + "xn--lury-ira", + "xn--mely-ira", + "xn--merker-kua", + "xn--mjndalen-64a", + "xn--mlatvuopmi-s4a", + "xn--mli-tla", + "xn--mlselv-iua", + "xn--moreke-jua", + "xn--mosjen-eya", + "xn--mot-tla", + "xn--mre-og-romsdal-qqb", + "xn--msy-ula0h", + "xn--mtta-vrjjat-k7af", + "xn--muost-0qa", + "xn--nmesjevuemie-tcba", + "xn--nry-yla5g", + "xn--nttery-byae", + "xn--nvuotna-hwa", + "xn--oppegrd-ixa", + "xn--ostery-fya", + "xn--osyro-wua", + "xn--porsgu-sta26f", + "xn--rady-ira", + "xn--rdal-poa", + "xn--rde-ula", + "xn--rdy-0nab", + "xn--rennesy-v1a", + "xn--rhkkervju-01af", + "xn--rholt-mra", + "xn--risa-5na", + "xn--risr-ira", + "xn--rland-uua", + "xn--rlingen-mxa", + "xn--rmskog-bya", + "xn--rros-gra", + "xn--rskog-uua", + "xn--rst-0na", + "xn--rsta-fra", + "xn--ryken-vua", + "xn--ryrvik-bya", + "xn--s-1fa", + "xn--sandnessjen-ogb", + "xn--sandy-yua", + "xn--seral-lra", + "xn--sgne-gra", + "xn--skierv-uta", + "xn--skjervy-v1a", + "xn--skjk-soa", + "xn--sknit-yqa", + "xn--sknland-fxa", + "xn--slat-5na", + "xn--slt-elab", + "xn--smla-hra", + "xn--smna-gra", + "xn--snase-nra", + "xn--sndre-land-0cb", + "xn--snes-poa", + "xn--snsa-roa", + "xn--sr-aurdal-l8a", + "xn--sr-fron-q1a", + "xn--sr-odal-q1a", + "xn--sr-varanger-ggb", + "xn--srfold-bya", + "xn--srreisa-q1a", + "xn--srum-gra", + "xn--stfold-9xa", + "xn--stjrdal-s1a", + "xn--stjrdalshalsen-sqb", + "xn--stre-toten-zcb", + "xn--tjme-hra", + "xn--tnsberg-q1a", + "xn--trany-yua", + "xn--trgstad-r1a", + "xn--trna-woa", + "xn--troms-zua", + "xn--tysvr-vra", + "xn--unjrga-rta", + "xn--vads-jra", + "xn--vard-jra", + "xn--vegrshei-c0a", + "xn--vestvgy-ixa6o", + "xn--vg-yiab", + "xn--vgan-qoa", + "xn--vgsy-qoa0j", + "xn--vre-eiker-k8a", + "xn--vrggt-xqad", + "xn--vry-yla5g", + "xn--yer-zna", + "xn--ygarden-p1a", + "xn--ystre-slidre-ujb", + "gs", + "gs", + "nes", + "gs", + "nes", + "gs", + "os", + "valer", + "xn--vler-qoa", + "gs", + "gs", + "os", + "gs", + "heroy", + "sande", + "gs", + "gs", + "bo", + "heroy", + "xn--b-5ga", + "xn--hery-ira", + "gs", + "gs", + "gs", + "gs", + "valer", + "gs", + "gs", + "gs", + "gs", + "bo", + "xn--b-5ga", + "gs", + "gs", + "gs", + "sande", + "gs", + "sande", + "xn--hery-ira", + "xn--vler-qoa", + "biz", + "com", + "edu", + "gov", + "info", + "net", + "org", + "merseine", + "mine", + "shacknet", + "ac", + "co", + "cri", + "geek", + "gen", + "govt", + "health", + "iwi", + "kiwi", + "maori", + "mil", + "net", + "org", + "parliament", + "school", + "xn--mori-qsa", + "blogspot", + "co", + "com", + "edu", + "gov", + "med", + "museum", + "net", + "org", + "pro", + "homelink", + "ae", + "amune", + "blogdns", + "blogsite", + "bmoattachments", + "boldlygoingnowhere", + "cable-modem", + "cdn77", + "cdn77-secure", + "certmgr", + "cloudns", + "collegefan", + "couchpotatofries", + "ddnss", + "diskstation", + "dnsalias", + "dnsdojo", + "doesntexist", + "dontexist", + "doomdns", + "dsmynas", + "duckdns", + "dvrdns", + "dynalias", + "dyndns", + "endofinternet", + "endoftheinternet", + "eu", + "familyds", + "from-me", + "game-host", + "gotdns", + "hepforge", + "hk", + "hobby-site", + "homedns", + "homeftp", + "homelinux", + "homeunix", + "hopto", + "is-a-bruinsfan", + "is-a-candidate", + "is-a-celticsfan", + "is-a-chef", + "is-a-geek", + "is-a-knight", + "is-a-linux-user", + "is-a-patsfan", + "is-a-soxfan", + "is-found", + "is-lost", + "is-saved", + "is-very-bad", + "is-very-evil", + "is-very-good", + "is-very-nice", + "is-very-sweet", + "isa-geek", + "js", + "kicks-ass", + "misconfused", + "mlbfan", + "my-firewall", + "myfirewall", + "myftp", + "mysecuritycamera", + "nflfan", + "no-ip", + "pimienta", + "podzone", + "poivron", + "potager", + "read-books", + "readmyblog", + "selfip", + "sellsyourhome", + "servebbs", + "serveftp", + "servegame", + "spdns", + "stuff-4-sale", + "sweetpepper", + "tunk", + "tuxfamily", + "ufcfan", + "us", + "webhop", + "wmflabs", + "za", + "zapto", + "tele", + "c", + "rsc", + "origin", + "ssl", + "go", + "home", + "al", + "asso", + "at", + "au", + "be", + "bg", + "ca", + "cd", + "ch", + "cn", + "cy", + "cz", + "de", + "dk", + "edu", + "ee", + "es", + "fi", + "fr", + "gr", + "hr", + "hu", + "ie", + "il", + "in", + "int", + "is", + "it", + "jp", + "kr", + "lt", + "lu", + "lv", + "mc", + "me", + "mk", + "mt", + "my", + "net", + "ng", + "nl", + "no", + "nz", + "paris", + "pl", + "pt", + "q-a", + "ro", + "ru", + "se", + "si", + "sk", + "tr", + "uk", + "us", + "nerdpol", + "abo", + "ac", + "com", + "edu", + "gob", + "ing", + "med", + "net", + "nom", + "org", + "sld", + "ybo", + "blogspot", + "com", + "edu", + "gob", + "mil", + "net", + "nom", + "org", + "com", + "edu", + "org", + "com", + "edu", + "gov", + "i", + "mil", + "net", + "ngo", + "org", + "biz", + "com", + "edu", + "fam", + "gob", + "gok", + "gon", + "gop", + "gos", + "gov", + "info", + "net", + "org", + "web", + "agro", + "aid", + "art", + "atm", + "augustow", + "auto", + "babia-gora", + "bedzin", + "beep", + "beskidy", + "bialowieza", + "bialystok", + "bielawa", + "bieszczady", + "biz", + "boleslawiec", + "bydgoszcz", + "bytom", + "cieszyn", + "co", + "com", + "czeladz", + "czest", + "dlugoleka", + "edu", + "elblag", + "elk", + "gda", + "gdansk", + "gdynia", + "gliwice", + "glogow", + "gmina", + "gniezno", + "gorlice", + "gov", + "grajewo", + "gsm", + "ilawa", + "info", + "jaworzno", + "jelenia-gora", + "jgora", + "kalisz", + "karpacz", + "kartuzy", + "kaszuby", + "katowice", + "kazimierz-dolny", + "kepno", + "ketrzyn", + "klodzko", + "kobierzyce", + "kolobrzeg", + "konin", + "konskowola", + "krakow", + "kutno", + "lapy", + "lebork", + "legnica", + "lezajsk", + "limanowa", + "lomza", + "lowicz", + "lubin", + "lukow", + "mail", + "malbork", + "malopolska", + "mazowsze", + "mazury", + "med", + "media", + "miasta", + "mielec", + "mielno", + "mil", + "mragowo", + "naklo", + "net", + "nieruchomosci", + "nom", + "nowaruda", + "nysa", + "olawa", + "olecko", + "olkusz", + "olsztyn", + "opoczno", + "opole", + "org", + "ostroda", + "ostroleka", + "ostrowiec", + "ostrowwlkp", + "pc", + "pila", + "pisz", + "podhale", + "podlasie", + "polkowice", + "pomorskie", + "pomorze", + "powiat", + "poznan", + "priv", + "prochowice", + "pruszkow", + "przeworsk", + "pulawy", + "radom", + "rawa-maz", + "realestate", + "rel", + "rybnik", + "rzeszow", + "sanok", + "sejny", + "sex", + "shop", + "sklep", + "skoczow", + "slask", + "slupsk", + "sopot", + "sos", + "sosnowiec", + "stalowa-wola", + "starachowice", + "stargard", + "suwalki", + "swidnica", + "swiebodzin", + "swinoujscie", + "szczecin", + "szczytno", + "szkola", + "targi", + "tarnobrzeg", + "tgory", + "tm", + "tourism", + "travel", + "turek", + "turystyka", + "tychy", + "ustka", + "walbrzych", + "warmia", + "warszawa", + "waw", + "wegrow", + "wielun", + "wlocl", + "wloclawek", + "wodzislaw", + "wolomin", + "wroc", + "wroclaw", + "zachpomor", + "zagan", + "zakopane", + "zarow", + "zgora", + "zgorzelec", + "ap", + "griw", + "ic", + "is", + "kmpsp", + "konsulat", + "kppsp", + "kwp", + "kwpsp", + "mup", + "mw", + "oirm", + "oum", + "pa", + "pinb", + "piw", + "po", + "psp", + "psse", + "pup", + "rzgw", + "sa", + "sdn", + "sko", + "so", + "sr", + "starostwo", + "ug", + "ugim", + "um", + "umig", + "upow", + "uppo", + "us", + "uw", + "uzs", + "wif", + "wiih", + "winb", + "wios", + "witd", + "wiw", + "wsa", + "wskr", + "wuoz", + "wzmiuw", + "zp", + "co", + "edu", + "gov", + "net", + "org", + "ac", + "biz", + "com", + "edu", + "est", + "gov", + "info", + "isla", + "name", + "net", + "org", + "pro", + "prof", + "aaa", + "aca", + "acct", + "avocat", + "bar", + "cloudns", + "cpa", + "eng", + "jur", + "law", + "med", + "recht", + "com", + "edu", + "gov", + "net", + "org", + "plo", + "sec", + "blogspot", + "com", + "edu", + "gov", + "int", + "net", + "nome", + "org", + "publ", + "belau", + "cloudns", + "co", + "ed", + "go", + "ne", + "or", + "com", + "coop", + "edu", + "gov", + "mil", + "net", + "org", + "blogspot", + "com", + "edu", + "gov", + "mil", + "name", + "net", + "org", + "sch", + "asso", + "blogspot", + "com", + "nom", + "ybo", + "arts", + "blogspot", + "com", + "firm", + "info", + "nom", + "nt", + "org", + "rec", + "shop", + "store", + "tm", + "www", + "ac", + "blogspot", + "co", + "edu", + "gov", + "in", + "org", + "ac", + "blogspot", + "edu", + "gov", + "int", + "mil", + "test", + "ac", + "co", + "com", + "edu", + "gouv", + "gov", + "int", + "mil", + "net", + "com", + "edu", + "gov", + "med", + "net", + "org", + "pub", + "sch", + "com", + "edu", + "gov", + "net", + "org", + "com", + "edu", + "gov", + "net", + "org", + "ybo", + "com", + "edu", + "gov", + "info", + "med", + "net", + "org", + "tv", + "a", + "ac", + "b", + "bd", + "blogspot", + "brand", + "c", + "com", + "d", + "e", + "f", + "fh", + "fhsk", + "fhv", + "g", + "h", + "i", + "k", + "komforb", + "kommunalforbund", + "komvux", + "l", + "lanbib", + "m", + "n", + "naturbruksgymn", + "o", + "org", + "p", + "parti", + "pp", + "press", + "r", + "s", + "t", + "tm", + "u", + "w", + "x", + "y", + "z", + "blogspot", + "com", + "edu", + "gov", + "net", + "org", + "per", + "com", + "gov", + "hashbang", + "mil", + "net", + "now", + "org", + "platform", + "blogspot", + "cyon", + "blogspot", + "com", + "edu", + "gov", + "net", + "org", + "art", + "blogspot", + "com", + "edu", + "gouv", + "org", + "perso", + "univ", + "com", + "net", + "org", + "stackspace", + "co", + "com", + "consulado", + "edu", + "embaixada", + "gov", + "mil", + "net", + "org", + "principe", + "saotome", + "store", + "adygeya", + "arkhangelsk", + "balashov", + "bashkiria", + "bryansk", + "dagestan", + "grozny", + "ivanovo", + "kalmykia", + "kaluga", + "karelia", + "khakassia", + "krasnodar", + "kurgan", + "lenug", + "mordovia", + "msk", + "murmansk", + "nalchik", + "nov", + "obninsk", + "penza", + "pokrovsk", + "sochi", + "spb", + "togliatti", + "troitsk", + "tula", + "tuva", + "vladikavkaz", + "vladimir", + "vologda", + "com", + "edu", + "gob", + "org", + "red", + "gov", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "knightpoint", + "ac", + "co", + "org", + "blogspot", + "ac", + "co", + "go", + "in", + "mi", + "net", + "or", + "ac", + "biz", + "co", + "com", + "edu", + "go", + "gov", + "int", + "mil", + "name", + "net", + "nic", + "org", + "test", + "web", + "gov", + "co", + "com", + "edu", + "gov", + "mil", + "net", + "nom", + "org", + "agrinet", + "com", + "defense", + "edunet", + "ens", + "fin", + "gov", + "ind", + "info", + "intl", + "mincom", + "nat", + "net", + "org", + "perso", + "rnrt", + "rns", + "rnu", + "tourism", + "turen", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "av", + "bbs", + "bel", + "biz", + "com", + "dr", + "edu", + "gen", + "gov", + "info", + "k12", + "kep", + "mil", + "name", + "nc", + "net", + "org", + "pol", + "tel", + "tv", + "web", + "blogspot", + "gov", + "ybo", + "aero", + "biz", + "co", + "com", + "coop", + "edu", + "gov", + "info", + "int", + "jobs", + "mobi", + "museum", + "name", + "net", + "org", + "pro", + "travel", + "better-than", + "dyndns", + "on-the-web", + "worse-than", + "blogspot", + "club", + "com", + "ebiz", + "edu", + "game", + "gov", + "idv", + "mil", + "net", + "org", + "xn--czrw28b", + "xn--uc0atv", + "xn--zf0ao64a", + "ac", + "co", + "go", + "hotel", + "info", + "me", + "mil", + "mobi", + "ne", + "or", + "sc", + "tv", + "biz", + "cc", + "cherkassy", + "cherkasy", + "chernigov", + "chernihiv", + "chernivtsi", + "chernovtsy", + "ck", + "cn", + "co", + "com", + "cr", + "crimea", + "cv", + "dn", + "dnepropetrovsk", + "dnipropetrovsk", + "dominic", + "donetsk", + "dp", + "edu", + "gov", + "if", + "in", + "inf", + "ivano-frankivsk", + "kh", + "kharkiv", + "kharkov", + "kherson", + "khmelnitskiy", + "khmelnytskyi", + "kiev", + "kirovograd", + "km", + "kr", + "krym", + "ks", + "kv", + "kyiv", + "lg", + "lt", + "ltd", + "lugansk", + "lutsk", + "lv", + "lviv", + "mk", + "mykolaiv", + "net", + "nikolaev", + "od", + "odesa", + "odessa", + "org", + "pl", + "poltava", + "pp", + "rivne", + "rovno", + "rv", + "sb", + "sebastopol", + "sevastopol", + "sm", + "sumy", + "te", + "ternopil", + "uz", + "uzhgorod", + "vinnica", + "vinnytsia", + "vn", + "volyn", + "yalta", + "zaporizhzhe", + "zaporizhzhia", + "zhitomir", + "zhytomyr", + "zp", + "zt", + "ac", + "blogspot", + "co", + "com", + "go", + "ne", + "or", + "org", + "sc", + "ac", + "co", + "gov", + "ltd", + "me", + "net", + "nhs", + "org", + "plc", + "police", + "sch", + "blogspot", + "no-ip", + "wellbeingzone", + "homeoffice", + "service", + "ak", + "al", + "ar", + "as", + "az", + "ca", + "cloudns", + "co", + "ct", + "dc", + "de", + "dni", + "drud", + "fed", + "fl", + "ga", + "golffan", + "gu", + "hi", + "ia", + "id", + "il", + "in", + "is-by", + "isa", + "kids", + "ks", + "ky", + "la", + "land-4-sale", + "ma", + "md", + "me", + "mi", + "mn", + "mo", + "ms", + "mt", + "nc", + "nd", + "ne", + "nh", + "nj", + "nm", + "noip", + "nsn", + "nv", + "ny", + "oh", + "ok", + "or", + "pa", + "pointto", + "pr", + "ri", + "sc", + "sd", + "stuff-4-sale", + "tn", + "tx", + "ut", + "va", + "vi", + "vt", + "wa", + "wi", + "wv", + "wy", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "chtr", + "paroch", + "pvt", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "k12", + "lib", + "cc", + "cc", + "k12", + "lib", + "com", + "edu", + "gub", + "mil", + "net", + "org", + "blogspot", + "co", + "com", + "net", + "org", + "com", + "edu", + "gov", + "mil", + "net", + "org", + "arts", + "co", + "com", + "e12", + "edu", + "firm", + "gob", + "gov", + "info", + "int", + "mil", + "net", + "org", + "rec", + "store", + "tec", + "web", + "co", + "com", + "k12", + "net", + "org", + "ac", + "biz", + "blogspot", + "com", + "edu", + "gov", + "health", + "info", + "int", + "name", + "net", + "org", + "pro", + "com", + "edu", + "net", + "org", + "com", + "dyndns", + "edu", + "gov", + "mypets", + "net", + "org", + "xn--80au", + "xn--90azh", + "xn--c1avg", + "xn--d1at", + "xn--o1ac", + "xn--o1ach", + "fhapp", + "ac", + "agric", + "alt", + "co", + "edu", + "gov", + "grondar", + "law", + "mil", + "net", + "ngo", + "nis", + "nom", + "org", + "school", + "tm", + "web", + "blogspot", + "ac", + "biz", + "co", + "com", + "edu", + "gov", + "info", + "mil", + "net", + "org", + "sch", + "triton", +} diff --git a/vendor/golang.org/x/net/route/address.go b/vendor/golang.org/x/net/route/address.go new file mode 100644 index 0000000..e6bfa39 --- /dev/null +++ b/vendor/golang.org/x/net/route/address.go @@ -0,0 +1,425 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package route + +import "runtime" + +// An Addr represents an address associated with packet routing. +type Addr interface { + // Family returns an address family. + Family() int +} + +// A LinkAddr represents a link-layer address. +type LinkAddr struct { + Index int // interface index when attached + Name string // interface name when attached + Addr []byte // link-layer address when attached +} + +// Family implements the Family method of Addr interface. +func (a *LinkAddr) Family() int { return sysAF_LINK } + +func (a *LinkAddr) lenAndSpace() (int, int) { + l := 8 + len(a.Name) + len(a.Addr) + return l, roundup(l) +} + +func (a *LinkAddr) marshal(b []byte) (int, error) { + l, ll := a.lenAndSpace() + if len(b) < ll { + return 0, errShortBuffer + } + nlen, alen := len(a.Name), len(a.Addr) + if nlen > 255 || alen > 255 { + return 0, errInvalidAddr + } + b[0] = byte(l) + b[1] = sysAF_LINK + if a.Index > 0 { + nativeEndian.PutUint16(b[2:4], uint16(a.Index)) + } + data := b[8:] + if nlen > 0 { + b[5] = byte(nlen) + copy(data[:nlen], a.Addr) + data = data[nlen:] + } + if alen > 0 { + b[6] = byte(alen) + copy(data[:alen], a.Name) + data = data[alen:] + } + return ll, nil +} + +func parseLinkAddr(b []byte) (Addr, error) { + if len(b) < 8 { + return nil, errInvalidAddr + } + _, a, err := parseKernelLinkAddr(sysAF_LINK, b[4:]) + if err != nil { + return nil, err + } + a.(*LinkAddr).Index = int(nativeEndian.Uint16(b[2:4])) + return a, nil +} + +// parseKernelLinkAddr parses b as a link-layer address in +// conventional BSD kernel form. +func parseKernelLinkAddr(_ int, b []byte) (int, Addr, error) { + // The encoding looks like the following: + // +----------------------------+ + // | Type (1 octet) | + // +----------------------------+ + // | Name length (1 octet) | + // +----------------------------+ + // | Address length (1 octet) | + // +----------------------------+ + // | Selector length (1 octet) | + // +----------------------------+ + // | Data (variable) | + // +----------------------------+ + // + // On some platforms, all-bit-one of length field means "don't + // care". + nlen, alen, slen := int(b[1]), int(b[2]), int(b[3]) + if nlen == 0xff { + nlen = 0 + } + if alen == 0xff { + alen = 0 + } + if slen == 0xff { + slen = 0 + } + l := 4 + nlen + alen + slen + if len(b) < l { + return 0, nil, errInvalidAddr + } + data := b[4:] + var name string + var addr []byte + if nlen > 0 { + name = string(data[:nlen]) + data = data[nlen:] + } + if alen > 0 { + addr = data[:alen] + data = data[alen:] + } + return l, &LinkAddr{Name: name, Addr: addr}, nil +} + +// An Inet4Addr represents an internet address for IPv4. +type Inet4Addr struct { + IP [4]byte // IP address +} + +// Family implements the Family method of Addr interface. +func (a *Inet4Addr) Family() int { return sysAF_INET } + +func (a *Inet4Addr) lenAndSpace() (int, int) { + return sizeofSockaddrInet, roundup(sizeofSockaddrInet) +} + +func (a *Inet4Addr) marshal(b []byte) (int, error) { + l, ll := a.lenAndSpace() + if len(b) < ll { + return 0, errShortBuffer + } + b[0] = byte(l) + b[1] = sysAF_INET + copy(b[4:8], a.IP[:]) + return ll, nil +} + +// An Inet6Addr represents an internet address for IPv6. +type Inet6Addr struct { + IP [16]byte // IP address + ZoneID int // zone identifier +} + +// Family implements the Family method of Addr interface. +func (a *Inet6Addr) Family() int { return sysAF_INET6 } + +func (a *Inet6Addr) lenAndSpace() (int, int) { + return sizeofSockaddrInet6, roundup(sizeofSockaddrInet6) +} + +func (a *Inet6Addr) marshal(b []byte) (int, error) { + l, ll := a.lenAndSpace() + if len(b) < ll { + return 0, errShortBuffer + } + b[0] = byte(l) + b[1] = sysAF_INET6 + copy(b[8:24], a.IP[:]) + if a.ZoneID > 0 { + nativeEndian.PutUint32(b[24:28], uint32(a.ZoneID)) + } + return ll, nil +} + +// parseInetAddr parses b as an internet address for IPv4 or IPv6. +func parseInetAddr(af int, b []byte) (Addr, error) { + switch af { + case sysAF_INET: + if len(b) < sizeofSockaddrInet { + return nil, errInvalidAddr + } + a := &Inet4Addr{} + copy(a.IP[:], b[4:8]) + return a, nil + case sysAF_INET6: + if len(b) < sizeofSockaddrInet6 { + return nil, errInvalidAddr + } + a := &Inet6Addr{ZoneID: int(nativeEndian.Uint32(b[24:28]))} + copy(a.IP[:], b[8:24]) + if a.IP[0] == 0xfe && a.IP[1]&0xc0 == 0x80 || a.IP[0] == 0xff && (a.IP[1]&0x0f == 0x01 || a.IP[1]&0x0f == 0x02) { + // KAME based IPv6 protocol stack usually + // embeds the interface index in the + // interface-local or link-local address as + // the kernel-internal form. + id := int(bigEndian.Uint16(a.IP[2:4])) + if id != 0 { + a.ZoneID = id + a.IP[2], a.IP[3] = 0, 0 + } + } + return a, nil + default: + return nil, errInvalidAddr + } +} + +// parseKernelInetAddr parses b as an internet address in conventional +// BSD kernel form. +func parseKernelInetAddr(af int, b []byte) (int, Addr, error) { + // The encoding looks similar to the NLRI encoding. + // +----------------------------+ + // | Length (1 octet) | + // +----------------------------+ + // | Address prefix (variable) | + // +----------------------------+ + // + // The differences between the kernel form and the NLRI + // encoding are: + // + // - The length field of the kernel form indicates the prefix + // length in bytes, not in bits + // + // - In the kernel form, zero value of the length field + // doesn't mean 0.0.0.0/0 or ::/0 + // + // - The kernel form appends leading bytes to the prefix field + // to make the tuple to be conformed with + // the routing message boundary + l := int(b[0]) + if runtime.GOOS == "darwin" { + // On Darwn, an address in the kernel form is also + // used as a message filler. + if l == 0 || len(b) > roundup(l) { + l = roundup(l) + } + } else { + l = roundup(l) + } + if len(b) < l { + return 0, nil, errInvalidAddr + } + // Don't reorder case expressions. + // The case expressions for IPv6 must come first. + const ( + off4 = 4 // offset of in_addr + off6 = 8 // offset of in6_addr + ) + switch { + case b[0] == sizeofSockaddrInet6: + a := &Inet6Addr{} + copy(a.IP[:], b[off6:off6+16]) + return int(b[0]), a, nil + case af == sysAF_INET6: + a := &Inet6Addr{} + if l-1 < off6 { + copy(a.IP[:], b[1:l]) + } else { + copy(a.IP[:], b[l-off6:l]) + } + return int(b[0]), a, nil + case b[0] == sizeofSockaddrInet: + a := &Inet4Addr{} + copy(a.IP[:], b[off4:off4+4]) + return int(b[0]), a, nil + default: // an old fashion, AF_UNSPEC or unknown means AF_INET + a := &Inet4Addr{} + if l-1 < off4 { + copy(a.IP[:], b[1:l]) + } else { + copy(a.IP[:], b[l-off4:l]) + } + return int(b[0]), a, nil + } +} + +// A DefaultAddr represents an address of various operating +// system-specific features. +type DefaultAddr struct { + af int + Raw []byte // raw format of address +} + +// Family implements the Family method of Addr interface. +func (a *DefaultAddr) Family() int { return a.af } + +func (a *DefaultAddr) lenAndSpace() (int, int) { + l := len(a.Raw) + return l, roundup(l) +} + +func (a *DefaultAddr) marshal(b []byte) (int, error) { + l, ll := a.lenAndSpace() + if len(b) < ll { + return 0, errShortBuffer + } + if l > 255 { + return 0, errInvalidAddr + } + b[1] = byte(l) + copy(b[:l], a.Raw) + return ll, nil +} + +func parseDefaultAddr(b []byte) (Addr, error) { + if len(b) < 2 || len(b) < int(b[0]) { + return nil, errInvalidAddr + } + a := &DefaultAddr{af: int(b[1]), Raw: b[:b[0]]} + return a, nil +} + +func addrsSpace(as []Addr) int { + var l int + for _, a := range as { + switch a := a.(type) { + case *LinkAddr: + _, ll := a.lenAndSpace() + l += ll + case *Inet4Addr: + _, ll := a.lenAndSpace() + l += ll + case *Inet6Addr: + _, ll := a.lenAndSpace() + l += ll + case *DefaultAddr: + _, ll := a.lenAndSpace() + l += ll + } + } + return l +} + +// marshalAddrs marshals as and returns a bitmap indicating which +// address is stored in b. +func marshalAddrs(b []byte, as []Addr) (uint, error) { + var attrs uint + for i, a := range as { + switch a := a.(type) { + case *LinkAddr: + l, err := a.marshal(b) + if err != nil { + return 0, err + } + b = b[l:] + attrs |= 1 << uint(i) + case *Inet4Addr: + l, err := a.marshal(b) + if err != nil { + return 0, err + } + b = b[l:] + attrs |= 1 << uint(i) + case *Inet6Addr: + l, err := a.marshal(b) + if err != nil { + return 0, err + } + b = b[l:] + attrs |= 1 << uint(i) + case *DefaultAddr: + l, err := a.marshal(b) + if err != nil { + return 0, err + } + b = b[l:] + attrs |= 1 << uint(i) + } + } + return attrs, nil +} + +func parseAddrs(attrs uint, fn func(int, []byte) (int, Addr, error), b []byte) ([]Addr, error) { + var as [sysRTAX_MAX]Addr + af := int(sysAF_UNSPEC) + for i := uint(0); i < sysRTAX_MAX && len(b) >= roundup(0); i++ { + if attrs&(1<> 8) +} + +func (binaryLittleEndian) Uint32(b []byte) uint32 { + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 +} + +func (binaryLittleEndian) PutUint32(b []byte, v uint32) { + _ = b[3] // early bounds check to guarantee safety of writes below + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) +} + +func (binaryLittleEndian) Uint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +type binaryBigEndian struct{} + +func (binaryBigEndian) Uint16(b []byte) uint16 { + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint16(b[1]) | uint16(b[0])<<8 +} + +func (binaryBigEndian) PutUint16(b []byte, v uint16) { + _ = b[1] // early bounds check to guarantee safety of writes below + b[0] = byte(v >> 8) + b[1] = byte(v) +} + +func (binaryBigEndian) Uint32(b []byte) uint32 { + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 +} + +func (binaryBigEndian) PutUint32(b []byte, v uint32) { + _ = b[3] // early bounds check to guarantee safety of writes below + b[0] = byte(v >> 24) + b[1] = byte(v >> 16) + b[2] = byte(v >> 8) + b[3] = byte(v) +} + +func (binaryBigEndian) Uint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 +} diff --git a/vendor/golang.org/x/net/route/defs_darwin.go b/vendor/golang.org/x/net/route/defs_darwin.go new file mode 100644 index 0000000..e771644 --- /dev/null +++ b/vendor/golang.org/x/net/route/defs_darwin.go @@ -0,0 +1,114 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package route + +/* +#include +#include + +#include +#include +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_ROUTE = C.AF_ROUTE + sysAF_LINK = C.AF_LINK + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW + + sysNET_RT_DUMP = C.NET_RT_DUMP + sysNET_RT_FLAGS = C.NET_RT_FLAGS + sysNET_RT_IFLIST = C.NET_RT_IFLIST + sysNET_RT_STAT = C.NET_RT_STAT + sysNET_RT_TRASH = C.NET_RT_TRASH + sysNET_RT_IFLIST2 = C.NET_RT_IFLIST2 + sysNET_RT_DUMP2 = C.NET_RT_DUMP2 + sysNET_RT_MAXID = C.NET_RT_MAXID +) + +const ( + sysCTL_MAXNAME = C.CTL_MAXNAME + + sysCTL_UNSPEC = C.CTL_UNSPEC + sysCTL_KERN = C.CTL_KERN + sysCTL_VM = C.CTL_VM + sysCTL_VFS = C.CTL_VFS + sysCTL_NET = C.CTL_NET + sysCTL_DEBUG = C.CTL_DEBUG + sysCTL_HW = C.CTL_HW + sysCTL_MACHDEP = C.CTL_MACHDEP + sysCTL_USER = C.CTL_USER + sysCTL_MAXID = C.CTL_MAXID +) + +const ( + sysRTM_VERSION = C.RTM_VERSION + + sysRTM_ADD = C.RTM_ADD + sysRTM_DELETE = C.RTM_DELETE + sysRTM_CHANGE = C.RTM_CHANGE + sysRTM_GET = C.RTM_GET + sysRTM_LOSING = C.RTM_LOSING + sysRTM_REDIRECT = C.RTM_REDIRECT + sysRTM_MISS = C.RTM_MISS + sysRTM_LOCK = C.RTM_LOCK + sysRTM_OLDADD = C.RTM_OLDADD + sysRTM_OLDDEL = C.RTM_OLDDEL + sysRTM_RESOLVE = C.RTM_RESOLVE + sysRTM_NEWADDR = C.RTM_NEWADDR + sysRTM_DELADDR = C.RTM_DELADDR + sysRTM_IFINFO = C.RTM_IFINFO + sysRTM_NEWMADDR = C.RTM_NEWMADDR + sysRTM_DELMADDR = C.RTM_DELMADDR + sysRTM_IFINFO2 = C.RTM_IFINFO2 + sysRTM_NEWMADDR2 = C.RTM_NEWMADDR2 + sysRTM_GET2 = C.RTM_GET2 + + sysRTA_DST = C.RTA_DST + sysRTA_GATEWAY = C.RTA_GATEWAY + sysRTA_NETMASK = C.RTA_NETMASK + sysRTA_GENMASK = C.RTA_GENMASK + sysRTA_IFP = C.RTA_IFP + sysRTA_IFA = C.RTA_IFA + sysRTA_AUTHOR = C.RTA_AUTHOR + sysRTA_BRD = C.RTA_BRD + + sysRTAX_DST = C.RTAX_DST + sysRTAX_GATEWAY = C.RTAX_GATEWAY + sysRTAX_NETMASK = C.RTAX_NETMASK + sysRTAX_GENMASK = C.RTAX_GENMASK + sysRTAX_IFP = C.RTAX_IFP + sysRTAX_IFA = C.RTAX_IFA + sysRTAX_AUTHOR = C.RTAX_AUTHOR + sysRTAX_BRD = C.RTAX_BRD + sysRTAX_MAX = C.RTAX_MAX +) + +const ( + sizeofIfMsghdrDarwin15 = C.sizeof_struct_if_msghdr + sizeofIfaMsghdrDarwin15 = C.sizeof_struct_ifa_msghdr + sizeofIfmaMsghdrDarwin15 = C.sizeof_struct_ifma_msghdr + sizeofIfMsghdr2Darwin15 = C.sizeof_struct_if_msghdr2 + sizeofIfmaMsghdr2Darwin15 = C.sizeof_struct_ifma_msghdr2 + sizeofIfDataDarwin15 = C.sizeof_struct_if_data + sizeofIfData64Darwin15 = C.sizeof_struct_if_data64 + + sizeofRtMsghdrDarwin15 = C.sizeof_struct_rt_msghdr + sizeofRtMsghdr2Darwin15 = C.sizeof_struct_rt_msghdr2 + sizeofRtMetricsDarwin15 = C.sizeof_struct_rt_metrics + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/route/defs_dragonfly.go b/vendor/golang.org/x/net/route/defs_dragonfly.go new file mode 100644 index 0000000..dd31de2 --- /dev/null +++ b/vendor/golang.org/x/net/route/defs_dragonfly.go @@ -0,0 +1,113 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package route + +/* +#include +#include + +#include +#include +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_ROUTE = C.AF_ROUTE + sysAF_LINK = C.AF_LINK + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW + + sysNET_RT_DUMP = C.NET_RT_DUMP + sysNET_RT_FLAGS = C.NET_RT_FLAGS + sysNET_RT_IFLIST = C.NET_RT_IFLIST + sysNET_RT_MAXID = C.NET_RT_MAXID +) + +const ( + sysCTL_MAXNAME = C.CTL_MAXNAME + + sysCTL_UNSPEC = C.CTL_UNSPEC + sysCTL_KERN = C.CTL_KERN + sysCTL_VM = C.CTL_VM + sysCTL_VFS = C.CTL_VFS + sysCTL_NET = C.CTL_NET + sysCTL_DEBUG = C.CTL_DEBUG + sysCTL_HW = C.CTL_HW + sysCTL_MACHDEP = C.CTL_MACHDEP + sysCTL_USER = C.CTL_USER + sysCTL_P1003_1B = C.CTL_P1003_1B + sysCTL_LWKT = C.CTL_LWKT + sysCTL_MAXID = C.CTL_MAXID +) + +const ( + sysRTM_VERSION = C.RTM_VERSION + + sysRTM_ADD = C.RTM_ADD + sysRTM_DELETE = C.RTM_DELETE + sysRTM_CHANGE = C.RTM_CHANGE + sysRTM_GET = C.RTM_GET + sysRTM_LOSING = C.RTM_LOSING + sysRTM_REDIRECT = C.RTM_REDIRECT + sysRTM_MISS = C.RTM_MISS + sysRTM_LOCK = C.RTM_LOCK + sysRTM_OLDADD = C.RTM_OLDADD + sysRTM_OLDDEL = C.RTM_OLDDEL + sysRTM_RESOLVE = C.RTM_RESOLVE + sysRTM_NEWADDR = C.RTM_NEWADDR + sysRTM_DELADDR = C.RTM_DELADDR + sysRTM_IFINFO = C.RTM_IFINFO + sysRTM_NEWMADDR = C.RTM_NEWMADDR + sysRTM_DELMADDR = C.RTM_DELMADDR + sysRTM_IFANNOUNCE = C.RTM_IFANNOUNCE + sysRTM_IEEE80211 = C.RTM_IEEE80211 + + sysRTA_DST = C.RTA_DST + sysRTA_GATEWAY = C.RTA_GATEWAY + sysRTA_NETMASK = C.RTA_NETMASK + sysRTA_GENMASK = C.RTA_GENMASK + sysRTA_IFP = C.RTA_IFP + sysRTA_IFA = C.RTA_IFA + sysRTA_AUTHOR = C.RTA_AUTHOR + sysRTA_BRD = C.RTA_BRD + sysRTA_MPLS1 = C.RTA_MPLS1 + sysRTA_MPLS2 = C.RTA_MPLS2 + sysRTA_MPLS3 = C.RTA_MPLS3 + + sysRTAX_DST = C.RTAX_DST + sysRTAX_GATEWAY = C.RTAX_GATEWAY + sysRTAX_NETMASK = C.RTAX_NETMASK + sysRTAX_GENMASK = C.RTAX_GENMASK + sysRTAX_IFP = C.RTAX_IFP + sysRTAX_IFA = C.RTAX_IFA + sysRTAX_AUTHOR = C.RTAX_AUTHOR + sysRTAX_BRD = C.RTAX_BRD + sysRTAX_MPLS1 = C.RTAX_MPLS1 + sysRTAX_MPLS2 = C.RTAX_MPLS2 + sysRTAX_MPLS3 = C.RTAX_MPLS3 + sysRTAX_MAX = C.RTAX_MAX +) + +const ( + sizeofIfMsghdrDragonFlyBSD4 = C.sizeof_struct_if_msghdr + sizeofIfaMsghdrDragonFlyBSD4 = C.sizeof_struct_ifa_msghdr + sizeofIfmaMsghdrDragonFlyBSD4 = C.sizeof_struct_ifma_msghdr + sizeofIfAnnouncemsghdrDragonFlyBSD4 = C.sizeof_struct_if_announcemsghdr + + sizeofRtMsghdrDragonFlyBSD4 = C.sizeof_struct_rt_msghdr + sizeofRtMetricsDragonFlyBSD4 = C.sizeof_struct_rt_metrics + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/route/defs_freebsd.go b/vendor/golang.org/x/net/route/defs_freebsd.go new file mode 100644 index 0000000..d95594d --- /dev/null +++ b/vendor/golang.org/x/net/route/defs_freebsd.go @@ -0,0 +1,337 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package route + +/* +#include +#include + +#include +#include +#include + +#include + +struct if_data_freebsd7 { + u_char ifi_type; + u_char ifi_physical; + u_char ifi_addrlen; + u_char ifi_hdrlen; + u_char ifi_link_state; + u_char ifi_spare_char1; + u_char ifi_spare_char2; + u_char ifi_datalen; + u_long ifi_mtu; + u_long ifi_metric; + u_long ifi_baudrate; + u_long ifi_ipackets; + u_long ifi_ierrors; + u_long ifi_opackets; + u_long ifi_oerrors; + u_long ifi_collisions; + u_long ifi_ibytes; + u_long ifi_obytes; + u_long ifi_imcasts; + u_long ifi_omcasts; + u_long ifi_iqdrops; + u_long ifi_noproto; + u_long ifi_hwassist; + time_t __ifi_epoch; + struct timeval __ifi_lastchange; +}; + +struct if_data_freebsd8 { + u_char ifi_type; + u_char ifi_physical; + u_char ifi_addrlen; + u_char ifi_hdrlen; + u_char ifi_link_state; + u_char ifi_spare_char1; + u_char ifi_spare_char2; + u_char ifi_datalen; + u_long ifi_mtu; + u_long ifi_metric; + u_long ifi_baudrate; + u_long ifi_ipackets; + u_long ifi_ierrors; + u_long ifi_opackets; + u_long ifi_oerrors; + u_long ifi_collisions; + u_long ifi_ibytes; + u_long ifi_obytes; + u_long ifi_imcasts; + u_long ifi_omcasts; + u_long ifi_iqdrops; + u_long ifi_noproto; + u_long ifi_hwassist; + time_t __ifi_epoch; + struct timeval __ifi_lastchange; +}; + +struct if_data_freebsd9 { + u_char ifi_type; + u_char ifi_physical; + u_char ifi_addrlen; + u_char ifi_hdrlen; + u_char ifi_link_state; + u_char ifi_spare_char1; + u_char ifi_spare_char2; + u_char ifi_datalen; + u_long ifi_mtu; + u_long ifi_metric; + u_long ifi_baudrate; + u_long ifi_ipackets; + u_long ifi_ierrors; + u_long ifi_opackets; + u_long ifi_oerrors; + u_long ifi_collisions; + u_long ifi_ibytes; + u_long ifi_obytes; + u_long ifi_imcasts; + u_long ifi_omcasts; + u_long ifi_iqdrops; + u_long ifi_noproto; + u_long ifi_hwassist; + time_t __ifi_epoch; + struct timeval __ifi_lastchange; +}; + +struct if_data_freebsd10 { + u_char ifi_type; + u_char ifi_physical; + u_char ifi_addrlen; + u_char ifi_hdrlen; + u_char ifi_link_state; + u_char ifi_vhid; + u_char ifi_baudrate_pf; + u_char ifi_datalen; + u_long ifi_mtu; + u_long ifi_metric; + u_long ifi_baudrate; + u_long ifi_ipackets; + u_long ifi_ierrors; + u_long ifi_opackets; + u_long ifi_oerrors; + u_long ifi_collisions; + u_long ifi_ibytes; + u_long ifi_obytes; + u_long ifi_imcasts; + u_long ifi_omcasts; + u_long ifi_iqdrops; + u_long ifi_noproto; + uint64_t ifi_hwassist; + time_t __ifi_epoch; + struct timeval __ifi_lastchange; +}; + +struct if_data_freebsd11 { + uint8_t ifi_type; + uint8_t ifi_physical; + uint8_t ifi_addrlen; + uint8_t ifi_hdrlen; + uint8_t ifi_link_state; + uint8_t ifi_vhid; + uint16_t ifi_datalen; + uint32_t ifi_mtu; + uint32_t ifi_metric; + uint64_t ifi_baudrate; + uint64_t ifi_ipackets; + uint64_t ifi_ierrors; + uint64_t ifi_opackets; + uint64_t ifi_oerrors; + uint64_t ifi_collisions; + uint64_t ifi_ibytes; + uint64_t ifi_obytes; + uint64_t ifi_imcasts; + uint64_t ifi_omcasts; + uint64_t ifi_iqdrops; + uint64_t ifi_oqdrops; + uint64_t ifi_noproto; + uint64_t ifi_hwassist; + union { + time_t tt; + uint64_t ph; + } __ifi_epoch; + union { + struct timeval tv; + struct { + uint64_t ph1; + uint64_t ph2; + } ph; + } __ifi_lastchange; +}; + +struct if_msghdr_freebsd7 { + u_short ifm_msglen; + u_char ifm_version; + u_char ifm_type; + int ifm_addrs; + int ifm_flags; + u_short ifm_index; + struct if_data_freebsd7 ifm_data; +}; + +struct if_msghdr_freebsd8 { + u_short ifm_msglen; + u_char ifm_version; + u_char ifm_type; + int ifm_addrs; + int ifm_flags; + u_short ifm_index; + struct if_data_freebsd8 ifm_data; +}; + +struct if_msghdr_freebsd9 { + u_short ifm_msglen; + u_char ifm_version; + u_char ifm_type; + int ifm_addrs; + int ifm_flags; + u_short ifm_index; + struct if_data_freebsd9 ifm_data; +}; + +struct if_msghdr_freebsd10 { + u_short ifm_msglen; + u_char ifm_version; + u_char ifm_type; + int ifm_addrs; + int ifm_flags; + u_short ifm_index; + struct if_data_freebsd10 ifm_data; +}; + +struct if_msghdr_freebsd11 { + u_short ifm_msglen; + u_char ifm_version; + u_char ifm_type; + int ifm_addrs; + int ifm_flags; + u_short ifm_index; + struct if_data_freebsd11 ifm_data; +}; +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_ROUTE = C.AF_ROUTE + sysAF_LINK = C.AF_LINK + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW + + sysNET_RT_DUMP = C.NET_RT_DUMP + sysNET_RT_FLAGS = C.NET_RT_FLAGS + sysNET_RT_IFLIST = C.NET_RT_IFLIST + sysNET_RT_IFMALIST = C.NET_RT_IFMALIST + sysNET_RT_IFLISTL = C.NET_RT_IFLISTL +) + +const ( + sysCTL_MAXNAME = C.CTL_MAXNAME + + sysCTL_UNSPEC = C.CTL_UNSPEC + sysCTL_KERN = C.CTL_KERN + sysCTL_VM = C.CTL_VM + sysCTL_VFS = C.CTL_VFS + sysCTL_NET = C.CTL_NET + sysCTL_DEBUG = C.CTL_DEBUG + sysCTL_HW = C.CTL_HW + sysCTL_MACHDEP = C.CTL_MACHDEP + sysCTL_USER = C.CTL_USER + sysCTL_P1003_1B = C.CTL_P1003_1B +) + +const ( + sysRTM_VERSION = C.RTM_VERSION + + sysRTM_ADD = C.RTM_ADD + sysRTM_DELETE = C.RTM_DELETE + sysRTM_CHANGE = C.RTM_CHANGE + sysRTM_GET = C.RTM_GET + sysRTM_LOSING = C.RTM_LOSING + sysRTM_REDIRECT = C.RTM_REDIRECT + sysRTM_MISS = C.RTM_MISS + sysRTM_LOCK = C.RTM_LOCK + sysRTM_RESOLVE = C.RTM_RESOLVE + sysRTM_NEWADDR = C.RTM_NEWADDR + sysRTM_DELADDR = C.RTM_DELADDR + sysRTM_IFINFO = C.RTM_IFINFO + sysRTM_NEWMADDR = C.RTM_NEWMADDR + sysRTM_DELMADDR = C.RTM_DELMADDR + sysRTM_IFANNOUNCE = C.RTM_IFANNOUNCE + sysRTM_IEEE80211 = C.RTM_IEEE80211 + + sysRTA_DST = C.RTA_DST + sysRTA_GATEWAY = C.RTA_GATEWAY + sysRTA_NETMASK = C.RTA_NETMASK + sysRTA_GENMASK = C.RTA_GENMASK + sysRTA_IFP = C.RTA_IFP + sysRTA_IFA = C.RTA_IFA + sysRTA_AUTHOR = C.RTA_AUTHOR + sysRTA_BRD = C.RTA_BRD + + sysRTAX_DST = C.RTAX_DST + sysRTAX_GATEWAY = C.RTAX_GATEWAY + sysRTAX_NETMASK = C.RTAX_NETMASK + sysRTAX_GENMASK = C.RTAX_GENMASK + sysRTAX_IFP = C.RTAX_IFP + sysRTAX_IFA = C.RTAX_IFA + sysRTAX_AUTHOR = C.RTAX_AUTHOR + sysRTAX_BRD = C.RTAX_BRD + sysRTAX_MAX = C.RTAX_MAX +) + +const ( + sizeofIfMsghdrlFreeBSD10 = C.sizeof_struct_if_msghdrl + sizeofIfaMsghdrFreeBSD10 = C.sizeof_struct_ifa_msghdr + sizeofIfaMsghdrlFreeBSD10 = C.sizeof_struct_ifa_msghdrl + sizeofIfmaMsghdrFreeBSD10 = C.sizeof_struct_ifma_msghdr + sizeofIfAnnouncemsghdrFreeBSD10 = C.sizeof_struct_if_announcemsghdr + + sizeofRtMsghdrFreeBSD10 = C.sizeof_struct_rt_msghdr + sizeofRtMetricsFreeBSD10 = C.sizeof_struct_rt_metrics + + sizeofIfMsghdrFreeBSD7 = C.sizeof_struct_if_msghdr_freebsd7 + sizeofIfMsghdrFreeBSD8 = C.sizeof_struct_if_msghdr_freebsd8 + sizeofIfMsghdrFreeBSD9 = C.sizeof_struct_if_msghdr_freebsd9 + sizeofIfMsghdrFreeBSD10 = C.sizeof_struct_if_msghdr_freebsd10 + sizeofIfMsghdrFreeBSD11 = C.sizeof_struct_if_msghdr_freebsd11 + + sizeofIfDataFreeBSD7 = C.sizeof_struct_if_data_freebsd7 + sizeofIfDataFreeBSD8 = C.sizeof_struct_if_data_freebsd8 + sizeofIfDataFreeBSD9 = C.sizeof_struct_if_data_freebsd9 + sizeofIfDataFreeBSD10 = C.sizeof_struct_if_data_freebsd10 + sizeofIfDataFreeBSD11 = C.sizeof_struct_if_data_freebsd11 + + sizeofIfMsghdrlFreeBSD10Emu = C.sizeof_struct_if_msghdrl + sizeofIfaMsghdrFreeBSD10Emu = C.sizeof_struct_ifa_msghdr + sizeofIfaMsghdrlFreeBSD10Emu = C.sizeof_struct_ifa_msghdrl + sizeofIfmaMsghdrFreeBSD10Emu = C.sizeof_struct_ifma_msghdr + sizeofIfAnnouncemsghdrFreeBSD10Emu = C.sizeof_struct_if_announcemsghdr + + sizeofRtMsghdrFreeBSD10Emu = C.sizeof_struct_rt_msghdr + sizeofRtMetricsFreeBSD10Emu = C.sizeof_struct_rt_metrics + + sizeofIfMsghdrFreeBSD7Emu = C.sizeof_struct_if_msghdr_freebsd7 + sizeofIfMsghdrFreeBSD8Emu = C.sizeof_struct_if_msghdr_freebsd8 + sizeofIfMsghdrFreeBSD9Emu = C.sizeof_struct_if_msghdr_freebsd9 + sizeofIfMsghdrFreeBSD10Emu = C.sizeof_struct_if_msghdr_freebsd10 + sizeofIfMsghdrFreeBSD11Emu = C.sizeof_struct_if_msghdr_freebsd11 + + sizeofIfDataFreeBSD7Emu = C.sizeof_struct_if_data_freebsd7 + sizeofIfDataFreeBSD8Emu = C.sizeof_struct_if_data_freebsd8 + sizeofIfDataFreeBSD9Emu = C.sizeof_struct_if_data_freebsd9 + sizeofIfDataFreeBSD10Emu = C.sizeof_struct_if_data_freebsd10 + sizeofIfDataFreeBSD11Emu = C.sizeof_struct_if_data_freebsd11 + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/route/defs_netbsd.go b/vendor/golang.org/x/net/route/defs_netbsd.go new file mode 100644 index 0000000..b0abd54 --- /dev/null +++ b/vendor/golang.org/x/net/route/defs_netbsd.go @@ -0,0 +1,112 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package route + +/* +#include +#include + +#include +#include +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_ROUTE = C.AF_ROUTE + sysAF_LINK = C.AF_LINK + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW + + sysNET_RT_DUMP = C.NET_RT_DUMP + sysNET_RT_FLAGS = C.NET_RT_FLAGS + sysNET_RT_IFLIST = C.NET_RT_IFLIST + sysNET_RT_MAXID = C.NET_RT_MAXID +) + +const ( + sysCTL_MAXNAME = C.CTL_MAXNAME + + sysCTL_UNSPEC = C.CTL_UNSPEC + sysCTL_KERN = C.CTL_KERN + sysCTL_VM = C.CTL_VM + sysCTL_VFS = C.CTL_VFS + sysCTL_NET = C.CTL_NET + sysCTL_DEBUG = C.CTL_DEBUG + sysCTL_HW = C.CTL_HW + sysCTL_MACHDEP = C.CTL_MACHDEP + sysCTL_USER = C.CTL_USER + sysCTL_DDB = C.CTL_DDB + sysCTL_PROC = C.CTL_PROC + sysCTL_VENDOR = C.CTL_VENDOR + sysCTL_EMUL = C.CTL_EMUL + sysCTL_SECURITY = C.CTL_SECURITY + sysCTL_MAXID = C.CTL_MAXID +) + +const ( + sysRTM_VERSION = C.RTM_VERSION + + sysRTM_ADD = C.RTM_ADD + sysRTM_DELETE = C.RTM_DELETE + sysRTM_CHANGE = C.RTM_CHANGE + sysRTM_GET = C.RTM_GET + sysRTM_LOSING = C.RTM_LOSING + sysRTM_REDIRECT = C.RTM_REDIRECT + sysRTM_MISS = C.RTM_MISS + sysRTM_LOCK = C.RTM_LOCK + sysRTM_OLDADD = C.RTM_OLDADD + sysRTM_OLDDEL = C.RTM_OLDDEL + sysRTM_RESOLVE = C.RTM_RESOLVE + sysRTM_NEWADDR = C.RTM_NEWADDR + sysRTM_DELADDR = C.RTM_DELADDR + sysRTM_IFANNOUNCE = C.RTM_IFANNOUNCE + sysRTM_IEEE80211 = C.RTM_IEEE80211 + sysRTM_SETGATE = C.RTM_SETGATE + sysRTM_LLINFO_UPD = C.RTM_LLINFO_UPD + sysRTM_IFINFO = C.RTM_IFINFO + sysRTM_CHGADDR = C.RTM_CHGADDR + + sysRTA_DST = C.RTA_DST + sysRTA_GATEWAY = C.RTA_GATEWAY + sysRTA_NETMASK = C.RTA_NETMASK + sysRTA_GENMASK = C.RTA_GENMASK + sysRTA_IFP = C.RTA_IFP + sysRTA_IFA = C.RTA_IFA + sysRTA_AUTHOR = C.RTA_AUTHOR + sysRTA_BRD = C.RTA_BRD + sysRTA_TAG = C.RTA_TAG + + sysRTAX_DST = C.RTAX_DST + sysRTAX_GATEWAY = C.RTAX_GATEWAY + sysRTAX_NETMASK = C.RTAX_NETMASK + sysRTAX_GENMASK = C.RTAX_GENMASK + sysRTAX_IFP = C.RTAX_IFP + sysRTAX_IFA = C.RTAX_IFA + sysRTAX_AUTHOR = C.RTAX_AUTHOR + sysRTAX_BRD = C.RTAX_BRD + sysRTAX_TAG = C.RTAX_TAG + sysRTAX_MAX = C.RTAX_MAX +) + +const ( + sizeofIfMsghdrNetBSD7 = C.sizeof_struct_if_msghdr + sizeofIfaMsghdrNetBSD7 = C.sizeof_struct_ifa_msghdr + sizeofIfAnnouncemsghdrNetBSD7 = C.sizeof_struct_if_announcemsghdr + + sizeofRtMsghdrNetBSD7 = C.sizeof_struct_rt_msghdr + sizeofRtMetricsNetBSD7 = C.sizeof_struct_rt_metrics + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/route/defs_openbsd.go b/vendor/golang.org/x/net/route/defs_openbsd.go new file mode 100644 index 0000000..0f66d36 --- /dev/null +++ b/vendor/golang.org/x/net/route/defs_openbsd.go @@ -0,0 +1,105 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package route + +/* +#include +#include + +#include +#include +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_ROUTE = C.AF_ROUTE + sysAF_LINK = C.AF_LINK + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW + + sysNET_RT_DUMP = C.NET_RT_DUMP + sysNET_RT_FLAGS = C.NET_RT_FLAGS + sysNET_RT_IFLIST = C.NET_RT_IFLIST + sysNET_RT_STATS = C.NET_RT_STATS + sysNET_RT_TABLE = C.NET_RT_TABLE + sysNET_RT_IFNAMES = C.NET_RT_IFNAMES + sysNET_RT_MAXID = C.NET_RT_MAXID +) + +const ( + sysCTL_MAXNAME = C.CTL_MAXNAME + + sysCTL_UNSPEC = C.CTL_UNSPEC + sysCTL_KERN = C.CTL_KERN + sysCTL_VM = C.CTL_VM + sysCTL_FS = C.CTL_FS + sysCTL_NET = C.CTL_NET + sysCTL_DEBUG = C.CTL_DEBUG + sysCTL_HW = C.CTL_HW + sysCTL_MACHDEP = C.CTL_MACHDEP + sysCTL_DDB = C.CTL_DDB + sysCTL_VFS = C.CTL_VFS + sysCTL_MAXID = C.CTL_MAXID +) + +const ( + sysRTM_VERSION = C.RTM_VERSION + + sysRTM_ADD = C.RTM_ADD + sysRTM_DELETE = C.RTM_DELETE + sysRTM_CHANGE = C.RTM_CHANGE + sysRTM_GET = C.RTM_GET + sysRTM_LOSING = C.RTM_LOSING + sysRTM_REDIRECT = C.RTM_REDIRECT + sysRTM_MISS = C.RTM_MISS + sysRTM_LOCK = C.RTM_LOCK + sysRTM_RESOLVE = C.RTM_RESOLVE + sysRTM_NEWADDR = C.RTM_NEWADDR + sysRTM_DELADDR = C.RTM_DELADDR + sysRTM_IFINFO = C.RTM_IFINFO + sysRTM_IFANNOUNCE = C.RTM_IFANNOUNCE + sysRTM_DESYNC = C.RTM_DESYNC + + sysRTA_DST = C.RTA_DST + sysRTA_GATEWAY = C.RTA_GATEWAY + sysRTA_NETMASK = C.RTA_NETMASK + sysRTA_GENMASK = C.RTA_GENMASK + sysRTA_IFP = C.RTA_IFP + sysRTA_IFA = C.RTA_IFA + sysRTA_AUTHOR = C.RTA_AUTHOR + sysRTA_BRD = C.RTA_BRD + sysRTA_SRC = C.RTA_SRC + sysRTA_SRCMASK = C.RTA_SRCMASK + sysRTA_LABEL = C.RTA_LABEL + + sysRTAX_DST = C.RTAX_DST + sysRTAX_GATEWAY = C.RTAX_GATEWAY + sysRTAX_NETMASK = C.RTAX_NETMASK + sysRTAX_GENMASK = C.RTAX_GENMASK + sysRTAX_IFP = C.RTAX_IFP + sysRTAX_IFA = C.RTAX_IFA + sysRTAX_AUTHOR = C.RTAX_AUTHOR + sysRTAX_BRD = C.RTAX_BRD + sysRTAX_SRC = C.RTAX_SRC + sysRTAX_SRCMASK = C.RTAX_SRCMASK + sysRTAX_LABEL = C.RTAX_LABEL + sysRTAX_MAX = C.RTAX_MAX +) + +const ( + sizeofRtMsghdr = C.sizeof_struct_rt_msghdr + + sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/route/interface.go b/vendor/golang.org/x/net/route/interface.go new file mode 100644 index 0000000..854906d --- /dev/null +++ b/vendor/golang.org/x/net/route/interface.go @@ -0,0 +1,64 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package route + +// An InterfaceMessage represents an interface message. +type InterfaceMessage struct { + Version int // message version + Type int // message type + Flags int // interface flags + Index int // interface index + Name string // interface name + Addrs []Addr // addresses + + extOff int // offset of header extension + raw []byte // raw message +} + +// An InterfaceAddrMessage represents an interface address message. +type InterfaceAddrMessage struct { + Version int // message version + Type int // message type + Flags int // interface flags + Index int // interface index + Addrs []Addr // addresses + + raw []byte // raw message +} + +// Sys implements the Sys method of Message interface. +func (m *InterfaceAddrMessage) Sys() []Sys { return nil } + +// An InterfaceMulticastAddrMessage represents an interface multicast +// address message. +type InterfaceMulticastAddrMessage struct { + Version int // message version + Type int // messsage type + Flags int // interface flags + Index int // interface index + Addrs []Addr // addresses + + raw []byte // raw message +} + +// Sys implements the Sys method of Message interface. +func (m *InterfaceMulticastAddrMessage) Sys() []Sys { return nil } + +// An InterfaceAnnounceMessage represents an interface announcement +// message. +type InterfaceAnnounceMessage struct { + Version int // message version + Type int // message type + Index int // interface index + Name string // interface name + What int // what type of announcement + + raw []byte // raw message +} + +// Sys implements the Sys method of Message interface. +func (m *InterfaceAnnounceMessage) Sys() []Sys { return nil } diff --git a/vendor/golang.org/x/net/route/interface_announce.go b/vendor/golang.org/x/net/route/interface_announce.go new file mode 100644 index 0000000..520d657 --- /dev/null +++ b/vendor/golang.org/x/net/route/interface_announce.go @@ -0,0 +1,32 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build dragonfly freebsd netbsd + +package route + +func (w *wireFormat) parseInterfaceAnnounceMessage(_ RIBType, b []byte) (Message, error) { + if len(b) < w.bodyOff { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + m := &InterfaceAnnounceMessage{ + Version: int(b[2]), + Type: int(b[3]), + Index: int(nativeEndian.Uint16(b[4:6])), + What: int(nativeEndian.Uint16(b[22:24])), + raw: b[:l], + } + for i := 0; i < 16; i++ { + if b[6+i] != 0 { + continue + } + m.Name = string(b[6 : 6+i]) + break + } + return m, nil +} diff --git a/vendor/golang.org/x/net/route/interface_classic.go b/vendor/golang.org/x/net/route/interface_classic.go new file mode 100644 index 0000000..ac4e7a6 --- /dev/null +++ b/vendor/golang.org/x/net/route/interface_classic.go @@ -0,0 +1,66 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly netbsd + +package route + +import "runtime" + +func (w *wireFormat) parseInterfaceMessage(_ RIBType, b []byte) (Message, error) { + if len(b) < w.bodyOff { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + attrs := uint(nativeEndian.Uint32(b[4:8])) + if attrs&sysRTA_IFP == 0 { + return nil, nil + } + m := &InterfaceMessage{ + Version: int(b[2]), + Type: int(b[3]), + Addrs: make([]Addr, sysRTAX_MAX), + Flags: int(nativeEndian.Uint32(b[8:12])), + Index: int(nativeEndian.Uint16(b[12:14])), + extOff: w.extOff, + raw: b[:l], + } + a, err := parseLinkAddr(b[w.bodyOff:]) + if err != nil { + return nil, err + } + m.Addrs[sysRTAX_IFP] = a + m.Name = a.(*LinkAddr).Name + return m, nil +} + +func (w *wireFormat) parseInterfaceAddrMessage(_ RIBType, b []byte) (Message, error) { + if len(b) < w.bodyOff { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + m := &InterfaceAddrMessage{ + Version: int(b[2]), + Type: int(b[3]), + Flags: int(nativeEndian.Uint32(b[8:12])), + raw: b[:l], + } + if runtime.GOOS == "netbsd" { + m.Index = int(nativeEndian.Uint16(b[16:18])) + } else { + m.Index = int(nativeEndian.Uint16(b[12:14])) + } + var err error + m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[4:8])), parseKernelInetAddr, b[w.bodyOff:]) + if err != nil { + return nil, err + } + return m, nil +} diff --git a/vendor/golang.org/x/net/route/interface_freebsd.go b/vendor/golang.org/x/net/route/interface_freebsd.go new file mode 100644 index 0000000..9f6f50c --- /dev/null +++ b/vendor/golang.org/x/net/route/interface_freebsd.go @@ -0,0 +1,78 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +func (w *wireFormat) parseInterfaceMessage(typ RIBType, b []byte) (Message, error) { + var extOff, bodyOff int + if typ == sysNET_RT_IFLISTL { + if len(b) < 20 { + return nil, errMessageTooShort + } + extOff = int(nativeEndian.Uint16(b[18:20])) + bodyOff = int(nativeEndian.Uint16(b[16:18])) + } else { + extOff = w.extOff + bodyOff = w.bodyOff + } + if len(b) < extOff || len(b) < bodyOff { + return nil, errInvalidMessage + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + attrs := uint(nativeEndian.Uint32(b[4:8])) + if attrs&sysRTA_IFP == 0 { + return nil, nil + } + m := &InterfaceMessage{ + Version: int(b[2]), + Type: int(b[3]), + Flags: int(nativeEndian.Uint32(b[8:12])), + Index: int(nativeEndian.Uint16(b[12:14])), + Addrs: make([]Addr, sysRTAX_MAX), + extOff: extOff, + raw: b[:l], + } + a, err := parseLinkAddr(b[bodyOff:]) + if err != nil { + return nil, err + } + m.Addrs[sysRTAX_IFP] = a + m.Name = a.(*LinkAddr).Name + return m, nil +} + +func (w *wireFormat) parseInterfaceAddrMessage(typ RIBType, b []byte) (Message, error) { + var bodyOff int + if typ == sysNET_RT_IFLISTL { + if len(b) < 24 { + return nil, errMessageTooShort + } + bodyOff = int(nativeEndian.Uint16(b[16:18])) + } else { + bodyOff = w.bodyOff + } + if len(b) < bodyOff { + return nil, errInvalidMessage + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + m := &InterfaceAddrMessage{ + Version: int(b[2]), + Type: int(b[3]), + Flags: int(nativeEndian.Uint32(b[8:12])), + Index: int(nativeEndian.Uint16(b[12:14])), + raw: b[:l], + } + var err error + m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[4:8])), parseKernelInetAddr, b[bodyOff:]) + if err != nil { + return nil, err + } + return m, nil +} diff --git a/vendor/golang.org/x/net/route/interface_multicast.go b/vendor/golang.org/x/net/route/interface_multicast.go new file mode 100644 index 0000000..1e99a9c --- /dev/null +++ b/vendor/golang.org/x/net/route/interface_multicast.go @@ -0,0 +1,30 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd + +package route + +func (w *wireFormat) parseInterfaceMulticastAddrMessage(_ RIBType, b []byte) (Message, error) { + if len(b) < w.bodyOff { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + m := &InterfaceMulticastAddrMessage{ + Version: int(b[2]), + Type: int(b[3]), + Flags: int(nativeEndian.Uint32(b[8:12])), + Index: int(nativeEndian.Uint16(b[12:14])), + raw: b[:l], + } + var err error + m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[4:8])), parseKernelInetAddr, b[w.bodyOff:]) + if err != nil { + return nil, err + } + return m, nil +} diff --git a/vendor/golang.org/x/net/route/interface_openbsd.go b/vendor/golang.org/x/net/route/interface_openbsd.go new file mode 100644 index 0000000..e4a143c --- /dev/null +++ b/vendor/golang.org/x/net/route/interface_openbsd.go @@ -0,0 +1,90 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +func (*wireFormat) parseInterfaceMessage(_ RIBType, b []byte) (Message, error) { + if len(b) < 32 { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + attrs := uint(nativeEndian.Uint32(b[12:16])) + if attrs&sysRTA_IFP == 0 { + return nil, nil + } + m := &InterfaceMessage{ + Version: int(b[2]), + Type: int(b[3]), + Flags: int(nativeEndian.Uint32(b[16:20])), + Index: int(nativeEndian.Uint16(b[6:8])), + Addrs: make([]Addr, sysRTAX_MAX), + raw: b[:l], + } + ll := int(nativeEndian.Uint16(b[4:6])) + if len(b) < ll { + return nil, errInvalidMessage + } + a, err := parseLinkAddr(b[ll:]) + if err != nil { + return nil, err + } + m.Addrs[sysRTAX_IFP] = a + m.Name = a.(*LinkAddr).Name + return m, nil +} + +func (*wireFormat) parseInterfaceAddrMessage(_ RIBType, b []byte) (Message, error) { + if len(b) < 24 { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + bodyOff := int(nativeEndian.Uint16(b[4:6])) + if len(b) < bodyOff { + return nil, errInvalidMessage + } + m := &InterfaceAddrMessage{ + Version: int(b[2]), + Type: int(b[3]), + Flags: int(nativeEndian.Uint32(b[12:16])), + Index: int(nativeEndian.Uint16(b[6:8])), + raw: b[:l], + } + var err error + m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[12:16])), parseKernelInetAddr, b[bodyOff:]) + if err != nil { + return nil, err + } + return m, nil +} + +func (*wireFormat) parseInterfaceAnnounceMessage(_ RIBType, b []byte) (Message, error) { + if len(b) < 26 { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + m := &InterfaceAnnounceMessage{ + Version: int(b[2]), + Type: int(b[3]), + Index: int(nativeEndian.Uint16(b[6:8])), + What: int(nativeEndian.Uint16(b[8:10])), + raw: b[:l], + } + for i := 0; i < 16; i++ { + if b[10+i] != 0 { + continue + } + m.Name = string(b[10 : 10+i]) + break + } + return m, nil +} diff --git a/vendor/golang.org/x/net/route/message.go b/vendor/golang.org/x/net/route/message.go new file mode 100644 index 0000000..0fa7e09 --- /dev/null +++ b/vendor/golang.org/x/net/route/message.go @@ -0,0 +1,72 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package route + +// A Message represents a routing message. +type Message interface { + // Sys returns operating system-specific information. + Sys() []Sys +} + +// A Sys reprensents operating system-specific information. +type Sys interface { + // SysType returns a type of operating system-specific + // information. + SysType() SysType +} + +// A SysType represents a type of operating system-specific +// information. +type SysType int + +const ( + SysMetrics SysType = iota + SysStats +) + +// ParseRIB parses b as a routing information base and returns a list +// of routing messages. +func ParseRIB(typ RIBType, b []byte) ([]Message, error) { + if !typ.parseable() { + return nil, errUnsupportedMessage + } + var msgs []Message + nmsgs, nskips := 0, 0 + for len(b) > 4 { + nmsgs++ + l := int(nativeEndian.Uint16(b[:2])) + if l == 0 { + return nil, errInvalidMessage + } + if len(b) < l { + return nil, errMessageTooShort + } + if b[2] != sysRTM_VERSION { + b = b[l:] + continue + } + if w, ok := wireFormats[int(b[3])]; !ok { + nskips++ + } else { + m, err := w.parse(typ, b) + if err != nil { + return nil, err + } + if m == nil { + nskips++ + } else { + msgs = append(msgs, m) + } + } + b = b[l:] + } + // We failed to parse any of the messages - version mismatch? + if nmsgs != len(msgs)+nskips { + return nil, errMessageMismatch + } + return msgs, nil +} diff --git a/vendor/golang.org/x/net/route/message_darwin_test.go b/vendor/golang.org/x/net/route/message_darwin_test.go new file mode 100644 index 0000000..3fdd12d --- /dev/null +++ b/vendor/golang.org/x/net/route/message_darwin_test.go @@ -0,0 +1,27 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +import "testing" + +func TestFetchAndParseRIBOnDarwin(t *testing.T) { + for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} { + for _, typ := range []RIBType{sysNET_RT_FLAGS, sysNET_RT_DUMP2, sysNET_RT_IFLIST2} { + ms, err := fetchAndParseRIB(af, typ) + if err != nil { + t.Error(err) + continue + } + ss, err := msgs(ms).validate() + if err != nil { + t.Errorf("%v %d %v", addrFamily(af), typ, err) + continue + } + for _, s := range ss { + t.Log(s) + } + } + } +} diff --git a/vendor/golang.org/x/net/route/message_freebsd_test.go b/vendor/golang.org/x/net/route/message_freebsd_test.go new file mode 100644 index 0000000..785c273 --- /dev/null +++ b/vendor/golang.org/x/net/route/message_freebsd_test.go @@ -0,0 +1,106 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +import ( + "testing" + "time" + "unsafe" +) + +func TestFetchAndParseRIBOnFreeBSD(t *testing.T) { + for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} { + for _, typ := range []RIBType{sysNET_RT_IFMALIST} { + ms, err := fetchAndParseRIB(af, typ) + if err != nil { + t.Error(err) + continue + } + ss, err := msgs(ms).validate() + if err != nil { + t.Errorf("%v %d %v", addrFamily(af), typ, err) + continue + } + for _, s := range ss { + t.Log(s) + } + } + } +} + +func TestFetchAndParseRIBOnFreeBSD10AndAbove(t *testing.T) { + if _, err := FetchRIB(sysAF_UNSPEC, sysNET_RT_IFLISTL, 0); err != nil { + t.Skip("NET_RT_IFLISTL not supported") + } + var p uintptr + if kernelAlign != int(unsafe.Sizeof(p)) { + t.Skip("NET_RT_IFLIST vs. NET_RT_IFLISTL doesn't work for 386 emulation on amd64") + } + + var tests = [2]struct { + typ RIBType + b []byte + msgs []Message + ss []string + }{ + {typ: sysNET_RT_IFLIST}, + {typ: sysNET_RT_IFLISTL}, + } + for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} { + var lastErr error + for i := 0; i < 3; i++ { + for j := range tests { + var err error + if tests[j].b, err = FetchRIB(af, tests[j].typ, 0); err != nil { + lastErr = err + time.Sleep(10 * time.Millisecond) + } + } + if lastErr == nil { + break + } + } + if lastErr != nil { + t.Error(af, lastErr) + continue + } + for i := range tests { + var err error + if tests[i].msgs, err = ParseRIB(tests[i].typ, tests[i].b); err != nil { + lastErr = err + t.Error(af, err) + } + } + if lastErr != nil { + continue + } + for i := range tests { + var err error + tests[i].ss, err = msgs(tests[i].msgs).validate() + if err != nil { + lastErr = err + t.Error(af, err) + } + for _, s := range tests[i].ss { + t.Log(s) + } + } + if lastErr != nil { + continue + } + for i := len(tests) - 1; i > 0; i-- { + if len(tests[i].ss) != len(tests[i-1].ss) { + t.Errorf("got %v; want %v", tests[i].ss, tests[i-1].ss) + continue + } + for j, s1 := range tests[i].ss { + s0 := tests[i-1].ss[j] + if s1 != s0 { + t.Errorf("got %s; want %s", s1, s0) + } + } + } + } +} diff --git a/vendor/golang.org/x/net/route/message_test.go b/vendor/golang.org/x/net/route/message_test.go new file mode 100644 index 0000000..b3bc60c --- /dev/null +++ b/vendor/golang.org/x/net/route/message_test.go @@ -0,0 +1,233 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package route + +import ( + "os" + "syscall" + "testing" + "time" +) + +func TestFetchAndParseRIB(t *testing.T) { + for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} { + for _, typ := range []RIBType{sysNET_RT_DUMP, sysNET_RT_IFLIST} { + ms, err := fetchAndParseRIB(af, typ) + if err != nil { + t.Error(err) + continue + } + ss, err := msgs(ms).validate() + if err != nil { + t.Errorf("%v %d %v", addrFamily(af), typ, err) + continue + } + for _, s := range ss { + t.Log(s) + } + } + } +} + +var ( + rtmonSock int + rtmonErr error +) + +func init() { + // We need to keep rtmonSock alive to avoid treading on + // recycled socket descriptors. + rtmonSock, rtmonErr = syscall.Socket(sysAF_ROUTE, sysSOCK_RAW, sysAF_UNSPEC) +} + +// TestMonitorAndParseRIB leaks a worker goroutine and a socket +// descriptor but that's intentional. +func TestMonitorAndParseRIB(t *testing.T) { + if testing.Short() || os.Getuid() != 0 { + t.Skip("must be root") + } + + if rtmonErr != nil { + t.Fatal(rtmonErr) + } + + // We suppose that using an IPv4 link-local address and the + // dot1Q ID for Token Ring and FDDI doesn't harm anyone. + pv := &propVirtual{addr: "169.254.0.1", mask: "255.255.255.0"} + if err := pv.configure(1002); err != nil { + t.Skip(err) + } + if err := pv.setup(); err != nil { + t.Skip(err) + } + pv.teardown() + + go func() { + b := make([]byte, os.Getpagesize()) + for { + // There's no easy way to unblock this read + // call because the routing message exchange + // over routing socket is a connectionless + // message-oriented protocol, no control plane + // for signaling connectivity, and we cannot + // use the net package of standard library due + // to the lack of support for routing socket + // and circular dependency. + n, err := syscall.Read(rtmonSock, b) + if err != nil { + return + } + ms, err := ParseRIB(0, b[:n]) + if err != nil { + t.Error(err) + return + } + ss, err := msgs(ms).validate() + if err != nil { + t.Error(err) + return + } + for _, s := range ss { + t.Log(s) + } + } + }() + + for _, vid := range []int{1002, 1003, 1004, 1005} { + pv := &propVirtual{addr: "169.254.0.1", mask: "255.255.255.0"} + if err := pv.configure(vid); err != nil { + t.Fatal(err) + } + if err := pv.setup(); err != nil { + t.Fatal(err) + } + time.Sleep(200 * time.Millisecond) + if err := pv.teardown(); err != nil { + t.Fatal(err) + } + time.Sleep(200 * time.Millisecond) + } +} + +func TestParseRIBWithFuzz(t *testing.T) { + for _, fuzz := range []string{ + "0\x00\x05\x050000000000000000" + + "00000000000000000000" + + "00000000000000000000" + + "00000000000000000000" + + "0000000000000\x02000000" + + "00000000", + "\x02\x00\x05\f0000000000000000" + + "0\x0200000000000000", + "\x02\x00\x05\x100000000000000\x1200" + + "0\x00\xff\x00", + "\x02\x00\x05\f0000000000000000" + + "0\x12000\x00\x02\x0000", + "\x00\x00\x00\x01\x00", + "00000", + } { + for typ := RIBType(0); typ < 256; typ++ { + ParseRIB(typ, []byte(fuzz)) + } + } +} + +func TestRouteMessage(t *testing.T) { + s, err := syscall.Socket(sysAF_ROUTE, sysSOCK_RAW, sysAF_UNSPEC) + if err != nil { + t.Fatal(err) + } + defer syscall.Close(s) + + var ms []RouteMessage + for _, af := range []int{sysAF_INET, sysAF_INET6} { + rs, err := fetchAndParseRIB(af, sysNET_RT_DUMP) + if err != nil || len(rs) == 0 { + continue + } + switch af { + case sysAF_INET: + ms = append(ms, []RouteMessage{ + { + Type: sysRTM_GET, + Addrs: []Addr{ + &Inet4Addr{IP: [4]byte{127, 0, 0, 1}}, + nil, + nil, + nil, + &LinkAddr{}, + &Inet4Addr{}, + nil, + &Inet4Addr{}, + }, + }, + { + Type: sysRTM_GET, + Addrs: []Addr{ + &Inet4Addr{IP: [4]byte{127, 0, 0, 1}}, + }, + }, + }...) + case sysAF_INET6: + ms = append(ms, []RouteMessage{ + { + Type: sysRTM_GET, + Addrs: []Addr{ + &Inet6Addr{IP: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}, + nil, + nil, + nil, + &LinkAddr{}, + &Inet6Addr{}, + nil, + &Inet6Addr{}, + }, + }, + { + Type: sysRTM_GET, + Addrs: []Addr{ + &Inet6Addr{IP: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}, + }, + }, + }...) + } + } + for i, m := range ms { + m.ID = uintptr(os.Getpid()) + m.Seq = i + 1 + wb, err := m.Marshal() + if err != nil { + t.Fatalf("%v: %v", m, err) + } + if _, err := syscall.Write(s, wb); err != nil { + t.Fatalf("%v: %v", m, err) + } + rb := make([]byte, os.Getpagesize()) + n, err := syscall.Read(s, rb) + if err != nil { + t.Fatalf("%v: %v", m, err) + } + rms, err := ParseRIB(0, rb[:n]) + if err != nil { + t.Fatalf("%v: %v", m, err) + } + for _, rm := range rms { + err := rm.(*RouteMessage).Err + if err != nil { + t.Errorf("%v: %v", m, err) + } + } + ss, err := msgs(rms).validate() + if err != nil { + t.Fatalf("%v: %v", m, err) + } + for _, s := range ss { + t.Log(s) + } + + } +} diff --git a/vendor/golang.org/x/net/route/route.go b/vendor/golang.org/x/net/route/route.go new file mode 100644 index 0000000..081da0d --- /dev/null +++ b/vendor/golang.org/x/net/route/route.go @@ -0,0 +1,123 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +// Package route provides basic functions for the manipulation of +// packet routing facilities on BSD variants. +// +// The package supports any version of Darwin, any version of +// DragonFly BSD, FreeBSD 7 through 11, NetBSD 6 and above, and +// OpenBSD 5.6 and above. +package route + +import ( + "errors" + "os" + "syscall" +) + +var ( + errUnsupportedMessage = errors.New("unsupported message") + errMessageMismatch = errors.New("message mismatch") + errMessageTooShort = errors.New("message too short") + errInvalidMessage = errors.New("invalid message") + errInvalidAddr = errors.New("invalid address") + errShortBuffer = errors.New("short buffer") +) + +// A RouteMessage represents a message conveying an address prefix, a +// nexthop address and an output interface. +// +// Unlike other messages, this message can be used to query adjacency +// information for the given address prefix, to add a new route, and +// to delete or modify the existing route from the routing information +// base inside the kernel by writing and reading route messages on a +// routing socket. +// +// For the manipulation of routing information, the route message must +// contain appropriate fields that include: +// +// Version = +// Type = +// Flags = +// Index = +// ID = +// Seq = +// Addrs = +// +// The Type field specifies a type of manipulation, the Flags field +// specifies a class of target information and the Addrs field +// specifies target information like the following: +// +// route.RouteMessage{ +// Version: RTM_VERSION, +// Type: RTM_GET, +// Flags: RTF_UP | RTF_HOST, +// ID: uintptr(os.Getpid()), +// Seq: 1, +// Addrs: []route.Addrs{ +// RTAX_DST: &route.Inet4Addr{ ... }, +// RTAX_IFP: &route.LinkAddr{ ... }, +// RTAX_BRD: &route.Inet4Addr{ ... }, +// }, +// } +// +// The values for the above fields depend on the implementation of +// each operating system. +// +// The Err field on a response message contains an error value on the +// requested operation. If non-nil, the requested operation is failed. +type RouteMessage struct { + Version int // message version + Type int // message type + Flags int // route flags + Index int // interface index when atatched + ID uintptr // sender's identifier; usually process ID + Seq int // sequence number + Err error // error on requested operation + Addrs []Addr // addresses + + extOff int // offset of header extension + raw []byte // raw message +} + +// Marshal returns the binary encoding of m. +func (m *RouteMessage) Marshal() ([]byte, error) { + return m.marshal() +} + +// A RIBType reprensents a type of routing information base. +type RIBType int + +const ( + RIBTypeRoute RIBType = syscall.NET_RT_DUMP + RIBTypeInterface RIBType = syscall.NET_RT_IFLIST +) + +// FetchRIB fetches a routing information base from the operating +// system. +// +// The provided af must be an address family. +// +// The provided arg must be a RIBType-specific argument. +// When RIBType is related to routes, arg might be a set of route +// flags. When RIBType is related to network interfaces, arg might be +// an interface index or a set of interface flags. In most cases, zero +// means a wildcard. +func FetchRIB(af int, typ RIBType, arg int) ([]byte, error) { + mib := [6]int32{sysCTL_NET, sysAF_ROUTE, 0, int32(af), int32(typ), int32(arg)} + n := uintptr(0) + if err := sysctl(mib[:], nil, &n, nil, 0); err != nil { + return nil, os.NewSyscallError("sysctl", err) + } + if n == 0 { + return nil, nil + } + b := make([]byte, n) + if err := sysctl(mib[:], &b[0], &n, nil, 0); err != nil { + return nil, os.NewSyscallError("sysctl", err) + } + return b[:n], nil +} diff --git a/vendor/golang.org/x/net/route/route_classic.go b/vendor/golang.org/x/net/route/route_classic.go new file mode 100644 index 0000000..61b2bb4 --- /dev/null +++ b/vendor/golang.org/x/net/route/route_classic.go @@ -0,0 +1,67 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd + +package route + +import "syscall" + +func (m *RouteMessage) marshal() ([]byte, error) { + w, ok := wireFormats[m.Type] + if !ok { + return nil, errUnsupportedMessage + } + l := w.bodyOff + addrsSpace(m.Addrs) + b := make([]byte, l) + nativeEndian.PutUint16(b[:2], uint16(l)) + if m.Version == 0 { + b[2] = sysRTM_VERSION + } else { + b[2] = byte(m.Version) + } + b[3] = byte(m.Type) + nativeEndian.PutUint32(b[8:12], uint32(m.Flags)) + nativeEndian.PutUint16(b[4:6], uint16(m.Index)) + nativeEndian.PutUint32(b[16:20], uint32(m.ID)) + nativeEndian.PutUint32(b[20:24], uint32(m.Seq)) + attrs, err := marshalAddrs(b[w.bodyOff:], m.Addrs) + if err != nil { + return nil, err + } + if attrs > 0 { + nativeEndian.PutUint32(b[12:16], uint32(attrs)) + } + return b, nil +} + +func (w *wireFormat) parseRouteMessage(typ RIBType, b []byte) (Message, error) { + if len(b) < w.bodyOff { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + m := &RouteMessage{ + Version: int(b[2]), + Type: int(b[3]), + Flags: int(nativeEndian.Uint32(b[8:12])), + Index: int(nativeEndian.Uint16(b[4:6])), + ID: uintptr(nativeEndian.Uint32(b[16:20])), + Seq: int(nativeEndian.Uint32(b[20:24])), + extOff: w.extOff, + raw: b[:l], + } + errno := syscall.Errno(nativeEndian.Uint32(b[28:32])) + if errno != 0 { + m.Err = errno + } + var err error + m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[12:16])), parseKernelInetAddr, b[w.bodyOff:]) + if err != nil { + return nil, err + } + return m, nil +} diff --git a/vendor/golang.org/x/net/route/route_openbsd.go b/vendor/golang.org/x/net/route/route_openbsd.go new file mode 100644 index 0000000..daf2e90 --- /dev/null +++ b/vendor/golang.org/x/net/route/route_openbsd.go @@ -0,0 +1,65 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +import "syscall" + +func (m *RouteMessage) marshal() ([]byte, error) { + l := sizeofRtMsghdr + addrsSpace(m.Addrs) + b := make([]byte, l) + nativeEndian.PutUint16(b[:2], uint16(l)) + if m.Version == 0 { + b[2] = sysRTM_VERSION + } else { + b[2] = byte(m.Version) + } + b[3] = byte(m.Type) + nativeEndian.PutUint16(b[4:6], uint16(sizeofRtMsghdr)) + nativeEndian.PutUint32(b[16:20], uint32(m.Flags)) + nativeEndian.PutUint16(b[6:8], uint16(m.Index)) + nativeEndian.PutUint32(b[24:28], uint32(m.ID)) + nativeEndian.PutUint32(b[28:32], uint32(m.Seq)) + attrs, err := marshalAddrs(b[sizeofRtMsghdr:], m.Addrs) + if err != nil { + return nil, err + } + if attrs > 0 { + nativeEndian.PutUint32(b[12:16], uint32(attrs)) + } + return b, nil +} + +func (*wireFormat) parseRouteMessage(_ RIBType, b []byte) (Message, error) { + if len(b) < sizeofRtMsghdr { + return nil, errMessageTooShort + } + l := int(nativeEndian.Uint16(b[:2])) + if len(b) < l { + return nil, errInvalidMessage + } + m := &RouteMessage{ + Version: int(b[2]), + Type: int(b[3]), + Flags: int(nativeEndian.Uint32(b[16:20])), + Index: int(nativeEndian.Uint16(b[6:8])), + ID: uintptr(nativeEndian.Uint32(b[24:28])), + Seq: int(nativeEndian.Uint32(b[28:32])), + raw: b[:l], + } + ll := int(nativeEndian.Uint16(b[4:6])) + if len(b) < ll { + return nil, errInvalidMessage + } + errno := syscall.Errno(nativeEndian.Uint32(b[32:36])) + if errno != 0 { + m.Err = errno + } + as, err := parseAddrs(uint(nativeEndian.Uint32(b[12:16])), parseKernelInetAddr, b[ll:]) + if err != nil { + return nil, err + } + m.Addrs = as + return m, nil +} diff --git a/vendor/golang.org/x/net/route/route_test.go b/vendor/golang.org/x/net/route/route_test.go new file mode 100644 index 0000000..63fd8c5 --- /dev/null +++ b/vendor/golang.org/x/net/route/route_test.go @@ -0,0 +1,386 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package route + +import ( + "fmt" + "os/exec" + "runtime" + "time" +) + +func (m *RouteMessage) String() string { + return fmt.Sprintf("%s", addrAttrs(nativeEndian.Uint32(m.raw[12:16]))) +} + +func (m *InterfaceMessage) String() string { + var attrs addrAttrs + if runtime.GOOS == "openbsd" { + attrs = addrAttrs(nativeEndian.Uint32(m.raw[12:16])) + } else { + attrs = addrAttrs(nativeEndian.Uint32(m.raw[4:8])) + } + return fmt.Sprintf("%s", attrs) +} + +func (m *InterfaceAddrMessage) String() string { + var attrs addrAttrs + if runtime.GOOS == "openbsd" { + attrs = addrAttrs(nativeEndian.Uint32(m.raw[12:16])) + } else { + attrs = addrAttrs(nativeEndian.Uint32(m.raw[4:8])) + } + return fmt.Sprintf("%s", attrs) +} + +func (m *InterfaceMulticastAddrMessage) String() string { + return fmt.Sprintf("%s", addrAttrs(nativeEndian.Uint32(m.raw[4:8]))) +} + +func (m *InterfaceAnnounceMessage) String() string { + what := "" + switch m.What { + case 0: + what = "arrival" + case 1: + what = "departure" + } + return fmt.Sprintf("(%d %s %s)", m.Index, m.Name, what) +} + +func (m *InterfaceMetrics) String() string { + return fmt.Sprintf("(type=%d mtu=%d)", m.Type, m.MTU) +} + +func (m *RouteMetrics) String() string { + return fmt.Sprintf("(pmtu=%d)", m.PathMTU) +} + +type addrAttrs uint + +var addrAttrNames = [...]string{ + "dst", + "gateway", + "netmask", + "genmask", + "ifp", + "ifa", + "author", + "brd", + "df:mpls1-n:tag-o:src", // mpls1 for dragonfly, tag for netbsd, src for openbsd + "df:mpls2-o:srcmask", // mpls2 for dragonfly, srcmask for openbsd + "df:mpls3-o:label", // mpls3 for dragonfly, label for openbsd +} + +func (attrs addrAttrs) String() string { + var s string + for i, name := range addrAttrNames { + if attrs&(1<" + } + return s +} + +type msgs []Message + +func (ms msgs) validate() ([]string, error) { + var ss []string + for _, m := range ms { + switch m := m.(type) { + case *RouteMessage: + if err := addrs(m.Addrs).match(addrAttrs(nativeEndian.Uint32(m.raw[12:16]))); err != nil { + return nil, err + } + sys := m.Sys() + if sys == nil { + return nil, fmt.Errorf("no sys for %s", m.String()) + } + ss = append(ss, m.String()+" "+syss(sys).String()+" "+addrs(m.Addrs).String()) + case *InterfaceMessage: + var attrs addrAttrs + if runtime.GOOS == "openbsd" { + attrs = addrAttrs(nativeEndian.Uint32(m.raw[12:16])) + } else { + attrs = addrAttrs(nativeEndian.Uint32(m.raw[4:8])) + } + if err := addrs(m.Addrs).match(attrs); err != nil { + return nil, err + } + sys := m.Sys() + if sys == nil { + return nil, fmt.Errorf("no sys for %s", m.String()) + } + ss = append(ss, m.String()+" "+syss(sys).String()+" "+addrs(m.Addrs).String()) + case *InterfaceAddrMessage: + var attrs addrAttrs + if runtime.GOOS == "openbsd" { + attrs = addrAttrs(nativeEndian.Uint32(m.raw[12:16])) + } else { + attrs = addrAttrs(nativeEndian.Uint32(m.raw[4:8])) + } + if err := addrs(m.Addrs).match(attrs); err != nil { + return nil, err + } + ss = append(ss, m.String()+" "+addrs(m.Addrs).String()) + case *InterfaceMulticastAddrMessage: + if err := addrs(m.Addrs).match(addrAttrs(nativeEndian.Uint32(m.raw[4:8]))); err != nil { + return nil, err + } + ss = append(ss, m.String()+" "+addrs(m.Addrs).String()) + case *InterfaceAnnounceMessage: + ss = append(ss, m.String()) + default: + ss = append(ss, fmt.Sprintf("%+v", m)) + } + } + return ss, nil +} + +type syss []Sys + +func (sys syss) String() string { + var s string + for _, sy := range sys { + switch sy := sy.(type) { + case *InterfaceMetrics: + if len(s) > 0 { + s += " " + } + s += sy.String() + case *RouteMetrics: + if len(s) > 0 { + s += " " + } + s += sy.String() + } + } + return s +} + +type addrFamily int + +func (af addrFamily) String() string { + switch af { + case sysAF_UNSPEC: + return "unspec" + case sysAF_LINK: + return "link" + case sysAF_INET: + return "inet4" + case sysAF_INET6: + return "inet6" + default: + return fmt.Sprintf("%d", af) + } +} + +const hexDigit = "0123456789abcdef" + +type llAddr []byte + +func (a llAddr) String() string { + if len(a) == 0 { + return "" + } + buf := make([]byte, 0, len(a)*3-1) + for i, b := range a { + if i > 0 { + buf = append(buf, ':') + } + buf = append(buf, hexDigit[b>>4]) + buf = append(buf, hexDigit[b&0xF]) + } + return string(buf) +} + +type ipAddr []byte + +func (a ipAddr) String() string { + if len(a) == 0 { + return "" + } + if len(a) == 4 { + return fmt.Sprintf("%d.%d.%d.%d", a[0], a[1], a[2], a[3]) + } + if len(a) == 16 { + return fmt.Sprintf("%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]) + } + s := make([]byte, len(a)*2) + for i, tn := range a { + s[i*2], s[i*2+1] = hexDigit[tn>>4], hexDigit[tn&0xf] + } + return string(s) +} + +func (a *LinkAddr) String() string { + name := a.Name + if name == "" { + name = "" + } + lla := llAddr(a.Addr).String() + if lla == "" { + lla = "" + } + return fmt.Sprintf("(%v %d %s %s)", addrFamily(a.Family()), a.Index, name, lla) +} + +func (a *Inet4Addr) String() string { + return fmt.Sprintf("(%v %v)", addrFamily(a.Family()), ipAddr(a.IP[:])) +} + +func (a *Inet6Addr) String() string { + return fmt.Sprintf("(%v %v %d)", addrFamily(a.Family()), ipAddr(a.IP[:]), a.ZoneID) +} + +func (a *DefaultAddr) String() string { + return fmt.Sprintf("(%v %s)", addrFamily(a.Family()), ipAddr(a.Raw[2:]).String()) +} + +type addrs []Addr + +func (as addrs) String() string { + var s string + for _, a := range as { + if a == nil { + continue + } + if len(s) > 0 { + s += " " + } + switch a := a.(type) { + case *LinkAddr: + s += a.String() + case *Inet4Addr: + s += a.String() + case *Inet6Addr: + s += a.String() + case *DefaultAddr: + s += a.String() + } + } + if s == "" { + return "" + } + return s +} + +func (as addrs) match(attrs addrAttrs) error { + var ts addrAttrs + af := sysAF_UNSPEC + for i := range as { + if as[i] != nil { + ts |= 1 << uint(i) + } + switch as[i].(type) { + case *Inet4Addr: + if af == sysAF_UNSPEC { + af = sysAF_INET + } + if af != sysAF_INET { + return fmt.Errorf("got %v; want %v", addrs(as), addrFamily(af)) + } + case *Inet6Addr: + if af == sysAF_UNSPEC { + af = sysAF_INET6 + } + if af != sysAF_INET6 { + return fmt.Errorf("got %v; want %v", addrs(as), addrFamily(af)) + } + } + } + if ts != attrs && ts > attrs { + return fmt.Errorf("%v not included in %v", ts, attrs) + } + return nil +} + +func fetchAndParseRIB(af int, typ RIBType) ([]Message, error) { + var err error + var b []byte + for i := 0; i < 3; i++ { + if b, err = FetchRIB(af, typ, 0); err != nil { + time.Sleep(10 * time.Millisecond) + continue + } + break + } + if err != nil { + return nil, fmt.Errorf("%v %d %v", addrFamily(af), typ, err) + } + ms, err := ParseRIB(typ, b) + if err != nil { + return nil, fmt.Errorf("%v %d %v", addrFamily(af), typ, err) + } + return ms, nil +} + +// propVirtual is a proprietary virtual network interface. +type propVirtual struct { + name string + addr, mask string + setupCmds []*exec.Cmd + teardownCmds []*exec.Cmd +} + +func (pv *propVirtual) setup() error { + for _, cmd := range pv.setupCmds { + if err := cmd.Run(); err != nil { + pv.teardown() + return err + } + } + return nil +} + +func (pv *propVirtual) teardown() error { + for _, cmd := range pv.teardownCmds { + if err := cmd.Run(); err != nil { + return err + } + } + return nil +} + +func (pv *propVirtual) configure(suffix int) error { + if runtime.GOOS == "openbsd" { + pv.name = fmt.Sprintf("vether%d", suffix) + } else { + pv.name = fmt.Sprintf("vlan%d", suffix) + } + xname, err := exec.LookPath("ifconfig") + if err != nil { + return err + } + pv.setupCmds = append(pv.setupCmds, &exec.Cmd{ + Path: xname, + Args: []string{"ifconfig", pv.name, "create"}, + }) + if runtime.GOOS == "netbsd" { + // NetBSD requires an underlying dot1Q-capable network + // interface. + pv.setupCmds = append(pv.setupCmds, &exec.Cmd{ + Path: xname, + Args: []string{"ifconfig", pv.name, "vlan", fmt.Sprintf("%d", suffix&0xfff), "vlanif", "wm0"}, + }) + } + pv.setupCmds = append(pv.setupCmds, &exec.Cmd{ + Path: xname, + Args: []string{"ifconfig", pv.name, "inet", pv.addr, "netmask", pv.mask}, + }) + pv.teardownCmds = append(pv.teardownCmds, &exec.Cmd{ + Path: xname, + Args: []string{"ifconfig", pv.name, "destroy"}, + }) + return nil +} diff --git a/vendor/golang.org/x/net/route/sys.go b/vendor/golang.org/x/net/route/sys.go new file mode 100644 index 0000000..3d0ee9b --- /dev/null +++ b/vendor/golang.org/x/net/route/sys.go @@ -0,0 +1,39 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package route + +import "unsafe" + +var ( + nativeEndian binaryByteOrder + kernelAlign int + wireFormats map[int]*wireFormat +) + +func init() { + i := uint32(1) + b := (*[4]byte)(unsafe.Pointer(&i)) + if b[0] == 1 { + nativeEndian = littleEndian + } else { + nativeEndian = bigEndian + } + kernelAlign, wireFormats = probeRoutingStack() +} + +func roundup(l int) int { + if l == 0 { + return kernelAlign + } + return (l + kernelAlign - 1) & ^(kernelAlign - 1) +} + +type wireFormat struct { + extOff int // offset of header extension + bodyOff int // offset of message body + parse func(RIBType, []byte) (Message, error) +} diff --git a/vendor/golang.org/x/net/route/sys_darwin.go b/vendor/golang.org/x/net/route/sys_darwin.go new file mode 100644 index 0000000..e742c91 --- /dev/null +++ b/vendor/golang.org/x/net/route/sys_darwin.go @@ -0,0 +1,87 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +func (typ RIBType) parseable() bool { + switch typ { + case sysNET_RT_STAT, sysNET_RT_TRASH: + return false + default: + return true + } +} + +// A RouteMetrics represents route metrics. +type RouteMetrics struct { + PathMTU int // path maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (rmx *RouteMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *RouteMessage) Sys() []Sys { + return []Sys{ + &RouteMetrics{ + PathMTU: int(nativeEndian.Uint32(m.raw[m.extOff+4 : m.extOff+8])), + }, + } +} + +// A InterfaceMetrics represents interface metrics. +type InterfaceMetrics struct { + Type int // interface type + MTU int // maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (imx *InterfaceMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *InterfaceMessage) Sys() []Sys { + return []Sys{ + &InterfaceMetrics{ + Type: int(m.raw[m.extOff]), + MTU: int(nativeEndian.Uint32(m.raw[m.extOff+8 : m.extOff+12])), + }, + } +} + +func probeRoutingStack() (int, map[int]*wireFormat) { + rtm := &wireFormat{extOff: 36, bodyOff: sizeofRtMsghdrDarwin15} + rtm.parse = rtm.parseRouteMessage + rtm2 := &wireFormat{extOff: 36, bodyOff: sizeofRtMsghdr2Darwin15} + rtm2.parse = rtm2.parseRouteMessage + ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrDarwin15} + ifm.parse = ifm.parseInterfaceMessage + ifm2 := &wireFormat{extOff: 32, bodyOff: sizeofIfMsghdr2Darwin15} + ifm2.parse = ifm2.parseInterfaceMessage + ifam := &wireFormat{extOff: sizeofIfaMsghdrDarwin15, bodyOff: sizeofIfaMsghdrDarwin15} + ifam.parse = ifam.parseInterfaceAddrMessage + ifmam := &wireFormat{extOff: sizeofIfmaMsghdrDarwin15, bodyOff: sizeofIfmaMsghdrDarwin15} + ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage + ifmam2 := &wireFormat{extOff: sizeofIfmaMsghdr2Darwin15, bodyOff: sizeofIfmaMsghdr2Darwin15} + ifmam2.parse = ifmam2.parseInterfaceMulticastAddrMessage + // Darwin kernels require 32-bit aligned access to routing facilities. + return 4, map[int]*wireFormat{ + sysRTM_ADD: rtm, + sysRTM_DELETE: rtm, + sysRTM_CHANGE: rtm, + sysRTM_GET: rtm, + sysRTM_LOSING: rtm, + sysRTM_REDIRECT: rtm, + sysRTM_MISS: rtm, + sysRTM_LOCK: rtm, + sysRTM_RESOLVE: rtm, + sysRTM_NEWADDR: ifam, + sysRTM_DELADDR: ifam, + sysRTM_IFINFO: ifm, + sysRTM_NEWMADDR: ifmam, + sysRTM_DELMADDR: ifmam, + sysRTM_IFINFO2: ifm2, + sysRTM_NEWMADDR2: ifmam2, + sysRTM_GET2: rtm2, + } +} diff --git a/vendor/golang.org/x/net/route/sys_dragonfly.go b/vendor/golang.org/x/net/route/sys_dragonfly.go new file mode 100644 index 0000000..b175cb1 --- /dev/null +++ b/vendor/golang.org/x/net/route/sys_dragonfly.go @@ -0,0 +1,76 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +import "unsafe" + +func (typ RIBType) parseable() bool { return true } + +// A RouteMetrics represents route metrics. +type RouteMetrics struct { + PathMTU int // path maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (rmx *RouteMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *RouteMessage) Sys() []Sys { + return []Sys{ + &RouteMetrics{ + PathMTU: int(nativeEndian.Uint64(m.raw[m.extOff+8 : m.extOff+16])), + }, + } +} + +// A InterfaceMetrics represents interface metrics. +type InterfaceMetrics struct { + Type int // interface type + MTU int // maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (imx *InterfaceMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *InterfaceMessage) Sys() []Sys { + return []Sys{ + &InterfaceMetrics{ + Type: int(m.raw[m.extOff]), + MTU: int(nativeEndian.Uint32(m.raw[m.extOff+8 : m.extOff+12])), + }, + } +} + +func probeRoutingStack() (int, map[int]*wireFormat) { + var p uintptr + rtm := &wireFormat{extOff: 40, bodyOff: sizeofRtMsghdrDragonFlyBSD4} + rtm.parse = rtm.parseRouteMessage + ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrDragonFlyBSD4} + ifm.parse = ifm.parseInterfaceMessage + ifam := &wireFormat{extOff: sizeofIfaMsghdrDragonFlyBSD4, bodyOff: sizeofIfaMsghdrDragonFlyBSD4} + ifam.parse = ifam.parseInterfaceAddrMessage + ifmam := &wireFormat{extOff: sizeofIfmaMsghdrDragonFlyBSD4, bodyOff: sizeofIfmaMsghdrDragonFlyBSD4} + ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage + ifanm := &wireFormat{extOff: sizeofIfAnnouncemsghdrDragonFlyBSD4, bodyOff: sizeofIfAnnouncemsghdrDragonFlyBSD4} + ifanm.parse = ifanm.parseInterfaceAnnounceMessage + return int(unsafe.Sizeof(p)), map[int]*wireFormat{ + sysRTM_ADD: rtm, + sysRTM_DELETE: rtm, + sysRTM_CHANGE: rtm, + sysRTM_GET: rtm, + sysRTM_LOSING: rtm, + sysRTM_REDIRECT: rtm, + sysRTM_MISS: rtm, + sysRTM_LOCK: rtm, + sysRTM_RESOLVE: rtm, + sysRTM_NEWADDR: ifam, + sysRTM_DELADDR: ifam, + sysRTM_IFINFO: ifm, + sysRTM_NEWMADDR: ifmam, + sysRTM_DELMADDR: ifmam, + sysRTM_IFANNOUNCE: ifanm, + } +} diff --git a/vendor/golang.org/x/net/route/sys_freebsd.go b/vendor/golang.org/x/net/route/sys_freebsd.go new file mode 100644 index 0000000..010d4ae --- /dev/null +++ b/vendor/golang.org/x/net/route/sys_freebsd.go @@ -0,0 +1,155 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +import ( + "syscall" + "unsafe" +) + +func (typ RIBType) parseable() bool { return true } + +// A RouteMetrics represents route metrics. +type RouteMetrics struct { + PathMTU int // path maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (rmx *RouteMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *RouteMessage) Sys() []Sys { + if kernelAlign == 8 { + return []Sys{ + &RouteMetrics{ + PathMTU: int(nativeEndian.Uint64(m.raw[m.extOff+8 : m.extOff+16])), + }, + } + } + return []Sys{ + &RouteMetrics{ + PathMTU: int(nativeEndian.Uint32(m.raw[m.extOff+4 : m.extOff+8])), + }, + } +} + +// A InterfaceMetrics represents interface metrics. +type InterfaceMetrics struct { + Type int // interface type + MTU int // maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (imx *InterfaceMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *InterfaceMessage) Sys() []Sys { + return []Sys{ + &InterfaceMetrics{ + Type: int(m.raw[m.extOff]), + MTU: int(nativeEndian.Uint32(m.raw[m.extOff+8 : m.extOff+12])), + }, + } +} + +func probeRoutingStack() (int, map[int]*wireFormat) { + var p uintptr + wordSize := int(unsafe.Sizeof(p)) + align := int(unsafe.Sizeof(p)) + // In the case of kern.supported_archs="amd64 i386", we need + // to know the underlying kernel's architecture because the + // alignment for routing facilities are set at the build time + // of the kernel. + conf, _ := syscall.Sysctl("kern.conftxt") + for i, j := 0, 0; j < len(conf); j++ { + if conf[j] != '\n' { + continue + } + s := conf[i:j] + i = j + 1 + if len(s) > len("machine") && s[:len("machine")] == "machine" { + s = s[len("machine"):] + for k := 0; k < len(s); k++ { + if s[k] == ' ' || s[k] == '\t' { + s = s[1:] + } + break + } + if s == "amd64" { + align = 8 + } + break + } + } + var rtm, ifm, ifam, ifmam, ifanm *wireFormat + if align != wordSize { // 386 emulation on amd64 + rtm = &wireFormat{extOff: sizeofRtMsghdrFreeBSD10Emu - sizeofRtMetricsFreeBSD10Emu, bodyOff: sizeofRtMsghdrFreeBSD10Emu} + ifm = &wireFormat{extOff: 16} + ifam = &wireFormat{extOff: sizeofIfaMsghdrFreeBSD10Emu, bodyOff: sizeofIfaMsghdrFreeBSD10Emu} + ifmam = &wireFormat{extOff: sizeofIfmaMsghdrFreeBSD10Emu, bodyOff: sizeofIfmaMsghdrFreeBSD10Emu} + ifanm = &wireFormat{extOff: sizeofIfAnnouncemsghdrFreeBSD10Emu, bodyOff: sizeofIfAnnouncemsghdrFreeBSD10Emu} + } else { + rtm = &wireFormat{extOff: sizeofRtMsghdrFreeBSD10 - sizeofRtMetricsFreeBSD10, bodyOff: sizeofRtMsghdrFreeBSD10} + ifm = &wireFormat{extOff: 16} + ifam = &wireFormat{extOff: sizeofIfaMsghdrFreeBSD10, bodyOff: sizeofIfaMsghdrFreeBSD10} + ifmam = &wireFormat{extOff: sizeofIfmaMsghdrFreeBSD10, bodyOff: sizeofIfmaMsghdrFreeBSD10} + ifanm = &wireFormat{extOff: sizeofIfAnnouncemsghdrFreeBSD10, bodyOff: sizeofIfAnnouncemsghdrFreeBSD10} + } + rel, _ := syscall.SysctlUint32("kern.osreldate") + switch { + case rel < 800000: + if align != wordSize { // 386 emulation on amd64 + ifm.bodyOff = sizeofIfMsghdrFreeBSD7Emu + } else { + ifm.bodyOff = sizeofIfMsghdrFreeBSD7 + } + case 800000 <= rel && rel < 900000: + if align != wordSize { // 386 emulation on amd64 + ifm.bodyOff = sizeofIfMsghdrFreeBSD8Emu + } else { + ifm.bodyOff = sizeofIfMsghdrFreeBSD8 + } + case 900000 <= rel && rel < 1000000: + if align != wordSize { // 386 emulation on amd64 + ifm.bodyOff = sizeofIfMsghdrFreeBSD9Emu + } else { + ifm.bodyOff = sizeofIfMsghdrFreeBSD9 + } + case 1000000 <= rel && rel < 1100000: + if align != wordSize { // 386 emulation on amd64 + ifm.bodyOff = sizeofIfMsghdrFreeBSD10Emu + } else { + ifm.bodyOff = sizeofIfMsghdrFreeBSD10 + } + default: + if align != wordSize { // 386 emulation on amd64 + ifm.bodyOff = sizeofIfMsghdrFreeBSD11Emu + } else { + ifm.bodyOff = sizeofIfMsghdrFreeBSD11 + } + } + rtm.parse = rtm.parseRouteMessage + ifm.parse = ifm.parseInterfaceMessage + ifam.parse = ifam.parseInterfaceAddrMessage + ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage + ifanm.parse = ifanm.parseInterfaceAnnounceMessage + return align, map[int]*wireFormat{ + sysRTM_ADD: rtm, + sysRTM_DELETE: rtm, + sysRTM_CHANGE: rtm, + sysRTM_GET: rtm, + sysRTM_LOSING: rtm, + sysRTM_REDIRECT: rtm, + sysRTM_MISS: rtm, + sysRTM_LOCK: rtm, + sysRTM_RESOLVE: rtm, + sysRTM_NEWADDR: ifam, + sysRTM_DELADDR: ifam, + sysRTM_IFINFO: ifm, + sysRTM_NEWMADDR: ifmam, + sysRTM_DELMADDR: ifmam, + sysRTM_IFANNOUNCE: ifanm, + } +} diff --git a/vendor/golang.org/x/net/route/sys_netbsd.go b/vendor/golang.org/x/net/route/sys_netbsd.go new file mode 100644 index 0000000..b4e3301 --- /dev/null +++ b/vendor/golang.org/x/net/route/sys_netbsd.go @@ -0,0 +1,71 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +func (typ RIBType) parseable() bool { return true } + +// A RouteMetrics represents route metrics. +type RouteMetrics struct { + PathMTU int // path maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (rmx *RouteMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *RouteMessage) Sys() []Sys { + return []Sys{ + &RouteMetrics{ + PathMTU: int(nativeEndian.Uint64(m.raw[m.extOff+8 : m.extOff+16])), + }, + } +} + +// A InterfaceMetrics represents interface metrics. +type InterfaceMetrics struct { + Type int // interface type + MTU int // maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (imx *InterfaceMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *InterfaceMessage) Sys() []Sys { + return []Sys{ + &InterfaceMetrics{ + Type: int(m.raw[m.extOff]), + MTU: int(nativeEndian.Uint32(m.raw[m.extOff+8 : m.extOff+12])), + }, + } +} + +func probeRoutingStack() (int, map[int]*wireFormat) { + rtm := &wireFormat{extOff: 40, bodyOff: sizeofRtMsghdrNetBSD7} + rtm.parse = rtm.parseRouteMessage + ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrNetBSD7} + ifm.parse = ifm.parseInterfaceMessage + ifam := &wireFormat{extOff: sizeofIfaMsghdrNetBSD7, bodyOff: sizeofIfaMsghdrNetBSD7} + ifam.parse = ifam.parseInterfaceAddrMessage + ifanm := &wireFormat{extOff: sizeofIfAnnouncemsghdrNetBSD7, bodyOff: sizeofIfAnnouncemsghdrNetBSD7} + ifanm.parse = ifanm.parseInterfaceAnnounceMessage + // NetBSD 6 and above kernels require 64-bit aligned access to + // routing facilities. + return 8, map[int]*wireFormat{ + sysRTM_ADD: rtm, + sysRTM_DELETE: rtm, + sysRTM_CHANGE: rtm, + sysRTM_GET: rtm, + sysRTM_LOSING: rtm, + sysRTM_REDIRECT: rtm, + sysRTM_MISS: rtm, + sysRTM_LOCK: rtm, + sysRTM_RESOLVE: rtm, + sysRTM_NEWADDR: ifam, + sysRTM_DELADDR: ifam, + sysRTM_IFANNOUNCE: ifanm, + sysRTM_IFINFO: ifm, + } +} diff --git a/vendor/golang.org/x/net/route/sys_openbsd.go b/vendor/golang.org/x/net/route/sys_openbsd.go new file mode 100644 index 0000000..8798dc4 --- /dev/null +++ b/vendor/golang.org/x/net/route/sys_openbsd.go @@ -0,0 +1,79 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package route + +import "unsafe" + +func (typ RIBType) parseable() bool { + switch typ { + case sysNET_RT_STATS, sysNET_RT_TABLE: + return false + default: + return true + } +} + +// A RouteMetrics represents route metrics. +type RouteMetrics struct { + PathMTU int // path maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (rmx *RouteMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *RouteMessage) Sys() []Sys { + return []Sys{ + &RouteMetrics{ + PathMTU: int(nativeEndian.Uint32(m.raw[60:64])), + }, + } +} + +// A InterfaceMetrics represents interface metrics. +type InterfaceMetrics struct { + Type int // interface type + MTU int // maximum transmission unit +} + +// SysType implements the SysType method of Sys interface. +func (imx *InterfaceMetrics) SysType() SysType { return SysMetrics } + +// Sys implements the Sys method of Message interface. +func (m *InterfaceMessage) Sys() []Sys { + return []Sys{ + &InterfaceMetrics{ + Type: int(m.raw[24]), + MTU: int(nativeEndian.Uint32(m.raw[28:32])), + }, + } +} + +func probeRoutingStack() (int, map[int]*wireFormat) { + var p uintptr + rtm := &wireFormat{extOff: -1, bodyOff: -1} + rtm.parse = rtm.parseRouteMessage + ifm := &wireFormat{extOff: -1, bodyOff: -1} + ifm.parse = ifm.parseInterfaceMessage + ifam := &wireFormat{extOff: -1, bodyOff: -1} + ifam.parse = ifam.parseInterfaceAddrMessage + ifanm := &wireFormat{extOff: -1, bodyOff: -1} + ifanm.parse = ifanm.parseInterfaceAnnounceMessage + return int(unsafe.Sizeof(p)), map[int]*wireFormat{ + sysRTM_ADD: rtm, + sysRTM_DELETE: rtm, + sysRTM_CHANGE: rtm, + sysRTM_GET: rtm, + sysRTM_LOSING: rtm, + sysRTM_REDIRECT: rtm, + sysRTM_MISS: rtm, + sysRTM_LOCK: rtm, + sysRTM_RESOLVE: rtm, + sysRTM_NEWADDR: ifam, + sysRTM_DELADDR: ifam, + sysRTM_IFINFO: ifm, + sysRTM_IFANNOUNCE: ifanm, + } +} diff --git a/vendor/golang.org/x/net/route/syscall.go b/vendor/golang.org/x/net/route/syscall.go new file mode 100644 index 0000000..c211188 --- /dev/null +++ b/vendor/golang.org/x/net/route/syscall.go @@ -0,0 +1,28 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package route + +import ( + "syscall" + "unsafe" +) + +var zero uintptr + +func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error { + var p unsafe.Pointer + if len(mib) > 0 { + p = unsafe.Pointer(&mib[0]) + } else { + p = unsafe.Pointer(&zero) + } + _, _, errno := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(p), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if errno != 0 { + return error(errno) + } + return nil +} diff --git a/vendor/golang.org/x/net/route/zsys_darwin.go b/vendor/golang.org/x/net/route/zsys_darwin.go new file mode 100644 index 0000000..4e2e1ab --- /dev/null +++ b/vendor/golang.org/x/net/route/zsys_darwin.go @@ -0,0 +1,99 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package route + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_ROUTE = 0x11 + sysAF_LINK = 0x12 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 + + sysNET_RT_DUMP = 0x1 + sysNET_RT_FLAGS = 0x2 + sysNET_RT_IFLIST = 0x3 + sysNET_RT_STAT = 0x4 + sysNET_RT_TRASH = 0x5 + sysNET_RT_IFLIST2 = 0x6 + sysNET_RT_DUMP2 = 0x7 + sysNET_RT_MAXID = 0xa +) + +const ( + sysCTL_MAXNAME = 0xc + + sysCTL_UNSPEC = 0x0 + sysCTL_KERN = 0x1 + sysCTL_VM = 0x2 + sysCTL_VFS = 0x3 + sysCTL_NET = 0x4 + sysCTL_DEBUG = 0x5 + sysCTL_HW = 0x6 + sysCTL_MACHDEP = 0x7 + sysCTL_USER = 0x8 + sysCTL_MAXID = 0x9 +) + +const ( + sysRTM_VERSION = 0x5 + + sysRTM_ADD = 0x1 + sysRTM_DELETE = 0x2 + sysRTM_CHANGE = 0x3 + sysRTM_GET = 0x4 + sysRTM_LOSING = 0x5 + sysRTM_REDIRECT = 0x6 + sysRTM_MISS = 0x7 + sysRTM_LOCK = 0x8 + sysRTM_OLDADD = 0x9 + sysRTM_OLDDEL = 0xa + sysRTM_RESOLVE = 0xb + sysRTM_NEWADDR = 0xc + sysRTM_DELADDR = 0xd + sysRTM_IFINFO = 0xe + sysRTM_NEWMADDR = 0xf + sysRTM_DELMADDR = 0x10 + sysRTM_IFINFO2 = 0x12 + sysRTM_NEWMADDR2 = 0x13 + sysRTM_GET2 = 0x14 + + sysRTA_DST = 0x1 + sysRTA_GATEWAY = 0x2 + sysRTA_NETMASK = 0x4 + sysRTA_GENMASK = 0x8 + sysRTA_IFP = 0x10 + sysRTA_IFA = 0x20 + sysRTA_AUTHOR = 0x40 + sysRTA_BRD = 0x80 + + sysRTAX_DST = 0x0 + sysRTAX_GATEWAY = 0x1 + sysRTAX_NETMASK = 0x2 + sysRTAX_GENMASK = 0x3 + sysRTAX_IFP = 0x4 + sysRTAX_IFA = 0x5 + sysRTAX_AUTHOR = 0x6 + sysRTAX_BRD = 0x7 + sysRTAX_MAX = 0x8 +) + +const ( + sizeofIfMsghdrDarwin15 = 0x70 + sizeofIfaMsghdrDarwin15 = 0x14 + sizeofIfmaMsghdrDarwin15 = 0x10 + sizeofIfMsghdr2Darwin15 = 0xa0 + sizeofIfmaMsghdr2Darwin15 = 0x14 + sizeofIfDataDarwin15 = 0x60 + sizeofIfData64Darwin15 = 0x80 + + sizeofRtMsghdrDarwin15 = 0x5c + sizeofRtMsghdr2Darwin15 = 0x5c + sizeofRtMetricsDarwin15 = 0x38 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/route/zsys_dragonfly.go b/vendor/golang.org/x/net/route/zsys_dragonfly.go new file mode 100644 index 0000000..719c88d --- /dev/null +++ b/vendor/golang.org/x/net/route/zsys_dragonfly.go @@ -0,0 +1,98 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_dragonfly.go + +package route + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_ROUTE = 0x11 + sysAF_LINK = 0x12 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 + + sysNET_RT_DUMP = 0x1 + sysNET_RT_FLAGS = 0x2 + sysNET_RT_IFLIST = 0x3 + sysNET_RT_MAXID = 0x4 +) + +const ( + sysCTL_MAXNAME = 0xc + + sysCTL_UNSPEC = 0x0 + sysCTL_KERN = 0x1 + sysCTL_VM = 0x2 + sysCTL_VFS = 0x3 + sysCTL_NET = 0x4 + sysCTL_DEBUG = 0x5 + sysCTL_HW = 0x6 + sysCTL_MACHDEP = 0x7 + sysCTL_USER = 0x8 + sysCTL_P1003_1B = 0x9 + sysCTL_LWKT = 0xa + sysCTL_MAXID = 0xb +) + +const ( + sysRTM_VERSION = 0x6 + + sysRTM_ADD = 0x1 + sysRTM_DELETE = 0x2 + sysRTM_CHANGE = 0x3 + sysRTM_GET = 0x4 + sysRTM_LOSING = 0x5 + sysRTM_REDIRECT = 0x6 + sysRTM_MISS = 0x7 + sysRTM_LOCK = 0x8 + sysRTM_OLDADD = 0x9 + sysRTM_OLDDEL = 0xa + sysRTM_RESOLVE = 0xb + sysRTM_NEWADDR = 0xc + sysRTM_DELADDR = 0xd + sysRTM_IFINFO = 0xe + sysRTM_NEWMADDR = 0xf + sysRTM_DELMADDR = 0x10 + sysRTM_IFANNOUNCE = 0x11 + sysRTM_IEEE80211 = 0x12 + + sysRTA_DST = 0x1 + sysRTA_GATEWAY = 0x2 + sysRTA_NETMASK = 0x4 + sysRTA_GENMASK = 0x8 + sysRTA_IFP = 0x10 + sysRTA_IFA = 0x20 + sysRTA_AUTHOR = 0x40 + sysRTA_BRD = 0x80 + sysRTA_MPLS1 = 0x100 + sysRTA_MPLS2 = 0x200 + sysRTA_MPLS3 = 0x400 + + sysRTAX_DST = 0x0 + sysRTAX_GATEWAY = 0x1 + sysRTAX_NETMASK = 0x2 + sysRTAX_GENMASK = 0x3 + sysRTAX_IFP = 0x4 + sysRTAX_IFA = 0x5 + sysRTAX_AUTHOR = 0x6 + sysRTAX_BRD = 0x7 + sysRTAX_MPLS1 = 0x8 + sysRTAX_MPLS2 = 0x9 + sysRTAX_MPLS3 = 0xa + sysRTAX_MAX = 0xb +) + +const ( + sizeofIfMsghdrDragonFlyBSD4 = 0xb0 + sizeofIfaMsghdrDragonFlyBSD4 = 0x14 + sizeofIfmaMsghdrDragonFlyBSD4 = 0x10 + sizeofIfAnnouncemsghdrDragonFlyBSD4 = 0x18 + + sizeofRtMsghdrDragonFlyBSD4 = 0x98 + sizeofRtMetricsDragonFlyBSD4 = 0x70 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_386.go b/vendor/golang.org/x/net/route/zsys_freebsd_386.go new file mode 100644 index 0000000..b03bc01 --- /dev/null +++ b/vendor/golang.org/x/net/route/zsys_freebsd_386.go @@ -0,0 +1,126 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package route + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_ROUTE = 0x11 + sysAF_LINK = 0x12 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 + + sysNET_RT_DUMP = 0x1 + sysNET_RT_FLAGS = 0x2 + sysNET_RT_IFLIST = 0x3 + sysNET_RT_IFMALIST = 0x4 + sysNET_RT_IFLISTL = 0x5 +) + +const ( + sysCTL_MAXNAME = 0x18 + + sysCTL_UNSPEC = 0x0 + sysCTL_KERN = 0x1 + sysCTL_VM = 0x2 + sysCTL_VFS = 0x3 + sysCTL_NET = 0x4 + sysCTL_DEBUG = 0x5 + sysCTL_HW = 0x6 + sysCTL_MACHDEP = 0x7 + sysCTL_USER = 0x8 + sysCTL_P1003_1B = 0x9 +) + +const ( + sysRTM_VERSION = 0x5 + + sysRTM_ADD = 0x1 + sysRTM_DELETE = 0x2 + sysRTM_CHANGE = 0x3 + sysRTM_GET = 0x4 + sysRTM_LOSING = 0x5 + sysRTM_REDIRECT = 0x6 + sysRTM_MISS = 0x7 + sysRTM_LOCK = 0x8 + sysRTM_RESOLVE = 0xb + sysRTM_NEWADDR = 0xc + sysRTM_DELADDR = 0xd + sysRTM_IFINFO = 0xe + sysRTM_NEWMADDR = 0xf + sysRTM_DELMADDR = 0x10 + sysRTM_IFANNOUNCE = 0x11 + sysRTM_IEEE80211 = 0x12 + + sysRTA_DST = 0x1 + sysRTA_GATEWAY = 0x2 + sysRTA_NETMASK = 0x4 + sysRTA_GENMASK = 0x8 + sysRTA_IFP = 0x10 + sysRTA_IFA = 0x20 + sysRTA_AUTHOR = 0x40 + sysRTA_BRD = 0x80 + + sysRTAX_DST = 0x0 + sysRTAX_GATEWAY = 0x1 + sysRTAX_NETMASK = 0x2 + sysRTAX_GENMASK = 0x3 + sysRTAX_IFP = 0x4 + sysRTAX_IFA = 0x5 + sysRTAX_AUTHOR = 0x6 + sysRTAX_BRD = 0x7 + sysRTAX_MAX = 0x8 +) + +const ( + sizeofIfMsghdrlFreeBSD10 = 0x68 + sizeofIfaMsghdrFreeBSD10 = 0x14 + sizeofIfaMsghdrlFreeBSD10 = 0x6c + sizeofIfmaMsghdrFreeBSD10 = 0x10 + sizeofIfAnnouncemsghdrFreeBSD10 = 0x18 + + sizeofRtMsghdrFreeBSD10 = 0x5c + sizeofRtMetricsFreeBSD10 = 0x38 + + sizeofIfMsghdrFreeBSD7 = 0x60 + sizeofIfMsghdrFreeBSD8 = 0x60 + sizeofIfMsghdrFreeBSD9 = 0x60 + sizeofIfMsghdrFreeBSD10 = 0x64 + sizeofIfMsghdrFreeBSD11 = 0xa8 + + sizeofIfDataFreeBSD7 = 0x50 + sizeofIfDataFreeBSD8 = 0x50 + sizeofIfDataFreeBSD9 = 0x50 + sizeofIfDataFreeBSD10 = 0x54 + sizeofIfDataFreeBSD11 = 0x98 + + // MODIFIED BY HAND FOR 386 EMULATION ON AMD64 + // 386 EMULATION USES THE UNDERLYING RAW DATA LAYOUT + + sizeofIfMsghdrlFreeBSD10Emu = 0xb0 + sizeofIfaMsghdrFreeBSD10Emu = 0x14 + sizeofIfaMsghdrlFreeBSD10Emu = 0xb0 + sizeofIfmaMsghdrFreeBSD10Emu = 0x10 + sizeofIfAnnouncemsghdrFreeBSD10Emu = 0x18 + + sizeofRtMsghdrFreeBSD10Emu = 0x98 + sizeofRtMetricsFreeBSD10Emu = 0x70 + + sizeofIfMsghdrFreeBSD7Emu = 0xa8 + sizeofIfMsghdrFreeBSD8Emu = 0xa8 + sizeofIfMsghdrFreeBSD9Emu = 0xa8 + sizeofIfMsghdrFreeBSD10Emu = 0xa8 + sizeofIfMsghdrFreeBSD11Emu = 0xa8 + + sizeofIfDataFreeBSD7Emu = 0x98 + sizeofIfDataFreeBSD8Emu = 0x98 + sizeofIfDataFreeBSD9Emu = 0x98 + sizeofIfDataFreeBSD10Emu = 0x98 + sizeofIfDataFreeBSD11Emu = 0x98 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go new file mode 100644 index 0000000..0b675b3 --- /dev/null +++ b/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go @@ -0,0 +1,123 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package route + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_ROUTE = 0x11 + sysAF_LINK = 0x12 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 + + sysNET_RT_DUMP = 0x1 + sysNET_RT_FLAGS = 0x2 + sysNET_RT_IFLIST = 0x3 + sysNET_RT_IFMALIST = 0x4 + sysNET_RT_IFLISTL = 0x5 +) + +const ( + sysCTL_MAXNAME = 0x18 + + sysCTL_UNSPEC = 0x0 + sysCTL_KERN = 0x1 + sysCTL_VM = 0x2 + sysCTL_VFS = 0x3 + sysCTL_NET = 0x4 + sysCTL_DEBUG = 0x5 + sysCTL_HW = 0x6 + sysCTL_MACHDEP = 0x7 + sysCTL_USER = 0x8 + sysCTL_P1003_1B = 0x9 +) + +const ( + sysRTM_VERSION = 0x5 + + sysRTM_ADD = 0x1 + sysRTM_DELETE = 0x2 + sysRTM_CHANGE = 0x3 + sysRTM_GET = 0x4 + sysRTM_LOSING = 0x5 + sysRTM_REDIRECT = 0x6 + sysRTM_MISS = 0x7 + sysRTM_LOCK = 0x8 + sysRTM_RESOLVE = 0xb + sysRTM_NEWADDR = 0xc + sysRTM_DELADDR = 0xd + sysRTM_IFINFO = 0xe + sysRTM_NEWMADDR = 0xf + sysRTM_DELMADDR = 0x10 + sysRTM_IFANNOUNCE = 0x11 + sysRTM_IEEE80211 = 0x12 + + sysRTA_DST = 0x1 + sysRTA_GATEWAY = 0x2 + sysRTA_NETMASK = 0x4 + sysRTA_GENMASK = 0x8 + sysRTA_IFP = 0x10 + sysRTA_IFA = 0x20 + sysRTA_AUTHOR = 0x40 + sysRTA_BRD = 0x80 + + sysRTAX_DST = 0x0 + sysRTAX_GATEWAY = 0x1 + sysRTAX_NETMASK = 0x2 + sysRTAX_GENMASK = 0x3 + sysRTAX_IFP = 0x4 + sysRTAX_IFA = 0x5 + sysRTAX_AUTHOR = 0x6 + sysRTAX_BRD = 0x7 + sysRTAX_MAX = 0x8 +) + +const ( + sizeofIfMsghdrlFreeBSD10 = 0xb0 + sizeofIfaMsghdrFreeBSD10 = 0x14 + sizeofIfaMsghdrlFreeBSD10 = 0xb0 + sizeofIfmaMsghdrFreeBSD10 = 0x10 + sizeofIfAnnouncemsghdrFreeBSD10 = 0x18 + + sizeofRtMsghdrFreeBSD10 = 0x98 + sizeofRtMetricsFreeBSD10 = 0x70 + + sizeofIfMsghdrFreeBSD7 = 0xa8 + sizeofIfMsghdrFreeBSD8 = 0xa8 + sizeofIfMsghdrFreeBSD9 = 0xa8 + sizeofIfMsghdrFreeBSD10 = 0xa8 + sizeofIfMsghdrFreeBSD11 = 0xa8 + + sizeofIfDataFreeBSD7 = 0x98 + sizeofIfDataFreeBSD8 = 0x98 + sizeofIfDataFreeBSD9 = 0x98 + sizeofIfDataFreeBSD10 = 0x98 + sizeofIfDataFreeBSD11 = 0x98 + + sizeofIfMsghdrlFreeBSD10Emu = 0xb0 + sizeofIfaMsghdrFreeBSD10Emu = 0x14 + sizeofIfaMsghdrlFreeBSD10Emu = 0xb0 + sizeofIfmaMsghdrFreeBSD10Emu = 0x10 + sizeofIfAnnouncemsghdrFreeBSD10Emu = 0x18 + + sizeofRtMsghdrFreeBSD10Emu = 0x98 + sizeofRtMetricsFreeBSD10Emu = 0x70 + + sizeofIfMsghdrFreeBSD7Emu = 0xa8 + sizeofIfMsghdrFreeBSD8Emu = 0xa8 + sizeofIfMsghdrFreeBSD9Emu = 0xa8 + sizeofIfMsghdrFreeBSD10Emu = 0xa8 + sizeofIfMsghdrFreeBSD11Emu = 0xa8 + + sizeofIfDataFreeBSD7Emu = 0x98 + sizeofIfDataFreeBSD8Emu = 0x98 + sizeofIfDataFreeBSD9Emu = 0x98 + sizeofIfDataFreeBSD10Emu = 0x98 + sizeofIfDataFreeBSD11Emu = 0x98 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_arm.go b/vendor/golang.org/x/net/route/zsys_freebsd_arm.go new file mode 100644 index 0000000..58f8ea1 --- /dev/null +++ b/vendor/golang.org/x/net/route/zsys_freebsd_arm.go @@ -0,0 +1,123 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package route + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_ROUTE = 0x11 + sysAF_LINK = 0x12 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 + + sysNET_RT_DUMP = 0x1 + sysNET_RT_FLAGS = 0x2 + sysNET_RT_IFLIST = 0x3 + sysNET_RT_IFMALIST = 0x4 + sysNET_RT_IFLISTL = 0x5 +) + +const ( + sysCTL_MAXNAME = 0x18 + + sysCTL_UNSPEC = 0x0 + sysCTL_KERN = 0x1 + sysCTL_VM = 0x2 + sysCTL_VFS = 0x3 + sysCTL_NET = 0x4 + sysCTL_DEBUG = 0x5 + sysCTL_HW = 0x6 + sysCTL_MACHDEP = 0x7 + sysCTL_USER = 0x8 + sysCTL_P1003_1B = 0x9 +) + +const ( + sysRTM_VERSION = 0x5 + + sysRTM_ADD = 0x1 + sysRTM_DELETE = 0x2 + sysRTM_CHANGE = 0x3 + sysRTM_GET = 0x4 + sysRTM_LOSING = 0x5 + sysRTM_REDIRECT = 0x6 + sysRTM_MISS = 0x7 + sysRTM_LOCK = 0x8 + sysRTM_RESOLVE = 0xb + sysRTM_NEWADDR = 0xc + sysRTM_DELADDR = 0xd + sysRTM_IFINFO = 0xe + sysRTM_NEWMADDR = 0xf + sysRTM_DELMADDR = 0x10 + sysRTM_IFANNOUNCE = 0x11 + sysRTM_IEEE80211 = 0x12 + + sysRTA_DST = 0x1 + sysRTA_GATEWAY = 0x2 + sysRTA_NETMASK = 0x4 + sysRTA_GENMASK = 0x8 + sysRTA_IFP = 0x10 + sysRTA_IFA = 0x20 + sysRTA_AUTHOR = 0x40 + sysRTA_BRD = 0x80 + + sysRTAX_DST = 0x0 + sysRTAX_GATEWAY = 0x1 + sysRTAX_NETMASK = 0x2 + sysRTAX_GENMASK = 0x3 + sysRTAX_IFP = 0x4 + sysRTAX_IFA = 0x5 + sysRTAX_AUTHOR = 0x6 + sysRTAX_BRD = 0x7 + sysRTAX_MAX = 0x8 +) + +const ( + sizeofIfMsghdrlFreeBSD10 = 0x68 + sizeofIfaMsghdrFreeBSD10 = 0x14 + sizeofIfaMsghdrlFreeBSD10 = 0x6c + sizeofIfmaMsghdrFreeBSD10 = 0x10 + sizeofIfAnnouncemsghdrFreeBSD10 = 0x18 + + sizeofRtMsghdrFreeBSD10 = 0x5c + sizeofRtMetricsFreeBSD10 = 0x38 + + sizeofIfMsghdrFreeBSD7 = 0x70 + sizeofIfMsghdrFreeBSD8 = 0x70 + sizeofIfMsghdrFreeBSD9 = 0x70 + sizeofIfMsghdrFreeBSD10 = 0x70 + sizeofIfMsghdrFreeBSD11 = 0xa8 + + sizeofIfDataFreeBSD7 = 0x60 + sizeofIfDataFreeBSD8 = 0x60 + sizeofIfDataFreeBSD9 = 0x60 + sizeofIfDataFreeBSD10 = 0x60 + sizeofIfDataFreeBSD11 = 0x98 + + sizeofIfMsghdrlFreeBSD10Emu = 0x68 + sizeofIfaMsghdrFreeBSD10Emu = 0x14 + sizeofIfaMsghdrlFreeBSD10Emu = 0x6c + sizeofIfmaMsghdrFreeBSD10Emu = 0x10 + sizeofIfAnnouncemsghdrFreeBSD10Emu = 0x18 + + sizeofRtMsghdrFreeBSD10Emu = 0x5c + sizeofRtMetricsFreeBSD10Emu = 0x38 + + sizeofIfMsghdrFreeBSD7Emu = 0x70 + sizeofIfMsghdrFreeBSD8Emu = 0x70 + sizeofIfMsghdrFreeBSD9Emu = 0x70 + sizeofIfMsghdrFreeBSD10Emu = 0x70 + sizeofIfMsghdrFreeBSD11Emu = 0xa8 + + sizeofIfDataFreeBSD7Emu = 0x60 + sizeofIfDataFreeBSD8Emu = 0x60 + sizeofIfDataFreeBSD9Emu = 0x60 + sizeofIfDataFreeBSD10Emu = 0x60 + sizeofIfDataFreeBSD11Emu = 0x98 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/route/zsys_netbsd.go b/vendor/golang.org/x/net/route/zsys_netbsd.go new file mode 100644 index 0000000..e0df45e --- /dev/null +++ b/vendor/golang.org/x/net/route/zsys_netbsd.go @@ -0,0 +1,97 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package route + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_ROUTE = 0x22 + sysAF_LINK = 0x12 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 + + sysNET_RT_DUMP = 0x1 + sysNET_RT_FLAGS = 0x2 + sysNET_RT_IFLIST = 0x5 + sysNET_RT_MAXID = 0x6 +) + +const ( + sysCTL_MAXNAME = 0xc + + sysCTL_UNSPEC = 0x0 + sysCTL_KERN = 0x1 + sysCTL_VM = 0x2 + sysCTL_VFS = 0x3 + sysCTL_NET = 0x4 + sysCTL_DEBUG = 0x5 + sysCTL_HW = 0x6 + sysCTL_MACHDEP = 0x7 + sysCTL_USER = 0x8 + sysCTL_DDB = 0x9 + sysCTL_PROC = 0xa + sysCTL_VENDOR = 0xb + sysCTL_EMUL = 0xc + sysCTL_SECURITY = 0xd + sysCTL_MAXID = 0xe +) + +const ( + sysRTM_VERSION = 0x4 + + sysRTM_ADD = 0x1 + sysRTM_DELETE = 0x2 + sysRTM_CHANGE = 0x3 + sysRTM_GET = 0x4 + sysRTM_LOSING = 0x5 + sysRTM_REDIRECT = 0x6 + sysRTM_MISS = 0x7 + sysRTM_LOCK = 0x8 + sysRTM_OLDADD = 0x9 + sysRTM_OLDDEL = 0xa + sysRTM_RESOLVE = 0xb + sysRTM_NEWADDR = 0xc + sysRTM_DELADDR = 0xd + sysRTM_IFANNOUNCE = 0x10 + sysRTM_IEEE80211 = 0x11 + sysRTM_SETGATE = 0x12 + sysRTM_LLINFO_UPD = 0x13 + sysRTM_IFINFO = 0x14 + sysRTM_CHGADDR = 0x15 + + sysRTA_DST = 0x1 + sysRTA_GATEWAY = 0x2 + sysRTA_NETMASK = 0x4 + sysRTA_GENMASK = 0x8 + sysRTA_IFP = 0x10 + sysRTA_IFA = 0x20 + sysRTA_AUTHOR = 0x40 + sysRTA_BRD = 0x80 + sysRTA_TAG = 0x100 + + sysRTAX_DST = 0x0 + sysRTAX_GATEWAY = 0x1 + sysRTAX_NETMASK = 0x2 + sysRTAX_GENMASK = 0x3 + sysRTAX_IFP = 0x4 + sysRTAX_IFA = 0x5 + sysRTAX_AUTHOR = 0x6 + sysRTAX_BRD = 0x7 + sysRTAX_TAG = 0x8 + sysRTAX_MAX = 0x9 +) + +const ( + sizeofIfMsghdrNetBSD7 = 0x98 + sizeofIfaMsghdrNetBSD7 = 0x18 + sizeofIfAnnouncemsghdrNetBSD7 = 0x18 + + sizeofRtMsghdrNetBSD7 = 0x78 + sizeofRtMetricsNetBSD7 = 0x50 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/route/zsys_openbsd.go b/vendor/golang.org/x/net/route/zsys_openbsd.go new file mode 100644 index 0000000..f5a1ff9 --- /dev/null +++ b/vendor/golang.org/x/net/route/zsys_openbsd.go @@ -0,0 +1,90 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package route + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_ROUTE = 0x11 + sysAF_LINK = 0x12 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 + + sysNET_RT_DUMP = 0x1 + sysNET_RT_FLAGS = 0x2 + sysNET_RT_IFLIST = 0x3 + sysNET_RT_STATS = 0x4 + sysNET_RT_TABLE = 0x5 + sysNET_RT_IFNAMES = 0x6 + sysNET_RT_MAXID = 0x7 +) + +const ( + sysCTL_MAXNAME = 0xc + + sysCTL_UNSPEC = 0x0 + sysCTL_KERN = 0x1 + sysCTL_VM = 0x2 + sysCTL_FS = 0x3 + sysCTL_NET = 0x4 + sysCTL_DEBUG = 0x5 + sysCTL_HW = 0x6 + sysCTL_MACHDEP = 0x7 + sysCTL_DDB = 0x9 + sysCTL_VFS = 0xa + sysCTL_MAXID = 0xb +) + +const ( + sysRTM_VERSION = 0x5 + + sysRTM_ADD = 0x1 + sysRTM_DELETE = 0x2 + sysRTM_CHANGE = 0x3 + sysRTM_GET = 0x4 + sysRTM_LOSING = 0x5 + sysRTM_REDIRECT = 0x6 + sysRTM_MISS = 0x7 + sysRTM_LOCK = 0x8 + sysRTM_RESOLVE = 0xb + sysRTM_NEWADDR = 0xc + sysRTM_DELADDR = 0xd + sysRTM_IFINFO = 0xe + sysRTM_IFANNOUNCE = 0xf + sysRTM_DESYNC = 0x10 + + sysRTA_DST = 0x1 + sysRTA_GATEWAY = 0x2 + sysRTA_NETMASK = 0x4 + sysRTA_GENMASK = 0x8 + sysRTA_IFP = 0x10 + sysRTA_IFA = 0x20 + sysRTA_AUTHOR = 0x40 + sysRTA_BRD = 0x80 + sysRTA_SRC = 0x100 + sysRTA_SRCMASK = 0x200 + sysRTA_LABEL = 0x400 + + sysRTAX_DST = 0x0 + sysRTAX_GATEWAY = 0x1 + sysRTAX_NETMASK = 0x2 + sysRTAX_GENMASK = 0x3 + sysRTAX_IFP = 0x4 + sysRTAX_IFA = 0x5 + sysRTAX_AUTHOR = 0x6 + sysRTAX_BRD = 0x7 + sysRTAX_SRC = 0x8 + sysRTAX_SRCMASK = 0x9 + sysRTAX_LABEL = 0xa + sysRTAX_MAX = 0xb +) + +const ( + sizeofRtMsghdr = 0x60 + + sizeofSockaddrStorage = 0x100 + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/trace/events.go b/vendor/golang.org/x/net/trace/events.go new file mode 100644 index 0000000..d8daec1 --- /dev/null +++ b/vendor/golang.org/x/net/trace/events.go @@ -0,0 +1,532 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "bytes" + "fmt" + "html/template" + "io" + "log" + "net/http" + "runtime" + "sort" + "strconv" + "strings" + "sync" + "sync/atomic" + "text/tabwriter" + "time" +) + +const maxEventsPerLog = 100 + +type bucket struct { + MaxErrAge time.Duration + String string +} + +var buckets = []bucket{ + {0, "total"}, + {10 * time.Second, "errs<10s"}, + {1 * time.Minute, "errs<1m"}, + {10 * time.Minute, "errs<10m"}, + {1 * time.Hour, "errs<1h"}, + {10 * time.Hour, "errs<10h"}, + {24000 * time.Hour, "errors"}, +} + +// RenderEvents renders the HTML page typically served at /debug/events. +// It does not do any auth checking; see AuthRequest for the default auth check +// used by the handler registered on http.DefaultServeMux. +// req may be nil. +func RenderEvents(w http.ResponseWriter, req *http.Request, sensitive bool) { + now := time.Now() + data := &struct { + Families []string // family names + Buckets []bucket + Counts [][]int // eventLog count per family/bucket + + // Set when a bucket has been selected. + Family string + Bucket int + EventLogs eventLogs + Expanded bool + }{ + Buckets: buckets, + } + + data.Families = make([]string, 0, len(families)) + famMu.RLock() + for name := range families { + data.Families = append(data.Families, name) + } + famMu.RUnlock() + sort.Strings(data.Families) + + // Count the number of eventLogs in each family for each error age. + data.Counts = make([][]int, len(data.Families)) + for i, name := range data.Families { + // TODO(sameer): move this loop under the family lock. + f := getEventFamily(name) + data.Counts[i] = make([]int, len(data.Buckets)) + for j, b := range data.Buckets { + data.Counts[i][j] = f.Count(now, b.MaxErrAge) + } + } + + if req != nil { + var ok bool + data.Family, data.Bucket, ok = parseEventsArgs(req) + if !ok { + // No-op + } else { + data.EventLogs = getEventFamily(data.Family).Copy(now, buckets[data.Bucket].MaxErrAge) + } + if data.EventLogs != nil { + defer data.EventLogs.Free() + sort.Sort(data.EventLogs) + } + if exp, err := strconv.ParseBool(req.FormValue("exp")); err == nil { + data.Expanded = exp + } + } + + famMu.RLock() + defer famMu.RUnlock() + if err := eventsTmpl().Execute(w, data); err != nil { + log.Printf("net/trace: Failed executing template: %v", err) + } +} + +func parseEventsArgs(req *http.Request) (fam string, b int, ok bool) { + fam, bStr := req.FormValue("fam"), req.FormValue("b") + if fam == "" || bStr == "" { + return "", 0, false + } + b, err := strconv.Atoi(bStr) + if err != nil || b < 0 || b >= len(buckets) { + return "", 0, false + } + return fam, b, true +} + +// An EventLog provides a log of events associated with a specific object. +type EventLog interface { + // Printf formats its arguments with fmt.Sprintf and adds the + // result to the event log. + Printf(format string, a ...interface{}) + + // Errorf is like Printf, but it marks this event as an error. + Errorf(format string, a ...interface{}) + + // Finish declares that this event log is complete. + // The event log should not be used after calling this method. + Finish() +} + +// NewEventLog returns a new EventLog with the specified family name +// and title. +func NewEventLog(family, title string) EventLog { + el := newEventLog() + el.ref() + el.Family, el.Title = family, title + el.Start = time.Now() + el.events = make([]logEntry, 0, maxEventsPerLog) + el.stack = make([]uintptr, 32) + n := runtime.Callers(2, el.stack) + el.stack = el.stack[:n] + + getEventFamily(family).add(el) + return el +} + +func (el *eventLog) Finish() { + getEventFamily(el.Family).remove(el) + el.unref() // matches ref in New +} + +var ( + famMu sync.RWMutex + families = make(map[string]*eventFamily) // family name => family +) + +func getEventFamily(fam string) *eventFamily { + famMu.Lock() + defer famMu.Unlock() + f := families[fam] + if f == nil { + f = &eventFamily{} + families[fam] = f + } + return f +} + +type eventFamily struct { + mu sync.RWMutex + eventLogs eventLogs +} + +func (f *eventFamily) add(el *eventLog) { + f.mu.Lock() + f.eventLogs = append(f.eventLogs, el) + f.mu.Unlock() +} + +func (f *eventFamily) remove(el *eventLog) { + f.mu.Lock() + defer f.mu.Unlock() + for i, el0 := range f.eventLogs { + if el == el0 { + copy(f.eventLogs[i:], f.eventLogs[i+1:]) + f.eventLogs = f.eventLogs[:len(f.eventLogs)-1] + return + } + } +} + +func (f *eventFamily) Count(now time.Time, maxErrAge time.Duration) (n int) { + f.mu.RLock() + defer f.mu.RUnlock() + for _, el := range f.eventLogs { + if el.hasRecentError(now, maxErrAge) { + n++ + } + } + return +} + +func (f *eventFamily) Copy(now time.Time, maxErrAge time.Duration) (els eventLogs) { + f.mu.RLock() + defer f.mu.RUnlock() + els = make(eventLogs, 0, len(f.eventLogs)) + for _, el := range f.eventLogs { + if el.hasRecentError(now, maxErrAge) { + el.ref() + els = append(els, el) + } + } + return +} + +type eventLogs []*eventLog + +// Free calls unref on each element of the list. +func (els eventLogs) Free() { + for _, el := range els { + el.unref() + } +} + +// eventLogs may be sorted in reverse chronological order. +func (els eventLogs) Len() int { return len(els) } +func (els eventLogs) Less(i, j int) bool { return els[i].Start.After(els[j].Start) } +func (els eventLogs) Swap(i, j int) { els[i], els[j] = els[j], els[i] } + +// A logEntry is a timestamped log entry in an event log. +type logEntry struct { + When time.Time + Elapsed time.Duration // since previous event in log + NewDay bool // whether this event is on a different day to the previous event + What string + IsErr bool +} + +// WhenString returns a string representation of the elapsed time of the event. +// It will include the date if midnight was crossed. +func (e logEntry) WhenString() string { + if e.NewDay { + return e.When.Format("2006/01/02 15:04:05.000000") + } + return e.When.Format("15:04:05.000000") +} + +// An eventLog represents an active event log. +type eventLog struct { + // Family is the top-level grouping of event logs to which this belongs. + Family string + + // Title is the title of this event log. + Title string + + // Timing information. + Start time.Time + + // Call stack where this event log was created. + stack []uintptr + + // Append-only sequence of events. + // + // TODO(sameer): change this to a ring buffer to avoid the array copy + // when we hit maxEventsPerLog. + mu sync.RWMutex + events []logEntry + LastErrorTime time.Time + discarded int + + refs int32 // how many buckets this is in +} + +func (el *eventLog) reset() { + // Clear all but the mutex. Mutexes may not be copied, even when unlocked. + el.Family = "" + el.Title = "" + el.Start = time.Time{} + el.stack = nil + el.events = nil + el.LastErrorTime = time.Time{} + el.discarded = 0 + el.refs = 0 +} + +func (el *eventLog) hasRecentError(now time.Time, maxErrAge time.Duration) bool { + if maxErrAge == 0 { + return true + } + el.mu.RLock() + defer el.mu.RUnlock() + return now.Sub(el.LastErrorTime) < maxErrAge +} + +// delta returns the elapsed time since the last event or the log start, +// and whether it spans midnight. +// L >= el.mu +func (el *eventLog) delta(t time.Time) (time.Duration, bool) { + if len(el.events) == 0 { + return t.Sub(el.Start), false + } + prev := el.events[len(el.events)-1].When + return t.Sub(prev), prev.Day() != t.Day() + +} + +func (el *eventLog) Printf(format string, a ...interface{}) { + el.printf(false, format, a...) +} + +func (el *eventLog) Errorf(format string, a ...interface{}) { + el.printf(true, format, a...) +} + +func (el *eventLog) printf(isErr bool, format string, a ...interface{}) { + e := logEntry{When: time.Now(), IsErr: isErr, What: fmt.Sprintf(format, a...)} + el.mu.Lock() + e.Elapsed, e.NewDay = el.delta(e.When) + if len(el.events) < maxEventsPerLog { + el.events = append(el.events, e) + } else { + // Discard the oldest event. + if el.discarded == 0 { + // el.discarded starts at two to count for the event it + // is replacing, plus the next one that we are about to + // drop. + el.discarded = 2 + } else { + el.discarded++ + } + // TODO(sameer): if this causes allocations on a critical path, + // change eventLog.What to be a fmt.Stringer, as in trace.go. + el.events[0].What = fmt.Sprintf("(%d events discarded)", el.discarded) + // The timestamp of the discarded meta-event should be + // the time of the last event it is representing. + el.events[0].When = el.events[1].When + copy(el.events[1:], el.events[2:]) + el.events[maxEventsPerLog-1] = e + } + if e.IsErr { + el.LastErrorTime = e.When + } + el.mu.Unlock() +} + +func (el *eventLog) ref() { + atomic.AddInt32(&el.refs, 1) +} + +func (el *eventLog) unref() { + if atomic.AddInt32(&el.refs, -1) == 0 { + freeEventLog(el) + } +} + +func (el *eventLog) When() string { + return el.Start.Format("2006/01/02 15:04:05.000000") +} + +func (el *eventLog) ElapsedTime() string { + elapsed := time.Since(el.Start) + return fmt.Sprintf("%.6f", elapsed.Seconds()) +} + +func (el *eventLog) Stack() string { + buf := new(bytes.Buffer) + tw := tabwriter.NewWriter(buf, 1, 8, 1, '\t', 0) + printStackRecord(tw, el.stack) + tw.Flush() + return buf.String() +} + +// printStackRecord prints the function + source line information +// for a single stack trace. +// Adapted from runtime/pprof/pprof.go. +func printStackRecord(w io.Writer, stk []uintptr) { + for _, pc := range stk { + f := runtime.FuncForPC(pc) + if f == nil { + continue + } + file, line := f.FileLine(pc) + name := f.Name() + // Hide runtime.goexit and any runtime functions at the beginning. + if strings.HasPrefix(name, "runtime.") { + continue + } + fmt.Fprintf(w, "# %s\t%s:%d\n", name, file, line) + } +} + +func (el *eventLog) Events() []logEntry { + el.mu.RLock() + defer el.mu.RUnlock() + return el.events +} + +// freeEventLogs is a freelist of *eventLog +var freeEventLogs = make(chan *eventLog, 1000) + +// newEventLog returns a event log ready to use. +func newEventLog() *eventLog { + select { + case el := <-freeEventLogs: + return el + default: + return new(eventLog) + } +} + +// freeEventLog adds el to freeEventLogs if there's room. +// This is non-blocking. +func freeEventLog(el *eventLog) { + el.reset() + select { + case freeEventLogs <- el: + default: + } +} + +var eventsTmplCache *template.Template +var eventsTmplOnce sync.Once + +func eventsTmpl() *template.Template { + eventsTmplOnce.Do(func() { + eventsTmplCache = template.Must(template.New("events").Funcs(template.FuncMap{ + "elapsed": elapsed, + "trimSpace": strings.TrimSpace, + }).Parse(eventsHTML)) + }) + return eventsTmplCache +} + +const eventsHTML = ` + + + events + + + + +

    /debug/events

    + +
  • + {{range $i, $fam := .Families}} + + + + {{range $j, $bucket := $.Buckets}} + {{$n := index $.Counts $i $j}} + + {{end}} + + {{end}} +
    {{$fam}} + {{if $n}}{{end}} + [{{$n}} {{$bucket.String}}] + {{if $n}}{{end}} +
    + +{{if $.EventLogs}} +


    +

    Family: {{$.Family}}

    + +{{if $.Expanded}}{{end}} +[Summary]{{if $.Expanded}}{{end}} + +{{if not $.Expanded}}{{end}} +[Expanded]{{if not $.Expanded}}{{end}} + + + + {{range $el := $.EventLogs}} + + + + + {{if $.Expanded}} + + + + + + {{range $el.Events}} + + + + + + {{end}} + {{end}} + {{end}} +
    WhenElapsed
    {{$el.When}}{{$el.ElapsedTime}}{{$el.Title}} +
    {{$el.Stack|trimSpace}}
    {{.WhenString}}{{elapsed .Elapsed}}.{{if .IsErr}}E{{else}}.{{end}}. {{.What}}
    +{{end}} + + +` diff --git a/vendor/golang.org/x/net/trace/histogram.go b/vendor/golang.org/x/net/trace/histogram.go new file mode 100644 index 0000000..9bf4286 --- /dev/null +++ b/vendor/golang.org/x/net/trace/histogram.go @@ -0,0 +1,365 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +// This file implements histogramming for RPC statistics collection. + +import ( + "bytes" + "fmt" + "html/template" + "log" + "math" + "sync" + + "golang.org/x/net/internal/timeseries" +) + +const ( + bucketCount = 38 +) + +// histogram keeps counts of values in buckets that are spaced +// out in powers of 2: 0-1, 2-3, 4-7... +// histogram implements timeseries.Observable +type histogram struct { + sum int64 // running total of measurements + sumOfSquares float64 // square of running total + buckets []int64 // bucketed values for histogram + value int // holds a single value as an optimization + valueCount int64 // number of values recorded for single value +} + +// AddMeasurement records a value measurement observation to the histogram. +func (h *histogram) addMeasurement(value int64) { + // TODO: assert invariant + h.sum += value + h.sumOfSquares += float64(value) * float64(value) + + bucketIndex := getBucket(value) + + if h.valueCount == 0 || (h.valueCount > 0 && h.value == bucketIndex) { + h.value = bucketIndex + h.valueCount++ + } else { + h.allocateBuckets() + h.buckets[bucketIndex]++ + } +} + +func (h *histogram) allocateBuckets() { + if h.buckets == nil { + h.buckets = make([]int64, bucketCount) + h.buckets[h.value] = h.valueCount + h.value = 0 + h.valueCount = -1 + } +} + +func log2(i int64) int { + n := 0 + for ; i >= 0x100; i >>= 8 { + n += 8 + } + for ; i > 0; i >>= 1 { + n += 1 + } + return n +} + +func getBucket(i int64) (index int) { + index = log2(i) - 1 + if index < 0 { + index = 0 + } + if index >= bucketCount { + index = bucketCount - 1 + } + return +} + +// Total returns the number of recorded observations. +func (h *histogram) total() (total int64) { + if h.valueCount >= 0 { + total = h.valueCount + } + for _, val := range h.buckets { + total += int64(val) + } + return +} + +// Average returns the average value of recorded observations. +func (h *histogram) average() float64 { + t := h.total() + if t == 0 { + return 0 + } + return float64(h.sum) / float64(t) +} + +// Variance returns the variance of recorded observations. +func (h *histogram) variance() float64 { + t := float64(h.total()) + if t == 0 { + return 0 + } + s := float64(h.sum) / t + return h.sumOfSquares/t - s*s +} + +// StandardDeviation returns the standard deviation of recorded observations. +func (h *histogram) standardDeviation() float64 { + return math.Sqrt(h.variance()) +} + +// PercentileBoundary estimates the value that the given fraction of recorded +// observations are less than. +func (h *histogram) percentileBoundary(percentile float64) int64 { + total := h.total() + + // Corner cases (make sure result is strictly less than Total()) + if total == 0 { + return 0 + } else if total == 1 { + return int64(h.average()) + } + + percentOfTotal := round(float64(total) * percentile) + var runningTotal int64 + + for i := range h.buckets { + value := h.buckets[i] + runningTotal += value + if runningTotal == percentOfTotal { + // We hit an exact bucket boundary. If the next bucket has data, it is a + // good estimate of the value. If the bucket is empty, we interpolate the + // midpoint between the next bucket's boundary and the next non-zero + // bucket. If the remaining buckets are all empty, then we use the + // boundary for the next bucket as the estimate. + j := uint8(i + 1) + min := bucketBoundary(j) + if runningTotal < total { + for h.buckets[j] == 0 { + j++ + } + } + max := bucketBoundary(j) + return min + round(float64(max-min)/2) + } else if runningTotal > percentOfTotal { + // The value is in this bucket. Interpolate the value. + delta := runningTotal - percentOfTotal + percentBucket := float64(value-delta) / float64(value) + bucketMin := bucketBoundary(uint8(i)) + nextBucketMin := bucketBoundary(uint8(i + 1)) + bucketSize := nextBucketMin - bucketMin + return bucketMin + round(percentBucket*float64(bucketSize)) + } + } + return bucketBoundary(bucketCount - 1) +} + +// Median returns the estimated median of the observed values. +func (h *histogram) median() int64 { + return h.percentileBoundary(0.5) +} + +// Add adds other to h. +func (h *histogram) Add(other timeseries.Observable) { + o := other.(*histogram) + if o.valueCount == 0 { + // Other histogram is empty + } else if h.valueCount >= 0 && o.valueCount > 0 && h.value == o.value { + // Both have a single bucketed value, aggregate them + h.valueCount += o.valueCount + } else { + // Two different values necessitate buckets in this histogram + h.allocateBuckets() + if o.valueCount >= 0 { + h.buckets[o.value] += o.valueCount + } else { + for i := range h.buckets { + h.buckets[i] += o.buckets[i] + } + } + } + h.sumOfSquares += o.sumOfSquares + h.sum += o.sum +} + +// Clear resets the histogram to an empty state, removing all observed values. +func (h *histogram) Clear() { + h.buckets = nil + h.value = 0 + h.valueCount = 0 + h.sum = 0 + h.sumOfSquares = 0 +} + +// CopyFrom copies from other, which must be a *histogram, into h. +func (h *histogram) CopyFrom(other timeseries.Observable) { + o := other.(*histogram) + if o.valueCount == -1 { + h.allocateBuckets() + copy(h.buckets, o.buckets) + } + h.sum = o.sum + h.sumOfSquares = o.sumOfSquares + h.value = o.value + h.valueCount = o.valueCount +} + +// Multiply scales the histogram by the specified ratio. +func (h *histogram) Multiply(ratio float64) { + if h.valueCount == -1 { + for i := range h.buckets { + h.buckets[i] = int64(float64(h.buckets[i]) * ratio) + } + } else { + h.valueCount = int64(float64(h.valueCount) * ratio) + } + h.sum = int64(float64(h.sum) * ratio) + h.sumOfSquares = h.sumOfSquares * ratio +} + +// New creates a new histogram. +func (h *histogram) New() timeseries.Observable { + r := new(histogram) + r.Clear() + return r +} + +func (h *histogram) String() string { + return fmt.Sprintf("%d, %f, %d, %d, %v", + h.sum, h.sumOfSquares, h.value, h.valueCount, h.buckets) +} + +// round returns the closest int64 to the argument +func round(in float64) int64 { + return int64(math.Floor(in + 0.5)) +} + +// bucketBoundary returns the first value in the bucket. +func bucketBoundary(bucket uint8) int64 { + if bucket == 0 { + return 0 + } + return 1 << bucket +} + +// bucketData holds data about a specific bucket for use in distTmpl. +type bucketData struct { + Lower, Upper int64 + N int64 + Pct, CumulativePct float64 + GraphWidth int +} + +// data holds data about a Distribution for use in distTmpl. +type data struct { + Buckets []*bucketData + Count, Median int64 + Mean, StandardDeviation float64 +} + +// maxHTMLBarWidth is the maximum width of the HTML bar for visualizing buckets. +const maxHTMLBarWidth = 350.0 + +// newData returns data representing h for use in distTmpl. +func (h *histogram) newData() *data { + // Force the allocation of buckets to simplify the rendering implementation + h.allocateBuckets() + // We scale the bars on the right so that the largest bar is + // maxHTMLBarWidth pixels in width. + maxBucket := int64(0) + for _, n := range h.buckets { + if n > maxBucket { + maxBucket = n + } + } + total := h.total() + barsizeMult := maxHTMLBarWidth / float64(maxBucket) + var pctMult float64 + if total == 0 { + pctMult = 1.0 + } else { + pctMult = 100.0 / float64(total) + } + + buckets := make([]*bucketData, len(h.buckets)) + runningTotal := int64(0) + for i, n := range h.buckets { + if n == 0 { + continue + } + runningTotal += n + var upperBound int64 + if i < bucketCount-1 { + upperBound = bucketBoundary(uint8(i + 1)) + } else { + upperBound = math.MaxInt64 + } + buckets[i] = &bucketData{ + Lower: bucketBoundary(uint8(i)), + Upper: upperBound, + N: n, + Pct: float64(n) * pctMult, + CumulativePct: float64(runningTotal) * pctMult, + GraphWidth: int(float64(n) * barsizeMult), + } + } + return &data{ + Buckets: buckets, + Count: total, + Median: h.median(), + Mean: h.average(), + StandardDeviation: h.standardDeviation(), + } +} + +func (h *histogram) html() template.HTML { + buf := new(bytes.Buffer) + if err := distTmpl().Execute(buf, h.newData()); err != nil { + buf.Reset() + log.Printf("net/trace: couldn't execute template: %v", err) + } + return template.HTML(buf.String()) +} + +var distTmplCache *template.Template +var distTmplOnce sync.Once + +func distTmpl() *template.Template { + distTmplOnce.Do(func() { + // Input: data + distTmplCache = template.Must(template.New("distTmpl").Parse(` + + + + + + + +
    Count: {{.Count}}Mean: {{printf "%.0f" .Mean}}StdDev: {{printf "%.0f" .StandardDeviation}}Median: {{.Median}}
    +
    + +{{range $b := .Buckets}} +{{if $b}} + + + + + + + + + +{{end}} +{{end}} +
    [{{.Lower}},{{.Upper}}){{.N}}{{printf "%#.3f" .Pct}}%{{printf "%#.3f" .CumulativePct}}%
    +`)) + }) + return distTmplCache +} diff --git a/vendor/golang.org/x/net/trace/histogram_test.go b/vendor/golang.org/x/net/trace/histogram_test.go new file mode 100644 index 0000000..d384b93 --- /dev/null +++ b/vendor/golang.org/x/net/trace/histogram_test.go @@ -0,0 +1,325 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "math" + "testing" +) + +type sumTest struct { + value int64 + sum int64 + sumOfSquares float64 + total int64 +} + +var sumTests = []sumTest{ + {100, 100, 10000, 1}, + {50, 150, 12500, 2}, + {50, 200, 15000, 3}, + {50, 250, 17500, 4}, +} + +type bucketingTest struct { + in int64 + log int + bucket int +} + +var bucketingTests = []bucketingTest{ + {0, 0, 0}, + {1, 1, 0}, + {2, 2, 1}, + {3, 2, 1}, + {4, 3, 2}, + {1000, 10, 9}, + {1023, 10, 9}, + {1024, 11, 10}, + {1000000, 20, 19}, +} + +type multiplyTest struct { + in int64 + ratio float64 + expectedSum int64 + expectedTotal int64 + expectedSumOfSquares float64 +} + +var multiplyTests = []multiplyTest{ + {15, 2.5, 37, 2, 562.5}, + {128, 4.6, 758, 13, 77953.9}, +} + +type percentileTest struct { + fraction float64 + expected int64 +} + +var percentileTests = []percentileTest{ + {0.25, 48}, + {0.5, 96}, + {0.6, 109}, + {0.75, 128}, + {0.90, 205}, + {0.95, 230}, + {0.99, 256}, +} + +func TestSum(t *testing.T) { + var h histogram + + for _, test := range sumTests { + h.addMeasurement(test.value) + sum := h.sum + if sum != test.sum { + t.Errorf("h.Sum = %v WANT: %v", sum, test.sum) + } + + sumOfSquares := h.sumOfSquares + if sumOfSquares != test.sumOfSquares { + t.Errorf("h.SumOfSquares = %v WANT: %v", sumOfSquares, test.sumOfSquares) + } + + total := h.total() + if total != test.total { + t.Errorf("h.Total = %v WANT: %v", total, test.total) + } + } +} + +func TestMultiply(t *testing.T) { + var h histogram + for i, test := range multiplyTests { + h.addMeasurement(test.in) + h.Multiply(test.ratio) + if h.sum != test.expectedSum { + t.Errorf("#%v: h.sum = %v WANT: %v", i, h.sum, test.expectedSum) + } + if h.total() != test.expectedTotal { + t.Errorf("#%v: h.total = %v WANT: %v", i, h.total(), test.expectedTotal) + } + if h.sumOfSquares != test.expectedSumOfSquares { + t.Errorf("#%v: h.SumOfSquares = %v WANT: %v", i, test.expectedSumOfSquares, h.sumOfSquares) + } + } +} + +func TestBucketingFunctions(t *testing.T) { + for _, test := range bucketingTests { + log := log2(test.in) + if log != test.log { + t.Errorf("log2 = %v WANT: %v", log, test.log) + } + + bucket := getBucket(test.in) + if bucket != test.bucket { + t.Errorf("getBucket = %v WANT: %v", bucket, test.bucket) + } + } +} + +func TestAverage(t *testing.T) { + a := new(histogram) + average := a.average() + if average != 0 { + t.Errorf("Average of empty histogram was %v WANT: 0", average) + } + + a.addMeasurement(1) + a.addMeasurement(1) + a.addMeasurement(3) + const expected = float64(5) / float64(3) + average = a.average() + + if !isApproximate(average, expected) { + t.Errorf("Average = %g WANT: %v", average, expected) + } +} + +func TestStandardDeviation(t *testing.T) { + a := new(histogram) + add(a, 10, 1<<4) + add(a, 10, 1<<5) + add(a, 10, 1<<6) + stdDev := a.standardDeviation() + const expected = 19.95 + + if !isApproximate(stdDev, expected) { + t.Errorf("StandardDeviation = %v WANT: %v", stdDev, expected) + } + + // No values + a = new(histogram) + stdDev = a.standardDeviation() + + if !isApproximate(stdDev, 0) { + t.Errorf("StandardDeviation = %v WANT: 0", stdDev) + } + + add(a, 1, 1<<4) + if !isApproximate(stdDev, 0) { + t.Errorf("StandardDeviation = %v WANT: 0", stdDev) + } + + add(a, 10, 1<<4) + if !isApproximate(stdDev, 0) { + t.Errorf("StandardDeviation = %v WANT: 0", stdDev) + } +} + +func TestPercentileBoundary(t *testing.T) { + a := new(histogram) + add(a, 5, 1<<4) + add(a, 10, 1<<6) + add(a, 5, 1<<7) + + for _, test := range percentileTests { + percentile := a.percentileBoundary(test.fraction) + if percentile != test.expected { + t.Errorf("h.PercentileBoundary (fraction=%v) = %v WANT: %v", test.fraction, percentile, test.expected) + } + } +} + +func TestCopyFrom(t *testing.T) { + a := histogram{5, 25, []int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, 4, -1} + b := histogram{6, 36, []int64{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39}, 5, -1} + + a.CopyFrom(&b) + + if a.String() != b.String() { + t.Errorf("a.String = %s WANT: %s", a.String(), b.String()) + } +} + +func TestClear(t *testing.T) { + a := histogram{5, 25, []int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, 4, -1} + + a.Clear() + + expected := "0, 0.000000, 0, 0, []" + if a.String() != expected { + t.Errorf("a.String = %s WANT %s", a.String(), expected) + } +} + +func TestNew(t *testing.T) { + a := histogram{5, 25, []int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, 4, -1} + b := a.New() + + expected := "0, 0.000000, 0, 0, []" + if b.(*histogram).String() != expected { + t.Errorf("b.(*histogram).String = %s WANT: %s", b.(*histogram).String(), expected) + } +} + +func TestAdd(t *testing.T) { + // The tests here depend on the associativity of addMeasurement and Add. + // Add empty observation + a := histogram{5, 25, []int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, 4, -1} + b := a.New() + + expected := a.String() + a.Add(b) + if a.String() != expected { + t.Errorf("a.String = %s WANT: %s", a.String(), expected) + } + + // Add same bucketed value, no new buckets + c := new(histogram) + d := new(histogram) + e := new(histogram) + c.addMeasurement(12) + d.addMeasurement(11) + e.addMeasurement(12) + e.addMeasurement(11) + c.Add(d) + if c.String() != e.String() { + t.Errorf("c.String = %s WANT: %s", c.String(), e.String()) + } + + // Add bucketed values + f := new(histogram) + g := new(histogram) + h := new(histogram) + f.addMeasurement(4) + f.addMeasurement(12) + f.addMeasurement(100) + g.addMeasurement(18) + g.addMeasurement(36) + g.addMeasurement(255) + h.addMeasurement(4) + h.addMeasurement(12) + h.addMeasurement(100) + h.addMeasurement(18) + h.addMeasurement(36) + h.addMeasurement(255) + f.Add(g) + if f.String() != h.String() { + t.Errorf("f.String = %q WANT: %q", f.String(), h.String()) + } + + // add buckets to no buckets + i := new(histogram) + j := new(histogram) + k := new(histogram) + j.addMeasurement(18) + j.addMeasurement(36) + j.addMeasurement(255) + k.addMeasurement(18) + k.addMeasurement(36) + k.addMeasurement(255) + i.Add(j) + if i.String() != k.String() { + t.Errorf("i.String = %q WANT: %q", i.String(), k.String()) + } + + // add buckets to single value (no overlap) + l := new(histogram) + m := new(histogram) + n := new(histogram) + l.addMeasurement(0) + m.addMeasurement(18) + m.addMeasurement(36) + m.addMeasurement(255) + n.addMeasurement(0) + n.addMeasurement(18) + n.addMeasurement(36) + n.addMeasurement(255) + l.Add(m) + if l.String() != n.String() { + t.Errorf("l.String = %q WANT: %q", l.String(), n.String()) + } + + // mixed order + o := new(histogram) + p := new(histogram) + o.addMeasurement(0) + o.addMeasurement(2) + o.addMeasurement(0) + p.addMeasurement(0) + p.addMeasurement(0) + p.addMeasurement(2) + if o.String() != p.String() { + t.Errorf("o.String = %q WANT: %q", o.String(), p.String()) + } +} + +func add(h *histogram, times int, val int64) { + for i := 0; i < times; i++ { + h.addMeasurement(val) + } +} + +func isApproximate(x, y float64) bool { + return math.Abs(x-y) < 1e-2 +} diff --git a/vendor/golang.org/x/net/trace/trace.go b/vendor/golang.org/x/net/trace/trace.go new file mode 100644 index 0000000..64f56a3 --- /dev/null +++ b/vendor/golang.org/x/net/trace/trace.go @@ -0,0 +1,1079 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package trace implements tracing of requests and long-lived objects. +It exports HTTP interfaces on /debug/requests and /debug/events. + +A trace.Trace provides tracing for short-lived objects, usually requests. +A request handler might be implemented like this: + + func fooHandler(w http.ResponseWriter, req *http.Request) { + tr := trace.New("mypkg.Foo", req.URL.Path) + defer tr.Finish() + ... + tr.LazyPrintf("some event %q happened", str) + ... + if err := somethingImportant(); err != nil { + tr.LazyPrintf("somethingImportant failed: %v", err) + tr.SetError() + } + } + +The /debug/requests HTTP endpoint organizes the traces by family, +errors, and duration. It also provides histogram of request duration +for each family. + +A trace.EventLog provides tracing for long-lived objects, such as RPC +connections. + + // A Fetcher fetches URL paths for a single domain. + type Fetcher struct { + domain string + events trace.EventLog + } + + func NewFetcher(domain string) *Fetcher { + return &Fetcher{ + domain, + trace.NewEventLog("mypkg.Fetcher", domain), + } + } + + func (f *Fetcher) Fetch(path string) (string, error) { + resp, err := http.Get("http://" + f.domain + "/" + path) + if err != nil { + f.events.Errorf("Get(%q) = %v", path, err) + return "", err + } + f.events.Printf("Get(%q) = %s", path, resp.Status) + ... + } + + func (f *Fetcher) Close() error { + f.events.Finish() + return nil + } + +The /debug/events HTTP endpoint organizes the event logs by family and +by time since the last error. The expanded view displays recent log +entries and the log's call stack. +*/ +package trace // import "golang.org/x/net/trace" + +import ( + "bytes" + "fmt" + "html/template" + "io" + "log" + "net" + "net/http" + "runtime" + "sort" + "strconv" + "sync" + "sync/atomic" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/internal/timeseries" +) + +// DebugUseAfterFinish controls whether to debug uses of Trace values after finishing. +// FOR DEBUGGING ONLY. This will slow down the program. +var DebugUseAfterFinish = false + +// AuthRequest determines whether a specific request is permitted to load the +// /debug/requests or /debug/events pages. +// +// It returns two bools; the first indicates whether the page may be viewed at all, +// and the second indicates whether sensitive events will be shown. +// +// AuthRequest may be replaced by a program to customize its authorization requirements. +// +// The default AuthRequest function returns (true, true) if and only if the request +// comes from localhost/127.0.0.1/[::1]. +var AuthRequest = func(req *http.Request) (any, sensitive bool) { + // RemoteAddr is commonly in the form "IP" or "IP:port". + // If it is in the form "IP:port", split off the port. + host, _, err := net.SplitHostPort(req.RemoteAddr) + if err != nil { + host = req.RemoteAddr + } + switch host { + case "localhost", "127.0.0.1", "::1": + return true, true + default: + return false, false + } +} + +func init() { + http.HandleFunc("/debug/requests", func(w http.ResponseWriter, req *http.Request) { + any, sensitive := AuthRequest(req) + if !any { + http.Error(w, "not allowed", http.StatusUnauthorized) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + Render(w, req, sensitive) + }) + http.HandleFunc("/debug/events", func(w http.ResponseWriter, req *http.Request) { + any, sensitive := AuthRequest(req) + if !any { + http.Error(w, "not allowed", http.StatusUnauthorized) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + RenderEvents(w, req, sensitive) + }) +} + +// Render renders the HTML page typically served at /debug/requests. +// It does not do any auth checking; see AuthRequest for the default auth check +// used by the handler registered on http.DefaultServeMux. +// req may be nil. +func Render(w io.Writer, req *http.Request, sensitive bool) { + data := &struct { + Families []string + ActiveTraceCount map[string]int + CompletedTraces map[string]*family + + // Set when a bucket has been selected. + Traces traceList + Family string + Bucket int + Expanded bool + Traced bool + Active bool + ShowSensitive bool // whether to show sensitive events + + Histogram template.HTML + HistogramWindow string // e.g. "last minute", "last hour", "all time" + + // If non-zero, the set of traces is a partial set, + // and this is the total number. + Total int + }{ + CompletedTraces: completedTraces, + } + + data.ShowSensitive = sensitive + if req != nil { + // Allow show_sensitive=0 to force hiding of sensitive data for testing. + // This only goes one way; you can't use show_sensitive=1 to see things. + if req.FormValue("show_sensitive") == "0" { + data.ShowSensitive = false + } + + if exp, err := strconv.ParseBool(req.FormValue("exp")); err == nil { + data.Expanded = exp + } + if exp, err := strconv.ParseBool(req.FormValue("rtraced")); err == nil { + data.Traced = exp + } + } + + completedMu.RLock() + data.Families = make([]string, 0, len(completedTraces)) + for fam := range completedTraces { + data.Families = append(data.Families, fam) + } + completedMu.RUnlock() + sort.Strings(data.Families) + + // We are careful here to minimize the time spent locking activeMu, + // since that lock is required every time an RPC starts and finishes. + data.ActiveTraceCount = make(map[string]int, len(data.Families)) + activeMu.RLock() + for fam, s := range activeTraces { + data.ActiveTraceCount[fam] = s.Len() + } + activeMu.RUnlock() + + var ok bool + data.Family, data.Bucket, ok = parseArgs(req) + switch { + case !ok: + // No-op + case data.Bucket == -1: + data.Active = true + n := data.ActiveTraceCount[data.Family] + data.Traces = getActiveTraces(data.Family) + if len(data.Traces) < n { + data.Total = n + } + case data.Bucket < bucketsPerFamily: + if b := lookupBucket(data.Family, data.Bucket); b != nil { + data.Traces = b.Copy(data.Traced) + } + default: + if f := getFamily(data.Family, false); f != nil { + var obs timeseries.Observable + f.LatencyMu.RLock() + switch o := data.Bucket - bucketsPerFamily; o { + case 0: + obs = f.Latency.Minute() + data.HistogramWindow = "last minute" + case 1: + obs = f.Latency.Hour() + data.HistogramWindow = "last hour" + case 2: + obs = f.Latency.Total() + data.HistogramWindow = "all time" + } + f.LatencyMu.RUnlock() + if obs != nil { + data.Histogram = obs.(*histogram).html() + } + } + } + + if data.Traces != nil { + defer data.Traces.Free() + sort.Sort(data.Traces) + } + + completedMu.RLock() + defer completedMu.RUnlock() + if err := pageTmpl().ExecuteTemplate(w, "Page", data); err != nil { + log.Printf("net/trace: Failed executing template: %v", err) + } +} + +func parseArgs(req *http.Request) (fam string, b int, ok bool) { + if req == nil { + return "", 0, false + } + fam, bStr := req.FormValue("fam"), req.FormValue("b") + if fam == "" || bStr == "" { + return "", 0, false + } + b, err := strconv.Atoi(bStr) + if err != nil || b < -1 { + return "", 0, false + } + + return fam, b, true +} + +func lookupBucket(fam string, b int) *traceBucket { + f := getFamily(fam, false) + if f == nil || b < 0 || b >= len(f.Buckets) { + return nil + } + return f.Buckets[b] +} + +type contextKeyT string + +var contextKey = contextKeyT("golang.org/x/net/trace.Trace") + +// NewContext returns a copy of the parent context +// and associates it with a Trace. +func NewContext(ctx context.Context, tr Trace) context.Context { + return context.WithValue(ctx, contextKey, tr) +} + +// FromContext returns the Trace bound to the context, if any. +func FromContext(ctx context.Context) (tr Trace, ok bool) { + tr, ok = ctx.Value(contextKey).(Trace) + return +} + +// Trace represents an active request. +type Trace interface { + // LazyLog adds x to the event log. It will be evaluated each time the + // /debug/requests page is rendered. Any memory referenced by x will be + // pinned until the trace is finished and later discarded. + LazyLog(x fmt.Stringer, sensitive bool) + + // LazyPrintf evaluates its arguments with fmt.Sprintf each time the + // /debug/requests page is rendered. Any memory referenced by a will be + // pinned until the trace is finished and later discarded. + LazyPrintf(format string, a ...interface{}) + + // SetError declares that this trace resulted in an error. + SetError() + + // SetRecycler sets a recycler for the trace. + // f will be called for each event passed to LazyLog at a time when + // it is no longer required, whether while the trace is still active + // and the event is discarded, or when a completed trace is discarded. + SetRecycler(f func(interface{})) + + // SetTraceInfo sets the trace info for the trace. + // This is currently unused. + SetTraceInfo(traceID, spanID uint64) + + // SetMaxEvents sets the maximum number of events that will be stored + // in the trace. This has no effect if any events have already been + // added to the trace. + SetMaxEvents(m int) + + // Finish declares that this trace is complete. + // The trace should not be used after calling this method. + Finish() +} + +type lazySprintf struct { + format string + a []interface{} +} + +func (l *lazySprintf) String() string { + return fmt.Sprintf(l.format, l.a...) +} + +// New returns a new Trace with the specified family and title. +func New(family, title string) Trace { + tr := newTrace() + tr.ref() + tr.Family, tr.Title = family, title + tr.Start = time.Now() + tr.maxEvents = maxEventsPerTrace + tr.events = tr.eventsBuf[:0] + + activeMu.RLock() + s := activeTraces[tr.Family] + activeMu.RUnlock() + if s == nil { + activeMu.Lock() + s = activeTraces[tr.Family] // check again + if s == nil { + s = new(traceSet) + activeTraces[tr.Family] = s + } + activeMu.Unlock() + } + s.Add(tr) + + // Trigger allocation of the completed trace structure for this family. + // This will cause the family to be present in the request page during + // the first trace of this family. We don't care about the return value, + // nor is there any need for this to run inline, so we execute it in its + // own goroutine, but only if the family isn't allocated yet. + completedMu.RLock() + if _, ok := completedTraces[tr.Family]; !ok { + go allocFamily(tr.Family) + } + completedMu.RUnlock() + + return tr +} + +func (tr *trace) Finish() { + tr.Elapsed = time.Now().Sub(tr.Start) + if DebugUseAfterFinish { + buf := make([]byte, 4<<10) // 4 KB should be enough + n := runtime.Stack(buf, false) + tr.finishStack = buf[:n] + } + + activeMu.RLock() + m := activeTraces[tr.Family] + activeMu.RUnlock() + m.Remove(tr) + + f := getFamily(tr.Family, true) + for _, b := range f.Buckets { + if b.Cond.match(tr) { + b.Add(tr) + } + } + // Add a sample of elapsed time as microseconds to the family's timeseries + h := new(histogram) + h.addMeasurement(tr.Elapsed.Nanoseconds() / 1e3) + f.LatencyMu.Lock() + f.Latency.Add(h) + f.LatencyMu.Unlock() + + tr.unref() // matches ref in New +} + +const ( + bucketsPerFamily = 9 + tracesPerBucket = 10 + maxActiveTraces = 20 // Maximum number of active traces to show. + maxEventsPerTrace = 10 + numHistogramBuckets = 38 +) + +var ( + // The active traces. + activeMu sync.RWMutex + activeTraces = make(map[string]*traceSet) // family -> traces + + // Families of completed traces. + completedMu sync.RWMutex + completedTraces = make(map[string]*family) // family -> traces +) + +type traceSet struct { + mu sync.RWMutex + m map[*trace]bool + + // We could avoid the entire map scan in FirstN by having a slice of all the traces + // ordered by start time, and an index into that from the trace struct, with a periodic + // repack of the slice after enough traces finish; we could also use a skip list or similar. + // However, that would shift some of the expense from /debug/requests time to RPC time, + // which is probably the wrong trade-off. +} + +func (ts *traceSet) Len() int { + ts.mu.RLock() + defer ts.mu.RUnlock() + return len(ts.m) +} + +func (ts *traceSet) Add(tr *trace) { + ts.mu.Lock() + if ts.m == nil { + ts.m = make(map[*trace]bool) + } + ts.m[tr] = true + ts.mu.Unlock() +} + +func (ts *traceSet) Remove(tr *trace) { + ts.mu.Lock() + delete(ts.m, tr) + ts.mu.Unlock() +} + +// FirstN returns the first n traces ordered by time. +func (ts *traceSet) FirstN(n int) traceList { + ts.mu.RLock() + defer ts.mu.RUnlock() + + if n > len(ts.m) { + n = len(ts.m) + } + trl := make(traceList, 0, n) + + // Fast path for when no selectivity is needed. + if n == len(ts.m) { + for tr := range ts.m { + tr.ref() + trl = append(trl, tr) + } + sort.Sort(trl) + return trl + } + + // Pick the oldest n traces. + // This is inefficient. See the comment in the traceSet struct. + for tr := range ts.m { + // Put the first n traces into trl in the order they occur. + // When we have n, sort trl, and thereafter maintain its order. + if len(trl) < n { + tr.ref() + trl = append(trl, tr) + if len(trl) == n { + // This is guaranteed to happen exactly once during this loop. + sort.Sort(trl) + } + continue + } + if tr.Start.After(trl[n-1].Start) { + continue + } + + // Find where to insert this one. + tr.ref() + i := sort.Search(n, func(i int) bool { return trl[i].Start.After(tr.Start) }) + trl[n-1].unref() + copy(trl[i+1:], trl[i:]) + trl[i] = tr + } + + return trl +} + +func getActiveTraces(fam string) traceList { + activeMu.RLock() + s := activeTraces[fam] + activeMu.RUnlock() + if s == nil { + return nil + } + return s.FirstN(maxActiveTraces) +} + +func getFamily(fam string, allocNew bool) *family { + completedMu.RLock() + f := completedTraces[fam] + completedMu.RUnlock() + if f == nil && allocNew { + f = allocFamily(fam) + } + return f +} + +func allocFamily(fam string) *family { + completedMu.Lock() + defer completedMu.Unlock() + f := completedTraces[fam] + if f == nil { + f = newFamily() + completedTraces[fam] = f + } + return f +} + +// family represents a set of trace buckets and associated latency information. +type family struct { + // traces may occur in multiple buckets. + Buckets [bucketsPerFamily]*traceBucket + + // latency time series + LatencyMu sync.RWMutex + Latency *timeseries.MinuteHourSeries +} + +func newFamily() *family { + return &family{ + Buckets: [bucketsPerFamily]*traceBucket{ + {Cond: minCond(0)}, + {Cond: minCond(50 * time.Millisecond)}, + {Cond: minCond(100 * time.Millisecond)}, + {Cond: minCond(200 * time.Millisecond)}, + {Cond: minCond(500 * time.Millisecond)}, + {Cond: minCond(1 * time.Second)}, + {Cond: minCond(10 * time.Second)}, + {Cond: minCond(100 * time.Second)}, + {Cond: errorCond{}}, + }, + Latency: timeseries.NewMinuteHourSeries(func() timeseries.Observable { return new(histogram) }), + } +} + +// traceBucket represents a size-capped bucket of historic traces, +// along with a condition for a trace to belong to the bucket. +type traceBucket struct { + Cond cond + + // Ring buffer implementation of a fixed-size FIFO queue. + mu sync.RWMutex + buf [tracesPerBucket]*trace + start int // < tracesPerBucket + length int // <= tracesPerBucket +} + +func (b *traceBucket) Add(tr *trace) { + b.mu.Lock() + defer b.mu.Unlock() + + i := b.start + b.length + if i >= tracesPerBucket { + i -= tracesPerBucket + } + if b.length == tracesPerBucket { + // "Remove" an element from the bucket. + b.buf[i].unref() + b.start++ + if b.start == tracesPerBucket { + b.start = 0 + } + } + b.buf[i] = tr + if b.length < tracesPerBucket { + b.length++ + } + tr.ref() +} + +// Copy returns a copy of the traces in the bucket. +// If tracedOnly is true, only the traces with trace information will be returned. +// The logs will be ref'd before returning; the caller should call +// the Free method when it is done with them. +// TODO(dsymonds): keep track of traced requests in separate buckets. +func (b *traceBucket) Copy(tracedOnly bool) traceList { + b.mu.RLock() + defer b.mu.RUnlock() + + trl := make(traceList, 0, b.length) + for i, x := 0, b.start; i < b.length; i++ { + tr := b.buf[x] + if !tracedOnly || tr.spanID != 0 { + tr.ref() + trl = append(trl, tr) + } + x++ + if x == b.length { + x = 0 + } + } + return trl +} + +func (b *traceBucket) Empty() bool { + b.mu.RLock() + defer b.mu.RUnlock() + return b.length == 0 +} + +// cond represents a condition on a trace. +type cond interface { + match(t *trace) bool + String() string +} + +type minCond time.Duration + +func (m minCond) match(t *trace) bool { return t.Elapsed >= time.Duration(m) } +func (m minCond) String() string { return fmt.Sprintf("≥%gs", time.Duration(m).Seconds()) } + +type errorCond struct{} + +func (e errorCond) match(t *trace) bool { return t.IsError } +func (e errorCond) String() string { return "errors" } + +type traceList []*trace + +// Free calls unref on each element of the list. +func (trl traceList) Free() { + for _, t := range trl { + t.unref() + } +} + +// traceList may be sorted in reverse chronological order. +func (trl traceList) Len() int { return len(trl) } +func (trl traceList) Less(i, j int) bool { return trl[i].Start.After(trl[j].Start) } +func (trl traceList) Swap(i, j int) { trl[i], trl[j] = trl[j], trl[i] } + +// An event is a timestamped log entry in a trace. +type event struct { + When time.Time + Elapsed time.Duration // since previous event in trace + NewDay bool // whether this event is on a different day to the previous event + Recyclable bool // whether this event was passed via LazyLog + Sensitive bool // whether this event contains sensitive information + What interface{} // string or fmt.Stringer +} + +// WhenString returns a string representation of the elapsed time of the event. +// It will include the date if midnight was crossed. +func (e event) WhenString() string { + if e.NewDay { + return e.When.Format("2006/01/02 15:04:05.000000") + } + return e.When.Format("15:04:05.000000") +} + +// discarded represents a number of discarded events. +// It is stored as *discarded to make it easier to update in-place. +type discarded int + +func (d *discarded) String() string { + return fmt.Sprintf("(%d events discarded)", int(*d)) +} + +// trace represents an active or complete request, +// either sent or received by this program. +type trace struct { + // Family is the top-level grouping of traces to which this belongs. + Family string + + // Title is the title of this trace. + Title string + + // Timing information. + Start time.Time + Elapsed time.Duration // zero while active + + // Trace information if non-zero. + traceID uint64 + spanID uint64 + + // Whether this trace resulted in an error. + IsError bool + + // Append-only sequence of events (modulo discards). + mu sync.RWMutex + events []event + maxEvents int + + refs int32 // how many buckets this is in + recycler func(interface{}) + disc discarded // scratch space to avoid allocation + + finishStack []byte // where finish was called, if DebugUseAfterFinish is set + + eventsBuf [4]event // preallocated buffer in case we only log a few events +} + +func (tr *trace) reset() { + // Clear all but the mutex. Mutexes may not be copied, even when unlocked. + tr.Family = "" + tr.Title = "" + tr.Start = time.Time{} + tr.Elapsed = 0 + tr.traceID = 0 + tr.spanID = 0 + tr.IsError = false + tr.maxEvents = 0 + tr.events = nil + tr.refs = 0 + tr.recycler = nil + tr.disc = 0 + tr.finishStack = nil + for i := range tr.eventsBuf { + tr.eventsBuf[i] = event{} + } +} + +// delta returns the elapsed time since the last event or the trace start, +// and whether it spans midnight. +// L >= tr.mu +func (tr *trace) delta(t time.Time) (time.Duration, bool) { + if len(tr.events) == 0 { + return t.Sub(tr.Start), false + } + prev := tr.events[len(tr.events)-1].When + return t.Sub(prev), prev.Day() != t.Day() +} + +func (tr *trace) addEvent(x interface{}, recyclable, sensitive bool) { + if DebugUseAfterFinish && tr.finishStack != nil { + buf := make([]byte, 4<<10) // 4 KB should be enough + n := runtime.Stack(buf, false) + log.Printf("net/trace: trace used after finish:\nFinished at:\n%s\nUsed at:\n%s", tr.finishStack, buf[:n]) + } + + /* + NOTE TO DEBUGGERS + + If you are here because your program panicked in this code, + it is almost definitely the fault of code using this package, + and very unlikely to be the fault of this code. + + The most likely scenario is that some code elsewhere is using + a trace.Trace after its Finish method is called. + You can temporarily set the DebugUseAfterFinish var + to help discover where that is; do not leave that var set, + since it makes this package much less efficient. + */ + + e := event{When: time.Now(), What: x, Recyclable: recyclable, Sensitive: sensitive} + tr.mu.Lock() + e.Elapsed, e.NewDay = tr.delta(e.When) + if len(tr.events) < tr.maxEvents { + tr.events = append(tr.events, e) + } else { + // Discard the middle events. + di := int((tr.maxEvents - 1) / 2) + if d, ok := tr.events[di].What.(*discarded); ok { + (*d)++ + } else { + // disc starts at two to count for the event it is replacing, + // plus the next one that we are about to drop. + tr.disc = 2 + if tr.recycler != nil && tr.events[di].Recyclable { + go tr.recycler(tr.events[di].What) + } + tr.events[di].What = &tr.disc + } + // The timestamp of the discarded meta-event should be + // the time of the last event it is representing. + tr.events[di].When = tr.events[di+1].When + + if tr.recycler != nil && tr.events[di+1].Recyclable { + go tr.recycler(tr.events[di+1].What) + } + copy(tr.events[di+1:], tr.events[di+2:]) + tr.events[tr.maxEvents-1] = e + } + tr.mu.Unlock() +} + +func (tr *trace) LazyLog(x fmt.Stringer, sensitive bool) { + tr.addEvent(x, true, sensitive) +} + +func (tr *trace) LazyPrintf(format string, a ...interface{}) { + tr.addEvent(&lazySprintf{format, a}, false, false) +} + +func (tr *trace) SetError() { tr.IsError = true } + +func (tr *trace) SetRecycler(f func(interface{})) { + tr.recycler = f +} + +func (tr *trace) SetTraceInfo(traceID, spanID uint64) { + tr.traceID, tr.spanID = traceID, spanID +} + +func (tr *trace) SetMaxEvents(m int) { + // Always keep at least three events: first, discarded count, last. + if len(tr.events) == 0 && m > 3 { + tr.maxEvents = m + } +} + +func (tr *trace) ref() { + atomic.AddInt32(&tr.refs, 1) +} + +func (tr *trace) unref() { + if atomic.AddInt32(&tr.refs, -1) == 0 { + if tr.recycler != nil { + // freeTrace clears tr, so we hold tr.recycler and tr.events here. + go func(f func(interface{}), es []event) { + for _, e := range es { + if e.Recyclable { + f(e.What) + } + } + }(tr.recycler, tr.events) + } + + freeTrace(tr) + } +} + +func (tr *trace) When() string { + return tr.Start.Format("2006/01/02 15:04:05.000000") +} + +func (tr *trace) ElapsedTime() string { + t := tr.Elapsed + if t == 0 { + // Active trace. + t = time.Since(tr.Start) + } + return fmt.Sprintf("%.6f", t.Seconds()) +} + +func (tr *trace) Events() []event { + tr.mu.RLock() + defer tr.mu.RUnlock() + return tr.events +} + +var traceFreeList = make(chan *trace, 1000) // TODO(dsymonds): Use sync.Pool? + +// newTrace returns a trace ready to use. +func newTrace() *trace { + select { + case tr := <-traceFreeList: + return tr + default: + return new(trace) + } +} + +// freeTrace adds tr to traceFreeList if there's room. +// This is non-blocking. +func freeTrace(tr *trace) { + if DebugUseAfterFinish { + return // never reuse + } + tr.reset() + select { + case traceFreeList <- tr: + default: + } +} + +func elapsed(d time.Duration) string { + b := []byte(fmt.Sprintf("%.6f", d.Seconds())) + + // For subsecond durations, blank all zeros before decimal point, + // and all zeros between the decimal point and the first non-zero digit. + if d < time.Second { + dot := bytes.IndexByte(b, '.') + for i := 0; i < dot; i++ { + b[i] = ' ' + } + for i := dot + 1; i < len(b); i++ { + if b[i] == '0' { + b[i] = ' ' + } else { + break + } + } + } + + return string(b) +} + +var pageTmplCache *template.Template +var pageTmplOnce sync.Once + +func pageTmpl() *template.Template { + pageTmplOnce.Do(func() { + pageTmplCache = template.Must(template.New("Page").Funcs(template.FuncMap{ + "elapsed": elapsed, + "add": func(a, b int) int { return a + b }, + }).Parse(pageHTML)) + }) + return pageTmplCache +} + +const pageHTML = ` +{{template "Prolog" .}} +{{template "StatusTable" .}} +{{template "Epilog" .}} + +{{define "Prolog"}} + + + /debug/requests + + + + +

    /debug/requests

    +{{end}} {{/* end of Prolog */}} + +{{define "StatusTable"}} + + {{range $fam := .Families}} + + + + {{$n := index $.ActiveTraceCount $fam}} + + + {{$f := index $.CompletedTraces $fam}} + {{range $i, $b := $f.Buckets}} + {{$empty := $b.Empty}} + + {{end}} + + {{$nb := len $f.Buckets}} + + + + + + {{end}} +
    {{$fam}} + {{if $n}}{{end}} + [{{$n}} active] + {{if $n}}{{end}} + + {{if not $empty}}{{end}} + [{{.Cond}}] + {{if not $empty}}{{end}} + + [minute] + + [hour] + + [total] +
    +{{end}} {{/* end of StatusTable */}} + +{{define "Epilog"}} +{{if $.Traces}} +
    +

    Family: {{$.Family}}

    + +{{if or $.Expanded $.Traced}} + [Normal/Summary] +{{else}} + [Normal/Summary] +{{end}} + +{{if or (not $.Expanded) $.Traced}} + [Normal/Expanded] +{{else}} + [Normal/Expanded] +{{end}} + +{{if not $.Active}} + {{if or $.Expanded (not $.Traced)}} + [Traced/Summary] + {{else}} + [Traced/Summary] + {{end}} + {{if or (not $.Expanded) (not $.Traced)}} + [Traced/Expanded] + {{else}} + [Traced/Expanded] + {{end}} +{{end}} + +{{if $.Total}} +

    Showing {{len $.Traces}} of {{$.Total}} traces.

    +{{end}} + + + + + {{range $tr := $.Traces}} + + + + + {{/* TODO: include traceID/spanID */}} + + {{if $.Expanded}} + {{range $tr.Events}} + + + + + + {{end}} + {{end}} + {{end}} +
    + {{if $.Active}}Active{{else}}Completed{{end}} Requests +
    WhenElapsed (s)
    {{$tr.When}}{{$tr.ElapsedTime}}{{$tr.Title}}
    {{.WhenString}}{{elapsed .Elapsed}}{{if or $.ShowSensitive (not .Sensitive)}}... {{.What}}{{else}}[redacted]{{end}}
    +{{end}} {{/* if $.Traces */}} + +{{if $.Histogram}} +

    Latency (µs) of {{$.Family}} over {{$.HistogramWindow}}

    +{{$.Histogram}} +{{end}} {{/* if $.Histogram */}} + + + +{{end}} {{/* end of Epilog */}} +` diff --git a/vendor/golang.org/x/net/trace/trace_test.go b/vendor/golang.org/x/net/trace/trace_test.go new file mode 100644 index 0000000..bfd9dfe --- /dev/null +++ b/vendor/golang.org/x/net/trace/trace_test.go @@ -0,0 +1,178 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "net/http" + "reflect" + "testing" +) + +type s struct{} + +func (s) String() string { return "lazy string" } + +// TestReset checks whether all the fields are zeroed after reset. +func TestReset(t *testing.T) { + tr := New("foo", "bar") + tr.LazyLog(s{}, false) + tr.LazyPrintf("%d", 1) + tr.SetRecycler(func(_ interface{}) {}) + tr.SetTraceInfo(3, 4) + tr.SetMaxEvents(100) + tr.SetError() + tr.Finish() + + tr.(*trace).reset() + + if !reflect.DeepEqual(tr, new(trace)) { + t.Errorf("reset didn't clear all fields: %+v", tr) + } +} + +// TestResetLog checks whether all the fields are zeroed after reset. +func TestResetLog(t *testing.T) { + el := NewEventLog("foo", "bar") + el.Printf("message") + el.Errorf("error") + el.Finish() + + el.(*eventLog).reset() + + if !reflect.DeepEqual(el, new(eventLog)) { + t.Errorf("reset didn't clear all fields: %+v", el) + } +} + +func TestAuthRequest(t *testing.T) { + testCases := []struct { + host string + want bool + }{ + {host: "192.168.23.1", want: false}, + {host: "192.168.23.1:8080", want: false}, + {host: "malformed remote addr", want: false}, + {host: "localhost", want: true}, + {host: "localhost:8080", want: true}, + {host: "127.0.0.1", want: true}, + {host: "127.0.0.1:8080", want: true}, + {host: "::1", want: true}, + {host: "[::1]:8080", want: true}, + } + for _, tt := range testCases { + req := &http.Request{RemoteAddr: tt.host} + any, sensitive := AuthRequest(req) + if any != tt.want || sensitive != tt.want { + t.Errorf("AuthRequest(%q) = %t, %t; want %t, %t", tt.host, any, sensitive, tt.want, tt.want) + } + } +} + +// TestParseTemplate checks that all templates used by this package are valid +// as they are parsed on first usage +func TestParseTemplate(t *testing.T) { + if tmpl := distTmpl(); tmpl == nil { + t.Error("invalid template returned from distTmpl()") + } + if tmpl := pageTmpl(); tmpl == nil { + t.Error("invalid template returned from pageTmpl()") + } + if tmpl := eventsTmpl(); tmpl == nil { + t.Error("invalid template returned from eventsTmpl()") + } +} + +func benchmarkTrace(b *testing.B, maxEvents, numEvents int) { + numSpans := (b.N + numEvents + 1) / numEvents + + for i := 0; i < numSpans; i++ { + tr := New("test", "test") + tr.SetMaxEvents(maxEvents) + for j := 0; j < numEvents; j++ { + tr.LazyPrintf("%d", j) + } + tr.Finish() + } +} + +func BenchmarkTrace_Default_2(b *testing.B) { + benchmarkTrace(b, 0, 2) +} + +func BenchmarkTrace_Default_10(b *testing.B) { + benchmarkTrace(b, 0, 10) +} + +func BenchmarkTrace_Default_100(b *testing.B) { + benchmarkTrace(b, 0, 100) +} + +func BenchmarkTrace_Default_1000(b *testing.B) { + benchmarkTrace(b, 0, 1000) +} + +func BenchmarkTrace_Default_10000(b *testing.B) { + benchmarkTrace(b, 0, 10000) +} + +func BenchmarkTrace_10_2(b *testing.B) { + benchmarkTrace(b, 10, 2) +} + +func BenchmarkTrace_10_10(b *testing.B) { + benchmarkTrace(b, 10, 10) +} + +func BenchmarkTrace_10_100(b *testing.B) { + benchmarkTrace(b, 10, 100) +} + +func BenchmarkTrace_10_1000(b *testing.B) { + benchmarkTrace(b, 10, 1000) +} + +func BenchmarkTrace_10_10000(b *testing.B) { + benchmarkTrace(b, 10, 10000) +} + +func BenchmarkTrace_100_2(b *testing.B) { + benchmarkTrace(b, 100, 2) +} + +func BenchmarkTrace_100_10(b *testing.B) { + benchmarkTrace(b, 100, 10) +} + +func BenchmarkTrace_100_100(b *testing.B) { + benchmarkTrace(b, 100, 100) +} + +func BenchmarkTrace_100_1000(b *testing.B) { + benchmarkTrace(b, 100, 1000) +} + +func BenchmarkTrace_100_10000(b *testing.B) { + benchmarkTrace(b, 100, 10000) +} + +func BenchmarkTrace_1000_2(b *testing.B) { + benchmarkTrace(b, 1000, 2) +} + +func BenchmarkTrace_1000_10(b *testing.B) { + benchmarkTrace(b, 1000, 10) +} + +func BenchmarkTrace_1000_100(b *testing.B) { + benchmarkTrace(b, 1000, 100) +} + +func BenchmarkTrace_1000_1000(b *testing.B) { + benchmarkTrace(b, 1000, 1000) +} + +func BenchmarkTrace_1000_10000(b *testing.B) { + benchmarkTrace(b, 1000, 10000) +} diff --git a/vendor/golang.org/x/net/webdav/file.go b/vendor/golang.org/x/net/webdav/file.go new file mode 100644 index 0000000..748118d --- /dev/null +++ b/vendor/golang.org/x/net/webdav/file.go @@ -0,0 +1,796 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "encoding/xml" + "io" + "net/http" + "os" + "path" + "path/filepath" + "strings" + "sync" + "time" + + "golang.org/x/net/context" +) + +// slashClean is equivalent to but slightly more efficient than +// path.Clean("/" + name). +func slashClean(name string) string { + if name == "" || name[0] != '/' { + name = "/" + name + } + return path.Clean(name) +} + +// A FileSystem implements access to a collection of named files. The elements +// in a file path are separated by slash ('/', U+002F) characters, regardless +// of host operating system convention. +// +// Each method has the same semantics as the os package's function of the same +// name. +// +// Note that the os.Rename documentation says that "OS-specific restrictions +// might apply". In particular, whether or not renaming a file or directory +// overwriting another existing file or directory is an error is OS-dependent. +type FileSystem interface { + Mkdir(ctx context.Context, name string, perm os.FileMode) error + OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (File, error) + RemoveAll(ctx context.Context, name string) error + Rename(ctx context.Context, oldName, newName string) error + Stat(ctx context.Context, name string) (os.FileInfo, error) +} + +// A File is returned by a FileSystem's OpenFile method and can be served by a +// Handler. +// +// A File may optionally implement the DeadPropsHolder interface, if it can +// load and save dead properties. +type File interface { + http.File + io.Writer +} + +// A Dir implements FileSystem using the native file system restricted to a +// specific directory tree. +// +// While the FileSystem.OpenFile method takes '/'-separated paths, a Dir's +// string value is a filename on the native file system, not a URL, so it is +// separated by filepath.Separator, which isn't necessarily '/'. +// +// An empty Dir is treated as ".". +type Dir string + +func (d Dir) resolve(name string) string { + // This implementation is based on Dir.Open's code in the standard net/http package. + if filepath.Separator != '/' && strings.IndexRune(name, filepath.Separator) >= 0 || + strings.Contains(name, "\x00") { + return "" + } + dir := string(d) + if dir == "" { + dir = "." + } + return filepath.Join(dir, filepath.FromSlash(slashClean(name))) +} + +func (d Dir) Mkdir(ctx context.Context, name string, perm os.FileMode) error { + if name = d.resolve(name); name == "" { + return os.ErrNotExist + } + return os.Mkdir(name, perm) +} + +func (d Dir) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (File, error) { + if name = d.resolve(name); name == "" { + return nil, os.ErrNotExist + } + f, err := os.OpenFile(name, flag, perm) + if err != nil { + return nil, err + } + return f, nil +} + +func (d Dir) RemoveAll(ctx context.Context, name string) error { + if name = d.resolve(name); name == "" { + return os.ErrNotExist + } + if name == filepath.Clean(string(d)) { + // Prohibit removing the virtual root directory. + return os.ErrInvalid + } + return os.RemoveAll(name) +} + +func (d Dir) Rename(ctx context.Context, oldName, newName string) error { + if oldName = d.resolve(oldName); oldName == "" { + return os.ErrNotExist + } + if newName = d.resolve(newName); newName == "" { + return os.ErrNotExist + } + if root := filepath.Clean(string(d)); root == oldName || root == newName { + // Prohibit renaming from or to the virtual root directory. + return os.ErrInvalid + } + return os.Rename(oldName, newName) +} + +func (d Dir) Stat(ctx context.Context, name string) (os.FileInfo, error) { + if name = d.resolve(name); name == "" { + return nil, os.ErrNotExist + } + return os.Stat(name) +} + +// NewMemFS returns a new in-memory FileSystem implementation. +func NewMemFS() FileSystem { + return &memFS{ + root: memFSNode{ + children: make(map[string]*memFSNode), + mode: 0660 | os.ModeDir, + modTime: time.Now(), + }, + } +} + +// A memFS implements FileSystem, storing all metadata and actual file data +// in-memory. No limits on filesystem size are used, so it is not recommended +// this be used where the clients are untrusted. +// +// Concurrent access is permitted. The tree structure is protected by a mutex, +// and each node's contents and metadata are protected by a per-node mutex. +// +// TODO: Enforce file permissions. +type memFS struct { + mu sync.Mutex + root memFSNode +} + +// TODO: clean up and rationalize the walk/find code. + +// walk walks the directory tree for the fullname, calling f at each step. If f +// returns an error, the walk will be aborted and return that same error. +// +// dir is the directory at that step, frag is the name fragment, and final is +// whether it is the final step. For example, walking "/foo/bar/x" will result +// in 3 calls to f: +// - "/", "foo", false +// - "/foo/", "bar", false +// - "/foo/bar/", "x", true +// The frag argument will be empty only if dir is the root node and the walk +// ends at that root node. +func (fs *memFS) walk(op, fullname string, f func(dir *memFSNode, frag string, final bool) error) error { + original := fullname + fullname = slashClean(fullname) + + // Strip any leading "/"s to make fullname a relative path, as the walk + // starts at fs.root. + if fullname[0] == '/' { + fullname = fullname[1:] + } + dir := &fs.root + + for { + frag, remaining := fullname, "" + i := strings.IndexRune(fullname, '/') + final := i < 0 + if !final { + frag, remaining = fullname[:i], fullname[i+1:] + } + if frag == "" && dir != &fs.root { + panic("webdav: empty path fragment for a clean path") + } + if err := f(dir, frag, final); err != nil { + return &os.PathError{ + Op: op, + Path: original, + Err: err, + } + } + if final { + break + } + child := dir.children[frag] + if child == nil { + return &os.PathError{ + Op: op, + Path: original, + Err: os.ErrNotExist, + } + } + if !child.mode.IsDir() { + return &os.PathError{ + Op: op, + Path: original, + Err: os.ErrInvalid, + } + } + dir, fullname = child, remaining + } + return nil +} + +// find returns the parent of the named node and the relative name fragment +// from the parent to the child. For example, if finding "/foo/bar/baz" then +// parent will be the node for "/foo/bar" and frag will be "baz". +// +// If the fullname names the root node, then parent, frag and err will be zero. +// +// find returns an error if the parent does not already exist or the parent +// isn't a directory, but it will not return an error per se if the child does +// not already exist. The error returned is either nil or an *os.PathError +// whose Op is op. +func (fs *memFS) find(op, fullname string) (parent *memFSNode, frag string, err error) { + err = fs.walk(op, fullname, func(parent0 *memFSNode, frag0 string, final bool) error { + if !final { + return nil + } + if frag0 != "" { + parent, frag = parent0, frag0 + } + return nil + }) + return parent, frag, err +} + +func (fs *memFS) Mkdir(ctx context.Context, name string, perm os.FileMode) error { + fs.mu.Lock() + defer fs.mu.Unlock() + + dir, frag, err := fs.find("mkdir", name) + if err != nil { + return err + } + if dir == nil { + // We can't create the root. + return os.ErrInvalid + } + if _, ok := dir.children[frag]; ok { + return os.ErrExist + } + dir.children[frag] = &memFSNode{ + children: make(map[string]*memFSNode), + mode: perm.Perm() | os.ModeDir, + modTime: time.Now(), + } + return nil +} + +func (fs *memFS) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (File, error) { + fs.mu.Lock() + defer fs.mu.Unlock() + + dir, frag, err := fs.find("open", name) + if err != nil { + return nil, err + } + var n *memFSNode + if dir == nil { + // We're opening the root. + if flag&(os.O_WRONLY|os.O_RDWR) != 0 { + return nil, os.ErrPermission + } + n, frag = &fs.root, "/" + + } else { + n = dir.children[frag] + if flag&(os.O_SYNC|os.O_APPEND) != 0 { + // memFile doesn't support these flags yet. + return nil, os.ErrInvalid + } + if flag&os.O_CREATE != 0 { + if flag&os.O_EXCL != 0 && n != nil { + return nil, os.ErrExist + } + if n == nil { + n = &memFSNode{ + mode: perm.Perm(), + } + dir.children[frag] = n + } + } + if n == nil { + return nil, os.ErrNotExist + } + if flag&(os.O_WRONLY|os.O_RDWR) != 0 && flag&os.O_TRUNC != 0 { + n.mu.Lock() + n.data = nil + n.mu.Unlock() + } + } + + children := make([]os.FileInfo, 0, len(n.children)) + for cName, c := range n.children { + children = append(children, c.stat(cName)) + } + return &memFile{ + n: n, + nameSnapshot: frag, + childrenSnapshot: children, + }, nil +} + +func (fs *memFS) RemoveAll(ctx context.Context, name string) error { + fs.mu.Lock() + defer fs.mu.Unlock() + + dir, frag, err := fs.find("remove", name) + if err != nil { + return err + } + if dir == nil { + // We can't remove the root. + return os.ErrInvalid + } + delete(dir.children, frag) + return nil +} + +func (fs *memFS) Rename(ctx context.Context, oldName, newName string) error { + fs.mu.Lock() + defer fs.mu.Unlock() + + oldName = slashClean(oldName) + newName = slashClean(newName) + if oldName == newName { + return nil + } + if strings.HasPrefix(newName, oldName+"/") { + // We can't rename oldName to be a sub-directory of itself. + return os.ErrInvalid + } + + oDir, oFrag, err := fs.find("rename", oldName) + if err != nil { + return err + } + if oDir == nil { + // We can't rename from the root. + return os.ErrInvalid + } + + nDir, nFrag, err := fs.find("rename", newName) + if err != nil { + return err + } + if nDir == nil { + // We can't rename to the root. + return os.ErrInvalid + } + + oNode, ok := oDir.children[oFrag] + if !ok { + return os.ErrNotExist + } + if oNode.children != nil { + if nNode, ok := nDir.children[nFrag]; ok { + if nNode.children == nil { + return errNotADirectory + } + if len(nNode.children) != 0 { + return errDirectoryNotEmpty + } + } + } + delete(oDir.children, oFrag) + nDir.children[nFrag] = oNode + return nil +} + +func (fs *memFS) Stat(ctx context.Context, name string) (os.FileInfo, error) { + fs.mu.Lock() + defer fs.mu.Unlock() + + dir, frag, err := fs.find("stat", name) + if err != nil { + return nil, err + } + if dir == nil { + // We're stat'ting the root. + return fs.root.stat("/"), nil + } + if n, ok := dir.children[frag]; ok { + return n.stat(path.Base(name)), nil + } + return nil, os.ErrNotExist +} + +// A memFSNode represents a single entry in the in-memory filesystem and also +// implements os.FileInfo. +type memFSNode struct { + // children is protected by memFS.mu. + children map[string]*memFSNode + + mu sync.Mutex + data []byte + mode os.FileMode + modTime time.Time + deadProps map[xml.Name]Property +} + +func (n *memFSNode) stat(name string) *memFileInfo { + n.mu.Lock() + defer n.mu.Unlock() + return &memFileInfo{ + name: name, + size: int64(len(n.data)), + mode: n.mode, + modTime: n.modTime, + } +} + +func (n *memFSNode) DeadProps() (map[xml.Name]Property, error) { + n.mu.Lock() + defer n.mu.Unlock() + if len(n.deadProps) == 0 { + return nil, nil + } + ret := make(map[xml.Name]Property, len(n.deadProps)) + for k, v := range n.deadProps { + ret[k] = v + } + return ret, nil +} + +func (n *memFSNode) Patch(patches []Proppatch) ([]Propstat, error) { + n.mu.Lock() + defer n.mu.Unlock() + pstat := Propstat{Status: http.StatusOK} + for _, patch := range patches { + for _, p := range patch.Props { + pstat.Props = append(pstat.Props, Property{XMLName: p.XMLName}) + if patch.Remove { + delete(n.deadProps, p.XMLName) + continue + } + if n.deadProps == nil { + n.deadProps = map[xml.Name]Property{} + } + n.deadProps[p.XMLName] = p + } + } + return []Propstat{pstat}, nil +} + +type memFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (f *memFileInfo) Name() string { return f.name } +func (f *memFileInfo) Size() int64 { return f.size } +func (f *memFileInfo) Mode() os.FileMode { return f.mode } +func (f *memFileInfo) ModTime() time.Time { return f.modTime } +func (f *memFileInfo) IsDir() bool { return f.mode.IsDir() } +func (f *memFileInfo) Sys() interface{} { return nil } + +// A memFile is a File implementation for a memFSNode. It is a per-file (not +// per-node) read/write position, and a snapshot of the memFS' tree structure +// (a node's name and children) for that node. +type memFile struct { + n *memFSNode + nameSnapshot string + childrenSnapshot []os.FileInfo + // pos is protected by n.mu. + pos int +} + +// A *memFile implements the optional DeadPropsHolder interface. +var _ DeadPropsHolder = (*memFile)(nil) + +func (f *memFile) DeadProps() (map[xml.Name]Property, error) { return f.n.DeadProps() } +func (f *memFile) Patch(patches []Proppatch) ([]Propstat, error) { return f.n.Patch(patches) } + +func (f *memFile) Close() error { + return nil +} + +func (f *memFile) Read(p []byte) (int, error) { + f.n.mu.Lock() + defer f.n.mu.Unlock() + if f.n.mode.IsDir() { + return 0, os.ErrInvalid + } + if f.pos >= len(f.n.data) { + return 0, io.EOF + } + n := copy(p, f.n.data[f.pos:]) + f.pos += n + return n, nil +} + +func (f *memFile) Readdir(count int) ([]os.FileInfo, error) { + f.n.mu.Lock() + defer f.n.mu.Unlock() + if !f.n.mode.IsDir() { + return nil, os.ErrInvalid + } + old := f.pos + if old >= len(f.childrenSnapshot) { + // The os.File Readdir docs say that at the end of a directory, + // the error is io.EOF if count > 0 and nil if count <= 0. + if count > 0 { + return nil, io.EOF + } + return nil, nil + } + if count > 0 { + f.pos += count + if f.pos > len(f.childrenSnapshot) { + f.pos = len(f.childrenSnapshot) + } + } else { + f.pos = len(f.childrenSnapshot) + old = 0 + } + return f.childrenSnapshot[old:f.pos], nil +} + +func (f *memFile) Seek(offset int64, whence int) (int64, error) { + f.n.mu.Lock() + defer f.n.mu.Unlock() + npos := f.pos + // TODO: How to handle offsets greater than the size of system int? + switch whence { + case os.SEEK_SET: + npos = int(offset) + case os.SEEK_CUR: + npos += int(offset) + case os.SEEK_END: + npos = len(f.n.data) + int(offset) + default: + npos = -1 + } + if npos < 0 { + return 0, os.ErrInvalid + } + f.pos = npos + return int64(f.pos), nil +} + +func (f *memFile) Stat() (os.FileInfo, error) { + return f.n.stat(f.nameSnapshot), nil +} + +func (f *memFile) Write(p []byte) (int, error) { + lenp := len(p) + f.n.mu.Lock() + defer f.n.mu.Unlock() + + if f.n.mode.IsDir() { + return 0, os.ErrInvalid + } + if f.pos < len(f.n.data) { + n := copy(f.n.data[f.pos:], p) + f.pos += n + p = p[n:] + } else if f.pos > len(f.n.data) { + // Write permits the creation of holes, if we've seek'ed past the + // existing end of file. + if f.pos <= cap(f.n.data) { + oldLen := len(f.n.data) + f.n.data = f.n.data[:f.pos] + hole := f.n.data[oldLen:] + for i := range hole { + hole[i] = 0 + } + } else { + d := make([]byte, f.pos, f.pos+len(p)) + copy(d, f.n.data) + f.n.data = d + } + } + + if len(p) > 0 { + // We should only get here if f.pos == len(f.n.data). + f.n.data = append(f.n.data, p...) + f.pos = len(f.n.data) + } + f.n.modTime = time.Now() + return lenp, nil +} + +// moveFiles moves files and/or directories from src to dst. +// +// See section 9.9.4 for when various HTTP status codes apply. +func moveFiles(ctx context.Context, fs FileSystem, src, dst string, overwrite bool) (status int, err error) { + created := false + if _, err := fs.Stat(ctx, dst); err != nil { + if !os.IsNotExist(err) { + return http.StatusForbidden, err + } + created = true + } else if overwrite { + // Section 9.9.3 says that "If a resource exists at the destination + // and the Overwrite header is "T", then prior to performing the move, + // the server must perform a DELETE with "Depth: infinity" on the + // destination resource. + if err := fs.RemoveAll(ctx, dst); err != nil { + return http.StatusForbidden, err + } + } else { + return http.StatusPreconditionFailed, os.ErrExist + } + if err := fs.Rename(ctx, src, dst); err != nil { + return http.StatusForbidden, err + } + if created { + return http.StatusCreated, nil + } + return http.StatusNoContent, nil +} + +func copyProps(dst, src File) error { + d, ok := dst.(DeadPropsHolder) + if !ok { + return nil + } + s, ok := src.(DeadPropsHolder) + if !ok { + return nil + } + m, err := s.DeadProps() + if err != nil { + return err + } + props := make([]Property, 0, len(m)) + for _, prop := range m { + props = append(props, prop) + } + _, err = d.Patch([]Proppatch{{Props: props}}) + return err +} + +// copyFiles copies files and/or directories from src to dst. +// +// See section 9.8.5 for when various HTTP status codes apply. +func copyFiles(ctx context.Context, fs FileSystem, src, dst string, overwrite bool, depth int, recursion int) (status int, err error) { + if recursion == 1000 { + return http.StatusInternalServerError, errRecursionTooDeep + } + recursion++ + + // TODO: section 9.8.3 says that "Note that an infinite-depth COPY of /A/ + // into /A/B/ could lead to infinite recursion if not handled correctly." + + srcFile, err := fs.OpenFile(ctx, src, os.O_RDONLY, 0) + if err != nil { + if os.IsNotExist(err) { + return http.StatusNotFound, err + } + return http.StatusInternalServerError, err + } + defer srcFile.Close() + srcStat, err := srcFile.Stat() + if err != nil { + if os.IsNotExist(err) { + return http.StatusNotFound, err + } + return http.StatusInternalServerError, err + } + srcPerm := srcStat.Mode() & os.ModePerm + + created := false + if _, err := fs.Stat(ctx, dst); err != nil { + if os.IsNotExist(err) { + created = true + } else { + return http.StatusForbidden, err + } + } else { + if !overwrite { + return http.StatusPreconditionFailed, os.ErrExist + } + if err := fs.RemoveAll(ctx, dst); err != nil && !os.IsNotExist(err) { + return http.StatusForbidden, err + } + } + + if srcStat.IsDir() { + if err := fs.Mkdir(ctx, dst, srcPerm); err != nil { + return http.StatusForbidden, err + } + if depth == infiniteDepth { + children, err := srcFile.Readdir(-1) + if err != nil { + return http.StatusForbidden, err + } + for _, c := range children { + name := c.Name() + s := path.Join(src, name) + d := path.Join(dst, name) + cStatus, cErr := copyFiles(ctx, fs, s, d, overwrite, depth, recursion) + if cErr != nil { + // TODO: MultiStatus. + return cStatus, cErr + } + } + } + + } else { + dstFile, err := fs.OpenFile(ctx, dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, srcPerm) + if err != nil { + if os.IsNotExist(err) { + return http.StatusConflict, err + } + return http.StatusForbidden, err + + } + _, copyErr := io.Copy(dstFile, srcFile) + propsErr := copyProps(dstFile, srcFile) + closeErr := dstFile.Close() + if copyErr != nil { + return http.StatusInternalServerError, copyErr + } + if propsErr != nil { + return http.StatusInternalServerError, propsErr + } + if closeErr != nil { + return http.StatusInternalServerError, closeErr + } + } + + if created { + return http.StatusCreated, nil + } + return http.StatusNoContent, nil +} + +// walkFS traverses filesystem fs starting at name up to depth levels. +// +// Allowed values for depth are 0, 1 or infiniteDepth. For each visited node, +// walkFS calls walkFn. If a visited file system node is a directory and +// walkFn returns filepath.SkipDir, walkFS will skip traversal of this node. +func walkFS(ctx context.Context, fs FileSystem, depth int, name string, info os.FileInfo, walkFn filepath.WalkFunc) error { + // This implementation is based on Walk's code in the standard path/filepath package. + err := walkFn(name, info, nil) + if err != nil { + if info.IsDir() && err == filepath.SkipDir { + return nil + } + return err + } + if !info.IsDir() || depth == 0 { + return nil + } + if depth == 1 { + depth = 0 + } + + // Read directory names. + f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0) + if err != nil { + return walkFn(name, info, err) + } + fileInfos, err := f.Readdir(0) + f.Close() + if err != nil { + return walkFn(name, info, err) + } + + for _, fileInfo := range fileInfos { + filename := path.Join(name, fileInfo.Name()) + fileInfo, err := fs.Stat(ctx, filename) + if err != nil { + if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir { + return err + } + } else { + err = walkFS(ctx, fs, depth, filename, fileInfo, walkFn) + if err != nil { + if !fileInfo.IsDir() || err != filepath.SkipDir { + return err + } + } + } + } + return nil +} diff --git a/vendor/golang.org/x/net/webdav/file_go1.6.go b/vendor/golang.org/x/net/webdav/file_go1.6.go new file mode 100644 index 0000000..fa38770 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/file_go1.6.go @@ -0,0 +1,17 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7 + +package webdav + +import ( + "net/http" + + "golang.org/x/net/context" +) + +func getContext(r *http.Request) context.Context { + return context.Background() +} diff --git a/vendor/golang.org/x/net/webdav/file_go1.7.go b/vendor/golang.org/x/net/webdav/file_go1.7.go new file mode 100644 index 0000000..d1c3de8 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/file_go1.7.go @@ -0,0 +1,16 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package webdav + +import ( + "context" + "net/http" +) + +func getContext(r *http.Request) context.Context { + return r.Context() +} diff --git a/vendor/golang.org/x/net/webdav/file_test.go b/vendor/golang.org/x/net/webdav/file_test.go new file mode 100644 index 0000000..bfd96e1 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/file_test.go @@ -0,0 +1,1184 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "encoding/xml" + "fmt" + "io" + "io/ioutil" + "os" + "path" + "path/filepath" + "reflect" + "runtime" + "sort" + "strconv" + "strings" + "testing" + + "golang.org/x/net/context" +) + +func TestSlashClean(t *testing.T) { + testCases := []string{ + "", + ".", + "/", + "/./", + "//", + "//.", + "//a", + "/a", + "/a/b/c", + "/a//b/./../c/d/", + "a", + "a/b/c", + } + for _, tc := range testCases { + got := slashClean(tc) + want := path.Clean("/" + tc) + if got != want { + t.Errorf("tc=%q: got %q, want %q", tc, got, want) + } + } +} + +func TestDirResolve(t *testing.T) { + testCases := []struct { + dir, name, want string + }{ + {"/", "", "/"}, + {"/", "/", "/"}, + {"/", ".", "/"}, + {"/", "./a", "/a"}, + {"/", "..", "/"}, + {"/", "..", "/"}, + {"/", "../", "/"}, + {"/", "../.", "/"}, + {"/", "../a", "/a"}, + {"/", "../..", "/"}, + {"/", "../bar/a", "/bar/a"}, + {"/", "../baz/a", "/baz/a"}, + {"/", "...", "/..."}, + {"/", ".../a", "/.../a"}, + {"/", ".../..", "/"}, + {"/", "a", "/a"}, + {"/", "a/./b", "/a/b"}, + {"/", "a/../../b", "/b"}, + {"/", "a/../b", "/b"}, + {"/", "a/b", "/a/b"}, + {"/", "a/b/c/../../d", "/a/d"}, + {"/", "a/b/c/../../../d", "/d"}, + {"/", "a/b/c/../../../../d", "/d"}, + {"/", "a/b/c/d", "/a/b/c/d"}, + + {"/foo/bar", "", "/foo/bar"}, + {"/foo/bar", "/", "/foo/bar"}, + {"/foo/bar", ".", "/foo/bar"}, + {"/foo/bar", "./a", "/foo/bar/a"}, + {"/foo/bar", "..", "/foo/bar"}, + {"/foo/bar", "../", "/foo/bar"}, + {"/foo/bar", "../.", "/foo/bar"}, + {"/foo/bar", "../a", "/foo/bar/a"}, + {"/foo/bar", "../..", "/foo/bar"}, + {"/foo/bar", "../bar/a", "/foo/bar/bar/a"}, + {"/foo/bar", "../baz/a", "/foo/bar/baz/a"}, + {"/foo/bar", "...", "/foo/bar/..."}, + {"/foo/bar", ".../a", "/foo/bar/.../a"}, + {"/foo/bar", ".../..", "/foo/bar"}, + {"/foo/bar", "a", "/foo/bar/a"}, + {"/foo/bar", "a/./b", "/foo/bar/a/b"}, + {"/foo/bar", "a/../../b", "/foo/bar/b"}, + {"/foo/bar", "a/../b", "/foo/bar/b"}, + {"/foo/bar", "a/b", "/foo/bar/a/b"}, + {"/foo/bar", "a/b/c/../../d", "/foo/bar/a/d"}, + {"/foo/bar", "a/b/c/../../../d", "/foo/bar/d"}, + {"/foo/bar", "a/b/c/../../../../d", "/foo/bar/d"}, + {"/foo/bar", "a/b/c/d", "/foo/bar/a/b/c/d"}, + + {"/foo/bar/", "", "/foo/bar"}, + {"/foo/bar/", "/", "/foo/bar"}, + {"/foo/bar/", ".", "/foo/bar"}, + {"/foo/bar/", "./a", "/foo/bar/a"}, + {"/foo/bar/", "..", "/foo/bar"}, + + {"/foo//bar///", "", "/foo/bar"}, + {"/foo//bar///", "/", "/foo/bar"}, + {"/foo//bar///", ".", "/foo/bar"}, + {"/foo//bar///", "./a", "/foo/bar/a"}, + {"/foo//bar///", "..", "/foo/bar"}, + + {"/x/y/z", "ab/c\x00d/ef", ""}, + + {".", "", "."}, + {".", "/", "."}, + {".", ".", "."}, + {".", "./a", "a"}, + {".", "..", "."}, + {".", "..", "."}, + {".", "../", "."}, + {".", "../.", "."}, + {".", "../a", "a"}, + {".", "../..", "."}, + {".", "../bar/a", "bar/a"}, + {".", "../baz/a", "baz/a"}, + {".", "...", "..."}, + {".", ".../a", ".../a"}, + {".", ".../..", "."}, + {".", "a", "a"}, + {".", "a/./b", "a/b"}, + {".", "a/../../b", "b"}, + {".", "a/../b", "b"}, + {".", "a/b", "a/b"}, + {".", "a/b/c/../../d", "a/d"}, + {".", "a/b/c/../../../d", "d"}, + {".", "a/b/c/../../../../d", "d"}, + {".", "a/b/c/d", "a/b/c/d"}, + + {"", "", "."}, + {"", "/", "."}, + {"", ".", "."}, + {"", "./a", "a"}, + {"", "..", "."}, + } + + for _, tc := range testCases { + d := Dir(filepath.FromSlash(tc.dir)) + if got := filepath.ToSlash(d.resolve(tc.name)); got != tc.want { + t.Errorf("dir=%q, name=%q: got %q, want %q", tc.dir, tc.name, got, tc.want) + } + } +} + +func TestWalk(t *testing.T) { + type walkStep struct { + name, frag string + final bool + } + + testCases := []struct { + dir string + want []walkStep + }{ + {"", []walkStep{ + {"", "", true}, + }}, + {"/", []walkStep{ + {"", "", true}, + }}, + {"/a", []walkStep{ + {"", "a", true}, + }}, + {"/a/", []walkStep{ + {"", "a", true}, + }}, + {"/a/b", []walkStep{ + {"", "a", false}, + {"a", "b", true}, + }}, + {"/a/b/", []walkStep{ + {"", "a", false}, + {"a", "b", true}, + }}, + {"/a/b/c", []walkStep{ + {"", "a", false}, + {"a", "b", false}, + {"b", "c", true}, + }}, + // The following test case is the one mentioned explicitly + // in the method description. + {"/foo/bar/x", []walkStep{ + {"", "foo", false}, + {"foo", "bar", false}, + {"bar", "x", true}, + }}, + } + + ctx := context.Background() + + for _, tc := range testCases { + fs := NewMemFS().(*memFS) + + parts := strings.Split(tc.dir, "/") + for p := 2; p < len(parts); p++ { + d := strings.Join(parts[:p], "/") + if err := fs.Mkdir(ctx, d, 0666); err != nil { + t.Errorf("tc.dir=%q: mkdir: %q: %v", tc.dir, d, err) + } + } + + i, prevFrag := 0, "" + err := fs.walk("test", tc.dir, func(dir *memFSNode, frag string, final bool) error { + got := walkStep{ + name: prevFrag, + frag: frag, + final: final, + } + want := tc.want[i] + + if got != want { + return fmt.Errorf("got %+v, want %+v", got, want) + } + i, prevFrag = i+1, frag + return nil + }) + if err != nil { + t.Errorf("tc.dir=%q: %v", tc.dir, err) + } + } +} + +// find appends to ss the names of the named file and its children. It is +// analogous to the Unix find command. +// +// The returned strings are not guaranteed to be in any particular order. +func find(ctx context.Context, ss []string, fs FileSystem, name string) ([]string, error) { + stat, err := fs.Stat(ctx, name) + if err != nil { + return nil, err + } + ss = append(ss, name) + if stat.IsDir() { + f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0) + if err != nil { + return nil, err + } + defer f.Close() + children, err := f.Readdir(-1) + if err != nil { + return nil, err + } + for _, c := range children { + ss, err = find(ctx, ss, fs, path.Join(name, c.Name())) + if err != nil { + return nil, err + } + } + } + return ss, nil +} + +func testFS(t *testing.T, fs FileSystem) { + errStr := func(err error) string { + switch { + case os.IsExist(err): + return "errExist" + case os.IsNotExist(err): + return "errNotExist" + case err != nil: + return "err" + } + return "ok" + } + + // The non-"find" non-"stat" test cases should change the file system state. The + // indentation of the "find"s and "stat"s helps distinguish such test cases. + testCases := []string{ + " stat / want dir", + " stat /a want errNotExist", + " stat /d want errNotExist", + " stat /d/e want errNotExist", + "create /a A want ok", + " stat /a want 1", + "create /d/e EEE want errNotExist", + "mk-dir /a want errExist", + "mk-dir /d/m want errNotExist", + "mk-dir /d want ok", + " stat /d want dir", + "create /d/e EEE want ok", + " stat /d/e want 3", + " find / /a /d /d/e", + "create /d/f FFFF want ok", + "create /d/g GGGGGGG want ok", + "mk-dir /d/m want ok", + "mk-dir /d/m want errExist", + "create /d/m/p PPPPP want ok", + " stat /d/e want 3", + " stat /d/f want 4", + " stat /d/g want 7", + " stat /d/h want errNotExist", + " stat /d/m want dir", + " stat /d/m/p want 5", + " find / /a /d /d/e /d/f /d/g /d/m /d/m/p", + "rm-all /d want ok", + " stat /a want 1", + " stat /d want errNotExist", + " stat /d/e want errNotExist", + " stat /d/f want errNotExist", + " stat /d/g want errNotExist", + " stat /d/m want errNotExist", + " stat /d/m/p want errNotExist", + " find / /a", + "mk-dir /d/m want errNotExist", + "mk-dir /d want ok", + "create /d/f FFFF want ok", + "rm-all /d/f want ok", + "mk-dir /d/m want ok", + "rm-all /z want ok", + "rm-all / want err", + "create /b BB want ok", + " stat / want dir", + " stat /a want 1", + " stat /b want 2", + " stat /c want errNotExist", + " stat /d want dir", + " stat /d/m want dir", + " find / /a /b /d /d/m", + "move__ o=F /b /c want ok", + " stat /b want errNotExist", + " stat /c want 2", + " stat /d/m want dir", + " stat /d/n want errNotExist", + " find / /a /c /d /d/m", + "move__ o=F /d/m /d/n want ok", + "create /d/n/q QQQQ want ok", + " stat /d/m want errNotExist", + " stat /d/n want dir", + " stat /d/n/q want 4", + "move__ o=F /d /d/n/z want err", + "move__ o=T /c /d/n/q want ok", + " stat /c want errNotExist", + " stat /d/n/q want 2", + " find / /a /d /d/n /d/n/q", + "create /d/n/r RRRRR want ok", + "mk-dir /u want ok", + "mk-dir /u/v want ok", + "move__ o=F /d/n /u want errExist", + "create /t TTTTTT want ok", + "move__ o=F /d/n /t want errExist", + "rm-all /t want ok", + "move__ o=F /d/n /t want ok", + " stat /d want dir", + " stat /d/n want errNotExist", + " stat /d/n/r want errNotExist", + " stat /t want dir", + " stat /t/q want 2", + " stat /t/r want 5", + " find / /a /d /t /t/q /t/r /u /u/v", + "move__ o=F /t / want errExist", + "move__ o=T /t /u/v want ok", + " stat /u/v/r want 5", + "move__ o=F / /z want err", + " find / /a /d /u /u/v /u/v/q /u/v/r", + " stat /a want 1", + " stat /b want errNotExist", + " stat /c want errNotExist", + " stat /u/v/r want 5", + "copy__ o=F d=0 /a /b want ok", + "copy__ o=T d=0 /a /c want ok", + " stat /a want 1", + " stat /b want 1", + " stat /c want 1", + " stat /u/v/r want 5", + "copy__ o=F d=0 /u/v/r /b want errExist", + " stat /b want 1", + "copy__ o=T d=0 /u/v/r /b want ok", + " stat /a want 1", + " stat /b want 5", + " stat /u/v/r want 5", + "rm-all /a want ok", + "rm-all /b want ok", + "mk-dir /u/v/w want ok", + "create /u/v/w/s SSSSSSSS want ok", + " stat /d want dir", + " stat /d/x want errNotExist", + " stat /d/y want errNotExist", + " stat /u/v/r want 5", + " stat /u/v/w/s want 8", + " find / /c /d /u /u/v /u/v/q /u/v/r /u/v/w /u/v/w/s", + "copy__ o=T d=0 /u/v /d/x want ok", + "copy__ o=T d=∞ /u/v /d/y want ok", + "rm-all /u want ok", + " stat /d/x want dir", + " stat /d/x/q want errNotExist", + " stat /d/x/r want errNotExist", + " stat /d/x/w want errNotExist", + " stat /d/x/w/s want errNotExist", + " stat /d/y want dir", + " stat /d/y/q want 2", + " stat /d/y/r want 5", + " stat /d/y/w want dir", + " stat /d/y/w/s want 8", + " stat /u want errNotExist", + " find / /c /d /d/x /d/y /d/y/q /d/y/r /d/y/w /d/y/w/s", + "copy__ o=F d=∞ /d/y /d/x want errExist", + } + + ctx := context.Background() + + for i, tc := range testCases { + tc = strings.TrimSpace(tc) + j := strings.IndexByte(tc, ' ') + if j < 0 { + t.Fatalf("test case #%d %q: invalid command", i, tc) + } + op, arg := tc[:j], tc[j+1:] + + switch op { + default: + t.Fatalf("test case #%d %q: invalid operation %q", i, tc, op) + + case "create": + parts := strings.Split(arg, " ") + if len(parts) != 4 || parts[2] != "want" { + t.Fatalf("test case #%d %q: invalid write", i, tc) + } + f, opErr := fs.OpenFile(ctx, parts[0], os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if got := errStr(opErr); got != parts[3] { + t.Fatalf("test case #%d %q: OpenFile: got %q (%v), want %q", i, tc, got, opErr, parts[3]) + } + if f != nil { + if _, err := f.Write([]byte(parts[1])); err != nil { + t.Fatalf("test case #%d %q: Write: %v", i, tc, err) + } + if err := f.Close(); err != nil { + t.Fatalf("test case #%d %q: Close: %v", i, tc, err) + } + } + + case "find": + got, err := find(ctx, nil, fs, "/") + if err != nil { + t.Fatalf("test case #%d %q: find: %v", i, tc, err) + } + sort.Strings(got) + want := strings.Split(arg, " ") + if !reflect.DeepEqual(got, want) { + t.Fatalf("test case #%d %q:\ngot %s\nwant %s", i, tc, got, want) + } + + case "copy__", "mk-dir", "move__", "rm-all", "stat": + nParts := 3 + switch op { + case "copy__": + nParts = 6 + case "move__": + nParts = 5 + } + parts := strings.Split(arg, " ") + if len(parts) != nParts { + t.Fatalf("test case #%d %q: invalid %s", i, tc, op) + } + + got, opErr := "", error(nil) + switch op { + case "copy__": + depth := 0 + if parts[1] == "d=∞" { + depth = infiniteDepth + } + _, opErr = copyFiles(ctx, fs, parts[2], parts[3], parts[0] == "o=T", depth, 0) + case "mk-dir": + opErr = fs.Mkdir(ctx, parts[0], 0777) + case "move__": + _, opErr = moveFiles(ctx, fs, parts[1], parts[2], parts[0] == "o=T") + case "rm-all": + opErr = fs.RemoveAll(ctx, parts[0]) + case "stat": + var stat os.FileInfo + fileName := parts[0] + if stat, opErr = fs.Stat(ctx, fileName); opErr == nil { + if stat.IsDir() { + got = "dir" + } else { + got = strconv.Itoa(int(stat.Size())) + } + + if fileName == "/" { + // For a Dir FileSystem, the virtual file system root maps to a + // real file system name like "/tmp/webdav-test012345", which does + // not end with "/". We skip such cases. + } else if statName := stat.Name(); path.Base(fileName) != statName { + t.Fatalf("test case #%d %q: file name %q inconsistent with stat name %q", + i, tc, fileName, statName) + } + } + } + if got == "" { + got = errStr(opErr) + } + + if parts[len(parts)-2] != "want" { + t.Fatalf("test case #%d %q: invalid %s", i, tc, op) + } + if want := parts[len(parts)-1]; got != want { + t.Fatalf("test case #%d %q: got %q (%v), want %q", i, tc, got, opErr, want) + } + } + } +} + +func TestDir(t *testing.T) { + switch runtime.GOOS { + case "nacl": + t.Skip("see golang.org/issue/12004") + case "plan9": + t.Skip("see golang.org/issue/11453") + } + + td, err := ioutil.TempDir("", "webdav-test") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(td) + testFS(t, Dir(td)) +} + +func TestMemFS(t *testing.T) { + testFS(t, NewMemFS()) +} + +func TestMemFSRoot(t *testing.T) { + ctx := context.Background() + fs := NewMemFS() + for i := 0; i < 5; i++ { + stat, err := fs.Stat(ctx, "/") + if err != nil { + t.Fatalf("i=%d: Stat: %v", i, err) + } + if !stat.IsDir() { + t.Fatalf("i=%d: Stat.IsDir is false, want true", i) + } + + f, err := fs.OpenFile(ctx, "/", os.O_RDONLY, 0) + if err != nil { + t.Fatalf("i=%d: OpenFile: %v", i, err) + } + defer f.Close() + children, err := f.Readdir(-1) + if err != nil { + t.Fatalf("i=%d: Readdir: %v", i, err) + } + if len(children) != i { + t.Fatalf("i=%d: got %d children, want %d", i, len(children), i) + } + + if _, err := f.Write(make([]byte, 1)); err == nil { + t.Fatalf("i=%d: Write: got nil error, want non-nil", i) + } + + if err := fs.Mkdir(ctx, fmt.Sprintf("/dir%d", i), 0777); err != nil { + t.Fatalf("i=%d: Mkdir: %v", i, err) + } + } +} + +func TestMemFileReaddir(t *testing.T) { + ctx := context.Background() + fs := NewMemFS() + if err := fs.Mkdir(ctx, "/foo", 0777); err != nil { + t.Fatalf("Mkdir: %v", err) + } + readdir := func(count int) ([]os.FileInfo, error) { + f, err := fs.OpenFile(ctx, "/foo", os.O_RDONLY, 0) + if err != nil { + t.Fatalf("OpenFile: %v", err) + } + defer f.Close() + return f.Readdir(count) + } + if got, err := readdir(-1); len(got) != 0 || err != nil { + t.Fatalf("readdir(-1): got %d fileInfos with err=%v, want 0, ", len(got), err) + } + if got, err := readdir(+1); len(got) != 0 || err != io.EOF { + t.Fatalf("readdir(+1): got %d fileInfos with err=%v, want 0, EOF", len(got), err) + } +} + +func TestMemFile(t *testing.T) { + testCases := []string{ + "wantData ", + "wantSize 0", + "write abc", + "wantData abc", + "write de", + "wantData abcde", + "wantSize 5", + "write 5*x", + "write 4*y+2*z", + "write 3*st", + "wantData abcdexxxxxyyyyzzststst", + "wantSize 22", + "seek set 4 want 4", + "write EFG", + "wantData abcdEFGxxxyyyyzzststst", + "wantSize 22", + "seek set 2 want 2", + "read cdEF", + "read Gx", + "seek cur 0 want 8", + "seek cur 2 want 10", + "seek cur -1 want 9", + "write J", + "wantData abcdEFGxxJyyyyzzststst", + "wantSize 22", + "seek cur -4 want 6", + "write ghijk", + "wantData abcdEFghijkyyyzzststst", + "wantSize 22", + "read yyyz", + "seek cur 0 want 15", + "write ", + "seek cur 0 want 15", + "read ", + "seek cur 0 want 15", + "seek end -3 want 19", + "write ZZ", + "wantData abcdEFghijkyyyzzstsZZt", + "wantSize 22", + "write 4*A", + "wantData abcdEFghijkyyyzzstsZZAAAA", + "wantSize 25", + "seek end 0 want 25", + "seek end -5 want 20", + "read Z+4*A", + "write 5*B", + "wantData abcdEFghijkyyyzzstsZZAAAABBBBB", + "wantSize 30", + "seek end 10 want 40", + "write C", + "wantData abcdEFghijkyyyzzstsZZAAAABBBBB..........C", + "wantSize 41", + "write D", + "wantData abcdEFghijkyyyzzstsZZAAAABBBBB..........CD", + "wantSize 42", + "seek set 43 want 43", + "write E", + "wantData abcdEFghijkyyyzzstsZZAAAABBBBB..........CD.E", + "wantSize 44", + "seek set 0 want 0", + "write 5*123456789_", + "wantData 123456789_123456789_123456789_123456789_123456789_", + "wantSize 50", + "seek cur 0 want 50", + "seek cur -99 want err", + } + + ctx := context.Background() + + const filename = "/foo" + fs := NewMemFS() + f, err := fs.OpenFile(ctx, filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if err != nil { + t.Fatalf("OpenFile: %v", err) + } + defer f.Close() + + for i, tc := range testCases { + j := strings.IndexByte(tc, ' ') + if j < 0 { + t.Fatalf("test case #%d %q: invalid command", i, tc) + } + op, arg := tc[:j], tc[j+1:] + + // Expand an arg like "3*a+2*b" to "aaabb". + parts := strings.Split(arg, "+") + for j, part := range parts { + if k := strings.IndexByte(part, '*'); k >= 0 { + repeatCount, repeatStr := part[:k], part[k+1:] + n, err := strconv.Atoi(repeatCount) + if err != nil { + t.Fatalf("test case #%d %q: invalid repeat count %q", i, tc, repeatCount) + } + parts[j] = strings.Repeat(repeatStr, n) + } + } + arg = strings.Join(parts, "") + + switch op { + default: + t.Fatalf("test case #%d %q: invalid operation %q", i, tc, op) + + case "read": + buf := make([]byte, len(arg)) + if _, err := io.ReadFull(f, buf); err != nil { + t.Fatalf("test case #%d %q: ReadFull: %v", i, tc, err) + } + if got := string(buf); got != arg { + t.Fatalf("test case #%d %q:\ngot %q\nwant %q", i, tc, got, arg) + } + + case "seek": + parts := strings.Split(arg, " ") + if len(parts) != 4 { + t.Fatalf("test case #%d %q: invalid seek", i, tc) + } + + whence := 0 + switch parts[0] { + default: + t.Fatalf("test case #%d %q: invalid seek whence", i, tc) + case "set": + whence = os.SEEK_SET + case "cur": + whence = os.SEEK_CUR + case "end": + whence = os.SEEK_END + } + offset, err := strconv.Atoi(parts[1]) + if err != nil { + t.Fatalf("test case #%d %q: invalid offset %q", i, tc, parts[1]) + } + + if parts[2] != "want" { + t.Fatalf("test case #%d %q: invalid seek", i, tc) + } + if parts[3] == "err" { + _, err := f.Seek(int64(offset), whence) + if err == nil { + t.Fatalf("test case #%d %q: Seek returned nil error, want non-nil", i, tc) + } + } else { + got, err := f.Seek(int64(offset), whence) + if err != nil { + t.Fatalf("test case #%d %q: Seek: %v", i, tc, err) + } + want, err := strconv.Atoi(parts[3]) + if err != nil { + t.Fatalf("test case #%d %q: invalid want %q", i, tc, parts[3]) + } + if got != int64(want) { + t.Fatalf("test case #%d %q: got %d, want %d", i, tc, got, want) + } + } + + case "write": + n, err := f.Write([]byte(arg)) + if err != nil { + t.Fatalf("test case #%d %q: write: %v", i, tc, err) + } + if n != len(arg) { + t.Fatalf("test case #%d %q: write returned %d bytes, want %d", i, tc, n, len(arg)) + } + + case "wantData": + g, err := fs.OpenFile(ctx, filename, os.O_RDONLY, 0666) + if err != nil { + t.Fatalf("test case #%d %q: OpenFile: %v", i, tc, err) + } + gotBytes, err := ioutil.ReadAll(g) + if err != nil { + t.Fatalf("test case #%d %q: ReadAll: %v", i, tc, err) + } + for i, c := range gotBytes { + if c == '\x00' { + gotBytes[i] = '.' + } + } + got := string(gotBytes) + if got != arg { + t.Fatalf("test case #%d %q:\ngot %q\nwant %q", i, tc, got, arg) + } + if err := g.Close(); err != nil { + t.Fatalf("test case #%d %q: Close: %v", i, tc, err) + } + + case "wantSize": + n, err := strconv.Atoi(arg) + if err != nil { + t.Fatalf("test case #%d %q: invalid size %q", i, tc, arg) + } + fi, err := fs.Stat(ctx, filename) + if err != nil { + t.Fatalf("test case #%d %q: Stat: %v", i, tc, err) + } + if got, want := fi.Size(), int64(n); got != want { + t.Fatalf("test case #%d %q: got %d, want %d", i, tc, got, want) + } + } + } +} + +// TestMemFileWriteAllocs tests that writing N consecutive 1KiB chunks to a +// memFile doesn't allocate a new buffer for each of those N times. Otherwise, +// calling io.Copy(aMemFile, src) is likely to have quadratic complexity. +func TestMemFileWriteAllocs(t *testing.T) { + if runtime.Compiler == "gccgo" { + t.Skip("gccgo allocates here") + } + ctx := context.Background() + fs := NewMemFS() + f, err := fs.OpenFile(ctx, "/xxx", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if err != nil { + t.Fatalf("OpenFile: %v", err) + } + defer f.Close() + + xxx := make([]byte, 1024) + for i := range xxx { + xxx[i] = 'x' + } + + a := testing.AllocsPerRun(100, func() { + f.Write(xxx) + }) + // AllocsPerRun returns an integral value, so we compare the rounded-down + // number to zero. + if a > 0 { + t.Fatalf("%v allocs per run, want 0", a) + } +} + +func BenchmarkMemFileWrite(b *testing.B) { + ctx := context.Background() + fs := NewMemFS() + xxx := make([]byte, 1024) + for i := range xxx { + xxx[i] = 'x' + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + f, err := fs.OpenFile(ctx, "/xxx", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if err != nil { + b.Fatalf("OpenFile: %v", err) + } + for j := 0; j < 100; j++ { + f.Write(xxx) + } + if err := f.Close(); err != nil { + b.Fatalf("Close: %v", err) + } + if err := fs.RemoveAll(ctx, "/xxx"); err != nil { + b.Fatalf("RemoveAll: %v", err) + } + } +} + +func TestCopyMoveProps(t *testing.T) { + ctx := context.Background() + fs := NewMemFS() + create := func(name string) error { + f, err := fs.OpenFile(ctx, name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if err != nil { + return err + } + _, wErr := f.Write([]byte("contents")) + cErr := f.Close() + if wErr != nil { + return wErr + } + return cErr + } + patch := func(name string, patches ...Proppatch) error { + f, err := fs.OpenFile(ctx, name, os.O_RDWR, 0666) + if err != nil { + return err + } + _, pErr := f.(DeadPropsHolder).Patch(patches) + cErr := f.Close() + if pErr != nil { + return pErr + } + return cErr + } + props := func(name string) (map[xml.Name]Property, error) { + f, err := fs.OpenFile(ctx, name, os.O_RDWR, 0666) + if err != nil { + return nil, err + } + m, pErr := f.(DeadPropsHolder).DeadProps() + cErr := f.Close() + if pErr != nil { + return nil, pErr + } + if cErr != nil { + return nil, cErr + } + return m, nil + } + + p0 := Property{ + XMLName: xml.Name{Space: "x:", Local: "boat"}, + InnerXML: []byte("pea-green"), + } + p1 := Property{ + XMLName: xml.Name{Space: "x:", Local: "ring"}, + InnerXML: []byte("1 shilling"), + } + p2 := Property{ + XMLName: xml.Name{Space: "x:", Local: "spoon"}, + InnerXML: []byte("runcible"), + } + p3 := Property{ + XMLName: xml.Name{Space: "x:", Local: "moon"}, + InnerXML: []byte("light"), + } + + if err := create("/src"); err != nil { + t.Fatalf("create /src: %v", err) + } + if err := patch("/src", Proppatch{Props: []Property{p0, p1}}); err != nil { + t.Fatalf("patch /src +p0 +p1: %v", err) + } + if _, err := copyFiles(ctx, fs, "/src", "/tmp", true, infiniteDepth, 0); err != nil { + t.Fatalf("copyFiles /src /tmp: %v", err) + } + if _, err := moveFiles(ctx, fs, "/tmp", "/dst", true); err != nil { + t.Fatalf("moveFiles /tmp /dst: %v", err) + } + if err := patch("/src", Proppatch{Props: []Property{p0}, Remove: true}); err != nil { + t.Fatalf("patch /src -p0: %v", err) + } + if err := patch("/src", Proppatch{Props: []Property{p2}}); err != nil { + t.Fatalf("patch /src +p2: %v", err) + } + if err := patch("/dst", Proppatch{Props: []Property{p1}, Remove: true}); err != nil { + t.Fatalf("patch /dst -p1: %v", err) + } + if err := patch("/dst", Proppatch{Props: []Property{p3}}); err != nil { + t.Fatalf("patch /dst +p3: %v", err) + } + + gotSrc, err := props("/src") + if err != nil { + t.Fatalf("props /src: %v", err) + } + wantSrc := map[xml.Name]Property{ + p1.XMLName: p1, + p2.XMLName: p2, + } + if !reflect.DeepEqual(gotSrc, wantSrc) { + t.Fatalf("props /src:\ngot %v\nwant %v", gotSrc, wantSrc) + } + + gotDst, err := props("/dst") + if err != nil { + t.Fatalf("props /dst: %v", err) + } + wantDst := map[xml.Name]Property{ + p0.XMLName: p0, + p3.XMLName: p3, + } + if !reflect.DeepEqual(gotDst, wantDst) { + t.Fatalf("props /dst:\ngot %v\nwant %v", gotDst, wantDst) + } +} + +func TestWalkFS(t *testing.T) { + testCases := []struct { + desc string + buildfs []string + startAt string + depth int + walkFn filepath.WalkFunc + want []string + }{{ + "just root", + []string{}, + "/", + infiniteDepth, + nil, + []string{ + "/", + }, + }, { + "infinite walk from root", + []string{ + "mkdir /a", + "mkdir /a/b", + "touch /a/b/c", + "mkdir /a/d", + "mkdir /e", + "touch /f", + }, + "/", + infiniteDepth, + nil, + []string{ + "/", + "/a", + "/a/b", + "/a/b/c", + "/a/d", + "/e", + "/f", + }, + }, { + "infinite walk from subdir", + []string{ + "mkdir /a", + "mkdir /a/b", + "touch /a/b/c", + "mkdir /a/d", + "mkdir /e", + "touch /f", + }, + "/a", + infiniteDepth, + nil, + []string{ + "/a", + "/a/b", + "/a/b/c", + "/a/d", + }, + }, { + "depth 1 walk from root", + []string{ + "mkdir /a", + "mkdir /a/b", + "touch /a/b/c", + "mkdir /a/d", + "mkdir /e", + "touch /f", + }, + "/", + 1, + nil, + []string{ + "/", + "/a", + "/e", + "/f", + }, + }, { + "depth 1 walk from subdir", + []string{ + "mkdir /a", + "mkdir /a/b", + "touch /a/b/c", + "mkdir /a/b/g", + "mkdir /a/b/g/h", + "touch /a/b/g/i", + "touch /a/b/g/h/j", + }, + "/a/b", + 1, + nil, + []string{ + "/a/b", + "/a/b/c", + "/a/b/g", + }, + }, { + "depth 0 walk from subdir", + []string{ + "mkdir /a", + "mkdir /a/b", + "touch /a/b/c", + "mkdir /a/b/g", + "mkdir /a/b/g/h", + "touch /a/b/g/i", + "touch /a/b/g/h/j", + }, + "/a/b", + 0, + nil, + []string{ + "/a/b", + }, + }, { + "infinite walk from file", + []string{ + "mkdir /a", + "touch /a/b", + "touch /a/c", + }, + "/a/b", + 0, + nil, + []string{ + "/a/b", + }, + }, { + "infinite walk with skipped subdir", + []string{ + "mkdir /a", + "mkdir /a/b", + "touch /a/b/c", + "mkdir /a/b/g", + "mkdir /a/b/g/h", + "touch /a/b/g/i", + "touch /a/b/g/h/j", + "touch /a/b/z", + }, + "/", + infiniteDepth, + func(path string, info os.FileInfo, err error) error { + if path == "/a/b/g" { + return filepath.SkipDir + } + return nil + }, + []string{ + "/", + "/a", + "/a/b", + "/a/b/c", + "/a/b/z", + }, + }} + ctx := context.Background() + for _, tc := range testCases { + fs, err := buildTestFS(tc.buildfs) + if err != nil { + t.Fatalf("%s: cannot create test filesystem: %v", tc.desc, err) + } + var got []string + traceFn := func(path string, info os.FileInfo, err error) error { + if tc.walkFn != nil { + err = tc.walkFn(path, info, err) + if err != nil { + return err + } + } + got = append(got, path) + return nil + } + fi, err := fs.Stat(ctx, tc.startAt) + if err != nil { + t.Fatalf("%s: cannot stat: %v", tc.desc, err) + } + err = walkFS(ctx, fs, tc.depth, tc.startAt, fi, traceFn) + if err != nil { + t.Errorf("%s:\ngot error %v, want nil", tc.desc, err) + continue + } + sort.Strings(got) + sort.Strings(tc.want) + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("%s:\ngot %q\nwant %q", tc.desc, got, tc.want) + continue + } + } +} + +func buildTestFS(buildfs []string) (FileSystem, error) { + // TODO: Could this be merged with the build logic in TestFS? + + ctx := context.Background() + fs := NewMemFS() + for _, b := range buildfs { + op := strings.Split(b, " ") + switch op[0] { + case "mkdir": + err := fs.Mkdir(ctx, op[1], os.ModeDir|0777) + if err != nil { + return nil, err + } + case "touch": + f, err := fs.OpenFile(ctx, op[1], os.O_RDWR|os.O_CREATE, 0666) + if err != nil { + return nil, err + } + f.Close() + case "write": + f, err := fs.OpenFile(ctx, op[1], os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if err != nil { + return nil, err + } + _, err = f.Write([]byte(op[2])) + f.Close() + if err != nil { + return nil, err + } + default: + return nil, fmt.Errorf("unknown file operation %q", op[0]) + } + } + return fs, nil +} diff --git a/vendor/golang.org/x/net/webdav/if.go b/vendor/golang.org/x/net/webdav/if.go new file mode 100644 index 0000000..416e81c --- /dev/null +++ b/vendor/golang.org/x/net/webdav/if.go @@ -0,0 +1,173 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +// The If header is covered by Section 10.4. +// http://www.webdav.org/specs/rfc4918.html#HEADER_If + +import ( + "strings" +) + +// ifHeader is a disjunction (OR) of ifLists. +type ifHeader struct { + lists []ifList +} + +// ifList is a conjunction (AND) of Conditions, and an optional resource tag. +type ifList struct { + resourceTag string + conditions []Condition +} + +// parseIfHeader parses the "If: foo bar" HTTP header. The httpHeader string +// should omit the "If:" prefix and have any "\r\n"s collapsed to a " ", as is +// returned by req.Header.Get("If") for a http.Request req. +func parseIfHeader(httpHeader string) (h ifHeader, ok bool) { + s := strings.TrimSpace(httpHeader) + switch tokenType, _, _ := lex(s); tokenType { + case '(': + return parseNoTagLists(s) + case angleTokenType: + return parseTaggedLists(s) + default: + return ifHeader{}, false + } +} + +func parseNoTagLists(s string) (h ifHeader, ok bool) { + for { + l, remaining, ok := parseList(s) + if !ok { + return ifHeader{}, false + } + h.lists = append(h.lists, l) + if remaining == "" { + return h, true + } + s = remaining + } +} + +func parseTaggedLists(s string) (h ifHeader, ok bool) { + resourceTag, n := "", 0 + for first := true; ; first = false { + tokenType, tokenStr, remaining := lex(s) + switch tokenType { + case angleTokenType: + if !first && n == 0 { + return ifHeader{}, false + } + resourceTag, n = tokenStr, 0 + s = remaining + case '(': + n++ + l, remaining, ok := parseList(s) + if !ok { + return ifHeader{}, false + } + l.resourceTag = resourceTag + h.lists = append(h.lists, l) + if remaining == "" { + return h, true + } + s = remaining + default: + return ifHeader{}, false + } + } +} + +func parseList(s string) (l ifList, remaining string, ok bool) { + tokenType, _, s := lex(s) + if tokenType != '(' { + return ifList{}, "", false + } + for { + tokenType, _, remaining = lex(s) + if tokenType == ')' { + if len(l.conditions) == 0 { + return ifList{}, "", false + } + return l, remaining, true + } + c, remaining, ok := parseCondition(s) + if !ok { + return ifList{}, "", false + } + l.conditions = append(l.conditions, c) + s = remaining + } +} + +func parseCondition(s string) (c Condition, remaining string, ok bool) { + tokenType, tokenStr, s := lex(s) + if tokenType == notTokenType { + c.Not = true + tokenType, tokenStr, s = lex(s) + } + switch tokenType { + case strTokenType, angleTokenType: + c.Token = tokenStr + case squareTokenType: + c.ETag = tokenStr + default: + return Condition{}, "", false + } + return c, s, true +} + +// Single-rune tokens like '(' or ')' have a token type equal to their rune. +// All other tokens have a negative token type. +const ( + errTokenType = rune(-1) + eofTokenType = rune(-2) + strTokenType = rune(-3) + notTokenType = rune(-4) + angleTokenType = rune(-5) + squareTokenType = rune(-6) +) + +func lex(s string) (tokenType rune, tokenStr string, remaining string) { + // The net/textproto Reader that parses the HTTP header will collapse + // Linear White Space that spans multiple "\r\n" lines to a single " ", + // so we don't need to look for '\r' or '\n'. + for len(s) > 0 && (s[0] == '\t' || s[0] == ' ') { + s = s[1:] + } + if len(s) == 0 { + return eofTokenType, "", "" + } + i := 0 +loop: + for ; i < len(s); i++ { + switch s[i] { + case '\t', ' ', '(', ')', '<', '>', '[', ']': + break loop + } + } + + if i != 0 { + tokenStr, remaining = s[:i], s[i:] + if tokenStr == "Not" { + return notTokenType, "", remaining + } + return strTokenType, tokenStr, remaining + } + + j := 0 + switch s[0] { + case '<': + j, tokenType = strings.IndexByte(s, '>'), angleTokenType + case '[': + j, tokenType = strings.IndexByte(s, ']'), squareTokenType + default: + return rune(s[0]), "", s[1:] + } + if j < 0 { + return errTokenType, "", "" + } + return tokenType, s[1:j], s[j+1:] +} diff --git a/vendor/golang.org/x/net/webdav/if_test.go b/vendor/golang.org/x/net/webdav/if_test.go new file mode 100644 index 0000000..aad61a4 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/if_test.go @@ -0,0 +1,322 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "reflect" + "strings" + "testing" +) + +func TestParseIfHeader(t *testing.T) { + // The "section x.y.z" test cases come from section x.y.z of the spec at + // http://www.webdav.org/specs/rfc4918.html + testCases := []struct { + desc string + input string + want ifHeader + }{{ + "bad: empty", + ``, + ifHeader{}, + }, { + "bad: no parens", + `foobar`, + ifHeader{}, + }, { + "bad: empty list #1", + `()`, + ifHeader{}, + }, { + "bad: empty list #2", + `(a) (b c) () (d)`, + ifHeader{}, + }, { + "bad: no list after resource #1", + ``, + ifHeader{}, + }, { + "bad: no list after resource #2", + ` (a)`, + ifHeader{}, + }, { + "bad: no list after resource #3", + ` (a) (b) `, + ifHeader{}, + }, { + "bad: no-tag-list followed by tagged-list", + `(a) (b) (c)`, + ifHeader{}, + }, { + "bad: unfinished list", + `(a`, + ifHeader{}, + }, { + "bad: unfinished ETag", + `([b`, + ifHeader{}, + }, { + "bad: unfinished Notted list", + `(Not a`, + ifHeader{}, + }, { + "bad: double Not", + `(Not Not a)`, + ifHeader{}, + }, { + "good: one list with a Token", + `(a)`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Token: `a`, + }}, + }}, + }, + }, { + "good: one list with an ETag", + `([a])`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + ETag: `a`, + }}, + }}, + }, + }, { + "good: one list with three Nots", + `(Not a Not b Not [d])`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Not: true, + Token: `a`, + }, { + Not: true, + Token: `b`, + }, { + Not: true, + ETag: `d`, + }}, + }}, + }, + }, { + "good: two lists", + `(a) (b)`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Token: `a`, + }}, + }, { + conditions: []Condition{{ + Token: `b`, + }}, + }}, + }, + }, { + "good: two Notted lists", + `(Not a) (Not b)`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Not: true, + Token: `a`, + }}, + }, { + conditions: []Condition{{ + Not: true, + Token: `b`, + }}, + }}, + }, + }, { + "section 7.5.1", + ` + ()`, + ifHeader{ + lists: []ifList{{ + resourceTag: `http://www.example.com/users/f/fielding/index.html`, + conditions: []Condition{{ + Token: `urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6`, + }}, + }}, + }, + }, { + "section 7.5.2 #1", + `()`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Token: `urn:uuid:150852e2-3847-42d5-8cbe-0f4f296f26cf`, + }}, + }}, + }, + }, { + "section 7.5.2 #2", + ` + ()`, + ifHeader{ + lists: []ifList{{ + resourceTag: `http://example.com/locked/`, + conditions: []Condition{{ + Token: `urn:uuid:150852e2-3847-42d5-8cbe-0f4f296f26cf`, + }}, + }}, + }, + }, { + "section 7.5.2 #3", + ` + ()`, + ifHeader{ + lists: []ifList{{ + resourceTag: `http://example.com/locked/member`, + conditions: []Condition{{ + Token: `urn:uuid:150852e2-3847-42d5-8cbe-0f4f296f26cf`, + }}, + }}, + }, + }, { + "section 9.9.6", + `() + ()`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Token: `urn:uuid:fe184f2e-6eec-41d0-c765-01adc56e6bb4`, + }}, + }, { + conditions: []Condition{{ + Token: `urn:uuid:e454f3f3-acdc-452a-56c7-00a5c91e4b77`, + }}, + }}, + }, + }, { + "section 9.10.8", + `()`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Token: `urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4`, + }}, + }}, + }, + }, { + "section 10.4.6", + `( + ["I am an ETag"]) + (["I am another ETag"])`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Token: `urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2`, + }, { + ETag: `"I am an ETag"`, + }}, + }, { + conditions: []Condition{{ + ETag: `"I am another ETag"`, + }}, + }}, + }, + }, { + "section 10.4.7", + `(Not + )`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Not: true, + Token: `urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2`, + }, { + Token: `urn:uuid:58f202ac-22cf-11d1-b12d-002035b29092`, + }}, + }}, + }, + }, { + "section 10.4.8", + `() + (Not )`, + ifHeader{ + lists: []ifList{{ + conditions: []Condition{{ + Token: `urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2`, + }}, + }, { + conditions: []Condition{{ + Not: true, + Token: `DAV:no-lock`, + }}, + }}, + }, + }, { + "section 10.4.9", + ` + ( + [W/"A weak ETag"]) (["strong ETag"])`, + ifHeader{ + lists: []ifList{{ + resourceTag: `/resource1`, + conditions: []Condition{{ + Token: `urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2`, + }, { + ETag: `W/"A weak ETag"`, + }}, + }, { + resourceTag: `/resource1`, + conditions: []Condition{{ + ETag: `"strong ETag"`, + }}, + }}, + }, + }, { + "section 10.4.10", + ` + ()`, + ifHeader{ + lists: []ifList{{ + resourceTag: `http://www.example.com/specs/`, + conditions: []Condition{{ + Token: `urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2`, + }}, + }}, + }, + }, { + "section 10.4.11 #1", + ` (["4217"])`, + ifHeader{ + lists: []ifList{{ + resourceTag: `/specs/rfc2518.doc`, + conditions: []Condition{{ + ETag: `"4217"`, + }}, + }}, + }, + }, { + "section 10.4.11 #2", + ` (Not ["4217"])`, + ifHeader{ + lists: []ifList{{ + resourceTag: `/specs/rfc2518.doc`, + conditions: []Condition{{ + Not: true, + ETag: `"4217"`, + }}, + }}, + }, + }} + + for _, tc := range testCases { + got, ok := parseIfHeader(strings.Replace(tc.input, "\n", "", -1)) + if gotEmpty := reflect.DeepEqual(got, ifHeader{}); gotEmpty == ok { + t.Errorf("%s: should be different: empty header == %t, ok == %t", tc.desc, gotEmpty, ok) + continue + } + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("%s:\ngot %v\nwant %v", tc.desc, got, tc.want) + continue + } + } +} diff --git a/vendor/golang.org/x/net/webdav/internal/xml/README b/vendor/golang.org/x/net/webdav/internal/xml/README new file mode 100644 index 0000000..89656f4 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/README @@ -0,0 +1,11 @@ +This is a fork of the encoding/xml package at ca1d6c4, the last commit before +https://go.googlesource.com/go/+/c0d6d33 "encoding/xml: restore Go 1.4 name +space behavior" made late in the lead-up to the Go 1.5 release. + +The list of encoding/xml changes is at +https://go.googlesource.com/go/+log/master/src/encoding/xml + +This fork is temporary, and I (nigeltao) expect to revert it after Go 1.6 is +released. + +See http://golang.org/issue/11841 diff --git a/vendor/golang.org/x/net/webdav/internal/xml/atom_test.go b/vendor/golang.org/x/net/webdav/internal/xml/atom_test.go new file mode 100644 index 0000000..a712843 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/atom_test.go @@ -0,0 +1,56 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xml + +import "time" + +var atomValue = &Feed{ + XMLName: Name{"http://www.w3.org/2005/Atom", "feed"}, + Title: "Example Feed", + Link: []Link{{Href: "http://example.org/"}}, + Updated: ParseTime("2003-12-13T18:30:02Z"), + Author: Person{Name: "John Doe"}, + Id: "urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6", + + Entry: []Entry{ + { + Title: "Atom-Powered Robots Run Amok", + Link: []Link{{Href: "http://example.org/2003/12/13/atom03"}}, + Id: "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a", + Updated: ParseTime("2003-12-13T18:30:02Z"), + Summary: NewText("Some text."), + }, + }, +} + +var atomXml = `` + + `` + + `Example Feed` + + `urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6` + + `` + + `John Doe` + + `` + + `Atom-Powered Robots Run Amok` + + `urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a` + + `` + + `2003-12-13T18:30:02Z` + + `` + + `Some text.` + + `` + + `` + +func ParseTime(str string) time.Time { + t, err := time.Parse(time.RFC3339, str) + if err != nil { + panic(err) + } + return t +} + +func NewText(text string) Text { + return Text{ + Body: text, + } +} diff --git a/vendor/golang.org/x/net/webdav/internal/xml/example_test.go b/vendor/golang.org/x/net/webdav/internal/xml/example_test.go new file mode 100644 index 0000000..21b48de --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/example_test.go @@ -0,0 +1,151 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xml_test + +import ( + "encoding/xml" + "fmt" + "os" +) + +func ExampleMarshalIndent() { + type Address struct { + City, State string + } + type Person struct { + XMLName xml.Name `xml:"person"` + Id int `xml:"id,attr"` + FirstName string `xml:"name>first"` + LastName string `xml:"name>last"` + Age int `xml:"age"` + Height float32 `xml:"height,omitempty"` + Married bool + Address + Comment string `xml:",comment"` + } + + v := &Person{Id: 13, FirstName: "John", LastName: "Doe", Age: 42} + v.Comment = " Need more details. " + v.Address = Address{"Hanga Roa", "Easter Island"} + + output, err := xml.MarshalIndent(v, " ", " ") + if err != nil { + fmt.Printf("error: %v\n", err) + } + + os.Stdout.Write(output) + // Output: + // + // + // John + // Doe + // + // 42 + // false + // Hanga Roa + // Easter Island + // + // +} + +func ExampleEncoder() { + type Address struct { + City, State string + } + type Person struct { + XMLName xml.Name `xml:"person"` + Id int `xml:"id,attr"` + FirstName string `xml:"name>first"` + LastName string `xml:"name>last"` + Age int `xml:"age"` + Height float32 `xml:"height,omitempty"` + Married bool + Address + Comment string `xml:",comment"` + } + + v := &Person{Id: 13, FirstName: "John", LastName: "Doe", Age: 42} + v.Comment = " Need more details. " + v.Address = Address{"Hanga Roa", "Easter Island"} + + enc := xml.NewEncoder(os.Stdout) + enc.Indent(" ", " ") + if err := enc.Encode(v); err != nil { + fmt.Printf("error: %v\n", err) + } + + // Output: + // + // + // John + // Doe + // + // 42 + // false + // Hanga Roa + // Easter Island + // + // +} + +// This example demonstrates unmarshaling an XML excerpt into a value with +// some preset fields. Note that the Phone field isn't modified and that +// the XML element is ignored. Also, the Groups field is assigned +// considering the element path provided in its tag. +func ExampleUnmarshal() { + type Email struct { + Where string `xml:"where,attr"` + Addr string + } + type Address struct { + City, State string + } + type Result struct { + XMLName xml.Name `xml:"Person"` + Name string `xml:"FullName"` + Phone string + Email []Email + Groups []string `xml:"Group>Value"` + Address + } + v := Result{Name: "none", Phone: "none"} + + data := ` + + Grace R. Emlin + Example Inc. + + gre@example.com + + + gre@work.com + + + Friends + Squash + + Hanga Roa + Easter Island + + ` + err := xml.Unmarshal([]byte(data), &v) + if err != nil { + fmt.Printf("error: %v", err) + return + } + fmt.Printf("XMLName: %#v\n", v.XMLName) + fmt.Printf("Name: %q\n", v.Name) + fmt.Printf("Phone: %q\n", v.Phone) + fmt.Printf("Email: %v\n", v.Email) + fmt.Printf("Groups: %v\n", v.Groups) + fmt.Printf("Address: %v\n", v.Address) + // Output: + // XMLName: xml.Name{Space:"", Local:"Person"} + // Name: "Grace R. Emlin" + // Phone: "none" + // Email: [{home gre@example.com} {work gre@work.com}] + // Groups: [Friends Squash] + // Address: {Hanga Roa Easter Island} +} diff --git a/vendor/golang.org/x/net/webdav/internal/xml/marshal.go b/vendor/golang.org/x/net/webdav/internal/xml/marshal.go new file mode 100644 index 0000000..cb82ec2 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/marshal.go @@ -0,0 +1,1223 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xml + +import ( + "bufio" + "bytes" + "encoding" + "fmt" + "io" + "reflect" + "strconv" + "strings" +) + +const ( + // A generic XML header suitable for use with the output of Marshal. + // This is not automatically added to any output of this package, + // it is provided as a convenience. + Header = `` + "\n" +) + +// Marshal returns the XML encoding of v. +// +// Marshal handles an array or slice by marshalling each of the elements. +// Marshal handles a pointer by marshalling the value it points at or, if the +// pointer is nil, by writing nothing. Marshal handles an interface value by +// marshalling the value it contains or, if the interface value is nil, by +// writing nothing. Marshal handles all other data by writing one or more XML +// elements containing the data. +// +// The name for the XML elements is taken from, in order of preference: +// - the tag on the XMLName field, if the data is a struct +// - the value of the XMLName field of type xml.Name +// - the tag of the struct field used to obtain the data +// - the name of the struct field used to obtain the data +// - the name of the marshalled type +// +// The XML element for a struct contains marshalled elements for each of the +// exported fields of the struct, with these exceptions: +// - the XMLName field, described above, is omitted. +// - a field with tag "-" is omitted. +// - a field with tag "name,attr" becomes an attribute with +// the given name in the XML element. +// - a field with tag ",attr" becomes an attribute with the +// field name in the XML element. +// - a field with tag ",chardata" is written as character data, +// not as an XML element. +// - a field with tag ",innerxml" is written verbatim, not subject +// to the usual marshalling procedure. +// - a field with tag ",comment" is written as an XML comment, not +// subject to the usual marshalling procedure. It must not contain +// the "--" string within it. +// - a field with a tag including the "omitempty" option is omitted +// if the field value is empty. The empty values are false, 0, any +// nil pointer or interface value, and any array, slice, map, or +// string of length zero. +// - an anonymous struct field is handled as if the fields of its +// value were part of the outer struct. +// +// If a field uses a tag "a>b>c", then the element c will be nested inside +// parent elements a and b. Fields that appear next to each other that name +// the same parent will be enclosed in one XML element. +// +// See MarshalIndent for an example. +// +// Marshal will return an error if asked to marshal a channel, function, or map. +func Marshal(v interface{}) ([]byte, error) { + var b bytes.Buffer + if err := NewEncoder(&b).Encode(v); err != nil { + return nil, err + } + return b.Bytes(), nil +} + +// Marshaler is the interface implemented by objects that can marshal +// themselves into valid XML elements. +// +// MarshalXML encodes the receiver as zero or more XML elements. +// By convention, arrays or slices are typically encoded as a sequence +// of elements, one per entry. +// Using start as the element tag is not required, but doing so +// will enable Unmarshal to match the XML elements to the correct +// struct field. +// One common implementation strategy is to construct a separate +// value with a layout corresponding to the desired XML and then +// to encode it using e.EncodeElement. +// Another common strategy is to use repeated calls to e.EncodeToken +// to generate the XML output one token at a time. +// The sequence of encoded tokens must make up zero or more valid +// XML elements. +type Marshaler interface { + MarshalXML(e *Encoder, start StartElement) error +} + +// MarshalerAttr is the interface implemented by objects that can marshal +// themselves into valid XML attributes. +// +// MarshalXMLAttr returns an XML attribute with the encoded value of the receiver. +// Using name as the attribute name is not required, but doing so +// will enable Unmarshal to match the attribute to the correct +// struct field. +// If MarshalXMLAttr returns the zero attribute Attr{}, no attribute +// will be generated in the output. +// MarshalXMLAttr is used only for struct fields with the +// "attr" option in the field tag. +type MarshalerAttr interface { + MarshalXMLAttr(name Name) (Attr, error) +} + +// MarshalIndent works like Marshal, but each XML element begins on a new +// indented line that starts with prefix and is followed by one or more +// copies of indent according to the nesting depth. +func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { + var b bytes.Buffer + enc := NewEncoder(&b) + enc.Indent(prefix, indent) + if err := enc.Encode(v); err != nil { + return nil, err + } + return b.Bytes(), nil +} + +// An Encoder writes XML data to an output stream. +type Encoder struct { + p printer +} + +// NewEncoder returns a new encoder that writes to w. +func NewEncoder(w io.Writer) *Encoder { + e := &Encoder{printer{Writer: bufio.NewWriter(w)}} + e.p.encoder = e + return e +} + +// Indent sets the encoder to generate XML in which each element +// begins on a new indented line that starts with prefix and is followed by +// one or more copies of indent according to the nesting depth. +func (enc *Encoder) Indent(prefix, indent string) { + enc.p.prefix = prefix + enc.p.indent = indent +} + +// Encode writes the XML encoding of v to the stream. +// +// See the documentation for Marshal for details about the conversion +// of Go values to XML. +// +// Encode calls Flush before returning. +func (enc *Encoder) Encode(v interface{}) error { + err := enc.p.marshalValue(reflect.ValueOf(v), nil, nil) + if err != nil { + return err + } + return enc.p.Flush() +} + +// EncodeElement writes the XML encoding of v to the stream, +// using start as the outermost tag in the encoding. +// +// See the documentation for Marshal for details about the conversion +// of Go values to XML. +// +// EncodeElement calls Flush before returning. +func (enc *Encoder) EncodeElement(v interface{}, start StartElement) error { + err := enc.p.marshalValue(reflect.ValueOf(v), nil, &start) + if err != nil { + return err + } + return enc.p.Flush() +} + +var ( + begComment = []byte("") + endProcInst = []byte("?>") + endDirective = []byte(">") +) + +// EncodeToken writes the given XML token to the stream. +// It returns an error if StartElement and EndElement tokens are not +// properly matched. +// +// EncodeToken does not call Flush, because usually it is part of a +// larger operation such as Encode or EncodeElement (or a custom +// Marshaler's MarshalXML invoked during those), and those will call +// Flush when finished. Callers that create an Encoder and then invoke +// EncodeToken directly, without using Encode or EncodeElement, need to +// call Flush when finished to ensure that the XML is written to the +// underlying writer. +// +// EncodeToken allows writing a ProcInst with Target set to "xml" only +// as the first token in the stream. +// +// When encoding a StartElement holding an XML namespace prefix +// declaration for a prefix that is not already declared, contained +// elements (including the StartElement itself) will use the declared +// prefix when encoding names with matching namespace URIs. +func (enc *Encoder) EncodeToken(t Token) error { + + p := &enc.p + switch t := t.(type) { + case StartElement: + if err := p.writeStart(&t); err != nil { + return err + } + case EndElement: + if err := p.writeEnd(t.Name); err != nil { + return err + } + case CharData: + escapeText(p, t, false) + case Comment: + if bytes.Contains(t, endComment) { + return fmt.Errorf("xml: EncodeToken of Comment containing --> marker") + } + p.WriteString("") + return p.cachedWriteError() + case ProcInst: + // First token to be encoded which is also a ProcInst with target of xml + // is the xml declaration. The only ProcInst where target of xml is allowed. + if t.Target == "xml" && p.Buffered() != 0 { + return fmt.Errorf("xml: EncodeToken of ProcInst xml target only valid for xml declaration, first token encoded") + } + if !isNameString(t.Target) { + return fmt.Errorf("xml: EncodeToken of ProcInst with invalid Target") + } + if bytes.Contains(t.Inst, endProcInst) { + return fmt.Errorf("xml: EncodeToken of ProcInst containing ?> marker") + } + p.WriteString(" 0 { + p.WriteByte(' ') + p.Write(t.Inst) + } + p.WriteString("?>") + case Directive: + if !isValidDirective(t) { + return fmt.Errorf("xml: EncodeToken of Directive containing wrong < or > markers") + } + p.WriteString("") + default: + return fmt.Errorf("xml: EncodeToken of invalid token type") + + } + return p.cachedWriteError() +} + +// isValidDirective reports whether dir is a valid directive text, +// meaning angle brackets are matched, ignoring comments and strings. +func isValidDirective(dir Directive) bool { + var ( + depth int + inquote uint8 + incomment bool + ) + for i, c := range dir { + switch { + case incomment: + if c == '>' { + if n := 1 + i - len(endComment); n >= 0 && bytes.Equal(dir[n:i+1], endComment) { + incomment = false + } + } + // Just ignore anything in comment + case inquote != 0: + if c == inquote { + inquote = 0 + } + // Just ignore anything within quotes + case c == '\'' || c == '"': + inquote = c + case c == '<': + if i+len(begComment) < len(dir) && bytes.Equal(dir[i:i+len(begComment)], begComment) { + incomment = true + } else { + depth++ + } + case c == '>': + if depth == 0 { + return false + } + depth-- + } + } + return depth == 0 && inquote == 0 && !incomment +} + +// Flush flushes any buffered XML to the underlying writer. +// See the EncodeToken documentation for details about when it is necessary. +func (enc *Encoder) Flush() error { + return enc.p.Flush() +} + +type printer struct { + *bufio.Writer + encoder *Encoder + seq int + indent string + prefix string + depth int + indentedIn bool + putNewline bool + defaultNS string + attrNS map[string]string // map prefix -> name space + attrPrefix map[string]string // map name space -> prefix + prefixes []printerPrefix + tags []Name +} + +// printerPrefix holds a namespace undo record. +// When an element is popped, the prefix record +// is set back to the recorded URL. The empty +// prefix records the URL for the default name space. +// +// The start of an element is recorded with an element +// that has mark=true. +type printerPrefix struct { + prefix string + url string + mark bool +} + +func (p *printer) prefixForNS(url string, isAttr bool) string { + // The "http://www.w3.org/XML/1998/namespace" name space is predefined as "xml" + // and must be referred to that way. + // (The "http://www.w3.org/2000/xmlns/" name space is also predefined as "xmlns", + // but users should not be trying to use that one directly - that's our job.) + if url == xmlURL { + return "xml" + } + if !isAttr && url == p.defaultNS { + // We can use the default name space. + return "" + } + return p.attrPrefix[url] +} + +// defineNS pushes any namespace definition found in the given attribute. +// If ignoreNonEmptyDefault is true, an xmlns="nonempty" +// attribute will be ignored. +func (p *printer) defineNS(attr Attr, ignoreNonEmptyDefault bool) error { + var prefix string + if attr.Name.Local == "xmlns" { + if attr.Name.Space != "" && attr.Name.Space != "xml" && attr.Name.Space != xmlURL { + return fmt.Errorf("xml: cannot redefine xmlns attribute prefix") + } + } else if attr.Name.Space == "xmlns" && attr.Name.Local != "" { + prefix = attr.Name.Local + if attr.Value == "" { + // Technically, an empty XML namespace is allowed for an attribute. + // From http://www.w3.org/TR/xml-names11/#scoping-defaulting: + // + // The attribute value in a namespace declaration for a prefix may be + // empty. This has the effect, within the scope of the declaration, of removing + // any association of the prefix with a namespace name. + // + // However our namespace prefixes here are used only as hints. There's + // no need to respect the removal of a namespace prefix, so we ignore it. + return nil + } + } else { + // Ignore: it's not a namespace definition + return nil + } + if prefix == "" { + if attr.Value == p.defaultNS { + // No need for redefinition. + return nil + } + if attr.Value != "" && ignoreNonEmptyDefault { + // We have an xmlns="..." value but + // it can't define a name space in this context, + // probably because the element has an empty + // name space. In this case, we just ignore + // the name space declaration. + return nil + } + } else if _, ok := p.attrPrefix[attr.Value]; ok { + // There's already a prefix for the given name space, + // so use that. This prevents us from + // having two prefixes for the same name space + // so attrNS and attrPrefix can remain bijective. + return nil + } + p.pushPrefix(prefix, attr.Value) + return nil +} + +// createNSPrefix creates a name space prefix attribute +// to use for the given name space, defining a new prefix +// if necessary. +// If isAttr is true, the prefix is to be created for an attribute +// prefix, which means that the default name space cannot +// be used. +func (p *printer) createNSPrefix(url string, isAttr bool) { + if _, ok := p.attrPrefix[url]; ok { + // We already have a prefix for the given URL. + return + } + switch { + case !isAttr && url == p.defaultNS: + // We can use the default name space. + return + case url == "": + // The only way we can encode names in the empty + // name space is by using the default name space, + // so we must use that. + if p.defaultNS != "" { + // The default namespace is non-empty, so we + // need to set it to empty. + p.pushPrefix("", "") + } + return + case url == xmlURL: + return + } + // TODO If the URL is an existing prefix, we could + // use it as is. That would enable the + // marshaling of elements that had been unmarshaled + // and with a name space prefix that was not found. + // although technically it would be incorrect. + + // Pick a name. We try to use the final element of the path + // but fall back to _. + prefix := strings.TrimRight(url, "/") + if i := strings.LastIndex(prefix, "/"); i >= 0 { + prefix = prefix[i+1:] + } + if prefix == "" || !isName([]byte(prefix)) || strings.Contains(prefix, ":") { + prefix = "_" + } + if strings.HasPrefix(prefix, "xml") { + // xmlanything is reserved. + prefix = "_" + prefix + } + if p.attrNS[prefix] != "" { + // Name is taken. Find a better one. + for p.seq++; ; p.seq++ { + if id := prefix + "_" + strconv.Itoa(p.seq); p.attrNS[id] == "" { + prefix = id + break + } + } + } + + p.pushPrefix(prefix, url) +} + +// writeNamespaces writes xmlns attributes for all the +// namespace prefixes that have been defined in +// the current element. +func (p *printer) writeNamespaces() { + for i := len(p.prefixes) - 1; i >= 0; i-- { + prefix := p.prefixes[i] + if prefix.mark { + return + } + p.WriteString(" ") + if prefix.prefix == "" { + // Default name space. + p.WriteString(`xmlns="`) + } else { + p.WriteString("xmlns:") + p.WriteString(prefix.prefix) + p.WriteString(`="`) + } + EscapeText(p, []byte(p.nsForPrefix(prefix.prefix))) + p.WriteString(`"`) + } +} + +// pushPrefix pushes a new prefix on the prefix stack +// without checking to see if it is already defined. +func (p *printer) pushPrefix(prefix, url string) { + p.prefixes = append(p.prefixes, printerPrefix{ + prefix: prefix, + url: p.nsForPrefix(prefix), + }) + p.setAttrPrefix(prefix, url) +} + +// nsForPrefix returns the name space for the given +// prefix. Note that this is not valid for the +// empty attribute prefix, which always has an empty +// name space. +func (p *printer) nsForPrefix(prefix string) string { + if prefix == "" { + return p.defaultNS + } + return p.attrNS[prefix] +} + +// markPrefix marks the start of an element on the prefix +// stack. +func (p *printer) markPrefix() { + p.prefixes = append(p.prefixes, printerPrefix{ + mark: true, + }) +} + +// popPrefix pops all defined prefixes for the current +// element. +func (p *printer) popPrefix() { + for len(p.prefixes) > 0 { + prefix := p.prefixes[len(p.prefixes)-1] + p.prefixes = p.prefixes[:len(p.prefixes)-1] + if prefix.mark { + break + } + p.setAttrPrefix(prefix.prefix, prefix.url) + } +} + +// setAttrPrefix sets an attribute name space prefix. +// If url is empty, the attribute is removed. +// If prefix is empty, the default name space is set. +func (p *printer) setAttrPrefix(prefix, url string) { + if prefix == "" { + p.defaultNS = url + return + } + if url == "" { + delete(p.attrPrefix, p.attrNS[prefix]) + delete(p.attrNS, prefix) + return + } + if p.attrPrefix == nil { + // Need to define a new name space. + p.attrPrefix = make(map[string]string) + p.attrNS = make(map[string]string) + } + // Remove any old prefix value. This is OK because we maintain a + // strict one-to-one mapping between prefix and URL (see + // defineNS) + delete(p.attrPrefix, p.attrNS[prefix]) + p.attrPrefix[url] = prefix + p.attrNS[prefix] = url +} + +var ( + marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() + marshalerAttrType = reflect.TypeOf((*MarshalerAttr)(nil)).Elem() + textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() +) + +// marshalValue writes one or more XML elements representing val. +// If val was obtained from a struct field, finfo must have its details. +func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo, startTemplate *StartElement) error { + if startTemplate != nil && startTemplate.Name.Local == "" { + return fmt.Errorf("xml: EncodeElement of StartElement with missing name") + } + + if !val.IsValid() { + return nil + } + if finfo != nil && finfo.flags&fOmitEmpty != 0 && isEmptyValue(val) { + return nil + } + + // Drill into interfaces and pointers. + // This can turn into an infinite loop given a cyclic chain, + // but it matches the Go 1 behavior. + for val.Kind() == reflect.Interface || val.Kind() == reflect.Ptr { + if val.IsNil() { + return nil + } + val = val.Elem() + } + + kind := val.Kind() + typ := val.Type() + + // Check for marshaler. + if val.CanInterface() && typ.Implements(marshalerType) { + return p.marshalInterface(val.Interface().(Marshaler), p.defaultStart(typ, finfo, startTemplate)) + } + if val.CanAddr() { + pv := val.Addr() + if pv.CanInterface() && pv.Type().Implements(marshalerType) { + return p.marshalInterface(pv.Interface().(Marshaler), p.defaultStart(pv.Type(), finfo, startTemplate)) + } + } + + // Check for text marshaler. + if val.CanInterface() && typ.Implements(textMarshalerType) { + return p.marshalTextInterface(val.Interface().(encoding.TextMarshaler), p.defaultStart(typ, finfo, startTemplate)) + } + if val.CanAddr() { + pv := val.Addr() + if pv.CanInterface() && pv.Type().Implements(textMarshalerType) { + return p.marshalTextInterface(pv.Interface().(encoding.TextMarshaler), p.defaultStart(pv.Type(), finfo, startTemplate)) + } + } + + // Slices and arrays iterate over the elements. They do not have an enclosing tag. + if (kind == reflect.Slice || kind == reflect.Array) && typ.Elem().Kind() != reflect.Uint8 { + for i, n := 0, val.Len(); i < n; i++ { + if err := p.marshalValue(val.Index(i), finfo, startTemplate); err != nil { + return err + } + } + return nil + } + + tinfo, err := getTypeInfo(typ) + if err != nil { + return err + } + + // Create start element. + // Precedence for the XML element name is: + // 0. startTemplate + // 1. XMLName field in underlying struct; + // 2. field name/tag in the struct field; and + // 3. type name + var start StartElement + + // explicitNS records whether the element's name space has been + // explicitly set (for example an XMLName field). + explicitNS := false + + if startTemplate != nil { + start.Name = startTemplate.Name + explicitNS = true + start.Attr = append(start.Attr, startTemplate.Attr...) + } else if tinfo.xmlname != nil { + xmlname := tinfo.xmlname + if xmlname.name != "" { + start.Name.Space, start.Name.Local = xmlname.xmlns, xmlname.name + } else if v, ok := xmlname.value(val).Interface().(Name); ok && v.Local != "" { + start.Name = v + } + explicitNS = true + } + if start.Name.Local == "" && finfo != nil { + start.Name.Local = finfo.name + if finfo.xmlns != "" { + start.Name.Space = finfo.xmlns + explicitNS = true + } + } + if start.Name.Local == "" { + name := typ.Name() + if name == "" { + return &UnsupportedTypeError{typ} + } + start.Name.Local = name + } + + // defaultNS records the default name space as set by a xmlns="..." + // attribute. We don't set p.defaultNS because we want to let + // the attribute writing code (in p.defineNS) be solely responsible + // for maintaining that. + defaultNS := p.defaultNS + + // Attributes + for i := range tinfo.fields { + finfo := &tinfo.fields[i] + if finfo.flags&fAttr == 0 { + continue + } + attr, err := p.fieldAttr(finfo, val) + if err != nil { + return err + } + if attr.Name.Local == "" { + continue + } + start.Attr = append(start.Attr, attr) + if attr.Name.Space == "" && attr.Name.Local == "xmlns" { + defaultNS = attr.Value + } + } + if !explicitNS { + // Historic behavior: elements use the default name space + // they are contained in by default. + start.Name.Space = defaultNS + } + // Historic behaviour: an element that's in a namespace sets + // the default namespace for all elements contained within it. + start.setDefaultNamespace() + + if err := p.writeStart(&start); err != nil { + return err + } + + if val.Kind() == reflect.Struct { + err = p.marshalStruct(tinfo, val) + } else { + s, b, err1 := p.marshalSimple(typ, val) + if err1 != nil { + err = err1 + } else if b != nil { + EscapeText(p, b) + } else { + p.EscapeString(s) + } + } + if err != nil { + return err + } + + if err := p.writeEnd(start.Name); err != nil { + return err + } + + return p.cachedWriteError() +} + +// fieldAttr returns the attribute of the given field. +// If the returned attribute has an empty Name.Local, +// it should not be used. +// The given value holds the value containing the field. +func (p *printer) fieldAttr(finfo *fieldInfo, val reflect.Value) (Attr, error) { + fv := finfo.value(val) + name := Name{Space: finfo.xmlns, Local: finfo.name} + if finfo.flags&fOmitEmpty != 0 && isEmptyValue(fv) { + return Attr{}, nil + } + if fv.Kind() == reflect.Interface && fv.IsNil() { + return Attr{}, nil + } + if fv.CanInterface() && fv.Type().Implements(marshalerAttrType) { + attr, err := fv.Interface().(MarshalerAttr).MarshalXMLAttr(name) + return attr, err + } + if fv.CanAddr() { + pv := fv.Addr() + if pv.CanInterface() && pv.Type().Implements(marshalerAttrType) { + attr, err := pv.Interface().(MarshalerAttr).MarshalXMLAttr(name) + return attr, err + } + } + if fv.CanInterface() && fv.Type().Implements(textMarshalerType) { + text, err := fv.Interface().(encoding.TextMarshaler).MarshalText() + if err != nil { + return Attr{}, err + } + return Attr{name, string(text)}, nil + } + if fv.CanAddr() { + pv := fv.Addr() + if pv.CanInterface() && pv.Type().Implements(textMarshalerType) { + text, err := pv.Interface().(encoding.TextMarshaler).MarshalText() + if err != nil { + return Attr{}, err + } + return Attr{name, string(text)}, nil + } + } + // Dereference or skip nil pointer, interface values. + switch fv.Kind() { + case reflect.Ptr, reflect.Interface: + if fv.IsNil() { + return Attr{}, nil + } + fv = fv.Elem() + } + s, b, err := p.marshalSimple(fv.Type(), fv) + if err != nil { + return Attr{}, err + } + if b != nil { + s = string(b) + } + return Attr{name, s}, nil +} + +// defaultStart returns the default start element to use, +// given the reflect type, field info, and start template. +func (p *printer) defaultStart(typ reflect.Type, finfo *fieldInfo, startTemplate *StartElement) StartElement { + var start StartElement + // Precedence for the XML element name is as above, + // except that we do not look inside structs for the first field. + if startTemplate != nil { + start.Name = startTemplate.Name + start.Attr = append(start.Attr, startTemplate.Attr...) + } else if finfo != nil && finfo.name != "" { + start.Name.Local = finfo.name + start.Name.Space = finfo.xmlns + } else if typ.Name() != "" { + start.Name.Local = typ.Name() + } else { + // Must be a pointer to a named type, + // since it has the Marshaler methods. + start.Name.Local = typ.Elem().Name() + } + // Historic behaviour: elements use the name space of + // the element they are contained in by default. + if start.Name.Space == "" { + start.Name.Space = p.defaultNS + } + start.setDefaultNamespace() + return start +} + +// marshalInterface marshals a Marshaler interface value. +func (p *printer) marshalInterface(val Marshaler, start StartElement) error { + // Push a marker onto the tag stack so that MarshalXML + // cannot close the XML tags that it did not open. + p.tags = append(p.tags, Name{}) + n := len(p.tags) + + err := val.MarshalXML(p.encoder, start) + if err != nil { + return err + } + + // Make sure MarshalXML closed all its tags. p.tags[n-1] is the mark. + if len(p.tags) > n { + return fmt.Errorf("xml: %s.MarshalXML wrote invalid XML: <%s> not closed", receiverType(val), p.tags[len(p.tags)-1].Local) + } + p.tags = p.tags[:n-1] + return nil +} + +// marshalTextInterface marshals a TextMarshaler interface value. +func (p *printer) marshalTextInterface(val encoding.TextMarshaler, start StartElement) error { + if err := p.writeStart(&start); err != nil { + return err + } + text, err := val.MarshalText() + if err != nil { + return err + } + EscapeText(p, text) + return p.writeEnd(start.Name) +} + +// writeStart writes the given start element. +func (p *printer) writeStart(start *StartElement) error { + if start.Name.Local == "" { + return fmt.Errorf("xml: start tag with no name") + } + + p.tags = append(p.tags, start.Name) + p.markPrefix() + // Define any name spaces explicitly declared in the attributes. + // We do this as a separate pass so that explicitly declared prefixes + // will take precedence over implicitly declared prefixes + // regardless of the order of the attributes. + ignoreNonEmptyDefault := start.Name.Space == "" + for _, attr := range start.Attr { + if err := p.defineNS(attr, ignoreNonEmptyDefault); err != nil { + return err + } + } + // Define any new name spaces implied by the attributes. + for _, attr := range start.Attr { + name := attr.Name + // From http://www.w3.org/TR/xml-names11/#defaulting + // "Default namespace declarations do not apply directly + // to attribute names; the interpretation of unprefixed + // attributes is determined by the element on which they + // appear." + // This means we don't need to create a new namespace + // when an attribute name space is empty. + if name.Space != "" && !name.isNamespace() { + p.createNSPrefix(name.Space, true) + } + } + p.createNSPrefix(start.Name.Space, false) + + p.writeIndent(1) + p.WriteByte('<') + p.writeName(start.Name, false) + p.writeNamespaces() + for _, attr := range start.Attr { + name := attr.Name + if name.Local == "" || name.isNamespace() { + // Namespaces have already been written by writeNamespaces above. + continue + } + p.WriteByte(' ') + p.writeName(name, true) + p.WriteString(`="`) + p.EscapeString(attr.Value) + p.WriteByte('"') + } + p.WriteByte('>') + return nil +} + +// writeName writes the given name. It assumes +// that p.createNSPrefix(name) has already been called. +func (p *printer) writeName(name Name, isAttr bool) { + if prefix := p.prefixForNS(name.Space, isAttr); prefix != "" { + p.WriteString(prefix) + p.WriteByte(':') + } + p.WriteString(name.Local) +} + +func (p *printer) writeEnd(name Name) error { + if name.Local == "" { + return fmt.Errorf("xml: end tag with no name") + } + if len(p.tags) == 0 || p.tags[len(p.tags)-1].Local == "" { + return fmt.Errorf("xml: end tag without start tag", name.Local) + } + if top := p.tags[len(p.tags)-1]; top != name { + if top.Local != name.Local { + return fmt.Errorf("xml: end tag does not match start tag <%s>", name.Local, top.Local) + } + return fmt.Errorf("xml: end tag in namespace %s does not match start tag <%s> in namespace %s", name.Local, name.Space, top.Local, top.Space) + } + p.tags = p.tags[:len(p.tags)-1] + + p.writeIndent(-1) + p.WriteByte('<') + p.WriteByte('/') + p.writeName(name, false) + p.WriteByte('>') + p.popPrefix() + return nil +} + +func (p *printer) marshalSimple(typ reflect.Type, val reflect.Value) (string, []byte, error) { + switch val.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return strconv.FormatInt(val.Int(), 10), nil, nil + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return strconv.FormatUint(val.Uint(), 10), nil, nil + case reflect.Float32, reflect.Float64: + return strconv.FormatFloat(val.Float(), 'g', -1, val.Type().Bits()), nil, nil + case reflect.String: + return val.String(), nil, nil + case reflect.Bool: + return strconv.FormatBool(val.Bool()), nil, nil + case reflect.Array: + if typ.Elem().Kind() != reflect.Uint8 { + break + } + // [...]byte + var bytes []byte + if val.CanAddr() { + bytes = val.Slice(0, val.Len()).Bytes() + } else { + bytes = make([]byte, val.Len()) + reflect.Copy(reflect.ValueOf(bytes), val) + } + return "", bytes, nil + case reflect.Slice: + if typ.Elem().Kind() != reflect.Uint8 { + break + } + // []byte + return "", val.Bytes(), nil + } + return "", nil, &UnsupportedTypeError{typ} +} + +var ddBytes = []byte("--") + +func (p *printer) marshalStruct(tinfo *typeInfo, val reflect.Value) error { + s := parentStack{p: p} + for i := range tinfo.fields { + finfo := &tinfo.fields[i] + if finfo.flags&fAttr != 0 { + continue + } + vf := finfo.value(val) + + // Dereference or skip nil pointer, interface values. + switch vf.Kind() { + case reflect.Ptr, reflect.Interface: + if !vf.IsNil() { + vf = vf.Elem() + } + } + + switch finfo.flags & fMode { + case fCharData: + if err := s.setParents(&noField, reflect.Value{}); err != nil { + return err + } + if vf.CanInterface() && vf.Type().Implements(textMarshalerType) { + data, err := vf.Interface().(encoding.TextMarshaler).MarshalText() + if err != nil { + return err + } + Escape(p, data) + continue + } + if vf.CanAddr() { + pv := vf.Addr() + if pv.CanInterface() && pv.Type().Implements(textMarshalerType) { + data, err := pv.Interface().(encoding.TextMarshaler).MarshalText() + if err != nil { + return err + } + Escape(p, data) + continue + } + } + var scratch [64]byte + switch vf.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + Escape(p, strconv.AppendInt(scratch[:0], vf.Int(), 10)) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + Escape(p, strconv.AppendUint(scratch[:0], vf.Uint(), 10)) + case reflect.Float32, reflect.Float64: + Escape(p, strconv.AppendFloat(scratch[:0], vf.Float(), 'g', -1, vf.Type().Bits())) + case reflect.Bool: + Escape(p, strconv.AppendBool(scratch[:0], vf.Bool())) + case reflect.String: + if err := EscapeText(p, []byte(vf.String())); err != nil { + return err + } + case reflect.Slice: + if elem, ok := vf.Interface().([]byte); ok { + if err := EscapeText(p, elem); err != nil { + return err + } + } + } + continue + + case fComment: + if err := s.setParents(&noField, reflect.Value{}); err != nil { + return err + } + k := vf.Kind() + if !(k == reflect.String || k == reflect.Slice && vf.Type().Elem().Kind() == reflect.Uint8) { + return fmt.Errorf("xml: bad type for comment field of %s", val.Type()) + } + if vf.Len() == 0 { + continue + } + p.writeIndent(0) + p.WriteString("" is invalid grammar. Make it "- -->" + p.WriteByte(' ') + } + p.WriteString("-->") + continue + + case fInnerXml: + iface := vf.Interface() + switch raw := iface.(type) { + case []byte: + p.Write(raw) + continue + case string: + p.WriteString(raw) + continue + } + + case fElement, fElement | fAny: + if err := s.setParents(finfo, vf); err != nil { + return err + } + } + if err := p.marshalValue(vf, finfo, nil); err != nil { + return err + } + } + if err := s.setParents(&noField, reflect.Value{}); err != nil { + return err + } + return p.cachedWriteError() +} + +var noField fieldInfo + +// return the bufio Writer's cached write error +func (p *printer) cachedWriteError() error { + _, err := p.Write(nil) + return err +} + +func (p *printer) writeIndent(depthDelta int) { + if len(p.prefix) == 0 && len(p.indent) == 0 { + return + } + if depthDelta < 0 { + p.depth-- + if p.indentedIn { + p.indentedIn = false + return + } + p.indentedIn = false + } + if p.putNewline { + p.WriteByte('\n') + } else { + p.putNewline = true + } + if len(p.prefix) > 0 { + p.WriteString(p.prefix) + } + if len(p.indent) > 0 { + for i := 0; i < p.depth; i++ { + p.WriteString(p.indent) + } + } + if depthDelta > 0 { + p.depth++ + p.indentedIn = true + } +} + +type parentStack struct { + p *printer + xmlns string + parents []string +} + +// setParents sets the stack of current parents to those found in finfo. +// It only writes the start elements if vf holds a non-nil value. +// If finfo is &noField, it pops all elements. +func (s *parentStack) setParents(finfo *fieldInfo, vf reflect.Value) error { + xmlns := s.p.defaultNS + if finfo.xmlns != "" { + xmlns = finfo.xmlns + } + commonParents := 0 + if xmlns == s.xmlns { + for ; commonParents < len(finfo.parents) && commonParents < len(s.parents); commonParents++ { + if finfo.parents[commonParents] != s.parents[commonParents] { + break + } + } + } + // Pop off any parents that aren't in common with the previous field. + for i := len(s.parents) - 1; i >= commonParents; i-- { + if err := s.p.writeEnd(Name{ + Space: s.xmlns, + Local: s.parents[i], + }); err != nil { + return err + } + } + s.parents = finfo.parents + s.xmlns = xmlns + if commonParents >= len(s.parents) { + // No new elements to push. + return nil + } + if (vf.Kind() == reflect.Ptr || vf.Kind() == reflect.Interface) && vf.IsNil() { + // The element is nil, so no need for the start elements. + s.parents = s.parents[:commonParents] + return nil + } + // Push any new parents required. + for _, name := range s.parents[commonParents:] { + start := &StartElement{ + Name: Name{ + Space: s.xmlns, + Local: name, + }, + } + // Set the default name space for parent elements + // to match what we do with other elements. + if s.xmlns != s.p.defaultNS { + start.setDefaultNamespace() + } + if err := s.p.writeStart(start); err != nil { + return err + } + } + return nil +} + +// A MarshalXMLError is returned when Marshal encounters a type +// that cannot be converted into XML. +type UnsupportedTypeError struct { + Type reflect.Type +} + +func (e *UnsupportedTypeError) Error() string { + return "xml: unsupported type: " + e.Type.String() +} + +func isEmptyValue(v reflect.Value) bool { + switch v.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + return v.Len() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + } + return false +} diff --git a/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go b/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go new file mode 100644 index 0000000..226cfd0 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go @@ -0,0 +1,1939 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xml + +import ( + "bytes" + "errors" + "fmt" + "io" + "reflect" + "strconv" + "strings" + "sync" + "testing" + "time" +) + +type DriveType int + +const ( + HyperDrive DriveType = iota + ImprobabilityDrive +) + +type Passenger struct { + Name []string `xml:"name"` + Weight float32 `xml:"weight"` +} + +type Ship struct { + XMLName struct{} `xml:"spaceship"` + + Name string `xml:"name,attr"` + Pilot string `xml:"pilot,attr"` + Drive DriveType `xml:"drive"` + Age uint `xml:"age"` + Passenger []*Passenger `xml:"passenger"` + secret string +} + +type NamedType string + +type Port struct { + XMLName struct{} `xml:"port"` + Type string `xml:"type,attr,omitempty"` + Comment string `xml:",comment"` + Number string `xml:",chardata"` +} + +type Domain struct { + XMLName struct{} `xml:"domain"` + Country string `xml:",attr,omitempty"` + Name []byte `xml:",chardata"` + Comment []byte `xml:",comment"` +} + +type Book struct { + XMLName struct{} `xml:"book"` + Title string `xml:",chardata"` +} + +type Event struct { + XMLName struct{} `xml:"event"` + Year int `xml:",chardata"` +} + +type Movie struct { + XMLName struct{} `xml:"movie"` + Length uint `xml:",chardata"` +} + +type Pi struct { + XMLName struct{} `xml:"pi"` + Approximation float32 `xml:",chardata"` +} + +type Universe struct { + XMLName struct{} `xml:"universe"` + Visible float64 `xml:",chardata"` +} + +type Particle struct { + XMLName struct{} `xml:"particle"` + HasMass bool `xml:",chardata"` +} + +type Departure struct { + XMLName struct{} `xml:"departure"` + When time.Time `xml:",chardata"` +} + +type SecretAgent struct { + XMLName struct{} `xml:"agent"` + Handle string `xml:"handle,attr"` + Identity string + Obfuscate string `xml:",innerxml"` +} + +type NestedItems struct { + XMLName struct{} `xml:"result"` + Items []string `xml:">item"` + Item1 []string `xml:"Items>item1"` +} + +type NestedOrder struct { + XMLName struct{} `xml:"result"` + Field1 string `xml:"parent>c"` + Field2 string `xml:"parent>b"` + Field3 string `xml:"parent>a"` +} + +type MixedNested struct { + XMLName struct{} `xml:"result"` + A string `xml:"parent1>a"` + B string `xml:"b"` + C string `xml:"parent1>parent2>c"` + D string `xml:"parent1>d"` +} + +type NilTest struct { + A interface{} `xml:"parent1>parent2>a"` + B interface{} `xml:"parent1>b"` + C interface{} `xml:"parent1>parent2>c"` +} + +type Service struct { + XMLName struct{} `xml:"service"` + Domain *Domain `xml:"host>domain"` + Port *Port `xml:"host>port"` + Extra1 interface{} + Extra2 interface{} `xml:"host>extra2"` +} + +var nilStruct *Ship + +type EmbedA struct { + EmbedC + EmbedB EmbedB + FieldA string +} + +type EmbedB struct { + FieldB string + *EmbedC +} + +type EmbedC struct { + FieldA1 string `xml:"FieldA>A1"` + FieldA2 string `xml:"FieldA>A2"` + FieldB string + FieldC string +} + +type NameCasing struct { + XMLName struct{} `xml:"casing"` + Xy string + XY string + XyA string `xml:"Xy,attr"` + XYA string `xml:"XY,attr"` +} + +type NamePrecedence struct { + XMLName Name `xml:"Parent"` + FromTag XMLNameWithoutTag `xml:"InTag"` + FromNameVal XMLNameWithoutTag + FromNameTag XMLNameWithTag + InFieldName string +} + +type XMLNameWithTag struct { + XMLName Name `xml:"InXMLNameTag"` + Value string `xml:",chardata"` +} + +type XMLNameWithNSTag struct { + XMLName Name `xml:"ns InXMLNameWithNSTag"` + Value string `xml:",chardata"` +} + +type XMLNameWithoutTag struct { + XMLName Name + Value string `xml:",chardata"` +} + +type NameInField struct { + Foo Name `xml:"ns foo"` +} + +type AttrTest struct { + Int int `xml:",attr"` + Named int `xml:"int,attr"` + Float float64 `xml:",attr"` + Uint8 uint8 `xml:",attr"` + Bool bool `xml:",attr"` + Str string `xml:",attr"` + Bytes []byte `xml:",attr"` +} + +type OmitAttrTest struct { + Int int `xml:",attr,omitempty"` + Named int `xml:"int,attr,omitempty"` + Float float64 `xml:",attr,omitempty"` + Uint8 uint8 `xml:",attr,omitempty"` + Bool bool `xml:",attr,omitempty"` + Str string `xml:",attr,omitempty"` + Bytes []byte `xml:",attr,omitempty"` +} + +type OmitFieldTest struct { + Int int `xml:",omitempty"` + Named int `xml:"int,omitempty"` + Float float64 `xml:",omitempty"` + Uint8 uint8 `xml:",omitempty"` + Bool bool `xml:",omitempty"` + Str string `xml:",omitempty"` + Bytes []byte `xml:",omitempty"` + Ptr *PresenceTest `xml:",omitempty"` +} + +type AnyTest struct { + XMLName struct{} `xml:"a"` + Nested string `xml:"nested>value"` + AnyField AnyHolder `xml:",any"` +} + +type AnyOmitTest struct { + XMLName struct{} `xml:"a"` + Nested string `xml:"nested>value"` + AnyField *AnyHolder `xml:",any,omitempty"` +} + +type AnySliceTest struct { + XMLName struct{} `xml:"a"` + Nested string `xml:"nested>value"` + AnyField []AnyHolder `xml:",any"` +} + +type AnyHolder struct { + XMLName Name + XML string `xml:",innerxml"` +} + +type RecurseA struct { + A string + B *RecurseB +} + +type RecurseB struct { + A *RecurseA + B string +} + +type PresenceTest struct { + Exists *struct{} +} + +type IgnoreTest struct { + PublicSecret string `xml:"-"` +} + +type MyBytes []byte + +type Data struct { + Bytes []byte + Attr []byte `xml:",attr"` + Custom MyBytes +} + +type Plain struct { + V interface{} +} + +type MyInt int + +type EmbedInt struct { + MyInt +} + +type Strings struct { + X []string `xml:"A>B,omitempty"` +} + +type PointerFieldsTest struct { + XMLName Name `xml:"dummy"` + Name *string `xml:"name,attr"` + Age *uint `xml:"age,attr"` + Empty *string `xml:"empty,attr"` + Contents *string `xml:",chardata"` +} + +type ChardataEmptyTest struct { + XMLName Name `xml:"test"` + Contents *string `xml:",chardata"` +} + +type MyMarshalerTest struct { +} + +var _ Marshaler = (*MyMarshalerTest)(nil) + +func (m *MyMarshalerTest) MarshalXML(e *Encoder, start StartElement) error { + e.EncodeToken(start) + e.EncodeToken(CharData([]byte("hello world"))) + e.EncodeToken(EndElement{start.Name}) + return nil +} + +type MyMarshalerAttrTest struct{} + +var _ MarshalerAttr = (*MyMarshalerAttrTest)(nil) + +func (m *MyMarshalerAttrTest) MarshalXMLAttr(name Name) (Attr, error) { + return Attr{name, "hello world"}, nil +} + +type MyMarshalerValueAttrTest struct{} + +var _ MarshalerAttr = MyMarshalerValueAttrTest{} + +func (m MyMarshalerValueAttrTest) MarshalXMLAttr(name Name) (Attr, error) { + return Attr{name, "hello world"}, nil +} + +type MarshalerStruct struct { + Foo MyMarshalerAttrTest `xml:",attr"` +} + +type MarshalerValueStruct struct { + Foo MyMarshalerValueAttrTest `xml:",attr"` +} + +type InnerStruct struct { + XMLName Name `xml:"testns outer"` +} + +type OuterStruct struct { + InnerStruct + IntAttr int `xml:"int,attr"` +} + +type OuterNamedStruct struct { + InnerStruct + XMLName Name `xml:"outerns test"` + IntAttr int `xml:"int,attr"` +} + +type OuterNamedOrderedStruct struct { + XMLName Name `xml:"outerns test"` + InnerStruct + IntAttr int `xml:"int,attr"` +} + +type OuterOuterStruct struct { + OuterStruct +} + +type NestedAndChardata struct { + AB []string `xml:"A>B"` + Chardata string `xml:",chardata"` +} + +type NestedAndComment struct { + AB []string `xml:"A>B"` + Comment string `xml:",comment"` +} + +type XMLNSFieldStruct struct { + Ns string `xml:"xmlns,attr"` + Body string +} + +type NamedXMLNSFieldStruct struct { + XMLName struct{} `xml:"testns test"` + Ns string `xml:"xmlns,attr"` + Body string +} + +type XMLNSFieldStructWithOmitEmpty struct { + Ns string `xml:"xmlns,attr,omitempty"` + Body string +} + +type NamedXMLNSFieldStructWithEmptyNamespace struct { + XMLName struct{} `xml:"test"` + Ns string `xml:"xmlns,attr"` + Body string +} + +type RecursiveXMLNSFieldStruct struct { + Ns string `xml:"xmlns,attr"` + Body *RecursiveXMLNSFieldStruct `xml:",omitempty"` + Text string `xml:",omitempty"` +} + +func ifaceptr(x interface{}) interface{} { + return &x +} + +var ( + nameAttr = "Sarah" + ageAttr = uint(12) + contentsAttr = "lorem ipsum" +) + +// Unless explicitly stated as such (or *Plain), all of the +// tests below are two-way tests. When introducing new tests, +// please try to make them two-way as well to ensure that +// marshalling and unmarshalling are as symmetrical as feasible. +var marshalTests = []struct { + Value interface{} + ExpectXML string + MarshalOnly bool + UnmarshalOnly bool +}{ + // Test nil marshals to nothing + {Value: nil, ExpectXML: ``, MarshalOnly: true}, + {Value: nilStruct, ExpectXML: ``, MarshalOnly: true}, + + // Test value types + {Value: &Plain{true}, ExpectXML: `true`}, + {Value: &Plain{false}, ExpectXML: `false`}, + {Value: &Plain{int(42)}, ExpectXML: `42`}, + {Value: &Plain{int8(42)}, ExpectXML: `42`}, + {Value: &Plain{int16(42)}, ExpectXML: `42`}, + {Value: &Plain{int32(42)}, ExpectXML: `42`}, + {Value: &Plain{uint(42)}, ExpectXML: `42`}, + {Value: &Plain{uint8(42)}, ExpectXML: `42`}, + {Value: &Plain{uint16(42)}, ExpectXML: `42`}, + {Value: &Plain{uint32(42)}, ExpectXML: `42`}, + {Value: &Plain{float32(1.25)}, ExpectXML: `1.25`}, + {Value: &Plain{float64(1.25)}, ExpectXML: `1.25`}, + {Value: &Plain{uintptr(0xFFDD)}, ExpectXML: `65501`}, + {Value: &Plain{"gopher"}, ExpectXML: `gopher`}, + {Value: &Plain{[]byte("gopher")}, ExpectXML: `gopher`}, + {Value: &Plain{""}, ExpectXML: `</>`}, + {Value: &Plain{[]byte("")}, ExpectXML: `</>`}, + {Value: &Plain{[3]byte{'<', '/', '>'}}, ExpectXML: `</>`}, + {Value: &Plain{NamedType("potato")}, ExpectXML: `potato`}, + {Value: &Plain{[]int{1, 2, 3}}, ExpectXML: `123`}, + {Value: &Plain{[3]int{1, 2, 3}}, ExpectXML: `123`}, + {Value: ifaceptr(true), MarshalOnly: true, ExpectXML: `true`}, + + // Test time. + { + Value: &Plain{time.Unix(1e9, 123456789).UTC()}, + ExpectXML: `2001-09-09T01:46:40.123456789Z`, + }, + + // A pointer to struct{} may be used to test for an element's presence. + { + Value: &PresenceTest{new(struct{})}, + ExpectXML: ``, + }, + { + Value: &PresenceTest{}, + ExpectXML: ``, + }, + + // A pointer to struct{} may be used to test for an element's presence. + { + Value: &PresenceTest{new(struct{})}, + ExpectXML: ``, + }, + { + Value: &PresenceTest{}, + ExpectXML: ``, + }, + + // A []byte field is only nil if the element was not found. + { + Value: &Data{}, + ExpectXML: ``, + UnmarshalOnly: true, + }, + { + Value: &Data{Bytes: []byte{}, Custom: MyBytes{}, Attr: []byte{}}, + ExpectXML: ``, + UnmarshalOnly: true, + }, + + // Check that []byte works, including named []byte types. + { + Value: &Data{Bytes: []byte("ab"), Custom: MyBytes("cd"), Attr: []byte{'v'}}, + ExpectXML: `abcd`, + }, + + // Test innerxml + { + Value: &SecretAgent{ + Handle: "007", + Identity: "James Bond", + Obfuscate: "", + }, + ExpectXML: `James Bond`, + MarshalOnly: true, + }, + { + Value: &SecretAgent{ + Handle: "007", + Identity: "James Bond", + Obfuscate: "James Bond", + }, + ExpectXML: `James Bond`, + UnmarshalOnly: true, + }, + + // Test structs + {Value: &Port{Type: "ssl", Number: "443"}, ExpectXML: `443`}, + {Value: &Port{Number: "443"}, ExpectXML: `443`}, + {Value: &Port{Type: ""}, ExpectXML: ``}, + {Value: &Port{Number: "443", Comment: "https"}, ExpectXML: `443`}, + {Value: &Port{Number: "443", Comment: "add space-"}, ExpectXML: `443`, MarshalOnly: true}, + {Value: &Domain{Name: []byte("google.com&friends")}, ExpectXML: `google.com&friends`}, + {Value: &Domain{Name: []byte("google.com"), Comment: []byte(" &friends ")}, ExpectXML: `google.com`}, + {Value: &Book{Title: "Pride & Prejudice"}, ExpectXML: `Pride & Prejudice`}, + {Value: &Event{Year: -3114}, ExpectXML: `-3114`}, + {Value: &Movie{Length: 13440}, ExpectXML: `13440`}, + {Value: &Pi{Approximation: 3.14159265}, ExpectXML: `3.1415927`}, + {Value: &Universe{Visible: 9.3e13}, ExpectXML: `9.3e+13`}, + {Value: &Particle{HasMass: true}, ExpectXML: `true`}, + {Value: &Departure{When: ParseTime("2013-01-09T00:15:00-09:00")}, ExpectXML: `2013-01-09T00:15:00-09:00`}, + {Value: atomValue, ExpectXML: atomXml}, + { + Value: &Ship{ + Name: "Heart of Gold", + Pilot: "Computer", + Age: 1, + Drive: ImprobabilityDrive, + Passenger: []*Passenger{ + { + Name: []string{"Zaphod", "Beeblebrox"}, + Weight: 7.25, + }, + { + Name: []string{"Trisha", "McMillen"}, + Weight: 5.5, + }, + { + Name: []string{"Ford", "Prefect"}, + Weight: 7, + }, + { + Name: []string{"Arthur", "Dent"}, + Weight: 6.75, + }, + }, + }, + ExpectXML: `` + + `` + strconv.Itoa(int(ImprobabilityDrive)) + `` + + `1` + + `` + + `Zaphod` + + `Beeblebrox` + + `7.25` + + `` + + `` + + `Trisha` + + `McMillen` + + `5.5` + + `` + + `` + + `Ford` + + `Prefect` + + `7` + + `` + + `` + + `Arthur` + + `Dent` + + `6.75` + + `` + + ``, + }, + + // Test a>b + { + Value: &NestedItems{Items: nil, Item1: nil}, + ExpectXML: `` + + `` + + `` + + ``, + }, + { + Value: &NestedItems{Items: []string{}, Item1: []string{}}, + ExpectXML: `` + + `` + + `` + + ``, + MarshalOnly: true, + }, + { + Value: &NestedItems{Items: nil, Item1: []string{"A"}}, + ExpectXML: `` + + `` + + `A` + + `` + + ``, + }, + { + Value: &NestedItems{Items: []string{"A", "B"}, Item1: nil}, + ExpectXML: `` + + `` + + `A` + + `B` + + `` + + ``, + }, + { + Value: &NestedItems{Items: []string{"A", "B"}, Item1: []string{"C"}}, + ExpectXML: `` + + `` + + `A` + + `B` + + `C` + + `` + + ``, + }, + { + Value: &NestedOrder{Field1: "C", Field2: "B", Field3: "A"}, + ExpectXML: `` + + `` + + `C` + + `B` + + `A` + + `` + + ``, + }, + { + Value: &NilTest{A: "A", B: nil, C: "C"}, + ExpectXML: `` + + `` + + `A` + + `C` + + `` + + ``, + MarshalOnly: true, // Uses interface{} + }, + { + Value: &MixedNested{A: "A", B: "B", C: "C", D: "D"}, + ExpectXML: `` + + `A` + + `B` + + `` + + `C` + + `D` + + `` + + ``, + }, + { + Value: &Service{Port: &Port{Number: "80"}}, + ExpectXML: `80`, + }, + { + Value: &Service{}, + ExpectXML: ``, + }, + { + Value: &Service{Port: &Port{Number: "80"}, Extra1: "A", Extra2: "B"}, + ExpectXML: `` + + `80` + + `A` + + `B` + + ``, + MarshalOnly: true, + }, + { + Value: &Service{Port: &Port{Number: "80"}, Extra2: "example"}, + ExpectXML: `` + + `80` + + `example` + + ``, + MarshalOnly: true, + }, + { + Value: &struct { + XMLName struct{} `xml:"space top"` + A string `xml:"x>a"` + B string `xml:"x>b"` + C string `xml:"space x>c"` + C1 string `xml:"space1 x>c"` + D1 string `xml:"space1 x>d"` + E1 string `xml:"x>e"` + }{ + A: "a", + B: "b", + C: "c", + C1: "c1", + D1: "d1", + E1: "e1", + }, + ExpectXML: `` + + `abc` + + `` + + `c1` + + `d1` + + `` + + `` + + `e1` + + `` + + ``, + }, + { + Value: &struct { + XMLName Name + A string `xml:"x>a"` + B string `xml:"x>b"` + C string `xml:"space x>c"` + C1 string `xml:"space1 x>c"` + D1 string `xml:"space1 x>d"` + }{ + XMLName: Name{ + Space: "space0", + Local: "top", + }, + A: "a", + B: "b", + C: "c", + C1: "c1", + D1: "d1", + }, + ExpectXML: `` + + `ab` + + `c` + + `` + + `c1` + + `d1` + + `` + + ``, + }, + { + Value: &struct { + XMLName struct{} `xml:"top"` + B string `xml:"space x>b"` + B1 string `xml:"space1 x>b"` + }{ + B: "b", + B1: "b1", + }, + ExpectXML: `` + + `b` + + `b1` + + ``, + }, + + // Test struct embedding + { + Value: &EmbedA{ + EmbedC: EmbedC{ + FieldA1: "", // Shadowed by A.A + FieldA2: "", // Shadowed by A.A + FieldB: "A.C.B", + FieldC: "A.C.C", + }, + EmbedB: EmbedB{ + FieldB: "A.B.B", + EmbedC: &EmbedC{ + FieldA1: "A.B.C.A1", + FieldA2: "A.B.C.A2", + FieldB: "", // Shadowed by A.B.B + FieldC: "A.B.C.C", + }, + }, + FieldA: "A.A", + }, + ExpectXML: `` + + `A.C.B` + + `A.C.C` + + `` + + `A.B.B` + + `` + + `A.B.C.A1` + + `A.B.C.A2` + + `` + + `A.B.C.C` + + `` + + `A.A` + + ``, + }, + + // Test that name casing matters + { + Value: &NameCasing{Xy: "mixed", XY: "upper", XyA: "mixedA", XYA: "upperA"}, + ExpectXML: `mixedupper`, + }, + + // Test the order in which the XML element name is chosen + { + Value: &NamePrecedence{ + FromTag: XMLNameWithoutTag{Value: "A"}, + FromNameVal: XMLNameWithoutTag{XMLName: Name{Local: "InXMLName"}, Value: "B"}, + FromNameTag: XMLNameWithTag{Value: "C"}, + InFieldName: "D", + }, + ExpectXML: `` + + `A` + + `B` + + `C` + + `D` + + ``, + MarshalOnly: true, + }, + { + Value: &NamePrecedence{ + XMLName: Name{Local: "Parent"}, + FromTag: XMLNameWithoutTag{XMLName: Name{Local: "InTag"}, Value: "A"}, + FromNameVal: XMLNameWithoutTag{XMLName: Name{Local: "FromNameVal"}, Value: "B"}, + FromNameTag: XMLNameWithTag{XMLName: Name{Local: "InXMLNameTag"}, Value: "C"}, + InFieldName: "D", + }, + ExpectXML: `` + + `A` + + `B` + + `C` + + `D` + + ``, + UnmarshalOnly: true, + }, + + // xml.Name works in a plain field as well. + { + Value: &NameInField{Name{Space: "ns", Local: "foo"}}, + ExpectXML: ``, + }, + { + Value: &NameInField{Name{Space: "ns", Local: "foo"}}, + ExpectXML: ``, + UnmarshalOnly: true, + }, + + // Marshaling zero xml.Name uses the tag or field name. + { + Value: &NameInField{}, + ExpectXML: ``, + MarshalOnly: true, + }, + + // Test attributes + { + Value: &AttrTest{ + Int: 8, + Named: 9, + Float: 23.5, + Uint8: 255, + Bool: true, + Str: "str", + Bytes: []byte("byt"), + }, + ExpectXML: ``, + }, + { + Value: &AttrTest{Bytes: []byte{}}, + ExpectXML: ``, + }, + { + Value: &OmitAttrTest{ + Int: 8, + Named: 9, + Float: 23.5, + Uint8: 255, + Bool: true, + Str: "str", + Bytes: []byte("byt"), + }, + ExpectXML: ``, + }, + { + Value: &OmitAttrTest{}, + ExpectXML: ``, + }, + + // pointer fields + { + Value: &PointerFieldsTest{Name: &nameAttr, Age: &ageAttr, Contents: &contentsAttr}, + ExpectXML: `lorem ipsum`, + MarshalOnly: true, + }, + + // empty chardata pointer field + { + Value: &ChardataEmptyTest{}, + ExpectXML: ``, + MarshalOnly: true, + }, + + // omitempty on fields + { + Value: &OmitFieldTest{ + Int: 8, + Named: 9, + Float: 23.5, + Uint8: 255, + Bool: true, + Str: "str", + Bytes: []byte("byt"), + Ptr: &PresenceTest{}, + }, + ExpectXML: `` + + `8` + + `9` + + `23.5` + + `255` + + `true` + + `str` + + `byt` + + `` + + ``, + }, + { + Value: &OmitFieldTest{}, + ExpectXML: ``, + }, + + // Test ",any" + { + ExpectXML: `knownunknown`, + Value: &AnyTest{ + Nested: "known", + AnyField: AnyHolder{ + XMLName: Name{Local: "other"}, + XML: "unknown", + }, + }, + }, + { + Value: &AnyTest{Nested: "known", + AnyField: AnyHolder{ + XML: "", + XMLName: Name{Local: "AnyField"}, + }, + }, + ExpectXML: `known`, + }, + { + ExpectXML: `b`, + Value: &AnyOmitTest{ + Nested: "b", + }, + }, + { + ExpectXML: `bei`, + Value: &AnySliceTest{ + Nested: "b", + AnyField: []AnyHolder{ + { + XMLName: Name{Local: "c"}, + XML: "e", + }, + { + XMLName: Name{Space: "f", Local: "g"}, + XML: "i", + }, + }, + }, + }, + { + ExpectXML: `b`, + Value: &AnySliceTest{ + Nested: "b", + }, + }, + + // Test recursive types. + { + Value: &RecurseA{ + A: "a1", + B: &RecurseB{ + A: &RecurseA{"a2", nil}, + B: "b1", + }, + }, + ExpectXML: `a1a2b1`, + }, + + // Test ignoring fields via "-" tag + { + ExpectXML: ``, + Value: &IgnoreTest{}, + }, + { + ExpectXML: ``, + Value: &IgnoreTest{PublicSecret: "can't tell"}, + MarshalOnly: true, + }, + { + ExpectXML: `ignore me`, + Value: &IgnoreTest{}, + UnmarshalOnly: true, + }, + + // Test escaping. + { + ExpectXML: `dquote: "; squote: '; ampersand: &; less: <; greater: >;`, + Value: &AnyTest{ + Nested: `dquote: "; squote: '; ampersand: &; less: <; greater: >;`, + AnyField: AnyHolder{XMLName: Name{Local: "empty"}}, + }, + }, + { + ExpectXML: `newline: ; cr: ; tab: ;`, + Value: &AnyTest{ + Nested: "newline: \n; cr: \r; tab: \t;", + AnyField: AnyHolder{XMLName: Name{Local: "AnyField"}}, + }, + }, + { + ExpectXML: "1\r2\r\n3\n\r4\n5", + Value: &AnyTest{ + Nested: "1\n2\n3\n\n4\n5", + }, + UnmarshalOnly: true, + }, + { + ExpectXML: `42`, + Value: &EmbedInt{ + MyInt: 42, + }, + }, + // Test omitempty with parent chain; see golang.org/issue/4168. + { + ExpectXML: ``, + Value: &Strings{}, + }, + // Custom marshalers. + { + ExpectXML: `hello world`, + Value: &MyMarshalerTest{}, + }, + { + ExpectXML: ``, + Value: &MarshalerStruct{}, + }, + { + ExpectXML: ``, + Value: &MarshalerValueStruct{}, + }, + { + ExpectXML: ``, + Value: &OuterStruct{IntAttr: 10}, + }, + { + ExpectXML: ``, + Value: &OuterNamedStruct{XMLName: Name{Space: "outerns", Local: "test"}, IntAttr: 10}, + }, + { + ExpectXML: ``, + Value: &OuterNamedOrderedStruct{XMLName: Name{Space: "outerns", Local: "test"}, IntAttr: 10}, + }, + { + ExpectXML: ``, + Value: &OuterOuterStruct{OuterStruct{IntAttr: 10}}, + }, + { + ExpectXML: `test`, + Value: &NestedAndChardata{AB: make([]string, 2), Chardata: "test"}, + }, + { + ExpectXML: ``, + Value: &NestedAndComment{AB: make([]string, 2), Comment: "test"}, + }, + { + ExpectXML: `hello world`, + Value: &XMLNSFieldStruct{Ns: "http://example.com/ns", Body: "hello world"}, + }, + { + ExpectXML: `hello world`, + Value: &NamedXMLNSFieldStruct{Ns: "http://example.com/ns", Body: "hello world"}, + }, + { + ExpectXML: `hello world`, + Value: &NamedXMLNSFieldStruct{Ns: "", Body: "hello world"}, + }, + { + ExpectXML: `hello world`, + Value: &XMLNSFieldStructWithOmitEmpty{Body: "hello world"}, + }, + { + // The xmlns attribute must be ignored because the + // element is in the empty namespace, so it's not possible + // to set the default namespace to something non-empty. + ExpectXML: `hello world`, + Value: &NamedXMLNSFieldStructWithEmptyNamespace{Ns: "foo", Body: "hello world"}, + MarshalOnly: true, + }, + { + ExpectXML: `hello world`, + Value: &RecursiveXMLNSFieldStruct{ + Ns: "foo", + Body: &RecursiveXMLNSFieldStruct{ + Text: "hello world", + }, + }, + }, +} + +func TestMarshal(t *testing.T) { + for idx, test := range marshalTests { + if test.UnmarshalOnly { + continue + } + data, err := Marshal(test.Value) + if err != nil { + t.Errorf("#%d: marshal(%#v): %s", idx, test.Value, err) + continue + } + if got, want := string(data), test.ExpectXML; got != want { + if strings.Contains(want, "\n") { + t.Errorf("#%d: marshal(%#v):\nHAVE:\n%s\nWANT:\n%s", idx, test.Value, got, want) + } else { + t.Errorf("#%d: marshal(%#v):\nhave %#q\nwant %#q", idx, test.Value, got, want) + } + } + } +} + +type AttrParent struct { + X string `xml:"X>Y,attr"` +} + +type BadAttr struct { + Name []string `xml:"name,attr"` +} + +var marshalErrorTests = []struct { + Value interface{} + Err string + Kind reflect.Kind +}{ + { + Value: make(chan bool), + Err: "xml: unsupported type: chan bool", + Kind: reflect.Chan, + }, + { + Value: map[string]string{ + "question": "What do you get when you multiply six by nine?", + "answer": "42", + }, + Err: "xml: unsupported type: map[string]string", + Kind: reflect.Map, + }, + { + Value: map[*Ship]bool{nil: false}, + Err: "xml: unsupported type: map[*xml.Ship]bool", + Kind: reflect.Map, + }, + { + Value: &Domain{Comment: []byte("f--bar")}, + Err: `xml: comments must not contain "--"`, + }, + // Reject parent chain with attr, never worked; see golang.org/issue/5033. + { + Value: &AttrParent{}, + Err: `xml: X>Y chain not valid with attr flag`, + }, + { + Value: BadAttr{[]string{"X", "Y"}}, + Err: `xml: unsupported type: []string`, + }, +} + +var marshalIndentTests = []struct { + Value interface{} + Prefix string + Indent string + ExpectXML string +}{ + { + Value: &SecretAgent{ + Handle: "007", + Identity: "James Bond", + Obfuscate: "", + }, + Prefix: "", + Indent: "\t", + ExpectXML: fmt.Sprintf("\n\tJames Bond\n"), + }, +} + +func TestMarshalErrors(t *testing.T) { + for idx, test := range marshalErrorTests { + data, err := Marshal(test.Value) + if err == nil { + t.Errorf("#%d: marshal(%#v) = [success] %q, want error %v", idx, test.Value, data, test.Err) + continue + } + if err.Error() != test.Err { + t.Errorf("#%d: marshal(%#v) = [error] %v, want %v", idx, test.Value, err, test.Err) + } + if test.Kind != reflect.Invalid { + if kind := err.(*UnsupportedTypeError).Type.Kind(); kind != test.Kind { + t.Errorf("#%d: marshal(%#v) = [error kind] %s, want %s", idx, test.Value, kind, test.Kind) + } + } + } +} + +// Do invertibility testing on the various structures that we test +func TestUnmarshal(t *testing.T) { + for i, test := range marshalTests { + if test.MarshalOnly { + continue + } + if _, ok := test.Value.(*Plain); ok { + continue + } + vt := reflect.TypeOf(test.Value) + dest := reflect.New(vt.Elem()).Interface() + err := Unmarshal([]byte(test.ExpectXML), dest) + + switch fix := dest.(type) { + case *Feed: + fix.Author.InnerXML = "" + for i := range fix.Entry { + fix.Entry[i].Author.InnerXML = "" + } + } + + if err != nil { + t.Errorf("#%d: unexpected error: %#v", i, err) + } else if got, want := dest, test.Value; !reflect.DeepEqual(got, want) { + t.Errorf("#%d: unmarshal(%q):\nhave %#v\nwant %#v", i, test.ExpectXML, got, want) + } + } +} + +func TestMarshalIndent(t *testing.T) { + for i, test := range marshalIndentTests { + data, err := MarshalIndent(test.Value, test.Prefix, test.Indent) + if err != nil { + t.Errorf("#%d: Error: %s", i, err) + continue + } + if got, want := string(data), test.ExpectXML; got != want { + t.Errorf("#%d: MarshalIndent:\nGot:%s\nWant:\n%s", i, got, want) + } + } +} + +type limitedBytesWriter struct { + w io.Writer + remain int // until writes fail +} + +func (lw *limitedBytesWriter) Write(p []byte) (n int, err error) { + if lw.remain <= 0 { + println("error") + return 0, errors.New("write limit hit") + } + if len(p) > lw.remain { + p = p[:lw.remain] + n, _ = lw.w.Write(p) + lw.remain = 0 + return n, errors.New("write limit hit") + } + n, err = lw.w.Write(p) + lw.remain -= n + return n, err +} + +func TestMarshalWriteErrors(t *testing.T) { + var buf bytes.Buffer + const writeCap = 1024 + w := &limitedBytesWriter{&buf, writeCap} + enc := NewEncoder(w) + var err error + var i int + const n = 4000 + for i = 1; i <= n; i++ { + err = enc.Encode(&Passenger{ + Name: []string{"Alice", "Bob"}, + Weight: 5, + }) + if err != nil { + break + } + } + if err == nil { + t.Error("expected an error") + } + if i == n { + t.Errorf("expected to fail before the end") + } + if buf.Len() != writeCap { + t.Errorf("buf.Len() = %d; want %d", buf.Len(), writeCap) + } +} + +func TestMarshalWriteIOErrors(t *testing.T) { + enc := NewEncoder(errWriter{}) + + expectErr := "unwritable" + err := enc.Encode(&Passenger{}) + if err == nil || err.Error() != expectErr { + t.Errorf("EscapeTest = [error] %v, want %v", err, expectErr) + } +} + +func TestMarshalFlush(t *testing.T) { + var buf bytes.Buffer + enc := NewEncoder(&buf) + if err := enc.EncodeToken(CharData("hello world")); err != nil { + t.Fatalf("enc.EncodeToken: %v", err) + } + if buf.Len() > 0 { + t.Fatalf("enc.EncodeToken caused actual write: %q", buf.Bytes()) + } + if err := enc.Flush(); err != nil { + t.Fatalf("enc.Flush: %v", err) + } + if buf.String() != "hello world" { + t.Fatalf("after enc.Flush, buf.String() = %q, want %q", buf.String(), "hello world") + } +} + +var encodeElementTests = []struct { + desc string + value interface{} + start StartElement + expectXML string +}{{ + desc: "simple string", + value: "hello", + start: StartElement{ + Name: Name{Local: "a"}, + }, + expectXML: `hello`, +}, { + desc: "string with added attributes", + value: "hello", + start: StartElement{ + Name: Name{Local: "a"}, + Attr: []Attr{{ + Name: Name{Local: "x"}, + Value: "y", + }, { + Name: Name{Local: "foo"}, + Value: "bar", + }}, + }, + expectXML: `hello`, +}, { + desc: "start element with default name space", + value: struct { + Foo XMLNameWithNSTag + }{ + Foo: XMLNameWithNSTag{ + Value: "hello", + }, + }, + start: StartElement{ + Name: Name{Space: "ns", Local: "a"}, + Attr: []Attr{{ + Name: Name{Local: "xmlns"}, + // "ns" is the name space defined in XMLNameWithNSTag + Value: "ns", + }}, + }, + expectXML: `hello`, +}, { + desc: "start element in name space with different default name space", + value: struct { + Foo XMLNameWithNSTag + }{ + Foo: XMLNameWithNSTag{ + Value: "hello", + }, + }, + start: StartElement{ + Name: Name{Space: "ns2", Local: "a"}, + Attr: []Attr{{ + Name: Name{Local: "xmlns"}, + // "ns" is the name space defined in XMLNameWithNSTag + Value: "ns", + }}, + }, + expectXML: `hello`, +}, { + desc: "XMLMarshaler with start element with default name space", + value: &MyMarshalerTest{}, + start: StartElement{ + Name: Name{Space: "ns2", Local: "a"}, + Attr: []Attr{{ + Name: Name{Local: "xmlns"}, + // "ns" is the name space defined in XMLNameWithNSTag + Value: "ns", + }}, + }, + expectXML: `hello world`, +}} + +func TestEncodeElement(t *testing.T) { + for idx, test := range encodeElementTests { + var buf bytes.Buffer + enc := NewEncoder(&buf) + err := enc.EncodeElement(test.value, test.start) + if err != nil { + t.Fatalf("enc.EncodeElement: %v", err) + } + err = enc.Flush() + if err != nil { + t.Fatalf("enc.Flush: %v", err) + } + if got, want := buf.String(), test.expectXML; got != want { + t.Errorf("#%d(%s): EncodeElement(%#v, %#v):\nhave %#q\nwant %#q", idx, test.desc, test.value, test.start, got, want) + } + } +} + +func BenchmarkMarshal(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + Marshal(atomValue) + } +} + +func BenchmarkUnmarshal(b *testing.B) { + b.ReportAllocs() + xml := []byte(atomXml) + for i := 0; i < b.N; i++ { + Unmarshal(xml, &Feed{}) + } +} + +// golang.org/issue/6556 +func TestStructPointerMarshal(t *testing.T) { + type A struct { + XMLName string `xml:"a"` + B []interface{} + } + type C struct { + XMLName Name + Value string `xml:"value"` + } + + a := new(A) + a.B = append(a.B, &C{ + XMLName: Name{Local: "c"}, + Value: "x", + }) + + b, err := Marshal(a) + if err != nil { + t.Fatal(err) + } + if x := string(b); x != "x" { + t.Fatal(x) + } + var v A + err = Unmarshal(b, &v) + if err != nil { + t.Fatal(err) + } +} + +var encodeTokenTests = []struct { + desc string + toks []Token + want string + err string +}{{ + desc: "start element with name space", + toks: []Token{ + StartElement{Name{"space", "local"}, nil}, + }, + want: ``, +}, { + desc: "start element with no name", + toks: []Token{ + StartElement{Name{"space", ""}, nil}, + }, + err: "xml: start tag with no name", +}, { + desc: "end element with no name", + toks: []Token{ + EndElement{Name{"space", ""}}, + }, + err: "xml: end tag with no name", +}, { + desc: "char data", + toks: []Token{ + CharData("foo"), + }, + want: `foo`, +}, { + desc: "char data with escaped chars", + toks: []Token{ + CharData(" \t\n"), + }, + want: " \n", +}, { + desc: "comment", + toks: []Token{ + Comment("foo"), + }, + want: ``, +}, { + desc: "comment with invalid content", + toks: []Token{ + Comment("foo-->"), + }, + err: "xml: EncodeToken of Comment containing --> marker", +}, { + desc: "proc instruction", + toks: []Token{ + ProcInst{"Target", []byte("Instruction")}, + }, + want: ``, +}, { + desc: "proc instruction with empty target", + toks: []Token{ + ProcInst{"", []byte("Instruction")}, + }, + err: "xml: EncodeToken of ProcInst with invalid Target", +}, { + desc: "proc instruction with bad content", + toks: []Token{ + ProcInst{"", []byte("Instruction?>")}, + }, + err: "xml: EncodeToken of ProcInst with invalid Target", +}, { + desc: "directive", + toks: []Token{ + Directive("foo"), + }, + want: ``, +}, { + desc: "more complex directive", + toks: []Token{ + Directive("DOCTYPE doc [ '> ]"), + }, + want: `'> ]>`, +}, { + desc: "directive instruction with bad name", + toks: []Token{ + Directive("foo>"), + }, + err: "xml: EncodeToken of Directive containing wrong < or > markers", +}, { + desc: "end tag without start tag", + toks: []Token{ + EndElement{Name{"foo", "bar"}}, + }, + err: "xml: end tag without start tag", +}, { + desc: "mismatching end tag local name", + toks: []Token{ + StartElement{Name{"", "foo"}, nil}, + EndElement{Name{"", "bar"}}, + }, + err: "xml: end tag does not match start tag ", + want: ``, +}, { + desc: "mismatching end tag namespace", + toks: []Token{ + StartElement{Name{"space", "foo"}, nil}, + EndElement{Name{"another", "foo"}}, + }, + err: "xml: end tag in namespace another does not match start tag in namespace space", + want: ``, +}, { + desc: "start element with explicit namespace", + toks: []Token{ + StartElement{Name{"space", "local"}, []Attr{ + {Name{"xmlns", "x"}, "space"}, + {Name{"space", "foo"}, "value"}, + }}, + }, + want: ``, +}, { + desc: "start element with explicit namespace and colliding prefix", + toks: []Token{ + StartElement{Name{"space", "local"}, []Attr{ + {Name{"xmlns", "x"}, "space"}, + {Name{"space", "foo"}, "value"}, + {Name{"x", "bar"}, "other"}, + }}, + }, + want: ``, +}, { + desc: "start element using previously defined namespace", + toks: []Token{ + StartElement{Name{"", "local"}, []Attr{ + {Name{"xmlns", "x"}, "space"}, + }}, + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"space", "x"}, "y"}, + }}, + }, + want: ``, +}, { + desc: "nested name space with same prefix", + toks: []Token{ + StartElement{Name{"", "foo"}, []Attr{ + {Name{"xmlns", "x"}, "space1"}, + }}, + StartElement{Name{"", "foo"}, []Attr{ + {Name{"xmlns", "x"}, "space2"}, + }}, + StartElement{Name{"", "foo"}, []Attr{ + {Name{"space1", "a"}, "space1 value"}, + {Name{"space2", "b"}, "space2 value"}, + }}, + EndElement{Name{"", "foo"}}, + EndElement{Name{"", "foo"}}, + StartElement{Name{"", "foo"}, []Attr{ + {Name{"space1", "a"}, "space1 value"}, + {Name{"space2", "b"}, "space2 value"}, + }}, + }, + want: ``, +}, { + desc: "start element defining several prefixes for the same name space", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"xmlns", "a"}, "space"}, + {Name{"xmlns", "b"}, "space"}, + {Name{"space", "x"}, "value"}, + }}, + }, + want: ``, +}, { + desc: "nested element redefines name space", + toks: []Token{ + StartElement{Name{"", "foo"}, []Attr{ + {Name{"xmlns", "x"}, "space"}, + }}, + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"xmlns", "y"}, "space"}, + {Name{"space", "a"}, "value"}, + }}, + }, + want: ``, +}, { + desc: "nested element creates alias for default name space", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"", "xmlns"}, "space"}, + }}, + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"xmlns", "y"}, "space"}, + {Name{"space", "a"}, "value"}, + }}, + }, + want: ``, +}, { + desc: "nested element defines default name space with existing prefix", + toks: []Token{ + StartElement{Name{"", "foo"}, []Attr{ + {Name{"xmlns", "x"}, "space"}, + }}, + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"", "xmlns"}, "space"}, + {Name{"space", "a"}, "value"}, + }}, + }, + want: ``, +}, { + desc: "nested element uses empty attribute name space when default ns defined", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"", "xmlns"}, "space"}, + }}, + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"", "attr"}, "value"}, + }}, + }, + want: ``, +}, { + desc: "redefine xmlns", + toks: []Token{ + StartElement{Name{"", "foo"}, []Attr{ + {Name{"foo", "xmlns"}, "space"}, + }}, + }, + err: `xml: cannot redefine xmlns attribute prefix`, +}, { + desc: "xmlns with explicit name space #1", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"xml", "xmlns"}, "space"}, + }}, + }, + want: ``, +}, { + desc: "xmlns with explicit name space #2", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{xmlURL, "xmlns"}, "space"}, + }}, + }, + want: ``, +}, { + desc: "empty name space declaration is ignored", + toks: []Token{ + StartElement{Name{"", "foo"}, []Attr{ + {Name{"xmlns", "foo"}, ""}, + }}, + }, + want: ``, +}, { + desc: "attribute with no name is ignored", + toks: []Token{ + StartElement{Name{"", "foo"}, []Attr{ + {Name{"", ""}, "value"}, + }}, + }, + want: ``, +}, { + desc: "namespace URL with non-valid name", + toks: []Token{ + StartElement{Name{"/34", "foo"}, []Attr{ + {Name{"/34", "x"}, "value"}, + }}, + }, + want: `<_:foo xmlns:_="/34" _:x="value">`, +}, { + desc: "nested element resets default namespace to empty", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"", "xmlns"}, "space"}, + }}, + StartElement{Name{"", "foo"}, []Attr{ + {Name{"", "xmlns"}, ""}, + {Name{"", "x"}, "value"}, + {Name{"space", "x"}, "value"}, + }}, + }, + want: ``, +}, { + desc: "nested element requires empty default name space", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"", "xmlns"}, "space"}, + }}, + StartElement{Name{"", "foo"}, nil}, + }, + want: ``, +}, { + desc: "attribute uses name space from xmlns", + toks: []Token{ + StartElement{Name{"some/space", "foo"}, []Attr{ + {Name{"", "attr"}, "value"}, + {Name{"some/space", "other"}, "other value"}, + }}, + }, + want: ``, +}, { + desc: "default name space should not be used by attributes", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"", "xmlns"}, "space"}, + {Name{"xmlns", "bar"}, "space"}, + {Name{"space", "baz"}, "foo"}, + }}, + StartElement{Name{"space", "baz"}, nil}, + EndElement{Name{"space", "baz"}}, + EndElement{Name{"space", "foo"}}, + }, + want: ``, +}, { + desc: "default name space not used by attributes, not explicitly defined", + toks: []Token{ + StartElement{Name{"space", "foo"}, []Attr{ + {Name{"", "xmlns"}, "space"}, + {Name{"space", "baz"}, "foo"}, + }}, + StartElement{Name{"space", "baz"}, nil}, + EndElement{Name{"space", "baz"}}, + EndElement{Name{"space", "foo"}}, + }, + want: ``, +}, { + desc: "impossible xmlns declaration", + toks: []Token{ + StartElement{Name{"", "foo"}, []Attr{ + {Name{"", "xmlns"}, "space"}, + }}, + StartElement{Name{"space", "bar"}, []Attr{ + {Name{"space", "attr"}, "value"}, + }}, + }, + want: ``, +}} + +func TestEncodeToken(t *testing.T) { +loop: + for i, tt := range encodeTokenTests { + var buf bytes.Buffer + enc := NewEncoder(&buf) + var err error + for j, tok := range tt.toks { + err = enc.EncodeToken(tok) + if err != nil && j < len(tt.toks)-1 { + t.Errorf("#%d %s token #%d: %v", i, tt.desc, j, err) + continue loop + } + } + errorf := func(f string, a ...interface{}) { + t.Errorf("#%d %s token #%d:%s", i, tt.desc, len(tt.toks)-1, fmt.Sprintf(f, a...)) + } + switch { + case tt.err != "" && err == nil: + errorf(" expected error; got none") + continue + case tt.err == "" && err != nil: + errorf(" got error: %v", err) + continue + case tt.err != "" && err != nil && tt.err != err.Error(): + errorf(" error mismatch; got %v, want %v", err, tt.err) + continue + } + if err := enc.Flush(); err != nil { + errorf(" %v", err) + continue + } + if got := buf.String(); got != tt.want { + errorf("\ngot %v\nwant %v", got, tt.want) + continue + } + } +} + +func TestProcInstEncodeToken(t *testing.T) { + var buf bytes.Buffer + enc := NewEncoder(&buf) + + if err := enc.EncodeToken(ProcInst{"xml", []byte("Instruction")}); err != nil { + t.Fatalf("enc.EncodeToken: expected to be able to encode xml target ProcInst as first token, %s", err) + } + + if err := enc.EncodeToken(ProcInst{"Target", []byte("Instruction")}); err != nil { + t.Fatalf("enc.EncodeToken: expected to be able to add non-xml target ProcInst") + } + + if err := enc.EncodeToken(ProcInst{"xml", []byte("Instruction")}); err == nil { + t.Fatalf("enc.EncodeToken: expected to not be allowed to encode xml target ProcInst when not first token") + } +} + +func TestDecodeEncode(t *testing.T) { + var in, out bytes.Buffer + in.WriteString(` + + + +`) + dec := NewDecoder(&in) + enc := NewEncoder(&out) + for tok, err := dec.Token(); err == nil; tok, err = dec.Token() { + err = enc.EncodeToken(tok) + if err != nil { + t.Fatalf("enc.EncodeToken: Unable to encode token (%#v), %v", tok, err) + } + } +} + +// Issue 9796. Used to fail with GORACE="halt_on_error=1" -race. +func TestRace9796(t *testing.T) { + type A struct{} + type B struct { + C []A `xml:"X>Y"` + } + var wg sync.WaitGroup + for i := 0; i < 2; i++ { + wg.Add(1) + go func() { + Marshal(B{[]A{{}}}) + wg.Done() + }() + } + wg.Wait() +} + +func TestIsValidDirective(t *testing.T) { + testOK := []string{ + "<>", + "< < > >", + "' '>' >", + " ]>", + " '<' ' doc ANY> ]>", + ">>> a < comment --> [ ] >", + } + testKO := []string{ + "<", + ">", + "", + "< > > < < >", + " -->", + "", + "'", + "", + } + for _, s := range testOK { + if !isValidDirective(Directive(s)) { + t.Errorf("Directive %q is expected to be valid", s) + } + } + for _, s := range testKO { + if isValidDirective(Directive(s)) { + t.Errorf("Directive %q is expected to be invalid", s) + } + } +} + +// Issue 11719. EncodeToken used to silently eat tokens with an invalid type. +func TestSimpleUseOfEncodeToken(t *testing.T) { + var buf bytes.Buffer + enc := NewEncoder(&buf) + if err := enc.EncodeToken(&StartElement{Name: Name{"", "object1"}}); err == nil { + t.Errorf("enc.EncodeToken: pointer type should be rejected") + } + if err := enc.EncodeToken(&EndElement{Name: Name{"", "object1"}}); err == nil { + t.Errorf("enc.EncodeToken: pointer type should be rejected") + } + if err := enc.EncodeToken(StartElement{Name: Name{"", "object2"}}); err != nil { + t.Errorf("enc.EncodeToken: StartElement %s", err) + } + if err := enc.EncodeToken(EndElement{Name: Name{"", "object2"}}); err != nil { + t.Errorf("enc.EncodeToken: EndElement %s", err) + } + if err := enc.EncodeToken(Universe{}); err == nil { + t.Errorf("enc.EncodeToken: invalid type not caught") + } + if err := enc.Flush(); err != nil { + t.Errorf("enc.Flush: %s", err) + } + if buf.Len() == 0 { + t.Errorf("enc.EncodeToken: empty buffer") + } + want := "" + if buf.String() != want { + t.Errorf("enc.EncodeToken: expected %q; got %q", want, buf.String()) + } +} diff --git a/vendor/golang.org/x/net/webdav/internal/xml/read.go b/vendor/golang.org/x/net/webdav/internal/xml/read.go new file mode 100644 index 0000000..4089056 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/read.go @@ -0,0 +1,692 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xml + +import ( + "bytes" + "encoding" + "errors" + "fmt" + "reflect" + "strconv" + "strings" +) + +// BUG(rsc): Mapping between XML elements and data structures is inherently flawed: +// an XML element is an order-dependent collection of anonymous +// values, while a data structure is an order-independent collection +// of named values. +// See package json for a textual representation more suitable +// to data structures. + +// Unmarshal parses the XML-encoded data and stores the result in +// the value pointed to by v, which must be an arbitrary struct, +// slice, or string. Well-formed data that does not fit into v is +// discarded. +// +// Because Unmarshal uses the reflect package, it can only assign +// to exported (upper case) fields. Unmarshal uses a case-sensitive +// comparison to match XML element names to tag values and struct +// field names. +// +// Unmarshal maps an XML element to a struct using the following rules. +// In the rules, the tag of a field refers to the value associated with the +// key 'xml' in the struct field's tag (see the example above). +// +// * If the struct has a field of type []byte or string with tag +// ",innerxml", Unmarshal accumulates the raw XML nested inside the +// element in that field. The rest of the rules still apply. +// +// * If the struct has a field named XMLName of type xml.Name, +// Unmarshal records the element name in that field. +// +// * If the XMLName field has an associated tag of the form +// "name" or "namespace-URL name", the XML element must have +// the given name (and, optionally, name space) or else Unmarshal +// returns an error. +// +// * If the XML element has an attribute whose name matches a +// struct field name with an associated tag containing ",attr" or +// the explicit name in a struct field tag of the form "name,attr", +// Unmarshal records the attribute value in that field. +// +// * If the XML element contains character data, that data is +// accumulated in the first struct field that has tag ",chardata". +// The struct field may have type []byte or string. +// If there is no such field, the character data is discarded. +// +// * If the XML element contains comments, they are accumulated in +// the first struct field that has tag ",comment". The struct +// field may have type []byte or string. If there is no such +// field, the comments are discarded. +// +// * If the XML element contains a sub-element whose name matches +// the prefix of a tag formatted as "a" or "a>b>c", unmarshal +// will descend into the XML structure looking for elements with the +// given names, and will map the innermost elements to that struct +// field. A tag starting with ">" is equivalent to one starting +// with the field name followed by ">". +// +// * If the XML element contains a sub-element whose name matches +// a struct field's XMLName tag and the struct field has no +// explicit name tag as per the previous rule, unmarshal maps +// the sub-element to that struct field. +// +// * If the XML element contains a sub-element whose name matches a +// field without any mode flags (",attr", ",chardata", etc), Unmarshal +// maps the sub-element to that struct field. +// +// * If the XML element contains a sub-element that hasn't matched any +// of the above rules and the struct has a field with tag ",any", +// unmarshal maps the sub-element to that struct field. +// +// * An anonymous struct field is handled as if the fields of its +// value were part of the outer struct. +// +// * A struct field with tag "-" is never unmarshalled into. +// +// Unmarshal maps an XML element to a string or []byte by saving the +// concatenation of that element's character data in the string or +// []byte. The saved []byte is never nil. +// +// Unmarshal maps an attribute value to a string or []byte by saving +// the value in the string or slice. +// +// Unmarshal maps an XML element to a slice by extending the length of +// the slice and mapping the element to the newly created value. +// +// Unmarshal maps an XML element or attribute value to a bool by +// setting it to the boolean value represented by the string. +// +// Unmarshal maps an XML element or attribute value to an integer or +// floating-point field by setting the field to the result of +// interpreting the string value in decimal. There is no check for +// overflow. +// +// Unmarshal maps an XML element to an xml.Name by recording the +// element name. +// +// Unmarshal maps an XML element to a pointer by setting the pointer +// to a freshly allocated value and then mapping the element to that value. +// +func Unmarshal(data []byte, v interface{}) error { + return NewDecoder(bytes.NewReader(data)).Decode(v) +} + +// Decode works like xml.Unmarshal, except it reads the decoder +// stream to find the start element. +func (d *Decoder) Decode(v interface{}) error { + return d.DecodeElement(v, nil) +} + +// DecodeElement works like xml.Unmarshal except that it takes +// a pointer to the start XML element to decode into v. +// It is useful when a client reads some raw XML tokens itself +// but also wants to defer to Unmarshal for some elements. +func (d *Decoder) DecodeElement(v interface{}, start *StartElement) error { + val := reflect.ValueOf(v) + if val.Kind() != reflect.Ptr { + return errors.New("non-pointer passed to Unmarshal") + } + return d.unmarshal(val.Elem(), start) +} + +// An UnmarshalError represents an error in the unmarshalling process. +type UnmarshalError string + +func (e UnmarshalError) Error() string { return string(e) } + +// Unmarshaler is the interface implemented by objects that can unmarshal +// an XML element description of themselves. +// +// UnmarshalXML decodes a single XML element +// beginning with the given start element. +// If it returns an error, the outer call to Unmarshal stops and +// returns that error. +// UnmarshalXML must consume exactly one XML element. +// One common implementation strategy is to unmarshal into +// a separate value with a layout matching the expected XML +// using d.DecodeElement, and then to copy the data from +// that value into the receiver. +// Another common strategy is to use d.Token to process the +// XML object one token at a time. +// UnmarshalXML may not use d.RawToken. +type Unmarshaler interface { + UnmarshalXML(d *Decoder, start StartElement) error +} + +// UnmarshalerAttr is the interface implemented by objects that can unmarshal +// an XML attribute description of themselves. +// +// UnmarshalXMLAttr decodes a single XML attribute. +// If it returns an error, the outer call to Unmarshal stops and +// returns that error. +// UnmarshalXMLAttr is used only for struct fields with the +// "attr" option in the field tag. +type UnmarshalerAttr interface { + UnmarshalXMLAttr(attr Attr) error +} + +// receiverType returns the receiver type to use in an expression like "%s.MethodName". +func receiverType(val interface{}) string { + t := reflect.TypeOf(val) + if t.Name() != "" { + return t.String() + } + return "(" + t.String() + ")" +} + +// unmarshalInterface unmarshals a single XML element into val. +// start is the opening tag of the element. +func (p *Decoder) unmarshalInterface(val Unmarshaler, start *StartElement) error { + // Record that decoder must stop at end tag corresponding to start. + p.pushEOF() + + p.unmarshalDepth++ + err := val.UnmarshalXML(p, *start) + p.unmarshalDepth-- + if err != nil { + p.popEOF() + return err + } + + if !p.popEOF() { + return fmt.Errorf("xml: %s.UnmarshalXML did not consume entire <%s> element", receiverType(val), start.Name.Local) + } + + return nil +} + +// unmarshalTextInterface unmarshals a single XML element into val. +// The chardata contained in the element (but not its children) +// is passed to the text unmarshaler. +func (p *Decoder) unmarshalTextInterface(val encoding.TextUnmarshaler, start *StartElement) error { + var buf []byte + depth := 1 + for depth > 0 { + t, err := p.Token() + if err != nil { + return err + } + switch t := t.(type) { + case CharData: + if depth == 1 { + buf = append(buf, t...) + } + case StartElement: + depth++ + case EndElement: + depth-- + } + } + return val.UnmarshalText(buf) +} + +// unmarshalAttr unmarshals a single XML attribute into val. +func (p *Decoder) unmarshalAttr(val reflect.Value, attr Attr) error { + if val.Kind() == reflect.Ptr { + if val.IsNil() { + val.Set(reflect.New(val.Type().Elem())) + } + val = val.Elem() + } + + if val.CanInterface() && val.Type().Implements(unmarshalerAttrType) { + // This is an unmarshaler with a non-pointer receiver, + // so it's likely to be incorrect, but we do what we're told. + return val.Interface().(UnmarshalerAttr).UnmarshalXMLAttr(attr) + } + if val.CanAddr() { + pv := val.Addr() + if pv.CanInterface() && pv.Type().Implements(unmarshalerAttrType) { + return pv.Interface().(UnmarshalerAttr).UnmarshalXMLAttr(attr) + } + } + + // Not an UnmarshalerAttr; try encoding.TextUnmarshaler. + if val.CanInterface() && val.Type().Implements(textUnmarshalerType) { + // This is an unmarshaler with a non-pointer receiver, + // so it's likely to be incorrect, but we do what we're told. + return val.Interface().(encoding.TextUnmarshaler).UnmarshalText([]byte(attr.Value)) + } + if val.CanAddr() { + pv := val.Addr() + if pv.CanInterface() && pv.Type().Implements(textUnmarshalerType) { + return pv.Interface().(encoding.TextUnmarshaler).UnmarshalText([]byte(attr.Value)) + } + } + + copyValue(val, []byte(attr.Value)) + return nil +} + +var ( + unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem() + unmarshalerAttrType = reflect.TypeOf((*UnmarshalerAttr)(nil)).Elem() + textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() +) + +// Unmarshal a single XML element into val. +func (p *Decoder) unmarshal(val reflect.Value, start *StartElement) error { + // Find start element if we need it. + if start == nil { + for { + tok, err := p.Token() + if err != nil { + return err + } + if t, ok := tok.(StartElement); ok { + start = &t + break + } + } + } + + // Load value from interface, but only if the result will be + // usefully addressable. + if val.Kind() == reflect.Interface && !val.IsNil() { + e := val.Elem() + if e.Kind() == reflect.Ptr && !e.IsNil() { + val = e + } + } + + if val.Kind() == reflect.Ptr { + if val.IsNil() { + val.Set(reflect.New(val.Type().Elem())) + } + val = val.Elem() + } + + if val.CanInterface() && val.Type().Implements(unmarshalerType) { + // This is an unmarshaler with a non-pointer receiver, + // so it's likely to be incorrect, but we do what we're told. + return p.unmarshalInterface(val.Interface().(Unmarshaler), start) + } + + if val.CanAddr() { + pv := val.Addr() + if pv.CanInterface() && pv.Type().Implements(unmarshalerType) { + return p.unmarshalInterface(pv.Interface().(Unmarshaler), start) + } + } + + if val.CanInterface() && val.Type().Implements(textUnmarshalerType) { + return p.unmarshalTextInterface(val.Interface().(encoding.TextUnmarshaler), start) + } + + if val.CanAddr() { + pv := val.Addr() + if pv.CanInterface() && pv.Type().Implements(textUnmarshalerType) { + return p.unmarshalTextInterface(pv.Interface().(encoding.TextUnmarshaler), start) + } + } + + var ( + data []byte + saveData reflect.Value + comment []byte + saveComment reflect.Value + saveXML reflect.Value + saveXMLIndex int + saveXMLData []byte + saveAny reflect.Value + sv reflect.Value + tinfo *typeInfo + err error + ) + + switch v := val; v.Kind() { + default: + return errors.New("unknown type " + v.Type().String()) + + case reflect.Interface: + // TODO: For now, simply ignore the field. In the near + // future we may choose to unmarshal the start + // element on it, if not nil. + return p.Skip() + + case reflect.Slice: + typ := v.Type() + if typ.Elem().Kind() == reflect.Uint8 { + // []byte + saveData = v + break + } + + // Slice of element values. + // Grow slice. + n := v.Len() + if n >= v.Cap() { + ncap := 2 * n + if ncap < 4 { + ncap = 4 + } + new := reflect.MakeSlice(typ, n, ncap) + reflect.Copy(new, v) + v.Set(new) + } + v.SetLen(n + 1) + + // Recur to read element into slice. + if err := p.unmarshal(v.Index(n), start); err != nil { + v.SetLen(n) + return err + } + return nil + + case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.String: + saveData = v + + case reflect.Struct: + typ := v.Type() + if typ == nameType { + v.Set(reflect.ValueOf(start.Name)) + break + } + + sv = v + tinfo, err = getTypeInfo(typ) + if err != nil { + return err + } + + // Validate and assign element name. + if tinfo.xmlname != nil { + finfo := tinfo.xmlname + if finfo.name != "" && finfo.name != start.Name.Local { + return UnmarshalError("expected element type <" + finfo.name + "> but have <" + start.Name.Local + ">") + } + if finfo.xmlns != "" && finfo.xmlns != start.Name.Space { + e := "expected element <" + finfo.name + "> in name space " + finfo.xmlns + " but have " + if start.Name.Space == "" { + e += "no name space" + } else { + e += start.Name.Space + } + return UnmarshalError(e) + } + fv := finfo.value(sv) + if _, ok := fv.Interface().(Name); ok { + fv.Set(reflect.ValueOf(start.Name)) + } + } + + // Assign attributes. + // Also, determine whether we need to save character data or comments. + for i := range tinfo.fields { + finfo := &tinfo.fields[i] + switch finfo.flags & fMode { + case fAttr: + strv := finfo.value(sv) + // Look for attribute. + for _, a := range start.Attr { + if a.Name.Local == finfo.name && (finfo.xmlns == "" || finfo.xmlns == a.Name.Space) { + if err := p.unmarshalAttr(strv, a); err != nil { + return err + } + break + } + } + + case fCharData: + if !saveData.IsValid() { + saveData = finfo.value(sv) + } + + case fComment: + if !saveComment.IsValid() { + saveComment = finfo.value(sv) + } + + case fAny, fAny | fElement: + if !saveAny.IsValid() { + saveAny = finfo.value(sv) + } + + case fInnerXml: + if !saveXML.IsValid() { + saveXML = finfo.value(sv) + if p.saved == nil { + saveXMLIndex = 0 + p.saved = new(bytes.Buffer) + } else { + saveXMLIndex = p.savedOffset() + } + } + } + } + } + + // Find end element. + // Process sub-elements along the way. +Loop: + for { + var savedOffset int + if saveXML.IsValid() { + savedOffset = p.savedOffset() + } + tok, err := p.Token() + if err != nil { + return err + } + switch t := tok.(type) { + case StartElement: + consumed := false + if sv.IsValid() { + consumed, err = p.unmarshalPath(tinfo, sv, nil, &t) + if err != nil { + return err + } + if !consumed && saveAny.IsValid() { + consumed = true + if err := p.unmarshal(saveAny, &t); err != nil { + return err + } + } + } + if !consumed { + if err := p.Skip(); err != nil { + return err + } + } + + case EndElement: + if saveXML.IsValid() { + saveXMLData = p.saved.Bytes()[saveXMLIndex:savedOffset] + if saveXMLIndex == 0 { + p.saved = nil + } + } + break Loop + + case CharData: + if saveData.IsValid() { + data = append(data, t...) + } + + case Comment: + if saveComment.IsValid() { + comment = append(comment, t...) + } + } + } + + if saveData.IsValid() && saveData.CanInterface() && saveData.Type().Implements(textUnmarshalerType) { + if err := saveData.Interface().(encoding.TextUnmarshaler).UnmarshalText(data); err != nil { + return err + } + saveData = reflect.Value{} + } + + if saveData.IsValid() && saveData.CanAddr() { + pv := saveData.Addr() + if pv.CanInterface() && pv.Type().Implements(textUnmarshalerType) { + if err := pv.Interface().(encoding.TextUnmarshaler).UnmarshalText(data); err != nil { + return err + } + saveData = reflect.Value{} + } + } + + if err := copyValue(saveData, data); err != nil { + return err + } + + switch t := saveComment; t.Kind() { + case reflect.String: + t.SetString(string(comment)) + case reflect.Slice: + t.Set(reflect.ValueOf(comment)) + } + + switch t := saveXML; t.Kind() { + case reflect.String: + t.SetString(string(saveXMLData)) + case reflect.Slice: + t.Set(reflect.ValueOf(saveXMLData)) + } + + return nil +} + +func copyValue(dst reflect.Value, src []byte) (err error) { + dst0 := dst + + if dst.Kind() == reflect.Ptr { + if dst.IsNil() { + dst.Set(reflect.New(dst.Type().Elem())) + } + dst = dst.Elem() + } + + // Save accumulated data. + switch dst.Kind() { + case reflect.Invalid: + // Probably a comment. + default: + return errors.New("cannot unmarshal into " + dst0.Type().String()) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + itmp, err := strconv.ParseInt(string(src), 10, dst.Type().Bits()) + if err != nil { + return err + } + dst.SetInt(itmp) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + utmp, err := strconv.ParseUint(string(src), 10, dst.Type().Bits()) + if err != nil { + return err + } + dst.SetUint(utmp) + case reflect.Float32, reflect.Float64: + ftmp, err := strconv.ParseFloat(string(src), dst.Type().Bits()) + if err != nil { + return err + } + dst.SetFloat(ftmp) + case reflect.Bool: + value, err := strconv.ParseBool(strings.TrimSpace(string(src))) + if err != nil { + return err + } + dst.SetBool(value) + case reflect.String: + dst.SetString(string(src)) + case reflect.Slice: + if len(src) == 0 { + // non-nil to flag presence + src = []byte{} + } + dst.SetBytes(src) + } + return nil +} + +// unmarshalPath walks down an XML structure looking for wanted +// paths, and calls unmarshal on them. +// The consumed result tells whether XML elements have been consumed +// from the Decoder until start's matching end element, or if it's +// still untouched because start is uninteresting for sv's fields. +func (p *Decoder) unmarshalPath(tinfo *typeInfo, sv reflect.Value, parents []string, start *StartElement) (consumed bool, err error) { + recurse := false +Loop: + for i := range tinfo.fields { + finfo := &tinfo.fields[i] + if finfo.flags&fElement == 0 || len(finfo.parents) < len(parents) || finfo.xmlns != "" && finfo.xmlns != start.Name.Space { + continue + } + for j := range parents { + if parents[j] != finfo.parents[j] { + continue Loop + } + } + if len(finfo.parents) == len(parents) && finfo.name == start.Name.Local { + // It's a perfect match, unmarshal the field. + return true, p.unmarshal(finfo.value(sv), start) + } + if len(finfo.parents) > len(parents) && finfo.parents[len(parents)] == start.Name.Local { + // It's a prefix for the field. Break and recurse + // since it's not ok for one field path to be itself + // the prefix for another field path. + recurse = true + + // We can reuse the same slice as long as we + // don't try to append to it. + parents = finfo.parents[:len(parents)+1] + break + } + } + if !recurse { + // We have no business with this element. + return false, nil + } + // The element is not a perfect match for any field, but one + // or more fields have the path to this element as a parent + // prefix. Recurse and attempt to match these. + for { + var tok Token + tok, err = p.Token() + if err != nil { + return true, err + } + switch t := tok.(type) { + case StartElement: + consumed2, err := p.unmarshalPath(tinfo, sv, parents, &t) + if err != nil { + return true, err + } + if !consumed2 { + if err := p.Skip(); err != nil { + return true, err + } + } + case EndElement: + return true, nil + } + } +} + +// Skip reads tokens until it has consumed the end element +// matching the most recent start element already consumed. +// It recurs if it encounters a start element, so it can be used to +// skip nested structures. +// It returns nil if it finds an end element matching the start +// element; otherwise it returns an error describing the problem. +func (d *Decoder) Skip() error { + for { + tok, err := d.Token() + if err != nil { + return err + } + switch tok.(type) { + case StartElement: + if err := d.Skip(); err != nil { + return err + } + case EndElement: + return nil + } + } +} diff --git a/vendor/golang.org/x/net/webdav/internal/xml/read_test.go b/vendor/golang.org/x/net/webdav/internal/xml/read_test.go new file mode 100644 index 0000000..02f1e10 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/read_test.go @@ -0,0 +1,744 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xml + +import ( + "bytes" + "fmt" + "io" + "reflect" + "strings" + "testing" + "time" +) + +// Stripped down Atom feed data structures. + +func TestUnmarshalFeed(t *testing.T) { + var f Feed + if err := Unmarshal([]byte(atomFeedString), &f); err != nil { + t.Fatalf("Unmarshal: %s", err) + } + if !reflect.DeepEqual(f, atomFeed) { + t.Fatalf("have %#v\nwant %#v", f, atomFeed) + } +} + +// hget http://codereview.appspot.com/rss/mine/rsc +const atomFeedString = ` + +Code Review - My issueshttp://codereview.appspot.com/rietveld<>rietveld: an attempt at pubsubhubbub +2009-10-04T01:35:58+00:00email-address-removedurn:md5:134d9179c41f806be79b3a5f7877d19a + An attempt at adding pubsubhubbub support to Rietveld. +http://code.google.com/p/pubsubhubbub +http://code.google.com/p/rietveld/issues/detail?id=155 + +The server side of the protocol is trivial: + 1. add a &lt;link rel=&quot;hub&quot; href=&quot;hub-server&quot;&gt; tag to all + feeds that will be pubsubhubbubbed. + 2. every time one of those feeds changes, tell the hub + with a simple POST request. + +I have tested this by adding debug prints to a local hub +server and checking that the server got the right publish +requests. + +I can&#39;t quite get the server to work, but I think the bug +is not in my code. I think that the server expects to be +able to grab the feed and see the feed&#39;s actual URL in +the link rel=&quot;self&quot;, but the default value for that drops +the :port from the URL, and I cannot for the life of me +figure out how to get the Atom generator deep inside +django not to do that, or even where it is doing that, +or even what code is running to generate the Atom feed. +(I thought I knew but I added some assert False statements +and it kept running!) + +Ignoring that particular problem, I would appreciate +feedback on the right way to get the two values at +the top of feeds.py marked NOTE(rsc). + + +rietveld: correct tab handling +2009-10-03T23:02:17+00:00email-address-removedurn:md5:0a2a4f19bb815101f0ba2904aed7c35a + This fixes the buggy tab rendering that can be seen at +http://codereview.appspot.com/116075/diff/1/2 + +The fundamental problem was that the tab code was +not being told what column the text began in, so it +didn&#39;t know where to put the tab stops. Another problem +was that some of the code assumed that string byte +offsets were the same as column offsets, which is only +true if there are no tabs. + +In the process of fixing this, I cleaned up the arguments +to Fold and ExpandTabs and renamed them Break and +_ExpandTabs so that I could be sure that I found all the +call sites. I also wanted to verify that ExpandTabs was +not being used from outside intra_region_diff.py. + + + ` + +type Feed struct { + XMLName Name `xml:"http://www.w3.org/2005/Atom feed"` + Title string `xml:"title"` + Id string `xml:"id"` + Link []Link `xml:"link"` + Updated time.Time `xml:"updated,attr"` + Author Person `xml:"author"` + Entry []Entry `xml:"entry"` +} + +type Entry struct { + Title string `xml:"title"` + Id string `xml:"id"` + Link []Link `xml:"link"` + Updated time.Time `xml:"updated"` + Author Person `xml:"author"` + Summary Text `xml:"summary"` +} + +type Link struct { + Rel string `xml:"rel,attr,omitempty"` + Href string `xml:"href,attr"` +} + +type Person struct { + Name string `xml:"name"` + URI string `xml:"uri"` + Email string `xml:"email"` + InnerXML string `xml:",innerxml"` +} + +type Text struct { + Type string `xml:"type,attr,omitempty"` + Body string `xml:",chardata"` +} + +var atomFeed = Feed{ + XMLName: Name{"http://www.w3.org/2005/Atom", "feed"}, + Title: "Code Review - My issues", + Link: []Link{ + {Rel: "alternate", Href: "http://codereview.appspot.com/"}, + {Rel: "self", Href: "http://codereview.appspot.com/rss/mine/rsc"}, + }, + Id: "http://codereview.appspot.com/", + Updated: ParseTime("2009-10-04T01:35:58+00:00"), + Author: Person{ + Name: "rietveld<>", + InnerXML: "rietveld<>", + }, + Entry: []Entry{ + { + Title: "rietveld: an attempt at pubsubhubbub\n", + Link: []Link{ + {Rel: "alternate", Href: "http://codereview.appspot.com/126085"}, + }, + Updated: ParseTime("2009-10-04T01:35:58+00:00"), + Author: Person{ + Name: "email-address-removed", + InnerXML: "email-address-removed", + }, + Id: "urn:md5:134d9179c41f806be79b3a5f7877d19a", + Summary: Text{ + Type: "html", + Body: ` + An attempt at adding pubsubhubbub support to Rietveld. +http://code.google.com/p/pubsubhubbub +http://code.google.com/p/rietveld/issues/detail?id=155 + +The server side of the protocol is trivial: + 1. add a <link rel="hub" href="hub-server"> tag to all + feeds that will be pubsubhubbubbed. + 2. every time one of those feeds changes, tell the hub + with a simple POST request. + +I have tested this by adding debug prints to a local hub +server and checking that the server got the right publish +requests. + +I can't quite get the server to work, but I think the bug +is not in my code. I think that the server expects to be +able to grab the feed and see the feed's actual URL in +the link rel="self", but the default value for that drops +the :port from the URL, and I cannot for the life of me +figure out how to get the Atom generator deep inside +django not to do that, or even where it is doing that, +or even what code is running to generate the Atom feed. +(I thought I knew but I added some assert False statements +and it kept running!) + +Ignoring that particular problem, I would appreciate +feedback on the right way to get the two values at +the top of feeds.py marked NOTE(rsc). + + +`, + }, + }, + { + Title: "rietveld: correct tab handling\n", + Link: []Link{ + {Rel: "alternate", Href: "http://codereview.appspot.com/124106"}, + }, + Updated: ParseTime("2009-10-03T23:02:17+00:00"), + Author: Person{ + Name: "email-address-removed", + InnerXML: "email-address-removed", + }, + Id: "urn:md5:0a2a4f19bb815101f0ba2904aed7c35a", + Summary: Text{ + Type: "html", + Body: ` + This fixes the buggy tab rendering that can be seen at +http://codereview.appspot.com/116075/diff/1/2 + +The fundamental problem was that the tab code was +not being told what column the text began in, so it +didn't know where to put the tab stops. Another problem +was that some of the code assumed that string byte +offsets were the same as column offsets, which is only +true if there are no tabs. + +In the process of fixing this, I cleaned up the arguments +to Fold and ExpandTabs and renamed them Break and +_ExpandTabs so that I could be sure that I found all the +call sites. I also wanted to verify that ExpandTabs was +not being used from outside intra_region_diff.py. + + +`, + }, + }, + }, +} + +const pathTestString = ` + + 1 + + + A + + + B + + + C + D + + <_> + E + + + 2 + +` + +type PathTestItem struct { + Value string +} + +type PathTestA struct { + Items []PathTestItem `xml:">Item1"` + Before, After string +} + +type PathTestB struct { + Other []PathTestItem `xml:"Items>Item1"` + Before, After string +} + +type PathTestC struct { + Values1 []string `xml:"Items>Item1>Value"` + Values2 []string `xml:"Items>Item2>Value"` + Before, After string +} + +type PathTestSet struct { + Item1 []PathTestItem +} + +type PathTestD struct { + Other PathTestSet `xml:"Items"` + Before, After string +} + +type PathTestE struct { + Underline string `xml:"Items>_>Value"` + Before, After string +} + +var pathTests = []interface{}{ + &PathTestA{Items: []PathTestItem{{"A"}, {"D"}}, Before: "1", After: "2"}, + &PathTestB{Other: []PathTestItem{{"A"}, {"D"}}, Before: "1", After: "2"}, + &PathTestC{Values1: []string{"A", "C", "D"}, Values2: []string{"B"}, Before: "1", After: "2"}, + &PathTestD{Other: PathTestSet{Item1: []PathTestItem{{"A"}, {"D"}}}, Before: "1", After: "2"}, + &PathTestE{Underline: "E", Before: "1", After: "2"}, +} + +func TestUnmarshalPaths(t *testing.T) { + for _, pt := range pathTests { + v := reflect.New(reflect.TypeOf(pt).Elem()).Interface() + if err := Unmarshal([]byte(pathTestString), v); err != nil { + t.Fatalf("Unmarshal: %s", err) + } + if !reflect.DeepEqual(v, pt) { + t.Fatalf("have %#v\nwant %#v", v, pt) + } + } +} + +type BadPathTestA struct { + First string `xml:"items>item1"` + Other string `xml:"items>item2"` + Second string `xml:"items"` +} + +type BadPathTestB struct { + Other string `xml:"items>item2>value"` + First string `xml:"items>item1"` + Second string `xml:"items>item1>value"` +} + +type BadPathTestC struct { + First string + Second string `xml:"First"` +} + +type BadPathTestD struct { + BadPathEmbeddedA + BadPathEmbeddedB +} + +type BadPathEmbeddedA struct { + First string +} + +type BadPathEmbeddedB struct { + Second string `xml:"First"` +} + +var badPathTests = []struct { + v, e interface{} +}{ + {&BadPathTestA{}, &TagPathError{reflect.TypeOf(BadPathTestA{}), "First", "items>item1", "Second", "items"}}, + {&BadPathTestB{}, &TagPathError{reflect.TypeOf(BadPathTestB{}), "First", "items>item1", "Second", "items>item1>value"}}, + {&BadPathTestC{}, &TagPathError{reflect.TypeOf(BadPathTestC{}), "First", "", "Second", "First"}}, + {&BadPathTestD{}, &TagPathError{reflect.TypeOf(BadPathTestD{}), "First", "", "Second", "First"}}, +} + +func TestUnmarshalBadPaths(t *testing.T) { + for _, tt := range badPathTests { + err := Unmarshal([]byte(pathTestString), tt.v) + if !reflect.DeepEqual(err, tt.e) { + t.Fatalf("Unmarshal with %#v didn't fail properly:\nhave %#v,\nwant %#v", tt.v, err, tt.e) + } + } +} + +const OK = "OK" +const withoutNameTypeData = ` + +` + +type TestThree struct { + XMLName Name `xml:"Test3"` + Attr string `xml:",attr"` +} + +func TestUnmarshalWithoutNameType(t *testing.T) { + var x TestThree + if err := Unmarshal([]byte(withoutNameTypeData), &x); err != nil { + t.Fatalf("Unmarshal: %s", err) + } + if x.Attr != OK { + t.Fatalf("have %v\nwant %v", x.Attr, OK) + } +} + +func TestUnmarshalAttr(t *testing.T) { + type ParamVal struct { + Int int `xml:"int,attr"` + } + + type ParamPtr struct { + Int *int `xml:"int,attr"` + } + + type ParamStringPtr struct { + Int *string `xml:"int,attr"` + } + + x := []byte(``) + + p1 := &ParamPtr{} + if err := Unmarshal(x, p1); err != nil { + t.Fatalf("Unmarshal: %s", err) + } + if p1.Int == nil { + t.Fatalf("Unmarshal failed in to *int field") + } else if *p1.Int != 1 { + t.Fatalf("Unmarshal with %s failed:\nhave %#v,\n want %#v", x, p1.Int, 1) + } + + p2 := &ParamVal{} + if err := Unmarshal(x, p2); err != nil { + t.Fatalf("Unmarshal: %s", err) + } + if p2.Int != 1 { + t.Fatalf("Unmarshal with %s failed:\nhave %#v,\n want %#v", x, p2.Int, 1) + } + + p3 := &ParamStringPtr{} + if err := Unmarshal(x, p3); err != nil { + t.Fatalf("Unmarshal: %s", err) + } + if p3.Int == nil { + t.Fatalf("Unmarshal failed in to *string field") + } else if *p3.Int != "1" { + t.Fatalf("Unmarshal with %s failed:\nhave %#v,\n want %#v", x, p3.Int, 1) + } +} + +type Tables struct { + HTable string `xml:"http://www.w3.org/TR/html4/ table"` + FTable string `xml:"http://www.w3schools.com/furniture table"` +} + +var tables = []struct { + xml string + tab Tables + ns string +}{ + { + xml: `` + + `hello
    ` + + `world
    ` + + `
    `, + tab: Tables{"hello", "world"}, + }, + { + xml: `` + + `world
    ` + + `hello
    ` + + `
    `, + tab: Tables{"hello", "world"}, + }, + { + xml: `` + + `world` + + `hello` + + ``, + tab: Tables{"hello", "world"}, + }, + { + xml: `` + + `bogus
    ` + + `
    `, + tab: Tables{}, + }, + { + xml: `` + + `only
    ` + + `
    `, + tab: Tables{HTable: "only"}, + ns: "http://www.w3.org/TR/html4/", + }, + { + xml: `` + + `only
    ` + + `
    `, + tab: Tables{FTable: "only"}, + ns: "http://www.w3schools.com/furniture", + }, + { + xml: `` + + `only
    ` + + `
    `, + tab: Tables{}, + ns: "something else entirely", + }, +} + +func TestUnmarshalNS(t *testing.T) { + for i, tt := range tables { + var dst Tables + var err error + if tt.ns != "" { + d := NewDecoder(strings.NewReader(tt.xml)) + d.DefaultSpace = tt.ns + err = d.Decode(&dst) + } else { + err = Unmarshal([]byte(tt.xml), &dst) + } + if err != nil { + t.Errorf("#%d: Unmarshal: %v", i, err) + continue + } + want := tt.tab + if dst != want { + t.Errorf("#%d: dst=%+v, want %+v", i, dst, want) + } + } +} + +func TestRoundTrip(t *testing.T) { + // From issue 7535 + const s = `` + in := bytes.NewBufferString(s) + for i := 0; i < 10; i++ { + out := &bytes.Buffer{} + d := NewDecoder(in) + e := NewEncoder(out) + + for { + t, err := d.Token() + if err == io.EOF { + break + } + if err != nil { + fmt.Println("failed:", err) + return + } + e.EncodeToken(t) + } + e.Flush() + in = out + } + if got := in.String(); got != s { + t.Errorf("have: %q\nwant: %q\n", got, s) + } +} + +func TestMarshalNS(t *testing.T) { + dst := Tables{"hello", "world"} + data, err := Marshal(&dst) + if err != nil { + t.Fatalf("Marshal: %v", err) + } + want := `hello
    world
    ` + str := string(data) + if str != want { + t.Errorf("have: %q\nwant: %q\n", str, want) + } +} + +type TableAttrs struct { + TAttr TAttr +} + +type TAttr struct { + HTable string `xml:"http://www.w3.org/TR/html4/ table,attr"` + FTable string `xml:"http://www.w3schools.com/furniture table,attr"` + Lang string `xml:"http://www.w3.org/XML/1998/namespace lang,attr,omitempty"` + Other1 string `xml:"http://golang.org/xml/ other,attr,omitempty"` + Other2 string `xml:"http://golang.org/xmlfoo/ other,attr,omitempty"` + Other3 string `xml:"http://golang.org/json/ other,attr,omitempty"` + Other4 string `xml:"http://golang.org/2/json/ other,attr,omitempty"` +} + +var tableAttrs = []struct { + xml string + tab TableAttrs + ns string +}{ + { + xml: ``, + tab: TableAttrs{TAttr{HTable: "hello", FTable: "world"}}, + }, + { + xml: ``, + tab: TableAttrs{TAttr{HTable: "hello", FTable: "world"}}, + }, + { + xml: ``, + tab: TableAttrs{TAttr{HTable: "hello", FTable: "world"}}, + }, + { + // Default space does not apply to attribute names. + xml: ``, + tab: TableAttrs{TAttr{HTable: "hello", FTable: ""}}, + }, + { + // Default space does not apply to attribute names. + xml: ``, + tab: TableAttrs{TAttr{HTable: "", FTable: "world"}}, + }, + { + xml: ``, + tab: TableAttrs{}, + }, + { + // Default space does not apply to attribute names. + xml: ``, + tab: TableAttrs{TAttr{HTable: "hello", FTable: ""}}, + ns: "http://www.w3schools.com/furniture", + }, + { + // Default space does not apply to attribute names. + xml: ``, + tab: TableAttrs{TAttr{HTable: "", FTable: "world"}}, + ns: "http://www.w3.org/TR/html4/", + }, + { + xml: ``, + tab: TableAttrs{}, + ns: "something else entirely", + }, +} + +func TestUnmarshalNSAttr(t *testing.T) { + for i, tt := range tableAttrs { + var dst TableAttrs + var err error + if tt.ns != "" { + d := NewDecoder(strings.NewReader(tt.xml)) + d.DefaultSpace = tt.ns + err = d.Decode(&dst) + } else { + err = Unmarshal([]byte(tt.xml), &dst) + } + if err != nil { + t.Errorf("#%d: Unmarshal: %v", i, err) + continue + } + want := tt.tab + if dst != want { + t.Errorf("#%d: dst=%+v, want %+v", i, dst, want) + } + } +} + +func TestMarshalNSAttr(t *testing.T) { + src := TableAttrs{TAttr{"hello", "world", "en_US", "other1", "other2", "other3", "other4"}} + data, err := Marshal(&src) + if err != nil { + t.Fatalf("Marshal: %v", err) + } + want := `` + str := string(data) + if str != want { + t.Errorf("Marshal:\nhave: %#q\nwant: %#q\n", str, want) + } + + var dst TableAttrs + if err := Unmarshal(data, &dst); err != nil { + t.Errorf("Unmarshal: %v", err) + } + + if dst != src { + t.Errorf("Unmarshal = %q, want %q", dst, src) + } +} + +type MyCharData struct { + body string +} + +func (m *MyCharData) UnmarshalXML(d *Decoder, start StartElement) error { + for { + t, err := d.Token() + if err == io.EOF { // found end of element + break + } + if err != nil { + return err + } + if char, ok := t.(CharData); ok { + m.body += string(char) + } + } + return nil +} + +var _ Unmarshaler = (*MyCharData)(nil) + +func (m *MyCharData) UnmarshalXMLAttr(attr Attr) error { + panic("must not call") +} + +type MyAttr struct { + attr string +} + +func (m *MyAttr) UnmarshalXMLAttr(attr Attr) error { + m.attr = attr.Value + return nil +} + +var _ UnmarshalerAttr = (*MyAttr)(nil) + +type MyStruct struct { + Data *MyCharData + Attr *MyAttr `xml:",attr"` + + Data2 MyCharData + Attr2 MyAttr `xml:",attr"` +} + +func TestUnmarshaler(t *testing.T) { + xml := ` + + hello world + howdy world + + ` + + var m MyStruct + if err := Unmarshal([]byte(xml), &m); err != nil { + t.Fatal(err) + } + + if m.Data == nil || m.Attr == nil || m.Data.body != "hello world" || m.Attr.attr != "attr1" || m.Data2.body != "howdy world" || m.Attr2.attr != "attr2" { + t.Errorf("m=%#+v\n", m) + } +} + +type Pea struct { + Cotelydon string +} + +type Pod struct { + Pea interface{} `xml:"Pea"` +} + +// https://golang.org/issue/6836 +func TestUnmarshalIntoInterface(t *testing.T) { + pod := new(Pod) + pod.Pea = new(Pea) + xml := `Green stuff` + err := Unmarshal([]byte(xml), pod) + if err != nil { + t.Fatalf("failed to unmarshal %q: %v", xml, err) + } + pea, ok := pod.Pea.(*Pea) + if !ok { + t.Fatalf("unmarshalled into wrong type: have %T want *Pea", pod.Pea) + } + have, want := pea.Cotelydon, "Green stuff" + if have != want { + t.Errorf("failed to unmarshal into interface, have %q want %q", have, want) + } +} diff --git a/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go b/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go new file mode 100644 index 0000000..fdde288 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go @@ -0,0 +1,371 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xml + +import ( + "fmt" + "reflect" + "strings" + "sync" +) + +// typeInfo holds details for the xml representation of a type. +type typeInfo struct { + xmlname *fieldInfo + fields []fieldInfo +} + +// fieldInfo holds details for the xml representation of a single field. +type fieldInfo struct { + idx []int + name string + xmlns string + flags fieldFlags + parents []string +} + +type fieldFlags int + +const ( + fElement fieldFlags = 1 << iota + fAttr + fCharData + fInnerXml + fComment + fAny + + fOmitEmpty + + fMode = fElement | fAttr | fCharData | fInnerXml | fComment | fAny +) + +var tinfoMap = make(map[reflect.Type]*typeInfo) +var tinfoLock sync.RWMutex + +var nameType = reflect.TypeOf(Name{}) + +// getTypeInfo returns the typeInfo structure with details necessary +// for marshalling and unmarshalling typ. +func getTypeInfo(typ reflect.Type) (*typeInfo, error) { + tinfoLock.RLock() + tinfo, ok := tinfoMap[typ] + tinfoLock.RUnlock() + if ok { + return tinfo, nil + } + tinfo = &typeInfo{} + if typ.Kind() == reflect.Struct && typ != nameType { + n := typ.NumField() + for i := 0; i < n; i++ { + f := typ.Field(i) + if f.PkgPath != "" || f.Tag.Get("xml") == "-" { + continue // Private field + } + + // For embedded structs, embed its fields. + if f.Anonymous { + t := f.Type + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + if t.Kind() == reflect.Struct { + inner, err := getTypeInfo(t) + if err != nil { + return nil, err + } + if tinfo.xmlname == nil { + tinfo.xmlname = inner.xmlname + } + for _, finfo := range inner.fields { + finfo.idx = append([]int{i}, finfo.idx...) + if err := addFieldInfo(typ, tinfo, &finfo); err != nil { + return nil, err + } + } + continue + } + } + + finfo, err := structFieldInfo(typ, &f) + if err != nil { + return nil, err + } + + if f.Name == "XMLName" { + tinfo.xmlname = finfo + continue + } + + // Add the field if it doesn't conflict with other fields. + if err := addFieldInfo(typ, tinfo, finfo); err != nil { + return nil, err + } + } + } + tinfoLock.Lock() + tinfoMap[typ] = tinfo + tinfoLock.Unlock() + return tinfo, nil +} + +// structFieldInfo builds and returns a fieldInfo for f. +func structFieldInfo(typ reflect.Type, f *reflect.StructField) (*fieldInfo, error) { + finfo := &fieldInfo{idx: f.Index} + + // Split the tag from the xml namespace if necessary. + tag := f.Tag.Get("xml") + if i := strings.Index(tag, " "); i >= 0 { + finfo.xmlns, tag = tag[:i], tag[i+1:] + } + + // Parse flags. + tokens := strings.Split(tag, ",") + if len(tokens) == 1 { + finfo.flags = fElement + } else { + tag = tokens[0] + for _, flag := range tokens[1:] { + switch flag { + case "attr": + finfo.flags |= fAttr + case "chardata": + finfo.flags |= fCharData + case "innerxml": + finfo.flags |= fInnerXml + case "comment": + finfo.flags |= fComment + case "any": + finfo.flags |= fAny + case "omitempty": + finfo.flags |= fOmitEmpty + } + } + + // Validate the flags used. + valid := true + switch mode := finfo.flags & fMode; mode { + case 0: + finfo.flags |= fElement + case fAttr, fCharData, fInnerXml, fComment, fAny: + if f.Name == "XMLName" || tag != "" && mode != fAttr { + valid = false + } + default: + // This will also catch multiple modes in a single field. + valid = false + } + if finfo.flags&fMode == fAny { + finfo.flags |= fElement + } + if finfo.flags&fOmitEmpty != 0 && finfo.flags&(fElement|fAttr) == 0 { + valid = false + } + if !valid { + return nil, fmt.Errorf("xml: invalid tag in field %s of type %s: %q", + f.Name, typ, f.Tag.Get("xml")) + } + } + + // Use of xmlns without a name is not allowed. + if finfo.xmlns != "" && tag == "" { + return nil, fmt.Errorf("xml: namespace without name in field %s of type %s: %q", + f.Name, typ, f.Tag.Get("xml")) + } + + if f.Name == "XMLName" { + // The XMLName field records the XML element name. Don't + // process it as usual because its name should default to + // empty rather than to the field name. + finfo.name = tag + return finfo, nil + } + + if tag == "" { + // If the name part of the tag is completely empty, get + // default from XMLName of underlying struct if feasible, + // or field name otherwise. + if xmlname := lookupXMLName(f.Type); xmlname != nil { + finfo.xmlns, finfo.name = xmlname.xmlns, xmlname.name + } else { + finfo.name = f.Name + } + return finfo, nil + } + + if finfo.xmlns == "" && finfo.flags&fAttr == 0 { + // If it's an element no namespace specified, get the default + // from the XMLName of enclosing struct if possible. + if xmlname := lookupXMLName(typ); xmlname != nil { + finfo.xmlns = xmlname.xmlns + } + } + + // Prepare field name and parents. + parents := strings.Split(tag, ">") + if parents[0] == "" { + parents[0] = f.Name + } + if parents[len(parents)-1] == "" { + return nil, fmt.Errorf("xml: trailing '>' in field %s of type %s", f.Name, typ) + } + finfo.name = parents[len(parents)-1] + if len(parents) > 1 { + if (finfo.flags & fElement) == 0 { + return nil, fmt.Errorf("xml: %s chain not valid with %s flag", tag, strings.Join(tokens[1:], ",")) + } + finfo.parents = parents[:len(parents)-1] + } + + // If the field type has an XMLName field, the names must match + // so that the behavior of both marshalling and unmarshalling + // is straightforward and unambiguous. + if finfo.flags&fElement != 0 { + ftyp := f.Type + xmlname := lookupXMLName(ftyp) + if xmlname != nil && xmlname.name != finfo.name { + return nil, fmt.Errorf("xml: name %q in tag of %s.%s conflicts with name %q in %s.XMLName", + finfo.name, typ, f.Name, xmlname.name, ftyp) + } + } + return finfo, nil +} + +// lookupXMLName returns the fieldInfo for typ's XMLName field +// in case it exists and has a valid xml field tag, otherwise +// it returns nil. +func lookupXMLName(typ reflect.Type) (xmlname *fieldInfo) { + for typ.Kind() == reflect.Ptr { + typ = typ.Elem() + } + if typ.Kind() != reflect.Struct { + return nil + } + for i, n := 0, typ.NumField(); i < n; i++ { + f := typ.Field(i) + if f.Name != "XMLName" { + continue + } + finfo, err := structFieldInfo(typ, &f) + if finfo.name != "" && err == nil { + return finfo + } + // Also consider errors as a non-existent field tag + // and let getTypeInfo itself report the error. + break + } + return nil +} + +func min(a, b int) int { + if a <= b { + return a + } + return b +} + +// addFieldInfo adds finfo to tinfo.fields if there are no +// conflicts, or if conflicts arise from previous fields that were +// obtained from deeper embedded structures than finfo. In the latter +// case, the conflicting entries are dropped. +// A conflict occurs when the path (parent + name) to a field is +// itself a prefix of another path, or when two paths match exactly. +// It is okay for field paths to share a common, shorter prefix. +func addFieldInfo(typ reflect.Type, tinfo *typeInfo, newf *fieldInfo) error { + var conflicts []int +Loop: + // First, figure all conflicts. Most working code will have none. + for i := range tinfo.fields { + oldf := &tinfo.fields[i] + if oldf.flags&fMode != newf.flags&fMode { + continue + } + if oldf.xmlns != "" && newf.xmlns != "" && oldf.xmlns != newf.xmlns { + continue + } + minl := min(len(newf.parents), len(oldf.parents)) + for p := 0; p < minl; p++ { + if oldf.parents[p] != newf.parents[p] { + continue Loop + } + } + if len(oldf.parents) > len(newf.parents) { + if oldf.parents[len(newf.parents)] == newf.name { + conflicts = append(conflicts, i) + } + } else if len(oldf.parents) < len(newf.parents) { + if newf.parents[len(oldf.parents)] == oldf.name { + conflicts = append(conflicts, i) + } + } else { + if newf.name == oldf.name { + conflicts = append(conflicts, i) + } + } + } + // Without conflicts, add the new field and return. + if conflicts == nil { + tinfo.fields = append(tinfo.fields, *newf) + return nil + } + + // If any conflict is shallower, ignore the new field. + // This matches the Go field resolution on embedding. + for _, i := range conflicts { + if len(tinfo.fields[i].idx) < len(newf.idx) { + return nil + } + } + + // Otherwise, if any of them is at the same depth level, it's an error. + for _, i := range conflicts { + oldf := &tinfo.fields[i] + if len(oldf.idx) == len(newf.idx) { + f1 := typ.FieldByIndex(oldf.idx) + f2 := typ.FieldByIndex(newf.idx) + return &TagPathError{typ, f1.Name, f1.Tag.Get("xml"), f2.Name, f2.Tag.Get("xml")} + } + } + + // Otherwise, the new field is shallower, and thus takes precedence, + // so drop the conflicting fields from tinfo and append the new one. + for c := len(conflicts) - 1; c >= 0; c-- { + i := conflicts[c] + copy(tinfo.fields[i:], tinfo.fields[i+1:]) + tinfo.fields = tinfo.fields[:len(tinfo.fields)-1] + } + tinfo.fields = append(tinfo.fields, *newf) + return nil +} + +// A TagPathError represents an error in the unmarshalling process +// caused by the use of field tags with conflicting paths. +type TagPathError struct { + Struct reflect.Type + Field1, Tag1 string + Field2, Tag2 string +} + +func (e *TagPathError) Error() string { + return fmt.Sprintf("%s field %q with tag %q conflicts with field %q with tag %q", e.Struct, e.Field1, e.Tag1, e.Field2, e.Tag2) +} + +// value returns v's field value corresponding to finfo. +// It's equivalent to v.FieldByIndex(finfo.idx), but initializes +// and dereferences pointers as necessary. +func (finfo *fieldInfo) value(v reflect.Value) reflect.Value { + for i, x := range finfo.idx { + if i > 0 { + t := v.Type() + if t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct { + if v.IsNil() { + v.Set(reflect.New(v.Type().Elem())) + } + v = v.Elem() + } + } + v = v.Field(x) + } + return v +} diff --git a/vendor/golang.org/x/net/webdav/internal/xml/xml.go b/vendor/golang.org/x/net/webdav/internal/xml/xml.go new file mode 100644 index 0000000..5b79cbe --- /dev/null +++ b/vendor/golang.org/x/net/webdav/internal/xml/xml.go @@ -0,0 +1,1998 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package xml implements a simple XML 1.0 parser that +// understands XML name spaces. +package xml + +// References: +// Annotated XML spec: http://www.xml.com/axml/testaxml.htm +// XML name spaces: http://www.w3.org/TR/REC-xml-names/ + +// TODO(rsc): +// Test error handling. + +import ( + "bufio" + "bytes" + "errors" + "fmt" + "io" + "strconv" + "strings" + "unicode" + "unicode/utf8" +) + +// A SyntaxError represents a syntax error in the XML input stream. +type SyntaxError struct { + Msg string + Line int +} + +func (e *SyntaxError) Error() string { + return "XML syntax error on line " + strconv.Itoa(e.Line) + ": " + e.Msg +} + +// A Name represents an XML name (Local) annotated with a name space +// identifier (Space). In tokens returned by Decoder.Token, the Space +// identifier is given as a canonical URL, not the short prefix used in +// the document being parsed. +// +// As a special case, XML namespace declarations will use the literal +// string "xmlns" for the Space field instead of the fully resolved URL. +// See Encoder.EncodeToken for more information on namespace encoding +// behaviour. +type Name struct { + Space, Local string +} + +// isNamespace reports whether the name is a namespace-defining name. +func (name Name) isNamespace() bool { + return name.Local == "xmlns" || name.Space == "xmlns" +} + +// An Attr represents an attribute in an XML element (Name=Value). +type Attr struct { + Name Name + Value string +} + +// A Token is an interface holding one of the token types: +// StartElement, EndElement, CharData, Comment, ProcInst, or Directive. +type Token interface{} + +// A StartElement represents an XML start element. +type StartElement struct { + Name Name + Attr []Attr +} + +func (e StartElement) Copy() StartElement { + attrs := make([]Attr, len(e.Attr)) + copy(attrs, e.Attr) + e.Attr = attrs + return e +} + +// End returns the corresponding XML end element. +func (e StartElement) End() EndElement { + return EndElement{e.Name} +} + +// setDefaultNamespace sets the namespace of the element +// as the default for all elements contained within it. +func (e *StartElement) setDefaultNamespace() { + if e.Name.Space == "" { + // If there's no namespace on the element, don't + // set the default. Strictly speaking this might be wrong, as + // we can't tell if the element had no namespace set + // or was just using the default namespace. + return + } + // Don't add a default name space if there's already one set. + for _, attr := range e.Attr { + if attr.Name.Space == "" && attr.Name.Local == "xmlns" { + return + } + } + e.Attr = append(e.Attr, Attr{ + Name: Name{ + Local: "xmlns", + }, + Value: e.Name.Space, + }) +} + +// An EndElement represents an XML end element. +type EndElement struct { + Name Name +} + +// A CharData represents XML character data (raw text), +// in which XML escape sequences have been replaced by +// the characters they represent. +type CharData []byte + +func makeCopy(b []byte) []byte { + b1 := make([]byte, len(b)) + copy(b1, b) + return b1 +} + +func (c CharData) Copy() CharData { return CharData(makeCopy(c)) } + +// A Comment represents an XML comment of the form . +// The bytes do not include the comment markers. +type Comment []byte + +func (c Comment) Copy() Comment { return Comment(makeCopy(c)) } + +// A ProcInst represents an XML processing instruction of the form +type ProcInst struct { + Target string + Inst []byte +} + +func (p ProcInst) Copy() ProcInst { + p.Inst = makeCopy(p.Inst) + return p +} + +// A Directive represents an XML directive of the form . +// The bytes do not include the markers. +type Directive []byte + +func (d Directive) Copy() Directive { return Directive(makeCopy(d)) } + +// CopyToken returns a copy of a Token. +func CopyToken(t Token) Token { + switch v := t.(type) { + case CharData: + return v.Copy() + case Comment: + return v.Copy() + case Directive: + return v.Copy() + case ProcInst: + return v.Copy() + case StartElement: + return v.Copy() + } + return t +} + +// A Decoder represents an XML parser reading a particular input stream. +// The parser assumes that its input is encoded in UTF-8. +type Decoder struct { + // Strict defaults to true, enforcing the requirements + // of the XML specification. + // If set to false, the parser allows input containing common + // mistakes: + // * If an element is missing an end tag, the parser invents + // end tags as necessary to keep the return values from Token + // properly balanced. + // * In attribute values and character data, unknown or malformed + // character entities (sequences beginning with &) are left alone. + // + // Setting: + // + // d.Strict = false; + // d.AutoClose = HTMLAutoClose; + // d.Entity = HTMLEntity + // + // creates a parser that can handle typical HTML. + // + // Strict mode does not enforce the requirements of the XML name spaces TR. + // In particular it does not reject name space tags using undefined prefixes. + // Such tags are recorded with the unknown prefix as the name space URL. + Strict bool + + // When Strict == false, AutoClose indicates a set of elements to + // consider closed immediately after they are opened, regardless + // of whether an end element is present. + AutoClose []string + + // Entity can be used to map non-standard entity names to string replacements. + // The parser behaves as if these standard mappings are present in the map, + // regardless of the actual map content: + // + // "lt": "<", + // "gt": ">", + // "amp": "&", + // "apos": "'", + // "quot": `"`, + Entity map[string]string + + // CharsetReader, if non-nil, defines a function to generate + // charset-conversion readers, converting from the provided + // non-UTF-8 charset into UTF-8. If CharsetReader is nil or + // returns an error, parsing stops with an error. One of the + // the CharsetReader's result values must be non-nil. + CharsetReader func(charset string, input io.Reader) (io.Reader, error) + + // DefaultSpace sets the default name space used for unadorned tags, + // as if the entire XML stream were wrapped in an element containing + // the attribute xmlns="DefaultSpace". + DefaultSpace string + + r io.ByteReader + buf bytes.Buffer + saved *bytes.Buffer + stk *stack + free *stack + needClose bool + toClose Name + nextToken Token + nextByte int + ns map[string]string + err error + line int + offset int64 + unmarshalDepth int +} + +// NewDecoder creates a new XML parser reading from r. +// If r does not implement io.ByteReader, NewDecoder will +// do its own buffering. +func NewDecoder(r io.Reader) *Decoder { + d := &Decoder{ + ns: make(map[string]string), + nextByte: -1, + line: 1, + Strict: true, + } + d.switchToReader(r) + return d +} + +// Token returns the next XML token in the input stream. +// At the end of the input stream, Token returns nil, io.EOF. +// +// Slices of bytes in the returned token data refer to the +// parser's internal buffer and remain valid only until the next +// call to Token. To acquire a copy of the bytes, call CopyToken +// or the token's Copy method. +// +// Token expands self-closing elements such as
    +// into separate start and end elements returned by successive calls. +// +// Token guarantees that the StartElement and EndElement +// tokens it returns are properly nested and matched: +// if Token encounters an unexpected end element, +// it will return an error. +// +// Token implements XML name spaces as described by +// http://www.w3.org/TR/REC-xml-names/. Each of the +// Name structures contained in the Token has the Space +// set to the URL identifying its name space when known. +// If Token encounters an unrecognized name space prefix, +// it uses the prefix as the Space rather than report an error. +func (d *Decoder) Token() (t Token, err error) { + if d.stk != nil && d.stk.kind == stkEOF { + err = io.EOF + return + } + if d.nextToken != nil { + t = d.nextToken + d.nextToken = nil + } else if t, err = d.rawToken(); err != nil { + return + } + + if !d.Strict { + if t1, ok := d.autoClose(t); ok { + d.nextToken = t + t = t1 + } + } + switch t1 := t.(type) { + case StartElement: + // In XML name spaces, the translations listed in the + // attributes apply to the element name and + // to the other attribute names, so process + // the translations first. + for _, a := range t1.Attr { + if a.Name.Space == "xmlns" { + v, ok := d.ns[a.Name.Local] + d.pushNs(a.Name.Local, v, ok) + d.ns[a.Name.Local] = a.Value + } + if a.Name.Space == "" && a.Name.Local == "xmlns" { + // Default space for untagged names + v, ok := d.ns[""] + d.pushNs("", v, ok) + d.ns[""] = a.Value + } + } + + d.translate(&t1.Name, true) + for i := range t1.Attr { + d.translate(&t1.Attr[i].Name, false) + } + d.pushElement(t1.Name) + t = t1 + + case EndElement: + d.translate(&t1.Name, true) + if !d.popElement(&t1) { + return nil, d.err + } + t = t1 + } + return +} + +const xmlURL = "http://www.w3.org/XML/1998/namespace" + +// Apply name space translation to name n. +// The default name space (for Space=="") +// applies only to element names, not to attribute names. +func (d *Decoder) translate(n *Name, isElementName bool) { + switch { + case n.Space == "xmlns": + return + case n.Space == "" && !isElementName: + return + case n.Space == "xml": + n.Space = xmlURL + case n.Space == "" && n.Local == "xmlns": + return + } + if v, ok := d.ns[n.Space]; ok { + n.Space = v + } else if n.Space == "" { + n.Space = d.DefaultSpace + } +} + +func (d *Decoder) switchToReader(r io.Reader) { + // Get efficient byte at a time reader. + // Assume that if reader has its own + // ReadByte, it's efficient enough. + // Otherwise, use bufio. + if rb, ok := r.(io.ByteReader); ok { + d.r = rb + } else { + d.r = bufio.NewReader(r) + } +} + +// Parsing state - stack holds old name space translations +// and the current set of open elements. The translations to pop when +// ending a given tag are *below* it on the stack, which is +// more work but forced on us by XML. +type stack struct { + next *stack + kind int + name Name + ok bool +} + +const ( + stkStart = iota + stkNs + stkEOF +) + +func (d *Decoder) push(kind int) *stack { + s := d.free + if s != nil { + d.free = s.next + } else { + s = new(stack) + } + s.next = d.stk + s.kind = kind + d.stk = s + return s +} + +func (d *Decoder) pop() *stack { + s := d.stk + if s != nil { + d.stk = s.next + s.next = d.free + d.free = s + } + return s +} + +// Record that after the current element is finished +// (that element is already pushed on the stack) +// Token should return EOF until popEOF is called. +func (d *Decoder) pushEOF() { + // Walk down stack to find Start. + // It might not be the top, because there might be stkNs + // entries above it. + start := d.stk + for start.kind != stkStart { + start = start.next + } + // The stkNs entries below a start are associated with that + // element too; skip over them. + for start.next != nil && start.next.kind == stkNs { + start = start.next + } + s := d.free + if s != nil { + d.free = s.next + } else { + s = new(stack) + } + s.kind = stkEOF + s.next = start.next + start.next = s +} + +// Undo a pushEOF. +// The element must have been finished, so the EOF should be at the top of the stack. +func (d *Decoder) popEOF() bool { + if d.stk == nil || d.stk.kind != stkEOF { + return false + } + d.pop() + return true +} + +// Record that we are starting an element with the given name. +func (d *Decoder) pushElement(name Name) { + s := d.push(stkStart) + s.name = name +} + +// Record that we are changing the value of ns[local]. +// The old value is url, ok. +func (d *Decoder) pushNs(local string, url string, ok bool) { + s := d.push(stkNs) + s.name.Local = local + s.name.Space = url + s.ok = ok +} + +// Creates a SyntaxError with the current line number. +func (d *Decoder) syntaxError(msg string) error { + return &SyntaxError{Msg: msg, Line: d.line} +} + +// Record that we are ending an element with the given name. +// The name must match the record at the top of the stack, +// which must be a pushElement record. +// After popping the element, apply any undo records from +// the stack to restore the name translations that existed +// before we saw this element. +func (d *Decoder) popElement(t *EndElement) bool { + s := d.pop() + name := t.Name + switch { + case s == nil || s.kind != stkStart: + d.err = d.syntaxError("unexpected end element ") + return false + case s.name.Local != name.Local: + if !d.Strict { + d.needClose = true + d.toClose = t.Name + t.Name = s.name + return true + } + d.err = d.syntaxError("element <" + s.name.Local + "> closed by ") + return false + case s.name.Space != name.Space: + d.err = d.syntaxError("element <" + s.name.Local + "> in space " + s.name.Space + + "closed by in space " + name.Space) + return false + } + + // Pop stack until a Start or EOF is on the top, undoing the + // translations that were associated with the element we just closed. + for d.stk != nil && d.stk.kind != stkStart && d.stk.kind != stkEOF { + s := d.pop() + if s.ok { + d.ns[s.name.Local] = s.name.Space + } else { + delete(d.ns, s.name.Local) + } + } + + return true +} + +// If the top element on the stack is autoclosing and +// t is not the end tag, invent the end tag. +func (d *Decoder) autoClose(t Token) (Token, bool) { + if d.stk == nil || d.stk.kind != stkStart { + return nil, false + } + name := strings.ToLower(d.stk.name.Local) + for _, s := range d.AutoClose { + if strings.ToLower(s) == name { + // This one should be auto closed if t doesn't close it. + et, ok := t.(EndElement) + if !ok || et.Name.Local != name { + return EndElement{d.stk.name}, true + } + break + } + } + return nil, false +} + +var errRawToken = errors.New("xml: cannot use RawToken from UnmarshalXML method") + +// RawToken is like Token but does not verify that +// start and end elements match and does not translate +// name space prefixes to their corresponding URLs. +func (d *Decoder) RawToken() (Token, error) { + if d.unmarshalDepth > 0 { + return nil, errRawToken + } + return d.rawToken() +} + +func (d *Decoder) rawToken() (Token, error) { + if d.err != nil { + return nil, d.err + } + if d.needClose { + // The last element we read was self-closing and + // we returned just the StartElement half. + // Return the EndElement half now. + d.needClose = false + return EndElement{d.toClose}, nil + } + + b, ok := d.getc() + if !ok { + return nil, d.err + } + + if b != '<' { + // Text section. + d.ungetc(b) + data := d.text(-1, false) + if data == nil { + return nil, d.err + } + return CharData(data), nil + } + + if b, ok = d.mustgetc(); !ok { + return nil, d.err + } + switch b { + case '/': + // ' { + d.err = d.syntaxError("invalid characters between ") + return nil, d.err + } + return EndElement{name}, nil + + case '?': + // ' { + break + } + b0 = b + } + data := d.buf.Bytes() + data = data[0 : len(data)-2] // chop ?> + + if target == "xml" { + content := string(data) + ver := procInst("version", content) + if ver != "" && ver != "1.0" { + d.err = fmt.Errorf("xml: unsupported version %q; only version 1.0 is supported", ver) + return nil, d.err + } + enc := procInst("encoding", content) + if enc != "" && enc != "utf-8" && enc != "UTF-8" { + if d.CharsetReader == nil { + d.err = fmt.Errorf("xml: encoding %q declared but Decoder.CharsetReader is nil", enc) + return nil, d.err + } + newr, err := d.CharsetReader(enc, d.r.(io.Reader)) + if err != nil { + d.err = fmt.Errorf("xml: opening charset %q: %v", enc, err) + return nil, d.err + } + if newr == nil { + panic("CharsetReader returned a nil Reader for charset " + enc) + } + d.switchToReader(newr) + } + } + return ProcInst{target, data}, nil + + case '!': + // ' { + break + } + b0, b1 = b1, b + } + data := d.buf.Bytes() + data = data[0 : len(data)-3] // chop --> + return Comment(data), nil + + case '[': // . + data := d.text(-1, true) + if data == nil { + return nil, d.err + } + return CharData(data), nil + } + + // Probably a directive: , , etc. + // We don't care, but accumulate for caller. Quoted angle + // brackets do not count for nesting. + d.buf.Reset() + d.buf.WriteByte(b) + inquote := uint8(0) + depth := 0 + for { + if b, ok = d.mustgetc(); !ok { + return nil, d.err + } + if inquote == 0 && b == '>' && depth == 0 { + break + } + HandleB: + d.buf.WriteByte(b) + switch { + case b == inquote: + inquote = 0 + + case inquote != 0: + // in quotes, no special action + + case b == '\'' || b == '"': + inquote = b + + case b == '>' && inquote == 0: + depth-- + + case b == '<' && inquote == 0: + // Look for ` + +var testEntity = map[string]string{"何": "What", "is-it": "is it?"} + +var rawTokens = []Token{ + CharData("\n"), + ProcInst{"xml", []byte(`version="1.0" encoding="UTF-8"`)}, + CharData("\n"), + Directive(`DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"`), + CharData("\n"), + StartElement{Name{"", "body"}, []Attr{{Name{"xmlns", "foo"}, "ns1"}, {Name{"", "xmlns"}, "ns2"}, {Name{"xmlns", "tag"}, "ns3"}}}, + CharData("\n "), + StartElement{Name{"", "hello"}, []Attr{{Name{"", "lang"}, "en"}}}, + CharData("World <>'\" 白鵬翔"), + EndElement{Name{"", "hello"}}, + CharData("\n "), + StartElement{Name{"", "query"}, []Attr{}}, + CharData("What is it?"), + EndElement{Name{"", "query"}}, + CharData("\n "), + StartElement{Name{"", "goodbye"}, []Attr{}}, + EndElement{Name{"", "goodbye"}}, + CharData("\n "), + StartElement{Name{"", "outer"}, []Attr{{Name{"foo", "attr"}, "value"}, {Name{"xmlns", "tag"}, "ns4"}}}, + CharData("\n "), + StartElement{Name{"", "inner"}, []Attr{}}, + EndElement{Name{"", "inner"}}, + CharData("\n "), + EndElement{Name{"", "outer"}}, + CharData("\n "), + StartElement{Name{"tag", "name"}, []Attr{}}, + CharData("\n "), + CharData("Some text here."), + CharData("\n "), + EndElement{Name{"tag", "name"}}, + CharData("\n"), + EndElement{Name{"", "body"}}, + Comment(" missing final newline "), +} + +var cookedTokens = []Token{ + CharData("\n"), + ProcInst{"xml", []byte(`version="1.0" encoding="UTF-8"`)}, + CharData("\n"), + Directive(`DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"`), + CharData("\n"), + StartElement{Name{"ns2", "body"}, []Attr{{Name{"xmlns", "foo"}, "ns1"}, {Name{"", "xmlns"}, "ns2"}, {Name{"xmlns", "tag"}, "ns3"}}}, + CharData("\n "), + StartElement{Name{"ns2", "hello"}, []Attr{{Name{"", "lang"}, "en"}}}, + CharData("World <>'\" 白鵬翔"), + EndElement{Name{"ns2", "hello"}}, + CharData("\n "), + StartElement{Name{"ns2", "query"}, []Attr{}}, + CharData("What is it?"), + EndElement{Name{"ns2", "query"}}, + CharData("\n "), + StartElement{Name{"ns2", "goodbye"}, []Attr{}}, + EndElement{Name{"ns2", "goodbye"}}, + CharData("\n "), + StartElement{Name{"ns2", "outer"}, []Attr{{Name{"ns1", "attr"}, "value"}, {Name{"xmlns", "tag"}, "ns4"}}}, + CharData("\n "), + StartElement{Name{"ns2", "inner"}, []Attr{}}, + EndElement{Name{"ns2", "inner"}}, + CharData("\n "), + EndElement{Name{"ns2", "outer"}}, + CharData("\n "), + StartElement{Name{"ns3", "name"}, []Attr{}}, + CharData("\n "), + CharData("Some text here."), + CharData("\n "), + EndElement{Name{"ns3", "name"}}, + CharData("\n"), + EndElement{Name{"ns2", "body"}}, + Comment(" missing final newline "), +} + +const testInputAltEncoding = ` + +VALUE` + +var rawTokensAltEncoding = []Token{ + CharData("\n"), + ProcInst{"xml", []byte(`version="1.0" encoding="x-testing-uppercase"`)}, + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("value"), + EndElement{Name{"", "tag"}}, +} + +var xmlInput = []string{ + // unexpected EOF cases + "<", + "", + "", + "", + // "", // let the Token() caller handle + "", + "", + "", + "", + " c;", + "", + "", + "", + // "", // let the Token() caller handle + "", + "", + "cdata]]>", +} + +func TestRawToken(t *testing.T) { + d := NewDecoder(strings.NewReader(testInput)) + d.Entity = testEntity + testRawToken(t, d, testInput, rawTokens) +} + +const nonStrictInput = ` +non&entity +&unknown;entity +{ +&#zzz; +&なまえ3; +<-gt; +&; +&0a; +` + +var nonStringEntity = map[string]string{"": "oops!", "0a": "oops!"} + +var nonStrictTokens = []Token{ + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("non&entity"), + EndElement{Name{"", "tag"}}, + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("&unknown;entity"), + EndElement{Name{"", "tag"}}, + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("{"), + EndElement{Name{"", "tag"}}, + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("&#zzz;"), + EndElement{Name{"", "tag"}}, + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("&なまえ3;"), + EndElement{Name{"", "tag"}}, + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("<-gt;"), + EndElement{Name{"", "tag"}}, + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("&;"), + EndElement{Name{"", "tag"}}, + CharData("\n"), + StartElement{Name{"", "tag"}, []Attr{}}, + CharData("&0a;"), + EndElement{Name{"", "tag"}}, + CharData("\n"), +} + +func TestNonStrictRawToken(t *testing.T) { + d := NewDecoder(strings.NewReader(nonStrictInput)) + d.Strict = false + testRawToken(t, d, nonStrictInput, nonStrictTokens) +} + +type downCaser struct { + t *testing.T + r io.ByteReader +} + +func (d *downCaser) ReadByte() (c byte, err error) { + c, err = d.r.ReadByte() + if c >= 'A' && c <= 'Z' { + c += 'a' - 'A' + } + return +} + +func (d *downCaser) Read(p []byte) (int, error) { + d.t.Fatalf("unexpected Read call on downCaser reader") + panic("unreachable") +} + +func TestRawTokenAltEncoding(t *testing.T) { + d := NewDecoder(strings.NewReader(testInputAltEncoding)) + d.CharsetReader = func(charset string, input io.Reader) (io.Reader, error) { + if charset != "x-testing-uppercase" { + t.Fatalf("unexpected charset %q", charset) + } + return &downCaser{t, input.(io.ByteReader)}, nil + } + testRawToken(t, d, testInputAltEncoding, rawTokensAltEncoding) +} + +func TestRawTokenAltEncodingNoConverter(t *testing.T) { + d := NewDecoder(strings.NewReader(testInputAltEncoding)) + token, err := d.RawToken() + if token == nil { + t.Fatalf("expected a token on first RawToken call") + } + if err != nil { + t.Fatal(err) + } + token, err = d.RawToken() + if token != nil { + t.Errorf("expected a nil token; got %#v", token) + } + if err == nil { + t.Fatalf("expected an error on second RawToken call") + } + const encoding = "x-testing-uppercase" + if !strings.Contains(err.Error(), encoding) { + t.Errorf("expected error to contain %q; got error: %v", + encoding, err) + } +} + +func testRawToken(t *testing.T, d *Decoder, raw string, rawTokens []Token) { + lastEnd := int64(0) + for i, want := range rawTokens { + start := d.InputOffset() + have, err := d.RawToken() + end := d.InputOffset() + if err != nil { + t.Fatalf("token %d: unexpected error: %s", i, err) + } + if !reflect.DeepEqual(have, want) { + var shave, swant string + if _, ok := have.(CharData); ok { + shave = fmt.Sprintf("CharData(%q)", have) + } else { + shave = fmt.Sprintf("%#v", have) + } + if _, ok := want.(CharData); ok { + swant = fmt.Sprintf("CharData(%q)", want) + } else { + swant = fmt.Sprintf("%#v", want) + } + t.Errorf("token %d = %s, want %s", i, shave, swant) + } + + // Check that InputOffset returned actual token. + switch { + case start < lastEnd: + t.Errorf("token %d: position [%d,%d) for %T is before previous token", i, start, end, have) + case start >= end: + // Special case: EndElement can be synthesized. + if start == end && end == lastEnd { + break + } + t.Errorf("token %d: position [%d,%d) for %T is empty", i, start, end, have) + case end > int64(len(raw)): + t.Errorf("token %d: position [%d,%d) for %T extends beyond input", i, start, end, have) + default: + text := raw[start:end] + if strings.ContainsAny(text, "<>") && (!strings.HasPrefix(text, "<") || !strings.HasSuffix(text, ">")) { + t.Errorf("token %d: misaligned raw token %#q for %T", i, text, have) + } + } + lastEnd = end + } +} + +// Ensure that directives (specifically !DOCTYPE) include the complete +// text of any nested directives, noting that < and > do not change +// nesting depth if they are in single or double quotes. + +var nestedDirectivesInput = ` +]> +">]> +]> +'>]> +]> +'>]> +]> +` + +var nestedDirectivesTokens = []Token{ + CharData("\n"), + Directive(`DOCTYPE []`), + CharData("\n"), + Directive(`DOCTYPE [">]`), + CharData("\n"), + Directive(`DOCTYPE []`), + CharData("\n"), + Directive(`DOCTYPE ['>]`), + CharData("\n"), + Directive(`DOCTYPE []`), + CharData("\n"), + Directive(`DOCTYPE ['>]`), + CharData("\n"), + Directive(`DOCTYPE []`), + CharData("\n"), +} + +func TestNestedDirectives(t *testing.T) { + d := NewDecoder(strings.NewReader(nestedDirectivesInput)) + + for i, want := range nestedDirectivesTokens { + have, err := d.Token() + if err != nil { + t.Fatalf("token %d: unexpected error: %s", i, err) + } + if !reflect.DeepEqual(have, want) { + t.Errorf("token %d = %#v want %#v", i, have, want) + } + } +} + +func TestToken(t *testing.T) { + d := NewDecoder(strings.NewReader(testInput)) + d.Entity = testEntity + + for i, want := range cookedTokens { + have, err := d.Token() + if err != nil { + t.Fatalf("token %d: unexpected error: %s", i, err) + } + if !reflect.DeepEqual(have, want) { + t.Errorf("token %d = %#v want %#v", i, have, want) + } + } +} + +func TestSyntax(t *testing.T) { + for i := range xmlInput { + d := NewDecoder(strings.NewReader(xmlInput[i])) + var err error + for _, err = d.Token(); err == nil; _, err = d.Token() { + } + if _, ok := err.(*SyntaxError); !ok { + t.Fatalf(`xmlInput "%s": expected SyntaxError not received`, xmlInput[i]) + } + } +} + +type allScalars struct { + True1 bool + True2 bool + False1 bool + False2 bool + Int int + Int8 int8 + Int16 int16 + Int32 int32 + Int64 int64 + Uint int + Uint8 uint8 + Uint16 uint16 + Uint32 uint32 + Uint64 uint64 + Uintptr uintptr + Float32 float32 + Float64 float64 + String string + PtrString *string +} + +var all = allScalars{ + True1: true, + True2: true, + False1: false, + False2: false, + Int: 1, + Int8: -2, + Int16: 3, + Int32: -4, + Int64: 5, + Uint: 6, + Uint8: 7, + Uint16: 8, + Uint32: 9, + Uint64: 10, + Uintptr: 11, + Float32: 13.0, + Float64: 14.0, + String: "15", + PtrString: &sixteen, +} + +var sixteen = "16" + +const testScalarsInput = ` + true + 1 + false + 0 + 1 + -2 + 3 + -4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12.0 + 13.0 + 14.0 + 15 + 16 +` + +func TestAllScalars(t *testing.T) { + var a allScalars + err := Unmarshal([]byte(testScalarsInput), &a) + + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(a, all) { + t.Errorf("have %+v want %+v", a, all) + } +} + +type item struct { + Field_a string +} + +func TestIssue569(t *testing.T) { + data := `abcd` + var i item + err := Unmarshal([]byte(data), &i) + + if err != nil || i.Field_a != "abcd" { + t.Fatal("Expecting abcd") + } +} + +func TestUnquotedAttrs(t *testing.T) { + data := "" + d := NewDecoder(strings.NewReader(data)) + d.Strict = false + token, err := d.Token() + if _, ok := err.(*SyntaxError); ok { + t.Errorf("Unexpected error: %v", err) + } + if token.(StartElement).Name.Local != "tag" { + t.Errorf("Unexpected tag name: %v", token.(StartElement).Name.Local) + } + attr := token.(StartElement).Attr[0] + if attr.Value != "azAZ09:-_" { + t.Errorf("Unexpected attribute value: %v", attr.Value) + } + if attr.Name.Local != "attr" { + t.Errorf("Unexpected attribute name: %v", attr.Name.Local) + } +} + +func TestValuelessAttrs(t *testing.T) { + tests := [][3]string{ + {"

    ", "p", "nowrap"}, + {"

    ", "p", "nowrap"}, + {"", "input", "checked"}, + {"", "input", "checked"}, + } + for _, test := range tests { + d := NewDecoder(strings.NewReader(test[0])) + d.Strict = false + token, err := d.Token() + if _, ok := err.(*SyntaxError); ok { + t.Errorf("Unexpected error: %v", err) + } + if token.(StartElement).Name.Local != test[1] { + t.Errorf("Unexpected tag name: %v", token.(StartElement).Name.Local) + } + attr := token.(StartElement).Attr[0] + if attr.Value != test[2] { + t.Errorf("Unexpected attribute value: %v", attr.Value) + } + if attr.Name.Local != test[2] { + t.Errorf("Unexpected attribute name: %v", attr.Name.Local) + } + } +} + +func TestCopyTokenCharData(t *testing.T) { + data := []byte("same data") + var tok1 Token = CharData(data) + tok2 := CopyToken(tok1) + if !reflect.DeepEqual(tok1, tok2) { + t.Error("CopyToken(CharData) != CharData") + } + data[1] = 'o' + if reflect.DeepEqual(tok1, tok2) { + t.Error("CopyToken(CharData) uses same buffer.") + } +} + +func TestCopyTokenStartElement(t *testing.T) { + elt := StartElement{Name{"", "hello"}, []Attr{{Name{"", "lang"}, "en"}}} + var tok1 Token = elt + tok2 := CopyToken(tok1) + if tok1.(StartElement).Attr[0].Value != "en" { + t.Error("CopyToken overwrote Attr[0]") + } + if !reflect.DeepEqual(tok1, tok2) { + t.Error("CopyToken(StartElement) != StartElement") + } + tok1.(StartElement).Attr[0] = Attr{Name{"", "lang"}, "de"} + if reflect.DeepEqual(tok1, tok2) { + t.Error("CopyToken(CharData) uses same buffer.") + } +} + +func TestSyntaxErrorLineNum(t *testing.T) { + testInput := "

    Foo

    \n\n

    Bar\n" + d := NewDecoder(strings.NewReader(testInput)) + var err error + for _, err = d.Token(); err == nil; _, err = d.Token() { + } + synerr, ok := err.(*SyntaxError) + if !ok { + t.Error("Expected SyntaxError.") + } + if synerr.Line != 3 { + t.Error("SyntaxError didn't have correct line number.") + } +} + +func TestTrailingRawToken(t *testing.T) { + input := ` ` + d := NewDecoder(strings.NewReader(input)) + var err error + for _, err = d.RawToken(); err == nil; _, err = d.RawToken() { + } + if err != io.EOF { + t.Fatalf("d.RawToken() = _, %v, want _, io.EOF", err) + } +} + +func TestTrailingToken(t *testing.T) { + input := ` ` + d := NewDecoder(strings.NewReader(input)) + var err error + for _, err = d.Token(); err == nil; _, err = d.Token() { + } + if err != io.EOF { + t.Fatalf("d.Token() = _, %v, want _, io.EOF", err) + } +} + +func TestEntityInsideCDATA(t *testing.T) { + input := `` + d := NewDecoder(strings.NewReader(input)) + var err error + for _, err = d.Token(); err == nil; _, err = d.Token() { + } + if err != io.EOF { + t.Fatalf("d.Token() = _, %v, want _, io.EOF", err) + } +} + +var characterTests = []struct { + in string + err string +}{ + {"\x12", "illegal character code U+0012"}, + {"\x0b", "illegal character code U+000B"}, + {"\xef\xbf\xbe", "illegal character code U+FFFE"}, + {"\r\n\x07", "illegal character code U+0007"}, + {"what's up", "expected attribute name in element"}, + {"&abc\x01;", "invalid character entity &abc (no semicolon)"}, + {"&\x01;", "invalid character entity & (no semicolon)"}, + {"&\xef\xbf\xbe;", "invalid character entity &\uFFFE;"}, + {"&hello;", "invalid character entity &hello;"}, +} + +func TestDisallowedCharacters(t *testing.T) { + + for i, tt := range characterTests { + d := NewDecoder(strings.NewReader(tt.in)) + var err error + + for err == nil { + _, err = d.Token() + } + synerr, ok := err.(*SyntaxError) + if !ok { + t.Fatalf("input %d d.Token() = _, %v, want _, *SyntaxError", i, err) + } + if synerr.Msg != tt.err { + t.Fatalf("input %d synerr.Msg wrong: want %q, got %q", i, tt.err, synerr.Msg) + } + } +} + +type procInstEncodingTest struct { + expect, got string +} + +var procInstTests = []struct { + input string + expect [2]string +}{ + {`version="1.0" encoding="utf-8"`, [2]string{"1.0", "utf-8"}}, + {`version="1.0" encoding='utf-8'`, [2]string{"1.0", "utf-8"}}, + {`version="1.0" encoding='utf-8' `, [2]string{"1.0", "utf-8"}}, + {`version="1.0" encoding=utf-8`, [2]string{"1.0", ""}}, + {`encoding="FOO" `, [2]string{"", "FOO"}}, +} + +func TestProcInstEncoding(t *testing.T) { + for _, test := range procInstTests { + if got := procInst("version", test.input); got != test.expect[0] { + t.Errorf("procInst(version, %q) = %q; want %q", test.input, got, test.expect[0]) + } + if got := procInst("encoding", test.input); got != test.expect[1] { + t.Errorf("procInst(encoding, %q) = %q; want %q", test.input, got, test.expect[1]) + } + } +} + +// Ensure that directives with comments include the complete +// text of any nested directives. + +var directivesWithCommentsInput = ` +]> +]> + --> --> []> +` + +var directivesWithCommentsTokens = []Token{ + CharData("\n"), + Directive(`DOCTYPE []`), + CharData("\n"), + Directive(`DOCTYPE []`), + CharData("\n"), + Directive(`DOCTYPE []`), + CharData("\n"), +} + +func TestDirectivesWithComments(t *testing.T) { + d := NewDecoder(strings.NewReader(directivesWithCommentsInput)) + + for i, want := range directivesWithCommentsTokens { + have, err := d.Token() + if err != nil { + t.Fatalf("token %d: unexpected error: %s", i, err) + } + if !reflect.DeepEqual(have, want) { + t.Errorf("token %d = %#v want %#v", i, have, want) + } + } +} + +// Writer whose Write method always returns an error. +type errWriter struct{} + +func (errWriter) Write(p []byte) (n int, err error) { return 0, fmt.Errorf("unwritable") } + +func TestEscapeTextIOErrors(t *testing.T) { + expectErr := "unwritable" + err := EscapeText(errWriter{}, []byte{'A'}) + + if err == nil || err.Error() != expectErr { + t.Errorf("have %v, want %v", err, expectErr) + } +} + +func TestEscapeTextInvalidChar(t *testing.T) { + input := []byte("A \x00 terminated string.") + expected := "A \uFFFD terminated string." + + buff := new(bytes.Buffer) + if err := EscapeText(buff, input); err != nil { + t.Fatalf("have %v, want nil", err) + } + text := buff.String() + + if text != expected { + t.Errorf("have %v, want %v", text, expected) + } +} + +func TestIssue5880(t *testing.T) { + type T []byte + data, err := Marshal(T{192, 168, 0, 1}) + if err != nil { + t.Errorf("Marshal error: %v", err) + } + if !utf8.Valid(data) { + t.Errorf("Marshal generated invalid UTF-8: %x", data) + } +} diff --git a/vendor/golang.org/x/net/webdav/litmus_test_server.go b/vendor/golang.org/x/net/webdav/litmus_test_server.go new file mode 100644 index 0000000..514db5d --- /dev/null +++ b/vendor/golang.org/x/net/webdav/litmus_test_server.go @@ -0,0 +1,94 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +This program is a server for the WebDAV 'litmus' compliance test at +http://www.webdav.org/neon/litmus/ +To run the test: + +go run litmus_test_server.go + +and separately, from the downloaded litmus-xxx directory: + +make URL=http://localhost:9999/ check +*/ +package main + +import ( + "flag" + "fmt" + "log" + "net/http" + "net/url" + + "golang.org/x/net/webdav" +) + +var port = flag.Int("port", 9999, "server port") + +func main() { + flag.Parse() + log.SetFlags(0) + h := &webdav.Handler{ + FileSystem: webdav.NewMemFS(), + LockSystem: webdav.NewMemLS(), + Logger: func(r *http.Request, err error) { + litmus := r.Header.Get("X-Litmus") + if len(litmus) > 19 { + litmus = litmus[:16] + "..." + } + + switch r.Method { + case "COPY", "MOVE": + dst := "" + if u, err := url.Parse(r.Header.Get("Destination")); err == nil { + dst = u.Path + } + o := r.Header.Get("Overwrite") + log.Printf("%-20s%-10s%-30s%-30so=%-2s%v", litmus, r.Method, r.URL.Path, dst, o, err) + default: + log.Printf("%-20s%-10s%-30s%v", litmus, r.Method, r.URL.Path, err) + } + }, + } + + // The next line would normally be: + // http.Handle("/", h) + // but we wrap that HTTP handler h to cater for a special case. + // + // The propfind_invalid2 litmus test case expects an empty namespace prefix + // declaration to be an error. The FAQ in the webdav litmus test says: + // + // "What does the "propfind_invalid2" test check for?... + // + // If a request was sent with an XML body which included an empty namespace + // prefix declaration (xmlns:ns1=""), then the server must reject that with + // a "400 Bad Request" response, as it is invalid according to the XML + // Namespace specification." + // + // On the other hand, the Go standard library's encoding/xml package + // accepts an empty xmlns namespace, as per the discussion at + // https://github.com/golang/go/issues/8068 + // + // Empty namespaces seem disallowed in the second (2006) edition of the XML + // standard, but allowed in a later edition. The grammar differs between + // http://www.w3.org/TR/2006/REC-xml-names-20060816/#ns-decl and + // http://www.w3.org/TR/REC-xml-names/#dt-prefix + // + // Thus, we assume that the propfind_invalid2 test is obsolete, and + // hard-code the 400 Bad Request response that the test expects. + http.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Header.Get("X-Litmus") == "props: 3 (propfind_invalid2)" { + http.Error(w, "400 Bad Request", http.StatusBadRequest) + return + } + h.ServeHTTP(w, r) + })) + + addr := fmt.Sprintf(":%d", *port) + log.Printf("Serving %v", addr) + log.Fatal(http.ListenAndServe(addr, nil)) +} diff --git a/vendor/golang.org/x/net/webdav/lock.go b/vendor/golang.org/x/net/webdav/lock.go new file mode 100644 index 0000000..344ac5c --- /dev/null +++ b/vendor/golang.org/x/net/webdav/lock.go @@ -0,0 +1,445 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "container/heap" + "errors" + "strconv" + "strings" + "sync" + "time" +) + +var ( + // ErrConfirmationFailed is returned by a LockSystem's Confirm method. + ErrConfirmationFailed = errors.New("webdav: confirmation failed") + // ErrForbidden is returned by a LockSystem's Unlock method. + ErrForbidden = errors.New("webdav: forbidden") + // ErrLocked is returned by a LockSystem's Create, Refresh and Unlock methods. + ErrLocked = errors.New("webdav: locked") + // ErrNoSuchLock is returned by a LockSystem's Refresh and Unlock methods. + ErrNoSuchLock = errors.New("webdav: no such lock") +) + +// Condition can match a WebDAV resource, based on a token or ETag. +// Exactly one of Token and ETag should be non-empty. +type Condition struct { + Not bool + Token string + ETag string +} + +// LockSystem manages access to a collection of named resources. The elements +// in a lock name are separated by slash ('/', U+002F) characters, regardless +// of host operating system convention. +type LockSystem interface { + // Confirm confirms that the caller can claim all of the locks specified by + // the given conditions, and that holding the union of all of those locks + // gives exclusive access to all of the named resources. Up to two resources + // can be named. Empty names are ignored. + // + // Exactly one of release and err will be non-nil. If release is non-nil, + // all of the requested locks are held until release is called. Calling + // release does not unlock the lock, in the WebDAV UNLOCK sense, but once + // Confirm has confirmed that a lock claim is valid, that lock cannot be + // Confirmed again until it has been released. + // + // If Confirm returns ErrConfirmationFailed then the Handler will continue + // to try any other set of locks presented (a WebDAV HTTP request can + // present more than one set of locks). If it returns any other non-nil + // error, the Handler will write a "500 Internal Server Error" HTTP status. + Confirm(now time.Time, name0, name1 string, conditions ...Condition) (release func(), err error) + + // Create creates a lock with the given depth, duration, owner and root + // (name). The depth will either be negative (meaning infinite) or zero. + // + // If Create returns ErrLocked then the Handler will write a "423 Locked" + // HTTP status. If it returns any other non-nil error, the Handler will + // write a "500 Internal Server Error" HTTP status. + // + // See http://www.webdav.org/specs/rfc4918.html#rfc.section.9.10.6 for + // when to use each error. + // + // The token returned identifies the created lock. It should be an absolute + // URI as defined by RFC 3986, Section 4.3. In particular, it should not + // contain whitespace. + Create(now time.Time, details LockDetails) (token string, err error) + + // Refresh refreshes the lock with the given token. + // + // If Refresh returns ErrLocked then the Handler will write a "423 Locked" + // HTTP Status. If Refresh returns ErrNoSuchLock then the Handler will write + // a "412 Precondition Failed" HTTP Status. If it returns any other non-nil + // error, the Handler will write a "500 Internal Server Error" HTTP status. + // + // See http://www.webdav.org/specs/rfc4918.html#rfc.section.9.10.6 for + // when to use each error. + Refresh(now time.Time, token string, duration time.Duration) (LockDetails, error) + + // Unlock unlocks the lock with the given token. + // + // If Unlock returns ErrForbidden then the Handler will write a "403 + // Forbidden" HTTP Status. If Unlock returns ErrLocked then the Handler + // will write a "423 Locked" HTTP status. If Unlock returns ErrNoSuchLock + // then the Handler will write a "409 Conflict" HTTP Status. If it returns + // any other non-nil error, the Handler will write a "500 Internal Server + // Error" HTTP status. + // + // See http://www.webdav.org/specs/rfc4918.html#rfc.section.9.11.1 for + // when to use each error. + Unlock(now time.Time, token string) error +} + +// LockDetails are a lock's metadata. +type LockDetails struct { + // Root is the root resource name being locked. For a zero-depth lock, the + // root is the only resource being locked. + Root string + // Duration is the lock timeout. A negative duration means infinite. + Duration time.Duration + // OwnerXML is the verbatim XML given in a LOCK HTTP request. + // + // TODO: does the "verbatim" nature play well with XML namespaces? + // Does the OwnerXML field need to have more structure? See + // https://codereview.appspot.com/175140043/#msg2 + OwnerXML string + // ZeroDepth is whether the lock has zero depth. If it does not have zero + // depth, it has infinite depth. + ZeroDepth bool +} + +// NewMemLS returns a new in-memory LockSystem. +func NewMemLS() LockSystem { + return &memLS{ + byName: make(map[string]*memLSNode), + byToken: make(map[string]*memLSNode), + gen: uint64(time.Now().Unix()), + } +} + +type memLS struct { + mu sync.Mutex + byName map[string]*memLSNode + byToken map[string]*memLSNode + gen uint64 + // byExpiry only contains those nodes whose LockDetails have a finite + // Duration and are yet to expire. + byExpiry byExpiry +} + +func (m *memLS) nextToken() string { + m.gen++ + return strconv.FormatUint(m.gen, 10) +} + +func (m *memLS) collectExpiredNodes(now time.Time) { + for len(m.byExpiry) > 0 { + if now.Before(m.byExpiry[0].expiry) { + break + } + m.remove(m.byExpiry[0]) + } +} + +func (m *memLS) Confirm(now time.Time, name0, name1 string, conditions ...Condition) (func(), error) { + m.mu.Lock() + defer m.mu.Unlock() + m.collectExpiredNodes(now) + + var n0, n1 *memLSNode + if name0 != "" { + if n0 = m.lookup(slashClean(name0), conditions...); n0 == nil { + return nil, ErrConfirmationFailed + } + } + if name1 != "" { + if n1 = m.lookup(slashClean(name1), conditions...); n1 == nil { + return nil, ErrConfirmationFailed + } + } + + // Don't hold the same node twice. + if n1 == n0 { + n1 = nil + } + + if n0 != nil { + m.hold(n0) + } + if n1 != nil { + m.hold(n1) + } + return func() { + m.mu.Lock() + defer m.mu.Unlock() + if n1 != nil { + m.unhold(n1) + } + if n0 != nil { + m.unhold(n0) + } + }, nil +} + +// lookup returns the node n that locks the named resource, provided that n +// matches at least one of the given conditions and that lock isn't held by +// another party. Otherwise, it returns nil. +// +// n may be a parent of the named resource, if n is an infinite depth lock. +func (m *memLS) lookup(name string, conditions ...Condition) (n *memLSNode) { + // TODO: support Condition.Not and Condition.ETag. + for _, c := range conditions { + n = m.byToken[c.Token] + if n == nil || n.held { + continue + } + if name == n.details.Root { + return n + } + if n.details.ZeroDepth { + continue + } + if n.details.Root == "/" || strings.HasPrefix(name, n.details.Root+"/") { + return n + } + } + return nil +} + +func (m *memLS) hold(n *memLSNode) { + if n.held { + panic("webdav: memLS inconsistent held state") + } + n.held = true + if n.details.Duration >= 0 && n.byExpiryIndex >= 0 { + heap.Remove(&m.byExpiry, n.byExpiryIndex) + } +} + +func (m *memLS) unhold(n *memLSNode) { + if !n.held { + panic("webdav: memLS inconsistent held state") + } + n.held = false + if n.details.Duration >= 0 { + heap.Push(&m.byExpiry, n) + } +} + +func (m *memLS) Create(now time.Time, details LockDetails) (string, error) { + m.mu.Lock() + defer m.mu.Unlock() + m.collectExpiredNodes(now) + details.Root = slashClean(details.Root) + + if !m.canCreate(details.Root, details.ZeroDepth) { + return "", ErrLocked + } + n := m.create(details.Root) + n.token = m.nextToken() + m.byToken[n.token] = n + n.details = details + if n.details.Duration >= 0 { + n.expiry = now.Add(n.details.Duration) + heap.Push(&m.byExpiry, n) + } + return n.token, nil +} + +func (m *memLS) Refresh(now time.Time, token string, duration time.Duration) (LockDetails, error) { + m.mu.Lock() + defer m.mu.Unlock() + m.collectExpiredNodes(now) + + n := m.byToken[token] + if n == nil { + return LockDetails{}, ErrNoSuchLock + } + if n.held { + return LockDetails{}, ErrLocked + } + if n.byExpiryIndex >= 0 { + heap.Remove(&m.byExpiry, n.byExpiryIndex) + } + n.details.Duration = duration + if n.details.Duration >= 0 { + n.expiry = now.Add(n.details.Duration) + heap.Push(&m.byExpiry, n) + } + return n.details, nil +} + +func (m *memLS) Unlock(now time.Time, token string) error { + m.mu.Lock() + defer m.mu.Unlock() + m.collectExpiredNodes(now) + + n := m.byToken[token] + if n == nil { + return ErrNoSuchLock + } + if n.held { + return ErrLocked + } + m.remove(n) + return nil +} + +func (m *memLS) canCreate(name string, zeroDepth bool) bool { + return walkToRoot(name, func(name0 string, first bool) bool { + n := m.byName[name0] + if n == nil { + return true + } + if first { + if n.token != "" { + // The target node is already locked. + return false + } + if !zeroDepth { + // The requested lock depth is infinite, and the fact that n exists + // (n != nil) means that a descendent of the target node is locked. + return false + } + } else if n.token != "" && !n.details.ZeroDepth { + // An ancestor of the target node is locked with infinite depth. + return false + } + return true + }) +} + +func (m *memLS) create(name string) (ret *memLSNode) { + walkToRoot(name, func(name0 string, first bool) bool { + n := m.byName[name0] + if n == nil { + n = &memLSNode{ + details: LockDetails{ + Root: name0, + }, + byExpiryIndex: -1, + } + m.byName[name0] = n + } + n.refCount++ + if first { + ret = n + } + return true + }) + return ret +} + +func (m *memLS) remove(n *memLSNode) { + delete(m.byToken, n.token) + n.token = "" + walkToRoot(n.details.Root, func(name0 string, first bool) bool { + x := m.byName[name0] + x.refCount-- + if x.refCount == 0 { + delete(m.byName, name0) + } + return true + }) + if n.byExpiryIndex >= 0 { + heap.Remove(&m.byExpiry, n.byExpiryIndex) + } +} + +func walkToRoot(name string, f func(name0 string, first bool) bool) bool { + for first := true; ; first = false { + if !f(name, first) { + return false + } + if name == "/" { + break + } + name = name[:strings.LastIndex(name, "/")] + if name == "" { + name = "/" + } + } + return true +} + +type memLSNode struct { + // details are the lock metadata. Even if this node's name is not explicitly locked, + // details.Root will still equal the node's name. + details LockDetails + // token is the unique identifier for this node's lock. An empty token means that + // this node is not explicitly locked. + token string + // refCount is the number of self-or-descendent nodes that are explicitly locked. + refCount int + // expiry is when this node's lock expires. + expiry time.Time + // byExpiryIndex is the index of this node in memLS.byExpiry. It is -1 + // if this node does not expire, or has expired. + byExpiryIndex int + // held is whether this node's lock is actively held by a Confirm call. + held bool +} + +type byExpiry []*memLSNode + +func (b *byExpiry) Len() int { + return len(*b) +} + +func (b *byExpiry) Less(i, j int) bool { + return (*b)[i].expiry.Before((*b)[j].expiry) +} + +func (b *byExpiry) Swap(i, j int) { + (*b)[i], (*b)[j] = (*b)[j], (*b)[i] + (*b)[i].byExpiryIndex = i + (*b)[j].byExpiryIndex = j +} + +func (b *byExpiry) Push(x interface{}) { + n := x.(*memLSNode) + n.byExpiryIndex = len(*b) + *b = append(*b, n) +} + +func (b *byExpiry) Pop() interface{} { + i := len(*b) - 1 + n := (*b)[i] + (*b)[i] = nil + n.byExpiryIndex = -1 + *b = (*b)[:i] + return n +} + +const infiniteTimeout = -1 + +// parseTimeout parses the Timeout HTTP header, as per section 10.7. If s is +// empty, an infiniteTimeout is returned. +func parseTimeout(s string) (time.Duration, error) { + if s == "" { + return infiniteTimeout, nil + } + if i := strings.IndexByte(s, ','); i >= 0 { + s = s[:i] + } + s = strings.TrimSpace(s) + if s == "Infinite" { + return infiniteTimeout, nil + } + const pre = "Second-" + if !strings.HasPrefix(s, pre) { + return 0, errInvalidTimeout + } + s = s[len(pre):] + if s == "" || s[0] < '0' || '9' < s[0] { + return 0, errInvalidTimeout + } + n, err := strconv.ParseInt(s, 10, 64) + if err != nil || 1<<32-1 < n { + return 0, errInvalidTimeout + } + return time.Duration(n) * time.Second, nil +} diff --git a/vendor/golang.org/x/net/webdav/lock_test.go b/vendor/golang.org/x/net/webdav/lock_test.go new file mode 100644 index 0000000..116d6c0 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/lock_test.go @@ -0,0 +1,731 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "fmt" + "math/rand" + "path" + "reflect" + "sort" + "strconv" + "strings" + "testing" + "time" +) + +func TestWalkToRoot(t *testing.T) { + testCases := []struct { + name string + want []string + }{{ + "/a/b/c/d", + []string{ + "/a/b/c/d", + "/a/b/c", + "/a/b", + "/a", + "/", + }, + }, { + "/a", + []string{ + "/a", + "/", + }, + }, { + "/", + []string{ + "/", + }, + }} + + for _, tc := range testCases { + var got []string + if !walkToRoot(tc.name, func(name0 string, first bool) bool { + if first != (len(got) == 0) { + t.Errorf("name=%q: first=%t but len(got)==%d", tc.name, first, len(got)) + return false + } + got = append(got, name0) + return true + }) { + continue + } + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("name=%q:\ngot %q\nwant %q", tc.name, got, tc.want) + } + } +} + +var lockTestDurations = []time.Duration{ + infiniteTimeout, // infiniteTimeout means to never expire. + 0, // A zero duration means to expire immediately. + 100 * time.Hour, // A very large duration will not expire in these tests. +} + +// lockTestNames are the names of a set of mutually compatible locks. For each +// name fragment: +// - _ means no explicit lock. +// - i means a infinite-depth lock, +// - z means a zero-depth lock, +var lockTestNames = []string{ + "/_/_/_/_/z", + "/_/_/i", + "/_/z", + "/_/z/i", + "/_/z/z", + "/_/z/_/i", + "/_/z/_/z", + "/i", + "/z", + "/z/_/i", + "/z/_/z", +} + +func lockTestZeroDepth(name string) bool { + switch name[len(name)-1] { + case 'i': + return false + case 'z': + return true + } + panic(fmt.Sprintf("lock name %q did not end with 'i' or 'z'", name)) +} + +func TestMemLSCanCreate(t *testing.T) { + now := time.Unix(0, 0) + m := NewMemLS().(*memLS) + + for _, name := range lockTestNames { + _, err := m.Create(now, LockDetails{ + Root: name, + Duration: infiniteTimeout, + ZeroDepth: lockTestZeroDepth(name), + }) + if err != nil { + t.Fatalf("creating lock for %q: %v", name, err) + } + } + + wantCanCreate := func(name string, zeroDepth bool) bool { + for _, n := range lockTestNames { + switch { + case n == name: + // An existing lock has the same name as the proposed lock. + return false + case strings.HasPrefix(n, name): + // An existing lock would be a child of the proposed lock, + // which conflicts if the proposed lock has infinite depth. + if !zeroDepth { + return false + } + case strings.HasPrefix(name, n): + // An existing lock would be an ancestor of the proposed lock, + // which conflicts if the ancestor has infinite depth. + if n[len(n)-1] == 'i' { + return false + } + } + } + return true + } + + var check func(int, string) + check = func(recursion int, name string) { + for _, zeroDepth := range []bool{false, true} { + got := m.canCreate(name, zeroDepth) + want := wantCanCreate(name, zeroDepth) + if got != want { + t.Errorf("canCreate name=%q zeroDepth=%t: got %t, want %t", name, zeroDepth, got, want) + } + } + if recursion == 6 { + return + } + if name != "/" { + name += "/" + } + for _, c := range "_iz" { + check(recursion+1, name+string(c)) + } + } + check(0, "/") +} + +func TestMemLSLookup(t *testing.T) { + now := time.Unix(0, 0) + m := NewMemLS().(*memLS) + + badToken := m.nextToken() + t.Logf("badToken=%q", badToken) + + for _, name := range lockTestNames { + token, err := m.Create(now, LockDetails{ + Root: name, + Duration: infiniteTimeout, + ZeroDepth: lockTestZeroDepth(name), + }) + if err != nil { + t.Fatalf("creating lock for %q: %v", name, err) + } + t.Logf("%-15q -> node=%p token=%q", name, m.byName[name], token) + } + + baseNames := append([]string{"/a", "/b/c"}, lockTestNames...) + for _, baseName := range baseNames { + for _, suffix := range []string{"", "/0", "/1/2/3"} { + name := baseName + suffix + + goodToken := "" + base := m.byName[baseName] + if base != nil && (suffix == "" || !lockTestZeroDepth(baseName)) { + goodToken = base.token + } + + for _, token := range []string{badToken, goodToken} { + if token == "" { + continue + } + + got := m.lookup(name, Condition{Token: token}) + want := base + if token == badToken { + want = nil + } + if got != want { + t.Errorf("name=%-20qtoken=%q (bad=%t): got %p, want %p", + name, token, token == badToken, got, want) + } + } + } + } +} + +func TestMemLSConfirm(t *testing.T) { + now := time.Unix(0, 0) + m := NewMemLS().(*memLS) + alice, err := m.Create(now, LockDetails{ + Root: "/alice", + Duration: infiniteTimeout, + ZeroDepth: false, + }) + tweedle, err := m.Create(now, LockDetails{ + Root: "/tweedle", + Duration: infiniteTimeout, + ZeroDepth: false, + }) + if err != nil { + t.Fatalf("Create: %v", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Create: inconsistent state: %v", err) + } + + // Test a mismatch between name and condition. + _, err = m.Confirm(now, "/tweedle/dee", "", Condition{Token: alice}) + if err != ErrConfirmationFailed { + t.Fatalf("Confirm (mismatch): got %v, want ErrConfirmationFailed", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Confirm (mismatch): inconsistent state: %v", err) + } + + // Test two names (that fall under the same lock) in the one Confirm call. + release, err := m.Confirm(now, "/tweedle/dee", "/tweedle/dum", Condition{Token: tweedle}) + if err != nil { + t.Fatalf("Confirm (twins): %v", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Confirm (twins): inconsistent state: %v", err) + } + release() + if err := m.consistent(); err != nil { + t.Fatalf("release (twins): inconsistent state: %v", err) + } + + // Test the same two names in overlapping Confirm / release calls. + releaseDee, err := m.Confirm(now, "/tweedle/dee", "", Condition{Token: tweedle}) + if err != nil { + t.Fatalf("Confirm (sequence #0): %v", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Confirm (sequence #0): inconsistent state: %v", err) + } + + _, err = m.Confirm(now, "/tweedle/dum", "", Condition{Token: tweedle}) + if err != ErrConfirmationFailed { + t.Fatalf("Confirm (sequence #1): got %v, want ErrConfirmationFailed", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Confirm (sequence #1): inconsistent state: %v", err) + } + + releaseDee() + if err := m.consistent(); err != nil { + t.Fatalf("release (sequence #2): inconsistent state: %v", err) + } + + releaseDum, err := m.Confirm(now, "/tweedle/dum", "", Condition{Token: tweedle}) + if err != nil { + t.Fatalf("Confirm (sequence #3): %v", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Confirm (sequence #3): inconsistent state: %v", err) + } + + // Test that you can't unlock a held lock. + err = m.Unlock(now, tweedle) + if err != ErrLocked { + t.Fatalf("Unlock (sequence #4): got %v, want ErrLocked", err) + } + + releaseDum() + if err := m.consistent(); err != nil { + t.Fatalf("release (sequence #5): inconsistent state: %v", err) + } + + err = m.Unlock(now, tweedle) + if err != nil { + t.Fatalf("Unlock (sequence #6): %v", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Unlock (sequence #6): inconsistent state: %v", err) + } +} + +func TestMemLSNonCanonicalRoot(t *testing.T) { + now := time.Unix(0, 0) + m := NewMemLS().(*memLS) + token, err := m.Create(now, LockDetails{ + Root: "/foo/./bar//", + Duration: 1 * time.Second, + }) + if err != nil { + t.Fatalf("Create: %v", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Create: inconsistent state: %v", err) + } + if err := m.Unlock(now, token); err != nil { + t.Fatalf("Unlock: %v", err) + } + if err := m.consistent(); err != nil { + t.Fatalf("Unlock: inconsistent state: %v", err) + } +} + +func TestMemLSExpiry(t *testing.T) { + m := NewMemLS().(*memLS) + testCases := []string{ + "setNow 0", + "create /a.5", + "want /a.5", + "create /c.6", + "want /a.5 /c.6", + "create /a/b.7", + "want /a.5 /a/b.7 /c.6", + "setNow 4", + "want /a.5 /a/b.7 /c.6", + "setNow 5", + "want /a/b.7 /c.6", + "setNow 6", + "want /a/b.7", + "setNow 7", + "want ", + "setNow 8", + "want ", + "create /a.12", + "create /b.13", + "create /c.15", + "create /a/d.16", + "want /a.12 /a/d.16 /b.13 /c.15", + "refresh /a.14", + "want /a.14 /a/d.16 /b.13 /c.15", + "setNow 12", + "want /a.14 /a/d.16 /b.13 /c.15", + "setNow 13", + "want /a.14 /a/d.16 /c.15", + "setNow 14", + "want /a/d.16 /c.15", + "refresh /a/d.20", + "refresh /c.20", + "want /a/d.20 /c.20", + "setNow 20", + "want ", + } + + tokens := map[string]string{} + zTime := time.Unix(0, 0) + now := zTime + for i, tc := range testCases { + j := strings.IndexByte(tc, ' ') + if j < 0 { + t.Fatalf("test case #%d %q: invalid command", i, tc) + } + op, arg := tc[:j], tc[j+1:] + switch op { + default: + t.Fatalf("test case #%d %q: invalid operation %q", i, tc, op) + + case "create", "refresh": + parts := strings.Split(arg, ".") + if len(parts) != 2 { + t.Fatalf("test case #%d %q: invalid create", i, tc) + } + root := parts[0] + d, err := strconv.Atoi(parts[1]) + if err != nil { + t.Fatalf("test case #%d %q: invalid duration", i, tc) + } + dur := time.Unix(0, 0).Add(time.Duration(d) * time.Second).Sub(now) + + switch op { + case "create": + token, err := m.Create(now, LockDetails{ + Root: root, + Duration: dur, + ZeroDepth: true, + }) + if err != nil { + t.Fatalf("test case #%d %q: Create: %v", i, tc, err) + } + tokens[root] = token + + case "refresh": + token := tokens[root] + if token == "" { + t.Fatalf("test case #%d %q: no token for %q", i, tc, root) + } + got, err := m.Refresh(now, token, dur) + if err != nil { + t.Fatalf("test case #%d %q: Refresh: %v", i, tc, err) + } + want := LockDetails{ + Root: root, + Duration: dur, + ZeroDepth: true, + } + if got != want { + t.Fatalf("test case #%d %q:\ngot %v\nwant %v", i, tc, got, want) + } + } + + case "setNow": + d, err := strconv.Atoi(arg) + if err != nil { + t.Fatalf("test case #%d %q: invalid duration", i, tc) + } + now = time.Unix(0, 0).Add(time.Duration(d) * time.Second) + + case "want": + m.mu.Lock() + m.collectExpiredNodes(now) + got := make([]string, 0, len(m.byToken)) + for _, n := range m.byToken { + got = append(got, fmt.Sprintf("%s.%d", + n.details.Root, n.expiry.Sub(zTime)/time.Second)) + } + m.mu.Unlock() + sort.Strings(got) + want := []string{} + if arg != "" { + want = strings.Split(arg, " ") + } + if !reflect.DeepEqual(got, want) { + t.Fatalf("test case #%d %q:\ngot %q\nwant %q", i, tc, got, want) + } + } + + if err := m.consistent(); err != nil { + t.Fatalf("test case #%d %q: inconsistent state: %v", i, tc, err) + } + } +} + +func TestMemLS(t *testing.T) { + now := time.Unix(0, 0) + m := NewMemLS().(*memLS) + rng := rand.New(rand.NewSource(0)) + tokens := map[string]string{} + nConfirm, nCreate, nRefresh, nUnlock := 0, 0, 0, 0 + const N = 2000 + + for i := 0; i < N; i++ { + name := lockTestNames[rng.Intn(len(lockTestNames))] + duration := lockTestDurations[rng.Intn(len(lockTestDurations))] + confirmed, unlocked := false, false + + // If the name was already locked, we randomly confirm/release, refresh + // or unlock it. Otherwise, we create a lock. + token := tokens[name] + if token != "" { + switch rng.Intn(3) { + case 0: + confirmed = true + nConfirm++ + release, err := m.Confirm(now, name, "", Condition{Token: token}) + if err != nil { + t.Fatalf("iteration #%d: Confirm %q: %v", i, name, err) + } + if err := m.consistent(); err != nil { + t.Fatalf("iteration #%d: inconsistent state: %v", i, err) + } + release() + + case 1: + nRefresh++ + if _, err := m.Refresh(now, token, duration); err != nil { + t.Fatalf("iteration #%d: Refresh %q: %v", i, name, err) + } + + case 2: + unlocked = true + nUnlock++ + if err := m.Unlock(now, token); err != nil { + t.Fatalf("iteration #%d: Unlock %q: %v", i, name, err) + } + } + + } else { + nCreate++ + var err error + token, err = m.Create(now, LockDetails{ + Root: name, + Duration: duration, + ZeroDepth: lockTestZeroDepth(name), + }) + if err != nil { + t.Fatalf("iteration #%d: Create %q: %v", i, name, err) + } + } + + if !confirmed { + if duration == 0 || unlocked { + // A zero-duration lock should expire immediately and is + // effectively equivalent to being unlocked. + tokens[name] = "" + } else { + tokens[name] = token + } + } + + if err := m.consistent(); err != nil { + t.Fatalf("iteration #%d: inconsistent state: %v", i, err) + } + } + + if nConfirm < N/10 { + t.Fatalf("too few Confirm calls: got %d, want >= %d", nConfirm, N/10) + } + if nCreate < N/10 { + t.Fatalf("too few Create calls: got %d, want >= %d", nCreate, N/10) + } + if nRefresh < N/10 { + t.Fatalf("too few Refresh calls: got %d, want >= %d", nRefresh, N/10) + } + if nUnlock < N/10 { + t.Fatalf("too few Unlock calls: got %d, want >= %d", nUnlock, N/10) + } +} + +func (m *memLS) consistent() error { + m.mu.Lock() + defer m.mu.Unlock() + + // If m.byName is non-empty, then it must contain an entry for the root "/", + // and its refCount should equal the number of locked nodes. + if len(m.byName) > 0 { + n := m.byName["/"] + if n == nil { + return fmt.Errorf(`non-empty m.byName does not contain the root "/"`) + } + if n.refCount != len(m.byToken) { + return fmt.Errorf("root node refCount=%d, differs from len(m.byToken)=%d", n.refCount, len(m.byToken)) + } + } + + for name, n := range m.byName { + // The map keys should be consistent with the node's copy of the key. + if n.details.Root != name { + return fmt.Errorf("node name %q != byName map key %q", n.details.Root, name) + } + + // A name must be clean, and start with a "/". + if len(name) == 0 || name[0] != '/' { + return fmt.Errorf(`node name %q does not start with "/"`, name) + } + if name != path.Clean(name) { + return fmt.Errorf(`node name %q is not clean`, name) + } + + // A node's refCount should be positive. + if n.refCount <= 0 { + return fmt.Errorf("non-positive refCount for node at name %q", name) + } + + // A node's refCount should be the number of self-or-descendents that + // are locked (i.e. have a non-empty token). + var list []string + for name0, n0 := range m.byName { + // All of lockTestNames' name fragments are one byte long: '_', 'i' or 'z', + // so strings.HasPrefix is equivalent to self-or-descendent name match. + // We don't have to worry about "/foo/bar" being a false positive match + // for "/foo/b". + if strings.HasPrefix(name0, name) && n0.token != "" { + list = append(list, name0) + } + } + if n.refCount != len(list) { + sort.Strings(list) + return fmt.Errorf("node at name %q has refCount %d but locked self-or-descendents are %q (len=%d)", + name, n.refCount, list, len(list)) + } + + // A node n is in m.byToken if it has a non-empty token. + if n.token != "" { + if _, ok := m.byToken[n.token]; !ok { + return fmt.Errorf("node at name %q has token %q but not in m.byToken", name, n.token) + } + } + + // A node n is in m.byExpiry if it has a non-negative byExpiryIndex. + if n.byExpiryIndex >= 0 { + if n.byExpiryIndex >= len(m.byExpiry) { + return fmt.Errorf("node at name %q has byExpiryIndex %d but m.byExpiry has length %d", name, n.byExpiryIndex, len(m.byExpiry)) + } + if n != m.byExpiry[n.byExpiryIndex] { + return fmt.Errorf("node at name %q has byExpiryIndex %d but that indexes a different node", name, n.byExpiryIndex) + } + } + } + + for token, n := range m.byToken { + // The map keys should be consistent with the node's copy of the key. + if n.token != token { + return fmt.Errorf("node token %q != byToken map key %q", n.token, token) + } + + // Every node in m.byToken is in m.byName. + if _, ok := m.byName[n.details.Root]; !ok { + return fmt.Errorf("node at name %q in m.byToken but not in m.byName", n.details.Root) + } + } + + for i, n := range m.byExpiry { + // The slice indices should be consistent with the node's copy of the index. + if n.byExpiryIndex != i { + return fmt.Errorf("node byExpiryIndex %d != byExpiry slice index %d", n.byExpiryIndex, i) + } + + // Every node in m.byExpiry is in m.byName. + if _, ok := m.byName[n.details.Root]; !ok { + return fmt.Errorf("node at name %q in m.byExpiry but not in m.byName", n.details.Root) + } + + // No node in m.byExpiry should be held. + if n.held { + return fmt.Errorf("node at name %q in m.byExpiry is held", n.details.Root) + } + } + return nil +} + +func TestParseTimeout(t *testing.T) { + testCases := []struct { + s string + want time.Duration + wantErr error + }{{ + "", + infiniteTimeout, + nil, + }, { + "Infinite", + infiniteTimeout, + nil, + }, { + "Infinitesimal", + 0, + errInvalidTimeout, + }, { + "infinite", + 0, + errInvalidTimeout, + }, { + "Second-0", + 0 * time.Second, + nil, + }, { + "Second-123", + 123 * time.Second, + nil, + }, { + " Second-456 ", + 456 * time.Second, + nil, + }, { + "Second-4100000000", + 4100000000 * time.Second, + nil, + }, { + "junk", + 0, + errInvalidTimeout, + }, { + "Second-", + 0, + errInvalidTimeout, + }, { + "Second--1", + 0, + errInvalidTimeout, + }, { + "Second--123", + 0, + errInvalidTimeout, + }, { + "Second-+123", + 0, + errInvalidTimeout, + }, { + "Second-0x123", + 0, + errInvalidTimeout, + }, { + "second-123", + 0, + errInvalidTimeout, + }, { + "Second-4294967295", + 4294967295 * time.Second, + nil, + }, { + // Section 10.7 says that "The timeout value for TimeType "Second" + // must not be greater than 2^32-1." + "Second-4294967296", + 0, + errInvalidTimeout, + }, { + // This test case comes from section 9.10.9 of the spec. It says, + // + // "In this request, the client has specified that it desires an + // infinite-length lock, if available, otherwise a timeout of 4.1 + // billion seconds, if available." + // + // The Go WebDAV package always supports infinite length locks, + // and ignores the fallback after the comma. + "Infinite, Second-4100000000", + infiniteTimeout, + nil, + }} + + for _, tc := range testCases { + got, gotErr := parseTimeout(tc.s) + if got != tc.want || gotErr != tc.wantErr { + t.Errorf("parsing %q:\ngot %v, %v\nwant %v, %v", tc.s, got, gotErr, tc.want, tc.wantErr) + } + } +} diff --git a/vendor/golang.org/x/net/webdav/prop.go b/vendor/golang.org/x/net/webdav/prop.go new file mode 100644 index 0000000..e36a3b3 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/prop.go @@ -0,0 +1,418 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "bytes" + "encoding/xml" + "fmt" + "io" + "mime" + "net/http" + "os" + "path/filepath" + "strconv" + + "golang.org/x/net/context" +) + +// Proppatch describes a property update instruction as defined in RFC 4918. +// See http://www.webdav.org/specs/rfc4918.html#METHOD_PROPPATCH +type Proppatch struct { + // Remove specifies whether this patch removes properties. If it does not + // remove them, it sets them. + Remove bool + // Props contains the properties to be set or removed. + Props []Property +} + +// Propstat describes a XML propstat element as defined in RFC 4918. +// See http://www.webdav.org/specs/rfc4918.html#ELEMENT_propstat +type Propstat struct { + // Props contains the properties for which Status applies. + Props []Property + + // Status defines the HTTP status code of the properties in Prop. + // Allowed values include, but are not limited to the WebDAV status + // code extensions for HTTP/1.1. + // http://www.webdav.org/specs/rfc4918.html#status.code.extensions.to.http11 + Status int + + // XMLError contains the XML representation of the optional error element. + // XML content within this field must not rely on any predefined + // namespace declarations or prefixes. If empty, the XML error element + // is omitted. + XMLError string + + // ResponseDescription contains the contents of the optional + // responsedescription field. If empty, the XML element is omitted. + ResponseDescription string +} + +// makePropstats returns a slice containing those of x and y whose Props slice +// is non-empty. If both are empty, it returns a slice containing an otherwise +// zero Propstat whose HTTP status code is 200 OK. +func makePropstats(x, y Propstat) []Propstat { + pstats := make([]Propstat, 0, 2) + if len(x.Props) != 0 { + pstats = append(pstats, x) + } + if len(y.Props) != 0 { + pstats = append(pstats, y) + } + if len(pstats) == 0 { + pstats = append(pstats, Propstat{ + Status: http.StatusOK, + }) + } + return pstats +} + +// DeadPropsHolder holds the dead properties of a resource. +// +// Dead properties are those properties that are explicitly defined. In +// comparison, live properties, such as DAV:getcontentlength, are implicitly +// defined by the underlying resource, and cannot be explicitly overridden or +// removed. See the Terminology section of +// http://www.webdav.org/specs/rfc4918.html#rfc.section.3 +// +// There is a whitelist of the names of live properties. This package handles +// all live properties, and will only pass non-whitelisted names to the Patch +// method of DeadPropsHolder implementations. +type DeadPropsHolder interface { + // DeadProps returns a copy of the dead properties held. + DeadProps() (map[xml.Name]Property, error) + + // Patch patches the dead properties held. + // + // Patching is atomic; either all or no patches succeed. It returns (nil, + // non-nil) if an internal server error occurred, otherwise the Propstats + // collectively contain one Property for each proposed patch Property. If + // all patches succeed, Patch returns a slice of length one and a Propstat + // element with a 200 OK HTTP status code. If none succeed, for reasons + // other than an internal server error, no Propstat has status 200 OK. + // + // For more details on when various HTTP status codes apply, see + // http://www.webdav.org/specs/rfc4918.html#PROPPATCH-status + Patch([]Proppatch) ([]Propstat, error) +} + +// liveProps contains all supported, protected DAV: properties. +var liveProps = map[xml.Name]struct { + // findFn implements the propfind function of this property. If nil, + // it indicates a hidden property. + findFn func(context.Context, FileSystem, LockSystem, string, os.FileInfo) (string, error) + // dir is true if the property applies to directories. + dir bool +}{ + {Space: "DAV:", Local: "resourcetype"}: { + findFn: findResourceType, + dir: true, + }, + {Space: "DAV:", Local: "displayname"}: { + findFn: findDisplayName, + dir: true, + }, + {Space: "DAV:", Local: "getcontentlength"}: { + findFn: findContentLength, + dir: false, + }, + {Space: "DAV:", Local: "getlastmodified"}: { + findFn: findLastModified, + // http://webdav.org/specs/rfc4918.html#PROPERTY_getlastmodified + // suggests that getlastmodified should only apply to GETable + // resources, and this package does not support GET on directories. + // + // Nonetheless, some WebDAV clients expect child directories to be + // sortable by getlastmodified date, so this value is true, not false. + // See golang.org/issue/15334. + dir: true, + }, + {Space: "DAV:", Local: "creationdate"}: { + findFn: nil, + dir: false, + }, + {Space: "DAV:", Local: "getcontentlanguage"}: { + findFn: nil, + dir: false, + }, + {Space: "DAV:", Local: "getcontenttype"}: { + findFn: findContentType, + dir: false, + }, + {Space: "DAV:", Local: "getetag"}: { + findFn: findETag, + // findETag implements ETag as the concatenated hex values of a file's + // modification time and size. This is not a reliable synchronization + // mechanism for directories, so we do not advertise getetag for DAV + // collections. + dir: false, + }, + + // TODO: The lockdiscovery property requires LockSystem to list the + // active locks on a resource. + {Space: "DAV:", Local: "lockdiscovery"}: {}, + {Space: "DAV:", Local: "supportedlock"}: { + findFn: findSupportedLock, + dir: true, + }, +} + +// TODO(nigeltao) merge props and allprop? + +// Props returns the status of the properties named pnames for resource name. +// +// Each Propstat has a unique status and each property name will only be part +// of one Propstat element. +func props(ctx context.Context, fs FileSystem, ls LockSystem, name string, pnames []xml.Name) ([]Propstat, error) { + f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0) + if err != nil { + return nil, err + } + defer f.Close() + fi, err := f.Stat() + if err != nil { + return nil, err + } + isDir := fi.IsDir() + + var deadProps map[xml.Name]Property + if dph, ok := f.(DeadPropsHolder); ok { + deadProps, err = dph.DeadProps() + if err != nil { + return nil, err + } + } + + pstatOK := Propstat{Status: http.StatusOK} + pstatNotFound := Propstat{Status: http.StatusNotFound} + for _, pn := range pnames { + // If this file has dead properties, check if they contain pn. + if dp, ok := deadProps[pn]; ok { + pstatOK.Props = append(pstatOK.Props, dp) + continue + } + // Otherwise, it must either be a live property or we don't know it. + if prop := liveProps[pn]; prop.findFn != nil && (prop.dir || !isDir) { + innerXML, err := prop.findFn(ctx, fs, ls, name, fi) + if err != nil { + return nil, err + } + pstatOK.Props = append(pstatOK.Props, Property{ + XMLName: pn, + InnerXML: []byte(innerXML), + }) + } else { + pstatNotFound.Props = append(pstatNotFound.Props, Property{ + XMLName: pn, + }) + } + } + return makePropstats(pstatOK, pstatNotFound), nil +} + +// Propnames returns the property names defined for resource name. +func propnames(ctx context.Context, fs FileSystem, ls LockSystem, name string) ([]xml.Name, error) { + f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0) + if err != nil { + return nil, err + } + defer f.Close() + fi, err := f.Stat() + if err != nil { + return nil, err + } + isDir := fi.IsDir() + + var deadProps map[xml.Name]Property + if dph, ok := f.(DeadPropsHolder); ok { + deadProps, err = dph.DeadProps() + if err != nil { + return nil, err + } + } + + pnames := make([]xml.Name, 0, len(liveProps)+len(deadProps)) + for pn, prop := range liveProps { + if prop.findFn != nil && (prop.dir || !isDir) { + pnames = append(pnames, pn) + } + } + for pn := range deadProps { + pnames = append(pnames, pn) + } + return pnames, nil +} + +// Allprop returns the properties defined for resource name and the properties +// named in include. +// +// Note that RFC 4918 defines 'allprop' to return the DAV: properties defined +// within the RFC plus dead properties. Other live properties should only be +// returned if they are named in 'include'. +// +// See http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND +func allprop(ctx context.Context, fs FileSystem, ls LockSystem, name string, include []xml.Name) ([]Propstat, error) { + pnames, err := propnames(ctx, fs, ls, name) + if err != nil { + return nil, err + } + // Add names from include if they are not already covered in pnames. + nameset := make(map[xml.Name]bool) + for _, pn := range pnames { + nameset[pn] = true + } + for _, pn := range include { + if !nameset[pn] { + pnames = append(pnames, pn) + } + } + return props(ctx, fs, ls, name, pnames) +} + +// Patch patches the properties of resource name. The return values are +// constrained in the same manner as DeadPropsHolder.Patch. +func patch(ctx context.Context, fs FileSystem, ls LockSystem, name string, patches []Proppatch) ([]Propstat, error) { + conflict := false +loop: + for _, patch := range patches { + for _, p := range patch.Props { + if _, ok := liveProps[p.XMLName]; ok { + conflict = true + break loop + } + } + } + if conflict { + pstatForbidden := Propstat{ + Status: http.StatusForbidden, + XMLError: ``, + } + pstatFailedDep := Propstat{ + Status: StatusFailedDependency, + } + for _, patch := range patches { + for _, p := range patch.Props { + if _, ok := liveProps[p.XMLName]; ok { + pstatForbidden.Props = append(pstatForbidden.Props, Property{XMLName: p.XMLName}) + } else { + pstatFailedDep.Props = append(pstatFailedDep.Props, Property{XMLName: p.XMLName}) + } + } + } + return makePropstats(pstatForbidden, pstatFailedDep), nil + } + + f, err := fs.OpenFile(ctx, name, os.O_RDWR, 0) + if err != nil { + return nil, err + } + defer f.Close() + if dph, ok := f.(DeadPropsHolder); ok { + ret, err := dph.Patch(patches) + if err != nil { + return nil, err + } + // http://www.webdav.org/specs/rfc4918.html#ELEMENT_propstat says that + // "The contents of the prop XML element must only list the names of + // properties to which the result in the status element applies." + for _, pstat := range ret { + for i, p := range pstat.Props { + pstat.Props[i] = Property{XMLName: p.XMLName} + } + } + return ret, nil + } + // The file doesn't implement the optional DeadPropsHolder interface, so + // all patches are forbidden. + pstat := Propstat{Status: http.StatusForbidden} + for _, patch := range patches { + for _, p := range patch.Props { + pstat.Props = append(pstat.Props, Property{XMLName: p.XMLName}) + } + } + return []Propstat{pstat}, nil +} + +func escapeXML(s string) string { + for i := 0; i < len(s); i++ { + // As an optimization, if s contains only ASCII letters, digits or a + // few special characters, the escaped value is s itself and we don't + // need to allocate a buffer and convert between string and []byte. + switch c := s[i]; { + case c == ' ' || c == '_' || + ('+' <= c && c <= '9') || // Digits as well as + , - . and / + ('A' <= c && c <= 'Z') || + ('a' <= c && c <= 'z'): + continue + } + // Otherwise, go through the full escaping process. + var buf bytes.Buffer + xml.EscapeText(&buf, []byte(s)) + return buf.String() + } + return s +} + +func findResourceType(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) { + if fi.IsDir() { + return ``, nil + } + return "", nil +} + +func findDisplayName(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) { + if slashClean(name) == "/" { + // Hide the real name of a possibly prefixed root directory. + return "", nil + } + return escapeXML(fi.Name()), nil +} + +func findContentLength(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) { + return strconv.FormatInt(fi.Size(), 10), nil +} + +func findLastModified(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) { + return fi.ModTime().Format(http.TimeFormat), nil +} + +func findContentType(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) { + f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0) + if err != nil { + return "", err + } + defer f.Close() + // This implementation is based on serveContent's code in the standard net/http package. + ctype := mime.TypeByExtension(filepath.Ext(name)) + if ctype != "" { + return ctype, nil + } + // Read a chunk to decide between utf-8 text and binary. + var buf [512]byte + n, err := io.ReadFull(f, buf[:]) + if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF { + return "", err + } + ctype = http.DetectContentType(buf[:n]) + // Rewind file. + _, err = f.Seek(0, os.SEEK_SET) + return ctype, err +} + +func findETag(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) { + // The Apache http 2.4 web server by default concatenates the + // modification time and size of a file. We replicate the heuristic + // with nanosecond granularity. + return fmt.Sprintf(`"%x%x"`, fi.ModTime().UnixNano(), fi.Size()), nil +} + +func findSupportedLock(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) { + return `` + + `` + + `` + + `` + + ``, nil +} diff --git a/vendor/golang.org/x/net/webdav/prop_test.go b/vendor/golang.org/x/net/webdav/prop_test.go new file mode 100644 index 0000000..57d0e82 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/prop_test.go @@ -0,0 +1,613 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "encoding/xml" + "fmt" + "net/http" + "os" + "reflect" + "sort" + "testing" + + "golang.org/x/net/context" +) + +func TestMemPS(t *testing.T) { + ctx := context.Background() + // calcProps calculates the getlastmodified and getetag DAV: property + // values in pstats for resource name in file-system fs. + calcProps := func(name string, fs FileSystem, ls LockSystem, pstats []Propstat) error { + fi, err := fs.Stat(ctx, name) + if err != nil { + return err + } + for _, pst := range pstats { + for i, p := range pst.Props { + switch p.XMLName { + case xml.Name{Space: "DAV:", Local: "getlastmodified"}: + p.InnerXML = []byte(fi.ModTime().Format(http.TimeFormat)) + pst.Props[i] = p + case xml.Name{Space: "DAV:", Local: "getetag"}: + if fi.IsDir() { + continue + } + etag, err := findETag(ctx, fs, ls, name, fi) + if err != nil { + return err + } + p.InnerXML = []byte(etag) + pst.Props[i] = p + } + } + } + return nil + } + + const ( + lockEntry = `` + + `` + + `` + + `` + + `` + statForbiddenError = `` + ) + + type propOp struct { + op string + name string + pnames []xml.Name + patches []Proppatch + wantPnames []xml.Name + wantPropstats []Propstat + } + + testCases := []struct { + desc string + noDeadProps bool + buildfs []string + propOp []propOp + }{{ + desc: "propname", + buildfs: []string{"mkdir /dir", "touch /file"}, + propOp: []propOp{{ + op: "propname", + name: "/dir", + wantPnames: []xml.Name{ + {Space: "DAV:", Local: "resourcetype"}, + {Space: "DAV:", Local: "displayname"}, + {Space: "DAV:", Local: "supportedlock"}, + {Space: "DAV:", Local: "getlastmodified"}, + }, + }, { + op: "propname", + name: "/file", + wantPnames: []xml.Name{ + {Space: "DAV:", Local: "resourcetype"}, + {Space: "DAV:", Local: "displayname"}, + {Space: "DAV:", Local: "getcontentlength"}, + {Space: "DAV:", Local: "getlastmodified"}, + {Space: "DAV:", Local: "getcontenttype"}, + {Space: "DAV:", Local: "getetag"}, + {Space: "DAV:", Local: "supportedlock"}, + }, + }}, + }, { + desc: "allprop dir and file", + buildfs: []string{"mkdir /dir", "write /file foobarbaz"}, + propOp: []propOp{{ + op: "allprop", + name: "/dir", + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"}, + InnerXML: []byte(``), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "displayname"}, + InnerXML: []byte("dir"), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getlastmodified"}, + InnerXML: nil, // Calculated during test. + }, { + XMLName: xml.Name{Space: "DAV:", Local: "supportedlock"}, + InnerXML: []byte(lockEntry), + }}, + }}, + }, { + op: "allprop", + name: "/file", + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"}, + InnerXML: []byte(""), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "displayname"}, + InnerXML: []byte("file"), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getcontentlength"}, + InnerXML: []byte("9"), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getlastmodified"}, + InnerXML: nil, // Calculated during test. + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getcontenttype"}, + InnerXML: []byte("text/plain; charset=utf-8"), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getetag"}, + InnerXML: nil, // Calculated during test. + }, { + XMLName: xml.Name{Space: "DAV:", Local: "supportedlock"}, + InnerXML: []byte(lockEntry), + }}, + }}, + }, { + op: "allprop", + name: "/file", + pnames: []xml.Name{ + {"DAV:", "resourcetype"}, + {"foo", "bar"}, + }, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"}, + InnerXML: []byte(""), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "displayname"}, + InnerXML: []byte("file"), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getcontentlength"}, + InnerXML: []byte("9"), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getlastmodified"}, + InnerXML: nil, // Calculated during test. + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getcontenttype"}, + InnerXML: []byte("text/plain; charset=utf-8"), + }, { + XMLName: xml.Name{Space: "DAV:", Local: "getetag"}, + InnerXML: nil, // Calculated during test. + }, { + XMLName: xml.Name{Space: "DAV:", Local: "supportedlock"}, + InnerXML: []byte(lockEntry), + }}}, { + Status: http.StatusNotFound, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}}, + }, + }}, + }, { + desc: "propfind DAV:resourcetype", + buildfs: []string{"mkdir /dir", "touch /file"}, + propOp: []propOp{{ + op: "propfind", + name: "/dir", + pnames: []xml.Name{{"DAV:", "resourcetype"}}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"}, + InnerXML: []byte(``), + }}, + }}, + }, { + op: "propfind", + name: "/file", + pnames: []xml.Name{{"DAV:", "resourcetype"}}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"}, + InnerXML: []byte(""), + }}, + }}, + }}, + }, { + desc: "propfind unsupported DAV properties", + buildfs: []string{"mkdir /dir"}, + propOp: []propOp{{ + op: "propfind", + name: "/dir", + pnames: []xml.Name{{"DAV:", "getcontentlanguage"}}, + wantPropstats: []Propstat{{ + Status: http.StatusNotFound, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "getcontentlanguage"}, + }}, + }}, + }, { + op: "propfind", + name: "/dir", + pnames: []xml.Name{{"DAV:", "creationdate"}}, + wantPropstats: []Propstat{{ + Status: http.StatusNotFound, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "creationdate"}, + }}, + }}, + }}, + }, { + desc: "propfind getetag for files but not for directories", + buildfs: []string{"mkdir /dir", "touch /file"}, + propOp: []propOp{{ + op: "propfind", + name: "/dir", + pnames: []xml.Name{{"DAV:", "getetag"}}, + wantPropstats: []Propstat{{ + Status: http.StatusNotFound, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "getetag"}, + }}, + }}, + }, { + op: "propfind", + name: "/file", + pnames: []xml.Name{{"DAV:", "getetag"}}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "getetag"}, + InnerXML: nil, // Calculated during test. + }}, + }}, + }}, + }, { + desc: "proppatch property on no-dead-properties file system", + buildfs: []string{"mkdir /dir"}, + noDeadProps: true, + propOp: []propOp{{ + op: "proppatch", + name: "/dir", + patches: []Proppatch{{ + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + wantPropstats: []Propstat{{ + Status: http.StatusForbidden, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + }, { + op: "proppatch", + name: "/dir", + patches: []Proppatch{{ + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "getetag"}, + }}, + }}, + wantPropstats: []Propstat{{ + Status: http.StatusForbidden, + XMLError: statForbiddenError, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "getetag"}, + }}, + }}, + }}, + }, { + desc: "proppatch dead property", + buildfs: []string{"mkdir /dir"}, + propOp: []propOp{{ + op: "proppatch", + name: "/dir", + patches: []Proppatch{{ + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + InnerXML: []byte("baz"), + }}, + }}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + }, { + op: "propfind", + name: "/dir", + pnames: []xml.Name{{Space: "foo", Local: "bar"}}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + InnerXML: []byte("baz"), + }}, + }}, + }}, + }, { + desc: "proppatch dead property with failed dependency", + buildfs: []string{"mkdir /dir"}, + propOp: []propOp{{ + op: "proppatch", + name: "/dir", + patches: []Proppatch{{ + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + InnerXML: []byte("baz"), + }}, + }, { + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "displayname"}, + InnerXML: []byte("xxx"), + }}, + }}, + wantPropstats: []Propstat{{ + Status: http.StatusForbidden, + XMLError: statForbiddenError, + Props: []Property{{ + XMLName: xml.Name{Space: "DAV:", Local: "displayname"}, + }}, + }, { + Status: StatusFailedDependency, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + }, { + op: "propfind", + name: "/dir", + pnames: []xml.Name{{Space: "foo", Local: "bar"}}, + wantPropstats: []Propstat{{ + Status: http.StatusNotFound, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + }}, + }, { + desc: "proppatch remove dead property", + buildfs: []string{"mkdir /dir"}, + propOp: []propOp{{ + op: "proppatch", + name: "/dir", + patches: []Proppatch{{ + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + InnerXML: []byte("baz"), + }, { + XMLName: xml.Name{Space: "spam", Local: "ham"}, + InnerXML: []byte("eggs"), + }}, + }}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }, { + XMLName: xml.Name{Space: "spam", Local: "ham"}, + }}, + }}, + }, { + op: "propfind", + name: "/dir", + pnames: []xml.Name{ + {Space: "foo", Local: "bar"}, + {Space: "spam", Local: "ham"}, + }, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + InnerXML: []byte("baz"), + }, { + XMLName: xml.Name{Space: "spam", Local: "ham"}, + InnerXML: []byte("eggs"), + }}, + }}, + }, { + op: "proppatch", + name: "/dir", + patches: []Proppatch{{ + Remove: true, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + }, { + op: "propfind", + name: "/dir", + pnames: []xml.Name{ + {Space: "foo", Local: "bar"}, + {Space: "spam", Local: "ham"}, + }, + wantPropstats: []Propstat{{ + Status: http.StatusNotFound, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }, { + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "spam", Local: "ham"}, + InnerXML: []byte("eggs"), + }}, + }}, + }}, + }, { + desc: "propname with dead property", + buildfs: []string{"touch /file"}, + propOp: []propOp{{ + op: "proppatch", + name: "/file", + patches: []Proppatch{{ + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + InnerXML: []byte("baz"), + }}, + }}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + }, { + op: "propname", + name: "/file", + wantPnames: []xml.Name{ + {Space: "DAV:", Local: "resourcetype"}, + {Space: "DAV:", Local: "displayname"}, + {Space: "DAV:", Local: "getcontentlength"}, + {Space: "DAV:", Local: "getlastmodified"}, + {Space: "DAV:", Local: "getcontenttype"}, + {Space: "DAV:", Local: "getetag"}, + {Space: "DAV:", Local: "supportedlock"}, + {Space: "foo", Local: "bar"}, + }, + }}, + }, { + desc: "proppatch remove unknown dead property", + buildfs: []string{"mkdir /dir"}, + propOp: []propOp{{ + op: "proppatch", + name: "/dir", + patches: []Proppatch{{ + Remove: true, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + wantPropstats: []Propstat{{ + Status: http.StatusOK, + Props: []Property{{ + XMLName: xml.Name{Space: "foo", Local: "bar"}, + }}, + }}, + }}, + }, { + desc: "bad: propfind unknown property", + buildfs: []string{"mkdir /dir"}, + propOp: []propOp{{ + op: "propfind", + name: "/dir", + pnames: []xml.Name{{"foo:", "bar"}}, + wantPropstats: []Propstat{{ + Status: http.StatusNotFound, + Props: []Property{{ + XMLName: xml.Name{Space: "foo:", Local: "bar"}, + }}, + }}, + }}, + }} + + for _, tc := range testCases { + fs, err := buildTestFS(tc.buildfs) + if err != nil { + t.Fatalf("%s: cannot create test filesystem: %v", tc.desc, err) + } + if tc.noDeadProps { + fs = noDeadPropsFS{fs} + } + ls := NewMemLS() + for _, op := range tc.propOp { + desc := fmt.Sprintf("%s: %s %s", tc.desc, op.op, op.name) + if err = calcProps(op.name, fs, ls, op.wantPropstats); err != nil { + t.Fatalf("%s: calcProps: %v", desc, err) + } + + // Call property system. + var propstats []Propstat + switch op.op { + case "propname": + pnames, err := propnames(ctx, fs, ls, op.name) + if err != nil { + t.Errorf("%s: got error %v, want nil", desc, err) + continue + } + sort.Sort(byXMLName(pnames)) + sort.Sort(byXMLName(op.wantPnames)) + if !reflect.DeepEqual(pnames, op.wantPnames) { + t.Errorf("%s: pnames\ngot %q\nwant %q", desc, pnames, op.wantPnames) + } + continue + case "allprop": + propstats, err = allprop(ctx, fs, ls, op.name, op.pnames) + case "propfind": + propstats, err = props(ctx, fs, ls, op.name, op.pnames) + case "proppatch": + propstats, err = patch(ctx, fs, ls, op.name, op.patches) + default: + t.Fatalf("%s: %s not implemented", desc, op.op) + } + if err != nil { + t.Errorf("%s: got error %v, want nil", desc, err) + continue + } + // Compare return values from allprop, propfind or proppatch. + for _, pst := range propstats { + sort.Sort(byPropname(pst.Props)) + } + for _, pst := range op.wantPropstats { + sort.Sort(byPropname(pst.Props)) + } + sort.Sort(byStatus(propstats)) + sort.Sort(byStatus(op.wantPropstats)) + if !reflect.DeepEqual(propstats, op.wantPropstats) { + t.Errorf("%s: propstat\ngot %q\nwant %q", desc, propstats, op.wantPropstats) + } + } + } +} + +func cmpXMLName(a, b xml.Name) bool { + if a.Space != b.Space { + return a.Space < b.Space + } + return a.Local < b.Local +} + +type byXMLName []xml.Name + +func (b byXMLName) Len() int { return len(b) } +func (b byXMLName) Swap(i, j int) { b[i], b[j] = b[j], b[i] } +func (b byXMLName) Less(i, j int) bool { return cmpXMLName(b[i], b[j]) } + +type byPropname []Property + +func (b byPropname) Len() int { return len(b) } +func (b byPropname) Swap(i, j int) { b[i], b[j] = b[j], b[i] } +func (b byPropname) Less(i, j int) bool { return cmpXMLName(b[i].XMLName, b[j].XMLName) } + +type byStatus []Propstat + +func (b byStatus) Len() int { return len(b) } +func (b byStatus) Swap(i, j int) { b[i], b[j] = b[j], b[i] } +func (b byStatus) Less(i, j int) bool { return b[i].Status < b[j].Status } + +type noDeadPropsFS struct { + FileSystem +} + +func (fs noDeadPropsFS) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (File, error) { + f, err := fs.FileSystem.OpenFile(ctx, name, flag, perm) + if err != nil { + return nil, err + } + return noDeadPropsFile{f}, nil +} + +// noDeadPropsFile wraps a File but strips any optional DeadPropsHolder methods +// provided by the underlying File implementation. +type noDeadPropsFile struct { + f File +} + +func (f noDeadPropsFile) Close() error { return f.f.Close() } +func (f noDeadPropsFile) Read(p []byte) (int, error) { return f.f.Read(p) } +func (f noDeadPropsFile) Readdir(count int) ([]os.FileInfo, error) { return f.f.Readdir(count) } +func (f noDeadPropsFile) Seek(off int64, whence int) (int64, error) { return f.f.Seek(off, whence) } +func (f noDeadPropsFile) Stat() (os.FileInfo, error) { return f.f.Stat() } +func (f noDeadPropsFile) Write(p []byte) (int, error) { return f.f.Write(p) } diff --git a/vendor/golang.org/x/net/webdav/webdav.go b/vendor/golang.org/x/net/webdav/webdav.go new file mode 100644 index 0000000..7b56687 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/webdav.go @@ -0,0 +1,702 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package webdav provides a WebDAV server implementation. +package webdav // import "golang.org/x/net/webdav" + +import ( + "errors" + "fmt" + "io" + "net/http" + "net/url" + "os" + "path" + "strings" + "time" +) + +type Handler struct { + // Prefix is the URL path prefix to strip from WebDAV resource paths. + Prefix string + // FileSystem is the virtual file system. + FileSystem FileSystem + // LockSystem is the lock management system. + LockSystem LockSystem + // Logger is an optional error logger. If non-nil, it will be called + // for all HTTP requests. + Logger func(*http.Request, error) +} + +func (h *Handler) stripPrefix(p string) (string, int, error) { + if h.Prefix == "" { + return p, http.StatusOK, nil + } + if r := strings.TrimPrefix(p, h.Prefix); len(r) < len(p) { + return r, http.StatusOK, nil + } + return p, http.StatusNotFound, errPrefixMismatch +} + +func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + status, err := http.StatusBadRequest, errUnsupportedMethod + if h.FileSystem == nil { + status, err = http.StatusInternalServerError, errNoFileSystem + } else if h.LockSystem == nil { + status, err = http.StatusInternalServerError, errNoLockSystem + } else { + switch r.Method { + case "OPTIONS": + status, err = h.handleOptions(w, r) + case "GET", "HEAD", "POST": + status, err = h.handleGetHeadPost(w, r) + case "DELETE": + status, err = h.handleDelete(w, r) + case "PUT": + status, err = h.handlePut(w, r) + case "MKCOL": + status, err = h.handleMkcol(w, r) + case "COPY", "MOVE": + status, err = h.handleCopyMove(w, r) + case "LOCK": + status, err = h.handleLock(w, r) + case "UNLOCK": + status, err = h.handleUnlock(w, r) + case "PROPFIND": + status, err = h.handlePropfind(w, r) + case "PROPPATCH": + status, err = h.handleProppatch(w, r) + } + } + + if status != 0 { + w.WriteHeader(status) + if status != http.StatusNoContent { + w.Write([]byte(StatusText(status))) + } + } + if h.Logger != nil { + h.Logger(r, err) + } +} + +func (h *Handler) lock(now time.Time, root string) (token string, status int, err error) { + token, err = h.LockSystem.Create(now, LockDetails{ + Root: root, + Duration: infiniteTimeout, + ZeroDepth: true, + }) + if err != nil { + if err == ErrLocked { + return "", StatusLocked, err + } + return "", http.StatusInternalServerError, err + } + return token, 0, nil +} + +func (h *Handler) confirmLocks(r *http.Request, src, dst string) (release func(), status int, err error) { + hdr := r.Header.Get("If") + if hdr == "" { + // An empty If header means that the client hasn't previously created locks. + // Even if this client doesn't care about locks, we still need to check that + // the resources aren't locked by another client, so we create temporary + // locks that would conflict with another client's locks. These temporary + // locks are unlocked at the end of the HTTP request. + now, srcToken, dstToken := time.Now(), "", "" + if src != "" { + srcToken, status, err = h.lock(now, src) + if err != nil { + return nil, status, err + } + } + if dst != "" { + dstToken, status, err = h.lock(now, dst) + if err != nil { + if srcToken != "" { + h.LockSystem.Unlock(now, srcToken) + } + return nil, status, err + } + } + + return func() { + if dstToken != "" { + h.LockSystem.Unlock(now, dstToken) + } + if srcToken != "" { + h.LockSystem.Unlock(now, srcToken) + } + }, 0, nil + } + + ih, ok := parseIfHeader(hdr) + if !ok { + return nil, http.StatusBadRequest, errInvalidIfHeader + } + // ih is a disjunction (OR) of ifLists, so any ifList will do. + for _, l := range ih.lists { + lsrc := l.resourceTag + if lsrc == "" { + lsrc = src + } else { + u, err := url.Parse(lsrc) + if err != nil { + continue + } + if u.Host != r.Host { + continue + } + lsrc, status, err = h.stripPrefix(u.Path) + if err != nil { + return nil, status, err + } + } + release, err = h.LockSystem.Confirm(time.Now(), lsrc, dst, l.conditions...) + if err == ErrConfirmationFailed { + continue + } + if err != nil { + return nil, http.StatusInternalServerError, err + } + return release, 0, nil + } + // Section 10.4.1 says that "If this header is evaluated and all state lists + // fail, then the request must fail with a 412 (Precondition Failed) status." + // We follow the spec even though the cond_put_corrupt_token test case from + // the litmus test warns on seeing a 412 instead of a 423 (Locked). + return nil, http.StatusPreconditionFailed, ErrLocked +} + +func (h *Handler) handleOptions(w http.ResponseWriter, r *http.Request) (status int, err error) { + reqPath, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + ctx := getContext(r) + allow := "OPTIONS, LOCK, PUT, MKCOL" + if fi, err := h.FileSystem.Stat(ctx, reqPath); err == nil { + if fi.IsDir() { + allow = "OPTIONS, LOCK, DELETE, PROPPATCH, COPY, MOVE, UNLOCK, PROPFIND" + } else { + allow = "OPTIONS, LOCK, GET, HEAD, POST, DELETE, PROPPATCH, COPY, MOVE, UNLOCK, PROPFIND, PUT" + } + } + w.Header().Set("Allow", allow) + // http://www.webdav.org/specs/rfc4918.html#dav.compliance.classes + w.Header().Set("DAV", "1, 2") + // http://msdn.microsoft.com/en-au/library/cc250217.aspx + w.Header().Set("MS-Author-Via", "DAV") + return 0, nil +} + +func (h *Handler) handleGetHeadPost(w http.ResponseWriter, r *http.Request) (status int, err error) { + reqPath, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + // TODO: check locks for read-only access?? + ctx := getContext(r) + f, err := h.FileSystem.OpenFile(ctx, reqPath, os.O_RDONLY, 0) + if err != nil { + return http.StatusNotFound, err + } + defer f.Close() + fi, err := f.Stat() + if err != nil { + return http.StatusNotFound, err + } + if fi.IsDir() { + return http.StatusMethodNotAllowed, nil + } + etag, err := findETag(ctx, h.FileSystem, h.LockSystem, reqPath, fi) + if err != nil { + return http.StatusInternalServerError, err + } + w.Header().Set("ETag", etag) + // Let ServeContent determine the Content-Type header. + http.ServeContent(w, r, reqPath, fi.ModTime(), f) + return 0, nil +} + +func (h *Handler) handleDelete(w http.ResponseWriter, r *http.Request) (status int, err error) { + reqPath, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + release, status, err := h.confirmLocks(r, reqPath, "") + if err != nil { + return status, err + } + defer release() + + ctx := getContext(r) + + // TODO: return MultiStatus where appropriate. + + // "godoc os RemoveAll" says that "If the path does not exist, RemoveAll + // returns nil (no error)." WebDAV semantics are that it should return a + // "404 Not Found". We therefore have to Stat before we RemoveAll. + if _, err := h.FileSystem.Stat(ctx, reqPath); err != nil { + if os.IsNotExist(err) { + return http.StatusNotFound, err + } + return http.StatusMethodNotAllowed, err + } + if err := h.FileSystem.RemoveAll(ctx, reqPath); err != nil { + return http.StatusMethodNotAllowed, err + } + return http.StatusNoContent, nil +} + +func (h *Handler) handlePut(w http.ResponseWriter, r *http.Request) (status int, err error) { + reqPath, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + release, status, err := h.confirmLocks(r, reqPath, "") + if err != nil { + return status, err + } + defer release() + // TODO(rost): Support the If-Match, If-None-Match headers? See bradfitz' + // comments in http.checkEtag. + ctx := getContext(r) + + f, err := h.FileSystem.OpenFile(ctx, reqPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if err != nil { + return http.StatusNotFound, err + } + _, copyErr := io.Copy(f, r.Body) + fi, statErr := f.Stat() + closeErr := f.Close() + // TODO(rost): Returning 405 Method Not Allowed might not be appropriate. + if copyErr != nil { + return http.StatusMethodNotAllowed, copyErr + } + if statErr != nil { + return http.StatusMethodNotAllowed, statErr + } + if closeErr != nil { + return http.StatusMethodNotAllowed, closeErr + } + etag, err := findETag(ctx, h.FileSystem, h.LockSystem, reqPath, fi) + if err != nil { + return http.StatusInternalServerError, err + } + w.Header().Set("ETag", etag) + return http.StatusCreated, nil +} + +func (h *Handler) handleMkcol(w http.ResponseWriter, r *http.Request) (status int, err error) { + reqPath, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + release, status, err := h.confirmLocks(r, reqPath, "") + if err != nil { + return status, err + } + defer release() + + ctx := getContext(r) + + if r.ContentLength > 0 { + return http.StatusUnsupportedMediaType, nil + } + if err := h.FileSystem.Mkdir(ctx, reqPath, 0777); err != nil { + if os.IsNotExist(err) { + return http.StatusConflict, err + } + return http.StatusMethodNotAllowed, err + } + return http.StatusCreated, nil +} + +func (h *Handler) handleCopyMove(w http.ResponseWriter, r *http.Request) (status int, err error) { + hdr := r.Header.Get("Destination") + if hdr == "" { + return http.StatusBadRequest, errInvalidDestination + } + u, err := url.Parse(hdr) + if err != nil { + return http.StatusBadRequest, errInvalidDestination + } + if u.Host != r.Host { + return http.StatusBadGateway, errInvalidDestination + } + + src, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + + dst, status, err := h.stripPrefix(u.Path) + if err != nil { + return status, err + } + + if dst == "" { + return http.StatusBadGateway, errInvalidDestination + } + if dst == src { + return http.StatusForbidden, errDestinationEqualsSource + } + + ctx := getContext(r) + + if r.Method == "COPY" { + // Section 7.5.1 says that a COPY only needs to lock the destination, + // not both destination and source. Strictly speaking, this is racy, + // even though a COPY doesn't modify the source, if a concurrent + // operation modifies the source. However, the litmus test explicitly + // checks that COPYing a locked-by-another source is OK. + release, status, err := h.confirmLocks(r, "", dst) + if err != nil { + return status, err + } + defer release() + + // Section 9.8.3 says that "The COPY method on a collection without a Depth + // header must act as if a Depth header with value "infinity" was included". + depth := infiniteDepth + if hdr := r.Header.Get("Depth"); hdr != "" { + depth = parseDepth(hdr) + if depth != 0 && depth != infiniteDepth { + // Section 9.8.3 says that "A client may submit a Depth header on a + // COPY on a collection with a value of "0" or "infinity"." + return http.StatusBadRequest, errInvalidDepth + } + } + return copyFiles(ctx, h.FileSystem, src, dst, r.Header.Get("Overwrite") != "F", depth, 0) + } + + release, status, err := h.confirmLocks(r, src, dst) + if err != nil { + return status, err + } + defer release() + + // Section 9.9.2 says that "The MOVE method on a collection must act as if + // a "Depth: infinity" header was used on it. A client must not submit a + // Depth header on a MOVE on a collection with any value but "infinity"." + if hdr := r.Header.Get("Depth"); hdr != "" { + if parseDepth(hdr) != infiniteDepth { + return http.StatusBadRequest, errInvalidDepth + } + } + return moveFiles(ctx, h.FileSystem, src, dst, r.Header.Get("Overwrite") == "T") +} + +func (h *Handler) handleLock(w http.ResponseWriter, r *http.Request) (retStatus int, retErr error) { + duration, err := parseTimeout(r.Header.Get("Timeout")) + if err != nil { + return http.StatusBadRequest, err + } + li, status, err := readLockInfo(r.Body) + if err != nil { + return status, err + } + + ctx := getContext(r) + token, ld, now, created := "", LockDetails{}, time.Now(), false + if li == (lockInfo{}) { + // An empty lockInfo means to refresh the lock. + ih, ok := parseIfHeader(r.Header.Get("If")) + if !ok { + return http.StatusBadRequest, errInvalidIfHeader + } + if len(ih.lists) == 1 && len(ih.lists[0].conditions) == 1 { + token = ih.lists[0].conditions[0].Token + } + if token == "" { + return http.StatusBadRequest, errInvalidLockToken + } + ld, err = h.LockSystem.Refresh(now, token, duration) + if err != nil { + if err == ErrNoSuchLock { + return http.StatusPreconditionFailed, err + } + return http.StatusInternalServerError, err + } + + } else { + // Section 9.10.3 says that "If no Depth header is submitted on a LOCK request, + // then the request MUST act as if a "Depth:infinity" had been submitted." + depth := infiniteDepth + if hdr := r.Header.Get("Depth"); hdr != "" { + depth = parseDepth(hdr) + if depth != 0 && depth != infiniteDepth { + // Section 9.10.3 says that "Values other than 0 or infinity must not be + // used with the Depth header on a LOCK method". + return http.StatusBadRequest, errInvalidDepth + } + } + reqPath, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + ld = LockDetails{ + Root: reqPath, + Duration: duration, + OwnerXML: li.Owner.InnerXML, + ZeroDepth: depth == 0, + } + token, err = h.LockSystem.Create(now, ld) + if err != nil { + if err == ErrLocked { + return StatusLocked, err + } + return http.StatusInternalServerError, err + } + defer func() { + if retErr != nil { + h.LockSystem.Unlock(now, token) + } + }() + + // Create the resource if it didn't previously exist. + if _, err := h.FileSystem.Stat(ctx, reqPath); err != nil { + f, err := h.FileSystem.OpenFile(ctx, reqPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + if err != nil { + // TODO: detect missing intermediate dirs and return http.StatusConflict? + return http.StatusInternalServerError, err + } + f.Close() + created = true + } + + // http://www.webdav.org/specs/rfc4918.html#HEADER_Lock-Token says that the + // Lock-Token value is a Coded-URL. We add angle brackets. + w.Header().Set("Lock-Token", "<"+token+">") + } + + w.Header().Set("Content-Type", "application/xml; charset=utf-8") + if created { + // This is "w.WriteHeader(http.StatusCreated)" and not "return + // http.StatusCreated, nil" because we write our own (XML) response to w + // and Handler.ServeHTTP would otherwise write "Created". + w.WriteHeader(http.StatusCreated) + } + writeLockInfo(w, token, ld) + return 0, nil +} + +func (h *Handler) handleUnlock(w http.ResponseWriter, r *http.Request) (status int, err error) { + // http://www.webdav.org/specs/rfc4918.html#HEADER_Lock-Token says that the + // Lock-Token value is a Coded-URL. We strip its angle brackets. + t := r.Header.Get("Lock-Token") + if len(t) < 2 || t[0] != '<' || t[len(t)-1] != '>' { + return http.StatusBadRequest, errInvalidLockToken + } + t = t[1 : len(t)-1] + + switch err = h.LockSystem.Unlock(time.Now(), t); err { + case nil: + return http.StatusNoContent, err + case ErrForbidden: + return http.StatusForbidden, err + case ErrLocked: + return StatusLocked, err + case ErrNoSuchLock: + return http.StatusConflict, err + default: + return http.StatusInternalServerError, err + } +} + +func (h *Handler) handlePropfind(w http.ResponseWriter, r *http.Request) (status int, err error) { + reqPath, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + ctx := getContext(r) + fi, err := h.FileSystem.Stat(ctx, reqPath) + if err != nil { + if os.IsNotExist(err) { + return http.StatusNotFound, err + } + return http.StatusMethodNotAllowed, err + } + depth := infiniteDepth + if hdr := r.Header.Get("Depth"); hdr != "" { + depth = parseDepth(hdr) + if depth == invalidDepth { + return http.StatusBadRequest, errInvalidDepth + } + } + pf, status, err := readPropfind(r.Body) + if err != nil { + return status, err + } + + mw := multistatusWriter{w: w} + + walkFn := func(reqPath string, info os.FileInfo, err error) error { + if err != nil { + return err + } + var pstats []Propstat + if pf.Propname != nil { + pnames, err := propnames(ctx, h.FileSystem, h.LockSystem, reqPath) + if err != nil { + return err + } + pstat := Propstat{Status: http.StatusOK} + for _, xmlname := range pnames { + pstat.Props = append(pstat.Props, Property{XMLName: xmlname}) + } + pstats = append(pstats, pstat) + } else if pf.Allprop != nil { + pstats, err = allprop(ctx, h.FileSystem, h.LockSystem, reqPath, pf.Prop) + } else { + pstats, err = props(ctx, h.FileSystem, h.LockSystem, reqPath, pf.Prop) + } + if err != nil { + return err + } + return mw.write(makePropstatResponse(path.Join(h.Prefix, reqPath), pstats)) + } + + walkErr := walkFS(ctx, h.FileSystem, depth, reqPath, fi, walkFn) + closeErr := mw.close() + if walkErr != nil { + return http.StatusInternalServerError, walkErr + } + if closeErr != nil { + return http.StatusInternalServerError, closeErr + } + return 0, nil +} + +func (h *Handler) handleProppatch(w http.ResponseWriter, r *http.Request) (status int, err error) { + reqPath, status, err := h.stripPrefix(r.URL.Path) + if err != nil { + return status, err + } + release, status, err := h.confirmLocks(r, reqPath, "") + if err != nil { + return status, err + } + defer release() + + ctx := getContext(r) + + if _, err := h.FileSystem.Stat(ctx, reqPath); err != nil { + if os.IsNotExist(err) { + return http.StatusNotFound, err + } + return http.StatusMethodNotAllowed, err + } + patches, status, err := readProppatch(r.Body) + if err != nil { + return status, err + } + pstats, err := patch(ctx, h.FileSystem, h.LockSystem, reqPath, patches) + if err != nil { + return http.StatusInternalServerError, err + } + mw := multistatusWriter{w: w} + writeErr := mw.write(makePropstatResponse(r.URL.Path, pstats)) + closeErr := mw.close() + if writeErr != nil { + return http.StatusInternalServerError, writeErr + } + if closeErr != nil { + return http.StatusInternalServerError, closeErr + } + return 0, nil +} + +func makePropstatResponse(href string, pstats []Propstat) *response { + resp := response{ + Href: []string{(&url.URL{Path: href}).EscapedPath()}, + Propstat: make([]propstat, 0, len(pstats)), + } + for _, p := range pstats { + var xmlErr *xmlError + if p.XMLError != "" { + xmlErr = &xmlError{InnerXML: []byte(p.XMLError)} + } + resp.Propstat = append(resp.Propstat, propstat{ + Status: fmt.Sprintf("HTTP/1.1 %d %s", p.Status, StatusText(p.Status)), + Prop: p.Props, + ResponseDescription: p.ResponseDescription, + Error: xmlErr, + }) + } + return &resp +} + +const ( + infiniteDepth = -1 + invalidDepth = -2 +) + +// parseDepth maps the strings "0", "1" and "infinity" to 0, 1 and +// infiniteDepth. Parsing any other string returns invalidDepth. +// +// Different WebDAV methods have further constraints on valid depths: +// - PROPFIND has no further restrictions, as per section 9.1. +// - COPY accepts only "0" or "infinity", as per section 9.8.3. +// - MOVE accepts only "infinity", as per section 9.9.2. +// - LOCK accepts only "0" or "infinity", as per section 9.10.3. +// These constraints are enforced by the handleXxx methods. +func parseDepth(s string) int { + switch s { + case "0": + return 0 + case "1": + return 1 + case "infinity": + return infiniteDepth + } + return invalidDepth +} + +// http://www.webdav.org/specs/rfc4918.html#status.code.extensions.to.http11 +const ( + StatusMulti = 207 + StatusUnprocessableEntity = 422 + StatusLocked = 423 + StatusFailedDependency = 424 + StatusInsufficientStorage = 507 +) + +func StatusText(code int) string { + switch code { + case StatusMulti: + return "Multi-Status" + case StatusUnprocessableEntity: + return "Unprocessable Entity" + case StatusLocked: + return "Locked" + case StatusFailedDependency: + return "Failed Dependency" + case StatusInsufficientStorage: + return "Insufficient Storage" + } + return http.StatusText(code) +} + +var ( + errDestinationEqualsSource = errors.New("webdav: destination equals source") + errDirectoryNotEmpty = errors.New("webdav: directory not empty") + errInvalidDepth = errors.New("webdav: invalid depth") + errInvalidDestination = errors.New("webdav: invalid destination") + errInvalidIfHeader = errors.New("webdav: invalid If header") + errInvalidLockInfo = errors.New("webdav: invalid lock info") + errInvalidLockToken = errors.New("webdav: invalid lock token") + errInvalidPropfind = errors.New("webdav: invalid propfind") + errInvalidProppatch = errors.New("webdav: invalid proppatch") + errInvalidResponse = errors.New("webdav: invalid response") + errInvalidTimeout = errors.New("webdav: invalid timeout") + errNoFileSystem = errors.New("webdav: no file system") + errNoLockSystem = errors.New("webdav: no lock system") + errNotADirectory = errors.New("webdav: not a directory") + errPrefixMismatch = errors.New("webdav: prefix mismatch") + errRecursionTooDeep = errors.New("webdav: recursion too deep") + errUnsupportedLockInfo = errors.New("webdav: unsupported lock info") + errUnsupportedMethod = errors.New("webdav: unsupported method") +) diff --git a/vendor/golang.org/x/net/webdav/webdav_test.go b/vendor/golang.org/x/net/webdav/webdav_test.go new file mode 100644 index 0000000..25e0d54 --- /dev/null +++ b/vendor/golang.org/x/net/webdav/webdav_test.go @@ -0,0 +1,344 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "net/url" + "os" + "reflect" + "regexp" + "sort" + "strings" + "testing" + + "golang.org/x/net/context" +) + +// TODO: add tests to check XML responses with the expected prefix path +func TestPrefix(t *testing.T) { + const dst, blah = "Destination", "blah blah blah" + + // createLockBody comes from the example in Section 9.10.7. + const createLockBody = ` + + + + + http://example.org/~ejw/contact.html + + + ` + + do := func(method, urlStr string, body string, wantStatusCode int, headers ...string) (http.Header, error) { + var bodyReader io.Reader + if body != "" { + bodyReader = strings.NewReader(body) + } + req, err := http.NewRequest(method, urlStr, bodyReader) + if err != nil { + return nil, err + } + for len(headers) >= 2 { + req.Header.Add(headers[0], headers[1]) + headers = headers[2:] + } + res, err := http.DefaultTransport.RoundTrip(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != wantStatusCode { + return nil, fmt.Errorf("got status code %d, want %d", res.StatusCode, wantStatusCode) + } + return res.Header, nil + } + + prefixes := []string{ + "/", + "/a/", + "/a/b/", + "/a/b/c/", + } + ctx := context.Background() + for _, prefix := range prefixes { + fs := NewMemFS() + h := &Handler{ + FileSystem: fs, + LockSystem: NewMemLS(), + } + mux := http.NewServeMux() + if prefix != "/" { + h.Prefix = prefix + } + mux.Handle(prefix, h) + srv := httptest.NewServer(mux) + defer srv.Close() + + // The script is: + // MKCOL /a + // MKCOL /a/b + // PUT /a/b/c + // COPY /a/b/c /a/b/d + // MKCOL /a/b/e + // MOVE /a/b/d /a/b/e/f + // LOCK /a/b/e/g + // PUT /a/b/e/g + // which should yield the (possibly stripped) filenames /a/b/c, + // /a/b/e/f and /a/b/e/g, plus their parent directories. + + wantA := map[string]int{ + "/": http.StatusCreated, + "/a/": http.StatusMovedPermanently, + "/a/b/": http.StatusNotFound, + "/a/b/c/": http.StatusNotFound, + }[prefix] + if _, err := do("MKCOL", srv.URL+"/a", "", wantA); err != nil { + t.Errorf("prefix=%-9q MKCOL /a: %v", prefix, err) + continue + } + + wantB := map[string]int{ + "/": http.StatusCreated, + "/a/": http.StatusCreated, + "/a/b/": http.StatusMovedPermanently, + "/a/b/c/": http.StatusNotFound, + }[prefix] + if _, err := do("MKCOL", srv.URL+"/a/b", "", wantB); err != nil { + t.Errorf("prefix=%-9q MKCOL /a/b: %v", prefix, err) + continue + } + + wantC := map[string]int{ + "/": http.StatusCreated, + "/a/": http.StatusCreated, + "/a/b/": http.StatusCreated, + "/a/b/c/": http.StatusMovedPermanently, + }[prefix] + if _, err := do("PUT", srv.URL+"/a/b/c", blah, wantC); err != nil { + t.Errorf("prefix=%-9q PUT /a/b/c: %v", prefix, err) + continue + } + + wantD := map[string]int{ + "/": http.StatusCreated, + "/a/": http.StatusCreated, + "/a/b/": http.StatusCreated, + "/a/b/c/": http.StatusMovedPermanently, + }[prefix] + if _, err := do("COPY", srv.URL+"/a/b/c", "", wantD, dst, srv.URL+"/a/b/d"); err != nil { + t.Errorf("prefix=%-9q COPY /a/b/c /a/b/d: %v", prefix, err) + continue + } + + wantE := map[string]int{ + "/": http.StatusCreated, + "/a/": http.StatusCreated, + "/a/b/": http.StatusCreated, + "/a/b/c/": http.StatusNotFound, + }[prefix] + if _, err := do("MKCOL", srv.URL+"/a/b/e", "", wantE); err != nil { + t.Errorf("prefix=%-9q MKCOL /a/b/e: %v", prefix, err) + continue + } + + wantF := map[string]int{ + "/": http.StatusCreated, + "/a/": http.StatusCreated, + "/a/b/": http.StatusCreated, + "/a/b/c/": http.StatusNotFound, + }[prefix] + if _, err := do("MOVE", srv.URL+"/a/b/d", "", wantF, dst, srv.URL+"/a/b/e/f"); err != nil { + t.Errorf("prefix=%-9q MOVE /a/b/d /a/b/e/f: %v", prefix, err) + continue + } + + var lockToken string + wantG := map[string]int{ + "/": http.StatusCreated, + "/a/": http.StatusCreated, + "/a/b/": http.StatusCreated, + "/a/b/c/": http.StatusNotFound, + }[prefix] + if h, err := do("LOCK", srv.URL+"/a/b/e/g", createLockBody, wantG); err != nil { + t.Errorf("prefix=%-9q LOCK /a/b/e/g: %v", prefix, err) + continue + } else { + lockToken = h.Get("Lock-Token") + } + + ifHeader := fmt.Sprintf("<%s/a/b/e/g> (%s)", srv.URL, lockToken) + wantH := map[string]int{ + "/": http.StatusCreated, + "/a/": http.StatusCreated, + "/a/b/": http.StatusCreated, + "/a/b/c/": http.StatusNotFound, + }[prefix] + if _, err := do("PUT", srv.URL+"/a/b/e/g", blah, wantH, "If", ifHeader); err != nil { + t.Errorf("prefix=%-9q PUT /a/b/e/g: %v", prefix, err) + continue + } + + got, err := find(ctx, nil, fs, "/") + if err != nil { + t.Errorf("prefix=%-9q find: %v", prefix, err) + continue + } + sort.Strings(got) + want := map[string][]string{ + "/": {"/", "/a", "/a/b", "/a/b/c", "/a/b/e", "/a/b/e/f", "/a/b/e/g"}, + "/a/": {"/", "/b", "/b/c", "/b/e", "/b/e/f", "/b/e/g"}, + "/a/b/": {"/", "/c", "/e", "/e/f", "/e/g"}, + "/a/b/c/": {"/"}, + }[prefix] + if !reflect.DeepEqual(got, want) { + t.Errorf("prefix=%-9q find:\ngot %v\nwant %v", prefix, got, want) + continue + } + } +} + +func TestEscapeXML(t *testing.T) { + // These test cases aren't exhaustive, and there is more than one way to + // escape e.g. a quot (as """ or """) or an apos. We presume that + // the encoding/xml package tests xml.EscapeText more thoroughly. This test + // here is just a sanity check for this package's escapeXML function, and + // its attempt to provide a fast path (and avoid a bytes.Buffer allocation) + // when escaping filenames is obviously a no-op. + testCases := map[string]string{ + "": "", + " ": " ", + "&": "&", + "*": "*", + "+": "+", + ",": ",", + "-": "-", + ".": ".", + "/": "/", + "0": "0", + "9": "9", + ":": ":", + "<": "<", + ">": ">", + "A": "A", + "_": "_", + "a": "a", + "~": "~", + "\u0201": "\u0201", + "&": "&amp;", + "foo&baz": "foo&<b/ar>baz", + } + + for in, want := range testCases { + if got := escapeXML(in); got != want { + t.Errorf("in=%q: got %q, want %q", in, got, want) + } + } +} + +func TestFilenameEscape(t *testing.T) { + hrefRe := regexp.MustCompile(`([^<]*)`) + displayNameRe := regexp.MustCompile(`([^<]*)`) + do := func(method, urlStr string) (string, string, error) { + req, err := http.NewRequest(method, urlStr, nil) + if err != nil { + return "", "", err + } + res, err := http.DefaultClient.Do(req) + if err != nil { + return "", "", err + } + defer res.Body.Close() + + b, err := ioutil.ReadAll(res.Body) + if err != nil { + return "", "", err + } + hrefMatch := hrefRe.FindStringSubmatch(string(b)) + if len(hrefMatch) != 2 { + return "", "", errors.New("D:href not found") + } + displayNameMatch := displayNameRe.FindStringSubmatch(string(b)) + if len(displayNameMatch) != 2 { + return "", "", errors.New("D:displayname not found") + } + + return hrefMatch[1], displayNameMatch[1], nil + } + + testCases := []struct { + name, wantHref, wantDisplayName string + }{{ + name: `/foo%bar`, + wantHref: `/foo%25bar`, + wantDisplayName: `foo%bar`, + }, { + name: `/こんにちわ世界`, + wantHref: `/%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%82%8F%E4%B8%96%E7%95%8C`, + wantDisplayName: `こんにちわ世界`, + }, { + name: `/Program Files/`, + wantHref: `/Program%20Files`, + wantDisplayName: `Program Files`, + }, { + name: `/go+lang`, + wantHref: `/go+lang`, + wantDisplayName: `go+lang`, + }, { + name: `/go&lang`, + wantHref: `/go&lang`, + wantDisplayName: `go&lang`, + }, { + name: `/goexclusive"` + Shared *struct{} `xml:"lockscope>shared"` + Write *struct{} `xml:"locktype>write"` + Owner owner `xml:"owner"` +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_owner +type owner struct { + InnerXML string `xml:",innerxml"` +} + +func readLockInfo(r io.Reader) (li lockInfo, status int, err error) { + c := &countingReader{r: r} + if err = ixml.NewDecoder(c).Decode(&li); err != nil { + if err == io.EOF { + if c.n == 0 { + // An empty body means to refresh the lock. + // http://www.webdav.org/specs/rfc4918.html#refreshing-locks + return lockInfo{}, 0, nil + } + err = errInvalidLockInfo + } + return lockInfo{}, http.StatusBadRequest, err + } + // We only support exclusive (non-shared) write locks. In practice, these are + // the only types of locks that seem to matter. + if li.Exclusive == nil || li.Shared != nil || li.Write == nil { + return lockInfo{}, http.StatusNotImplemented, errUnsupportedLockInfo + } + return li, 0, nil +} + +type countingReader struct { + n int + r io.Reader +} + +func (c *countingReader) Read(p []byte) (int, error) { + n, err := c.r.Read(p) + c.n += n + return n, err +} + +func writeLockInfo(w io.Writer, token string, ld LockDetails) (int, error) { + depth := "infinity" + if ld.ZeroDepth { + depth = "0" + } + timeout := ld.Duration / time.Second + return fmt.Fprintf(w, "\n"+ + "\n"+ + " \n"+ + " \n"+ + " %s\n"+ + " %s\n"+ + " Second-%d\n"+ + " %s\n"+ + " %s\n"+ + "", + depth, ld.OwnerXML, timeout, escape(token), escape(ld.Root), + ) +} + +func escape(s string) string { + for i := 0; i < len(s); i++ { + switch s[i] { + case '"', '&', '\'', '<', '>': + b := bytes.NewBuffer(nil) + ixml.EscapeText(b, []byte(s)) + return b.String() + } + } + return s +} + +// Next returns the next token, if any, in the XML stream of d. +// RFC 4918 requires to ignore comments, processing instructions +// and directives. +// http://www.webdav.org/specs/rfc4918.html#property_values +// http://www.webdav.org/specs/rfc4918.html#xml-extensibility +func next(d *ixml.Decoder) (ixml.Token, error) { + for { + t, err := d.Token() + if err != nil { + return t, err + } + switch t.(type) { + case ixml.Comment, ixml.Directive, ixml.ProcInst: + continue + default: + return t, nil + } + } +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_prop (for propfind) +type propfindProps []xml.Name + +// UnmarshalXML appends the property names enclosed within start to pn. +// +// It returns an error if start does not contain any properties or if +// properties contain values. Character data between properties is ignored. +func (pn *propfindProps) UnmarshalXML(d *ixml.Decoder, start ixml.StartElement) error { + for { + t, err := next(d) + if err != nil { + return err + } + switch t.(type) { + case ixml.EndElement: + if len(*pn) == 0 { + return fmt.Errorf("%s must not be empty", start.Name.Local) + } + return nil + case ixml.StartElement: + name := t.(ixml.StartElement).Name + t, err = next(d) + if err != nil { + return err + } + if _, ok := t.(ixml.EndElement); !ok { + return fmt.Errorf("unexpected token %T", t) + } + *pn = append(*pn, xml.Name(name)) + } + } +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_propfind +type propfind struct { + XMLName ixml.Name `xml:"DAV: propfind"` + Allprop *struct{} `xml:"DAV: allprop"` + Propname *struct{} `xml:"DAV: propname"` + Prop propfindProps `xml:"DAV: prop"` + Include propfindProps `xml:"DAV: include"` +} + +func readPropfind(r io.Reader) (pf propfind, status int, err error) { + c := countingReader{r: r} + if err = ixml.NewDecoder(&c).Decode(&pf); err != nil { + if err == io.EOF { + if c.n == 0 { + // An empty body means to propfind allprop. + // http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND + return propfind{Allprop: new(struct{})}, 0, nil + } + err = errInvalidPropfind + } + return propfind{}, http.StatusBadRequest, err + } + + if pf.Allprop == nil && pf.Include != nil { + return propfind{}, http.StatusBadRequest, errInvalidPropfind + } + if pf.Allprop != nil && (pf.Prop != nil || pf.Propname != nil) { + return propfind{}, http.StatusBadRequest, errInvalidPropfind + } + if pf.Prop != nil && pf.Propname != nil { + return propfind{}, http.StatusBadRequest, errInvalidPropfind + } + if pf.Propname == nil && pf.Allprop == nil && pf.Prop == nil { + return propfind{}, http.StatusBadRequest, errInvalidPropfind + } + return pf, 0, nil +} + +// Property represents a single DAV resource property as defined in RFC 4918. +// See http://www.webdav.org/specs/rfc4918.html#data.model.for.resource.properties +type Property struct { + // XMLName is the fully qualified name that identifies this property. + XMLName xml.Name + + // Lang is an optional xml:lang attribute. + Lang string `xml:"xml:lang,attr,omitempty"` + + // InnerXML contains the XML representation of the property value. + // See http://www.webdav.org/specs/rfc4918.html#property_values + // + // Property values of complex type or mixed-content must have fully + // expanded XML namespaces or be self-contained with according + // XML namespace declarations. They must not rely on any XML + // namespace declarations within the scope of the XML document, + // even including the DAV: namespace. + InnerXML []byte `xml:",innerxml"` +} + +// ixmlProperty is the same as the Property type except it holds an ixml.Name +// instead of an xml.Name. +type ixmlProperty struct { + XMLName ixml.Name + Lang string `xml:"xml:lang,attr,omitempty"` + InnerXML []byte `xml:",innerxml"` +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_error +// See multistatusWriter for the "D:" namespace prefix. +type xmlError struct { + XMLName ixml.Name `xml:"D:error"` + InnerXML []byte `xml:",innerxml"` +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_propstat +// See multistatusWriter for the "D:" namespace prefix. +type propstat struct { + Prop []Property `xml:"D:prop>_ignored_"` + Status string `xml:"D:status"` + Error *xmlError `xml:"D:error"` + ResponseDescription string `xml:"D:responsedescription,omitempty"` +} + +// ixmlPropstat is the same as the propstat type except it holds an ixml.Name +// instead of an xml.Name. +type ixmlPropstat struct { + Prop []ixmlProperty `xml:"D:prop>_ignored_"` + Status string `xml:"D:status"` + Error *xmlError `xml:"D:error"` + ResponseDescription string `xml:"D:responsedescription,omitempty"` +} + +// MarshalXML prepends the "D:" namespace prefix on properties in the DAV: namespace +// before encoding. See multistatusWriter. +func (ps propstat) MarshalXML(e *ixml.Encoder, start ixml.StartElement) error { + // Convert from a propstat to an ixmlPropstat. + ixmlPs := ixmlPropstat{ + Prop: make([]ixmlProperty, len(ps.Prop)), + Status: ps.Status, + Error: ps.Error, + ResponseDescription: ps.ResponseDescription, + } + for k, prop := range ps.Prop { + ixmlPs.Prop[k] = ixmlProperty{ + XMLName: ixml.Name(prop.XMLName), + Lang: prop.Lang, + InnerXML: prop.InnerXML, + } + } + + for k, prop := range ixmlPs.Prop { + if prop.XMLName.Space == "DAV:" { + prop.XMLName = ixml.Name{Space: "", Local: "D:" + prop.XMLName.Local} + ixmlPs.Prop[k] = prop + } + } + // Distinct type to avoid infinite recursion of MarshalXML. + type newpropstat ixmlPropstat + return e.EncodeElement(newpropstat(ixmlPs), start) +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_response +// See multistatusWriter for the "D:" namespace prefix. +type response struct { + XMLName ixml.Name `xml:"D:response"` + Href []string `xml:"D:href"` + Propstat []propstat `xml:"D:propstat"` + Status string `xml:"D:status,omitempty"` + Error *xmlError `xml:"D:error"` + ResponseDescription string `xml:"D:responsedescription,omitempty"` +} + +// MultistatusWriter marshals one or more Responses into a XML +// multistatus response. +// See http://www.webdav.org/specs/rfc4918.html#ELEMENT_multistatus +// TODO(rsto, mpl): As a workaround, the "D:" namespace prefix, defined as +// "DAV:" on this element, is prepended on the nested response, as well as on all +// its nested elements. All property names in the DAV: namespace are prefixed as +// well. This is because some versions of Mini-Redirector (on windows 7) ignore +// elements with a default namespace (no prefixed namespace). A less intrusive fix +// should be possible after golang.org/cl/11074. See https://golang.org/issue/11177 +type multistatusWriter struct { + // ResponseDescription contains the optional responsedescription + // of the multistatus XML element. Only the latest content before + // close will be emitted. Empty response descriptions are not + // written. + responseDescription string + + w http.ResponseWriter + enc *ixml.Encoder +} + +// Write validates and emits a DAV response as part of a multistatus response +// element. +// +// It sets the HTTP status code of its underlying http.ResponseWriter to 207 +// (Multi-Status) and populates the Content-Type header. If r is the +// first, valid response to be written, Write prepends the XML representation +// of r with a multistatus tag. Callers must call close after the last response +// has been written. +func (w *multistatusWriter) write(r *response) error { + switch len(r.Href) { + case 0: + return errInvalidResponse + case 1: + if len(r.Propstat) > 0 != (r.Status == "") { + return errInvalidResponse + } + default: + if len(r.Propstat) > 0 || r.Status == "" { + return errInvalidResponse + } + } + err := w.writeHeader() + if err != nil { + return err + } + return w.enc.Encode(r) +} + +// writeHeader writes a XML multistatus start element on w's underlying +// http.ResponseWriter and returns the result of the write operation. +// After the first write attempt, writeHeader becomes a no-op. +func (w *multistatusWriter) writeHeader() error { + if w.enc != nil { + return nil + } + w.w.Header().Add("Content-Type", "text/xml; charset=utf-8") + w.w.WriteHeader(StatusMulti) + _, err := fmt.Fprintf(w.w, ``) + if err != nil { + return err + } + w.enc = ixml.NewEncoder(w.w) + return w.enc.EncodeToken(ixml.StartElement{ + Name: ixml.Name{ + Space: "DAV:", + Local: "multistatus", + }, + Attr: []ixml.Attr{{ + Name: ixml.Name{Space: "xmlns", Local: "D"}, + Value: "DAV:", + }}, + }) +} + +// Close completes the marshalling of the multistatus response. It returns +// an error if the multistatus response could not be completed. If both the +// return value and field enc of w are nil, then no multistatus response has +// been written. +func (w *multistatusWriter) close() error { + if w.enc == nil { + return nil + } + var end []ixml.Token + if w.responseDescription != "" { + name := ixml.Name{Space: "DAV:", Local: "responsedescription"} + end = append(end, + ixml.StartElement{Name: name}, + ixml.CharData(w.responseDescription), + ixml.EndElement{Name: name}, + ) + } + end = append(end, ixml.EndElement{ + Name: ixml.Name{Space: "DAV:", Local: "multistatus"}, + }) + for _, t := range end { + err := w.enc.EncodeToken(t) + if err != nil { + return err + } + } + return w.enc.Flush() +} + +var xmlLangName = ixml.Name{Space: "http://www.w3.org/XML/1998/namespace", Local: "lang"} + +func xmlLang(s ixml.StartElement, d string) string { + for _, attr := range s.Attr { + if attr.Name == xmlLangName { + return attr.Value + } + } + return d +} + +type xmlValue []byte + +func (v *xmlValue) UnmarshalXML(d *ixml.Decoder, start ixml.StartElement) error { + // The XML value of a property can be arbitrary, mixed-content XML. + // To make sure that the unmarshalled value contains all required + // namespaces, we encode all the property value XML tokens into a + // buffer. This forces the encoder to redeclare any used namespaces. + var b bytes.Buffer + e := ixml.NewEncoder(&b) + for { + t, err := next(d) + if err != nil { + return err + } + if e, ok := t.(ixml.EndElement); ok && e.Name == start.Name { + break + } + if err = e.EncodeToken(t); err != nil { + return err + } + } + err := e.Flush() + if err != nil { + return err + } + *v = b.Bytes() + return nil +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_prop (for proppatch) +type proppatchProps []Property + +// UnmarshalXML appends the property names and values enclosed within start +// to ps. +// +// An xml:lang attribute that is defined either on the DAV:prop or property +// name XML element is propagated to the property's Lang field. +// +// UnmarshalXML returns an error if start does not contain any properties or if +// property values contain syntactically incorrect XML. +func (ps *proppatchProps) UnmarshalXML(d *ixml.Decoder, start ixml.StartElement) error { + lang := xmlLang(start, "") + for { + t, err := next(d) + if err != nil { + return err + } + switch elem := t.(type) { + case ixml.EndElement: + if len(*ps) == 0 { + return fmt.Errorf("%s must not be empty", start.Name.Local) + } + return nil + case ixml.StartElement: + p := Property{ + XMLName: xml.Name(t.(ixml.StartElement).Name), + Lang: xmlLang(t.(ixml.StartElement), lang), + } + err = d.DecodeElement(((*xmlValue)(&p.InnerXML)), &elem) + if err != nil { + return err + } + *ps = append(*ps, p) + } + } +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_set +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_remove +type setRemove struct { + XMLName ixml.Name + Lang string `xml:"xml:lang,attr,omitempty"` + Prop proppatchProps `xml:"DAV: prop"` +} + +// http://www.webdav.org/specs/rfc4918.html#ELEMENT_propertyupdate +type propertyupdate struct { + XMLName ixml.Name `xml:"DAV: propertyupdate"` + Lang string `xml:"xml:lang,attr,omitempty"` + SetRemove []setRemove `xml:",any"` +} + +func readProppatch(r io.Reader) (patches []Proppatch, status int, err error) { + var pu propertyupdate + if err = ixml.NewDecoder(r).Decode(&pu); err != nil { + return nil, http.StatusBadRequest, err + } + for _, op := range pu.SetRemove { + remove := false + switch op.XMLName { + case ixml.Name{Space: "DAV:", Local: "set"}: + // No-op. + case ixml.Name{Space: "DAV:", Local: "remove"}: + for _, p := range op.Prop { + if len(p.InnerXML) > 0 { + return nil, http.StatusBadRequest, errInvalidProppatch + } + } + remove = true + default: + return nil, http.StatusBadRequest, errInvalidProppatch + } + patches = append(patches, Proppatch{Remove: remove, Props: op.Prop}) + } + return patches, 0, nil +} diff --git a/vendor/golang.org/x/net/webdav/xml_test.go b/vendor/golang.org/x/net/webdav/xml_test.go new file mode 100644 index 0000000..a3d9e1e --- /dev/null +++ b/vendor/golang.org/x/net/webdav/xml_test.go @@ -0,0 +1,906 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package webdav + +import ( + "bytes" + "encoding/xml" + "fmt" + "io" + "net/http" + "net/http/httptest" + "reflect" + "sort" + "strings" + "testing" + + ixml "golang.org/x/net/webdav/internal/xml" +) + +func TestReadLockInfo(t *testing.T) { + // The "section x.y.z" test cases come from section x.y.z of the spec at + // http://www.webdav.org/specs/rfc4918.html + testCases := []struct { + desc string + input string + wantLI lockInfo + wantStatus int + }{{ + "bad: junk", + "xxx", + lockInfo{}, + http.StatusBadRequest, + }, { + "bad: invalid owner XML", + "" + + "\n" + + " \n" + + " \n" + + " \n" + + " no end tag \n" + + " \n" + + "", + lockInfo{}, + http.StatusBadRequest, + }, { + "bad: invalid UTF-8", + "" + + "\n" + + " \n" + + " \n" + + " \n" + + " \xff \n" + + " \n" + + "", + lockInfo{}, + http.StatusBadRequest, + }, { + "bad: unfinished XML #1", + "" + + "\n" + + " \n" + + " \n", + lockInfo{}, + http.StatusBadRequest, + }, { + "bad: unfinished XML #2", + "" + + "\n" + + " \n" + + " \n" + + " \n", + lockInfo{}, + http.StatusBadRequest, + }, { + "good: empty", + "", + lockInfo{}, + 0, + }, { + "good: plain-text owner", + "" + + "\n" + + " \n" + + " \n" + + " gopher\n" + + "", + lockInfo{ + XMLName: ixml.Name{Space: "DAV:", Local: "lockinfo"}, + Exclusive: new(struct{}), + Write: new(struct{}), + Owner: owner{ + InnerXML: "gopher", + }, + }, + 0, + }, { + "section 9.10.7", + "" + + "\n" + + " \n" + + " \n" + + " \n" + + " http://example.org/~ejw/contact.html\n" + + " \n" + + "", + lockInfo{ + XMLName: ixml.Name{Space: "DAV:", Local: "lockinfo"}, + Exclusive: new(struct{}), + Write: new(struct{}), + Owner: owner{ + InnerXML: "\n http://example.org/~ejw/contact.html\n ", + }, + }, + 0, + }} + + for _, tc := range testCases { + li, status, err := readLockInfo(strings.NewReader(tc.input)) + if tc.wantStatus != 0 { + if err == nil { + t.Errorf("%s: got nil error, want non-nil", tc.desc) + continue + } + } else if err != nil { + t.Errorf("%s: %v", tc.desc, err) + continue + } + if !reflect.DeepEqual(li, tc.wantLI) || status != tc.wantStatus { + t.Errorf("%s:\ngot lockInfo=%v, status=%v\nwant lockInfo=%v, status=%v", + tc.desc, li, status, tc.wantLI, tc.wantStatus) + continue + } + } +} + +func TestReadPropfind(t *testing.T) { + testCases := []struct { + desc string + input string + wantPF propfind + wantStatus int + }{{ + desc: "propfind: propname", + input: "" + + "\n" + + " \n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Propname: new(struct{}), + }, + }, { + desc: "propfind: empty body means allprop", + input: "", + wantPF: propfind{ + Allprop: new(struct{}), + }, + }, { + desc: "propfind: allprop", + input: "" + + "\n" + + " \n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Allprop: new(struct{}), + }, + }, { + desc: "propfind: allprop followed by include", + input: "" + + "\n" + + " \n" + + " \n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Allprop: new(struct{}), + Include: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}}, + }, + }, { + desc: "propfind: include followed by allprop", + input: "" + + "\n" + + " \n" + + " \n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Allprop: new(struct{}), + Include: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}}, + }, + }, { + desc: "propfind: propfind", + input: "" + + "\n" + + " \n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Prop: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}}, + }, + }, { + desc: "propfind: prop with ignored comments", + input: "" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Prop: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}}, + }, + }, { + desc: "propfind: propfind with ignored whitespace", + input: "" + + "\n" + + " \n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Prop: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}}, + }, + }, { + desc: "propfind: propfind with ignored mixed-content", + input: "" + + "\n" + + " foobar\n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Prop: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}}, + }, + }, { + desc: "propfind: propname with ignored element (section A.4)", + input: "" + + "\n" + + " \n" + + " *boss*\n" + + "", + wantPF: propfind{ + XMLName: ixml.Name{Space: "DAV:", Local: "propfind"}, + Propname: new(struct{}), + }, + }, { + desc: "propfind: bad: junk", + input: "xxx", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: propname and allprop (section A.3)", + input: "" + + "\n" + + " " + + " " + + "", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: propname and prop", + input: "" + + "\n" + + " \n" + + " \n" + + "", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: allprop and prop", + input: "" + + "\n" + + " \n" + + " \n" + + "", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: empty propfind with ignored element (section A.4)", + input: "" + + "\n" + + " \n" + + "", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: empty prop", + input: "" + + "\n" + + " \n" + + "", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: prop with just chardata", + input: "" + + "\n" + + " foo\n" + + "", + wantStatus: http.StatusBadRequest, + }, { + desc: "bad: interrupted prop", + input: "" + + "\n" + + " \n", + wantStatus: http.StatusBadRequest, + }, { + desc: "bad: malformed end element prop", + input: "" + + "\n" + + " \n", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: property with chardata value", + input: "" + + "\n" + + " bar\n" + + "", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: property with whitespace value", + input: "" + + "\n" + + " \n" + + "", + wantStatus: http.StatusBadRequest, + }, { + desc: "propfind: bad: include without allprop", + input: "" + + "\n" + + " \n" + + "", + wantStatus: http.StatusBadRequest, + }} + + for _, tc := range testCases { + pf, status, err := readPropfind(strings.NewReader(tc.input)) + if tc.wantStatus != 0 { + if err == nil { + t.Errorf("%s: got nil error, want non-nil", tc.desc) + continue + } + } else if err != nil { + t.Errorf("%s: %v", tc.desc, err) + continue + } + if !reflect.DeepEqual(pf, tc.wantPF) || status != tc.wantStatus { + t.Errorf("%s:\ngot propfind=%v, status=%v\nwant propfind=%v, status=%v", + tc.desc, pf, status, tc.wantPF, tc.wantStatus) + continue + } + } +} + +func TestMultistatusWriter(t *testing.T) { + ///The "section x.y.z" test cases come from section x.y.z of the spec at + // http://www.webdav.org/specs/rfc4918.html + testCases := []struct { + desc string + responses []response + respdesc string + writeHeader bool + wantXML string + wantCode int + wantErr error + }{{ + desc: "section 9.2.2 (failed dependency)", + responses: []response{{ + Href: []string{"http://example.com/foo"}, + Propstat: []propstat{{ + Prop: []Property{{ + XMLName: xml.Name{ + Space: "http://ns.example.com/", + Local: "Authors", + }, + }}, + Status: "HTTP/1.1 424 Failed Dependency", + }, { + Prop: []Property{{ + XMLName: xml.Name{ + Space: "http://ns.example.com/", + Local: "Copyright-Owner", + }, + }}, + Status: "HTTP/1.1 409 Conflict", + }}, + ResponseDescription: "Copyright Owner cannot be deleted or altered.", + }}, + wantXML: `` + + `` + + `` + + ` ` + + ` http://example.com/foo` + + ` ` + + ` ` + + ` ` + + ` ` + + ` HTTP/1.1 424 Failed Dependency` + + ` ` + + ` ` + + ` ` + + ` ` + + ` ` + + ` HTTP/1.1 409 Conflict` + + ` ` + + ` Copyright Owner cannot be deleted or altered.` + + `` + + ``, + wantCode: StatusMulti, + }, { + desc: "section 9.6.2 (lock-token-submitted)", + responses: []response{{ + Href: []string{"http://example.com/foo"}, + Status: "HTTP/1.1 423 Locked", + Error: &xmlError{ + InnerXML: []byte(``), + }, + }}, + wantXML: `` + + `` + + `` + + ` ` + + ` http://example.com/foo` + + ` HTTP/1.1 423 Locked` + + ` ` + + ` ` + + ``, + wantCode: StatusMulti, + }, { + desc: "section 9.1.3", + responses: []response{{ + Href: []string{"http://example.com/foo"}, + Propstat: []propstat{{ + Prop: []Property{{ + XMLName: xml.Name{Space: "http://ns.example.com/boxschema/", Local: "bigbox"}, + InnerXML: []byte(`` + + `` + + `Box type A` + + ``), + }, { + XMLName: xml.Name{Space: "http://ns.example.com/boxschema/", Local: "author"}, + InnerXML: []byte(`` + + `` + + `J.J. Johnson` + + ``), + }}, + Status: "HTTP/1.1 200 OK", + }, { + Prop: []Property{{ + XMLName: xml.Name{Space: "http://ns.example.com/boxschema/", Local: "DingALing"}, + }, { + XMLName: xml.Name{Space: "http://ns.example.com/boxschema/", Local: "Random"}, + }}, + Status: "HTTP/1.1 403 Forbidden", + ResponseDescription: "The user does not have access to the DingALing property.", + }}, + }}, + respdesc: "There has been an access violation error.", + wantXML: `` + + `` + + `` + + ` ` + + ` http://example.com/foo` + + ` ` + + ` ` + + ` Box type A` + + ` J.J. Johnson` + + ` ` + + ` HTTP/1.1 200 OK` + + ` ` + + ` ` + + ` ` + + ` ` + + ` ` + + ` ` + + ` HTTP/1.1 403 Forbidden` + + ` The user does not have access to the DingALing property.` + + ` ` + + ` ` + + ` There has been an access violation error.` + + ``, + wantCode: StatusMulti, + }, { + desc: "no response written", + // default of http.responseWriter + wantCode: http.StatusOK, + }, { + desc: "no response written (with description)", + respdesc: "too bad", + // default of http.responseWriter + wantCode: http.StatusOK, + }, { + desc: "empty multistatus with header", + writeHeader: true, + wantXML: ``, + wantCode: StatusMulti, + }, { + desc: "bad: no href", + responses: []response{{ + Propstat: []propstat{{ + Prop: []Property{{ + XMLName: xml.Name{ + Space: "http://example.com/", + Local: "foo", + }, + }}, + Status: "HTTP/1.1 200 OK", + }}, + }}, + wantErr: errInvalidResponse, + // default of http.responseWriter + wantCode: http.StatusOK, + }, { + desc: "bad: multiple hrefs and no status", + responses: []response{{ + Href: []string{"http://example.com/foo", "http://example.com/bar"}, + }}, + wantErr: errInvalidResponse, + // default of http.responseWriter + wantCode: http.StatusOK, + }, { + desc: "bad: one href and no propstat", + responses: []response{{ + Href: []string{"http://example.com/foo"}, + }}, + wantErr: errInvalidResponse, + // default of http.responseWriter + wantCode: http.StatusOK, + }, { + desc: "bad: status with one href and propstat", + responses: []response{{ + Href: []string{"http://example.com/foo"}, + Propstat: []propstat{{ + Prop: []Property{{ + XMLName: xml.Name{ + Space: "http://example.com/", + Local: "foo", + }, + }}, + Status: "HTTP/1.1 200 OK", + }}, + Status: "HTTP/1.1 200 OK", + }}, + wantErr: errInvalidResponse, + // default of http.responseWriter + wantCode: http.StatusOK, + }, { + desc: "bad: multiple hrefs and propstat", + responses: []response{{ + Href: []string{ + "http://example.com/foo", + "http://example.com/bar", + }, + Propstat: []propstat{{ + Prop: []Property{{ + XMLName: xml.Name{ + Space: "http://example.com/", + Local: "foo", + }, + }}, + Status: "HTTP/1.1 200 OK", + }}, + }}, + wantErr: errInvalidResponse, + // default of http.responseWriter + wantCode: http.StatusOK, + }} + + n := xmlNormalizer{omitWhitespace: true} +loop: + for _, tc := range testCases { + rec := httptest.NewRecorder() + w := multistatusWriter{w: rec, responseDescription: tc.respdesc} + if tc.writeHeader { + if err := w.writeHeader(); err != nil { + t.Errorf("%s: got writeHeader error %v, want nil", tc.desc, err) + continue + } + } + for _, r := range tc.responses { + if err := w.write(&r); err != nil { + if err != tc.wantErr { + t.Errorf("%s: got write error %v, want %v", + tc.desc, err, tc.wantErr) + } + continue loop + } + } + if err := w.close(); err != tc.wantErr { + t.Errorf("%s: got close error %v, want %v", + tc.desc, err, tc.wantErr) + continue + } + if rec.Code != tc.wantCode { + t.Errorf("%s: got HTTP status code %d, want %d\n", + tc.desc, rec.Code, tc.wantCode) + continue + } + gotXML := rec.Body.String() + eq, err := n.equalXML(strings.NewReader(gotXML), strings.NewReader(tc.wantXML)) + if err != nil { + t.Errorf("%s: equalXML: %v", tc.desc, err) + continue + } + if !eq { + t.Errorf("%s: XML body\ngot %s\nwant %s", tc.desc, gotXML, tc.wantXML) + } + } +} + +func TestReadProppatch(t *testing.T) { + ppStr := func(pps []Proppatch) string { + var outer []string + for _, pp := range pps { + var inner []string + for _, p := range pp.Props { + inner = append(inner, fmt.Sprintf("{XMLName: %q, Lang: %q, InnerXML: %q}", + p.XMLName, p.Lang, p.InnerXML)) + } + outer = append(outer, fmt.Sprintf("{Remove: %t, Props: [%s]}", + pp.Remove, strings.Join(inner, ", "))) + } + return "[" + strings.Join(outer, ", ") + "]" + } + + testCases := []struct { + desc string + input string + wantPP []Proppatch + wantStatus int + }{{ + desc: "proppatch: section 9.2 (with simple property value)", + input: `` + + `` + + `` + + ` ` + + ` somevalue` + + ` ` + + ` ` + + ` ` + + ` ` + + ``, + wantPP: []Proppatch{{ + Props: []Property{{ + xml.Name{Space: "http://ns.example.com/z/", Local: "Authors"}, + "", + []byte(`somevalue`), + }}, + }, { + Remove: true, + Props: []Property{{ + xml.Name{Space: "http://ns.example.com/z/", Local: "Copyright-Owner"}, + "", + nil, + }}, + }}, + }, { + desc: "proppatch: lang attribute on prop", + input: `` + + `` + + `` + + ` ` + + ` ` + + ` ` + + ` ` + + ` ` + + ``, + wantPP: []Proppatch{{ + Props: []Property{{ + xml.Name{Space: "http://example.com/ns", Local: "foo"}, + "en", + nil, + }}, + }}, + }, { + desc: "bad: remove with value", + input: `` + + `` + + `` + + ` ` + + ` ` + + ` ` + + ` Jim Whitehead` + + ` ` + + ` ` + + ` ` + + ``, + wantStatus: http.StatusBadRequest, + }, { + desc: "bad: empty propertyupdate", + input: `` + + `` + + ``, + wantStatus: http.StatusBadRequest, + }, { + desc: "bad: empty prop", + input: `` + + `` + + `` + + ` ` + + ` ` + + ` ` + + ``, + wantStatus: http.StatusBadRequest, + }} + + for _, tc := range testCases { + pp, status, err := readProppatch(strings.NewReader(tc.input)) + if tc.wantStatus != 0 { + if err == nil { + t.Errorf("%s: got nil error, want non-nil", tc.desc) + continue + } + } else if err != nil { + t.Errorf("%s: %v", tc.desc, err) + continue + } + if status != tc.wantStatus { + t.Errorf("%s: got status %d, want %d", tc.desc, status, tc.wantStatus) + continue + } + if !reflect.DeepEqual(pp, tc.wantPP) || status != tc.wantStatus { + t.Errorf("%s: proppatch\ngot %v\nwant %v", tc.desc, ppStr(pp), ppStr(tc.wantPP)) + } + } +} + +func TestUnmarshalXMLValue(t *testing.T) { + testCases := []struct { + desc string + input string + wantVal string + }{{ + desc: "simple char data", + input: "foo", + wantVal: "foo", + }, { + desc: "empty element", + input: "", + wantVal: "", + }, { + desc: "preserve namespace", + input: ``, + wantVal: ``, + }, { + desc: "preserve root element namespace", + input: ``, + wantVal: ``, + }, { + desc: "preserve whitespace", + input: " \t ", + wantVal: " \t ", + }, { + desc: "preserve mixed content", + input: ` a `, + wantVal: ` a `, + }, { + desc: "section 9.2", + input: `` + + `` + + ` Jim Whitehead` + + ` Roy Fielding` + + ``, + wantVal: `` + + ` Jim Whitehead` + + ` Roy Fielding`, + }, { + desc: "section 4.3.1 (mixed content)", + input: `` + + `` + + ` Jane Doe` + + ` ` + + ` mailto:jane.doe@example.com` + + ` http://www.example.com` + + ` ` + + ` Jane has been working way too long on the` + + ` long-awaited revision of ]]>.` + + ` ` + + ``, + wantVal: `` + + ` Jane Doe` + + ` ` + + ` mailto:jane.doe@example.com` + + ` http://www.example.com` + + ` ` + + ` Jane has been working way too long on the` + + ` long-awaited revision of <RFC2518>.` + + ` `, + }} + + var n xmlNormalizer + for _, tc := range testCases { + d := ixml.NewDecoder(strings.NewReader(tc.input)) + var v xmlValue + if err := d.Decode(&v); err != nil { + t.Errorf("%s: got error %v, want nil", tc.desc, err) + continue + } + eq, err := n.equalXML(bytes.NewReader(v), strings.NewReader(tc.wantVal)) + if err != nil { + t.Errorf("%s: equalXML: %v", tc.desc, err) + continue + } + if !eq { + t.Errorf("%s:\ngot %s\nwant %s", tc.desc, string(v), tc.wantVal) + } + } +} + +// xmlNormalizer normalizes XML. +type xmlNormalizer struct { + // omitWhitespace instructs to ignore whitespace between element tags. + omitWhitespace bool + // omitComments instructs to ignore XML comments. + omitComments bool +} + +// normalize writes the normalized XML content of r to w. It applies the +// following rules +// +// * Rename namespace prefixes according to an internal heuristic. +// * Remove unnecessary namespace declarations. +// * Sort attributes in XML start elements in lexical order of their +// fully qualified name. +// * Remove XML directives and processing instructions. +// * Remove CDATA between XML tags that only contains whitespace, if +// instructed to do so. +// * Remove comments, if instructed to do so. +// +func (n *xmlNormalizer) normalize(w io.Writer, r io.Reader) error { + d := ixml.NewDecoder(r) + e := ixml.NewEncoder(w) + for { + t, err := d.Token() + if err != nil { + if t == nil && err == io.EOF { + break + } + return err + } + switch val := t.(type) { + case ixml.Directive, ixml.ProcInst: + continue + case ixml.Comment: + if n.omitComments { + continue + } + case ixml.CharData: + if n.omitWhitespace && len(bytes.TrimSpace(val)) == 0 { + continue + } + case ixml.StartElement: + start, _ := ixml.CopyToken(val).(ixml.StartElement) + attr := start.Attr[:0] + for _, a := range start.Attr { + if a.Name.Space == "xmlns" || a.Name.Local == "xmlns" { + continue + } + attr = append(attr, a) + } + sort.Sort(byName(attr)) + start.Attr = attr + t = start + } + err = e.EncodeToken(t) + if err != nil { + return err + } + } + return e.Flush() +} + +// equalXML tests for equality of the normalized XML contents of a and b. +func (n *xmlNormalizer) equalXML(a, b io.Reader) (bool, error) { + var buf bytes.Buffer + if err := n.normalize(&buf, a); err != nil { + return false, err + } + normA := buf.String() + buf.Reset() + if err := n.normalize(&buf, b); err != nil { + return false, err + } + normB := buf.String() + return normA == normB, nil +} + +type byName []ixml.Attr + +func (a byName) Len() int { return len(a) } +func (a byName) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byName) Less(i, j int) bool { + if a[i].Name.Space != a[j].Name.Space { + return a[i].Name.Space < a[j].Name.Space + } + return a[i].Name.Local < a[j].Name.Local +} diff --git a/vendor/golang.org/x/net/websocket/client.go b/vendor/golang.org/x/net/websocket/client.go new file mode 100644 index 0000000..69a4ac7 --- /dev/null +++ b/vendor/golang.org/x/net/websocket/client.go @@ -0,0 +1,106 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "io" + "net" + "net/http" + "net/url" +) + +// DialError is an error that occurs while dialling a websocket server. +type DialError struct { + *Config + Err error +} + +func (e *DialError) Error() string { + return "websocket.Dial " + e.Config.Location.String() + ": " + e.Err.Error() +} + +// NewConfig creates a new WebSocket config for client connection. +func NewConfig(server, origin string) (config *Config, err error) { + config = new(Config) + config.Version = ProtocolVersionHybi13 + config.Location, err = url.ParseRequestURI(server) + if err != nil { + return + } + config.Origin, err = url.ParseRequestURI(origin) + if err != nil { + return + } + config.Header = http.Header(make(map[string][]string)) + return +} + +// NewClient creates a new WebSocket client connection over rwc. +func NewClient(config *Config, rwc io.ReadWriteCloser) (ws *Conn, err error) { + br := bufio.NewReader(rwc) + bw := bufio.NewWriter(rwc) + err = hybiClientHandshake(config, br, bw) + if err != nil { + return + } + buf := bufio.NewReadWriter(br, bw) + ws = newHybiClientConn(config, buf, rwc) + return +} + +// Dial opens a new client connection to a WebSocket. +func Dial(url_, protocol, origin string) (ws *Conn, err error) { + config, err := NewConfig(url_, origin) + if err != nil { + return nil, err + } + if protocol != "" { + config.Protocol = []string{protocol} + } + return DialConfig(config) +} + +var portMap = map[string]string{ + "ws": "80", + "wss": "443", +} + +func parseAuthority(location *url.URL) string { + if _, ok := portMap[location.Scheme]; ok { + if _, _, err := net.SplitHostPort(location.Host); err != nil { + return net.JoinHostPort(location.Host, portMap[location.Scheme]) + } + } + return location.Host +} + +// DialConfig opens a new client connection to a WebSocket with a config. +func DialConfig(config *Config) (ws *Conn, err error) { + var client net.Conn + if config.Location == nil { + return nil, &DialError{config, ErrBadWebSocketLocation} + } + if config.Origin == nil { + return nil, &DialError{config, ErrBadWebSocketOrigin} + } + dialer := config.Dialer + if dialer == nil { + dialer = &net.Dialer{} + } + client, err = dialWithDialer(dialer, config) + if err != nil { + goto Error + } + ws, err = NewClient(config, client) + if err != nil { + client.Close() + goto Error + } + return + +Error: + return nil, &DialError{config, err} +} diff --git a/vendor/golang.org/x/net/websocket/dial.go b/vendor/golang.org/x/net/websocket/dial.go new file mode 100644 index 0000000..2dab943 --- /dev/null +++ b/vendor/golang.org/x/net/websocket/dial.go @@ -0,0 +1,24 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "crypto/tls" + "net" +) + +func dialWithDialer(dialer *net.Dialer, config *Config) (conn net.Conn, err error) { + switch config.Location.Scheme { + case "ws": + conn, err = dialer.Dial("tcp", parseAuthority(config.Location)) + + case "wss": + conn, err = tls.DialWithDialer(dialer, "tcp", parseAuthority(config.Location), config.TlsConfig) + + default: + err = ErrBadScheme + } + return +} diff --git a/vendor/golang.org/x/net/websocket/dial_test.go b/vendor/golang.org/x/net/websocket/dial_test.go new file mode 100644 index 0000000..aa03e30 --- /dev/null +++ b/vendor/golang.org/x/net/websocket/dial_test.go @@ -0,0 +1,43 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "crypto/tls" + "fmt" + "log" + "net" + "net/http/httptest" + "testing" + "time" +) + +// This test depend on Go 1.3+ because in earlier versions the Dialer won't be +// used in TLS connections and a timeout won't be triggered. +func TestDialConfigTLSWithDialer(t *testing.T) { + tlsServer := httptest.NewTLSServer(nil) + tlsServerAddr := tlsServer.Listener.Addr().String() + log.Print("Test TLS WebSocket server listening on ", tlsServerAddr) + defer tlsServer.Close() + config, _ := NewConfig(fmt.Sprintf("wss://%s/echo", tlsServerAddr), "http://localhost") + config.Dialer = &net.Dialer{ + Deadline: time.Now().Add(-time.Minute), + } + config.TlsConfig = &tls.Config{ + InsecureSkipVerify: true, + } + _, err := DialConfig(config) + dialerr, ok := err.(*DialError) + if !ok { + t.Fatalf("DialError expected, got %#v", err) + } + neterr, ok := dialerr.Err.(*net.OpError) + if !ok { + t.Fatalf("net.OpError error expected, got %#v", dialerr.Err) + } + if !neterr.Timeout() { + t.Fatalf("expected timeout error, got %#v", neterr) + } +} diff --git a/vendor/golang.org/x/net/websocket/exampledial_test.go b/vendor/golang.org/x/net/websocket/exampledial_test.go new file mode 100644 index 0000000..72bb9d4 --- /dev/null +++ b/vendor/golang.org/x/net/websocket/exampledial_test.go @@ -0,0 +1,31 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket_test + +import ( + "fmt" + "log" + + "golang.org/x/net/websocket" +) + +// This example demonstrates a trivial client. +func ExampleDial() { + origin := "http://localhost/" + url := "ws://localhost:12345/ws" + ws, err := websocket.Dial(url, "", origin) + if err != nil { + log.Fatal(err) + } + if _, err := ws.Write([]byte("hello, world!\n")); err != nil { + log.Fatal(err) + } + var msg = make([]byte, 512) + var n int + if n, err = ws.Read(msg); err != nil { + log.Fatal(err) + } + fmt.Printf("Received: %s.\n", msg[:n]) +} diff --git a/vendor/golang.org/x/net/websocket/examplehandler_test.go b/vendor/golang.org/x/net/websocket/examplehandler_test.go new file mode 100644 index 0000000..f22a98f --- /dev/null +++ b/vendor/golang.org/x/net/websocket/examplehandler_test.go @@ -0,0 +1,26 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket_test + +import ( + "io" + "net/http" + + "golang.org/x/net/websocket" +) + +// Echo the data received on the WebSocket. +func EchoServer(ws *websocket.Conn) { + io.Copy(ws, ws) +} + +// This example demonstrates a trivial echo server. +func ExampleHandler() { + http.Handle("/echo", websocket.Handler(EchoServer)) + err := http.ListenAndServe(":12345", nil) + if err != nil { + panic("ListenAndServe: " + err.Error()) + } +} diff --git a/vendor/golang.org/x/net/websocket/hybi.go b/vendor/golang.org/x/net/websocket/hybi.go new file mode 100644 index 0000000..8cffdd1 --- /dev/null +++ b/vendor/golang.org/x/net/websocket/hybi.go @@ -0,0 +1,583 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +// This file implements a protocol of hybi draft. +// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17 + +import ( + "bufio" + "bytes" + "crypto/rand" + "crypto/sha1" + "encoding/base64" + "encoding/binary" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "strings" +) + +const ( + websocketGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" + + closeStatusNormal = 1000 + closeStatusGoingAway = 1001 + closeStatusProtocolError = 1002 + closeStatusUnsupportedData = 1003 + closeStatusFrameTooLarge = 1004 + closeStatusNoStatusRcvd = 1005 + closeStatusAbnormalClosure = 1006 + closeStatusBadMessageData = 1007 + closeStatusPolicyViolation = 1008 + closeStatusTooBigData = 1009 + closeStatusExtensionMismatch = 1010 + + maxControlFramePayloadLength = 125 +) + +var ( + ErrBadMaskingKey = &ProtocolError{"bad masking key"} + ErrBadPongMessage = &ProtocolError{"bad pong message"} + ErrBadClosingStatus = &ProtocolError{"bad closing status"} + ErrUnsupportedExtensions = &ProtocolError{"unsupported extensions"} + ErrNotImplemented = &ProtocolError{"not implemented"} + + handshakeHeader = map[string]bool{ + "Host": true, + "Upgrade": true, + "Connection": true, + "Sec-Websocket-Key": true, + "Sec-Websocket-Origin": true, + "Sec-Websocket-Version": true, + "Sec-Websocket-Protocol": true, + "Sec-Websocket-Accept": true, + } +) + +// A hybiFrameHeader is a frame header as defined in hybi draft. +type hybiFrameHeader struct { + Fin bool + Rsv [3]bool + OpCode byte + Length int64 + MaskingKey []byte + + data *bytes.Buffer +} + +// A hybiFrameReader is a reader for hybi frame. +type hybiFrameReader struct { + reader io.Reader + + header hybiFrameHeader + pos int64 + length int +} + +func (frame *hybiFrameReader) Read(msg []byte) (n int, err error) { + n, err = frame.reader.Read(msg) + if frame.header.MaskingKey != nil { + for i := 0; i < n; i++ { + msg[i] = msg[i] ^ frame.header.MaskingKey[frame.pos%4] + frame.pos++ + } + } + return n, err +} + +func (frame *hybiFrameReader) PayloadType() byte { return frame.header.OpCode } + +func (frame *hybiFrameReader) HeaderReader() io.Reader { + if frame.header.data == nil { + return nil + } + if frame.header.data.Len() == 0 { + return nil + } + return frame.header.data +} + +func (frame *hybiFrameReader) TrailerReader() io.Reader { return nil } + +func (frame *hybiFrameReader) Len() (n int) { return frame.length } + +// A hybiFrameReaderFactory creates new frame reader based on its frame type. +type hybiFrameReaderFactory struct { + *bufio.Reader +} + +// NewFrameReader reads a frame header from the connection, and creates new reader for the frame. +// See Section 5.2 Base Framing protocol for detail. +// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#section-5.2 +func (buf hybiFrameReaderFactory) NewFrameReader() (frame frameReader, err error) { + hybiFrame := new(hybiFrameReader) + frame = hybiFrame + var header []byte + var b byte + // First byte. FIN/RSV1/RSV2/RSV3/OpCode(4bits) + b, err = buf.ReadByte() + if err != nil { + return + } + header = append(header, b) + hybiFrame.header.Fin = ((header[0] >> 7) & 1) != 0 + for i := 0; i < 3; i++ { + j := uint(6 - i) + hybiFrame.header.Rsv[i] = ((header[0] >> j) & 1) != 0 + } + hybiFrame.header.OpCode = header[0] & 0x0f + + // Second byte. Mask/Payload len(7bits) + b, err = buf.ReadByte() + if err != nil { + return + } + header = append(header, b) + mask := (b & 0x80) != 0 + b &= 0x7f + lengthFields := 0 + switch { + case b <= 125: // Payload length 7bits. + hybiFrame.header.Length = int64(b) + case b == 126: // Payload length 7+16bits + lengthFields = 2 + case b == 127: // Payload length 7+64bits + lengthFields = 8 + } + for i := 0; i < lengthFields; i++ { + b, err = buf.ReadByte() + if err != nil { + return + } + if lengthFields == 8 && i == 0 { // MSB must be zero when 7+64 bits + b &= 0x7f + } + header = append(header, b) + hybiFrame.header.Length = hybiFrame.header.Length*256 + int64(b) + } + if mask { + // Masking key. 4 bytes. + for i := 0; i < 4; i++ { + b, err = buf.ReadByte() + if err != nil { + return + } + header = append(header, b) + hybiFrame.header.MaskingKey = append(hybiFrame.header.MaskingKey, b) + } + } + hybiFrame.reader = io.LimitReader(buf.Reader, hybiFrame.header.Length) + hybiFrame.header.data = bytes.NewBuffer(header) + hybiFrame.length = len(header) + int(hybiFrame.header.Length) + return +} + +// A HybiFrameWriter is a writer for hybi frame. +type hybiFrameWriter struct { + writer *bufio.Writer + + header *hybiFrameHeader +} + +func (frame *hybiFrameWriter) Write(msg []byte) (n int, err error) { + var header []byte + var b byte + if frame.header.Fin { + b |= 0x80 + } + for i := 0; i < 3; i++ { + if frame.header.Rsv[i] { + j := uint(6 - i) + b |= 1 << j + } + } + b |= frame.header.OpCode + header = append(header, b) + if frame.header.MaskingKey != nil { + b = 0x80 + } else { + b = 0 + } + lengthFields := 0 + length := len(msg) + switch { + case length <= 125: + b |= byte(length) + case length < 65536: + b |= 126 + lengthFields = 2 + default: + b |= 127 + lengthFields = 8 + } + header = append(header, b) + for i := 0; i < lengthFields; i++ { + j := uint((lengthFields - i - 1) * 8) + b = byte((length >> j) & 0xff) + header = append(header, b) + } + if frame.header.MaskingKey != nil { + if len(frame.header.MaskingKey) != 4 { + return 0, ErrBadMaskingKey + } + header = append(header, frame.header.MaskingKey...) + frame.writer.Write(header) + data := make([]byte, length) + for i := range data { + data[i] = msg[i] ^ frame.header.MaskingKey[i%4] + } + frame.writer.Write(data) + err = frame.writer.Flush() + return length, err + } + frame.writer.Write(header) + frame.writer.Write(msg) + err = frame.writer.Flush() + return length, err +} + +func (frame *hybiFrameWriter) Close() error { return nil } + +type hybiFrameWriterFactory struct { + *bufio.Writer + needMaskingKey bool +} + +func (buf hybiFrameWriterFactory) NewFrameWriter(payloadType byte) (frame frameWriter, err error) { + frameHeader := &hybiFrameHeader{Fin: true, OpCode: payloadType} + if buf.needMaskingKey { + frameHeader.MaskingKey, err = generateMaskingKey() + if err != nil { + return nil, err + } + } + return &hybiFrameWriter{writer: buf.Writer, header: frameHeader}, nil +} + +type hybiFrameHandler struct { + conn *Conn + payloadType byte +} + +func (handler *hybiFrameHandler) HandleFrame(frame frameReader) (frameReader, error) { + if handler.conn.IsServerConn() { + // The client MUST mask all frames sent to the server. + if frame.(*hybiFrameReader).header.MaskingKey == nil { + handler.WriteClose(closeStatusProtocolError) + return nil, io.EOF + } + } else { + // The server MUST NOT mask all frames. + if frame.(*hybiFrameReader).header.MaskingKey != nil { + handler.WriteClose(closeStatusProtocolError) + return nil, io.EOF + } + } + if header := frame.HeaderReader(); header != nil { + io.Copy(ioutil.Discard, header) + } + switch frame.PayloadType() { + case ContinuationFrame: + frame.(*hybiFrameReader).header.OpCode = handler.payloadType + case TextFrame, BinaryFrame: + handler.payloadType = frame.PayloadType() + case CloseFrame: + return nil, io.EOF + case PingFrame, PongFrame: + b := make([]byte, maxControlFramePayloadLength) + n, err := io.ReadFull(frame, b) + if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF { + return nil, err + } + io.Copy(ioutil.Discard, frame) + if frame.PayloadType() == PingFrame { + if _, err := handler.WritePong(b[:n]); err != nil { + return nil, err + } + } + return nil, nil + } + return frame, nil +} + +func (handler *hybiFrameHandler) WriteClose(status int) (err error) { + handler.conn.wio.Lock() + defer handler.conn.wio.Unlock() + w, err := handler.conn.frameWriterFactory.NewFrameWriter(CloseFrame) + if err != nil { + return err + } + msg := make([]byte, 2) + binary.BigEndian.PutUint16(msg, uint16(status)) + _, err = w.Write(msg) + w.Close() + return err +} + +func (handler *hybiFrameHandler) WritePong(msg []byte) (n int, err error) { + handler.conn.wio.Lock() + defer handler.conn.wio.Unlock() + w, err := handler.conn.frameWriterFactory.NewFrameWriter(PongFrame) + if err != nil { + return 0, err + } + n, err = w.Write(msg) + w.Close() + return n, err +} + +// newHybiConn creates a new WebSocket connection speaking hybi draft protocol. +func newHybiConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) *Conn { + if buf == nil { + br := bufio.NewReader(rwc) + bw := bufio.NewWriter(rwc) + buf = bufio.NewReadWriter(br, bw) + } + ws := &Conn{config: config, request: request, buf: buf, rwc: rwc, + frameReaderFactory: hybiFrameReaderFactory{buf.Reader}, + frameWriterFactory: hybiFrameWriterFactory{ + buf.Writer, request == nil}, + PayloadType: TextFrame, + defaultCloseStatus: closeStatusNormal} + ws.frameHandler = &hybiFrameHandler{conn: ws} + return ws +} + +// generateMaskingKey generates a masking key for a frame. +func generateMaskingKey() (maskingKey []byte, err error) { + maskingKey = make([]byte, 4) + if _, err = io.ReadFull(rand.Reader, maskingKey); err != nil { + return + } + return +} + +// generateNonce generates a nonce consisting of a randomly selected 16-byte +// value that has been base64-encoded. +func generateNonce() (nonce []byte) { + key := make([]byte, 16) + if _, err := io.ReadFull(rand.Reader, key); err != nil { + panic(err) + } + nonce = make([]byte, 24) + base64.StdEncoding.Encode(nonce, key) + return +} + +// removeZone removes IPv6 zone identifer from host. +// E.g., "[fe80::1%en0]:8080" to "[fe80::1]:8080" +func removeZone(host string) string { + if !strings.HasPrefix(host, "[") { + return host + } + i := strings.LastIndex(host, "]") + if i < 0 { + return host + } + j := strings.LastIndex(host[:i], "%") + if j < 0 { + return host + } + return host[:j] + host[i:] +} + +// getNonceAccept computes the base64-encoded SHA-1 of the concatenation of +// the nonce ("Sec-WebSocket-Key" value) with the websocket GUID string. +func getNonceAccept(nonce []byte) (expected []byte, err error) { + h := sha1.New() + if _, err = h.Write(nonce); err != nil { + return + } + if _, err = h.Write([]byte(websocketGUID)); err != nil { + return + } + expected = make([]byte, 28) + base64.StdEncoding.Encode(expected, h.Sum(nil)) + return +} + +// Client handshake described in draft-ietf-hybi-thewebsocket-protocol-17 +func hybiClientHandshake(config *Config, br *bufio.Reader, bw *bufio.Writer) (err error) { + bw.WriteString("GET " + config.Location.RequestURI() + " HTTP/1.1\r\n") + + // According to RFC 6874, an HTTP client, proxy, or other + // intermediary must remove any IPv6 zone identifier attached + // to an outgoing URI. + bw.WriteString("Host: " + removeZone(config.Location.Host) + "\r\n") + bw.WriteString("Upgrade: websocket\r\n") + bw.WriteString("Connection: Upgrade\r\n") + nonce := generateNonce() + if config.handshakeData != nil { + nonce = []byte(config.handshakeData["key"]) + } + bw.WriteString("Sec-WebSocket-Key: " + string(nonce) + "\r\n") + bw.WriteString("Origin: " + strings.ToLower(config.Origin.String()) + "\r\n") + + if config.Version != ProtocolVersionHybi13 { + return ErrBadProtocolVersion + } + + bw.WriteString("Sec-WebSocket-Version: " + fmt.Sprintf("%d", config.Version) + "\r\n") + if len(config.Protocol) > 0 { + bw.WriteString("Sec-WebSocket-Protocol: " + strings.Join(config.Protocol, ", ") + "\r\n") + } + // TODO(ukai): send Sec-WebSocket-Extensions. + err = config.Header.WriteSubset(bw, handshakeHeader) + if err != nil { + return err + } + + bw.WriteString("\r\n") + if err = bw.Flush(); err != nil { + return err + } + + resp, err := http.ReadResponse(br, &http.Request{Method: "GET"}) + if err != nil { + return err + } + if resp.StatusCode != 101 { + return ErrBadStatus + } + if strings.ToLower(resp.Header.Get("Upgrade")) != "websocket" || + strings.ToLower(resp.Header.Get("Connection")) != "upgrade" { + return ErrBadUpgrade + } + expectedAccept, err := getNonceAccept(nonce) + if err != nil { + return err + } + if resp.Header.Get("Sec-WebSocket-Accept") != string(expectedAccept) { + return ErrChallengeResponse + } + if resp.Header.Get("Sec-WebSocket-Extensions") != "" { + return ErrUnsupportedExtensions + } + offeredProtocol := resp.Header.Get("Sec-WebSocket-Protocol") + if offeredProtocol != "" { + protocolMatched := false + for i := 0; i < len(config.Protocol); i++ { + if config.Protocol[i] == offeredProtocol { + protocolMatched = true + break + } + } + if !protocolMatched { + return ErrBadWebSocketProtocol + } + config.Protocol = []string{offeredProtocol} + } + + return nil +} + +// newHybiClientConn creates a client WebSocket connection after handshake. +func newHybiClientConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser) *Conn { + return newHybiConn(config, buf, rwc, nil) +} + +// A HybiServerHandshaker performs a server handshake using hybi draft protocol. +type hybiServerHandshaker struct { + *Config + accept []byte +} + +func (c *hybiServerHandshaker) ReadHandshake(buf *bufio.Reader, req *http.Request) (code int, err error) { + c.Version = ProtocolVersionHybi13 + if req.Method != "GET" { + return http.StatusMethodNotAllowed, ErrBadRequestMethod + } + // HTTP version can be safely ignored. + + if strings.ToLower(req.Header.Get("Upgrade")) != "websocket" || + !strings.Contains(strings.ToLower(req.Header.Get("Connection")), "upgrade") { + return http.StatusBadRequest, ErrNotWebSocket + } + + key := req.Header.Get("Sec-Websocket-Key") + if key == "" { + return http.StatusBadRequest, ErrChallengeResponse + } + version := req.Header.Get("Sec-Websocket-Version") + switch version { + case "13": + c.Version = ProtocolVersionHybi13 + default: + return http.StatusBadRequest, ErrBadWebSocketVersion + } + var scheme string + if req.TLS != nil { + scheme = "wss" + } else { + scheme = "ws" + } + c.Location, err = url.ParseRequestURI(scheme + "://" + req.Host + req.URL.RequestURI()) + if err != nil { + return http.StatusBadRequest, err + } + protocol := strings.TrimSpace(req.Header.Get("Sec-Websocket-Protocol")) + if protocol != "" { + protocols := strings.Split(protocol, ",") + for i := 0; i < len(protocols); i++ { + c.Protocol = append(c.Protocol, strings.TrimSpace(protocols[i])) + } + } + c.accept, err = getNonceAccept([]byte(key)) + if err != nil { + return http.StatusInternalServerError, err + } + return http.StatusSwitchingProtocols, nil +} + +// Origin parses the Origin header in req. +// If the Origin header is not set, it returns nil and nil. +func Origin(config *Config, req *http.Request) (*url.URL, error) { + var origin string + switch config.Version { + case ProtocolVersionHybi13: + origin = req.Header.Get("Origin") + } + if origin == "" { + return nil, nil + } + return url.ParseRequestURI(origin) +} + +func (c *hybiServerHandshaker) AcceptHandshake(buf *bufio.Writer) (err error) { + if len(c.Protocol) > 0 { + if len(c.Protocol) != 1 { + // You need choose a Protocol in Handshake func in Server. + return ErrBadWebSocketProtocol + } + } + buf.WriteString("HTTP/1.1 101 Switching Protocols\r\n") + buf.WriteString("Upgrade: websocket\r\n") + buf.WriteString("Connection: Upgrade\r\n") + buf.WriteString("Sec-WebSocket-Accept: " + string(c.accept) + "\r\n") + if len(c.Protocol) > 0 { + buf.WriteString("Sec-WebSocket-Protocol: " + c.Protocol[0] + "\r\n") + } + // TODO(ukai): send Sec-WebSocket-Extensions. + if c.Header != nil { + err := c.Header.WriteSubset(buf, handshakeHeader) + if err != nil { + return err + } + } + buf.WriteString("\r\n") + return buf.Flush() +} + +func (c *hybiServerHandshaker) NewServerConn(buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) *Conn { + return newHybiServerConn(c.Config, buf, rwc, request) +} + +// newHybiServerConn returns a new WebSocket connection speaking hybi draft protocol. +func newHybiServerConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) *Conn { + return newHybiConn(config, buf, rwc, request) +} diff --git a/vendor/golang.org/x/net/websocket/hybi_test.go b/vendor/golang.org/x/net/websocket/hybi_test.go new file mode 100644 index 0000000..9504aa2 --- /dev/null +++ b/vendor/golang.org/x/net/websocket/hybi_test.go @@ -0,0 +1,608 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "bytes" + "fmt" + "io" + "net/http" + "net/url" + "strings" + "testing" +) + +// Test the getNonceAccept function with values in +// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17 +func TestSecWebSocketAccept(t *testing.T) { + nonce := []byte("dGhlIHNhbXBsZSBub25jZQ==") + expected := []byte("s3pPLMBiTxaQ9kYGzzhZRbK+xOo=") + accept, err := getNonceAccept(nonce) + if err != nil { + t.Errorf("getNonceAccept: returned error %v", err) + return + } + if !bytes.Equal(expected, accept) { + t.Errorf("getNonceAccept: expected %q got %q", expected, accept) + } +} + +func TestHybiClientHandshake(t *testing.T) { + type test struct { + url, host string + } + tests := []test{ + {"ws://server.example.com/chat", "server.example.com"}, + {"ws://127.0.0.1/chat", "127.0.0.1"}, + } + if _, err := url.ParseRequestURI("http://[fe80::1%25lo0]"); err == nil { + tests = append(tests, test{"ws://[fe80::1%25lo0]/chat", "[fe80::1]"}) + } + + for _, tt := range tests { + var b bytes.Buffer + bw := bufio.NewWriter(&b) + br := bufio.NewReader(strings.NewReader(`HTTP/1.1 101 Switching Protocols +Upgrade: websocket +Connection: Upgrade +Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= +Sec-WebSocket-Protocol: chat + +`)) + var err error + var config Config + config.Location, err = url.ParseRequestURI(tt.url) + if err != nil { + t.Fatal("location url", err) + } + config.Origin, err = url.ParseRequestURI("http://example.com") + if err != nil { + t.Fatal("origin url", err) + } + config.Protocol = append(config.Protocol, "chat") + config.Protocol = append(config.Protocol, "superchat") + config.Version = ProtocolVersionHybi13 + config.handshakeData = map[string]string{ + "key": "dGhlIHNhbXBsZSBub25jZQ==", + } + if err := hybiClientHandshake(&config, br, bw); err != nil { + t.Fatal("handshake", err) + } + req, err := http.ReadRequest(bufio.NewReader(&b)) + if err != nil { + t.Fatal("read request", err) + } + if req.Method != "GET" { + t.Errorf("request method expected GET, but got %s", req.Method) + } + if req.URL.Path != "/chat" { + t.Errorf("request path expected /chat, but got %s", req.URL.Path) + } + if req.Proto != "HTTP/1.1" { + t.Errorf("request proto expected HTTP/1.1, but got %s", req.Proto) + } + if req.Host != tt.host { + t.Errorf("request host expected %s, but got %s", tt.host, req.Host) + } + var expectedHeader = map[string]string{ + "Connection": "Upgrade", + "Upgrade": "websocket", + "Sec-Websocket-Key": config.handshakeData["key"], + "Origin": config.Origin.String(), + "Sec-Websocket-Protocol": "chat, superchat", + "Sec-Websocket-Version": fmt.Sprintf("%d", ProtocolVersionHybi13), + } + for k, v := range expectedHeader { + if req.Header.Get(k) != v { + t.Errorf("%s expected %s, but got %v", k, v, req.Header.Get(k)) + } + } + } +} + +func TestHybiClientHandshakeWithHeader(t *testing.T) { + b := bytes.NewBuffer([]byte{}) + bw := bufio.NewWriter(b) + br := bufio.NewReader(strings.NewReader(`HTTP/1.1 101 Switching Protocols +Upgrade: websocket +Connection: Upgrade +Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= +Sec-WebSocket-Protocol: chat + +`)) + var err error + config := new(Config) + config.Location, err = url.ParseRequestURI("ws://server.example.com/chat") + if err != nil { + t.Fatal("location url", err) + } + config.Origin, err = url.ParseRequestURI("http://example.com") + if err != nil { + t.Fatal("origin url", err) + } + config.Protocol = append(config.Protocol, "chat") + config.Protocol = append(config.Protocol, "superchat") + config.Version = ProtocolVersionHybi13 + config.Header = http.Header(make(map[string][]string)) + config.Header.Add("User-Agent", "test") + + config.handshakeData = map[string]string{ + "key": "dGhlIHNhbXBsZSBub25jZQ==", + } + err = hybiClientHandshake(config, br, bw) + if err != nil { + t.Errorf("handshake failed: %v", err) + } + req, err := http.ReadRequest(bufio.NewReader(b)) + if err != nil { + t.Fatalf("read request: %v", err) + } + if req.Method != "GET" { + t.Errorf("request method expected GET, but got %q", req.Method) + } + if req.URL.Path != "/chat" { + t.Errorf("request path expected /chat, but got %q", req.URL.Path) + } + if req.Proto != "HTTP/1.1" { + t.Errorf("request proto expected HTTP/1.1, but got %q", req.Proto) + } + if req.Host != "server.example.com" { + t.Errorf("request Host expected server.example.com, but got %v", req.Host) + } + var expectedHeader = map[string]string{ + "Connection": "Upgrade", + "Upgrade": "websocket", + "Sec-Websocket-Key": config.handshakeData["key"], + "Origin": config.Origin.String(), + "Sec-Websocket-Protocol": "chat, superchat", + "Sec-Websocket-Version": fmt.Sprintf("%d", ProtocolVersionHybi13), + "User-Agent": "test", + } + for k, v := range expectedHeader { + if req.Header.Get(k) != v { + t.Errorf(fmt.Sprintf("%s expected %q but got %q", k, v, req.Header.Get(k))) + } + } +} + +func TestHybiServerHandshake(t *testing.T) { + config := new(Config) + handshaker := &hybiServerHandshaker{Config: config} + br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1 +Host: server.example.com +Upgrade: websocket +Connection: Upgrade +Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== +Origin: http://example.com +Sec-WebSocket-Protocol: chat, superchat +Sec-WebSocket-Version: 13 + +`)) + req, err := http.ReadRequest(br) + if err != nil { + t.Fatal("request", err) + } + code, err := handshaker.ReadHandshake(br, req) + if err != nil { + t.Errorf("handshake failed: %v", err) + } + if code != http.StatusSwitchingProtocols { + t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code) + } + expectedProtocols := []string{"chat", "superchat"} + if fmt.Sprintf("%v", config.Protocol) != fmt.Sprintf("%v", expectedProtocols) { + t.Errorf("protocol expected %q but got %q", expectedProtocols, config.Protocol) + } + b := bytes.NewBuffer([]byte{}) + bw := bufio.NewWriter(b) + + config.Protocol = config.Protocol[:1] + + err = handshaker.AcceptHandshake(bw) + if err != nil { + t.Errorf("handshake response failed: %v", err) + } + expectedResponse := strings.Join([]string{ + "HTTP/1.1 101 Switching Protocols", + "Upgrade: websocket", + "Connection: Upgrade", + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", + "Sec-WebSocket-Protocol: chat", + "", ""}, "\r\n") + + if b.String() != expectedResponse { + t.Errorf("handshake expected %q but got %q", expectedResponse, b.String()) + } +} + +func TestHybiServerHandshakeNoSubProtocol(t *testing.T) { + config := new(Config) + handshaker := &hybiServerHandshaker{Config: config} + br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1 +Host: server.example.com +Upgrade: websocket +Connection: Upgrade +Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== +Origin: http://example.com +Sec-WebSocket-Version: 13 + +`)) + req, err := http.ReadRequest(br) + if err != nil { + t.Fatal("request", err) + } + code, err := handshaker.ReadHandshake(br, req) + if err != nil { + t.Errorf("handshake failed: %v", err) + } + if code != http.StatusSwitchingProtocols { + t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code) + } + if len(config.Protocol) != 0 { + t.Errorf("len(config.Protocol) expected 0, but got %q", len(config.Protocol)) + } + b := bytes.NewBuffer([]byte{}) + bw := bufio.NewWriter(b) + + err = handshaker.AcceptHandshake(bw) + if err != nil { + t.Errorf("handshake response failed: %v", err) + } + expectedResponse := strings.Join([]string{ + "HTTP/1.1 101 Switching Protocols", + "Upgrade: websocket", + "Connection: Upgrade", + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", + "", ""}, "\r\n") + + if b.String() != expectedResponse { + t.Errorf("handshake expected %q but got %q", expectedResponse, b.String()) + } +} + +func TestHybiServerHandshakeHybiBadVersion(t *testing.T) { + config := new(Config) + handshaker := &hybiServerHandshaker{Config: config} + br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1 +Host: server.example.com +Upgrade: websocket +Connection: Upgrade +Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== +Sec-WebSocket-Origin: http://example.com +Sec-WebSocket-Protocol: chat, superchat +Sec-WebSocket-Version: 9 + +`)) + req, err := http.ReadRequest(br) + if err != nil { + t.Fatal("request", err) + } + code, err := handshaker.ReadHandshake(br, req) + if err != ErrBadWebSocketVersion { + t.Errorf("handshake expected err %q but got %q", ErrBadWebSocketVersion, err) + } + if code != http.StatusBadRequest { + t.Errorf("status expected %q but got %q", http.StatusBadRequest, code) + } +} + +func testHybiFrame(t *testing.T, testHeader, testPayload, testMaskedPayload []byte, frameHeader *hybiFrameHeader) { + b := bytes.NewBuffer([]byte{}) + frameWriterFactory := &hybiFrameWriterFactory{bufio.NewWriter(b), false} + w, _ := frameWriterFactory.NewFrameWriter(TextFrame) + w.(*hybiFrameWriter).header = frameHeader + _, err := w.Write(testPayload) + w.Close() + if err != nil { + t.Errorf("Write error %q", err) + } + var expectedFrame []byte + expectedFrame = append(expectedFrame, testHeader...) + expectedFrame = append(expectedFrame, testMaskedPayload...) + if !bytes.Equal(expectedFrame, b.Bytes()) { + t.Errorf("frame expected %q got %q", expectedFrame, b.Bytes()) + } + frameReaderFactory := &hybiFrameReaderFactory{bufio.NewReader(b)} + r, err := frameReaderFactory.NewFrameReader() + if err != nil { + t.Errorf("Read error %q", err) + } + if header := r.HeaderReader(); header == nil { + t.Errorf("no header") + } else { + actualHeader := make([]byte, r.Len()) + n, err := header.Read(actualHeader) + if err != nil { + t.Errorf("Read header error %q", err) + } else { + if n < len(testHeader) { + t.Errorf("header too short %q got %q", testHeader, actualHeader[:n]) + } + if !bytes.Equal(testHeader, actualHeader[:n]) { + t.Errorf("header expected %q got %q", testHeader, actualHeader[:n]) + } + } + } + if trailer := r.TrailerReader(); trailer != nil { + t.Errorf("unexpected trailer %q", trailer) + } + frame := r.(*hybiFrameReader) + if frameHeader.Fin != frame.header.Fin || + frameHeader.OpCode != frame.header.OpCode || + len(testPayload) != int(frame.header.Length) { + t.Errorf("mismatch %v (%d) vs %v", frameHeader, len(testPayload), frame) + } + payload := make([]byte, len(testPayload)) + _, err = r.Read(payload) + if err != nil && err != io.EOF { + t.Errorf("read %v", err) + } + if !bytes.Equal(testPayload, payload) { + t.Errorf("payload %q vs %q", testPayload, payload) + } +} + +func TestHybiShortTextFrame(t *testing.T) { + frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame} + payload := []byte("hello") + testHybiFrame(t, []byte{0x81, 0x05}, payload, payload, frameHeader) + + payload = make([]byte, 125) + testHybiFrame(t, []byte{0x81, 125}, payload, payload, frameHeader) +} + +func TestHybiShortMaskedTextFrame(t *testing.T) { + frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame, + MaskingKey: []byte{0xcc, 0x55, 0x80, 0x20}} + payload := []byte("hello") + maskedPayload := []byte{0xa4, 0x30, 0xec, 0x4c, 0xa3} + header := []byte{0x81, 0x85} + header = append(header, frameHeader.MaskingKey...) + testHybiFrame(t, header, payload, maskedPayload, frameHeader) +} + +func TestHybiShortBinaryFrame(t *testing.T) { + frameHeader := &hybiFrameHeader{Fin: true, OpCode: BinaryFrame} + payload := []byte("hello") + testHybiFrame(t, []byte{0x82, 0x05}, payload, payload, frameHeader) + + payload = make([]byte, 125) + testHybiFrame(t, []byte{0x82, 125}, payload, payload, frameHeader) +} + +func TestHybiControlFrame(t *testing.T) { + payload := []byte("hello") + + frameHeader := &hybiFrameHeader{Fin: true, OpCode: PingFrame} + testHybiFrame(t, []byte{0x89, 0x05}, payload, payload, frameHeader) + + frameHeader = &hybiFrameHeader{Fin: true, OpCode: PingFrame} + testHybiFrame(t, []byte{0x89, 0x00}, nil, nil, frameHeader) + + frameHeader = &hybiFrameHeader{Fin: true, OpCode: PongFrame} + testHybiFrame(t, []byte{0x8A, 0x05}, payload, payload, frameHeader) + + frameHeader = &hybiFrameHeader{Fin: true, OpCode: PongFrame} + testHybiFrame(t, []byte{0x8A, 0x00}, nil, nil, frameHeader) + + frameHeader = &hybiFrameHeader{Fin: true, OpCode: CloseFrame} + payload = []byte{0x03, 0xe8} // 1000 + testHybiFrame(t, []byte{0x88, 0x02}, payload, payload, frameHeader) +} + +func TestHybiLongFrame(t *testing.T) { + frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame} + payload := make([]byte, 126) + testHybiFrame(t, []byte{0x81, 126, 0x00, 126}, payload, payload, frameHeader) + + payload = make([]byte, 65535) + testHybiFrame(t, []byte{0x81, 126, 0xff, 0xff}, payload, payload, frameHeader) + + payload = make([]byte, 65536) + testHybiFrame(t, []byte{0x81, 127, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}, payload, payload, frameHeader) +} + +func TestHybiClientRead(t *testing.T) { + wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o', + 0x89, 0x05, 'h', 'e', 'l', 'l', 'o', // ping + 0x81, 0x05, 'w', 'o', 'r', 'l', 'd'} + br := bufio.NewReader(bytes.NewBuffer(wireData)) + bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) + conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil) + + msg := make([]byte, 512) + n, err := conn.Read(msg) + if err != nil { + t.Errorf("read 1st frame, error %q", err) + } + if n != 5 { + t.Errorf("read 1st frame, expect 5, got %d", n) + } + if !bytes.Equal(wireData[2:7], msg[:n]) { + t.Errorf("read 1st frame %v, got %v", wireData[2:7], msg[:n]) + } + n, err = conn.Read(msg) + if err != nil { + t.Errorf("read 2nd frame, error %q", err) + } + if n != 5 { + t.Errorf("read 2nd frame, expect 5, got %d", n) + } + if !bytes.Equal(wireData[16:21], msg[:n]) { + t.Errorf("read 2nd frame %v, got %v", wireData[16:21], msg[:n]) + } + n, err = conn.Read(msg) + if err == nil { + t.Errorf("read not EOF") + } + if n != 0 { + t.Errorf("expect read 0, got %d", n) + } +} + +func TestHybiShortRead(t *testing.T) { + wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o', + 0x89, 0x05, 'h', 'e', 'l', 'l', 'o', // ping + 0x81, 0x05, 'w', 'o', 'r', 'l', 'd'} + br := bufio.NewReader(bytes.NewBuffer(wireData)) + bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) + conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil) + + step := 0 + pos := 0 + expectedPos := []int{2, 5, 16, 19} + expectedLen := []int{3, 2, 3, 2} + for { + msg := make([]byte, 3) + n, err := conn.Read(msg) + if step >= len(expectedPos) { + if err == nil { + t.Errorf("read not EOF") + } + if n != 0 { + t.Errorf("expect read 0, got %d", n) + } + return + } + pos = expectedPos[step] + endPos := pos + expectedLen[step] + if err != nil { + t.Errorf("read from %d, got error %q", pos, err) + return + } + if n != endPos-pos { + t.Errorf("read from %d, expect %d, got %d", pos, endPos-pos, n) + } + if !bytes.Equal(wireData[pos:endPos], msg[:n]) { + t.Errorf("read from %d, frame %v, got %v", pos, wireData[pos:endPos], msg[:n]) + } + step++ + } +} + +func TestHybiServerRead(t *testing.T) { + wireData := []byte{0x81, 0x85, 0xcc, 0x55, 0x80, 0x20, + 0xa4, 0x30, 0xec, 0x4c, 0xa3, // hello + 0x89, 0x85, 0xcc, 0x55, 0x80, 0x20, + 0xa4, 0x30, 0xec, 0x4c, 0xa3, // ping: hello + 0x81, 0x85, 0xed, 0x83, 0xb4, 0x24, + 0x9a, 0xec, 0xc6, 0x48, 0x89, // world + } + br := bufio.NewReader(bytes.NewBuffer(wireData)) + bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) + conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, new(http.Request)) + + expected := [][]byte{[]byte("hello"), []byte("world")} + + msg := make([]byte, 512) + n, err := conn.Read(msg) + if err != nil { + t.Errorf("read 1st frame, error %q", err) + } + if n != 5 { + t.Errorf("read 1st frame, expect 5, got %d", n) + } + if !bytes.Equal(expected[0], msg[:n]) { + t.Errorf("read 1st frame %q, got %q", expected[0], msg[:n]) + } + + n, err = conn.Read(msg) + if err != nil { + t.Errorf("read 2nd frame, error %q", err) + } + if n != 5 { + t.Errorf("read 2nd frame, expect 5, got %d", n) + } + if !bytes.Equal(expected[1], msg[:n]) { + t.Errorf("read 2nd frame %q, got %q", expected[1], msg[:n]) + } + + n, err = conn.Read(msg) + if err == nil { + t.Errorf("read not EOF") + } + if n != 0 { + t.Errorf("expect read 0, got %d", n) + } +} + +func TestHybiServerReadWithoutMasking(t *testing.T) { + wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o'} + br := bufio.NewReader(bytes.NewBuffer(wireData)) + bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) + conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, new(http.Request)) + // server MUST close the connection upon receiving a non-masked frame. + msg := make([]byte, 512) + _, err := conn.Read(msg) + if err != io.EOF { + t.Errorf("read 1st frame, expect %q, but got %q", io.EOF, err) + } +} + +func TestHybiClientReadWithMasking(t *testing.T) { + wireData := []byte{0x81, 0x85, 0xcc, 0x55, 0x80, 0x20, + 0xa4, 0x30, 0xec, 0x4c, 0xa3, // hello + } + br := bufio.NewReader(bytes.NewBuffer(wireData)) + bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) + conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil) + + // client MUST close the connection upon receiving a masked frame. + msg := make([]byte, 512) + _, err := conn.Read(msg) + if err != io.EOF { + t.Errorf("read 1st frame, expect %q, but got %q", io.EOF, err) + } +} + +// Test the hybiServerHandshaker supports firefox implementation and +// checks Connection request header include (but it's not necessary +// equal to) "upgrade" +func TestHybiServerFirefoxHandshake(t *testing.T) { + config := new(Config) + handshaker := &hybiServerHandshaker{Config: config} + br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1 +Host: server.example.com +Upgrade: websocket +Connection: keep-alive, upgrade +Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== +Origin: http://example.com +Sec-WebSocket-Protocol: chat, superchat +Sec-WebSocket-Version: 13 + +`)) + req, err := http.ReadRequest(br) + if err != nil { + t.Fatal("request", err) + } + code, err := handshaker.ReadHandshake(br, req) + if err != nil { + t.Errorf("handshake failed: %v", err) + } + if code != http.StatusSwitchingProtocols { + t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code) + } + b := bytes.NewBuffer([]byte{}) + bw := bufio.NewWriter(b) + + config.Protocol = []string{"chat"} + + err = handshaker.AcceptHandshake(bw) + if err != nil { + t.Errorf("handshake response failed: %v", err) + } + expectedResponse := strings.Join([]string{ + "HTTP/1.1 101 Switching Protocols", + "Upgrade: websocket", + "Connection: Upgrade", + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", + "Sec-WebSocket-Protocol: chat", + "", ""}, "\r\n") + + if b.String() != expectedResponse { + t.Errorf("handshake expected %q but got %q", expectedResponse, b.String()) + } +} diff --git a/vendor/golang.org/x/net/websocket/server.go b/vendor/golang.org/x/net/websocket/server.go new file mode 100644 index 0000000..0895dea --- /dev/null +++ b/vendor/golang.org/x/net/websocket/server.go @@ -0,0 +1,113 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "fmt" + "io" + "net/http" +) + +func newServerConn(rwc io.ReadWriteCloser, buf *bufio.ReadWriter, req *http.Request, config *Config, handshake func(*Config, *http.Request) error) (conn *Conn, err error) { + var hs serverHandshaker = &hybiServerHandshaker{Config: config} + code, err := hs.ReadHandshake(buf.Reader, req) + if err == ErrBadWebSocketVersion { + fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) + fmt.Fprintf(buf, "Sec-WebSocket-Version: %s\r\n", SupportedProtocolVersion) + buf.WriteString("\r\n") + buf.WriteString(err.Error()) + buf.Flush() + return + } + if err != nil { + fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) + buf.WriteString("\r\n") + buf.WriteString(err.Error()) + buf.Flush() + return + } + if handshake != nil { + err = handshake(config, req) + if err != nil { + code = http.StatusForbidden + fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) + buf.WriteString("\r\n") + buf.Flush() + return + } + } + err = hs.AcceptHandshake(buf.Writer) + if err != nil { + code = http.StatusBadRequest + fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) + buf.WriteString("\r\n") + buf.Flush() + return + } + conn = hs.NewServerConn(buf, rwc, req) + return +} + +// Server represents a server of a WebSocket. +type Server struct { + // Config is a WebSocket configuration for new WebSocket connection. + Config + + // Handshake is an optional function in WebSocket handshake. + // For example, you can check, or don't check Origin header. + // Another example, you can select config.Protocol. + Handshake func(*Config, *http.Request) error + + // Handler handles a WebSocket connection. + Handler +} + +// ServeHTTP implements the http.Handler interface for a WebSocket +func (s Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { + s.serveWebSocket(w, req) +} + +func (s Server) serveWebSocket(w http.ResponseWriter, req *http.Request) { + rwc, buf, err := w.(http.Hijacker).Hijack() + if err != nil { + panic("Hijack failed: " + err.Error()) + } + // The server should abort the WebSocket connection if it finds + // the client did not send a handshake that matches with protocol + // specification. + defer rwc.Close() + conn, err := newServerConn(rwc, buf, req, &s.Config, s.Handshake) + if err != nil { + return + } + if conn == nil { + panic("unexpected nil conn") + } + s.Handler(conn) +} + +// Handler is a simple interface to a WebSocket browser client. +// It checks if Origin header is valid URL by default. +// You might want to verify websocket.Conn.Config().Origin in the func. +// If you use Server instead of Handler, you could call websocket.Origin and +// check the origin in your Handshake func. So, if you want to accept +// non-browser clients, which do not send an Origin header, set a +// Server.Handshake that does not check the origin. +type Handler func(*Conn) + +func checkOrigin(config *Config, req *http.Request) (err error) { + config.Origin, err = Origin(config, req) + if err == nil && config.Origin == nil { + return fmt.Errorf("null origin") + } + return err +} + +// ServeHTTP implements the http.Handler interface for a WebSocket +func (h Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) { + s := Server{Handler: h, Handshake: checkOrigin} + s.serveWebSocket(w, req) +} diff --git a/vendor/golang.org/x/net/websocket/websocket.go b/vendor/golang.org/x/net/websocket/websocket.go new file mode 100644 index 0000000..e242c89 --- /dev/null +++ b/vendor/golang.org/x/net/websocket/websocket.go @@ -0,0 +1,448 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package websocket implements a client and server for the WebSocket protocol +// as specified in RFC 6455. +// +// This package currently lacks some features found in an alternative +// and more actively maintained WebSocket package: +// +// https://godoc.org/github.com/gorilla/websocket +// +package websocket // import "golang.org/x/net/websocket" + +import ( + "bufio" + "crypto/tls" + "encoding/json" + "errors" + "io" + "io/ioutil" + "net" + "net/http" + "net/url" + "sync" + "time" +) + +const ( + ProtocolVersionHybi13 = 13 + ProtocolVersionHybi = ProtocolVersionHybi13 + SupportedProtocolVersion = "13" + + ContinuationFrame = 0 + TextFrame = 1 + BinaryFrame = 2 + CloseFrame = 8 + PingFrame = 9 + PongFrame = 10 + UnknownFrame = 255 + + DefaultMaxPayloadBytes = 32 << 20 // 32MB +) + +// ProtocolError represents WebSocket protocol errors. +type ProtocolError struct { + ErrorString string +} + +func (err *ProtocolError) Error() string { return err.ErrorString } + +var ( + ErrBadProtocolVersion = &ProtocolError{"bad protocol version"} + ErrBadScheme = &ProtocolError{"bad scheme"} + ErrBadStatus = &ProtocolError{"bad status"} + ErrBadUpgrade = &ProtocolError{"missing or bad upgrade"} + ErrBadWebSocketOrigin = &ProtocolError{"missing or bad WebSocket-Origin"} + ErrBadWebSocketLocation = &ProtocolError{"missing or bad WebSocket-Location"} + ErrBadWebSocketProtocol = &ProtocolError{"missing or bad WebSocket-Protocol"} + ErrBadWebSocketVersion = &ProtocolError{"missing or bad WebSocket Version"} + ErrChallengeResponse = &ProtocolError{"mismatch challenge/response"} + ErrBadFrame = &ProtocolError{"bad frame"} + ErrBadFrameBoundary = &ProtocolError{"not on frame boundary"} + ErrNotWebSocket = &ProtocolError{"not websocket protocol"} + ErrBadRequestMethod = &ProtocolError{"bad method"} + ErrNotSupported = &ProtocolError{"not supported"} +) + +// ErrFrameTooLarge is returned by Codec's Receive method if payload size +// exceeds limit set by Conn.MaxPayloadBytes +var ErrFrameTooLarge = errors.New("websocket: frame payload size exceeds limit") + +// Addr is an implementation of net.Addr for WebSocket. +type Addr struct { + *url.URL +} + +// Network returns the network type for a WebSocket, "websocket". +func (addr *Addr) Network() string { return "websocket" } + +// Config is a WebSocket configuration +type Config struct { + // A WebSocket server address. + Location *url.URL + + // A Websocket client origin. + Origin *url.URL + + // WebSocket subprotocols. + Protocol []string + + // WebSocket protocol version. + Version int + + // TLS config for secure WebSocket (wss). + TlsConfig *tls.Config + + // Additional header fields to be sent in WebSocket opening handshake. + Header http.Header + + // Dialer used when opening websocket connections. + Dialer *net.Dialer + + handshakeData map[string]string +} + +// serverHandshaker is an interface to handle WebSocket server side handshake. +type serverHandshaker interface { + // ReadHandshake reads handshake request message from client. + // Returns http response code and error if any. + ReadHandshake(buf *bufio.Reader, req *http.Request) (code int, err error) + + // AcceptHandshake accepts the client handshake request and sends + // handshake response back to client. + AcceptHandshake(buf *bufio.Writer) (err error) + + // NewServerConn creates a new WebSocket connection. + NewServerConn(buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) (conn *Conn) +} + +// frameReader is an interface to read a WebSocket frame. +type frameReader interface { + // Reader is to read payload of the frame. + io.Reader + + // PayloadType returns payload type. + PayloadType() byte + + // HeaderReader returns a reader to read header of the frame. + HeaderReader() io.Reader + + // TrailerReader returns a reader to read trailer of the frame. + // If it returns nil, there is no trailer in the frame. + TrailerReader() io.Reader + + // Len returns total length of the frame, including header and trailer. + Len() int +} + +// frameReaderFactory is an interface to creates new frame reader. +type frameReaderFactory interface { + NewFrameReader() (r frameReader, err error) +} + +// frameWriter is an interface to write a WebSocket frame. +type frameWriter interface { + // Writer is to write payload of the frame. + io.WriteCloser +} + +// frameWriterFactory is an interface to create new frame writer. +type frameWriterFactory interface { + NewFrameWriter(payloadType byte) (w frameWriter, err error) +} + +type frameHandler interface { + HandleFrame(frame frameReader) (r frameReader, err error) + WriteClose(status int) (err error) +} + +// Conn represents a WebSocket connection. +// +// Multiple goroutines may invoke methods on a Conn simultaneously. +type Conn struct { + config *Config + request *http.Request + + buf *bufio.ReadWriter + rwc io.ReadWriteCloser + + rio sync.Mutex + frameReaderFactory + frameReader + + wio sync.Mutex + frameWriterFactory + + frameHandler + PayloadType byte + defaultCloseStatus int + + // MaxPayloadBytes limits the size of frame payload received over Conn + // by Codec's Receive method. If zero, DefaultMaxPayloadBytes is used. + MaxPayloadBytes int +} + +// Read implements the io.Reader interface: +// it reads data of a frame from the WebSocket connection. +// if msg is not large enough for the frame data, it fills the msg and next Read +// will read the rest of the frame data. +// it reads Text frame or Binary frame. +func (ws *Conn) Read(msg []byte) (n int, err error) { + ws.rio.Lock() + defer ws.rio.Unlock() +again: + if ws.frameReader == nil { + frame, err := ws.frameReaderFactory.NewFrameReader() + if err != nil { + return 0, err + } + ws.frameReader, err = ws.frameHandler.HandleFrame(frame) + if err != nil { + return 0, err + } + if ws.frameReader == nil { + goto again + } + } + n, err = ws.frameReader.Read(msg) + if err == io.EOF { + if trailer := ws.frameReader.TrailerReader(); trailer != nil { + io.Copy(ioutil.Discard, trailer) + } + ws.frameReader = nil + goto again + } + return n, err +} + +// Write implements the io.Writer interface: +// it writes data as a frame to the WebSocket connection. +func (ws *Conn) Write(msg []byte) (n int, err error) { + ws.wio.Lock() + defer ws.wio.Unlock() + w, err := ws.frameWriterFactory.NewFrameWriter(ws.PayloadType) + if err != nil { + return 0, err + } + n, err = w.Write(msg) + w.Close() + return n, err +} + +// Close implements the io.Closer interface. +func (ws *Conn) Close() error { + err := ws.frameHandler.WriteClose(ws.defaultCloseStatus) + err1 := ws.rwc.Close() + if err != nil { + return err + } + return err1 +} + +func (ws *Conn) IsClientConn() bool { return ws.request == nil } +func (ws *Conn) IsServerConn() bool { return ws.request != nil } + +// LocalAddr returns the WebSocket Origin for the connection for client, or +// the WebSocket location for server. +func (ws *Conn) LocalAddr() net.Addr { + if ws.IsClientConn() { + return &Addr{ws.config.Origin} + } + return &Addr{ws.config.Location} +} + +// RemoteAddr returns the WebSocket location for the connection for client, or +// the Websocket Origin for server. +func (ws *Conn) RemoteAddr() net.Addr { + if ws.IsClientConn() { + return &Addr{ws.config.Location} + } + return &Addr{ws.config.Origin} +} + +var errSetDeadline = errors.New("websocket: cannot set deadline: not using a net.Conn") + +// SetDeadline sets the connection's network read & write deadlines. +func (ws *Conn) SetDeadline(t time.Time) error { + if conn, ok := ws.rwc.(net.Conn); ok { + return conn.SetDeadline(t) + } + return errSetDeadline +} + +// SetReadDeadline sets the connection's network read deadline. +func (ws *Conn) SetReadDeadline(t time.Time) error { + if conn, ok := ws.rwc.(net.Conn); ok { + return conn.SetReadDeadline(t) + } + return errSetDeadline +} + +// SetWriteDeadline sets the connection's network write deadline. +func (ws *Conn) SetWriteDeadline(t time.Time) error { + if conn, ok := ws.rwc.(net.Conn); ok { + return conn.SetWriteDeadline(t) + } + return errSetDeadline +} + +// Config returns the WebSocket config. +func (ws *Conn) Config() *Config { return ws.config } + +// Request returns the http request upgraded to the WebSocket. +// It is nil for client side. +func (ws *Conn) Request() *http.Request { return ws.request } + +// Codec represents a symmetric pair of functions that implement a codec. +type Codec struct { + Marshal func(v interface{}) (data []byte, payloadType byte, err error) + Unmarshal func(data []byte, payloadType byte, v interface{}) (err error) +} + +// Send sends v marshaled by cd.Marshal as single frame to ws. +func (cd Codec) Send(ws *Conn, v interface{}) (err error) { + data, payloadType, err := cd.Marshal(v) + if err != nil { + return err + } + ws.wio.Lock() + defer ws.wio.Unlock() + w, err := ws.frameWriterFactory.NewFrameWriter(payloadType) + if err != nil { + return err + } + _, err = w.Write(data) + w.Close() + return err +} + +// Receive receives single frame from ws, unmarshaled by cd.Unmarshal and stores +// in v. The whole frame payload is read to an in-memory buffer; max size of +// payload is defined by ws.MaxPayloadBytes. If frame payload size exceeds +// limit, ErrFrameTooLarge is returned; in this case frame is not read off wire +// completely. The next call to Receive would read and discard leftover data of +// previous oversized frame before processing next frame. +func (cd Codec) Receive(ws *Conn, v interface{}) (err error) { + ws.rio.Lock() + defer ws.rio.Unlock() + if ws.frameReader != nil { + _, err = io.Copy(ioutil.Discard, ws.frameReader) + if err != nil { + return err + } + ws.frameReader = nil + } +again: + frame, err := ws.frameReaderFactory.NewFrameReader() + if err != nil { + return err + } + frame, err = ws.frameHandler.HandleFrame(frame) + if err != nil { + return err + } + if frame == nil { + goto again + } + maxPayloadBytes := ws.MaxPayloadBytes + if maxPayloadBytes == 0 { + maxPayloadBytes = DefaultMaxPayloadBytes + } + if hf, ok := frame.(*hybiFrameReader); ok && hf.header.Length > int64(maxPayloadBytes) { + // payload size exceeds limit, no need to call Unmarshal + // + // set frameReader to current oversized frame so that + // the next call to this function can drain leftover + // data before processing the next frame + ws.frameReader = frame + return ErrFrameTooLarge + } + payloadType := frame.PayloadType() + data, err := ioutil.ReadAll(frame) + if err != nil { + return err + } + return cd.Unmarshal(data, payloadType, v) +} + +func marshal(v interface{}) (msg []byte, payloadType byte, err error) { + switch data := v.(type) { + case string: + return []byte(data), TextFrame, nil + case []byte: + return data, BinaryFrame, nil + } + return nil, UnknownFrame, ErrNotSupported +} + +func unmarshal(msg []byte, payloadType byte, v interface{}) (err error) { + switch data := v.(type) { + case *string: + *data = string(msg) + return nil + case *[]byte: + *data = msg + return nil + } + return ErrNotSupported +} + +/* +Message is a codec to send/receive text/binary data in a frame on WebSocket connection. +To send/receive text frame, use string type. +To send/receive binary frame, use []byte type. + +Trivial usage: + + import "websocket" + + // receive text frame + var message string + websocket.Message.Receive(ws, &message) + + // send text frame + message = "hello" + websocket.Message.Send(ws, message) + + // receive binary frame + var data []byte + websocket.Message.Receive(ws, &data) + + // send binary frame + data = []byte{0, 1, 2} + websocket.Message.Send(ws, data) + +*/ +var Message = Codec{marshal, unmarshal} + +func jsonMarshal(v interface{}) (msg []byte, payloadType byte, err error) { + msg, err = json.Marshal(v) + return msg, TextFrame, err +} + +func jsonUnmarshal(msg []byte, payloadType byte, v interface{}) (err error) { + return json.Unmarshal(msg, v) +} + +/* +JSON is a codec to send/receive JSON data in a frame from a WebSocket connection. + +Trivial usage: + + import "websocket" + + type T struct { + Msg string + Count int + } + + // receive JSON type T + var data T + websocket.JSON.Receive(ws, &data) + + // send JSON type T + websocket.JSON.Send(ws, data) +*/ +var JSON = Codec{jsonMarshal, jsonUnmarshal} diff --git a/vendor/golang.org/x/net/websocket/websocket_test.go b/vendor/golang.org/x/net/websocket/websocket_test.go new file mode 100644 index 0000000..2054ce8 --- /dev/null +++ b/vendor/golang.org/x/net/websocket/websocket_test.go @@ -0,0 +1,665 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bytes" + "crypto/rand" + "fmt" + "io" + "log" + "net" + "net/http" + "net/http/httptest" + "net/url" + "reflect" + "runtime" + "strings" + "sync" + "testing" + "time" +) + +var serverAddr string +var once sync.Once + +func echoServer(ws *Conn) { + defer ws.Close() + io.Copy(ws, ws) +} + +type Count struct { + S string + N int +} + +func countServer(ws *Conn) { + defer ws.Close() + for { + var count Count + err := JSON.Receive(ws, &count) + if err != nil { + return + } + count.N++ + count.S = strings.Repeat(count.S, count.N) + err = JSON.Send(ws, count) + if err != nil { + return + } + } +} + +type testCtrlAndDataHandler struct { + hybiFrameHandler +} + +func (h *testCtrlAndDataHandler) WritePing(b []byte) (int, error) { + h.hybiFrameHandler.conn.wio.Lock() + defer h.hybiFrameHandler.conn.wio.Unlock() + w, err := h.hybiFrameHandler.conn.frameWriterFactory.NewFrameWriter(PingFrame) + if err != nil { + return 0, err + } + n, err := w.Write(b) + w.Close() + return n, err +} + +func ctrlAndDataServer(ws *Conn) { + defer ws.Close() + h := &testCtrlAndDataHandler{hybiFrameHandler: hybiFrameHandler{conn: ws}} + ws.frameHandler = h + + go func() { + for i := 0; ; i++ { + var b []byte + if i%2 != 0 { // with or without payload + b = []byte(fmt.Sprintf("#%d-CONTROL-FRAME-FROM-SERVER", i)) + } + if _, err := h.WritePing(b); err != nil { + break + } + if _, err := h.WritePong(b); err != nil { // unsolicited pong + break + } + time.Sleep(10 * time.Millisecond) + } + }() + + b := make([]byte, 128) + for { + n, err := ws.Read(b) + if err != nil { + break + } + if _, err := ws.Write(b[:n]); err != nil { + break + } + } +} + +func subProtocolHandshake(config *Config, req *http.Request) error { + for _, proto := range config.Protocol { + if proto == "chat" { + config.Protocol = []string{proto} + return nil + } + } + return ErrBadWebSocketProtocol +} + +func subProtoServer(ws *Conn) { + for _, proto := range ws.Config().Protocol { + io.WriteString(ws, proto) + } +} + +func startServer() { + http.Handle("/echo", Handler(echoServer)) + http.Handle("/count", Handler(countServer)) + http.Handle("/ctrldata", Handler(ctrlAndDataServer)) + subproto := Server{ + Handshake: subProtocolHandshake, + Handler: Handler(subProtoServer), + } + http.Handle("/subproto", subproto) + server := httptest.NewServer(nil) + serverAddr = server.Listener.Addr().String() + log.Print("Test WebSocket server listening on ", serverAddr) +} + +func newConfig(t *testing.T, path string) *Config { + config, _ := NewConfig(fmt.Sprintf("ws://%s%s", serverAddr, path), "http://localhost") + return config +} + +func TestEcho(t *testing.T) { + once.Do(startServer) + + // websocket.Dial() + client, err := net.Dial("tcp", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + conn, err := NewClient(newConfig(t, "/echo"), client) + if err != nil { + t.Errorf("WebSocket handshake error: %v", err) + return + } + + msg := []byte("hello, world\n") + if _, err := conn.Write(msg); err != nil { + t.Errorf("Write: %v", err) + } + var actual_msg = make([]byte, 512) + n, err := conn.Read(actual_msg) + if err != nil { + t.Errorf("Read: %v", err) + } + actual_msg = actual_msg[0:n] + if !bytes.Equal(msg, actual_msg) { + t.Errorf("Echo: expected %q got %q", msg, actual_msg) + } + conn.Close() +} + +func TestAddr(t *testing.T) { + once.Do(startServer) + + // websocket.Dial() + client, err := net.Dial("tcp", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + conn, err := NewClient(newConfig(t, "/echo"), client) + if err != nil { + t.Errorf("WebSocket handshake error: %v", err) + return + } + + ra := conn.RemoteAddr().String() + if !strings.HasPrefix(ra, "ws://") || !strings.HasSuffix(ra, "/echo") { + t.Errorf("Bad remote addr: %v", ra) + } + la := conn.LocalAddr().String() + if !strings.HasPrefix(la, "http://") { + t.Errorf("Bad local addr: %v", la) + } + conn.Close() +} + +func TestCount(t *testing.T) { + once.Do(startServer) + + // websocket.Dial() + client, err := net.Dial("tcp", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + conn, err := NewClient(newConfig(t, "/count"), client) + if err != nil { + t.Errorf("WebSocket handshake error: %v", err) + return + } + + var count Count + count.S = "hello" + if err := JSON.Send(conn, count); err != nil { + t.Errorf("Write: %v", err) + } + if err := JSON.Receive(conn, &count); err != nil { + t.Errorf("Read: %v", err) + } + if count.N != 1 { + t.Errorf("count: expected %d got %d", 1, count.N) + } + if count.S != "hello" { + t.Errorf("count: expected %q got %q", "hello", count.S) + } + if err := JSON.Send(conn, count); err != nil { + t.Errorf("Write: %v", err) + } + if err := JSON.Receive(conn, &count); err != nil { + t.Errorf("Read: %v", err) + } + if count.N != 2 { + t.Errorf("count: expected %d got %d", 2, count.N) + } + if count.S != "hellohello" { + t.Errorf("count: expected %q got %q", "hellohello", count.S) + } + conn.Close() +} + +func TestWithQuery(t *testing.T) { + once.Do(startServer) + + client, err := net.Dial("tcp", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + + config := newConfig(t, "/echo") + config.Location, err = url.ParseRequestURI(fmt.Sprintf("ws://%s/echo?q=v", serverAddr)) + if err != nil { + t.Fatal("location url", err) + } + + ws, err := NewClient(config, client) + if err != nil { + t.Errorf("WebSocket handshake: %v", err) + return + } + ws.Close() +} + +func testWithProtocol(t *testing.T, subproto []string) (string, error) { + once.Do(startServer) + + client, err := net.Dial("tcp", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + + config := newConfig(t, "/subproto") + config.Protocol = subproto + + ws, err := NewClient(config, client) + if err != nil { + return "", err + } + msg := make([]byte, 16) + n, err := ws.Read(msg) + if err != nil { + return "", err + } + ws.Close() + return string(msg[:n]), nil +} + +func TestWithProtocol(t *testing.T) { + proto, err := testWithProtocol(t, []string{"chat"}) + if err != nil { + t.Errorf("SubProto: unexpected error: %v", err) + } + if proto != "chat" { + t.Errorf("SubProto: expected %q, got %q", "chat", proto) + } +} + +func TestWithTwoProtocol(t *testing.T) { + proto, err := testWithProtocol(t, []string{"test", "chat"}) + if err != nil { + t.Errorf("SubProto: unexpected error: %v", err) + } + if proto != "chat" { + t.Errorf("SubProto: expected %q, got %q", "chat", proto) + } +} + +func TestWithBadProtocol(t *testing.T) { + _, err := testWithProtocol(t, []string{"test"}) + if err != ErrBadStatus { + t.Errorf("SubProto: expected %v, got %v", ErrBadStatus, err) + } +} + +func TestHTTP(t *testing.T) { + once.Do(startServer) + + // If the client did not send a handshake that matches the protocol + // specification, the server MUST return an HTTP response with an + // appropriate error code (such as 400 Bad Request) + resp, err := http.Get(fmt.Sprintf("http://%s/echo", serverAddr)) + if err != nil { + t.Errorf("Get: error %#v", err) + return + } + if resp == nil { + t.Error("Get: resp is null") + return + } + if resp.StatusCode != http.StatusBadRequest { + t.Errorf("Get: expected %q got %q", http.StatusBadRequest, resp.StatusCode) + } +} + +func TestTrailingSpaces(t *testing.T) { + // http://code.google.com/p/go/issues/detail?id=955 + // The last runs of this create keys with trailing spaces that should not be + // generated by the client. + once.Do(startServer) + config := newConfig(t, "/echo") + for i := 0; i < 30; i++ { + // body + ws, err := DialConfig(config) + if err != nil { + t.Errorf("Dial #%d failed: %v", i, err) + break + } + ws.Close() + } +} + +func TestDialConfigBadVersion(t *testing.T) { + once.Do(startServer) + config := newConfig(t, "/echo") + config.Version = 1234 + + _, err := DialConfig(config) + + if dialerr, ok := err.(*DialError); ok { + if dialerr.Err != ErrBadProtocolVersion { + t.Errorf("dial expected err %q but got %q", ErrBadProtocolVersion, dialerr.Err) + } + } +} + +func TestDialConfigWithDialer(t *testing.T) { + once.Do(startServer) + config := newConfig(t, "/echo") + config.Dialer = &net.Dialer{ + Deadline: time.Now().Add(-time.Minute), + } + _, err := DialConfig(config) + dialerr, ok := err.(*DialError) + if !ok { + t.Fatalf("DialError expected, got %#v", err) + } + neterr, ok := dialerr.Err.(*net.OpError) + if !ok { + t.Fatalf("net.OpError error expected, got %#v", dialerr.Err) + } + if !neterr.Timeout() { + t.Fatalf("expected timeout error, got %#v", neterr) + } +} + +func TestSmallBuffer(t *testing.T) { + // http://code.google.com/p/go/issues/detail?id=1145 + // Read should be able to handle reading a fragment of a frame. + once.Do(startServer) + + // websocket.Dial() + client, err := net.Dial("tcp", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + conn, err := NewClient(newConfig(t, "/echo"), client) + if err != nil { + t.Errorf("WebSocket handshake error: %v", err) + return + } + + msg := []byte("hello, world\n") + if _, err := conn.Write(msg); err != nil { + t.Errorf("Write: %v", err) + } + var small_msg = make([]byte, 8) + n, err := conn.Read(small_msg) + if err != nil { + t.Errorf("Read: %v", err) + } + if !bytes.Equal(msg[:len(small_msg)], small_msg) { + t.Errorf("Echo: expected %q got %q", msg[:len(small_msg)], small_msg) + } + var second_msg = make([]byte, len(msg)) + n, err = conn.Read(second_msg) + if err != nil { + t.Errorf("Read: %v", err) + } + second_msg = second_msg[0:n] + if !bytes.Equal(msg[len(small_msg):], second_msg) { + t.Errorf("Echo: expected %q got %q", msg[len(small_msg):], second_msg) + } + conn.Close() +} + +var parseAuthorityTests = []struct { + in *url.URL + out string +}{ + { + &url.URL{ + Scheme: "ws", + Host: "www.google.com", + }, + "www.google.com:80", + }, + { + &url.URL{ + Scheme: "wss", + Host: "www.google.com", + }, + "www.google.com:443", + }, + { + &url.URL{ + Scheme: "ws", + Host: "www.google.com:80", + }, + "www.google.com:80", + }, + { + &url.URL{ + Scheme: "wss", + Host: "www.google.com:443", + }, + "www.google.com:443", + }, + // some invalid ones for parseAuthority. parseAuthority doesn't + // concern itself with the scheme unless it actually knows about it + { + &url.URL{ + Scheme: "http", + Host: "www.google.com", + }, + "www.google.com", + }, + { + &url.URL{ + Scheme: "http", + Host: "www.google.com:80", + }, + "www.google.com:80", + }, + { + &url.URL{ + Scheme: "asdf", + Host: "127.0.0.1", + }, + "127.0.0.1", + }, + { + &url.URL{ + Scheme: "asdf", + Host: "www.google.com", + }, + "www.google.com", + }, +} + +func TestParseAuthority(t *testing.T) { + for _, tt := range parseAuthorityTests { + out := parseAuthority(tt.in) + if out != tt.out { + t.Errorf("got %v; want %v", out, tt.out) + } + } +} + +type closerConn struct { + net.Conn + closed int // count of the number of times Close was called +} + +func (c *closerConn) Close() error { + c.closed++ + return c.Conn.Close() +} + +func TestClose(t *testing.T) { + if runtime.GOOS == "plan9" { + t.Skip("see golang.org/issue/11454") + } + + once.Do(startServer) + + conn, err := net.Dial("tcp", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + + cc := closerConn{Conn: conn} + + client, err := NewClient(newConfig(t, "/echo"), &cc) + if err != nil { + t.Fatalf("WebSocket handshake: %v", err) + } + + // set the deadline to ten minutes ago, which will have expired by the time + // client.Close sends the close status frame. + conn.SetDeadline(time.Now().Add(-10 * time.Minute)) + + if err := client.Close(); err == nil { + t.Errorf("ws.Close(): expected error, got %v", err) + } + if cc.closed < 1 { + t.Fatalf("ws.Close(): expected underlying ws.rwc.Close to be called > 0 times, got: %v", cc.closed) + } +} + +var originTests = []struct { + req *http.Request + origin *url.URL +}{ + { + req: &http.Request{ + Header: http.Header{ + "Origin": []string{"http://www.example.com"}, + }, + }, + origin: &url.URL{ + Scheme: "http", + Host: "www.example.com", + }, + }, + { + req: &http.Request{}, + }, +} + +func TestOrigin(t *testing.T) { + conf := newConfig(t, "/echo") + conf.Version = ProtocolVersionHybi13 + for i, tt := range originTests { + origin, err := Origin(conf, tt.req) + if err != nil { + t.Error(err) + continue + } + if !reflect.DeepEqual(origin, tt.origin) { + t.Errorf("#%d: got origin %v; want %v", i, origin, tt.origin) + continue + } + } +} + +func TestCtrlAndData(t *testing.T) { + once.Do(startServer) + + c, err := net.Dial("tcp", serverAddr) + if err != nil { + t.Fatal(err) + } + ws, err := NewClient(newConfig(t, "/ctrldata"), c) + if err != nil { + t.Fatal(err) + } + defer ws.Close() + + h := &testCtrlAndDataHandler{hybiFrameHandler: hybiFrameHandler{conn: ws}} + ws.frameHandler = h + + b := make([]byte, 128) + for i := 0; i < 2; i++ { + data := []byte(fmt.Sprintf("#%d-DATA-FRAME-FROM-CLIENT", i)) + if _, err := ws.Write(data); err != nil { + t.Fatalf("#%d: %v", i, err) + } + var ctrl []byte + if i%2 != 0 { // with or without payload + ctrl = []byte(fmt.Sprintf("#%d-CONTROL-FRAME-FROM-CLIENT", i)) + } + if _, err := h.WritePing(ctrl); err != nil { + t.Fatalf("#%d: %v", i, err) + } + n, err := ws.Read(b) + if err != nil { + t.Fatalf("#%d: %v", i, err) + } + if !bytes.Equal(b[:n], data) { + t.Fatalf("#%d: got %v; want %v", i, b[:n], data) + } + } +} + +func TestCodec_ReceiveLimited(t *testing.T) { + const limit = 2048 + var payloads [][]byte + for _, size := range []int{ + 1024, + 2048, + 4096, // receive of this message would be interrupted due to limit + 2048, // this one is to make sure next receive recovers discarding leftovers + } { + b := make([]byte, size) + rand.Read(b) + payloads = append(payloads, b) + } + handlerDone := make(chan struct{}) + limitedHandler := func(ws *Conn) { + defer close(handlerDone) + ws.MaxPayloadBytes = limit + defer ws.Close() + for i, p := range payloads { + t.Logf("payload #%d (size %d, exceeds limit: %v)", i, len(p), len(p) > limit) + var recv []byte + err := Message.Receive(ws, &recv) + switch err { + case nil: + case ErrFrameTooLarge: + if len(p) <= limit { + t.Fatalf("unexpected frame size limit: expected %d bytes of payload having limit at %d", len(p), limit) + } + continue + default: + t.Fatalf("unexpected error: %v (want either nil or ErrFrameTooLarge)", err) + } + if len(recv) > limit { + t.Fatalf("received %d bytes of payload having limit at %d", len(recv), limit) + } + if !bytes.Equal(p, recv) { + t.Fatalf("received payload differs:\ngot:\t%v\nwant:\t%v", recv, p) + } + } + } + server := httptest.NewServer(Handler(limitedHandler)) + defer server.CloseClientConnections() + defer server.Close() + addr := server.Listener.Addr().String() + ws, err := Dial("ws://"+addr+"/", "", "http://localhost/") + if err != nil { + t.Fatal(err) + } + defer ws.Close() + for i, p := range payloads { + if err := Message.Send(ws, p); err != nil { + t.Fatalf("payload #%d (size %d): %v", i, len(p), err) + } + } + <-handlerDone +} diff --git a/vendor/golang.org/x/net/xsrftoken/xsrf.go b/vendor/golang.org/x/net/xsrftoken/xsrf.go new file mode 100644 index 0000000..881bf19 --- /dev/null +++ b/vendor/golang.org/x/net/xsrftoken/xsrf.go @@ -0,0 +1,88 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package xsrftoken provides methods for generating and validating secure XSRF tokens. +package xsrftoken // import "golang.org/x/net/xsrftoken" + +import ( + "crypto/hmac" + "crypto/sha1" + "crypto/subtle" + "encoding/base64" + "fmt" + "strconv" + "strings" + "time" +) + +// Timeout is the duration for which XSRF tokens are valid. +// It is exported so clients may set cookie timeouts that match generated tokens. +const Timeout = 24 * time.Hour + +// clean sanitizes a string for inclusion in a token by replacing all ":"s. +func clean(s string) string { + return strings.Replace(s, ":", "_", -1) +} + +// Generate returns a URL-safe secure XSRF token that expires in 24 hours. +// +// key is a secret key for your application. +// userID is a unique identifier for the user. +// actionID is the action the user is taking (e.g. POSTing to a particular path). +func Generate(key, userID, actionID string) string { + return generateTokenAtTime(key, userID, actionID, time.Now()) +} + +// generateTokenAtTime is like Generate, but returns a token that expires 24 hours from now. +func generateTokenAtTime(key, userID, actionID string, now time.Time) string { + // Round time up and convert to milliseconds. + milliTime := (now.UnixNano() + 1e6 - 1) / 1e6 + + h := hmac.New(sha1.New, []byte(key)) + fmt.Fprintf(h, "%s:%s:%d", clean(userID), clean(actionID), milliTime) + + // Get the padded base64 string then removing the padding. + tok := string(h.Sum(nil)) + tok = base64.URLEncoding.EncodeToString([]byte(tok)) + tok = strings.TrimRight(tok, "=") + + return fmt.Sprintf("%s:%d", tok, milliTime) +} + +// Valid reports whether a token is a valid, unexpired token returned by Generate. +func Valid(token, key, userID, actionID string) bool { + return validTokenAtTime(token, key, userID, actionID, time.Now()) +} + +// validTokenAtTime reports whether a token is valid at the given time. +func validTokenAtTime(token, key, userID, actionID string, now time.Time) bool { + // Extract the issue time of the token. + sep := strings.LastIndex(token, ":") + if sep < 0 { + return false + } + millis, err := strconv.ParseInt(token[sep+1:], 10, 64) + if err != nil { + return false + } + issueTime := time.Unix(0, millis*1e6) + + // Check that the token is not expired. + if now.Sub(issueTime) >= Timeout { + return false + } + + // Check that the token is not from the future. + // Allow 1 minute grace period in case the token is being verified on a + // machine whose clock is behind the machine that issued the token. + if issueTime.After(now.Add(1 * time.Minute)) { + return false + } + + expected := generateTokenAtTime(key, userID, actionID, issueTime) + + // Check that the token matches the expected value. + // Use constant time comparison to avoid timing attacks. + return subtle.ConstantTimeCompare([]byte(token), []byte(expected)) == 1 +} diff --git a/vendor/golang.org/x/net/xsrftoken/xsrf_test.go b/vendor/golang.org/x/net/xsrftoken/xsrf_test.go new file mode 100644 index 0000000..6c8e7d9 --- /dev/null +++ b/vendor/golang.org/x/net/xsrftoken/xsrf_test.go @@ -0,0 +1,83 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xsrftoken + +import ( + "encoding/base64" + "testing" + "time" +) + +const ( + key = "quay" + userID = "12345678" + actionID = "POST /form" +) + +var ( + now = time.Now() + oneMinuteFromNow = now.Add(1 * time.Minute) +) + +func TestValidToken(t *testing.T) { + tok := generateTokenAtTime(key, userID, actionID, now) + if !validTokenAtTime(tok, key, userID, actionID, oneMinuteFromNow) { + t.Error("One second later: Expected token to be valid") + } + if !validTokenAtTime(tok, key, userID, actionID, now.Add(Timeout-1*time.Nanosecond)) { + t.Error("Just before timeout: Expected token to be valid") + } + if !validTokenAtTime(tok, key, userID, actionID, now.Add(-1*time.Minute+1*time.Millisecond)) { + t.Error("One minute in the past: Expected token to be valid") + } +} + +// TestSeparatorReplacement tests that separators are being correctly substituted +func TestSeparatorReplacement(t *testing.T) { + tok := generateTokenAtTime("foo:bar", "baz", "wah", now) + tok2 := generateTokenAtTime("foo", "bar:baz", "wah", now) + if tok == tok2 { + t.Errorf("Expected generated tokens to be different") + } +} + +func TestInvalidToken(t *testing.T) { + invalidTokenTests := []struct { + name, key, userID, actionID string + t time.Time + }{ + {"Bad key", "foobar", userID, actionID, oneMinuteFromNow}, + {"Bad userID", key, "foobar", actionID, oneMinuteFromNow}, + {"Bad actionID", key, userID, "foobar", oneMinuteFromNow}, + {"Expired", key, userID, actionID, now.Add(Timeout + 1*time.Millisecond)}, + {"More than 1 minute from the future", key, userID, actionID, now.Add(-1*time.Nanosecond - 1*time.Minute)}, + } + + tok := generateTokenAtTime(key, userID, actionID, now) + for _, itt := range invalidTokenTests { + if validTokenAtTime(tok, itt.key, itt.userID, itt.actionID, itt.t) { + t.Errorf("%v: Expected token to be invalid", itt.name) + } + } +} + +// TestValidateBadData primarily tests that no unexpected panics are triggered +// during parsing +func TestValidateBadData(t *testing.T) { + badDataTests := []struct { + name, tok string + }{ + {"Invalid Base64", "ASDab24(@)$*=="}, + {"No delimiter", base64.URLEncoding.EncodeToString([]byte("foobar12345678"))}, + {"Invalid time", base64.URLEncoding.EncodeToString([]byte("foobar:foobar"))}, + {"Wrong length", "1234" + generateTokenAtTime(key, userID, actionID, now)}, + } + + for _, bdt := range badDataTests { + if validTokenAtTime(bdt.tok, key, userID, actionID, oneMinuteFromNow) { + t.Errorf("%v: Expected token to be invalid", bdt.name) + } + } +} diff --git a/vendor/golang.org/x/text/.gitattributes b/vendor/golang.org/x/text/.gitattributes new file mode 100644 index 0000000..d2f212e --- /dev/null +++ b/vendor/golang.org/x/text/.gitattributes @@ -0,0 +1,10 @@ +# Treat all files in this repo as binary, with no git magic updating +# line endings. Windows users contributing to Go will need to use a +# modern version of git and editors capable of LF line endings. +# +# We'll prevent accidental CRLF line endings from entering the repo +# via the git-review gofmt checks. +# +# See golang.org/issue/9281 + +* -text diff --git a/vendor/golang.org/x/text/.gitignore b/vendor/golang.org/x/text/.gitignore new file mode 100644 index 0000000..b2de568 --- /dev/null +++ b/vendor/golang.org/x/text/.gitignore @@ -0,0 +1,6 @@ +# Add no patterns to .gitignore except for files generated by the build. +last-change +/DATA +# This file is rather large and the tests really only need to be run +# after generation. +/unicode/norm/data_test.go \ No newline at end of file diff --git a/vendor/golang.org/x/text/AUTHORS b/vendor/golang.org/x/text/AUTHORS new file mode 100644 index 0000000..15167cd --- /dev/null +++ b/vendor/golang.org/x/text/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/text/CONTRIBUTING.md b/vendor/golang.org/x/text/CONTRIBUTING.md new file mode 100644 index 0000000..88dff59 --- /dev/null +++ b/vendor/golang.org/x/text/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Go + +Go is an open source project. + +It is the work of hundreds of contributors. We appreciate your help! + + +## Filing issues + +When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. +The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +## Contributing code + +Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) +before sending patches. + +**We do not accept GitHub pull requests** +(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). + +Unless otherwise noted, the Go source files are distributed under +the BSD-style license found in the LICENSE file. + diff --git a/vendor/golang.org/x/text/CONTRIBUTORS b/vendor/golang.org/x/text/CONTRIBUTORS new file mode 100644 index 0000000..1c4577e --- /dev/null +++ b/vendor/golang.org/x/text/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/text/LICENSE b/vendor/golang.org/x/text/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/text/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/text/PATENTS b/vendor/golang.org/x/text/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/text/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/text/README b/vendor/golang.org/x/text/README new file mode 100644 index 0000000..4826fe8 --- /dev/null +++ b/vendor/golang.org/x/text/README @@ -0,0 +1,23 @@ +This repository holds supplementary Go libraries for text processing, many involving Unicode. + +To submit changes to this repository, see http://golang.org/doc/contribute.html. + +To generate the tables in this repository (except for the encoding tables), +run go generate from this directory. By default tables are generated for the +Unicode version in core and the CLDR version defined in +golang.org/x/text/unicode/cldr. + +Running go generate will as a side effect create a DATA subdirectory in this +directory which holds all files that are used as a source for generating the +tables. This directory will also serve as a cache. + +Run + + go test ./... + +from this directory to run all tests. Add the "-tags icu" flag to also run +ICU conformance tests (if available). This requires that you have the correct +ICU version installed on your system. + +TODO: +- updating unversioned source files. \ No newline at end of file diff --git a/vendor/golang.org/x/text/cases/cases.go b/vendor/golang.org/x/text/cases/cases.go new file mode 100644 index 0000000..0204372 --- /dev/null +++ b/vendor/golang.org/x/text/cases/cases.go @@ -0,0 +1,162 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go gen_trieval.go + +// Package cases provides general and language-specific case mappers. +package cases // import "golang.org/x/text/cases" + +import ( + "golang.org/x/text/language" + "golang.org/x/text/transform" +) + +// References: +// - Unicode Reference Manual Chapter 3.13, 4.2, and 5.18. +// - http://www.unicode.org/reports/tr29/ +// - http://www.unicode.org/Public/6.3.0/ucd/CaseFolding.txt +// - http://www.unicode.org/Public/6.3.0/ucd/SpecialCasing.txt +// - http://www.unicode.org/Public/6.3.0/ucd/DerivedCoreProperties.txt +// - http://www.unicode.org/Public/6.3.0/ucd/auxiliary/WordBreakProperty.txt +// - http://www.unicode.org/Public/6.3.0/ucd/auxiliary/WordBreakTest.txt +// - http://userguide.icu-project.org/transforms/casemappings + +// TODO: +// - Case folding +// - Wide and Narrow? +// - Segmenter option for title casing. +// - ASCII fast paths +// - Encode Soft-Dotted property within trie somehow. + +// A Caser transforms given input to a certain case. It implements +// transform.Transformer. +// +// A Caser may be stateful and should therefore not be shared between +// goroutines. +type Caser struct { + t transform.SpanningTransformer +} + +// Bytes returns a new byte slice with the result of converting b to the case +// form implemented by c. +func (c Caser) Bytes(b []byte) []byte { + b, _, _ = transform.Bytes(c.t, b) + return b +} + +// String returns a string with the result of transforming s to the case form +// implemented by c. +func (c Caser) String(s string) string { + s, _, _ = transform.String(c.t, s) + return s +} + +// Reset resets the Caser to be reused for new input after a previous call to +// Transform. +func (c Caser) Reset() { c.t.Reset() } + +// Transform implements the transform.Transformer interface and transforms the +// given input to the case form implemented by c. +func (c Caser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + return c.t.Transform(dst, src, atEOF) +} + +// Span implements the transform.SpanningTransformer interface. +func (c Caser) Span(src []byte, atEOF bool) (n int, err error) { + return c.t.Span(src, atEOF) +} + +// Upper returns a Caser for language-specific uppercasing. +func Upper(t language.Tag, opts ...Option) Caser { + return Caser{makeUpper(t, getOpts(opts...))} +} + +// Lower returns a Caser for language-specific lowercasing. +func Lower(t language.Tag, opts ...Option) Caser { + return Caser{makeLower(t, getOpts(opts...))} +} + +// Title returns a Caser for language-specific title casing. It uses an +// approximation of the default Unicode Word Break algorithm. +func Title(t language.Tag, opts ...Option) Caser { + return Caser{makeTitle(t, getOpts(opts...))} +} + +// Fold returns a Caser that implements Unicode case folding. The returned Caser +// is stateless and safe to use concurrently by multiple goroutines. +// +// Case folding does not normalize the input and may not preserve a normal form. +// Use the collate or search package for more convenient and linguistically +// sound comparisons. Use unicode/precis for string comparisons where security +// aspects are a concern. +func Fold(opts ...Option) Caser { + return Caser{makeFold(getOpts(opts...))} +} + +// An Option is used to modify the behavior of a Caser. +type Option func(o options) options + +// TODO: consider these options to take a boolean as well, like FinalSigma. +// The advantage of using this approach is that other providers of a lower-case +// algorithm could set different defaults by prefixing a user-provided slice +// of options with their own. This is handy, for instance, for the precis +// package which would override the default to not handle the Greek final sigma. + +var ( + // NoLower disables the lowercasing of non-leading letters for a title + // caser. + NoLower Option = noLower + + // Compact omits mappings in case folding for characters that would grow the + // input. (Unimplemented.) + Compact Option = compact +) + +// TODO: option to preserve a normal form, if applicable? + +type options struct { + noLower bool + simple bool + + // TODO: segmenter, max ignorable, alternative versions, etc. + + ignoreFinalSigma bool +} + +func getOpts(o ...Option) (res options) { + for _, f := range o { + res = f(res) + } + return +} + +func noLower(o options) options { + o.noLower = true + return o +} + +func compact(o options) options { + o.simple = true + return o +} + +// HandleFinalSigma specifies whether the special handling of Greek final sigma +// should be enabled. Unicode prescribes handling the Greek final sigma for all +// locales, but standards like IDNA and PRECIS override this default. +func HandleFinalSigma(enable bool) Option { + if enable { + return handleFinalSigma + } + return ignoreFinalSigma +} + +func ignoreFinalSigma(o options) options { + o.ignoreFinalSigma = true + return o +} + +func handleFinalSigma(o options) options { + o.ignoreFinalSigma = false + return o +} diff --git a/vendor/golang.org/x/text/cases/context.go b/vendor/golang.org/x/text/cases/context.go new file mode 100644 index 0000000..e9aa9e1 --- /dev/null +++ b/vendor/golang.org/x/text/cases/context.go @@ -0,0 +1,376 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cases + +import "golang.org/x/text/transform" + +// A context is used for iterating over source bytes, fetching case info and +// writing to a destination buffer. +// +// Casing operations may need more than one rune of context to decide how a rune +// should be cased. Casing implementations should call checkpoint on context +// whenever it is known to be safe to return the runes processed so far. +// +// It is recommended for implementations to not allow for more than 30 case +// ignorables as lookahead (analogous to the limit in norm) and to use state if +// unbounded lookahead is needed for cased runes. +type context struct { + dst, src []byte + atEOF bool + + pDst int // pDst points past the last written rune in dst. + pSrc int // pSrc points to the start of the currently scanned rune. + + // checkpoints safe to return in Transform, where nDst <= pDst and nSrc <= pSrc. + nDst, nSrc int + err error + + sz int // size of current rune + info info // case information of currently scanned rune + + // State preserved across calls to Transform. + isMidWord bool // false if next cased letter needs to be title-cased. +} + +func (c *context) Reset() { + c.isMidWord = false +} + +// ret returns the return values for the Transform method. It checks whether +// there were insufficient bytes in src to complete and introduces an error +// accordingly, if necessary. +func (c *context) ret() (nDst, nSrc int, err error) { + if c.err != nil || c.nSrc == len(c.src) { + return c.nDst, c.nSrc, c.err + } + // This point is only reached by mappers if there was no short destination + // buffer. This means that the source buffer was exhausted and that c.sz was + // set to 0 by next. + if c.atEOF && c.pSrc == len(c.src) { + return c.pDst, c.pSrc, nil + } + return c.nDst, c.nSrc, transform.ErrShortSrc +} + +// retSpan returns the return values for the Span method. It checks whether +// there were insufficient bytes in src to complete and introduces an error +// accordingly, if necessary. +func (c *context) retSpan() (n int, err error) { + _, nSrc, err := c.ret() + return nSrc, err +} + +// checkpoint sets the return value buffer points for Transform to the current +// positions. +func (c *context) checkpoint() { + if c.err == nil { + c.nDst, c.nSrc = c.pDst, c.pSrc+c.sz + } +} + +// unreadRune causes the last rune read by next to be reread on the next +// invocation of next. Only one unreadRune may be called after a call to next. +func (c *context) unreadRune() { + c.sz = 0 +} + +func (c *context) next() bool { + c.pSrc += c.sz + if c.pSrc == len(c.src) || c.err != nil { + c.info, c.sz = 0, 0 + return false + } + v, sz := trie.lookup(c.src[c.pSrc:]) + c.info, c.sz = info(v), sz + if c.sz == 0 { + if c.atEOF { + // A zero size means we have an incomplete rune. If we are atEOF, + // this means it is an illegal rune, which we will consume one + // byte at a time. + c.sz = 1 + } else { + c.err = transform.ErrShortSrc + return false + } + } + return true +} + +// writeBytes adds bytes to dst. +func (c *context) writeBytes(b []byte) bool { + if len(c.dst)-c.pDst < len(b) { + c.err = transform.ErrShortDst + return false + } + // This loop is faster than using copy. + for _, ch := range b { + c.dst[c.pDst] = ch + c.pDst++ + } + return true +} + +// writeString writes the given string to dst. +func (c *context) writeString(s string) bool { + if len(c.dst)-c.pDst < len(s) { + c.err = transform.ErrShortDst + return false + } + // This loop is faster than using copy. + for i := 0; i < len(s); i++ { + c.dst[c.pDst] = s[i] + c.pDst++ + } + return true +} + +// copy writes the current rune to dst. +func (c *context) copy() bool { + return c.writeBytes(c.src[c.pSrc : c.pSrc+c.sz]) +} + +// copyXOR copies the current rune to dst and modifies it by applying the XOR +// pattern of the case info. It is the responsibility of the caller to ensure +// that this is a rune with a XOR pattern defined. +func (c *context) copyXOR() bool { + if !c.copy() { + return false + } + if c.info&xorIndexBit == 0 { + // Fast path for 6-bit XOR pattern, which covers most cases. + c.dst[c.pDst-1] ^= byte(c.info >> xorShift) + } else { + // Interpret XOR bits as an index. + // TODO: test performance for unrolling this loop. Verify that we have + // at least two bytes and at most three. + idx := c.info >> xorShift + for p := c.pDst - 1; ; p-- { + c.dst[p] ^= xorData[idx] + idx-- + if xorData[idx] == 0 { + break + } + } + } + return true +} + +// hasPrefix returns true if src[pSrc:] starts with the given string. +func (c *context) hasPrefix(s string) bool { + b := c.src[c.pSrc:] + if len(b) < len(s) { + return false + } + for i, c := range b[:len(s)] { + if c != s[i] { + return false + } + } + return true +} + +// caseType returns an info with only the case bits, normalized to either +// cLower, cUpper, cTitle or cUncased. +func (c *context) caseType() info { + cm := c.info & 0x7 + if cm < 4 { + return cm + } + if cm >= cXORCase { + // xor the last bit of the rune with the case type bits. + b := c.src[c.pSrc+c.sz-1] + return info(b&1) ^ cm&0x3 + } + if cm == cIgnorableCased { + return cLower + } + return cUncased +} + +// lower writes the lowercase version of the current rune to dst. +func lower(c *context) bool { + ct := c.caseType() + if c.info&hasMappingMask == 0 || ct == cLower { + return c.copy() + } + if c.info&exceptionBit == 0 { + return c.copyXOR() + } + e := exceptions[c.info>>exceptionShift:] + offset := 2 + e[0]&lengthMask // size of header + fold string + if nLower := (e[1] >> lengthBits) & lengthMask; nLower != noChange { + return c.writeString(e[offset : offset+nLower]) + } + return c.copy() +} + +func isLower(c *context) bool { + ct := c.caseType() + if c.info&hasMappingMask == 0 || ct == cLower { + return true + } + if c.info&exceptionBit == 0 { + c.err = transform.ErrEndOfSpan + return false + } + e := exceptions[c.info>>exceptionShift:] + if nLower := (e[1] >> lengthBits) & lengthMask; nLower != noChange { + c.err = transform.ErrEndOfSpan + return false + } + return true +} + +// upper writes the uppercase version of the current rune to dst. +func upper(c *context) bool { + ct := c.caseType() + if c.info&hasMappingMask == 0 || ct == cUpper { + return c.copy() + } + if c.info&exceptionBit == 0 { + return c.copyXOR() + } + e := exceptions[c.info>>exceptionShift:] + offset := 2 + e[0]&lengthMask // size of header + fold string + // Get length of first special case mapping. + n := (e[1] >> lengthBits) & lengthMask + if ct == cTitle { + // The first special case mapping is for lower. Set n to the second. + if n == noChange { + n = 0 + } + n, e = e[1]&lengthMask, e[n:] + } + if n != noChange { + return c.writeString(e[offset : offset+n]) + } + return c.copy() +} + +// isUpper writes the isUppercase version of the current rune to dst. +func isUpper(c *context) bool { + ct := c.caseType() + if c.info&hasMappingMask == 0 || ct == cUpper { + return true + } + if c.info&exceptionBit == 0 { + c.err = transform.ErrEndOfSpan + return false + } + e := exceptions[c.info>>exceptionShift:] + // Get length of first special case mapping. + n := (e[1] >> lengthBits) & lengthMask + if ct == cTitle { + n = e[1] & lengthMask + } + if n != noChange { + c.err = transform.ErrEndOfSpan + return false + } + return true +} + +// title writes the title case version of the current rune to dst. +func title(c *context) bool { + ct := c.caseType() + if c.info&hasMappingMask == 0 || ct == cTitle { + return c.copy() + } + if c.info&exceptionBit == 0 { + if ct == cLower { + return c.copyXOR() + } + return c.copy() + } + // Get the exception data. + e := exceptions[c.info>>exceptionShift:] + offset := 2 + e[0]&lengthMask // size of header + fold string + + nFirst := (e[1] >> lengthBits) & lengthMask + if nTitle := e[1] & lengthMask; nTitle != noChange { + if nFirst != noChange { + e = e[nFirst:] + } + return c.writeString(e[offset : offset+nTitle]) + } + if ct == cLower && nFirst != noChange { + // Use the uppercase version instead. + return c.writeString(e[offset : offset+nFirst]) + } + // Already in correct case. + return c.copy() +} + +// isTitle reports whether the current rune is in title case. +func isTitle(c *context) bool { + ct := c.caseType() + if c.info&hasMappingMask == 0 || ct == cTitle { + return true + } + if c.info&exceptionBit == 0 { + if ct == cLower { + c.err = transform.ErrEndOfSpan + return false + } + return true + } + // Get the exception data. + e := exceptions[c.info>>exceptionShift:] + if nTitle := e[1] & lengthMask; nTitle != noChange { + c.err = transform.ErrEndOfSpan + return false + } + nFirst := (e[1] >> lengthBits) & lengthMask + if ct == cLower && nFirst != noChange { + c.err = transform.ErrEndOfSpan + return false + } + return true +} + +// foldFull writes the foldFull version of the current rune to dst. +func foldFull(c *context) bool { + if c.info&hasMappingMask == 0 { + return c.copy() + } + ct := c.caseType() + if c.info&exceptionBit == 0 { + if ct != cLower || c.info&inverseFoldBit != 0 { + return c.copyXOR() + } + return c.copy() + } + e := exceptions[c.info>>exceptionShift:] + n := e[0] & lengthMask + if n == 0 { + if ct == cLower { + return c.copy() + } + n = (e[1] >> lengthBits) & lengthMask + } + return c.writeString(e[2 : 2+n]) +} + +// isFoldFull reports whether the current run is mapped to foldFull +func isFoldFull(c *context) bool { + if c.info&hasMappingMask == 0 { + return true + } + ct := c.caseType() + if c.info&exceptionBit == 0 { + if ct != cLower || c.info&inverseFoldBit != 0 { + c.err = transform.ErrEndOfSpan + return false + } + return true + } + e := exceptions[c.info>>exceptionShift:] + n := e[0] & lengthMask + if n == 0 && ct == cLower { + return true + } + c.err = transform.ErrEndOfSpan + return false +} diff --git a/vendor/golang.org/x/text/cases/context_test.go b/vendor/golang.org/x/text/cases/context_test.go new file mode 100644 index 0000000..f590878 --- /dev/null +++ b/vendor/golang.org/x/text/cases/context_test.go @@ -0,0 +1,438 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cases + +import ( + "strings" + "testing" + "unicode" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" + "golang.org/x/text/unicode/rangetable" +) + +// The following definitions are taken directly from Chapter 3 of The Unicode +// Standard. + +func propCased(r rune) bool { + return propLower(r) || propUpper(r) || unicode.IsTitle(r) +} + +func propLower(r rune) bool { + return unicode.IsLower(r) || unicode.Is(unicode.Other_Lowercase, r) +} + +func propUpper(r rune) bool { + return unicode.IsUpper(r) || unicode.Is(unicode.Other_Uppercase, r) +} + +func propIgnore(r rune) bool { + if unicode.In(r, unicode.Mn, unicode.Me, unicode.Cf, unicode.Lm, unicode.Sk) { + return true + } + return caseIgnorable[r] +} + +func hasBreakProp(r rune) bool { + // binary search over ranges + lo := 0 + hi := len(breakProp) + for lo < hi { + m := lo + (hi-lo)/2 + bp := &breakProp[m] + if bp.lo <= r && r <= bp.hi { + return true + } + if r < bp.lo { + hi = m + } else { + lo = m + 1 + } + } + return false +} + +func contextFromRune(r rune) *context { + c := context{dst: make([]byte, 128), src: []byte(string(r)), atEOF: true} + c.next() + return &c +} + +func TestCaseProperties(t *testing.T) { + if unicode.Version != UnicodeVersion { + // Properties of existing code points may change by Unicode version, so + // we need to skip. + t.Skipf("Skipping as core Unicode version %s different than %s", unicode.Version, UnicodeVersion) + } + assigned := rangetable.Assigned(UnicodeVersion) + coreVersion := rangetable.Assigned(unicode.Version) + for r := rune(0); r <= lastRuneForTesting; r++ { + if !unicode.In(r, assigned) || !unicode.In(r, coreVersion) { + continue + } + c := contextFromRune(r) + if got, want := c.info.isCaseIgnorable(), propIgnore(r); got != want { + t.Errorf("caseIgnorable(%U): got %v; want %v (%x)", r, got, want, c.info) + } + // New letters may change case types, but existing case pairings should + // not change. See Case Pair Stability in + // http://unicode.org/policies/stability_policy.html. + if rf := unicode.SimpleFold(r); rf != r && unicode.In(rf, assigned) { + if got, want := c.info.isCased(), propCased(r); got != want { + t.Errorf("cased(%U): got %v; want %v (%x)", r, got, want, c.info) + } + if got, want := c.caseType() == cUpper, propUpper(r); got != want { + t.Errorf("upper(%U): got %v; want %v (%x)", r, got, want, c.info) + } + if got, want := c.caseType() == cLower, propLower(r); got != want { + t.Errorf("lower(%U): got %v; want %v (%x)", r, got, want, c.info) + } + } + if got, want := c.info.isBreak(), hasBreakProp(r); got != want { + t.Errorf("isBreak(%U): got %v; want %v (%x)", r, got, want, c.info) + } + } + // TODO: get title case from unicode file. +} + +func TestMapping(t *testing.T) { + assigned := rangetable.Assigned(UnicodeVersion) + coreVersion := rangetable.Assigned(unicode.Version) + if coreVersion == nil { + coreVersion = assigned + } + apply := func(r rune, f func(c *context) bool) string { + c := contextFromRune(r) + f(c) + return string(c.dst[:c.pDst]) + } + + for r, tt := range special { + if got, want := apply(r, lower), tt.toLower; got != want { + t.Errorf("lowerSpecial:(%U): got %+q; want %+q", r, got, want) + } + if got, want := apply(r, title), tt.toTitle; got != want { + t.Errorf("titleSpecial:(%U): got %+q; want %+q", r, got, want) + } + if got, want := apply(r, upper), tt.toUpper; got != want { + t.Errorf("upperSpecial:(%U): got %+q; want %+q", r, got, want) + } + } + + for r := rune(0); r <= lastRuneForTesting; r++ { + if !unicode.In(r, assigned) || !unicode.In(r, coreVersion) { + continue + } + if rf := unicode.SimpleFold(r); rf == r || !unicode.In(rf, assigned) { + continue + } + if _, ok := special[r]; ok { + continue + } + want := string(unicode.ToLower(r)) + if got := apply(r, lower); got != want { + t.Errorf("lower:%q (%U): got %q %U; want %q %U", r, r, got, []rune(got), want, []rune(want)) + } + + want = string(unicode.ToUpper(r)) + if got := apply(r, upper); got != want { + t.Errorf("upper:%q (%U): got %q %U; want %q %U", r, r, got, []rune(got), want, []rune(want)) + } + + want = string(unicode.ToTitle(r)) + if got := apply(r, title); got != want { + t.Errorf("title:%q (%U): got %q %U; want %q %U", r, r, got, []rune(got), want, []rune(want)) + } + } +} + +func runeFoldData(r rune) (x struct{ simple, full, special string }) { + x = foldMap[r] + if x.simple == "" { + x.simple = string(unicode.ToLower(r)) + } + if x.full == "" { + x.full = string(unicode.ToLower(r)) + } + if x.special == "" { + x.special = x.full + } + return +} + +func TestFoldData(t *testing.T) { + assigned := rangetable.Assigned(UnicodeVersion) + coreVersion := rangetable.Assigned(unicode.Version) + if coreVersion == nil { + coreVersion = assigned + } + apply := func(r rune, f func(c *context) bool) (string, info) { + c := contextFromRune(r) + f(c) + return string(c.dst[:c.pDst]), c.info.cccType() + } + for r := rune(0); r <= lastRuneForTesting; r++ { + if !unicode.In(r, assigned) || !unicode.In(r, coreVersion) { + continue + } + x := runeFoldData(r) + if got, info := apply(r, foldFull); got != x.full { + t.Errorf("full:%q (%U): got %q %U; want %q %U (ccc=%x)", r, r, got, []rune(got), x.full, []rune(x.full), info) + } + // TODO: special and simple. + } +} + +func TestCCC(t *testing.T) { + assigned := rangetable.Assigned(UnicodeVersion) + normVersion := rangetable.Assigned(norm.Version) + for r := rune(0); r <= lastRuneForTesting; r++ { + if !unicode.In(r, assigned) || !unicode.In(r, normVersion) { + continue + } + c := contextFromRune(r) + + p := norm.NFC.PropertiesString(string(r)) + want := cccOther + switch p.CCC() { + case 0: + want = cccZero + case above: + want = cccAbove + } + if got := c.info.cccType(); got != want { + t.Errorf("%U: got %x; want %x", r, got, want) + } + } +} + +func TestWordBreaks(t *testing.T) { + for _, tt := range breakTest { + testtext.Run(t, tt, func(t *testing.T) { + parts := strings.Split(tt, "|") + want := "" + for _, s := range parts { + found := false + // This algorithm implements title casing given word breaks + // as defined in the Unicode standard 3.13 R3. + for _, r := range s { + title := unicode.ToTitle(r) + lower := unicode.ToLower(r) + if !found && title != lower { + found = true + want += string(title) + } else { + want += string(lower) + } + } + } + src := strings.Join(parts, "") + got := Title(language.Und).String(src) + if got != want { + t.Errorf("got %q; want %q", got, want) + } + }) + } +} + +func TestContext(t *testing.T) { + tests := []struct { + desc string + dstSize int + atEOF bool + src string + out string + nSrc int + err error + ops string + prefixArg string + prefixWant bool + }{{ + desc: "next: past end, atEOF, no checkpoint", + dstSize: 10, + atEOF: true, + src: "12", + out: "", + nSrc: 2, + ops: "next;next;next", + // Test that calling prefix with a non-empty argument when the buffer + // is depleted returns false. + prefixArg: "x", + prefixWant: false, + }, { + desc: "next: not at end, atEOF, no checkpoint", + dstSize: 10, + atEOF: false, + src: "12", + out: "", + nSrc: 0, + err: transform.ErrShortSrc, + ops: "next;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "next: past end, !atEOF, no checkpoint", + dstSize: 10, + atEOF: false, + src: "12", + out: "", + nSrc: 0, + err: transform.ErrShortSrc, + ops: "next;next;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "next: past end, !atEOF, checkpoint", + dstSize: 10, + atEOF: false, + src: "12", + out: "", + nSrc: 2, + ops: "next;next;checkpoint;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "copy: exact count, atEOF, no checkpoint", + dstSize: 2, + atEOF: true, + src: "12", + out: "12", + nSrc: 2, + ops: "next;copy;next;copy;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "copy: past end, !atEOF, no checkpoint", + dstSize: 2, + atEOF: false, + src: "12", + out: "", + nSrc: 0, + err: transform.ErrShortSrc, + ops: "next;copy;next;copy;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "copy: past end, !atEOF, checkpoint", + dstSize: 2, + atEOF: false, + src: "12", + out: "12", + nSrc: 2, + ops: "next;copy;next;copy;checkpoint;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "copy: short dst", + dstSize: 1, + atEOF: false, + src: "12", + out: "", + nSrc: 0, + err: transform.ErrShortDst, + ops: "next;copy;next;copy;checkpoint;next", + prefixArg: "12", + prefixWant: false, + }, { + desc: "copy: short dst, checkpointed", + dstSize: 1, + atEOF: false, + src: "12", + out: "1", + nSrc: 1, + err: transform.ErrShortDst, + ops: "next;copy;checkpoint;next;copy;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "writeString: simple", + dstSize: 3, + atEOF: true, + src: "1", + out: "1ab", + nSrc: 1, + ops: "next;copy;writeab;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "writeString: short dst", + dstSize: 2, + atEOF: true, + src: "12", + out: "", + nSrc: 0, + err: transform.ErrShortDst, + ops: "next;copy;writeab;next", + prefixArg: "2", + prefixWant: true, + }, { + desc: "writeString: simple", + dstSize: 3, + atEOF: true, + src: "12", + out: "1ab", + nSrc: 2, + ops: "next;copy;next;writeab;next", + prefixArg: "", + prefixWant: true, + }, { + desc: "writeString: short dst", + dstSize: 2, + atEOF: true, + src: "12", + out: "", + nSrc: 0, + err: transform.ErrShortDst, + ops: "next;copy;next;writeab;next", + prefixArg: "1", + prefixWant: false, + }, { + desc: "prefix", + dstSize: 2, + atEOF: true, + src: "12", + out: "", + nSrc: 0, + // Context will assign an ErrShortSrc if the input wasn't exhausted. + err: transform.ErrShortSrc, + prefixArg: "12", + prefixWant: true, + }} + for _, tt := range tests { + c := context{dst: make([]byte, tt.dstSize), src: []byte(tt.src), atEOF: tt.atEOF} + + for _, op := range strings.Split(tt.ops, ";") { + switch op { + case "next": + c.next() + case "checkpoint": + c.checkpoint() + case "writeab": + c.writeString("ab") + case "copy": + c.copy() + case "": + default: + t.Fatalf("unknown op %q", op) + } + } + if got := c.hasPrefix(tt.prefixArg); got != tt.prefixWant { + t.Errorf("%s:\nprefix was %v; want %v", tt.desc, got, tt.prefixWant) + } + nDst, nSrc, err := c.ret() + if err != tt.err { + t.Errorf("%s:\nerror was %v; want %v", tt.desc, err, tt.err) + } + if out := string(c.dst[:nDst]); out != tt.out { + t.Errorf("%s:\nout was %q; want %q", tt.desc, out, tt.out) + } + if nSrc != tt.nSrc { + t.Errorf("%s:\nnSrc was %d; want %d", tt.desc, nSrc, tt.nSrc) + } + } +} diff --git a/vendor/golang.org/x/text/cases/example_test.go b/vendor/golang.org/x/text/cases/example_test.go new file mode 100644 index 0000000..56e6e33 --- /dev/null +++ b/vendor/golang.org/x/text/cases/example_test.go @@ -0,0 +1,53 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cases_test + +import ( + "fmt" + + "golang.org/x/text/cases" + "golang.org/x/text/language" +) + +func Example() { + src := []string{ + "hello world!", + "i with dot", + "'n ijsberg", + "here comes O'Brian", + } + for _, c := range []cases.Caser{ + cases.Lower(language.Und), + cases.Upper(language.Turkish), + cases.Title(language.Dutch), + cases.Title(language.Und, cases.NoLower), + } { + fmt.Println() + for _, s := range src { + fmt.Println(c.String(s)) + } + } + + // Output: + // hello world! + // i with dot + // 'n ijsberg + // here comes o'brian + // + // HELLO WORLD! + // İ WİTH DOT + // 'N İJSBERG + // HERE COMES O'BRİAN + // + // Hello World! + // I With Dot + // 'n IJsberg + // Here Comes O'brian + // + // Hello World! + // I With Dot + // 'N Ijsberg + // Here Comes O'Brian +} diff --git a/vendor/golang.org/x/text/cases/fold.go b/vendor/golang.org/x/text/cases/fold.go new file mode 100644 index 0000000..85cc434 --- /dev/null +++ b/vendor/golang.org/x/text/cases/fold.go @@ -0,0 +1,34 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cases + +import "golang.org/x/text/transform" + +type caseFolder struct{ transform.NopResetter } + +// caseFolder implements the Transformer interface for doing case folding. +func (t *caseFolder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + c := context{dst: dst, src: src, atEOF: atEOF} + for c.next() { + foldFull(&c) + c.checkpoint() + } + return c.ret() +} + +func (t *caseFolder) Span(src []byte, atEOF bool) (n int, err error) { + c := context{src: src, atEOF: atEOF} + for c.next() && isFoldFull(&c) { + c.checkpoint() + } + return c.retSpan() +} + +func makeFold(o options) transform.SpanningTransformer { + // TODO: Special case folding, through option Language, Special/Turkic, or + // both. + // TODO: Implement Compact options. + return &caseFolder{} +} diff --git a/vendor/golang.org/x/text/cases/fold_test.go b/vendor/golang.org/x/text/cases/fold_test.go new file mode 100644 index 0000000..ca939c7 --- /dev/null +++ b/vendor/golang.org/x/text/cases/fold_test.go @@ -0,0 +1,51 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cases + +import ( + "testing" + + "golang.org/x/text/internal/testtext" +) + +var foldTestCases = []string{ + "βß\u13f8", // "βssᏰ" + "ab\u13fc\uab7aꭰ", // abᏴᎪᎠ + "affifflast", // affifflast + "Iİiı\u0345", // ii̇iıι + "µµΜΜςσΣΣ", // μμμμσσσσ +} + +func TestFold(t *testing.T) { + for _, tc := range foldTestCases { + testEntry := func(name string, c Caser, m func(r rune) string) { + want := "" + for _, r := range tc { + want += m(r) + } + if got := c.String(tc); got != want { + t.Errorf("%s(%s) = %+q; want %+q", name, tc, got, want) + } + dst := make([]byte, 256) // big enough to hold any result + src := []byte(tc) + v := testtext.AllocsPerRun(20, func() { + c.Transform(dst, src, true) + }) + if v > 0 { + t.Errorf("%s(%s): number of allocs was %f; want 0", name, tc, v) + } + } + testEntry("FullFold", Fold(), func(r rune) string { + return runeFoldData(r).full + }) + // TODO: + // testEntry("SimpleFold", Fold(Compact), func(r rune) string { + // return runeFoldData(r).simple + // }) + // testEntry("SpecialFold", Fold(Turkic), func(r rune) string { + // return runeFoldData(r).special + // }) + } +} diff --git a/vendor/golang.org/x/text/cases/gen.go b/vendor/golang.org/x/text/cases/gen.go new file mode 100644 index 0000000..eb399ba --- /dev/null +++ b/vendor/golang.org/x/text/cases/gen.go @@ -0,0 +1,839 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// This program generates the trie for casing operations. The Unicode casing +// algorithm requires the lookup of various properties and mappings for each +// rune. The table generated by this generator combines several of the most +// frequently used of these into a single trie so that they can be accessed +// with a single lookup. +package main + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "log" + "reflect" + "strconv" + "strings" + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/triegen" + "golang.org/x/text/internal/ucd" + "golang.org/x/text/unicode/norm" +) + +func main() { + gen.Init() + genTables() + genTablesTest() + gen.Repackage("gen_trieval.go", "trieval.go", "cases") +} + +// runeInfo contains all information for a rune that we care about for casing +// operations. +type runeInfo struct { + Rune rune + + entry info // trie value for this rune. + + CaseMode info + + // Simple case mappings. + Simple [1 + maxCaseMode][]rune + + // Special casing + HasSpecial bool + Conditional bool + Special [1 + maxCaseMode][]rune + + // Folding + FoldSimple rune + FoldSpecial rune + FoldFull []rune + + // TODO: FC_NFKC, or equivalent data. + + // Properties + SoftDotted bool + CaseIgnorable bool + Cased bool + DecomposeGreek bool + BreakType string + BreakCat breakCategory + + // We care mostly about 0, Above, and IotaSubscript. + CCC byte +} + +type breakCategory int + +const ( + breakBreak breakCategory = iota + breakLetter + breakMid +) + +// mapping returns the case mapping for the given case type. +func (r *runeInfo) mapping(c info) string { + if r.HasSpecial { + return string(r.Special[c]) + } + if len(r.Simple[c]) != 0 { + return string(r.Simple[c]) + } + return string(r.Rune) +} + +func parse(file string, f func(p *ucd.Parser)) { + ucd.Parse(gen.OpenUCDFile(file), f) +} + +func parseUCD() []runeInfo { + chars := make([]runeInfo, unicode.MaxRune) + + get := func(r rune) *runeInfo { + c := &chars[r] + c.Rune = r + return c + } + + parse("UnicodeData.txt", func(p *ucd.Parser) { + ri := get(p.Rune(0)) + ri.CCC = byte(p.Int(ucd.CanonicalCombiningClass)) + ri.Simple[cLower] = p.Runes(ucd.SimpleLowercaseMapping) + ri.Simple[cUpper] = p.Runes(ucd.SimpleUppercaseMapping) + ri.Simple[cTitle] = p.Runes(ucd.SimpleTitlecaseMapping) + if p.String(ucd.GeneralCategory) == "Lt" { + ri.CaseMode = cTitle + } + }) + + // ; + parse("PropList.txt", func(p *ucd.Parser) { + if p.String(1) == "Soft_Dotted" { + chars[p.Rune(0)].SoftDotted = true + } + }) + + // ; + parse("DerivedCoreProperties.txt", func(p *ucd.Parser) { + ri := get(p.Rune(0)) + switch p.String(1) { + case "Case_Ignorable": + ri.CaseIgnorable = true + case "Cased": + ri.Cased = true + case "Lowercase": + ri.CaseMode = cLower + case "Uppercase": + ri.CaseMode = cUpper + } + }) + + // ; ; ; <upper> ; (<condition_list> ;)? + parse("SpecialCasing.txt", func(p *ucd.Parser) { + // We drop all conditional special casing and deal with them manually in + // the language-specific case mappers. Rune 0x03A3 is the only one with + // a conditional formatting that is not language-specific. However, + // dealing with this letter is tricky, especially in a streaming + // context, so we deal with it in the Caser for Greek specifically. + ri := get(p.Rune(0)) + if p.String(4) == "" { + ri.HasSpecial = true + ri.Special[cLower] = p.Runes(1) + ri.Special[cTitle] = p.Runes(2) + ri.Special[cUpper] = p.Runes(3) + } else { + ri.Conditional = true + } + }) + + // TODO: Use text breaking according to UAX #29. + // <code>; <word break type> + parse("auxiliary/WordBreakProperty.txt", func(p *ucd.Parser) { + ri := get(p.Rune(0)) + ri.BreakType = p.String(1) + + // We collapse the word breaking properties onto the categories we need. + switch p.String(1) { // TODO: officially we need to canonicalize. + case "MidLetter", "MidNumLet", "Single_Quote": + ri.BreakCat = breakMid + if !ri.CaseIgnorable { + // finalSigma relies on the fact that all breakMid runes are + // also a Case_Ignorable. Revisit this code when this changes. + log.Fatalf("Rune %U, which has a break category mid, is not a case ignorable", ri) + } + case "ALetter", "Hebrew_Letter", "Numeric", "Extend", "ExtendNumLet", "Format", "ZWJ": + ri.BreakCat = breakLetter + } + }) + + // <code>; <type>; <mapping> + parse("CaseFolding.txt", func(p *ucd.Parser) { + ri := get(p.Rune(0)) + switch p.String(1) { + case "C": + ri.FoldSimple = p.Rune(2) + ri.FoldFull = p.Runes(2) + case "S": + ri.FoldSimple = p.Rune(2) + case "T": + ri.FoldSpecial = p.Rune(2) + case "F": + ri.FoldFull = p.Runes(2) + default: + log.Fatalf("%U: unknown type: %s", p.Rune(0), p.String(1)) + } + }) + + return chars +} + +func genTables() { + chars := parseUCD() + verifyProperties(chars) + + t := triegen.NewTrie("case") + for i := range chars { + c := &chars[i] + makeEntry(c) + t.Insert(rune(i), uint64(c.entry)) + } + + w := gen.NewCodeWriter() + defer w.WriteGoFile("tables.go", "cases") + + gen.WriteUnicodeVersion(w) + + // TODO: write CLDR version after adding a mechanism to detect that the + // tables on which the manually created locale-sensitive casing code is + // based hasn't changed. + + w.WriteVar("xorData", string(xorData)) + w.WriteVar("exceptions", string(exceptionData)) + + sz, err := t.Gen(w, triegen.Compact(&sparseCompacter{})) + if err != nil { + log.Fatal(err) + } + w.Size += sz +} + +func makeEntry(ri *runeInfo) { + if ri.CaseIgnorable { + if ri.Cased { + ri.entry = cIgnorableCased + } else { + ri.entry = cIgnorableUncased + } + } else { + ri.entry = ri.CaseMode + } + + // TODO: handle soft-dotted. + + ccc := cccOther + switch ri.CCC { + case 0: // Not_Reordered + ccc = cccZero + case above: // Above + ccc = cccAbove + } + switch ri.BreakCat { + case breakBreak: + ccc = cccBreak + case breakMid: + ri.entry |= isMidBit + } + + ri.entry |= ccc + + if ri.CaseMode == cUncased { + return + } + + // Need to do something special. + if ri.CaseMode == cTitle || ri.HasSpecial || ri.mapping(cTitle) != ri.mapping(cUpper) { + makeException(ri) + return + } + if f := string(ri.FoldFull); len(f) > 0 && f != ri.mapping(cUpper) && f != ri.mapping(cLower) { + makeException(ri) + return + } + + // Rune is either lowercase or uppercase. + + orig := string(ri.Rune) + mapped := "" + if ri.CaseMode == cUpper { + mapped = ri.mapping(cLower) + } else { + mapped = ri.mapping(cUpper) + } + + if len(orig) != len(mapped) { + makeException(ri) + return + } + + if string(ri.FoldFull) == ri.mapping(cUpper) { + ri.entry |= inverseFoldBit + } + + n := len(orig) + + // Create per-byte XOR mask. + var b []byte + for i := 0; i < n; i++ { + b = append(b, orig[i]^mapped[i]) + } + + // Remove leading 0 bytes, but keep at least one byte. + for ; len(b) > 1 && b[0] == 0; b = b[1:] { + } + + if len(b) == 1 && b[0]&0xc0 == 0 { + ri.entry |= info(b[0]) << xorShift + return + } + + key := string(b) + x, ok := xorCache[key] + if !ok { + xorData = append(xorData, 0) // for detecting start of sequence + xorData = append(xorData, b...) + + x = len(xorData) - 1 + xorCache[key] = x + } + ri.entry |= info(x<<xorShift) | xorIndexBit +} + +var xorCache = map[string]int{} + +// xorData contains byte-wise XOR data for the least significant bytes of a +// UTF-8 encoded rune. An index points to the last byte. The sequence starts +// with a zero terminator. +var xorData = []byte{} + +// See the comments in gen_trieval.go re "the exceptions slice". +var exceptionData = []byte{0} + +// makeException encodes case mappings that cannot be expressed in a simple +// XOR diff. +func makeException(ri *runeInfo) { + ccc := ri.entry & cccMask + // Set exception bit and retain case type. + ri.entry &= 0x0007 + ri.entry |= exceptionBit + + if len(exceptionData) >= 1<<numExceptionBits { + log.Fatalf("%U:exceptionData too large %x > %d bits", ri.Rune, len(exceptionData), numExceptionBits) + } + + // Set the offset in the exceptionData array. + ri.entry |= info(len(exceptionData) << exceptionShift) + + orig := string(ri.Rune) + tc := ri.mapping(cTitle) + uc := ri.mapping(cUpper) + lc := ri.mapping(cLower) + ff := string(ri.FoldFull) + + // addString sets the length of a string and adds it to the expansions array. + addString := func(s string, b *byte) { + if len(s) == 0 { + // Zero-length mappings exist, but only for conditional casing, + // which we are representing outside of this table. + log.Fatalf("%U: has zero-length mapping.", ri.Rune) + } + *b <<= 3 + if s != orig { + n := len(s) + if n > 7 { + log.Fatalf("%U: mapping larger than 7 (%d)", ri.Rune, n) + } + *b |= byte(n) + exceptionData = append(exceptionData, s...) + } + } + + // byte 0: + exceptionData = append(exceptionData, byte(ccc)|byte(len(ff))) + + // byte 1: + p := len(exceptionData) + exceptionData = append(exceptionData, 0) + + if len(ff) > 7 { // May be zero-length. + log.Fatalf("%U: fold string larger than 7 (%d)", ri.Rune, len(ff)) + } + exceptionData = append(exceptionData, ff...) + ct := ri.CaseMode + if ct != cLower { + addString(lc, &exceptionData[p]) + } + if ct != cUpper { + addString(uc, &exceptionData[p]) + } + if ct != cTitle { + // If title is the same as upper, we set it to the original string so + // that it will be marked as not present. This implies title case is + // the same as upper case. + if tc == uc { + tc = orig + } + addString(tc, &exceptionData[p]) + } +} + +// sparseCompacter is a trie value block Compacter. There are many cases where +// successive runes alternate between lower- and upper-case. This Compacter +// exploits this by adding a special case type where the case value is obtained +// from or-ing it with the least-significant bit of the rune, creating large +// ranges of equal case values that compress well. +type sparseCompacter struct { + sparseBlocks [][]uint16 + sparseOffsets []uint16 + sparseCount int +} + +// makeSparse returns the number of elements that compact block would contain +// as well as the modified values. +func makeSparse(vals []uint64) ([]uint16, int) { + // Copy the values. + values := make([]uint16, len(vals)) + for i, v := range vals { + values[i] = uint16(v) + } + + alt := func(i int, v uint16) uint16 { + if cm := info(v & fullCasedMask); cm == cUpper || cm == cLower { + // Convert cLower or cUpper to cXORCase value, which has the form 11x. + xor := v + xor &^= 1 + xor |= uint16(i&1) ^ (v & 1) + xor |= 0x4 + return xor + } + return v + } + + var count int + var previous uint16 + for i, v := range values { + if v != 0 { + // Try if the unmodified value is equal to the previous. + if v == previous { + continue + } + + // Try if the xor-ed value is equal to the previous value. + a := alt(i, v) + if a == previous { + values[i] = a + continue + } + + // This is a new value. + count++ + + // Use the xor-ed value if it will be identical to the next value. + if p := i + 1; p < len(values) && alt(p, values[p]) == a { + values[i] = a + v = a + } + } + previous = v + } + return values, count +} + +func (s *sparseCompacter) Size(v []uint64) (int, bool) { + _, n := makeSparse(v) + + // We limit using this method to having 16 entries. + if n > 16 { + return 0, false + } + + return 2 + int(reflect.TypeOf(valueRange{}).Size())*n, true +} + +func (s *sparseCompacter) Store(v []uint64) uint32 { + h := uint32(len(s.sparseOffsets)) + values, sz := makeSparse(v) + s.sparseBlocks = append(s.sparseBlocks, values) + s.sparseOffsets = append(s.sparseOffsets, uint16(s.sparseCount)) + s.sparseCount += sz + return h +} + +func (s *sparseCompacter) Handler() string { + // The sparse global variable and its lookup method is defined in gen_trieval.go. + return "sparse.lookup" +} + +func (s *sparseCompacter) Print(w io.Writer) (retErr error) { + p := func(format string, args ...interface{}) { + _, err := fmt.Fprintf(w, format, args...) + if retErr == nil && err != nil { + retErr = err + } + } + + ls := len(s.sparseBlocks) + if ls == len(s.sparseOffsets) { + s.sparseOffsets = append(s.sparseOffsets, uint16(s.sparseCount)) + } + p("// sparseOffsets: %d entries, %d bytes\n", ls+1, (ls+1)*2) + p("var sparseOffsets = %#v\n\n", s.sparseOffsets) + + ns := s.sparseCount + p("// sparseValues: %d entries, %d bytes\n", ns, ns*4) + p("var sparseValues = [%d]valueRange {", ns) + for i, values := range s.sparseBlocks { + p("\n// Block %#x, offset %#x", i, s.sparseOffsets[i]) + var v uint16 + for i, nv := range values { + if nv != v { + if v != 0 { + p(",hi:%#02x},", 0x80+i-1) + } + if nv != 0 { + p("\n{value:%#04x,lo:%#02x", nv, 0x80+i) + } + } + v = nv + } + if v != 0 { + p(",hi:%#02x},", 0x80+len(values)-1) + } + } + p("\n}\n\n") + return +} + +// verifyProperties that properties of the runes that are relied upon in the +// implementation. Each property is marked with an identifier that is referred +// to in the places where it is used. +func verifyProperties(chars []runeInfo) { + for i, c := range chars { + r := rune(i) + + // Rune properties. + + // A.1: modifier never changes on lowercase. [ltLower] + if c.CCC > 0 && unicode.ToLower(r) != r { + log.Fatalf("%U: non-starter changes when lowercased", r) + } + + // A.2: properties of decompositions starting with I or J. [ltLower] + d := norm.NFD.PropertiesString(string(r)).Decomposition() + if len(d) > 0 { + if d[0] == 'I' || d[0] == 'J' { + // A.2.1: we expect at least an ASCII character and a modifier. + if len(d) < 3 { + log.Fatalf("%U: length of decomposition was %d; want >= 3", r, len(d)) + } + + // All subsequent runes are modifiers and all have the same CCC. + runes := []rune(string(d[1:])) + ccc := chars[runes[0]].CCC + + for _, mr := range runes[1:] { + mc := chars[mr] + + // A.2.2: all modifiers have a CCC of Above or less. + if ccc == 0 || ccc > above { + log.Fatalf("%U: CCC of successive rune (%U) was %d; want (0,230]", r, mr, ccc) + } + + // A.2.3: a sequence of modifiers all have the same CCC. + if mc.CCC != ccc { + log.Fatalf("%U: CCC of follow-up modifier (%U) was %d; want %d", r, mr, mc.CCC, ccc) + } + + // A.2.4: for each trailing r, r in [0x300, 0x311] <=> CCC == Above. + if (ccc == above) != (0x300 <= mr && mr <= 0x311) { + log.Fatalf("%U: modifier %U in [U+0300, U+0311] != ccc(%U) == 230", r, mr, mr) + } + + if i += len(string(mr)); i >= len(d) { + break + } + } + } + } + + // A.3: no U+0307 in decomposition of Soft-Dotted rune. [ltUpper] + if unicode.Is(unicode.Soft_Dotted, r) && strings.Contains(string(d), "\u0307") { + log.Fatalf("%U: decomposition of soft-dotted rune may not contain U+0307", r) + } + + // A.4: only rune U+0345 may be of CCC Iota_Subscript. [elUpper] + if c.CCC == iotaSubscript && r != 0x0345 { + log.Fatalf("%U: only rune U+0345 may have CCC Iota_Subscript", r) + } + + // A.5: soft-dotted runes do not have exceptions. + if c.SoftDotted && c.entry&exceptionBit != 0 { + log.Fatalf("%U: soft-dotted has exception", r) + } + + // A.6: Greek decomposition. [elUpper] + if unicode.Is(unicode.Greek, r) { + if b := norm.NFD.PropertiesString(string(r)).Decomposition(); b != nil { + runes := []rune(string(b)) + // A.6.1: If a Greek rune decomposes and the first rune of the + // decomposition is greater than U+00FF, the rune is always + // great and not a modifier. + if f := runes[0]; unicode.IsMark(f) || f > 0xFF && !unicode.Is(unicode.Greek, f) { + log.Fatalf("%U: expeced first rune of Greek decomposition to be letter, found %U", r, f) + } + // A.6.2: Any follow-up rune in a Greek decomposition is a + // modifier of which the first should be gobbled in + // decomposition. + for _, m := range runes[1:] { + switch m { + case 0x0313, 0x0314, 0x0301, 0x0300, 0x0306, 0x0342, 0x0308, 0x0304, 0x345: + default: + log.Fatalf("%U: modifier %U is outside of expeced Greek modifier set", r, m) + } + } + } + } + + // Breaking properties. + + // B.1: all runes with CCC > 0 are of break type Extend. + if c.CCC > 0 && c.BreakType != "Extend" { + log.Fatalf("%U: CCC == %d, but got break type %s; want Extend", r, c.CCC, c.BreakType) + } + + // B.2: all cased runes with c.CCC == 0 are of break type ALetter. + if c.CCC == 0 && c.Cased && c.BreakType != "ALetter" { + log.Fatalf("%U: cased, but got break type %s; want ALetter", r, c.BreakType) + } + + // B.3: letter category. + if c.CCC == 0 && c.BreakCat != breakBreak && !c.CaseIgnorable { + if c.BreakCat != breakLetter { + log.Fatalf("%U: check for letter break type gave %d; want %d", r, c.BreakCat, breakLetter) + } + } + } +} + +func genTablesTest() { + w := &bytes.Buffer{} + + fmt.Fprintln(w, "var (") + printProperties(w, "DerivedCoreProperties.txt", "Case_Ignorable", verifyIgnore) + + // We discard the output as we know we have perfect functions. We run them + // just to verify the properties are correct. + n := printProperties(ioutil.Discard, "DerivedCoreProperties.txt", "Cased", verifyCased) + n += printProperties(ioutil.Discard, "DerivedCoreProperties.txt", "Lowercase", verifyLower) + n += printProperties(ioutil.Discard, "DerivedCoreProperties.txt", "Uppercase", verifyUpper) + if n > 0 { + log.Fatalf("One of the discarded properties does not have a perfect filter.") + } + + // <code>; <lower> ; <title> ; <upper> ; (<condition_list> ;)? + fmt.Fprintln(w, "\tspecial = map[rune]struct{ toLower, toTitle, toUpper string }{") + parse("SpecialCasing.txt", func(p *ucd.Parser) { + // Skip conditional entries. + if p.String(4) != "" { + return + } + r := p.Rune(0) + fmt.Fprintf(w, "\t\t0x%04x: {%q, %q, %q},\n", + r, string(p.Runes(1)), string(p.Runes(2)), string(p.Runes(3))) + }) + fmt.Fprint(w, "\t}\n\n") + + // <code>; <type>; <runes> + table := map[rune]struct{ simple, full, special string }{} + parse("CaseFolding.txt", func(p *ucd.Parser) { + r := p.Rune(0) + t := p.String(1) + v := string(p.Runes(2)) + if t != "T" && v == string(unicode.ToLower(r)) { + return + } + x := table[r] + switch t { + case "C": + x.full = v + x.simple = v + case "S": + x.simple = v + case "F": + x.full = v + case "T": + x.special = v + } + table[r] = x + }) + fmt.Fprintln(w, "\tfoldMap = map[rune]struct{ simple, full, special string }{") + for r := rune(0); r < 0x10FFFF; r++ { + x, ok := table[r] + if !ok { + continue + } + fmt.Fprintf(w, "\t\t0x%04x: {%q, %q, %q},\n", r, x.simple, x.full, x.special) + } + fmt.Fprint(w, "\t}\n\n") + + // Break property + notBreak := map[rune]bool{} + parse("auxiliary/WordBreakProperty.txt", func(p *ucd.Parser) { + switch p.String(1) { + case "Extend", "Format", "MidLetter", "MidNumLet", "Single_Quote", + "ALetter", "Hebrew_Letter", "Numeric", "ExtendNumLet", "ZWJ": + notBreak[p.Rune(0)] = true + } + }) + + fmt.Fprintln(w, "\tbreakProp = []struct{ lo, hi rune }{") + inBreak := false + for r := rune(0); r <= lastRuneForTesting; r++ { + if isBreak := !notBreak[r]; isBreak != inBreak { + if isBreak { + fmt.Fprintf(w, "\t\t{0x%x, ", r) + } else { + fmt.Fprintf(w, "0x%x},\n", r-1) + } + inBreak = isBreak + } + } + if inBreak { + fmt.Fprintf(w, "0x%x},\n", lastRuneForTesting) + } + fmt.Fprint(w, "\t}\n\n") + + // Word break test + // Filter out all samples that do not contain cased characters. + cased := map[rune]bool{} + parse("DerivedCoreProperties.txt", func(p *ucd.Parser) { + if p.String(1) == "Cased" { + cased[p.Rune(0)] = true + } + }) + + fmt.Fprintln(w, "\tbreakTest = []string{") + parse("auxiliary/WordBreakTest.txt", func(p *ucd.Parser) { + c := strings.Split(p.String(0), " ") + + const sep = '|' + numCased := 0 + test := "" + for ; len(c) >= 2; c = c[2:] { + if c[0] == "÷" && test != "" { + test += string(sep) + } + i, err := strconv.ParseUint(c[1], 16, 32) + r := rune(i) + if err != nil { + log.Fatalf("Invalid rune %q.", c[1]) + } + if r == sep { + log.Fatalf("Separator %q not allowed in test data. Pick another one.", sep) + } + if cased[r] { + numCased++ + } + test += string(r) + } + if numCased > 1 { + fmt.Fprintf(w, "\t\t%q,\n", test) + } + }) + fmt.Fprintln(w, "\t}") + + fmt.Fprintln(w, ")") + + gen.WriteGoFile("tables_test.go", "cases", w.Bytes()) +} + +// These functions are just used for verification that their definition have not +// changed in the Unicode Standard. + +func verifyCased(r rune) bool { + return verifyLower(r) || verifyUpper(r) || unicode.IsTitle(r) +} + +func verifyLower(r rune) bool { + return unicode.IsLower(r) || unicode.Is(unicode.Other_Lowercase, r) +} + +func verifyUpper(r rune) bool { + return unicode.IsUpper(r) || unicode.Is(unicode.Other_Uppercase, r) +} + +// verifyIgnore is an approximation of the Case_Ignorable property using the +// core unicode package. It is used to reduce the size of the test data. +func verifyIgnore(r rune) bool { + props := []*unicode.RangeTable{ + unicode.Mn, + unicode.Me, + unicode.Cf, + unicode.Lm, + unicode.Sk, + } + for _, p := range props { + if unicode.Is(p, r) { + return true + } + } + return false +} + +// printProperties prints tables of rune properties from the given UCD file. +// A filter func f can be given to exclude certain values. A rune r will have +// the indicated property if it is in the generated table or if f(r). +func printProperties(w io.Writer, file, property string, f func(r rune) bool) int { + verify := map[rune]bool{} + n := 0 + varNameParts := strings.Split(property, "_") + varNameParts[0] = strings.ToLower(varNameParts[0]) + fmt.Fprintf(w, "\t%s = map[rune]bool{\n", strings.Join(varNameParts, "")) + parse(file, func(p *ucd.Parser) { + if p.String(1) == property { + r := p.Rune(0) + verify[r] = true + if !f(r) { + n++ + fmt.Fprintf(w, "\t\t0x%.4x: true,\n", r) + } + } + }) + fmt.Fprint(w, "\t}\n\n") + + // Verify that f is correct, that is, it represents a subset of the property. + for r := rune(0); r <= lastRuneForTesting; r++ { + if !verify[r] && f(r) { + log.Fatalf("Incorrect filter func for property %q.", property) + } + } + return n +} + +// The newCaseTrie, sparseValues and sparseOffsets definitions below are +// placeholders referred to by gen_trieval.go. The real definitions are +// generated by this program and written to tables.go. + +func newCaseTrie(int) int { return 0 } + +var ( + sparseValues [0]valueRange + sparseOffsets [0]uint16 +) diff --git a/vendor/golang.org/x/text/cases/gen_trieval.go b/vendor/golang.org/x/text/cases/gen_trieval.go new file mode 100644 index 0000000..376d22c --- /dev/null +++ b/vendor/golang.org/x/text/cases/gen_trieval.go @@ -0,0 +1,219 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This file contains definitions for interpreting the trie value of the case +// trie generated by "go run gen*.go". It is shared by both the generator +// program and the resultant package. Sharing is achieved by the generator +// copying gen_trieval.go to trieval.go and changing what's above this comment. + +// info holds case information for a single rune. It is the value returned +// by a trie lookup. Most mapping information can be stored in a single 16-bit +// value. If not, for example when a rune is mapped to multiple runes, the value +// stores some basic case data and an index into an array with additional data. +// +// The per-rune values have the following format: +// +// if (exception) { +// 15..5 unsigned exception index +// 4 unused +// } else { +// 15..8 XOR pattern or index to XOR pattern for case mapping +// Only 13..8 are used for XOR patterns. +// 7 inverseFold (fold to upper, not to lower) +// 6 index: interpret the XOR pattern as an index +// or isMid if case mode is cIgnorableUncased. +// 5..4 CCC: zero (normal or break), above or other +// } +// 3 exception: interpret this value as an exception index +// (TODO: is this bit necessary? Probably implied from case mode.) +// 2..0 case mode +// +// For the non-exceptional cases, a rune must be either uncased, lowercase or +// uppercase. If the rune is cased, the XOR pattern maps either a lowercase +// rune to uppercase or an uppercase rune to lowercase (applied to the 10 +// least-significant bits of the rune). +// +// See the definitions below for a more detailed description of the various +// bits. +type info uint16 + +const ( + casedMask = 0x0003 + fullCasedMask = 0x0007 + ignorableMask = 0x0006 + ignorableValue = 0x0004 + + inverseFoldBit = 1 << 7 + isMidBit = 1 << 6 + + exceptionBit = 1 << 3 + exceptionShift = 5 + numExceptionBits = 11 + + xorIndexBit = 1 << 6 + xorShift = 8 + + // There is no mapping if all xor bits and the exception bit are zero. + hasMappingMask = 0xff80 | exceptionBit +) + +// The case mode bits encodes the case type of a rune. This includes uncased, +// title, upper and lower case and case ignorable. (For a definition of these +// terms see Chapter 3 of The Unicode Standard Core Specification.) In some rare +// cases, a rune can be both cased and case-ignorable. This is encoded by +// cIgnorableCased. A rune of this type is always lower case. Some runes are +// cased while not having a mapping. +// +// A common pattern for scripts in the Unicode standard is for upper and lower +// case runes to alternate for increasing rune values (e.g. the accented Latin +// ranges starting from U+0100 and U+1E00 among others and some Cyrillic +// characters). We use this property by defining a cXORCase mode, where the case +// mode (always upper or lower case) is derived from the rune value. As the XOR +// pattern for case mappings is often identical for successive runes, using +// cXORCase can result in large series of identical trie values. This, in turn, +// allows us to better compress the trie blocks. +const ( + cUncased info = iota // 000 + cTitle // 001 + cLower // 010 + cUpper // 011 + cIgnorableUncased // 100 + cIgnorableCased // 101 // lower case if mappings exist + cXORCase // 11x // case is cLower | ((rune&1) ^ x) + + maxCaseMode = cUpper +) + +func (c info) isCased() bool { + return c&casedMask != 0 +} + +func (c info) isCaseIgnorable() bool { + return c&ignorableMask == ignorableValue +} + +func (c info) isNotCasedAndNotCaseIgnorable() bool { + return c&fullCasedMask == 0 +} + +func (c info) isCaseIgnorableAndNotCased() bool { + return c&fullCasedMask == cIgnorableUncased +} + +func (c info) isMid() bool { + return c&(fullCasedMask|isMidBit) == isMidBit|cIgnorableUncased +} + +// The case mapping implementation will need to know about various Canonical +// Combining Class (CCC) values. We encode two of these in the trie value: +// cccZero (0) and cccAbove (230). If the value is cccOther, it means that +// CCC(r) > 0, but not 230. A value of cccBreak means that CCC(r) == 0 and that +// the rune also has the break category Break (see below). +const ( + cccBreak info = iota << 4 + cccZero + cccAbove + cccOther + + cccMask = cccBreak | cccZero | cccAbove | cccOther +) + +const ( + starter = 0 + above = 230 + iotaSubscript = 240 +) + +// The exceptions slice holds data that does not fit in a normal info entry. +// The entry is pointed to by the exception index in an entry. It has the +// following format: +// +// Header +// byte 0: +// 7..6 unused +// 5..4 CCC type (same bits as entry) +// 3 unused +// 2..0 length of fold +// +// byte 1: +// 7..6 unused +// 5..3 length of 1st mapping of case type +// 2..0 length of 2nd mapping of case type +// +// case 1st 2nd +// lower -> upper, title +// upper -> lower, title +// title -> lower, upper +// +// Lengths with the value 0x7 indicate no value and implies no change. +// A length of 0 indicates a mapping to zero-length string. +// +// Body bytes: +// case folding bytes +// lowercase mapping bytes +// uppercase mapping bytes +// titlecase mapping bytes +// closure mapping bytes (for NFKC_Casefold). (TODO) +// +// Fallbacks: +// missing fold -> lower +// missing title -> upper +// all missing -> original rune +// +// exceptions starts with a dummy byte to enforce that there is no zero index +// value. +const ( + lengthMask = 0x07 + lengthBits = 3 + noChange = 0 +) + +// References to generated trie. + +var trie = newCaseTrie(0) + +var sparse = sparseBlocks{ + values: sparseValues[:], + offsets: sparseOffsets[:], +} + +// Sparse block lookup code. + +// valueRange is an entry in a sparse block. +type valueRange struct { + value uint16 + lo, hi byte +} + +type sparseBlocks struct { + values []valueRange + offsets []uint16 +} + +// lookup returns the value from values block n for byte b using binary search. +func (s *sparseBlocks) lookup(n uint32, b byte) uint16 { + lo := s.offsets[n] + hi := s.offsets[n+1] + for lo < hi { + m := lo + (hi-lo)/2 + r := s.values[m] + if r.lo <= b && b <= r.hi { + return r.value + } + if b < r.lo { + hi = m + } else { + lo = m + 1 + } + } + return 0 +} + +// lastRuneForTesting is the last rune used for testing. Everything after this +// is boring. +const lastRuneForTesting = rune(0x1FFFF) diff --git a/vendor/golang.org/x/text/cases/icu.go b/vendor/golang.org/x/text/cases/icu.go new file mode 100644 index 0000000..46530d1 --- /dev/null +++ b/vendor/golang.org/x/text/cases/icu.go @@ -0,0 +1,61 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build icu + +package cases + +// Ideally these functions would be defined in a test file, but go test doesn't +// allow CGO in tests. The build tag should ensure either way that these +// functions will not end up in the package. + +// TODO: Ensure that the correct ICU version is set. + +/* +#cgo LDFLAGS: -licui18n.57 -licuuc.57 +#include <stdlib.h> +#include <unicode/ustring.h> +#include <unicode/utypes.h> +#include <unicode/localpointer.h> +#include <unicode/ucasemap.h> +*/ +import "C" + +import "unsafe" + +func doICU(tag, caser, input string) string { + err := C.UErrorCode(0) + loc := C.CString(tag) + cm := C.ucasemap_open(loc, C.uint32_t(0), &err) + + buf := make([]byte, len(input)*4) + dst := (*C.char)(unsafe.Pointer(&buf[0])) + src := C.CString(input) + + cn := C.int32_t(0) + + switch caser { + case "fold": + cn = C.ucasemap_utf8FoldCase(cm, + dst, C.int32_t(len(buf)), + src, C.int32_t(len(input)), + &err) + case "lower": + cn = C.ucasemap_utf8ToLower(cm, + dst, C.int32_t(len(buf)), + src, C.int32_t(len(input)), + &err) + case "upper": + cn = C.ucasemap_utf8ToUpper(cm, + dst, C.int32_t(len(buf)), + src, C.int32_t(len(input)), + &err) + case "title": + cn = C.ucasemap_utf8ToTitle(cm, + dst, C.int32_t(len(buf)), + src, C.int32_t(len(input)), + &err) + } + return string(buf[:cn]) +} diff --git a/vendor/golang.org/x/text/cases/icu_test.go b/vendor/golang.org/x/text/cases/icu_test.go new file mode 100644 index 0000000..3d07e25 --- /dev/null +++ b/vendor/golang.org/x/text/cases/icu_test.go @@ -0,0 +1,210 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build icu + +package cases + +import ( + "path" + "strings" + "testing" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" + "golang.org/x/text/unicode/norm" +) + +func TestICUConformance(t *testing.T) { + // Build test set. + input := []string{ + "a.a a_a", + "a\u05d0a", + "\u05d0'a", + "a\u03084a", + "a\u0308a", + "a3\u30a3a", + "a\u303aa", + "a_\u303a_a", + "1_a..a", + "1_a.a", + "a..a.", + "a--a-", + "a-a-", + "a\u200ba", + "a\u200b\u200ba", + "a\u00ad\u00ada", // Format + "a\u00ada", + "a''a", // SingleQuote + "a'a", + "a::a", // MidLetter + "a:a", + "a..a", // MidNumLet + "a.a", + "a;;a", // MidNum + "a;a", + "a__a", // ExtendNumlet + "a_a", + "ΟΣ''a", + } + add := func(x interface{}) { + switch v := x.(type) { + case string: + input = append(input, v) + case []string: + for _, s := range v { + input = append(input, s) + } + } + } + for _, tc := range testCases { + add(tc.src) + add(tc.lower) + add(tc.upper) + add(tc.title) + } + for _, tc := range bufferTests { + add(tc.src) + } + for _, tc := range breakTest { + add(strings.Replace(tc, "|", "", -1)) + } + for _, tc := range foldTestCases { + add(tc) + } + + // Compare ICU to Go. + for _, c := range []string{"lower", "upper", "title", "fold"} { + for _, tag := range []string{ + "und", "af", "az", "el", "lt", "nl", "tr", + } { + for _, s := range input { + if exclude(c, tag, s) { + continue + } + testtext.Run(t, path.Join(c, tag, s), func(t *testing.T) { + want := doICU(tag, c, s) + got := doGo(tag, c, s) + if norm.NFC.String(got) != norm.NFC.String(want) { + t.Errorf("\n in %[3]q (%+[3]q)\n got %[1]q (%+[1]q)\n want %[2]q (%+[2]q)", got, want, s) + } + }) + } + } + } +} + +// exclude indicates if a string should be excluded from testing. +func exclude(cm, tag, s string) bool { + list := []struct{ cm, tags, pattern string }{ + // TODO: Go does not handle certain esoteric breaks correctly. This will be + // fixed once we have a real word break iterator. Alternatively, it + // seems like we're not too far off from making it work, so we could + // fix these last steps. But first verify that using a separate word + // breaker does not hurt performance. + {"title", "af nl", "a''a"}, + {"", "", "א'a"}, + + // All the exclusions below seem to be issues with the ICU + // implementation (at version 57) and thus are not marked as TODO. + + // ICU does not handle leading apostrophe for Dutch and + // Afrikaans correctly. See http://unicode.org/cldr/trac/ticket/7078. + {"title", "af nl", "'n"}, + {"title", "af nl", "'N"}, + + // Go terminates the final sigma check after a fixed number of + // ignorables have been found. This ensures that the algorithm can make + // progress in a streaming scenario. + {"lower title", "", "\u039f\u03a3...............................a"}, + // This also applies to upper in Greek. + // NOTE: we could fix the following two cases by adding state to elUpper + // and aztrLower. However, considering a modifier to not belong to the + // preceding letter after the maximum modifiers count is reached is + // consistent with the behavior of unicode/norm. + {"upper", "el", "\u03bf" + strings.Repeat("\u0321", 29) + "\u0313"}, + {"lower", "az tr lt", "I" + strings.Repeat("\u0321", 30) + "\u0307\u0300"}, + {"upper", "lt", "i" + strings.Repeat("\u0321", 30) + "\u0307\u0300"}, + {"lower", "lt", "I" + strings.Repeat("\u0321", 30) + "\u0300"}, + + // ICU title case seems to erroneously removes \u0307 from an upper case + // I unconditionally, instead of only when lowercasing. The ICU + // transform algorithm transforms these cases consistently with our + // implementation. + {"title", "az tr", "\u0307"}, + + // The spec says to remove \u0307 after Soft-Dotted characters. ICU + // transforms conform but ucasemap_utf8ToUpper does not. + {"upper title", "lt", "i\u0307"}, + {"upper title", "lt", "i" + strings.Repeat("\u0321", 29) + "\u0307\u0300"}, + + // Both Unicode and CLDR prescribe an extra explicit dot above after a + // Soft_Dotted character if there are other modifiers. + // ucasemap_utf8ToUpper does not do this; ICU transforms do. + // The issue with ucasemap_utf8ToUpper seems to be that it does not + // consider the modifiers that are part of composition in the evaluation + // of More_Above. For instance, according to the More_Above rule for lt, + // a dotted capital I (U+0130) becomes i\u0307\u0307 (an small i with + // two additional dots). This seems odd, but is correct. ICU is + // definitely not correct as it produces different results for different + // normal forms. For instance, for an İ: + // \u0130 (NFC) -> i\u0307 (incorrect) + // I\u0307 (NFD) -> i\u0307\u0307 (correct) + // We could argue that we should not add a \u0307 if there already is + // one, but this may be hard to get correct and is not conform the + // standard. + {"lower title", "lt", "\u0130"}, + {"lower title", "lt", "\u00cf"}, + + // We are conform ICU ucasemap_utf8ToUpper if we remove support for + // elUpper. However, this is clearly not conform the spec. Moreover, the + // ICU transforms _do_ implement this transform and produces results + // consistent with our implementation. Note that we still prefer to use + // ucasemap_utf8ToUpper instead of transforms as the latter have + // inconsistencies in the word breaking algorithm. + {"upper", "el", "\u0386"}, // GREEK CAPITAL LETTER ALPHA WITH TONOS + {"upper", "el", "\u0389"}, // GREEK CAPITAL LETTER ETA WITH TONOS + {"upper", "el", "\u038A"}, // GREEK CAPITAL LETTER IOTA WITH TONOS + + {"upper", "el", "\u0391"}, // GREEK CAPITAL LETTER ALPHA + {"upper", "el", "\u0397"}, // GREEK CAPITAL LETTER ETA + {"upper", "el", "\u0399"}, // GREEK CAPITAL LETTER IOTA + + {"upper", "el", "\u03AC"}, // GREEK SMALL LETTER ALPHA WITH TONOS + {"upper", "el", "\u03AE"}, // GREEK SMALL LETTER ALPHA WITH ETA + {"upper", "el", "\u03AF"}, // GREEK SMALL LETTER ALPHA WITH IOTA + + {"upper", "el", "\u03B1"}, // GREEK SMALL LETTER ALPHA + {"upper", "el", "\u03B7"}, // GREEK SMALL LETTER ETA + {"upper", "el", "\u03B9"}, // GREEK SMALL LETTER IOTA + } + for _, x := range list { + if x.cm != "" && strings.Index(x.cm, cm) == -1 { + continue + } + if x.tags != "" && strings.Index(x.tags, tag) == -1 { + continue + } + if strings.Index(s, x.pattern) != -1 { + return true + } + } + return false +} + +func doGo(tag, caser, input string) string { + var c Caser + t := language.MustParse(tag) + switch caser { + case "lower": + c = Lower(t) + case "upper": + c = Upper(t) + case "title": + c = Title(t) + case "fold": + c = Fold() + } + return c.String(input) +} diff --git a/vendor/golang.org/x/text/cases/info.go b/vendor/golang.org/x/text/cases/info.go new file mode 100644 index 0000000..3b51f03 --- /dev/null +++ b/vendor/golang.org/x/text/cases/info.go @@ -0,0 +1,82 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cases + +func (c info) cccVal() info { + if c&exceptionBit != 0 { + return info(exceptions[c>>exceptionShift]) & cccMask + } + return c & cccMask +} + +func (c info) cccType() info { + ccc := c.cccVal() + if ccc <= cccZero { + return cccZero + } + return ccc +} + +// TODO: Implement full Unicode breaking algorithm: +// 1) Implement breaking in separate package. +// 2) Use the breaker here. +// 3) Compare table size and performance of using the more generic breaker. +// +// Note that we can extend the current algorithm to be much more accurate. This +// only makes sense, though, if the performance and/or space penalty of using +// the generic breaker is big. Extra data will only be needed for non-cased +// runes, which means there are sufficient bits left in the caseType. +// ICU prohibits breaking in such cases as well. + +// For the purpose of title casing we use an approximation of the Unicode Word +// Breaking algorithm defined in Annex #29: +// http://www.unicode.org/reports/tr29/#Default_Grapheme_Cluster_Table. +// +// For our approximation, we group the Word Break types into the following +// categories, with associated rules: +// +// 1) Letter: +// ALetter, Hebrew_Letter, Numeric, ExtendNumLet, Extend, Format_FE, ZWJ. +// Rule: Never break between consecutive runes of this category. +// +// 2) Mid: +// MidLetter, MidNumLet, Single_Quote. +// (Cf. case-ignorable: MidLetter, MidNumLet, Single_Quote or cat is Mn, +// Me, Cf, Lm or Sk). +// Rule: Don't break between Letter and Mid, but break between two Mids. +// +// 3) Break: +// Any other category: NewLine, MidNum, CR, LF, Double_Quote, Katakana, and +// Other. +// These categories should always result in a break between two cased letters. +// Rule: Always break. +// +// Note 1: the Katakana and MidNum categories can, in esoteric cases, result in +// preventing a break between two cased letters. For now we will ignore this +// (e.g. [ALetter] [ExtendNumLet] [Katakana] [ExtendNumLet] [ALetter] and +// [ALetter] [Numeric] [MidNum] [Numeric] [ALetter].) +// +// Note 2: the rule for Mid is very approximate, but works in most cases. To +// improve, we could store the categories in the trie value and use a FA to +// manage breaks. See TODO comment above. +// +// Note 3: according to the spec, it is possible for the Extend category to +// introduce breaks between other categories grouped in Letter. However, this +// is undesirable for our purposes. ICU prevents breaks in such cases as well. + +// isBreak returns whether this rune should introduce a break. +func (c info) isBreak() bool { + return c.cccVal() == cccBreak +} + +// isLetter returns whether the rune is of break type ALetter, Hebrew_Letter, +// Numeric, ExtendNumLet, or Extend. +func (c info) isLetter() bool { + ccc := c.cccVal() + if ccc == cccZero { + return !c.isCaseIgnorable() + } + return ccc != cccBreak +} diff --git a/vendor/golang.org/x/text/cases/map.go b/vendor/golang.org/x/text/cases/map.go new file mode 100644 index 0000000..4baebaa --- /dev/null +++ b/vendor/golang.org/x/text/cases/map.go @@ -0,0 +1,816 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cases + +// This file contains the definitions of case mappings for all supported +// languages. The rules for the language-specific tailorings were taken and +// modified from the CLDR transform definitions in common/transforms. + +import ( + "strings" + "unicode" + "unicode/utf8" + + "golang.org/x/text/internal" + "golang.org/x/text/language" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" +) + +// A mapFunc takes a context set to the current rune and writes the mapped +// version to the same context. It may advance the context to the next rune. It +// returns whether a checkpoint is possible: whether the pDst bytes written to +// dst so far won't need changing as we see more source bytes. +type mapFunc func(*context) bool + +// A spanFunc takes a context set to the current rune and returns whether this +// rune would be altered when written to the output. It may advance the context +// to the next rune. It returns whether a checkpoint is possible. +type spanFunc func(*context) bool + +// maxIgnorable defines the maximum number of ignorables to consider for +// lookahead operations. +const maxIgnorable = 30 + +// supported lists the language tags for which we have tailorings. +const supported = "und af az el lt nl tr" + +func init() { + tags := []language.Tag{} + for _, s := range strings.Split(supported, " ") { + tags = append(tags, language.MustParse(s)) + } + matcher = internal.NewInheritanceMatcher(tags) + Supported = language.NewCoverage(tags) +} + +var ( + matcher *internal.InheritanceMatcher + + Supported language.Coverage + + // We keep the following lists separate, instead of having a single per- + // language struct, to give the compiler a chance to remove unused code. + + // Some uppercase mappers are stateless, so we can precompute the + // Transformers and save a bit on runtime allocations. + upperFunc = []struct { + upper mapFunc + span spanFunc + }{ + {nil, nil}, // und + {nil, nil}, // af + {aztrUpper(upper), isUpper}, // az + {elUpper, noSpan}, // el + {ltUpper(upper), noSpan}, // lt + {nil, nil}, // nl + {aztrUpper(upper), isUpper}, // tr + } + + undUpper transform.SpanningTransformer = &undUpperCaser{} + undLower transform.SpanningTransformer = &undLowerCaser{} + undLowerIgnoreSigma transform.SpanningTransformer = &undLowerIgnoreSigmaCaser{} + + lowerFunc = []mapFunc{ + nil, // und + nil, // af + aztrLower, // az + nil, // el + ltLower, // lt + nil, // nl + aztrLower, // tr + } + + titleInfos = []struct { + title mapFunc + lower mapFunc + titleSpan spanFunc + rewrite func(*context) + }{ + {title, lower, isTitle, nil}, // und + {title, lower, isTitle, afnlRewrite}, // af + {aztrUpper(title), aztrLower, isTitle, nil}, // az + {title, lower, isTitle, nil}, // el + {ltUpper(title), ltLower, noSpan, nil}, // lt + {nlTitle, lower, nlTitleSpan, afnlRewrite}, // nl + {aztrUpper(title), aztrLower, isTitle, nil}, // tr + } +) + +func makeUpper(t language.Tag, o options) transform.SpanningTransformer { + _, i, _ := matcher.Match(t) + f := upperFunc[i].upper + if f == nil { + return undUpper + } + return &simpleCaser{f: f, span: upperFunc[i].span} +} + +func makeLower(t language.Tag, o options) transform.SpanningTransformer { + _, i, _ := matcher.Match(t) + f := lowerFunc[i] + if f == nil { + if o.ignoreFinalSigma { + return undLowerIgnoreSigma + } + return undLower + } + if o.ignoreFinalSigma { + return &simpleCaser{f: f, span: isLower} + } + return &lowerCaser{ + first: f, + midWord: finalSigma(f), + } +} + +func makeTitle(t language.Tag, o options) transform.SpanningTransformer { + _, i, _ := matcher.Match(t) + x := &titleInfos[i] + lower := x.lower + if o.noLower { + lower = (*context).copy + } else if !o.ignoreFinalSigma { + lower = finalSigma(lower) + } + return &titleCaser{ + title: x.title, + lower: lower, + titleSpan: x.titleSpan, + rewrite: x.rewrite, + } +} + +func noSpan(c *context) bool { + c.err = transform.ErrEndOfSpan + return false +} + +// TODO: consider a similar special case for the fast majority lower case. This +// is a bit more involved so will require some more precise benchmarking to +// justify it. + +type undUpperCaser struct{ transform.NopResetter } + +// undUpperCaser implements the Transformer interface for doing an upper case +// mapping for the root locale (und). It eliminates the need for an allocation +// as it prevents escaping by not using function pointers. +func (t undUpperCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + c := context{dst: dst, src: src, atEOF: atEOF} + for c.next() { + upper(&c) + c.checkpoint() + } + return c.ret() +} + +func (t undUpperCaser) Span(src []byte, atEOF bool) (n int, err error) { + c := context{src: src, atEOF: atEOF} + for c.next() && isUpper(&c) { + c.checkpoint() + } + return c.retSpan() +} + +// undLowerIgnoreSigmaCaser implements the Transformer interface for doing +// a lower case mapping for the root locale (und) ignoring final sigma +// handling. This casing algorithm is used in some performance-critical packages +// like secure/precis and x/net/http/idna, which warrants its special-casing. +type undLowerIgnoreSigmaCaser struct{ transform.NopResetter } + +func (t undLowerIgnoreSigmaCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + c := context{dst: dst, src: src, atEOF: atEOF} + for c.next() && lower(&c) { + c.checkpoint() + } + return c.ret() + +} + +// Span implements a generic lower-casing. This is possible as isLower works +// for all lowercasing variants. All lowercase variants only vary in how they +// transform a non-lowercase letter. They will never change an already lowercase +// letter. In addition, there is no state. +func (t undLowerIgnoreSigmaCaser) Span(src []byte, atEOF bool) (n int, err error) { + c := context{src: src, atEOF: atEOF} + for c.next() && isLower(&c) { + c.checkpoint() + } + return c.retSpan() +} + +type simpleCaser struct { + context + f mapFunc + span spanFunc +} + +// simpleCaser implements the Transformer interface for doing a case operation +// on a rune-by-rune basis. +func (t *simpleCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + c := context{dst: dst, src: src, atEOF: atEOF} + for c.next() && t.f(&c) { + c.checkpoint() + } + return c.ret() +} + +func (t *simpleCaser) Span(src []byte, atEOF bool) (n int, err error) { + c := context{src: src, atEOF: atEOF} + for c.next() && t.span(&c) { + c.checkpoint() + } + return c.retSpan() +} + +// undLowerCaser implements the Transformer interface for doing a lower case +// mapping for the root locale (und) ignoring final sigma handling. This casing +// algorithm is used in some performance-critical packages like secure/precis +// and x/net/http/idna, which warrants its special-casing. +type undLowerCaser struct{ transform.NopResetter } + +func (t undLowerCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + c := context{dst: dst, src: src, atEOF: atEOF} + + for isInterWord := true; c.next(); { + if isInterWord { + if c.info.isCased() { + if !lower(&c) { + break + } + isInterWord = false + } else if !c.copy() { + break + } + } else { + if c.info.isNotCasedAndNotCaseIgnorable() { + if !c.copy() { + break + } + isInterWord = true + } else if !c.hasPrefix("Σ") { + if !lower(&c) { + break + } + } else if !finalSigmaBody(&c) { + break + } + } + c.checkpoint() + } + return c.ret() +} + +func (t undLowerCaser) Span(src []byte, atEOF bool) (n int, err error) { + c := context{src: src, atEOF: atEOF} + for c.next() && isLower(&c) { + c.checkpoint() + } + return c.retSpan() +} + +// lowerCaser implements the Transformer interface. The default Unicode lower +// casing requires different treatment for the first and subsequent characters +// of a word, most notably to handle the Greek final Sigma. +type lowerCaser struct { + undLowerIgnoreSigmaCaser + + context + + first, midWord mapFunc +} + +func (t *lowerCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + t.context = context{dst: dst, src: src, atEOF: atEOF} + c := &t.context + + for isInterWord := true; c.next(); { + if isInterWord { + if c.info.isCased() { + if !t.first(c) { + break + } + isInterWord = false + } else if !c.copy() { + break + } + } else { + if c.info.isNotCasedAndNotCaseIgnorable() { + if !c.copy() { + break + } + isInterWord = true + } else if !t.midWord(c) { + break + } + } + c.checkpoint() + } + return c.ret() +} + +// titleCaser implements the Transformer interface. Title casing algorithms +// distinguish between the first letter of a word and subsequent letters of the +// same word. It uses state to avoid requiring a potentially infinite lookahead. +type titleCaser struct { + context + + // rune mappings used by the actual casing algorithms. + title mapFunc + lower mapFunc + titleSpan spanFunc + + rewrite func(*context) +} + +// Transform implements the standard Unicode title case algorithm as defined in +// Chapter 3 of The Unicode Standard: +// toTitlecase(X): Find the word boundaries in X according to Unicode Standard +// Annex #29, "Unicode Text Segmentation." For each word boundary, find the +// first cased character F following the word boundary. If F exists, map F to +// Titlecase_Mapping(F); then map all characters C between F and the following +// word boundary to Lowercase_Mapping(C). +func (t *titleCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + t.context = context{dst: dst, src: src, atEOF: atEOF, isMidWord: t.isMidWord} + c := &t.context + + if !c.next() { + return c.ret() + } + + for { + p := c.info + if t.rewrite != nil { + t.rewrite(c) + } + + wasMid := p.isMid() + // Break out of this loop on failure to ensure we do not modify the + // state incorrectly. + if p.isCased() { + if !c.isMidWord { + if !t.title(c) { + break + } + c.isMidWord = true + } else if !t.lower(c) { + break + } + } else if !c.copy() { + break + } else if p.isBreak() { + c.isMidWord = false + } + + // As we save the state of the transformer, it is safe to call + // checkpoint after any successful write. + if !(c.isMidWord && wasMid) { + c.checkpoint() + } + + if !c.next() { + break + } + if wasMid && c.info.isMid() { + c.isMidWord = false + } + } + return c.ret() +} + +func (t *titleCaser) Span(src []byte, atEOF bool) (n int, err error) { + t.context = context{src: src, atEOF: atEOF, isMidWord: t.isMidWord} + c := &t.context + + if !c.next() { + return c.retSpan() + } + + for { + p := c.info + if t.rewrite != nil { + t.rewrite(c) + } + + wasMid := p.isMid() + // Break out of this loop on failure to ensure we do not modify the + // state incorrectly. + if p.isCased() { + if !c.isMidWord { + if !t.titleSpan(c) { + break + } + c.isMidWord = true + } else if !isLower(c) { + break + } + } else if p.isBreak() { + c.isMidWord = false + } + // As we save the state of the transformer, it is safe to call + // checkpoint after any successful write. + if !(c.isMidWord && wasMid) { + c.checkpoint() + } + + if !c.next() { + break + } + if wasMid && c.info.isMid() { + c.isMidWord = false + } + } + return c.retSpan() +} + +// finalSigma adds Greek final Sigma handing to another casing function. It +// determines whether a lowercased sigma should be σ or ς, by looking ahead for +// case-ignorables and a cased letters. +func finalSigma(f mapFunc) mapFunc { + return func(c *context) bool { + if !c.hasPrefix("Σ") { + return f(c) + } + return finalSigmaBody(c) + } +} + +func finalSigmaBody(c *context) bool { + // Current rune must be ∑. + + // ::NFD(); + // # 03A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA + // Σ } [:case-ignorable:]* [:cased:] → σ; + // [:cased:] [:case-ignorable:]* { Σ → ς; + // ::Any-Lower; + // ::NFC(); + + p := c.pDst + c.writeString("ς") + + // TODO: we should do this here, but right now this will never have an + // effect as this is called when the prefix is Sigma, whereas Dutch and + // Afrikaans only test for an apostrophe. + // + // if t.rewrite != nil { + // t.rewrite(c) + // } + + // We need to do one more iteration after maxIgnorable, as a cased + // letter is not an ignorable and may modify the result. + wasMid := false + for i := 0; i < maxIgnorable+1; i++ { + if !c.next() { + return false + } + if !c.info.isCaseIgnorable() { + // All Midword runes are also case ignorable, so we are + // guaranteed to have a letter or word break here. As we are + // unreading the run, there is no need to unset c.isMidWord; + // the title caser will handle this. + if c.info.isCased() { + // p+1 is guaranteed to be in bounds: if writing ς was + // successful, p+1 will contain the second byte of ς. If not, + // this function will have returned after c.next returned false. + c.dst[p+1]++ // ς → σ + } + c.unreadRune() + return true + } + // A case ignorable may also introduce a word break, so we may need + // to continue searching even after detecting a break. + isMid := c.info.isMid() + if (wasMid && isMid) || c.info.isBreak() { + c.isMidWord = false + } + wasMid = isMid + c.copy() + } + return true +} + +// finalSigmaSpan would be the same as isLower. + +// elUpper implements Greek upper casing, which entails removing a predefined +// set of non-blocked modifiers. Note that these accents should not be removed +// for title casing! +// Example: "Οδός" -> "ΟΔΟΣ". +func elUpper(c *context) bool { + // From CLDR: + // [:Greek:] [^[:ccc=Not_Reordered:][:ccc=Above:]]*? { [\u0313\u0314\u0301\u0300\u0306\u0342\u0308\u0304] → ; + // [:Greek:] [^[:ccc=Not_Reordered:][:ccc=Iota_Subscript:]]*? { \u0345 → ; + + r, _ := utf8.DecodeRune(c.src[c.pSrc:]) + oldPDst := c.pDst + if !upper(c) { + return false + } + if !unicode.Is(unicode.Greek, r) { + return true + } + i := 0 + // Take the properties of the uppercased rune that is already written to the + // destination. This saves us the trouble of having to uppercase the + // decomposed rune again. + if b := norm.NFD.Properties(c.dst[oldPDst:]).Decomposition(); b != nil { + // Restore the destination position and process the decomposed rune. + r, sz := utf8.DecodeRune(b) + if r <= 0xFF { // See A.6.1 + return true + } + c.pDst = oldPDst + // Insert the first rune and ignore the modifiers. See A.6.2. + c.writeBytes(b[:sz]) + i = len(b[sz:]) / 2 // Greek modifiers are always of length 2. + } + + for ; i < maxIgnorable && c.next(); i++ { + switch r, _ := utf8.DecodeRune(c.src[c.pSrc:]); r { + // Above and Iota Subscript + case 0x0300, // U+0300 COMBINING GRAVE ACCENT + 0x0301, // U+0301 COMBINING ACUTE ACCENT + 0x0304, // U+0304 COMBINING MACRON + 0x0306, // U+0306 COMBINING BREVE + 0x0308, // U+0308 COMBINING DIAERESIS + 0x0313, // U+0313 COMBINING COMMA ABOVE + 0x0314, // U+0314 COMBINING REVERSED COMMA ABOVE + 0x0342, // U+0342 COMBINING GREEK PERISPOMENI + 0x0345: // U+0345 COMBINING GREEK YPOGEGRAMMENI + // No-op. Gobble the modifier. + + default: + switch v, _ := trie.lookup(c.src[c.pSrc:]); info(v).cccType() { + case cccZero: + c.unreadRune() + return true + + // We don't need to test for IotaSubscript as the only rune that + // qualifies (U+0345) was already excluded in the switch statement + // above. See A.4. + + case cccAbove: + return c.copy() + default: + // Some other modifier. We're still allowed to gobble Greek + // modifiers after this. + c.copy() + } + } + } + return i == maxIgnorable +} + +// TODO: implement elUpperSpan (low-priority: complex and infrequent). + +func ltLower(c *context) bool { + // From CLDR: + // # Introduce an explicit dot above when lowercasing capital I's and J's + // # whenever there are more accents above. + // # (of the accents used in Lithuanian: grave, acute, tilde above, and ogonek) + // # 0049; 0069 0307; 0049; 0049; lt More_Above; # LATIN CAPITAL LETTER I + // # 004A; 006A 0307; 004A; 004A; lt More_Above; # LATIN CAPITAL LETTER J + // # 012E; 012F 0307; 012E; 012E; lt More_Above; # LATIN CAPITAL LETTER I WITH OGONEK + // # 00CC; 0069 0307 0300; 00CC; 00CC; lt; # LATIN CAPITAL LETTER I WITH GRAVE + // # 00CD; 0069 0307 0301; 00CD; 00CD; lt; # LATIN CAPITAL LETTER I WITH ACUTE + // # 0128; 0069 0307 0303; 0128; 0128; lt; # LATIN CAPITAL LETTER I WITH TILDE + // ::NFD(); + // I } [^[:ccc=Not_Reordered:][:ccc=Above:]]* [:ccc=Above:] → i \u0307; + // J } [^[:ccc=Not_Reordered:][:ccc=Above:]]* [:ccc=Above:] → j \u0307; + // I \u0328 (Į) } [^[:ccc=Not_Reordered:][:ccc=Above:]]* [:ccc=Above:] → i \u0328 \u0307; + // I \u0300 (Ì) → i \u0307 \u0300; + // I \u0301 (Í) → i \u0307 \u0301; + // I \u0303 (Ĩ) → i \u0307 \u0303; + // ::Any-Lower(); + // ::NFC(); + + i := 0 + if r := c.src[c.pSrc]; r < utf8.RuneSelf { + lower(c) + if r != 'I' && r != 'J' { + return true + } + } else { + p := norm.NFD.Properties(c.src[c.pSrc:]) + if d := p.Decomposition(); len(d) >= 3 && (d[0] == 'I' || d[0] == 'J') { + // UTF-8 optimization: the decomposition will only have an above + // modifier if the last rune of the decomposition is in [U+300-U+311]. + // In all other cases, a decomposition starting with I is always + // an I followed by modifiers that are not cased themselves. See A.2. + if d[1] == 0xCC && d[2] <= 0x91 { // A.2.4. + if !c.writeBytes(d[:1]) { + return false + } + c.dst[c.pDst-1] += 'a' - 'A' // lower + + // Assumption: modifier never changes on lowercase. See A.1. + // Assumption: all modifiers added have CCC = Above. See A.2.3. + return c.writeString("\u0307") && c.writeBytes(d[1:]) + } + // In all other cases the additional modifiers will have a CCC + // that is less than 230 (Above). We will insert the U+0307, if + // needed, after these modifiers so that a string in FCD form + // will remain so. See A.2.2. + lower(c) + i = 1 + } else { + return lower(c) + } + } + + for ; i < maxIgnorable && c.next(); i++ { + switch c.info.cccType() { + case cccZero: + c.unreadRune() + return true + case cccAbove: + return c.writeString("\u0307") && c.copy() // See A.1. + default: + c.copy() // See A.1. + } + } + return i == maxIgnorable +} + +// ltLowerSpan would be the same as isLower. + +func ltUpper(f mapFunc) mapFunc { + return func(c *context) bool { + // Unicode: + // 0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE + // + // From CLDR: + // # Remove \u0307 following soft-dotteds (i, j, and the like), with possible + // # intervening non-230 marks. + // ::NFD(); + // [:Soft_Dotted:] [^[:ccc=Not_Reordered:][:ccc=Above:]]* { \u0307 → ; + // ::Any-Upper(); + // ::NFC(); + + // TODO: See A.5. A soft-dotted rune never has an exception. This would + // allow us to overload the exception bit and encode this property in + // info. Need to measure performance impact of this. + r, _ := utf8.DecodeRune(c.src[c.pSrc:]) + oldPDst := c.pDst + if !f(c) { + return false + } + if !unicode.Is(unicode.Soft_Dotted, r) { + return true + } + + // We don't need to do an NFD normalization, as a soft-dotted rune never + // contains U+0307. See A.3. + + i := 0 + for ; i < maxIgnorable && c.next(); i++ { + switch c.info.cccType() { + case cccZero: + c.unreadRune() + return true + case cccAbove: + if c.hasPrefix("\u0307") { + // We don't do a full NFC, but rather combine runes for + // some of the common cases. (Returning NFC or + // preserving normal form is neither a requirement nor + // a possibility anyway). + if !c.next() { + return false + } + if c.dst[oldPDst] == 'I' && c.pDst == oldPDst+1 && c.src[c.pSrc] == 0xcc { + s := "" + switch c.src[c.pSrc+1] { + case 0x80: // U+0300 COMBINING GRAVE ACCENT + s = "\u00cc" // U+00CC LATIN CAPITAL LETTER I WITH GRAVE + case 0x81: // U+0301 COMBINING ACUTE ACCENT + s = "\u00cd" // U+00CD LATIN CAPITAL LETTER I WITH ACUTE + case 0x83: // U+0303 COMBINING TILDE + s = "\u0128" // U+0128 LATIN CAPITAL LETTER I WITH TILDE + case 0x88: // U+0308 COMBINING DIAERESIS + s = "\u00cf" // U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS + default: + } + if s != "" { + c.pDst = oldPDst + return c.writeString(s) + } + } + } + return c.copy() + default: + c.copy() + } + } + return i == maxIgnorable + } +} + +// TODO: implement ltUpperSpan (low priority: complex and infrequent). + +func aztrUpper(f mapFunc) mapFunc { + return func(c *context) bool { + // i→İ; + if c.src[c.pSrc] == 'i' { + return c.writeString("İ") + } + return f(c) + } +} + +func aztrLower(c *context) (done bool) { + // From CLDR: + // # I and i-dotless; I-dot and i are case pairs in Turkish and Azeri + // # 0130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE + // İ→i; + // # When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i. + // # This matches the behavior of the canonically equivalent I-dot_above + // # 0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE + // # When lowercasing, unless an I is before a dot_above, it turns into a dotless i. + // # 0049; 0131; 0049; 0049; tr Not_Before_Dot; # LATIN CAPITAL LETTER I + // I([^[:ccc=Not_Reordered:][:ccc=Above:]]*)\u0307 → i$1 ; + // I→ı ; + // ::Any-Lower(); + if c.hasPrefix("\u0130") { // İ + return c.writeString("i") + } + if c.src[c.pSrc] != 'I' { + return lower(c) + } + + // We ignore the lower-case I for now, but insert it later when we know + // which form we need. + start := c.pSrc + c.sz + + i := 0 +Loop: + // We check for up to n ignorables before \u0307. As \u0307 is an + // ignorable as well, n is maxIgnorable-1. + for ; i < maxIgnorable && c.next(); i++ { + switch c.info.cccType() { + case cccAbove: + if c.hasPrefix("\u0307") { + return c.writeString("i") && c.writeBytes(c.src[start:c.pSrc]) // ignore U+0307 + } + done = true + break Loop + case cccZero: + c.unreadRune() + done = true + break Loop + default: + // We'll write this rune after we know which starter to use. + } + } + if i == maxIgnorable { + done = true + } + return c.writeString("ı") && c.writeBytes(c.src[start:c.pSrc+c.sz]) && done +} + +// aztrLowerSpan would be the same as isLower. + +func nlTitle(c *context) bool { + // From CLDR: + // # Special titlecasing for Dutch initial "ij". + // ::Any-Title(); + // # Fix up Ij at the beginning of a "word" (per Any-Title, notUAX #29) + // [:^WB=ALetter:] [:WB=Extend:]* [[:WB=MidLetter:][:WB=MidNumLet:]]? { Ij } → IJ ; + if c.src[c.pSrc] != 'I' && c.src[c.pSrc] != 'i' { + return title(c) + } + + if !c.writeString("I") || !c.next() { + return false + } + if c.src[c.pSrc] == 'j' || c.src[c.pSrc] == 'J' { + return c.writeString("J") + } + c.unreadRune() + return true +} + +func nlTitleSpan(c *context) bool { + // From CLDR: + // # Special titlecasing for Dutch initial "ij". + // ::Any-Title(); + // # Fix up Ij at the beginning of a "word" (per Any-Title, notUAX #29) + // [:^WB=ALetter:] [:WB=Extend:]* [[:WB=MidLetter:][:WB=MidNumLet:]]? { Ij } → IJ ; + if c.src[c.pSrc] != 'I' { + return isTitle(c) + } + if !c.next() || c.src[c.pSrc] == 'j' { + return false + } + if c.src[c.pSrc] != 'J' { + c.unreadRune() + } + return true +} + +// Not part of CLDR, but see http://unicode.org/cldr/trac/ticket/7078. +func afnlRewrite(c *context) { + if c.hasPrefix("'") || c.hasPrefix("’") { + c.isMidWord = true + } +} diff --git a/vendor/golang.org/x/text/cases/map_test.go b/vendor/golang.org/x/text/cases/map_test.go new file mode 100644 index 0000000..8ac3911 --- /dev/null +++ b/vendor/golang.org/x/text/cases/map_test.go @@ -0,0 +1,950 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cases + +import ( + "bytes" + "fmt" + "path" + "strings" + "testing" + "unicode/utf8" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" +) + +type testCase struct { + lang string + src interface{} // string, []string, or nil to skip test + title interface{} // string, []string, or nil to skip test + lower interface{} // string, []string, or nil to skip test + upper interface{} // string, []string, or nil to skip test + opts options +} + +var testCases = []testCase{ + 0: { + lang: "und", + src: "abc aBc ABC abC İsıI ΕΣΆΣ", + title: "Abc Abc Abc Abc İsıi Εσάσ", + lower: "abc abc abc abc i\u0307sıi εσάσ", + upper: "ABC ABC ABC ABC İSII ΕΣΆΣ", + opts: getOpts(HandleFinalSigma(false)), + }, + + 1: { + lang: "und", + src: "abc aBc ABC abC İsıI ΕΣΆΣ Σ _Σ -Σ", + title: "Abc Abc Abc Abc İsıi Εσάς Σ _Σ -Σ", + lower: "abc abc abc abc i\u0307sıi εσάς σ _σ -σ", + upper: "ABC ABC ABC ABC İSII ΕΣΆΣ Σ _Σ -Σ", + opts: getOpts(HandleFinalSigma(true)), + }, + + 2: { // Title cased runes. + lang: supported, + src: "DžA", + title: "Dža", + lower: "dža", + upper: "DŽA", + }, + + 3: { + // Title breaking. + lang: supported, + src: []string{ + "FOO CASE TEST", + "DON'T DO THiS", + "χωΡΊΣ χωΡΊΣ^a χωΡΊΣ:a χωΡΊΣ:^a χωΡΊΣ^ όμΩΣ Σ", + "with-hyphens", + "49ers 49ers", + `"capitalize a^a -hyphen 0X _u a_u:a`, + "MidNumLet a.b\u2018c\u2019d\u2024e\ufe52f\uff07f\uff0eg", + "MidNum a,b;c\u037ed\u0589e\u060cf\u2044g\ufe50h", + "\u0345 x\u3031x x\u05d0x \u05d0x a'.a a.a a4,a", + }, + title: []string{ + "Foo Case Test", + "Don't Do This", + "Χωρίς Χωρίσ^A Χωρίσ:a Χωρίσ:^A Χωρίς^ Όμως Σ", + "With-Hyphens", + // Note that 49Ers is correct according to the spec. + // TODO: provide some option to the user to treat different + // characters as cased. + "49Ers 49Ers", + `"Capitalize A^A -Hyphen 0X _U A_u:a`, + "Midnumlet A.b\u2018c\u2019d\u2024e\ufe52f\uff07f\uff0eg", + "Midnum A,B;C\u037eD\u0589E\u060cF\u2044G\ufe50H", + "\u0399 X\u3031X X\u05d0x \u05d0X A'.A A.a A4,A", + }, + }, + + // TODO: These are known deviations from the options{} Unicode Word Breaking + // Algorithm. + // { + // "und", + // "x_\u3031_x a4,4a", + // "X_\u3031_x A4,4a", // Currently is "X_\U3031_X A4,4A". + // "x_\u3031_x a4,4a", + // "X_\u3031_X A4,4A", + // options{}, + // }, + + 4: { + // Tests title options + lang: "und", + src: "abc aBc ABC abC İsıI o'Brien", + title: "Abc ABc ABC AbC İsıI O'Brien", + opts: getOpts(NoLower), + }, + + 5: { + lang: "el", + src: "aBc ΟΔΌΣ Οδός Σο ΣΟ Σ oΣ ΟΣ σ ἕξ \u03ac", + title: "Abc Οδός Οδός Σο Σο Σ Oς Ος Σ Ἕξ \u0386", + lower: "abc οδός οδός σο σο σ oς ος σ ἕξ \u03ac", + upper: "ABC ΟΔΟΣ ΟΔΟΣ ΣΟ ΣΟ Σ OΣ ΟΣ Σ ΕΞ \u0391", // Uppercase removes accents + }, + + 6: { + lang: "tr az", + src: "Isiİ İsıI I\u0307sIiİ İsıI\u0307 I\u0300\u0307", + title: "Isii İsıı I\u0307sıii İsıi I\u0300\u0307", + lower: "ısii isıı isıii isıi \u0131\u0300\u0307", + upper: "ISİİ İSII I\u0307SIİİ İSII\u0307 I\u0300\u0307", + }, + + 7: { + lang: "lt", + src: "I Ï J J̈ Į Į̈ Ì Í Ĩ xi̇̈ xj̇̈ xį̇̈ xi̇̀ xi̇́ xi̇̃ XI XÏ XJ XJ̈ XĮ XĮ̈ XI̟̤", + title: "I Ï J J̈ Į Į̈ Ì Í Ĩ Xi̇̈ Xj̇̈ Xį̇̈ Xi̇̀ Xi̇́ Xi̇̃ Xi Xi̇̈ Xj Xj̇̈ Xį Xį̇̈ Xi̟̤", + lower: "i i̇̈ j j̇̈ į į̇̈ i̇̀ i̇́ i̇̃ xi̇̈ xj̇̈ xį̇̈ xi̇̀ xi̇́ xi̇̃ xi xi̇̈ xj xj̇̈ xį xį̇̈ xi̟̤", + upper: "I Ï J J̈ Į Į̈ Ì Í Ĩ XÏ XJ̈ XĮ̈ XÌ XÍ XĨ XI XÏ XJ XJ̈ XĮ XĮ̈ XI̟̤", + }, + + 8: { + lang: "lt", + src: "\u012e\u0300 \u00cc i\u0307\u0300 i\u0307\u0301 i\u0307\u0303 i\u0307\u0308 i\u0300\u0307", + title: "\u012e\u0300 \u00cc \u00cc \u00cd \u0128 \u00cf I\u0300\u0307", + lower: "\u012f\u0307\u0300 i\u0307\u0300 i\u0307\u0300 i\u0307\u0301 i\u0307\u0303 i\u0307\u0308 i\u0300\u0307", + upper: "\u012e\u0300 \u00cc \u00cc \u00cd \u0128 \u00cf I\u0300\u0307", + }, + + 9: { + lang: "nl", + src: "ijs IJs Ij Ijs İJ İJs aa aA 'ns 'S", + title: "IJs IJs IJ IJs İj İjs Aa Aa 'ns 's", + }, + + // Note: this specification is not currently part of CLDR. The same holds + // for the leading apostrophe handling for Dutch. + // See http://unicode.org/cldr/trac/ticket/7078. + 10: { + lang: "af", + src: "wag 'n bietjie", + title: "Wag 'n Bietjie", + lower: "wag 'n bietjie", + upper: "WAG 'N BIETJIE", + }, +} + +func TestCaseMappings(t *testing.T) { + for i, tt := range testCases { + src, ok := tt.src.([]string) + if !ok { + src = strings.Split(tt.src.(string), " ") + } + + for _, lang := range strings.Split(tt.lang, " ") { + tag := language.MustParse(lang) + testEntry := func(name string, mk func(language.Tag, options) transform.SpanningTransformer, gold interface{}) { + c := Caser{mk(tag, tt.opts)} + if gold != nil { + wants, ok := gold.([]string) + if !ok { + wants = strings.Split(gold.(string), " ") + } + for j, want := range wants { + if got := c.String(src[j]); got != want { + t.Errorf("%d:%s:\n%s.String(%+q):\ngot %+q;\nwant %+q", i, lang, name, src[j], got, want) + } + } + } + dst := make([]byte, 256) // big enough to hold any result + src := []byte(strings.Join(src, " ")) + v := testtext.AllocsPerRun(20, func() { + c.Transform(dst, src, true) + }) + if v > 1.1 { + t.Errorf("%d:%s:\n%s: number of allocs was %f; want 0", i, lang, name, v) + } + } + testEntry("Upper", makeUpper, tt.upper) + testEntry("Lower", makeLower, tt.lower) + testEntry("Title", makeTitle, tt.title) + } + } +} + +// TestAlloc tests that some mapping methods should not cause any allocation. +func TestAlloc(t *testing.T) { + dst := make([]byte, 256) // big enough to hold any result + src := []byte(txtNonASCII) + + for i, f := range []func() Caser{ + func() Caser { return Upper(language.Und) }, + func() Caser { return Lower(language.Und) }, + func() Caser { return Lower(language.Und, HandleFinalSigma(false)) }, + // TODO: use a shared copy for these casers as well, in order of + // importance, starting with the most important: + // func() Caser { return Title(language.Und) }, + // func() Caser { return Title(language.Und, HandleFinalSigma(false)) }, + } { + testtext.Run(t, "", func(t *testing.T) { + var c Caser + v := testtext.AllocsPerRun(10, func() { + c = f() + }) + if v > 0 { + // TODO: Right now only Upper has 1 allocation. Special-case Lower + // and Title as well to have less allocations for the root locale. + t.Errorf("%d:init: number of allocs was %f; want 0", i, v) + } + v = testtext.AllocsPerRun(2, func() { + c.Transform(dst, src, true) + }) + if v > 0 { + t.Errorf("%d:transform: number of allocs was %f; want 0", i, v) + } + }) + } +} + +func testHandover(t *testing.T, c Caser, src string) { + want := c.String(src) + // Find the common prefix. + pSrc := 0 + for ; pSrc < len(src) && pSrc < len(want) && want[pSrc] == src[pSrc]; pSrc++ { + } + + // Test handover for each substring of the prefix. + for i := 0; i < pSrc; i++ { + testtext.Run(t, fmt.Sprint("interleave/", i), func(t *testing.T) { + dst := make([]byte, 4*len(src)) + c.Reset() + nSpan, _ := c.Span([]byte(src[:i]), false) + copy(dst, src[:nSpan]) + nTransform, _, _ := c.Transform(dst[nSpan:], []byte(src[nSpan:]), true) + got := string(dst[:nSpan+nTransform]) + if got != want { + t.Errorf("full string: got %q; want %q", got, want) + } + }) + } +} + +func TestHandover(t *testing.T) { + testCases := []struct { + desc string + t Caser + first, second string + }{{ + "title/nosigma/single midword", + Title(language.Und, HandleFinalSigma(false)), + "A.", "a", + }, { + "title/nosigma/single midword", + Title(language.Und, HandleFinalSigma(false)), + "A", ".a", + }, { + "title/nosigma/double midword", + Title(language.Und, HandleFinalSigma(false)), + "A..", "a", + }, { + "title/nosigma/double midword", + Title(language.Und, HandleFinalSigma(false)), + "A.", ".a", + }, { + "title/nosigma/double midword", + Title(language.Und, HandleFinalSigma(false)), + "A", "..a", + }, { + "title/sigma/single midword", + Title(language.Und), + "ΟΣ.", "a", + }, { + "title/sigma/single midword", + Title(language.Und), + "ΟΣ", ".a", + }, { + "title/sigma/double midword", + Title(language.Und), + "ΟΣ..", "a", + }, { + "title/sigma/double midword", + Title(language.Und), + "ΟΣ.", ".a", + }, { + "title/sigma/double midword", + Title(language.Und), + "ΟΣ", "..a", + }, { + "title/af/leading apostrophe", + Title(language.Afrikaans), + "'", "n bietje", + }} + for _, tc := range testCases { + testtext.Run(t, tc.desc, func(t *testing.T) { + src := tc.first + tc.second + want := tc.t.String(src) + tc.t.Reset() + n, _ := tc.t.Span([]byte(tc.first), false) + + dst := make([]byte, len(want)) + copy(dst, tc.first[:n]) + + nDst, _, _ := tc.t.Transform(dst[n:], []byte(src[n:]), true) + got := string(dst[:n+nDst]) + if got != want { + t.Errorf("got %q; want %q", got, want) + } + }) + } +} + +// minBufSize is the size of the buffer by which the casing operation in +// this package are guaranteed to make progress. +const minBufSize = norm.MaxSegmentSize + +type bufferTest struct { + desc, src, want string + firstErr error + dstSize, srcSize int + t transform.SpanningTransformer +} + +var bufferTests []bufferTest + +func init() { + bufferTests = []bufferTest{{ + desc: "und/upper/short dst", + src: "abcdefg", + want: "ABCDEFG", + firstErr: transform.ErrShortDst, + dstSize: 3, + srcSize: minBufSize, + t: Upper(language.Und), + }, { + desc: "und/upper/short src", + src: "123é56", + want: "123É56", + firstErr: transform.ErrShortSrc, + dstSize: 4, + srcSize: 4, + t: Upper(language.Und), + }, { + desc: "und/upper/no error on short", + src: "12", + want: "12", + firstErr: nil, + dstSize: 1, + srcSize: 1, + t: Upper(language.Und), + }, { + desc: "und/lower/short dst", + src: "ABCDEFG", + want: "abcdefg", + firstErr: transform.ErrShortDst, + dstSize: 3, + srcSize: minBufSize, + t: Lower(language.Und), + }, { + desc: "und/lower/short src", + src: "123É56", + want: "123é56", + firstErr: transform.ErrShortSrc, + dstSize: 4, + srcSize: 4, + t: Lower(language.Und), + }, { + desc: "und/lower/no error on short", + src: "12", + want: "12", + firstErr: nil, + dstSize: 1, + srcSize: 1, + t: Lower(language.Und), + }, { + desc: "und/lower/simple (no final sigma)", + src: "ΟΣ ΟΣΣ", + want: "οσ οσσ", + dstSize: minBufSize, + srcSize: minBufSize, + t: Lower(language.Und, HandleFinalSigma(false)), + }, { + desc: "und/title/simple (no final sigma)", + src: "ΟΣ ΟΣΣ", + want: "Οσ Οσσ", + dstSize: minBufSize, + srcSize: minBufSize, + t: Title(language.Und, HandleFinalSigma(false)), + }, { + desc: "und/title/final sigma: no error", + src: "ΟΣ", + want: "Ος", + dstSize: minBufSize, + srcSize: minBufSize, + t: Title(language.Und), + }, { + desc: "und/title/final sigma: short source", + src: "ΟΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣ", + want: "Οσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσς", + firstErr: transform.ErrShortSrc, + dstSize: minBufSize, + srcSize: 10, + t: Title(language.Und), + }, { + desc: "und/title/final sigma: short destination 1", + src: "ΟΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣ", + want: "Οσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσς", + firstErr: transform.ErrShortDst, + dstSize: 10, + srcSize: minBufSize, + t: Title(language.Und), + }, { + desc: "und/title/final sigma: short destination 2", + src: "ΟΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣ", + want: "Οσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσς", + firstErr: transform.ErrShortDst, + dstSize: 9, + srcSize: minBufSize, + t: Title(language.Und), + }, { + desc: "und/title/final sigma: short destination 3", + src: "ΟΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣ", + want: "Οσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσς", + firstErr: transform.ErrShortDst, + dstSize: 8, + srcSize: minBufSize, + t: Title(language.Und), + }, { + desc: "und/title/clipped UTF-8 rune", + src: "σσσσσσσσσσσ", + want: "Σσσσσσσσσσσ", + firstErr: transform.ErrShortSrc, + dstSize: minBufSize, + srcSize: 5, + t: Title(language.Und), + }, { + desc: "und/title/clipped UTF-8 rune atEOF", + src: "σσσ" + string([]byte{0xCF}), + want: "Σσσ" + string([]byte{0xCF}), + dstSize: minBufSize, + srcSize: minBufSize, + t: Title(language.Und), + }, { + // Note: the choice to change the final sigma at the end in case of + // too many case ignorables is arbitrary. The main reason for this + // choice is that it results in simpler code. + desc: "und/title/final sigma: max ignorables", + src: "ΟΣ" + strings.Repeat(".", maxIgnorable) + "a", + want: "Οσ" + strings.Repeat(".", maxIgnorable) + "A", + dstSize: minBufSize, + srcSize: minBufSize, + t: Title(language.Und), + }, { + // Note: the choice to change the final sigma at the end in case of + // too many case ignorables is arbitrary. The main reason for this + // choice is that it results in simpler code. + desc: "und/title/long string", + src: "AA" + strings.Repeat(".", maxIgnorable+1) + "a", + want: "Aa" + strings.Repeat(".", maxIgnorable+1) + "A", + dstSize: minBufSize, + srcSize: len("AA" + strings.Repeat(".", maxIgnorable+1)), + t: Title(language.Und), + }, { + // Note: the choice to change the final sigma at the end in case of + // too many case ignorables is arbitrary. The main reason for this + // choice is that it results in simpler code. + desc: "und/title/final sigma: too many ignorables", + src: "ΟΣ" + strings.Repeat(".", maxIgnorable+1) + "a", + want: "Ος" + strings.Repeat(".", maxIgnorable+1) + "A", + dstSize: minBufSize, + srcSize: len("ΟΣ" + strings.Repeat(".", maxIgnorable+1)), + t: Title(language.Und), + }, { + desc: "und/title/final sigma: apostrophe", + src: "ΟΣ''a", + want: "Οσ''A", + dstSize: minBufSize, + srcSize: minBufSize, + t: Title(language.Und), + }, { + desc: "el/upper/max ignorables", + src: "ο" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0313", + want: "Ο" + strings.Repeat("\u0321", maxIgnorable-1), + dstSize: minBufSize, + srcSize: minBufSize, + t: Upper(language.Greek), + }, { + desc: "el/upper/too many ignorables", + src: "ο" + strings.Repeat("\u0321", maxIgnorable) + "\u0313", + want: "Ο" + strings.Repeat("\u0321", maxIgnorable) + "\u0313", + dstSize: minBufSize, + srcSize: len("ο" + strings.Repeat("\u0321", maxIgnorable)), + t: Upper(language.Greek), + }, { + desc: "el/upper/short dst", + src: "123ο", + want: "123Ο", + firstErr: transform.ErrShortDst, + dstSize: 3, + srcSize: minBufSize, + t: Upper(language.Greek), + }, { + desc: "lt/lower/max ignorables", + src: "I" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0300", + want: "i" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0307\u0300", + dstSize: minBufSize, + srcSize: minBufSize, + t: Lower(language.Lithuanian), + }, { + desc: "lt/lower/too many ignorables", + src: "I" + strings.Repeat("\u0321", maxIgnorable) + "\u0300", + want: "i" + strings.Repeat("\u0321", maxIgnorable) + "\u0300", + dstSize: minBufSize, + srcSize: len("I" + strings.Repeat("\u0321", maxIgnorable)), + t: Lower(language.Lithuanian), + }, { + desc: "lt/lower/decomposition with short dst buffer 1", + src: "aaaaa\u00cc", // U+00CC LATIN CAPITAL LETTER I GRAVE + firstErr: transform.ErrShortDst, + want: "aaaaai\u0307\u0300", + dstSize: 5, + srcSize: minBufSize, + t: Lower(language.Lithuanian), + }, { + desc: "lt/lower/decomposition with short dst buffer 2", + src: "aaaa\u00cc", // U+00CC LATIN CAPITAL LETTER I GRAVE + firstErr: transform.ErrShortDst, + want: "aaaai\u0307\u0300", + dstSize: 5, + srcSize: minBufSize, + t: Lower(language.Lithuanian), + }, { + desc: "lt/upper/max ignorables", + src: "i" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0307\u0300", + want: "I" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0300", + dstSize: minBufSize, + srcSize: minBufSize, + t: Upper(language.Lithuanian), + }, { + desc: "lt/upper/too many ignorables", + src: "i" + strings.Repeat("\u0321", maxIgnorable) + "\u0307\u0300", + want: "I" + strings.Repeat("\u0321", maxIgnorable) + "\u0307\u0300", + dstSize: minBufSize, + srcSize: len("i" + strings.Repeat("\u0321", maxIgnorable)), + t: Upper(language.Lithuanian), + }, { + desc: "lt/upper/short dst", + src: "12i\u0307\u0300", + want: "12\u00cc", + firstErr: transform.ErrShortDst, + dstSize: 3, + srcSize: minBufSize, + t: Upper(language.Lithuanian), + }, { + desc: "aztr/lower/max ignorables", + src: "I" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0307\u0300", + want: "i" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0300", + dstSize: minBufSize, + srcSize: minBufSize, + t: Lower(language.Turkish), + }, { + desc: "aztr/lower/too many ignorables", + src: "I" + strings.Repeat("\u0321", maxIgnorable) + "\u0307\u0300", + want: "\u0131" + strings.Repeat("\u0321", maxIgnorable) + "\u0307\u0300", + dstSize: minBufSize, + srcSize: len("I" + strings.Repeat("\u0321", maxIgnorable)), + t: Lower(language.Turkish), + }, { + desc: "nl/title/pre-IJ cutoff", + src: " ij", + want: " IJ", + firstErr: transform.ErrShortDst, + dstSize: 2, + srcSize: minBufSize, + t: Title(language.Dutch), + }, { + desc: "nl/title/mid-IJ cutoff", + src: " ij", + want: " IJ", + firstErr: transform.ErrShortDst, + dstSize: 3, + srcSize: minBufSize, + t: Title(language.Dutch), + }, { + desc: "af/title/apostrophe", + src: "'n bietje", + want: "'n Bietje", + firstErr: transform.ErrShortDst, + dstSize: 3, + srcSize: minBufSize, + t: Title(language.Afrikaans), + }} +} + +func TestShortBuffersAndOverflow(t *testing.T) { + for i, tt := range bufferTests { + testtext.Run(t, tt.desc, func(t *testing.T) { + buf := make([]byte, tt.dstSize) + got := []byte{} + var nSrc, nDst int + var err error + for p := 0; p < len(tt.src); p += nSrc { + q := p + tt.srcSize + if q > len(tt.src) { + q = len(tt.src) + } + nDst, nSrc, err = tt.t.Transform(buf, []byte(tt.src[p:q]), q == len(tt.src)) + got = append(got, buf[:nDst]...) + + if p == 0 && err != tt.firstErr { + t.Errorf("%d:%s:\n error was %v; want %v", i, tt.desc, err, tt.firstErr) + break + } + } + if string(got) != tt.want { + t.Errorf("%d:%s:\ngot %+q;\nwant %+q", i, tt.desc, got, tt.want) + } + testHandover(t, Caser{tt.t}, tt.src) + }) + } +} + +func TestSpan(t *testing.T) { + for _, tt := range []struct { + desc string + src string + want string + atEOF bool + err error + t Caser + }{{ + desc: "und/upper/basic", + src: "abcdefg", + want: "", + atEOF: true, + err: transform.ErrEndOfSpan, + t: Upper(language.Und), + }, { + desc: "und/upper/short src", + src: "123É"[:4], + want: "123", + atEOF: false, + err: transform.ErrShortSrc, + t: Upper(language.Und), + }, { + desc: "und/upper/no error on short", + src: "12", + want: "12", + atEOF: false, + t: Upper(language.Und), + }, { + desc: "und/lower/basic", + src: "ABCDEFG", + want: "", + atEOF: true, + err: transform.ErrEndOfSpan, + t: Lower(language.Und), + }, { + desc: "und/lower/short src num", + src: "123é"[:4], + want: "123", + atEOF: false, + err: transform.ErrShortSrc, + t: Lower(language.Und), + }, { + desc: "und/lower/short src greek", + src: "αβγé"[:7], + want: "αβγ", + atEOF: false, + err: transform.ErrShortSrc, + t: Lower(language.Und), + }, { + desc: "und/lower/no error on short", + src: "12", + want: "12", + atEOF: false, + t: Lower(language.Und), + }, { + desc: "und/lower/simple (no final sigma)", + src: "ος οσσ", + want: "οσ οσσ", + atEOF: true, + t: Lower(language.Und, HandleFinalSigma(false)), + }, { + desc: "und/title/simple (no final sigma)", + src: "Οσ Οσσ", + want: "Οσ Οσσ", + atEOF: true, + t: Title(language.Und, HandleFinalSigma(false)), + }, { + desc: "und/lower/final sigma: no error", + src: "οΣ", // Oς + want: "ο", // Oς + err: transform.ErrEndOfSpan, + t: Lower(language.Und), + }, { + desc: "und/title/final sigma: no error", + src: "ΟΣ", // Oς + want: "Ο", // Oς + err: transform.ErrEndOfSpan, + t: Title(language.Und), + }, { + desc: "und/title/final sigma: no short source!", + src: "ΟσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσΣ", + want: "Οσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσσ", + err: transform.ErrEndOfSpan, + t: Title(language.Und), + }, { + desc: "und/title/clipped UTF-8 rune", + src: "Σσ" + string([]byte{0xCF}), + want: "Σσ", + atEOF: false, + err: transform.ErrShortSrc, + t: Title(language.Und), + }, { + desc: "und/title/clipped UTF-8 rune atEOF", + src: "Σσσ" + string([]byte{0xCF}), + want: "Σσσ" + string([]byte{0xCF}), + atEOF: true, + t: Title(language.Und), + }, { + // Note: the choice to change the final sigma at the end in case of + // too many case ignorables is arbitrary. The main reason for this + // choice is that it results in simpler code. + desc: "und/title/long string", + src: "A" + strings.Repeat("a", maxIgnorable+5), + want: "A" + strings.Repeat("a", maxIgnorable+5), + t: Title(language.Und), + }, { + // Note: the choice to change the final sigma at the end in case of + // too many case ignorables is arbitrary. The main reason for this + // choice is that it results in simpler code. + desc: "und/title/cyrillic", + src: "При", + want: "При", + atEOF: true, + t: Title(language.Und, HandleFinalSigma(false)), + }, { + // Note: the choice to change the final sigma at the end in case of + // too many case ignorables is arbitrary. The main reason for this + // choice is that it results in simpler code. + desc: "und/title/final sigma: max ignorables", + src: "Οσ" + strings.Repeat(".", maxIgnorable) + "A", + want: "Οσ" + strings.Repeat(".", maxIgnorable) + "A", + t: Title(language.Und), + }, { + desc: "el/upper/max ignorables - not implemented", + src: "Ο" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0313", + want: "", + err: transform.ErrEndOfSpan, + t: Upper(language.Greek), + }, { + desc: "el/upper/too many ignorables - not implemented", + src: "Ο" + strings.Repeat("\u0321", maxIgnorable) + "\u0313", + want: "", + err: transform.ErrEndOfSpan, + t: Upper(language.Greek), + }, { + desc: "el/upper/short dst", + src: "123ο", + want: "", + err: transform.ErrEndOfSpan, + t: Upper(language.Greek), + }, { + desc: "lt/lower/max ignorables", + src: "i" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0307\u0300", + want: "i" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0307\u0300", + t: Lower(language.Lithuanian), + }, { + desc: "lt/lower/isLower", + src: "I" + strings.Repeat("\u0321", maxIgnorable) + "\u0300", + want: "", + err: transform.ErrEndOfSpan, + t: Lower(language.Lithuanian), + }, { + desc: "lt/lower/not identical", + src: "aaaaa\u00cc", // U+00CC LATIN CAPITAL LETTER I GRAVE + err: transform.ErrEndOfSpan, + want: "aaaaa", + t: Lower(language.Lithuanian), + }, { + desc: "lt/lower/identical", + src: "aaaai\u0307\u0300", // U+00CC LATIN CAPITAL LETTER I GRAVE + want: "aaaai\u0307\u0300", + t: Lower(language.Lithuanian), + }, { + desc: "lt/upper/not implemented", + src: "I" + strings.Repeat("\u0321", maxIgnorable-1) + "\u0300", + want: "", + err: transform.ErrEndOfSpan, + t: Upper(language.Lithuanian), + }, { + desc: "lt/upper/not implemented, ascii", + src: "AB", + want: "", + err: transform.ErrEndOfSpan, + t: Upper(language.Lithuanian), + }, { + desc: "nl/title/pre-IJ cutoff", + src: " IJ", + want: " IJ", + t: Title(language.Dutch), + }, { + desc: "nl/title/mid-IJ cutoff", + src: " Ia", + want: " Ia", + t: Title(language.Dutch), + }, { + desc: "af/title/apostrophe", + src: "'n Bietje", + want: "'n Bietje", + t: Title(language.Afrikaans), + }, { + desc: "af/title/apostrophe-incorrect", + src: "'N Bietje", + // The Single_Quote (a MidWord), needs to be retained as unspanned so + // that a successive call to Transform can detect that N should not be + // capitalized. + want: "", + err: transform.ErrEndOfSpan, + t: Title(language.Afrikaans), + }} { + testtext.Run(t, tt.desc, func(t *testing.T) { + for p := 0; p < len(tt.want); p += utf8.RuneLen([]rune(tt.src[p:])[0]) { + tt.t.Reset() + n, err := tt.t.Span([]byte(tt.src[:p]), false) + if err != nil && err != transform.ErrShortSrc { + t.Errorf("early failure:Span(%+q): %v (%d < %d)", tt.src[:p], err, n, len(tt.want)) + break + } + } + tt.t.Reset() + n, err := tt.t.Span([]byte(tt.src), tt.atEOF) + if n != len(tt.want) || err != tt.err { + t.Errorf("Span(%+q, %v): got %d, %v; want %d, %v", tt.src, tt.atEOF, n, err, len(tt.want), tt.err) + } + testHandover(t, tt.t, tt.src) + }) + } +} + +var txtASCII = strings.Repeat("The quick brown fox jumps over the lazy dog. ", 50) + +// Taken from http://creativecommons.org/licenses/by-sa/3.0/vn/ +const txt_vn = `Với các điều kiện sau: Ghi nhận công của tác giả. Nếu bạn sử +dụng, chuyển đổi, hoặc xây dựng dự án từ nội dung được chia sẻ này, bạn phải áp +dụng giấy phép này hoặc một giấy phép khác có các điều khoản tương tự như giấy +phép này cho dự án của bạn. Hiểu rằng: Miễn — Bất kỳ các điều kiện nào trên đây +cũng có thể được miễn bỏ nếu bạn được sự cho phép của người sở hữu bản quyền. +Phạm vi công chúng — Khi tác phẩm hoặc bất kỳ chương nào của tác phẩm đã trong +vùng dành cho công chúng theo quy định của pháp luật thì tình trạng của nó không +bị ảnh hưởng bởi giấy phép trong bất kỳ trường hợp nào.` + +// http://creativecommons.org/licenses/by-sa/2.5/cn/ +const txt_cn = `您可以自由: 复制、发行、展览、表演、放映、 +广播或通过信息网络传播本作品 创作演绎作品 +对本作品进行商业性使用 惟须遵守下列条件: +署名 — 您必须按照作者或者许可人指定的方式对作品进行署名。 +相同方式共享 — 如果您改变、转换本作品或者以本作品为基础进行创作, +您只能采用与本协议相同的许可协议发布基于本作品的演绎作品。` + +// Taken from http://creativecommons.org/licenses/by-sa/1.0/deed.ru +const txt_ru = `При обязательном соблюдении следующих условий: Attribution — Вы +должны атрибутировать произведение (указывать автора и источник) в порядке, +предусмотренном автором или лицензиаром (но только так, чтобы никоим образом не +подразумевалось, что они поддерживают вас или использование вами данного +произведения). Υπό τις ακόλουθες προϋποθέσεις:` + +// Taken from http://creativecommons.org/licenses/by-sa/3.0/gr/ +const txt_gr = `Αναφορά Δημιουργού — Θα πρέπει να κάνετε την αναφορά στο έργο με +τον τρόπο που έχει οριστεί από το δημιουργό ή το χορηγούντο την άδεια (χωρίς +όμως να εννοείται με οποιονδήποτε τρόπο ότι εγκρίνουν εσάς ή τη χρήση του έργου +από εσάς). Παρόμοια Διανομή — Εάν αλλοιώσετε, τροποποιήσετε ή δημιουργήσετε +περαιτέρω βασισμένοι στο έργο θα μπορείτε να διανέμετε το έργο που θα προκύψει +μόνο με την ίδια ή παρόμοια άδεια.` + +const txtNonASCII = txt_vn + txt_cn + txt_ru + txt_gr + +// TODO: Improve ASCII performance. + +func BenchmarkCasers(b *testing.B) { + for _, s := range []struct{ name, text string }{ + {"ascii", txtASCII}, + {"nonASCII", txtNonASCII}, + {"short", "При"}, + } { + src := []byte(s.text) + // Measure case mappings in bytes package for comparison. + for _, f := range []struct { + name string + fn func(b []byte) []byte + }{ + {"lower", bytes.ToLower}, + {"title", bytes.ToTitle}, + {"upper", bytes.ToUpper}, + } { + testtext.Bench(b, path.Join(s.name, "bytes", f.name), func(b *testing.B) { + b.SetBytes(int64(len(src))) + for i := 0; i < b.N; i++ { + f.fn(src) + } + }) + } + for _, t := range []struct { + name string + caser transform.SpanningTransformer + }{ + {"fold/default", Fold()}, + {"upper/default", Upper(language.Und)}, + {"lower/sigma", Lower(language.Und)}, + {"lower/simple", Lower(language.Und, HandleFinalSigma(false))}, + {"title/sigma", Title(language.Und)}, + {"title/simple", Title(language.Und, HandleFinalSigma(false))}, + } { + c := Caser{t.caser} + dst := make([]byte, len(src)) + testtext.Bench(b, path.Join(s.name, t.name, "transform"), func(b *testing.B) { + b.SetBytes(int64(len(src))) + for i := 0; i < b.N; i++ { + c.Reset() + c.Transform(dst, src, true) + } + }) + // No need to check span for simple cases, as they will be the same + // as sigma. + if strings.HasSuffix(t.name, "/simple") { + continue + } + spanSrc := c.Bytes(src) + testtext.Bench(b, path.Join(s.name, t.name, "span"), func(b *testing.B) { + c.Reset() + if n, _ := c.Span(spanSrc, true); n < len(spanSrc) { + b.Fatalf("spanner is not recognizing text %q as done (at %d)", spanSrc, n) + } + b.SetBytes(int64(len(spanSrc))) + for i := 0; i < b.N; i++ { + c.Reset() + c.Span(spanSrc, true) + } + }) + } + } +} diff --git a/vendor/golang.org/x/text/cases/tables.go b/vendor/golang.org/x/text/cases/tables.go new file mode 100644 index 0000000..e6e95a6 --- /dev/null +++ b/vendor/golang.org/x/text/cases/tables.go @@ -0,0 +1,2211 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package cases + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +var xorData string = "" + // Size: 185 bytes + "\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" + + "\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" + + "\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" + + "\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" + + "\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" + + "\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" + + "\x0b!\x10\x00\x0b!0\x00\x0b(\x04\x00\x03\x04\x1e\x00\x03\x0a\x00\x02:" + + "\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<\x00\x01&\x00\x01*" + + "\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01\x1e\x00\x01\x22" + +var exceptions string = "" + // Size: 1852 bytes + "\x00\x12\x10μΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x08I\x13\x18ʼnʼN\x11\x08sS" + + "\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj\x12\x12" + + "njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x18ǰJ̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10\x12DZDz" + + "\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x18Ȿ\x10\x18Ɀ\x10\x18Ɐ\x10\x18Ɑ\x10\x18Ɒ\x10" + + "\x18Ɜ\x10\x18Ɡ\x10\x18Ɥ\x10\x18Ɦ\x10\x18Ɪ\x10\x18Ɫ\x10\x18Ɬ\x10\x18Ɱ\x10" + + "\x18Ɽ\x10\x18Ʇ\x10\x18Ʝ\x10\x18Ʞ2\x10ιΙ\x160ΐΪ́\x160ΰΫ́\x12\x10σΣ" + + "\x12\x10βΒ\x12\x10θΘ\x12\x10φΦ\x12\x10πΠ\x12\x10κΚ\x12\x10ρΡ\x12\x10εΕ" + + "\x14$եւԵՒԵւ\x12\x10вВ\x12\x10дД\x12\x10оО\x12\x10сС\x12\x10тТ\x12\x10тТ" + + "\x12\x10ъЪ\x12\x10ѣѢ\x13\x18ꙋꙊ\x13\x18ẖH̱\x13\x18ẗT̈\x13\x18ẘW̊\x13" + + "\x18ẙY̊\x13\x18aʾAʾ\x13\x18ṡṠ\x12\x10ssß\x14 ὐΥ̓\x160ὒΥ̓̀\x160ὔΥ̓́" + + "\x160ὖΥ̓͂\x15+ἀιἈΙᾈ\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ" + + "\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ" + + "\x15\x1dἄιᾄἌΙ\x15\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ" + + "\x15+ἢιἪΙᾚ\x15+ἣιἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨ" + + "Ι\x15\x1dἡιᾑἩΙ\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15" + + "\x1dἦιᾖἮΙ\x15\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ" + + "\x15+ὥιὭΙᾭ\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ" + + "\x15\x1dὣιᾣὫΙ\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰι" + + "ᾺΙᾺͅ\x14#αιΑΙᾼ\x14$άιΆΙΆͅ\x14 ᾶΑ͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12\x10ι" + + "Ι\x15-ὴιῊΙῊͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14 ῆΗ͂\x166ῆιΗ͂Ιῌ͂\x14\x1cηιῃΗΙ" + + "\x160ῒΪ̀\x160ΐΪ́\x14 ῖΙ͂\x160ῗΪ͂\x160ῢΫ̀\x160ΰΫ́\x14 ῤΡ" + + "̓\x14 ῦΥ͂\x160ῧΫ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙῼ\x14$ώιΏΙΏͅ\x14 ῶΩ͂\x166ῶιΩ" + + "͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk\x12\x10åå\x12\x10ɫɫ\x12\x10ɽɽ" + + "\x10\x10Ⱥ\x10\x10Ⱦ\x12\x10ɑɑ\x12\x10ɱɱ\x12\x10ɐɐ\x12\x10ɒɒ\x12\x10ȿȿ\x12" + + "\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ\x12\x10ɡɡ\x12\x10ɬɬ\x12\x10ɪɪ\x12" + + "\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x12ffFFFf\x12\x12fiFIFi\x12\x12flFLFl\x13" + + "\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12stSTSt\x12\x12stSTSt\x14$մնՄՆՄն" + + "\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄԽՄխ" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *caseTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return caseValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := caseIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := caseIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = caseIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := caseIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = caseIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = caseIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *caseTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return caseValues[c0] + } + i := caseIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = caseIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = caseIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *caseTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return caseValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := caseIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := caseIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = caseIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := caseIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = caseIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = caseIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *caseTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return caseValues[c0] + } + i := caseIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = caseIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = caseIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// caseTrie. Total size: 11742 bytes (11.47 KiB). Checksum: 147a11466b427436. +type caseTrie struct{} + +func newCaseTrie(i int) *caseTrie { + return &caseTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *caseTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 18: + return uint16(caseValues[n<<6+uint32(b)]) + default: + n -= 18 + return uint16(sparse.lookup(n, b)) + } +} + +// caseValues: 20 blocks, 1280 entries, 2560 bytes +// The third block is the zero block. +var caseValues = [1280]uint16{ + // Block 0x0, offset 0x0 + 0x27: 0x0054, + 0x2e: 0x0054, + 0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010, + 0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054, + // Block 0x1, offset 0x40 + 0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013, + 0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013, + 0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013, + 0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013, + 0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013, + 0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012, + 0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012, + 0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012, + 0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012, + 0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112, + 0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713, + 0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313, + 0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653, + 0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53, + 0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112, + 0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853, + 0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13, + 0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313, + 0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010, + 0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452, + // Block 0x4, offset 0x100 + 0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x04cb, 0x105: 0x05c9, + 0x106: 0x06ca, 0x107: 0x078b, 0x108: 0x0889, 0x109: 0x098a, 0x10a: 0x0a4b, 0x10b: 0x0b49, + 0x10c: 0x0c4a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313, + 0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13, + 0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452, + 0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112, + 0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112, + 0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112, + 0x130: 0x0d0a, 0x131: 0x0e0b, 0x132: 0x0f09, 0x133: 0x100a, 0x134: 0x0113, 0x135: 0x0112, + 0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112, + 0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112, + // Block 0x5, offset 0x140 + 0x140: 0x136a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53, + 0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112, + 0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x140a, 0x151: 0x14aa, + 0x152: 0x154a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152, + 0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x15ea, 0x15d: 0x0012, + 0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x168a, 0x162: 0x0012, 0x163: 0x2052, + 0x164: 0x0012, 0x165: 0x172a, 0x166: 0x17ca, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652, + 0x16a: 0x186a, 0x16b: 0x190a, 0x16c: 0x19aa, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52, + 0x170: 0x0012, 0x171: 0x1a4a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252, + 0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012, + 0x17c: 0x0012, 0x17d: 0x1aea, 0x17e: 0x0012, 0x17f: 0x0012, + // Block 0x6, offset 0x180 + 0x180: 0x3552, 0x181: 0x0012, 0x182: 0x0012, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012, + 0x186: 0x0012, 0x187: 0x1b8a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52, + 0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012, + 0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012, + 0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x1c2a, + 0x19e: 0x1cca, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012, + 0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012, + 0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012, + 0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015, + 0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014, + 0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x1d6d, + 0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024, + 0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024, + 0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024, + 0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034, + 0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024, + 0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024, + 0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024, + 0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004, + 0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52, + 0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353, + // Block 0x8, offset 0x200 + 0x204: 0x0004, 0x205: 0x0004, + 0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513, + 0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x1e2a, 0x211: 0x2013, + 0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013, + 0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013, + 0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53, + 0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53, + 0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512, + 0x230: 0x1fea, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012, + 0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012, + 0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012, + // Block 0x9, offset 0x240 + 0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x21aa, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52, + 0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52, + 0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x226a, 0x251: 0x232a, + 0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x23ea, 0x256: 0x24aa, 0x257: 0x1812, + 0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112, + 0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112, + 0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112, + 0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112, + 0x270: 0x256a, 0x271: 0x262a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x26ea, + 0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112, + 0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053, + // Block 0xa, offset 0x280 + 0x280: 0x0812, 0x281: 0x0812, 0x282: 0x0812, 0x283: 0x0812, 0x284: 0x0812, 0x285: 0x0812, + 0x288: 0x0813, 0x289: 0x0813, 0x28a: 0x0813, 0x28b: 0x0813, + 0x28c: 0x0813, 0x28d: 0x0813, 0x290: 0x372a, 0x291: 0x0812, + 0x292: 0x386a, 0x293: 0x0812, 0x294: 0x3a2a, 0x295: 0x0812, 0x296: 0x3bea, 0x297: 0x0812, + 0x299: 0x0813, 0x29b: 0x0813, 0x29d: 0x0813, + 0x29f: 0x0813, 0x2a0: 0x0812, 0x2a1: 0x0812, 0x2a2: 0x0812, 0x2a3: 0x0812, + 0x2a4: 0x0812, 0x2a5: 0x0812, 0x2a6: 0x0812, 0x2a7: 0x0812, 0x2a8: 0x0813, 0x2a9: 0x0813, + 0x2aa: 0x0813, 0x2ab: 0x0813, 0x2ac: 0x0813, 0x2ad: 0x0813, 0x2ae: 0x0813, 0x2af: 0x0813, + 0x2b0: 0x8b52, 0x2b1: 0x8b52, 0x2b2: 0x8e52, 0x2b3: 0x8e52, 0x2b4: 0x9152, 0x2b5: 0x9152, + 0x2b6: 0x9452, 0x2b7: 0x9452, 0x2b8: 0x9752, 0x2b9: 0x9752, 0x2ba: 0x9a52, 0x2bb: 0x9a52, + 0x2bc: 0x4d52, 0x2bd: 0x4d52, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x3daa, 0x2c1: 0x3f8a, 0x2c2: 0x416a, 0x2c3: 0x434a, 0x2c4: 0x452a, 0x2c5: 0x470a, + 0x2c6: 0x48ea, 0x2c7: 0x4aca, 0x2c8: 0x4ca9, 0x2c9: 0x4e89, 0x2ca: 0x5069, 0x2cb: 0x5249, + 0x2cc: 0x5429, 0x2cd: 0x5609, 0x2ce: 0x57e9, 0x2cf: 0x59c9, 0x2d0: 0x5baa, 0x2d1: 0x5d8a, + 0x2d2: 0x5f6a, 0x2d3: 0x614a, 0x2d4: 0x632a, 0x2d5: 0x650a, 0x2d6: 0x66ea, 0x2d7: 0x68ca, + 0x2d8: 0x6aa9, 0x2d9: 0x6c89, 0x2da: 0x6e69, 0x2db: 0x7049, 0x2dc: 0x7229, 0x2dd: 0x7409, + 0x2de: 0x75e9, 0x2df: 0x77c9, 0x2e0: 0x79aa, 0x2e1: 0x7b8a, 0x2e2: 0x7d6a, 0x2e3: 0x7f4a, + 0x2e4: 0x812a, 0x2e5: 0x830a, 0x2e6: 0x84ea, 0x2e7: 0x86ca, 0x2e8: 0x88a9, 0x2e9: 0x8a89, + 0x2ea: 0x8c69, 0x2eb: 0x8e49, 0x2ec: 0x9029, 0x2ed: 0x9209, 0x2ee: 0x93e9, 0x2ef: 0x95c9, + 0x2f0: 0x0812, 0x2f1: 0x0812, 0x2f2: 0x97aa, 0x2f3: 0x99ca, 0x2f4: 0x9b6a, + 0x2f6: 0x9d2a, 0x2f7: 0x9e6a, 0x2f8: 0x0813, 0x2f9: 0x0813, 0x2fa: 0x8b53, 0x2fb: 0x8b53, + 0x2fc: 0xa0e9, 0x2fd: 0x0004, 0x2fe: 0xa28a, 0x2ff: 0x0004, + // Block 0xc, offset 0x300 + 0x300: 0x0004, 0x301: 0x0004, 0x302: 0xa34a, 0x303: 0xa56a, 0x304: 0xa70a, + 0x306: 0xa8ca, 0x307: 0xaa0a, 0x308: 0x8e53, 0x309: 0x8e53, 0x30a: 0x9153, 0x30b: 0x9153, + 0x30c: 0xac89, 0x30d: 0x0004, 0x30e: 0x0004, 0x30f: 0x0004, 0x310: 0x0812, 0x311: 0x0812, + 0x312: 0xae2a, 0x313: 0xafea, 0x316: 0xb1aa, 0x317: 0xb2ea, + 0x318: 0x0813, 0x319: 0x0813, 0x31a: 0x9453, 0x31b: 0x9453, 0x31d: 0x0004, + 0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0xb4aa, 0x323: 0xb66a, + 0x324: 0xb82a, 0x325: 0x0912, 0x326: 0xb96a, 0x327: 0xbaaa, 0x328: 0x0813, 0x329: 0x0813, + 0x32a: 0x9a53, 0x32b: 0x9a53, 0x32c: 0x0913, 0x32d: 0x0004, 0x32e: 0x0004, 0x32f: 0x0004, + 0x332: 0xbc6a, 0x333: 0xbe8a, 0x334: 0xc02a, + 0x336: 0xc1ea, 0x337: 0xc32a, 0x338: 0x9753, 0x339: 0x9753, 0x33a: 0x4d53, 0x33b: 0x4d53, + 0x33c: 0xc5a9, 0x33d: 0x0004, 0x33e: 0x0004, + // Block 0xd, offset 0x340 + 0x342: 0x0013, + 0x347: 0x0013, 0x34a: 0x0012, 0x34b: 0x0013, + 0x34c: 0x0013, 0x34d: 0x0013, 0x34e: 0x0012, 0x34f: 0x0012, 0x350: 0x0013, 0x351: 0x0013, + 0x352: 0x0013, 0x353: 0x0012, 0x355: 0x0013, + 0x359: 0x0013, 0x35a: 0x0013, 0x35b: 0x0013, 0x35c: 0x0013, 0x35d: 0x0013, + 0x364: 0x0013, 0x366: 0xc74b, 0x368: 0x0013, + 0x36a: 0xc80b, 0x36b: 0xc88b, 0x36c: 0x0013, 0x36d: 0x0013, 0x36f: 0x0012, + 0x370: 0x0013, 0x371: 0x0013, 0x372: 0x9d53, 0x373: 0x0013, 0x374: 0x0012, 0x375: 0x0010, + 0x376: 0x0010, 0x377: 0x0010, 0x378: 0x0010, 0x379: 0x0012, + 0x37c: 0x0012, 0x37d: 0x0012, 0x37e: 0x0013, 0x37f: 0x0013, + // Block 0xe, offset 0x380 + 0x380: 0x1a13, 0x381: 0x1a13, 0x382: 0x1e13, 0x383: 0x1e13, 0x384: 0x1a13, 0x385: 0x1a13, + 0x386: 0x2613, 0x387: 0x2613, 0x388: 0x2a13, 0x389: 0x2a13, 0x38a: 0x2e13, 0x38b: 0x2e13, + 0x38c: 0x2a13, 0x38d: 0x2a13, 0x38e: 0x2613, 0x38f: 0x2613, 0x390: 0xa052, 0x391: 0xa052, + 0x392: 0xa352, 0x393: 0xa352, 0x394: 0xa652, 0x395: 0xa652, 0x396: 0xa352, 0x397: 0xa352, + 0x398: 0xa052, 0x399: 0xa052, 0x39a: 0x1a12, 0x39b: 0x1a12, 0x39c: 0x1e12, 0x39d: 0x1e12, + 0x39e: 0x1a12, 0x39f: 0x1a12, 0x3a0: 0x2612, 0x3a1: 0x2612, 0x3a2: 0x2a12, 0x3a3: 0x2a12, + 0x3a4: 0x2e12, 0x3a5: 0x2e12, 0x3a6: 0x2a12, 0x3a7: 0x2a12, 0x3a8: 0x2612, 0x3a9: 0x2612, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x6552, 0x3c1: 0x6552, 0x3c2: 0x6552, 0x3c3: 0x6552, 0x3c4: 0x6552, 0x3c5: 0x6552, + 0x3c6: 0x6552, 0x3c7: 0x6552, 0x3c8: 0x6552, 0x3c9: 0x6552, 0x3ca: 0x6552, 0x3cb: 0x6552, + 0x3cc: 0x6552, 0x3cd: 0x6552, 0x3ce: 0x6552, 0x3cf: 0x6552, 0x3d0: 0xa952, 0x3d1: 0xa952, + 0x3d2: 0xa952, 0x3d3: 0xa952, 0x3d4: 0xa952, 0x3d5: 0xa952, 0x3d6: 0xa952, 0x3d7: 0xa952, + 0x3d8: 0xa952, 0x3d9: 0xa952, 0x3da: 0xa952, 0x3db: 0xa952, 0x3dc: 0xa952, 0x3dd: 0xa952, + 0x3de: 0xa952, 0x3e0: 0x0113, 0x3e1: 0x0112, 0x3e2: 0xc94b, 0x3e3: 0x8853, + 0x3e4: 0xca0b, 0x3e5: 0xcaca, 0x3e6: 0xcb4a, 0x3e7: 0x0f13, 0x3e8: 0x0f12, 0x3e9: 0x0313, + 0x3ea: 0x0312, 0x3eb: 0x0713, 0x3ec: 0x0712, 0x3ed: 0xcbcb, 0x3ee: 0xcc8b, 0x3ef: 0xcd4b, + 0x3f0: 0xce0b, 0x3f1: 0x0012, 0x3f2: 0x0113, 0x3f3: 0x0112, 0x3f4: 0x0012, 0x3f5: 0x0313, + 0x3f6: 0x0312, 0x3f7: 0x0012, 0x3f8: 0x0012, 0x3f9: 0x0012, 0x3fa: 0x0012, 0x3fb: 0x0012, + 0x3fc: 0x0015, 0x3fd: 0x0015, 0x3fe: 0xcecb, 0x3ff: 0xcf8b, + // Block 0x10, offset 0x400 + 0x400: 0x0113, 0x401: 0x0112, 0x402: 0x0113, 0x403: 0x0112, 0x404: 0x0113, 0x405: 0x0112, + 0x406: 0x0113, 0x407: 0x0112, 0x408: 0x0014, 0x409: 0x0004, 0x40a: 0x0004, 0x40b: 0x0713, + 0x40c: 0x0712, 0x40d: 0xd04b, 0x40e: 0x0012, 0x40f: 0x0010, 0x410: 0x0113, 0x411: 0x0112, + 0x412: 0x0113, 0x413: 0x0112, 0x414: 0x0012, 0x415: 0x0012, 0x416: 0x0113, 0x417: 0x0112, + 0x418: 0x0113, 0x419: 0x0112, 0x41a: 0x0113, 0x41b: 0x0112, 0x41c: 0x0113, 0x41d: 0x0112, + 0x41e: 0x0113, 0x41f: 0x0112, 0x420: 0x0113, 0x421: 0x0112, 0x422: 0x0113, 0x423: 0x0112, + 0x424: 0x0113, 0x425: 0x0112, 0x426: 0x0113, 0x427: 0x0112, 0x428: 0x0113, 0x429: 0x0112, + 0x42a: 0xd10b, 0x42b: 0xd1cb, 0x42c: 0xd28b, 0x42d: 0xd34b, 0x42e: 0xd40b, + 0x430: 0xd4cb, 0x431: 0xd58b, 0x432: 0xd64b, 0x433: 0xac53, 0x434: 0x0113, 0x435: 0x0112, + 0x436: 0x0113, 0x437: 0x0112, + // Block 0x11, offset 0x440 + 0x440: 0xd70a, 0x441: 0xd80a, 0x442: 0xd90a, 0x443: 0xda0a, 0x444: 0xdb6a, 0x445: 0xdcca, + 0x446: 0xddca, + 0x453: 0xdeca, 0x454: 0xe08a, 0x455: 0xe24a, 0x456: 0xe40a, 0x457: 0xe5ca, + 0x45d: 0x0010, + 0x45e: 0x0034, 0x45f: 0x0010, 0x460: 0x0010, 0x461: 0x0010, 0x462: 0x0010, 0x463: 0x0010, + 0x464: 0x0010, 0x465: 0x0010, 0x466: 0x0010, 0x467: 0x0010, 0x468: 0x0010, + 0x46a: 0x0010, 0x46b: 0x0010, 0x46c: 0x0010, 0x46d: 0x0010, 0x46e: 0x0010, 0x46f: 0x0010, + 0x470: 0x0010, 0x471: 0x0010, 0x472: 0x0010, 0x473: 0x0010, 0x474: 0x0010, 0x475: 0x0010, + 0x476: 0x0010, 0x478: 0x0010, 0x479: 0x0010, 0x47a: 0x0010, 0x47b: 0x0010, + 0x47c: 0x0010, 0x47e: 0x0010, + // Block 0x12, offset 0x480 + 0x480: 0x2213, 0x481: 0x2213, 0x482: 0x2613, 0x483: 0x2613, 0x484: 0x2213, 0x485: 0x2213, + 0x486: 0x2e13, 0x487: 0x2e13, 0x488: 0x2213, 0x489: 0x2213, 0x48a: 0x2613, 0x48b: 0x2613, + 0x48c: 0x2213, 0x48d: 0x2213, 0x48e: 0x3e13, 0x48f: 0x3e13, 0x490: 0x2213, 0x491: 0x2213, + 0x492: 0x2613, 0x493: 0x2613, 0x494: 0x2213, 0x495: 0x2213, 0x496: 0x2e13, 0x497: 0x2e13, + 0x498: 0x2213, 0x499: 0x2213, 0x49a: 0x2613, 0x49b: 0x2613, 0x49c: 0x2213, 0x49d: 0x2213, + 0x49e: 0xb553, 0x49f: 0xb553, 0x4a0: 0xb853, 0x4a1: 0xb853, 0x4a2: 0x2212, 0x4a3: 0x2212, + 0x4a4: 0x2612, 0x4a5: 0x2612, 0x4a6: 0x2212, 0x4a7: 0x2212, 0x4a8: 0x2e12, 0x4a9: 0x2e12, + 0x4aa: 0x2212, 0x4ab: 0x2212, 0x4ac: 0x2612, 0x4ad: 0x2612, 0x4ae: 0x2212, 0x4af: 0x2212, + 0x4b0: 0x3e12, 0x4b1: 0x3e12, 0x4b2: 0x2212, 0x4b3: 0x2212, 0x4b4: 0x2612, 0x4b5: 0x2612, + 0x4b6: 0x2212, 0x4b7: 0x2212, 0x4b8: 0x2e12, 0x4b9: 0x2e12, 0x4ba: 0x2212, 0x4bb: 0x2212, + 0x4bc: 0x2612, 0x4bd: 0x2612, 0x4be: 0x2212, 0x4bf: 0x2212, + // Block 0x13, offset 0x4c0 + 0x4c2: 0x0010, + 0x4c7: 0x0010, 0x4c9: 0x0010, 0x4cb: 0x0010, + 0x4cd: 0x0010, 0x4ce: 0x0010, 0x4cf: 0x0010, 0x4d1: 0x0010, + 0x4d2: 0x0010, 0x4d4: 0x0010, 0x4d7: 0x0010, + 0x4d9: 0x0010, 0x4db: 0x0010, 0x4dd: 0x0010, + 0x4df: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010, + 0x4e4: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010, 0x4e9: 0x0010, + 0x4ea: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010, + 0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010, + 0x4f6: 0x0010, 0x4f7: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010, + 0x4fc: 0x0010, 0x4fe: 0x0010, +} + +// caseIndex: 25 blocks, 1600 entries, 3200 bytes +// Block 0 is the zero block. +var caseIndex = [1600]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x12, 0xc3: 0x13, 0xc4: 0x14, 0xc5: 0x15, 0xc6: 0x01, 0xc7: 0x02, + 0xc8: 0x16, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x17, 0xcc: 0x18, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07, + 0xd0: 0x19, 0xd1: 0x1a, 0xd2: 0x1b, 0xd3: 0x1c, 0xd4: 0x1d, 0xd5: 0x1e, 0xd6: 0x1f, 0xd7: 0x20, + 0xd8: 0x21, 0xd9: 0x22, 0xda: 0x23, 0xdb: 0x24, 0xdc: 0x25, 0xdd: 0x26, 0xde: 0x27, 0xdf: 0x28, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09, + 0xf0: 0x14, 0xf3: 0x16, + // Block 0x4, offset 0x100 + 0x120: 0x29, 0x121: 0x2a, 0x122: 0x2b, 0x123: 0x2c, 0x124: 0x2d, 0x125: 0x2e, 0x126: 0x2f, 0x127: 0x30, + 0x128: 0x31, 0x129: 0x32, 0x12a: 0x33, 0x12b: 0x34, 0x12c: 0x35, 0x12d: 0x36, 0x12e: 0x37, 0x12f: 0x38, + 0x130: 0x39, 0x131: 0x3a, 0x132: 0x3b, 0x133: 0x3c, 0x134: 0x3d, 0x135: 0x3e, 0x136: 0x3f, 0x137: 0x40, + 0x138: 0x41, 0x139: 0x42, 0x13a: 0x43, 0x13b: 0x44, 0x13c: 0x45, 0x13d: 0x46, 0x13e: 0x47, 0x13f: 0x48, + // Block 0x5, offset 0x140 + 0x140: 0x49, 0x141: 0x4a, 0x142: 0x4b, 0x143: 0x4c, 0x144: 0x23, 0x145: 0x23, 0x146: 0x23, 0x147: 0x23, + 0x148: 0x23, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53, + 0x150: 0x54, 0x151: 0x23, 0x152: 0x23, 0x153: 0x23, 0x154: 0x23, 0x155: 0x23, 0x156: 0x23, 0x157: 0x23, + 0x158: 0x23, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b, + 0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62, + 0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16c: 0x66, 0x16d: 0x67, 0x16e: 0x68, 0x16f: 0x69, + 0x170: 0x6a, 0x171: 0x6b, 0x172: 0x6c, 0x173: 0x6d, 0x174: 0x6e, 0x175: 0x6f, 0x176: 0x70, 0x177: 0x71, + 0x178: 0x72, 0x179: 0x72, 0x17a: 0x73, 0x17b: 0x72, 0x17c: 0x74, 0x17d: 0x08, 0x17e: 0x09, 0x17f: 0x0a, + // Block 0x6, offset 0x180 + 0x180: 0x75, 0x181: 0x76, 0x182: 0x77, 0x183: 0x78, 0x184: 0x0b, 0x185: 0x79, 0x186: 0x7a, + 0x192: 0x7b, 0x193: 0x0c, + 0x1b0: 0x7c, 0x1b1: 0x0d, 0x1b2: 0x72, 0x1b3: 0x7d, 0x1b4: 0x7e, 0x1b5: 0x7f, 0x1b6: 0x80, 0x1b7: 0x81, + 0x1b8: 0x82, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x83, 0x1c2: 0x84, 0x1c3: 0x85, 0x1c4: 0x86, 0x1c5: 0x23, 0x1c6: 0x87, + // Block 0x8, offset 0x200 + 0x200: 0x88, 0x201: 0x23, 0x202: 0x23, 0x203: 0x23, 0x204: 0x23, 0x205: 0x23, 0x206: 0x23, 0x207: 0x23, + 0x208: 0x23, 0x209: 0x23, 0x20a: 0x23, 0x20b: 0x23, 0x20c: 0x23, 0x20d: 0x23, 0x20e: 0x23, 0x20f: 0x23, + 0x210: 0x23, 0x211: 0x23, 0x212: 0x89, 0x213: 0x8a, 0x214: 0x23, 0x215: 0x23, 0x216: 0x23, 0x217: 0x23, + 0x218: 0x8b, 0x219: 0x8c, 0x21a: 0x8d, 0x21b: 0x8e, 0x21c: 0x8f, 0x21d: 0x90, 0x21e: 0x0e, 0x21f: 0x91, + 0x220: 0x92, 0x221: 0x93, 0x222: 0x23, 0x223: 0x94, 0x224: 0x95, 0x225: 0x96, 0x226: 0x97, 0x227: 0x98, + 0x228: 0x99, 0x229: 0x9a, 0x22a: 0x9b, 0x22b: 0x9c, 0x22c: 0x9d, 0x22d: 0x9e, 0x22e: 0x9f, 0x22f: 0xa0, + 0x230: 0x23, 0x231: 0x23, 0x232: 0x23, 0x233: 0x23, 0x234: 0x23, 0x235: 0x23, 0x236: 0x23, 0x237: 0x23, + 0x238: 0x23, 0x239: 0x23, 0x23a: 0x23, 0x23b: 0x23, 0x23c: 0x23, 0x23d: 0x23, 0x23e: 0x23, 0x23f: 0x23, + // Block 0x9, offset 0x240 + 0x240: 0x23, 0x241: 0x23, 0x242: 0x23, 0x243: 0x23, 0x244: 0x23, 0x245: 0x23, 0x246: 0x23, 0x247: 0x23, + 0x248: 0x23, 0x249: 0x23, 0x24a: 0x23, 0x24b: 0x23, 0x24c: 0x23, 0x24d: 0x23, 0x24e: 0x23, 0x24f: 0x23, + 0x250: 0x23, 0x251: 0x23, 0x252: 0x23, 0x253: 0x23, 0x254: 0x23, 0x255: 0x23, 0x256: 0x23, 0x257: 0x23, + 0x258: 0x23, 0x259: 0x23, 0x25a: 0x23, 0x25b: 0x23, 0x25c: 0x23, 0x25d: 0x23, 0x25e: 0x23, 0x25f: 0x23, + 0x260: 0x23, 0x261: 0x23, 0x262: 0x23, 0x263: 0x23, 0x264: 0x23, 0x265: 0x23, 0x266: 0x23, 0x267: 0x23, + 0x268: 0x23, 0x269: 0x23, 0x26a: 0x23, 0x26b: 0x23, 0x26c: 0x23, 0x26d: 0x23, 0x26e: 0x23, 0x26f: 0x23, + 0x270: 0x23, 0x271: 0x23, 0x272: 0x23, 0x273: 0x23, 0x274: 0x23, 0x275: 0x23, 0x276: 0x23, 0x277: 0x23, + 0x278: 0x23, 0x279: 0x23, 0x27a: 0x23, 0x27b: 0x23, 0x27c: 0x23, 0x27d: 0x23, 0x27e: 0x23, 0x27f: 0x23, + // Block 0xa, offset 0x280 + 0x280: 0x23, 0x281: 0x23, 0x282: 0x23, 0x283: 0x23, 0x284: 0x23, 0x285: 0x23, 0x286: 0x23, 0x287: 0x23, + 0x288: 0x23, 0x289: 0x23, 0x28a: 0x23, 0x28b: 0x23, 0x28c: 0x23, 0x28d: 0x23, 0x28e: 0x23, 0x28f: 0x23, + 0x290: 0x23, 0x291: 0x23, 0x292: 0x23, 0x293: 0x23, 0x294: 0x23, 0x295: 0x23, 0x296: 0x23, 0x297: 0x23, + 0x298: 0x23, 0x299: 0x23, 0x29a: 0x23, 0x29b: 0x23, 0x29c: 0x23, 0x29d: 0x23, 0x29e: 0xa1, 0x29f: 0xa2, + // Block 0xb, offset 0x2c0 + 0x2ec: 0x0f, 0x2ed: 0xa3, 0x2ee: 0xa4, 0x2ef: 0xa5, + 0x2f0: 0x23, 0x2f1: 0x23, 0x2f2: 0x23, 0x2f3: 0x23, 0x2f4: 0xa6, 0x2f5: 0xa7, 0x2f6: 0xa8, 0x2f7: 0xa9, + 0x2f8: 0xaa, 0x2f9: 0xab, 0x2fa: 0x23, 0x2fb: 0xac, 0x2fc: 0xad, 0x2fd: 0xae, 0x2fe: 0xaf, 0x2ff: 0xb0, + // Block 0xc, offset 0x300 + 0x300: 0xb1, 0x301: 0xb2, 0x302: 0x23, 0x303: 0xb3, 0x305: 0xb4, 0x307: 0xb5, + 0x30a: 0xb6, 0x30b: 0xb7, 0x30c: 0xb8, 0x30d: 0xb9, 0x30e: 0xba, 0x30f: 0xbb, + 0x310: 0xbc, 0x311: 0xbd, 0x312: 0xbe, 0x313: 0xbf, 0x314: 0xc0, 0x315: 0xc1, + 0x318: 0x23, 0x319: 0x23, 0x31a: 0x23, 0x31b: 0x23, 0x31c: 0xc2, 0x31d: 0xc3, + 0x320: 0xc4, 0x321: 0xc5, 0x322: 0xc6, 0x323: 0xc7, 0x324: 0xc8, 0x326: 0xc9, + 0x328: 0xca, 0x329: 0xcb, 0x32a: 0xcc, 0x32b: 0xcd, 0x32c: 0x5f, 0x32d: 0xce, 0x32e: 0xcf, + 0x330: 0x23, 0x331: 0xd0, 0x332: 0xd1, 0x333: 0xd2, + // Block 0xd, offset 0x340 + 0x340: 0xd3, 0x341: 0xd4, 0x342: 0xd5, 0x343: 0xd6, 0x344: 0xd7, 0x345: 0xd8, 0x346: 0xd9, 0x347: 0xda, + 0x348: 0xdb, 0x34a: 0xdc, 0x34b: 0xdd, 0x34c: 0xde, 0x34d: 0xdf, + 0x350: 0xe0, 0x351: 0xe1, 0x352: 0xe2, 0x353: 0xe3, 0x356: 0xe4, 0x357: 0xe5, + 0x358: 0xe6, 0x359: 0xe7, 0x35a: 0xe8, 0x35b: 0xe9, 0x35c: 0xea, + 0x362: 0xeb, 0x363: 0xec, + 0x36b: 0xed, + 0x370: 0xee, 0x371: 0xef, 0x372: 0xf0, + // Block 0xe, offset 0x380 + 0x380: 0x23, 0x381: 0x23, 0x382: 0x23, 0x383: 0x23, 0x384: 0x23, 0x385: 0x23, 0x386: 0x23, 0x387: 0x23, + 0x388: 0x23, 0x389: 0x23, 0x38a: 0x23, 0x38b: 0x23, 0x38c: 0x23, 0x38d: 0x23, 0x38e: 0xf1, + 0x390: 0x23, 0x391: 0xf2, 0x392: 0x23, 0x393: 0x23, 0x394: 0x23, 0x395: 0xf3, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x23, 0x3c1: 0x23, 0x3c2: 0x23, 0x3c3: 0x23, 0x3c4: 0x23, 0x3c5: 0x23, 0x3c6: 0x23, 0x3c7: 0x23, + 0x3c8: 0x23, 0x3c9: 0x23, 0x3ca: 0x23, 0x3cb: 0x23, 0x3cc: 0x23, 0x3cd: 0x23, 0x3ce: 0x23, 0x3cf: 0x23, + 0x3d0: 0xf2, + // Block 0x10, offset 0x400 + 0x410: 0x23, 0x411: 0x23, 0x412: 0x23, 0x413: 0x23, 0x414: 0x23, 0x415: 0x23, 0x416: 0x23, 0x417: 0x23, + 0x418: 0x23, 0x419: 0xf4, + // Block 0x11, offset 0x440 + 0x460: 0x23, 0x461: 0x23, 0x462: 0x23, 0x463: 0x23, 0x464: 0x23, 0x465: 0x23, 0x466: 0x23, 0x467: 0x23, + 0x468: 0xed, 0x469: 0xf5, 0x46b: 0xf6, 0x46c: 0xf7, 0x46d: 0xf8, 0x46e: 0xf9, + 0x47c: 0x23, 0x47d: 0xfa, 0x47e: 0xfb, 0x47f: 0xfc, + // Block 0x12, offset 0x480 + 0x4b0: 0x23, 0x4b1: 0xfd, 0x4b2: 0xfe, + // Block 0x13, offset 0x4c0 + 0x4c5: 0xff, 0x4c6: 0x100, + 0x4c9: 0x101, + 0x4d0: 0x102, 0x4d1: 0x103, 0x4d2: 0x104, 0x4d3: 0x105, 0x4d4: 0x106, 0x4d5: 0x107, 0x4d6: 0x108, 0x4d7: 0x109, + 0x4d8: 0x10a, 0x4d9: 0x10b, 0x4da: 0x10c, 0x4db: 0x10d, 0x4dc: 0x10e, 0x4dd: 0x10f, 0x4de: 0x110, 0x4df: 0x111, + 0x4e8: 0x112, 0x4e9: 0x113, 0x4ea: 0x114, + // Block 0x14, offset 0x500 + 0x500: 0x115, + 0x520: 0x23, 0x521: 0x23, 0x522: 0x23, 0x523: 0x116, 0x524: 0x10, 0x525: 0x117, + 0x538: 0x118, 0x539: 0x11, 0x53a: 0x119, + // Block 0x15, offset 0x540 + 0x544: 0x11a, 0x545: 0x11b, 0x546: 0x11c, + 0x54f: 0x11d, + // Block 0x16, offset 0x580 + 0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f, + 0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x11e, 0x5c1: 0x11f, 0x5c4: 0x11f, 0x5c5: 0x11f, 0x5c6: 0x11f, 0x5c7: 0x120, + // Block 0x18, offset 0x600 + 0x620: 0x15, +} + +// sparseOffsets: 272 entries, 544 bytes +var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x3a, 0x3d, 0x41, 0x44, 0x48, 0x52, 0x54, 0x59, 0x69, 0x70, 0x75, 0x83, 0x84, 0x92, 0xa1, 0xab, 0xae, 0xb4, 0xbc, 0xbe, 0xc0, 0xce, 0xd4, 0xe2, 0xed, 0xf8, 0x103, 0x10f, 0x119, 0x124, 0x12f, 0x13b, 0x147, 0x14f, 0x157, 0x161, 0x16c, 0x178, 0x17e, 0x189, 0x18e, 0x196, 0x199, 0x19e, 0x1a2, 0x1a6, 0x1ad, 0x1b6, 0x1be, 0x1bf, 0x1c8, 0x1cf, 0x1d7, 0x1dd, 0x1e3, 0x1e8, 0x1ec, 0x1ef, 0x1f1, 0x1f4, 0x1f9, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x207, 0x20c, 0x210, 0x219, 0x21c, 0x21f, 0x225, 0x226, 0x231, 0x232, 0x233, 0x238, 0x245, 0x24d, 0x255, 0x25e, 0x267, 0x270, 0x275, 0x278, 0x281, 0x28e, 0x290, 0x297, 0x299, 0x2a4, 0x2a5, 0x2b0, 0x2b8, 0x2c0, 0x2c6, 0x2c7, 0x2d5, 0x2da, 0x2dd, 0x2e2, 0x2e6, 0x2ec, 0x2f1, 0x2f4, 0x2f9, 0x2fe, 0x2ff, 0x305, 0x307, 0x308, 0x30a, 0x30c, 0x30f, 0x310, 0x312, 0x315, 0x31b, 0x31f, 0x321, 0x327, 0x32e, 0x332, 0x33b, 0x33c, 0x344, 0x348, 0x34d, 0x355, 0x35b, 0x361, 0x36b, 0x370, 0x379, 0x37f, 0x386, 0x38a, 0x392, 0x394, 0x396, 0x399, 0x39b, 0x39d, 0x39e, 0x39f, 0x3a1, 0x3a3, 0x3a9, 0x3ae, 0x3b0, 0x3b6, 0x3b9, 0x3bb, 0x3c1, 0x3c6, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cd, 0x3cf, 0x3d1, 0x3d4, 0x3d6, 0x3d9, 0x3e1, 0x3e4, 0x3e8, 0x3f0, 0x3f2, 0x3f3, 0x3f4, 0x3f6, 0x3fc, 0x3fe, 0x3ff, 0x401, 0x403, 0x405, 0x412, 0x413, 0x414, 0x418, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x422, 0x426, 0x42c, 0x42e, 0x435, 0x438, 0x43c, 0x442, 0x44b, 0x451, 0x457, 0x461, 0x46b, 0x46d, 0x474, 0x47a, 0x480, 0x486, 0x489, 0x48f, 0x492, 0x49a, 0x49b, 0x4a2, 0x4a3, 0x4a6, 0x4a7, 0x4ad, 0x4b0, 0x4b8, 0x4b9, 0x4ba, 0x4bb, 0x4bc, 0x4be, 0x4c0, 0x4c2, 0x4c6, 0x4c7, 0x4c9, 0x4ca, 0x4cb, 0x4cd, 0x4d2, 0x4d7, 0x4db, 0x4dc, 0x4df, 0x4e3, 0x4ee, 0x4f2, 0x4fa, 0x4ff, 0x503, 0x506, 0x50a, 0x50d, 0x510, 0x515, 0x519, 0x51d, 0x521, 0x525, 0x527, 0x529, 0x52c, 0x531, 0x533, 0x538, 0x541, 0x546, 0x547, 0x54a, 0x54b, 0x54c, 0x54e, 0x54f, 0x550} + +// sparseValues: 1360 entries, 5440 bytes +var sparseValues = [1360]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0004, lo: 0xa8, hi: 0xa8}, + {value: 0x0012, lo: 0xaa, hi: 0xaa}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0004, lo: 0xaf, hi: 0xaf}, + {value: 0x0004, lo: 0xb4, hi: 0xb4}, + {value: 0x002a, lo: 0xb5, hi: 0xb5}, + {value: 0x0054, lo: 0xb7, hi: 0xb7}, + {value: 0x0004, lo: 0xb8, hi: 0xb8}, + {value: 0x0012, lo: 0xba, hi: 0xba}, + // Block 0x1, offset 0x9 + {value: 0x2013, lo: 0x80, hi: 0x96}, + {value: 0x2013, lo: 0x98, hi: 0x9e}, + {value: 0x00ea, lo: 0x9f, hi: 0x9f}, + {value: 0x2012, lo: 0xa0, hi: 0xb6}, + {value: 0x2012, lo: 0xb8, hi: 0xbe}, + {value: 0x0252, lo: 0xbf, hi: 0xbf}, + // Block 0x2, offset 0xf + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x01eb, lo: 0xb0, hi: 0xb0}, + {value: 0x02ea, lo: 0xb1, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xb7}, + {value: 0x0012, lo: 0xb8, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x0316, lo: 0xbd, hi: 0xbe}, + {value: 0x0553, lo: 0xbf, hi: 0xbf}, + // Block 0x3, offset 0x18 + {value: 0x0552, lo: 0x80, hi: 0x80}, + {value: 0x0316, lo: 0x81, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0316, lo: 0x85, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x034a, lo: 0x89, hi: 0x89}, + {value: 0x0117, lo: 0x8a, hi: 0xb7}, + {value: 0x0253, lo: 0xb8, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x0316, lo: 0xbd, hi: 0xbe}, + {value: 0x044a, lo: 0xbf, hi: 0xbf}, + // Block 0x4, offset 0x24 + {value: 0x0117, lo: 0x80, hi: 0x9f}, + {value: 0x2f53, lo: 0xa0, hi: 0xa0}, + {value: 0x0012, lo: 0xa1, hi: 0xa1}, + {value: 0x0117, lo: 0xa2, hi: 0xb3}, + {value: 0x0012, lo: 0xb4, hi: 0xb9}, + {value: 0x10cb, lo: 0xba, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x2953, lo: 0xbd, hi: 0xbd}, + {value: 0x11cb, lo: 0xbe, hi: 0xbe}, + {value: 0x12ca, lo: 0xbf, hi: 0xbf}, + // Block 0x5, offset 0x2e + {value: 0x0015, lo: 0x80, hi: 0x81}, + {value: 0x0004, lo: 0x82, hi: 0x85}, + {value: 0x0014, lo: 0x86, hi: 0x91}, + {value: 0x0004, lo: 0x92, hi: 0x96}, + {value: 0x0054, lo: 0x97, hi: 0x97}, + {value: 0x0004, lo: 0x98, hi: 0x9f}, + {value: 0x0015, lo: 0xa0, hi: 0xa4}, + {value: 0x0004, lo: 0xa5, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xac}, + {value: 0x0004, lo: 0xad, hi: 0xad}, + {value: 0x0014, lo: 0xae, hi: 0xae}, + {value: 0x0004, lo: 0xaf, hi: 0xbf}, + // Block 0x6, offset 0x3a + {value: 0x0024, lo: 0x80, hi: 0x94}, + {value: 0x0034, lo: 0x95, hi: 0xbc}, + {value: 0x0024, lo: 0xbd, hi: 0xbf}, + // Block 0x7, offset 0x3d + {value: 0x6553, lo: 0x80, hi: 0x8f}, + {value: 0x2013, lo: 0x90, hi: 0x9f}, + {value: 0x5f53, lo: 0xa0, hi: 0xaf}, + {value: 0x2012, lo: 0xb0, hi: 0xbf}, + // Block 0x8, offset 0x41 + {value: 0x5f52, lo: 0x80, hi: 0x8f}, + {value: 0x6552, lo: 0x90, hi: 0x9f}, + {value: 0x0117, lo: 0xa0, hi: 0xbf}, + // Block 0x9, offset 0x44 + {value: 0x0117, lo: 0x80, hi: 0x81}, + {value: 0x0024, lo: 0x83, hi: 0x87}, + {value: 0x0014, lo: 0x88, hi: 0x89}, + {value: 0x0117, lo: 0x8a, hi: 0xbf}, + // Block 0xa, offset 0x48 + {value: 0x0f13, lo: 0x80, hi: 0x80}, + {value: 0x0316, lo: 0x81, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0316, lo: 0x85, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x0316, lo: 0x89, hi: 0x8a}, + {value: 0x0716, lo: 0x8b, hi: 0x8c}, + {value: 0x0316, lo: 0x8d, hi: 0x8e}, + {value: 0x0f12, lo: 0x8f, hi: 0x8f}, + {value: 0x0117, lo: 0x90, hi: 0xbf}, + // Block 0xb, offset 0x52 + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x6553, lo: 0xb1, hi: 0xbf}, + // Block 0xc, offset 0x54 + {value: 0x3013, lo: 0x80, hi: 0x8f}, + {value: 0x6853, lo: 0x90, hi: 0x96}, + {value: 0x0014, lo: 0x99, hi: 0x99}, + {value: 0x6552, lo: 0xa1, hi: 0xaf}, + {value: 0x3012, lo: 0xb0, hi: 0xbf}, + // Block 0xd, offset 0x59 + {value: 0x6852, lo: 0x80, hi: 0x86}, + {value: 0x27aa, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x91, hi: 0x91}, + {value: 0x0024, lo: 0x92, hi: 0x95}, + {value: 0x0034, lo: 0x96, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x99}, + {value: 0x0034, lo: 0x9a, hi: 0x9b}, + {value: 0x0024, lo: 0x9c, hi: 0xa1}, + {value: 0x0034, lo: 0xa2, hi: 0xa7}, + {value: 0x0024, lo: 0xa8, hi: 0xa9}, + {value: 0x0034, lo: 0xaa, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xaf}, + {value: 0x0034, lo: 0xb0, hi: 0xbd}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xe, offset 0x69 + {value: 0x0034, lo: 0x81, hi: 0x82}, + {value: 0x0024, lo: 0x84, hi: 0x84}, + {value: 0x0034, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xb3}, + {value: 0x0054, lo: 0xb4, hi: 0xb4}, + // Block 0xf, offset 0x70 + {value: 0x0014, lo: 0x80, hi: 0x85}, + {value: 0x0024, lo: 0x90, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x9a}, + {value: 0x0014, lo: 0x9c, hi: 0x9c}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x10, offset 0x75 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x8a}, + {value: 0x0034, lo: 0x8b, hi: 0x92}, + {value: 0x0024, lo: 0x93, hi: 0x94}, + {value: 0x0034, lo: 0x95, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x9b}, + {value: 0x0034, lo: 0x9c, hi: 0x9c}, + {value: 0x0024, lo: 0x9d, hi: 0x9e}, + {value: 0x0034, lo: 0x9f, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0034, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xbf}, + // Block 0x11, offset 0x83 + {value: 0x0010, lo: 0x80, hi: 0xbf}, + // Block 0x12, offset 0x84 + {value: 0x0010, lo: 0x80, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x95}, + {value: 0x0024, lo: 0x96, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x0024, lo: 0x9f, hi: 0xa2}, + {value: 0x0034, lo: 0xa3, hi: 0xa3}, + {value: 0x0024, lo: 0xa4, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa8}, + {value: 0x0034, lo: 0xaa, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xbc}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x13, offset 0x92 + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0034, lo: 0x91, hi: 0x91}, + {value: 0x0010, lo: 0x92, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + {value: 0x0034, lo: 0xb1, hi: 0xb1}, + {value: 0x0024, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0024, lo: 0xb5, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb9}, + {value: 0x0024, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbc}, + {value: 0x0024, lo: 0xbd, hi: 0xbd}, + {value: 0x0034, lo: 0xbe, hi: 0xbe}, + {value: 0x0024, lo: 0xbf, hi: 0xbf}, + // Block 0x14, offset 0xa1 + {value: 0x0024, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0024, lo: 0x83, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0024, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0024, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x88, hi: 0x88}, + {value: 0x0024, lo: 0x89, hi: 0x8a}, + {value: 0x0010, lo: 0x8d, hi: 0xbf}, + // Block 0x15, offset 0xab + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0014, lo: 0xa6, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + // Block 0x16, offset 0xae + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xb1}, + {value: 0x0034, lo: 0xb2, hi: 0xb2}, + {value: 0x0024, lo: 0xb3, hi: 0xb3}, + {value: 0x0014, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + // Block 0x17, offset 0xb4 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0024, lo: 0x96, hi: 0x99}, + {value: 0x0014, lo: 0x9a, hi: 0x9a}, + {value: 0x0024, lo: 0x9b, hi: 0xa3}, + {value: 0x0014, lo: 0xa4, hi: 0xa4}, + {value: 0x0024, lo: 0xa5, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa8}, + {value: 0x0024, lo: 0xa9, hi: 0xad}, + // Block 0x18, offset 0xbc + {value: 0x0010, lo: 0x80, hi: 0x98}, + {value: 0x0034, lo: 0x99, hi: 0x9b}, + // Block 0x19, offset 0xbe + {value: 0x0010, lo: 0xa0, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbd}, + // Block 0x1a, offset 0xc0 + {value: 0x0024, lo: 0x94, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa2}, + {value: 0x0034, lo: 0xa3, hi: 0xa3}, + {value: 0x0024, lo: 0xa4, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xa9}, + {value: 0x0024, lo: 0xaa, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xb2}, + {value: 0x0024, lo: 0xb3, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + {value: 0x0024, lo: 0xb7, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0024, lo: 0xbb, hi: 0xbf}, + // Block 0x1b, offset 0xce + {value: 0x0014, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x1c, offset 0xd4 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0024, lo: 0x91, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x92}, + {value: 0x0024, lo: 0x93, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x97}, + {value: 0x0010, lo: 0x98, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xbf}, + // Block 0x1d, offset 0xe2 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb2}, + {value: 0x0010, lo: 0xb6, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x1e, offset 0xed + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9c, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xb1}, + // Block 0x1f, offset 0xf8 + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8a}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb6}, + {value: 0x0010, lo: 0xb8, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x20, offset 0x103 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0014, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x91, hi: 0x91}, + {value: 0x0010, lo: 0x99, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9e}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb5}, + // Block 0x21, offset 0x10f + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x22, offset 0x119 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x85}, + {value: 0x0014, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + // Block 0x23, offset 0x124 + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x24, offset 0x12f + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9c, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + // Block 0x25, offset 0x13b + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8a}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0x95}, + {value: 0x0010, lo: 0x99, hi: 0x9a}, + {value: 0x0010, lo: 0x9c, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + {value: 0x0010, lo: 0xa8, hi: 0xaa}, + {value: 0x0010, lo: 0xae, hi: 0xb9}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x26, offset 0x147 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x86, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + // Block 0x27, offset 0x14f + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb9}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbf}, + // Block 0x28, offset 0x157 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0014, lo: 0x86, hi: 0x88}, + {value: 0x0014, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0034, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9a}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + // Block 0x29, offset 0x161 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x2a, offset 0x16c + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0014, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x9e, hi: 0x9e}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xb2}, + // Block 0x2b, offset 0x178 + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xba}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x2c, offset 0x17e + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x86, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x94, hi: 0x97}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xba, hi: 0xbf}, + // Block 0x2d, offset 0x189 + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x96}, + {value: 0x0010, lo: 0x9a, hi: 0xb1}, + {value: 0x0010, lo: 0xb3, hi: 0xbb}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x2e, offset 0x18e + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0010, lo: 0x8f, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x94}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9f}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + // Block 0x2f, offset 0x196 + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb4, hi: 0xb7}, + {value: 0x0034, lo: 0xb8, hi: 0xba}, + // Block 0x30, offset 0x199 + {value: 0x0004, lo: 0x86, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x88, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x31, offset 0x19e + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb4, hi: 0xb7}, + {value: 0x0034, lo: 0xb8, hi: 0xb9}, + {value: 0x0014, lo: 0xbb, hi: 0xbc}, + // Block 0x32, offset 0x1a2 + {value: 0x0004, lo: 0x86, hi: 0x86}, + {value: 0x0034, lo: 0x88, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x33, offset 0x1a6 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0034, lo: 0x98, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0034, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0034, lo: 0xb9, hi: 0xb9}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x34, offset 0x1ad + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0x89, hi: 0xac}, + {value: 0x0034, lo: 0xb1, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xba, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x35, offset 0x1b6 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0024, lo: 0x82, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0024, lo: 0x86, hi: 0x87}, + {value: 0x0010, lo: 0x88, hi: 0x8c}, + {value: 0x0014, lo: 0x8d, hi: 0x97}, + {value: 0x0014, lo: 0x99, hi: 0xbc}, + // Block 0x36, offset 0x1be + {value: 0x0034, lo: 0x86, hi: 0x86}, + // Block 0x37, offset 0x1bf + {value: 0x0010, lo: 0xab, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0010, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbc}, + {value: 0x0014, lo: 0xbd, hi: 0xbe}, + // Block 0x38, offset 0x1c8 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x96, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x99}, + {value: 0x0014, lo: 0x9e, hi: 0xa0}, + {value: 0x0010, lo: 0xa2, hi: 0xa4}, + {value: 0x0010, lo: 0xa7, hi: 0xad}, + {value: 0x0014, lo: 0xb1, hi: 0xb4}, + // Block 0x39, offset 0x1cf + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x6c53, lo: 0xa0, hi: 0xbf}, + // Block 0x3a, offset 0x1d7 + {value: 0x7053, lo: 0x80, hi: 0x85}, + {value: 0x7053, lo: 0x87, hi: 0x87}, + {value: 0x7053, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0xba}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x3b, offset 0x1dd + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0x9a, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x3c, offset 0x1e3 + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb5}, + {value: 0x0010, lo: 0xb8, hi: 0xbe}, + // Block 0x3d, offset 0x1e8 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x82, hi: 0x85}, + {value: 0x0010, lo: 0x88, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0xbf}, + // Block 0x3e, offset 0x1ec + {value: 0x0010, lo: 0x80, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0x95}, + {value: 0x0010, lo: 0x98, hi: 0xbf}, + // Block 0x3f, offset 0x1ef + {value: 0x0010, lo: 0x80, hi: 0x9a}, + {value: 0x0024, lo: 0x9d, hi: 0x9f}, + // Block 0x40, offset 0x1f1 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x7453, lo: 0xa0, hi: 0xaf}, + {value: 0x7853, lo: 0xb0, hi: 0xbf}, + // Block 0x41, offset 0x1f4 + {value: 0x7c53, lo: 0x80, hi: 0x8f}, + {value: 0x8053, lo: 0x90, hi: 0x9f}, + {value: 0x7c53, lo: 0xa0, hi: 0xaf}, + {value: 0x0813, lo: 0xb0, hi: 0xb5}, + {value: 0x0892, lo: 0xb8, hi: 0xbd}, + // Block 0x42, offset 0x1f9 + {value: 0x0010, lo: 0x81, hi: 0xbf}, + // Block 0x43, offset 0x1fa + {value: 0x0010, lo: 0x80, hi: 0xac}, + {value: 0x0010, lo: 0xaf, hi: 0xbf}, + // Block 0x44, offset 0x1fc + {value: 0x0010, lo: 0x81, hi: 0x9a}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x45, offset 0x1fe + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0010, lo: 0xae, hi: 0xb8}, + // Block 0x46, offset 0x200 + {value: 0x0010, lo: 0x80, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x93}, + {value: 0x0034, lo: 0x94, hi: 0x94}, + {value: 0x0010, lo: 0xa0, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + // Block 0x47, offset 0x207 + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x93}, + {value: 0x0010, lo: 0xa0, hi: 0xac}, + {value: 0x0010, lo: 0xae, hi: 0xb0}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + // Block 0x48, offset 0x20c + {value: 0x0014, lo: 0xb4, hi: 0xb5}, + {value: 0x0010, lo: 0xb6, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x49, offset 0x210 + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0014, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x89, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x92}, + {value: 0x0014, lo: 0x93, hi: 0x93}, + {value: 0x0004, lo: 0x97, hi: 0x97}, + {value: 0x0024, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + // Block 0x4a, offset 0x219 + {value: 0x0014, lo: 0x8b, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x4b, offset 0x21c + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0xb7}, + // Block 0x4c, offset 0x21f + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xa9}, + {value: 0x0010, lo: 0xaa, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x4d, offset 0x225 + {value: 0x0010, lo: 0x80, hi: 0xb5}, + // Block 0x4e, offset 0x226 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0014, lo: 0xa0, hi: 0xa2}, + {value: 0x0010, lo: 0xa3, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xab}, + {value: 0x0010, lo: 0xb0, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb2}, + {value: 0x0010, lo: 0xb3, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xb9}, + {value: 0x0024, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbb}, + // Block 0x4f, offset 0x231 + {value: 0x0010, lo: 0x86, hi: 0x8f}, + // Block 0x50, offset 0x232 + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x51, offset 0x233 + {value: 0x0010, lo: 0x80, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0x99, hi: 0x9a}, + {value: 0x0014, lo: 0x9b, hi: 0x9b}, + // Block 0x52, offset 0x238 + {value: 0x0010, lo: 0x95, hi: 0x95}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x9e}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa2}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xac}, + {value: 0x0010, lo: 0xad, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0024, lo: 0xb5, hi: 0xbc}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x53, offset 0x245 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0004, lo: 0xa7, hi: 0xa7}, + {value: 0x0024, lo: 0xb0, hi: 0xb4}, + {value: 0x0034, lo: 0xb5, hi: 0xba}, + {value: 0x0024, lo: 0xbb, hi: 0xbc}, + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + // Block 0x54, offset 0x24d + {value: 0x0014, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x55, offset 0x255 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0030, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x8b}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0xab, hi: 0xab}, + {value: 0x0034, lo: 0xac, hi: 0xac}, + {value: 0x0024, lo: 0xad, hi: 0xb3}, + // Block 0x56, offset 0x25e + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa9}, + {value: 0x0030, lo: 0xaa, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xbf}, + // Block 0x57, offset 0x267 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa9}, + {value: 0x0010, lo: 0xaa, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb1}, + {value: 0x0030, lo: 0xb2, hi: 0xb3}, + // Block 0x58, offset 0x270 + {value: 0x0010, lo: 0x80, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + // Block 0x59, offset 0x275 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8d, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + // Block 0x5a, offset 0x278 + {value: 0x296a, lo: 0x80, hi: 0x80}, + {value: 0x2a2a, lo: 0x81, hi: 0x81}, + {value: 0x2aea, lo: 0x82, hi: 0x82}, + {value: 0x2baa, lo: 0x83, hi: 0x83}, + {value: 0x2c6a, lo: 0x84, hi: 0x84}, + {value: 0x2d2a, lo: 0x85, hi: 0x85}, + {value: 0x2dea, lo: 0x86, hi: 0x86}, + {value: 0x2eaa, lo: 0x87, hi: 0x87}, + {value: 0x2f6a, lo: 0x88, hi: 0x88}, + // Block 0x5b, offset 0x281 + {value: 0x0024, lo: 0x90, hi: 0x92}, + {value: 0x0034, lo: 0x94, hi: 0x99}, + {value: 0x0024, lo: 0x9a, hi: 0x9b}, + {value: 0x0034, lo: 0x9c, hi: 0x9f}, + {value: 0x0024, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0034, lo: 0xa2, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xb3}, + {value: 0x0024, lo: 0xb4, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb6}, + {value: 0x0024, lo: 0xb8, hi: 0xb9}, + // Block 0x5c, offset 0x28e + {value: 0x0012, lo: 0x80, hi: 0xab}, + {value: 0x0015, lo: 0xac, hi: 0xbf}, + // Block 0x5d, offset 0x290 + {value: 0x0015, lo: 0x80, hi: 0xaa}, + {value: 0x0012, lo: 0xab, hi: 0xb7}, + {value: 0x0015, lo: 0xb8, hi: 0xb8}, + {value: 0x8452, lo: 0xb9, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xbc}, + {value: 0x8852, lo: 0xbd, hi: 0xbd}, + {value: 0x0012, lo: 0xbe, hi: 0xbf}, + // Block 0x5e, offset 0x297 + {value: 0x0012, lo: 0x80, hi: 0x9a}, + {value: 0x0015, lo: 0x9b, hi: 0xbf}, + // Block 0x5f, offset 0x299 + {value: 0x0024, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0024, lo: 0x83, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0024, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x90}, + {value: 0x0024, lo: 0x91, hi: 0xb5}, + {value: 0x0024, lo: 0xbb, hi: 0xbb}, + {value: 0x0034, lo: 0xbc, hi: 0xbd}, + {value: 0x0024, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x60, offset 0x2a4 + {value: 0x0117, lo: 0x80, hi: 0xbf}, + // Block 0x61, offset 0x2a5 + {value: 0x0117, lo: 0x80, hi: 0x95}, + {value: 0x306a, lo: 0x96, hi: 0x96}, + {value: 0x316a, lo: 0x97, hi: 0x97}, + {value: 0x326a, lo: 0x98, hi: 0x98}, + {value: 0x336a, lo: 0x99, hi: 0x99}, + {value: 0x346a, lo: 0x9a, hi: 0x9a}, + {value: 0x356a, lo: 0x9b, hi: 0x9b}, + {value: 0x0012, lo: 0x9c, hi: 0x9d}, + {value: 0x366b, lo: 0x9e, hi: 0x9e}, + {value: 0x0012, lo: 0x9f, hi: 0x9f}, + {value: 0x0117, lo: 0xa0, hi: 0xbf}, + // Block 0x62, offset 0x2b0 + {value: 0x0812, lo: 0x80, hi: 0x87}, + {value: 0x0813, lo: 0x88, hi: 0x8f}, + {value: 0x0812, lo: 0x90, hi: 0x95}, + {value: 0x0813, lo: 0x98, hi: 0x9d}, + {value: 0x0812, lo: 0xa0, hi: 0xa7}, + {value: 0x0813, lo: 0xa8, hi: 0xaf}, + {value: 0x0812, lo: 0xb0, hi: 0xb7}, + {value: 0x0813, lo: 0xb8, hi: 0xbf}, + // Block 0x63, offset 0x2b8 + {value: 0x0004, lo: 0x8b, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8f}, + {value: 0x0054, lo: 0x98, hi: 0x99}, + {value: 0x0054, lo: 0xa4, hi: 0xa4}, + {value: 0x0054, lo: 0xa7, hi: 0xa7}, + {value: 0x0014, lo: 0xaa, hi: 0xae}, + {value: 0x0010, lo: 0xaf, hi: 0xaf}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x64, offset 0x2c0 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x94, hi: 0x94}, + {value: 0x0014, lo: 0xa0, hi: 0xa4}, + {value: 0x0014, lo: 0xa6, hi: 0xaf}, + {value: 0x0015, lo: 0xb1, hi: 0xb1}, + {value: 0x0015, lo: 0xbf, hi: 0xbf}, + // Block 0x65, offset 0x2c6 + {value: 0x0015, lo: 0x90, hi: 0x9c}, + // Block 0x66, offset 0x2c7 + {value: 0x0024, lo: 0x90, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x93}, + {value: 0x0024, lo: 0x94, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x9a}, + {value: 0x0024, lo: 0x9b, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0xa0}, + {value: 0x0024, lo: 0xa1, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa4}, + {value: 0x0034, lo: 0xa5, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa7}, + {value: 0x0034, lo: 0xa8, hi: 0xa8}, + {value: 0x0024, lo: 0xa9, hi: 0xa9}, + {value: 0x0034, lo: 0xaa, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + // Block 0x67, offset 0x2d5 + {value: 0x0016, lo: 0x85, hi: 0x86}, + {value: 0x0012, lo: 0x87, hi: 0x89}, + {value: 0x9d52, lo: 0x8e, hi: 0x8e}, + {value: 0x1013, lo: 0xa0, hi: 0xaf}, + {value: 0x1012, lo: 0xb0, hi: 0xbf}, + // Block 0x68, offset 0x2da + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x88}, + // Block 0x69, offset 0x2dd + {value: 0xa053, lo: 0xb6, hi: 0xb7}, + {value: 0xa353, lo: 0xb8, hi: 0xb9}, + {value: 0xa653, lo: 0xba, hi: 0xbb}, + {value: 0xa353, lo: 0xbc, hi: 0xbd}, + {value: 0xa053, lo: 0xbe, hi: 0xbf}, + // Block 0x6a, offset 0x2e2 + {value: 0x3013, lo: 0x80, hi: 0x8f}, + {value: 0x6553, lo: 0x90, hi: 0x9f}, + {value: 0xa953, lo: 0xa0, hi: 0xae}, + {value: 0x3012, lo: 0xb0, hi: 0xbf}, + // Block 0x6b, offset 0x2e6 + {value: 0x0117, lo: 0x80, hi: 0xa3}, + {value: 0x0012, lo: 0xa4, hi: 0xa4}, + {value: 0x0716, lo: 0xab, hi: 0xac}, + {value: 0x0316, lo: 0xad, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xb3}, + // Block 0x6c, offset 0x2ec + {value: 0x6c52, lo: 0x80, hi: 0x9f}, + {value: 0x7052, lo: 0xa0, hi: 0xa5}, + {value: 0x7052, lo: 0xa7, hi: 0xa7}, + {value: 0x7052, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x6d, offset 0x2f1 + {value: 0x0010, lo: 0x80, hi: 0xa7}, + {value: 0x0014, lo: 0xaf, hi: 0xaf}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x6e, offset 0x2f4 + {value: 0x0010, lo: 0x80, hi: 0x96}, + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xae}, + {value: 0x0010, lo: 0xb0, hi: 0xb6}, + {value: 0x0010, lo: 0xb8, hi: 0xbe}, + // Block 0x6f, offset 0x2f9 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9e}, + {value: 0x0024, lo: 0xa0, hi: 0xbf}, + // Block 0x70, offset 0x2fe + {value: 0x0014, lo: 0xaf, hi: 0xaf}, + // Block 0x71, offset 0x2ff + {value: 0x0014, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0xaa, hi: 0xad}, + {value: 0x0030, lo: 0xae, hi: 0xaf}, + {value: 0x0004, lo: 0xb1, hi: 0xb5}, + {value: 0x0014, lo: 0xbb, hi: 0xbb}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + // Block 0x72, offset 0x305 + {value: 0x0034, lo: 0x99, hi: 0x9a}, + {value: 0x0004, lo: 0x9b, hi: 0x9e}, + // Block 0x73, offset 0x307 + {value: 0x0004, lo: 0xbc, hi: 0xbe}, + // Block 0x74, offset 0x308 + {value: 0x0010, lo: 0x85, hi: 0xad}, + {value: 0x0010, lo: 0xb1, hi: 0xbf}, + // Block 0x75, offset 0x30a + {value: 0x0010, lo: 0x80, hi: 0x8e}, + {value: 0x0010, lo: 0xa0, hi: 0xba}, + // Block 0x76, offset 0x30c + {value: 0x0010, lo: 0x80, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0x96, hi: 0xbf}, + // Block 0x77, offset 0x30f + {value: 0x0010, lo: 0x80, hi: 0x8c}, + // Block 0x78, offset 0x310 + {value: 0x0010, lo: 0x90, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + // Block 0x79, offset 0x312 + {value: 0x0010, lo: 0x80, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0010, lo: 0x90, hi: 0xab}, + // Block 0x7a, offset 0x315 + {value: 0x0117, lo: 0x80, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb2}, + {value: 0x0024, lo: 0xb4, hi: 0xbd}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x7b, offset 0x31b + {value: 0x0117, lo: 0x80, hi: 0x9b}, + {value: 0x0015, lo: 0x9c, hi: 0x9d}, + {value: 0x0024, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x7c, offset 0x31f + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb1}, + // Block 0x7d, offset 0x321 + {value: 0x0004, lo: 0x80, hi: 0x96}, + {value: 0x0014, lo: 0x97, hi: 0x9f}, + {value: 0x0004, lo: 0xa0, hi: 0xa1}, + {value: 0x0117, lo: 0xa2, hi: 0xaf}, + {value: 0x0012, lo: 0xb0, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xbf}, + // Block 0x7e, offset 0x327 + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x0015, lo: 0xb0, hi: 0xb0}, + {value: 0x0012, lo: 0xb1, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x8453, lo: 0xbd, hi: 0xbd}, + {value: 0x0117, lo: 0xbe, hi: 0xbf}, + // Block 0x7f, offset 0x32e + {value: 0x0010, lo: 0xb7, hi: 0xb7}, + {value: 0x0015, lo: 0xb8, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbf}, + // Block 0x80, offset 0x332 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8b}, + {value: 0x0010, lo: 0x8c, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa6}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + // Block 0x81, offset 0x33b + {value: 0x0010, lo: 0x80, hi: 0xb3}, + // Block 0x82, offset 0x33c + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x85}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0xa0, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb7}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x83, offset 0x344 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0014, lo: 0xa6, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x84, offset 0x348 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x91}, + {value: 0x0010, lo: 0x92, hi: 0x92}, + {value: 0x0030, lo: 0x93, hi: 0x93}, + {value: 0x0010, lo: 0xa0, hi: 0xbc}, + // Block 0x85, offset 0x34d + {value: 0x0014, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xb9}, + {value: 0x0010, lo: 0xba, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x86, offset 0x355 + {value: 0x0030, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0014, lo: 0xa5, hi: 0xa5}, + {value: 0x0004, lo: 0xa6, hi: 0xa6}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x87, offset 0x35b + {value: 0x0010, lo: 0x80, hi: 0xa8}, + {value: 0x0014, lo: 0xa9, hi: 0xae}, + {value: 0x0010, lo: 0xaf, hi: 0xb0}, + {value: 0x0014, lo: 0xb1, hi: 0xb2}, + {value: 0x0010, lo: 0xb3, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb6}, + // Block 0x88, offset 0x361 + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0010, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0004, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x89, offset 0x36b + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + {value: 0x0024, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0024, lo: 0xb7, hi: 0xb8}, + {value: 0x0024, lo: 0xbe, hi: 0xbf}, + // Block 0x8a, offset 0x370 + {value: 0x0024, lo: 0x81, hi: 0x81}, + {value: 0x0004, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0010, lo: 0xb2, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + // Block 0x8b, offset 0x379 + {value: 0x0010, lo: 0x81, hi: 0x86}, + {value: 0x0010, lo: 0x89, hi: 0x8e}, + {value: 0x0010, lo: 0x91, hi: 0x96}, + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xae}, + {value: 0x0012, lo: 0xb0, hi: 0xbf}, + // Block 0x8c, offset 0x37f + {value: 0x0012, lo: 0x80, hi: 0x92}, + {value: 0xac52, lo: 0x93, hi: 0x93}, + {value: 0x0012, lo: 0x94, hi: 0x9a}, + {value: 0x0004, lo: 0x9b, hi: 0x9b}, + {value: 0x0015, lo: 0x9c, hi: 0x9f}, + {value: 0x0012, lo: 0xa0, hi: 0xa5}, + {value: 0x74d2, lo: 0xb0, hi: 0xbf}, + // Block 0x8d, offset 0x386 + {value: 0x78d2, lo: 0x80, hi: 0x8f}, + {value: 0x7cd2, lo: 0x90, hi: 0x9f}, + {value: 0x80d2, lo: 0xa0, hi: 0xaf}, + {value: 0x7cd2, lo: 0xb0, hi: 0xbf}, + // Block 0x8e, offset 0x38a + {value: 0x0010, lo: 0x80, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xaa}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x8f, offset 0x392 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x90, offset 0x394 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x8b, hi: 0xbb}, + // Block 0x91, offset 0x396 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x86, hi: 0xbf}, + // Block 0x92, offset 0x399 + {value: 0x0010, lo: 0x80, hi: 0xb1}, + {value: 0x0004, lo: 0xb2, hi: 0xbf}, + // Block 0x93, offset 0x39b + {value: 0x0004, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x93, hi: 0xbf}, + // Block 0x94, offset 0x39d + {value: 0x0010, lo: 0x80, hi: 0xbd}, + // Block 0x95, offset 0x39e + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0x96, offset 0x39f + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x0010, lo: 0x92, hi: 0xbf}, + // Block 0x97, offset 0x3a1 + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0xb0, hi: 0xbb}, + // Block 0x98, offset 0x3a3 + {value: 0x0014, lo: 0x80, hi: 0x8f}, + {value: 0x0054, lo: 0x93, hi: 0x93}, + {value: 0x0024, lo: 0xa0, hi: 0xa6}, + {value: 0x0034, lo: 0xa7, hi: 0xad}, + {value: 0x0024, lo: 0xae, hi: 0xaf}, + {value: 0x0010, lo: 0xb3, hi: 0xb4}, + // Block 0x99, offset 0x3a9 + {value: 0x0010, lo: 0x8d, hi: 0x8f}, + {value: 0x0054, lo: 0x92, hi: 0x92}, + {value: 0x0054, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0xb0, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbf}, + // Block 0x9a, offset 0x3ae + {value: 0x0010, lo: 0x80, hi: 0xbc}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x9b, offset 0x3b0 + {value: 0x0054, lo: 0x87, hi: 0x87}, + {value: 0x0054, lo: 0x8e, hi: 0x8e}, + {value: 0x0054, lo: 0x9a, hi: 0x9a}, + {value: 0x5f53, lo: 0xa1, hi: 0xba}, + {value: 0x0004, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x9c, offset 0x3b6 + {value: 0x0004, lo: 0x80, hi: 0x80}, + {value: 0x5f52, lo: 0x81, hi: 0x9a}, + {value: 0x0004, lo: 0xb0, hi: 0xb0}, + // Block 0x9d, offset 0x3b9 + {value: 0x0014, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbe}, + // Block 0x9e, offset 0x3bb + {value: 0x0010, lo: 0x82, hi: 0x87}, + {value: 0x0010, lo: 0x8a, hi: 0x8f}, + {value: 0x0010, lo: 0x92, hi: 0x97}, + {value: 0x0010, lo: 0x9a, hi: 0x9c}, + {value: 0x0004, lo: 0xa3, hi: 0xa3}, + {value: 0x0014, lo: 0xb9, hi: 0xbb}, + // Block 0x9f, offset 0x3c1 + {value: 0x0010, lo: 0x80, hi: 0x8b}, + {value: 0x0010, lo: 0x8d, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xba}, + {value: 0x0010, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xa0, offset 0x3c6 + {value: 0x0010, lo: 0x80, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x9d}, + // Block 0xa1, offset 0x3c8 + {value: 0x0010, lo: 0x80, hi: 0xba}, + // Block 0xa2, offset 0x3c9 + {value: 0x0010, lo: 0x80, hi: 0xb4}, + // Block 0xa3, offset 0x3ca + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + // Block 0xa4, offset 0x3cb + {value: 0x0010, lo: 0x80, hi: 0x9c}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xa5, offset 0x3cd + {value: 0x0010, lo: 0x80, hi: 0x90}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + // Block 0xa6, offset 0x3cf + {value: 0x0010, lo: 0x80, hi: 0x9f}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xa7, offset 0x3d1 + {value: 0x0010, lo: 0x80, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0xb5}, + {value: 0x0024, lo: 0xb6, hi: 0xba}, + // Block 0xa8, offset 0x3d4 + {value: 0x0010, lo: 0x80, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xa9, offset 0x3d6 + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x88, hi: 0x8f}, + {value: 0x0010, lo: 0x91, hi: 0x95}, + // Block 0xaa, offset 0x3d9 + {value: 0x2813, lo: 0x80, hi: 0x87}, + {value: 0x3813, lo: 0x88, hi: 0x8f}, + {value: 0x2813, lo: 0x90, hi: 0x97}, + {value: 0xaf53, lo: 0x98, hi: 0x9f}, + {value: 0xb253, lo: 0xa0, hi: 0xa7}, + {value: 0x2812, lo: 0xa8, hi: 0xaf}, + {value: 0x3812, lo: 0xb0, hi: 0xb7}, + {value: 0x2812, lo: 0xb8, hi: 0xbf}, + // Block 0xab, offset 0x3e1 + {value: 0xaf52, lo: 0x80, hi: 0x87}, + {value: 0xb252, lo: 0x88, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0xac, offset 0x3e4 + {value: 0x0010, lo: 0x80, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0xb253, lo: 0xb0, hi: 0xb7}, + {value: 0xaf53, lo: 0xb8, hi: 0xbf}, + // Block 0xad, offset 0x3e8 + {value: 0x2813, lo: 0x80, hi: 0x87}, + {value: 0x3813, lo: 0x88, hi: 0x8f}, + {value: 0x2813, lo: 0x90, hi: 0x93}, + {value: 0xb252, lo: 0x98, hi: 0x9f}, + {value: 0xaf52, lo: 0xa0, hi: 0xa7}, + {value: 0x2812, lo: 0xa8, hi: 0xaf}, + {value: 0x3812, lo: 0xb0, hi: 0xb7}, + {value: 0x2812, lo: 0xb8, hi: 0xbb}, + // Block 0xae, offset 0x3f0 + {value: 0x0010, lo: 0x80, hi: 0xa7}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xaf, offset 0x3f2 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + // Block 0xb0, offset 0x3f3 + {value: 0x0010, lo: 0x80, hi: 0xb6}, + // Block 0xb1, offset 0x3f4 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xa7}, + // Block 0xb2, offset 0x3f6 + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0010, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0xb5}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xb3, offset 0x3fc + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb6}, + // Block 0xb4, offset 0x3fe + {value: 0x0010, lo: 0x80, hi: 0x9e}, + // Block 0xb5, offset 0x3ff + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + // Block 0xb6, offset 0x401 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb9}, + // Block 0xb7, offset 0x403 + {value: 0x0010, lo: 0x80, hi: 0xb7}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0xb8, offset 0x405 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x83}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x8e, hi: 0x8e}, + {value: 0x0024, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x97}, + {value: 0x0010, lo: 0x99, hi: 0xb3}, + {value: 0x0024, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xb9, offset 0x412 + {value: 0x0010, lo: 0xa0, hi: 0xbc}, + // Block 0xba, offset 0x413 + {value: 0x0010, lo: 0x80, hi: 0x9c}, + // Block 0xbb, offset 0x414 + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0x89, hi: 0xa4}, + {value: 0x0024, lo: 0xa5, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + // Block 0xbc, offset 0x418 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + // Block 0xbd, offset 0x41a + {value: 0x0010, lo: 0x80, hi: 0x91}, + // Block 0xbe, offset 0x41b + {value: 0x0010, lo: 0x80, hi: 0x88}, + // Block 0xbf, offset 0x41c + {value: 0x5653, lo: 0x80, hi: 0xb2}, + // Block 0xc0, offset 0x41d + {value: 0x5652, lo: 0x80, hi: 0xb2}, + // Block 0xc1, offset 0x41e + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbf}, + // Block 0xc2, offset 0x422 + {value: 0x0014, lo: 0x80, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xc3, offset 0x426 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb6}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0014, lo: 0xbd, hi: 0xbd}, + // Block 0xc4, offset 0x42c + {value: 0x0010, lo: 0x90, hi: 0xa8}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xc5, offset 0x42e + {value: 0x0024, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xab}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbf}, + // Block 0xc6, offset 0x435 + {value: 0x0010, lo: 0x90, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb3}, + {value: 0x0010, lo: 0xb6, hi: 0xb6}, + // Block 0xc7, offset 0x438 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xc8, offset 0x43c + {value: 0x0030, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8c}, + {value: 0x0010, lo: 0x90, hi: 0x9a}, + {value: 0x0010, lo: 0x9c, hi: 0x9c}, + // Block 0xc9, offset 0x442 + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0014, lo: 0xb4, hi: 0xb4}, + {value: 0x0030, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xb7}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + // Block 0xca, offset 0x44b + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa8}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xcb, offset 0x451 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0014, lo: 0x9f, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa2}, + {value: 0x0014, lo: 0xa3, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xcc, offset 0x457 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0xcd, offset 0x461 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0030, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9d, hi: 0xa3}, + {value: 0x0024, lo: 0xa6, hi: 0xac}, + {value: 0x0024, lo: 0xb0, hi: 0xb4}, + // Block 0xce, offset 0x46b + {value: 0x0010, lo: 0x80, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbf}, + // Block 0xcf, offset 0x46d + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd0, offset 0x474 + {value: 0x0010, lo: 0x80, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb8}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0xd1, offset 0x47a + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0x85}, + {value: 0x0010, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd2, offset 0x480 + {value: 0x0010, lo: 0x80, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb5}, + {value: 0x0010, lo: 0xb8, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xd3, offset 0x486 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x98, hi: 0x9b}, + {value: 0x0014, lo: 0x9c, hi: 0x9d}, + // Block 0xd4, offset 0x489 + {value: 0x0010, lo: 0x80, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbc}, + {value: 0x0014, lo: 0xbd, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xd5, offset 0x48f + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd6, offset 0x492 + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0014, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb5}, + {value: 0x0030, lo: 0xb6, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + // Block 0xd7, offset 0x49a + {value: 0x0010, lo: 0x80, hi: 0x89}, + // Block 0xd8, offset 0x49b + {value: 0x0014, lo: 0x9d, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xd9, offset 0x4a2 + {value: 0x5f53, lo: 0xa0, hi: 0xbf}, + // Block 0xda, offset 0x4a3 + {value: 0x5f52, lo: 0x80, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xdb, offset 0x4a6 + {value: 0x0010, lo: 0x80, hi: 0xb8}, + // Block 0xdc, offset 0x4a7 + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb6}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xdd, offset 0x4ad + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xb2, hi: 0xbf}, + // Block 0xde, offset 0x4b0 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x0014, lo: 0x92, hi: 0xa7}, + {value: 0x0010, lo: 0xa9, hi: 0xa9}, + {value: 0x0014, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb6}, + // Block 0xdf, offset 0x4b8 + {value: 0x0010, lo: 0x80, hi: 0x99}, + // Block 0xe0, offset 0x4b9 + {value: 0x0010, lo: 0x80, hi: 0xae}, + // Block 0xe1, offset 0x4ba + {value: 0x0010, lo: 0x80, hi: 0x83}, + // Block 0xe2, offset 0x4bb + {value: 0x0010, lo: 0x80, hi: 0x86}, + // Block 0xe3, offset 0x4bc + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + // Block 0xe4, offset 0x4be + {value: 0x0010, lo: 0x90, hi: 0xad}, + {value: 0x0034, lo: 0xb0, hi: 0xb4}, + // Block 0xe5, offset 0x4c0 + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb6}, + // Block 0xe6, offset 0x4c2 + {value: 0x0014, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa3, hi: 0xb7}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0xe7, offset 0x4c6 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + // Block 0xe8, offset 0x4c7 + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0010, lo: 0x90, hi: 0xbe}, + // Block 0xe9, offset 0x4c9 + {value: 0x0014, lo: 0x8f, hi: 0x9f}, + // Block 0xea, offset 0x4ca + {value: 0x0014, lo: 0xa0, hi: 0xa0}, + // Block 0xeb, offset 0x4cb + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbc}, + // Block 0xec, offset 0x4cd + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x0034, lo: 0x9e, hi: 0x9e}, + {value: 0x0014, lo: 0xa0, hi: 0xa3}, + // Block 0xed, offset 0x4d2 + {value: 0x0030, lo: 0xa5, hi: 0xa6}, + {value: 0x0034, lo: 0xa7, hi: 0xa9}, + {value: 0x0030, lo: 0xad, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbf}, + // Block 0xee, offset 0x4d7 + {value: 0x0034, lo: 0x80, hi: 0x82}, + {value: 0x0024, lo: 0x85, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8b}, + {value: 0x0024, lo: 0xaa, hi: 0xad}, + // Block 0xef, offset 0x4db + {value: 0x0024, lo: 0x82, hi: 0x84}, + // Block 0xf0, offset 0x4dc + {value: 0x0013, lo: 0x80, hi: 0x99}, + {value: 0x0012, lo: 0x9a, hi: 0xb3}, + {value: 0x0013, lo: 0xb4, hi: 0xbf}, + // Block 0xf1, offset 0x4df + {value: 0x0013, lo: 0x80, hi: 0x8d}, + {value: 0x0012, lo: 0x8e, hi: 0x94}, + {value: 0x0012, lo: 0x96, hi: 0xa7}, + {value: 0x0013, lo: 0xa8, hi: 0xbf}, + // Block 0xf2, offset 0x4e3 + {value: 0x0013, lo: 0x80, hi: 0x81}, + {value: 0x0012, lo: 0x82, hi: 0x9b}, + {value: 0x0013, lo: 0x9c, hi: 0x9c}, + {value: 0x0013, lo: 0x9e, hi: 0x9f}, + {value: 0x0013, lo: 0xa2, hi: 0xa2}, + {value: 0x0013, lo: 0xa5, hi: 0xa6}, + {value: 0x0013, lo: 0xa9, hi: 0xac}, + {value: 0x0013, lo: 0xae, hi: 0xb5}, + {value: 0x0012, lo: 0xb6, hi: 0xb9}, + {value: 0x0012, lo: 0xbb, hi: 0xbb}, + {value: 0x0012, lo: 0xbd, hi: 0xbf}, + // Block 0xf3, offset 0x4ee + {value: 0x0012, lo: 0x80, hi: 0x83}, + {value: 0x0012, lo: 0x85, hi: 0x8f}, + {value: 0x0013, lo: 0x90, hi: 0xa9}, + {value: 0x0012, lo: 0xaa, hi: 0xbf}, + // Block 0xf4, offset 0x4f2 + {value: 0x0012, lo: 0x80, hi: 0x83}, + {value: 0x0013, lo: 0x84, hi: 0x85}, + {value: 0x0013, lo: 0x87, hi: 0x8a}, + {value: 0x0013, lo: 0x8d, hi: 0x94}, + {value: 0x0013, lo: 0x96, hi: 0x9c}, + {value: 0x0012, lo: 0x9e, hi: 0xb7}, + {value: 0x0013, lo: 0xb8, hi: 0xb9}, + {value: 0x0013, lo: 0xbb, hi: 0xbe}, + // Block 0xf5, offset 0x4fa + {value: 0x0013, lo: 0x80, hi: 0x84}, + {value: 0x0013, lo: 0x86, hi: 0x86}, + {value: 0x0013, lo: 0x8a, hi: 0x90}, + {value: 0x0012, lo: 0x92, hi: 0xab}, + {value: 0x0013, lo: 0xac, hi: 0xbf}, + // Block 0xf6, offset 0x4ff + {value: 0x0013, lo: 0x80, hi: 0x85}, + {value: 0x0012, lo: 0x86, hi: 0x9f}, + {value: 0x0013, lo: 0xa0, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xbf}, + // Block 0xf7, offset 0x503 + {value: 0x0012, lo: 0x80, hi: 0x93}, + {value: 0x0013, lo: 0x94, hi: 0xad}, + {value: 0x0012, lo: 0xae, hi: 0xbf}, + // Block 0xf8, offset 0x506 + {value: 0x0012, lo: 0x80, hi: 0x87}, + {value: 0x0013, lo: 0x88, hi: 0xa1}, + {value: 0x0012, lo: 0xa2, hi: 0xbb}, + {value: 0x0013, lo: 0xbc, hi: 0xbf}, + // Block 0xf9, offset 0x50a + {value: 0x0013, lo: 0x80, hi: 0x95}, + {value: 0x0012, lo: 0x96, hi: 0xaf}, + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0xfa, offset 0x50d + {value: 0x0013, lo: 0x80, hi: 0x89}, + {value: 0x0012, lo: 0x8a, hi: 0xa5}, + {value: 0x0013, lo: 0xa8, hi: 0xbf}, + // Block 0xfb, offset 0x510 + {value: 0x0013, lo: 0x80, hi: 0x80}, + {value: 0x0012, lo: 0x82, hi: 0x9a}, + {value: 0x0012, lo: 0x9c, hi: 0xa1}, + {value: 0x0013, lo: 0xa2, hi: 0xba}, + {value: 0x0012, lo: 0xbc, hi: 0xbf}, + // Block 0xfc, offset 0x515 + {value: 0x0012, lo: 0x80, hi: 0x94}, + {value: 0x0012, lo: 0x96, hi: 0x9b}, + {value: 0x0013, lo: 0x9c, hi: 0xb4}, + {value: 0x0012, lo: 0xb6, hi: 0xbf}, + // Block 0xfd, offset 0x519 + {value: 0x0012, lo: 0x80, hi: 0x8e}, + {value: 0x0012, lo: 0x90, hi: 0x95}, + {value: 0x0013, lo: 0x96, hi: 0xae}, + {value: 0x0012, lo: 0xb0, hi: 0xbf}, + // Block 0xfe, offset 0x51d + {value: 0x0012, lo: 0x80, hi: 0x88}, + {value: 0x0012, lo: 0x8a, hi: 0x8f}, + {value: 0x0013, lo: 0x90, hi: 0xa8}, + {value: 0x0012, lo: 0xaa, hi: 0xbf}, + // Block 0xff, offset 0x521 + {value: 0x0012, lo: 0x80, hi: 0x82}, + {value: 0x0012, lo: 0x84, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8b}, + {value: 0x0010, lo: 0x8e, hi: 0xbf}, + // Block 0x100, offset 0x525 + {value: 0x0014, lo: 0x80, hi: 0xb6}, + {value: 0x0014, lo: 0xbb, hi: 0xbf}, + // Block 0x101, offset 0x527 + {value: 0x0014, lo: 0x80, hi: 0xac}, + {value: 0x0014, lo: 0xb5, hi: 0xb5}, + // Block 0x102, offset 0x529 + {value: 0x0014, lo: 0x84, hi: 0x84}, + {value: 0x0014, lo: 0x9b, hi: 0x9f}, + {value: 0x0014, lo: 0xa1, hi: 0xaf}, + // Block 0x103, offset 0x52c + {value: 0x0024, lo: 0x80, hi: 0x86}, + {value: 0x0024, lo: 0x88, hi: 0x98}, + {value: 0x0024, lo: 0x9b, hi: 0xa1}, + {value: 0x0024, lo: 0xa3, hi: 0xa4}, + {value: 0x0024, lo: 0xa6, hi: 0xaa}, + // Block 0x104, offset 0x531 + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0034, lo: 0x90, hi: 0x96}, + // Block 0x105, offset 0x533 + {value: 0xb552, lo: 0x80, hi: 0x81}, + {value: 0xb852, lo: 0x82, hi: 0x83}, + {value: 0x0024, lo: 0x84, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x106, offset 0x538 + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x9f}, + {value: 0x0010, lo: 0xa1, hi: 0xa2}, + {value: 0x0010, lo: 0xa4, hi: 0xa4}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0010, lo: 0xa9, hi: 0xb2}, + {value: 0x0010, lo: 0xb4, hi: 0xb7}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + // Block 0x107, offset 0x541 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0x9b}, + {value: 0x0010, lo: 0xa1, hi: 0xa3}, + {value: 0x0010, lo: 0xa5, hi: 0xa9}, + {value: 0x0010, lo: 0xab, hi: 0xbb}, + // Block 0x108, offset 0x546 + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x109, offset 0x547 + {value: 0x0013, lo: 0x80, hi: 0x89}, + {value: 0x0013, lo: 0x90, hi: 0xa9}, + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x10a, offset 0x54a + {value: 0x0013, lo: 0x80, hi: 0x89}, + // Block 0x10b, offset 0x54b + {value: 0x0004, lo: 0xbb, hi: 0xbf}, + // Block 0x10c, offset 0x54c + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0014, lo: 0xa0, hi: 0xbf}, + // Block 0x10d, offset 0x54e + {value: 0x0014, lo: 0x80, hi: 0xbf}, + // Block 0x10e, offset 0x54f + {value: 0x0014, lo: 0x80, hi: 0xaf}, +} + +// Total table size 13811 bytes (13KiB); checksum: 4CC48DA3 diff --git a/vendor/golang.org/x/text/cases/tables_test.go b/vendor/golang.org/x/text/cases/tables_test.go new file mode 100644 index 0000000..85ae237 --- /dev/null +++ b/vendor/golang.org/x/text/cases/tables_test.go @@ -0,0 +1,1154 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package cases + +var ( + caseIgnorable = map[rune]bool{ + 0x0027: true, + 0x002e: true, + 0x003a: true, + 0x00b7: true, + 0x0387: true, + 0x05f4: true, + 0x2018: true, + 0x2019: true, + 0x2024: true, + 0x2027: true, + 0xfe13: true, + 0xfe52: true, + 0xfe55: true, + 0xff07: true, + 0xff0e: true, + 0xff1a: true, + } + + special = map[rune]struct{ toLower, toTitle, toUpper string }{ + 0x00df: {"ß", "Ss", "SS"}, + 0x0130: {"i̇", "İ", "İ"}, + 0xfb00: {"ff", "Ff", "FF"}, + 0xfb01: {"fi", "Fi", "FI"}, + 0xfb02: {"fl", "Fl", "FL"}, + 0xfb03: {"ffi", "Ffi", "FFI"}, + 0xfb04: {"ffl", "Ffl", "FFL"}, + 0xfb05: {"ſt", "St", "ST"}, + 0xfb06: {"st", "St", "ST"}, + 0x0587: {"և", "Եւ", "ԵՒ"}, + 0xfb13: {"ﬓ", "Մն", "ՄՆ"}, + 0xfb14: {"ﬔ", "Մե", "ՄԵ"}, + 0xfb15: {"ﬕ", "Մի", "ՄԻ"}, + 0xfb16: {"ﬖ", "Վն", "ՎՆ"}, + 0xfb17: {"ﬗ", "Մխ", "ՄԽ"}, + 0x0149: {"ʼn", "ʼN", "ʼN"}, + 0x0390: {"ΐ", "Ϊ́", "Ϊ́"}, + 0x03b0: {"ΰ", "Ϋ́", "Ϋ́"}, + 0x01f0: {"ǰ", "J̌", "J̌"}, + 0x1e96: {"ẖ", "H̱", "H̱"}, + 0x1e97: {"ẗ", "T̈", "T̈"}, + 0x1e98: {"ẘ", "W̊", "W̊"}, + 0x1e99: {"ẙ", "Y̊", "Y̊"}, + 0x1e9a: {"ẚ", "Aʾ", "Aʾ"}, + 0x1f50: {"ὐ", "Υ̓", "Υ̓"}, + 0x1f52: {"ὒ", "Υ̓̀", "Υ̓̀"}, + 0x1f54: {"ὔ", "Υ̓́", "Υ̓́"}, + 0x1f56: {"ὖ", "Υ̓͂", "Υ̓͂"}, + 0x1fb6: {"ᾶ", "Α͂", "Α͂"}, + 0x1fc6: {"ῆ", "Η͂", "Η͂"}, + 0x1fd2: {"ῒ", "Ϊ̀", "Ϊ̀"}, + 0x1fd3: {"ΐ", "Ϊ́", "Ϊ́"}, + 0x1fd6: {"ῖ", "Ι͂", "Ι͂"}, + 0x1fd7: {"ῗ", "Ϊ͂", "Ϊ͂"}, + 0x1fe2: {"ῢ", "Ϋ̀", "Ϋ̀"}, + 0x1fe3: {"ΰ", "Ϋ́", "Ϋ́"}, + 0x1fe4: {"ῤ", "Ρ̓", "Ρ̓"}, + 0x1fe6: {"ῦ", "Υ͂", "Υ͂"}, + 0x1fe7: {"ῧ", "Ϋ͂", "Ϋ͂"}, + 0x1ff6: {"ῶ", "Ω͂", "Ω͂"}, + 0x1f80: {"ᾀ", "ᾈ", "ἈΙ"}, + 0x1f81: {"ᾁ", "ᾉ", "ἉΙ"}, + 0x1f82: {"ᾂ", "ᾊ", "ἊΙ"}, + 0x1f83: {"ᾃ", "ᾋ", "ἋΙ"}, + 0x1f84: {"ᾄ", "ᾌ", "ἌΙ"}, + 0x1f85: {"ᾅ", "ᾍ", "ἍΙ"}, + 0x1f86: {"ᾆ", "ᾎ", "ἎΙ"}, + 0x1f87: {"ᾇ", "ᾏ", "ἏΙ"}, + 0x1f88: {"ᾀ", "ᾈ", "ἈΙ"}, + 0x1f89: {"ᾁ", "ᾉ", "ἉΙ"}, + 0x1f8a: {"ᾂ", "ᾊ", "ἊΙ"}, + 0x1f8b: {"ᾃ", "ᾋ", "ἋΙ"}, + 0x1f8c: {"ᾄ", "ᾌ", "ἌΙ"}, + 0x1f8d: {"ᾅ", "ᾍ", "ἍΙ"}, + 0x1f8e: {"ᾆ", "ᾎ", "ἎΙ"}, + 0x1f8f: {"ᾇ", "ᾏ", "ἏΙ"}, + 0x1f90: {"ᾐ", "ᾘ", "ἨΙ"}, + 0x1f91: {"ᾑ", "ᾙ", "ἩΙ"}, + 0x1f92: {"ᾒ", "ᾚ", "ἪΙ"}, + 0x1f93: {"ᾓ", "ᾛ", "ἫΙ"}, + 0x1f94: {"ᾔ", "ᾜ", "ἬΙ"}, + 0x1f95: {"ᾕ", "ᾝ", "ἭΙ"}, + 0x1f96: {"ᾖ", "ᾞ", "ἮΙ"}, + 0x1f97: {"ᾗ", "ᾟ", "ἯΙ"}, + 0x1f98: {"ᾐ", "ᾘ", "ἨΙ"}, + 0x1f99: {"ᾑ", "ᾙ", "ἩΙ"}, + 0x1f9a: {"ᾒ", "ᾚ", "ἪΙ"}, + 0x1f9b: {"ᾓ", "ᾛ", "ἫΙ"}, + 0x1f9c: {"ᾔ", "ᾜ", "ἬΙ"}, + 0x1f9d: {"ᾕ", "ᾝ", "ἭΙ"}, + 0x1f9e: {"ᾖ", "ᾞ", "ἮΙ"}, + 0x1f9f: {"ᾗ", "ᾟ", "ἯΙ"}, + 0x1fa0: {"ᾠ", "ᾨ", "ὨΙ"}, + 0x1fa1: {"ᾡ", "ᾩ", "ὩΙ"}, + 0x1fa2: {"ᾢ", "ᾪ", "ὪΙ"}, + 0x1fa3: {"ᾣ", "ᾫ", "ὫΙ"}, + 0x1fa4: {"ᾤ", "ᾬ", "ὬΙ"}, + 0x1fa5: {"ᾥ", "ᾭ", "ὭΙ"}, + 0x1fa6: {"ᾦ", "ᾮ", "ὮΙ"}, + 0x1fa7: {"ᾧ", "ᾯ", "ὯΙ"}, + 0x1fa8: {"ᾠ", "ᾨ", "ὨΙ"}, + 0x1fa9: {"ᾡ", "ᾩ", "ὩΙ"}, + 0x1faa: {"ᾢ", "ᾪ", "ὪΙ"}, + 0x1fab: {"ᾣ", "ᾫ", "ὫΙ"}, + 0x1fac: {"ᾤ", "ᾬ", "ὬΙ"}, + 0x1fad: {"ᾥ", "ᾭ", "ὭΙ"}, + 0x1fae: {"ᾦ", "ᾮ", "ὮΙ"}, + 0x1faf: {"ᾧ", "ᾯ", "ὯΙ"}, + 0x1fb3: {"ᾳ", "ᾼ", "ΑΙ"}, + 0x1fbc: {"ᾳ", "ᾼ", "ΑΙ"}, + 0x1fc3: {"ῃ", "ῌ", "ΗΙ"}, + 0x1fcc: {"ῃ", "ῌ", "ΗΙ"}, + 0x1ff3: {"ῳ", "ῼ", "ΩΙ"}, + 0x1ffc: {"ῳ", "ῼ", "ΩΙ"}, + 0x1fb2: {"ᾲ", "Ὰͅ", "ᾺΙ"}, + 0x1fb4: {"ᾴ", "Άͅ", "ΆΙ"}, + 0x1fc2: {"ῂ", "Ὴͅ", "ῊΙ"}, + 0x1fc4: {"ῄ", "Ήͅ", "ΉΙ"}, + 0x1ff2: {"ῲ", "Ὼͅ", "ῺΙ"}, + 0x1ff4: {"ῴ", "Ώͅ", "ΏΙ"}, + 0x1fb7: {"ᾷ", "ᾼ͂", "Α͂Ι"}, + 0x1fc7: {"ῇ", "ῌ͂", "Η͂Ι"}, + 0x1ff7: {"ῷ", "ῼ͂", "Ω͂Ι"}, + } + + foldMap = map[rune]struct{ simple, full, special string }{ + 0x0049: {"", "", "ı"}, + 0x00b5: {"μ", "μ", ""}, + 0x00df: {"", "ss", ""}, + 0x0130: {"", "i̇", "i"}, + 0x0149: {"", "ʼn", ""}, + 0x017f: {"s", "s", ""}, + 0x01f0: {"", "ǰ", ""}, + 0x0345: {"ι", "ι", ""}, + 0x0390: {"", "ΐ", ""}, + 0x03b0: {"", "ΰ", ""}, + 0x03c2: {"σ", "σ", ""}, + 0x03d0: {"β", "β", ""}, + 0x03d1: {"θ", "θ", ""}, + 0x03d5: {"φ", "φ", ""}, + 0x03d6: {"π", "π", ""}, + 0x03f0: {"κ", "κ", ""}, + 0x03f1: {"ρ", "ρ", ""}, + 0x03f5: {"ε", "ε", ""}, + 0x0587: {"", "եւ", ""}, + 0x13f8: {"Ᏸ", "Ᏸ", ""}, + 0x13f9: {"Ᏹ", "Ᏹ", ""}, + 0x13fa: {"Ᏺ", "Ᏺ", ""}, + 0x13fb: {"Ᏻ", "Ᏻ", ""}, + 0x13fc: {"Ᏼ", "Ᏼ", ""}, + 0x13fd: {"Ᏽ", "Ᏽ", ""}, + 0x1c80: {"в", "в", ""}, + 0x1c81: {"д", "д", ""}, + 0x1c82: {"о", "о", ""}, + 0x1c83: {"с", "с", ""}, + 0x1c84: {"т", "т", ""}, + 0x1c85: {"т", "т", ""}, + 0x1c86: {"ъ", "ъ", ""}, + 0x1c87: {"ѣ", "ѣ", ""}, + 0x1c88: {"ꙋ", "ꙋ", ""}, + 0x1e96: {"", "ẖ", ""}, + 0x1e97: {"", "ẗ", ""}, + 0x1e98: {"", "ẘ", ""}, + 0x1e99: {"", "ẙ", ""}, + 0x1e9a: {"", "aʾ", ""}, + 0x1e9b: {"ṡ", "ṡ", ""}, + 0x1e9e: {"", "ss", ""}, + 0x1f50: {"", "ὐ", ""}, + 0x1f52: {"", "ὒ", ""}, + 0x1f54: {"", "ὔ", ""}, + 0x1f56: {"", "ὖ", ""}, + 0x1f80: {"", "ἀι", ""}, + 0x1f81: {"", "ἁι", ""}, + 0x1f82: {"", "ἂι", ""}, + 0x1f83: {"", "ἃι", ""}, + 0x1f84: {"", "ἄι", ""}, + 0x1f85: {"", "ἅι", ""}, + 0x1f86: {"", "ἆι", ""}, + 0x1f87: {"", "ἇι", ""}, + 0x1f88: {"", "ἀι", ""}, + 0x1f89: {"", "ἁι", ""}, + 0x1f8a: {"", "ἂι", ""}, + 0x1f8b: {"", "ἃι", ""}, + 0x1f8c: {"", "ἄι", ""}, + 0x1f8d: {"", "ἅι", ""}, + 0x1f8e: {"", "ἆι", ""}, + 0x1f8f: {"", "ἇι", ""}, + 0x1f90: {"", "ἠι", ""}, + 0x1f91: {"", "ἡι", ""}, + 0x1f92: {"", "ἢι", ""}, + 0x1f93: {"", "ἣι", ""}, + 0x1f94: {"", "ἤι", ""}, + 0x1f95: {"", "ἥι", ""}, + 0x1f96: {"", "ἦι", ""}, + 0x1f97: {"", "ἧι", ""}, + 0x1f98: {"", "ἠι", ""}, + 0x1f99: {"", "ἡι", ""}, + 0x1f9a: {"", "ἢι", ""}, + 0x1f9b: {"", "ἣι", ""}, + 0x1f9c: {"", "ἤι", ""}, + 0x1f9d: {"", "ἥι", ""}, + 0x1f9e: {"", "ἦι", ""}, + 0x1f9f: {"", "ἧι", ""}, + 0x1fa0: {"", "ὠι", ""}, + 0x1fa1: {"", "ὡι", ""}, + 0x1fa2: {"", "ὢι", ""}, + 0x1fa3: {"", "ὣι", ""}, + 0x1fa4: {"", "ὤι", ""}, + 0x1fa5: {"", "ὥι", ""}, + 0x1fa6: {"", "ὦι", ""}, + 0x1fa7: {"", "ὧι", ""}, + 0x1fa8: {"", "ὠι", ""}, + 0x1fa9: {"", "ὡι", ""}, + 0x1faa: {"", "ὢι", ""}, + 0x1fab: {"", "ὣι", ""}, + 0x1fac: {"", "ὤι", ""}, + 0x1fad: {"", "ὥι", ""}, + 0x1fae: {"", "ὦι", ""}, + 0x1faf: {"", "ὧι", ""}, + 0x1fb2: {"", "ὰι", ""}, + 0x1fb3: {"", "αι", ""}, + 0x1fb4: {"", "άι", ""}, + 0x1fb6: {"", "ᾶ", ""}, + 0x1fb7: {"", "ᾶι", ""}, + 0x1fbc: {"", "αι", ""}, + 0x1fbe: {"ι", "ι", ""}, + 0x1fc2: {"", "ὴι", ""}, + 0x1fc3: {"", "ηι", ""}, + 0x1fc4: {"", "ήι", ""}, + 0x1fc6: {"", "ῆ", ""}, + 0x1fc7: {"", "ῆι", ""}, + 0x1fcc: {"", "ηι", ""}, + 0x1fd2: {"", "ῒ", ""}, + 0x1fd3: {"", "ΐ", ""}, + 0x1fd6: {"", "ῖ", ""}, + 0x1fd7: {"", "ῗ", ""}, + 0x1fe2: {"", "ῢ", ""}, + 0x1fe3: {"", "ΰ", ""}, + 0x1fe4: {"", "ῤ", ""}, + 0x1fe6: {"", "ῦ", ""}, + 0x1fe7: {"", "ῧ", ""}, + 0x1ff2: {"", "ὼι", ""}, + 0x1ff3: {"", "ωι", ""}, + 0x1ff4: {"", "ώι", ""}, + 0x1ff6: {"", "ῶ", ""}, + 0x1ff7: {"", "ῶι", ""}, + 0x1ffc: {"", "ωι", ""}, + 0xab70: {"Ꭰ", "Ꭰ", ""}, + 0xab71: {"Ꭱ", "Ꭱ", ""}, + 0xab72: {"Ꭲ", "Ꭲ", ""}, + 0xab73: {"Ꭳ", "Ꭳ", ""}, + 0xab74: {"Ꭴ", "Ꭴ", ""}, + 0xab75: {"Ꭵ", "Ꭵ", ""}, + 0xab76: {"Ꭶ", "Ꭶ", ""}, + 0xab77: {"Ꭷ", "Ꭷ", ""}, + 0xab78: {"Ꭸ", "Ꭸ", ""}, + 0xab79: {"Ꭹ", "Ꭹ", ""}, + 0xab7a: {"Ꭺ", "Ꭺ", ""}, + 0xab7b: {"Ꭻ", "Ꭻ", ""}, + 0xab7c: {"Ꭼ", "Ꭼ", ""}, + 0xab7d: {"Ꭽ", "Ꭽ", ""}, + 0xab7e: {"Ꭾ", "Ꭾ", ""}, + 0xab7f: {"Ꭿ", "Ꭿ", ""}, + 0xab80: {"Ꮀ", "Ꮀ", ""}, + 0xab81: {"Ꮁ", "Ꮁ", ""}, + 0xab82: {"Ꮂ", "Ꮂ", ""}, + 0xab83: {"Ꮃ", "Ꮃ", ""}, + 0xab84: {"Ꮄ", "Ꮄ", ""}, + 0xab85: {"Ꮅ", "Ꮅ", ""}, + 0xab86: {"Ꮆ", "Ꮆ", ""}, + 0xab87: {"Ꮇ", "Ꮇ", ""}, + 0xab88: {"Ꮈ", "Ꮈ", ""}, + 0xab89: {"Ꮉ", "Ꮉ", ""}, + 0xab8a: {"Ꮊ", "Ꮊ", ""}, + 0xab8b: {"Ꮋ", "Ꮋ", ""}, + 0xab8c: {"Ꮌ", "Ꮌ", ""}, + 0xab8d: {"Ꮍ", "Ꮍ", ""}, + 0xab8e: {"Ꮎ", "Ꮎ", ""}, + 0xab8f: {"Ꮏ", "Ꮏ", ""}, + 0xab90: {"Ꮐ", "Ꮐ", ""}, + 0xab91: {"Ꮑ", "Ꮑ", ""}, + 0xab92: {"Ꮒ", "Ꮒ", ""}, + 0xab93: {"Ꮓ", "Ꮓ", ""}, + 0xab94: {"Ꮔ", "Ꮔ", ""}, + 0xab95: {"Ꮕ", "Ꮕ", ""}, + 0xab96: {"Ꮖ", "Ꮖ", ""}, + 0xab97: {"Ꮗ", "Ꮗ", ""}, + 0xab98: {"Ꮘ", "Ꮘ", ""}, + 0xab99: {"Ꮙ", "Ꮙ", ""}, + 0xab9a: {"Ꮚ", "Ꮚ", ""}, + 0xab9b: {"Ꮛ", "Ꮛ", ""}, + 0xab9c: {"Ꮜ", "Ꮜ", ""}, + 0xab9d: {"Ꮝ", "Ꮝ", ""}, + 0xab9e: {"Ꮞ", "Ꮞ", ""}, + 0xab9f: {"Ꮟ", "Ꮟ", ""}, + 0xaba0: {"Ꮠ", "Ꮠ", ""}, + 0xaba1: {"Ꮡ", "Ꮡ", ""}, + 0xaba2: {"Ꮢ", "Ꮢ", ""}, + 0xaba3: {"Ꮣ", "Ꮣ", ""}, + 0xaba4: {"Ꮤ", "Ꮤ", ""}, + 0xaba5: {"Ꮥ", "Ꮥ", ""}, + 0xaba6: {"Ꮦ", "Ꮦ", ""}, + 0xaba7: {"Ꮧ", "Ꮧ", ""}, + 0xaba8: {"Ꮨ", "Ꮨ", ""}, + 0xaba9: {"Ꮩ", "Ꮩ", ""}, + 0xabaa: {"Ꮪ", "Ꮪ", ""}, + 0xabab: {"Ꮫ", "Ꮫ", ""}, + 0xabac: {"Ꮬ", "Ꮬ", ""}, + 0xabad: {"Ꮭ", "Ꮭ", ""}, + 0xabae: {"Ꮮ", "Ꮮ", ""}, + 0xabaf: {"Ꮯ", "Ꮯ", ""}, + 0xabb0: {"Ꮰ", "Ꮰ", ""}, + 0xabb1: {"Ꮱ", "Ꮱ", ""}, + 0xabb2: {"Ꮲ", "Ꮲ", ""}, + 0xabb3: {"Ꮳ", "Ꮳ", ""}, + 0xabb4: {"Ꮴ", "Ꮴ", ""}, + 0xabb5: {"Ꮵ", "Ꮵ", ""}, + 0xabb6: {"Ꮶ", "Ꮶ", ""}, + 0xabb7: {"Ꮷ", "Ꮷ", ""}, + 0xabb8: {"Ꮸ", "Ꮸ", ""}, + 0xabb9: {"Ꮹ", "Ꮹ", ""}, + 0xabba: {"Ꮺ", "Ꮺ", ""}, + 0xabbb: {"Ꮻ", "Ꮻ", ""}, + 0xabbc: {"Ꮼ", "Ꮼ", ""}, + 0xabbd: {"Ꮽ", "Ꮽ", ""}, + 0xabbe: {"Ꮾ", "Ꮾ", ""}, + 0xabbf: {"Ꮿ", "Ꮿ", ""}, + 0xfb00: {"", "ff", ""}, + 0xfb01: {"", "fi", ""}, + 0xfb02: {"", "fl", ""}, + 0xfb03: {"", "ffi", ""}, + 0xfb04: {"", "ffl", ""}, + 0xfb05: {"", "st", ""}, + 0xfb06: {"", "st", ""}, + 0xfb13: {"", "մն", ""}, + 0xfb14: {"", "մե", ""}, + 0xfb15: {"", "մի", ""}, + 0xfb16: {"", "վն", ""}, + 0xfb17: {"", "մխ", ""}, + } + + breakProp = []struct{ lo, hi rune }{ + {0x0, 0x26}, + {0x28, 0x2d}, + {0x2f, 0x2f}, + {0x3b, 0x40}, + {0x5b, 0x5e}, + {0x60, 0x60}, + {0x7b, 0xa9}, + {0xab, 0xac}, + {0xae, 0xb4}, + {0xb6, 0xb6}, + {0xb8, 0xb9}, + {0xbb, 0xbf}, + {0xd7, 0xd7}, + {0xf7, 0xf7}, + {0x2c2, 0x2c5}, + {0x2d2, 0x2d6}, + {0x2d8, 0x2df}, + {0x2e5, 0x2eb}, + {0x2ed, 0x2ed}, + {0x2ef, 0x2ff}, + {0x375, 0x375}, + {0x378, 0x379}, + {0x37e, 0x37e}, + {0x380, 0x385}, + {0x38b, 0x38b}, + {0x38d, 0x38d}, + {0x3a2, 0x3a2}, + {0x3f6, 0x3f6}, + {0x482, 0x482}, + {0x530, 0x530}, + {0x557, 0x558}, + {0x55a, 0x560}, + {0x588, 0x590}, + {0x5be, 0x5be}, + {0x5c0, 0x5c0}, + {0x5c3, 0x5c3}, + {0x5c6, 0x5c6}, + {0x5c8, 0x5cf}, + {0x5eb, 0x5ef}, + {0x5f5, 0x5ff}, + {0x606, 0x60f}, + {0x61b, 0x61b}, + {0x61d, 0x61f}, + {0x66a, 0x66a}, + {0x66c, 0x66d}, + {0x6d4, 0x6d4}, + {0x6de, 0x6de}, + {0x6e9, 0x6e9}, + {0x6fd, 0x6fe}, + {0x700, 0x70e}, + {0x74b, 0x74c}, + {0x7b2, 0x7bf}, + {0x7f6, 0x7f9}, + {0x7fb, 0x7ff}, + {0x82e, 0x83f}, + {0x85c, 0x89f}, + {0x8b5, 0x8b5}, + {0x8be, 0x8d3}, + {0x964, 0x965}, + {0x970, 0x970}, + {0x984, 0x984}, + {0x98d, 0x98e}, + {0x991, 0x992}, + {0x9a9, 0x9a9}, + {0x9b1, 0x9b1}, + {0x9b3, 0x9b5}, + {0x9ba, 0x9bb}, + {0x9c5, 0x9c6}, + {0x9c9, 0x9ca}, + {0x9cf, 0x9d6}, + {0x9d8, 0x9db}, + {0x9de, 0x9de}, + {0x9e4, 0x9e5}, + {0x9f2, 0xa00}, + {0xa04, 0xa04}, + {0xa0b, 0xa0e}, + {0xa11, 0xa12}, + {0xa29, 0xa29}, + {0xa31, 0xa31}, + {0xa34, 0xa34}, + {0xa37, 0xa37}, + {0xa3a, 0xa3b}, + {0xa3d, 0xa3d}, + {0xa43, 0xa46}, + {0xa49, 0xa4a}, + {0xa4e, 0xa50}, + {0xa52, 0xa58}, + {0xa5d, 0xa5d}, + {0xa5f, 0xa65}, + {0xa76, 0xa80}, + {0xa84, 0xa84}, + {0xa8e, 0xa8e}, + {0xa92, 0xa92}, + {0xaa9, 0xaa9}, + {0xab1, 0xab1}, + {0xab4, 0xab4}, + {0xaba, 0xabb}, + {0xac6, 0xac6}, + {0xaca, 0xaca}, + {0xace, 0xacf}, + {0xad1, 0xadf}, + {0xae4, 0xae5}, + {0xaf0, 0xaf8}, + {0xafa, 0xb00}, + {0xb04, 0xb04}, + {0xb0d, 0xb0e}, + {0xb11, 0xb12}, + {0xb29, 0xb29}, + {0xb31, 0xb31}, + {0xb34, 0xb34}, + {0xb3a, 0xb3b}, + {0xb45, 0xb46}, + {0xb49, 0xb4a}, + {0xb4e, 0xb55}, + {0xb58, 0xb5b}, + {0xb5e, 0xb5e}, + {0xb64, 0xb65}, + {0xb70, 0xb70}, + {0xb72, 0xb81}, + {0xb84, 0xb84}, + {0xb8b, 0xb8d}, + {0xb91, 0xb91}, + {0xb96, 0xb98}, + {0xb9b, 0xb9b}, + {0xb9d, 0xb9d}, + {0xba0, 0xba2}, + {0xba5, 0xba7}, + {0xbab, 0xbad}, + {0xbba, 0xbbd}, + {0xbc3, 0xbc5}, + {0xbc9, 0xbc9}, + {0xbce, 0xbcf}, + {0xbd1, 0xbd6}, + {0xbd8, 0xbe5}, + {0xbf0, 0xbff}, + {0xc04, 0xc04}, + {0xc0d, 0xc0d}, + {0xc11, 0xc11}, + {0xc29, 0xc29}, + {0xc3a, 0xc3c}, + {0xc45, 0xc45}, + {0xc49, 0xc49}, + {0xc4e, 0xc54}, + {0xc57, 0xc57}, + {0xc5b, 0xc5f}, + {0xc64, 0xc65}, + {0xc70, 0xc7f}, + {0xc84, 0xc84}, + {0xc8d, 0xc8d}, + {0xc91, 0xc91}, + {0xca9, 0xca9}, + {0xcb4, 0xcb4}, + {0xcba, 0xcbb}, + {0xcc5, 0xcc5}, + {0xcc9, 0xcc9}, + {0xcce, 0xcd4}, + {0xcd7, 0xcdd}, + {0xcdf, 0xcdf}, + {0xce4, 0xce5}, + {0xcf0, 0xcf0}, + {0xcf3, 0xd00}, + {0xd04, 0xd04}, + {0xd0d, 0xd0d}, + {0xd11, 0xd11}, + {0xd3b, 0xd3c}, + {0xd45, 0xd45}, + {0xd49, 0xd49}, + {0xd4f, 0xd53}, + {0xd58, 0xd5e}, + {0xd64, 0xd65}, + {0xd70, 0xd79}, + {0xd80, 0xd81}, + {0xd84, 0xd84}, + {0xd97, 0xd99}, + {0xdb2, 0xdb2}, + {0xdbc, 0xdbc}, + {0xdbe, 0xdbf}, + {0xdc7, 0xdc9}, + {0xdcb, 0xdce}, + {0xdd5, 0xdd5}, + {0xdd7, 0xdd7}, + {0xde0, 0xde5}, + {0xdf0, 0xdf1}, + {0xdf4, 0xe30}, + {0xe32, 0xe33}, + {0xe3b, 0xe46}, + {0xe4f, 0xe4f}, + {0xe5a, 0xeb0}, + {0xeb2, 0xeb3}, + {0xeba, 0xeba}, + {0xebd, 0xec7}, + {0xece, 0xecf}, + {0xeda, 0xeff}, + {0xf01, 0xf17}, + {0xf1a, 0xf1f}, + {0xf2a, 0xf34}, + {0xf36, 0xf36}, + {0xf38, 0xf38}, + {0xf3a, 0xf3d}, + {0xf48, 0xf48}, + {0xf6d, 0xf70}, + {0xf85, 0xf85}, + {0xf98, 0xf98}, + {0xfbd, 0xfc5}, + {0xfc7, 0x102a}, + {0x103f, 0x103f}, + {0x104a, 0x1055}, + {0x105a, 0x105d}, + {0x1061, 0x1061}, + {0x1065, 0x1066}, + {0x106e, 0x1070}, + {0x1075, 0x1081}, + {0x108e, 0x108e}, + {0x109e, 0x109f}, + {0x10c6, 0x10c6}, + {0x10c8, 0x10cc}, + {0x10ce, 0x10cf}, + {0x10fb, 0x10fb}, + {0x1249, 0x1249}, + {0x124e, 0x124f}, + {0x1257, 0x1257}, + {0x1259, 0x1259}, + {0x125e, 0x125f}, + {0x1289, 0x1289}, + {0x128e, 0x128f}, + {0x12b1, 0x12b1}, + {0x12b6, 0x12b7}, + {0x12bf, 0x12bf}, + {0x12c1, 0x12c1}, + {0x12c6, 0x12c7}, + {0x12d7, 0x12d7}, + {0x1311, 0x1311}, + {0x1316, 0x1317}, + {0x135b, 0x135c}, + {0x1360, 0x137f}, + {0x1390, 0x139f}, + {0x13f6, 0x13f7}, + {0x13fe, 0x1400}, + {0x166d, 0x166e}, + {0x1680, 0x1680}, + {0x169b, 0x169f}, + {0x16eb, 0x16ed}, + {0x16f9, 0x16ff}, + {0x170d, 0x170d}, + {0x1715, 0x171f}, + {0x1735, 0x173f}, + {0x1754, 0x175f}, + {0x176d, 0x176d}, + {0x1771, 0x1771}, + {0x1774, 0x17b3}, + {0x17d4, 0x17dc}, + {0x17de, 0x17df}, + {0x17ea, 0x180a}, + {0x180f, 0x180f}, + {0x181a, 0x181f}, + {0x1878, 0x187f}, + {0x18ab, 0x18af}, + {0x18f6, 0x18ff}, + {0x191f, 0x191f}, + {0x192c, 0x192f}, + {0x193c, 0x1945}, + {0x1950, 0x19cf}, + {0x19da, 0x19ff}, + {0x1a1c, 0x1a54}, + {0x1a5f, 0x1a5f}, + {0x1a7d, 0x1a7e}, + {0x1a8a, 0x1a8f}, + {0x1a9a, 0x1aaf}, + {0x1abf, 0x1aff}, + {0x1b4c, 0x1b4f}, + {0x1b5a, 0x1b6a}, + {0x1b74, 0x1b7f}, + {0x1bf4, 0x1bff}, + {0x1c38, 0x1c3f}, + {0x1c4a, 0x1c4c}, + {0x1c7e, 0x1c7f}, + {0x1c89, 0x1ccf}, + {0x1cd3, 0x1cd3}, + {0x1cf7, 0x1cf7}, + {0x1cfa, 0x1cff}, + {0x1df6, 0x1dfa}, + {0x1f16, 0x1f17}, + {0x1f1e, 0x1f1f}, + {0x1f46, 0x1f47}, + {0x1f4e, 0x1f4f}, + {0x1f58, 0x1f58}, + {0x1f5a, 0x1f5a}, + {0x1f5c, 0x1f5c}, + {0x1f5e, 0x1f5e}, + {0x1f7e, 0x1f7f}, + {0x1fb5, 0x1fb5}, + {0x1fbd, 0x1fbd}, + {0x1fbf, 0x1fc1}, + {0x1fc5, 0x1fc5}, + {0x1fcd, 0x1fcf}, + {0x1fd4, 0x1fd5}, + {0x1fdc, 0x1fdf}, + {0x1fed, 0x1ff1}, + {0x1ff5, 0x1ff5}, + {0x1ffd, 0x200b}, + {0x2010, 0x2017}, + {0x201a, 0x2023}, + {0x2025, 0x2026}, + {0x2028, 0x2029}, + {0x2030, 0x203e}, + {0x2041, 0x2053}, + {0x2055, 0x205f}, + {0x2065, 0x2065}, + {0x2070, 0x2070}, + {0x2072, 0x207e}, + {0x2080, 0x208f}, + {0x209d, 0x20cf}, + {0x20f1, 0x2101}, + {0x2103, 0x2106}, + {0x2108, 0x2109}, + {0x2114, 0x2114}, + {0x2116, 0x2118}, + {0x211e, 0x2123}, + {0x2125, 0x2125}, + {0x2127, 0x2127}, + {0x2129, 0x2129}, + {0x212e, 0x212e}, + {0x213a, 0x213b}, + {0x2140, 0x2144}, + {0x214a, 0x214d}, + {0x214f, 0x215f}, + {0x2189, 0x24b5}, + {0x24ea, 0x2bff}, + {0x2c2f, 0x2c2f}, + {0x2c5f, 0x2c5f}, + {0x2ce5, 0x2cea}, + {0x2cf4, 0x2cff}, + {0x2d26, 0x2d26}, + {0x2d28, 0x2d2c}, + {0x2d2e, 0x2d2f}, + {0x2d68, 0x2d6e}, + {0x2d70, 0x2d7e}, + {0x2d97, 0x2d9f}, + {0x2da7, 0x2da7}, + {0x2daf, 0x2daf}, + {0x2db7, 0x2db7}, + {0x2dbf, 0x2dbf}, + {0x2dc7, 0x2dc7}, + {0x2dcf, 0x2dcf}, + {0x2dd7, 0x2dd7}, + {0x2ddf, 0x2ddf}, + {0x2e00, 0x2e2e}, + {0x2e30, 0x3004}, + {0x3006, 0x3029}, + {0x3030, 0x303a}, + {0x303d, 0x3098}, + {0x309b, 0x3104}, + {0x312e, 0x3130}, + {0x318f, 0x319f}, + {0x31bb, 0x9fff}, + {0xa48d, 0xa4cf}, + {0xa4fe, 0xa4ff}, + {0xa60d, 0xa60f}, + {0xa62c, 0xa63f}, + {0xa673, 0xa673}, + {0xa67e, 0xa67e}, + {0xa6f2, 0xa716}, + {0xa720, 0xa721}, + {0xa789, 0xa78a}, + {0xa7af, 0xa7af}, + {0xa7b8, 0xa7f6}, + {0xa828, 0xa83f}, + {0xa874, 0xa87f}, + {0xa8c6, 0xa8cf}, + {0xa8da, 0xa8df}, + {0xa8f8, 0xa8fa}, + {0xa8fc, 0xa8fc}, + {0xa8fe, 0xa8ff}, + {0xa92e, 0xa92f}, + {0xa954, 0xa95f}, + {0xa97d, 0xa97f}, + {0xa9c1, 0xa9ce}, + {0xa9da, 0xa9e4}, + {0xa9e6, 0xa9ef}, + {0xa9fa, 0xa9ff}, + {0xaa37, 0xaa3f}, + {0xaa4e, 0xaa4f}, + {0xaa5a, 0xaa7a}, + {0xaa7e, 0xaaaf}, + {0xaab1, 0xaab1}, + {0xaab5, 0xaab6}, + {0xaab9, 0xaabd}, + {0xaac0, 0xaac0}, + {0xaac2, 0xaadf}, + {0xaaf0, 0xaaf1}, + {0xaaf7, 0xab00}, + {0xab07, 0xab08}, + {0xab0f, 0xab10}, + {0xab17, 0xab1f}, + {0xab27, 0xab27}, + {0xab2f, 0xab2f}, + {0xab5b, 0xab5b}, + {0xab66, 0xab6f}, + {0xabeb, 0xabeb}, + {0xabee, 0xabef}, + {0xabfa, 0xabff}, + {0xd7a4, 0xd7af}, + {0xd7c7, 0xd7ca}, + {0xd7fc, 0xfaff}, + {0xfb07, 0xfb12}, + {0xfb18, 0xfb1c}, + {0xfb29, 0xfb29}, + {0xfb37, 0xfb37}, + {0xfb3d, 0xfb3d}, + {0xfb3f, 0xfb3f}, + {0xfb42, 0xfb42}, + {0xfb45, 0xfb45}, + {0xfbb2, 0xfbd2}, + {0xfd3e, 0xfd4f}, + {0xfd90, 0xfd91}, + {0xfdc8, 0xfdef}, + {0xfdfc, 0xfdff}, + {0xfe10, 0xfe12}, + {0xfe14, 0xfe1f}, + {0xfe30, 0xfe32}, + {0xfe35, 0xfe4c}, + {0xfe50, 0xfe51}, + {0xfe53, 0xfe54}, + {0xfe56, 0xfe6f}, + {0xfe75, 0xfe75}, + {0xfefd, 0xfefe}, + {0xff00, 0xff06}, + {0xff08, 0xff0d}, + {0xff0f, 0xff19}, + {0xff1b, 0xff20}, + {0xff3b, 0xff3e}, + {0xff40, 0xff40}, + {0xff5b, 0xff9d}, + {0xffbf, 0xffc1}, + {0xffc8, 0xffc9}, + {0xffd0, 0xffd1}, + {0xffd8, 0xffd9}, + {0xffdd, 0xfff8}, + {0xfffc, 0xffff}, + {0x1000c, 0x1000c}, + {0x10027, 0x10027}, + {0x1003b, 0x1003b}, + {0x1003e, 0x1003e}, + {0x1004e, 0x1004f}, + {0x1005e, 0x1007f}, + {0x100fb, 0x1013f}, + {0x10175, 0x101fc}, + {0x101fe, 0x1027f}, + {0x1029d, 0x1029f}, + {0x102d1, 0x102df}, + {0x102e1, 0x102ff}, + {0x10320, 0x1032f}, + {0x1034b, 0x1034f}, + {0x1037b, 0x1037f}, + {0x1039e, 0x1039f}, + {0x103c4, 0x103c7}, + {0x103d0, 0x103d0}, + {0x103d6, 0x103ff}, + {0x1049e, 0x1049f}, + {0x104aa, 0x104af}, + {0x104d4, 0x104d7}, + {0x104fc, 0x104ff}, + {0x10528, 0x1052f}, + {0x10564, 0x105ff}, + {0x10737, 0x1073f}, + {0x10756, 0x1075f}, + {0x10768, 0x107ff}, + {0x10806, 0x10807}, + {0x10809, 0x10809}, + {0x10836, 0x10836}, + {0x10839, 0x1083b}, + {0x1083d, 0x1083e}, + {0x10856, 0x1085f}, + {0x10877, 0x1087f}, + {0x1089f, 0x108df}, + {0x108f3, 0x108f3}, + {0x108f6, 0x108ff}, + {0x10916, 0x1091f}, + {0x1093a, 0x1097f}, + {0x109b8, 0x109bd}, + {0x109c0, 0x109ff}, + {0x10a04, 0x10a04}, + {0x10a07, 0x10a0b}, + {0x10a14, 0x10a14}, + {0x10a18, 0x10a18}, + {0x10a34, 0x10a37}, + {0x10a3b, 0x10a3e}, + {0x10a40, 0x10a5f}, + {0x10a7d, 0x10a7f}, + {0x10a9d, 0x10abf}, + {0x10ac8, 0x10ac8}, + {0x10ae7, 0x10aff}, + {0x10b36, 0x10b3f}, + {0x10b56, 0x10b5f}, + {0x10b73, 0x10b7f}, + {0x10b92, 0x10bff}, + {0x10c49, 0x10c7f}, + {0x10cb3, 0x10cbf}, + {0x10cf3, 0x10fff}, + {0x11047, 0x11065}, + {0x11070, 0x1107e}, + {0x110bb, 0x110bc}, + {0x110be, 0x110cf}, + {0x110e9, 0x110ef}, + {0x110fa, 0x110ff}, + {0x11135, 0x11135}, + {0x11140, 0x1114f}, + {0x11174, 0x11175}, + {0x11177, 0x1117f}, + {0x111c5, 0x111c9}, + {0x111cd, 0x111cf}, + {0x111db, 0x111db}, + {0x111dd, 0x111ff}, + {0x11212, 0x11212}, + {0x11238, 0x1123d}, + {0x1123f, 0x1127f}, + {0x11287, 0x11287}, + {0x11289, 0x11289}, + {0x1128e, 0x1128e}, + {0x1129e, 0x1129e}, + {0x112a9, 0x112af}, + {0x112eb, 0x112ef}, + {0x112fa, 0x112ff}, + {0x11304, 0x11304}, + {0x1130d, 0x1130e}, + {0x11311, 0x11312}, + {0x11329, 0x11329}, + {0x11331, 0x11331}, + {0x11334, 0x11334}, + {0x1133a, 0x1133b}, + {0x11345, 0x11346}, + {0x11349, 0x1134a}, + {0x1134e, 0x1134f}, + {0x11351, 0x11356}, + {0x11358, 0x1135c}, + {0x11364, 0x11365}, + {0x1136d, 0x1136f}, + {0x11375, 0x113ff}, + {0x1144b, 0x1144f}, + {0x1145a, 0x1147f}, + {0x114c6, 0x114c6}, + {0x114c8, 0x114cf}, + {0x114da, 0x1157f}, + {0x115b6, 0x115b7}, + {0x115c1, 0x115d7}, + {0x115de, 0x115ff}, + {0x11641, 0x11643}, + {0x11645, 0x1164f}, + {0x1165a, 0x1167f}, + {0x116b8, 0x116bf}, + {0x116ca, 0x1171c}, + {0x1172c, 0x1172f}, + {0x1173a, 0x1189f}, + {0x118ea, 0x118fe}, + {0x11900, 0x11abf}, + {0x11af9, 0x11bff}, + {0x11c09, 0x11c09}, + {0x11c37, 0x11c37}, + {0x11c41, 0x11c4f}, + {0x11c5a, 0x11c71}, + {0x11c90, 0x11c91}, + {0x11ca8, 0x11ca8}, + {0x11cb7, 0x11fff}, + {0x1239a, 0x123ff}, + {0x1246f, 0x1247f}, + {0x12544, 0x12fff}, + {0x1342f, 0x143ff}, + {0x14647, 0x167ff}, + {0x16a39, 0x16a3f}, + {0x16a5f, 0x16a5f}, + {0x16a6a, 0x16acf}, + {0x16aee, 0x16aef}, + {0x16af5, 0x16aff}, + {0x16b37, 0x16b3f}, + {0x16b44, 0x16b4f}, + {0x16b5a, 0x16b62}, + {0x16b78, 0x16b7c}, + {0x16b90, 0x16eff}, + {0x16f45, 0x16f4f}, + {0x16f7f, 0x16f8e}, + {0x16fa0, 0x16fdf}, + {0x16fe1, 0x1bbff}, + {0x1bc6b, 0x1bc6f}, + {0x1bc7d, 0x1bc7f}, + {0x1bc89, 0x1bc8f}, + {0x1bc9a, 0x1bc9c}, + {0x1bc9f, 0x1bc9f}, + {0x1bca4, 0x1d164}, + {0x1d16a, 0x1d16c}, + {0x1d183, 0x1d184}, + {0x1d18c, 0x1d1a9}, + {0x1d1ae, 0x1d241}, + {0x1d245, 0x1d3ff}, + {0x1d455, 0x1d455}, + {0x1d49d, 0x1d49d}, + {0x1d4a0, 0x1d4a1}, + {0x1d4a3, 0x1d4a4}, + {0x1d4a7, 0x1d4a8}, + {0x1d4ad, 0x1d4ad}, + {0x1d4ba, 0x1d4ba}, + {0x1d4bc, 0x1d4bc}, + {0x1d4c4, 0x1d4c4}, + {0x1d506, 0x1d506}, + {0x1d50b, 0x1d50c}, + {0x1d515, 0x1d515}, + {0x1d51d, 0x1d51d}, + {0x1d53a, 0x1d53a}, + {0x1d53f, 0x1d53f}, + {0x1d545, 0x1d545}, + {0x1d547, 0x1d549}, + {0x1d551, 0x1d551}, + {0x1d6a6, 0x1d6a7}, + {0x1d6c1, 0x1d6c1}, + {0x1d6db, 0x1d6db}, + {0x1d6fb, 0x1d6fb}, + {0x1d715, 0x1d715}, + {0x1d735, 0x1d735}, + {0x1d74f, 0x1d74f}, + {0x1d76f, 0x1d76f}, + {0x1d789, 0x1d789}, + {0x1d7a9, 0x1d7a9}, + {0x1d7c3, 0x1d7c3}, + {0x1d7cc, 0x1d7cd}, + {0x1d800, 0x1d9ff}, + {0x1da37, 0x1da3a}, + {0x1da6d, 0x1da74}, + {0x1da76, 0x1da83}, + {0x1da85, 0x1da9a}, + {0x1daa0, 0x1daa0}, + {0x1dab0, 0x1dfff}, + {0x1e007, 0x1e007}, + {0x1e019, 0x1e01a}, + {0x1e022, 0x1e022}, + {0x1e025, 0x1e025}, + {0x1e02b, 0x1e7ff}, + {0x1e8c5, 0x1e8cf}, + {0x1e8d7, 0x1e8ff}, + {0x1e94b, 0x1e94f}, + {0x1e95a, 0x1edff}, + {0x1ee04, 0x1ee04}, + {0x1ee20, 0x1ee20}, + {0x1ee23, 0x1ee23}, + {0x1ee25, 0x1ee26}, + {0x1ee28, 0x1ee28}, + {0x1ee33, 0x1ee33}, + {0x1ee38, 0x1ee38}, + {0x1ee3a, 0x1ee3a}, + {0x1ee3c, 0x1ee41}, + {0x1ee43, 0x1ee46}, + {0x1ee48, 0x1ee48}, + {0x1ee4a, 0x1ee4a}, + {0x1ee4c, 0x1ee4c}, + {0x1ee50, 0x1ee50}, + {0x1ee53, 0x1ee53}, + {0x1ee55, 0x1ee56}, + {0x1ee58, 0x1ee58}, + {0x1ee5a, 0x1ee5a}, + {0x1ee5c, 0x1ee5c}, + {0x1ee5e, 0x1ee5e}, + {0x1ee60, 0x1ee60}, + {0x1ee63, 0x1ee63}, + {0x1ee65, 0x1ee66}, + {0x1ee6b, 0x1ee6b}, + {0x1ee73, 0x1ee73}, + {0x1ee78, 0x1ee78}, + {0x1ee7d, 0x1ee7d}, + {0x1ee7f, 0x1ee7f}, + {0x1ee8a, 0x1ee8a}, + {0x1ee9c, 0x1eea0}, + {0x1eea4, 0x1eea4}, + {0x1eeaa, 0x1eeaa}, + {0x1eebc, 0x1f12f}, + {0x1f14a, 0x1f14f}, + {0x1f16a, 0x1f16f}, + {0x1f18a, 0x1ffff}, + } + + breakTest = []string{ + "AA", + "ÄA", + "Aa\u2060", + "Äa\u2060", + "Aa|:", + "Äa|:", + "Aa|'", + "Äa|'", + "Aa|'\u2060", + "Äa|'\u2060", + "Aa|,", + "Äa|,", + "a\u2060A", + "a\u2060̈A", + "a\u2060a\u2060", + "a\u2060̈a\u2060", + "a\u2060a|:", + "a\u2060̈a|:", + "a\u2060a|'", + "a\u2060̈a|'", + "a\u2060a|'\u2060", + "a\u2060̈a|'\u2060", + "a\u2060a|,", + "a\u2060̈a|,", + "a:A", + "a:̈A", + "a:a\u2060", + "a:̈a\u2060", + "a:a|:", + "a:̈a|:", + "a:a|'", + "a:̈a|'", + "a:a|'\u2060", + "a:̈a|'\u2060", + "a:a|,", + "a:̈a|,", + "a'A", + "a'̈A", + "a'a\u2060", + "a'̈a\u2060", + "a'a|:", + "a'̈a|:", + "a'a|'", + "a'̈a|'", + "a'a|'\u2060", + "a'̈a|'\u2060", + "a'a|,", + "a'̈a|,", + "a'\u2060A", + "a'\u2060̈A", + "a'\u2060a\u2060", + "a'\u2060̈a\u2060", + "a'\u2060a|:", + "a'\u2060̈a|:", + "a'\u2060a|'", + "a'\u2060̈a|'", + "a'\u2060a|'\u2060", + "a'\u2060̈a|'\u2060", + "a'\u2060a|,", + "a'\u2060̈a|,", + "a|,|A", + "a|,̈|A", + "a|,|a\u2060", + "a|,̈|a\u2060", + "a|,|a|:", + "a|,̈|a|:", + "a|,|a|'", + "a|,̈|a|'", + "a|,|a|'\u2060", + "a|,̈|a|'\u2060", + "a|,|a|,", + "a|,̈|a|,", + "AAA", + "A:A", + "A|:|:|A", + "A00A", + "A__A", + "a|🇦🇧|🇨|b", + "a|🇦🇧\u200d|🇨|b", + "a|🇦\u200d🇧|🇨|b", + "a|🇦🇧|🇨🇩|b", + "ä\u200d̈b", + "1_a|:|:|a", + "1_a|:|.|a", + "1_a|:|,|a", + "1_a|.|:|a", + "1_a|.|.|a", + "1_a|.|,|a", + "1_a|,|:|a", + "1_a|,|.|a", + "1_a|,|,|a", + "a_a|:|:|1", + "a|:|:|a", + "a_1|:|:|a", + "a_a|:|:|a", + "a_a|:|.|1", + "a|:|.|a", + "a_1|:|.|a", + "a_a|:|.|a", + "a_a|:|,|1", + "a|:|,|a", + "a_1|:|,|a", + "a_a|:|,|a", + "a_a|.|:|1", + "a|.|:|a", + "a_1|.|:|a", + "a_a|.|:|a", + "a_a|.|.|1", + "a|.|.|a", + "a_1|.|.|a", + "a_a|.|.|a", + "a_a|.|,|1", + "a|.|,|a", + "a_1|.|,|a", + "a_a|.|,|a", + "a_a|,|:|1", + "a|,|:|a", + "a_1|,|:|a", + "a_a|,|:|a", + "a_a|,|.|1", + "a|,|.|a", + "a_1|,|.|a", + "a_a|,|.|a", + "a_a|,|,|1", + "a|,|,|a", + "a_1|,|,|a", + "a_a|,|,|a", + } +) diff --git a/vendor/golang.org/x/text/cases/trieval.go b/vendor/golang.org/x/text/cases/trieval.go new file mode 100644 index 0000000..fb221f8 --- /dev/null +++ b/vendor/golang.org/x/text/cases/trieval.go @@ -0,0 +1,215 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package cases + +// This file contains definitions for interpreting the trie value of the case +// trie generated by "go run gen*.go". It is shared by both the generator +// program and the resultant package. Sharing is achieved by the generator +// copying gen_trieval.go to trieval.go and changing what's above this comment. + +// info holds case information for a single rune. It is the value returned +// by a trie lookup. Most mapping information can be stored in a single 16-bit +// value. If not, for example when a rune is mapped to multiple runes, the value +// stores some basic case data and an index into an array with additional data. +// +// The per-rune values have the following format: +// +// if (exception) { +// 15..5 unsigned exception index +// 4 unused +// } else { +// 15..8 XOR pattern or index to XOR pattern for case mapping +// Only 13..8 are used for XOR patterns. +// 7 inverseFold (fold to upper, not to lower) +// 6 index: interpret the XOR pattern as an index +// or isMid if case mode is cIgnorableUncased. +// 5..4 CCC: zero (normal or break), above or other +// } +// 3 exception: interpret this value as an exception index +// (TODO: is this bit necessary? Probably implied from case mode.) +// 2..0 case mode +// +// For the non-exceptional cases, a rune must be either uncased, lowercase or +// uppercase. If the rune is cased, the XOR pattern maps either a lowercase +// rune to uppercase or an uppercase rune to lowercase (applied to the 10 +// least-significant bits of the rune). +// +// See the definitions below for a more detailed description of the various +// bits. +type info uint16 + +const ( + casedMask = 0x0003 + fullCasedMask = 0x0007 + ignorableMask = 0x0006 + ignorableValue = 0x0004 + + inverseFoldBit = 1 << 7 + isMidBit = 1 << 6 + + exceptionBit = 1 << 3 + exceptionShift = 5 + numExceptionBits = 11 + + xorIndexBit = 1 << 6 + xorShift = 8 + + // There is no mapping if all xor bits and the exception bit are zero. + hasMappingMask = 0xff80 | exceptionBit +) + +// The case mode bits encodes the case type of a rune. This includes uncased, +// title, upper and lower case and case ignorable. (For a definition of these +// terms see Chapter 3 of The Unicode Standard Core Specification.) In some rare +// cases, a rune can be both cased and case-ignorable. This is encoded by +// cIgnorableCased. A rune of this type is always lower case. Some runes are +// cased while not having a mapping. +// +// A common pattern for scripts in the Unicode standard is for upper and lower +// case runes to alternate for increasing rune values (e.g. the accented Latin +// ranges starting from U+0100 and U+1E00 among others and some Cyrillic +// characters). We use this property by defining a cXORCase mode, where the case +// mode (always upper or lower case) is derived from the rune value. As the XOR +// pattern for case mappings is often identical for successive runes, using +// cXORCase can result in large series of identical trie values. This, in turn, +// allows us to better compress the trie blocks. +const ( + cUncased info = iota // 000 + cTitle // 001 + cLower // 010 + cUpper // 011 + cIgnorableUncased // 100 + cIgnorableCased // 101 // lower case if mappings exist + cXORCase // 11x // case is cLower | ((rune&1) ^ x) + + maxCaseMode = cUpper +) + +func (c info) isCased() bool { + return c&casedMask != 0 +} + +func (c info) isCaseIgnorable() bool { + return c&ignorableMask == ignorableValue +} + +func (c info) isNotCasedAndNotCaseIgnorable() bool { + return c&fullCasedMask == 0 +} + +func (c info) isCaseIgnorableAndNotCased() bool { + return c&fullCasedMask == cIgnorableUncased +} + +func (c info) isMid() bool { + return c&(fullCasedMask|isMidBit) == isMidBit|cIgnorableUncased +} + +// The case mapping implementation will need to know about various Canonical +// Combining Class (CCC) values. We encode two of these in the trie value: +// cccZero (0) and cccAbove (230). If the value is cccOther, it means that +// CCC(r) > 0, but not 230. A value of cccBreak means that CCC(r) == 0 and that +// the rune also has the break category Break (see below). +const ( + cccBreak info = iota << 4 + cccZero + cccAbove + cccOther + + cccMask = cccBreak | cccZero | cccAbove | cccOther +) + +const ( + starter = 0 + above = 230 + iotaSubscript = 240 +) + +// The exceptions slice holds data that does not fit in a normal info entry. +// The entry is pointed to by the exception index in an entry. It has the +// following format: +// +// Header +// byte 0: +// 7..6 unused +// 5..4 CCC type (same bits as entry) +// 3 unused +// 2..0 length of fold +// +// byte 1: +// 7..6 unused +// 5..3 length of 1st mapping of case type +// 2..0 length of 2nd mapping of case type +// +// case 1st 2nd +// lower -> upper, title +// upper -> lower, title +// title -> lower, upper +// +// Lengths with the value 0x7 indicate no value and implies no change. +// A length of 0 indicates a mapping to zero-length string. +// +// Body bytes: +// case folding bytes +// lowercase mapping bytes +// uppercase mapping bytes +// titlecase mapping bytes +// closure mapping bytes (for NFKC_Casefold). (TODO) +// +// Fallbacks: +// missing fold -> lower +// missing title -> upper +// all missing -> original rune +// +// exceptions starts with a dummy byte to enforce that there is no zero index +// value. +const ( + lengthMask = 0x07 + lengthBits = 3 + noChange = 0 +) + +// References to generated trie. + +var trie = newCaseTrie(0) + +var sparse = sparseBlocks{ + values: sparseValues[:], + offsets: sparseOffsets[:], +} + +// Sparse block lookup code. + +// valueRange is an entry in a sparse block. +type valueRange struct { + value uint16 + lo, hi byte +} + +type sparseBlocks struct { + values []valueRange + offsets []uint16 +} + +// lookup returns the value from values block n for byte b using binary search. +func (s *sparseBlocks) lookup(n uint32, b byte) uint16 { + lo := s.offsets[n] + hi := s.offsets[n+1] + for lo < hi { + m := lo + (hi-lo)/2 + r := s.values[m] + if r.lo <= b && b <= r.hi { + return r.value + } + if b < r.lo { + hi = m + } else { + lo = m + 1 + } + } + return 0 +} + +// lastRuneForTesting is the last rune used for testing. Everything after this +// is boring. +const lastRuneForTesting = rune(0x1FFFF) diff --git a/vendor/golang.org/x/text/cmd/gotext/doc.go b/vendor/golang.org/x/text/cmd/gotext/doc.go new file mode 100644 index 0000000..54eb485 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/doc.go @@ -0,0 +1,35 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// DO NOT EDIT THIS FILE. GENERATED BY go generate. +// Edit the documentation in other files and rerun go generate to generate this one. + +// gotext is a tool for managing text in Go source code. +// +// Usage: +// +// gotext command [arguments] +// +// The commands are: +// +// extract extract strings to be translated from code +// +// Use "go help [command]" for more information about a command. +// +// Additional help topics: +// +// +// Use "gotext help [topic]" for more information about that topic. +// +// +// Extract strings to be translated from code +// +// Usage: +// +// go extract <package>* +// +// +// +// +package main diff --git a/vendor/golang.org/x/text/cmd/gotext/extract.go b/vendor/golang.org/x/text/cmd/gotext/extract.go new file mode 100644 index 0000000..79a9b59 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/extract.go @@ -0,0 +1,195 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "go/ast" + "go/build" + "go/constant" + "go/format" + "go/parser" + "go/types" + "io/ioutil" + "os" + "path" + "path/filepath" + "strings" + + "golang.org/x/tools/go/loader" +) + +// TODO: +// - merge information into existing files +// - handle different file formats (PO, XLIFF) +// - handle features (gender, plural) +// - message rewriting + +var cmdExtract = &Command{ + Run: runExtract, + UsageLine: "extract <package>*", + Short: "extract strings to be translated from code", +} + +func runExtract(cmd *Command, args []string) error { + if len(args) == 0 { + args = []string{"."} + } + + conf := loader.Config{ + Build: &build.Default, + ParserMode: parser.ParseComments, + } + + // Use the initial packages from the command line. + args, err := conf.FromArgs(args, false) + if err != nil { + return err + } + + // Load, parse and type-check the whole program. + iprog, err := conf.Load() + if err != nil { + return err + } + + // print returns Go syntax for the specified node. + print := func(n ast.Node) string { + var buf bytes.Buffer + format.Node(&buf, conf.Fset, n) + return buf.String() + } + + var translations []Translation + + for _, info := range iprog.InitialPackages() { + for _, f := range info.Files { + // Associate comments with nodes. + cmap := ast.NewCommentMap(iprog.Fset, f, f.Comments) + getComment := func(n ast.Node) string { + cs := cmap.Filter(n).Comments() + if len(cs) > 0 { + return strings.TrimSpace(cs[0].Text()) + } + return "" + } + + // Find function calls. + ast.Inspect(f, func(n ast.Node) bool { + call, ok := n.(*ast.CallExpr) + if !ok { + return true + } + + // Skip calls of functions other than + // (*message.Printer).{Sp,Fp,P}rintf. + sel, ok := call.Fun.(*ast.SelectorExpr) + if !ok { + return true + } + meth := info.Selections[sel] + if meth == nil || meth.Kind() != types.MethodVal { + return true + } + // TODO: remove cheap hack and check if the type either + // implements some interface or is specifically of type + // "golang.org/x/text/message".Printer. + m, ok := extractFuncs[path.Base(meth.Recv().String())] + if !ok { + return true + } + + // argn is the index of the format string. + argn, ok := m[meth.Obj().Name()] + if !ok || argn >= len(call.Args) { + return true + } + + // Skip calls with non-constant format string. + fmtstr := info.Types[call.Args[argn]].Value + if fmtstr == nil || fmtstr.Kind() != constant.String { + return true + } + + posn := conf.Fset.Position(call.Lparen) + filepos := fmt.Sprintf("%s:%d:%d", filepath.Base(posn.Filename), posn.Line, posn.Column) + + // TODO: identify the type of the format argument. If it is not + // a string, multiple keys may be defined. + var key []string + + // TODO: replace substitutions (%v) with a translator friendly + // notation. For instance: + // "%d files remaining" -> "{numFiles} files remaining", or + // "%d files remaining" -> "{arg1} files remaining" + // Alternatively, this could be done at a later stage. + msg := constant.StringVal(fmtstr) + + // Construct a Translation unit. + c := Translation{ + Key: key, + Position: filepath.Join(info.Pkg.Path(), filepos), + Original: Text{Msg: msg}, + ExtractedComment: getComment(call.Args[0]), + // TODO(fix): this doesn't get the before comment. + // Comment: getComment(call), + } + + for i, arg := range call.Args[argn+1:] { + var val string + if v := info.Types[arg].Value; v != nil { + val = v.ExactString() + } + posn := conf.Fset.Position(arg.Pos()) + filepos := fmt.Sprintf("%s:%d:%d", filepath.Base(posn.Filename), posn.Line, posn.Column) + c.Args = append(c.Args, Argument{ + ID: i + 1, + Type: info.Types[arg].Type.String(), + UnderlyingType: info.Types[arg].Type.Underlying().String(), + Expr: print(arg), + Value: val, + Comment: getComment(arg), + Position: filepath.Join(info.Pkg.Path(), filepos), + // TODO report whether it implements + // interfaces plural.Interface, + // gender.Interface. + }) + } + + translations = append(translations, c) + return true + }) + } + } + + data, err := json.MarshalIndent(translations, "", " ") + if err != nil { + return err + } + for _, tag := range getLangs() { + // TODO: merge with existing files, don't overwrite. + os.MkdirAll(*dir, 0744) + file := filepath.Join(*dir, fmt.Sprintf("gotext_%v.out.json", tag)) + if err := ioutil.WriteFile(file, data, 0744); err != nil { + return fmt.Errorf("could not create file: %v", err) + } + } + return nil +} + +// extractFuncs indicates the types and methods for which to extract strings, +// and which argument to extract. +// TODO: use the types in conf.Import("golang.org/x/text/message") to extract +// the correct instances. +var extractFuncs = map[string]map[string]int{ + // TODO: Printer -> *golang.org/x/text/message.Printer + "message.Printer": { + "Printf": 0, + "Sprintf": 0, + "Fprintf": 1, + }, +} diff --git a/vendor/golang.org/x/text/cmd/gotext/main.go b/vendor/golang.org/x/text/cmd/gotext/main.go new file mode 100644 index 0000000..b03eb55 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/main.go @@ -0,0 +1,356 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go build -o gotext.latest +//go:generate ./gotext.latest help gendocumentation +//go:generate rm gotext.latest + +package main + +import ( + "bufio" + "bytes" + "flag" + "fmt" + "go/build" + "go/format" + "io" + "io/ioutil" + "log" + "os" + "strings" + "sync" + "text/template" + "unicode" + "unicode/utf8" + + "golang.org/x/text/language" + "golang.org/x/tools/go/buildutil" +) + +func init() { + flag.Var((*buildutil.TagsFlag)(&build.Default.BuildTags), "tags", buildutil.TagsFlagDoc) +} + +var ( + dir = flag.String("dir", "textdata", "default subdirectory to store translation files") + langs = flag.String("lang", "en", "comma-separated list of languages to process") +) + +// NOTE: the Command struct is copied from the go tool in core. + +// A Command is an implementation of a go command +// like go build or go fix. +type Command struct { + // Run runs the command. + // The args are the arguments after the command name. + Run func(cmd *Command, args []string) error + + // UsageLine is the one-line usage message. + // The first word in the line is taken to be the command name. + UsageLine string + + // Short is the short description shown in the 'go help' output. + Short string + + // Long is the long message shown in the 'go help <this-command>' output. + Long string + + // Flag is a set of flags specific to this command. + Flag flag.FlagSet +} + +// Name returns the command's name: the first word in the usage line. +func (c *Command) Name() string { + name := c.UsageLine + i := strings.Index(name, " ") + if i >= 0 { + name = name[:i] + } + return name +} + +func (c *Command) Usage() { + fmt.Fprintf(os.Stderr, "usage: %s\n\n", c.UsageLine) + fmt.Fprintf(os.Stderr, "%s\n", strings.TrimSpace(c.Long)) + os.Exit(2) +} + +// Runnable reports whether the command can be run; otherwise +// it is a documentation pseudo-command such as importpath. +func (c *Command) Runnable() bool { + return c.Run != nil +} + +// Commands lists the available commands and help topics. +// The order here is the order in which they are printed by 'go help'. +var commands = []*Command{ + cmdExtract, + // TODO: + // - generate code from translations. + // - update: full-cycle update of extraction, sending, and integration + // - report: report of freshness of translations +} + +var exitStatus = 0 +var exitMu sync.Mutex + +func setExitStatus(n int) { + exitMu.Lock() + if exitStatus < n { + exitStatus = n + } + exitMu.Unlock() +} + +var origEnv []string + +func main() { + flag.Usage = usage + flag.Parse() + log.SetFlags(0) + + args := flag.Args() + if len(args) < 1 { + usage() + } + + if args[0] == "help" { + help(args[1:]) + return + } + + for _, cmd := range commands { + if cmd.Name() == args[0] && cmd.Runnable() { + cmd.Flag.Usage = func() { cmd.Usage() } + cmd.Flag.Parse(args[1:]) + args = cmd.Flag.Args() + if err := cmd.Run(cmd, args); err != nil { + fatalf("gotext: %v", err) + } + exit() + return + } + } + + fmt.Fprintf(os.Stderr, "gotext: unknown subcommand %q\nRun 'go help' for usage.\n", args[0]) + setExitStatus(2) + exit() +} + +var usageTemplate = `gotext is a tool for managing text in Go source code. + +Usage: + + gotext command [arguments] + +The commands are: +{{range .}}{{if .Runnable}} + {{.Name | printf "%-11s"}} {{.Short}}{{end}}{{end}} + +Use "go help [command]" for more information about a command. + +Additional help topics: +{{range .}}{{if not .Runnable}} + {{.Name | printf "%-11s"}} {{.Short}}{{end}}{{end}} + +Use "gotext help [topic]" for more information about that topic. + +` + +var helpTemplate = `{{if .Runnable}}usage: go {{.UsageLine}} + +{{end}}{{.Long | trim}} +` + +var documentationTemplate = `{{range .}}{{if .Short}}{{.Short | capitalize}} + +{{end}}{{if .Runnable}}Usage: + + go {{.UsageLine}} + +{{end}}{{.Long | trim}} + + +{{end}}` + +// commentWriter writes a Go comment to the underlying io.Writer, +// using line comment form (//). +type commentWriter struct { + W io.Writer + wroteSlashes bool // Wrote "//" at the beginning of the current line. +} + +func (c *commentWriter) Write(p []byte) (int, error) { + var n int + for i, b := range p { + if !c.wroteSlashes { + s := "//" + if b != '\n' { + s = "// " + } + if _, err := io.WriteString(c.W, s); err != nil { + return n, err + } + c.wroteSlashes = true + } + n0, err := c.W.Write(p[i : i+1]) + n += n0 + if err != nil { + return n, err + } + if b == '\n' { + c.wroteSlashes = false + } + } + return len(p), nil +} + +// An errWriter wraps a writer, recording whether a write error occurred. +type errWriter struct { + w io.Writer + err error +} + +func (w *errWriter) Write(b []byte) (int, error) { + n, err := w.w.Write(b) + if err != nil { + w.err = err + } + return n, err +} + +// tmpl executes the given template text on data, writing the result to w. +func tmpl(w io.Writer, text string, data interface{}) { + t := template.New("top") + t.Funcs(template.FuncMap{"trim": strings.TrimSpace, "capitalize": capitalize}) + template.Must(t.Parse(text)) + ew := &errWriter{w: w} + err := t.Execute(ew, data) + if ew.err != nil { + // I/O error writing. Ignore write on closed pipe. + if strings.Contains(ew.err.Error(), "pipe") { + os.Exit(1) + } + fatalf("writing output: %v", ew.err) + } + if err != nil { + panic(err) + } +} + +func capitalize(s string) string { + if s == "" { + return s + } + r, n := utf8.DecodeRuneInString(s) + return string(unicode.ToTitle(r)) + s[n:] +} + +func printUsage(w io.Writer) { + bw := bufio.NewWriter(w) + tmpl(bw, usageTemplate, commands) + bw.Flush() +} + +func usage() { + printUsage(os.Stderr) + os.Exit(2) +} + +// help implements the 'help' command. +func help(args []string) { + if len(args) == 0 { + printUsage(os.Stdout) + // not exit 2: succeeded at 'go help'. + return + } + if len(args) != 1 { + fmt.Fprintf(os.Stderr, "usage: go help command\n\nToo many arguments given.\n") + os.Exit(2) // failed at 'go help' + } + + arg := args[0] + + // 'go help documentation' generates doc.go. + if strings.HasSuffix(arg, "documentation") { + w := &bytes.Buffer{} + + fmt.Fprintln(w, "// Copyright 2016 The Go Authors. All rights reserved.") + fmt.Fprintln(w, "// Use of this source code is governed by a BSD-style") + fmt.Fprintln(w, "// license that can be found in the LICENSE file.") + fmt.Fprintln(w) + fmt.Fprintln(w, "// DO NOT EDIT THIS FILE. GENERATED BY go generate.") + fmt.Fprintln(w, "// Edit the documentation in other files and rerun go generate to generate this one.") + fmt.Fprintln(w) + buf := new(bytes.Buffer) + printUsage(buf) + usage := &Command{Long: buf.String()} + tmpl(&commentWriter{W: w}, documentationTemplate, append([]*Command{usage}, commands...)) + fmt.Fprintln(w, "package main") + if arg == "gendocumentation" { + b, err := format.Source(w.Bytes()) + if err != nil { + errorf("Could not format generated docs: %v\n", err) + } + if err := ioutil.WriteFile("doc.go", b, 0666); err != nil { + errorf("Could not create file alldocs.go: %v\n", err) + } + } else { + fmt.Println(w.String()) + } + return + } + + for _, cmd := range commands { + if cmd.Name() == arg { + tmpl(os.Stdout, helpTemplate, cmd) + // not exit 2: succeeded at 'go help cmd'. + return + } + } + + fmt.Fprintf(os.Stderr, "Unknown help topic %#q. Run 'go help'.\n", arg) + os.Exit(2) // failed at 'go help cmd' +} + +func getLangs() (tags []language.Tag) { + for _, t := range strings.Split(*langs, ",") { + tag, err := language.Parse(t) + if err != nil { + fatalf("gotext: could not parse language %q: %v", t, err) + } + tags = append(tags, tag) + } + return tags +} + +var atexitFuncs []func() + +func atexit(f func()) { + atexitFuncs = append(atexitFuncs, f) +} + +func exit() { + for _, f := range atexitFuncs { + f() + } + os.Exit(exitStatus) +} + +func fatalf(format string, args ...interface{}) { + errorf(format, args...) + exit() +} + +func errorf(format string, args ...interface{}) { + log.Printf(format, args...) + setExitStatus(1) +} + +func exitIfErrors() { + if exitStatus != 0 { + exit() + } +} diff --git a/vendor/golang.org/x/text/cmd/gotext/message.go b/vendor/golang.org/x/text/cmd/gotext/message.go new file mode 100644 index 0000000..67a622f --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/message.go @@ -0,0 +1,127 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +// TODO: these definitions should be moved to a package so that the can be used +// by other tools. + +// The file contains the structures used to define translations of a certain +// messages. +// +// A translation may have multiple translations strings, or messages, depending +// on the feature values of the various arguments. For instance, consider +// a hypothetical translation from English to English, where the source defines +// the format string "%d file(s) remaining". A completed translation, expressed +// in JS, for this format string could look like: +// +// { +// "Key": [ +// "\"%d files(s) remaining\"" +// ], +// "Original": { +// "Msg": "\"%d files(s) remaining\"" +// }, +// "Translation": { +// "Select": { +// "Feature": "plural", +// "Arg": 1, +// "Case": { +// "one": { "Msg": "1 file remaining" }, +// "other": { "Msg": "%d files remaining" } +// }, +// }, +// }, +// "Args": [ +// { +// "ID": 2, +// "Type": "int", +// "UnderlyingType": "int", +// "Expr": "nFiles", +// "Comment": "number of files remaining", +// "Position": "golang.org/x/text/cmd/gotext/demo.go:34:3" +// } +// ], +// "Position": "golang.org/x/text/cmd/gotext/demo.go:33:10", +// } +// +// Alternatively, the Translation section could be written as: +// +// "Translation": { +// "Msg": "%d %[files]s remaining", +// "Var": { +// "files" : { +// "Select": { +// "Feature": "plural", +// "Arg": 1, +// "Case": { +// "one": { "Msg": "file" }, +// "other": { "Msg": "files" } +// } +// } +// } +// } +// } + +// A Translation describes a translation for a single language for a single +// message. +type Translation struct { + // Key contains a list of identifiers for the message. If this list is empty + // Original is used as the key. + Key []string `json:"key,omitempty"` + Original Text `json:"original"` + Translation Text `json:"translation"` + ExtractedComment string `json:"extractedComment,omitempty"` + TranslatorComment string `json:"translatorComment,omitempty"` + + Args []Argument `json:"args,omitempty"` + + // Extraction information. + Position string `json:"position,omitempty"` // filePosition:line +} + +// An Argument contains information about the arguments passed to a message. +type Argument struct { + ID interface{} `json:"id"` // An int for printf-style calls, but could be a string. + Type string `json:"type"` + UnderlyingType string `json:"underlyingType"` + Expr string `json:"expr"` + Value string `json:"value,omitempty"` + Comment string `json:"comment,omitempty"` + Position string `json:"position,omitempty"` + + // Features contains the features that are available for the implementation + // of this argument. + Features []Feature `json:"features,omitempty"` +} + +// Feature holds information about a feature that can be implemented by +// an Argument. +type Feature struct { + Type string `json:"type"` // Right now this is only gender and plural. + + // TODO: possible values and examples for the language under consideration. + +} + +// Text defines a message to be displayed. +type Text struct { + // Msg and Select contains the message to be displayed. Within a Text value + // either Msg or Select is defined. + Msg string `json:"msg,omitempty"` + Select *Select `json:"select,omitempty"` + // Var defines a map of variables that may be substituted in the selected + // message. + Var map[string]Text `json:"var,omitempty"` + // Example contains an example message formatted with default values. + Example string `json:"example,omitempty"` +} + +// Type Select selects a Text based on the feature value associated with +// a feature of a certain argument. +type Select struct { + Feature string `json:"feature"` // Name of variable or Feature type + Arg interface{} `json:"arg"` // The argument ID. + Cases map[string]Text `json:"cases"` +} diff --git a/vendor/golang.org/x/text/codereview.cfg b/vendor/golang.org/x/text/codereview.cfg new file mode 100644 index 0000000..3f8b14b --- /dev/null +++ b/vendor/golang.org/x/text/codereview.cfg @@ -0,0 +1 @@ +issuerepo: golang/go diff --git a/vendor/golang.org/x/text/collate/build/builder.go b/vendor/golang.org/x/text/collate/build/builder.go new file mode 100644 index 0000000..8b5391d --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/builder.go @@ -0,0 +1,703 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build // import "golang.org/x/text/collate/build" + +import ( + "fmt" + "io" + "log" + "sort" + "strings" + "unicode/utf8" + + "golang.org/x/text/internal/colltab" + "golang.org/x/text/language" + "golang.org/x/text/unicode/norm" +) + +// TODO: optimizations: +// - expandElem is currently 20K. By putting unique colElems in a separate +// table and having a byte array of indexes into this table, we can reduce +// the total size to about 7K. By also factoring out the length bytes, we +// can reduce this to about 6K. +// - trie valueBlocks are currently 100K. There are a lot of sparse blocks +// and many consecutive values with the same stride. This can be further +// compacted. +// - Compress secondary weights into 8 bits. +// - Some LDML specs specify a context element. Currently we simply concatenate +// those. Context can be implemented using the contraction trie. If Builder +// could analyze and detect when using a context makes sense, there is no +// need to expose this construct in the API. + +// A Builder builds a root collation table. The user must specify the +// collation elements for each entry. A common use will be to base the weights +// on those specified in the allkeys* file as provided by the UCA or CLDR. +type Builder struct { + index *trieBuilder + root ordering + locale []*Tailoring + t *table + err error + built bool + + minNonVar int // lowest primary recorded for a variable + varTop int // highest primary recorded for a non-variable + + // indexes used for reusing expansions and contractions + expIndex map[string]int // positions of expansions keyed by their string representation + ctHandle map[string]ctHandle // contraction handles keyed by a concatenation of the suffixes + ctElem map[string]int // contraction elements keyed by their string representation +} + +// A Tailoring builds a collation table based on another collation table. +// The table is defined by specifying tailorings to the underlying table. +// See http://unicode.org/reports/tr35/ for an overview of tailoring +// collation tables. The CLDR contains pre-defined tailorings for a variety +// of languages (See http://www.unicode.org/Public/cldr/<version>/core.zip.) +type Tailoring struct { + id string + builder *Builder + index *ordering + + anchor *entry + before bool +} + +// NewBuilder returns a new Builder. +func NewBuilder() *Builder { + return &Builder{ + index: newTrieBuilder(), + root: makeRootOrdering(), + expIndex: make(map[string]int), + ctHandle: make(map[string]ctHandle), + ctElem: make(map[string]int), + } +} + +// Tailoring returns a Tailoring for the given locale. One should +// have completed all calls to Add before calling Tailoring. +func (b *Builder) Tailoring(loc language.Tag) *Tailoring { + t := &Tailoring{ + id: loc.String(), + builder: b, + index: b.root.clone(), + } + t.index.id = t.id + b.locale = append(b.locale, t) + return t +} + +// Add adds an entry to the collation element table, mapping +// a slice of runes to a sequence of collation elements. +// A collation element is specified as list of weights: []int{primary, secondary, ...}. +// The entries are typically obtained from a collation element table +// as defined in http://www.unicode.org/reports/tr10/#Data_Table_Format. +// Note that the collation elements specified by colelems are only used +// as a guide. The actual weights generated by Builder may differ. +// The argument variables is a list of indices into colelems that should contain +// a value for each colelem that is a variable. (See the reference above.) +func (b *Builder) Add(runes []rune, colelems [][]int, variables []int) error { + str := string(runes) + elems := make([]rawCE, len(colelems)) + for i, ce := range colelems { + if len(ce) == 0 { + break + } + elems[i] = makeRawCE(ce, 0) + if len(ce) == 1 { + elems[i].w[1] = defaultSecondary + } + if len(ce) <= 2 { + elems[i].w[2] = defaultTertiary + } + if len(ce) <= 3 { + elems[i].w[3] = ce[0] + } + } + for i, ce := range elems { + p := ce.w[0] + isvar := false + for _, j := range variables { + if i == j { + isvar = true + } + } + if isvar { + if p >= b.minNonVar && b.minNonVar > 0 { + return fmt.Errorf("primary value %X of variable is larger than the smallest non-variable %X", p, b.minNonVar) + } + if p > b.varTop { + b.varTop = p + } + } else if p > 1 { // 1 is a special primary value reserved for FFFE + if p <= b.varTop { + return fmt.Errorf("primary value %X of non-variable is smaller than the highest variable %X", p, b.varTop) + } + if b.minNonVar == 0 || p < b.minNonVar { + b.minNonVar = p + } + } + } + elems, err := convertLargeWeights(elems) + if err != nil { + return err + } + cccs := []uint8{} + nfd := norm.NFD.String(str) + for i := range nfd { + cccs = append(cccs, norm.NFD.PropertiesString(nfd[i:]).CCC()) + } + if len(cccs) < len(elems) { + if len(cccs) > 2 { + return fmt.Errorf("number of decomposed characters should be greater or equal to the number of collation elements for len(colelems) > 3 (%d < %d)", len(cccs), len(elems)) + } + p := len(elems) - 1 + for ; p > 0 && elems[p].w[0] == 0; p-- { + elems[p].ccc = cccs[len(cccs)-1] + } + for ; p >= 0; p-- { + elems[p].ccc = cccs[0] + } + } else { + for i := range elems { + elems[i].ccc = cccs[i] + } + } + // doNorm in collate.go assumes that the following conditions hold. + if len(elems) > 1 && len(cccs) > 1 && cccs[0] != 0 && cccs[0] != cccs[len(cccs)-1] { + return fmt.Errorf("incompatible CCC values for expansion %X (%d)", runes, cccs) + } + b.root.newEntry(str, elems) + return nil +} + +func (t *Tailoring) setAnchor(anchor string) error { + anchor = norm.NFC.String(anchor) + a := t.index.find(anchor) + if a == nil { + a = t.index.newEntry(anchor, nil) + a.implicit = true + a.modified = true + for _, r := range []rune(anchor) { + e := t.index.find(string(r)) + e.lock = true + } + } + t.anchor = a + return nil +} + +// SetAnchor sets the point after which elements passed in subsequent calls to +// Insert will be inserted. It is equivalent to the reset directive in an LDML +// specification. See Insert for an example. +// SetAnchor supports the following logical reset positions: +// <first_tertiary_ignorable/>, <last_teriary_ignorable/>, <first_primary_ignorable/>, +// and <last_non_ignorable/>. +func (t *Tailoring) SetAnchor(anchor string) error { + if err := t.setAnchor(anchor); err != nil { + return err + } + t.before = false + return nil +} + +// SetAnchorBefore is similar to SetAnchor, except that subsequent calls to +// Insert will insert entries before the anchor. +func (t *Tailoring) SetAnchorBefore(anchor string) error { + if err := t.setAnchor(anchor); err != nil { + return err + } + t.before = true + return nil +} + +// Insert sets the ordering of str relative to the entry set by the previous +// call to SetAnchor or Insert. The argument extend corresponds +// to the extend elements as defined in LDML. A non-empty value for extend +// will cause the collation elements corresponding to extend to be appended +// to the collation elements generated for the entry added by Insert. +// This has the same net effect as sorting str after the string anchor+extend. +// See http://www.unicode.org/reports/tr10/#Tailoring_Example for details +// on parametric tailoring and http://unicode.org/reports/tr35/#Collation_Elements +// for full details on LDML. +// +// Examples: create a tailoring for Swedish, where "ä" is ordered after "z" +// at the primary sorting level: +// t := b.Tailoring("se") +// t.SetAnchor("z") +// t.Insert(colltab.Primary, "ä", "") +// Order "ü" after "ue" at the secondary sorting level: +// t.SetAnchor("ue") +// t.Insert(colltab.Secondary, "ü","") +// or +// t.SetAnchor("u") +// t.Insert(colltab.Secondary, "ü", "e") +// Order "q" afer "ab" at the secondary level and "Q" after "q" +// at the tertiary level: +// t.SetAnchor("ab") +// t.Insert(colltab.Secondary, "q", "") +// t.Insert(colltab.Tertiary, "Q", "") +// Order "b" before "a": +// t.SetAnchorBefore("a") +// t.Insert(colltab.Primary, "b", "") +// Order "0" after the last primary ignorable: +// t.SetAnchor("<last_primary_ignorable/>") +// t.Insert(colltab.Primary, "0", "") +func (t *Tailoring) Insert(level colltab.Level, str, extend string) error { + if t.anchor == nil { + return fmt.Errorf("%s:Insert: no anchor point set for tailoring of %s", t.id, str) + } + str = norm.NFC.String(str) + e := t.index.find(str) + if e == nil { + e = t.index.newEntry(str, nil) + } else if e.logical != noAnchor { + return fmt.Errorf("%s:Insert: cannot reinsert logical reset position %q", t.id, e.str) + } + if e.lock { + return fmt.Errorf("%s:Insert: cannot reinsert element %q", t.id, e.str) + } + a := t.anchor + // Find the first element after the anchor which differs at a level smaller or + // equal to the given level. Then insert at this position. + // See http://unicode.org/reports/tr35/#Collation_Elements, Section 5.14.5 for details. + e.before = t.before + if t.before { + t.before = false + if a.prev == nil { + a.insertBefore(e) + } else { + for a = a.prev; a.level > level; a = a.prev { + } + a.insertAfter(e) + } + e.level = level + } else { + for ; a.level > level; a = a.next { + } + e.level = a.level + if a != e { + a.insertAfter(e) + a.level = level + } else { + // We don't set a to prev itself. This has the effect of the entry + // getting new collation elements that are an increment of itself. + // This is intentional. + a.prev.level = level + } + } + e.extend = norm.NFD.String(extend) + e.exclude = false + e.modified = true + e.elems = nil + t.anchor = e + return nil +} + +func (o *ordering) getWeight(e *entry) []rawCE { + if len(e.elems) == 0 && e.logical == noAnchor { + if e.implicit { + for _, r := range e.runes { + e.elems = append(e.elems, o.getWeight(o.find(string(r)))...) + } + } else if e.before { + count := [colltab.Identity + 1]int{} + a := e + for ; a.elems == nil && !a.implicit; a = a.next { + count[a.level]++ + } + e.elems = []rawCE{makeRawCE(a.elems[0].w, a.elems[0].ccc)} + for i := colltab.Primary; i < colltab.Quaternary; i++ { + if count[i] != 0 { + e.elems[0].w[i] -= count[i] + break + } + } + if e.prev != nil { + o.verifyWeights(e.prev, e, e.prev.level) + } + } else { + prev := e.prev + e.elems = nextWeight(prev.level, o.getWeight(prev)) + o.verifyWeights(e, e.next, e.level) + } + } + return e.elems +} + +func (o *ordering) addExtension(e *entry) { + if ex := o.find(e.extend); ex != nil { + e.elems = append(e.elems, ex.elems...) + } else { + for _, r := range []rune(e.extend) { + e.elems = append(e.elems, o.find(string(r)).elems...) + } + } + e.extend = "" +} + +func (o *ordering) verifyWeights(a, b *entry, level colltab.Level) error { + if level == colltab.Identity || b == nil || b.elems == nil || a.elems == nil { + return nil + } + for i := colltab.Primary; i < level; i++ { + if a.elems[0].w[i] < b.elems[0].w[i] { + return nil + } + } + if a.elems[0].w[level] >= b.elems[0].w[level] { + err := fmt.Errorf("%s:overflow: collation elements of %q (%X) overflows those of %q (%X) at level %d (%X >= %X)", o.id, a.str, a.runes, b.str, b.runes, level, a.elems, b.elems) + log.Println(err) + // TODO: return the error instead, or better, fix the conflicting entry by making room. + } + return nil +} + +func (b *Builder) error(e error) { + if e != nil { + b.err = e + } +} + +func (b *Builder) errorID(locale string, e error) { + if e != nil { + b.err = fmt.Errorf("%s:%v", locale, e) + } +} + +// patchNorm ensures that NFC and NFD counterparts are consistent. +func (o *ordering) patchNorm() { + // Insert the NFD counterparts, if necessary. + for _, e := range o.ordered { + nfd := norm.NFD.String(e.str) + if nfd != e.str { + if e0 := o.find(nfd); e0 != nil && !e0.modified { + e0.elems = e.elems + } else if e.modified && !equalCEArrays(o.genColElems(nfd), e.elems) { + e := o.newEntry(nfd, e.elems) + e.modified = true + } + } + } + // Update unchanged composed forms if one of their parts changed. + for _, e := range o.ordered { + nfd := norm.NFD.String(e.str) + if e.modified || nfd == e.str { + continue + } + if e0 := o.find(nfd); e0 != nil { + e.elems = e0.elems + } else { + e.elems = o.genColElems(nfd) + if norm.NFD.LastBoundary([]byte(nfd)) == 0 { + r := []rune(nfd) + head := string(r[0]) + tail := "" + for i := 1; i < len(r); i++ { + s := norm.NFC.String(head + string(r[i])) + if e0 := o.find(s); e0 != nil && e0.modified { + head = s + } else { + tail += string(r[i]) + } + } + e.elems = append(o.genColElems(head), o.genColElems(tail)...) + } + } + } + // Exclude entries for which the individual runes generate the same collation elements. + for _, e := range o.ordered { + if len(e.runes) > 1 && equalCEArrays(o.genColElems(e.str), e.elems) { + e.exclude = true + } + } +} + +func (b *Builder) buildOrdering(o *ordering) { + for _, e := range o.ordered { + o.getWeight(e) + } + for _, e := range o.ordered { + o.addExtension(e) + } + o.patchNorm() + o.sort() + simplify(o) + b.processExpansions(o) // requires simplify + b.processContractions(o) // requires simplify + + t := newNode() + for e := o.front(); e != nil; e, _ = e.nextIndexed() { + if !e.skip() { + ce, err := e.encode() + b.errorID(o.id, err) + t.insert(e.runes[0], ce) + } + } + o.handle = b.index.addTrie(t) +} + +func (b *Builder) build() (*table, error) { + if b.built { + return b.t, b.err + } + b.built = true + b.t = &table{ + Table: colltab.Table{ + MaxContractLen: utf8.UTFMax, + VariableTop: uint32(b.varTop), + }, + } + + b.buildOrdering(&b.root) + b.t.root = b.root.handle + for _, t := range b.locale { + b.buildOrdering(t.index) + if b.err != nil { + break + } + } + i, err := b.index.generate() + b.t.trie = *i + b.t.Index = colltab.Trie{ + Index: i.index, + Values: i.values, + Index0: i.index[blockSize*b.t.root.lookupStart:], + Values0: i.values[blockSize*b.t.root.valueStart:], + } + b.error(err) + return b.t, b.err +} + +// Build builds the root Collator. +// TODO: return Weighter instead +func (b *Builder) Build() (colltab.Weighter, error) { + table, err := b.build() + if err != nil { + return nil, err + } + return table, nil +} + +// Build builds a Collator for Tailoring t. +func (t *Tailoring) Build() (colltab.Weighter, error) { + // TODO: implement. + return nil, nil +} + +// Print prints the tables for b and all its Tailorings as a Go file +// that can be included in the Collate package. +func (b *Builder) Print(w io.Writer) (n int, err error) { + p := func(nn int, e error) { + n += nn + if err == nil { + err = e + } + } + t, err := b.build() + if err != nil { + return 0, err + } + p(fmt.Fprintf(w, `var availableLocales = "und`)) + for _, loc := range b.locale { + if loc.id != "und" { + p(fmt.Fprintf(w, ",%s", loc.id)) + } + } + p(fmt.Fprint(w, "\"\n\n")) + p(fmt.Fprintf(w, "const varTop = 0x%x\n\n", b.varTop)) + p(fmt.Fprintln(w, "var locales = [...]tableIndex{")) + for _, loc := range b.locale { + if loc.id == "und" { + p(t.fprintIndex(w, loc.index.handle, loc.id)) + } + } + for _, loc := range b.locale { + if loc.id != "und" { + p(t.fprintIndex(w, loc.index.handle, loc.id)) + } + } + p(fmt.Fprint(w, "}\n\n")) + n, _, err = t.fprint(w, "main") + return +} + +// reproducibleFromNFKD checks whether the given expansion could be generated +// from an NFKD expansion. +func reproducibleFromNFKD(e *entry, exp, nfkd []rawCE) bool { + // Length must be equal. + if len(exp) != len(nfkd) { + return false + } + for i, ce := range exp { + // Primary and secondary values should be equal. + if ce.w[0] != nfkd[i].w[0] || ce.w[1] != nfkd[i].w[1] { + return false + } + // Tertiary values should be equal to maxTertiary for third element onwards. + // TODO: there seem to be a lot of cases in CLDR (e.g. ㏭ in zh.xml) that can + // simply be dropped. Try this out by dropping the following code. + if i >= 2 && ce.w[2] != maxTertiary { + return false + } + if _, err := makeCE(ce); err != nil { + // Simply return false. The error will be caught elsewhere. + return false + } + } + return true +} + +func simplify(o *ordering) { + // Runes that are a starter of a contraction should not be removed. + // (To date, there is only Kannada character 0CCA.) + keep := make(map[rune]bool) + for e := o.front(); e != nil; e, _ = e.nextIndexed() { + if len(e.runes) > 1 { + keep[e.runes[0]] = true + } + } + // Tag entries for which the runes NFKD decompose to identical values. + for e := o.front(); e != nil; e, _ = e.nextIndexed() { + s := e.str + nfkd := norm.NFKD.String(s) + nfd := norm.NFD.String(s) + if e.decompose || len(e.runes) > 1 || len(e.elems) == 1 || keep[e.runes[0]] || nfkd == nfd { + continue + } + if reproducibleFromNFKD(e, e.elems, o.genColElems(nfkd)) { + e.decompose = true + } + } +} + +// appendExpansion converts the given collation sequence to +// collation elements and adds them to the expansion table. +// It returns an index to the expansion table. +func (b *Builder) appendExpansion(e *entry) int { + t := b.t + i := len(t.ExpandElem) + ce := uint32(len(e.elems)) + t.ExpandElem = append(t.ExpandElem, ce) + for _, w := range e.elems { + ce, err := makeCE(w) + if err != nil { + b.error(err) + return -1 + } + t.ExpandElem = append(t.ExpandElem, ce) + } + return i +} + +// processExpansions extracts data necessary to generate +// the extraction tables. +func (b *Builder) processExpansions(o *ordering) { + for e := o.front(); e != nil; e, _ = e.nextIndexed() { + if !e.expansion() { + continue + } + key := fmt.Sprintf("%v", e.elems) + i, ok := b.expIndex[key] + if !ok { + i = b.appendExpansion(e) + b.expIndex[key] = i + } + e.expansionIndex = i + } +} + +func (b *Builder) processContractions(o *ordering) { + // Collate contractions per starter rune. + starters := []rune{} + cm := make(map[rune][]*entry) + for e := o.front(); e != nil; e, _ = e.nextIndexed() { + if e.contraction() { + if len(e.str) > b.t.MaxContractLen { + b.t.MaxContractLen = len(e.str) + } + r := e.runes[0] + if _, ok := cm[r]; !ok { + starters = append(starters, r) + } + cm[r] = append(cm[r], e) + } + } + // Add entries of single runes that are at a start of a contraction. + for e := o.front(); e != nil; e, _ = e.nextIndexed() { + if !e.contraction() { + r := e.runes[0] + if _, ok := cm[r]; ok { + cm[r] = append(cm[r], e) + } + } + } + // Build the tries for the contractions. + t := b.t + for _, r := range starters { + l := cm[r] + // Compute suffix strings. There are 31 different contraction suffix + // sets for 715 contractions and 82 contraction starter runes as of + // version 6.0.0. + sufx := []string{} + hasSingle := false + for _, e := range l { + if len(e.runes) > 1 { + sufx = append(sufx, string(e.runes[1:])) + } else { + hasSingle = true + } + } + if !hasSingle { + b.error(fmt.Errorf("no single entry for starter rune %U found", r)) + continue + } + // Unique the suffix set. + sort.Strings(sufx) + key := strings.Join(sufx, "\n") + handle, ok := b.ctHandle[key] + if !ok { + var err error + handle, err = appendTrie(&t.ContractTries, sufx) + if err != nil { + b.error(err) + } + b.ctHandle[key] = handle + } + // Bucket sort entries in index order. + es := make([]*entry, len(l)) + for _, e := range l { + var p, sn int + if len(e.runes) > 1 { + str := []byte(string(e.runes[1:])) + p, sn = lookup(&t.ContractTries, handle, str) + if sn != len(str) { + log.Fatalf("%s: processContractions: unexpected length for '%X'; len=%d; want %d", o.id, e.runes, sn, len(str)) + } + } + if es[p] != nil { + log.Fatalf("%s: multiple contractions for position %d for rune %U", o.id, p, e.runes[0]) + } + es[p] = e + } + // Create collation elements for contractions. + elems := []uint32{} + for _, e := range es { + ce, err := e.encodeBase() + b.errorID(o.id, err) + elems = append(elems, ce) + } + key = fmt.Sprintf("%v", elems) + i, ok := b.ctElem[key] + if !ok { + i = len(t.ContractElem) + b.ctElem[key] = i + t.ContractElem = append(t.ContractElem, elems...) + } + // Store info in entry for starter rune. + es[0].contractionIndex = i + es[0].contractionHandle = handle + } +} diff --git a/vendor/golang.org/x/text/collate/build/builder_test.go b/vendor/golang.org/x/text/collate/build/builder_test.go new file mode 100644 index 0000000..ff0aba3 --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/builder_test.go @@ -0,0 +1,290 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import "testing" + +// cjk returns an implicit collation element for a CJK rune. +func cjk(r rune) []rawCE { + // A CJK character C is represented in the DUCET as + // [.AAAA.0020.0002.C][.BBBB.0000.0000.C] + // Where AAAA is the most significant 15 bits plus a base value. + // Any base value will work for the test, so we pick the common value of FB40. + const base = 0xFB40 + return []rawCE{ + {w: []int{base + int(r>>15), defaultSecondary, defaultTertiary, int(r)}}, + {w: []int{int(r&0x7FFF) | 0x8000, 0, 0, int(r)}}, + } +} + +func pCE(p int) []rawCE { + return mkCE([]int{p, defaultSecondary, defaultTertiary, 0}, 0) +} + +func pqCE(p, q int) []rawCE { + return mkCE([]int{p, defaultSecondary, defaultTertiary, q}, 0) +} + +func ptCE(p, t int) []rawCE { + return mkCE([]int{p, defaultSecondary, t, 0}, 0) +} + +func ptcCE(p, t int, ccc uint8) []rawCE { + return mkCE([]int{p, defaultSecondary, t, 0}, ccc) +} + +func sCE(s int) []rawCE { + return mkCE([]int{0, s, defaultTertiary, 0}, 0) +} + +func stCE(s, t int) []rawCE { + return mkCE([]int{0, s, t, 0}, 0) +} + +func scCE(s int, ccc uint8) []rawCE { + return mkCE([]int{0, s, defaultTertiary, 0}, ccc) +} + +func mkCE(w []int, ccc uint8) []rawCE { + return []rawCE{rawCE{w, ccc}} +} + +// ducetElem is used to define test data that is used to generate a table. +type ducetElem struct { + str string + ces []rawCE +} + +func newBuilder(t *testing.T, ducet []ducetElem) *Builder { + b := NewBuilder() + for _, e := range ducet { + ces := [][]int{} + for _, ce := range e.ces { + ces = append(ces, ce.w) + } + if err := b.Add([]rune(e.str), ces, nil); err != nil { + t.Errorf(err.Error()) + } + } + b.t = &table{} + b.root.sort() + return b +} + +type convertTest struct { + in, out []rawCE + err bool +} + +var convLargeTests = []convertTest{ + {pCE(0xFB39), pCE(0xFB39), false}, + {cjk(0x2F9B2), pqCE(0x3F9B2, 0x2F9B2), false}, + {pCE(0xFB40), pCE(0), true}, + {append(pCE(0xFB40), pCE(0)[0]), pCE(0), true}, + {pCE(0xFFFE), pCE(illegalOffset), false}, + {pCE(0xFFFF), pCE(illegalOffset + 1), false}, +} + +func TestConvertLarge(t *testing.T) { + for i, tt := range convLargeTests { + e := new(entry) + for _, ce := range tt.in { + e.elems = append(e.elems, makeRawCE(ce.w, ce.ccc)) + } + elems, err := convertLargeWeights(e.elems) + if tt.err { + if err == nil { + t.Errorf("%d: expected error; none found", i) + } + continue + } else if err != nil { + t.Errorf("%d: unexpected error: %v", i, err) + } + if !equalCEArrays(elems, tt.out) { + t.Errorf("%d: conversion was %x; want %x", i, elems, tt.out) + } + } +} + +// Collation element table for simplify tests. +var simplifyTest = []ducetElem{ + {"\u0300", sCE(30)}, // grave + {"\u030C", sCE(40)}, // caron + {"A", ptCE(100, 8)}, + {"D", ptCE(104, 8)}, + {"E", ptCE(105, 8)}, + {"I", ptCE(110, 8)}, + {"z", ptCE(130, 8)}, + {"\u05F2", append(ptCE(200, 4), ptCE(200, 4)[0])}, + {"\u05B7", sCE(80)}, + {"\u00C0", append(ptCE(100, 8), sCE(30)...)}, // A with grave, can be removed + {"\u00C8", append(ptCE(105, 8), sCE(30)...)}, // E with grave + {"\uFB1F", append(ptCE(200, 4), ptCE(200, 4)[0], sCE(80)[0])}, // eliminated by NFD + {"\u00C8\u0302", ptCE(106, 8)}, // block previous from simplifying + {"\u01C5", append(ptCE(104, 9), ptCE(130, 4)[0], stCE(40, maxTertiary)[0])}, // eliminated by NFKD + // no removal: tertiary value of third element is not maxTertiary + {"\u2162", append(ptCE(110, 9), ptCE(110, 4)[0], ptCE(110, 8)[0])}, +} + +var genColTests = []ducetElem{ + {"\uFA70", pqCE(0x1FA70, 0xFA70)}, + {"A\u0300", append(ptCE(100, 8), sCE(30)...)}, + {"A\u0300\uFA70", append(ptCE(100, 8), sCE(30)[0], pqCE(0x1FA70, 0xFA70)[0])}, + {"A\u0300A\u0300", append(ptCE(100, 8), sCE(30)[0], ptCE(100, 8)[0], sCE(30)[0])}, +} + +func TestGenColElems(t *testing.T) { + b := newBuilder(t, simplifyTest[:5]) + + for i, tt := range genColTests { + res := b.root.genColElems(tt.str) + if !equalCEArrays(tt.ces, res) { + t.Errorf("%d: result %X; want %X", i, res, tt.ces) + } + } +} + +type strArray []string + +func (sa strArray) contains(s string) bool { + for _, e := range sa { + if e == s { + return true + } + } + return false +} + +var simplifyRemoved = strArray{"\u00C0", "\uFB1F"} +var simplifyMarked = strArray{"\u01C5"} + +func TestSimplify(t *testing.T) { + b := newBuilder(t, simplifyTest) + o := &b.root + simplify(o) + + for i, tt := range simplifyTest { + if simplifyRemoved.contains(tt.str) { + continue + } + e := o.find(tt.str) + if e.str != tt.str || !equalCEArrays(e.elems, tt.ces) { + t.Errorf("%d: found element %s -> %X; want %s -> %X", i, e.str, e.elems, tt.str, tt.ces) + break + } + } + var i, k int + for e := o.front(); e != nil; e, _ = e.nextIndexed() { + gold := simplifyMarked.contains(e.str) + if gold { + k++ + } + if gold != e.decompose { + t.Errorf("%d: %s has decompose %v; want %v", i, e.str, e.decompose, gold) + } + i++ + } + if k != len(simplifyMarked) { + t.Errorf(" an entry that should be marked as decompose was deleted") + } +} + +var expandTest = []ducetElem{ + {"\u0300", append(scCE(29, 230), scCE(30, 230)...)}, + {"\u00C0", append(ptCE(100, 8), scCE(30, 230)...)}, + {"\u00C8", append(ptCE(105, 8), scCE(30, 230)...)}, + {"\u00C9", append(ptCE(105, 8), scCE(30, 230)...)}, // identical expansion + {"\u05F2", append(ptCE(200, 4), ptCE(200, 4)[0], ptCE(200, 4)[0])}, + {"\u01FF", append(ptCE(200, 4), ptcCE(201, 4, 0)[0], scCE(30, 230)[0])}, +} + +func TestExpand(t *testing.T) { + const ( + totalExpansions = 5 + totalElements = 2 + 2 + 2 + 3 + 3 + totalExpansions + ) + b := newBuilder(t, expandTest) + o := &b.root + b.processExpansions(o) + + e := o.front() + for _, tt := range expandTest { + exp := b.t.ExpandElem[e.expansionIndex:] + if int(exp[0]) != len(tt.ces) { + t.Errorf("%U: len(expansion)==%d; want %d", []rune(tt.str)[0], exp[0], len(tt.ces)) + } + exp = exp[1:] + for j, w := range tt.ces { + if ce, _ := makeCE(w); exp[j] != ce { + t.Errorf("%U: element %d is %X; want %X", []rune(tt.str)[0], j, exp[j], ce) + } + } + e, _ = e.nextIndexed() + } + // Verify uniquing. + if len(b.t.ExpandElem) != totalElements { + t.Errorf("len(expandElem)==%d; want %d", len(b.t.ExpandElem), totalElements) + } +} + +var contractTest = []ducetElem{ + {"abc", pCE(102)}, + {"abd", pCE(103)}, + {"a", pCE(100)}, + {"ab", pCE(101)}, + {"ac", pCE(104)}, + {"bcd", pCE(202)}, + {"b", pCE(200)}, + {"bc", pCE(201)}, + {"bd", pCE(203)}, + // shares suffixes with a* + {"Ab", pCE(301)}, + {"A", pCE(300)}, + {"Ac", pCE(304)}, + {"Abc", pCE(302)}, + {"Abd", pCE(303)}, + // starter to be ignored + {"z", pCE(1000)}, +} + +func TestContract(t *testing.T) { + const ( + totalElements = 5 + 5 + 4 + ) + b := newBuilder(t, contractTest) + o := &b.root + b.processContractions(o) + + indexMap := make(map[int]bool) + handleMap := make(map[rune]*entry) + for e := o.front(); e != nil; e, _ = e.nextIndexed() { + if e.contractionHandle.n > 0 { + handleMap[e.runes[0]] = e + indexMap[e.contractionHandle.index] = true + } + } + // Verify uniquing. + if len(indexMap) != 2 { + t.Errorf("number of tries is %d; want %d", len(indexMap), 2) + } + for _, tt := range contractTest { + e, ok := handleMap[[]rune(tt.str)[0]] + if !ok { + continue + } + str := tt.str[1:] + offset, n := lookup(&b.t.ContractTries, e.contractionHandle, []byte(str)) + if len(str) != n { + t.Errorf("%s: bytes consumed==%d; want %d", tt.str, n, len(str)) + } + ce := b.t.ContractElem[offset+e.contractionIndex] + if want, _ := makeCE(tt.ces[0]); want != ce { + t.Errorf("%s: element %X; want %X", tt.str, ce, want) + } + } + if len(b.t.ContractElem) != totalElements { + t.Errorf("len(expandElem)==%d; want %d", len(b.t.ContractElem), totalElements) + } +} diff --git a/vendor/golang.org/x/text/collate/build/colelem.go b/vendor/golang.org/x/text/collate/build/colelem.go new file mode 100644 index 0000000..726fe54 --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/colelem.go @@ -0,0 +1,294 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import ( + "fmt" + "unicode" + + "golang.org/x/text/internal/colltab" +) + +const ( + defaultSecondary = 0x20 + defaultTertiary = 0x2 + maxTertiary = 0x1F +) + +type rawCE struct { + w []int + ccc uint8 +} + +func makeRawCE(w []int, ccc uint8) rawCE { + ce := rawCE{w: make([]int, 4), ccc: ccc} + copy(ce.w, w) + return ce +} + +// A collation element is represented as an uint32. +// In the typical case, a rune maps to a single collation element. If a rune +// can be the start of a contraction or expands into multiple collation elements, +// then the collation element that is associated with a rune will have a special +// form to represent such m to n mappings. Such special collation elements +// have a value >= 0x80000000. + +const ( + maxPrimaryBits = 21 + maxSecondaryBits = 12 + maxTertiaryBits = 8 +) + +func makeCE(ce rawCE) (uint32, error) { + v, e := colltab.MakeElem(ce.w[0], ce.w[1], ce.w[2], ce.ccc) + return uint32(v), e +} + +// For contractions, collation elements are of the form +// 110bbbbb bbbbbbbb iiiiiiii iiiinnnn, where +// - n* is the size of the first node in the contraction trie. +// - i* is the index of the first node in the contraction trie. +// - b* is the offset into the contraction collation element table. +// See contract.go for details on the contraction trie. +const ( + contractID = 0xC0000000 + maxNBits = 4 + maxTrieIndexBits = 12 + maxContractOffsetBits = 13 +) + +func makeContractIndex(h ctHandle, offset int) (uint32, error) { + if h.n >= 1<<maxNBits { + return 0, fmt.Errorf("size of contraction trie node too large: %d >= %d", h.n, 1<<maxNBits) + } + if h.index >= 1<<maxTrieIndexBits { + return 0, fmt.Errorf("size of contraction trie offset too large: %d >= %d", h.index, 1<<maxTrieIndexBits) + } + if offset >= 1<<maxContractOffsetBits { + return 0, fmt.Errorf("contraction offset out of bounds: %x >= %x", offset, 1<<maxContractOffsetBits) + } + ce := uint32(contractID) + ce += uint32(offset << (maxNBits + maxTrieIndexBits)) + ce += uint32(h.index << maxNBits) + ce += uint32(h.n) + return ce, nil +} + +// For expansions, collation elements are of the form +// 11100000 00000000 bbbbbbbb bbbbbbbb, +// where b* is the index into the expansion sequence table. +const ( + expandID = 0xE0000000 + maxExpandIndexBits = 16 +) + +func makeExpandIndex(index int) (uint32, error) { + if index >= 1<<maxExpandIndexBits { + return 0, fmt.Errorf("expansion index out of bounds: %x >= %x", index, 1<<maxExpandIndexBits) + } + return expandID + uint32(index), nil +} + +// Each list of collation elements corresponding to an expansion starts with +// a header indicating the length of the sequence. +func makeExpansionHeader(n int) (uint32, error) { + return uint32(n), nil +} + +// Some runes can be expanded using NFKD decomposition. Instead of storing the full +// sequence of collation elements, we decompose the rune and lookup the collation +// elements for each rune in the decomposition and modify the tertiary weights. +// The collation element, in this case, is of the form +// 11110000 00000000 wwwwwwww vvvvvvvv, where +// - v* is the replacement tertiary weight for the first rune, +// - w* is the replacement tertiary weight for the second rune, +// Tertiary weights of subsequent runes should be replaced with maxTertiary. +// See http://www.unicode.org/reports/tr10/#Compatibility_Decompositions for more details. +const ( + decompID = 0xF0000000 +) + +func makeDecompose(t1, t2 int) (uint32, error) { + if t1 >= 256 || t1 < 0 { + return 0, fmt.Errorf("first tertiary weight out of bounds: %d >= 256", t1) + } + if t2 >= 256 || t2 < 0 { + return 0, fmt.Errorf("second tertiary weight out of bounds: %d >= 256", t2) + } + return uint32(t2<<8+t1) + decompID, nil +} + +const ( + // These constants were taken from http://www.unicode.org/versions/Unicode6.0.0/ch12.pdf. + minUnified rune = 0x4E00 + maxUnified = 0x9FFF + minCompatibility = 0xF900 + maxCompatibility = 0xFAFF + minRare = 0x3400 + maxRare = 0x4DBF +) +const ( + commonUnifiedOffset = 0x10000 + rareUnifiedOffset = 0x20000 // largest rune in common is U+FAFF + otherOffset = 0x50000 // largest rune in rare is U+2FA1D + illegalOffset = otherOffset + int(unicode.MaxRune) + maxPrimary = illegalOffset + 1 +) + +// implicitPrimary returns the primary weight for the a rune +// for which there is no entry for the rune in the collation table. +// We take a different approach from the one specified in +// http://unicode.org/reports/tr10/#Implicit_Weights, +// but preserve the resulting relative ordering of the runes. +func implicitPrimary(r rune) int { + if unicode.Is(unicode.Ideographic, r) { + if r >= minUnified && r <= maxUnified { + // The most common case for CJK. + return int(r) + commonUnifiedOffset + } + if r >= minCompatibility && r <= maxCompatibility { + // This will typically not hit. The DUCET explicitly specifies mappings + // for all characters that do not decompose. + return int(r) + commonUnifiedOffset + } + return int(r) + rareUnifiedOffset + } + return int(r) + otherOffset +} + +// convertLargeWeights converts collation elements with large +// primaries (either double primaries or for illegal runes) +// to our own representation. +// A CJK character C is represented in the DUCET as +// [.FBxx.0020.0002.C][.BBBB.0000.0000.C] +// We will rewrite these characters to a single CE. +// We assume the CJK values start at 0x8000. +// See http://unicode.org/reports/tr10/#Implicit_Weights +func convertLargeWeights(elems []rawCE) (res []rawCE, err error) { + const ( + cjkPrimaryStart = 0xFB40 + rarePrimaryStart = 0xFB80 + otherPrimaryStart = 0xFBC0 + illegalPrimary = 0xFFFE + highBitsMask = 0x3F + lowBitsMask = 0x7FFF + lowBitsFlag = 0x8000 + shiftBits = 15 + ) + for i := 0; i < len(elems); i++ { + ce := elems[i].w + p := ce[0] + if p < cjkPrimaryStart { + continue + } + if p > 0xFFFF { + return elems, fmt.Errorf("found primary weight %X; should be <= 0xFFFF", p) + } + if p >= illegalPrimary { + ce[0] = illegalOffset + p - illegalPrimary + } else { + if i+1 >= len(elems) { + return elems, fmt.Errorf("second part of double primary weight missing: %v", elems) + } + if elems[i+1].w[0]&lowBitsFlag == 0 { + return elems, fmt.Errorf("malformed second part of double primary weight: %v", elems) + } + np := ((p & highBitsMask) << shiftBits) + elems[i+1].w[0]&lowBitsMask + switch { + case p < rarePrimaryStart: + np += commonUnifiedOffset + case p < otherPrimaryStart: + np += rareUnifiedOffset + default: + p += otherOffset + } + ce[0] = np + for j := i + 1; j+1 < len(elems); j++ { + elems[j] = elems[j+1] + } + elems = elems[:len(elems)-1] + } + } + return elems, nil +} + +// nextWeight computes the first possible collation weights following elems +// for the given level. +func nextWeight(level colltab.Level, elems []rawCE) []rawCE { + if level == colltab.Identity { + next := make([]rawCE, len(elems)) + copy(next, elems) + return next + } + next := []rawCE{makeRawCE(elems[0].w, elems[0].ccc)} + next[0].w[level]++ + if level < colltab.Secondary { + next[0].w[colltab.Secondary] = defaultSecondary + } + if level < colltab.Tertiary { + next[0].w[colltab.Tertiary] = defaultTertiary + } + // Filter entries that cannot influence ordering. + for _, ce := range elems[1:] { + skip := true + for i := colltab.Primary; i < level; i++ { + skip = skip && ce.w[i] == 0 + } + if !skip { + next = append(next, ce) + } + } + return next +} + +func nextVal(elems []rawCE, i int, level colltab.Level) (index, value int) { + for ; i < len(elems) && elems[i].w[level] == 0; i++ { + } + if i < len(elems) { + return i, elems[i].w[level] + } + return i, 0 +} + +// compareWeights returns -1 if a < b, 1 if a > b, or 0 otherwise. +// It also returns the collation level at which the difference is found. +func compareWeights(a, b []rawCE) (result int, level colltab.Level) { + for level := colltab.Primary; level < colltab.Identity; level++ { + var va, vb int + for ia, ib := 0, 0; ia < len(a) || ib < len(b); ia, ib = ia+1, ib+1 { + ia, va = nextVal(a, ia, level) + ib, vb = nextVal(b, ib, level) + if va != vb { + if va < vb { + return -1, level + } else { + return 1, level + } + } + } + } + return 0, colltab.Identity +} + +func equalCE(a, b rawCE) bool { + for i := 0; i < 3; i++ { + if b.w[i] != a.w[i] { + return false + } + } + return true +} + +func equalCEArrays(a, b []rawCE) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if !equalCE(a[i], b[i]) { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/text/collate/build/colelem_test.go b/vendor/golang.org/x/text/collate/build/colelem_test.go new file mode 100644 index 0000000..3862b1e --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/colelem_test.go @@ -0,0 +1,215 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import ( + "testing" + + "golang.org/x/text/internal/colltab" +) + +type ceTest struct { + f func(in []int) (uint32, error) + arg []int + val uint32 +} + +func normalCE(in []int) (ce uint32, err error) { + return makeCE(rawCE{w: in[:3], ccc: uint8(in[3])}) +} + +func expandCE(in []int) (ce uint32, err error) { + return makeExpandIndex(in[0]) +} + +func contractCE(in []int) (ce uint32, err error) { + return makeContractIndex(ctHandle{in[0], in[1]}, in[2]) +} + +func decompCE(in []int) (ce uint32, err error) { + return makeDecompose(in[0], in[1]) +} + +var ceTests = []ceTest{ + {normalCE, []int{0, 0, 0, 0}, 0xA0000000}, + {normalCE, []int{0, 0x28, 3, 0}, 0xA0002803}, + {normalCE, []int{0, 0x28, 3, 0xFF}, 0xAFF02803}, + {normalCE, []int{100, defaultSecondary, 3, 0}, 0x0000C883}, + // non-ignorable primary with non-default secondary + {normalCE, []int{100, 0x28, defaultTertiary, 0}, 0x4000C828}, + {normalCE, []int{100, defaultSecondary + 8, 3, 0}, 0x0000C983}, + {normalCE, []int{100, 0, 3, 0}, 0xFFFF}, // non-ignorable primary with non-supported secondary + {normalCE, []int{100, 1, 3, 0}, 0xFFFF}, + {normalCE, []int{1 << maxPrimaryBits, defaultSecondary, 0, 0}, 0xFFFF}, + {normalCE, []int{0, 1 << maxSecondaryBits, 0, 0}, 0xFFFF}, + {normalCE, []int{100, defaultSecondary, 1 << maxTertiaryBits, 0}, 0xFFFF}, + {normalCE, []int{0x123, defaultSecondary, 8, 0xFF}, 0x88FF0123}, + {normalCE, []int{0x123, defaultSecondary + 1, 8, 0xFF}, 0xFFFF}, + + {contractCE, []int{0, 0, 0}, 0xC0000000}, + {contractCE, []int{1, 1, 1}, 0xC0010011}, + {contractCE, []int{1, (1 << maxNBits) - 1, 1}, 0xC001001F}, + {contractCE, []int{(1 << maxTrieIndexBits) - 1, 1, 1}, 0xC001FFF1}, + {contractCE, []int{1, 1, (1 << maxContractOffsetBits) - 1}, 0xDFFF0011}, + {contractCE, []int{1, (1 << maxNBits), 1}, 0xFFFF}, + {contractCE, []int{(1 << maxTrieIndexBits), 1, 1}, 0xFFFF}, + {contractCE, []int{1, (1 << maxContractOffsetBits), 1}, 0xFFFF}, + + {expandCE, []int{0}, 0xE0000000}, + {expandCE, []int{5}, 0xE0000005}, + {expandCE, []int{(1 << maxExpandIndexBits) - 1}, 0xE000FFFF}, + {expandCE, []int{1 << maxExpandIndexBits}, 0xFFFF}, + + {decompCE, []int{0, 0}, 0xF0000000}, + {decompCE, []int{1, 1}, 0xF0000101}, + {decompCE, []int{0x1F, 0x1F}, 0xF0001F1F}, + {decompCE, []int{256, 0x1F}, 0xFFFF}, + {decompCE, []int{0x1F, 256}, 0xFFFF}, +} + +func TestColElem(t *testing.T) { + for i, tt := range ceTests { + in := make([]int, len(tt.arg)) + copy(in, tt.arg) + ce, err := tt.f(in) + if tt.val == 0xFFFF { + if err == nil { + t.Errorf("%d: expected error for args %x", i, tt.arg) + } + continue + } + if err != nil { + t.Errorf("%d: unexpected error: %v", i, err.Error()) + } + if ce != tt.val { + t.Errorf("%d: colElem=%X; want %X", i, ce, tt.val) + } + } +} + +func mkRawCES(in [][]int) []rawCE { + out := []rawCE{} + for _, w := range in { + out = append(out, rawCE{w: w}) + } + return out +} + +type weightsTest struct { + a, b [][]int + level colltab.Level + result int +} + +var nextWeightTests = []weightsTest{ + { + a: [][]int{{100, 20, 5, 0}}, + b: [][]int{{101, defaultSecondary, defaultTertiary, 0}}, + level: colltab.Primary, + }, + { + a: [][]int{{100, 20, 5, 0}}, + b: [][]int{{100, 21, defaultTertiary, 0}}, + level: colltab.Secondary, + }, + { + a: [][]int{{100, 20, 5, 0}}, + b: [][]int{{100, 20, 6, 0}}, + level: colltab.Tertiary, + }, + { + a: [][]int{{100, 20, 5, 0}}, + b: [][]int{{100, 20, 5, 0}}, + level: colltab.Identity, + }, +} + +var extra = [][]int{{200, 32, 8, 0}, {0, 32, 8, 0}, {0, 0, 8, 0}, {0, 0, 0, 0}} + +func TestNextWeight(t *testing.T) { + for i, tt := range nextWeightTests { + test := func(l colltab.Level, tt weightsTest, a, gold [][]int) { + res := nextWeight(tt.level, mkRawCES(a)) + if !equalCEArrays(mkRawCES(gold), res) { + t.Errorf("%d:%d: expected weights %d; found %d", i, l, gold, res) + } + } + test(-1, tt, tt.a, tt.b) + for l := colltab.Primary; l <= colltab.Tertiary; l++ { + if tt.level <= l { + test(l, tt, append(tt.a, extra[l]), tt.b) + } else { + test(l, tt, append(tt.a, extra[l]), append(tt.b, extra[l])) + } + } + } +} + +var compareTests = []weightsTest{ + { + [][]int{{100, 20, 5, 0}}, + [][]int{{100, 20, 5, 0}}, + colltab.Identity, + 0, + }, + { + [][]int{{100, 20, 5, 0}, extra[0]}, + [][]int{{100, 20, 5, 1}}, + colltab.Primary, + 1, + }, + { + [][]int{{100, 20, 5, 0}}, + [][]int{{101, 20, 5, 0}}, + colltab.Primary, + -1, + }, + { + [][]int{{101, 20, 5, 0}}, + [][]int{{100, 20, 5, 0}}, + colltab.Primary, + 1, + }, + { + [][]int{{100, 0, 0, 0}, {0, 20, 5, 0}}, + [][]int{{0, 20, 5, 0}, {100, 0, 0, 0}}, + colltab.Identity, + 0, + }, + { + [][]int{{100, 20, 5, 0}}, + [][]int{{100, 21, 5, 0}}, + colltab.Secondary, + -1, + }, + { + [][]int{{100, 20, 5, 0}}, + [][]int{{100, 20, 2, 0}}, + colltab.Tertiary, + 1, + }, + { + [][]int{{100, 20, 5, 1}}, + [][]int{{100, 20, 5, 2}}, + colltab.Quaternary, + -1, + }, +} + +func TestCompareWeights(t *testing.T) { + for i, tt := range compareTests { + test := func(tt weightsTest, a, b [][]int) { + res, level := compareWeights(mkRawCES(a), mkRawCES(b)) + if res != tt.result { + t.Errorf("%d: expected comparisson result %d; found %d", i, tt.result, res) + } + if level != tt.level { + t.Errorf("%d: expected level %d; found %d", i, tt.level, level) + } + } + test(tt, tt.a, tt.b) + test(tt, append(tt.a, extra[0]), append(tt.b, extra[0])) + } +} diff --git a/vendor/golang.org/x/text/collate/build/contract.go b/vendor/golang.org/x/text/collate/build/contract.go new file mode 100644 index 0000000..d96af78 --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/contract.go @@ -0,0 +1,309 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import ( + "fmt" + "io" + "reflect" + "sort" + "strings" + + "golang.org/x/text/internal/colltab" +) + +// This file contains code for detecting contractions and generating +// the necessary tables. +// Any Unicode Collation Algorithm (UCA) table entry that has more than +// one rune one the left-hand side is called a contraction. +// See http://www.unicode.org/reports/tr10/#Contractions for more details. +// +// We define the following terms: +// initial: a rune that appears as the first rune in a contraction. +// suffix: a sequence of runes succeeding the initial rune +// in a given contraction. +// non-initial: a rune that appears in a suffix. +// +// A rune may be both a initial and a non-initial and may be so in +// many contractions. An initial may typically also appear by itself. +// In case of ambiguities, the UCA requires we match the longest +// contraction. +// +// Many contraction rules share the same set of possible suffixes. +// We store sets of suffixes in a trie that associates an index with +// each suffix in the set. This index can be used to look up a +// collation element associated with the (starter rune, suffix) pair. +// +// The trie is defined on a UTF-8 byte sequence. +// The overall trie is represented as an array of ctEntries. Each node of the trie +// is represented as a subsequence of ctEntries, where each entry corresponds to +// a possible match of a next character in the search string. An entry +// also includes the length and offset to the next sequence of entries +// to check in case of a match. + +const ( + final = 0 + noIndex = 0xFF +) + +// ctEntry associates to a matching byte an offset and/or next sequence of +// bytes to check. A ctEntry c is called final if a match means that the +// longest suffix has been found. An entry c is final if c.N == 0. +// A single final entry can match a range of characters to an offset. +// A non-final entry always matches a single byte. Note that a non-final +// entry might still resemble a completed suffix. +// Examples: +// The suffix strings "ab" and "ac" can be represented as: +// []ctEntry{ +// {'a', 1, 1, noIndex}, // 'a' by itself does not match, so i is 0xFF. +// {'b', 'c', 0, 1}, // "ab" -> 1, "ac" -> 2 +// } +// +// The suffix strings "ab", "abc", "abd", and "abcd" can be represented as: +// []ctEntry{ +// {'a', 1, 1, noIndex}, // 'a' must be followed by 'b'. +// {'b', 1, 2, 1}, // "ab" -> 1, may be followed by 'c' or 'd'. +// {'d', 'd', final, 3}, // "abd" -> 3 +// {'c', 4, 1, 2}, // "abc" -> 2, may be followed by 'd'. +// {'d', 'd', final, 4}, // "abcd" -> 4 +// } +// See genStateTests in contract_test.go for more examples. +type ctEntry struct { + L uint8 // non-final: byte value to match; final: lowest match in range. + H uint8 // non-final: relative index to next block; final: highest match in range. + N uint8 // non-final: length of next block; final: final + I uint8 // result offset. Will be noIndex if more bytes are needed to complete. +} + +// contractTrieSet holds a set of contraction tries. The tries are stored +// consecutively in the entry field. +type contractTrieSet []struct{ l, h, n, i uint8 } + +// ctHandle is used to identify a trie in the trie set, consisting in an offset +// in the array and the size of the first node. +type ctHandle struct { + index, n int +} + +// appendTrie adds a new trie for the given suffixes to the trie set and returns +// a handle to it. The handle will be invalid on error. +func appendTrie(ct *colltab.ContractTrieSet, suffixes []string) (ctHandle, error) { + es := make([]stridx, len(suffixes)) + for i, s := range suffixes { + es[i].str = s + } + sort.Sort(offsetSort(es)) + for i := range es { + es[i].index = i + 1 + } + sort.Sort(genidxSort(es)) + i := len(*ct) + n, err := genStates(ct, es) + if err != nil { + *ct = (*ct)[:i] + return ctHandle{}, err + } + return ctHandle{i, n}, nil +} + +// genStates generates ctEntries for a given suffix set and returns +// the number of entries for the first node. +func genStates(ct *colltab.ContractTrieSet, sis []stridx) (int, error) { + if len(sis) == 0 { + return 0, fmt.Errorf("genStates: list of suffices must be non-empty") + } + start := len(*ct) + // create entries for differing first bytes. + for _, si := range sis { + s := si.str + if len(s) == 0 { + continue + } + added := false + c := s[0] + if len(s) > 1 { + for j := len(*ct) - 1; j >= start; j-- { + if (*ct)[j].L == c { + added = true + break + } + } + if !added { + *ct = append(*ct, ctEntry{L: c, I: noIndex}) + } + } else { + for j := len(*ct) - 1; j >= start; j-- { + // Update the offset for longer suffixes with the same byte. + if (*ct)[j].L == c { + (*ct)[j].I = uint8(si.index) + added = true + } + // Extend range of final ctEntry, if possible. + if (*ct)[j].H+1 == c { + (*ct)[j].H = c + added = true + } + } + if !added { + *ct = append(*ct, ctEntry{L: c, H: c, N: final, I: uint8(si.index)}) + } + } + } + n := len(*ct) - start + // Append nodes for the remainder of the suffixes for each ctEntry. + sp := 0 + for i, end := start, len(*ct); i < end; i++ { + fe := (*ct)[i] + if fe.H == 0 { // uninitialized non-final + ln := len(*ct) - start - n + if ln > 0xFF { + return 0, fmt.Errorf("genStates: relative block offset too large: %d > 255", ln) + } + fe.H = uint8(ln) + // Find first non-final strings with same byte as current entry. + for ; sis[sp].str[0] != fe.L; sp++ { + } + se := sp + 1 + for ; se < len(sis) && len(sis[se].str) > 1 && sis[se].str[0] == fe.L; se++ { + } + sl := sis[sp:se] + sp = se + for i, si := range sl { + sl[i].str = si.str[1:] + } + nn, err := genStates(ct, sl) + if err != nil { + return 0, err + } + fe.N = uint8(nn) + (*ct)[i] = fe + } + } + sort.Sort(entrySort((*ct)[start : start+n])) + return n, nil +} + +// There may be both a final and non-final entry for a byte if the byte +// is implied in a range of matches in the final entry. +// We need to ensure that the non-final entry comes first in that case. +type entrySort colltab.ContractTrieSet + +func (fe entrySort) Len() int { return len(fe) } +func (fe entrySort) Swap(i, j int) { fe[i], fe[j] = fe[j], fe[i] } +func (fe entrySort) Less(i, j int) bool { + return fe[i].L > fe[j].L +} + +// stridx is used for sorting suffixes and their associated offsets. +type stridx struct { + str string + index int +} + +// For computing the offsets, we first sort by size, and then by string. +// This ensures that strings that only differ in the last byte by 1 +// are sorted consecutively in increasing order such that they can +// be packed as a range in a final ctEntry. +type offsetSort []stridx + +func (si offsetSort) Len() int { return len(si) } +func (si offsetSort) Swap(i, j int) { si[i], si[j] = si[j], si[i] } +func (si offsetSort) Less(i, j int) bool { + if len(si[i].str) != len(si[j].str) { + return len(si[i].str) > len(si[j].str) + } + return si[i].str < si[j].str +} + +// For indexing, we want to ensure that strings are sorted in string order, where +// for strings with the same prefix, we put longer strings before shorter ones. +type genidxSort []stridx + +func (si genidxSort) Len() int { return len(si) } +func (si genidxSort) Swap(i, j int) { si[i], si[j] = si[j], si[i] } +func (si genidxSort) Less(i, j int) bool { + if strings.HasPrefix(si[j].str, si[i].str) { + return false + } + if strings.HasPrefix(si[i].str, si[j].str) { + return true + } + return si[i].str < si[j].str +} + +// lookup matches the longest suffix in str and returns the associated offset +// and the number of bytes consumed. +func lookup(ct *colltab.ContractTrieSet, h ctHandle, str []byte) (index, ns int) { + states := (*ct)[h.index:] + p := 0 + n := h.n + for i := 0; i < n && p < len(str); { + e := states[i] + c := str[p] + if c >= e.L { + if e.L == c { + p++ + if e.I != noIndex { + index, ns = int(e.I), p + } + if e.N != final { + // set to new state + i, states, n = 0, states[int(e.H)+n:], int(e.N) + } else { + return + } + continue + } else if e.N == final && c <= e.H { + p++ + return int(c-e.L) + int(e.I), p + } + } + i++ + } + return +} + +// print writes the contractTrieSet t as compilable Go code to w. It returns +// the total number of bytes written and the size of the resulting data structure in bytes. +func print(t *colltab.ContractTrieSet, w io.Writer, name string) (n, size int, err error) { + update3 := func(nn, sz int, e error) { + n += nn + if err == nil { + err = e + } + size += sz + } + update2 := func(nn int, e error) { update3(nn, 0, e) } + + update3(printArray(*t, w, name)) + update2(fmt.Fprintf(w, "var %sContractTrieSet = ", name)) + update3(printStruct(*t, w, name)) + update2(fmt.Fprintln(w)) + return +} + +func printArray(ct colltab.ContractTrieSet, w io.Writer, name string) (n, size int, err error) { + p := func(f string, a ...interface{}) { + nn, e := fmt.Fprintf(w, f, a...) + n += nn + if err == nil { + err = e + } + } + size = len(ct) * 4 + p("// %sCTEntries: %d entries, %d bytes\n", name, len(ct), size) + p("var %sCTEntries = [%d]struct{L,H,N,I uint8}{\n", name, len(ct)) + for _, fe := range ct { + p("\t{0x%X, 0x%X, %d, %d},\n", fe.L, fe.H, fe.N, fe.I) + } + p("}\n") + return +} + +func printStruct(ct colltab.ContractTrieSet, w io.Writer, name string) (n, size int, err error) { + n, err = fmt.Fprintf(w, "colltab.ContractTrieSet( %sCTEntries[:] )", name) + size = int(reflect.TypeOf(ct).Size()) + return +} diff --git a/vendor/golang.org/x/text/collate/build/contract_test.go b/vendor/golang.org/x/text/collate/build/contract_test.go new file mode 100644 index 0000000..2e0eaec --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/contract_test.go @@ -0,0 +1,266 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import ( + "bytes" + "sort" + "testing" + + "golang.org/x/text/internal/colltab" +) + +var largetosmall = []stridx{ + {"a", 5}, + {"ab", 4}, + {"abc", 3}, + {"abcd", 2}, + {"abcde", 1}, + {"abcdef", 0}, +} + +var offsetSortTests = [][]stridx{ + { + {"bcde", 1}, + {"bc", 5}, + {"ab", 4}, + {"bcd", 3}, + {"abcd", 0}, + {"abc", 2}, + }, + largetosmall, +} + +func TestOffsetSort(t *testing.T) { + for i, st := range offsetSortTests { + sort.Sort(offsetSort(st)) + for j, si := range st { + if j != si.index { + t.Errorf("%d: failed: %v", i, st) + } + } + } + for i, tt := range genStateTests { + // ensure input is well-formed + sort.Sort(offsetSort(tt.in)) + for j, si := range tt.in { + if si.index != j+1 { + t.Errorf("%dth sort failed: %v", i, tt.in) + } + } + } +} + +var genidxtest1 = []stridx{ + {"bcde", 3}, + {"bc", 6}, + {"ab", 2}, + {"bcd", 5}, + {"abcd", 0}, + {"abc", 1}, + {"bcdf", 4}, +} + +var genidxSortTests = [][]stridx{ + genidxtest1, + largetosmall, +} + +func TestGenIdxSort(t *testing.T) { + for i, st := range genidxSortTests { + sort.Sort(genidxSort(st)) + for j, si := range st { + if j != si.index { + t.Errorf("%dth sort failed %v", i, st) + break + } + } + } +} + +var entrySortTests = []colltab.ContractTrieSet{ + { + {10, 0, 1, 3}, + {99, 0, 1, 0}, + {20, 50, 0, 2}, + {30, 0, 1, 1}, + }, +} + +func TestEntrySort(t *testing.T) { + for i, et := range entrySortTests { + sort.Sort(entrySort(et)) + for j, fe := range et { + if j != int(fe.I) { + t.Errorf("%dth sort failed %v", i, et) + break + } + } + } +} + +type GenStateTest struct { + in []stridx + firstBlockLen int + out colltab.ContractTrieSet +} + +var genStateTests = []GenStateTest{ + {[]stridx{ + {"abc", 1}, + }, + 1, + colltab.ContractTrieSet{ + {'a', 0, 1, noIndex}, + {'b', 0, 1, noIndex}, + {'c', 'c', final, 1}, + }, + }, + {[]stridx{ + {"abc", 1}, + {"abd", 2}, + {"abe", 3}, + }, + 1, + colltab.ContractTrieSet{ + {'a', 0, 1, noIndex}, + {'b', 0, 1, noIndex}, + {'c', 'e', final, 1}, + }, + }, + {[]stridx{ + {"abc", 1}, + {"ab", 2}, + {"a", 3}, + }, + 1, + colltab.ContractTrieSet{ + {'a', 0, 1, 3}, + {'b', 0, 1, 2}, + {'c', 'c', final, 1}, + }, + }, + {[]stridx{ + {"abc", 1}, + {"abd", 2}, + {"ab", 3}, + {"ac", 4}, + {"a", 5}, + {"b", 6}, + }, + 2, + colltab.ContractTrieSet{ + {'b', 'b', final, 6}, + {'a', 0, 2, 5}, + {'c', 'c', final, 4}, + {'b', 0, 1, 3}, + {'c', 'd', final, 1}, + }, + }, + {[]stridx{ + {"bcde", 2}, + {"bc", 7}, + {"ab", 6}, + {"bcd", 5}, + {"abcd", 1}, + {"abc", 4}, + {"bcdf", 3}, + }, + 2, + colltab.ContractTrieSet{ + {'b', 3, 1, noIndex}, + {'a', 0, 1, noIndex}, + {'b', 0, 1, 6}, + {'c', 0, 1, 4}, + {'d', 'd', final, 1}, + {'c', 0, 1, 7}, + {'d', 0, 1, 5}, + {'e', 'f', final, 2}, + }, + }, +} + +func TestGenStates(t *testing.T) { + for i, tt := range genStateTests { + si := []stridx{} + for _, e := range tt.in { + si = append(si, e) + } + // ensure input is well-formed + sort.Sort(genidxSort(si)) + ct := colltab.ContractTrieSet{} + n, _ := genStates(&ct, si) + if nn := tt.firstBlockLen; nn != n { + t.Errorf("%d: block len %v; want %v", i, n, nn) + } + if lv, lw := len(ct), len(tt.out); lv != lw { + t.Errorf("%d: len %v; want %v", i, lv, lw) + continue + } + for j, fe := range tt.out { + const msg = "%d:%d: value %s=%v; want %v" + if fe.L != ct[j].L { + t.Errorf(msg, i, j, "l", ct[j].L, fe.L) + } + if fe.H != ct[j].H { + t.Errorf(msg, i, j, "h", ct[j].H, fe.H) + } + if fe.N != ct[j].N { + t.Errorf(msg, i, j, "n", ct[j].N, fe.N) + } + if fe.I != ct[j].I { + t.Errorf(msg, i, j, "i", ct[j].I, fe.I) + } + } + } +} + +func TestLookupContraction(t *testing.T) { + for i, tt := range genStateTests { + input := []string{} + for _, e := range tt.in { + input = append(input, e.str) + } + cts := colltab.ContractTrieSet{} + h, _ := appendTrie(&cts, input) + for j, si := range tt.in { + str := si.str + for _, s := range []string{str, str + "X"} { + msg := "%d:%d: %s(%s) %v; want %v" + idx, sn := lookup(&cts, h, []byte(s)) + if idx != si.index { + t.Errorf(msg, i, j, "index", s, idx, si.index) + } + if sn != len(str) { + t.Errorf(msg, i, j, "sn", s, sn, len(str)) + } + } + } + } +} + +func TestPrintContractionTrieSet(t *testing.T) { + testdata := colltab.ContractTrieSet(genStateTests[4].out) + buf := &bytes.Buffer{} + print(&testdata, buf, "test") + if contractTrieOutput != buf.String() { + t.Errorf("output differs; found\n%s", buf.String()) + println(string(buf.Bytes())) + } +} + +const contractTrieOutput = `// testCTEntries: 8 entries, 32 bytes +var testCTEntries = [8]struct{L,H,N,I uint8}{ + {0x62, 0x3, 1, 255}, + {0x61, 0x0, 1, 255}, + {0x62, 0x0, 1, 6}, + {0x63, 0x0, 1, 4}, + {0x64, 0x64, 0, 1}, + {0x63, 0x0, 1, 7}, + {0x64, 0x0, 1, 5}, + {0x65, 0x66, 0, 2}, +} +var testContractTrieSet = colltab.ContractTrieSet( testCTEntries[:] ) +` diff --git a/vendor/golang.org/x/text/collate/build/order.go b/vendor/golang.org/x/text/collate/build/order.go new file mode 100644 index 0000000..2c568db --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/order.go @@ -0,0 +1,393 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import ( + "fmt" + "log" + "sort" + "strings" + "unicode" + + "golang.org/x/text/internal/colltab" + "golang.org/x/text/unicode/norm" +) + +type logicalAnchor int + +const ( + firstAnchor logicalAnchor = -1 + noAnchor = 0 + lastAnchor = 1 +) + +// entry is used to keep track of a single entry in the collation element table +// during building. Examples of entries can be found in the Default Unicode +// Collation Element Table. +// See http://www.unicode.org/Public/UCA/6.0.0/allkeys.txt. +type entry struct { + str string // same as string(runes) + runes []rune + elems []rawCE // the collation elements + extend string // weights of extend to be appended to elems + before bool // weights relative to next instead of previous. + lock bool // entry is used in extension and can no longer be moved. + + // prev, next, and level are used to keep track of tailorings. + prev, next *entry + level colltab.Level // next differs at this level + skipRemove bool // do not unlink when removed + + decompose bool // can use NFKD decomposition to generate elems + exclude bool // do not include in table + implicit bool // derived, is not included in the list + modified bool // entry was modified in tailoring + logical logicalAnchor + + expansionIndex int // used to store index into expansion table + contractionHandle ctHandle + contractionIndex int // index into contraction elements +} + +func (e *entry) String() string { + return fmt.Sprintf("%X (%q) -> %X (ch:%x; ci:%d, ei:%d)", + e.runes, e.str, e.elems, e.contractionHandle, e.contractionIndex, e.expansionIndex) +} + +func (e *entry) skip() bool { + return e.contraction() +} + +func (e *entry) expansion() bool { + return !e.decompose && len(e.elems) > 1 +} + +func (e *entry) contraction() bool { + return len(e.runes) > 1 +} + +func (e *entry) contractionStarter() bool { + return e.contractionHandle.n != 0 +} + +// nextIndexed gets the next entry that needs to be stored in the table. +// It returns the entry and the collation level at which the next entry differs +// from the current entry. +// Entries that can be explicitly derived and logical reset positions are +// examples of entries that will not be indexed. +func (e *entry) nextIndexed() (*entry, colltab.Level) { + level := e.level + for e = e.next; e != nil && (e.exclude || len(e.elems) == 0); e = e.next { + if e.level < level { + level = e.level + } + } + return e, level +} + +// remove unlinks entry e from the sorted chain and clears the collation +// elements. e may not be at the front or end of the list. This should always +// be the case, as the front and end of the list are always logical anchors, +// which may not be removed. +func (e *entry) remove() { + if e.logical != noAnchor { + log.Fatalf("may not remove anchor %q", e.str) + } + // TODO: need to set e.prev.level to e.level if e.level is smaller? + e.elems = nil + if !e.skipRemove { + if e.prev != nil { + e.prev.next = e.next + } + if e.next != nil { + e.next.prev = e.prev + } + } + e.skipRemove = false +} + +// insertAfter inserts n after e. +func (e *entry) insertAfter(n *entry) { + if e == n { + panic("e == anchor") + } + if e == nil { + panic("unexpected nil anchor") + } + n.remove() + n.decompose = false // redo decomposition test + + n.next = e.next + n.prev = e + if e.next != nil { + e.next.prev = n + } + e.next = n +} + +// insertBefore inserts n before e. +func (e *entry) insertBefore(n *entry) { + if e == n { + panic("e == anchor") + } + if e == nil { + panic("unexpected nil anchor") + } + n.remove() + n.decompose = false // redo decomposition test + + n.prev = e.prev + n.next = e + if e.prev != nil { + e.prev.next = n + } + e.prev = n +} + +func (e *entry) encodeBase() (ce uint32, err error) { + switch { + case e.expansion(): + ce, err = makeExpandIndex(e.expansionIndex) + default: + if e.decompose { + log.Fatal("decompose should be handled elsewhere") + } + ce, err = makeCE(e.elems[0]) + } + return +} + +func (e *entry) encode() (ce uint32, err error) { + if e.skip() { + log.Fatal("cannot build colElem for entry that should be skipped") + } + switch { + case e.decompose: + t1 := e.elems[0].w[2] + t2 := 0 + if len(e.elems) > 1 { + t2 = e.elems[1].w[2] + } + ce, err = makeDecompose(t1, t2) + case e.contractionStarter(): + ce, err = makeContractIndex(e.contractionHandle, e.contractionIndex) + default: + if len(e.runes) > 1 { + log.Fatal("colElem: contractions are handled in contraction trie") + } + ce, err = e.encodeBase() + } + return +} + +// entryLess returns true if a sorts before b and false otherwise. +func entryLess(a, b *entry) bool { + if res, _ := compareWeights(a.elems, b.elems); res != 0 { + return res == -1 + } + if a.logical != noAnchor { + return a.logical == firstAnchor + } + if b.logical != noAnchor { + return b.logical == lastAnchor + } + return a.str < b.str +} + +type sortedEntries []*entry + +func (s sortedEntries) Len() int { + return len(s) +} + +func (s sortedEntries) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +func (s sortedEntries) Less(i, j int) bool { + return entryLess(s[i], s[j]) +} + +type ordering struct { + id string + entryMap map[string]*entry + ordered []*entry + handle *trieHandle +} + +// insert inserts e into both entryMap and ordered. +// Note that insert simply appends e to ordered. To reattain a sorted +// order, o.sort() should be called. +func (o *ordering) insert(e *entry) { + if e.logical == noAnchor { + o.entryMap[e.str] = e + } else { + // Use key format as used in UCA rules. + o.entryMap[fmt.Sprintf("[%s]", e.str)] = e + // Also add index entry for XML format. + o.entryMap[fmt.Sprintf("<%s/>", strings.Replace(e.str, " ", "_", -1))] = e + } + o.ordered = append(o.ordered, e) +} + +// newEntry creates a new entry for the given info and inserts it into +// the index. +func (o *ordering) newEntry(s string, ces []rawCE) *entry { + e := &entry{ + runes: []rune(s), + elems: ces, + str: s, + } + o.insert(e) + return e +} + +// find looks up and returns the entry for the given string. +// It returns nil if str is not in the index and if an implicit value +// cannot be derived, that is, if str represents more than one rune. +func (o *ordering) find(str string) *entry { + e := o.entryMap[str] + if e == nil { + r := []rune(str) + if len(r) == 1 { + const ( + firstHangul = 0xAC00 + lastHangul = 0xD7A3 + ) + if r[0] >= firstHangul && r[0] <= lastHangul { + ce := []rawCE{} + nfd := norm.NFD.String(str) + for _, r := range nfd { + ce = append(ce, o.find(string(r)).elems...) + } + e = o.newEntry(nfd, ce) + } else { + e = o.newEntry(string(r[0]), []rawCE{ + {w: []int{ + implicitPrimary(r[0]), + defaultSecondary, + defaultTertiary, + int(r[0]), + }, + }, + }) + e.modified = true + } + e.exclude = true // do not index implicits + } + } + return e +} + +// makeRootOrdering returns a newly initialized ordering value and populates +// it with a set of logical reset points that can be used as anchors. +// The anchors first_tertiary_ignorable and __END__ will always sort at +// the beginning and end, respectively. This means that prev and next are non-nil +// for any indexed entry. +func makeRootOrdering() ordering { + const max = unicode.MaxRune + o := ordering{ + entryMap: make(map[string]*entry), + } + insert := func(typ logicalAnchor, s string, ce []int) { + e := &entry{ + elems: []rawCE{{w: ce}}, + str: s, + exclude: true, + logical: typ, + } + o.insert(e) + } + insert(firstAnchor, "first tertiary ignorable", []int{0, 0, 0, 0}) + insert(lastAnchor, "last tertiary ignorable", []int{0, 0, 0, max}) + insert(lastAnchor, "last primary ignorable", []int{0, defaultSecondary, defaultTertiary, max}) + insert(lastAnchor, "last non ignorable", []int{maxPrimary, defaultSecondary, defaultTertiary, max}) + insert(lastAnchor, "__END__", []int{1 << maxPrimaryBits, defaultSecondary, defaultTertiary, max}) + return o +} + +// patchForInsert eleminates entries from the list with more than one collation element. +// The next and prev fields of the eliminated entries still point to appropriate +// values in the newly created list. +// It requires that sort has been called. +func (o *ordering) patchForInsert() { + for i := 0; i < len(o.ordered)-1; { + e := o.ordered[i] + lev := e.level + n := e.next + for ; n != nil && len(n.elems) > 1; n = n.next { + if n.level < lev { + lev = n.level + } + n.skipRemove = true + } + for ; o.ordered[i] != n; i++ { + o.ordered[i].level = lev + o.ordered[i].next = n + o.ordered[i+1].prev = e + } + } +} + +// clone copies all ordering of es into a new ordering value. +func (o *ordering) clone() *ordering { + o.sort() + oo := ordering{ + entryMap: make(map[string]*entry), + } + for _, e := range o.ordered { + ne := &entry{ + runes: e.runes, + elems: e.elems, + str: e.str, + decompose: e.decompose, + exclude: e.exclude, + logical: e.logical, + } + oo.insert(ne) + } + oo.sort() // link all ordering. + oo.patchForInsert() + return &oo +} + +// front returns the first entry to be indexed. +// It assumes that sort() has been called. +func (o *ordering) front() *entry { + e := o.ordered[0] + if e.prev != nil { + log.Panicf("unexpected first entry: %v", e) + } + // The first entry is always a logical position, which should not be indexed. + e, _ = e.nextIndexed() + return e +} + +// sort sorts all ordering based on their collation elements and initializes +// the prev, next, and level fields accordingly. +func (o *ordering) sort() { + sort.Sort(sortedEntries(o.ordered)) + l := o.ordered + for i := 1; i < len(l); i++ { + k := i - 1 + l[k].next = l[i] + _, l[k].level = compareWeights(l[k].elems, l[i].elems) + l[i].prev = l[k] + } +} + +// genColElems generates a collation element array from the runes in str. This +// assumes that all collation elements have already been added to the Builder. +func (o *ordering) genColElems(str string) []rawCE { + elems := []rawCE{} + for _, r := range []rune(str) { + for _, ce := range o.find(string(r)).elems { + if ce.w[0] != 0 || ce.w[1] != 0 || ce.w[2] != 0 { + elems = append(elems, ce) + } + } + } + return elems +} diff --git a/vendor/golang.org/x/text/collate/build/order_test.go b/vendor/golang.org/x/text/collate/build/order_test.go new file mode 100644 index 0000000..0e174bf --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/order_test.go @@ -0,0 +1,229 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import ( + "strconv" + "testing" + + "golang.org/x/text/internal/colltab" +) + +type entryTest struct { + f func(in []int) (uint32, error) + arg []int + val uint32 +} + +// makeList returns a list of entries of length n+2, with n normal +// entries plus a leading and trailing anchor. +func makeList(n int) []*entry { + es := make([]*entry, n+2) + weights := []rawCE{{w: []int{100, 20, 5, 0}}} + for i := range es { + runes := []rune{rune(i)} + es[i] = &entry{ + runes: runes, + elems: weights, + } + weights = nextWeight(colltab.Primary, weights) + } + for i := 1; i < len(es); i++ { + es[i-1].next = es[i] + es[i].prev = es[i-1] + _, es[i-1].level = compareWeights(es[i-1].elems, es[i].elems) + } + es[0].exclude = true + es[0].logical = firstAnchor + es[len(es)-1].exclude = true + es[len(es)-1].logical = lastAnchor + return es +} + +func TestNextIndexed(t *testing.T) { + const n = 5 + es := makeList(n) + for i := int64(0); i < 1<<n; i++ { + mask := strconv.FormatInt(i+(1<<n), 2) + for i, c := range mask { + es[i].exclude = c == '1' + } + e := es[0] + for i, c := range mask { + if c == '0' { + e, _ = e.nextIndexed() + if e != es[i] { + t.Errorf("%d: expected entry %d; found %d", i, es[i].elems, e.elems) + } + } + } + if e, _ = e.nextIndexed(); e != nil { + t.Errorf("%d: expected nil entry; found %d", i, e.elems) + } + } +} + +func TestRemove(t *testing.T) { + const n = 5 + for i := int64(0); i < 1<<n; i++ { + es := makeList(n) + mask := strconv.FormatInt(i+(1<<n), 2) + for i, c := range mask { + if c == '0' { + es[i].remove() + } + } + e := es[0] + for i, c := range mask { + if c == '1' { + if e != es[i] { + t.Errorf("%d: expected entry %d; found %d", i, es[i].elems, e.elems) + } + e, _ = e.nextIndexed() + } + } + if e != nil { + t.Errorf("%d: expected nil entry; found %d", i, e.elems) + } + } +} + +// nextPerm generates the next permutation of the array. The starting +// permutation is assumed to be a list of integers sorted in increasing order. +// It returns false if there are no more permuations left. +func nextPerm(a []int) bool { + i := len(a) - 2 + for ; i >= 0; i-- { + if a[i] < a[i+1] { + break + } + } + if i < 0 { + return false + } + for j := len(a) - 1; j >= i; j-- { + if a[j] > a[i] { + a[i], a[j] = a[j], a[i] + break + } + } + for j := i + 1; j < (len(a)+i+1)/2; j++ { + a[j], a[len(a)+i-j] = a[len(a)+i-j], a[j] + } + return true +} + +func TestInsertAfter(t *testing.T) { + const n = 5 + orig := makeList(n) + perm := make([]int, n) + for i := range perm { + perm[i] = i + 1 + } + for ok := true; ok; ok = nextPerm(perm) { + es := makeList(n) + last := es[0] + for _, i := range perm { + last.insertAfter(es[i]) + last = es[i] + } + for _, e := range es { + e.elems = es[0].elems + } + e := es[0] + for _, i := range perm { + e, _ = e.nextIndexed() + if e.runes[0] != orig[i].runes[0] { + t.Errorf("%d:%d: expected entry %X; found %X", perm, i, orig[i].runes, e.runes) + break + } + } + } +} + +func TestInsertBefore(t *testing.T) { + const n = 5 + orig := makeList(n) + perm := make([]int, n) + for i := range perm { + perm[i] = i + 1 + } + for ok := true; ok; ok = nextPerm(perm) { + es := makeList(n) + last := es[len(es)-1] + for _, i := range perm { + last.insertBefore(es[i]) + last = es[i] + } + for _, e := range es { + e.elems = es[0].elems + } + e := es[0] + for i := n - 1; i >= 0; i-- { + e, _ = e.nextIndexed() + if e.runes[0] != rune(perm[i]) { + t.Errorf("%d:%d: expected entry %X; found %X", perm, i, orig[i].runes, e.runes) + break + } + } + } +} + +type entryLessTest struct { + a, b *entry + res bool +} + +var ( + w1 = []rawCE{{w: []int{100, 20, 5, 5}}} + w2 = []rawCE{{w: []int{101, 20, 5, 5}}} +) + +var entryLessTests = []entryLessTest{ + {&entry{str: "a", elems: w1}, + &entry{str: "a", elems: w1}, + false, + }, + {&entry{str: "a", elems: w1}, + &entry{str: "a", elems: w2}, + true, + }, + {&entry{str: "a", elems: w1}, + &entry{str: "b", elems: w1}, + true, + }, + {&entry{str: "a", elems: w2}, + &entry{str: "a", elems: w1}, + false, + }, + {&entry{str: "c", elems: w1}, + &entry{str: "b", elems: w1}, + false, + }, + {&entry{str: "a", elems: w1, logical: firstAnchor}, + &entry{str: "a", elems: w1}, + true, + }, + {&entry{str: "a", elems: w1}, + &entry{str: "b", elems: w1, logical: firstAnchor}, + false, + }, + {&entry{str: "b", elems: w1}, + &entry{str: "a", elems: w1, logical: lastAnchor}, + true, + }, + {&entry{str: "a", elems: w1, logical: lastAnchor}, + &entry{str: "c", elems: w1}, + false, + }, +} + +func TestEntryLess(t *testing.T) { + for i, tt := range entryLessTests { + if res := entryLess(tt.a, tt.b); res != tt.res { + t.Errorf("%d: was %v; want %v", i, res, tt.res) + } + } +} diff --git a/vendor/golang.org/x/text/collate/build/table.go b/vendor/golang.org/x/text/collate/build/table.go new file mode 100644 index 0000000..7eea7a6 --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/table.go @@ -0,0 +1,81 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import ( + "fmt" + "io" + "reflect" + + "golang.org/x/text/internal/colltab" +) + +// table is an intermediate structure that roughly resembles the table in collate. +type table struct { + colltab.Table + trie trie + root *trieHandle +} + +// print writes the table as Go compilable code to w. It prefixes the +// variable names with name. It returns the number of bytes written +// and the size of the resulting table. +func (t *table) fprint(w io.Writer, name string) (n, size int, err error) { + update := func(nn, sz int, e error) { + n += nn + if err == nil { + err = e + } + size += sz + } + // Write arrays needed for the structure. + update(printColElems(w, t.ExpandElem, name+"ExpandElem")) + update(printColElems(w, t.ContractElem, name+"ContractElem")) + update(t.trie.printArrays(w, name)) + update(printArray(t.ContractTries, w, name)) + + nn, e := fmt.Fprintf(w, "// Total size of %sTable is %d bytes\n", name, size) + update(nn, 0, e) + return +} + +func (t *table) fprintIndex(w io.Writer, h *trieHandle, id string) (n int, err error) { + p := func(f string, a ...interface{}) { + nn, e := fmt.Fprintf(w, f, a...) + n += nn + if err == nil { + err = e + } + } + p("\t{ // %s\n", id) + p("\t\tlookupOffset: 0x%x,\n", h.lookupStart) + p("\t\tvaluesOffset: 0x%x,\n", h.valueStart) + p("\t},\n") + return +} + +func printColElems(w io.Writer, a []uint32, name string) (n, sz int, err error) { + p := func(f string, a ...interface{}) { + nn, e := fmt.Fprintf(w, f, a...) + n += nn + if err == nil { + err = e + } + } + sz = len(a) * int(reflect.TypeOf(uint32(0)).Size()) + p("// %s: %d entries, %d bytes\n", name, len(a), sz) + p("var %s = [%d]uint32 {", name, len(a)) + for i, c := range a { + switch { + case i%64 == 0: + p("\n\t// Block %d, offset 0x%x\n", i/64, i) + case (i%64)%6 == 0: + p("\n\t") + } + p("0x%.8X, ", c) + } + p("\n}\n\n") + return +} diff --git a/vendor/golang.org/x/text/collate/build/trie.go b/vendor/golang.org/x/text/collate/build/trie.go new file mode 100644 index 0000000..9404a34 --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/trie.go @@ -0,0 +1,290 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The trie in this file is used to associate the first full character +// in a UTF-8 string to a collation element. +// All but the last byte in a UTF-8 byte sequence are +// used to look up offsets in the index table to be used for the next byte. +// The last byte is used to index into a table of collation elements. +// This file contains the code for the generation of the trie. + +package build + +import ( + "fmt" + "hash/fnv" + "io" + "reflect" +) + +const ( + blockSize = 64 + blockOffset = 2 // Subtract 2 blocks to compensate for the 0x80 added to continuation bytes. +) + +type trieHandle struct { + lookupStart uint16 // offset in table for first byte + valueStart uint16 // offset in table for first byte +} + +type trie struct { + index []uint16 + values []uint32 +} + +// trieNode is the intermediate trie structure used for generating a trie. +type trieNode struct { + index []*trieNode + value []uint32 + b byte + refValue uint16 + refIndex uint16 +} + +func newNode() *trieNode { + return &trieNode{ + index: make([]*trieNode, 64), + value: make([]uint32, 128), // root node size is 128 instead of 64 + } +} + +func (n *trieNode) isInternal() bool { + return n.value != nil +} + +func (n *trieNode) insert(r rune, value uint32) { + const maskx = 0x3F // mask out two most-significant bits + str := string(r) + if len(str) == 1 { + n.value[str[0]] = value + return + } + for i := 0; i < len(str)-1; i++ { + b := str[i] & maskx + if n.index == nil { + n.index = make([]*trieNode, blockSize) + } + nn := n.index[b] + if nn == nil { + nn = &trieNode{} + nn.b = b + n.index[b] = nn + } + n = nn + } + if n.value == nil { + n.value = make([]uint32, blockSize) + } + b := str[len(str)-1] & maskx + n.value[b] = value +} + +type trieBuilder struct { + t *trie + + roots []*trieHandle + + lookupBlocks []*trieNode + valueBlocks []*trieNode + + lookupBlockIdx map[uint32]*trieNode + valueBlockIdx map[uint32]*trieNode +} + +func newTrieBuilder() *trieBuilder { + index := &trieBuilder{} + index.lookupBlocks = make([]*trieNode, 0) + index.valueBlocks = make([]*trieNode, 0) + index.lookupBlockIdx = make(map[uint32]*trieNode) + index.valueBlockIdx = make(map[uint32]*trieNode) + // The third nil is the default null block. The other two blocks + // are used to guarantee an offset of at least 3 for each block. + index.lookupBlocks = append(index.lookupBlocks, nil, nil, nil) + index.t = &trie{} + return index +} + +func (b *trieBuilder) computeOffsets(n *trieNode) *trieNode { + hasher := fnv.New32() + if n.index != nil { + for i, nn := range n.index { + var vi, vv uint16 + if nn != nil { + nn = b.computeOffsets(nn) + n.index[i] = nn + vi = nn.refIndex + vv = nn.refValue + } + hasher.Write([]byte{byte(vi >> 8), byte(vi)}) + hasher.Write([]byte{byte(vv >> 8), byte(vv)}) + } + h := hasher.Sum32() + nn, ok := b.lookupBlockIdx[h] + if !ok { + n.refIndex = uint16(len(b.lookupBlocks)) - blockOffset + b.lookupBlocks = append(b.lookupBlocks, n) + b.lookupBlockIdx[h] = n + } else { + n = nn + } + } else { + for _, v := range n.value { + hasher.Write([]byte{byte(v >> 24), byte(v >> 16), byte(v >> 8), byte(v)}) + } + h := hasher.Sum32() + nn, ok := b.valueBlockIdx[h] + if !ok { + n.refValue = uint16(len(b.valueBlocks)) - blockOffset + n.refIndex = n.refValue + b.valueBlocks = append(b.valueBlocks, n) + b.valueBlockIdx[h] = n + } else { + n = nn + } + } + return n +} + +func (b *trieBuilder) addStartValueBlock(n *trieNode) uint16 { + hasher := fnv.New32() + for _, v := range n.value[:2*blockSize] { + hasher.Write([]byte{byte(v >> 24), byte(v >> 16), byte(v >> 8), byte(v)}) + } + h := hasher.Sum32() + nn, ok := b.valueBlockIdx[h] + if !ok { + n.refValue = uint16(len(b.valueBlocks)) + n.refIndex = n.refValue + b.valueBlocks = append(b.valueBlocks, n) + // Add a dummy block to accommodate the double block size. + b.valueBlocks = append(b.valueBlocks, nil) + b.valueBlockIdx[h] = n + } else { + n = nn + } + return n.refValue +} + +func genValueBlock(t *trie, n *trieNode) { + if n != nil { + for _, v := range n.value { + t.values = append(t.values, v) + } + } +} + +func genLookupBlock(t *trie, n *trieNode) { + for _, nn := range n.index { + v := uint16(0) + if nn != nil { + if n.index != nil { + v = nn.refIndex + } else { + v = nn.refValue + } + } + t.index = append(t.index, v) + } +} + +func (b *trieBuilder) addTrie(n *trieNode) *trieHandle { + h := &trieHandle{} + b.roots = append(b.roots, h) + h.valueStart = b.addStartValueBlock(n) + if len(b.roots) == 1 { + // We insert a null block after the first start value block. + // This ensures that continuation bytes UTF-8 sequences of length + // greater than 2 will automatically hit a null block if there + // was an undefined entry. + b.valueBlocks = append(b.valueBlocks, nil) + } + n = b.computeOffsets(n) + // Offset by one extra block as the first byte starts at 0xC0 instead of 0x80. + h.lookupStart = n.refIndex - 1 + return h +} + +// generate generates and returns the trie for n. +func (b *trieBuilder) generate() (t *trie, err error) { + t = b.t + if len(b.valueBlocks) >= 1<<16 { + return nil, fmt.Errorf("maximum number of value blocks exceeded (%d > %d)", len(b.valueBlocks), 1<<16) + } + if len(b.lookupBlocks) >= 1<<16 { + return nil, fmt.Errorf("maximum number of lookup blocks exceeded (%d > %d)", len(b.lookupBlocks), 1<<16) + } + genValueBlock(t, b.valueBlocks[0]) + genValueBlock(t, &trieNode{value: make([]uint32, 64)}) + for i := 2; i < len(b.valueBlocks); i++ { + genValueBlock(t, b.valueBlocks[i]) + } + n := &trieNode{index: make([]*trieNode, 64)} + genLookupBlock(t, n) + genLookupBlock(t, n) + genLookupBlock(t, n) + for i := 3; i < len(b.lookupBlocks); i++ { + genLookupBlock(t, b.lookupBlocks[i]) + } + return b.t, nil +} + +func (t *trie) printArrays(w io.Writer, name string) (n, size int, err error) { + p := func(f string, a ...interface{}) { + nn, e := fmt.Fprintf(w, f, a...) + n += nn + if err == nil { + err = e + } + } + nv := len(t.values) + p("// %sValues: %d entries, %d bytes\n", name, nv, nv*4) + p("// Block 2 is the null block.\n") + p("var %sValues = [%d]uint32 {", name, nv) + var printnewline bool + for i, v := range t.values { + if i%blockSize == 0 { + p("\n\t// Block %#x, offset %#x", i/blockSize, i) + } + if i%4 == 0 { + printnewline = true + } + if v != 0 { + if printnewline { + p("\n\t") + printnewline = false + } + p("%#04x:%#08x, ", i, v) + } + } + p("\n}\n\n") + ni := len(t.index) + p("// %sLookup: %d entries, %d bytes\n", name, ni, ni*2) + p("// Block 0 is the null block.\n") + p("var %sLookup = [%d]uint16 {", name, ni) + printnewline = false + for i, v := range t.index { + if i%blockSize == 0 { + p("\n\t// Block %#x, offset %#x", i/blockSize, i) + } + if i%8 == 0 { + printnewline = true + } + if v != 0 { + if printnewline { + p("\n\t") + printnewline = false + } + p("%#03x:%#02x, ", i, v) + } + } + p("\n}\n\n") + return n, nv*4 + ni*2, err +} + +func (t *trie) printStruct(w io.Writer, handle *trieHandle, name string) (n, sz int, err error) { + const msg = "trie{ %sLookup[%d:], %sValues[%d:], %sLookup[:], %sValues[:]}" + n, err = fmt.Fprintf(w, msg, name, handle.lookupStart*blockSize, name, handle.valueStart*blockSize, name, name) + sz += int(reflect.TypeOf(trie{}).Size()) + return +} diff --git a/vendor/golang.org/x/text/collate/build/trie_test.go b/vendor/golang.org/x/text/collate/build/trie_test.go new file mode 100644 index 0000000..4d4f6e4 --- /dev/null +++ b/vendor/golang.org/x/text/collate/build/trie_test.go @@ -0,0 +1,107 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package build + +import ( + "bytes" + "fmt" + "testing" +) + +// We take the smallest, largest and an arbitrary value for each +// of the UTF-8 sequence lengths. +var testRunes = []rune{ + 0x01, 0x0C, 0x7F, // 1-byte sequences + 0x80, 0x100, 0x7FF, // 2-byte sequences + 0x800, 0x999, 0xFFFF, // 3-byte sequences + 0x10000, 0x10101, 0x10FFFF, // 4-byte sequences + 0x200, 0x201, 0x202, 0x210, 0x215, // five entries in one sparse block +} + +func makeTestTrie(t *testing.T) trie { + n := newNode() + for i, r := range testRunes { + n.insert(r, uint32(i)) + } + idx := newTrieBuilder() + idx.addTrie(n) + tr, err := idx.generate() + if err != nil { + t.Errorf(err.Error()) + } + return *tr +} + +func TestGenerateTrie(t *testing.T) { + testdata := makeTestTrie(t) + buf := &bytes.Buffer{} + testdata.printArrays(buf, "test") + fmt.Fprintf(buf, "var testTrie = ") + testdata.printStruct(buf, &trieHandle{19, 0}, "test") + if output != buf.String() { + t.Error("output differs") + } +} + +var output = `// testValues: 832 entries, 3328 bytes +// Block 2 is the null block. +var testValues = [832]uint32 { + // Block 0x0, offset 0x0 + 0x000c:0x00000001, + // Block 0x1, offset 0x40 + 0x007f:0x00000002, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0x00c0:0x00000003, + // Block 0x4, offset 0x100 + 0x0100:0x00000004, + // Block 0x5, offset 0x140 + 0x0140:0x0000000c, 0x0141:0x0000000d, 0x0142:0x0000000e, + 0x0150:0x0000000f, + 0x0155:0x00000010, + // Block 0x6, offset 0x180 + 0x01bf:0x00000005, + // Block 0x7, offset 0x1c0 + 0x01c0:0x00000006, + // Block 0x8, offset 0x200 + 0x0219:0x00000007, + // Block 0x9, offset 0x240 + 0x027f:0x00000008, + // Block 0xa, offset 0x280 + 0x0280:0x00000009, + // Block 0xb, offset 0x2c0 + 0x02c1:0x0000000a, + // Block 0xc, offset 0x300 + 0x033f:0x0000000b, +} + +// testLookup: 640 entries, 1280 bytes +// Block 0 is the null block. +var testLookup = [640]uint16 { + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0x0e0:0x05, 0x0e6:0x06, + // Block 0x4, offset 0x100 + 0x13f:0x07, + // Block 0x5, offset 0x140 + 0x140:0x08, 0x144:0x09, + // Block 0x6, offset 0x180 + 0x190:0x03, + // Block 0x7, offset 0x1c0 + 0x1ff:0x0a, + // Block 0x8, offset 0x200 + 0x20f:0x05, + // Block 0x9, offset 0x240 + 0x242:0x01, 0x244:0x02, + 0x248:0x03, + 0x25f:0x04, + 0x260:0x01, + 0x26f:0x02, + 0x270:0x04, 0x274:0x06, +} + +var testTrie = trie{ testLookup[1216:], testValues[0:], testLookup[:], testValues[:]}` diff --git a/vendor/golang.org/x/text/collate/collate.go b/vendor/golang.org/x/text/collate/collate.go new file mode 100644 index 0000000..2ce9689 --- /dev/null +++ b/vendor/golang.org/x/text/collate/collate.go @@ -0,0 +1,403 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO: remove hard-coded versions when we have implemented fractional weights. +// The current implementation is incompatible with later CLDR versions. +//go:generate go run maketables.go -cldr=23 -unicode=6.2.0 + +// Package collate contains types for comparing and sorting Unicode strings +// according to a given collation order. +package collate // import "golang.org/x/text/collate" + +import ( + "bytes" + "strings" + + "golang.org/x/text/internal/colltab" + "golang.org/x/text/language" +) + +// Collator provides functionality for comparing strings for a given +// collation order. +type Collator struct { + options + + sorter sorter + + _iter [2]iter +} + +func (c *Collator) iter(i int) *iter { + // TODO: evaluate performance for making the second iterator optional. + return &c._iter[i] +} + +// Supported returns the list of languages for which collating differs from its parent. +func Supported() []language.Tag { + // TODO: use language.Coverage instead. + + t := make([]language.Tag, len(tags)) + copy(t, tags) + return t +} + +func init() { + ids := strings.Split(availableLocales, ",") + tags = make([]language.Tag, len(ids)) + for i, s := range ids { + tags[i] = language.Raw.MustParse(s) + } +} + +var tags []language.Tag + +// New returns a new Collator initialized for the given locale. +func New(t language.Tag, o ...Option) *Collator { + index := colltab.MatchLang(t, tags) + c := newCollator(getTable(locales[index])) + + // Set options from the user-supplied tag. + c.setFromTag(t) + + // Set the user-supplied options. + c.setOptions(o) + + c.init() + return c +} + +// NewFromTable returns a new Collator for the given Weighter. +func NewFromTable(w colltab.Weighter, o ...Option) *Collator { + c := newCollator(w) + c.setOptions(o) + c.init() + return c +} + +func (c *Collator) init() { + if c.numeric { + c.t = colltab.NewNumericWeighter(c.t) + } + c._iter[0].init(c) + c._iter[1].init(c) +} + +// Buffer holds keys generated by Key and KeyString. +type Buffer struct { + buf [4096]byte + key []byte +} + +func (b *Buffer) init() { + if b.key == nil { + b.key = b.buf[:0] + } +} + +// Reset clears the buffer from previous results generated by Key and KeyString. +func (b *Buffer) Reset() { + b.key = b.key[:0] +} + +// Compare returns an integer comparing the two byte slices. +// The result will be 0 if a==b, -1 if a < b, and +1 if a > b. +func (c *Collator) Compare(a, b []byte) int { + // TODO: skip identical prefixes once we have a fast way to detect if a rune is + // part of a contraction. This would lead to roughly a 10% speedup for the colcmp regtest. + c.iter(0).SetInput(a) + c.iter(1).SetInput(b) + if res := c.compare(); res != 0 { + return res + } + if !c.ignore[colltab.Identity] { + return bytes.Compare(a, b) + } + return 0 +} + +// CompareString returns an integer comparing the two strings. +// The result will be 0 if a==b, -1 if a < b, and +1 if a > b. +func (c *Collator) CompareString(a, b string) int { + // TODO: skip identical prefixes once we have a fast way to detect if a rune is + // part of a contraction. This would lead to roughly a 10% speedup for the colcmp regtest. + c.iter(0).SetInputString(a) + c.iter(1).SetInputString(b) + if res := c.compare(); res != 0 { + return res + } + if !c.ignore[colltab.Identity] { + if a < b { + return -1 + } else if a > b { + return 1 + } + } + return 0 +} + +func compareLevel(f func(i *iter) int, a, b *iter) int { + a.pce = 0 + b.pce = 0 + for { + va := f(a) + vb := f(b) + if va != vb { + if va < vb { + return -1 + } + return 1 + } else if va == 0 { + break + } + } + return 0 +} + +func (c *Collator) compare() int { + ia, ib := c.iter(0), c.iter(1) + // Process primary level + if c.alternate != altShifted { + // TODO: implement script reordering + if res := compareLevel((*iter).nextPrimary, ia, ib); res != 0 { + return res + } + } else { + // TODO: handle shifted + } + if !c.ignore[colltab.Secondary] { + f := (*iter).nextSecondary + if c.backwards { + f = (*iter).prevSecondary + } + if res := compareLevel(f, ia, ib); res != 0 { + return res + } + } + // TODO: special case handling (Danish?) + if !c.ignore[colltab.Tertiary] || c.caseLevel { + if res := compareLevel((*iter).nextTertiary, ia, ib); res != 0 { + return res + } + if !c.ignore[colltab.Quaternary] { + if res := compareLevel((*iter).nextQuaternary, ia, ib); res != 0 { + return res + } + } + } + return 0 +} + +// Key returns the collation key for str. +// Passing the buffer buf may avoid memory allocations. +// The returned slice will point to an allocation in Buffer and will remain +// valid until the next call to buf.Reset(). +func (c *Collator) Key(buf *Buffer, str []byte) []byte { + // See http://www.unicode.org/reports/tr10/#Main_Algorithm for more details. + buf.init() + return c.key(buf, c.getColElems(str)) +} + +// KeyFromString returns the collation key for str. +// Passing the buffer buf may avoid memory allocations. +// The returned slice will point to an allocation in Buffer and will retain +// valid until the next call to buf.ResetKeys(). +func (c *Collator) KeyFromString(buf *Buffer, str string) []byte { + // See http://www.unicode.org/reports/tr10/#Main_Algorithm for more details. + buf.init() + return c.key(buf, c.getColElemsString(str)) +} + +func (c *Collator) key(buf *Buffer, w []colltab.Elem) []byte { + processWeights(c.alternate, c.t.Top(), w) + kn := len(buf.key) + c.keyFromElems(buf, w) + return buf.key[kn:] +} + +func (c *Collator) getColElems(str []byte) []colltab.Elem { + i := c.iter(0) + i.SetInput(str) + for i.Next() { + } + return i.Elems +} + +func (c *Collator) getColElemsString(str string) []colltab.Elem { + i := c.iter(0) + i.SetInputString(str) + for i.Next() { + } + return i.Elems +} + +type iter struct { + wa [512]colltab.Elem + + colltab.Iter + pce int +} + +func (i *iter) init(c *Collator) { + i.Weighter = c.t + i.Elems = i.wa[:0] +} + +func (i *iter) nextPrimary() int { + for { + for ; i.pce < i.N; i.pce++ { + if v := i.Elems[i.pce].Primary(); v != 0 { + i.pce++ + return v + } + } + if !i.Next() { + return 0 + } + } + panic("should not reach here") +} + +func (i *iter) nextSecondary() int { + for ; i.pce < len(i.Elems); i.pce++ { + if v := i.Elems[i.pce].Secondary(); v != 0 { + i.pce++ + return v + } + } + return 0 +} + +func (i *iter) prevSecondary() int { + for ; i.pce < len(i.Elems); i.pce++ { + if v := i.Elems[len(i.Elems)-i.pce-1].Secondary(); v != 0 { + i.pce++ + return v + } + } + return 0 +} + +func (i *iter) nextTertiary() int { + for ; i.pce < len(i.Elems); i.pce++ { + if v := i.Elems[i.pce].Tertiary(); v != 0 { + i.pce++ + return int(v) + } + } + return 0 +} + +func (i *iter) nextQuaternary() int { + for ; i.pce < len(i.Elems); i.pce++ { + if v := i.Elems[i.pce].Quaternary(); v != 0 { + i.pce++ + return v + } + } + return 0 +} + +func appendPrimary(key []byte, p int) []byte { + // Convert to variable length encoding; supports up to 23 bits. + if p <= 0x7FFF { + key = append(key, uint8(p>>8), uint8(p)) + } else { + key = append(key, uint8(p>>16)|0x80, uint8(p>>8), uint8(p)) + } + return key +} + +// keyFromElems converts the weights ws to a compact sequence of bytes. +// The result will be appended to the byte buffer in buf. +func (c *Collator) keyFromElems(buf *Buffer, ws []colltab.Elem) { + for _, v := range ws { + if w := v.Primary(); w > 0 { + buf.key = appendPrimary(buf.key, w) + } + } + if !c.ignore[colltab.Secondary] { + buf.key = append(buf.key, 0, 0) + // TODO: we can use one 0 if we can guarantee that all non-zero weights are > 0xFF. + if !c.backwards { + for _, v := range ws { + if w := v.Secondary(); w > 0 { + buf.key = append(buf.key, uint8(w>>8), uint8(w)) + } + } + } else { + for i := len(ws) - 1; i >= 0; i-- { + if w := ws[i].Secondary(); w > 0 { + buf.key = append(buf.key, uint8(w>>8), uint8(w)) + } + } + } + } else if c.caseLevel { + buf.key = append(buf.key, 0, 0) + } + if !c.ignore[colltab.Tertiary] || c.caseLevel { + buf.key = append(buf.key, 0, 0) + for _, v := range ws { + if w := v.Tertiary(); w > 0 { + buf.key = append(buf.key, uint8(w)) + } + } + // Derive the quaternary weights from the options and other levels. + // Note that we represent MaxQuaternary as 0xFF. The first byte of the + // representation of a primary weight is always smaller than 0xFF, + // so using this single byte value will compare correctly. + if !c.ignore[colltab.Quaternary] && c.alternate >= altShifted { + if c.alternate == altShiftTrimmed { + lastNonFFFF := len(buf.key) + buf.key = append(buf.key, 0) + for _, v := range ws { + if w := v.Quaternary(); w == colltab.MaxQuaternary { + buf.key = append(buf.key, 0xFF) + } else if w > 0 { + buf.key = appendPrimary(buf.key, w) + lastNonFFFF = len(buf.key) + } + } + buf.key = buf.key[:lastNonFFFF] + } else { + buf.key = append(buf.key, 0) + for _, v := range ws { + if w := v.Quaternary(); w == colltab.MaxQuaternary { + buf.key = append(buf.key, 0xFF) + } else if w > 0 { + buf.key = appendPrimary(buf.key, w) + } + } + } + } + } +} + +func processWeights(vw alternateHandling, top uint32, wa []colltab.Elem) { + ignore := false + vtop := int(top) + switch vw { + case altShifted, altShiftTrimmed: + for i := range wa { + if p := wa[i].Primary(); p <= vtop && p != 0 { + wa[i] = colltab.MakeQuaternary(p) + ignore = true + } else if p == 0 { + if ignore { + wa[i] = colltab.Ignore + } + } else { + ignore = false + } + } + case altBlanked: + for i := range wa { + if p := wa[i].Primary(); p <= vtop && (ignore || p != 0) { + wa[i] = colltab.Ignore + ignore = true + } else { + ignore = false + } + } + } +} diff --git a/vendor/golang.org/x/text/collate/collate_test.go b/vendor/golang.org/x/text/collate/collate_test.go new file mode 100644 index 0000000..0e78b96 --- /dev/null +++ b/vendor/golang.org/x/text/collate/collate_test.go @@ -0,0 +1,482 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package collate + +import ( + "bytes" + "testing" + + "golang.org/x/text/internal/colltab" + "golang.org/x/text/language" +) + +type weightsTest struct { + opt opts + in, out ColElems +} + +type opts struct { + lev int + alt alternateHandling + top int + + backwards bool + caseLevel bool +} + +// ignore returns an initialized boolean array based on the given Level. +// A negative value means using the default setting of quaternary. +func ignore(level colltab.Level) (ignore [colltab.NumLevels]bool) { + if level < 0 { + level = colltab.Quaternary + } + for i := range ignore { + ignore[i] = level < colltab.Level(i) + } + return ignore +} + +func makeCE(w []int) colltab.Elem { + ce, err := colltab.MakeElem(w[0], w[1], w[2], uint8(w[3])) + if err != nil { + panic(err) + } + return ce +} + +func (o opts) collator() *Collator { + c := &Collator{ + options: options{ + ignore: ignore(colltab.Level(o.lev - 1)), + alternate: o.alt, + backwards: o.backwards, + caseLevel: o.caseLevel, + variableTop: uint32(o.top), + }, + } + return c +} + +const ( + maxQ = 0x1FFFFF +) + +func wpq(p, q int) Weights { + return W(p, defaults.Secondary, defaults.Tertiary, q) +} + +func wsq(s, q int) Weights { + return W(0, s, defaults.Tertiary, q) +} + +func wq(q int) Weights { + return W(0, 0, 0, q) +} + +var zero = W(0, 0, 0, 0) + +var processTests = []weightsTest{ + // Shifted + { // simple sequence of non-variables + opt: opts{alt: altShifted, top: 100}, + in: ColElems{W(200), W(300), W(400)}, + out: ColElems{wpq(200, maxQ), wpq(300, maxQ), wpq(400, maxQ)}, + }, + { // first is a variable + opt: opts{alt: altShifted, top: 250}, + in: ColElems{W(200), W(300), W(400)}, + out: ColElems{wq(200), wpq(300, maxQ), wpq(400, maxQ)}, + }, + { // all but first are variable + opt: opts{alt: altShifted, top: 999}, + in: ColElems{W(1000), W(200), W(300), W(400)}, + out: ColElems{wpq(1000, maxQ), wq(200), wq(300), wq(400)}, + }, + { // first is a modifier + opt: opts{alt: altShifted, top: 999}, + in: ColElems{W(0, 10), W(1000)}, + out: ColElems{wsq(10, maxQ), wpq(1000, maxQ)}, + }, + { // primary ignorables + opt: opts{alt: altShifted, top: 250}, + in: ColElems{W(200), W(0, 10), W(300), W(0, 15), W(400)}, + out: ColElems{wq(200), zero, wpq(300, maxQ), wsq(15, maxQ), wpq(400, maxQ)}, + }, + { // secondary ignorables + opt: opts{alt: altShifted, top: 250}, + in: ColElems{W(200), W(0, 0, 10), W(300), W(0, 0, 15), W(400)}, + out: ColElems{wq(200), zero, wpq(300, maxQ), W(0, 0, 15, maxQ), wpq(400, maxQ)}, + }, + { // tertiary ignorables, no change + opt: opts{alt: altShifted, top: 250}, + in: ColElems{W(200), zero, W(300), zero, W(400)}, + out: ColElems{wq(200), zero, wpq(300, maxQ), zero, wpq(400, maxQ)}, + }, + + // ShiftTrimmed (same as Shifted) + { // simple sequence of non-variables + opt: opts{alt: altShiftTrimmed, top: 100}, + in: ColElems{W(200), W(300), W(400)}, + out: ColElems{wpq(200, maxQ), wpq(300, maxQ), wpq(400, maxQ)}, + }, + { // first is a variable + opt: opts{alt: altShiftTrimmed, top: 250}, + in: ColElems{W(200), W(300), W(400)}, + out: ColElems{wq(200), wpq(300, maxQ), wpq(400, maxQ)}, + }, + { // all but first are variable + opt: opts{alt: altShiftTrimmed, top: 999}, + in: ColElems{W(1000), W(200), W(300), W(400)}, + out: ColElems{wpq(1000, maxQ), wq(200), wq(300), wq(400)}, + }, + { // first is a modifier + opt: opts{alt: altShiftTrimmed, top: 999}, + in: ColElems{W(0, 10), W(1000)}, + out: ColElems{wsq(10, maxQ), wpq(1000, maxQ)}, + }, + { // primary ignorables + opt: opts{alt: altShiftTrimmed, top: 250}, + in: ColElems{W(200), W(0, 10), W(300), W(0, 15), W(400)}, + out: ColElems{wq(200), zero, wpq(300, maxQ), wsq(15, maxQ), wpq(400, maxQ)}, + }, + { // secondary ignorables + opt: opts{alt: altShiftTrimmed, top: 250}, + in: ColElems{W(200), W(0, 0, 10), W(300), W(0, 0, 15), W(400)}, + out: ColElems{wq(200), zero, wpq(300, maxQ), W(0, 0, 15, maxQ), wpq(400, maxQ)}, + }, + { // tertiary ignorables, no change + opt: opts{alt: altShiftTrimmed, top: 250}, + in: ColElems{W(200), zero, W(300), zero, W(400)}, + out: ColElems{wq(200), zero, wpq(300, maxQ), zero, wpq(400, maxQ)}, + }, + + // Blanked + { // simple sequence of non-variables + opt: opts{alt: altBlanked, top: 100}, + in: ColElems{W(200), W(300), W(400)}, + out: ColElems{W(200), W(300), W(400)}, + }, + { // first is a variable + opt: opts{alt: altBlanked, top: 250}, + in: ColElems{W(200), W(300), W(400)}, + out: ColElems{zero, W(300), W(400)}, + }, + { // all but first are variable + opt: opts{alt: altBlanked, top: 999}, + in: ColElems{W(1000), W(200), W(300), W(400)}, + out: ColElems{W(1000), zero, zero, zero}, + }, + { // first is a modifier + opt: opts{alt: altBlanked, top: 999}, + in: ColElems{W(0, 10), W(1000)}, + out: ColElems{W(0, 10), W(1000)}, + }, + { // primary ignorables + opt: opts{alt: altBlanked, top: 250}, + in: ColElems{W(200), W(0, 10), W(300), W(0, 15), W(400)}, + out: ColElems{zero, zero, W(300), W(0, 15), W(400)}, + }, + { // secondary ignorables + opt: opts{alt: altBlanked, top: 250}, + in: ColElems{W(200), W(0, 0, 10), W(300), W(0, 0, 15), W(400)}, + out: ColElems{zero, zero, W(300), W(0, 0, 15), W(400)}, + }, + { // tertiary ignorables, no change + opt: opts{alt: altBlanked, top: 250}, + in: ColElems{W(200), zero, W(300), zero, W(400)}, + out: ColElems{zero, zero, W(300), zero, W(400)}, + }, + + // Non-ignorable: input is always equal to output. + { // all but first are variable + opt: opts{alt: altNonIgnorable, top: 999}, + in: ColElems{W(1000), W(200), W(300), W(400)}, + out: ColElems{W(1000), W(200), W(300), W(400)}, + }, + { // primary ignorables + opt: opts{alt: altNonIgnorable, top: 250}, + in: ColElems{W(200), W(0, 10), W(300), W(0, 15), W(400)}, + out: ColElems{W(200), W(0, 10), W(300), W(0, 15), W(400)}, + }, + { // secondary ignorables + opt: opts{alt: altNonIgnorable, top: 250}, + in: ColElems{W(200), W(0, 0, 10), W(300), W(0, 0, 15), W(400)}, + out: ColElems{W(200), W(0, 0, 10), W(300), W(0, 0, 15), W(400)}, + }, + { // tertiary ignorables, no change + opt: opts{alt: altNonIgnorable, top: 250}, + in: ColElems{W(200), zero, W(300), zero, W(400)}, + out: ColElems{W(200), zero, W(300), zero, W(400)}, + }, +} + +func TestProcessWeights(t *testing.T) { + for i, tt := range processTests { + in := convertFromWeights(tt.in) + out := convertFromWeights(tt.out) + processWeights(tt.opt.alt, uint32(tt.opt.top), in) + for j, w := range in { + if w != out[j] { + t.Errorf("%d: Weights %d was %v; want %v", i, j, w, out[j]) + } + } + } +} + +type keyFromElemTest struct { + opt opts + in ColElems + out []byte +} + +var defS = byte(defaults.Secondary) +var defT = byte(defaults.Tertiary) + +const sep = 0 // separator byte + +var keyFromElemTests = []keyFromElemTest{ + { // simple primary and secondary weights. + opts{alt: altShifted}, + ColElems{W(0x200), W(0x7FFF), W(0, 0x30), W(0x100)}, + []byte{0x2, 0, 0x7F, 0xFF, 0x1, 0x00, // primary + sep, sep, 0, defS, 0, defS, 0, 0x30, 0, defS, // secondary + sep, sep, defT, defT, defT, defT, // tertiary + sep, 0xFF, 0xFF, 0xFF, 0xFF, // quaternary + }, + }, + { // same as first, but with zero element that need to be removed + opts{alt: altShifted}, + ColElems{W(0x200), zero, W(0x7FFF), W(0, 0x30), zero, W(0x100)}, + []byte{0x2, 0, 0x7F, 0xFF, 0x1, 0x00, // primary + sep, sep, 0, defS, 0, defS, 0, 0x30, 0, defS, // secondary + sep, sep, defT, defT, defT, defT, // tertiary + sep, 0xFF, 0xFF, 0xFF, 0xFF, // quaternary + }, + }, + { // same as first, with large primary values + opts{alt: altShifted}, + ColElems{W(0x200), W(0x8000), W(0, 0x30), W(0x12345)}, + []byte{0x2, 0, 0x80, 0x80, 0x00, 0x81, 0x23, 0x45, // primary + sep, sep, 0, defS, 0, defS, 0, 0x30, 0, defS, // secondary + sep, sep, defT, defT, defT, defT, // tertiary + sep, 0xFF, 0xFF, 0xFF, 0xFF, // quaternary + }, + }, + { // same as first, but with the secondary level backwards + opts{alt: altShifted, backwards: true}, + ColElems{W(0x200), W(0x7FFF), W(0, 0x30), W(0x100)}, + []byte{0x2, 0, 0x7F, 0xFF, 0x1, 0x00, // primary + sep, sep, 0, defS, 0, 0x30, 0, defS, 0, defS, // secondary + sep, sep, defT, defT, defT, defT, // tertiary + sep, 0xFF, 0xFF, 0xFF, 0xFF, // quaternary + }, + }, + { // same as first, ignoring quaternary level + opts{alt: altShifted, lev: 3}, + ColElems{W(0x200), zero, W(0x7FFF), W(0, 0x30), zero, W(0x100)}, + []byte{0x2, 0, 0x7F, 0xFF, 0x1, 0x00, // primary + sep, sep, 0, defS, 0, defS, 0, 0x30, 0, defS, // secondary + sep, sep, defT, defT, defT, defT, // tertiary + }, + }, + { // same as first, ignoring tertiary level + opts{alt: altShifted, lev: 2}, + ColElems{W(0x200), zero, W(0x7FFF), W(0, 0x30), zero, W(0x100)}, + []byte{0x2, 0, 0x7F, 0xFF, 0x1, 0x00, // primary + sep, sep, 0, defS, 0, defS, 0, 0x30, 0, defS, // secondary + }, + }, + { // same as first, ignoring secondary level + opts{alt: altShifted, lev: 1}, + ColElems{W(0x200), zero, W(0x7FFF), W(0, 0x30), zero, W(0x100)}, + []byte{0x2, 0, 0x7F, 0xFF, 0x1, 0x00}, + }, + { // simple primary and secondary weights. + opts{alt: altShiftTrimmed, top: 0x250}, + ColElems{W(0x300), W(0x200), W(0x7FFF), W(0, 0x30), W(0x800)}, + []byte{0x3, 0, 0x7F, 0xFF, 0x8, 0x00, // primary + sep, sep, 0, defS, 0, defS, 0, 0x30, 0, defS, // secondary + sep, sep, defT, defT, defT, defT, // tertiary + sep, 0xFF, 0x2, 0, // quaternary + }, + }, + { // as first, primary with case level enabled + opts{alt: altShifted, lev: 1, caseLevel: true}, + ColElems{W(0x200), W(0x7FFF), W(0, 0x30), W(0x100)}, + []byte{0x2, 0, 0x7F, 0xFF, 0x1, 0x00, // primary + sep, sep, // secondary + sep, sep, defT, defT, defT, defT, // tertiary + }, + }, +} + +func TestKeyFromElems(t *testing.T) { + buf := Buffer{} + for i, tt := range keyFromElemTests { + buf.Reset() + in := convertFromWeights(tt.in) + processWeights(tt.opt.alt, uint32(tt.opt.top), in) + tt.opt.collator().keyFromElems(&buf, in) + res := buf.key + if len(res) != len(tt.out) { + t.Errorf("%d: len(ws) was %d; want %d (%X should be %X)", i, len(res), len(tt.out), res, tt.out) + } + n := len(res) + if len(tt.out) < n { + n = len(tt.out) + } + for j, c := range res[:n] { + if c != tt.out[j] { + t.Errorf("%d: byte %d was %X; want %X", i, j, c, tt.out[j]) + } + } + } +} + +func TestGetColElems(t *testing.T) { + for i, tt := range appendNextTests { + c, err := makeTable(tt.in) + if err != nil { + // error is reported in TestAppendNext + continue + } + // Create one large test per table + str := make([]byte, 0, 4000) + out := ColElems{} + for len(str) < 3000 { + for _, chk := range tt.chk { + str = append(str, chk.in[:chk.n]...) + out = append(out, chk.out...) + } + } + for j, chk := range append(tt.chk, check{string(str), len(str), out}) { + out := convertFromWeights(chk.out) + ce := c.getColElems([]byte(chk.in)[:chk.n]) + if len(ce) != len(out) { + t.Errorf("%d:%d: len(ws) was %d; want %d", i, j, len(ce), len(out)) + continue + } + cnt := 0 + for k, w := range ce { + w, _ = colltab.MakeElem(w.Primary(), w.Secondary(), int(w.Tertiary()), 0) + if w != out[k] { + t.Errorf("%d:%d: Weights %d was %X; want %X", i, j, k, w, out[k]) + cnt++ + } + if cnt > 10 { + break + } + } + } + } +} + +type keyTest struct { + in string + out []byte +} + +var keyTests = []keyTest{ + {"abc", + []byte{0, 100, 0, 200, 1, 44, 0, 0, 0, 32, 0, 32, 0, 32, 0, 0, 2, 2, 2, 0, 255, 255, 255}, + }, + {"a\u0301", + []byte{0, 102, 0, 0, 0, 32, 0, 0, 2, 0, 255}, + }, + {"aaaaa", + []byte{0, 100, 0, 100, 0, 100, 0, 100, 0, 100, 0, 0, + 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 0, + 2, 2, 2, 2, 2, 0, + 255, 255, 255, 255, 255, + }, + }, + // Issue 16391: incomplete rune at end of UTF-8 sequence. + {"\xc2", []byte{133, 255, 253, 0, 0, 0, 32, 0, 0, 2, 0, 255}}, + {"\xc2a", []byte{133, 255, 253, 0, 100, 0, 0, 0, 32, 0, 32, 0, 0, 2, 2, 0, 255, 255}}, +} + +func TestKey(t *testing.T) { + c, _ := makeTable(appendNextTests[4].in) + c.alternate = altShifted + c.ignore = ignore(colltab.Quaternary) + buf := Buffer{} + keys1 := [][]byte{} + keys2 := [][]byte{} + for _, tt := range keyTests { + keys1 = append(keys1, c.Key(&buf, []byte(tt.in))) + keys2 = append(keys2, c.KeyFromString(&buf, tt.in)) + } + // Separate generation from testing to ensure buffers are not overwritten. + for i, tt := range keyTests { + if !bytes.Equal(keys1[i], tt.out) { + t.Errorf("%d: Key(%q) = %d; want %d", i, tt.in, keys1[i], tt.out) + } + if !bytes.Equal(keys2[i], tt.out) { + t.Errorf("%d: KeyFromString(%q) = %d; want %d", i, tt.in, keys2[i], tt.out) + } + } +} + +type compareTest struct { + a, b string + res int // comparison result +} + +var compareTests = []compareTest{ + {"a\u0301", "a", 1}, + {"a\u0301b", "ab", 1}, + {"a", "a\u0301", -1}, + {"ab", "a\u0301b", -1}, + {"bc", "a\u0301c", 1}, + {"ab", "aB", -1}, + {"a\u0301", "a\u0301", 0}, + {"a", "a", 0}, + // Only clip prefixes of whole runes. + {"\u302E", "\u302F", 1}, + // Don't clip prefixes when last rune of prefix may be part of contraction. + {"a\u035E", "a\u0301\u035F", -1}, + {"a\u0301\u035Fb", "a\u0301\u035F", -1}, +} + +func TestCompare(t *testing.T) { + c, _ := makeTable(appendNextTests[4].in) + for i, tt := range compareTests { + if res := c.Compare([]byte(tt.a), []byte(tt.b)); res != tt.res { + t.Errorf("%d: Compare(%q, %q) == %d; want %d", i, tt.a, tt.b, res, tt.res) + } + if res := c.CompareString(tt.a, tt.b); res != tt.res { + t.Errorf("%d: CompareString(%q, %q) == %d; want %d", i, tt.a, tt.b, res, tt.res) + } + } +} + +func TestNumeric(t *testing.T) { + c := New(language.English, Loose, Numeric) + + for i, tt := range []struct { + a, b string + want int + }{ + {"1", "2", -1}, + {"2", "12", -1}, + {"2", "12", -1}, // Fullwidth is sorted as usual. + {"₂", "₁₂", 1}, // Subscript is not sorted as numbers. + {"②", "①②", 1}, // Circled is not sorted as numbers. + { // Imperial Aramaic, is not sorted as number. + "\U00010859", + "\U00010858\U00010859", + 1, + }, + {"12", "2", 1}, + {"A-1", "A-2", -1}, + {"A-2", "A-12", -1}, + {"A-12", "A-2", 1}, + {"A-0001", "A-1", 0}, + } { + if got := c.CompareString(tt.a, tt.b); got != tt.want { + t.Errorf("%d: CompareString(%s, %s) = %d; want %d", i, tt.a, tt.b, got, tt.want) + } + } +} diff --git a/vendor/golang.org/x/text/collate/export_test.go b/vendor/golang.org/x/text/collate/export_test.go new file mode 100644 index 0000000..69bfeaf --- /dev/null +++ b/vendor/golang.org/x/text/collate/export_test.go @@ -0,0 +1,51 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package collate + +// Export for testing. +// TODO: no longer necessary. Remove at some point. + +import ( + "fmt" + + "golang.org/x/text/internal/colltab" +) + +const ( + defaultSecondary = 0x20 + defaultTertiary = 0x2 +) + +type Weights struct { + Primary, Secondary, Tertiary, Quaternary int +} + +func W(ce ...int) Weights { + w := Weights{ce[0], defaultSecondary, defaultTertiary, 0} + if len(ce) > 1 { + w.Secondary = ce[1] + } + if len(ce) > 2 { + w.Tertiary = ce[2] + } + if len(ce) > 3 { + w.Quaternary = ce[3] + } + return w +} +func (w Weights) String() string { + return fmt.Sprintf("[%X.%X.%X.%X]", w.Primary, w.Secondary, w.Tertiary, w.Quaternary) +} + +func convertFromWeights(ws []Weights) []colltab.Elem { + out := make([]colltab.Elem, len(ws)) + for i, w := range ws { + out[i], _ = colltab.MakeElem(w.Primary, w.Secondary, w.Tertiary, 0) + if out[i] == colltab.Ignore && w.Quaternary > 0 { + out[i] = colltab.MakeQuaternary(w.Quaternary) + } + } + return out +} diff --git a/vendor/golang.org/x/text/collate/index.go b/vendor/golang.org/x/text/collate/index.go new file mode 100644 index 0000000..535fb54 --- /dev/null +++ b/vendor/golang.org/x/text/collate/index.go @@ -0,0 +1,32 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package collate + +import "golang.org/x/text/internal/colltab" + +const blockSize = 64 + +func getTable(t tableIndex) *colltab.Table { + return &colltab.Table{ + Index: colltab.Trie{ + Index0: mainLookup[:][blockSize*t.lookupOffset:], + Values0: mainValues[:][blockSize*t.valuesOffset:], + Index: mainLookup[:], + Values: mainValues[:], + }, + ExpandElem: mainExpandElem[:], + ContractTries: colltab.ContractTrieSet(mainCTEntries[:]), + ContractElem: mainContractElem[:], + MaxContractLen: 18, + VariableTop: varTop, + } +} + +// tableIndex holds information for constructing a table +// for a certain locale based on the main table. +type tableIndex struct { + lookupOffset uint32 + valuesOffset uint32 +} diff --git a/vendor/golang.org/x/text/collate/maketables.go b/vendor/golang.org/x/text/collate/maketables.go new file mode 100644 index 0000000..b4c835e --- /dev/null +++ b/vendor/golang.org/x/text/collate/maketables.go @@ -0,0 +1,553 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// Collation table generator. +// Data read from the web. + +package main + +import ( + "archive/zip" + "bufio" + "bytes" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "regexp" + "sort" + "strconv" + "strings" + "unicode/utf8" + + "golang.org/x/text/collate" + "golang.org/x/text/collate/build" + "golang.org/x/text/internal/colltab" + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", false, + "test existing tables; can be used to compare web data with package data.") + short = flag.Bool("short", false, `Use "short" alternatives, when available.`) + draft = flag.Bool("draft", false, `Use draft versions, when available.`) + tags = flag.String("tags", "", "build tags to be included after +build directive") + pkg = flag.String("package", "collate", + "the name of the package in which the generated file is to be included") + + tables = flagStringSetAllowAll("tables", "collate", "collate,chars", + "comma-spearated list of tables to generate.") + exclude = flagStringSet("exclude", "zh2", "", + "comma-separated list of languages to exclude.") + include = flagStringSet("include", "", "", + "comma-separated list of languages to include. Include trumps exclude.") + // TODO: Not included: unihan gb2312han zhuyin big5han (for size reasons) + // TODO: Not included: traditional (buggy for Bengali) + types = flagStringSetAllowAll("types", "standard,phonebook,phonetic,reformed,pinyin,stroke", "", + "comma-separated list of types that should be included.") +) + +// stringSet implements an ordered set based on a list. It implements flag.Value +// to allow a set to be specified as a comma-separated list. +type stringSet struct { + s []string + allowed *stringSet + dirty bool // needs compaction if true + all bool + allowAll bool +} + +func flagStringSet(name, def, allowed, usage string) *stringSet { + ss := &stringSet{} + if allowed != "" { + usage += fmt.Sprintf(" (allowed values: any of %s)", allowed) + ss.allowed = &stringSet{} + failOnError(ss.allowed.Set(allowed)) + } + ss.Set(def) + flag.Var(ss, name, usage) + return ss +} + +func flagStringSetAllowAll(name, def, allowed, usage string) *stringSet { + ss := &stringSet{allowAll: true} + if allowed == "" { + flag.Var(ss, name, usage+fmt.Sprintf(` Use "all" to select all.`)) + } else { + ss.allowed = &stringSet{} + failOnError(ss.allowed.Set(allowed)) + flag.Var(ss, name, usage+fmt.Sprintf(` (allowed values: "all" or any of %s)`, allowed)) + } + ss.Set(def) + return ss +} + +func (ss stringSet) Len() int { + return len(ss.s) +} + +func (ss stringSet) String() string { + return strings.Join(ss.s, ",") +} + +func (ss *stringSet) Set(s string) error { + if ss.allowAll && s == "all" { + ss.s = nil + ss.all = true + return nil + } + ss.s = ss.s[:0] + for _, s := range strings.Split(s, ",") { + if s := strings.TrimSpace(s); s != "" { + if ss.allowed != nil && !ss.allowed.contains(s) { + return fmt.Errorf("unsupported value %q; must be one of %s", s, ss.allowed) + } + ss.add(s) + } + } + ss.compact() + return nil +} + +func (ss *stringSet) add(s string) { + ss.s = append(ss.s, s) + ss.dirty = true +} + +func (ss *stringSet) values() []string { + ss.compact() + return ss.s +} + +func (ss *stringSet) contains(s string) bool { + if ss.all { + return true + } + for _, v := range ss.s { + if v == s { + return true + } + } + return false +} + +func (ss *stringSet) compact() { + if !ss.dirty { + return + } + a := ss.s + sort.Strings(a) + k := 0 + for i := 1; i < len(a); i++ { + if a[k] != a[i] { + a[k+1] = a[i] + k++ + } + } + ss.s = a[:k+1] + ss.dirty = false +} + +func skipLang(l string) bool { + if include.Len() > 0 { + return !include.contains(l) + } + return exclude.contains(l) +} + +// altInclude returns a list of alternatives (for the LDML alt attribute) +// in order of preference. An empty string in this list indicates the +// default entry. +func altInclude() []string { + l := []string{} + if *short { + l = append(l, "short") + } + l = append(l, "") + // TODO: handle draft using cldr.SetDraftLevel + if *draft { + l = append(l, "proposed") + } + return l +} + +func failOnError(e error) { + if e != nil { + log.Panic(e) + } +} + +func openArchive() *zip.Reader { + f := gen.OpenCLDRCoreZip() + buffer, err := ioutil.ReadAll(f) + f.Close() + failOnError(err) + archive, err := zip.NewReader(bytes.NewReader(buffer), int64(len(buffer))) + failOnError(err) + return archive +} + +// parseUCA parses a Default Unicode Collation Element Table of the format +// specified in http://www.unicode.org/reports/tr10/#File_Format. +// It returns the variable top. +func parseUCA(builder *build.Builder) { + var r io.ReadCloser + var err error + for _, f := range openArchive().File { + if strings.HasSuffix(f.Name, "allkeys_CLDR.txt") { + r, err = f.Open() + } + } + if r == nil { + log.Fatal("File allkeys_CLDR.txt not found in archive.") + } + failOnError(err) + defer r.Close() + scanner := bufio.NewScanner(r) + colelem := regexp.MustCompile(`\[([.*])([0-9A-F.]+)\]`) + for i := 1; scanner.Scan(); i++ { + line := scanner.Text() + if len(line) == 0 || line[0] == '#' { + continue + } + if line[0] == '@' { + // parse properties + switch { + case strings.HasPrefix(line[1:], "version "): + a := strings.Split(line[1:], " ") + if a[1] != gen.UnicodeVersion() { + log.Fatalf("incompatible version %s; want %s", a[1], gen.UnicodeVersion()) + } + case strings.HasPrefix(line[1:], "backwards "): + log.Fatalf("%d: unsupported option backwards", i) + default: + log.Printf("%d: unknown option %s", i, line[1:]) + } + } else { + // parse entries + part := strings.Split(line, " ; ") + if len(part) != 2 { + log.Fatalf("%d: production rule without ';': %v", i, line) + } + lhs := []rune{} + for _, v := range strings.Split(part[0], " ") { + if v == "" { + continue + } + lhs = append(lhs, rune(convHex(i, v))) + } + var n int + var vars []int + rhs := [][]int{} + for i, m := range colelem.FindAllStringSubmatch(part[1], -1) { + n += len(m[0]) + elem := []int{} + for _, h := range strings.Split(m[2], ".") { + elem = append(elem, convHex(i, h)) + } + if m[1] == "*" { + vars = append(vars, i) + } + rhs = append(rhs, elem) + } + if len(part[1]) < n+3 || part[1][n+1] != '#' { + log.Fatalf("%d: expected comment; found %s", i, part[1][n:]) + } + if *test { + testInput.add(string(lhs)) + } + failOnError(builder.Add(lhs, rhs, vars)) + } + } + if scanner.Err() != nil { + log.Fatal(scanner.Err()) + } +} + +func convHex(line int, s string) int { + r, e := strconv.ParseInt(s, 16, 32) + if e != nil { + log.Fatalf("%d: %v", line, e) + } + return int(r) +} + +var testInput = stringSet{} + +var charRe = regexp.MustCompile(`&#x([0-9A-F]*);`) +var tagRe = regexp.MustCompile(`<([a-z_]*) */>`) + +var mainLocales = []string{} + +// charsets holds a list of exemplar characters per category. +type charSets map[string][]string + +func (p charSets) fprint(w io.Writer) { + fmt.Fprintln(w, "[exN]string{") + for i, k := range []string{"", "contractions", "punctuation", "auxiliary", "currencySymbol", "index"} { + if set := p[k]; len(set) != 0 { + fmt.Fprintf(w, "\t\t%d: %q,\n", i, strings.Join(set, " ")) + } + } + fmt.Fprintln(w, "\t},") +} + +var localeChars = make(map[string]charSets) + +const exemplarHeader = ` +type exemplarType int +const ( + exCharacters exemplarType = iota + exContractions + exPunctuation + exAuxiliary + exCurrency + exIndex + exN +) +` + +func printExemplarCharacters(w io.Writer) { + fmt.Fprintln(w, exemplarHeader) + fmt.Fprintln(w, "var exemplarCharacters = map[string][exN]string{") + for _, loc := range mainLocales { + fmt.Fprintf(w, "\t%q: ", loc) + localeChars[loc].fprint(w) + } + fmt.Fprintln(w, "}") +} + +func decodeCLDR(d *cldr.Decoder) *cldr.CLDR { + r := gen.OpenCLDRCoreZip() + data, err := d.DecodeZip(r) + failOnError(err) + return data +} + +// parseMain parses XML files in the main directory of the CLDR core.zip file. +func parseMain() { + d := &cldr.Decoder{} + d.SetDirFilter("main") + d.SetSectionFilter("characters") + data := decodeCLDR(d) + for _, loc := range data.Locales() { + x := data.RawLDML(loc) + if skipLang(x.Identity.Language.Type) { + continue + } + if x.Characters != nil { + x, _ = data.LDML(loc) + loc = language.Make(loc).String() + for _, ec := range x.Characters.ExemplarCharacters { + if ec.Draft != "" { + continue + } + if _, ok := localeChars[loc]; !ok { + mainLocales = append(mainLocales, loc) + localeChars[loc] = make(charSets) + } + localeChars[loc][ec.Type] = parseCharacters(ec.Data()) + } + } + } +} + +func parseCharacters(chars string) []string { + parseSingle := func(s string) (r rune, tail string, escaped bool) { + if s[0] == '\\' { + return rune(s[1]), s[2:], true + } + r, sz := utf8.DecodeRuneInString(s) + return r, s[sz:], false + } + chars = strings.TrimSpace(chars) + if n := len(chars) - 1; chars[n] == ']' && chars[0] == '[' { + chars = chars[1:n] + } + list := []string{} + var r, last, end rune + for len(chars) > 0 { + if chars[0] == '{' { // character sequence + buf := []rune{} + for chars = chars[1:]; len(chars) > 0; { + r, chars, _ = parseSingle(chars) + if r == '}' { + break + } + if r == ' ' { + log.Fatalf("space not supported in sequence %q", chars) + } + buf = append(buf, r) + } + list = append(list, string(buf)) + last = 0 + } else { // single character + escaped := false + r, chars, escaped = parseSingle(chars) + if r != ' ' { + if r == '-' && !escaped { + if last == 0 { + log.Fatal("'-' should be preceded by a character") + } + end, chars, _ = parseSingle(chars) + for ; last <= end; last++ { + list = append(list, string(last)) + } + last = 0 + } else { + list = append(list, string(r)) + last = r + } + } + } + } + return list +} + +var fileRe = regexp.MustCompile(`.*/collation/(.*)\.xml`) + +// typeMap translates legacy type keys to their BCP47 equivalent. +var typeMap = map[string]string{ + "phonebook": "phonebk", + "traditional": "trad", +} + +// parseCollation parses XML files in the collation directory of the CLDR core.zip file. +func parseCollation(b *build.Builder) { + d := &cldr.Decoder{} + d.SetDirFilter("collation") + data := decodeCLDR(d) + for _, loc := range data.Locales() { + x, err := data.LDML(loc) + failOnError(err) + if skipLang(x.Identity.Language.Type) { + continue + } + cs := x.Collations.Collation + sl := cldr.MakeSlice(&cs) + if len(types.s) == 0 { + sl.SelectAnyOf("type", x.Collations.Default()) + } else if !types.all { + sl.SelectAnyOf("type", types.s...) + } + sl.SelectOnePerGroup("alt", altInclude()) + + for _, c := range cs { + id, err := language.Parse(loc) + if err != nil { + fmt.Fprintf(os.Stderr, "invalid locale: %q", err) + continue + } + // Support both old- and new-style defaults. + d := c.Type + if x.Collations.DefaultCollation == nil { + d = x.Collations.Default() + } else { + d = x.Collations.DefaultCollation.Data() + } + // We assume tables are being built either for search or collation, + // but not both. For search the default is always "search". + if d != c.Type && c.Type != "search" { + typ := c.Type + if len(c.Type) > 8 { + typ = typeMap[c.Type] + } + id, err = id.SetTypeForKey("co", typ) + failOnError(err) + } + t := b.Tailoring(id) + c.Process(processor{t}) + } + } +} + +type processor struct { + t *build.Tailoring +} + +func (p processor) Reset(anchor string, before int) (err error) { + if before != 0 { + err = p.t.SetAnchorBefore(anchor) + } else { + err = p.t.SetAnchor(anchor) + } + failOnError(err) + return nil +} + +func (p processor) Insert(level int, str, context, extend string) error { + str = context + str + if *test { + testInput.add(str) + } + // TODO: mimic bug in old maketables: remove. + err := p.t.Insert(colltab.Level(level-1), str, context+extend) + failOnError(err) + return nil +} + +func (p processor) Index(id string) { +} + +func testCollator(c *collate.Collator) { + c0 := collate.New(language.Und) + + // iterator over all characters for all locales and check + // whether Key is equal. + buf := collate.Buffer{} + + // Add all common and not too uncommon runes to the test set. + for i := rune(0); i < 0x30000; i++ { + testInput.add(string(i)) + } + for i := rune(0xE0000); i < 0xF0000; i++ { + testInput.add(string(i)) + } + for _, str := range testInput.values() { + k0 := c0.KeyFromString(&buf, str) + k := c.KeyFromString(&buf, str) + if !bytes.Equal(k0, k) { + failOnError(fmt.Errorf("test:%U: keys differ (%x vs %x)", []rune(str), k0, k)) + } + buf.Reset() + } + fmt.Println("PASS") +} + +func main() { + gen.Init() + b := build.NewBuilder() + parseUCA(b) + if tables.contains("chars") { + parseMain() + } + parseCollation(b) + + c, err := b.Build() + failOnError(err) + + if *test { + testCollator(collate.NewFromTable(c)) + } else { + w := &bytes.Buffer{} + + gen.WriteUnicodeVersion(w) + gen.WriteCLDRVersion(w) + + if tables.contains("collate") { + _, err = b.Print(w) + failOnError(err) + } + if tables.contains("chars") { + printExemplarCharacters(w) + } + gen.WriteGoFile("tables.go", *pkg, w.Bytes()) + } +} diff --git a/vendor/golang.org/x/text/collate/option.go b/vendor/golang.org/x/text/collate/option.go new file mode 100644 index 0000000..f39ef68 --- /dev/null +++ b/vendor/golang.org/x/text/collate/option.go @@ -0,0 +1,239 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package collate + +import ( + "sort" + + "golang.org/x/text/internal/colltab" + "golang.org/x/text/language" + "golang.org/x/text/unicode/norm" +) + +// newCollator creates a new collator with default options configured. +func newCollator(t colltab.Weighter) *Collator { + // Initialize a collator with default options. + c := &Collator{ + options: options{ + ignore: [colltab.NumLevels]bool{ + colltab.Quaternary: true, + colltab.Identity: true, + }, + f: norm.NFD, + t: t, + }, + } + + // TODO: store vt in tags or remove. + c.variableTop = t.Top() + + return c +} + +// An Option is used to change the behavior of a Collator. Options override the +// settings passed through the locale identifier. +type Option struct { + priority int + f func(o *options) +} + +type prioritizedOptions []Option + +func (p prioritizedOptions) Len() int { + return len(p) +} + +func (p prioritizedOptions) Swap(i, j int) { + p[i], p[j] = p[j], p[i] +} + +func (p prioritizedOptions) Less(i, j int) bool { + return p[i].priority < p[j].priority +} + +type options struct { + // ignore specifies which levels to ignore. + ignore [colltab.NumLevels]bool + + // caseLevel is true if there is an additional level of case matching + // between the secondary and tertiary levels. + caseLevel bool + + // backwards specifies the order of sorting at the secondary level. + // This option exists predominantly to support reverse sorting of accents in French. + backwards bool + + // numeric specifies whether any sequence of decimal digits (category is Nd) + // is sorted at a primary level with its numeric value. + // For example, "A-21" < "A-123". + // This option is set by wrapping the main Weighter with NewNumericWeighter. + numeric bool + + // alternate specifies an alternative handling of variables. + alternate alternateHandling + + // variableTop is the largest primary value that is considered to be + // variable. + variableTop uint32 + + t colltab.Weighter + + f norm.Form +} + +func (o *options) setOptions(opts []Option) { + sort.Sort(prioritizedOptions(opts)) + for _, x := range opts { + x.f(o) + } +} + +// OptionsFromTag extracts the BCP47 collation options from the tag and +// configures a collator accordingly. These options are set before any other +// option. +func OptionsFromTag(t language.Tag) Option { + return Option{0, func(o *options) { + o.setFromTag(t) + }} +} + +func (o *options) setFromTag(t language.Tag) { + o.caseLevel = ldmlBool(t, o.caseLevel, "kc") + o.backwards = ldmlBool(t, o.backwards, "kb") + o.numeric = ldmlBool(t, o.numeric, "kn") + + // Extract settings from the BCP47 u extension. + switch t.TypeForKey("ks") { // strength + case "level1": + o.ignore[colltab.Secondary] = true + o.ignore[colltab.Tertiary] = true + case "level2": + o.ignore[colltab.Tertiary] = true + case "level3", "": + // The default. + case "level4": + o.ignore[colltab.Quaternary] = false + case "identic": + o.ignore[colltab.Quaternary] = false + o.ignore[colltab.Identity] = false + } + + switch t.TypeForKey("ka") { + case "shifted": + o.alternate = altShifted + // The following two types are not official BCP47, but we support them to + // give access to this otherwise hidden functionality. The name blanked is + // derived from the LDML name blanked and posix reflects the main use of + // the shift-trimmed option. + case "blanked": + o.alternate = altBlanked + case "posix": + o.alternate = altShiftTrimmed + } + + // TODO: caseFirst ("kf"), reorder ("kr"), and maybe variableTop ("vt"). + + // Not used: + // - normalization ("kk", not necessary for this implementation) + // - hiraganaQuatenary ("kh", obsolete) +} + +func ldmlBool(t language.Tag, old bool, key string) bool { + switch t.TypeForKey(key) { + case "true": + return true + case "false": + return false + default: + return old + } +} + +var ( + // IgnoreCase sets case-insensitive comparison. + IgnoreCase Option = ignoreCase + ignoreCase = Option{3, ignoreCaseF} + + // IgnoreDiacritics causes diacritical marks to be ignored. ("o" == "ö"). + IgnoreDiacritics Option = ignoreDiacritics + ignoreDiacritics = Option{3, ignoreDiacriticsF} + + // IgnoreWidth causes full-width characters to match their half-width + // equivalents. + IgnoreWidth Option = ignoreWidth + ignoreWidth = Option{2, ignoreWidthF} + + // Loose sets the collator to ignore diacritics, case and weight. + Loose Option = loose + loose = Option{4, looseF} + + // Force ordering if strings are equivalent but not equal. + Force Option = force + force = Option{5, forceF} + + // Numeric specifies that numbers should sort numerically ("2" < "12"). + Numeric Option = numeric + numeric = Option{5, numericF} +) + +func ignoreWidthF(o *options) { + o.ignore[colltab.Tertiary] = true + o.caseLevel = true +} + +func ignoreDiacriticsF(o *options) { + o.ignore[colltab.Secondary] = true +} + +func ignoreCaseF(o *options) { + o.ignore[colltab.Tertiary] = true + o.caseLevel = false +} + +func looseF(o *options) { + ignoreWidthF(o) + ignoreDiacriticsF(o) + ignoreCaseF(o) +} + +func forceF(o *options) { + o.ignore[colltab.Identity] = false +} + +func numericF(o *options) { o.numeric = true } + +// Reorder overrides the pre-defined ordering of scripts and character sets. +func Reorder(s ...string) Option { + // TODO: need fractional weights to implement this. + panic("TODO: implement") +} + +// TODO: consider making these public again. These options cannot be fully +// specified in BCP47, so an API interface seems warranted. Still a higher-level +// interface would be nice (e.g. a POSIX option for enabling altShiftTrimmed) + +// alternateHandling identifies the various ways in which variables are handled. +// A rune with a primary weight lower than the variable top is considered a +// variable. +// See http://www.unicode.org/reports/tr10/#Variable_Weighting for details. +type alternateHandling int + +const ( + // altNonIgnorable turns off special handling of variables. + altNonIgnorable alternateHandling = iota + + // altBlanked sets variables and all subsequent primary ignorables to be + // ignorable at all levels. This is identical to removing all variables + // and subsequent primary ignorables from the input. + altBlanked + + // altShifted sets variables to be ignorable for levels one through three and + // adds a fourth level based on the values of the ignored levels. + altShifted + + // altShiftTrimmed is a slight variant of altShifted that is used to + // emulate POSIX. + altShiftTrimmed +) diff --git a/vendor/golang.org/x/text/collate/option_test.go b/vendor/golang.org/x/text/collate/option_test.go new file mode 100644 index 0000000..0f6ba9b --- /dev/null +++ b/vendor/golang.org/x/text/collate/option_test.go @@ -0,0 +1,209 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +package collate + +import ( + "reflect" + "strings" + "testing" + + "golang.org/x/text/internal/colltab" + "golang.org/x/text/language" +) + +var ( + defaultIgnore = ignore(colltab.Tertiary) + defaultTable = getTable(locales[0]) +) + +func TestOptions(t *testing.T) { + for i, tt := range []struct { + in []Option + out options + }{ + 0: { + out: options{ + ignore: defaultIgnore, + }, + }, + 1: { + in: []Option{IgnoreDiacritics}, + out: options{ + ignore: [colltab.NumLevels]bool{false, true, false, true, true}, + }, + }, + 2: { + in: []Option{IgnoreCase, IgnoreDiacritics}, + out: options{ + ignore: ignore(colltab.Primary), + }, + }, + 3: { + in: []Option{ignoreDiacritics, IgnoreWidth}, + out: options{ + ignore: ignore(colltab.Primary), + caseLevel: true, + }, + }, + 4: { + in: []Option{IgnoreWidth, ignoreDiacritics}, + out: options{ + ignore: ignore(colltab.Primary), + caseLevel: true, + }, + }, + 5: { + in: []Option{IgnoreCase, IgnoreWidth}, + out: options{ + ignore: ignore(colltab.Secondary), + }, + }, + 6: { + in: []Option{IgnoreCase, IgnoreWidth, Loose}, + out: options{ + ignore: ignore(colltab.Primary), + }, + }, + 7: { + in: []Option{Force, IgnoreCase, IgnoreWidth, Loose}, + out: options{ + ignore: [colltab.NumLevels]bool{false, true, true, true, false}, + }, + }, + 8: { + in: []Option{IgnoreDiacritics, IgnoreCase}, + out: options{ + ignore: ignore(colltab.Primary), + }, + }, + 9: { + in: []Option{Numeric}, + out: options{ + ignore: defaultIgnore, + numeric: true, + }, + }, + 10: { + in: []Option{OptionsFromTag(language.MustParse("und-u-ks-level1"))}, + out: options{ + ignore: ignore(colltab.Primary), + }, + }, + 11: { + in: []Option{OptionsFromTag(language.MustParse("und-u-ks-level4"))}, + out: options{ + ignore: ignore(colltab.Quaternary), + }, + }, + 12: { + in: []Option{OptionsFromTag(language.MustParse("und-u-ks-identic"))}, + out: options{}, + }, + 13: { + in: []Option{ + OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")), + }, + out: options{ + ignore: defaultIgnore, + caseLevel: true, + backwards: true, + numeric: true, + }, + }, + 14: { + in: []Option{ + OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")), + OptionsFromTag(language.MustParse("und-u-kn-false-kb-false-kc-false")), + }, + out: options{ + ignore: defaultIgnore, + }, + }, + 15: { + in: []Option{ + OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")), + OptionsFromTag(language.MustParse("und-u-kn-foo-kb-foo-kc-foo")), + }, + out: options{ + ignore: defaultIgnore, + caseLevel: true, + backwards: true, + numeric: true, + }, + }, + 16: { // Normal options take precedence over tag options. + in: []Option{ + Numeric, IgnoreCase, + OptionsFromTag(language.MustParse("und-u-kn-false-kc-true")), + }, + out: options{ + ignore: ignore(colltab.Secondary), + caseLevel: false, + numeric: true, + }, + }, + 17: { + in: []Option{ + OptionsFromTag(language.MustParse("und-u-ka-shifted")), + }, + out: options{ + ignore: defaultIgnore, + alternate: altShifted, + }, + }, + 18: { + in: []Option{ + OptionsFromTag(language.MustParse("und-u-ka-blanked")), + }, + out: options{ + ignore: defaultIgnore, + alternate: altBlanked, + }, + }, + 19: { + in: []Option{ + OptionsFromTag(language.MustParse("und-u-ka-posix")), + }, + out: options{ + ignore: defaultIgnore, + alternate: altShiftTrimmed, + }, + }, + } { + c := newCollator(defaultTable) + c.t = nil + c.variableTop = 0 + c.f = 0 + + c.setOptions(tt.in) + if !reflect.DeepEqual(c.options, tt.out) { + t.Errorf("%d: got %v; want %v", i, c.options, tt.out) + } + } +} + +func TestAlternateSortTypes(t *testing.T) { + testCases := []struct { + lang string + in []string + want []string + }{{ + lang: "zh,cmn,zh-Hant-u-co-pinyin,zh-HK-u-co-pinyin,zh-pinyin", + in: []string{"爸爸", "妈妈", "儿子", "女儿"}, + want: []string{"爸爸", "儿子", "妈妈", "女儿"}, + }, { + lang: "zh-Hant,zh-u-co-stroke,zh-Hant-u-co-stroke", + in: []string{"爸爸", "妈妈", "儿子", "女儿"}, + want: []string{"儿子", "女儿", "妈妈", "爸爸"}, + }} + for _, tc := range testCases { + for _, tag := range strings.Split(tc.lang, ",") { + got := append([]string{}, tc.in...) + New(language.MustParse(tag)).SortStrings(got) + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("New(%s).SortStrings(%v) = %v; want %v", tag, tc.in, got, tc.want) + } + } + } +} diff --git a/vendor/golang.org/x/text/collate/reg_test.go b/vendor/golang.org/x/text/collate/reg_test.go new file mode 100644 index 0000000..1ac5fed --- /dev/null +++ b/vendor/golang.org/x/text/collate/reg_test.go @@ -0,0 +1,230 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package collate + +import ( + "archive/zip" + "bufio" + "bytes" + "flag" + "io" + "io/ioutil" + "log" + "path" + "regexp" + "strconv" + "strings" + "testing" + "unicode/utf8" + + "golang.org/x/text/collate/build" + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" +) + +var long = flag.Bool("long", false, + "run time-consuming tests, such as tests that fetch data online") + +// This regression test runs tests for the test files in CollationTest.zip +// (taken from http://www.unicode.org/Public/UCA/<gen.UnicodeVersion()>/). +// +// The test files have the following form: +// # header +// 0009 0021; # ('\u0009') <CHARACTER TABULATION> [| | | 0201 025E] +// 0009 003F; # ('\u0009') <CHARACTER TABULATION> [| | | 0201 0263] +// 000A 0021; # ('\u000A') <LINE FEED (LF)> [| | | 0202 025E] +// 000A 003F; # ('\u000A') <LINE FEED (LF)> [| | | 0202 0263] +// +// The part before the semicolon is the hex representation of a sequence +// of runes. After the hash mark is a comment. The strings +// represented by rune sequence are in the file in sorted order, as +// defined by the DUCET. + +type Test struct { + name string + str [][]byte + comment []string +} + +var versionRe = regexp.MustCompile(`# UCA Version: (.*)\n?$`) +var testRe = regexp.MustCompile(`^([\dA-F ]+);.*# (.*)\n?$`) + +func TestCollation(t *testing.T) { + if !gen.IsLocal() && !*long { + t.Skip("skipping test to prevent downloading; to run use -long or use -local to specify a local source") + } + t.Skip("must first update to new file format to support test") + for _, test := range loadTestData() { + doTest(t, test) + } +} + +func Error(e error) { + if e != nil { + log.Fatal(e) + } +} + +// parseUCA parses a Default Unicode Collation Element Table of the format +// specified in http://www.unicode.org/reports/tr10/#File_Format. +// It returns the variable top. +func parseUCA(builder *build.Builder) { + r := gen.OpenUnicodeFile("UCA", "", "allkeys.txt") + defer r.Close() + input := bufio.NewReader(r) + colelem := regexp.MustCompile(`\[([.*])([0-9A-F.]+)\]`) + for i := 1; true; i++ { + l, prefix, err := input.ReadLine() + if err == io.EOF { + break + } + Error(err) + line := string(l) + if prefix { + log.Fatalf("%d: buffer overflow", i) + } + if len(line) == 0 || line[0] == '#' { + continue + } + if line[0] == '@' { + if strings.HasPrefix(line[1:], "version ") { + if v := strings.Split(line[1:], " ")[1]; v != gen.UnicodeVersion() { + log.Fatalf("incompatible version %s; want %s", v, gen.UnicodeVersion()) + } + } + } else { + // parse entries + part := strings.Split(line, " ; ") + if len(part) != 2 { + log.Fatalf("%d: production rule without ';': %v", i, line) + } + lhs := []rune{} + for _, v := range strings.Split(part[0], " ") { + if v != "" { + lhs = append(lhs, rune(convHex(i, v))) + } + } + vars := []int{} + rhs := [][]int{} + for i, m := range colelem.FindAllStringSubmatch(part[1], -1) { + if m[1] == "*" { + vars = append(vars, i) + } + elem := []int{} + for _, h := range strings.Split(m[2], ".") { + elem = append(elem, convHex(i, h)) + } + rhs = append(rhs, elem) + } + builder.Add(lhs, rhs, vars) + } + } +} + +func convHex(line int, s string) int { + r, e := strconv.ParseInt(s, 16, 32) + if e != nil { + log.Fatalf("%d: %v", line, e) + } + return int(r) +} + +func loadTestData() []Test { + f := gen.OpenUnicodeFile("UCA", "", "CollationTest.zip") + buffer, err := ioutil.ReadAll(f) + f.Close() + Error(err) + archive, err := zip.NewReader(bytes.NewReader(buffer), int64(len(buffer))) + Error(err) + tests := []Test{} + for _, f := range archive.File { + // Skip the short versions, which are simply duplicates of the long versions. + if strings.Contains(f.Name, "SHORT") || f.FileInfo().IsDir() { + continue + } + ff, err := f.Open() + Error(err) + defer ff.Close() + scanner := bufio.NewScanner(ff) + test := Test{name: path.Base(f.Name)} + for scanner.Scan() { + line := scanner.Text() + if len(line) <= 1 || line[0] == '#' { + if m := versionRe.FindStringSubmatch(line); m != nil { + if m[1] != gen.UnicodeVersion() { + log.Printf("warning:%s: version is %s; want %s", f.Name, m[1], gen.UnicodeVersion()) + } + } + continue + } + m := testRe.FindStringSubmatch(line) + if m == nil || len(m) < 3 { + log.Fatalf(`Failed to parse: "%s" result: %#v`, line, m) + } + str := []byte{} + // In the regression test data (unpaired) surrogates are assigned a weight + // corresponding to their code point value. However, utf8.DecodeRune, + // which is used to compute the implicit weight, assigns FFFD to surrogates. + // We therefore skip tests with surrogates. This skips about 35 entries + // per test. + valid := true + for _, split := range strings.Split(m[1], " ") { + r, err := strconv.ParseUint(split, 16, 64) + Error(err) + valid = valid && utf8.ValidRune(rune(r)) + str = append(str, string(rune(r))...) + } + if valid { + test.str = append(test.str, str) + test.comment = append(test.comment, m[2]) + } + } + if scanner.Err() != nil { + log.Fatal(scanner.Err()) + } + tests = append(tests, test) + } + return tests +} + +var errorCount int + +func runes(b []byte) []rune { + return []rune(string(b)) +} + +var shifted = language.MustParse("und-u-ka-shifted-ks-level4") + +func doTest(t *testing.T, tc Test) { + bld := build.NewBuilder() + parseUCA(bld) + w, err := bld.Build() + Error(err) + var tag language.Tag + if !strings.Contains(tc.name, "NON_IGNOR") { + tag = shifted + } + c := NewFromTable(w, OptionsFromTag(tag)) + b := &Buffer{} + prev := tc.str[0] + for i := 1; i < len(tc.str); i++ { + b.Reset() + s := tc.str[i] + ka := c.Key(b, prev) + kb := c.Key(b, s) + if r := bytes.Compare(ka, kb); r == 1 { + t.Errorf("%s:%d: Key(%.4X) < Key(%.4X) (%X < %X) == %d; want -1 or 0", tc.name, i, []rune(string(prev)), []rune(string(s)), ka, kb, r) + prev = s + continue + } + if r := c.Compare(prev, s); r == 1 { + t.Errorf("%s:%d: Compare(%.4X, %.4X) == %d; want -1 or 0", tc.name, i, runes(prev), runes(s), r) + } + if r := c.Compare(s, prev); r == -1 { + t.Errorf("%s:%d: Compare(%.4X, %.4X) == %d; want 1 or 0", tc.name, i, runes(s), runes(prev), r) + } + prev = s + } +} diff --git a/vendor/golang.org/x/text/collate/sort.go b/vendor/golang.org/x/text/collate/sort.go new file mode 100644 index 0000000..62f1e75 --- /dev/null +++ b/vendor/golang.org/x/text/collate/sort.go @@ -0,0 +1,81 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package collate + +import ( + "bytes" + "sort" +) + +const ( + maxSortBuffer = 40960 + maxSortEntries = 4096 +) + +type swapper interface { + Swap(i, j int) +} + +type sorter struct { + buf *Buffer + keys [][]byte + src swapper +} + +func (s *sorter) init(n int) { + if s.buf == nil { + s.buf = &Buffer{} + s.buf.init() + } + if cap(s.keys) < n { + s.keys = make([][]byte, n) + } + s.keys = s.keys[0:n] +} + +func (s *sorter) sort(src swapper) { + s.src = src + sort.Sort(s) +} + +func (s sorter) Len() int { + return len(s.keys) +} + +func (s sorter) Less(i, j int) bool { + return bytes.Compare(s.keys[i], s.keys[j]) == -1 +} + +func (s sorter) Swap(i, j int) { + s.keys[i], s.keys[j] = s.keys[j], s.keys[i] + s.src.Swap(i, j) +} + +// A Lister can be sorted by Collator's Sort method. +type Lister interface { + Len() int + Swap(i, j int) + // Bytes returns the bytes of the text at index i. + Bytes(i int) []byte +} + +// Sort uses sort.Sort to sort the strings represented by x using the rules of c. +func (c *Collator) Sort(x Lister) { + n := x.Len() + c.sorter.init(n) + for i := 0; i < n; i++ { + c.sorter.keys[i] = c.Key(c.sorter.buf, x.Bytes(i)) + } + c.sorter.sort(x) +} + +// SortStrings uses sort.Sort to sort the strings in x using the rules of c. +func (c *Collator) SortStrings(x []string) { + c.sorter.init(len(x)) + for i, s := range x { + c.sorter.keys[i] = c.KeyFromString(c.sorter.buf, s) + } + c.sorter.sort(sort.StringSlice(x)) +} diff --git a/vendor/golang.org/x/text/collate/sort_test.go b/vendor/golang.org/x/text/collate/sort_test.go new file mode 100644 index 0000000..d9e7f31 --- /dev/null +++ b/vendor/golang.org/x/text/collate/sort_test.go @@ -0,0 +1,55 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package collate_test + +import ( + "fmt" + "testing" + + "golang.org/x/text/collate" + "golang.org/x/text/language" +) + +func ExampleCollator_Strings() { + c := collate.New(language.Und) + strings := []string{ + "ad", + "ab", + "äb", + "ac", + } + c.SortStrings(strings) + fmt.Println(strings) + // Output: [ab äb ac ad] +} + +type sorter []string + +func (s sorter) Len() int { + return len(s) +} + +func (s sorter) Swap(i, j int) { + s[j], s[i] = s[i], s[j] +} + +func (s sorter) Bytes(i int) []byte { + return []byte(s[i]) +} + +func TestSort(t *testing.T) { + c := collate.New(language.English) + strings := []string{ + "bcd", + "abc", + "ddd", + } + c.Sort(sorter(strings)) + res := fmt.Sprint(strings) + want := "[abc bcd ddd]" + if res != want { + t.Errorf("found %s; want %s", res, want) + } +} diff --git a/vendor/golang.org/x/text/collate/table_test.go b/vendor/golang.org/x/text/collate/table_test.go new file mode 100644 index 0000000..3a6b12f --- /dev/null +++ b/vendor/golang.org/x/text/collate/table_test.go @@ -0,0 +1,291 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package collate + +import ( + "testing" + + "golang.org/x/text/collate/build" + "golang.org/x/text/internal/colltab" + "golang.org/x/text/unicode/norm" +) + +type ColElems []Weights + +type input struct { + str string + ces [][]int +} + +type check struct { + in string + n int + out ColElems +} + +type tableTest struct { + in []input + chk []check +} + +func w(ce ...int) Weights { + return W(ce...) +} + +var defaults = w(0) + +func pt(p, t int) []int { + return []int{p, defaults.Secondary, t} +} + +func makeTable(in []input) (*Collator, error) { + b := build.NewBuilder() + for _, r := range in { + if e := b.Add([]rune(r.str), r.ces, nil); e != nil { + panic(e) + } + } + t, err := b.Build() + if err != nil { + return nil, err + } + return NewFromTable(t), nil +} + +// modSeq holds a seqeunce of modifiers in increasing order of CCC long enough +// to cause a segment overflow if not handled correctly. The last rune in this +// list has a CCC of 214. +var modSeq = []rune{ + 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 0x05B8, 0x05B9, 0x05BB, + 0x05BC, 0x05BD, 0x05BF, 0x05C1, 0x05C2, 0xFB1E, 0x064B, 0x064C, 0x064D, 0x064E, + 0x064F, 0x0650, 0x0651, 0x0652, 0x0670, 0x0711, 0x0C55, 0x0C56, 0x0E38, 0x0E48, + 0x0EB8, 0x0EC8, 0x0F71, 0x0F72, 0x0F74, 0x0321, 0x1DCE, +} + +var mods []input +var modW = func() ColElems { + ws := ColElems{} + for _, r := range modSeq { + rune := norm.NFC.PropertiesString(string(r)) + ws = append(ws, w(0, int(rune.CCC()))) + mods = append(mods, input{string(r), [][]int{{0, int(rune.CCC())}}}) + } + return ws +}() + +var appendNextTests = []tableTest{ + { // test getWeights + []input{ + {"a", [][]int{{100}}}, + {"b", [][]int{{105}}}, + {"c", [][]int{{110}}}, + {"ß", [][]int{{120}}}, + }, + []check{ + {"a", 1, ColElems{w(100)}}, + {"b", 1, ColElems{w(105)}}, + {"c", 1, ColElems{w(110)}}, + {"d", 1, ColElems{w(0x50064)}}, + {"ab", 1, ColElems{w(100)}}, + {"bc", 1, ColElems{w(105)}}, + {"dd", 1, ColElems{w(0x50064)}}, + {"ß", 2, ColElems{w(120)}}, + }, + }, + { // test expansion + []input{ + {"u", [][]int{{100}}}, + {"U", [][]int{{100}, {0, 25}}}, + {"w", [][]int{{100}, {100}}}, + {"W", [][]int{{100}, {0, 25}, {100}, {0, 25}}}, + }, + []check{ + {"u", 1, ColElems{w(100)}}, + {"U", 1, ColElems{w(100), w(0, 25)}}, + {"w", 1, ColElems{w(100), w(100)}}, + {"W", 1, ColElems{w(100), w(0, 25), w(100), w(0, 25)}}, + }, + }, + { // test decompose + []input{ + {"D", [][]int{pt(104, 8)}}, + {"z", [][]int{pt(130, 8)}}, + {"\u030C", [][]int{{0, 40}}}, // Caron + {"\u01C5", [][]int{pt(104, 9), pt(130, 4), {0, 40, 0x1F}}}, // Dž = D+z+caron + }, + []check{ + {"\u01C5", 2, ColElems{w(pt(104, 9)...), w(pt(130, 4)...), w(0, 40, 0x1F)}}, + }, + }, + { // test basic contraction + []input{ + {"a", [][]int{{100}}}, + {"ab", [][]int{{101}}}, + {"aab", [][]int{{101}, {101}}}, + {"abc", [][]int{{102}}}, + {"b", [][]int{{200}}}, + {"c", [][]int{{300}}}, + {"d", [][]int{{400}}}, + }, + []check{ + {"a", 1, ColElems{w(100)}}, + {"aa", 1, ColElems{w(100)}}, + {"aac", 1, ColElems{w(100)}}, + {"d", 1, ColElems{w(400)}}, + {"ab", 2, ColElems{w(101)}}, + {"abb", 2, ColElems{w(101)}}, + {"aab", 3, ColElems{w(101), w(101)}}, + {"aaba", 3, ColElems{w(101), w(101)}}, + {"abc", 3, ColElems{w(102)}}, + {"abcd", 3, ColElems{w(102)}}, + }, + }, + { // test discontinuous contraction + append(mods, []input{ + // modifiers; secondary weight equals ccc + {"\u0316", [][]int{{0, 220}}}, + {"\u0317", [][]int{{0, 220}, {0, 220}}}, + {"\u302D", [][]int{{0, 222}}}, + {"\u302E", [][]int{{0, 225}}}, // used as starter + {"\u302F", [][]int{{0, 224}}}, // used as starter + {"\u18A9", [][]int{{0, 228}}}, + {"\u0300", [][]int{{0, 230}}}, + {"\u0301", [][]int{{0, 230}}}, + {"\u0315", [][]int{{0, 232}}}, + {"\u031A", [][]int{{0, 232}}}, + {"\u035C", [][]int{{0, 233}}}, + {"\u035F", [][]int{{0, 233}}}, + {"\u035D", [][]int{{0, 234}}}, + {"\u035E", [][]int{{0, 234}}}, + {"\u0345", [][]int{{0, 240}}}, + + // starters + {"a", [][]int{{100}}}, + {"b", [][]int{{200}}}, + {"c", [][]int{{300}}}, + {"\u03B1", [][]int{{900}}}, + {"\x01", [][]int{{0, 0, 0, 0}}}, + + // contractions + {"a\u0300", [][]int{{101}}}, + {"a\u0301", [][]int{{102}}}, + {"a\u035E", [][]int{{110}}}, + {"a\u035Eb\u035E", [][]int{{115}}}, + {"ac\u035Eaca\u035E", [][]int{{116}}}, + {"a\u035Db\u035D", [][]int{{117}}}, + {"a\u0301\u035Db", [][]int{{120}}}, + {"a\u0301\u035F", [][]int{{121}}}, + {"a\u0301\u035Fb", [][]int{{119}}}, + {"\u03B1\u0345", [][]int{{901}, {902}}}, + {"\u302E\u302F", [][]int{{0, 131}, {0, 131}}}, + {"\u302F\u18A9", [][]int{{0, 130}}}, + }...), + []check{ + {"a\x01\u0300", 1, ColElems{w(100)}}, + {"ab", 1, ColElems{w(100)}}, // closing segment + {"a\u0316\u0300b", 5, ColElems{w(101), w(0, 220)}}, // closing segment + {"a\u0316\u0300", 5, ColElems{w(101), w(0, 220)}}, // no closing segment + {"a\u0316\u0300\u035Cb", 5, ColElems{w(101), w(0, 220)}}, // completes before segment end + {"a\u0316\u0300\u035C", 5, ColElems{w(101), w(0, 220)}}, // completes before segment end + + {"a\u0316\u0301b", 5, ColElems{w(102), w(0, 220)}}, // closing segment + {"a\u0316\u0301", 5, ColElems{w(102), w(0, 220)}}, // no closing segment + {"a\u0316\u0301\u035Cb", 5, ColElems{w(102), w(0, 220)}}, // completes before segment end + {"a\u0316\u0301\u035C", 5, ColElems{w(102), w(0, 220)}}, // completes before segment end + + // match blocked by modifier with same ccc + {"a\u0301\u0315\u031A\u035Fb", 3, ColElems{w(102)}}, + + // multiple gaps + {"a\u0301\u035Db", 6, ColElems{w(120)}}, + {"a\u0301\u035F", 5, ColElems{w(121)}}, + {"a\u0301\u035Fb", 6, ColElems{w(119)}}, + {"a\u0316\u0301\u035F", 7, ColElems{w(121), w(0, 220)}}, + {"a\u0301\u0315\u035Fb", 7, ColElems{w(121), w(0, 232)}}, + {"a\u0316\u0301\u0315\u035Db", 5, ColElems{w(102), w(0, 220)}}, + {"a\u0316\u0301\u0315\u035F", 9, ColElems{w(121), w(0, 220), w(0, 232)}}, + {"a\u0316\u0301\u0315\u035Fb", 9, ColElems{w(121), w(0, 220), w(0, 232)}}, + {"a\u0316\u0301\u0315\u035F\u035D", 9, ColElems{w(121), w(0, 220), w(0, 232)}}, + {"a\u0316\u0301\u0315\u035F\u035Db", 9, ColElems{w(121), w(0, 220), w(0, 232)}}, + + // handling of segment overflow + { // just fits within segment + "a" + string(modSeq[:30]) + "\u0301", + 3 + len(string(modSeq[:30])), + append(ColElems{w(102)}, modW[:30]...), + }, + {"a" + string(modSeq[:31]) + "\u0301", 1, ColElems{w(100)}}, // overflow + {"a" + string(modSeq) + "\u0301", 1, ColElems{w(100)}}, + { // just fits within segment with two interstitial runes + "a" + string(modSeq[:28]) + "\u0301\u0315\u035F", + 7 + len(string(modSeq[:28])), + append(append(ColElems{w(121)}, modW[:28]...), w(0, 232)), + }, + { // second half does not fit within segment + "a" + string(modSeq[:29]) + "\u0301\u0315\u035F", + 3 + len(string(modSeq[:29])), + append(ColElems{w(102)}, modW[:29]...), + }, + + // discontinuity can only occur in last normalization segment + {"a\u035Eb\u035E", 6, ColElems{w(115)}}, + {"a\u0316\u035Eb\u035E", 5, ColElems{w(110), w(0, 220)}}, + {"a\u035Db\u035D", 6, ColElems{w(117)}}, + {"a\u0316\u035Db\u035D", 1, ColElems{w(100)}}, + {"a\u035Eb\u0316\u035E", 8, ColElems{w(115), w(0, 220)}}, + {"a\u035Db\u0316\u035D", 8, ColElems{w(117), w(0, 220)}}, + {"ac\u035Eaca\u035E", 9, ColElems{w(116)}}, + {"a\u0316c\u035Eaca\u035E", 1, ColElems{w(100)}}, + {"ac\u035Eac\u0316a\u035E", 1, ColElems{w(100)}}, + + // expanding contraction + {"\u03B1\u0345", 4, ColElems{w(901), w(902)}}, + + // Theoretical possibilities + // contraction within a gap + {"a\u302F\u18A9\u0301", 9, ColElems{w(102), w(0, 130)}}, + // expansion within a gap + {"a\u0317\u0301", 5, ColElems{w(102), w(0, 220), w(0, 220)}}, + // repeating CCC blocks last modifier + {"a\u302E\u302F\u0301", 1, ColElems{w(100)}}, + // The trailing combining characters (with lower CCC) should block the first one. + // TODO: make the following pass. + // {"a\u035E\u0316\u0316", 1, ColElems{w(100)}}, + {"a\u035F\u035Eb", 5, ColElems{w(110), w(0, 233)}}, + // Last combiner should match after normalization. + // TODO: make the following pass. + // {"a\u035D\u0301", 3, ColElems{w(102), w(0, 234)}}, + // The first combiner is blocking the second one as they have the same CCC. + {"a\u035D\u035Eb", 1, ColElems{w(100)}}, + }, + }, +} + +func TestAppendNext(t *testing.T) { + for i, tt := range appendNextTests { + c, err := makeTable(tt.in) + if err != nil { + t.Errorf("%d: error creating table: %v", i, err) + continue + } + for j, chk := range tt.chk { + ws, n := c.t.AppendNext(nil, []byte(chk.in)) + if n != chk.n { + t.Errorf("%d:%d: bytes consumed was %d; want %d", i, j, n, chk.n) + } + out := convertFromWeights(chk.out) + if len(ws) != len(out) { + t.Errorf("%d:%d: len(ws) was %d; want %d (%X vs %X)\n%X", i, j, len(ws), len(out), ws, out, chk.in) + continue + } + for k, w := range ws { + w, _ = colltab.MakeElem(w.Primary(), w.Secondary(), int(w.Tertiary()), 0) + if w != out[k] { + t.Errorf("%d:%d: Weights %d was %X; want %X", i, j, k, w, out[k]) + } + } + } + } +} diff --git a/vendor/golang.org/x/text/collate/tables.go b/vendor/golang.org/x/text/collate/tables.go new file mode 100644 index 0000000..9ec4f3d --- /dev/null +++ b/vendor/golang.org/x/text/collate/tables.go @@ -0,0 +1,73789 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package collate + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "6.2.0" + +// CLDRVersion is the CLDR version from which the tables in this package are derived. +const CLDRVersion = "23" + +var availableLocales = "und,aa,af,ar,as,az,be,bg,bn,bs,bs-Cyrl,ca,cs,cy,da,de-u-co-phonebk,de,dz,ee,el,en,en-US,en-US-u-va-posix,eo,es,et,fa,fa-AF,fi,fi-u-co-standard,fil,fo,fr,fr-CA,gu,ha,haw,he,hi,hr,hu,hy,ig,is,ja,kk,kl,km,kn,ko,kok,ln-u-co-phonetic,ln,lt,lv,mk,ml,mr,mt,my,nb,nn,nso,om,or,pa,pl,ps,ro,ru,se,si,sk,sl,sq,sr,sr-Latn,ssy,sv,sv-u-co-standard,ta,te,th,tn,to,tr,uk,ur,vi,wae,yo,zh,zh-u-co-stroke,zh-Hant-u-co-pinyin,zh-Hant" + +const varTop = 0x30e + +var locales = [...]tableIndex{ + { // und + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // aa + lookupOffset: 0x1c, + valuesOffset: 0x1b4, + }, + { // af + lookupOffset: 0x1d, + valuesOffset: 0x0, + }, + { // ar + lookupOffset: 0x1f, + valuesOffset: 0x0, + }, + { // as + lookupOffset: 0x21, + valuesOffset: 0x0, + }, + { // az + lookupOffset: 0x27, + valuesOffset: 0x1d7, + }, + { // be + lookupOffset: 0x28, + valuesOffset: 0x0, + }, + { // bg + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // bn + lookupOffset: 0x2a, + valuesOffset: 0x0, + }, + { // bs + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // bs-Cyrl + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // ca + lookupOffset: 0x2b, + valuesOffset: 0x1ec, + }, + { // cs + lookupOffset: 0x2d, + valuesOffset: 0x1f0, + }, + { // cy + lookupOffset: 0x15, + valuesOffset: 0x1f5, + }, + { // da + lookupOffset: 0x30, + valuesOffset: 0x1f7, + }, + { // de-u-co-phonebk + lookupOffset: 0x32, + valuesOffset: 0x201, + }, + { // de + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // dz + lookupOffset: 0x34, + valuesOffset: 0x0, + }, + { // ee + lookupOffset: 0x3a, + valuesOffset: 0x20a, + }, + { // el + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // en + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // en-US + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // en-US-u-va-posix + lookupOffset: 0x41, + valuesOffset: 0x219, + }, + { // eo + lookupOffset: 0x42, + valuesOffset: 0x23b, + }, + { // es + lookupOffset: 0x43, + valuesOffset: 0x23f, + }, + { // et + lookupOffset: 0x49, + valuesOffset: 0x242, + }, + { // fa + lookupOffset: 0x4b, + valuesOffset: 0x0, + }, + { // fa-AF + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // fi + lookupOffset: 0x4e, + valuesOffset: 0x25a, + }, + { // fi-u-co-standard + lookupOffset: 0x54, + valuesOffset: 0x265, + }, + { // fil + lookupOffset: 0x43, + valuesOffset: 0x272, + }, + { // fo + lookupOffset: 0x30, + valuesOffset: 0x1f7, + }, + { // fr + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // fr-CA + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // gu + lookupOffset: 0x56, + valuesOffset: 0x0, + }, + { // ha + lookupOffset: 0x57, + valuesOffset: 0x275, + }, + { // haw + lookupOffset: 0x5e, + valuesOffset: 0x27a, + }, + { // he + lookupOffset: 0x5f, + valuesOffset: 0x0, + }, + { // hi + lookupOffset: 0x61, + valuesOffset: 0x0, + }, + { // hr + lookupOffset: 0x63, + valuesOffset: 0x291, + }, + { // hu + lookupOffset: 0x65, + valuesOffset: 0x297, + }, + { // hy + lookupOffset: 0x66, + valuesOffset: 0x0, + }, + { // ig + lookupOffset: 0x68, + valuesOffset: 0x29f, + }, + { // is + lookupOffset: 0x6a, + valuesOffset: 0x2a3, + }, + { // ja + lookupOffset: 0x76, + valuesOffset: 0x0, + }, + { // kk + lookupOffset: 0x77, + valuesOffset: 0x0, + }, + { // kl + lookupOffset: 0x78, + valuesOffset: 0x414, + }, + { // km + lookupOffset: 0x7a, + valuesOffset: 0x0, + }, + { // kn + lookupOffset: 0x7c, + valuesOffset: 0x0, + }, + { // ko + lookupOffset: 0x88, + valuesOffset: 0x0, + }, + { // kok + lookupOffset: 0x8a, + valuesOffset: 0x0, + }, + { // ln-u-co-phonetic + lookupOffset: 0x8b, + valuesOffset: 0x570, + }, + { // ln + lookupOffset: 0x8b, + valuesOffset: 0x0, + }, + { // lt + lookupOffset: 0x91, + valuesOffset: 0x574, + }, + { // lv + lookupOffset: 0x93, + valuesOffset: 0x582, + }, + { // mk + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // ml + lookupOffset: 0x95, + valuesOffset: 0x0, + }, + { // mr + lookupOffset: 0x97, + valuesOffset: 0x0, + }, + { // mt + lookupOffset: 0x9a, + valuesOffset: 0x58a, + }, + { // my + lookupOffset: 0x9c, + valuesOffset: 0x0, + }, + { // nb + lookupOffset: 0x30, + valuesOffset: 0x593, + }, + { // nn + lookupOffset: 0x30, + valuesOffset: 0x593, + }, + { // nso + lookupOffset: 0x9e, + valuesOffset: 0x595, + }, + { // om + lookupOffset: 0x15, + valuesOffset: 0x59b, + }, + { // or + lookupOffset: 0xa0, + valuesOffset: 0x0, + }, + { // pa + lookupOffset: 0xa2, + valuesOffset: 0x0, + }, + { // pl + lookupOffset: 0xa4, + valuesOffset: 0x5a1, + }, + { // ps + lookupOffset: 0xa7, + valuesOffset: 0x0, + }, + { // ro + lookupOffset: 0xa9, + valuesOffset: 0x5b3, + }, + { // ru + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // se + lookupOffset: 0xab, + valuesOffset: 0x5ba, + }, + { // si + lookupOffset: 0xad, + valuesOffset: 0x0, + }, + { // sk + lookupOffset: 0xaf, + valuesOffset: 0x5c7, + }, + { // sl + lookupOffset: 0xb0, + valuesOffset: 0x5cc, + }, + { // sq + lookupOffset: 0xb2, + valuesOffset: 0x5cf, + }, + { // sr + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // sr-Latn + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // ssy + lookupOffset: 0x1c, + valuesOffset: 0x1b4, + }, + { // sv + lookupOffset: 0xb4, + valuesOffset: 0x5d3, + }, + { // sv-u-co-standard + lookupOffset: 0xb6, + valuesOffset: 0x5d9, + }, + { // ta + lookupOffset: 0xb8, + valuesOffset: 0x0, + }, + { // te + lookupOffset: 0xba, + valuesOffset: 0x0, + }, + { // th + lookupOffset: 0xbc, + valuesOffset: 0x0, + }, + { // tn + lookupOffset: 0x9e, + valuesOffset: 0x595, + }, + { // to + lookupOffset: 0xbe, + valuesOffset: 0x5e1, + }, + { // tr + lookupOffset: 0xc4, + valuesOffset: 0x5ed, + }, + { // uk + lookupOffset: 0xc5, + valuesOffset: 0x0, + }, + { // ur + lookupOffset: 0xc7, + valuesOffset: 0x0, + }, + { // vi + lookupOffset: 0xc9, + valuesOffset: 0x5fc, + }, + { // wae + lookupOffset: 0xca, + valuesOffset: 0x610, + }, + { // yo + lookupOffset: 0xcc, + valuesOffset: 0x613, + }, + { // zh + lookupOffset: 0xe6, + valuesOffset: 0x618, + }, + { // zh-u-co-stroke + lookupOffset: 0xff, + valuesOffset: 0x618, + }, + { // zh-Hant-u-co-pinyin + lookupOffset: 0xe6, + valuesOffset: 0x618, + }, + { // zh-Hant + lookupOffset: 0xff, + valuesOffset: 0x618, + }, +} + +// mainExpandElem: 46864 entries, 187456 bytes +var mainExpandElem = [46864]uint32{ + // Block 0, offset 0x0 + 0x00000002, 0xAE604702, 0xAE603202, 0x00000002, 0xA000A51A, 0xA000BA1A, + 0x00000002, 0xA000A91A, 0xA000BA1A, 0x00000002, 0xA000AD1A, 0xA000BA1A, + 0x00000002, 0xA000B21A, 0xA000BA1A, 0x00000002, 0xA000B61A, 0xA000BA1A, + 0x00000002, 0xA000BA1A, 0xA000D11A, 0x00000004, 0x0003F484, 0x0029CE84, + 0x0029CC84, 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, 0x0029CE84, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, 0x0029D084, 0x0003F69F, + 0x00000004, 0x0003F484, 0x0029CE84, 0x0029D284, 0x0003F69F, 0x00000004, + 0x0003F484, 0x0029CE84, 0x0029D484, 0x0003F69F, 0x00000004, 0x0003F484, + 0x0029CE84, 0x0029D684, 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, + 0x0029D884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, 0x0029DA84, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, + // Block 1, offset 0x40 + 0x0029DC84, 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, 0x0029DE84, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0029D084, 0x0029CC84, 0x0003F69F, + 0x00000004, 0x0003F484, 0x0062AC84, 0x0063A884, 0x0003F69F, 0x00000004, + 0x0003F484, 0x0062B084, 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, + 0x0062B284, 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062B684, + 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062B884, 0x0063A884, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0062BA84, 0x0063A884, 0x0003F69F, + 0x00000004, 0x0003F484, 0x0062BE84, 0x0063A884, 0x0003F69F, 0x00000004, + 0x0003F484, 0x0062C284, 0x0063A884, 0x0003F69F, 0x00000007, 0x0003F484, + 0x0062C284, 0x0063B884, 0x0062C484, 0x0063B084, 0x00646A84, 0x0003F69F, + 0x00000006, 0x0003F484, 0x0062C284, 0x0063B884, + // Block 2, offset 0x80 + 0x0062D084, 0x0063C284, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062C484, + 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062C484, 0x0063C284, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0062C884, 0x0063A884, 0x0003F69F, + 0x00000004, 0x0003F484, 0x0062CA84, 0x0063A884, 0x0003F69F, 0x00000004, + 0x0003F484, 0x0062CC84, 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, + 0x0062CE84, 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062D084, + 0x0063A884, 0x0003F69F, 0x00000004, 0x00050E84, 0x00050E84, 0x00050E84, + 0x00050E9F, 0x00000002, 0x40062C20, 0xAE603202, 0x00000002, 0x40062C20, + 0xAE603502, 0x00000002, 0x40062C20, 0xAE604502, 0x00000002, 0x40063620, + 0xAE603202, 0x00000002, 0x40063620, 0xAE603502, 0x00000002, 0x40063620, + 0xAE604502, 0x00000002, 0x40063820, 0xAE603202, + // Block 3, offset 0xc0 + 0x00000002, 0x40063820, 0xAE603502, 0x00000002, 0x40063820, 0xAE604502, + 0x00000002, 0x40084420, 0xA0105402, 0x00000002, 0x40084620, 0xA0105402, + 0x00000002, 0x40084C20, 0xA0105402, 0x00000002, 0x4008B820, 0xA0105402, + 0x00000002, 0x4008BC20, 0xA0105402, 0x00000002, 0x4008C020, 0xA0105402, + 0x00000002, 0x40091E20, 0xA0105402, 0x00000002, 0x40092620, 0xA0105402, + 0x00000002, 0x40092A20, 0xA0105402, 0x00000002, 0x40094020, 0xA0105402, + 0x00000002, 0x40094220, 0xA0105402, 0x00000002, 0x40094420, 0xA0105402, + 0x00000002, 0x40097820, 0xA0105402, 0x00000002, 0x40097A20, 0xA0105402, + 0x00000004, 0x00098484, 0x00098484, 0x00098484, 0x0009849F, 0x00000002, + 0x40099E20, 0xA0105402, 0x00000002, 0x4009AA20, 0xA0105402, 0x00000002, + 0x4009AC20, 0xA0105402, 0x00000002, 0x4009B020, + // Block 4, offset 0x100 + 0xA0105402, 0x00000002, 0x4009B820, 0xA0105402, 0x00000002, 0x4009DE20, + 0xA0105402, 0x00000002, 0x4009E220, 0xA0105402, 0x00000002, 0x4009E420, + 0xA0105402, 0x00000002, 0x4009F420, 0xA0105402, 0x00000002, 0x4009F620, + 0xA0105402, 0x00000002, 0x4009F820, 0xA0105402, 0x00000002, 0x4009FA20, + 0xA0105402, 0x00000002, 0x4009FC20, 0xA0105402, 0x00000002, 0x4009FE20, + 0xA0105402, 0x00000002, 0x400A0020, 0xA0105402, 0x00000002, 0x400A0220, + 0xA0105402, 0x00000002, 0x400A0820, 0xA0105402, 0x00000002, 0x400A0A20, + 0xA0105402, 0x00000002, 0x400A0C20, 0xA0105402, 0x00000002, 0x400A0E20, + 0xA0105402, 0x00000002, 0x400A1E20, 0xA0105402, 0x00000002, 0x400A2020, + 0xA0105402, 0x00000002, 0x400A4020, 0xA0105402, 0x00000002, 0x400A4C20, + 0xA0105402, 0x00000002, 0x400A4E20, 0xA0105402, + // Block 5, offset 0x140 + 0x00000002, 0x400A5220, 0xA0105402, 0x00000002, 0x400A5820, 0xA0105402, + 0x00000002, 0x400A5A20, 0xA0105402, 0x00000002, 0x400A5C20, 0xA0105402, + 0x00000002, 0x400A5E20, 0xA0105402, 0x00000002, 0x40164620, 0xA0105402, + 0x00000002, 0x4027CE20, 0xA0012802, 0x00000002, 0x4027D020, 0xA0012802, + 0x00000002, 0x4027D420, 0xA0812802, 0x00000002, 0x4027D820, 0xA0812802, + 0x00000002, 0x4029CC20, 0xA0013F02, 0x00000002, 0x4029CC20, 0xA0014002, + 0x00000002, 0x4029CC20, 0xA0014202, 0x00000002, 0x4029CC20, 0xA0014402, + 0x00000002, 0x4029CC20, 0xA0014502, 0x00000002, 0x4029CC20, 0xA0014602, + 0x00000002, 0x4029CC20, 0xA0014702, 0x00000002, 0x4029CC20, 0xA0014802, + 0x00000002, 0x4029CC20, 0xA0014902, 0x00000002, 0x4029CC20, 0xA0014A02, + 0x00000002, 0x4029CC20, 0xA0014B02, 0x00000002, + // Block 6, offset 0x180 + 0x4029CC20, 0xA0014B02, 0x00000002, 0x4029CC20, 0xA0014C02, 0x00000002, + 0x4029CC20, 0xA0014D02, 0x00000002, 0x4029CC20, 0xA0014E02, 0x00000002, + 0x4029CC20, 0xA0014F02, 0x00000002, 0x4029CC20, 0xA0015002, 0x00000002, + 0x4029CC20, 0xA0015102, 0x00000002, 0x4029CC20, 0xA0015202, 0x00000002, + 0x4029CC20, 0xA0015302, 0x00000002, 0x4029CC20, 0xA0015402, 0x00000002, + 0x4029CC20, 0xA0015502, 0x00000002, 0x4029CC20, 0xA0015602, 0x00000002, + 0x0029CC84, 0xA0015604, 0x00000002, 0x4029CC20, 0xA0015702, 0x00000002, + 0x4029CC20, 0xA0015802, 0x00000002, 0x4029CC20, 0xA0015902, 0x00000002, + 0x4029CC20, 0xA0015A02, 0x00000002, 0x4029CC20, 0xA0015B02, 0x00000002, + 0x4029CC20, 0xA0015C02, 0x00000002, 0x4029CC20, 0xA0015D02, 0x00000002, + 0x4029CC20, 0xA0015E02, 0x00000002, 0x4029CC20, + // Block 7, offset 0x1c0 + 0xA0015F02, 0x00000002, 0x4029CC20, 0xA0016002, 0x00000002, 0x4029CC20, + 0xA0016102, 0x00000002, 0x4029CC20, 0xA0016202, 0x00000002, 0x4029CC20, + 0xA0016302, 0x00000002, 0x4029CC20, 0xA0016402, 0x00000002, 0x4029CC20, + 0xA0016502, 0x00000002, 0x4029CC20, 0xA0016602, 0x00000002, 0x4029CC20, + 0xA0016802, 0x00000002, 0x4029CC20, 0xA0017202, 0x00000002, 0x4029CC20, + 0xA0017302, 0x00000002, 0x4029CC20, 0xA0017402, 0x00000003, 0x0029CC9E, + 0x0009589E, 0x0029D29E, 0x00000002, 0x4029CE20, 0xA0013F02, 0x00000002, + 0x4029CE20, 0xA0014002, 0x00000002, 0x4029CE20, 0xA0014102, 0x00000002, + 0x4029CE20, 0xA0014202, 0x00000002, 0x4029CE20, 0xA0014302, 0x00000002, + 0x4029CE20, 0xA0014402, 0x00000002, 0x4029CE20, 0xA0014502, 0x00000002, + 0x4029CE20, 0xA0014602, 0x00000002, 0x4029CE20, + // Block 8, offset 0x200 + 0xA0014702, 0x00000002, 0x4029CE20, 0xA0014802, 0x00000002, 0x4029CE20, + 0xA0014902, 0x00000002, 0x4029CE20, 0xA0014A02, 0x00000002, 0x4029CE20, + 0xA0014B02, 0x00000002, 0x4029CE20, 0xA0014B02, 0x00000002, 0x4029CE20, + 0xA0014B02, 0x00000002, 0x4029CE20, 0xA0014C02, 0x00000002, 0x4029CE20, + 0xA0014D02, 0x00000002, 0x4029CE20, 0xA0014E02, 0x00000002, 0x4029CE20, + 0xA0014F02, 0x00000002, 0x4029CE20, 0xA0015002, 0x00000002, 0x4029CE20, + 0xA0015102, 0x00000002, 0x4029CE20, 0xA0015102, 0x00000002, 0x4029CE20, + 0xA0015202, 0x00000002, 0x4029CE20, 0xA0015302, 0x00000002, 0x4029CE20, + 0xA0015402, 0x00000002, 0x4029CE20, 0xA0015502, 0x00000002, 0x4029CE20, + 0xA0015602, 0x00000002, 0x0029CE84, 0xA0015604, 0x00000002, 0x4029CE20, + 0xA0015702, 0x00000002, 0x4029CE20, 0xA0015802, + // Block 9, offset 0x240 + 0x00000002, 0x4029CE20, 0xA0015902, 0x00000002, 0x4029CE20, 0xA0015A02, + 0x00000002, 0x4029CE20, 0xA0015B02, 0x00000002, 0x4029CE20, 0xA0015C02, + 0x00000002, 0x4029CE20, 0xA0015D02, 0x00000002, 0x4029CE20, 0xA0015E02, + 0x00000002, 0x4029CE20, 0xA0015F02, 0x00000002, 0x4029CE20, 0xA0016002, + 0x00000002, 0x4029CE20, 0xA0016102, 0x00000002, 0x4029CE20, 0xA0016202, + 0x00000002, 0x4029CE20, 0xA0016302, 0x00000002, 0x4029CE20, 0xA0016402, + 0x00000002, 0x4029CE20, 0xA0016502, 0x00000002, 0x4029CE20, 0xA0016602, + 0x00000002, 0x4029CE20, 0xA0016702, 0x00000002, 0x4029CE20, 0xA0016802, + 0x00000002, 0x4029CE20, 0xA0016802, 0x00000002, 0x4029CE20, 0xA0016802, + 0x00000002, 0x4029CE20, 0xA0016802, 0x00000002, 0x4029CE20, 0xA0016A02, + 0x00000002, 0x4029CE20, 0xA0016B02, 0x00000002, + // Block 10, offset 0x280 + 0x4029CE20, 0xA0016C02, 0x00000002, 0x4029CE20, 0xA0016C02, 0x00000002, + 0x4029CE20, 0xA0016C02, 0x00000002, 0x4029CE20, 0xA0016C02, 0x00000002, + 0x4029CE20, 0xA0016C02, 0x00000002, 0x4029CE20, 0xA0016C02, 0x00000002, + 0x4029CE20, 0xA0016D02, 0x00000002, 0x4029CE20, 0xA0016E02, 0x00000002, + 0x4029CE20, 0xA0016F02, 0x00000002, 0x4029CE20, 0xA0017002, 0x00000002, + 0x4029CE20, 0xA0017102, 0x00000002, 0x4029CE20, 0xA0017202, 0x00000002, + 0x4029CE20, 0xA0017302, 0x00000002, 0x4029CE20, 0xA0017402, 0x00000002, + 0x4029CE20, 0xA0017502, 0x00000002, 0x4029CE20, 0xA0017602, 0x00000002, + 0x4029CE20, 0xA0017702, 0x00000004, 0x0029CE9E, 0x0009589E, 0x0029CE9E, + 0x0029CC9E, 0x00000003, 0x0029CE9E, 0x0009589E, 0x0029D09E, 0x00000003, + 0x0029CE9E, 0x0009589E, 0x0029D29E, 0x00000003, + // Block 11, offset 0x2c0 + 0x0029CE9E, 0x0009589E, 0x0029D49E, 0x00000003, 0x0029CE9E, 0x0009589E, + 0x0029D69E, 0x00000003, 0x0029CE9E, 0x0009589E, 0x0029D89E, 0x00000003, + 0x0029CE9E, 0x0009589E, 0x0029DA9E, 0x00000003, 0x0029CE9E, 0x0009589E, + 0x0029DC9E, 0x00000003, 0x0029CE9E, 0x0009589E, 0x0029DE9E, 0x00000002, + 0x0029CE86, 0x0029CC86, 0x00000002, 0x0029CE86, 0x0029CC86, 0x00000002, + 0x0029CE86, 0x0029CC86, 0x00000002, 0x0029CE86, 0x0029CC86, 0x00000002, + 0x0029CE86, 0x0029CC86, 0x00000002, 0x0029CE86, 0x0029CE86, 0x00000002, + 0x0029CE86, 0x0029D086, 0x00000002, 0x0029CE86, 0x0029D286, 0x00000002, + 0x0029CE86, 0x0029D486, 0x00000002, 0x0029CE86, 0x0029D686, 0x00000002, + 0x0029CE86, 0x0029D886, 0x00000002, 0x0029CE86, 0x0029DA86, 0x00000002, + 0x0029CE86, 0x0029DC86, 0x00000002, 0x0029CE86, + // Block 12, offset 0x300 + 0x0029DE86, 0x00000002, 0x4029D020, 0xA0013F02, 0x00000002, 0x4029D020, + 0xA0014002, 0x00000002, 0x4029D020, 0xA0014102, 0x00000002, 0x4029D020, + 0xA0014202, 0x00000002, 0x4029D020, 0xA0014302, 0x00000002, 0x4029D020, + 0xA0014402, 0x00000002, 0x4029D020, 0xA0014502, 0x00000002, 0x4029D020, + 0xA0014602, 0x00000002, 0x4029D020, 0xA0014702, 0x00000002, 0x4029D020, + 0xA0014802, 0x00000002, 0x4029D020, 0xA0014902, 0x00000002, 0x4029D020, + 0xA0014A02, 0x00000002, 0x4029D020, 0xA0014B02, 0x00000002, 0x4029D020, + 0xA0014B02, 0x00000002, 0x4029D020, 0xA0014B02, 0x00000002, 0x4029D020, + 0xA0014C02, 0x00000002, 0x4029D020, 0xA0014D02, 0x00000002, 0x4029D020, + 0xA0014E02, 0x00000002, 0x4029D020, 0xA0014F02, 0x00000002, 0x4029D020, + 0xA0015002, 0x00000002, 0x4029D020, 0xA0015102, + // Block 13, offset 0x340 + 0x00000002, 0x4029D020, 0xA0015202, 0x00000002, 0x4029D020, 0xA0015302, + 0x00000002, 0x4029D020, 0xA0015402, 0x00000002, 0x4029D020, 0xA0015502, + 0x00000002, 0x4029D020, 0xA0015602, 0x00000002, 0x0029D084, 0xA0015604, + 0x00000002, 0x4029D020, 0xA0015702, 0x00000002, 0x4029D020, 0xA0015802, + 0x00000002, 0x4029D020, 0xA0015902, 0x00000002, 0x4029D020, 0xA0015A02, + 0x00000002, 0x4029D020, 0xA0015B02, 0x00000002, 0x4029D020, 0xA0015C02, + 0x00000002, 0x4029D020, 0xA0015D02, 0x00000002, 0x4029D020, 0xA0015E02, + 0x00000002, 0x4029D020, 0xA0015F02, 0x00000002, 0x4029D020, 0xA0016002, + 0x00000002, 0x4029D020, 0xA0016102, 0x00000002, 0x4029D020, 0xA0016202, + 0x00000002, 0x4029D020, 0xA0016302, 0x00000002, 0x4029D020, 0xA0016402, + 0x00000002, 0x4029D020, 0xA0016502, 0x00000002, + // Block 14, offset 0x380 + 0x4029D020, 0xA0016602, 0x00000002, 0x4029D020, 0xA0016702, 0x00000002, + 0x4029D020, 0xA0016802, 0x00000002, 0x4029D020, 0xA0016802, 0x00000002, + 0x4029D020, 0xA0016802, 0x00000002, 0x4029D020, 0xA0016802, 0x00000002, + 0x4029D020, 0xA0016B02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016C02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016C02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016C02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016C02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016E02, 0x00000002, 0x4029D020, 0xA0016F02, 0x00000002, + 0x4029D020, 0xA0017002, 0x00000002, 0x4029D020, 0xA0017102, 0x00000002, + 0x4029D020, 0xA0017202, 0x00000002, 0x4029D020, + // Block 15, offset 0x3c0 + 0xA0017302, 0x00000002, 0x4029D020, 0xA0017402, 0x00000002, 0x4029D020, + 0xA0017502, 0x00000002, 0x4029D020, 0xA0017602, 0x00000002, 0x4029D020, + 0xA0017702, 0x00000003, 0x0029D09E, 0x0009589E, 0x0029D29E, 0x00000003, + 0x0029D09E, 0x0009589E, 0x0029D69E, 0x00000002, 0x0029D086, 0x0029CC86, + 0x00000002, 0x0029D086, 0x0029CC86, 0x00000002, 0x4029D220, 0xA0013F02, + 0x00000002, 0x4029D220, 0xA0014002, 0x00000002, 0x4029D220, 0xA0014102, + 0x00000002, 0x4029D220, 0xA0014202, 0x00000002, 0x4029D220, 0xA0014302, + 0x00000002, 0x4029D220, 0xA0014402, 0x00000002, 0x4029D220, 0xA0014502, + 0x00000002, 0x4029D220, 0xA0014602, 0x00000002, 0x4029D220, 0xA0014702, + 0x00000002, 0x4029D220, 0xA0014802, 0x00000002, 0x4029D220, 0xA0014902, + 0x00000002, 0x4029D220, 0xA0014A02, 0x00000002, + // Block 16, offset 0x400 + 0x4029D220, 0xA0014B02, 0x00000002, 0x4029D220, 0xA0014B02, 0x00000002, + 0x4029D220, 0xA0014B02, 0x00000002, 0x4029D220, 0xA0014C02, 0x00000002, + 0x4029D220, 0xA0014D02, 0x00000002, 0x4029D220, 0xA0014E02, 0x00000002, + 0x4029D220, 0xA0014F02, 0x00000002, 0x4029D220, 0xA0015002, 0x00000002, + 0x4029D220, 0xA0015102, 0x00000002, 0x4029D220, 0xA0015202, 0x00000002, + 0x4029D220, 0xA0015302, 0x00000002, 0x4029D220, 0xA0015402, 0x00000002, + 0x4029D220, 0xA0015502, 0x00000002, 0x4029D220, 0xA0015602, 0x00000002, + 0x0029D284, 0xA0015604, 0x00000002, 0x4029D220, 0xA0015702, 0x00000002, + 0x4029D220, 0xA0015802, 0x00000002, 0x4029D220, 0xA0015902, 0x00000002, + 0x4029D220, 0xA0015A02, 0x00000002, 0x4029D220, 0xA0015B02, 0x00000002, + 0x4029D220, 0xA0015C02, 0x00000002, 0x4029D220, + // Block 17, offset 0x440 + 0xA0015D02, 0x00000002, 0x4029D220, 0xA0015E02, 0x00000002, 0x4029D220, + 0xA0015F02, 0x00000002, 0x4029D220, 0xA0016002, 0x00000002, 0x4029D220, + 0xA0016102, 0x00000002, 0x4029D220, 0xA0016202, 0x00000002, 0x4029D220, + 0xA0016302, 0x00000002, 0x4029D220, 0xA0016402, 0x00000002, 0x4029D220, + 0xA0016502, 0x00000002, 0x4029D220, 0xA0016602, 0x00000002, 0x4029D220, + 0xA0016702, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, + // Block 18, offset 0x480 + 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, + 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016E02, + 0x00000002, 0x4029D220, 0xA0016F02, 0x00000002, 0x4029D220, 0xA0017002, + 0x00000002, 0x4029D220, 0xA0017102, 0x00000002, 0x4029D220, 0xA0017202, + 0x00000002, 0x4029D220, 0xA0017302, 0x00000002, 0x4029D220, 0xA0017402, + 0x00000002, 0x4029D220, 0xA0017502, 0x00000002, 0x4029D220, 0xA0017602, + 0x00000002, 0x4029D220, 0xA0017702, 0x00000003, 0x0029D29E, 0x0009589E, + 0x0029D49E, 0x00000003, 0x0029D29E, 0x0009589E, 0x0029D69E, 0x00000003, + 0x0029D29E, 0x0009589E, 0x0029DC9E, 0x00000002, 0x0029D286, 0x0029CC86, + 0x00000002, 0x4029D420, 0xA0013F02, 0x00000002, 0x4029D420, 0xA0014002, + 0x00000002, 0x4029D420, 0xA0014102, 0x00000002, + // Block 19, offset 0x4c0 + 0x4029D420, 0xA0014202, 0x00000002, 0x4029D420, 0xA0014302, 0x00000002, + 0x4029D420, 0xA0014402, 0x00000002, 0x4029D420, 0xA0014502, 0x00000002, + 0x4029D420, 0xA0014602, 0x00000002, 0x4029D420, 0xA0014702, 0x00000002, + 0x4029D420, 0xA0014802, 0x00000002, 0x4029D420, 0xA0014902, 0x00000002, + 0x4029D420, 0xA0014A02, 0x00000002, 0x4029D420, 0xA0014B02, 0x00000002, + 0x4029D420, 0xA0014C02, 0x00000002, 0x4029D420, 0xA0014D02, 0x00000002, + 0x4029D420, 0xA0014E02, 0x00000002, 0x4029D420, 0xA0014F02, 0x00000002, + 0x4029D420, 0xA0015002, 0x00000002, 0x4029D420, 0xA0015102, 0x00000002, + 0x4029D420, 0xA0015202, 0x00000002, 0x4029D420, 0xA0015302, 0x00000002, + 0x4029D420, 0xA0015402, 0x00000002, 0x4029D420, 0xA0015502, 0x00000002, + 0x4029D420, 0xA0015602, 0x00000002, 0x0029D484, + // Block 20, offset 0x500 + 0xA0015604, 0x00000002, 0x4029D420, 0xA0015702, 0x00000002, 0x4029D420, + 0xA0015802, 0x00000002, 0x4029D420, 0xA0015902, 0x00000002, 0x4029D420, + 0xA0015A02, 0x00000002, 0x4029D420, 0xA0015B02, 0x00000002, 0x4029D420, + 0xA0015C02, 0x00000002, 0x4029D420, 0xA0015D02, 0x00000002, 0x4029D420, + 0xA0015E02, 0x00000002, 0x4029D420, 0xA0015F02, 0x00000002, 0x4029D420, + 0xA0016002, 0x00000002, 0x4029D420, 0xA0016102, 0x00000002, 0x4029D420, + 0xA0016202, 0x00000002, 0x4029D420, 0xA0016302, 0x00000002, 0x4029D420, + 0xA0016402, 0x00000002, 0x4029D420, 0xA0016502, 0x00000002, 0x4029D420, + 0xA0016602, 0x00000002, 0x4029D420, 0xA0016702, 0x00000002, 0x4029D420, + 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, + 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + // Block 21, offset 0x540 + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0017002, + 0x00000002, 0x4029D420, 0xA0017102, 0x00000002, 0x4029D420, 0xA0017202, + 0x00000002, 0x4029D420, 0xA0017302, 0x00000002, 0x4029D420, 0xA0017402, + 0x00000002, 0x4029D420, 0xA0017502, 0x00000002, 0x4029D420, 0xA0017602, + 0x00000002, 0x4029D420, 0xA0017702, 0x00000003, 0x0029D49E, 0x0009589E, + 0x0029D69E, 0x00000002, 0x0029D486, 0x0029CC86, + // Block 22, offset 0x580 + 0x00000002, 0x4029D620, 0xA0013F02, 0x00000002, 0x4029D620, 0xA0014002, + 0x00000002, 0x4029D620, 0xA0014102, 0x00000002, 0x4029D620, 0xA0014202, + 0x00000002, 0x4029D620, 0xA0014302, 0x00000002, 0x4029D620, 0xA0014402, + 0x00000002, 0x4029D620, 0xA0014502, 0x00000002, 0x4029D620, 0xA0014602, + 0x00000002, 0x4029D620, 0xA0014702, 0x00000002, 0x4029D620, 0xA0014802, + 0x00000002, 0x4029D620, 0xA0014902, 0x00000002, 0x4029D620, 0xA0014A02, + 0x00000002, 0x4029D620, 0xA0014B02, 0x00000002, 0x4029D620, 0xA0014C02, + 0x00000002, 0x4029D620, 0xA0014D02, 0x00000002, 0x4029D620, 0xA0014E02, + 0x00000002, 0x4029D620, 0xA0014F02, 0x00000002, 0x4029D620, 0xA0015002, + 0x00000002, 0x4029D620, 0xA0015102, 0x00000002, 0x4029D620, 0xA0015202, + 0x00000002, 0x4029D620, 0xA0015302, 0x00000002, + // Block 23, offset 0x5c0 + 0x4029D620, 0xA0015402, 0x00000002, 0x4029D620, 0xA0015502, 0x00000002, + 0x4029D620, 0xA0015602, 0x00000002, 0x0029D684, 0xA0015604, 0x00000002, + 0x4029D620, 0xA0015702, 0x00000002, 0x4029D620, 0xA0015802, 0x00000002, + 0x4029D620, 0xA0015902, 0x00000002, 0x4029D620, 0xA0015A02, 0x00000002, + 0x4029D620, 0xA0015B02, 0x00000002, 0x4029D620, 0xA0015C02, 0x00000002, + 0x4029D620, 0xA0015D02, 0x00000002, 0x4029D620, 0xA0015E02, 0x00000002, + 0x4029D620, 0xA0015F02, 0x00000002, 0x4029D620, 0xA0016002, 0x00000002, + 0x4029D620, 0xA0016102, 0x00000002, 0x4029D620, 0xA0016202, 0x00000002, + 0x4029D620, 0xA0016302, 0x00000002, 0x4029D620, 0xA0016402, 0x00000002, + 0x4029D620, 0xA0016502, 0x00000002, 0x4029D620, 0xA0016602, 0x00000002, + 0x4029D620, 0xA0016702, 0x00000002, 0x4029D620, + // Block 24, offset 0x600 + 0xA0016802, 0x00000002, 0x4029D620, 0xA0016802, 0x00000002, 0x4029D620, + 0xA0016802, 0x00000002, 0x4029D620, 0xA0016802, 0x00000002, 0x4029D620, + 0xA0016802, 0x00000002, 0x4029D620, 0xA0016A02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0017202, 0x00000002, 0x4029D620, + 0xA0017302, 0x00000002, 0x4029D620, 0xA0017402, 0x00000002, 0x4029D620, + 0xA0017502, 0x00000002, 0x4029D620, 0xA0017702, + // Block 25, offset 0x640 + 0x00000003, 0x0029D69E, 0x0009589E, 0x0029D89E, 0x00000003, 0x0029D69E, + 0x0009589E, 0x0029DC9E, 0x00000002, 0x0029D686, 0x0029CC86, 0x00000002, + 0x4029D820, 0xA0013F02, 0x00000002, 0x4029D820, 0xA0014002, 0x00000002, + 0x4029D820, 0xA0014102, 0x00000002, 0x4029D820, 0xA0014202, 0x00000002, + 0x4029D820, 0xA0014302, 0x00000002, 0x4029D820, 0xA0014402, 0x00000002, + 0x4029D820, 0xA0014502, 0x00000002, 0x4029D820, 0xA0014602, 0x00000002, + 0x4029D820, 0xA0014702, 0x00000002, 0x4029D820, 0xA0014802, 0x00000002, + 0x4029D820, 0xA0014902, 0x00000002, 0x4029D820, 0xA0014A02, 0x00000002, + 0x4029D820, 0xA0014B02, 0x00000002, 0x4029D820, 0xA0014C02, 0x00000002, + 0x4029D820, 0xA0014D02, 0x00000002, 0x4029D820, 0xA0014E02, 0x00000002, + 0x4029D820, 0xA0014F02, 0x00000002, 0x4029D820, + // Block 26, offset 0x680 + 0xA0015002, 0x00000002, 0x4029D820, 0xA0015102, 0x00000002, 0x4029D820, + 0xA0015202, 0x00000002, 0x4029D820, 0xA0015302, 0x00000002, 0x4029D820, + 0xA0015402, 0x00000002, 0x4029D820, 0xA0015502, 0x00000002, 0x4029D820, + 0xA0015602, 0x00000002, 0x0029D884, 0xA0015604, 0x00000002, 0x4029D820, + 0xA0015702, 0x00000002, 0x4029D820, 0xA0015802, 0x00000002, 0x4029D820, + 0xA0015902, 0x00000002, 0x4029D820, 0xA0015A02, 0x00000002, 0x4029D820, + 0xA0015B02, 0x00000002, 0x4029D820, 0xA0015C02, 0x00000002, 0x4029D820, + 0xA0015D02, 0x00000002, 0x4029D820, 0xA0015E02, 0x00000002, 0x4029D820, + 0xA0015F02, 0x00000002, 0x4029D820, 0xA0016002, 0x00000002, 0x4029D820, + 0xA0016102, 0x00000002, 0x4029D820, 0xA0016202, 0x00000002, 0x4029D820, + 0xA0016302, 0x00000002, 0x4029D820, 0xA0016402, + // Block 27, offset 0x6c0 + 0x00000002, 0x4029D820, 0xA0016502, 0x00000002, 0x4029D820, 0xA0016602, + 0x00000002, 0x4029D820, 0xA0016702, 0x00000002, 0x4029D820, 0xA0016902, + 0x00000002, 0x4029D820, 0xA0016C02, 0x00000002, 0x4029D820, 0xA0016C02, + 0x00000002, 0x4029D820, 0xA0016C02, 0x00000002, 0x4029D820, 0xA0016C02, + 0x00000002, 0x4029D820, 0xA0016C02, 0x00000002, 0x4029D820, 0xA0016C02, + 0x00000002, 0x4029D820, 0xA0016C02, 0x00000002, 0x4029D820, 0xA0017202, + 0x00000002, 0x4029D820, 0xA0017302, 0x00000002, 0x4029D820, 0xA0017402, + 0x00000002, 0x4029D820, 0xA0017502, 0x00000002, 0x4029D820, 0xA0017702, + 0x00000002, 0x0029D886, 0x0029CC86, 0x00000002, 0x4029DA20, 0xA0013F02, + 0x00000002, 0x4029DA20, 0xA0014002, 0x00000002, 0x4029DA20, 0xA0014102, + 0x00000002, 0x4029DA20, 0xA0014202, 0x00000002, + // Block 28, offset 0x700 + 0x4029DA20, 0xA0014302, 0x00000002, 0x4029DA20, 0xA0014402, 0x00000002, + 0x4029DA20, 0xA0014502, 0x00000002, 0x4029DA20, 0xA0014602, 0x00000002, + 0x4029DA20, 0xA0014702, 0x00000002, 0x4029DA20, 0xA0014802, 0x00000002, + 0x4029DA20, 0xA0014902, 0x00000002, 0x4029DA20, 0xA0014A02, 0x00000002, + 0x4029DA20, 0xA0014B02, 0x00000002, 0x4029DA20, 0xA0014C02, 0x00000002, + 0x4029DA20, 0xA0014D02, 0x00000002, 0x4029DA20, 0xA0014E02, 0x00000002, + 0x4029DA20, 0xA0014F02, 0x00000002, 0x4029DA20, 0xA0015002, 0x00000002, + 0x4029DA20, 0xA0015102, 0x00000002, 0x4029DA20, 0xA0015202, 0x00000002, + 0x4029DA20, 0xA0015302, 0x00000002, 0x4029DA20, 0xA0015402, 0x00000002, + 0x4029DA20, 0xA0015502, 0x00000002, 0x4029DA20, 0xA0015602, 0x00000002, + 0x0029DA84, 0xA0015604, 0x00000002, 0x4029DA20, + // Block 29, offset 0x740 + 0xA0015702, 0x00000002, 0x4029DA20, 0xA0015802, 0x00000002, 0x4029DA20, + 0xA0015902, 0x00000002, 0x4029DA20, 0xA0015A02, 0x00000002, 0x4029DA20, + 0xA0015B02, 0x00000002, 0x4029DA20, 0xA0015C02, 0x00000002, 0x4029DA20, + 0xA0015D02, 0x00000002, 0x4029DA20, 0xA0015E02, 0x00000002, 0x4029DA20, + 0xA0015F02, 0x00000002, 0x4029DA20, 0xA0016002, 0x00000002, 0x4029DA20, + 0xA0016102, 0x00000002, 0x4029DA20, 0xA0016202, 0x00000002, 0x4029DA20, + 0xA0016302, 0x00000002, 0x4029DA20, 0xA0016402, 0x00000002, 0x4029DA20, + 0xA0016502, 0x00000002, 0x4029DA20, 0xA0016602, 0x00000002, 0x4029DA20, + 0xA0016702, 0x00000002, 0x4029DA20, 0xA0016C02, 0x00000002, 0x4029DA20, + 0xA0016C02, 0x00000002, 0x4029DA20, 0xA0016C02, 0x00000002, 0x4029DA20, + 0xA0016C02, 0x00000002, 0x4029DA20, 0xA0016C02, + // Block 30, offset 0x780 + 0x00000002, 0x4029DA20, 0xA0016C02, 0x00000002, 0x4029DA20, 0xA0016C02, + 0x00000002, 0x4029DA20, 0xA0016C02, 0x00000002, 0x4029DA20, 0xA0017202, + 0x00000002, 0x4029DA20, 0xA0017302, 0x00000002, 0x4029DA20, 0xA0017402, + 0x00000002, 0x4029DA20, 0xA0017502, 0x00000002, 0x4029DA20, 0xA0017702, + 0x00000003, 0x0029DA9E, 0x0009589E, 0x0029DC9E, 0x00000002, 0x0029DA86, + 0x0029CC86, 0x00000002, 0x4029DC20, 0xA0013F02, 0x00000002, 0x4029DC20, + 0xA0014002, 0x00000002, 0x4029DC20, 0xA0014102, 0x00000002, 0x4029DC20, + 0xA0014202, 0x00000002, 0x4029DC20, 0xA0014302, 0x00000002, 0x4029DC20, + 0xA0014402, 0x00000002, 0x4029DC20, 0xA0014502, 0x00000002, 0x4029DC20, + 0xA0014602, 0x00000002, 0x4029DC20, 0xA0014702, 0x00000002, 0x4029DC20, + 0xA0014802, 0x00000002, 0x4029DC20, 0xA0014902, + // Block 31, offset 0x7c0 + 0x00000002, 0x4029DC20, 0xA0014A02, 0x00000002, 0x4029DC20, 0xA0014B02, + 0x00000002, 0x4029DC20, 0xA0014C02, 0x00000002, 0x4029DC20, 0xA0014D02, + 0x00000002, 0x4029DC20, 0xA0014E02, 0x00000002, 0x4029DC20, 0xA0014F02, + 0x00000002, 0x4029DC20, 0xA0015002, 0x00000002, 0x4029DC20, 0xA0015102, + 0x00000002, 0x4029DC20, 0xA0015202, 0x00000002, 0x4029DC20, 0xA0015302, + 0x00000002, 0x4029DC20, 0xA0015402, 0x00000002, 0x4029DC20, 0xA0015502, + 0x00000002, 0x4029DC20, 0xA0015602, 0x00000002, 0x0029DC84, 0xA0015604, + 0x00000002, 0x4029DC20, 0xA0015702, 0x00000002, 0x4029DC20, 0xA0015802, + 0x00000002, 0x4029DC20, 0xA0015902, 0x00000002, 0x4029DC20, 0xA0015A02, + 0x00000002, 0x4029DC20, 0xA0015B02, 0x00000002, 0x4029DC20, 0xA0015C02, + 0x00000002, 0x4029DC20, 0xA0015D02, 0x00000002, + // Block 32, offset 0x800 + 0x4029DC20, 0xA0015E02, 0x00000002, 0x4029DC20, 0xA0015F02, 0x00000002, + 0x4029DC20, 0xA0016002, 0x00000002, 0x4029DC20, 0xA0016102, 0x00000002, + 0x4029DC20, 0xA0016202, 0x00000002, 0x4029DC20, 0xA0016302, 0x00000002, + 0x4029DC20, 0xA0016402, 0x00000002, 0x4029DC20, 0xA0016502, 0x00000002, + 0x4029DC20, 0xA0016602, 0x00000002, 0x4029DC20, 0xA0016702, 0x00000002, + 0x4029DC20, 0xA0016C02, 0x00000002, 0x4029DC20, 0xA0016C02, 0x00000002, + 0x4029DC20, 0xA0016C02, 0x00000002, 0x4029DC20, 0xA0016C02, 0x00000002, + 0x4029DC20, 0xA0016C02, 0x00000002, 0x4029DC20, 0xA0016C02, 0x00000002, + 0x4029DC20, 0xA0016C02, 0x00000002, 0x4029DC20, 0xA0017202, 0x00000002, + 0x4029DC20, 0xA0017302, 0x00000002, 0x4029DC20, 0xA0017402, 0x00000002, + 0x4029DC20, 0xA0017502, 0x00000002, 0x4029DC20, + // Block 33, offset 0x840 + 0xA0017702, 0x00000002, 0x0029DC86, 0x0029CC86, 0x00000002, 0x4029DE20, + 0xA0013F02, 0x00000002, 0x4029DE20, 0xA0014002, 0x00000002, 0x4029DE20, + 0xA0014102, 0x00000002, 0x4029DE20, 0xA0014202, 0x00000002, 0x4029DE20, + 0xA0014302, 0x00000002, 0x4029DE20, 0xA0014402, 0x00000002, 0x4029DE20, + 0xA0014502, 0x00000002, 0x4029DE20, 0xA0014602, 0x00000002, 0x4029DE20, + 0xA0014702, 0x00000002, 0x4029DE20, 0xA0014802, 0x00000002, 0x4029DE20, + 0xA0014902, 0x00000002, 0x4029DE20, 0xA0014A02, 0x00000002, 0x4029DE20, + 0xA0014B02, 0x00000002, 0x4029DE20, 0xA0014C02, 0x00000002, 0x4029DE20, + 0xA0014D02, 0x00000002, 0x4029DE20, 0xA0014E02, 0x00000002, 0x4029DE20, + 0xA0014F02, 0x00000002, 0x4029DE20, 0xA0015002, 0x00000002, 0x4029DE20, + 0xA0015102, 0x00000002, 0x4029DE20, 0xA0015202, + // Block 34, offset 0x880 + 0x00000002, 0x4029DE20, 0xA0015302, 0x00000002, 0x4029DE20, 0xA0015402, + 0x00000002, 0x4029DE20, 0xA0015502, 0x00000002, 0x4029DE20, 0xA0015602, + 0x00000002, 0x0029DE84, 0xA0015604, 0x00000002, 0x4029DE20, 0xA0015702, + 0x00000002, 0x4029DE20, 0xA0015802, 0x00000002, 0x4029DE20, 0xA0015902, + 0x00000002, 0x4029DE20, 0xA0015A02, 0x00000002, 0x4029DE20, 0xA0015B02, + 0x00000002, 0x4029DE20, 0xA0015C02, 0x00000002, 0x4029DE20, 0xA0015D02, + 0x00000002, 0x4029DE20, 0xA0015E02, 0x00000002, 0x4029DE20, 0xA0015F02, + 0x00000002, 0x4029DE20, 0xA0016002, 0x00000002, 0x4029DE20, 0xA0016102, + 0x00000002, 0x4029DE20, 0xA0016202, 0x00000002, 0x4029DE20, 0xA0016302, + 0x00000002, 0x4029DE20, 0xA0016402, 0x00000002, 0x4029DE20, 0xA0016502, + 0x00000002, 0x4029DE20, 0xA0016602, 0x00000002, + // Block 35, offset 0x8c0 + 0x4029DE20, 0xA0016702, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0016C02, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0016C02, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0016C02, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0016C02, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0017202, 0x00000002, 0x4029DE20, 0xA0017302, 0x00000002, + 0x4029DE20, 0xA0017402, 0x00000002, 0x4029DE20, 0xA0017502, 0x00000002, + 0x4029DE20, 0xA0017702, 0x00000002, 0x402BDE20, 0xAE603202, 0x00000002, + 0x002BDE88, 0xAE603202, 0x00000002, 0x402BDE20, 0xAE603502, 0x00000002, + 0x002BDE88, 0xAE603502, 0x00000002, 0x402BDE20, 0xAE603702, 0x00000002, + 0x002BDE88, 0xAE603702, 0x00000003, 0x402BDE20, + // Block 36, offset 0x900 + 0xAE603702, 0xAE603202, 0x00000003, 0x002BDE88, 0xAE603702, 0xAE603202, + 0x00000003, 0x402BDE20, 0xAE603702, 0xAE603502, 0x00000003, 0x002BDE88, + 0xAE603702, 0xAE603502, 0x00000003, 0x402BDE20, 0xAE603702, 0xAE604E02, + 0x00000003, 0x002BDE88, 0xAE603702, 0xAE604E02, 0x00000003, 0x402BDE20, + 0xAE603702, 0xAE606402, 0x00000003, 0x002BDE88, 0xAE603702, 0xAE606402, + 0x00000002, 0x402BDE20, 0xAE603C02, 0x00000002, 0x002BDE88, 0xAE603C02, + 0x00000003, 0x402BDE20, 0xAE603C02, 0xAE603202, 0x00000003, 0x002BDE88, + 0xAE603C02, 0xAE603202, 0x00000003, 0x402BDE20, 0xAE603C02, 0xAE603502, + 0x00000003, 0x002BDE88, 0xAE603C02, 0xAE603502, 0x00000003, 0x402BDE20, + 0xAE603C02, 0xAE604E02, 0x00000003, 0x002BDE88, 0xAE603C02, 0xAE604E02, + 0x00000003, 0x402BDE20, 0xAE603C02, 0xAE606402, + // Block 37, offset 0x940 + 0x00000003, 0x002BDE88, 0xAE603C02, 0xAE606402, 0x00000002, 0x402BDE20, + 0xAE604102, 0x00000002, 0x002BDE88, 0xAE604102, 0x00000002, 0x402BDE20, + 0xAE604302, 0x00000002, 0x002BDE88, 0xAE604302, 0x00000003, 0x402BDE20, + 0xAE604302, 0xAE603202, 0x00000003, 0x002BDE88, 0xAE604302, 0xAE603202, + 0x00000002, 0x402BDE20, 0xAE604702, 0x00000002, 0x002BDE88, 0xAE604702, + 0x00000003, 0x402BDE20, 0xAE604702, 0xAE605B02, 0x00000003, 0x002BDE88, + 0xAE604702, 0xAE605B02, 0x00000002, 0x402BDE20, 0xAE604E02, 0x00000002, + 0x002BDE88, 0xAE604E02, 0x00000002, 0x402BDE20, 0xAE605202, 0x00000002, + 0x002BDE88, 0xAE605202, 0x00000003, 0x402BDE20, 0xAE605202, 0xAE605B02, + 0x00000003, 0x002BDE88, 0xAE605202, 0xAE605B02, 0x00000002, 0x402BDE20, + 0xACA05902, 0x00000002, 0x002BDE88, 0xACA05902, + // Block 38, offset 0x980 + 0x00000002, 0x402BDE20, 0xAE605B02, 0x00000002, 0x002BDE88, 0xAE605B02, + 0x00000002, 0x402BDE20, 0xAE606402, 0x00000002, 0x002BDE88, 0xAE606402, + 0x00000002, 0x402BDE20, 0xAE606502, 0x00000002, 0x002BDE88, 0xAE606502, + 0x00000002, 0x402BDE20, 0xAE606702, 0x00000002, 0x002BDE88, 0xAE606702, + 0x00000002, 0x402BDE20, 0xADC07002, 0x00000002, 0x002BDE88, 0xADC07002, + 0x00000003, 0x402BDE20, 0xADC07002, 0xAE603702, 0x00000003, 0x002BDE88, + 0xADC07002, 0xAE603702, 0x00000003, 0x402BDE20, 0xADC07002, 0xAE603C02, + 0x00000003, 0x002BDE88, 0xADC07002, 0xAE603C02, 0x00000002, 0x402BDE20, + 0xADC07602, 0x00000002, 0x002BDE88, 0xADC07602, 0x00000002, 0x84E615EF, + 0xAE613904, 0x00000004, 0x002BDE9C, 0x0002E49C, 0x002E829C, 0x0002E49C, + 0x00000003, 0x002BDE84, 0x0004E284, 0x002C3A84, + // Block 39, offset 0x9c0 + 0x00000003, 0x002BDE84, 0x0004E284, 0x002FE684, 0x00000003, 0x002BDE8A, + 0x0004E284, 0x002FE68A, 0x00000003, 0x002BDE9D, 0x0009569C, 0x002E829C, + 0x00000002, 0x002BDE84, 0x002BDE84, 0x00000002, 0x002BDE8A, 0x002BDE8A, + 0x00000002, 0x002BDE9D, 0x002C0A9D, 0x00000003, 0x002BDE84, 0xA0013904, + 0x002C9884, 0x00000003, 0x84E615EF, 0xAE613904, 0x84E6164C, 0x00000003, + 0x002BDE8A, 0xA0013904, 0x002C988A, 0x00000003, 0x002BDE94, 0xA0013914, + 0x002C9894, 0x00000004, 0x002BDE84, 0xA0013904, 0x002C9884, 0xAE603202, + 0x00000004, 0x002BDE8A, 0xA0013904, 0x002C988A, 0xAE603202, 0x00000004, + 0x002BDE84, 0xA0013904, 0x002C9884, 0xAE605B02, 0x00000004, 0x002BDE8A, + 0xA0013904, 0x002C988A, 0xAE605B02, 0x00000002, 0x84E615EF, 0x84E61771, + 0x00000002, 0x002BDE84, 0x002EE284, 0x00000002, + // Block 40, offset 0xa00 + 0x002BDE8A, 0x002EE28A, 0x00000002, 0x002BDE84, 0x00306C84, 0x00000002, + 0x002BDE8A, 0x00306C8A, 0x00000002, 0x84E615EF, 0x84E6185F, 0x00000002, + 0x002BDE84, 0x0030BE84, 0x00000002, 0x002BDE8A, 0x0030BE8A, 0x00000003, + 0x002BDE84, 0xA0013904, 0x0030BE84, 0x00000003, 0x002BDE8A, 0xA0013904, + 0x0030BE8A, 0x00000002, 0x002BDE84, 0x00310084, 0x00000002, 0x002BDE8A, + 0x0031008A, 0x00000002, 0x402C0A20, 0xAE605202, 0x00000002, 0x002C0A88, + 0xAE605202, 0x00000002, 0x402C0A20, 0xADC07002, 0x00000002, 0x002C0A88, + 0xADC07002, 0x00000002, 0x402C0A20, 0xADC07B02, 0x00000002, 0x002C0A88, + 0xADC07B02, 0x00000003, 0x002C0A9C, 0x002BDE9C, 0x002F7A9C, 0x00000002, + 0x402C3A20, 0xAE603202, 0x00000002, 0x002C3A88, 0xAE603202, 0x00000002, + 0x402C3A20, 0xAE603C02, 0x00000002, 0x002C3A88, + // Block 41, offset 0xa40 + 0xAE603C02, 0x00000002, 0x402C3A20, 0xAE604102, 0x00000002, 0x002C3A88, + 0xAE604102, 0x00000002, 0x402C3A20, 0xAE605202, 0x00000002, 0x002C3A88, + 0xAE605202, 0x00000002, 0x402C3A20, 0xACA05602, 0x00000002, 0x84E6161D, + 0xAE605604, 0x00000002, 0x002C3A88, 0xACA05602, 0x00000003, 0x402C3A20, + 0xACA05602, 0xAE603202, 0x00000003, 0x002C3A88, 0xACA05602, 0xAE603202, + 0x00000003, 0x002C3A84, 0x0004E284, 0x002EE284, 0x00000003, 0x002C3A84, + 0x0004E284, 0x00306C84, 0x00000004, 0x002C3A9D, 0x0009569C, 0x002DFE9C, + 0x002D229C, 0x00000003, 0x002C3A9C, 0x002BDE9C, 0x002E229C, 0x00000002, + 0x002C3A9D, 0x002E229D, 0x00000003, 0x002C3A9C, 0x002E829C, 0x0029D09C, + 0x00000003, 0x002C3A9C, 0x002E829C, 0x0029D29C, 0x00000003, 0x002C3A9D, + 0x002EE29C, 0x0002E49C, 0x00000004, 0x002C3A9D, + // Block 42, offset 0xa80 + 0x002EE29D, 0x002EE29D, 0x002E229D, 0x00000002, 0x402C6220, 0xAE604102, + 0x00000002, 0x002C6288, 0xAE604102, 0x00000002, 0x402C6220, 0xAE605202, + 0x00000002, 0x002C6288, 0xAE605202, 0x00000002, 0x402C6220, 0xACA05602, + 0x00000002, 0x002C6288, 0xACA05602, 0x00000002, 0x402C6220, 0xADC07002, + 0x00000002, 0x002C6288, 0xADC07002, 0x00000002, 0x402C6220, 0xADC07802, + 0x00000002, 0x002C6288, 0xADC07802, 0x00000002, 0x402C6220, 0xADC07B02, + 0x00000002, 0x002C6288, 0xADC07B02, 0x00000002, 0x402C6220, 0xA0007D02, + 0x00000002, 0x002C6288, 0xA0007D02, 0x00000002, 0x002C6284, 0xA0013904, + 0x00000002, 0x84E61631, 0xAE613904, 0x00000002, 0x002C628A, 0xA0013904, + 0x00000002, 0x84E61631, 0xAE613A04, 0x00000002, 0x002C6284, 0xA0013A04, + 0x00000002, 0x002C628A, 0xA0013A04, 0x00000002, + // Block 43, offset 0xac0 + 0x002C6284, 0x002C0A84, 0x00000003, 0x002C629C, 0x002E829C, 0x0029D09C, + 0x00000003, 0x002C629C, 0x002E829C, 0x0029D29C, 0x00000002, 0x002C6284, + 0x00312A84, 0x00000003, 0x002C6284, 0x00312A84, 0xA0004104, 0x00000003, + 0x002C628A, 0x00312A84, 0xA0004104, 0x00000003, 0x002C628A, 0x00312A8A, + 0xA0004104, 0x00000002, 0x002C6284, 0x00315084, 0x00000002, 0x002C6284, + 0x00316484, 0x00000002, 0x402C9820, 0xAE603202, 0x00000002, 0x002C9888, + 0xAE603202, 0x00000002, 0x402C9820, 0xAE603502, 0x00000002, 0x002C9888, + 0xAE603502, 0x00000002, 0x402C9820, 0xAE603702, 0x00000002, 0x002C9888, + 0xAE603702, 0x00000002, 0x402C9820, 0xAE603C02, 0x00000002, 0x002C9888, + 0xAE603C02, 0x00000003, 0x402C9820, 0xAE603C02, 0xAE603202, 0x00000003, + 0x002C9888, 0xAE603C02, 0xAE603202, 0x00000003, + // Block 44, offset 0xb00 + 0x402C9820, 0xAE603C02, 0xAE603502, 0x00000003, 0x002C9888, 0xAE603C02, + 0xAE603502, 0x00000003, 0x402C9820, 0xAE603C02, 0xAE604E02, 0x00000003, + 0x002C9888, 0xAE603C02, 0xAE604E02, 0x00000003, 0x402C9820, 0xAE603C02, + 0xAE606402, 0x00000003, 0x002C9888, 0xAE603C02, 0xAE606402, 0x00000002, + 0x402C9820, 0xAE604102, 0x00000002, 0x002C9888, 0xAE604102, 0x00000002, + 0x402C9820, 0xAE604702, 0x00000002, 0x002C9888, 0xAE604702, 0x00000002, + 0x402C9820, 0xAE604E02, 0x00000002, 0x002C9888, 0xAE604E02, 0x00000002, + 0x402C9820, 0xAE605202, 0x00000002, 0x002C9888, 0xAE605202, 0x00000002, + 0x402C9820, 0xACA05602, 0x00000002, 0x002C9888, 0xACA05602, 0x00000003, + 0x402C9820, 0xACA05602, 0xAE603702, 0x00000003, 0x002C9888, 0xACA05602, + 0xAE603702, 0x00000002, 0x402C9820, 0xACA05902, + // Block 45, offset 0xb40 + 0x00000002, 0x002C9888, 0xACA05902, 0x00000002, 0x402C9820, 0xAE605B02, + 0x00000002, 0x002C9888, 0xAE605B02, 0x00000003, 0x402C9820, 0xAE605B02, + 0xAE603202, 0x00000003, 0x002C9888, 0xAE605B02, 0xAE603202, 0x00000003, + 0x402C9820, 0xAE605B02, 0xAE603502, 0x00000003, 0x002C9888, 0xAE605B02, + 0xAE603502, 0x00000002, 0x402C9820, 0xAE606402, 0x00000002, 0x002C9888, + 0xAE606402, 0x00000002, 0x402C9820, 0xAE606502, 0x00000002, 0x002C9888, + 0xAE606502, 0x00000002, 0x402C9820, 0xAE606702, 0x00000002, 0x002C9888, + 0xAE606702, 0x00000002, 0x402C9820, 0xADC07002, 0x00000002, 0x002C9888, + 0xADC07002, 0x00000003, 0x402C9820, 0xADC07002, 0xAE603C02, 0x00000003, + 0x002C9888, 0xADC07002, 0xAE603C02, 0x00000002, 0x402C9820, 0xADC07802, + 0x00000002, 0x002C9888, 0xADC07802, 0x00000002, + // Block 46, offset 0xb80 + 0x402C9820, 0xADC07A02, 0x00000002, 0x002C9888, 0xADC07A02, 0x00000003, + 0x002C989C, 0x002F7A9C, 0x002D229C, 0x00000002, 0x402D0820, 0xAE605202, + 0x00000002, 0x002D0888, 0xAE605202, 0x00000002, 0x002D0884, 0xA0013A04, + 0x00000002, 0x002D088A, 0xA0013A04, 0x00000003, 0x002D088A, 0x002BDE8A, + 0x0030F68A, 0x00000003, 0x002D0884, 0x002D0884, 0x002D9A84, 0x00000003, + 0x002D0884, 0x002D0884, 0x002E2284, 0x00000002, 0x002D0884, 0x002EDA84, + 0x00000004, 0x002D089D, 0x002F7A9D, 0x002C989D, 0x002C989D, 0x00000002, + 0x402D2220, 0xAE603202, 0x00000002, 0x002D2288, 0xAE603202, 0x00000002, + 0x402D2220, 0xAE603702, 0x00000002, 0x002D2288, 0xAE603702, 0x00000002, + 0x402D2220, 0xAE603C02, 0x00000002, 0x002D2288, 0xAE603C02, 0x00000002, + 0x402D2220, 0xAE604102, 0x00000002, 0x002D2288, + // Block 47, offset 0xbc0 + 0xAE604102, 0x00000002, 0x402D2220, 0xAE605202, 0x00000002, 0x002D2288, + 0xAE605202, 0x00000002, 0x402D2220, 0xACA05602, 0x00000002, 0x002D2288, + 0xACA05602, 0x00000002, 0x402D2220, 0xAE605B02, 0x00000002, 0x002D2288, + 0xAE605B02, 0x00000002, 0x002D2284, 0xA0006104, 0x00000002, 0x002D228A, + 0xA0006104, 0x00000002, 0x002D2284, 0xA0013A04, 0x00000002, 0x002D228A, + 0xA0013A04, 0x00000003, 0x002D229C, 0x002BDE9C, 0x002E229C, 0x00000003, + 0x002D229D, 0x002D689D, 0x00312A9C, 0x00000003, 0x002D229D, 0x002F2C9D, + 0x002BDE9C, 0x00000002, 0x402D6820, 0xAE603C02, 0x00000002, 0x002D6888, + 0xAE603C02, 0x00000002, 0x402D6820, 0xAE604102, 0x00000002, 0x002D6888, + 0xAE604102, 0x00000002, 0x402D6820, 0xAE604702, 0x00000002, 0x002D6888, + 0xAE604702, 0x00000002, 0x402D6820, 0xAE605202, + // Block 48, offset 0xc00 + 0x00000002, 0x002D6888, 0xAE605202, 0x00000002, 0x402D6820, 0xACA05602, + 0x00000002, 0x002D6888, 0xACA05602, 0x00000002, 0x402D6820, 0xADC07002, + 0x00000002, 0x002D6888, 0xADC07002, 0x00000002, 0x402D6820, 0xADC07902, + 0x00000002, 0x002D6888, 0xADC07902, 0x00000002, 0x402D6820, 0xADC07B02, + 0x00000002, 0x402D6820, 0xA0007D02, 0x00000002, 0x002D6888, 0xA0007D02, + 0x00000003, 0x002D689C, 0x002F2C9D, 0x002BDE9C, 0x00000002, 0x402D9A20, + 0xAE603202, 0x00000002, 0x002D9A88, 0xAE603202, 0x00000002, 0x402D9A20, + 0xAE603502, 0x00000002, 0x002D9A88, 0xAE603502, 0x00000002, 0x402D9A20, + 0xAE603702, 0x00000002, 0x002D9A88, 0xAE603702, 0x00000002, 0x402D9A20, + 0xAE603C02, 0x00000002, 0x002D9A88, 0xAE603C02, 0x00000002, 0x402D9A20, + 0xAE604102, 0x00000002, 0x002D9A88, 0xAE604102, + // Block 49, offset 0xc40 + 0x00000002, 0x402D9A20, 0xAE604702, 0x00000002, 0x002D9A88, 0xAE604702, + 0x00000003, 0x402D9A20, 0xAE604702, 0xAE603202, 0x00000003, 0x002D9A88, + 0xAE604702, 0xAE603202, 0x00000002, 0x402D9A20, 0xAE604E02, 0x00000002, + 0x002D9A88, 0xAE604E02, 0x00000002, 0x002D9A88, 0xAE605202, 0x00000002, + 0x402D9A20, 0xACA05902, 0x00000002, 0x002D9A88, 0xACA05902, 0x00000002, + 0x402D9A20, 0xAE605B02, 0x00000002, 0x002D9A88, 0xAE605B02, 0x00000002, + 0x402D9A20, 0xAE606402, 0x00000002, 0x002D9A88, 0xAE606402, 0x00000002, + 0x402D9A20, 0xAE606502, 0x00000002, 0x002D9A88, 0xAE606502, 0x00000002, + 0x402D9A20, 0xAE606702, 0x00000002, 0x002D9A88, 0xAE606702, 0x00000002, + 0x402D9A20, 0xADC07002, 0x00000002, 0x002D9A88, 0xADC07002, 0x00000002, + 0x402D9A20, 0xADC07A02, 0x00000002, 0x002D9A88, + // Block 50, offset 0xc80 + 0xADC07A02, 0x00000002, 0x002D9A9D, 0x002C3A9D, 0x00000002, 0x002D9A9D, + 0x002C629D, 0x00000002, 0x402DCC20, 0xAE603C02, 0x00000002, 0x002DCC88, + 0xAE603C02, 0x00000002, 0x402DCC20, 0xAE604102, 0x00000002, 0x402DFE20, + 0xAE603202, 0x00000002, 0x002DFE88, 0xAE603202, 0x00000002, 0x402DFE20, + 0xAE604102, 0x00000002, 0x002DFE88, 0xAE604102, 0x00000002, 0x402DFE20, + 0xACA05602, 0x00000002, 0x002DFE88, 0xACA05602, 0x00000002, 0x002DFE84, + 0xA0006104, 0x00000002, 0x002DFE8A, 0xA0006104, 0x00000002, 0x402DFE20, + 0xADC07002, 0x00000002, 0x002DFE88, 0xADC07002, 0x00000002, 0x402DFE20, + 0xADC07B02, 0x00000002, 0x002DFE88, 0xADC07B02, 0x00000004, 0x002DFE9C, + 0x002C3A9C, 0x002BDE9C, 0x002E229C, 0x00000003, 0x002DFE9C, 0x002D689D, + 0x00312A9C, 0x00000003, 0x002DFE9C, 0x002E829C, + // Block 51, offset 0xcc0 + 0x0029D09C, 0x00000003, 0x002DFE9C, 0x002E829C, 0x0029D29C, 0x00000003, + 0x002DFE9C, 0x002F2C9D, 0x002BDE9C, 0x00000002, 0x402E2220, 0xAE603202, + 0x00000002, 0x002E2288, 0xAE603202, 0x00000002, 0x402E2220, 0xAE604102, + 0x00000002, 0x002E2288, 0xAE604102, 0x00000002, 0x402E2220, 0xACA05602, + 0x00000002, 0x002E2288, 0xACA05602, 0x00000002, 0x402E2220, 0xADC07002, + 0x00000002, 0x002E2288, 0xADC07002, 0x00000003, 0x402E2220, 0xADC07002, + 0xAE605B02, 0x00000003, 0x002E2288, 0xADC07002, 0xAE605B02, 0x00000002, + 0x402E2220, 0xADC07802, 0x00000002, 0x002E2288, 0xADC07802, 0x00000002, + 0x402E2220, 0xADC07B02, 0x00000002, 0x002E2288, 0xADC07B02, 0x00000002, + 0x402E2220, 0xA0007D02, 0x00000002, 0x002E2288, 0xA0007D02, 0x00000002, + 0x402E2220, 0xA0013902, 0x00000002, 0x402E2220, + // Block 52, offset 0xd00 + 0xA0013902, 0x00000002, 0x002E2288, 0xA0013902, 0x00000002, 0x002E2288, + 0xA0013902, 0x00000002, 0x002E2284, 0x002E2284, 0x00000002, 0x002E228A, + 0x002E228A, 0x00000003, 0x002E229C, 0x002EE29C, 0x002D229C, 0x00000002, + 0x002E2284, 0x002FE684, 0x00000003, 0x002E229D, 0x00302C9D, 0x002C629D, + 0x00000002, 0x002E2284, 0x00312A84, 0x00000002, 0x402E8220, 0xAE603202, + 0x00000002, 0x002E8288, 0xAE603202, 0x00000002, 0x402E8220, 0xAE605202, + 0x00000002, 0x002E8288, 0xAE605202, 0x00000002, 0x402E8220, 0xADC07002, + 0x00000002, 0x002E8288, 0xADC07002, 0x00000003, 0x002E829C, 0x0009569C, + 0x002FE69C, 0x00000004, 0x002E829C, 0x0009569C, 0x002FE69C, 0x0029D09C, + 0x00000003, 0x002E829D, 0x002D689D, 0x00312A9C, 0x00000003, 0x002E829C, + 0x002D9A9C, 0x002E229C, 0x00000003, 0x002E829C, + // Block 53, offset 0xd40 + 0x002E829C, 0x0029D09C, 0x00000003, 0x002E829C, 0x002E829C, 0x0029D29C, + 0x00000003, 0x002E829C, 0x002EE29C, 0x002E229C, 0x00000003, 0x002E829D, + 0x002F2C9D, 0x002BDE9C, 0x00000002, 0x402E9E20, 0xAE603202, 0x00000002, + 0x002E9E88, 0xAE603202, 0x00000002, 0x402E9E20, 0xAE603502, 0x00000002, + 0x002E9E88, 0xAE603502, 0x00000002, 0x402E9E20, 0xAE604102, 0x00000002, + 0x002E9E88, 0xAE604102, 0x00000002, 0x402E9E20, 0xAE604E02, 0x00000002, + 0x002E9E88, 0xAE604E02, 0x00000002, 0x402E9E20, 0xAE605202, 0x00000002, + 0x002E9E88, 0xAE605202, 0x00000002, 0x402E9E20, 0xACA05602, 0x00000002, + 0x002E9E88, 0xACA05602, 0x00000002, 0x002E9E84, 0xA0006104, 0x00000002, + 0x002E9E8A, 0xA0006104, 0x00000002, 0x402E9E20, 0xADC07002, 0x00000002, + 0x002E9E88, 0xADC07002, 0x00000002, 0x402E9E20, + // Block 54, offset 0xd80 + 0xADC07802, 0x00000002, 0x002E9E88, 0xADC07802, 0x00000002, 0x402E9E20, + 0xADC07B02, 0x00000002, 0x002E9E88, 0xADC07B02, 0x00000003, 0x002E9E9D, + 0x002C989D, 0x0030E29D, 0x00000002, 0x002E9E9D, 0x002D229D, 0x00000002, + 0x402EE220, 0xAE603202, 0x00000002, 0x002EE288, 0xAE603202, 0x00000002, + 0x402EE220, 0xAE603502, 0x00000002, 0x002EE288, 0xAE603502, 0x00000002, + 0x402EE220, 0xAE603702, 0x00000002, 0x002EE288, 0xAE603702, 0x00000002, + 0x402EE220, 0xAE603C02, 0x00000002, 0x002EE288, 0xAE603C02, 0x00000003, + 0x402EE220, 0xAE603C02, 0xAE603202, 0x00000003, 0x002EE288, 0xAE603C02, + 0xAE603202, 0x00000003, 0x402EE220, 0xAE603C02, 0xAE603502, 0x00000003, + 0x002EE288, 0xAE603C02, 0xAE603502, 0x00000003, 0x402EE220, 0xAE603C02, + 0xAE604E02, 0x00000003, 0x002EE288, 0xAE603C02, + // Block 55, offset 0xdc0 + 0xAE604E02, 0x00000003, 0x402EE220, 0xAE603C02, 0xAE606402, 0x00000003, + 0x002EE288, 0xAE603C02, 0xAE606402, 0x00000002, 0x402EE220, 0xAE604102, + 0x00000002, 0x002EE288, 0xAE604102, 0x00000002, 0x402EE220, 0xAE604702, + 0x00000002, 0x002EE288, 0xAE604702, 0x00000003, 0x402EE220, 0xAE604702, + 0xAE605B02, 0x00000003, 0x002EE288, 0xAE604702, 0xAE605B02, 0x00000002, + 0x402EE220, 0xAE604D02, 0x00000002, 0x002EE288, 0xAE604D02, 0x00000002, + 0x402EE220, 0xAE604E02, 0x00000002, 0x002EE288, 0xAE604E02, 0x00000003, + 0x402EE220, 0xAE604E02, 0xAE603202, 0x00000003, 0x002EE288, 0xAE604E02, + 0xAE603202, 0x00000003, 0x402EE220, 0xAE604E02, 0xAE604702, 0x00000003, + 0x002EE288, 0xAE604E02, 0xAE604702, 0x00000003, 0x402EE220, 0xAE604E02, + 0xAE605B02, 0x00000003, 0x002EE288, 0xAE604E02, + // Block 56, offset 0xe00 + 0xAE605B02, 0x00000002, 0x402EE220, 0xAE605202, 0x00000002, 0x002EE288, + 0xAE605202, 0x00000003, 0x402EE220, 0xAE605202, 0xAE605B02, 0x00000003, + 0x002EE288, 0xAE605202, 0xAE605B02, 0x00000002, 0x402EE220, 0xA0005402, + 0x00000002, 0x002EE288, 0xA0005402, 0x00000003, 0x402EE220, 0xA0005402, + 0xAE603202, 0x00000003, 0x002EE288, 0xA0005402, 0xAE603202, 0x00000002, + 0x402EE220, 0xACA05902, 0x00000002, 0x002EE288, 0xACA05902, 0x00000003, + 0x402EE220, 0xACA05902, 0xAE605B02, 0x00000003, 0x002EE288, 0xACA05902, + 0xAE605B02, 0x00000002, 0x402EE220, 0xAE605B02, 0x00000002, 0x002EE288, + 0xAE605B02, 0x00000003, 0x402EE220, 0xAE605B02, 0xAE603202, 0x00000003, + 0x002EE288, 0xAE605B02, 0xAE603202, 0x00000003, 0x402EE220, 0xAE605B02, + 0xAE603502, 0x00000003, 0x002EE288, 0xAE605B02, + // Block 57, offset 0xe40 + 0xAE603502, 0x00000002, 0x402EE220, 0xAE606402, 0x00000002, 0x002EE288, + 0xAE606402, 0x00000002, 0x402EE220, 0xAE606502, 0x00000002, 0x002EE288, + 0xAE606502, 0x00000002, 0x402EE220, 0xAE606702, 0x00000002, 0x002EE288, + 0xAE606702, 0x00000002, 0x402EE220, 0xAD806802, 0x00000002, 0x002EE288, + 0xAD806802, 0x00000003, 0x402EE220, 0xAD806802, 0xAE603202, 0x00000003, + 0x002EE288, 0xAD806802, 0xAE603202, 0x00000003, 0x402EE220, 0xAD806802, + 0xAE603502, 0x00000003, 0x002EE288, 0xAD806802, 0xAE603502, 0x00000003, + 0x402EE220, 0xAD806802, 0xAE604E02, 0x00000003, 0x002EE288, 0xAD806802, + 0xAE604E02, 0x00000003, 0x402EE220, 0xAD806802, 0xAE606402, 0x00000003, + 0x002EE288, 0xAD806802, 0xAE606402, 0x00000003, 0x402EE220, 0xAD806802, + 0xADC07002, 0x00000003, 0x002EE288, 0xAD806802, + // Block 58, offset 0xe80 + 0xADC07002, 0x00000002, 0x402EE220, 0xADC07002, 0x00000002, 0x002EE288, + 0xADC07002, 0x00000003, 0x402EE220, 0xADC07002, 0xAE603C02, 0x00000003, + 0x002EE288, 0xADC07002, 0xAE603C02, 0x00000003, 0x002EE284, 0xA0013904, + 0x002C9884, 0x00000003, 0x002EE28A, 0xA0013904, 0x002C988A, 0x00000003, + 0x002EE294, 0xA0013914, 0x002C9894, 0x00000002, 0x002EE29D, 0x002DFE9D, + 0x00000002, 0x002EE284, 0x002EE284, 0x00000002, 0x002EE28A, 0x002EE28A, + 0x00000002, 0x402F2C20, 0xAE603202, 0x00000002, 0x002F2C88, 0xAE603202, + 0x00000002, 0x402F2C20, 0xAE605202, 0x00000002, 0x002F2C88, 0xAE605202, + 0x00000004, 0x002F2C9C, 0x0002E49C, 0x002E829C, 0x0002E49C, 0x00000002, + 0x002F2C9D, 0x002BDE9D, 0x00000003, 0x002F2C9D, 0x002F2C9D, 0x002E829D, + 0x00000003, 0x002F2C9D, 0x002F2C9D, 0x0030BE9D, + // Block 59, offset 0xec0 + 0x00000003, 0x002F2C9D, 0x00302C9D, 0x002C989D, 0x00000002, 0x002F5684, + 0x002F2C84, 0x00000002, 0x402F7A20, 0xAE603202, 0x00000002, 0x002F7A88, + 0xAE603202, 0x00000002, 0x402F7A20, 0xAE604102, 0x00000002, 0x002F7A88, + 0xAE604102, 0x00000002, 0x402F7A20, 0xAE605202, 0x00000002, 0x002F7A88, + 0xAE605202, 0x00000002, 0x402F7A20, 0xACA05602, 0x00000002, 0x002F7A88, + 0xACA05602, 0x00000002, 0x002F7A84, 0xA0006104, 0x00000002, 0x002F7A8A, + 0xA0006104, 0x00000002, 0x402F7A20, 0xAE606502, 0x00000002, 0x002F7A88, + 0xAE606502, 0x00000002, 0x402F7A20, 0xAE606702, 0x00000002, 0x002F7A88, + 0xAE606702, 0x00000002, 0x402F7A20, 0xADC07002, 0x00000002, 0x002F7A88, + 0xADC07002, 0x00000003, 0x402F7A20, 0xADC07002, 0xAE605B02, 0x00000003, + 0x002F7A88, 0xADC07002, 0xAE605B02, 0x00000002, + // Block 60, offset 0xf00 + 0x402F7A20, 0xADC07B02, 0x00000002, 0x002F7A88, 0xADC07B02, 0x00000002, + 0x002F7A84, 0xA0013A04, 0x00000002, 0x002F7A8A, 0xA0013A04, 0x00000003, + 0x002F7A9C, 0x002BDE9C, 0x002C629C, 0x00000005, 0x002F7A9C, 0x002BDE9C, + 0x002C629C, 0x0009569C, 0x002FE69C, 0x00000006, 0x002F7A9C, 0x002BDE9C, + 0x002C629C, 0x0009569C, 0x002FE69C, 0x0029D09C, 0x00000002, 0x402FE620, + 0xAE603202, 0x00000002, 0x002FE688, 0xAE603202, 0x00000003, 0x402FE620, + 0xAE603202, 0xAE605202, 0x00000003, 0x002FE688, 0xAE603202, 0xAE605202, + 0x00000002, 0x402FE620, 0xAE603C02, 0x00000002, 0x002FE688, 0xAE603C02, + 0x00000002, 0x402FE620, 0xAE604102, 0x00000002, 0x002FE688, 0xAE604102, + 0x00000003, 0x402FE620, 0xAE604102, 0xAE605202, 0x00000003, 0x002FE688, + 0xAE604102, 0xAE605202, 0x00000002, 0x402FE620, + // Block 61, offset 0xf40 + 0xAE605202, 0x00000002, 0x002FE688, 0xAE605202, 0x00000002, 0x402FE620, + 0xACA05602, 0x00000002, 0x002FE688, 0xACA05602, 0x00000002, 0x002FE684, + 0xA0006104, 0x00000002, 0x002FE68A, 0xA0006104, 0x00000002, 0x402FE620, + 0xADC07002, 0x00000002, 0x002FE688, 0xADC07002, 0x00000003, 0x402FE620, + 0xADC07002, 0xAE605202, 0x00000003, 0x002FE688, 0xADC07002, 0xAE605202, + 0x00000002, 0x402FE620, 0xADC07702, 0x00000002, 0x002FE688, 0xADC07702, + 0x00000002, 0x002FE684, 0xA0013A04, 0x00000002, 0x84E617F3, 0xAE613A04, + 0x00000002, 0x002FE684, 0xA0013A04, 0x00000002, 0x002FE68A, 0xA0013A04, + 0x00000003, 0x002FE684, 0xA0013A04, 0xAE605202, 0x00000002, 0x002FE69D, + 0x002BDE9D, 0x00000003, 0x002FE69D, 0x002EE29D, 0x002FE69D, 0x00000003, + 0x002FE684, 0xA0013904, 0x002FE684, 0x00000003, + // Block 62, offset 0xf80 + 0x002FE68A, 0xA0013904, 0x002FE68A, 0x00000003, 0x002FE684, 0xA0013A04, + 0x00302C84, 0x00000002, 0x40302C20, 0xAE604102, 0x00000002, 0x00302C88, + 0xAE604102, 0x00000002, 0x40302C20, 0xAE604702, 0x00000002, 0x40302C20, + 0xAE605202, 0x00000002, 0x00302C88, 0xAE605202, 0x00000002, 0x40302C20, + 0xACA05602, 0x00000002, 0x00302C88, 0xACA05602, 0x00000002, 0x40302C20, + 0xADC07002, 0x00000002, 0x00302C88, 0xADC07002, 0x00000002, 0x40302C20, + 0xADC07702, 0x00000002, 0x00302C88, 0xADC07702, 0x00000002, 0x40302C20, + 0xADC07802, 0x00000002, 0x00302C88, 0xADC07802, 0x00000002, 0x40302C20, + 0xADC07B02, 0x00000002, 0x00302C88, 0xADC07B02, 0x00000002, 0x00302C84, + 0xA0013A04, 0x00000002, 0x00302C8A, 0xA0013A04, 0x00000002, 0x00302C84, + 0x002C5684, 0x00000003, 0x00302C8A, 0x002C988A, + // Block 63, offset 0xfc0 + 0x002E228A, 0x00000003, 0x00302C84, 0xA0013904, 0x002D6884, 0x00000003, + 0x00302C9D, 0x002D689D, 0x00312A9C, 0x00000002, 0x00302C84, 0x002FE684, + 0x00000002, 0x00302C84, 0x002FE684, 0x00000002, 0x00302C84, 0x00300884, + 0x00000002, 0x00302C84, 0x00312A84, 0x00000002, 0x00302C8A, 0x00312A84, + 0x00000002, 0x40306C20, 0xAE603202, 0x00000002, 0x00306C88, 0xAE603202, + 0x00000002, 0x40306C20, 0xAE603502, 0x00000002, 0x00306C88, 0xAE603502, + 0x00000002, 0x40306C20, 0xAE603702, 0x00000002, 0x00306C88, 0xAE603702, + 0x00000002, 0x40306C20, 0xAE603C02, 0x00000002, 0x00306C88, 0xAE603C02, + 0x00000002, 0x40306C20, 0xAE604102, 0x00000002, 0x00306C88, 0xAE604102, + 0x00000002, 0x40306C20, 0xAE604302, 0x00000002, 0x00306C88, 0xAE604302, + 0x00000002, 0x40306C20, 0xAE604702, 0x00000002, + // Block 64, offset 0x1000 + 0x00306C88, 0xAE604702, 0x00000003, 0x40306C20, 0xAE604702, 0xAE603202, + 0x00000003, 0x00306C88, 0xAE604702, 0xAE603202, 0x00000003, 0x40306C20, + 0xAE604702, 0xAE603502, 0x00000003, 0x00306C88, 0xAE604702, 0xAE603502, + 0x00000003, 0x40306C20, 0xAE604702, 0xAE604102, 0x00000003, 0x00306C88, + 0xAE604702, 0xAE604102, 0x00000003, 0x40306C20, 0xAE604702, 0xAE605B02, + 0x00000003, 0x00306C88, 0xAE604702, 0xAE605B02, 0x00000002, 0x40306C20, + 0xAE604D02, 0x00000002, 0x00306C88, 0xAE604D02, 0x00000002, 0x40306C20, + 0xAE604E02, 0x00000002, 0x00306C88, 0xAE604E02, 0x00000003, 0x40306C20, + 0xAE604E02, 0xAE603202, 0x00000003, 0x00306C88, 0xAE604E02, 0xAE603202, + 0x00000002, 0x40306C20, 0xACA05902, 0x00000002, 0x00306C88, 0xACA05902, + 0x00000002, 0x40306C20, 0xAE605B02, 0x00000002, + // Block 65, offset 0x1040 + 0x00306C88, 0xAE605B02, 0x00000003, 0x40306C20, 0xAE605B02, 0xAE604702, + 0x00000003, 0x00306C88, 0xAE605B02, 0xAE604702, 0x00000002, 0x40306C20, + 0xAE606402, 0x00000002, 0x00306C88, 0xAE606402, 0x00000002, 0x40306C20, + 0xAE606502, 0x00000002, 0x00306C88, 0xAE606502, 0x00000002, 0x40306C20, + 0xAE606702, 0x00000002, 0x00306C88, 0xAE606702, 0x00000002, 0x40306C20, + 0xAD806802, 0x00000002, 0x00306C88, 0xAD806802, 0x00000003, 0x40306C20, + 0xAD806802, 0xAE603202, 0x00000003, 0x00306C88, 0xAD806802, 0xAE603202, + 0x00000003, 0x40306C20, 0xAD806802, 0xAE603502, 0x00000003, 0x00306C88, + 0xAD806802, 0xAE603502, 0x00000003, 0x40306C20, 0xAD806802, 0xAE604E02, + 0x00000003, 0x00306C88, 0xAD806802, 0xAE604E02, 0x00000003, 0x40306C20, + 0xAD806802, 0xAE606402, 0x00000003, 0x00306C88, + // Block 66, offset 0x1080 + 0xAD806802, 0xAE606402, 0x00000003, 0x40306C20, 0xAD806802, 0xADC07002, + 0x00000003, 0x00306C88, 0xAD806802, 0xADC07002, 0x00000002, 0x40306C20, + 0xADC07002, 0x00000002, 0x00306C88, 0xADC07002, 0x00000002, 0x40306C20, + 0xADC07502, 0x00000002, 0x00306C88, 0xADC07502, 0x00000002, 0x40306C20, + 0xADC07802, 0x00000002, 0x00306C88, 0xADC07802, 0x00000002, 0x40306C20, + 0xADC07A02, 0x00000002, 0x00306C88, 0xADC07A02, 0x00000003, 0x00306C9D, + 0x002F2C9D, 0x0002BA9C, 0x00000002, 0x4030BE20, 0xAE604E02, 0x00000002, + 0x0030BE88, 0xAE604E02, 0x00000002, 0x4030BE20, 0xADC07002, 0x00000002, + 0x0030BE88, 0xADC07002, 0x00000003, 0x0030BE9D, 0x0009569C, 0x002E829C, + 0x00000004, 0x0030BE84, 0x002D9A84, 0x002D9A84, 0x002D9A9F, 0x00000004, + 0x0030BE8A, 0x002D9A8A, 0x002D9A8A, 0x002D9A9F, + // Block 67, offset 0x10c0 + 0x00000002, 0x0030BE9D, 0x002FE69D, 0x00000002, 0x0030BE84, 0x00310084, + 0x00000002, 0x0030BE8A, 0x0031008A, 0x00000002, 0x4030E220, 0xAE603202, + 0x00000002, 0x0030E288, 0xAE603202, 0x00000002, 0x4030E220, 0xAE603502, + 0x00000002, 0x0030E288, 0xAE603502, 0x00000002, 0x4030E220, 0xAE603C02, + 0x00000002, 0x0030E288, 0xAE603C02, 0x00000002, 0x4030E220, 0xAE604302, + 0x00000002, 0x4030E220, 0xAE604702, 0x00000002, 0x0030E288, 0xAE604702, + 0x00000002, 0x4030E220, 0xAE605202, 0x00000002, 0x0030E288, 0xAE605202, + 0x00000002, 0x4030E220, 0xADC07002, 0x00000002, 0x0030E288, 0xADC07002, + 0x00000002, 0x0030E29D, 0x002C3A9D, 0x00000002, 0x4030F620, 0xAE604702, + 0x00000002, 0x0030F688, 0xAE604702, 0x00000002, 0x4030F620, 0xAE605202, + 0x00000002, 0x0030F688, 0xAE605202, 0x00000002, + // Block 68, offset 0x1100 + 0x40310020, 0xAE603202, 0x00000002, 0x00310088, 0xAE603202, 0x00000002, + 0x40310020, 0xAE603502, 0x00000002, 0x00310088, 0xAE603502, 0x00000002, + 0x40310020, 0xAE603C02, 0x00000002, 0x00310088, 0xAE603C02, 0x00000002, + 0x40310020, 0xAE604302, 0x00000002, 0x40310020, 0xAE604702, 0x00000002, + 0x00310088, 0xAE604702, 0x00000002, 0x40310020, 0xAE604E02, 0x00000002, + 0x00310088, 0xAE604E02, 0x00000002, 0x40310020, 0xAE605202, 0x00000002, + 0x00310088, 0xAE605202, 0x00000002, 0x40310020, 0xAE605B02, 0x00000002, + 0x00310088, 0xAE605B02, 0x00000002, 0x40310020, 0xAE606402, 0x00000002, + 0x00310088, 0xAE606402, 0x00000002, 0x40310020, 0xADC07002, 0x00000002, + 0x00310088, 0xADC07002, 0x00000002, 0x40312A20, 0xAE603202, 0x00000002, + 0x00312A88, 0xAE603202, 0x00000002, 0x40312A20, + // Block 69, offset 0x1140 + 0xAE603C02, 0x00000002, 0x00312A88, 0xAE603C02, 0x00000002, 0x40312A20, + 0xAE604102, 0x00000002, 0x00312A88, 0xAE604102, 0x00000002, 0x40312A20, + 0xAE605202, 0x00000002, 0x00312A88, 0xAE605202, 0x00000002, 0x40312A20, + 0xADC07002, 0x00000002, 0x00312A88, 0xADC07002, 0x00000002, 0x40312A20, + 0xADC07B02, 0x00000002, 0x00312A88, 0xADC07B02, 0x00000002, 0x00312A84, + 0x0030E284, 0x00000002, 0x40316420, 0xAE604102, 0x00000002, 0x00316488, + 0xAE604102, 0x00000002, 0x40325220, 0xAE602202, 0x00000002, 0x00325288, + 0xAE602202, 0x00000003, 0x40325220, 0xAE602202, 0xAE603202, 0x00000003, + 0x00325288, 0xAE602202, 0xAE603202, 0x00000004, 0x40325220, 0xAE602202, + 0xAE603202, 0xAF007F02, 0x00000004, 0x00325288, 0xAE602202, 0xAE603202, + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602202, + // Block 70, offset 0x1180 + 0xAE603502, 0x00000003, 0x00325288, 0xAE602202, 0xAE603502, 0x00000004, + 0x40325220, 0xAE602202, 0xAE603502, 0xAF007F02, 0x00000004, 0x00325288, + 0xAE602202, 0xAE603502, 0xAF007F02, 0x00000003, 0x40325220, 0xAE602202, + 0xAE604502, 0x00000003, 0x00325288, 0xAE602202, 0xAE604502, 0x00000004, + 0x40325220, 0xAE602202, 0xAE604502, 0xAF007F02, 0x00000004, 0x00325288, + 0xAE602202, 0xAE604502, 0xAF007F02, 0x00000003, 0x40325220, 0xAE602202, + 0xAF007F02, 0x00000003, 0x00325288, 0xAE602202, 0xAF007F02, 0x00000002, + 0x40325220, 0xAE602A02, 0x00000002, 0x00325288, 0xAE602A02, 0x00000003, + 0x40325220, 0xAE602A02, 0xAE603202, 0x00000003, 0x00325288, 0xAE602A02, + 0xAE603202, 0x00000004, 0x40325220, 0xAE602A02, 0xAE603202, 0xAF007F02, + 0x00000004, 0x00325288, 0xAE602A02, 0xAE603202, + // Block 71, offset 0x11c0 + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602A02, 0xAE603502, 0x00000003, + 0x00325288, 0xAE602A02, 0xAE603502, 0x00000004, 0x40325220, 0xAE602A02, + 0xAE603502, 0xAF007F02, 0x00000004, 0x00325288, 0xAE602A02, 0xAE603502, + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602A02, 0xAE604502, 0x00000003, + 0x00325288, 0xAE602A02, 0xAE604502, 0x00000004, 0x40325220, 0xAE602A02, + 0xAE604502, 0xAF007F02, 0x00000004, 0x00325288, 0xAE602A02, 0xAE604502, + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602A02, 0xAF007F02, 0x00000003, + 0x00325288, 0xAE602A02, 0xAF007F02, 0x00000002, 0x40325220, 0xAE603202, + 0x00000002, 0x00325288, 0xAE603202, 0x00000003, 0x40325220, 0xAE603202, + 0xAF007F02, 0x00000002, 0x40325220, 0xAE603502, 0x00000002, 0x00325288, + 0xAE603502, 0x00000003, 0x40325220, 0xAE603502, + // Block 72, offset 0x1200 + 0xAF007F02, 0x00000002, 0x40325220, 0xAE603702, 0x00000002, 0x00325288, + 0xAE603702, 0x00000002, 0x40325220, 0xAE604502, 0x00000003, 0x40325220, + 0xAE604502, 0xAF007F02, 0x00000002, 0x40325220, 0xAE605B02, 0x00000002, + 0x00325288, 0xAE605B02, 0x00000002, 0x40325220, 0xAF007F02, 0x00000002, + 0x00325288, 0xAF007F02, 0x00000002, 0x40325C20, 0xAE602202, 0x00000002, + 0x00325C88, 0xAE602202, 0x00000003, 0x40325C20, 0xAE602202, 0xAE603202, + 0x00000003, 0x00325C88, 0xAE602202, 0xAE603202, 0x00000003, 0x40325C20, + 0xAE602202, 0xAE603502, 0x00000003, 0x00325C88, 0xAE602202, 0xAE603502, + 0x00000002, 0x40325C20, 0xAE602A02, 0x00000002, 0x00325C88, 0xAE602A02, + 0x00000003, 0x40325C20, 0xAE602A02, 0xAE603202, 0x00000003, 0x00325C88, + 0xAE602A02, 0xAE603202, 0x00000003, 0x40325C20, + // Block 73, offset 0x1240 + 0xAE602A02, 0xAE603502, 0x00000003, 0x00325C88, 0xAE602A02, 0xAE603502, + 0x00000002, 0x40325C20, 0xAE603202, 0x00000002, 0x00325C88, 0xAE603202, + 0x00000002, 0x40325C20, 0xAE603502, 0x00000002, 0x00325C88, 0xAE603502, + 0x00000002, 0x40326820, 0xAE602202, 0x00000002, 0x00326888, 0xAE602202, + 0x00000003, 0x40326820, 0xAE602202, 0xAE603202, 0x00000003, 0x00326888, + 0xAE602202, 0xAE603202, 0x00000004, 0x40326820, 0xAE602202, 0xAE603202, + 0xAF007F02, 0x00000004, 0x00326888, 0xAE602202, 0xAE603202, 0xAF007F02, + 0x00000003, 0x40326820, 0xAE602202, 0xAE603502, 0x00000003, 0x00326888, + 0xAE602202, 0xAE603502, 0x00000004, 0x40326820, 0xAE602202, 0xAE603502, + 0xAF007F02, 0x00000004, 0x00326888, 0xAE602202, 0xAE603502, 0xAF007F02, + 0x00000003, 0x40326820, 0xAE602202, 0xAE604502, + // Block 74, offset 0x1280 + 0x00000003, 0x00326888, 0xAE602202, 0xAE604502, 0x00000004, 0x40326820, + 0xAE602202, 0xAE604502, 0xAF007F02, 0x00000004, 0x00326888, 0xAE602202, + 0xAE604502, 0xAF007F02, 0x00000003, 0x40326820, 0xAE602202, 0xAF007F02, + 0x00000003, 0x00326888, 0xAE602202, 0xAF007F02, 0x00000002, 0x40326820, + 0xAE602A02, 0x00000002, 0x00326888, 0xAE602A02, 0x00000003, 0x40326820, + 0xAE602A02, 0xAE603202, 0x00000003, 0x00326888, 0xAE602A02, 0xAE603202, + 0x00000004, 0x40326820, 0xAE602A02, 0xAE603202, 0xAF007F02, 0x00000004, + 0x00326888, 0xAE602A02, 0xAE603202, 0xAF007F02, 0x00000003, 0x40326820, + 0xAE602A02, 0xAE603502, 0x00000003, 0x00326888, 0xAE602A02, 0xAE603502, + 0x00000004, 0x40326820, 0xAE602A02, 0xAE603502, 0xAF007F02, 0x00000004, + 0x00326888, 0xAE602A02, 0xAE603502, 0xAF007F02, + // Block 75, offset 0x12c0 + 0x00000003, 0x40326820, 0xAE602A02, 0xAE604502, 0x00000003, 0x00326888, + 0xAE602A02, 0xAE604502, 0x00000004, 0x40326820, 0xAE602A02, 0xAE604502, + 0xAF007F02, 0x00000004, 0x00326888, 0xAE602A02, 0xAE604502, 0xAF007F02, + 0x00000003, 0x40326820, 0xAE602A02, 0xAF007F02, 0x00000003, 0x00326888, + 0xAE602A02, 0xAF007F02, 0x00000002, 0x40326820, 0xAE603202, 0x00000002, + 0x00326888, 0xAE603202, 0x00000003, 0x40326820, 0xAE603202, 0xAF007F02, + 0x00000002, 0x40326820, 0xAE603502, 0x00000002, 0x00326888, 0xAE603502, + 0x00000003, 0x40326820, 0xAE603502, 0xAF007F02, 0x00000002, 0x40326820, + 0xAE604502, 0x00000003, 0x40326820, 0xAE604502, 0xAF007F02, 0x00000002, + 0x40326820, 0xAF007F02, 0x00000002, 0x00326888, 0xAF007F02, 0x00000002, + 0x40326C20, 0xAE602202, 0x00000002, 0x00326C88, + // Block 76, offset 0x1300 + 0xAE602202, 0x00000003, 0x40326C20, 0xAE602202, 0xAE603202, 0x00000003, + 0x00326C88, 0xAE602202, 0xAE603202, 0x00000003, 0x40326C20, 0xAE602202, + 0xAE603502, 0x00000003, 0x00326C88, 0xAE602202, 0xAE603502, 0x00000003, + 0x40326C20, 0xAE602202, 0xAE604502, 0x00000003, 0x00326C88, 0xAE602202, + 0xAE604502, 0x00000002, 0x40326C20, 0xAE602A02, 0x00000002, 0x00326C88, + 0xAE602A02, 0x00000003, 0x40326C20, 0xAE602A02, 0xAE603202, 0x00000003, + 0x00326C88, 0xAE602A02, 0xAE603202, 0x00000003, 0x40326C20, 0xAE602A02, + 0xAE603502, 0x00000003, 0x00326C88, 0xAE602A02, 0xAE603502, 0x00000003, + 0x40326C20, 0xAE602A02, 0xAE604502, 0x00000003, 0x00326C88, 0xAE602A02, + 0xAE604502, 0x00000002, 0x40326C20, 0xAE603202, 0x00000002, 0x00326C88, + 0xAE603202, 0x00000002, 0x40326C20, 0xAE603502, + // Block 77, offset 0x1340 + 0x00000002, 0x00326C88, 0xAE603502, 0x00000002, 0x40326C20, 0xAE603702, + 0x00000002, 0x00326C88, 0xAE603702, 0x00000002, 0x40326C20, 0xAE604502, + 0x00000002, 0x40326C20, 0xAE604702, 0x00000002, 0x00326C88, 0xAE604702, + 0x00000003, 0x40326C20, 0xAE604702, 0xAE603202, 0x00000003, 0x40326C20, + 0xAE604702, 0xAE603502, 0x00000003, 0x40326C20, 0xAE604702, 0xAE604502, + 0x00000002, 0x40326C20, 0xAE605B02, 0x00000002, 0x00326C88, 0xAE605B02, + 0x00000003, 0x00327084, 0x00325284, 0x00326C84, 0x00000003, 0x0032708A, + 0x00325284, 0x00326C84, 0x00000002, 0x40327C20, 0xAE602202, 0x00000002, + 0x00327C88, 0xAE602202, 0x00000003, 0x40327C20, 0xAE602202, 0xAE603202, + 0x00000003, 0x00327C88, 0xAE602202, 0xAE603202, 0x00000003, 0x40327C20, + 0xAE602202, 0xAE603502, 0x00000003, 0x00327C88, + // Block 78, offset 0x1380 + 0xAE602202, 0xAE603502, 0x00000002, 0x40327C20, 0xAE602A02, 0x00000002, + 0x00327C88, 0xAE602A02, 0x00000003, 0x40327C20, 0xAE602A02, 0xAE603202, + 0x00000003, 0x00327C88, 0xAE602A02, 0xAE603202, 0x00000003, 0x40327C20, + 0xAE602A02, 0xAE603502, 0x00000003, 0x00327C88, 0xAE602A02, 0xAE603502, + 0x00000002, 0x40327C20, 0xAE603202, 0x00000002, 0x00327C88, 0xAE603202, + 0x00000002, 0x40327C20, 0xAE603502, 0x00000002, 0x00327C88, 0xAE603502, + 0x00000002, 0x40328820, 0xAE602202, 0x00000002, 0x40328820, 0xAE602A02, + 0x00000002, 0x00328888, 0xAE602A02, 0x00000002, 0x40329820, 0xAE602202, + 0x00000003, 0x40329820, 0xAE602202, 0xAE603202, 0x00000003, 0x40329820, + 0xAE602202, 0xAE603502, 0x00000003, 0x40329820, 0xAE602202, 0xAE604502, + 0x00000002, 0x40329820, 0xAE602A02, 0x00000002, + // Block 79, offset 0x13c0 + 0x00329888, 0xAE602A02, 0x00000003, 0x40329820, 0xAE602A02, 0xAE603202, + 0x00000003, 0x00329888, 0xAE602A02, 0xAE603202, 0x00000003, 0x40329820, + 0xAE602A02, 0xAE603502, 0x00000003, 0x00329888, 0xAE602A02, 0xAE603502, + 0x00000003, 0x40329820, 0xAE602A02, 0xAE604502, 0x00000003, 0x00329888, + 0xAE602A02, 0xAE604502, 0x00000002, 0x40329820, 0xAE603202, 0x00000002, + 0x00329888, 0xAE603202, 0x00000002, 0x40329820, 0xAE603502, 0x00000002, + 0x00329888, 0xAE603502, 0x00000002, 0x40329820, 0xAE603702, 0x00000002, + 0x00329888, 0xAE603702, 0x00000002, 0x40329820, 0xAE604502, 0x00000002, + 0x40329820, 0xAE604702, 0x00000002, 0x00329888, 0xAE604702, 0x00000003, + 0x40329820, 0xAE604702, 0xAE603202, 0x00000003, 0x40329820, 0xAE604702, + 0xAE603502, 0x00000003, 0x40329820, 0xAE604702, + // Block 80, offset 0x1400 + 0xAE604502, 0x00000002, 0x40329820, 0xAE605B02, 0x00000002, 0x00329888, + 0xAE605B02, 0x00000002, 0x4032A220, 0xAE602202, 0x00000002, 0x0032A288, + 0xAE602202, 0x00000003, 0x4032A220, 0xAE602202, 0xAE603202, 0x00000003, + 0x0032A288, 0xAE602202, 0xAE603202, 0x00000004, 0x4032A220, 0xAE602202, + 0xAE603202, 0xAF007F02, 0x00000004, 0x0032A288, 0xAE602202, 0xAE603202, + 0xAF007F02, 0x00000003, 0x4032A220, 0xAE602202, 0xAE603502, 0x00000003, + 0x0032A288, 0xAE602202, 0xAE603502, 0x00000004, 0x4032A220, 0xAE602202, + 0xAE603502, 0xAF007F02, 0x00000004, 0x0032A288, 0xAE602202, 0xAE603502, + 0xAF007F02, 0x00000003, 0x4032A220, 0xAE602202, 0xAE604502, 0x00000003, + 0x0032A288, 0xAE602202, 0xAE604502, 0x00000004, 0x4032A220, 0xAE602202, + 0xAE604502, 0xAF007F02, 0x00000004, 0x0032A288, + // Block 81, offset 0x1440 + 0xAE602202, 0xAE604502, 0xAF007F02, 0x00000003, 0x4032A220, 0xAE602202, + 0xAF007F02, 0x00000003, 0x0032A288, 0xAE602202, 0xAF007F02, 0x00000002, + 0x4032A220, 0xAE602A02, 0x00000002, 0x0032A288, 0xAE602A02, 0x00000003, + 0x4032A220, 0xAE602A02, 0xAE603202, 0x00000003, 0x0032A288, 0xAE602A02, + 0xAE603202, 0x00000004, 0x4032A220, 0xAE602A02, 0xAE603202, 0xAF007F02, + 0x00000004, 0x0032A288, 0xAE602A02, 0xAE603202, 0xAF007F02, 0x00000003, + 0x4032A220, 0xAE602A02, 0xAE603502, 0x00000003, 0x0032A288, 0xAE602A02, + 0xAE603502, 0x00000004, 0x4032A220, 0xAE602A02, 0xAE603502, 0xAF007F02, + 0x00000004, 0x0032A288, 0xAE602A02, 0xAE603502, 0xAF007F02, 0x00000003, + 0x4032A220, 0xAE602A02, 0xAE604502, 0x00000003, 0x0032A288, 0xAE602A02, + 0xAE604502, 0x00000004, 0x4032A220, 0xAE602A02, + // Block 82, offset 0x1480 + 0xAE604502, 0xAF007F02, 0x00000004, 0x0032A288, 0xAE602A02, 0xAE604502, + 0xAF007F02, 0x00000003, 0x4032A220, 0xAE602A02, 0xAF007F02, 0x00000003, + 0x0032A288, 0xAE602A02, 0xAF007F02, 0x00000002, 0x4032A220, 0xAE603202, + 0x00000002, 0x0032A288, 0xAE603202, 0x00000003, 0x4032A220, 0xAE603202, + 0xAF007F02, 0x00000002, 0x4032A220, 0xAE603502, 0x00000002, 0x0032A288, + 0xAE603502, 0x00000003, 0x4032A220, 0xAE603502, 0xAF007F02, 0x00000002, + 0x4032A220, 0xAE604502, 0x00000003, 0x4032A220, 0xAE604502, 0xAF007F02, + 0x00000002, 0x4032A220, 0xAF007F02, 0x00000002, 0x0032A288, 0xAF007F02, + 0x00000003, 0x0032C084, 0x0032AA84, 0x0032BE84, 0x00000002, 0x00336284, + 0xA0013A04, 0x00000002, 0x0033628A, 0xA0013A04, 0x00000002, 0x4033B220, + 0xAE603502, 0x00000002, 0x0033B288, 0xAE603502, + // Block 83, offset 0x14c0 + 0x00000002, 0x4033B220, 0xAE604702, 0x00000002, 0x0033B288, 0xAE604702, + 0x00000002, 0x4033CA20, 0xAE603702, 0x00000002, 0x0033CA88, 0xAE603702, + 0x00000002, 0x40341420, 0xAE603502, 0x00000002, 0x00341488, 0xAE603502, + 0x00000002, 0x40341420, 0xAE605B02, 0x00000002, 0x00341488, 0xAE605B02, + 0x00000002, 0x84E61A9D, 0x84E61AA6, 0x00000002, 0x40357220, 0xAE605B02, + 0x00000002, 0x00357288, 0xAE605B02, 0x00000002, 0x40389020, 0xA1108C02, + 0x00000002, 0x40389020, 0xA1208D02, 0x00000002, 0x40389020, 0xA1509202, + 0x00000002, 0x40389220, 0xA1509202, 0x00000002, 0x40389220, 0xA1709502, + 0x00000002, 0x40389420, 0xA1509202, 0x00000002, 0x40389620, 0xA1509202, + 0x00000002, 0x40389820, 0xA1509202, 0x00000002, 0x40389A20, 0xA1308E02, + 0x00000002, 0x40389A20, 0xA1509202, 0x00000002, + // Block 84, offset 0x1500 + 0x00389A84, 0x00389A84, 0x00000002, 0x00389A84, 0x0038A284, 0x00000002, + 0x40389C20, 0xA1509202, 0x00000002, 0x4038A020, 0xA1509202, 0x00000002, + 0x4038A220, 0xA0E08902, 0x00000002, 0x4038A220, 0xA1509202, 0x00000002, + 0x0038A284, 0x0038A284, 0x00000003, 0x0038A284, 0x0038A284, 0xA1108C02, + 0x00000002, 0x4038A420, 0xA1509202, 0x00000002, 0x0038A499, 0xA1509202, + 0x00000002, 0x4038A420, 0xA1709502, 0x00000002, 0x4038A620, 0xA1509202, + 0x00000002, 0x4038A820, 0xA1509202, 0x00000002, 0x4038AA20, 0xA1509202, + 0x00000002, 0x4038AC20, 0xA1509202, 0x00000002, 0x4038B020, 0xA1509202, + 0x00000002, 0x0038B099, 0xA1509202, 0x00000002, 0x4038B020, 0xA1709502, + 0x00000002, 0x4038B220, 0xA1509202, 0x00000002, 0x4038B420, 0xA1509202, + 0x00000002, 0x4038B620, 0xA1509202, 0x00000002, + // Block 85, offset 0x1540 + 0x4038B820, 0xA1909002, 0x00000002, 0x4038B820, 0xA1809102, 0x00000002, + 0x4038B820, 0xA1509202, 0x00000003, 0x4038B820, 0xA1509202, 0xA1909002, + 0x00000003, 0x4038B820, 0xA1509202, 0xA1809102, 0x00000002, 0x4038BA20, + 0xA1509202, 0x00000002, 0x00391C84, 0xA0013A04, 0x00000002, 0x00393099, + 0x00393899, 0x00000002, 0x0039309A, 0x0039389A, 0x00000002, 0x00393097, + 0x00396497, 0x00000002, 0x0039309A, 0x0039649A, 0x00000002, 0x00393097, + 0x00397297, 0x00000002, 0x0039309A, 0x0039729A, 0x00000002, 0x00393097, + 0x00397497, 0x00000002, 0x00393099, 0x0039A499, 0x00000002, 0x00393099, + 0x0039A699, 0x00000002, 0x00393097, 0x003A4E97, 0x00000002, 0x00393098, + 0x003A4E98, 0x00000002, 0x00393099, 0x003A4E99, 0x00000002, 0x0039309A, + 0x003A4E9A, 0x00000002, 0x00393099, 0x003A5699, + // Block 86, offset 0x1580 + 0x00000002, 0x00393097, 0x003A6897, 0x00000002, 0x00393098, 0x003A6898, + 0x00000002, 0x00393099, 0x003A7299, 0x00000002, 0x0039309A, 0x003A729A, + 0x00000002, 0x00393099, 0x003A7499, 0x00000002, 0x0039309A, 0x003A749A, + 0x00000002, 0x00393099, 0x003A7A99, 0x00000002, 0x0039309A, 0x003A7A9A, + 0x00000002, 0x00393099, 0x003A7C99, 0x00000002, 0x0039309A, 0x003A7C9A, + 0x00000002, 0x00393099, 0x003A7E99, 0x00000002, 0x0039309A, 0x003A7E9A, + 0x00000002, 0x00393097, 0x003A8E97, 0x00000002, 0x00393099, 0x003A8E99, + 0x00000002, 0x00393099, 0x003A8E99, 0x00000002, 0x0039309A, 0x003A8E9A, + 0x00000002, 0x0039309A, 0x003A8E9A, 0x00000002, 0x00393099, 0x003A9099, + 0x00000002, 0x0039309A, 0x003A909A, 0x00000002, 0x00393097, 0x003A9897, + 0x00000002, 0x00393099, 0x003A9899, 0x00000002, + // Block 87, offset 0x15c0 + 0x0039309A, 0x003A989A, 0x00000004, 0x0039389A, 0x003A1A9A, 0x00393C9A, + 0x0039A49A, 0x00000004, 0x0039389A, 0x003A409A, 0x003A409A, 0x003A689A, + 0x00000003, 0x00393C99, 0x00397299, 0x003A9099, 0x00000003, 0x00393C99, + 0x00397499, 0x003A9099, 0x00000003, 0x00395697, 0x00396497, 0x003A4E97, + 0x00000003, 0x00395699, 0x00396499, 0x003A8E99, 0x00000003, 0x00395699, + 0x00396499, 0x003A9099, 0x00000003, 0x00395697, 0x00397297, 0x00396497, + 0x00000003, 0x00395699, 0x00397299, 0x00396499, 0x00000003, 0x00395697, + 0x00397297, 0x003A4E97, 0x00000003, 0x00395697, 0x00397497, 0x003A4E97, + 0x00000003, 0x00395699, 0x00397499, 0x003A8E99, 0x00000003, 0x00395699, + 0x00397499, 0x003A9099, 0x00000003, 0x00395697, 0x003A4E97, 0x00396497, + 0x00000003, 0x00395697, 0x003A4E97, 0x00397297, + // Block 88, offset 0x1600 + 0x00000003, 0x00395697, 0x003A4E97, 0x00397497, 0x00000003, 0x00395699, + 0x003A4E99, 0x003A8E99, 0x00000003, 0x00395699, 0x003A4E99, 0x003A9099, + 0x00000003, 0x00396499, 0x00397299, 0x003A8E99, 0x00000003, 0x00396499, + 0x00397299, 0x003A9099, 0x00000008, 0x0039649A, 0x003A409A, 0x0002129A, + 0x0039649A, 0x003A409A, 0x0039389A, 0x003A409A, 0x003A689A, 0x00000003, + 0x00396497, 0x003A4E97, 0x00397297, 0x00000003, 0x00396499, 0x003A4E99, + 0x00397299, 0x00000003, 0x00396499, 0x003A4E99, 0x003A8E99, 0x00000003, + 0x00396499, 0x003A4E99, 0x003A9099, 0x00000003, 0x00397299, 0x00396499, + 0x003A9099, 0x00000003, 0x00397299, 0x003A4E99, 0x003A8E99, 0x00000003, + 0x00397299, 0x003A4E99, 0x003A9099, 0x00000004, 0x0039A49A, 0x0039C69A, + 0x003A749A, 0x003A409A, 0x00000003, 0x0039C697, + // Block 89, offset 0x1640 + 0x00396497, 0x00397297, 0x00000003, 0x0039C699, 0x00396499, 0x003A8E99, + 0x00000003, 0x0039C697, 0x00397297, 0x00396497, 0x00000003, 0x0039C699, + 0x00397499, 0x003A8E99, 0x00000003, 0x0039C699, 0x00397499, 0x003A9099, + 0x00000003, 0x0039C697, 0x003A4E97, 0x00396497, 0x00000003, 0x0039C697, + 0x003A4E97, 0x00397297, 0x00000003, 0x0039C699, 0x003A4E99, 0x00397299, + 0x00000003, 0x0039C697, 0x003A4E97, 0x003A4E97, 0x00000003, 0x0039C699, + 0x003A4E99, 0x003A4E99, 0x00000003, 0x0039C899, 0x00396499, 0x003A9099, + 0x00000003, 0x0039C897, 0x00397297, 0x003A4E97, 0x00000003, 0x0039C899, + 0x00397299, 0x003A4E99, 0x00000003, 0x0039C899, 0x00397299, 0x003A9099, + 0x00000003, 0x0039C897, 0x003A4E97, 0x00397497, 0x00000003, 0x0039C899, + 0x003A4E99, 0x00397499, 0x00000003, 0x0039C897, + // Block 90, offset 0x1680 + 0x003A4E97, 0x003A4E97, 0x00000003, 0x0039C899, 0x003A4E99, 0x003A4E99, + 0x00000003, 0x0039DC97, 0x00397297, 0x00397297, 0x00000003, 0x0039DC99, + 0x00397299, 0x00397299, 0x00000003, 0x0039DC99, 0x00397299, 0x003A9099, + 0x00000004, 0x0039DC9A, 0x003A409A, 0x0039EE9A, 0x003A4E9A, 0x00000003, + 0x0039DC9A, 0x003A409A, 0x003A8E9A, 0x00000012, 0x0039DC9A, 0x003A409A, + 0x003A8E9A, 0x0002129A, 0x0039389A, 0x003A409A, 0x003A409A, 0x003A689A, + 0x0002129A, 0x0039EE9A, 0x003A409A, 0x003A909A, 0x003A689A, 0x0002129A, + 0x003A749A, 0x0039C69A, 0x003A409A, 0x003A4E9A, 0x00000003, 0x0039DC9A, + 0x003A409A, 0x003AAA9A, 0x00000003, 0x0039DC97, 0x003A4E97, 0x003A4E97, + 0x00000003, 0x0039DC99, 0x003A4E99, 0x003A4E99, 0x00000003, 0x0039DE99, + 0x00397299, 0x003A8E99, 0x00000003, 0x0039DE99, + // Block 91, offset 0x16c0 + 0x00397299, 0x003A9099, 0x00000003, 0x0039DE97, 0x00397497, 0x003A4E97, + 0x00000003, 0x0039DE99, 0x00397499, 0x003A4E99, 0x00000003, 0x0039E697, + 0x003A4E97, 0x00397297, 0x00000003, 0x0039E699, 0x003A4E99, 0x00397299, + 0x00000003, 0x0039E697, 0x003A4E97, 0x003A4E97, 0x00000003, 0x0039E699, + 0x003A4E99, 0x003A9099, 0x00000003, 0x0039EE97, 0x00396497, 0x003A4E97, + 0x00000003, 0x0039EE99, 0x00396499, 0x003A4E99, 0x00000004, 0x0039EE9A, + 0x003A409A, 0x003A909A, 0x003A689A, 0x00000003, 0x0039EE97, 0x003A4E97, + 0x003A4E97, 0x00000003, 0x0039EE99, 0x003A4E99, 0x003A4E99, 0x00000003, + 0x0039EE99, 0x003A4E99, 0x003A8E99, 0x00000003, 0x0039EE99, 0x003A4E99, + 0x003A9099, 0x00000003, 0x0039F099, 0x003A4E99, 0x003A4E99, 0x00000003, + 0x0039F099, 0x003A4E99, 0x003A8E99, 0x00000003, + // Block 92, offset 0x1700 + 0x0039F099, 0x003A4E99, 0x003A9099, 0x00000003, 0x0039FC97, 0x00397497, + 0x003A4E97, 0x00000003, 0x0039FC99, 0x00397499, 0x003A4E99, 0x00000003, + 0x0039FC99, 0x003A4E99, 0x003A9099, 0x00000003, 0x003A129A, 0x003A409A, + 0x003AAA9A, 0x00000003, 0x003A1297, 0x003A4E97, 0x00397297, 0x00000003, + 0x003A1299, 0x003A4E99, 0x00397299, 0x00000003, 0x003A1299, 0x003A4E99, + 0x003A4E99, 0x00000003, 0x003A1299, 0x003A4E99, 0x003A9099, 0x00000003, + 0x003A1A97, 0x003A4E97, 0x003A4E97, 0x00000003, 0x003A1A99, 0x003A4E99, + 0x003A4E99, 0x00000003, 0x003A1A99, 0x003A4E99, 0x003A9099, 0x00000002, + 0x003A4099, 0x00391E99, 0x00000002, 0x003A409A, 0x00391E9A, 0x00000002, + 0x003A4099, 0x00392099, 0x00000002, 0x003A409A, 0x0039209A, 0x00000002, + 0x003A4099, 0x00392899, 0x00000002, 0x003A409A, + // Block 93, offset 0x1740 + 0x0039289A, 0x00000003, 0x003A4097, 0x00396497, 0x00396497, 0x00000003, + 0x003A4099, 0x00396499, 0x00396499, 0x00000003, 0x003A4097, 0x00396497, + 0x003A4E97, 0x00000003, 0x003A4099, 0x00396499, 0x003A4E99, 0x00000003, + 0x003A4099, 0x00396499, 0x003A9099, 0x00000003, 0x003A4097, 0x00397297, + 0x003A4E97, 0x00000003, 0x003A4099, 0x00397299, 0x003A4E99, 0x00000003, + 0x003A4099, 0x00397299, 0x003A8E99, 0x00000003, 0x003A4099, 0x00397299, + 0x003A9099, 0x00000003, 0x003A4097, 0x00397497, 0x003A4E97, 0x00000003, + 0x003A4099, 0x00397499, 0x003A4E99, 0x00000003, 0x003A4097, 0x003A4E97, + 0x00397297, 0x00000003, 0x003A4099, 0x003A4E99, 0x00397299, 0x00000003, + 0x003A4099, 0x003A4E99, 0x003A9099, 0x00000002, 0x003A4E84, 0xA0013A04, + 0x00000003, 0x003A4E97, 0x00396497, 0x00397297, + // Block 94, offset 0x1780 + 0x00000003, 0x003A4E97, 0x00396497, 0x00397497, 0x00000003, 0x003A4E97, + 0x00396497, 0x003A4E97, 0x00000003, 0x003A4E99, 0x00396499, 0x003A9099, + 0x00000003, 0x003A4E97, 0x00397297, 0x00396497, 0x00000003, 0x003A4E97, + 0x00397297, 0x003A4E97, 0x00000004, 0x003A4E9A, 0x0039729A, 0x003A4E9A, + 0x0039889A, 0x00000003, 0x003A4E99, 0x00397299, 0x003A9099, 0x00000003, + 0x003A4E97, 0x00397497, 0x00396497, 0x00000003, 0x003A4E97, 0x00397497, + 0x003A4E97, 0x00000003, 0x003A4E99, 0x00397499, 0x003A9099, 0x00000003, + 0x003A4E99, 0x003A4E99, 0x003A9099, 0x00000003, 0x003A5697, 0x00396497, + 0x00397297, 0x00000003, 0x003A5699, 0x00396499, 0x00397299, 0x00000003, + 0x003A5697, 0x00396497, 0x003A4E97, 0x00000003, 0x003A5699, 0x00396499, + 0x003A4E99, 0x00000003, 0x003A5699, 0x00396499, + // Block 95, offset 0x17c0 + 0x003A8E99, 0x00000003, 0x003A5699, 0x00396499, 0x003A9099, 0x00000003, + 0x003A5697, 0x00397297, 0x003A4E97, 0x00000003, 0x003A5699, 0x00397299, + 0x003A8E99, 0x00000003, 0x003A5699, 0x00397299, 0x003A9099, 0x00000003, + 0x003A5699, 0x003A4E99, 0x003A8E99, 0x00000003, 0x003A5699, 0x003A4E99, + 0x003A9099, 0x00000003, 0x003A6897, 0x003A4E97, 0x00396497, 0x00000003, + 0x003A6897, 0x003A4E97, 0x003A4E97, 0x00000002, 0x403A6C20, 0xAE60BE02, + 0x00000002, 0x403A7220, 0xAE60BE02, 0x00000004, 0x003A749A, 0x0039C69A, + 0x003A409A, 0x003A4E9A, 0x00000003, 0x003A9099, 0x00396499, 0x003A9099, + 0x00000003, 0x003A9099, 0x00397299, 0x003A9099, 0x00000003, 0x003A9097, + 0x003A4E97, 0x003A4E97, 0x00000003, 0x003A9099, 0x003A4E99, 0x003A4E99, + 0x00000003, 0x003A9099, 0x003A4E99, 0x003A9099, + // Block 96, offset 0x1800 + 0x00000002, 0x403AAA20, 0xAE60BE02, 0x00000002, 0x003AB284, 0xA0013C04, + 0x00000002, 0x003AB484, 0xA0013A04, 0x00000002, 0x003AB484, 0xA0013C04, + 0x00000002, 0x003AB884, 0xA0013C04, 0x00000002, 0x003AC484, 0xA0013A04, + 0x00000002, 0x003AD884, 0xA0013A04, 0x00000002, 0x003B9484, 0xA0013904, + 0x00000002, 0x003B9684, 0xA0013904, 0x00000002, 0x003B9A84, 0xA0013904, + 0x00000002, 0x403FEC20, 0xA070F102, 0x00000002, 0x403FEE20, 0xA070F102, + 0x00000002, 0x403FF020, 0xA070F102, 0x00000002, 0x403FFC20, 0xA070F102, + 0x00000002, 0x40400A20, 0xA070F102, 0x00000002, 0x40400E20, 0xA070F102, + 0x00000002, 0x40401A20, 0xA070F102, 0x00000002, 0x40401E20, 0xA070F102, + 0x00000002, 0x40402820, 0xA070F102, 0x00000002, 0x40402C20, 0xA070F102, + 0x00000002, 0x40403020, 0xA070F102, 0x00000002, + // Block 97, offset 0x1840 + 0x4040B020, 0xA070F102, 0x00000002, 0x4040B220, 0xA070F102, 0x00000002, + 0x0040B684, 0x0040F884, 0x00000002, 0x4040CA20, 0xA070F102, 0x00000002, + 0x40411620, 0xA070F102, 0x00000002, 0x40411E20, 0xA070F102, 0x00000002, + 0x40412020, 0xA070F102, 0x00000002, 0x40412A20, 0xA070F102, 0x00000002, + 0x40414620, 0xA070F102, 0x00000002, 0x40415420, 0xA070F102, 0x00000002, + 0x40422A20, 0xA070F102, 0x00000002, 0x40422C20, 0xA070F102, 0x00000002, + 0x00442284, 0x00449084, 0x00000002, 0x00443E84, 0x00449084, 0x00000002, + 0x00444884, 0x00449084, 0x00000002, 0x00445884, 0x00449084, 0x00000002, + 0x00445884, 0x00449084, 0x00000002, 0x00445A84, 0x00449084, 0x00000002, + 0x00446684, 0x00449084, 0x00000002, 0x4046AA20, 0xA070F102, 0x00000002, + 0x4046AC20, 0xA070F102, 0x00000002, 0x4046BE20, + // Block 98, offset 0x1880 + 0xA070F102, 0x00000002, 0x40491020, 0x40498420, 0x00000002, 0x40491020, + 0x40498620, 0x00000002, 0x40491020, 0x40498820, 0x00000002, 0x40491020, + 0x40498A20, 0x00000002, 0x40491020, 0x40498C20, 0x00000002, 0x40491220, + 0x40498420, 0x00000002, 0x40491220, 0x40498620, 0x00000002, 0x40491220, + 0x40498820, 0x00000002, 0x40491220, 0x40498A20, 0x00000002, 0x40491220, + 0x40498C20, 0x00000002, 0x40491420, 0x40498420, 0x00000002, 0x40491420, + 0x40498620, 0x00000002, 0x40491420, 0x40498820, 0x00000002, 0x40491420, + 0x40498A20, 0x00000002, 0x40491420, 0x40498C20, 0x00000002, 0x40491620, + 0x40498420, 0x00000002, 0x40491620, 0x40498620, 0x00000002, 0x40491620, + 0x40498820, 0x00000002, 0x40491620, 0x40498A20, 0x00000002, 0x40491620, + 0x40498C20, 0x00000002, 0x40491820, 0x40498420, + // Block 99, offset 0x18c0 + 0x00000002, 0x40491820, 0x40498620, 0x00000002, 0x40491820, 0x40498820, + 0x00000002, 0x40491820, 0x40498A20, 0x00000002, 0x40491820, 0x40498C20, + 0x00000002, 0x40491A20, 0x40498420, 0x00000002, 0x40491A20, 0x40498620, + 0x00000002, 0x40491A20, 0x40498820, 0x00000002, 0x40491A20, 0x40498A20, + 0x00000002, 0x40491A20, 0x40498C20, 0x00000002, 0x40491C20, 0x40498420, + 0x00000002, 0x40491C20, 0x40498620, 0x00000002, 0x40491C20, 0x40498820, + 0x00000002, 0x40491C20, 0x40498A20, 0x00000002, 0x40491C20, 0x40498C20, + 0x00000002, 0x40491E20, 0x40498420, 0x00000002, 0x40491E20, 0x40498620, + 0x00000002, 0x40491E20, 0x40498820, 0x00000002, 0x40491E20, 0x40498A20, + 0x00000002, 0x40491E20, 0x40498C20, 0x00000002, 0x40492020, 0x40498420, + 0x00000002, 0x40492020, 0x40498620, 0x00000002, + // Block 100, offset 0x1900 + 0x40492020, 0x40498820, 0x00000002, 0x40492020, 0x40498A20, 0x00000002, + 0x40492020, 0x40498C20, 0x00000002, 0x40492220, 0x40498420, 0x00000002, + 0x40492220, 0x40498620, 0x00000002, 0x40492220, 0x40498820, 0x00000002, + 0x40492220, 0x40498A20, 0x00000002, 0x40492220, 0x40498C20, 0x00000002, + 0x40492420, 0x40498420, 0x00000002, 0x40492420, 0x40498620, 0x00000002, + 0x40492420, 0x40498820, 0x00000002, 0x40492420, 0x40498A20, 0x00000002, + 0x40492420, 0x40498C20, 0x00000002, 0x40492620, 0x40498420, 0x00000002, + 0x40492620, 0x40498620, 0x00000002, 0x40492620, 0x40498820, 0x00000002, + 0x40492620, 0x40498A20, 0x00000002, 0x40492620, 0x40498C20, 0x00000002, + 0x40492820, 0x40498420, 0x00000002, 0x40492820, 0x40498620, 0x00000002, + 0x40492820, 0x40498820, 0x00000002, 0x40492820, + // Block 101, offset 0x1940 + 0x40498A20, 0x00000002, 0x40492820, 0x40498C20, 0x00000002, 0x40492A20, + 0x40498420, 0x00000002, 0x40492A20, 0x40498620, 0x00000002, 0x40492A20, + 0x40498820, 0x00000002, 0x40492A20, 0x40498A20, 0x00000002, 0x40492A20, + 0x40498C20, 0x00000002, 0x40492C20, 0x40498420, 0x00000002, 0x40492C20, + 0x40498620, 0x00000002, 0x40492C20, 0x40498820, 0x00000002, 0x40492C20, + 0x40498A20, 0x00000002, 0x40492C20, 0x40498C20, 0x00000002, 0x40492E20, + 0x40498420, 0x00000002, 0x40492E20, 0x40498620, 0x00000002, 0x40492E20, + 0x40498820, 0x00000002, 0x40492E20, 0x40498A20, 0x00000002, 0x40492E20, + 0x40498C20, 0x00000002, 0x40493020, 0x40498420, 0x00000002, 0x40493020, + 0x40498620, 0x00000002, 0x40493020, 0x40498820, 0x00000002, 0x40493020, + 0x40498A20, 0x00000002, 0x40493020, 0x40498C20, + // Block 102, offset 0x1980 + 0x00000002, 0x40493220, 0x40498420, 0x00000002, 0x40493220, 0x40498620, + 0x00000002, 0x40493220, 0x40498820, 0x00000002, 0x40493220, 0x40498A20, + 0x00000002, 0x40493220, 0x40498C20, 0x00000002, 0x40493420, 0x40498420, + 0x00000002, 0x40493420, 0x40498620, 0x00000002, 0x40493420, 0x40498820, + 0x00000002, 0x40493420, 0x40498A20, 0x00000002, 0x40493420, 0x40498C20, + 0x00000002, 0x40493620, 0x40498420, 0x00000002, 0x40493620, 0x40498620, + 0x00000002, 0x40493620, 0x40498820, 0x00000002, 0x40493620, 0x40498A20, + 0x00000002, 0x40493620, 0x40498C20, 0x00000002, 0x40493820, 0x40498420, + 0x00000002, 0x40493820, 0x40498620, 0x00000002, 0x40493820, 0x40498820, + 0x00000002, 0x40493820, 0x40498A20, 0x00000002, 0x40493820, 0x40498C20, + 0x00000002, 0x40493A20, 0x40498420, 0x00000002, + // Block 103, offset 0x19c0 + 0x40493A20, 0x40498620, 0x00000002, 0x40493A20, 0x40498820, 0x00000002, + 0x40493A20, 0x40498A20, 0x00000002, 0x40493A20, 0x40498C20, 0x00000002, + 0x40493C20, 0x40498420, 0x00000002, 0x40493C20, 0x40498620, 0x00000002, + 0x40493C20, 0x40498820, 0x00000002, 0x40493C20, 0x40498A20, 0x00000002, + 0x40493C20, 0x40498C20, 0x00000002, 0x40493E20, 0x40498420, 0x00000002, + 0x40493E20, 0x40498620, 0x00000002, 0x40493E20, 0x40498820, 0x00000002, + 0x40493E20, 0x40498A20, 0x00000002, 0x40493E20, 0x40498C20, 0x00000002, + 0x40494020, 0x40498420, 0x00000002, 0x40494020, 0x40498620, 0x00000002, + 0x40494020, 0x40498820, 0x00000002, 0x40494020, 0x40498A20, 0x00000002, + 0x40494020, 0x40498C20, 0x00000002, 0x40494220, 0x40498420, 0x00000002, + 0x40494220, 0x40498620, 0x00000002, 0x40494220, + // Block 104, offset 0x1a00 + 0x40498820, 0x00000002, 0x40494220, 0x40498A20, 0x00000002, 0x40494220, + 0x40498C20, 0x00000002, 0x40494420, 0x40498420, 0x00000002, 0x40494420, + 0x40498620, 0x00000002, 0x40494420, 0x40498820, 0x00000002, 0x40494420, + 0x40498A20, 0x00000002, 0x40494420, 0x40498C20, 0x00000002, 0x40494620, + 0x40498420, 0x00000002, 0x40494620, 0x40498620, 0x00000002, 0x40494620, + 0x40498820, 0x00000002, 0x40494620, 0x40498A20, 0x00000002, 0x40494620, + 0x40498C20, 0x00000002, 0x40494820, 0x40498420, 0x00000002, 0x40494820, + 0x40498620, 0x00000002, 0x40494820, 0x40498820, 0x00000002, 0x40494820, + 0x40498A20, 0x00000002, 0x40494820, 0x40498C20, 0x00000002, 0x40494A20, + 0x40498420, 0x00000002, 0x40494A20, 0x40498620, 0x00000002, 0x40494A20, + 0x40498820, 0x00000002, 0x40494A20, 0x40498A20, + // Block 105, offset 0x1a40 + 0x00000002, 0x40494A20, 0x40498C20, 0x00000002, 0x40494C20, 0x40498420, + 0x00000002, 0x40494C20, 0x40498620, 0x00000002, 0x40494C20, 0x40498820, + 0x00000002, 0x40494C20, 0x40498A20, 0x00000002, 0x40494C20, 0x40498C20, + 0x00000002, 0x40494E20, 0x40498420, 0x00000002, 0x40494E20, 0x40498620, + 0x00000002, 0x40494E20, 0x40498820, 0x00000002, 0x40494E20, 0x40498A20, + 0x00000002, 0x40494E20, 0x40498C20, 0x00000002, 0x40495020, 0x40498420, + 0x00000002, 0x40495020, 0x40498620, 0x00000002, 0x40495020, 0x40498820, + 0x00000002, 0x40495020, 0x40498A20, 0x00000002, 0x40495020, 0x40498C20, + 0x00000002, 0x40495220, 0x40498420, 0x00000002, 0x40495220, 0x40498620, + 0x00000002, 0x40495220, 0x40498820, 0x00000002, 0x40495220, 0x40498A20, + 0x00000002, 0x40495220, 0x40498C20, 0x00000002, + // Block 106, offset 0x1a80 + 0x40495420, 0x40498420, 0x00000002, 0x40495420, 0x40498620, 0x00000002, + 0x40495420, 0x40498820, 0x00000002, 0x40495420, 0x40498A20, 0x00000002, + 0x40495420, 0x40498C20, 0x00000002, 0x40495620, 0x40498420, 0x00000002, + 0x40495620, 0x40498620, 0x00000002, 0x40495620, 0x40498820, 0x00000002, + 0x40495620, 0x40498A20, 0x00000002, 0x40495620, 0x40498C20, 0x00000002, + 0x40495820, 0x40498420, 0x00000002, 0x40495820, 0x40498620, 0x00000002, + 0x40495820, 0x40498820, 0x00000002, 0x40495820, 0x40498A20, 0x00000002, + 0x40495820, 0x40498C20, 0x00000002, 0x40495A20, 0x40498420, 0x00000002, + 0x40495A20, 0x40498620, 0x00000002, 0x40495A20, 0x40498820, 0x00000002, + 0x40495A20, 0x40498A20, 0x00000002, 0x40495A20, 0x40498C20, 0x00000002, + 0x40495C20, 0x40498420, 0x00000002, 0x40495C20, + // Block 107, offset 0x1ac0 + 0x40498620, 0x00000002, 0x40495C20, 0x40498820, 0x00000002, 0x40495C20, + 0x40498A20, 0x00000002, 0x40495C20, 0x40498C20, 0x00000002, 0x40495E20, + 0x40498420, 0x00000002, 0x40495E20, 0x40498620, 0x00000002, 0x40495E20, + 0x40498820, 0x00000002, 0x40495E20, 0x40498A20, 0x00000002, 0x40495E20, + 0x40498C20, 0x00000002, 0x40496020, 0x40498420, 0x00000002, 0x40496020, + 0x40498620, 0x00000002, 0x40496020, 0x40498820, 0x00000002, 0x40496020, + 0x40498A20, 0x00000002, 0x40496020, 0x40498C20, 0x00000002, 0x40496220, + 0x40498420, 0x00000002, 0x40496220, 0x40498620, 0x00000002, 0x40496220, + 0x40498820, 0x00000002, 0x40496220, 0x40498A20, 0x00000002, 0x40496220, + 0x40498C20, 0x00000002, 0x40496420, 0x40498420, 0x00000002, 0x40496420, + 0x40498620, 0x00000002, 0x40496420, 0x40498820, + // Block 108, offset 0x1b00 + 0x00000002, 0x40496420, 0x40498A20, 0x00000002, 0x40496420, 0x40498C20, + 0x00000002, 0x40496620, 0x40498420, 0x00000002, 0x40496620, 0x40498620, + 0x00000002, 0x40496620, 0x40498820, 0x00000002, 0x40496620, 0x40498A20, + 0x00000002, 0x40496620, 0x40498C20, 0x00000002, 0x40496820, 0x40498420, + 0x00000002, 0x40496820, 0x40498620, 0x00000002, 0x40496820, 0x40498820, + 0x00000002, 0x40496820, 0x40498A20, 0x00000002, 0x40496820, 0x40498C20, + 0x00000002, 0x40496A20, 0x40498420, 0x00000002, 0x40496A20, 0x40498620, + 0x00000002, 0x40496A20, 0x40498820, 0x00000002, 0x40496A20, 0x40498A20, + 0x00000002, 0x40496A20, 0x40498C20, 0x00000002, 0x40499020, 0x4049E620, + 0x00000002, 0x40499020, 0x4049E820, 0x00000002, 0x40499020, 0x4049EA20, + 0x00000002, 0x40499020, 0x4049EC20, 0x00000002, + // Block 109, offset 0x1b40 + 0x40499020, 0x4049EE20, 0x00000002, 0x40499220, 0x4049E620, 0x00000002, + 0x40499220, 0x4049E820, 0x00000002, 0x40499220, 0x4049EA20, 0x00000002, + 0x40499220, 0x4049EC20, 0x00000002, 0x40499220, 0x4049EE20, 0x00000002, + 0x40499420, 0x4049E620, 0x00000002, 0x40499420, 0x4049E820, 0x00000002, + 0x40499420, 0x4049EA20, 0x00000002, 0x40499420, 0x4049EC20, 0x00000002, + 0x40499420, 0x4049EE20, 0x00000002, 0x40499620, 0x4049E620, 0x00000002, + 0x40499620, 0x4049E820, 0x00000002, 0x40499620, 0x4049EA20, 0x00000002, + 0x40499620, 0x4049EC20, 0x00000002, 0x40499620, 0x4049EE20, 0x00000002, + 0x40499820, 0x4049E620, 0x00000002, 0x40499820, 0x4049E820, 0x00000002, + 0x40499820, 0x4049EA20, 0x00000002, 0x40499820, 0x4049EC20, 0x00000002, + 0x40499820, 0x4049EE20, 0x00000002, 0x40499A20, + // Block 110, offset 0x1b80 + 0x4049E620, 0x00000002, 0x40499A20, 0x4049E820, 0x00000002, 0x40499A20, + 0x4049EA20, 0x00000002, 0x40499A20, 0x4049EC20, 0x00000002, 0x40499A20, + 0x4049EE20, 0x00000002, 0x40499C20, 0x4049E620, 0x00000002, 0x40499C20, + 0x4049E820, 0x00000002, 0x40499C20, 0x4049EA20, 0x00000002, 0x40499C20, + 0x4049EC20, 0x00000002, 0x40499C20, 0x4049EE20, 0x00000002, 0x40499E20, + 0x4049E620, 0x00000002, 0x40499E20, 0x4049E820, 0x00000002, 0x40499E20, + 0x4049EA20, 0x00000002, 0x40499E20, 0x4049EC20, 0x00000002, 0x40499E20, + 0x4049EE20, 0x00000002, 0x4049A020, 0x4049E620, 0x00000002, 0x4049A020, + 0x4049E820, 0x00000002, 0x4049A020, 0x4049EA20, 0x00000002, 0x4049A020, + 0x4049EC20, 0x00000002, 0x4049A020, 0x4049EE20, 0x00000002, 0x4049A220, + 0x4049E620, 0x00000002, 0x4049A220, 0x4049E820, + // Block 111, offset 0x1bc0 + 0x00000002, 0x4049A220, 0x4049EA20, 0x00000002, 0x4049A220, 0x4049EC20, + 0x00000002, 0x4049A220, 0x4049EE20, 0x00000002, 0x4049A420, 0x4049E620, + 0x00000002, 0x4049A420, 0x4049E820, 0x00000002, 0x4049A420, 0x4049EA20, + 0x00000002, 0x4049A420, 0x4049EC20, 0x00000002, 0x4049A420, 0x4049EE20, + 0x00000002, 0x4049A620, 0x4049E620, 0x00000002, 0x4049A620, 0x4049E820, + 0x00000002, 0x4049A620, 0x4049EA20, 0x00000002, 0x4049A620, 0x4049EC20, + 0x00000002, 0x4049A620, 0x4049EE20, 0x00000002, 0x4049A820, 0x4049E620, + 0x00000002, 0x4049A820, 0x4049E820, 0x00000002, 0x4049A820, 0x4049EA20, + 0x00000002, 0x4049A820, 0x4049EC20, 0x00000002, 0x4049A820, 0x4049EE20, + 0x00000002, 0x4049AA20, 0x4049E620, 0x00000002, 0x4049AA20, 0x4049E820, + 0x00000002, 0x4049AA20, 0x4049EA20, 0x00000002, + // Block 112, offset 0x1c00 + 0x4049AA20, 0x4049EC20, 0x00000002, 0x4049AA20, 0x4049EE20, 0x00000002, + 0x4049AC20, 0x4049E620, 0x00000002, 0x4049AC20, 0x4049E820, 0x00000002, + 0x4049AC20, 0x4049EA20, 0x00000002, 0x4049AC20, 0x4049EC20, 0x00000002, + 0x4049AC20, 0x4049EE20, 0x00000002, 0x4049AE20, 0x4049E620, 0x00000002, + 0x4049AE20, 0x4049E820, 0x00000002, 0x4049AE20, 0x4049EA20, 0x00000002, + 0x4049AE20, 0x4049EC20, 0x00000002, 0x4049AE20, 0x4049EE20, 0x00000002, + 0x4049B020, 0x4049E620, 0x00000002, 0x4049B020, 0x4049E820, 0x00000002, + 0x4049B020, 0x4049EA20, 0x00000002, 0x4049B020, 0x4049EC20, 0x00000002, + 0x4049B020, 0x4049EE20, 0x00000002, 0x4049B220, 0x4049E620, 0x00000002, + 0x4049B220, 0x4049E820, 0x00000002, 0x4049B220, 0x4049EA20, 0x00000002, + 0x4049B220, 0x4049EC20, 0x00000002, 0x4049B220, + // Block 113, offset 0x1c40 + 0x4049EE20, 0x00000002, 0x4049B420, 0x4049E620, 0x00000002, 0x4049B420, + 0x4049E820, 0x00000002, 0x4049B420, 0x4049EA20, 0x00000002, 0x4049B420, + 0x4049EC20, 0x00000002, 0x4049B420, 0x4049EE20, 0x00000002, 0x4049B620, + 0x4049E620, 0x00000002, 0x4049B620, 0x4049E820, 0x00000002, 0x4049B620, + 0x4049EA20, 0x00000002, 0x4049B620, 0x4049EC20, 0x00000002, 0x4049B620, + 0x4049EE20, 0x00000002, 0x4049B820, 0x4049E620, 0x00000002, 0x4049B820, + 0x4049E820, 0x00000002, 0x4049B820, 0x4049EA20, 0x00000002, 0x4049B820, + 0x4049EC20, 0x00000002, 0x4049B820, 0x4049EE20, 0x00000002, 0x4049BA20, + 0x4049E620, 0x00000002, 0x4049BA20, 0x4049E820, 0x00000002, 0x4049BA20, + 0x4049EA20, 0x00000002, 0x4049BA20, 0x4049EC20, 0x00000002, 0x4049BA20, + 0x4049EE20, 0x00000002, 0x4049BC20, 0x4049E620, + // Block 114, offset 0x1c80 + 0x00000002, 0x4049BC20, 0x4049E820, 0x00000002, 0x4049BC20, 0x4049EA20, + 0x00000002, 0x4049BC20, 0x4049EC20, 0x00000002, 0x4049BC20, 0x4049EE20, + 0x00000002, 0x4049BE20, 0x4049E620, 0x00000002, 0x4049BE20, 0x4049E820, + 0x00000002, 0x4049BE20, 0x4049EA20, 0x00000002, 0x4049BE20, 0x4049EC20, + 0x00000002, 0x4049BE20, 0x4049EE20, 0x00000002, 0x4049C020, 0x4049E620, + 0x00000002, 0x4049C020, 0x4049E820, 0x00000002, 0x4049C020, 0x4049EA20, + 0x00000002, 0x4049C020, 0x4049EC20, 0x00000002, 0x4049C020, 0x4049EE20, + 0x00000002, 0x4049C220, 0x4049E620, 0x00000002, 0x4049C220, 0x4049E820, + 0x00000002, 0x4049C220, 0x4049EA20, 0x00000002, 0x4049C220, 0x4049EC20, + 0x00000002, 0x4049C220, 0x4049EE20, 0x00000003, 0x0049C484, 0x0049AC84, + 0x4049E620, 0x00000003, 0x0049C484, 0x0049AC84, + // Block 115, offset 0x1cc0 + 0x4049E820, 0x00000003, 0x0049C484, 0x0049AC84, 0x4049EA20, 0x00000003, + 0x0049C484, 0x0049AC84, 0x4049EC20, 0x00000003, 0x0049C484, 0x0049AC84, + 0x4049EE20, 0x00000003, 0x0049C484, 0x0049BA84, 0x4049E620, 0x00000003, + 0x0049C484, 0x0049BA84, 0x4049E820, 0x00000003, 0x0049C484, 0x0049BA84, + 0x4049EA20, 0x00000003, 0x0049C484, 0x0049BA84, 0x4049EC20, 0x00000003, + 0x0049C484, 0x0049BA84, 0x4049EE20, 0x00000002, 0x4049C420, 0x4049E620, + 0x00000002, 0x4049C420, 0x4049E820, 0x00000002, 0x4049C420, 0x4049EA20, + 0x00000002, 0x4049C420, 0x4049EC20, 0x00000002, 0x4049C420, 0x4049EE20, + 0x00000002, 0x4049C620, 0x4049E620, 0x00000002, 0x4049C620, 0x4049E820, + 0x00000002, 0x4049C620, 0x4049EA20, 0x00000002, 0x4049C620, 0x4049EC20, + 0x00000002, 0x4049C620, 0x4049EE20, 0x00000002, + // Block 116, offset 0x1d00 + 0x4049C820, 0x4049E620, 0x00000002, 0x4049C820, 0x4049E820, 0x00000002, + 0x4049C820, 0x4049EA20, 0x00000002, 0x4049C820, 0x4049EC20, 0x00000002, + 0x4049C820, 0x4049EE20, 0x00000002, 0x4049F020, 0x404A5A20, 0x00000002, + 0x4049F020, 0x404A5C20, 0x00000002, 0x4049F020, 0x404A6220, 0x00000002, + 0x4049F020, 0x404A6620, 0x00000002, 0x4049F020, 0x404A6820, 0x00000002, + 0x4049F220, 0x404A5A20, 0x00000002, 0x4049F220, 0x404A5C20, 0x00000002, + 0x4049F220, 0x404A6220, 0x00000002, 0x4049F220, 0x404A6620, 0x00000002, + 0x4049F220, 0x404A6820, 0x00000002, 0x4049F420, 0x404A5A20, 0x00000002, + 0x4049F420, 0x404A5C20, 0x00000002, 0x4049F420, 0x404A6220, 0x00000002, + 0x4049F420, 0x404A6620, 0x00000002, 0x4049F420, 0x404A6820, 0x00000002, + 0x4049F620, 0x404A5A20, 0x00000002, 0x4049F620, + // Block 117, offset 0x1d40 + 0x404A5C20, 0x00000002, 0x4049F620, 0x404A6220, 0x00000002, 0x4049F620, + 0x404A6620, 0x00000002, 0x4049F620, 0x404A6820, 0x00000002, 0x4049F820, + 0x404A5A20, 0x00000002, 0x4049F820, 0x404A5C20, 0x00000002, 0x4049F820, + 0x404A6220, 0x00000002, 0x4049F820, 0x404A6620, 0x00000002, 0x4049F820, + 0x404A6820, 0x00000002, 0x4049FA20, 0x404A5A20, 0x00000002, 0x4049FA20, + 0x404A5C20, 0x00000002, 0x4049FA20, 0x404A6220, 0x00000002, 0x4049FA20, + 0x404A6620, 0x00000002, 0x4049FA20, 0x404A6820, 0x00000002, 0x4049FC20, + 0x404A5A20, 0x00000002, 0x4049FC20, 0x404A5C20, 0x00000002, 0x4049FC20, + 0x404A6220, 0x00000002, 0x4049FC20, 0x404A6620, 0x00000002, 0x4049FC20, + 0x404A6820, 0x00000002, 0x4049FE20, 0x404A5A20, 0x00000002, 0x4049FE20, + 0x404A5C20, 0x00000002, 0x4049FE20, 0x404A6220, + // Block 118, offset 0x1d80 + 0x00000002, 0x4049FE20, 0x404A6620, 0x00000002, 0x4049FE20, 0x404A6820, + 0x00000002, 0x404A0020, 0x404A5A20, 0x00000002, 0x404A0020, 0x404A5C20, + 0x00000002, 0x404A0020, 0x404A6220, 0x00000002, 0x404A0020, 0x404A6620, + 0x00000002, 0x404A0020, 0x404A6820, 0x00000002, 0x404A0220, 0x404A5A20, + 0x00000002, 0x404A0220, 0x404A5C20, 0x00000002, 0x404A0220, 0x404A6220, + 0x00000002, 0x404A0220, 0x404A6620, 0x00000002, 0x404A0220, 0x404A6820, + 0x00000002, 0x404A0420, 0x404A5A20, 0x00000002, 0x404A0420, 0x404A5C20, + 0x00000002, 0x404A0420, 0x404A6220, 0x00000002, 0x404A0420, 0x404A6620, + 0x00000002, 0x404A0420, 0x404A6820, 0x00000002, 0x404A0620, 0x404A5A20, + 0x00000002, 0x404A0620, 0x404A5C20, 0x00000002, 0x404A0620, 0x404A6220, + 0x00000002, 0x404A0620, 0x404A6620, 0x00000002, + // Block 119, offset 0x1dc0 + 0x404A0620, 0x404A6820, 0x00000002, 0x404A0820, 0x404A5A20, 0x00000002, + 0x404A0820, 0x404A5C20, 0x00000002, 0x404A0820, 0x404A6220, 0x00000002, + 0x404A0820, 0x404A6620, 0x00000002, 0x404A0820, 0x404A6820, 0x00000002, + 0x404A0A20, 0x404A5A20, 0x00000002, 0x404A0A20, 0x404A5C20, 0x00000002, + 0x404A0A20, 0x404A6220, 0x00000002, 0x404A0A20, 0x404A6620, 0x00000002, + 0x404A0A20, 0x404A6820, 0x00000002, 0x404A0C20, 0x404A5A20, 0x00000002, + 0x404A0C20, 0x404A5C20, 0x00000002, 0x404A0C20, 0x404A6220, 0x00000002, + 0x404A0C20, 0x404A6620, 0x00000002, 0x404A0C20, 0x404A6820, 0x00000002, + 0x404A0E20, 0x404A5A20, 0x00000002, 0x404A0E20, 0x404A5C20, 0x00000002, + 0x404A0E20, 0x404A6220, 0x00000002, 0x404A0E20, 0x404A6620, 0x00000002, + 0x404A0E20, 0x404A6820, 0x00000002, 0x404A1020, + // Block 120, offset 0x1e00 + 0x404A5A20, 0x00000002, 0x404A1020, 0x404A5C20, 0x00000002, 0x404A1020, + 0x404A6220, 0x00000002, 0x404A1020, 0x404A6620, 0x00000002, 0x404A1020, + 0x404A6820, 0x00000002, 0x404A1220, 0x404A5A20, 0x00000002, 0x404A1220, + 0x404A5C20, 0x00000002, 0x404A1220, 0x404A6220, 0x00000002, 0x404A1220, + 0x404A6620, 0x00000002, 0x404A1220, 0x404A6820, 0x00000002, 0x404A1420, + 0x404A5A20, 0x00000002, 0x404A1420, 0x404A5C20, 0x00000002, 0x404A1420, + 0x404A6220, 0x00000002, 0x404A1420, 0x404A6620, 0x00000002, 0x404A1420, + 0x404A6820, 0x00000002, 0x404A1620, 0x404A5A20, 0x00000002, 0x404A1620, + 0x404A5C20, 0x00000002, 0x404A1620, 0x404A6220, 0x00000002, 0x404A1620, + 0x404A6620, 0x00000002, 0x404A1620, 0x404A6820, 0x00000002, 0x404A1820, + 0x404A5A20, 0x00000002, 0x404A1820, 0x404A5C20, + // Block 121, offset 0x1e40 + 0x00000002, 0x404A1820, 0x404A6220, 0x00000002, 0x404A1820, 0x404A6620, + 0x00000002, 0x404A1820, 0x404A6820, 0x00000002, 0x404A1A20, 0x404A5A20, + 0x00000002, 0x404A1A20, 0x404A5C20, 0x00000002, 0x404A1A20, 0x404A6220, + 0x00000002, 0x404A1A20, 0x404A6620, 0x00000002, 0x404A1A20, 0x404A6820, + 0x00000002, 0x404A1C20, 0x404A5A20, 0x00000002, 0x404A1C20, 0x404A5C20, + 0x00000002, 0x404A1C20, 0x404A6220, 0x00000002, 0x404A1C20, 0x404A6620, + 0x00000002, 0x404A1C20, 0x404A6820, 0x00000002, 0x404A1E20, 0x404A5A20, + 0x00000002, 0x404A1E20, 0x404A5C20, 0x00000002, 0x404A1E20, 0x404A6220, + 0x00000002, 0x404A1E20, 0x404A6620, 0x00000002, 0x404A1E20, 0x404A6820, + 0x00000002, 0x404A2020, 0x404A5A20, 0x00000002, 0x404A2020, 0x404A5C20, + 0x00000002, 0x404A2020, 0x404A6220, 0x00000002, + // Block 122, offset 0x1e80 + 0x404A2020, 0x404A6620, 0x00000002, 0x404A2020, 0x404A6820, 0x00000002, + 0x404A2220, 0x404A5A20, 0x00000002, 0x404A2220, 0x404A5C20, 0x00000002, + 0x404A2220, 0x404A6220, 0x00000002, 0x404A2220, 0x404A6620, 0x00000002, + 0x404A2220, 0x404A6820, 0x00000002, 0x404A2420, 0x404A5A20, 0x00000002, + 0x404A2420, 0x404A5C20, 0x00000002, 0x404A2420, 0x404A6220, 0x00000002, + 0x404A2420, 0x404A6620, 0x00000002, 0x404A2420, 0x404A6820, 0x00000002, + 0x404A2620, 0x404A5A20, 0x00000002, 0x404A2620, 0x404A5C20, 0x00000002, + 0x404A2620, 0x404A6220, 0x00000002, 0x404A2620, 0x404A6620, 0x00000002, + 0x404A2620, 0x404A6820, 0x00000002, 0x404A2820, 0x404A5A20, 0x00000002, + 0x404A2820, 0x404A5C20, 0x00000002, 0x404A2820, 0x404A6220, 0x00000002, + 0x404A2820, 0x404A6620, 0x00000002, 0x404A2820, + // Block 123, offset 0x1ec0 + 0x404A6820, 0x00000002, 0x404A2A20, 0x404A5A20, 0x00000002, 0x404A2A20, + 0x404A5C20, 0x00000002, 0x404A2A20, 0x404A6220, 0x00000002, 0x404A2A20, + 0x404A6620, 0x00000002, 0x404A2A20, 0x404A6820, 0x00000002, 0x404A2C20, + 0x404A5A20, 0x00000002, 0x404A2C20, 0x404A5C20, 0x00000002, 0x404A2C20, + 0x404A6220, 0x00000002, 0x404A2C20, 0x404A6620, 0x00000002, 0x404A2C20, + 0x404A6820, 0x00000002, 0x404A2E20, 0x404A5A20, 0x00000002, 0x404A2E20, + 0x404A5C20, 0x00000002, 0x404A2E20, 0x404A6220, 0x00000002, 0x404A2E20, + 0x404A6620, 0x00000002, 0x404A2E20, 0x404A6820, 0x00000002, 0x404A3020, + 0x404A5A20, 0x00000002, 0x404A3020, 0x404A5C20, 0x00000002, 0x404A3020, + 0x404A6220, 0x00000002, 0x404A3020, 0x404A6620, 0x00000002, 0x404A3020, + 0x404A6820, 0x00000002, 0x404A3220, 0x404A5A20, + // Block 124, offset 0x1f00 + 0x00000002, 0x404A3220, 0x404A5C20, 0x00000002, 0x404A3220, 0x404A6220, + 0x00000002, 0x404A3220, 0x404A6620, 0x00000002, 0x404A3220, 0x404A6820, + 0x00000002, 0x404A3420, 0x404A5A20, 0x00000002, 0x404A3420, 0x404A5C20, + 0x00000002, 0x404A3420, 0x404A6220, 0x00000002, 0x404A3420, 0x404A6620, + 0x00000002, 0x404A3420, 0x404A6820, 0x00000002, 0x404A3620, 0x404A5A20, + 0x00000002, 0x404A3620, 0x404A5C20, 0x00000002, 0x404A3620, 0x404A6220, + 0x00000002, 0x404A3620, 0x404A6620, 0x00000002, 0x404A3620, 0x404A6820, + 0x00000002, 0x404A3820, 0x404A5A20, 0x00000002, 0x404A3820, 0x404A5C20, + 0x00000002, 0x404A3820, 0x404A6220, 0x00000002, 0x404A3820, 0x404A6620, + 0x00000002, 0x404A3820, 0x404A6820, 0x00000002, 0x404A3A20, 0x404A5A20, + 0x00000002, 0x404A3A20, 0x404A5C20, 0x00000002, + // Block 125, offset 0x1f40 + 0x404A3A20, 0x404A6220, 0x00000002, 0x404A3A20, 0x404A6620, 0x00000002, + 0x404A3A20, 0x404A6820, 0x00000002, 0x404A3C20, 0x404A5A20, 0x00000002, + 0x404A3C20, 0x404A5C20, 0x00000002, 0x404A3C20, 0x404A6220, 0x00000002, + 0x404A3C20, 0x404A6620, 0x00000002, 0x404A3C20, 0x404A6820, 0x00000002, + 0x404A3E20, 0x404A5A20, 0x00000002, 0x404A3E20, 0x404A5C20, 0x00000002, + 0x404A3E20, 0x404A6220, 0x00000002, 0x404A3E20, 0x404A6620, 0x00000002, + 0x404A3E20, 0x404A6820, 0x00000002, 0x404A4020, 0x404A5A20, 0x00000002, + 0x404A4020, 0x404A5C20, 0x00000002, 0x404A4020, 0x404A6220, 0x00000002, + 0x404A4020, 0x404A6620, 0x00000002, 0x404A4020, 0x404A6820, 0x00000002, + 0x404A4220, 0x404A5A20, 0x00000002, 0x404A4220, 0x404A5C20, 0x00000002, + 0x404A4220, 0x404A6220, 0x00000002, 0x404A4220, + // Block 126, offset 0x1f80 + 0x404A6620, 0x00000002, 0x404A4220, 0x404A6820, 0x00000002, 0x404A4420, + 0x404A5A20, 0x00000002, 0x404A4420, 0x404A5C20, 0x00000002, 0x404A4420, + 0x404A6220, 0x00000002, 0x404A4420, 0x404A6620, 0x00000002, 0x404A4420, + 0x404A6820, 0x00000002, 0x404A4620, 0x404A5A20, 0x00000002, 0x404A4620, + 0x404A5C20, 0x00000002, 0x404A4620, 0x404A6220, 0x00000002, 0x404A4620, + 0x404A6620, 0x00000002, 0x404A4620, 0x404A6820, 0x00000002, 0x404A4820, + 0x404A5A20, 0x00000002, 0x404A4820, 0x404A5C20, 0x00000002, 0x404A4820, + 0x404A6220, 0x00000002, 0x404A4820, 0x404A6620, 0x00000002, 0x404A4820, + 0x404A6820, 0x00000002, 0x404A4A20, 0x404A5A20, 0x00000002, 0x404A4A20, + 0x404A5C20, 0x00000002, 0x404A4A20, 0x404A6220, 0x00000002, 0x404A4A20, + 0x404A6620, 0x00000002, 0x404A4A20, 0x404A6820, + // Block 127, offset 0x1fc0 + 0x00000002, 0x404A4C20, 0x404A5A20, 0x00000002, 0x404A4C20, 0x404A5C20, + 0x00000002, 0x404A4C20, 0x404A6220, 0x00000002, 0x404A4C20, 0x404A6620, + 0x00000002, 0x404A4C20, 0x404A6820, 0x00000002, 0x404A4E20, 0x404A5A20, + 0x00000002, 0x404A4E20, 0x404A5C20, 0x00000002, 0x404A4E20, 0x404A6220, + 0x00000002, 0x404A4E20, 0x404A6620, 0x00000002, 0x404A4E20, 0x404A6820, + 0x00000002, 0x404A7620, 0x404AF820, 0x00000002, 0x404A7820, 0x404AF820, + 0x00000002, 0x404A8020, 0x404B0020, 0x00000002, 0x404A8220, 0x404B0020, + 0x00000002, 0x404AA020, 0x404B0020, 0x00000002, 0x404AA220, 0x404B0020, + 0x00000002, 0x404AB020, 0x404B0020, 0x00000002, 0x404AB220, 0x404B0020, + 0x00000002, 0x404AC020, 0x404B0020, 0x00000002, 0x404AC220, 0x404B0020, + 0x00000002, 0x404AD020, 0x404B0020, 0x00000002, + // Block 128, offset 0x2000 + 0x404AD220, 0x404B0020, 0x00000002, 0x004AD684, 0xA0013A04, 0x00000002, + 0x004AE684, 0xA0013A04, 0x00000002, 0x004AE884, 0xA0013A04, 0x00000002, + 0x004AEA84, 0xA0013A04, 0x00000002, 0x404AEA20, 0x8281258D, 0x00000002, + 0x404AEA20, 0x82812591, 0x00000002, 0x404AF020, 0x8281258D, 0x00000002, + 0x404AF020, 0x82812591, 0x00000003, 0x004B0284, 0x004B3084, 0xA000F304, + 0x00000003, 0x004EA684, 0x004F1484, 0x004EA684, 0x00000002, 0x0050AE84, + 0x0050DA84, 0x00000003, 0x0050AE84, 0x0050DA84, 0x0050F084, 0x00000003, + 0x00514E84, 0x00519A84, 0x00514E84, 0x00000002, 0x005ADA84, 0xA0013904, + 0x00000002, 0x005ADC84, 0xA0013904, 0x00000002, 0x005ADC84, 0xA0013A04, + 0x00000002, 0x005ADE84, 0xA0013904, 0x00000002, 0x005ADE84, 0x005ADE84, + 0x00000002, 0x005AE084, 0xA0013904, 0x00000002, + // Block 129, offset 0x2040 + 0x005AE084, 0xA0013A04, 0x00000002, 0x005AE084, 0xA0013C04, 0x00000002, + 0x005AE084, 0xA0013D04, 0x00000002, 0x005AE884, 0xA0013904, 0x00000002, + 0x005AE884, 0xA0013A04, 0x00000002, 0x005AE884, 0xA0013C04, 0x00000002, + 0x005AE884, 0xA0013D04, 0x00000002, 0x005AEC84, 0xA0013904, 0x00000002, + 0x005AEE84, 0xA0013904, 0x00000002, 0x005AEE84, 0xA0013A04, 0x00000002, + 0x005AEE84, 0xA0013C04, 0x00000002, 0x005AF084, 0xA0013904, 0x00000002, + 0x005AF084, 0xA0013A04, 0x00000002, 0x005AF284, 0xA0013904, 0x00000002, + 0x005AF484, 0xA0013904, 0x00000002, 0x005AF684, 0xA0013904, 0x00000002, + 0x005AF684, 0x005B0884, 0x00000002, 0x005AFA84, 0xA0013904, 0x00000002, + 0x005AFE84, 0xA0013904, 0x00000002, 0x005AFE84, 0xA0013A04, 0x00000002, + 0x005AFE84, 0xA0013C04, 0x00000002, 0x005AFE84, + // Block 130, offset 0x2080 + 0xA0013D04, 0x00000002, 0x005AFE84, 0xA0013E04, 0x00000002, 0x005B0084, + 0xA0013904, 0x00000002, 0x005B0084, 0xA0013A04, 0x00000002, 0x005B0284, + 0xA0013904, 0x00000002, 0x005B0284, 0xA0013A04, 0x00000002, 0x005B0684, + 0xA0013904, 0x00000002, 0x005B0684, 0xA0013A04, 0x00000004, 0x005B0684, + 0xA0013904, 0x005B0684, 0xA0013904, 0x00000002, 0x005B0884, 0xA0013904, + 0x00000002, 0x005B0A84, 0xA0013904, 0x00000002, 0x005B2484, 0xA0013904, + 0x00000002, 0x005B2484, 0xA0013A04, 0x00000002, 0x005B2684, 0xA0013904, + 0x00000002, 0x005B2A84, 0xA0013904, 0x00000002, 0x005B3084, 0xA0013904, + 0x00000002, 0x005B3284, 0xA0013904, 0x00000002, 0x005B3484, 0xA0013904, + 0x00000002, 0x005B3684, 0xA0013904, 0x00000002, 0x005B3884, 0xA0013904, + 0x00000002, 0x005B3A84, 0xA0013904, 0x00000002, + // Block 131, offset 0x20c0 + 0x005B3E84, 0xA0013904, 0x00000002, 0x005B4084, 0xA0013904, 0x00000002, + 0x005B4284, 0xA0013904, 0x00000002, 0x005B4484, 0xA0013904, 0x00000002, + 0x005B4684, 0xA0013904, 0x00000002, 0x005B4884, 0xA0013904, 0x00000002, + 0x005B5284, 0xA0013904, 0x00000002, 0x005B5484, 0xA0013904, 0x00000002, + 0x005B5684, 0xA0013904, 0x00000002, 0x005B5884, 0xA0013904, 0x00000002, + 0x005B5C84, 0xA0013904, 0x00000002, 0x005B6484, 0xA0013904, 0x00000002, + 0x005B6684, 0xA0013904, 0x00000002, 0x005B6884, 0xA0013904, 0x00000002, + 0x005B6A84, 0xA0013904, 0x00000002, 0x005B6C84, 0xA0013904, 0x00000002, + 0x005B7484, 0xA0013904, 0x00000002, 0x005B7684, 0xA0013904, 0x00000002, + 0x005B7884, 0xA0013904, 0x00000002, 0x005B7A84, 0xA0013904, 0x00000002, + 0x005B9884, 0x005D9684, 0x00000002, 0x005BBC84, + // Block 132, offset 0x2100 + 0x005D9684, 0x00000002, 0x005BE684, 0x005D9684, 0x00000002, 0x005C0E84, + 0x005D9884, 0x00000002, 0x005C2484, 0x005D9684, 0x00000002, 0x005C3084, + 0x005D9884, 0x00000002, 0x005C3484, 0x005D9884, 0x00000002, 0x005C4084, + 0x005D9684, 0x00000002, 0x005C8A84, 0x005D9684, 0x00000002, 0x005CE884, + 0x005D9684, 0x00000002, 0x005D1684, 0x005D9684, 0x00000002, 0x005D2284, + 0x005D9884, 0x00000002, 0x005D3084, 0x005D9684, 0x00000004, 0x0062C486, + 0x0063C286, 0x0062C286, 0x0063CE86, 0x00000005, 0x0062C886, 0x0063A886, + 0x00648286, 0x0062AC86, 0x0063B886, 0x00000003, 0x0065769C, 0x0027D69C, + 0x0065CA9C, 0x00000005, 0x0065769C, 0x0065AA9C, 0xA001291C, 0x0027D69C, + 0x00659E9C, 0x00000004, 0x0065769C, 0x0065CA9C, 0x0065AE9C, 0x0065769C, + 0x00000005, 0x0065769C, 0x0065D89C, 0x0065B09C, + // Block 133, offset 0x2140 + 0xA001291C, 0x0065769C, 0x00000005, 0x0065789C, 0x0065A29C, 0x0065D89C, + 0x0065869C, 0xA001281C, 0x00000003, 0x0065789C, 0x0065D89C, 0x0065989C, + 0x00000002, 0x00657A8E, 0xA0812802, 0x00000002, 0x00657A91, 0xA0812802, + 0x00000003, 0x00657A9C, 0x0065809C, 0x0065D89C, 0x00000004, 0x00657E9C, + 0x0027D69C, 0x0065829C, 0x0027D69C, 0x00000006, 0x00657E9C, 0x0065909C, + 0x0065869C, 0x0027D69C, 0x00659E9C, 0xA001281C, 0x00000003, 0x0065809C, + 0x0027D69C, 0x0065B89C, 0x00000003, 0x0065809C, 0x0065D89C, 0x0065909C, + 0x00000002, 0x0065828E, 0xA0812802, 0x00000002, 0x00658291, 0xA0812802, + 0x00000003, 0x0065829C, 0x0065789C, 0x0065C89C, 0x00000004, 0x0065829C, + 0x0065C69C, 0x00659A9C, 0x00659E9C, 0x00000004, 0x0065829C, 0x0065CE9C, + 0x0065C89C, 0x0027D69C, 0x00000004, 0x0065829C, + // Block 134, offset 0x2180 + 0xA001281C, 0x0065CE9C, 0x0065D89C, 0x00000004, 0x0065829C, 0xA001281C, + 0x0065D89C, 0x0065B49C, 0x00000002, 0x0065848E, 0xA0812802, 0x00000002, + 0x00658491, 0xA0812802, 0x00000004, 0x0065849C, 0xA001281C, 0x0065829C, + 0xA001281C, 0x00000004, 0x0065849C, 0xA001281C, 0x0065A29C, 0x0027D69C, + 0x00000004, 0x0065849C, 0x0065C09C, 0x0065C89C, 0x0027D69C, 0x00000006, + 0x0065849C, 0xA001281C, 0x0065CA9C, 0x0065969C, 0xA001281C, 0x0027D69C, + 0x00000006, 0x0065849C, 0x0065CE9C, 0x0065869C, 0xA001281C, 0x0065C69C, + 0x0065B89C, 0x00000006, 0x0065849C, 0x0065CE9C, 0x0065BA9C, 0x0027D69C, + 0x00659E9C, 0x0065CA9C, 0x00000005, 0x0065849C, 0x0065CE9C, 0x0065D09C, + 0x00659A9C, 0x00659E9C, 0x00000002, 0x0065868E, 0xA0812802, 0x00000002, + 0x00658691, 0xA0812802, 0x00000004, 0x0065869C, + // Block 135, offset 0x21c0 + 0xA001281C, 0x0065C69C, 0x0065B89C, 0x00000006, 0x0065869C, 0xA001281C, + 0x0065C69C, 0x0065B89C, 0x00659E9C, 0x0065D89C, 0x00000006, 0x0065869C, + 0x0065CA9C, 0x0065929C, 0xA001281C, 0x0065789C, 0x0065CE9C, 0x00000004, + 0x0065869C, 0x0065CE9C, 0x0027D69C, 0x0065A69C, 0x00000002, 0x0065888E, + 0xA0812802, 0x00000002, 0x00658891, 0xA0812802, 0x00000003, 0x0065889C, + 0x0027D69C, 0x0065909C, 0x00000002, 0x00658A8E, 0xA0812802, 0x00000002, + 0x00658A91, 0xA0812802, 0x00000004, 0x00658A9C, 0x0027D69C, 0x0065B29C, + 0xA001291C, 0x00000003, 0x00658A9C, 0x0065CA9C, 0x0065A09C, 0x00000002, + 0x00658C8E, 0xA0812802, 0x00000002, 0x00658C91, 0xA0812802, 0x00000004, + 0x00658C9C, 0x0065789C, 0x0065869C, 0x0065CA9C, 0x00000005, 0x00658C9C, + 0x0065D89C, 0x0065989C, 0x0027D69C, 0x0065B89C, + // Block 136, offset 0x2200 + 0x00000002, 0x00658E8E, 0xA0812802, 0x00000002, 0x00658E91, 0xA0812802, + 0x00000002, 0x00658E84, 0x0065BA84, 0x00000005, 0x00658E9C, 0x0065C89C, + 0x0065D89C, 0x0065869C, 0xA001281C, 0x00000002, 0x0065908E, 0xA0812802, + 0x00000002, 0x00659091, 0xA0812802, 0x00000002, 0x0065928E, 0xA0812802, + 0x00000002, 0x00659291, 0xA0812802, 0x00000003, 0x0065929C, 0x0065D89C, + 0x0065989C, 0x00000003, 0x0065929C, 0x0065D89C, 0x00659E9C, 0x00000002, + 0x0065948E, 0xA0812802, 0x00000002, 0x00659491, 0xA0812802, 0x00000002, + 0x0065968E, 0xA0812802, 0x00000002, 0x00659691, 0xA0812802, 0x00000004, + 0x0065969C, 0xA001281C, 0x0027D69C, 0x0065909C, 0x00000002, 0x0065988E, + 0xA0812802, 0x00000002, 0x00659891, 0xA0812802, 0x00000002, 0x00659A8E, + 0xA0812802, 0x00000002, 0x00659A91, 0xA0812802, + // Block 137, offset 0x2240 + 0x00000002, 0x00659C8E, 0xA0812802, 0x00000002, 0x00659C91, 0xA0812802, + 0x00000003, 0x00659C9C, 0xA001281C, 0x00658E9C, 0x00000002, 0x00659E8E, + 0xA0812802, 0x00000002, 0x00659E91, 0xA0812802, 0x00000003, 0x00659E9C, + 0xA001281C, 0x0065CA9C, 0x00000003, 0x0065A89C, 0x00659A9C, 0x00659E9C, + 0x00000002, 0x0065AA8E, 0xA0812802, 0x00000002, 0x0065AA91, 0xA0812802, + 0x00000002, 0x0065AA8E, 0xA0812902, 0x00000002, 0x0065AA91, 0xA0812902, + 0x00000006, 0x0065AA9C, 0xA001291C, 0x0027D69C, 0x0065929C, 0x0065D89C, + 0x00659E9C, 0x00000004, 0x0065AA9C, 0xA001291C, 0x0027D69C, 0x00659A9C, + 0x00000005, 0x0065AA9C, 0xA001281C, 0x0027D69C, 0x0065CC9C, 0x0065CA9C, + 0x00000003, 0x0065AA9C, 0x0065789C, 0x00659A9C, 0x00000002, 0x0065AC8E, + 0xA0812802, 0x00000002, 0x0065AC91, 0xA0812802, + // Block 138, offset 0x2280 + 0x00000002, 0x0065AC8E, 0xA0812902, 0x00000002, 0x0065AC91, 0xA0812902, + 0x00000006, 0x0065AC9C, 0xA001291C, 0x0065769C, 0x0065909C, 0x00659E9C, + 0x0065CA9C, 0x00000004, 0x0065AC9C, 0xA001291C, 0x0065869C, 0x0065CA9C, + 0x00000003, 0x0065AC9C, 0xA001291C, 0x00658A9C, 0x00000003, 0x0065AC9C, + 0xA001281C, 0x0065CA9C, 0x00000002, 0x0065AE8E, 0xA0812802, 0x00000002, + 0x0065AE91, 0xA0812802, 0x00000002, 0x0065AE8E, 0xA0812902, 0x00000002, + 0x0065AE91, 0xA0812902, 0x00000006, 0x0065AE9C, 0x0065769C, 0x0065C69C, + 0x00659A9C, 0x00659E9C, 0xA001281C, 0x00000004, 0x0065AE9C, 0x0065789C, + 0x0027D69C, 0x00659E9C, 0x00000006, 0x0065AE9C, 0xA001281C, 0x00659A9C, + 0x00658E9C, 0x00657E9C, 0x0065CA9C, 0x00000003, 0x0065AE9C, 0x0065C69C, + 0x0065D89C, 0x00000002, 0x0065B08E, 0xA0812802, + // Block 139, offset 0x22c0 + 0x00000002, 0x0065B091, 0xA0812802, 0x00000002, 0x0065B08E, 0xA0812902, + 0x00000002, 0x0065B091, 0xA0812902, 0x00000005, 0x0065B09C, 0xA001291C, + 0x0027D69C, 0x00658E9C, 0xA001281C, 0x00000004, 0x0065B09C, 0xA001281C, + 0x0027D69C, 0x0065969C, 0x00000005, 0x0065B09C, 0x0065869C, 0x0065969C, + 0x0027D69C, 0x0065CA9C, 0x00000003, 0x0065B09C, 0xA001291C, 0x0065949C, + 0x00000004, 0x0065B09C, 0xA001291C, 0x0065A29C, 0x0065AC9C, 0x00000003, + 0x0065B09C, 0x0065CA9C, 0x00659A9C, 0x00000004, 0x0065B09C, 0xA001291C, + 0x0065D89C, 0x0065909C, 0x00000002, 0x0065B28E, 0xA0812802, 0x00000002, + 0x0065B291, 0xA0812802, 0x00000002, 0x0065B28E, 0xA0812902, 0x00000002, + 0x0065B291, 0xA0812902, 0x00000003, 0x0065B29C, 0x0027D69C, 0x0065CA9C, + 0x00000003, 0x0065B29C, 0x0027D69C, 0x0065D89C, + // Block 140, offset 0x2300 + 0x00000005, 0x0065B29C, 0xA001291C, 0x0065789C, 0x0065D89C, 0x00659E9C, + 0x00000004, 0x0065B29C, 0xA001281C, 0x0065CA9C, 0x00659E9C, 0x00000005, + 0x0065B29C, 0xA001291C, 0x0065D89C, 0x00659E9C, 0xA001281C, 0x00000004, + 0x0065B49C, 0x0065789C, 0x0065869C, 0x0065CE9C, 0x00000003, 0x0065B49C, + 0x0065789C, 0x0065CA9C, 0x00000002, 0x0065B484, 0x00659084, 0x00000003, + 0x0065B49C, 0x00659A9C, 0x0065AA9C, 0x00000003, 0x0065B49C, 0x0065CA9C, + 0x0065869C, 0x00000005, 0x0065B49C, 0x0065D89C, 0x00658E9C, 0x0065C49C, + 0x0065D89C, 0x00000004, 0x0065B69C, 0x0065869C, 0x0065CE9C, 0x0065D89C, + 0x00000006, 0x0065B69C, 0x0065C89C, 0x0065AA9C, 0xA001281C, 0x0027D69C, + 0x0065CA9C, 0x00000004, 0x0065BA9C, 0x0027D69C, 0x00659E9C, 0x0065CA9C, + 0x00000003, 0x0065BA9C, 0x0065829C, 0xA001281C, + // Block 141, offset 0x2340 + 0x00000005, 0x0065BA9C, 0x0065829C, 0xA001281C, 0x00659E9C, 0x0065D89C, + 0x00000004, 0x0065BE9C, 0x0027D69C, 0x00659E9C, 0xA001281C, 0x00000003, + 0x0065BE9C, 0x0027D69C, 0x0065CA9C, 0x00000003, 0x0065C09C, 0x0065769C, + 0x0065D89C, 0x00000004, 0x0065C89C, 0x00659A9C, 0x00659E9C, 0x0065CA9C, + 0x00000005, 0x0065CA9C, 0x0027D69C, 0x0065AE9C, 0xA001281C, 0x0065CA9C, + 0x00000004, 0x0065CA9C, 0x0065AC9C, 0xA001291C, 0x0027D69C, 0x00000006, + 0x0065CC9C, 0x0065D89C, 0x00659E9C, 0x0065889C, 0xA001281C, 0x0065D89C, + 0x00000002, 0x0065D091, 0xA0812802, 0x00000003, 0x0065D09C, 0x00659A9C, + 0x00659E9C, 0x00000002, 0x0065D291, 0xA0812802, 0x00000002, 0x0065D491, + 0xA0812802, 0x00000002, 0x0065D691, 0xA0812802, 0x00000002, 0x0065DA84, + 0xA0013A04, 0x00000002, 0x0065EC84, 0xA0013A04, + // Block 142, offset 0x2380 + 0x00000002, 0x0065F684, 0xA0013A04, 0x00000002, 0x00660684, 0xA0013A04, + 0x00000002, 0x00661284, 0xA0013A04, 0x00000002, 0x00661484, 0xA0013A04, + 0x00000002, 0x00661C84, 0xA0013A04, 0x00000002, 0x00661E84, 0xA0013A04, + 0x00000002, 0x00662284, 0xA0013A04, 0x00000002, 0x00663884, 0xA0013A04, + 0x00000002, 0x00663896, 0xA0013A16, 0x00000002, 0x00663A84, 0xA0013A04, + 0x00000002, 0x00663A84, 0xA0013C04, 0x00000002, 0x0075C284, 0xA0013904, + 0x00000002, 0x00862084, 0xA0013904, 0x00000002, 0x00862284, 0xA0013904, + 0x00000002, 0x00862484, 0xA0013904, 0x00000002, 0x00862684, 0xA0013904, + 0x00000002, 0x00862884, 0xA0013904, 0x00000002, 0x00862A84, 0xA0013904, + 0x00000002, 0x00862C84, 0xA0013904, 0x00000002, 0x00862C84, 0xA0013A04, + 0x00000002, 0x00862E84, 0xA0013904, 0x00000002, + // Block 143, offset 0x23c0 + 0x00863084, 0xA0013904, 0x00000002, 0x00863284, 0xA0013904, 0x00000002, + 0x00863284, 0xA0013A04, 0x00000002, 0x00863484, 0xA0013904, 0x00000002, + 0x00863484, 0xA0013A04, 0x00000002, 0x00863684, 0xA0013904, 0x00000002, + 0x00863684, 0xA0013A04, 0x00000002, 0x00863884, 0xA0013904, 0x00000002, + 0x00863A84, 0xA0013904, 0x00000002, 0x00863C84, 0xA0013904, 0x00000002, + 0x00863E84, 0xA0013904, 0x00000002, 0x00863E84, 0xA0013A04, 0x00000002, + 0x00863E84, 0xA0013C04, 0x00000002, 0x00864084, 0xA0013904, 0x00000002, + 0x00864284, 0xA0013904, 0x00000002, 0x00864484, 0xA0013904, 0x00000002, + 0x00864684, 0xA0013904, 0x00000002, 0x00864684, 0xA0013A04, 0x00000002, + 0x00864884, 0xA0013904, 0x00000002, 0x00864884, 0xA0013A04, 0x00000002, + 0x00864A84, 0xA0013904, 0x00000002, 0x00864C84, + // Block 144, offset 0x2400 + 0xA0013904, 0x00000002, 0x029C6C84, 0xA0013904, 0x00000002, 0x029CB284, + 0xA0013904, 0x00000002, 0x02A30484, 0xA0013904, 0x00000002, 0x02A3C084, + 0xA0013904, 0x00000002, 0x02A40084, 0xA0013904, 0x00000002, 0x02A6B884, + 0xA0013904, 0x00000002, 0x02A6D284, 0xA0013904, 0x00000002, 0x02A70484, + 0xA0013904, 0x00000002, 0x02B81E84, 0xA0013904, 0x00000002, 0x02B81E84, + 0xA0013A04, 0x00000002, 0x02B84484, 0xA0013904, 0x00000002, 0x02B84684, + 0xA0013904, 0x00000002, 0x02BEA084, 0xA0013904, 0x00000002, 0x02BF8684, + 0xA0013904, 0x00000002, 0x02CBCA84, 0xA0013904, 0x00000002, 0x02CE1084, + 0xA0013904, 0x00000004, 0x02D0549C, 0x02BE1E9C, 0x029E349C, 0x02F27C9C, + 0x00000002, 0x02D6F484, 0xA0013904, 0x00000002, 0x02E45684, 0xA0013904, + 0x00000002, 0x02E4B684, 0xA0013904, 0x00000002, + // Block 145, offset 0x2440 + 0x02E71684, 0xA0013904, 0x00000002, 0x02EB1684, 0xA0013904, 0x00000002, + 0x02EDDC84, 0xA0013904, 0x00000002, 0x02F27484, 0xA0013904, 0x00000002, + 0x02F5F284, 0xA0013904, 0x00000002, 0x02FEA484, 0xA0013904, 0x00000002, + 0x02FEA684, 0xA0013904, 0x00000002, 0x02FEA684, 0xA0013A04, 0x00000002, + 0x02FF1484, 0xA0013904, 0x00000002, 0x02FF1484, 0xA0013A04, 0x00000002, + 0x0300FE84, 0xA0013904, 0x00000002, 0x03011284, 0xA0013904, 0x00000002, + 0x0303F884, 0xA0013904, 0x00000002, 0x0304F284, 0xA0013904, 0x00000002, + 0x0304F284, 0xA0013A04, 0x00000002, 0x0313A484, 0xA0013904, 0x00000002, + 0x031B6684, 0xA0013904, 0x00000002, 0x031F6C84, 0xA0013904, 0x00000002, + 0x031F6C84, 0xA0013A04, 0x00000002, 0x03212284, 0xA0013904, 0x00000002, + 0x032C3884, 0xA0013904, 0x00000002, 0x032DD084, + // Block 146, offset 0x2480 + 0xA0013904, 0x00000002, 0x0331C084, 0xA0013904, 0x00000002, 0x03332C84, + 0xA0013904, 0x00000002, 0x03355084, 0xA0013904, 0x00000002, 0x03367884, + 0xA0013904, 0x00000002, 0x033CEA84, 0xA0013904, 0x00000002, 0x033E9484, + 0xA0013904, 0x00000002, 0x033EA484, 0xA0013904, 0x00000002, 0x033F1A84, + 0xA0013904, 0x00000002, 0x033F3884, 0xA0013904, 0x00000002, 0x033F3884, + 0xA0013A04, 0x00000003, 0x0003F484, 0x002C9884, 0x0003F69F, 0x00000003, + 0x0003F484, 0x002C988A, 0x0003F69F, 0x00000003, 0x0003F484, 0x002D6884, + 0x0003F69F, 0x00000003, 0x0003F484, 0x002D688A, 0x0003F69F, 0x00000003, + 0x0003F484, 0x002D9A84, 0x0003F69F, 0x00000003, 0x0003F484, 0x002D9A8A, + 0x0003F69F, 0x00000003, 0x0003F484, 0x002DFE84, 0x0003F69F, 0x00000003, + 0x0003F484, 0x002DFE8A, 0x0003F69F, 0x00000003, + // Block 147, offset 0x24c0 + 0x0003F484, 0x002EE284, 0x0003F69F, 0x00000003, 0x0003F484, 0x002EE28A, + 0x0003F69F, 0x00000003, 0x0003F484, 0x002F5684, 0x0003F69F, 0x00000003, + 0x0003F484, 0x002F568A, 0x0003F69F, 0x00000003, 0x0003F484, 0x002F7A84, + 0x0003F69F, 0x00000003, 0x0003F484, 0x002F7A8A, 0x0003F69F, 0x00000003, + 0x0003F484, 0x002FE684, 0x0003F69F, 0x00000003, 0x0003F484, 0x002FE68A, + 0x0003F69F, 0x00000003, 0x0003F484, 0x00302C84, 0x0003F69F, 0x00000003, + 0x0003F484, 0x00302C8A, 0x0003F69F, 0x00000003, 0x0003F484, 0x0030F684, + 0x0003F69F, 0x00000003, 0x0003F484, 0x0030F68A, 0x0003F69F, 0x00000003, + 0x0004B084, 0x002FE68A, 0x0004B29F, 0x00000002, 0x002C0A9D, 0x002F569C, + 0x00000002, 0x402C0C20, 0xAE604102, 0x00000002, 0x002C0C83, 0xAE604102, + 0x00000002, 0x402C0C20, 0xAE604702, 0x00000002, + // Block 148, offset 0x2500 + 0x402C0C20, 0xAE605202, 0x00000002, 0x002C0C83, 0xAE605202, 0x00000002, + 0x402C0C20, 0xACA05602, 0x00000002, 0x002C0C83, 0xACA05602, 0x00000002, + 0x402C0C20, 0xADC07002, 0x00000002, 0x002C0C83, 0xADC07002, 0x00000002, + 0x402C0C20, 0xADC07702, 0x00000002, 0x002C0C83, 0xADC07702, 0x00000002, + 0x402C0C20, 0xADC07802, 0x00000002, 0x002C0C83, 0xADC07802, 0x00000002, + 0x402C0C20, 0xADC07B02, 0x00000002, 0x002C0C83, 0xADC07B02, 0x00000002, + 0x402C0E20, 0xAE603202, 0x00000002, 0x002C0E83, 0xAE603202, 0x00000003, + 0x402C0E20, 0xAE603202, 0xAE605202, 0x00000003, 0x002C0E83, 0xAE603202, + 0xAE605202, 0x00000002, 0x402C0E20, 0xAE603C02, 0x00000002, 0x002C0E83, + 0xAE603C02, 0x00000002, 0x402C0E20, 0xAE604102, 0x00000002, 0x002C0E83, + 0xAE604102, 0x00000003, 0x402C0E20, 0xAE604102, + // Block 149, offset 0x2540 + 0xAE605202, 0x00000003, 0x002C0E83, 0xAE604102, 0xAE605202, 0x00000002, + 0x402C0E20, 0xAE605202, 0x00000002, 0x002C0E83, 0xAE605202, 0x00000002, + 0x402C0E20, 0xACA05602, 0x00000002, 0x002C0E83, 0xACA05602, 0x00000002, + 0x402C0E20, 0xADC07002, 0x00000002, 0x002C0E83, 0xADC07002, 0x00000003, + 0x402C0E20, 0xADC07002, 0xAE605202, 0x00000003, 0x002C0E83, 0xADC07002, + 0xAE605202, 0x00000002, 0x402C0E20, 0xADC07702, 0x00000002, 0x002C0E83, + 0xADC07702, 0x00000002, 0x402C1020, 0xAE603202, 0x00000002, 0x002C1083, + 0xAE603202, 0x00000002, 0x402C1020, 0xAE603502, 0x00000002, 0x002C1083, + 0xAE603502, 0x00000002, 0x402C1020, 0xAE603702, 0x00000002, 0x002C1083, + 0xAE603702, 0x00000002, 0x402C1020, 0xAE603C02, 0x00000002, 0x002C1083, + 0xAE603C02, 0x00000003, 0x402C1020, 0xAE603C02, + // Block 150, offset 0x2580 + 0xAE603202, 0x00000003, 0x002C1083, 0xAE603C02, 0xAE603202, 0x00000003, + 0x402C1020, 0xAE603C02, 0xAE603502, 0x00000003, 0x002C1083, 0xAE603C02, + 0xAE603502, 0x00000003, 0x402C1020, 0xAE603C02, 0xAE604E02, 0x00000003, + 0x002C1083, 0xAE603C02, 0xAE604E02, 0x00000003, 0x402C1020, 0xAE603C02, + 0xAE606402, 0x00000003, 0x002C1083, 0xAE603C02, 0xAE606402, 0x00000002, + 0x402C1020, 0xAE604102, 0x00000002, 0x002C1083, 0xAE604102, 0x00000002, + 0x402C1020, 0xAE604702, 0x00000002, 0x002C1083, 0xAE604702, 0x00000002, + 0x402C1020, 0xAE604E02, 0x00000002, 0x002C1083, 0xAE604E02, 0x00000002, + 0x402C1020, 0xAE605202, 0x00000002, 0x002C1083, 0xAE605202, 0x00000002, + 0x402C1020, 0xACA05602, 0x00000002, 0x002C1083, 0xACA05602, 0x00000003, + 0x402C1020, 0xACA05602, 0xAE603702, 0x00000003, + // Block 151, offset 0x25c0 + 0x002C1083, 0xACA05602, 0xAE603702, 0x00000002, 0x402C1020, 0xACA05902, + 0x00000002, 0x002C1083, 0xACA05902, 0x00000002, 0x402C1020, 0xAE605B02, + 0x00000002, 0x002C1083, 0xAE605B02, 0x00000003, 0x402C1020, 0xAE605B02, + 0xAE603202, 0x00000003, 0x002C1083, 0xAE605B02, 0xAE603202, 0x00000003, + 0x402C1020, 0xAE605B02, 0xAE603502, 0x00000003, 0x002C1083, 0xAE605B02, + 0xAE603502, 0x00000002, 0x402C1020, 0xAE606402, 0x00000002, 0x002C1083, + 0xAE606402, 0x00000002, 0x402C1020, 0xAE606502, 0x00000002, 0x002C1083, + 0xAE606502, 0x00000002, 0x402C1020, 0xAE606702, 0x00000002, 0x002C1083, + 0xAE606702, 0x00000002, 0x402C1020, 0xADC07002, 0x00000002, 0x002C1083, + 0xADC07002, 0x00000003, 0x402C1020, 0xADC07002, 0xAE603C02, 0x00000003, + 0x002C1083, 0xADC07002, 0xAE603C02, 0x00000002, + // Block 152, offset 0x2600 + 0x402C1020, 0xADC07802, 0x00000002, 0x002C1083, 0xADC07802, 0x00000002, + 0x402C1020, 0xADC07A02, 0x00000002, 0x002C1083, 0xADC07A02, 0x00000002, + 0x402C3C20, 0xAE603202, 0x00000002, 0x002C3C83, 0xAE603202, 0x00000002, + 0x402C3C20, 0xAE604102, 0x00000002, 0x002C3C83, 0xAE604102, 0x00000002, + 0x402C3C20, 0xACA05602, 0x00000002, 0x002C3C83, 0xACA05602, 0x00000002, + 0x402C3C20, 0xADC07002, 0x00000002, 0x002C3C83, 0xADC07002, 0x00000002, + 0x402C3C20, 0xADC07B02, 0x00000002, 0x002C3C83, 0xADC07B02, 0x00000002, + 0x402C3E20, 0xAE604702, 0x00000002, 0x002C3E83, 0xAE604702, 0x00000002, + 0x402C3E20, 0xAE605202, 0x00000002, 0x002C3E83, 0xAE605202, 0x00000002, + 0x402C4020, 0xAE603202, 0x00000002, 0x002C4083, 0xAE603202, 0x00000002, + 0x402C4020, 0xAE603502, 0x00000002, 0x002C4083, + // Block 153, offset 0x2640 + 0xAE603502, 0x00000002, 0x402C4020, 0xAE603702, 0x00000002, 0x002C4083, + 0xAE603702, 0x00000002, 0x402C4020, 0xAE603C02, 0x00000002, 0x002C4083, + 0xAE603C02, 0x00000002, 0x402C4020, 0xAE604102, 0x00000002, 0x002C4083, + 0xAE604102, 0x00000002, 0x402C4020, 0xAE604702, 0x00000002, 0x002C4083, + 0xAE604702, 0x00000003, 0x402C4020, 0xAE604702, 0xAE603202, 0x00000003, + 0x002C4083, 0xAE604702, 0xAE603202, 0x00000002, 0x402C4020, 0xAE604E02, + 0x00000002, 0x002C4083, 0xAE604E02, 0x00000002, 0x002C4083, 0xAE605202, + 0x00000002, 0x402C4020, 0xACA05902, 0x00000002, 0x002C4083, 0xACA05902, + 0x00000002, 0x402C4020, 0xAE605B02, 0x00000002, 0x002C4083, 0xAE605B02, + 0x00000002, 0x402C4020, 0xAE606402, 0x00000002, 0x002C4083, 0xAE606402, + 0x00000002, 0x402C4020, 0xAE606502, 0x00000002, + // Block 154, offset 0x2680 + 0x002C4083, 0xAE606502, 0x00000002, 0x402C4020, 0xAE606702, 0x00000002, + 0x002C4083, 0xAE606702, 0x00000002, 0x402C4020, 0xADC07002, 0x00000002, + 0x002C4083, 0xADC07002, 0x00000002, 0x402C4020, 0xADC07A02, 0x00000002, + 0x002C4083, 0xADC07A02, 0x00000002, 0x402C6620, 0xAE603202, 0x00000002, + 0x002C6683, 0xAE603202, 0x00000002, 0x402C6620, 0xAE604102, 0x00000002, + 0x002C6683, 0xAE604102, 0x00000002, 0x402C6620, 0xAE605202, 0x00000002, + 0x002C6683, 0xAE605202, 0x00000002, 0x402C6620, 0xACA05602, 0x00000002, + 0x002C6683, 0xACA05602, 0x00000002, 0x402C6620, 0xAE606502, 0x00000002, + 0x002C6683, 0xAE606502, 0x00000002, 0x402C6620, 0xAE606702, 0x00000002, + 0x002C6683, 0xAE606702, 0x00000002, 0x402C6620, 0xADC07002, 0x00000002, + 0x002C6683, 0xADC07002, 0x00000003, 0x402C6620, + // Block 155, offset 0x26c0 + 0xADC07002, 0xAE605B02, 0x00000003, 0x002C6683, 0xADC07002, 0xAE605B02, + 0x00000002, 0x402C6620, 0xADC07B02, 0x00000002, 0x002C6683, 0xADC07B02, + 0x00000002, 0x002C989C, 0x0030BE9D, 0x00000002, 0x002D0884, 0x002D9A84, + 0x00000002, 0x402D2420, 0xAE603202, 0x00000002, 0x002D2483, 0xAE603202, + 0x00000002, 0x402D2420, 0xAE603502, 0x00000002, 0x002D2483, 0xAE603502, + 0x00000002, 0x402D2420, 0xAE603702, 0x00000002, 0x002D2483, 0xAE603702, + 0x00000002, 0x402D2420, 0xAE603C02, 0x00000002, 0x002D2483, 0xAE603C02, + 0x00000003, 0x402D2420, 0xAE603C02, 0xAE603202, 0x00000003, 0x002D2483, + 0xAE603C02, 0xAE603202, 0x00000003, 0x402D2420, 0xAE603C02, 0xAE603502, + 0x00000003, 0x002D2483, 0xAE603C02, 0xAE603502, 0x00000003, 0x402D2420, + 0xAE603C02, 0xAE604E02, 0x00000003, 0x002D2483, + // Block 156, offset 0x2700 + 0xAE603C02, 0xAE604E02, 0x00000003, 0x402D2420, 0xAE603C02, 0xAE606402, + 0x00000003, 0x002D2483, 0xAE603C02, 0xAE606402, 0x00000002, 0x402D2420, + 0xAE604102, 0x00000002, 0x002D2483, 0xAE604102, 0x00000002, 0x402D2420, + 0xAE604702, 0x00000002, 0x002D2483, 0xAE604702, 0x00000003, 0x402D2420, + 0xAE604702, 0xAE605B02, 0x00000003, 0x002D2483, 0xAE604702, 0xAE605B02, + 0x00000002, 0x402D2420, 0xAE604D02, 0x00000002, 0x002D2483, 0xAE604D02, + 0x00000002, 0x402D2420, 0xAE604E02, 0x00000002, 0x002D2483, 0xAE604E02, + 0x00000003, 0x402D2420, 0xAE604E02, 0xAE603202, 0x00000003, 0x002D2483, + 0xAE604E02, 0xAE603202, 0x00000003, 0x402D2420, 0xAE604E02, 0xAE604702, + 0x00000003, 0x002D2483, 0xAE604E02, 0xAE604702, 0x00000003, 0x402D2420, + 0xAE604E02, 0xAE605B02, 0x00000003, 0x002D2483, + // Block 157, offset 0x2740 + 0xAE604E02, 0xAE605B02, 0x00000002, 0x402D2420, 0xAE605202, 0x00000002, + 0x002D2483, 0xAE605202, 0x00000003, 0x402D2420, 0xAE605202, 0xAE605B02, + 0x00000003, 0x002D2483, 0xAE605202, 0xAE605B02, 0x00000002, 0x402D2420, + 0xACA05902, 0x00000002, 0x002D2483, 0xACA05902, 0x00000003, 0x402D2420, + 0xACA05902, 0xAE605B02, 0x00000003, 0x002D2483, 0xACA05902, 0xAE605B02, + 0x00000002, 0x402D2420, 0xAE605B02, 0x00000002, 0x002D2483, 0xAE605B02, + 0x00000003, 0x402D2420, 0xAE605B02, 0xAE603202, 0x00000003, 0x002D2483, + 0xAE605B02, 0xAE603202, 0x00000003, 0x402D2420, 0xAE605B02, 0xAE603502, + 0x00000003, 0x002D2483, 0xAE605B02, 0xAE603502, 0x00000002, 0x402D2420, + 0xAE606402, 0x00000002, 0x002D2483, 0xAE606402, 0x00000002, 0x402D2420, + 0xAE606502, 0x00000002, 0x002D2483, 0xAE606502, + // Block 158, offset 0x2780 + 0x00000002, 0x402D2420, 0xAE606702, 0x00000002, 0x002D2483, 0xAE606702, + 0x00000002, 0x402D2420, 0xAD806802, 0x00000002, 0x002D2483, 0xAD806802, + 0x00000003, 0x402D2420, 0xAD806802, 0xAE603202, 0x00000003, 0x002D2483, + 0xAD806802, 0xAE603202, 0x00000003, 0x402D2420, 0xAD806802, 0xAE603502, + 0x00000003, 0x002D2483, 0xAD806802, 0xAE603502, 0x00000003, 0x402D2420, + 0xAD806802, 0xAE604E02, 0x00000003, 0x002D2483, 0xAD806802, 0xAE604E02, + 0x00000003, 0x402D2420, 0xAD806802, 0xAE606402, 0x00000003, 0x002D2483, + 0xAD806802, 0xAE606402, 0x00000003, 0x402D2420, 0xAD806802, 0xADC07002, + 0x00000003, 0x002D2483, 0xAD806802, 0xADC07002, 0x00000002, 0x402D2420, + 0xADC07002, 0x00000002, 0x002D2483, 0xADC07002, 0x00000003, 0x402D2420, + 0xADC07002, 0xAE603C02, 0x00000003, 0x002D2483, + // Block 159, offset 0x27c0 + 0xADC07002, 0xAE603C02, 0x00000002, 0x002D689C, 0x002BDE9C, 0x00000002, + 0x002D689D, 0x002D229C, 0x00000002, 0x002D689D, 0x002F2C9D, 0x00000002, + 0x002D689D, 0x0030BE9D, 0x00000002, 0x002D689D, 0x00312A9C, 0x00000002, + 0x002D9A84, 0x002D9A9F, 0x00000002, 0x002D9A8A, 0x002D9A9F, 0x00000003, + 0x002D9A84, 0x002D9A84, 0x002D9A9F, 0x00000003, 0x002D9A8A, 0x002D9A8A, + 0x002D9A9F, 0x00000002, 0x002D9A84, 0x002DCC84, 0x00000002, 0x002D9A8A, + 0x002DCC8A, 0x00000002, 0x002D9A9C, 0x002E9E9C, 0x00000002, 0x002D9A9D, + 0x00306C9D, 0x00000002, 0x002D9A84, 0x0030BE9F, 0x00000002, 0x002D9A8A, + 0x0030BE9F, 0x00000002, 0x002D9A84, 0x0030F69F, 0x00000002, 0x002D9A8A, + 0x0030F69F, 0x00000002, 0x002DFE9C, 0x002BDE9D, 0x00000002, 0x002DFE9D, + 0x002C0A9D, 0x00000002, 0x002DFE9C, 0x002D229C, + // Block 160, offset 0x2800 + 0x00000002, 0x002DFE9D, 0x002DFE9D, 0x00000002, 0x002DFE9C, 0x002E229C, + 0x00000002, 0x002DFE9C, 0x002E829C, 0x00000002, 0x002DFE9D, 0x002E829D, + 0x00000002, 0x002DFE9C, 0x00302C9C, 0x00000002, 0x002DFE9C, 0x0030BE9D, + 0x00000002, 0x002DFE9C, 0x0030E29D, 0x00000002, 0x002DFE9C, 0x0032A29D, + 0x00000002, 0x002E229C, 0x0030F69C, 0x00000002, 0x002E829C, 0x002FE69C, + 0x00000002, 0x002E9E8A, 0x002EE284, 0x00000002, 0x002E9E9C, 0x002FE69C, + 0x00000002, 0x002EE29C, 0x0030BE9D, 0x00000002, 0x002F2C9D, 0x002D689D, + 0x00000002, 0x002F2C9D, 0x002F7A9D, 0x00000002, 0x002F2C9C, 0x002FE69C, + 0x00000002, 0x002FE69D, 0x002C629D, 0x00000002, 0x002FE694, 0x002E8294, + 0x00000002, 0x002FE69C, 0x002F7A9C, 0x00000002, 0x002FE69D, 0x002FE69D, + 0x00000002, 0x002FE684, 0x00302C84, 0x00000002, + // Block 161, offset 0x2840 + 0x002FE69D, 0x0030BE9C, 0x00000002, 0x00302C94, 0x002E8294, 0x00000002, + 0x0030BE84, 0x002D9A9F, 0x00000002, 0x0030BE8A, 0x002D9A9F, 0x00000003, + 0x0030BE84, 0x002D9A84, 0x002D9A9F, 0x00000003, 0x0030BE8A, 0x002D9A8A, + 0x002D9A9F, 0x00000002, 0x4030E420, 0xAE603C02, 0x00000002, 0x0030E483, + 0xAE603C02, 0x00000002, 0x4030E420, 0xAE604102, 0x00000002, 0x0030E483, + 0xAE604102, 0x00000002, 0x4030E420, 0xAE604702, 0x00000002, 0x0030E483, + 0xAE604702, 0x00000002, 0x4030E420, 0xAE605202, 0x00000002, 0x0030E483, + 0xAE605202, 0x00000002, 0x4030E420, 0xACA05602, 0x00000002, 0x0030E483, + 0xACA05602, 0x00000002, 0x4030E420, 0xADC07002, 0x00000002, 0x0030E483, + 0xADC07002, 0x00000002, 0x4030E420, 0xADC07902, 0x00000002, 0x0030E483, + 0xADC07902, 0x00000002, 0x4030E420, 0xADC07B02, + // Block 162, offset 0x2880 + 0x00000002, 0x0030F684, 0x002D9A9F, 0x00000002, 0x0030F68A, 0x002D9A9F, + 0x00000003, 0x0030F684, 0x002D9A84, 0x002D9A9F, 0x00000003, 0x0030F68A, + 0x002D9A8A, 0x002D9A9F, 0x00000002, 0x0032769C, 0x002FE69C, 0x00000002, + 0x00393C99, 0x003A8E99, 0x00000002, 0x00393C9A, 0x003A8E9A, 0x00000002, + 0x00395699, 0x003A8E99, 0x00000002, 0x0039569A, 0x003A8E9A, 0x00000002, + 0x00395899, 0x003A8E99, 0x00000002, 0x0039589A, 0x003A8E9A, 0x00000002, + 0x00396499, 0x003A8E99, 0x00000002, 0x0039649A, 0x003A8E9A, 0x00000002, + 0x00397299, 0x003A8E99, 0x00000002, 0x0039729A, 0x003A8E9A, 0x00000002, + 0x00397499, 0x003A8E99, 0x00000002, 0x0039749A, 0x003A8E9A, 0x00000002, + 0x0039C699, 0x003A8E99, 0x00000002, 0x0039C69A, 0x003A8E9A, 0x00000002, + 0x0039C899, 0x003A8E99, 0x00000002, 0x0039C89A, + // Block 163, offset 0x28c0 + 0x003A8E9A, 0x00000002, 0x0039DC99, 0x003A8E99, 0x00000002, 0x0039DC9A, + 0x003A8E9A, 0x00000002, 0x0039DE99, 0x003A8E99, 0x00000002, 0x0039DE9A, + 0x003A8E9A, 0x00000002, 0x0039E699, 0x003A8E99, 0x00000002, 0x0039E69A, + 0x003A8E9A, 0x00000002, 0x0039EE99, 0x003A8E99, 0x00000002, 0x0039EE9A, + 0x003A8E9A, 0x00000002, 0x0039F099, 0x003A8E99, 0x00000002, 0x0039F09A, + 0x003A8E9A, 0x00000002, 0x0039FC99, 0x003A8E99, 0x00000002, 0x0039FC9A, + 0x003A8E9A, 0x00000002, 0x003A1299, 0x003A8E99, 0x00000002, 0x003A129A, + 0x003A8E9A, 0x00000002, 0x003A1A99, 0x003A8E99, 0x00000002, 0x003A1A9A, + 0x003A8E9A, 0x00000002, 0x003A4099, 0x003A8E99, 0x00000002, 0x003A409A, + 0x003A8E9A, 0x00000002, 0x003A4E9A, 0x003A8E9A, 0x00000002, 0x003A5699, + 0x003A8E99, 0x00000002, 0x003A569A, 0x003A8E9A, + // Block 164, offset 0x2900 + 0x00000002, 0x003A689A, 0x003A8E9A, 0x00000002, 0x003A9099, 0x003A8E99, + 0x00000002, 0x003A909A, 0x003A8E9A, 0x00000002, 0x402D6A20, 0xAE604702, + 0x00000002, 0x002D6A83, 0xAE604702, 0x00000002, 0x402D6A20, 0xAE605202, + 0x00000002, 0x002D6A83, 0xAE605202, 0x00000002, 0x002D9883, 0xAE603202, + 0x00000002, 0x002D9883, 0xAE603502, 0x00000002, 0x002D9883, 0xAE603702, + 0x00000002, 0x002D9883, 0xAE603C02, 0x00000002, 0x002D9883, 0xAE604102, + 0x00000002, 0x002D9883, 0xAE604702, 0x00000003, 0x002D9883, 0xAE604702, + 0xAE603202, 0x00000002, 0x002D9883, 0xAE604E02, 0x00000002, 0x002D9883, + 0xACA05902, 0x00000002, 0x002D9883, 0xAE605B02, 0x00000002, 0x002D9883, + 0xAE606402, 0x00000002, 0x002D9883, 0xAE606502, 0x00000002, 0x002D9883, + 0xAE606702, 0x00000002, 0x002D9883, 0xADC07002, + // Block 165, offset 0x2940 + 0x00000002, 0x002D9883, 0xADC07A02, 0x00000002, 0x402EE420, 0xAE604E02, + 0x00000002, 0x002EE483, 0xAE604E02, 0x00000002, 0x402EE420, 0xAE605B02, + 0x00000002, 0x002EE483, 0xAE605B02, 0x00000002, 0x40306E20, 0xAE603202, + 0x00000002, 0x00306E83, 0xAE603202, 0x00000002, 0x40306E20, 0xAE603502, + 0x00000002, 0x00306E83, 0xAE603502, 0x00000002, 0x40306E20, 0xAE604102, + 0x00000002, 0x00306E83, 0xAE604102, 0x00000002, 0x40306E20, 0xAE605B02, + 0x00000002, 0x00306E83, 0xAE605B02, 0x00000002, 0x402FE820, 0xAE605202, + 0x00000002, 0x002FE883, 0xAE605202, 0x00000002, 0x002C6294, 0xA0013914, + 0x00000002, 0x00302C83, 0x402D6820, 0x00000002, 0x00302C89, 0x002D6888, + 0x00000002, 0x40310021, 0xAE603202, 0x00000002, 0x003100A3, 0xAE603202, + 0x00000002, 0x40310021, 0xAE603502, 0x00000002, + // Block 166, offset 0x2980 + 0x003100A3, 0xAE603502, 0x00000002, 0x40310021, 0xAE604102, 0x00000002, + 0x003100A3, 0xAE604102, 0x00000002, 0x40310021, 0xAE605B02, 0x00000002, + 0x003100A3, 0xAE605B02, 0x00000002, 0x40320C20, 0xAE603202, 0x00000002, + 0x00320C83, 0xAE603202, 0x00000002, 0x40320C20, 0xAE605B02, 0x00000002, + 0x00320C83, 0xAE605B02, 0x00000002, 0x40320C21, 0xAE605B02, 0x00000002, + 0x00320CA3, 0xAE605B02, 0x00000002, 0x40320E20, 0xAE603202, 0x00000002, + 0x00320E83, 0xAE603202, 0x00000002, 0x40320E21, 0xAE604E02, 0x00000002, + 0x00320EA3, 0xAE604E02, 0x00000002, 0x40320E21, 0xAE605B02, 0x00000002, + 0x00320EA3, 0xAE605B02, 0x00000002, 0x40321020, 0xAE603202, 0x00000002, + 0x00321083, 0xAE603202, 0x00000002, 0x402BDE21, 0x002C9888, 0x00000002, + 0x002BDEA3, 0x002C9888, 0x00000003, 0x402BDE21, + // Block 167, offset 0x29c0 + 0x002C9888, 0xAE605B02, 0x00000003, 0x002BDEA3, 0x002C9888, 0xAE605B02, + 0x00000002, 0x402EE221, 0x002C9888, 0x00000002, 0x002EE2A3, 0x002C9888, + 0x00000003, 0x402EE221, 0x002C9888, 0xAE604E02, 0x00000003, 0x002EE2A3, + 0x002C9888, 0xAE604E02, 0x00000003, 0x402EE221, 0x002C9888, 0xAE605B02, + 0x00000003, 0x002EE2A3, 0x002C9888, 0xAE605B02, 0x00000002, 0x40306C21, + 0x002C9888, 0x00000002, 0x00306CA3, 0x002C9888, 0x00000003, 0x40306C21, + 0x002C9888, 0xAE603202, 0x00000003, 0x00306CA3, 0x002C9888, 0xAE603202, + 0x00000003, 0x40306C21, 0x002C9888, 0xAE603502, 0x00000003, 0x00306CA3, + 0x002C9888, 0xAE603502, 0x00000003, 0x40306C21, 0x002C9888, 0xAE604102, + 0x00000003, 0x00306CA3, 0x002C9888, 0xAE604102, 0x00000003, 0x40306C21, + 0x002C9888, 0xAE605B02, 0x00000003, 0x00306CA3, + // Block 168, offset 0x2a00 + 0x002C9888, 0xAE605B02, 0x00000002, 0x404A7620, 0x838225B3, 0x00000004, + 0x004A8083, 0x404AB020, 0x404A8020, 0x404AFA20, 0x00000004, 0x004A8084, + 0x404AB020, 0x404A8020, 0x404AFA20, 0x00000004, 0x004A8083, 0x404AB420, + 0x404A8020, 0x404AFA20, 0x00000004, 0x004A8084, 0x404AB420, 0x404A8020, + 0x404AFA20, 0x00000004, 0x004A8083, 0x404AFA20, 0x404A8020, 0x404AFA20, + 0x00000004, 0x004A8084, 0x404AFA20, 0x404A8020, 0x404AFA20, 0x00000002, + 0x404A8020, 0x828225B5, 0x00000004, 0x004AB083, 0x404A8020, 0x404A8020, + 0x404AFA20, 0x00000004, 0x004AB084, 0x404A8020, 0x404A8020, 0x404AFA20, + 0x00000004, 0x004AB083, 0x404A8420, 0x404A8020, 0x404AFA20, 0x00000004, + 0x004AB084, 0x404A8420, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AB083, + 0x404AB820, 0x404A8020, 0x404AFA20, 0x00000004, + // Block 169, offset 0x2a40 + 0x004AB084, 0x404AB820, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AB083, + 0x404AC020, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AB084, 0x404AC020, + 0x404A8020, 0x404AFA20, 0x00000004, 0x004AB083, 0x404AC420, 0x404A8020, + 0x404AFA20, 0x00000004, 0x004AB084, 0x404AC420, 0x404A8020, 0x404AFA20, + 0x00000002, 0x404AB020, 0x828225B5, 0x00000002, 0x004AB083, 0x828225B5, + 0x00000004, 0x004AC083, 0x404A8020, 0x404A8020, 0x404AFA20, 0x00000004, + 0x004AC084, 0x404A8020, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AC083, + 0x404AB020, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AC084, 0x404AB020, + 0x404A8020, 0x404AFA20, 0x00000004, 0x004AC083, 0x404AFA20, 0x404A8020, + 0x404AFA20, 0x00000004, 0x004AC084, 0x404AFA20, 0x404A8020, 0x404AFA20, + 0x00000002, 0x404AC020, 0x828225B5, 0x00000004, + // Block 170, offset 0x2a80 + 0x004AC483, 0x404A8420, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AC484, + 0x404A8420, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AC483, 0x404AB020, + 0x404A8020, 0x404AFA20, 0x00000004, 0x004AC484, 0x404AB020, 0x404A8020, + 0x404AFA20, 0x00000004, 0x004AC483, 0x404AB420, 0x404A8020, 0x404AFA20, + 0x00000004, 0x004AC484, 0x404AB420, 0x404A8020, 0x404AFA20, 0x00000002, + 0x404AD020, 0x828225B5, 0x00000004, 0x004AE083, 0x404A8020, 0x404A8020, + 0x404AFA20, 0x00000004, 0x004AE084, 0x404A8020, 0x404A8020, 0x404AFA20, + 0x00000004, 0x004AE083, 0x404AB020, 0x404A8020, 0x404AFA20, 0x00000004, + 0x004AE084, 0x404AB020, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AE083, + 0x404AC020, 0x404A8020, 0x404AFA20, 0x00000004, 0x004AE084, 0x404AC020, + 0x404A8020, 0x404AFA20, 0x00000002, 0x404AEA20, + // Block 171, offset 0x2ac0 + 0x8281258B, 0x00000002, 0x404AF020, 0x8281258B, 0x00000002, 0x82822599, + 0x838225B3, 0x00000002, 0x8282259B, 0x828225B5, 0x00000002, 0x828225A3, + 0x828225B5, 0x00000002, 0x838225A3, 0x828225B5, 0x00000002, 0x828225A7, + 0x828225B5, 0x00000002, 0x828225AB, 0x828225B5, 0x00000002, 0x402BDE20, + 0xAE604202, 0x00000002, 0x002BDE88, 0xAE604202, 0x00000003, 0x402BDE20, + 0xAE604202, 0xAE603202, 0x00000003, 0x002BDE88, 0xAE604202, 0xAE603202, + 0x00000003, 0x402BDE20, 0xAE604202, 0xAE603502, 0x00000003, 0x002BDE88, + 0xAE604202, 0xAE603502, 0x00000003, 0x402BDE20, 0xAE604202, 0xAE604E02, + 0x00000003, 0x002BDE88, 0xAE604202, 0xAE604E02, 0x00000003, 0x402BDE20, + 0xAE604202, 0xAE606402, 0x00000003, 0x002BDE88, 0xAE604202, 0xAE606402, + 0x00000003, 0x402BDE20, 0xADC07002, 0xAE604202, + // Block 172, offset 0x2b00 + 0x00000003, 0x002BDE88, 0xADC07002, 0xAE604202, 0x00000002, 0x402C3A20, + 0xAE604202, 0x00000002, 0x002C3A88, 0xAE604202, 0x00000002, 0x402C9820, + 0xAE604202, 0x00000002, 0x002C9888, 0xAE604202, 0x00000003, 0x402C9820, + 0xAE604202, 0xAE603202, 0x00000003, 0x002C9888, 0xAE604202, 0xAE603202, + 0x00000003, 0x402C9820, 0xAE604202, 0xAE603502, 0x00000003, 0x002C9888, + 0xAE604202, 0xAE603502, 0x00000003, 0x402C9820, 0xAE604202, 0xAE604E02, + 0x00000003, 0x002C9888, 0xAE604202, 0xAE604E02, 0x00000003, 0x402C9820, + 0xAE604202, 0xAE606402, 0x00000003, 0x002C9888, 0xAE604202, 0xAE606402, + 0x00000003, 0x402C9820, 0xADC07002, 0xAE604202, 0x00000003, 0x002C9888, + 0xADC07002, 0xAE604202, 0x00000002, 0x402D2220, 0xAE604202, 0x00000002, + 0x002D2288, 0xAE604202, 0x00000002, 0x402D6820, + // Block 173, offset 0x2b40 + 0xAE604202, 0x00000002, 0x002D6888, 0xAE604202, 0x00000002, 0x402D9A20, + 0xAE604202, 0x00000002, 0x002D9A88, 0xAE604202, 0x00000002, 0x402DCC20, + 0xAE604202, 0x00000002, 0x002DCC88, 0xAE604202, 0x00000002, 0x402EE220, + 0xAE604202, 0x00000002, 0x002EE288, 0xAE604202, 0x00000003, 0x402EE220, + 0xAE604202, 0xAE603202, 0x00000003, 0x002EE288, 0xAE604202, 0xAE603202, + 0x00000003, 0x402EE220, 0xAE604202, 0xAE603502, 0x00000003, 0x002EE288, + 0xAE604202, 0xAE603502, 0x00000003, 0x402EE220, 0xAE604202, 0xAE604E02, + 0x00000003, 0x002EE288, 0xAE604202, 0xAE604E02, 0x00000003, 0x402EE220, + 0xAE604202, 0xAE606402, 0x00000003, 0x002EE288, 0xAE604202, 0xAE606402, + 0x00000003, 0x402EE220, 0xADC07002, 0xAE604202, 0x00000003, 0x002EE288, + 0xADC07002, 0xAE604202, 0x00000002, 0x402FE620, + // Block 174, offset 0x2b80 + 0xAE604202, 0x00000002, 0x002FE688, 0xAE604202, 0x00000002, 0x40306C20, + 0xAE604202, 0x00000002, 0x00306C88, 0xAE604202, 0x00000002, 0x4030E220, + 0xAE604202, 0x00000002, 0x0030E288, 0xAE604202, 0x00000002, 0x40310020, + 0xAE604202, 0x00000002, 0x00310088, 0xAE604202, 0x00000002, 0x40312A20, + 0xAE604202, 0x00000002, 0x00312A88, 0xAE604202, 0x00000003, 0x00026C84, + 0x00026C84, 0x0009429F, 0x00000002, 0x0002BA84, 0x0002BA9F, 0x00000002, + 0x0002BA84, 0x0002C49F, 0x00000002, 0x0002C484, 0x0002BA9F, 0x00000002, + 0x0002C484, 0x0002C49F, 0x00000002, 0x0002E484, 0x0002E49F, 0x00000002, + 0x0002E496, 0x0002E49F, 0x00000003, 0x0002E484, 0x0002E484, 0x0002E49F, + 0x00000003, 0x0002E496, 0x0002E496, 0x0002E49F, 0x00000003, 0x0003F484, + 0x0029CE84, 0x0003F69F, 0x00000003, 0x0003F484, + // Block 175, offset 0x2bc0 + 0x0029D084, 0x0003F69F, 0x00000003, 0x0003F484, 0x0029D284, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0029D484, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0029D684, 0x0003F69F, 0x00000003, 0x0003F484, 0x0029D884, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0029DA84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0029DC84, 0x0003F69F, 0x00000003, 0x0003F484, 0x0029DE84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x002BDE84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x002BDE8A, 0x0003F69F, 0x00000003, 0x0003F484, 0x002C0A84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x002C0A8A, 0x0003F69F, 0x00000003, 0x0003F484, + 0x002C3A84, 0x0003F69F, 0x00000003, 0x0003F484, 0x002C3A8A, 0x0003F69F, + 0x00000003, 0x0003F484, 0x002C6284, 0x0003F69F, 0x00000003, 0x0003F484, + 0x002C628A, 0x0003F69F, 0x00000003, 0x0003F484, + // Block 176, offset 0x2c00 + 0x002D0884, 0x0003F69F, 0x00000003, 0x0003F484, 0x002D088A, 0x0003F69F, + 0x00000003, 0x0003F484, 0x002D2284, 0x0003F69F, 0x00000003, 0x0003F484, + 0x002D228A, 0x0003F69F, 0x00000003, 0x0003F484, 0x002DCC84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x002DCC8A, 0x0003F69F, 0x00000003, 0x0003F484, + 0x002E2284, 0x0003F69F, 0x00000003, 0x0003F484, 0x002E228A, 0x0003F69F, + 0x00000003, 0x0003F484, 0x002E8284, 0x0003F69F, 0x00000003, 0x0003F484, + 0x002E828A, 0x0003F69F, 0x00000003, 0x0003F484, 0x002E9E84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x002E9E8A, 0x0003F69F, 0x00000003, 0x0003F484, + 0x002F2C84, 0x0003F69F, 0x00000003, 0x0003F484, 0x002F2C8A, 0x0003F69F, + 0x00000003, 0x0003F484, 0x00306C84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x00306C8A, 0x0003F69F, 0x00000003, 0x0003F484, + // Block 177, offset 0x2c40 + 0x0030BE84, 0x0003F69F, 0x00000003, 0x0003F484, 0x0030BE8A, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0030E284, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0030E28A, 0x0003F69F, 0x00000003, 0x0003F484, 0x00310084, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0031008A, 0x0003F69F, 0x00000003, 0x0003F484, + 0x00312A84, 0x0003F69F, 0x00000003, 0x0003F484, 0x00312A8A, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0062AC84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0062B084, 0x0003F69F, 0x00000003, 0x0003F484, 0x0062B284, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0062B684, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0062B884, 0x0003F69F, 0x00000003, 0x0003F484, 0x0062BA84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0062BE84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0062C284, 0x0003F69F, 0x00000003, 0x0003F484, + // Block 178, offset 0x2c80 + 0x0062C484, 0x0003F69F, 0x00000003, 0x0003F484, 0x0062C884, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0062CA84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0062CC84, 0x0003F69F, 0x00000003, 0x0003F484, 0x0062CE84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0062D084, 0x0003F69F, 0x00000003, 0x0003F484, + 0x029C0084, 0x0003F69F, 0x00000003, 0x0003F484, 0x029C0684, 0x0003F69F, + 0x00000003, 0x0003F484, 0x029C1284, 0x0003F69F, 0x00000003, 0x0003F484, + 0x029CBA84, 0x0003F69F, 0x00000003, 0x0003F484, 0x029D1884, 0x0003F69F, + 0x00000003, 0x0003F484, 0x029D2884, 0x0003F69F, 0x00000003, 0x0003F484, + 0x029DC684, 0x0003F69F, 0x00000003, 0x0003F484, 0x029E0284, 0x0003F69F, + 0x00000003, 0x0003F484, 0x029E2284, 0x0003F69F, 0x00000003, 0x0003F484, + 0x02A2D684, 0x0003F69F, 0x00000003, 0x0003F484, + // Block 179, offset 0x2cc0 + 0x02A2DA84, 0x0003F69F, 0x00000003, 0x0003F484, 0x02A56884, 0x0003F69F, + 0x00000003, 0x0003F484, 0x02A68284, 0x0003F69F, 0x00000003, 0x0003F484, + 0x02A6A884, 0x0003F69F, 0x00000003, 0x0003F484, 0x02A81A84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x02A8F884, 0x0003F69F, 0x00000003, 0x0003F484, + 0x02ADB684, 0x0003F69F, 0x00000003, 0x0003F484, 0x02AE3E84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x02B6CC84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x02CBCA84, 0x0003F69F, 0x00000003, 0x0003F484, 0x02CE1084, 0x0003F69F, + 0x00000003, 0x0003F484, 0x02CE1284, 0x0003F69F, 0x00000003, 0x0003F484, + 0x02CE5084, 0x0003F69F, 0x00000003, 0x0003F484, 0x02D05484, 0x0003F69F, + 0x00000003, 0x0003F484, 0x02D86884, 0x0003F69F, 0x00000003, 0x0003F484, + 0x02E0D684, 0x0003F69F, 0x00000003, 0x0003F484, + // Block 180, offset 0x2d00 + 0x02E4F284, 0x0003F69F, 0x00000003, 0x0003F484, 0x02EDC684, 0x0003F69F, + 0x00000003, 0x0003F484, 0x02F27C84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x02F2BA84, 0x0003F69F, 0x00000003, 0x0003F484, 0x02F2DA84, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0303D484, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0303E684, 0x0003F69F, 0x00000003, 0x0003F484, 0x03194284, 0x0003F69F, + 0x00000003, 0x0003F484, 0x03198E84, 0x0003F69F, 0x00000003, 0x0003F484, + 0x0323A284, 0x0003F69F, 0x00000002, 0x00070484, 0x002C3A8A, 0x00000002, + 0x00070484, 0x002D088A, 0x00000002, 0x00094284, 0x0009429F, 0x00000003, + 0x00094284, 0x00094284, 0x0009429F, 0x00000002, 0x0029CC84, 0x0002409F, + 0x00000002, 0x0029CC84, 0x0002E49F, 0x00000002, 0x0029CC84, 0x02E1729F, + 0x00000002, 0x0029CE84, 0x0002409F, 0x00000002, + // Block 181, offset 0x2d40 + 0x0029CE84, 0x0002E49F, 0x00000002, 0x0029CE9E, 0x0009589E, 0x00000002, + 0x0029CE86, 0x0029CC86, 0x00000003, 0x0029CE84, 0x0029CC84, 0x0002E49F, + 0x00000003, 0x0029CE84, 0x0029CC84, 0x02CBCA9F, 0x00000003, 0x0029CE84, + 0x0029CC84, 0x02CE109F, 0x00000003, 0x0029CE84, 0x0029CC84, 0x02E1729F, + 0x00000002, 0x0029CE86, 0x0029CE86, 0x00000003, 0x0029CE84, 0x0029CE84, + 0x0002E49F, 0x00000003, 0x0029CE84, 0x0029CE84, 0x02CBCA9F, 0x00000003, + 0x0029CE84, 0x0029CE84, 0x02CE109F, 0x00000003, 0x0029CE84, 0x0029CE84, + 0x02E1729F, 0x00000002, 0x0029CE86, 0x0029D086, 0x00000003, 0x0029CE84, + 0x0029D084, 0x0002E49F, 0x00000003, 0x0029CE84, 0x0029D084, 0x02CBCA9F, + 0x00000003, 0x0029CE84, 0x0029D084, 0x02CE109F, 0x00000003, 0x0029CE84, + 0x0029D084, 0x02E1729F, 0x00000002, 0x0029CE86, + // Block 182, offset 0x2d80 + 0x0029D286, 0x00000003, 0x0029CE84, 0x0029D284, 0x0002E49F, 0x00000003, + 0x0029CE84, 0x0029D284, 0x02CBCA9F, 0x00000003, 0x0029CE84, 0x0029D284, + 0x02E1729F, 0x00000002, 0x0029CE86, 0x0029D486, 0x00000003, 0x0029CE84, + 0x0029D484, 0x0002E49F, 0x00000003, 0x0029CE84, 0x0029D484, 0x02CBCA9F, + 0x00000003, 0x0029CE84, 0x0029D484, 0x02E1729F, 0x00000002, 0x0029CE86, + 0x0029D686, 0x00000003, 0x0029CE84, 0x0029D684, 0x0002E49F, 0x00000003, + 0x0029CE84, 0x0029D684, 0x02CBCA9F, 0x00000003, 0x0029CE84, 0x0029D684, + 0x02E1729F, 0x00000002, 0x0029CE86, 0x0029D886, 0x00000003, 0x0029CE84, + 0x0029D884, 0x0002E49F, 0x00000003, 0x0029CE84, 0x0029D884, 0x02CBCA9F, + 0x00000003, 0x0029CE84, 0x0029D884, 0x02E1729F, 0x00000002, 0x0029CE86, + 0x0029DA86, 0x00000003, 0x0029CE84, 0x0029DA84, + // Block 183, offset 0x2dc0 + 0x0002E49F, 0x00000003, 0x0029CE84, 0x0029DA84, 0x02CBCA9F, 0x00000003, + 0x0029CE84, 0x0029DA84, 0x02E1729F, 0x00000002, 0x0029CE86, 0x0029DC86, + 0x00000003, 0x0029CE84, 0x0029DC84, 0x0002E49F, 0x00000003, 0x0029CE84, + 0x0029DC84, 0x02CBCA9F, 0x00000003, 0x0029CE84, 0x0029DC84, 0x02E1729F, + 0x00000002, 0x0029CE86, 0x0029DE86, 0x00000003, 0x0029CE84, 0x0029DE84, + 0x0002E49F, 0x00000003, 0x0029CE84, 0x0029DE84, 0x02CBCA9F, 0x00000003, + 0x0029CE84, 0x0029DE84, 0x02E1729F, 0x00000002, 0x0029CE84, 0x02CBCA9F, + 0x00000002, 0x0029CE84, 0x02CE109F, 0x00000002, 0x0029CE84, 0x02E1729F, + 0x00000002, 0x0029D084, 0x0002409F, 0x00000002, 0x0029D084, 0x0002E49F, + 0x00000002, 0x0029D086, 0x0029CC86, 0x00000003, 0x0029D084, 0x0029CC84, + 0x0002E49F, 0x00000003, 0x0029D084, 0x0029CC84, + // Block 184, offset 0x2e00 + 0x02CBCA9F, 0x00000003, 0x0029D084, 0x0029CC84, 0x02E1729F, 0x00000002, + 0x0029D086, 0x0029CE86, 0x00000003, 0x0029D084, 0x0029CE84, 0x02CBCA9F, + 0x00000003, 0x0029D084, 0x0029CE84, 0x02E1729F, 0x00000002, 0x0029D086, + 0x0029D086, 0x00000003, 0x0029D084, 0x0029D084, 0x02CBCA9F, 0x00000003, + 0x0029D084, 0x0029D084, 0x02E1729F, 0x00000002, 0x0029D086, 0x0029D286, + 0x00000003, 0x0029D084, 0x0029D284, 0x02CBCA9F, 0x00000003, 0x0029D084, + 0x0029D284, 0x02E1729F, 0x00000002, 0x0029D086, 0x0029D486, 0x00000003, + 0x0029D084, 0x0029D484, 0x02CBCA9F, 0x00000003, 0x0029D084, 0x0029D484, + 0x02E1729F, 0x00000002, 0x0029D086, 0x0029D686, 0x00000003, 0x0029D084, + 0x0029D684, 0x02CBCA9F, 0x00000002, 0x0029D086, 0x0029D886, 0x00000003, + 0x0029D084, 0x0029D884, 0x02CBCA9F, 0x00000002, + // Block 185, offset 0x2e40 + 0x0029D086, 0x0029DA86, 0x00000003, 0x0029D084, 0x0029DA84, 0x02CBCA9F, + 0x00000002, 0x0029D086, 0x0029DC86, 0x00000003, 0x0029D084, 0x0029DC84, + 0x02CBCA9F, 0x00000002, 0x0029D086, 0x0029DE86, 0x00000003, 0x0029D084, + 0x0029DE84, 0x02CBCA9F, 0x00000002, 0x0029D084, 0x02CBCA9F, 0x00000002, + 0x0029D084, 0x02CE109F, 0x00000002, 0x0029D084, 0x02E1729F, 0x00000002, + 0x0029D284, 0x0002409F, 0x00000002, 0x0029D284, 0x0002E49F, 0x00000002, + 0x0029D286, 0x0029CC86, 0x00000003, 0x0029D284, 0x0029CC84, 0x02CBCA9F, + 0x00000002, 0x0029D286, 0x0029CE86, 0x00000003, 0x0029D284, 0x0029CE84, + 0x02CBCA9F, 0x00000002, 0x0029D286, 0x0029D086, 0x00000002, 0x0029D286, + 0x0029D286, 0x00000002, 0x0029D286, 0x0029D486, 0x00000002, 0x0029D286, + 0x0029D686, 0x00000002, 0x0029D286, 0x0029D886, + // Block 186, offset 0x2e80 + 0x00000002, 0x0029D286, 0x0029DA86, 0x00000002, 0x0029D286, 0x0029DC86, + 0x00000002, 0x0029D286, 0x0029DE86, 0x00000002, 0x0029D284, 0x02CBCA9F, + 0x00000002, 0x0029D284, 0x02CE109F, 0x00000002, 0x0029D284, 0x02E1729F, + 0x00000002, 0x0029D484, 0x0002409F, 0x00000002, 0x0029D484, 0x0002E49F, + 0x00000002, 0x0029D486, 0x0029CC86, 0x00000002, 0x0029D486, 0x0029CE86, + 0x00000002, 0x0029D486, 0x0029D086, 0x00000002, 0x0029D486, 0x0029D286, + 0x00000002, 0x0029D486, 0x0029D486, 0x00000002, 0x0029D486, 0x0029D686, + 0x00000002, 0x0029D486, 0x0029D886, 0x00000002, 0x0029D486, 0x0029DA86, + 0x00000002, 0x0029D486, 0x0029DC86, 0x00000002, 0x0029D486, 0x0029DE86, + 0x00000002, 0x0029D484, 0x02CBCA9F, 0x00000002, 0x0029D484, 0x02CE109F, + 0x00000002, 0x0029D484, 0x02E1729F, 0x00000002, + // Block 187, offset 0x2ec0 + 0x0029D684, 0x0002409F, 0x00000002, 0x0029D684, 0x0002E49F, 0x00000002, + 0x0029D686, 0x0029CC86, 0x00000002, 0x0029D684, 0x02CBCA9F, 0x00000002, + 0x0029D684, 0x02CE109F, 0x00000002, 0x0029D684, 0x02E1729F, 0x00000002, + 0x0029D884, 0x0002409F, 0x00000002, 0x0029D884, 0x0002E49F, 0x00000002, + 0x0029D884, 0x02CBCA9F, 0x00000002, 0x0029D884, 0x02CE109F, 0x00000002, + 0x0029D884, 0x02E1729F, 0x00000002, 0x0029DA84, 0x0002409F, 0x00000002, + 0x0029DA84, 0x0002E49F, 0x00000002, 0x0029DA84, 0x02CBCA9F, 0x00000002, + 0x0029DA84, 0x02CE109F, 0x00000002, 0x0029DA84, 0x02E1729F, 0x00000002, + 0x0029DC84, 0x0002409F, 0x00000002, 0x0029DC84, 0x0002E49F, 0x00000002, + 0x0029DC84, 0x02CBCA9F, 0x00000002, 0x0029DC84, 0x02CE109F, 0x00000002, + 0x0029DC84, 0x02E1729F, 0x00000002, 0x0029DE84, + // Block 188, offset 0x2f00 + 0x0002409F, 0x00000002, 0x0029DE84, 0x0002E49F, 0x00000002, 0x0029DE84, + 0x02CBCA9F, 0x00000002, 0x0029DE84, 0x02CE109F, 0x00000002, 0x0029DE84, + 0x02E1729F, 0x00000002, 0x002BDE9D, 0x00306C9D, 0x00000002, 0x002BDE84, + 0x0031E284, 0x00000002, 0x402C1820, 0xA0105402, 0x00000002, 0x402C1A20, + 0xA0105402, 0x00000002, 0x402C1C20, 0xA0105402, 0x00000002, 0x402C2220, + 0xAE603202, 0x00000002, 0x402C2220, 0xAE603502, 0x00000002, 0x402C2220, + 0xAE603702, 0x00000003, 0x402C2220, 0xAE603702, 0xAE603202, 0x00000003, + 0x402C2220, 0xAE603702, 0xAE603502, 0x00000003, 0x402C2220, 0xAE603702, + 0xAE604E02, 0x00000003, 0x402C2220, 0xAE603702, 0xAE606402, 0x00000002, + 0x402C2220, 0xAE603C02, 0x00000003, 0x402C2220, 0xAE603C02, 0xAE603202, + 0x00000003, 0x402C2220, 0xAE603C02, 0xAE603502, + // Block 189, offset 0x2f40 + 0x00000003, 0x402C2220, 0xAE603C02, 0xAE604E02, 0x00000003, 0x402C2220, + 0xAE603C02, 0xAE606402, 0x00000002, 0x402C2220, 0xAE604102, 0x00000002, + 0x402C2220, 0xAE604302, 0x00000003, 0x402C2220, 0xAE604302, 0xAE603202, + 0x00000002, 0x402C2220, 0xAE604702, 0x00000003, 0x402C2220, 0xAE604702, + 0xAE605B02, 0x00000002, 0x402C2220, 0xAE604E02, 0x00000002, 0x402C2220, + 0xAE605202, 0x00000003, 0x402C2220, 0xAE605202, 0xAE605B02, 0x00000002, + 0x402C2220, 0xACA05902, 0x00000002, 0x402C2220, 0xAE605B02, 0x00000002, + 0x402C2220, 0xAE606402, 0x00000002, 0x402C2220, 0xAE606502, 0x00000002, + 0x402C2220, 0xAE606702, 0x00000002, 0x402C2220, 0xADC07002, 0x00000003, + 0x402C2220, 0xADC07002, 0xAE603702, 0x00000003, 0x402C2220, 0xADC07002, + 0xAE603C02, 0x00000002, 0x402C2220, 0xADC07602, + // Block 190, offset 0x2f80 + 0x00000002, 0x402C2420, 0xAE605202, 0x00000002, 0x402C2420, 0xADC07002, + 0x00000002, 0x402C2420, 0xADC07B02, 0x00000002, 0x402C2620, 0xAE603202, + 0x00000002, 0x402C2620, 0xAE603C02, 0x00000002, 0x402C2620, 0xAE604102, + 0x00000002, 0x402C2620, 0xAE605202, 0x00000002, 0x402C2620, 0xACA05602, + 0x00000003, 0x402C2620, 0xACA05602, 0xAE603202, 0x00000002, 0x402C2820, + 0xAE604102, 0x00000002, 0x402C2820, 0xAE605202, 0x00000002, 0x402C2820, + 0xACA05602, 0x00000002, 0x402C2820, 0xADC07002, 0x00000002, 0x402C2820, + 0xADC07802, 0x00000002, 0x402C2820, 0xADC07B02, 0x00000002, 0x402C2A20, + 0xAE603202, 0x00000002, 0x402C2A20, 0xAE603502, 0x00000002, 0x402C2A20, + 0xAE603702, 0x00000002, 0x402C2A20, 0xAE603C02, 0x00000003, 0x402C2A20, + 0xAE603C02, 0xAE603202, 0x00000003, 0x402C2A20, + // Block 191, offset 0x2fc0 + 0xAE603C02, 0xAE603502, 0x00000003, 0x402C2A20, 0xAE603C02, 0xAE604E02, + 0x00000003, 0x402C2A20, 0xAE603C02, 0xAE606402, 0x00000002, 0x402C2A20, + 0xAE604102, 0x00000002, 0x402C2A20, 0xAE604702, 0x00000002, 0x402C2A20, + 0xAE604E02, 0x00000002, 0x402C2A20, 0xAE605202, 0x00000002, 0x402C2A20, + 0xACA05602, 0x00000003, 0x402C2A20, 0xACA05602, 0xAE603702, 0x00000002, + 0x402C2A20, 0xACA05902, 0x00000002, 0x402C2A20, 0xAE605B02, 0x00000003, + 0x402C2A20, 0xAE605B02, 0xAE603202, 0x00000003, 0x402C2A20, 0xAE605B02, + 0xAE603502, 0x00000002, 0x402C2A20, 0xAE606402, 0x00000002, 0x402C2A20, + 0xAE606502, 0x00000002, 0x402C2A20, 0xAE606702, 0x00000002, 0x402C2A20, + 0xADC07002, 0x00000003, 0x402C2A20, 0xADC07002, 0xAE603C02, 0x00000002, + 0x402C2A20, 0xADC07802, 0x00000002, 0x402C2A20, + // Block 192, offset 0x3000 + 0xADC07A02, 0x00000002, 0x402C2C20, 0xAE605202, 0x00000002, 0x402C2E20, + 0xAE603202, 0x00000002, 0x402C2E20, 0xAE603702, 0x00000002, 0x402C2E20, + 0xAE603C02, 0x00000002, 0x402C2E20, 0xAE604102, 0x00000002, 0x402C2E20, + 0xAE605202, 0x00000002, 0x402C2E20, 0xACA05602, 0x00000002, 0x402C2E20, + 0xAE605B02, 0x00000002, 0x402C3020, 0xAE603C02, 0x00000002, 0x402C3020, + 0xAE604102, 0x00000002, 0x402C3020, 0xAE604702, 0x00000002, 0x402C3020, + 0xAE605202, 0x00000002, 0x402C3020, 0xACA05602, 0x00000002, 0x402C3020, + 0xADC07002, 0x00000002, 0x402C3020, 0xADC07902, 0x00000002, 0x402C3220, + 0xAE603202, 0x00000002, 0x402C3220, 0xAE603502, 0x00000002, 0x402C3220, + 0xAE603702, 0x00000002, 0x402C3220, 0xAE603C02, 0x00000002, 0x402C3220, + 0xAE604102, 0x00000002, 0x402C3220, 0xAE604702, + // Block 193, offset 0x3040 + 0x00000003, 0x402C3220, 0xAE604702, 0xAE603202, 0x00000002, 0x402C3220, + 0xAE604E02, 0x00000002, 0x402C3220, 0xAE605202, 0x00000002, 0x402C3220, + 0xACA05902, 0x00000002, 0x402C3220, 0xAE605B02, 0x00000002, 0x402C3220, + 0xAE606402, 0x00000002, 0x402C3220, 0xAE606502, 0x00000002, 0x402C3220, + 0xAE606702, 0x00000002, 0x402C3220, 0xADC07002, 0x00000002, 0x402C3220, + 0xADC07A02, 0x00000002, 0x402C3420, 0xAE603C02, 0x00000002, 0x402C3620, + 0xAE603202, 0x00000002, 0x402C3620, 0xAE604102, 0x00000002, 0x402C3620, + 0xACA05602, 0x00000002, 0x402C3620, 0xADC07002, 0x00000002, 0x402C3620, + 0xADC07B02, 0x00000002, 0x402C3820, 0xAE603202, 0x00000002, 0x402C3820, + 0xAE604102, 0x00000002, 0x402C3820, 0xACA05602, 0x00000002, 0x402C3820, + 0xADC07002, 0x00000003, 0x402C3820, 0xADC07002, + // Block 194, offset 0x3080 + 0xAE605B02, 0x00000002, 0x402C3820, 0xADC07802, 0x00000002, 0x402C3820, + 0xADC07B02, 0x00000002, 0x402C3A20, 0xAE603202, 0x00000002, 0x402C3A20, + 0xAE605202, 0x00000002, 0x402C3A20, 0xADC07002, 0x00000002, 0x002C3A9C, + 0x002C3A9C, 0x00000002, 0x002C3A8C, 0x002C628C, 0x00000002, 0x002C3A9C, + 0x002C629C, 0x00000002, 0x002C3A9C, 0x002E829C, 0x00000002, 0x402C3C20, + 0xAE603202, 0x00000002, 0x402C3C20, 0xAE603502, 0x00000002, 0x402C3C20, + 0xAE604102, 0x00000002, 0x402C3C20, 0xAE604E02, 0x00000002, 0x402C3C20, + 0xAE605202, 0x00000002, 0x402C3C20, 0xACA05602, 0x00000002, 0x402C3C20, + 0xADC07002, 0x00000002, 0x402C3C20, 0xADC07802, 0x00000002, 0x402C3C20, + 0xADC07B02, 0x00000002, 0x402C3E20, 0xAE603202, 0x00000002, 0x402C3E20, + 0xAE603502, 0x00000002, 0x402C3E20, 0xAE603702, + // Block 195, offset 0x30c0 + 0x00000002, 0x402C3E20, 0xAE603C02, 0x00000003, 0x402C3E20, 0xAE603C02, + 0xAE603202, 0x00000003, 0x402C3E20, 0xAE603C02, 0xAE603502, 0x00000003, + 0x402C3E20, 0xAE603C02, 0xAE604E02, 0x00000003, 0x402C3E20, 0xAE603C02, + 0xAE606402, 0x00000002, 0x402C3E20, 0xAE604102, 0x00000002, 0x402C3E20, + 0xAE604702, 0x00000003, 0x402C3E20, 0xAE604702, 0xAE605B02, 0x00000002, + 0x402C3E20, 0xAE604D02, 0x00000002, 0x402C3E20, 0xAE604E02, 0x00000003, + 0x402C3E20, 0xAE604E02, 0xAE603202, 0x00000003, 0x402C3E20, 0xAE604E02, + 0xAE604702, 0x00000003, 0x402C3E20, 0xAE604E02, 0xAE605B02, 0x00000002, + 0x402C3E20, 0xAE605202, 0x00000003, 0x402C3E20, 0xAE605202, 0xAE605B02, + 0x00000002, 0x402C3E20, 0xACA05902, 0x00000003, 0x402C3E20, 0xACA05902, + 0xAE605B02, 0x00000002, 0x402C3E20, 0xAE605B02, + // Block 196, offset 0x3100 + 0x00000003, 0x402C3E20, 0xAE605B02, 0xAE603202, 0x00000003, 0x402C3E20, + 0xAE605B02, 0xAE603502, 0x00000002, 0x402C3E20, 0xAE606402, 0x00000002, + 0x402C3E20, 0xAE606502, 0x00000002, 0x402C3E20, 0xAE606702, 0x00000002, + 0x402C3E20, 0xAD806802, 0x00000003, 0x402C3E20, 0xAD806802, 0xAE603202, + 0x00000003, 0x402C3E20, 0xAD806802, 0xAE603502, 0x00000003, 0x402C3E20, + 0xAD806802, 0xAE604E02, 0x00000003, 0x402C3E20, 0xAD806802, 0xAE606402, + 0x00000003, 0x402C3E20, 0xAD806802, 0xADC07002, 0x00000002, 0x402C3E20, + 0xADC07002, 0x00000003, 0x402C3E20, 0xADC07002, 0xAE603C02, 0x00000002, + 0x402C4020, 0xAE603202, 0x00000002, 0x402C4020, 0xAE605202, 0x00000002, + 0x402C4420, 0xAE603202, 0x00000002, 0x402C4420, 0xAE604102, 0x00000002, + 0x402C4420, 0xAE605202, 0x00000002, 0x402C4420, + // Block 197, offset 0x3140 + 0xACA05602, 0x00000002, 0x402C4420, 0xAE606502, 0x00000002, 0x402C4420, + 0xAE606702, 0x00000002, 0x402C4420, 0xADC07002, 0x00000003, 0x402C4420, + 0xADC07002, 0xAE605B02, 0x00000002, 0x402C4420, 0xADC07B02, 0x00000002, + 0x402C4620, 0xAE603202, 0x00000003, 0x402C4620, 0xAE603202, 0xAE605202, + 0x00000002, 0x402C4620, 0xAE603C02, 0x00000002, 0x402C4620, 0xAE604102, + 0x00000003, 0x402C4620, 0xAE604102, 0xAE605202, 0x00000002, 0x402C4620, + 0xAE605202, 0x00000002, 0x402C4620, 0xACA05602, 0x00000002, 0x402C4620, + 0xADC07002, 0x00000003, 0x402C4620, 0xADC07002, 0xAE605202, 0x00000002, + 0x402C4620, 0xADC07702, 0x00000002, 0x402C4820, 0xAE604102, 0x00000002, + 0x402C4820, 0xAE605202, 0x00000002, 0x402C4820, 0xACA05602, 0x00000002, + 0x402C4820, 0xADC07002, 0x00000002, 0x402C4820, + // Block 198, offset 0x3180 + 0xADC07702, 0x00000002, 0x402C4820, 0xADC07802, 0x00000002, 0x402C4820, + 0xADC07B02, 0x00000002, 0x402C4A20, 0xAE603202, 0x00000002, 0x402C4A20, + 0xAE603502, 0x00000002, 0x402C4A20, 0xAE603702, 0x00000002, 0x402C4A20, + 0xAE603C02, 0x00000002, 0x402C4A20, 0xAE604102, 0x00000002, 0x402C4A20, + 0xAE604302, 0x00000002, 0x402C4A20, 0xAE604702, 0x00000003, 0x402C4A20, + 0xAE604702, 0xAE603202, 0x00000003, 0x402C4A20, 0xAE604702, 0xAE603502, + 0x00000003, 0x402C4A20, 0xAE604702, 0xAE604102, 0x00000003, 0x402C4A20, + 0xAE604702, 0xAE605B02, 0x00000002, 0x402C4A20, 0xAE604D02, 0x00000002, + 0x402C4A20, 0xAE604E02, 0x00000003, 0x402C4A20, 0xAE604E02, 0xAE603202, + 0x00000002, 0x402C4A20, 0xACA05902, 0x00000002, 0x402C4A20, 0xAE605B02, + 0x00000003, 0x402C4A20, 0xAE605B02, 0xAE604702, + // Block 199, offset 0x31c0 + 0x00000002, 0x402C4A20, 0xAE606402, 0x00000002, 0x402C4A20, 0xAE606502, + 0x00000002, 0x402C4A20, 0xAE606702, 0x00000002, 0x402C4A20, 0xAD806802, + 0x00000003, 0x402C4A20, 0xAD806802, 0xAE603202, 0x00000003, 0x402C4A20, + 0xAD806802, 0xAE603502, 0x00000003, 0x402C4A20, 0xAD806802, 0xAE604E02, + 0x00000003, 0x402C4A20, 0xAD806802, 0xAE606402, 0x00000003, 0x402C4A20, + 0xAD806802, 0xADC07002, 0x00000002, 0x402C4A20, 0xADC07002, 0x00000002, + 0x402C4A20, 0xADC07502, 0x00000002, 0x402C4A20, 0xADC07802, 0x00000002, + 0x402C4A20, 0xADC07A02, 0x00000002, 0x402C4C20, 0xAE604E02, 0x00000002, + 0x402C4C20, 0xADC07002, 0x00000002, 0x402C4E20, 0xAE603202, 0x00000002, + 0x402C4E20, 0xAE603502, 0x00000002, 0x402C4E20, 0xAE603C02, 0x00000002, + 0x402C4E20, 0xAE604702, 0x00000002, 0x402C4E20, + // Block 200, offset 0x3200 + 0xAE605202, 0x00000002, 0x402C4E20, 0xADC07002, 0x00000002, 0x402C5020, + 0xAE604702, 0x00000002, 0x402C5020, 0xAE605202, 0x00000002, 0x402C5220, + 0xAE603202, 0x00000002, 0x402C5220, 0xAE603502, 0x00000002, 0x402C5220, + 0xAE603C02, 0x00000002, 0x402C5220, 0xAE604702, 0x00000002, 0x402C5220, + 0xAE604E02, 0x00000002, 0x402C5220, 0xAE605202, 0x00000002, 0x402C5220, + 0xAE605B02, 0x00000002, 0x402C5220, 0xAE606402, 0x00000002, 0x402C5220, + 0xADC07002, 0x00000002, 0x402C5420, 0xAE603202, 0x00000002, 0x402C5420, + 0xAE603C02, 0x00000002, 0x402C5420, 0xAE604102, 0x00000002, 0x402C5420, + 0xAE605202, 0x00000002, 0x402C5420, 0xADC07002, 0x00000002, 0x402C5420, + 0xADC07B02, 0x00000002, 0x402C6220, 0xAE603202, 0x00000002, 0x402C6220, + 0xAE603502, 0x00000002, 0x402C6220, 0xAE603702, + // Block 201, offset 0x3240 + 0x00000003, 0x402C6220, 0xAE603702, 0xAE603202, 0x00000003, 0x402C6220, + 0xAE603702, 0xAE603502, 0x00000003, 0x402C6220, 0xAE603702, 0xAE604E02, + 0x00000003, 0x402C6220, 0xAE603702, 0xAE606402, 0x00000002, 0x402C6220, + 0xAE603C02, 0x00000003, 0x402C6220, 0xAE603C02, 0xAE603202, 0x00000003, + 0x402C6220, 0xAE603C02, 0xAE603502, 0x00000003, 0x402C6220, 0xAE603C02, + 0xAE604E02, 0x00000003, 0x402C6220, 0xAE603C02, 0xAE606402, 0x00000002, + 0x402C6220, 0xAE604102, 0x00000002, 0x402C6220, 0xAE604302, 0x00000003, + 0x402C6220, 0xAE604302, 0xAE603202, 0x00000002, 0x402C6220, 0xAE604702, + 0x00000003, 0x402C6220, 0xAE604702, 0xAE605B02, 0x00000002, 0x402C6220, + 0xAE604E02, 0x00000002, 0x402C6220, 0xAE605202, 0x00000003, 0x402C6220, + 0xAE605202, 0xAE605B02, 0x00000002, 0x402C6220, + // Block 202, offset 0x3280 + 0xACA05902, 0x00000002, 0x402C6220, 0xAE605B02, 0x00000002, 0x402C6220, + 0xAE606402, 0x00000002, 0x402C6220, 0xAE606502, 0x00000002, 0x402C6220, + 0xAE606702, 0x00000002, 0x402C6220, 0xADC07002, 0x00000003, 0x402C6220, + 0xADC07002, 0xAE603702, 0x00000003, 0x402C6220, 0xADC07002, 0xAE603C02, + 0x00000002, 0x402C6220, 0xADC07602, 0x00000002, 0x002C629C, 0x002BDE9C, + 0x00000002, 0x002C629C, 0x002C0A9D, 0x00000002, 0x002C629D, 0x002DCC9D, + 0x00000002, 0x002C629C, 0x002E229C, 0x00000002, 0x002C629C, 0x002E829C, + 0x00000002, 0x002C6284, 0x00312A84, 0x00000002, 0x002C628A, 0x00312A84, + 0x00000002, 0x002C628A, 0x00312A8A, 0x00000002, 0x402C6420, 0xAE605202, + 0x00000002, 0x402C6420, 0xADC07002, 0x00000002, 0x402C6420, 0xADC07B02, + 0x00000002, 0x402C6620, 0xAE603202, 0x00000002, + // Block 203, offset 0x32c0 + 0x402C6620, 0xAE603C02, 0x00000002, 0x402C6620, 0xAE604102, 0x00000002, + 0x402C6620, 0xAE605202, 0x00000002, 0x402C6620, 0xACA05602, 0x00000003, + 0x402C6620, 0xACA05602, 0xAE603202, 0x00000002, 0x402C6820, 0xAE604102, + 0x00000002, 0x402C6820, 0xAE605202, 0x00000002, 0x402C6820, 0xACA05602, + 0x00000002, 0x402C6820, 0xADC07002, 0x00000002, 0x402C6820, 0xADC07802, + 0x00000002, 0x402C6820, 0xADC07B02, 0x00000002, 0x402C6A20, 0xAE603202, + 0x00000002, 0x402C6A20, 0xAE603502, 0x00000002, 0x402C6A20, 0xAE603702, + 0x00000002, 0x402C6A20, 0xAE603C02, 0x00000003, 0x402C6A20, 0xAE603C02, + 0xAE603202, 0x00000003, 0x402C6A20, 0xAE603C02, 0xAE603502, 0x00000003, + 0x402C6A20, 0xAE603C02, 0xAE604E02, 0x00000003, 0x402C6A20, 0xAE603C02, + 0xAE606402, 0x00000002, 0x402C6A20, 0xAE604102, + // Block 204, offset 0x3300 + 0x00000002, 0x402C6A20, 0xAE604702, 0x00000002, 0x402C6A20, 0xAE604E02, + 0x00000002, 0x402C6A20, 0xAE605202, 0x00000002, 0x402C6A20, 0xACA05602, + 0x00000003, 0x402C6A20, 0xACA05602, 0xAE603702, 0x00000002, 0x402C6A20, + 0xACA05902, 0x00000002, 0x402C6A20, 0xAE605B02, 0x00000003, 0x402C6A20, + 0xAE605B02, 0xAE603202, 0x00000003, 0x402C6A20, 0xAE605B02, 0xAE603502, + 0x00000002, 0x402C6A20, 0xAE606402, 0x00000002, 0x402C6A20, 0xAE606502, + 0x00000002, 0x402C6A20, 0xAE606702, 0x00000002, 0x402C6A20, 0xADC07002, + 0x00000003, 0x402C6A20, 0xADC07002, 0xAE603C02, 0x00000002, 0x402C6A20, + 0xADC07802, 0x00000002, 0x402C6A20, 0xADC07A02, 0x00000002, 0x402C6C20, + 0xAE605202, 0x00000002, 0x402C6E20, 0xAE603202, 0x00000002, 0x402C6E20, + 0xAE603702, 0x00000002, 0x402C6E20, 0xAE603C02, + // Block 205, offset 0x3340 + 0x00000002, 0x402C6E20, 0xAE604102, 0x00000002, 0x402C6E20, 0xAE605202, + 0x00000002, 0x402C6E20, 0xACA05602, 0x00000002, 0x402C6E20, 0xAE605B02, + 0x00000002, 0x402C7020, 0xAE603C02, 0x00000002, 0x402C7020, 0xAE604102, + 0x00000002, 0x402C7020, 0xAE604702, 0x00000002, 0x402C7020, 0xAE605202, + 0x00000002, 0x402C7020, 0xACA05602, 0x00000002, 0x402C7020, 0xADC07002, + 0x00000002, 0x402C7020, 0xADC07902, 0x00000002, 0x402C7020, 0xADC07B02, + 0x00000002, 0x402C7220, 0xAE603202, 0x00000002, 0x402C7220, 0xAE603502, + 0x00000002, 0x402C7220, 0xAE603702, 0x00000002, 0x402C7220, 0xAE603C02, + 0x00000002, 0x402C7220, 0xAE604102, 0x00000002, 0x402C7220, 0xAE604702, + 0x00000003, 0x402C7220, 0xAE604702, 0xAE603202, 0x00000002, 0x402C7220, + 0xAE604E02, 0x00000002, 0x402C7220, 0xACA05902, + // Block 206, offset 0x3380 + 0x00000002, 0x402C7220, 0xAE605B02, 0x00000002, 0x402C7220, 0xAE606402, + 0x00000002, 0x402C7220, 0xAE606502, 0x00000002, 0x402C7220, 0xAE606702, + 0x00000002, 0x402C7220, 0xADC07002, 0x00000002, 0x402C7220, 0xADC07A02, + 0x00000002, 0x402C7420, 0xAE603C02, 0x00000002, 0x402C7420, 0xAE604102, + 0x00000002, 0x402C7620, 0xAE603202, 0x00000002, 0x402C7620, 0xAE604102, + 0x00000002, 0x402C7620, 0xACA05602, 0x00000002, 0x402C7620, 0xADC07002, + 0x00000002, 0x402C7620, 0xADC07B02, 0x00000002, 0x402C7820, 0xAE603202, + 0x00000002, 0x402C7820, 0xAE604102, 0x00000002, 0x402C7820, 0xACA05602, + 0x00000002, 0x402C7820, 0xADC07002, 0x00000003, 0x402C7820, 0xADC07002, + 0xAE605B02, 0x00000002, 0x402C7820, 0xADC07802, 0x00000002, 0x402C7820, + 0xADC07B02, 0x00000002, 0x402C7A20, 0xAE603202, + // Block 207, offset 0x33c0 + 0x00000002, 0x402C7A20, 0xAE605202, 0x00000002, 0x402C7A20, 0xADC07002, + 0x00000002, 0x402C7C20, 0xAE603202, 0x00000002, 0x402C7C20, 0xAE603502, + 0x00000002, 0x402C7C20, 0xAE604102, 0x00000002, 0x402C7C20, 0xAE604E02, + 0x00000002, 0x402C7C20, 0xAE605202, 0x00000002, 0x402C7C20, 0xACA05602, + 0x00000002, 0x402C7C20, 0xADC07002, 0x00000002, 0x402C7C20, 0xADC07802, + 0x00000002, 0x402C7C20, 0xADC07B02, 0x00000002, 0x402C7E20, 0xAE603202, + 0x00000002, 0x402C7E20, 0xAE603502, 0x00000002, 0x402C7E20, 0xAE603702, + 0x00000002, 0x402C7E20, 0xAE603C02, 0x00000003, 0x402C7E20, 0xAE603C02, + 0xAE603202, 0x00000003, 0x402C7E20, 0xAE603C02, 0xAE603502, 0x00000003, + 0x402C7E20, 0xAE603C02, 0xAE604E02, 0x00000003, 0x402C7E20, 0xAE603C02, + 0xAE606402, 0x00000002, 0x402C7E20, 0xAE604102, + // Block 208, offset 0x3400 + 0x00000002, 0x402C7E20, 0xAE604702, 0x00000003, 0x402C7E20, 0xAE604702, + 0xAE605B02, 0x00000002, 0x402C7E20, 0xAE604D02, 0x00000002, 0x402C7E20, + 0xAE604E02, 0x00000003, 0x402C7E20, 0xAE604E02, 0xAE603202, 0x00000003, + 0x402C7E20, 0xAE604E02, 0xAE604702, 0x00000003, 0x402C7E20, 0xAE604E02, + 0xAE605B02, 0x00000002, 0x402C7E20, 0xAE605202, 0x00000003, 0x402C7E20, + 0xAE605202, 0xAE605B02, 0x00000002, 0x402C7E20, 0xACA05902, 0x00000003, + 0x402C7E20, 0xACA05902, 0xAE605B02, 0x00000002, 0x402C7E20, 0xAE605B02, + 0x00000003, 0x402C7E20, 0xAE605B02, 0xAE603202, 0x00000003, 0x402C7E20, + 0xAE605B02, 0xAE603502, 0x00000002, 0x402C7E20, 0xAE606402, 0x00000002, + 0x402C7E20, 0xAE606502, 0x00000002, 0x402C7E20, 0xAE606702, 0x00000002, + 0x402C7E20, 0xAD806802, 0x00000003, 0x402C7E20, + // Block 209, offset 0x3440 + 0xAD806802, 0xAE603202, 0x00000003, 0x402C7E20, 0xAD806802, 0xAE603502, + 0x00000003, 0x402C7E20, 0xAD806802, 0xAE604E02, 0x00000003, 0x402C7E20, + 0xAD806802, 0xAE606402, 0x00000003, 0x402C7E20, 0xAD806802, 0xADC07002, + 0x00000002, 0x402C7E20, 0xADC07002, 0x00000003, 0x402C7E20, 0xADC07002, + 0xAE603C02, 0x00000002, 0x402C8020, 0xAE603202, 0x00000002, 0x402C8020, + 0xAE605202, 0x00000002, 0x402C8420, 0xAE603202, 0x00000002, 0x402C8420, + 0xAE604102, 0x00000002, 0x402C8420, 0xAE605202, 0x00000002, 0x402C8420, + 0xACA05602, 0x00000002, 0x402C8420, 0xAE606502, 0x00000002, 0x402C8420, + 0xAE606702, 0x00000002, 0x402C8420, 0xADC07002, 0x00000003, 0x402C8420, + 0xADC07002, 0xAE605B02, 0x00000002, 0x402C8420, 0xADC07B02, 0x00000002, + 0x402C8620, 0xAE603202, 0x00000003, 0x402C8620, + // Block 210, offset 0x3480 + 0xAE603202, 0xAE605202, 0x00000002, 0x402C8620, 0xAE603C02, 0x00000002, + 0x402C8620, 0xAE604102, 0x00000003, 0x402C8620, 0xAE604102, 0xAE605202, + 0x00000002, 0x402C8620, 0xAE605202, 0x00000002, 0x402C8620, 0xACA05602, + 0x00000002, 0x402C8620, 0xADC07002, 0x00000003, 0x402C8620, 0xADC07002, + 0xAE605202, 0x00000002, 0x402C8620, 0xADC07702, 0x00000002, 0x402C8820, + 0xAE604102, 0x00000002, 0x402C8820, 0xAE604702, 0x00000002, 0x402C8820, + 0xAE605202, 0x00000002, 0x402C8820, 0xACA05602, 0x00000002, 0x402C8820, + 0xADC07002, 0x00000002, 0x402C8820, 0xADC07702, 0x00000002, 0x402C8820, + 0xADC07802, 0x00000002, 0x402C8820, 0xADC07B02, 0x00000002, 0x402C8A20, + 0xAE603202, 0x00000002, 0x402C8A20, 0xAE603502, 0x00000002, 0x402C8A20, + 0xAE603702, 0x00000002, 0x402C8A20, 0xAE603C02, + // Block 211, offset 0x34c0 + 0x00000002, 0x402C8A20, 0xAE604102, 0x00000002, 0x402C8A20, 0xAE604302, + 0x00000002, 0x402C8A20, 0xAE604702, 0x00000003, 0x402C8A20, 0xAE604702, + 0xAE603202, 0x00000003, 0x402C8A20, 0xAE604702, 0xAE603502, 0x00000003, + 0x402C8A20, 0xAE604702, 0xAE604102, 0x00000003, 0x402C8A20, 0xAE604702, + 0xAE605B02, 0x00000002, 0x402C8A20, 0xAE604D02, 0x00000002, 0x402C8A20, + 0xAE604E02, 0x00000003, 0x402C8A20, 0xAE604E02, 0xAE603202, 0x00000002, + 0x402C8A20, 0xACA05902, 0x00000002, 0x402C8A20, 0xAE605B02, 0x00000003, + 0x402C8A20, 0xAE605B02, 0xAE604702, 0x00000002, 0x402C8A20, 0xAE606402, + 0x00000002, 0x402C8A20, 0xAE606502, 0x00000002, 0x402C8A20, 0xAE606702, + 0x00000002, 0x402C8A20, 0xAD806802, 0x00000003, 0x402C8A20, 0xAD806802, + 0xAE603202, 0x00000003, 0x402C8A20, 0xAD806802, + // Block 212, offset 0x3500 + 0xAE603502, 0x00000003, 0x402C8A20, 0xAD806802, 0xAE604E02, 0x00000003, + 0x402C8A20, 0xAD806802, 0xAE606402, 0x00000003, 0x402C8A20, 0xAD806802, + 0xADC07002, 0x00000002, 0x402C8A20, 0xADC07002, 0x00000002, 0x402C8A20, + 0xADC07502, 0x00000002, 0x402C8A20, 0xADC07802, 0x00000002, 0x402C8A20, + 0xADC07A02, 0x00000002, 0x402C8C20, 0xAE604E02, 0x00000002, 0x402C8C20, + 0xADC07002, 0x00000002, 0x402C8E20, 0xAE603202, 0x00000002, 0x402C8E20, + 0xAE603502, 0x00000002, 0x402C8E20, 0xAE603C02, 0x00000002, 0x402C8E20, + 0xAE604302, 0x00000002, 0x402C8E20, 0xAE604702, 0x00000002, 0x402C8E20, + 0xAE605202, 0x00000002, 0x402C8E20, 0xADC07002, 0x00000002, 0x402C9020, + 0xAE604702, 0x00000002, 0x402C9020, 0xAE605202, 0x00000002, 0x402C9220, + 0xAE603202, 0x00000002, 0x402C9220, 0xAE603502, + // Block 213, offset 0x3540 + 0x00000002, 0x402C9220, 0xAE603C02, 0x00000002, 0x402C9220, 0xAE604302, + 0x00000002, 0x402C9220, 0xAE604702, 0x00000002, 0x402C9220, 0xAE604E02, + 0x00000002, 0x402C9220, 0xAE605202, 0x00000002, 0x402C9220, 0xAE605B02, + 0x00000002, 0x402C9220, 0xAE606402, 0x00000002, 0x402C9220, 0xADC07002, + 0x00000002, 0x402C9420, 0xAE603202, 0x00000002, 0x402C9420, 0xAE603C02, + 0x00000002, 0x402C9420, 0xAE604102, 0x00000002, 0x402C9420, 0xAE605202, + 0x00000002, 0x402C9420, 0xADC07002, 0x00000002, 0x402C9420, 0xADC07B02, + 0x00000002, 0x002D0884, 0x002D0884, 0x00000002, 0x002D0884, 0x002E2284, + 0x00000002, 0x002D089C, 0x002E829C, 0x00000002, 0x002D229D, 0x002C0A9D, + 0x00000002, 0x002D229D, 0x0031009C, 0x00000002, 0x002E2284, 0x002DCC84, + 0x00000002, 0x002E228A, 0x002DCC84, 0x00000002, + // Block 214, offset 0x3580 + 0x002E228A, 0x002DCC8A, 0x00000002, 0x002E229C, 0x002E829C, 0x00000002, + 0x002E229C, 0x002E9E9C, 0x00000002, 0x002E829C, 0x0029D09C, 0x00000002, + 0x002E829C, 0x0029D29C, 0x00000002, 0x002E829C, 0x002BDE9D, 0x00000002, + 0x002E829C, 0x002C0A9C, 0x00000002, 0x002E829D, 0x002C0A9D, 0x00000002, + 0x002E8294, 0x002C3A94, 0x00000002, 0x002E8294, 0x002C6294, 0x00000002, + 0x002E829C, 0x002D229C, 0x00000002, 0x002E829C, 0x002E229C, 0x00000002, + 0x002E829C, 0x002E829C, 0x00000002, 0x002E829C, 0x0030BE9D, 0x00000002, + 0x002E829D, 0x0030BE9D, 0x00000002, 0x002E829D, 0x0030BE9D, 0x00000002, + 0x002E829C, 0x0030E29D, 0x00000002, 0x002E829D, 0x0030E29D, 0x00000002, + 0x002E829D, 0x0032A29D, 0x00000002, 0x002E9E9C, 0x002BDE9D, 0x00000002, + 0x002E9E9C, 0x002D089D, 0x00000002, 0x002E9E84, + // Block 215, offset 0x35c0 + 0x002DCC84, 0x00000002, 0x002E9E8A, 0x002DCC84, 0x00000002, 0x002E9E8A, + 0x002DCC8A, 0x00000002, 0x002E9E9C, 0x002E829C, 0x00000002, 0x002E9E9C, + 0x0030BE9D, 0x00000002, 0x002E9E9C, 0x0030E29D, 0x00000002, 0x002F2C9C, + 0x002BDE9D, 0x00000002, 0x002F2C9D, 0x002BDE9C, 0x00000002, 0x002F2C9C, + 0x002C3A9C, 0x00000002, 0x002F2C9C, 0x002D089D, 0x00000002, 0x002F2C9C, + 0x0030BE9D, 0x00000002, 0x002F2C9C, 0x0030E29D, 0x00000002, 0x0030E29D, + 0x002C0A9C, 0x00000002, 0x0030E29D, 0x002C3A9D, 0x00000002, 0x0030E28C, + 0x00312A8C, 0x00000002, 0x0031DE84, 0x002E9E84, 0x00000002, 0x0032769C, + 0x002BDE9D, 0x00000002, 0x0032769C, 0x002D089D, 0x00000002, 0x0032769C, + 0x002D229C, 0x00000002, 0x0032769C, 0x002E229C, 0x00000002, 0x0032769C, + 0x002E829C, 0x00000002, 0x0032769C, 0x0030BE9D, + // Block 216, offset 0x3600 + 0x00000002, 0x0032769C, 0x0030E29D, 0x00000002, 0x40302620, 0xAE605202, + 0x00000002, 0x00302683, 0xAE605202, 0x00000002, 0x40302820, 0xAE603202, + 0x00000002, 0x00302883, 0xAE603202, 0x00000002, 0x40302820, 0xAE603C02, + 0x00000002, 0x00302883, 0xAE603C02, 0x00000002, 0x40302820, 0xAE605202, + 0x00000002, 0x00302883, 0xAE605202, 0x00000002, 0x40302820, 0xADC07002, + 0x00000002, 0x00302883, 0xADC07002, 0x00000002, 0x40302820, 0xADC07B02, + 0x00000002, 0x00302883, 0xADC07B02, 0x00000002, 0x4030BE21, 0xAE603202, + 0x00000002, 0x0030BEA3, 0xAE603202, 0x00000002, 0x4030BE21, 0xAE603502, + 0x00000002, 0x0030BEA3, 0xAE603502, 0x00000002, 0x4030BE21, 0xAE603C02, + 0x00000002, 0x0030BEA3, 0xAE603C02, 0x00000002, 0x4030BE21, 0xAE604302, + 0x00000002, 0x4030BE21, 0xAE604702, 0x00000002, + // Block 217, offset 0x3640 + 0x0030BEA3, 0xAE604702, 0x00000002, 0x4030BE21, 0xAE605202, 0x00000002, + 0x0030BEA3, 0xAE605202, 0x00000002, 0x4030BE21, 0xADC07002, 0x00000002, + 0x0030BEA3, 0xADC07002, 0x00000002, 0x4030EE20, 0xAE603202, 0x00000002, + 0x0030EE83, 0xAE603202, 0x00000002, 0x4030EE20, 0xAE603C02, 0x00000002, + 0x0030EE83, 0xAE603C02, 0x00000002, 0x4030EE20, 0xAE604702, 0x00000002, + 0x0030EE83, 0xAE604702, 0x00000002, 0x4030EE20, 0xAE605B02, 0x00000002, + 0x0030EE83, 0xAE605B02, 0x00000002, 0x4030EE20, 0xAD806802, 0x00000002, + 0x0030EE83, 0xAD806802, 0x00000002, 0x4030F020, 0xAE605B02, 0x00000002, + 0x0030F083, 0xAE605B02, 0x00000002, 0x4030F220, 0xAE605B02, 0x00000002, + 0x0030F283, 0xAE605B02, 0x00000002, 0x4030F420, 0xAE603202, 0x00000002, + 0x0030F483, 0xAE603202, 0x00000002, 0x4030F420, + // Block 218, offset 0x3680 + 0xAE603502, 0x00000002, 0x0030F483, 0xAE603502, 0x00000002, 0x4030F420, + 0xAE604102, 0x00000002, 0x0030F483, 0xAE604102, 0x00000002, 0x4030F420, + 0xAE605B02, 0x00000002, 0x0030F483, 0xAE605B02, 0x00000002, 0xA000B218, + 0xA000BA18, 0x00000002, 0xA000B618, 0xA000BA18, 0x00000002, 0x00393899, + 0xA000A219, 0x00000002, 0x0039389A, 0xA000A21A, 0x00000002, 0x00393C97, + 0x003A6897, 0x00000002, 0x00393C98, 0x003A6898, 0x00000002, 0x00393C99, + 0x003A9099, 0x00000002, 0x00393C9A, 0x003A909A, 0x00000002, 0x00395697, + 0x003A6897, 0x00000002, 0x00395698, 0x003A6898, 0x00000002, 0x00395699, + 0x003A9099, 0x00000002, 0x0039569A, 0x003A909A, 0x00000002, 0x00395898, + 0x003A6898, 0x00000002, 0x00395899, 0x003A9099, 0x00000002, 0x0039589A, + 0x003A909A, 0x00000002, 0x00396499, 0x003A9099, + // Block 219, offset 0x36c0 + 0x00000002, 0x0039649A, 0x003A909A, 0x00000002, 0x00397299, 0x003A9099, + 0x00000002, 0x0039729A, 0x003A909A, 0x00000002, 0x00397499, 0x003A9099, + 0x00000002, 0x0039749A, 0x003A909A, 0x00000002, 0x0039C697, 0x003A6897, + 0x00000002, 0x0039C698, 0x003A6898, 0x00000002, 0x0039C699, 0x003A9099, + 0x00000002, 0x0039C69A, 0x003A909A, 0x00000002, 0x0039C897, 0x003A6897, + 0x00000002, 0x0039C898, 0x003A6898, 0x00000002, 0x0039C899, 0x003A9099, + 0x00000002, 0x0039C89A, 0x003A909A, 0x00000002, 0x0039DC99, 0x003A9099, + 0x00000002, 0x0039DC9A, 0x003A909A, 0x00000002, 0x0039DE99, 0x003A9099, + 0x00000002, 0x0039DE9A, 0x003A909A, 0x00000002, 0x0039E699, 0x003A9099, + 0x00000002, 0x0039E69A, 0x003A909A, 0x00000002, 0x0039EE99, 0x003A9099, + 0x00000002, 0x0039EE9A, 0x003A909A, 0x00000002, + // Block 220, offset 0x3700 + 0x0039F099, 0x003A9099, 0x00000002, 0x0039F09A, 0x003A909A, 0x00000002, + 0x0039FC99, 0x003A9099, 0x00000002, 0x0039FC9A, 0x003A909A, 0x00000002, + 0x003A1299, 0x003A9099, 0x00000002, 0x003A129A, 0x003A909A, 0x00000002, + 0x003A1A99, 0x00393899, 0x00000002, 0x003A1A9A, 0x0039389A, 0x00000002, + 0x003A1A97, 0x00396497, 0x00000002, 0x003A1A9A, 0x0039649A, 0x00000002, + 0x003A1A97, 0x00397297, 0x00000002, 0x003A1A9A, 0x0039729A, 0x00000002, + 0x003A1A97, 0x00397497, 0x00000002, 0x003A1A9A, 0x0039749A, 0x00000002, + 0x003A1A97, 0x003A4097, 0x00000002, 0x003A1A98, 0x003A4098, 0x00000002, + 0x003A1A99, 0x003A4099, 0x00000002, 0x003A1A9A, 0x003A409A, 0x00000002, + 0x003A1A97, 0x003A4E97, 0x00000002, 0x003A1A98, 0x003A4E98, 0x00000002, + 0x003A1A99, 0x003A4E99, 0x00000002, 0x003A1A9A, + // Block 221, offset 0x3740 + 0x003A4E9A, 0x00000002, 0x003A1A99, 0x003A9099, 0x00000002, 0x003A1A9A, + 0x003A909A, 0x00000002, 0x003A4097, 0x003A6897, 0x00000002, 0x003A4099, + 0x003A9099, 0x00000002, 0x003A409A, 0x003A909A, 0x00000002, 0x003A4E9A, + 0x003A909A, 0x00000002, 0x003A5697, 0x003A6897, 0x00000002, 0x003A5698, + 0x003A6898, 0x00000002, 0x003A5699, 0x003A9099, 0x00000002, 0x003A569A, + 0x003A909A, 0x00000002, 0x003A6897, 0xA000D117, 0x00000002, 0x003A6897, + 0x00396497, 0x00000002, 0x003A689A, 0x0039649A, 0x00000002, 0x003A6897, + 0x003A4E97, 0x00000002, 0x003A689A, 0x003A4E9A, 0x00000002, 0x003A689A, + 0x003A909A, 0x00000002, 0x003A7299, 0xA000BE19, 0x00000002, 0x003A729A, + 0xA000BE1A, 0x00000002, 0x403A8822, 0xAE60BE02, 0x00000002, 0x003A8E99, + 0xA000D119, 0x00000002, 0x003A8E9A, 0xA000D11A, + // Block 222, offset 0x3780 + 0x00000002, 0x003A9084, 0x00391C84, 0x00000002, 0x003A9097, 0x00396497, + 0x00000002, 0x003A909A, 0x0039649A, 0x00000002, 0x003A9097, 0x00397297, + 0x00000002, 0x003A909A, 0x0039729A, 0x00000002, 0x003A9097, 0x00397497, + 0x00000002, 0x003A909A, 0x0039749A, 0x00000002, 0x003A9099, 0x0039A499, + 0x00000002, 0x003A9099, 0x0039A699, 0x00000002, 0x003A9097, 0x003A4E97, + 0x00000002, 0x003A9098, 0x003A4E98, 0x00000002, 0x003A9099, 0x003A4E99, + 0x00000002, 0x003A909A, 0x003A4E9A, 0x00000002, 0x003A9099, 0x003A5699, + 0x00000002, 0x003A9097, 0x003A6897, 0x00000002, 0x003A9098, 0x003A6898, + 0x00000002, 0x003A9099, 0x003A9099, 0x00000002, 0x003A909A, 0x003A909A, + 0x00000002, 0x403A9222, 0xAE60BE02, 0x00000002, 0x003AAA99, 0xA000BE19, + 0x00000002, 0x003AAA9A, 0xA000BE1A, 0x00000002, + // Block 223, offset 0x37c0 + 0x402C6221, 0x40021220, 0x00000002, 0x002C62A3, 0x40021220, 0x00000002, + 0x402D2221, 0x40021220, 0x00000002, 0x002D22A3, 0x40021220, 0x00000002, + 0x402E9E21, 0x40021220, 0x00000002, 0x002E9EA3, 0x40021220, 0x00000002, + 0x40302C21, 0x40021220, 0x00000002, 0x00302CA3, 0x40021220, 0x00000002, + 0x40312A21, 0x40021220, 0x00000002, 0x00312AA3, 0x40021220, 0x00000003, + 0x40312A21, 0x40021220, 0xAE604102, 0x00000003, 0x00312AA3, 0x40021220, + 0xAE604102, 0x00000002, 0x40320E20, 0xAE605B02, 0x00000002, 0x00320E83, + 0xAE605B02, 0x00000002, 0x40320E21, 0xAE603202, 0x00000002, 0x00320EA3, + 0xAE603202, 0x00000002, 0x40321020, 0xAE604E02, 0x00000002, 0x00321083, + 0xAE604E02, 0x00000002, 0x40321020, 0xAE605B02, 0x00000002, 0x00321083, + 0xAE605B02, 0x00000002, 0x40321021, 0xAE603202, + // Block 224, offset 0x3800 + 0x00000002, 0x003210A3, 0xAE603202, 0x00000002, 0x40302C21, 0x402D6820, + 0x00000002, 0x00302CA3, 0x402D6820, 0x00000002, 0x40321023, 0xAE603202, + 0x00000002, 0x003210E3, 0xAE603202, 0x00000002, 0x40321023, 0xAE603C02, + 0x00000002, 0x003210E3, 0xAE603C02, 0x00000002, 0x40321023, 0xAE604702, + 0x00000002, 0x003210E3, 0xAE604702, 0x00000002, 0x40321023, 0xAE605B02, + 0x00000002, 0x003210E3, 0xAE605B02, 0x00000002, 0x40321023, 0xAD806802, + 0x00000002, 0x003210E3, 0xAD806802, 0x00000002, 0x002BDE83, 0xAE603202, + 0x00000002, 0x002BDE83, 0xAE603502, 0x00000002, 0x002BDE83, 0xAE603702, + 0x00000003, 0x002BDE83, 0xAE603702, 0xAE603202, 0x00000003, 0x002BDE83, + 0xAE603702, 0xAE603502, 0x00000003, 0x002BDE83, 0xAE603702, 0xAE604E02, + 0x00000003, 0x002BDE83, 0xAE603702, 0xAE606402, + // Block 225, offset 0x3840 + 0x00000002, 0x002BDE83, 0xAE603C02, 0x00000003, 0x002BDE83, 0xAE603C02, + 0xAE603202, 0x00000003, 0x002BDE83, 0xAE603C02, 0xAE603502, 0x00000003, + 0x002BDE83, 0xAE603C02, 0xAE604E02, 0x00000003, 0x002BDE83, 0xAE603C02, + 0xAE606402, 0x00000002, 0x002BDE83, 0xAE604102, 0x00000002, 0x002BDE83, + 0xAE604302, 0x00000003, 0x002BDE83, 0xAE604302, 0xAE603202, 0x00000002, + 0x002BDE83, 0xAE604702, 0x00000003, 0x002BDE83, 0xAE604702, 0xAE605B02, + 0x00000002, 0x002BDE83, 0xAE604E02, 0x00000002, 0x002BDE83, 0xAE605202, + 0x00000003, 0x002BDE83, 0xAE605202, 0xAE605B02, 0x00000002, 0x002BDE83, + 0xACA05902, 0x00000002, 0x002BDE83, 0xAE605B02, 0x00000002, 0x002BDE83, + 0xAE606402, 0x00000002, 0x002BDE83, 0xAE606502, 0x00000002, 0x002BDE83, + 0xAE606702, 0x00000002, 0x002BDE83, 0xADC07002, + // Block 226, offset 0x3880 + 0x00000003, 0x002BDE83, 0xADC07002, 0xAE603702, 0x00000003, 0x002BDE83, + 0xADC07002, 0xAE603C02, 0x00000002, 0x002BDE83, 0xADC07602, 0x00000002, + 0x402BE020, 0xAE603202, 0x00000002, 0x002BE083, 0xAE603202, 0x00000002, + 0x402BE020, 0xAE603502, 0x00000002, 0x002BE083, 0xAE603502, 0x00000002, + 0x402BE020, 0xAE603702, 0x00000002, 0x002BE083, 0xAE603702, 0x00000002, + 0x402BE020, 0xAE603C02, 0x00000002, 0x002BE083, 0xAE603C02, 0x00000003, + 0x402BE020, 0xAE603C02, 0xAE603202, 0x00000003, 0x002BE083, 0xAE603C02, + 0xAE603202, 0x00000003, 0x402BE020, 0xAE603C02, 0xAE603502, 0x00000003, + 0x002BE083, 0xAE603C02, 0xAE603502, 0x00000003, 0x402BE020, 0xAE603C02, + 0xAE604E02, 0x00000003, 0x002BE083, 0xAE603C02, 0xAE604E02, 0x00000003, + 0x402BE020, 0xAE603C02, 0xAE606402, 0x00000003, + // Block 227, offset 0x38c0 + 0x002BE083, 0xAE603C02, 0xAE606402, 0x00000002, 0x402BE020, 0xAE604102, + 0x00000002, 0x002BE083, 0xAE604102, 0x00000002, 0x402BE020, 0xAE604702, + 0x00000002, 0x002BE083, 0xAE604702, 0x00000002, 0x402BE020, 0xAE604E02, + 0x00000002, 0x002BE083, 0xAE604E02, 0x00000002, 0x402BE020, 0xAE605202, + 0x00000002, 0x002BE083, 0xAE605202, 0x00000002, 0x402BE020, 0xACA05602, + 0x00000002, 0x002BE083, 0xACA05602, 0x00000003, 0x402BE020, 0xACA05602, + 0xAE603702, 0x00000003, 0x002BE083, 0xACA05602, 0xAE603702, 0x00000002, + 0x402BE020, 0xACA05902, 0x00000002, 0x002BE083, 0xACA05902, 0x00000002, + 0x402BE020, 0xAE605B02, 0x00000002, 0x002BE083, 0xAE605B02, 0x00000003, + 0x402BE020, 0xAE605B02, 0xAE603202, 0x00000003, 0x002BE083, 0xAE605B02, + 0xAE603202, 0x00000003, 0x402BE020, 0xAE605B02, + // Block 228, offset 0x3900 + 0xAE603502, 0x00000003, 0x002BE083, 0xAE605B02, 0xAE603502, 0x00000002, + 0x402BE020, 0xAE606402, 0x00000002, 0x002BE083, 0xAE606402, 0x00000002, + 0x402BE020, 0xAE606502, 0x00000002, 0x002BE083, 0xAE606502, 0x00000002, + 0x402BE020, 0xAE606702, 0x00000002, 0x002BE083, 0xAE606702, 0x00000002, + 0x402BE020, 0xADC07002, 0x00000002, 0x002BE083, 0xADC07002, 0x00000003, + 0x402BE020, 0xADC07002, 0xAE603C02, 0x00000003, 0x002BE083, 0xADC07002, + 0xAE603C02, 0x00000002, 0x402BE020, 0xADC07802, 0x00000002, 0x002BE083, + 0xADC07802, 0x00000002, 0x402BE020, 0xADC07A02, 0x00000002, 0x002BE083, + 0xADC07A02, 0x00000002, 0x402BE220, 0xAE603202, 0x00000002, 0x002BE283, + 0xAE603202, 0x00000002, 0x402BE220, 0xAE603502, 0x00000002, 0x002BE283, + 0xAE603502, 0x00000002, 0x402BE220, 0xAE603702, + // Block 229, offset 0x3940 + 0x00000002, 0x002BE283, 0xAE603702, 0x00000002, 0x402BE220, 0xAE603C02, + 0x00000002, 0x002BE283, 0xAE603C02, 0x00000002, 0x402BE220, 0xAE604102, + 0x00000002, 0x002BE283, 0xAE604102, 0x00000002, 0x402BE220, 0xAE604702, + 0x00000002, 0x002BE283, 0xAE604702, 0x00000003, 0x402BE220, 0xAE604702, + 0xAE603202, 0x00000003, 0x002BE283, 0xAE604702, 0xAE603202, 0x00000002, + 0x402BE220, 0xAE604E02, 0x00000002, 0x002BE283, 0xAE604E02, 0x00000002, + 0x002BE283, 0xAE605202, 0x00000002, 0x402BE220, 0xACA05902, 0x00000002, + 0x002BE283, 0xACA05902, 0x00000002, 0x402BE220, 0xAE605B02, 0x00000002, + 0x002BE283, 0xAE605B02, 0x00000002, 0x402BE220, 0xAE606402, 0x00000002, + 0x002BE283, 0xAE606402, 0x00000002, 0x402BE220, 0xAE606502, 0x00000002, + 0x002BE283, 0xAE606502, 0x00000002, 0x402BE220, + // Block 230, offset 0x3980 + 0xAE606702, 0x00000002, 0x002BE283, 0xAE606702, 0x00000002, 0x402BE220, + 0xADC07002, 0x00000002, 0x002BE283, 0xADC07002, 0x00000002, 0x402BE220, + 0xADC07A02, 0x00000002, 0x002BE283, 0xADC07A02, 0x00000002, 0x402BE420, + 0xAE603202, 0x00000002, 0x002BE483, 0xAE603202, 0x00000002, 0x402BE420, + 0xAE603502, 0x00000002, 0x002BE483, 0xAE603502, 0x00000002, 0x402BE420, + 0xAE603702, 0x00000002, 0x002BE483, 0xAE603702, 0x00000002, 0x402BE420, + 0xAE603C02, 0x00000002, 0x002BE483, 0xAE603C02, 0x00000003, 0x402BE420, + 0xAE603C02, 0xAE603202, 0x00000003, 0x002BE483, 0xAE603C02, 0xAE603202, + 0x00000003, 0x402BE420, 0xAE603C02, 0xAE603502, 0x00000003, 0x002BE483, + 0xAE603C02, 0xAE603502, 0x00000003, 0x402BE420, 0xAE603C02, 0xAE604E02, + 0x00000003, 0x002BE483, 0xAE603C02, 0xAE604E02, + // Block 231, offset 0x39c0 + 0x00000003, 0x402BE420, 0xAE603C02, 0xAE606402, 0x00000003, 0x002BE483, + 0xAE603C02, 0xAE606402, 0x00000002, 0x402BE420, 0xAE604102, 0x00000002, + 0x002BE483, 0xAE604102, 0x00000002, 0x402BE420, 0xAE604702, 0x00000002, + 0x002BE483, 0xAE604702, 0x00000003, 0x402BE420, 0xAE604702, 0xAE605B02, + 0x00000003, 0x002BE483, 0xAE604702, 0xAE605B02, 0x00000002, 0x402BE420, + 0xAE604D02, 0x00000002, 0x002BE483, 0xAE604D02, 0x00000002, 0x402BE420, + 0xAE604E02, 0x00000002, 0x002BE483, 0xAE604E02, 0x00000003, 0x402BE420, + 0xAE604E02, 0xAE603202, 0x00000003, 0x002BE483, 0xAE604E02, 0xAE603202, + 0x00000003, 0x402BE420, 0xAE604E02, 0xAE604702, 0x00000003, 0x002BE483, + 0xAE604E02, 0xAE604702, 0x00000003, 0x402BE420, 0xAE604E02, 0xAE605B02, + 0x00000003, 0x002BE483, 0xAE604E02, 0xAE605B02, + // Block 232, offset 0x3a00 + 0x00000002, 0x402BE420, 0xAE605202, 0x00000002, 0x002BE483, 0xAE605202, + 0x00000003, 0x402BE420, 0xAE605202, 0xAE605B02, 0x00000003, 0x002BE483, + 0xAE605202, 0xAE605B02, 0x00000002, 0x402BE420, 0xACA05902, 0x00000002, + 0x002BE483, 0xACA05902, 0x00000003, 0x402BE420, 0xACA05902, 0xAE605B02, + 0x00000003, 0x002BE483, 0xACA05902, 0xAE605B02, 0x00000002, 0x402BE420, + 0xAE605B02, 0x00000002, 0x002BE483, 0xAE605B02, 0x00000003, 0x402BE420, + 0xAE605B02, 0xAE603202, 0x00000003, 0x002BE483, 0xAE605B02, 0xAE603202, + 0x00000003, 0x402BE420, 0xAE605B02, 0xAE603502, 0x00000003, 0x002BE483, + 0xAE605B02, 0xAE603502, 0x00000002, 0x402BE420, 0xAE606402, 0x00000002, + 0x002BE483, 0xAE606402, 0x00000002, 0x402BE420, 0xAE606502, 0x00000002, + 0x002BE483, 0xAE606502, 0x00000002, 0x402BE420, + // Block 233, offset 0x3a40 + 0xAE606702, 0x00000002, 0x002BE483, 0xAE606702, 0x00000002, 0x402BE420, + 0xAD806802, 0x00000002, 0x002BE483, 0xAD806802, 0x00000003, 0x402BE420, + 0xAD806802, 0xAE603202, 0x00000003, 0x002BE483, 0xAD806802, 0xAE603202, + 0x00000003, 0x402BE420, 0xAD806802, 0xAE603502, 0x00000003, 0x002BE483, + 0xAD806802, 0xAE603502, 0x00000003, 0x402BE420, 0xAD806802, 0xAE604E02, + 0x00000003, 0x002BE483, 0xAD806802, 0xAE604E02, 0x00000003, 0x402BE420, + 0xAD806802, 0xAE606402, 0x00000003, 0x002BE483, 0xAD806802, 0xAE606402, + 0x00000003, 0x402BE420, 0xAD806802, 0xADC07002, 0x00000003, 0x002BE483, + 0xAD806802, 0xADC07002, 0x00000002, 0x402BE420, 0xADC07002, 0x00000002, + 0x002BE483, 0xADC07002, 0x00000003, 0x402BE420, 0xADC07002, 0xAE603C02, + 0x00000003, 0x002BE483, 0xADC07002, 0xAE603C02, + // Block 234, offset 0x3a80 + 0x00000002, 0x402BE620, 0xAE603202, 0x00000002, 0x002BE683, 0xAE603202, + 0x00000002, 0x402BE620, 0xAE603502, 0x00000002, 0x002BE683, 0xAE603502, + 0x00000002, 0x402BE620, 0xAE603702, 0x00000002, 0x002BE683, 0xAE603702, + 0x00000002, 0x402BE620, 0xAE603C02, 0x00000002, 0x002BE683, 0xAE603C02, + 0x00000002, 0x402BE620, 0xAE604102, 0x00000002, 0x002BE683, 0xAE604102, + 0x00000002, 0x402BE620, 0xAE604302, 0x00000002, 0x002BE683, 0xAE604302, + 0x00000002, 0x402BE620, 0xAE604702, 0x00000002, 0x002BE683, 0xAE604702, + 0x00000003, 0x402BE620, 0xAE604702, 0xAE603202, 0x00000003, 0x002BE683, + 0xAE604702, 0xAE603202, 0x00000003, 0x402BE620, 0xAE604702, 0xAE603502, + 0x00000003, 0x002BE683, 0xAE604702, 0xAE603502, 0x00000003, 0x402BE620, + 0xAE604702, 0xAE604102, 0x00000003, 0x002BE683, + // Block 235, offset 0x3ac0 + 0xAE604702, 0xAE604102, 0x00000003, 0x402BE620, 0xAE604702, 0xAE605B02, + 0x00000003, 0x002BE683, 0xAE604702, 0xAE605B02, 0x00000002, 0x402BE620, + 0xAE604D02, 0x00000002, 0x002BE683, 0xAE604D02, 0x00000002, 0x402BE620, + 0xAE604E02, 0x00000002, 0x002BE683, 0xAE604E02, 0x00000003, 0x402BE620, + 0xAE604E02, 0xAE603202, 0x00000003, 0x002BE683, 0xAE604E02, 0xAE603202, + 0x00000002, 0x402BE620, 0xACA05902, 0x00000002, 0x002BE683, 0xACA05902, + 0x00000002, 0x402BE620, 0xAE605B02, 0x00000002, 0x002BE683, 0xAE605B02, + 0x00000003, 0x402BE620, 0xAE605B02, 0xAE604702, 0x00000003, 0x002BE683, + 0xAE605B02, 0xAE604702, 0x00000002, 0x402BE620, 0xAE606402, 0x00000002, + 0x002BE683, 0xAE606402, 0x00000002, 0x402BE620, 0xAE606502, 0x00000002, + 0x002BE683, 0xAE606502, 0x00000002, 0x402BE620, + // Block 236, offset 0x3b00 + 0xAE606702, 0x00000002, 0x002BE683, 0xAE606702, 0x00000002, 0x402BE620, + 0xAD806802, 0x00000002, 0x002BE683, 0xAD806802, 0x00000003, 0x402BE620, + 0xAD806802, 0xAE603202, 0x00000003, 0x002BE683, 0xAD806802, 0xAE603202, + 0x00000003, 0x402BE620, 0xAD806802, 0xAE603502, 0x00000003, 0x002BE683, + 0xAD806802, 0xAE603502, 0x00000003, 0x402BE620, 0xAD806802, 0xAE604E02, + 0x00000003, 0x002BE683, 0xAD806802, 0xAE604E02, 0x00000003, 0x402BE620, + 0xAD806802, 0xAE606402, 0x00000003, 0x002BE683, 0xAD806802, 0xAE606402, + 0x00000003, 0x402BE620, 0xAD806802, 0xADC07002, 0x00000003, 0x002BE683, + 0xAD806802, 0xADC07002, 0x00000002, 0x402BE620, 0xADC07002, 0x00000002, + 0x002BE683, 0xADC07002, 0x00000002, 0x402BE620, 0xADC07502, 0x00000002, + 0x002BE683, 0xADC07502, 0x00000002, 0x402BE620, + // Block 237, offset 0x3b40 + 0xADC07802, 0x00000002, 0x002BE683, 0xADC07802, 0x00000002, 0x402BE620, + 0xADC07A02, 0x00000002, 0x002BE683, 0xADC07A02, 0x00000002, 0x402BE820, + 0xAE603C02, 0x00000002, 0x002BE883, 0xAE603C02, 0x00000002, 0x402BE820, + 0xAE604102, 0x00000002, 0x002BE883, 0xAE604102, 0x00000002, 0x402BE820, + 0xAE604702, 0x00000002, 0x002BE883, 0xAE604702, 0x00000002, 0x402BE820, + 0xAE605202, 0x00000002, 0x002BE883, 0xAE605202, 0x00000002, 0x402BE820, + 0xACA05602, 0x00000002, 0x002BE883, 0xACA05602, 0x00000002, 0x402BE820, + 0xADC07002, 0x00000002, 0x002BE883, 0xADC07002, 0x00000002, 0x402BE820, + 0xADC07902, 0x00000002, 0x002BE883, 0xADC07902, 0x00000002, 0x402BE820, + 0xADC07B02, 0x00000002, 0x402BEA20, 0xAE603202, 0x00000002, 0x002BEA83, + 0xAE603202, 0x00000002, 0x402BEA20, 0xAE604102, + // Block 238, offset 0x3b80 + 0x00000002, 0x002BEA83, 0xAE604102, 0x00000002, 0x402BEA20, 0xACA05602, + 0x00000002, 0x002BEA83, 0xACA05602, 0x00000002, 0x402BEA20, 0xADC07002, + 0x00000002, 0x002BEA83, 0xADC07002, 0x00000002, 0x402BEA20, 0xADC07B02, + 0x00000002, 0x002BEA83, 0xADC07B02, 0x00000002, 0x402BEC20, 0xAE603202, + 0x00000002, 0x002BEC83, 0xAE603202, 0x00000002, 0x402BEC20, 0xAE604102, + 0x00000002, 0x002BEC83, 0xAE604102, 0x00000002, 0x402BEC20, 0xACA05602, + 0x00000002, 0x002BEC83, 0xACA05602, 0x00000002, 0x402BEC20, 0xADC07002, + 0x00000002, 0x002BEC83, 0xADC07002, 0x00000003, 0x402BEC20, 0xADC07002, + 0xAE605B02, 0x00000003, 0x002BEC83, 0xADC07002, 0xAE605B02, 0x00000002, + 0x402BEC20, 0xADC07802, 0x00000002, 0x002BEC83, 0xADC07802, 0x00000002, + 0x402BEC20, 0xADC07B02, 0x00000002, 0x002BEC83, + // Block 239, offset 0x3bc0 + 0xADC07B02, 0x00000002, 0x402BEE20, 0xAE603202, 0x00000002, 0x002BEE83, + 0xAE603202, 0x00000002, 0x402BEE20, 0xAE605202, 0x00000002, 0x002BEE83, + 0xAE605202, 0x00000002, 0x402BEE20, 0xADC07002, 0x00000002, 0x002BEE83, + 0xADC07002, 0x00000002, 0x402BF020, 0xAE603202, 0x00000002, 0x002BF083, + 0xAE603202, 0x00000002, 0x402BF020, 0xAE603502, 0x00000002, 0x002BF083, + 0xAE603502, 0x00000002, 0x402BF020, 0xAE604102, 0x00000002, 0x002BF083, + 0xAE604102, 0x00000002, 0x402BF020, 0xAE604E02, 0x00000002, 0x002BF083, + 0xAE604E02, 0x00000002, 0x402BF020, 0xAE605202, 0x00000002, 0x002BF083, + 0xAE605202, 0x00000002, 0x402BF020, 0xACA05602, 0x00000002, 0x002BF083, + 0xACA05602, 0x00000002, 0x402BF020, 0xADC07002, 0x00000002, 0x002BF083, + 0xADC07002, 0x00000002, 0x402BF020, 0xADC07802, + // Block 240, offset 0x3c00 + 0x00000002, 0x002BF083, 0xADC07802, 0x00000002, 0x402BF020, 0xADC07B02, + 0x00000002, 0x002BF083, 0xADC07B02, 0x00000002, 0x402BF220, 0xAE603202, + 0x00000002, 0x002BF283, 0xAE603202, 0x00000002, 0x402BF220, 0xAE605202, + 0x00000002, 0x002BF283, 0xAE605202, 0x00000002, 0x402BF420, 0xAE603202, + 0x00000002, 0x002BF483, 0xAE603202, 0x00000002, 0x402BF420, 0xAE603502, + 0x00000002, 0x002BF483, 0xAE603502, 0x00000002, 0x402BF420, 0xAE603C02, + 0x00000002, 0x002BF483, 0xAE603C02, 0x00000002, 0x402BF420, 0xAE604302, + 0x00000002, 0x402BF420, 0xAE604702, 0x00000002, 0x002BF483, 0xAE604702, + 0x00000002, 0x402BF420, 0xAE605202, 0x00000002, 0x002BF483, 0xAE605202, + 0x00000002, 0x402BF420, 0xADC07002, 0x00000002, 0x002BF483, 0xADC07002, + 0x00000002, 0x402C3E20, 0xACA05602, 0x00000002, + // Block 241, offset 0x3c40 + 0x002C3E83, 0xACA05602, 0x00000002, 0x002C3C83, 0x402C3C20, 0x00000002, + 0x002C3C85, 0x402C3C20, 0x00000002, 0x002C3C87, 0x002C3C86, 0x00000002, + 0x002C6483, 0x402C6420, 0x00000002, 0x002C6485, 0x402C6420, 0x00000002, + 0x002C6487, 0x002C6486, 0x00000002, 0x002C6683, 0x402C6620, 0x00000002, + 0x002C6685, 0x402C6620, 0x00000002, 0x002C6687, 0x002C6686, 0x00000002, + 0x002D2483, 0x402D2420, 0x00000002, 0x002D2485, 0x402D2420, 0x00000002, + 0x002D2487, 0x002D2486, 0x00000002, 0x002E2483, 0x402E2420, 0x00000002, + 0x002E2485, 0x402E2420, 0x00000002, 0x002E2487, 0x002E2486, 0x00000002, + 0x002EA083, 0x402EA020, 0x00000002, 0x002EA085, 0x402EA020, 0x00000002, + 0x002EA087, 0x002EA086, 0x00000002, 0x002FE883, 0x402FE820, 0x00000002, + 0x002FE885, 0x402FE820, 0x00000002, 0x002FE887, + // Block 242, offset 0x3c80 + 0x002FE886, 0x00000002, 0x00302E83, 0x40302E20, 0x00000002, 0x00302E85, + 0x40302E20, 0x00000002, 0x00302E87, 0x00302E86, 0x00000002, 0x00312C83, + 0x40312C20, 0x00000002, 0x00312C85, 0x40312C20, 0x00000002, 0x00312C87, + 0x00312C86, 0x00000002, 0x402EE420, 0xAE603C02, 0x00000002, 0x002EE483, + 0xAE603C02, 0x00000002, 0x402EE420, 0xAD806802, 0x00000002, 0x002EE483, + 0xAD806802, 0x00000002, 0x40306E20, 0xAD806802, 0x00000002, 0x00306E83, + 0xAD806802, 0x00000002, 0x402C0820, 0xAE603702, 0x00000002, 0x002C0883, + 0xAE603702, 0x00000002, 0x402C0820, 0xAE603C02, 0x00000002, 0x002C0883, + 0xAE603C02, 0x00000002, 0x402D0620, 0xAE603C02, 0x00000002, 0x002D0683, + 0xAE603C02, 0x00000002, 0x402D0620, 0xAE605B02, 0x00000002, 0x002D0683, + 0xAE605B02, 0x00000002, 0x402DCA20, 0xAE604702, + // Block 243, offset 0x3cc0 + 0x00000002, 0x002DCA83, 0xAE604702, 0x00000002, 0x402F2A20, 0xAE603C02, + 0x00000002, 0x002F2A83, 0xAE603C02, 0x00000002, 0x402F2A20, 0xAE604E02, + 0x00000002, 0x002F2A83, 0xAE604E02, 0x00000002, 0x402F2A20, 0xAE605B02, + 0x00000002, 0x002F2A83, 0xAE605B02, 0x00000002, 0x402F2A20, 0xAD806802, + 0x00000002, 0x002F2A83, 0xAD806802, 0x00000002, 0x4030BC20, 0xAE604702, + 0x00000002, 0x0030BC83, 0xAE604702, 0x00000002, 0x4030BC20, 0xAE604E02, + 0x00000002, 0x0030BC83, 0xAE604E02, 0x00000002, 0x4030BC20, 0xAD806802, + 0x00000002, 0x0030BC83, 0xAD806802, 0x00000002, 0x40320E20, 0xAE604E02, + 0x00000002, 0x00320E83, 0xAE604E02, 0x00000003, 0x0004B084, 0x029C1284, + 0x0004B29F, 0x00000003, 0x0004B084, 0x029D1884, 0x0004B29F, 0x00000003, + 0x0004B084, 0x02A5BA84, 0x0004B29F, 0x00000003, + // Block 244, offset 0x3d00 + 0x0004B084, 0x02B71284, 0x0004B29F, 0x00000003, 0x0004B084, 0x02C4A684, + 0x0004B29F, 0x00000003, 0x0004B084, 0x02CAAE84, 0x0004B29F, 0x00000003, + 0x0004B084, 0x02CE5884, 0x0004B29F, 0x00000003, 0x0004B084, 0x02E17284, + 0x0004B29F, 0x00000003, 0x0004B084, 0x02EDAE84, 0x0004B29F, 0x00000002, + 0x0065768E, 0x0065768F, 0x00000002, 0x0065768E, 0x00657691, 0x00000002, + 0x00657690, 0x0065768F, 0x00000002, 0x00657690, 0x00657691, 0x00000002, + 0x0065768E, 0x0065828F, 0x00000002, 0x0065768E, 0x00658291, 0x00000003, + 0x0065768E, 0x00658291, 0xA0812802, 0x00000002, 0x0065768E, 0x00658C91, + 0x00000003, 0x0065768E, 0x00658C91, 0xA0812802, 0x00000002, 0x0065768E, + 0x00659691, 0x00000003, 0x0065768E, 0x00659691, 0xA0812802, 0x00000002, + 0x0065768E, 0x0065A091, 0x00000002, 0x0065768E, + // Block 245, offset 0x3d40 + 0x0065AA8F, 0x00000002, 0x0065768E, 0x0065AA91, 0x00000003, 0x0065768E, + 0x0065AA91, 0xA0812802, 0x00000003, 0x0065768E, 0x0065AA91, 0xA0812902, + 0x00000002, 0x0065768E, 0x0065B491, 0x00000002, 0x0065768E, 0x0065BE8F, + 0x00000002, 0x0065768E, 0x0065BE91, 0x00000002, 0x0065768E, 0x0065C68F, + 0x00000002, 0x0065768E, 0x0065C691, 0x00000002, 0x0065768E, 0x0065D08F, + 0x00000002, 0x0065768E, 0x0065D091, 0x00000003, 0x0065768E, 0x0065D091, + 0xA0812802, 0x00000002, 0x0065788E, 0x0065788F, 0x00000002, 0x0065788E, + 0x00657891, 0x00000002, 0x00657890, 0x0065788F, 0x00000002, 0x00657890, + 0x00657891, 0x00000002, 0x0065788E, 0x00658491, 0x00000003, 0x0065788E, + 0x00658491, 0xA0812802, 0x00000002, 0x0065788E, 0x00658E8F, 0x00000002, + 0x0065788E, 0x00658E91, 0x00000003, 0x0065788E, + // Block 246, offset 0x3d80 + 0x00658E91, 0xA0812802, 0x00000002, 0x0065788E, 0x00659891, 0x00000003, + 0x0065788E, 0x00659891, 0xA0812802, 0x00000002, 0x0065788E, 0x0065A291, + 0x00000002, 0x0065788E, 0x0065AC8F, 0x00000002, 0x0065788E, 0x0065AC91, + 0x00000003, 0x0065788E, 0x0065AC91, 0xA0812802, 0x00000003, 0x0065788E, + 0x0065AC91, 0xA0812902, 0x00000002, 0x0065788E, 0x0065B691, 0x00000002, + 0x0065788E, 0x0065C88F, 0x00000002, 0x0065788E, 0x0065C891, 0x00000002, + 0x0065788E, 0x0065D291, 0x00000003, 0x0065788E, 0x0065D291, 0xA0812802, + 0x00000002, 0x00657A8E, 0x00657A8F, 0x00000002, 0x00657A8E, 0x00657A91, + 0x00000002, 0x00657A90, 0x00657A8F, 0x00000002, 0x00657A90, 0x00657A91, + 0x00000003, 0x00657A8E, 0x00657A91, 0xA0812802, 0x00000003, 0x00657A90, + 0x00657A8F, 0xA0812802, 0x00000003, 0x00657A90, + // Block 247, offset 0x3dc0 + 0x00657A91, 0xA0812802, 0x00000004, 0x00657A90, 0x00657A91, 0xA0812802, + 0xA0812802, 0x00000002, 0x00657A8E, 0x0065868F, 0x00000002, 0x00657A8E, + 0x00658691, 0x00000003, 0x00657A8E, 0x00658691, 0xA0812802, 0x00000002, + 0x00657A8E, 0x0065908F, 0x00000002, 0x00657A8E, 0x00659091, 0x00000003, + 0x00657A8E, 0x00659091, 0xA0812802, 0x00000002, 0x00657A8E, 0x00659A8F, + 0x00000002, 0x00657A8E, 0x00659A91, 0x00000003, 0x00657A8E, 0x00659A91, + 0xA0812802, 0x00000002, 0x00657A8E, 0x0065A48F, 0x00000002, 0x00657A8E, + 0x0065A491, 0x00000002, 0x00657A8E, 0x0065AE8F, 0x00000002, 0x00657A8E, + 0x0065AE91, 0x00000003, 0x00657A8E, 0x0065AE91, 0xA0812802, 0x00000003, + 0x00657A8E, 0x0065AE91, 0xA0812902, 0x00000002, 0x00657A8E, 0x0065B88F, + 0x00000002, 0x00657A8E, 0x0065B891, 0x00000002, + // Block 248, offset 0x3e00 + 0x00657A8E, 0x0065C08F, 0x00000002, 0x00657A8E, 0x0065C091, 0x00000002, + 0x00657A8E, 0x0065CA8F, 0x00000002, 0x00657A8E, 0x0065CA91, 0x00000002, + 0x00657E8E, 0x00657E8F, 0x00000002, 0x00657E8E, 0x00657E91, 0x00000002, + 0x00657E90, 0x00657E8F, 0x00000002, 0x00657E90, 0x00657E91, 0x00000002, + 0x00657E8E, 0x0065888F, 0x00000002, 0x00657E8E, 0x00658891, 0x00000003, + 0x00657E8E, 0x00658891, 0xA0812802, 0x00000002, 0x00657E8E, 0x00659291, + 0x00000003, 0x00657E8E, 0x00659291, 0xA0812802, 0x00000002, 0x00657E8E, + 0x00659C91, 0x00000003, 0x00657E8E, 0x00659C91, 0xA0812802, 0x00000002, + 0x00657E8E, 0x0065A691, 0x00000002, 0x00657E8E, 0x0065B08F, 0x00000002, + 0x00657E8E, 0x0065B091, 0x00000003, 0x00657E8E, 0x0065B091, 0xA0812802, + 0x00000003, 0x00657E8E, 0x0065B091, 0xA0812902, + // Block 249, offset 0x3e40 + 0x00000002, 0x00657E8E, 0x0065BA91, 0x00000002, 0x00657E8E, 0x0065CC8F, + 0x00000002, 0x00657E8E, 0x0065CC91, 0x00000002, 0x00657E8E, 0x0065D491, + 0x00000003, 0x00657E8E, 0x0065D491, 0xA0812802, 0x00000002, 0x0065808E, + 0x0065808F, 0x00000002, 0x0065808E, 0x00658091, 0x00000002, 0x00658090, + 0x0065808F, 0x00000002, 0x00658090, 0x00658091, 0x00000002, 0x0065808E, + 0x00658A91, 0x00000003, 0x0065808E, 0x00658A91, 0xA0812802, 0x00000002, + 0x0065808E, 0x00659491, 0x00000003, 0x0065808E, 0x00659491, 0xA0812802, + 0x00000002, 0x0065808E, 0x00659E8F, 0x00000002, 0x0065808E, 0x00659E91, + 0x00000003, 0x0065808E, 0x00659E91, 0xA0812802, 0x00000002, 0x0065808E, + 0x0065A891, 0x00000002, 0x0065808E, 0x0065B28F, 0x00000002, 0x0065808E, + 0x0065B291, 0x00000003, 0x0065808E, 0x0065B291, + // Block 250, offset 0x3e80 + 0xA0812802, 0x00000003, 0x0065808E, 0x0065B291, 0xA0812902, 0x00000002, + 0x0065808E, 0x0065BC91, 0x00000002, 0x0065808E, 0x0065C48F, 0x00000002, + 0x0065808E, 0x0065C491, 0x00000002, 0x0065808E, 0x0065CE8F, 0x00000002, + 0x0065808E, 0x0065CE91, 0x00000002, 0x0065808E, 0x0065D691, 0x00000003, + 0x0065808E, 0x0065D691, 0xA0812802, 0x00000002, 0x00658290, 0x0065828F, + 0x00000002, 0x00658290, 0x00658291, 0x00000003, 0x0065848F, 0x00658291, + 0xA0812802, 0x00000002, 0x00658490, 0x00658491, 0x00000003, 0x00658490, + 0x00658491, 0xA0812802, 0x00000004, 0x00658490, 0x00658491, 0xA0812802, + 0xA0812802, 0x00000002, 0x00658690, 0x0065868F, 0x00000002, 0x00658690, + 0x00658691, 0x00000003, 0x00658690, 0x0065868F, 0xA0812802, 0x00000003, + 0x00658690, 0x00658691, 0xA0812802, 0x00000004, + // Block 251, offset 0x3ec0 + 0x00658690, 0x00658691, 0xA0812802, 0xA0812802, 0x00000002, 0x00658890, + 0x0065888F, 0x00000002, 0x00658890, 0x00658891, 0x00000003, 0x00658A8F, + 0x00658891, 0xA0812802, 0x00000002, 0x00658A90, 0x00658A91, 0x00000003, + 0x00658A90, 0x00658A91, 0xA0812802, 0x00000004, 0x00658A90, 0x00658A91, + 0xA0812802, 0xA0812802, 0x00000002, 0x40658A21, 0x00659E91, 0x00000002, + 0x00658C90, 0x00658C91, 0x00000003, 0x00658C90, 0x00658C91, 0xA0812802, + 0x00000004, 0x00658C90, 0x00658C91, 0xA0812802, 0xA0812802, 0x00000002, + 0x00658E90, 0x00658E8F, 0x00000002, 0x00658E90, 0x00658E91, 0x00000003, + 0x00658E90, 0x00658E8F, 0xA0812802, 0x00000003, 0x00658E90, 0x00658E91, + 0xA0812802, 0x00000004, 0x00658E90, 0x00658E91, 0xA0812802, 0xA0812802, + 0x00000002, 0x00659090, 0x0065908F, 0x00000002, + // Block 252, offset 0x3f00 + 0x00659090, 0x00659091, 0x00000003, 0x00659090, 0x0065908F, 0xA0812802, + 0x00000003, 0x00659090, 0x00659091, 0xA0812802, 0x00000004, 0x00659090, + 0x00659091, 0xA0812802, 0xA0812802, 0x00000002, 0x00659290, 0x00659291, + 0x00000003, 0x00659290, 0x00659291, 0xA0812802, 0x00000004, 0x00659290, + 0x00659291, 0xA0812802, 0xA0812802, 0x00000002, 0x00659490, 0x00659491, + 0x00000003, 0x00659490, 0x00659491, 0xA0812802, 0x00000004, 0x00659490, + 0x00659491, 0xA0812802, 0xA0812802, 0x00000002, 0x00659690, 0x00659691, + 0x00000003, 0x00659690, 0x00659691, 0xA0812802, 0x00000004, 0x00659690, + 0x00659691, 0xA0812802, 0xA0812802, 0x00000002, 0x00659890, 0x00659891, + 0x00000003, 0x00659890, 0x00659891, 0xA0812802, 0x00000004, 0x00659890, + 0x00659891, 0xA0812802, 0xA0812802, 0x00000002, + // Block 253, offset 0x3f40 + 0x00659A90, 0x00659A8F, 0x00000002, 0x00659A90, 0x00659A91, 0x00000003, + 0x00659A90, 0x00659A8F, 0xA0812802, 0x00000003, 0x00659A90, 0x00659A91, + 0xA0812802, 0x00000004, 0x00659A90, 0x00659A91, 0xA0812802, 0xA0812802, + 0x00000002, 0x00659C90, 0x00659C91, 0x00000003, 0x00659C90, 0x00659C91, + 0xA0812802, 0x00000004, 0x00659C90, 0x00659C91, 0xA0812802, 0xA0812802, + 0x00000002, 0x00659E90, 0x00659E8F, 0x00000002, 0x00659E90, 0x00659E91, + 0x00000003, 0x00659E90, 0x00659E8F, 0xA0812802, 0x00000003, 0x00659E90, + 0x00659E91, 0xA0812802, 0x00000004, 0x00659E90, 0x00659E91, 0xA0812802, + 0xA0812802, 0x00000002, 0x0065A090, 0x0065A091, 0x00000002, 0x0065A290, + 0x0065A291, 0x00000002, 0x0065A490, 0x0065A48F, 0x00000002, 0x0065A490, + 0x0065A491, 0x00000002, 0x0065A690, 0x0065A691, + // Block 254, offset 0x3f80 + 0x00000002, 0x0065A890, 0x0065A891, 0x00000002, 0x0065AA90, 0x0065AA8F, + 0x00000002, 0x0065AA90, 0x0065AA91, 0x00000003, 0x0065AA90, 0x0065AA8F, + 0xA0812802, 0x00000003, 0x0065AA90, 0x0065AA91, 0xA0812802, 0x00000004, + 0x0065AA90, 0x0065AA91, 0xA0812802, 0xA0812802, 0x00000003, 0x0065AA90, + 0x0065AA91, 0xA0812902, 0x00000004, 0x0065AA90, 0x0065AA91, 0xA0812902, + 0xA0812802, 0x00000002, 0x0065AC90, 0x0065AC8F, 0x00000002, 0x0065AC90, + 0x0065AC91, 0x00000003, 0x0065AC90, 0x0065AC8F, 0xA0812802, 0x00000003, + 0x0065AC90, 0x0065AC91, 0xA0812802, 0x00000004, 0x0065AC90, 0x0065AC91, + 0xA0812802, 0xA0812802, 0x00000003, 0x0065AC90, 0x0065AC91, 0xA0812902, + 0x00000004, 0x0065AC90, 0x0065AC91, 0xA0812902, 0xA0812802, 0x00000002, + 0x0065AE90, 0x0065AE8F, 0x00000002, 0x0065AE90, + // Block 255, offset 0x3fc0 + 0x0065AE91, 0x00000003, 0x0065AE90, 0x0065AE8F, 0xA0812802, 0x00000003, + 0x0065AE90, 0x0065AE91, 0xA0812802, 0x00000004, 0x0065AE90, 0x0065AE91, + 0xA0812802, 0xA0812802, 0x00000003, 0x0065AE90, 0x0065AE91, 0xA0812902, + 0x00000004, 0x0065AE90, 0x0065AE91, 0xA0812902, 0xA0812802, 0x00000002, + 0x0065B090, 0x0065B08F, 0x00000002, 0x0065B090, 0x0065B091, 0x00000003, + 0x0065B090, 0x0065B08F, 0xA0812802, 0x00000003, 0x0065B090, 0x0065B091, + 0xA0812802, 0x00000004, 0x0065B090, 0x0065B091, 0xA0812802, 0xA0812802, + 0x00000003, 0x0065B090, 0x0065B091, 0xA0812902, 0x00000004, 0x0065B090, + 0x0065B091, 0xA0812902, 0xA0812802, 0x00000002, 0x0065B290, 0x0065B28F, + 0x00000002, 0x0065B290, 0x0065B291, 0x00000003, 0x0065B290, 0x0065B28F, + 0xA0812802, 0x00000003, 0x0065B290, 0x0065B291, + // Block 256, offset 0x4000 + 0xA0812802, 0x00000004, 0x0065B290, 0x0065B291, 0xA0812802, 0xA0812802, + 0x00000003, 0x0065B290, 0x0065B291, 0xA0812902, 0x00000004, 0x0065B290, + 0x0065B291, 0xA0812902, 0xA0812802, 0x00000002, 0x0065B490, 0x0065B491, + 0x00000002, 0x0065B690, 0x0065B691, 0x00000002, 0x0065B890, 0x0065B88F, + 0x00000002, 0x0065B890, 0x0065B891, 0x00000002, 0x0065BA90, 0x0065BA91, + 0x00000002, 0x0065BC90, 0x0065BC91, 0x00000002, 0x0065BE90, 0x0065BE8F, + 0x00000002, 0x0065BE90, 0x0065BE91, 0x00000002, 0x0065C090, 0x0065C08F, + 0x00000002, 0x0065C090, 0x0065C091, 0x00000002, 0x0065C490, 0x0065C48F, + 0x00000002, 0x0065C490, 0x0065C491, 0x00000002, 0x4065C421, 0x0065C891, + 0x00000002, 0x0065C690, 0x0065C68F, 0x00000002, 0x0065C690, 0x0065C691, + 0x00000002, 0x0065C890, 0x0065C88F, 0x00000002, + // Block 257, offset 0x4040 + 0x0065C890, 0x0065C891, 0x00000002, 0x0065CA90, 0x0065CA8F, 0x00000002, + 0x0065CA90, 0x0065CA91, 0x00000002, 0x0065CC90, 0x0065CC8F, 0x00000002, + 0x0065CC90, 0x0065CC91, 0x00000002, 0x0065CE90, 0x0065CE8F, 0x00000002, + 0x0065CE90, 0x0065CE91, 0x00000002, 0x0065D090, 0x0065D08F, 0x00000002, + 0x0065D090, 0x0065D091, 0x00000003, 0x0065D090, 0x0065D08F, 0xA0812802, + 0x00000003, 0x0065D090, 0x0065D091, 0xA0812802, 0x00000004, 0x0065D090, + 0x0065D091, 0xA0812802, 0xA0812802, 0x00000002, 0x0065D290, 0x0065D291, + 0x00000003, 0x0065D290, 0x0065D291, 0xA0812802, 0x00000004, 0x0065D290, + 0x0065D291, 0xA0812802, 0xA0812802, 0x00000002, 0x0065D490, 0x0065D491, + 0x00000003, 0x0065D490, 0x0065D491, 0xA0812802, 0x00000004, 0x0065D490, + 0x0065D491, 0xA0812802, 0xA0812802, 0x00000002, + // Block 258, offset 0x4080 + 0x0065D690, 0x0065D691, 0x00000003, 0x0065D690, 0x0065D691, 0xA0812802, + 0x00000004, 0x0065D690, 0x0065D691, 0xA0812802, 0xA0812802, 0x00000002, + 0x0065D890, 0x0065D891, 0x00000002, 0x02B24E9C, 0x02D6C69C, 0x00000002, + 0x02BCE69C, 0x02C4209C, 0x00000002, 0x02CC1C9C, 0x02D9769C, 0x00000002, + 0x02CC5A9C, 0x02A9189C, 0x00000003, 0x00032683, 0x404FDA20, 0x40032620, + 0x00000003, 0x404FD821, 0x82092817, 0x404FA420, 0x00000003, 0x404FD821, + 0x82092817, 0x404FA620, 0x00000003, 0x404FD821, 0x82092817, 0x404FA820, + 0x00000003, 0x404FD821, 0x82092817, 0x404FAA20, 0x00000003, 0x404FD821, + 0x82092817, 0x404FAC20, 0x00000003, 0x404FD821, 0x82092817, 0x404FAE20, + 0x00000003, 0x404FD821, 0x82092817, 0x404FB020, 0x00000003, 0x404FD821, + 0x82092817, 0x404FB220, 0x00000003, 0x404FD821, + // Block 259, offset 0x40c0 + 0x82092817, 0x404FB420, 0x00000003, 0x404FD821, 0x82092817, 0x404FB620, + 0x00000003, 0x404FD821, 0x82092817, 0x404FB820, 0x00000003, 0x404FD821, + 0x82092817, 0x404FBA20, 0x00000003, 0x404FD821, 0x82092817, 0x404FBC20, + 0x00000003, 0x404FD821, 0x82092817, 0x404FBE20, 0x00000003, 0x404FD821, + 0x82092817, 0x404FC020, 0x00000003, 0x404FD821, 0x82092817, 0x404FC220, + 0x00000003, 0x404FD821, 0x82092817, 0x404FC420, 0x00000003, 0x404FD821, + 0x82092817, 0x404FC620, 0x00000003, 0x404FD821, 0x82092817, 0x404FC820, + 0x00000003, 0x404FD821, 0x82092817, 0x404FCA20, 0x00000003, 0x404FD821, + 0x82092817, 0x404FCC20, 0x00000003, 0x404FD821, 0x82092817, 0x404FCE20, + 0x00000003, 0x404FD821, 0x82092817, 0x404FD020, 0x00000003, 0x404FD821, + 0x82092817, 0x404FD220, 0x00000003, 0x404FD821, + // Block 260, offset 0x4100 + 0x82092817, 0x404FD420, 0x00000003, 0x404FD821, 0x82092817, 0x404FD620, + 0x00000003, 0x404FD821, 0x82092817, 0x404FD820, 0x00000003, 0x404FD821, + 0x82092817, 0x404FDA20, 0x00000003, 0x404FD821, 0x82092817, 0x404FDA20, + 0x00000003, 0x404FD821, 0x82092817, 0x404FDC20, 0x00000003, 0x404FD821, + 0x82092817, 0x404FDC20, 0x00000003, 0x404FD821, 0x82092817, 0x404FDC20, + 0x00000003, 0x404FD821, 0x82092817, 0x404FDE20, 0x00000003, 0x404FD821, + 0x82092817, 0x404FDE20, 0x00000003, 0x404FD821, 0x82092817, 0x404FE020, + 0x00000003, 0x404FD821, 0x82092817, 0x404FE220, 0x00000003, 0x404FD821, + 0x82092817, 0x404FE420, 0x00000003, 0x404FD821, 0x82092817, 0x404FE620, + 0x00000003, 0x404FD821, 0x82092817, 0x404FE820, 0x00000002, 0x404FE820, + 0x40500E20, 0x00000002, 0x404FE821, 0x40501020, + // Block 261, offset 0x4140 + 0x00000002, 0x404FE821, 0x40501220, 0x00000002, 0x404FE821, 0x40501820, + 0x00000003, 0x004FE8A3, 0x40501820, 0x404FA420, 0x00000002, 0x404FE821, + 0x40501A20, 0x00000003, 0x004FE8A3, 0x40501A20, 0x404FDC20, 0x00000002, + 0x404FE821, 0x40502620, 0x00000002, 0x404FE821, 0x40502820, 0x00000002, + 0x404FE821, 0x40502A20, 0x00000002, 0x004FE8A3, 0x40502A20, 0x00000002, + 0x404FE821, 0x40502C20, 0x00000002, 0x4062AC21, 0x4063A820, 0x00000002, + 0x4062AC22, 0x4063A820, 0x00000002, 0x4062AC23, 0x4063A820, 0x00000002, + 0x4062AC24, 0x4063A820, 0x00000002, 0x4062AC25, 0x4063A820, 0x00000002, + 0x4062AC26, 0x4063A820, 0x00000002, 0x4062AC27, 0x4063A820, 0x00000002, + 0x4062AC28, 0x4063A820, 0x00000002, 0x4062AC29, 0x4063A820, 0x00000002, + 0x4062AC2A, 0x4063A820, 0x00000002, 0x4062AC2B, + // Block 262, offset 0x4180 + 0x4063A820, 0x00000002, 0x4062AC2C, 0x4063A820, 0x00000002, 0x4062AC2D, + 0x4063A820, 0x00000002, 0x4062AC2E, 0x4063A820, 0x00000002, 0x4062AC2F, + 0x4063A820, 0x00000002, 0x4062AC30, 0x4063A820, 0x00000002, 0x4062AC31, + 0x4063A820, 0x00000002, 0x4062AC32, 0x4063A820, 0x00000002, 0x4062AC33, + 0x4063A820, 0x00000002, 0x4062AC34, 0x4063A820, 0x00000002, 0x4062AC35, + 0x4063A820, 0x00000002, 0x4062AC36, 0x4063A820, 0x00000002, 0x4062AC37, + 0x4063A820, 0x00000002, 0x4062AC38, 0x4063A820, 0x00000002, 0x4062AC39, + 0x4063A820, 0x00000002, 0x4062AC3A, 0x4063A820, 0x00000002, 0x4062AC3B, + 0x4063A820, 0x00000002, 0x4062AC3C, 0x4063A820, 0x00000002, 0x4062AC3D, + 0x4063A820, 0x00000002, 0x4062AC3E, 0x4063A820, 0x00000002, 0x4062AC3F, + 0x4063A820, 0x00000002, 0x4062AC40, 0x4063A820, + // Block 263, offset 0x41c0 + 0x00000002, 0x4062AC41, 0x4063A820, 0x00000002, 0x4062AC42, 0x4063A820, + 0x00000002, 0x4062AC43, 0x4063A820, 0x00000002, 0x4062AC44, 0x4063A820, + 0x00000002, 0x4062AC45, 0x4063A820, 0x00000002, 0x4062AC46, 0x4063A820, + 0x00000002, 0x4062AC47, 0x4063A820, 0x00000002, 0x4062AC48, 0x4063A820, + 0x00000002, 0x4062AC49, 0x4063A820, 0x00000002, 0x4062AC4A, 0x4063A820, + 0x00000002, 0x4062AC4B, 0x4063A820, 0x00000002, 0x4062AC4C, 0x4063A820, + 0x00000003, 0x4062AC21, 0x4063A820, 0x40646420, 0x00000003, 0x4062AC22, + 0x4063A820, 0x40646420, 0x00000003, 0x4062AC23, 0x4063A820, 0x40646420, + 0x00000003, 0x4062AC24, 0x4063A820, 0x40646420, 0x00000003, 0x4062AC25, + 0x4063A820, 0x40646420, 0x00000003, 0x4062AC26, 0x4063A820, 0x40646420, + 0x00000003, 0x4062AC27, 0x4063A820, 0x40646420, + // Block 264, offset 0x4200 + 0x00000003, 0x4062AC28, 0x4063A820, 0x40646420, 0x00000003, 0x4062AC29, + 0x4063A820, 0x40646420, 0x00000003, 0x4062AC2A, 0x4063A820, 0x40646420, + 0x00000003, 0x4062AC2B, 0x4063A820, 0x40646420, 0x00000003, 0x4062AC2C, + 0x4063A820, 0x40646420, 0x00000003, 0x4062AC2D, 0x4063A820, 0x40646420, + 0x00000003, 0x4062AC2E, 0x4063A820, 0x40646420, 0x00000003, 0x4062AC2F, + 0x4063A820, 0x40646420, 0x00000003, 0x4062AC30, 0x4063A820, 0x40646420, + 0x00000003, 0x4062AC31, 0x4063A820, 0x40646420, 0x00000003, 0x4062AC21, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC22, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC23, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC24, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC25, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC26, 0x4063A820, 0x40646A20, + // Block 265, offset 0x4240 + 0x00000003, 0x4062AC27, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC28, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC29, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC2A, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC2B, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC2C, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC2D, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC2E, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC2F, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC30, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC31, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC32, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC33, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC34, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC35, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC36, 0x4063A820, 0x40646A20, + // Block 266, offset 0x4280 + 0x00000003, 0x4062AC37, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC38, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC39, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC3A, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC3B, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC3C, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC3D, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC3E, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC3F, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC40, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC41, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC42, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062AC43, 0x4063A820, 0x40646A20, 0x00000003, 0x4062AC21, + 0x4063A820, 0x40647220, 0x00000003, 0x4062AC22, 0x4063A820, 0x40647220, + 0x00000003, 0x4062AC23, 0x4063A820, 0x40647220, + // Block 267, offset 0x42c0 + 0x00000003, 0x4062AC24, 0x4063A820, 0x40647220, 0x00000003, 0x4062AC25, + 0x4063A820, 0x40647220, 0x00000003, 0x4062AC26, 0x4063A820, 0x40647220, + 0x00000003, 0x4062AC27, 0x4063A820, 0x40647220, 0x00000003, 0x4062AC28, + 0x4063A820, 0x40647220, 0x00000003, 0x4062AC29, 0x4063A820, 0x40647220, + 0x00000003, 0x4062AC2A, 0x4063A820, 0x40647220, 0x00000003, 0x4062AC2B, + 0x4063A820, 0x40647220, 0x00000003, 0x4062AC2C, 0x4063A820, 0x40647220, + 0x00000003, 0x4062AC2D, 0x4063A820, 0x40647220, 0x00000003, 0x4062AC2E, + 0x4063A820, 0x40647220, 0x00000003, 0x4062AC2F, 0x4063A820, 0x40647220, + 0x00000003, 0x4062AC30, 0x4063A820, 0x40647220, 0x00000003, 0x4062AC21, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC22, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC23, 0x4063A820, 0x40648220, + // Block 268, offset 0x4300 + 0x00000003, 0x4062AC24, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC25, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC26, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC27, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC28, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC29, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC2A, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC2B, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC2C, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC2D, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC2E, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC2F, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC30, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC31, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC32, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC33, 0x4063A820, 0x40648220, + // Block 269, offset 0x4340 + 0x00000003, 0x4062AC34, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC35, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC36, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC37, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC38, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC39, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC3A, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC3B, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC3C, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC3D, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC3E, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC3F, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC40, 0x4063A820, 0x40648220, 0x00000003, 0x4062AC41, + 0x4063A820, 0x40648220, 0x00000003, 0x4062AC42, 0x4063A820, 0x40648220, + 0x00000003, 0x4062AC43, 0x4063A820, 0x40648220, + // Block 270, offset 0x4380 + 0x00000003, 0x4062AC21, 0x4063A820, 0x40648420, 0x00000003, 0x4062AC22, + 0x4063A820, 0x40648420, 0x00000003, 0x4062AC23, 0x4063A820, 0x40648420, + 0x00000003, 0x4062AC24, 0x4063A820, 0x40648420, 0x00000003, 0x4062AC25, + 0x4063A820, 0x40648420, 0x00000003, 0x4062AC26, 0x4063A820, 0x40648420, + 0x00000003, 0x4062AC27, 0x4063A820, 0x40648420, 0x00000003, 0x4062AC21, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC22, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC23, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC24, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC25, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC26, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC27, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC28, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC29, 0x4063A820, 0x40648C20, + // Block 271, offset 0x43c0 + 0x00000003, 0x4062AC2A, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC2B, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC2C, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC2D, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC2E, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC2F, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC30, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC31, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC32, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC33, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC34, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC35, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC36, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC37, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC38, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC39, 0x4063A820, 0x40648C20, + // Block 272, offset 0x4400 + 0x00000003, 0x4062AC3A, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC3B, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC3C, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC3D, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC3E, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC3F, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC40, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC41, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC42, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC43, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC44, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC45, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC46, 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC47, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062AC48, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062AC49, 0x4063A820, 0x40648C20, + // Block 273, offset 0x4440 + 0x00000002, 0x4062AC21, 0x4063AA20, 0x00000002, 0x4062AC22, 0x4063AA20, + 0x00000002, 0x4062AC23, 0x4063AA20, 0x00000002, 0x4062AC24, 0x4063AA20, + 0x00000002, 0x4062AC25, 0x4063AA20, 0x00000002, 0x4062AC26, 0x4063AA20, + 0x00000002, 0x4062AC27, 0x4063AA20, 0x00000002, 0x4062AC28, 0x4063AA20, + 0x00000002, 0x4062AC29, 0x4063AA20, 0x00000002, 0x4062AC2A, 0x4063AA20, + 0x00000002, 0x4062AC2B, 0x4063AA20, 0x00000002, 0x4062AC2C, 0x4063AA20, + 0x00000002, 0x4062AC2D, 0x4063AA20, 0x00000002, 0x4062AC2E, 0x4063AA20, + 0x00000002, 0x4062AC2F, 0x4063AA20, 0x00000002, 0x4062AC30, 0x4063AA20, + 0x00000002, 0x4062AC31, 0x4063AA20, 0x00000002, 0x4062AC32, 0x4063AA20, + 0x00000002, 0x4062AC33, 0x4063AA20, 0x00000002, 0x4062AC34, 0x4063AA20, + 0x00000002, 0x4062AC35, 0x4063AA20, 0x00000002, + // Block 274, offset 0x4480 + 0x4062AC36, 0x4063AA20, 0x00000002, 0x4062AC37, 0x4063AA20, 0x00000002, + 0x4062AC38, 0x4063AA20, 0x00000002, 0x4062AC39, 0x4063AA20, 0x00000002, + 0x4062AC3A, 0x4063AA20, 0x00000003, 0x4062AC21, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062AC22, 0x4063AA20, 0x40646420, 0x00000003, 0x4062AC21, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062AC22, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062AC23, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062AC24, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062AC25, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062AC26, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062AC21, + 0x4063AC20, 0x40646420, 0x00000002, 0x4062AC21, 0x4063B020, 0x00000002, + 0x4062AC22, 0x4063B020, 0x00000002, 0x4062AC23, 0x4063B020, 0x00000002, + 0x4062AC24, 0x4063B020, 0x00000002, 0x4062AC25, + // Block 275, offset 0x44c0 + 0x4063B020, 0x00000002, 0x4062AC26, 0x4063B020, 0x00000002, 0x4062AC27, + 0x4063B020, 0x00000002, 0x4062AC28, 0x4063B020, 0x00000002, 0x4062AC29, + 0x4063B020, 0x00000002, 0x4062AC2A, 0x4063B020, 0x00000002, 0x4062AC2B, + 0x4063B020, 0x00000002, 0x4062AC2C, 0x4063B020, 0x00000002, 0x4062AC2D, + 0x4063B020, 0x00000002, 0x4062AC2E, 0x4063B020, 0x00000002, 0x4062AC2F, + 0x4063B020, 0x00000002, 0x4062AC30, 0x4063B020, 0x00000002, 0x4062AC31, + 0x4063B020, 0x00000002, 0x4062AC32, 0x4063B020, 0x00000002, 0x4062AC33, + 0x4063B020, 0x00000002, 0x4062AC34, 0x4063B020, 0x00000002, 0x4062AC35, + 0x4063B020, 0x00000002, 0x4062AC36, 0x4063B020, 0x00000002, 0x4062AC37, + 0x4063B020, 0x00000002, 0x4062AC38, 0x4063B020, 0x00000002, 0x4062AC39, + 0x4063B020, 0x00000002, 0x4062AC3A, 0x4063B020, + // Block 276, offset 0x4500 + 0x00000002, 0x4062AC3B, 0x4063B020, 0x00000002, 0x4062AC3C, 0x4063B020, + 0x00000002, 0x4062AC3D, 0x4063B020, 0x00000002, 0x4062AC3E, 0x4063B020, + 0x00000003, 0x4062AC21, 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC22, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC23, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062AC24, 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC25, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC26, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062AC27, 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC28, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC29, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062AC2A, 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC2B, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC2C, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062AC2D, 0x4063B020, 0x40646A20, + // Block 277, offset 0x4540 + 0x00000003, 0x4062AC2E, 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC2F, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC30, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062AC31, 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC32, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062AC21, 0x4063B020, 0x40647220, + 0x00000003, 0x4062AC22, 0x4063B020, 0x40647220, 0x00000003, 0x4062AC23, + 0x4063B020, 0x40647220, 0x00000003, 0x4062AC24, 0x4063B020, 0x40647220, + 0x00000003, 0x4062AC25, 0x4063B020, 0x40647220, 0x00000003, 0x4062AC26, + 0x4063B020, 0x40647220, 0x00000003, 0x4062AC27, 0x4063B020, 0x40647220, + 0x00000003, 0x4062AC21, 0x4063B020, 0x40648220, 0x00000003, 0x4062AC22, + 0x4063B020, 0x40648220, 0x00000003, 0x4062AC23, 0x4063B020, 0x40648220, + 0x00000003, 0x4062AC24, 0x4063B020, 0x40648220, + // Block 278, offset 0x4580 + 0x00000003, 0x4062AC25, 0x4063B020, 0x40648220, 0x00000003, 0x4062AC26, + 0x4063B020, 0x40648220, 0x00000003, 0x4062AC27, 0x4063B020, 0x40648220, + 0x00000003, 0x4062AC28, 0x4063B020, 0x40648220, 0x00000003, 0x4062AC29, + 0x4063B020, 0x40648220, 0x00000003, 0x4062AC21, 0x4063B020, 0x40648420, + 0x00000003, 0x4062AC22, 0x4063B020, 0x40648420, 0x00000003, 0x4062AC23, + 0x4063B020, 0x40648420, 0x00000003, 0x4062AC24, 0x4063B020, 0x40648420, + 0x00000003, 0x4062AC25, 0x4063B020, 0x40648420, 0x00000002, 0x4062AC21, + 0x4063B220, 0x00000002, 0x4062AC22, 0x4063B220, 0x00000002, 0x4062AC23, + 0x4063B220, 0x00000003, 0x4062AC21, 0x4063B420, 0x40646420, 0x00000003, + 0x4062AC22, 0x4063B420, 0x40646420, 0x00000003, 0x4062AC23, 0x4063B420, + 0x40646420, 0x00000003, 0x4062AC24, 0x4063B420, + // Block 279, offset 0x45c0 + 0x40646420, 0x00000003, 0x4062AC25, 0x4063B420, 0x40646420, 0x00000003, + 0x4062AC26, 0x4063B420, 0x40646420, 0x00000003, 0x4062AC27, 0x4063B420, + 0x40646420, 0x00000003, 0x4062AC28, 0x4063B420, 0x40646420, 0x00000003, + 0x4062AC29, 0x4063B420, 0x40646420, 0x00000003, 0x4062AC2A, 0x4063B420, + 0x40646420, 0x00000003, 0x4062AC2B, 0x4063B420, 0x40646420, 0x00000003, + 0x4062AC2C, 0x4063B420, 0x40646420, 0x00000003, 0x4062AC2D, 0x4063B420, + 0x40646420, 0x00000003, 0x4062AC21, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062AC22, 0x4063B420, 0x40646A20, 0x00000003, 0x4062AC23, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062AC24, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062AC25, 0x4063B420, 0x40646A20, 0x00000003, 0x4062AC26, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062AC27, 0x4063B420, + // Block 280, offset 0x4600 + 0x40646A20, 0x00000003, 0x4062AC28, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062AC29, 0x4063B420, 0x40646A20, 0x00000003, 0x4062AC2A, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062AC2B, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062AC2C, 0x4063B420, 0x40646A20, 0x00000003, 0x4062AC2D, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062AC2E, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062AC2F, 0x4063B420, 0x40646A20, 0x00000003, 0x4062AC30, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062AC31, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062AC32, 0x4063B420, 0x40646A20, 0x00000003, 0x4062AC33, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062AC34, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062AC21, 0x4063B420, 0x40647220, 0x00000003, 0x4062AC22, 0x4063B420, + 0x40647220, 0x00000003, 0x4062AC23, 0x4063B420, + // Block 281, offset 0x4640 + 0x40647220, 0x00000003, 0x4062AC24, 0x4063B420, 0x40647220, 0x00000003, + 0x4062AC25, 0x4063B420, 0x40647220, 0x00000003, 0x4062AC26, 0x4063B420, + 0x40647220, 0x00000003, 0x4062AC27, 0x4063B420, 0x40647220, 0x00000003, + 0x4062AC28, 0x4063B420, 0x40647220, 0x00000003, 0x4062AC29, 0x4063B420, + 0x40647220, 0x00000003, 0x4062AC21, 0x4063B420, 0x40648220, 0x00000003, + 0x4062AC22, 0x4063B420, 0x40648220, 0x00000003, 0x4062AC23, 0x4063B420, + 0x40648220, 0x00000003, 0x4062AC24, 0x4063B420, 0x40648220, 0x00000003, + 0x4062AC25, 0x4063B420, 0x40648220, 0x00000003, 0x4062AC26, 0x4063B420, + 0x40648220, 0x00000003, 0x4062AC27, 0x4063B420, 0x40648220, 0x00000003, + 0x4062AC28, 0x4063B420, 0x40648220, 0x00000003, 0x4062AC29, 0x4063B420, + 0x40648220, 0x00000003, 0x4062AC2A, 0x4063B420, + // Block 282, offset 0x4680 + 0x40648220, 0x00000003, 0x4062AC2B, 0x4063B420, 0x40648220, 0x00000003, + 0x4062AC2C, 0x4063B420, 0x40648220, 0x00000003, 0x4062AC2D, 0x4063B420, + 0x40648220, 0x00000003, 0x4062AC2E, 0x4063B420, 0x40648220, 0x00000003, + 0x4062AC2F, 0x4063B420, 0x40648220, 0x00000003, 0x4062AC21, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC22, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC23, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC24, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC25, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC26, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC27, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC28, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC29, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC2A, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC2B, 0x4063B420, + // Block 283, offset 0x46c0 + 0x40648C20, 0x00000003, 0x4062AC2C, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC2D, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC2E, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC2F, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC30, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC31, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC32, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC33, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC34, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC35, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC36, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC37, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC38, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC39, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC3A, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC3B, 0x4063B420, + // Block 284, offset 0x4700 + 0x40648C20, 0x00000003, 0x4062AC3C, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC3D, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC3E, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC3F, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC40, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC41, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC42, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC43, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC44, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC45, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC46, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC47, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC48, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC49, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC4A, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC4B, 0x4063B420, + // Block 285, offset 0x4740 + 0x40648C20, 0x00000003, 0x4062AC4C, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC4D, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC4E, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC4F, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC50, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC51, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC52, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC53, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC54, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC55, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC56, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC57, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC58, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC59, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC5A, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC5B, 0x4063B420, + // Block 286, offset 0x4780 + 0x40648C20, 0x00000003, 0x4062AC5C, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC5D, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC5E, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062AC5F, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062AC60, 0x4063B420, 0x40648C20, 0x00000003, 0x4062AC61, 0x4063B420, + 0x40648C20, 0x00000002, 0x4062AC21, 0x4063B620, 0x00000002, 0x4062AC22, + 0x4063B620, 0x00000002, 0x4062AC23, 0x4063B620, 0x00000002, 0x4062AC24, + 0x4063B620, 0x00000002, 0x4062AC25, 0x4063B620, 0x00000002, 0x4062AC26, + 0x4063B620, 0x00000002, 0x4062AC27, 0x4063B620, 0x00000002, 0x4062AC28, + 0x4063B620, 0x00000002, 0x4062AC29, 0x4063B620, 0x00000002, 0x4062AC2A, + 0x4063B620, 0x00000002, 0x4062AC2B, 0x4063B620, 0x00000002, 0x4062AC2C, + 0x4063B620, 0x00000002, 0x4062AC2D, 0x4063B620, + // Block 287, offset 0x47c0 + 0x00000002, 0x4062AC2E, 0x4063B620, 0x00000002, 0x4062AC2F, 0x4063B620, + 0x00000002, 0x4062AC30, 0x4063B620, 0x00000002, 0x4062AC31, 0x4063B620, + 0x00000002, 0x4062AC32, 0x4063B620, 0x00000002, 0x4062AC33, 0x4063B620, + 0x00000002, 0x4062AC34, 0x4063B620, 0x00000002, 0x4062AC35, 0x4063B620, + 0x00000002, 0x4062AC36, 0x4063B620, 0x00000002, 0x4062AC37, 0x4063B620, + 0x00000002, 0x4062AC38, 0x4063B620, 0x00000002, 0x4062AC39, 0x4063B620, + 0x00000002, 0x4062AC3A, 0x4063B620, 0x00000002, 0x4062AC3B, 0x4063B620, + 0x00000002, 0x4062AC3C, 0x4063B620, 0x00000002, 0x4062AC3D, 0x4063B620, + 0x00000002, 0x4062AC3E, 0x4063B620, 0x00000002, 0x4062AC3F, 0x4063B620, + 0x00000002, 0x4062AC40, 0x4063B620, 0x00000002, 0x4062AC41, 0x4063B620, + 0x00000002, 0x4062AC42, 0x4063B620, 0x00000002, + // Block 288, offset 0x4800 + 0x4062AC43, 0x4063B620, 0x00000002, 0x4062AC44, 0x4063B620, 0x00000002, + 0x4062AC21, 0x4063B820, 0x00000002, 0x4062AC22, 0x4063B820, 0x00000002, + 0x4062AC23, 0x4063B820, 0x00000002, 0x4062AC24, 0x4063B820, 0x00000002, + 0x4062AC25, 0x4063B820, 0x00000002, 0x4062AC26, 0x4063B820, 0x00000002, + 0x4062AC27, 0x4063B820, 0x00000002, 0x4062AC28, 0x4063B820, 0x00000002, + 0x4062AC29, 0x4063B820, 0x00000002, 0x4062AC2A, 0x4063B820, 0x00000002, + 0x4062AC2B, 0x4063B820, 0x00000002, 0x4062AC2C, 0x4063B820, 0x00000002, + 0x4062AC2D, 0x4063B820, 0x00000002, 0x4062AC2E, 0x4063B820, 0x00000002, + 0x4062AC2F, 0x4063B820, 0x00000002, 0x4062AC30, 0x4063B820, 0x00000002, + 0x4062AC31, 0x4063B820, 0x00000002, 0x4062AC32, 0x4063B820, 0x00000002, + 0x4062AC33, 0x4063B820, 0x00000002, 0x4062AC34, + // Block 289, offset 0x4840 + 0x4063B820, 0x00000002, 0x4062AC35, 0x4063B820, 0x00000002, 0x4062AC36, + 0x4063B820, 0x00000002, 0x4062AC37, 0x4063B820, 0x00000002, 0x4062AC38, + 0x4063B820, 0x00000002, 0x4062AC39, 0x4063B820, 0x00000002, 0x4062AC3A, + 0x4063B820, 0x00000002, 0x4062AC3B, 0x4063B820, 0x00000002, 0x4062AC3C, + 0x4063B820, 0x00000002, 0x4062AC3D, 0x4063B820, 0x00000002, 0x4062AC3E, + 0x4063B820, 0x00000002, 0x4062AC3F, 0x4063B820, 0x00000002, 0x4062AC40, + 0x4063B820, 0x00000002, 0x4062AC41, 0x4063B820, 0x00000002, 0x4062AC42, + 0x4063B820, 0x00000002, 0x4062AC43, 0x4063B820, 0x00000002, 0x4062AC44, + 0x4063B820, 0x00000002, 0x4062AC45, 0x4063B820, 0x00000002, 0x4062AC46, + 0x4063B820, 0x00000002, 0x4062AC47, 0x4063B820, 0x00000002, 0x4062AC48, + 0x4063B820, 0x00000002, 0x4062AC49, 0x4063B820, + // Block 290, offset 0x4880 + 0x00000002, 0x4062AC4A, 0x4063B820, 0x00000002, 0x4062AC4B, 0x4063B820, + 0x00000002, 0x4062AC4C, 0x4063B820, 0x00000002, 0x4062AC4D, 0x4063B820, + 0x00000002, 0x4062AC4E, 0x4063B820, 0x00000002, 0x4062AC4F, 0x4063B820, + 0x00000002, 0x4062AC50, 0x4063B820, 0x00000002, 0x4062AC51, 0x4063B820, + 0x00000002, 0x4062AC52, 0x4063B820, 0x00000002, 0x4062AC53, 0x4063B820, + 0x00000002, 0x4062AC54, 0x4063B820, 0x00000002, 0x4062AC55, 0x4063B820, + 0x00000002, 0x4062AC56, 0x4063B820, 0x00000002, 0x4062AC57, 0x4063B820, + 0x00000002, 0x4062AC58, 0x4063B820, 0x00000002, 0x4062AC59, 0x4063B820, + 0x00000002, 0x4062AC5A, 0x4063B820, 0x00000002, 0x4062AC5B, 0x4063B820, + 0x00000002, 0x4062AC5C, 0x4063B820, 0x00000002, 0x4062AC5D, 0x4063B820, + 0x00000002, 0x4062AC5E, 0x4063B820, 0x00000002, + // Block 291, offset 0x48c0 + 0x4062AC5F, 0x4063B820, 0x00000002, 0x4062AC60, 0x4063B820, 0x00000002, + 0x4062AC61, 0x4063B820, 0x00000002, 0x4062AC62, 0x4063B820, 0x00000002, + 0x4062AC63, 0x4063B820, 0x00000003, 0x4062AC21, 0x4063B820, 0x40646420, + 0x00000003, 0x4062AC22, 0x4063B820, 0x40646420, 0x00000003, 0x4062AC23, + 0x4063B820, 0x40646420, 0x00000003, 0x4062AC24, 0x4063B820, 0x40646420, + 0x00000003, 0x4062AC25, 0x4063B820, 0x40646420, 0x00000003, 0x4062AC26, + 0x4063B820, 0x40646420, 0x00000003, 0x4062AC27, 0x4063B820, 0x40646420, + 0x00000003, 0x4062AC28, 0x4063B820, 0x40646420, 0x00000003, 0x4062AC29, + 0x4063B820, 0x40646420, 0x00000003, 0x4062AC2A, 0x4063B820, 0x40646420, + 0x00000003, 0x4062AC2B, 0x4063B820, 0x40646420, 0x00000003, 0x4062AC2C, + 0x4063B820, 0x40646420, 0x00000003, 0x4062AC21, + // Block 292, offset 0x4900 + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC22, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062AC23, 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC24, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC25, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062AC26, 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC27, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC28, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062AC29, 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC2A, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC2B, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062AC2C, 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC2D, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC2E, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062AC2F, 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC30, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC31, + // Block 293, offset 0x4940 + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC32, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062AC33, 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC34, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC35, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062AC36, 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC37, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062AC38, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062AC21, 0x4063B820, 0x40647220, 0x00000003, 0x4062AC22, + 0x4063B820, 0x40647220, 0x00000003, 0x4062AC23, 0x4063B820, 0x40647220, + 0x00000003, 0x4062AC24, 0x4063B820, 0x40647220, 0x00000003, 0x4062AC25, + 0x4063B820, 0x40647220, 0x00000003, 0x4062AC26, 0x4063B820, 0x40647220, + 0x00000003, 0x4062AC21, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC22, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC23, + // Block 294, offset 0x4980 + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC24, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062AC25, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC26, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC27, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062AC28, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC29, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC2A, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062AC2B, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC2C, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC2D, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062AC2E, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC2F, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC30, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062AC31, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC32, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC33, + // Block 295, offset 0x49c0 + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC34, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062AC35, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC36, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC37, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062AC38, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC39, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC3A, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062AC3B, 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC3C, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062AC21, 0x4063B820, 0x40648E20, + 0x00000002, 0x4062AC21, 0x4063BA20, 0x00000002, 0x4062AC22, 0x4063BA20, + 0x00000002, 0x4062AC23, 0x4063BA20, 0x00000002, 0x4062AC24, 0x4063BA20, + 0x00000002, 0x4062AC25, 0x4063BA20, 0x00000002, 0x4062AC26, 0x4063BA20, + 0x00000002, 0x4062AC27, 0x4063BA20, 0x00000002, + // Block 296, offset 0x4a00 + 0x4062AC28, 0x4063BA20, 0x00000002, 0x4062AC29, 0x4063BA20, 0x00000002, + 0x4062AC2A, 0x4063BA20, 0x00000002, 0x4062AC2B, 0x4063BA20, 0x00000002, + 0x4062AC2C, 0x4063BA20, 0x00000002, 0x4062AC2D, 0x4063BA20, 0x00000002, + 0x4062AC2E, 0x4063BA20, 0x00000002, 0x4062AC2F, 0x4063BA20, 0x00000002, + 0x4062AC30, 0x4063BA20, 0x00000002, 0x4062AC31, 0x4063BA20, 0x00000002, + 0x4062AC32, 0x4063BA20, 0x00000002, 0x4062AC33, 0x4063BA20, 0x00000002, + 0x4062AC34, 0x4063BA20, 0x00000002, 0x4062AC35, 0x4063BA20, 0x00000002, + 0x4062AC36, 0x4063BA20, 0x00000002, 0x4062AC37, 0x4063BA20, 0x00000002, + 0x4062AC38, 0x4063BA20, 0x00000002, 0x4062AC39, 0x4063BA20, 0x00000003, + 0x4062AC21, 0x4063BA20, 0x40646420, 0x00000003, 0x4062AC22, 0x4063BA20, + 0x40646420, 0x00000003, 0x4062AC23, 0x4063BA20, + // Block 297, offset 0x4a40 + 0x40646420, 0x00000003, 0x4062AC24, 0x4063BA20, 0x40646420, 0x00000003, + 0x4062AC25, 0x4063BA20, 0x40646420, 0x00000003, 0x4062AC26, 0x4063BA20, + 0x40646420, 0x00000003, 0x4062AC27, 0x4063BA20, 0x40646420, 0x00000003, + 0x4062AC28, 0x4063BA20, 0x40646420, 0x00000003, 0x4062AC29, 0x4063BA20, + 0x40646420, 0x00000003, 0x4062AC21, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC22, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC23, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC24, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC25, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC26, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC27, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC28, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC29, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC2A, 0x4063BA20, + // Block 298, offset 0x4a80 + 0x40646A20, 0x00000003, 0x4062AC2B, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC2C, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC2D, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC2E, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC2F, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC30, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC31, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC32, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC33, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC34, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC35, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC36, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC37, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC38, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC39, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC3A, 0x4063BA20, + // Block 299, offset 0x4ac0 + 0x40646A20, 0x00000003, 0x4062AC3B, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC3C, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC3D, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062AC3E, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062AC3F, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062AC21, 0x4063BA20, + 0x40647220, 0x00000003, 0x4062AC22, 0x4063BA20, 0x40647220, 0x00000003, + 0x4062AC23, 0x4063BA20, 0x40647220, 0x00000003, 0x4062AC24, 0x4063BA20, + 0x40647220, 0x00000003, 0x4062AC25, 0x4063BA20, 0x40647220, 0x00000003, + 0x4062AC26, 0x4063BA20, 0x40647220, 0x00000003, 0x4062AC27, 0x4063BA20, + 0x40647220, 0x00000003, 0x4062AC28, 0x4063BA20, 0x40647220, 0x00000003, + 0x4062AC29, 0x4063BA20, 0x40647220, 0x00000003, 0x4062AC2A, 0x4063BA20, + 0x40647220, 0x00000003, 0x4062AC21, 0x4063BA20, + // Block 300, offset 0x4b00 + 0x40648C20, 0x00000003, 0x4062AC22, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062AC23, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062AC24, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062AC25, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062AC26, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062AC27, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062AC28, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062AC29, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062AC2A, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062AC2B, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062AC2C, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062AC2D, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062AC2E, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062AC2F, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062AC30, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062AC31, 0x4063BA20, + // Block 301, offset 0x4b40 + 0x40648C20, 0x00000003, 0x4062AC32, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062AC33, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062AC34, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062AC35, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062AC36, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062AC37, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062AC38, 0x4063BA20, 0x40648C20, 0x00000002, + 0x4062AC21, 0x4063BC20, 0x00000002, 0x4062AC22, 0x4063BC20, 0x00000002, + 0x4062AC23, 0x4063BC20, 0x00000002, 0x4062AC24, 0x4063BC20, 0x00000002, + 0x4062AC25, 0x4063BC20, 0x00000002, 0x4062AC26, 0x4063BC20, 0x00000002, + 0x4062AC27, 0x4063BC20, 0x00000002, 0x4062AC21, 0x4063BE20, 0x00000002, + 0x4062AC22, 0x4063BE20, 0x00000002, 0x4062AC23, 0x4063BE20, 0x00000002, + 0x4062AC24, 0x4063BE20, 0x00000002, 0x4062AC25, + // Block 302, offset 0x4b80 + 0x4063BE20, 0x00000002, 0x4062AC26, 0x4063BE20, 0x00000002, 0x4062AC27, + 0x4063BE20, 0x00000002, 0x4062AC28, 0x4063BE20, 0x00000002, 0x4062AC29, + 0x4063BE20, 0x00000002, 0x4062AC2A, 0x4063BE20, 0x00000002, 0x4062AC2B, + 0x4063BE20, 0x00000002, 0x4062AC2C, 0x4063BE20, 0x00000002, 0x4062AC2D, + 0x4063BE20, 0x00000002, 0x4062AC2E, 0x4063BE20, 0x00000002, 0x4062AC2F, + 0x4063BE20, 0x00000002, 0x4062AC30, 0x4063BE20, 0x00000003, 0x4062AC21, + 0x4063BE20, 0x40646420, 0x00000003, 0x4062AC21, 0x4063BE20, 0x40648C20, + 0x00000003, 0x4062AC22, 0x4063BE20, 0x40648C20, 0x00000003, 0x4062AC23, + 0x4063BE20, 0x40648C20, 0x00000003, 0x4062AC24, 0x4063BE20, 0x40648C20, + 0x00000003, 0x4062AC25, 0x4063BE20, 0x40648C20, 0x00000003, 0x4062AC26, + 0x4063BE20, 0x40648C20, 0x00000003, 0x4062AC27, + // Block 303, offset 0x4bc0 + 0x4063BE20, 0x40648C20, 0x00000003, 0x4062AC28, 0x4063BE20, 0x40648C20, + 0x00000002, 0x4062AC21, 0x4063C020, 0x00000002, 0x4062AC22, 0x4063C020, + 0x00000002, 0x4062AC23, 0x4063C020, 0x00000002, 0x4062AC24, 0x4063C020, + 0x00000002, 0x4062AC25, 0x4063C020, 0x00000002, 0x4062AC26, 0x4063C020, + 0x00000002, 0x4062AC27, 0x4063C020, 0x00000002, 0x4062AC28, 0x4063C020, + 0x00000002, 0x4062AC29, 0x4063C020, 0x00000002, 0x4062AC2A, 0x4063C020, + 0x00000002, 0x4062AC2B, 0x4063C020, 0x00000002, 0x4062AC2C, 0x4063C020, + 0x00000002, 0x4062AC2D, 0x4063C020, 0x00000002, 0x4062AC2E, 0x4063C020, + 0x00000002, 0x4062AC2F, 0x4063C020, 0x00000002, 0x4062AC30, 0x4063C020, + 0x00000002, 0x4062AC31, 0x4063C020, 0x00000002, 0x4062AC32, 0x4063C020, + 0x00000002, 0x4062AC33, 0x4063C020, 0x00000002, + // Block 304, offset 0x4c00 + 0x4062AC34, 0x4063C020, 0x00000002, 0x4062AC35, 0x4063C020, 0x00000002, + 0x4062AC36, 0x4063C020, 0x00000002, 0x4062AC37, 0x4063C020, 0x00000002, + 0x4062AC38, 0x4063C020, 0x00000002, 0x4062AC39, 0x4063C020, 0x00000002, + 0x4062AC3A, 0x4063C020, 0x00000002, 0x4062AC3B, 0x4063C020, 0x00000002, + 0x4062AC3C, 0x4063C020, 0x00000002, 0x4062AC3D, 0x4063C020, 0x00000002, + 0x4062AC3E, 0x4063C020, 0x00000002, 0x4062AC3F, 0x4063C020, 0x00000002, + 0x4062AC40, 0x4063C020, 0x00000002, 0x4062AC41, 0x4063C020, 0x00000002, + 0x4062AC42, 0x4063C020, 0x00000002, 0x4062AC43, 0x4063C020, 0x00000002, + 0x4062AC44, 0x4063C020, 0x00000002, 0x4062AC45, 0x4063C020, 0x00000002, + 0x4062AC46, 0x4063C020, 0x00000002, 0x4062AC47, 0x4063C020, 0x00000002, + 0x4062AC48, 0x4063C020, 0x00000002, 0x4062AC49, + // Block 305, offset 0x4c40 + 0x4063C020, 0x00000002, 0x4062AC4A, 0x4063C020, 0x00000002, 0x4062AC4B, + 0x4063C020, 0x00000002, 0x4062AC4C, 0x4063C020, 0x00000002, 0x4062AC21, + 0x4063C220, 0x00000002, 0x4062AC22, 0x4063C220, 0x00000002, 0x4062AC23, + 0x4063C220, 0x00000002, 0x4062AC24, 0x4063C220, 0x00000002, 0x4062AC25, + 0x4063C220, 0x00000002, 0x4062AC26, 0x4063C220, 0x00000002, 0x4062AC27, + 0x4063C220, 0x00000002, 0x4062AC28, 0x4063C220, 0x00000002, 0x4062AC29, + 0x4063C220, 0x00000002, 0x4062AC2A, 0x4063C220, 0x00000002, 0x4062AC2B, + 0x4063C220, 0x00000002, 0x4062AC2C, 0x4063C220, 0x00000002, 0x4062AC2D, + 0x4063C220, 0x00000002, 0x4062AC2E, 0x4063C220, 0x00000002, 0x4062AC2F, + 0x4063C220, 0x00000002, 0x4062AC30, 0x4063C220, 0x00000002, 0x4062AC31, + 0x4063C220, 0x00000002, 0x4062AC32, 0x4063C220, + // Block 306, offset 0x4c80 + 0x00000002, 0x4062AC33, 0x4063C220, 0x00000002, 0x4062AC34, 0x4063C220, + 0x00000002, 0x4062AC35, 0x4063C220, 0x00000002, 0x4062AC36, 0x4063C220, + 0x00000002, 0x4062AC37, 0x4063C220, 0x00000002, 0x4062AC38, 0x4063C220, + 0x00000002, 0x4062AC39, 0x4063C220, 0x00000002, 0x4062AC3A, 0x4063C220, + 0x00000002, 0x4062AC3B, 0x4063C220, 0x00000002, 0x4062AC3C, 0x4063C220, + 0x00000002, 0x4062AC3D, 0x4063C220, 0x00000002, 0x4062AC3E, 0x4063C220, + 0x00000002, 0x4062AC3F, 0x4063C220, 0x00000002, 0x4062AC40, 0x4063C220, + 0x00000002, 0x4062AC41, 0x4063C220, 0x00000002, 0x4062AC42, 0x4063C220, + 0x00000002, 0x4062AC43, 0x4063C220, 0x00000002, 0x4062AC44, 0x4063C220, + 0x00000002, 0x4062AC45, 0x4063C220, 0x00000002, 0x4062AC46, 0x4063C220, + 0x00000002, 0x4062AC47, 0x4063C220, 0x00000002, + // Block 307, offset 0x4cc0 + 0x4062AC48, 0x4063C220, 0x00000002, 0x4062AC49, 0x4063C220, 0x00000002, + 0x4062AC4A, 0x4063C220, 0x00000002, 0x4062AC4B, 0x4063C220, 0x00000002, + 0x4062AC4C, 0x4063C220, 0x00000002, 0x4062AC4D, 0x4063C220, 0x00000002, + 0x4062AC4E, 0x4063C220, 0x00000002, 0x4062AC4F, 0x4063C220, 0x00000002, + 0x4062AC50, 0x4063C220, 0x00000002, 0x4062AC51, 0x4063C220, 0x00000002, + 0x4062AC52, 0x4063C220, 0x00000002, 0x4062AC53, 0x4063C220, 0x00000002, + 0x4062AC54, 0x4063C220, 0x00000002, 0x4062AC55, 0x4063C220, 0x00000002, + 0x4062AC56, 0x4063C220, 0x00000002, 0x4062AC57, 0x4063C220, 0x00000002, + 0x4062AC58, 0x4063C220, 0x00000002, 0x4062AC59, 0x4063C220, 0x00000002, + 0x4062AC5A, 0x4063C220, 0x00000002, 0x4062AC5B, 0x4063C220, 0x00000002, + 0x4062AC5C, 0x4063C220, 0x00000002, 0x4062AC5D, + // Block 308, offset 0x4d00 + 0x4063C220, 0x00000002, 0x4062AC5E, 0x4063C220, 0x00000002, 0x4062AC5F, + 0x4063C220, 0x00000002, 0x4062AC60, 0x4063C220, 0x00000002, 0x4062AC61, + 0x4063C220, 0x00000002, 0x4062AC62, 0x4063C220, 0x00000002, 0x4062AC63, + 0x4063C220, 0x00000002, 0x4062AC64, 0x4063C220, 0x00000002, 0x4062AC65, + 0x4063C220, 0x00000002, 0x4062AC66, 0x4063C220, 0x00000002, 0x4062AC67, + 0x4063C220, 0x00000002, 0x4062AC68, 0x4063C220, 0x00000002, 0x4062AC69, + 0x4063C220, 0x00000002, 0x4062AC6A, 0x4063C220, 0x00000002, 0x4062AC6B, + 0x4063C220, 0x00000002, 0x4062AC6C, 0x4063C220, 0x00000002, 0x4062AC6D, + 0x4063C220, 0x00000002, 0x4062AC6E, 0x4063C220, 0x00000002, 0x4062AC6F, + 0x4063C220, 0x00000002, 0x4062AC70, 0x4063C220, 0x00000002, 0x4062AC71, + 0x4063C220, 0x00000002, 0x4062AC72, 0x4063C220, + // Block 309, offset 0x4d40 + 0x00000002, 0x4062AC73, 0x4063C220, 0x00000002, 0x4062AC74, 0x4063C220, + 0x00000002, 0x4062AC75, 0x4063C220, 0x00000002, 0x4062AC76, 0x4063C220, + 0x00000002, 0x4062AC77, 0x4063C220, 0x00000002, 0x4062AC78, 0x4063C220, + 0x00000002, 0x4062AC79, 0x4063C220, 0x00000002, 0x4062AC7A, 0x4063C220, + 0x00000002, 0x4062AC7B, 0x4063C220, 0x00000002, 0x4062AC7C, 0x4063C220, + 0x00000002, 0x4062AC7D, 0x4063C220, 0x00000002, 0x4062AC7E, 0x4063C220, + 0x00000002, 0x4062AC7F, 0x4063C220, 0x00000002, 0x4062AC80, 0x4063C220, + 0x00000002, 0x4062AC81, 0x4063C220, 0x00000002, 0x4062AC82, 0x4063C220, + 0x00000002, 0x4062AC83, 0x4063C220, 0x00000002, 0x4062AC84, 0x4063C220, + 0x00000002, 0x4062AC85, 0x4063C220, 0x00000002, 0x4062AC86, 0x4063C220, + 0x00000002, 0x4062AC87, 0x4063C220, 0x00000003, + // Block 310, offset 0x4d80 + 0x4062AC21, 0x4063C220, 0x40646420, 0x00000003, 0x4062AC22, 0x4063C220, + 0x40646420, 0x00000003, 0x4062AC23, 0x4063C220, 0x40646420, 0x00000003, + 0x4062AC24, 0x4063C220, 0x40646420, 0x00000003, 0x4062AC25, 0x4063C220, + 0x40646420, 0x00000003, 0x4062AC26, 0x4063C220, 0x40646420, 0x00000003, + 0x4062AC27, 0x4063C220, 0x40646420, 0x00000003, 0x4062AC28, 0x4063C220, + 0x40646420, 0x00000003, 0x4062AC29, 0x4063C220, 0x40646420, 0x00000003, + 0x4062AC2A, 0x4063C220, 0x40646420, 0x00000003, 0x4062AC21, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062AC22, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062AC23, 0x4063C220, 0x40646A20, 0x00000003, 0x4062AC24, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062AC25, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062AC26, 0x4063C220, 0x40646A20, 0x00000003, + // Block 311, offset 0x4dc0 + 0x4062AC27, 0x4063C220, 0x40646A20, 0x00000003, 0x4062AC28, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062AC29, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062AC21, 0x4063C220, 0x40647220, 0x00000003, 0x4062AC22, 0x4063C220, + 0x40647220, 0x00000003, 0x4062AC23, 0x4063C220, 0x40647220, 0x00000003, + 0x4062AC24, 0x4063C220, 0x40647220, 0x00000003, 0x4062AC25, 0x4063C220, + 0x40647220, 0x00000003, 0x4062AC26, 0x4063C220, 0x40647220, 0x00000003, + 0x4062AC27, 0x4063C220, 0x40647220, 0x00000003, 0x4062AC28, 0x4063C220, + 0x40647220, 0x00000003, 0x4062AC21, 0x4063C220, 0x40648C20, 0x00000003, + 0x4062AC22, 0x4063C220, 0x40648C20, 0x00000003, 0x4062AC23, 0x4063C220, + 0x40648C20, 0x00000003, 0x4062AC24, 0x4063C220, 0x40648C20, 0x00000003, + 0x4062AC25, 0x4063C220, 0x40648C20, 0x00000003, + // Block 312, offset 0x4e00 + 0x4062AC26, 0x4063C220, 0x40648C20, 0x00000003, 0x4062AC27, 0x4063C220, + 0x40648C20, 0x00000003, 0x4062AC21, 0x4063C420, 0x40646A20, 0x00000003, + 0x4062AC22, 0x4063C420, 0x40646A20, 0x00000003, 0x4062AC23, 0x4063C420, + 0x40646A20, 0x00000003, 0x4062AC24, 0x4063C420, 0x40646A20, 0x00000003, + 0x4062AC25, 0x4063C420, 0x40646A20, 0x00000003, 0x4062AC26, 0x4063C420, + 0x40646A20, 0x00000003, 0x4062AC27, 0x4063C420, 0x40646A20, 0x00000003, + 0x4062AC28, 0x4063C420, 0x40646A20, 0x00000003, 0x4062AC29, 0x4063C420, + 0x40646A20, 0x00000003, 0x4062AC2A, 0x4063C420, 0x40646A20, 0x00000003, + 0x4062AC2B, 0x4063C420, 0x40646A20, 0x00000003, 0x4062AC2C, 0x4063C420, + 0x40646A20, 0x00000003, 0x4062AC2D, 0x4063C420, 0x40646A20, 0x00000003, + 0x4062AC2E, 0x4063C420, 0x40646A20, 0x00000003, + // Block 313, offset 0x4e40 + 0x4062AC2F, 0x4063C420, 0x40646A20, 0x00000003, 0x4062AC30, 0x4063C420, + 0x40646A20, 0x00000003, 0x4062AC21, 0x4063C420, 0x40647220, 0x00000003, + 0x4062AC22, 0x4063C420, 0x40647220, 0x00000003, 0x4062AC23, 0x4063C420, + 0x40647220, 0x00000003, 0x4062AC24, 0x4063C420, 0x40647220, 0x00000003, + 0x4062AC25, 0x4063C420, 0x40647220, 0x00000002, 0x4062AC21, 0x4063C620, + 0x00000002, 0x4062AC22, 0x4063C620, 0x00000002, 0x4062AC23, 0x4063C620, + 0x00000002, 0x4062AC24, 0x4063C620, 0x00000002, 0x4062AC25, 0x4063C620, + 0x00000002, 0x4062AC26, 0x4063C620, 0x00000002, 0x4062AC27, 0x4063C620, + 0x00000002, 0x4062AC28, 0x4063C620, 0x00000002, 0x4062AC29, 0x4063C620, + 0x00000002, 0x4062AC2A, 0x4063C620, 0x00000002, 0x4062AC2B, 0x4063C620, + 0x00000002, 0x4062AC2C, 0x4063C620, 0x00000002, + // Block 314, offset 0x4e80 + 0x4062AC2D, 0x4063C620, 0x00000002, 0x4062AC2E, 0x4063C620, 0x00000002, + 0x4062AC2F, 0x4063C620, 0x00000002, 0x4062AC30, 0x4063C620, 0x00000002, + 0x4062AC31, 0x4063C620, 0x00000002, 0x4062AC32, 0x4063C620, 0x00000002, + 0x4062AC33, 0x4063C620, 0x00000002, 0x4062AC34, 0x4063C620, 0x00000002, + 0x4062AC21, 0x4063C820, 0x00000002, 0x4062AC22, 0x4063C820, 0x00000002, + 0x4062AC23, 0x4063C820, 0x00000002, 0x4062AC24, 0x4063C820, 0x00000002, + 0x4062AC21, 0x4063CA20, 0x00000002, 0x4062AC22, 0x4063CA20, 0x00000002, + 0x4062AC23, 0x4063CA20, 0x00000002, 0x4062AC24, 0x4063CA20, 0x00000002, + 0x4062AC25, 0x4063CA20, 0x00000002, 0x4062AC26, 0x4063CA20, 0x00000002, + 0x4062AC27, 0x4063CA20, 0x00000002, 0x4062AC28, 0x4063CA20, 0x00000002, + 0x4062AC29, 0x4063CA20, 0x00000002, 0x4062AC2A, + // Block 315, offset 0x4ec0 + 0x4063CA20, 0x00000002, 0x4062AC2B, 0x4063CA20, 0x00000002, 0x4062AC2C, + 0x4063CA20, 0x00000002, 0x4062AC2D, 0x4063CA20, 0x00000002, 0x4062AC2E, + 0x4063CA20, 0x00000002, 0x4062AC2F, 0x4063CA20, 0x00000002, 0x4062AC30, + 0x4063CA20, 0x00000002, 0x4062AC31, 0x4063CA20, 0x00000002, 0x4062AC32, + 0x4063CA20, 0x00000002, 0x4062AC33, 0x4063CA20, 0x00000002, 0x4062AC34, + 0x4063CA20, 0x00000002, 0x4062AC35, 0x4063CA20, 0x00000002, 0x4062AC36, + 0x4063CA20, 0x00000002, 0x4062AC37, 0x4063CA20, 0x00000002, 0x4062AC38, + 0x4063CA20, 0x00000002, 0x4062AC39, 0x4063CA20, 0x00000002, 0x4062AC3A, + 0x4063CA20, 0x00000002, 0x4062AC3B, 0x4063CA20, 0x00000002, 0x4062AC3C, + 0x4063CA20, 0x00000002, 0x4062AC3D, 0x4063CA20, 0x00000002, 0x4062AC3E, + 0x4063CA20, 0x00000002, 0x4062AC3F, 0x4063CA20, + // Block 316, offset 0x4f00 + 0x00000002, 0x4062AC40, 0x4063CA20, 0x00000003, 0x4062AC21, 0x4063CA20, + 0x40646A20, 0x00000003, 0x4062AC22, 0x4063CA20, 0x40646A20, 0x00000003, + 0x4062AC23, 0x4063CA20, 0x40646A20, 0x00000003, 0x4062AC24, 0x4063CA20, + 0x40646A20, 0x00000003, 0x4062AC25, 0x4063CA20, 0x40646A20, 0x00000003, + 0x4062AC26, 0x4063CA20, 0x40646A20, 0x00000003, 0x4062AC27, 0x4063CA20, + 0x40646A20, 0x00000003, 0x4062AC28, 0x4063CA20, 0x40646A20, 0x00000003, + 0x4062AC21, 0x4063CA20, 0x40647220, 0x00000003, 0x4062AC21, 0x4063CC20, + 0x40646420, 0x00000003, 0x4062AC22, 0x4063CC20, 0x40646420, 0x00000003, + 0x4062AC23, 0x4063CC20, 0x40646420, 0x00000003, 0x4062AC24, 0x4063CC20, + 0x40646420, 0x00000003, 0x4062AC25, 0x4063CC20, 0x40646420, 0x00000003, + 0x4062AC26, 0x4063CC20, 0x40646420, 0x00000003, + // Block 317, offset 0x4f40 + 0x4062AC27, 0x4063CC20, 0x40646420, 0x00000003, 0x4062AC28, 0x4063CC20, + 0x40646420, 0x00000003, 0x4062AC29, 0x4063CC20, 0x40646420, 0x00000003, + 0x4062AC2A, 0x4063CC20, 0x40646420, 0x00000003, 0x4062AC2B, 0x4063CC20, + 0x40646420, 0x00000003, 0x4062AC21, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062AC22, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062AC23, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062AC24, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062AC25, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062AC26, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062AC27, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062AC28, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062AC29, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062AC2A, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062AC2B, 0x4063CC20, 0x40646A20, 0x00000003, + // Block 318, offset 0x4f80 + 0x4062AC2C, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062AC2D, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062AC2E, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062AC2F, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062AC30, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062AC31, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062AC32, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062AC33, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062AC34, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062AC35, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062AC36, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062AC37, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062AC38, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062AC39, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062AC21, 0x4063CC20, 0x40648220, 0x00000003, + 0x4062AC22, 0x4063CC20, 0x40648220, 0x00000003, + // Block 319, offset 0x4fc0 + 0x4062AC23, 0x4063CC20, 0x40648220, 0x00000003, 0x4062AC24, 0x4063CC20, + 0x40648220, 0x00000003, 0x4062AC25, 0x4063CC20, 0x40648220, 0x00000003, + 0x4062AC26, 0x4063CC20, 0x40648220, 0x00000003, 0x4062AC27, 0x4063CC20, + 0x40648220, 0x00000003, 0x4062AC28, 0x4063CC20, 0x40648220, 0x00000003, + 0x4062AC29, 0x4063CC20, 0x40648220, 0x00000003, 0x4062AC2A, 0x4063CC20, + 0x40648220, 0x00000003, 0x4062AC2B, 0x4063CC20, 0x40648220, 0x00000003, + 0x4062AC2C, 0x4063CC20, 0x40648220, 0x00000003, 0x4062AC2D, 0x4063CC20, + 0x40648220, 0x00000003, 0x4062AC2E, 0x4063CC20, 0x40648220, 0x00000003, + 0x4062AC2F, 0x4063CC20, 0x40648220, 0x00000003, 0x4062AC30, 0x4063CC20, + 0x40648220, 0x00000003, 0x4062AC31, 0x4063CC20, 0x40648220, 0x00000003, + 0x4062AC32, 0x4063CC20, 0x40648220, 0x00000003, + // Block 320, offset 0x5000 + 0x4062AC21, 0x4063CC20, 0x40648420, 0x00000003, 0x4062AC22, 0x4063CC20, + 0x40648420, 0x00000003, 0x4062AC23, 0x4063CC20, 0x40648420, 0x00000003, + 0x4062AC24, 0x4063CC20, 0x40648420, 0x00000003, 0x4062AC25, 0x4063CC20, + 0x40648420, 0x00000003, 0x4062AC26, 0x4063CC20, 0x40648420, 0x00000003, + 0x4062AC27, 0x4063CC20, 0x40648420, 0x00000003, 0x4062AC28, 0x4063CC20, + 0x40648420, 0x00000003, 0x4062AC29, 0x4063CC20, 0x40648420, 0x00000003, + 0x4062AC2A, 0x4063CC20, 0x40648420, 0x00000003, 0x4062AC2B, 0x4063CC20, + 0x40648420, 0x00000003, 0x4062AC2C, 0x4063CC20, 0x40648420, 0x00000003, + 0x4062AC2D, 0x4063CC20, 0x40648420, 0x00000003, 0x4062AC21, 0x4063CC20, + 0x40648C20, 0x00000003, 0x4062AC22, 0x4063CC20, 0x40648C20, 0x00000003, + 0x4062AC23, 0x4063CC20, 0x40648C20, 0x00000003, + // Block 321, offset 0x5040 + 0x4062AC24, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062AC25, 0x4063CC20, + 0x40648C20, 0x00000003, 0x4062AC26, 0x4063CC20, 0x40648C20, 0x00000002, + 0x4062AC21, 0x4063D020, 0x00000002, 0x4062AC22, 0x4063D020, 0x00000002, + 0x4062AC23, 0x4063D020, 0x00000002, 0x4062AC24, 0x4063D020, 0x00000002, + 0x4062AC25, 0x4063D020, 0x00000002, 0x4062AC26, 0x4063D020, 0x00000002, + 0x4062AC27, 0x4063D020, 0x00000002, 0x4062AC28, 0x4063D020, 0x00000002, + 0x4062AC29, 0x4063D020, 0x00000002, 0x4062AC2A, 0x4063D020, 0x00000002, + 0x4062AC2B, 0x4063D020, 0x00000002, 0x4062AC2C, 0x4063D020, 0x00000002, + 0x4062AC2D, 0x4063D020, 0x00000002, 0x4062AC2E, 0x4063D020, 0x00000002, + 0x4062AC2F, 0x4063D020, 0x00000002, 0x4062AC30, 0x4063D020, 0x00000002, + 0x4062AC31, 0x4063D020, 0x00000002, 0x4062AC32, + // Block 322, offset 0x5080 + 0x4063D020, 0x00000002, 0x4062AC33, 0x4063D020, 0x00000002, 0x4062AC34, + 0x4063D020, 0x00000002, 0x4062AC35, 0x4063D020, 0x00000002, 0x4062AC36, + 0x4063D020, 0x00000002, 0x4062AC37, 0x4063D020, 0x00000002, 0x4062AC38, + 0x4063D020, 0x00000002, 0x4062AC39, 0x4063D020, 0x00000002, 0x4062AC3A, + 0x4063D020, 0x00000002, 0x4062AC3B, 0x4063D020, 0x00000002, 0x4062AC3C, + 0x4063D020, 0x00000002, 0x4062AC3D, 0x4063D020, 0x00000002, 0x4062AC3E, + 0x4063D020, 0x00000002, 0x4062AC3F, 0x4063D020, 0x00000002, 0x4062AC40, + 0x4063D020, 0x00000002, 0x4062AC41, 0x4063D020, 0x00000002, 0x4062AC42, + 0x4063D020, 0x00000002, 0x4062AC43, 0x4063D020, 0x00000002, 0x4062AC44, + 0x4063D020, 0x00000002, 0x4062AC45, 0x4063D020, 0x00000002, 0x4062AC46, + 0x4063D020, 0x00000002, 0x4062AC47, 0x4063D020, + // Block 323, offset 0x50c0 + 0x00000002, 0x4062AC48, 0x4063D020, 0x00000002, 0x4062AC49, 0x4063D020, + 0x00000002, 0x4062AC4A, 0x4063D020, 0x00000002, 0x4062AC4B, 0x4063D020, + 0x00000002, 0x4062AC4C, 0x4063D020, 0x00000002, 0x4062AC4D, 0x4063D020, + 0x00000002, 0x4062AC4E, 0x4063D020, 0x00000002, 0x4062AC4F, 0x4063D020, + 0x00000002, 0x4062AC50, 0x4063D020, 0x00000002, 0x4062AC51, 0x4063D020, + 0x00000002, 0x4062AC52, 0x4063D020, 0x00000002, 0x4062AC53, 0x4063D020, + 0x00000002, 0x4062AC54, 0x4063D020, 0x00000002, 0x4062AC55, 0x4063D020, + 0x00000002, 0x4062AC56, 0x4063D020, 0x00000002, 0x4062AC57, 0x4063D020, + 0x00000002, 0x4062AC58, 0x4063D020, 0x00000002, 0x4062AC59, 0x4063D020, + 0x00000002, 0x4062AC5A, 0x4063D020, 0x00000002, 0x4062AC5B, 0x4063D020, + 0x00000002, 0x4062AC5C, 0x4063D020, 0x00000002, + // Block 324, offset 0x5100 + 0x4062AC5D, 0x4063D020, 0x00000002, 0x4062AC5E, 0x4063D020, 0x00000002, + 0x4062AC5F, 0x4063D020, 0x00000002, 0x4062AC60, 0x4063D020, 0x00000002, + 0x4062AC61, 0x4063D020, 0x00000002, 0x4062AC62, 0x4063D020, 0x00000002, + 0x4062AC63, 0x4063D020, 0x00000002, 0x4062AC64, 0x4063D020, 0x00000002, + 0x4062AC65, 0x4063D020, 0x00000002, 0x4062AC66, 0x4063D020, 0x00000002, + 0x4062AC67, 0x4063D020, 0x00000002, 0x4062AC68, 0x4063D020, 0x00000002, + 0x4062AC69, 0x4063D020, 0x00000002, 0x4062AC6A, 0x4063D020, 0x00000002, + 0x4062AC6B, 0x4063D020, 0x00000002, 0x4062AC6C, 0x4063D020, 0x00000002, + 0x4062AC6D, 0x4063D020, 0x00000002, 0x4062AC6E, 0x4063D020, 0x00000002, + 0x4062AC6F, 0x4063D020, 0x00000002, 0x4062AC70, 0x4063D020, 0x00000002, + 0x4062AC71, 0x4063D020, 0x00000002, 0x4062AC72, + // Block 325, offset 0x5140 + 0x4063D020, 0x00000002, 0x4062AC73, 0x4063D020, 0x00000002, 0x4062AC74, + 0x4063D020, 0x00000002, 0x4062AC75, 0x4063D020, 0x00000002, 0x4062AC76, + 0x4063D020, 0x00000002, 0x4062AC77, 0x4063D020, 0x00000002, 0x4062AC78, + 0x4063D020, 0x00000002, 0x4062AC79, 0x4063D020, 0x00000002, 0x4062AC7A, + 0x4063D020, 0x00000002, 0x4062AC7B, 0x4063D020, 0x00000002, 0x4062AC7C, + 0x4063D020, 0x00000002, 0x4062AC7D, 0x4063D020, 0x00000002, 0x4062AC7E, + 0x4063D020, 0x00000002, 0x4062AC7F, 0x4063D020, 0x00000002, 0x4062AC80, + 0x4063D020, 0x00000002, 0x4062AC81, 0x4063D020, 0x00000002, 0x4062AC82, + 0x4063D020, 0x00000002, 0x4062AC83, 0x4063D020, 0x00000002, 0x4062AC84, + 0x4063D020, 0x00000003, 0x4062AC21, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062AC21, 0x4063D020, 0x40647220, 0x00000003, + // Block 326, offset 0x5180 + 0x4062AC22, 0x4063D020, 0x40647220, 0x00000003, 0x4062AC23, 0x4063D020, + 0x40647220, 0x00000003, 0x4062AC24, 0x4063D020, 0x40647220, 0x00000003, + 0x4062AC25, 0x4063D020, 0x40647220, 0x00000003, 0x4062AC26, 0x4063D020, + 0x40647220, 0x00000003, 0x4062AC21, 0x4063D020, 0x40648220, 0x00000003, + 0x4062AE21, 0x4063D020, 0x40646420, 0x00000002, 0x4062B021, 0x4063A820, + 0x00000002, 0x4062B022, 0x4063A820, 0x00000002, 0x4062B023, 0x4063A820, + 0x00000002, 0x4062B024, 0x4063A820, 0x00000002, 0x4062B025, 0x4063A820, + 0x00000002, 0x4062B026, 0x4063A820, 0x00000002, 0x4062B027, 0x4063A820, + 0x00000002, 0x4062B028, 0x4063A820, 0x00000002, 0x4062B029, 0x4063A820, + 0x00000002, 0x4062B02A, 0x4063A820, 0x00000002, 0x4062B02B, 0x4063A820, + 0x00000003, 0x4062B021, 0x4063A820, 0x40646420, + // Block 327, offset 0x51c0 + 0x00000003, 0x4062B021, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B022, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B023, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B024, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B025, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B026, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B027, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B021, + 0x4063A820, 0x40647220, 0x00000003, 0x4062B022, 0x4063A820, 0x40647220, + 0x00000003, 0x4062B021, 0x4063A820, 0x40648220, 0x00000003, 0x4062B022, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B023, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B024, 0x4063A820, 0x40648220, 0x00000003, 0x4062B025, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B026, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B027, 0x4063A820, 0x40648220, + // Block 328, offset 0x5200 + 0x00000003, 0x4062B021, 0x4063A820, 0x40648420, 0x00000003, 0x4062B022, + 0x4063A820, 0x40648420, 0x00000003, 0x4062B021, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B022, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B023, + 0x4063A820, 0x40648C20, 0x00000002, 0x4062B021, 0x4063AA20, 0x00000002, + 0x4062B022, 0x4063AA20, 0x00000002, 0x4062B023, 0x4063AA20, 0x00000002, + 0x4062B024, 0x4063AA20, 0x00000002, 0x4062B025, 0x4063AA20, 0x00000002, + 0x4062B026, 0x4063AA20, 0x00000002, 0x4062B027, 0x4063AA20, 0x00000002, + 0x4062B028, 0x4063AA20, 0x00000002, 0x4062B029, 0x4063AA20, 0x00000002, + 0x4062B02A, 0x4063AA20, 0x00000002, 0x4062B021, 0x4063B420, 0x00000003, + 0x4062B021, 0x4063B420, 0x40646420, 0x00000003, 0x4062B021, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062B022, 0x4063B420, + // Block 329, offset 0x5240 + 0x40646A20, 0x00000003, 0x4062B023, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062B024, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B021, 0x4063B420, + 0x40648220, 0x00000003, 0x4062B022, 0x4063B420, 0x40648220, 0x00000003, + 0x4062B023, 0x4063B420, 0x40648220, 0x00000003, 0x4062B024, 0x4063B420, + 0x40648220, 0x00000003, 0x4062B021, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062B022, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B023, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062B024, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062B025, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B026, 0x4063B420, + 0x40648C20, 0x00000002, 0x4062B021, 0x4063B820, 0x00000002, 0x4062B022, + 0x4063B820, 0x00000002, 0x4062B023, 0x4063B820, 0x00000002, 0x4062B024, + 0x4063B820, 0x00000002, 0x4062B025, 0x4063B820, + // Block 330, offset 0x5280 + 0x00000002, 0x4062B026, 0x4063B820, 0x00000002, 0x4062B027, 0x4063B820, + 0x00000002, 0x4062B028, 0x4063B820, 0x00000002, 0x4062B029, 0x4063B820, + 0x00000002, 0x4062B02A, 0x4063B820, 0x00000002, 0x4062B02B, 0x4063B820, + 0x00000002, 0x4062B02C, 0x4063B820, 0x00000003, 0x4062B021, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B022, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B023, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B024, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B025, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B026, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B027, 0x4063B820, + 0x40648C20, 0x00000002, 0x4062B021, 0x4063BE20, 0x00000002, 0x4062B022, + 0x4063BE20, 0x00000002, 0x4062B023, 0x4063BE20, 0x00000002, 0x4062B021, + 0x4063C020, 0x00000002, 0x4062B022, 0x4063C020, + // Block 331, offset 0x52c0 + 0x00000002, 0x4062B023, 0x4063C020, 0x00000002, 0x4062B024, 0x4063C020, + 0x00000002, 0x4062B025, 0x4063C020, 0x00000002, 0x4062B026, 0x4063C020, + 0x00000002, 0x4062B027, 0x4063C020, 0x00000002, 0x4062B021, 0x4063C220, + 0x00000002, 0x4062B022, 0x4063C220, 0x00000003, 0x4062B021, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062B021, 0x4063C220, 0x40647220, 0x00000003, + 0x4062B022, 0x4063C220, 0x40647220, 0x00000003, 0x4062B023, 0x4063C220, + 0x40647220, 0x00000002, 0x4062B021, 0x4063CA20, 0x00000002, 0x4062B022, + 0x4063CA20, 0x00000002, 0x4062B023, 0x4063CA20, 0x00000002, 0x4062B024, + 0x4063CA20, 0x00000003, 0x4062B021, 0x4063CA20, 0x40646420, 0x00000003, + 0x4062B021, 0x4063CC20, 0x40648C20, 0x00000002, 0x4062B021, 0x4063D020, + 0x00000002, 0x4062B022, 0x4063D020, 0x00000002, + // Block 332, offset 0x5300 + 0x4062B023, 0x4063D020, 0x00000002, 0x4062B024, 0x4063D020, 0x00000002, + 0x4062B025, 0x4063D020, 0x00000002, 0x4062B026, 0x4063D020, 0x00000002, + 0x4062B027, 0x4063D020, 0x00000002, 0x4062B028, 0x4063D020, 0x00000003, + 0x4062B021, 0x4063D020, 0x40646420, 0x00000003, 0x4062B022, 0x4063D020, + 0x40646420, 0x00000003, 0x4062B023, 0x4063D020, 0x40646420, 0x00000003, + 0x4062B024, 0x4063D020, 0x40646420, 0x00000002, 0x4062B221, 0x4063A820, + 0x00000002, 0x4062B222, 0x4063A820, 0x00000002, 0x4062B223, 0x4063A820, + 0x00000003, 0x4062B221, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B222, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B223, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B224, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B225, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B226, + // Block 333, offset 0x5340 + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B227, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B228, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B229, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B22A, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B22B, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B22C, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B22D, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B22E, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B22F, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B230, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B231, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B232, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B233, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B234, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B235, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B236, + // Block 334, offset 0x5380 + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B237, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B238, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B239, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B23A, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B23B, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B23C, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062B23D, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062B221, 0x4063A820, 0x40647220, 0x00000003, 0x4062B222, + 0x4063A820, 0x40647220, 0x00000003, 0x4062B223, 0x4063A820, 0x40647220, + 0x00000003, 0x4062B224, 0x4063A820, 0x40647220, 0x00000003, 0x4062B225, + 0x4063A820, 0x40647220, 0x00000003, 0x4062B226, 0x4063A820, 0x40647220, + 0x00000003, 0x4062B227, 0x4063A820, 0x40647220, 0x00000003, 0x4062B228, + 0x4063A820, 0x40647220, 0x00000003, 0x4062B229, + // Block 335, offset 0x53c0 + 0x4063A820, 0x40647220, 0x00000003, 0x4062B22A, 0x4063A820, 0x40647220, + 0x00000003, 0x4062B221, 0x4063A820, 0x40648220, 0x00000003, 0x4062B222, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B223, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B224, 0x4063A820, 0x40648220, 0x00000003, 0x4062B225, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B226, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B227, 0x4063A820, 0x40648220, 0x00000003, 0x4062B228, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B229, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B22A, 0x4063A820, 0x40648220, 0x00000003, 0x4062B22B, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B22C, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B22D, 0x4063A820, 0x40648220, 0x00000003, 0x4062B22E, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B22F, + // Block 336, offset 0x5400 + 0x4063A820, 0x40648220, 0x00000003, 0x4062B230, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B231, 0x4063A820, 0x40648220, 0x00000003, 0x4062B232, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B233, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B234, 0x4063A820, 0x40648220, 0x00000003, 0x4062B235, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B236, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B237, 0x4063A820, 0x40648220, 0x00000003, 0x4062B238, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B239, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B23A, 0x4063A820, 0x40648220, 0x00000003, 0x4062B23B, + 0x4063A820, 0x40648220, 0x00000003, 0x4062B23C, 0x4063A820, 0x40648220, + 0x00000003, 0x4062B23D, 0x4063A820, 0x40648220, 0x00000003, 0x4062B221, + 0x4063A820, 0x40648420, 0x00000003, 0x4062B222, + // Block 337, offset 0x5440 + 0x4063A820, 0x40648420, 0x00000003, 0x4062B223, 0x4063A820, 0x40648420, + 0x00000003, 0x4062B224, 0x4063A820, 0x40648420, 0x00000003, 0x4062B225, + 0x4063A820, 0x40648420, 0x00000003, 0x4062B221, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B222, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B223, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B224, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B225, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B226, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B227, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B228, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B229, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B22A, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B22B, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B22C, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B22D, + // Block 338, offset 0x5480 + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B22E, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B22F, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B230, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B231, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B232, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B233, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B234, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B235, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B236, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B237, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B238, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B239, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062B23A, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062B23B, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B23C, + 0x4063A820, 0x40648C20, 0x00000002, 0x4062B221, + // Block 339, offset 0x54c0 + 0x4063AA20, 0x00000002, 0x4062B222, 0x4063AA20, 0x00000002, 0x4062B223, + 0x4063AA20, 0x00000002, 0x4062B224, 0x4063AA20, 0x00000002, 0x4062B225, + 0x4063AA20, 0x00000002, 0x4062B226, 0x4063AA20, 0x00000002, 0x4062B227, + 0x4063AA20, 0x00000002, 0x4062B228, 0x4063AA20, 0x00000002, 0x4062B229, + 0x4063AA20, 0x00000002, 0x4062B22A, 0x4063AA20, 0x00000002, 0x4062B22B, + 0x4063AA20, 0x00000002, 0x4062B22C, 0x4063AA20, 0x00000002, 0x4062B22D, + 0x4063AA20, 0x00000002, 0x4062B22E, 0x4063AA20, 0x00000002, 0x4062B22F, + 0x4063AA20, 0x00000002, 0x4062B230, 0x4063AA20, 0x00000002, 0x4062B231, + 0x4063AA20, 0x00000002, 0x4062B232, 0x4063AA20, 0x00000002, 0x4062B233, + 0x4063AA20, 0x00000002, 0x4062B234, 0x4063AA20, 0x00000002, 0x4062B235, + 0x4063AA20, 0x00000002, 0x4062B236, 0x4063AA20, + // Block 340, offset 0x5500 + 0x00000003, 0x4062B221, 0x4063AA20, 0x40646420, 0x00000003, 0x4062B221, + 0x4063B020, 0x40646420, 0x00000003, 0x4062B222, 0x4063B020, 0x40646420, + 0x00000002, 0x4062B221, 0x4063B820, 0x00000002, 0x4062B222, 0x4063B820, + 0x00000002, 0x4062B223, 0x4063B820, 0x00000002, 0x4062B224, 0x4063B820, + 0x00000002, 0x4062B225, 0x4063B820, 0x00000002, 0x4062B226, 0x4063B820, + 0x00000002, 0x4062B227, 0x4063B820, 0x00000002, 0x4062B228, 0x4063B820, + 0x00000002, 0x4062B229, 0x4063B820, 0x00000002, 0x4062B22A, 0x4063B820, + 0x00000002, 0x4062B22B, 0x4063B820, 0x00000002, 0x4062B22C, 0x4063B820, + 0x00000002, 0x4062B22D, 0x4063B820, 0x00000002, 0x4062B22E, 0x4063B820, + 0x00000002, 0x4062B22F, 0x4063B820, 0x00000002, 0x4062B230, 0x4063B820, + 0x00000002, 0x4062B231, 0x4063B820, 0x00000002, + // Block 341, offset 0x5540 + 0x4062B232, 0x4063B820, 0x00000002, 0x4062B233, 0x4063B820, 0x00000002, + 0x4062B234, 0x4063B820, 0x00000002, 0x4062B235, 0x4063B820, 0x00000002, + 0x4062B236, 0x4063B820, 0x00000002, 0x4062B237, 0x4063B820, 0x00000002, + 0x4062B238, 0x4063B820, 0x00000002, 0x4062B239, 0x4063B820, 0x00000002, + 0x4062B23A, 0x4063B820, 0x00000002, 0x4062B23B, 0x4063B820, 0x00000002, + 0x4062B23C, 0x4063B820, 0x00000002, 0x4062B23D, 0x4063B820, 0x00000002, + 0x4062B23E, 0x4063B820, 0x00000002, 0x4062B23F, 0x4063B820, 0x00000002, + 0x4062B240, 0x4063B820, 0x00000002, 0x4062B241, 0x4063B820, 0x00000002, + 0x4062B242, 0x4063B820, 0x00000002, 0x4062B243, 0x4063B820, 0x00000002, + 0x4062B244, 0x4063B820, 0x00000002, 0x4062B245, 0x4063B820, 0x00000002, + 0x4062B246, 0x4063B820, 0x00000002, 0x4062B247, + // Block 342, offset 0x5580 + 0x4063B820, 0x00000002, 0x4062B248, 0x4063B820, 0x00000002, 0x4062B249, + 0x4063B820, 0x00000002, 0x4062B24A, 0x4063B820, 0x00000002, 0x4062B24B, + 0x4063B820, 0x00000002, 0x4062B24C, 0x4063B820, 0x00000002, 0x4062B24D, + 0x4063B820, 0x00000002, 0x4062B24E, 0x4063B820, 0x00000002, 0x4062B24F, + 0x4063B820, 0x00000002, 0x4062B250, 0x4063B820, 0x00000002, 0x4062B251, + 0x4063B820, 0x00000002, 0x4062B252, 0x4063B820, 0x00000002, 0x4062B253, + 0x4063B820, 0x00000002, 0x4062B254, 0x4063B820, 0x00000002, 0x4062B255, + 0x4063B820, 0x00000002, 0x4062B256, 0x4063B820, 0x00000002, 0x4062B257, + 0x4063B820, 0x00000002, 0x4062B258, 0x4063B820, 0x00000002, 0x4062B259, + 0x4063B820, 0x00000002, 0x4062B25A, 0x4063B820, 0x00000002, 0x4062B25B, + 0x4063B820, 0x00000003, 0x4062B221, 0x4063B820, + // Block 343, offset 0x55c0 + 0x40646420, 0x00000003, 0x4062B222, 0x4063B820, 0x40646420, 0x00000003, + 0x4062B223, 0x4063B820, 0x40646420, 0x00000003, 0x4062B224, 0x4063B820, + 0x40646420, 0x00000003, 0x4062B225, 0x4063B820, 0x40646420, 0x00000003, + 0x4062B226, 0x4063B820, 0x40646420, 0x00000003, 0x4062B227, 0x4063B820, + 0x40646420, 0x00000003, 0x4062B228, 0x4063B820, 0x40646420, 0x00000003, + 0x4062B229, 0x4063B820, 0x40646420, 0x00000003, 0x4062B22A, 0x4063B820, + 0x40646420, 0x00000003, 0x4062B22B, 0x4063B820, 0x40646420, 0x00000003, + 0x4062B22C, 0x4063B820, 0x40646420, 0x00000003, 0x4062B221, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062B222, 0x4063B820, 0x40646A20, 0x00000003, + 0x4062B223, 0x4063B820, 0x40646A20, 0x00000003, 0x4062B224, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062B225, 0x4063B820, + // Block 344, offset 0x5600 + 0x40646A20, 0x00000003, 0x4062B226, 0x4063B820, 0x40646A20, 0x00000003, + 0x4062B227, 0x4063B820, 0x40646A20, 0x00000003, 0x4062B228, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062B229, 0x4063B820, 0x40646A20, 0x00000003, + 0x4062B22A, 0x4063B820, 0x40646A20, 0x00000003, 0x4062B22B, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062B22C, 0x4063B820, 0x40646A20, 0x00000003, + 0x4062B22D, 0x4063B820, 0x40646A20, 0x00000003, 0x4062B221, 0x4063B820, + 0x40647220, 0x00000003, 0x4062B222, 0x4063B820, 0x40647220, 0x00000003, + 0x4062B223, 0x4063B820, 0x40647220, 0x00000003, 0x4062B224, 0x4063B820, + 0x40647220, 0x00000003, 0x4062B221, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B222, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B223, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B224, 0x4063B820, + // Block 345, offset 0x5640 + 0x40648C20, 0x00000003, 0x4062B225, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B226, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B227, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B228, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B229, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B22A, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B22B, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B22C, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B22D, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B22E, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B22F, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B230, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B231, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B232, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B233, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B234, 0x4063B820, + // Block 346, offset 0x5680 + 0x40648C20, 0x00000003, 0x4062B235, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B236, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B237, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B238, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B239, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B23A, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B23B, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B23C, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B23D, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B23E, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062B23F, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B240, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062B241, 0x4063B820, 0x40648C20, 0x00000002, + 0x4062B221, 0x4063C220, 0x00000002, 0x4062B222, 0x4063C220, 0x00000002, + 0x4062B223, 0x4063C220, 0x00000002, 0x4062B224, + // Block 347, offset 0x56c0 + 0x4063C220, 0x00000002, 0x4062B225, 0x4063C220, 0x00000002, 0x4062B226, + 0x4063C220, 0x00000002, 0x4062B227, 0x4063C220, 0x00000002, 0x4062B228, + 0x4063C220, 0x00000002, 0x4062B229, 0x4063C220, 0x00000002, 0x4062B22A, + 0x4063C220, 0x00000002, 0x4062B22B, 0x4063C220, 0x00000002, 0x4062B22C, + 0x4063C220, 0x00000002, 0x4062B22D, 0x4063C220, 0x00000002, 0x4062B22E, + 0x4063C220, 0x00000002, 0x4062B22F, 0x4063C220, 0x00000002, 0x4062B230, + 0x4063C220, 0x00000002, 0x4062B231, 0x4063C220, 0x00000003, 0x4062B221, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062B222, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062B223, 0x4063C220, 0x40646A20, 0x00000003, 0x4062B224, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062B225, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062B226, 0x4063C220, 0x40646A20, + // Block 348, offset 0x5700 + 0x00000003, 0x4062B227, 0x4063C220, 0x40646A20, 0x00000003, 0x4062B228, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062B221, 0x4063C220, 0x40647220, + 0x00000003, 0x4062B221, 0x4063CC20, 0x40646420, 0x00000003, 0x4062B221, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B222, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062B223, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B224, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B225, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062B226, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B227, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B228, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062B229, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B22A, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B22B, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062B22C, 0x4063CC20, 0x40648C20, + // Block 349, offset 0x5740 + 0x00000003, 0x4062B22D, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B22E, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B22F, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062B230, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B231, + 0x4063CC20, 0x40648C20, 0x00000002, 0x4062B621, 0x4063A820, 0x00000002, + 0x4062B622, 0x4063A820, 0x00000002, 0x4062B623, 0x4063A820, 0x00000002, + 0x4062B624, 0x4063A820, 0x00000002, 0x4062B625, 0x4063A820, 0x00000002, + 0x4062B626, 0x4063A820, 0x00000002, 0x4062B627, 0x4063A820, 0x00000002, + 0x4062B628, 0x4063A820, 0x00000002, 0x4062B629, 0x4063A820, 0x00000002, + 0x4062B62A, 0x4063A820, 0x00000002, 0x4062B62B, 0x4063A820, 0x00000002, + 0x4062B62C, 0x4063A820, 0x00000002, 0x4062B62D, 0x4063A820, 0x00000002, + 0x4062B62E, 0x4063A820, 0x00000002, 0x4062B62F, + // Block 350, offset 0x5780 + 0x4063A820, 0x00000002, 0x4062B630, 0x4063A820, 0x00000002, 0x4062B631, + 0x4063A820, 0x00000003, 0x4062B621, 0x4063A820, 0x40646420, 0x00000003, + 0x4062B622, 0x4063A820, 0x40646420, 0x00000003, 0x4062B623, 0x4063A820, + 0x40646420, 0x00000003, 0x4062B624, 0x4063A820, 0x40646420, 0x00000003, + 0x4062B625, 0x4063A820, 0x40646420, 0x00000003, 0x4062B626, 0x4063A820, + 0x40646420, 0x00000003, 0x4062B627, 0x4063A820, 0x40646420, 0x00000003, + 0x4062B628, 0x4063A820, 0x40646420, 0x00000003, 0x4062B629, 0x4063A820, + 0x40646420, 0x00000003, 0x4062B621, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B622, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B623, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B624, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B625, 0x4063A820, 0x40646A20, 0x00000003, + // Block 351, offset 0x57c0 + 0x4062B626, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B627, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B628, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B629, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B62A, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B62B, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B62C, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B62D, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B62E, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B62F, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B621, 0x4063A820, + 0x40647220, 0x00000003, 0x4062B622, 0x4063A820, 0x40647220, 0x00000003, + 0x4062B623, 0x4063A820, 0x40647220, 0x00000003, 0x4062B624, 0x4063A820, + 0x40647220, 0x00000003, 0x4062B621, 0x4063A820, 0x40648220, 0x00000003, + 0x4062B622, 0x4063A820, 0x40648220, 0x00000003, + // Block 352, offset 0x5800 + 0x4062B623, 0x4063A820, 0x40648220, 0x00000003, 0x4062B624, 0x4063A820, + 0x40648220, 0x00000003, 0x4062B625, 0x4063A820, 0x40648220, 0x00000003, + 0x4062B626, 0x4063A820, 0x40648220, 0x00000003, 0x4062B627, 0x4063A820, + 0x40648220, 0x00000003, 0x4062B628, 0x4063A820, 0x40648220, 0x00000003, + 0x4062B629, 0x4063A820, 0x40648220, 0x00000003, 0x4062B62A, 0x4063A820, + 0x40648220, 0x00000003, 0x4062B62B, 0x4063A820, 0x40648220, 0x00000003, + 0x4062B62C, 0x4063A820, 0x40648220, 0x00000003, 0x4062B621, 0x4063A820, + 0x40648420, 0x00000003, 0x4062B622, 0x4063A820, 0x40648420, 0x00000003, + 0x4062B623, 0x4063A820, 0x40648420, 0x00000003, 0x4062B624, 0x4063A820, + 0x40648420, 0x00000003, 0x4062B621, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B622, 0x4063A820, 0x40648C20, 0x00000003, + // Block 353, offset 0x5840 + 0x4062B623, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B624, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B625, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B626, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B627, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B628, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B629, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B62A, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B62B, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B62C, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B62D, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B62E, 0x4063A820, 0x40648C20, 0x00000002, + 0x4062B621, 0x4063AA20, 0x00000002, 0x4062B622, 0x4063AA20, 0x00000002, + 0x4062B623, 0x4063AA20, 0x00000002, 0x4062B624, 0x4063AA20, 0x00000002, + 0x4062B625, 0x4063AA20, 0x00000002, 0x4062B626, + // Block 354, offset 0x5880 + 0x4063AA20, 0x00000003, 0x4062B621, 0x4063AA20, 0x40648C20, 0x00000003, + 0x4062B621, 0x4063AC20, 0x40646420, 0x00000003, 0x4062B622, 0x4063AC20, + 0x40646420, 0x00000003, 0x4062B623, 0x4063AC20, 0x40646420, 0x00000003, + 0x4062B621, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062B622, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062B623, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062B624, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062B625, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062B626, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062B627, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062B628, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062B629, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062B62A, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062B62B, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062B62C, 0x4063AC20, + // Block 355, offset 0x58c0 + 0x40648C20, 0x00000003, 0x4062B62D, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062B62E, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062B62F, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062B630, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062B631, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062B632, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062B633, 0x4063AC20, 0x40648C20, 0x00000002, + 0x4062B621, 0x4063B420, 0x00000002, 0x4062B622, 0x4063B420, 0x00000002, + 0x4062B623, 0x4063B420, 0x00000002, 0x4062B624, 0x4063B420, 0x00000002, + 0x4062B625, 0x4063B420, 0x00000002, 0x4062B626, 0x4063B420, 0x00000002, + 0x4062B627, 0x4063B420, 0x00000002, 0x4062B628, 0x4063B420, 0x00000002, + 0x4062B629, 0x4063B420, 0x00000002, 0x4062B62A, 0x4063B420, 0x00000002, + 0x4062B62B, 0x4063B420, 0x00000002, 0x4062B62C, + // Block 356, offset 0x5900 + 0x4063B420, 0x00000002, 0x4062B62D, 0x4063B420, 0x00000002, 0x4062B62E, + 0x4063B420, 0x00000002, 0x4062B62F, 0x4063B420, 0x00000002, 0x4062B630, + 0x4063B420, 0x00000002, 0x4062B631, 0x4063B420, 0x00000002, 0x4062B632, + 0x4063B420, 0x00000002, 0x4062B633, 0x4063B420, 0x00000002, 0x4062B634, + 0x4063B420, 0x00000002, 0x4062B635, 0x4063B420, 0x00000002, 0x4062B636, + 0x4063B420, 0x00000002, 0x4062B637, 0x4063B420, 0x00000002, 0x4062B638, + 0x4063B420, 0x00000002, 0x4062B639, 0x4063B420, 0x00000002, 0x4062B63A, + 0x4063B420, 0x00000002, 0x4062B63B, 0x4063B420, 0x00000002, 0x4062B63C, + 0x4063B420, 0x00000002, 0x4062B63D, 0x4063B420, 0x00000003, 0x4062B621, + 0x4063B420, 0x40646420, 0x00000003, 0x4062B622, 0x4063B420, 0x40646420, + 0x00000003, 0x4062B623, 0x4063B420, 0x40646420, + // Block 357, offset 0x5940 + 0x00000003, 0x4062B624, 0x4063B420, 0x40646420, 0x00000003, 0x4062B625, + 0x4063B420, 0x40646420, 0x00000003, 0x4062B626, 0x4063B420, 0x40646420, + 0x00000003, 0x4062B627, 0x4063B420, 0x40646420, 0x00000003, 0x4062B628, + 0x4063B420, 0x40646420, 0x00000003, 0x4062B629, 0x4063B420, 0x40646420, + 0x00000003, 0x4062B62A, 0x4063B420, 0x40646420, 0x00000003, 0x4062B62B, + 0x4063B420, 0x40646420, 0x00000003, 0x4062B62C, 0x4063B420, 0x40646420, + 0x00000003, 0x4062B62D, 0x4063B420, 0x40646420, 0x00000003, 0x4062B621, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B622, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B623, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B624, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B625, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B626, 0x4063B420, 0x40646A20, + // Block 358, offset 0x5980 + 0x00000003, 0x4062B627, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B628, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B629, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B62A, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B62B, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B62C, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B62D, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B62E, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B62F, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B630, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B631, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B632, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B633, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B621, + 0x4063B420, 0x40647220, 0x00000003, 0x4062B622, 0x4063B420, 0x40647220, + 0x00000003, 0x4062B623, 0x4063B420, 0x40647220, + // Block 359, offset 0x59c0 + 0x00000003, 0x4062B624, 0x4063B420, 0x40647220, 0x00000003, 0x4062B625, + 0x4063B420, 0x40647220, 0x00000003, 0x4062B626, 0x4063B420, 0x40647220, + 0x00000003, 0x4062B627, 0x4063B420, 0x40647220, 0x00000003, 0x4062B628, + 0x4063B420, 0x40647220, 0x00000003, 0x4062B629, 0x4063B420, 0x40647220, + 0x00000003, 0x4062B621, 0x4063B420, 0x40648220, 0x00000003, 0x4062B622, + 0x4063B420, 0x40648220, 0x00000003, 0x4062B623, 0x4063B420, 0x40648220, + 0x00000003, 0x4062B624, 0x4063B420, 0x40648220, 0x00000003, 0x4062B625, + 0x4063B420, 0x40648220, 0x00000003, 0x4062B626, 0x4063B420, 0x40648220, + 0x00000003, 0x4062B627, 0x4063B420, 0x40648220, 0x00000003, 0x4062B628, + 0x4063B420, 0x40648220, 0x00000003, 0x4062B621, 0x4063B420, 0x40648420, + 0x00000003, 0x4062B622, 0x4063B420, 0x40648420, + // Block 360, offset 0x5a00 + 0x00000003, 0x4062B623, 0x4063B420, 0x40648420, 0x00000003, 0x4062B621, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B622, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B623, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B624, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B625, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B626, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B627, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B628, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B629, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B62A, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B62B, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B62C, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B62D, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B62E, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B62F, 0x4063B420, 0x40648C20, + // Block 361, offset 0x5a40 + 0x00000003, 0x4062B630, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B631, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B632, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B633, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B634, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B635, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B636, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B637, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B638, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B639, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B63A, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B63B, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B63C, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B63D, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B63E, 0x4063B420, 0x40648C20, + 0x00000002, 0x4062B621, 0x4063B620, 0x00000002, + // Block 362, offset 0x5a80 + 0x4062B622, 0x4063B620, 0x00000002, 0x4062B623, 0x4063B620, 0x00000002, + 0x4062B624, 0x4063B620, 0x00000002, 0x4062B625, 0x4063B620, 0x00000002, + 0x4062B626, 0x4063B620, 0x00000002, 0x4062B627, 0x4063B620, 0x00000002, + 0x4062B621, 0x4063B820, 0x00000002, 0x4062B622, 0x4063B820, 0x00000002, + 0x4062B623, 0x4063B820, 0x00000002, 0x4062B624, 0x4063B820, 0x00000002, + 0x4062B625, 0x4063B820, 0x00000002, 0x4062B626, 0x4063B820, 0x00000002, + 0x4062B627, 0x4063B820, 0x00000002, 0x4062B628, 0x4063B820, 0x00000002, + 0x4062B629, 0x4063B820, 0x00000002, 0x4062B62A, 0x4063B820, 0x00000002, + 0x4062B62B, 0x4063B820, 0x00000002, 0x4062B62C, 0x4063B820, 0x00000002, + 0x4062B62D, 0x4063B820, 0x00000002, 0x4062B62E, 0x4063B820, 0x00000002, + 0x4062B62F, 0x4063B820, 0x00000002, 0x4062B630, + // Block 363, offset 0x5ac0 + 0x4063B820, 0x00000002, 0x4062B631, 0x4063B820, 0x00000002, 0x4062B632, + 0x4063B820, 0x00000002, 0x4062B633, 0x4063B820, 0x00000002, 0x4062B634, + 0x4063B820, 0x00000002, 0x4062B635, 0x4063B820, 0x00000002, 0x4062B636, + 0x4063B820, 0x00000002, 0x4062B637, 0x4063B820, 0x00000002, 0x4062B638, + 0x4063B820, 0x00000002, 0x4062B639, 0x4063B820, 0x00000002, 0x4062B63A, + 0x4063B820, 0x00000002, 0x4062B63B, 0x4063B820, 0x00000002, 0x4062B63C, + 0x4063B820, 0x00000002, 0x4062B63D, 0x4063B820, 0x00000002, 0x4062B63E, + 0x4063B820, 0x00000002, 0x4062B63F, 0x4063B820, 0x00000003, 0x4062B621, + 0x4063B820, 0x40646420, 0x00000003, 0x4062B622, 0x4063B820, 0x40646420, + 0x00000003, 0x4062B623, 0x4063B820, 0x40646420, 0x00000003, 0x4062B624, + 0x4063B820, 0x40646420, 0x00000003, 0x4062B625, + // Block 364, offset 0x5b00 + 0x4063B820, 0x40646420, 0x00000003, 0x4062B626, 0x4063B820, 0x40646420, + 0x00000003, 0x4062B627, 0x4063B820, 0x40646420, 0x00000003, 0x4062B628, + 0x4063B820, 0x40646420, 0x00000003, 0x4062B629, 0x4063B820, 0x40646420, + 0x00000003, 0x4062B62A, 0x4063B820, 0x40646420, 0x00000003, 0x4062B62B, + 0x4063B820, 0x40646420, 0x00000003, 0x4062B62C, 0x4063B820, 0x40646420, + 0x00000003, 0x4062B62D, 0x4063B820, 0x40646420, 0x00000003, 0x4062B62E, + 0x4063B820, 0x40646420, 0x00000003, 0x4062B621, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062B621, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B622, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062B623, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062B624, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B625, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062B626, + // Block 365, offset 0x5b40 + 0x4063B820, 0x40648C20, 0x00000003, 0x4062B627, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062B628, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B629, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062B62A, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062B62B, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B62C, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062B62D, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062B62E, 0x4063B820, 0x40648C20, 0x00000002, 0x4062B621, + 0x4063BE20, 0x00000002, 0x4062B622, 0x4063BE20, 0x00000002, 0x4062B623, + 0x4063BE20, 0x00000002, 0x4062B624, 0x4063BE20, 0x00000002, 0x4062B625, + 0x4063BE20, 0x00000002, 0x4062B626, 0x4063BE20, 0x00000002, 0x4062B627, + 0x4063BE20, 0x00000002, 0x4062B628, 0x4063BE20, 0x00000002, 0x4062B629, + 0x4063BE20, 0x00000002, 0x4062B62A, 0x4063BE20, + // Block 366, offset 0x5b80 + 0x00000002, 0x4062B62B, 0x4063BE20, 0x00000002, 0x4062B62C, 0x4063BE20, + 0x00000002, 0x4062B62D, 0x4063BE20, 0x00000002, 0x4062B62E, 0x4063BE20, + 0x00000002, 0x4062B62F, 0x4063BE20, 0x00000002, 0x4062B630, 0x4063BE20, + 0x00000002, 0x4062B631, 0x4063BE20, 0x00000002, 0x4062B632, 0x4063BE20, + 0x00000002, 0x4062B633, 0x4063BE20, 0x00000002, 0x4062B621, 0x4063C020, + 0x00000002, 0x4062B622, 0x4063C020, 0x00000002, 0x4062B623, 0x4063C020, + 0x00000002, 0x4062B624, 0x4063C020, 0x00000002, 0x4062B625, 0x4063C020, + 0x00000002, 0x4062B626, 0x4063C020, 0x00000002, 0x4062B627, 0x4063C020, + 0x00000002, 0x4062B628, 0x4063C020, 0x00000002, 0x4062B629, 0x4063C020, + 0x00000002, 0x4062B62A, 0x4063C020, 0x00000002, 0x4062B62B, 0x4063C020, + 0x00000002, 0x4062B62C, 0x4063C020, 0x00000002, + // Block 367, offset 0x5bc0 + 0x4062B62D, 0x4063C020, 0x00000002, 0x4062B62E, 0x4063C020, 0x00000002, + 0x4062B62F, 0x4063C020, 0x00000002, 0x4062B630, 0x4063C020, 0x00000002, + 0x4062B631, 0x4063C020, 0x00000002, 0x4062B632, 0x4063C020, 0x00000002, + 0x4062B633, 0x4063C020, 0x00000002, 0x4062B634, 0x4063C020, 0x00000002, + 0x4062B635, 0x4063C020, 0x00000002, 0x4062B636, 0x4063C020, 0x00000002, + 0x4062B637, 0x4063C020, 0x00000002, 0x4062B638, 0x4063C020, 0x00000003, + 0x4062B621, 0x4063C020, 0x40648C20, 0x00000003, 0x4062B622, 0x4063C020, + 0x40648C20, 0x00000002, 0x4062B621, 0x4063C220, 0x00000002, 0x4062B622, + 0x4063C220, 0x00000002, 0x4062B623, 0x4063C220, 0x00000002, 0x4062B624, + 0x4063C220, 0x00000002, 0x4062B625, 0x4063C220, 0x00000002, 0x4062B626, + 0x4063C220, 0x00000002, 0x4062B627, 0x4063C220, + // Block 368, offset 0x5c00 + 0x00000002, 0x4062B628, 0x4063C220, 0x00000002, 0x4062B629, 0x4063C220, + 0x00000002, 0x4062B62A, 0x4063C220, 0x00000002, 0x4062B62B, 0x4063C220, + 0x00000002, 0x4062B62C, 0x4063C220, 0x00000002, 0x4062B62D, 0x4063C220, + 0x00000002, 0x4062B62E, 0x4063C220, 0x00000002, 0x4062B62F, 0x4063C220, + 0x00000002, 0x4062B630, 0x4063C220, 0x00000002, 0x4062B631, 0x4063C220, + 0x00000002, 0x4062B632, 0x4063C220, 0x00000002, 0x4062B633, 0x4063C220, + 0x00000002, 0x4062B634, 0x4063C220, 0x00000002, 0x4062B621, 0x4063CA20, + 0x00000002, 0x4062B622, 0x4063CA20, 0x00000002, 0x4062B623, 0x4063CA20, + 0x00000002, 0x4062B624, 0x4063CA20, 0x00000002, 0x4062B625, 0x4063CA20, + 0x00000002, 0x4062B626, 0x4063CA20, 0x00000002, 0x4062B627, 0x4063CA20, + 0x00000002, 0x4062B628, 0x4063CA20, 0x00000002, + // Block 369, offset 0x5c40 + 0x4062B629, 0x4063CA20, 0x00000002, 0x4062B62A, 0x4063CA20, 0x00000002, + 0x4062B62B, 0x4063CA20, 0x00000002, 0x4062B62C, 0x4063CA20, 0x00000002, + 0x4062B62D, 0x4063CA20, 0x00000002, 0x4062B62E, 0x4063CA20, 0x00000002, + 0x4062B62F, 0x4063CA20, 0x00000002, 0x4062B630, 0x4063CA20, 0x00000002, + 0x4062B631, 0x4063CA20, 0x00000002, 0x4062B632, 0x4063CA20, 0x00000002, + 0x4062B633, 0x4063CA20, 0x00000003, 0x4062B621, 0x4063CA20, 0x40646420, + 0x00000003, 0x4062B622, 0x4063CA20, 0x40646420, 0x00000003, 0x4062B623, + 0x4063CA20, 0x40646420, 0x00000003, 0x4062B624, 0x4063CA20, 0x40646420, + 0x00000003, 0x4062B621, 0x4063CA20, 0x40646A20, 0x00000003, 0x4062B622, + 0x4063CA20, 0x40646A20, 0x00000003, 0x4062B623, 0x4063CA20, 0x40646A20, + 0x00000003, 0x4062B624, 0x4063CA20, 0x40646A20, + // Block 370, offset 0x5c80 + 0x00000003, 0x4062B625, 0x4063CA20, 0x40646A20, 0x00000003, 0x4062B626, + 0x4063CA20, 0x40646A20, 0x00000003, 0x4062B627, 0x4063CA20, 0x40646A20, + 0x00000003, 0x4062B621, 0x4063CA20, 0x40647220, 0x00000003, 0x4062B622, + 0x4063CA20, 0x40647220, 0x00000003, 0x4062B623, 0x4063CA20, 0x40647220, + 0x00000003, 0x4062B624, 0x4063CA20, 0x40647220, 0x00000003, 0x4062B625, + 0x4063CA20, 0x40647220, 0x00000003, 0x4062B621, 0x4063CA20, 0x40648C20, + 0x00000003, 0x4062B622, 0x4063CA20, 0x40648C20, 0x00000003, 0x4062B623, + 0x4063CA20, 0x40648C20, 0x00000003, 0x4062B621, 0x4063CC20, 0x40646420, + 0x00000003, 0x4062B622, 0x4063CC20, 0x40646420, 0x00000003, 0x4062B623, + 0x4063CC20, 0x40646420, 0x00000003, 0x4062B621, 0x4063CC20, 0x40648220, + 0x00000003, 0x4062B622, 0x4063CC20, 0x40648220, + // Block 371, offset 0x5cc0 + 0x00000003, 0x4062B623, 0x4063CC20, 0x40648220, 0x00000003, 0x4062B624, + 0x4063CC20, 0x40648220, 0x00000003, 0x4062B621, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062B622, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B623, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B624, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062B625, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B626, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062B627, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062B628, 0x4063CC20, 0x40648C20, 0x00000002, 0x4062B621, + 0x4063D020, 0x00000002, 0x4062B622, 0x4063D020, 0x00000002, 0x4062B623, + 0x4063D020, 0x00000002, 0x4062B624, 0x4063D020, 0x00000002, 0x4062B625, + 0x4063D020, 0x00000002, 0x4062B626, 0x4063D020, 0x00000002, 0x4062B627, + 0x4063D020, 0x00000002, 0x4062B628, 0x4063D020, + // Block 372, offset 0x5d00 + 0x00000002, 0x4062B629, 0x4063D020, 0x00000002, 0x4062B62A, 0x4063D020, + 0x00000002, 0x4062B62B, 0x4063D020, 0x00000002, 0x4062B62C, 0x4063D020, + 0x00000002, 0x4062B62D, 0x4063D020, 0x00000002, 0x4062B62E, 0x4063D020, + 0x00000002, 0x4062B62F, 0x4063D020, 0x00000002, 0x4062B630, 0x4063D020, + 0x00000002, 0x4062B631, 0x4063D020, 0x00000002, 0x4062B632, 0x4063D020, + 0x00000002, 0x4062B633, 0x4063D020, 0x00000002, 0x4062B634, 0x4063D020, + 0x00000002, 0x4062B635, 0x4063D020, 0x00000002, 0x4062B636, 0x4063D020, + 0x00000002, 0x4062B637, 0x4063D020, 0x00000002, 0x4062B638, 0x4063D020, + 0x00000002, 0x4062B639, 0x4063D020, 0x00000002, 0x4062B63A, 0x4063D020, + 0x00000002, 0x4062B63B, 0x4063D020, 0x00000002, 0x4062B63C, 0x4063D020, + 0x00000002, 0x4062B63D, 0x4063D020, 0x00000002, + // Block 373, offset 0x5d40 + 0x4062B63E, 0x4063D020, 0x00000002, 0x4062B63F, 0x4063D020, 0x00000002, + 0x4062B640, 0x4063D020, 0x00000002, 0x4062B641, 0x4063D020, 0x00000002, + 0x4062B642, 0x4063D020, 0x00000002, 0x4062B643, 0x4063D020, 0x00000002, + 0x4062B644, 0x4063D020, 0x00000002, 0x4062B645, 0x4063D020, 0x00000002, + 0x4062B646, 0x4063D020, 0x00000002, 0x4062B647, 0x4063D020, 0x00000003, + 0x4062B621, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B622, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062B623, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062B624, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B625, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062B626, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062B627, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B628, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062B629, 0x4063D020, + // Block 374, offset 0x5d80 + 0x40646A20, 0x00000003, 0x4062B62A, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062B62B, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B62C, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062B62D, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062B62E, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B62F, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062B630, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062B631, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B632, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062B633, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062B634, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B635, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062B621, 0x4063D020, 0x40648220, 0x00000003, + 0x4062B622, 0x4063D020, 0x40648220, 0x00000003, 0x4062B623, 0x4063D020, + 0x40648220, 0x00000003, 0x4062B624, 0x4063D020, + // Block 375, offset 0x5dc0 + 0x40648220, 0x00000003, 0x4062B625, 0x4063D020, 0x40648220, 0x00000003, + 0x4062B626, 0x4063D020, 0x40648220, 0x00000003, 0x4062B621, 0x4063D020, + 0x40648420, 0x00000003, 0x4062B622, 0x4063D020, 0x40648420, 0x00000003, + 0x4062B623, 0x4063D020, 0x40648420, 0x00000003, 0x4062B624, 0x4063D020, + 0x40648420, 0x00000003, 0x4062B625, 0x4063D020, 0x40648420, 0x00000002, + 0x4062B821, 0x4063A820, 0x00000002, 0x4062B822, 0x4063A820, 0x00000002, + 0x4062B823, 0x4063A820, 0x00000002, 0x4062B824, 0x4063A820, 0x00000002, + 0x4062B825, 0x4063A820, 0x00000002, 0x4062B826, 0x4063A820, 0x00000002, + 0x4062B827, 0x4063A820, 0x00000002, 0x4062B828, 0x4063A820, 0x00000002, + 0x4062B829, 0x4063A820, 0x00000002, 0x4062B82A, 0x4063A820, 0x00000002, + 0x4062B82B, 0x4063A820, 0x00000002, 0x4062B82C, + // Block 376, offset 0x5e00 + 0x4063A820, 0x00000002, 0x4062B82D, 0x4063A820, 0x00000002, 0x4062B82E, + 0x4063A820, 0x00000003, 0x4062B821, 0x4063A820, 0x40646420, 0x00000003, + 0x4062B822, 0x4063A820, 0x40646420, 0x00000003, 0x4062B823, 0x4063A820, + 0x40646420, 0x00000003, 0x4062B824, 0x4063A820, 0x40646420, 0x00000003, + 0x4062B825, 0x4063A820, 0x40646420, 0x00000003, 0x4062B826, 0x4063A820, + 0x40646420, 0x00000003, 0x4062B827, 0x4063A820, 0x40646420, 0x00000003, + 0x4062B828, 0x4063A820, 0x40646420, 0x00000003, 0x4062B821, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B822, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B823, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B824, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B825, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B826, 0x4063A820, 0x40646A20, 0x00000003, + // Block 377, offset 0x5e40 + 0x4062B827, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B828, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B829, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B82A, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B82B, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B82C, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B82D, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B82E, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B82F, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B830, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B831, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B832, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B833, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B834, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B835, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B836, 0x4063A820, 0x40646A20, 0x00000003, + // Block 378, offset 0x5e80 + 0x4062B837, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B838, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B839, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B83A, 0x4063A820, 0x40646A20, 0x00000003, 0x4062B83B, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062B83C, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062B821, 0x4063A820, 0x40647220, 0x00000003, 0x4062B822, 0x4063A820, + 0x40647220, 0x00000003, 0x4062B823, 0x4063A820, 0x40647220, 0x00000003, + 0x4062B824, 0x4063A820, 0x40647220, 0x00000003, 0x4062B825, 0x4063A820, + 0x40647220, 0x00000003, 0x4062B826, 0x4063A820, 0x40647220, 0x00000003, + 0x4062B827, 0x4063A820, 0x40647220, 0x00000003, 0x4062B828, 0x4063A820, + 0x40647220, 0x00000003, 0x4062B829, 0x4063A820, 0x40647220, 0x00000003, + 0x4062B821, 0x4063A820, 0x40648C20, 0x00000003, + // Block 379, offset 0x5ec0 + 0x4062B822, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B823, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B824, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B825, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B826, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B827, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B828, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B829, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B82A, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B82B, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B82C, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B82D, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B82E, 0x4063A820, 0x40648C20, 0x00000003, 0x4062B82F, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062B830, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062B831, 0x4063A820, 0x40648C20, 0x00000003, + // Block 380, offset 0x5f00 + 0x4062B832, 0x4063A820, 0x40648C20, 0x00000002, 0x4062B821, 0x4063AA20, + 0x00000002, 0x4062B822, 0x4063AA20, 0x00000002, 0x4062B823, 0x4063AA20, + 0x00000002, 0x4062B824, 0x4063AA20, 0x00000002, 0x4062B825, 0x4063AA20, + 0x00000002, 0x4062B826, 0x4063AA20, 0x00000002, 0x4062B827, 0x4063AA20, + 0x00000002, 0x4062B828, 0x4063AA20, 0x00000002, 0x4062B829, 0x4063AA20, + 0x00000002, 0x4062B82A, 0x4063AA20, 0x00000002, 0x4062B82B, 0x4063AA20, + 0x00000002, 0x4062B82C, 0x4063AA20, 0x00000002, 0x4062B82D, 0x4063AA20, + 0x00000002, 0x4062B82E, 0x4063AA20, 0x00000002, 0x4062B82F, 0x4063AA20, + 0x00000002, 0x4062B830, 0x4063AA20, 0x00000002, 0x4062B831, 0x4063AA20, + 0x00000002, 0x4062B832, 0x4063AA20, 0x00000002, 0x4062B833, 0x4063AA20, + 0x00000002, 0x4062B834, 0x4063AA20, 0x00000002, + // Block 381, offset 0x5f40 + 0x4062B835, 0x4063AA20, 0x00000002, 0x4062B836, 0x4063AA20, 0x00000002, + 0x4062B837, 0x4063AA20, 0x00000003, 0x4062B821, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062B822, 0x4063AA20, 0x40646420, 0x00000003, 0x4062B823, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062B824, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062B825, 0x4063AA20, 0x40646420, 0x00000003, 0x4062B826, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062B827, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062B828, 0x4063AA20, 0x40646420, 0x00000003, 0x4062B821, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062B822, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062B823, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062B824, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062B825, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062B826, 0x4063AA20, 0x40648C20, + // Block 382, offset 0x5f80 + 0x00000003, 0x4062B827, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062B828, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062B829, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062B82A, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062B821, + 0x4063B420, 0x40646420, 0x00000003, 0x4062B822, 0x4063B420, 0x40646420, + 0x00000003, 0x4062B823, 0x4063B420, 0x40646420, 0x00000003, 0x4062B824, + 0x4063B420, 0x40646420, 0x00000003, 0x4062B821, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B822, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B823, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B824, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B825, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B826, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B827, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B828, 0x4063B420, 0x40646A20, + // Block 383, offset 0x5fc0 + 0x00000003, 0x4062B829, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B82A, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B82B, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B82C, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B82D, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B82E, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062B82F, 0x4063B420, 0x40646A20, 0x00000003, 0x4062B830, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062B821, 0x4063B420, 0x40647220, + 0x00000003, 0x4062B822, 0x4063B420, 0x40647220, 0x00000003, 0x4062B823, + 0x4063B420, 0x40647220, 0x00000003, 0x4062B824, 0x4063B420, 0x40647220, + 0x00000003, 0x4062B821, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B822, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B823, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B824, 0x4063B420, 0x40648C20, + // Block 384, offset 0x6000 + 0x00000003, 0x4062B825, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B826, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B827, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B828, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B829, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B82A, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B82B, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B82C, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B82D, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062B82E, 0x4063B420, 0x40648C20, 0x00000003, 0x4062B82F, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062B830, 0x4063B420, 0x40648C20, + 0x00000002, 0x4062B821, 0x4063B620, 0x00000002, 0x4062B821, 0x4063B820, + 0x00000002, 0x4062B822, 0x4063B820, 0x00000002, 0x4062B823, 0x4063B820, + 0x00000002, 0x4062B824, 0x4063B820, 0x00000002, + // Block 385, offset 0x6040 + 0x4062B825, 0x4063B820, 0x00000002, 0x4062B826, 0x4063B820, 0x00000002, + 0x4062B827, 0x4063B820, 0x00000002, 0x4062B828, 0x4063B820, 0x00000002, + 0x4062B829, 0x4063B820, 0x00000002, 0x4062B82A, 0x4063B820, 0x00000002, + 0x4062B82B, 0x4063B820, 0x00000002, 0x4062B82C, 0x4063B820, 0x00000002, + 0x4062B82D, 0x4063B820, 0x00000002, 0x4062B82E, 0x4063B820, 0x00000002, + 0x4062B82F, 0x4063B820, 0x00000002, 0x4062B830, 0x4063B820, 0x00000002, + 0x4062B831, 0x4063B820, 0x00000002, 0x4062B832, 0x4063B820, 0x00000002, + 0x4062B833, 0x4063B820, 0x00000002, 0x4062B834, 0x4063B820, 0x00000002, + 0x4062B835, 0x4063B820, 0x00000002, 0x4062B836, 0x4063B820, 0x00000002, + 0x4062B837, 0x4063B820, 0x00000002, 0x4062B838, 0x4063B820, 0x00000002, + 0x4062B839, 0x4063B820, 0x00000002, 0x4062B83A, + // Block 386, offset 0x6080 + 0x4063B820, 0x00000002, 0x4062B83B, 0x4063B820, 0x00000002, 0x4062B83C, + 0x4063B820, 0x00000002, 0x4062B83D, 0x4063B820, 0x00000002, 0x4062B83E, + 0x4063B820, 0x00000002, 0x4062B83F, 0x4063B820, 0x00000002, 0x4062B840, + 0x4063B820, 0x00000002, 0x4062B841, 0x4063B820, 0x00000002, 0x4062B842, + 0x4063B820, 0x00000002, 0x4062B843, 0x4063B820, 0x00000002, 0x4062B844, + 0x4063B820, 0x00000002, 0x4062B845, 0x4063B820, 0x00000002, 0x4062B846, + 0x4063B820, 0x00000002, 0x4062B847, 0x4063B820, 0x00000003, 0x4062B821, + 0x4063B820, 0x40646420, 0x00000003, 0x4062B822, 0x4063B820, 0x40646420, + 0x00000003, 0x4062B823, 0x4063B820, 0x40646420, 0x00000003, 0x4062B824, + 0x4063B820, 0x40646420, 0x00000003, 0x4062B825, 0x4063B820, 0x40646420, + 0x00000003, 0x4062B826, 0x4063B820, 0x40646420, + // Block 387, offset 0x60c0 + 0x00000003, 0x4062B827, 0x4063B820, 0x40646420, 0x00000003, 0x4062B828, + 0x4063B820, 0x40646420, 0x00000003, 0x4062B829, 0x4063B820, 0x40646420, + 0x00000003, 0x4062B821, 0x4063B820, 0x40647220, 0x00000003, 0x4062B822, + 0x4063B820, 0x40647220, 0x00000003, 0x4062B821, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062B822, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B823, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062B824, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062B825, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B826, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062B827, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062B828, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B829, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062B82A, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062B82B, 0x4063B820, 0x40648C20, + // Block 388, offset 0x6100 + 0x00000003, 0x4062B82C, 0x4063B820, 0x40648C20, 0x00000003, 0x4062B82D, + 0x4063B820, 0x40648C20, 0x00000002, 0x4062B821, 0x4063C020, 0x00000002, + 0x4062B822, 0x4063C020, 0x00000002, 0x4062B823, 0x4063C020, 0x00000002, + 0x4062B824, 0x4063C020, 0x00000002, 0x4062B825, 0x4063C020, 0x00000002, + 0x4062B826, 0x4063C020, 0x00000002, 0x4062B827, 0x4063C020, 0x00000002, + 0x4062B828, 0x4063C020, 0x00000002, 0x4062B829, 0x4063C020, 0x00000002, + 0x4062B82A, 0x4063C020, 0x00000002, 0x4062B82B, 0x4063C020, 0x00000002, + 0x4062B82C, 0x4063C020, 0x00000002, 0x4062B82D, 0x4063C020, 0x00000002, + 0x4062B82E, 0x4063C020, 0x00000002, 0x4062B82F, 0x4063C020, 0x00000002, + 0x4062B830, 0x4063C020, 0x00000002, 0x4062B821, 0x4063C220, 0x00000002, + 0x4062B822, 0x4063C220, 0x00000002, 0x4062B823, + // Block 389, offset 0x6140 + 0x4063C220, 0x00000002, 0x4062B824, 0x4063C220, 0x00000002, 0x4062B825, + 0x4063C220, 0x00000002, 0x4062B826, 0x4063C220, 0x00000002, 0x4062B827, + 0x4063C220, 0x00000002, 0x4062B828, 0x4063C220, 0x00000002, 0x4062B829, + 0x4063C220, 0x00000002, 0x4062B82A, 0x4063C220, 0x00000002, 0x4062B82B, + 0x4063C220, 0x00000002, 0x4062B82C, 0x4063C220, 0x00000002, 0x4062B82D, + 0x4063C220, 0x00000002, 0x4062B82E, 0x4063C220, 0x00000002, 0x4062B82F, + 0x4063C220, 0x00000002, 0x4062B830, 0x4063C220, 0x00000002, 0x4062B831, + 0x4063C220, 0x00000002, 0x4062B832, 0x4063C220, 0x00000002, 0x4062B833, + 0x4063C220, 0x00000002, 0x4062B834, 0x4063C220, 0x00000002, 0x4062B835, + 0x4063C220, 0x00000002, 0x4062B836, 0x4063C220, 0x00000002, 0x4062B837, + 0x4063C220, 0x00000002, 0x4062B838, 0x4063C220, + // Block 390, offset 0x6180 + 0x00000002, 0x4062B839, 0x4063C220, 0x00000002, 0x4062B83A, 0x4063C220, + 0x00000002, 0x4062B83B, 0x4063C220, 0x00000003, 0x4062B821, 0x4063C220, + 0x40646420, 0x00000003, 0x4062B822, 0x4063C220, 0x40646420, 0x00000003, + 0x4062B823, 0x4063C220, 0x40646420, 0x00000003, 0x4062B821, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062B822, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062B823, 0x4063C220, 0x40646A20, 0x00000003, 0x4062B824, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062B825, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062B826, 0x4063C220, 0x40646A20, 0x00000003, 0x4062B827, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062B828, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062B829, 0x4063C220, 0x40646A20, 0x00000003, 0x4062B82A, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062B82B, 0x4063C220, + // Block 391, offset 0x61c0 + 0x40646A20, 0x00000003, 0x4062B82C, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062B82D, 0x4063C220, 0x40646A20, 0x00000003, 0x4062B82E, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062B82F, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062B830, 0x4063C220, 0x40646A20, 0x00000003, 0x4062B831, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062B832, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062B833, 0x4063C220, 0x40646A20, 0x00000003, 0x4062B821, 0x4063C220, + 0x40647220, 0x00000003, 0x4062B822, 0x4063C220, 0x40647220, 0x00000003, + 0x4062B823, 0x4063C220, 0x40647220, 0x00000002, 0x4062B821, 0x4063D020, + 0x00000002, 0x4062B822, 0x4063D020, 0x00000002, 0x4062B823, 0x4063D020, + 0x00000002, 0x4062B824, 0x4063D020, 0x00000002, 0x4062B825, 0x4063D020, + 0x00000002, 0x4062B826, 0x4063D020, 0x00000002, + // Block 392, offset 0x6200 + 0x4062B827, 0x4063D020, 0x00000002, 0x4062B828, 0x4063D020, 0x00000002, + 0x4062B829, 0x4063D020, 0x00000002, 0x4062B82A, 0x4063D020, 0x00000002, + 0x4062B82B, 0x4063D020, 0x00000002, 0x4062B82C, 0x4063D020, 0x00000002, + 0x4062B82D, 0x4063D020, 0x00000002, 0x4062B82E, 0x4063D020, 0x00000002, + 0x4062B82F, 0x4063D020, 0x00000002, 0x4062B830, 0x4063D020, 0x00000002, + 0x4062B831, 0x4063D020, 0x00000002, 0x4062B832, 0x4063D020, 0x00000002, + 0x4062B833, 0x4063D020, 0x00000002, 0x4062B834, 0x4063D020, 0x00000002, + 0x4062B835, 0x4063D020, 0x00000002, 0x4062B836, 0x4063D020, 0x00000002, + 0x4062B837, 0x4063D020, 0x00000002, 0x4062B838, 0x4063D020, 0x00000002, + 0x4062B839, 0x4063D020, 0x00000002, 0x4062B83A, 0x4063D020, 0x00000002, + 0x4062B83B, 0x4063D020, 0x00000002, 0x4062B83C, + // Block 393, offset 0x6240 + 0x4063D020, 0x00000002, 0x4062B83D, 0x4063D020, 0x00000002, 0x4062B83E, + 0x4063D020, 0x00000002, 0x4062B83F, 0x4063D020, 0x00000002, 0x4062B840, + 0x4063D020, 0x00000002, 0x4062B841, 0x4063D020, 0x00000003, 0x4062B821, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062B822, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062B823, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B824, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062B825, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062B826, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B827, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062B828, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062B829, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B82A, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062B82B, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062B82C, 0x4063D020, 0x40646A20, + // Block 394, offset 0x6280 + 0x00000003, 0x4062B82D, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B82E, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062B82F, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062B830, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B831, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062B832, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062B833, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B834, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062B835, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062B836, 0x4063D020, 0x40646A20, 0x00000003, 0x4062B837, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062B821, 0x4063D020, 0x40647220, + 0x00000003, 0x4062B822, 0x4063D020, 0x40647220, 0x00000003, 0x4062B823, + 0x4063D020, 0x40647220, 0x00000003, 0x4062B824, 0x4063D020, 0x40647220, + 0x00000003, 0x4062B825, 0x4063D020, 0x40647220, + // Block 395, offset 0x62c0 + 0x00000003, 0x4062BA21, 0x4063A820, 0x40646420, 0x00000003, 0x4062BA22, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BA23, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BA24, 0x4063A820, 0x40646420, 0x00000003, 0x4062BA25, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BA26, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BA27, 0x4063A820, 0x40646420, 0x00000003, 0x4062BA28, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BA29, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BA2A, 0x4063A820, 0x40646420, 0x00000003, 0x4062BA2B, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BA2C, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BA2D, 0x4063A820, 0x40646420, 0x00000003, 0x4062BA2E, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BA2F, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BA30, 0x4063A820, 0x40646420, + // Block 396, offset 0x6300 + 0x00000003, 0x4062BA31, 0x4063A820, 0x40646420, 0x00000003, 0x4062BA32, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BA33, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BA34, 0x4063A820, 0x40646420, 0x00000003, 0x4062BA35, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BA36, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BA37, 0x4063A820, 0x40646420, 0x00000003, 0x4062BA38, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BA39, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BA21, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA22, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA23, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA24, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA25, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA26, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA27, 0x4063A820, 0x40646A20, + // Block 397, offset 0x6340 + 0x00000003, 0x4062BA28, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA29, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA2A, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA2B, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA2C, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA2D, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA2E, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA2F, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA30, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA31, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA32, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA33, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA34, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA35, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA36, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA37, 0x4063A820, 0x40646A20, + // Block 398, offset 0x6380 + 0x00000003, 0x4062BA38, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA39, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA3A, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA3B, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA3C, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA3D, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA3E, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA3F, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA40, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BA41, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BA21, + 0x4063A820, 0x40647220, 0x00000003, 0x4062BA22, 0x4063A820, 0x40647220, + 0x00000003, 0x4062BA23, 0x4063A820, 0x40647220, 0x00000003, 0x4062BA24, + 0x4063A820, 0x40647220, 0x00000003, 0x4062BA25, 0x4063A820, 0x40647220, + 0x00000003, 0x4062BA26, 0x4063A820, 0x40647220, + // Block 399, offset 0x63c0 + 0x00000003, 0x4062BA27, 0x4063A820, 0x40647220, 0x00000003, 0x4062BA28, + 0x4063A820, 0x40647220, 0x00000003, 0x4062BA29, 0x4063A820, 0x40647220, + 0x00000003, 0x4062BA2A, 0x4063A820, 0x40647220, 0x00000003, 0x4062BA2B, + 0x4063A820, 0x40647220, 0x00000003, 0x4062BA2C, 0x4063A820, 0x40647220, + 0x00000003, 0x4062BA2D, 0x4063A820, 0x40647220, 0x00000003, 0x4062BA2E, + 0x4063A820, 0x40647220, 0x00000003, 0x4062BA2F, 0x4063A820, 0x40647220, + 0x00000003, 0x4062BA30, 0x4063A820, 0x40647220, 0x00000003, 0x4062BA21, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA22, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA23, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA24, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA25, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA26, 0x4063A820, 0x40648C20, + // Block 400, offset 0x6400 + 0x00000003, 0x4062BA27, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA28, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA29, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA2A, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA2B, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA2C, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA2D, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA2E, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA2F, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA30, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA31, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA32, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA33, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA34, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA35, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA36, 0x4063A820, 0x40648C20, + // Block 401, offset 0x6440 + 0x00000003, 0x4062BA37, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA38, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA39, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA3A, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA3B, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA3C, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA3D, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA3E, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA3F, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA40, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA41, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA42, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA43, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA44, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA45, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BA46, 0x4063A820, 0x40648C20, + // Block 402, offset 0x6480 + 0x00000003, 0x4062BA47, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA48, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BA49, 0x4063A820, 0x40648C20, + 0x00000002, 0x4062BA21, 0x4063AA20, 0x00000002, 0x4062BA22, 0x4063AA20, + 0x00000002, 0x4062BA23, 0x4063AA20, 0x00000002, 0x4062BA24, 0x4063AA20, + 0x00000002, 0x4062BA25, 0x4063AA20, 0x00000002, 0x4062BA26, 0x4063AA20, + 0x00000002, 0x4062BA27, 0x4063AA20, 0x00000002, 0x4062BA28, 0x4063AA20, + 0x00000002, 0x4062BA29, 0x4063AA20, 0x00000002, 0x4062BA2A, 0x4063AA20, + 0x00000002, 0x4062BA2B, 0x4063AA20, 0x00000002, 0x4062BA2C, 0x4063AA20, + 0x00000002, 0x4062BA2D, 0x4063AA20, 0x00000002, 0x4062BA2E, 0x4063AA20, + 0x00000002, 0x4062BA2F, 0x4063AA20, 0x00000002, 0x4062BA30, 0x4063AA20, + 0x00000002, 0x4062BA31, 0x4063AA20, 0x00000002, + // Block 403, offset 0x64c0 + 0x4062BA32, 0x4063AA20, 0x00000002, 0x4062BA33, 0x4063AA20, 0x00000002, + 0x4062BA34, 0x4063AA20, 0x00000002, 0x4062BA35, 0x4063AA20, 0x00000002, + 0x4062BA36, 0x4063AA20, 0x00000002, 0x4062BA37, 0x4063AA20, 0x00000002, + 0x4062BA38, 0x4063AA20, 0x00000003, 0x4062BA21, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062BA22, 0x4063AA20, 0x40646420, 0x00000003, 0x4062BA23, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062BA24, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062BA25, 0x4063AA20, 0x40646420, 0x00000003, 0x4062BA26, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062BA27, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062BA28, 0x4063AA20, 0x40646420, 0x00000003, 0x4062BA29, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062BA21, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BA22, 0x4063B020, 0x40646A20, + // Block 404, offset 0x6500 + 0x00000003, 0x4062BA23, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BA24, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BA25, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BA26, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BA27, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BA28, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BA29, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BA2A, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BA2B, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BA2C, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BA2D, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BA2E, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BA21, 0x4063B020, 0x40647220, 0x00000003, 0x4062BA22, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BA23, 0x4063B020, 0x40647220, + 0x00000003, 0x4062BA24, 0x4063B020, 0x40647220, + // Block 405, offset 0x6540 + 0x00000003, 0x4062BA25, 0x4063B020, 0x40647220, 0x00000003, 0x4062BA26, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BA21, 0x4063B020, 0x40648220, + 0x00000003, 0x4062BA22, 0x4063B020, 0x40648220, 0x00000003, 0x4062BA23, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BA24, 0x4063B020, 0x40648220, + 0x00000003, 0x4062BA25, 0x4063B020, 0x40648220, 0x00000003, 0x4062BA26, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BA27, 0x4063B020, 0x40648220, + 0x00000003, 0x4062BA28, 0x4063B020, 0x40648220, 0x00000003, 0x4062BA29, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BA2A, 0x4063B020, 0x40648220, + 0x00000003, 0x4062BA2B, 0x4063B020, 0x40648220, 0x00000003, 0x4062BA2C, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BA21, 0x4063B020, 0x40648420, + 0x00000003, 0x4062BA22, 0x4063B020, 0x40648420, + // Block 406, offset 0x6580 + 0x00000003, 0x4062BA21, 0x4063B420, 0x40646420, 0x00000003, 0x4062BA22, + 0x4063B420, 0x40646420, 0x00000003, 0x4062BA23, 0x4063B420, 0x40646420, + 0x00000003, 0x4062BA24, 0x4063B420, 0x40646420, 0x00000003, 0x4062BA25, + 0x4063B420, 0x40646420, 0x00000003, 0x4062BA26, 0x4063B420, 0x40646420, + 0x00000003, 0x4062BA27, 0x4063B420, 0x40646420, 0x00000003, 0x4062BA28, + 0x4063B420, 0x40646420, 0x00000003, 0x4062BA29, 0x4063B420, 0x40646420, + 0x00000003, 0x4062BA2A, 0x4063B420, 0x40646420, 0x00000003, 0x4062BA2B, + 0x4063B420, 0x40646420, 0x00000003, 0x4062BA2C, 0x4063B420, 0x40646420, + 0x00000003, 0x4062BA2D, 0x4063B420, 0x40646420, 0x00000003, 0x4062BA2E, + 0x4063B420, 0x40646420, 0x00000003, 0x4062BA2F, 0x4063B420, 0x40646420, + 0x00000003, 0x4062BA30, 0x4063B420, 0x40646420, + // Block 407, offset 0x65c0 + 0x00000003, 0x4062BA31, 0x4063B420, 0x40646420, 0x00000003, 0x4062BA21, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA22, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062BA23, 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA24, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA25, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062BA26, 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA27, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA28, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062BA29, 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA2A, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA2B, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062BA2C, 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA2D, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062BA2E, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062BA2F, 0x4063B420, 0x40646A20, + // Block 408, offset 0x6600 + 0x00000003, 0x4062BA21, 0x4063B420, 0x40647220, 0x00000003, 0x4062BA22, + 0x4063B420, 0x40647220, 0x00000003, 0x4062BA23, 0x4063B420, 0x40647220, + 0x00000003, 0x4062BA24, 0x4063B420, 0x40647220, 0x00000003, 0x4062BA25, + 0x4063B420, 0x40647220, 0x00000003, 0x4062BA26, 0x4063B420, 0x40647220, + 0x00000003, 0x4062BA21, 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA22, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA23, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062BA24, 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA25, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA26, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062BA27, 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA28, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA29, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062BA2A, 0x4063B420, 0x40648C20, + // Block 409, offset 0x6640 + 0x00000003, 0x4062BA2B, 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA2C, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA2D, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062BA2E, 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA2F, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA30, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062BA31, 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA32, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA33, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062BA34, 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA35, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA36, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062BA37, 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA38, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062BA39, 0x4063B420, 0x40648C20, + 0x00000002, 0x4062BA21, 0x4063B820, 0x00000002, + // Block 410, offset 0x6680 + 0x4062BA22, 0x4063B820, 0x00000002, 0x4062BA23, 0x4063B820, 0x00000002, + 0x4062BA24, 0x4063B820, 0x00000002, 0x4062BA25, 0x4063B820, 0x00000002, + 0x4062BA26, 0x4063B820, 0x00000002, 0x4062BA27, 0x4063B820, 0x00000002, + 0x4062BA28, 0x4063B820, 0x00000002, 0x4062BA29, 0x4063B820, 0x00000002, + 0x4062BA2A, 0x4063B820, 0x00000002, 0x4062BA2B, 0x4063B820, 0x00000002, + 0x4062BA2C, 0x4063B820, 0x00000002, 0x4062BA2D, 0x4063B820, 0x00000002, + 0x4062BA2E, 0x4063B820, 0x00000002, 0x4062BA2F, 0x4063B820, 0x00000002, + 0x4062BA30, 0x4063B820, 0x00000002, 0x4062BA31, 0x4063B820, 0x00000002, + 0x4062BA32, 0x4063B820, 0x00000002, 0x4062BA33, 0x4063B820, 0x00000002, + 0x4062BA34, 0x4063B820, 0x00000002, 0x4062BA35, 0x4063B820, 0x00000002, + 0x4062BA36, 0x4063B820, 0x00000002, 0x4062BA37, + // Block 411, offset 0x66c0 + 0x4063B820, 0x00000003, 0x4062BA21, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA22, 0x4063B820, 0x40646420, 0x00000003, 0x4062BA23, 0x4063B820, + 0x40646420, 0x00000003, 0x4062BA24, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA25, 0x4063B820, 0x40646420, 0x00000003, 0x4062BA26, 0x4063B820, + 0x40646420, 0x00000003, 0x4062BA27, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA28, 0x4063B820, 0x40646420, 0x00000003, 0x4062BA29, 0x4063B820, + 0x40646420, 0x00000003, 0x4062BA2A, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA2B, 0x4063B820, 0x40646420, 0x00000003, 0x4062BA2C, 0x4063B820, + 0x40646420, 0x00000003, 0x4062BA2D, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA2E, 0x4063B820, 0x40646420, 0x00000003, 0x4062BA2F, 0x4063B820, + 0x40646420, 0x00000003, 0x4062BA30, 0x4063B820, + // Block 412, offset 0x6700 + 0x40646420, 0x00000003, 0x4062BA31, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA32, 0x4063B820, 0x40646420, 0x00000003, 0x4062BA33, 0x4063B820, + 0x40646420, 0x00000003, 0x4062BA34, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA35, 0x4063B820, 0x40646420, 0x00000003, 0x4062BA36, 0x4063B820, + 0x40646420, 0x00000003, 0x4062BA37, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA38, 0x4063B820, 0x40646420, 0x00000003, 0x4062BA39, 0x4063B820, + 0x40646420, 0x00000003, 0x4062BA3A, 0x4063B820, 0x40646420, 0x00000003, + 0x4062BA21, 0x4063B820, 0x40646A20, 0x00000003, 0x4062BA21, 0x4063B820, + 0x40647220, 0x00000003, 0x4062BA21, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062BA22, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BA23, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062BA24, 0x4063B820, + // Block 413, offset 0x6740 + 0x40648C20, 0x00000003, 0x4062BA25, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062BA26, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BA27, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062BA28, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062BA29, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BA2A, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062BA2B, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062BA2C, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BA2D, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062BA2E, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062BA2F, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BA30, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062BA31, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062BA32, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BA33, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062BA34, 0x4063B820, + // Block 414, offset 0x6780 + 0x40648C20, 0x00000003, 0x4062BA35, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062BA36, 0x4063B820, 0x40648C20, 0x00000002, 0x4062BA21, 0x4063C220, + 0x00000002, 0x4062BA22, 0x4063C220, 0x00000002, 0x4062BA23, 0x4063C220, + 0x00000002, 0x4062BA24, 0x4063C220, 0x00000002, 0x4062BA25, 0x4063C220, + 0x00000002, 0x4062BA26, 0x4063C220, 0x00000002, 0x4062BA27, 0x4063C220, + 0x00000002, 0x4062BA28, 0x4063C220, 0x00000002, 0x4062BA29, 0x4063C220, + 0x00000002, 0x4062BA2A, 0x4063C220, 0x00000002, 0x4062BA2B, 0x4063C220, + 0x00000002, 0x4062BA2C, 0x4063C220, 0x00000002, 0x4062BA2D, 0x4063C220, + 0x00000002, 0x4062BA2E, 0x4063C220, 0x00000002, 0x4062BA2F, 0x4063C220, + 0x00000002, 0x4062BA30, 0x4063C220, 0x00000002, 0x4062BA31, 0x4063C220, + 0x00000002, 0x4062BA32, 0x4063C220, 0x00000002, + // Block 415, offset 0x67c0 + 0x4062BA33, 0x4063C220, 0x00000002, 0x4062BA34, 0x4063C220, 0x00000002, + 0x4062BA35, 0x4063C220, 0x00000002, 0x4062BA36, 0x4063C220, 0x00000002, + 0x4062BA37, 0x4063C220, 0x00000002, 0x4062BA38, 0x4063C220, 0x00000002, + 0x4062BA39, 0x4063C220, 0x00000002, 0x4062BA3A, 0x4063C220, 0x00000002, + 0x4062BA3B, 0x4063C220, 0x00000002, 0x4062BA3C, 0x4063C220, 0x00000002, + 0x4062BA3D, 0x4063C220, 0x00000002, 0x4062BA3E, 0x4063C220, 0x00000002, + 0x4062BA3F, 0x4063C220, 0x00000002, 0x4062BA40, 0x4063C220, 0x00000002, + 0x4062BA41, 0x4063C220, 0x00000002, 0x4062BA42, 0x4063C220, 0x00000002, + 0x4062BA43, 0x4063C220, 0x00000002, 0x4062BA44, 0x4063C220, 0x00000002, + 0x4062BA45, 0x4063C220, 0x00000002, 0x4062BA46, 0x4063C220, 0x00000002, + 0x4062BA47, 0x4063C220, 0x00000002, 0x4062BA48, + // Block 416, offset 0x6800 + 0x4063C220, 0x00000002, 0x4062BA49, 0x4063C220, 0x00000002, 0x4062BA4A, + 0x4063C220, 0x00000002, 0x4062BA4B, 0x4063C220, 0x00000002, 0x4062BA4C, + 0x4063C220, 0x00000002, 0x4062BA4D, 0x4063C220, 0x00000002, 0x4062BA4E, + 0x4063C220, 0x00000002, 0x4062BA4F, 0x4063C220, 0x00000002, 0x4062BA50, + 0x4063C220, 0x00000002, 0x4062BA51, 0x4063C220, 0x00000002, 0x4062BA52, + 0x4063C220, 0x00000002, 0x4062BA53, 0x4063C220, 0x00000002, 0x4062BA54, + 0x4063C220, 0x00000002, 0x4062BA55, 0x4063C220, 0x00000002, 0x4062BA56, + 0x4063C220, 0x00000002, 0x4062BA57, 0x4063C220, 0x00000002, 0x4062BA58, + 0x4063C220, 0x00000002, 0x4062BA59, 0x4063C220, 0x00000002, 0x4062BA5A, + 0x4063C220, 0x00000002, 0x4062BA5B, 0x4063C220, 0x00000002, 0x4062BA5C, + 0x4063C220, 0x00000002, 0x4062BA5D, 0x4063C220, + // Block 417, offset 0x6840 + 0x00000002, 0x4062BA5E, 0x4063C220, 0x00000002, 0x4062BA5F, 0x4063C220, + 0x00000002, 0x4062BA60, 0x4063C220, 0x00000002, 0x4062BA61, 0x4063C220, + 0x00000002, 0x4062BA62, 0x4063C220, 0x00000002, 0x4062BA63, 0x4063C220, + 0x00000002, 0x4062BA64, 0x4063C220, 0x00000002, 0x4062BA65, 0x4063C220, + 0x00000003, 0x4062BA21, 0x4063C220, 0x40646420, 0x00000003, 0x4062BA21, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA22, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA23, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA24, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA25, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA26, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA27, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA28, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA29, 0x4063C220, 0x40646A20, + // Block 418, offset 0x6880 + 0x00000003, 0x4062BA2A, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA2B, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA2C, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA2D, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA2E, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA2F, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA30, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA31, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA32, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA33, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA34, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA35, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA36, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA37, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA38, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA39, 0x4063C220, 0x40646A20, + // Block 419, offset 0x68c0 + 0x00000003, 0x4062BA3A, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA3B, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA3C, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA3D, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA3E, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA3F, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA40, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA41, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA42, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA43, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA44, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA45, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062BA46, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BA21, + 0x4063C220, 0x40647220, 0x00000003, 0x4062BA22, 0x4063C220, 0x40647220, + 0x00000003, 0x4062BA23, 0x4063C220, 0x40647220, + // Block 420, offset 0x6900 + 0x00000003, 0x4062BA24, 0x4063C220, 0x40647220, 0x00000003, 0x4062BA25, + 0x4063C220, 0x40647220, 0x00000003, 0x4062BA26, 0x4063C220, 0x40647220, + 0x00000003, 0x4062BA27, 0x4063C220, 0x40647220, 0x00000003, 0x4062BA28, + 0x4063C220, 0x40647220, 0x00000003, 0x4062BA29, 0x4063C220, 0x40647220, + 0x00000003, 0x4062BA2A, 0x4063C220, 0x40647220, 0x00000003, 0x4062BA2B, + 0x4063C220, 0x40647220, 0x00000003, 0x4062BA2C, 0x4063C220, 0x40647220, + 0x00000003, 0x4062BA21, 0x4063C220, 0x40648C20, 0x00000003, 0x4062BA22, + 0x4063C220, 0x40648C20, 0x00000003, 0x4062BA23, 0x4063C220, 0x40648C20, + 0x00000003, 0x4062BA24, 0x4063C220, 0x40648C20, 0x00000003, 0x4062BA25, + 0x4063C220, 0x40648C20, 0x00000003, 0x4062BA26, 0x4063C220, 0x40648C20, + 0x00000003, 0x4062BA27, 0x4063C220, 0x40648C20, + // Block 421, offset 0x6940 + 0x00000003, 0x4062BA28, 0x4063C220, 0x40648C20, 0x00000003, 0x4062BA29, + 0x4063C220, 0x40648C20, 0x00000002, 0x4062BA21, 0x4063D020, 0x00000002, + 0x4062BA22, 0x4063D020, 0x00000002, 0x4062BA23, 0x4063D020, 0x00000002, + 0x4062BA24, 0x4063D020, 0x00000002, 0x4062BA25, 0x4063D020, 0x00000002, + 0x4062BA26, 0x4063D020, 0x00000002, 0x4062BA27, 0x4063D020, 0x00000002, + 0x4062BA28, 0x4063D020, 0x00000002, 0x4062BA29, 0x4063D020, 0x00000002, + 0x4062BA2A, 0x4063D020, 0x00000002, 0x4062BA2B, 0x4063D020, 0x00000002, + 0x4062BA2C, 0x4063D020, 0x00000002, 0x4062BA2D, 0x4063D020, 0x00000002, + 0x4062BA2E, 0x4063D020, 0x00000002, 0x4062BA2F, 0x4063D020, 0x00000002, + 0x4062BA30, 0x4063D020, 0x00000002, 0x4062BA31, 0x4063D020, 0x00000002, + 0x4062BA32, 0x4063D020, 0x00000002, 0x4062BA33, + // Block 422, offset 0x6980 + 0x4063D020, 0x00000002, 0x4062BA34, 0x4063D020, 0x00000002, 0x4062BA35, + 0x4063D020, 0x00000002, 0x4062BA36, 0x4063D020, 0x00000002, 0x4062BA37, + 0x4063D020, 0x00000002, 0x4062BA38, 0x4063D020, 0x00000002, 0x4062BA39, + 0x4063D020, 0x00000002, 0x4062BA3A, 0x4063D020, 0x00000002, 0x4062BA3B, + 0x4063D020, 0x00000002, 0x4062BA3C, 0x4063D020, 0x00000002, 0x4062BA3D, + 0x4063D020, 0x00000002, 0x4062BA3E, 0x4063D020, 0x00000002, 0x4062BA3F, + 0x4063D020, 0x00000002, 0x4062BA40, 0x4063D020, 0x00000002, 0x4062BA41, + 0x4063D020, 0x00000002, 0x4062BA42, 0x4063D020, 0x00000002, 0x4062BA43, + 0x4063D020, 0x00000002, 0x4062BA44, 0x4063D020, 0x00000002, 0x4062BA45, + 0x4063D020, 0x00000002, 0x4062BA46, 0x4063D020, 0x00000002, 0x4062BA47, + 0x4063D020, 0x00000002, 0x4062BA48, 0x4063D020, + // Block 423, offset 0x69c0 + 0x00000002, 0x4062BA49, 0x4063D020, 0x00000002, 0x4062BA4A, 0x4063D020, + 0x00000002, 0x4062BA4B, 0x4063D020, 0x00000002, 0x4062BA4C, 0x4063D020, + 0x00000002, 0x4062BA4D, 0x4063D020, 0x00000002, 0x4062BA4E, 0x4063D020, + 0x00000002, 0x4062BA4F, 0x4063D020, 0x00000002, 0x4062BA50, 0x4063D020, + 0x00000002, 0x4062BA51, 0x4063D020, 0x00000002, 0x4062BA52, 0x4063D020, + 0x00000002, 0x4062BA53, 0x4063D020, 0x00000002, 0x4062BA54, 0x4063D020, + 0x00000002, 0x4062BA55, 0x4063D020, 0x00000002, 0x4062BA56, 0x4063D020, + 0x00000002, 0x4062BA57, 0x4063D020, 0x00000002, 0x4062BA58, 0x4063D020, + 0x00000002, 0x4062BA59, 0x4063D020, 0x00000002, 0x4062BA5A, 0x4063D020, + 0x00000002, 0x4062BA5B, 0x4063D020, 0x00000002, 0x4062BA5C, 0x4063D020, + 0x00000002, 0x4062BA5D, 0x4063D020, 0x00000002, + // Block 424, offset 0x6a00 + 0x4062BA5E, 0x4063D020, 0x00000002, 0x4062BA5F, 0x4063D020, 0x00000002, + 0x4062BA60, 0x4063D020, 0x00000002, 0x4062BA61, 0x4063D020, 0x00000002, + 0x4062BA62, 0x4063D020, 0x00000002, 0x4062BA63, 0x4063D020, 0x00000002, + 0x4062BA64, 0x4063D020, 0x00000002, 0x4062BA65, 0x4063D020, 0x00000002, + 0x4062BA66, 0x4063D020, 0x00000002, 0x4062BA67, 0x4063D020, 0x00000002, + 0x4062BA68, 0x4063D020, 0x00000002, 0x4062BA69, 0x4063D020, 0x00000002, + 0x4062BA6A, 0x4063D020, 0x00000002, 0x4062BA6B, 0x4063D020, 0x00000002, + 0x4062BA6C, 0x4063D020, 0x00000002, 0x4062BA6D, 0x4063D020, 0x00000002, + 0x4062BA6E, 0x4063D020, 0x00000002, 0x4062BA6F, 0x4063D020, 0x00000002, + 0x4062BA70, 0x4063D020, 0x00000002, 0x4062BA71, 0x4063D020, 0x00000002, + 0x4062BA72, 0x4063D020, 0x00000002, 0x4062BA73, + // Block 425, offset 0x6a40 + 0x4063D020, 0x00000002, 0x4062BA74, 0x4063D020, 0x00000002, 0x4062BA75, + 0x4063D020, 0x00000003, 0x4062BA21, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA22, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA23, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BA24, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA25, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA26, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BA27, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA28, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA29, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BA2A, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA2B, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA2C, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BA2D, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA2E, 0x4063D020, 0x40646A20, 0x00000003, + // Block 426, offset 0x6a80 + 0x4062BA2F, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA30, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BA31, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA32, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA33, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BA34, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA35, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA36, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BA37, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA38, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA39, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BA3A, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BA3B, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BA21, 0x4063D020, + 0x40648C20, 0x00000003, 0x4062BA22, 0x4063D020, 0x40648C20, 0x00000003, + 0x4062BA23, 0x4063D020, 0x40648C20, 0x00000003, + // Block 427, offset 0x6ac0 + 0x4062BA24, 0x4063D020, 0x40648C20, 0x00000003, 0x4062BA25, 0x4063D020, + 0x40648C20, 0x00000003, 0x4062BA26, 0x4063D020, 0x40648C20, 0x00000003, + 0x4062BA27, 0x4063D020, 0x40648C20, 0x00000003, 0x4062BA28, 0x4063D020, + 0x40648C20, 0x00000002, 0x4062BE21, 0x4063A820, 0x00000002, 0x4062BE22, + 0x4063A820, 0x00000002, 0x4062BE23, 0x4063A820, 0x00000002, 0x4062BE24, + 0x4063A820, 0x00000002, 0x4062BE25, 0x4063A820, 0x00000002, 0x4062BE26, + 0x4063A820, 0x00000002, 0x4062BE27, 0x4063A820, 0x00000002, 0x4062BE28, + 0x4063A820, 0x00000002, 0x4062BE29, 0x4063A820, 0x00000002, 0x4062BE2A, + 0x4063A820, 0x00000002, 0x4062BE2B, 0x4063A820, 0x00000002, 0x4062BE2C, + 0x4063A820, 0x00000002, 0x4062BE2D, 0x4063A820, 0x00000002, 0x4062BE2E, + 0x4063A820, 0x00000002, 0x4062BE2F, 0x4063A820, + // Block 428, offset 0x6b00 + 0x00000002, 0x4062BE30, 0x4063A820, 0x00000002, 0x4062BE31, 0x4063A820, + 0x00000002, 0x4062BE32, 0x4063A820, 0x00000002, 0x4062BE33, 0x4063A820, + 0x00000002, 0x4062BE34, 0x4063A820, 0x00000002, 0x4062BE35, 0x4063A820, + 0x00000002, 0x4062BE36, 0x4063A820, 0x00000002, 0x4062BE37, 0x4063A820, + 0x00000002, 0x4062BE38, 0x4063A820, 0x00000002, 0x4062BE39, 0x4063A820, + 0x00000002, 0x4062BE3A, 0x4063A820, 0x00000002, 0x4062BE3B, 0x4063A820, + 0x00000002, 0x4062BE3C, 0x4063A820, 0x00000002, 0x4062BE3D, 0x4063A820, + 0x00000002, 0x4062BE3E, 0x4063A820, 0x00000002, 0x4062BE3F, 0x4063A820, + 0x00000002, 0x4062BE40, 0x4063A820, 0x00000002, 0x4062BE41, 0x4063A820, + 0x00000002, 0x4062BE42, 0x4063A820, 0x00000002, 0x4062BE43, 0x4063A820, + 0x00000002, 0x4062BE44, 0x4063A820, 0x00000002, + // Block 429, offset 0x6b40 + 0x4062BE45, 0x4063A820, 0x00000002, 0x4062BE46, 0x4063A820, 0x00000002, + 0x4062BE47, 0x4063A820, 0x00000002, 0x4062BE48, 0x4063A820, 0x00000002, + 0x4062BE49, 0x4063A820, 0x00000002, 0x4062BE4A, 0x4063A820, 0x00000002, + 0x4062BE4B, 0x4063A820, 0x00000002, 0x4062BE4C, 0x4063A820, 0x00000002, + 0x4062BE4D, 0x4063A820, 0x00000002, 0x4062BE4E, 0x4063A820, 0x00000002, + 0x4062BE4F, 0x4063A820, 0x00000002, 0x4062BE50, 0x4063A820, 0x00000002, + 0x4062BE51, 0x4063A820, 0x00000002, 0x4062BE52, 0x4063A820, 0x00000002, + 0x4062BE53, 0x4063A820, 0x00000002, 0x4062BE54, 0x4063A820, 0x00000002, + 0x4062BE55, 0x4063A820, 0x00000002, 0x4062BE56, 0x4063A820, 0x00000002, + 0x4062BE57, 0x4063A820, 0x00000002, 0x4062BE58, 0x4063A820, 0x00000002, + 0x4062BE59, 0x4063A820, 0x00000002, 0x4062BE5A, + // Block 430, offset 0x6b80 + 0x4063A820, 0x00000002, 0x4062BE5B, 0x4063A820, 0x00000002, 0x4062BE5C, + 0x4063A820, 0x00000002, 0x4062BE5D, 0x4063A820, 0x00000002, 0x4062BE5E, + 0x4063A820, 0x00000002, 0x4062BE5F, 0x4063A820, 0x00000002, 0x4062BE60, + 0x4063A820, 0x00000002, 0x4062BE61, 0x4063A820, 0x00000002, 0x4062BE62, + 0x4063A820, 0x00000002, 0x4062BE63, 0x4063A820, 0x00000002, 0x4062BE64, + 0x4063A820, 0x00000002, 0x4062BE65, 0x4063A820, 0x00000002, 0x4062BE66, + 0x4063A820, 0x00000002, 0x4062BE67, 0x4063A820, 0x00000002, 0x4062BE68, + 0x4063A820, 0x00000002, 0x4062BE69, 0x4063A820, 0x00000002, 0x4062BE6A, + 0x4063A820, 0x00000002, 0x4062BE6B, 0x4063A820, 0x00000002, 0x4062BE6C, + 0x4063A820, 0x00000002, 0x4062BE6D, 0x4063A820, 0x00000002, 0x4062BE6E, + 0x4063A820, 0x00000002, 0x4062BE6F, 0x4063A820, + // Block 431, offset 0x6bc0 + 0x00000003, 0x4062BE21, 0x4063A820, 0x40646420, 0x00000003, 0x4062BE22, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BE23, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BE24, 0x4063A820, 0x40646420, 0x00000003, 0x4062BE25, + 0x4063A820, 0x40646420, 0x00000003, 0x4062BE26, 0x4063A820, 0x40646420, + 0x00000003, 0x4062BE21, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE22, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE23, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BE24, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE25, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE26, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BE27, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE28, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE29, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BE2A, 0x4063A820, 0x40646A20, + // Block 432, offset 0x6c00 + 0x00000003, 0x4062BE2B, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE2C, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE2D, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BE2E, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE2F, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE30, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BE31, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE32, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE33, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BE34, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE35, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE36, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062BE37, 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE38, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062BE21, 0x4063A820, 0x40647220, + 0x00000003, 0x4062BE22, 0x4063A820, 0x40647220, + // Block 433, offset 0x6c40 + 0x00000003, 0x4062BE23, 0x4063A820, 0x40647220, 0x00000003, 0x4062BE24, + 0x4063A820, 0x40647220, 0x00000003, 0x4062BE25, 0x4063A820, 0x40647220, + 0x00000003, 0x4062BE21, 0x4063A820, 0x40648220, 0x00000003, 0x4062BE22, + 0x4063A820, 0x40648220, 0x00000003, 0x4062BE23, 0x4063A820, 0x40648220, + 0x00000003, 0x4062BE24, 0x4063A820, 0x40648220, 0x00000003, 0x4062BE25, + 0x4063A820, 0x40648220, 0x00000003, 0x4062BE26, 0x4063A820, 0x40648220, + 0x00000003, 0x4062BE27, 0x4063A820, 0x40648220, 0x00000003, 0x4062BE28, + 0x4063A820, 0x40648220, 0x00000003, 0x4062BE29, 0x4063A820, 0x40648220, + 0x00000003, 0x4062BE2A, 0x4063A820, 0x40648220, 0x00000003, 0x4062BE21, + 0x4063A820, 0x40648420, 0x00000003, 0x4062BE22, 0x4063A820, 0x40648420, + 0x00000003, 0x4062BE23, 0x4063A820, 0x40648420, + // Block 434, offset 0x6c80 + 0x00000003, 0x4062BE24, 0x4063A820, 0x40648420, 0x00000003, 0x4062BE25, + 0x4063A820, 0x40648420, 0x00000003, 0x4062BE26, 0x4063A820, 0x40648420, + 0x00000003, 0x4062BE27, 0x4063A820, 0x40648420, 0x00000003, 0x4062BE28, + 0x4063A820, 0x40648420, 0x00000003, 0x4062BE29, 0x4063A820, 0x40648420, + 0x00000003, 0x4062BE2A, 0x4063A820, 0x40648420, 0x00000003, 0x4062BE2B, + 0x4063A820, 0x40648420, 0x00000003, 0x4062BE21, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE22, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE23, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE24, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE25, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE26, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE27, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE28, 0x4063A820, 0x40648C20, + // Block 435, offset 0x6cc0 + 0x00000003, 0x4062BE29, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE2A, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE2B, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE2C, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE2D, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE2E, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE2F, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE30, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE31, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE32, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE33, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE34, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE35, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE36, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE37, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE38, 0x4063A820, 0x40648C20, + // Block 436, offset 0x6d00 + 0x00000003, 0x4062BE39, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE3A, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE3B, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE3C, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE3D, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE3E, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE3F, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE40, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE41, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE42, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE43, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE44, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE45, 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE46, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062BE47, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062BE48, 0x4063A820, 0x40648C20, + // Block 437, offset 0x6d40 + 0x00000002, 0x4062BE21, 0x4063AA20, 0x00000002, 0x4062BE22, 0x4063AA20, + 0x00000002, 0x4062BE23, 0x4063AA20, 0x00000002, 0x4062BE24, 0x4063AA20, + 0x00000003, 0x4062BE21, 0x4063AA20, 0x40646420, 0x00000003, 0x4062BE22, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062BE23, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062BE24, 0x4063AA20, 0x40646420, 0x00000003, 0x4062BE25, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062BE26, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062BE27, 0x4063AA20, 0x40646420, 0x00000003, 0x4062BE21, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062BE22, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062BE23, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062BE24, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062BE25, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062BE26, 0x4063AA20, 0x40648C20, + // Block 438, offset 0x6d80 + 0x00000002, 0x4062BE21, 0x4063B020, 0x00000002, 0x4062BE22, 0x4063B020, + 0x00000002, 0x4062BE23, 0x4063B020, 0x00000002, 0x4062BE24, 0x4063B020, + 0x00000002, 0x4062BE25, 0x4063B020, 0x00000002, 0x4062BE26, 0x4063B020, + 0x00000002, 0x4062BE27, 0x4063B020, 0x00000002, 0x4062BE28, 0x4063B020, + 0x00000002, 0x4062BE29, 0x4063B020, 0x00000002, 0x4062BE2A, 0x4063B020, + 0x00000002, 0x4062BE2B, 0x4063B020, 0x00000002, 0x4062BE2C, 0x4063B020, + 0x00000002, 0x4062BE2D, 0x4063B020, 0x00000002, 0x4062BE2E, 0x4063B020, + 0x00000002, 0x4062BE2F, 0x4063B020, 0x00000002, 0x4062BE30, 0x4063B020, + 0x00000002, 0x4062BE31, 0x4063B020, 0x00000002, 0x4062BE32, 0x4063B020, + 0x00000002, 0x4062BE33, 0x4063B020, 0x00000002, 0x4062BE34, 0x4063B020, + 0x00000002, 0x4062BE35, 0x4063B020, 0x00000002, + // Block 439, offset 0x6dc0 + 0x4062BE36, 0x4063B020, 0x00000002, 0x4062BE37, 0x4063B020, 0x00000002, + 0x4062BE38, 0x4063B020, 0x00000002, 0x4062BE39, 0x4063B020, 0x00000002, + 0x4062BE3A, 0x4063B020, 0x00000002, 0x4062BE3B, 0x4063B020, 0x00000002, + 0x4062BE3C, 0x4063B020, 0x00000002, 0x4062BE3D, 0x4063B020, 0x00000002, + 0x4062BE3E, 0x4063B020, 0x00000002, 0x4062BE3F, 0x4063B020, 0x00000002, + 0x4062BE40, 0x4063B020, 0x00000002, 0x4062BE41, 0x4063B020, 0x00000002, + 0x4062BE42, 0x4063B020, 0x00000002, 0x4062BE43, 0x4063B020, 0x00000002, + 0x4062BE44, 0x4063B020, 0x00000002, 0x4062BE45, 0x4063B020, 0x00000002, + 0x4062BE46, 0x4063B020, 0x00000002, 0x4062BE47, 0x4063B020, 0x00000002, + 0x4062BE48, 0x4063B020, 0x00000003, 0x4062BE21, 0x4063B020, 0x40646420, + 0x00000003, 0x4062BE22, 0x4063B020, 0x40646420, + // Block 440, offset 0x6e00 + 0x00000003, 0x4062BE23, 0x4063B020, 0x40646420, 0x00000003, 0x4062BE24, + 0x4063B020, 0x40646420, 0x00000003, 0x4062BE25, 0x4063B020, 0x40646420, + 0x00000003, 0x4062BE26, 0x4063B020, 0x40646420, 0x00000003, 0x4062BE27, + 0x4063B020, 0x40646420, 0x00000003, 0x4062BE28, 0x4063B020, 0x40646420, + 0x00000003, 0x4062BE29, 0x4063B020, 0x40646420, 0x00000003, 0x4062BE2A, + 0x4063B020, 0x40646420, 0x00000003, 0x4062BE2B, 0x4063B020, 0x40646420, + 0x00000003, 0x4062BE2C, 0x4063B020, 0x40646420, 0x00000003, 0x4062BE2D, + 0x4063B020, 0x40646420, 0x00000003, 0x4062BE2E, 0x4063B020, 0x40646420, + 0x00000003, 0x4062BE2F, 0x4063B020, 0x40646420, 0x00000003, 0x4062BE30, + 0x4063B020, 0x40646420, 0x00000003, 0x4062BE31, 0x4063B020, 0x40646420, + 0x00000003, 0x4062BE32, 0x4063B020, 0x40646420, + // Block 441, offset 0x6e40 + 0x00000003, 0x4062BE33, 0x4063B020, 0x40646420, 0x00000003, 0x4062BE34, + 0x4063B020, 0x40646420, 0x00000003, 0x4062BE35, 0x4063B020, 0x40646420, + 0x00000003, 0x4062BE36, 0x4063B020, 0x40646420, 0x00000003, 0x4062BE21, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE22, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE23, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE24, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE25, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE26, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE27, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE28, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE29, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE2A, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE2B, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE2C, 0x4063B020, 0x40646A20, + // Block 442, offset 0x6e80 + 0x00000003, 0x4062BE2D, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE2E, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE2F, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE30, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE31, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE32, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE33, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE34, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE35, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE36, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE37, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE38, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE39, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE3A, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE3B, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE3C, 0x4063B020, 0x40646A20, + // Block 443, offset 0x6ec0 + 0x00000003, 0x4062BE3D, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE3E, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE3F, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE40, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE41, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE42, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE43, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE44, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE45, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE46, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE47, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE48, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE49, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE4A, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE4B, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE4C, 0x4063B020, 0x40646A20, + // Block 444, offset 0x6f00 + 0x00000003, 0x4062BE4D, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE4E, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE4F, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062BE50, 0x4063B020, 0x40646A20, 0x00000003, 0x4062BE21, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BE22, 0x4063B020, 0x40647220, + 0x00000003, 0x4062BE23, 0x4063B020, 0x40647220, 0x00000003, 0x4062BE24, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BE25, 0x4063B020, 0x40647220, + 0x00000003, 0x4062BE26, 0x4063B020, 0x40647220, 0x00000003, 0x4062BE27, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BE28, 0x4063B020, 0x40647220, + 0x00000003, 0x4062BE29, 0x4063B020, 0x40647220, 0x00000003, 0x4062BE2A, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BE2B, 0x4063B020, 0x40647220, + 0x00000003, 0x4062BE2C, 0x4063B020, 0x40647220, + // Block 445, offset 0x6f40 + 0x00000003, 0x4062BE2D, 0x4063B020, 0x40647220, 0x00000003, 0x4062BE2E, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BE2F, 0x4063B020, 0x40647220, + 0x00000003, 0x4062BE30, 0x4063B020, 0x40647220, 0x00000003, 0x4062BE31, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BE32, 0x4063B020, 0x40647220, + 0x00000003, 0x4062BE33, 0x4063B020, 0x40647220, 0x00000003, 0x4062BE34, + 0x4063B020, 0x40647220, 0x00000003, 0x4062BE35, 0x4063B020, 0x40647220, + 0x00000003, 0x4062BE21, 0x4063B020, 0x40648220, 0x00000003, 0x4062BE22, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BE23, 0x4063B020, 0x40648220, + 0x00000003, 0x4062BE24, 0x4063B020, 0x40648220, 0x00000003, 0x4062BE25, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BE26, 0x4063B020, 0x40648220, + 0x00000003, 0x4062BE27, 0x4063B020, 0x40648220, + // Block 446, offset 0x6f80 + 0x00000003, 0x4062BE28, 0x4063B020, 0x40648220, 0x00000003, 0x4062BE29, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BE2A, 0x4063B020, 0x40648220, + 0x00000003, 0x4062BE2B, 0x4063B020, 0x40648220, 0x00000003, 0x4062BE2C, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BE2D, 0x4063B020, 0x40648220, + 0x00000003, 0x4062BE2E, 0x4063B020, 0x40648220, 0x00000003, 0x4062BE2F, + 0x4063B020, 0x40648220, 0x00000003, 0x4062BE21, 0x4063B020, 0x40648420, + 0x00000003, 0x4062BE22, 0x4063B020, 0x40648420, 0x00000003, 0x4062BE23, + 0x4063B020, 0x40648420, 0x00000003, 0x4062BE24, 0x4063B020, 0x40648420, + 0x00000003, 0x4062BE25, 0x4063B020, 0x40648420, 0x00000003, 0x4062BE26, + 0x4063B020, 0x40648420, 0x00000003, 0x4062BE27, 0x4063B020, 0x40648420, + 0x00000003, 0x4062BE28, 0x4063B020, 0x40648420, + // Block 447, offset 0x6fc0 + 0x00000003, 0x4062BE29, 0x4063B020, 0x40648420, 0x00000003, 0x4062BE2A, + 0x4063B020, 0x40648420, 0x00000003, 0x4062BE21, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062BE22, 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE23, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE24, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062BE25, 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE26, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE27, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062BE28, 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE29, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE2A, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062BE2B, 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE2C, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE2D, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062BE2E, 0x4063B020, 0x40648C20, + // Block 448, offset 0x7000 + 0x00000003, 0x4062BE2F, 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE30, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE31, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062BE32, 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE33, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062BE34, 0x4063B020, 0x40648C20, + 0x00000002, 0x4062BE21, 0x4063B220, 0x00000002, 0x4062BE22, 0x4063B220, + 0x00000002, 0x4062BE23, 0x4063B220, 0x00000002, 0x4062BE24, 0x4063B220, + 0x00000002, 0x4062BE25, 0x4063B220, 0x00000002, 0x4062BE26, 0x4063B220, + 0x00000002, 0x4062BE27, 0x4063B220, 0x00000002, 0x4062BE28, 0x4063B220, + 0x00000002, 0x4062BE29, 0x4063B220, 0x00000002, 0x4062BE2A, 0x4063B220, + 0x00000002, 0x4062BE2B, 0x4063B220, 0x00000002, 0x4062BE2C, 0x4063B220, + 0x00000002, 0x4062BE21, 0x4063B820, 0x00000002, + // Block 449, offset 0x7040 + 0x4062BE22, 0x4063B820, 0x00000002, 0x4062BE23, 0x4063B820, 0x00000002, + 0x4062BE24, 0x4063B820, 0x00000002, 0x4062BE25, 0x4063B820, 0x00000002, + 0x4062BE26, 0x4063B820, 0x00000002, 0x4062BE27, 0x4063B820, 0x00000002, + 0x4062BE28, 0x4063B820, 0x00000002, 0x4062BE29, 0x4063B820, 0x00000002, + 0x4062BE2A, 0x4063B820, 0x00000002, 0x4062BE2B, 0x4063B820, 0x00000002, + 0x4062BE2C, 0x4063B820, 0x00000002, 0x4062BE2D, 0x4063B820, 0x00000002, + 0x4062BE2E, 0x4063B820, 0x00000002, 0x4062BE2F, 0x4063B820, 0x00000002, + 0x4062BE30, 0x4063B820, 0x00000002, 0x4062BE31, 0x4063B820, 0x00000002, + 0x4062BE32, 0x4063B820, 0x00000002, 0x4062BE33, 0x4063B820, 0x00000002, + 0x4062BE34, 0x4063B820, 0x00000002, 0x4062BE35, 0x4063B820, 0x00000002, + 0x4062BE36, 0x4063B820, 0x00000002, 0x4062BE37, + // Block 450, offset 0x7080 + 0x4063B820, 0x00000002, 0x4062BE38, 0x4063B820, 0x00000002, 0x4062BE39, + 0x4063B820, 0x00000002, 0x4062BE3A, 0x4063B820, 0x00000002, 0x4062BE3B, + 0x4063B820, 0x00000002, 0x4062BE3C, 0x4063B820, 0x00000002, 0x4062BE3D, + 0x4063B820, 0x00000002, 0x4062BE3E, 0x4063B820, 0x00000002, 0x4062BE3F, + 0x4063B820, 0x00000002, 0x4062BE40, 0x4063B820, 0x00000002, 0x4062BE41, + 0x4063B820, 0x00000002, 0x4062BE42, 0x4063B820, 0x00000002, 0x4062BE43, + 0x4063B820, 0x00000002, 0x4062BE44, 0x4063B820, 0x00000002, 0x4062BE45, + 0x4063B820, 0x00000002, 0x4062BE46, 0x4063B820, 0x00000002, 0x4062BE47, + 0x4063B820, 0x00000002, 0x4062BE48, 0x4063B820, 0x00000002, 0x4062BE49, + 0x4063B820, 0x00000002, 0x4062BE4A, 0x4063B820, 0x00000002, 0x4062BE4B, + 0x4063B820, 0x00000002, 0x4062BE4C, 0x4063B820, + // Block 451, offset 0x70c0 + 0x00000002, 0x4062BE4D, 0x4063B820, 0x00000002, 0x4062BE4E, 0x4063B820, + 0x00000002, 0x4062BE4F, 0x4063B820, 0x00000002, 0x4062BE50, 0x4063B820, + 0x00000002, 0x4062BE51, 0x4063B820, 0x00000002, 0x4062BE52, 0x4063B820, + 0x00000002, 0x4062BE53, 0x4063B820, 0x00000002, 0x4062BE54, 0x4063B820, + 0x00000002, 0x4062BE55, 0x4063B820, 0x00000002, 0x4062BE56, 0x4063B820, + 0x00000002, 0x4062BE57, 0x4063B820, 0x00000002, 0x4062BE58, 0x4063B820, + 0x00000002, 0x4062BE59, 0x4063B820, 0x00000002, 0x4062BE5A, 0x4063B820, + 0x00000002, 0x4062BE5B, 0x4063B820, 0x00000002, 0x4062BE5C, 0x4063B820, + 0x00000003, 0x4062BE21, 0x4063B820, 0x40646420, 0x00000003, 0x4062BE22, + 0x4063B820, 0x40646420, 0x00000003, 0x4062BE23, 0x4063B820, 0x40646420, + 0x00000003, 0x4062BE24, 0x4063B820, 0x40646420, + // Block 452, offset 0x7100 + 0x00000003, 0x4062BE25, 0x4063B820, 0x40646420, 0x00000003, 0x4062BE26, + 0x4063B820, 0x40646420, 0x00000003, 0x4062BE27, 0x4063B820, 0x40646420, + 0x00000003, 0x4062BE28, 0x4063B820, 0x40646420, 0x00000003, 0x4062BE29, + 0x4063B820, 0x40646420, 0x00000003, 0x4062BE2A, 0x4063B820, 0x40646420, + 0x00000003, 0x4062BE2B, 0x4063B820, 0x40646420, 0x00000003, 0x4062BE21, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062BE22, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062BE23, 0x4063B820, 0x40646A20, 0x00000003, 0x4062BE24, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062BE25, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062BE26, 0x4063B820, 0x40646A20, 0x00000003, 0x4062BE27, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062BE28, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062BE21, 0x4063B820, 0x40647220, + // Block 453, offset 0x7140 + 0x00000003, 0x4062BE22, 0x4063B820, 0x40647220, 0x00000003, 0x4062BE23, + 0x4063B820, 0x40647220, 0x00000003, 0x4062BE21, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062BE22, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BE23, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062BE24, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062BE25, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BE26, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062BE27, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062BE28, 0x4063B820, 0x40648C20, 0x00000003, 0x4062BE29, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062BE2A, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062BE2B, 0x4063B820, 0x40648C20, 0x00000002, 0x4062BE21, + 0x4063BC20, 0x00000002, 0x4062BE22, 0x4063BC20, 0x00000002, 0x4062BE23, + 0x4063BC20, 0x00000002, 0x4062BE24, 0x4063BC20, + // Block 454, offset 0x7180 + 0x00000002, 0x4062BE25, 0x4063BC20, 0x00000002, 0x4062BE26, 0x4063BC20, + 0x00000002, 0x4062BE27, 0x4063BC20, 0x00000002, 0x4062BE21, 0x4063BE20, + 0x00000002, 0x4062BE22, 0x4063BE20, 0x00000002, 0x4062BE21, 0x4063C220, + 0x00000002, 0x4062BE22, 0x4063C220, 0x00000002, 0x4062BE23, 0x4063C220, + 0x00000002, 0x4062BE24, 0x4063C220, 0x00000002, 0x4062BE25, 0x4063C220, + 0x00000002, 0x4062BE26, 0x4063C220, 0x00000002, 0x4062BE27, 0x4063C220, + 0x00000002, 0x4062BE28, 0x4063C220, 0x00000002, 0x4062BE29, 0x4063C220, + 0x00000002, 0x4062BE2A, 0x4063C220, 0x00000002, 0x4062BE2B, 0x4063C220, + 0x00000002, 0x4062BE2C, 0x4063C220, 0x00000002, 0x4062BE2D, 0x4063C220, + 0x00000002, 0x4062BE2E, 0x4063C220, 0x00000002, 0x4062BE2F, 0x4063C220, + 0x00000002, 0x4062BE30, 0x4063C220, 0x00000002, + // Block 455, offset 0x71c0 + 0x4062BE31, 0x4063C220, 0x00000002, 0x4062BE32, 0x4063C220, 0x00000002, + 0x4062BE33, 0x4063C220, 0x00000002, 0x4062BE34, 0x4063C220, 0x00000002, + 0x4062BE35, 0x4063C220, 0x00000002, 0x4062BE36, 0x4063C220, 0x00000002, + 0x4062BE37, 0x4063C220, 0x00000002, 0x4062BE38, 0x4063C220, 0x00000002, + 0x4062BE39, 0x4063C220, 0x00000002, 0x4062BE3A, 0x4063C220, 0x00000002, + 0x4062BE3B, 0x4063C220, 0x00000002, 0x4062BE3C, 0x4063C220, 0x00000002, + 0x4062BE3D, 0x4063C220, 0x00000002, 0x4062BE3E, 0x4063C220, 0x00000002, + 0x4062BE3F, 0x4063C220, 0x00000002, 0x4062BE40, 0x4063C220, 0x00000002, + 0x4062BE41, 0x4063C220, 0x00000002, 0x4062BE42, 0x4063C220, 0x00000002, + 0x4062BE43, 0x4063C220, 0x00000002, 0x4062BE44, 0x4063C220, 0x00000002, + 0x4062BE45, 0x4063C220, 0x00000002, 0x4062BE46, + // Block 456, offset 0x7200 + 0x4063C220, 0x00000002, 0x4062BE47, 0x4063C220, 0x00000002, 0x4062BE48, + 0x4063C220, 0x00000002, 0x4062BE49, 0x4063C220, 0x00000002, 0x4062BE4A, + 0x4063C220, 0x00000002, 0x4062BE4B, 0x4063C220, 0x00000002, 0x4062BE4C, + 0x4063C220, 0x00000002, 0x4062BE4D, 0x4063C220, 0x00000002, 0x4062BE4E, + 0x4063C220, 0x00000002, 0x4062BE4F, 0x4063C220, 0x00000002, 0x4062BE50, + 0x4063C220, 0x00000002, 0x4062BE51, 0x4063C220, 0x00000002, 0x4062BE52, + 0x4063C220, 0x00000002, 0x4062BE53, 0x4063C220, 0x00000002, 0x4062BE54, + 0x4063C220, 0x00000002, 0x4062BE55, 0x4063C220, 0x00000002, 0x4062BE56, + 0x4063C220, 0x00000002, 0x4062BE57, 0x4063C220, 0x00000002, 0x4062BE58, + 0x4063C220, 0x00000002, 0x4062BE59, 0x4063C220, 0x00000002, 0x4062BE5A, + 0x4063C220, 0x00000002, 0x4062BE5B, 0x4063C220, + // Block 457, offset 0x7240 + 0x00000002, 0x4062BE5C, 0x4063C220, 0x00000002, 0x4062BE5D, 0x4063C220, + 0x00000002, 0x4062BE5E, 0x4063C220, 0x00000002, 0x4062BE5F, 0x4063C220, + 0x00000002, 0x4062BE60, 0x4063C220, 0x00000002, 0x4062BE61, 0x4063C220, + 0x00000002, 0x4062BE62, 0x4063C220, 0x00000002, 0x4062BE63, 0x4063C220, + 0x00000002, 0x4062BE64, 0x4063C220, 0x00000002, 0x4062BE65, 0x4063C220, + 0x00000002, 0x4062BE66, 0x4063C220, 0x00000002, 0x4062BE67, 0x4063C220, + 0x00000002, 0x4062BE68, 0x4063C220, 0x00000002, 0x4062BE69, 0x4063C220, + 0x00000002, 0x4062BE6A, 0x4063C220, 0x00000002, 0x4062BE6B, 0x4063C220, + 0x00000002, 0x4062BE6C, 0x4063C220, 0x00000002, 0x4062BE6D, 0x4063C220, + 0x00000002, 0x4062BE6E, 0x4063C220, 0x00000002, 0x4062BE6F, 0x4063C220, + 0x00000002, 0x4062BE70, 0x4063C220, 0x00000002, + // Block 458, offset 0x7280 + 0x4062BE71, 0x4063C220, 0x00000002, 0x4062BE72, 0x4063C220, 0x00000003, + 0x4062BE21, 0x4063C220, 0x40646420, 0x00000003, 0x4062BE22, 0x4063C220, + 0x40646420, 0x00000003, 0x4062BE23, 0x4063C220, 0x40646420, 0x00000003, + 0x4062BE24, 0x4063C220, 0x40646420, 0x00000003, 0x4062BE25, 0x4063C220, + 0x40646420, 0x00000003, 0x4062BE26, 0x4063C220, 0x40646420, 0x00000003, + 0x4062BE27, 0x4063C220, 0x40646420, 0x00000003, 0x4062BE28, 0x4063C220, + 0x40646420, 0x00000003, 0x4062BE29, 0x4063C220, 0x40646420, 0x00000003, + 0x4062BE2A, 0x4063C220, 0x40646420, 0x00000003, 0x4062BE2B, 0x4063C220, + 0x40646420, 0x00000003, 0x4062BE2C, 0x4063C220, 0x40646420, 0x00000003, + 0x4062BE2D, 0x4063C220, 0x40646420, 0x00000003, 0x4062BE2E, 0x4063C220, + 0x40646420, 0x00000003, 0x4062BE2F, 0x4063C220, + // Block 459, offset 0x72c0 + 0x40646420, 0x00000003, 0x4062BE30, 0x4063C220, 0x40646420, 0x00000003, + 0x4062BE31, 0x4063C220, 0x40646420, 0x00000003, 0x4062BE32, 0x4063C220, + 0x40646420, 0x00000003, 0x4062BE33, 0x4063C220, 0x40646420, 0x00000003, + 0x4062BE21, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE22, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE23, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE24, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE25, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE26, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE27, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE28, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE29, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE2A, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE2B, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE2C, 0x4063C220, + // Block 460, offset 0x7300 + 0x40646A20, 0x00000003, 0x4062BE2D, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE2E, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE2F, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE30, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE31, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE32, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE33, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE34, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE35, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE36, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE37, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE38, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE39, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE3A, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE3B, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE3C, 0x4063C220, + // Block 461, offset 0x7340 + 0x40646A20, 0x00000003, 0x4062BE3D, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE3E, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE3F, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE40, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE41, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE42, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062BE43, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062BE44, 0x4063C220, 0x40646A20, 0x00000003, 0x4062BE21, 0x4063C220, + 0x40647220, 0x00000003, 0x4062BE22, 0x4063C220, 0x40647220, 0x00000003, + 0x4062BE23, 0x4063C220, 0x40647220, 0x00000003, 0x4062BE24, 0x4063C220, + 0x40647220, 0x00000003, 0x4062BE25, 0x4063C220, 0x40647220, 0x00000003, + 0x4062BE21, 0x4063C220, 0x40648C20, 0x00000003, 0x4062BE22, 0x4063C220, + 0x40648C20, 0x00000003, 0x4062BE23, 0x4063C220, + // Block 462, offset 0x7380 + 0x40648C20, 0x00000003, 0x4062BE24, 0x4063C220, 0x40648C20, 0x00000002, + 0x4062BE21, 0x4063C820, 0x00000002, 0x4062BE22, 0x4063C820, 0x00000002, + 0x4062BE23, 0x4063C820, 0x00000003, 0x4062BE21, 0x4063CC20, 0x40647220, + 0x00000003, 0x4062BE22, 0x4063CC20, 0x40647220, 0x00000003, 0x4062BE23, + 0x4063CC20, 0x40647220, 0x00000003, 0x4062BE24, 0x4063CC20, 0x40647220, + 0x00000003, 0x4062BE21, 0x4063CC20, 0x40648420, 0x00000003, 0x4062BE22, + 0x4063CC20, 0x40648420, 0x00000003, 0x4062BE23, 0x4063CC20, 0x40648420, + 0x00000003, 0x4062BE24, 0x4063CC20, 0x40648420, 0x00000003, 0x4062BE25, + 0x4063CC20, 0x40648420, 0x00000003, 0x4062BE26, 0x4063CC20, 0x40648420, + 0x00000003, 0x4062BE27, 0x4063CC20, 0x40648420, 0x00000003, 0x4062BE28, + 0x4063CC20, 0x40648420, 0x00000003, 0x4062BE21, + // Block 463, offset 0x73c0 + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062BE22, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062BE23, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062BE24, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062BE25, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062BE26, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062BE27, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062BE28, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062BE29, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062BE2A, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062BE2B, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062BE2C, 0x4063CC20, 0x40648C20, 0x00000002, 0x4062BE21, + 0x4063D020, 0x00000002, 0x4062BE22, 0x4063D020, 0x00000002, 0x4062BE23, + 0x4063D020, 0x00000002, 0x4062BE24, 0x4063D020, 0x00000002, 0x4062BE25, + 0x4063D020, 0x00000002, 0x4062BE26, 0x4063D020, + // Block 464, offset 0x7400 + 0x00000002, 0x4062BE27, 0x4063D020, 0x00000002, 0x4062BE28, 0x4063D020, + 0x00000002, 0x4062BE29, 0x4063D020, 0x00000002, 0x4062BE2A, 0x4063D020, + 0x00000002, 0x4062BE2B, 0x4063D020, 0x00000002, 0x4062BE2C, 0x4063D020, + 0x00000002, 0x4062BE2D, 0x4063D020, 0x00000002, 0x4062BE2E, 0x4063D020, + 0x00000002, 0x4062BE2F, 0x4063D020, 0x00000002, 0x4062BE30, 0x4063D020, + 0x00000002, 0x4062BE31, 0x4063D020, 0x00000002, 0x4062BE32, 0x4063D020, + 0x00000002, 0x4062BE33, 0x4063D020, 0x00000002, 0x4062BE34, 0x4063D020, + 0x00000002, 0x4062BE35, 0x4063D020, 0x00000002, 0x4062BE36, 0x4063D020, + 0x00000002, 0x4062BE37, 0x4063D020, 0x00000002, 0x4062BE38, 0x4063D020, + 0x00000002, 0x4062BE39, 0x4063D020, 0x00000002, 0x4062BE3A, 0x4063D020, + 0x00000002, 0x4062BE3B, 0x4063D020, 0x00000002, + // Block 465, offset 0x7440 + 0x4062BE3C, 0x4063D020, 0x00000002, 0x4062BE3D, 0x4063D020, 0x00000002, + 0x4062BE3E, 0x4063D020, 0x00000002, 0x4062BE3F, 0x4063D020, 0x00000002, + 0x4062BE40, 0x4063D020, 0x00000002, 0x4062BE41, 0x4063D020, 0x00000002, + 0x4062BE42, 0x4063D020, 0x00000002, 0x4062BE43, 0x4063D020, 0x00000002, + 0x4062BE44, 0x4063D020, 0x00000002, 0x4062BE45, 0x4063D020, 0x00000002, + 0x4062BE46, 0x4063D020, 0x00000002, 0x4062BE47, 0x4063D020, 0x00000002, + 0x4062BE48, 0x4063D020, 0x00000002, 0x4062BE49, 0x4063D020, 0x00000002, + 0x4062BE4A, 0x4063D020, 0x00000002, 0x4062BE4B, 0x4063D020, 0x00000002, + 0x4062BE4C, 0x4063D020, 0x00000002, 0x4062BE4D, 0x4063D020, 0x00000003, + 0x4062BE21, 0x4063D020, 0x40646420, 0x00000003, 0x4062BE22, 0x4063D020, + 0x40646420, 0x00000003, 0x4062BE23, 0x4063D020, + // Block 466, offset 0x7480 + 0x40646420, 0x00000003, 0x4062BE24, 0x4063D020, 0x40646420, 0x00000003, + 0x4062BE25, 0x4063D020, 0x40646420, 0x00000003, 0x4062BE26, 0x4063D020, + 0x40646420, 0x00000003, 0x4062BE27, 0x4063D020, 0x40646420, 0x00000003, + 0x4062BE28, 0x4063D020, 0x40646420, 0x00000003, 0x4062BE29, 0x4063D020, + 0x40646420, 0x00000003, 0x4062BE2A, 0x4063D020, 0x40646420, 0x00000003, + 0x4062BE2B, 0x4063D020, 0x40646420, 0x00000003, 0x4062BE2C, 0x4063D020, + 0x40646420, 0x00000003, 0x4062BE2D, 0x4063D020, 0x40646420, 0x00000003, + 0x4062BE2E, 0x4063D020, 0x40646420, 0x00000003, 0x4062BE2F, 0x4063D020, + 0x40646420, 0x00000003, 0x4062BE30, 0x4063D020, 0x40646420, 0x00000003, + 0x4062BE31, 0x4063D020, 0x40646420, 0x00000003, 0x4062BE32, 0x4063D020, + 0x40646420, 0x00000003, 0x4062BE21, 0x4063D020, + // Block 467, offset 0x74c0 + 0x40646A20, 0x00000003, 0x4062BE22, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE23, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE24, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE25, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE26, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE27, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE28, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE29, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE2A, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE2B, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE2C, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE2D, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE2E, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE2F, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE30, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE31, 0x4063D020, + // Block 468, offset 0x7500 + 0x40646A20, 0x00000003, 0x4062BE32, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE33, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE34, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE35, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE36, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE37, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE38, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE39, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE3A, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE3B, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE3C, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE3D, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE3E, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062BE3F, 0x4063D020, 0x40646A20, 0x00000003, 0x4062BE40, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062BE41, 0x4063D020, + // Block 469, offset 0x7540 + 0x40646A20, 0x00000003, 0x4062BE21, 0x4063D020, 0x40647220, 0x00000003, + 0x4062BE22, 0x4063D020, 0x40647220, 0x00000003, 0x4062BE23, 0x4063D020, + 0x40647220, 0x00000003, 0x4062BE24, 0x4063D020, 0x40647220, 0x00000003, + 0x4062BE25, 0x4063D020, 0x40647220, 0x00000003, 0x4062BE26, 0x4063D020, + 0x40647220, 0x00000003, 0x4062BE21, 0x4063D020, 0x40648220, 0x00000003, + 0x4062BE22, 0x4063D020, 0x40648220, 0x00000003, 0x4062BE23, 0x4063D020, + 0x40648220, 0x00000003, 0x4062BE24, 0x4063D020, 0x40648220, 0x00000003, + 0x4062BE25, 0x4063D020, 0x40648220, 0x00000003, 0x4062BE26, 0x4063D020, + 0x40648220, 0x00000003, 0x4062BE27, 0x4063D020, 0x40648220, 0x00000003, + 0x4062BE28, 0x4063D020, 0x40648220, 0x00000003, 0x4062BE29, 0x4063D020, + 0x40648220, 0x00000003, 0x4062BE2A, 0x4063D020, + // Block 470, offset 0x7580 + 0x40648220, 0x00000003, 0x4062BE2B, 0x4063D020, 0x40648220, 0x00000003, + 0x4062BE2C, 0x4063D020, 0x40648220, 0x00000003, 0x4062BE2D, 0x4063D020, + 0x40648220, 0x00000003, 0x4062BE2E, 0x4063D020, 0x40648220, 0x00000003, + 0x4062BE2F, 0x4063D020, 0x40648220, 0x00000003, 0x4062BE21, 0x4063D020, + 0x40648420, 0x00000003, 0x4062BE22, 0x4063D020, 0x40648420, 0x00000003, + 0x4062BE23, 0x4063D020, 0x40648420, 0x00000003, 0x4062C021, 0x4063A820, + 0x40648C20, 0x00000002, 0x4062C021, 0x4063D020, 0x00000002, 0x4062C221, + 0x4063A820, 0x00000002, 0x4062C222, 0x4063A820, 0x00000002, 0x4062C223, + 0x4063A820, 0x00000002, 0x4062C224, 0x4063A820, 0x00000002, 0x4062C225, + 0x4063A820, 0x00000002, 0x4062C226, 0x4063A820, 0x00000002, 0x4062C227, + 0x4063A820, 0x00000002, 0x4062C228, 0x4063A820, + // Block 471, offset 0x75c0 + 0x00000002, 0x4062C229, 0x4063A820, 0x00000002, 0x4062C22A, 0x4063A820, + 0x00000002, 0x4062C22B, 0x4063A820, 0x00000002, 0x4062C22C, 0x4063A820, + 0x00000002, 0x4062C22D, 0x4063A820, 0x00000002, 0x4062C22E, 0x4063A820, + 0x00000002, 0x4062C22F, 0x4063A820, 0x00000002, 0x4062C230, 0x4063A820, + 0x00000002, 0x4062C231, 0x4063A820, 0x00000002, 0x4062C232, 0x4063A820, + 0x00000002, 0x4062C233, 0x4063A820, 0x00000002, 0x4062C234, 0x4063A820, + 0x00000002, 0x4062C235, 0x4063A820, 0x00000002, 0x4062C236, 0x4063A820, + 0x00000002, 0x4062C237, 0x4063A820, 0x00000002, 0x4062C238, 0x4063A820, + 0x00000002, 0x4062C239, 0x4063A820, 0x00000002, 0x4062C23A, 0x4063A820, + 0x00000002, 0x4062C23B, 0x4063A820, 0x00000002, 0x4062C23C, 0x4063A820, + 0x00000002, 0x4062C23D, 0x4063A820, 0x00000003, + // Block 472, offset 0x7600 + 0x4062C221, 0x4063A820, 0x40646420, 0x00000003, 0x4062C222, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C223, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C224, 0x4063A820, 0x40646420, 0x00000003, 0x4062C225, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C226, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C227, 0x4063A820, 0x40646420, 0x00000003, 0x4062C228, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C229, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C22A, 0x4063A820, 0x40646420, 0x00000003, 0x4062C22B, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C22C, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C22D, 0x4063A820, 0x40646420, 0x00000003, 0x4062C22E, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C22F, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C230, 0x4063A820, 0x40646420, 0x00000003, + // Block 473, offset 0x7640 + 0x4062C231, 0x4063A820, 0x40646420, 0x00000003, 0x4062C232, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C233, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C234, 0x4063A820, 0x40646420, 0x00000003, 0x4062C235, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C236, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C237, 0x4063A820, 0x40646420, 0x00000003, 0x4062C238, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C239, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C221, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C222, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C223, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C224, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C225, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C226, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C227, 0x4063A820, 0x40646A20, 0x00000003, + // Block 474, offset 0x7680 + 0x4062C228, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C229, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C22A, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C22B, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C22C, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C22D, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C22E, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C221, 0x4063A820, + 0x40647220, 0x00000003, 0x4062C222, 0x4063A820, 0x40647220, 0x00000003, + 0x4062C223, 0x4063A820, 0x40647220, 0x00000003, 0x4062C224, 0x4063A820, + 0x40647220, 0x00000003, 0x4062C225, 0x4063A820, 0x40647220, 0x00000003, + 0x4062C226, 0x4063A820, 0x40647220, 0x00000003, 0x4062C227, 0x4063A820, + 0x40647220, 0x00000003, 0x4062C228, 0x4063A820, 0x40647220, 0x00000003, + 0x4062C229, 0x4063A820, 0x40647220, 0x00000003, + // Block 475, offset 0x76c0 + 0x4062C22A, 0x4063A820, 0x40647220, 0x00000003, 0x4062C22B, 0x4063A820, + 0x40647220, 0x00000003, 0x4062C22C, 0x4063A820, 0x40647220, 0x00000003, + 0x4062C221, 0x4063A820, 0x40648220, 0x00000003, 0x4062C222, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C223, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C224, 0x4063A820, 0x40648220, 0x00000003, 0x4062C225, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C226, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C227, 0x4063A820, 0x40648220, 0x00000003, 0x4062C228, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C229, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C22A, 0x4063A820, 0x40648220, 0x00000003, 0x4062C22B, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C22C, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C22D, 0x4063A820, 0x40648220, 0x00000003, + // Block 476, offset 0x7700 + 0x4062C22E, 0x4063A820, 0x40648220, 0x00000003, 0x4062C22F, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C230, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C231, 0x4063A820, 0x40648220, 0x00000003, 0x4062C232, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C233, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C221, 0x4063A820, 0x40648420, 0x00000003, 0x4062C222, 0x4063A820, + 0x40648420, 0x00000003, 0x4062C223, 0x4063A820, 0x40648420, 0x00000003, + 0x4062C224, 0x4063A820, 0x40648420, 0x00000003, 0x4062C221, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C222, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C223, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C224, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C225, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C226, 0x4063A820, 0x40648C20, 0x00000003, + // Block 477, offset 0x7740 + 0x4062C227, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C228, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C229, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C22A, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C22B, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C22C, 0x4063A820, 0x40648C20, 0x00000002, + 0x4062C221, 0x4063AA20, 0x00000002, 0x4062C222, 0x4063AA20, 0x00000002, + 0x4062C223, 0x4063AA20, 0x00000002, 0x4062C224, 0x4063AA20, 0x00000002, + 0x4062C225, 0x4063AA20, 0x00000002, 0x4062C226, 0x4063AA20, 0x00000002, + 0x4062C227, 0x4063AA20, 0x00000002, 0x4062C228, 0x4063AA20, 0x00000002, + 0x4062C229, 0x4063AA20, 0x00000002, 0x4062C22A, 0x4063AA20, 0x00000002, + 0x4062C22B, 0x4063AA20, 0x00000002, 0x4062C22C, 0x4063AA20, 0x00000002, + 0x4062C22D, 0x4063AA20, 0x00000002, 0x4062C22E, + // Block 478, offset 0x7780 + 0x4063AA20, 0x00000002, 0x4062C22F, 0x4063AA20, 0x00000002, 0x4062C230, + 0x4063AA20, 0x00000002, 0x4062C231, 0x4063AA20, 0x00000002, 0x4062C232, + 0x4063AA20, 0x00000002, 0x4062C233, 0x4063AA20, 0x00000002, 0x4062C234, + 0x4063AA20, 0x00000002, 0x4062C235, 0x4063AA20, 0x00000002, 0x4062C236, + 0x4063AA20, 0x00000002, 0x4062C237, 0x4063AA20, 0x00000002, 0x4062C238, + 0x4063AA20, 0x00000002, 0x4062C239, 0x4063AA20, 0x00000002, 0x4062C23A, + 0x4063AA20, 0x00000002, 0x4062C23B, 0x4063AA20, 0x00000002, 0x4062C23C, + 0x4063AA20, 0x00000002, 0x4062C23D, 0x4063AA20, 0x00000002, 0x4062C23E, + 0x4063AA20, 0x00000002, 0x4062C23F, 0x4063AA20, 0x00000003, 0x4062C221, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062C222, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062C223, 0x4063AA20, 0x40646420, + // Block 479, offset 0x77c0 + 0x00000003, 0x4062C224, 0x4063AA20, 0x40646420, 0x00000003, 0x4062C225, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062C226, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062C227, 0x4063AA20, 0x40646420, 0x00000003, 0x4062C228, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062C229, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062C22A, 0x4063AA20, 0x40646420, 0x00000003, 0x4062C22B, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062C221, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062C222, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062C223, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062C224, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062C225, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062C226, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062C227, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062C228, 0x4063AA20, 0x40648C20, + // Block 480, offset 0x7800 + 0x00000002, 0x4062C221, 0x4063AC20, 0x00000002, 0x4062C222, 0x4063AC20, + 0x00000002, 0x4062C223, 0x4063AC20, 0x00000002, 0x4062C224, 0x4063AC20, + 0x00000002, 0x4062C225, 0x4063AC20, 0x00000002, 0x4062C226, 0x4063AC20, + 0x00000002, 0x4062C227, 0x4063AC20, 0x00000002, 0x4062C228, 0x4063AC20, + 0x00000002, 0x4062C229, 0x4063AC20, 0x00000002, 0x4062C22A, 0x4063AC20, + 0x00000002, 0x4062C22B, 0x4063AC20, 0x00000003, 0x4062C221, 0x4063AC20, + 0x40646420, 0x00000003, 0x4062C222, 0x4063AC20, 0x40646420, 0x00000003, + 0x4062C223, 0x4063AC20, 0x40646420, 0x00000003, 0x4062C224, 0x4063AC20, + 0x40646420, 0x00000003, 0x4062C225, 0x4063AC20, 0x40646420, 0x00000003, + 0x4062C226, 0x4063AC20, 0x40646420, 0x00000003, 0x4062C227, 0x4063AC20, + 0x40646420, 0x00000003, 0x4062C228, 0x4063AC20, + // Block 481, offset 0x7840 + 0x40646420, 0x00000003, 0x4062C229, 0x4063AC20, 0x40646420, 0x00000003, + 0x4062C22A, 0x4063AC20, 0x40646420, 0x00000003, 0x4062C22B, 0x4063AC20, + 0x40646420, 0x00000003, 0x4062C22C, 0x4063AC20, 0x40646420, 0x00000003, + 0x4062C22D, 0x4063AC20, 0x40646420, 0x00000003, 0x4062C22E, 0x4063AC20, + 0x40646420, 0x00000003, 0x4062C22F, 0x4063AC20, 0x40646420, 0x00000003, + 0x4062C221, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C222, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C223, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C224, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C225, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C226, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C227, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C228, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C229, 0x4063AC20, + // Block 482, offset 0x7880 + 0x40648C20, 0x00000003, 0x4062C22A, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C22B, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C22C, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C22D, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C22E, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C22F, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C230, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C231, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C232, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C233, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C234, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C235, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C236, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C237, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C238, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C239, 0x4063AC20, + // Block 483, offset 0x78c0 + 0x40648C20, 0x00000003, 0x4062C23A, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C23B, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C23C, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C23D, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C23E, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C23F, 0x4063AC20, + 0x40648C20, 0x00000003, 0x4062C240, 0x4063AC20, 0x40648C20, 0x00000003, + 0x4062C241, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062C242, 0x4063AC20, + 0x40648C20, 0x00000002, 0x4062C221, 0x4063B020, 0x00000002, 0x4062C222, + 0x4063B020, 0x00000002, 0x4062C223, 0x4063B020, 0x00000002, 0x4062C224, + 0x4063B020, 0x00000002, 0x4062C225, 0x4063B020, 0x00000002, 0x4062C226, + 0x4063B020, 0x00000002, 0x4062C227, 0x4063B020, 0x00000002, 0x4062C228, + 0x4063B020, 0x00000002, 0x4062C229, 0x4063B020, + // Block 484, offset 0x7900 + 0x00000002, 0x4062C22A, 0x4063B020, 0x00000002, 0x4062C22B, 0x4063B020, + 0x00000002, 0x4062C22C, 0x4063B020, 0x00000002, 0x4062C22D, 0x4063B020, + 0x00000002, 0x4062C22E, 0x4063B020, 0x00000003, 0x4062C221, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C222, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C223, 0x4063B020, 0x40646420, 0x00000003, 0x4062C224, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C225, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C226, 0x4063B020, 0x40646420, 0x00000003, 0x4062C221, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C222, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C223, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C224, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C225, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C226, 0x4063B020, 0x40646A20, 0x00000003, + // Block 485, offset 0x7940 + 0x4062C227, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C228, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C229, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C22A, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C22B, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C22C, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C22D, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C221, 0x4063B020, + 0x40647220, 0x00000003, 0x4062C222, 0x4063B020, 0x40647220, 0x00000003, + 0x4062C223, 0x4063B020, 0x40647220, 0x00000003, 0x4062C221, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C222, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C223, 0x4063B020, 0x40648220, 0x00000003, 0x4062C224, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C225, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C226, 0x4063B020, 0x40648220, 0x00000003, + // Block 486, offset 0x7980 + 0x4062C227, 0x4063B020, 0x40648220, 0x00000003, 0x4062C228, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C229, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C22A, 0x4063B020, 0x40648220, 0x00000003, 0x4062C22B, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C22C, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C221, 0x4063B020, 0x40648420, 0x00000003, 0x4062C222, 0x4063B020, + 0x40648420, 0x00000003, 0x4062C223, 0x4063B020, 0x40648420, 0x00000003, + 0x4062C224, 0x4063B020, 0x40648420, 0x00000002, 0x4062C221, 0x4063B220, + 0x00000002, 0x4062C222, 0x4063B220, 0x00000003, 0x4062C221, 0x4063B220, + 0x40646A20, 0x00000002, 0x4062C221, 0x4063B420, 0x00000002, 0x4062C222, + 0x4063B420, 0x00000002, 0x4062C223, 0x4063B420, 0x00000002, 0x4062C224, + 0x4063B420, 0x00000002, 0x4062C225, 0x4063B420, + // Block 487, offset 0x79c0 + 0x00000002, 0x4062C226, 0x4063B420, 0x00000002, 0x4062C227, 0x4063B420, + 0x00000002, 0x4062C228, 0x4063B420, 0x00000002, 0x4062C229, 0x4063B420, + 0x00000002, 0x4062C22A, 0x4063B420, 0x00000002, 0x4062C22B, 0x4063B420, + 0x00000002, 0x4062C22C, 0x4063B420, 0x00000002, 0x4062C22D, 0x4063B420, + 0x00000002, 0x4062C22E, 0x4063B420, 0x00000003, 0x4062C221, 0x4063B420, + 0x40646420, 0x00000003, 0x4062C222, 0x4063B420, 0x40646420, 0x00000003, + 0x4062C223, 0x4063B420, 0x40646420, 0x00000003, 0x4062C224, 0x4063B420, + 0x40646420, 0x00000003, 0x4062C225, 0x4063B420, 0x40646420, 0x00000003, + 0x4062C226, 0x4063B420, 0x40646420, 0x00000003, 0x4062C227, 0x4063B420, + 0x40646420, 0x00000003, 0x4062C228, 0x4063B420, 0x40646420, 0x00000003, + 0x4062C229, 0x4063B420, 0x40646420, 0x00000003, + // Block 488, offset 0x7a00 + 0x4062C22A, 0x4063B420, 0x40646420, 0x00000003, 0x4062C22B, 0x4063B420, + 0x40646420, 0x00000003, 0x4062C22C, 0x4063B420, 0x40646420, 0x00000003, + 0x4062C22D, 0x4063B420, 0x40646420, 0x00000003, 0x4062C221, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C222, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C223, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C224, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C225, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C226, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C227, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C228, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C229, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C22A, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C22B, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C22C, 0x4063B420, 0x40646A20, 0x00000003, + // Block 489, offset 0x7a40 + 0x4062C22D, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C22E, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C22F, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C230, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C231, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C232, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C233, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C234, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C235, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C236, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C237, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C238, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C239, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C23A, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C23B, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C23C, 0x4063B420, 0x40646A20, 0x00000003, + // Block 490, offset 0x7a80 + 0x4062C23D, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C23E, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C23F, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C240, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C241, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C242, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C243, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C244, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C245, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C246, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C247, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C248, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C249, 0x4063B420, 0x40646A20, 0x00000003, 0x4062C24A, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062C24B, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062C24C, 0x4063B420, 0x40646A20, 0x00000003, + // Block 491, offset 0x7ac0 + 0x4062C221, 0x4063B420, 0x40647220, 0x00000003, 0x4062C222, 0x4063B420, + 0x40647220, 0x00000003, 0x4062C223, 0x4063B420, 0x40647220, 0x00000003, + 0x4062C224, 0x4063B420, 0x40647220, 0x00000003, 0x4062C225, 0x4063B420, + 0x40647220, 0x00000003, 0x4062C221, 0x4063B420, 0x40648220, 0x00000003, + 0x4062C222, 0x4063B420, 0x40648220, 0x00000003, 0x4062C223, 0x4063B420, + 0x40648220, 0x00000003, 0x4062C224, 0x4063B420, 0x40648220, 0x00000003, + 0x4062C225, 0x4063B420, 0x40648220, 0x00000003, 0x4062C226, 0x4063B420, + 0x40648220, 0x00000003, 0x4062C227, 0x4063B420, 0x40648220, 0x00000003, + 0x4062C228, 0x4063B420, 0x40648220, 0x00000003, 0x4062C229, 0x4063B420, + 0x40648220, 0x00000003, 0x4062C22A, 0x4063B420, 0x40648220, 0x00000003, + 0x4062C22B, 0x4063B420, 0x40648220, 0x00000003, + // Block 492, offset 0x7b00 + 0x4062C22C, 0x4063B420, 0x40648220, 0x00000003, 0x4062C22D, 0x4063B420, + 0x40648220, 0x00000003, 0x4062C22E, 0x4063B420, 0x40648220, 0x00000003, + 0x4062C22F, 0x4063B420, 0x40648220, 0x00000003, 0x4062C230, 0x4063B420, + 0x40648220, 0x00000003, 0x4062C231, 0x4063B420, 0x40648220, 0x00000003, + 0x4062C232, 0x4063B420, 0x40648220, 0x00000003, 0x4062C233, 0x4063B420, + 0x40648220, 0x00000003, 0x4062C234, 0x4063B420, 0x40648220, 0x00000003, + 0x4062C235, 0x4063B420, 0x40648220, 0x00000003, 0x4062C236, 0x4063B420, + 0x40648220, 0x00000003, 0x4062C221, 0x4063B420, 0x40648420, 0x00000003, + 0x4062C222, 0x4063B420, 0x40648420, 0x00000003, 0x4062C223, 0x4063B420, + 0x40648420, 0x00000003, 0x4062C224, 0x4063B420, 0x40648420, 0x00000003, + 0x4062C225, 0x4063B420, 0x40648420, 0x00000003, + // Block 493, offset 0x7b40 + 0x4062C226, 0x4063B420, 0x40648420, 0x00000003, 0x4062C227, 0x4063B420, + 0x40648420, 0x00000003, 0x4062C221, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C222, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C223, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C224, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C225, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C226, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C227, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C228, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C229, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C22A, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C22B, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C22C, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C22D, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C22E, 0x4063B420, 0x40648C20, 0x00000003, + // Block 494, offset 0x7b80 + 0x4062C22F, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C230, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C231, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C232, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C233, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C234, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C235, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C236, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C237, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C238, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C239, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C23A, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C23B, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C23C, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C23D, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C23E, 0x4063B420, 0x40648C20, 0x00000003, + // Block 495, offset 0x7bc0 + 0x4062C23F, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C240, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C241, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C242, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C243, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C244, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062C245, 0x4063B420, 0x40648C20, 0x00000003, 0x4062C246, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062C247, 0x4063B420, 0x40648C20, 0x00000002, + 0x4062C221, 0x4063B620, 0x00000002, 0x4062C222, 0x4063B620, 0x00000002, + 0x4062C223, 0x4063B620, 0x00000002, 0x4062C224, 0x4063B620, 0x00000002, + 0x4062C225, 0x4063B620, 0x00000002, 0x4062C226, 0x4063B620, 0x00000002, + 0x4062C227, 0x4063B620, 0x00000002, 0x4062C228, 0x4063B620, 0x00000002, + 0x4062C229, 0x4063B620, 0x00000002, 0x4062C22A, + // Block 496, offset 0x7c00 + 0x4063B620, 0x00000002, 0x4062C22B, 0x4063B620, 0x00000002, 0x4062C22C, + 0x4063B620, 0x00000002, 0x4062C22D, 0x4063B620, 0x00000002, 0x4062C22E, + 0x4063B620, 0x00000002, 0x4062C22F, 0x4063B620, 0x00000002, 0x4062C230, + 0x4063B620, 0x00000002, 0x4062C231, 0x4063B620, 0x00000002, 0x4062C232, + 0x4063B620, 0x00000002, 0x4062C233, 0x4063B620, 0x00000002, 0x4062C234, + 0x4063B620, 0x00000002, 0x4062C235, 0x4063B620, 0x00000002, 0x4062C236, + 0x4063B620, 0x00000002, 0x4062C237, 0x4063B620, 0x00000002, 0x4062C238, + 0x4063B620, 0x00000002, 0x4062C239, 0x4063B620, 0x00000002, 0x4062C23A, + 0x4063B620, 0x00000002, 0x4062C23B, 0x4063B620, 0x00000002, 0x4062C23C, + 0x4063B620, 0x00000002, 0x4062C23D, 0x4063B620, 0x00000002, 0x4062C23E, + 0x4063B620, 0x00000002, 0x4062C23F, 0x4063B620, + // Block 497, offset 0x7c40 + 0x00000002, 0x4062C240, 0x4063B620, 0x00000002, 0x4062C241, 0x4063B620, + 0x00000002, 0x4062C242, 0x4063B620, 0x00000002, 0x4062C243, 0x4063B620, + 0x00000002, 0x4062C244, 0x4063B620, 0x00000002, 0x4062C245, 0x4063B620, + 0x00000002, 0x4062C246, 0x4063B620, 0x00000002, 0x4062C247, 0x4063B620, + 0x00000002, 0x4062C221, 0x4063B820, 0x00000002, 0x4062C222, 0x4063B820, + 0x00000002, 0x4062C223, 0x4063B820, 0x00000002, 0x4062C224, 0x4063B820, + 0x00000002, 0x4062C225, 0x4063B820, 0x00000002, 0x4062C226, 0x4063B820, + 0x00000002, 0x4062C227, 0x4063B820, 0x00000002, 0x4062C228, 0x4063B820, + 0x00000002, 0x4062C229, 0x4063B820, 0x00000002, 0x4062C22A, 0x4063B820, + 0x00000002, 0x4062C22B, 0x4063B820, 0x00000002, 0x4062C22C, 0x4063B820, + 0x00000002, 0x4062C22D, 0x4063B820, 0x00000002, + // Block 498, offset 0x7c80 + 0x4062C22E, 0x4063B820, 0x00000002, 0x4062C22F, 0x4063B820, 0x00000002, + 0x4062C230, 0x4063B820, 0x00000002, 0x4062C231, 0x4063B820, 0x00000002, + 0x4062C232, 0x4063B820, 0x00000002, 0x4062C233, 0x4063B820, 0x00000002, + 0x4062C234, 0x4063B820, 0x00000002, 0x4062C235, 0x4063B820, 0x00000002, + 0x4062C236, 0x4063B820, 0x00000002, 0x4062C237, 0x4063B820, 0x00000002, + 0x4062C238, 0x4063B820, 0x00000002, 0x4062C239, 0x4063B820, 0x00000002, + 0x4062C23A, 0x4063B820, 0x00000002, 0x4062C23B, 0x4063B820, 0x00000002, + 0x4062C23C, 0x4063B820, 0x00000002, 0x4062C23D, 0x4063B820, 0x00000002, + 0x4062C23E, 0x4063B820, 0x00000002, 0x4062C23F, 0x4063B820, 0x00000002, + 0x4062C240, 0x4063B820, 0x00000002, 0x4062C241, 0x4063B820, 0x00000002, + 0x4062C242, 0x4063B820, 0x00000002, 0x4062C243, + // Block 499, offset 0x7cc0 + 0x4063B820, 0x00000002, 0x4062C244, 0x4063B820, 0x00000002, 0x4062C245, + 0x4063B820, 0x00000002, 0x4062C246, 0x4063B820, 0x00000002, 0x4062C247, + 0x4063B820, 0x00000002, 0x4062C248, 0x4063B820, 0x00000002, 0x4062C249, + 0x4063B820, 0x00000002, 0x4062C24A, 0x4063B820, 0x00000002, 0x4062C24B, + 0x4063B820, 0x00000002, 0x4062C24C, 0x4063B820, 0x00000002, 0x4062C24D, + 0x4063B820, 0x00000002, 0x4062C24E, 0x4063B820, 0x00000002, 0x4062C24F, + 0x4063B820, 0x00000002, 0x4062C250, 0x4063B820, 0x00000002, 0x4062C251, + 0x4063B820, 0x00000002, 0x4062C252, 0x4063B820, 0x00000002, 0x4062C253, + 0x4063B820, 0x00000002, 0x4062C254, 0x4063B820, 0x00000002, 0x4062C255, + 0x4063B820, 0x00000002, 0x4062C256, 0x4063B820, 0x00000003, 0x4062C221, + 0x4063B820, 0x40646420, 0x00000003, 0x4062C222, + // Block 500, offset 0x7d00 + 0x4063B820, 0x40646420, 0x00000003, 0x4062C223, 0x4063B820, 0x40646420, + 0x00000003, 0x4062C224, 0x4063B820, 0x40646420, 0x00000003, 0x4062C225, + 0x4063B820, 0x40646420, 0x00000003, 0x4062C221, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062C222, 0x4063B820, 0x40646A20, 0x00000003, 0x4062C223, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062C224, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062C225, 0x4063B820, 0x40646A20, 0x00000003, 0x4062C226, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062C227, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062C228, 0x4063B820, 0x40646A20, 0x00000003, 0x4062C229, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062C22A, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062C22B, 0x4063B820, 0x40646A20, 0x00000003, 0x4062C22C, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062C22D, + // Block 501, offset 0x7d40 + 0x4063B820, 0x40646A20, 0x00000003, 0x4062C22E, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062C22F, 0x4063B820, 0x40646A20, 0x00000003, 0x4062C230, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062C231, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062C221, 0x4063B820, 0x40647220, 0x00000003, 0x4062C222, + 0x4063B820, 0x40647220, 0x00000003, 0x4062C223, 0x4063B820, 0x40647220, + 0x00000003, 0x4062C221, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C222, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C223, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C224, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C225, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C226, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C227, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C228, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C229, + // Block 502, offset 0x7d80 + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C22A, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C22B, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C22C, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C22D, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C22E, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C22F, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C230, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C231, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C232, + 0x4063B820, 0x40648C20, 0x00000002, 0x4062C221, 0x4063BA20, 0x00000002, + 0x4062C222, 0x4063BA20, 0x00000002, 0x4062C223, 0x4063BA20, 0x00000002, + 0x4062C224, 0x4063BA20, 0x00000002, 0x4062C225, 0x4063BA20, 0x00000002, + 0x4062C226, 0x4063BA20, 0x00000002, 0x4062C227, 0x4063BA20, 0x00000002, + 0x4062C228, 0x4063BA20, 0x00000002, 0x4062C229, + // Block 503, offset 0x7dc0 + 0x4063BA20, 0x00000002, 0x4062C22A, 0x4063BA20, 0x00000002, 0x4062C22B, + 0x4063BA20, 0x00000002, 0x4062C22C, 0x4063BA20, 0x00000002, 0x4062C22D, + 0x4063BA20, 0x00000002, 0x4062C22E, 0x4063BA20, 0x00000002, 0x4062C22F, + 0x4063BA20, 0x00000002, 0x4062C230, 0x4063BA20, 0x00000002, 0x4062C231, + 0x4063BA20, 0x00000003, 0x4062C221, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062C222, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062C223, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062C224, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062C225, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062C226, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062C227, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062C228, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062C229, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062C22A, 0x4063BA20, + // Block 504, offset 0x7e00 + 0x40646A20, 0x00000003, 0x4062C22B, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062C22C, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062C22D, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062C22E, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062C22F, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062C230, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062C231, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062C232, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062C233, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062C234, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062C235, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062C236, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062C237, 0x4063BA20, 0x40646A20, 0x00000003, + 0x4062C238, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062C239, 0x4063BA20, + 0x40646A20, 0x00000003, 0x4062C23A, 0x4063BA20, + // Block 505, offset 0x7e40 + 0x40646A20, 0x00000003, 0x4062C221, 0x4063BA20, 0x40647220, 0x00000003, + 0x4062C221, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062C222, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062C223, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062C224, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062C225, 0x4063BA20, + 0x40648C20, 0x00000003, 0x4062C226, 0x4063BA20, 0x40648C20, 0x00000003, + 0x4062C227, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062C228, 0x4063BA20, + 0x40648C20, 0x00000002, 0x4062C221, 0x4063BC20, 0x00000002, 0x4062C222, + 0x4063BC20, 0x00000002, 0x4062C223, 0x4063BC20, 0x00000002, 0x4062C224, + 0x4063BC20, 0x00000002, 0x4062C225, 0x4063BC20, 0x00000002, 0x4062C221, + 0x4063BE20, 0x00000002, 0x4062C222, 0x4063BE20, 0x00000002, 0x4062C223, + 0x4063BE20, 0x00000002, 0x4062C224, 0x4063BE20, + // Block 506, offset 0x7e80 + 0x00000002, 0x4062C225, 0x4063BE20, 0x00000002, 0x4062C226, 0x4063BE20, + 0x00000002, 0x4062C227, 0x4063BE20, 0x00000002, 0x4062C228, 0x4063BE20, + 0x00000002, 0x4062C229, 0x4063BE20, 0x00000002, 0x4062C22A, 0x4063BE20, + 0x00000002, 0x4062C22B, 0x4063BE20, 0x00000002, 0x4062C22C, 0x4063BE20, + 0x00000002, 0x4062C22D, 0x4063BE20, 0x00000002, 0x4062C22E, 0x4063BE20, + 0x00000002, 0x4062C221, 0x4063C020, 0x00000002, 0x4062C222, 0x4063C020, + 0x00000002, 0x4062C223, 0x4063C020, 0x00000002, 0x4062C224, 0x4063C020, + 0x00000002, 0x4062C225, 0x4063C020, 0x00000002, 0x4062C226, 0x4063C020, + 0x00000002, 0x4062C227, 0x4063C020, 0x00000002, 0x4062C228, 0x4063C020, + 0x00000002, 0x4062C229, 0x4063C020, 0x00000002, 0x4062C22A, 0x4063C020, + 0x00000002, 0x4062C22B, 0x4063C020, 0x00000002, + // Block 507, offset 0x7ec0 + 0x4062C22C, 0x4063C020, 0x00000002, 0x4062C22D, 0x4063C020, 0x00000002, + 0x4062C22E, 0x4063C020, 0x00000002, 0x4062C22F, 0x4063C020, 0x00000002, + 0x4062C230, 0x4063C020, 0x00000002, 0x4062C231, 0x4063C020, 0x00000002, + 0x4062C232, 0x4063C020, 0x00000002, 0x4062C233, 0x4063C020, 0x00000002, + 0x4062C234, 0x4063C020, 0x00000002, 0x4062C235, 0x4063C020, 0x00000002, + 0x4062C236, 0x4063C020, 0x00000002, 0x4062C237, 0x4063C020, 0x00000002, + 0x4062C238, 0x4063C020, 0x00000002, 0x4062C239, 0x4063C020, 0x00000002, + 0x4062C23A, 0x4063C020, 0x00000002, 0x4062C23B, 0x4063C020, 0x00000002, + 0x4062C23C, 0x4063C020, 0x00000002, 0x4062C23D, 0x4063C020, 0x00000002, + 0x4062C23E, 0x4063C020, 0x00000002, 0x4062C23F, 0x4063C020, 0x00000002, + 0x4062C240, 0x4063C020, 0x00000002, 0x4062C241, + // Block 508, offset 0x7f00 + 0x4063C020, 0x00000002, 0x4062C242, 0x4063C020, 0x00000002, 0x4062C243, + 0x4063C020, 0x00000002, 0x4062C244, 0x4063C020, 0x00000002, 0x4062C245, + 0x4063C020, 0x00000002, 0x4062C246, 0x4063C020, 0x00000002, 0x4062C247, + 0x4063C020, 0x00000002, 0x4062C248, 0x4063C020, 0x00000002, 0x4062C249, + 0x4063C020, 0x00000002, 0x4062C24A, 0x4063C020, 0x00000002, 0x4062C24B, + 0x4063C020, 0x00000002, 0x4062C24C, 0x4063C020, 0x00000003, 0x4062C221, + 0x4063C020, 0x40646420, 0x00000003, 0x4062C222, 0x4063C020, 0x40646420, + 0x00000003, 0x4062C223, 0x4063C020, 0x40646420, 0x00000003, 0x4062C224, + 0x4063C020, 0x40646420, 0x00000003, 0x4062C225, 0x4063C020, 0x40646420, + 0x00000003, 0x4062C226, 0x4063C020, 0x40646420, 0x00000003, 0x4062C227, + 0x4063C020, 0x40646420, 0x00000003, 0x4062C228, + // Block 509, offset 0x7f40 + 0x4063C020, 0x40646420, 0x00000003, 0x4062C221, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C222, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C223, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C224, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C225, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C226, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C227, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C228, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C229, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C22A, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C22B, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C22C, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C22D, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C22E, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C22F, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C230, + // Block 510, offset 0x7f80 + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C231, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C232, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C233, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C234, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C235, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C236, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C237, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C238, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C239, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C23A, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C23B, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C23C, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C23D, 0x4063C020, 0x40648C20, + 0x00000003, 0x4062C23E, 0x4063C020, 0x40648C20, 0x00000003, 0x4062C23F, + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C240, + // Block 511, offset 0x7fc0 + 0x4063C020, 0x40648C20, 0x00000003, 0x4062C241, 0x4063C020, 0x40648C20, + 0x00000002, 0x4062C221, 0x4063C220, 0x00000002, 0x4062C222, 0x4063C220, + 0x00000002, 0x4062C223, 0x4063C220, 0x00000002, 0x4062C224, 0x4063C220, + 0x00000002, 0x4062C225, 0x4063C220, 0x00000002, 0x4062C226, 0x4063C220, + 0x00000002, 0x4062C227, 0x4063C220, 0x00000002, 0x4062C228, 0x4063C220, + 0x00000002, 0x4062C229, 0x4063C220, 0x00000002, 0x4062C22A, 0x4063C220, + 0x00000002, 0x4062C22B, 0x4063C220, 0x00000002, 0x4062C22C, 0x4063C220, + 0x00000002, 0x4062C22D, 0x4063C220, 0x00000002, 0x4062C22E, 0x4063C220, + 0x00000002, 0x4062C22F, 0x4063C220, 0x00000002, 0x4062C230, 0x4063C220, + 0x00000002, 0x4062C231, 0x4063C220, 0x00000002, 0x4062C232, 0x4063C220, + 0x00000002, 0x4062C233, 0x4063C220, 0x00000002, + // Block 512, offset 0x8000 + 0x4062C234, 0x4063C220, 0x00000002, 0x4062C235, 0x4063C220, 0x00000002, + 0x4062C236, 0x4063C220, 0x00000002, 0x4062C237, 0x4063C220, 0x00000002, + 0x4062C238, 0x4063C220, 0x00000002, 0x4062C239, 0x4063C220, 0x00000002, + 0x4062C23A, 0x4063C220, 0x00000002, 0x4062C23B, 0x4063C220, 0x00000002, + 0x4062C23C, 0x4063C220, 0x00000002, 0x4062C23D, 0x4063C220, 0x00000002, + 0x4062C23E, 0x4063C220, 0x00000002, 0x4062C23F, 0x4063C220, 0x00000002, + 0x4062C240, 0x4063C220, 0x00000002, 0x4062C241, 0x4063C220, 0x00000002, + 0x4062C242, 0x4063C220, 0x00000002, 0x4062C243, 0x4063C220, 0x00000002, + 0x4062C244, 0x4063C220, 0x00000002, 0x4062C245, 0x4063C220, 0x00000002, + 0x4062C246, 0x4063C220, 0x00000002, 0x4062C247, 0x4063C220, 0x00000002, + 0x4062C248, 0x4063C220, 0x00000002, 0x4062C249, + // Block 513, offset 0x8040 + 0x4063C220, 0x00000002, 0x4062C24A, 0x4063C220, 0x00000002, 0x4062C24B, + 0x4063C220, 0x00000002, 0x4062C24C, 0x4063C220, 0x00000002, 0x4062C24D, + 0x4063C220, 0x00000002, 0x4062C24E, 0x4063C220, 0x00000002, 0x4062C24F, + 0x4063C220, 0x00000002, 0x4062C250, 0x4063C220, 0x00000002, 0x4062C251, + 0x4063C220, 0x00000002, 0x4062C252, 0x4063C220, 0x00000002, 0x4062C253, + 0x4063C220, 0x00000002, 0x4062C254, 0x4063C220, 0x00000003, 0x4062C221, + 0x4063C220, 0x40646420, 0x00000003, 0x4062C222, 0x4063C220, 0x40646420, + 0x00000003, 0x4062C223, 0x4063C220, 0x40646420, 0x00000003, 0x4062C224, + 0x4063C220, 0x40646420, 0x00000003, 0x4062C225, 0x4063C220, 0x40646420, + 0x00000003, 0x4062C226, 0x4063C220, 0x40646420, 0x00000003, 0x4062C227, + 0x4063C220, 0x40646420, 0x00000003, 0x4062C228, + // Block 514, offset 0x8080 + 0x4063C220, 0x40646420, 0x00000003, 0x4062C229, 0x4063C220, 0x40646420, + 0x00000003, 0x4062C22A, 0x4063C220, 0x40646420, 0x00000003, 0x4062C221, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C222, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062C223, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C224, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C225, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062C226, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C227, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C228, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062C229, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C22A, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C22B, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062C22C, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C22D, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C22E, + // Block 515, offset 0x80c0 + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C22F, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062C230, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C231, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C232, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062C221, 0x4063C220, 0x40647220, 0x00000003, 0x4062C222, + 0x4063C220, 0x40647220, 0x00000003, 0x4062C223, 0x4063C220, 0x40647220, + 0x00000003, 0x4062C221, 0x4063C220, 0x40648C20, 0x00000003, 0x4062C222, + 0x4063C220, 0x40648C20, 0x00000003, 0x4062C221, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C222, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C223, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C224, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C225, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C226, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C227, + // Block 516, offset 0x8100 + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C228, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C229, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C22A, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C22B, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C22C, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C22D, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C22E, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C22F, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C230, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C231, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C232, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C233, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C234, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C235, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C236, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C237, + // Block 517, offset 0x8140 + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C238, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C239, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C23A, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C23B, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C23C, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C23D, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C23E, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C23F, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C240, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C241, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C242, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C243, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C244, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C245, 0x4063C420, 0x40646A20, 0x00000003, 0x4062C246, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C247, + // Block 518, offset 0x8180 + 0x4063C420, 0x40646A20, 0x00000003, 0x4062C248, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062C221, 0x4063C420, 0x40647220, 0x00000003, 0x4062C222, + 0x4063C420, 0x40647220, 0x00000003, 0x4062C223, 0x4063C420, 0x40647220, + 0x00000003, 0x4062C224, 0x4063C420, 0x40647220, 0x00000003, 0x4062C225, + 0x4063C420, 0x40647220, 0x00000002, 0x4062C221, 0x4063C820, 0x00000002, + 0x4062C222, 0x4063C820, 0x00000002, 0x4062C223, 0x4063C820, 0x00000002, + 0x4062C224, 0x4063C820, 0x00000002, 0x4062C225, 0x4063C820, 0x00000002, + 0x4062C226, 0x4063C820, 0x00000002, 0x4062C227, 0x4063C820, 0x00000002, + 0x4062C228, 0x4063C820, 0x00000002, 0x4062C229, 0x4063C820, 0x00000002, + 0x4062C22A, 0x4063C820, 0x00000002, 0x4062C22B, 0x4063C820, 0x00000002, + 0x4062C22C, 0x4063C820, 0x00000002, 0x4062C22D, + // Block 519, offset 0x81c0 + 0x4063C820, 0x00000002, 0x4062C22E, 0x4063C820, 0x00000002, 0x4062C22F, + 0x4063C820, 0x00000002, 0x4062C230, 0x4063C820, 0x00000002, 0x4062C231, + 0x4063C820, 0x00000002, 0x4062C232, 0x4063C820, 0x00000002, 0x4062C233, + 0x4063C820, 0x00000002, 0x4062C234, 0x4063C820, 0x00000002, 0x4062C235, + 0x4063C820, 0x00000002, 0x4062C236, 0x4063C820, 0x00000002, 0x4062C237, + 0x4063C820, 0x00000002, 0x4062C238, 0x4063C820, 0x00000002, 0x4062C239, + 0x4063C820, 0x00000002, 0x4062C23A, 0x4063C820, 0x00000002, 0x4062C23B, + 0x4063C820, 0x00000002, 0x4062C23C, 0x4063C820, 0x00000002, 0x4062C23D, + 0x4063C820, 0x00000002, 0x4062C23E, 0x4063C820, 0x00000002, 0x4062C23F, + 0x4063C820, 0x00000002, 0x4062C240, 0x4063C820, 0x00000002, 0x4062C241, + 0x4063C820, 0x00000002, 0x4062C242, 0x4063C820, + // Block 520, offset 0x8200 + 0x00000002, 0x4062C243, 0x4063C820, 0x00000002, 0x4062C244, 0x4063C820, + 0x00000002, 0x4062C245, 0x4063C820, 0x00000002, 0x4062C246, 0x4063C820, + 0x00000002, 0x4062C247, 0x4063C820, 0x00000002, 0x4062C221, 0x4063CA20, + 0x00000002, 0x4062C222, 0x4063CA20, 0x00000002, 0x4062C223, 0x4063CA20, + 0x00000002, 0x4062C224, 0x4063CA20, 0x00000002, 0x4062C225, 0x4063CA20, + 0x00000002, 0x4062C226, 0x4063CA20, 0x00000002, 0x4062C227, 0x4063CA20, + 0x00000002, 0x4062C228, 0x4063CA20, 0x00000002, 0x4062C229, 0x4063CA20, + 0x00000002, 0x4062C22A, 0x4063CA20, 0x00000002, 0x4062C22B, 0x4063CA20, + 0x00000002, 0x4062C22C, 0x4063CA20, 0x00000002, 0x4062C22D, 0x4063CA20, + 0x00000002, 0x4062C22E, 0x4063CA20, 0x00000002, 0x4062C22F, 0x4063CA20, + 0x00000002, 0x4062C230, 0x4063CA20, 0x00000002, + // Block 521, offset 0x8240 + 0x4062C231, 0x4063CA20, 0x00000002, 0x4062C232, 0x4063CA20, 0x00000002, + 0x4062C233, 0x4063CA20, 0x00000002, 0x4062C234, 0x4063CA20, 0x00000002, + 0x4062C235, 0x4063CA20, 0x00000002, 0x4062C236, 0x4063CA20, 0x00000002, + 0x4062C237, 0x4063CA20, 0x00000002, 0x4062C238, 0x4063CA20, 0x00000002, + 0x4062C239, 0x4063CA20, 0x00000002, 0x4062C23A, 0x4063CA20, 0x00000002, + 0x4062C23B, 0x4063CA20, 0x00000002, 0x4062C23C, 0x4063CA20, 0x00000002, + 0x4062C23D, 0x4063CA20, 0x00000002, 0x4062C23E, 0x4063CA20, 0x00000002, + 0x4062C23F, 0x4063CA20, 0x00000002, 0x4062C240, 0x4063CA20, 0x00000002, + 0x4062C241, 0x4063CA20, 0x00000002, 0x4062C242, 0x4063CA20, 0x00000002, + 0x4062C243, 0x4063CA20, 0x00000002, 0x4062C244, 0x4063CA20, 0x00000002, + 0x4062C245, 0x4063CA20, 0x00000002, 0x4062C246, + // Block 522, offset 0x8280 + 0x4063CA20, 0x00000002, 0x4062C247, 0x4063CA20, 0x00000002, 0x4062C248, + 0x4063CA20, 0x00000002, 0x4062C249, 0x4063CA20, 0x00000002, 0x4062C24A, + 0x4063CA20, 0x00000002, 0x4062C24B, 0x4063CA20, 0x00000002, 0x4062C24C, + 0x4063CA20, 0x00000002, 0x4062C24D, 0x4063CA20, 0x00000002, 0x4062C24E, + 0x4063CA20, 0x00000002, 0x4062C24F, 0x4063CA20, 0x00000002, 0x4062C250, + 0x4063CA20, 0x00000002, 0x4062C251, 0x4063CA20, 0x00000002, 0x4062C252, + 0x4063CA20, 0x00000002, 0x4062C253, 0x4063CA20, 0x00000002, 0x4062C254, + 0x4063CA20, 0x00000002, 0x4062C255, 0x4063CA20, 0x00000002, 0x4062C256, + 0x4063CA20, 0x00000002, 0x4062C257, 0x4063CA20, 0x00000002, 0x4062C258, + 0x4063CA20, 0x00000002, 0x4062C259, 0x4063CA20, 0x00000002, 0x4062C25A, + 0x4063CA20, 0x00000002, 0x4062C25B, 0x4063CA20, + // Block 523, offset 0x82c0 + 0x00000002, 0x4062C25C, 0x4063CA20, 0x00000002, 0x4062C25D, 0x4063CA20, + 0x00000002, 0x4062C25E, 0x4063CA20, 0x00000002, 0x4062C25F, 0x4063CA20, + 0x00000002, 0x4062C260, 0x4063CA20, 0x00000002, 0x4062C261, 0x4063CA20, + 0x00000002, 0x4062C262, 0x4063CA20, 0x00000002, 0x4062C263, 0x4063CA20, + 0x00000002, 0x4062C264, 0x4063CA20, 0x00000002, 0x4062C265, 0x4063CA20, + 0x00000002, 0x4062C266, 0x4063CA20, 0x00000002, 0x4062C267, 0x4063CA20, + 0x00000002, 0x4062C268, 0x4063CA20, 0x00000002, 0x4062C269, 0x4063CA20, + 0x00000002, 0x4062C26A, 0x4063CA20, 0x00000002, 0x4062C26B, 0x4063CA20, + 0x00000002, 0x4062C26C, 0x4063CA20, 0x00000002, 0x4062C26D, 0x4063CA20, + 0x00000003, 0x4062C221, 0x4063CA20, 0x40646420, 0x00000003, 0x4062C222, + 0x4063CA20, 0x40646420, 0x00000003, 0x4062C223, + // Block 524, offset 0x8300 + 0x4063CA20, 0x40646420, 0x00000003, 0x4062C224, 0x4063CA20, 0x40646420, + 0x00000003, 0x4062C225, 0x4063CA20, 0x40646420, 0x00000003, 0x4062C221, + 0x4063CA20, 0x40646A20, 0x00000003, 0x4062C222, 0x4063CA20, 0x40646A20, + 0x00000003, 0x4062C223, 0x4063CA20, 0x40646A20, 0x00000003, 0x4062C224, + 0x4063CA20, 0x40646A20, 0x00000003, 0x4062C225, 0x4063CA20, 0x40646A20, + 0x00000003, 0x4062C226, 0x4063CA20, 0x40646A20, 0x00000003, 0x4062C227, + 0x4063CA20, 0x40646A20, 0x00000003, 0x4062C228, 0x4063CA20, 0x40646A20, + 0x00000003, 0x4062C229, 0x4063CA20, 0x40646A20, 0x00000003, 0x4062C22A, + 0x4063CA20, 0x40646A20, 0x00000003, 0x4062C22B, 0x4063CA20, 0x40646A20, + 0x00000003, 0x4062C221, 0x4063CA20, 0x40647220, 0x00000003, 0x4062C222, + 0x4063CA20, 0x40647220, 0x00000003, 0x4062C223, + // Block 525, offset 0x8340 + 0x4063CA20, 0x40647220, 0x00000003, 0x4062C221, 0x4063CA20, 0x40648C20, + 0x00000003, 0x4062C222, 0x4063CA20, 0x40648C20, 0x00000003, 0x4062C223, + 0x4063CA20, 0x40648C20, 0x00000003, 0x4062C224, 0x4063CA20, 0x40648C20, + 0x00000003, 0x4062C225, 0x4063CA20, 0x40648C20, 0x00000003, 0x4062C221, + 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C222, 0x4063CC20, 0x40646A20, + 0x00000003, 0x4062C223, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C224, + 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C225, 0x4063CC20, 0x40646A20, + 0x00000003, 0x4062C226, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C227, + 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C228, 0x4063CC20, 0x40646A20, + 0x00000003, 0x4062C229, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C22A, + 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C22B, + // Block 526, offset 0x8380 + 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C22C, 0x4063CC20, 0x40646A20, + 0x00000003, 0x4062C22D, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C22E, + 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C22F, 0x4063CC20, 0x40646A20, + 0x00000003, 0x4062C230, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C231, + 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C232, 0x4063CC20, 0x40646A20, + 0x00000003, 0x4062C233, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C234, + 0x4063CC20, 0x40646A20, 0x00000003, 0x4062C221, 0x4063CC20, 0x40647220, + 0x00000003, 0x4062C222, 0x4063CC20, 0x40647220, 0x00000003, 0x4062C221, + 0x4063CC20, 0x40648220, 0x00000003, 0x4062C222, 0x4063CC20, 0x40648220, + 0x00000003, 0x4062C223, 0x4063CC20, 0x40648220, 0x00000003, 0x4062C224, + 0x4063CC20, 0x40648220, 0x00000003, 0x4062C225, + // Block 527, offset 0x83c0 + 0x4063CC20, 0x40648220, 0x00000003, 0x4062C226, 0x4063CC20, 0x40648220, + 0x00000003, 0x4062C227, 0x4063CC20, 0x40648220, 0x00000003, 0x4062C228, + 0x4063CC20, 0x40648220, 0x00000003, 0x4062C229, 0x4063CC20, 0x40648220, + 0x00000003, 0x4062C22A, 0x4063CC20, 0x40648220, 0x00000003, 0x4062C22B, + 0x4063CC20, 0x40648220, 0x00000003, 0x4062C221, 0x4063CC20, 0x40648420, + 0x00000003, 0x4062C222, 0x4063CC20, 0x40648420, 0x00000003, 0x4062C223, + 0x4063CC20, 0x40648420, 0x00000003, 0x4062C224, 0x4063CC20, 0x40648420, + 0x00000003, 0x4062C225, 0x4063CC20, 0x40648420, 0x00000003, 0x4062C226, + 0x4063CC20, 0x40648420, 0x00000003, 0x4062C221, 0x4063CC20, 0x40648C20, + 0x00000003, 0x4062C222, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062C223, + 0x4063CC20, 0x40648C20, 0x00000003, 0x4062C224, + // Block 528, offset 0x8400 + 0x4063CC20, 0x40648C20, 0x00000002, 0x4062C221, 0x4063CE20, 0x00000002, + 0x4062C222, 0x4063CE20, 0x00000002, 0x4062C223, 0x4063CE20, 0x00000002, + 0x4062C224, 0x4063CE20, 0x00000002, 0x4062C225, 0x4063CE20, 0x00000002, + 0x4062C226, 0x4063CE20, 0x00000002, 0x4062C227, 0x4063CE20, 0x00000002, + 0x4062C228, 0x4063CE20, 0x00000002, 0x4062C229, 0x4063CE20, 0x00000002, + 0x4062C22A, 0x4063CE20, 0x00000002, 0x4062C22B, 0x4063CE20, 0x00000002, + 0x4062C22C, 0x4063CE20, 0x00000002, 0x4062C22D, 0x4063CE20, 0x00000002, + 0x4062C22E, 0x4063CE20, 0x00000002, 0x4062C22F, 0x4063CE20, 0x00000002, + 0x4062C230, 0x4063CE20, 0x00000002, 0x4062C231, 0x4063CE20, 0x00000002, + 0x4062C232, 0x4063CE20, 0x00000002, 0x4062C233, 0x4063CE20, 0x00000002, + 0x4062C234, 0x4063CE20, 0x00000002, 0x4062C235, + // Block 529, offset 0x8440 + 0x4063CE20, 0x00000002, 0x4062C236, 0x4063CE20, 0x00000002, 0x4062C237, + 0x4063CE20, 0x00000002, 0x4062C238, 0x4063CE20, 0x00000002, 0x4062C239, + 0x4063CE20, 0x00000002, 0x4062C23A, 0x4063CE20, 0x00000002, 0x4062C23B, + 0x4063CE20, 0x00000002, 0x4062C23C, 0x4063CE20, 0x00000002, 0x4062C23D, + 0x4063CE20, 0x00000002, 0x4062C221, 0x4063D020, 0x00000002, 0x4062C222, + 0x4063D020, 0x00000002, 0x4062C223, 0x4063D020, 0x00000002, 0x4062C224, + 0x4063D020, 0x00000002, 0x4062C225, 0x4063D020, 0x00000002, 0x4062C226, + 0x4063D020, 0x00000002, 0x4062C227, 0x4063D020, 0x00000002, 0x4062C228, + 0x4063D020, 0x00000002, 0x4062C229, 0x4063D020, 0x00000002, 0x4062C22A, + 0x4063D020, 0x00000002, 0x4062C22B, 0x4063D020, 0x00000002, 0x4062C22C, + 0x4063D020, 0x00000002, 0x4062C22D, 0x4063D020, + // Block 530, offset 0x8480 + 0x00000002, 0x4062C22E, 0x4063D020, 0x00000002, 0x4062C22F, 0x4063D020, + 0x00000002, 0x4062C230, 0x4063D020, 0x00000002, 0x4062C231, 0x4063D020, + 0x00000002, 0x4062C232, 0x4063D020, 0x00000002, 0x4062C233, 0x4063D020, + 0x00000002, 0x4062C234, 0x4063D020, 0x00000002, 0x4062C235, 0x4063D020, + 0x00000002, 0x4062C236, 0x4063D020, 0x00000002, 0x4062C237, 0x4063D020, + 0x00000002, 0x4062C238, 0x4063D020, 0x00000002, 0x4062C239, 0x4063D020, + 0x00000002, 0x4062C23A, 0x4063D020, 0x00000002, 0x4062C23B, 0x4063D020, + 0x00000002, 0x4062C23C, 0x4063D020, 0x00000002, 0x4062C23D, 0x4063D020, + 0x00000002, 0x4062C23E, 0x4063D020, 0x00000002, 0x4062C23F, 0x4063D020, + 0x00000002, 0x4062C240, 0x4063D020, 0x00000002, 0x4062C241, 0x4063D020, + 0x00000002, 0x4062C242, 0x4063D020, 0x00000002, + // Block 531, offset 0x84c0 + 0x4062C243, 0x4063D020, 0x00000003, 0x4062C221, 0x4063D020, 0x40646420, + 0x00000003, 0x4062C222, 0x4063D020, 0x40646420, 0x00000003, 0x4062C223, + 0x4063D020, 0x40646420, 0x00000003, 0x4062C224, 0x4063D020, 0x40646420, + 0x00000003, 0x4062C225, 0x4063D020, 0x40646420, 0x00000003, 0x4062C226, + 0x4063D020, 0x40646420, 0x00000003, 0x4062C227, 0x4063D020, 0x40646420, + 0x00000003, 0x4062C228, 0x4063D020, 0x40646420, 0x00000003, 0x4062C229, + 0x4063D020, 0x40646420, 0x00000003, 0x4062C221, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C222, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C223, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C224, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C225, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C226, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C227, + // Block 532, offset 0x8500 + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C228, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C229, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C22A, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C22B, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C22C, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C22D, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C22E, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C22F, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C230, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C231, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C232, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C233, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C234, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C235, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C236, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C237, + // Block 533, offset 0x8540 + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C238, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C239, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C23A, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C23B, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C23C, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C221, + 0x4063D020, 0x40647220, 0x00000003, 0x4062C222, 0x4063D020, 0x40647220, + 0x00000003, 0x4062C223, 0x4063D020, 0x40647220, 0x00000003, 0x4062C224, + 0x4063D020, 0x40647220, 0x00000003, 0x4062C225, 0x4063D020, 0x40647220, + 0x00000003, 0x4062C226, 0x4063D020, 0x40647220, 0x00000003, 0x4062C227, + 0x4063D020, 0x40647220, 0x00000003, 0x4062C228, 0x4063D020, 0x40647220, + 0x00000003, 0x4062C229, 0x4063D020, 0x40647220, 0x00000003, 0x4062C22A, + 0x4063D020, 0x40647220, 0x00000003, 0x4062C22B, + // Block 534, offset 0x8580 + 0x4063D020, 0x40647220, 0x00000003, 0x4062C221, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C222, 0x4063D020, 0x40648220, 0x00000003, 0x4062C223, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C224, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C225, 0x4063D020, 0x40648220, 0x00000003, 0x4062C226, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C227, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C228, 0x4063D020, 0x40648220, 0x00000003, 0x4062C229, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C22A, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C22B, 0x4063D020, 0x40648220, 0x00000003, 0x4062C22C, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C221, 0x4063D020, 0x40648420, + 0x00000003, 0x4062C222, 0x4063D020, 0x40648420, 0x00000003, 0x4062C223, + 0x4063D020, 0x40648420, 0x00000003, 0x4062C221, + // Block 535, offset 0x85c0 + 0x4063D020, 0x40648C20, 0x00000003, 0x4062C222, 0x4063D020, 0x40648C20, + 0x00000003, 0x4062C223, 0x4063D020, 0x40648C20, 0x00000003, 0x4062C224, + 0x4063D020, 0x40648C20, 0x00000003, 0x4062C225, 0x4063D020, 0x40648C20, + 0x00000002, 0x4062C421, 0x4063A820, 0x00000002, 0x4062C422, 0x4063A820, + 0x00000002, 0x4062C423, 0x4063A820, 0x00000002, 0x4062C424, 0x4063A820, + 0x00000002, 0x4062C425, 0x4063A820, 0x00000002, 0x4062C426, 0x4063A820, + 0x00000002, 0x4062C427, 0x4063A820, 0x00000002, 0x4062C428, 0x4063A820, + 0x00000002, 0x4062C429, 0x4063A820, 0x00000002, 0x4062C42A, 0x4063A820, + 0x00000002, 0x4062C42B, 0x4063A820, 0x00000002, 0x4062C42C, 0x4063A820, + 0x00000002, 0x4062C42D, 0x4063A820, 0x00000002, 0x4062C42E, 0x4063A820, + 0x00000002, 0x4062C42F, 0x4063A820, 0x00000002, + // Block 536, offset 0x8600 + 0x4062C430, 0x4063A820, 0x00000002, 0x4062C431, 0x4063A820, 0x00000002, + 0x4062C432, 0x4063A820, 0x00000002, 0x4062C433, 0x4063A820, 0x00000002, + 0x4062C434, 0x4063A820, 0x00000002, 0x4062C435, 0x4063A820, 0x00000002, + 0x4062C436, 0x4063A820, 0x00000002, 0x4062C437, 0x4063A820, 0x00000002, + 0x4062C438, 0x4063A820, 0x00000002, 0x4062C439, 0x4063A820, 0x00000002, + 0x4062C43A, 0x4063A820, 0x00000002, 0x4062C43B, 0x4063A820, 0x00000002, + 0x4062C43C, 0x4063A820, 0x00000002, 0x4062C43D, 0x4063A820, 0x00000002, + 0x4062C43E, 0x4063A820, 0x00000002, 0x4062C43F, 0x4063A820, 0x00000002, + 0x4062C440, 0x4063A820, 0x00000002, 0x4062C441, 0x4063A820, 0x00000002, + 0x4062C442, 0x4063A820, 0x00000002, 0x4062C443, 0x4063A820, 0x00000002, + 0x4062C444, 0x4063A820, 0x00000002, 0x4062C445, + // Block 537, offset 0x8640 + 0x4063A820, 0x00000002, 0x4062C446, 0x4063A820, 0x00000002, 0x4062C447, + 0x4063A820, 0x00000002, 0x4062C448, 0x4063A820, 0x00000002, 0x4062C449, + 0x4063A820, 0x00000002, 0x4062C44A, 0x4063A820, 0x00000002, 0x4062C44B, + 0x4063A820, 0x00000002, 0x4062C44C, 0x4063A820, 0x00000002, 0x4062C44D, + 0x4063A820, 0x00000002, 0x4062C44E, 0x4063A820, 0x00000002, 0x4062C44F, + 0x4063A820, 0x00000002, 0x4062C450, 0x4063A820, 0x00000002, 0x4062C451, + 0x4063A820, 0x00000002, 0x4062C452, 0x4063A820, 0x00000002, 0x4062C453, + 0x4063A820, 0x00000002, 0x4062C454, 0x4063A820, 0x00000003, 0x4062C421, + 0x4063A820, 0x40646420, 0x00000003, 0x4062C422, 0x4063A820, 0x40646420, + 0x00000003, 0x4062C423, 0x4063A820, 0x40646420, 0x00000003, 0x4062C424, + 0x4063A820, 0x40646420, 0x00000003, 0x4062C425, + // Block 538, offset 0x8680 + 0x4063A820, 0x40646420, 0x00000003, 0x4062C426, 0x4063A820, 0x40646420, + 0x00000003, 0x4062C427, 0x4063A820, 0x40646420, 0x00000003, 0x4062C428, + 0x4063A820, 0x40646420, 0x00000003, 0x4062C429, 0x4063A820, 0x40646420, + 0x00000003, 0x4062C42A, 0x4063A820, 0x40646420, 0x00000003, 0x4062C42B, + 0x4063A820, 0x40646420, 0x00000003, 0x4062C42C, 0x4063A820, 0x40646420, + 0x00000003, 0x4062C42D, 0x4063A820, 0x40646420, 0x00000003, 0x4062C42E, + 0x4063A820, 0x40646420, 0x00000003, 0x4062C42F, 0x4063A820, 0x40646420, + 0x00000003, 0x4062C430, 0x4063A820, 0x40646420, 0x00000003, 0x4062C431, + 0x4063A820, 0x40646420, 0x00000003, 0x4062C432, 0x4063A820, 0x40646420, + 0x00000003, 0x4062C433, 0x4063A820, 0x40646420, 0x00000003, 0x4062C434, + 0x4063A820, 0x40646420, 0x00000003, 0x4062C435, + // Block 539, offset 0x86c0 + 0x4063A820, 0x40646420, 0x00000003, 0x4062C421, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062C422, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C423, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062C424, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062C425, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C426, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062C427, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062C428, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C421, + 0x4063A820, 0x40648220, 0x00000003, 0x4062C422, 0x4063A820, 0x40648220, + 0x00000003, 0x4062C423, 0x4063A820, 0x40648220, 0x00000003, 0x4062C424, + 0x4063A820, 0x40648220, 0x00000003, 0x4062C425, 0x4063A820, 0x40648220, + 0x00000003, 0x4062C426, 0x4063A820, 0x40648220, 0x00000003, 0x4062C427, + 0x4063A820, 0x40648220, 0x00000003, 0x4062C428, + // Block 540, offset 0x8700 + 0x4063A820, 0x40648220, 0x00000003, 0x4062C429, 0x4063A820, 0x40648220, + 0x00000003, 0x4062C421, 0x4063A820, 0x40648420, 0x00000003, 0x4062C422, + 0x4063A820, 0x40648420, 0x00000003, 0x4062C423, 0x4063A820, 0x40648420, + 0x00000003, 0x4062C424, 0x4063A820, 0x40648420, 0x00000003, 0x4062C425, + 0x4063A820, 0x40648420, 0x00000003, 0x4062C426, 0x4063A820, 0x40648420, + 0x00000003, 0x4062C421, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C422, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C423, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C424, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C425, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C426, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C427, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C428, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C429, + // Block 541, offset 0x8740 + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C42A, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C42B, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C42C, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C42D, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C42E, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C42F, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C430, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C431, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C432, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C433, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C434, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C435, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C436, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C437, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C438, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C439, + // Block 542, offset 0x8780 + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C43A, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C43B, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C43C, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C43D, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C43E, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C43F, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C440, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C441, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C442, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C443, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C444, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C445, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C446, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C447, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C448, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C449, + // Block 543, offset 0x87c0 + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C44A, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C44B, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C44C, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C44D, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C44E, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C44F, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C450, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C451, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C452, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C453, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C454, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C455, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062C456, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062C457, 0x4063A820, 0x40648C20, 0x00000002, 0x4062C421, + 0x4063AA20, 0x00000002, 0x4062C422, 0x4063AA20, + // Block 544, offset 0x8800 + 0x00000002, 0x4062C423, 0x4063AA20, 0x00000002, 0x4062C424, 0x4063AA20, + 0x00000002, 0x4062C425, 0x4063AA20, 0x00000002, 0x4062C426, 0x4063AA20, + 0x00000002, 0x4062C427, 0x4063AA20, 0x00000002, 0x4062C428, 0x4063AA20, + 0x00000002, 0x4062C429, 0x4063AA20, 0x00000002, 0x4062C42A, 0x4063AA20, + 0x00000002, 0x4062C42B, 0x4063AA20, 0x00000002, 0x4062C42C, 0x4063AA20, + 0x00000002, 0x4062C42D, 0x4063AA20, 0x00000002, 0x4062C42E, 0x4063AA20, + 0x00000002, 0x4062C42F, 0x4063AA20, 0x00000002, 0x4062C430, 0x4063AA20, + 0x00000002, 0x4062C431, 0x4063AA20, 0x00000002, 0x4062C432, 0x4063AA20, + 0x00000002, 0x4062C433, 0x4063AA20, 0x00000002, 0x4062C434, 0x4063AA20, + 0x00000002, 0x4062C435, 0x4063AA20, 0x00000002, 0x4062C436, 0x4063AA20, + 0x00000002, 0x4062C437, 0x4063AA20, 0x00000003, + // Block 545, offset 0x8840 + 0x4062C421, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062C422, 0x4063AA20, + 0x40648C20, 0x00000003, 0x4062C423, 0x4063AA20, 0x40648C20, 0x00000003, + 0x4062C424, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062C425, 0x4063AA20, + 0x40648C20, 0x00000003, 0x4062C426, 0x4063AA20, 0x40648C20, 0x00000003, + 0x4062C427, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062C428, 0x4063AA20, + 0x40648C20, 0x00000002, 0x4062C421, 0x4063B020, 0x00000002, 0x4062C422, + 0x4063B020, 0x00000002, 0x4062C423, 0x4063B020, 0x00000002, 0x4062C424, + 0x4063B020, 0x00000002, 0x4062C425, 0x4063B020, 0x00000002, 0x4062C426, + 0x4063B020, 0x00000002, 0x4062C427, 0x4063B020, 0x00000002, 0x4062C428, + 0x4063B020, 0x00000002, 0x4062C429, 0x4063B020, 0x00000002, 0x4062C42A, + 0x4063B020, 0x00000002, 0x4062C42B, 0x4063B020, + // Block 546, offset 0x8880 + 0x00000002, 0x4062C42C, 0x4063B020, 0x00000002, 0x4062C42D, 0x4063B020, + 0x00000002, 0x4062C42E, 0x4063B020, 0x00000002, 0x4062C42F, 0x4063B020, + 0x00000002, 0x4062C430, 0x4063B020, 0x00000002, 0x4062C431, 0x4063B020, + 0x00000002, 0x4062C432, 0x4063B020, 0x00000002, 0x4062C433, 0x4063B020, + 0x00000002, 0x4062C434, 0x4063B020, 0x00000002, 0x4062C435, 0x4063B020, + 0x00000002, 0x4062C436, 0x4063B020, 0x00000002, 0x4062C437, 0x4063B020, + 0x00000002, 0x4062C438, 0x4063B020, 0x00000002, 0x4062C439, 0x4063B020, + 0x00000002, 0x4062C43A, 0x4063B020, 0x00000002, 0x4062C43B, 0x4063B020, + 0x00000002, 0x4062C43C, 0x4063B020, 0x00000002, 0x4062C43D, 0x4063B020, + 0x00000002, 0x4062C43E, 0x4063B020, 0x00000002, 0x4062C43F, 0x4063B020, + 0x00000002, 0x4062C440, 0x4063B020, 0x00000002, + // Block 547, offset 0x88c0 + 0x4062C441, 0x4063B020, 0x00000002, 0x4062C442, 0x4063B020, 0x00000002, + 0x4062C443, 0x4063B020, 0x00000002, 0x4062C444, 0x4063B020, 0x00000002, + 0x4062C445, 0x4063B020, 0x00000002, 0x4062C446, 0x4063B020, 0x00000002, + 0x4062C447, 0x4063B020, 0x00000002, 0x4062C448, 0x4063B020, 0x00000002, + 0x4062C449, 0x4063B020, 0x00000002, 0x4062C44A, 0x4063B020, 0x00000002, + 0x4062C44B, 0x4063B020, 0x00000002, 0x4062C44C, 0x4063B020, 0x00000002, + 0x4062C44D, 0x4063B020, 0x00000002, 0x4062C44E, 0x4063B020, 0x00000003, + 0x4062C421, 0x4063B020, 0x40646420, 0x00000003, 0x4062C422, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C423, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C424, 0x4063B020, 0x40646420, 0x00000003, 0x4062C425, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C426, 0x4063B020, + // Block 548, offset 0x8900 + 0x40646420, 0x00000003, 0x4062C427, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C428, 0x4063B020, 0x40646420, 0x00000003, 0x4062C429, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C42A, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C42B, 0x4063B020, 0x40646420, 0x00000003, 0x4062C42C, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C42D, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C42E, 0x4063B020, 0x40646420, 0x00000003, 0x4062C42F, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C430, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C431, 0x4063B020, 0x40646420, 0x00000003, 0x4062C432, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C433, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C434, 0x4063B020, 0x40646420, 0x00000003, 0x4062C435, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C436, 0x4063B020, + // Block 549, offset 0x8940 + 0x40646420, 0x00000003, 0x4062C437, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C438, 0x4063B020, 0x40646420, 0x00000003, 0x4062C439, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C43A, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C43B, 0x4063B020, 0x40646420, 0x00000003, 0x4062C43C, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C43D, 0x4063B020, 0x40646420, 0x00000003, + 0x4062C43E, 0x4063B020, 0x40646420, 0x00000003, 0x4062C43F, 0x4063B020, + 0x40646420, 0x00000003, 0x4062C421, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C422, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C423, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C424, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C425, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C426, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C427, 0x4063B020, + // Block 550, offset 0x8980 + 0x40646A20, 0x00000003, 0x4062C428, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C429, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C42A, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C42B, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C42C, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C42D, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C42E, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C42F, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C430, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C431, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C432, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C433, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C434, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C435, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C436, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C437, 0x4063B020, + // Block 551, offset 0x89c0 + 0x40646A20, 0x00000003, 0x4062C438, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C439, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C43A, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C43B, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C43C, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C43D, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C43E, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C43F, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C440, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C441, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C442, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C443, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C444, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C445, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C446, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C447, 0x4063B020, + // Block 552, offset 0x8a00 + 0x40646A20, 0x00000003, 0x4062C448, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C449, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C44A, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C44B, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C44C, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C44D, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C44E, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C44F, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C450, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C451, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C452, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C453, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C454, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C455, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C456, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C457, 0x4063B020, + // Block 553, offset 0x8a40 + 0x40646A20, 0x00000003, 0x4062C458, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C459, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C45A, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C45B, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C45C, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C45D, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C45E, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C45F, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C460, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C461, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C462, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C463, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C464, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C465, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C466, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C467, 0x4063B020, + // Block 554, offset 0x8a80 + 0x40646A20, 0x00000003, 0x4062C468, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C469, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C46A, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C46B, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C46C, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C46D, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C46E, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C46F, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C470, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062C471, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062C421, 0x4063B020, 0x40647220, 0x00000003, 0x4062C422, 0x4063B020, + 0x40647220, 0x00000003, 0x4062C423, 0x4063B020, 0x40647220, 0x00000003, + 0x4062C424, 0x4063B020, 0x40647220, 0x00000003, 0x4062C425, 0x4063B020, + 0x40647220, 0x00000003, 0x4062C426, 0x4063B020, + // Block 555, offset 0x8ac0 + 0x40647220, 0x00000003, 0x4062C427, 0x4063B020, 0x40647220, 0x00000003, + 0x4062C428, 0x4063B020, 0x40647220, 0x00000003, 0x4062C429, 0x4063B020, + 0x40647220, 0x00000003, 0x4062C42A, 0x4063B020, 0x40647220, 0x00000003, + 0x4062C42B, 0x4063B020, 0x40647220, 0x00000003, 0x4062C421, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C422, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C423, 0x4063B020, 0x40648220, 0x00000003, 0x4062C424, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C425, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C426, 0x4063B020, 0x40648220, 0x00000003, 0x4062C427, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C428, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C429, 0x4063B020, 0x40648220, 0x00000003, 0x4062C42A, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C42B, 0x4063B020, + // Block 556, offset 0x8b00 + 0x40648220, 0x00000003, 0x4062C42C, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C42D, 0x4063B020, 0x40648220, 0x00000003, 0x4062C42E, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C42F, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C430, 0x4063B020, 0x40648220, 0x00000003, 0x4062C431, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C432, 0x4063B020, 0x40648220, 0x00000003, + 0x4062C433, 0x4063B020, 0x40648220, 0x00000003, 0x4062C434, 0x4063B020, + 0x40648220, 0x00000003, 0x4062C421, 0x4063B020, 0x40648420, 0x00000003, + 0x4062C422, 0x4063B020, 0x40648420, 0x00000003, 0x4062C423, 0x4063B020, + 0x40648420, 0x00000003, 0x4062C424, 0x4063B020, 0x40648420, 0x00000003, + 0x4062C425, 0x4063B020, 0x40648420, 0x00000003, 0x4062C426, 0x4063B020, + 0x40648420, 0x00000003, 0x4062C427, 0x4063B020, + // Block 557, offset 0x8b40 + 0x40648420, 0x00000003, 0x4062C428, 0x4063B020, 0x40648420, 0x00000003, + 0x4062C429, 0x4063B020, 0x40648420, 0x00000003, 0x4062C421, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C422, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C423, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C424, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C425, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C426, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C427, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C428, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C429, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C42A, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C42B, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C42C, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C42D, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C42E, 0x4063B020, + // Block 558, offset 0x8b80 + 0x40648C20, 0x00000003, 0x4062C42F, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C430, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C431, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C432, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C433, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C434, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C435, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C436, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C437, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C438, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C439, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C43A, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C43B, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C43C, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C43D, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C43E, 0x4063B020, + // Block 559, offset 0x8bc0 + 0x40648C20, 0x00000003, 0x4062C43F, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C440, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C441, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C442, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C443, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C444, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C445, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C446, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C447, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C448, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C449, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C44A, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C44B, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C44C, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C44D, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C44E, 0x4063B020, + // Block 560, offset 0x8c00 + 0x40648C20, 0x00000003, 0x4062C44F, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C450, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C451, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C452, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C453, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C454, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C455, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C456, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C457, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C458, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C459, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C45A, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C45B, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C45C, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C45D, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C45E, 0x4063B020, + // Block 561, offset 0x8c40 + 0x40648C20, 0x00000003, 0x4062C45F, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C460, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C461, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C462, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C463, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C464, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C465, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C466, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C467, 0x4063B020, + 0x40648C20, 0x00000003, 0x4062C468, 0x4063B020, 0x40648C20, 0x00000003, + 0x4062C469, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C46A, 0x4063B020, + 0x40648C20, 0x00000002, 0x4062C421, 0x4063B220, 0x00000002, 0x4062C422, + 0x4063B220, 0x00000002, 0x4062C423, 0x4063B220, 0x00000002, 0x4062C424, + 0x4063B220, 0x00000002, 0x4062C425, 0x4063B220, + // Block 562, offset 0x8c80 + 0x00000002, 0x4062C426, 0x4063B220, 0x00000002, 0x4062C427, 0x4063B220, + 0x00000002, 0x4062C428, 0x4063B220, 0x00000002, 0x4062C429, 0x4063B220, + 0x00000002, 0x4062C42A, 0x4063B220, 0x00000002, 0x4062C42B, 0x4063B220, + 0x00000002, 0x4062C42C, 0x4063B220, 0x00000002, 0x4062C42D, 0x4063B220, + 0x00000002, 0x4062C42E, 0x4063B220, 0x00000002, 0x4062C42F, 0x4063B220, + 0x00000002, 0x4062C430, 0x4063B220, 0x00000002, 0x4062C431, 0x4063B220, + 0x00000002, 0x4062C432, 0x4063B220, 0x00000002, 0x4062C433, 0x4063B220, + 0x00000002, 0x4062C434, 0x4063B220, 0x00000002, 0x4062C435, 0x4063B220, + 0x00000002, 0x4062C436, 0x4063B220, 0x00000002, 0x4062C437, 0x4063B220, + 0x00000002, 0x4062C438, 0x4063B220, 0x00000002, 0x4062C439, 0x4063B220, + 0x00000002, 0x4062C43A, 0x4063B220, 0x00000002, + // Block 563, offset 0x8cc0 + 0x4062C43B, 0x4063B220, 0x00000002, 0x4062C43C, 0x4063B220, 0x00000002, + 0x4062C43D, 0x4063B220, 0x00000002, 0x4062C43E, 0x4063B220, 0x00000002, + 0x4062C43F, 0x4063B220, 0x00000002, 0x4062C440, 0x4063B220, 0x00000002, + 0x4062C441, 0x4063B220, 0x00000002, 0x4062C442, 0x4063B220, 0x00000002, + 0x4062C443, 0x4063B220, 0x00000002, 0x4062C444, 0x4063B220, 0x00000002, + 0x4062C445, 0x4063B220, 0x00000002, 0x4062C446, 0x4063B220, 0x00000002, + 0x4062C447, 0x4063B220, 0x00000002, 0x4062C448, 0x4063B220, 0x00000002, + 0x4062C421, 0x4063B820, 0x00000002, 0x4062C422, 0x4063B820, 0x00000002, + 0x4062C423, 0x4063B820, 0x00000002, 0x4062C424, 0x4063B820, 0x00000002, + 0x4062C425, 0x4063B820, 0x00000002, 0x4062C426, 0x4063B820, 0x00000002, + 0x4062C427, 0x4063B820, 0x00000002, 0x4062C428, + // Block 564, offset 0x8d00 + 0x4063B820, 0x00000002, 0x4062C429, 0x4063B820, 0x00000002, 0x4062C42A, + 0x4063B820, 0x00000002, 0x4062C42B, 0x4063B820, 0x00000002, 0x4062C42C, + 0x4063B820, 0x00000002, 0x4062C42D, 0x4063B820, 0x00000002, 0x4062C42E, + 0x4063B820, 0x00000002, 0x4062C42F, 0x4063B820, 0x00000002, 0x4062C430, + 0x4063B820, 0x00000002, 0x4062C431, 0x4063B820, 0x00000002, 0x4062C432, + 0x4063B820, 0x00000002, 0x4062C433, 0x4063B820, 0x00000002, 0x4062C434, + 0x4063B820, 0x00000002, 0x4062C435, 0x4063B820, 0x00000002, 0x4062C436, + 0x4063B820, 0x00000002, 0x4062C437, 0x4063B820, 0x00000002, 0x4062C438, + 0x4063B820, 0x00000002, 0x4062C439, 0x4063B820, 0x00000002, 0x4062C43A, + 0x4063B820, 0x00000002, 0x4062C43B, 0x4063B820, 0x00000002, 0x4062C43C, + 0x4063B820, 0x00000002, 0x4062C43D, 0x4063B820, + // Block 565, offset 0x8d40 + 0x00000002, 0x4062C43E, 0x4063B820, 0x00000002, 0x4062C43F, 0x4063B820, + 0x00000002, 0x4062C440, 0x4063B820, 0x00000002, 0x4062C441, 0x4063B820, + 0x00000002, 0x4062C442, 0x4063B820, 0x00000002, 0x4062C443, 0x4063B820, + 0x00000002, 0x4062C444, 0x4063B820, 0x00000002, 0x4062C445, 0x4063B820, + 0x00000002, 0x4062C446, 0x4063B820, 0x00000002, 0x4062C447, 0x4063B820, + 0x00000002, 0x4062C448, 0x4063B820, 0x00000002, 0x4062C449, 0x4063B820, + 0x00000002, 0x4062C44A, 0x4063B820, 0x00000002, 0x4062C44B, 0x4063B820, + 0x00000002, 0x4062C44C, 0x4063B820, 0x00000002, 0x4062C44D, 0x4063B820, + 0x00000002, 0x4062C44E, 0x4063B820, 0x00000002, 0x4062C44F, 0x4063B820, + 0x00000002, 0x4062C450, 0x4063B820, 0x00000002, 0x4062C451, 0x4063B820, + 0x00000002, 0x4062C452, 0x4063B820, 0x00000002, + // Block 566, offset 0x8d80 + 0x4062C453, 0x4063B820, 0x00000002, 0x4062C454, 0x4063B820, 0x00000002, + 0x4062C455, 0x4063B820, 0x00000002, 0x4062C456, 0x4063B820, 0x00000002, + 0x4062C457, 0x4063B820, 0x00000002, 0x4062C458, 0x4063B820, 0x00000002, + 0x4062C459, 0x4063B820, 0x00000002, 0x4062C45A, 0x4063B820, 0x00000002, + 0x4062C45B, 0x4063B820, 0x00000002, 0x4062C45C, 0x4063B820, 0x00000002, + 0x4062C45D, 0x4063B820, 0x00000002, 0x4062C45E, 0x4063B820, 0x00000002, + 0x4062C45F, 0x4063B820, 0x00000002, 0x4062C460, 0x4063B820, 0x00000002, + 0x4062C461, 0x4063B820, 0x00000002, 0x4062C462, 0x4063B820, 0x00000002, + 0x4062C463, 0x4063B820, 0x00000002, 0x4062C464, 0x4063B820, 0x00000002, + 0x4062C465, 0x4063B820, 0x00000002, 0x4062C466, 0x4063B820, 0x00000002, + 0x4062C467, 0x4063B820, 0x00000002, 0x4062C468, + // Block 567, offset 0x8dc0 + 0x4063B820, 0x00000002, 0x4062C469, 0x4063B820, 0x00000002, 0x4062C46A, + 0x4063B820, 0x00000002, 0x4062C46B, 0x4063B820, 0x00000002, 0x4062C46C, + 0x4063B820, 0x00000002, 0x4062C46D, 0x4063B820, 0x00000002, 0x4062C46E, + 0x4063B820, 0x00000002, 0x4062C46F, 0x4063B820, 0x00000002, 0x4062C470, + 0x4063B820, 0x00000003, 0x4062C421, 0x4063B820, 0x40646420, 0x00000003, + 0x4062C422, 0x4063B820, 0x40646420, 0x00000003, 0x4062C423, 0x4063B820, + 0x40646420, 0x00000003, 0x4062C424, 0x4063B820, 0x40646420, 0x00000003, + 0x4062C425, 0x4063B820, 0x40646420, 0x00000003, 0x4062C421, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062C422, 0x4063B820, 0x40646A20, 0x00000003, + 0x4062C423, 0x4063B820, 0x40646A20, 0x00000003, 0x4062C421, 0x4063B820, + 0x40647220, 0x00000003, 0x4062C422, 0x4063B820, + // Block 568, offset 0x8e00 + 0x40647220, 0x00000003, 0x4062C423, 0x4063B820, 0x40647220, 0x00000003, + 0x4062C421, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C422, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062C423, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062C424, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C425, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062C426, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062C427, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C428, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062C429, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062C42A, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C42B, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062C42C, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062C42D, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C42E, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062C42F, 0x4063B820, + // Block 569, offset 0x8e40 + 0x40648C20, 0x00000003, 0x4062C430, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062C431, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C432, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062C433, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062C434, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C435, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062C436, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062C437, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C438, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062C439, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062C43A, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C43B, 0x4063B820, + 0x40648C20, 0x00000002, 0x4062C421, 0x4063BA20, 0x00000002, 0x4062C422, + 0x4063BA20, 0x00000002, 0x4062C423, 0x4063BA20, 0x00000002, 0x4062C424, + 0x4063BA20, 0x00000002, 0x4062C425, 0x4063BA20, + // Block 570, offset 0x8e80 + 0x00000002, 0x4062C426, 0x4063BA20, 0x00000002, 0x4062C427, 0x4063BA20, + 0x00000002, 0x4062C428, 0x4063BA20, 0x00000002, 0x4062C429, 0x4063BA20, + 0x00000002, 0x4062C421, 0x4063BE20, 0x00000002, 0x4062C421, 0x4063C220, + 0x00000002, 0x4062C422, 0x4063C220, 0x00000002, 0x4062C423, 0x4063C220, + 0x00000002, 0x4062C424, 0x4063C220, 0x00000002, 0x4062C425, 0x4063C220, + 0x00000002, 0x4062C426, 0x4063C220, 0x00000002, 0x4062C427, 0x4063C220, + 0x00000002, 0x4062C428, 0x4063C220, 0x00000002, 0x4062C429, 0x4063C220, + 0x00000002, 0x4062C42A, 0x4063C220, 0x00000002, 0x4062C42B, 0x4063C220, + 0x00000002, 0x4062C42C, 0x4063C220, 0x00000002, 0x4062C42D, 0x4063C220, + 0x00000002, 0x4062C42E, 0x4063C220, 0x00000002, 0x4062C42F, 0x4063C220, + 0x00000002, 0x4062C430, 0x4063C220, 0x00000002, + // Block 571, offset 0x8ec0 + 0x4062C431, 0x4063C220, 0x00000002, 0x4062C432, 0x4063C220, 0x00000002, + 0x4062C433, 0x4063C220, 0x00000002, 0x4062C434, 0x4063C220, 0x00000002, + 0x4062C435, 0x4063C220, 0x00000002, 0x4062C436, 0x4063C220, 0x00000002, + 0x4062C437, 0x4063C220, 0x00000002, 0x4062C438, 0x4063C220, 0x00000002, + 0x4062C439, 0x4063C220, 0x00000002, 0x4062C43A, 0x4063C220, 0x00000002, + 0x4062C43B, 0x4063C220, 0x00000002, 0x4062C43C, 0x4063C220, 0x00000002, + 0x4062C43D, 0x4063C220, 0x00000002, 0x4062C43E, 0x4063C220, 0x00000002, + 0x4062C43F, 0x4063C220, 0x00000002, 0x4062C440, 0x4063C220, 0x00000002, + 0x4062C441, 0x4063C220, 0x00000002, 0x4062C442, 0x4063C220, 0x00000002, + 0x4062C443, 0x4063C220, 0x00000002, 0x4062C444, 0x4063C220, 0x00000002, + 0x4062C445, 0x4063C220, 0x00000002, 0x4062C446, + // Block 572, offset 0x8f00 + 0x4063C220, 0x00000002, 0x4062C447, 0x4063C220, 0x00000002, 0x4062C448, + 0x4063C220, 0x00000002, 0x4062C449, 0x4063C220, 0x00000002, 0x4062C44A, + 0x4063C220, 0x00000002, 0x4062C44B, 0x4063C220, 0x00000002, 0x4062C44C, + 0x4063C220, 0x00000002, 0x4062C44D, 0x4063C220, 0x00000002, 0x4062C44E, + 0x4063C220, 0x00000002, 0x4062C44F, 0x4063C220, 0x00000002, 0x4062C450, + 0x4063C220, 0x00000002, 0x4062C451, 0x4063C220, 0x00000002, 0x4062C452, + 0x4063C220, 0x00000002, 0x4062C453, 0x4063C220, 0x00000002, 0x4062C454, + 0x4063C220, 0x00000002, 0x4062C455, 0x4063C220, 0x00000002, 0x4062C456, + 0x4063C220, 0x00000002, 0x4062C457, 0x4063C220, 0x00000002, 0x4062C458, + 0x4063C220, 0x00000002, 0x4062C459, 0x4063C220, 0x00000002, 0x4062C45A, + 0x4063C220, 0x00000002, 0x4062C45B, 0x4063C220, + // Block 573, offset 0x8f40 + 0x00000002, 0x4062C45C, 0x4063C220, 0x00000002, 0x4062C45D, 0x4063C220, + 0x00000002, 0x4062C45E, 0x4063C220, 0x00000003, 0x4062C421, 0x4063C220, + 0x40646420, 0x00000003, 0x4062C422, 0x4063C220, 0x40646420, 0x00000003, + 0x4062C421, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C422, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C423, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C424, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C425, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C426, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C427, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C428, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C429, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C42A, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C42B, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C42C, 0x4063C220, + // Block 574, offset 0x8f80 + 0x40646A20, 0x00000003, 0x4062C42D, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C42E, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C42F, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C430, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C431, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C432, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C433, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C434, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C435, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C436, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C437, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C438, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C439, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C43A, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C43B, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C43C, 0x4063C220, + // Block 575, offset 0x8fc0 + 0x40646A20, 0x00000003, 0x4062C43D, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C43E, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C43F, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C440, 0x4063C220, 0x40646A20, 0x00000003, + 0x4062C441, 0x4063C220, 0x40646A20, 0x00000003, 0x4062C442, 0x4063C220, + 0x40646A20, 0x00000003, 0x4062C421, 0x4063C220, 0x40647220, 0x00000003, + 0x4062C422, 0x4063C220, 0x40647220, 0x00000003, 0x4062C421, 0x4063C220, + 0x40648C20, 0x00000003, 0x4062C422, 0x4063C220, 0x40648C20, 0x00000003, + 0x4062C423, 0x4063C220, 0x40648C20, 0x00000003, 0x4062C424, 0x4063C220, + 0x40648C20, 0x00000003, 0x4062C425, 0x4063C220, 0x40648C20, 0x00000003, + 0x4062C421, 0x4063CC20, 0x40646420, 0x00000003, 0x4062C422, 0x4063CC20, + 0x40646420, 0x00000003, 0x4062C423, 0x4063CC20, + // Block 576, offset 0x9000 + 0x40646420, 0x00000003, 0x4062C421, 0x4063CC20, 0x40647220, 0x00000003, + 0x4062C422, 0x4063CC20, 0x40647220, 0x00000003, 0x4062C421, 0x4063CC20, + 0x40648420, 0x00000003, 0x4062C422, 0x4063CC20, 0x40648420, 0x00000003, + 0x4062C423, 0x4063CC20, 0x40648420, 0x00000003, 0x4062C424, 0x4063CC20, + 0x40648420, 0x00000003, 0x4062C425, 0x4063CC20, 0x40648420, 0x00000003, + 0x4062C421, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062C422, 0x4063CC20, + 0x40648C20, 0x00000003, 0x4062C423, 0x4063CC20, 0x40648C20, 0x00000003, + 0x4062C424, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062C425, 0x4063CC20, + 0x40648C20, 0x00000003, 0x4062C426, 0x4063CC20, 0x40648C20, 0x00000003, + 0x4062C427, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062C428, 0x4063CC20, + 0x40648C20, 0x00000003, 0x4062C429, 0x4063CC20, + // Block 577, offset 0x9040 + 0x40648C20, 0x00000003, 0x4062C42A, 0x4063CC20, 0x40648C20, 0x00000003, + 0x4062C42B, 0x4063CC20, 0x40648C20, 0x00000003, 0x4062C42C, 0x4063CC20, + 0x40648C20, 0x00000003, 0x4062C42D, 0x4063CC20, 0x40648C20, 0x00000003, + 0x4062C42E, 0x4063CC20, 0x40648C20, 0x00000002, 0x4062C421, 0x4063D020, + 0x00000002, 0x4062C422, 0x4063D020, 0x00000002, 0x4062C423, 0x4063D020, + 0x00000002, 0x4062C424, 0x4063D020, 0x00000002, 0x4062C425, 0x4063D020, + 0x00000002, 0x4062C426, 0x4063D020, 0x00000002, 0x4062C427, 0x4063D020, + 0x00000002, 0x4062C428, 0x4063D020, 0x00000002, 0x4062C429, 0x4063D020, + 0x00000002, 0x4062C42A, 0x4063D020, 0x00000002, 0x4062C42B, 0x4063D020, + 0x00000002, 0x4062C42C, 0x4063D020, 0x00000002, 0x4062C42D, 0x4063D020, + 0x00000002, 0x4062C42E, 0x4063D020, 0x00000002, + // Block 578, offset 0x9080 + 0x4062C42F, 0x4063D020, 0x00000002, 0x4062C430, 0x4063D020, 0x00000002, + 0x4062C431, 0x4063D020, 0x00000002, 0x4062C432, 0x4063D020, 0x00000002, + 0x4062C433, 0x4063D020, 0x00000002, 0x4062C434, 0x4063D020, 0x00000002, + 0x4062C435, 0x4063D020, 0x00000002, 0x4062C436, 0x4063D020, 0x00000002, + 0x4062C437, 0x4063D020, 0x00000002, 0x4062C438, 0x4063D020, 0x00000002, + 0x4062C439, 0x4063D020, 0x00000002, 0x4062C43A, 0x4063D020, 0x00000002, + 0x4062C43B, 0x4063D020, 0x00000002, 0x4062C43C, 0x4063D020, 0x00000002, + 0x4062C43D, 0x4063D020, 0x00000002, 0x4062C43E, 0x4063D020, 0x00000002, + 0x4062C43F, 0x4063D020, 0x00000002, 0x4062C440, 0x4063D020, 0x00000002, + 0x4062C441, 0x4063D020, 0x00000002, 0x4062C442, 0x4063D020, 0x00000002, + 0x4062C443, 0x4063D020, 0x00000002, 0x4062C444, + // Block 579, offset 0x90c0 + 0x4063D020, 0x00000002, 0x4062C445, 0x4063D020, 0x00000002, 0x4062C446, + 0x4063D020, 0x00000002, 0x4062C447, 0x4063D020, 0x00000002, 0x4062C448, + 0x4063D020, 0x00000002, 0x4062C449, 0x4063D020, 0x00000002, 0x4062C44A, + 0x4063D020, 0x00000002, 0x4062C44B, 0x4063D020, 0x00000002, 0x4062C44C, + 0x4063D020, 0x00000002, 0x4062C44D, 0x4063D020, 0x00000002, 0x4062C44E, + 0x4063D020, 0x00000002, 0x4062C44F, 0x4063D020, 0x00000002, 0x4062C450, + 0x4063D020, 0x00000003, 0x4062C421, 0x4063D020, 0x40646420, 0x00000003, + 0x4062C422, 0x4063D020, 0x40646420, 0x00000003, 0x4062C423, 0x4063D020, + 0x40646420, 0x00000003, 0x4062C424, 0x4063D020, 0x40646420, 0x00000003, + 0x4062C425, 0x4063D020, 0x40646420, 0x00000003, 0x4062C426, 0x4063D020, + 0x40646420, 0x00000003, 0x4062C421, 0x4063D020, + // Block 580, offset 0x9100 + 0x40646A20, 0x00000003, 0x4062C422, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C423, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C424, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C425, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C426, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C427, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C428, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C429, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C42A, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C42B, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C42C, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C42D, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C42E, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C42F, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C430, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C431, 0x4063D020, + // Block 581, offset 0x9140 + 0x40646A20, 0x00000003, 0x4062C432, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C433, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C434, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C435, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C436, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C437, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C438, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C439, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C43A, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C43B, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C43C, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C43D, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C43E, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C43F, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C440, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C441, 0x4063D020, + // Block 582, offset 0x9180 + 0x40646A20, 0x00000003, 0x4062C442, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C443, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C444, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C445, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C446, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C447, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C448, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C449, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C44A, 0x4063D020, + 0x40646A20, 0x00000003, 0x4062C44B, 0x4063D020, 0x40646A20, 0x00000003, + 0x4062C44C, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C421, 0x4063D020, + 0x40647220, 0x00000003, 0x4062C422, 0x4063D020, 0x40647220, 0x00000003, + 0x4062C423, 0x4063D020, 0x40647220, 0x00000003, 0x4062C424, 0x4063D020, + 0x40647220, 0x00000003, 0x4062C425, 0x4063D020, + // Block 583, offset 0x91c0 + 0x40647220, 0x00000003, 0x4062C426, 0x4063D020, 0x40647220, 0x00000003, + 0x4062C427, 0x4063D020, 0x40647220, 0x00000003, 0x4062C428, 0x4063D020, + 0x40647220, 0x00000003, 0x4062C429, 0x4063D020, 0x40647220, 0x00000003, + 0x4062C42A, 0x4063D020, 0x40647220, 0x00000003, 0x4062C42B, 0x4063D020, + 0x40647220, 0x00000003, 0x4062C42C, 0x4063D020, 0x40647220, 0x00000003, + 0x4062C42D, 0x4063D020, 0x40647220, 0x00000003, 0x4062C42E, 0x4063D020, + 0x40647220, 0x00000003, 0x4062C42F, 0x4063D020, 0x40647220, 0x00000003, + 0x4062C430, 0x4063D020, 0x40647220, 0x00000003, 0x4062C431, 0x4063D020, + 0x40647220, 0x00000003, 0x4062C432, 0x4063D020, 0x40647220, 0x00000003, + 0x4062C433, 0x4063D020, 0x40647220, 0x00000003, 0x4062C434, 0x4063D020, + 0x40647220, 0x00000003, 0x4062C421, 0x4063D020, + // Block 584, offset 0x9200 + 0x40648220, 0x00000003, 0x4062C422, 0x4063D020, 0x40648220, 0x00000003, + 0x4062C423, 0x4063D020, 0x40648220, 0x00000003, 0x4062C421, 0x4063D020, + 0x40648420, 0x00000003, 0x4062C422, 0x4063D020, 0x40648420, 0x00000003, + 0x4062C423, 0x4063D020, 0x40648420, 0x00000003, 0x4062C424, 0x4063D020, + 0x40648420, 0x00000003, 0x4062C425, 0x4063D020, 0x40648420, 0x00000003, + 0x4062C426, 0x4063D020, 0x40648420, 0x00000003, 0x4062C427, 0x4063D020, + 0x40648420, 0x00000003, 0x4062C428, 0x4063D020, 0x40648420, 0x00000003, + 0x4062C421, 0x4063D020, 0x40648C20, 0x00000003, 0x4062C422, 0x4063D020, + 0x40648C20, 0x00000003, 0x4062C423, 0x4063D020, 0x40648C20, 0x00000003, + 0x4062C424, 0x4063D020, 0x40648C20, 0x00000003, 0x4062C425, 0x4063D020, + 0x40648C20, 0x00000003, 0x4062C426, 0x4063D020, + // Block 585, offset 0x9240 + 0x40648C20, 0x00000003, 0x4062C427, 0x4063D020, 0x40648C20, 0x00000002, + 0x4062C821, 0x4063A820, 0x00000002, 0x4062C822, 0x4063A820, 0x00000002, + 0x4062C823, 0x4063A820, 0x00000002, 0x4062C824, 0x4063A820, 0x00000002, + 0x4062C825, 0x4063A820, 0x00000002, 0x4062C826, 0x4063A820, 0x00000002, + 0x4062C827, 0x4063A820, 0x00000002, 0x4062C828, 0x4063A820, 0x00000002, + 0x4062C829, 0x4063A820, 0x00000002, 0x4062C82A, 0x4063A820, 0x00000002, + 0x4062C82B, 0x4063A820, 0x00000002, 0x4062C82C, 0x4063A820, 0x00000002, + 0x4062C82D, 0x4063A820, 0x00000002, 0x4062C82E, 0x4063A820, 0x00000002, + 0x4062C82F, 0x4063A820, 0x00000002, 0x4062C830, 0x4063A820, 0x00000002, + 0x4062C831, 0x4063A820, 0x00000002, 0x4062C832, 0x4063A820, 0x00000002, + 0x4062C833, 0x4063A820, 0x00000002, 0x4062C834, + // Block 586, offset 0x9280 + 0x4063A820, 0x00000002, 0x4062C835, 0x4063A820, 0x00000002, 0x4062C836, + 0x4063A820, 0x00000003, 0x4062C821, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C822, 0x4063A820, 0x40646420, 0x00000003, 0x4062C823, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C824, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C825, 0x4063A820, 0x40646420, 0x00000003, 0x4062C826, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C827, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C828, 0x4063A820, 0x40646420, 0x00000003, 0x4062C829, 0x4063A820, + 0x40646420, 0x00000003, 0x4062C82A, 0x4063A820, 0x40646420, 0x00000003, + 0x4062C821, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C822, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C823, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C824, 0x4063A820, 0x40646A20, 0x00000003, + // Block 587, offset 0x92c0 + 0x4062C825, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C826, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C827, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C828, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C829, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C82A, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C82B, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C82C, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C82D, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C82E, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C82F, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C830, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C831, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C832, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C833, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C834, 0x4063A820, 0x40646A20, 0x00000003, + // Block 588, offset 0x9300 + 0x4062C835, 0x4063A820, 0x40646A20, 0x00000003, 0x4062C836, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062C837, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062C821, 0x4063A820, 0x40647220, 0x00000003, 0x4062C822, 0x4063A820, + 0x40647220, 0x00000003, 0x4062C823, 0x4063A820, 0x40647220, 0x00000003, + 0x4062C824, 0x4063A820, 0x40647220, 0x00000003, 0x4062C825, 0x4063A820, + 0x40647220, 0x00000003, 0x4062C826, 0x4063A820, 0x40647220, 0x00000003, + 0x4062C827, 0x4063A820, 0x40647220, 0x00000003, 0x4062C821, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C822, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C823, 0x4063A820, 0x40648220, 0x00000003, 0x4062C824, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C825, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C826, 0x4063A820, 0x40648220, 0x00000003, + // Block 589, offset 0x9340 + 0x4062C827, 0x4063A820, 0x40648220, 0x00000003, 0x4062C828, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C829, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C82A, 0x4063A820, 0x40648220, 0x00000003, 0x4062C82B, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C82C, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C82D, 0x4063A820, 0x40648220, 0x00000003, 0x4062C82E, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C82F, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C830, 0x4063A820, 0x40648220, 0x00000003, 0x4062C831, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C832, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C833, 0x4063A820, 0x40648220, 0x00000003, 0x4062C834, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C835, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C836, 0x4063A820, 0x40648220, 0x00000003, + // Block 590, offset 0x9380 + 0x4062C837, 0x4063A820, 0x40648220, 0x00000003, 0x4062C838, 0x4063A820, + 0x40648220, 0x00000003, 0x4062C839, 0x4063A820, 0x40648220, 0x00000003, + 0x4062C83A, 0x4063A820, 0x40648220, 0x00000003, 0x4062C821, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C822, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C823, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C824, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C825, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C826, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C827, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C828, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C829, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C82A, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C82B, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C82C, 0x4063A820, 0x40648C20, 0x00000003, + // Block 591, offset 0x93c0 + 0x4062C82D, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C82E, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C82F, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C830, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C831, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C832, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C833, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C834, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C835, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C836, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C837, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C838, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C839, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C83A, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C83B, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C83C, 0x4063A820, 0x40648C20, 0x00000003, + // Block 592, offset 0x9400 + 0x4062C83D, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C83E, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C83F, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C840, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C841, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C842, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C843, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C844, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C845, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C846, 0x4063A820, 0x40648C20, 0x00000003, 0x4062C847, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062C848, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062C849, 0x4063A820, 0x40648C20, 0x00000002, 0x4062C821, 0x4063AA20, + 0x00000002, 0x4062C822, 0x4063AA20, 0x00000002, 0x4062C823, 0x4063AA20, + 0x00000002, 0x4062C824, 0x4063AA20, 0x00000002, + // Block 593, offset 0x9440 + 0x4062C825, 0x4063AA20, 0x00000002, 0x4062C826, 0x4063AA20, 0x00000002, + 0x4062C827, 0x4063AA20, 0x00000002, 0x4062C828, 0x4063AA20, 0x00000002, + 0x4062C829, 0x4063AA20, 0x00000002, 0x4062C82A, 0x4063AA20, 0x00000002, + 0x4062C82B, 0x4063AA20, 0x00000002, 0x4062C82C, 0x4063AA20, 0x00000002, + 0x4062C82D, 0x4063AA20, 0x00000002, 0x4062C82E, 0x4063AA20, 0x00000003, + 0x4062C821, 0x4063AA20, 0x40646420, 0x00000003, 0x4062C822, 0x4063AA20, + 0x40646420, 0x00000003, 0x4062C823, 0x4063AA20, 0x40646420, 0x00000003, + 0x4062C824, 0x4063AA20, 0x40646420, 0x00000003, 0x4062C825, 0x4063AA20, + 0x40646420, 0x00000003, 0x4062C826, 0x4063AA20, 0x40646420, 0x00000003, + 0x4062C827, 0x4063AA20, 0x40646420, 0x00000003, 0x4062C828, 0x4063AA20, + 0x40646420, 0x00000003, 0x4062C829, 0x4063AA20, + // Block 594, offset 0x9480 + 0x40646420, 0x00000003, 0x4062C82A, 0x4063AA20, 0x40646420, 0x00000002, + 0x4062C821, 0x4063B020, 0x00000002, 0x4062C822, 0x4063B020, 0x00000002, + 0x4062C823, 0x4063B020, 0x00000002, 0x4062C824, 0x4063B020, 0x00000002, + 0x4062C825, 0x4063B020, 0x00000002, 0x4062C826, 0x4063B020, 0x00000002, + 0x4062C827, 0x4063B020, 0x00000002, 0x4062C828, 0x4063B020, 0x00000002, + 0x4062C829, 0x4063B020, 0x00000003, 0x4062C821, 0x4063B020, 0x40646420, + 0x00000003, 0x4062C822, 0x4063B020, 0x40646420, 0x00000003, 0x4062C823, + 0x4063B020, 0x40646420, 0x00000003, 0x4062C824, 0x4063B020, 0x40646420, + 0x00000003, 0x4062C825, 0x4063B020, 0x40646420, 0x00000003, 0x4062C826, + 0x4063B020, 0x40646420, 0x00000003, 0x4062C827, 0x4063B020, 0x40646420, + 0x00000003, 0x4062C828, 0x4063B020, 0x40646420, + // Block 595, offset 0x94c0 + 0x00000003, 0x4062C829, 0x4063B020, 0x40646420, 0x00000003, 0x4062C82A, + 0x4063B020, 0x40646420, 0x00000003, 0x4062C82B, 0x4063B020, 0x40646420, + 0x00000003, 0x4062C82C, 0x4063B020, 0x40646420, 0x00000003, 0x4062C82D, + 0x4063B020, 0x40646420, 0x00000003, 0x4062C82E, 0x4063B020, 0x40646420, + 0x00000003, 0x4062C82F, 0x4063B020, 0x40646420, 0x00000003, 0x4062C830, + 0x4063B020, 0x40646420, 0x00000003, 0x4062C831, 0x4063B020, 0x40646420, + 0x00000003, 0x4062C832, 0x4063B020, 0x40646420, 0x00000003, 0x4062C833, + 0x4063B020, 0x40646420, 0x00000003, 0x4062C834, 0x4063B020, 0x40646420, + 0x00000003, 0x4062C835, 0x4063B020, 0x40646420, 0x00000003, 0x4062C836, + 0x4063B020, 0x40646420, 0x00000003, 0x4062C837, 0x4063B020, 0x40646420, + 0x00000003, 0x4062C821, 0x4063B020, 0x40646A20, + // Block 596, offset 0x9500 + 0x00000003, 0x4062C822, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C823, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C824, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C825, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C826, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C827, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C828, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C829, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C82A, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C82B, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C82C, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C82D, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C82E, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C82F, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C830, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C831, 0x4063B020, 0x40646A20, + // Block 597, offset 0x9540 + 0x00000003, 0x4062C832, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C833, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C834, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C835, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C836, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C837, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C838, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C839, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C83A, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C83B, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C83C, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C83D, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C83E, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C83F, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C840, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C841, 0x4063B020, 0x40646A20, + // Block 598, offset 0x9580 + 0x00000003, 0x4062C842, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C843, + 0x4063B020, 0x40646A20, 0x00000003, 0x4062C844, 0x4063B020, 0x40646A20, + 0x00000003, 0x4062C845, 0x4063B020, 0x40646A20, 0x00000003, 0x4062C821, + 0x4063B020, 0x40647220, 0x00000003, 0x4062C822, 0x4063B020, 0x40647220, + 0x00000003, 0x4062C823, 0x4063B020, 0x40647220, 0x00000003, 0x4062C824, + 0x4063B020, 0x40647220, 0x00000003, 0x4062C825, 0x4063B020, 0x40647220, + 0x00000003, 0x4062C826, 0x4063B020, 0x40647220, 0x00000003, 0x4062C827, + 0x4063B020, 0x40647220, 0x00000003, 0x4062C828, 0x4063B020, 0x40647220, + 0x00000003, 0x4062C829, 0x4063B020, 0x40647220, 0x00000003, 0x4062C82A, + 0x4063B020, 0x40647220, 0x00000003, 0x4062C82B, 0x4063B020, 0x40647220, + 0x00000003, 0x4062C82C, 0x4063B020, 0x40647220, + // Block 599, offset 0x95c0 + 0x00000003, 0x4062C82D, 0x4063B020, 0x40647220, 0x00000003, 0x4062C82E, + 0x4063B020, 0x40647220, 0x00000003, 0x4062C82F, 0x4063B020, 0x40647220, + 0x00000003, 0x4062C830, 0x4063B020, 0x40647220, 0x00000003, 0x4062C831, + 0x4063B020, 0x40647220, 0x00000003, 0x4062C832, 0x4063B020, 0x40647220, + 0x00000003, 0x4062C833, 0x4063B020, 0x40647220, 0x00000003, 0x4062C834, + 0x4063B020, 0x40647220, 0x00000003, 0x4062C821, 0x4063B020, 0x40648220, + 0x00000003, 0x4062C822, 0x4063B020, 0x40648220, 0x00000003, 0x4062C823, + 0x4063B020, 0x40648220, 0x00000003, 0x4062C824, 0x4063B020, 0x40648220, + 0x00000003, 0x4062C825, 0x4063B020, 0x40648220, 0x00000003, 0x4062C826, + 0x4063B020, 0x40648220, 0x00000003, 0x4062C827, 0x4063B020, 0x40648220, + 0x00000003, 0x4062C828, 0x4063B020, 0x40648220, + // Block 600, offset 0x9600 + 0x00000003, 0x4062C829, 0x4063B020, 0x40648220, 0x00000003, 0x4062C82A, + 0x4063B020, 0x40648220, 0x00000003, 0x4062C82B, 0x4063B020, 0x40648220, + 0x00000003, 0x4062C82C, 0x4063B020, 0x40648220, 0x00000003, 0x4062C82D, + 0x4063B020, 0x40648220, 0x00000003, 0x4062C82E, 0x4063B020, 0x40648220, + 0x00000003, 0x4062C82F, 0x4063B020, 0x40648220, 0x00000003, 0x4062C830, + 0x4063B020, 0x40648220, 0x00000003, 0x4062C831, 0x4063B020, 0x40648220, + 0x00000003, 0x4062C832, 0x4063B020, 0x40648220, 0x00000003, 0x4062C821, + 0x4063B020, 0x40648420, 0x00000003, 0x4062C822, 0x4063B020, 0x40648420, + 0x00000003, 0x4062C823, 0x4063B020, 0x40648420, 0x00000003, 0x4062C824, + 0x4063B020, 0x40648420, 0x00000003, 0x4062C825, 0x4063B020, 0x40648420, + 0x00000003, 0x4062C826, 0x4063B020, 0x40648420, + // Block 601, offset 0x9640 + 0x00000003, 0x4062C827, 0x4063B020, 0x40648420, 0x00000003, 0x4062C828, + 0x4063B020, 0x40648420, 0x00000003, 0x4062C829, 0x4063B020, 0x40648420, + 0x00000003, 0x4062C82A, 0x4063B020, 0x40648420, 0x00000003, 0x4062C82B, + 0x4063B020, 0x40648420, 0x00000003, 0x4062C82C, 0x4063B020, 0x40648420, + 0x00000003, 0x4062C82D, 0x4063B020, 0x40648420, 0x00000003, 0x4062C82E, + 0x4063B020, 0x40648420, 0x00000003, 0x4062C82F, 0x4063B020, 0x40648420, + 0x00000003, 0x4062C821, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C822, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062C823, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062C824, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C825, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062C826, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062C827, 0x4063B020, 0x40648C20, + // Block 602, offset 0x9680 + 0x00000003, 0x4062C828, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C829, + 0x4063B020, 0x40648C20, 0x00000003, 0x4062C82A, 0x4063B020, 0x40648C20, + 0x00000003, 0x4062C82B, 0x4063B020, 0x40648C20, 0x00000003, 0x4062C82C, + 0x4063B020, 0x40648C20, 0x00000002, 0x4062C821, 0x4063B220, 0x00000002, + 0x4062C822, 0x4063B220, 0x00000002, 0x4062C823, 0x4063B220, 0x00000002, + 0x4062C824, 0x4063B220, 0x00000002, 0x4062C825, 0x4063B220, 0x00000002, + 0x4062C826, 0x4063B220, 0x00000002, 0x4062C827, 0x4063B220, 0x00000002, + 0x4062C828, 0x4063B220, 0x00000002, 0x4062C829, 0x4063B220, 0x00000002, + 0x4062C82A, 0x4063B220, 0x00000002, 0x4062C82B, 0x4063B220, 0x00000002, + 0x4062C82C, 0x4063B220, 0x00000002, 0x4062C82D, 0x4063B220, 0x00000002, + 0x4062C82E, 0x4063B220, 0x00000002, 0x4062C82F, + // Block 603, offset 0x96c0 + 0x4063B220, 0x00000002, 0x4062C830, 0x4063B220, 0x00000002, 0x4062C831, + 0x4063B220, 0x00000002, 0x4062C832, 0x4063B220, 0x00000002, 0x4062C833, + 0x4063B220, 0x00000002, 0x4062C834, 0x4063B220, 0x00000002, 0x4062C821, + 0x4063B820, 0x00000002, 0x4062C822, 0x4063B820, 0x00000002, 0x4062C823, + 0x4063B820, 0x00000002, 0x4062C824, 0x4063B820, 0x00000002, 0x4062C825, + 0x4063B820, 0x00000002, 0x4062C826, 0x4063B820, 0x00000002, 0x4062C827, + 0x4063B820, 0x00000002, 0x4062C828, 0x4063B820, 0x00000002, 0x4062C829, + 0x4063B820, 0x00000002, 0x4062C82A, 0x4063B820, 0x00000002, 0x4062C82B, + 0x4063B820, 0x00000002, 0x4062C82C, 0x4063B820, 0x00000002, 0x4062C82D, + 0x4063B820, 0x00000002, 0x4062C82E, 0x4063B820, 0x00000002, 0x4062C82F, + 0x4063B820, 0x00000002, 0x4062C830, 0x4063B820, + // Block 604, offset 0x9700 + 0x00000002, 0x4062C831, 0x4063B820, 0x00000002, 0x4062C832, 0x4063B820, + 0x00000002, 0x4062C833, 0x4063B820, 0x00000002, 0x4062C834, 0x4063B820, + 0x00000002, 0x4062C835, 0x4063B820, 0x00000002, 0x4062C836, 0x4063B820, + 0x00000002, 0x4062C837, 0x4063B820, 0x00000002, 0x4062C838, 0x4063B820, + 0x00000002, 0x4062C839, 0x4063B820, 0x00000002, 0x4062C83A, 0x4063B820, + 0x00000002, 0x4062C83B, 0x4063B820, 0x00000002, 0x4062C83C, 0x4063B820, + 0x00000002, 0x4062C83D, 0x4063B820, 0x00000002, 0x4062C83E, 0x4063B820, + 0x00000002, 0x4062C83F, 0x4063B820, 0x00000002, 0x4062C840, 0x4063B820, + 0x00000002, 0x4062C841, 0x4063B820, 0x00000002, 0x4062C842, 0x4063B820, + 0x00000002, 0x4062C843, 0x4063B820, 0x00000002, 0x4062C844, 0x4063B820, + 0x00000002, 0x4062C845, 0x4063B820, 0x00000002, + // Block 605, offset 0x9740 + 0x4062C846, 0x4063B820, 0x00000002, 0x4062C847, 0x4063B820, 0x00000002, + 0x4062C848, 0x4063B820, 0x00000002, 0x4062C849, 0x4063B820, 0x00000002, + 0x4062C84A, 0x4063B820, 0x00000002, 0x4062C84B, 0x4063B820, 0x00000002, + 0x4062C84C, 0x4063B820, 0x00000002, 0x4062C84D, 0x4063B820, 0x00000002, + 0x4062C84E, 0x4063B820, 0x00000002, 0x4062C84F, 0x4063B820, 0x00000002, + 0x4062C850, 0x4063B820, 0x00000002, 0x4062C851, 0x4063B820, 0x00000002, + 0x4062C852, 0x4063B820, 0x00000002, 0x4062C853, 0x4063B820, 0x00000002, + 0x4062C854, 0x4063B820, 0x00000002, 0x4062C855, 0x4063B820, 0x00000002, + 0x4062C856, 0x4063B820, 0x00000002, 0x4062C857, 0x4063B820, 0x00000002, + 0x4062C858, 0x4063B820, 0x00000003, 0x4062C821, 0x4063B820, 0x40646420, + 0x00000003, 0x4062C822, 0x4063B820, 0x40646420, + // Block 606, offset 0x9780 + 0x00000003, 0x4062C823, 0x4063B820, 0x40646420, 0x00000003, 0x4062C824, + 0x4063B820, 0x40646420, 0x00000003, 0x4062C825, 0x4063B820, 0x40646420, + 0x00000003, 0x4062C826, 0x4063B820, 0x40646420, 0x00000003, 0x4062C827, + 0x4063B820, 0x40646420, 0x00000003, 0x4062C828, 0x4063B820, 0x40646420, + 0x00000003, 0x4062C829, 0x4063B820, 0x40646420, 0x00000003, 0x4062C82A, + 0x4063B820, 0x40646420, 0x00000003, 0x4062C82B, 0x4063B820, 0x40646420, + 0x00000003, 0x4062C82C, 0x4063B820, 0x40646420, 0x00000003, 0x4062C821, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062C822, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062C823, 0x4063B820, 0x40646A20, 0x00000003, 0x4062C824, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062C825, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062C821, 0x4063B820, 0x40648C20, + // Block 607, offset 0x97c0 + 0x00000003, 0x4062C822, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C823, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C824, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C825, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C826, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C827, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C828, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C829, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C82A, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C82B, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C82C, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C82D, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062C82E, 0x4063B820, 0x40648C20, 0x00000003, 0x4062C82F, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062C821, 0x4063BA20, 0x40647220, + 0x00000002, 0x4062C821, 0x4063BE20, 0x00000002, + // Block 608, offset 0x9800 + 0x4062C822, 0x4063BE20, 0x00000002, 0x4062C823, 0x4063BE20, 0x00000002, + 0x4062C824, 0x4063BE20, 0x00000002, 0x4062C825, 0x4063BE20, 0x00000002, + 0x4062C826, 0x4063BE20, 0x00000002, 0x4062C827, 0x4063BE20, 0x00000002, + 0x4062C828, 0x4063BE20, 0x00000002, 0x4062C829, 0x4063BE20, 0x00000002, + 0x4062C82A, 0x4063BE20, 0x00000002, 0x4062C82B, 0x4063BE20, 0x00000002, + 0x4062C821, 0x4063C220, 0x00000002, 0x4062C822, 0x4063C220, 0x00000002, + 0x4062C823, 0x4063C220, 0x00000002, 0x4062C824, 0x4063C220, 0x00000002, + 0x4062C825, 0x4063C220, 0x00000002, 0x4062C826, 0x4063C220, 0x00000002, + 0x4062C827, 0x4063C220, 0x00000002, 0x4062C828, 0x4063C220, 0x00000002, + 0x4062C829, 0x4063C220, 0x00000002, 0x4062C82A, 0x4063C220, 0x00000002, + 0x4062C82B, 0x4063C220, 0x00000002, 0x4062C82C, + // Block 609, offset 0x9840 + 0x4063C220, 0x00000002, 0x4062C82D, 0x4063C220, 0x00000002, 0x4062C82E, + 0x4063C220, 0x00000002, 0x4062C82F, 0x4063C220, 0x00000002, 0x4062C830, + 0x4063C220, 0x00000002, 0x4062C831, 0x4063C220, 0x00000002, 0x4062C832, + 0x4063C220, 0x00000002, 0x4062C833, 0x4063C220, 0x00000002, 0x4062C834, + 0x4063C220, 0x00000002, 0x4062C835, 0x4063C220, 0x00000002, 0x4062C836, + 0x4063C220, 0x00000002, 0x4062C837, 0x4063C220, 0x00000002, 0x4062C838, + 0x4063C220, 0x00000002, 0x4062C839, 0x4063C220, 0x00000002, 0x4062C83A, + 0x4063C220, 0x00000002, 0x4062C83B, 0x4063C220, 0x00000002, 0x4062C83C, + 0x4063C220, 0x00000002, 0x4062C83D, 0x4063C220, 0x00000002, 0x4062C83E, + 0x4063C220, 0x00000002, 0x4062C83F, 0x4063C220, 0x00000002, 0x4062C840, + 0x4063C220, 0x00000002, 0x4062C841, 0x4063C220, + // Block 610, offset 0x9880 + 0x00000002, 0x4062C842, 0x4063C220, 0x00000002, 0x4062C843, 0x4063C220, + 0x00000002, 0x4062C844, 0x4063C220, 0x00000002, 0x4062C845, 0x4063C220, + 0x00000002, 0x4062C846, 0x4063C220, 0x00000002, 0x4062C847, 0x4063C220, + 0x00000002, 0x4062C848, 0x4063C220, 0x00000002, 0x4062C849, 0x4063C220, + 0x00000002, 0x4062C84A, 0x4063C220, 0x00000002, 0x4062C84B, 0x4063C220, + 0x00000002, 0x4062C84C, 0x4063C220, 0x00000002, 0x4062C84D, 0x4063C220, + 0x00000002, 0x4062C84E, 0x4063C220, 0x00000002, 0x4062C84F, 0x4063C220, + 0x00000002, 0x4062C850, 0x4063C220, 0x00000002, 0x4062C851, 0x4063C220, + 0x00000002, 0x4062C852, 0x4063C220, 0x00000002, 0x4062C853, 0x4063C220, + 0x00000003, 0x4062C821, 0x4063C220, 0x40646420, 0x00000003, 0x4062C822, + 0x4063C220, 0x40646420, 0x00000003, 0x4062C823, + // Block 611, offset 0x98c0 + 0x4063C220, 0x40646420, 0x00000003, 0x4062C824, 0x4063C220, 0x40646420, + 0x00000003, 0x4062C825, 0x4063C220, 0x40646420, 0x00000003, 0x4062C826, + 0x4063C220, 0x40646420, 0x00000003, 0x4062C827, 0x4063C220, 0x40646420, + 0x00000003, 0x4062C828, 0x4063C220, 0x40646420, 0x00000003, 0x4062C829, + 0x4063C220, 0x40646420, 0x00000003, 0x4062C82A, 0x4063C220, 0x40646420, + 0x00000003, 0x4062C82B, 0x4063C220, 0x40646420, 0x00000003, 0x4062C82C, + 0x4063C220, 0x40646420, 0x00000003, 0x4062C82D, 0x4063C220, 0x40646420, + 0x00000003, 0x4062C82E, 0x4063C220, 0x40646420, 0x00000003, 0x4062C82F, + 0x4063C220, 0x40646420, 0x00000003, 0x4062C830, 0x4063C220, 0x40646420, + 0x00000003, 0x4062C831, 0x4063C220, 0x40646420, 0x00000003, 0x4062C821, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C822, + // Block 612, offset 0x9900 + 0x4063C220, 0x40646A20, 0x00000003, 0x4062C823, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062C821, 0x4063C220, 0x40647220, 0x00000003, 0x4062C822, + 0x4063C220, 0x40647220, 0x00000003, 0x4062C823, 0x4063C220, 0x40647220, + 0x00000003, 0x4062C824, 0x4063C220, 0x40647220, 0x00000003, 0x4062C821, + 0x4063C220, 0x40648C20, 0x00000003, 0x4062C822, 0x4063C220, 0x40648C20, + 0x00000003, 0x4062C823, 0x4063C220, 0x40648C20, 0x00000003, 0x4062C824, + 0x4063C220, 0x40648C20, 0x00000003, 0x4062C825, 0x4063C220, 0x40648C20, + 0x00000003, 0x4062C826, 0x4063C220, 0x40648C20, 0x00000003, 0x4062C827, + 0x4063C220, 0x40648C20, 0x00000003, 0x4062C828, 0x4063C220, 0x40648C20, + 0x00000003, 0x4062C829, 0x4063C220, 0x40648C20, 0x00000002, 0x4062C821, + 0x4063C620, 0x00000002, 0x4062C822, 0x4063C620, + // Block 613, offset 0x9940 + 0x00000002, 0x4062C823, 0x4063C620, 0x00000002, 0x4062C824, 0x4063C620, + 0x00000002, 0x4062C825, 0x4063C620, 0x00000002, 0x4062C826, 0x4063C620, + 0x00000002, 0x4062C827, 0x4063C620, 0x00000002, 0x4062C828, 0x4063C620, + 0x00000002, 0x4062C829, 0x4063C620, 0x00000002, 0x4062C821, 0x4063C820, + 0x00000002, 0x4062C822, 0x4063C820, 0x00000002, 0x4062C823, 0x4063C820, + 0x00000002, 0x4062C824, 0x4063C820, 0x00000002, 0x4062C825, 0x4063C820, + 0x00000002, 0x4062C826, 0x4063C820, 0x00000002, 0x4062C827, 0x4063C820, + 0x00000002, 0x4062C828, 0x4063C820, 0x00000002, 0x4062C829, 0x4063C820, + 0x00000002, 0x4062C82A, 0x4063C820, 0x00000002, 0x4062C82B, 0x4063C820, + 0x00000002, 0x4062C82C, 0x4063C820, 0x00000002, 0x4062C82D, 0x4063C820, + 0x00000002, 0x4062C82E, 0x4063C820, 0x00000002, + // Block 614, offset 0x9980 + 0x4062C82F, 0x4063C820, 0x00000002, 0x4062C830, 0x4063C820, 0x00000002, + 0x4062C831, 0x4063C820, 0x00000003, 0x4062C821, 0x4063CC20, 0x40646420, + 0x00000003, 0x4062C822, 0x4063CC20, 0x40646420, 0x00000003, 0x4062C823, + 0x4063CC20, 0x40646420, 0x00000003, 0x4062C824, 0x4063CC20, 0x40646420, + 0x00000003, 0x4062C825, 0x4063CC20, 0x40646420, 0x00000003, 0x4062C826, + 0x4063CC20, 0x40646420, 0x00000003, 0x4062C827, 0x4063CC20, 0x40646420, + 0x00000003, 0x4062C821, 0x4063CC20, 0x40648C20, 0x00000002, 0x4062C821, + 0x4063D020, 0x00000002, 0x4062C822, 0x4063D020, 0x00000002, 0x4062C823, + 0x4063D020, 0x00000002, 0x4062C824, 0x4063D020, 0x00000002, 0x4062C825, + 0x4063D020, 0x00000002, 0x4062C826, 0x4063D020, 0x00000002, 0x4062C827, + 0x4063D020, 0x00000002, 0x4062C828, 0x4063D020, + // Block 615, offset 0x99c0 + 0x00000002, 0x4062C829, 0x4063D020, 0x00000002, 0x4062C82A, 0x4063D020, + 0x00000002, 0x4062C82B, 0x4063D020, 0x00000002, 0x4062C82C, 0x4063D020, + 0x00000002, 0x4062C82D, 0x4063D020, 0x00000002, 0x4062C82E, 0x4063D020, + 0x00000002, 0x4062C82F, 0x4063D020, 0x00000002, 0x4062C830, 0x4063D020, + 0x00000002, 0x4062C831, 0x4063D020, 0x00000002, 0x4062C832, 0x4063D020, + 0x00000002, 0x4062C833, 0x4063D020, 0x00000002, 0x4062C834, 0x4063D020, + 0x00000002, 0x4062C835, 0x4063D020, 0x00000002, 0x4062C836, 0x4063D020, + 0x00000002, 0x4062C837, 0x4063D020, 0x00000002, 0x4062C838, 0x4063D020, + 0x00000002, 0x4062C839, 0x4063D020, 0x00000002, 0x4062C83A, 0x4063D020, + 0x00000002, 0x4062C83B, 0x4063D020, 0x00000002, 0x4062C83C, 0x4063D020, + 0x00000002, 0x4062C83D, 0x4063D020, 0x00000002, + // Block 616, offset 0x9a00 + 0x4062C83E, 0x4063D020, 0x00000002, 0x4062C83F, 0x4063D020, 0x00000002, + 0x4062C840, 0x4063D020, 0x00000002, 0x4062C841, 0x4063D020, 0x00000002, + 0x4062C842, 0x4063D020, 0x00000002, 0x4062C843, 0x4063D020, 0x00000002, + 0x4062C844, 0x4063D020, 0x00000002, 0x4062C845, 0x4063D020, 0x00000002, + 0x4062C846, 0x4063D020, 0x00000002, 0x4062C847, 0x4063D020, 0x00000002, + 0x4062C848, 0x4063D020, 0x00000002, 0x4062C849, 0x4063D020, 0x00000002, + 0x4062C84A, 0x4063D020, 0x00000003, 0x4062C821, 0x4063D020, 0x40646420, + 0x00000003, 0x4062C822, 0x4063D020, 0x40646420, 0x00000003, 0x4062C823, + 0x4063D020, 0x40646420, 0x00000003, 0x4062C824, 0x4063D020, 0x40646420, + 0x00000003, 0x4062C821, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C822, + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C823, + // Block 617, offset 0x9a40 + 0x4063D020, 0x40646A20, 0x00000003, 0x4062C824, 0x4063D020, 0x40646A20, + 0x00000003, 0x4062C825, 0x4063D020, 0x40646A20, 0x00000003, 0x4062C821, + 0x4063D020, 0x40647220, 0x00000003, 0x4062C822, 0x4063D020, 0x40647220, + 0x00000003, 0x4062C823, 0x4063D020, 0x40647220, 0x00000003, 0x4062C821, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C822, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C823, 0x4063D020, 0x40648220, 0x00000003, 0x4062C824, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C825, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C826, 0x4063D020, 0x40648220, 0x00000003, 0x4062C827, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C828, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C829, 0x4063D020, 0x40648220, 0x00000003, 0x4062C82A, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C82B, + // Block 618, offset 0x9a80 + 0x4063D020, 0x40648220, 0x00000003, 0x4062C82C, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C82D, 0x4063D020, 0x40648220, 0x00000003, 0x4062C82E, + 0x4063D020, 0x40648220, 0x00000003, 0x4062C82F, 0x4063D020, 0x40648220, + 0x00000003, 0x4062C830, 0x4063D020, 0x40648220, 0x00000003, 0x4062C821, + 0x4063D020, 0x40648420, 0x00000003, 0x4062C821, 0x4063D020, 0x40648C20, + 0x00000003, 0x4062C822, 0x4063D020, 0x40648C20, 0x00000002, 0x4062CA21, + 0x4063BC20, 0x00000002, 0x4062CA22, 0x4063BC20, 0x00000002, 0x4062CA23, + 0x4063BC20, 0x00000002, 0x4062CC21, 0x4063A820, 0x00000002, 0x4062CC22, + 0x4063A820, 0x00000002, 0x4062CC23, 0x4063A820, 0x00000002, 0x4062CC24, + 0x4063A820, 0x00000002, 0x4062CC25, 0x4063A820, 0x00000002, 0x4062CC26, + 0x4063A820, 0x00000002, 0x4062CC27, 0x4063A820, + // Block 619, offset 0x9ac0 + 0x00000002, 0x4062CC28, 0x4063A820, 0x00000002, 0x4062CC29, 0x4063A820, + 0x00000002, 0x4062CC2A, 0x4063A820, 0x00000002, 0x4062CC2B, 0x4063A820, + 0x00000002, 0x4062CC2C, 0x4063A820, 0x00000002, 0x4062CC2D, 0x4063A820, + 0x00000002, 0x4062CC2E, 0x4063A820, 0x00000002, 0x4062CC2F, 0x4063A820, + 0x00000002, 0x4062CC30, 0x4063A820, 0x00000002, 0x4062CC31, 0x4063A820, + 0x00000002, 0x4062CC32, 0x4063A820, 0x00000002, 0x4062CC33, 0x4063A820, + 0x00000002, 0x4062CC34, 0x4063A820, 0x00000002, 0x4062CC35, 0x4063A820, + 0x00000002, 0x4062CC36, 0x4063A820, 0x00000002, 0x4062CC37, 0x4063A820, + 0x00000002, 0x4062CC38, 0x4063A820, 0x00000002, 0x4062CC39, 0x4063A820, + 0x00000002, 0x4062CC3A, 0x4063A820, 0x00000002, 0x4062CC3B, 0x4063A820, + 0x00000003, 0x4062CC21, 0x4063A820, 0x40646420, + // Block 620, offset 0x9b00 + 0x00000003, 0x4062CC22, 0x4063A820, 0x40646420, 0x00000003, 0x4062CC23, + 0x4063A820, 0x40646420, 0x00000003, 0x4062CC24, 0x4063A820, 0x40646420, + 0x00000003, 0x4062CC25, 0x4063A820, 0x40646420, 0x00000003, 0x4062CC26, + 0x4063A820, 0x40646420, 0x00000003, 0x4062CC27, 0x4063A820, 0x40646420, + 0x00000003, 0x4062CC28, 0x4063A820, 0x40646420, 0x00000003, 0x4062CC29, + 0x4063A820, 0x40646420, 0x00000003, 0x4062CC2A, 0x4063A820, 0x40646420, + 0x00000003, 0x4062CC2B, 0x4063A820, 0x40646420, 0x00000003, 0x4062CC2C, + 0x4063A820, 0x40646420, 0x00000003, 0x4062CC2D, 0x4063A820, 0x40646420, + 0x00000003, 0x4062CC2E, 0x4063A820, 0x40646420, 0x00000003, 0x4062CC2F, + 0x4063A820, 0x40646420, 0x00000003, 0x4062CC30, 0x4063A820, 0x40646420, + 0x00000003, 0x4062CC31, 0x4063A820, 0x40646420, + // Block 621, offset 0x9b40 + 0x00000003, 0x4062CC32, 0x4063A820, 0x40646420, 0x00000003, 0x4062CC33, + 0x4063A820, 0x40646420, 0x00000003, 0x4062CC34, 0x4063A820, 0x40646420, + 0x00000003, 0x4062CC35, 0x4063A820, 0x40646420, 0x00000003, 0x4062CC36, + 0x4063A820, 0x40646420, 0x00000003, 0x4062CC37, 0x4063A820, 0x40646420, + 0x00000003, 0x4062CC21, 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC22, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC23, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062CC24, 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC25, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC26, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062CC27, 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC28, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC29, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062CC2A, 0x4063A820, 0x40646A20, + // Block 622, offset 0x9b80 + 0x00000003, 0x4062CC2B, 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC2C, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC2D, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062CC2E, 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC2F, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062CC21, 0x4063A820, 0x40647220, + 0x00000003, 0x4062CC22, 0x4063A820, 0x40647220, 0x00000003, 0x4062CC23, + 0x4063A820, 0x40647220, 0x00000003, 0x4062CC21, 0x4063A820, 0x40648220, + 0x00000003, 0x4062CC22, 0x4063A820, 0x40648220, 0x00000003, 0x4062CC23, + 0x4063A820, 0x40648220, 0x00000003, 0x4062CC24, 0x4063A820, 0x40648220, + 0x00000003, 0x4062CC25, 0x4063A820, 0x40648220, 0x00000003, 0x4062CC26, + 0x4063A820, 0x40648220, 0x00000003, 0x4062CC27, 0x4063A820, 0x40648220, + 0x00000003, 0x4062CC21, 0x4063A820, 0x40648420, + // Block 623, offset 0x9bc0 + 0x00000003, 0x4062CC22, 0x4063A820, 0x40648420, 0x00000003, 0x4062CC23, + 0x4063A820, 0x40648420, 0x00000003, 0x4062CC24, 0x4063A820, 0x40648420, + 0x00000003, 0x4062CC25, 0x4063A820, 0x40648420, 0x00000003, 0x4062CC26, + 0x4063A820, 0x40648420, 0x00000003, 0x4062CC21, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062CC22, 0x4063A820, 0x40648C20, 0x00000003, 0x4062CC23, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062CC24, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062CC25, 0x4063A820, 0x40648C20, 0x00000003, 0x4062CC26, + 0x4063A820, 0x40648C20, 0x00000003, 0x4062CC27, 0x4063A820, 0x40648C20, + 0x00000003, 0x4062CC28, 0x4063A820, 0x40648C20, 0x00000002, 0x4062CC21, + 0x4063AA20, 0x00000002, 0x4062CC22, 0x4063AA20, 0x00000002, 0x4062CC23, + 0x4063AA20, 0x00000002, 0x4062CC24, 0x4063AA20, + // Block 624, offset 0x9c00 + 0x00000002, 0x4062CC25, 0x4063AA20, 0x00000002, 0x4062CC26, 0x4063AA20, + 0x00000002, 0x4062CC27, 0x4063AA20, 0x00000002, 0x4062CC28, 0x4063AA20, + 0x00000002, 0x4062CC29, 0x4063AA20, 0x00000002, 0x4062CC2A, 0x4063AA20, + 0x00000002, 0x4062CC2B, 0x4063AA20, 0x00000002, 0x4062CC2C, 0x4063AA20, + 0x00000002, 0x4062CC2D, 0x4063AA20, 0x00000002, 0x4062CC2E, 0x4063AA20, + 0x00000002, 0x4062CC2F, 0x4063AA20, 0x00000002, 0x4062CC30, 0x4063AA20, + 0x00000002, 0x4062CC31, 0x4063AA20, 0x00000002, 0x4062CC32, 0x4063AA20, + 0x00000002, 0x4062CC33, 0x4063AA20, 0x00000002, 0x4062CC34, 0x4063AA20, + 0x00000002, 0x4062CC35, 0x4063AA20, 0x00000003, 0x4062CC21, 0x4063AA20, + 0x40646420, 0x00000003, 0x4062CC22, 0x4063AA20, 0x40646420, 0x00000003, + 0x4062CC21, 0x4063AA20, 0x40648C20, 0x00000003, + // Block 625, offset 0x9c40 + 0x4062CC22, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062CC23, 0x4063AA20, + 0x40648C20, 0x00000002, 0x4062CC21, 0x4063B020, 0x00000002, 0x4062CC21, + 0x4063B820, 0x00000002, 0x4062CC22, 0x4063B820, 0x00000002, 0x4062CC23, + 0x4063B820, 0x00000002, 0x4062CC24, 0x4063B820, 0x00000003, 0x4062CC21, + 0x4063B820, 0x40646A20, 0x00000003, 0x4062CC22, 0x4063B820, 0x40646A20, + 0x00000003, 0x4062CC23, 0x4063B820, 0x40646A20, 0x00000003, 0x4062CC21, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062CC22, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062CC23, 0x4063B820, 0x40648C20, 0x00000003, 0x4062CC24, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062CC25, 0x4063B820, 0x40648C20, + 0x00000003, 0x4062CC26, 0x4063B820, 0x40648C20, 0x00000003, 0x4062CC27, + 0x4063B820, 0x40648C20, 0x00000003, 0x4062CC28, + // Block 626, offset 0x9c80 + 0x4063B820, 0x40648C20, 0x00000003, 0x4062CC29, 0x4063B820, 0x40648C20, + 0x00000002, 0x4062CC21, 0x4063BE20, 0x00000002, 0x4062CC22, 0x4063BE20, + 0x00000002, 0x4062CC23, 0x4063BE20, 0x00000002, 0x4062CC24, 0x4063BE20, + 0x00000002, 0x4062CC25, 0x4063BE20, 0x00000002, 0x4062CC26, 0x4063BE20, + 0x00000002, 0x4062CC27, 0x4063BE20, 0x00000002, 0x4062CC21, 0x4063C220, + 0x00000002, 0x4062CC22, 0x4063C220, 0x00000002, 0x4062CC23, 0x4063C220, + 0x00000002, 0x4062CC24, 0x4063C220, 0x00000002, 0x4062CC25, 0x4063C220, + 0x00000002, 0x4062CC26, 0x4063C220, 0x00000002, 0x4062CC27, 0x4063C220, + 0x00000002, 0x4062CC28, 0x4063C220, 0x00000002, 0x4062CC29, 0x4063C220, + 0x00000003, 0x4062CC21, 0x4063C220, 0x40648C20, 0x00000003, 0x4062CC21, + 0x4063CC20, 0x40646420, 0x00000003, 0x4062CC22, + // Block 627, offset 0x9cc0 + 0x4063CC20, 0x40646420, 0x00000003, 0x4062CC23, 0x4063CC20, 0x40646420, + 0x00000003, 0x4062CC21, 0x4063CC20, 0x40648220, 0x00000002, 0x4062CE21, + 0x4063A820, 0x00000002, 0x4062CE22, 0x4063A820, 0x00000002, 0x4062CE23, + 0x4063A820, 0x00000002, 0x4062CE24, 0x4063A820, 0x00000002, 0x4062CE25, + 0x4063A820, 0x00000002, 0x4062CE26, 0x4063A820, 0x00000002, 0x4062CE27, + 0x4063A820, 0x00000002, 0x4062CE28, 0x4063A820, 0x00000002, 0x4062CE29, + 0x4063A820, 0x00000002, 0x4062CE2A, 0x4063A820, 0x00000002, 0x4062CE2B, + 0x4063A820, 0x00000002, 0x4062CE2C, 0x4063A820, 0x00000002, 0x4062CE2D, + 0x4063A820, 0x00000002, 0x4062CE2E, 0x4063A820, 0x00000002, 0x4062CE2F, + 0x4063A820, 0x00000002, 0x4062CE30, 0x4063A820, 0x00000002, 0x4062CE31, + 0x4063A820, 0x00000002, 0x4062CE32, 0x4063A820, + // Block 628, offset 0x9d00 + 0x00000002, 0x4062CE33, 0x4063A820, 0x00000002, 0x4062CE34, 0x4063A820, + 0x00000002, 0x4062CE35, 0x4063A820, 0x00000002, 0x4062CE36, 0x4063A820, + 0x00000002, 0x4062CE37, 0x4063A820, 0x00000002, 0x4062CE38, 0x4063A820, + 0x00000002, 0x4062CE39, 0x4063A820, 0x00000002, 0x4062CE3A, 0x4063A820, + 0x00000002, 0x4062CE3B, 0x4063A820, 0x00000002, 0x4062CE3C, 0x4063A820, + 0x00000002, 0x4062CE3D, 0x4063A820, 0x00000002, 0x4062CE3E, 0x4063A820, + 0x00000003, 0x4062CE21, 0x4063A820, 0x40646A20, 0x00000003, 0x4062CE22, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062CE23, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062CE24, 0x4063A820, 0x40646A20, 0x00000003, 0x4062CE25, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062CE26, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062CE27, 0x4063A820, 0x40646A20, + // Block 629, offset 0x9d40 + 0x00000003, 0x4062CE28, 0x4063A820, 0x40646A20, 0x00000003, 0x4062CE29, + 0x4063A820, 0x40646A20, 0x00000003, 0x4062CE2A, 0x4063A820, 0x40646A20, + 0x00000003, 0x4062CE21, 0x4063A820, 0x40647220, 0x00000003, 0x4062CE22, + 0x4063A820, 0x40647220, 0x00000003, 0x4062CE23, 0x4063A820, 0x40647220, + 0x00000003, 0x4062CE24, 0x4063A820, 0x40647220, 0x00000003, 0x4062CE25, + 0x4063A820, 0x40647220, 0x00000002, 0x4062CE21, 0x4063AA20, 0x00000002, + 0x4062CE22, 0x4063AA20, 0x00000002, 0x4062CE23, 0x4063AA20, 0x00000002, + 0x4062CE24, 0x4063AA20, 0x00000002, 0x4062CE25, 0x4063AA20, 0x00000002, + 0x4062CE26, 0x4063AA20, 0x00000002, 0x4062CE27, 0x4063AA20, 0x00000002, + 0x4062CE28, 0x4063AA20, 0x00000002, 0x4062CE29, 0x4063AA20, 0x00000002, + 0x4062CE2A, 0x4063AA20, 0x00000002, 0x4062CE2B, + // Block 630, offset 0x9d80 + 0x4063AA20, 0x00000002, 0x4062CE2C, 0x4063AA20, 0x00000002, 0x4062CE2D, + 0x4063AA20, 0x00000002, 0x4062CE2E, 0x4063AA20, 0x00000002, 0x4062CE2F, + 0x4063AA20, 0x00000002, 0x4062CE30, 0x4063AA20, 0x00000003, 0x4062CE21, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062CE22, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062CE23, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062CE24, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062CE25, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062CE26, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062CE27, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062CE28, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062CE21, 0x4063AC20, 0x40646420, 0x00000003, 0x4062CE21, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE22, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062CE23, 0x4063B420, 0x40646A20, + // Block 631, offset 0x9dc0 + 0x00000003, 0x4062CE24, 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE25, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE26, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062CE27, 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE28, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE29, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062CE2A, 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE2B, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE2C, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062CE2D, 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE2E, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE2F, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062CE30, 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE31, + 0x4063B420, 0x40646A20, 0x00000003, 0x4062CE32, 0x4063B420, 0x40646A20, + 0x00000003, 0x4062CE33, 0x4063B420, 0x40646A20, + // Block 632, offset 0x9e00 + 0x00000003, 0x4062CE21, 0x4063B420, 0x40648220, 0x00000003, 0x4062CE22, + 0x4063B420, 0x40648220, 0x00000003, 0x4062CE23, 0x4063B420, 0x40648220, + 0x00000003, 0x4062CE21, 0x4063B420, 0x40648C20, 0x00000003, 0x4062CE22, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062CE23, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062CE24, 0x4063B420, 0x40648C20, 0x00000003, 0x4062CE25, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062CE26, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062CE27, 0x4063B420, 0x40648C20, 0x00000003, 0x4062CE28, + 0x4063B420, 0x40648C20, 0x00000003, 0x4062CE29, 0x4063B420, 0x40648C20, + 0x00000003, 0x4062CE2A, 0x4063B420, 0x40648C20, 0x00000003, 0x4062CE2B, + 0x4063B420, 0x40648C20, 0x00000002, 0x4062CE21, 0x4063B620, 0x00000002, + 0x4062CE22, 0x4063B620, 0x00000002, 0x4062CE23, + // Block 633, offset 0x9e40 + 0x4063B620, 0x00000002, 0x4062CE24, 0x4063B620, 0x00000002, 0x4062CE25, + 0x4063B620, 0x00000002, 0x4062CE26, 0x4063B620, 0x00000002, 0x4062CE27, + 0x4063B620, 0x00000002, 0x4062CE28, 0x4063B620, 0x00000002, 0x4062CE29, + 0x4063B620, 0x00000002, 0x4062CE2A, 0x4063B620, 0x00000002, 0x4062CE2B, + 0x4063B620, 0x00000002, 0x4062CE2C, 0x4063B620, 0x00000002, 0x4062CE2D, + 0x4063B620, 0x00000002, 0x4062CE2E, 0x4063B620, 0x00000002, 0x4062CE21, + 0x4063B820, 0x00000002, 0x4062CE22, 0x4063B820, 0x00000002, 0x4062CE23, + 0x4063B820, 0x00000002, 0x4062CE24, 0x4063B820, 0x00000002, 0x4062CE25, + 0x4063B820, 0x00000002, 0x4062CE26, 0x4063B820, 0x00000002, 0x4062CE27, + 0x4063B820, 0x00000002, 0x4062CE28, 0x4063B820, 0x00000002, 0x4062CE29, + 0x4063B820, 0x00000002, 0x4062CE2A, 0x4063B820, + // Block 634, offset 0x9e80 + 0x00000002, 0x4062CE2B, 0x4063B820, 0x00000002, 0x4062CE2C, 0x4063B820, + 0x00000002, 0x4062CE2D, 0x4063B820, 0x00000002, 0x4062CE2E, 0x4063B820, + 0x00000002, 0x4062CE2F, 0x4063B820, 0x00000002, 0x4062CE30, 0x4063B820, + 0x00000002, 0x4062CE31, 0x4063B820, 0x00000002, 0x4062CE32, 0x4063B820, + 0x00000002, 0x4062CE33, 0x4063B820, 0x00000002, 0x4062CE34, 0x4063B820, + 0x00000002, 0x4062CE35, 0x4063B820, 0x00000002, 0x4062CE36, 0x4063B820, + 0x00000002, 0x4062CE37, 0x4063B820, 0x00000002, 0x4062CE38, 0x4063B820, + 0x00000002, 0x4062CE39, 0x4063B820, 0x00000002, 0x4062CE3A, 0x4063B820, + 0x00000002, 0x4062CE3B, 0x4063B820, 0x00000002, 0x4062CE3C, 0x4063B820, + 0x00000002, 0x4062CE3D, 0x4063B820, 0x00000002, 0x4062CE3E, 0x4063B820, + 0x00000002, 0x4062CE3F, 0x4063B820, 0x00000002, + // Block 635, offset 0x9ec0 + 0x4062CE40, 0x4063B820, 0x00000002, 0x4062CE41, 0x4063B820, 0x00000002, + 0x4062CE42, 0x4063B820, 0x00000002, 0x4062CE43, 0x4063B820, 0x00000002, + 0x4062CE44, 0x4063B820, 0x00000002, 0x4062CE45, 0x4063B820, 0x00000002, + 0x4062CE46, 0x4063B820, 0x00000002, 0x4062CE47, 0x4063B820, 0x00000003, + 0x4062CE21, 0x4063B820, 0x40646420, 0x00000003, 0x4062CE22, 0x4063B820, + 0x40646420, 0x00000003, 0x4062CE23, 0x4063B820, 0x40646420, 0x00000003, + 0x4062CE24, 0x4063B820, 0x40646420, 0x00000003, 0x4062CE25, 0x4063B820, + 0x40646420, 0x00000002, 0x4062CE21, 0x4063C020, 0x00000002, 0x4062CE22, + 0x4063C020, 0x00000002, 0x4062CE23, 0x4063C020, 0x00000002, 0x4062CE24, + 0x4063C020, 0x00000002, 0x4062CE25, 0x4063C020, 0x00000002, 0x4062CE26, + 0x4063C020, 0x00000002, 0x4062CE27, 0x4063C020, + // Block 636, offset 0x9f00 + 0x00000002, 0x4062CE28, 0x4063C020, 0x00000002, 0x4062CE29, 0x4063C020, + 0x00000002, 0x4062CE2A, 0x4063C020, 0x00000002, 0x4062CE2B, 0x4063C020, + 0x00000002, 0x4062CE2C, 0x4063C020, 0x00000002, 0x4062CE2D, 0x4063C020, + 0x00000002, 0x4062CE2E, 0x4063C020, 0x00000002, 0x4062CE2F, 0x4063C020, + 0x00000002, 0x4062CE30, 0x4063C020, 0x00000002, 0x4062CE31, 0x4063C020, + 0x00000002, 0x4062CE32, 0x4063C020, 0x00000002, 0x4062CE33, 0x4063C020, + 0x00000002, 0x4062CE34, 0x4063C020, 0x00000002, 0x4062CE35, 0x4063C020, + 0x00000002, 0x4062CE36, 0x4063C020, 0x00000002, 0x4062CE37, 0x4063C020, + 0x00000002, 0x4062CE38, 0x4063C020, 0x00000002, 0x4062CE39, 0x4063C020, + 0x00000002, 0x4062CE3A, 0x4063C020, 0x00000002, 0x4062CE3B, 0x4063C020, + 0x00000003, 0x4062CE21, 0x4063C220, 0x40648220, + // Block 637, offset 0x9f40 + 0x00000003, 0x4062CE22, 0x4063C220, 0x40648220, 0x00000003, 0x4062CE23, + 0x4063C220, 0x40648220, 0x00000003, 0x4062CE21, 0x4063C220, 0x40648C20, + 0x00000003, 0x4062CE22, 0x4063C220, 0x40648C20, 0x00000003, 0x4062CE23, + 0x4063C220, 0x40648C20, 0x00000003, 0x4062CE24, 0x4063C220, 0x40648C20, + 0x00000003, 0x4062CE25, 0x4063C220, 0x40648C20, 0x00000003, 0x4062CE26, + 0x4063C220, 0x40648C20, 0x00000003, 0x4062CE27, 0x4063C220, 0x40648C20, + 0x00000002, 0x4062CE21, 0x4063D020, 0x00000002, 0x4062CE22, 0x4063D020, + 0x00000002, 0x4062CE23, 0x4063D020, 0x00000002, 0x4062CE24, 0x4063D020, + 0x00000002, 0x4062CE25, 0x4063D020, 0x00000002, 0x4062CE26, 0x4063D020, + 0x00000002, 0x4062CE27, 0x4063D020, 0x00000002, 0x4062CE28, 0x4063D020, + 0x00000002, 0x4062CE29, 0x4063D020, 0x00000002, + // Block 638, offset 0x9f80 + 0x4062CE2A, 0x4063D020, 0x00000002, 0x4062CE2B, 0x4063D020, 0x00000003, + 0x4062CE21, 0x4063D020, 0x40646420, 0x00000003, 0x4062CE21, 0x4063D020, + 0x40647220, 0x00000003, 0x4062CE22, 0x4063D020, 0x40647220, 0x00000003, + 0x4062CE23, 0x4063D020, 0x40647220, 0x00000003, 0x4062CE24, 0x4063D020, + 0x40647220, 0x00000003, 0x4062CE25, 0x4063D020, 0x40647220, 0x00000003, + 0x4062CE26, 0x4063D020, 0x40647220, 0x00000003, 0x4062CE27, 0x4063D020, + 0x40647220, 0x00000003, 0x4062CE28, 0x4063D020, 0x40647220, 0x00000003, + 0x4062CE29, 0x4063D020, 0x40647220, 0x00000003, 0x4062CE2A, 0x4063D020, + 0x40647220, 0x00000003, 0x4062CE2B, 0x4063D020, 0x40647220, 0x00000003, + 0x4062CE2C, 0x4063D020, 0x40647220, 0x00000003, 0x4062CE2D, 0x4063D020, + 0x40647220, 0x00000003, 0x4062CE2E, 0x4063D020, + // Block 639, offset 0x9fc0 + 0x40647220, 0x00000003, 0x4062CE2F, 0x4063D020, 0x40647220, 0x00000003, + 0x4062CE30, 0x4063D020, 0x40647220, 0x00000003, 0x4062CE31, 0x4063D020, + 0x40647220, 0x00000003, 0x4062CE32, 0x4063D020, 0x40647220, 0x00000003, + 0x4062CE33, 0x4063D020, 0x40647220, 0x00000003, 0x4062CE34, 0x4063D020, + 0x40647220, 0x00000003, 0x4062CE35, 0x4063D020, 0x40647220, 0x00000003, + 0x4062CE36, 0x4063D020, 0x40647220, 0x00000003, 0x4062CE21, 0x4063D020, + 0x40648420, 0x00000003, 0x4062CE22, 0x4063D020, 0x40648420, 0x00000003, + 0x4062CE23, 0x4063D020, 0x40648420, 0x00000002, 0x4062D021, 0x4063A820, + 0x00000002, 0x4062D022, 0x4063A820, 0x00000002, 0x4062D023, 0x4063A820, + 0x00000002, 0x4062D024, 0x4063A820, 0x00000002, 0x4062D025, 0x4063A820, + 0x00000002, 0x4062D026, 0x4063A820, 0x00000002, + // Block 640, offset 0xa000 + 0x4062D027, 0x4063A820, 0x00000002, 0x4062D028, 0x4063A820, 0x00000002, + 0x4062D029, 0x4063A820, 0x00000002, 0x4062D02A, 0x4063A820, 0x00000002, + 0x4062D02B, 0x4063A820, 0x00000002, 0x4062D02C, 0x4063A820, 0x00000002, + 0x4062D02D, 0x4063A820, 0x00000002, 0x4062D02E, 0x4063A820, 0x00000002, + 0x4062D02F, 0x4063A820, 0x00000002, 0x4062D030, 0x4063A820, 0x00000002, + 0x4062D031, 0x4063A820, 0x00000002, 0x4062D032, 0x4063A820, 0x00000002, + 0x4062D033, 0x4063A820, 0x00000002, 0x4062D034, 0x4063A820, 0x00000002, + 0x4062D035, 0x4063A820, 0x00000002, 0x4062D036, 0x4063A820, 0x00000003, + 0x4062D021, 0x4063A820, 0x40646420, 0x00000003, 0x4062D022, 0x4063A820, + 0x40646420, 0x00000003, 0x4062D023, 0x4063A820, 0x40646420, 0x00000003, + 0x4062D024, 0x4063A820, 0x40646420, 0x00000003, + // Block 641, offset 0xa040 + 0x4062D025, 0x4063A820, 0x40646420, 0x00000003, 0x4062D026, 0x4063A820, + 0x40646420, 0x00000003, 0x4062D027, 0x4063A820, 0x40646420, 0x00000003, + 0x4062D028, 0x4063A820, 0x40646420, 0x00000003, 0x4062D029, 0x4063A820, + 0x40646420, 0x00000003, 0x4062D02A, 0x4063A820, 0x40646420, 0x00000003, + 0x4062D02B, 0x4063A820, 0x40646420, 0x00000003, 0x4062D021, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062D022, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062D023, 0x4063A820, 0x40646A20, 0x00000003, 0x4062D024, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062D025, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062D026, 0x4063A820, 0x40646A20, 0x00000003, 0x4062D027, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062D028, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062D029, 0x4063A820, 0x40646A20, 0x00000003, + // Block 642, offset 0xa080 + 0x4062D02A, 0x4063A820, 0x40646A20, 0x00000003, 0x4062D02B, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062D02C, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062D02D, 0x4063A820, 0x40646A20, 0x00000003, 0x4062D02E, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062D02F, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062D030, 0x4063A820, 0x40646A20, 0x00000003, 0x4062D031, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062D032, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062D033, 0x4063A820, 0x40646A20, 0x00000003, 0x4062D034, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062D035, 0x4063A820, 0x40646A20, 0x00000003, + 0x4062D036, 0x4063A820, 0x40646A20, 0x00000003, 0x4062D037, 0x4063A820, + 0x40646A20, 0x00000003, 0x4062D021, 0x4063A820, 0x40647220, 0x00000003, + 0x4062D022, 0x4063A820, 0x40647220, 0x00000003, + // Block 643, offset 0xa0c0 + 0x4062D023, 0x4063A820, 0x40647220, 0x00000003, 0x4062D021, 0x4063A820, + 0x40648220, 0x00000003, 0x4062D022, 0x4063A820, 0x40648220, 0x00000003, + 0x4062D023, 0x4063A820, 0x40648220, 0x00000003, 0x4062D024, 0x4063A820, + 0x40648220, 0x00000003, 0x4062D025, 0x4063A820, 0x40648220, 0x00000003, + 0x4062D026, 0x4063A820, 0x40648220, 0x00000003, 0x4062D027, 0x4063A820, + 0x40648220, 0x00000003, 0x4062D028, 0x4063A820, 0x40648220, 0x00000003, + 0x4062D029, 0x4063A820, 0x40648220, 0x00000003, 0x4062D02A, 0x4063A820, + 0x40648220, 0x00000003, 0x4062D02B, 0x4063A820, 0x40648220, 0x00000003, + 0x4062D02C, 0x4063A820, 0x40648220, 0x00000003, 0x4062D02D, 0x4063A820, + 0x40648220, 0x00000003, 0x4062D02E, 0x4063A820, 0x40648220, 0x00000003, + 0x4062D02F, 0x4063A820, 0x40648220, 0x00000003, + // Block 644, offset 0xa100 + 0x4062D030, 0x4063A820, 0x40648220, 0x00000003, 0x4062D031, 0x4063A820, + 0x40648220, 0x00000003, 0x4062D021, 0x4063A820, 0x40648420, 0x00000003, + 0x4062D022, 0x4063A820, 0x40648420, 0x00000003, 0x4062D023, 0x4063A820, + 0x40648420, 0x00000003, 0x4062D024, 0x4063A820, 0x40648420, 0x00000003, + 0x4062D025, 0x4063A820, 0x40648420, 0x00000003, 0x4062D026, 0x4063A820, + 0x40648420, 0x00000003, 0x4062D027, 0x4063A820, 0x40648420, 0x00000003, + 0x4062D028, 0x4063A820, 0x40648420, 0x00000003, 0x4062D029, 0x4063A820, + 0x40648420, 0x00000003, 0x4062D02A, 0x4063A820, 0x40648420, 0x00000003, + 0x4062D02B, 0x4063A820, 0x40648420, 0x00000003, 0x4062D02C, 0x4063A820, + 0x40648420, 0x00000003, 0x4062D02D, 0x4063A820, 0x40648420, 0x00000003, + 0x4062D02E, 0x4063A820, 0x40648420, 0x00000003, + // Block 645, offset 0xa140 + 0x4062D021, 0x4063A820, 0x40648C20, 0x00000003, 0x4062D022, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062D023, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062D024, 0x4063A820, 0x40648C20, 0x00000003, 0x4062D025, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062D026, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062D027, 0x4063A820, 0x40648C20, 0x00000003, 0x4062D028, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062D029, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062D02A, 0x4063A820, 0x40648C20, 0x00000003, 0x4062D02B, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062D02C, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062D02D, 0x4063A820, 0x40648C20, 0x00000003, 0x4062D02E, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062D02F, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062D030, 0x4063A820, 0x40648C20, 0x00000003, + // Block 646, offset 0xa180 + 0x4062D031, 0x4063A820, 0x40648C20, 0x00000003, 0x4062D032, 0x4063A820, + 0x40648C20, 0x00000003, 0x4062D033, 0x4063A820, 0x40648C20, 0x00000003, + 0x4062D034, 0x4063A820, 0x40648C20, 0x00000002, 0x4062D021, 0x4063AA20, + 0x00000002, 0x4062D022, 0x4063AA20, 0x00000002, 0x4062D023, 0x4063AA20, + 0x00000002, 0x4062D024, 0x4063AA20, 0x00000002, 0x4062D025, 0x4063AA20, + 0x00000002, 0x4062D026, 0x4063AA20, 0x00000002, 0x4062D027, 0x4063AA20, + 0x00000002, 0x4062D028, 0x4063AA20, 0x00000002, 0x4062D029, 0x4063AA20, + 0x00000002, 0x4062D02A, 0x4063AA20, 0x00000002, 0x4062D02B, 0x4063AA20, + 0x00000002, 0x4062D02C, 0x4063AA20, 0x00000002, 0x4062D02D, 0x4063AA20, + 0x00000002, 0x4062D02E, 0x4063AA20, 0x00000002, 0x4062D02F, 0x4063AA20, + 0x00000002, 0x4062D030, 0x4063AA20, 0x00000002, + // Block 647, offset 0xa1c0 + 0x4062D031, 0x4063AA20, 0x00000002, 0x4062D032, 0x4063AA20, 0x00000002, + 0x4062D033, 0x4063AA20, 0x00000002, 0x4062D034, 0x4063AA20, 0x00000002, + 0x4062D035, 0x4063AA20, 0x00000002, 0x4062D036, 0x4063AA20, 0x00000002, + 0x4062D037, 0x4063AA20, 0x00000002, 0x4062D038, 0x4063AA20, 0x00000002, + 0x4062D039, 0x4063AA20, 0x00000002, 0x4062D03A, 0x4063AA20, 0x00000002, + 0x4062D03B, 0x4063AA20, 0x00000002, 0x4062D03C, 0x4063AA20, 0x00000002, + 0x4062D03D, 0x4063AA20, 0x00000003, 0x4062D021, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062D022, 0x4063AA20, 0x40646420, 0x00000003, 0x4062D023, + 0x4063AA20, 0x40646420, 0x00000003, 0x4062D024, 0x4063AA20, 0x40646420, + 0x00000003, 0x4062D021, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062D022, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062D023, + // Block 648, offset 0xa200 + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062D024, 0x4063AA20, 0x40648C20, + 0x00000003, 0x4062D025, 0x4063AA20, 0x40648C20, 0x00000003, 0x4062D026, + 0x4063AA20, 0x40648C20, 0x00000003, 0x4062D021, 0x4063AC20, 0x40648C20, + 0x00000003, 0x4062D022, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062D023, + 0x4063AC20, 0x40648C20, 0x00000003, 0x4062D024, 0x4063AC20, 0x40648C20, + 0x00000003, 0x4062D025, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062D026, + 0x4063AC20, 0x40648C20, 0x00000003, 0x4062D027, 0x4063AC20, 0x40648C20, + 0x00000003, 0x4062D028, 0x4063AC20, 0x40648C20, 0x00000003, 0x4062D029, + 0x4063AC20, 0x40648C20, 0x00000003, 0x4062D02A, 0x4063AC20, 0x40648C20, + 0x00000002, 0x4062D021, 0x4063B020, 0x00000002, 0x4062D022, 0x4063B020, + 0x00000002, 0x4062D023, 0x4063B020, 0x00000002, + // Block 649, offset 0xa240 + 0x4062D024, 0x4063B020, 0x00000002, 0x4062D025, 0x4063B020, 0x00000003, + 0x4062D021, 0x4063B020, 0x40646A20, 0x00000003, 0x4062D022, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062D023, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062D024, 0x4063B020, 0x40646A20, 0x00000003, 0x4062D025, 0x4063B020, + 0x40646A20, 0x00000003, 0x4062D026, 0x4063B020, 0x40646A20, 0x00000003, + 0x4062D027, 0x4063B020, 0x40646A20, 0x00000003, 0x4062D021, 0x4063B020, + 0x40647220, 0x00000003, 0x4062D021, 0x4063B020, 0x40648220, 0x00000003, + 0x4062D022, 0x4063B020, 0x40648220, 0x00000003, 0x4062D023, 0x4063B020, + 0x40648220, 0x00000003, 0x4062D024, 0x4063B020, 0x40648220, 0x00000003, + 0x4062D025, 0x4063B020, 0x40648220, 0x00000003, 0x4062D021, 0x4063B420, + 0x40646420, 0x00000003, 0x4062D022, 0x4063B420, + // Block 650, offset 0xa280 + 0x40646420, 0x00000003, 0x4062D023, 0x4063B420, 0x40646420, 0x00000003, + 0x4062D024, 0x4063B420, 0x40646420, 0x00000003, 0x4062D025, 0x4063B420, + 0x40646420, 0x00000003, 0x4062D026, 0x4063B420, 0x40646420, 0x00000003, + 0x4062D027, 0x4063B420, 0x40646420, 0x00000003, 0x4062D028, 0x4063B420, + 0x40646420, 0x00000003, 0x4062D021, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D022, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D023, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D024, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D025, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D026, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D027, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D028, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D029, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D02A, 0x4063B420, + // Block 651, offset 0xa2c0 + 0x40646A20, 0x00000003, 0x4062D02B, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D02C, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D02D, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D02E, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D02F, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D030, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D031, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D032, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D033, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D034, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D035, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D036, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D037, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D038, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D039, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D03A, 0x4063B420, + // Block 652, offset 0xa300 + 0x40646A20, 0x00000003, 0x4062D03B, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D03C, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D03D, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D03E, 0x4063B420, 0x40646A20, 0x00000003, + 0x4062D03F, 0x4063B420, 0x40646A20, 0x00000003, 0x4062D040, 0x4063B420, + 0x40646A20, 0x00000003, 0x4062D021, 0x4063B420, 0x40647220, 0x00000003, + 0x4062D022, 0x4063B420, 0x40647220, 0x00000003, 0x4062D023, 0x4063B420, + 0x40647220, 0x00000003, 0x4062D024, 0x4063B420, 0x40647220, 0x00000003, + 0x4062D025, 0x4063B420, 0x40647220, 0x00000003, 0x4062D026, 0x4063B420, + 0x40647220, 0x00000003, 0x4062D021, 0x4063B420, 0x40648220, 0x00000003, + 0x4062D021, 0x4063B420, 0x40648420, 0x00000003, 0x4062D022, 0x4063B420, + 0x40648420, 0x00000003, 0x4062D023, 0x4063B420, + // Block 653, offset 0xa340 + 0x40648420, 0x00000003, 0x4062D024, 0x4063B420, 0x40648420, 0x00000003, + 0x4062D025, 0x4063B420, 0x40648420, 0x00000003, 0x4062D026, 0x4063B420, + 0x40648420, 0x00000003, 0x4062D027, 0x4063B420, 0x40648420, 0x00000003, + 0x4062D028, 0x4063B420, 0x40648420, 0x00000003, 0x4062D029, 0x4063B420, + 0x40648420, 0x00000003, 0x4062D02A, 0x4063B420, 0x40648420, 0x00000003, + 0x4062D02B, 0x4063B420, 0x40648420, 0x00000003, 0x4062D02C, 0x4063B420, + 0x40648420, 0x00000003, 0x4062D02D, 0x4063B420, 0x40648420, 0x00000003, + 0x4062D02E, 0x4063B420, 0x40648420, 0x00000003, 0x4062D02F, 0x4063B420, + 0x40648420, 0x00000003, 0x4062D030, 0x4063B420, 0x40648420, 0x00000003, + 0x4062D031, 0x4063B420, 0x40648420, 0x00000003, 0x4062D032, 0x4063B420, + 0x40648420, 0x00000003, 0x4062D033, 0x4063B420, + // Block 654, offset 0xa380 + 0x40648420, 0x00000003, 0x4062D021, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062D022, 0x4063B420, 0x40648C20, 0x00000003, 0x4062D023, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062D024, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062D025, 0x4063B420, 0x40648C20, 0x00000003, 0x4062D026, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062D027, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062D028, 0x4063B420, 0x40648C20, 0x00000003, 0x4062D029, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062D02A, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062D02B, 0x4063B420, 0x40648C20, 0x00000003, 0x4062D02C, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062D02D, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062D02E, 0x4063B420, 0x40648C20, 0x00000003, 0x4062D02F, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062D030, 0x4063B420, + // Block 655, offset 0xa3c0 + 0x40648C20, 0x00000003, 0x4062D031, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062D032, 0x4063B420, 0x40648C20, 0x00000003, 0x4062D033, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062D034, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062D035, 0x4063B420, 0x40648C20, 0x00000003, 0x4062D036, 0x4063B420, + 0x40648C20, 0x00000003, 0x4062D037, 0x4063B420, 0x40648C20, 0x00000003, + 0x4062D038, 0x4063B420, 0x40648C20, 0x00000003, 0x4062D039, 0x4063B420, + 0x40648C20, 0x00000002, 0x4062D021, 0x4063B620, 0x00000002, 0x4062D022, + 0x4063B620, 0x00000002, 0x4062D023, 0x4063B620, 0x00000002, 0x4062D024, + 0x4063B620, 0x00000002, 0x4062D025, 0x4063B620, 0x00000002, 0x4062D026, + 0x4063B620, 0x00000002, 0x4062D027, 0x4063B620, 0x00000002, 0x4062D028, + 0x4063B620, 0x00000002, 0x4062D029, 0x4063B620, + // Block 656, offset 0xa400 + 0x00000002, 0x4062D02A, 0x4063B620, 0x00000002, 0x4062D02B, 0x4063B620, + 0x00000002, 0x4062D02C, 0x4063B620, 0x00000002, 0x4062D02D, 0x4063B620, + 0x00000002, 0x4062D02E, 0x4063B620, 0x00000002, 0x4062D02F, 0x4063B620, + 0x00000002, 0x4062D030, 0x4063B620, 0x00000002, 0x4062D031, 0x4063B620, + 0x00000002, 0x4062D021, 0x4063B820, 0x00000002, 0x4062D022, 0x4063B820, + 0x00000002, 0x4062D023, 0x4063B820, 0x00000002, 0x4062D024, 0x4063B820, + 0x00000002, 0x4062D025, 0x4063B820, 0x00000002, 0x4062D026, 0x4063B820, + 0x00000002, 0x4062D027, 0x4063B820, 0x00000002, 0x4062D028, 0x4063B820, + 0x00000002, 0x4062D029, 0x4063B820, 0x00000002, 0x4062D02A, 0x4063B820, + 0x00000002, 0x4062D02B, 0x4063B820, 0x00000002, 0x4062D02C, 0x4063B820, + 0x00000002, 0x4062D02D, 0x4063B820, 0x00000002, + // Block 657, offset 0xa440 + 0x4062D02E, 0x4063B820, 0x00000002, 0x4062D02F, 0x4063B820, 0x00000002, + 0x4062D030, 0x4063B820, 0x00000002, 0x4062D031, 0x4063B820, 0x00000002, + 0x4062D032, 0x4063B820, 0x00000002, 0x4062D033, 0x4063B820, 0x00000002, + 0x4062D034, 0x4063B820, 0x00000002, 0x4062D035, 0x4063B820, 0x00000002, + 0x4062D036, 0x4063B820, 0x00000002, 0x4062D037, 0x4063B820, 0x00000002, + 0x4062D038, 0x4063B820, 0x00000002, 0x4062D039, 0x4063B820, 0x00000002, + 0x4062D03A, 0x4063B820, 0x00000002, 0x4062D03B, 0x4063B820, 0x00000002, + 0x4062D03C, 0x4063B820, 0x00000002, 0x4062D03D, 0x4063B820, 0x00000002, + 0x4062D03E, 0x4063B820, 0x00000002, 0x4062D03F, 0x4063B820, 0x00000002, + 0x4062D040, 0x4063B820, 0x00000002, 0x4062D041, 0x4063B820, 0x00000002, + 0x4062D042, 0x4063B820, 0x00000002, 0x4062D043, + // Block 658, offset 0xa480 + 0x4063B820, 0x00000002, 0x4062D044, 0x4063B820, 0x00000002, 0x4062D045, + 0x4063B820, 0x00000002, 0x4062D046, 0x4063B820, 0x00000002, 0x4062D047, + 0x4063B820, 0x00000002, 0x4062D048, 0x4063B820, 0x00000002, 0x4062D049, + 0x4063B820, 0x00000002, 0x4062D04A, 0x4063B820, 0x00000002, 0x4062D04B, + 0x4063B820, 0x00000002, 0x4062D04C, 0x4063B820, 0x00000002, 0x4062D04D, + 0x4063B820, 0x00000002, 0x4062D04E, 0x4063B820, 0x00000002, 0x4062D04F, + 0x4063B820, 0x00000002, 0x4062D050, 0x4063B820, 0x00000002, 0x4062D051, + 0x4063B820, 0x00000002, 0x4062D052, 0x4063B820, 0x00000002, 0x4062D053, + 0x4063B820, 0x00000002, 0x4062D054, 0x4063B820, 0x00000002, 0x4062D055, + 0x4063B820, 0x00000002, 0x4062D056, 0x4063B820, 0x00000002, 0x4062D057, + 0x4063B820, 0x00000002, 0x4062D058, 0x4063B820, + // Block 659, offset 0xa4c0 + 0x00000002, 0x4062D059, 0x4063B820, 0x00000002, 0x4062D05A, 0x4063B820, + 0x00000002, 0x4062D05B, 0x4063B820, 0x00000003, 0x4062D021, 0x4063B820, + 0x40646420, 0x00000003, 0x4062D022, 0x4063B820, 0x40646420, 0x00000003, + 0x4062D023, 0x4063B820, 0x40646420, 0x00000003, 0x4062D021, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062D022, 0x4063B820, 0x40646A20, 0x00000003, + 0x4062D023, 0x4063B820, 0x40646A20, 0x00000003, 0x4062D024, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062D025, 0x4063B820, 0x40646A20, 0x00000003, + 0x4062D026, 0x4063B820, 0x40646A20, 0x00000003, 0x4062D027, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062D028, 0x4063B820, 0x40646A20, 0x00000003, + 0x4062D029, 0x4063B820, 0x40646A20, 0x00000003, 0x4062D02A, 0x4063B820, + 0x40646A20, 0x00000003, 0x4062D02B, 0x4063B820, + // Block 660, offset 0xa500 + 0x40646A20, 0x00000003, 0x4062D021, 0x4063B820, 0x40647220, 0x00000003, + 0x4062D022, 0x4063B820, 0x40647220, 0x00000003, 0x4062D023, 0x4063B820, + 0x40647220, 0x00000003, 0x4062D024, 0x4063B820, 0x40647220, 0x00000003, + 0x4062D021, 0x4063B820, 0x40648C20, 0x00000003, 0x4062D022, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062D023, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062D024, 0x4063B820, 0x40648C20, 0x00000003, 0x4062D025, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062D026, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062D027, 0x4063B820, 0x40648C20, 0x00000003, 0x4062D028, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062D029, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062D02A, 0x4063B820, 0x40648C20, 0x00000003, 0x4062D02B, 0x4063B820, + 0x40648C20, 0x00000003, 0x4062D02C, 0x4063B820, + // Block 661, offset 0xa540 + 0x40648C20, 0x00000003, 0x4062D02D, 0x4063B820, 0x40648C20, 0x00000003, + 0x4062D02E, 0x4063B820, 0x40648C20, 0x00000003, 0x4062D02F, 0x4063B820, + 0x40648C20, 0x00000002, 0x4062D021, 0x4063BA20, 0x00000002, 0x4062D022, + 0x4063BA20, 0x00000002, 0x4062D023, 0x4063BA20, 0x00000002, 0x4062D024, + 0x4063BA20, 0x00000002, 0x4062D025, 0x4063BA20, 0x00000002, 0x4062D026, + 0x4063BA20, 0x00000002, 0x4062D027, 0x4063BA20, 0x00000002, 0x4062D028, + 0x4063BA20, 0x00000002, 0x4062D029, 0x4063BA20, 0x00000002, 0x4062D02A, + 0x4063BA20, 0x00000002, 0x4062D02B, 0x4063BA20, 0x00000002, 0x4062D02C, + 0x4063BA20, 0x00000002, 0x4062D02D, 0x4063BA20, 0x00000002, 0x4062D02E, + 0x4063BA20, 0x00000002, 0x4062D02F, 0x4063BA20, 0x00000002, 0x4062D030, + 0x4063BA20, 0x00000002, 0x4062D031, 0x4063BA20, + // Block 662, offset 0xa580 + 0x00000002, 0x4062D032, 0x4063BA20, 0x00000002, 0x4062D033, 0x4063BA20, + 0x00000002, 0x4062D034, 0x4063BA20, 0x00000002, 0x4062D035, 0x4063BA20, + 0x00000003, 0x4062D021, 0x4063BA20, 0x40646420, 0x00000003, 0x4062D022, + 0x4063BA20, 0x40646420, 0x00000003, 0x4062D023, 0x4063BA20, 0x40646420, + 0x00000003, 0x4062D024, 0x4063BA20, 0x40646420, 0x00000003, 0x4062D025, + 0x4063BA20, 0x40646420, 0x00000003, 0x4062D026, 0x4063BA20, 0x40646420, + 0x00000003, 0x4062D027, 0x4063BA20, 0x40646420, 0x00000003, 0x4062D028, + 0x4063BA20, 0x40646420, 0x00000003, 0x4062D029, 0x4063BA20, 0x40646420, + 0x00000003, 0x4062D021, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D022, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D023, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D024, 0x4063BA20, 0x40646A20, + // Block 663, offset 0xa5c0 + 0x00000003, 0x4062D025, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D026, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D027, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D028, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D029, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D02A, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D02B, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D02C, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D02D, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D02E, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D02F, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D030, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D031, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D032, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D033, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D034, 0x4063BA20, 0x40646A20, + // Block 664, offset 0xa600 + 0x00000003, 0x4062D035, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D036, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D037, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D038, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D039, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D03A, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D03B, 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D03C, + 0x4063BA20, 0x40646A20, 0x00000003, 0x4062D03D, 0x4063BA20, 0x40646A20, + 0x00000003, 0x4062D021, 0x4063BA20, 0x40647220, 0x00000003, 0x4062D022, + 0x4063BA20, 0x40647220, 0x00000003, 0x4062D023, 0x4063BA20, 0x40647220, + 0x00000003, 0x4062D024, 0x4063BA20, 0x40647220, 0x00000003, 0x4062D025, + 0x4063BA20, 0x40647220, 0x00000003, 0x4062D026, 0x4063BA20, 0x40647220, + 0x00000003, 0x4062D021, 0x4063BA20, 0x40648C20, + // Block 665, offset 0xa640 + 0x00000003, 0x4062D022, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D023, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D024, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D025, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D026, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D027, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D028, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D029, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D02A, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D02B, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D02C, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D02D, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D02E, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D02F, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D030, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D031, 0x4063BA20, 0x40648C20, + // Block 666, offset 0xa680 + 0x00000003, 0x4062D032, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D033, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D034, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D035, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D036, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D037, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D038, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D039, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D03A, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D03B, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D03C, + 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D03D, 0x4063BA20, 0x40648C20, + 0x00000003, 0x4062D03E, 0x4063BA20, 0x40648C20, 0x00000003, 0x4062D03F, + 0x4063BA20, 0x40648C20, 0x00000002, 0x4062D021, 0x4063BE20, 0x00000002, + 0x4062D022, 0x4063BE20, 0x00000002, 0x4062D023, + // Block 667, offset 0xa6c0 + 0x4063BE20, 0x00000002, 0x4062D024, 0x4063BE20, 0x00000002, 0x4062D025, + 0x4063BE20, 0x00000002, 0x4062D026, 0x4063BE20, 0x00000002, 0x4062D027, + 0x4063BE20, 0x00000002, 0x4062D028, 0x4063BE20, 0x00000002, 0x4062D029, + 0x4063BE20, 0x00000002, 0x4062D02A, 0x4063BE20, 0x00000002, 0x4062D02B, + 0x4063BE20, 0x00000002, 0x4062D02C, 0x4063BE20, 0x00000002, 0x4062D02D, + 0x4063BE20, 0x00000002, 0x4062D02E, 0x4063BE20, 0x00000002, 0x4062D02F, + 0x4063BE20, 0x00000002, 0x4062D030, 0x4063BE20, 0x00000002, 0x4062D031, + 0x4063BE20, 0x00000002, 0x4062D032, 0x4063BE20, 0x00000002, 0x4062D033, + 0x4063BE20, 0x00000002, 0x4062D034, 0x4063BE20, 0x00000002, 0x4062D035, + 0x4063BE20, 0x00000002, 0x4062D036, 0x4063BE20, 0x00000002, 0x4062D037, + 0x4063BE20, 0x00000002, 0x4062D038, 0x4063BE20, + // Block 668, offset 0xa700 + 0x00000002, 0x4062D039, 0x4063BE20, 0x00000002, 0x4062D03A, 0x4063BE20, + 0x00000002, 0x4062D03B, 0x4063BE20, 0x00000002, 0x4062D03C, 0x4063BE20, + 0x00000002, 0x4062D03D, 0x4063BE20, 0x00000003, 0x4062D021, 0x4063BE20, + 0x40646420, 0x00000003, 0x4062D022, 0x4063BE20, 0x40646420, 0x00000003, + 0x4062D023, 0x4063BE20, 0x40646420, 0x00000003, 0x4062D021, 0x4063BE20, + 0x40648C20, 0x00000003, 0x4062D022, 0x4063BE20, 0x40648C20, 0x00000003, + 0x4062D023, 0x4063BE20, 0x40648C20, 0x00000003, 0x4062D024, 0x4063BE20, + 0x40648C20, 0x00000003, 0x4062D025, 0x4063BE20, 0x40648C20, 0x00000003, + 0x4062D026, 0x4063BE20, 0x40648C20, 0x00000002, 0x4062D021, 0x4063C020, + 0x00000002, 0x4062D022, 0x4063C020, 0x00000002, 0x4062D023, 0x4063C020, + 0x00000002, 0x4062D024, 0x4063C020, 0x00000002, + // Block 669, offset 0xa740 + 0x4062D025, 0x4063C020, 0x00000002, 0x4062D026, 0x4063C020, 0x00000002, + 0x4062D027, 0x4063C020, 0x00000002, 0x4062D028, 0x4063C020, 0x00000002, + 0x4062D029, 0x4063C020, 0x00000002, 0x4062D02A, 0x4063C020, 0x00000002, + 0x4062D02B, 0x4063C020, 0x00000002, 0x4062D02C, 0x4063C020, 0x00000002, + 0x4062D02D, 0x4063C020, 0x00000002, 0x4062D02E, 0x4063C020, 0x00000002, + 0x4062D02F, 0x4063C020, 0x00000002, 0x4062D030, 0x4063C020, 0x00000002, + 0x4062D031, 0x4063C020, 0x00000002, 0x4062D032, 0x4063C020, 0x00000002, + 0x4062D033, 0x4063C020, 0x00000002, 0x4062D034, 0x4063C020, 0x00000002, + 0x4062D035, 0x4063C020, 0x00000002, 0x4062D021, 0x4063C220, 0x00000002, + 0x4062D022, 0x4063C220, 0x00000002, 0x4062D023, 0x4063C220, 0x00000002, + 0x4062D024, 0x4063C220, 0x00000002, 0x4062D025, + // Block 670, offset 0xa780 + 0x4063C220, 0x00000002, 0x4062D026, 0x4063C220, 0x00000002, 0x4062D027, + 0x4063C220, 0x00000002, 0x4062D028, 0x4063C220, 0x00000002, 0x4062D029, + 0x4063C220, 0x00000002, 0x4062D02A, 0x4063C220, 0x00000002, 0x4062D02B, + 0x4063C220, 0x00000002, 0x4062D02C, 0x4063C220, 0x00000002, 0x4062D02D, + 0x4063C220, 0x00000002, 0x4062D02E, 0x4063C220, 0x00000002, 0x4062D02F, + 0x4063C220, 0x00000002, 0x4062D030, 0x4063C220, 0x00000002, 0x4062D031, + 0x4063C220, 0x00000002, 0x4062D032, 0x4063C220, 0x00000002, 0x4062D033, + 0x4063C220, 0x00000002, 0x4062D034, 0x4063C220, 0x00000002, 0x4062D035, + 0x4063C220, 0x00000002, 0x4062D036, 0x4063C220, 0x00000002, 0x4062D037, + 0x4063C220, 0x00000002, 0x4062D038, 0x4063C220, 0x00000003, 0x4062D021, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062D022, + // Block 671, offset 0xa7c0 + 0x4063C220, 0x40646A20, 0x00000003, 0x4062D023, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062D024, 0x4063C220, 0x40646A20, 0x00000003, 0x4062D025, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062D026, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062D027, 0x4063C220, 0x40646A20, 0x00000003, 0x4062D028, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062D029, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062D02A, 0x4063C220, 0x40646A20, 0x00000003, 0x4062D02B, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062D02C, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062D02D, 0x4063C220, 0x40646A20, 0x00000003, 0x4062D02E, + 0x4063C220, 0x40646A20, 0x00000003, 0x4062D02F, 0x4063C220, 0x40646A20, + 0x00000003, 0x4062D030, 0x4063C220, 0x40646A20, 0x00000003, 0x4062D021, + 0x4063C220, 0x40647220, 0x00000003, 0x4062D021, + // Block 672, offset 0xa800 + 0x4063C220, 0x40648C20, 0x00000003, 0x4062D021, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062D022, 0x4063C420, 0x40646A20, 0x00000003, 0x4062D023, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062D024, 0x4063C420, 0x40646A20, + 0x00000003, 0x4062D025, 0x4063C420, 0x40646A20, 0x00000003, 0x4062D026, + 0x4063C420, 0x40646A20, 0x00000003, 0x4062D027, 0x4063C420, 0x40646A20, + 0x00000002, 0x4062D021, 0x4063C620, 0x00000002, 0x4062D022, 0x4063C620, + 0x00000002, 0x4062D023, 0x4063C620, 0x00000002, 0x4062D024, 0x4063C620, + 0x00000002, 0x4062D025, 0x4063C620, 0x00000002, 0x4062D026, 0x4063C620, + 0x00000002, 0x4062D027, 0x4063C620, 0x00000002, 0x4062D021, 0x4063C820, + 0x00000002, 0x4062D022, 0x4063C820, 0x00000002, 0x4062D023, 0x4063C820, + 0x00000002, 0x4062D024, 0x4063C820, 0x00000002, + // Block 673, offset 0xa840 + 0x4062D025, 0x4063C820, 0x00000002, 0x4062D026, 0x4063C820, 0x00000002, + 0x4062D027, 0x4063C820, 0x00000002, 0x4062D028, 0x4063C820, 0x00000002, + 0x4062D029, 0x4063C820, 0x00000002, 0x4062D02A, 0x4063C820, 0x00000002, + 0x4062D021, 0x4063CA20, 0x00000002, 0x4062D022, 0x4063CA20, 0x00000002, + 0x4062D023, 0x4063CA20, 0x00000002, 0x4062D024, 0x4063CA20, 0x00000002, + 0x4062D025, 0x4063CA20, 0x00000002, 0x4062D026, 0x4063CA20, 0x00000002, + 0x4062D027, 0x4063CA20, 0x00000002, 0x4062D028, 0x4063CA20, 0x00000002, + 0x4062D029, 0x4063CA20, 0x00000002, 0x4062D02A, 0x4063CA20, 0x00000003, + 0x4062D021, 0x4063CA20, 0x40647220, 0x00000003, 0x4062D022, 0x4063CA20, + 0x40647220, 0x00000003, 0x4062D023, 0x4063CA20, 0x40647220, 0x00000003, + 0x4062D024, 0x4063CA20, 0x40647220, 0x00000003, + // Block 674, offset 0xa880 + 0x4062D021, 0x4063CA20, 0x40648C20, 0x00000003, 0x4062D022, 0x4063CA20, + 0x40648C20, 0x00000003, 0x4062D023, 0x4063CA20, 0x40648C20, 0x00000003, + 0x4062D024, 0x4063CA20, 0x40648C20, 0x00000003, 0x4062D025, 0x4063CA20, + 0x40648C20, 0x00000003, 0x4062D026, 0x4063CA20, 0x40648C20, 0x00000003, + 0x4062D027, 0x4063CA20, 0x40648C20, 0x00000003, 0x4062D021, 0x4063CC20, + 0x40646420, 0x00000003, 0x4062D021, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062D022, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062D023, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062D024, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062D025, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062D026, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062D027, 0x4063CC20, 0x40646A20, 0x00000003, + 0x4062D028, 0x4063CC20, 0x40646A20, 0x00000003, + // Block 675, offset 0xa8c0 + 0x4062D029, 0x4063CC20, 0x40646A20, 0x00000003, 0x4062D02A, 0x4063CC20, + 0x40646A20, 0x00000003, 0x4062D021, 0x4063CC20, 0x40647220, 0x00000003, + 0x4062D022, 0x4063CC20, 0x40647220, 0x00000003, 0x4062D023, 0x4063CC20, + 0x40647220, 0x00000003, 0x4062D024, 0x4063CC20, 0x40647220, 0x00000003, + 0x4062D025, 0x4063CC20, 0x40647220, 0x00000003, 0x4062D026, 0x4063CC20, + 0x40647220, 0x00000003, 0x4062D027, 0x4063CC20, 0x40647220, 0x00000003, + 0x4062D028, 0x4063CC20, 0x40647220, 0x00000003, 0x4062D029, 0x4063CC20, + 0x40647220, 0x00000003, 0x4062D021, 0x4063CC20, 0x40648220, 0x00000003, + 0x4062D022, 0x4063CC20, 0x40648220, 0x00000003, 0x4062D023, 0x4063CC20, + 0x40648220, 0x00000003, 0x4062D024, 0x4063CC20, 0x40648220, 0x00000003, + 0x4062D021, 0x4063CC20, 0x40648420, 0x00000003, + // Block 676, offset 0xa900 + 0x4062D022, 0x4063CC20, 0x40648420, 0x00000003, 0x4062D023, 0x4063CC20, + 0x40648420, 0x00000003, 0x4062D024, 0x4063CC20, 0x40648420, 0x00000003, + 0x4062D025, 0x4063CC20, 0x40648420, 0x00000003, 0x4062D026, 0x4063CC20, + 0x40648420, 0x00000003, 0x4062D027, 0x4063CC20, 0x40648420, 0x00000003, + 0x4062D028, 0x4063CC20, 0x40648420, 0x00000003, 0x4062D021, 0x4063CC20, + 0x40648C20, 0x00000002, 0x4062D021, 0x4063CE20, 0x00000002, 0x4062D022, + 0x4063CE20, 0x00000002, 0x4062D023, 0x4063CE20, 0x00000002, 0x4062D024, + 0x4063CE20, 0x00000002, 0x4062D025, 0x4063CE20, 0x00000002, 0x4062D026, + 0x4063CE20, 0x00000002, 0x4062D027, 0x4063CE20, 0x00000002, 0x4062D028, + 0x4063CE20, 0x00000002, 0x4062D029, 0x4063CE20, 0x00000002, 0x4062D02A, + 0x4063CE20, 0x00000002, 0x4062D02B, 0x4063CE20, + // Block 677, offset 0xa940 + 0x00000002, 0x4062D02C, 0x4063CE20, 0x00000002, 0x4062D02D, 0x4063CE20, + 0x00000002, 0x4062D02E, 0x4063CE20, 0x00000002, 0x4062D02F, 0x4063CE20, + 0x00000002, 0x4062D030, 0x4063CE20, 0x00000002, 0x4062D031, 0x4063CE20, + 0x00000002, 0x4062D032, 0x4063CE20, 0x00000002, 0x4062D033, 0x4063CE20, + 0x00000002, 0x4062D034, 0x4063CE20, 0x00000002, 0x4062D035, 0x4063CE20, + 0x00000002, 0x4062D036, 0x4063CE20, 0x00000002, 0x4062D037, 0x4063CE20, + 0x00000002, 0x4062D038, 0x4063CE20, 0x00000002, 0x4062D039, 0x4063CE20, + 0x00000002, 0x4062D03A, 0x4063CE20, 0x00000002, 0x4062D03B, 0x4063CE20, + 0x00000002, 0x4062D03C, 0x4063CE20, 0x00000002, 0x4062D03D, 0x4063CE20, + 0x00000002, 0x4062D03E, 0x4063CE20, 0x00000002, 0x4062D03F, 0x4063CE20, + 0x00000003, 0x4062D021, 0x4063D020, 0x40647220, + // Block 678, offset 0xa980 + 0x00000003, 0x4062D022, 0x4063D020, 0x40647220, 0x00000003, 0x4062D023, + 0x4063D020, 0x40647220, 0x00000003, 0x4062D024, 0x4063D020, 0x40647220, + 0x00000003, 0x4062D025, 0x4063D020, 0x40647220, 0x00000003, 0x4062D026, + 0x4063D020, 0x40647220, 0x00000002, 0x40403C20, 0xA070F102, 0x00000002, + 0x402D9A22, 0xAE603202, 0x00000002, 0x002D9AC3, 0xAE603202, 0x00000002, + 0x402D9A22, 0xAE603502, 0x00000002, 0x002D9AC3, 0xAE603502, 0x00000002, + 0x402D9A22, 0xAE603C02, 0x00000002, 0x002D9AC3, 0xAE603C02, 0x00000002, + 0x402D9A22, 0xAE604302, 0x00000002, 0x402D9A22, 0xAE604702, 0x00000002, + 0x002D9AC3, 0xAE604702, 0x00000002, 0x402D9A22, 0xAE604E02, 0x00000002, + 0x002D9AC3, 0xAE604E02, 0x00000002, 0x402D9A22, 0xAE605202, 0x00000002, + 0x002D9AC3, 0xAE605202, 0x00000002, 0x402D9A22, + // Block 679, offset 0xa9c0 + 0xAE605B02, 0x00000002, 0x002D9AC3, 0xAE605B02, 0x00000002, 0x402D9A22, + 0xAE606402, 0x00000002, 0x002D9AC3, 0xAE606402, 0x00000002, 0x402D9A22, + 0xADC07002, 0x00000002, 0x002D9AC3, 0xADC07002, 0x00000002, 0x40306C22, + 0xAE604702, 0x00000002, 0x00306CC3, 0xAE604702, 0x00000002, 0x40302A20, + 0xAE605202, 0x00000002, 0x00302A83, 0xAE605202, 0x00000002, 0x40442221, + 0x82092248, 0x00000002, 0x004422A3, 0x82092248, 0x00000002, 0x40443E21, + 0x82092248, 0x00000002, 0x00443EA3, 0x82092248, 0x00000002, 0x00444883, + 0x82092248, 0x00000002, 0x40444821, 0x82092248, 0x00000002, 0x004448A3, + 0x82092248, 0x00000002, 0x40445421, 0x82092248, 0x00000002, 0x40445821, + 0x82092248, 0x00000002, 0x004458A3, 0x82092248, 0x00000002, 0x40445A21, + 0x82092248, 0x00000002, 0x00445AA3, 0x82092248, + // Block 680, offset 0xaa00 + 0x00000002, 0x40446621, 0x82092248, 0x00000002, 0x004466A3, 0x82092248, + 0x00000002, 0x402D6820, 0xA0007D02, 0x00000002, 0x002D6894, 0xA0007D14, + 0x00000005, 0x404E6020, 0x404E8420, 0x404E2420, 0x8209278B, 0x404F3020, + 0x00000006, 0x404E6A20, 0x8209278B, 0x404E6A20, 0x404EEE20, 0x404E7220, + 0x8209278B, 0x00000006, 0x404E6A21, 0x40510E20, 0x404EE620, 0x404EEE20, + 0x404E1420, 0x8209278B, 0x00000004, 0x404E8C21, 0x40510A20, 0x404EFE20, + 0x404F2E20, 0x00000006, 0x404E9420, 0x404E1420, 0x8209278B, 0x404E8220, + 0x404E1420, 0x8209278B, 0x00000005, 0x404E9420, 0x404E1420, 0x8209278B, + 0x404E8820, 0x404EDE20, 0x0000000A, 0x404E9421, 0x404E4820, 0x8209278B, + 0x404F3020, 0x404E1420, 0x404EFE20, 0x404EDE20, 0x404E2420, 0x8209278B, + 0x404F3020, 0x00000003, 0x404EA620, 0x404E8420, + // Block 681, offset 0xaa40 + 0x404EEA20, 0x00000003, 0x404EA620, 0x8209278A, 0x404EA620, 0x00000002, + 0x004EC283, 0x404EE620, 0x00000002, 0x404EC221, 0x404EE620, 0x00000002, + 0x004EC283, 0x404EEA20, 0x00000002, 0x004EC283, 0x404EEE20, 0x00000003, + 0x004EC283, 0x404EEE20, 0x404F0C20, 0x00000002, 0x004EC283, 0x404EF420, + 0x00000002, 0x004EC283, 0x404EFE20, 0x00000002, 0x004EC284, 0x404EFE20, + 0x00000003, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E1420, 0x8209278A, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E1420, 0x8209278A, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E1420, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E1420, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E1820, 0x8209278A, + // Block 682, offset 0xaa80 + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E1820, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E1820, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E1820, 0x8209278B, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E1C20, 0x8209278A, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E1C20, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E1C20, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E1C20, 0x8209278B, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E2220, 0x8209278A, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E2220, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E2220, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + // Block 683, offset 0xaac0 + 0x404E2220, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E2420, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E2420, 0x8209278A, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E2420, 0x8209278B, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E2420, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E2820, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E2820, 0x8209278A, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E2820, 0x8209278B, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E2820, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E2E20, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E2E20, 0x8209278A, 0x00000005, 0x004EC283, + // Block 684, offset 0xab00 + 0x404EFE20, 0x404EDE20, 0x404E2E20, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E2E20, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E3220, 0x8209278A, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E3220, 0x8209278A, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E3220, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E3220, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E4220, 0x8209278A, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E4220, 0x8209278A, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E4220, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E4220, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E4820, 0x8209278A, + // Block 685, offset 0xab40 + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E4820, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E4820, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E4820, 0x8209278B, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E4A20, 0x8209278A, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E4A20, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E4A20, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E4A20, 0x8209278B, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E4E20, 0x8209278A, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E4E20, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E4E20, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + // Block 686, offset 0xab80 + 0x404E4E20, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E5220, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E5220, 0x8209278A, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E5220, 0x8209278B, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E5220, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E5620, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E5620, 0x8209278A, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E5620, 0x8209278B, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E5620, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E5A20, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E5A20, 0x8209278A, 0x00000005, 0x004EC283, + // Block 687, offset 0xabc0 + 0x404EFE20, 0x404EDE20, 0x404E5A20, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E5A20, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E5E20, 0x8209278A, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E5E20, 0x8209278A, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E5E20, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E5E20, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E6020, 0x8209278A, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E6020, 0x8209278A, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E6020, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E6020, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E6220, 0x8209278A, + // Block 688, offset 0xac00 + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E6220, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E6220, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E6220, 0x8209278B, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E6620, 0x8209278A, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E6620, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E6620, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E6620, 0x8209278B, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E6A20, 0x8209278A, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E6A20, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E6A20, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + // Block 689, offset 0xac40 + 0x404E6A20, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E7220, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E7220, 0x8209278A, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E7220, 0x8209278B, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E7220, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E7420, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E7420, 0x8209278A, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E7420, 0x8209278B, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E7420, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404E7E20, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404E7E20, 0x8209278A, 0x00000005, 0x004EC283, + // Block 690, offset 0xac80 + 0x404EFE20, 0x404EDE20, 0x404E7E20, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E7E20, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E8220, 0x8209278A, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E8220, 0x8209278A, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E8220, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E8220, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E8420, 0x8209278A, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E8420, 0x8209278A, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E8420, 0x8209278B, 0x00000005, 0x004EC284, + 0x404EFE20, 0x404EDE20, 0x404E8420, 0x8209278B, 0x00000005, 0x004EC283, + 0x404EFE20, 0x404EDE20, 0x404E8820, 0x8209278A, + // Block 691, offset 0xacc0 + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E8820, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E8820, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E8820, 0x8209278B, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E8C20, 0x8209278A, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E8C20, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E8C20, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E8C20, 0x8209278B, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E9420, 0x8209278A, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, 0x404E9420, 0x8209278A, + 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, 0x404E9420, 0x8209278B, + 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + // Block 692, offset 0xad00 + 0x404E9420, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404EA620, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404EA620, 0x8209278A, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404EA620, 0x8209278B, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404EA620, 0x8209278B, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404EAA20, 0x8209278A, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404EAA20, 0x8209278A, 0x00000005, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x404EAA20, 0x8209278B, 0x00000005, 0x004EC284, 0x404EFE20, 0x404EDE20, + 0x404EAA20, 0x8209278B, 0x00000004, 0x004EC283, 0x404EFE20, 0x404EDE20, + 0x8209278B, 0x00000006, 0x404EFE20, 0x404EDE20, 0x404E1420, 0x8209278B, + 0x404E1420, 0x40510420, 0x00000002, 0x402C9A20, + // Block 693, offset 0xad40 + 0xAE603202, 0x00000002, 0x002C9A83, 0xAE603202, 0x00000002, 0x402C9A20, + 0xAE603502, 0x00000002, 0x002C9A83, 0xAE603502, 0x00000002, 0x402C9A20, + 0xAE604E02, 0x00000002, 0x002C9A83, 0xAE604E02, 0x00000002, 0x402C9A20, + 0xAE606402, 0x00000002, 0x002C9A83, 0xAE606402, 0x00000002, 0x402C9A20, + 0xADC07002, 0x00000002, 0x002C9A83, 0xADC07002, 0x00000002, 0x402EE420, + 0xAE603202, 0x00000002, 0x002EE483, 0xAE603202, 0x00000002, 0x402EE420, + 0xAE603502, 0x00000002, 0x002EE483, 0xAE603502, 0x00000002, 0x402EE420, + 0xAE606402, 0x00000002, 0x002EE483, 0xAE606402, 0x00000002, 0x402EE420, + 0xADC07002, 0x00000002, 0x002EE483, 0xADC07002, 0x00000002, 0x40411620, + 0xA000FA02, 0x00000002, 0x40411E20, 0xA000FA02, 0x00000002, 0x40412020, + 0xA000FA02, 0x00000002, 0x40412A20, 0xA000FA02, + // Block 694, offset 0xad80 + 0x00000002, 0x40414620, 0xA000FA02, 0x00000002, 0x40415420, 0xA000FA02, + 0x00000002, 0x403A6822, 0xAE60BE02, 0x00000002, 0x003A7C84, 0x00391C84, + 0x00000002, 0x003A7C9A, 0x00391C9A, 0x00000002, 0x40320820, 0xAE603202, + 0x00000002, 0x00320883, 0xAE603202, 0x00000002, 0x40320A20, 0xAE603202, + 0x00000002, 0x00320A83, 0xAE603202, 0x00000002, 0x40320A20, 0xAE605B02, + 0x00000002, 0x00320A83, 0xAE605B02, 0x00000002, 0x40320E21, 0xAE603702, + 0x00000002, 0x00320EA3, 0xAE603702, 0x00000002, 0x40320E21, 0xAE603C02, + 0x00000002, 0x00320EA3, 0xAE603C02, 0x00000002, 0x40321022, 0xAE603202, + 0x00000002, 0x003210C3, 0xAE603202, 0x00000002, 0x40321022, 0xAE604702, + 0x00000002, 0x003210C3, 0xAE604702, 0x00000002, 0x40321022, 0xAE605B02, + 0x00000002, 0x003210C3, 0xAE605B02, 0x00000002, + // Block 695, offset 0xadc0 + 0x40321022, 0xAD806802, 0x00000002, 0x003210C3, 0xAD806802, 0x00000002, + 0x40321023, 0xAE603502, 0x00000002, 0x003210E3, 0xAE603502, 0x00000002, + 0x40321023, 0xAE604E02, 0x00000002, 0x003210E3, 0xAE604E02, 0x00000002, + 0x40321023, 0xAE606402, 0x00000002, 0x003210E3, 0xAE606402, 0x00000002, + 0x40321023, 0xADC07002, 0x00000002, 0x003210E3, 0xADC07002, 0x00000002, + 0x40321024, 0xAE605B02, 0x00000002, 0x00321103, 0xAE605B02, 0x00000002, + 0x402C6020, 0xAE603202, 0x00000002, 0x002C6083, 0xAE603202, 0x00000002, + 0x40321024, 0xAE603202, 0x00000002, 0x00321103, 0xAE603202, 0x00000002, + 0x40321024, 0xAE603502, 0x00000002, 0x00321103, 0xAE603502, 0x00000002, + 0x40321024, 0xAE604E02, 0x00000002, 0x00321103, 0xAE604E02, 0x00000002, + 0x40321024, 0xAE606402, 0x00000002, 0x00321103, + // Block 696, offset 0xae00 + 0xAE606402, 0x00000002, 0x40321024, 0xADC07002, 0x00000002, 0x00321103, + 0xADC07002, 0x00000002, 0x0030BE83, 0xAE604E02, 0x00000002, 0x0030BE83, + 0xADC07002, 0x00000002, 0x00497283, 0x40496C20, 0x00000002, 0x00497284, + 0x40496C20, 0x00000002, 0x402BDE21, 0xAE603702, 0x00000002, 0x002BDEA3, + 0xAE603702, 0x00000002, 0x402BDE21, 0xAE603C02, 0x00000002, 0x002BDEA3, + 0xAE603C02, 0x00000002, 0x402BDE21, 0xAE604302, 0x00000002, 0x002BDEA3, + 0xAE604302, 0x00000002, 0x402BDE22, 0xAE604702, 0x00000002, 0x002BDEC3, + 0xAE604702, 0x00000002, 0x402BDE22, 0xAE605202, 0x00000002, 0x002BDEC3, + 0xAE605202, 0x00000002, 0x402C9821, 0xAE603C02, 0x00000002, 0x002C98A3, + 0xAE603C02, 0x00000002, 0x402C9822, 0xAE603202, 0x00000002, 0x002C98C3, + 0xAE603202, 0x00000002, 0x402C9822, 0xAE603502, + // Block 697, offset 0xae40 + 0x00000002, 0x002C98C3, 0xAE603502, 0x00000002, 0x402D9A21, 0xAE604702, + 0x00000002, 0x002D9AA3, 0xAE604702, 0x00000002, 0x402EE221, 0xAE603C02, + 0x00000002, 0x002EE2A3, 0xAE603C02, 0x00000002, 0x402EE221, 0xAE604E02, + 0x00000002, 0x002EE2A3, 0xAE604E02, 0x00000002, 0x402EE221, 0xAD806802, + 0x00000002, 0x002EE2A3, 0xAD806802, 0x00000002, 0x402EE222, 0xAE603202, + 0x00000002, 0x002EE2C3, 0xAE603202, 0x00000002, 0x402EE222, 0xAE603502, + 0x00000002, 0x002EE2C3, 0xAE603502, 0x00000002, 0x402EE222, 0xAE604702, + 0x00000002, 0x002EE2C3, 0xAE604702, 0x00000002, 0x402EE222, 0xAE604E02, + 0x00000002, 0x002EE2C3, 0xAE604E02, 0x00000002, 0x402EE222, 0xAE605202, + 0x00000002, 0x002EE2C3, 0xAE605202, 0x00000002, 0x402EE222, 0xACA05902, + 0x00000002, 0x002EE2C3, 0xACA05902, 0x00000002, + // Block 698, offset 0xae80 + 0x40306C21, 0xAE604702, 0x00000002, 0x00306CA3, 0xAE604702, 0x00000002, + 0x40306C21, 0xAE604E02, 0x00000002, 0x00306CA3, 0xAE604E02, 0x00000002, + 0x40306C21, 0xAD806802, 0x00000002, 0x00306CA3, 0xAD806802, 0x00000002, + 0xA000AD18, 0xA000BA18, 0x00000002, 0x00393C97, 0x00396497, 0x00000002, + 0x00393C9A, 0x0039649A, 0x00000002, 0x00393C97, 0x00397297, 0x00000002, + 0x00393C9A, 0x0039729A, 0x00000002, 0x00393C97, 0x00397497, 0x00000002, + 0x00393C9A, 0x0039749A, 0x00000002, 0x00393C99, 0x0039A499, 0x00000002, + 0x00393C99, 0x0039A699, 0x00000002, 0x00393C97, 0x003A4E97, 0x00000002, + 0x00393C98, 0x003A4E98, 0x00000002, 0x00393C99, 0x003A4E99, 0x00000002, + 0x00393C9A, 0x003A4E9A, 0x00000002, 0x00393C99, 0x003A5699, 0x00000002, + 0x00395697, 0x00396497, 0x00000002, 0x0039569A, + // Block 699, offset 0xaec0 + 0x0039649A, 0x00000002, 0x00395697, 0x00397297, 0x00000002, 0x0039569A, + 0x0039729A, 0x00000002, 0x00395697, 0x00397497, 0x00000002, 0x0039569A, + 0x0039749A, 0x00000002, 0x00395699, 0x0039A499, 0x00000002, 0x00395699, + 0x0039A699, 0x00000002, 0x00395697, 0x003A4E97, 0x00000002, 0x00395698, + 0x003A4E98, 0x00000002, 0x00395699, 0x003A4E99, 0x00000002, 0x0039569A, + 0x003A4E9A, 0x00000002, 0x00395699, 0x003A5699, 0x00000002, 0x0039589A, + 0x0039649A, 0x00000002, 0x00395899, 0x0039A499, 0x00000002, 0x00395899, + 0x0039A699, 0x00000002, 0x00395897, 0x003A4E97, 0x00000002, 0x00395898, + 0x003A4E98, 0x00000002, 0x00395899, 0x003A4E99, 0x00000002, 0x0039589A, + 0x003A4E9A, 0x00000002, 0x00395899, 0x003A5699, 0x00000002, 0x00396497, + 0x00397297, 0x00000002, 0x0039649A, 0x0039729A, + // Block 700, offset 0xaf00 + 0x00000002, 0x00396497, 0x003A4E97, 0x00000002, 0x0039649A, 0x003A4E9A, + 0x00000002, 0x00397297, 0x00396497, 0x00000002, 0x0039729A, 0x0039649A, + 0x00000002, 0x00397297, 0x003A4E97, 0x00000002, 0x0039729A, 0x003A4E9A, + 0x00000002, 0x00397497, 0x00396497, 0x00000002, 0x0039749A, 0x0039649A, + 0x00000002, 0x0039749A, 0x0039729A, 0x00000002, 0x00397497, 0x003A4E97, + 0x00000002, 0x0039749A, 0x003A4E9A, 0x00000002, 0x00398A9A, 0xA000D11A, + 0x00000002, 0x0039A49A, 0xA000D11A, 0x00000002, 0x0039C697, 0x00396497, + 0x00000002, 0x0039C698, 0x00396498, 0x00000002, 0x0039C69A, 0x0039649A, + 0x00000002, 0x0039C697, 0x00397297, 0x00000002, 0x0039C698, 0x00397298, + 0x00000002, 0x0039C69A, 0x0039729A, 0x00000002, 0x0039C697, 0x00397497, + 0x00000002, 0x0039C698, 0x00397498, 0x00000002, + // Block 701, offset 0xaf40 + 0x0039C69A, 0x0039749A, 0x00000002, 0x0039C699, 0x0039A499, 0x00000002, + 0x0039C69A, 0x0039A49A, 0x00000002, 0x0039C697, 0x003A4E97, 0x00000002, + 0x0039C698, 0x003A4E98, 0x00000002, 0x0039C69A, 0x003A4E9A, 0x00000002, + 0x0039C897, 0x00396497, 0x00000002, 0x0039C898, 0x00396498, 0x00000002, + 0x0039C899, 0x00396499, 0x00000002, 0x0039C89A, 0x0039649A, 0x00000002, + 0x0039C897, 0x00397297, 0x00000002, 0x0039C898, 0x00397298, 0x00000002, + 0x0039C899, 0x00397299, 0x00000002, 0x0039C89A, 0x0039729A, 0x00000002, + 0x0039C897, 0x00397497, 0x00000002, 0x0039C898, 0x00397498, 0x00000002, + 0x0039C899, 0x00397499, 0x00000002, 0x0039C89A, 0x0039749A, 0x00000002, + 0x0039C899, 0x0039A499, 0x00000002, 0x0039C89A, 0x0039A49A, 0x00000002, + 0x0039C897, 0x003A4E97, 0x00000002, 0x0039C898, + // Block 702, offset 0xaf80 + 0x003A4E98, 0x00000002, 0x0039C899, 0x003A4E99, 0x00000002, 0x0039C89A, + 0x003A4E9A, 0x00000002, 0x0039DC97, 0x00397297, 0x00000002, 0x0039DC9A, + 0x0039729A, 0x00000002, 0x0039DC97, 0x00397497, 0x00000002, 0x0039DC99, + 0x0039A499, 0x00000002, 0x0039DC9A, 0x0039A49A, 0x00000002, 0x0039DC97, + 0x003A4E97, 0x00000002, 0x0039DC9A, 0x003A4E9A, 0x00000002, 0x0039DE97, + 0x00396497, 0x00000002, 0x0039DE9A, 0x0039649A, 0x00000002, 0x0039DE97, + 0x00397297, 0x00000002, 0x0039DE9A, 0x0039729A, 0x00000002, 0x0039DE97, + 0x00397497, 0x00000002, 0x0039DE9A, 0x0039749A, 0x00000002, 0x0039DE99, + 0x0039A499, 0x00000002, 0x0039DE9A, 0x0039A49A, 0x00000002, 0x0039DE97, + 0x003A4E97, 0x00000002, 0x0039DE9A, 0x003A4E9A, 0x00000002, 0x0039E697, + 0x00397297, 0x00000002, 0x0039E69A, 0x0039729A, + // Block 703, offset 0xafc0 + 0x00000002, 0x0039E697, 0x003A4E97, 0x00000002, 0x0039E698, 0x003A4E98, + 0x00000002, 0x0039E69A, 0x003A4E9A, 0x00000002, 0x0039E897, 0x003A4E97, + 0x00000002, 0x0039E898, 0x003A4E98, 0x00000002, 0x0039E89A, 0x003A4E9A, + 0x00000002, 0x0039EE97, 0x00396497, 0x00000002, 0x0039EE9A, 0x0039649A, + 0x00000002, 0x0039EE97, 0x003A4E97, 0x00000002, 0x0039EE9A, 0x003A4E9A, + 0x00000002, 0x0039F097, 0x00396497, 0x00000002, 0x0039F09A, 0x0039649A, + 0x00000002, 0x0039F097, 0x003A4E97, 0x00000002, 0x0039F09A, 0x003A4E9A, + 0x00000002, 0x0039FC97, 0x00396497, 0x00000002, 0x0039FC9A, 0x0039649A, + 0x00000002, 0x0039FC97, 0x00397297, 0x00000002, 0x0039FC9A, 0x0039729A, + 0x00000002, 0x0039FC97, 0x00397497, 0x00000002, 0x0039FC9A, 0x0039749A, + 0x00000002, 0x0039FC97, 0x003A4E97, 0x00000002, + // Block 704, offset 0xb000 + 0x0039FC9A, 0x003A4E9A, 0x00000002, 0x003A1297, 0x00397297, 0x00000002, + 0x003A129A, 0x0039729A, 0x00000002, 0x003A1297, 0x003A4E97, 0x00000002, + 0x003A129A, 0x003A4E9A, 0x00000002, 0x003A4099, 0x00393899, 0x00000002, + 0x003A409A, 0x0039389A, 0x00000002, 0x003A4097, 0x00396497, 0x00000002, + 0x003A409A, 0x0039649A, 0x00000002, 0x003A4097, 0x00397297, 0x00000002, + 0x003A409A, 0x0039729A, 0x00000002, 0x003A4097, 0x00397497, 0x00000002, + 0x003A409A, 0x0039749A, 0x00000002, 0x003A4097, 0x003A4E97, 0x00000002, + 0x003A4098, 0x003A4E98, 0x00000002, 0x003A4099, 0x003A4E99, 0x00000002, + 0x003A409A, 0x003A4E9A, 0x00000002, 0x003A4E99, 0x00393899, 0x00000002, + 0x003A4E97, 0x00396497, 0x00000002, 0x003A4E9A, 0x0039649A, 0x00000002, + 0x003A4E97, 0x00397297, 0x00000002, 0x003A4E9A, + // Block 705, offset 0xb040 + 0x0039729A, 0x00000002, 0x003A4E97, 0x00397497, 0x00000002, 0x003A4E9A, + 0x0039749A, 0x00000002, 0x003A4E97, 0x003A4E97, 0x00000002, 0x003A4E99, + 0x003A4E99, 0x00000002, 0x003A4E9A, 0x003A4E9A, 0x00000002, 0x003A5697, + 0x00396497, 0x00000002, 0x003A569A, 0x0039649A, 0x00000002, 0x003A5697, + 0x00397297, 0x00000002, 0x003A569A, 0x0039729A, 0x00000002, 0x003A5697, + 0x00397497, 0x00000002, 0x003A569A, 0x0039749A, 0x00000002, 0x003A5699, + 0x0039A499, 0x00000002, 0x003A5699, 0x0039A699, 0x00000002, 0x003A5697, + 0x003A4E97, 0x00000002, 0x003A5698, 0x003A4E98, 0x00000002, 0x003A5699, + 0x003A4E99, 0x00000002, 0x003A569A, 0x003A4E9A, 0x00000002, 0x003A5699, + 0x003A5699, 0x00000002, 0x403A7220, 0xA000C602, 0x00000002, 0x003A7484, + 0x00391C84, 0x00000002, 0xAE604702, 0xAE603802, + // Block 706, offset 0xb080 + 0x00000002, 0x40062C20, 0xAE603802, 0x00000002, 0x40063620, 0xAE603802, + 0x00000002, 0x40063820, 0xAE603802, 0x00000002, 0x402BDE20, 0xAE603602, + 0x00000002, 0x002BDE88, 0xAE603602, 0x00000002, 0x402BDE20, 0xAE603702, + 0x00000002, 0x002BDE88, 0xAE603702, 0x00000002, 0x402BDE20, 0xAE603802, + 0x00000002, 0x002BDE88, 0xAE603802, 0x00000002, 0x402BDE20, 0xAE603902, + 0x00000002, 0x002BDE88, 0xAE603902, 0x00000003, 0x402BDE20, 0xAE604302, + 0xAE603802, 0x00000003, 0x002BDE88, 0xAE604302, 0xAE603802, 0x00000004, + 0x002BDE84, 0xA0013904, 0x002C9884, 0xAE603802, 0x00000004, 0x002BDE8A, + 0xA0013904, 0x002C988A, 0xAE603802, 0x00000002, 0x402BE020, 0xAE603602, + 0x00000002, 0x002BE083, 0xAE603602, 0x00000002, 0x402BE020, 0xAE603702, + 0x00000002, 0x002BE083, 0xAE603702, 0x00000002, + // Block 707, offset 0xb0c0 + 0x402BE020, 0xAE603802, 0x00000002, 0x002BE083, 0xAE603802, 0x00000002, + 0x402BE020, 0xAE603902, 0x00000002, 0x002BE083, 0xAE603902, 0x00000002, + 0x402BE220, 0xAE603602, 0x00000002, 0x002BE283, 0xAE603602, 0x00000002, + 0x402BE220, 0xAE603702, 0x00000002, 0x002BE283, 0xAE603702, 0x00000002, + 0x402BE220, 0xAE603802, 0x00000002, 0x002BE283, 0xAE603802, 0x00000002, + 0x402BE220, 0xAE603902, 0x00000002, 0x002BE283, 0xAE603902, 0x00000002, + 0x402C0A20, 0xAE603902, 0x00000002, 0x002C0A88, 0xAE603902, 0x00000002, + 0x402C3A20, 0xAE603802, 0x00000002, 0x002C3A88, 0xAE603802, 0x00000003, + 0x402C3A20, 0xACA05602, 0xAE603802, 0x00000003, 0x002C3A88, 0xACA05602, + 0xAE603802, 0x00000002, 0x402C6220, 0xAE603902, 0x00000002, 0x002C6288, + 0xAE603902, 0x00000002, 0x402C9820, 0xAE603602, + // Block 708, offset 0xb100 + 0x00000002, 0x002C9888, 0xAE603602, 0x00000002, 0x402C9820, 0xAE603702, + 0x00000002, 0x002C9888, 0xAE603702, 0x00000002, 0x402C9820, 0xAE603802, + 0x00000002, 0x002C9888, 0xAE603802, 0x00000002, 0x402C9820, 0xAE603902, + 0x00000002, 0x002C9888, 0xAE603902, 0x00000003, 0x402C9820, 0xAE605B02, + 0xAE603802, 0x00000003, 0x002C9888, 0xAE605B02, 0xAE603802, 0x00000002, + 0x402C9A20, 0xAE603602, 0x00000002, 0x002C9A83, 0xAE603602, 0x00000002, + 0x402C9A20, 0xAE603702, 0x00000002, 0x002C9A83, 0xAE603702, 0x00000002, + 0x402C9A20, 0xAE603802, 0x00000002, 0x002C9A83, 0xAE603802, 0x00000002, + 0x402C9A20, 0xAE603902, 0x00000002, 0x002C9A83, 0xAE603902, 0x00000002, + 0x402D2220, 0xAE603802, 0x00000002, 0x002D2288, 0xAE603802, 0x00000002, + 0x402D6820, 0xAE603902, 0x00000002, 0x002D6888, + // Block 709, offset 0xb140 + 0xAE603902, 0x00000002, 0x402D9A20, 0xAE603602, 0x00000002, 0x002D9A88, + 0xAE603602, 0x00000002, 0x402D9A20, 0xAE603702, 0x00000002, 0x002D9A88, + 0xAE603702, 0x00000002, 0x402D9A20, 0xAE603802, 0x00000002, 0x002D9A88, + 0xAE603802, 0x00000002, 0x402D9A20, 0xAE603902, 0x00000002, 0x002D9A88, + 0xAE603902, 0x00000003, 0x402D9A20, 0xAE604702, 0xAE603802, 0x00000003, + 0x002D9A88, 0xAE604702, 0xAE603802, 0x00000002, 0x402DFE20, 0xAE603802, + 0x00000002, 0x002DFE88, 0xAE603802, 0x00000002, 0x402DFE20, 0xAE603902, + 0x00000002, 0x002DFE88, 0xAE603902, 0x00000002, 0x402E2220, 0xAE603802, + 0x00000002, 0x002E2288, 0xAE603802, 0x00000002, 0x402E2220, 0xAE603902, + 0x00000002, 0x002E2288, 0xAE603902, 0x00000003, 0x402E2220, 0xAE603902, + 0xAE605B02, 0x00000003, 0x002E2288, 0xAE603902, + // Block 710, offset 0xb180 + 0xAE605B02, 0x00000002, 0x402E8220, 0xAE603802, 0x00000002, 0x002E8288, + 0xAE603802, 0x00000002, 0x402E8220, 0xAE603902, 0x00000002, 0x002E8288, + 0xAE603902, 0x00000002, 0x402E9E20, 0xAE603702, 0x00000002, 0x002E9E88, + 0xAE603702, 0x00000002, 0x402E9E20, 0xAE603802, 0x00000002, 0x002E9E88, + 0xAE603802, 0x00000002, 0x402E9E20, 0xAE603902, 0x00000002, 0x002E9E88, + 0xAE603902, 0x00000002, 0x402EE220, 0xAE603602, 0x00000002, 0x002EE288, + 0xAE603602, 0x00000002, 0x402EE220, 0xAE603702, 0x00000002, 0x002EE288, + 0xAE603702, 0x00000003, 0x402EE220, 0xAE603702, 0xAE603802, 0x00000003, + 0x002EE288, 0xAE603702, 0xAE603802, 0x00000003, 0x402EE220, 0xAE603702, + 0xAE604702, 0x00000003, 0x002EE288, 0xAE603702, 0xAE604702, 0x00000003, + 0x402EE220, 0xAE603702, 0xAE605B02, 0x00000003, + // Block 711, offset 0xb1c0 + 0x002EE288, 0xAE603702, 0xAE605B02, 0x00000002, 0x402EE220, 0xAE603802, + 0x00000002, 0x002EE288, 0xAE603802, 0x00000002, 0x402EE220, 0xAE603902, + 0x00000002, 0x002EE288, 0xAE603902, 0x00000003, 0x402EE220, 0xA0005402, + 0xAE603802, 0x00000003, 0x002EE288, 0xA0005402, 0xAE603802, 0x00000003, + 0x402EE220, 0xAE605B02, 0xAE603802, 0x00000003, 0x002EE288, 0xAE605B02, + 0xAE603802, 0x00000002, 0x402EE420, 0xAE603602, 0x00000002, 0x002EE483, + 0xAE603602, 0x00000002, 0x402EE420, 0xAE603702, 0x00000002, 0x002EE483, + 0xAE603702, 0x00000002, 0x402EE420, 0xAE603802, 0x00000002, 0x002EE483, + 0xAE603802, 0x00000002, 0x402EE420, 0xAE603902, 0x00000002, 0x002EE483, + 0xAE603902, 0x00000002, 0x402EE620, 0xAE603502, 0x00000002, 0x002EE683, + 0xAE603502, 0x00000002, 0x402EE620, 0xAE603602, + // Block 712, offset 0xb200 + 0x00000002, 0x002EE683, 0xAE603602, 0x00000002, 0x402EE620, 0xAE603702, + 0x00000002, 0x002EE683, 0xAE603702, 0x00000002, 0x402EE620, 0xAE603802, + 0x00000002, 0x002EE683, 0xAE603802, 0x00000002, 0x402EE620, 0xAE603902, + 0x00000002, 0x002EE683, 0xAE603902, 0x00000002, 0x402F2C20, 0xAE603802, + 0x00000002, 0x002F2C88, 0xAE603802, 0x00000002, 0x402F7A20, 0xAE603802, + 0x00000002, 0x002F7A88, 0xAE603802, 0x00000002, 0x402F7A20, 0xAE603902, + 0x00000002, 0x002F7A88, 0xAE603902, 0x00000003, 0x402F7A20, 0xAE603902, + 0xAE605B02, 0x00000003, 0x002F7A88, 0xAE603902, 0xAE605B02, 0x00000002, + 0x402FE620, 0xAE603802, 0x00000002, 0x002FE688, 0xAE603802, 0x00000003, + 0x402FE620, 0xAE603802, 0xAE605202, 0x00000003, 0x002FE688, 0xAE603802, + 0xAE605202, 0x00000002, 0x402FE620, 0xAE603902, + // Block 713, offset 0xb240 + 0x00000002, 0x002FE688, 0xAE603902, 0x00000003, 0x402FE620, 0xAE603902, + 0xAE605202, 0x00000003, 0x002FE688, 0xAE603902, 0xAE605202, 0x00000002, + 0x40302C20, 0xAE603902, 0x00000002, 0x00302C88, 0xAE603902, 0x00000002, + 0x40306C20, 0xAE603602, 0x00000002, 0x00306C88, 0xAE603602, 0x00000002, + 0x40306C20, 0xAE603702, 0x00000002, 0x00306C88, 0xAE603702, 0x00000003, + 0x40306C20, 0xAE603702, 0xAE603802, 0x00000003, 0x00306C88, 0xAE603702, + 0xAE603802, 0x00000002, 0x40306C20, 0xAE603802, 0x00000002, 0x00306C88, + 0xAE603802, 0x00000002, 0x40306C20, 0xAE603902, 0x00000002, 0x00306C88, + 0xAE603902, 0x00000003, 0x40306C20, 0xAE604702, 0xAE603802, 0x00000003, + 0x00306C88, 0xAE604702, 0xAE603802, 0x00000002, 0x40306E20, 0xAE603602, + 0x00000002, 0x00306E83, 0xAE603602, 0x00000002, + // Block 714, offset 0xb280 + 0x40306E20, 0xAE603702, 0x00000002, 0x00306E83, 0xAE603702, 0x00000002, + 0x40306E20, 0xAE603802, 0x00000002, 0x00306E83, 0xAE603802, 0x00000002, + 0x40306E20, 0xAE603902, 0x00000002, 0x00306E83, 0xAE603902, 0x00000002, + 0x4030BE20, 0xAE603702, 0x00000002, 0x0030BE88, 0xAE603702, 0x00000002, + 0x4030BE20, 0xAE603902, 0x00000002, 0x0030BE88, 0xAE603902, 0x00000002, + 0x4030E220, 0xAE603802, 0x00000002, 0x0030E288, 0xAE603802, 0x00000002, + 0x4030E220, 0xAE603902, 0x00000002, 0x0030E288, 0xAE603902, 0x00000002, + 0x40310020, 0xAE603602, 0x00000002, 0x00310088, 0xAE603602, 0x00000002, + 0x40310020, 0xAE603702, 0x00000002, 0x00310088, 0xAE603702, 0x00000002, + 0x40310020, 0xAE603802, 0x00000002, 0x00310088, 0xAE603802, 0x00000002, + 0x40310020, 0xAE603902, 0x00000002, 0x00310088, + // Block 715, offset 0xb2c0 + 0xAE603902, 0x00000002, 0x40312A20, 0xAE603802, 0x00000002, 0x00312A88, + 0xAE603802, 0x00000002, 0x40312A20, 0xAE603902, 0x00000002, 0x00312A88, + 0xAE603902, 0x00000003, 0x40325220, 0xAE602202, 0xAE603802, 0x00000003, + 0x00325288, 0xAE602202, 0xAE603802, 0x00000004, 0x40325220, 0xAE602202, + 0xAE603802, 0xAF007F02, 0x00000004, 0x00325288, 0xAE602202, 0xAE603802, + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602A02, 0xAE603802, 0x00000003, + 0x00325288, 0xAE602A02, 0xAE603802, 0x00000004, 0x40325220, 0xAE602A02, + 0xAE603802, 0xAF007F02, 0x00000004, 0x00325288, 0xAE602A02, 0xAE603802, + 0xAF007F02, 0x00000002, 0x40325220, 0xAE603802, 0x00000002, 0x00325288, + 0xAE603802, 0x00000003, 0x40325220, 0xAE603802, 0xAF007F02, 0x00000003, + 0x40325C20, 0xAE602202, 0xAE603802, 0x00000003, + // Block 716, offset 0xb300 + 0x00325C88, 0xAE602202, 0xAE603802, 0x00000003, 0x40325C20, 0xAE602A02, + 0xAE603802, 0x00000003, 0x00325C88, 0xAE602A02, 0xAE603802, 0x00000002, + 0x40325C20, 0xAE603802, 0x00000002, 0x00325C88, 0xAE603802, 0x00000003, + 0x40326820, 0xAE602202, 0xAE603802, 0x00000003, 0x00326888, 0xAE602202, + 0xAE603802, 0x00000004, 0x40326820, 0xAE602202, 0xAE603802, 0xAF007F02, + 0x00000004, 0x00326888, 0xAE602202, 0xAE603802, 0xAF007F02, 0x00000003, + 0x40326820, 0xAE602A02, 0xAE603802, 0x00000003, 0x00326888, 0xAE602A02, + 0xAE603802, 0x00000004, 0x40326820, 0xAE602A02, 0xAE603802, 0xAF007F02, + 0x00000004, 0x00326888, 0xAE602A02, 0xAE603802, 0xAF007F02, 0x00000002, + 0x40326820, 0xAE603802, 0x00000002, 0x00326888, 0xAE603802, 0x00000003, + 0x40326820, 0xAE603802, 0xAF007F02, 0x00000003, + // Block 717, offset 0xb340 + 0x40326C20, 0xAE602202, 0xAE603802, 0x00000003, 0x00326C88, 0xAE602202, + 0xAE603802, 0x00000003, 0x40326C20, 0xAE602A02, 0xAE603802, 0x00000003, + 0x00326C88, 0xAE602A02, 0xAE603802, 0x00000002, 0x40326C20, 0xAE603802, + 0x00000002, 0x00326C88, 0xAE603802, 0x00000003, 0x40326C20, 0xAE604702, + 0xAE603802, 0x00000003, 0x40327C20, 0xAE602202, 0xAE603802, 0x00000003, + 0x00327C88, 0xAE602202, 0xAE603802, 0x00000003, 0x40327C20, 0xAE602A02, + 0xAE603802, 0x00000003, 0x00327C88, 0xAE602A02, 0xAE603802, 0x00000002, + 0x40327C20, 0xAE603802, 0x00000002, 0x00327C88, 0xAE603802, 0x00000003, + 0x40329820, 0xAE602202, 0xAE603802, 0x00000003, 0x40329820, 0xAE602A02, + 0xAE603802, 0x00000003, 0x00329888, 0xAE602A02, 0xAE603802, 0x00000002, + 0x40329820, 0xAE603802, 0x00000002, 0x00329888, + // Block 718, offset 0xb380 + 0xAE603802, 0x00000003, 0x40329820, 0xAE604702, 0xAE603802, 0x00000003, + 0x4032A220, 0xAE602202, 0xAE603802, 0x00000003, 0x0032A288, 0xAE602202, + 0xAE603802, 0x00000004, 0x4032A220, 0xAE602202, 0xAE603802, 0xAF007F02, + 0x00000004, 0x0032A288, 0xAE602202, 0xAE603802, 0xAF007F02, 0x00000003, + 0x4032A220, 0xAE602A02, 0xAE603802, 0x00000003, 0x0032A288, 0xAE602A02, + 0xAE603802, 0x00000004, 0x4032A220, 0xAE602A02, 0xAE603802, 0xAF007F02, + 0x00000004, 0x0032A288, 0xAE602A02, 0xAE603802, 0xAF007F02, 0x00000002, + 0x4032A220, 0xAE603802, 0x00000002, 0x0032A288, 0xAE603802, 0x00000003, + 0x4032A220, 0xAE603802, 0xAF007F02, 0x00000002, 0x402BDE20, 0xAE603202, + 0x00000002, 0x402C9820, 0xAE603202, 0x00000002, 0x402D9A20, 0xAE603202, + 0x00000002, 0x402EE220, 0xAE603202, 0x00000002, + // Block 719, offset 0xb3c0 + 0x40306C20, 0xAE603202, 0x00000002, 0x402C9A20, 0xAE603C02, 0x00000002, + 0x002C9A83, 0xAE603C02, 0x00000003, 0x0003F483, 0x6C030A20, 0x4003F620, + 0x00000003, 0x0003F483, 0x6C110E20, 0x4003F620, 0x00000003, 0x0003F483, + 0x6C272220, 0x4003F620, 0x00000003, 0x0003F483, 0x6C37B420, 0x4003F620, + 0x00000003, 0x0003F483, 0x6C549820, 0x4003F620, 0x00000003, 0x0003F483, + 0x6C5D8420, 0x4003F620, 0x00000003, 0x0003F483, 0x6C61F420, 0x4003F620, + 0x00000003, 0x0003F483, 0x6C64CA20, 0x4003F620, 0x00000003, 0x0003F483, + 0x6C6C2E20, 0x4003F620, 0x00000003, 0x0003F483, 0x6C6F9A20, 0x4003F620, + 0x00000003, 0x0003F483, 0x6C814020, 0x4003F620, 0x00000003, 0x0003F483, + 0x6C8F2420, 0x4003F620, 0x00000003, 0x0003F483, 0x6C9FE620, 0x4003F620, + 0x00000003, 0x0003F483, 0x6CA25C20, 0x4003F620, + // Block 720, offset 0xb400 + 0x00000003, 0x0003F483, 0x6CB4C620, 0x4003F620, 0x00000003, 0x0003F483, + 0x6CB6C820, 0x4003F620, 0x00000003, 0x0003F483, 0x6CC63620, 0x4003F620, + 0x00000003, 0x0003F483, 0x6CC9F220, 0x4003F620, 0x00000003, 0x0003F483, + 0x6CCF3620, 0x4003F620, 0x00000003, 0x0003F483, 0x6CD22420, 0x4003F620, + 0x00000003, 0x0003F483, 0x6CD70220, 0x4003F620, 0x00000003, 0x0003F483, + 0x6CD87420, 0x4003F620, 0x00000003, 0x0003F483, 0x6CE27020, 0x4003F620, + 0x00000003, 0x0003F483, 0x6CE91020, 0x4003F620, 0x00000003, 0x0003F483, + 0x6CF41420, 0x4003F620, 0x00000003, 0x0003F483, 0x6D007020, 0x4003F620, + 0x00000003, 0x0003F483, 0x6D04B220, 0x4003F620, 0x00000003, 0x0003F483, + 0x6D08F820, 0x4003F620, 0x00000003, 0x0003F483, 0x6D13B620, 0x4003F620, + 0x00000003, 0x0003F483, 0x6D1F9820, 0x4003F620, + // Block 721, offset 0xb440 + 0x00000003, 0x0003F483, 0x6D266820, 0x4003F620, 0x00000003, 0x0003F483, + 0x6D357020, 0x4003F620, 0x00000003, 0x0003F483, 0x6D399220, 0x4003F620, + 0x00000003, 0x0003F483, 0x6D3AC620, 0x4003F620, 0x00000003, 0x0003F483, + 0x6D3E6020, 0x4003F620, 0x00000003, 0x0003F483, 0x6D3F2A20, 0x4003F620, + 0x00000003, 0x0004B083, 0x6C011220, 0x4004B220, 0x00000003, 0x0004B083, + 0x6C044020, 0x4004B220, 0x00000003, 0x0004B083, 0x6C079220, 0x4004B220, + 0x00000003, 0x0004B083, 0x6C26E020, 0x4004B220, 0x00000003, 0x0004B083, + 0x6C2A1220, 0x4004B220, 0x00000003, 0x0004B083, 0x6C2D0A20, 0x4004B220, + 0x00000003, 0x0004B083, 0x6C37B420, 0x4004B220, 0x00000003, 0x0004B083, + 0x6CC9F220, 0x4004B220, 0x00000003, 0x0004B083, 0x6CD16420, 0x4004B220, + 0x00000003, 0x0029CE83, 0x4029CC20, 0x6C2D0A20, + // Block 722, offset 0xb480 + 0x00000003, 0x0029CE83, 0x4029CC20, 0x6CC63620, 0x00000003, 0x0029CE83, + 0x4029CC20, 0x6D266820, 0x00000003, 0x0029CE83, 0x4029CE20, 0x6C2D0A20, + 0x00000003, 0x0029CE83, 0x4029CE20, 0x6CC63620, 0x00000003, 0x0029CE83, + 0x4029CE20, 0x6D266820, 0x00000003, 0x0029CE83, 0x4029D020, 0x6C2D0A20, + 0x00000003, 0x0029CE83, 0x4029D020, 0x6CC63620, 0x00000003, 0x0029CE83, + 0x4029D020, 0x6D266820, 0x00000003, 0x0029CE83, 0x4029D220, 0x6C2D0A20, + 0x00000003, 0x0029CE83, 0x4029D220, 0x6CC63620, 0x00000003, 0x0029CE83, + 0x4029D420, 0x6C2D0A20, 0x00000003, 0x0029CE83, 0x4029D420, 0x6CC63620, + 0x00000003, 0x0029CE83, 0x4029D620, 0x6C2D0A20, 0x00000003, 0x0029CE83, + 0x4029D620, 0x6CC63620, 0x00000003, 0x0029CE83, 0x4029D820, 0x6C2D0A20, + 0x00000003, 0x0029CE83, 0x4029D820, 0x6CC63620, + // Block 723, offset 0xb4c0 + 0x00000003, 0x0029CE83, 0x4029DA20, 0x6C2D0A20, 0x00000003, 0x0029CE83, + 0x4029DA20, 0x6CC63620, 0x00000003, 0x0029CE83, 0x4029DC20, 0x6C2D0A20, + 0x00000003, 0x0029CE83, 0x4029DC20, 0x6CC63620, 0x00000003, 0x0029CE83, + 0x4029DE20, 0x6C2D0A20, 0x00000003, 0x0029CE83, 0x4029DE20, 0x6CC63620, + 0x00000003, 0x0029D083, 0x4029CC20, 0x6C2D0A20, 0x00000003, 0x0029D083, + 0x4029CC20, 0x6CC63620, 0x00000003, 0x0029D083, 0x4029CE20, 0x6C2D0A20, + 0x00000003, 0x0029D083, 0x4029CE20, 0x6CC63620, 0x00000003, 0x0029D083, + 0x4029D020, 0x6C2D0A20, 0x00000003, 0x0029D083, 0x4029D020, 0x6CC63620, + 0x00000003, 0x0029D083, 0x4029D220, 0x6C2D0A20, 0x00000003, 0x0029D083, + 0x4029D220, 0x6CC63620, 0x00000003, 0x0029D083, 0x4029D420, 0x6C2D0A20, + 0x00000003, 0x0029D083, 0x4029D420, 0x6CC63620, + // Block 724, offset 0xb500 + 0x00000003, 0x0029D083, 0x4029D620, 0x6CC63620, 0x00000003, 0x0029D083, + 0x4029D820, 0x6CC63620, 0x00000003, 0x0029D083, 0x4029DA20, 0x6CC63620, + 0x00000003, 0x0029D083, 0x4029DC20, 0x6CC63620, 0x00000003, 0x0029D083, + 0x4029DE20, 0x6CC63620, 0x00000003, 0x0029D283, 0x4029CC20, 0x6CC63620, + 0x00000003, 0x0029D283, 0x4029CE20, 0x6CC63620, 0x00000002, 0x402BDE1C, + 0xAE604702, 0x00000002, 0x002BDE03, 0xAE604702, 0x00000002, 0x402BDE1C, + 0xAE605202, 0x00000002, 0x002BDE03, 0xAE605202, 0x00000002, 0x402BDE1D, + 0xAE603702, 0x00000002, 0x002BDE23, 0xAE603702, 0x00000002, 0x402BDE1D, + 0xAE603C02, 0x00000002, 0x002BDE23, 0xAE603C02, 0x00000002, 0x402BDE1D, + 0xAE604302, 0x00000002, 0x002BDE23, 0xAE604302, 0x00000002, 0x402BDE1F, + 0xAE603702, 0x00000002, 0x002BDE63, 0xAE603702, + // Block 725, offset 0xb540 + 0x00000002, 0x402BDE1F, 0xAE603C02, 0x00000002, 0x002BDE63, 0xAE603C02, + 0x00000002, 0x402C981C, 0xAE603202, 0x00000002, 0x002C9803, 0xAE603202, + 0x00000002, 0x402C981C, 0xAE603502, 0x00000002, 0x002C9803, 0xAE603502, + 0x00000002, 0x402D9A1D, 0xAE604702, 0x00000002, 0x002D9A23, 0xAE604702, + 0x00000002, 0x402EE21C, 0xAE603202, 0x00000002, 0x002EE203, 0xAE603202, + 0x00000002, 0x402EE21C, 0xAE603502, 0x00000002, 0x002EE203, 0xAE603502, + 0x00000002, 0x402EE21C, 0xAE604702, 0x00000002, 0x002EE203, 0xAE604702, + 0x00000002, 0x402EE21C, 0xAE604E02, 0x00000002, 0x002EE203, 0xAE604E02, + 0x00000002, 0x402EE21C, 0xAE605202, 0x00000002, 0x002EE203, 0xAE605202, + 0x00000002, 0x402EE21C, 0xACA05902, 0x00000002, 0x002EE203, 0xACA05902, + 0x00000002, 0x402EE21D, 0xAE603C02, 0x00000002, + // Block 726, offset 0xb580 + 0x002EE223, 0xAE603C02, 0x00000002, 0x402EE21D, 0xAE604E02, 0x00000002, + 0x002EE223, 0xAE604E02, 0x00000002, 0x402EE21D, 0xAD806802, 0x00000002, + 0x002EE223, 0xAD806802, 0x00000002, 0x402EE21F, 0xAE603C02, 0x00000002, + 0x002EE263, 0xAE603C02, 0x00000002, 0x402EE21F, 0xAD806802, 0x00000002, + 0x002EE263, 0xAD806802, 0x00000002, 0x40306C1C, 0xAE604702, 0x00000002, + 0x00306C03, 0xAE604702, 0x00000002, 0x40306C1D, 0xAE604E02, 0x00000002, + 0x00306C23, 0xAE604E02, 0x00000002, 0x40306C1D, 0xAD806802, 0x00000002, + 0x00306C23, 0xAD806802, 0x00000002, 0x40306C1F, 0xAD806802, 0x00000002, + 0x00306C63, 0xAD806802, 0x00000004, 0x2D399283, 0x6CD2FC20, 0x6C5B8A20, + 0x6CCF3620, 0x00000003, 0x0003F483, 0x6C000220, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C003620, 0x4003F620, 0x00000003, + // Block 727, offset 0xb5c0 + 0x0003F483, 0x6C006220, 0x4003F620, 0x00000003, 0x0003F483, 0x6C007420, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C008820, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C00B620, 0x4003F620, 0x00000003, 0x0003F483, 0x6C00DC20, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C018420, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C028820, 0x4003F620, 0x00000003, 0x0003F483, 0x6C02D820, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C049620, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C049C20, 0x4003F620, 0x00000003, 0x0003F483, 0x6C049E20, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C04C620, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C04D020, 0x4003F620, 0x00000003, 0x0003F483, 0x6C05E620, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C079020, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C0BA020, 0x4003F620, 0x00000003, + // Block 728, offset 0xb600 + 0x0003F483, 0x6C0BC020, 0x4003F620, 0x00000003, 0x0003F483, 0x6C0E3E20, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C127420, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C147E20, 0x4003F620, 0x00000003, 0x0003F483, 0x6C148220, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C185220, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C2BB220, 0x4003F620, 0x00000003, 0x0003F483, 0x6C2CA220, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C2FD820, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C3CEE20, 0x4003F620, 0x00000003, 0x0003F483, 0x6C41DC20, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C741620, 0x4003F620, 0x00000003, + 0x0003F483, 0x6C791620, 0x4003F620, 0x00000003, 0x0003F483, 0x6C7DE020, + 0x4003F620, 0x00000003, 0x0003F483, 0x6C86F020, 0x4003F620, 0x00000003, + 0x0003F483, 0x6CA6A420, 0x4003F620, 0x00000003, + // Block 729, offset 0xb640 + 0x0003F483, 0x6D0F3820, 0x4003F620, 0x00000003, 0x0003F483, 0x6D2EFA20, + 0x4003F620, 0x00000003, 0x0004B083, 0x6C007420, 0x4004B220, 0x00000003, + 0x0004B083, 0x6C00DC20, 0x4004B220, 0x00000003, 0x0004B083, 0x6C093E20, + 0x4004B220, 0x00000003, 0x0004B083, 0x6C096620, 0x4004B220, 0x00000003, + 0x0004B083, 0x6C0FC420, 0x4004B220, 0x00000003, 0x0004B083, 0x6C555C20, + 0x4004B220, 0x00000003, 0x0004B083, 0x6C9AC020, 0x4004B220, 0x00000003, + 0x0004B083, 0x6CA4CC20, 0x4004B220, 0x00000003, 0x0004B083, 0x6CB9B020, + 0x4004B220, 0x00000003, 0x0029CE83, 0x4029CC20, 0x6C049620, 0x00000003, + 0x0029CE83, 0x4029CC20, 0x6C049C20, 0x00000003, 0x0029CE83, 0x4029CC20, + 0x6C555C20, 0x00000003, 0x0029CE83, 0x4029CE20, 0x6C049620, 0x00000003, + 0x0029CE83, 0x4029CE20, 0x6C049C20, 0x00000003, + // Block 730, offset 0xb680 + 0x0029CE83, 0x4029CE20, 0x6C555C20, 0x00000003, 0x0029CE83, 0x4029D020, + 0x6C049620, 0x00000003, 0x0029CE83, 0x4029D020, 0x6C049C20, 0x00000003, + 0x0029CE83, 0x4029D020, 0x6C555C20, 0x00000003, 0x0029CE83, 0x4029D220, + 0x6C049620, 0x00000003, 0x0029CE83, 0x4029D220, 0x6C555C20, 0x00000003, + 0x0029CE83, 0x4029D420, 0x6C049620, 0x00000003, 0x0029CE83, 0x4029D420, + 0x6C555C20, 0x00000003, 0x0029CE83, 0x4029D620, 0x6C049620, 0x00000003, + 0x0029CE83, 0x4029D620, 0x6C555C20, 0x00000003, 0x0029CE83, 0x4029D820, + 0x6C049620, 0x00000003, 0x0029CE83, 0x4029D820, 0x6C555C20, 0x00000003, + 0x0029CE83, 0x4029DA20, 0x6C049620, 0x00000003, 0x0029CE83, 0x4029DA20, + 0x6C555C20, 0x00000003, 0x0029CE83, 0x4029DC20, 0x6C049620, 0x00000003, + 0x0029CE83, 0x4029DC20, 0x6C555C20, 0x00000003, + // Block 731, offset 0xb6c0 + 0x0029CE83, 0x4029DE20, 0x6C049620, 0x00000003, 0x0029CE83, 0x4029DE20, + 0x6C555C20, 0x00000003, 0x0029D083, 0x4029CC20, 0x6C049620, 0x00000003, + 0x0029D083, 0x4029CC20, 0x6C555C20, 0x00000003, 0x0029D083, 0x4029CE20, + 0x6C049620, 0x00000003, 0x0029D083, 0x4029CE20, 0x6C555C20, 0x00000003, + 0x0029D083, 0x4029D020, 0x6C049620, 0x00000003, 0x0029D083, 0x4029D020, + 0x6C555C20, 0x00000003, 0x0029D083, 0x4029D220, 0x6C049620, 0x00000003, + 0x0029D083, 0x4029D220, 0x6C555C20, 0x00000003, 0x0029D083, 0x4029D420, + 0x6C049620, 0x00000003, 0x0029D083, 0x4029D420, 0x6C555C20, 0x00000003, + 0x0029D083, 0x4029D620, 0x6C049620, 0x00000003, 0x0029D083, 0x4029D820, + 0x6C049620, 0x00000003, 0x0029D083, 0x4029DA20, 0x6C049620, 0x00000003, + 0x0029D083, 0x4029DC20, 0x6C049620, 0x00000003, + // Block 732, offset 0xb700 + 0x0029D083, 0x4029DE20, 0x6C049620, 0x00000003, 0x0029D283, 0x4029CC20, + 0x6C049620, 0x00000003, 0x0029D283, 0x4029CE20, 0x6C049620, 0x00000004, + 0x2C741683, 0x6C111820, 0x6C0BD220, 0x6C3CEE20, +} + +// mainContractElem: 4120 entries, 16480 bytes +var mainContractElem = [4120]uint32{ + // Block 0, offset 0x0 + 0x402E2220, 0xE0000CFB, 0xE0000CFB, 0x002E2288, 0xE0000D01, 0xE0000D01, + 0x40332220, 0x40332A20, 0x40333220, 0x00332288, 0x00332A88, 0x00333288, + 0x40333A20, 0x40334220, 0x00333A88, 0x00334288, 0x40336220, 0x4033A220, + 0x4033A220, 0x00336288, 0x0033A288, 0x0033A288, 0x4033B220, 0x4033BA20, + 0x0033B288, 0x0033BA88, 0x4033CA20, 0x4033D420, 0x0033CA88, 0x0033D488, + 0x4033E420, 0x4033F220, 0x0033E488, 0x0033F288, 0x40341420, 0x40343E20, + 0x40342420, 0x00341488, 0x00343E88, 0x00342488, 0x40342C20, 0x40343620, + 0x00342C88, 0x00343688, 0x4034EE20, 0x4034F620, 0x0034EE88, 0x0034F688, + 0x4034FE20, 0x40350620, 0x0034FE88, 0x00350688, 0x40345020, 0x40356A20, + 0x40356A20, 0x00345088, 0x00356A88, 0x00356A88, 0x40357220, 0x40357A20, + 0x40358220, 0x40358A20, 0x00357288, 0x00357A88, + // Block 1, offset 0x40 + 0x00358288, 0x00358A88, 0x40361820, 0x40362220, 0x00361888, 0x00362288, + 0x40367E20, 0x40368620, 0x00367E88, 0x00368688, 0x4036A820, 0x4036B020, + 0x0036A888, 0x0036B088, 0x40371420, 0x40371C20, 0x00371488, 0x00371C88, + 0x40393820, 0x40391E20, 0x40392020, 0x40392820, 0x403A7420, 0x40392620, + 0x403A9020, 0x40393020, 0x4040F020, 0x4040F420, 0x4040F620, 0x40426E20, + 0x40427220, 0x40427020, 0x40427420, 0x40429020, 0x40429420, 0x4042D020, + 0x4042D620, 0x4042DA20, 0x4042D220, 0x4042D820, 0x40435E20, 0x40436220, + 0x4043E020, 0x4043E220, 0x4043F020, 0x4043F820, 0x4043F620, 0x4043F220, + 0x4043F420, 0x4043F620, 0x4043F820, 0x40448220, 0x40448820, 0x40448C20, + 0x40448420, 0x40448A20, 0x40451E20, 0x40452620, 0x40452020, 0x40452420, + 0x40452820, 0x40452420, 0x40452620, 0x40498420, + // Block 2, offset 0x80 + 0xE0001881, 0xE0001890, 0xE000189F, 0xE00018AE, 0xE00018BD, 0xE00018CC, + 0xE00018DB, 0xE00018EA, 0xE00018F9, 0xE0001908, 0xE0001917, 0xE0001926, + 0xE0001935, 0xE0001944, 0xE0001953, 0xE0001962, 0xE0001971, 0xE0001980, + 0xE000198F, 0xE000199E, 0xE00019AD, 0xE00019BC, 0xE00019CB, 0xE00019DA, + 0xE00019E9, 0xE00019F8, 0xE0001A07, 0xE0001A16, 0xE0001A25, 0xE0001A34, + 0xE0001A43, 0xE0001A52, 0xE0001A61, 0xE0001A70, 0xE0001A7F, 0xE0001A8E, + 0xE0001A9D, 0xE0001AAC, 0xE0001ABB, 0xE0001ACA, 0xE0001AD9, 0xE0001AE8, + 0xE0001AF7, 0xE0001B06, 0xE0001B15, 0xE0001B24, 0x40498620, 0xE0001884, + 0xE0001893, 0xE00018A2, 0xE00018B1, 0xE00018C0, 0xE00018CF, 0xE00018DE, + 0xE00018ED, 0xE00018FC, 0xE000190B, 0xE000191A, 0xE0001929, 0xE0001938, + 0xE0001947, 0xE0001956, 0xE0001965, 0xE0001974, + // Block 3, offset 0xc0 + 0xE0001983, 0xE0001992, 0xE00019A1, 0xE00019B0, 0xE00019BF, 0xE00019CE, + 0xE00019DD, 0xE00019EC, 0xE00019FB, 0xE0001A0A, 0xE0001A19, 0xE0001A28, + 0xE0001A37, 0xE0001A46, 0xE0001A55, 0xE0001A64, 0xE0001A73, 0xE0001A82, + 0xE0001A91, 0xE0001AA0, 0xE0001AAF, 0xE0001ABE, 0xE0001ACD, 0xE0001ADC, + 0xE0001AEB, 0xE0001AFA, 0xE0001B09, 0xE0001B18, 0xE0001B27, 0x40498820, + 0xE0001887, 0xE0001896, 0xE00018A5, 0xE00018B4, 0xE00018C3, 0xE00018D2, + 0xE00018E1, 0xE00018F0, 0xE00018FF, 0xE000190E, 0xE000191D, 0xE000192C, + 0xE000193B, 0xE000194A, 0xE0001959, 0xE0001968, 0xE0001977, 0xE0001986, + 0xE0001995, 0xE00019A4, 0xE00019B3, 0xE00019C2, 0xE00019D1, 0xE00019E0, + 0xE00019EF, 0xE00019FE, 0xE0001A0D, 0xE0001A1C, 0xE0001A2B, 0xE0001A3A, + 0xE0001A49, 0xE0001A58, 0xE0001A67, 0xE0001A76, + // Block 4, offset 0x100 + 0xE0001A85, 0xE0001A94, 0xE0001AA3, 0xE0001AB2, 0xE0001AC1, 0xE0001AD0, + 0xE0001ADF, 0xE0001AEE, 0xE0001AFD, 0xE0001B0C, 0xE0001B1B, 0xE0001B2A, + 0x40498A20, 0xE000188A, 0xE0001899, 0xE00018A8, 0xE00018B7, 0xE00018C6, + 0xE00018D5, 0xE00018E4, 0xE00018F3, 0xE0001902, 0xE0001911, 0xE0001920, + 0xE000192F, 0xE000193E, 0xE000194D, 0xE000195C, 0xE000196B, 0xE000197A, + 0xE0001989, 0xE0001998, 0xE00019A7, 0xE00019B6, 0xE00019C5, 0xE00019D4, + 0xE00019E3, 0xE00019F2, 0xE0001A01, 0xE0001A10, 0xE0001A1F, 0xE0001A2E, + 0xE0001A3D, 0xE0001A4C, 0xE0001A5B, 0xE0001A6A, 0xE0001A79, 0xE0001A88, + 0xE0001A97, 0xE0001AA6, 0xE0001AB5, 0xE0001AC4, 0xE0001AD3, 0xE0001AE2, + 0xE0001AF1, 0xE0001B00, 0xE0001B0F, 0xE0001B1E, 0xE0001B2D, 0x40498C20, + 0xE000188D, 0xE000189C, 0xE00018AB, 0xE00018BA, + // Block 5, offset 0x140 + 0xE00018C9, 0xE00018D8, 0xE00018E7, 0xE00018F6, 0xE0001905, 0xE0001914, + 0xE0001923, 0xE0001932, 0xE0001941, 0xE0001950, 0xE000195F, 0xE000196E, + 0xE000197D, 0xE000198C, 0xE000199B, 0xE00019AA, 0xE00019B9, 0xE00019C8, + 0xE00019D7, 0xE00019E6, 0xE00019F5, 0xE0001A04, 0xE0001A13, 0xE0001A22, + 0xE0001A31, 0xE0001A40, 0xE0001A4F, 0xE0001A5E, 0xE0001A6D, 0xE0001A7C, + 0xE0001A8B, 0xE0001A9A, 0xE0001AA9, 0xE0001AB8, 0xE0001AC7, 0xE0001AD6, + 0xE0001AE5, 0xE0001AF4, 0xE0001B03, 0xE0001B12, 0xE0001B21, 0xE0001B30, + 0xA0010502, 0x40497420, 0x4049E620, 0xE0001B42, 0xE0001B51, 0xE0001B60, + 0xE0001B6F, 0xE0001B7E, 0xE0001B9C, 0xE0001BBA, 0xE0001BC9, 0xE0001BD8, + 0xE0001BE7, 0xE0001BF6, 0xE0001C05, 0xE0001C14, 0xE0001C23, 0xE0001C32, + 0xE0001C41, 0xE0001C50, 0xE0001C5F, 0xE0001C6E, + // Block 6, offset 0x180 + 0xE0001C7D, 0xE0001C8C, 0xE0001C9B, 0xE0001CAA, 0xE0001B8D, 0xE0001CE1, + 0xE0001CF0, 0xE0001CFF, 0xE0001CB9, 0xE0001CCD, 0xE0001B33, 0xE0001BAB, + 0x4049E820, 0xE0001B45, 0xE0001B54, 0xE0001B63, 0xE0001B72, 0xE0001B81, + 0xE0001B9F, 0xE0001BBD, 0xE0001BCC, 0xE0001BDB, 0xE0001BEA, 0xE0001BF9, + 0xE0001C08, 0xE0001C17, 0xE0001C26, 0xE0001C35, 0xE0001C44, 0xE0001C53, + 0xE0001C62, 0xE0001C71, 0xE0001C80, 0xE0001C8F, 0xE0001C9E, 0xE0001CAD, + 0xE0001B90, 0xE0001CE4, 0xE0001CF3, 0xE0001D02, 0xE0001CBD, 0xE0001CD1, + 0xE0001B36, 0xE0001BAE, 0x4049EA20, 0xE0001B48, 0xE0001B57, 0xE0001B66, + 0xE0001B75, 0xE0001B84, 0xE0001BA2, 0xE0001BC0, 0xE0001BCF, 0xE0001BDE, + 0xE0001BED, 0xE0001BFC, 0xE0001C0B, 0xE0001C1A, 0xE0001C29, 0xE0001C38, + 0xE0001C47, 0xE0001C56, 0xE0001C65, 0xE0001C74, + // Block 7, offset 0x1c0 + 0xE0001C83, 0xE0001C92, 0xE0001CA1, 0xE0001CB0, 0xE0001B93, 0xE0001CE7, + 0xE0001CF6, 0xE0001D05, 0xE0001CC1, 0xE0001CD5, 0xE0001B39, 0xE0001BB1, + 0x4049EC20, 0xE0001B4B, 0xE0001B5A, 0xE0001B69, 0xE0001B78, 0xE0001B87, + 0xE0001BA5, 0xE0001BC3, 0xE0001BD2, 0xE0001BE1, 0xE0001BF0, 0xE0001BFF, + 0xE0001C0E, 0xE0001C1D, 0xE0001C2C, 0xE0001C3B, 0xE0001C4A, 0xE0001C59, + 0xE0001C68, 0xE0001C77, 0xE0001C86, 0xE0001C95, 0xE0001CA4, 0xE0001CB3, + 0xE0001B96, 0xE0001CEA, 0xE0001CF9, 0xE0001D08, 0xE0001CC5, 0xE0001CD9, + 0xE0001B3C, 0xE0001BB4, 0x4049EE20, 0xE0001B4E, 0xE0001B5D, 0xE0001B6C, + 0xE0001B7B, 0xE0001B8A, 0xE0001BA8, 0xE0001BC6, 0xE0001BD5, 0xE0001BE4, + 0xE0001BF3, 0xE0001C02, 0xE0001C11, 0xE0001C20, 0xE0001C2F, 0xE0001C3E, + 0xE0001C4D, 0xE0001C5C, 0xE0001C6B, 0xE0001C7A, + // Block 8, offset 0x200 + 0xE0001C89, 0xE0001C98, 0xE0001CA7, 0xE0001CB6, 0xE0001B99, 0xE0001CED, + 0xE0001CFC, 0xE0001D0B, 0xE0001CC9, 0xE0001CDD, 0xE0001B3F, 0xE0001BB7, + 0xA0010B02, 0x4049D220, 0x404A5A20, 0xE0001D0E, 0xE0001D1D, 0xE0001D2C, + 0xE0001D3B, 0xE0001D4A, 0xE0001D59, 0xE0001D68, 0xE0001D77, 0xE0001D86, + 0xE0001D95, 0xE0001DA4, 0xE0001DB3, 0xE0001DC2, 0xE0001DD1, 0xE0001DE0, + 0xE0001DEF, 0xE0001DFE, 0xE0001E0D, 0xE0001E1C, 0xE0001E2B, 0xE0001E3A, + 0xE0001E49, 0xE0001E58, 0xE0001E67, 0xE0001E76, 0xE0001E85, 0xE0001E94, + 0xE0001EA3, 0xE0001EB2, 0xE0001EC1, 0xE0001ED0, 0xE0001EDF, 0xE0001EEE, + 0xE0001EFD, 0xE0001F0C, 0xE0001F1B, 0xE0001F2A, 0xE0001F39, 0xE0001F48, + 0xE0001F57, 0xE0001F66, 0xE0001F75, 0xE0001F84, 0xE0001F93, 0xE0001FA2, + 0xE0001FB1, 0xE0001FC0, 0xE0001FCF, 0x404A5C20, + // Block 9, offset 0x240 + 0xE0001D11, 0xE0001D20, 0xE0001D2F, 0xE0001D3E, 0xE0001D4D, 0xE0001D5C, + 0xE0001D6B, 0xE0001D7A, 0xE0001D89, 0xE0001D98, 0xE0001DA7, 0xE0001DB6, + 0xE0001DC5, 0xE0001DD4, 0xE0001DE3, 0xE0001DF2, 0xE0001E01, 0xE0001E10, + 0xE0001E1F, 0xE0001E2E, 0xE0001E3D, 0xE0001E4C, 0xE0001E5B, 0xE0001E6A, + 0xE0001E79, 0xE0001E88, 0xE0001E97, 0xE0001EA6, 0xE0001EB5, 0xE0001EC4, + 0xE0001ED3, 0xE0001EE2, 0xE0001EF1, 0xE0001F00, 0xE0001F0F, 0xE0001F1E, + 0xE0001F2D, 0xE0001F3C, 0xE0001F4B, 0xE0001F5A, 0xE0001F69, 0xE0001F78, + 0xE0001F87, 0xE0001F96, 0xE0001FA5, 0xE0001FB4, 0xE0001FC3, 0xE0001FD2, + 0x404A6220, 0xE0001D14, 0xE0001D23, 0xE0001D32, 0xE0001D41, 0xE0001D50, + 0xE0001D5F, 0xE0001D6E, 0xE0001D7D, 0xE0001D8C, 0xE0001D9B, 0xE0001DAA, + 0xE0001DB9, 0xE0001DC8, 0xE0001DD7, 0xE0001DE6, + // Block 10, offset 0x280 + 0xE0001DF5, 0xE0001E04, 0xE0001E13, 0xE0001E22, 0xE0001E31, 0xE0001E40, + 0xE0001E4F, 0xE0001E5E, 0xE0001E6D, 0xE0001E7C, 0xE0001E8B, 0xE0001E9A, + 0xE0001EA9, 0xE0001EB8, 0xE0001EC7, 0xE0001ED6, 0xE0001EE5, 0xE0001EF4, + 0xE0001F03, 0xE0001F12, 0xE0001F21, 0xE0001F30, 0xE0001F3F, 0xE0001F4E, + 0xE0001F5D, 0xE0001F6C, 0xE0001F7B, 0xE0001F8A, 0xE0001F99, 0xE0001FA8, + 0xE0001FB7, 0xE0001FC6, 0xE0001FD5, 0x404A6620, 0xE0001D17, 0xE0001D26, + 0xE0001D35, 0xE0001D44, 0xE0001D53, 0xE0001D62, 0xE0001D71, 0xE0001D80, + 0xE0001D8F, 0xE0001D9E, 0xE0001DAD, 0xE0001DBC, 0xE0001DCB, 0xE0001DDA, + 0xE0001DE9, 0xE0001DF8, 0xE0001E07, 0xE0001E16, 0xE0001E25, 0xE0001E34, + 0xE0001E43, 0xE0001E52, 0xE0001E61, 0xE0001E70, 0xE0001E7F, 0xE0001E8E, + 0xE0001E9D, 0xE0001EAC, 0xE0001EBB, 0xE0001ECA, + // Block 11, offset 0x2c0 + 0xE0001ED9, 0xE0001EE8, 0xE0001EF7, 0xE0001F06, 0xE0001F15, 0xE0001F24, + 0xE0001F33, 0xE0001F42, 0xE0001F51, 0xE0001F60, 0xE0001F6F, 0xE0001F7E, + 0xE0001F8D, 0xE0001F9C, 0xE0001FAB, 0xE0001FBA, 0xE0001FC9, 0xE0001FD8, + 0x404A6820, 0xE0001D1A, 0xE0001D29, 0xE0001D38, 0xE0001D47, 0xE0001D56, + 0xE0001D65, 0xE0001D74, 0xE0001D83, 0xE0001D92, 0xE0001DA1, 0xE0001DB0, + 0xE0001DBF, 0xE0001DCE, 0xE0001DDD, 0xE0001DEC, 0xE0001DFB, 0xE0001E0A, + 0xE0001E19, 0xE0001E28, 0xE0001E37, 0xE0001E46, 0xE0001E55, 0xE0001E64, + 0xE0001E73, 0xE0001E82, 0xE0001E91, 0xE0001EA0, 0xE0001EAF, 0xE0001EBE, + 0xE0001ECD, 0xE0001EDC, 0xE0001EEB, 0xE0001EFA, 0xE0001F09, 0xE0001F18, + 0xE0001F27, 0xE0001F36, 0xE0001F45, 0xE0001F54, 0xE0001F63, 0xE0001F72, + 0xE0001F81, 0xE0001F90, 0xE0001F9F, 0xE0001FAE, + // Block 12, offset 0x300 + 0xE0001FBD, 0xE0001FCC, 0xE0001FDB, 0x404AEA20, 0xE000200E, 0xE0002011, + 0x404B2620, 0x404B2420, 0x404B2620, 0x404AF020, 0xE0002014, 0xE0002017, + 0x404B2A20, 0x404B2820, 0x404B2A20, 0x8281258B, 0x8281258D, 0x82812591, + 0x8281258F, 0x404ECA20, 0x404ECC20, 0x404F9C20, 0x404F9620, 0x404F9E20, + 0x404F9820, 0x40522620, 0x40522820, 0x40522A20, 0x40522C20, 0x40522E20, + 0x40523020, 0x40523220, 0x40523420, 0x40523620, 0x40523820, 0x40523E20, + 0x40524020, 0x40529C20, 0x40529E20, 0x4052A020, 0x4052A220, 0x4052A420, + 0x4052A820, 0x4052A620, 0x4052AA20, 0x4052AC20, 0x4052AE20, 0x4040B620, + 0x4040B420, 0x40409820, 0x4040DC20, 0x402C3A20, 0x402C3C20, 0x002C3A88, + 0x002C3C83, 0x402D2220, 0x402D2420, 0x002D2288, 0x002D2483, 0x002D9883, + 0x002D9A83, 0x402EE220, 0x402EE420, 0x002EE288, + // Block 13, offset 0x340 + 0x002EE483, 0x402FE620, 0x402FE820, 0x002FE688, 0x002FE883, 0x40306C20, + 0x40306E20, 0x00306C88, 0x00306E83, 0x4033B220, 0x4033BA20, 0x4033B420, + 0x0033B288, 0x0033BA88, 0x0033B483, 0x402E2220, 0x402E2221, 0x402E2221, + 0x002E2288, 0x002E22A3, 0x002E22A3, 0x402C3A20, 0x402C3C20, 0x002D6A83, + 0x402D6A20, 0x002C3A88, 0x002C3C83, 0x002D6A85, 0x002D6A84, 0x402F7A20, + 0x402F7C20, 0x002F7A88, 0x002F7C83, 0x40312A20, 0x40312C20, 0x00312A88, + 0x00312C83, 0x002C3A88, 0x002C3C84, 0x002C3C83, 0x402C6220, 0x402C6420, + 0x002C6288, 0x002C6484, 0x002C6483, 0x402D0820, 0x402D0A20, 0x002D0888, + 0x002D0A84, 0x002D0A83, 0x402E9E20, 0x402D2420, 0x002E9E88, 0x002D2484, + 0x002D2483, 0x402E2220, 0xE0000CFB, 0xE0000CFB, 0x402E2420, 0x002E2288, + 0xE0000D01, 0xE0000D01, 0x002E2484, 0x002E2483, + // Block 14, offset 0x380 + 0x402F2C20, 0x402F2E20, 0x002F2C88, 0x002F2E84, 0x002F2E83, 0x002F7A88, + 0x002F7C84, 0x002F7C83, 0x40302C20, 0x40302E20, 0x00302C88, 0x00302E84, + 0x00302E83, 0x40306C20, 0x40310021, 0x40310022, 0x00306C88, 0x003100A3, + 0x003100C3, 0x402BDE20, 0x40320C21, 0x40321020, 0x00321084, 0x002BDE88, + 0x00320CA3, 0x00321083, 0x00321086, 0x00321085, 0x402C9820, 0x40320C22, + 0x002C9888, 0x00320CC3, 0x402EE220, 0x40320E21, 0x40320E22, 0x002EE288, + 0x00320EA3, 0x00320EC3, 0x402BDE20, 0xE00029B8, 0x002BDE88, 0xE00029BB, + 0x402EE220, 0xE00029C6, 0x002EE288, 0xE00029C9, 0x40306C20, 0xE00029DC, + 0x00306C88, 0xE00029DF, 0xAE611302, 0x404A7621, 0x404A7C21, 0x404AB020, + 0x404ACC20, 0x404ACE20, 0x404AD020, 0x404AD220, 0x404AD420, 0x404ADA20, + 0x404A8220, 0x404A8420, 0xE0002A26, 0xE0002A2B, + // Block 15, offset 0x3c0 + 0x404A8620, 0x404A8820, 0x404A8A20, 0x404A8C20, 0x404A8E20, 0x404A9020, + 0x404A9220, 0x404A9420, 0x404A9620, 0x404A9820, 0x404A9A20, 0x404A9C20, + 0x404A8620, 0x404A8820, 0xE0002A30, 0xE0002A35, 0x404A8A20, 0x404A8C20, + 0x404A8E20, 0x404A9020, 0x404ABA20, 0x404ABC20, 0xE0002A3A, 0xE0002A3F, + 0x404ABE20, 0x404AC020, 0x404AC220, 0x404AC420, 0x404AC620, 0x404AC820, + 0x404ACA20, 0x404AD620, 0x404AD820, 0x404AC220, 0x404AC420, 0xE0002A44, + 0xE0002A49, 0x404AC620, 0x404AC820, 0x404ACA20, 0x404ACC20, 0x404ACE20, + 0x404AD020, 0x404AD220, 0x404AD420, 0x404AD620, 0x404AD820, 0x404ADA20, + 0x404ADC20, 0x404AC620, 0x404AC820, 0xE0002A4E, 0xE0002A53, 0x404ACA20, + 0x404ACC20, 0x404ACE20, 0x404AD020, 0x404AD220, 0x404AD420, 0x404AD620, + 0x404AD820, 0x404ADC20, 0x404A7820, 0x404AC020, + // Block 16, offset 0x400 + 0x404A9E20, 0xE0002A5E, 0xE0002A63, 0x404AA020, 0x404AA220, 0x404AA420, + 0x404AA620, 0x404AA820, 0x404AAA20, 0x404AAC20, 0x004AA283, 0x404AAE20, + 0x404AB020, 0x404AB220, 0x404ACC20, 0xE0002A68, 0xE0002A6D, 0x404ACE20, + 0x404AD020, 0x404AD220, 0x404AD420, 0x404AD620, 0x404AD820, 0x404ADA20, + 0x404ADC20, 0x004ACE83, 0x404A8220, 0x404AE820, 0x404AA420, 0x404A9A20, + 0x404A9E20, 0x404AB420, 0x404B1420, 0x404AE420, 0x404AD220, 0x404AD820, + 0x404AEA20, 0x404A9020, 0x404AB620, 0x404B1620, 0x404B1620, 0x404B1820, + 0xE0002A72, 0xE0002A77, 0x404B1A20, 0x404B1C20, 0x404B1E20, 0x404B2020, + 0x404B2220, 0x404B2420, 0x404B2620, 0x404B2820, 0x404B2A20, 0x004B1E83, + 0x404A8420, 0x404AEA20, 0x404AA620, 0x404AA020, 0x404AB820, 0x404B1820, + 0x404AE620, 0x404AD420, 0x404B2C20, 0x404B2E20, + // Block 17, offset 0x440 + 0x404B3020, 0x404A7A20, 0x404A8C20, 0x404AAC20, 0x404ACC20, 0x404ADC20, + 0x404AE020, 0x404AF620, 0x404AE820, 0x404A7C20, 0x404AE220, 0x404A9E20, + 0x404A9620, 0x404A9A20, 0x404AAE20, 0x404B0E20, 0x404AE020, 0x404AFC20, + 0x404ADE20, 0x404ACE20, 0x404AD620, 0x404AEE20, 0x404A7E20, 0x404AE420, + 0x404AA020, 0x404A8E20, 0x404A9820, 0x404AB020, 0x404B1020, 0x404ADA20, + 0x404AFE20, 0x404B0020, 0x404AC420, 0x404AB420, 0x404AB620, 0x404AB820, + 0x404ABA20, 0x404ABC20, 0x404ABE20, 0x404AC020, 0x404A9220, 0xE0002A7F, + 0xE0002A84, 0x404A9420, 0x404A9620, 0x404A9820, 0x404A9A20, 0x404A9C20, + 0x404ADE20, 0x404AE020, 0xE0002A89, 0xE0002A8E, 0x404AE220, 0x404AE420, + 0x404AE620, 0x404AE820, 0x404AEA20, 0x404AEC20, 0x404ACA20, 0x404ACC20, + 0xE0002A93, 0xE0002A98, 0x404ACE20, 0x404AD020, + // Block 18, offset 0x480 + 0x404AD220, 0x404AD420, 0x404AD620, 0x404AD820, 0x404ADA20, 0x404ADC20, + 0x404ADE20, 0x004AD283, 0x404A7E20, 0x404A8E20, 0x404A9220, 0x404A9820, + 0x404AAE20, 0x404ACE20, 0x404AD220, 0x404AFA20, 0x404A8020, 0x404AE620, + 0x404AA220, 0x404A9C20, 0x404AB220, 0x404B1220, 0x404AE220, 0x404ADC20, + 0x404B0020, 0x404AE020, 0x404AD020, 0x404AE020, 0x404AC220, 0x404AC420, + 0xE0002AA0, 0xE0002AA5, 0x404AC620, 0x404AC820, 0x404ACA20, 0x404ACC20, + 0x404ACE20, 0x404AD020, 0x404AD220, 0x404AD420, 0x404AD620, 0x404AD820, + 0x404ADA20, 0x404ADC20, 0x004ACC83, 0x404ADE20, 0x404AE020, 0x404AEE20, + 0x404AF020, 0xE0002AAA, 0xE0002AAF, 0x404AF220, 0x404AF420, 0x404AF620, + 0x404AF820, 0x404AFA20, 0x404AFC20, 0x404AFE20, 0x404B0020, 0x404B0220, + 0x404B0420, 0x404B0620, 0x404B0820, 0x404B0A20, + // Block 19, offset 0x4c0 + 0x004AF883, 0x404B0C20, 0x404ADE20, 0x404AE020, 0xE0002AB4, 0xE0002AB9, + 0x404AE220, 0x404AE420, 0x404AE620, 0x404AE820, 0x404AEA20, 0x404AEC20, + 0x404AEE20, 0x404AF020, 0x404AF220, 0x404AF420, 0x404AF620, 0x004AE883, + 0x404AF820, 0x404AFA20, 0x404A8020, 0x404A9020, 0x404A9420, 0x404AB020, + 0x404ABE20, 0x404AD020, 0x404AD420, 0x404A8020, 0x404AB220, 0x404AB420, + 0xE0002A05, 0xE0002A0A, 0x404AB620, 0x404AB820, 0x404ABA20, 0x404ABC20, + 0x404ABE20, 0x404AC020, 0x404AC220, 0x404AC420, 0x404AC620, 0x404AC820, + 0x404ACA20, 0x004ABA83, 0x404AB620, 0x404AB820, 0xE0002A0F, 0xE0002A14, + 0x404ABA20, 0x404ABC20, 0x404ABE20, 0x404AC020, 0x404AC220, 0x404AC420, + 0x404AC620, 0x404AC820, 0x004ABE83, 0x404AFC20, 0x404AFE20, 0xE0002A19, + 0xE0002A1E, 0x404B0020, 0x404B0220, 0x404B0420, + // Block 20, offset 0x500 + 0x404B0620, 0x404B0820, 0x404B0A20, 0x404B0C20, 0x404B0E20, 0x404B1020, + 0x404B1220, 0x404B1420, 0x404A8A20, 0x404A9620, 0x404AAA20, 0x404ACA20, + 0x404ADA20, 0x404ADE20, 0x404AE620, 0x404AF420, 0xAE611602, 0x404A9421, + 0xAE611402, 0x404AB821, 0x404ABC21, 0x828225B1, 0xE000200E, 0xE0002011, + 0x404B2620, 0xE0002ABE, 0xE000200E, 0xE0002011, 0x404B2420, 0x404B2620, + 0x828225B2, 0xE0002014, 0xE0002017, 0x404B2A20, 0xE0002AC1, 0xE0002014, + 0xE0002017, 0x404B2820, 0x404B2A20, 0xAE610F02, 0x8281258D, 0x82812591, + 0x8281258F, 0x002D2288, 0x002D2484, 0x002D2483, 0x402DFE20, 0x402E0020, + 0x002DFE88, 0x002E0084, 0x002E0083, 0x402E9E20, 0x402EA020, 0x002E9E88, + 0x002EA084, 0x002EA083, 0x402C7820, 0xE0000CFB, 0xE0000CFB, 0x402C3820, + 0xE0000D01, 0xE0000D01, 0x402D6820, 0x402D6A20, + // Block 21, offset 0x540 + 0x002D6888, 0x002D6A83, 0x402DCC20, 0x402DCE20, 0x002DCC88, 0x002DCE83, + 0x002E9E88, 0x002EA083, 0x402FE620, 0x40302620, 0x002FE688, 0x00302683, + 0x40302820, 0x40302A20, 0x00302883, 0x00302A83, 0x402EE220, 0x4030EE20, + 0x4030F220, 0x002EE288, 0x0030EE83, 0x0030F283, 0x402BDE20, 0x4030F020, + 0x002BDE88, 0x0030F083, 0x40306C20, 0x4030F420, 0x00306C88, 0x0030F483, + 0x40393820, 0x40393620, 0x40393A21, 0x40393A23, 0x403A7420, 0x40393A25, + 0x403A9220, 0x40393A26, 0x403A9221, 0x00393B43, 0x403A9223, 0x00393B44, + 0x403A8821, 0x403A8825, 0x40306C20, 0x40310021, 0x00306C88, 0x003100A3, + 0x402BDE20, 0x40320E20, 0x40320C20, 0x002BDE88, 0x00320E83, 0x00320C83, + 0x402EE220, 0x40321020, 0x002EE288, 0x00321083, 0x402EE220, 0x40321023, + 0x40321020, 0x40321022, 0x002EE288, 0x003210E3, + // Block 22, offset 0x580 + 0x00321083, 0x003210C3, 0x402E9E20, 0x402EA020, 0x402EA220, 0x002E9E88, + 0x002EA083, 0x002EA284, 0x002EA283, 0x002FE688, 0x002FE884, 0x002FE883, + 0x4031DE20, 0x00310286, 0x00310283, 0x4003D220, 0x00310287, 0x00310284, + 0x402BEC20, 0xE0000CFB, 0xE0000CFB, 0x002BEC83, 0xE0000D01, 0xE0000D01, + 0x402C3A20, 0x402C3E20, 0x402C3C20, 0x002C3A88, 0x002C3E83, 0x002C3C83, + 0x402C6220, 0x402C6420, 0x402C6420, 0x002C6288, 0x002C6486, 0x002C6484, + 0x002C6486, 0x002C6484, 0x002E2288, 0xE0000D01, 0xE0000D01, 0x002E2486, + 0x002E2484, 0x002E9E88, 0x002EA086, 0x002EA084, 0x402C3A20, 0xE0003C42, + 0x402C3C20, 0x002C3A88, 0xE0003C48, 0xE0003C45, 0x002C3C86, 0x002C3C84, + 0x402C6220, 0xE0003C54, 0xE0003C4B, 0x402C6620, 0x402C6420, 0x002C6288, + 0xE0003C5A, 0xE0003C57, 0xE0003C51, 0x002C6686, + // Block 23, offset 0x5c0 + 0xE0003C4E, 0x002C6684, 0x002C6486, 0x002C6484, 0x402D2220, 0xE0003C5D, + 0x402D2420, 0x002D2288, 0xE0003C63, 0xE0003C60, 0x002D2486, 0x002D2484, + 0x402E2220, 0xE0003C66, 0xE0000CFB, 0xE0000CFB, 0x402E2420, 0x002E2288, + 0xE0003C6C, 0xE0003C69, 0xE0000D01, 0xE0000D01, 0x002E2486, 0x002E2484, + 0x402E9E20, 0xE0003C6F, 0x402EA020, 0x002E9E88, 0xE0003C75, 0xE0003C72, + 0x002EA086, 0x002EA084, 0x402EE220, 0x402EE420, 0x402EE421, 0x002EE288, + 0x002EE483, 0x002EE4A3, 0x402FE620, 0xE0003C78, 0x402FE820, 0x002FE688, + 0xE0003C7E, 0xE0003C7B, 0x002FE886, 0x002FE884, 0x40302C20, 0xE0003C81, + 0x40302E20, 0x00302C88, 0xE0003C87, 0xE0003C84, 0x00302E86, 0x00302E84, + 0x40306C20, 0x40306E20, 0x40306E21, 0x00306C88, 0x00306E83, 0x00306EA3, + 0x40312A20, 0xE0003C8A, 0x40312C20, 0x00312A88, + // Block 24, offset 0x600 + 0xE0003C90, 0xE0003C8D, 0x00312C86, 0x00312C84, 0x00384A88, 0x00388A83, + 0x402C3A20, 0x402C0C20, 0x002C3A88, 0x002C0C84, 0x002C0C83, 0x402D2220, + 0x402D2420, 0x402D2620, 0x402D2820, 0x002D2288, 0x002D2484, 0x002D2684, + 0x002D2884, 0x002D2483, 0x002D2683, 0x002D2883, 0x402D9A20, 0x402D9C20, + 0x002D9A88, 0x002D9C83, 0x402DFE20, 0x402E0020, 0x402E0220, 0x002DFE88, + 0x002E0084, 0x002E0284, 0x002E0083, 0x002E0283, 0x402E9E20, 0x402EA020, + 0x402EA220, 0x402EA420, 0x002E9E88, 0x002EA083, 0x002EA284, 0x002EA484, + 0x002EA283, 0x002EA483, 0x402BDE20, 0x402C0820, 0x40320C21, 0x40321020, + 0x002BDE88, 0x002C0883, 0x00320CA3, 0x00321083, 0x402C9820, 0x402D0620, + 0x002C9888, 0x002D0683, 0x402D9A20, 0x402DCA20, 0x002D9A88, 0x002DCA83, + 0x402EE220, 0x402F2A20, 0x40320E20, 0x002EE288, + // Block 25, offset 0x640 + 0x002F2A83, 0x00320E83, 0x40306C20, 0x4030BC20, 0x00306C88, 0x0030BC83, + 0x40310020, 0x40312820, 0x00310088, 0x00312883, 0x0065768F, 0xE0003D1D, + 0xE0003D17, 0x0065768F, 0xE0003D17, 0xE0003D1D, 0x00657691, 0xE0003D20, + 0xE0003D1A, 0x00657691, 0xE0003D1A, 0xE0003D20, 0x0065828F, 0xE0003E9B, + 0xE0003D23, 0x0065828F, 0xE0003D23, 0xE0003E9B, 0x00658291, 0xE0003EA1, + 0xE0003D29, 0xE0003E9E, 0xE0003D26, 0x00658291, 0xE0003D29, 0xE0003EA1, + 0xE0003D26, 0xE0003E9E, 0x00658291, 0xE0003D26, 0xE0003E9E, 0xE000216D, + 0xE0003EA1, 0xE0003D29, 0xE000216D, 0xE0003D29, 0xE0003EA1, 0x00658C91, + 0xE0003EE4, 0xE0003EE0, 0xE0003D30, 0xE0003EE0, 0xE0003EDD, 0xE0003EE0, + 0xE0003D2D, 0x00658C91, 0xE0003EE4, 0xE0003D30, 0xE0003EE0, 0xE0003EE0, + 0xE0003D2D, 0xE0003EDD, 0xE0003EE0, 0x00658C91, + // Block 26, offset 0x680 + 0xE0003EE0, 0xE0003D2D, 0xE0003EDD, 0xE0003EE0, 0xE00021F2, 0xE0003EE0, + 0xE0003EE4, 0xE0003D30, 0xE00021F2, 0xE0003D30, 0xE0003EE0, 0xE0003EE4, + 0x00659691, 0xE0003F2E, 0xE0003F2A, 0xE0003D37, 0xE0003F2A, 0xE0003F27, + 0xE0003F2A, 0xE0003D34, 0x00659691, 0xE0003F2E, 0xE0003D37, 0xE0003F2A, + 0xE0003F2A, 0xE0003D34, 0xE0003F27, 0xE0003F2A, 0x00659691, 0xE0003F2A, + 0xE0003D34, 0xE0003F27, 0xE0003F2A, 0xE000222C, 0xE0003F2A, 0xE0003F2E, + 0xE0003D37, 0xE000222C, 0xE0003D37, 0xE0003F2A, 0xE0003F2E, 0x0065A091, + 0xE0003F71, 0xE0003D3B, 0x0065A091, 0xE0003D3B, 0xE0003F71, 0x0065AA8F, + 0xE0003F89, 0xE0003D3E, 0xE0003F83, 0xE0003F89, 0x0065AA91, 0xE0003F91, + 0xE0003F9A, 0xE0003F8D, 0xE0003D44, 0xE0003F96, 0xE0003D48, 0xE0003F8D, + 0xE0003F86, 0xE0003F8D, 0xE0003D41, 0x0065AA91, + // Block 27, offset 0x6c0 + 0xE0003F91, 0xE0003F9A, 0xE0003D44, 0xE0003F8D, 0xE0003D48, 0xE0003F96, + 0xE0003F8D, 0xE0003D41, 0xE0003F86, 0xE0003F8D, 0x0065AA91, 0xE0003F8D, + 0xE0003D41, 0xE0003F86, 0xE0003F8D, 0xE000225B, 0xE0003F8D, 0xE0003F91, + 0xE0003D44, 0xE000225B, 0xE0003D44, 0xE0003F8D, 0xE0003F91, 0xE0002261, + 0xE0003F96, 0xE0003F9A, 0xE0003D48, 0xE0002261, 0xE0003D48, 0xE0003F96, + 0xE0003F9A, 0x0065B491, 0xE000400F, 0xE0003D4C, 0x0065B491, 0xE0003D4C, + 0xE000400F, 0x0065BE8F, 0xE0004021, 0xE0003D4F, 0x0065BE8F, 0xE0003D4F, + 0xE0004021, 0x0065BE91, 0xE0004024, 0xE0003D52, 0x0065BE91, 0xE0003D52, + 0xE0004024, 0x0065C68F, 0xE0003D55, 0xE0004036, 0x0065C691, 0xE0004039, + 0xE0003D58, 0x0065C691, 0xE0003D58, 0xE0004039, 0x0065D08F, 0xE000405A, + 0xE0004054, 0xE000405A, 0xE0003D5B, 0x0065D08F, + // Block 28, offset 0x700 + 0xE000405A, 0xE0003D5B, 0xE0004054, 0xE000405A, 0x0065D091, 0xE000405E, + 0xE0004057, 0xE000405E, 0xE0003D5E, 0x0065D091, 0xE0004062, 0xE0003D61, + 0xE000405E, 0xE000405E, 0xE0003D5E, 0xE0004057, 0xE000405E, 0x0065D091, + 0xE000405E, 0xE0003D5E, 0xE0004057, 0xE000405E, 0xE000236A, 0xE0003D61, + 0xE000405E, 0xE0004062, 0x0065788F, 0xE0003D6B, 0xE0003D65, 0x0065788F, + 0xE0003D65, 0xE0003D6B, 0x00657891, 0xE0003D6E, 0xE0003D68, 0x00657891, + 0xE0003D68, 0xE0003D6E, 0x00658491, 0xE0003EAC, 0xE0003EA8, 0xE0003D74, + 0xE0003EA8, 0xE0003EA5, 0xE0003EA8, 0xE0003D71, 0x00658491, 0xE0003EAC, + 0xE0003D74, 0xE0003EA8, 0xE0003EA8, 0xE0003D71, 0xE0003EA5, 0xE0003EA8, + 0x00658491, 0xE0003EA8, 0xE0003D71, 0xE0003EA5, 0xE0003EA8, 0xE000218B, + 0xE0003EA8, 0xE0003EAC, 0xE0003D74, 0xE000218B, + // Block 29, offset 0x740 + 0xE0003D74, 0xE0003EA8, 0xE0003EAC, 0x00658E8F, 0xE0003EEF, 0xE0003D78, + 0xE0003EE9, 0xE0003EEF, 0x00658E91, 0xE0003EF7, 0xE0003EF3, 0xE0003D7E, + 0xE0003EF3, 0xE0003EEC, 0xE0003EF3, 0xE0003D7B, 0x00658E91, 0xE0003EF7, + 0xE0003D7E, 0xE0003EF3, 0xE0003EF3, 0xE0003D7B, 0xE0003EEC, 0xE0003EF3, + 0x00658E91, 0xE0003EF3, 0xE0003D7B, 0xE0003EEC, 0xE0003EF3, 0xE0002203, + 0xE0003EF3, 0xE0003EF7, 0xE0003D7E, 0xE0002203, 0xE0003D7E, 0xE0003EF3, + 0xE0003EF7, 0x00659891, 0xE0003F3A, 0xE0003F36, 0xE0003D85, 0xE0003F36, + 0xE0003F33, 0xE0003F36, 0xE0003D82, 0x00659891, 0xE0003F3A, 0xE0003D85, + 0xE0003F36, 0xE0003F36, 0xE0003D82, 0xE0003F33, 0xE0003F36, 0x00659891, + 0xE0003F36, 0xE0003D82, 0xE0003F33, 0xE0003F36, 0xE0002237, 0xE0003F36, + 0xE0003F3A, 0xE0003D85, 0xE0002237, 0xE0003D85, + // Block 30, offset 0x780 + 0xE0003F36, 0xE0003F3A, 0x0065A291, 0xE0003F74, 0xE0003D89, 0x0065A291, + 0xE0003D89, 0xE0003F74, 0x0065AC8F, 0xE0003FA5, 0xE0003D8C, 0xE0003F9F, + 0xE0003FA5, 0x0065AC91, 0xE0003FAD, 0xE0003FB6, 0xE0003FA9, 0xE0003D92, + 0xE0003FB2, 0xE0003D96, 0xE0003FA9, 0xE0003FA2, 0xE0003FA9, 0xE0003D8F, + 0x0065AC91, 0xE0003FAD, 0xE0003FB6, 0xE0003D92, 0xE0003FA9, 0xE0003D96, + 0xE0003FB2, 0xE0003FA9, 0xE0003D8F, 0xE0003FA2, 0xE0003FA9, 0x0065AC91, + 0xE0003FA9, 0xE0003D8F, 0xE0003FA2, 0xE0003FA9, 0xE000227D, 0xE0003FA9, + 0xE0003FAD, 0xE0003D92, 0xE000227D, 0xE0003D92, 0xE0003FA9, 0xE0003FAD, + 0xE0002283, 0xE0003FB2, 0xE0003FB6, 0xE0003D96, 0xE0002283, 0xE0003D96, + 0xE0003FB2, 0xE0003FB6, 0x0065B691, 0xE0004012, 0xE0003D9A, 0x0065B691, + 0xE0003D9A, 0xE0004012, 0x0065C88F, 0xE0003D9D, + // Block 31, offset 0x7c0 + 0xE000403C, 0x0065C891, 0xE000403F, 0xE0003DA0, 0x0065C891, 0xE0003DA0, + 0xE000403F, 0x0065D291, 0xE000406A, 0xE0004067, 0xE000406A, 0xE0003DA3, + 0x0065D291, 0xE000406E, 0xE0003DA6, 0xE000406A, 0xE000406A, 0xE0003DA3, + 0xE0004067, 0xE000406A, 0xE0002371, 0xE0003DA6, 0xE000406A, 0xE000406E, + 0x00657A8F, 0xE0003DBA, 0xE0003DB0, 0xE0003DBA, 0xE0003DAA, 0x00657A8F, + 0xE0003DBA, 0xE0003DAA, 0xE0003DB0, 0xE0003DBA, 0x00657A91, 0xE0003DC2, + 0xE0003DBE, 0xE0003DB6, 0xE0003DBE, 0xE0003DB3, 0xE0003DBE, 0xE0003DAD, + 0x00657A91, 0xE0003DC2, 0xE0003DB6, 0xE0003DBE, 0xE0003DBE, 0xE0003DAD, + 0xE0003DB3, 0xE0003DBE, 0x00657A91, 0xE0003DBE, 0xE0003DAD, 0xE0003DB3, + 0xE0003DBE, 0xE000214F, 0xE0003DBE, 0xE0003DC2, 0xE0003DB6, 0xE000214F, + 0xE0003DB6, 0xE0003DBE, 0xE0003DC2, 0x0065868F, + // Block 32, offset 0x800 + 0xE0003EB7, 0xE0003DC7, 0xE0003EB1, 0xE0003EB7, 0x00658691, 0xE0003EBF, + 0xE0003EBB, 0xE0003DCD, 0xE0003EBB, 0xE0003EB4, 0xE0003EBB, 0xE0003DCA, + 0x00658691, 0xE0003EBF, 0xE0003DCD, 0xE0003EBB, 0xE0003EBB, 0xE0003DCA, + 0xE0003EB4, 0xE0003EBB, 0x00658691, 0xE0003EBB, 0xE0003DCA, 0xE0003EB4, + 0xE0003EBB, 0xE00021BB, 0xE0003EBB, 0xE0003EBF, 0xE0003DCD, 0xE00021BB, + 0xE0003DCD, 0xE0003EBB, 0xE0003EBF, 0x0065908F, 0xE0003F02, 0xE0003DD1, + 0xE0003EFC, 0xE0003F02, 0x00659091, 0xE0003F0A, 0xE0003F06, 0xE0003DD7, + 0xE0003F06, 0xE0003EFF, 0xE0003F06, 0xE0003DD4, 0x00659091, 0xE0003F0A, + 0xE0003DD7, 0xE0003F06, 0xE0003F06, 0xE0003DD4, 0xE0003EFF, 0xE0003F06, + 0x00659091, 0xE0003F06, 0xE0003DD4, 0xE0003EFF, 0xE0003F06, 0xE0002212, + 0xE0003F06, 0xE0003F0A, 0xE0003DD7, 0xE0002212, + // Block 33, offset 0x840 + 0xE0003DD7, 0xE0003F06, 0xE0003F0A, 0x00659A8F, 0xE0003F45, 0xE0003F3F, + 0xE0003F45, 0xE0003DDB, 0x00659A8F, 0xE0003F45, 0xE0003DDB, 0xE0003F3F, + 0xE0003F45, 0x00659A91, 0xE0003F4D, 0xE0003F49, 0xE0003DE1, 0xE0003F49, + 0xE0003F42, 0xE0003F49, 0xE0003DDE, 0x00659A91, 0xE0003F4D, 0xE0003DE1, + 0xE0003F49, 0xE0003F49, 0xE0003DDE, 0xE0003F42, 0xE0003F49, 0x00659A91, + 0xE0003F49, 0xE0003DDE, 0xE0003F42, 0xE0003F49, 0xE000223D, 0xE0003F49, + 0xE0003F4D, 0xE0003DE1, 0xE000223D, 0xE0003DE1, 0xE0003F49, 0xE0003F4D, + 0x0065A48F, 0xE0003DE5, 0xE0003F77, 0x0065A491, 0xE0003F7A, 0xE0003DE8, + 0x0065A491, 0xE0003DE8, 0xE0003F7A, 0x0065AE8F, 0xE0003FC1, 0xE0003DEB, + 0xE0003FBB, 0xE0003FC1, 0x0065AE91, 0xE0003FC9, 0xE0003FD2, 0xE0003FC5, + 0xE0003DF1, 0xE0003FCE, 0xE0003DF5, 0xE0003FC5, + // Block 34, offset 0x880 + 0xE0003FBE, 0xE0003FC5, 0xE0003DEE, 0x0065AE91, 0xE0003FC9, 0xE0003FD2, + 0xE0003DF1, 0xE0003FC5, 0xE0003DF5, 0xE0003FCE, 0xE0003FC5, 0xE0003DEE, + 0xE0003FBE, 0xE0003FC5, 0x0065AE91, 0xE0003FC5, 0xE0003DEE, 0xE0003FBE, + 0xE0003FC5, 0xE000229D, 0xE0003FC5, 0xE0003FC9, 0xE0003DF1, 0xE000229D, + 0xE0003DF1, 0xE0003FC5, 0xE0003FC9, 0xE00022A3, 0xE0003FCE, 0xE0003FD2, + 0xE0003DF5, 0xE00022A3, 0xE0003DF5, 0xE0003FCE, 0xE0003FD2, 0x0065B88F, + 0xE0003DF9, 0xE0004015, 0x0065B891, 0xE0004018, 0xE0003DFC, 0x0065B891, + 0xE0003DFC, 0xE0004018, 0x0065C08F, 0xE0004027, 0xE0003DFF, 0x0065C08F, + 0xE0003DFF, 0xE0004027, 0x0065C091, 0xE000402A, 0xE0003E02, 0x0065C091, + 0xE0003E02, 0xE000402A, 0x0065CA8F, 0xE0003E05, 0xE0004042, 0x0065CA91, + 0xE0004045, 0xE0003E08, 0x0065CA91, 0xE0003E08, + // Block 35, offset 0x8c0 + 0xE0004045, 0x00657E8F, 0xE0003E11, 0xE0003E0B, 0x00657E8F, 0xE0003E0B, + 0xE0003E11, 0x00657E91, 0xE0003E14, 0xE0003E0E, 0x00657E91, 0xE0003E0E, + 0xE0003E14, 0x0065888F, 0xE0003EC4, 0xE0003E17, 0x0065888F, 0xE0003E17, + 0xE0003EC4, 0x00658891, 0xE0003ECA, 0xE0003E1D, 0xE0003EC7, 0xE0003E1A, + 0x00658891, 0xE0003E1D, 0xE0003ECA, 0xE0003E1A, 0xE0003EC7, 0x00658891, + 0xE0003E1A, 0xE0003EC7, 0xE00021D9, 0xE0003ECA, 0xE0003E1D, 0xE00021D9, + 0xE0003E1D, 0xE0003ECA, 0x00659291, 0xE0003F16, 0xE0003F12, 0xE0003E24, + 0xE0003F12, 0xE0003F0F, 0xE0003F12, 0xE0003E21, 0x00659291, 0xE0003F16, + 0xE0003E24, 0xE0003F12, 0xE0003F12, 0xE0003E21, 0xE0003F0F, 0xE0003F12, + 0x00659291, 0xE0003F12, 0xE0003E21, 0xE0003F0F, 0xE0003F12, 0xE0002218, + 0xE0003F12, 0xE0003F16, 0xE0003E24, 0xE0002218, + // Block 36, offset 0x900 + 0xE0003E24, 0xE0003F12, 0xE0003F16, 0x00659C91, 0xE0003F59, 0xE0003F55, + 0xE0003E2B, 0xE0003F55, 0xE0003F52, 0xE0003F55, 0xE0003E28, 0x00659C91, + 0xE0003F59, 0xE0003E2B, 0xE0003F55, 0xE0003F55, 0xE0003E28, 0xE0003F52, + 0xE0003F55, 0x00659C91, 0xE0003F55, 0xE0003E28, 0xE0003F52, 0xE0003F55, + 0xE0002243, 0xE0003F55, 0xE0003F59, 0xE0003E2B, 0xE0002243, 0xE0003E2B, + 0xE0003F55, 0xE0003F59, 0x0065A691, 0xE0003F7D, 0xE0003E2F, 0x0065A691, + 0xE0003E2F, 0xE0003F7D, 0x0065B08F, 0xE0003FDD, 0xE0003E32, 0xE0003FD7, + 0xE0003FDD, 0x0065B091, 0xE0003FE5, 0xE0003FEE, 0xE0003FE1, 0xE0003E38, + 0xE0003FEA, 0xE0003E3C, 0xE0003FE1, 0xE0003FDA, 0xE0003FE1, 0xE0003E35, + 0x0065B091, 0xE0003FE5, 0xE0003FEE, 0xE0003E38, 0xE0003FE1, 0xE0003E3C, + 0xE0003FEA, 0xE0003FE1, 0xE0003E35, 0xE0003FDA, + // Block 37, offset 0x940 + 0xE0003FE1, 0x0065B091, 0xE0003FE1, 0xE0003E35, 0xE0003FDA, 0xE0003FE1, + 0xE00022C0, 0xE0003FE1, 0xE0003FE5, 0xE0003E38, 0xE00022C0, 0xE0003E38, + 0xE0003FE1, 0xE0003FE5, 0xE00022C6, 0xE0003FEA, 0xE0003FEE, 0xE0003E3C, + 0xE00022C6, 0xE0003E3C, 0xE0003FEA, 0xE0003FEE, 0x0065BA91, 0xE000401B, + 0xE0003E40, 0x0065BA91, 0xE0003E40, 0xE000401B, 0x0065CC8F, 0xE0003E43, + 0xE0004048, 0x0065CC91, 0xE000404B, 0xE0003E46, 0x0065CC91, 0xE0003E46, + 0xE000404B, 0x0065D491, 0xE0004076, 0xE0004073, 0xE0004076, 0xE0003E49, + 0x0065D491, 0xE000407A, 0xE0003E4C, 0xE0004076, 0xE0004076, 0xE0003E49, + 0xE0004073, 0xE0004076, 0xE0002374, 0xE0003E4C, 0xE0004076, 0xE000407A, + 0x0065808F, 0xE0003E56, 0xE0003E50, 0x0065808F, 0xE0003E50, 0xE0003E56, + 0x00658091, 0xE0003E59, 0xE0003E53, 0x00658091, + // Block 38, offset 0x980 + 0xE0003E53, 0xE0003E59, 0x00658A91, 0xE0003ED5, 0xE0003ED1, 0xE0003E5F, + 0xE0003ED1, 0xE0003ECE, 0xE0003ED1, 0xE0003E5C, 0x00658A91, 0xE0003ED5, + 0xE0003E5F, 0xE0003ED1, 0xE0003ED1, 0xE0003E5C, 0xE0003ECE, 0xE0003ED1, + 0x00658A91, 0xE0003ED1, 0xE0003E5C, 0xE0003ECE, 0xE0003ED1, 0xE00021E3, + 0xE0003ED1, 0xE0003ED5, 0xE0003E5F, 0xE00021E3, 0xE0003E5F, 0xE0003ED1, + 0xE0003ED5, 0x00659491, 0xE0003F22, 0xE0003F1E, 0xE0003E66, 0xE0003F1E, + 0xE0003F1B, 0xE0003F1E, 0xE0003E63, 0x00659491, 0xE0003F22, 0xE0003E66, + 0xE0003F1E, 0xE0003F1E, 0xE0003E63, 0xE0003F1B, 0xE0003F1E, 0x00659491, + 0xE0003F1E, 0xE0003E63, 0xE0003F1B, 0xE0003F1E, 0xE0002226, 0xE0003F1E, + 0xE0003F22, 0xE0003E66, 0xE0002226, 0xE0003E66, 0xE0003F1E, 0xE0003F22, + 0x00659E8F, 0xE0003F64, 0xE0003E6A, 0xE0003F5E, + // Block 39, offset 0x9c0 + 0xE0003F64, 0x00659E91, 0xE0003F6C, 0xE0003F68, 0xE0003E70, 0xE0003F68, + 0xE0003F61, 0xE0003F68, 0xE0003E6D, 0x00659E91, 0xE0003F6C, 0xE0003E70, + 0xE0003F68, 0xE0003F68, 0xE0003E6D, 0xE0003F61, 0xE0003F68, 0x00659E91, + 0xE0003F68, 0xE0003E6D, 0xE0003F61, 0xE0003F68, 0xE000224D, 0xE0003F68, + 0xE0003F6C, 0xE0003E70, 0xE000224D, 0xE0003E70, 0xE0003F68, 0xE0003F6C, + 0x0065A891, 0xE0003F80, 0xE0003E74, 0x0065A891, 0xE0003E74, 0xE0003F80, + 0x0065B28F, 0xE0003FF9, 0xE0003E77, 0xE0003FF3, 0xE0003FF9, 0x0065B291, + 0xE0004001, 0xE000400A, 0xE0003FFD, 0xE0003E7D, 0xE0004006, 0xE0003E81, + 0xE0003FFD, 0xE0003FF6, 0xE0003FFD, 0xE0003E7A, 0x0065B291, 0xE0004001, + 0xE000400A, 0xE0003E7D, 0xE0003FFD, 0xE0003E81, 0xE0004006, 0xE0003FFD, + 0xE0003E7A, 0xE0003FF6, 0xE0003FFD, 0x0065B291, + // Block 40, offset 0xa00 + 0xE0003FFD, 0xE0003E7A, 0xE0003FF6, 0xE0003FFD, 0xE00022EF, 0xE0003FFD, + 0xE0004001, 0xE0003E7D, 0xE00022EF, 0xE0003E7D, 0xE0003FFD, 0xE0004001, + 0xE00022F5, 0xE0004006, 0xE000400A, 0xE0003E81, 0xE00022F5, 0xE0003E81, + 0xE0004006, 0xE000400A, 0x0065BC91, 0xE000401E, 0xE0003E85, 0x0065BC91, + 0xE0003E85, 0xE000401E, 0x0065C48F, 0xE000402D, 0xE0003E88, 0x0065C48F, + 0xE0003E88, 0xE000402D, 0x0065C491, 0xE0004030, 0xE0003E8B, 0x0065C491, + 0xE0003E8B, 0xE0004030, 0x0065CE8F, 0xE0003E8E, 0xE000404E, 0x0065CE91, + 0xE0004051, 0xE0003E91, 0x0065CE91, 0xE0003E91, 0xE0004051, 0x0065D691, + 0xE0004082, 0xE000407F, 0xE0004082, 0xE0003E94, 0x0065D691, 0xE0004086, + 0xE0003E97, 0xE0004082, 0xE0004082, 0xE0003E94, 0xE000407F, 0xE0004082, + 0x0065D691, 0xE0004082, 0xE0003E94, 0xE000407F, + // Block 41, offset 0xa40 + 0xE0004082, 0xE0002377, 0xE0003E97, 0xE0004082, 0xE0004086, 0x0065D891, + 0xE000408B, 0x40368C20, 0x40343620, 0x00368C83, 0x00343688, 0x002DFE88, + 0x002F56A3, 0x402BDE20, 0x40320C21, 0x40321020, 0x002BDE88, 0x00320CA3, + 0x00321083, 0x404FA420, 0xE000409E, 0x404FA620, 0xE00040A2, 0x404FA820, + 0xE00040A6, 0x404FAA20, 0xE00040AA, 0x404FAC20, 0xE00040AE, 0x404FAE20, + 0xE00040B2, 0x404FB020, 0xE00040B6, 0x404FB220, 0xE00040BA, 0x404FB420, + 0xE00040BE, 0x404FB620, 0xE00040C2, 0x404FB820, 0xE00040C6, 0x404FBA20, + 0xE00040CA, 0x404FBC20, 0xE00040CE, 0x404FBE20, 0xE00040D2, 0x404FC020, + 0xE00040D6, 0x404FC220, 0xE00040DA, 0x404FC420, 0xE00040DE, 0x404FC620, + 0xE00040E2, 0x404FC820, 0xE00040E6, 0x404FCA20, 0xE00040EA, 0x404FCC20, + 0xE00040EE, 0x404FCE20, 0xE00040F2, 0x404FD020, + // Block 42, offset 0xa80 + 0xE00040F6, 0x404FD220, 0xE00040FA, 0x404FD420, 0xE00040FE, 0x404FD620, + 0xE0004102, 0x404FD820, 0xE0004106, 0x404FDA20, 0xE000410A, 0x404FDA20, + 0xE000410E, 0x404FDC20, 0xE0004112, 0x404FDC20, 0xE0004116, 0x404FDC20, + 0xE000411A, 0x404FDE20, 0xE000411E, 0x404FDE20, 0xE0004122, 0x404FE020, + 0xE0004126, 0x404FE220, 0xE000412A, 0x404FE420, 0xE000412E, 0x404FE620, + 0xE0004132, 0x404FE820, 0xE0004136, 0x40501820, 0x40502E20, 0x40503820, + 0x40500E20, 0x40503220, 0x40501020, 0x40503620, 0x40502420, 0x40503A20, + 0x40502A20, 0x40503C20, 0x403FEC20, 0x40403E20, 0x402D2220, 0x002D2483, + 0x402D2420, 0x002D2288, 0x002D2485, 0x002D2484, 0x402DFE20, 0x002E0083, + 0x402E0020, 0x002DFE88, 0x002E0085, 0x002E0084, 0x402E8220, 0x002E8483, + 0x002E8683, 0x002E8883, 0x002E8A83, 0x402E8420, + // Block 43, offset 0xac0 + 0x402E8620, 0x402E8820, 0x402E8A20, 0x002E8288, 0x002E8485, 0x002E8685, + 0x002E8885, 0x002E8A85, 0x002E8484, 0x002E8684, 0x002E8884, 0x002E8A84, + 0x402E9E20, 0x002EA485, 0x002EA484, 0x002EA483, 0x402EA420, 0x002EA083, + 0x002EA283, 0x002EA683, 0x002EA883, 0x002EAA83, 0x002EAC83, 0x002EAE83, + 0x402EA020, 0x402EA220, 0x402EA620, 0x402EA820, 0x402EAA20, 0x402EAC20, + 0x402EAE20, 0x002E9E88, 0x002EA488, 0x002EA487, 0x002EA486, 0x002EA085, + 0x002EA285, 0x002EA685, 0x002EA885, 0x002EAA85, 0x002EAC85, 0x002EAE85, + 0x002EA084, 0x002EA284, 0x002EA684, 0x002EA884, 0x002EAA84, 0x002EAC84, + 0x002EAE84, 0x402FE620, 0x002FE883, 0x402FE820, 0x002FE688, 0x002FE885, + 0x002FE884, 0x40302C20, 0x00302E83, 0x40302E20, 0x00302C88, 0x00302E85, + 0x00302E84, 0xAE605202, 0xAE603502, 0xAE603202, + // Block 44, offset 0xb00 + 0xAE604E02, 0x402BDE20, 0x402BDE21, 0x002BDE88, 0x002BDEA3, 0x402C9820, + 0x402C9822, 0x402C9821, 0x002C9888, 0x002C98C3, 0x002C98A3, 0x402D9A20, + 0x402D9A21, 0x002D9A88, 0x002D9AA3, 0x40306C20, 0x40306C22, 0x40306C21, + 0x00306C88, 0x00306CC3, 0x00306CA3, 0x402C3A20, 0x402C6020, 0x002C3A88, + 0x002C6083, 0x402D2220, 0x402D6620, 0x002D2288, 0x002D6683, 0x402DFE20, + 0x402E2020, 0x002DFE88, 0x002E2083, 0x402E2220, 0xE0000CFB, 0x402E8020, + 0xE0000CFB, 0x002E2288, 0xE0000D01, 0x002E8083, 0xE0000D01, 0x402E9E20, + 0x402EE020, 0x002E9E88, 0x002EE083, 0x402F7A20, 0x402FE420, 0x002F7A88, + 0x002FE483, 0x402FE620, 0x40302A20, 0x002FE688, 0x00302A83, 0x40312A20, + 0x40316220, 0x00312A88, 0x00316283, 0x40442220, 0xE000A9DC, 0x40443E20, + 0xE000A9E2, 0xE000A9EE, 0xE000A9E8, 0x40444820, + // Block 45, offset 0xb40 + 0xE000A9EB, 0x40445820, 0xE000A9F4, 0x40445A20, 0xE000A9FA, 0x40446620, + 0xE000AA00, 0x40448220, 0x40448820, 0x00448C83, 0x403FFC20, 0x40404020, + 0x002C3A88, 0x402C3820, 0x402C3A20, 0x002C3883, 0x002D2288, 0x402D6620, + 0x002D6683, 0x402D2020, 0x402D2220, 0x002D6684, 0x002D6685, 0x002D2083, + 0x00312A88, 0x40312820, 0x40312A20, 0x00312883, 0x404E6020, 0xE000AA0C, + 0x404FFE20, 0x404FFE21, 0x404E6A20, 0xE000AA12, 0x40502820, 0x40502821, + 0x404E9420, 0xE000AA2C, 0xE000AA25, 0x4050AC20, 0x4050AC21, 0x4005B820, + 0xE000AA32, 0x404EA620, 0xE000AA3D, 0x4050C820, 0x4050C821, 0xE000AA4E, + 0xE000AA51, 0xE000AA55, 0xE000AA5E, 0xE000AA62, 0xE000AA6E, 0xE000AA7A, + 0xE000AA86, 0xE000AA92, 0xE000AA9E, 0xE000AAAA, 0xE000AAB6, 0xE000AAC2, + 0xE000AACE, 0xE000AADA, 0xE000AAE6, 0xE000AAF2, + // Block 46, offset 0xb80 + 0xE000AAFE, 0xE000AB0A, 0xE000AB16, 0xE000AB22, 0xE000AB2E, 0xE000AB3A, + 0xE000AB46, 0xE000AB52, 0xE000AB5E, 0xE000AB6A, 0xE000AB76, 0xE000AB82, + 0xE000AB8E, 0xE000AB9A, 0xE000ABA6, 0xE000ABB2, 0xE000ABBE, 0xE000ABCA, + 0xE000ABD6, 0xE000ABE2, 0xE000ABEE, 0xE000ABFA, 0xE000AC06, 0xE000AC12, + 0xE000AC1E, 0xE000AC2A, 0xE000AC36, 0xE000AC42, 0xE000AC4E, 0xE000AC5A, + 0xE000AC66, 0xE000AC72, 0xE000AC7E, 0xE000AC8A, 0xE000AC96, 0xE000ACA2, + 0xE000ACAE, 0xE000ACBA, 0xE000ACC6, 0xE000ACD2, 0xE000ACDE, 0xE000ACEA, + 0xE000ACF6, 0xE000AD02, 0xE000AD0E, 0xE000AD1A, 0xE000AD26, 0xE000AA68, + 0xE000AA74, 0xE000AA80, 0xE000AA8C, 0xE000AA98, 0xE000AAA4, 0xE000AAB0, + 0xE000AABC, 0xE000AAC8, 0xE000AAD4, 0xE000AAE0, 0xE000AAEC, 0xE000AAF8, + 0xE000AB04, 0xE000AB10, 0xE000AB1C, 0xE000AB28, + // Block 47, offset 0xbc0 + 0xE000AB34, 0xE000AB40, 0xE000AB4C, 0xE000AB58, 0xE000AB64, 0xE000AB70, + 0xE000AB7C, 0xE000AB88, 0xE000AB94, 0xE000ABA0, 0xE000ABAC, 0xE000ABB8, + 0xE000ABC4, 0xE000ABD0, 0xE000ABDC, 0xE000ABE8, 0xE000ABF4, 0xE000AC00, + 0xE000AC0C, 0xE000AC18, 0xE000AC24, 0xE000AC30, 0xE000AC3C, 0xE000AC48, + 0xE000AC54, 0xE000AC60, 0xE000AC6C, 0xE000AC78, 0xE000AC84, 0xE000AC90, + 0xE000AC9C, 0xE000ACA8, 0xE000ACB4, 0xE000ACC0, 0xE000ACCC, 0xE000ACD8, + 0xE000ACE4, 0xE000ACF0, 0xE000ACFC, 0xE000AD08, 0xE000AD14, 0xE000AD20, + 0xE000AD2C, 0x404EFE20, 0x404F5222, 0xE000AD37, 0x404F5220, 0x404F5020, + 0x404F1A22, 0x404F1A23, 0x404F2822, 0x404F2823, 0x404F3622, 0x404F3623, + 0x404F4422, 0x404F4423, 0x404F5223, 0x404F6022, 0x404F6023, 0x404F6E22, + 0x404F6E23, 0x404F7C22, 0x404F7C23, 0x404F8A21, + // Block 48, offset 0xc00 + 0x404F9822, 0x404F9823, 0x404FA622, 0x404FA623, 0x404FB422, 0x404FB423, + 0x404FC222, 0x404FC223, 0x404FD022, 0x404FD023, 0x404FDE22, 0x404FDE23, + 0x404FEC22, 0x404FEC23, 0x404FFA22, 0x404FFA23, 0x40500822, 0x40500823, + 0x40501622, 0x40501623, 0x40502422, 0x40502423, 0x40503222, 0x40503223, + 0x40504022, 0x40504023, 0x40504E22, 0x40504E23, 0x40505C22, 0x40505C23, + 0x40506A22, 0x40506A23, 0x40508C22, 0x40508C23, 0x40509A22, 0x40509A23, + 0x4050A822, 0x4050A823, 0x4050B622, 0x4050B623, 0x4050C421, 0x4050D222, + 0x4050D223, 0x4050E022, 0x4050E023, 0x4050EE21, 0x4050FC21, 0x404F1A20, + 0x404F1A21, 0x404F2820, 0x404F2821, 0x404F3620, 0x404F3621, 0x404F4420, + 0x404F4421, 0x404F5221, 0x404F6020, 0x404F6021, 0x404F6E20, 0x404F6E21, + 0x404F7C20, 0x404F7C21, 0x404F8A20, 0x404F9820, + // Block 49, offset 0xc40 + 0x404F9821, 0x404FA620, 0x404FA621, 0x404FB420, 0x404FB421, 0x404FC220, + 0x404FC221, 0x404FD020, 0x404FD021, 0x404FDE20, 0x404FDE21, 0x404FEC20, + 0x404FEC21, 0x404FFA20, 0x404FFA21, 0x40500820, 0x40500821, 0x40501620, + 0x40501621, 0x40502420, 0x40502421, 0x40503220, 0x40503221, 0x40504020, + 0x40504021, 0x40504E20, 0x40504E21, 0x40505C20, 0x40505C21, 0x40506A20, + 0x40506A21, 0x40508C20, 0x40508C21, 0x40509A20, 0x40509A21, 0x4050A820, + 0x4050A821, 0x4050B620, 0x4050B621, 0x4050C420, 0x4050D220, 0x4050D221, + 0x4050E020, 0x4050E021, 0x4050EE20, 0x4050FC20, 0x404F1820, 0x404F1821, + 0x404F2620, 0x404F2621, 0x404F3420, 0x404F3421, 0x404F4220, 0x404F4221, + 0x404F5021, 0x404F5E20, 0x404F5E21, 0x404F6C20, 0x404F6C21, 0x404F7A20, + 0x404F7A21, 0x404F8820, 0x404F9620, 0x404F9621, + // Block 50, offset 0xc80 + 0x404FA420, 0x404FA421, 0x404FB220, 0x404FB221, 0x404FC020, 0x404FC021, + 0x404FCE20, 0x404FCE21, 0x404FDC20, 0x404FDC21, 0x404FEA20, 0x404FEA21, + 0x404FF820, 0x404FF821, 0x40500620, 0x40500621, 0x40501420, 0x40501421, + 0x40502220, 0x40502221, 0x40503020, 0x40503021, 0x40503E20, 0x40503E21, + 0x40504C20, 0x40504C21, 0x40505A20, 0x40505A21, 0x40506820, 0x40506821, + 0x40508A20, 0x40508A21, 0x40509820, 0x40509821, 0x4050A620, 0x4050A621, + 0x4050B420, 0x4050B421, 0x4050C220, 0x4050D020, 0x4050D021, 0x4050DE20, + 0x4050DE21, 0x4050EC20, 0x4050FA20, 0x404F0A21, 0x404F0A20, 0x404F0821, + 0x404F0820, 0x404EE620, 0x404F5420, 0x404F4C20, 0x40507620, 0x40507A20, + 0x404F1C20, 0x404F1C21, 0x404F2A20, 0x404F2A21, 0x404F3820, 0x404F3821, + 0x404F4620, 0x404F4621, 0x404F5421, 0x404F6220, + // Block 51, offset 0xcc0 + 0x404F6221, 0x404F7020, 0x404F7021, 0x404F7E20, 0x404F7E21, 0x404F8C20, + 0x404F9A20, 0x404F9A21, 0x404FA820, 0x404FA821, 0x404FB620, 0x404FB621, + 0x404FC420, 0x404FC421, 0x404FD220, 0x404FD221, 0x404FE020, 0x404FE021, + 0x404FEE20, 0x404FEE21, 0x404FFC20, 0x404FFC21, 0x40500A20, 0x40500A21, + 0x40501820, 0x40501821, 0x40502620, 0x40502621, 0x40503420, 0x40503421, + 0x40504220, 0x40504221, 0x40505020, 0x40505021, 0x40505E20, 0x40505E21, + 0x40506C20, 0x40506C21, 0x40508E20, 0x40508E21, 0x40509C20, 0x40509C21, + 0x4050AA20, 0x4050AA21, 0x4050B820, 0x4050B821, 0x4050C620, 0x4050D420, + 0x4050D421, 0x4050E220, 0x4050E221, 0x4050F020, 0x4050FE20, 0x404F1420, + 0x404F1421, 0x404F2220, 0x404F2221, 0x404F3020, 0x404F3021, 0x404F3E20, + 0x404F3E21, 0x404F4C21, 0x404F5A20, 0x404F5A21, + // Block 52, offset 0xd00 + 0x404F6820, 0x404F6821, 0x404F7620, 0x404F7621, 0x404F8420, 0x404F9220, + 0x404F9221, 0x404FA020, 0x404FA021, 0x404FAE20, 0x404FAE21, 0x404FBC20, + 0x404FBC21, 0x404FCA20, 0x404FCA21, 0x404FD820, 0x404FD821, 0x404FE620, + 0x404FE621, 0x404FF420, 0x404FF421, 0x40500220, 0x40500221, 0x40501020, + 0x40501021, 0x40501E20, 0x40501E21, 0x40502C20, 0x40502C21, 0x40503A20, + 0x40503A21, 0x40504820, 0x40504821, 0x40505620, 0x40505621, 0x40506420, + 0x40506421, 0x40507220, 0x40507221, 0x40509420, 0x40509421, 0x4050A220, + 0x4050A221, 0x4050B020, 0x4050B021, 0x4050BE20, 0x4050CC20, 0x4050CC21, + 0x4050DA20, 0x4050DA21, 0x4050E820, 0x4050F620, 0x40507820, 0x40507C20, + 0x404F0E20, 0x40507420, 0x404E1420, 0x404F1020, 0x404F1021, 0x404EDE20, + 0x404F4A20, 0x404F1220, 0x404F1221, 0x404F2020, + // Block 53, offset 0xd40 + 0x404F2021, 0x404F2E20, 0x404F2E21, 0x404F3C20, 0x404F3C21, 0x404F4A21, + 0x404F5820, 0x404F5821, 0x404F6620, 0x404F6621, 0x404F7420, 0x404F7421, + 0x404F8220, 0x404F9020, 0x404F9021, 0x404F9E20, 0x404F9E21, 0x404FAC20, + 0x404FAC21, 0x404FBA20, 0x404FBA21, 0x404FC820, 0x404FC821, 0x404FD620, + 0x404FD621, 0x404FE420, 0x404FE421, 0x404FF220, 0x404FF221, 0x40500020, + 0x40500021, 0x40500E20, 0x40500E21, 0x40501C20, 0x40501C21, 0x40502A20, + 0x40502A21, 0x40503820, 0x40503821, 0x40504620, 0x40504621, 0x40505420, + 0x40505421, 0x40506220, 0x40506221, 0x40507020, 0x40507021, 0x40509220, + 0x40509221, 0x4050A020, 0x4050A021, 0x4050AE20, 0x4050AE21, 0x4050BC20, + 0x4050CA20, 0x4050CA21, 0x4050D820, 0x4050D821, 0x4050E620, 0x4050F420, + 0x404EDE21, 0x404F4A22, 0x404F1222, 0x404F1223, + // Block 54, offset 0xd80 + 0x404F2022, 0x404F2023, 0x404F2E22, 0x404F2E23, 0x404F3C22, 0x404F3C23, + 0x404F4A23, 0x404F5822, 0x404F5823, 0x404F6622, 0x404F6623, 0x404F7422, + 0x404F7423, 0x404F8221, 0x404F9022, 0x404F9023, 0x404F9E22, 0x404F9E23, + 0x404FAC22, 0x404FAC23, 0x404FBA22, 0x404FBA23, 0x404FC822, 0x404FC823, + 0x404FD622, 0x404FD623, 0x404FE422, 0x404FE423, 0x404FF222, 0x404FF223, + 0x40500022, 0x40500023, 0x40500E22, 0x40500E23, 0x40501C22, 0x40501C23, + 0x40502A22, 0x40502A23, 0x40503822, 0x40503823, 0x40504622, 0x40504623, + 0x40505422, 0x40505423, 0x40506222, 0x40506223, 0x40507022, 0x40507023, + 0x40509222, 0x40509223, 0x4050A022, 0x4050A023, 0x4050AE22, 0x4050AE23, + 0x4050BC21, 0x4050CA22, 0x4050CA23, 0x4050D822, 0x4050D823, 0x4050E621, + 0x4050F421, 0x404EEE20, 0x404F4E20, 0x40508220, + // Block 55, offset 0xdc0 + 0x40508620, 0x404F1620, 0x404F1621, 0x404F2420, 0x404F2421, 0x404F3220, + 0x404F3221, 0x404F4020, 0x404F4021, 0x404F4E21, 0x404F5C20, 0x404F5C21, + 0x404F6A20, 0x404F6A21, 0x404F7820, 0x404F7821, 0x404F8620, 0x404F9420, + 0x404F9421, 0x404FA220, 0x404FA221, 0x404FB020, 0x404FB021, 0x404FBE20, + 0x404FBE21, 0x404FCC20, 0x404FCC21, 0x404FDA20, 0x404FDA21, 0x404FE820, + 0x404FE821, 0x404FF620, 0x404FF621, 0x40500420, 0x40500421, 0x40501220, + 0x40501221, 0x40502020, 0x40502021, 0x40502E20, 0x40502E21, 0x40503C20, + 0x40503C21, 0x40504A20, 0x40504A21, 0x40505820, 0x40505821, 0x40506620, + 0x40506621, 0x40507E20, 0x40507E21, 0x40509620, 0x40509621, 0x4050A420, + 0x4050A421, 0x4050B220, 0x4050B221, 0x4050C020, 0x4050CE20, 0x4050CE21, + 0x4050DC20, 0x4050DC21, 0x4050EA20, 0x4050F820, + // Block 56, offset 0xe00 + 0x40508420, 0x40508820, 0x40508020, 0x404E1820, 0x404F1E20, 0x404F1E21, + 0x404E1C20, 0x404F2C20, 0x404F2C21, 0x404F2E20, 0x404F3220, 0x404E2220, + 0x404F3A20, 0x404F3A21, 0x404E2420, 0x404F4820, 0x404F4821, 0x404E2820, + 0x404F5620, 0x404F5621, 0x404E2E20, 0x404F6420, 0x404F6421, 0x404E3220, + 0x404F7220, 0x404F7221, 0x404E3A20, 0x404F8020, 0x404E4220, 0x404F8E20, + 0x404F8E21, 0x404E4820, 0x404F9C20, 0x404F9C21, 0x404E4A20, 0x404FAA20, + 0x404FAA21, 0x404E4E20, 0x404FB820, 0x404FB821, 0x404E5220, 0x404FC620, + 0x404FC621, 0x404E5620, 0x404FD420, 0x404FD421, 0x404E5A20, 0x404FE220, + 0x404FE221, 0x404E5E20, 0x404FF020, 0x404FF021, 0x404E6220, 0x40500C20, + 0x40500C21, 0x404E6620, 0x40501A20, 0x40501A21, 0x404E7220, 0x40503620, + 0x40503621, 0x404E7420, 0x40504420, 0x40504421, + // Block 57, offset 0xe40 + 0x404E7E20, 0x40505220, 0x40505221, 0x404E8220, 0x40506020, 0x40506021, + 0x404E8420, 0x40506E20, 0x40506E21, 0x404E8820, 0x40509020, 0x40509021, + 0x404E8C20, 0x40509E20, 0x40509E21, 0x404E9820, 0x4050BA20, 0x404EAA20, + 0x4050D620, 0x4050D621, 0x404EB620, 0x4050E420, 0x404EC220, 0x4050F220, + 0x40510420, 0x40511A20, 0x40511020, 0x40511420, 0x40510620, 0x40511C20, + 0x40511220, 0x40511620, 0x40510A20, 0x40511820, 0x402BDE20, 0x40320C21, + 0x40321020, 0x40321021, 0x002BDE88, 0x00320CA3, 0x00321083, 0x003210A4, + 0x003210A3, 0x402C9820, 0x402C9A20, 0x002C9888, 0x002C9A83, 0x402C3A20, + 0x40312C20, 0x002C3A88, 0x00312C84, 0x00312C83, 0x402C6220, 0x40312E20, + 0x002C6288, 0x00312E84, 0x00312E83, 0x402DFE20, 0x40313020, 0x002DFE88, + 0x00313084, 0x00313083, 0x402E9E20, 0x40313220, + // Block 58, offset 0xe80 + 0x002E9E88, 0x00313284, 0x00313283, 0x402F2C20, 0x40313420, 0x002F2C88, + 0x00313484, 0x00313483, 0x402FE620, 0x40313620, 0x002FE688, 0x00313683, + 0x40421220, 0x40425A20, 0x402BDE20, 0x402BE020, 0x002BDE88, 0x002BE083, + 0x40312A20, 0x40312C20, 0x40312E20, 0x00312A88, 0x00312C83, 0x00312E83, + 0x40393820, 0x40393620, 0x40393821, 0x40393824, 0x40397220, 0x40396621, + 0x403A6821, 0x003A6883, 0x403A6820, 0x003A6884, 0x403A7420, 0x403A7421, + 0x403A9220, 0x403A9226, 0x403A9221, 0x003A9343, 0x403A9223, 0x003A9344, + 0x402BDE20, 0x402BE220, 0x402BE020, 0x002BDE88, 0x002BE283, 0x002BE083, + 0x402FE620, 0x402FE820, 0x402FE820, 0x002FE688, 0x002FE883, 0x002FE883, + 0x40302C20, 0x40302E20, 0x40302E20, 0x00302C88, 0x00302E83, 0x00302E83, + 0x402BDE20, 0x402C0820, 0x40320E21, 0x40320C21, + // Block 59, offset 0xec0 + 0x40320E20, 0x40320C20, 0x002BDE88, 0x002C0883, 0x00320EA3, 0x00320CA3, + 0x00320E83, 0x00320C83, 0x402C3A20, 0x402C5C20, 0x002C3A88, 0x002C5C83, + 0x402C5E20, 0x402C6020, 0x002C5E83, 0x002C6083, 0x402D2220, 0x402D6420, + 0x002D2288, 0x002D6483, 0x402E9E20, 0x402EE021, 0x402EE022, 0x002E9E88, + 0x002EE0A3, 0x002EE0C3, 0x40312A20, 0x40320620, 0x00312A88, 0x00320683, + 0x402EE220, 0x40321023, 0x40321022, 0x40321020, 0x40321021, 0x40321024, + 0x002EE288, 0x003210E3, 0x003210C3, 0x00321083, 0x003210A3, 0x00321103, + 0x402C6220, 0x402C9620, 0x002C6288, 0x002C9684, 0x002C9683, 0x002D2288, + 0x002D6684, 0x002D6683, 0x402E2220, 0xE0000CFB, 0xE0000CFB, 0x402E8020, + 0x002E2288, 0xE0000D01, 0xE0000D01, 0x002E8084, 0x002E8083, 0x002E9E88, + 0x002EE084, 0x002EE083, 0x002F7A88, 0x002FE484, + // Block 60, offset 0xf00 + 0x002FE483, 0x002FE688, 0x00302A84, 0x00302A83, 0x40302C20, 0x40306A20, + 0x00302C88, 0x00306A84, 0x00306A83, 0x4030F620, 0x4030FE20, 0x0030F688, + 0x0030FE84, 0x0030FE83, 0x00312A88, 0x00316284, 0x00316283, 0x402C9820, + 0x40320E22, 0x002C9888, 0x00320EC3, 0x402EE220, 0x40321024, 0x40321020, + 0x40321022, 0x002EE288, 0x00321103, 0x00321083, 0x003210C3, 0x40429820, + 0x4042C220, 0x4042C420, 0x40429620, 0x40429A20, 0x40429820, 0x40429C20, + 0x40429A20, 0x40429E20, 0x40429C20, 0x4042A020, 0x40429E20, 0x4042A220, + 0x4042A020, 0x4042A420, 0x4042A220, 0x4042A620, 0x4042A420, 0x4042A820, + 0x4042A620, 0x4042AA20, 0x4042A820, 0x4042AC20, 0x4042AA20, 0x4042AE20, + 0x4042AC20, 0x4042B020, 0x4042AE20, 0x4042B220, 0x4042B020, 0x4042B420, + 0x4042B220, 0x4042B620, 0x4042B420, 0x4042B820, + // Block 61, offset 0xf40 + 0x4042B620, 0x4042BA20, 0x4042B820, 0x4042BC20, 0x4042BA20, 0x4042BE20, + 0x4042BC20, 0x4042C020, 0x4042BE20, 0x4042C220, 0x4042C020, 0x4042C420, + 0x4042C220, 0x40496C20, 0xE000AE0D, 0xE000AE10, 0x402BDE20, 0x402BDE21, + 0x402BDE22, 0x002BDE88, 0x002BDEA3, 0x002BDEC3, 0x402C9820, 0x402C9821, + 0x402C9822, 0x002C9888, 0x002C98A3, 0x002C98C3, 0x402D9A20, 0x402D9A21, + 0x402D9A22, 0x002D9A88, 0x002D9AA3, 0x002D9AC3, 0x402EE220, 0x402EE221, + 0x402EE222, 0x002EE288, 0x002EE2A3, 0x002EE2C3, 0x40306C20, 0x40306C21, + 0x40306C22, 0x00306C88, 0x00306CA3, 0x00306CC3, 0x40393820, 0x40393A20, + 0x40393821, 0x40392820, 0x40393C20, 0x40393E20, 0x40394020, 0x40394220, + 0x40394420, 0x40394620, 0x40394820, 0x40394A20, 0x40394E20, 0x40395020, + 0x40395220, 0x40395420, 0x40395A20, 0x40395C20, + // Block 62, offset 0xf80 + 0x40395E20, 0x40396020, 0x40396420, 0x40396620, 0x40396820, 0x40396A20, + 0x40398420, 0x40398620, 0x40398820, 0x40398A20, 0x40398C20, 0x40398E20, + 0x40399020, 0x40399220, 0x40399420, 0x40399620, 0x40399820, 0x40399A20, + 0x40399C20, 0x40399C21, 0x40399E20, 0x4039A020, 0x4039A021, 0x403A9020, + 0x4039A821, 0x4039A820, 0x4039AA20, 0x4039AC20, 0x4039AC21, 0x402EE220, + 0x402EE420, 0x402EE620, 0x002EE288, 0x002EE483, 0x002EE683, 0x402BDE20, + 0xE0000966, 0xE000B3B3, 0xE0000958, 0xE0000966, 0x402C3A20, 0xE0000A41, + 0x402C9820, 0xE000B3B6, 0x402D9A20, 0xE000B3B9, 0x402EE220, 0xE0000DE3, + 0xE000B3BC, 0xE0000DCF, 0xE0000DE3, 0x402FE620, 0xE0000F30, 0x40306C20, + 0xE0001028, 0xE000B3BF, 0xE0000FFC, 0xE0001028, 0x402BDE20, 0x402BDE1F, + 0x402BDE1D, 0x402BDE1C, 0x402BDE1E, 0x002BDE88, + // Block 63, offset 0xfc0 + 0x002BDE63, 0x002BDE23, 0x002BDE03, 0x002BDE43, 0x402C9820, 0x402C9824, + 0x402C9822, 0x402C9821, 0x402C9823, 0x402C981F, 0x402C981D, 0x402C981C, + 0x402C981E, 0x002C9888, 0x002C9903, 0x002C98C3, 0x002C98A3, 0x002C98E3, + 0x002C9863, 0x002C9823, 0x002C9803, 0x002C9843, 0xE0000AF1, 0x402C9821, + 0x402C9823, 0xE0000AF4, 0x002C98A3, 0x002C98E3, 0x402D9A20, 0x402D9A1F, + 0x402D9A1D, 0x402D9A1C, 0x402D9A1E, 0x002D9A88, 0x002D9A63, 0x002D9A23, + 0x002D9A03, 0x002D9A43, 0x402E8220, 0x402E821F, 0x402E821D, 0x402E821C, + 0x402E821E, 0x002E8288, 0x002E8263, 0x002E8223, 0x002E8203, 0x002E8243, + 0x402E9E20, 0x402E9E1F, 0x402E9E1D, 0x402E9E1C, 0x402E9E1E, 0x002E9E88, + 0x002E9E63, 0x002E9E23, 0x002E9E03, 0x002E9E43, 0x402EE220, 0x402EE21F, + 0x402EE21D, 0x402EE21C, 0x402EE21E, 0x002EE288, + // Block 64, offset 0x1000 + 0x002EE263, 0x002EE223, 0x002EE203, 0x002EE243, 0x40306C20, 0x40306C24, + 0x40306C22, 0x40306C21, 0x40306C23, 0x40306C1F, 0x40306C1D, 0x40306C1C, + 0x40306C25, 0x40306C1E, 0x00306C88, 0x00306D03, 0x00306CC3, 0x00306CA3, + 0x00306CE3, 0x00306C63, 0x00306C23, 0x00306C03, 0x00306D23, 0x00306C43, +} + +// mainValues: 251456 entries, 1005824 bytes +// Block 2 is the null block. +var mainValues = [251456]uint32{ + // Block 0x0, offset 0x0 + 0x0000: 0xa0000000, 0x0001: 0xa0000000, 0x0002: 0xa0000000, 0x0003: 0xa0000000, + 0x0004: 0xa0000000, 0x0005: 0xa0000000, 0x0006: 0xa0000000, 0x0007: 0xa0000000, + 0x0008: 0xa0000000, 0x0009: 0x40020020, 0x000a: 0x40020220, 0x000b: 0x40020420, + 0x000c: 0x40020620, 0x000d: 0x40020820, 0x000e: 0xa0000000, 0x000f: 0xa0000000, + 0x0010: 0xa0000000, 0x0011: 0xa0000000, 0x0012: 0xa0000000, 0x0013: 0xa0000000, + 0x0014: 0xa0000000, 0x0015: 0xa0000000, 0x0016: 0xa0000000, 0x0017: 0xa0000000, + 0x0018: 0xa0000000, 0x0019: 0xa0000000, 0x001a: 0xa0000000, 0x001b: 0xa0000000, + 0x001c: 0xa0000000, 0x001d: 0xa0000000, 0x001e: 0xa0000000, 0x001f: 0xa0000000, + 0x0020: 0x40021220, 0x0021: 0x4002ba20, 0x0022: 0x4003e020, 0x0023: 0x4004ea20, + 0x0024: 0x4027de20, 0x0025: 0x4004ec20, 0x0026: 0x4004e620, 0x0027: 0x4003d220, + 0x0028: 0x4003f420, 0x0029: 0x4003f620, 0x002a: 0x4004d820, 0x002b: 0x40093820, + 0x002c: 0x40024020, 0x002d: 0x40021a20, 0x002e: 0x4002e420, 0x002f: 0x4004e220, + 0x0030: 0x4029cc20, 0x0031: 0x4029ce20, 0x0032: 0x4029d020, 0x0033: 0x4029d220, + 0x0034: 0x4029d420, 0x0035: 0x4029d620, 0x0036: 0x4029d820, 0x0037: 0x4029da20, + 0x0038: 0x4029dc20, 0x0039: 0x4029de20, 0x003a: 0x40026c20, 0x003b: 0x40026220, + 0x003c: 0x40094020, 0x003d: 0x40094220, 0x003e: 0x40094420, 0x003f: 0x4002c420, + // Block 0x1, offset 0x40 + 0x0040: 0x4004d620, 0x0041: 0x002bde88, 0x0042: 0x002c0a88, 0x0043: 0x002c3a88, + 0x0044: 0x002c6288, 0x0045: 0x002c9888, 0x0046: 0x002d0888, 0x0047: 0x002d2288, + 0x0048: 0x002d6888, 0x0049: 0x002d9a88, 0x004a: 0x002dcc88, 0x004b: 0x002dfe88, + 0x004c: 0xc0030002, 0x004d: 0x002e8288, 0x004e: 0x002e9e88, 0x004f: 0x002ee288, + 0x0050: 0x002f2c88, 0x0051: 0x002f5688, 0x0052: 0x002f7a88, 0x0053: 0x002fe688, + 0x0054: 0x00302c88, 0x0055: 0x00306c88, 0x0056: 0x0030be88, 0x0057: 0x0030e288, + 0x0058: 0x0030f688, 0x0059: 0x00310088, 0x005a: 0x00312a88, 0x005b: 0x4003f820, + 0x005c: 0x4004e420, 0x005d: 0x4003fa20, 0x005e: 0x40062420, 0x005f: 0x40021620, + 0x0060: 0x40061e20, 0x0061: 0x402bde20, 0x0062: 0x402c0a20, 0x0063: 0x402c3a20, + 0x0064: 0x402c6220, 0x0065: 0x402c9820, 0x0066: 0x402d0820, 0x0067: 0x402d2220, + 0x0068: 0x402d6820, 0x0069: 0x402d9a20, 0x006a: 0x402dcc20, 0x006b: 0x402dfe20, + 0x006c: 0xc0000002, 0x006d: 0x402e8220, 0x006e: 0x402e9e20, 0x006f: 0x402ee220, + 0x0070: 0x402f2c20, 0x0071: 0x402f5620, 0x0072: 0x402f7a20, 0x0073: 0x402fe620, + 0x0074: 0x40302c20, 0x0075: 0x40306c20, 0x0076: 0x4030be20, 0x0077: 0x4030e220, + 0x0078: 0x4030f620, 0x0079: 0x40310020, 0x007a: 0x40312a20, 0x007b: 0x4003fc20, + 0x007c: 0x40094820, 0x007d: 0x4003fe20, 0x007e: 0x40094c20, 0x007f: 0xa0000000, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0x00c0: 0xa0000000, 0x00c1: 0xa0000000, 0x00c2: 0xa0000000, 0x00c3: 0xa0000000, + 0x00c4: 0xa0000000, 0x00c5: 0x40020a20, 0x00c6: 0xa0000000, 0x00c7: 0xa0000000, + 0x00c8: 0xa0000000, 0x00c9: 0xa0000000, 0x00ca: 0xa0000000, 0x00cb: 0xa0000000, + 0x00cc: 0xa0000000, 0x00cd: 0xa0000000, 0x00ce: 0xa0000000, 0x00cf: 0xa0000000, + 0x00d0: 0xa0000000, 0x00d1: 0xa0000000, 0x00d2: 0xa0000000, 0x00d3: 0xa0000000, + 0x00d4: 0xa0000000, 0x00d5: 0xa0000000, 0x00d6: 0xa0000000, 0x00d7: 0xa0000000, + 0x00d8: 0xa0000000, 0x00d9: 0xa0000000, 0x00da: 0xa0000000, 0x00db: 0xa0000000, + 0x00dc: 0xa0000000, 0x00dd: 0xa0000000, 0x00de: 0xa0000000, 0x00df: 0xa0000000, + 0x00e0: 0x0002129b, 0x00e1: 0x4002bc20, 0x00e2: 0x4027dc20, 0x00e3: 0x4027e020, + 0x00e4: 0x4027da20, 0x00e5: 0x4027e220, 0x00e6: 0x40094a20, 0x00e7: 0x4004ce20, + 0x00e8: 0x40062c20, 0x00e9: 0x40081820, 0x00ea: 0x002bde94, 0x00eb: 0x4003f020, + 0x00ec: 0x40094620, 0x00ed: 0xa0000000, 0x00ee: 0x40081a20, 0x00ef: 0x40062620, + 0x00f0: 0x40070420, 0x00f1: 0x40093a20, 0x00f2: 0x0029d094, 0x00f3: 0x0029d294, + 0x00f4: 0x40062020, 0x00f5: 0x00327684, 0x00f6: 0x4004d220, 0x00f7: 0x40030620, + 0x00f8: 0x40063220, 0x00f9: 0x0029ce94, 0x00fa: 0x002ee294, 0x00fb: 0x4003f220, + 0x00fc: 0xe00002bf, 0x00fd: 0xe00002b7, 0x00fe: 0xe00004a7, 0x00ff: 0x4002c620, + // Block 0x4, offset 0x100 + 0x0100: 0xe00008f5, 0x0101: 0xe00008ef, 0x0102: 0xe0000921, 0x0103: 0xe0000969, + 0x0104: 0xe000095b, 0x0105: 0xe000094d, 0x0106: 0xe00009dd, 0x0107: 0xe0000a53, + 0x0108: 0xe0000ae8, 0x0109: 0xe0000ae2, 0x010a: 0xe0000af4, 0x010b: 0xe0000b20, + 0x010c: 0xe0000c2b, 0x010d: 0xe0000c25, 0x010e: 0xe0000c37, 0x010f: 0xe0000c43, + 0x0110: 0xe0000ab3, 0x0111: 0xe0000d63, 0x0112: 0xe0000d9a, 0x0113: 0xe0000d94, + 0x0114: 0xe0000da6, 0x0115: 0xe0000de6, 0x0116: 0xe0000dd2, 0x0117: 0x40093e20, + 0x0118: 0xe0000e12, 0x0119: 0xe0000fe1, 0x011a: 0xe0000fdb, 0x011b: 0xe0000fed, + 0x011c: 0xe0000fff, 0x011d: 0xe0001102, 0x011e: 0x00318888, 0x011f: 0xe0000f7b, + 0x0120: 0xe00008f2, 0x0121: 0xe00008ec, 0x0122: 0xe000091e, 0x0123: 0xe0000966, + 0x0124: 0xe0000958, 0x0125: 0xe000094a, 0x0126: 0xe00009d5, 0x0127: 0xe0000a4d, + 0x0128: 0xe0000ae5, 0x0129: 0xe0000adf, 0x012a: 0xe0000af1, 0x012b: 0xe0000b1d, + 0x012c: 0xe0000c28, 0x012d: 0xe0000c22, 0x012e: 0xe0000c34, 0x012f: 0xe0000c40, + 0x0130: 0xe0000aad, 0x0131: 0xe0000d60, 0x0132: 0xe0000d97, 0x0133: 0xe0000d91, + 0x0134: 0xe0000da3, 0x0135: 0xe0000de3, 0x0136: 0xe0000dcf, 0x0137: 0x40093c20, + 0x0138: 0xe0000e0f, 0x0139: 0xe0000fde, 0x013a: 0xe0000fd8, 0x013b: 0xe0000fea, + 0x013c: 0xe0000ffc, 0x013d: 0xe00010ff, 0x013e: 0x40318820, 0x013f: 0xe0001114, + // Block 0x5, offset 0x140 + 0x0140: 0xe0000983, 0x0141: 0xe0000980, 0x0142: 0xe00008fb, 0x0143: 0xe00008f8, + 0x0144: 0xe000097d, 0x0145: 0xe000097a, 0x0146: 0xe0000a38, 0x0147: 0xe0000a35, + 0x0148: 0xe0000a3e, 0x0149: 0xe0000a3b, 0x014a: 0xe0000a4a, 0x014b: 0xe0000a47, + 0x014c: 0xe0000a44, 0x014d: 0xe0000a41, 0x014e: 0xe0000a86, 0x014f: 0xe0000a83, + 0x0150: 0xe0000aaa, 0x0151: 0xe0000aa7, 0x0152: 0xe0000b46, 0x0153: 0xe0000b43, + 0x0154: 0xe0000aee, 0x0155: 0xe0000aeb, 0x0156: 0xe0000b2c, 0x0157: 0xe0000b29, + 0x0158: 0xe0000b40, 0x0159: 0xe0000b3d, 0x015a: 0xe0000b1a, 0x015b: 0xe0000b17, + 0x015c: 0xe0000bb8, 0x015d: 0xe0000bb5, 0x015e: 0xe0000bb2, 0x015f: 0xe0000baf, + 0x0160: 0xe0000bc4, 0x0161: 0xe0000bc1, 0x0162: 0xe0000bca, 0x0163: 0xe0000bc7, + 0x0164: 0xe0000bee, 0x0165: 0xe0000beb, 0x0166: 0xe0000c1b, 0x0167: 0xe0000c18, + 0x0168: 0xe0000c51, 0x0169: 0xe0000c4e, 0x016a: 0xe0000c60, 0x016b: 0xe0000c5d, + 0x016c: 0xe0000c31, 0x016d: 0xe0000c2e, 0x016e: 0xe0000c5a, 0x016f: 0xe0000c57, + 0x0170: 0xe0000c54, 0x0171: 0x402da220, 0x0172: 0xf0000a0a, 0x0173: 0xf0000404, + 0x0174: 0xe0000c8a, 0x0175: 0xe0000c87, 0x0176: 0xe0000c9f, 0x0177: 0xe0000c9c, + 0x0178: 0x402f7220, 0x0179: 0xe0000ccc, 0x017a: 0xe0000cc9, 0x017b: 0xe0000cd8, + 0x017c: 0xe0000cd5, 0x017d: 0xe0000cd2, 0x017e: 0xe0000ccf, 0x017f: 0xe0000d04, + // Block 0x6, offset 0x180 + 0x0180: 0xe0000cfe, 0x0181: 0xe0000cf8, 0x0182: 0xe0000cf5, 0x0183: 0xe0000d51, + 0x0184: 0xe0000d4e, 0x0185: 0xe0000d6f, 0x0186: 0xe0000d6c, 0x0187: 0xe0000d5d, + 0x0188: 0xe0000d5a, 0x0189: 0xf0000404, 0x018a: 0x002eda88, 0x018b: 0x402eda20, + 0x018c: 0xe0000e2e, 0x018d: 0xe0000e2b, 0x018e: 0xe0000da0, 0x018f: 0xe0000d9d, + 0x0190: 0xe0000de0, 0x0191: 0xe0000ddd, 0x0192: 0xe0000e93, 0x0193: 0xe0000e8f, + 0x0194: 0xe0000eca, 0x0195: 0xe0000ec7, 0x0196: 0xe0000edc, 0x0197: 0xe0000ed9, + 0x0198: 0xe0000ed0, 0x0199: 0xe0000ecd, 0x019a: 0xe0000f1f, 0x019b: 0xe0000f1c, + 0x019c: 0xe0000f2d, 0x019d: 0xe0000f2a, 0x019e: 0xe0000f47, 0x019f: 0xe0000f44, + 0x01a0: 0xe0000f33, 0x01a1: 0xe0000f30, 0x01a2: 0xe0000f99, 0x01a3: 0xe0000f96, + 0x01a4: 0xe0000f8a, 0x01a5: 0xe0000f87, 0x01a6: 0x00303688, 0x01a7: 0x40303620, + 0x01a8: 0xe000102b, 0x01a9: 0xe0001028, 0x01aa: 0xe000103f, 0x01ab: 0xe000103c, + 0x01ac: 0xe0000fe7, 0x01ad: 0xe0000fe4, 0x01ae: 0xe0000ff9, 0x01af: 0xe0000ff6, + 0x01b0: 0xe0001025, 0x01b1: 0xe0001022, 0x01b2: 0xe0001039, 0x01b3: 0xe0001036, + 0x01b4: 0xe00010d8, 0x01b5: 0xe00010d5, 0x01b6: 0xe000110e, 0x01b7: 0xe000110b, + 0x01b8: 0xe0001117, 0x01b9: 0xe000113b, 0x01ba: 0xe0001138, 0x01bb: 0xe000114d, + 0x01bc: 0xe000114a, 0x01bd: 0xe0001147, 0x01be: 0xe0001144, 0x01bf: 0xe0000f64, + // Block 0x7, offset 0x1c0 + 0x01c0: 0x402c1a20, 0x01c1: 0x002c2a88, 0x01c2: 0x002c3288, 0x01c3: 0x402c3220, + 0x01c4: 0x0031c488, 0x01c5: 0x4031c420, 0x01c6: 0x002efa88, 0x01c7: 0x002c4e88, + 0x01c8: 0x402c4e20, 0x01c9: 0x002c7288, 0x01ca: 0x002c7a88, 0x01cb: 0x002c8488, + 0x01cc: 0x402c8420, 0x01cd: 0xe000115c, 0x01ce: 0x002cae88, 0x01cf: 0x002cb888, + 0x01d0: 0x002cc288, 0x01d1: 0x002d1688, 0x01d2: 0x402d1620, 0x01d3: 0x002d4488, + 0x01d4: 0x002d5888, 0x01d5: 0x402d7820, 0x01d6: 0x002dc288, 0x01d7: 0x002db688, + 0x01d8: 0x002e0a88, 0x01d9: 0x402e0a20, 0x01da: 0x402e3820, 0x01db: 0x402e7220, + 0x01dc: 0x0030a088, 0x01dd: 0x002eb488, 0x01de: 0x402ebc20, 0x01df: 0x002f1088, + 0x01e0: 0xe0000e56, 0x01e1: 0xe0000e53, 0x01e2: 0x002d6088, 0x01e3: 0x402d6020, + 0x01e4: 0x002f3e88, 0x01e5: 0x402f3e20, 0x01e6: 0x002f8288, 0x01e7: 0x0031b488, + 0x01e8: 0x4031b420, 0x01e9: 0x00300888, 0x01ea: 0x40301220, 0x01eb: 0x40304220, + 0x01ec: 0x00304a88, 0x01ed: 0x40304a20, 0x01ee: 0x00305288, 0x01ef: 0xe000105f, + 0x01f0: 0xe000105c, 0x01f1: 0x0030b488, 0x01f2: 0x0030cc88, 0x01f3: 0x00311888, + 0x01f4: 0x40311820, 0x01f5: 0x00313488, 0x01f6: 0x40313420, 0x01f7: 0x00316488, + 0x01f8: 0x00316e88, 0x01f9: 0x40316e20, 0x01fa: 0x40317820, 0x01fb: 0x4031a620, + 0x01fc: 0x0031bc88, 0x01fd: 0x4031bc20, 0x01fe: 0xe0000fc9, 0x01ff: 0x40319420, + // Block 0x8, offset 0x200 + 0x0200: 0x40321220, 0x0201: 0x40321a20, 0x0202: 0x40322220, 0x0203: 0x40322a20, + 0x0204: 0xe0000ad5, 0x0205: 0xe0000ad1, 0x0206: 0xe0000acd, 0x0207: 0xf0000a0a, + 0x0208: 0xf000040a, 0x0209: 0xf0000404, 0x020a: 0xf0000a0a, 0x020b: 0xf000040a, + 0x020c: 0xf0000404, 0x020d: 0xe0000947, 0x020e: 0xe0000944, 0x020f: 0xe0000c3d, + 0x0210: 0xe0000c3a, 0x0211: 0xe0000dcc, 0x0212: 0xe0000dc9, 0x0213: 0xe0000ff3, + 0x0214: 0xe0000ff0, 0x0215: 0xe000101e, 0x0216: 0xe000101a, 0x0217: 0xe0001006, + 0x0218: 0xe0001002, 0x0219: 0xe0001016, 0x021a: 0xe0001012, 0x021b: 0xe000100e, + 0x021c: 0xe000100a, 0x021d: 0x402cae20, 0x021e: 0xe0000962, 0x021f: 0xe000095e, + 0x0220: 0xe0000976, 0x0221: 0xe0000972, 0x0222: 0xe00009f4, 0x0223: 0xe00009ef, + 0x0224: 0x002d3a88, 0x0225: 0x402d3a20, 0x0226: 0xe0000bbe, 0x0227: 0xe0000bbb, + 0x0228: 0xe0000c99, 0x0229: 0xe0000c96, 0x022a: 0xe0000e20, 0x022b: 0xe0000e1d, + 0x022c: 0xe0000e27, 0x022d: 0xe0000e23, 0x022e: 0xe0001162, 0x022f: 0xe000115f, + 0x0230: 0xe0000c8d, 0x0231: 0xf0000a0a, 0x0232: 0xf000040a, 0x0233: 0xf0000404, + 0x0234: 0xe0000bac, 0x0235: 0xe0000ba9, 0x0236: 0x002d7888, 0x0237: 0x00319488, + 0x0238: 0xe0000d57, 0x0239: 0xe0000d54, 0x023a: 0xe0000954, 0x023b: 0xe0000950, + 0x023c: 0xe00009ea, 0x023d: 0xe00009e5, 0x023e: 0xe0000e19, 0x023f: 0xe0000e15, + // Block 0x9, offset 0x240 + 0x0240: 0xe000098f, 0x0241: 0xe000098c, 0x0242: 0xe0000995, 0x0243: 0xe0000992, + 0x0244: 0xe0000b62, 0x0245: 0xe0000b5f, 0x0246: 0xe0000b68, 0x0247: 0xe0000b65, + 0x0248: 0xe0000c6c, 0x0249: 0xe0000c69, 0x024a: 0xe0000c72, 0x024b: 0xe0000c6f, + 0x024c: 0xe0000e4a, 0x024d: 0xe0000e47, 0x024e: 0xe0000e50, 0x024f: 0xe0000e4d, + 0x0250: 0xe0000ee8, 0x0251: 0xe0000ee5, 0x0252: 0xe0000eee, 0x0253: 0xe0000eeb, + 0x0254: 0xe0001053, 0x0255: 0xe0001050, 0x0256: 0xe0001059, 0x0257: 0xe0001056, + 0x0258: 0xe0000f61, 0x0259: 0xe0000f5e, 0x025a: 0xe0000fa5, 0x025b: 0xe0000fa2, + 0x025c: 0x00312288, 0x025d: 0x40312220, 0x025e: 0xe0000bf4, 0x025f: 0xe0000bf1, + 0x0260: 0x002ebc88, 0x0261: 0x402c8c20, 0x0262: 0x002f2288, 0x0263: 0x402f2220, + 0x0264: 0x00314088, 0x0265: 0x40314020, 0x0266: 0xe000096f, 0x0267: 0xe000096c, + 0x0268: 0xe0000b32, 0x0269: 0xe0000b2f, 0x026a: 0xe0000dd9, 0x026b: 0xe0000dd5, + 0x026c: 0xe0000dfd, 0x026d: 0xe0000df9, 0x026e: 0xe0000e04, 0x026f: 0xe0000e01, + 0x0270: 0xe0000e0b, 0x0271: 0xe0000e07, 0x0272: 0xe0001129, 0x0273: 0xe0001126, + 0x0274: 0x402e5e20, 0x0275: 0x402ed020, 0x0276: 0x40305a20, 0x0277: 0x402dd420, + 0x0278: 0xe0000abf, 0x0279: 0xe0000ec4, 0x027a: 0x002be888, 0x027b: 0x002c4488, + 0x027c: 0x402c4420, 0x027d: 0x002e3888, 0x027e: 0x00303e88, 0x027f: 0x402ffc20, + // Block 0xa, offset 0x280 + 0x0280: 0x40315820, 0x0281: 0x0031d488, 0x0282: 0x4031d420, 0x0283: 0x002c1a88, + 0x0284: 0x00307c88, 0x0285: 0x0030da88, 0x0286: 0x002ca288, 0x0287: 0x402ca220, + 0x0288: 0x002dde88, 0x0289: 0x402dde20, 0x028a: 0x002f6a88, 0x028b: 0x402f6a20, + 0x028c: 0x002f8e88, 0x028d: 0x402f8e20, 0x028e: 0x00311088, 0x028f: 0x40311020, + 0x0290: 0x402bf020, 0x0291: 0x402bf820, 0x0292: 0x402c0220, 0x0293: 0x402c2a20, + 0x0294: 0x402efa20, 0x0295: 0x402c5620, 0x0296: 0x402c7220, 0x0297: 0x402c7a20, + 0x0298: 0x402ccc20, 0x0299: 0x402cb820, 0x029a: 0x402cd420, 0x029b: 0x402cc220, + 0x029c: 0x402cdc20, 0x029d: 0x402ce820, 0x029e: 0x402cf020, 0x029f: 0x402dee20, + 0x02a0: 0x402d4420, 0x02a1: 0x402d2a20, 0x02a2: 0x402d3220, 0x02a3: 0x402d5820, + 0x02a4: 0x402d0020, 0x02a5: 0x40308820, 0x02a6: 0x402d8020, 0x02a7: 0x402d8e20, + 0x02a8: 0x402db620, 0x02a9: 0x402dc220, 0x02aa: 0x402daa20, 0x02ab: 0x402e4220, + 0x02ac: 0x402e4a20, 0x02ad: 0x402e5420, 0x02ae: 0x402e6820, 0x02af: 0x4030a020, + 0x02b0: 0x4030ac20, 0x02b1: 0x402e9020, 0x02b2: 0x402eb420, 0x02b3: 0x402ec820, + 0x02b4: 0x402ea620, 0x02b5: 0x402f1020, 0x02b6: 0x402eee20, 0x02b7: 0x402f1a20, + 0x02b8: 0x402f4c20, 0x02b9: 0x402f9820, 0x02ba: 0x402fa220, 0x02bb: 0x402fac20, + 0x02bc: 0x402fb620, 0x02bd: 0x402fbe20, 0x02be: 0x402fc620, 0x02bf: 0x402fd020, + // Block 0xb, offset 0x2c0 + 0x02c0: 0x402f8220, 0x02c1: 0x402fd820, 0x02c2: 0x402ff420, 0x02c3: 0x40300820, + 0x02c4: 0x402df620, 0x02c5: 0x40301a20, 0x02c6: 0x40302420, 0x02c7: 0x40306420, + 0x02c8: 0x40305220, 0x02c9: 0x40307c20, 0x02ca: 0x4030b420, 0x02cb: 0x4030cc20, + 0x02cc: 0x4030da20, 0x02cd: 0x4030ee20, 0x02ce: 0x402e7a20, 0x02cf: 0x40310820, + 0x02d0: 0x40314820, 0x02d1: 0x40315020, 0x02d2: 0x40316420, 0x02d3: 0x40318020, + 0x02d4: 0x4031cc20, 0x02d5: 0x4031e820, 0x02d6: 0x40320a20, 0x02d7: 0x40323220, + 0x02d8: 0x40323a20, 0x02d9: 0x402c1220, 0x02da: 0x402cf820, 0x02db: 0x402d4c20, + 0x02dc: 0x402d7020, 0x02dd: 0x402de620, 0x02de: 0x402e1a20, 0x02df: 0x402e2a20, + 0x02e0: 0x402f6220, 0x02e1: 0x4031fa20, 0x02e2: 0x40320220, 0x02e3: 0xe0000aca, + 0x02e4: 0xe0000adc, 0x02e5: 0xe0000ad9, 0x02e6: 0xe0000fcc, 0x02e7: 0xe0000fcf, + 0x02e8: 0xe0000fba, 0x02e9: 0xe0000ba1, 0x02ea: 0xe0000d11, 0x02eb: 0xe0000d18, + 0x02ec: 0x40324220, 0x02ed: 0x40324a20, 0x02ee: 0x40309020, 0x02ef: 0x40309820, + 0x02f0: 0x002d6894, 0x02f1: 0x002d8094, 0x02f2: 0x002dcc94, 0x02f3: 0x002f7a94, + 0x02f4: 0x002f9894, 0x02f5: 0x002fac94, 0x02f6: 0x002fd894, 0x02f7: 0x0030e294, + 0x02f8: 0x00310094, 0x02f9: 0x40064020, 0x02fa: 0x40064420, 0x02fb: 0x402d9620, + 0x02fc: 0x4031de20, 0x02fd: 0x402d9820, 0x02fe: 0x4031e220, 0x02ff: 0x4031f020, + // Block 0xc, offset 0x300 + 0x0300: 0x4031dc20, 0x0301: 0x4031f220, 0x0302: 0x40064620, 0x0303: 0x40064820, + 0x0304: 0x40064a20, 0x0305: 0x40064c20, 0x0306: 0x40064e20, 0x0307: 0x40065020, + 0x0308: 0x40065220, 0x0309: 0x40065420, 0x030a: 0x40065620, 0x030b: 0x40065820, + 0x030c: 0x40065a20, 0x030d: 0x40065c20, 0x030e: 0x40065e20, 0x030f: 0x40066020, + 0x0310: 0x4027b220, 0x0311: 0x4027b420, 0x0312: 0x40066220, 0x0313: 0x40066420, + 0x0314: 0x40066620, 0x0315: 0x40066820, 0x0316: 0x40066a20, 0x0317: 0x40066c20, + 0x0318: 0x40062820, 0x0319: 0x40062a20, 0x031a: 0x40062e20, 0x031b: 0x40063420, + 0x031c: 0x40062220, 0x031d: 0x40063020, 0x031e: 0x40066e20, 0x031f: 0x40067020, + 0x0320: 0x002d5894, 0x0321: 0x002e2294, 0x0322: 0x002fe694, 0x0323: 0x0030f694, + 0x0324: 0x0031e894, 0x0325: 0x40067220, 0x0326: 0x40067420, 0x0327: 0x40067620, + 0x0328: 0x40067820, 0x0329: 0x40067a20, 0x032a: 0x40067c20, 0x032b: 0x40067e20, + 0x032c: 0x40068020, 0x032d: 0x40068220, 0x032e: 0x4031e020, 0x032f: 0x40068420, + 0x0330: 0x40068620, 0x0331: 0x40068820, 0x0332: 0x40068a20, 0x0333: 0x40068c20, + 0x0334: 0x40068e20, 0x0335: 0x40069020, 0x0336: 0x40069220, 0x0337: 0x40069420, + 0x0338: 0x40069620, 0x0339: 0x40069820, 0x033a: 0x40069a20, 0x033b: 0x40069c20, + 0x033c: 0x40069e20, 0x033d: 0x4006a020, 0x033e: 0x4006a220, 0x033f: 0x4006a420, + // Block 0xd, offset 0x340 + 0x0340: 0xae603502, 0x0341: 0xae603202, 0x0342: 0xae603c02, 0x0343: 0xae604e02, + 0x0344: 0xae605b02, 0x0345: 0xae606302, 0x0346: 0xae603702, 0x0347: 0xae605202, + 0x0348: 0xae604702, 0x0349: 0xae606402, 0x034a: 0xae604302, 0x034b: 0xae604d02, + 0x034c: 0xae604102, 0x034d: 0xae605f02, 0x034e: 0xae605f02, 0x034f: 0xae606502, + 0x0350: 0xae606602, 0x0351: 0xae606702, 0x0352: 0xae605f02, 0x0353: 0xae602202, + 0x0354: 0xae602a02, 0x0355: 0xae805f02, 0x0356: 0xadc06002, 0x0357: 0xadc06002, + 0x0358: 0xadc06002, 0x0359: 0xadc06002, 0x035a: 0xae805f02, 0x035b: 0xad806802, + 0x035c: 0xadc06002, 0x035d: 0xadc06002, 0x035e: 0xadc06002, 0x035f: 0xadc06002, + 0x0360: 0xadc06002, 0x0361: 0xaca06e02, 0x0362: 0xaca06f02, 0x0363: 0xadc07002, + 0x0364: 0xadc07502, 0x0365: 0xadc07602, 0x0366: 0xadc07702, 0x0367: 0xaca05602, + 0x0368: 0xaca05902, 0x0369: 0xadc06002, 0x036a: 0xadc06002, 0x036b: 0xadc06002, + 0x036c: 0xadc06002, 0x036d: 0xadc07802, 0x036e: 0xadc07902, 0x036f: 0xadc06002, + 0x0370: 0xadc07a02, 0x0371: 0xadc07b02, 0x0372: 0xadc02102, 0x0373: 0xadc06002, + 0x0374: 0xa0107c02, 0x0375: 0xa0107d02, 0x0376: 0xa0106102, 0x0377: 0xa0106102, + 0x0378: 0xa0105402, 0x0379: 0xadc07e02, 0x037a: 0xadc06002, 0x037b: 0xadc06002, + 0x037c: 0xadc06002, 0x037d: 0xae605f02, 0x037e: 0xae605f02, 0x037f: 0xae605f02, + // Block 0xe, offset 0x380 + 0x0380: 0xae603502, 0x0381: 0xae603202, 0x0382: 0xae604502, 0x0383: 0xae602202, + 0x0384: 0xe0000000, 0x0385: 0xaf007f02, 0x0386: 0xae605f02, 0x0387: 0xadc06002, + 0x0388: 0xadc06002, 0x0389: 0xadc06002, 0x038a: 0xae605f02, 0x038b: 0xae605f02, + 0x038c: 0xae605f02, 0x038d: 0xadc06002, 0x038e: 0xadc06002, 0x038f: 0xa0000000, + 0x0390: 0xae605f02, 0x0391: 0xae605f02, 0x0392: 0xae605f02, 0x0393: 0xadc06002, + 0x0394: 0xadc06002, 0x0395: 0xadc06002, 0x0396: 0xadc06002, 0x0397: 0xae605f02, + 0x0398: 0xae808002, 0x0399: 0xadc06002, 0x039a: 0xadc06002, 0x039b: 0xae605f02, + 0x039c: 0xae906002, 0x039d: 0xaea05f02, 0x039e: 0xaea05f02, 0x039f: 0xae906002, + 0x03a0: 0xaea08102, 0x03a1: 0xaea08202, 0x03a2: 0xae906002, 0x03a3: 0x84e615ef, + 0x03a4: 0x84e6164c, 0x03a5: 0x84e616cd, 0x03a6: 0x84e61771, 0x03a7: 0x84e61836, + 0x03a8: 0x84e6161d, 0x03a9: 0x84e61631, 0x03aa: 0x84e616b4, 0x03ab: 0x84e61741, + 0x03ac: 0x84e617bd, 0x03ad: 0x84e61816, 0x03ae: 0x84e6185f, 0x03af: 0x84e6187b, + 0x03b0: 0x00326688, 0x03b1: 0x40326620, 0x03b2: 0x0032a688, 0x03b3: 0x4032a620, + 0x03b4: 0x40064020, 0x03b5: 0x40064220, 0x03b6: 0x00326088, 0x03b7: 0x40326020, + 0x03ba: 0x00326c84, 0x03bb: 0x40329220, + 0x03bc: 0x40329020, 0x03bd: 0x40329420, 0x03be: 0x40026220, + // Block 0xf, offset 0x3c0 + 0x03c4: 0x40062020, 0x03c5: 0xe00000ab, 0x03c6: 0xe00011f0, 0x03c7: 0x40030620, + 0x03c8: 0xe0001249, 0x03c9: 0xe00012dd, 0x03ca: 0xe000133a, + 0x03cc: 0xe000139b, 0x03ce: 0xe00013dd, 0x03cf: 0xe0001492, + 0x03d0: 0xe0001352, 0x03d1: 0x00325288, 0x03d2: 0x00325488, 0x03d3: 0x00325688, + 0x03d4: 0x00325a88, 0x03d5: 0x00325c88, 0x03d6: 0x00326488, 0x03d7: 0x00326888, + 0x03d8: 0x00326a88, 0x03d9: 0x00326c88, 0x03da: 0x00327088, 0x03db: 0x00327288, + 0x03dc: 0x00327688, 0x03dd: 0x00327888, 0x03de: 0x00327a88, 0x03df: 0x00327c88, + 0x03e0: 0x00327e88, 0x03e1: 0x00328888, 0x03e3: 0x00328e88, + 0x03e4: 0x00329688, 0x03e5: 0x00329888, 0x03e6: 0x00329a88, 0x03e7: 0x00329c88, + 0x03e8: 0x00329e88, 0x03e9: 0x0032a288, 0x03ea: 0xe000134f, 0x03eb: 0xe00013f2, + 0x03ec: 0xe00011ed, 0x03ed: 0xe0001246, 0x03ee: 0xe00012da, 0x03ef: 0xe0001337, + 0x03f0: 0xe00013f5, 0x03f1: 0x40325220, 0x03f2: 0x40325420, 0x03f3: 0x40325620, + 0x03f4: 0x40325a20, 0x03f5: 0x40325c20, 0x03f6: 0x40326420, 0x03f7: 0x40326820, + 0x03f8: 0x40326a20, 0x03f9: 0x40326c20, 0x03fa: 0x40327020, 0x03fb: 0x40327220, + 0x03fc: 0x40327620, 0x03fd: 0x40327820, 0x03fe: 0x40327a20, 0x03ff: 0x40327c20, + // Block 0x10, offset 0x400 + 0x0400: 0x40327e20, 0x0401: 0x40328820, 0x0402: 0x00328e99, 0x0403: 0x40328e20, + 0x0404: 0x40329620, 0x0405: 0x40329820, 0x0406: 0x40329a20, 0x0407: 0x40329c20, + 0x0408: 0x40329e20, 0x0409: 0x4032a220, 0x040a: 0xe000134c, 0x040b: 0xe00013ef, + 0x040c: 0xe0001398, 0x040d: 0xe00013da, 0x040e: 0xe000148f, 0x040f: 0xe0001368, + 0x0410: 0x00325484, 0x0411: 0x00326a84, 0x0412: 0x0032988a, 0x0413: 0xf000020a, + 0x0414: 0xf000020a, 0x0415: 0x00329a84, 0x0416: 0x00327e84, 0x0417: 0xe0001364, + 0x0418: 0x00328688, 0x0419: 0x40328620, 0x041a: 0x00326288, 0x041b: 0x40326220, + 0x041c: 0x00325e88, 0x041d: 0x40325e20, 0x041e: 0x00328488, 0x041f: 0x40328420, + 0x0420: 0x0032a488, 0x0421: 0x4032a420, 0x0422: 0x0032e888, 0x0423: 0x4032e820, + 0x0424: 0x0032f288, 0x0425: 0x4032f220, 0x0426: 0x0032f488, 0x0427: 0x4032f420, + 0x0428: 0x0032fa88, 0x0429: 0x4032fa20, 0x042a: 0x00330888, 0x042b: 0x40330820, + 0x042c: 0x00330e88, 0x042d: 0x40330e20, 0x042e: 0x00331688, 0x042f: 0x40331620, + 0x0430: 0x00327084, 0x0431: 0x00328884, 0x0432: 0x00328e84, 0x0433: 0x40326e20, + 0x0434: 0x00326a8a, 0x0435: 0x00325c84, 0x0436: 0x40092e20, 0x0437: 0x0032a888, + 0x0438: 0x4032a820, 0x0439: 0x00328e8a, 0x043a: 0x00328288, 0x043b: 0x40328220, + 0x043c: 0x40328c20, 0x043d: 0x00329288, 0x043e: 0x00329088, 0x043f: 0x00329488, + // Block 0x11, offset 0x440 + 0x0440: 0xe00014bd, 0x0441: 0xe00014c3, 0x0442: 0x00339688, 0x0443: 0x0033a288, + 0x0444: 0x0033c288, 0x0445: 0x0033fc88, 0x0446: 0xc02a0071, 0x0447: 0x00343688, + 0x0448: 0x00344688, 0x0449: 0x00349a88, 0x044a: 0x0034e488, 0x044b: 0x00356288, + 0x044c: 0x00356a88, 0x044d: 0xe00014cf, 0x044e: 0x00357a88, 0x044f: 0x00365488, + 0x0450: 0xc0090041, 0x0451: 0x00335288, 0x0452: 0x00335a88, 0x0453: 0xc0130092, + 0x0454: 0x00338a88, 0x0455: 0xc01800d1, 0x0456: 0xc01c0071, 0x0457: 0xc0200071, + 0x0458: 0xc0250041, 0x0459: 0x00343e88, 0x045a: 0xc0370092, 0x045b: 0x00348488, + 0x045c: 0x0034a888, 0x045d: 0x0034ba88, 0x045e: 0xc02e0071, 0x045f: 0x00350e88, + 0x0460: 0x00352888, 0x0461: 0x00353a88, 0x0462: 0x00354c88, 0x0463: 0xc03e00f1, + 0x0464: 0x0035ac88, 0x0465: 0x0035b488, 0x0466: 0x00360288, 0x0467: 0xc0440071, + 0x0468: 0x00365c88, 0x0469: 0x00366688, 0x046a: 0x00367488, 0x046b: 0xc0480071, + 0x046c: 0x00368e88, 0x046d: 0xc04c0071, 0x046e: 0x0036b888, 0x046f: 0x0036c488, + 0x0470: 0xc0060041, 0x0471: 0x40335220, 0x0472: 0x40335a20, 0x0473: 0xc0100092, + 0x0474: 0x40338a20, 0x0475: 0xc01600d1, 0x0476: 0xc01a0071, 0x0477: 0xc01e0071, + 0x0478: 0xc0220041, 0x0479: 0x40343e20, 0x047a: 0xc0340092, 0x047b: 0x40348420, + 0x047c: 0x4034a820, 0x047d: 0x4034ba20, 0x047e: 0xc02c0071, 0x047f: 0x40350e20, + // Block 0x12, offset 0x480 + 0x0480: 0x40352820, 0x0481: 0x40353a20, 0x0482: 0x40354c20, 0x0483: 0xc03a00f1, + 0x0484: 0x4035ac20, 0x0485: 0x4035b420, 0x0486: 0x40360220, 0x0487: 0xc0420071, + 0x0488: 0x40365c20, 0x0489: 0x40366620, 0x048a: 0x40367420, 0x048b: 0xc0460071, + 0x048c: 0x40368e20, 0x048d: 0xc04a0071, 0x048e: 0x4036b820, 0x048f: 0x4036c420, + 0x0490: 0xe00014ba, 0x0491: 0xe00014c0, 0x0492: 0x40339620, 0x0493: 0x4033a220, + 0x0494: 0x4033c220, 0x0495: 0x4033fc20, 0x0496: 0xc0280071, 0x0497: 0x40343620, + 0x0498: 0x40344620, 0x0499: 0x40349a20, 0x049a: 0x4034e420, 0x049b: 0x40356220, + 0x049c: 0x40356a20, 0x049d: 0xe00014cc, 0x049e: 0x40357a20, 0x049f: 0x40365420, + 0x04a0: 0x0035e088, 0x04a1: 0x4035e020, 0x04a2: 0x00369e88, 0x04a3: 0x40369e20, + 0x04a4: 0x0036ce88, 0x04a5: 0x4036ce20, 0x04a6: 0x0036d688, 0x04a7: 0x4036d620, + 0x04a8: 0x0036ea88, 0x04a9: 0x4036ea20, 0x04aa: 0x0036e088, 0x04ab: 0x4036e020, + 0x04ac: 0x0036f488, 0x04ad: 0x4036f420, 0x04ae: 0x0036fc88, 0x04af: 0x4036fc20, + 0x04b0: 0x00370488, 0x04b1: 0x40370420, 0x04b2: 0x00370c88, 0x04b3: 0x40370c20, + 0x04b4: 0xc0500131, 0x04b5: 0xc04e0131, 0x04b6: 0x00371c88, 0x04b7: 0x40371c20, + 0x04b8: 0x0035a488, 0x04b9: 0x4035a420, 0x04ba: 0x0035fa88, 0x04bb: 0x4035fa20, + 0x04bc: 0x0035f288, 0x04bd: 0x4035f220, 0x04be: 0x0035e888, 0x04bf: 0x4035e820, + // Block 0x13, offset 0x4c0 + 0x04c0: 0x00352088, 0x04c1: 0x40352020, 0x04c2: 0x40070620, 0x04c3: 0xae608302, + 0x04c4: 0xae605f02, 0x04c5: 0xae602a02, 0x04c6: 0xae602202, 0x04c7: 0xae605f02, + 0x04c8: 0xa0000000, 0x04c9: 0xa0000000, 0x04ca: 0x00341c88, 0x04cb: 0x40341c20, + 0x04cc: 0x00369688, 0x04cd: 0x40369620, 0x04ce: 0x00353088, 0x04cf: 0x40353020, + 0x04d0: 0xe00014b7, 0x04d1: 0xe00014b4, 0x04d2: 0x00336a88, 0x04d3: 0x40336a20, + 0x04d4: 0x00337a88, 0x04d5: 0x40337a20, 0x04d6: 0x0033dc88, 0x04d7: 0x4033dc20, + 0x04d8: 0x0033aa88, 0x04d9: 0x4033aa20, 0x04da: 0x00345888, 0x04db: 0x40345820, + 0x04dc: 0x00347888, 0x04dd: 0x40347820, 0x04de: 0x00347088, 0x04df: 0x40347020, + 0x04e0: 0x00346888, 0x04e1: 0x40346820, 0x04e2: 0x0034ca88, 0x04e3: 0x4034ca20, + 0x04e4: 0x0034dc88, 0x04e5: 0x4034dc20, 0x04e6: 0x00351888, 0x04e7: 0x40351820, + 0x04e8: 0x00372688, 0x04e9: 0x40372620, 0x04ea: 0x00354488, 0x04eb: 0x40354420, + 0x04ec: 0x00355888, 0x04ed: 0x40355820, 0x04ee: 0x00359288, 0x04ef: 0x40359220, + 0x04f0: 0x00359a88, 0x04f1: 0x40359a20, 0x04f2: 0x0035cc88, 0x04f3: 0x4035cc20, + 0x04f4: 0x00360e88, 0x04f5: 0x40360e20, 0x04f6: 0x00362a88, 0x04f7: 0x40362a20, + 0x04f8: 0x00363a88, 0x04f9: 0x40363a20, 0x04fa: 0x0035d488, 0x04fb: 0x4035d420, + 0x04fc: 0x00364488, 0x04fd: 0x40364420, 0x04fe: 0x00364c88, 0x04ff: 0x40364c20, + // Block 0x14, offset 0x500 + 0x0500: 0x00373088, 0x0501: 0xe00014c9, 0x0502: 0xe00014c6, 0x0503: 0x00346088, + 0x0504: 0x40346020, 0x0505: 0x00348e88, 0x0506: 0x40348e20, 0x0507: 0x0034d288, + 0x0508: 0x4034d220, 0x0509: 0x0034c288, 0x050a: 0x4034c220, 0x050b: 0x00363288, + 0x050c: 0x40363220, 0x050d: 0x0034b088, 0x050e: 0x4034b020, 0x050f: 0x40373020, + 0x0510: 0x00332a88, 0x0511: 0x40332a20, 0x0512: 0x00333288, 0x0513: 0x40333220, + 0x0514: 0x00334a88, 0x0515: 0x40334a20, 0x0516: 0x0033ba88, 0x0517: 0x4033ba20, + 0x0518: 0xc00e0071, 0x0519: 0xc00c0071, 0x051a: 0x00334288, 0x051b: 0x40334220, + 0x051c: 0x0033d488, 0x051d: 0x4033d420, 0x051e: 0x0033f288, 0x051f: 0x4033f220, + 0x0520: 0x00340688, 0x0521: 0x40340620, 0x0522: 0xe00014d5, 0x0523: 0xe00014d2, + 0x0524: 0x00342488, 0x0525: 0x40342420, 0x0526: 0x0034f688, 0x0527: 0x4034f620, + 0x0528: 0xc0320071, 0x0529: 0xc0300071, 0x052a: 0x00350688, 0x052b: 0x40350620, + 0x052c: 0x0036b088, 0x052d: 0x4036b020, 0x052e: 0xe00014de, 0x052f: 0xe00014db, + 0x0530: 0x00358288, 0x0531: 0x40358220, 0x0532: 0x00358a88, 0x0533: 0x40358a20, + 0x0534: 0x00362288, 0x0535: 0x40362220, 0x0536: 0x00338288, 0x0537: 0x40338220, + 0x0538: 0x00368688, 0x0539: 0x40368620, 0x053a: 0x00337288, 0x053b: 0x40337220, + 0x053c: 0x0035bc88, 0x053d: 0x4035bc20, 0x053e: 0x0035c488, 0x053f: 0x4035c420, + // Block 0x15, offset 0x540 + 0x0540: 0x00339288, 0x0541: 0x40339220, 0x0542: 0x0033a088, 0x0543: 0x4033a020, + 0x0544: 0x0033ee88, 0x0545: 0x4033ee20, 0x0546: 0x00341088, 0x0547: 0x40341020, + 0x0548: 0x0034a488, 0x0549: 0x4034a420, 0x054a: 0x0034ec88, 0x054b: 0x4034ec20, + 0x054c: 0x00354288, 0x054d: 0x40354220, 0x054e: 0x00355688, 0x054f: 0x40355620, + 0x0550: 0x0033f088, 0x0551: 0x4033f020, 0x0552: 0x00349688, 0x0553: 0x40349620, + 0x0554: 0x0034a688, 0x0555: 0x4034a620, 0x0556: 0x00353888, 0x0557: 0x40353820, + 0x0558: 0x0036cc88, 0x0559: 0x4036cc20, 0x055a: 0x00348288, 0x055b: 0x40348220, + 0x055c: 0x00372e88, 0x055d: 0x40372e20, 0x055e: 0x00348088, 0x055f: 0x40348020, + 0x0560: 0x00349888, 0x0561: 0x40349820, 0x0562: 0x0034da88, 0x0563: 0x4034da20, + 0x0564: 0x00351688, 0x0565: 0x40351620, 0x0566: 0x0035dc88, 0x0567: 0x4035dc20, + 0x0571: 0x00384288, 0x0572: 0x00384488, 0x0573: 0x00384688, + 0x0574: 0x00384888, 0x0575: 0x00384a88, 0x0576: 0x00384c88, 0x0577: 0x00384e88, + 0x0578: 0x00385088, 0x0579: 0x00385288, 0x057a: 0x00385488, 0x057b: 0x00385688, + 0x057c: 0x00385888, 0x057d: 0x00385a88, 0x057e: 0x00385c88, 0x057f: 0x00385e88, + // Block 0x16, offset 0x580 + 0x0580: 0x00386088, 0x0581: 0x00386288, 0x0582: 0x00386488, 0x0583: 0x00386688, + 0x0584: 0x00386888, 0x0585: 0x00386a88, 0x0586: 0x00386c88, 0x0587: 0x00386e88, + 0x0588: 0x00387088, 0x0589: 0x00387288, 0x058a: 0x00387488, 0x058b: 0x00387688, + 0x058c: 0x00387888, 0x058d: 0x00387a88, 0x058e: 0x00387c88, 0x058f: 0x00387e88, + 0x0590: 0x00388088, 0x0591: 0x00388288, 0x0592: 0x00388488, 0x0593: 0x00388688, + 0x0594: 0x00388888, 0x0595: 0x00388a88, 0x0596: 0x00388c88, + 0x0599: 0x40388e20, 0x059a: 0x40054e20, 0x059b: 0x40055020, + 0x059c: 0x4002be20, 0x059d: 0x40024620, 0x059e: 0x4002ca20, 0x059f: 0x40055220, + 0x05a1: 0x40384220, 0x05a2: 0x40384420, 0x05a3: 0x40384620, + 0x05a4: 0x40384820, 0x05a5: 0x40384a20, 0x05a6: 0x40384c20, 0x05a7: 0x40384e20, + 0x05a8: 0x40385020, 0x05a9: 0x40385220, 0x05aa: 0x40385420, 0x05ab: 0x40385620, + 0x05ac: 0x40385820, 0x05ad: 0x40385a20, 0x05ae: 0x40385c20, 0x05af: 0x40385e20, + 0x05b0: 0x40386020, 0x05b1: 0x40386220, 0x05b2: 0x40386420, 0x05b3: 0x40386620, + 0x05b4: 0x40386820, 0x05b5: 0x40386a20, 0x05b6: 0x40386c20, 0x05b7: 0x40386e20, + 0x05b8: 0x40387020, 0x05b9: 0x40387220, 0x05ba: 0x40387420, 0x05bb: 0x40387620, + 0x05bc: 0x40387820, 0x05bd: 0x40387a20, 0x05be: 0x40387c20, 0x05bf: 0x40387e20, + // Block 0x17, offset 0x5c0 + 0x05c0: 0x40388020, 0x05c1: 0x40388220, 0x05c2: 0x40388420, 0x05c3: 0x40388620, + 0x05c4: 0x40388820, 0x05c5: 0x40388a20, 0x05c6: 0x40388c20, 0x05c7: 0xf0000404, + 0x05c9: 0x40026e20, 0x05ca: 0x40021c20, + 0x05cf: 0x4027e420, + 0x05d1: 0xadc00000, 0x05d2: 0xae600000, 0x05d3: 0xae600000, + 0x05d4: 0xae600000, 0x05d5: 0xae600000, 0x05d6: 0xadc00000, 0x05d7: 0xae600000, + 0x05d8: 0xae600000, 0x05d9: 0xae600000, 0x05da: 0xade00000, 0x05db: 0xadc00000, + 0x05dc: 0xae600000, 0x05dd: 0xae600000, 0x05de: 0xae600000, 0x05df: 0xae600000, + 0x05e0: 0xae600000, 0x05e1: 0xae600000, 0x05e2: 0xadc00000, 0x05e3: 0xadc00000, + 0x05e4: 0xadc00000, 0x05e5: 0xadc00000, 0x05e6: 0xadc00000, 0x05e7: 0xadc00000, + 0x05e8: 0xae600000, 0x05e9: 0xae600000, 0x05ea: 0xadc00000, 0x05eb: 0xae600000, + 0x05ec: 0xae600000, 0x05ed: 0xade00000, 0x05ee: 0xae400000, 0x05ef: 0xae600000, + 0x05f0: 0xa0a08502, 0x05f1: 0xa0b08602, 0x05f2: 0xa0c08702, 0x05f3: 0xa0d08802, + 0x05f4: 0xa0e08902, 0x05f5: 0xa0f08a02, 0x05f6: 0xa1008b02, 0x05f7: 0xa1108c02, + 0x05f8: 0xa1208d02, 0x05f9: 0xa1308e02, 0x05fa: 0xa1308e02, 0x05fb: 0xa1408f02, + 0x05fc: 0xa1509202, 0x05fd: 0xa1600000, 0x05fe: 0x40055420, 0x05ff: 0xa1709502, + // Block 0x18, offset 0x600 + 0x0600: 0x40055620, 0x0601: 0xa1809102, 0x0602: 0xa1909002, 0x0603: 0x40055820, + 0x0604: 0xae600000, 0x0605: 0xadc00000, 0x0606: 0x40055a20, 0x0607: 0xa1208d02, + 0x0610: 0x40389020, 0x0611: 0x40389220, 0x0612: 0x40389420, 0x0613: 0x40389620, + 0x0614: 0x40389820, 0x0615: 0x40389a20, 0x0616: 0x40389c20, 0x0617: 0x40389e20, + 0x0618: 0x4038a020, 0x0619: 0x4038a220, 0x061a: 0x0038a499, 0x061b: 0x4038a420, + 0x061c: 0x4038a620, 0x061d: 0x0038a899, 0x061e: 0x4038a820, 0x061f: 0x0038aa99, + 0x0620: 0x4038aa20, 0x0621: 0x4038ac20, 0x0622: 0x4038ae20, 0x0623: 0x0038b099, + 0x0624: 0x4038b020, 0x0625: 0x0038b299, 0x0626: 0x4038b220, 0x0627: 0x4038b420, + 0x0628: 0x4038b620, 0x0629: 0x4038b820, 0x062a: 0x4038ba20, + 0x0630: 0xe00014ff, 0x0631: 0xe0001502, 0x0632: 0xe0001511, 0x0633: 0x40055c20, + 0x0634: 0x40055e20, + // Block 0x19, offset 0x640 + 0x0640: 0xa0000000, 0x0641: 0xa0000000, 0x0642: 0xa0000000, 0x0643: 0xa0000000, + 0x0644: 0xa0000000, 0x0646: 0x40096620, 0x0647: 0x40096a20, + 0x0648: 0x40070820, 0x0649: 0x4004f220, 0x064a: 0x4004f620, 0x064b: 0x4027e620, + 0x064c: 0x40024820, 0x064d: 0x40024a20, 0x064e: 0x40070e20, 0x064f: 0x40071020, + 0x0650: 0xae600000, 0x0651: 0xae600000, 0x0652: 0xae600000, 0x0653: 0xae600000, + 0x0654: 0xae600000, 0x0655: 0xae600000, 0x0656: 0xae600000, 0x0657: 0xae600000, + 0x0658: 0xa1e00000, 0x0659: 0xa1f00000, 0x065a: 0xa2000000, 0x065b: 0x40026420, + 0x065e: 0x40027020, 0x065f: 0x4002cc20, + 0x0660: 0x403aa220, 0x0661: 0x40391c20, 0x0662: 0x40391e20, 0x0663: 0x40392020, + 0x0664: 0x40392620, 0x0665: 0x40392820, 0x0666: 0x40393020, 0x0667: 0xc0520151, + 0x0668: 0x40393c20, 0x0669: 0x40395420, 0x066a: 0x40395620, 0x066b: 0x40395820, + 0x066c: 0x40396420, 0x066d: 0x40397220, 0x066e: 0x40397420, 0x066f: 0x40398820, + 0x0670: 0x40398a20, 0x0671: 0x4039a420, 0x0672: 0x4039a620, 0x0673: 0x4039c620, + 0x0674: 0x4039c820, 0x0675: 0x4039dc20, 0x0676: 0x4039de20, 0x0677: 0x4039e620, + 0x0678: 0x4039e820, 0x0679: 0x4039ee20, 0x067a: 0x4039f020, 0x067b: 0x403a3820, + 0x067c: 0x403a3a20, 0x067d: 0x403a9c20, 0x067e: 0x403a9e20, 0x067f: 0x403aa020, + // Block 0x1a, offset 0x680 + 0x0680: 0xa0000000, 0x0681: 0x4039fc20, 0x0682: 0x403a1220, 0x0683: 0x403a1a20, + 0x0684: 0x403a4020, 0x0685: 0x403a4e20, 0x0686: 0x403a5620, 0x0687: 0x403a6820, + 0x0688: 0xc0560171, 0x0689: 0x403a8e20, 0x068a: 0xc0580171, 0x068b: 0xa1b0a202, + 0x068c: 0xa1c0a502, 0x068d: 0xa1d0a902, 0x068e: 0xa1e0ad02, 0x068f: 0xa1f0b202, + 0x0690: 0xa200b602, 0x0691: 0xa210ba02, 0x0692: 0xa220bc02, 0x0693: 0xae60bd02, + 0x0694: 0xae60be02, 0x0695: 0xadc0bf02, 0x0696: 0xadc0c102, 0x0697: 0xae60c202, + 0x0698: 0xae60c302, 0x0699: 0xae60c402, 0x069a: 0xae60c502, 0x069b: 0xae60c602, + 0x069c: 0xadc0c702, 0x069d: 0xae60c802, 0x069e: 0xae60c902, 0x069f: 0xadc0c002, + 0x06a0: 0xe000015e, 0x06a1: 0xe00001e6, 0x06a2: 0xe0000301, 0x06a3: 0xe00003db, + 0x06a4: 0xe00004b6, 0x06a5: 0xe0000580, 0x06a6: 0xe000064b, 0x06a7: 0xe00006f3, + 0x06a8: 0xe000079f, 0x06a9: 0xe0000844, 0x06aa: 0x4004ee20, 0x06ab: 0x40024c20, + 0x06ac: 0x40024e20, 0x06ad: 0x4004de20, 0x06ae: 0x40393a20, 0x06af: 0x403a1020, + 0x06b0: 0xa230d102, 0x06b1: 0x40392420, 0x06b2: 0x40392220, 0x06b3: 0x40392a20, + 0x06b4: 0x00391c84, 0x06b5: 0xf0000404, 0x06b6: 0xf0000404, 0x06b7: 0xf0000404, + 0x06b8: 0xf0000404, 0x06b9: 0x40395a20, 0x06ba: 0x40395c20, 0x06bb: 0x40393e20, + 0x06bc: 0x40395e20, 0x06bd: 0x40396020, 0x06be: 0x40394020, 0x06bf: 0x40396220, + // Block 0x1b, offset 0x6c0 + 0x06c0: 0x40394220, 0x06c1: 0x40397620, 0x06c2: 0x40397820, 0x06c3: 0x40396620, + 0x06c4: 0x40396820, 0x06c5: 0x40397a20, 0x06c6: 0x40396a20, 0x06c7: 0x40396e20, + 0x06c8: 0x40398c20, 0x06c9: 0x40398e20, 0x06ca: 0x40399020, 0x06cb: 0x40399220, + 0x06cc: 0x40399420, 0x06cd: 0x40399620, 0x06ce: 0x40399820, 0x06cf: 0x40399a20, + 0x06d0: 0x40399c20, 0x06d1: 0x4039a820, 0x06d2: 0x4039aa20, 0x06d3: 0x4039ac20, + 0x06d4: 0x4039ae20, 0x06d5: 0x4039b020, 0x06d6: 0x4039b220, 0x06d7: 0x4039b420, + 0x06d8: 0x4039b620, 0x06d9: 0x4039b820, 0x06da: 0x4039ca20, 0x06db: 0x4039cc20, + 0x06dc: 0x4039ce20, 0x06dd: 0x4039e020, 0x06de: 0x4039e220, 0x06df: 0x4039ea20, + 0x06e0: 0x4039f220, 0x06e1: 0x4039fe20, 0x06e2: 0x403a0020, 0x06e3: 0x403a0220, + 0x06e4: 0x403a0420, 0x06e5: 0x403a0820, 0x06e6: 0x403a0a20, 0x06e7: 0x403a1420, + 0x06e8: 0x403a1620, 0x06e9: 0x403a1c20, 0x06ea: 0x403a1e20, 0x06eb: 0x403a2020, + 0x06ec: 0x403a2220, 0x06ed: 0x403a2620, 0x06ee: 0x403a2820, 0x06ef: 0x403a2a20, + 0x06f0: 0x403a2c20, 0x06f1: 0x403a2e20, 0x06f2: 0x403a3020, 0x06f3: 0x403a3220, + 0x06f4: 0x403a3420, 0x06f5: 0x403a4220, 0x06f6: 0x403a4420, 0x06f7: 0x403a4620, + 0x06f8: 0x403a4820, 0x06f9: 0x403a6020, 0x06fa: 0x403a5820, 0x06fb: 0x403a5a20, + 0x06fc: 0x403a5c20, 0x06fd: 0x403a5e20, 0x06fe: 0x403a6a20, 0x06ff: 0x40396c20, + // Block 0x1c, offset 0x700 + 0x0700: 0xe00017e4, 0x0701: 0x403a6c20, 0x0702: 0xe00017e1, 0x0703: 0x403a6e20, + 0x0704: 0x403a7620, 0x0705: 0x403a7820, 0x0706: 0x403a7a20, 0x0707: 0x403a7c20, + 0x0708: 0x403a7e20, 0x0709: 0x403a8020, 0x070a: 0x403a8220, 0x070b: 0x403a8420, + 0x070c: 0x403a9220, 0x070d: 0x403a9420, 0x070e: 0x403a9620, 0x070f: 0x403a8620, + 0x0710: 0x403a9820, 0x0711: 0x403a9a20, 0x0712: 0x403aaa20, 0x0713: 0xe0001800, + 0x0714: 0x4002e820, 0x0715: 0x403a7220, 0x0716: 0xae600000, 0x0717: 0xae600000, + 0x0718: 0xae600000, 0x0719: 0xae600000, 0x071a: 0xae600000, 0x071b: 0xae600000, + 0x071c: 0xae600000, 0x071d: 0xa0000000, 0x071e: 0x40071220, 0x071f: 0xae600000, + 0x0720: 0xae600000, 0x0721: 0xae600000, 0x0722: 0xae600000, 0x0723: 0xadc00000, + 0x0724: 0xae600000, 0x0725: 0x003a7484, 0x0726: 0x003a9084, 0x0727: 0xae600000, + 0x0728: 0xae600000, 0x0729: 0x40071420, 0x072a: 0xadc00000, 0x072b: 0xae600000, + 0x072c: 0xae600000, 0x072d: 0xadc00000, 0x072e: 0x40399e20, 0x072f: 0x4039ba20, + 0x0730: 0xe0000161, 0x0731: 0xe00001e9, 0x0732: 0xe0000304, 0x0733: 0xe00003de, + 0x0734: 0xe00004b9, 0x0735: 0xe0000583, 0x0736: 0xe000064e, 0x0737: 0xe00006f6, + 0x0738: 0xe00007a2, 0x0739: 0xe0000847, 0x073a: 0x4039d020, 0x073b: 0x4039e420, + 0x073c: 0x4039f420, 0x073d: 0xe0001553, 0x073e: 0xe0001779, 0x073f: 0x403a7020, + // Block 0x1d, offset 0x740 + 0x0740: 0x40035c20, 0x0741: 0x4002ea20, 0x0742: 0x4002ec20, 0x0743: 0x40027220, + 0x0744: 0x40027420, 0x0745: 0x40027620, 0x0746: 0x40027820, 0x0747: 0x40027a20, + 0x0748: 0x40027c20, 0x0749: 0x4002ce20, 0x074a: 0x40056020, 0x074b: 0x40056220, + 0x074c: 0x40056420, 0x074d: 0x40056620, 0x074f: 0xa0000000, + 0x0750: 0x403ab020, 0x0751: 0xa240d202, 0x0752: 0x403ab220, 0x0753: 0x403ab420, + 0x0754: 0xe0001806, 0x0755: 0x403ab820, 0x0756: 0x403ab620, 0x0757: 0x403aba20, + 0x0758: 0x403abc20, 0x0759: 0x403abe20, 0x075a: 0x403ac220, 0x075b: 0x403ac420, + 0x075c: 0xe000180f, 0x075d: 0x403ac620, 0x075e: 0x403ac820, 0x075f: 0x403aca20, + 0x0760: 0x403ace20, 0x0761: 0x403ad020, 0x0762: 0x403ad220, 0x0763: 0x403ad420, + 0x0764: 0x003ad499, 0x0765: 0x403ad620, 0x0766: 0x403ad820, 0x0767: 0xe0001812, + 0x0768: 0x403adc20, 0x0769: 0x403ade20, 0x076a: 0x403ae020, 0x076b: 0x403ae220, + 0x076c: 0x403ae420, 0x076d: 0xe0001803, 0x076e: 0xe0001809, 0x076f: 0xe000180c, + 0x0770: 0xae60d302, 0x0771: 0xadc0d402, 0x0772: 0xae60d502, 0x0773: 0xae60d602, + 0x0774: 0xadc0d702, 0x0775: 0xae60d802, 0x0776: 0xae60d902, 0x0777: 0xadc0da02, + 0x0778: 0xadc0db02, 0x0779: 0xadc0dc02, 0x077a: 0xae60dd02, 0x077b: 0xadc0de02, + 0x077c: 0xadc0df02, 0x077d: 0xae60e002, 0x077e: 0xadc0e102, 0x077f: 0xae60e202, + // Block 0x1e, offset 0x780 + 0x0780: 0xae600000, 0x0781: 0xae605f02, 0x0782: 0xadc06002, 0x0783: 0xae600000, + 0x0784: 0xadc00000, 0x0785: 0xae605f02, 0x0786: 0xadc06002, 0x0787: 0xae600000, + 0x0788: 0xadc00000, 0x0789: 0xae600000, 0x078a: 0xae600000, + 0x078d: 0x403ac020, 0x078e: 0x403acc20, 0x078f: 0x403ada20, + 0x0790: 0x40394420, 0x0791: 0x40394620, 0x0792: 0x40394820, 0x0793: 0x40394a20, + 0x0794: 0x40394c20, 0x0795: 0x40394e20, 0x0796: 0x40395220, 0x0797: 0x40397c20, + 0x0798: 0x40397e20, 0x0799: 0x4039a020, 0x079a: 0x4039a220, 0x079b: 0x4039bc20, + 0x079c: 0x4039d220, 0x079d: 0x4039f620, 0x079e: 0x4039f820, 0x079f: 0x4039fa20, + 0x07a0: 0x403a0c20, 0x07a1: 0x403a0e20, 0x07a2: 0x403a3620, 0x07a3: 0x403a3c20, + 0x07a4: 0x403a3e20, 0x07a5: 0x403a5020, 0x07a6: 0x403a5220, 0x07a7: 0x403a6220, + 0x07a8: 0x403a6420, 0x07a9: 0x403a6620, 0x07aa: 0x403a4a20, 0x07ab: 0x4039be20, + 0x07ac: 0x4039c020, 0x07ad: 0x4039d420, 0x07ae: 0x40398020, 0x07af: 0x40398220, + 0x07b0: 0x4039d620, 0x07b1: 0x4039c220, 0x07b2: 0x40398420, 0x07b3: 0x40392c20, + 0x07b4: 0x40392e20, 0x07b5: 0x403aa420, 0x07b6: 0x403aa620, 0x07b7: 0x403aa820, + 0x07b8: 0x403a8820, 0x07b9: 0x403a8a20, 0x07ba: 0x403aac20, 0x07bb: 0x403aae20, + 0x07bc: 0x40398620, 0x07bd: 0x4039d820, 0x07be: 0x4039da20, 0x07bf: 0x403a2420, + // Block 0x1f, offset 0x7c0 + 0x07c0: 0x403b1820, 0x07c1: 0x403b1e20, 0x07c2: 0x403b2020, 0x07c3: 0x403b2220, + 0x07c4: 0x403b2620, 0x07c5: 0x403b2820, 0x07c6: 0x403b2a20, 0x07c7: 0x403b2c20, + 0x07c8: 0x403b3220, 0x07c9: 0x403b3620, 0x07ca: 0x403b3820, 0x07cb: 0x403b3a20, + 0x07cc: 0x403b3e20, 0x07cd: 0x403b4620, 0x07ce: 0x403b4820, 0x07cf: 0x403b4c20, + 0x07d0: 0x403b4e20, 0x07d1: 0x403b5620, 0x07d2: 0x403b5820, 0x07d3: 0x403b5a20, + 0x07d4: 0x403b5c20, 0x07d5: 0x403b5e20, 0x07d6: 0x403b6020, 0x07d7: 0x403b6220, + 0x07d8: 0x403b4020, 0x07d9: 0x403b1a20, 0x07da: 0x403b1c20, 0x07db: 0x403b3c20, + 0x07dc: 0x403b2420, 0x07dd: 0x403b5020, 0x07de: 0x403b5220, 0x07df: 0x403b5420, + 0x07e0: 0x403b4220, 0x07e1: 0x403b4420, 0x07e2: 0x403b2e20, 0x07e3: 0x403b3020, + 0x07e4: 0x403b4a20, 0x07e5: 0x403b3420, 0x07e6: 0x403b6620, 0x07e7: 0x403b6820, + 0x07e8: 0x403b6a20, 0x07e9: 0x403b6c20, 0x07ea: 0x403b6e20, 0x07eb: 0x403b7020, + 0x07ec: 0x403b7220, 0x07ed: 0x403b7420, 0x07ee: 0x403b7620, 0x07ef: 0x403b7820, + 0x07f0: 0x403b7a20, 0x07f1: 0x403b6420, + // Block 0x20, offset 0x800 + 0x0800: 0xe0000164, 0x0801: 0xe00001ef, 0x0802: 0xe000030a, 0x0803: 0xe00003e4, + 0x0804: 0xe00004bf, 0x0805: 0xe0000589, 0x0806: 0xe0000654, 0x0807: 0xe00006fc, + 0x0808: 0xe00007a8, 0x0809: 0xe000084d, 0x080a: 0x403b7c20, 0x080b: 0x403b7e20, + 0x080c: 0x403b8020, 0x080d: 0x403b8220, 0x080e: 0x403b8420, 0x080f: 0x403b8620, + 0x0810: 0x403b8820, 0x0811: 0x403b8a20, 0x0812: 0x403b8c20, 0x0813: 0x403b8e20, + 0x0814: 0x403b9020, 0x0815: 0x403b9220, 0x0816: 0x403b9420, 0x0817: 0x403b9620, + 0x0818: 0x403b9820, 0x0819: 0x403b9a20, 0x081a: 0x403b9c20, 0x081b: 0x403b9e20, + 0x081c: 0x403ba020, 0x081d: 0x403ba220, 0x081e: 0x403ba420, 0x081f: 0x403ba620, + 0x0820: 0x403ba820, 0x0821: 0x403baa20, 0x0822: 0x403bac20, 0x0823: 0x403bae20, + 0x0824: 0x403bb020, 0x0825: 0x403bb220, 0x0826: 0x403bb420, 0x0827: 0x403bb620, + 0x0828: 0xe0001815, 0x0829: 0xe0001818, 0x082a: 0xe000181b, 0x082b: 0xae60e302, + 0x082c: 0xae60e402, 0x082d: 0xae60e502, 0x082e: 0xae60e602, 0x082f: 0xae60e702, + 0x0830: 0xae60e802, 0x0831: 0xae60e902, 0x0832: 0xadc0ea02, 0x0833: 0xae60eb02, + 0x0834: 0x403bb820, 0x0835: 0x403bba20, 0x0836: 0x40073820, 0x0837: 0x40035e20, + 0x0838: 0x40025020, 0x0839: 0x4002c020, 0x083a: 0xa0000000, + // Block 0x21, offset 0x840 + 0x0840: 0x4038e820, 0x0841: 0x4038ea20, 0x0842: 0x4038ec20, 0x0843: 0x4038ee20, + 0x0844: 0x4038f020, 0x0845: 0x4038f220, 0x0846: 0x4038f420, 0x0847: 0x4038f620, + 0x0848: 0x4038f820, 0x0849: 0x4038fa20, 0x084a: 0x4038fc20, 0x084b: 0x4038fe20, + 0x084c: 0x40390020, 0x084d: 0x40390220, 0x084e: 0x40390420, 0x084f: 0x40390620, + 0x0850: 0x40390820, 0x0851: 0x40390a20, 0x0852: 0x40390c20, 0x0853: 0x40390e20, + 0x0854: 0x40391020, 0x0855: 0x40391220, 0x0856: 0x82e61c8a, 0x0857: 0x82e61c8b, + 0x0858: 0xae609f02, 0x0859: 0xae60a002, 0x085a: 0x40391820, 0x085b: 0x82e61c8d, + 0x085c: 0xae609702, 0x085d: 0xae609702, 0x085e: 0xae609802, 0x085f: 0xae609802, + 0x0860: 0xae609802, 0x0861: 0xae609902, 0x0862: 0xae609902, 0x0863: 0xae609902, + 0x0864: 0xa0009a02, 0x0865: 0xae609a02, 0x0866: 0xae609b02, 0x0867: 0xae609b02, + 0x0868: 0xa0009c02, 0x0869: 0xae609c02, 0x086a: 0xae609c02, 0x086b: 0xae609d02, + 0x086c: 0xae609e02, 0x086d: 0xae60a102, + 0x0870: 0x40027e20, 0x0871: 0x40028020, 0x0872: 0x40028220, 0x0873: 0x40028420, + 0x0874: 0x40028620, 0x0875: 0x40028820, 0x0876: 0x40028a20, 0x0877: 0x40028c20, + 0x0878: 0x40028e20, 0x0879: 0x40029020, 0x087a: 0x40029220, 0x087b: 0x40029420, + 0x087c: 0x40029620, 0x087d: 0x40029820, 0x087e: 0x40029a20, + // Block 0x22, offset 0x880 + 0x0880: 0x403ae620, 0x0881: 0x403ae820, 0x0882: 0x403aea20, 0x0883: 0x403aec20, + 0x0884: 0x403aee20, 0x0885: 0x403af020, 0x0886: 0x403af220, 0x0887: 0x403af420, + 0x0888: 0x403af620, 0x0889: 0x403af820, 0x088a: 0x403afa20, 0x088b: 0x403afc20, + 0x088c: 0x403afe20, 0x088d: 0x403b0020, 0x088e: 0x403b0220, 0x088f: 0x403b0420, + 0x0890: 0x403b0620, 0x0891: 0x403b0820, 0x0892: 0x403b0a20, 0x0893: 0x403b0c20, + 0x0894: 0x403b0e20, 0x0895: 0x403b1020, 0x0896: 0x403b1220, 0x0897: 0x403b1420, + 0x0898: 0x403b1620, 0x0899: 0xadc06002, 0x089a: 0xadc06002, 0x089b: 0xadc06002, + 0x089e: 0x40056820, + // Block 0x23, offset 0x8c0 + 0x08e0: 0x40395020, 0x08e2: 0x40397020, 0x08e3: 0x4039ec20, + 0x08e4: 0x403a0620, 0x08e5: 0x403a1820, 0x08e6: 0x403a4c20, 0x08e7: 0x403a5420, + 0x08e8: 0x40393220, 0x08e9: 0x40393420, 0x08ea: 0x4039c420, 0x08eb: 0x403a8c20, + 0x08ec: 0x40393620, + // Block 0x24, offset 0x900 + 0x0924: 0xae60af02, 0x0925: 0xae60b402, 0x0926: 0xadc0b802, 0x0927: 0xae60a402, + 0x0928: 0xae60a802, 0x0929: 0xadc0ac02, 0x092a: 0xae600000, 0x092b: 0xae600000, + 0x092c: 0xae600000, 0x092d: 0xadc00000, 0x092e: 0xadc00000, 0x092f: 0xadc00000, + 0x0930: 0xa1b0a302, 0x0931: 0xa1c0a702, 0x0932: 0xa1d0ab02, 0x0933: 0xae600000, + 0x0934: 0xae60b002, 0x0935: 0xae60b102, 0x0936: 0xadc0b902, 0x0937: 0xae60ca02, + 0x0938: 0xae60cb02, 0x0939: 0xadc0cf02, 0x093a: 0xadc0d002, 0x093b: 0xae60cd02, + 0x093c: 0xae60ce02, 0x093d: 0xae60cc02, 0x093e: 0xae60b502, + // Block 0x25, offset 0x940 + 0x0940: 0xa000f202, 0x0941: 0xa000f202, 0x0942: 0xa000f302, 0x0943: 0xa000f402, + 0x0944: 0x403fbc20, 0x0945: 0x403fbe20, 0x0946: 0x403fc020, 0x0947: 0x403fcc20, + 0x0948: 0x403fce20, 0x0949: 0x403fd020, 0x094a: 0x403fd220, 0x094b: 0x403fd420, + 0x094c: 0x403fd820, 0x094d: 0x403fdc20, 0x094e: 0x403fde20, 0x094f: 0x403fe020, + 0x0950: 0x403fe220, 0x0951: 0x403fe420, 0x0952: 0x403fe620, 0x0953: 0x403fe820, + 0x0954: 0x403fea20, 0x0955: 0x403fec20, 0x0956: 0x403fee20, 0x0957: 0x403ff020, + 0x0958: 0x403ff420, 0x0959: 0x403ff620, 0x095a: 0x403ff820, 0x095b: 0x403ffa20, + 0x095c: 0x403ffc20, 0x095d: 0x40400220, 0x095e: 0x40400420, 0x095f: 0x40400620, + 0x0960: 0x40400820, 0x0961: 0x40400a20, 0x0962: 0x40400e20, 0x0963: 0x40401020, + 0x0964: 0x40401220, 0x0965: 0x40401420, 0x0966: 0x40401620, 0x0967: 0x40401820, + 0x0968: 0x40401a20, 0x0969: 0xe0001830, 0x096a: 0x40401c20, 0x096b: 0x40401e20, + 0x096c: 0x40402020, 0x096d: 0x40402420, 0x096e: 0x40402620, 0x096f: 0x40402820, + 0x0970: 0x40402c20, 0x0971: 0xe0001839, 0x0972: 0x40402e20, 0x0973: 0x40403020, + 0x0974: 0xe000183c, 0x0975: 0x40403220, 0x0976: 0x40403420, 0x0977: 0x40403620, + 0x0978: 0x40403820, 0x0979: 0x40403a20, 0x097a: 0x40404c20, 0x097b: 0x40404e20, + 0x097c: 0xa070f102, 0x097d: 0x40403c20, 0x097e: 0x40404a20, 0x097f: 0x40405620, + // Block 0x26, offset 0x980 + 0x0980: 0x40405820, 0x0981: 0x40405a20, 0x0982: 0x40405c20, 0x0983: 0x40405e20, + 0x0984: 0x40406020, 0x0985: 0x40406620, 0x0986: 0x40406a20, 0x0987: 0x40406c20, + 0x0988: 0x40407020, 0x0989: 0x40407220, 0x098a: 0x40407420, 0x098b: 0x40407620, + 0x098c: 0x40407820, 0x098d: 0x8209203d, 0x098e: 0x40406e20, 0x098f: 0x40405020, + 0x0990: 0x403fb820, 0x0991: 0xae600000, 0x0992: 0xadc00000, 0x0993: 0xae603502, + 0x0994: 0xae603202, 0x0995: 0x40406820, 0x0996: 0x40405220, 0x0997: 0x40405420, + 0x0998: 0xe000181e, 0x0999: 0xe0001821, 0x099a: 0xe0001824, 0x099b: 0xe0001827, + 0x099c: 0xe000182a, 0x099d: 0xe000182d, 0x099e: 0xe0001833, 0x099f: 0xe0001836, + 0x09a0: 0x403fd620, 0x09a1: 0x403fda20, 0x09a2: 0x40406220, 0x09a3: 0x40406420, + 0x09a4: 0x40030c20, 0x09a5: 0x40030e20, 0x09a6: 0xe000016a, 0x09a7: 0xe00001f8, + 0x09a8: 0xe0000313, 0x09a9: 0xe00003ed, 0x09aa: 0xe00004c8, 0x09ab: 0xe0000592, + 0x09ac: 0xe000065d, 0x09ad: 0xe0000705, 0x09ae: 0xe00007b1, 0x09af: 0xe0000856, + 0x09b0: 0x40056c20, 0x09b1: 0x4027b620, 0x09b2: 0x403fba20, 0x09b3: 0x403fc220, + 0x09b4: 0x403fc420, 0x09b5: 0x403fc620, 0x09b6: 0x403fc820, 0x09b7: 0x403fca20, + 0x09b9: 0x403ffe20, 0x09ba: 0x40402a20, 0x09bb: 0x403ff220, + 0x09bc: 0x40400020, 0x09bd: 0x40403e20, 0x09be: 0x40400c20, 0x09bf: 0x40402220, + // Block 0x27, offset 0x9c0 + 0x09c1: 0xa000f202, 0x09c2: 0xa000f302, 0x09c3: 0xa000f402, + 0x09c5: 0x40407c20, 0x09c6: 0x40407e20, 0x09c7: 0x40408020, + 0x09c8: 0x40408220, 0x09c9: 0x40408420, 0x09ca: 0x40408620, 0x09cb: 0x40408820, + 0x09cc: 0x40408c20, 0x09cf: 0x40409020, + 0x09d0: 0x40409220, 0x09d3: 0x40409420, + 0x09d4: 0x40409620, 0x09d5: 0x40409820, 0x09d6: 0x40409a20, 0x09d7: 0x40409c20, + 0x09d8: 0x40409e20, 0x09d9: 0x4040a020, 0x09da: 0x4040a220, 0x09db: 0x4040a420, + 0x09dc: 0x4040a620, 0x09dd: 0x4040a820, 0x09de: 0x4040aa20, 0x09df: 0x4040ac20, + 0x09e0: 0x4040ae20, 0x09e1: 0x4040b020, 0x09e2: 0x4040b220, 0x09e3: 0x4040b420, + 0x09e4: 0x4040b620, 0x09e5: 0x4040b820, 0x09e6: 0x4040ba20, 0x09e7: 0x4040bc20, + 0x09e8: 0x4040be20, 0x09ea: 0x4040c020, 0x09eb: 0x4040c220, + 0x09ec: 0x4040c420, 0x09ed: 0x4040c620, 0x09ee: 0x4040c820, 0x09ef: 0x4040ca20, + 0x09f0: 0x4040cc20, 0x09f2: 0x4040d020, + 0x09f6: 0x4040d420, 0x09f7: 0x4040d620, + 0x09f8: 0x4040d820, 0x09f9: 0x4040da20, + 0x09fc: 0xa070f102, 0x09fd: 0x4040dc20, 0x09fe: 0x4040de20, 0x09ff: 0x4040e020, + // Block 0x28, offset 0xa00 + 0x0a00: 0x4040e220, 0x0a01: 0x4040e420, 0x0a02: 0x4040e620, 0x0a03: 0x4040e820, + 0x0a04: 0x4040ea20, 0x0a07: 0xc05a0191, + 0x0a08: 0x4040f220, 0x0a0b: 0x4040f420, + 0x0a0c: 0x4040f620, 0x0a0d: 0x8209207c, 0x0a0e: 0xe0001845, + 0x0a17: 0x4040fa20, + 0x0a1c: 0xe000183f, 0x0a1d: 0xe0001842, 0x0a1f: 0xe0001848, + 0x0a20: 0x40408a20, 0x0a21: 0x40408e20, 0x0a22: 0x4040ec20, 0x0a23: 0x4040ee20, + 0x0a26: 0xe000016d, 0x0a27: 0xe00001fb, + 0x0a28: 0xe0000316, 0x0a29: 0xe00003f0, 0x0a2a: 0xe00004cb, 0x0a2b: 0xe0000595, + 0x0a2c: 0xe0000660, 0x0a2d: 0xe0000708, 0x0a2e: 0xe00007b4, 0x0a2f: 0xe0000859, + 0x0a30: 0x4040ce20, 0x0a31: 0x4040d220, 0x0a32: 0x4027e820, 0x0a33: 0x4027ea20, + 0x0a34: 0x40283020, 0x0a35: 0x40283220, 0x0a36: 0x40283420, 0x0a37: 0x40283620, + 0x0a38: 0x40283820, 0x0a39: 0x40283a20, 0x0a3a: 0x40073a20, 0x0a3b: 0x4027ec20, + // Block 0x29, offset 0xa40 + 0x0a41: 0xa000f202, 0x0a42: 0xa000f302, 0x0a43: 0xa000f402, + 0x0a45: 0x40410620, 0x0a46: 0x40410820, 0x0a47: 0x40411020, + 0x0a48: 0x40411220, 0x0a49: 0x40410020, 0x0a4a: 0x40410220, + 0x0a4f: 0x40411420, + 0x0a50: 0x40410a20, 0x0a53: 0x40410420, + 0x0a54: 0x40410c20, 0x0a55: 0x40411c20, 0x0a56: 0x40411e20, 0x0a57: 0x40412020, + 0x0a58: 0x40412220, 0x0a59: 0x40412420, 0x0a5a: 0x40412620, 0x0a5b: 0x40412820, + 0x0a5c: 0x40412a20, 0x0a5d: 0x40412c20, 0x0a5e: 0x40412e20, 0x0a5f: 0x40413020, + 0x0a60: 0x40413220, 0x0a61: 0x40413420, 0x0a62: 0x40413620, 0x0a63: 0x40413820, + 0x0a64: 0x40413a20, 0x0a65: 0x40413c20, 0x0a66: 0x40413e20, 0x0a67: 0x40414020, + 0x0a68: 0x40414220, 0x0a6a: 0x40414420, 0x0a6b: 0x40414620, + 0x0a6c: 0x40414820, 0x0a6d: 0x40414a20, 0x0a6e: 0x40414c20, 0x0a6f: 0x40414e20, + 0x0a70: 0x40415220, 0x0a72: 0x40415420, 0x0a73: 0xe000185a, + 0x0a75: 0x40415620, 0x0a76: 0xe000184b, + 0x0a78: 0x40411620, 0x0a79: 0x40411820, + 0x0a7c: 0xa070f102, 0x0a7e: 0x40415a20, 0x0a7f: 0x40415c20, + // Block 0x2a, offset 0xa80 + 0x0a80: 0x40415e20, 0x0a81: 0x40416020, 0x0a82: 0x40416220, + 0x0a87: 0x40416420, + 0x0a88: 0x40416620, 0x0a8b: 0x40416820, + 0x0a8c: 0x40416a20, 0x0a8d: 0x820920b6, + 0x0a91: 0x40411a20, + 0x0a99: 0xe000184e, 0x0a9a: 0xe0001851, 0x0a9b: 0xe0001854, + 0x0a9c: 0x40415820, 0x0a9e: 0xe0001857, + 0x0aa6: 0xe0000170, 0x0aa7: 0xe00001fe, + 0x0aa8: 0xe0000319, 0x0aa9: 0xe00003f3, 0x0aaa: 0xe00004ce, 0x0aab: 0xe0000598, + 0x0aac: 0xe0000663, 0x0aad: 0xe000070b, 0x0aae: 0xe00007b7, 0x0aaf: 0xe000085c, + 0x0ab0: 0xa000f502, 0x0ab1: 0xa000f602, 0x0ab2: 0x40410e20, 0x0ab3: 0x4040fe20, + 0x0ab4: 0x4040fc20, 0x0ab5: 0x40415020, + // Block 0x2b, offset 0xac0 + 0x0ac1: 0xa000f202, 0x0ac2: 0xa000f302, 0x0ac3: 0xa000f402, + 0x0ac5: 0x40417020, 0x0ac6: 0x40417220, 0x0ac7: 0x40417420, + 0x0ac8: 0x40417620, 0x0ac9: 0x40417820, 0x0aca: 0x40417a20, 0x0acb: 0x40417c20, + 0x0acc: 0x40418020, 0x0acd: 0x40418420, 0x0acf: 0x40418620, + 0x0ad0: 0x40418820, 0x0ad1: 0x40418a20, 0x0ad3: 0x40418c20, + 0x0ad4: 0x40418e20, 0x0ad5: 0x40419020, 0x0ad6: 0x40419220, 0x0ad7: 0x40419420, + 0x0ad8: 0x40419620, 0x0ad9: 0x40419820, 0x0ada: 0x40419a20, 0x0adb: 0x40419c20, + 0x0adc: 0x40419e20, 0x0add: 0x4041a020, 0x0ade: 0x4041a220, 0x0adf: 0x4041a420, + 0x0ae0: 0x4041a620, 0x0ae1: 0x4041a820, 0x0ae2: 0x4041aa20, 0x0ae3: 0x4041ac20, + 0x0ae4: 0x4041ae20, 0x0ae5: 0x4041b020, 0x0ae6: 0x4041b220, 0x0ae7: 0x4041b420, + 0x0ae8: 0x4041b620, 0x0aea: 0x4041b820, 0x0aeb: 0x4041ba20, + 0x0aec: 0x4041bc20, 0x0aed: 0x4041be20, 0x0aee: 0x4041c020, 0x0aef: 0x4041c220, + 0x0af0: 0x4041c420, 0x0af2: 0x4041c620, 0x0af3: 0x4041d220, + 0x0af5: 0x4041c820, 0x0af6: 0x4041ca20, 0x0af7: 0x4041cc20, + 0x0af8: 0x4041ce20, 0x0af9: 0x4041d020, + 0x0afc: 0xa070f102, 0x0afd: 0x4041d420, 0x0afe: 0x4041d620, 0x0aff: 0x4041d820, + // Block 0x2c, offset 0xb00 + 0x0b00: 0x4041da20, 0x0b01: 0x4041dc20, 0x0b02: 0x4041de20, 0x0b03: 0x4041e020, + 0x0b04: 0x4041e220, 0x0b05: 0x4041e820, 0x0b07: 0x4041ea20, + 0x0b08: 0x4041ec20, 0x0b09: 0x4041ee20, 0x0b0b: 0x4041f020, + 0x0b0c: 0x4041f220, 0x0b0d: 0x820920fa, + 0x0b10: 0x40416e20, + 0x0b20: 0x40417e20, 0x0b21: 0x40418220, 0x0b22: 0x4041e420, 0x0b23: 0x4041e620, + 0x0b26: 0xe0000173, 0x0b27: 0xe0000201, + 0x0b28: 0xe000031c, 0x0b29: 0xe00003f6, 0x0b2a: 0xe00004d1, 0x0b2b: 0xe000059b, + 0x0b2c: 0xe0000666, 0x0b2d: 0xe000070e, 0x0b2e: 0xe00007ba, 0x0b2f: 0xe000085f, + 0x0b30: 0x40057420, 0x0b31: 0x4027ee20, + // Block 0x2d, offset 0xb40 + 0x0b41: 0xa000f202, 0x0b42: 0xa000f302, 0x0b43: 0xa000f402, + 0x0b45: 0x4041f620, 0x0b46: 0x4041f820, 0x0b47: 0x4041fa20, + 0x0b48: 0x4041fc20, 0x0b49: 0x4041fe20, 0x0b4a: 0x40420020, 0x0b4b: 0x40420220, + 0x0b4c: 0x40420620, 0x0b4f: 0x40420a20, + 0x0b50: 0x40420c20, 0x0b53: 0x40420e20, + 0x0b54: 0x40421020, 0x0b55: 0x40421220, 0x0b56: 0x40421420, 0x0b57: 0x40421620, + 0x0b58: 0x40421820, 0x0b59: 0x40421a20, 0x0b5a: 0x40421c20, 0x0b5b: 0x40421e20, + 0x0b5c: 0x40422020, 0x0b5d: 0x40422220, 0x0b5e: 0x40422420, 0x0b5f: 0x40422620, + 0x0b60: 0x40422820, 0x0b61: 0x40422a20, 0x0b62: 0x40422c20, 0x0b63: 0x40422e20, + 0x0b64: 0x40423020, 0x0b65: 0x40423220, 0x0b66: 0x40423420, 0x0b67: 0x40423620, + 0x0b68: 0x40423820, 0x0b6a: 0x40423a20, 0x0b6b: 0x40423c20, + 0x0b6c: 0x40423e20, 0x0b6d: 0x40424020, 0x0b6e: 0x40424220, 0x0b6f: 0x40424420, + 0x0b70: 0x40424820, 0x0b72: 0x40424a20, 0x0b73: 0x40424c20, + 0x0b75: 0x40424e20, 0x0b76: 0x40425220, 0x0b77: 0x40425420, + 0x0b78: 0x40425620, 0x0b79: 0x40425820, + 0x0b7c: 0xa070f102, 0x0b7d: 0x40425a20, 0x0b7e: 0x40425c20, 0x0b7f: 0x40425e20, + // Block 0x2e, offset 0xb80 + 0x0b80: 0x40426020, 0x0b81: 0x40426220, 0x0b82: 0x40426420, 0x0b83: 0x40426620, + 0x0b84: 0x40426820, 0x0b87: 0xc05d01e1, + 0x0b88: 0x40427020, 0x0b8b: 0x40427220, + 0x0b8c: 0x40427420, 0x0b8d: 0x8209213b, + 0x0b96: 0x40427820, 0x0b97: 0x40427a20, + 0x0b9c: 0xe000185d, 0x0b9d: 0xe0001860, 0x0b9f: 0x40424620, + 0x0ba0: 0x40420420, 0x0ba1: 0x40420820, 0x0ba2: 0x40426a20, 0x0ba3: 0x40426c20, + 0x0ba6: 0xe0000176, 0x0ba7: 0xe0000204, + 0x0ba8: 0xe000031f, 0x0ba9: 0xe00003f9, 0x0baa: 0xe00004d4, 0x0bab: 0xe000059e, + 0x0bac: 0xe0000669, 0x0bad: 0xe0000711, 0x0bae: 0xe00007bd, 0x0baf: 0xe0000862, + 0x0bb0: 0x40073c20, 0x0bb1: 0x40425020, 0x0bb2: 0x40283c20, 0x0bb3: 0x40283e20, + 0x0bb4: 0x40284020, 0x0bb5: 0x40284220, 0x0bb6: 0x40284420, 0x0bb7: 0x40284620, + // Block 0x2f, offset 0xbc0 + 0x0bc2: 0xa000f302, 0x0bc3: 0x40429620, + 0x0bc5: 0x40427e20, 0x0bc6: 0x40428020, 0x0bc7: 0x40428220, + 0x0bc8: 0x40428420, 0x0bc9: 0x40428620, 0x0bca: 0x40428820, + 0x0bce: 0x40428a20, 0x0bcf: 0x40428c20, + 0x0bd0: 0x40428e20, 0x0bd2: 0xc0610231, 0x0bd3: 0x40429220, + 0x0bd4: 0x40429420, 0x0bd5: 0x40429820, + 0x0bd9: 0x40429a20, 0x0bda: 0x40429c20, + 0x0bdc: 0x4042bc20, 0x0bde: 0x40429e20, 0x0bdf: 0x4042a020, + 0x0be3: 0x4042a220, + 0x0be4: 0x4042a420, + 0x0be8: 0x4042a620, 0x0be9: 0x4042ba20, 0x0bea: 0x4042a820, + 0x0bee: 0x4042aa20, 0x0bef: 0x4042ac20, + 0x0bf0: 0x4042ae20, 0x0bf1: 0x4042b820, 0x0bf2: 0x4042b020, 0x0bf3: 0x4042b620, + 0x0bf4: 0x4042b420, 0x0bf5: 0x4042b220, 0x0bf6: 0x4042be20, 0x0bf7: 0x4042c020, + 0x0bf8: 0x4042c220, 0x0bf9: 0x4042c420, + 0x0bfe: 0x4042c620, 0x0bff: 0x4042c820, + // Block 0x30, offset 0xc00 + 0x0c00: 0x4042ca20, 0x0c01: 0x4042cc20, 0x0c02: 0x4042ce20, + 0x0c06: 0xc0630261, 0x0c07: 0xc06602b1, + 0x0c08: 0x4042d420, 0x0c0a: 0x4042d620, 0x0c0b: 0x4042d820, + 0x0c0c: 0x4042da20, 0x0c0d: 0x8209216e, + 0x0c10: 0x40427c20, + 0x0c17: 0x4042de20, + 0x0c26: 0xe0000179, 0x0c27: 0xe0000207, + 0x0c28: 0xe0000322, 0x0c29: 0xe00003fc, 0x0c2a: 0xe00004d7, 0x0c2b: 0xe00005a1, + 0x0c2c: 0xe000066c, 0x0c2d: 0xe0000714, 0x0c2e: 0xe00007c0, 0x0c2f: 0xe0000865, + 0x0c30: 0x40285420, 0x0c31: 0x40285620, 0x0c32: 0x40285820, 0x0c33: 0x40073e20, + 0x0c34: 0x40074020, 0x0c35: 0x40074220, 0x0c36: 0x40074420, 0x0c37: 0x40074620, + 0x0c38: 0x40074820, 0x0c39: 0x4027f220, 0x0c3a: 0x40074a20, + // Block 0x31, offset 0xc40 + 0x0c41: 0xa000f202, 0x0c42: 0xa000f302, 0x0c43: 0xa000f402, + 0x0c45: 0x4042e020, 0x0c46: 0x4042e220, 0x0c47: 0x4042e420, + 0x0c48: 0x4042e620, 0x0c49: 0x4042e820, 0x0c4a: 0x4042ea20, 0x0c4b: 0x4042ec20, + 0x0c4c: 0x4042f020, 0x0c4e: 0x4042f420, 0x0c4f: 0x4042f620, + 0x0c50: 0x4042f820, 0x0c52: 0x4042fa20, 0x0c53: 0x4042fc20, + 0x0c54: 0x4042fe20, 0x0c55: 0x40430020, 0x0c56: 0x40430220, 0x0c57: 0x40430420, + 0x0c58: 0x40430620, 0x0c59: 0x40430820, 0x0c5a: 0x40430a20, 0x0c5b: 0x40430e20, + 0x0c5c: 0x40431020, 0x0c5d: 0x40431420, 0x0c5e: 0x40431620, 0x0c5f: 0x40431820, + 0x0c60: 0x40431a20, 0x0c61: 0x40431c20, 0x0c62: 0x40431e20, 0x0c63: 0x40432020, + 0x0c64: 0x40432220, 0x0c65: 0x40432420, 0x0c66: 0x40432620, 0x0c67: 0x40432820, + 0x0c68: 0x40432a20, 0x0c6a: 0x40432c20, 0x0c6b: 0x40432e20, + 0x0c6c: 0x40433020, 0x0c6d: 0x40433220, 0x0c6e: 0x40433420, 0x0c6f: 0x40433620, + 0x0c70: 0x40433820, 0x0c71: 0x40433a20, 0x0c72: 0x40433c20, 0x0c73: 0x40434820, + 0x0c75: 0x40433e20, 0x0c76: 0x40434020, 0x0c77: 0x40434220, + 0x0c78: 0x40434420, 0x0c79: 0x40434620, + 0x0c7d: 0x40434a20, 0x0c7e: 0x40434c20, 0x0c7f: 0x40434e20, + // Block 0x32, offset 0xc80 + 0x0c80: 0x40435020, 0x0c81: 0x40435220, 0x0c82: 0x40435420, 0x0c83: 0x40435620, + 0x0c84: 0x40435820, 0x0c86: 0xc06802e1, 0x0c87: 0x40436020, + 0x0c88: 0x40436220, 0x0c8a: 0x40436420, 0x0c8b: 0x40436620, + 0x0c8c: 0x40436820, 0x0c8d: 0x820921b5, + 0x0c95: 0x825421b6, 0x0c96: 0x825b21b7, + 0x0c98: 0x40430c20, 0x0c99: 0x40431220, + 0x0ca0: 0x4042ee20, 0x0ca1: 0x4042f220, 0x0ca2: 0x40435a20, 0x0ca3: 0x40435c20, + 0x0ca6: 0xe000017c, 0x0ca7: 0xe000020a, + 0x0ca8: 0xe0000325, 0x0ca9: 0xe00003ff, 0x0caa: 0xe00004da, 0x0cab: 0xe00005a4, + 0x0cac: 0xe000066f, 0x0cad: 0xe0000717, 0x0cae: 0xe00007c3, 0x0caf: 0xe0000868, + 0x0cb8: 0xe000017f, 0x0cb9: 0xe000020d, 0x0cba: 0xe0000328, 0x0cbb: 0xe0000402, + 0x0cbc: 0xe0000210, 0x0cbd: 0xe000032b, 0x0cbe: 0xe0000405, 0x0cbf: 0x40074c20, + // Block 0x33, offset 0xcc0 + 0x0cc2: 0xa000f302, 0x0cc3: 0xa000f402, + 0x0cc5: 0x40437020, 0x0cc6: 0x40437220, 0x0cc7: 0x40437420, + 0x0cc8: 0x40437620, 0x0cc9: 0x40437820, 0x0cca: 0x40437a20, 0x0ccb: 0x40437c20, + 0x0ccc: 0x40438020, 0x0cce: 0x40438420, 0x0ccf: 0x40438620, + 0x0cd0: 0x40438820, 0x0cd2: 0x40438a20, 0x0cd3: 0x40438c20, + 0x0cd4: 0x40438e20, 0x0cd5: 0x40439020, 0x0cd6: 0x40439220, 0x0cd7: 0x40439420, + 0x0cd8: 0x40439620, 0x0cd9: 0x40439820, 0x0cda: 0x40439a20, 0x0cdb: 0x40439c20, + 0x0cdc: 0x40439e20, 0x0cdd: 0x4043a020, 0x0cde: 0x4043a220, 0x0cdf: 0x4043a420, + 0x0ce0: 0x4043a620, 0x0ce1: 0x4043a820, 0x0ce2: 0x4043aa20, 0x0ce3: 0x4043ac20, + 0x0ce4: 0x4043ae20, 0x0ce5: 0x4043b020, 0x0ce6: 0x4043b220, 0x0ce7: 0x4043b420, + 0x0ce8: 0x4043b620, 0x0cea: 0x4043b820, 0x0ceb: 0x4043ba20, + 0x0cec: 0x4043bc20, 0x0ced: 0x4043be20, 0x0cee: 0x4043c020, 0x0cef: 0x4043c220, + 0x0cf0: 0x4043c420, 0x0cf1: 0x4043c620, 0x0cf2: 0x4043c820, 0x0cf3: 0x4043d420, + 0x0cf5: 0x4043ca20, 0x0cf6: 0x4043cc20, 0x0cf7: 0x4043ce20, + 0x0cf8: 0x4043d020, 0x0cf9: 0x4043d220, + 0x0cfc: 0xa070f102, 0x0cfd: 0x4043d820, 0x0cfe: 0x4043de20, 0x0cff: 0xc06a0311, + // Block 0x34, offset 0xd00 + 0x0d00: 0x4043e220, 0x0d01: 0x4043e420, 0x0d02: 0x4043e620, 0x0d03: 0x4043e820, + 0x0d04: 0x4043ea20, 0x0d06: 0xc06c0341, 0x0d07: 0x4043f220, + 0x0d08: 0x4043f420, 0x0d0a: 0xc0710311, 0x0d0b: 0x4043f820, + 0x0d0c: 0x4043fa20, 0x0d0d: 0x820921fe, + 0x0d15: 0x4043fe20, 0x0d16: 0x40440020, + 0x0d1e: 0x4043d620, + 0x0d20: 0x40437e20, 0x0d21: 0x40438220, 0x0d22: 0x4043ec20, 0x0d23: 0x4043ee20, + 0x0d26: 0xe0000182, 0x0d27: 0xe0000213, + 0x0d28: 0xe000032e, 0x0d29: 0xe0000408, 0x0d2a: 0xe00004dd, 0x0d2b: 0xe00005a7, + 0x0d2c: 0xe0000672, 0x0d2d: 0xe000071a, 0x0d2e: 0xe00007c6, 0x0d2f: 0xe000086b, + 0x0d31: 0x4043da20, 0x0d32: 0x4043dc20, + // Block 0x35, offset 0xd40 + 0x0d42: 0xa000f302, 0x0d43: 0xa000f402, + 0x0d45: 0x40440220, 0x0d46: 0x40440420, 0x0d47: 0x40440620, + 0x0d48: 0x40440820, 0x0d49: 0x40440a20, 0x0d4a: 0x40440c20, 0x0d4b: 0x40440e20, + 0x0d4c: 0x40441220, 0x0d4e: 0x40441620, 0x0d4f: 0x40441820, + 0x0d50: 0x40441a20, 0x0d52: 0x40441c20, 0x0d53: 0x40441e20, + 0x0d54: 0x40442020, 0x0d55: 0x40442220, 0x0d56: 0x40442420, 0x0d57: 0x40442620, + 0x0d58: 0x40442820, 0x0d59: 0x40442a20, 0x0d5a: 0x40442c20, 0x0d5b: 0x40442e20, + 0x0d5c: 0x40443020, 0x0d5d: 0x40443220, 0x0d5e: 0x40443420, 0x0d5f: 0x40443620, + 0x0d60: 0x40443820, 0x0d61: 0x40443a20, 0x0d62: 0x40443c20, 0x0d63: 0x40443e20, + 0x0d64: 0x40444020, 0x0d65: 0x40444220, 0x0d66: 0x40444420, 0x0d67: 0x40444620, + 0x0d68: 0x40444820, 0x0d69: 0x40444a20, 0x0d6a: 0x40444c20, 0x0d6b: 0x40444e20, + 0x0d6c: 0x40445020, 0x0d6d: 0x40445220, 0x0d6e: 0x40445420, 0x0d6f: 0x40445620, + 0x0d70: 0x40445820, 0x0d71: 0x40446a20, 0x0d72: 0x40445a20, 0x0d73: 0x40446620, + 0x0d74: 0x40446820, 0x0d75: 0x40445c20, 0x0d76: 0x40445e20, 0x0d77: 0x40446020, + 0x0d78: 0x40446220, 0x0d79: 0x40446420, 0x0d7a: 0x40446c20, + 0x0d7d: 0x40446e20, 0x0d7e: 0x40447020, 0x0d7f: 0x40447220, + // Block 0x36, offset 0xd80 + 0x0d80: 0x40447420, 0x0d81: 0x40447620, 0x0d82: 0x40447820, 0x0d83: 0x40447a20, + 0x0d84: 0x40447c20, 0x0d86: 0xc07303b1, 0x0d87: 0xc0760401, + 0x0d88: 0x40448620, 0x0d8a: 0x40448820, 0x0d8b: 0x40448a20, + 0x0d8c: 0x40448c20, 0x0d8d: 0x82092248, 0x0d8e: 0xe000186c, + 0x0d97: 0x40448e20, + 0x0da0: 0x40441020, 0x0da1: 0x40441420, 0x0da2: 0x40447e20, 0x0da3: 0x40448020, + 0x0da6: 0xe0000185, 0x0da7: 0xe0000216, + 0x0da8: 0xe0000331, 0x0da9: 0xe000040b, 0x0daa: 0xe00004e0, 0x0dab: 0xe00005aa, + 0x0dac: 0xe0000675, 0x0dad: 0xe000071d, 0x0dae: 0xe00007c9, 0x0daf: 0xe000086e, + 0x0db0: 0x40285a20, 0x0db1: 0x40285c20, 0x0db2: 0x40285e20, 0x0db3: 0x40286020, + 0x0db4: 0x40286220, 0x0db5: 0x40286420, + 0x0db9: 0x40074e20, 0x0dba: 0xe0001866, 0x0dbb: 0xe0001869, + 0x0dbc: 0xe000186f, 0x0dbd: 0xe0001872, 0x0dbe: 0xe0001875, 0x0dbf: 0xe0001863, + // Block 0x37, offset 0xdc0 + 0x0dc2: 0xa000f302, 0x0dc3: 0xa000f402, + 0x0dc5: 0x40449220, 0x0dc6: 0x40449420, 0x0dc7: 0x40449620, + 0x0dc8: 0x40449820, 0x0dc9: 0x40449a20, 0x0dca: 0x40449c20, 0x0dcb: 0x40449e20, + 0x0dcc: 0x4044a020, 0x0dcd: 0x4044a220, 0x0dce: 0x4044a420, 0x0dcf: 0x4044a620, + 0x0dd0: 0x4044a820, 0x0dd1: 0x4044aa20, 0x0dd2: 0x4044ac20, 0x0dd3: 0x4044ae20, + 0x0dd4: 0x4044b020, 0x0dd5: 0x4044b220, 0x0dd6: 0x4044b420, + 0x0dda: 0x4044b620, 0x0ddb: 0x4044b820, + 0x0ddc: 0x4044ba20, 0x0ddd: 0x4044bc20, 0x0dde: 0x4044be20, 0x0ddf: 0x4044c020, + 0x0de0: 0x4044c220, 0x0de1: 0x4044c420, 0x0de2: 0x4044c620, 0x0de3: 0x4044c820, + 0x0de4: 0x4044ca20, 0x0de5: 0x4044cc20, 0x0de6: 0x4044ce20, 0x0de7: 0x4044d020, + 0x0de8: 0x4044d220, 0x0de9: 0x4044d420, 0x0dea: 0x4044d620, 0x0deb: 0x4044d820, + 0x0dec: 0x4044da20, 0x0ded: 0x4044dc20, 0x0dee: 0x4044de20, 0x0def: 0x4044e020, + 0x0df0: 0x4044e220, 0x0df1: 0x4044e420, 0x0df3: 0x4044e620, + 0x0df4: 0x4044e820, 0x0df5: 0x4044ea20, 0x0df6: 0x4044ec20, 0x0df7: 0x4044ee20, + 0x0df8: 0x4044f020, 0x0df9: 0x4044f220, 0x0dfa: 0x4044f420, 0x0dfb: 0x4044f620, + 0x0dfd: 0x4044f820, + // Block 0x38, offset 0xe00 + 0x0e00: 0x4044fa20, 0x0e01: 0x4044fc20, 0x0e02: 0x4044fe20, 0x0e03: 0x40450020, + 0x0e04: 0x40450220, 0x0e05: 0x40450420, 0x0e06: 0x40450620, + 0x0e0a: 0x82092295, + 0x0e0f: 0x40450820, + 0x0e10: 0x40450a20, 0x0e11: 0x40450c20, 0x0e12: 0x40450e20, 0x0e13: 0x40451020, + 0x0e14: 0x40451220, 0x0e16: 0x40451420, + 0x0e18: 0x40451620, 0x0e19: 0xc0780431, 0x0e1a: 0x40452020, 0x0e1b: 0x40452220, + 0x0e1c: 0xc07d04b1, 0x0e1d: 0x40452620, 0x0e1e: 0x40452820, 0x0e1f: 0x40451a20, + 0x0e32: 0x40451820, 0x0e33: 0x40451c20, + 0x0e34: 0x40057620, + // Block 0x39, offset 0xe40 + 0x0e41: 0x40491020, 0x0e42: 0x40491220, 0x0e43: 0x40491420, + 0x0e44: 0x40491620, 0x0e45: 0x40491820, 0x0e46: 0x40491a20, 0x0e47: 0x40491c20, + 0x0e48: 0x40491e20, 0x0e49: 0x40492020, 0x0e4a: 0x40492220, 0x0e4b: 0x40492420, + 0x0e4c: 0x40492620, 0x0e4d: 0x40492820, 0x0e4e: 0x40492a20, 0x0e4f: 0x40492c20, + 0x0e50: 0x40492e20, 0x0e51: 0x40493020, 0x0e52: 0x40493220, 0x0e53: 0x40493420, + 0x0e54: 0x40493620, 0x0e55: 0x40493820, 0x0e56: 0x40493a20, 0x0e57: 0x40493c20, + 0x0e58: 0x40493e20, 0x0e59: 0x40494020, 0x0e5a: 0x40494220, 0x0e5b: 0x40494420, + 0x0e5c: 0x40494620, 0x0e5d: 0x40494820, 0x0e5e: 0x40494a20, 0x0e5f: 0x40494c20, + 0x0e60: 0x40494e20, 0x0e61: 0x40495020, 0x0e62: 0x40495220, 0x0e63: 0x40495420, + 0x0e64: 0x40495620, 0x0e65: 0x40495820, 0x0e66: 0x40495a20, 0x0e67: 0x40495c20, + 0x0e68: 0x40495e20, 0x0e69: 0x40496020, 0x0e6a: 0x40496220, 0x0e6b: 0x40496420, + 0x0e6c: 0x40496620, 0x0e6d: 0x40496820, 0x0e6e: 0x40496a20, 0x0e6f: 0x40496c20, + 0x0e70: 0x40496e20, 0x0e71: 0x40497020, 0x0e72: 0x40497220, 0x0e73: 0x40497420, + 0x0e74: 0x40497620, 0x0e75: 0x40497820, 0x0e76: 0x40497a20, 0x0e77: 0x40497c20, + 0x0e78: 0x826724bf, 0x0e79: 0x826724c0, 0x0e7a: 0x820924c1, + 0x0e7f: 0x4027f420, + // Block 0x3a, offset 0xe80 + 0x0e80: 0xc07f04e1, 0x0e81: 0xc0ae04e1, 0x0e82: 0xc0dd04e1, 0x0e83: 0xc10c04e1, + 0x0e84: 0xc13b04e1, 0x0e85: 0x40498e20, 0x0e86: 0x4027b820, 0x0e87: 0xa000ff02, + 0x0e88: 0xa6b10002, 0x0e89: 0xa6b10102, 0x0e8a: 0xa6b10202, 0x0e8b: 0xa6b10302, + 0x0e8c: 0xa0010402, 0x0e8d: 0xc16a0511, 0x0e8e: 0xa000fe02, 0x0e8f: 0x40057820, + 0x0e90: 0xe000019a, 0x0e91: 0xe000022e, 0x0e92: 0xe0000346, 0x0e93: 0xe0000420, + 0x0e94: 0xe00004f5, 0x0e95: 0xe00005bf, 0x0e96: 0xe000068a, 0x0e97: 0xe0000732, + 0x0e98: 0xe00007de, 0x0e99: 0xe0000883, 0x0e9a: 0x40057a20, 0x0e9b: 0x40057c20, + // Block 0x3b, offset 0xec0 + 0x0ec1: 0x40499220, 0x0ec2: 0x40499420, + 0x0ec4: 0x40499620, 0x0ec7: 0x40499820, + 0x0ec8: 0x40499a20, 0x0eca: 0x40499e20, + 0x0ecd: 0x4049a220, + 0x0ed4: 0x4049a420, 0x0ed5: 0x4049a620, 0x0ed6: 0x4049a820, 0x0ed7: 0x4049aa20, + 0x0ed9: 0x4049ac20, 0x0eda: 0x4049ae20, 0x0edb: 0x4049b020, + 0x0edc: 0x4049b220, 0x0edd: 0x4049b420, 0x0ede: 0x4049b620, 0x0edf: 0x4049b820, + 0x0ee1: 0x4049ba20, 0x0ee2: 0x4049bc20, 0x0ee3: 0x4049be20, + 0x0ee5: 0x4049c020, 0x0ee7: 0x4049c220, + 0x0eea: 0x40499c20, 0x0eeb: 0x4049c420, + 0x0eed: 0x4049c620, 0x0eee: 0x4049c820, 0x0eef: 0x4049ca20, + 0x0ef0: 0x4049cc20, 0x0ef1: 0x4049ce20, 0x0ef2: 0x4049d020, 0x0ef3: 0x4049d220, + 0x0ef4: 0x4049d420, 0x0ef5: 0x4049d620, 0x0ef6: 0x4049d820, 0x0ef7: 0x4049da20, + 0x0ef8: 0x827624ee, 0x0ef9: 0x827624ef, 0x0efb: 0x4049e020, + 0x0efc: 0x4049e220, 0x0efd: 0x4049e420, + // Block 0x3c, offset 0xf00 + 0x0f00: 0xc16c0541, 0x0f01: 0xc18c0541, 0x0f02: 0xc1ac0541, 0x0f03: 0xc1cc0541, + 0x0f04: 0xc1ec0541, 0x0f06: 0x4027ba20, + 0x0f08: 0xa7a10602, 0x0f09: 0xa7a10702, 0x0f0a: 0xa7a10802, 0x0f0b: 0xa7a10902, + 0x0f0c: 0xa0010a02, 0x0f0d: 0xc20c0641, + 0x0f10: 0xe000019d, 0x0f11: 0xe0000231, 0x0f12: 0xe0000349, 0x0f13: 0xe0000423, + 0x0f14: 0xe00004f8, 0x0f15: 0xe00005c2, 0x0f16: 0xe000068d, 0x0f17: 0xe0000735, + 0x0f18: 0xe00007e1, 0x0f19: 0xe0000886, + 0x0f1c: 0xf0000404, 0x0f1d: 0xf0000404, 0x0f1e: 0x40499020, 0x0f1f: 0x4049a020, + // Block 0x3d, offset 0xf40 + 0x0f40: 0xe000201a, 0x0f41: 0x40075e20, 0x0f42: 0x40076020, 0x0f43: 0x40076220, + 0x0f44: 0x40058220, 0x0f45: 0x40058420, 0x0f46: 0x40058620, 0x0f47: 0x40058820, + 0x0f48: 0x40058a20, 0x0f49: 0x40058c20, 0x0f4a: 0x40058e20, 0x0f4b: 0x40059420, + 0x0f4c: 0x0005949b, 0x0f4d: 0x40059620, 0x0f4e: 0x40059820, 0x0f4f: 0x40059a20, + 0x0f50: 0x40059c20, 0x0f51: 0x40059e20, 0x0f52: 0x4005a020, 0x0f53: 0x40076420, + 0x0f54: 0x4002aa20, 0x0f55: 0x40076620, 0x0f56: 0x40076820, 0x0f57: 0x40076a20, + 0x0f58: 0xadc00000, 0x0f59: 0xadc00000, 0x0f5a: 0x40076c20, 0x0f5b: 0x40076e20, + 0x0f5c: 0x40077020, 0x0f5d: 0x40077220, 0x0f5e: 0x40077420, 0x0f5f: 0x40077620, + 0x0f60: 0xe00001a0, 0x0f61: 0xe0000234, 0x0f62: 0xe000034c, 0x0f63: 0xe0000426, + 0x0f64: 0xe00004fb, 0x0f65: 0xe00005c5, 0x0f66: 0xe0000690, 0x0f67: 0xe0000738, + 0x0f68: 0xe00007e4, 0x0f69: 0xe0000889, 0x0f6a: 0xe0000237, 0x0f6b: 0xe000034f, + 0x0f6c: 0xe0000429, 0x0f6d: 0xe00004fe, 0x0f6e: 0xe00005c8, 0x0f6f: 0xe0000693, + 0x0f70: 0xe000073b, 0x0f71: 0xe00007e7, 0x0f72: 0xe000088c, 0x0f73: 0xe00001a3, + 0x0f74: 0x40077820, 0x0f75: 0xadc00000, 0x0f76: 0x40077a20, 0x0f77: 0xadc00000, + 0x0f78: 0x40077c20, 0x0f79: 0xad810e02, 0x0f7a: 0x40040020, 0x0f7b: 0x40040220, + 0x0f7c: 0x40040420, 0x0f7d: 0x40040620, 0x0f7e: 0xa0000000, 0x0f7f: 0xa0000000, + // Block 0x3e, offset 0xf80 + 0x0f80: 0x404a7620, 0x0f81: 0x404a7c20, 0x0f82: 0x404a8020, 0x0f83: 0xe0001fe4, + 0x0f84: 0x404a8420, 0x0f85: 0x404a8820, 0x0f86: 0x404a8c20, 0x0f87: 0x404a9020, + 0x0f89: 0x404a9420, 0x0f8a: 0x404a9820, 0x0f8b: 0x404a9c20, + 0x0f8c: 0x404aa020, 0x0f8d: 0xe0001fea, 0x0f8e: 0x404aa420, 0x0f8f: 0x404aa820, + 0x0f90: 0x404aac20, 0x0f91: 0x404ab020, 0x0f92: 0xe0001ff0, 0x0f93: 0x404ab420, + 0x0f94: 0x404ab820, 0x0f95: 0x404abc20, 0x0f96: 0x404ac020, 0x0f97: 0xe0001ff6, + 0x0f98: 0x404ac420, 0x0f99: 0x404ac820, 0x0f9a: 0x404acc20, 0x0f9b: 0x404ad020, + 0x0f9c: 0xe0001ffc, 0x0f9d: 0x404ad420, 0x0f9e: 0x404ad820, 0x0f9f: 0x404adc20, + 0x0fa0: 0x404ae020, 0x0fa1: 0x404ae420, 0x0fa2: 0x404ae820, 0x0fa3: 0x404aee20, + 0x0fa4: 0x404af220, 0x0fa5: 0x404af620, 0x0fa6: 0x404afa20, 0x0fa7: 0x404afe20, + 0x0fa8: 0x404b0220, 0x0fa9: 0xe0001fde, 0x0faa: 0xe0002008, 0x0fab: 0x404a7a20, + 0x0fac: 0x404aec20, + 0x0fb1: 0xc30f0751, 0x0fb2: 0x8282258c, 0x0fb3: 0x8281258d, + 0x0fb4: 0x82842590, 0x0fb5: 0x82812591, 0x0fb6: 0x404b2420, 0x0fb7: 0x404b2620, + 0x0fb8: 0x404b2820, 0x0fb9: 0x404b2a20, 0x0fba: 0x82822596, 0x0fbb: 0x82822597, + 0x0fbc: 0x82822598, 0x0fbd: 0x82822599, 0x0fbe: 0xa000f302, 0x0fbf: 0xa000f402, + // Block 0x3f, offset 0xfc0 + 0x0fc0: 0x8282258e, 0x0fc1: 0x8281258f, 0x0fc2: 0xae600000, 0x0fc3: 0xae600000, + 0x0fc4: 0x8209259a, 0x0fc5: 0x4005a220, 0x0fc6: 0xae600000, 0x0fc7: 0xae600000, + 0x0fc8: 0x404b0620, 0x0fc9: 0x404b0a20, 0x0fca: 0x404b1220, 0x0fcb: 0x404b1420, + 0x0fcc: 0x404b0e20, 0x0fcd: 0x404b0820, 0x0fce: 0x404b0c20, 0x0fcf: 0x404b1020, + 0x0fd0: 0x404a7820, 0x0fd1: 0x404a7e20, 0x0fd2: 0x404a8220, 0x0fd3: 0xe0001fe7, + 0x0fd4: 0x404a8620, 0x0fd5: 0x404a8a20, 0x0fd6: 0x404a8e20, 0x0fd7: 0x404a9220, + 0x0fd9: 0x404a9620, 0x0fda: 0x404a9a20, 0x0fdb: 0x404a9e20, + 0x0fdc: 0x404aa220, 0x0fdd: 0xe0001fed, 0x0fde: 0x404aa620, 0x0fdf: 0x404aaa20, + 0x0fe0: 0x404aae20, 0x0fe1: 0x404ab220, 0x0fe2: 0xe0001ff3, 0x0fe3: 0x404ab620, + 0x0fe4: 0x404aba20, 0x0fe5: 0x404abe20, 0x0fe6: 0x404ac220, 0x0fe7: 0xe0001ff9, + 0x0fe8: 0x404ac620, 0x0fe9: 0x404aca20, 0x0fea: 0x404ace20, 0x0feb: 0x404ad220, + 0x0fec: 0xe0001fff, 0x0fed: 0x404ad620, 0x0fee: 0x404ada20, 0x0fef: 0x404ade20, + 0x0ff0: 0x404ae220, 0x0ff1: 0x404ae620, 0x0ff2: 0xc30306a1, 0x0ff3: 0xc30906a1, + 0x0ff4: 0x404af420, 0x0ff5: 0x404af820, 0x0ff6: 0x404afc20, 0x0ff7: 0x404b0020, + 0x0ff8: 0x404b0420, 0x0ff9: 0xe0001fe1, 0x0ffa: 0xe0002002, 0x0ffb: 0xe0002005, + 0x0ffc: 0xe000200b, 0x0ffe: 0x40077e20, 0x0fff: 0x40078020, + // Block 0x40, offset 0x1000 + 0x1000: 0x40078220, 0x1001: 0x40078420, 0x1002: 0x40078620, 0x1003: 0x40078820, + 0x1004: 0x40078a20, 0x1005: 0x40078c20, 0x1006: 0xadc00000, 0x1007: 0x40078e20, + 0x1008: 0x40079020, 0x1009: 0x40079220, 0x100a: 0x40079420, 0x100b: 0x40079620, + 0x100c: 0x40079820, 0x100e: 0x40079a20, 0x100f: 0x40079c20, + 0x1010: 0x40059020, 0x1011: 0x40059220, 0x1012: 0x4005a420, 0x1013: 0x4005a620, + 0x1014: 0x4005a820, 0x1015: 0x40079e20, 0x1016: 0x4007a020, 0x1017: 0x4007a220, + 0x1018: 0x4007a420, 0x1019: 0x4005aa20, 0x101a: 0x4005ac20, + // Block 0x41, offset 0x1040 + 0x1040: 0x404e1420, 0x1041: 0x404e1820, 0x1042: 0x404e1c20, 0x1043: 0x404e2220, + 0x1044: 0x404e2420, 0x1045: 0x404e2820, 0x1046: 0x404e2e20, 0x1047: 0x404e3220, + 0x1048: 0x404e3a20, 0x1049: 0x404e4220, 0x104a: 0x404e4820, 0x104b: 0x404e4a20, + 0x104c: 0x404e4e20, 0x104d: 0x404e5220, 0x104e: 0x404e5620, 0x104f: 0x404e5a20, + 0x1050: 0x404e5e20, 0x1051: 0x404e6020, 0x1052: 0x404e6220, 0x1053: 0x404e6620, + 0x1054: 0x404e6a20, 0x1055: 0x404e7220, 0x1056: 0x404e7420, 0x1057: 0x404e7e20, + 0x1058: 0x404e8220, 0x1059: 0x404e8420, 0x105a: 0x404e8820, 0x105b: 0x404e8c20, + 0x105c: 0x404e9420, 0x105d: 0x404e9820, 0x105e: 0x404ea620, 0x105f: 0x404eaa20, + 0x1060: 0x404eb620, 0x1061: 0x404ec220, 0x1062: 0x404ec420, 0x1063: 0x404ec620, + 0x1064: 0x404ec820, 0x1065: 0xc31307b1, 0x1066: 0x404ecc20, 0x1067: 0x404ed620, + 0x1068: 0x404ed820, 0x1069: 0x404eda20, 0x106a: 0x404edc20, 0x106b: 0x004ede84, + 0x106c: 0x404ede20, 0x106d: 0x404ee620, 0x106e: 0x404eea20, 0x106f: 0x404eee20, + 0x1070: 0x404ef420, 0x1071: 0x404efe20, 0x1072: 0x404f0620, 0x1073: 0x404eec20, + 0x1074: 0x404f0a20, 0x1075: 0x404f0220, 0x1076: 0xa000f302, 0x1077: 0xa0711202, + 0x1078: 0xa000f402, 0x1079: 0x8209278a, 0x107a: 0x8209278b, 0x107b: 0x404e8a20, + 0x107c: 0x404e9220, 0x107d: 0x404e9a20, 0x107e: 0x404eb020, 0x107f: 0xe000201e, + // Block 0x42, offset 0x1080 + 0x1080: 0xe00001ac, 0x1081: 0xe0000240, 0x1082: 0xe0000358, 0x1083: 0xe0000432, + 0x1084: 0xe0000507, 0x1085: 0xe00005d1, 0x1086: 0xe000069c, 0x1087: 0xe0000744, + 0x1088: 0xe00007f0, 0x1089: 0xe0000895, 0x108a: 0x40032220, 0x108b: 0x40032420, + 0x108c: 0x4005b420, 0x108d: 0x4005b620, 0x108e: 0x4005b820, 0x108f: 0x4005ba20, + 0x1090: 0x404ea020, 0x1091: 0x404ea220, 0x1092: 0x404ece20, 0x1093: 0x404ed020, + 0x1094: 0x404ed220, 0x1095: 0x404ed420, 0x1096: 0x404ef620, 0x1097: 0x404ef820, + 0x1098: 0x404efa20, 0x1099: 0x404efc20, 0x109a: 0x404e2620, 0x109b: 0x404e3c20, + 0x109c: 0x404eb820, 0x109d: 0x404eba20, 0x109e: 0x404e7020, 0x109f: 0x404e8620, + 0x10a0: 0x404e9620, 0x10a1: 0x404e4020, 0x10a2: 0x404f0c20, 0x10a3: 0x404f1820, + 0x10a4: 0x404f1a20, 0x10a5: 0x404ea420, 0x10a6: 0x404ec020, 0x10a7: 0x404f0e20, + 0x10a8: 0x404f1020, 0x10a9: 0x404f1c20, 0x10aa: 0x404f1e20, 0x10ab: 0x404f2020, + 0x10ac: 0x404f2220, 0x10ad: 0x404f2420, 0x10ae: 0x404e5c20, 0x10af: 0x404ebc20, + 0x10b0: 0x404ebe20, 0x10b1: 0x404ee820, 0x10b2: 0x404ee220, 0x10b3: 0x404ef020, + 0x10b4: 0x404ef220, 0x10b5: 0x404e1620, 0x10b6: 0x404e1a20, 0x10b7: 0x404e1e20, + 0x10b8: 0x404e2a20, 0x10b9: 0x404e3620, 0x10ba: 0x404e4420, 0x10bb: 0x404e6420, + 0x10bc: 0x404e6c20, 0x10bd: 0x404e7620, 0x10be: 0x404e7820, 0x10bf: 0x404e8020, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x404e9e20, 0x10c1: 0x404eac20, 0x10c2: 0x404e9c20, 0x10c3: 0x404ee020, + 0x10c4: 0x404f0020, 0x10c5: 0x404f0420, 0x10c6: 0x404f1220, 0x10c7: 0x404f2620, + 0x10c8: 0x404f2a20, 0x10c9: 0x404f2e20, 0x10ca: 0x404f3020, 0x10cb: 0x404f2820, + 0x10cc: 0x404f2c20, 0x10cd: 0xadc11302, 0x10ce: 0x404e7c20, 0x10cf: 0x404f3220, + 0x10d0: 0xe00001af, 0x10d1: 0xe0000243, 0x10d2: 0xe000035b, 0x10d3: 0xe0000435, + 0x10d4: 0xe000050a, 0x10d5: 0xe00005d4, 0x10d6: 0xe000069f, 0x10d7: 0xe0000747, + 0x10d8: 0xe00007f3, 0x10d9: 0xe0000898, 0x10da: 0x404f3420, 0x10db: 0x404f3620, + 0x10dc: 0x404ee420, 0x10dd: 0x404f0820, 0x10de: 0x4007a820, 0x10df: 0x4007aa20, + 0x10e0: 0x00379888, 0x10e1: 0x00379c88, 0x10e2: 0x0037a088, 0x10e3: 0x0037a488, + 0x10e4: 0x0037a888, 0x10e5: 0x0037ac88, 0x10e6: 0x0037b088, 0x10e7: 0x0037b888, + 0x10e8: 0x0037bc88, 0x10e9: 0x0037c088, 0x10ea: 0x0037c488, 0x10eb: 0x0037c888, + 0x10ec: 0x0037cc88, 0x10ed: 0x0037d488, 0x10ee: 0x0037d888, 0x10ef: 0x0037dc88, + 0x10f0: 0x0037e088, 0x10f1: 0x0037e488, 0x10f2: 0x0037e888, 0x10f3: 0x0037f088, + 0x10f4: 0x0037f488, 0x10f5: 0x0037f888, 0x10f6: 0x0037fc88, 0x10f7: 0x00380088, + 0x10f8: 0x00380488, 0x10f9: 0x00380888, 0x10fa: 0x00380c88, 0x10fb: 0x00381088, + 0x10fc: 0x00381488, 0x10fd: 0x00381888, 0x10fe: 0x00381c88, 0x10ff: 0x00382488, + // Block 0x44, offset 0x1100 + 0x1100: 0x00382888, 0x1101: 0x0037b488, 0x1102: 0x0037d088, 0x1103: 0x0037ec88, + 0x1104: 0x00382088, 0x1105: 0x00382c88, 0x1107: 0x00383288, + 0x110d: 0x00383c88, + 0x1110: 0x40379620, 0x1111: 0x40379a20, 0x1112: 0x40379e20, 0x1113: 0x4037a220, + 0x1114: 0x4037a620, 0x1115: 0x4037aa20, 0x1116: 0x4037ae20, 0x1117: 0x4037b620, + 0x1118: 0x4037ba20, 0x1119: 0x4037be20, 0x111a: 0x4037c220, 0x111b: 0x4037c620, + 0x111c: 0x4037ca20, 0x111d: 0x4037d220, 0x111e: 0x4037d620, 0x111f: 0x4037da20, + 0x1120: 0x4037de20, 0x1121: 0x4037e220, 0x1122: 0x4037e620, 0x1123: 0x4037ee20, + 0x1124: 0x4037f220, 0x1125: 0x4037f620, 0x1126: 0x4037fa20, 0x1127: 0x4037fe20, + 0x1128: 0x40380220, 0x1129: 0x40380620, 0x112a: 0x40380a20, 0x112b: 0x40380e20, + 0x112c: 0x40381220, 0x112d: 0x40381620, 0x112e: 0x40381a20, 0x112f: 0x40382220, + 0x1130: 0x40382620, 0x1131: 0x4037b220, 0x1132: 0x4037ce20, 0x1133: 0x4037ea20, + 0x1134: 0x40381e20, 0x1135: 0x40382a20, 0x1136: 0x40382e20, 0x1137: 0x40383020, + 0x1138: 0x40383420, 0x1139: 0x40383620, 0x113a: 0x40383820, 0x113b: 0x40036020, + 0x113c: 0x0037ca94, 0x113d: 0x40383a20, 0x113e: 0x40383e20, 0x113f: 0x40384020, + // Block 0x45, offset 0x1140 + 0x1140: 0x4062ac20, 0x1141: 0x4062ae20, 0x1142: 0x4062b020, 0x1143: 0x4062b220, + 0x1144: 0x4062b420, 0x1145: 0x4062b620, 0x1146: 0x4062b820, 0x1147: 0x4062ba20, + 0x1148: 0x4062bc20, 0x1149: 0x4062be20, 0x114a: 0x4062c020, 0x114b: 0x4062c220, + 0x114c: 0x4062c420, 0x114d: 0x4062c620, 0x114e: 0x4062c820, 0x114f: 0x4062ca20, + 0x1150: 0x4062cc20, 0x1151: 0x4062ce20, 0x1152: 0x4062d020, 0x1153: 0x4062d220, + 0x1154: 0x4062d420, 0x1155: 0x4062d620, 0x1156: 0x4062d820, 0x1157: 0x4062da20, + 0x1158: 0x4062dc20, 0x1159: 0x4062de20, 0x115a: 0x4062e020, 0x115b: 0x4062e220, + 0x115c: 0x4062e420, 0x115d: 0x4062e620, 0x115e: 0x4062e820, 0x115f: 0x4062ea20, + 0x1160: 0x4062ec20, 0x1161: 0x4062ee20, 0x1162: 0x4062f020, 0x1163: 0x4062f220, + 0x1164: 0x4062f420, 0x1165: 0x4062f620, 0x1166: 0x4062f820, 0x1167: 0x4062fa20, + 0x1168: 0x4062fc20, 0x1169: 0x4062fe20, 0x116a: 0x40630020, 0x116b: 0x40630220, + 0x116c: 0x40630420, 0x116d: 0x40630620, 0x116e: 0x40630820, 0x116f: 0x40630a20, + 0x1170: 0x40630c20, 0x1171: 0x40630e20, 0x1172: 0x40631020, 0x1173: 0x40631220, + 0x1174: 0x40631420, 0x1175: 0x40631620, 0x1176: 0x40631820, 0x1177: 0x40631a20, + 0x1178: 0x40631c20, 0x1179: 0x40631e20, 0x117a: 0x40632020, 0x117b: 0x40632220, + 0x117c: 0x40632420, 0x117d: 0x40632620, 0x117e: 0x40632820, 0x117f: 0x40632a20, + // Block 0x46, offset 0x1180 + 0x1180: 0x40632c20, 0x1181: 0x40632e20, 0x1182: 0x40633020, 0x1183: 0x40633220, + 0x1184: 0x40633420, 0x1185: 0x40633620, 0x1186: 0x40633820, 0x1187: 0x40633a20, + 0x1188: 0x40633c20, 0x1189: 0x40633e20, 0x118a: 0x40634020, 0x118b: 0x40634220, + 0x118c: 0x40634420, 0x118d: 0x40634620, 0x118e: 0x40634820, 0x118f: 0x40634a20, + 0x1190: 0x40634c20, 0x1191: 0x40634e20, 0x1192: 0x40635020, 0x1193: 0x40635220, + 0x1194: 0x40635420, 0x1195: 0x40635620, 0x1196: 0x40635820, 0x1197: 0x40635a20, + 0x1198: 0x40635c20, 0x1199: 0x40635e20, 0x119a: 0x40636020, 0x119b: 0x40636220, + 0x119c: 0x40636420, 0x119d: 0x40636620, 0x119e: 0x40636820, 0x119f: 0x4063a420, + 0x11a0: 0x4063a620, 0x11a1: 0x4063a820, 0x11a2: 0x4063aa20, 0x11a3: 0x4063ac20, + 0x11a4: 0x4063ae20, 0x11a5: 0x4063b020, 0x11a6: 0x4063b220, 0x11a7: 0x4063b420, + 0x11a8: 0x4063b620, 0x11a9: 0x4063b820, 0x11aa: 0x4063ba20, 0x11ab: 0x4063bc20, + 0x11ac: 0x4063be20, 0x11ad: 0x4063c020, 0x11ae: 0x4063c220, 0x11af: 0x4063c420, + 0x11b0: 0x4063c620, 0x11b1: 0x4063c820, 0x11b2: 0x4063ca20, 0x11b3: 0x4063cc20, + 0x11b4: 0x4063ce20, 0x11b5: 0x4063d020, 0x11b6: 0x4063d220, 0x11b7: 0x4063d420, + 0x11b8: 0x4063d620, 0x11b9: 0x4063d820, 0x11ba: 0x4063da20, 0x11bb: 0x4063dc20, + 0x11bc: 0x4063de20, 0x11bd: 0x4063e020, 0x11be: 0x4063e220, 0x11bf: 0x4063e420, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x4063e620, 0x11c1: 0x4063e820, 0x11c2: 0x4063ea20, 0x11c3: 0x4063ec20, + 0x11c4: 0x4063ee20, 0x11c5: 0x4063f020, 0x11c6: 0x4063f220, 0x11c7: 0x4063f420, + 0x11c8: 0x4063f620, 0x11c9: 0x4063f820, 0x11ca: 0x4063fa20, 0x11cb: 0x4063fc20, + 0x11cc: 0x4063fe20, 0x11cd: 0x40640020, 0x11ce: 0x40640220, 0x11cf: 0x40640420, + 0x11d0: 0x40640620, 0x11d1: 0x40640820, 0x11d2: 0x40640a20, 0x11d3: 0x40640c20, + 0x11d4: 0x40640e20, 0x11d5: 0x40641020, 0x11d6: 0x40641220, 0x11d7: 0x40641420, + 0x11d8: 0x40641620, 0x11d9: 0x40641820, 0x11da: 0x40641a20, 0x11db: 0x40641c20, + 0x11dc: 0x40641e20, 0x11dd: 0x40642020, 0x11de: 0x40642220, 0x11df: 0x40642420, + 0x11e0: 0x40642620, 0x11e1: 0x40642820, 0x11e2: 0x40642a20, 0x11e3: 0x40642c20, + 0x11e4: 0x40642e20, 0x11e5: 0x40643020, 0x11e6: 0x40643220, 0x11e7: 0x40643420, + 0x11e8: 0x40646420, 0x11e9: 0x40646620, 0x11ea: 0x40646820, 0x11eb: 0x40646a20, + 0x11ec: 0x40646c20, 0x11ed: 0x40646e20, 0x11ee: 0x40647020, 0x11ef: 0x40647220, + 0x11f0: 0x40647420, 0x11f1: 0x40647620, 0x11f2: 0x40647820, 0x11f3: 0x40647a20, + 0x11f4: 0x40647c20, 0x11f5: 0x40647e20, 0x11f6: 0x40648020, 0x11f7: 0x40648220, + 0x11f8: 0x40648420, 0x11f9: 0x40648620, 0x11fa: 0x40648820, 0x11fb: 0x40648a20, + 0x11fc: 0x40648c20, 0x11fd: 0x40648e20, 0x11fe: 0x40649020, 0x11ff: 0x40649220, + // Block 0x48, offset 0x1200 + 0x1200: 0x40649420, 0x1201: 0x40649620, 0x1202: 0x40649820, 0x1203: 0x40649a20, + 0x1204: 0x40649c20, 0x1205: 0x40649e20, 0x1206: 0x4064a020, 0x1207: 0x4064a220, + 0x1208: 0x4064a420, 0x1209: 0x4064a620, 0x120a: 0x4064a820, 0x120b: 0x4064aa20, + 0x120c: 0x4064ac20, 0x120d: 0x4064ae20, 0x120e: 0x4064b020, 0x120f: 0x4064b220, + 0x1210: 0x4064b420, 0x1211: 0x4064b620, 0x1212: 0x4064b820, 0x1213: 0x4064ba20, + 0x1214: 0x4064bc20, 0x1215: 0x4064be20, 0x1216: 0x4064c020, 0x1217: 0x4064c220, + 0x1218: 0x4064c420, 0x1219: 0x4064c620, 0x121a: 0x4064c820, 0x121b: 0x4064ca20, + 0x121c: 0x4064cc20, 0x121d: 0x4064ce20, 0x121e: 0x4064d020, 0x121f: 0x4064d220, + 0x1220: 0x4064d420, 0x1221: 0x4064d620, 0x1222: 0x4064d820, 0x1223: 0x4064da20, + 0x1224: 0x4064dc20, 0x1225: 0x4064de20, 0x1226: 0x4064e020, 0x1227: 0x4064e220, + 0x1228: 0x4064e420, 0x1229: 0x4064e620, 0x122a: 0x4064e820, 0x122b: 0x4064ea20, + 0x122c: 0x4064ec20, 0x122d: 0x4064ee20, 0x122e: 0x4064f020, 0x122f: 0x4064f220, + 0x1230: 0x4064f420, 0x1231: 0x4064f620, 0x1232: 0x4064f820, 0x1233: 0x4064fa20, + 0x1234: 0x4064fc20, 0x1235: 0x4064fe20, 0x1236: 0x40650020, 0x1237: 0x40650220, + 0x1238: 0x40650420, 0x1239: 0x40650620, 0x123a: 0x40650820, 0x123b: 0x40650a20, + 0x123c: 0x40650c20, 0x123d: 0x40650e20, 0x123e: 0x40651020, 0x123f: 0x40651220, + // Block 0x49, offset 0x1240 + 0x1240: 0x403c2e20, 0x1241: 0x403c3020, 0x1242: 0x403c3220, 0x1243: 0x403c3420, + 0x1244: 0x403c3620, 0x1245: 0x403c3820, 0x1246: 0x403c3a20, 0x1247: 0x403c3c20, + 0x1248: 0x403c3e20, 0x1249: 0x403c4020, 0x124a: 0x403c4220, 0x124b: 0x403c4420, + 0x124c: 0x403c4620, 0x124d: 0x403c4820, 0x124e: 0x403c4a20, 0x124f: 0x403c4c20, + 0x1250: 0x403c5020, 0x1251: 0x403c5220, 0x1252: 0x403c5420, 0x1253: 0x403c5620, + 0x1254: 0x403c5820, 0x1255: 0x403c5a20, 0x1256: 0x403c5c20, 0x1257: 0x403c5e20, + 0x1258: 0x403c6020, 0x1259: 0x403c6220, 0x125a: 0x403c6420, 0x125b: 0x403c6620, + 0x125c: 0x403c6820, 0x125d: 0x403c6a20, 0x125e: 0x403c6c20, 0x125f: 0x403c6e20, + 0x1260: 0x403c7a20, 0x1261: 0x403c7c20, 0x1262: 0x403c7e20, 0x1263: 0x403c8020, + 0x1264: 0x403c8220, 0x1265: 0x403c8420, 0x1266: 0x403c8620, 0x1267: 0x403c8820, + 0x1268: 0x403c8a20, 0x1269: 0x403c8c20, 0x126a: 0x403c8e20, 0x126b: 0x403c9020, + 0x126c: 0x403c9220, 0x126d: 0x403c9420, 0x126e: 0x403c9620, 0x126f: 0x403c9820, + 0x1270: 0x403c9c20, 0x1271: 0x403c9e20, 0x1272: 0x403ca020, 0x1273: 0x403ca220, + 0x1274: 0x403ca420, 0x1275: 0x403ca620, 0x1276: 0x403ca820, 0x1277: 0x403caa20, + 0x1278: 0x403cba20, 0x1279: 0x403cbc20, 0x127a: 0x403cbe20, 0x127b: 0x403cc020, + 0x127c: 0x403cc220, 0x127d: 0x403cc420, 0x127e: 0x403cc620, 0x127f: 0x403cc820, + // Block 0x4a, offset 0x1280 + 0x1280: 0x403ccc20, 0x1281: 0x403cce20, 0x1282: 0x403cd020, 0x1283: 0x403cd220, + 0x1284: 0x403cd420, 0x1285: 0x403cd620, 0x1286: 0x403cd820, 0x1287: 0x403cda20, + 0x1288: 0x403cdc20, 0x128a: 0x403cde20, 0x128b: 0x403ce020, + 0x128c: 0x403ce220, 0x128d: 0x403ce420, + 0x1290: 0x403ce620, 0x1291: 0x403ce820, 0x1292: 0x403cea20, 0x1293: 0x403cec20, + 0x1294: 0x403cee20, 0x1295: 0x403cf020, 0x1296: 0x403cf220, + 0x1298: 0x403cf420, 0x129a: 0x403cf620, 0x129b: 0x403cf820, + 0x129c: 0x403cfa20, 0x129d: 0x403cfc20, + 0x12a0: 0x403cfe20, 0x12a1: 0x403d0020, 0x12a2: 0x403d0220, 0x12a3: 0x403d0420, + 0x12a4: 0x403d0620, 0x12a5: 0x403d0820, 0x12a6: 0x403d0a20, 0x12a7: 0x403d0c20, + 0x12a8: 0x403d1820, 0x12a9: 0x403d1a20, 0x12aa: 0x403d1c20, 0x12ab: 0x403d1e20, + 0x12ac: 0x403d2020, 0x12ad: 0x403d2220, 0x12ae: 0x403d2420, 0x12af: 0x403d2620, + 0x12b0: 0x403d2820, 0x12b1: 0x403d2a20, 0x12b2: 0x403d2c20, 0x12b3: 0x403d2e20, + 0x12b4: 0x403d3020, 0x12b5: 0x403d3220, 0x12b6: 0x403d3420, 0x12b7: 0x403d3620, + 0x12b8: 0x403d3a20, 0x12b9: 0x403d3c20, 0x12ba: 0x403d3e20, 0x12bb: 0x403d4020, + 0x12bc: 0x403d4220, 0x12bd: 0x403d4420, 0x12be: 0x403d4620, 0x12bf: 0x403d4820, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x403d4c20, 0x12c1: 0x403d4e20, 0x12c2: 0x403d5020, 0x12c3: 0x403d5220, + 0x12c4: 0x403d5420, 0x12c5: 0x403d5620, 0x12c6: 0x403d5820, 0x12c7: 0x403d5a20, + 0x12c8: 0x403d5c20, 0x12ca: 0x403d5e20, 0x12cb: 0x403d6020, + 0x12cc: 0x403d6220, 0x12cd: 0x403d6420, + 0x12d0: 0x403d6620, 0x12d1: 0x403d6820, 0x12d2: 0x403d6a20, 0x12d3: 0x403d6c20, + 0x12d4: 0x403d6e20, 0x12d5: 0x403d7020, 0x12d6: 0x403d7220, 0x12d7: 0x403d7420, + 0x12d8: 0x403d7820, 0x12d9: 0x403d7a20, 0x12da: 0x403d7c20, 0x12db: 0x403d7e20, + 0x12dc: 0x403d8020, 0x12dd: 0x403d8220, 0x12de: 0x403d8420, 0x12df: 0x403d8620, + 0x12e0: 0x403d8a20, 0x12e1: 0x403d8c20, 0x12e2: 0x403d8e20, 0x12e3: 0x403d9020, + 0x12e4: 0x403d9220, 0x12e5: 0x403d9420, 0x12e6: 0x403d9620, 0x12e7: 0x403d9820, + 0x12e8: 0x403d9c20, 0x12e9: 0x403d9e20, 0x12ea: 0x403da020, 0x12eb: 0x403da220, + 0x12ec: 0x403da420, 0x12ed: 0x403da620, 0x12ee: 0x403da820, 0x12ef: 0x403daa20, + 0x12f0: 0x403dac20, 0x12f2: 0x403dae20, 0x12f3: 0x403db020, + 0x12f4: 0x403db220, 0x12f5: 0x403db420, + 0x12f8: 0x403db620, 0x12f9: 0x403db820, 0x12fa: 0x403dba20, 0x12fb: 0x403dbc20, + 0x12fc: 0x403dbe20, 0x12fd: 0x403dc020, 0x12fe: 0x403dc220, + // Block 0x4c, offset 0x1300 + 0x1300: 0x403dc420, 0x1302: 0x403dc620, 0x1303: 0x403dc820, + 0x1304: 0x403dca20, 0x1305: 0x403dcc20, + 0x1308: 0x403dce20, 0x1309: 0x403dd020, 0x130a: 0x403dd220, 0x130b: 0x403dd420, + 0x130c: 0x403dd620, 0x130d: 0x403dd820, 0x130e: 0x403dda20, 0x130f: 0x403ddc20, + 0x1310: 0x403dde20, 0x1311: 0x403de020, 0x1312: 0x403de220, 0x1313: 0x403de420, + 0x1314: 0x403de620, 0x1315: 0x403de820, 0x1316: 0x403dea20, + 0x1318: 0x403dec20, 0x1319: 0x403dee20, 0x131a: 0x403df020, 0x131b: 0x403df220, + 0x131c: 0x403df420, 0x131d: 0x403df620, 0x131e: 0x403df820, 0x131f: 0x403dfa20, + 0x1320: 0x403e0a20, 0x1321: 0x403e0c20, 0x1322: 0x403e0e20, 0x1323: 0x403e1020, + 0x1324: 0x403e1220, 0x1325: 0x403e1420, 0x1326: 0x403e1620, 0x1327: 0x403e1820, + 0x1328: 0x403e1a20, 0x1329: 0x403e1c20, 0x132a: 0x403e1e20, 0x132b: 0x403e2020, + 0x132c: 0x403e2220, 0x132d: 0x403e2420, 0x132e: 0x403e2620, 0x132f: 0x403e2820, + 0x1330: 0x403e2a20, 0x1331: 0x403e2c20, 0x1332: 0x403e2e20, 0x1333: 0x403e3020, + 0x1334: 0x403e3220, 0x1335: 0x403e3420, 0x1336: 0x403e3620, 0x1337: 0x403e3820, + 0x1338: 0x403e4820, 0x1339: 0x403e4a20, 0x133a: 0x403e4c20, 0x133b: 0x403e4e20, + 0x133c: 0x403e5020, 0x133d: 0x403e5220, 0x133e: 0x403e5420, 0x133f: 0x403e5620, + // Block 0x4d, offset 0x1340 + 0x1340: 0x403e5a20, 0x1341: 0x403e5c20, 0x1342: 0x403e5e20, 0x1343: 0x403e6020, + 0x1344: 0x403e6220, 0x1345: 0x403e6420, 0x1346: 0x403e6620, 0x1347: 0x403e6820, + 0x1348: 0x403e6c20, 0x1349: 0x403e6e20, 0x134a: 0x403e7020, 0x134b: 0x403e7220, + 0x134c: 0x403e7420, 0x134d: 0x403e7620, 0x134e: 0x403e7820, 0x134f: 0x403e7a20, + 0x1350: 0x403e7c20, 0x1352: 0x403e7e20, 0x1353: 0x403e8020, + 0x1354: 0x403e8220, 0x1355: 0x403e8420, + 0x1358: 0x403e8620, 0x1359: 0x403e8820, 0x135a: 0x403e8a20, 0x135b: 0x403e8c20, + 0x135c: 0x403e8e20, 0x135d: 0x403e9020, 0x135e: 0x403e9220, 0x135f: 0x403e9420, + 0x1360: 0x403e9e20, 0x1361: 0x403ea020, 0x1362: 0x403ea220, 0x1363: 0x403ea420, + 0x1364: 0x403ea620, 0x1365: 0x403ea820, 0x1366: 0x403eaa20, 0x1367: 0x403eac20, + 0x1368: 0x403eb020, 0x1369: 0x403eb220, 0x136a: 0x403eb420, 0x136b: 0x403eb620, + 0x136c: 0x403eb820, 0x136d: 0x403eba20, 0x136e: 0x403ebc20, 0x136f: 0x403ebe20, + 0x1370: 0x403ed020, 0x1371: 0x403ed220, 0x1372: 0x403ed420, 0x1373: 0x403ed620, + 0x1374: 0x403ed820, 0x1375: 0x403eda20, 0x1376: 0x403edc20, 0x1377: 0x403ede20, + 0x1378: 0x403ee220, 0x1379: 0x403ee420, 0x137a: 0x403ee620, 0x137b: 0x403ee820, + 0x137c: 0x403eea20, 0x137d: 0x403eec20, 0x137e: 0x403eee20, 0x137f: 0x403ef020, + // Block 0x4e, offset 0x1380 + 0x1380: 0x403f0020, 0x1381: 0x403f0220, 0x1382: 0x403f0420, 0x1383: 0x403f0620, + 0x1384: 0x403f0820, 0x1385: 0x403f0a20, 0x1386: 0x403f0c20, 0x1387: 0x403f0e20, + 0x1388: 0x403f1020, 0x1389: 0x403f1220, 0x138a: 0x403f1420, 0x138b: 0x403f1620, + 0x138c: 0x403f1820, 0x138d: 0x403f1a20, 0x138e: 0x403f1c20, 0x138f: 0x403f1e20, + 0x1390: 0x403f2820, 0x1391: 0x403f2a20, 0x1392: 0x403f2c20, 0x1393: 0x403f2e20, + 0x1394: 0x403f3020, 0x1395: 0x403f3220, 0x1396: 0x403f3420, 0x1397: 0x403f3620, + 0x1398: 0x403f4220, 0x1399: 0x403f4420, 0x139a: 0x403f4620, + 0x139d: 0xae60ee02, 0x139e: 0xae60ed02, 0x139f: 0xae60ec02, + 0x13a0: 0x40036220, 0x13a1: 0x40029c20, 0x13a2: 0x4002ee20, 0x13a3: 0x40029e20, + 0x13a4: 0x4002a020, 0x13a5: 0x4002a220, 0x13a6: 0x4002a420, 0x13a7: 0x4002d020, + 0x13a8: 0x40036420, 0x13a9: 0xe00001f2, 0x13aa: 0xe000030d, 0x13ab: 0xe00003e7, + 0x13ac: 0xe00004c2, 0x13ad: 0xe000058c, 0x13ae: 0xe0000657, 0x13af: 0xe00006ff, + 0x13b0: 0xe00007ab, 0x13b1: 0xe0000850, 0x13b2: 0x40286620, 0x13b3: 0x40286820, + 0x13b4: 0x40286a20, 0x13b5: 0x40286c20, 0x13b6: 0x40286e20, 0x13b7: 0x40287020, + 0x13b8: 0x40287220, 0x13b9: 0x40287420, 0x13ba: 0x40287620, 0x13bb: 0x40287820, + 0x13bc: 0x40287a20, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x403c7020, 0x13c1: 0x403c7220, 0x13c2: 0x403c7420, 0x13c3: 0x403c7620, + 0x13c4: 0x403d0e20, 0x13c5: 0x403d1020, 0x13c6: 0x403d1220, 0x13c7: 0x403d1420, + 0x13c8: 0x403f2020, 0x13c9: 0x403f2220, 0x13ca: 0x403f2420, 0x13cb: 0x403f2620, + 0x13cc: 0x403f3820, 0x13cd: 0x403f3a20, 0x13ce: 0x403f3c20, 0x13cf: 0x403f3e20, + 0x13d0: 0x4006a620, 0x13d1: 0x4006a820, 0x13d2: 0x4006aa20, 0x13d3: 0x4006ac20, + 0x13d4: 0x4006ae20, 0x13d5: 0x4006b020, 0x13d6: 0x4006b220, 0x13d7: 0x4006b420, + 0x13d8: 0x4006b620, 0x13d9: 0x4006b820, + 0x13e0: 0x40547620, 0x13e1: 0x40547820, 0x13e2: 0x40547a20, 0x13e3: 0x40547c20, + 0x13e4: 0x40547e20, 0x13e5: 0x40548020, 0x13e6: 0x40548220, 0x13e7: 0x40548420, + 0x13e8: 0x40548620, 0x13e9: 0x40548820, 0x13ea: 0x40548a20, 0x13eb: 0x40548c20, + 0x13ec: 0x40548e20, 0x13ed: 0x40549020, 0x13ee: 0x40549220, 0x13ef: 0x40549420, + 0x13f0: 0x40549620, 0x13f1: 0x40549820, 0x13f2: 0x40549a20, 0x13f3: 0x40549c20, + 0x13f4: 0x40549e20, 0x13f5: 0x4054a020, 0x13f6: 0x4054a220, 0x13f7: 0x4054a420, + 0x13f8: 0x4054a620, 0x13f9: 0x4054a820, 0x13fa: 0x4054aa20, 0x13fb: 0x4054ac20, + 0x13fc: 0x4054ae20, 0x13fd: 0x4054b020, 0x13fe: 0x4054b220, 0x13ff: 0x4054b420, + // Block 0x50, offset 0x1400 + 0x1400: 0x4054b620, 0x1401: 0x4054b820, 0x1402: 0x4054ba20, 0x1403: 0x4054bc20, + 0x1404: 0x4054be20, 0x1405: 0x4054c020, 0x1406: 0x4054c220, 0x1407: 0x4054c420, + 0x1408: 0x4054c620, 0x1409: 0x4054c820, 0x140a: 0x4054ca20, 0x140b: 0x4054cc20, + 0x140c: 0x4054ce20, 0x140d: 0x4054d020, 0x140e: 0x4054d220, 0x140f: 0x4054d420, + 0x1410: 0x4054d620, 0x1411: 0x4054d820, 0x1412: 0x4054da20, 0x1413: 0x4054dc20, + 0x1414: 0x4054de20, 0x1415: 0x4054e020, 0x1416: 0x4054e220, 0x1417: 0x4054e420, + 0x1418: 0x4054e620, 0x1419: 0x4054e820, 0x141a: 0x4054ea20, 0x141b: 0x4054ec20, + 0x141c: 0x4054ee20, 0x141d: 0x4054f020, 0x141e: 0x4054f220, 0x141f: 0x4054f420, + 0x1420: 0x4054f620, 0x1421: 0x4054f820, 0x1422: 0x4054fa20, 0x1423: 0x4054fc20, + 0x1424: 0x4054fe20, 0x1425: 0x40550020, 0x1426: 0x40550220, 0x1427: 0x40550420, + 0x1428: 0x40550620, 0x1429: 0x40550820, 0x142a: 0x40550a20, 0x142b: 0x40550c20, + 0x142c: 0x40550e20, 0x142d: 0x40551020, 0x142e: 0x40551220, 0x142f: 0x40551420, + 0x1430: 0x40551620, 0x1431: 0x40551820, 0x1432: 0x40551a20, 0x1433: 0x40551c20, + 0x1434: 0x40551e20, + // Block 0x51, offset 0x1440 + 0x1440: 0x40021e20, 0x1441: 0x40552020, 0x1442: 0x40552220, 0x1443: 0x40552420, + 0x1444: 0x40552620, 0x1445: 0x40552820, 0x1446: 0x40552a20, 0x1447: 0x40552c20, + 0x1448: 0x40552e20, 0x1449: 0x40553020, 0x144a: 0x40553220, 0x144b: 0x40553420, + 0x144c: 0x40553620, 0x144d: 0x40553820, 0x144e: 0x40553a20, 0x144f: 0x40553c20, + 0x1450: 0x40553e20, 0x1451: 0x40554020, 0x1452: 0x40554220, 0x1453: 0x40554420, + 0x1454: 0x40554620, 0x1455: 0x40554820, 0x1456: 0x40554a20, 0x1457: 0x40554c20, + 0x1458: 0x40554e20, 0x1459: 0x40555020, 0x145a: 0x40555220, 0x145b: 0x40555420, + 0x145c: 0x40555620, 0x145d: 0x40555820, 0x145e: 0x40555a20, 0x145f: 0x40555c20, + 0x1460: 0x40555e20, 0x1461: 0x40556020, 0x1462: 0x40556220, 0x1463: 0x40556420, + 0x1464: 0x40556620, 0x1465: 0x40556820, 0x1466: 0x40556a20, 0x1467: 0x40556c20, + 0x1468: 0x40556e20, 0x1469: 0x40557020, 0x146a: 0x40557220, 0x146b: 0x40557420, + 0x146c: 0x40557620, 0x146d: 0x40557820, 0x146e: 0x40557a20, 0x146f: 0x40557c20, + 0x1470: 0x40557e20, 0x1471: 0x40558020, 0x1472: 0x40558220, 0x1473: 0x40558420, + 0x1474: 0x40558620, 0x1475: 0x40558820, 0x1476: 0x40558a20, 0x1477: 0x40558c20, + 0x1478: 0x40558e20, 0x1479: 0x40559020, 0x147a: 0x40559220, 0x147b: 0x40559420, + 0x147c: 0x40559620, 0x147d: 0x40559820, 0x147e: 0x40559a20, 0x147f: 0x40559c20, + // Block 0x52, offset 0x1480 + 0x1480: 0x40559e20, 0x1481: 0x4055a020, 0x1482: 0x4055a220, 0x1483: 0x4055a420, + 0x1484: 0x4055a620, 0x1485: 0x4055a820, 0x1486: 0x4055aa20, 0x1487: 0x4055ac20, + 0x1488: 0x4055ae20, 0x1489: 0x4055b020, 0x148a: 0x4055b220, 0x148b: 0x4055b420, + 0x148c: 0x4055b620, 0x148d: 0x4055b820, 0x148e: 0x4055ba20, 0x148f: 0x4055bc20, + 0x1490: 0x4055be20, 0x1491: 0x4055c020, 0x1492: 0x4055c220, 0x1493: 0x4055c420, + 0x1494: 0x4055c620, 0x1495: 0x4055c820, 0x1496: 0x4055ca20, 0x1497: 0x4055cc20, + 0x1498: 0x4055ce20, 0x1499: 0x4055d020, 0x149a: 0x4055d220, 0x149b: 0x4055d420, + 0x149c: 0x4055d620, 0x149d: 0x4055d820, 0x149e: 0x4055da20, 0x149f: 0x4055dc20, + 0x14a0: 0x4055de20, 0x14a1: 0x4055e020, 0x14a2: 0x4055e220, 0x14a3: 0x4055e420, + 0x14a4: 0x4055e620, 0x14a5: 0x4055e820, 0x14a6: 0x4055ea20, 0x14a7: 0x4055ec20, + 0x14a8: 0x4055ee20, 0x14a9: 0x4055f020, 0x14aa: 0x4055f220, 0x14ab: 0x4055f420, + 0x14ac: 0x4055f620, 0x14ad: 0x4055f820, 0x14ae: 0x4055fa20, 0x14af: 0x4055fc20, + 0x14b0: 0x4055fe20, 0x14b1: 0x40560020, 0x14b2: 0x40560220, 0x14b3: 0x40560420, + 0x14b4: 0x40560620, 0x14b5: 0x40560820, 0x14b6: 0x40560a20, 0x14b7: 0x40560c20, + 0x14b8: 0x40560e20, 0x14b9: 0x40561020, 0x14ba: 0x40561220, 0x14bb: 0x40561420, + 0x14bc: 0x40561620, 0x14bd: 0x40561820, 0x14be: 0x40561a20, 0x14bf: 0x40561c20, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x40561e20, 0x14c1: 0x40562020, 0x14c2: 0x40562220, 0x14c3: 0x40562420, + 0x14c4: 0x40562620, 0x14c5: 0x40562820, 0x14c6: 0x40562a20, 0x14c7: 0x40562c20, + 0x14c8: 0x40562e20, 0x14c9: 0x40563020, 0x14ca: 0x40563220, 0x14cb: 0x40563420, + 0x14cc: 0x40563620, 0x14cd: 0x40563820, 0x14ce: 0x40563a20, 0x14cf: 0x40563c20, + 0x14d0: 0x40563e20, 0x14d1: 0x40564020, 0x14d2: 0x40564220, 0x14d3: 0x40564420, + 0x14d4: 0x40564620, 0x14d5: 0x40564820, 0x14d6: 0x40564a20, 0x14d7: 0x40564c20, + 0x14d8: 0x40564e20, 0x14d9: 0x40565020, 0x14da: 0x40565220, 0x14db: 0x40565420, + 0x14dc: 0x40565620, 0x14dd: 0x40565820, 0x14de: 0x40565a20, 0x14df: 0x40565c20, + 0x14e0: 0x40565e20, 0x14e1: 0x40566020, 0x14e2: 0x40566220, 0x14e3: 0x40566420, + 0x14e4: 0x40566620, 0x14e5: 0x40566820, 0x14e6: 0x40566a20, 0x14e7: 0x40566c20, + 0x14e8: 0x40566e20, 0x14e9: 0x40567020, 0x14ea: 0x40567220, 0x14eb: 0x40567420, + 0x14ec: 0x40567620, 0x14ed: 0x40567820, 0x14ee: 0x40567a20, 0x14ef: 0x40567c20, + 0x14f0: 0x40567e20, 0x14f1: 0x40568020, 0x14f2: 0x40568220, 0x14f3: 0x40568420, + 0x14f4: 0x40568620, 0x14f5: 0x40568820, 0x14f6: 0x40568a20, 0x14f7: 0x40568c20, + 0x14f8: 0x40568e20, 0x14f9: 0x40569020, 0x14fa: 0x40569220, 0x14fb: 0x40569420, + 0x14fc: 0x40569620, 0x14fd: 0x40569820, 0x14fe: 0x40569a20, 0x14ff: 0x40569c20, + // Block 0x54, offset 0x1500 + 0x1500: 0x40569e20, 0x1501: 0x4056a020, 0x1502: 0x4056a220, 0x1503: 0x4056a420, + 0x1504: 0x4056a620, 0x1505: 0x4056a820, 0x1506: 0x4056aa20, 0x1507: 0x4056ac20, + 0x1508: 0x4056ae20, 0x1509: 0x4056b020, 0x150a: 0x4056b220, 0x150b: 0x4056b420, + 0x150c: 0x4056b620, 0x150d: 0x4056b820, 0x150e: 0x4056ba20, 0x150f: 0x4056bc20, + 0x1510: 0x4056be20, 0x1511: 0x4056c020, 0x1512: 0x4056c220, 0x1513: 0x4056c420, + 0x1514: 0x4056c620, 0x1515: 0x4056c820, 0x1516: 0x4056ca20, 0x1517: 0x4056cc20, + 0x1518: 0x4056ce20, 0x1519: 0x4056d020, 0x151a: 0x4056d220, 0x151b: 0x4056d420, + 0x151c: 0x4056d620, 0x151d: 0x4056d820, 0x151e: 0x4056da20, 0x151f: 0x4056dc20, + 0x1520: 0x4056de20, 0x1521: 0x4056e020, 0x1522: 0x4056e220, 0x1523: 0x4056e420, + 0x1524: 0x4056e620, 0x1525: 0x4056e820, 0x1526: 0x4056ea20, 0x1527: 0x4056ec20, + 0x1528: 0x4056ee20, 0x1529: 0x4056f020, 0x152a: 0x4056f220, 0x152b: 0x4056f420, + 0x152c: 0x4056f620, 0x152d: 0x4056f820, 0x152e: 0x4056fa20, 0x152f: 0x4056fc20, + 0x1530: 0x4056fe20, 0x1531: 0x40570020, 0x1532: 0x40570220, 0x1533: 0x40570420, + 0x1534: 0x40570620, 0x1535: 0x40570820, 0x1536: 0x40570a20, 0x1537: 0x40570c20, + 0x1538: 0x40570e20, 0x1539: 0x40571020, 0x153a: 0x40571220, 0x153b: 0x40571420, + 0x153c: 0x40571620, 0x153d: 0x40571820, 0x153e: 0x40571a20, 0x153f: 0x40571c20, + // Block 0x55, offset 0x1540 + 0x1540: 0x40571e20, 0x1541: 0x40572020, 0x1542: 0x40572220, 0x1543: 0x40572420, + 0x1544: 0x40572620, 0x1545: 0x40572820, 0x1546: 0x40572a20, 0x1547: 0x40572c20, + 0x1548: 0x40572e20, 0x1549: 0x40573020, 0x154a: 0x40573220, 0x154b: 0x40573420, + 0x154c: 0x40573620, 0x154d: 0x40573820, 0x154e: 0x40573a20, 0x154f: 0x40573c20, + 0x1550: 0x40573e20, 0x1551: 0x40574020, 0x1552: 0x40574220, 0x1553: 0x40574420, + 0x1554: 0x40574620, 0x1555: 0x40574820, 0x1556: 0x40574a20, 0x1557: 0x40574c20, + 0x1558: 0x40574e20, 0x1559: 0x40575020, 0x155a: 0x40575220, 0x155b: 0x40575420, + 0x155c: 0x40575620, 0x155d: 0x40575820, 0x155e: 0x40575a20, 0x155f: 0x40575c20, + 0x1560: 0x40575e20, 0x1561: 0x40576020, 0x1562: 0x40576220, 0x1563: 0x40576420, + 0x1564: 0x40576620, 0x1565: 0x40576820, 0x1566: 0x40576a20, 0x1567: 0x40576c20, + 0x1568: 0x40576e20, 0x1569: 0x40577020, 0x156a: 0x40577220, 0x156b: 0x40577420, + 0x156c: 0x40577620, 0x156d: 0x40577820, 0x156e: 0x40577a20, 0x156f: 0x40577c20, + 0x1570: 0x40577e20, 0x1571: 0x40578020, 0x1572: 0x40578220, 0x1573: 0x40578420, + 0x1574: 0x40578620, 0x1575: 0x40578820, 0x1576: 0x40578a20, 0x1577: 0x40578c20, + 0x1578: 0x40578e20, 0x1579: 0x40579020, 0x157a: 0x40579220, 0x157b: 0x40579420, + 0x157c: 0x40579620, 0x157d: 0x40579820, 0x157e: 0x40579a20, 0x157f: 0x40579c20, + // Block 0x56, offset 0x1580 + 0x1580: 0x40579e20, 0x1581: 0x4057a020, 0x1582: 0x4057a220, 0x1583: 0x4057a420, + 0x1584: 0x4057a620, 0x1585: 0x4057a820, 0x1586: 0x4057aa20, 0x1587: 0x4057ac20, + 0x1588: 0x4057ae20, 0x1589: 0x4057b020, 0x158a: 0x4057b220, 0x158b: 0x4057b420, + 0x158c: 0x4057b620, 0x158d: 0x4057b820, 0x158e: 0x4057ba20, 0x158f: 0x4057bc20, + 0x1590: 0x4057be20, 0x1591: 0x4057c020, 0x1592: 0x4057c220, 0x1593: 0x4057c420, + 0x1594: 0x4057c620, 0x1595: 0x4057c820, 0x1596: 0x4057ca20, 0x1597: 0x4057cc20, + 0x1598: 0x4057ce20, 0x1599: 0x4057d020, 0x159a: 0x4057d220, 0x159b: 0x4057d420, + 0x159c: 0x4057d620, 0x159d: 0x4057d820, 0x159e: 0x4057da20, 0x159f: 0x4057dc20, + 0x15a0: 0x4057de20, 0x15a1: 0x4057e020, 0x15a2: 0x4057e220, 0x15a3: 0x4057e420, + 0x15a4: 0x4057e620, 0x15a5: 0x4057e820, 0x15a6: 0x4057ea20, 0x15a7: 0x4057ec20, + 0x15a8: 0x4057ee20, 0x15a9: 0x4057f020, 0x15aa: 0x4057f220, 0x15ab: 0x4057f420, + 0x15ac: 0x4057f620, 0x15ad: 0x4057f820, 0x15ae: 0x4057fa20, 0x15af: 0x4057fc20, + 0x15b0: 0x4057fe20, 0x15b1: 0x40580020, 0x15b2: 0x40580220, 0x15b3: 0x40580420, + 0x15b4: 0x40580620, 0x15b5: 0x40580820, 0x15b6: 0x40580a20, 0x15b7: 0x40580c20, + 0x15b8: 0x40580e20, 0x15b9: 0x40581020, 0x15ba: 0x40581220, 0x15bb: 0x40581420, + 0x15bc: 0x40587a20, 0x15bd: 0x40581620, 0x15be: 0x40581a20, 0x15bf: 0x40581c20, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x40581e20, 0x15c1: 0x40582020, 0x15c2: 0x40582220, 0x15c3: 0x40582420, + 0x15c4: 0x40582620, 0x15c5: 0x40582820, 0x15c6: 0x40582a20, 0x15c7: 0x40582c20, + 0x15c8: 0x40582e20, 0x15c9: 0x40583020, 0x15ca: 0x40583220, 0x15cb: 0x40583420, + 0x15cc: 0x40583620, 0x15cd: 0x40583820, 0x15ce: 0x40583c20, 0x15cf: 0x40583e20, + 0x15d0: 0x40584020, 0x15d1: 0x40584220, 0x15d2: 0x40584420, 0x15d3: 0x40584620, + 0x15d4: 0x40584820, 0x15d5: 0x40584a20, 0x15d6: 0x40585820, 0x15d7: 0x40585a20, + 0x15d8: 0x40585c20, 0x15d9: 0x40585e20, 0x15da: 0x40586020, 0x15db: 0x40586220, + 0x15dc: 0x40586420, 0x15dd: 0x40586620, 0x15de: 0x40586820, 0x15df: 0x40586a20, + 0x15e0: 0x40586c20, 0x15e1: 0x40586e20, 0x15e2: 0x40587020, 0x15e3: 0x40587220, + 0x15e4: 0x40587420, 0x15e5: 0x40587620, 0x15e6: 0x40587820, 0x15e7: 0x40587c20, + 0x15e8: 0x40587e20, 0x15e9: 0x40588020, 0x15ea: 0x40588220, 0x15eb: 0x40588420, + 0x15ec: 0x40588620, 0x15ed: 0x40588820, 0x15ee: 0x40588a20, 0x15ef: 0x40588c20, + 0x15f0: 0x40588e20, 0x15f1: 0x40589020, 0x15f2: 0x40589220, 0x15f3: 0x40589420, + 0x15f4: 0x40589620, 0x15f5: 0x40589820, 0x15f6: 0x40589a20, 0x15f7: 0x40589c20, + 0x15f8: 0x40589e20, 0x15f9: 0x4058a020, 0x15fa: 0x4058a220, 0x15fb: 0x4058a420, + 0x15fc: 0x4058a620, 0x15fd: 0x4058a820, 0x15fe: 0x4058aa20, 0x15ff: 0x4058ac20, + // Block 0x58, offset 0x1600 + 0x1600: 0x4058ae20, 0x1601: 0x4058b020, 0x1602: 0x4058b220, 0x1603: 0x4058b420, + 0x1604: 0x4058b620, 0x1605: 0x4058b820, 0x1606: 0x4058ba20, 0x1607: 0x4058bc20, + 0x1608: 0x4058be20, 0x1609: 0x4058c020, 0x160a: 0x4058c220, 0x160b: 0x4058c420, + 0x160c: 0x4058c620, 0x160d: 0x4058c820, 0x160e: 0x4058ca20, 0x160f: 0x4058cc20, + 0x1610: 0x4058ce20, 0x1611: 0x4058d020, 0x1612: 0x4058d220, 0x1613: 0x4058d420, + 0x1614: 0x4058d620, 0x1615: 0x4058d820, 0x1616: 0x4058da20, 0x1617: 0x4058dc20, + 0x1618: 0x4058de20, 0x1619: 0x4058e020, 0x161a: 0x4058e220, 0x161b: 0x4058e420, + 0x161c: 0x4058e620, 0x161d: 0x4058e820, 0x161e: 0x4058ea20, 0x161f: 0x4058ec20, + 0x1620: 0x4058ee20, 0x1621: 0x4058f020, 0x1622: 0x4058f220, 0x1623: 0x4058f420, + 0x1624: 0x4058f620, 0x1625: 0x4058f820, 0x1626: 0x4058fa20, 0x1627: 0x4058fc20, + 0x1628: 0x4058fe20, 0x1629: 0x40590020, 0x162a: 0x40590220, 0x162b: 0x40590420, + 0x162c: 0x40590620, 0x162d: 0x40590820, 0x162e: 0x40590a20, 0x162f: 0x40590c20, + 0x1630: 0x40590e20, 0x1631: 0x40591020, 0x1632: 0x40591220, 0x1633: 0x40591420, + 0x1634: 0x40591620, 0x1635: 0x40591820, 0x1636: 0x40591a20, 0x1637: 0x40591c20, + 0x1638: 0x40591e20, 0x1639: 0x40592020, 0x163a: 0x40592220, 0x163b: 0x40592420, + 0x163c: 0x40592620, 0x163d: 0x40592820, 0x163e: 0x40592a20, 0x163f: 0x40592c20, + // Block 0x59, offset 0x1640 + 0x1640: 0x40592e20, 0x1641: 0x40593020, 0x1642: 0x40593220, 0x1643: 0x40593420, + 0x1644: 0x40593620, 0x1645: 0x40593820, 0x1646: 0x40593a20, 0x1647: 0x40593c20, + 0x1648: 0x40593e20, 0x1649: 0x40594020, 0x164a: 0x40594220, 0x164b: 0x40594420, + 0x164c: 0x40594620, 0x164d: 0x40594820, 0x164e: 0x40594a20, 0x164f: 0x40594c20, + 0x1650: 0x40594e20, 0x1651: 0x40595020, 0x1652: 0x40595220, 0x1653: 0x40595420, + 0x1654: 0x40595620, 0x1655: 0x40595820, 0x1656: 0x40595a20, 0x1657: 0x40595c20, + 0x1658: 0x40595e20, 0x1659: 0x40596020, 0x165a: 0x40596220, 0x165b: 0x40596420, + 0x165c: 0x40596620, 0x165d: 0x40596820, 0x165e: 0x40596a20, 0x165f: 0x40596c20, + 0x1660: 0x40596e20, 0x1661: 0x40597020, 0x1662: 0x40597220, 0x1663: 0x40597420, + 0x1664: 0x40597620, 0x1665: 0x40597820, 0x1666: 0x40597a20, 0x1667: 0x40597c20, + 0x1668: 0x40597e20, 0x1669: 0x40598020, 0x166a: 0x40598220, 0x166b: 0x40598420, + 0x166c: 0x40598620, 0x166d: 0x40598820, 0x166e: 0x40598a20, 0x166f: 0x40598c20, + 0x1670: 0x40598e20, 0x1671: 0x40599020, 0x1672: 0x40599220, 0x1673: 0x40599420, + 0x1674: 0x40599620, 0x1675: 0x40599820, 0x1676: 0x40599a20, 0x1677: 0x40599c20, + 0x1678: 0x40599e20, 0x1679: 0x4059a020, 0x167a: 0x4059a220, 0x167b: 0x4059a420, + 0x167c: 0x4059a620, 0x167d: 0x4059a820, 0x167e: 0x4059aa20, 0x167f: 0x4059ac20, + // Block 0x5a, offset 0x1680 + 0x1680: 0x4059ae20, 0x1681: 0x4059b020, 0x1682: 0x4059b220, 0x1683: 0x4059b420, + 0x1684: 0x4059b620, 0x1685: 0x4059b820, 0x1686: 0x4059ba20, 0x1687: 0x4059bc20, + 0x1688: 0x4059be20, 0x1689: 0x4059c020, 0x168a: 0x4059c220, 0x168b: 0x4059c420, + 0x168c: 0x4059c620, 0x168d: 0x4059c820, 0x168e: 0x4059ca20, 0x168f: 0x4059cc20, + 0x1690: 0x4059ce20, 0x1691: 0x4059d020, 0x1692: 0x4059d220, 0x1693: 0x4059d420, + 0x1694: 0x4059d620, 0x1695: 0x4059d820, 0x1696: 0x4059da20, 0x1697: 0x4059dc20, + 0x1698: 0x4059de20, 0x1699: 0x4059e020, 0x169a: 0x4059e220, 0x169b: 0x4059e420, + 0x169c: 0x4059e620, 0x169d: 0x4059e820, 0x169e: 0x4059ea20, 0x169f: 0x4059ec20, + 0x16a0: 0x4059ee20, 0x16a1: 0x4059f020, 0x16a2: 0x4059f220, 0x16a3: 0x4059f420, + 0x16a4: 0x4059f620, 0x16a5: 0x4059f820, 0x16a6: 0x4059fa20, 0x16a7: 0x4059fc20, + 0x16a8: 0x4059fe20, 0x16a9: 0x405a0020, 0x16aa: 0x405a0220, 0x16ab: 0x405a0420, + 0x16ac: 0x405a0620, 0x16ad: 0x4005d420, 0x16ae: 0x4002f420, 0x16af: 0x40581820, + 0x16b0: 0x40583a20, 0x16b1: 0x40584c20, 0x16b2: 0x40584e20, 0x16b3: 0x40585020, + 0x16b4: 0x40585220, 0x16b5: 0x40585420, 0x16b6: 0x40585620, 0x16b7: 0x405a0820, + 0x16b8: 0x405a0a20, 0x16b9: 0x405a0c20, 0x16ba: 0x405a0e20, 0x16bb: 0x405a1020, + 0x16bc: 0x405a1220, 0x16bd: 0x405a1420, 0x16be: 0x405a1620, 0x16bf: 0x405a1820, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x00021284, 0x16c1: 0x405aa620, 0x16c2: 0x405aa820, 0x16c3: 0x405aaa20, + 0x16c4: 0x405aac20, 0x16c5: 0x405aae20, 0x16c6: 0x405ab020, 0x16c7: 0x405ab220, + 0x16c8: 0x405ab420, 0x16c9: 0x405ab620, 0x16ca: 0x405ab820, 0x16cb: 0x405aba20, + 0x16cc: 0x405abc20, 0x16cd: 0x405abe20, 0x16ce: 0x405ac020, 0x16cf: 0x405ac220, + 0x16d0: 0x405ac420, 0x16d1: 0x405ac620, 0x16d2: 0x405ac820, 0x16d3: 0x405aca20, + 0x16d4: 0x405acc20, 0x16d5: 0x405ace20, 0x16d6: 0x405ad020, 0x16d7: 0x405ad220, + 0x16d8: 0x405ad420, 0x16d9: 0x405ad620, 0x16da: 0x405ad820, 0x16db: 0x40040820, + 0x16dc: 0x40040a20, + 0x16e0: 0x405ada20, 0x16e1: 0xe000202d, 0x16e2: 0x405adc20, 0x16e3: 0x405b1420, + 0x16e4: 0xe0002030, 0x16e5: 0xe0002033, 0x16e6: 0x405ade20, 0x16e7: 0xe0002036, + 0x16e8: 0x405ae020, 0x16e9: 0xe000203c, 0x16ea: 0x405b1020, 0x16eb: 0x405b1220, + 0x16ec: 0xe000203f, 0x16ed: 0xe0002042, 0x16ee: 0xe0002045, 0x16ef: 0x405ae220, + 0x16f0: 0x405ae420, 0x16f1: 0x405ae620, 0x16f2: 0x405ae820, 0x16f3: 0xe0002048, + 0x16f4: 0xe000204b, 0x16f5: 0xe000204e, 0x16f6: 0xe0002051, 0x16f7: 0x405aea20, + 0x16f8: 0x405b1a20, 0x16f9: 0x405aec20, 0x16fa: 0x405aee20, 0x16fb: 0xe0002057, + 0x16fc: 0xe000205a, 0x16fd: 0xe000205d, 0x16fe: 0x405af020, 0x16ff: 0xe0002060, + // Block 0x5c, offset 0x1700 + 0x1700: 0xe0002063, 0x1701: 0x405af220, 0x1702: 0xe0002066, 0x1703: 0x405af420, + 0x1704: 0xe0002069, 0x1705: 0x405af620, 0x1706: 0xe000206c, 0x1707: 0x405af820, + 0x1708: 0x405afa20, 0x1709: 0x405afc20, 0x170a: 0x405afe20, 0x170b: 0xe0002075, + 0x170c: 0xe000207b, 0x170d: 0xe000207e, 0x170e: 0xe0002081, 0x170f: 0x405b0020, + 0x1710: 0xe0002084, 0x1711: 0xe0002087, 0x1712: 0x405b0220, 0x1713: 0xe000208a, + 0x1714: 0xe000208d, 0x1715: 0xe0002072, 0x1716: 0x405b0420, 0x1717: 0x405b0620, + 0x1718: 0xe0002090, 0x1719: 0xe0002093, 0x171a: 0x405b0820, 0x171b: 0xe000209b, + 0x171c: 0x405b0a20, 0x171d: 0xe000209e, 0x171e: 0x405b0c20, 0x171f: 0x405b0e20, + 0x1720: 0x405b1620, 0x1721: 0x405b1e20, 0x1722: 0x405b2020, 0x1723: 0x405b1820, + 0x1724: 0x405b1c20, 0x1725: 0x405b2220, 0x1726: 0x405b2420, 0x1727: 0xe00020a1, + 0x1728: 0xe00020a4, 0x1729: 0xe0002054, 0x172a: 0xe0002078, 0x172b: 0x4002b220, + 0x172c: 0x4002b420, 0x172d: 0x4002b620, 0x172e: 0xe000206f, 0x172f: 0xe0002096, + 0x1730: 0xe0002039, + // Block 0x5d, offset 0x1740 + 0x1740: 0x404c7620, 0x1741: 0x404c7820, 0x1742: 0x404c7a20, 0x1743: 0x404c7c20, + 0x1744: 0x404c7e20, 0x1745: 0x404c8020, 0x1746: 0x404c8220, 0x1747: 0x404c8420, + 0x1748: 0x404c8620, 0x1749: 0x404c8820, 0x174a: 0x404c8a20, 0x174b: 0x404c8c20, + 0x174c: 0x404c8e20, 0x174e: 0x404c9020, 0x174f: 0x404c9220, + 0x1750: 0x404c9420, 0x1751: 0x404c9620, 0x1752: 0x404c9820, 0x1753: 0x404c9a20, + 0x1754: 0x8209264e, + 0x1760: 0x404c9e20, 0x1761: 0x404ca020, 0x1762: 0x404ca220, 0x1763: 0x404ca420, + 0x1764: 0x404ca620, 0x1765: 0x404ca820, 0x1766: 0x404caa20, 0x1767: 0x404cac20, + 0x1768: 0x404cae20, 0x1769: 0x404cb020, 0x176a: 0x404cb220, 0x176b: 0x404cb420, + 0x176c: 0x404cb620, 0x176d: 0x404cb820, 0x176e: 0x404cba20, 0x176f: 0x404cbc20, + 0x1770: 0x404cbe20, 0x1771: 0x404cc020, 0x1772: 0x404cc220, 0x1773: 0x404cc420, + 0x1774: 0x82092663, 0x1775: 0x40031c20, 0x1776: 0x40031e20, + // Block 0x5e, offset 0x1780 + 0x1780: 0x404cc820, 0x1781: 0x404cca20, 0x1782: 0x404ccc20, 0x1783: 0x404cce20, + 0x1784: 0x404cd020, 0x1785: 0x404cd220, 0x1786: 0x404cd420, 0x1787: 0x404cd620, + 0x1788: 0x404cd820, 0x1789: 0x404cda20, 0x178a: 0x404cdc20, 0x178b: 0x404cde20, + 0x178c: 0x404ce020, 0x178d: 0x404ce220, 0x178e: 0x404ce420, 0x178f: 0x404ce620, + 0x1790: 0x404ce820, 0x1791: 0x404cea20, 0x1792: 0x404cec20, 0x1793: 0x404cee20, + 0x17a0: 0x404cf020, 0x17a1: 0x404cf220, 0x17a2: 0x404cf420, 0x17a3: 0x404cf620, + 0x17a4: 0x404cf820, 0x17a5: 0x404cfa20, 0x17a6: 0x404cfc20, 0x17a7: 0x404cfe20, + 0x17a8: 0x404d0020, 0x17a9: 0x404d0220, 0x17aa: 0x404d0420, 0x17ab: 0x404d0620, + 0x17ac: 0x404d0820, 0x17ae: 0x404d0a20, 0x17af: 0x404d0c20, + 0x17b0: 0x404d0e20, 0x17b2: 0x404d1020, 0x17b3: 0x404d1220, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x404fa420, 0x17c1: 0x404fa620, 0x17c2: 0x404fa820, 0x17c3: 0x404faa20, + 0x17c4: 0x404fac20, 0x17c5: 0x404fae20, 0x17c6: 0x404fb020, 0x17c7: 0x404fb220, + 0x17c8: 0x404fb420, 0x17c9: 0x404fb620, 0x17ca: 0x404fb820, 0x17cb: 0x404fba20, + 0x17cc: 0x404fbc20, 0x17cd: 0x404fbe20, 0x17ce: 0x404fc020, 0x17cf: 0x404fc220, + 0x17d0: 0x404fc420, 0x17d1: 0x404fc620, 0x17d2: 0x404fc820, 0x17d3: 0x404fca20, + 0x17d4: 0x404fcc20, 0x17d5: 0x404fce20, 0x17d6: 0x404fd020, 0x17d7: 0x404fd220, + 0x17d8: 0x404fd420, 0x17d9: 0x404fd620, 0x17da: 0x404fd820, 0x17db: 0x404fda20, + 0x17dc: 0x404fdc20, 0x17dd: 0x404fde20, 0x17de: 0x404fe020, 0x17df: 0x404fe220, + 0x17e0: 0x404fe420, 0x17e1: 0x404fe620, 0x17e2: 0x404fe820, 0x17e3: 0x404fec20, + 0x17e4: 0x404fee20, 0x17e5: 0x404ff020, 0x17e6: 0x404ff220, 0x17e7: 0x404ff420, + 0x17e8: 0x404ff620, 0x17e9: 0x404ff820, 0x17ea: 0x404ffa20, 0x17eb: 0x404ffc20, + 0x17ec: 0x404ffe20, 0x17ed: 0x40500020, 0x17ee: 0x40500220, 0x17ef: 0x40500420, + 0x17f0: 0x40500620, 0x17f1: 0x40500820, 0x17f2: 0x40500a20, 0x17f3: 0x40500c20, + 0x17f4: 0xa0000000, 0x17f5: 0xa0000000, 0x17f6: 0x40500e20, 0x17f7: 0x40501020, + 0x17f8: 0x40501220, 0x17f9: 0x40501420, 0x17fa: 0x40501620, 0x17fb: 0x40501820, + 0x17fc: 0x40501a20, 0x17fd: 0x40501c20, 0x17fe: 0x40501e20, 0x17ff: 0x40502020, + // Block 0x60, offset 0x1800 + 0x1800: 0x40502220, 0x1801: 0x40502420, 0x1802: 0x40502620, 0x1803: 0x40502820, + 0x1804: 0x40502a20, 0x1805: 0x40502c20, 0x1806: 0xa000f302, 0x1807: 0xa000f402, + 0x1808: 0xa0011402, 0x1809: 0xa0011502, 0x180a: 0xa0011602, 0x180b: 0xa0005f02, + 0x180c: 0xa0005f02, 0x180d: 0xa0005f02, 0x180e: 0xa0005f02, 0x180f: 0xa0005f02, + 0x1810: 0xa0005f02, 0x1811: 0xa0005f02, 0x1812: 0x82092817, 0x1813: 0xa0000000, + 0x1814: 0x40032620, 0x1815: 0x40032820, 0x1816: 0x4002ac20, 0x1817: 0x4027bc20, + 0x1818: 0x4005bc20, 0x1819: 0x4005be20, 0x181a: 0x4005c020, 0x181b: 0x4027f620, + 0x181c: 0x404fea20, 0x181d: 0xae605f02, + 0x1820: 0xe00001b5, 0x1821: 0xe0000249, 0x1822: 0xe0000361, 0x1823: 0xe000043b, + 0x1824: 0xe0000510, 0x1825: 0xe00005da, 0x1826: 0xe00006a5, 0x1827: 0xe000074d, + 0x1828: 0xe00007f9, 0x1829: 0xe000089e, + 0x1830: 0xe00001b8, 0x1831: 0xe000024c, 0x1832: 0xe0000364, 0x1833: 0xe000043e, + 0x1834: 0xe0000513, 0x1835: 0xe00005dd, 0x1836: 0xe00006a8, 0x1837: 0xe0000750, + 0x1838: 0xe00007fc, 0x1839: 0xe00008a1, + // Block 0x61, offset 0x1840 + 0x1840: 0x40056a20, 0x1841: 0x4002e620, 0x1842: 0x40025220, 0x1843: 0x4002f020, + 0x1844: 0x4002a620, 0x1845: 0x4002a820, 0x1846: 0x40022220, 0x1847: 0x40022420, + 0x1848: 0x40025420, 0x1849: 0x4002f220, 0x184a: 0xa0000000, 0x184b: 0xa0000000, + 0x184c: 0xa0000000, 0x184d: 0xa0000000, 0x184e: 0x40020c20, + 0x1850: 0xe00001c7, 0x1851: 0xe000025b, 0x1852: 0xe0000373, 0x1853: 0xe000044d, + 0x1854: 0xe0000522, 0x1855: 0xe00005ec, 0x1856: 0xe00006b7, 0x1857: 0xe000075f, + 0x1858: 0xe000080b, 0x1859: 0xe00008b0, + 0x1860: 0x40533820, 0x1861: 0x40533c20, 0x1862: 0x40534220, 0x1863: 0x40534e20, + 0x1864: 0x40535220, 0x1865: 0x40535820, 0x1866: 0x40535c20, 0x1867: 0x40536220, + 0x1868: 0x40536420, 0x1869: 0x40536620, 0x186a: 0x40537020, 0x186b: 0x40537420, + 0x186c: 0x40537a20, 0x186d: 0x40537e20, 0x186e: 0x40538820, 0x186f: 0x40538c20, + 0x1870: 0x40538e20, 0x1871: 0x40539020, 0x1872: 0x40539e20, 0x1873: 0x4053a420, + 0x1874: 0x4053aa20, 0x1875: 0x4053b420, 0x1876: 0x4053bc20, 0x1877: 0x4053c220, + 0x1878: 0x4053c620, 0x1879: 0x4053ca20, 0x187a: 0x4053d020, 0x187b: 0x4053da20, + 0x187c: 0x4053dc20, 0x187d: 0x4053e220, 0x187e: 0x4053ea20, 0x187f: 0x4053f020, + // Block 0x62, offset 0x1880 + 0x1880: 0x4053f220, 0x1881: 0x4053f420, 0x1882: 0x4053f620, 0x1883: 0x40533620, + 0x1884: 0x40533e20, 0x1885: 0x40534420, 0x1886: 0x40535020, 0x1887: 0x40535420, + 0x1888: 0x40535a20, 0x1889: 0x40535e20, 0x188a: 0x40536820, 0x188b: 0x40537220, + 0x188c: 0x40537620, 0x188d: 0x40537c20, 0x188e: 0x40538020, 0x188f: 0x40538a20, + 0x1890: 0x4053a020, 0x1891: 0x4053a620, 0x1892: 0x4053ac20, 0x1893: 0x4053b620, + 0x1894: 0x4053de20, 0x1895: 0x4053be20, 0x1896: 0x4053c820, 0x1897: 0x4053d220, + 0x1898: 0x4053e620, 0x1899: 0x4053ec20, 0x189a: 0x4053f820, 0x189b: 0x4053fa20, + 0x189c: 0x4053b020, 0x189d: 0x40534020, 0x189e: 0x40534620, 0x189f: 0x40534c20, + 0x18a0: 0x40536020, 0x18a1: 0x40535620, 0x18a2: 0x40536a20, 0x18a3: 0x4053d420, + 0x18a4: 0x40538220, 0x18a5: 0x40538620, 0x18a6: 0x40537820, 0x18a7: 0x40539220, + 0x18a8: 0x4053a220, 0x18a9: 0x4053a820, 0x18aa: 0x4053b820, 0x18ab: 0x4053cc20, + 0x18ac: 0x4053e820, 0x18ad: 0x4053ee20, 0x18ae: 0x4053e020, 0x18af: 0x4053e420, + 0x18b0: 0x4053fc20, 0x18b1: 0x4053ae20, 0x18b2: 0x4053c020, 0x18b3: 0x40534820, + 0x18b4: 0x4053d620, 0x18b5: 0x4053c420, 0x18b6: 0x4053ce20, 0x18b7: 0x4053ba20, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x40532820, 0x18c1: 0x40532a20, 0x18c2: 0x40532c20, 0x18c3: 0x40532e20, + 0x18c4: 0x40533020, 0x18c5: 0x40533220, 0x18c6: 0x40533420, 0x18c7: 0x40533a20, + 0x18c8: 0x40534a20, 0x18c9: 0x4053d820, 0x18ca: 0x40536c20, 0x18cb: 0x4053b220, + 0x18cc: 0x4053fe20, 0x18cd: 0x40540220, 0x18ce: 0x40540420, 0x18cf: 0x40540820, + 0x18d0: 0x40540a20, 0x18d1: 0x40541020, 0x18d2: 0x40541420, 0x18d3: 0x40541620, + 0x18d4: 0x40541a20, 0x18d5: 0x40541e20, 0x18d6: 0x40542220, 0x18d7: 0x40542420, + 0x18d8: 0x40540c20, 0x18d9: 0x40542020, 0x18da: 0x40538420, 0x18db: 0x40536e20, + 0x18dc: 0x40539420, 0x18dd: 0x40539620, 0x18de: 0x40540020, 0x18df: 0x40540620, + 0x18e0: 0x40540e20, 0x18e1: 0x40541220, 0x18e2: 0x40539820, 0x18e3: 0x40541c20, + 0x18e4: 0x40539a20, 0x18e5: 0x40539c20, 0x18e6: 0x40542620, 0x18e7: 0x40542820, + 0x18e8: 0x40541820, 0x18e9: 0x82e42a16, 0x18ea: 0x40542a20, + 0x18f0: 0x405a1a20, 0x18f1: 0x405a1c20, 0x18f2: 0x405a1e20, 0x18f3: 0x405a2020, + 0x18f4: 0x405a2220, 0x18f5: 0x405a2420, 0x18f6: 0x405a2620, 0x18f7: 0x405a2820, + 0x18f8: 0x405a2a20, 0x18f9: 0x405a2c20, 0x18fa: 0x405a2e20, 0x18fb: 0x405a3020, + 0x18fc: 0x405a3220, 0x18fd: 0x405a3420, 0x18fe: 0x405a3620, 0x18ff: 0x405a3820, + // Block 0x64, offset 0x1900 + 0x1900: 0x405a3a20, 0x1901: 0x405a3c20, 0x1902: 0x405a3e20, 0x1903: 0x405a4020, + 0x1904: 0x405a4220, 0x1905: 0x405a4420, 0x1906: 0x405a4620, 0x1907: 0x405a4820, + 0x1908: 0x405a4a20, 0x1909: 0x405a4c20, 0x190a: 0x405a4e20, 0x190b: 0x405a5020, + 0x190c: 0x405a5220, 0x190d: 0x405a5420, 0x190e: 0x405a5620, 0x190f: 0x405a5820, + 0x1910: 0x405a5a20, 0x1911: 0x405a5c20, 0x1912: 0x405a5e20, 0x1913: 0x405a6020, + 0x1914: 0x405a6220, 0x1915: 0x405a6420, 0x1916: 0x405a6620, 0x1917: 0x405a6820, + 0x1918: 0x405a6a20, 0x1919: 0x405a6c20, 0x191a: 0x405a6e20, 0x191b: 0x405a7020, + 0x191c: 0x405a7220, 0x191d: 0x405a7420, 0x191e: 0x405a7620, 0x191f: 0x405a7820, + 0x1920: 0x405a7a20, 0x1921: 0x405a7c20, 0x1922: 0x405a7e20, 0x1923: 0x405a8020, + 0x1924: 0x405a8220, 0x1925: 0x405a8420, 0x1926: 0x405a8620, 0x1927: 0x405a8820, + 0x1928: 0x405a8a20, 0x1929: 0x405a8c20, 0x192a: 0x405a8e20, 0x192b: 0x405a9020, + 0x192c: 0x405a9220, 0x192d: 0x405a9420, 0x192e: 0x405a9620, 0x192f: 0x405a9820, + 0x1930: 0x405a9a20, 0x1931: 0x405a9c20, 0x1932: 0x405a9e20, 0x1933: 0x405aa020, + 0x1934: 0x405aa220, 0x1935: 0x405aa420, + // Block 0x65, offset 0x1940 + 0x1940: 0x404c1220, 0x1941: 0x404c1420, 0x1942: 0x404c1620, 0x1943: 0x404c1820, + 0x1944: 0x404c1a20, 0x1945: 0x404c1c20, 0x1946: 0x404c1e20, 0x1947: 0x404c2020, + 0x1948: 0x404c2220, 0x1949: 0x404c2420, 0x194a: 0x404c2620, 0x194b: 0x404c2820, + 0x194c: 0x404c2a20, 0x194d: 0x404c2c20, 0x194e: 0x404c2e20, 0x194f: 0x404c3020, + 0x1950: 0x404c3220, 0x1951: 0x404c3420, 0x1952: 0x404c3620, 0x1953: 0x404c3820, + 0x1954: 0x404c3a20, 0x1955: 0x404c3c20, 0x1956: 0x404c3e20, 0x1957: 0x404c4020, + 0x1958: 0x404c4220, 0x1959: 0x404c4420, 0x195a: 0x404c4620, 0x195b: 0x404c4820, + 0x195c: 0x404c4a20, + 0x1960: 0x404c4c20, 0x1961: 0x404c4e20, 0x1962: 0x404c5020, 0x1963: 0x404c5220, + 0x1964: 0x404c5420, 0x1965: 0x404c5620, 0x1966: 0x404c5820, 0x1967: 0x404c5a20, + 0x1968: 0x404c5c20, 0x1969: 0x404c5e20, 0x196a: 0x404c6020, 0x196b: 0x404c6220, + 0x1970: 0x404c6420, 0x1971: 0x404c6620, 0x1972: 0x404c6820, 0x1973: 0x404c6a20, + 0x1974: 0x404c6c20, 0x1975: 0x404c6e20, 0x1976: 0x404c7020, 0x1977: 0x404c7220, + 0x1978: 0x404c7420, 0x1979: 0xade11f02, 0x197a: 0xae612002, 0x197b: 0xadc12102, + // Block 0x66, offset 0x1980 + 0x1980: 0x4007a620, + 0x1984: 0x4002c220, 0x1985: 0x4002d220, 0x1986: 0xe000018e, 0x1987: 0xe000021f, + 0x1988: 0xe000033a, 0x1989: 0xe0000414, 0x198a: 0xe00004e9, 0x198b: 0xe00005b3, + 0x198c: 0xe000067e, 0x198d: 0xe0000726, 0x198e: 0xe00007d2, 0x198f: 0xe0000877, + 0x1990: 0x40503020, 0x1991: 0x40503220, 0x1992: 0x40503420, 0x1993: 0x40503620, + 0x1994: 0x40503820, 0x1995: 0x40503a20, 0x1996: 0x40503c20, 0x1997: 0x40503e20, + 0x1998: 0x40504020, 0x1999: 0x40504220, 0x199a: 0x40504420, 0x199b: 0x40504620, + 0x199c: 0x40504820, 0x199d: 0x40504a20, 0x199e: 0x40504c20, 0x199f: 0x40504e20, + 0x19a0: 0x40505020, 0x19a1: 0x40505220, 0x19a2: 0x40505420, 0x19a3: 0x40505620, + 0x19a4: 0x40505820, 0x19a5: 0x40505a20, 0x19a6: 0x40505c20, 0x19a7: 0x40505e20, + 0x19a8: 0x40506020, 0x19a9: 0x40506220, 0x19aa: 0x40506420, 0x19ab: 0x40506620, + 0x19ac: 0x40506820, 0x19ad: 0x40506a20, + 0x19b0: 0x40506c20, 0x19b1: 0x40506e20, 0x19b2: 0x40507020, 0x19b3: 0x40507220, + 0x19b4: 0x40507420, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x40507620, 0x19c1: 0x40507820, 0x19c2: 0x40507a20, 0x19c3: 0x40507c20, + 0x19c4: 0x40507e20, 0x19c5: 0x40508020, 0x19c6: 0x40508220, 0x19c7: 0x40508420, + 0x19c8: 0x40508620, 0x19c9: 0x40508820, 0x19ca: 0x40508a20, 0x19cb: 0x40508c20, + 0x19cc: 0x40508e20, 0x19cd: 0x40509020, 0x19ce: 0x40509220, 0x19cf: 0x40509420, + 0x19d0: 0x40509620, 0x19d1: 0x40509820, 0x19d2: 0x40509a20, 0x19d3: 0x40509c20, + 0x19d4: 0x40509e20, 0x19d5: 0x4050a020, 0x19d6: 0x4050a220, 0x19d7: 0x4050a420, + 0x19d8: 0x4050a620, 0x19d9: 0x4050a820, 0x19da: 0x4050aa20, 0x19db: 0x4050ac20, + 0x19dc: 0x4050ae20, 0x19dd: 0x4050b020, 0x19de: 0x4050b220, 0x19df: 0x4050b420, + 0x19e0: 0x4050b620, 0x19e1: 0x4050b820, 0x19e2: 0x4050ba20, 0x19e3: 0x4050bc20, + 0x19e4: 0x4050be20, 0x19e5: 0x4050c020, 0x19e6: 0x4050c220, 0x19e7: 0x4050c420, + 0x19e8: 0x4050c620, 0x19e9: 0x4050c820, 0x19ea: 0x4050ca20, 0x19eb: 0x4050cc20, + 0x19f0: 0x4050ce20, 0x19f1: 0x4050d020, 0x19f2: 0x4050d220, 0x19f3: 0x4050d420, + 0x19f4: 0x4050d620, 0x19f5: 0x4050d820, 0x19f6: 0x4050da20, 0x19f7: 0x4050dc20, + 0x19f8: 0x4050de20, 0x19f9: 0x4050e020, 0x19fa: 0x4050e220, 0x19fb: 0x4050e420, + 0x19fc: 0x4050e620, 0x19fd: 0x4050e820, 0x19fe: 0x4050ea20, 0x19ff: 0x4050ec20, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x4050ee20, 0x1a01: 0x4050f020, 0x1a02: 0x4050f220, 0x1a03: 0x4050f420, + 0x1a04: 0x4050f620, 0x1a05: 0x4050f820, 0x1a06: 0x4050fa20, 0x1a07: 0x4050fc20, + 0x1a08: 0x4050fe20, 0x1a09: 0x40510020, + 0x1a10: 0xe0000191, 0x1a11: 0xe0000222, 0x1a12: 0xe000033d, 0x1a13: 0xe0000417, + 0x1a14: 0xe00004ec, 0x1a15: 0xe00005b6, 0x1a16: 0xe0000681, 0x1a17: 0xe0000729, + 0x1a18: 0xe00007d5, 0x1a19: 0xe000087a, 0x1a1a: 0xe0000225, + 0x1a1e: 0xe0002022, 0x1a1f: 0xe0002025, + 0x1a20: 0x4007b220, 0x1a21: 0x4007b420, 0x1a22: 0x4007b620, 0x1a23: 0x4007b820, + 0x1a24: 0x4007ba20, 0x1a25: 0x4007bc20, 0x1a26: 0x4007be20, 0x1a27: 0x4007c020, + 0x1a28: 0x4007c220, 0x1a29: 0x4007c420, 0x1a2a: 0x4007c620, 0x1a2b: 0x4007c820, + 0x1a2c: 0x4007ca20, 0x1a2d: 0x4007cc20, 0x1a2e: 0x4007ce20, 0x1a2f: 0x4007d020, + 0x1a30: 0x4007d220, 0x1a31: 0x4007d420, 0x1a32: 0x4007d620, 0x1a33: 0x4007d820, + 0x1a34: 0x4007da20, 0x1a35: 0x4007dc20, 0x1a36: 0x4007de20, 0x1a37: 0x4007e020, + 0x1a38: 0x4007e220, 0x1a39: 0x4007e420, 0x1a3a: 0x4007e620, 0x1a3b: 0x4007e820, + 0x1a3c: 0x4007ea20, 0x1a3d: 0x4007ec20, 0x1a3e: 0x4007ee20, 0x1a3f: 0x4007f020, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x404d1420, 0x1a41: 0x404d1620, 0x1a42: 0x404d1820, 0x1a43: 0x404d1a20, + 0x1a44: 0x404d1c20, 0x1a45: 0x404d1e20, 0x1a46: 0x404d2020, 0x1a47: 0x404d2220, + 0x1a48: 0x404d2420, 0x1a49: 0x404d2620, 0x1a4a: 0x404d2820, 0x1a4b: 0x404d2a20, + 0x1a4c: 0x404d2c20, 0x1a4d: 0x404d2e20, 0x1a4e: 0x404d3020, 0x1a4f: 0x404d3220, + 0x1a50: 0x404d3420, 0x1a51: 0x404d3620, 0x1a52: 0x404d3820, 0x1a53: 0x404d3a20, + 0x1a54: 0x404d3c20, 0x1a55: 0x404d3e20, 0x1a56: 0x404d4020, 0x1a57: 0x82e626a1, + 0x1a58: 0x82dc26a2, 0x1a59: 0x404d4620, 0x1a5a: 0x404d4820, 0x1a5b: 0x404d4a20, + 0x1a5e: 0x40036620, 0x1a5f: 0x40036820, + 0x1a60: 0x40510220, 0x1a61: 0x40510420, 0x1a62: 0x40510620, 0x1a63: 0x40510820, + 0x1a64: 0x40510a20, 0x1a65: 0x40510c20, 0x1a66: 0x40510e20, 0x1a67: 0x40511020, + 0x1a68: 0x40511220, 0x1a69: 0x40511420, 0x1a6a: 0x40511620, 0x1a6b: 0x40511820, + 0x1a6c: 0x40511a20, 0x1a6d: 0x40511c20, 0x1a6e: 0x40511e20, 0x1a6f: 0x40512020, + 0x1a70: 0x40512220, 0x1a71: 0x40512420, 0x1a72: 0x40512620, 0x1a73: 0x40512820, + 0x1a74: 0x40512a20, 0x1a75: 0x40512c20, 0x1a76: 0x40512e20, 0x1a77: 0x40513020, + 0x1a78: 0x40513220, 0x1a79: 0x40513420, 0x1a7a: 0x40513620, 0x1a7b: 0x40513820, + 0x1a7c: 0x40513a20, 0x1a7d: 0x40513c20, 0x1a7e: 0x40513e20, 0x1a7f: 0x40514020, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x40514220, 0x1a81: 0x40514420, 0x1a82: 0x40514620, 0x1a83: 0x40514820, + 0x1a84: 0x40514a20, 0x1a85: 0x40514c20, 0x1a86: 0x40514e20, 0x1a87: 0x40515020, + 0x1a88: 0x40515220, 0x1a89: 0x40515420, 0x1a8a: 0x40515620, 0x1a8b: 0x40515820, + 0x1a8c: 0x40515a20, 0x1a8d: 0x40516c20, 0x1a8e: 0x40516e20, 0x1a8f: 0x40517020, + 0x1a90: 0x40517220, 0x1a91: 0x40517420, 0x1a92: 0x40517620, 0x1a93: 0x40515c20, + 0x1a94: 0xe0002029, 0x1a95: 0x40516020, 0x1a96: 0x40516220, 0x1a97: 0x40516420, + 0x1a98: 0x00510e84, 0x1a99: 0x00510e84, 0x1a9a: 0x00513884, 0x1a9b: 0x00513884, + 0x1a9c: 0x40516620, 0x1a9d: 0x40516820, 0x1a9e: 0x40516a20, + 0x1aa0: 0x820928cd, 0x1aa1: 0x40517820, 0x1aa2: 0x40517c20, 0x1aa3: 0x40517e20, + 0x1aa4: 0x00517e84, 0x1aa5: 0x40518020, 0x1aa6: 0x40518220, 0x1aa7: 0x40518420, + 0x1aa8: 0x40518620, 0x1aa9: 0x40518820, 0x1aaa: 0x40518a20, 0x1aab: 0x40515e20, + 0x1aac: 0x40517a20, 0x1aad: 0x40519820, 0x1aae: 0x40518c20, 0x1aaf: 0x40518e20, + 0x1ab0: 0x40519220, 0x1ab1: 0x40519420, 0x1ab2: 0x40519620, 0x1ab3: 0x40519020, + 0x1ab4: 0xa000f302, 0x1ab5: 0xae611702, 0x1ab6: 0xae611802, 0x1ab7: 0xae611902, + 0x1ab8: 0xae611a02, 0x1ab9: 0xae611b02, 0x1aba: 0xae611c02, 0x1abb: 0xae611d02, + 0x1abc: 0xae611e02, 0x1abf: 0xadc00000, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0xe0000194, 0x1ac1: 0xe0000228, 0x1ac2: 0xe0000340, 0x1ac3: 0xe000041a, + 0x1ac4: 0xe00004ef, 0x1ac5: 0xe00005b9, 0x1ac6: 0xe0000684, 0x1ac7: 0xe000072c, + 0x1ac8: 0xe00007d8, 0x1ac9: 0xe000087d, + 0x1ad0: 0xe0000197, 0x1ad1: 0xe000022b, 0x1ad2: 0xe0000343, 0x1ad3: 0xe000041d, + 0x1ad4: 0xe00004f2, 0x1ad5: 0xe00005bc, 0x1ad6: 0xe0000687, 0x1ad7: 0xe000072f, + 0x1ad8: 0xe00007db, 0x1ad9: 0xe0000880, + 0x1ae0: 0x4005c220, 0x1ae1: 0x4005c420, 0x1ae2: 0x4005c620, 0x1ae3: 0x4005c820, + 0x1ae4: 0x4005ca20, 0x1ae5: 0x4005cc20, 0x1ae6: 0x4005ce20, 0x1ae7: 0x4027be20, + 0x1ae8: 0x40032a20, 0x1ae9: 0x40032c20, 0x1aea: 0x40032e20, 0x1aeb: 0x40033020, + 0x1aec: 0x4005d020, 0x1aed: 0x4005d220, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0xa000f202, 0x1b01: 0xa000f202, 0x1b02: 0xa000f302, 0x1b03: 0xa000f702, + 0x1b04: 0xa000f402, 0x1b05: 0xc3190821, 0x1b06: 0x40522820, 0x1b07: 0xc31b0821, + 0x1b08: 0x40522c20, 0x1b09: 0xc31d0821, 0x1b0a: 0x40523020, 0x1b0b: 0xc31f0821, + 0x1b0c: 0x40523420, 0x1b0d: 0xc3210821, 0x1b0e: 0x40523820, 0x1b0f: 0x40523a20, + 0x1b10: 0x40523c20, 0x1b11: 0xc3230821, 0x1b12: 0x40524020, 0x1b13: 0x40524220, + 0x1b14: 0x40524820, 0x1b15: 0x40524a20, 0x1b16: 0x40524c20, 0x1b17: 0x40524e20, + 0x1b18: 0x40525020, 0x1b19: 0x40525220, 0x1b1a: 0x40525420, 0x1b1b: 0x40525620, + 0x1b1c: 0x40525820, 0x1b1d: 0x40525a20, 0x1b1e: 0x40525c20, 0x1b1f: 0x40525e20, + 0x1b20: 0x40526020, 0x1b21: 0x40526220, 0x1b22: 0x40526420, 0x1b23: 0x40526820, + 0x1b24: 0x40526a20, 0x1b25: 0x40526c20, 0x1b26: 0x40526e20, 0x1b27: 0x40527020, + 0x1b28: 0x40527420, 0x1b29: 0x40527620, 0x1b2a: 0x40527820, 0x1b2b: 0x40527a20, + 0x1b2c: 0x40527c20, 0x1b2d: 0x40527e20, 0x1b2e: 0x40528020, 0x1b2f: 0x40528220, + 0x1b30: 0x40528620, 0x1b31: 0x40528820, 0x1b32: 0x40528a20, 0x1b33: 0x40529020, + 0x1b34: 0xa070f102, 0x1b35: 0x40529220, 0x1b36: 0x40529420, 0x1b37: 0x40529620, + 0x1b38: 0x40529820, 0x1b39: 0x40529a20, 0x1b3a: 0xc3250821, 0x1b3b: 0x40529e20, + 0x1b3c: 0xc3270821, 0x1b3d: 0x4052a220, 0x1b3e: 0xc3290821, 0x1b3f: 0xc32b0821, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x4052a820, 0x1b41: 0x4052aa20, 0x1b42: 0xc32d0821, 0x1b43: 0x4052ae20, + 0x1b44: 0x82092958, 0x1b45: 0x40524420, 0x1b46: 0x40524620, 0x1b47: 0x40526620, + 0x1b48: 0x40527220, 0x1b49: 0x40528420, 0x1b4a: 0x40528c20, 0x1b4b: 0x40528e20, + 0x1b50: 0xe00001be, 0x1b51: 0xe0000252, 0x1b52: 0xe000036a, 0x1b53: 0xe0000444, + 0x1b54: 0xe0000519, 0x1b55: 0xe00005e3, 0x1b56: 0xe00006ae, 0x1b57: 0xe0000756, + 0x1b58: 0xe0000802, 0x1b59: 0xe00008a7, 0x1b5a: 0x40036a20, 0x1b5b: 0x40036c20, + 0x1b5c: 0x4002f620, 0x1b5d: 0x4002ae20, 0x1b5e: 0x40033220, 0x1b5f: 0x40033420, + 0x1b60: 0x40022020, 0x1b61: 0x4007f220, 0x1b62: 0x4007f420, 0x1b63: 0x4007f620, + 0x1b64: 0x4007f820, 0x1b65: 0x4007fa20, 0x1b66: 0x4007fc20, 0x1b67: 0x4007fe20, + 0x1b68: 0x40080020, 0x1b69: 0x40080220, 0x1b6a: 0x40080420, 0x1b6b: 0xae600000, + 0x1b6c: 0xadc00000, 0x1b6d: 0xae600000, 0x1b6e: 0xae600000, 0x1b6f: 0xae600000, + 0x1b70: 0xae600000, 0x1b71: 0xae600000, 0x1b72: 0xae600000, 0x1b73: 0xae600000, + 0x1b74: 0x40080620, 0x1b75: 0x40080820, 0x1b76: 0x40080a20, 0x1b77: 0x40080c20, + 0x1b78: 0x40080e20, 0x1b79: 0x40081020, 0x1b7a: 0x40081220, 0x1b7b: 0x40081420, + 0x1b7c: 0x40081620, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0xa000f302, 0x1b81: 0xa000f902, 0x1b82: 0xa000f402, 0x1b83: 0x4047d420, + 0x1b84: 0x4047d620, 0x1b85: 0x4047d820, 0x1b86: 0x4047da20, 0x1b87: 0x4047dc20, + 0x1b88: 0x4047de20, 0x1b89: 0x4047e020, 0x1b8a: 0x4047e220, 0x1b8b: 0x4047e620, + 0x1b8c: 0x4047e820, 0x1b8d: 0x4047ea20, 0x1b8e: 0x4047ec20, 0x1b8f: 0x4047ee20, + 0x1b90: 0x4047f020, 0x1b91: 0x4047f220, 0x1b92: 0x4047f420, 0x1b93: 0x4047f620, + 0x1b94: 0x4047f820, 0x1b95: 0x4047fa20, 0x1b96: 0x4047fc20, 0x1b97: 0x4047fe20, + 0x1b98: 0x40480020, 0x1b99: 0x40480420, 0x1b9a: 0x40480820, 0x1b9b: 0x40480c20, + 0x1b9c: 0x40481220, 0x1b9d: 0x40481820, 0x1b9e: 0x40481c20, 0x1b9f: 0x40481e20, + 0x1ba0: 0x40482220, 0x1ba1: 0x40480a20, 0x1ba2: 0x40480e20, 0x1ba3: 0x40481420, + 0x1ba4: 0x40482420, 0x1ba5: 0x40482620, 0x1ba6: 0x40482820, 0x1ba7: 0x40482a20, + 0x1ba8: 0x40482c20, 0x1ba9: 0x40482e20, 0x1baa: 0x82092418, 0x1bab: 0x82092419, + 0x1bac: 0x40480620, 0x1bad: 0x40481a20, 0x1bae: 0x4047e420, 0x1baf: 0x40482020, + 0x1bb0: 0xe00001c4, 0x1bb1: 0xe0000258, 0x1bb2: 0xe0000370, 0x1bb3: 0xe000044a, + 0x1bb4: 0xe000051f, 0x1bb5: 0xe00005e9, 0x1bb6: 0xe00006b4, 0x1bb7: 0xe000075c, + 0x1bb8: 0xe0000808, 0x1bb9: 0xe00008ad, 0x1bba: 0x0047d484, 0x1bbb: 0x40481020, + 0x1bbc: 0x40481620, 0x1bbd: 0x40480220, 0x1bbe: 0x0047e299, 0x1bbf: 0x00480499, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x404d4c20, 0x1bc1: 0x004d4c84, 0x1bc2: 0x404d4e20, 0x1bc3: 0x004d4e84, + 0x1bc4: 0x004d4e84, 0x1bc5: 0x404d5020, 0x1bc6: 0x004d5084, 0x1bc7: 0x404d5220, + 0x1bc8: 0x004d5284, 0x1bc9: 0x404d5420, 0x1bca: 0x004d5484, 0x1bcb: 0x404d5620, + 0x1bcc: 0x004d5684, 0x1bcd: 0x004d5684, 0x1bce: 0x404d5820, 0x1bcf: 0x004d5884, + 0x1bd0: 0x404d5a20, 0x1bd1: 0x404d5c20, 0x1bd2: 0x404d5e20, 0x1bd3: 0x004d5e84, + 0x1bd4: 0x404d6020, 0x1bd5: 0x004d6084, 0x1bd6: 0x404d6220, 0x1bd7: 0x004d6284, + 0x1bd8: 0x404d6420, 0x1bd9: 0x004d6484, 0x1bda: 0x004d6484, 0x1bdb: 0x404d6620, + 0x1bdc: 0x004d6684, 0x1bdd: 0x404d6820, 0x1bde: 0x404d6a20, 0x1bdf: 0x004d6a84, + 0x1be0: 0x404d6c20, 0x1be1: 0x404d6e20, 0x1be2: 0x404d7020, 0x1be3: 0x404d7220, + 0x1be4: 0x404d7420, 0x1be5: 0x404d7620, 0x1be6: 0xa070f102, 0x1be7: 0x404d7820, + 0x1be8: 0x004d7884, 0x1be9: 0x404d7a20, 0x1bea: 0x404d7c20, 0x1beb: 0x004d7c84, + 0x1bec: 0x404d7e20, 0x1bed: 0x004d7e84, 0x1bee: 0x404d8020, 0x1bef: 0x004d8084, + 0x1bf0: 0x404d8220, 0x1bf1: 0x404d8420, 0x1bf2: 0x820926c3, 0x1bf3: 0x820926c4, + 0x1bfc: 0x4005ec20, 0x1bfd: 0x4005ee20, 0x1bfe: 0x4005f020, 0x1bff: 0x4005f220, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x404b3620, 0x1c01: 0x404b3820, 0x1c02: 0x404b3a20, 0x1c03: 0x404b3c20, + 0x1c04: 0x404b3e20, 0x1c05: 0x404b4020, 0x1c06: 0x404b4220, 0x1c07: 0x404b4420, + 0x1c08: 0x404b4620, 0x1c09: 0x404b4820, 0x1c0a: 0x404b5020, 0x1c0b: 0x404b5220, + 0x1c0c: 0x404b5420, 0x1c0d: 0x404b5620, 0x1c0e: 0x404b5820, 0x1c0f: 0x404b5a20, + 0x1c10: 0x404b5c20, 0x1c11: 0x404b5e20, 0x1c12: 0x404b6020, 0x1c13: 0x404b6220, + 0x1c14: 0x404b6420, 0x1c15: 0x404b6620, 0x1c16: 0x404b6820, 0x1c17: 0x404b6a20, + 0x1c18: 0x404b6c20, 0x1c19: 0x404b6e20, 0x1c1a: 0x404b7020, 0x1c1b: 0x404b7420, + 0x1c1c: 0x404b7820, 0x1c1d: 0x404b7a20, 0x1c1e: 0x404b7c20, 0x1c1f: 0x404b7e20, + 0x1c20: 0x404b8020, 0x1c21: 0x404b8220, 0x1c22: 0x404b8420, 0x1c23: 0x404b8620, + 0x1c24: 0x404b7220, 0x1c25: 0x404b7620, 0x1c26: 0x404b8a20, 0x1c27: 0x404b8c20, + 0x1c28: 0x404b8e20, 0x1c29: 0x404b9020, 0x1c2a: 0x404b9220, 0x1c2b: 0x404b9420, + 0x1c2c: 0x404b9620, 0x1c2d: 0x404b9820, 0x1c2e: 0x404b9a20, 0x1c2f: 0x404b9c20, + 0x1c30: 0x404b9e20, 0x1c31: 0x404ba020, 0x1c32: 0x404ba220, 0x1c33: 0x404ba420, + 0x1c34: 0x404ba620, 0x1c35: 0x404ba820, 0x1c36: 0x404b8820, 0x1c37: 0xa070f102, + 0x1c3b: 0x40031420, + 0x1c3c: 0x40031620, 0x1c3d: 0x4005ae20, 0x1c3e: 0x4005b020, 0x1c3f: 0x4005b220, + // Block 0x71, offset 0x1c40 + 0x1c40: 0xe00001a6, 0x1c41: 0xe000023a, 0x1c42: 0xe0000352, 0x1c43: 0xe000042c, + 0x1c44: 0xe0000501, 0x1c45: 0xe00005cb, 0x1c46: 0xe0000696, 0x1c47: 0xe000073e, + 0x1c48: 0xe00007ea, 0x1c49: 0xe000088f, + 0x1c4d: 0x404b4a20, 0x1c4e: 0x404b4c20, 0x1c4f: 0x404b4e20, + 0x1c50: 0xe00001ca, 0x1c51: 0xe000025e, 0x1c52: 0xe0000376, 0x1c53: 0xe0000450, + 0x1c54: 0xe0000525, 0x1c55: 0xe00005ef, 0x1c56: 0xe00006ba, 0x1c57: 0xe0000762, + 0x1c58: 0xe000080e, 0x1c59: 0xe00008b3, 0x1c5a: 0x40542e20, 0x1c5b: 0x40543020, + 0x1c5c: 0x40543220, 0x1c5d: 0x40543420, 0x1c5e: 0x40543620, 0x1c5f: 0x40543820, + 0x1c60: 0x40543a20, 0x1c61: 0x40543c20, 0x1c62: 0x40543e20, 0x1c63: 0x40544020, + 0x1c64: 0x40544220, 0x1c65: 0x40544420, 0x1c66: 0x40544620, 0x1c67: 0x40544820, + 0x1c68: 0x40544a20, 0x1c69: 0x40544c20, 0x1c6a: 0x40544e20, 0x1c6b: 0x40545020, + 0x1c6c: 0x40545220, 0x1c6d: 0x40545420, 0x1c6e: 0x40545620, 0x1c6f: 0x40545820, + 0x1c70: 0x40545a20, 0x1c71: 0x40545c20, 0x1c72: 0x40545e20, 0x1c73: 0x40546020, + 0x1c74: 0x40546220, 0x1c75: 0x40546420, 0x1c76: 0x40546620, 0x1c77: 0x40546820, + 0x1c78: 0x40546a20, 0x1c79: 0x40546c20, 0x1c7a: 0x40546e20, 0x1c7b: 0x40547020, + 0x1c7c: 0x40547220, 0x1c7d: 0x40547420, 0x1c7e: 0x40035820, 0x1c7f: 0x40035a20, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x4005d620, 0x1c81: 0x4005d820, 0x1c82: 0x4005da20, 0x1c83: 0x4005dc20, + 0x1c84: 0x4005de20, 0x1c85: 0x4005e020, 0x1c86: 0x4005e220, 0x1c87: 0x4005e420, + 0x1c90: 0xae600000, 0x1c91: 0xae600000, 0x1c92: 0xae600000, 0x1c93: 0xa0000000, + 0x1c94: 0xa0100000, 0x1c95: 0xadc00000, 0x1c96: 0xadc00000, 0x1c97: 0xadc00000, + 0x1c98: 0xadc00000, 0x1c99: 0xadc00000, 0x1c9a: 0xae600000, 0x1c9b: 0xae600000, + 0x1c9c: 0xadc00000, 0x1c9d: 0xadc00000, 0x1c9e: 0xadc00000, 0x1c9f: 0xadc00000, + 0x1ca0: 0xae600000, 0x1ca1: 0xa0000000, 0x1ca2: 0xa0100000, 0x1ca3: 0xa0100000, + 0x1ca4: 0xa0100000, 0x1ca5: 0xa0100000, 0x1ca6: 0xa0100000, 0x1ca7: 0xa0100000, + 0x1ca8: 0xa0100000, 0x1ca9: 0x40404020, 0x1caa: 0x00404084, 0x1cab: 0x00404084, + 0x1cac: 0x00404084, 0x1cad: 0xadc0f302, 0x1cae: 0x00404084, 0x1caf: 0x00404084, + 0x1cb0: 0x00404084, 0x1cb1: 0x00404084, 0x1cb2: 0xa000f402, 0x1cb3: 0xa000f402, + 0x1cb4: 0xae600000, 0x1cb5: 0x40404220, 0x1cb6: 0x40404420, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x402be620, 0x1cc1: 0x402bec20, 0x1cc2: 0x402bee20, 0x1cc3: 0x402c2420, + 0x1cc4: 0x402c4220, 0x1cc5: 0x402c6a20, 0x1cc6: 0x402c6c20, 0x1cc7: 0x402ca020, + 0x1cc8: 0x402ce620, 0x1cc9: 0x402db420, 0x1cca: 0x402ddc20, 0x1ccb: 0x402e0620, + 0x1ccc: 0x402e3420, 0x1ccd: 0x402e8a20, 0x1cce: 0x402eb020, 0x1ccf: 0x402eea20, + 0x1cd0: 0x402f0220, 0x1cd1: 0x402eec20, 0x1cd2: 0x402f0420, 0x1cd3: 0x402ef820, + 0x1cd4: 0x402ef620, 0x1cd5: 0x402f2a20, 0x1cd6: 0x402f0a20, 0x1cd7: 0x402f0c20, + 0x1cd8: 0x402f3420, 0x1cd9: 0x402f8c20, 0x1cda: 0x402fa020, 0x1cdb: 0x40303420, + 0x1cdc: 0x40307420, 0x1cdd: 0x40307620, 0x1cde: 0x40307820, 0x1cdf: 0x4030aa20, + 0x1ce0: 0x4030c620, 0x1ce1: 0x4030ea20, 0x1ce2: 0x40313220, 0x1ce3: 0x40316c20, + 0x1ce4: 0x4031f420, 0x1ce5: 0x4031f620, 0x1ce6: 0x40325820, 0x1ce7: 0x40327420, + 0x1ce8: 0x40328020, 0x1ce9: 0x40328a20, 0x1cea: 0x4032a020, 0x1ceb: 0x40348c20, + 0x1cec: 0x002bde9d, 0x1ced: 0xe00009e1, 0x1cee: 0x002c0a9d, 0x1cef: 0x402c2220, + 0x1cf0: 0x002c629d, 0x1cf1: 0x002c989d, 0x1cf2: 0x002cae9d, 0x1cf3: 0x002d229d, + 0x1cf4: 0x002d689d, 0x1cf5: 0x002d9a9d, 0x1cf6: 0x002dcc9d, 0x1cf7: 0x002dfe9d, + 0x1cf8: 0x002e229d, 0x1cf9: 0x002e829d, 0x1cfa: 0x002e9e9d, 0x1cfb: 0x402eae20, + 0x1cfc: 0x002ee29d, 0x1cfd: 0x002f229d, 0x1cfe: 0x002f2c9d, 0x1cff: 0x002f7a9d, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x00302c9d, 0x1d01: 0x00306c9d, 0x1d02: 0x0030e29d, 0x1d03: 0x002bde94, + 0x1d04: 0x002bf094, 0x1d05: 0x002bf894, 0x1d06: 0x002bee94, 0x1d07: 0x002c0a94, + 0x1d08: 0x002c6294, 0x1d09: 0x002c9894, 0x1d0a: 0x002cb894, 0x1d0b: 0x002cc294, + 0x1d0c: 0x002ce694, 0x1d0d: 0x002d2294, 0x1d0e: 0x002db494, 0x1d0f: 0x002dfe94, + 0x1d10: 0x002e8294, 0x1d11: 0x002eda94, 0x1d12: 0x002ee294, 0x1d13: 0x002efa94, + 0x1d14: 0x002f0a94, 0x1d15: 0x002f0c94, 0x1d16: 0x002f2c94, 0x1d17: 0x00302c94, + 0x1d18: 0x00306c94, 0x1d19: 0x00307694, 0x1d1a: 0x0030a094, 0x1d1b: 0x0030be94, + 0x1d1c: 0x0031f694, 0x1d1d: 0x00325494, 0x1d1e: 0x00325694, 0x1d1f: 0x00325a94, + 0x1d20: 0x00329a94, 0x1d21: 0x00329c94, 0x1d22: 0x002d9a95, 0x1d23: 0x002f7a95, + 0x1d24: 0x00306c95, 0x1d25: 0x0030be95, 0x1d26: 0x00325495, 0x1d27: 0x00325695, + 0x1d28: 0x00328895, 0x1d29: 0x00329a95, 0x1d2a: 0x00329c95, 0x1d2b: 0x40307a20, + 0x1d2c: 0x402c2620, 0x1d2d: 0x402c6e20, 0x1d2e: 0x402d1220, 0x1d2f: 0x402e8c20, + 0x1d30: 0x402eb220, 0x1d31: 0x402f3a20, 0x1d32: 0x402f9620, 0x1d33: 0x402fce20, + 0x1d34: 0x402ff020, 0x1d35: 0x40304020, 0x1d36: 0x40313c20, 0x1d37: 0x402d5420, + 0x1d38: 0x0034ba94, 0x1d39: 0xe0000bd9, 0x1d3a: 0xe0000fc1, 0x1d3b: 0x402dbe20, + 0x1d3c: 0x402dca20, 0x1d3d: 0x402f3620, 0x1d3e: 0x40308420, 0x1d3f: 0x4030bc20, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x402c2820, 0x1d41: 0x402c7020, 0x1d42: 0x402d1420, 0x1d43: 0x402d4220, + 0x1d44: 0x402e0820, 0x1d45: 0x402e5220, 0x1d46: 0x402e8e20, 0x1d47: 0x402ec620, + 0x1d48: 0x402f3c20, 0x1d49: 0x402faa20, 0x1d4a: 0x402ff220, 0x1d4b: 0x40301020, + 0x1d4c: 0x4030ca20, 0x1d4d: 0x4030fe20, 0x1d4e: 0x40313e20, 0x1d4f: 0x402bea20, + 0x1d50: 0x402c0020, 0x1d51: 0x402c8220, 0x1d52: 0x402caa20, 0x1d53: 0x402cca20, + 0x1d54: 0x402ce420, 0x1d55: 0x402cc020, 0x1d56: 0x402dc020, 0x1d57: 0x402f0620, + 0x1d58: 0x40302220, 0x1d59: 0x40308620, 0x1d5a: 0x40317620, 0x1d5b: 0x002c0294, + 0x1d5c: 0x002c3a94, 0x1d5d: 0x002c5694, 0x1d5e: 0xf0001414, 0x1d5f: 0x002cdc94, + 0x1d60: 0x002d0894, 0x1d61: 0x002dee94, 0x1d62: 0x002d2a94, 0x1d63: 0x00308894, + 0x1d64: 0x002db694, 0x1d65: 0x002dc294, 0x1d66: 0x002daa94, 0x1d67: 0x002dbe94, + 0x1d68: 0x002de694, 0x1d69: 0x002e5494, 0x1d6a: 0x002e5294, 0x1d6b: 0x002e2a94, + 0x1d6c: 0x002e9094, 0x1d6d: 0x0030ac94, 0x1d6e: 0x002eb494, 0x1d6f: 0x002ec894, + 0x1d70: 0x002ea694, 0x1d71: 0x002f1094, 0x1d72: 0x002f4c94, 0x1d73: 0x002ff494, + 0x1d74: 0x00300894, 0x1d75: 0x00304294, 0x1d76: 0x00307c94, 0x1d77: 0x0030b494, + 0x1d78: 0x00307494, 0x1d79: 0x0030cc94, 0x1d7a: 0x0030da94, 0x1d7b: 0x00312a94, + 0x1d7c: 0x00314894, 0x1d7d: 0x00315094, 0x1d7e: 0x00316494, 0x1d7f: 0x00326a94, + // Block 0x76, offset 0x1d80 + 0x1d80: 0xae605f02, 0x1d81: 0xae605f02, 0x1d82: 0xadc06002, 0x1d83: 0xae605f02, + 0x1d84: 0xae605f02, 0x1d85: 0xae605f02, 0x1d86: 0xae605f02, 0x1d87: 0xae605f02, + 0x1d88: 0xae605f02, 0x1d89: 0xae605f02, 0x1d8a: 0x84dc17bd, 0x1d8b: 0xae605f02, + 0x1d8c: 0xae605f02, 0x1d8d: 0xaea05f02, 0x1d8e: 0xad605f02, 0x1d8f: 0xadc06002, + 0x1d90: 0xaca06002, 0x1d91: 0xae605f02, 0x1d92: 0x84e618d1, 0x1d93: 0xe00009b4, + 0x1d94: 0xe00009d9, 0x1d95: 0xe00009f9, 0x1d96: 0xe0000a08, 0x1d97: 0xe0000a50, + 0x1d98: 0xe0000ab6, 0x1d99: 0xe0000ab0, 0x1d9a: 0x84e61691, 0x1d9b: 0x84e61699, + 0x1d9c: 0x84e616ff, 0x1d9d: 0x84e61711, 0x1d9e: 0x84e61715, 0x1d9f: 0x84e61745, + 0x1da0: 0x84e6174f, 0x1da1: 0x84e61753, 0x1da2: 0x84e617c1, 0x1da3: 0x84e617c5, + 0x1da4: 0x84e617f3, 0x1da5: 0xe0000f67, 0x1da6: 0x84e61895, + 0x1dbc: 0xae906002, 0x1dbd: 0xadc06002, 0x1dbe: 0xae605f02, 0x1dbf: 0xadc06002, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xe00009b1, 0x1dc1: 0xe00009ae, 0x1dc2: 0xe0000a22, 0x1dc3: 0xe0000a1f, + 0x1dc4: 0xe0000a28, 0x1dc5: 0xe0000a25, 0x1dc6: 0xe0000a2e, 0x1dc7: 0xe0000a2b, + 0x1dc8: 0xe0000a5a, 0x1dc9: 0xe0000a56, 0x1dca: 0xe0000a8c, 0x1dcb: 0xe0000a89, + 0x1dcc: 0xe0000a98, 0x1dcd: 0xe0000a95, 0x1dce: 0xe0000aa4, 0x1dcf: 0xe0000aa1, + 0x1dd0: 0xe0000a92, 0x1dd1: 0xe0000a8f, 0x1dd2: 0xe0000a9e, 0x1dd3: 0xe0000a9b, + 0x1dd4: 0xe0000b55, 0x1dd5: 0xe0000b51, 0x1dd6: 0xe0000b4d, 0x1dd7: 0xe0000b49, + 0x1dd8: 0xe0000b7c, 0x1dd9: 0xe0000b79, 0x1dda: 0xe0000b82, 0x1ddb: 0xe0000b7f, + 0x1ddc: 0xe0000b39, 0x1ddd: 0xe0000b35, 0x1dde: 0xe0000b8c, 0x1ddf: 0xe0000b89, + 0x1de0: 0xe0000bd0, 0x1de1: 0xe0000bcd, 0x1de2: 0xe0000c00, 0x1de3: 0xe0000bfd, + 0x1de4: 0xe0000c0c, 0x1de5: 0xe0000c09, 0x1de6: 0xe0000bfa, 0x1de7: 0xe0000bf7, + 0x1de8: 0xe0000c06, 0x1de9: 0xe0000c03, 0x1dea: 0xe0000c12, 0x1deb: 0xe0000c0f, + 0x1dec: 0xe0000c7e, 0x1ded: 0xe0000c7b, 0x1dee: 0xe0000c4a, 0x1def: 0xe0000c46, + 0x1df0: 0xe0000c93, 0x1df1: 0xe0000c90, 0x1df2: 0xe0000cab, 0x1df3: 0xe0000ca8, + 0x1df4: 0xe0000cb1, 0x1df5: 0xe0000cae, 0x1df6: 0xe0000cde, 0x1df7: 0xe0000cdb, + 0x1df8: 0xe0000ce5, 0x1df9: 0xe0000ce1, 0x1dfa: 0xe0000cf2, 0x1dfb: 0xe0000cef, + 0x1dfc: 0xe0000cec, 0x1dfd: 0xe0000ce9, 0x1dfe: 0xe0000d1e, 0x1dff: 0xe0000d1b, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xe0000d24, 0x1e01: 0xe0000d21, 0x1e02: 0xe0000d2a, 0x1e03: 0xe0000d27, + 0x1e04: 0xe0000d69, 0x1e05: 0xe0000d66, 0x1e06: 0xe0000d7b, 0x1e07: 0xe0000d78, + 0x1e08: 0xe0000d87, 0x1e09: 0xe0000d84, 0x1e0a: 0xe0000d81, 0x1e0b: 0xe0000d7e, + 0x1e0c: 0xe0000ded, 0x1e0d: 0xe0000de9, 0x1e0e: 0xe0000df5, 0x1e0f: 0xe0000df1, + 0x1e10: 0xe0000e3d, 0x1e11: 0xe0000e39, 0x1e12: 0xe0000e35, 0x1e13: 0xe0000e31, + 0x1e14: 0xe0000ea7, 0x1e15: 0xe0000ea4, 0x1e16: 0xe0000ead, 0x1e17: 0xe0000eaa, + 0x1e18: 0xe0000ed6, 0x1e19: 0xe0000ed3, 0x1e1a: 0xe0000ef4, 0x1e1b: 0xe0000ef1, + 0x1e1c: 0xe0000efb, 0x1e1d: 0xe0000ef7, 0x1e1e: 0xe0000f02, 0x1e1f: 0xe0000eff, + 0x1e20: 0xe0000f41, 0x1e21: 0xe0000f3e, 0x1e22: 0xe0000f53, 0x1e23: 0xe0000f50, + 0x1e24: 0xe0000f26, 0x1e25: 0xe0000f22, 0x1e26: 0xe0000f3a, 0x1e27: 0xe0000f36, + 0x1e28: 0xe0000f5a, 0x1e29: 0xe0000f56, 0x1e2a: 0xe0000f93, 0x1e2b: 0xe0000f90, + 0x1e2c: 0xe0000f9f, 0x1e2d: 0xe0000f9c, 0x1e2e: 0xe0000fb1, 0x1e2f: 0xe0000fae, + 0x1e30: 0xe0000fab, 0x1e31: 0xe0000fa8, 0x1e32: 0xe0001093, 0x1e33: 0xe0001090, + 0x1e34: 0xe000109f, 0x1e35: 0xe000109c, 0x1e36: 0xe0001099, 0x1e37: 0xe0001096, + 0x1e38: 0xe0001032, 0x1e39: 0xe000102e, 0x1e3a: 0xe0001046, 0x1e3b: 0xe0001042, + 0x1e3c: 0xe00010a9, 0x1e3d: 0xe00010a6, 0x1e3e: 0xe00010af, 0x1e3f: 0xe00010ac, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xe00010d2, 0x1e41: 0xe00010cf, 0x1e42: 0xe00010cc, 0x1e43: 0xe00010c9, + 0x1e44: 0xe00010e1, 0x1e45: 0xe00010de, 0x1e46: 0xe00010e7, 0x1e47: 0xe00010e4, + 0x1e48: 0xe00010ed, 0x1e49: 0xe00010ea, 0x1e4a: 0xe00010fc, 0x1e4b: 0xe00010f9, + 0x1e4c: 0xe00010f6, 0x1e4d: 0xe00010f3, 0x1e4e: 0xe0001123, 0x1e4f: 0xe0001120, + 0x1e50: 0xe0001141, 0x1e51: 0xe000113e, 0x1e52: 0xe0001153, 0x1e53: 0xe0001150, + 0x1e54: 0xe0001159, 0x1e55: 0xe0001156, 0x1e56: 0xe0000c15, 0x1e57: 0xe0000f8d, + 0x1e58: 0xe00010db, 0x1e59: 0xe0001111, 0x1e5a: 0xf0000404, 0x1e5b: 0xe0000f70, + 0x1e5c: 0x40300420, 0x1e5d: 0x40300620, 0x1e5e: 0xe0000f7f, 0x1e5f: 0x402c9620, + 0x1e60: 0xe000099b, 0x1e61: 0xe0000998, 0x1e62: 0xe0000989, 0x1e63: 0xe0000986, + 0x1e64: 0xe0000928, 0x1e65: 0xe0000924, 0x1e66: 0xe0000930, 0x1e67: 0xe000092c, + 0x1e68: 0xe0000940, 0x1e69: 0xe000093c, 0x1e6a: 0xe0000938, 0x1e6b: 0xe0000934, + 0x1e6c: 0xe00009aa, 0x1e6d: 0xe00009a6, 0x1e6e: 0xe0000902, 0x1e6f: 0xe00008fe, + 0x1e70: 0xe000090a, 0x1e71: 0xe0000906, 0x1e72: 0xe000091a, 0x1e73: 0xe0000916, + 0x1e74: 0xe0000912, 0x1e75: 0xe000090e, 0x1e76: 0xe00009a2, 0x1e77: 0xe000099e, + 0x1e78: 0xe0000b6e, 0x1e79: 0xe0000b6b, 0x1e7a: 0xe0000b5c, 0x1e7b: 0xe0000b59, + 0x1e7c: 0xe0000b26, 0x1e7d: 0xe0000b23, 0x1e7e: 0xe0000afb, 0x1e7f: 0xe0000af7, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xe0000b03, 0x1e81: 0xe0000aff, 0x1e82: 0xe0000b13, 0x1e83: 0xe0000b0f, + 0x1e84: 0xe0000b0b, 0x1e85: 0xe0000b07, 0x1e86: 0xe0000b75, 0x1e87: 0xe0000b71, + 0x1e88: 0xe0000c66, 0x1e89: 0xe0000c63, 0x1e8a: 0xe0000c78, 0x1e8b: 0xe0000c75, + 0x1e8c: 0xe0000e84, 0x1e8d: 0xe0000e81, 0x1e8e: 0xe0000e44, 0x1e8f: 0xe0000e41, + 0x1e90: 0xe0000dad, 0x1e91: 0xe0000da9, 0x1e92: 0xe0000db5, 0x1e93: 0xe0000db1, + 0x1e94: 0xe0000dc5, 0x1e95: 0xe0000dc1, 0x1e96: 0xe0000dbd, 0x1e97: 0xe0000db9, + 0x1e98: 0xe0000e8b, 0x1e99: 0xe0000e87, 0x1e9a: 0xe0000e5d, 0x1e9b: 0xe0000e59, + 0x1e9c: 0xe0000e65, 0x1e9d: 0xe0000e61, 0x1e9e: 0xe0000e75, 0x1e9f: 0xe0000e71, + 0x1ea0: 0xe0000e6d, 0x1ea1: 0xe0000e69, 0x1ea2: 0xe0000e7d, 0x1ea3: 0xe0000e79, + 0x1ea4: 0xe000108d, 0x1ea5: 0xe000108a, 0x1ea6: 0xe000104d, 0x1ea7: 0xe000104a, + 0x1ea8: 0xe0001066, 0x1ea9: 0xe0001062, 0x1eaa: 0xe000106e, 0x1eab: 0xe000106a, + 0x1eac: 0xe000107e, 0x1ead: 0xe000107a, 0x1eae: 0xe0001076, 0x1eaf: 0xe0001072, + 0x1eb0: 0xe0001086, 0x1eb1: 0xe0001082, 0x1eb2: 0xe0001108, 0x1eb3: 0xe0001105, + 0x1eb4: 0xe0001135, 0x1eb5: 0xe0001132, 0x1eb6: 0xe000112f, 0x1eb7: 0xe000112c, + 0x1eb8: 0xe000111d, 0x1eb9: 0xe000111a, 0x1eba: 0xe0000d0a, 0x1ebb: 0xe0000d07, + 0x1ebc: 0x0030d888, 0x1ebd: 0x4030d820, 0x1ebe: 0x00312088, 0x1ebf: 0x40312020, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xe0001165, 0x1ec1: 0xe00011a9, 0x1ec2: 0xe000117d, 0x1ec3: 0xe00011c1, + 0x1ec4: 0xe000116b, 0x1ec5: 0xe00011af, 0x1ec6: 0xe000118f, 0x1ec7: 0xe00011d3, + 0x1ec8: 0xe0001168, 0x1ec9: 0xe00011ac, 0x1eca: 0xe0001181, 0x1ecb: 0xe00011c5, + 0x1ecc: 0xe000116f, 0x1ecd: 0xe00011b3, 0x1ece: 0xe0001193, 0x1ecf: 0xe00011d7, + 0x1ed0: 0xe000121a, 0x1ed1: 0xe0001230, 0x1ed2: 0xe0001228, 0x1ed3: 0xe000123e, + 0x1ed4: 0xe0001220, 0x1ed5: 0xe0001236, + 0x1ed8: 0xe000121d, 0x1ed9: 0xe0001233, 0x1eda: 0xe000122c, 0x1edb: 0xe0001242, + 0x1edc: 0xe0001224, 0x1edd: 0xe000123a, + 0x1ee0: 0xe0001252, 0x1ee1: 0xe0001296, 0x1ee2: 0xe000126a, 0x1ee3: 0xe00012ae, + 0x1ee4: 0xe0001258, 0x1ee5: 0xe000129c, 0x1ee6: 0xe000127c, 0x1ee7: 0xe00012c0, + 0x1ee8: 0xe0001255, 0x1ee9: 0xe0001299, 0x1eea: 0xe000126e, 0x1eeb: 0xe00012b2, + 0x1eec: 0xe000125c, 0x1eed: 0xe00012a0, 0x1eee: 0xe0001280, 0x1eef: 0xe00012c4, + 0x1ef0: 0xe00012fb, 0x1ef1: 0xe0001319, 0x1ef2: 0xe0001309, 0x1ef3: 0xe0001327, + 0x1ef4: 0xe0001301, 0x1ef5: 0xe000131f, 0x1ef6: 0xe0001311, 0x1ef7: 0xe000132f, + 0x1ef8: 0xe00012fe, 0x1ef9: 0xe000131c, 0x1efa: 0xe000130d, 0x1efb: 0xe000132b, + 0x1efc: 0xe0001305, 0x1efd: 0xe0001323, 0x1efe: 0xe0001315, 0x1eff: 0xe0001333, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xe000136c, 0x1f01: 0xe0001382, 0x1f02: 0xe000137a, 0x1f03: 0xe0001390, + 0x1f04: 0xe0001372, 0x1f05: 0xe0001388, + 0x1f08: 0xe000136f, 0x1f09: 0xe0001385, 0x1f0a: 0xe000137e, 0x1f0b: 0xe0001394, + 0x1f0c: 0xe0001376, 0x1f0d: 0xe000138c, + 0x1f10: 0xe00013ad, 0x1f11: 0xe00013bc, 0x1f12: 0xe00013b4, 0x1f13: 0xe00013ca, + 0x1f14: 0xe00013b0, 0x1f15: 0xe00013c2, 0x1f16: 0xe00013b8, 0x1f17: 0xe00013d2, + 0x1f19: 0xe00013bf, 0x1f1b: 0xe00013ce, + 0x1f1d: 0xe00013c6, 0x1f1f: 0xe00013d6, + 0x1f20: 0xe0001407, 0x1f21: 0xe000144b, 0x1f22: 0xe000141f, 0x1f23: 0xe0001463, + 0x1f24: 0xe000140d, 0x1f25: 0xe0001451, 0x1f26: 0xe0001431, 0x1f27: 0xe0001475, + 0x1f28: 0xe000140a, 0x1f29: 0xe000144e, 0x1f2a: 0xe0001423, 0x1f2b: 0xe0001467, + 0x1f2c: 0xe0001411, 0x1f2d: 0xe0001455, 0x1f2e: 0xe0001435, 0x1f2f: 0xe0001479, + 0x1f30: 0xe00011f7, 0x1f31: 0xe00011ed, 0x1f32: 0xe000124c, 0x1f33: 0xe0001246, + 0x1f34: 0xe00012e4, 0x1f35: 0xe00012da, 0x1f36: 0xe000133d, 0x1f37: 0xe0001337, + 0x1f38: 0xe000139e, 0x1f39: 0xe0001398, 0x1f3a: 0xe00013e0, 0x1f3b: 0xe00013da, + 0x1f3c: 0xe0001499, 0x1f3d: 0xe000148f, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xe00011a1, 0x1f41: 0xe00011e5, 0x1f42: 0xe0001185, 0x1f43: 0xe00011c9, + 0x1f44: 0xe0001173, 0x1f45: 0xe00011b7, 0x1f46: 0xe0001197, 0x1f47: 0xe00011db, + 0x1f48: 0xe00011a5, 0x1f49: 0xe00011e9, 0x1f4a: 0xe000118a, 0x1f4b: 0xe00011ce, + 0x1f4c: 0xe0001178, 0x1f4d: 0xe00011bc, 0x1f4e: 0xe000119c, 0x1f4f: 0xe00011e0, + 0x1f50: 0xe000128e, 0x1f51: 0xe00012d2, 0x1f52: 0xe0001272, 0x1f53: 0xe00012b6, + 0x1f54: 0xe0001260, 0x1f55: 0xe00012a4, 0x1f56: 0xe0001284, 0x1f57: 0xe00012c8, + 0x1f58: 0xe0001292, 0x1f59: 0xe00012d6, 0x1f5a: 0xe0001277, 0x1f5b: 0xe00012bb, + 0x1f5c: 0xe0001265, 0x1f5d: 0xe00012a9, 0x1f5e: 0xe0001289, 0x1f5f: 0xe00012cd, + 0x1f60: 0xe0001443, 0x1f61: 0xe0001487, 0x1f62: 0xe0001427, 0x1f63: 0xe000146b, + 0x1f64: 0xe0001415, 0x1f65: 0xe0001459, 0x1f66: 0xe0001439, 0x1f67: 0xe000147d, + 0x1f68: 0xe0001447, 0x1f69: 0xe000148b, 0x1f6a: 0xe000142c, 0x1f6b: 0xe0001470, + 0x1f6c: 0xe000141a, 0x1f6d: 0xe000145e, 0x1f6e: 0xe000143e, 0x1f6f: 0xe0001482, + 0x1f70: 0xe0001201, 0x1f71: 0xe000120e, 0x1f72: 0xe00011fd, 0x1f73: 0xe0001214, + 0x1f74: 0xe00011f3, 0x1f76: 0xe0001207, 0x1f77: 0xe000120a, + 0x1f78: 0xe0001204, 0x1f79: 0xe0001211, 0x1f7a: 0xe00011fa, 0x1f7b: 0xe00011f0, + 0x1f7c: 0xe0001217, 0x1f7d: 0x40063620, 0x1f7e: 0x40326c20, 0x1f7f: 0x40063620, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x40063a20, 0x1f81: 0xe00000b1, 0x1f82: 0xe00012ea, 0x1f83: 0xe00012f5, + 0x1f84: 0xe00012e0, 0x1f86: 0xe00012ee, 0x1f87: 0xe00012f1, + 0x1f88: 0xe000124f, 0x1f89: 0xe0001249, 0x1f8a: 0xe00012e7, 0x1f8b: 0xe00012dd, + 0x1f8c: 0xe00012f8, 0x1f8d: 0xe00000b7, 0x1f8e: 0xe00000b4, 0x1f8f: 0xe00000ba, + 0x1f90: 0xe0001343, 0x1f91: 0xe000135e, 0x1f92: 0xe0001356, 0x1f93: 0xe0001352, + 0x1f96: 0xe0001349, 0x1f97: 0xe000135a, + 0x1f98: 0xe0001346, 0x1f99: 0xe0001361, 0x1f9a: 0xe0001340, 0x1f9b: 0xe000133a, + 0x1f9d: 0xe00000c0, 0x1f9e: 0xe00000bd, 0x1f9f: 0xe00000c3, + 0x1fa0: 0xe00013e6, 0x1fa1: 0xe0001401, 0x1fa2: 0xe00013f9, 0x1fa3: 0xe00013f5, + 0x1fa4: 0xe00013a4, 0x1fa5: 0xe00013a7, 0x1fa6: 0xe00013ec, 0x1fa7: 0xe00013fd, + 0x1fa8: 0xe00013e9, 0x1fa9: 0xe0001404, 0x1faa: 0xe00013e3, 0x1fab: 0xe00013dd, + 0x1fac: 0xe00013aa, 0x1fad: 0xe00000ae, 0x1fae: 0xe00000ab, 0x1faf: 0x40061e20, + 0x1fb2: 0xe000149f, 0x1fb3: 0xe00014aa, + 0x1fb4: 0xe0001495, 0x1fb6: 0xe00014a3, 0x1fb7: 0xe00014a6, + 0x1fb8: 0xe00013a1, 0x1fb9: 0xe000139b, 0x1fba: 0xe000149c, 0x1fbb: 0xe0001492, + 0x1fbc: 0xe00014ad, 0x1fbd: 0x40062020, 0x1fbe: 0x40063820, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x00021284, 0x1fc1: 0x00021284, 0x1fc2: 0x00021284, 0x1fc3: 0x00021284, + 0x1fc4: 0x00021284, 0x1fc5: 0x00021284, 0x1fc6: 0x00021284, 0x1fc7: 0x0002129b, + 0x1fc8: 0x00021284, 0x1fc9: 0x00021284, 0x1fca: 0x00021284, 0x1fcb: 0xa0000000, + 0x1fcc: 0xa0000000, 0x1fcd: 0xa0000000, 0x1fce: 0xa0000000, 0x1fcf: 0xa0000000, + 0x1fd0: 0x40022620, 0x1fd1: 0x0002269b, 0x1fd2: 0x40022820, 0x1fd3: 0x40022a20, + 0x1fd4: 0x40022c20, 0x1fd5: 0x40022e20, 0x1fd6: 0x4004c420, 0x1fd7: 0x40021820, + 0x1fd8: 0x4003d420, 0x1fd9: 0x4003d620, 0x1fda: 0x4003d820, 0x1fdb: 0x4003da20, + 0x1fdc: 0x4003e220, 0x1fdd: 0x4003e420, 0x1fde: 0x4003e620, 0x1fdf: 0x4003e820, + 0x1fe0: 0x4004f820, 0x1fe1: 0x4004fa20, 0x1fe2: 0x40050220, 0x1fe3: 0x40050420, + 0x1fe4: 0x0002e484, 0x1fe5: 0xf0001f04, 0x1fe6: 0xf0000404, 0x1fe7: 0x40050620, + 0x1fe8: 0x40020e20, 0x1fe9: 0x40021020, 0x1fea: 0xa0000000, 0x1feb: 0xa0000000, + 0x1fec: 0xa0000000, 0x1fed: 0xa0000000, 0x1fee: 0xa0000000, 0x1fef: 0x0002129b, + 0x1ff0: 0x4004f020, 0x1ff1: 0x4004f420, 0x1ff2: 0x40050e20, 0x1ff3: 0xf0001f04, + 0x1ff4: 0xf0000404, 0x1ff5: 0x40051020, 0x1ff6: 0xf0001f04, 0x1ff7: 0xf0000404, + 0x1ff8: 0x40051620, 0x1ff9: 0x4003dc20, 0x1ffa: 0x4003de20, 0x1ffb: 0x40051820, + 0x1ffc: 0xf0001f04, 0x1ffd: 0x4002e020, 0x1ffe: 0x40021420, 0x1fff: 0x40051a20, + // Block 0x80, offset 0x2000 + 0x2000: 0x40051e20, 0x2001: 0x40052220, 0x2002: 0x40052420, 0x2003: 0x40050820, + 0x2004: 0x40095820, 0x2005: 0x40040c20, 0x2006: 0x40040e20, 0x2007: 0xf0001f04, + 0x2008: 0xf0001f04, 0x2009: 0xf0001f04, 0x200a: 0x4004e820, 0x200b: 0x4004d420, + 0x200c: 0x40050a20, 0x200d: 0x40050c20, 0x200e: 0x4004da20, 0x200f: 0x40026620, + 0x2010: 0x40052020, 0x2011: 0x4004dc20, 0x2012: 0x40095020, 0x2013: 0x40023420, + 0x2014: 0x40051c20, 0x2015: 0x40039c20, 0x2016: 0x40039e20, 0x2017: 0xe00000a6, + 0x2018: 0x4003a020, 0x2019: 0x4003a220, 0x201a: 0x4003a420, 0x201b: 0x4003a620, + 0x201c: 0x4003a820, 0x201d: 0x4003aa20, 0x201e: 0x4003ac20, 0x201f: 0x00021284, + 0x2020: 0xa0000000, 0x2021: 0xa0000000, 0x2022: 0xa0000000, 0x2023: 0xa0000000, + 0x2024: 0xa0000000, + 0x202a: 0xa0000000, 0x202b: 0xa0000000, + 0x202c: 0xa0000000, 0x202d: 0xa0000000, 0x202e: 0xa0000000, 0x202f: 0xa0000000, + 0x2030: 0x0029cc94, 0x2031: 0x002d9a94, + 0x2034: 0x0029d494, 0x2035: 0x0029d694, 0x2036: 0x0029d894, 0x2037: 0x0029da94, + 0x2038: 0x0029dc94, 0x2039: 0x0029de94, 0x203a: 0x00093894, 0x203b: 0x00094e94, + 0x203c: 0x00094294, 0x203d: 0x0003f494, 0x203e: 0x0003f694, 0x203f: 0x002e9e94, + // Block 0x81, offset 0x2040 + 0x2040: 0x0029cc95, 0x2041: 0x0029ce95, 0x2042: 0x0029d095, 0x2043: 0x0029d295, + 0x2044: 0x0029d495, 0x2045: 0x0029d695, 0x2046: 0x0029d895, 0x2047: 0x0029da95, + 0x2048: 0x0029dc95, 0x2049: 0x0029de95, 0x204a: 0x00093895, 0x204b: 0x00094e95, + 0x204c: 0x00094295, 0x204d: 0x0003f495, 0x204e: 0x0003f695, + 0x2050: 0x002bde95, 0x2051: 0x002c9895, 0x2052: 0x002ee295, 0x2053: 0x0030f695, + 0x2054: 0x002cb895, 0x2055: 0x002d6895, 0x2056: 0x002dfe95, 0x2057: 0x002e2295, + 0x2058: 0x002e8295, 0x2059: 0x002e9e95, 0x205a: 0x002f2c95, 0x205b: 0x002fe695, + 0x205c: 0x00302c95, + 0x2060: 0x4027f820, 0x2061: 0x4027fa20, 0x2062: 0x4027fc20, 0x2063: 0x4027fe20, + 0x2064: 0x40280020, 0x2065: 0x40280220, 0x2066: 0x40280420, 0x2067: 0x40280620, + 0x2068: 0x40282c20, 0x2069: 0x40280820, 0x206a: 0x40280a20, 0x206b: 0x40280c20, + 0x206c: 0x40280e20, 0x206d: 0x40281020, 0x206e: 0x40281220, 0x206f: 0x40281420, + 0x2070: 0x40281620, 0x2071: 0x40281820, 0x2072: 0x40281a20, 0x2073: 0x40281c20, + 0x2074: 0x40281e20, 0x2075: 0x40282020, 0x2076: 0x40282220, 0x2077: 0x40282420, + 0x2078: 0x40282620, 0x2079: 0x40282820, 0x207a: 0x40282a20, + // Block 0x82, offset 0x2080 + 0x2090: 0xae612a02, 0x2091: 0xae612b02, 0x2092: 0xa0112c02, 0x2093: 0xa0112c02, + 0x2094: 0xae612d02, 0x2095: 0xae612e02, 0x2096: 0xae612f02, 0x2097: 0xae613002, + 0x2098: 0xa0106102, 0x2099: 0xa0106102, 0x209a: 0xa0106102, 0x209b: 0xae613102, + 0x209c: 0xae613202, 0x209d: 0xa0006202, 0x209e: 0xa0006202, 0x209f: 0xa0006202, + 0x20a0: 0xa0006202, 0x20a1: 0xae613302, 0x20a2: 0xa0006202, 0x20a3: 0xa0006202, + 0x20a4: 0xa0006202, 0x20a5: 0xa0106102, 0x20a6: 0xa0113402, 0x20a7: 0xae613502, + 0x20a8: 0xadc13602, 0x20a9: 0xae613702, 0x20aa: 0xa0106102, 0x20ab: 0xa0106102, + 0x20ac: 0xadc06002, 0x20ad: 0xadc06002, 0x20ae: 0xadc06002, 0x20af: 0xadc06002, + 0x20b0: 0xae605f02, + // Block 0x83, offset 0x20c0 + 0x20c0: 0xe00009bc, 0x20c1: 0xe00009c0, 0x20c2: 0x002c3a8b, 0x20c3: 0xf0000a04, + 0x20c4: 0x40081c20, 0x20c5: 0xe0000a5e, 0x20c6: 0xe0000a62, 0x20c7: 0x002cc28a, + 0x20c8: 0x40081e20, 0x20c9: 0xf0000a04, 0x20ca: 0x002d2285, 0x20cb: 0x002d688b, + 0x20cc: 0x002d688b, 0x20cd: 0x002d688b, 0x20ce: 0x002d6885, 0x20cf: 0xf0000202, + 0x20d0: 0x002d9a8b, 0x20d1: 0x002d9a8b, 0x20d2: 0x002e228b, 0x20d3: 0x002e2285, + 0x20d4: 0x40082020, 0x20d5: 0x002e9e8b, 0x20d6: 0xf000040a, 0x20d7: 0x40082220, + 0x20d8: 0x40082420, 0x20d9: 0x002f2c8b, 0x20da: 0x002f568b, 0x20db: 0x002f7a8b, + 0x20dc: 0x002f7a8b, 0x20dd: 0x002f7a8b, 0x20de: 0x40082620, 0x20df: 0x40082820, + 0x20e0: 0xf0001414, 0x20e1: 0xe0000fbd, 0x20e2: 0xf0001414, 0x20e3: 0x40082a20, + 0x20e4: 0x00312a8b, 0x20e5: 0x40082c20, 0x20e6: 0x0032a288, 0x20e7: 0x40082e20, + 0x20e8: 0x00312a8b, 0x20e9: 0x40083020, 0x20ea: 0x002dfe88, 0x20eb: 0xe000094d, + 0x20ec: 0x002c0a8b, 0x20ed: 0x002c3a8b, 0x20ee: 0x40083220, 0x20ef: 0x002c9885, + 0x20f0: 0x002c988b, 0x20f1: 0x002d088b, 0x20f2: 0x002d1e88, 0x20f3: 0x002e828b, + 0x20f4: 0x002ee285, 0x20f5: 0x00389084, 0x20f6: 0x00389284, 0x20f7: 0x00389484, + 0x20f8: 0x00389684, 0x20f9: 0x002d9a85, 0x20fa: 0x40083420, 0x20fb: 0xe0000b95, + 0x20fc: 0x00327e85, 0x20fd: 0x00325685, 0x20fe: 0x0032568b, 0x20ff: 0x00327e8b, + // Block 0x84, offset 0x2100 + 0x2100: 0x00093685, 0x2101: 0x40083620, 0x2102: 0x40083820, 0x2103: 0x40083a20, + 0x2104: 0x40083c20, 0x2105: 0x002c628b, 0x2106: 0x002c6285, 0x2107: 0x002c9885, + 0x2108: 0x002d9a85, 0x2109: 0x002dcc85, 0x210a: 0x40083e20, 0x210b: 0x400a6e20, + 0x210c: 0x40084020, 0x210d: 0xe00009c4, 0x210e: 0x402d1e20, 0x210f: 0x40084220, + 0x2110: 0xe00002cb, 0x2111: 0xe00002d3, 0x2112: 0xe00002b2, 0x2113: 0xe00002bb, + 0x2114: 0xe00003cd, 0x2115: 0xe00002c3, 0x2116: 0xe00003d1, 0x2117: 0xe00004ab, + 0x2118: 0xe0000579, 0x2119: 0xe00002c7, 0x211a: 0xe0000640, 0x211b: 0xe00002cf, + 0x211c: 0xe00004af, 0x211d: 0xe0000644, 0x211e: 0xe0000798, 0x211f: 0xf0001e1e, + 0x2120: 0x002d9a8a, 0x2121: 0xf0001f0a, 0x2122: 0xf0000a0a, 0x2123: 0xf0001f0a, + 0x2124: 0x0030be8a, 0x2125: 0xf0001f0a, 0x2126: 0xf0000a0a, 0x2127: 0xe00010bb, + 0x2128: 0xf0001f0a, 0x2129: 0x0030f68a, 0x212a: 0xf0001f0a, 0x212b: 0xf0000a0a, + 0x212c: 0x002e228a, 0x212d: 0x002c3a8a, 0x212e: 0x002c628a, 0x212f: 0x002e828a, + 0x2130: 0x002d9a84, 0x2131: 0xf0001f04, 0x2132: 0xf0000404, 0x2133: 0xf0001f04, + 0x2134: 0x0030be84, 0x2135: 0xf0001f04, 0x2136: 0xf0000404, 0x2137: 0xe00010b6, + 0x2138: 0xf0001f04, 0x2139: 0x0030f684, 0x213a: 0xf0001f04, 0x213b: 0xf0000404, + 0x213c: 0x002e2284, 0x213d: 0x002c3a84, 0x213e: 0x002c6284, 0x213f: 0x002e8284, + // Block 0x85, offset 0x2140 + 0x2140: 0x40287c20, 0x2141: 0x40287e20, 0x2142: 0x40288020, 0x2143: 0x002c5e88, + 0x2144: 0x402c5e20, 0x2145: 0xe00006c9, 0x2146: 0x40288220, 0x2147: 0x40288420, + 0x2148: 0x40288620, 0x2149: 0xe00001e2, + 0x2150: 0x40084420, 0x2151: 0x40084820, 0x2152: 0x40084620, 0x2153: 0x40084a20, + 0x2154: 0x40084c20, 0x2155: 0x40084e20, 0x2156: 0x40085020, 0x2157: 0x40085220, + 0x2158: 0x40085420, 0x2159: 0x40085620, 0x215a: 0xe00000c6, 0x215b: 0xe00000c9, + 0x215c: 0x40085820, 0x215d: 0x40085a20, 0x215e: 0x40085c20, 0x215f: 0x40085e20, + 0x2160: 0x40086020, 0x2161: 0x40086220, 0x2162: 0x40086420, 0x2163: 0x40086620, + 0x2164: 0x40086820, 0x2165: 0x40086a20, 0x2166: 0x40086c20, 0x2167: 0x40086e20, + 0x2168: 0x40087020, 0x2169: 0x40087220, 0x216a: 0x40087420, 0x216b: 0x40087620, + 0x216c: 0x40087820, 0x216d: 0x40087a20, 0x216e: 0xe00000cc, 0x216f: 0x40087c20, + 0x2170: 0x40087e20, 0x2171: 0x40088020, 0x2172: 0x40088220, 0x2173: 0x40088420, + 0x2174: 0x40088620, 0x2175: 0x40088820, 0x2176: 0x40088a20, 0x2177: 0x40088c20, + 0x2178: 0x40088e20, 0x2179: 0x40089020, 0x217a: 0x40089220, 0x217b: 0x40089420, + 0x217c: 0x40089620, 0x217d: 0x40089820, 0x217e: 0x40089a20, 0x217f: 0x40089c20, + // Block 0x86, offset 0x2180 + 0x2180: 0x40089e20, 0x2181: 0x4008a020, 0x2182: 0x4008a220, 0x2183: 0x4008a420, + 0x2184: 0x4008a620, 0x2185: 0x4008a820, 0x2186: 0x4008aa20, 0x2187: 0x4008ac20, + 0x2188: 0x4008ae20, 0x2189: 0x4008b020, 0x218a: 0x4008b220, 0x218b: 0x4008b420, + 0x218c: 0x4008b620, 0x218d: 0xe00000cf, 0x218e: 0xe00000d5, 0x218f: 0xe00000d2, + 0x2190: 0x4008b820, 0x2191: 0x4008ba20, 0x2192: 0x4008bc20, 0x2193: 0x4008be20, + 0x2194: 0x4008c020, 0x2195: 0x4008c220, 0x2196: 0x4008c420, 0x2197: 0x4008c620, + 0x2198: 0x4008c820, 0x2199: 0x4008ca20, 0x219a: 0x4008cc20, 0x219b: 0x4008ce20, + 0x219c: 0x4008d020, 0x219d: 0x4008d220, 0x219e: 0x4008d420, 0x219f: 0x4008d620, + 0x21a0: 0x4008d820, 0x21a1: 0x4008da20, 0x21a2: 0x4008dc20, 0x21a3: 0x4008de20, + 0x21a4: 0x4008e020, 0x21a5: 0x4008e220, 0x21a6: 0x4008e420, 0x21a7: 0x4008e620, + 0x21a8: 0x4008e820, 0x21a9: 0x4008ea20, 0x21aa: 0x4008ec20, 0x21ab: 0x4008ee20, + 0x21ac: 0x4008f020, 0x21ad: 0x4008f220, 0x21ae: 0x4008f420, 0x21af: 0x4008f620, + 0x21b0: 0x4008f820, 0x21b1: 0x4008fa20, 0x21b2: 0x4008fc20, 0x21b3: 0x4008fe20, + 0x21b4: 0x40090020, 0x21b5: 0x40090220, 0x21b6: 0x40090420, 0x21b7: 0x40090620, + 0x21b8: 0x40090820, 0x21b9: 0x40090a20, 0x21ba: 0x40090c20, 0x21bb: 0x40090e20, + 0x21bc: 0x40091020, 0x21bd: 0x40091220, 0x21be: 0x40091420, 0x21bf: 0x40091620, + // Block 0x87, offset 0x21c0 + 0x21c0: 0x40091820, 0x21c1: 0x40091a20, 0x21c2: 0x40091c20, 0x21c3: 0x40091e20, + 0x21c4: 0xe00000d8, 0x21c5: 0x40092020, 0x21c6: 0x40092220, 0x21c7: 0x40092420, + 0x21c8: 0x40092620, 0x21c9: 0xe00000db, 0x21ca: 0x40092820, 0x21cb: 0x40092a20, + 0x21cc: 0xe00000de, 0x21cd: 0x40092c20, 0x21ce: 0x40093020, 0x21cf: 0x40093220, + 0x21d0: 0x40093420, 0x21d1: 0x40093620, 0x21d2: 0x40094e20, 0x21d3: 0x40095220, + 0x21d4: 0x40095420, 0x21d5: 0x40095620, 0x21d6: 0x40095a20, 0x21d7: 0x40095c20, + 0x21d8: 0x40095e20, 0x21d9: 0x40096020, 0x21da: 0x40096220, 0x21db: 0x40096420, + 0x21dc: 0x40096820, 0x21dd: 0x40096c20, 0x21de: 0x40096e20, 0x21df: 0x40097020, + 0x21e0: 0x40097220, 0x21e1: 0x40097420, 0x21e2: 0x40097620, 0x21e3: 0x40097820, + 0x21e4: 0xe00000ea, 0x21e5: 0x40097a20, 0x21e6: 0xe00000ed, 0x21e7: 0x40097c20, + 0x21e8: 0x40097e20, 0x21e9: 0x40098020, 0x21ea: 0x40098220, 0x21eb: 0x40098420, + 0x21ec: 0xf0001f04, 0x21ed: 0xf0000404, 0x21ee: 0x40098620, 0x21ef: 0xf0001f04, + 0x21f0: 0xf0000404, 0x21f1: 0x40098820, 0x21f2: 0x40098a20, 0x21f3: 0x40098c20, + 0x21f4: 0x40098e20, 0x21f5: 0x40099020, 0x21f6: 0x40099220, 0x21f7: 0x40099420, + 0x21f8: 0x40099620, 0x21f9: 0x40099820, 0x21fa: 0x40099a20, 0x21fb: 0x40099c20, + 0x21fc: 0x40099e20, 0x21fd: 0x4009a020, 0x21fe: 0x4009a220, 0x21ff: 0x4009a420, + // Block 0x88, offset 0x2200 + 0x2200: 0x4009a620, 0x2201: 0xe00000f5, 0x2202: 0x4009a820, 0x2203: 0x4009aa20, + 0x2204: 0xe00000f8, 0x2205: 0x4009ac20, 0x2206: 0x4009ae20, 0x2207: 0xe00000fb, + 0x2208: 0x4009b020, 0x2209: 0xe00000fe, 0x220a: 0x4009b220, 0x220b: 0x4009b420, + 0x220c: 0x4009b620, 0x220d: 0x4009b820, 0x220e: 0x4009ba20, 0x220f: 0x4009bc20, + 0x2210: 0x4009be20, 0x2211: 0x4009c020, 0x2212: 0x4009c220, 0x2213: 0x4009c420, + 0x2214: 0x4009c620, 0x2215: 0x4009c820, 0x2216: 0x4009ca20, 0x2217: 0x4009cc20, + 0x2218: 0x4009ce20, 0x2219: 0x4009d020, 0x221a: 0x4009d220, 0x221b: 0x4009d420, + 0x221c: 0x4009d620, 0x221d: 0x4009d820, 0x221e: 0x4009da20, 0x221f: 0x4009dc20, + 0x2220: 0xe00000e4, 0x2221: 0x4009de20, 0x2222: 0xe0000104, 0x2223: 0x4009e020, + 0x2224: 0x4009e220, 0x2225: 0x4009e420, 0x2226: 0x4009e620, 0x2227: 0x4009e820, + 0x2228: 0x4009ea20, 0x2229: 0x4009ec20, 0x222a: 0x4009ee20, 0x222b: 0x4009f020, + 0x222c: 0x4009f220, 0x222d: 0xe0000101, 0x222e: 0xe00000e1, 0x222f: 0xe00000e7, + 0x2230: 0xe0000107, 0x2231: 0xe000010a, 0x2232: 0x4009f420, 0x2233: 0x4009f620, + 0x2234: 0xe000010d, 0x2235: 0xe0000110, 0x2236: 0x4009f820, 0x2237: 0x4009fa20, + 0x2238: 0xe0000113, 0x2239: 0xe0000116, 0x223a: 0x4009fc20, 0x223b: 0x4009fe20, + 0x223c: 0x400a0020, 0x223d: 0x400a0220, 0x223e: 0x400a0420, 0x223f: 0x400a0620, + // Block 0x89, offset 0x2240 + 0x2240: 0xe0000119, 0x2241: 0xe000011c, 0x2242: 0x400a0820, 0x2243: 0x400a0a20, + 0x2244: 0xe0000125, 0x2245: 0xe0000128, 0x2246: 0x400a0c20, 0x2247: 0x400a0e20, + 0x2248: 0xe000012b, 0x2249: 0xe000012e, 0x224a: 0x400a1020, 0x224b: 0x400a1220, + 0x224c: 0x400a1420, 0x224d: 0x400a1620, 0x224e: 0x400a1820, 0x224f: 0x400a1a20, + 0x2250: 0x400a1c20, 0x2251: 0x400a1e20, 0x2252: 0x400a2020, 0x2253: 0x400a2220, + 0x2254: 0x400a2420, 0x2255: 0x400a2620, 0x2256: 0x400a2820, 0x2257: 0x400a2a20, + 0x2258: 0x400a2c20, 0x2259: 0x400a2e20, 0x225a: 0x400a3020, 0x225b: 0x400a3220, + 0x225c: 0x400a3420, 0x225d: 0x400a3620, 0x225e: 0x400a3820, 0x225f: 0x400a3a20, + 0x2260: 0x400a3c20, 0x2261: 0x400a3e20, 0x2262: 0x400a4020, 0x2263: 0x400a4220, + 0x2264: 0x400a4420, 0x2265: 0x400a4620, 0x2266: 0x400a4820, 0x2267: 0x400a4a20, + 0x2268: 0x400a4c20, 0x2269: 0x400a4e20, 0x226a: 0x400a5020, 0x226b: 0x400a5220, + 0x226c: 0xe0000137, 0x226d: 0xe000013a, 0x226e: 0xe000013d, 0x226f: 0xe0000140, + 0x2270: 0x400a5420, 0x2271: 0x400a5620, 0x2272: 0x400a5820, 0x2273: 0x400a5a20, + 0x2274: 0x400a5c20, 0x2275: 0x400a5e20, 0x2276: 0x400a6020, 0x2277: 0x400a6220, + 0x2278: 0x400a6420, 0x2279: 0x400a6620, 0x227a: 0x400a6820, 0x227b: 0x400a6a20, + 0x227c: 0x400a6c20, 0x227d: 0x400a7020, 0x227e: 0x400a7220, 0x227f: 0x400a7420, + // Block 0x8a, offset 0x2280 + 0x2280: 0x400a7620, 0x2281: 0x400a7820, 0x2282: 0x400a7a20, 0x2283: 0x400a7c20, + 0x2284: 0x400a7e20, 0x2285: 0x400a8020, 0x2286: 0x400a8220, 0x2287: 0x400a8420, + 0x2288: 0x400a8620, 0x2289: 0x400a8820, 0x228a: 0x400a8a20, 0x228b: 0x400a8c20, + 0x228c: 0x400a8e20, 0x228d: 0x400a9020, 0x228e: 0x400a9220, 0x228f: 0x400a9420, + 0x2290: 0x400a9620, 0x2291: 0x400a9820, 0x2292: 0x400a9a20, 0x2293: 0x400a9c20, + 0x2294: 0x400a9e20, 0x2295: 0x400aa020, 0x2296: 0x400aa220, 0x2297: 0x400aa420, + 0x2298: 0x400aa620, 0x2299: 0x400aa820, 0x229a: 0x400aaa20, 0x229b: 0x400aac20, + 0x229c: 0x400aae20, 0x229d: 0x400ab020, 0x229e: 0x400ab220, 0x229f: 0x400ab420, + 0x22a0: 0xe000011f, 0x22a1: 0xe0000122, 0x22a2: 0xe0000131, 0x22a3: 0xe0000134, + 0x22a4: 0x400ab620, 0x22a5: 0x400ab820, 0x22a6: 0x400aba20, 0x22a7: 0x400abc20, + 0x22a8: 0x400abe20, 0x22a9: 0x400ac020, 0x22aa: 0xe0000143, 0x22ab: 0xe0000146, + 0x22ac: 0xe0000149, 0x22ad: 0xe000014c, 0x22ae: 0x400ac220, 0x22af: 0x400ac420, + 0x22b0: 0x400ac620, 0x22b1: 0x400ac820, 0x22b2: 0x400aca20, 0x22b3: 0x400acc20, + 0x22b4: 0x400ace20, 0x22b5: 0x400ad020, 0x22b6: 0x400ad220, 0x22b7: 0x400ad420, + 0x22b8: 0x400ad620, 0x22b9: 0x400ad820, 0x22ba: 0x400ada20, 0x22bb: 0x400adc20, + 0x22bc: 0x400ade20, 0x22bd: 0x400ae020, 0x22be: 0x400ae220, 0x22bf: 0x400ae420, + // Block 0x8b, offset 0x22c0 + 0x22c0: 0x400ae620, 0x22c1: 0x400ae820, 0x22c2: 0x400aea20, 0x22c3: 0x400aec20, + 0x22c4: 0x400aee20, 0x22c5: 0x400af020, 0x22c6: 0x400af220, 0x22c7: 0x400af420, + 0x22c8: 0x400af620, 0x22c9: 0x400af820, 0x22ca: 0x400afa20, 0x22cb: 0x400afc20, + 0x22cc: 0x400afe20, 0x22cd: 0x400b0020, 0x22ce: 0x400b0220, 0x22cf: 0x400b0420, + 0x22d0: 0x400b0620, 0x22d1: 0x400b0820, 0x22d2: 0x400b0a20, 0x22d3: 0x400b0c20, + 0x22d4: 0x400b0e20, 0x22d5: 0x400b1020, 0x22d6: 0x400b1220, 0x22d7: 0x400b1420, + 0x22d8: 0x400b1620, 0x22d9: 0x400b1820, 0x22da: 0x400b1a20, 0x22db: 0x400b1c20, + 0x22dc: 0x400b1e20, 0x22dd: 0x400b2020, 0x22de: 0x400b2220, 0x22df: 0x400b2420, + 0x22e0: 0x400b2620, 0x22e1: 0x400b2820, 0x22e2: 0x400b2a20, 0x22e3: 0x400b2c20, + 0x22e4: 0x400b2e20, 0x22e5: 0x400b3020, 0x22e6: 0x400b3220, 0x22e7: 0x400b3420, + 0x22e8: 0x400b3620, 0x22e9: 0x40049c20, 0x22ea: 0x40049e20, 0x22eb: 0x400b3820, + 0x22ec: 0x400b3a20, 0x22ed: 0x400b3c20, 0x22ee: 0x400b3e20, 0x22ef: 0x400b4020, + 0x22f0: 0x400b4220, 0x22f1: 0x400b4420, 0x22f2: 0x400b4620, 0x22f3: 0x400b4820, + 0x22f4: 0x400b4a20, 0x22f5: 0x400b4c20, 0x22f6: 0x400b4e20, 0x22f7: 0x400b5020, + 0x22f8: 0x400b5220, 0x22f9: 0x400b5420, 0x22fa: 0x400b5620, 0x22fb: 0x400b5820, + 0x22fc: 0x400b5a20, 0x22fd: 0x400b5c20, 0x22fe: 0x400b5e20, 0x22ff: 0x400b6020, + // Block 0x8c, offset 0x2300 + 0x2300: 0x400b6220, 0x2301: 0x400b6420, 0x2302: 0x400b6620, 0x2303: 0x400b6820, + 0x2304: 0x400b6a20, 0x2305: 0x400b6c20, 0x2306: 0x400b6e20, 0x2307: 0x400b7020, + 0x2308: 0x400b7220, 0x2309: 0x400b7420, 0x230a: 0x400b7620, 0x230b: 0x400b7820, + 0x230c: 0x400b7a20, 0x230d: 0x400b7c20, 0x230e: 0x400b7e20, 0x230f: 0x400b8020, + 0x2310: 0x400b8220, 0x2311: 0x400b8420, 0x2312: 0x400b8620, 0x2313: 0x400b8820, + 0x2314: 0x400b8a20, 0x2315: 0x400b8c20, 0x2316: 0x400b8e20, 0x2317: 0x400b9020, + 0x2318: 0x400b9220, 0x2319: 0x400b9420, 0x231a: 0x400b9620, 0x231b: 0x400b9820, + 0x231c: 0x400b9a20, 0x231d: 0x400b9c20, 0x231e: 0x400b9e20, 0x231f: 0x400ba020, + 0x2320: 0x400ba220, 0x2321: 0x400ba420, 0x2322: 0x400ba620, 0x2323: 0x400ba820, + 0x2324: 0x400baa20, 0x2325: 0x400bac20, 0x2326: 0x400bae20, 0x2327: 0x400bb020, + 0x2328: 0x400bb220, 0x2329: 0x400bb420, 0x232a: 0x400bb620, 0x232b: 0x400bb820, + 0x232c: 0x400bba20, 0x232d: 0x400bbc20, 0x232e: 0x400bbe20, 0x232f: 0x400bc020, + 0x2330: 0x400bc220, 0x2331: 0x400bc420, 0x2332: 0x400bc620, 0x2333: 0x400bc820, + 0x2334: 0x400bca20, 0x2335: 0x400bcc20, 0x2336: 0x400bce20, 0x2337: 0x400bd020, + 0x2338: 0x400bd220, 0x2339: 0x400bd420, 0x233a: 0x400bd620, 0x233b: 0x400bd820, + 0x233c: 0x400bda20, 0x233d: 0x400bdc20, 0x233e: 0x400bde20, 0x233f: 0x400be020, + // Block 0x8d, offset 0x2340 + 0x2340: 0x400be220, 0x2341: 0x400be420, 0x2342: 0x400be620, 0x2343: 0x400be820, + 0x2344: 0x400bea20, 0x2345: 0x400bec20, 0x2346: 0x400bee20, 0x2347: 0x400bf020, + 0x2348: 0x400bf220, 0x2349: 0x400bf420, 0x234a: 0x400bf620, 0x234b: 0x400bf820, + 0x234c: 0x400bfa20, 0x234d: 0x400bfc20, 0x234e: 0x400bfe20, 0x234f: 0x400c0020, + 0x2350: 0x400c0220, 0x2351: 0x400c0420, 0x2352: 0x400c0620, 0x2353: 0x400c0820, + 0x2354: 0x400c0a20, 0x2355: 0x400c0c20, 0x2356: 0x400c0e20, 0x2357: 0x400c1020, + 0x2358: 0x400c1220, 0x2359: 0x400c1420, 0x235a: 0x400c1620, 0x235b: 0x400c1820, + 0x235c: 0x400c1a20, 0x235d: 0x400c1c20, 0x235e: 0x400c1e20, 0x235f: 0x400c2020, + 0x2360: 0x400c2220, 0x2361: 0x400c2420, 0x2362: 0x400c2620, 0x2363: 0x400c2820, + 0x2364: 0x400c2a20, 0x2365: 0x400c2c20, 0x2366: 0x400c2e20, 0x2367: 0x400c3020, + 0x2368: 0x400c3220, 0x2369: 0x400c3420, 0x236a: 0x400c3620, 0x236b: 0x400c3820, + 0x236c: 0x400c3a20, 0x236d: 0x400c3c20, 0x236e: 0x400c3e20, 0x236f: 0x400c4020, + 0x2370: 0x400c4220, 0x2371: 0x400c4420, 0x2372: 0x400c4620, 0x2373: 0x400c4820, + 0x2374: 0x400c4a20, 0x2375: 0x400c4c20, 0x2376: 0x400c4e20, 0x2377: 0x400c5020, + 0x2378: 0x400c5220, 0x2379: 0x400c5420, 0x237a: 0x400c5620, 0x237b: 0x400c5820, + 0x237c: 0x400c5a20, 0x237d: 0x400c5c20, 0x237e: 0x400c5e20, 0x237f: 0x400c6020, + // Block 0x8e, offset 0x2380 + 0x2380: 0x400c6220, 0x2381: 0x400c6420, 0x2382: 0x400c6620, 0x2383: 0x400c6820, + 0x2384: 0x400c6a20, 0x2385: 0x400c6c20, 0x2386: 0x400c6e20, 0x2387: 0x400c7020, + 0x2388: 0x400c7220, 0x2389: 0x400c7420, 0x238a: 0x400c7620, 0x238b: 0x400c7820, + 0x238c: 0x400c7a20, 0x238d: 0x400c7c20, 0x238e: 0x400c7e20, 0x238f: 0x400c8020, + 0x2390: 0x400c8220, 0x2391: 0x400c8420, 0x2392: 0x400c8620, 0x2393: 0x400c8820, + 0x2394: 0x400c8a20, 0x2395: 0x400c8c20, 0x2396: 0x400c8e20, 0x2397: 0x400c9020, + 0x2398: 0x400c9220, 0x2399: 0x400c9420, 0x239a: 0x400c9620, 0x239b: 0x400c9820, + 0x239c: 0x400c9a20, 0x239d: 0x400c9c20, 0x239e: 0x400c9e20, 0x239f: 0x400ca020, + 0x23a0: 0x400ca220, 0x23a1: 0x400ca420, 0x23a2: 0x400ca620, 0x23a3: 0x400ca820, + 0x23a4: 0x400caa20, 0x23a5: 0x400cac20, 0x23a6: 0x400cae20, 0x23a7: 0x400cb020, + 0x23a8: 0x400cb220, 0x23a9: 0x400cb420, 0x23aa: 0x400cb620, 0x23ab: 0x400cb820, + 0x23ac: 0x400cba20, 0x23ad: 0x400cbc20, 0x23ae: 0x400cbe20, 0x23af: 0x400cc020, + 0x23b0: 0x400cc220, 0x23b1: 0x400cc420, 0x23b2: 0x400cc620, 0x23b3: 0x400cc820, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x400cca20, 0x23c1: 0x400ccc20, 0x23c2: 0x400cce20, 0x23c3: 0x400cd020, + 0x23c4: 0x400cd220, 0x23c5: 0x400cd420, 0x23c6: 0x400cd620, 0x23c7: 0x400cd820, + 0x23c8: 0x400cda20, 0x23c9: 0x400cdc20, 0x23ca: 0x400cde20, 0x23cb: 0x400ce020, + 0x23cc: 0x400ce220, 0x23cd: 0x400ce420, 0x23ce: 0x400ce620, 0x23cf: 0x400ce820, + 0x23d0: 0x400cea20, 0x23d1: 0x400cec20, 0x23d2: 0x400cee20, 0x23d3: 0x400cf020, + 0x23d4: 0x400cf220, 0x23d5: 0x400cf420, 0x23d6: 0x400cf620, 0x23d7: 0x400cf820, + 0x23d8: 0x400cfa20, 0x23d9: 0x400cfc20, 0x23da: 0x400cfe20, 0x23db: 0x400d0020, + 0x23dc: 0x400d0220, 0x23dd: 0x400d0420, 0x23de: 0x400d0620, 0x23df: 0x400d0820, + 0x23e0: 0x400d0a20, 0x23e1: 0x400d0c20, 0x23e2: 0x400d0e20, 0x23e3: 0x400d1020, + 0x23e4: 0x400d1220, 0x23e5: 0x400d1420, 0x23e6: 0x400d1620, + // Block 0x90, offset 0x2400 + 0x2400: 0x400d1820, 0x2401: 0x400d1a20, 0x2402: 0x400d1c20, 0x2403: 0x400d1e20, + 0x2404: 0x400d2020, 0x2405: 0x400d2220, 0x2406: 0x400d2420, 0x2407: 0x400d2620, + 0x2408: 0x400d2820, 0x2409: 0x400d2a20, 0x240a: 0x400d2c20, + 0x2420: 0x0029ce86, 0x2421: 0x0029d086, 0x2422: 0x0029d286, 0x2423: 0x0029d486, + 0x2424: 0x0029d686, 0x2425: 0x0029d886, 0x2426: 0x0029da86, 0x2427: 0x0029dc86, + 0x2428: 0x0029de86, 0x2429: 0xf0000606, 0x242a: 0xf0000606, 0x242b: 0xf0000606, + 0x242c: 0xf0000606, 0x242d: 0xf0000606, 0x242e: 0xf0000606, 0x242f: 0xf0000606, + 0x2430: 0xf0000606, 0x2431: 0xf0000606, 0x2432: 0xf0000606, 0x2433: 0xf0000606, + 0x2434: 0xf0000404, 0x2435: 0xf0000404, 0x2436: 0xf0000404, 0x2437: 0xf0000404, + 0x2438: 0xf0000404, 0x2439: 0xf0000404, 0x243a: 0xf0000404, 0x243b: 0xf0000404, + 0x243c: 0xf0000404, 0x243d: 0xe0000015, 0x243e: 0xe000001a, 0x243f: 0xe000001f, + // Block 0x91, offset 0x2440 + 0x2440: 0xe0000024, 0x2441: 0xe0000029, 0x2442: 0xe000002e, 0x2443: 0xe0000033, + 0x2444: 0xe0000038, 0x2445: 0xe000003d, 0x2446: 0xe0000042, 0x2447: 0xe0000047, + 0x2448: 0xf0001f04, 0x2449: 0xf0001f04, 0x244a: 0xf0001f04, 0x244b: 0xf0001f04, + 0x244c: 0xf0001f04, 0x244d: 0xf0001f04, 0x244e: 0xf0001f04, 0x244f: 0xf0001f04, + 0x2450: 0xf0001f04, 0x2451: 0xf0000404, 0x2452: 0xf0000404, 0x2453: 0xf0000404, + 0x2454: 0xf0000404, 0x2455: 0xf0000404, 0x2456: 0xf0000404, 0x2457: 0xf0000404, + 0x2458: 0xf0000404, 0x2459: 0xf0000404, 0x245a: 0xf0000404, 0x245b: 0xf0000404, + 0x245c: 0xf0000404, 0x245d: 0xf0000404, 0x245e: 0xf0000404, 0x245f: 0xf0000404, + 0x2460: 0xf0000404, 0x2461: 0xf0000404, 0x2462: 0xf0000404, 0x2463: 0xf0000404, + 0x2464: 0xf0000404, 0x2465: 0xf0000404, 0x2466: 0xf0000404, 0x2467: 0xf0000404, + 0x2468: 0xf0000404, 0x2469: 0xf0000404, 0x246a: 0xf0000404, 0x246b: 0xf0000404, + 0x246c: 0xf0000404, 0x246d: 0xf0000404, 0x246e: 0xf0000404, 0x246f: 0xf0000404, + 0x2470: 0xf0000404, 0x2471: 0xf0000404, 0x2472: 0xf0000404, 0x2473: 0xf0000404, + 0x2474: 0xf0000404, 0x2475: 0xf0000404, 0x2476: 0x002bde8c, 0x2477: 0x002c0a8c, + 0x2478: 0x002c3a8c, 0x2479: 0x002c628c, 0x247a: 0x002c988c, 0x247b: 0x002d088c, + 0x247c: 0x002d228c, 0x247d: 0x002d688c, 0x247e: 0x002d9a8c, 0x247f: 0x002dcc8c, + // Block 0x92, offset 0x2480 + 0x2480: 0x002dfe8c, 0x2481: 0x002e228c, 0x2482: 0x002e828c, 0x2483: 0x002e9e8c, + 0x2484: 0x002ee28c, 0x2485: 0x002f2c8c, 0x2486: 0x002f568c, 0x2487: 0x002f7a8c, + 0x2488: 0x002fe68c, 0x2489: 0x00302c8c, 0x248a: 0x00306c8c, 0x248b: 0x0030be8c, + 0x248c: 0x0030e28c, 0x248d: 0x0030f68c, 0x248e: 0x0031008c, 0x248f: 0x00312a8c, + 0x2490: 0x002bde86, 0x2491: 0x002c0a86, 0x2492: 0x002c3a86, 0x2493: 0x002c6286, + 0x2494: 0x002c9886, 0x2495: 0x002d0886, 0x2496: 0x002d2286, 0x2497: 0x002d6886, + 0x2498: 0x002d9a86, 0x2499: 0x002dcc86, 0x249a: 0x002dfe86, 0x249b: 0x002e2286, + 0x249c: 0x002e8286, 0x249d: 0x002e9e86, 0x249e: 0x002ee286, 0x249f: 0x002f2c86, + 0x24a0: 0x002f5686, 0x24a1: 0x002f7a86, 0x24a2: 0x002fe686, 0x24a3: 0x00302c86, + 0x24a4: 0x00306c86, 0x24a5: 0x0030be86, 0x24a6: 0x0030e286, 0x24a7: 0x0030f686, + 0x24a8: 0x00310086, 0x24a9: 0x00312a86, 0x24aa: 0x0029cc86, 0x24ab: 0xe00002e6, + 0x24ac: 0xe00002e9, 0x24ad: 0xe00002ec, 0x24ae: 0xe00002ef, 0x24af: 0xe00002f2, + 0x24b0: 0xe00002f5, 0x24b1: 0xe00002f8, 0x24b2: 0xe00002fb, 0x24b3: 0xe00002fe, + 0x24b4: 0xe00003d5, 0x24b5: 0x0029ce86, 0x24b6: 0x0029d086, 0x24b7: 0x0029d286, + 0x24b8: 0x0029d486, 0x24b9: 0x0029d686, 0x24ba: 0x0029d886, 0x24bb: 0x0029da86, + 0x24bc: 0x0029dc86, 0x24bd: 0x0029de86, 0x24be: 0xe00002d7, 0x24bf: 0x0029cc86, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x400d2e20, 0x24c1: 0x400d3020, 0x24c2: 0x400d3220, 0x24c3: 0x400d3420, + 0x24c4: 0x400d3620, 0x24c5: 0x400d3820, 0x24c6: 0x400d3a20, 0x24c7: 0x400d3c20, + 0x24c8: 0x400d3e20, 0x24c9: 0x400d4020, 0x24ca: 0x400d4220, 0x24cb: 0x400d4420, + 0x24cc: 0x400d4620, 0x24cd: 0x400d4820, 0x24ce: 0x400d4a20, 0x24cf: 0x400d4c20, + 0x24d0: 0x400d4e20, 0x24d1: 0x400d5020, 0x24d2: 0x400d5220, 0x24d3: 0x400d5420, + 0x24d4: 0x400d5620, 0x24d5: 0x400d5820, 0x24d6: 0x400d5a20, 0x24d7: 0x400d5c20, + 0x24d8: 0x400d5e20, 0x24d9: 0x400d6020, 0x24da: 0x400d6220, 0x24db: 0x400d6420, + 0x24dc: 0x400d6620, 0x24dd: 0x400d6820, 0x24de: 0x400d6a20, 0x24df: 0x400d6c20, + 0x24e0: 0x400d6e20, 0x24e1: 0x400d7020, 0x24e2: 0x400d7220, 0x24e3: 0x400d7420, + 0x24e4: 0x400d7620, 0x24e5: 0x400d7820, 0x24e6: 0x400d7a20, 0x24e7: 0x400d7c20, + 0x24e8: 0x400d7e20, 0x24e9: 0x400d8020, 0x24ea: 0x400d8220, 0x24eb: 0x400d8420, + 0x24ec: 0x400d8620, 0x24ed: 0x400d8820, 0x24ee: 0x400d8a20, 0x24ef: 0x400d8c20, + 0x24f0: 0x400d8e20, 0x24f1: 0x400d9020, 0x24f2: 0x400d9220, 0x24f3: 0x400d9420, + 0x24f4: 0x400d9620, 0x24f5: 0x400d9820, 0x24f6: 0x400d9a20, 0x24f7: 0x400d9c20, + 0x24f8: 0x400d9e20, 0x24f9: 0x400da020, 0x24fa: 0x400da220, 0x24fb: 0x400da420, + 0x24fc: 0x400da620, 0x24fd: 0x400da820, 0x24fe: 0x400daa20, 0x24ff: 0x400dac20, + // Block 0x94, offset 0x2500 + 0x2500: 0x400dae20, 0x2501: 0x400db020, 0x2502: 0x400db220, 0x2503: 0x400db420, + 0x2504: 0x400db620, 0x2505: 0x400db820, 0x2506: 0x400dba20, 0x2507: 0x400dbc20, + 0x2508: 0x400dbe20, 0x2509: 0x400dc020, 0x250a: 0x400dc220, 0x250b: 0x400dc420, + 0x250c: 0x400dc620, 0x250d: 0x400dc820, 0x250e: 0x400dca20, 0x250f: 0x400dcc20, + 0x2510: 0x400dce20, 0x2511: 0x400dd020, 0x2512: 0x400dd220, 0x2513: 0x400dd420, + 0x2514: 0x400dd620, 0x2515: 0x400dd820, 0x2516: 0x400dda20, 0x2517: 0x400ddc20, + 0x2518: 0x400dde20, 0x2519: 0x400de020, 0x251a: 0x400de220, 0x251b: 0x400de420, + 0x251c: 0x400de620, 0x251d: 0x400de820, 0x251e: 0x400dea20, 0x251f: 0x400dec20, + 0x2520: 0x400dee20, 0x2521: 0x400df020, 0x2522: 0x400df220, 0x2523: 0x400df420, + 0x2524: 0x400df620, 0x2525: 0x400df820, 0x2526: 0x400dfa20, 0x2527: 0x400dfc20, + 0x2528: 0x400dfe20, 0x2529: 0x400e0020, 0x252a: 0x400e0220, 0x252b: 0x400e0420, + 0x252c: 0x400e0620, 0x252d: 0x400e0820, 0x252e: 0x400e0a20, 0x252f: 0x400e0c20, + 0x2530: 0x400e0e20, 0x2531: 0x400e1020, 0x2532: 0x400e1220, 0x2533: 0x400e1420, + 0x2534: 0x400e1620, 0x2535: 0x400e1820, 0x2536: 0x400e1a20, 0x2537: 0x400e1c20, + 0x2538: 0x400e1e20, 0x2539: 0x400e2020, 0x253a: 0x400e2220, 0x253b: 0x400e2420, + 0x253c: 0x400e2620, 0x253d: 0x400e2820, 0x253e: 0x400e2a20, 0x253f: 0x400e2c20, + // Block 0x95, offset 0x2540 + 0x2540: 0x400e2e20, 0x2541: 0x400e3020, 0x2542: 0x400e3220, 0x2543: 0x400e3420, + 0x2544: 0x400e3620, 0x2545: 0x400e3820, 0x2546: 0x400e3a20, 0x2547: 0x400e3c20, + 0x2548: 0x400e3e20, 0x2549: 0x400e4020, 0x254a: 0x400e4220, 0x254b: 0x400e4420, + 0x254c: 0x400e4620, 0x254d: 0x400e4820, 0x254e: 0x400e4a20, 0x254f: 0x400e4c20, + 0x2550: 0x400e4e20, 0x2551: 0x400e5020, 0x2552: 0x400e5220, 0x2553: 0x400e5420, + 0x2554: 0x400e5620, 0x2555: 0x400e5820, 0x2556: 0x400e5a20, 0x2557: 0x400e5c20, + 0x2558: 0x400e5e20, 0x2559: 0x400e6020, 0x255a: 0x400e6220, 0x255b: 0x400e6420, + 0x255c: 0x400e6620, 0x255d: 0x400e6820, 0x255e: 0x400e6a20, 0x255f: 0x400e6c20, + 0x2560: 0x400e6e20, 0x2561: 0x400e7020, 0x2562: 0x400e7220, 0x2563: 0x400e7420, + 0x2564: 0x400e7620, 0x2565: 0x400e7820, 0x2566: 0x400e7a20, 0x2567: 0x400e7c20, + 0x2568: 0x400e7e20, 0x2569: 0x400e8020, 0x256a: 0x400e8220, 0x256b: 0x400e8420, + 0x256c: 0x400e8620, 0x256d: 0x400e8820, 0x256e: 0x400e8a20, 0x256f: 0x400e8c20, + 0x2570: 0x400e8e20, 0x2571: 0x400e9020, 0x2572: 0x400e9220, 0x2573: 0x400e9420, + 0x2574: 0x400e9620, 0x2575: 0x400e9820, 0x2576: 0x400e9a20, 0x2577: 0x400e9c20, + 0x2578: 0x400e9e20, 0x2579: 0x400ea020, 0x257a: 0x400ea220, 0x257b: 0x400ea420, + 0x257c: 0x400ea620, 0x257d: 0x400ea820, 0x257e: 0x400eaa20, 0x257f: 0x400eac20, + // Block 0x96, offset 0x2580 + 0x2580: 0x400eae20, 0x2581: 0x400eb020, 0x2582: 0x400eb220, 0x2583: 0x400eb420, + 0x2584: 0x400eb620, 0x2585: 0x400eb820, 0x2586: 0x400eba20, 0x2587: 0x400ebc20, + 0x2588: 0x400ebe20, 0x2589: 0x400ec020, 0x258a: 0x400ec220, 0x258b: 0x400ec420, + 0x258c: 0x400ec620, 0x258d: 0x400ec820, 0x258e: 0x400eca20, 0x258f: 0x400ecc20, + 0x2590: 0x400ece20, 0x2591: 0x400ed020, 0x2592: 0x400ed220, 0x2593: 0x400ed420, + 0x2594: 0x400ed620, 0x2595: 0x400ed820, 0x2596: 0x400eda20, 0x2597: 0x400edc20, + 0x2598: 0x400ede20, 0x2599: 0x400ee020, 0x259a: 0x400ee220, 0x259b: 0x400ee420, + 0x259c: 0x400ee620, 0x259d: 0x400ee820, 0x259e: 0x400eea20, 0x259f: 0x400eec20, + 0x25a0: 0x400eee20, 0x25a1: 0x400ef020, 0x25a2: 0x400ef220, 0x25a3: 0x400ef420, + 0x25a4: 0x400ef620, 0x25a5: 0x400ef820, 0x25a6: 0x400efa20, 0x25a7: 0x400efc20, + 0x25a8: 0x400efe20, 0x25a9: 0x400f0020, 0x25aa: 0x400f0220, 0x25ab: 0x400f0420, + 0x25ac: 0x400f0620, 0x25ad: 0x400f0820, 0x25ae: 0x400f0a20, 0x25af: 0x400f0c20, + 0x25b0: 0x400f0e20, 0x25b1: 0x400f1020, 0x25b2: 0x400f1220, 0x25b3: 0x400f1420, + 0x25b4: 0x400f1620, 0x25b5: 0x400f1820, 0x25b6: 0x400f1a20, 0x25b7: 0x400f1c20, + 0x25b8: 0x400f1e20, 0x25b9: 0x400f2020, 0x25ba: 0x400f2220, 0x25bb: 0x400f2420, + 0x25bc: 0x400f2620, 0x25bd: 0x400f2820, 0x25be: 0x400f2a20, 0x25bf: 0x400f2c20, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x400f2e20, 0x25c1: 0x400f3020, 0x25c2: 0x400f3220, 0x25c3: 0x400f3420, + 0x25c4: 0x400f3620, 0x25c5: 0x400f3820, 0x25c6: 0x400f3a20, 0x25c7: 0x400f3c20, + 0x25c8: 0x400f3e20, 0x25c9: 0x400f4020, 0x25ca: 0x400f4220, 0x25cb: 0x400f4420, + 0x25cc: 0x400f4620, 0x25cd: 0x400f4820, 0x25ce: 0x400f4a20, 0x25cf: 0x400f4c20, + 0x25d0: 0x400f4e20, 0x25d1: 0x400f5020, 0x25d2: 0x400f5220, 0x25d3: 0x400f5420, + 0x25d4: 0x400f5620, 0x25d5: 0x400f5820, 0x25d6: 0x400f5a20, 0x25d7: 0x400f5c20, + 0x25d8: 0x400f5e20, 0x25d9: 0x400f6020, 0x25da: 0x400f6220, 0x25db: 0x400f6420, + 0x25dc: 0x400f6620, 0x25dd: 0x400f6820, 0x25de: 0x400f6a20, 0x25df: 0x400f6c20, + 0x25e0: 0x400f6e20, 0x25e1: 0x400f7020, 0x25e2: 0x400f7220, 0x25e3: 0x400f7420, + 0x25e4: 0x400f7620, 0x25e5: 0x400f7820, 0x25e6: 0x400f7a20, 0x25e7: 0x400f7c20, + 0x25e8: 0x400f7e20, 0x25e9: 0x400f8020, 0x25ea: 0x400f8220, 0x25eb: 0x400f8420, + 0x25ec: 0x400f8620, 0x25ed: 0x400f8820, 0x25ee: 0x400f8a20, 0x25ef: 0x400f8c20, + 0x25f0: 0x40195220, 0x25f1: 0x40195420, 0x25f2: 0x40195620, 0x25f3: 0x40195820, + 0x25f4: 0x40195a20, 0x25f5: 0x40195c20, 0x25f6: 0x40195e20, 0x25f7: 0x40196020, + 0x25f8: 0x400f8e20, 0x25f9: 0x400f9020, 0x25fa: 0x400f9220, 0x25fb: 0x400f9420, + 0x25fc: 0x400f9620, 0x25fd: 0x400f9820, 0x25fe: 0x400f9a20, 0x25ff: 0x400f9c20, + // Block 0x98, offset 0x2600 + 0x2600: 0x400f9e20, 0x2601: 0x400fa020, 0x2602: 0x400fa220, 0x2603: 0x400fa420, + 0x2604: 0x400fa620, 0x2605: 0x400fa820, 0x2606: 0x400faa20, 0x2607: 0x400fac20, + 0x2608: 0x400fae20, 0x2609: 0x400fb020, 0x260a: 0x400fb220, 0x260b: 0x400fb420, + 0x260c: 0x400fb620, 0x260d: 0x400fb820, 0x260e: 0x400fba20, 0x260f: 0x400fbc20, + 0x2610: 0x400fbe20, 0x2611: 0x400fc020, 0x2612: 0x400fc220, 0x2613: 0x400fc420, + 0x2614: 0x400fc620, 0x2615: 0x400fc820, 0x2616: 0x400fca20, 0x2617: 0x400fcc20, + 0x2618: 0x400fce20, 0x2619: 0x400fd020, 0x261a: 0x400fd220, 0x261b: 0x400fd420, + 0x261c: 0x400fd620, 0x261d: 0x400fd820, 0x261e: 0x400fda20, 0x261f: 0x400fdc20, + 0x2620: 0x400fde20, 0x2621: 0x400fe020, 0x2622: 0x400fe220, 0x2623: 0x400fe420, + 0x2624: 0x400fe620, 0x2625: 0x400fe820, 0x2626: 0x400fea20, 0x2627: 0x400fec20, + 0x2628: 0x400fee20, 0x2629: 0x400ff020, 0x262a: 0x400ff220, 0x262b: 0x400ff420, + 0x262c: 0x400ff620, 0x262d: 0x401dde20, 0x262e: 0x401de020, 0x262f: 0x401de220, + 0x2630: 0x400ff820, 0x2631: 0x400ffa20, 0x2632: 0x400ffc20, 0x2633: 0x400ffe20, + 0x2634: 0x40100020, 0x2635: 0x40100220, 0x2636: 0x40100420, 0x2637: 0x40100620, + 0x2638: 0x40100820, 0x2639: 0x40100a20, 0x263a: 0x40100c20, 0x263b: 0x40100e20, + 0x263c: 0x40101020, 0x263d: 0x40101220, 0x263e: 0x40101420, 0x263f: 0x40101620, + // Block 0x99, offset 0x2640 + 0x2640: 0x40101820, 0x2641: 0x40101a20, 0x2642: 0x40101c20, 0x2643: 0x40101e20, + 0x2644: 0x40102020, 0x2645: 0x40102220, 0x2646: 0x40102420, 0x2647: 0x40102620, + 0x2648: 0x40102820, 0x2649: 0x40102a20, 0x264a: 0x40194620, 0x264b: 0x40194820, + 0x264c: 0x40194a20, 0x264d: 0x40194c20, 0x264e: 0x40194e20, 0x264f: 0x40195020, + 0x2650: 0x40102c20, 0x2651: 0x40102e20, 0x2652: 0x40103020, 0x2653: 0x40103220, + 0x2654: 0x40103420, 0x2655: 0x40103620, 0x2656: 0x40103820, 0x2657: 0x40103a20, + 0x2658: 0x40103c20, 0x2659: 0x40103e20, 0x265a: 0x40104020, 0x265b: 0x40104220, + 0x265c: 0x40104420, 0x265d: 0x40104620, 0x265e: 0x40104820, 0x265f: 0x40104a20, + 0x2660: 0x40104c20, 0x2661: 0x40104e20, 0x2662: 0x40105020, 0x2663: 0x40105220, + 0x2664: 0x40105420, 0x2665: 0x40105620, 0x2666: 0x40105820, 0x2667: 0x40105a20, + 0x2668: 0x40105c20, 0x2669: 0x40105e20, 0x266a: 0x40106020, 0x266b: 0x40106220, + 0x266c: 0x40106420, 0x266d: 0x40106620, 0x266e: 0x40106820, 0x266f: 0x40106a20, + 0x2670: 0x40106c20, 0x2671: 0x40106e20, 0x2672: 0x40107020, 0x2673: 0x40107220, + 0x2674: 0x40107420, 0x2675: 0x40107620, 0x2676: 0x40107820, 0x2677: 0x40107a20, + 0x2678: 0x40107c20, 0x2679: 0x40107e20, 0x267a: 0x40108020, 0x267b: 0x40108220, + 0x267c: 0x40108420, 0x267d: 0x40108620, 0x267e: 0x40108820, 0x267f: 0x40108a20, + // Block 0x9a, offset 0x2680 + 0x2680: 0x40108c20, 0x2681: 0x40108e20, 0x2682: 0x40109020, 0x2683: 0x40109220, + 0x2684: 0x40109420, 0x2685: 0x40109620, 0x2686: 0x40109820, 0x2687: 0x40109a20, + 0x2688: 0x40109c20, 0x2689: 0x40109e20, 0x268a: 0x4010a020, 0x268b: 0x4010a220, + 0x268c: 0x4010a420, 0x268d: 0x4010a620, 0x268e: 0x4010a820, 0x268f: 0x4010aa20, + 0x2690: 0x4010ac20, 0x2691: 0x4010ae20, 0x2692: 0x4010b020, 0x2693: 0x4010b220, + 0x2694: 0x4010b420, 0x2695: 0x4010b620, 0x2696: 0x4010b820, 0x2697: 0x4010ba20, + 0x2698: 0x4010bc20, 0x2699: 0x4010be20, 0x269a: 0x4010c020, 0x269b: 0x4010c220, + 0x269c: 0x4010c420, 0x269d: 0x4010c620, 0x269e: 0x4010c820, 0x269f: 0x4010ca20, + 0x26a0: 0x4010cc20, 0x26a1: 0x4010ce20, 0x26a2: 0x4010d020, 0x26a3: 0x4010d220, + 0x26a4: 0x4010d420, 0x26a5: 0x4010d620, 0x26a6: 0x4010d820, 0x26a7: 0x4010da20, + 0x26a8: 0x4010dc20, 0x26a9: 0x4010de20, 0x26aa: 0x4010e020, 0x26ab: 0x4010e220, + 0x26ac: 0x4010e420, 0x26ad: 0x4010e620, 0x26ae: 0x4010e820, 0x26af: 0x4010ea20, + 0x26b0: 0x4010ec20, 0x26b1: 0x4010ee20, 0x26b2: 0x4010f020, 0x26b3: 0x4010f220, + 0x26b4: 0x4010f420, 0x26b5: 0x4010f620, 0x26b6: 0x4010f820, 0x26b7: 0x4010fa20, + 0x26b8: 0x4010fc20, 0x26b9: 0x4010fe20, 0x26ba: 0x40110020, 0x26bb: 0x40110220, + 0x26bc: 0x40110420, 0x26bd: 0x40110620, 0x26be: 0x40110820, 0x26bf: 0x40110a20, + // Block 0x9b, offset 0x26c0 + 0x26c1: 0x40114020, 0x26c2: 0x40114220, 0x26c3: 0x40114420, + 0x26c4: 0x40114620, 0x26c5: 0x40114820, 0x26c6: 0x40114a20, 0x26c7: 0x40114c20, + 0x26c8: 0x40114e20, 0x26c9: 0x40115020, 0x26ca: 0x40115220, 0x26cb: 0x40115420, + 0x26cc: 0x40115620, 0x26cd: 0x40115820, 0x26ce: 0x40115a20, 0x26cf: 0x40115c20, + 0x26d0: 0x40115e20, 0x26d1: 0x40116020, 0x26d2: 0x40116220, 0x26d3: 0x40116420, + 0x26d4: 0x40116620, 0x26d5: 0x40116820, 0x26d6: 0x40116a20, 0x26d7: 0x40116c20, + 0x26d8: 0x40116e20, 0x26d9: 0x40117020, 0x26da: 0x40117220, 0x26db: 0x40117420, + 0x26dc: 0x40117620, 0x26dd: 0x40117820, 0x26de: 0x40117a20, 0x26df: 0x40117c20, + 0x26e0: 0x40117e20, 0x26e1: 0x40118020, 0x26e2: 0x40118220, 0x26e3: 0x40118420, + 0x26e4: 0x40118620, 0x26e5: 0x40118820, 0x26e6: 0x40118a20, 0x26e7: 0x40118c20, + 0x26e8: 0x40118e20, 0x26e9: 0x40119020, 0x26ea: 0x40119220, 0x26eb: 0x40119420, + 0x26ec: 0x40119620, 0x26ed: 0x40119820, 0x26ee: 0x40119a20, 0x26ef: 0x40119c20, + 0x26f0: 0x40119e20, 0x26f1: 0x4011a020, 0x26f2: 0x4011a220, 0x26f3: 0x4011a420, + 0x26f4: 0x4011a620, 0x26f5: 0x4011a820, 0x26f6: 0x4011aa20, 0x26f7: 0x4011ac20, + 0x26f8: 0x4011ae20, 0x26f9: 0x4011b020, 0x26fa: 0x4011b220, 0x26fb: 0x4011b420, + 0x26fc: 0x4011b620, 0x26fd: 0x4011b820, 0x26fe: 0x4011ba20, 0x26ff: 0x4011bc20, + // Block 0x9c, offset 0x2700 + 0x2700: 0x4011be20, 0x2701: 0x4011c020, 0x2702: 0x4011c220, 0x2703: 0x4011c420, + 0x2704: 0x4011c620, 0x2705: 0x4011c820, 0x2706: 0x4011ca20, 0x2707: 0x4011cc20, + 0x2708: 0x4011ce20, 0x2709: 0x4011d020, 0x270a: 0x4011d220, 0x270b: 0x4011d420, + 0x270c: 0x4011d620, 0x270d: 0x4011d820, 0x270e: 0x4011da20, 0x270f: 0x4011dc20, + 0x2710: 0x4011de20, 0x2711: 0x4011e020, 0x2712: 0x4011e220, 0x2713: 0x4011e420, + 0x2714: 0x4011e620, 0x2715: 0x4011e820, 0x2716: 0x4011ea20, 0x2717: 0x4011ec20, + 0x2718: 0x4011ee20, 0x2719: 0x4011f020, 0x271a: 0x4011f220, 0x271b: 0x4011f420, + 0x271c: 0x4011f620, 0x271d: 0x4011f820, 0x271e: 0x4011fa20, 0x271f: 0x4011fc20, + 0x2720: 0x4011fe20, 0x2721: 0x40120020, 0x2722: 0x40120220, 0x2723: 0x40120420, + 0x2724: 0x40120620, 0x2725: 0x40120820, 0x2726: 0x40120a20, 0x2727: 0x40120c20, + 0x2728: 0x40045820, 0x2729: 0x40045a20, 0x272a: 0x40045c20, 0x272b: 0x40045e20, + 0x272c: 0x40046020, 0x272d: 0x40046220, 0x272e: 0x40046420, 0x272f: 0x40046620, + 0x2730: 0x40046820, 0x2731: 0x40046a20, 0x2732: 0x40046c20, 0x2733: 0x40046e20, + 0x2734: 0x40047020, 0x2735: 0x40047220, 0x2736: 0x0029ce86, 0x2737: 0x0029d086, + 0x2738: 0x0029d286, 0x2739: 0x0029d486, 0x273a: 0x0029d686, 0x273b: 0x0029d886, + 0x273c: 0x0029da86, 0x273d: 0x0029dc86, 0x273e: 0x0029de86, 0x273f: 0xe00002da, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0029ce86, 0x2741: 0x0029d086, 0x2742: 0x0029d286, 0x2743: 0x0029d486, + 0x2744: 0x0029d686, 0x2745: 0x0029d886, 0x2746: 0x0029da86, 0x2747: 0x0029dc86, + 0x2748: 0x0029de86, 0x2749: 0xe00002dd, 0x274a: 0x0029ce86, 0x274b: 0x0029d086, + 0x274c: 0x0029d286, 0x274d: 0x0029d486, 0x274e: 0x0029d686, 0x274f: 0x0029d886, + 0x2750: 0x0029da86, 0x2751: 0x0029dc86, 0x2752: 0x0029de86, 0x2753: 0xe00002e0, + 0x2754: 0x40120e20, 0x2755: 0x40121020, 0x2756: 0x40121220, 0x2757: 0x40121420, + 0x2758: 0x40121620, 0x2759: 0x40121820, 0x275a: 0x40121a20, 0x275b: 0x40121c20, + 0x275c: 0x40121e20, 0x275d: 0x40122020, 0x275e: 0x40122220, 0x275f: 0x40122420, + 0x2760: 0x40122620, 0x2761: 0x40122820, 0x2762: 0x40122a20, 0x2763: 0x40122c20, + 0x2764: 0x40122e20, 0x2765: 0x40123020, 0x2766: 0x40123220, 0x2767: 0x40123420, + 0x2768: 0x40123620, 0x2769: 0x40123820, 0x276a: 0x40123a20, 0x276b: 0x40123c20, + 0x276c: 0x40123e20, 0x276d: 0x40124020, 0x276e: 0x40124220, 0x276f: 0x40124420, + 0x2770: 0x40124620, 0x2771: 0x40124820, 0x2772: 0x40124a20, 0x2773: 0x40124c20, + 0x2774: 0x40124e20, 0x2775: 0x40125020, 0x2776: 0x40125220, 0x2777: 0x40125420, + 0x2778: 0x40125620, 0x2779: 0x40125820, 0x277a: 0x40125a20, 0x277b: 0x40125c20, + 0x277c: 0x40125e20, 0x277d: 0x40126020, 0x277e: 0x40126220, 0x277f: 0x40126420, + // Block 0x9e, offset 0x2780 + 0x2780: 0x40126620, 0x2781: 0x40126820, 0x2782: 0x40126a20, 0x2783: 0x40126c20, + 0x2784: 0x40126e20, 0x2785: 0x40044020, 0x2786: 0x40044220, 0x2787: 0x40127020, + 0x2788: 0x40127220, 0x2789: 0x40127420, 0x278a: 0x40127620, 0x278b: 0x40127820, + 0x278c: 0x40127a20, 0x278d: 0x40127c20, 0x278e: 0x40127e20, 0x278f: 0x40128020, + 0x2790: 0x40128220, 0x2791: 0x40128420, 0x2792: 0x40128620, 0x2793: 0x40128820, + 0x2794: 0x40128a20, 0x2795: 0x40128c20, 0x2796: 0x40128e20, 0x2797: 0x40129020, + 0x2798: 0x40129220, 0x2799: 0x40129420, 0x279a: 0x40129620, 0x279b: 0x40129820, + 0x279c: 0x40129a20, 0x279d: 0x40129c20, 0x279e: 0x40129e20, 0x279f: 0x4012a020, + 0x27a0: 0x4012a220, 0x27a1: 0x4012a420, 0x27a2: 0x4012a620, 0x27a3: 0x4012a820, + 0x27a4: 0x4012aa20, 0x27a5: 0x4012ac20, 0x27a6: 0x40044420, 0x27a7: 0x40044620, + 0x27a8: 0x40044820, 0x27a9: 0x40044a20, 0x27aa: 0x40044c20, 0x27ab: 0x40044e20, + 0x27ac: 0x40045020, 0x27ad: 0x40045220, 0x27ae: 0x40045420, 0x27af: 0x40045620, + 0x27b0: 0x4012ae20, 0x27b1: 0x4012b020, 0x27b2: 0x4012b220, 0x27b3: 0x4012b420, + 0x27b4: 0x4012b620, 0x27b5: 0x4012b820, 0x27b6: 0x4012ba20, 0x27b7: 0x4012bc20, + 0x27b8: 0x4012be20, 0x27b9: 0x4012c020, 0x27ba: 0x4012c220, 0x27bb: 0x4012c420, + 0x27bc: 0x4012c620, 0x27bd: 0x4012c820, 0x27be: 0x4012ca20, 0x27bf: 0x4012cc20, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x40174620, 0x27c1: 0x40174820, 0x27c2: 0x40174a20, 0x27c3: 0x40174c20, + 0x27c4: 0x40174e20, 0x27c5: 0x40175020, 0x27c6: 0x40175220, 0x27c7: 0x40175420, + 0x27c8: 0x40175620, 0x27c9: 0x40175820, 0x27ca: 0x40175a20, 0x27cb: 0x40175c20, + 0x27cc: 0x40175e20, 0x27cd: 0x40176020, 0x27ce: 0x40176220, 0x27cf: 0x40176420, + 0x27d0: 0x40176620, 0x27d1: 0x40176820, 0x27d2: 0x40176a20, 0x27d3: 0x40176c20, + 0x27d4: 0x40176e20, 0x27d5: 0x40177020, 0x27d6: 0x40177220, 0x27d7: 0x40177420, + 0x27d8: 0x40177620, 0x27d9: 0x40177820, 0x27da: 0x40177a20, 0x27db: 0x40177c20, + 0x27dc: 0x40177e20, 0x27dd: 0x40178020, 0x27de: 0x40178220, 0x27df: 0x40178420, + 0x27e0: 0x40178620, 0x27e1: 0x40178820, 0x27e2: 0x40178a20, 0x27e3: 0x40178c20, + 0x27e4: 0x40178e20, 0x27e5: 0x40179020, 0x27e6: 0x40179220, 0x27e7: 0x40179420, + 0x27e8: 0x40179620, 0x27e9: 0x40179820, 0x27ea: 0x40179a20, 0x27eb: 0x40179c20, + 0x27ec: 0x40179e20, 0x27ed: 0x4017a020, 0x27ee: 0x4017a220, 0x27ef: 0x4017a420, + 0x27f0: 0x4017a620, 0x27f1: 0x4017a820, 0x27f2: 0x4017aa20, 0x27f3: 0x4017ac20, + 0x27f4: 0x4017ae20, 0x27f5: 0x4017b020, 0x27f6: 0x4017b220, 0x27f7: 0x4017b420, + 0x27f8: 0x4017b620, 0x27f9: 0x4017b820, 0x27fa: 0x4017ba20, 0x27fb: 0x4017bc20, + 0x27fc: 0x4017be20, 0x27fd: 0x4017c020, 0x27fe: 0x4017c220, 0x27ff: 0x4017c420, + // Block 0xa0, offset 0x2800 + 0x2800: 0x4017c620, 0x2801: 0x4017c820, 0x2802: 0x4017ca20, 0x2803: 0x4017cc20, + 0x2804: 0x4017ce20, 0x2805: 0x4017d020, 0x2806: 0x4017d220, 0x2807: 0x4017d420, + 0x2808: 0x4017d620, 0x2809: 0x4017d820, 0x280a: 0x4017da20, 0x280b: 0x4017dc20, + 0x280c: 0x4017de20, 0x280d: 0x4017e020, 0x280e: 0x4017e220, 0x280f: 0x4017e420, + 0x2810: 0x4017e620, 0x2811: 0x4017e820, 0x2812: 0x4017ea20, 0x2813: 0x4017ec20, + 0x2814: 0x4017ee20, 0x2815: 0x4017f020, 0x2816: 0x4017f220, 0x2817: 0x4017f420, + 0x2818: 0x4017f620, 0x2819: 0x4017f820, 0x281a: 0x4017fa20, 0x281b: 0x4017fc20, + 0x281c: 0x4017fe20, 0x281d: 0x40180020, 0x281e: 0x40180220, 0x281f: 0x40180420, + 0x2820: 0x40180620, 0x2821: 0x40180820, 0x2822: 0x40180a20, 0x2823: 0x40180c20, + 0x2824: 0x40180e20, 0x2825: 0x40181020, 0x2826: 0x40181220, 0x2827: 0x40181420, + 0x2828: 0x40181620, 0x2829: 0x40181820, 0x282a: 0x40181a20, 0x282b: 0x40181c20, + 0x282c: 0x40181e20, 0x282d: 0x40182020, 0x282e: 0x40182220, 0x282f: 0x40182420, + 0x2830: 0x40182620, 0x2831: 0x40182820, 0x2832: 0x40182a20, 0x2833: 0x40182c20, + 0x2834: 0x40182e20, 0x2835: 0x40183020, 0x2836: 0x40183220, 0x2837: 0x40183420, + 0x2838: 0x40183620, 0x2839: 0x40183820, 0x283a: 0x40183a20, 0x283b: 0x40183c20, + 0x283c: 0x40183e20, 0x283d: 0x40184020, 0x283e: 0x40184220, 0x283f: 0x40184420, + // Block 0xa1, offset 0x2840 + 0x2840: 0x40184620, 0x2841: 0x40184820, 0x2842: 0x40184a20, 0x2843: 0x40184c20, + 0x2844: 0x40184e20, 0x2845: 0x40185020, 0x2846: 0x40185220, 0x2847: 0x40185420, + 0x2848: 0x40185620, 0x2849: 0x40185820, 0x284a: 0x40185a20, 0x284b: 0x40185c20, + 0x284c: 0x40185e20, 0x284d: 0x40186020, 0x284e: 0x40186220, 0x284f: 0x40186420, + 0x2850: 0x40186620, 0x2851: 0x40186820, 0x2852: 0x40186a20, 0x2853: 0x40186c20, + 0x2854: 0x40186e20, 0x2855: 0x40187020, 0x2856: 0x40187220, 0x2857: 0x40187420, + 0x2858: 0x40187620, 0x2859: 0x40187820, 0x285a: 0x40187a20, 0x285b: 0x40187c20, + 0x285c: 0x40187e20, 0x285d: 0x40188020, 0x285e: 0x40188220, 0x285f: 0x40188420, + 0x2860: 0x40188620, 0x2861: 0x40188820, 0x2862: 0x40188a20, 0x2863: 0x40188c20, + 0x2864: 0x40188e20, 0x2865: 0x40189020, 0x2866: 0x40189220, 0x2867: 0x40189420, + 0x2868: 0x40189620, 0x2869: 0x40189820, 0x286a: 0x40189a20, 0x286b: 0x40189c20, + 0x286c: 0x40189e20, 0x286d: 0x4018a020, 0x286e: 0x4018a220, 0x286f: 0x4018a420, + 0x2870: 0x4018a620, 0x2871: 0x4018a820, 0x2872: 0x4018aa20, 0x2873: 0x4018ac20, + 0x2874: 0x4018ae20, 0x2875: 0x4018b020, 0x2876: 0x4018b220, 0x2877: 0x4018b420, + 0x2878: 0x4018b620, 0x2879: 0x4018b820, 0x287a: 0x4018ba20, 0x287b: 0x4018bc20, + 0x287c: 0x4018be20, 0x287d: 0x4018c020, 0x287e: 0x4018c220, 0x287f: 0x4018c420, + // Block 0xa2, offset 0x2880 + 0x2880: 0x4018c620, 0x2881: 0x4018c820, 0x2882: 0x4018ca20, 0x2883: 0x4018cc20, + 0x2884: 0x4018ce20, 0x2885: 0x4018d020, 0x2886: 0x4018d220, 0x2887: 0x4018d420, + 0x2888: 0x4018d620, 0x2889: 0x4018d820, 0x288a: 0x4018da20, 0x288b: 0x4018dc20, + 0x288c: 0x4018de20, 0x288d: 0x4018e020, 0x288e: 0x4018e220, 0x288f: 0x4018e420, + 0x2890: 0x4018e620, 0x2891: 0x4018e820, 0x2892: 0x4018ea20, 0x2893: 0x4018ec20, + 0x2894: 0x4018ee20, 0x2895: 0x4018f020, 0x2896: 0x4018f220, 0x2897: 0x4018f420, + 0x2898: 0x4018f620, 0x2899: 0x4018f820, 0x289a: 0x4018fa20, 0x289b: 0x4018fc20, + 0x289c: 0x4018fe20, 0x289d: 0x40190020, 0x289e: 0x40190220, 0x289f: 0x40190420, + 0x28a0: 0x40190620, 0x28a1: 0x40190820, 0x28a2: 0x40190a20, 0x28a3: 0x40190c20, + 0x28a4: 0x40190e20, 0x28a5: 0x40191020, 0x28a6: 0x40191220, 0x28a7: 0x40191420, + 0x28a8: 0x40191620, 0x28a9: 0x40191820, 0x28aa: 0x40191a20, 0x28ab: 0x40191c20, + 0x28ac: 0x40191e20, 0x28ad: 0x40192020, 0x28ae: 0x40192220, 0x28af: 0x40192420, + 0x28b0: 0x40192620, 0x28b1: 0x40192820, 0x28b2: 0x40192a20, 0x28b3: 0x40192c20, + 0x28b4: 0x40192e20, 0x28b5: 0x40193020, 0x28b6: 0x40193220, 0x28b7: 0x40193420, + 0x28b8: 0x40193620, 0x28b9: 0x40193820, 0x28ba: 0x40193a20, 0x28bb: 0x40193c20, + 0x28bc: 0x40193e20, 0x28bd: 0x40194020, 0x28be: 0x40194220, 0x28bf: 0x40194420, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x4012ce20, 0x28c1: 0x4012d020, 0x28c2: 0x4012d220, 0x28c3: 0x4012d420, + 0x28c4: 0x4012d620, 0x28c5: 0x4012d820, 0x28c6: 0x4012da20, 0x28c7: 0x4012dc20, + 0x28c8: 0x4012de20, 0x28c9: 0x4012e020, 0x28ca: 0x4012e220, 0x28cb: 0x4012e420, + 0x28cc: 0x4012e620, 0x28cd: 0x4012e820, 0x28ce: 0x4012ea20, 0x28cf: 0x4012ec20, + 0x28d0: 0x4012ee20, 0x28d1: 0x4012f020, 0x28d2: 0x4012f220, 0x28d3: 0x4012f420, + 0x28d4: 0x4012f620, 0x28d5: 0x4012f820, 0x28d6: 0x4012fa20, 0x28d7: 0x4012fc20, + 0x28d8: 0x4012fe20, 0x28d9: 0x40130020, 0x28da: 0x40130220, 0x28db: 0x40130420, + 0x28dc: 0x40130620, 0x28dd: 0x40130820, 0x28de: 0x40130a20, 0x28df: 0x40130c20, + 0x28e0: 0x40130e20, 0x28e1: 0x40131020, 0x28e2: 0x40131220, 0x28e3: 0x40131420, + 0x28e4: 0x40131620, 0x28e5: 0x40131820, 0x28e6: 0x40131a20, 0x28e7: 0x40131c20, + 0x28e8: 0x40131e20, 0x28e9: 0x40132020, 0x28ea: 0x40132220, 0x28eb: 0x40132420, + 0x28ec: 0x40132620, 0x28ed: 0x40132820, 0x28ee: 0x40132a20, 0x28ef: 0x40132c20, + 0x28f0: 0x40132e20, 0x28f1: 0x40133020, 0x28f2: 0x40133220, 0x28f3: 0x40133420, + 0x28f4: 0x40133620, 0x28f5: 0x40133820, 0x28f6: 0x40133a20, 0x28f7: 0x40133c20, + 0x28f8: 0x40133e20, 0x28f9: 0x40134020, 0x28fa: 0x40134220, 0x28fb: 0x40134420, + 0x28fc: 0x40134620, 0x28fd: 0x40134820, 0x28fe: 0x40134a20, 0x28ff: 0x40134c20, + // Block 0xa4, offset 0x2900 + 0x2900: 0x40134e20, 0x2901: 0x40135020, 0x2902: 0x40135220, 0x2903: 0x40135420, + 0x2904: 0x40135620, 0x2905: 0x40135820, 0x2906: 0x40135a20, 0x2907: 0x40135c20, + 0x2908: 0x40135e20, 0x2909: 0x40136020, 0x290a: 0x40136220, 0x290b: 0x40136420, + 0x290c: 0x40136620, 0x290d: 0x40136820, 0x290e: 0x40136a20, 0x290f: 0x40136c20, + 0x2910: 0x40136e20, 0x2911: 0x40137020, 0x2912: 0x40137220, 0x2913: 0x40137420, + 0x2914: 0x40137620, 0x2915: 0x40137820, 0x2916: 0x40137a20, 0x2917: 0x40137c20, + 0x2918: 0x40137e20, 0x2919: 0x40138020, 0x291a: 0x40138220, 0x291b: 0x40138420, + 0x291c: 0x40138620, 0x291d: 0x40138820, 0x291e: 0x40138a20, 0x291f: 0x40138c20, + 0x2920: 0x40138e20, 0x2921: 0x40139020, 0x2922: 0x40139220, 0x2923: 0x40139420, + 0x2924: 0x40139620, 0x2925: 0x40139820, 0x2926: 0x40139a20, 0x2927: 0x40139c20, + 0x2928: 0x40139e20, 0x2929: 0x4013a020, 0x292a: 0x4013a220, 0x292b: 0x4013a420, + 0x292c: 0x4013a620, 0x292d: 0x4013a820, 0x292e: 0x4013aa20, 0x292f: 0x4013ac20, + 0x2930: 0x4013ae20, 0x2931: 0x4013b020, 0x2932: 0x4013b220, 0x2933: 0x4013b420, + 0x2934: 0x4013b620, 0x2935: 0x4013b820, 0x2936: 0x4013ba20, 0x2937: 0x4013bc20, + 0x2938: 0x4013be20, 0x2939: 0x4013c020, 0x293a: 0x4013c220, 0x293b: 0x4013c420, + 0x293c: 0x4013c620, 0x293d: 0x4013c820, 0x293e: 0x4013ca20, 0x293f: 0x4013cc20, + // Block 0xa5, offset 0x2940 + 0x2940: 0x4013ce20, 0x2941: 0x4013d020, 0x2942: 0x4013d220, 0x2943: 0x40041420, + 0x2944: 0x40041620, 0x2945: 0x40041820, 0x2946: 0x40041a20, 0x2947: 0x40041c20, + 0x2948: 0x40041e20, 0x2949: 0x40042020, 0x294a: 0x40042220, 0x294b: 0x40042420, + 0x294c: 0x40042620, 0x294d: 0x40042820, 0x294e: 0x40042a20, 0x294f: 0x40042c20, + 0x2950: 0x40042e20, 0x2951: 0x40043020, 0x2952: 0x40043220, 0x2953: 0x40043420, + 0x2954: 0x40043620, 0x2955: 0x40043820, 0x2956: 0x40043a20, 0x2957: 0x40043c20, + 0x2958: 0x40043e20, 0x2959: 0x4013d420, 0x295a: 0x4013d620, 0x295b: 0x4013d820, + 0x295c: 0x4013da20, 0x295d: 0x4013dc20, 0x295e: 0x4013de20, 0x295f: 0x4013e020, + 0x2960: 0x4013e220, 0x2961: 0x4013e420, 0x2962: 0x4013e620, 0x2963: 0x4013e820, + 0x2964: 0x4013ea20, 0x2965: 0x4013ec20, 0x2966: 0x4013ee20, 0x2967: 0x4013f020, + 0x2968: 0x4013f220, 0x2969: 0x4013f420, 0x296a: 0x4013f620, 0x296b: 0x4013f820, + 0x296c: 0x4013fa20, 0x296d: 0x4013fc20, 0x296e: 0x4013fe20, 0x296f: 0x40140020, + 0x2970: 0x40140220, 0x2971: 0x40140420, 0x2972: 0x40140620, 0x2973: 0x40140820, + 0x2974: 0x40140a20, 0x2975: 0x40140c20, 0x2976: 0x40140e20, 0x2977: 0x40141020, + 0x2978: 0x40141220, 0x2979: 0x40141420, 0x297a: 0x40141620, 0x297b: 0x40141820, + 0x297c: 0x40141a20, 0x297d: 0x40141c20, 0x297e: 0x40141e20, 0x297f: 0x40142020, + // Block 0xa6, offset 0x2980 + 0x2980: 0x40142220, 0x2981: 0x40142420, 0x2982: 0x40142620, 0x2983: 0x40142820, + 0x2984: 0x40142a20, 0x2985: 0x40142c20, 0x2986: 0x40142e20, 0x2987: 0x40143020, + 0x2988: 0x40143220, 0x2989: 0x40143420, 0x298a: 0x40143620, 0x298b: 0x40143820, + 0x298c: 0x40143a20, 0x298d: 0x40143c20, 0x298e: 0x40143e20, 0x298f: 0x40144020, + 0x2990: 0x40144220, 0x2991: 0x40144420, 0x2992: 0x40144620, 0x2993: 0x40144820, + 0x2994: 0x40144a20, 0x2995: 0x40144c20, 0x2996: 0x40144e20, 0x2997: 0x40145020, + 0x2998: 0x4004c620, 0x2999: 0x4004c820, 0x299a: 0x4004ca20, 0x299b: 0x4004cc20, + 0x299c: 0x40145220, 0x299d: 0x40145420, 0x299e: 0x40145620, 0x299f: 0x40145820, + 0x29a0: 0x40145a20, 0x29a1: 0x40145c20, 0x29a2: 0x40145e20, 0x29a3: 0x40146020, + 0x29a4: 0x40146220, 0x29a5: 0x40146420, 0x29a6: 0x40146620, 0x29a7: 0x40146820, + 0x29a8: 0x40146a20, 0x29a9: 0x40146c20, 0x29aa: 0x40146e20, 0x29ab: 0x40147020, + 0x29ac: 0x40147220, 0x29ad: 0x40147420, 0x29ae: 0x40147620, 0x29af: 0x40147820, + 0x29b0: 0x40147a20, 0x29b1: 0x40147c20, 0x29b2: 0x40147e20, 0x29b3: 0x40148020, + 0x29b4: 0x40148220, 0x29b5: 0x40148420, 0x29b6: 0x40148620, 0x29b7: 0x40148820, + 0x29b8: 0x40148a20, 0x29b9: 0x40148c20, 0x29ba: 0x40148e20, 0x29bb: 0x40149020, + 0x29bc: 0x40041020, 0x29bd: 0x40041220, 0x29be: 0x40149220, 0x29bf: 0x40149420, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x40149620, 0x29c1: 0x40149820, 0x29c2: 0x40149a20, 0x29c3: 0x40149c20, + 0x29c4: 0x40149e20, 0x29c5: 0x4014a020, 0x29c6: 0x4014a220, 0x29c7: 0x4014a420, + 0x29c8: 0x4014a620, 0x29c9: 0x4014a820, 0x29ca: 0x4014aa20, 0x29cb: 0x4014ac20, + 0x29cc: 0xe00000f0, 0x29cd: 0x4014ae20, 0x29ce: 0x4014b020, 0x29cf: 0x4014b220, + 0x29d0: 0x4014b420, 0x29d1: 0x4014b620, 0x29d2: 0x4014b820, 0x29d3: 0x4014ba20, + 0x29d4: 0x4014bc20, 0x29d5: 0x4014be20, 0x29d6: 0x4014c020, 0x29d7: 0x4014c220, + 0x29d8: 0x4014c420, 0x29d9: 0x4014c620, 0x29da: 0x4014c820, 0x29db: 0x4014ca20, + 0x29dc: 0x4014cc20, 0x29dd: 0x4014ce20, 0x29de: 0x4014d020, 0x29df: 0x4014d220, + 0x29e0: 0x4014d420, 0x29e1: 0x4014d620, 0x29e2: 0x4014d820, 0x29e3: 0x4014da20, + 0x29e4: 0x4014dc20, 0x29e5: 0x4014de20, 0x29e6: 0x4014e020, 0x29e7: 0x4014e220, + 0x29e8: 0x4014e420, 0x29e9: 0x4014e620, 0x29ea: 0x4014e820, 0x29eb: 0x4014ea20, + 0x29ec: 0x4014ec20, 0x29ed: 0x4014ee20, 0x29ee: 0x4014f020, 0x29ef: 0x4014f220, + 0x29f0: 0x4014f420, 0x29f1: 0x4014f620, 0x29f2: 0x4014f820, 0x29f3: 0x4014fa20, + 0x29f4: 0x4014fc20, 0x29f5: 0x4014fe20, 0x29f6: 0x40150020, 0x29f7: 0x40150220, + 0x29f8: 0x40150420, 0x29f9: 0x40150620, 0x29fa: 0x40150820, 0x29fb: 0x40150a20, + 0x29fc: 0x40150c20, 0x29fd: 0x40150e20, 0x29fe: 0x40151020, 0x29ff: 0x40151220, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x40151420, 0x2a01: 0x40151620, 0x2a02: 0x40151820, 0x2a03: 0x40151a20, + 0x2a04: 0x40151c20, 0x2a05: 0x40151e20, 0x2a06: 0x40152020, 0x2a07: 0x40152220, + 0x2a08: 0x40152420, 0x2a09: 0x40152620, 0x2a0a: 0x40152820, 0x2a0b: 0x40152a20, + 0x2a0c: 0x40152c20, 0x2a0d: 0x40152e20, 0x2a0e: 0x40153020, 0x2a0f: 0x40153220, + 0x2a10: 0x40153420, 0x2a11: 0x40153620, 0x2a12: 0x40153820, 0x2a13: 0x40153a20, + 0x2a14: 0x40153c20, 0x2a15: 0x40153e20, 0x2a16: 0x40154020, 0x2a17: 0x40154220, + 0x2a18: 0x40154420, 0x2a19: 0x40154620, 0x2a1a: 0x40154820, 0x2a1b: 0x40154a20, + 0x2a1c: 0x40154c20, 0x2a1d: 0x40154e20, 0x2a1e: 0x40155020, 0x2a1f: 0x40155220, + 0x2a20: 0x40155420, 0x2a21: 0x40155620, 0x2a22: 0x40155820, 0x2a23: 0x40155a20, + 0x2a24: 0x40155c20, 0x2a25: 0x40155e20, 0x2a26: 0x40156020, 0x2a27: 0x40156220, + 0x2a28: 0x40156420, 0x2a29: 0x40156620, 0x2a2a: 0x40156820, 0x2a2b: 0x40156a20, + 0x2a2c: 0x40156c20, 0x2a2d: 0x40156e20, 0x2a2e: 0x40157020, 0x2a2f: 0x40157220, + 0x2a30: 0x40157420, 0x2a31: 0x40157620, 0x2a32: 0x40157820, 0x2a33: 0x40157a20, + 0x2a34: 0xf0000404, 0x2a35: 0xf0001f04, 0x2a36: 0xf0000404, 0x2a37: 0x40157c20, + 0x2a38: 0x40157e20, 0x2a39: 0x40158020, 0x2a3a: 0x40158220, 0x2a3b: 0x40158420, + 0x2a3c: 0x40158620, 0x2a3d: 0x40158820, 0x2a3e: 0x40158a20, 0x2a3f: 0x40158c20, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x40158e20, 0x2a41: 0x40159020, 0x2a42: 0x40159220, 0x2a43: 0x40159420, + 0x2a44: 0x40159620, 0x2a45: 0x40159820, 0x2a46: 0x40159a20, 0x2a47: 0x40159c20, + 0x2a48: 0x40159e20, 0x2a49: 0x4015a020, 0x2a4a: 0x4015a220, 0x2a4b: 0x4015a420, + 0x2a4c: 0x4015a620, 0x2a4d: 0x4015a820, 0x2a4e: 0x4015aa20, 0x2a4f: 0x4015ac20, + 0x2a50: 0x4015ae20, 0x2a51: 0x4015b020, 0x2a52: 0x4015b220, 0x2a53: 0x4015b420, + 0x2a54: 0x4015b620, 0x2a55: 0x4015b820, 0x2a56: 0x4015ba20, 0x2a57: 0x4015bc20, + 0x2a58: 0x4015be20, 0x2a59: 0x4015c020, 0x2a5a: 0x4015c220, 0x2a5b: 0x4015c420, + 0x2a5c: 0x4015c620, 0x2a5d: 0x4015c820, 0x2a5e: 0x4015ca20, 0x2a5f: 0x4015cc20, + 0x2a60: 0x4015ce20, 0x2a61: 0x4015d020, 0x2a62: 0x4015d220, 0x2a63: 0x4015d420, + 0x2a64: 0x4015d620, 0x2a65: 0x4015d820, 0x2a66: 0x4015da20, 0x2a67: 0x4015dc20, + 0x2a68: 0x4015de20, 0x2a69: 0x4015e020, 0x2a6a: 0x4015e220, 0x2a6b: 0x4015e420, + 0x2a6c: 0x4015e620, 0x2a6d: 0x4015e820, 0x2a6e: 0x4015ea20, 0x2a6f: 0x4015ec20, + 0x2a70: 0x4015ee20, 0x2a71: 0x4015f020, 0x2a72: 0x4015f220, 0x2a73: 0x4015f420, + 0x2a74: 0x4015f620, 0x2a75: 0x4015f820, 0x2a76: 0x4015fa20, 0x2a77: 0x4015fc20, + 0x2a78: 0x4015fe20, 0x2a79: 0x40160020, 0x2a7a: 0x40160220, 0x2a7b: 0x40160420, + 0x2a7c: 0x40160620, 0x2a7d: 0x40160820, 0x2a7e: 0x40160a20, 0x2a7f: 0x40160c20, + // Block 0xaa, offset 0x2a80 + 0x2a80: 0x40160e20, 0x2a81: 0x40161020, 0x2a82: 0x40161220, 0x2a83: 0x40161420, + 0x2a84: 0x40161620, 0x2a85: 0x40161820, 0x2a86: 0x40161a20, 0x2a87: 0x40161c20, + 0x2a88: 0x40161e20, 0x2a89: 0x40162020, 0x2a8a: 0x40162220, 0x2a8b: 0x40162420, + 0x2a8c: 0x40162620, 0x2a8d: 0x40162820, 0x2a8e: 0x40162a20, 0x2a8f: 0x40162c20, + 0x2a90: 0x40162e20, 0x2a91: 0x40163020, 0x2a92: 0x40163220, 0x2a93: 0x40163420, + 0x2a94: 0x40163620, 0x2a95: 0x40163820, 0x2a96: 0x40163a20, 0x2a97: 0x40163c20, + 0x2a98: 0x40163e20, 0x2a99: 0x40164020, 0x2a9a: 0x40164220, 0x2a9b: 0x40164420, + 0x2a9c: 0xe000014f, 0x2a9d: 0x40164620, 0x2a9e: 0x40164820, 0x2a9f: 0x40164a20, + 0x2aa0: 0x40164c20, 0x2aa1: 0x40164e20, 0x2aa2: 0x40165020, 0x2aa3: 0x40165220, + 0x2aa4: 0x40165420, 0x2aa5: 0x40165620, 0x2aa6: 0x40165820, 0x2aa7: 0x40165a20, + 0x2aa8: 0x40165c20, 0x2aa9: 0x40165e20, 0x2aaa: 0x40166020, 0x2aab: 0x40166220, + 0x2aac: 0x40166420, 0x2aad: 0x40166620, 0x2aae: 0x40166820, 0x2aaf: 0x40166a20, + 0x2ab0: 0x40166c20, 0x2ab1: 0x40166e20, 0x2ab2: 0x40167020, 0x2ab3: 0x40167220, + 0x2ab4: 0x40167420, 0x2ab5: 0x40167620, 0x2ab6: 0x40167820, 0x2ab7: 0x40167a20, + 0x2ab8: 0x40167c20, 0x2ab9: 0x40167e20, 0x2aba: 0x40168020, 0x2abb: 0x40168220, + 0x2abc: 0x40168420, 0x2abd: 0x40168620, 0x2abe: 0x40168820, 0x2abf: 0x40168a20, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x40168c20, 0x2ac1: 0x40168e20, 0x2ac2: 0x40169020, 0x2ac3: 0x40169220, + 0x2ac4: 0x40169420, 0x2ac5: 0x40169620, 0x2ac6: 0x40169820, 0x2ac7: 0x40169a20, + 0x2ac8: 0x40169c20, 0x2ac9: 0x40169e20, 0x2aca: 0x4016a020, 0x2acb: 0x4016a220, + 0x2acc: 0x4016a420, 0x2acd: 0x4016a620, 0x2ace: 0x4016a820, 0x2acf: 0x4016aa20, + 0x2ad0: 0x4016ac20, 0x2ad1: 0x4016ae20, 0x2ad2: 0x4016b020, 0x2ad3: 0x4016b220, + 0x2ad4: 0x4016b420, 0x2ad5: 0x4016b620, 0x2ad6: 0x4016b820, 0x2ad7: 0x4016ba20, + 0x2ad8: 0x4016bc20, 0x2ad9: 0x4016be20, 0x2ada: 0x4016c020, 0x2adb: 0x4016c220, + 0x2adc: 0x4016c420, 0x2add: 0x4016c620, 0x2ade: 0x4016c820, 0x2adf: 0x4016ca20, + 0x2ae0: 0x4016cc20, 0x2ae1: 0x4016ce20, 0x2ae2: 0x4016d020, 0x2ae3: 0x4016d220, + 0x2ae4: 0x4016d420, 0x2ae5: 0x4016d620, 0x2ae6: 0x4016d820, 0x2ae7: 0x4016da20, + 0x2ae8: 0x4016dc20, 0x2ae9: 0x4016de20, 0x2aea: 0x4016e020, 0x2aeb: 0x4016e220, + 0x2aec: 0x4016e420, 0x2aed: 0x4016e620, 0x2aee: 0x4016e820, 0x2aef: 0x4016ea20, + 0x2af0: 0x4016ec20, 0x2af1: 0x4016ee20, 0x2af2: 0x4016f020, 0x2af3: 0x4016f220, + 0x2af4: 0x4016f420, 0x2af5: 0x4016f620, 0x2af6: 0x4016f820, 0x2af7: 0x4016fa20, + 0x2af8: 0x4016fc20, 0x2af9: 0x4016fe20, 0x2afa: 0x40170020, 0x2afb: 0x40170220, + 0x2afc: 0x40170420, 0x2afd: 0x40170620, 0x2afe: 0x40170820, 0x2aff: 0x40170a20, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x40170c20, 0x2b01: 0x40170e20, 0x2b02: 0x40171020, 0x2b03: 0x40171220, + 0x2b04: 0x40171420, 0x2b05: 0x40171620, 0x2b06: 0x40171820, 0x2b07: 0x40171a20, + 0x2b08: 0x40171c20, 0x2b09: 0x40171e20, 0x2b0a: 0x40172020, 0x2b0b: 0x40172220, + 0x2b0c: 0x40172420, + 0x2b10: 0x40172620, 0x2b11: 0x40172820, 0x2b12: 0x40172a20, 0x2b13: 0x40172c20, + 0x2b14: 0x40172e20, 0x2b15: 0x40173020, 0x2b16: 0x40173220, 0x2b17: 0x40173420, + 0x2b18: 0x40173620, 0x2b19: 0x40173820, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x00373888, 0x2b41: 0x00373a88, 0x2b42: 0x00373c88, 0x2b43: 0x00373e88, + 0x2b44: 0x00374088, 0x2b45: 0x00374288, 0x2b46: 0x00374488, 0x2b47: 0x00374688, + 0x2b48: 0x00374888, 0x2b49: 0x00374a88, 0x2b4a: 0x00374c88, 0x2b4b: 0x00374e88, + 0x2b4c: 0x00375088, 0x2b4d: 0x00375288, 0x2b4e: 0x00375488, 0x2b4f: 0x00375688, + 0x2b50: 0x00375888, 0x2b51: 0x00375a88, 0x2b52: 0x00375c88, 0x2b53: 0x00375e88, + 0x2b54: 0x00376088, 0x2b55: 0x00376288, 0x2b56: 0x00376488, 0x2b57: 0x00376688, + 0x2b58: 0x00376888, 0x2b59: 0x00376a88, 0x2b5a: 0x00376c88, 0x2b5b: 0x00376e88, + 0x2b5c: 0x00377088, 0x2b5d: 0x00377288, 0x2b5e: 0x00377488, 0x2b5f: 0x00377688, + 0x2b60: 0x00377888, 0x2b61: 0x00377a88, 0x2b62: 0x00377c88, 0x2b63: 0x00377e88, + 0x2b64: 0x00378088, 0x2b65: 0x00378288, 0x2b66: 0x00378488, 0x2b67: 0x00378688, + 0x2b68: 0x00378888, 0x2b69: 0x00378a88, 0x2b6a: 0x00378c88, 0x2b6b: 0x00378e88, + 0x2b6c: 0x00379088, 0x2b6d: 0x00379288, 0x2b6e: 0x00379488, + 0x2b70: 0x40373820, 0x2b71: 0x40373a20, 0x2b72: 0x40373c20, 0x2b73: 0x40373e20, + 0x2b74: 0x40374020, 0x2b75: 0x40374220, 0x2b76: 0x40374420, 0x2b77: 0x40374620, + 0x2b78: 0x40374820, 0x2b79: 0x40374a20, 0x2b7a: 0x40374c20, 0x2b7b: 0x40374e20, + 0x2b7c: 0x40375020, 0x2b7d: 0x40375220, 0x2b7e: 0x40375420, 0x2b7f: 0x40375620, + // Block 0xae, offset 0x2b80 + 0x2b80: 0x40375820, 0x2b81: 0x40375a20, 0x2b82: 0x40375c20, 0x2b83: 0x40375e20, + 0x2b84: 0x40376020, 0x2b85: 0x40376220, 0x2b86: 0x40376420, 0x2b87: 0x40376620, + 0x2b88: 0x40376820, 0x2b89: 0x40376a20, 0x2b8a: 0x40376c20, 0x2b8b: 0x40376e20, + 0x2b8c: 0x40377020, 0x2b8d: 0x40377220, 0x2b8e: 0x40377420, 0x2b8f: 0x40377620, + 0x2b90: 0x40377820, 0x2b91: 0x40377a20, 0x2b92: 0x40377c20, 0x2b93: 0x40377e20, + 0x2b94: 0x40378020, 0x2b95: 0x40378220, 0x2b96: 0x40378420, 0x2b97: 0x40378620, + 0x2b98: 0x40378820, 0x2b99: 0x40378a20, 0x2b9a: 0x40378c20, 0x2b9b: 0x40378e20, + 0x2b9c: 0x40379020, 0x2b9d: 0x40379220, 0x2b9e: 0x40379420, + 0x2ba0: 0x002e4088, 0x2ba1: 0x402e4020, 0x2ba2: 0x002e4288, 0x2ba3: 0x002f3688, + 0x2ba4: 0x002fbe88, 0x2ba5: 0x402be820, 0x2ba6: 0x40303e20, 0x2ba7: 0x002d8888, + 0x2ba8: 0x402d8820, 0x2ba9: 0x002e1288, 0x2baa: 0x402e1220, 0x2bab: 0x00316088, + 0x2bac: 0x40316020, 0x2bad: 0x002bf888, 0x2bae: 0x002e9088, 0x2baf: 0x002bf088, + 0x2bb0: 0x002c0288, 0x2bb1: 0x4030d420, 0x2bb2: 0x0030ec88, 0x2bb3: 0x4030ec20, + 0x2bb4: 0x4030d620, 0x2bb5: 0x002d8a88, 0x2bb6: 0x402d8a20, 0x2bb7: 0x402f5420, + 0x2bb8: 0x402cac20, 0x2bb9: 0x402fb420, 0x2bba: 0x402f0e20, 0x2bbb: 0x402cb620, + 0x2bbc: 0x002dcc95, 0x2bbd: 0x0030be9d, 0x2bbe: 0x002ffc88, 0x2bbf: 0x00315888, + // Block 0xaf, offset 0x2bc0 + 0x2bc0: 0x0032aa88, 0x2bc1: 0x4032aa20, 0x2bc2: 0x0032ac88, 0x2bc3: 0x4032ac20, + 0x2bc4: 0x0032ae88, 0x2bc5: 0x4032ae20, 0x2bc6: 0x0032b088, 0x2bc7: 0x4032b020, + 0x2bc8: 0x0032b288, 0x2bc9: 0x4032b220, 0x2bca: 0x0032b688, 0x2bcb: 0x4032b620, + 0x2bcc: 0x0032b888, 0x2bcd: 0x4032b820, 0x2bce: 0x0032ba88, 0x2bcf: 0x4032ba20, + 0x2bd0: 0x0032bc88, 0x2bd1: 0x4032bc20, 0x2bd2: 0x0032be88, 0x2bd3: 0x4032be20, + 0x2bd4: 0x0032c088, 0x2bd5: 0x4032c020, 0x2bd6: 0x0032c488, 0x2bd7: 0x4032c420, + 0x2bd8: 0x0032c688, 0x2bd9: 0x4032c620, 0x2bda: 0x0032c888, 0x2bdb: 0x4032c820, + 0x2bdc: 0x0032ce88, 0x2bdd: 0x4032ce20, 0x2bde: 0x0032d088, 0x2bdf: 0x4032d020, + 0x2be0: 0x0032d288, 0x2be1: 0x4032d220, 0x2be2: 0x0032d488, 0x2be3: 0x4032d420, + 0x2be4: 0x0032d688, 0x2be5: 0x4032d620, 0x2be6: 0x0032d888, 0x2be7: 0x4032d820, + 0x2be8: 0x0032da88, 0x2be9: 0x4032da20, 0x2bea: 0x0032dc88, 0x2beb: 0x4032dc20, + 0x2bec: 0x0032de88, 0x2bed: 0x4032de20, 0x2bee: 0x0032e088, 0x2bef: 0x4032e020, + 0x2bf0: 0x0032e288, 0x2bf1: 0x4032e220, 0x2bf2: 0x00331888, 0x2bf3: 0x40331820, + 0x2bf4: 0x00331a88, 0x2bf5: 0x40331a20, 0x2bf6: 0x0032b488, 0x2bf7: 0x4032b420, + 0x2bf8: 0x0032c288, 0x2bf9: 0x4032c220, 0x2bfa: 0x0032ca88, 0x2bfb: 0x4032ca20, + 0x2bfc: 0x0032cc88, 0x2bfd: 0x4032cc20, 0x2bfe: 0x0032e488, 0x2bff: 0x4032e420, + // Block 0xb0, offset 0x2c00 + 0x2c00: 0x0032e688, 0x2c01: 0x4032e620, 0x2c02: 0x0032ec88, 0x2c03: 0x4032ec20, + 0x2c04: 0x0032ee88, 0x2c05: 0x4032ee20, 0x2c06: 0x0032f088, 0x2c07: 0x4032f020, + 0x2c08: 0x0032f888, 0x2c09: 0x4032f820, 0x2c0a: 0x0032fc88, 0x2c0b: 0x4032fc20, + 0x2c0c: 0x0032fe88, 0x2c0d: 0x4032fe20, 0x2c0e: 0x00330088, 0x2c0f: 0x40330020, + 0x2c10: 0x00330288, 0x2c11: 0x40330220, 0x2c12: 0x00330488, 0x2c13: 0x40330420, + 0x2c14: 0x00330688, 0x2c15: 0x40330620, 0x2c16: 0x00330c88, 0x2c17: 0x40330c20, + 0x2c18: 0x00331088, 0x2c19: 0x40331020, 0x2c1a: 0x00331288, 0x2c1b: 0x40331220, + 0x2c1c: 0x00331488, 0x2c1d: 0x40331420, 0x2c1e: 0x00331c88, 0x2c1f: 0x40331c20, + 0x2c20: 0x00331e88, 0x2c21: 0x40331e20, 0x2c22: 0x00332088, 0x2c23: 0x40332020, + 0x2c24: 0xe00014b0, 0x2c25: 0x40173a20, 0x2c26: 0x40173c20, 0x2c27: 0x40173e20, + 0x2c28: 0x40174020, 0x2c29: 0x40174220, 0x2c2a: 0x40174420, 0x2c2b: 0x0032ea88, + 0x2c2c: 0x4032ea20, 0x2c2d: 0x00330a88, 0x2c2e: 0x40330a20, 0x2c2f: 0xae605f02, + 0x2c30: 0xae602a02, 0x2c31: 0xae602202, 0x2c32: 0x0032f688, 0x2c33: 0x4032f620, + 0x2c39: 0x4002f820, 0x2c3a: 0x4002d420, 0x2c3b: 0x4002d620, + 0x2c3c: 0x4003b620, 0x2c3d: 0x4028b420, 0x2c3e: 0x4002fa20, 0x2c3f: 0x4003b820, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x40379820, 0x2c41: 0x40379c20, 0x2c42: 0x4037a020, 0x2c43: 0x4037a420, + 0x2c44: 0x4037a820, 0x2c45: 0x4037ac20, 0x2c46: 0x4037b020, 0x2c47: 0x4037b820, + 0x2c48: 0x4037bc20, 0x2c49: 0x4037c020, 0x2c4a: 0x4037c420, 0x2c4b: 0x4037c820, + 0x2c4c: 0x4037cc20, 0x2c4d: 0x4037d420, 0x2c4e: 0x4037d820, 0x2c4f: 0x4037dc20, + 0x2c50: 0x4037e020, 0x2c51: 0x4037e420, 0x2c52: 0x4037e820, 0x2c53: 0x4037f020, + 0x2c54: 0x4037f420, 0x2c55: 0x4037f820, 0x2c56: 0x4037fc20, 0x2c57: 0x40380020, + 0x2c58: 0x40380420, 0x2c59: 0x40380820, 0x2c5a: 0x40380c20, 0x2c5b: 0x40381020, + 0x2c5c: 0x40381420, 0x2c5d: 0x40381820, 0x2c5e: 0x40381c20, 0x2c5f: 0x40382420, + 0x2c60: 0x40382820, 0x2c61: 0x4037b420, 0x2c62: 0x4037d020, 0x2c63: 0x4037ec20, + 0x2c64: 0x40382020, 0x2c65: 0x40382c20, 0x2c67: 0x40383220, + 0x2c6d: 0x40383c20, + 0x2c70: 0x403bbc20, 0x2c71: 0x403bbe20, 0x2c72: 0x403bc020, 0x2c73: 0x403bc220, + 0x2c74: 0x403bc420, 0x2c75: 0x403bc620, 0x2c76: 0x403bc820, 0x2c77: 0x403bca20, + 0x2c78: 0x403bcc20, 0x2c79: 0x403bce20, 0x2c7a: 0x403bd020, 0x2c7b: 0x403bd220, + 0x2c7c: 0x403bd620, 0x2c7d: 0x403bd820, 0x2c7e: 0x403bda20, 0x2c7f: 0x403bdc20, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x403bde20, 0x2c81: 0x403be020, 0x2c82: 0x403be220, 0x2c83: 0x403be420, + 0x2c84: 0x403be620, 0x2c85: 0x403be820, 0x2c86: 0x403bea20, 0x2c87: 0x403bec20, + 0x2c88: 0x403bee20, 0x2c89: 0x403bf020, 0x2c8a: 0x403bf220, 0x2c8b: 0x403bf420, + 0x2c8c: 0x403bf620, 0x2c8d: 0x403bf820, 0x2c8e: 0x403bfa20, 0x2c8f: 0x403bfc20, + 0x2c90: 0x403bfe20, 0x2c91: 0x403c0020, 0x2c92: 0x403c0220, 0x2c93: 0x403c0420, + 0x2c94: 0x403c0820, 0x2c95: 0x403c0a20, 0x2c96: 0x403c0c20, 0x2c97: 0x403c0e20, + 0x2c98: 0x403c1020, 0x2c99: 0x403c1220, 0x2c9a: 0x403c1420, 0x2c9b: 0x403c1620, + 0x2c9c: 0x403c1820, 0x2c9d: 0x403c1a20, 0x2c9e: 0x403c1c20, 0x2c9f: 0x403c1e20, + 0x2ca0: 0x403c2020, 0x2ca1: 0x403c2220, 0x2ca2: 0x403c2420, 0x2ca3: 0x403c2620, + 0x2ca4: 0x403c2820, 0x2ca5: 0x403c2a20, 0x2ca6: 0x403bd420, 0x2ca7: 0x403c0620, + 0x2caf: 0x403c2c20, + 0x2cb0: 0x4005e620, + 0x2cbf: 0xa0900000, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x403c4e20, 0x2cc1: 0x403c7820, 0x2cc2: 0x403c9a20, 0x2cc3: 0x403cac20, + 0x2cc4: 0x403cca20, 0x2cc5: 0x403d1620, 0x2cc6: 0x403d3820, 0x2cc7: 0x403d4a20, + 0x2cc8: 0x403d7620, 0x2cc9: 0x403d8820, 0x2cca: 0x403d9a20, 0x2ccb: 0x403dfc20, + 0x2ccc: 0x403e3a20, 0x2ccd: 0x403e5820, 0x2cce: 0x403e6a20, 0x2ccf: 0x403eae20, + 0x2cd0: 0x403ec020, 0x2cd1: 0x403ee020, 0x2cd2: 0x403f4020, 0x2cd3: 0x403e9620, + 0x2cd4: 0x403e9820, 0x2cd5: 0x403e9a20, 0x2cd6: 0x403e9c20, + 0x2ce0: 0x403f4820, 0x2ce1: 0x403f4a20, 0x2ce2: 0x403f4c20, 0x2ce3: 0x403f4e20, + 0x2ce4: 0x403f5020, 0x2ce5: 0x403f5220, 0x2ce6: 0x403f5420, + 0x2ce8: 0x403f5620, 0x2ce9: 0x403f5820, 0x2cea: 0x403f5a20, 0x2ceb: 0x403f5c20, + 0x2cec: 0x403f5e20, 0x2ced: 0x403f6020, 0x2cee: 0x403f6220, + 0x2cf0: 0x403f6420, 0x2cf1: 0x403f6620, 0x2cf2: 0x403f6820, 0x2cf3: 0x403f6a20, + 0x2cf4: 0x403f6c20, 0x2cf5: 0x403f6e20, 0x2cf6: 0x403f7020, + 0x2cf8: 0x403f7220, 0x2cf9: 0x403f7420, 0x2cfa: 0x403f7620, 0x2cfb: 0x403f7820, + 0x2cfc: 0x403f7a20, 0x2cfd: 0x403f7c20, 0x2cfe: 0x403f7e20, + // Block 0xb4, offset 0x2d00 + 0x2d00: 0x403f8020, 0x2d01: 0x403f8220, 0x2d02: 0x403f8420, 0x2d03: 0x403f8620, + 0x2d04: 0x403f8820, 0x2d05: 0x403f8a20, 0x2d06: 0x403f8c20, + 0x2d08: 0x403f8e20, 0x2d09: 0x403f9020, 0x2d0a: 0x403f9220, 0x2d0b: 0x403f9420, + 0x2d0c: 0x403f9620, 0x2d0d: 0x403f9820, 0x2d0e: 0x403f9a20, + 0x2d10: 0x403f9c20, 0x2d11: 0x403f9e20, 0x2d12: 0x403fa020, 0x2d13: 0x403fa220, + 0x2d14: 0x403fa420, 0x2d15: 0x403fa620, 0x2d16: 0x403fa820, + 0x2d18: 0x403faa20, 0x2d19: 0x403fac20, 0x2d1a: 0x403fae20, 0x2d1b: 0x403fb020, + 0x2d1c: 0x403fb220, 0x2d1d: 0x403fb420, 0x2d1e: 0x403fb620, + 0x2d20: 0x84e619a9, 0x2d21: 0x84e619ad, 0x2d22: 0x84e619b1, 0x2d23: 0x84e619c5, + 0x2d24: 0x84e619e5, 0x2d25: 0x84e619f2, 0x2d26: 0x84e61a28, 0x2d27: 0x84e61a42, + 0x2d28: 0x84e61a54, 0x2d29: 0x84e61a5d, 0x2d2a: 0x84e61a77, 0x2d2b: 0x84e61a87, + 0x2d2c: 0x84e61a94, 0x2d2d: 0x84e61a9d, 0x2d2e: 0x84e61aa6, 0x2d2f: 0x84e61ada, + 0x2d30: 0x84e61b01, 0x2d31: 0x84e61b0c, 0x2d32: 0x84e61b2e, 0x2d33: 0x84e61b33, + 0x2d34: 0x84e61b86, 0x2d35: 0xe00014d8, 0x2d36: 0x84e61991, 0x2d37: 0x84e619d9, + 0x2d38: 0x84e61a27, 0x2d39: 0x84e61ad1, 0x2d3a: 0x84e61b4f, 0x2d3b: 0x84e61b5c, + 0x2d3c: 0x84e61b61, 0x2d3d: 0x84e61b6b, 0x2d3e: 0x84e61b70, 0x2d3f: 0x84e61b7a, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x40052620, 0x2d41: 0x40052820, 0x2d42: 0x40047420, 0x2d43: 0x40047620, + 0x2d44: 0x40047820, 0x2d45: 0x40047a20, 0x2d46: 0x40052a20, 0x2d47: 0x40052c20, + 0x2d48: 0x40052e20, 0x2d49: 0x40047c20, 0x2d4a: 0x40047e20, 0x2d4b: 0x40053020, + 0x2d4c: 0x40048020, 0x2d4d: 0x40048220, 0x2d4e: 0x40053220, 0x2d4f: 0x40053420, + 0x2d50: 0x40053620, 0x2d51: 0x40053820, 0x2d52: 0x40053a20, 0x2d53: 0x40053c20, + 0x2d54: 0x40053e20, 0x2d55: 0x40054020, 0x2d56: 0x40054220, 0x2d57: 0x40023620, + 0x2d58: 0x4002e220, 0x2d59: 0x4003ba20, 0x2d5a: 0x40054420, 0x2d5b: 0x40054620, + 0x2d5c: 0x40048420, 0x2d5d: 0x40048620, 0x2d5e: 0x40054820, 0x2d5f: 0x40054a20, + 0x2d60: 0x40048820, 0x2d61: 0x40048a20, 0x2d62: 0x40048c20, 0x2d63: 0x40048e20, + 0x2d64: 0x40049020, 0x2d65: 0x40049220, 0x2d66: 0x40049420, 0x2d67: 0x40049620, + 0x2d68: 0x40049820, 0x2d69: 0x40049a20, 0x2d6a: 0x4003ae20, 0x2d6b: 0x4003b020, + 0x2d6c: 0x4003b220, 0x2d6d: 0x4003b420, 0x2d6e: 0x4002c820, 0x2d6f: 0x40367020, + 0x2d70: 0x4002fc20, 0x2d71: 0x40030820, 0x2d72: 0x40024420, 0x2d73: 0x40030a20, + 0x2d74: 0x40024220, 0x2d75: 0x40026820, 0x2d76: 0x4004fc20, 0x2d77: 0x4004fe20, + 0x2d78: 0x40050020, 0x2d79: 0x4004d020, 0x2d7a: 0x40023020, 0x2d7b: 0x40023220, + // Block 0xb6, offset 0x2d80 + 0x2d80: 0xe0002401, 0x2d81: 0xe0002416, 0x2d82: 0x029cb684, 0x2d83: 0x029cb484, + 0x2d84: 0xe0002404, 0x2d85: 0x029d7684, 0x2d86: 0xe0002407, 0x2d87: 0xe000240a, + 0x2d88: 0xe000240d, 0x2d89: 0x02a40484, 0x2d8a: 0xe0002410, 0x2d8b: 0xe0002413, + 0x2d8c: 0xe0002419, 0x2d8d: 0xe000241c, 0x2d8e: 0xe000241f, 0x2d8f: 0x02b84684, + 0x2d90: 0x02b84484, 0x2d91: 0xe0002422, 0x2d92: 0x02bbe684, 0x2d93: 0x02bcf484, + 0x2d94: 0x02bea284, 0x2d95: 0xe0002425, 0x2d96: 0x02bf8884, 0x2d97: 0xe0002428, + 0x2d98: 0x02c49884, 0x2d99: 0x02ca6a84, 0x2d9b: 0x02cbc284, + 0x2d9c: 0xe000242b, 0x2d9d: 0xe000242e, 0x2d9e: 0xe0002436, 0x2d9f: 0x02d79a84, + 0x2da0: 0x02d82284, 0x2da1: 0x02d86a84, 0x2da2: 0x02d87484, 0x2da3: 0x02e0d884, + 0x2da4: 0x02e45684, 0x2da5: 0xe0002439, 0x2da6: 0x029c5884, 0x2da7: 0xe000243c, + 0x2da8: 0x02e55a84, 0x2da9: 0xe000243f, 0x2daa: 0xe0002442, 0x2dab: 0xe0002445, + 0x2dac: 0xe0002448, 0x2dad: 0x02f27684, 0x2dae: 0xe000244b, 0x2daf: 0x02f9f284, + 0x2db0: 0x02fd3e84, 0x2db1: 0x02fea684, 0x2db2: 0x02fea484, 0x2db3: 0xe0002451, + 0x2db4: 0xe0002454, 0x2db5: 0xe000244e, 0x2db6: 0xe0002457, 0x2db7: 0xe000245a, + 0x2db8: 0x02ff1684, 0x2db9: 0x03000484, 0x2dba: 0x03010084, 0x2dbb: 0xe000245d, + 0x2dbc: 0xe0002460, 0x2dbd: 0xe0002463, 0x2dbe: 0x0304f284, 0x2dbf: 0xe0002466, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0xe0002469, 0x2dc1: 0x030c9c84, 0x2dc2: 0x0310c884, 0x2dc3: 0x03130084, + 0x2dc4: 0x0312fe84, 0x2dc5: 0x03138284, 0x2dc6: 0x0313a484, 0x2dc7: 0xe000246c, + 0x2dc8: 0x03174084, 0x2dc9: 0x031a3a84, 0x2dca: 0xe000246f, 0x2dcb: 0x031ecc84, + 0x2dcc: 0x031f6c84, 0x2dcd: 0xe0002472, 0x2dce: 0xe0002475, 0x2dcf: 0xe0002478, + 0x2dd0: 0x03290a84, 0x2dd1: 0x032aee84, 0x2dd2: 0x032af084, 0x2dd3: 0x032afe84, + 0x2dd4: 0x032bd084, 0x2dd5: 0xe000247b, 0x2dd6: 0x032c3a84, 0x2dd7: 0xe000247e, + 0x2dd8: 0x032ea484, 0x2dd9: 0x032fcc84, 0x2dda: 0x0330ea84, 0x2ddb: 0x03319c84, + 0x2ddc: 0x0331bc84, 0x2ddd: 0x0331be84, 0x2dde: 0xe0002481, 0x2ddf: 0x0331c084, + 0x2de0: 0x0332c684, 0x2de1: 0xe0002484, 0x2de2: 0x0334d884, 0x2de3: 0xe0002487, + 0x2de4: 0xe000248a, 0x2de5: 0x0338f884, 0x2de6: 0x033c3e84, 0x2de7: 0xe000248d, + 0x2de8: 0x033d4c84, 0x2de9: 0x033d8884, 0x2dea: 0x033dfc84, 0x2deb: 0xe0002490, + 0x2dec: 0x033ea084, 0x2ded: 0xe0002493, 0x2dee: 0x033efe84, 0x2def: 0xe0002496, + 0x2df0: 0x033f3284, 0x2df1: 0xe0002499, 0x2df2: 0xe000249c, 0x2df3: 0x033f3e84, + // Block 0xb8, offset 0x2e00 + 0x2e00: 0x029c0084, 0x2e01: 0x029c5084, 0x2e02: 0x029c6c84, 0x2e03: 0x029c7e84, + 0x2e04: 0x029cb284, 0x2e05: 0x029d0a84, 0x2e06: 0x029d1884, 0x2e07: 0x029d4084, + 0x2e08: 0x029d7484, 0x2e09: 0x02a27e84, 0x2e0a: 0x02a2ca84, 0x2e0b: 0x02a2d684, + 0x2e0c: 0x02a30484, 0x2e0d: 0x02a32c84, 0x2e0e: 0x02a35684, 0x2e0f: 0x02a3c084, + 0x2e10: 0x02a3ea84, 0x2e11: 0x02a40084, 0x2e12: 0x02a53684, 0x2e13: 0x02a5f284, + 0x2e14: 0x02a62a84, 0x2e15: 0x02a63484, 0x2e16: 0x02a67084, 0x2e17: 0x02a68284, + 0x2e18: 0x02a6b884, 0x2e19: 0x02a6d284, 0x2e1a: 0x02a70484, 0x2e1b: 0x02a76c84, + 0x2e1c: 0x02a79084, 0x2e1d: 0x02a7c684, 0x2e1e: 0x02adae84, 0x2e1f: 0x02ae3e84, + 0x2e20: 0x02b1d684, 0x2e21: 0x02b20484, 0x2e22: 0x02b21484, 0x2e23: 0x02b22a84, + 0x2e24: 0x02b24e84, 0x2e25: 0x02b2e684, 0x2e26: 0x02b6a084, 0x2e27: 0x02b70084, + 0x2e28: 0x02b7f084, 0x2e29: 0x02b81e84, 0x2e2a: 0x02b84484, 0x2e2b: 0x02b87084, + 0x2e2c: 0x02b8dc84, 0x2e2d: 0x02b8e284, 0x2e2e: 0x02bbb684, 0x2e2f: 0x02bbca84, + 0x2e30: 0x02bbe284, 0x2e31: 0x02bbfc84, 0x2e32: 0x02bce484, 0x2e33: 0x02bcf484, + 0x2e34: 0x02bcfe84, 0x2e35: 0x02bde884, 0x2e36: 0x02bdfc84, 0x2e37: 0x02be1684, + 0x2e38: 0x02be2684, 0x2e39: 0x02bea084, 0x2e3a: 0x02bec284, 0x2e3b: 0x02bee684, + 0x2e3c: 0x02bf8684, 0x2e3d: 0x02c41084, 0x2e3e: 0x02c46c84, 0x2e3f: 0x02c49684, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x02ca5e84, 0x2e41: 0x02ca6884, 0x2e42: 0x02cb0e84, 0x2e43: 0x02cb2e84, + 0x2e44: 0x02cb4884, 0x2e45: 0x02cb7284, 0x2e46: 0x02cbc084, 0x2e47: 0x02cbca84, + 0x2e48: 0x02cde084, 0x2e49: 0x02ce1084, 0x2e4a: 0x02ce5084, 0x2e4b: 0x02d64084, + 0x2e4c: 0x02d6c484, 0x2e4d: 0x02d6f284, 0x2e4e: 0x02d76684, 0x2e4f: 0x02d79684, + 0x2e50: 0x02d7a884, 0x2e51: 0x02d7b684, 0x2e52: 0x02d81e84, 0x2e53: 0x02d82884, + 0x2e54: 0x02d86884, 0x2e55: 0x02e0d684, 0x2e56: 0x02e45484, 0x2e57: 0x02e46c84, + 0x2e58: 0x02e47684, 0x2e59: 0x02e47e84, 0x2e5a: 0x02e48e84, 0x2e5b: 0x02e4b284, + 0x2e5c: 0x02e4b684, 0x2e5d: 0x02e55884, 0x2e5e: 0x02e70884, 0x2e5f: 0x02e71284, + 0x2e60: 0x02e9b884, 0x2e61: 0x02e9cc84, 0x2e62: 0x02ea3084, 0x2e63: 0x02ea3e84, + 0x2e64: 0x02ea5084, 0x2e65: 0x02ea6084, 0x2e66: 0x02eb1684, 0x2e67: 0x02eb2484, + 0x2e68: 0x02ecec84, 0x2e69: 0x02ecfa84, 0x2e6a: 0x02ed5c84, 0x2e6b: 0x02ed7e84, + 0x2e6c: 0x02eddc84, 0x2e6d: 0x02efb684, 0x2e6e: 0x02efc484, 0x2e6f: 0x02efe684, + 0x2e70: 0x02f27484, 0x2e71: 0x02f37084, 0x2e72: 0x02f37c84, 0x2e73: 0x02f4e884, + 0x2e74: 0x02f59684, 0x2e75: 0x02f5f284, 0x2e76: 0x02f8e684, 0x2e77: 0x02f9f084, + 0x2e78: 0x02fe6c84, 0x2e79: 0x02fea284, 0x2e7a: 0x02ff1484, 0x2e7b: 0x02ff7a84, + 0x2e7c: 0x03000284, 0x2e7d: 0x03001884, 0x2e7e: 0x03002484, 0x2e7f: 0x03006684, + // Block 0xba, offset 0x2e80 + 0x2e80: 0x0300fe84, 0x2e81: 0x03011284, 0x2e82: 0x0303c684, 0x2e83: 0x0303d484, + 0x2e84: 0x0303e684, 0x2e85: 0x0303f884, 0x2e86: 0x03041884, 0x2e87: 0x03043684, + 0x2e88: 0x03043e84, 0x2e89: 0x0304dc84, 0x2e8a: 0x0304e484, 0x2e8b: 0x0304f084, + 0x2e8c: 0x030c9a84, 0x2e8d: 0x030cd684, 0x2e8e: 0x03108084, 0x2e8f: 0x03109884, + 0x2e90: 0x0310c684, 0x2e91: 0x0312fc84, 0x2e92: 0x03131684, 0x2e93: 0x0313a484, + 0x2e94: 0x03140084, 0x2e95: 0x03186e84, 0x2e96: 0x03188c84, 0x2e97: 0x0318aa84, + 0x2e98: 0x0318f084, 0x2e99: 0x03193a84, 0x2e9a: 0x031ac884, 0x2e9b: 0x031ae084, + 0x2e9c: 0x031b6684, 0x2e9d: 0x031d5684, 0x2e9e: 0x031d9484, 0x2e9f: 0x031f3684, + 0x2ea0: 0x031f6084, 0x2ea1: 0x031f6a84, 0x2ea2: 0x03212284, 0x2ea3: 0x03229284, + 0x2ea4: 0x03238c84, 0x2ea5: 0x03239884, 0x2ea6: 0x0323a284, 0x2ea7: 0x032aee84, + 0x2ea8: 0x032b0084, 0x2ea9: 0x032c3884, 0x2eaa: 0x032d6c84, 0x2eab: 0x032d7284, + 0x2eac: 0x032dd084, 0x2ead: 0x032ea284, 0x2eae: 0x032ebc84, 0x2eaf: 0x032ec484, + 0x2eb0: 0x032ed284, 0x2eb1: 0x032f9684, 0x2eb2: 0x032fda84, 0x2eb3: 0x032fe684, + 0x2eb4: 0x03300284, 0x2eb5: 0x03315084, 0x2eb6: 0x0331b684, 0x2eb7: 0x0331be84, + 0x2eb8: 0x03332c84, 0x2eb9: 0x03333284, 0x2eba: 0x03335884, 0x2ebb: 0x03355084, + 0x2ebc: 0x0335b084, 0x2ebd: 0x0335be84, 0x2ebe: 0x03364a84, 0x2ebf: 0x03365e84, + // Block 0xbb, offset 0x2ec0 + 0x2ec0: 0x03366484, 0x2ec1: 0x03367884, 0x2ec2: 0x0336b484, 0x2ec3: 0x0339ca84, + 0x2ec4: 0x033cea84, 0x2ec5: 0x033cfe84, 0x2ec6: 0x033d4a84, 0x2ec7: 0x033d7684, + 0x2ec8: 0x033d8684, 0x2ec9: 0x033d9a84, 0x2eca: 0x033da284, 0x2ecb: 0x033df284, + 0x2ecc: 0x033dfa84, 0x2ecd: 0x033e1c84, 0x2ece: 0x033e2684, 0x2ecf: 0x033e4084, + 0x2ed0: 0x033e7684, 0x2ed1: 0x033e9484, 0x2ed2: 0x033ea484, 0x2ed3: 0x033f1a84, + 0x2ed4: 0x033f3884, 0x2ed5: 0x033f4084, + 0x2ef0: 0x40273a20, 0x2ef1: 0x40273c20, 0x2ef2: 0x40273e20, 0x2ef3: 0x40274020, + 0x2ef4: 0x40274220, 0x2ef5: 0x40274420, 0x2ef6: 0x40274620, 0x2ef7: 0x40274820, + 0x2ef8: 0x40274a20, 0x2ef9: 0x40274c20, 0x2efa: 0x40274e20, 0x2efb: 0x40275020, + // Block 0xbc, offset 0x2f00 + 0x2f00: 0x00021283, 0x2f01: 0x40025c20, 0x2f02: 0x40030420, 0x2f03: 0x40051220, + 0x2f04: 0x40279a20, 0x2f05: 0x4027ca20, 0x2f06: 0xe0002206, 0x2f07: 0xe00001d3, + 0x2f08: 0x40049c20, 0x2f09: 0x40049e20, 0x2f0a: 0x4004a020, 0x2f0b: 0x4004a220, + 0x2f0c: 0x4004a420, 0x2f0d: 0x4004a620, 0x2f0e: 0x4004a820, 0x2f0f: 0x4004aa20, + 0x2f10: 0x4004ac20, 0x2f11: 0x4004ae20, 0x2f12: 0x40279c20, 0x2f13: 0x40279e20, + 0x2f14: 0x4004b020, 0x2f15: 0x4004b220, 0x2f16: 0x4004b420, 0x2f17: 0x4004b620, + 0x2f18: 0x4004b820, 0x2f19: 0x4004ba20, 0x2f1a: 0x4004bc20, 0x2f1b: 0x4004be20, + 0x2f1c: 0x40023820, 0x2f1d: 0x4003ea20, 0x2f1e: 0x4003ec20, 0x2f1f: 0x4003ee20, + 0x2f20: 0x4027a020, 0x2f21: 0xe0000267, 0x2f22: 0xe000037f, 0x2f23: 0xe0000459, + 0x2f24: 0xe000052e, 0x2f25: 0xe00005f8, 0x2f26: 0xe00006c3, 0x2f27: 0xe000076b, + 0x2f28: 0xe0000817, 0x2f29: 0xe00008bc, 0x2f2a: 0xada12202, 0x2f2b: 0xae412302, + 0x2f2c: 0xae812402, 0x2f2d: 0xade12502, 0x2f2e: 0xae012602, 0x2f2f: 0xae012702, + 0x2f30: 0x40023a20, 0x2f31: 0x4027ce20, 0x2f32: 0xe0000152, 0x2f33: 0x4027d020, + 0x2f34: 0xe0000155, 0x2f35: 0x4027d220, 0x2f36: 0x00279c84, 0x2f37: 0x4027a220, + 0x2f38: 0x02a68284, 0x2f39: 0x02a68884, 0x2f3a: 0x02a68a84, 0x2f3b: 0x4027cc20, + 0x2f3c: 0xe000231a, 0x2f3d: 0x40051420, 0x2f3e: 0x4027a420, 0x2f3f: 0x4027a620, + // Block 0xbd, offset 0x2f40 + 0x2f41: 0x0065768d, 0x2f42: 0x0065768e, 0x2f43: 0x0065788d, + 0x2f44: 0x0065788e, 0x2f45: 0x00657a8d, 0x2f46: 0x00657a8e, 0x2f47: 0x00657e8d, + 0x2f48: 0x00657e8e, 0x2f49: 0x0065808d, 0x2f4a: 0x0065808e, 0x2f4b: 0x0065828e, + 0x2f4c: 0xe000216a, 0x2f4d: 0x0065848e, 0x2f4e: 0xe0002188, 0x2f4f: 0x0065868e, + 0x2f50: 0xe00021b8, 0x2f51: 0x0065888e, 0x2f52: 0xe00021d6, 0x2f53: 0x00658a8e, + 0x2f54: 0xe00021e0, 0x2f55: 0x00658c8e, 0x2f56: 0xe00021ef, 0x2f57: 0x00658e8e, + 0x2f58: 0xe0002200, 0x2f59: 0x0065908e, 0x2f5a: 0xe000220f, 0x2f5b: 0x0065928e, + 0x2f5c: 0xe0002215, 0x2f5d: 0x0065948e, 0x2f5e: 0xe0002223, 0x2f5f: 0x0065968e, + 0x2f60: 0xe0002229, 0x2f61: 0x0065988e, 0x2f62: 0xe0002234, 0x2f63: 0x00659a8d, + 0x2f64: 0x00659a8e, 0x2f65: 0xe000223a, 0x2f66: 0x00659c8e, 0x2f67: 0xe0002240, + 0x2f68: 0x00659e8e, 0x2f69: 0xe000224a, 0x2f6a: 0x0065a08e, 0x2f6b: 0x0065a28e, + 0x2f6c: 0x0065a48e, 0x2f6d: 0x0065a68e, 0x2f6e: 0x0065a88e, 0x2f6f: 0x0065aa8e, + 0x2f70: 0xe0002258, 0x2f71: 0xe000225e, 0x2f72: 0x0065ac8e, 0x2f73: 0xe000227a, + 0x2f74: 0xe0002280, 0x2f75: 0x0065ae8e, 0x2f76: 0xe000229a, 0x2f77: 0xe00022a0, + 0x2f78: 0x0065b08e, 0x2f79: 0xe00022bd, 0x2f7a: 0xe00022c3, 0x2f7b: 0x0065b28e, + 0x2f7c: 0xe00022ec, 0x2f7d: 0xe00022f2, 0x2f7e: 0x0065b48e, 0x2f7f: 0x0065b68e, + // Block 0xbe, offset 0x2f80 + 0x2f80: 0x0065b88e, 0x2f81: 0x0065ba8e, 0x2f82: 0x0065bc8e, 0x2f83: 0x0065be8d, + 0x2f84: 0x0065be8e, 0x2f85: 0x0065c08d, 0x2f86: 0x0065c08e, 0x2f87: 0x0065c48d, + 0x2f88: 0x0065c48e, 0x2f89: 0x0065c68e, 0x2f8a: 0x0065c88e, 0x2f8b: 0x0065ca8e, + 0x2f8c: 0x0065cc8e, 0x2f8d: 0x0065ce8e, 0x2f8e: 0x0065d08d, 0x2f8f: 0x0065d08e, + 0x2f90: 0x0065d28e, 0x2f91: 0x0065d48e, 0x2f92: 0x0065d68e, 0x2f93: 0x0065d88e, + 0x2f94: 0xe000214c, 0x2f95: 0x0065828d, 0x2f96: 0x0065888d, + 0x2f99: 0xa0812802, 0x2f9a: 0xa0812902, 0x2f9b: 0x40063c20, + 0x2f9c: 0x40063e20, 0x2f9d: 0x4027d420, 0x2f9e: 0xe0000158, 0x2f9f: 0xf0001616, + 0x2fa0: 0x40023c20, 0x2fa1: 0x0065768f, 0x2fa2: 0x00657691, 0x2fa3: 0x0065788f, + 0x2fa4: 0x00657891, 0x2fa5: 0x00657a8f, 0x2fa6: 0x00657a91, 0x2fa7: 0x00657e8f, + 0x2fa8: 0x00657e91, 0x2fa9: 0x0065808f, 0x2faa: 0x00658091, 0x2fab: 0x00658291, + 0x2fac: 0xe000216d, 0x2fad: 0x00658491, 0x2fae: 0xe000218b, 0x2faf: 0x00658691, + 0x2fb0: 0xe00021bb, 0x2fb1: 0x00658891, 0x2fb2: 0xe00021d9, 0x2fb3: 0x00658a91, + 0x2fb4: 0xe00021e3, 0x2fb5: 0x00658c91, 0x2fb6: 0xe00021f2, 0x2fb7: 0x00658e91, + 0x2fb8: 0xe0002203, 0x2fb9: 0x00659091, 0x2fba: 0xe0002212, 0x2fbb: 0x00659291, + 0x2fbc: 0xe0002218, 0x2fbd: 0x00659491, 0x2fbe: 0xe0002226, 0x2fbf: 0x00659691, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0xe000222c, 0x2fc1: 0x00659891, 0x2fc2: 0xe0002237, 0x2fc3: 0x00659a8f, + 0x2fc4: 0x00659a91, 0x2fc5: 0xe000223d, 0x2fc6: 0x00659c91, 0x2fc7: 0xe0002243, + 0x2fc8: 0x00659e91, 0x2fc9: 0xe000224d, 0x2fca: 0x0065a091, 0x2fcb: 0x0065a291, + 0x2fcc: 0x0065a491, 0x2fcd: 0x0065a691, 0x2fce: 0x0065a891, 0x2fcf: 0x0065aa91, + 0x2fd0: 0xe000225b, 0x2fd1: 0xe0002261, 0x2fd2: 0x0065ac91, 0x2fd3: 0xe000227d, + 0x2fd4: 0xe0002283, 0x2fd5: 0x0065ae91, 0x2fd6: 0xe000229d, 0x2fd7: 0xe00022a3, + 0x2fd8: 0x0065b091, 0x2fd9: 0xe00022c0, 0x2fda: 0xe00022c6, 0x2fdb: 0x0065b291, + 0x2fdc: 0xe00022ef, 0x2fdd: 0xe00022f5, 0x2fde: 0x0065b491, 0x2fdf: 0x0065b691, + 0x2fe0: 0x0065b891, 0x2fe1: 0x0065ba91, 0x2fe2: 0x0065bc91, 0x2fe3: 0x0065be8f, + 0x2fe4: 0x0065be91, 0x2fe5: 0x0065c08f, 0x2fe6: 0x0065c091, 0x2fe7: 0x0065c48f, + 0x2fe8: 0x0065c491, 0x2fe9: 0x0065c691, 0x2fea: 0x0065c891, 0x2feb: 0x0065ca91, + 0x2fec: 0x0065cc91, 0x2fed: 0x0065ce91, 0x2fee: 0x0065d08f, 0x2fef: 0x0065d091, + 0x2ff0: 0x0065d291, 0x2ff1: 0x0065d491, 0x2ff2: 0x0065d691, 0x2ff3: 0x0065d891, + 0x2ff4: 0xe000214f, 0x2ff5: 0x0065828f, 0x2ff6: 0x0065888f, 0x2ff7: 0xe000236a, + 0x2ff8: 0xe0002371, 0x2ff9: 0xe0002374, 0x2ffa: 0xe0002377, 0x2ffb: 0x40023e20, + 0x2ffc: 0x4027d620, 0x2ffd: 0x4027d820, 0x2ffe: 0xe000015b, 0x2fff: 0xf0001616, + // Block 0xc0, offset 0x3000 + 0x3005: 0x4065da20, 0x3006: 0x4065dc20, 0x3007: 0x4065de20, + 0x3008: 0x4065e020, 0x3009: 0x4065e420, 0x300a: 0x4065e620, 0x300b: 0x4065e820, + 0x300c: 0x4065ea20, 0x300d: 0x4065ec20, 0x300e: 0x4065ee20, 0x300f: 0x4065f420, + 0x3010: 0x4065f620, 0x3011: 0x4065f820, 0x3012: 0x4065fa20, 0x3013: 0x4065fe20, + 0x3014: 0x40660020, 0x3015: 0x40660220, 0x3016: 0x40660420, 0x3017: 0x40660620, + 0x3018: 0x40660820, 0x3019: 0x40660a20, 0x301a: 0x40661220, 0x301b: 0x40661420, + 0x301c: 0x40661820, 0x301d: 0x40661a20, 0x301e: 0x40661e20, 0x301f: 0x40662020, + 0x3020: 0x40662220, 0x3021: 0x40662420, 0x3022: 0x40662620, 0x3023: 0x40662820, + 0x3024: 0x40662a20, 0x3025: 0x40662e20, 0x3026: 0x40663620, 0x3027: 0x40663820, + 0x3028: 0x40663a20, 0x3029: 0x40663c20, 0x302a: 0x4065e220, 0x302b: 0x4065f020, + 0x302c: 0x4065fc20, 0x302d: 0x40663e20, + 0x3031: 0x0062ac84, 0x3032: 0x0062ae84, 0x3033: 0x00646884, + 0x3034: 0x0062b084, 0x3035: 0x00646c84, 0x3036: 0x00646e84, 0x3037: 0x0062b284, + 0x3038: 0x0062b484, 0x3039: 0x0062b684, 0x303a: 0x00647484, 0x303b: 0x00647684, + 0x303c: 0x00647884, 0x303d: 0x00647a84, 0x303e: 0x00647c84, 0x303f: 0x00647e84, + // Block 0xc1, offset 0x3040 + 0x3040: 0x0062e084, 0x3041: 0x0062b884, 0x3042: 0x0062ba84, 0x3043: 0x0062bc84, + 0x3044: 0x0062ee84, 0x3045: 0x0062be84, 0x3046: 0x0062c084, 0x3047: 0x0062c284, + 0x3048: 0x0062c484, 0x3049: 0x0062c684, 0x304a: 0x0062c884, 0x304b: 0x0062ca84, + 0x304c: 0x0062cc84, 0x304d: 0x0062ce84, 0x304e: 0x0062d084, 0x304f: 0x0063a884, + 0x3050: 0x0063aa84, 0x3051: 0x0063ac84, 0x3052: 0x0063ae84, 0x3053: 0x0063b084, + 0x3054: 0x0063b284, 0x3055: 0x0063b484, 0x3056: 0x0063b684, 0x3057: 0x0063b884, + 0x3058: 0x0063ba84, 0x3059: 0x0063bc84, 0x305a: 0x0063be84, 0x305b: 0x0063c084, + 0x305c: 0x0063c284, 0x305d: 0x0063c484, 0x305e: 0x0063c684, 0x305f: 0x0063c884, + 0x3060: 0x0063ca84, 0x3061: 0x0063cc84, 0x3062: 0x0063ce84, 0x3063: 0x0063d084, + 0x3064: 0x0063a684, 0x3065: 0x0062d484, 0x3066: 0x0062d684, 0x3067: 0x0064a284, + 0x3068: 0x0064a484, 0x3069: 0x0064ac84, 0x306a: 0x0064b084, 0x306b: 0x0064ba84, + 0x306c: 0x0064c284, 0x306d: 0x0064c684, 0x306e: 0x0062e484, 0x306f: 0x0064ce84, + 0x3070: 0x0064d284, 0x3071: 0x0062e684, 0x3072: 0x0062e884, 0x3073: 0x0062ec84, + 0x3074: 0x0062f084, 0x3075: 0x0062f284, 0x3076: 0x0062fa84, 0x3077: 0x0062fe84, + 0x3078: 0x00630284, 0x3079: 0x00630484, 0x307a: 0x00630684, 0x307b: 0x00630884, + 0x307c: 0x00630a84, 0x307d: 0x00631084, 0x307e: 0x00631884, 0x307f: 0x00632c84, + // Block 0xc2, offset 0x3080 + 0x3080: 0x00633a84, 0x3081: 0x00634484, 0x3082: 0x0064f684, 0x3083: 0x0064f884, + 0x3084: 0x00635a84, 0x3085: 0x00635c84, 0x3086: 0x00635e84, 0x3087: 0x0063ee84, + 0x3088: 0x0063f084, 0x3089: 0x0063f684, 0x308a: 0x00640884, 0x308b: 0x00640a84, + 0x308c: 0x00640e84, 0x308d: 0x00642284, 0x308e: 0x00642884, + 0x3090: 0x4027a820, 0x3091: 0x4027aa20, 0x3092: 0x029c0094, 0x3093: 0x029d1894, + 0x3094: 0x029c1294, 0x3095: 0x02adb694, 0x3096: 0x029c1494, 0x3097: 0x029c5a94, + 0x3098: 0x029c1694, 0x3099: 0x02ea6494, 0x309a: 0x029cb294, 0x309b: 0x029c3294, + 0x309c: 0x029c0294, 0x309d: 0x02b25294, 0x309e: 0x02ae6094, 0x309f: 0x029d7494, + 0x30a0: 0xe000237a, 0x30a1: 0xe0002383, 0x30a2: 0xe0002380, 0x30a3: 0xe000237d, + 0x30a4: 0x40661c20, 0x30a5: 0xe000238c, 0x30a6: 0x40661620, 0x30a7: 0xe0002389, + 0x30a8: 0xe000239e, 0x30a9: 0xe0002386, 0x30aa: 0xe0002395, 0x30ab: 0xe000239b, + 0x30ac: 0x40663420, 0x30ad: 0x4065f220, 0x30ae: 0xe000238f, 0x30af: 0xe0002392, + 0x30b0: 0x40663020, 0x30b1: 0x40663220, 0x30b2: 0x40662c20, 0x30b3: 0xe0002398, + 0x30b4: 0x0065dc99, 0x30b5: 0x0065e699, 0x30b6: 0x0065ee99, 0x30b7: 0x0065f499, + 0x30b8: 0x40660c20, 0x30b9: 0x40660e20, 0x30ba: 0x40661020, + // Block 0xc3, offset 0x30c0 + 0x30c0: 0x40275220, 0x30c1: 0x40275420, 0x30c2: 0x40275620, 0x30c3: 0x40275820, + 0x30c4: 0x40275a20, 0x30c5: 0x40275c20, 0x30c6: 0x40275e20, 0x30c7: 0x40276020, + 0x30c8: 0x40276220, 0x30c9: 0x40276420, 0x30ca: 0x40276620, 0x30cb: 0x40276820, + 0x30cc: 0x40276a20, 0x30cd: 0x40276c20, 0x30ce: 0x40276e20, 0x30cf: 0x40277020, + 0x30d0: 0x40277220, 0x30d1: 0x40277420, 0x30d2: 0x40277620, 0x30d3: 0x40277820, + 0x30d4: 0x40277a20, 0x30d5: 0x40277c20, 0x30d6: 0x40277e20, 0x30d7: 0x40278020, + 0x30d8: 0x40278220, 0x30d9: 0x40278420, 0x30da: 0x40278620, 0x30db: 0x40278820, + 0x30dc: 0x40278a20, 0x30dd: 0x40278c20, 0x30de: 0x40278e20, 0x30df: 0x40279020, + 0x30e0: 0x40279220, 0x30e1: 0x40279420, 0x30e2: 0x40279620, 0x30e3: 0x40279820, + 0x30f0: 0x0065868f, 0x30f1: 0x00658e8f, 0x30f2: 0x0065908f, 0x30f3: 0x00659e8f, + 0x30f4: 0x0065a48f, 0x30f5: 0x0065aa8f, 0x30f6: 0x0065ac8f, 0x30f7: 0x0065ae8f, + 0x30f8: 0x0065b08f, 0x30f9: 0x0065b28f, 0x30fa: 0x0065b88f, 0x30fb: 0x0065c68f, + 0x30fc: 0x0065c88f, 0x30fd: 0x0065ca8f, 0x30fe: 0x0065cc8f, 0x30ff: 0x0065ce8f, + // Block 0xc4, offset 0x3100 + 0x3100: 0xf0000404, 0x3101: 0xf0000404, 0x3102: 0xf0000404, 0x3103: 0xf0000404, + 0x3104: 0xf0000404, 0x3105: 0xf0000404, 0x3106: 0xf0000404, 0x3107: 0xf0000404, + 0x3108: 0xf0000404, 0x3109: 0xf0000404, 0x310a: 0xf0000404, 0x310b: 0xf0000404, + 0x310c: 0xf0000404, 0x310d: 0xf0000404, 0x310e: 0xe000004c, 0x310f: 0xe0000051, + 0x3110: 0xe0000056, 0x3111: 0xe000005b, 0x3112: 0xe0000060, 0x3113: 0xe0000065, + 0x3114: 0xe000006a, 0x3115: 0xe000006f, 0x3116: 0xe0000083, 0x3117: 0xe000008d, + 0x3118: 0xe0000092, 0x3119: 0xe0000097, 0x311a: 0xe000009c, 0x311b: 0xe00000a1, + 0x311c: 0xe0000088, 0x311d: 0xe0000074, 0x311e: 0xe000007c, + 0x3120: 0xf0000404, 0x3121: 0xf0000404, 0x3122: 0xf0000404, 0x3123: 0xf0000404, + 0x3124: 0xf0000404, 0x3125: 0xf0000404, 0x3126: 0xf0000404, 0x3127: 0xf0000404, + 0x3128: 0xf0000404, 0x3129: 0xf0000404, 0x312a: 0xf0000404, 0x312b: 0xf0000404, + 0x312c: 0xf0000404, 0x312d: 0xf0000404, 0x312e: 0xf0000404, 0x312f: 0xf0000404, + 0x3130: 0xf0000404, 0x3131: 0xf0000404, 0x3132: 0xf0000404, 0x3133: 0xf0000404, + 0x3134: 0xf0000404, 0x3135: 0xf0000404, 0x3136: 0xf0000404, 0x3137: 0xf0000404, + 0x3138: 0xf0000404, 0x3139: 0xf0000404, 0x313a: 0xf0000404, 0x313b: 0xf0000404, + 0x313c: 0xf0000404, 0x313d: 0xf0000404, 0x313e: 0xf0000404, 0x313f: 0xf0000404, + // Block 0xc5, offset 0x3140 + 0x3140: 0xf0000404, 0x3141: 0xf0000404, 0x3142: 0xf0000404, 0x3143: 0xf0000404, + 0x3144: 0x02aa9e86, 0x3145: 0x02bcf886, 0x3146: 0x02cb0e86, 0x3147: 0x02f71e86, + 0x3148: 0xe00002e3, 0x3149: 0xe00003d8, 0x314a: 0xe00004b3, 0x314b: 0xe000057d, + 0x314c: 0xe0000648, 0x314d: 0xe00006f0, 0x314e: 0xe000079c, 0x314f: 0xe0000841, + 0x3150: 0xe0000ec0, 0x3151: 0xf0000606, 0x3152: 0xf0000606, 0x3153: 0xf0000606, + 0x3154: 0xf0000606, 0x3155: 0xf0000606, 0x3156: 0xf0000606, 0x3157: 0xf0000606, + 0x3158: 0xf0000606, 0x3159: 0xf0000606, 0x315a: 0xf0000606, 0x315b: 0xf0000606, + 0x315c: 0xf0000606, 0x315d: 0xf0000606, 0x315e: 0xf0000606, 0x315f: 0xf0000606, + 0x3160: 0x0062ac86, 0x3161: 0x0062b086, 0x3162: 0x0062b286, 0x3163: 0x0062b686, + 0x3164: 0x0062b886, 0x3165: 0x0062ba86, 0x3166: 0x0062be86, 0x3167: 0x0062c286, + 0x3168: 0x0062c486, 0x3169: 0x0062c886, 0x316a: 0x0062ca86, 0x316b: 0x0062cc86, + 0x316c: 0x0062ce86, 0x316d: 0x0062d086, 0x316e: 0xf0000606, 0x316f: 0xf0000606, + 0x3170: 0xf0000606, 0x3171: 0xf0000606, 0x3172: 0xf0000606, 0x3173: 0xf0000606, + 0x3174: 0xf0000606, 0x3175: 0xf0000606, 0x3176: 0xf0000606, 0x3177: 0xf0000606, + 0x3178: 0xf0000606, 0x3179: 0xf0000606, 0x317a: 0xf0000606, 0x317b: 0xf0000606, + 0x317c: 0xe0002127, 0x317d: 0xe0002122, 0x317e: 0xf0000606, 0x317f: 0x4027ac20, + // Block 0xc6, offset 0x3180 + 0x3180: 0x029c0086, 0x3181: 0x029d1886, 0x3182: 0x029c1286, 0x3183: 0x02adb686, + 0x3184: 0x029d2886, 0x3185: 0x02a2da86, 0x3186: 0x029c0686, 0x3187: 0x02a2d686, + 0x3188: 0x029cba86, 0x3189: 0x02a68286, 0x318a: 0x02ce1086, 0x318b: 0x02e0d686, + 0x318c: 0x02d86886, 0x318d: 0x02ce5086, 0x318e: 0x0323a286, 0x318f: 0x02ae3e86, + 0x3190: 0x02cbca86, 0x3191: 0x02d05486, 0x3192: 0x02ce1286, 0x3193: 0x02f27c86, + 0x3194: 0x02a81a86, 0x3195: 0x02e4f286, 0x3196: 0x03194286, 0x3197: 0x02f2ba86, + 0x3198: 0x02a56886, 0x3199: 0x02f3b086, 0x319a: 0x02ea6e86, 0x319b: 0x02b2e686, + 0x319c: 0x0320d286, 0x319d: 0x02a25486, 0x319e: 0x02a6e086, 0x319f: 0x02d9d086, + 0x31a0: 0x03300a86, 0x31a1: 0x029e2286, 0x31a2: 0x02a33286, 0x31a3: 0x02d6c686, + 0x31a4: 0x029c1486, 0x31a5: 0x029c5a86, 0x31a6: 0x029c1686, 0x31a7: 0x02bbcc86, + 0x31a8: 0x02a7e686, 0x31a9: 0x02a67686, 0x31aa: 0x02b72e86, 0x31ab: 0x02b6cc86, + 0x31ac: 0x02edc686, 0x31ad: 0x029e0286, 0x31ae: 0x03198e86, 0x31af: 0x02a6a886, + 0x31b0: 0x02b23886, 0x31b1: 0xf0000606, 0x31b2: 0xf0000606, 0x31b3: 0xf0000606, + 0x31b4: 0xf0000606, 0x31b5: 0xf0000606, 0x31b6: 0xf0000606, 0x31b7: 0xf0000606, + 0x31b8: 0xf0000606, 0x31b9: 0xf0000606, 0x31ba: 0xf0000606, 0x31bb: 0xf0000606, + 0x31bc: 0xf0000606, 0x31bd: 0xf0000606, 0x31be: 0xf0000606, 0x31bf: 0xf0000606, + // Block 0xc7, offset 0x31c0 + 0x31c0: 0xf0001f04, 0x31c1: 0xf0001f04, 0x31c2: 0xf0001f04, 0x31c3: 0xf0001f04, + 0x31c4: 0xf0001f04, 0x31c5: 0xf0001f04, 0x31c6: 0xf0001f04, 0x31c7: 0xf0001f04, + 0x31c8: 0xf0001f04, 0x31c9: 0xf0000404, 0x31ca: 0xf0000404, 0x31cb: 0xf0000404, + 0x31cc: 0xf0001c1d, 0x31cd: 0xe0000b85, 0x31ce: 0xf0001d1c, 0x31cf: 0xe0000d14, + 0x31d0: 0x00657693, 0x31d1: 0x00657893, 0x31d2: 0x00657a93, 0x31d3: 0x00657e93, + 0x31d4: 0x00658093, 0x31d5: 0x00658293, 0x31d6: 0x00658493, 0x31d7: 0x00658693, + 0x31d8: 0x00658893, 0x31d9: 0x00658a93, 0x31da: 0x00658c93, 0x31db: 0x00658e93, + 0x31dc: 0x00659093, 0x31dd: 0x00659293, 0x31de: 0x00659493, 0x31df: 0x00659693, + 0x31e0: 0x00659893, 0x31e1: 0x00659a93, 0x31e2: 0x00659c93, 0x31e3: 0x00659e93, + 0x31e4: 0x0065a093, 0x31e5: 0x0065a293, 0x31e6: 0x0065a493, 0x31e7: 0x0065a693, + 0x31e8: 0x0065a893, 0x31e9: 0x0065aa93, 0x31ea: 0x0065ac93, 0x31eb: 0x0065ae93, + 0x31ec: 0x0065b093, 0x31ed: 0x0065b293, 0x31ee: 0x0065b493, 0x31ef: 0x0065b693, + 0x31f0: 0x0065b893, 0x31f1: 0x0065ba93, 0x31f2: 0x0065bc93, 0x31f3: 0x0065be93, + 0x31f4: 0x0065c093, 0x31f5: 0x0065c493, 0x31f6: 0x0065c693, 0x31f7: 0x0065c893, + 0x31f8: 0x0065ca93, 0x31f9: 0x0065cc93, 0x31fa: 0x0065ce93, 0x31fb: 0x0065d093, + 0x31fc: 0x0065d293, 0x31fd: 0x0065d493, 0x31fe: 0x0065d693, + // Block 0xc8, offset 0x3200 + 0x3200: 0xe0002131, 0x3201: 0xe0002137, 0x3202: 0xe000213c, 0x3203: 0xe000212d, + 0x3204: 0xe0002142, 0x3205: 0xe0002148, 0x3206: 0xe0002152, 0x3207: 0xe000215b, + 0x3208: 0xe0002156, 0x3209: 0xe0002166, 0x320a: 0xe0002162, 0x320b: 0xe0002170, + 0x320c: 0xe0002174, 0x320d: 0xe0002179, 0x320e: 0xe000217e, 0x320f: 0xe0002183, + 0x3210: 0xe000218e, 0x3211: 0xe0002193, 0x3212: 0xe0002198, 0x3213: 0xe000219d, + 0x3214: 0xf0001c1c, 0x3215: 0xe00021a4, 0x3216: 0xe00021ab, 0x3217: 0xe00021b2, + 0x3218: 0xe00021be, 0x3219: 0xe00021c3, 0x321a: 0xe00021ca, 0x321b: 0xe00021d1, + 0x321c: 0xe00021dc, 0x321d: 0xe00021eb, 0x321e: 0xe00021e6, 0x321f: 0xe00021f5, + 0x3220: 0xe00021fa, 0x3221: 0xe0002209, 0x3222: 0xe000221b, 0x3223: 0xe000221f, + 0x3224: 0xe000222f, 0x3225: 0xe0002246, 0x3226: 0xe0002250, 0x3227: 0xf0001c1c, + 0x3228: 0xf0001c1c, 0x3229: 0xe0002254, 0x322a: 0xe0002276, 0x322b: 0xe0002264, + 0x322c: 0xe000226b, 0x322d: 0xe0002270, 0x322e: 0xe0002286, 0x322f: 0xe000228d, + 0x3230: 0xe0002292, 0x3231: 0xe0002296, 0x3232: 0xe00022a6, 0x3233: 0xe00022ad, + 0x3234: 0xe00022b2, 0x3235: 0xe00022b9, 0x3236: 0xe00022d4, 0x3237: 0xe00022da, + 0x3238: 0xe00022de, 0x3239: 0xe00022e3, 0x323a: 0xe00022e7, 0x323b: 0xe00022c9, + 0x323c: 0xe00022cf, 0x323d: 0xe0002300, 0x323e: 0xe0002306, 0x323f: 0xf0001c1c, + // Block 0xc9, offset 0x3240 + 0x3240: 0xe000230b, 0x3241: 0xe00022f8, 0x3242: 0xe00022fc, 0x3243: 0xe0002311, + 0x3244: 0xe0002316, 0x3245: 0xe000231d, 0x3246: 0xe0002321, 0x3247: 0xe0002325, + 0x3248: 0xe000232b, 0x3249: 0xf0001c1c, 0x324a: 0xe0002330, 0x324b: 0xe000233c, + 0x324c: 0xe0002340, 0x324d: 0xe0002337, 0x324e: 0xe0002346, 0x324f: 0xe000234b, + 0x3250: 0xe000234f, 0x3251: 0xe0002353, 0x3252: 0xf0001c1c, 0x3253: 0xe000235e, + 0x3254: 0xe0002358, 0x3255: 0xf0001c1c, 0x3256: 0xe0002363, 0x3257: 0xe000236d, + 0x3258: 0xf0001f04, 0x3259: 0xf0001f04, 0x325a: 0xf0001f04, 0x325b: 0xf0001f04, + 0x325c: 0xf0001f04, 0x325d: 0xf0001f04, 0x325e: 0xf0001f04, 0x325f: 0xf0001f04, + 0x3260: 0xf0001f04, 0x3261: 0xf0001f04, 0x3262: 0xf0000404, 0x3263: 0xf0000404, + 0x3264: 0xf0000404, 0x3265: 0xf0000404, 0x3266: 0xf0000404, 0x3267: 0xf0000404, + 0x3268: 0xf0000404, 0x3269: 0xf0000404, 0x326a: 0xf0000404, 0x326b: 0xf0000404, + 0x326c: 0xf0000404, 0x326d: 0xf0000404, 0x326e: 0xf0000404, 0x326f: 0xf0000404, + 0x3270: 0xf0000404, 0x3271: 0xe0000c1e, 0x3272: 0xf0001c1c, 0x3273: 0xf0001d1d, + 0x3274: 0xe0000a31, 0x3275: 0xf0001d1c, 0x3276: 0xf0001c1c, 0x3277: 0xf0001c1c, + 0x3278: 0xe0000ac2, 0x3279: 0xe0000ac6, 0x327a: 0xf0001d1d, 0x327b: 0xf0001c1c, + 0x327c: 0xf0001c1c, 0x327d: 0xf0001c1c, 0x327e: 0xf0001c1c, 0x327f: 0xe0002431, + // Block 0xca, offset 0x3280 + 0x3280: 0xf0001d1c, 0x3281: 0xf0001d1c, 0x3282: 0xf0001d1c, 0x3283: 0xf0001d1c, + 0x3284: 0xf0001d1c, 0x3285: 0xf0001d1d, 0x3286: 0xf0001d1d, 0x3287: 0xf0001d1d, + 0x3288: 0xe0000a6b, 0x3289: 0xe0000cb4, 0x328a: 0xf0001d1c, 0x328b: 0xf0001d1c, + 0x328c: 0xf0001d1c, 0x328d: 0xf0001c1c, 0x328e: 0xf0001c1c, 0x328f: 0xf0001c1c, + 0x3290: 0xf0001c1d, 0x3291: 0xe0000cb9, 0x3292: 0xe0000d36, 0x3293: 0xe0000be3, + 0x3294: 0xe0000fc5, 0x3295: 0xf0001c1c, 0x3296: 0xf0001c1c, 0x3297: 0xf0001c1c, + 0x3298: 0xf0001c1c, 0x3299: 0xf0001c1c, 0x329a: 0xf0001c1c, 0x329b: 0xf0001c1c, + 0x329c: 0xf0001c1c, 0x329d: 0xf0001c1c, 0x329e: 0xf0001c1c, 0x329f: 0xe0000d3e, + 0x32a0: 0xe0000a72, 0x32a1: 0xf0001c1c, 0x32a2: 0xe0000cbd, 0x32a3: 0xe0000d42, + 0x32a4: 0xe0000a76, 0x32a5: 0xf0001c1c, 0x32a6: 0xe0000cc1, 0x32a7: 0xe0000d2d, + 0x32a8: 0xe0000d31, 0x32a9: 0xf0001c1d, 0x32aa: 0xe0000cc5, 0x32ab: 0xe0000d4a, + 0x32ac: 0xe0000be7, 0x32ad: 0xe0000f0b, 0x32ae: 0xe0000f0f, 0x32af: 0xe0000f15, + 0x32b0: 0xf0001c1c, 0x32b1: 0xf0001c1c, 0x32b2: 0xf0001c1c, 0x32b3: 0xf0001c1c, + 0x32b4: 0xf0001d1c, 0x32b5: 0xf0001d1c, 0x32b6: 0xf0001d1c, 0x32b7: 0xf0001d1c, + 0x32b8: 0xf0001d1c, 0x32b9: 0xf0001d1d, 0x32ba: 0xf0001d1c, 0x32bb: 0xf0001d1c, + 0x32bc: 0xf0001d1c, 0x32bd: 0xf0001d1c, 0x32be: 0xf0001d1c, 0x32bf: 0xf0001d1d, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0xf0001d1c, 0x32c1: 0xf0001d1d, 0x32c2: 0xe00009b7, 0x32c3: 0xf0001c1d, + 0x32c4: 0xf0001c1c, 0x32c5: 0xf0001c1c, 0x32c6: 0xe0000a66, 0x32c7: 0xe0000a7a, + 0x32c8: 0xf0001d1c, 0x32c9: 0xf0001c1d, 0x32ca: 0xf0001c1c, 0x32cb: 0xf0001d1d, + 0x32cc: 0xf0001c1c, 0x32cd: 0xf0001d1d, 0x32ce: 0xf0001d1d, 0x32cf: 0xf0001c1c, + 0x32d0: 0xf0001c1c, 0x32d1: 0xf0001c1c, 0x32d2: 0xe0000d0d, 0x32d3: 0xf0001c1c, + 0x32d4: 0xf0001c1c, 0x32d5: 0xe0000d3a, 0x32d6: 0xe0000d46, 0x32d7: 0xf0001d1d, + 0x32d8: 0xe0000eb0, 0x32d9: 0xe0000eb8, 0x32da: 0xf0001d1d, 0x32db: 0xf0001c1c, + 0x32dc: 0xf0001c1d, 0x32dd: 0xf0001c1d, 0x32de: 0xe00010b2, 0x32df: 0xe00009c8, + 0x32e0: 0xf0001f04, 0x32e1: 0xf0001f04, 0x32e2: 0xf0001f04, 0x32e3: 0xf0001f04, + 0x32e4: 0xf0001f04, 0x32e5: 0xf0001f04, 0x32e6: 0xf0001f04, 0x32e7: 0xf0001f04, + 0x32e8: 0xf0001f04, 0x32e9: 0xf0000404, 0x32ea: 0xf0000404, 0x32eb: 0xf0000404, + 0x32ec: 0xf0000404, 0x32ed: 0xf0000404, 0x32ee: 0xf0000404, 0x32ef: 0xf0000404, + 0x32f0: 0xf0000404, 0x32f1: 0xf0000404, 0x32f2: 0xf0000404, 0x32f3: 0xf0000404, + 0x32f4: 0xf0000404, 0x32f5: 0xf0000404, 0x32f6: 0xf0000404, 0x32f7: 0xf0000404, + 0x32f8: 0xf0000404, 0x32f9: 0xf0000404, 0x32fa: 0xf0000404, 0x32fb: 0xf0000404, + 0x32fc: 0xf0000404, 0x32fd: 0xf0000404, 0x32fe: 0xf0000404, 0x32ff: 0xe0000bdf, + // Block 0xcc, offset 0x3300 + 0x3300: 0x40196220, 0x3301: 0x40196420, 0x3302: 0x40196620, 0x3303: 0x40196820, + 0x3304: 0x40196a20, 0x3305: 0x40196c20, 0x3306: 0x40196e20, 0x3307: 0x40197020, + 0x3308: 0x40197220, 0x3309: 0x40197420, 0x330a: 0x40197620, 0x330b: 0x40197820, + 0x330c: 0x40197a20, 0x330d: 0x40197c20, 0x330e: 0x40197e20, 0x330f: 0x40198020, + 0x3310: 0x40198220, 0x3311: 0x40198420, 0x3312: 0x40198620, 0x3313: 0x40198820, + 0x3314: 0x40198a20, 0x3315: 0x40198c20, 0x3316: 0x40198e20, 0x3317: 0x40199020, + 0x3318: 0x40199220, 0x3319: 0x40199420, 0x331a: 0x40199620, 0x331b: 0x40199820, + 0x331c: 0x40199a20, 0x331d: 0x40199c20, 0x331e: 0x40199e20, 0x331f: 0x4019a020, + 0x3320: 0x4019a220, 0x3321: 0x4019a420, 0x3322: 0x4019a620, 0x3323: 0x4019a820, + 0x3324: 0x4019aa20, 0x3325: 0x4019ac20, 0x3326: 0x4019ae20, 0x3327: 0x4019b020, + 0x3328: 0x4019b220, 0x3329: 0x4019b420, 0x332a: 0x4019b620, 0x332b: 0x4019b820, + 0x332c: 0x4019ba20, 0x332d: 0x4019bc20, 0x332e: 0x4019be20, 0x332f: 0x4019c020, + 0x3330: 0x4019c220, 0x3331: 0x4019c420, 0x3332: 0x4019c620, 0x3333: 0x4019c820, + 0x3334: 0x4019ca20, 0x3335: 0x4019cc20, 0x3336: 0x4019ce20, 0x3337: 0x4019d020, + 0x3338: 0x4019d220, 0x3339: 0x4019d420, 0x333a: 0x4019d620, 0x333b: 0x4019d820, + 0x333c: 0x4019da20, 0x333d: 0x4019dc20, 0x333e: 0x4019de20, 0x333f: 0x4019e020, + // Block 0xcd, offset 0x3340 + 0x3340: 0x40664020, 0x3341: 0x40664220, 0x3342: 0x40664420, 0x3343: 0x40664620, + 0x3344: 0x40664820, 0x3345: 0x40664a20, 0x3346: 0x40664c20, 0x3347: 0x40664e20, + 0x3348: 0x40665020, 0x3349: 0x40665220, 0x334a: 0x40665420, 0x334b: 0x40665620, + 0x334c: 0x40665820, 0x334d: 0x40665a20, 0x334e: 0x40665c20, 0x334f: 0x40665e20, + 0x3350: 0x40666020, 0x3351: 0x40666220, 0x3352: 0x40666420, 0x3353: 0x40666620, + 0x3354: 0x40666820, 0x3355: 0x40666a20, 0x3356: 0x40666c20, 0x3357: 0x40666e20, + 0x3358: 0x40667020, 0x3359: 0x40667220, 0x335a: 0x40667420, 0x335b: 0x40667620, + 0x335c: 0x40667820, 0x335d: 0x40667a20, 0x335e: 0x40667c20, 0x335f: 0x40667e20, + 0x3360: 0x40668020, 0x3361: 0x40668220, 0x3362: 0x40668420, 0x3363: 0x40668620, + 0x3364: 0x40668820, 0x3365: 0x40668a20, 0x3366: 0x40668c20, 0x3367: 0x40668e20, + 0x3368: 0x40669020, 0x3369: 0x40669220, 0x336a: 0x40669420, 0x336b: 0x40669620, + 0x336c: 0x40669820, 0x336d: 0x40669a20, 0x336e: 0x40669c20, 0x336f: 0x40669e20, + 0x3370: 0x4066a020, 0x3371: 0x4066a220, 0x3372: 0x4066a420, 0x3373: 0x4066a620, + 0x3374: 0x4066a820, 0x3375: 0x4066aa20, 0x3376: 0x4066ac20, 0x3377: 0x4066ae20, + 0x3378: 0x4066b020, 0x3379: 0x4066b220, 0x337a: 0x4066b420, 0x337b: 0x4066b620, + 0x337c: 0x4066b820, 0x337d: 0x4066ba20, 0x337e: 0x4066bc20, 0x337f: 0x4066be20, + // Block 0xce, offset 0x3380 + 0x3380: 0x4066c020, 0x3381: 0x4066c220, 0x3382: 0x4066c420, 0x3383: 0x4066c620, + 0x3384: 0x4066c820, 0x3385: 0x4066ca20, 0x3386: 0x4066cc20, 0x3387: 0x4066ce20, + 0x3388: 0x4066d020, 0x3389: 0x4066d220, 0x338a: 0x4066d420, 0x338b: 0x4066d620, + 0x338c: 0x4066d820, 0x338d: 0x4066da20, 0x338e: 0x4066dc20, 0x338f: 0x4066de20, + 0x3390: 0x4066e020, 0x3391: 0x4066e220, 0x3392: 0x4066e420, 0x3393: 0x4066e620, + 0x3394: 0x4066e820, 0x3395: 0x4066ea20, 0x3396: 0x4066ec20, 0x3397: 0x4066ee20, + 0x3398: 0x4066f020, 0x3399: 0x4066f220, 0x339a: 0x4066f420, 0x339b: 0x4066f620, + 0x339c: 0x4066f820, 0x339d: 0x4066fa20, 0x339e: 0x4066fc20, 0x339f: 0x4066fe20, + 0x33a0: 0x40670020, 0x33a1: 0x40670220, 0x33a2: 0x40670420, 0x33a3: 0x40670620, + 0x33a4: 0x40670820, 0x33a5: 0x40670a20, 0x33a6: 0x40670c20, 0x33a7: 0x40670e20, + 0x33a8: 0x40671020, 0x33a9: 0x40671220, 0x33aa: 0x40671420, 0x33ab: 0x40671620, + 0x33ac: 0x40671820, 0x33ad: 0x40671a20, 0x33ae: 0x40671c20, 0x33af: 0x40671e20, + 0x33b0: 0x40672020, 0x33b1: 0x40672220, 0x33b2: 0x40672420, 0x33b3: 0x40672620, + 0x33b4: 0x40672820, 0x33b5: 0x40672a20, 0x33b6: 0x40672c20, 0x33b7: 0x40672e20, + 0x33b8: 0x40673020, 0x33b9: 0x40673220, 0x33ba: 0x40673420, 0x33bb: 0x40673620, + 0x33bc: 0x40673820, 0x33bd: 0x40673a20, 0x33be: 0x40673c20, 0x33bf: 0x40673e20, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x40674020, 0x33c1: 0x40674220, 0x33c2: 0x40674420, 0x33c3: 0x40674620, + 0x33c4: 0x40674820, 0x33c5: 0x40674a20, 0x33c6: 0x40674c20, 0x33c7: 0x40674e20, + 0x33c8: 0x40675020, 0x33c9: 0x40675220, 0x33ca: 0x40675420, 0x33cb: 0x40675620, + 0x33cc: 0x40675820, 0x33cd: 0x40675a20, 0x33ce: 0x40675c20, 0x33cf: 0x40675e20, + 0x33d0: 0x40676020, 0x33d1: 0x40676220, 0x33d2: 0x40676420, 0x33d3: 0x40676620, + 0x33d4: 0x40676820, 0x33d5: 0x40676a20, 0x33d6: 0x40676c20, 0x33d7: 0x40676e20, + 0x33d8: 0x40677020, 0x33d9: 0x40677220, 0x33da: 0x40677420, 0x33db: 0x40677620, + 0x33dc: 0x40677820, 0x33dd: 0x40677a20, 0x33de: 0x40677c20, 0x33df: 0x40677e20, + 0x33e0: 0x40678020, 0x33e1: 0x40678220, 0x33e2: 0x40678420, 0x33e3: 0x40678620, + 0x33e4: 0x40678820, 0x33e5: 0x40678a20, 0x33e6: 0x40678c20, 0x33e7: 0x40678e20, + 0x33e8: 0x40679020, 0x33e9: 0x40679220, 0x33ea: 0x40679420, 0x33eb: 0x40679620, + 0x33ec: 0x40679820, 0x33ed: 0x40679a20, 0x33ee: 0x40679c20, 0x33ef: 0x40679e20, + 0x33f0: 0x4067a020, 0x33f1: 0x4067a220, 0x33f2: 0x4067a420, 0x33f3: 0x4067a620, + 0x33f4: 0x4067a820, 0x33f5: 0x4067aa20, 0x33f6: 0x4067ac20, 0x33f7: 0x4067ae20, + 0x33f8: 0x4067b020, 0x33f9: 0x4067b220, 0x33fa: 0x4067b420, 0x33fb: 0x4067b620, + 0x33fc: 0x4067b820, 0x33fd: 0x4067ba20, 0x33fe: 0x4067bc20, 0x33ff: 0x4067be20, + // Block 0xd0, offset 0x3400 + 0x3400: 0x4067c020, 0x3401: 0x4067c220, 0x3402: 0x4067c420, 0x3403: 0x4067c620, + 0x3404: 0x4067c820, 0x3405: 0x4067ca20, 0x3406: 0x4067cc20, 0x3407: 0x4067ce20, + 0x3408: 0x4067d020, 0x3409: 0x4067d220, 0x340a: 0x4067d420, 0x340b: 0x4067d620, + 0x340c: 0x4067d820, 0x340d: 0x4067da20, 0x340e: 0x4067dc20, 0x340f: 0x4067de20, + 0x3410: 0x4067e020, 0x3411: 0x4067e220, 0x3412: 0x4067e420, 0x3413: 0x4067e620, + 0x3414: 0x4067e820, 0x3415: 0x4067ea20, 0x3416: 0x4067ec20, 0x3417: 0x4067ee20, + 0x3418: 0x4067f020, 0x3419: 0x4067f220, 0x341a: 0x4067f420, 0x341b: 0x4067f620, + 0x341c: 0x4067f820, 0x341d: 0x4067fa20, 0x341e: 0x4067fc20, 0x341f: 0x4067fe20, + 0x3420: 0x40680020, 0x3421: 0x40680220, 0x3422: 0x40680420, 0x3423: 0x40680620, + 0x3424: 0x40680820, 0x3425: 0x40680a20, 0x3426: 0x40680c20, 0x3427: 0x40680e20, + 0x3428: 0x40681020, 0x3429: 0x40681220, 0x342a: 0x40681420, 0x342b: 0x40681620, + 0x342c: 0x40681820, 0x342d: 0x40681a20, 0x342e: 0x40681c20, 0x342f: 0x40681e20, + 0x3430: 0x40682020, 0x3431: 0x40682220, 0x3432: 0x40682420, 0x3433: 0x40682620, + 0x3434: 0x40682820, 0x3435: 0x40682a20, 0x3436: 0x40682c20, 0x3437: 0x40682e20, + 0x3438: 0x40683020, 0x3439: 0x40683220, 0x343a: 0x40683420, 0x343b: 0x40683620, + 0x343c: 0x40683820, 0x343d: 0x40683a20, 0x343e: 0x40683c20, 0x343f: 0x40683e20, + // Block 0xd1, offset 0x3440 + 0x3440: 0x40684020, 0x3441: 0x40684220, 0x3442: 0x40684420, 0x3443: 0x40684620, + 0x3444: 0x40684820, 0x3445: 0x40684a20, 0x3446: 0x40684c20, 0x3447: 0x40684e20, + 0x3448: 0x40685020, 0x3449: 0x40685220, 0x344a: 0x40685420, 0x344b: 0x40685620, + 0x344c: 0x40685820, 0x344d: 0x40685a20, 0x344e: 0x40685c20, 0x344f: 0x40685e20, + 0x3450: 0x40686020, 0x3451: 0x40686220, 0x3452: 0x40686420, 0x3453: 0x40686620, + 0x3454: 0x40686820, 0x3455: 0x40686a20, 0x3456: 0x40686c20, 0x3457: 0x40686e20, + 0x3458: 0x40687020, 0x3459: 0x40687220, 0x345a: 0x40687420, 0x345b: 0x40687620, + 0x345c: 0x40687820, 0x345d: 0x40687a20, 0x345e: 0x40687c20, 0x345f: 0x40687e20, + 0x3460: 0x40688020, 0x3461: 0x40688220, 0x3462: 0x40688420, 0x3463: 0x40688620, + 0x3464: 0x40688820, 0x3465: 0x40688a20, 0x3466: 0x40688c20, 0x3467: 0x40688e20, + 0x3468: 0x40689020, 0x3469: 0x40689220, 0x346a: 0x40689420, 0x346b: 0x40689620, + 0x346c: 0x40689820, 0x346d: 0x40689a20, 0x346e: 0x40689c20, 0x346f: 0x40689e20, + 0x3470: 0x4068a020, 0x3471: 0x4068a220, 0x3472: 0x4068a420, 0x3473: 0x4068a620, + 0x3474: 0x4068a820, 0x3475: 0x4068aa20, 0x3476: 0x4068ac20, 0x3477: 0x4068ae20, + 0x3478: 0x4068b020, 0x3479: 0x4068b220, 0x347a: 0x4068b420, 0x347b: 0x4068b620, + 0x347c: 0x4068b820, 0x347d: 0x4068ba20, 0x347e: 0x4068bc20, 0x347f: 0x4068be20, + // Block 0xd2, offset 0x3480 + 0x3480: 0x4068c020, 0x3481: 0x4068c220, 0x3482: 0x4068c420, 0x3483: 0x4068c620, + 0x3484: 0x4068c820, 0x3485: 0x4068ca20, 0x3486: 0x4068cc20, 0x3487: 0x4068ce20, + 0x3488: 0x4068d020, 0x3489: 0x4068d220, 0x348a: 0x4068d420, 0x348b: 0x4068d620, + 0x348c: 0x4068d820, 0x348d: 0x4068da20, 0x348e: 0x4068dc20, 0x348f: 0x4068de20, + 0x3490: 0x4068e020, 0x3491: 0x4068e220, 0x3492: 0x4068e420, 0x3493: 0x4068e620, + 0x3494: 0x4068e820, 0x3495: 0x4068ea20, 0x3496: 0x4068ec20, 0x3497: 0x4068ee20, + 0x3498: 0x4068f020, 0x3499: 0x4068f220, 0x349a: 0x4068f420, 0x349b: 0x4068f620, + 0x349c: 0x4068f820, 0x349d: 0x4068fa20, 0x349e: 0x4068fc20, 0x349f: 0x4068fe20, + 0x34a0: 0x40690020, 0x34a1: 0x40690220, 0x34a2: 0x40690420, 0x34a3: 0x40690620, + 0x34a4: 0x40690820, 0x34a5: 0x40690a20, 0x34a6: 0x40690c20, 0x34a7: 0x40690e20, + 0x34a8: 0x40691020, 0x34a9: 0x40691220, 0x34aa: 0x40691420, 0x34ab: 0x40691620, + 0x34ac: 0x40691820, 0x34ad: 0x40691a20, 0x34ae: 0x40691c20, 0x34af: 0x40691e20, + 0x34b0: 0x40692020, 0x34b1: 0x40692220, 0x34b2: 0x40692420, 0x34b3: 0x40692620, + 0x34b4: 0x40692820, 0x34b5: 0x40692a20, 0x34b6: 0x40692c20, 0x34b7: 0x40692e20, + 0x34b8: 0x40693020, 0x34b9: 0x40693220, 0x34ba: 0x40693420, 0x34bb: 0x40693620, + 0x34bc: 0x40693820, 0x34bd: 0x40693a20, 0x34be: 0x40693c20, 0x34bf: 0x40693e20, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x40694020, 0x34c1: 0x40694220, 0x34c2: 0x40694420, 0x34c3: 0x40694620, + 0x34c4: 0x40694820, 0x34c5: 0x40694a20, 0x34c6: 0x40694c20, 0x34c7: 0x40694e20, + 0x34c8: 0x40695020, 0x34c9: 0x40695220, 0x34ca: 0x40695420, 0x34cb: 0x40695620, + 0x34cc: 0x40695820, 0x34cd: 0x40695a20, 0x34ce: 0x40695c20, 0x34cf: 0x40695e20, + 0x34d0: 0x40696020, 0x34d1: 0x40696220, 0x34d2: 0x40696420, 0x34d3: 0x40696620, + 0x34d4: 0x40696820, 0x34d5: 0x40696a20, 0x34d6: 0x40696c20, 0x34d7: 0x40696e20, + 0x34d8: 0x40697020, 0x34d9: 0x40697220, 0x34da: 0x40697420, 0x34db: 0x40697620, + 0x34dc: 0x40697820, 0x34dd: 0x40697a20, 0x34de: 0x40697c20, 0x34df: 0x40697e20, + 0x34e0: 0x40698020, 0x34e1: 0x40698220, 0x34e2: 0x40698420, 0x34e3: 0x40698620, + 0x34e4: 0x40698820, 0x34e5: 0x40698a20, 0x34e6: 0x40698c20, 0x34e7: 0x40698e20, + 0x34e8: 0x40699020, 0x34e9: 0x40699220, 0x34ea: 0x40699420, 0x34eb: 0x40699620, + 0x34ec: 0x40699820, 0x34ed: 0x40699a20, 0x34ee: 0x40699c20, 0x34ef: 0x40699e20, + 0x34f0: 0x4069a020, 0x34f1: 0x4069a220, 0x34f2: 0x4069a420, 0x34f3: 0x4069a620, + 0x34f4: 0x4069a820, 0x34f5: 0x4069aa20, 0x34f6: 0x4069ac20, 0x34f7: 0x4069ae20, + 0x34f8: 0x4069b020, 0x34f9: 0x4069b220, 0x34fa: 0x4069b420, 0x34fb: 0x4069b620, + 0x34fc: 0x4069b820, 0x34fd: 0x4069ba20, 0x34fe: 0x4069bc20, 0x34ff: 0x4069be20, + // Block 0xd4, offset 0x3500 + 0x3500: 0x4069c020, 0x3501: 0x4069c220, 0x3502: 0x4069c420, 0x3503: 0x4069c620, + 0x3504: 0x4069c820, 0x3505: 0x4069ca20, 0x3506: 0x4069cc20, 0x3507: 0x4069ce20, + 0x3508: 0x4069d020, 0x3509: 0x4069d220, 0x350a: 0x4069d420, 0x350b: 0x4069d620, + 0x350c: 0x4069d820, 0x350d: 0x4069da20, 0x350e: 0x4069dc20, 0x350f: 0x4069de20, + 0x3510: 0x4069e020, 0x3511: 0x4069e220, 0x3512: 0x4069e420, 0x3513: 0x4069e620, + 0x3514: 0x4069e820, 0x3515: 0x4069ea20, 0x3516: 0x4069ec20, 0x3517: 0x4069ee20, + 0x3518: 0x4069f020, 0x3519: 0x4069f220, 0x351a: 0x4069f420, 0x351b: 0x4069f620, + 0x351c: 0x4069f820, 0x351d: 0x4069fa20, 0x351e: 0x4069fc20, 0x351f: 0x4069fe20, + 0x3520: 0x406a0020, 0x3521: 0x406a0220, 0x3522: 0x406a0420, 0x3523: 0x406a0620, + 0x3524: 0x406a0820, 0x3525: 0x406a0a20, 0x3526: 0x406a0c20, 0x3527: 0x406a0e20, + 0x3528: 0x406a1020, 0x3529: 0x406a1220, 0x352a: 0x406a1420, 0x352b: 0x406a1620, + 0x352c: 0x406a1820, 0x352d: 0x406a1a20, 0x352e: 0x406a1c20, 0x352f: 0x406a1e20, + 0x3530: 0x406a2020, 0x3531: 0x406a2220, 0x3532: 0x406a2420, 0x3533: 0x406a2620, + 0x3534: 0x406a2820, 0x3535: 0x406a2a20, 0x3536: 0x406a2c20, 0x3537: 0x406a2e20, + 0x3538: 0x406a3020, 0x3539: 0x406a3220, 0x353a: 0x406a3420, 0x353b: 0x406a3620, + 0x353c: 0x406a3820, 0x353d: 0x406a3a20, 0x353e: 0x406a3c20, 0x353f: 0x406a3e20, + // Block 0xd5, offset 0x3540 + 0x3540: 0x406a4020, 0x3541: 0x406a4220, 0x3542: 0x406a4420, 0x3543: 0x406a4620, + 0x3544: 0x406a4820, 0x3545: 0x406a4a20, 0x3546: 0x406a4c20, 0x3547: 0x406a4e20, + 0x3548: 0x406a5020, 0x3549: 0x406a5220, 0x354a: 0x406a5420, 0x354b: 0x406a5620, + 0x354c: 0x406a5820, 0x354d: 0x406a5a20, 0x354e: 0x406a5c20, 0x354f: 0x406a5e20, + 0x3550: 0x406a6020, 0x3551: 0x406a6220, 0x3552: 0x406a6420, 0x3553: 0x406a6620, + 0x3554: 0x406a6820, 0x3555: 0x406a6a20, 0x3556: 0x406a6c20, 0x3557: 0x406a6e20, + 0x3558: 0x406a7020, 0x3559: 0x406a7220, 0x355a: 0x406a7420, 0x355b: 0x406a7620, + 0x355c: 0x406a7820, 0x355d: 0x406a7a20, 0x355e: 0x406a7c20, 0x355f: 0x406a7e20, + 0x3560: 0x406a8020, 0x3561: 0x406a8220, 0x3562: 0x406a8420, 0x3563: 0x406a8620, + 0x3564: 0x406a8820, 0x3565: 0x406a8a20, 0x3566: 0x406a8c20, 0x3567: 0x406a8e20, + 0x3568: 0x406a9020, 0x3569: 0x406a9220, 0x356a: 0x406a9420, 0x356b: 0x406a9620, + 0x356c: 0x406a9820, 0x356d: 0x406a9a20, 0x356e: 0x406a9c20, 0x356f: 0x406a9e20, + 0x3570: 0x406aa020, 0x3571: 0x406aa220, 0x3572: 0x406aa420, 0x3573: 0x406aa620, + 0x3574: 0x406aa820, 0x3575: 0x406aaa20, 0x3576: 0x406aac20, 0x3577: 0x406aae20, + 0x3578: 0x406ab020, 0x3579: 0x406ab220, 0x357a: 0x406ab420, 0x357b: 0x406ab620, + 0x357c: 0x406ab820, 0x357d: 0x406aba20, 0x357e: 0x406abc20, 0x357f: 0x406abe20, + // Block 0xd6, offset 0x3580 + 0x3580: 0x406ac020, 0x3581: 0x406ac220, 0x3582: 0x406ac420, 0x3583: 0x406ac620, + 0x3584: 0x406ac820, 0x3585: 0x406aca20, 0x3586: 0x406acc20, 0x3587: 0x406ace20, + 0x3588: 0x406ad020, 0x3589: 0x406ad220, 0x358a: 0x406ad420, 0x358b: 0x406ad620, + 0x358c: 0x406ad820, 0x358d: 0x406ada20, 0x358e: 0x406adc20, 0x358f: 0x406ade20, + 0x3590: 0x406ae020, 0x3591: 0x406ae220, 0x3592: 0x406ae420, 0x3593: 0x406ae620, + 0x3594: 0x406ae820, 0x3595: 0x406aea20, 0x3596: 0x406aec20, 0x3597: 0x406aee20, + 0x3598: 0x406af020, 0x3599: 0x406af220, 0x359a: 0x406af420, 0x359b: 0x406af620, + 0x359c: 0x406af820, 0x359d: 0x406afa20, 0x359e: 0x406afc20, 0x359f: 0x406afe20, + 0x35a0: 0x406b0020, 0x35a1: 0x406b0220, 0x35a2: 0x406b0420, 0x35a3: 0x406b0620, + 0x35a4: 0x406b0820, 0x35a5: 0x406b0a20, 0x35a6: 0x406b0c20, 0x35a7: 0x406b0e20, + 0x35a8: 0x406b1020, 0x35a9: 0x406b1220, 0x35aa: 0x406b1420, 0x35ab: 0x406b1620, + 0x35ac: 0x406b1820, 0x35ad: 0x406b1a20, 0x35ae: 0x406b1c20, 0x35af: 0x406b1e20, + 0x35b0: 0x406b2020, 0x35b1: 0x406b2220, 0x35b2: 0x406b2420, 0x35b3: 0x406b2620, + 0x35b4: 0x406b2820, 0x35b5: 0x406b2a20, 0x35b6: 0x406b2c20, 0x35b7: 0x406b2e20, + 0x35b8: 0x406b3020, 0x35b9: 0x406b3220, 0x35ba: 0x406b3420, 0x35bb: 0x406b3620, + 0x35bc: 0x406b3820, 0x35bd: 0x406b3a20, 0x35be: 0x406b3c20, 0x35bf: 0x406b3e20, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x406b4020, 0x35c1: 0x406b4220, 0x35c2: 0x406b4420, 0x35c3: 0x406b4620, + 0x35c4: 0x406b4820, 0x35c5: 0x406b4a20, 0x35c6: 0x406b4c20, 0x35c7: 0x406b4e20, + 0x35c8: 0x406b5020, 0x35c9: 0x406b5220, 0x35ca: 0x406b5420, 0x35cb: 0x406b5620, + 0x35cc: 0x406b5820, 0x35cd: 0x406b5a20, 0x35ce: 0x406b5c20, 0x35cf: 0x406b5e20, + 0x35d0: 0x406b6020, 0x35d1: 0x406b6220, 0x35d2: 0x406b6420, 0x35d3: 0x406b6620, + 0x35d4: 0x406b6820, 0x35d5: 0x406b6a20, 0x35d6: 0x406b6c20, 0x35d7: 0x406b6e20, + 0x35d8: 0x406b7020, 0x35d9: 0x406b7220, 0x35da: 0x406b7420, 0x35db: 0x406b7620, + 0x35dc: 0x406b7820, 0x35dd: 0x406b7a20, 0x35de: 0x406b7c20, 0x35df: 0x406b7e20, + 0x35e0: 0x406b8020, 0x35e1: 0x406b8220, 0x35e2: 0x406b8420, 0x35e3: 0x406b8620, + 0x35e4: 0x406b8820, 0x35e5: 0x406b8a20, 0x35e6: 0x406b8c20, 0x35e7: 0x406b8e20, + 0x35e8: 0x406b9020, 0x35e9: 0x406b9220, 0x35ea: 0x406b9420, 0x35eb: 0x406b9620, + 0x35ec: 0x406b9820, 0x35ed: 0x406b9a20, 0x35ee: 0x406b9c20, 0x35ef: 0x406b9e20, + 0x35f0: 0x406ba020, 0x35f1: 0x406ba220, 0x35f2: 0x406ba420, 0x35f3: 0x406ba620, + 0x35f4: 0x406ba820, 0x35f5: 0x406baa20, 0x35f6: 0x406bac20, 0x35f7: 0x406bae20, + 0x35f8: 0x406bb020, 0x35f9: 0x406bb220, 0x35fa: 0x406bb420, 0x35fb: 0x406bb620, + 0x35fc: 0x406bb820, 0x35fd: 0x406bba20, 0x35fe: 0x406bbc20, 0x35ff: 0x406bbe20, + // Block 0xd8, offset 0x3600 + 0x3600: 0x406bc020, 0x3601: 0x406bc220, 0x3602: 0x406bc420, 0x3603: 0x406bc620, + 0x3604: 0x406bc820, 0x3605: 0x406bca20, 0x3606: 0x406bcc20, 0x3607: 0x406bce20, + 0x3608: 0x406bd020, 0x3609: 0x406bd220, 0x360a: 0x406bd420, 0x360b: 0x406bd620, + 0x360c: 0x406bd820, 0x360d: 0x406bda20, 0x360e: 0x406bdc20, 0x360f: 0x406bde20, + 0x3610: 0x406be020, 0x3611: 0x406be220, 0x3612: 0x406be420, 0x3613: 0x406be620, + 0x3614: 0x406be820, 0x3615: 0x406bea20, 0x3616: 0x406bec20, 0x3617: 0x406bee20, + 0x3618: 0x406bf020, 0x3619: 0x406bf220, 0x361a: 0x406bf420, 0x361b: 0x406bf620, + 0x361c: 0x406bf820, 0x361d: 0x406bfa20, 0x361e: 0x406bfc20, 0x361f: 0x406bfe20, + 0x3620: 0x406c0020, 0x3621: 0x406c0220, 0x3622: 0x406c0420, 0x3623: 0x406c0620, + 0x3624: 0x406c0820, 0x3625: 0x406c0a20, 0x3626: 0x406c0c20, 0x3627: 0x406c0e20, + 0x3628: 0x406c1020, 0x3629: 0x406c1220, 0x362a: 0x406c1420, 0x362b: 0x406c1620, + 0x362c: 0x406c1820, 0x362d: 0x406c1a20, 0x362e: 0x406c1c20, 0x362f: 0x406c1e20, + 0x3630: 0x406c2020, 0x3631: 0x406c2220, 0x3632: 0x406c2420, 0x3633: 0x406c2620, + 0x3634: 0x406c2820, 0x3635: 0x406c2a20, 0x3636: 0x406c2c20, 0x3637: 0x406c2e20, + 0x3638: 0x406c3020, 0x3639: 0x406c3220, 0x363a: 0x406c3420, 0x363b: 0x406c3620, + 0x363c: 0x406c3820, 0x363d: 0x406c3a20, 0x363e: 0x406c3c20, 0x363f: 0x406c3e20, + // Block 0xd9, offset 0x3640 + 0x3640: 0x406c4020, 0x3641: 0x406c4220, 0x3642: 0x406c4420, 0x3643: 0x406c4620, + 0x3644: 0x406c4820, 0x3645: 0x406c4a20, 0x3646: 0x406c4c20, 0x3647: 0x406c4e20, + 0x3648: 0x406c5020, 0x3649: 0x406c5220, 0x364a: 0x406c5420, 0x364b: 0x406c5620, + 0x364c: 0x406c5820, 0x364d: 0x406c5a20, 0x364e: 0x406c5c20, 0x364f: 0x406c5e20, + 0x3650: 0x406c6020, 0x3651: 0x406c6220, 0x3652: 0x406c6420, 0x3653: 0x406c6620, + 0x3654: 0x406c6820, 0x3655: 0x406c6a20, 0x3656: 0x406c6c20, 0x3657: 0x406c6e20, + 0x3658: 0x406c7020, 0x3659: 0x406c7220, 0x365a: 0x406c7420, 0x365b: 0x406c7620, + 0x365c: 0x406c7820, 0x365d: 0x406c7a20, 0x365e: 0x406c7c20, 0x365f: 0x406c7e20, + 0x3660: 0x406c8020, 0x3661: 0x406c8220, 0x3662: 0x406c8420, 0x3663: 0x406c8620, + 0x3664: 0x406c8820, 0x3665: 0x406c8a20, 0x3666: 0x406c8c20, 0x3667: 0x406c8e20, + 0x3668: 0x406c9020, 0x3669: 0x406c9220, 0x366a: 0x406c9420, 0x366b: 0x406c9620, + 0x366c: 0x406c9820, 0x366d: 0x406c9a20, 0x366e: 0x406c9c20, 0x366f: 0x406c9e20, + 0x3670: 0x406ca020, 0x3671: 0x406ca220, 0x3672: 0x406ca420, 0x3673: 0x406ca620, + 0x3674: 0x406ca820, 0x3675: 0x406caa20, 0x3676: 0x406cac20, 0x3677: 0x406cae20, + 0x3678: 0x406cb020, 0x3679: 0x406cb220, 0x367a: 0x406cb420, 0x367b: 0x406cb620, + 0x367c: 0x406cb820, 0x367d: 0x406cba20, 0x367e: 0x406cbc20, 0x367f: 0x406cbe20, + // Block 0xda, offset 0x3680 + 0x3680: 0x406cc020, 0x3681: 0x406cc220, 0x3682: 0x406cc420, 0x3683: 0x406cc620, + 0x3684: 0x406cc820, 0x3685: 0x406cca20, 0x3686: 0x406ccc20, 0x3687: 0x406cce20, + 0x3688: 0x406cd020, 0x3689: 0x406cd220, 0x368a: 0x406cd420, 0x368b: 0x406cd620, + 0x368c: 0x406cd820, 0x368d: 0x406cda20, 0x368e: 0x406cdc20, 0x368f: 0x406cde20, + 0x3690: 0x406ce020, 0x3691: 0x406ce220, 0x3692: 0x406ce420, 0x3693: 0x406ce620, + 0x3694: 0x406ce820, 0x3695: 0x406cea20, 0x3696: 0x406cec20, 0x3697: 0x406cee20, + 0x3698: 0x406cf020, 0x3699: 0x406cf220, 0x369a: 0x406cf420, 0x369b: 0x406cf620, + 0x369c: 0x406cf820, 0x369d: 0x406cfa20, 0x369e: 0x406cfc20, 0x369f: 0x406cfe20, + 0x36a0: 0x406d0020, 0x36a1: 0x406d0220, 0x36a2: 0x406d0420, 0x36a3: 0x406d0620, + 0x36a4: 0x406d0820, 0x36a5: 0x406d0a20, 0x36a6: 0x406d0c20, 0x36a7: 0x406d0e20, + 0x36a8: 0x406d1020, 0x36a9: 0x406d1220, 0x36aa: 0x406d1420, 0x36ab: 0x406d1620, + 0x36ac: 0x406d1820, 0x36ad: 0x406d1a20, 0x36ae: 0x406d1c20, 0x36af: 0x406d1e20, + 0x36b0: 0x406d2020, 0x36b1: 0x406d2220, 0x36b2: 0x406d2420, 0x36b3: 0x406d2620, + 0x36b4: 0x406d2820, 0x36b5: 0x406d2a20, 0x36b6: 0x406d2c20, 0x36b7: 0x406d2e20, + 0x36b8: 0x406d3020, 0x36b9: 0x406d3220, 0x36ba: 0x406d3420, 0x36bb: 0x406d3620, + 0x36bc: 0x406d3820, 0x36bd: 0x406d3a20, 0x36be: 0x406d3c20, 0x36bf: 0x406d3e20, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x406d4020, 0x36c1: 0x406d4220, 0x36c2: 0x406d4420, 0x36c3: 0x406d4620, + 0x36c4: 0x406d4820, 0x36c5: 0x406d4a20, 0x36c6: 0x406d4c20, 0x36c7: 0x406d4e20, + 0x36c8: 0x406d5020, 0x36c9: 0x406d5220, 0x36ca: 0x406d5420, 0x36cb: 0x406d5620, + 0x36cc: 0x406d5820, 0x36cd: 0x406d5a20, 0x36ce: 0x406d5c20, 0x36cf: 0x406d5e20, + 0x36d0: 0x406d6020, 0x36d1: 0x406d6220, 0x36d2: 0x406d6420, 0x36d3: 0x406d6620, + 0x36d4: 0x406d6820, 0x36d5: 0x406d6a20, 0x36d6: 0x406d6c20, 0x36d7: 0x406d6e20, + 0x36d8: 0x406d7020, 0x36d9: 0x406d7220, 0x36da: 0x406d7420, 0x36db: 0x406d7620, + 0x36dc: 0x406d7820, 0x36dd: 0x406d7a20, 0x36de: 0x406d7c20, 0x36df: 0x406d7e20, + 0x36e0: 0x406d8020, 0x36e1: 0x406d8220, 0x36e2: 0x406d8420, 0x36e3: 0x406d8620, + 0x36e4: 0x406d8820, 0x36e5: 0x406d8a20, 0x36e6: 0x406d8c20, 0x36e7: 0x406d8e20, + 0x36e8: 0x406d9020, 0x36e9: 0x406d9220, 0x36ea: 0x406d9420, 0x36eb: 0x406d9620, + 0x36ec: 0x406d9820, 0x36ed: 0x406d9a20, 0x36ee: 0x406d9c20, 0x36ef: 0x406d9e20, + 0x36f0: 0x406da020, 0x36f1: 0x406da220, 0x36f2: 0x406da420, 0x36f3: 0x406da620, + 0x36f4: 0x406da820, 0x36f5: 0x406daa20, 0x36f6: 0x406dac20, 0x36f7: 0x406dae20, + 0x36f8: 0x406db020, 0x36f9: 0x406db220, 0x36fa: 0x406db420, 0x36fb: 0x406db620, + 0x36fc: 0x406db820, 0x36fd: 0x406dba20, 0x36fe: 0x406dbc20, 0x36ff: 0x406dbe20, + // Block 0xdc, offset 0x3700 + 0x3700: 0x406dc020, 0x3701: 0x406dc220, 0x3702: 0x406dc420, 0x3703: 0x406dc620, + 0x3704: 0x406dc820, 0x3705: 0x406dca20, 0x3706: 0x406dcc20, 0x3707: 0x406dce20, + 0x3708: 0x406dd020, 0x3709: 0x406dd220, 0x370a: 0x406dd420, 0x370b: 0x406dd620, + 0x370c: 0x406dd820, 0x370d: 0x406dda20, 0x370e: 0x406ddc20, 0x370f: 0x406dde20, + 0x3710: 0x406de020, 0x3711: 0x406de220, 0x3712: 0x406de420, 0x3713: 0x406de620, + 0x3714: 0x406de820, 0x3715: 0x406dea20, 0x3716: 0x406dec20, 0x3717: 0x406dee20, + 0x3718: 0x406df020, 0x3719: 0x406df220, 0x371a: 0x406df420, 0x371b: 0x406df620, + 0x371c: 0x406df820, 0x371d: 0x406dfa20, 0x371e: 0x406dfc20, 0x371f: 0x406dfe20, + 0x3720: 0x406e0020, 0x3721: 0x406e0220, 0x3722: 0x406e0420, 0x3723: 0x406e0620, + 0x3724: 0x406e0820, 0x3725: 0x406e0a20, 0x3726: 0x406e0c20, 0x3727: 0x406e0e20, + 0x3728: 0x406e1020, 0x3729: 0x406e1220, 0x372a: 0x406e1420, 0x372b: 0x406e1620, + 0x372c: 0x406e1820, 0x372d: 0x406e1a20, 0x372e: 0x406e1c20, 0x372f: 0x406e1e20, + 0x3730: 0x406e2020, 0x3731: 0x406e2220, 0x3732: 0x406e2420, 0x3733: 0x406e2620, + 0x3734: 0x406e2820, 0x3735: 0x406e2a20, 0x3736: 0x406e2c20, 0x3737: 0x406e2e20, + 0x3738: 0x406e3020, 0x3739: 0x406e3220, 0x373a: 0x406e3420, 0x373b: 0x406e3620, + 0x373c: 0x406e3820, 0x373d: 0x406e3a20, 0x373e: 0x406e3c20, 0x373f: 0x406e3e20, + // Block 0xdd, offset 0x3740 + 0x3740: 0x406e4020, 0x3741: 0x406e4220, 0x3742: 0x406e4420, 0x3743: 0x406e4620, + 0x3744: 0x406e4820, 0x3745: 0x406e4a20, 0x3746: 0x406e4c20, 0x3747: 0x406e4e20, + 0x3748: 0x406e5020, 0x3749: 0x406e5220, 0x374a: 0x406e5420, 0x374b: 0x406e5620, + 0x374c: 0x406e5820, 0x374d: 0x406e5a20, 0x374e: 0x406e5c20, 0x374f: 0x406e5e20, + 0x3750: 0x406e6020, 0x3751: 0x406e6220, 0x3752: 0x406e6420, 0x3753: 0x406e6620, + 0x3754: 0x406e6820, 0x3755: 0x406e6a20, 0x3756: 0x406e6c20, 0x3757: 0x406e6e20, + 0x3758: 0x406e7020, 0x3759: 0x406e7220, 0x375a: 0x406e7420, 0x375b: 0x406e7620, + 0x375c: 0x406e7820, 0x375d: 0x406e7a20, 0x375e: 0x406e7c20, 0x375f: 0x406e7e20, + 0x3760: 0x406e8020, 0x3761: 0x406e8220, 0x3762: 0x406e8420, 0x3763: 0x406e8620, + 0x3764: 0x406e8820, 0x3765: 0x406e8a20, 0x3766: 0x406e8c20, 0x3767: 0x406e8e20, + 0x3768: 0x406e9020, 0x3769: 0x406e9220, 0x376a: 0x406e9420, 0x376b: 0x406e9620, + 0x376c: 0x406e9820, 0x376d: 0x406e9a20, 0x376e: 0x406e9c20, 0x376f: 0x406e9e20, + 0x3770: 0x406ea020, 0x3771: 0x406ea220, 0x3772: 0x406ea420, 0x3773: 0x406ea620, + 0x3774: 0x406ea820, 0x3775: 0x406eaa20, 0x3776: 0x406eac20, 0x3777: 0x406eae20, + 0x3778: 0x406eb020, 0x3779: 0x406eb220, 0x377a: 0x406eb420, 0x377b: 0x406eb620, + 0x377c: 0x406eb820, 0x377d: 0x406eba20, 0x377e: 0x406ebc20, 0x377f: 0x406ebe20, + // Block 0xde, offset 0x3780 + 0x3780: 0x406ec020, 0x3781: 0x406ec220, 0x3782: 0x406ec420, 0x3783: 0x406ec620, + 0x3784: 0x406ec820, 0x3785: 0x406eca20, 0x3786: 0x406ecc20, 0x3787: 0x406ece20, + 0x3788: 0x406ed020, 0x3789: 0x406ed220, 0x378a: 0x406ed420, 0x378b: 0x406ed620, + 0x378c: 0x406ed820, 0x378d: 0x406eda20, 0x378e: 0x406edc20, 0x378f: 0x406ede20, + 0x3790: 0x406ee020, 0x3791: 0x406ee220, 0x3792: 0x406ee420, 0x3793: 0x406ee620, + 0x3794: 0x406ee820, 0x3795: 0x406eea20, 0x3796: 0x406eec20, 0x3797: 0x406eee20, + 0x3798: 0x406ef020, 0x3799: 0x406ef220, 0x379a: 0x406ef420, 0x379b: 0x406ef620, + 0x379c: 0x406ef820, 0x379d: 0x406efa20, 0x379e: 0x406efc20, 0x379f: 0x406efe20, + 0x37a0: 0x406f0020, 0x37a1: 0x406f0220, 0x37a2: 0x406f0420, 0x37a3: 0x406f0620, + 0x37a4: 0x406f0820, 0x37a5: 0x406f0a20, 0x37a6: 0x406f0c20, 0x37a7: 0x406f0e20, + 0x37a8: 0x406f1020, 0x37a9: 0x406f1220, 0x37aa: 0x406f1420, 0x37ab: 0x406f1620, + 0x37ac: 0x406f1820, 0x37ad: 0x406f1a20, 0x37ae: 0x406f1c20, 0x37af: 0x406f1e20, + 0x37b0: 0x406f2020, 0x37b1: 0x406f2220, 0x37b2: 0x406f2420, 0x37b3: 0x406f2620, + 0x37b4: 0x406f2820, 0x37b5: 0x406f2a20, 0x37b6: 0x406f2c20, 0x37b7: 0x406f2e20, + 0x37b8: 0x406f3020, 0x37b9: 0x406f3220, 0x37ba: 0x406f3420, 0x37bb: 0x406f3620, + 0x37bc: 0x406f3820, 0x37bd: 0x406f3a20, 0x37be: 0x406f3c20, 0x37bf: 0x406f3e20, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x406f4020, 0x37c1: 0x406f4220, 0x37c2: 0x406f4420, 0x37c3: 0x406f4620, + 0x37c4: 0x406f4820, 0x37c5: 0x406f4a20, 0x37c6: 0x406f4c20, 0x37c7: 0x406f4e20, + 0x37c8: 0x406f5020, 0x37c9: 0x406f5220, 0x37ca: 0x406f5420, 0x37cb: 0x406f5620, + 0x37cc: 0x406f5820, + 0x37d0: 0x401a9020, 0x37d1: 0x401a9220, 0x37d2: 0x401a9420, 0x37d3: 0x401a9620, + 0x37d4: 0x401a9820, 0x37d5: 0x401a9a20, 0x37d6: 0x401a9c20, 0x37d7: 0x401a9e20, + 0x37d8: 0x401aa020, 0x37d9: 0x401aa220, 0x37da: 0x401aa420, 0x37db: 0x401aa620, + 0x37dc: 0x401aa820, 0x37dd: 0x401aaa20, 0x37de: 0x401aac20, 0x37df: 0x401aae20, + 0x37e0: 0x401ab020, 0x37e1: 0x401ab220, 0x37e2: 0x401ab420, 0x37e3: 0x401ab620, + 0x37e4: 0x401ab820, 0x37e5: 0x401aba20, 0x37e6: 0x401abc20, 0x37e7: 0x401abe20, + 0x37e8: 0x401ac020, 0x37e9: 0x401ac220, 0x37ea: 0x401ac420, 0x37eb: 0x401ac620, + 0x37ec: 0x401ac820, 0x37ed: 0x401aca20, 0x37ee: 0x401acc20, 0x37ef: 0x401ace20, + 0x37f0: 0x401ad020, 0x37f1: 0x401ad220, 0x37f2: 0x401ad420, 0x37f3: 0x401ad620, + 0x37f4: 0x401ad820, 0x37f5: 0x401ada20, 0x37f6: 0x401adc20, 0x37f7: 0x401ade20, + 0x37f8: 0x401ae020, 0x37f9: 0x401ae220, 0x37fa: 0x401ae420, 0x37fb: 0x401ae620, + 0x37fc: 0x401ae820, 0x37fd: 0x401aea20, 0x37fe: 0x401aec20, 0x37ff: 0x401aee20, + // Block 0xe0, offset 0x3800 + 0x3800: 0x401af020, 0x3801: 0x401af220, 0x3802: 0x401af420, 0x3803: 0x401af620, + 0x3804: 0x401af820, 0x3805: 0x401afa20, 0x3806: 0x401afc20, + 0x3810: 0x406f6620, 0x3811: 0x406f6820, 0x3812: 0x406f6a20, 0x3813: 0x406f6c20, + 0x3814: 0x406f6e20, 0x3815: 0x406f7020, 0x3816: 0x406f7220, 0x3817: 0x406f7420, + 0x3818: 0x406f7620, 0x3819: 0x406f7820, 0x381a: 0x406f7a20, 0x381b: 0x406f7c20, + 0x381c: 0x406f7e20, 0x381d: 0x406f8020, 0x381e: 0x406f8220, 0x381f: 0x406f8420, + 0x3820: 0x406f8620, 0x3821: 0x406f8820, 0x3822: 0x406f8a20, 0x3823: 0x406f8c20, + 0x3824: 0x406f8e20, 0x3825: 0x406f9020, 0x3826: 0x406f9220, 0x3827: 0x406f9420, + 0x3828: 0x406f9620, 0x3829: 0x406f9820, 0x382a: 0x406f9e20, 0x382b: 0x406f9a20, + 0x382c: 0x406fa020, 0x382d: 0x406f9c20, 0x382e: 0x406fa220, 0x382f: 0x406fa420, + 0x3830: 0x406fa620, 0x3831: 0x406fa820, 0x3832: 0x406faa20, 0x3833: 0x406fac20, + 0x3834: 0x406fae20, 0x3835: 0x406fb020, 0x3836: 0x406fb220, 0x3837: 0x406fb420, + 0x3838: 0x406f5a20, 0x3839: 0x406f5c20, 0x383a: 0x406f5e20, 0x383b: 0x406f6020, + 0x383c: 0x406f6420, 0x383d: 0x406f6220, 0x383e: 0x40025620, 0x383f: 0x4002fe20, + // Block 0xe1, offset 0x3840 + 0x3840: 0x405b8020, 0x3841: 0x405b8220, 0x3842: 0x405b8420, 0x3843: 0x405b8620, + 0x3844: 0x405b8820, 0x3845: 0x405b8a20, 0x3846: 0x405b8c20, 0x3847: 0x405b8e20, + 0x3848: 0x405b9020, 0x3849: 0x405b9220, 0x384a: 0x405b9420, 0x384b: 0x405b9620, + 0x384c: 0x405b9820, 0x384d: 0x405b9a20, 0x384e: 0x405b9c20, 0x384f: 0x405b9e20, + 0x3850: 0x405ba020, 0x3851: 0x405ba220, 0x3852: 0x405ba420, 0x3853: 0x405ba620, + 0x3854: 0x405ba820, 0x3855: 0x405baa20, 0x3856: 0x405bac20, 0x3857: 0x405bae20, + 0x3858: 0x405bb020, 0x3859: 0x405bb220, 0x385a: 0x405bb420, 0x385b: 0x405bb620, + 0x385c: 0x405bb820, 0x385d: 0x405bba20, 0x385e: 0x405bbc20, 0x385f: 0x405bbe20, + 0x3860: 0x405bc020, 0x3861: 0x405bc220, 0x3862: 0x405bc420, 0x3863: 0x405bc620, + 0x3864: 0x405bc820, 0x3865: 0x405bca20, 0x3866: 0x405bcc20, 0x3867: 0x405bce20, + 0x3868: 0x405bd020, 0x3869: 0x405bd220, 0x386a: 0x405bd420, 0x386b: 0x405bd620, + 0x386c: 0x405bd820, 0x386d: 0x405bda20, 0x386e: 0x405bdc20, 0x386f: 0x405bde20, + 0x3870: 0x405be020, 0x3871: 0x405be220, 0x3872: 0x405be420, 0x3873: 0x405be620, + 0x3874: 0x405be820, 0x3875: 0x405bea20, 0x3876: 0x405bec20, 0x3877: 0x405bee20, + 0x3878: 0x405bf020, 0x3879: 0x405bf220, 0x387a: 0x405bf420, 0x387b: 0x405bf620, + 0x387c: 0x405bf820, 0x387d: 0x405bfa20, 0x387e: 0x405bfc20, 0x387f: 0x405bfe20, + // Block 0xe2, offset 0x3880 + 0x3880: 0x405c0020, 0x3881: 0x405c0220, 0x3882: 0x405c0420, 0x3883: 0x405c0620, + 0x3884: 0x405c0820, 0x3885: 0x405c0a20, 0x3886: 0x405c0c20, 0x3887: 0x405c0e20, + 0x3888: 0x405c1020, 0x3889: 0x405c1220, 0x388a: 0x405c1420, 0x388b: 0x405c1620, + 0x388c: 0x405c1820, 0x388d: 0x405c1a20, 0x388e: 0x405c1c20, 0x388f: 0x405c1e20, + 0x3890: 0x405c2020, 0x3891: 0x405c2220, 0x3892: 0x405c2420, 0x3893: 0x405c2620, + 0x3894: 0x405c2820, 0x3895: 0x405c2a20, 0x3896: 0x405c2c20, 0x3897: 0x405c2e20, + 0x3898: 0x405c3020, 0x3899: 0x405c3220, 0x389a: 0x405c3420, 0x389b: 0x405c3620, + 0x389c: 0x405c3820, 0x389d: 0x405c3a20, 0x389e: 0x405c3c20, 0x389f: 0x405c3e20, + 0x38a0: 0x405c4020, 0x38a1: 0x405c4220, 0x38a2: 0x405c4420, 0x38a3: 0x405c4620, + 0x38a4: 0x405c4820, 0x38a5: 0x405c4a20, 0x38a6: 0x405c4c20, 0x38a7: 0x405c4e20, + 0x38a8: 0x405c5020, 0x38a9: 0x405c5220, 0x38aa: 0x405c5420, 0x38ab: 0x405c5620, + 0x38ac: 0x405c5820, 0x38ad: 0x405c5a20, 0x38ae: 0x405c5c20, 0x38af: 0x405c5e20, + 0x38b0: 0x405c6020, 0x38b1: 0x405c6220, 0x38b2: 0x405c6420, 0x38b3: 0x405c6620, + 0x38b4: 0x405c6820, 0x38b5: 0x405c6a20, 0x38b6: 0x405c6c20, 0x38b7: 0x405c6e20, + 0x38b8: 0x405c7020, 0x38b9: 0x405c7220, 0x38ba: 0x405c7420, 0x38bb: 0x405c7620, + 0x38bc: 0x405c7820, 0x38bd: 0x405c7a20, 0x38be: 0x405c7c20, 0x38bf: 0x405c7e20, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x405c8020, 0x38c1: 0x405c8220, 0x38c2: 0x405c8420, 0x38c3: 0x405c8620, + 0x38c4: 0x405c8820, 0x38c5: 0x405c8a20, 0x38c6: 0x405c8c20, 0x38c7: 0x405c8e20, + 0x38c8: 0x405c9020, 0x38c9: 0x405c9220, 0x38ca: 0x405c9420, 0x38cb: 0x405c9620, + 0x38cc: 0x405c9820, 0x38cd: 0x405c9a20, 0x38ce: 0x405c9c20, 0x38cf: 0x405c9e20, + 0x38d0: 0x405ca020, 0x38d1: 0x405ca220, 0x38d2: 0x405ca420, 0x38d3: 0x405ca620, + 0x38d4: 0x405ca820, 0x38d5: 0x405caa20, 0x38d6: 0x405cac20, 0x38d7: 0x405cae20, + 0x38d8: 0x405cb020, 0x38d9: 0x405cb220, 0x38da: 0x405cb420, 0x38db: 0x405cb620, + 0x38dc: 0x405cb820, 0x38dd: 0x405cba20, 0x38de: 0x405cbc20, 0x38df: 0x405cbe20, + 0x38e0: 0x405cc020, 0x38e1: 0x405cc220, 0x38e2: 0x405cc420, 0x38e3: 0x405cc620, + 0x38e4: 0x405cc820, 0x38e5: 0x405cca20, 0x38e6: 0x405ccc20, 0x38e7: 0x405cce20, + 0x38e8: 0x405cd020, 0x38e9: 0x405cd220, 0x38ea: 0x405cd420, 0x38eb: 0x405cd620, + 0x38ec: 0x405cd820, 0x38ed: 0x405cda20, 0x38ee: 0x405cdc20, 0x38ef: 0x405cde20, + 0x38f0: 0x405ce020, 0x38f1: 0x405ce220, 0x38f2: 0x405ce420, 0x38f3: 0x405ce620, + 0x38f4: 0x405ce820, 0x38f5: 0x405cea20, 0x38f6: 0x405cec20, 0x38f7: 0x405cee20, + 0x38f8: 0x405cf020, 0x38f9: 0x405cf220, 0x38fa: 0x405cf420, 0x38fb: 0x405cf620, + 0x38fc: 0x405cf820, 0x38fd: 0x405cfa20, 0x38fe: 0x405cfc20, 0x38ff: 0x405cfe20, + // Block 0xe4, offset 0x3900 + 0x3900: 0x405d0020, 0x3901: 0x405d0220, 0x3902: 0x405d0420, 0x3903: 0x405d0620, + 0x3904: 0x405d0820, 0x3905: 0x405d0a20, 0x3906: 0x405d0c20, 0x3907: 0x405d0e20, + 0x3908: 0x405d1020, 0x3909: 0x405d1220, 0x390a: 0x405d1420, 0x390b: 0x405d1620, + 0x390c: 0x405d1820, 0x390d: 0x405d1a20, 0x390e: 0x405d1c20, 0x390f: 0x405d1e20, + 0x3910: 0x405d2020, 0x3911: 0x405d2220, 0x3912: 0x405d2420, 0x3913: 0x405d2620, + 0x3914: 0x405d2820, 0x3915: 0x405d2a20, 0x3916: 0x405d2c20, 0x3917: 0x405d2e20, + 0x3918: 0x405d3020, 0x3919: 0x405d3220, 0x391a: 0x405d3420, 0x391b: 0x405d3620, + 0x391c: 0x405d3820, 0x391d: 0x405d3a20, 0x391e: 0x405d3c20, 0x391f: 0x405d3e20, + 0x3920: 0x405d4020, 0x3921: 0x405d4220, 0x3922: 0x405d4420, 0x3923: 0x405d4620, + 0x3924: 0x405d4820, 0x3925: 0x405d4a20, 0x3926: 0x405d4c20, 0x3927: 0x405d4e20, + 0x3928: 0x405d5020, 0x3929: 0x405d5220, 0x392a: 0x405d5420, 0x392b: 0x405d5620, + 0x392c: 0x405d5820, 0x392d: 0x405d5a20, 0x392e: 0x405d5c20, 0x392f: 0x405d5e20, + 0x3930: 0x405d6020, 0x3931: 0x405d6220, 0x3932: 0x405d6420, 0x3933: 0x405d6620, + 0x3934: 0x405d6820, 0x3935: 0x405d6a20, 0x3936: 0x405d6c20, 0x3937: 0x405d6e20, + 0x3938: 0x405d7020, 0x3939: 0x405d7220, 0x393a: 0x405d7420, 0x393b: 0x405d7620, + 0x393c: 0x405d7820, 0x393d: 0x405d7a20, 0x393e: 0x405d7c20, 0x393f: 0x405d7e20, + // Block 0xe5, offset 0x3940 + 0x3940: 0x405d8020, 0x3941: 0x405d8220, 0x3942: 0x405d8420, 0x3943: 0x405d8620, + 0x3944: 0x405d8820, 0x3945: 0x405d8a20, 0x3946: 0x405d8c20, 0x3947: 0x405d8e20, + 0x3948: 0x405d9020, 0x3949: 0x405d9220, 0x394a: 0x405d9420, 0x394b: 0x405d9620, + 0x394c: 0x405d9820, 0x394d: 0x40025820, 0x394e: 0x40030020, 0x394f: 0x4002d820, + 0x3950: 0x005c3084, 0x3951: 0x005c5484, 0x3952: 0x005c8e84, 0x3953: 0xe00020fb, + 0x3954: 0xe00020fe, 0x3955: 0xe0002101, 0x3956: 0xe0002104, 0x3957: 0xe0002107, + 0x3958: 0xe000210a, 0x3959: 0xe000210d, 0x395a: 0xe0002110, 0x395b: 0xe0002113, + 0x395c: 0xe0002116, 0x395d: 0xe0002119, 0x395e: 0xe000211c, 0x395f: 0xe000211f, + 0x3960: 0xe00001cd, 0x3961: 0xe0000261, 0x3962: 0xe0000379, 0x3963: 0xe0000453, + 0x3964: 0xe0000528, 0x3965: 0xe00005f2, 0x3966: 0xe00006bd, 0x3967: 0xe0000765, + 0x3968: 0xe0000811, 0x3969: 0xe00008b6, 0x396a: 0x005c5c84, 0x396b: 0x005d2284, + // Block 0xe6, offset 0x3980 + 0x3980: 0x0033ec88, 0x3981: 0x4033ec20, 0x3982: 0x0033fa88, 0x3983: 0x4033fa20, + 0x3984: 0x00340488, 0x3985: 0x40340420, 0x3986: 0x00343488, 0x3987: 0x40343420, + 0x3988: 0x00344e88, 0x3989: 0x40344e20, 0x398a: 0x0035a288, 0x398b: 0x4035a220, + 0x398c: 0x0035f088, 0x398d: 0x4035f020, 0x398e: 0x00366e88, 0x398f: 0x40366e20, + 0x3990: 0x00367c88, 0x3991: 0x40367c20, 0x3992: 0x0036a688, 0x3993: 0x4036a620, + 0x3994: 0x0036c088, 0x3995: 0x4036c020, 0x3996: 0x0036c288, 0x3997: 0x4036c220, + 0x3998: 0x0036de88, 0x3999: 0x4036de20, 0x399a: 0x0036e888, 0x399b: 0x4036e820, + 0x399c: 0x0036f288, 0x399d: 0x4036f220, 0x399e: 0x00372488, 0x399f: 0x40372420, + 0x39a0: 0x00360a88, 0x39a1: 0x40360a20, 0x39a2: 0x00339e88, 0x39a3: 0x40339e20, + 0x39a4: 0x0034a288, 0x39a5: 0x4034a220, 0x39a6: 0x0034b888, 0x39a7: 0x4034b820, + 0x39a8: 0x0034ee8a, 0x39a9: 0x0034ee84, 0x39aa: 0x0034ee8a, 0x39ab: 0x0034ee84, + 0x39ac: 0x0034ee8a, 0x39ad: 0x0034ee84, 0x39ae: 0x0034ee84, 0x39af: 0xae608402, + 0x39b0: 0xa0000000, 0x39b1: 0xa0000000, 0x39b2: 0xa0000000, 0x39b3: 0x4004e020, + 0x39b4: 0x84e619e1, 0x39b5: 0x84e61a0a, 0x39b6: 0x84e61a1b, 0x39b7: 0x84e61ab9, + 0x39b8: 0x84e61b3a, 0x39b9: 0x84e61b3f, 0x39ba: 0x84e61b47, 0x39bb: 0x84e61af0, + 0x39bc: 0xae605f02, 0x39bd: 0xae605f02, 0x39be: 0x40054c20, 0x39bf: 0x40367220, + // Block 0xe7, offset 0x39c0 + 0x39c0: 0x00339488, 0x39c1: 0x40339420, 0x39c2: 0x00341288, 0x39c3: 0x40341220, + 0x39c4: 0x0033d288, 0x39c5: 0x4033d220, 0x39c6: 0x00364288, 0x39c7: 0x40364220, + 0x39c8: 0x00340e88, 0x39c9: 0x40340e20, 0x39ca: 0x00356088, 0x39cb: 0x40356020, + 0x39cc: 0x00355488, 0x39cd: 0x40355420, 0x39ce: 0x00360c88, 0x39cf: 0x40360c20, + 0x39d0: 0x00361688, 0x39d1: 0x40361620, 0x39d2: 0x00362088, 0x39d3: 0x40362020, + 0x39d4: 0x0035de88, 0x39d5: 0x4035de20, 0x39d6: 0x00366488, 0x39d7: 0x40366420, + 0x39df: 0x84e61b67, + 0x39e0: 0x405d9a20, 0x39e1: 0x405d9c20, 0x39e2: 0x405d9e20, 0x39e3: 0x405da020, + 0x39e4: 0x405da220, 0x39e5: 0x405da420, 0x39e6: 0x405da620, 0x39e7: 0x405da820, + 0x39e8: 0x405daa20, 0x39e9: 0x405dac20, 0x39ea: 0x405dae20, 0x39eb: 0x405db020, + 0x39ec: 0x405db220, 0x39ed: 0x405db420, 0x39ee: 0x405db620, 0x39ef: 0x405db820, + 0x39f0: 0x405dba20, 0x39f1: 0x405dbc20, 0x39f2: 0x405dbe20, 0x39f3: 0x405dc020, + 0x39f4: 0x405dc220, 0x39f5: 0x405dc420, 0x39f6: 0x405dc620, 0x39f7: 0x405dc820, + 0x39f8: 0x405dca20, 0x39f9: 0x405dcc20, 0x39fa: 0x405dce20, 0x39fb: 0x405dd020, + 0x39fc: 0x405dd220, 0x39fd: 0x405dd420, 0x39fe: 0x405dd620, 0x39ff: 0x405dd820, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x405dda20, 0x3a01: 0x405ddc20, 0x3a02: 0x405dde20, 0x3a03: 0x405de020, + 0x3a04: 0x405de220, 0x3a05: 0x405de420, 0x3a06: 0x405de620, 0x3a07: 0x405de820, + 0x3a08: 0x405dea20, 0x3a09: 0x405dec20, 0x3a0a: 0x405dee20, 0x3a0b: 0x405df020, + 0x3a0c: 0x405df220, 0x3a0d: 0x405df420, 0x3a0e: 0x405df620, 0x3a0f: 0x405df820, + 0x3a10: 0x405dfa20, 0x3a11: 0x405dfc20, 0x3a12: 0x405dfe20, 0x3a13: 0x405e0020, + 0x3a14: 0x405e0220, 0x3a15: 0x405e0420, 0x3a16: 0x405e0620, 0x3a17: 0x405e0820, + 0x3a18: 0x405e0a20, 0x3a19: 0x405e0c20, 0x3a1a: 0x405e0e20, 0x3a1b: 0x405e1020, + 0x3a1c: 0x405e1220, 0x3a1d: 0x405e1420, 0x3a1e: 0x405e1620, 0x3a1f: 0x405e1820, + 0x3a20: 0x405e1a20, 0x3a21: 0x405e1c20, 0x3a22: 0x405e1e20, 0x3a23: 0x405e2020, + 0x3a24: 0x405e2220, 0x3a25: 0x405e2420, 0x3a26: 0x405e2620, 0x3a27: 0x405e2820, + 0x3a28: 0x405e2a20, 0x3a29: 0x405e2c20, 0x3a2a: 0x405e2e20, 0x3a2b: 0x405e3020, + 0x3a2c: 0x405e3220, 0x3a2d: 0x405e3420, 0x3a2e: 0x405e3620, 0x3a2f: 0x405e3820, + 0x3a30: 0xae60ef02, 0x3a31: 0xae60f002, 0x3a32: 0x40038220, 0x3a33: 0x40030220, + 0x3a34: 0x4002b820, 0x3a35: 0x40025a20, 0x3a36: 0x40026a20, 0x3a37: 0x4002da20, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x4006ba20, 0x3a41: 0x4006bc20, 0x3a42: 0x4006be20, 0x3a43: 0x4006c020, + 0x3a44: 0x4006c220, 0x3a45: 0x4006c420, 0x3a46: 0x4006c620, 0x3a47: 0x4006c820, + 0x3a48: 0x4006ca20, 0x3a49: 0x4006cc20, 0x3a4a: 0x4006ce20, 0x3a4b: 0x4006d020, + 0x3a4c: 0x4006d220, 0x3a4d: 0x4006d420, 0x3a4e: 0x4006d620, 0x3a4f: 0x4006d820, + 0x3a50: 0x4006da20, 0x3a51: 0x4006dc20, 0x3a52: 0x4006de20, 0x3a53: 0x4006e020, + 0x3a54: 0x4006e220, 0x3a55: 0x4006e420, 0x3a56: 0x4006e620, 0x3a57: 0x4006e820, + 0x3a58: 0x4006ea20, 0x3a59: 0x4006ec20, 0x3a5a: 0x4006ee20, 0x3a5b: 0x4006f020, + 0x3a5c: 0x4006f220, 0x3a5d: 0x4006f420, 0x3a5e: 0x4006f620, 0x3a5f: 0x4006f820, + 0x3a60: 0x4006fa20, 0x3a61: 0x4006fc20, 0x3a62: 0x0031e488, 0x3a63: 0x4031e420, + 0x3a64: 0x0031f888, 0x3a65: 0x4031f820, 0x3a66: 0x002d8c88, 0x3a67: 0x402d8c20, + 0x3a68: 0xe0000fd5, 0x3a69: 0xe0000fd2, 0x3a6a: 0x0031ae88, 0x3a6b: 0x4031ae20, + 0x3a6c: 0x0031b088, 0x3a6d: 0x4031b020, 0x3a6e: 0x0031b288, 0x3a6f: 0x4031b220, + 0x3a70: 0x402d1020, 0x3a71: 0x402fee20, 0x3a72: 0xe00009cf, 0x3a73: 0xe00009cc, + 0x3a74: 0xe00009ff, 0x3a75: 0xe00009fc, 0x3a76: 0xe0000a05, 0x3a77: 0xe0000a02, + 0x3a78: 0xe0000a0e, 0x3a79: 0xe0000a0b, 0x3a7a: 0xe0000a15, 0x3a7b: 0xe0000a11, + 0x3a7c: 0xe0000a1c, 0x3a7d: 0xe0000a19, 0x3a7e: 0x002c6088, 0x3a7f: 0x402c6020, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x002e1488, 0x3a81: 0x402e1420, 0x3a82: 0x002e1688, 0x3a83: 0x402e1620, + 0x3a84: 0x002e1888, 0x3a85: 0x402e1820, 0x3a86: 0x002e3288, 0x3a87: 0x402e3220, + 0x3a88: 0x002e3688, 0x3a89: 0x402e3620, 0x3a8a: 0x002f1888, 0x3a8b: 0x402f1820, + 0x3a8c: 0x002f0888, 0x3a8d: 0x402f0820, 0x3a8e: 0xe0000ea1, 0x3a8f: 0xe0000e9e, + 0x3a90: 0x002f3888, 0x3a91: 0x402f3820, 0x3a92: 0x002f4688, 0x3a93: 0x402f4620, + 0x3a94: 0x002f4888, 0x3a95: 0x402f4820, 0x3a96: 0x002f5e88, 0x3a97: 0x402f5e20, + 0x3a98: 0x002f6088, 0x3a99: 0x402f6020, 0x3a9a: 0x002f8a88, 0x3a9b: 0x402f8a20, + 0x3a9c: 0x002fe488, 0x3a9d: 0x402fe420, 0x3a9e: 0x0030c888, 0x3a9f: 0x4030c820, + 0x3aa0: 0xe00010c6, 0x3aa1: 0xe00010c3, 0x3aa2: 0x00316288, 0x3aa3: 0x40316220, + 0x3aa4: 0x00319088, 0x3aa5: 0x40319020, 0x3aa6: 0x00319288, 0x3aa7: 0x40319220, + 0x3aa8: 0x00319c88, 0x3aa9: 0x40319c20, 0x3aaa: 0x00319e88, 0x3aab: 0x40319e20, + 0x3aac: 0x0031a088, 0x3aad: 0x4031a020, 0x3aae: 0x0031a288, 0x3aaf: 0x4031a220, + 0x3ab0: 0x0031a294, 0x3ab1: 0x402c9420, 0x3ab2: 0x402e6620, 0x3ab3: 0x402e9c20, + 0x3ab4: 0x402ed820, 0x3ab5: 0x402fe020, 0x3ab6: 0x402fe220, 0x3ab7: 0x40306220, + 0x3ab8: 0x4031a420, 0x3ab9: 0xe0000abc, 0x3aba: 0xe0000ab9, 0x3abb: 0xe0000b92, + 0x3abc: 0xe0000b8f, 0x3abd: 0xe0000bdc, 0x3abe: 0x002d5688, 0x3abf: 0x402d5620, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x002e7088, 0x3ac1: 0x402e7020, 0x3ac2: 0xe0000f08, 0x3ac3: 0xe0000f05, + 0x3ac4: 0xe0000f6d, 0x3ac5: 0xe0000f6a, 0x3ac6: 0xe0000fb7, 0x3ac7: 0xe0000fb4, + 0x3ac8: 0x4006fe20, 0x3ac9: 0x40070020, 0x3aca: 0x40070220, 0x3acb: 0x0031e688, + 0x3acc: 0x4031e620, 0x3acd: 0x00308888, 0x3ace: 0x402e5c20, + 0x3ad0: 0x002ec488, 0x3ad1: 0x402ec420, 0x3ad2: 0x002c4c88, 0x3ad3: 0x402c4c20, + 0x3ae0: 0xe0000bd6, 0x3ae1: 0xe0000bd3, 0x3ae2: 0xe0000ca5, 0x3ae3: 0xe0000ca2, + 0x3ae4: 0xe0000d75, 0x3ae5: 0xe0000d72, 0x3ae6: 0xe0000ee2, 0x3ae7: 0xe0000edf, + 0x3ae8: 0xe0000f4d, 0x3ae9: 0xe0000f4a, 0x3aea: 0x002d8088, + // Block 0xec, offset 0x3b00 + 0x3b38: 0xf0001414, 0x3b39: 0xe0000e97, 0x3b3a: 0x4030a820, 0x3b3b: 0x402d2020, + 0x3b3c: 0x402f4a20, 0x3b3d: 0x402e9820, 0x3b3e: 0x402db220, 0x3b3f: 0x402e9a20, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x4045aa20, 0x3b41: 0x4045ac20, 0x3b42: 0x4045ae20, 0x3b43: 0x4045b020, + 0x3b44: 0x4045b220, 0x3b45: 0x4045b420, 0x3b46: 0x820922db, 0x3b47: 0x4045b820, + 0x3b48: 0x4045ba20, 0x3b49: 0x4045bc20, 0x3b4a: 0x4045be20, 0x3b4b: 0xa000f302, + 0x3b4c: 0x4045c020, 0x3b4d: 0x4045c220, 0x3b4e: 0x4045c420, 0x3b4f: 0x4045c620, + 0x3b50: 0x4045c820, 0x3b51: 0x4045ca20, 0x3b52: 0x4045cc20, 0x3b53: 0x4045ce20, + 0x3b54: 0x4045d020, 0x3b55: 0x4045d220, 0x3b56: 0x4045d420, 0x3b57: 0x4045d620, + 0x3b58: 0x4045d820, 0x3b59: 0x4045da20, 0x3b5a: 0x4045dc20, 0x3b5b: 0x4045de20, + 0x3b5c: 0x4045e020, 0x3b5d: 0x4045e220, 0x3b5e: 0x4045e420, 0x3b5f: 0x4045e620, + 0x3b60: 0x4045e820, 0x3b61: 0x4045ea20, 0x3b62: 0x4045ec20, 0x3b63: 0x4045ee20, + 0x3b64: 0x4045f020, 0x3b65: 0x4045f220, 0x3b66: 0x4045f420, 0x3b67: 0x4045f620, + 0x3b68: 0x40075020, 0x3b69: 0x40075220, 0x3b6a: 0x40075420, 0x3b6b: 0x40075620, + 0x3b70: 0x40284820, 0x3b71: 0x40284a20, 0x3b72: 0x40284c20, 0x3b73: 0x40284e20, + 0x3b74: 0x40285020, 0x3b75: 0x40285220, 0x3b76: 0x40075820, 0x3b77: 0x40075a20, + 0x3b78: 0x4027f020, 0x3b79: 0x40075c20, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x404baa20, 0x3b81: 0x404bac20, 0x3b82: 0x404bae20, 0x3b83: 0x404bb020, + 0x3b84: 0x404bb220, 0x3b85: 0x404bb420, 0x3b86: 0x404bb620, 0x3b87: 0x404bb820, + 0x3b88: 0x404bc220, 0x3b89: 0x404bc420, 0x3b8a: 0x404bc620, 0x3b8b: 0x404bc820, + 0x3b8c: 0x404bca20, 0x3b8d: 0x404bcc20, 0x3b8e: 0x404bce20, 0x3b8f: 0x404bd020, + 0x3b90: 0x404bd220, 0x3b91: 0x404bd420, 0x3b92: 0x404bd620, 0x3b93: 0x404bd820, + 0x3b94: 0x404bdc20, 0x3b95: 0x404bde20, 0x3b96: 0x404be020, 0x3b97: 0x404be220, + 0x3b98: 0x404be820, 0x3b99: 0x404bee20, 0x3b9a: 0x404bf020, 0x3b9b: 0x404bf420, + 0x3b9c: 0x404bf620, 0x3b9d: 0x404bfc20, 0x3b9e: 0x404c0620, 0x3b9f: 0x404c0820, + 0x3ba0: 0x404c0a20, 0x3ba1: 0x404c0c20, 0x3ba2: 0x404bfe20, 0x3ba3: 0x404c0020, + 0x3ba4: 0x404c0220, 0x3ba5: 0x404c0420, 0x3ba6: 0x404c0e20, 0x3ba7: 0x404bda20, + 0x3ba8: 0x404be420, 0x3ba9: 0x404bba20, 0x3baa: 0x404bbc20, 0x3bab: 0x404bbe20, + 0x3bac: 0x404bc020, 0x3bad: 0x404be620, 0x3bae: 0x404bf220, 0x3baf: 0x404bf820, + 0x3bb0: 0x404bfa20, 0x3bb1: 0x404bea20, 0x3bb2: 0x404bec20, 0x3bb3: 0x404c1020, + 0x3bb4: 0x4005e820, 0x3bb5: 0x4005ea20, 0x3bb6: 0x40031820, 0x3bb7: 0x40031a20, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0xa000f302, 0x3bc1: 0xa000f402, 0x3bc2: 0x4045f820, 0x3bc3: 0x4045fa20, + 0x3bc4: 0x4045fc20, 0x3bc5: 0x4045fe20, 0x3bc6: 0x40460020, 0x3bc7: 0x40460220, + 0x3bc8: 0x40460420, 0x3bc9: 0x40460620, 0x3bca: 0x40460820, 0x3bcb: 0x40460a20, + 0x3bcc: 0x40460c20, 0x3bcd: 0x40460e20, 0x3bce: 0x40461020, 0x3bcf: 0x40461220, + 0x3bd0: 0x40461420, 0x3bd1: 0x40461620, 0x3bd2: 0x40461820, 0x3bd3: 0x40461a20, + 0x3bd4: 0x40461c20, 0x3bd5: 0x40461e20, 0x3bd6: 0x40462020, 0x3bd7: 0x40462220, + 0x3bd8: 0x40462420, 0x3bd9: 0x40462620, 0x3bda: 0x40462820, 0x3bdb: 0x40462a20, + 0x3bdc: 0x40462c20, 0x3bdd: 0x40462e20, 0x3bde: 0x40463020, 0x3bdf: 0x40463220, + 0x3be0: 0x40463420, 0x3be1: 0x40463620, 0x3be2: 0x40463820, 0x3be3: 0x40463a20, + 0x3be4: 0x40463c20, 0x3be5: 0x40463e20, 0x3be6: 0x40464020, 0x3be7: 0x40464220, + 0x3be8: 0x40464420, 0x3be9: 0x40464620, 0x3bea: 0x40464820, 0x3beb: 0x40464a20, + 0x3bec: 0x40464c20, 0x3bed: 0x40464e20, 0x3bee: 0x40465020, 0x3bef: 0x40465220, + 0x3bf0: 0x40465420, 0x3bf1: 0x40465620, 0x3bf2: 0x40465820, 0x3bf3: 0x40465a20, + 0x3bf4: 0x40465c20, 0x3bf5: 0x40465e20, 0x3bf6: 0x40466020, 0x3bf7: 0x40466220, + 0x3bf8: 0x40466420, 0x3bf9: 0x40466620, 0x3bfa: 0x40466820, 0x3bfb: 0x40466a20, + 0x3bfc: 0x40466c20, 0x3bfd: 0x40466e20, 0x3bfe: 0x40467020, 0x3bff: 0x40467220, + // Block 0xf0, offset 0x3c00 + 0x3c00: 0x40467420, 0x3c01: 0x40467620, 0x3c02: 0x40467820, 0x3c03: 0x40467a20, + 0x3c04: 0x8209233e, + 0x3c0e: 0x40031020, 0x3c0f: 0x40031220, + 0x3c10: 0xe000018b, 0x3c11: 0xe000021c, 0x3c12: 0xe0000337, 0x3c13: 0xe0000411, + 0x3c14: 0xe00004e6, 0x3c15: 0xe00005b0, 0x3c16: 0xe000067b, 0x3c17: 0xe0000723, + 0x3c18: 0xe00007cf, 0x3c19: 0xe0000874, + 0x3c20: 0xae600000, 0x3c21: 0xae600000, 0x3c22: 0xae600000, 0x3c23: 0xae600000, + 0x3c24: 0xae600000, 0x3c25: 0xae600000, 0x3c26: 0xae600000, 0x3c27: 0xae600000, + 0x3c28: 0xae600000, 0x3c29: 0xae600000, 0x3c2a: 0xae600000, 0x3c2b: 0xae600000, + 0x3c2c: 0xae600000, 0x3c2d: 0xae600000, 0x3c2e: 0xae600000, 0x3c2f: 0xae600000, + 0x3c30: 0xae600000, 0x3c31: 0xae600000, 0x3c32: 0x40404620, 0x3c33: 0x00404684, + 0x3c34: 0x00404684, 0x3c35: 0x00404684, 0x3c36: 0x00404684, 0x3c37: 0x00404684, + 0x3c38: 0x40056e20, 0x3c39: 0x40057020, 0x3c3a: 0x40057220, 0x3c3b: 0x40404820, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0xe00001a9, 0x3c41: 0xe000023d, 0x3c42: 0xe0000355, 0x3c43: 0xe000042f, + 0x3c44: 0xe0000504, 0x3c45: 0xe00005ce, 0x3c46: 0xe0000699, 0x3c47: 0xe0000741, + 0x3c48: 0xe00007ed, 0x3c49: 0xe0000892, 0x3c4a: 0x404dd220, 0x3c4b: 0x404dd420, + 0x3c4c: 0x404dd620, 0x3c4d: 0x404dd820, 0x3c4e: 0x404dda20, 0x3c4f: 0x404ddc20, + 0x3c50: 0x404dde20, 0x3c51: 0x404de020, 0x3c52: 0x404de220, 0x3c53: 0x404de420, + 0x3c54: 0x404de620, 0x3c55: 0x404de820, 0x3c56: 0x404dea20, 0x3c57: 0x404dec20, + 0x3c58: 0x404dee20, 0x3c59: 0x404df020, 0x3c5a: 0x404df220, 0x3c5b: 0x404df420, + 0x3c5c: 0x404df620, 0x3c5d: 0x404df820, 0x3c5e: 0x404dfa20, 0x3c5f: 0x404dfc20, + 0x3c60: 0x404dfe20, 0x3c61: 0x404e0020, 0x3c62: 0x404e0220, 0x3c63: 0x404e0420, + 0x3c64: 0x404e0620, 0x3c65: 0x404e0820, 0x3c66: 0x404e0a20, 0x3c67: 0x404e0c20, + 0x3c68: 0x404e0e20, 0x3c69: 0x404e1020, 0x3c6a: 0x404e1220, 0x3c6b: 0xadc10f02, + 0x3c6c: 0xadc11002, 0x3c6d: 0xadc11102, 0x3c6e: 0x4005f420, 0x3c6f: 0x40032020, + 0x3c70: 0x404d8a20, 0x3c71: 0x404d8c20, 0x3c72: 0x404d8e20, 0x3c73: 0x404d9020, + 0x3c74: 0x404d9220, 0x3c75: 0x404d9420, 0x3c76: 0x404d9620, 0x3c77: 0x404d9820, + 0x3c78: 0x404d9a20, 0x3c79: 0x404d9c20, 0x3c7a: 0x404d9e20, 0x3c7b: 0x404da020, + 0x3c7c: 0x404da220, 0x3c7d: 0x404da420, 0x3c7e: 0x404da620, 0x3c7f: 0x404da820, + // Block 0xf2, offset 0x3c80 + 0x3c80: 0x404daa20, 0x3c81: 0x404dac20, 0x3c82: 0x404dae20, 0x3c83: 0x404db020, + 0x3c84: 0x404db220, 0x3c85: 0x404db420, 0x3c86: 0x404db620, 0x3c87: 0x404db820, + 0x3c88: 0x404dba20, 0x3c89: 0x404dbc20, 0x3c8a: 0x404dbe20, 0x3c8b: 0x404dc020, + 0x3c8c: 0x404dc220, 0x3c8d: 0x404dc420, 0x3c8e: 0x404dc620, 0x3c8f: 0x404dc820, + 0x3c90: 0x404dca20, 0x3c91: 0x404dcc20, 0x3c92: 0x404dce20, 0x3c93: 0x820926e8, + 0x3c9f: 0x40038420, + 0x3ca0: 0x40636a20, 0x3ca1: 0x40636c20, 0x3ca2: 0x40636e20, 0x3ca3: 0x40637020, + 0x3ca4: 0x40637220, 0x3ca5: 0x40637420, 0x3ca6: 0x40637620, 0x3ca7: 0x40637820, + 0x3ca8: 0x40637a20, 0x3ca9: 0x40637c20, 0x3caa: 0x40637e20, 0x3cab: 0x40638020, + 0x3cac: 0x40638220, 0x3cad: 0x40638420, 0x3cae: 0x40638620, 0x3caf: 0x40638820, + 0x3cb0: 0x40638a20, 0x3cb1: 0x40638c20, 0x3cb2: 0x40638e20, 0x3cb3: 0x40639020, + 0x3cb4: 0x40639220, 0x3cb5: 0x40639420, 0x3cb6: 0x40639620, 0x3cb7: 0x40639820, + 0x3cb8: 0x40639a20, 0x3cb9: 0x40639c20, 0x3cba: 0x40639e20, 0x3cbb: 0x4063a020, + 0x3cbc: 0x4063a220, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0xa000f202, 0x3cc1: 0xa000f302, 0x3cc2: 0xa000f802, 0x3cc3: 0xa000f402, + 0x3cc4: 0x4052b220, 0x3cc5: 0x4052b420, 0x3cc6: 0x4052b620, 0x3cc7: 0x4052b820, + 0x3cc8: 0x4052ba20, 0x3cc9: 0x4052bc20, 0x3cca: 0x4052be20, 0x3ccb: 0x4052c020, + 0x3ccc: 0x4052c220, 0x3ccd: 0x4052c420, 0x3cce: 0x4052c620, 0x3ccf: 0x4052c820, + 0x3cd0: 0x4052ca20, 0x3cd1: 0x4052cc20, 0x3cd2: 0x4052ce20, 0x3cd3: 0x4052d020, + 0x3cd4: 0x4052d220, 0x3cd5: 0x4052d420, 0x3cd6: 0x4052d620, 0x3cd7: 0x4052d820, + 0x3cd8: 0x4052da20, 0x3cd9: 0x4052dc20, 0x3cda: 0x4052de20, 0x3cdb: 0x4052e020, + 0x3cdc: 0x4052e220, 0x3cdd: 0x4052e420, 0x3cde: 0x4052e620, 0x3cdf: 0x4052e820, + 0x3ce0: 0x4052ea20, 0x3ce1: 0x4052ec20, 0x3ce2: 0x4052ee20, 0x3ce3: 0x4052f020, + 0x3ce4: 0x4052f220, 0x3ce5: 0x4052f420, 0x3ce6: 0x4052f620, 0x3ce7: 0x4052f820, + 0x3ce8: 0x4052fa20, 0x3ce9: 0x4052fc20, 0x3cea: 0x4052fe20, 0x3ceb: 0x40530220, + 0x3cec: 0x00530284, 0x3ced: 0x40530620, 0x3cee: 0x40530820, 0x3cef: 0x40530a20, + 0x3cf0: 0x40530c20, 0x3cf1: 0x40530e20, 0x3cf2: 0x40531020, 0x3cf3: 0xa070f102, + 0x3cf4: 0x40531220, 0x3cf5: 0x40532420, 0x3cf6: 0x40531620, 0x3cf7: 0x40531820, + 0x3cf8: 0x40531a20, 0x3cf9: 0x40531c20, 0x3cfa: 0x40532020, 0x3cfb: 0x40532220, + 0x3cfc: 0x40531420, 0x3cfd: 0x40531e20, 0x3cfe: 0x40530020, 0x3cff: 0x40530420, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0x82092993, 0x3d01: 0x40036e20, 0x3d02: 0x40037020, 0x3d03: 0x40037220, + 0x3d04: 0x40037420, 0x3d05: 0x40037620, 0x3d06: 0x40037820, 0x3d07: 0x4002b020, + 0x3d08: 0x40033620, 0x3d09: 0x40033820, 0x3d0a: 0x40037a20, 0x3d0b: 0x40037c20, + 0x3d0c: 0x40037e20, 0x3d0d: 0x40038020, 0x3d0f: 0x4027c020, + 0x3d10: 0xe00001c1, 0x3d11: 0xe0000255, 0x3d12: 0xe000036d, 0x3d13: 0xe0000447, + 0x3d14: 0xe000051c, 0x3d15: 0xe00005e6, 0x3d16: 0xe00006b1, 0x3d17: 0xe0000759, + 0x3d18: 0xe0000805, 0x3d19: 0xe00008aa, + 0x3d1e: 0x4005f620, 0x3d1f: 0x4005f820, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0x40519c20, 0x3d41: 0x40519e20, 0x3d42: 0x4051a020, 0x3d43: 0x4051a220, + 0x3d44: 0x4051a420, 0x3d45: 0x4051a620, 0x3d46: 0x4051a820, 0x3d47: 0x4051aa20, + 0x3d48: 0x4051ac20, 0x3d49: 0x4051ae20, 0x3d4a: 0x4051b020, 0x3d4b: 0x4051b220, + 0x3d4c: 0x4051b420, 0x3d4d: 0x4051b620, 0x3d4e: 0x4051b820, 0x3d4f: 0x4051ba20, + 0x3d50: 0x4051bc20, 0x3d51: 0x4051be20, 0x3d52: 0x4051c020, 0x3d53: 0x4051c220, + 0x3d54: 0x4051c420, 0x3d55: 0x4051c620, 0x3d56: 0x4051c820, 0x3d57: 0x4051ca20, + 0x3d58: 0x4051cc20, 0x3d59: 0x4051ce20, 0x3d5a: 0x4051d020, 0x3d5b: 0x4051d220, + 0x3d5c: 0x4051d420, 0x3d5d: 0x4051d620, 0x3d5e: 0x4051d820, 0x3d5f: 0x4051da20, + 0x3d60: 0x4051dc20, 0x3d61: 0x4051de20, 0x3d62: 0x4051e020, 0x3d63: 0x4051e220, + 0x3d64: 0x4051e420, 0x3d65: 0x4051e620, 0x3d66: 0x4051e820, 0x3d67: 0x4051ea20, + 0x3d68: 0x4051ec20, 0x3d69: 0x4051f620, 0x3d6a: 0x4051f820, 0x3d6b: 0x4051fa20, + 0x3d6c: 0x4051fc20, 0x3d6d: 0x4051fe20, 0x3d6e: 0x40520020, 0x3d6f: 0x40520220, + 0x3d70: 0x40520420, 0x3d71: 0x40520620, 0x3d72: 0x40520820, 0x3d73: 0x4051ee20, + 0x3d74: 0x4051f020, 0x3d75: 0x4051f220, 0x3d76: 0x4051f420, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x40520a20, 0x3d81: 0x40520c20, 0x3d82: 0x40520e20, 0x3d83: 0x40521020, + 0x3d84: 0x40521220, 0x3d85: 0x40521420, 0x3d86: 0x40521620, 0x3d87: 0x40521820, + 0x3d88: 0x40521a20, 0x3d89: 0x40521c20, 0x3d8a: 0x40521e20, 0x3d8b: 0x40522020, + 0x3d8c: 0x40522220, 0x3d8d: 0x40522420, + 0x3d90: 0xe00001bb, 0x3d91: 0xe000024f, 0x3d92: 0xe0000367, 0x3d93: 0xe0000441, + 0x3d94: 0xe0000516, 0x3d95: 0xe00005e0, 0x3d96: 0xe00006ab, 0x3d97: 0xe0000753, + 0x3d98: 0xe00007ff, 0x3d99: 0xe00008a4, + 0x3d9c: 0x4005fa20, 0x3d9d: 0x40033a20, 0x3d9e: 0x40033c20, 0x3d9f: 0x40033e20, + 0x3da0: 0x404e2020, 0x3da1: 0x404e2c20, 0x3da2: 0x404e3020, 0x3da3: 0x404e3420, + 0x3da4: 0x404e3e20, 0x3da5: 0x404e4620, 0x3da6: 0x404e4c20, 0x3da7: 0x404e5020, + 0x3da8: 0x404e5420, 0x3da9: 0x404e5820, 0x3daa: 0x404e6820, 0x3dab: 0x404e6e20, + 0x3dac: 0x404ea820, 0x3dad: 0x404eae20, 0x3dae: 0x404eb220, 0x3daf: 0x404e7a20, + 0x3db0: 0x4027c220, 0x3db1: 0x404eb420, 0x3db2: 0x404e3820, 0x3db3: 0x404e8e20, + 0x3db4: 0x404f3a20, 0x3db5: 0x404f3c20, 0x3db6: 0x404f3e20, 0x3db7: 0x4007ac20, + 0x3db8: 0x4007ae20, 0x3db9: 0x4007b020, 0x3dba: 0x404e9020, 0x3dbb: 0x404f3820, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x4049f020, 0x3dc1: 0x4049f220, 0x3dc2: 0x4049f420, 0x3dc3: 0x4049f620, + 0x3dc4: 0x4049f820, 0x3dc5: 0x4049fa20, 0x3dc6: 0x4049fc20, 0x3dc7: 0x4049fe20, + 0x3dc8: 0x404a0020, 0x3dc9: 0x404a0220, 0x3dca: 0x404a0420, 0x3dcb: 0x404a0620, + 0x3dcc: 0x404a0820, 0x3dcd: 0x404a0a20, 0x3dce: 0x404a0c20, 0x3dcf: 0x404a0e20, + 0x3dd0: 0x404a1020, 0x3dd1: 0x404a1220, 0x3dd2: 0x404a1420, 0x3dd3: 0x404a1620, + 0x3dd4: 0x404a1820, 0x3dd5: 0x404a1a20, 0x3dd6: 0x404a1c20, 0x3dd7: 0x404a1e20, + 0x3dd8: 0x404a2020, 0x3dd9: 0x404a2220, 0x3dda: 0x404a2420, 0x3ddb: 0x404a2620, + 0x3ddc: 0x404a2820, 0x3ddd: 0x404a2a20, 0x3dde: 0x404a2c20, 0x3ddf: 0x404a2e20, + 0x3de0: 0x404a3020, 0x3de1: 0x404a3220, 0x3de2: 0x404a3420, 0x3de3: 0x404a3620, + 0x3de4: 0x404a3820, 0x3de5: 0x404a3a20, 0x3de6: 0x404a3c20, 0x3de7: 0x404a3e20, + 0x3de8: 0x404a4020, 0x3de9: 0x404a4220, 0x3dea: 0x404a4420, 0x3deb: 0x404a4620, + 0x3dec: 0x404a4820, 0x3ded: 0x404a4a20, 0x3dee: 0x404a4c20, 0x3def: 0x404a4e20, + 0x3df0: 0x82e62528, 0x3df1: 0x404a5220, 0x3df2: 0x82e6252a, 0x3df3: 0x82e6252b, + 0x3df4: 0x82dc252c, 0x3df5: 0xc20e0671, 0x3df6: 0xc23f0671, 0x3df7: 0x82e6252f, + 0x3df8: 0x82e62530, 0x3df9: 0xc2700671, 0x3dfa: 0x404a6420, 0x3dfb: 0xc2a10671, + 0x3dfc: 0xc2d20671, 0x3dfd: 0x404a6a20, 0x3dfe: 0x82e62536, 0x3dff: 0xae610c02, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x404a6e20, 0x3e01: 0xae610d02, 0x3e02: 0x404a7020, + 0x3e1b: 0x404a7220, + 0x3e1c: 0x404a7420, 0x3e1d: 0x4027c420, 0x3e1e: 0x40057e20, 0x3e1f: 0x40058020, + 0x3e20: 0x40456420, 0x3e21: 0x40456620, 0x3e22: 0x40456820, 0x3e23: 0x40456a20, + 0x3e24: 0x40456c20, 0x3e25: 0x40456e20, 0x3e26: 0x40457020, 0x3e27: 0x40457220, + 0x3e28: 0x40457420, 0x3e29: 0x40457620, 0x3e2a: 0x40457820, 0x3e2b: 0x40458a20, + 0x3e2c: 0x40458c20, 0x3e2d: 0x40458e20, 0x3e2e: 0x40459020, 0x3e2f: 0x40459220, + 0x3e30: 0x40034020, 0x3e31: 0x4002dc20, 0x3e32: 0x40452c20, 0x3e33: 0x4027c620, + 0x3e34: 0x4027c820, 0x3e35: 0x40459420, 0x3e36: 0x820922d4, + // Block 0xf9, offset 0x3e40 + 0x3e41: 0x403cae20, 0x3e42: 0x403cb020, 0x3e43: 0x403cb220, + 0x3e44: 0x403cb420, 0x3e45: 0x403cb620, 0x3e46: 0x403cb820, + 0x3e49: 0x403e3c20, 0x3e4a: 0x403e3e20, 0x3e4b: 0x403e4020, + 0x3e4c: 0x403e4220, 0x3e4d: 0x403e4420, 0x3e4e: 0x403e4620, + 0x3e51: 0x403dfe20, 0x3e52: 0x403e0020, 0x3e53: 0x403e0220, + 0x3e54: 0x403e0420, 0x3e55: 0x403e0620, 0x3e56: 0x403e0820, + 0x3e60: 0x403ec220, 0x3e61: 0x403ec420, 0x3e62: 0x403ec620, 0x3e63: 0x403ec820, + 0x3e64: 0x403eca20, 0x3e65: 0x403ecc20, 0x3e66: 0x403ece20, + 0x3e68: 0x403ef220, 0x3e69: 0x403ef420, 0x3e6a: 0x403ef620, 0x3e6b: 0x403ef820, + 0x3e6c: 0x403efa20, 0x3e6d: 0x403efc20, 0x3e6e: 0x403efe20, + // Block 0xfa, offset 0x3e80 + 0x3e80: 0x40452e20, 0x3e81: 0x40453020, 0x3e82: 0x40453220, 0x3e83: 0x40453420, + 0x3e84: 0x40453620, 0x3e85: 0x40453820, 0x3e86: 0x40453a20, 0x3e87: 0x40453c20, + 0x3e88: 0x40453e20, 0x3e89: 0x40454020, 0x3e8a: 0x40454220, 0x3e8b: 0x40454420, + 0x3e8c: 0x40454620, 0x3e8d: 0x40454820, 0x3e8e: 0x40454a20, 0x3e8f: 0x40454c20, + 0x3e90: 0x40454e20, 0x3e91: 0x40455020, 0x3e92: 0x40455220, 0x3e93: 0x40455420, + 0x3e94: 0x40455620, 0x3e95: 0x40455820, 0x3e96: 0x40455a20, 0x3e97: 0x40455c20, + 0x3e98: 0x40455e20, 0x3e99: 0x40456020, 0x3e9a: 0x40456220, 0x3e9b: 0x40459620, + 0x3e9c: 0x40459820, 0x3e9d: 0x40459a20, 0x3e9e: 0x40459c20, 0x3e9f: 0x40459e20, + 0x3ea0: 0x4045a020, 0x3ea1: 0x4045a220, 0x3ea2: 0x4045a420, 0x3ea3: 0x40457a20, + 0x3ea4: 0x40457c20, 0x3ea5: 0x40457e20, 0x3ea6: 0x40458020, 0x3ea7: 0x40458220, + 0x3ea8: 0x40458420, 0x3ea9: 0x40458620, 0x3eaa: 0x40458820, 0x3eab: 0x40034220, + 0x3eac: 0xa000fa02, 0x3ead: 0x820922d3, + 0x3eb0: 0xe0000188, 0x3eb1: 0xe0000219, 0x3eb2: 0xe0000334, 0x3eb3: 0xe000040e, + 0x3eb4: 0xe00004e3, 0x3eb5: 0xe00005ad, 0x3eb6: 0xe0000678, 0x3eb7: 0xe0000720, + 0x3eb8: 0xe00007cc, 0x3eb9: 0xe0000871, + // Block 0xfb, offset 0x3ec0 + 0x3ef0: 0x40643620, 0x3ef1: 0x40643820, 0x3ef2: 0x40643a20, 0x3ef3: 0x40643c20, + 0x3ef4: 0x40643e20, 0x3ef5: 0x40644020, 0x3ef6: 0x40644220, 0x3ef7: 0x40644420, + 0x3ef8: 0x40644620, 0x3ef9: 0x40644820, 0x3efa: 0x40644a20, 0x3efb: 0x40644c20, + 0x3efc: 0x40644e20, 0x3efd: 0x40645020, 0x3efe: 0x40645220, 0x3eff: 0x40645420, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0x40645620, 0x3f01: 0x40645820, 0x3f02: 0x40645a20, 0x3f03: 0x40645c20, + 0x3f04: 0x40645e20, 0x3f05: 0x40646020, 0x3f06: 0x40646220, + 0x3f0b: 0x40651420, + 0x3f0c: 0x40651620, 0x3f0d: 0x40651820, 0x3f0e: 0x40651a20, 0x3f0f: 0x40651c20, + 0x3f10: 0x40651e20, 0x3f11: 0x40652020, 0x3f12: 0x40652220, 0x3f13: 0x40652420, + 0x3f14: 0x40652620, 0x3f15: 0x40652820, 0x3f16: 0x40652a20, 0x3f17: 0x40652c20, + 0x3f18: 0x40652e20, 0x3f19: 0x40653020, 0x3f1a: 0x40653220, 0x3f1b: 0x40653420, + 0x3f1c: 0x40653620, 0x3f1d: 0x40653820, 0x3f1e: 0x40653a20, 0x3f1f: 0x40653c20, + 0x3f20: 0x40653e20, 0x3f21: 0x40654020, 0x3f22: 0x40654220, 0x3f23: 0x40654420, + 0x3f24: 0x40654620, 0x3f25: 0x40654820, 0x3f26: 0x40654a20, 0x3f27: 0x40654c20, + 0x3f28: 0x40654e20, 0x3f29: 0x40655020, 0x3f2a: 0x40655220, 0x3f2b: 0x40655420, + 0x3f2c: 0x40655620, 0x3f2d: 0x40655820, 0x3f2e: 0x40655a20, 0x3f2f: 0x40655c20, + 0x3f30: 0x40655e20, 0x3f31: 0x40656020, 0x3f32: 0x40656220, 0x3f33: 0x40656420, + 0x3f34: 0x40656620, 0x3f35: 0x40656820, 0x3f36: 0x40656a20, 0x3f37: 0x40656c20, + 0x3f38: 0x40656e20, 0x3f39: 0x40657020, 0x3f3a: 0x40657220, 0x3f3b: 0x40657420, + // Block 0xfd, offset 0x3f40 + 0x3f40: 0x43189020, 0x3f41: 0x42cde820, 0x3f42: 0x431d9420, 0x3f43: 0x43199020, + 0x3f44: 0x42dda220, 0x3f45: 0x429c6420, 0x3f46: 0x42a7ca20, 0x3f47: 0x433f3820, + 0x3f48: 0x433f3820, 0x3f49: 0x42b2a220, 0x3f4a: 0x4323a220, 0x3f4b: 0x42ab0e20, + 0x3f4c: 0x42b29020, 0x3f4d: 0x42c3ec20, 0x3f4e: 0x42ecd220, 0x3f4f: 0x42ff0a20, + 0x3f50: 0x430c7e20, 0x3f51: 0x430f7420, 0x3f52: 0x4311f020, 0x3f53: 0x43211e20, + 0x3f54: 0x42d40420, 0x3f55: 0x42da3620, 0x3f56: 0x42e1b220, 0x3f57: 0x42e7bc20, + 0x3f58: 0x43087a20, 0x3f59: 0x4322d420, 0x3f5a: 0x4333e220, 0x3f5b: 0x429d0420, + 0x3f5c: 0x42a6ea20, 0x3f5d: 0x42d60820, 0x3f5e: 0x42e43620, 0x3f5f: 0x430c5a20, + 0x3f60: 0x433c3c20, 0x3f61: 0x42baa020, 0x3f62: 0x42dfd620, 0x3f63: 0x430b9a20, + 0x3f64: 0x4312c820, 0x3f65: 0x42c59220, 0x3f66: 0x4303b020, 0x3f67: 0x43103e20, + 0x3f68: 0x42bd9420, 0x3f69: 0x42ce2e20, 0x3f6a: 0x42dad420, 0x3f6b: 0x42e5f820, + 0x3f6c: 0x43219c20, 0x3f6d: 0x429f0c20, 0x3f6e: 0x42a36e20, 0x3f6f: 0x42a5bc20, + 0x3f70: 0x42c98820, 0x3f71: 0x42d5a620, 0x3f72: 0x42e42020, 0x3f73: 0x42edce20, + 0x3f74: 0x43000220, 0x3f75: 0x430c0c20, 0x3f76: 0x430cb820, 0x3f77: 0x431bde20, + 0x3f78: 0x432e6420, 0x3f79: 0x4336de20, 0x3f7a: 0x433bf420, 0x3f7b: 0x42f11820, + 0x3f7c: 0x42f2fe20, 0x3f7d: 0x42fb4020, 0x3f7e: 0x43079220, 0x3f7f: 0x43260820, + // Block 0xfe, offset 0x3f80 + 0x3f80: 0x433cfe20, 0x3f81: 0x4315ac20, 0x3f82: 0x42b1be20, 0x3f83: 0x42be0820, + 0x3f84: 0x42f8c020, 0x3f85: 0x4300fc20, 0x3f86: 0x42e4c420, 0x3f87: 0x42f19420, + 0x3f88: 0x43198420, 0x3f89: 0x432dee20, 0x3f8a: 0x42b1b020, 0x3f8b: 0x42b8c420, + 0x3f8c: 0x42d42620, 0x3f8d: 0x42dbb420, 0x3f8e: 0x42de1e20, 0x3f8f: 0x42fa5e20, + 0x3f90: 0x42fc6e20, 0x3f91: 0x432c9620, 0x3f92: 0x42a5a420, 0x3f93: 0x43011620, + 0x3f94: 0x42a3b820, 0x3f95: 0x42a39820, 0x3f96: 0x42f43820, 0x3f97: 0x42fb7c20, + 0x3f98: 0x4307e220, 0x3f99: 0x432cea20, 0x3f9a: 0x43170020, 0x3f9b: 0x42c59e20, + 0x3f9c: 0x42d40420, 0x3f9d: 0x4315fc20, 0x3f9e: 0x429c7220, 0x3f9f: 0x42b7ce20, + 0x3fa0: 0x42c02420, 0x3fa1: 0x42e70e20, 0x3fa2: 0x42eae020, 0x3fa3: 0x42a62e20, + 0x3fa4: 0x42f1f620, 0x3fa5: 0x429f7e20, 0x3fa6: 0x42bf5220, 0x3fa7: 0x429c1a20, + 0x3fa8: 0x42d99820, 0x3fa9: 0x42caf020, 0x3faa: 0x42fa4420, 0x3fab: 0x42a78620, + 0x3fac: 0x42b0bc20, 0x3fad: 0x42ee0220, 0x3fae: 0x43089220, 0x3faf: 0x43155420, + 0x3fb0: 0x42d77420, 0x3fb1: 0x431f6020, 0x3fb2: 0x42d91020, 0x3fb3: 0x42c5fc20, + 0x3fb4: 0x4305ca20, 0x3fb5: 0x42c74020, 0x3fb6: 0x42eaca20, 0x3fb7: 0x429d5c20, + 0x3fb8: 0x42a2d220, 0x3fb9: 0x42a39220, 0x3fba: 0x42d10220, 0x3fbb: 0x42f9ce20, + 0x3fbc: 0x4304de20, 0x3fbd: 0x4315a420, 0x3fbe: 0x43239e20, 0x3fbf: 0x42a5ea20, + // Block 0xff, offset 0x3fc0 + 0x3fc0: 0x42a88420, 0x3fc1: 0x42b2e620, 0x3fc2: 0x42bdd820, 0x3fc3: 0x42cb8a20, + 0x3fc4: 0x42dffc20, 0x3fc5: 0x42f25420, 0x3fc6: 0x432b5a20, 0x3fc7: 0x4334d420, + 0x3fc8: 0x433d2e20, 0x3fc9: 0x433d9c20, 0x3fca: 0x42a53620, 0x3fcb: 0x42cd8c20, + 0x3fcc: 0x42d6ee20, 0x3fcd: 0x431ec420, 0x3fce: 0x42bce820, 0x3fcf: 0x42c32020, + 0x3fd0: 0x42c40020, 0x3fd1: 0x42c93420, 0x3fd2: 0x42de4620, 0x3fd3: 0x42e29220, + 0x3fd4: 0x42e91220, 0x3fd5: 0x42f39420, 0x3fd6: 0x42fbe820, 0x3fd7: 0x4300de20, + 0x3fd8: 0x431e4c20, 0x3fd9: 0x4309dc20, 0x3fda: 0x43204620, 0x3fdb: 0x43269420, + 0x3fdc: 0x42a42e20, 0x3fdd: 0x42a54620, 0x3fde: 0x42a97a20, 0x3fdf: 0x42e19020, + 0x3fe0: 0x43118420, 0x3fe1: 0x43155420, 0x3fe2: 0x42bd9220, 0x3fe3: 0x42bfea20, + 0x3fe4: 0x42c6f620, 0x3fe5: 0x42d75c20, 0x3fe6: 0x42f87c20, 0x3fe7: 0x42e6ea20, + 0x3fe8: 0x429dc820, 0x3fe9: 0x42adf220, 0x3fea: 0x42b7ce20, 0x3feb: 0x42bb7420, + 0x3fec: 0x42c03820, 0x3fed: 0x42e76420, 0x3fee: 0x42e8d220, 0x3fef: 0x42ff3420, + 0x3ff0: 0x43008c20, 0x3ff1: 0x43246820, 0x3ff2: 0x432dec20, 0x3ff3: 0x432e9020, + 0x3ff4: 0x43303020, 0x3ff5: 0x429f1620, 0x3ff6: 0x42f35c20, 0x3ff7: 0x43236820, + 0x3ff8: 0x432d7020, 0x3ff9: 0x42c1c220, 0x3ffa: 0x429d0c20, 0x3ffb: 0x42a1b420, + 0x3ffc: 0x42b7dc20, 0x3ffd: 0x42b87e20, 0x3ffe: 0x42cb3220, 0x3fff: 0x42d40420, + // Block 0x100, offset 0x4000 + 0x4000: 0x42e39c20, 0x4001: 0x42ec8420, 0x4002: 0x4309f820, 0x4003: 0x4320f820, + 0x4004: 0x433f1a20, 0x4005: 0x42cd1020, 0x4006: 0x432c5c20, 0x4007: 0x42a51220, + 0x4008: 0x42cef620, 0x4009: 0x42cfe620, 0x400a: 0x42da8220, 0x400b: 0x42dd3820, + 0x400c: 0x42e81220, 0x400d: 0x42eab220, 0x400e: 0x42f0d620, 0x400f: 0x42fa2020, + 0x4010: 0x4330bc20, 0x4011: 0x42a2da20, 0x4012: 0x42c45c20, 0x4013: 0x432cf020, + 0x4014: 0x42a05620, 0x4015: 0x42ba3220, 0x4016: 0x42dbd420, 0x4017: 0x431e5420, + 0x4018: 0x42bf1620, 0x4019: 0x42c28820, 0x401a: 0x42d02e20, 0x401b: 0x42e70e20, + 0x401c: 0x432d0c20, 0x401d: 0x42a45220, 0x401e: 0x42a81e20, 0x401f: 0x42b8ca20, + 0x4020: 0x42cc2620, 0x4021: 0x42ce9c20, 0x4022: 0x42d15020, 0x4023: 0x42d9ca20, + 0x4024: 0x42e80c20, 0x4025: 0x42ebc420, 0x4026: 0x42fef220, 0x4027: 0x43119e20, + 0x4028: 0x4311c220, 0x4029: 0x43239820, 0x402a: 0x432dc420, 0x402b: 0x42a67e20, + 0x402c: 0x42dd7420, 0x402d: 0x42a83a20, 0x402e: 0x42e3a020, 0x402f: 0x42e93020, + 0x4030: 0x430bf420, 0x4031: 0x432d4620, 0x4032: 0x4338ae20, 0x4033: 0x433d3e20, + 0x4034: 0x42cf2e20, 0x4035: 0x42db9620, 0x4036: 0x4303d020, 0x4037: 0x42f59620, + 0x4038: 0x42f64020, 0x4039: 0x42f92420, 0x403a: 0x42e58020, 0x403b: 0x42e13220, + 0x403c: 0x4316b020, 0x403d: 0x429d8020, 0x403e: 0x43066c20, 0x403f: 0x42a47420, + // Block 0x101, offset 0x4040 + 0x4040: 0x42a40e20, 0x4041: 0x42bd4c20, 0x4042: 0x42c5a620, 0x4043: 0x42f9ac20, + 0x4044: 0x42b70a20, 0x4045: 0x42da3c20, 0x4046: 0x42cd6820, 0x4047: 0x431e7620, + 0x4048: 0x43109820, 0x4049: 0x432c9a20, 0x404a: 0x43131620, 0x404b: 0x42bda620, + 0x404c: 0x42a28020, 0x404d: 0x42ab8020, 0x404e: 0x43f41c20, 0x404f: 0x43f41e20, + 0x4050: 0x42b0b420, 0x4051: 0x43f42220, 0x4052: 0x42cce820, 0x4053: 0x43f42620, + 0x4054: 0x43f42820, 0x4055: 0x42a3bc20, 0x4056: 0x42e65420, 0x4057: 0x42ed9420, + 0x4058: 0x42f27820, 0x4059: 0x42f2bc20, 0x405a: 0x42f2ca20, 0x405b: 0x42f31e20, + 0x405c: 0x432eac20, 0x405d: 0x42f97c20, 0x405e: 0x42ff7a20, 0x405f: 0x43f43e20, + 0x4060: 0x430c2420, 0x4061: 0x43f44220, 0x4062: 0x4315f020, 0x4063: 0x43f44620, + 0x4064: 0x43f44820, 0x4065: 0x43207020, 0x4066: 0x4321fa20, 0x4067: 0x43f44e20, + 0x4068: 0x43f45020, 0x4069: 0x43f45220, 0x406a: 0x4331de20, 0x406b: 0x4331f820, + 0x406c: 0x43325020, 0x406d: 0x433b6820, 0x406e: 0x4321bc20, 0x406f: 0x432d6e20, + 0x4070: 0x429f5c20, 0x4071: 0x42a1ce20, 0x4072: 0x42a29a20, 0x4073: 0x42a59220, + 0x4074: 0x42a5c820, 0x4075: 0x42a6a220, 0x4076: 0x42ab3a20, 0x4077: 0x42ac0c20, + 0x4078: 0x42acd020, 0x4079: 0x42b08020, 0x407a: 0x42b15020, 0x407b: 0x42b8c820, + 0x407c: 0x42b8dc20, 0x407d: 0x42c12820, 0x407e: 0x42c2d020, 0x407f: 0x42c31c20, + // Block 0x102, offset 0x4080 + 0x4080: 0x42c3e420, 0x4081: 0x42ca9e20, 0x4082: 0x42cbc420, 0x4083: 0x42cd2220, + 0x4084: 0x42d10a20, 0x4085: 0x42daee20, 0x4086: 0x42dc3420, 0x4087: 0x42de4420, + 0x4088: 0x42e2dc20, 0x4089: 0x42e45620, 0x408a: 0x42e84420, 0x408b: 0x42f12220, + 0x408c: 0x42f27c20, 0x408d: 0x42f29220, 0x408e: 0x42f29020, 0x408f: 0x42f2a020, + 0x4090: 0x42f2ac20, 0x4091: 0x42f2ba20, 0x4092: 0x42f31a20, 0x4093: 0x42f31c20, + 0x4094: 0x42f48020, 0x4095: 0x42f50220, 0x4096: 0x42f78020, 0x4097: 0x42fbe820, + 0x4098: 0x42fc1220, 0x4099: 0x42fc8220, 0x409a: 0x42fee420, 0x409b: 0x43000a20, + 0x409c: 0x4303da20, 0x409d: 0x4304f220, 0x409e: 0x4304f220, 0x409f: 0x4308ae20, + 0x40a0: 0x43122020, 0x40a1: 0x43132c20, 0x40a2: 0x43160220, 0x40a3: 0x43167220, + 0x40a4: 0x4319a620, 0x40a5: 0x431a1020, 0x40a6: 0x431f6c20, 0x40a7: 0x43207020, + 0x40a8: 0x432dc620, 0x40a9: 0x432ffe20, 0x40aa: 0x43307620, 0x40ab: 0x42c0ea20, + 0x40ac: 0x4885dc20, 0x40ad: 0x43043020, + 0x40b0: 0x429c4c20, 0x40b1: 0x42a36a20, 0x40b2: 0x42a2d020, 0x40b3: 0x429f0020, + 0x40b4: 0x42a28a20, 0x40b5: 0x42a30020, 0x40b6: 0x42a58e20, 0x40b7: 0x42a5f420, + 0x40b8: 0x42ab3a20, 0x40b9: 0x42aaaa20, 0x40ba: 0x42ab3220, 0x40bb: 0x42abc420, + 0x40bc: 0x42b0b420, 0x40bd: 0x42b16620, 0x40be: 0x42b28820, 0x40bf: 0x42b2a820, + // Block 0x103, offset 0x40c0 + 0x40c0: 0x42b4c420, 0x40c1: 0x42b65020, 0x40c2: 0x42bda420, 0x40c3: 0x42bdb220, + 0x40c4: 0x42bed220, 0x40c5: 0x42bf5a20, 0x40c6: 0x42c1b020, 0x40c7: 0x42c29c20, + 0x40c8: 0x42c21020, 0x40c9: 0x42c31c20, 0x40ca: 0x42c2c020, 0x40cb: 0x42c3e420, + 0x40cc: 0x42c46820, 0x40cd: 0x42c78820, 0x40ce: 0x42c83820, 0x40cf: 0x42c8a420, + 0x40d0: 0x42caac20, 0x40d1: 0x42cce820, 0x40d2: 0x42ce2e20, 0x40d3: 0x42ce3620, + 0x40d4: 0x42ceac20, 0x40d5: 0x42d6f220, 0x40d6: 0x42d77420, 0x40d7: 0x42da8220, + 0x40d8: 0x42ddb620, 0x40d9: 0x42dd9620, 0x40da: 0x42de4420, 0x40db: 0x42e03c20, + 0x40dc: 0x42e2dc20, 0x40dd: 0x42ef4e20, 0x40de: 0x42e46a20, 0x40df: 0x42e55e20, + 0x40e0: 0x42e65420, 0x40e1: 0x42e8e220, 0x40e2: 0x42ea0c20, 0x40e3: 0x42ea7620, + 0x40e4: 0x42ec3a20, 0x40e5: 0x42ec3e20, 0x40e6: 0x42ed9420, 0x40e7: 0x42edb620, + 0x40e8: 0x42ede820, 0x40e9: 0x42ee9420, 0x40ea: 0x42ee8020, 0x40eb: 0x42f19820, + 0x40ec: 0x42f56220, 0x40ed: 0x42f78020, 0x40ee: 0x42f8f620, 0x40ef: 0x42fab620, + 0x40f0: 0x42fbe820, 0x40f1: 0x42fe7c20, 0x40f2: 0x43000a20, 0x40f3: 0x4306a420, + 0x40f4: 0x4307de20, 0x40f5: 0x430ef220, 0x40f6: 0x43128220, 0x40f7: 0x43130c20, + 0x40f8: 0x43132c20, 0x40f9: 0x43157e20, 0x40fa: 0x4315f020, 0x40fb: 0x43159620, + 0x40fc: 0x43160220, 0x40fd: 0x4315fc20, 0x40fe: 0x4315da20, 0x40ff: 0x43167220, + // Block 0x104, offset 0x4100 + 0x4100: 0x43171420, 0x4101: 0x431a1020, 0x4102: 0x431e7020, 0x4103: 0x4320e420, + 0x4104: 0x43233220, 0x4105: 0x4324ec20, 0x4106: 0x432cf820, 0x4107: 0x432dc620, + 0x4108: 0x432eac20, 0x4109: 0x432fb620, 0x410a: 0x432ffe20, 0x410b: 0x43301620, + 0x410c: 0x43307620, 0x410d: 0x43362420, 0x410e: 0x433f3820, 0x410f: 0x48509420, + 0x4110: 0x48508820, 0x4111: 0x4867aa20, 0x4112: 0x44773a20, 0x4113: 0x44803020, + 0x4114: 0x44807220, 0x4115: 0x48a49220, 0x4116: 0x48b9a020, 0x4117: 0x48fda620, + 0x4118: 0x433e8620, 0x4119: 0x433f1c20, + // Block 0x105, offset 0x4140 + 0x4140: 0xf0000404, 0x4141: 0xf0000404, 0x4142: 0xf0000404, 0x4143: 0xe0000b99, + 0x4144: 0xe0000b9d, 0x4145: 0xe0000f83, 0x4146: 0xf0000404, + 0x4153: 0xf0000404, + 0x4154: 0xf0000404, 0x4155: 0xf0000404, 0x4156: 0xf0000404, 0x4157: 0xf0000404, + 0x415d: 0xe000150b, 0x415e: 0xa1a09602, 0x415f: 0xe0001514, + 0x4160: 0x0038ae85, 0x4161: 0x00389085, 0x4162: 0x00389685, 0x4163: 0x00389885, + 0x4164: 0x0038a485, 0x4165: 0x0038a685, 0x4166: 0x0038a885, 0x4167: 0x0038b685, + 0x4168: 0x0038ba85, 0x4169: 0x00093885, 0x416a: 0xe0001542, 0x416b: 0xe000153f, + 0x416c: 0xe000154c, 0x416d: 0xe0001548, 0x416e: 0xe00014e1, 0x416f: 0xe00014e4, + 0x4170: 0xe00014e7, 0x4171: 0xe00014ea, 0x4172: 0xe00014f0, 0x4173: 0xe00014f3, + 0x4174: 0xe00014f6, 0x4175: 0xe00014fc, 0x4176: 0xe0001505, + 0x4178: 0xe0001508, 0x4179: 0xe000150e, 0x417a: 0xe000151b, 0x417b: 0xe0001518, + 0x417c: 0xe0001521, 0x417e: 0xe0001524, + // Block 0x106, offset 0x4180 + 0x4180: 0xe0001527, 0x4181: 0xe000152a, 0x4183: 0xe0001530, + 0x4184: 0xe000152d, 0x4186: 0xe0001536, 0x4187: 0xe0001539, + 0x4188: 0xe000153c, 0x4189: 0xe0001545, 0x418a: 0xe0001550, 0x418b: 0xe00014f9, + 0x418c: 0xe00014ed, 0x418d: 0xe000151e, 0x418e: 0xe0001533, 0x418f: 0xf0000404, + 0x4190: 0x0039249a, 0x4191: 0x00392499, 0x4192: 0x00393e9a, 0x4193: 0x00393e99, + 0x4194: 0x00393e97, 0x4195: 0x00393e98, 0x4196: 0x0039409a, 0x4197: 0x00394099, + 0x4198: 0x00394097, 0x4199: 0x00394098, 0x419a: 0x0039429a, 0x419b: 0x00394299, + 0x419c: 0x00394297, 0x419d: 0x00394298, 0x419e: 0x00395c9a, 0x419f: 0x00395c99, + 0x41a0: 0x00395c97, 0x41a1: 0x00395c98, 0x41a2: 0x0039629a, 0x41a3: 0x00396299, + 0x41a4: 0x00396297, 0x41a5: 0x00396298, 0x41a6: 0x00395a9a, 0x41a7: 0x00395a99, + 0x41a8: 0x00395a97, 0x41a9: 0x00395a98, 0x41aa: 0x003a049a, 0x41ab: 0x003a0499, + 0x41ac: 0x003a0497, 0x41ad: 0x003a0498, 0x41ae: 0x003a0a9a, 0x41af: 0x003a0a99, + 0x41b0: 0x003a0a97, 0x41b1: 0x003a0a98, 0x41b2: 0x0039689a, 0x41b3: 0x00396899, + 0x41b4: 0x00396897, 0x41b5: 0x00396898, 0x41b6: 0x0039669a, 0x41b7: 0x00396699, + 0x41b8: 0x00396697, 0x41b9: 0x00396698, 0x41ba: 0x00396a9a, 0x41bb: 0x00396a99, + 0x41bc: 0x00396a97, 0x41bd: 0x00396a98, 0x41be: 0x00396e9a, 0x41bf: 0x00396e99, + // Block 0x107, offset 0x41c0 + 0x41c0: 0x00396e97, 0x41c1: 0x00396e98, 0x41c2: 0x0039969a, 0x41c3: 0x00399699, + 0x41c4: 0x0039949a, 0x41c5: 0x00399499, 0x41c6: 0x0039989a, 0x41c7: 0x00399899, + 0x41c8: 0x00398c9a, 0x41c9: 0x00398c99, 0x41ca: 0x0039b69a, 0x41cb: 0x0039b699, + 0x41cc: 0x0039a89a, 0x41cd: 0x0039a899, 0x41ce: 0x003a1c9a, 0x41cf: 0x003a1c99, + 0x41d0: 0x003a1c97, 0x41d1: 0x003a1c98, 0x41d2: 0x003a2a9a, 0x41d3: 0x003a2a99, + 0x41d4: 0x003a2a97, 0x41d5: 0x003a2a98, 0x41d6: 0x003a329a, 0x41d7: 0x003a3299, + 0x41d8: 0x003a3297, 0x41d9: 0x003a3298, 0x41da: 0x003a2e9a, 0x41db: 0x003a2e99, + 0x41dc: 0x003a2e97, 0x41dd: 0x003a2e98, 0x41de: 0x003a589a, 0x41df: 0x003a5899, + 0x41e0: 0x003a5a9a, 0x41e1: 0x003a5a99, 0x41e2: 0x003a5a97, 0x41e3: 0x003a5a98, + 0x41e4: 0xf0001a1a, 0x41e5: 0xf0001919, 0x41e6: 0x003a6c9a, 0x41e7: 0x003a6c99, + 0x41e8: 0x003a6c97, 0x41e9: 0x003a6c98, 0x41ea: 0x003a6a9a, 0x41eb: 0x003a6a99, + 0x41ec: 0x003a6a97, 0x41ed: 0x003a6a98, 0x41ee: 0x003aaa9a, 0x41ef: 0x003aaa99, + 0x41f0: 0xf0001a1a, 0x41f1: 0xf0001919, 0x41f2: 0x40071820, 0x41f3: 0x40071a20, + 0x41f4: 0x40071c20, 0x41f5: 0x40071e20, 0x41f6: 0x40072020, 0x41f7: 0x40072220, + 0x41f8: 0x40072420, 0x41f9: 0x40072620, 0x41fa: 0x40072820, 0x41fb: 0x40072a20, + 0x41fc: 0x40072c20, 0x41fd: 0x40072e20, 0x41fe: 0x40073020, 0x41ff: 0x40073220, + // Block 0x108, offset 0x4200 + 0x4200: 0x40073420, 0x4201: 0x40073620, + 0x4213: 0x003a269a, + 0x4214: 0x003a2699, 0x4215: 0x003a2697, 0x4216: 0x003a2698, 0x4217: 0x003a7c9a, + 0x4218: 0x003a7c99, 0x4219: 0x003a7a9a, 0x421a: 0x003a7a99, 0x421b: 0x003a7e9a, + 0x421c: 0x003a7e99, 0x421d: 0xf0001a1a, 0x421e: 0x003a849a, 0x421f: 0x003a8499, + 0x4220: 0x003a789a, 0x4221: 0x003a7899, 0x4222: 0x003a809a, 0x4223: 0x003a8099, + 0x4224: 0x003a989a, 0x4225: 0x003a9899, 0x4226: 0x003a9897, 0x4227: 0x003a9898, + 0x4228: 0x003a8e97, 0x4229: 0x003a8e98, 0x422a: 0xe0001559, 0x422b: 0xe0001556, + 0x422c: 0xe0001589, 0x422d: 0xe0001586, 0x422e: 0xe000158f, 0x422f: 0xe000158c, + 0x4230: 0xe000159b, 0x4231: 0xe0001598, 0x4232: 0xe0001595, 0x4233: 0xe0001592, + 0x4234: 0xe00015a1, 0x4235: 0xe000159e, 0x4236: 0xe00015bf, 0x4237: 0xe00015bc, + 0x4238: 0xe00015b9, 0x4239: 0xe00015ad, 0x423a: 0xe00015a7, 0x423b: 0xe00015a4, + 0x423c: 0x003a929a, 0x423d: 0x003a9299, 0x423e: 0x003a9297, 0x423f: 0x003a9298, + // Block 0x109, offset 0x4240 + 0x4240: 0xe000155f, 0x4241: 0xe0001565, 0x4242: 0xe000157a, 0x4243: 0xe00015b0, + 0x4244: 0xe00015b6, 0x4245: 0xf0001a1a, 0x4246: 0xf0001a1a, 0x4247: 0xf0001a1a, + 0x4248: 0xf0001a1a, 0x4249: 0xf0001a1a, 0x424a: 0xf0001a1a, 0x424b: 0xf0001a1a, + 0x424c: 0xf0001a1a, 0x424d: 0xf0001a1a, 0x424e: 0xf0001a1a, 0x424f: 0xf0001a1a, + 0x4250: 0xf0001a1a, 0x4251: 0xf0001a1a, 0x4252: 0xf0001a1a, 0x4253: 0xf0001a1a, + 0x4254: 0xf0001a1a, 0x4255: 0xf0001a1a, 0x4256: 0xf0001a1a, 0x4257: 0xf0001a1a, + 0x4258: 0xf0001a1a, 0x4259: 0xf0001a1a, 0x425a: 0xf0001a1a, 0x425b: 0xf0001a1a, + 0x425c: 0xf0001a1a, 0x425d: 0xf0001a1a, 0x425e: 0xf0001a1a, 0x425f: 0xf0001a1a, + 0x4260: 0xf0001a1a, 0x4261: 0xf0001a1a, 0x4262: 0xf0001a1a, 0x4263: 0xf0001a1a, + 0x4264: 0xf0001a1a, 0x4265: 0xf0001a1a, 0x4266: 0xf0001a1a, 0x4267: 0xf0001a1a, + 0x4268: 0xf0001a1a, 0x4269: 0xf0001a1a, 0x426a: 0xf0001a1a, 0x426b: 0xf0001a1a, + 0x426c: 0xf0001a1a, 0x426d: 0xf0001a1a, 0x426e: 0xf0001a1a, 0x426f: 0xf0001a1a, + 0x4270: 0xf0001a1a, 0x4271: 0xf0001a1a, 0x4272: 0xf0001a1a, 0x4273: 0xf0001a1a, + 0x4274: 0xf0001a1a, 0x4275: 0xf0001a1a, 0x4276: 0xf0001a1a, 0x4277: 0xf0001a1a, + 0x4278: 0xf0001a1a, 0x4279: 0xf0001a1a, 0x427a: 0xf0001a1a, 0x427b: 0xf0001a1a, + 0x427c: 0xf0001a1a, 0x427d: 0xf0001a1a, 0x427e: 0xf0001a1a, 0x427f: 0xf0001a1a, + // Block 0x10a, offset 0x4280 + 0x4280: 0xf0001a1a, 0x4281: 0xf0001a1a, 0x4282: 0xf0001a1a, 0x4283: 0xf0001a1a, + 0x4284: 0xf0001a1a, 0x4285: 0xf0001a1a, 0x4286: 0xf0001a1a, 0x4287: 0xf0001a1a, + 0x4288: 0xf0001a1a, 0x4289: 0xf0001a1a, 0x428a: 0xf0001a1a, 0x428b: 0xf0001a1a, + 0x428c: 0xf0001a1a, 0x428d: 0xf0001a1a, 0x428e: 0xf0001a1a, 0x428f: 0xf0001a1a, + 0x4290: 0xf0001a1a, 0x4291: 0xf0001a1a, 0x4292: 0xf0001a1a, 0x4293: 0xf0001a1a, + 0x4294: 0xf0001a1a, 0x4295: 0xf0001a1a, 0x4296: 0xf0001a1a, 0x4297: 0xf0001a1a, + 0x4298: 0xf0001a1a, 0x4299: 0xf0001a1a, 0x429a: 0xf0001a1a, 0x429b: 0xf0001a1a, + 0x429c: 0xf0001a1a, 0x429d: 0xf0001a1a, 0x429e: 0xe0000003, 0x429f: 0xe0000006, + 0x42a0: 0xe0000009, 0x42a1: 0xe000000c, 0x42a2: 0xe000000f, 0x42a3: 0xe0000012, + 0x42a4: 0xe000156b, 0x42a5: 0xe000156e, 0x42a6: 0xe0001577, 0x42a7: 0xe000157d, + 0x42a8: 0xe00015aa, 0x42a9: 0xe00015b3, 0x42aa: 0xf0001919, 0x42ab: 0xf0001919, + 0x42ac: 0xf0001919, 0x42ad: 0xf0001919, 0x42ae: 0xf0001919, 0x42af: 0xf0001919, + 0x42b0: 0xf0001919, 0x42b1: 0xf0001919, 0x42b2: 0xf0001919, 0x42b3: 0xf0001919, + 0x42b4: 0xf0001919, 0x42b5: 0xf0001919, 0x42b6: 0xf0001919, 0x42b7: 0xf0001919, + 0x42b8: 0xf0001919, 0x42b9: 0xf0001919, 0x42ba: 0xf0001919, 0x42bb: 0xf0001919, + 0x42bc: 0xf0001919, 0x42bd: 0xf0001919, 0x42be: 0xf0001919, 0x42bf: 0xf0001919, + // Block 0x10b, offset 0x42c0 + 0x42c0: 0xf0001919, 0x42c1: 0xf0001919, 0x42c2: 0xf0001919, 0x42c3: 0xf0001919, + 0x42c4: 0xf0001919, 0x42c5: 0xf0001919, 0x42c6: 0xf0001919, 0x42c7: 0xf0001919, + 0x42c8: 0xf0001919, 0x42c9: 0xf0001919, 0x42ca: 0xf0001919, 0x42cb: 0xf0001919, + 0x42cc: 0xf0001919, 0x42cd: 0xf0001919, 0x42ce: 0xf0001919, 0x42cf: 0xf0001919, + 0x42d0: 0xf0001919, 0x42d1: 0xf0001919, 0x42d2: 0xf0001919, 0x42d3: 0xf0001919, + 0x42d4: 0xf0001919, 0x42d5: 0xf0001919, 0x42d6: 0xf0001919, 0x42d7: 0xe000155c, + 0x42d8: 0xe0001562, 0x42d9: 0xe0001568, 0x42da: 0xe0001571, 0x42db: 0xe0001580, + 0x42dc: 0xf0001717, 0x42dd: 0xf0001717, 0x42de: 0xf0001717, 0x42df: 0xf0001717, + 0x42e0: 0xf0001717, 0x42e1: 0xf0001717, 0x42e2: 0xf0001717, 0x42e3: 0xf0001717, + 0x42e4: 0xf0001717, 0x42e5: 0xf0001717, 0x42e6: 0xf0001717, 0x42e7: 0xf0001717, + 0x42e8: 0xf0001717, 0x42e9: 0xf0001717, 0x42ea: 0xf0001717, 0x42eb: 0xf0001717, + 0x42ec: 0xf0001717, 0x42ed: 0xf0001717, 0x42ee: 0xf0001717, 0x42ef: 0xf0001717, + 0x42f0: 0xf0001717, 0x42f1: 0xf0001717, 0x42f2: 0xf0001717, 0x42f3: 0xf0001717, + 0x42f4: 0xf0001717, 0x42f5: 0xf0001717, 0x42f6: 0xf0001717, 0x42f7: 0xf0001717, + 0x42f8: 0xf0001717, 0x42f9: 0xf0001717, 0x42fa: 0xf0001717, 0x42fb: 0xf0001717, + 0x42fc: 0xf0001717, 0x42fd: 0xf0001717, 0x42fe: 0xf0001717, 0x42ff: 0xf0001717, + // Block 0x10c, offset 0x4300 + 0x4300: 0xf0001717, 0x4301: 0xf0001717, 0x4302: 0xf0001717, 0x4303: 0xf0001717, + 0x4304: 0xf0001717, 0x4305: 0xf0001717, 0x4306: 0xf0001717, 0x4307: 0xf0001717, + 0x4308: 0xf0001717, 0x4309: 0xf0001717, 0x430a: 0xf0001717, 0x430b: 0xf0001717, + 0x430c: 0xf0001717, 0x430d: 0xf0001717, 0x430e: 0xf0001717, 0x430f: 0xf0001717, + 0x4310: 0xf0001717, 0x4311: 0xf0001717, 0x4312: 0xf0001717, 0x4313: 0xf0001717, + 0x4314: 0xf0001717, 0x4315: 0xf0001717, 0x4316: 0xf0001717, 0x4317: 0xf0001717, + 0x4318: 0xf0001717, 0x4319: 0xf0001717, 0x431a: 0xf0001717, 0x431b: 0xf0001717, + 0x431c: 0xf0001717, 0x431d: 0xf0001717, 0x431e: 0xf0001717, 0x431f: 0xe0001574, + 0x4320: 0xe0001583, 0x4321: 0xf0001818, 0x4322: 0xf0001818, 0x4323: 0xf0001818, + 0x4324: 0xf0001818, 0x4325: 0xf0001818, 0x4326: 0xf0001818, 0x4327: 0xf0001818, + 0x4328: 0xf0001818, 0x4329: 0xf0001818, 0x432a: 0xf0001818, 0x432b: 0xf0001818, + 0x432c: 0xf0001818, 0x432d: 0xf0001818, 0x432e: 0xf0001818, 0x432f: 0xf0001818, + 0x4330: 0xf0001818, 0x4331: 0xf0001818, 0x4332: 0xf0001818, 0x4333: 0xf0001818, + 0x4334: 0xf0001818, 0x4335: 0xf0001a1a, 0x4336: 0xf0001a1a, 0x4337: 0xf0001a1a, + 0x4338: 0xf0001a1a, 0x4339: 0xf0001a1a, 0x433a: 0xf0001a1a, 0x433b: 0xf0001a1a, + 0x433c: 0xf0001a1a, 0x433d: 0xf0001a1a, 0x433e: 0xf0001a1a, 0x433f: 0xf0001a1a, + // Block 0x10d, offset 0x4340 + 0x4340: 0xf0001a1a, 0x4341: 0xf0001a1a, 0x4342: 0xf0001a1a, 0x4343: 0xf0001a1a, + 0x4344: 0xf0001a1a, 0x4345: 0xf0001a1a, 0x4346: 0xf0001a1a, 0x4347: 0xf0001a1a, + 0x4348: 0xf0001a1a, 0x4349: 0xf0001a1a, 0x434a: 0xf0001a1a, 0x434b: 0xf0001a1a, + 0x434c: 0xf0001a1a, 0x434d: 0xf0001a1a, 0x434e: 0xf0001a1a, 0x434f: 0xf0001a1a, + 0x4350: 0xf0001a1a, 0x4351: 0xf0001919, 0x4352: 0xf0001919, 0x4353: 0xf0001919, + 0x4354: 0xf0001919, 0x4355: 0xf0001919, 0x4356: 0xf0001919, 0x4357: 0xf0001919, + 0x4358: 0xf0001919, 0x4359: 0xf0001919, 0x435a: 0xf0001919, 0x435b: 0xf0001919, + 0x435c: 0xf0001919, 0x435d: 0xf0001919, 0x435e: 0xf0001919, 0x435f: 0xf0001919, + 0x4360: 0xf0001919, 0x4361: 0xf0001919, 0x4362: 0xf0001919, 0x4363: 0xf0001919, + 0x4364: 0xf0001919, 0x4365: 0xf0001919, 0x4366: 0xf0001919, 0x4367: 0xf0001919, + 0x4368: 0xf0001919, 0x4369: 0xf0001919, 0x436a: 0xf0001919, 0x436b: 0xf0001919, + 0x436c: 0xf0001919, 0x436d: 0xf0001717, 0x436e: 0xf0001717, 0x436f: 0xf0001717, + 0x4370: 0xf0001717, 0x4371: 0xf0001717, 0x4372: 0xf0001717, 0x4373: 0xf0001717, + 0x4374: 0xf0001818, 0x4375: 0xf0001818, 0x4376: 0xf0001818, 0x4377: 0xf0001818, + 0x4378: 0xf0001818, 0x4379: 0xf0001818, 0x437a: 0xf0001818, 0x437b: 0xf0001818, + 0x437c: 0xf0001919, 0x437d: 0xf0001a1a, 0x437e: 0x4004c020, 0x437f: 0x4004c220, + // Block 0x10e, offset 0x4380 + 0x4390: 0xe00015d4, 0x4391: 0xe00015e4, 0x4392: 0xe00015e0, 0x4393: 0xe00015e8, + 0x4394: 0xe00015ec, 0x4395: 0xe00015f8, 0x4396: 0xe00015fc, 0x4397: 0xe0001600, + 0x4398: 0xe0001621, 0x4399: 0xe000161d, 0x439a: 0xe0001635, 0x439b: 0xe0001631, + 0x439c: 0xe0001646, 0x439d: 0xe000163e, 0x439e: 0xe0001642, 0x439f: 0xe000165a, + 0x43a0: 0xe0001656, 0x43a1: 0xe0001652, 0x43a2: 0xe0001662, 0x43a3: 0xe000165e, + 0x43a4: 0xe000168a, 0x43a5: 0xe0001686, 0x43a6: 0xe00016b6, 0x43a7: 0xe000166e, + 0x43a8: 0xe000166a, 0x43a9: 0xe0001666, 0x43aa: 0xe000167a, 0x43ab: 0xe0001676, + 0x43ac: 0xe0001682, 0x43ad: 0xe000167e, 0x43ae: 0xe00016ba, 0x43af: 0xe00016c6, + 0x43b0: 0xe00016c2, 0x43b1: 0xe00016ce, 0x43b2: 0xe00016ca, 0x43b3: 0xe00016d2, + 0x43b4: 0xe00016d6, 0x43b5: 0xe00016de, 0x43b6: 0xe00016eb, 0x43b7: 0xe00016e7, + 0x43b8: 0xe00016ef, 0x43b9: 0xe00016f7, 0x43ba: 0xe00016ff, 0x43bb: 0xe00016fb, + 0x43bc: 0xe0001707, 0x43bd: 0xe0001703, 0x43be: 0xe0001717, 0x43bf: 0xe000171b, + // Block 0x10f, offset 0x43c0 + 0x43c0: 0xe0001759, 0x43c1: 0xe0001761, 0x43c2: 0xe000175d, 0x43c3: 0xe0001741, + 0x43c4: 0xe0001745, 0x43c5: 0xe0001769, 0x43c6: 0xe0001765, 0x43c7: 0xe0001771, + 0x43c8: 0xe000176d, 0x43c9: 0xe000178c, 0x43ca: 0xe0001790, 0x43cb: 0xe0001799, + 0x43cc: 0xe000177c, 0x43cd: 0xe0001784, 0x43ce: 0xe000179d, 0x43cf: 0xe00017a1, + 0x43d2: 0xe0001780, 0x43d3: 0xe00017d9, + 0x43d4: 0xe00017dd, 0x43d5: 0xe00017c5, 0x43d6: 0xe00017c9, 0x43d7: 0xe00017b9, + 0x43d8: 0xe00017b5, 0x43d9: 0xe00017bd, 0x43da: 0xe00017d5, 0x43db: 0xe00017d1, + 0x43dc: 0xe00017f8, 0x43dd: 0xe00017f4, 0x43de: 0xe00015d0, 0x43df: 0xe00015dc, + 0x43e0: 0xe00015d8, 0x43e1: 0xe00015f4, 0x43e2: 0xe00015f0, 0x43e3: 0xe0001608, + 0x43e4: 0xe0001604, 0x43e5: 0xe0001629, 0x43e6: 0xe000160c, 0x43e7: 0xe0001625, + 0x43e8: 0xe000164a, 0x43e9: 0xe000168e, 0x43ea: 0xe0001672, 0x43eb: 0xe00016be, + 0x43ec: 0xe0001751, 0x43ed: 0xe0001775, 0x43ee: 0xe00017f0, 0x43ef: 0xe00017ec, + 0x43f0: 0xe00017fc, 0x43f1: 0xe00017a9, 0x43f2: 0xe000171f, 0x43f3: 0xe00017cd, + 0x43f4: 0xe0001713, 0x43f5: 0xe0001755, 0x43f6: 0xe00016f3, 0x43f7: 0xe000172b, + 0x43f8: 0xe00017ad, 0x43f9: 0xe00017a5, 0x43fa: 0xe0001749, 0x43fb: 0xe0001727, + 0x43fc: 0xe000174d, 0x43fd: 0xe00017b1, 0x43fe: 0xe0001610, 0x43ff: 0xe000162d, + // Block 0x110, offset 0x4400 + 0x4400: 0xe0001788, 0x4401: 0xe000170b, 0x4402: 0xe00015cc, 0x4403: 0xe0001723, + 0x4404: 0xe00016da, 0x4405: 0xe00016b2, 0x4406: 0xe000164e, 0x4407: 0xe00017c1, + 0x4430: 0xe00016ae, 0x4431: 0xe000170f, 0x4432: 0xe00015c7, 0x4433: 0xe00015c2, + 0x4434: 0xe0001794, 0x4435: 0xe0001692, 0x4436: 0xe0001639, 0x4437: 0xe00016e2, + 0x4438: 0xe00017e7, 0x4439: 0xe0001697, 0x443a: 0xe000169b, 0x443b: 0xe0001614, + 0x443c: 0x40282e20, 0x443d: 0x40071620, + // Block 0x111, offset 0x4440 + 0x4440: 0xa0000000, 0x4441: 0xa0000000, 0x4442: 0xa0000000, 0x4443: 0xa0000000, + 0x4444: 0xa0000000, 0x4445: 0xa0000000, 0x4446: 0xa0000000, 0x4447: 0xa0000000, + 0x4448: 0xa0000000, 0x4449: 0xa0000000, 0x444a: 0xa0000000, 0x444b: 0xa0000000, + 0x444c: 0xa0000000, 0x444d: 0xa0000000, 0x444e: 0xa0000000, 0x444f: 0xa0000000, + 0x4450: 0x00024096, 0x4451: 0x00025c96, 0x4452: 0x00030496, 0x4453: 0x00026c96, + 0x4454: 0x00026296, 0x4455: 0x0002ba96, 0x4456: 0x0002c496, 0x4457: 0x0004b496, + 0x4458: 0x0004b696, 0x4459: 0xf0001616, + 0x4460: 0xae608202, 0x4461: 0xae600000, 0x4462: 0xae608102, 0x4463: 0xae600000, + 0x4464: 0xae600000, 0x4465: 0xae600000, 0x4466: 0xae600000, + 0x4470: 0xf0001f16, 0x4471: 0x00022c96, 0x4472: 0x00022a96, 0x4473: 0x00021696, + 0x4474: 0x00021696, 0x4475: 0x0003f496, 0x4476: 0x0003f696, 0x4477: 0x0003fc96, + 0x4478: 0x0003fe96, 0x4479: 0x0004b096, 0x447a: 0x0004b296, 0x447b: 0x0004ac96, + 0x447c: 0x0004ae96, 0x447d: 0x0004a096, 0x447e: 0x0004a296, 0x447f: 0x00049c96, + // Block 0x112, offset 0x4480 + 0x4480: 0x00049e96, 0x4481: 0x0004a496, 0x4482: 0x0004a696, 0x4483: 0x0004a896, + 0x4484: 0x0004aa96, 0x4485: 0x40025e20, 0x4486: 0x40026020, 0x4487: 0x0003f896, + 0x4488: 0x0003fa96, 0x4489: 0x00021484, 0x448a: 0x00021484, 0x448b: 0x00021484, + 0x448c: 0x00021484, 0x448d: 0x00021684, 0x448e: 0x00021684, 0x448f: 0x00021684, + 0x4490: 0x0002408f, 0x4491: 0x00025c8f, 0x4492: 0x0002e48f, + 0x4494: 0x0002628f, 0x4495: 0x00026c8f, 0x4496: 0x0002c48f, 0x4497: 0x0002ba8f, + 0x4498: 0x00022c8f, 0x4499: 0x0003f48f, 0x449a: 0x0003f68f, 0x449b: 0x0003fc8f, + 0x449c: 0x0003fe8f, 0x449d: 0x0004b08f, 0x449e: 0x0004b28f, 0x449f: 0x0004ea8f, + 0x44a0: 0x0004e68f, 0x44a1: 0x0004d88f, 0x44a2: 0x0009388f, 0x44a3: 0x00021a8f, + 0x44a4: 0x0009408f, 0x44a5: 0x0009448f, 0x44a6: 0x0009428f, + 0x44a8: 0x0004e48f, 0x44a9: 0x0027de8f, 0x44aa: 0x0004ec8f, 0x44ab: 0x0004d68f, + 0x44b0: 0xa000a21a, 0x44b1: 0xa000a218, 0x44b2: 0xa000a51a, 0x44b3: 0xa0000000, + 0x44b4: 0xa000a91a, 0x44b6: 0xa000ad1a, 0x44b7: 0xa000ad18, + 0x44b8: 0xa000b21a, 0x44b9: 0xa000b218, 0x44ba: 0xa000b61a, 0x44bb: 0xa000b618, + 0x44bc: 0xa000ba1a, 0x44bd: 0xa000ba18, 0x44be: 0xa000bc1a, 0x44bf: 0xa000bc18, + // Block 0x113, offset 0x44c0 + 0x44c0: 0x00391c9a, 0x44c1: 0x00391e9a, 0x44c2: 0x00391e99, 0x44c3: 0x0039209a, + 0x44c4: 0x00392099, 0x44c5: 0x0039269a, 0x44c6: 0x00392699, 0x44c7: 0x0039289a, + 0x44c8: 0x00392899, 0x44c9: 0x0039309a, 0x44ca: 0x00393099, 0x44cb: 0x00393097, + 0x44cc: 0x00393098, 0x44cd: 0x0039389a, 0x44ce: 0x00393899, 0x44cf: 0x00393c9a, + 0x44d0: 0x00393c99, 0x44d1: 0x00393c97, 0x44d2: 0x00393c98, 0x44d3: 0x0039549a, + 0x44d4: 0x00395499, 0x44d5: 0x0039569a, 0x44d6: 0x00395699, 0x44d7: 0x00395697, + 0x44d8: 0x00395698, 0x44d9: 0x0039589a, 0x44da: 0x00395899, 0x44db: 0x00395897, + 0x44dc: 0x00395898, 0x44dd: 0x0039649a, 0x44de: 0x00396499, 0x44df: 0x00396497, + 0x44e0: 0x00396498, 0x44e1: 0x0039729a, 0x44e2: 0x00397299, 0x44e3: 0x00397297, + 0x44e4: 0x00397298, 0x44e5: 0x0039749a, 0x44e6: 0x00397499, 0x44e7: 0x00397497, + 0x44e8: 0x00397498, 0x44e9: 0x0039889a, 0x44ea: 0x00398899, 0x44eb: 0x00398a9a, + 0x44ec: 0x00398a99, 0x44ed: 0x0039a49a, 0x44ee: 0x0039a499, 0x44ef: 0x0039a69a, + 0x44f0: 0x0039a699, 0x44f1: 0x0039c69a, 0x44f2: 0x0039c699, 0x44f3: 0x0039c697, + 0x44f4: 0x0039c698, 0x44f5: 0x0039c89a, 0x44f6: 0x0039c899, 0x44f7: 0x0039c897, + 0x44f8: 0x0039c898, 0x44f9: 0x0039dc9a, 0x44fa: 0x0039dc99, 0x44fb: 0x0039dc97, + 0x44fc: 0x0039dc98, 0x44fd: 0x0039de9a, 0x44fe: 0x0039de99, 0x44ff: 0x0039de97, + // Block 0x114, offset 0x4500 + 0x4500: 0x0039de98, 0x4501: 0x0039e69a, 0x4502: 0x0039e699, 0x4503: 0x0039e697, + 0x4504: 0x0039e698, 0x4505: 0x0039e89a, 0x4506: 0x0039e899, 0x4507: 0x0039e897, + 0x4508: 0x0039e898, 0x4509: 0x0039ee9a, 0x450a: 0x0039ee99, 0x450b: 0x0039ee97, + 0x450c: 0x0039ee98, 0x450d: 0x0039f09a, 0x450e: 0x0039f099, 0x450f: 0x0039f097, + 0x4510: 0x0039f098, 0x4511: 0x0039fc9a, 0x4512: 0x0039fc99, 0x4513: 0x0039fc97, + 0x4514: 0x0039fc98, 0x4515: 0x003a129a, 0x4516: 0x003a1299, 0x4517: 0x003a1297, + 0x4518: 0x003a1298, 0x4519: 0x003a1a9a, 0x451a: 0x003a1a99, 0x451b: 0x003a1a97, + 0x451c: 0x003a1a98, 0x451d: 0x003a409a, 0x451e: 0x003a4099, 0x451f: 0x003a4097, + 0x4520: 0x003a4098, 0x4521: 0x003a4e9a, 0x4522: 0x003a4e99, 0x4523: 0x003a4e97, + 0x4524: 0x003a4e98, 0x4525: 0x003a569a, 0x4526: 0x003a5699, 0x4527: 0x003a5697, + 0x4528: 0x003a5698, 0x4529: 0x003a689a, 0x452a: 0x003a6899, 0x452b: 0x003a6897, + 0x452c: 0x003a6898, 0x452d: 0x003a749a, 0x452e: 0x003a7499, 0x452f: 0x003a8e9a, + 0x4530: 0x003a8e99, 0x4531: 0x003a909a, 0x4532: 0x003a9099, 0x4533: 0x003a9097, + 0x4534: 0x003a9098, 0x4535: 0xe0001732, 0x4536: 0xe000172f, 0x4537: 0xe0001738, + 0x4538: 0xe0001735, 0x4539: 0xe000173e, 0x453a: 0xe000173b, 0x453b: 0xf0001a1a, + 0x453c: 0xf0001919, 0x453f: 0xa0000000, + // Block 0x115, offset 0x4540 + 0x4541: 0x0002ba83, 0x4542: 0x0003e083, 0x4543: 0x0004ea83, + 0x4544: 0x0027de83, 0x4545: 0x0004ec83, 0x4546: 0x0004e683, 0x4547: 0x0003d283, + 0x4548: 0x0003f483, 0x4549: 0x0003f683, 0x454a: 0x0004d883, 0x454b: 0x00093883, + 0x454c: 0x00024083, 0x454d: 0x00021a83, 0x454e: 0x0002e483, 0x454f: 0x0004e283, + 0x4550: 0x0029cc83, 0x4551: 0x0029ce83, 0x4552: 0x0029d083, 0x4553: 0x0029d283, + 0x4554: 0x0029d483, 0x4555: 0x0029d683, 0x4556: 0x0029d883, 0x4557: 0x0029da83, + 0x4558: 0x0029dc83, 0x4559: 0x0029de83, 0x455a: 0x00026c83, 0x455b: 0x00026283, + 0x455c: 0x00094083, 0x455d: 0x00094283, 0x455e: 0x00094483, 0x455f: 0x0002c483, + 0x4560: 0x0004d683, 0x4561: 0x002bde89, 0x4562: 0x002c0a89, 0x4563: 0x002c3a89, + 0x4564: 0x002c6289, 0x4565: 0x002c9889, 0x4566: 0x002d0889, 0x4567: 0x002d2289, + 0x4568: 0x002d6889, 0x4569: 0x002d9a89, 0x456a: 0x002dcc89, 0x456b: 0x002dfe89, + 0x456c: 0x002e2289, 0x456d: 0x002e8289, 0x456e: 0x002e9e89, 0x456f: 0x002ee289, + 0x4570: 0x002f2c89, 0x4571: 0x002f5689, 0x4572: 0x002f7a89, 0x4573: 0x002fe689, + 0x4574: 0x00302c89, 0x4575: 0x00306c89, 0x4576: 0x0030be89, 0x4577: 0x0030e289, + 0x4578: 0x0030f689, 0x4579: 0x00310089, 0x457a: 0x00312a89, 0x457b: 0x0003f883, + 0x457c: 0x0004e483, 0x457d: 0x0003fa83, 0x457e: 0x00062483, 0x457f: 0x00021683, + // Block 0x116, offset 0x4580 + 0x4580: 0x00061e83, 0x4581: 0x002bde83, 0x4582: 0x002c0a83, 0x4583: 0x002c3a83, + 0x4584: 0x002c6283, 0x4585: 0x002c9883, 0x4586: 0x002d0883, 0x4587: 0x002d2283, + 0x4588: 0x002d6883, 0x4589: 0x002d9a83, 0x458a: 0x002dcc83, 0x458b: 0x002dfe83, + 0x458c: 0x002e2283, 0x458d: 0x002e8283, 0x458e: 0x002e9e83, 0x458f: 0x002ee283, + 0x4590: 0x002f2c83, 0x4591: 0x002f5683, 0x4592: 0x002f7a83, 0x4593: 0x002fe683, + 0x4594: 0x00302c83, 0x4595: 0x00306c83, 0x4596: 0x0030be83, 0x4597: 0x0030e283, + 0x4598: 0x0030f683, 0x4599: 0x00310083, 0x459a: 0x00312a83, 0x459b: 0x0003fc83, + 0x459c: 0x00094883, 0x459d: 0x0003fe83, 0x459e: 0x00094c83, 0x459f: 0x00041883, + 0x45a0: 0x00041a83, 0x45a1: 0x00030492, 0x45a2: 0x0004a492, 0x45a3: 0x0004a692, + 0x45a4: 0x00025c92, 0x45a5: 0x00023e92, 0x45a6: 0x0065d692, 0x45a7: 0x00657690, + 0x45a8: 0x00657890, 0x45a9: 0x00657a90, 0x45aa: 0x00657e90, 0x45ab: 0x00658090, + 0x45ac: 0x0065be90, 0x45ad: 0x0065c090, 0x45ae: 0x0065c490, 0x45af: 0x00659a90, + 0x45b0: 0x0027d692, 0x45b1: 0x00657692, 0x45b2: 0x00657892, 0x45b3: 0x00657a92, + 0x45b4: 0x00657e92, 0x45b5: 0x00658092, 0x45b6: 0x00658292, 0x45b7: 0x00658492, + 0x45b8: 0x00658692, 0x45b9: 0x00658892, 0x45ba: 0x00658a92, 0x45bb: 0x00658c92, + 0x45bc: 0x00658e92, 0x45bd: 0x00659092, 0x45be: 0x00659292, 0x45bf: 0x00659492, + // Block 0x117, offset 0x45c0 + 0x45c0: 0x00659692, 0x45c1: 0x00659892, 0x45c2: 0x00659a92, 0x45c3: 0x00659c92, + 0x45c4: 0x00659e92, 0x45c5: 0x0065a092, 0x45c6: 0x0065a292, 0x45c7: 0x0065a492, + 0x45c8: 0x0065a692, 0x45c9: 0x0065a892, 0x45ca: 0x0065aa92, 0x45cb: 0x0065ac92, + 0x45cc: 0x0065ae92, 0x45cd: 0x0065b092, 0x45ce: 0x0065b292, 0x45cf: 0x0065b492, + 0x45d0: 0x0065b692, 0x45d1: 0x0065b892, 0x45d2: 0x0065ba92, 0x45d3: 0x0065bc92, + 0x45d4: 0x0065be92, 0x45d5: 0x0065c092, 0x45d6: 0x0065c492, 0x45d7: 0x0065c692, + 0x45d8: 0x0065c892, 0x45d9: 0x0065ca92, 0x45da: 0x0065cc92, 0x45db: 0x0065ce92, + 0x45dc: 0x0065d092, 0x45dd: 0x0065d892, 0x45de: 0xa0012812, 0x45df: 0xa0012912, + 0x45e0: 0x0063a692, 0x45e1: 0x0062ac92, 0x45e2: 0x0062ae92, 0x45e3: 0x00646892, + 0x45e4: 0x0062b092, 0x45e5: 0x00646c92, 0x45e6: 0x00646e92, 0x45e7: 0x0062b292, + 0x45e8: 0x0062b492, 0x45e9: 0x0062b692, 0x45ea: 0x00647492, 0x45eb: 0x00647692, + 0x45ec: 0x00647892, 0x45ed: 0x00647a92, 0x45ee: 0x00647c92, 0x45ef: 0x00647e92, + 0x45f0: 0x0062e092, 0x45f1: 0x0062b892, 0x45f2: 0x0062ba92, 0x45f3: 0x0062bc92, + 0x45f4: 0x0062ee92, 0x45f5: 0x0062be92, 0x45f6: 0x0062c092, 0x45f7: 0x0062c292, + 0x45f8: 0x0062c492, 0x45f9: 0x0062c692, 0x45fa: 0x0062c892, 0x45fb: 0x0062ca92, + 0x45fc: 0x0062cc92, 0x45fd: 0x0062ce92, 0x45fe: 0x0062d092, + // Block 0x118, offset 0x4600 + 0x4602: 0x0063a892, 0x4603: 0x0063aa92, + 0x4604: 0x0063ac92, 0x4605: 0x0063ae92, 0x4606: 0x0063b092, 0x4607: 0x0063b292, + 0x460a: 0x0063b492, 0x460b: 0x0063b692, + 0x460c: 0x0063b892, 0x460d: 0x0063ba92, 0x460e: 0x0063bc92, 0x460f: 0x0063be92, + 0x4612: 0x0063c092, 0x4613: 0x0063c292, + 0x4614: 0x0063c492, 0x4615: 0x0063c692, 0x4616: 0x0063c892, 0x4617: 0x0063ca92, + 0x461a: 0x0063cc92, 0x461b: 0x0063ce92, + 0x461c: 0x0063d092, + 0x4620: 0x0027dc83, 0x4621: 0x0027e083, 0x4622: 0x00094683, 0x4623: 0x00062683, + 0x4624: 0x00094a83, 0x4625: 0x0027e283, 0x4626: 0x00280883, + 0x4628: 0x000d3292, 0x4629: 0x00084492, 0x462a: 0x00084892, 0x462b: 0x00084692, + 0x462c: 0x00084a92, 0x462d: 0x000e6e92, 0x462e: 0x000ec492, + 0x4639: 0xa0000000, 0x463a: 0xa0000000, 0x463b: 0xa0000000, + 0x463c: 0x4027ae20, 0x463d: 0x4027b020, 0x463e: 0x00000285, 0x463f: 0x2bfffe85, + // Block 0x119, offset 0x4640 + 0x4640: 0x40731a20, 0x4641: 0x40731c20, 0x4642: 0x40731e20, 0x4643: 0x40732020, + 0x4644: 0x40732220, 0x4645: 0x40732420, 0x4646: 0x40732620, 0x4647: 0x40732820, + 0x4648: 0x40732a20, 0x4649: 0x40732c20, 0x464a: 0x40732e20, 0x464b: 0x40733020, + 0x464d: 0x40733220, 0x464e: 0x40733420, 0x464f: 0x40733620, + 0x4650: 0x40733820, 0x4651: 0x40733a20, 0x4652: 0x40733c20, 0x4653: 0x40733e20, + 0x4654: 0x40734020, 0x4655: 0x40734220, 0x4656: 0x40734420, 0x4657: 0x40734620, + 0x4658: 0x40734820, 0x4659: 0x40734a20, 0x465a: 0x40734c20, 0x465b: 0x40734e20, + 0x465c: 0x40735020, 0x465d: 0x40735220, 0x465e: 0x40735420, 0x465f: 0x40735620, + 0x4660: 0x40735820, 0x4661: 0x40735a20, 0x4662: 0x40735c20, 0x4663: 0x40735e20, + 0x4664: 0x40736020, 0x4665: 0x40736220, 0x4666: 0x40736420, + 0x4668: 0x40736620, 0x4669: 0x40736820, 0x466a: 0x40736a20, 0x466b: 0x40736c20, + 0x466c: 0x40736e20, 0x466d: 0x40737020, 0x466e: 0x40737220, 0x466f: 0x40737420, + 0x4670: 0x40737620, 0x4671: 0x40737820, 0x4672: 0x40737a20, 0x4673: 0x40737c20, + 0x4674: 0x40737e20, 0x4675: 0x40738020, 0x4676: 0x40738220, 0x4677: 0x40738420, + 0x4678: 0x40738620, 0x4679: 0x40738820, 0x467a: 0x40738a20, + 0x467c: 0x40738c20, 0x467d: 0x40738e20, 0x467f: 0x40739020, + // Block 0x11a, offset 0x4680 + 0x4680: 0x40739220, 0x4681: 0x40739420, 0x4682: 0x40739620, 0x4683: 0x40739820, + 0x4684: 0x40739a20, 0x4685: 0x40739c20, 0x4686: 0x40739e20, 0x4687: 0x4073a020, + 0x4688: 0x4073a220, 0x4689: 0x4073a420, 0x468a: 0x4073a620, 0x468b: 0x4073a820, + 0x468c: 0x4073aa20, 0x468d: 0x4073ac20, + 0x4690: 0x4073ae20, 0x4691: 0x4073b020, 0x4692: 0x4073b220, 0x4693: 0x4073b420, + 0x4694: 0x4073b620, 0x4695: 0x4073b820, 0x4696: 0x4073ba20, 0x4697: 0x4073bc20, + 0x4698: 0x4073be20, 0x4699: 0x4073c020, 0x469a: 0x4073c220, 0x469b: 0x4073c420, + 0x469c: 0x4073c620, 0x469d: 0x4073c820, + // Block 0x11b, offset 0x46c0 + 0x46c0: 0x4073ca20, 0x46c1: 0x4073cc20, 0x46c2: 0x4073ce20, 0x46c3: 0x4073d020, + 0x46c4: 0x4073d220, 0x46c5: 0x4073d420, 0x46c6: 0x4073d620, 0x46c7: 0x4073d820, + 0x46c8: 0x4073da20, 0x46c9: 0x4073dc20, 0x46ca: 0x4073de20, 0x46cb: 0x4073e020, + 0x46cc: 0x4073e220, 0x46cd: 0x4073e420, 0x46ce: 0x4073e620, 0x46cf: 0x4073e820, + 0x46d0: 0x4073ea20, 0x46d1: 0x4073ec20, 0x46d2: 0x4073ee20, 0x46d3: 0x4073f020, + 0x46d4: 0x4073f220, 0x46d5: 0x4073f420, 0x46d6: 0x4073f620, 0x46d7: 0x4073f820, + 0x46d8: 0x4073fa20, 0x46d9: 0x4073fc20, 0x46da: 0x4073fe20, 0x46db: 0x40740020, + 0x46dc: 0x40740220, 0x46dd: 0x40740420, 0x46de: 0x40740620, 0x46df: 0x40740820, + 0x46e0: 0x40740a20, 0x46e1: 0x40740c20, 0x46e2: 0x40740e20, 0x46e3: 0x40741020, + 0x46e4: 0x40741220, 0x46e5: 0x40741420, 0x46e6: 0x40741620, 0x46e7: 0x40741820, + 0x46e8: 0x40741a20, 0x46e9: 0x40741c20, 0x46ea: 0x40741e20, 0x46eb: 0x40742020, + 0x46ec: 0x40742220, 0x46ed: 0x40742420, 0x46ee: 0x40742620, 0x46ef: 0x40742820, + 0x46f0: 0x40742a20, 0x46f1: 0x40742c20, 0x46f2: 0x40742e20, 0x46f3: 0x40743020, + 0x46f4: 0x40743220, 0x46f5: 0x40743420, 0x46f6: 0x40743620, 0x46f7: 0x40743820, + 0x46f8: 0x40743a20, 0x46f9: 0x40743c20, 0x46fa: 0x40743e20, 0x46fb: 0x40744020, + 0x46fc: 0x40744220, 0x46fd: 0x40744420, 0x46fe: 0x40744620, 0x46ff: 0x40744820, + // Block 0x11c, offset 0x4700 + 0x4700: 0x40744a20, 0x4701: 0x40744c20, 0x4702: 0x40744e20, 0x4703: 0x40745020, + 0x4704: 0x40745220, 0x4705: 0x40745420, 0x4706: 0x40745620, 0x4707: 0x40745820, + 0x4708: 0x40745a20, 0x4709: 0x40745c20, 0x470a: 0x40745e20, 0x470b: 0x40746020, + 0x470c: 0x40746220, 0x470d: 0x40746420, 0x470e: 0x40746620, 0x470f: 0x40746820, + 0x4710: 0x40746a20, 0x4711: 0x40746c20, 0x4712: 0x40746e20, 0x4713: 0x40747020, + 0x4714: 0x40747220, 0x4715: 0x40747420, 0x4716: 0x40747620, 0x4717: 0x40747820, + 0x4718: 0x40747a20, 0x4719: 0x40747c20, 0x471a: 0x40747e20, 0x471b: 0x40748020, + 0x471c: 0x40748220, 0x471d: 0x40748420, 0x471e: 0x40748620, 0x471f: 0x40748820, + 0x4720: 0x40748a20, 0x4721: 0x40748c20, 0x4722: 0x40748e20, 0x4723: 0x40749020, + 0x4724: 0x40749220, 0x4725: 0x40749420, 0x4726: 0x40749620, 0x4727: 0x40749820, + 0x4728: 0x40749a20, 0x4729: 0x40749c20, 0x472a: 0x40749e20, 0x472b: 0x4074a020, + 0x472c: 0x4074a220, 0x472d: 0x4074a420, 0x472e: 0x4074a620, 0x472f: 0x4074a820, + 0x4730: 0x4074aa20, 0x4731: 0x4074ac20, 0x4732: 0x4074ae20, 0x4733: 0x4074b020, + 0x4734: 0x4074b220, 0x4735: 0x4074b420, 0x4736: 0x4074b620, 0x4737: 0x4074b820, + 0x4738: 0x4074ba20, 0x4739: 0x4074bc20, 0x473a: 0x4074be20, + // Block 0x11d, offset 0x4740 + 0x4740: 0x4003be20, 0x4741: 0x4003c020, 0x4742: 0x4003c220, + 0x4747: 0xe000026a, + 0x4748: 0xe0000382, 0x4749: 0xe000045c, 0x474a: 0xe0000531, 0x474b: 0xe00005fb, + 0x474c: 0xe00006c6, 0x474d: 0xe000076e, 0x474e: 0xe000081a, 0x474f: 0xe00008bf, + 0x4750: 0x4028ba20, 0x4751: 0x4028bc20, 0x4752: 0x4028be20, 0x4753: 0x4028c020, + 0x4754: 0x4028c220, 0x4755: 0x4028c420, 0x4756: 0x4028c620, 0x4757: 0x4028c820, + 0x4758: 0x4028ca20, 0x4759: 0x4028cc20, 0x475a: 0x4028ce20, 0x475b: 0x4028d020, + 0x475c: 0x4028d220, 0x475d: 0x4028d420, 0x475e: 0x4028d620, 0x475f: 0x4028d820, + 0x4760: 0x4028da20, 0x4761: 0x4028dc20, 0x4762: 0x4028de20, 0x4763: 0x4028e020, + 0x4764: 0x4028e220, 0x4765: 0x4028e420, 0x4766: 0x4028e620, 0x4767: 0x4028e820, + 0x4768: 0x4028ea20, 0x4769: 0x4028ec20, 0x476a: 0x4028ee20, 0x476b: 0x4028f020, + 0x476c: 0x4028f220, 0x476d: 0x4028f420, 0x476e: 0x4028f620, 0x476f: 0x4028f820, + 0x4770: 0x4028fa20, 0x4771: 0x4028fc20, 0x4772: 0x4028fe20, 0x4773: 0x40290020, + 0x4777: 0x401afe20, + 0x4778: 0x401b0020, 0x4779: 0x401b0220, 0x477a: 0x401b0420, 0x477b: 0x401b0620, + 0x477c: 0x401b0820, 0x477d: 0x401b0a20, 0x477e: 0x401b0c20, 0x477f: 0x401b0e20, + // Block 0x11e, offset 0x4780 + 0x4780: 0x40290220, 0x4781: 0x40290420, 0x4782: 0xe000026d, 0x4783: 0xe00005fe, + 0x4784: 0x40290620, 0x4785: 0x40290820, 0x4786: 0x40290a20, 0x4787: 0x40290c20, + 0x4788: 0xe0000601, 0x4789: 0x40290e20, 0x478a: 0x40291020, 0x478b: 0x40291220, + 0x478c: 0x40291420, 0x478d: 0x40291620, 0x478e: 0x40291820, 0x478f: 0xe0000604, + 0x4790: 0x40291a20, 0x4791: 0x40291c20, 0x4792: 0x40291e20, 0x4793: 0x40292020, + 0x4794: 0x40292220, 0x4795: 0x40292420, 0x4796: 0x40292620, 0x4797: 0x40292820, + 0x4798: 0xe0000270, 0x4799: 0xe0000273, 0x479a: 0xe0000276, 0x479b: 0xe0000385, + 0x479c: 0xe0000388, 0x479d: 0xe000038b, 0x479e: 0xe000038e, 0x479f: 0xe0000607, + 0x47a0: 0x40292a20, 0x47a1: 0x40292c20, 0x47a2: 0x40292e20, 0x47a3: 0x40293020, + 0x47a4: 0x40293220, 0x47a5: 0x40293420, 0x47a6: 0x40293620, 0x47a7: 0x40293820, + 0x47a8: 0x40293a20, 0x47a9: 0x40293c20, 0x47aa: 0x40293e20, 0x47ab: 0x40294020, + 0x47ac: 0x40294220, 0x47ad: 0x40294420, 0x47ae: 0x40294620, 0x47af: 0x40294820, + 0x47b0: 0x40294a20, 0x47b1: 0x40294c20, 0x47b2: 0x40294e20, 0x47b3: 0xe000060a, + 0x47b4: 0x40295020, 0x47b5: 0x40295220, 0x47b6: 0x40295420, 0x47b7: 0x40295620, + 0x47b8: 0x40295820, 0x47b9: 0x401b1020, 0x47ba: 0x401b1220, 0x47bb: 0x401b1420, + 0x47bc: 0x401b1620, 0x47bd: 0x401b1820, 0x47be: 0x401b1a20, 0x47bf: 0x401b1c20, + // Block 0x11f, offset 0x47c0 + 0x47c0: 0x401b1e20, 0x47c1: 0x401b2020, 0x47c2: 0x401b2220, 0x47c3: 0x401b2420, + 0x47c4: 0x401b2620, 0x47c5: 0x401b2820, 0x47c6: 0x401b2a20, 0x47c7: 0x401b2c20, + 0x47c8: 0x401b2e20, 0x47c9: 0x401b3020, 0x47ca: 0xe00001d6, + 0x47d0: 0x401b3220, 0x47d1: 0x401b3420, 0x47d2: 0x401b3620, 0x47d3: 0x401b3820, + 0x47d4: 0x401b3a20, 0x47d5: 0x401b3c20, 0x47d6: 0x401b3e20, 0x47d7: 0x401b4020, + 0x47d8: 0x401b4220, 0x47d9: 0x401b4420, 0x47da: 0x401b4620, 0x47db: 0x401b4820, + // Block 0x120, offset 0x4800 + 0x4810: 0x401b4a20, 0x4811: 0x401b4c20, 0x4812: 0x401b4e20, 0x4813: 0x401b5020, + 0x4814: 0x401b5220, 0x4815: 0x401b5420, 0x4816: 0x401b5620, 0x4817: 0x401b5820, + 0x4818: 0x401b5a20, 0x4819: 0x401b5c20, 0x481a: 0x401b5e20, 0x481b: 0x401b6020, + 0x481c: 0x401b6220, 0x481d: 0x401b6420, 0x481e: 0x401b6620, 0x481f: 0x401b6820, + 0x4820: 0x401b6a20, 0x4821: 0x401b6c20, 0x4822: 0x401b6e20, 0x4823: 0x401b7020, + 0x4824: 0x401b7220, 0x4825: 0x401b7420, 0x4826: 0x401b7620, 0x4827: 0x401b7820, + 0x4828: 0x401b7a20, 0x4829: 0x401b7c20, 0x482a: 0x401b7e20, 0x482b: 0x401b8020, + 0x482c: 0x401b8220, 0x482d: 0x401b8420, 0x482e: 0x401b8620, 0x482f: 0x401b8820, + 0x4830: 0x401b8a20, 0x4831: 0x401b8c20, 0x4832: 0x401b8e20, 0x4833: 0x401b9020, + 0x4834: 0x401b9220, 0x4835: 0x401b9420, 0x4836: 0x401b9620, 0x4837: 0x401b9820, + 0x4838: 0x401b9a20, 0x4839: 0x401b9c20, 0x483a: 0x401b9e20, 0x483b: 0x401ba020, + 0x483c: 0x401ba220, 0x483d: 0xadc13802, + // Block 0x121, offset 0x4840 + 0x4840: 0x4070b820, 0x4841: 0x4070ba20, 0x4842: 0x4070bc20, 0x4843: 0x4070be20, + 0x4844: 0x4070c020, 0x4845: 0x4070c220, 0x4846: 0x4070c420, 0x4847: 0x4070c620, + 0x4848: 0x4070c820, 0x4849: 0x4070ca20, 0x484a: 0x4070cc20, 0x484b: 0x4070ce20, + 0x484c: 0x4070d020, 0x484d: 0x4070d220, 0x484e: 0x4070d420, 0x484f: 0x4070d620, + 0x4850: 0x4070d820, 0x4851: 0x4070da20, 0x4852: 0x4070dc20, 0x4853: 0x4070de20, + 0x4854: 0x4070e020, 0x4855: 0x4070e220, 0x4856: 0x4070e420, 0x4857: 0x4070e620, + 0x4858: 0x4070e820, 0x4859: 0x4070ea20, 0x485a: 0x4070ec20, 0x485b: 0x4070ee20, + 0x485c: 0x4070f020, + 0x4860: 0x4070f220, 0x4861: 0x4070f420, 0x4862: 0x4070f620, 0x4863: 0x4070f820, + 0x4864: 0x4070fa20, 0x4865: 0x4070fc20, 0x4866: 0x4070fe20, 0x4867: 0x40710020, + 0x4868: 0x40710220, 0x4869: 0x40710420, 0x486a: 0x40710620, 0x486b: 0x40710820, + 0x486c: 0x40710a20, 0x486d: 0x40710c20, 0x486e: 0x40710e20, 0x486f: 0x40711020, + 0x4870: 0x40711220, 0x4871: 0x40711420, 0x4872: 0x40711620, 0x4873: 0x40711820, + 0x4874: 0x40711a20, 0x4875: 0x40711c20, 0x4876: 0x40711e20, 0x4877: 0x40712020, + 0x4878: 0x40712220, 0x4879: 0x40712420, 0x487a: 0x40712620, 0x487b: 0x40712820, + 0x487c: 0x40712a20, 0x487d: 0x40712c20, 0x487e: 0x40712e20, 0x487f: 0x40713020, + // Block 0x122, offset 0x4880 + 0x4880: 0x40713220, 0x4881: 0x40713420, 0x4882: 0x40713620, 0x4883: 0x40713820, + 0x4884: 0x40713a20, 0x4885: 0x40713c20, 0x4886: 0x40713e20, 0x4887: 0x40714020, + 0x4888: 0x40714220, 0x4889: 0x40714420, 0x488a: 0x40714620, 0x488b: 0x40714820, + 0x488c: 0x40714a20, 0x488d: 0x40714c20, 0x488e: 0x40714e20, 0x488f: 0x40715020, + 0x4890: 0x40715220, + // Block 0x123, offset 0x48c0 + 0x48c0: 0x40718820, 0x48c1: 0x40718a20, 0x48c2: 0x40718c20, 0x48c3: 0x40718e20, + 0x48c4: 0x40719020, 0x48c5: 0x40719220, 0x48c6: 0x40719420, 0x48c7: 0x40719620, + 0x48c8: 0x40719820, 0x48c9: 0x40719a20, 0x48ca: 0x40719c20, 0x48cb: 0x40719e20, + 0x48cc: 0x4071a020, 0x48cd: 0x4071a220, 0x48ce: 0x4071a420, 0x48cf: 0x4071a620, + 0x48d0: 0x4071a820, 0x48d1: 0x4071aa20, 0x48d2: 0x4071ac20, 0x48d3: 0x4071ae20, + 0x48d4: 0x4071b020, 0x48d5: 0x4071b220, 0x48d6: 0x4071b420, 0x48d7: 0x4071b620, + 0x48d8: 0x4071b820, 0x48d9: 0x4071ba20, 0x48da: 0x4071bc20, 0x48db: 0x4071be20, + 0x48dc: 0x4071c020, 0x48dd: 0x4071c220, 0x48de: 0x4071c420, + 0x48e0: 0xe0000279, 0x48e1: 0xe000060d, 0x48e2: 0x4028b620, 0x48e3: 0x4028b820, + 0x48f0: 0x4071c620, 0x48f1: 0x4071c820, 0x48f2: 0x4071ca20, 0x48f3: 0x4071cc20, + 0x48f4: 0x4071ce20, 0x48f5: 0x4071d020, 0x48f6: 0x4071d220, 0x48f7: 0x4071d420, + 0x48f8: 0x4071d620, 0x48f9: 0x4071d820, 0x48fa: 0x4071da20, 0x48fb: 0x4071dc20, + 0x48fc: 0x4071de20, 0x48fd: 0x4071e020, 0x48fe: 0x4071e220, 0x48ff: 0x4071e420, + // Block 0x124, offset 0x4900 + 0x4900: 0x4071e620, 0x4901: 0x4071e820, 0x4902: 0x4071ea20, 0x4903: 0x4071ec20, + 0x4904: 0x4071ee20, 0x4905: 0x4071f020, 0x4906: 0x4071f220, 0x4907: 0x4071f420, + 0x4908: 0x4071f620, 0x4909: 0x4071f820, 0x490a: 0x4071fa20, + // Block 0x125, offset 0x4940 + 0x4940: 0x40765020, 0x4941: 0x40765220, 0x4942: 0x40765420, 0x4943: 0x40765620, + 0x4944: 0x40765820, 0x4945: 0x40765a20, 0x4946: 0x40765c20, 0x4947: 0x40765e20, + 0x4948: 0x40766020, 0x4949: 0x40766220, 0x494a: 0x40766420, 0x494b: 0x40766620, + 0x494c: 0x40766820, 0x494d: 0x40766a20, 0x494e: 0x40766c20, 0x494f: 0x40766e20, + 0x4950: 0x40767020, 0x4951: 0x40767220, 0x4952: 0x40767420, 0x4953: 0x40767620, + 0x4954: 0x40767820, 0x4955: 0x40767a20, 0x4956: 0x40767c20, 0x4957: 0x40767e20, + 0x4958: 0x40768020, 0x4959: 0x40768220, 0x495a: 0x40768420, 0x495b: 0x40768620, + 0x495c: 0x40768820, 0x495d: 0x40768a20, 0x495f: 0x4003c420, + 0x4960: 0x40768c20, 0x4961: 0x40768e20, 0x4962: 0x40769020, 0x4963: 0x40769220, + 0x4964: 0x40769420, 0x4965: 0x40769620, 0x4966: 0x40769820, 0x4967: 0x40769a20, + 0x4968: 0x40769c20, 0x4969: 0x40769e20, 0x496a: 0x4076a020, 0x496b: 0x4076a220, + 0x496c: 0x4076a420, 0x496d: 0x4076a620, 0x496e: 0x4076a820, 0x496f: 0x4076aa20, + 0x4970: 0x4076ac20, 0x4971: 0x4076ae20, 0x4972: 0x4076b020, 0x4973: 0x4076b220, + 0x4974: 0x4076b420, 0x4975: 0x4076b620, 0x4976: 0x4076b820, 0x4977: 0x4076ba20, + 0x4978: 0x4076bc20, 0x4979: 0x4076be20, 0x497a: 0x4076c020, 0x497b: 0x4076c220, + 0x497c: 0x4076c420, 0x497d: 0x4076c620, 0x497e: 0x4076c820, 0x497f: 0x4076ca20, + // Block 0x126, offset 0x4980 + 0x4980: 0x4076cc20, 0x4981: 0x4076ce20, 0x4982: 0x4076d020, 0x4983: 0x4076d220, + 0x4988: 0x4076d420, 0x4989: 0x4076d620, 0x498a: 0x4076d820, 0x498b: 0x4076da20, + 0x498c: 0x4076dc20, 0x498d: 0x4076de20, 0x498e: 0x4076e020, 0x498f: 0x4076e220, + 0x4990: 0x4003c620, 0x4991: 0xe000027c, 0x4992: 0xe0000391, 0x4993: 0x40295a20, + 0x4994: 0x40295c20, 0x4995: 0x40295e20, + // Block 0x127, offset 0x49c0 + 0x49c0: 0x0071fc88, 0x49c1: 0x0071fe88, 0x49c2: 0x00720088, 0x49c3: 0x00720288, + 0x49c4: 0x00720488, 0x49c5: 0x00720688, 0x49c6: 0x00720888, 0x49c7: 0x00720a88, + 0x49c8: 0x00720c88, 0x49c9: 0x00720e88, 0x49ca: 0x00721088, 0x49cb: 0x00721288, + 0x49cc: 0x00721488, 0x49cd: 0x00721688, 0x49ce: 0x00721888, 0x49cf: 0x00721a88, + 0x49d0: 0x00721c88, 0x49d1: 0x00721e88, 0x49d2: 0x00722088, 0x49d3: 0x00722288, + 0x49d4: 0x00722488, 0x49d5: 0x00722688, 0x49d6: 0x00722888, 0x49d7: 0x00722a88, + 0x49d8: 0x00722c88, 0x49d9: 0x00722e88, 0x49da: 0x00723088, 0x49db: 0x00723288, + 0x49dc: 0x00723488, 0x49dd: 0x00723688, 0x49de: 0x00723888, 0x49df: 0x00723a88, + 0x49e0: 0x00723c88, 0x49e1: 0x00723e88, 0x49e2: 0x00724088, 0x49e3: 0x00724288, + 0x49e4: 0x00724488, 0x49e5: 0x00724688, 0x49e6: 0x00724888, 0x49e7: 0x00724a88, + 0x49e8: 0x4071fc20, 0x49e9: 0x4071fe20, 0x49ea: 0x40720020, 0x49eb: 0x40720220, + 0x49ec: 0x40720420, 0x49ed: 0x40720620, 0x49ee: 0x40720820, 0x49ef: 0x40720a20, + 0x49f0: 0x40720c20, 0x49f1: 0x40720e20, 0x49f2: 0x40721020, 0x49f3: 0x40721220, + 0x49f4: 0x40721420, 0x49f5: 0x40721620, 0x49f6: 0x40721820, 0x49f7: 0x40721a20, + 0x49f8: 0x40721c20, 0x49f9: 0x40721e20, 0x49fa: 0x40722020, 0x49fb: 0x40722220, + 0x49fc: 0x40722420, 0x49fd: 0x40722620, 0x49fe: 0x40722820, 0x49ff: 0x40722a20, + // Block 0x128, offset 0x4a00 + 0x4a00: 0x40722c20, 0x4a01: 0x40722e20, 0x4a02: 0x40723020, 0x4a03: 0x40723220, + 0x4a04: 0x40723420, 0x4a05: 0x40723620, 0x4a06: 0x40723820, 0x4a07: 0x40723a20, + 0x4a08: 0x40723c20, 0x4a09: 0x40723e20, 0x4a0a: 0x40724020, 0x4a0b: 0x40724220, + 0x4a0c: 0x40724420, 0x4a0d: 0x40724620, 0x4a0e: 0x40724820, 0x4a0f: 0x40724a20, + 0x4a10: 0x40724c20, 0x4a11: 0x40724e20, 0x4a12: 0x40725020, 0x4a13: 0x40725220, + 0x4a14: 0x40725420, 0x4a15: 0x40725620, 0x4a16: 0x40725820, 0x4a17: 0x40725a20, + 0x4a18: 0x40725c20, 0x4a19: 0x40725e20, 0x4a1a: 0x40726020, 0x4a1b: 0x40726220, + 0x4a1c: 0x40726420, 0x4a1d: 0x40726620, 0x4a1e: 0x40726820, 0x4a1f: 0x40726a20, + 0x4a20: 0x40726c20, 0x4a21: 0x40726e20, 0x4a22: 0x40727020, 0x4a23: 0x40727220, + 0x4a24: 0x40727420, 0x4a25: 0x40727620, 0x4a26: 0x40727820, 0x4a27: 0x40727a20, + 0x4a28: 0x40727c20, 0x4a29: 0x40727e20, 0x4a2a: 0x40728020, 0x4a2b: 0x40728220, + 0x4a2c: 0x40728420, 0x4a2d: 0x40728620, 0x4a2e: 0x40728820, 0x4a2f: 0x40728a20, + 0x4a30: 0x40728c20, 0x4a31: 0x40728e20, 0x4a32: 0x40729020, 0x4a33: 0x40729220, + 0x4a34: 0x40729420, 0x4a35: 0x40729620, 0x4a36: 0x40729820, 0x4a37: 0x40729a20, + 0x4a38: 0x40729c20, 0x4a39: 0x40729e20, 0x4a3a: 0x4072a020, 0x4a3b: 0x4072a220, + 0x4a3c: 0x4072a420, 0x4a3d: 0x4072a620, 0x4a3e: 0x4072a820, 0x4a3f: 0x4072aa20, + // Block 0x129, offset 0x4a40 + 0x4a40: 0x4072ac20, 0x4a41: 0x4072ae20, 0x4a42: 0x4072b020, 0x4a43: 0x4072b220, + 0x4a44: 0x4072b420, 0x4a45: 0x4072b620, 0x4a46: 0x4072b820, 0x4a47: 0x4072ba20, + 0x4a48: 0x4072bc20, 0x4a49: 0x4072be20, 0x4a4a: 0x4072c020, 0x4a4b: 0x4072c220, + 0x4a4c: 0x4072c420, 0x4a4d: 0x4072c620, 0x4a4e: 0x4072c820, 0x4a4f: 0x4072ca20, + 0x4a50: 0x4072cc20, 0x4a51: 0x4072ce20, 0x4a52: 0x4072d020, 0x4a53: 0x4072d220, + 0x4a54: 0x4072d420, 0x4a55: 0x4072d620, 0x4a56: 0x4072d820, 0x4a57: 0x4072da20, + 0x4a58: 0x4072dc20, 0x4a59: 0x4072de20, 0x4a5a: 0x4072e020, 0x4a5b: 0x4072e220, + 0x4a5c: 0x4072e420, 0x4a5d: 0x4072e620, + 0x4a60: 0xe0000167, 0x4a61: 0xe00001f5, 0x4a62: 0xe0000310, 0x4a63: 0xe00003ea, + 0x4a64: 0xe00004c5, 0x4a65: 0xe000058f, 0x4a66: 0xe000065a, 0x4a67: 0xe0000702, + 0x4a68: 0xe00007ae, 0x4a69: 0xe0000853, + // Block 0x12a, offset 0x4a80 + 0x4a80: 0x4074c020, 0x4a81: 0x4074c220, 0x4a82: 0x4074c420, 0x4a83: 0x4074c620, + 0x4a84: 0x4074c820, 0x4a85: 0x4074ca20, + 0x4a88: 0x4074cc20, 0x4a8a: 0x4074ce20, 0x4a8b: 0x4074d020, + 0x4a8c: 0x4074d220, 0x4a8d: 0x4074d420, 0x4a8e: 0x4074d620, 0x4a8f: 0x4074d820, + 0x4a90: 0x4074da20, 0x4a91: 0x4074dc20, 0x4a92: 0x4074de20, 0x4a93: 0x4074e020, + 0x4a94: 0x4074e220, 0x4a95: 0x4074e420, 0x4a96: 0x4074e620, 0x4a97: 0x4074e820, + 0x4a98: 0x4074ea20, 0x4a99: 0x4074ec20, 0x4a9a: 0x4074ee20, 0x4a9b: 0x4074f020, + 0x4a9c: 0x4074f220, 0x4a9d: 0x4074f420, 0x4a9e: 0x4074f620, 0x4a9f: 0x4074f820, + 0x4aa0: 0x4074fa20, 0x4aa1: 0x4074fc20, 0x4aa2: 0x4074fe20, 0x4aa3: 0x40750020, + 0x4aa4: 0x40750220, 0x4aa5: 0x40750420, 0x4aa6: 0x40750620, 0x4aa7: 0x40750820, + 0x4aa8: 0x40750a20, 0x4aa9: 0x40750c20, 0x4aaa: 0x40750e20, 0x4aab: 0x40751020, + 0x4aac: 0x40751220, 0x4aad: 0x40751420, 0x4aae: 0x40751620, 0x4aaf: 0x40751820, + 0x4ab0: 0x40751a20, 0x4ab1: 0x40751c20, 0x4ab2: 0x40751e20, 0x4ab3: 0x40752020, + 0x4ab4: 0x40752220, 0x4ab5: 0x40752420, 0x4ab7: 0x40752620, + 0x4ab8: 0x40752820, + 0x4abc: 0x40752a20, 0x4abf: 0x40752c20, + // Block 0x12b, offset 0x4ac0 + 0x4ac0: 0x4075d220, 0x4ac1: 0x4075d420, 0x4ac2: 0x4075d620, 0x4ac3: 0x4075d820, + 0x4ac4: 0x4075da20, 0x4ac5: 0x4075dc20, 0x4ac6: 0x4075de20, 0x4ac7: 0x4075e020, + 0x4ac8: 0x4075e220, 0x4ac9: 0x4075e420, 0x4aca: 0x4075e620, 0x4acb: 0x4075e820, + 0x4acc: 0x4075ea20, 0x4acd: 0x4075ec20, 0x4ace: 0x4075ee20, 0x4acf: 0x4075f020, + 0x4ad0: 0x4075f220, 0x4ad1: 0x4075f420, 0x4ad2: 0x4075f620, 0x4ad3: 0x4075f820, + 0x4ad4: 0x4075fa20, 0x4ad5: 0x4075fc20, 0x4ad7: 0x40038620, + 0x4ad8: 0xe0000297, 0x4ad9: 0xe00003b2, 0x4ada: 0xe000048c, 0x4adb: 0x40296820, + 0x4adc: 0x40296a20, 0x4add: 0x40296c20, 0x4ade: 0x40296e20, 0x4adf: 0x40297020, + // Block 0x12c, offset 0x4b00 + 0x4b00: 0x4038bc20, 0x4b01: 0x4038be20, 0x4b02: 0x4038c020, 0x4b03: 0x4038c220, + 0x4b04: 0x4038c420, 0x4b05: 0x4038c620, 0x4b06: 0x4038c820, 0x4b07: 0x4038ca20, + 0x4b08: 0x4038cc20, 0x4b09: 0x4038ce20, 0x4b0a: 0x4038d020, 0x4b0b: 0x4038d220, + 0x4b0c: 0x4038d420, 0x4b0d: 0x4038d620, 0x4b0e: 0x4038d820, 0x4b0f: 0x4038da20, + 0x4b10: 0x4038dc20, 0x4b11: 0x4038de20, 0x4b12: 0x4038e020, 0x4b13: 0x4038e220, + 0x4b14: 0x4038e420, 0x4b15: 0x4038e620, 0x4b16: 0xe0000294, 0x4b17: 0x40296220, + 0x4b18: 0x40296420, 0x4b19: 0x40296620, 0x4b1a: 0xe00003af, 0x4b1b: 0xe0000489, + 0x4b1f: 0x4003c820, + 0x4b20: 0x40715420, 0x4b21: 0x40715620, 0x4b22: 0x40715820, 0x4b23: 0x40715a20, + 0x4b24: 0x40715c20, 0x4b25: 0x40715e20, 0x4b26: 0x40716020, 0x4b27: 0x40716220, + 0x4b28: 0x40716420, 0x4b29: 0x40716620, 0x4b2a: 0x40716820, 0x4b2b: 0x40716a20, + 0x4b2c: 0x40716c20, 0x4b2d: 0x40716e20, 0x4b2e: 0x40717020, 0x4b2f: 0x40717220, + 0x4b30: 0x40717420, 0x4b31: 0x40717620, 0x4b32: 0x40717820, 0x4b33: 0x40717a20, + 0x4b34: 0x40717c20, 0x4b35: 0x40717e20, 0x4b36: 0x40718020, 0x4b37: 0x40718220, + 0x4b38: 0x40718420, 0x4b39: 0x40718620, + 0x4b3f: 0x4003bc20, + // Block 0x12d, offset 0x4b40 + 0x4b40: 0xe00023a4, 0x4b41: 0xe00023a7, 0x4b42: 0xe00023aa, 0x4b43: 0xe00023ad, + 0x4b44: 0xe00023b0, 0x4b45: 0xe00023b3, 0x4b46: 0xe00023b6, 0x4b47: 0xe00023b9, + 0x4b48: 0xe00023bc, 0x4b49: 0xe00023bf, 0x4b4a: 0xe00023c2, 0x4b4b: 0xe00023c5, + 0x4b4c: 0xe00023c8, 0x4b4d: 0xe00023cb, 0x4b4e: 0xe00023ce, 0x4b4f: 0xe00023d1, + 0x4b50: 0xe00023d4, 0x4b51: 0xe00023d7, 0x4b52: 0xe00023da, 0x4b53: 0xe00023e0, + 0x4b54: 0xe00023e3, 0x4b55: 0xe00023e6, 0x4b56: 0xe00023e9, 0x4b57: 0xe00023ec, + 0x4b58: 0xe00023ef, 0x4b59: 0xe00023f2, 0x4b5a: 0xe00023f5, 0x4b5b: 0xe00023f8, + 0x4b5c: 0xe00023fb, 0x4b5d: 0xe00023fe, 0x4b5e: 0x40865220, 0x4b5f: 0x40865420, + 0x4b60: 0x40862020, 0x4b61: 0x40862220, 0x4b62: 0x40862420, 0x4b63: 0x40862620, + 0x4b64: 0x40862820, 0x4b65: 0x40862a20, 0x4b66: 0x40862c20, 0x4b67: 0x40862e20, + 0x4b68: 0x40863020, 0x4b69: 0x40863220, 0x4b6a: 0x40863420, 0x4b6b: 0x40863620, + 0x4b6c: 0x40863820, 0x4b6d: 0x40863a20, 0x4b6e: 0x40863c20, 0x4b6f: 0x40863e20, + 0x4b70: 0xe00023dd, 0x4b71: 0x40864020, 0x4b72: 0x40864220, 0x4b73: 0x40864420, + 0x4b74: 0x40864620, 0x4b75: 0x40864820, 0x4b76: 0x40864a20, 0x4b77: 0x40864c20, + 0x4b7e: 0x40864e20, 0x4b7f: 0x40865020, + // Block 0x12e, offset 0x4b80 + 0x4b80: 0x4048bc20, 0x4b81: 0x4048be20, 0x4b82: 0x4048c020, 0x4b83: 0x4048c220, + 0x4b85: 0x4048c420, 0x4b86: 0x4048c620, + 0x4b8c: 0x4048c820, 0x4b8d: 0xadc06002, 0x4b8e: 0xa000f302, 0x4b8f: 0xae60f402, + 0x4b90: 0x4048ca20, 0x4b91: 0x4048cc20, 0x4b92: 0x4048ce20, 0x4b93: 0x4048d020, + 0x4b95: 0x4048d220, 0x4b96: 0x4048d420, 0x4b97: 0x4048d620, + 0x4b99: 0x4048d820, 0x4b9a: 0x4048da20, 0x4b9b: 0x4048dc20, + 0x4b9c: 0x4048de20, 0x4b9d: 0x4048e020, 0x4b9e: 0x4048e220, 0x4b9f: 0x4048e420, + 0x4ba0: 0x4048e620, 0x4ba1: 0x4048e820, 0x4ba2: 0x4048ea20, 0x4ba3: 0x4048ec20, + 0x4ba4: 0x4048ee20, 0x4ba5: 0x4048f020, 0x4ba6: 0x4048f220, 0x4ba7: 0x4048f420, + 0x4ba8: 0x4048f620, 0x4ba9: 0x4048f820, 0x4baa: 0x4048fa20, 0x4bab: 0x4048fc20, + 0x4bac: 0x4048fe20, 0x4bad: 0x40490020, 0x4bae: 0x40490220, 0x4baf: 0x40490420, + 0x4bb0: 0x40490620, 0x4bb1: 0x40490820, 0x4bb2: 0x40490a20, 0x4bb3: 0x40490c20, + 0x4bb8: 0xae60fb02, 0x4bb9: 0xa010fc02, 0x4bba: 0xadc0fd02, + 0x4bbf: 0x82092487, + // Block 0x12f, offset 0x4bc0 + 0x4bc0: 0xe00002ac, 0x4bc1: 0xe00003c7, 0x4bc2: 0xe00004a1, 0x4bc3: 0xe0000573, + 0x4bc4: 0x40299820, 0x4bc5: 0x40299a20, 0x4bc6: 0x40299c20, 0x4bc7: 0x40299e20, + 0x4bd0: 0x40060620, 0x4bd1: 0x40060820, 0x4bd2: 0x40060a20, 0x4bd3: 0x40060c20, + 0x4bd4: 0x40060e20, 0x4bd5: 0x40061020, 0x4bd6: 0x40034420, 0x4bd7: 0x40034620, + 0x4bd8: 0x40061220, + 0x4be0: 0x40752e20, 0x4be1: 0x40753020, 0x4be2: 0x40753220, 0x4be3: 0x40753420, + 0x4be4: 0x40753620, 0x4be5: 0x40753820, 0x4be6: 0x40753a20, 0x4be7: 0x40753c20, + 0x4be8: 0x40753e20, 0x4be9: 0x40754020, 0x4bea: 0x40754220, 0x4beb: 0x40754420, + 0x4bec: 0x40754620, 0x4bed: 0x40754820, 0x4bee: 0x40754a20, 0x4bef: 0x40754c20, + 0x4bf0: 0x40754e20, 0x4bf1: 0x40755020, 0x4bf2: 0x40755220, 0x4bf3: 0x40755420, + 0x4bf4: 0x40755620, 0x4bf5: 0x40755820, 0x4bf6: 0x40755a20, 0x4bf7: 0x40755c20, + 0x4bf8: 0x40755e20, 0x4bf9: 0x40756020, 0x4bfa: 0x40756220, 0x4bfb: 0x40756420, + 0x4bfc: 0x40756620, 0x4bfd: 0xe0000291, 0x4bfe: 0x40296020, 0x4bff: 0x40061c20, + // Block 0x130, offset 0x4c00 + 0x4c00: 0x40756820, 0x4c01: 0x40756a20, 0x4c02: 0x40756c20, 0x4c03: 0x40756e20, + 0x4c04: 0x40757020, 0x4c05: 0x40757220, 0x4c06: 0x40757420, 0x4c07: 0x40757620, + 0x4c08: 0x40757820, 0x4c09: 0x40757a20, 0x4c0a: 0x40757c20, 0x4c0b: 0x40757e20, + 0x4c0c: 0x40758020, 0x4c0d: 0x40758220, 0x4c0e: 0x40758420, 0x4c0f: 0x40758620, + 0x4c10: 0x40758820, 0x4c11: 0x40758a20, 0x4c12: 0x40758c20, 0x4c13: 0x40758e20, + 0x4c14: 0x40759020, 0x4c15: 0x40759220, 0x4c16: 0x40759420, 0x4c17: 0x40759620, + 0x4c18: 0x40759820, 0x4c19: 0x40759a20, 0x4c1a: 0x40759c20, 0x4c1b: 0x40759e20, + 0x4c1c: 0x4075a020, 0x4c1d: 0x4075a220, 0x4c1e: 0x4075a420, 0x4c1f: 0x4075a620, + 0x4c20: 0x4075a820, 0x4c21: 0x4075aa20, 0x4c22: 0x4075ac20, 0x4c23: 0x4075ae20, + 0x4c24: 0x4075b020, 0x4c25: 0x4075b220, 0x4c26: 0x4075b420, 0x4c27: 0x4075b620, + 0x4c28: 0x4075b820, 0x4c29: 0x4075ba20, 0x4c2a: 0x4075bc20, 0x4c2b: 0x4075be20, + 0x4c2c: 0x4075c020, 0x4c2d: 0x4075c220, 0x4c2e: 0xe00023a1, 0x4c2f: 0x4075c420, + 0x4c30: 0x4075c620, 0x4c31: 0x4075c820, 0x4c32: 0x4075ca20, 0x4c33: 0x4075cc20, + 0x4c34: 0x4075ce20, 0x4c35: 0x4075d020, + 0x4c39: 0x40061420, 0x4c3a: 0x40038820, 0x4c3b: 0x40038a20, + 0x4c3c: 0x40038c20, 0x4c3d: 0x40038e20, 0x4c3e: 0x40039020, 0x4c3f: 0x40039220, + // Block 0x131, offset 0x4c40 + 0x4c40: 0x4075fe20, 0x4c41: 0x40760020, 0x4c42: 0x40760220, 0x4c43: 0x40760420, + 0x4c44: 0x40760620, 0x4c45: 0x40760820, 0x4c46: 0x40760a20, 0x4c47: 0x40760c20, + 0x4c48: 0x40760e20, 0x4c49: 0x40761020, 0x4c4a: 0x40761220, 0x4c4b: 0x40761420, + 0x4c4c: 0x40761620, 0x4c4d: 0x40761820, 0x4c4e: 0x40761a20, 0x4c4f: 0x40761c20, + 0x4c50: 0x40761e20, 0x4c51: 0x40762020, 0x4c52: 0x40762220, 0x4c53: 0x40762420, + 0x4c54: 0x40762620, 0x4c55: 0x40762820, + 0x4c58: 0xe000029a, 0x4c59: 0xe00003b5, 0x4c5a: 0xe000048f, 0x4c5b: 0xe0000561, + 0x4c5c: 0x40297220, 0x4c5d: 0x40297420, 0x4c5e: 0x40297620, 0x4c5f: 0x40297820, + 0x4c60: 0x40762a20, 0x4c61: 0x40762c20, 0x4c62: 0x40762e20, 0x4c63: 0x40763020, + 0x4c64: 0x40763220, 0x4c65: 0x40763420, 0x4c66: 0x40763620, 0x4c67: 0x40763820, + 0x4c68: 0x40763a20, 0x4c69: 0x40763c20, 0x4c6a: 0x40763e20, 0x4c6b: 0x40764020, + 0x4c6c: 0x40764220, 0x4c6d: 0x40764420, 0x4c6e: 0x40764620, 0x4c6f: 0x40764820, + 0x4c70: 0x40764a20, 0x4c71: 0x40764c20, 0x4c72: 0x40764e20, + 0x4c78: 0xe000029d, 0x4c79: 0xe00003b8, 0x4c7a: 0xe0000492, 0x4c7b: 0xe0000564, + 0x4c7c: 0x40297a20, 0x4c7d: 0x40297c20, 0x4c7e: 0x40297e20, 0x4c7f: 0x40298020, + // Block 0x132, offset 0x4c80 + 0x4c80: 0x405b2620, 0x4c81: 0xe00020a7, 0x4c82: 0x405b2820, 0x4c83: 0x405b2a20, + 0x4c84: 0xe00020aa, 0x4c85: 0x405b2c20, 0x4c86: 0x405b2e20, 0x4c87: 0x405b3020, + 0x4c88: 0xe00020ad, 0x4c89: 0x405b3220, 0x4c8a: 0xe00020b0, 0x4c8b: 0x405b3420, + 0x4c8c: 0xe00020b3, 0x4c8d: 0x405b3620, 0x4c8e: 0xe00020b6, 0x4c8f: 0x405b3820, + 0x4c90: 0xe00020b9, 0x4c91: 0x405b3a20, 0x4c92: 0xe00020bc, 0x4c93: 0x405b3c20, + 0x4c94: 0x405b3e20, 0x4c95: 0xe00020bf, 0x4c96: 0x405b4020, 0x4c97: 0xe00020c2, + 0x4c98: 0x405b4220, 0x4c99: 0xe00020c5, 0x4c9a: 0x405b4420, 0x4c9b: 0xe00020c8, + 0x4c9c: 0x405b4620, 0x4c9d: 0xe00020cb, 0x4c9e: 0x405b4820, 0x4c9f: 0xe00020ce, + 0x4ca0: 0x405b4a20, 0x4ca1: 0x405b4c20, 0x4ca2: 0x405b4e20, 0x4ca3: 0x405b5020, + 0x4ca4: 0x405b5220, 0x4ca5: 0xe00020d1, 0x4ca6: 0x405b5420, 0x4ca7: 0xe00020d4, + 0x4ca8: 0x405b5620, 0x4ca9: 0xe00020d7, 0x4caa: 0x405b5820, 0x4cab: 0xe00020da, + 0x4cac: 0x405b5a20, 0x4cad: 0x405b5c20, 0x4cae: 0xe00020dd, 0x4caf: 0x405b5e20, + 0x4cb0: 0x405b6020, 0x4cb1: 0x405b6220, 0x4cb2: 0x405b6420, 0x4cb3: 0xe00020e0, + 0x4cb4: 0x405b6620, 0x4cb5: 0xe00020e3, 0x4cb6: 0x405b6820, 0x4cb7: 0xe00020e6, + 0x4cb8: 0x405b6a20, 0x4cb9: 0xe00020e9, 0x4cba: 0x405b6c20, 0x4cbb: 0xe00020ec, + 0x4cbc: 0x405b6e20, 0x4cbd: 0x405b7020, 0x4cbe: 0x405b7220, 0x4cbf: 0x405b7420, + // Block 0x133, offset 0x4cc0 + 0x4cc0: 0xe00020ef, 0x4cc1: 0x405b7620, 0x4cc2: 0xe00020f2, 0x4cc3: 0x405b7820, + 0x4cc4: 0xe00020f5, 0x4cc5: 0x405b7a20, 0x4cc6: 0xe00020f8, 0x4cc7: 0x405b7c20, + 0x4cc8: 0x405b7e20, + // Block 0x134, offset 0x4d00 + 0x4d20: 0xe00001ec, 0x4d21: 0xe0000307, 0x4d22: 0xe00003e1, 0x4d23: 0xe00004bc, + 0x4d24: 0xe0000586, 0x4d25: 0xe0000651, 0x4d26: 0xe00006f9, 0x4d27: 0xe00007a5, + 0x4d28: 0xe000084a, 0x4d29: 0x40288820, 0x4d2a: 0x40288a20, 0x4d2b: 0x40288c20, + 0x4d2c: 0x40288e20, 0x4d2d: 0x40289020, 0x4d2e: 0x40289220, 0x4d2f: 0x40289420, + 0x4d30: 0x40289620, 0x4d31: 0x40289820, 0x4d32: 0x40289a20, 0x4d33: 0x40289c20, + 0x4d34: 0x40289e20, 0x4d35: 0x4028a020, 0x4d36: 0x4028a220, 0x4d37: 0x4028a420, + 0x4d38: 0x4028a620, 0x4d39: 0x4028a820, 0x4d3a: 0x4028aa20, 0x4d3b: 0x4028ac20, + 0x4d3c: 0x4028ae20, 0x4d3d: 0x4028b020, 0x4d3e: 0x4028b220, + // Block 0x135, offset 0x4d40 + 0x4d40: 0xa000f202, 0x4d41: 0xa000f302, 0x4d42: 0xa000f402, 0x4d43: 0x40489220, + 0x4d44: 0x40489420, 0x4d45: 0x40483420, 0x4d46: 0x40483620, 0x4d47: 0x40483820, + 0x4d48: 0x40483a20, 0x4d49: 0x40483c20, 0x4d4a: 0x40483e20, 0x4d4b: 0x40484020, + 0x4d4c: 0x40484220, 0x4d4d: 0x40484420, 0x4d4e: 0x40484620, 0x4d4f: 0x40484820, + 0x4d50: 0x40484a20, 0x4d51: 0x40484c20, 0x4d52: 0x40484e20, 0x4d53: 0x40485020, + 0x4d54: 0x40485220, 0x4d55: 0x40485420, 0x4d56: 0x40485620, 0x4d57: 0x40485820, + 0x4d58: 0x40485a20, 0x4d59: 0x40485c20, 0x4d5a: 0x40485e20, 0x4d5b: 0x40486020, + 0x4d5c: 0x40486220, 0x4d5d: 0x40486420, 0x4d5e: 0x40486620, 0x4d5f: 0x40486820, + 0x4d60: 0x40486a20, 0x4d61: 0x40486c20, 0x4d62: 0x40486e20, 0x4d63: 0x40487020, + 0x4d64: 0x40487220, 0x4d65: 0x40487420, 0x4d66: 0x40487620, 0x4d67: 0x40487820, + 0x4d68: 0x40487a20, 0x4d69: 0x40487c20, 0x4d6a: 0x40487e20, 0x4d6b: 0x40488020, + 0x4d6c: 0x40488220, 0x4d6d: 0x40488420, 0x4d6e: 0x40488620, 0x4d6f: 0x40488820, + 0x4d70: 0x40488a20, 0x4d71: 0x40488c20, 0x4d72: 0x40488e20, 0x4d73: 0x40489020, + 0x4d74: 0x40489620, 0x4d75: 0x40489820, 0x4d76: 0x40489a20, 0x4d77: 0x40489c20, + 0x4d78: 0x40489e20, 0x4d79: 0x4048a020, 0x4d7a: 0x4048a220, 0x4d7b: 0x4048a420, + 0x4d7c: 0x4048a620, 0x4d7d: 0x4048a820, 0x4d7e: 0x4048aa20, 0x4d7f: 0x4048ac20, + // Block 0x136, offset 0x4d80 + 0x4d80: 0x4048ae20, 0x4d81: 0x4048b020, 0x4d82: 0x4048b220, 0x4d83: 0x4048b420, + 0x4d84: 0x4048b620, 0x4d85: 0x4048b820, 0x4d86: 0x8209245d, 0x4d87: 0x40034820, + 0x4d88: 0x40034a20, 0x4d89: 0x4005fc20, 0x4d8a: 0x4005fe20, 0x4d8b: 0x40060020, + 0x4d8c: 0x40060220, 0x4d8d: 0x40060420, + 0x4d92: 0xe00002a9, 0x4d93: 0xe00003c4, + 0x4d94: 0xe000049e, 0x4d95: 0xe0000570, 0x4d96: 0xe000063a, 0x4d97: 0xe00006ea, + 0x4d98: 0xe0000792, 0x4d99: 0xe000083b, 0x4d9a: 0xe00008e6, 0x4d9b: 0x40298220, + 0x4d9c: 0x40298420, 0x4d9d: 0x40298620, 0x4d9e: 0x40298820, 0x4d9f: 0x40298a20, + 0x4da0: 0x40298c20, 0x4da1: 0x40298e20, 0x4da2: 0x40299020, 0x4da3: 0x40299220, + 0x4da4: 0x40299420, 0x4da5: 0x40299620, 0x4da6: 0xe00001df, 0x4da7: 0xe00002a6, + 0x4da8: 0xe00003c1, 0x4da9: 0xe000049b, 0x4daa: 0xe000056d, 0x4dab: 0xe0000637, + 0x4dac: 0xe00006e7, 0x4dad: 0xe000078f, 0x4dae: 0xe0000838, 0x4daf: 0xe00008e3, + // Block 0x137, offset 0x4dc0 + 0x4dc0: 0xa000f202, 0x4dc1: 0xa000f302, 0x4dc2: 0xa000f402, 0x4dc3: 0x40467e20, + 0x4dc4: 0x40468020, 0x4dc5: 0x40468220, 0x4dc6: 0x40468420, 0x4dc7: 0x40468620, + 0x4dc8: 0x40468820, 0x4dc9: 0x40468a20, 0x4dca: 0x40468c20, 0x4dcb: 0x40468e20, + 0x4dcc: 0x40469020, 0x4dcd: 0x40469220, 0x4dce: 0x40469420, 0x4dcf: 0x40469620, + 0x4dd0: 0x40469820, 0x4dd1: 0x40469a20, 0x4dd2: 0x40469c20, 0x4dd3: 0x40469e20, + 0x4dd4: 0x4046a020, 0x4dd5: 0x4046a220, 0x4dd6: 0x4046a420, 0x4dd7: 0x4046a620, + 0x4dd8: 0x4046a820, 0x4dd9: 0x4046aa20, 0x4dda: 0xe0001878, 0x4ddb: 0x4046ac20, + 0x4ddc: 0xe000187b, 0x4ddd: 0x4046ae20, 0x4dde: 0x4046b020, 0x4ddf: 0x4046b220, + 0x4de0: 0x4046b420, 0x4de1: 0x4046b620, 0x4de2: 0x4046b820, 0x4de3: 0x4046ba20, + 0x4de4: 0x4046bc20, 0x4de5: 0x4046be20, 0x4de6: 0x4046c020, 0x4de7: 0x4046c220, + 0x4de8: 0x4046c420, 0x4de9: 0x4046c620, 0x4dea: 0x4046c820, 0x4deb: 0xe000187e, + 0x4dec: 0x4046ca20, 0x4ded: 0x4046cc20, 0x4dee: 0x4046ce20, 0x4def: 0x4046d020, + 0x4df0: 0x4046d220, 0x4df1: 0x4046d420, 0x4df2: 0x4046d620, 0x4df3: 0x4046d820, + 0x4df4: 0x4046da20, 0x4df5: 0x4046dc20, 0x4df6: 0x4046de20, 0x4df7: 0x4046e020, + 0x4df8: 0x4046e220, 0x4df9: 0x82092372, 0x4dfa: 0xa070f102, 0x4dfb: 0x40061620, + 0x4dfc: 0x40061820, 0x4dfd: 0xa0000000, 0x4dfe: 0x40039420, 0x4dff: 0x40039620, + // Block 0x138, offset 0x4e00 + 0x4e00: 0x40034c20, 0x4e01: 0x40034e20, + 0x4e10: 0x4072e820, 0x4e11: 0x4072ea20, 0x4e12: 0x4072ec20, 0x4e13: 0x4072ee20, + 0x4e14: 0x4072f020, 0x4e15: 0x4072f220, 0x4e16: 0x4072f420, 0x4e17: 0x4072f620, + 0x4e18: 0x4072f820, 0x4e19: 0x4072fa20, 0x4e1a: 0x4072fc20, 0x4e1b: 0x4072fe20, + 0x4e1c: 0x40730020, 0x4e1d: 0x40730220, 0x4e1e: 0x40730420, 0x4e1f: 0x40730620, + 0x4e20: 0x40730820, 0x4e21: 0x40730a20, 0x4e22: 0x40730c20, 0x4e23: 0x40730e20, + 0x4e24: 0x40731020, 0x4e25: 0x40731220, 0x4e26: 0x40731420, 0x4e27: 0x40731620, + 0x4e28: 0x40731820, + 0x4e30: 0xe00001d0, 0x4e31: 0xe0000264, 0x4e32: 0xe000037c, 0x4e33: 0xe0000456, + 0x4e34: 0xe000052b, 0x4e35: 0xe00005f5, 0x4e36: 0xe00006c0, 0x4e37: 0xe0000768, + 0x4e38: 0xe0000814, 0x4e39: 0xe00008b9, + // Block 0x139, offset 0x4e40 + 0x4e40: 0xae60f202, 0x4e41: 0xae60f302, 0x4e42: 0xae60f402, 0x4e43: 0x404f4020, + 0x4e44: 0x404f4220, 0x4e45: 0x404f4420, 0x4e46: 0x404f4620, 0x4e47: 0x404f4820, + 0x4e48: 0x404f4a20, 0x4e49: 0x404f4c20, 0x4e4a: 0x404f4e20, 0x4e4b: 0x404f5020, + 0x4e4c: 0x404f5220, 0x4e4d: 0x404f5420, 0x4e4e: 0x404f5620, 0x4e4f: 0x404f5820, + 0x4e50: 0x404f5a20, 0x4e51: 0x404f5c20, 0x4e52: 0x404f5e20, 0x4e53: 0x404f6020, + 0x4e54: 0x404f6220, 0x4e55: 0x404f6420, 0x4e56: 0x404f6620, 0x4e57: 0x404f6820, + 0x4e58: 0x404f6a20, 0x4e59: 0x404f6c20, 0x4e5a: 0x404f6e20, 0x4e5b: 0x404f7020, + 0x4e5c: 0x404f7220, 0x4e5d: 0x404f7420, 0x4e5e: 0x404f7620, 0x4e5f: 0x404f7820, + 0x4e60: 0x404f7a20, 0x4e61: 0x404f7c20, 0x4e62: 0x404f7e20, 0x4e63: 0x404f8020, + 0x4e64: 0x404f8220, 0x4e65: 0x404f8420, 0x4e66: 0x404f8620, 0x4e67: 0x404f8820, + 0x4e68: 0x404f8a20, 0x4e69: 0x404f8c20, 0x4e6a: 0x404f8e20, 0x4e6b: 0x404f9020, + 0x4e6c: 0x404f9220, 0x4e6d: 0x404f9420, 0x4e6e: 0x404f9620, 0x4e6f: 0x404f9820, + 0x4e70: 0x404f9a20, 0x4e71: 0xc31507e1, 0x4e72: 0xc31707e1, 0x4e73: 0x820927d0, + 0x4e74: 0x820927d1, 0x4e76: 0xe00001b2, 0x4e77: 0xe0000246, + 0x4e78: 0xe000035e, 0x4e79: 0xe0000438, 0x4e7a: 0xe000050d, 0x4e7b: 0xe00005d7, + 0x4e7c: 0xe00006a2, 0x4e7d: 0xe000074a, 0x4e7e: 0xe00007f6, 0x4e7f: 0xe000089b, + // Block 0x13a, offset 0x4e80 + 0x4e80: 0x40039820, 0x4e81: 0x40035020, 0x4e82: 0x40035220, 0x4e83: 0x4002de20, + // Block 0x13b, offset 0x4ec0 + 0x4ec0: 0xa000f202, 0x4ec1: 0xa000f302, 0x4ec2: 0xa000f402, 0x4ec3: 0x4046e820, + 0x4ec4: 0x4046ea20, 0x4ec5: 0x4046ec20, 0x4ec6: 0x4046ee20, 0x4ec7: 0x4046f020, + 0x4ec8: 0x4046f220, 0x4ec9: 0x4046f420, 0x4eca: 0x4046f620, 0x4ecb: 0x4046f820, + 0x4ecc: 0x4046fa20, 0x4ecd: 0x4046fc20, 0x4ece: 0x4046fe20, 0x4ecf: 0x40470020, + 0x4ed0: 0x40470220, 0x4ed1: 0x40470420, 0x4ed2: 0x40470620, 0x4ed3: 0x40470820, + 0x4ed4: 0x40470a20, 0x4ed5: 0x40470c20, 0x4ed6: 0x40470e20, 0x4ed7: 0x40471020, + 0x4ed8: 0x40471220, 0x4ed9: 0x40471420, 0x4eda: 0x40471620, 0x4edb: 0x40471820, + 0x4edc: 0x40471a20, 0x4edd: 0x40471c20, 0x4ede: 0x40471e20, 0x4edf: 0x40472020, + 0x4ee0: 0x40472220, 0x4ee1: 0x40472420, 0x4ee2: 0x40472620, 0x4ee3: 0x40472820, + 0x4ee4: 0x40472a20, 0x4ee5: 0x40472c20, 0x4ee6: 0x40472e20, 0x4ee7: 0x40473020, + 0x4ee8: 0x40473220, 0x4ee9: 0x40473420, 0x4eea: 0x40473620, 0x4eeb: 0x40473820, + 0x4eec: 0x40473a20, 0x4eed: 0x40473c20, 0x4eee: 0x40473e20, 0x4eef: 0x40474020, + 0x4ef0: 0x40474220, 0x4ef1: 0x40474420, 0x4ef2: 0x40474620, 0x4ef3: 0x40474820, + 0x4ef4: 0x40474a20, 0x4ef5: 0x40474c20, 0x4ef6: 0x40474e20, 0x4ef7: 0x40475020, + 0x4ef8: 0x40475220, 0x4ef9: 0x40475420, 0x4efa: 0x40475620, 0x4efb: 0x40475820, + 0x4efc: 0x40475a20, 0x4efd: 0x40475c20, 0x4efe: 0x40475e20, 0x4eff: 0x40476020, + // Block 0x13c, offset 0x4f00 + 0x4f00: 0x820923b1, 0x4f01: 0x40476420, 0x4f02: 0x40476620, 0x4f03: 0x40476820, + 0x4f04: 0x4046e620, 0x4f05: 0x40035420, 0x4f06: 0x40035620, 0x4f07: 0x40061a20, + 0x4f08: 0x40039a20, + 0x4f10: 0xe00001d9, 0x4f11: 0xe00002a0, 0x4f12: 0xe00003bb, 0x4f13: 0xe0000495, + 0x4f14: 0xe0000567, 0x4f15: 0xe0000631, 0x4f16: 0xe00006e1, 0x4f17: 0xe0000789, + 0x4f18: 0xe0000832, 0x4f19: 0xe00008dd, + // Block 0x13d, offset 0x4f40 + 0x4f40: 0x40476a20, 0x4f41: 0x40476c20, 0x4f42: 0x40476e20, 0x4f43: 0x40477020, + 0x4f44: 0x40477220, 0x4f45: 0x40477420, 0x4f46: 0x40477620, 0x4f47: 0x40477820, + 0x4f48: 0x40477a20, 0x4f49: 0x40477c20, 0x4f4a: 0x40478420, 0x4f4b: 0x40478620, + 0x4f4c: 0x40478820, 0x4f4d: 0x40478a20, 0x4f4e: 0x40478c20, 0x4f4f: 0x40478e20, + 0x4f50: 0x40479020, 0x4f51: 0x40479220, 0x4f52: 0x40479420, 0x4f53: 0x40479620, + 0x4f54: 0x40479820, 0x4f55: 0x40479a20, 0x4f56: 0x40479c20, 0x4f57: 0x40479e20, + 0x4f58: 0x4047a020, 0x4f59: 0x4047a220, 0x4f5a: 0x4047a420, 0x4f5b: 0x4047a620, + 0x4f5c: 0x4047a820, 0x4f5d: 0x4047aa20, 0x4f5e: 0x4047ac20, 0x4f5f: 0x4047ae20, + 0x4f60: 0x4047b020, 0x4f61: 0x4047b220, 0x4f62: 0x4047b420, 0x4f63: 0x4047b620, + 0x4f64: 0x4047b820, 0x4f65: 0x4047ba20, 0x4f66: 0x4047bc20, 0x4f67: 0x40478020, + 0x4f68: 0x40477e20, 0x4f69: 0x40478220, 0x4f6a: 0x4047be20, 0x4f6b: 0xa000f302, + 0x4f6c: 0xa000f402, 0x4f6d: 0x4047c020, 0x4f6e: 0x4047c220, 0x4f6f: 0x4047c420, + 0x4f70: 0x4047c620, 0x4f71: 0x4047c820, 0x4f72: 0x4047ca20, 0x4f73: 0x4047cc20, + 0x4f74: 0x4047ce20, 0x4f75: 0x4047d020, 0x4f76: 0x820923e9, 0x4f77: 0xa070f102, + // Block 0x13e, offset 0x4f80 + 0x4f80: 0xe00001dc, 0x4f81: 0xe00002a3, 0x4f82: 0xe00003be, 0x4f83: 0xe0000498, + 0x4f84: 0xe000056a, 0x4f85: 0xe0000634, 0x4f86: 0xe00006e4, 0x4f87: 0xe000078c, + 0x4f88: 0xe0000835, 0x4f89: 0xe00008e0, + // Block 0x13f, offset 0x4fc0 + 0x4fc0: 0x4076e420, 0x4fc1: 0x4076e620, 0x4fc2: 0x4076e820, 0x4fc3: 0x4076ea20, + 0x4fc4: 0x4076ec20, 0x4fc5: 0x4076ee20, 0x4fc6: 0x4076f020, 0x4fc7: 0x4076f220, + 0x4fc8: 0x4076f420, 0x4fc9: 0x4076f620, 0x4fca: 0x4076f820, 0x4fcb: 0x4076fa20, + 0x4fcc: 0x4076fc20, 0x4fcd: 0x4076fe20, 0x4fce: 0x40770020, 0x4fcf: 0x40770220, + 0x4fd0: 0x40770420, 0x4fd1: 0x40770620, 0x4fd2: 0x40770820, 0x4fd3: 0x40770a20, + 0x4fd4: 0x40770c20, 0x4fd5: 0x40770e20, 0x4fd6: 0x40771020, 0x4fd7: 0x40771220, + 0x4fd8: 0x40771420, 0x4fd9: 0x40771620, 0x4fda: 0x40771820, 0x4fdb: 0x40771a20, + 0x4fdc: 0x40771c20, 0x4fdd: 0x40771e20, 0x4fde: 0x40772020, 0x4fdf: 0x40772220, + 0x4fe0: 0x40772420, 0x4fe1: 0x40772620, 0x4fe2: 0x40772820, 0x4fe3: 0x40772a20, + 0x4fe4: 0x40772c20, 0x4fe5: 0x40772e20, 0x4fe6: 0x40773020, 0x4fe7: 0x40773220, + 0x4fe8: 0x40773420, 0x4fe9: 0x40773620, 0x4fea: 0x40773820, 0x4feb: 0x40773a20, + 0x4fec: 0x40773c20, 0x4fed: 0x40773e20, 0x4fee: 0x40774020, 0x4fef: 0x40774220, + 0x4ff0: 0x40774420, 0x4ff1: 0x40774620, 0x4ff2: 0x40774820, 0x4ff3: 0x40774a20, + 0x4ff4: 0x40774c20, 0x4ff5: 0x40774e20, 0x4ff6: 0x40775020, 0x4ff7: 0x40775220, + 0x4ff8: 0x40775420, 0x4ff9: 0x40775620, 0x4ffa: 0x40775820, 0x4ffb: 0x40775a20, + 0x4ffc: 0x40775c20, 0x4ffd: 0x40775e20, 0x4ffe: 0x40776020, 0x4fff: 0x40776220, + // Block 0x140, offset 0x5000 + 0x5000: 0x40776420, 0x5001: 0x40776620, 0x5002: 0x40776820, 0x5003: 0x40776a20, + 0x5004: 0x40776c20, 0x5005: 0x40776e20, 0x5006: 0x40777020, 0x5007: 0x40777220, + 0x5008: 0x40777420, 0x5009: 0x40777620, 0x500a: 0x40777820, 0x500b: 0x40777a20, + 0x500c: 0x40777c20, 0x500d: 0x40777e20, 0x500e: 0x40778020, 0x500f: 0x40778220, + 0x5010: 0x40778420, 0x5011: 0x40778620, 0x5012: 0x40778820, 0x5013: 0x40778a20, + 0x5014: 0x40778c20, 0x5015: 0x40778e20, 0x5016: 0x40779020, 0x5017: 0x40779220, + 0x5018: 0x40779420, 0x5019: 0x40779620, 0x501a: 0x40779820, 0x501b: 0x40779a20, + 0x501c: 0x40779c20, 0x501d: 0x40779e20, 0x501e: 0x4077a020, 0x501f: 0x4077a220, + 0x5020: 0x4077a420, 0x5021: 0x4077a620, 0x5022: 0x4077a820, 0x5023: 0x4077aa20, + 0x5024: 0x4077ac20, 0x5025: 0x4077ae20, 0x5026: 0x4077b020, 0x5027: 0x4077b220, + 0x5028: 0x4077b420, 0x5029: 0x4077b620, 0x502a: 0x4077b820, 0x502b: 0x4077ba20, + 0x502c: 0x4077bc20, 0x502d: 0x4077be20, 0x502e: 0x4077c020, 0x502f: 0x4077c220, + 0x5030: 0x4077c420, 0x5031: 0x4077c620, 0x5032: 0x4077c820, 0x5033: 0x4077ca20, + 0x5034: 0x4077cc20, 0x5035: 0x4077ce20, 0x5036: 0x4077d020, 0x5037: 0x4077d220, + 0x5038: 0x4077d420, 0x5039: 0x4077d620, 0x503a: 0x4077d820, 0x503b: 0x4077da20, + 0x503c: 0x4077dc20, 0x503d: 0x4077de20, 0x503e: 0x4077e020, 0x503f: 0x4077e220, + // Block 0x141, offset 0x5040 + 0x5040: 0x4077e420, 0x5041: 0x4077e620, 0x5042: 0x4077e820, 0x5043: 0x4077ea20, + 0x5044: 0x4077ec20, 0x5045: 0x4077ee20, 0x5046: 0x4077f020, 0x5047: 0x4077f220, + 0x5048: 0x4077f420, 0x5049: 0x4077f620, 0x504a: 0x4077f820, 0x504b: 0x4077fa20, + 0x504c: 0x4077fc20, 0x504d: 0x4077fe20, 0x504e: 0x40780020, 0x504f: 0x40780220, + 0x5050: 0x40780420, 0x5051: 0x40780620, 0x5052: 0x40780820, 0x5053: 0x40780a20, + 0x5054: 0x40780c20, 0x5055: 0x40780e20, 0x5056: 0x40781020, 0x5057: 0x40781220, + 0x5058: 0x40781420, 0x5059: 0x40781620, 0x505a: 0x40781820, 0x505b: 0x40781a20, + 0x505c: 0x40781c20, 0x505d: 0x40781e20, 0x505e: 0x40782020, 0x505f: 0x40782220, + 0x5060: 0x40782420, 0x5061: 0x40782620, 0x5062: 0x40782820, 0x5063: 0x40782a20, + 0x5064: 0x40782c20, 0x5065: 0x40782e20, 0x5066: 0x40783020, 0x5067: 0x40783220, + 0x5068: 0x40783420, 0x5069: 0x40783620, 0x506a: 0x40783820, 0x506b: 0x40783a20, + 0x506c: 0x40783c20, 0x506d: 0x40783e20, 0x506e: 0x40784020, 0x506f: 0x40784220, + 0x5070: 0x40784420, 0x5071: 0x40784620, 0x5072: 0x40784820, 0x5073: 0x40784a20, + 0x5074: 0x40784c20, 0x5075: 0x40784e20, 0x5076: 0x40785020, 0x5077: 0x40785220, + 0x5078: 0x40785420, 0x5079: 0x40785620, 0x507a: 0x40785820, 0x507b: 0x40785a20, + 0x507c: 0x40785c20, 0x507d: 0x40785e20, 0x507e: 0x40786020, 0x507f: 0x40786220, + // Block 0x142, offset 0x5080 + 0x5080: 0x40786420, 0x5081: 0x40786620, 0x5082: 0x40786820, 0x5083: 0x40786a20, + 0x5084: 0x40786c20, 0x5085: 0x40786e20, 0x5086: 0x40787020, 0x5087: 0x40787220, + 0x5088: 0x40787420, 0x5089: 0x40787620, 0x508a: 0x40787820, 0x508b: 0x40787a20, + 0x508c: 0x40787c20, 0x508d: 0x40787e20, 0x508e: 0x40788020, 0x508f: 0x40788220, + 0x5090: 0x40788420, 0x5091: 0x40788620, 0x5092: 0x40788820, 0x5093: 0x40788a20, + 0x5094: 0x40788c20, 0x5095: 0x40788e20, 0x5096: 0x40789020, 0x5097: 0x40789220, + 0x5098: 0x40789420, 0x5099: 0x40789620, 0x509a: 0x40789820, 0x509b: 0x40789a20, + 0x509c: 0x40789c20, 0x509d: 0x40789e20, 0x509e: 0x4078a020, 0x509f: 0x4078a220, + 0x50a0: 0x4078a420, 0x50a1: 0x4078a620, 0x50a2: 0x4078a820, 0x50a3: 0x4078aa20, + 0x50a4: 0x4078ac20, 0x50a5: 0x4078ae20, 0x50a6: 0x4078b020, 0x50a7: 0x4078b220, + 0x50a8: 0x4078b420, 0x50a9: 0x4078b620, 0x50aa: 0x4078b820, 0x50ab: 0x4078ba20, + 0x50ac: 0x4078bc20, 0x50ad: 0x4078be20, 0x50ae: 0x4078c020, 0x50af: 0x4078c220, + 0x50b0: 0x4078c420, 0x50b1: 0x4078c620, 0x50b2: 0x4078c820, 0x50b3: 0x4078ca20, + 0x50b4: 0x4078cc20, 0x50b5: 0x4078ce20, 0x50b6: 0x4078d020, 0x50b7: 0x4078d220, + 0x50b8: 0x4078d420, 0x50b9: 0x4078d620, 0x50ba: 0x4078d820, 0x50bb: 0x4078da20, + 0x50bc: 0x4078dc20, 0x50bd: 0x4078de20, 0x50be: 0x4078e020, 0x50bf: 0x4078e220, + // Block 0x143, offset 0x50c0 + 0x50c0: 0x4078e420, 0x50c1: 0x4078e620, 0x50c2: 0x4078e820, 0x50c3: 0x4078ea20, + 0x50c4: 0x4078ec20, 0x50c5: 0x4078ee20, 0x50c6: 0x4078f020, 0x50c7: 0x4078f220, + 0x50c8: 0x4078f420, 0x50c9: 0x4078f620, 0x50ca: 0x4078f820, 0x50cb: 0x4078fa20, + 0x50cc: 0x4078fc20, 0x50cd: 0x4078fe20, 0x50ce: 0x40790020, 0x50cf: 0x40790220, + 0x50d0: 0x40790420, 0x50d1: 0x40790620, 0x50d2: 0x40790820, 0x50d3: 0x40790a20, + 0x50d4: 0x40790c20, 0x50d5: 0x40790e20, 0x50d6: 0x40791020, 0x50d7: 0x40791220, + 0x50d8: 0x40791420, 0x50d9: 0x40791620, 0x50da: 0x40791820, 0x50db: 0x40791a20, + 0x50dc: 0x40791c20, 0x50dd: 0x40791e20, 0x50de: 0x40792020, 0x50df: 0x40792220, + 0x50e0: 0x40792420, 0x50e1: 0x40792620, 0x50e2: 0x40792820, 0x50e3: 0x40792a20, + 0x50e4: 0x40792c20, 0x50e5: 0x40792e20, 0x50e6: 0x40793020, 0x50e7: 0x40793220, + 0x50e8: 0x40793420, 0x50e9: 0x40793620, 0x50ea: 0x40793820, 0x50eb: 0x40793a20, + 0x50ec: 0x40793c20, 0x50ed: 0x40793e20, 0x50ee: 0x40794020, 0x50ef: 0x40794220, + 0x50f0: 0x40794420, 0x50f1: 0x40794620, 0x50f2: 0x40794820, 0x50f3: 0x40794a20, + 0x50f4: 0x40794c20, 0x50f5: 0x40794e20, 0x50f6: 0x40795020, 0x50f7: 0x40795220, + 0x50f8: 0x40795420, 0x50f9: 0x40795620, 0x50fa: 0x40795820, 0x50fb: 0x40795a20, + 0x50fc: 0x40795c20, 0x50fd: 0x40795e20, 0x50fe: 0x40796020, 0x50ff: 0x40796220, + // Block 0x144, offset 0x5100 + 0x5100: 0x40796420, 0x5101: 0x40796620, 0x5102: 0x40796820, 0x5103: 0x40796a20, + 0x5104: 0x40796c20, 0x5105: 0x40796e20, 0x5106: 0x40797020, 0x5107: 0x40797220, + 0x5108: 0x40797420, 0x5109: 0x40797620, 0x510a: 0x40797820, 0x510b: 0x40797a20, + 0x510c: 0x40797c20, 0x510d: 0x40797e20, 0x510e: 0x40798020, 0x510f: 0x40798220, + 0x5110: 0x40798420, 0x5111: 0x40798620, 0x5112: 0x40798820, 0x5113: 0x40798a20, + 0x5114: 0x40798c20, 0x5115: 0x40798e20, 0x5116: 0x40799020, 0x5117: 0x40799220, + 0x5118: 0x40799420, 0x5119: 0x40799620, 0x511a: 0x40799820, 0x511b: 0x40799a20, + 0x511c: 0x40799c20, 0x511d: 0x40799e20, 0x511e: 0x4079a020, 0x511f: 0x4079a220, + 0x5120: 0x4079a420, 0x5121: 0x4079a620, 0x5122: 0x4079a820, 0x5123: 0x4079aa20, + 0x5124: 0x4079ac20, 0x5125: 0x4079ae20, 0x5126: 0x4079b020, 0x5127: 0x4079b220, + 0x5128: 0x4079b420, 0x5129: 0x4079b620, 0x512a: 0x4079b820, 0x512b: 0x4079ba20, + 0x512c: 0x4079bc20, 0x512d: 0x4079be20, 0x512e: 0x4079c020, 0x512f: 0x4079c220, + 0x5130: 0x4079c420, 0x5131: 0x4079c620, 0x5132: 0x4079c820, 0x5133: 0x4079ca20, + 0x5134: 0x4079cc20, 0x5135: 0x4079ce20, 0x5136: 0x4079d020, 0x5137: 0x4079d220, + 0x5138: 0x4079d420, 0x5139: 0x4079d620, 0x513a: 0x4079d820, 0x513b: 0x4079da20, + 0x513c: 0x4079dc20, 0x513d: 0x4079de20, 0x513e: 0x4079e020, 0x513f: 0x4079e220, + // Block 0x145, offset 0x5140 + 0x5140: 0x4079e420, 0x5141: 0x4079e620, 0x5142: 0x4079e820, 0x5143: 0x4079ea20, + 0x5144: 0x4079ec20, 0x5145: 0x4079ee20, 0x5146: 0x4079f020, 0x5147: 0x4079f220, + 0x5148: 0x4079f420, 0x5149: 0x4079f620, 0x514a: 0x4079f820, 0x514b: 0x4079fa20, + 0x514c: 0x4079fc20, 0x514d: 0x4079fe20, 0x514e: 0x407a0020, 0x514f: 0x407a0220, + 0x5150: 0x407a0420, 0x5151: 0x407a0620, 0x5152: 0x407a0820, 0x5153: 0x407a0a20, + 0x5154: 0x407a0c20, 0x5155: 0x407a0e20, 0x5156: 0x407a1020, 0x5157: 0x407a1220, + 0x5158: 0x407a1420, 0x5159: 0x407a1620, 0x515a: 0x407a1820, 0x515b: 0x407a1a20, + 0x515c: 0x407a1c20, 0x515d: 0x407a1e20, 0x515e: 0x407a2020, 0x515f: 0x407a2220, + 0x5160: 0x407a2420, 0x5161: 0x407a2620, 0x5162: 0x407a2820, 0x5163: 0x407a2a20, + 0x5164: 0x407a2c20, 0x5165: 0x407a2e20, 0x5166: 0x407a3020, 0x5167: 0x407a3220, + 0x5168: 0x407a3420, 0x5169: 0x407a3620, 0x516a: 0x407a3820, 0x516b: 0x407a3a20, + 0x516c: 0x407a3c20, 0x516d: 0x407a3e20, 0x516e: 0x407a4020, 0x516f: 0x407a4220, + 0x5170: 0x407a4420, 0x5171: 0x407a4620, 0x5172: 0x407a4820, 0x5173: 0x407a4a20, + 0x5174: 0x407a4c20, 0x5175: 0x407a4e20, 0x5176: 0x407a5020, 0x5177: 0x407a5220, + 0x5178: 0x407a5420, 0x5179: 0x407a5620, 0x517a: 0x407a5820, 0x517b: 0x407a5a20, + 0x517c: 0x407a5c20, 0x517d: 0x407a5e20, 0x517e: 0x407a6020, 0x517f: 0x407a6220, + // Block 0x146, offset 0x5180 + 0x5180: 0x407a6420, 0x5181: 0x407a6620, 0x5182: 0x407a6820, 0x5183: 0x407a6a20, + 0x5184: 0x407a6c20, 0x5185: 0x407a6e20, 0x5186: 0x407a7020, 0x5187: 0x407a7220, + 0x5188: 0x407a7420, 0x5189: 0x407a7620, 0x518a: 0x407a7820, 0x518b: 0x407a7a20, + 0x518c: 0x407a7c20, 0x518d: 0x407a7e20, 0x518e: 0x407a8020, 0x518f: 0x407a8220, + 0x5190: 0x407a8420, 0x5191: 0x407a8620, 0x5192: 0x407a8820, 0x5193: 0x407a8a20, + 0x5194: 0x407a8c20, 0x5195: 0x407a8e20, 0x5196: 0x407a9020, 0x5197: 0x407a9220, + 0x5198: 0x407a9420, 0x5199: 0x407a9620, 0x519a: 0x407a9820, 0x519b: 0x407a9a20, + 0x519c: 0x407a9c20, 0x519d: 0x407a9e20, 0x519e: 0x407aa020, 0x519f: 0x407aa220, + 0x51a0: 0x407aa420, 0x51a1: 0x407aa620, 0x51a2: 0x407aa820, 0x51a3: 0x407aaa20, + 0x51a4: 0x407aac20, 0x51a5: 0x407aae20, 0x51a6: 0x407ab020, 0x51a7: 0x407ab220, + 0x51a8: 0x407ab420, 0x51a9: 0x407ab620, 0x51aa: 0x407ab820, 0x51ab: 0x407aba20, + 0x51ac: 0x407abc20, 0x51ad: 0x407abe20, 0x51ae: 0x407ac020, 0x51af: 0x407ac220, + 0x51b0: 0x407ac420, 0x51b1: 0x407ac620, 0x51b2: 0x407ac820, 0x51b3: 0x407aca20, + 0x51b4: 0x407acc20, 0x51b5: 0x407ace20, 0x51b6: 0x407ad020, 0x51b7: 0x407ad220, + 0x51b8: 0x407ad420, 0x51b9: 0x407ad620, 0x51ba: 0x407ad820, 0x51bb: 0x407ada20, + 0x51bc: 0x407adc20, 0x51bd: 0x407ade20, 0x51be: 0x407ae020, 0x51bf: 0x407ae220, + // Block 0x147, offset 0x51c0 + 0x51c0: 0x407ae420, 0x51c1: 0x407ae620, 0x51c2: 0x407ae820, 0x51c3: 0x407aea20, + 0x51c4: 0x407aec20, 0x51c5: 0x407aee20, 0x51c6: 0x407af020, 0x51c7: 0x407af220, + 0x51c8: 0x407af420, 0x51c9: 0x407af620, 0x51ca: 0x407af820, 0x51cb: 0x407afa20, + 0x51cc: 0x407afc20, 0x51cd: 0x407afe20, 0x51ce: 0x407b0020, 0x51cf: 0x407b0220, + 0x51d0: 0x407b0420, 0x51d1: 0x407b0620, 0x51d2: 0x407b0820, 0x51d3: 0x407b0a20, + 0x51d4: 0x407b0c20, 0x51d5: 0x407b0e20, 0x51d6: 0x407b1020, 0x51d7: 0x407b1220, + 0x51d8: 0x407b1420, 0x51d9: 0x407b1620, 0x51da: 0x407b1820, 0x51db: 0x407b1a20, + 0x51dc: 0x407b1c20, 0x51dd: 0x407b1e20, 0x51de: 0x407b2020, 0x51df: 0x407b2220, + 0x51e0: 0x407b2420, 0x51e1: 0x407b2620, 0x51e2: 0x407b2820, 0x51e3: 0x407b2a20, + 0x51e4: 0x407b2c20, 0x51e5: 0x407b2e20, 0x51e6: 0x407b3020, 0x51e7: 0x407b3220, + 0x51e8: 0x407b3420, 0x51e9: 0x407b3620, 0x51ea: 0x407b3820, 0x51eb: 0x407b3a20, + 0x51ec: 0x407b3c20, 0x51ed: 0x407b3e20, 0x51ee: 0x407b4020, 0x51ef: 0x407b4220, + 0x51f0: 0x407b4420, 0x51f1: 0x407b4620, 0x51f2: 0x407b4820, 0x51f3: 0x407b4a20, + 0x51f4: 0x407b4c20, 0x51f5: 0x407b4e20, 0x51f6: 0x407b5020, 0x51f7: 0x407b5220, + 0x51f8: 0x407b5420, 0x51f9: 0x407b5620, 0x51fa: 0x407b5820, 0x51fb: 0x407b5a20, + 0x51fc: 0x407b5c20, 0x51fd: 0x407b5e20, 0x51fe: 0x407b6020, 0x51ff: 0x407b6220, + // Block 0x148, offset 0x5200 + 0x5200: 0x407b6420, 0x5201: 0x407b6620, 0x5202: 0x407b6820, 0x5203: 0x407b6a20, + 0x5204: 0x407b6c20, 0x5205: 0x407b6e20, 0x5206: 0x407b7020, 0x5207: 0x407b7220, + 0x5208: 0x407b7420, 0x5209: 0x407b7620, 0x520a: 0x407b7820, 0x520b: 0x407b7a20, + 0x520c: 0x407b7c20, 0x520d: 0x407b7e20, 0x520e: 0x407b8020, 0x520f: 0x407b8220, + 0x5210: 0x407b8420, 0x5211: 0x407b8620, 0x5212: 0x407b8820, 0x5213: 0x407b8a20, + 0x5214: 0x407b8c20, 0x5215: 0x407b8e20, 0x5216: 0x407b9020, 0x5217: 0x407b9220, + 0x5218: 0x407b9420, 0x5219: 0x407b9620, 0x521a: 0x407b9820, 0x521b: 0x407b9a20, + 0x521c: 0x407b9c20, 0x521d: 0x407b9e20, 0x521e: 0x407ba020, 0x521f: 0x407ba220, + 0x5220: 0x407ba420, 0x5221: 0x407ba620, 0x5222: 0x407ba820, 0x5223: 0x407baa20, + 0x5224: 0x407bac20, 0x5225: 0x407bae20, 0x5226: 0x407bb020, 0x5227: 0x407bb220, + 0x5228: 0x407bb420, 0x5229: 0x407bb620, 0x522a: 0x407bb820, 0x522b: 0x407bba20, + 0x522c: 0x407bbc20, 0x522d: 0x407bbe20, 0x522e: 0x407bc020, 0x522f: 0x407bc220, + 0x5230: 0x407bc420, 0x5231: 0x407bc620, 0x5232: 0x407bc820, 0x5233: 0x407bca20, + 0x5234: 0x407bcc20, 0x5235: 0x407bce20, 0x5236: 0x407bd020, 0x5237: 0x407bd220, + 0x5238: 0x407bd420, 0x5239: 0x407bd620, 0x523a: 0x407bd820, 0x523b: 0x407bda20, + 0x523c: 0x407bdc20, 0x523d: 0x407bde20, 0x523e: 0x407be020, 0x523f: 0x407be220, + // Block 0x149, offset 0x5240 + 0x5240: 0x407be420, 0x5241: 0x407be620, 0x5242: 0x407be820, 0x5243: 0x407bea20, + 0x5244: 0x407bec20, 0x5245: 0x407bee20, 0x5246: 0x407bf020, 0x5247: 0x407bf220, + 0x5248: 0x407bf420, 0x5249: 0x407bf620, 0x524a: 0x407bf820, 0x524b: 0x407bfa20, + 0x524c: 0x407bfc20, 0x524d: 0x407bfe20, 0x524e: 0x407c0020, 0x524f: 0x407c0220, + 0x5250: 0x407c0420, 0x5251: 0x407c0620, 0x5252: 0x407c0820, 0x5253: 0x407c0a20, + 0x5254: 0x407c0c20, 0x5255: 0x407c0e20, 0x5256: 0x407c1020, 0x5257: 0x407c1220, + 0x5258: 0x407c1420, 0x5259: 0x407c1620, 0x525a: 0x407c1820, 0x525b: 0x407c1a20, + 0x525c: 0x407c1c20, 0x525d: 0x407c1e20, 0x525e: 0x407c2020, 0x525f: 0x407c2220, + 0x5260: 0x407c2420, 0x5261: 0x407c2620, 0x5262: 0x407c2820, 0x5263: 0x407c2a20, + 0x5264: 0x407c2c20, 0x5265: 0x407c2e20, 0x5266: 0x407c3020, 0x5267: 0x407c3220, + 0x5268: 0x407c3420, 0x5269: 0x407c3620, 0x526a: 0x407c3820, 0x526b: 0x407c3a20, + 0x526c: 0x407c3c20, 0x526d: 0x407c3e20, 0x526e: 0x407c4020, 0x526f: 0x407c4220, + 0x5270: 0x407c4420, 0x5271: 0x407c4620, 0x5272: 0x407c4820, 0x5273: 0x407c4a20, + 0x5274: 0x407c4c20, 0x5275: 0x407c4e20, 0x5276: 0x407c5020, 0x5277: 0x407c5220, + 0x5278: 0x407c5420, 0x5279: 0x407c5620, 0x527a: 0x407c5820, 0x527b: 0x407c5a20, + 0x527c: 0x407c5c20, 0x527d: 0x407c5e20, 0x527e: 0x407c6020, 0x527f: 0x407c6220, + // Block 0x14a, offset 0x5280 + 0x5280: 0x407c6420, 0x5281: 0x407c6620, 0x5282: 0x407c6820, 0x5283: 0x407c6a20, + 0x5284: 0x407c6c20, 0x5285: 0x407c6e20, 0x5286: 0x407c7020, 0x5287: 0x407c7220, + 0x5288: 0x407c7420, 0x5289: 0x407c7620, 0x528a: 0x407c7820, 0x528b: 0x407c7a20, + 0x528c: 0x407c7c20, 0x528d: 0x407c7e20, 0x528e: 0x407c8020, 0x528f: 0x407c8220, + 0x5290: 0x407c8420, 0x5291: 0x407c8620, 0x5292: 0x407c8820, 0x5293: 0x407c8a20, + 0x5294: 0x407c8c20, 0x5295: 0x407c8e20, 0x5296: 0x407c9020, 0x5297: 0x407c9220, + 0x5298: 0x407c9420, 0x5299: 0x407c9620, 0x529a: 0x407c9820, 0x529b: 0x407c9a20, + 0x529c: 0x407c9c20, 0x529d: 0x407c9e20, 0x529e: 0x407ca020, 0x529f: 0x407ca220, + 0x52a0: 0x407ca420, 0x52a1: 0x407ca620, 0x52a2: 0x407ca820, 0x52a3: 0x407caa20, + 0x52a4: 0x407cac20, 0x52a5: 0x407cae20, 0x52a6: 0x407cb020, 0x52a7: 0x407cb220, + 0x52a8: 0x407cb420, 0x52a9: 0x407cb620, 0x52aa: 0x407cb820, 0x52ab: 0x407cba20, + 0x52ac: 0x407cbc20, 0x52ad: 0x407cbe20, 0x52ae: 0x407cc020, 0x52af: 0x407cc220, + 0x52b0: 0x407cc420, 0x52b1: 0x407cc620, 0x52b2: 0x407cc820, 0x52b3: 0x407cca20, + 0x52b4: 0x407ccc20, 0x52b5: 0x407cce20, 0x52b6: 0x407cd020, 0x52b7: 0x407cd220, + 0x52b8: 0x407cd420, 0x52b9: 0x407cd620, 0x52ba: 0x407cd820, 0x52bb: 0x407cda20, + 0x52bc: 0x407cdc20, 0x52bd: 0x407cde20, 0x52be: 0x407ce020, 0x52bf: 0x407ce220, + // Block 0x14b, offset 0x52c0 + 0x52c0: 0x407ce420, 0x52c1: 0x407ce620, 0x52c2: 0x407ce820, 0x52c3: 0x407cea20, + 0x52c4: 0x407cec20, 0x52c5: 0x407cee20, 0x52c6: 0x407cf020, 0x52c7: 0x407cf220, + 0x52c8: 0x407cf420, 0x52c9: 0x407cf620, 0x52ca: 0x407cf820, 0x52cb: 0x407cfa20, + 0x52cc: 0x407cfc20, 0x52cd: 0x407cfe20, 0x52ce: 0x407d0020, 0x52cf: 0x407d0220, + 0x52d0: 0x407d0420, 0x52d1: 0x407d0620, 0x52d2: 0x407d0820, 0x52d3: 0x407d0a20, + 0x52d4: 0x407d0c20, 0x52d5: 0x407d0e20, 0x52d6: 0x407d1020, 0x52d7: 0x407d1220, + 0x52d8: 0x407d1420, 0x52d9: 0x407d1620, 0x52da: 0x407d1820, 0x52db: 0x407d1a20, + 0x52dc: 0x407d1c20, 0x52dd: 0x407d1e20, 0x52de: 0x407d2020, 0x52df: 0x407d2220, + 0x52e0: 0x407d2420, 0x52e1: 0x407d2620, 0x52e2: 0x407d2820, 0x52e3: 0x407d2a20, + 0x52e4: 0x407d2c20, 0x52e5: 0x407d2e20, 0x52e6: 0x407d3020, 0x52e7: 0x407d3220, + 0x52e8: 0x407d3420, 0x52e9: 0x407d3620, 0x52ea: 0x407d3820, 0x52eb: 0x407d3a20, + 0x52ec: 0x407d3c20, 0x52ed: 0x407d3e20, 0x52ee: 0x407d4020, 0x52ef: 0x407d4220, + 0x52f0: 0x407d4420, 0x52f1: 0x407d4620, 0x52f2: 0x407d4820, 0x52f3: 0x407d4a20, + 0x52f4: 0x407d4c20, 0x52f5: 0x407d4e20, 0x52f6: 0x407d5020, 0x52f7: 0x407d5220, + 0x52f8: 0x407d5420, 0x52f9: 0x407d5620, 0x52fa: 0x407d5820, 0x52fb: 0x407d5a20, + 0x52fc: 0x407d5c20, 0x52fd: 0x407d5e20, 0x52fe: 0x407d6020, 0x52ff: 0x407d6220, + // Block 0x14c, offset 0x5300 + 0x5300: 0x407d6420, 0x5301: 0x407d6620, 0x5302: 0x407d6820, 0x5303: 0x407d6a20, + 0x5304: 0x407d6c20, 0x5305: 0x407d6e20, 0x5306: 0x407d7020, 0x5307: 0x407d7220, + 0x5308: 0x407d7420, 0x5309: 0x407d7620, 0x530a: 0x407d7820, 0x530b: 0x407d7a20, + 0x530c: 0x407d7c20, 0x530d: 0x407d7e20, 0x530e: 0x407d8020, 0x530f: 0x407d8220, + 0x5310: 0x407d8420, 0x5311: 0x407d8620, 0x5312: 0x407d8820, 0x5313: 0x407d8a20, + 0x5314: 0x407d8c20, 0x5315: 0x407d8e20, 0x5316: 0x407d9020, 0x5317: 0x407d9220, + 0x5318: 0x407d9420, 0x5319: 0x407d9620, 0x531a: 0x407d9820, 0x531b: 0x407d9a20, + 0x531c: 0x407d9c20, 0x531d: 0x407d9e20, 0x531e: 0x407da020, 0x531f: 0x407da220, + 0x5320: 0x407da420, 0x5321: 0x407da620, 0x5322: 0x407da820, 0x5323: 0x407daa20, + 0x5324: 0x407dac20, 0x5325: 0x407dae20, 0x5326: 0x407db020, 0x5327: 0x407db220, + 0x5328: 0x407db420, 0x5329: 0x407db620, 0x532a: 0x407db820, 0x532b: 0x407dba20, + 0x532c: 0x407dbc20, 0x532d: 0x407dbe20, 0x532e: 0x407dc020, + // Block 0x14d, offset 0x5340 + 0x5340: 0xe0000394, 0x5341: 0xe000045f, 0x5342: 0xe0000534, 0x5343: 0xe0000610, + 0x5344: 0xe00006cc, 0x5345: 0xe0000771, 0x5346: 0xe000081d, 0x5347: 0xe00008c2, + 0x5348: 0xe0000462, 0x5349: 0xe0000537, 0x534a: 0xe0000613, 0x534b: 0xe00006cf, + 0x534c: 0xe0000774, 0x534d: 0xe0000820, 0x534e: 0xe00008c5, 0x534f: 0xe000053a, + 0x5350: 0xe0000616, 0x5351: 0xe00006d2, 0x5352: 0xe0000777, 0x5353: 0xe0000823, + 0x5354: 0xe00008c8, 0x5355: 0xe000027f, 0x5356: 0xe0000397, 0x5357: 0xe0000465, + 0x5358: 0xe000053d, 0x5359: 0xe0000619, 0x535a: 0xe00006d5, 0x535b: 0xe000077a, + 0x535c: 0xe0000826, 0x535d: 0xe00008cb, 0x535e: 0xe0000282, 0x535f: 0xe000039a, + 0x5360: 0xe0000468, 0x5361: 0xe0000540, 0x5362: 0xe000061c, 0x5363: 0xe000039d, + 0x5364: 0xe000046b, 0x5365: 0xe000046e, 0x5366: 0xe0000543, 0x5367: 0xe000061f, + 0x5368: 0xe00006d8, 0x5369: 0xe000077d, 0x536a: 0xe0000829, 0x536b: 0xe00008ce, + 0x536c: 0xe0000285, 0x536d: 0xe00003a0, 0x536e: 0xe0000471, 0x536f: 0xe0000474, + 0x5370: 0xe0000546, 0x5371: 0xe0000622, 0x5372: 0x4029a020, 0x5373: 0x4029a220, + 0x5374: 0xe0000288, 0x5375: 0xe00003a3, 0x5376: 0xe0000477, 0x5377: 0xe000047a, + 0x5378: 0xe0000549, 0x5379: 0xe0000625, 0x537a: 0xe000047d, 0x537b: 0xe0000480, + 0x537c: 0xe000054c, 0x537d: 0xe000054f, 0x537e: 0xe0000552, 0x537f: 0xe0000555, + // Block 0x14e, offset 0x5380 + 0x5380: 0xe00006db, 0x5381: 0xe0000780, 0x5382: 0xe0000783, 0x5383: 0xe0000786, + 0x5384: 0xe000082c, 0x5385: 0xe000082f, 0x5386: 0xe00008d1, 0x5387: 0xe00008d4, + 0x5388: 0xe00008d7, 0x5389: 0xe00008da, 0x538a: 0xe00003a6, 0x538b: 0xe0000483, + 0x538c: 0xe0000558, 0x538d: 0xe0000628, 0x538e: 0xe00006de, 0x538f: 0xe000028b, + 0x5390: 0xe00003a9, 0x5391: 0xe0000486, 0x5392: 0xe000055b, 0x5393: 0xe000055e, + 0x5394: 0xe000062b, 0x5395: 0xe000062e, 0x5396: 0x4029a420, 0x5397: 0x4029a620, + 0x5398: 0xe000028e, 0x5399: 0xe00003ac, 0x539a: 0x4029a820, 0x539b: 0x4029aa20, + 0x539c: 0x4029ac20, 0x539d: 0x4029ae20, 0x539e: 0x4029b020, 0x539f: 0x4029b220, + 0x53a0: 0x4029b420, 0x53a1: 0x4029b620, 0x53a2: 0x4029b820, + 0x53b0: 0x4003ca20, 0x53b1: 0x4003cc20, 0x53b2: 0x4003ce20, 0x53b3: 0x4003d020, + // Block 0x14f, offset 0x53c0 + 0x53c0: 0x407dc220, 0x53c1: 0x407dc420, 0x53c2: 0x407dc620, 0x53c3: 0x407dc820, + 0x53c4: 0x407dca20, 0x53c5: 0x407dcc20, 0x53c6: 0x407dce20, 0x53c7: 0x407dd020, + 0x53c8: 0x407dd220, 0x53c9: 0x407dd420, 0x53ca: 0x407dd620, 0x53cb: 0x407dd820, + 0x53cc: 0x407dda20, 0x53cd: 0x407ddc20, 0x53ce: 0x407dde20, 0x53cf: 0x407de020, + 0x53d0: 0x407de220, 0x53d1: 0x407de420, 0x53d2: 0x407de620, 0x53d3: 0x407de820, + 0x53d4: 0x407dea20, 0x53d5: 0x407dec20, 0x53d6: 0x407dee20, 0x53d7: 0x407df020, + 0x53d8: 0x407df220, 0x53d9: 0x407df420, 0x53da: 0x407df620, 0x53db: 0x407df820, + 0x53dc: 0x407dfa20, 0x53dd: 0x407dfc20, 0x53de: 0x407dfe20, 0x53df: 0x407e0020, + 0x53e0: 0x407e0220, 0x53e1: 0x407e0420, 0x53e2: 0x407e0620, 0x53e3: 0x407e0820, + 0x53e4: 0x407e0a20, 0x53e5: 0x407e0c20, 0x53e6: 0x407e0e20, 0x53e7: 0x407e1020, + 0x53e8: 0x407e1220, 0x53e9: 0x407e1420, 0x53ea: 0x407e1620, 0x53eb: 0x407e1820, + 0x53ec: 0x407e1a20, 0x53ed: 0x407e1c20, 0x53ee: 0x407e1e20, 0x53ef: 0x407e2020, + 0x53f0: 0x407e2220, 0x53f1: 0x407e2420, 0x53f2: 0x407e2620, 0x53f3: 0x407e2820, + 0x53f4: 0x407e2a20, 0x53f5: 0x407e2c20, 0x53f6: 0x407e2e20, 0x53f7: 0x407e3020, + 0x53f8: 0x407e3220, 0x53f9: 0x407e3420, 0x53fa: 0x407e3620, 0x53fb: 0x407e3820, + 0x53fc: 0x407e3a20, 0x53fd: 0x407e3c20, 0x53fe: 0x407e3e20, 0x53ff: 0x407e4020, + // Block 0x150, offset 0x5400 + 0x5400: 0x407e4220, 0x5401: 0x407e4420, 0x5402: 0x407e4620, 0x5403: 0x407e4820, + 0x5404: 0x407e4a20, 0x5405: 0x407e4c20, 0x5406: 0x407e4e20, 0x5407: 0x407e5020, + 0x5408: 0x407e5220, 0x5409: 0x407e5420, 0x540a: 0x407e5620, 0x540b: 0x407e5820, + 0x540c: 0x407e5a20, 0x540d: 0x407e5c20, 0x540e: 0x407e5e20, 0x540f: 0x407e6020, + 0x5410: 0x407e6220, 0x5411: 0x407e6420, 0x5412: 0x407e6620, 0x5413: 0x407e6820, + 0x5414: 0x407e6a20, 0x5415: 0x407e6c20, 0x5416: 0x407e6e20, 0x5417: 0x407e7020, + 0x5418: 0x407e7220, 0x5419: 0x407e7420, 0x541a: 0x407e7620, 0x541b: 0x407e7820, + 0x541c: 0x407e7a20, 0x541d: 0x407e7c20, 0x541e: 0x407e7e20, 0x541f: 0x407e8020, + 0x5420: 0x407e8220, 0x5421: 0x407e8420, 0x5422: 0x407e8620, 0x5423: 0x407e8820, + 0x5424: 0x407e8a20, 0x5425: 0x407e8c20, 0x5426: 0x407e8e20, 0x5427: 0x407e9020, + 0x5428: 0x407e9220, 0x5429: 0x407e9420, 0x542a: 0x407e9620, 0x542b: 0x407e9820, + 0x542c: 0x407e9a20, 0x542d: 0x407e9c20, 0x542e: 0x407e9e20, 0x542f: 0x407ea020, + 0x5430: 0x407ea220, 0x5431: 0x407ea420, 0x5432: 0x407ea620, 0x5433: 0x407ea820, + 0x5434: 0x407eaa20, 0x5435: 0x407eac20, 0x5436: 0x407eae20, 0x5437: 0x407eb020, + 0x5438: 0x407eb220, 0x5439: 0x407eb420, 0x543a: 0x407eb620, 0x543b: 0x407eb820, + 0x543c: 0x407eba20, 0x543d: 0x407ebc20, 0x543e: 0x407ebe20, 0x543f: 0x407ec020, + // Block 0x151, offset 0x5440 + 0x5440: 0x407ec220, 0x5441: 0x407ec420, 0x5442: 0x407ec620, 0x5443: 0x407ec820, + 0x5444: 0x407eca20, 0x5445: 0x407ecc20, 0x5446: 0x407ece20, 0x5447: 0x407ed020, + 0x5448: 0x407ed220, 0x5449: 0x407ed420, 0x544a: 0x407ed620, 0x544b: 0x407ed820, + 0x544c: 0x407eda20, 0x544d: 0x407edc20, 0x544e: 0x407ede20, 0x544f: 0x407ee020, + 0x5450: 0x407ee220, 0x5451: 0x407ee420, 0x5452: 0x407ee620, 0x5453: 0x407ee820, + 0x5454: 0x407eea20, 0x5455: 0x407eec20, 0x5456: 0x407eee20, 0x5457: 0x407ef020, + 0x5458: 0x407ef220, 0x5459: 0x407ef420, 0x545a: 0x407ef620, 0x545b: 0x407ef820, + 0x545c: 0x407efa20, 0x545d: 0x407efc20, 0x545e: 0x407efe20, 0x545f: 0x407f0020, + 0x5460: 0x407f0220, 0x5461: 0x407f0420, 0x5462: 0x407f0620, 0x5463: 0x407f0820, + 0x5464: 0x407f0a20, 0x5465: 0x407f0c20, 0x5466: 0x407f0e20, 0x5467: 0x407f1020, + 0x5468: 0x407f1220, 0x5469: 0x407f1420, 0x546a: 0x407f1620, 0x546b: 0x407f1820, + 0x546c: 0x407f1a20, 0x546d: 0x407f1c20, 0x546e: 0x407f1e20, 0x546f: 0x407f2020, + 0x5470: 0x407f2220, 0x5471: 0x407f2420, 0x5472: 0x407f2620, 0x5473: 0x407f2820, + 0x5474: 0x407f2a20, 0x5475: 0x407f2c20, 0x5476: 0x407f2e20, 0x5477: 0x407f3020, + 0x5478: 0x407f3220, 0x5479: 0x407f3420, 0x547a: 0x407f3620, 0x547b: 0x407f3820, + 0x547c: 0x407f3a20, 0x547d: 0x407f3c20, 0x547e: 0x407f3e20, 0x547f: 0x407f4020, + // Block 0x152, offset 0x5480 + 0x5480: 0x407f4220, 0x5481: 0x407f4420, 0x5482: 0x407f4620, 0x5483: 0x407f4820, + 0x5484: 0x407f4a20, 0x5485: 0x407f4c20, 0x5486: 0x407f4e20, 0x5487: 0x407f5020, + 0x5488: 0x407f5220, 0x5489: 0x407f5420, 0x548a: 0x407f5620, 0x548b: 0x407f5820, + 0x548c: 0x407f5a20, 0x548d: 0x407f5c20, 0x548e: 0x407f5e20, 0x548f: 0x407f6020, + 0x5490: 0x407f6220, 0x5491: 0x407f6420, 0x5492: 0x407f6620, 0x5493: 0x407f6820, + 0x5494: 0x407f6a20, 0x5495: 0x407f6c20, 0x5496: 0x407f6e20, 0x5497: 0x407f7020, + 0x5498: 0x407f7220, 0x5499: 0x407f7420, 0x549a: 0x407f7620, 0x549b: 0x407f7820, + 0x549c: 0x407f7a20, 0x549d: 0x407f7c20, 0x549e: 0x407f7e20, 0x549f: 0x407f8020, + 0x54a0: 0x407f8220, 0x54a1: 0x407f8420, 0x54a2: 0x407f8620, 0x54a3: 0x407f8820, + 0x54a4: 0x407f8a20, 0x54a5: 0x407f8c20, 0x54a6: 0x407f8e20, 0x54a7: 0x407f9020, + 0x54a8: 0x407f9220, 0x54a9: 0x407f9420, 0x54aa: 0x407f9620, 0x54ab: 0x407f9820, + 0x54ac: 0x407f9a20, 0x54ad: 0x407f9c20, 0x54ae: 0x407f9e20, 0x54af: 0x407fa020, + 0x54b0: 0x407fa220, 0x54b1: 0x407fa420, 0x54b2: 0x407fa620, 0x54b3: 0x407fa820, + 0x54b4: 0x407faa20, 0x54b5: 0x407fac20, 0x54b6: 0x407fae20, 0x54b7: 0x407fb020, + 0x54b8: 0x407fb220, 0x54b9: 0x407fb420, 0x54ba: 0x407fb620, 0x54bb: 0x407fb820, + 0x54bc: 0x407fba20, 0x54bd: 0x407fbc20, 0x54be: 0x407fbe20, 0x54bf: 0x407fc020, + // Block 0x153, offset 0x54c0 + 0x54c0: 0x407fc220, 0x54c1: 0x407fc420, 0x54c2: 0x407fc620, 0x54c3: 0x407fc820, + 0x54c4: 0x407fca20, 0x54c5: 0x407fcc20, 0x54c6: 0x407fce20, 0x54c7: 0x407fd020, + 0x54c8: 0x407fd220, 0x54c9: 0x407fd420, 0x54ca: 0x407fd620, 0x54cb: 0x407fd820, + 0x54cc: 0x407fda20, 0x54cd: 0x407fdc20, 0x54ce: 0x407fde20, 0x54cf: 0x407fe020, + 0x54d0: 0x407fe220, 0x54d1: 0x407fe420, 0x54d2: 0x407fe620, 0x54d3: 0x407fe820, + 0x54d4: 0x407fea20, 0x54d5: 0x407fec20, 0x54d6: 0x407fee20, 0x54d7: 0x407ff020, + 0x54d8: 0x407ff220, 0x54d9: 0x407ff420, 0x54da: 0x407ff620, 0x54db: 0x407ff820, + 0x54dc: 0x407ffa20, 0x54dd: 0x407ffc20, 0x54de: 0x407ffe20, 0x54df: 0x40800020, + 0x54e0: 0x40800220, 0x54e1: 0x40800420, 0x54e2: 0x40800620, 0x54e3: 0x40800820, + 0x54e4: 0x40800a20, 0x54e5: 0x40800c20, 0x54e6: 0x40800e20, 0x54e7: 0x40801020, + 0x54e8: 0x40801220, 0x54e9: 0x40801420, 0x54ea: 0x40801620, 0x54eb: 0x40801820, + 0x54ec: 0x40801a20, 0x54ed: 0x40801c20, 0x54ee: 0x40801e20, 0x54ef: 0x40802020, + 0x54f0: 0x40802220, 0x54f1: 0x40802420, 0x54f2: 0x40802620, 0x54f3: 0x40802820, + 0x54f4: 0x40802a20, 0x54f5: 0x40802c20, 0x54f6: 0x40802e20, 0x54f7: 0x40803020, + 0x54f8: 0x40803220, 0x54f9: 0x40803420, 0x54fa: 0x40803620, 0x54fb: 0x40803820, + 0x54fc: 0x40803a20, 0x54fd: 0x40803c20, 0x54fe: 0x40803e20, 0x54ff: 0x40804020, + // Block 0x154, offset 0x5500 + 0x5500: 0x40804220, 0x5501: 0x40804420, 0x5502: 0x40804620, 0x5503: 0x40804820, + 0x5504: 0x40804a20, 0x5505: 0x40804c20, 0x5506: 0x40804e20, 0x5507: 0x40805020, + 0x5508: 0x40805220, 0x5509: 0x40805420, 0x550a: 0x40805620, 0x550b: 0x40805820, + 0x550c: 0x40805a20, 0x550d: 0x40805c20, 0x550e: 0x40805e20, 0x550f: 0x40806020, + 0x5510: 0x40806220, 0x5511: 0x40806420, 0x5512: 0x40806620, 0x5513: 0x40806820, + 0x5514: 0x40806a20, 0x5515: 0x40806c20, 0x5516: 0x40806e20, 0x5517: 0x40807020, + 0x5518: 0x40807220, 0x5519: 0x40807420, 0x551a: 0x40807620, 0x551b: 0x40807820, + 0x551c: 0x40807a20, 0x551d: 0x40807c20, 0x551e: 0x40807e20, 0x551f: 0x40808020, + 0x5520: 0x40808220, 0x5521: 0x40808420, 0x5522: 0x40808620, 0x5523: 0x40808820, + 0x5524: 0x40808a20, 0x5525: 0x40808c20, 0x5526: 0x40808e20, 0x5527: 0x40809020, + 0x5528: 0x40809220, 0x5529: 0x40809420, 0x552a: 0x40809620, 0x552b: 0x40809820, + 0x552c: 0x40809a20, 0x552d: 0x40809c20, 0x552e: 0x40809e20, 0x552f: 0x4080a020, + 0x5530: 0x4080a220, 0x5531: 0x4080a420, 0x5532: 0x4080a620, 0x5533: 0x4080a820, + 0x5534: 0x4080aa20, 0x5535: 0x4080ac20, 0x5536: 0x4080ae20, 0x5537: 0x4080b020, + 0x5538: 0x4080b220, 0x5539: 0x4080b420, 0x553a: 0x4080b620, 0x553b: 0x4080b820, + 0x553c: 0x4080ba20, 0x553d: 0x4080bc20, 0x553e: 0x4080be20, 0x553f: 0x4080c020, + // Block 0x155, offset 0x5540 + 0x5540: 0x4080c220, 0x5541: 0x4080c420, 0x5542: 0x4080c620, 0x5543: 0x4080c820, + 0x5544: 0x4080ca20, 0x5545: 0x4080cc20, 0x5546: 0x4080ce20, 0x5547: 0x4080d020, + 0x5548: 0x4080d220, 0x5549: 0x4080d420, 0x554a: 0x4080d620, 0x554b: 0x4080d820, + 0x554c: 0x4080da20, 0x554d: 0x4080dc20, 0x554e: 0x4080de20, 0x554f: 0x4080e020, + 0x5550: 0x4080e220, 0x5551: 0x4080e420, 0x5552: 0x4080e620, 0x5553: 0x4080e820, + 0x5554: 0x4080ea20, 0x5555: 0x4080ec20, 0x5556: 0x4080ee20, 0x5557: 0x4080f020, + 0x5558: 0x4080f220, 0x5559: 0x4080f420, 0x555a: 0x4080f620, 0x555b: 0x4080f820, + 0x555c: 0x4080fa20, 0x555d: 0x4080fc20, 0x555e: 0x4080fe20, 0x555f: 0x40810020, + 0x5560: 0x40810220, 0x5561: 0x40810420, 0x5562: 0x40810620, 0x5563: 0x40810820, + 0x5564: 0x40810a20, 0x5565: 0x40810c20, 0x5566: 0x40810e20, 0x5567: 0x40811020, + 0x5568: 0x40811220, 0x5569: 0x40811420, 0x556a: 0x40811620, 0x556b: 0x40811820, + 0x556c: 0x40811a20, 0x556d: 0x40811c20, 0x556e: 0x40811e20, 0x556f: 0x40812020, + 0x5570: 0x40812220, 0x5571: 0x40812420, 0x5572: 0x40812620, 0x5573: 0x40812820, + 0x5574: 0x40812a20, 0x5575: 0x40812c20, 0x5576: 0x40812e20, 0x5577: 0x40813020, + 0x5578: 0x40813220, 0x5579: 0x40813420, 0x557a: 0x40813620, 0x557b: 0x40813820, + 0x557c: 0x40813a20, 0x557d: 0x40813c20, 0x557e: 0x40813e20, 0x557f: 0x40814020, + // Block 0x156, offset 0x5580 + 0x5580: 0x40814220, 0x5581: 0x40814420, 0x5582: 0x40814620, 0x5583: 0x40814820, + 0x5584: 0x40814a20, 0x5585: 0x40814c20, 0x5586: 0x40814e20, 0x5587: 0x40815020, + 0x5588: 0x40815220, 0x5589: 0x40815420, 0x558a: 0x40815620, 0x558b: 0x40815820, + 0x558c: 0x40815a20, 0x558d: 0x40815c20, 0x558e: 0x40815e20, 0x558f: 0x40816020, + 0x5590: 0x40816220, 0x5591: 0x40816420, 0x5592: 0x40816620, 0x5593: 0x40816820, + 0x5594: 0x40816a20, 0x5595: 0x40816c20, 0x5596: 0x40816e20, 0x5597: 0x40817020, + 0x5598: 0x40817220, 0x5599: 0x40817420, 0x559a: 0x40817620, 0x559b: 0x40817820, + 0x559c: 0x40817a20, 0x559d: 0x40817c20, 0x559e: 0x40817e20, 0x559f: 0x40818020, + 0x55a0: 0x40818220, 0x55a1: 0x40818420, 0x55a2: 0x40818620, 0x55a3: 0x40818820, + 0x55a4: 0x40818a20, 0x55a5: 0x40818c20, 0x55a6: 0x40818e20, 0x55a7: 0x40819020, + 0x55a8: 0x40819220, 0x55a9: 0x40819420, 0x55aa: 0x40819620, 0x55ab: 0x40819820, + 0x55ac: 0x40819a20, 0x55ad: 0x40819c20, 0x55ae: 0x40819e20, 0x55af: 0x4081a020, + 0x55b0: 0x4081a220, 0x55b1: 0x4081a420, 0x55b2: 0x4081a620, 0x55b3: 0x4081a820, + 0x55b4: 0x4081aa20, 0x55b5: 0x4081ac20, 0x55b6: 0x4081ae20, 0x55b7: 0x4081b020, + 0x55b8: 0x4081b220, 0x55b9: 0x4081b420, 0x55ba: 0x4081b620, 0x55bb: 0x4081b820, + 0x55bc: 0x4081ba20, 0x55bd: 0x4081bc20, 0x55be: 0x4081be20, 0x55bf: 0x4081c020, + // Block 0x157, offset 0x55c0 + 0x55c0: 0x4081c220, 0x55c1: 0x4081c420, 0x55c2: 0x4081c620, 0x55c3: 0x4081c820, + 0x55c4: 0x4081ca20, 0x55c5: 0x4081cc20, 0x55c6: 0x4081ce20, 0x55c7: 0x4081d020, + 0x55c8: 0x4081d220, 0x55c9: 0x4081d420, 0x55ca: 0x4081d620, 0x55cb: 0x4081d820, + 0x55cc: 0x4081da20, 0x55cd: 0x4081dc20, 0x55ce: 0x4081de20, 0x55cf: 0x4081e020, + 0x55d0: 0x4081e220, 0x55d1: 0x4081e420, 0x55d2: 0x4081e620, 0x55d3: 0x4081e820, + 0x55d4: 0x4081ea20, 0x55d5: 0x4081ec20, 0x55d6: 0x4081ee20, 0x55d7: 0x4081f020, + 0x55d8: 0x4081f220, 0x55d9: 0x4081f420, 0x55da: 0x4081f620, 0x55db: 0x4081f820, + 0x55dc: 0x4081fa20, 0x55dd: 0x4081fc20, 0x55de: 0x4081fe20, 0x55df: 0x40820020, + 0x55e0: 0x40820220, 0x55e1: 0x40820420, 0x55e2: 0x40820620, 0x55e3: 0x40820820, + 0x55e4: 0x40820a20, 0x55e5: 0x40820c20, 0x55e6: 0x40820e20, 0x55e7: 0x40821020, + 0x55e8: 0x40821220, 0x55e9: 0x40821420, 0x55ea: 0x40821620, 0x55eb: 0x40821820, + 0x55ec: 0x40821a20, 0x55ed: 0x40821c20, 0x55ee: 0x40821e20, 0x55ef: 0x40822020, + 0x55f0: 0x40822220, 0x55f1: 0x40822420, 0x55f2: 0x40822620, 0x55f3: 0x40822820, + 0x55f4: 0x40822a20, 0x55f5: 0x40822c20, 0x55f6: 0x40822e20, 0x55f7: 0x40823020, + 0x55f8: 0x40823220, 0x55f9: 0x40823420, 0x55fa: 0x40823620, 0x55fb: 0x40823820, + 0x55fc: 0x40823a20, 0x55fd: 0x40823c20, 0x55fe: 0x40823e20, 0x55ff: 0x40824020, + // Block 0x158, offset 0x5600 + 0x5600: 0x40824220, 0x5601: 0x40824420, 0x5602: 0x40824620, 0x5603: 0x40824820, + 0x5604: 0x40824a20, 0x5605: 0x40824c20, 0x5606: 0x40824e20, 0x5607: 0x40825020, + 0x5608: 0x40825220, 0x5609: 0x40825420, 0x560a: 0x40825620, 0x560b: 0x40825820, + 0x560c: 0x40825a20, 0x560d: 0x40825c20, 0x560e: 0x40825e20, 0x560f: 0x40826020, + 0x5610: 0x40826220, 0x5611: 0x40826420, 0x5612: 0x40826620, 0x5613: 0x40826820, + 0x5614: 0x40826a20, 0x5615: 0x40826c20, 0x5616: 0x40826e20, 0x5617: 0x40827020, + 0x5618: 0x40827220, 0x5619: 0x40827420, 0x561a: 0x40827620, 0x561b: 0x40827820, + 0x561c: 0x40827a20, 0x561d: 0x40827c20, 0x561e: 0x40827e20, 0x561f: 0x40828020, + 0x5620: 0x40828220, 0x5621: 0x40828420, 0x5622: 0x40828620, 0x5623: 0x40828820, + 0x5624: 0x40828a20, 0x5625: 0x40828c20, 0x5626: 0x40828e20, 0x5627: 0x40829020, + 0x5628: 0x40829220, 0x5629: 0x40829420, 0x562a: 0x40829620, 0x562b: 0x40829820, + 0x562c: 0x40829a20, 0x562d: 0x40829c20, 0x562e: 0x40829e20, 0x562f: 0x4082a020, + 0x5630: 0x4082a220, 0x5631: 0x4082a420, 0x5632: 0x4082a620, 0x5633: 0x4082a820, + 0x5634: 0x4082aa20, 0x5635: 0x4082ac20, 0x5636: 0x4082ae20, 0x5637: 0x4082b020, + 0x5638: 0x4082b220, 0x5639: 0x4082b420, 0x563a: 0x4082b620, 0x563b: 0x4082b820, + 0x563c: 0x4082ba20, 0x563d: 0x4082bc20, 0x563e: 0x4082be20, 0x563f: 0x4082c020, + // Block 0x159, offset 0x5640 + 0x5640: 0x4082c220, 0x5641: 0x4082c420, 0x5642: 0x4082c620, 0x5643: 0x4082c820, + 0x5644: 0x4082ca20, 0x5645: 0x4082cc20, 0x5646: 0x4082ce20, 0x5647: 0x4082d020, + 0x5648: 0x4082d220, 0x5649: 0x4082d420, 0x564a: 0x4082d620, 0x564b: 0x4082d820, + 0x564c: 0x4082da20, 0x564d: 0x4082dc20, 0x564e: 0x4082de20, 0x564f: 0x4082e020, + 0x5650: 0x4082e220, 0x5651: 0x4082e420, 0x5652: 0x4082e620, 0x5653: 0x4082e820, + 0x5654: 0x4082ea20, 0x5655: 0x4082ec20, 0x5656: 0x4082ee20, 0x5657: 0x4082f020, + 0x5658: 0x4082f220, 0x5659: 0x4082f420, 0x565a: 0x4082f620, 0x565b: 0x4082f820, + 0x565c: 0x4082fa20, 0x565d: 0x4082fc20, 0x565e: 0x4082fe20, 0x565f: 0x40830020, + 0x5660: 0x40830220, 0x5661: 0x40830420, 0x5662: 0x40830620, 0x5663: 0x40830820, + 0x5664: 0x40830a20, 0x5665: 0x40830c20, 0x5666: 0x40830e20, 0x5667: 0x40831020, + 0x5668: 0x40831220, 0x5669: 0x40831420, 0x566a: 0x40831620, 0x566b: 0x40831820, + 0x566c: 0x40831a20, 0x566d: 0x40831c20, 0x566e: 0x40831e20, 0x566f: 0x40832020, + 0x5670: 0x40832220, 0x5671: 0x40832420, 0x5672: 0x40832620, 0x5673: 0x40832820, + 0x5674: 0x40832a20, 0x5675: 0x40832c20, 0x5676: 0x40832e20, 0x5677: 0x40833020, + 0x5678: 0x40833220, 0x5679: 0x40833420, 0x567a: 0x40833620, 0x567b: 0x40833820, + 0x567c: 0x40833a20, 0x567d: 0x40833c20, 0x567e: 0x40833e20, 0x567f: 0x40834020, + // Block 0x15a, offset 0x5680 + 0x5680: 0x40834220, 0x5681: 0x40834420, 0x5682: 0x40834620, 0x5683: 0x40834820, + 0x5684: 0x40834a20, 0x5685: 0x40834c20, 0x5686: 0x40834e20, 0x5687: 0x40835020, + 0x5688: 0x40835220, 0x5689: 0x40835420, 0x568a: 0x40835620, 0x568b: 0x40835820, + 0x568c: 0x40835a20, 0x568d: 0x40835c20, 0x568e: 0x40835e20, 0x568f: 0x40836020, + 0x5690: 0x40836220, 0x5691: 0x40836420, 0x5692: 0x40836620, 0x5693: 0x40836820, + 0x5694: 0x40836a20, 0x5695: 0x40836c20, 0x5696: 0x40836e20, 0x5697: 0x40837020, + 0x5698: 0x40837220, 0x5699: 0x40837420, 0x569a: 0x40837620, 0x569b: 0x40837820, + 0x569c: 0x40837a20, 0x569d: 0x40837c20, 0x569e: 0x40837e20, 0x569f: 0x40838020, + 0x56a0: 0x40838220, 0x56a1: 0x40838420, 0x56a2: 0x40838620, 0x56a3: 0x40838820, + 0x56a4: 0x40838a20, 0x56a5: 0x40838c20, 0x56a6: 0x40838e20, 0x56a7: 0x40839020, + 0x56a8: 0x40839220, 0x56a9: 0x40839420, 0x56aa: 0x40839620, 0x56ab: 0x40839820, + 0x56ac: 0x40839a20, 0x56ad: 0x40839c20, 0x56ae: 0x40839e20, 0x56af: 0x4083a020, + 0x56b0: 0x4083a220, 0x56b1: 0x4083a420, 0x56b2: 0x4083a620, 0x56b3: 0x4083a820, + 0x56b4: 0x4083aa20, 0x56b5: 0x4083ac20, 0x56b6: 0x4083ae20, 0x56b7: 0x4083b020, + 0x56b8: 0x4083b220, 0x56b9: 0x4083b420, 0x56ba: 0x4083b620, 0x56bb: 0x4083b820, + 0x56bc: 0x4083ba20, 0x56bd: 0x4083bc20, 0x56be: 0x4083be20, 0x56bf: 0x4083c020, + // Block 0x15b, offset 0x56c0 + 0x56c0: 0x4083c220, 0x56c1: 0x4083c420, 0x56c2: 0x4083c620, 0x56c3: 0x4083c820, + 0x56c4: 0x4083ca20, 0x56c5: 0x4083cc20, 0x56c6: 0x4083ce20, 0x56c7: 0x4083d020, + 0x56c8: 0x4083d220, 0x56c9: 0x4083d420, 0x56ca: 0x4083d620, 0x56cb: 0x4083d820, + 0x56cc: 0x4083da20, 0x56cd: 0x4083dc20, 0x56ce: 0x4083de20, 0x56cf: 0x4083e020, + 0x56d0: 0x4083e220, 0x56d1: 0x4083e420, 0x56d2: 0x4083e620, 0x56d3: 0x4083e820, + 0x56d4: 0x4083ea20, 0x56d5: 0x4083ec20, 0x56d6: 0x4083ee20, 0x56d7: 0x4083f020, + 0x56d8: 0x4083f220, 0x56d9: 0x4083f420, 0x56da: 0x4083f620, 0x56db: 0x4083f820, + 0x56dc: 0x4083fa20, 0x56dd: 0x4083fc20, 0x56de: 0x4083fe20, 0x56df: 0x40840020, + 0x56e0: 0x40840220, 0x56e1: 0x40840420, 0x56e2: 0x40840620, 0x56e3: 0x40840820, + 0x56e4: 0x40840a20, 0x56e5: 0x40840c20, 0x56e6: 0x40840e20, 0x56e7: 0x40841020, + 0x56e8: 0x40841220, 0x56e9: 0x40841420, 0x56ea: 0x40841620, 0x56eb: 0x40841820, + 0x56ec: 0x40841a20, 0x56ed: 0x40841c20, 0x56ee: 0x40841e20, 0x56ef: 0x40842020, + 0x56f0: 0x40842220, 0x56f1: 0x40842420, 0x56f2: 0x40842620, 0x56f3: 0x40842820, + 0x56f4: 0x40842a20, 0x56f5: 0x40842c20, 0x56f6: 0x40842e20, 0x56f7: 0x40843020, + 0x56f8: 0x40843220, 0x56f9: 0x40843420, 0x56fa: 0x40843620, 0x56fb: 0x40843820, + 0x56fc: 0x40843a20, 0x56fd: 0x40843c20, 0x56fe: 0x40843e20, 0x56ff: 0x40844020, + // Block 0x15c, offset 0x5700 + 0x5700: 0x40844220, 0x5701: 0x40844420, 0x5702: 0x40844620, 0x5703: 0x40844820, + 0x5704: 0x40844a20, 0x5705: 0x40844c20, 0x5706: 0x40844e20, 0x5707: 0x40845020, + 0x5708: 0x40845220, 0x5709: 0x40845420, 0x570a: 0x40845620, 0x570b: 0x40845820, + 0x570c: 0x40845a20, 0x570d: 0x40845c20, 0x570e: 0x40845e20, 0x570f: 0x40846020, + 0x5710: 0x40846220, 0x5711: 0x40846420, 0x5712: 0x40846620, 0x5713: 0x40846820, + 0x5714: 0x40846a20, 0x5715: 0x40846c20, 0x5716: 0x40846e20, 0x5717: 0x40847020, + 0x5718: 0x40847220, 0x5719: 0x40847420, 0x571a: 0x40847620, 0x571b: 0x40847820, + 0x571c: 0x40847a20, 0x571d: 0x40847c20, 0x571e: 0x40847e20, 0x571f: 0x40848020, + 0x5720: 0x40848220, 0x5721: 0x40848420, 0x5722: 0x40848620, 0x5723: 0x40848820, + 0x5724: 0x40848a20, 0x5725: 0x40848c20, 0x5726: 0x40848e20, 0x5727: 0x40849020, + 0x5728: 0x40849220, 0x5729: 0x40849420, 0x572a: 0x40849620, 0x572b: 0x40849820, + 0x572c: 0x40849a20, 0x572d: 0x40849c20, 0x572e: 0x40849e20, 0x572f: 0x4084a020, + 0x5730: 0x4084a220, 0x5731: 0x4084a420, 0x5732: 0x4084a620, 0x5733: 0x4084a820, + 0x5734: 0x4084aa20, 0x5735: 0x4084ac20, 0x5736: 0x4084ae20, 0x5737: 0x4084b020, + 0x5738: 0x4084b220, 0x5739: 0x4084b420, 0x573a: 0x4084b620, 0x573b: 0x4084b820, + 0x573c: 0x4084ba20, 0x573d: 0x4084bc20, 0x573e: 0x4084be20, 0x573f: 0x4084c020, + // Block 0x15d, offset 0x5740 + 0x5740: 0x4084c220, 0x5741: 0x4084c420, 0x5742: 0x4084c620, 0x5743: 0x4084c820, + 0x5744: 0x4084ca20, 0x5745: 0x4084cc20, 0x5746: 0x4084ce20, 0x5747: 0x4084d020, + 0x5748: 0x4084d220, 0x5749: 0x4084d420, 0x574a: 0x4084d620, 0x574b: 0x4084d820, + 0x574c: 0x4084da20, 0x574d: 0x4084dc20, 0x574e: 0x4084de20, 0x574f: 0x4084e020, + 0x5750: 0x4084e220, 0x5751: 0x4084e420, 0x5752: 0x4084e620, 0x5753: 0x4084e820, + 0x5754: 0x4084ea20, 0x5755: 0x4084ec20, 0x5756: 0x4084ee20, 0x5757: 0x4084f020, + 0x5758: 0x4084f220, 0x5759: 0x4084f420, 0x575a: 0x4084f620, 0x575b: 0x4084f820, + 0x575c: 0x4084fa20, 0x575d: 0x4084fc20, 0x575e: 0x4084fe20, 0x575f: 0x40850020, + 0x5760: 0x40850220, 0x5761: 0x40850420, 0x5762: 0x40850620, 0x5763: 0x40850820, + 0x5764: 0x40850a20, 0x5765: 0x40850c20, 0x5766: 0x40850e20, 0x5767: 0x40851020, + 0x5768: 0x40851220, 0x5769: 0x40851420, 0x576a: 0x40851620, 0x576b: 0x40851820, + 0x576c: 0x40851a20, 0x576d: 0x40851c20, 0x576e: 0x40851e20, 0x576f: 0x40852020, + 0x5770: 0x40852220, 0x5771: 0x40852420, 0x5772: 0x40852620, 0x5773: 0x40852820, + 0x5774: 0x40852a20, 0x5775: 0x40852c20, 0x5776: 0x40852e20, 0x5777: 0x40853020, + 0x5778: 0x40853220, 0x5779: 0x40853420, 0x577a: 0x40853620, 0x577b: 0x40853820, + 0x577c: 0x40853a20, 0x577d: 0x40853c20, 0x577e: 0x40853e20, 0x577f: 0x40854020, + // Block 0x15e, offset 0x5780 + 0x5780: 0x40854220, 0x5781: 0x40854420, 0x5782: 0x40854620, 0x5783: 0x40854820, + 0x5784: 0x40854a20, 0x5785: 0x40854c20, 0x5786: 0x40854e20, 0x5787: 0x40855020, + 0x5788: 0x40855220, 0x5789: 0x40855420, 0x578a: 0x40855620, 0x578b: 0x40855820, + 0x578c: 0x40855a20, 0x578d: 0x40855c20, 0x578e: 0x40855e20, 0x578f: 0x40856020, + 0x5790: 0x40856220, 0x5791: 0x40856420, 0x5792: 0x40856620, 0x5793: 0x40856820, + 0x5794: 0x40856a20, 0x5795: 0x40856c20, 0x5796: 0x40856e20, 0x5797: 0x40857020, + 0x5798: 0x40857220, 0x5799: 0x40857420, 0x579a: 0x40857620, 0x579b: 0x40857820, + 0x579c: 0x40857a20, 0x579d: 0x40857c20, 0x579e: 0x40857e20, 0x579f: 0x40858020, + 0x57a0: 0x40858220, 0x57a1: 0x40858420, 0x57a2: 0x40858620, 0x57a3: 0x40858820, + 0x57a4: 0x40858a20, 0x57a5: 0x40858c20, 0x57a6: 0x40858e20, 0x57a7: 0x40859020, + 0x57a8: 0x40859220, 0x57a9: 0x40859420, 0x57aa: 0x40859620, 0x57ab: 0x40859820, + 0x57ac: 0x40859a20, 0x57ad: 0x40859c20, 0x57ae: 0x40859e20, 0x57af: 0x4085a020, + 0x57b0: 0x4085a220, 0x57b1: 0x4085a420, 0x57b2: 0x4085a620, 0x57b3: 0x4085a820, + 0x57b4: 0x4085aa20, 0x57b5: 0x4085ac20, 0x57b6: 0x4085ae20, 0x57b7: 0x4085b020, + 0x57b8: 0x4085b220, 0x57b9: 0x4085b420, 0x57ba: 0x4085b620, 0x57bb: 0x4085b820, + 0x57bc: 0x4085ba20, 0x57bd: 0x4085bc20, 0x57be: 0x4085be20, 0x57bf: 0x4085c020, + // Block 0x15f, offset 0x57c0 + 0x57c0: 0x4085c220, 0x57c1: 0x4085c420, 0x57c2: 0x4085c620, 0x57c3: 0x4085c820, + 0x57c4: 0x4085ca20, 0x57c5: 0x4085cc20, 0x57c6: 0x4085ce20, 0x57c7: 0x4085d020, + 0x57c8: 0x4085d220, 0x57c9: 0x4085d420, 0x57ca: 0x4085d620, 0x57cb: 0x4085d820, + 0x57cc: 0x4085da20, 0x57cd: 0x4085dc20, 0x57ce: 0x4085de20, 0x57cf: 0x4085e020, + 0x57d0: 0x4085e220, 0x57d1: 0x4085e420, 0x57d2: 0x4085e620, 0x57d3: 0x4085e820, + 0x57d4: 0x4085ea20, 0x57d5: 0x4085ec20, 0x57d6: 0x4085ee20, 0x57d7: 0x4085f020, + 0x57d8: 0x4085f220, 0x57d9: 0x4085f420, 0x57da: 0x4085f620, 0x57db: 0x4085f820, + 0x57dc: 0x4085fa20, 0x57dd: 0x4085fc20, 0x57de: 0x4085fe20, 0x57df: 0x40860020, + 0x57e0: 0x40860220, 0x57e1: 0x40860420, 0x57e2: 0x40860620, 0x57e3: 0x40860820, + 0x57e4: 0x40860a20, 0x57e5: 0x40860c20, 0x57e6: 0x40860e20, 0x57e7: 0x40861020, + 0x57e8: 0x40861220, 0x57e9: 0x40861420, 0x57ea: 0x40861620, 0x57eb: 0x40861820, + 0x57ec: 0x40861a20, 0x57ed: 0x40861c20, 0x57ee: 0x40861e20, + // Block 0x160, offset 0x5800 + 0x5800: 0x405e3a20, 0x5801: 0x405e3c20, 0x5802: 0x405e3e20, 0x5803: 0x405e4020, + 0x5804: 0x405e4220, 0x5805: 0x405e4420, 0x5806: 0x405e4620, 0x5807: 0x405e4820, + 0x5808: 0x405e4a20, 0x5809: 0x405e4c20, 0x580a: 0x405e4e20, 0x580b: 0x405e5020, + 0x580c: 0x405e5220, 0x580d: 0x405e5420, 0x580e: 0x405e5620, 0x580f: 0x405e5820, + 0x5810: 0x405e5a20, 0x5811: 0x405e5c20, 0x5812: 0x405e5e20, 0x5813: 0x405e6020, + 0x5814: 0x405e6220, 0x5815: 0x405e6420, 0x5816: 0x405e6620, 0x5817: 0x405e6820, + 0x5818: 0x405e6a20, 0x5819: 0x405e6c20, 0x581a: 0x405e6e20, 0x581b: 0x405e7020, + 0x581c: 0x405e7220, 0x581d: 0x405e7420, 0x581e: 0x405e7620, 0x581f: 0x405e7820, + 0x5820: 0x405e7a20, 0x5821: 0x405e7c20, 0x5822: 0x405e7e20, 0x5823: 0x405e8020, + 0x5824: 0x405e8220, 0x5825: 0x405e8420, 0x5826: 0x405e8620, 0x5827: 0x405e8820, + 0x5828: 0x405e8a20, 0x5829: 0x405e8c20, 0x582a: 0x405e8e20, 0x582b: 0x405e9020, + 0x582c: 0x405e9220, 0x582d: 0x405e9420, 0x582e: 0x405e9620, 0x582f: 0x405e9820, + 0x5830: 0x405e9a20, 0x5831: 0x405e9c20, 0x5832: 0x405e9e20, 0x5833: 0x405ea020, + 0x5834: 0x405ea220, 0x5835: 0x405ea420, 0x5836: 0x405ea620, 0x5837: 0x405ea820, + 0x5838: 0x405eaa20, 0x5839: 0x405eac20, 0x583a: 0x405eae20, 0x583b: 0x405eb020, + 0x583c: 0x405eb220, 0x583d: 0x405eb420, 0x583e: 0x405eb620, 0x583f: 0x405eb820, + // Block 0x161, offset 0x5840 + 0x5840: 0x405eba20, 0x5841: 0x405ebc20, 0x5842: 0x405ebe20, 0x5843: 0x405ec020, + 0x5844: 0x405ec220, 0x5845: 0x405ec420, 0x5846: 0x405ec620, 0x5847: 0x405ec820, + 0x5848: 0x405eca20, 0x5849: 0x405ecc20, 0x584a: 0x405ece20, 0x584b: 0x405ed020, + 0x584c: 0x405ed220, 0x584d: 0x405ed420, 0x584e: 0x405ed620, 0x584f: 0x405ed820, + 0x5850: 0x405eda20, 0x5851: 0x405edc20, 0x5852: 0x405ede20, 0x5853: 0x405ee020, + 0x5854: 0x405ee220, 0x5855: 0x405ee420, 0x5856: 0x405ee620, 0x5857: 0x405ee820, + 0x5858: 0x405eea20, 0x5859: 0x405eec20, 0x585a: 0x405eee20, 0x585b: 0x405ef020, + 0x585c: 0x405ef220, 0x585d: 0x405ef420, 0x585e: 0x405ef620, 0x585f: 0x405ef820, + 0x5860: 0x405efa20, 0x5861: 0x405efc20, 0x5862: 0x405efe20, 0x5863: 0x405f0020, + 0x5864: 0x405f0220, 0x5865: 0x405f0420, 0x5866: 0x405f0620, 0x5867: 0x405f0820, + 0x5868: 0x405f0a20, 0x5869: 0x405f0c20, 0x586a: 0x405f0e20, 0x586b: 0x405f1020, + 0x586c: 0x405f1220, 0x586d: 0x405f1420, 0x586e: 0x405f1620, 0x586f: 0x405f1820, + 0x5870: 0x405f1a20, 0x5871: 0x405f1c20, 0x5872: 0x405f1e20, 0x5873: 0x405f2020, + 0x5874: 0x405f2220, 0x5875: 0x405f2420, 0x5876: 0x405f2620, 0x5877: 0x405f2820, + 0x5878: 0x405f2a20, 0x5879: 0x405f2c20, 0x587a: 0x405f2e20, 0x587b: 0x405f3020, + 0x587c: 0x405f3220, 0x587d: 0x405f3420, 0x587e: 0x405f3620, 0x587f: 0x405f3820, + // Block 0x162, offset 0x5880 + 0x5880: 0x405f3a20, 0x5881: 0x405f3c20, 0x5882: 0x405f3e20, 0x5883: 0x405f4020, + 0x5884: 0x405f4220, 0x5885: 0x405f4420, 0x5886: 0x405f4620, 0x5887: 0x405f4820, + 0x5888: 0x405f4a20, 0x5889: 0x405f4c20, 0x588a: 0x405f4e20, 0x588b: 0x405f5020, + 0x588c: 0x405f5220, 0x588d: 0x405f5420, 0x588e: 0x405f5620, 0x588f: 0x405f5820, + 0x5890: 0x405f5a20, 0x5891: 0x405f5c20, 0x5892: 0x405f5e20, 0x5893: 0x405f6020, + 0x5894: 0x405f6220, 0x5895: 0x405f6420, 0x5896: 0x405f6620, 0x5897: 0x405f6820, + 0x5898: 0x405f6a20, 0x5899: 0x405f6c20, 0x589a: 0x405f6e20, 0x589b: 0x405f7020, + 0x589c: 0x405f7220, 0x589d: 0x405f7420, 0x589e: 0x405f7620, 0x589f: 0x405f7820, + 0x58a0: 0x405f7a20, 0x58a1: 0x405f7c20, 0x58a2: 0x405f7e20, 0x58a3: 0x405f8020, + 0x58a4: 0x405f8220, 0x58a5: 0x405f8420, 0x58a6: 0x405f8620, 0x58a7: 0x405f8820, + 0x58a8: 0x405f8a20, 0x58a9: 0x405f8c20, 0x58aa: 0x405f8e20, 0x58ab: 0x405f9020, + 0x58ac: 0x405f9220, 0x58ad: 0x405f9420, 0x58ae: 0x405f9620, 0x58af: 0x405f9820, + 0x58b0: 0x405f9a20, 0x58b1: 0x405f9c20, 0x58b2: 0x405f9e20, 0x58b3: 0x405fa020, + 0x58b4: 0x405fa220, 0x58b5: 0x405fa420, 0x58b6: 0x405fa620, 0x58b7: 0x405fa820, + 0x58b8: 0x405faa20, 0x58b9: 0x405fac20, 0x58ba: 0x405fae20, 0x58bb: 0x405fb020, + 0x58bc: 0x405fb220, 0x58bd: 0x405fb420, 0x58be: 0x405fb620, 0x58bf: 0x405fb820, + // Block 0x163, offset 0x58c0 + 0x58c0: 0x405fba20, 0x58c1: 0x405fbc20, 0x58c2: 0x405fbe20, 0x58c3: 0x405fc020, + 0x58c4: 0x405fc220, 0x58c5: 0x405fc420, 0x58c6: 0x405fc620, 0x58c7: 0x405fc820, + 0x58c8: 0x405fca20, 0x58c9: 0x405fcc20, 0x58ca: 0x405fce20, 0x58cb: 0x405fd020, + 0x58cc: 0x405fd220, 0x58cd: 0x405fd420, 0x58ce: 0x405fd620, 0x58cf: 0x405fd820, + 0x58d0: 0x405fda20, 0x58d1: 0x405fdc20, 0x58d2: 0x405fde20, 0x58d3: 0x405fe020, + 0x58d4: 0x405fe220, 0x58d5: 0x405fe420, 0x58d6: 0x405fe620, 0x58d7: 0x405fe820, + 0x58d8: 0x405fea20, 0x58d9: 0x405fec20, 0x58da: 0x405fee20, 0x58db: 0x405ff020, + 0x58dc: 0x405ff220, 0x58dd: 0x405ff420, 0x58de: 0x405ff620, 0x58df: 0x405ff820, + 0x58e0: 0x405ffa20, 0x58e1: 0x405ffc20, 0x58e2: 0x405ffe20, 0x58e3: 0x40600020, + 0x58e4: 0x40600220, 0x58e5: 0x40600420, 0x58e6: 0x40600620, 0x58e7: 0x40600820, + 0x58e8: 0x40600a20, 0x58e9: 0x40600c20, 0x58ea: 0x40600e20, 0x58eb: 0x40601020, + 0x58ec: 0x40601220, 0x58ed: 0x40601420, 0x58ee: 0x40601620, 0x58ef: 0x40601820, + 0x58f0: 0x40601a20, 0x58f1: 0x40601c20, 0x58f2: 0x40601e20, 0x58f3: 0x40602020, + 0x58f4: 0x40602220, 0x58f5: 0x40602420, 0x58f6: 0x40602620, 0x58f7: 0x40602820, + 0x58f8: 0x40602a20, 0x58f9: 0x40602c20, 0x58fa: 0x40602e20, 0x58fb: 0x40603020, + 0x58fc: 0x40603220, 0x58fd: 0x40603420, 0x58fe: 0x40603620, 0x58ff: 0x40603820, + // Block 0x164, offset 0x5900 + 0x5900: 0x40603a20, 0x5901: 0x40603c20, 0x5902: 0x40603e20, 0x5903: 0x40604020, + 0x5904: 0x40604220, 0x5905: 0x40604420, 0x5906: 0x40604620, 0x5907: 0x40604820, + 0x5908: 0x40604a20, 0x5909: 0x40604c20, 0x590a: 0x40604e20, 0x590b: 0x40605020, + 0x590c: 0x40605220, 0x590d: 0x40605420, 0x590e: 0x40605620, 0x590f: 0x40605820, + 0x5910: 0x40605a20, 0x5911: 0x40605c20, 0x5912: 0x40605e20, 0x5913: 0x40606020, + 0x5914: 0x40606220, 0x5915: 0x40606420, 0x5916: 0x40606620, 0x5917: 0x40606820, + 0x5918: 0x40606a20, 0x5919: 0x40606c20, 0x591a: 0x40606e20, 0x591b: 0x40607020, + 0x591c: 0x40607220, 0x591d: 0x40607420, 0x591e: 0x40607620, 0x591f: 0x40607820, + 0x5920: 0x40607a20, 0x5921: 0x40607c20, 0x5922: 0x40607e20, 0x5923: 0x40608020, + 0x5924: 0x40608220, 0x5925: 0x40608420, 0x5926: 0x40608620, 0x5927: 0x40608820, + 0x5928: 0x40608a20, 0x5929: 0x40608c20, 0x592a: 0x40608e20, 0x592b: 0x40609020, + 0x592c: 0x40609220, 0x592d: 0x40609420, 0x592e: 0x40609620, 0x592f: 0x40609820, + 0x5930: 0x40609a20, 0x5931: 0x40609c20, 0x5932: 0x40609e20, 0x5933: 0x4060a020, + 0x5934: 0x4060a220, 0x5935: 0x4060a420, 0x5936: 0x4060a620, 0x5937: 0x4060a820, + 0x5938: 0x4060aa20, 0x5939: 0x4060ac20, 0x593a: 0x4060ae20, 0x593b: 0x4060b020, + 0x593c: 0x4060b220, 0x593d: 0x4060b420, 0x593e: 0x4060b620, 0x593f: 0x4060b820, + // Block 0x165, offset 0x5940 + 0x5940: 0x4060ba20, 0x5941: 0x4060bc20, 0x5942: 0x4060be20, 0x5943: 0x4060c020, + 0x5944: 0x4060c220, 0x5945: 0x4060c420, 0x5946: 0x4060c620, 0x5947: 0x4060c820, + 0x5948: 0x4060ca20, 0x5949: 0x4060cc20, 0x594a: 0x4060ce20, 0x594b: 0x4060d020, + 0x594c: 0x4060d220, 0x594d: 0x4060d420, 0x594e: 0x4060d620, 0x594f: 0x4060d820, + 0x5950: 0x4060da20, 0x5951: 0x4060dc20, 0x5952: 0x4060de20, 0x5953: 0x4060e020, + 0x5954: 0x4060e220, 0x5955: 0x4060e420, 0x5956: 0x4060e620, 0x5957: 0x4060e820, + 0x5958: 0x4060ea20, 0x5959: 0x4060ec20, 0x595a: 0x4060ee20, 0x595b: 0x4060f020, + 0x595c: 0x4060f220, 0x595d: 0x4060f420, 0x595e: 0x4060f620, 0x595f: 0x4060f820, + 0x5960: 0x4060fa20, 0x5961: 0x4060fc20, 0x5962: 0x4060fe20, 0x5963: 0x40610020, + 0x5964: 0x40610220, 0x5965: 0x40610420, 0x5966: 0x40610620, 0x5967: 0x40610820, + 0x5968: 0x40610a20, 0x5969: 0x40610c20, 0x596a: 0x40610e20, 0x596b: 0x40611020, + 0x596c: 0x40611220, 0x596d: 0x40611420, 0x596e: 0x40611620, 0x596f: 0x40611820, + 0x5970: 0x40611a20, 0x5971: 0x40611c20, 0x5972: 0x40611e20, 0x5973: 0x40612020, + 0x5974: 0x40612220, 0x5975: 0x40612420, 0x5976: 0x40612620, 0x5977: 0x40612820, + 0x5978: 0x40612a20, 0x5979: 0x40612c20, 0x597a: 0x40612e20, 0x597b: 0x40613020, + 0x597c: 0x40613220, 0x597d: 0x40613420, 0x597e: 0x40613620, 0x597f: 0x40613820, + // Block 0x166, offset 0x5980 + 0x5980: 0x40613a20, 0x5981: 0x40613c20, 0x5982: 0x40613e20, 0x5983: 0x40614020, + 0x5984: 0x40614220, 0x5985: 0x40614420, 0x5986: 0x40614620, 0x5987: 0x40614820, + 0x5988: 0x40614a20, 0x5989: 0x40614c20, 0x598a: 0x40614e20, 0x598b: 0x40615020, + 0x598c: 0x40615220, 0x598d: 0x40615420, 0x598e: 0x40615620, 0x598f: 0x40615820, + 0x5990: 0x40615a20, 0x5991: 0x40615c20, 0x5992: 0x40615e20, 0x5993: 0x40616020, + 0x5994: 0x40616220, 0x5995: 0x40616420, 0x5996: 0x40616620, 0x5997: 0x40616820, + 0x5998: 0x40616a20, 0x5999: 0x40616c20, 0x599a: 0x40616e20, 0x599b: 0x40617020, + 0x599c: 0x40617220, 0x599d: 0x40617420, 0x599e: 0x40617620, 0x599f: 0x40617820, + 0x59a0: 0x40617a20, 0x59a1: 0x40617c20, 0x59a2: 0x40617e20, 0x59a3: 0x40618020, + 0x59a4: 0x40618220, 0x59a5: 0x40618420, 0x59a6: 0x40618620, 0x59a7: 0x40618820, + 0x59a8: 0x40618a20, 0x59a9: 0x40618c20, 0x59aa: 0x40618e20, 0x59ab: 0x40619020, + 0x59ac: 0x40619220, 0x59ad: 0x40619420, 0x59ae: 0x40619620, 0x59af: 0x40619820, + 0x59b0: 0x40619a20, 0x59b1: 0x40619c20, 0x59b2: 0x40619e20, 0x59b3: 0x4061a020, + 0x59b4: 0x4061a220, 0x59b5: 0x4061a420, 0x59b6: 0x4061a620, 0x59b7: 0x4061a820, + 0x59b8: 0x4061aa20, 0x59b9: 0x4061ac20, 0x59ba: 0x4061ae20, 0x59bb: 0x4061b020, + 0x59bc: 0x4061b220, 0x59bd: 0x4061b420, 0x59be: 0x4061b620, 0x59bf: 0x4061b820, + // Block 0x167, offset 0x59c0 + 0x59c0: 0x4061ba20, 0x59c1: 0x4061bc20, 0x59c2: 0x4061be20, 0x59c3: 0x4061c020, + 0x59c4: 0x4061c220, 0x59c5: 0x4061c420, 0x59c6: 0x4061c620, 0x59c7: 0x4061c820, + 0x59c8: 0x4061ca20, 0x59c9: 0x4061cc20, 0x59ca: 0x4061ce20, 0x59cb: 0x4061d020, + 0x59cc: 0x4061d220, 0x59cd: 0x4061d420, 0x59ce: 0x4061d620, 0x59cf: 0x4061d820, + 0x59d0: 0x4061da20, 0x59d1: 0x4061dc20, 0x59d2: 0x4061de20, 0x59d3: 0x4061e020, + 0x59d4: 0x4061e220, 0x59d5: 0x4061e420, 0x59d6: 0x4061e620, 0x59d7: 0x4061e820, + 0x59d8: 0x4061ea20, 0x59d9: 0x4061ec20, 0x59da: 0x4061ee20, 0x59db: 0x4061f020, + 0x59dc: 0x4061f220, 0x59dd: 0x4061f420, 0x59de: 0x4061f620, 0x59df: 0x4061f820, + 0x59e0: 0x4061fa20, 0x59e1: 0x4061fc20, 0x59e2: 0x4061fe20, 0x59e3: 0x40620020, + 0x59e4: 0x40620220, 0x59e5: 0x40620420, 0x59e6: 0x40620620, 0x59e7: 0x40620820, + 0x59e8: 0x40620a20, 0x59e9: 0x40620c20, 0x59ea: 0x40620e20, 0x59eb: 0x40621020, + 0x59ec: 0x40621220, 0x59ed: 0x40621420, 0x59ee: 0x40621620, 0x59ef: 0x40621820, + 0x59f0: 0x40621a20, 0x59f1: 0x40621c20, 0x59f2: 0x40621e20, 0x59f3: 0x40622020, + 0x59f4: 0x40622220, 0x59f5: 0x40622420, 0x59f6: 0x40622620, 0x59f7: 0x40622820, + 0x59f8: 0x40622a20, 0x59f9: 0x40622c20, 0x59fa: 0x40622e20, 0x59fb: 0x40623020, + 0x59fc: 0x40623220, 0x59fd: 0x40623420, 0x59fe: 0x40623620, 0x59ff: 0x40623820, + // Block 0x168, offset 0x5a00 + 0x5a00: 0x40623a20, 0x5a01: 0x40623c20, 0x5a02: 0x40623e20, 0x5a03: 0x40624020, + 0x5a04: 0x40624220, 0x5a05: 0x40624420, 0x5a06: 0x40624620, 0x5a07: 0x40624820, + 0x5a08: 0x40624a20, 0x5a09: 0x40624c20, 0x5a0a: 0x40624e20, 0x5a0b: 0x40625020, + 0x5a0c: 0x40625220, 0x5a0d: 0x40625420, 0x5a0e: 0x40625620, 0x5a0f: 0x40625820, + 0x5a10: 0x40625a20, 0x5a11: 0x40625c20, 0x5a12: 0x40625e20, 0x5a13: 0x40626020, + 0x5a14: 0x40626220, 0x5a15: 0x40626420, 0x5a16: 0x40626620, 0x5a17: 0x40626820, + 0x5a18: 0x40626a20, 0x5a19: 0x40626c20, 0x5a1a: 0x40626e20, 0x5a1b: 0x40627020, + 0x5a1c: 0x40627220, 0x5a1d: 0x40627420, 0x5a1e: 0x40627620, 0x5a1f: 0x40627820, + 0x5a20: 0x40627a20, 0x5a21: 0x40627c20, 0x5a22: 0x40627e20, 0x5a23: 0x40628020, + 0x5a24: 0x40628220, 0x5a25: 0x40628420, 0x5a26: 0x40628620, 0x5a27: 0x40628820, + 0x5a28: 0x40628a20, 0x5a29: 0x40628c20, 0x5a2a: 0x40628e20, 0x5a2b: 0x40629020, + 0x5a2c: 0x40629220, 0x5a2d: 0x40629420, 0x5a2e: 0x40629620, 0x5a2f: 0x40629820, + 0x5a30: 0x40629a20, 0x5a31: 0x40629c20, 0x5a32: 0x40629e20, 0x5a33: 0x4062a020, + 0x5a34: 0x4062a220, 0x5a35: 0x4062a420, 0x5a36: 0x4062a620, 0x5a37: 0x4062a820, + 0x5a38: 0x4062aa20, + // Block 0x169, offset 0x5a40 + 0x5a40: 0x406fb620, 0x5a41: 0x406fb820, 0x5a42: 0x406fba20, 0x5a43: 0x406fbc20, + 0x5a44: 0x406fbe20, 0x5a45: 0x406fc020, 0x5a46: 0x006fbe84, 0x5a47: 0x406fc220, + 0x5a48: 0x406fc420, 0x5a49: 0x406fc620, 0x5a4a: 0x406fc820, 0x5a4b: 0x406fca20, + 0x5a4c: 0x406fcc20, 0x5a4d: 0x406fce20, 0x5a4e: 0x406fd020, 0x5a4f: 0x406fd220, + 0x5a50: 0x406fd420, 0x5a51: 0x406fd620, 0x5a52: 0x406fd820, 0x5a53: 0x006fd484, + 0x5a54: 0x406fda20, 0x5a55: 0x406fdc20, 0x5a56: 0x406fde20, 0x5a57: 0x406fe020, + 0x5a58: 0x406fe220, 0x5a59: 0x406fe420, 0x5a5a: 0x406fe620, 0x5a5b: 0x406fe820, + 0x5a5c: 0x406fea20, 0x5a5d: 0x406fec20, 0x5a5e: 0x406fee20, 0x5a5f: 0x406ff020, + 0x5a60: 0x406ff220, 0x5a61: 0x406ff420, 0x5a62: 0x406ff620, 0x5a63: 0x406ff820, + 0x5a64: 0x406ffa20, 0x5a65: 0x006ff884, 0x5a66: 0x406ffc20, 0x5a67: 0x406ffe20, + 0x5a68: 0x40700020, 0x5a69: 0x40700220, 0x5a6a: 0x40700420, 0x5a6b: 0x40700620, + 0x5a6c: 0x40700820, 0x5a6d: 0x40700a20, 0x5a6e: 0x40700c20, 0x5a6f: 0x40700e20, + 0x5a70: 0x40701020, 0x5a71: 0x40701220, 0x5a72: 0x40701420, 0x5a73: 0x40701620, + 0x5a74: 0x40701820, 0x5a75: 0x40701a20, 0x5a76: 0x40701c20, 0x5a77: 0x40701e20, + 0x5a78: 0x40702020, 0x5a79: 0x40702220, 0x5a7a: 0x40702420, 0x5a7b: 0x40702620, + 0x5a7c: 0x40702820, 0x5a7d: 0x40702a20, 0x5a7e: 0x40702c20, 0x5a7f: 0x00702a84, + // Block 0x16a, offset 0x5a80 + 0x5a80: 0x40702e20, 0x5a81: 0x40703020, 0x5a82: 0x40703220, 0x5a83: 0x40703420, + 0x5a84: 0x40703620, + 0x5a90: 0x40703820, 0x5a91: 0x40703a20, 0x5a92: 0x40703c20, 0x5a93: 0x40703e20, + 0x5a94: 0x40704020, 0x5a95: 0x40704220, 0x5a96: 0x40704420, 0x5a97: 0x40704620, + 0x5a98: 0x40704820, 0x5a99: 0x40704a20, 0x5a9a: 0x40704c20, 0x5a9b: 0x40704e20, + 0x5a9c: 0x40705020, 0x5a9d: 0x40705220, 0x5a9e: 0x40705420, 0x5a9f: 0x40705620, + 0x5aa0: 0x40705820, 0x5aa1: 0x40705a20, 0x5aa2: 0x40705c20, 0x5aa3: 0x40705e20, + 0x5aa4: 0x40706020, 0x5aa5: 0x40706220, 0x5aa6: 0x40706420, 0x5aa7: 0x40706620, + 0x5aa8: 0x40706820, 0x5aa9: 0x40706a20, 0x5aaa: 0x40706c20, 0x5aab: 0x40706e20, + 0x5aac: 0x40707020, 0x5aad: 0x40707220, 0x5aae: 0x40707420, 0x5aaf: 0x40707620, + 0x5ab0: 0x40707820, 0x5ab1: 0x40707a20, 0x5ab2: 0x40707c20, 0x5ab3: 0x40707e20, + 0x5ab4: 0x40708020, 0x5ab5: 0x40708220, 0x5ab6: 0x40708420, 0x5ab7: 0x40708620, + 0x5ab8: 0x40708820, 0x5ab9: 0x40708a20, 0x5aba: 0x40708c20, 0x5abb: 0x40708e20, + 0x5abc: 0x40709020, 0x5abd: 0x40709220, 0x5abe: 0x40709420, + // Block 0x16b, offset 0x5ac0 + 0x5acf: 0x40709620, + 0x5ad0: 0x40709820, 0x5ad1: 0x40709a20, 0x5ad2: 0x40709c20, 0x5ad3: 0x40709e20, + 0x5ad4: 0x4070a020, 0x5ad5: 0x4070a220, 0x5ad6: 0x4070a420, 0x5ad7: 0x4070a620, + 0x5ad8: 0x4070a820, 0x5ad9: 0x4070aa20, 0x5ada: 0x4070ac20, 0x5adb: 0x4070ae20, + 0x5adc: 0x4070b020, 0x5add: 0x4070b220, 0x5ade: 0x4070b420, 0x5adf: 0x4070b620, + // Block 0x16c, offset 0x5b00 + 0x5b00: 0x00657c91, 0x5b01: 0x0065c28e, + // Block 0x16d, offset 0x5b40 + 0x5b40: 0x401ba420, 0x5b41: 0x401ba620, 0x5b42: 0x401ba820, 0x5b43: 0x401baa20, + 0x5b44: 0x401bac20, 0x5b45: 0x401bae20, 0x5b46: 0x401bb020, 0x5b47: 0x401bb220, + 0x5b48: 0x401bb420, 0x5b49: 0x401bb620, 0x5b4a: 0x401bb820, 0x5b4b: 0x401bba20, + 0x5b4c: 0x401bbc20, 0x5b4d: 0x401bbe20, 0x5b4e: 0x401bc020, 0x5b4f: 0x401bc220, + 0x5b50: 0x401bc420, 0x5b51: 0x401bc620, 0x5b52: 0x401bc820, 0x5b53: 0x401bca20, + 0x5b54: 0x401bcc20, 0x5b55: 0x401bce20, 0x5b56: 0x401bd020, 0x5b57: 0x401bd220, + 0x5b58: 0x401bd420, 0x5b59: 0x401bd620, 0x5b5a: 0x401bd820, 0x5b5b: 0x401bda20, + 0x5b5c: 0x401bdc20, 0x5b5d: 0x401bde20, 0x5b5e: 0x401be020, 0x5b5f: 0x401be220, + 0x5b60: 0x401be420, 0x5b61: 0x401be620, 0x5b62: 0x401be820, 0x5b63: 0x401bea20, + 0x5b64: 0x401bec20, 0x5b65: 0x401bee20, 0x5b66: 0x401bf020, 0x5b67: 0x401bf220, + 0x5b68: 0x401bf420, 0x5b69: 0x401bf620, 0x5b6a: 0x401bf820, 0x5b6b: 0x401bfa20, + 0x5b6c: 0x401bfc20, 0x5b6d: 0x401bfe20, 0x5b6e: 0x401c0020, 0x5b6f: 0x401c0220, + 0x5b70: 0x401c0420, 0x5b71: 0x401c0620, 0x5b72: 0x401c0820, 0x5b73: 0x401c0a20, + 0x5b74: 0x401c0c20, 0x5b75: 0x401c0e20, 0x5b76: 0x401c1020, 0x5b77: 0x401c1220, + 0x5b78: 0x401c1420, 0x5b79: 0x401c1620, 0x5b7a: 0x401c1820, 0x5b7b: 0x401c1a20, + 0x5b7c: 0x401c1c20, 0x5b7d: 0x401c1e20, 0x5b7e: 0x401c2020, 0x5b7f: 0x401c2220, + // Block 0x16e, offset 0x5b80 + 0x5b80: 0x401c2420, 0x5b81: 0x401c2620, 0x5b82: 0x401c2820, 0x5b83: 0x401c2a20, + 0x5b84: 0x401c2c20, 0x5b85: 0x401c2e20, 0x5b86: 0x401c3020, 0x5b87: 0x401c3220, + 0x5b88: 0x401c3420, 0x5b89: 0x401c3620, 0x5b8a: 0x401c3820, 0x5b8b: 0x401c3a20, + 0x5b8c: 0x401c3c20, 0x5b8d: 0x401c3e20, 0x5b8e: 0x401c4020, 0x5b8f: 0x401c4220, + 0x5b90: 0x401c4420, 0x5b91: 0x401c4620, 0x5b92: 0x401c4820, 0x5b93: 0x401c4a20, + 0x5b94: 0x401c4c20, 0x5b95: 0x401c4e20, 0x5b96: 0x401c5020, 0x5b97: 0x401c5220, + 0x5b98: 0x401c5420, 0x5b99: 0x401c5620, 0x5b9a: 0x401c5820, 0x5b9b: 0x401c5a20, + 0x5b9c: 0x401c5c20, 0x5b9d: 0x401c5e20, 0x5b9e: 0x401c6020, 0x5b9f: 0x401c6220, + 0x5ba0: 0x401c6420, 0x5ba1: 0x401c6620, 0x5ba2: 0x401c6820, 0x5ba3: 0x401c6a20, + 0x5ba4: 0x401c6c20, 0x5ba5: 0x401c6e20, 0x5ba6: 0x401c7020, 0x5ba7: 0x401c7220, + 0x5ba8: 0x401c7420, 0x5ba9: 0x401c7620, 0x5baa: 0x401c7820, 0x5bab: 0x401c7a20, + 0x5bac: 0x401c7c20, 0x5bad: 0x401c7e20, 0x5bae: 0x401c8020, 0x5baf: 0x401c8220, + 0x5bb0: 0x401c8420, 0x5bb1: 0x401c8620, 0x5bb2: 0x401c8820, 0x5bb3: 0x401c8a20, + 0x5bb4: 0x401c8c20, 0x5bb5: 0x401c8e20, 0x5bb6: 0x401c9020, 0x5bb7: 0x401c9220, + 0x5bb8: 0x401c9420, 0x5bb9: 0x401c9620, 0x5bba: 0x401c9820, 0x5bbb: 0x401c9a20, + 0x5bbc: 0x401c9c20, 0x5bbd: 0x401c9e20, 0x5bbe: 0x401ca020, 0x5bbf: 0x401ca220, + // Block 0x16f, offset 0x5bc0 + 0x5bc0: 0x401ca420, 0x5bc1: 0x401ca620, 0x5bc2: 0x401ca820, 0x5bc3: 0x401caa20, + 0x5bc4: 0x401cac20, 0x5bc5: 0x401cae20, 0x5bc6: 0x401cb020, 0x5bc7: 0x401cb220, + 0x5bc8: 0x401cb420, 0x5bc9: 0x401cb620, 0x5bca: 0x401cb820, 0x5bcb: 0x401cba20, + 0x5bcc: 0x401cbc20, 0x5bcd: 0x401cbe20, 0x5bce: 0x401cc020, 0x5bcf: 0x401cc220, + 0x5bd0: 0x401cc420, 0x5bd1: 0x401cc620, 0x5bd2: 0x401cc820, 0x5bd3: 0x401cca20, + 0x5bd4: 0x401ccc20, 0x5bd5: 0x401cce20, 0x5bd6: 0x401cd020, 0x5bd7: 0x401cd220, + 0x5bd8: 0x401cd420, 0x5bd9: 0x401cd620, 0x5bda: 0x401cd820, 0x5bdb: 0x401cda20, + 0x5bdc: 0x401cdc20, 0x5bdd: 0x401cde20, 0x5bde: 0x401ce020, 0x5bdf: 0x401ce220, + 0x5be0: 0x401ce420, 0x5be1: 0x401ce620, 0x5be2: 0x401ce820, 0x5be3: 0x401cea20, + 0x5be4: 0x401cec20, 0x5be5: 0x401cee20, 0x5be6: 0x401cf020, 0x5be7: 0x401cf220, + 0x5be8: 0x401cf420, 0x5be9: 0x401cf620, 0x5bea: 0x401cf820, 0x5beb: 0x401cfa20, + 0x5bec: 0x401cfc20, 0x5bed: 0x401cfe20, 0x5bee: 0x401d0020, 0x5bef: 0x401d0220, + 0x5bf0: 0x401d0420, 0x5bf1: 0x401d0620, 0x5bf2: 0x401d0820, 0x5bf3: 0x401d0a20, + 0x5bf4: 0x401d0c20, 0x5bf5: 0x401d0e20, 0x5bf6: 0x401d1020, 0x5bf7: 0x401d1220, + 0x5bf8: 0x401d1420, 0x5bf9: 0x401d1620, 0x5bfa: 0x401d1820, 0x5bfb: 0x401d1a20, + 0x5bfc: 0x401d1c20, 0x5bfd: 0x401d1e20, 0x5bfe: 0x401d2020, 0x5bff: 0x401d2220, + // Block 0x170, offset 0x5c00 + 0x5c00: 0x401d2420, 0x5c01: 0x401d2620, 0x5c02: 0x401d2820, 0x5c03: 0x401d2a20, + 0x5c04: 0x401d2c20, 0x5c05: 0x401d2e20, 0x5c06: 0x401d3020, 0x5c07: 0x401d3220, + 0x5c08: 0x401d3420, 0x5c09: 0x401d3620, 0x5c0a: 0x401d3820, 0x5c0b: 0x401d3a20, + 0x5c0c: 0x401d3c20, 0x5c0d: 0x401d3e20, 0x5c0e: 0x401d4020, 0x5c0f: 0x401d4220, + 0x5c10: 0x401d4420, 0x5c11: 0x401d4620, 0x5c12: 0x401d4820, 0x5c13: 0x401d4a20, + 0x5c14: 0x401d4c20, 0x5c15: 0x401d4e20, 0x5c16: 0x401d5020, 0x5c17: 0x401d5220, + 0x5c18: 0x401d5420, 0x5c19: 0x401d5620, 0x5c1a: 0x401d5820, 0x5c1b: 0x401d5a20, + 0x5c1c: 0x401d5c20, 0x5c1d: 0x401d5e20, 0x5c1e: 0x401d6020, 0x5c1f: 0x401d6220, + 0x5c20: 0x401d6420, 0x5c21: 0x401d6620, 0x5c22: 0x401d6820, 0x5c23: 0x401d6a20, + 0x5c24: 0x401d6c20, 0x5c25: 0x401d6e20, 0x5c26: 0x401d7020, 0x5c27: 0x401d7220, + 0x5c28: 0x401d7420, 0x5c29: 0x401d7620, 0x5c2a: 0x401d7820, 0x5c2b: 0x401d7a20, + 0x5c2c: 0x401d7c20, 0x5c2d: 0x401d7e20, 0x5c2e: 0x401d8020, 0x5c2f: 0x401d8220, + 0x5c30: 0x401d8420, 0x5c31: 0x401d8620, 0x5c32: 0x401d8820, 0x5c33: 0x401d8a20, + 0x5c34: 0x401d8c20, 0x5c35: 0x401d8e20, + // Block 0x171, offset 0x5c40 + 0x5c40: 0x401d9020, 0x5c41: 0x401d9220, 0x5c42: 0x401d9420, 0x5c43: 0x401d9620, + 0x5c44: 0x401d9820, 0x5c45: 0x401d9a20, 0x5c46: 0x401d9c20, 0x5c47: 0x401d9e20, + 0x5c48: 0x401da020, 0x5c49: 0x401da220, 0x5c4a: 0x401da420, 0x5c4b: 0x401da620, + 0x5c4c: 0x401da820, 0x5c4d: 0x401daa20, 0x5c4e: 0x401dac20, 0x5c4f: 0x401dae20, + 0x5c50: 0x401db020, 0x5c51: 0x401db220, 0x5c52: 0x401db420, 0x5c53: 0x401db620, + 0x5c54: 0x401db820, 0x5c55: 0x401dba20, 0x5c56: 0x401dbc20, 0x5c57: 0x401dbe20, + 0x5c58: 0x401dc020, 0x5c59: 0x401dc220, 0x5c5a: 0x401dc420, 0x5c5b: 0x401dc620, + 0x5c5c: 0x401dc820, 0x5c5d: 0x401dca20, 0x5c5e: 0x401dcc20, 0x5c5f: 0x401dce20, + 0x5c60: 0x401dd020, 0x5c61: 0x401dd220, 0x5c62: 0x401dd420, 0x5c63: 0x401dd620, + 0x5c64: 0x401dd820, 0x5c65: 0x401dda20, 0x5c66: 0x401ddc20, + 0x5c69: 0x401e0420, 0x5c6a: 0x401de420, 0x5c6b: 0x401de620, + 0x5c6c: 0x401de820, 0x5c6d: 0x401dea20, 0x5c6e: 0x401dec20, 0x5c6f: 0x401dee20, + 0x5c70: 0x401df020, 0x5c71: 0x401df220, 0x5c72: 0x401df420, 0x5c73: 0x401df620, + 0x5c74: 0x401df820, 0x5c75: 0x401dfa20, 0x5c76: 0x401dfc20, 0x5c77: 0x401dfe20, + 0x5c78: 0x401e0020, 0x5c79: 0x401e0220, 0x5c7a: 0x401e0620, 0x5c7b: 0x401e0820, + 0x5c7c: 0x401e0a20, 0x5c7d: 0x401e0c20, 0x5c7e: 0x401e0e20, 0x5c7f: 0x401e1020, + // Block 0x172, offset 0x5c80 + 0x5c80: 0x401e1220, 0x5c81: 0x401e1420, 0x5c82: 0x401e1620, 0x5c83: 0x401e1820, + 0x5c84: 0x401e1a20, 0x5c85: 0x401e1c20, 0x5c86: 0x401e1e20, 0x5c87: 0x401e2020, + 0x5c88: 0x401e2220, 0x5c89: 0x401e2420, 0x5c8a: 0x401e2620, 0x5c8b: 0x401e2820, + 0x5c8c: 0x401e2a20, 0x5c8d: 0x401e2c20, 0x5c8e: 0x401e2e20, 0x5c8f: 0x401e3020, + 0x5c90: 0x401e3220, 0x5c91: 0x401e3420, 0x5c92: 0x401e3620, 0x5c93: 0x401e3820, + 0x5c94: 0x401e3a20, 0x5c95: 0x401e3c20, 0x5c96: 0x401e3e20, 0x5c97: 0x401e4020, + 0x5c98: 0x401e4220, 0x5c99: 0x401e4420, 0x5c9a: 0x401e4620, 0x5c9b: 0x401e4820, + 0x5c9c: 0x401e4a20, 0x5c9d: 0x401e4c20, 0x5c9e: 0x401e4020, 0x5c9f: 0x401e4220, + 0x5ca0: 0x401e4220, 0x5ca1: 0x401e4220, 0x5ca2: 0x401e4220, 0x5ca3: 0x401e4220, + 0x5ca4: 0x401e4220, 0x5ca5: 0xad800000, 0x5ca6: 0xad800000, 0x5ca7: 0xa0100000, + 0x5ca8: 0xa0100000, 0x5ca9: 0xa0100000, 0x5caa: 0x401e4e20, 0x5cab: 0x401e5020, + 0x5cac: 0x401e5220, 0x5cad: 0xae200000, 0x5cae: 0xad800000, 0x5caf: 0xad800000, + 0x5cb0: 0xad800000, 0x5cb1: 0xad800000, 0x5cb2: 0xad800000, 0x5cb3: 0xa0000000, + 0x5cb4: 0xa0000000, 0x5cb5: 0xa0000000, 0x5cb6: 0xa0000000, 0x5cb7: 0xa0000000, + 0x5cb8: 0xa0000000, 0x5cb9: 0xa0000000, 0x5cba: 0xa0000000, 0x5cbb: 0xadc00000, + 0x5cbc: 0xadc00000, 0x5cbd: 0xadc00000, 0x5cbe: 0xadc00000, 0x5cbf: 0xadc00000, + // Block 0x173, offset 0x5cc0 + 0x5cc0: 0xadc00000, 0x5cc1: 0xadc00000, 0x5cc2: 0xadc00000, 0x5cc3: 0x401e5420, + 0x5cc4: 0x401e5620, 0x5cc5: 0xae600000, 0x5cc6: 0xae600000, 0x5cc7: 0xae600000, + 0x5cc8: 0xae600000, 0x5cc9: 0xae600000, 0x5cca: 0xadc00000, 0x5ccb: 0xadc00000, + 0x5ccc: 0x401e5820, 0x5ccd: 0x401e5a20, 0x5cce: 0x401e5c20, 0x5ccf: 0x401e5e20, + 0x5cd0: 0x401e6020, 0x5cd1: 0x401e6220, 0x5cd2: 0x401e6420, 0x5cd3: 0x401e6620, + 0x5cd4: 0x401e6820, 0x5cd5: 0x401e6a20, 0x5cd6: 0x401e6c20, 0x5cd7: 0x401e6e20, + 0x5cd8: 0x401e7020, 0x5cd9: 0x401e7220, 0x5cda: 0x401e7420, 0x5cdb: 0x401e7620, + 0x5cdc: 0x401e7820, 0x5cdd: 0x401e7a20, 0x5cde: 0x401e7c20, 0x5cdf: 0x401e7e20, + 0x5ce0: 0x401e8020, 0x5ce1: 0x401e8220, 0x5ce2: 0x401e8420, 0x5ce3: 0x401e8620, + 0x5ce4: 0x401e8820, 0x5ce5: 0x401e8a20, 0x5ce6: 0x401e8c20, 0x5ce7: 0x401e8e20, + 0x5ce8: 0x401e9020, 0x5ce9: 0x401e9220, 0x5cea: 0xae600000, 0x5ceb: 0xae600000, + 0x5cec: 0xae600000, 0x5ced: 0xae600000, 0x5cee: 0x401e9420, 0x5cef: 0x401e9620, + 0x5cf0: 0x401e9820, 0x5cf1: 0x401e9a20, 0x5cf2: 0x401e9c20, 0x5cf3: 0x401e9e20, + 0x5cf4: 0x401ea020, 0x5cf5: 0x401ea220, 0x5cf6: 0x401ea420, 0x5cf7: 0x401ea620, + 0x5cf8: 0x401ea820, 0x5cf9: 0x401eaa20, 0x5cfa: 0x401eac20, 0x5cfb: 0x401eaa20, + 0x5cfc: 0x401eac20, 0x5cfd: 0x401eaa20, 0x5cfe: 0x401eac20, 0x5cff: 0x401eaa20, + // Block 0x174, offset 0x5d00 + 0x5d00: 0x401eac20, 0x5d01: 0x401eae20, 0x5d02: 0x401eb020, 0x5d03: 0x401eb220, + 0x5d04: 0x401eb420, 0x5d05: 0x401eb620, 0x5d06: 0x401eb820, 0x5d07: 0x401eba20, + 0x5d08: 0x401ebc20, 0x5d09: 0x401ebe20, 0x5d0a: 0x401ec020, 0x5d0b: 0x401ec220, + 0x5d0c: 0x401ec420, 0x5d0d: 0x401ec620, 0x5d0e: 0x401ec820, 0x5d0f: 0x401eca20, + 0x5d10: 0x401ecc20, 0x5d11: 0x401ece20, 0x5d12: 0x401ed020, 0x5d13: 0x401ed220, + 0x5d14: 0x401ed420, 0x5d15: 0x401ed620, 0x5d16: 0x401ed820, 0x5d17: 0x401eda20, + 0x5d18: 0x401edc20, 0x5d19: 0x401ede20, 0x5d1a: 0x401ee020, 0x5d1b: 0x401ee220, + 0x5d1c: 0x401ee420, 0x5d1d: 0x401ee620, + // Block 0x175, offset 0x5d40 + 0x5d40: 0x401ee820, 0x5d41: 0x401eea20, 0x5d42: 0x401eec20, 0x5d43: 0x401eee20, + 0x5d44: 0x401ef020, 0x5d45: 0x401ef220, 0x5d46: 0x401ef420, 0x5d47: 0x401ef620, + 0x5d48: 0x401ef820, 0x5d49: 0x401efa20, 0x5d4a: 0x401efc20, 0x5d4b: 0x401efe20, + 0x5d4c: 0x401f0020, 0x5d4d: 0x401f0220, 0x5d4e: 0x401f0420, 0x5d4f: 0x401f0620, + 0x5d50: 0x401f0820, 0x5d51: 0x401f0a20, 0x5d52: 0x401f0c20, 0x5d53: 0x401f0e20, + 0x5d54: 0x401f1020, 0x5d55: 0x401f1220, 0x5d56: 0x401f1420, 0x5d57: 0x401f1620, + 0x5d58: 0x401f1820, 0x5d59: 0x401f1a20, 0x5d5a: 0x401f1c20, 0x5d5b: 0x401f1e20, + 0x5d5c: 0x401f2020, 0x5d5d: 0x401f2220, 0x5d5e: 0x401f2420, 0x5d5f: 0x401f2620, + 0x5d60: 0x401f2820, 0x5d61: 0x401f2a20, 0x5d62: 0x401f2c20, 0x5d63: 0x401f2e20, + 0x5d64: 0x401f3020, 0x5d65: 0x401f3220, 0x5d66: 0x401f3420, 0x5d67: 0x401f3620, + 0x5d68: 0x401f3820, 0x5d69: 0x401f3a20, 0x5d6a: 0x401f3c20, 0x5d6b: 0x401f3e20, + 0x5d6c: 0x401f4020, 0x5d6d: 0x401f4220, 0x5d6e: 0x401f4420, 0x5d6f: 0x401f4620, + 0x5d70: 0x401f4820, 0x5d71: 0x401f4a20, 0x5d72: 0x401f4c20, 0x5d73: 0x401f4e20, + 0x5d74: 0x401f5020, 0x5d75: 0x401f5220, 0x5d76: 0x401f5420, 0x5d77: 0x401f5620, + 0x5d78: 0x401f5820, 0x5d79: 0x401f5a20, 0x5d7a: 0x401f5c20, 0x5d7b: 0x401f5e20, + 0x5d7c: 0x401f6020, 0x5d7d: 0x401f6220, 0x5d7e: 0x401f6420, 0x5d7f: 0x401f6620, + // Block 0x176, offset 0x5d80 + 0x5d80: 0x401f6820, 0x5d81: 0x401f6a20, 0x5d82: 0xae600000, 0x5d83: 0xae600000, + 0x5d84: 0xae600000, 0x5d85: 0x401f6c20, + // Block 0x177, offset 0x5dc0 + 0x5dc0: 0x4019e220, 0x5dc1: 0x4019e420, 0x5dc2: 0x4019e620, 0x5dc3: 0x4019e820, + 0x5dc4: 0x4019ea20, 0x5dc5: 0x4019ec20, 0x5dc6: 0x4019ee20, 0x5dc7: 0x4019f020, + 0x5dc8: 0x4019f220, 0x5dc9: 0x4019f420, 0x5dca: 0x4019f620, 0x5dcb: 0x4019f820, + 0x5dcc: 0x4019fa20, 0x5dcd: 0x4019fc20, 0x5dce: 0x4019fe20, 0x5dcf: 0x401a0020, + 0x5dd0: 0x401a0220, 0x5dd1: 0x401a0420, 0x5dd2: 0x401a0620, 0x5dd3: 0x401a0820, + 0x5dd4: 0x401a0a20, 0x5dd5: 0x401a0c20, 0x5dd6: 0x401a0e20, 0x5dd7: 0x401a1020, + 0x5dd8: 0x401a1220, 0x5dd9: 0x401a1420, 0x5dda: 0x401a1620, 0x5ddb: 0x401a1820, + 0x5ddc: 0x401a1a20, 0x5ddd: 0x401a1c20, 0x5dde: 0x401a1e20, 0x5ddf: 0x401a2020, + 0x5de0: 0x401a2220, 0x5de1: 0x401a2420, 0x5de2: 0x401a2620, 0x5de3: 0x401a2820, + 0x5de4: 0x401a2a20, 0x5de5: 0x401a2c20, 0x5de6: 0x401a2e20, 0x5de7: 0x401a3020, + 0x5de8: 0x401a3220, 0x5de9: 0x401a3420, 0x5dea: 0x401a3620, 0x5deb: 0x401a3820, + 0x5dec: 0x401a3a20, 0x5ded: 0x401a3c20, 0x5dee: 0x401a3e20, 0x5def: 0x401a4020, + 0x5df0: 0x401a4220, 0x5df1: 0x401a4420, 0x5df2: 0x401a4620, 0x5df3: 0x401a4820, + 0x5df4: 0x401a4a20, 0x5df5: 0x401a4c20, 0x5df6: 0x401a4e20, 0x5df7: 0x401a5020, + 0x5df8: 0x401a5220, 0x5df9: 0x401a5420, 0x5dfa: 0x401a5620, 0x5dfb: 0x401a5820, + 0x5dfc: 0x401a5a20, 0x5dfd: 0x401a5c20, 0x5dfe: 0x401a5e20, 0x5dff: 0x401a6020, + // Block 0x178, offset 0x5e00 + 0x5e00: 0x401a6220, 0x5e01: 0x401a6420, 0x5e02: 0x401a6620, 0x5e03: 0x401a6820, + 0x5e04: 0x401a6a20, 0x5e05: 0x401a6c20, 0x5e06: 0x401a6e20, 0x5e07: 0x401a7020, + 0x5e08: 0x401a7220, 0x5e09: 0x401a7420, 0x5e0a: 0x401a7620, 0x5e0b: 0x401a7820, + 0x5e0c: 0x401a7a20, 0x5e0d: 0x401a7c20, 0x5e0e: 0x401a7e20, 0x5e0f: 0x401a8020, + 0x5e10: 0x401a8220, 0x5e11: 0x401a8420, 0x5e12: 0x401a8620, 0x5e13: 0x401a8820, + 0x5e14: 0x401a8a20, 0x5e15: 0x401a8c20, 0x5e16: 0x401a8e20, + 0x5e20: 0xe00002af, 0x5e21: 0xe00003ca, 0x5e22: 0xe00004a4, 0x5e23: 0xe0000576, + 0x5e24: 0xe000063d, 0x5e25: 0xe00006ed, 0x5e26: 0xe0000795, 0x5e27: 0xe000083e, + 0x5e28: 0xe00008e9, 0x5e29: 0x4029ba20, 0x5e2a: 0x4029bc20, 0x5e2b: 0x4029be20, + 0x5e2c: 0x4029c020, 0x5e2d: 0x4029c220, 0x5e2e: 0x4029c420, 0x5e2f: 0x4029c620, + 0x5e30: 0x4029c820, 0x5e31: 0x4029ca20, + // Block 0x179, offset 0x5e40 + 0x5e40: 0x002bde8b, 0x5e41: 0x002c0a8b, 0x5e42: 0x002c3a8b, 0x5e43: 0x002c628b, + 0x5e44: 0x002c988b, 0x5e45: 0x002d088b, 0x5e46: 0x002d228b, 0x5e47: 0x002d688b, + 0x5e48: 0x002d9a8b, 0x5e49: 0x002dcc8b, 0x5e4a: 0x002dfe8b, 0x5e4b: 0x002e228b, + 0x5e4c: 0x002e828b, 0x5e4d: 0x002e9e8b, 0x5e4e: 0x002ee28b, 0x5e4f: 0x002f2c8b, + 0x5e50: 0x002f568b, 0x5e51: 0x002f7a8b, 0x5e52: 0x002fe68b, 0x5e53: 0x00302c8b, + 0x5e54: 0x00306c8b, 0x5e55: 0x0030be8b, 0x5e56: 0x0030e28b, 0x5e57: 0x0030f68b, + 0x5e58: 0x0031008b, 0x5e59: 0x00312a8b, 0x5e5a: 0x002bde85, 0x5e5b: 0x002c0a85, + 0x5e5c: 0x002c3a85, 0x5e5d: 0x002c6285, 0x5e5e: 0x002c9885, 0x5e5f: 0x002d0885, + 0x5e60: 0x002d2285, 0x5e61: 0x002d6885, 0x5e62: 0x002d9a85, 0x5e63: 0x002dcc85, + 0x5e64: 0x002dfe85, 0x5e65: 0x002e2285, 0x5e66: 0x002e8285, 0x5e67: 0x002e9e85, + 0x5e68: 0x002ee285, 0x5e69: 0x002f2c85, 0x5e6a: 0x002f5685, 0x5e6b: 0x002f7a85, + 0x5e6c: 0x002fe685, 0x5e6d: 0x00302c85, 0x5e6e: 0x00306c85, 0x5e6f: 0x0030be85, + 0x5e70: 0x0030e285, 0x5e71: 0x0030f685, 0x5e72: 0x00310085, 0x5e73: 0x00312a85, + 0x5e74: 0x002bde8b, 0x5e75: 0x002c0a8b, 0x5e76: 0x002c3a8b, 0x5e77: 0x002c628b, + 0x5e78: 0x002c988b, 0x5e79: 0x002d088b, 0x5e7a: 0x002d228b, 0x5e7b: 0x002d688b, + 0x5e7c: 0x002d9a8b, 0x5e7d: 0x002dcc8b, 0x5e7e: 0x002dfe8b, 0x5e7f: 0x002e228b, + // Block 0x17a, offset 0x5e80 + 0x5e80: 0x002e828b, 0x5e81: 0x002e9e8b, 0x5e82: 0x002ee28b, 0x5e83: 0x002f2c8b, + 0x5e84: 0x002f568b, 0x5e85: 0x002f7a8b, 0x5e86: 0x002fe68b, 0x5e87: 0x00302c8b, + 0x5e88: 0x00306c8b, 0x5e89: 0x0030be8b, 0x5e8a: 0x0030e28b, 0x5e8b: 0x0030f68b, + 0x5e8c: 0x0031008b, 0x5e8d: 0x00312a8b, 0x5e8e: 0x002bde85, 0x5e8f: 0x002c0a85, + 0x5e90: 0x002c3a85, 0x5e91: 0x002c6285, 0x5e92: 0x002c9885, 0x5e93: 0x002d0885, + 0x5e94: 0x002d2285, 0x5e96: 0x002d9a85, 0x5e97: 0x002dcc85, + 0x5e98: 0x002dfe85, 0x5e99: 0x002e2285, 0x5e9a: 0x002e8285, 0x5e9b: 0x002e9e85, + 0x5e9c: 0x002ee285, 0x5e9d: 0x002f2c85, 0x5e9e: 0x002f5685, 0x5e9f: 0x002f7a85, + 0x5ea0: 0x002fe685, 0x5ea1: 0x00302c85, 0x5ea2: 0x00306c85, 0x5ea3: 0x0030be85, + 0x5ea4: 0x0030e285, 0x5ea5: 0x0030f685, 0x5ea6: 0x00310085, 0x5ea7: 0x00312a85, + 0x5ea8: 0x002bde8b, 0x5ea9: 0x002c0a8b, 0x5eaa: 0x002c3a8b, 0x5eab: 0x002c628b, + 0x5eac: 0x002c988b, 0x5ead: 0x002d088b, 0x5eae: 0x002d228b, 0x5eaf: 0x002d688b, + 0x5eb0: 0x002d9a8b, 0x5eb1: 0x002dcc8b, 0x5eb2: 0x002dfe8b, 0x5eb3: 0x002e228b, + 0x5eb4: 0x002e828b, 0x5eb5: 0x002e9e8b, 0x5eb6: 0x002ee28b, 0x5eb7: 0x002f2c8b, + 0x5eb8: 0x002f568b, 0x5eb9: 0x002f7a8b, 0x5eba: 0x002fe68b, 0x5ebb: 0x00302c8b, + 0x5ebc: 0x00306c8b, 0x5ebd: 0x0030be8b, 0x5ebe: 0x0030e28b, 0x5ebf: 0x0030f68b, + // Block 0x17b, offset 0x5ec0 + 0x5ec0: 0x0031008b, 0x5ec1: 0x00312a8b, 0x5ec2: 0x002bde85, 0x5ec3: 0x002c0a85, + 0x5ec4: 0x002c3a85, 0x5ec5: 0x002c6285, 0x5ec6: 0x002c9885, 0x5ec7: 0x002d0885, + 0x5ec8: 0x002d2285, 0x5ec9: 0x002d6885, 0x5eca: 0x002d9a85, 0x5ecb: 0x002dcc85, + 0x5ecc: 0x002dfe85, 0x5ecd: 0x002e2285, 0x5ece: 0x002e8285, 0x5ecf: 0x002e9e85, + 0x5ed0: 0x002ee285, 0x5ed1: 0x002f2c85, 0x5ed2: 0x002f5685, 0x5ed3: 0x002f7a85, + 0x5ed4: 0x002fe685, 0x5ed5: 0x00302c85, 0x5ed6: 0x00306c85, 0x5ed7: 0x0030be85, + 0x5ed8: 0x0030e285, 0x5ed9: 0x0030f685, 0x5eda: 0x00310085, 0x5edb: 0x00312a85, + 0x5edc: 0x002bde8b, 0x5ede: 0x002c3a8b, 0x5edf: 0x002c628b, + 0x5ee2: 0x002d228b, + 0x5ee5: 0x002dcc8b, 0x5ee6: 0x002dfe8b, + 0x5ee9: 0x002e9e8b, 0x5eea: 0x002ee28b, 0x5eeb: 0x002f2c8b, + 0x5eec: 0x002f568b, 0x5eee: 0x002fe68b, 0x5eef: 0x00302c8b, + 0x5ef0: 0x00306c8b, 0x5ef1: 0x0030be8b, 0x5ef2: 0x0030e28b, 0x5ef3: 0x0030f68b, + 0x5ef4: 0x0031008b, 0x5ef5: 0x00312a8b, 0x5ef6: 0x002bde85, 0x5ef7: 0x002c0a85, + 0x5ef8: 0x002c3a85, 0x5ef9: 0x002c6285, 0x5efb: 0x002d0885, + 0x5efd: 0x002d6885, 0x5efe: 0x002d9a85, 0x5eff: 0x002dcc85, + // Block 0x17c, offset 0x5f00 + 0x5f00: 0x002dfe85, 0x5f01: 0x002e2285, 0x5f02: 0x002e8285, 0x5f03: 0x002e9e85, + 0x5f05: 0x002f2c85, 0x5f06: 0x002f5685, 0x5f07: 0x002f7a85, + 0x5f08: 0x002fe685, 0x5f09: 0x00302c85, 0x5f0a: 0x00306c85, 0x5f0b: 0x0030be85, + 0x5f0c: 0x0030e285, 0x5f0d: 0x0030f685, 0x5f0e: 0x00310085, 0x5f0f: 0x00312a85, + 0x5f10: 0x002bde8b, 0x5f11: 0x002c0a8b, 0x5f12: 0x002c3a8b, 0x5f13: 0x002c628b, + 0x5f14: 0x002c988b, 0x5f15: 0x002d088b, 0x5f16: 0x002d228b, 0x5f17: 0x002d688b, + 0x5f18: 0x002d9a8b, 0x5f19: 0x002dcc8b, 0x5f1a: 0x002dfe8b, 0x5f1b: 0x002e228b, + 0x5f1c: 0x002e828b, 0x5f1d: 0x002e9e8b, 0x5f1e: 0x002ee28b, 0x5f1f: 0x002f2c8b, + 0x5f20: 0x002f568b, 0x5f21: 0x002f7a8b, 0x5f22: 0x002fe68b, 0x5f23: 0x00302c8b, + 0x5f24: 0x00306c8b, 0x5f25: 0x0030be8b, 0x5f26: 0x0030e28b, 0x5f27: 0x0030f68b, + 0x5f28: 0x0031008b, 0x5f29: 0x00312a8b, 0x5f2a: 0x002bde85, 0x5f2b: 0x002c0a85, + 0x5f2c: 0x002c3a85, 0x5f2d: 0x002c6285, 0x5f2e: 0x002c9885, 0x5f2f: 0x002d0885, + 0x5f30: 0x002d2285, 0x5f31: 0x002d6885, 0x5f32: 0x002d9a85, 0x5f33: 0x002dcc85, + 0x5f34: 0x002dfe85, 0x5f35: 0x002e2285, 0x5f36: 0x002e8285, 0x5f37: 0x002e9e85, + 0x5f38: 0x002ee285, 0x5f39: 0x002f2c85, 0x5f3a: 0x002f5685, 0x5f3b: 0x002f7a85, + 0x5f3c: 0x002fe685, 0x5f3d: 0x00302c85, 0x5f3e: 0x00306c85, 0x5f3f: 0x0030be85, + // Block 0x17d, offset 0x5f40 + 0x5f40: 0x0030e285, 0x5f41: 0x0030f685, 0x5f42: 0x00310085, 0x5f43: 0x00312a85, + 0x5f44: 0x002bde8b, 0x5f45: 0x002c0a8b, 0x5f47: 0x002c628b, + 0x5f48: 0x002c988b, 0x5f49: 0x002d088b, 0x5f4a: 0x002d228b, + 0x5f4d: 0x002dcc8b, 0x5f4e: 0x002dfe8b, 0x5f4f: 0x002e228b, + 0x5f50: 0x002e828b, 0x5f51: 0x002e9e8b, 0x5f52: 0x002ee28b, 0x5f53: 0x002f2c8b, + 0x5f54: 0x002f568b, 0x5f56: 0x002fe68b, 0x5f57: 0x00302c8b, + 0x5f58: 0x00306c8b, 0x5f59: 0x0030be8b, 0x5f5a: 0x0030e28b, 0x5f5b: 0x0030f68b, + 0x5f5c: 0x0031008b, 0x5f5e: 0x002bde85, 0x5f5f: 0x002c0a85, + 0x5f60: 0x002c3a85, 0x5f61: 0x002c6285, 0x5f62: 0x002c9885, 0x5f63: 0x002d0885, + 0x5f64: 0x002d2285, 0x5f65: 0x002d6885, 0x5f66: 0x002d9a85, 0x5f67: 0x002dcc85, + 0x5f68: 0x002dfe85, 0x5f69: 0x002e2285, 0x5f6a: 0x002e8285, 0x5f6b: 0x002e9e85, + 0x5f6c: 0x002ee285, 0x5f6d: 0x002f2c85, 0x5f6e: 0x002f5685, 0x5f6f: 0x002f7a85, + 0x5f70: 0x002fe685, 0x5f71: 0x00302c85, 0x5f72: 0x00306c85, 0x5f73: 0x0030be85, + 0x5f74: 0x0030e285, 0x5f75: 0x0030f685, 0x5f76: 0x00310085, 0x5f77: 0x00312a85, + 0x5f78: 0x002bde8b, 0x5f79: 0x002c0a8b, 0x5f7b: 0x002c628b, + 0x5f7c: 0x002c988b, 0x5f7d: 0x002d088b, 0x5f7e: 0x002d228b, + // Block 0x17e, offset 0x5f80 + 0x5f80: 0x002d9a8b, 0x5f81: 0x002dcc8b, 0x5f82: 0x002dfe8b, 0x5f83: 0x002e228b, + 0x5f84: 0x002e828b, 0x5f86: 0x002ee28b, + 0x5f8a: 0x002fe68b, 0x5f8b: 0x00302c8b, + 0x5f8c: 0x00306c8b, 0x5f8d: 0x0030be8b, 0x5f8e: 0x0030e28b, 0x5f8f: 0x0030f68b, + 0x5f90: 0x0031008b, 0x5f92: 0x002bde85, 0x5f93: 0x002c0a85, + 0x5f94: 0x002c3a85, 0x5f95: 0x002c6285, 0x5f96: 0x002c9885, 0x5f97: 0x002d0885, + 0x5f98: 0x002d2285, 0x5f99: 0x002d6885, 0x5f9a: 0x002d9a85, 0x5f9b: 0x002dcc85, + 0x5f9c: 0x002dfe85, 0x5f9d: 0x002e2285, 0x5f9e: 0x002e8285, 0x5f9f: 0x002e9e85, + 0x5fa0: 0x002ee285, 0x5fa1: 0x002f2c85, 0x5fa2: 0x002f5685, 0x5fa3: 0x002f7a85, + 0x5fa4: 0x002fe685, 0x5fa5: 0x00302c85, 0x5fa6: 0x00306c85, 0x5fa7: 0x0030be85, + 0x5fa8: 0x0030e285, 0x5fa9: 0x0030f685, 0x5faa: 0x00310085, 0x5fab: 0x00312a85, + 0x5fac: 0x002bde8b, 0x5fad: 0x002c0a8b, 0x5fae: 0x002c3a8b, 0x5faf: 0x002c628b, + 0x5fb0: 0x002c988b, 0x5fb1: 0x002d088b, 0x5fb2: 0x002d228b, 0x5fb3: 0x002d688b, + 0x5fb4: 0x002d9a8b, 0x5fb5: 0x002dcc8b, 0x5fb6: 0x002dfe8b, 0x5fb7: 0x002e228b, + 0x5fb8: 0x002e828b, 0x5fb9: 0x002e9e8b, 0x5fba: 0x002ee28b, 0x5fbb: 0x002f2c8b, + 0x5fbc: 0x002f568b, 0x5fbd: 0x002f7a8b, 0x5fbe: 0x002fe68b, 0x5fbf: 0x00302c8b, + // Block 0x17f, offset 0x5fc0 + 0x5fc0: 0x00306c8b, 0x5fc1: 0x0030be8b, 0x5fc2: 0x0030e28b, 0x5fc3: 0x0030f68b, + 0x5fc4: 0x0031008b, 0x5fc5: 0x00312a8b, 0x5fc6: 0x002bde85, 0x5fc7: 0x002c0a85, + 0x5fc8: 0x002c3a85, 0x5fc9: 0x002c6285, 0x5fca: 0x002c9885, 0x5fcb: 0x002d0885, + 0x5fcc: 0x002d2285, 0x5fcd: 0x002d6885, 0x5fce: 0x002d9a85, 0x5fcf: 0x002dcc85, + 0x5fd0: 0x002dfe85, 0x5fd1: 0x002e2285, 0x5fd2: 0x002e8285, 0x5fd3: 0x002e9e85, + 0x5fd4: 0x002ee285, 0x5fd5: 0x002f2c85, 0x5fd6: 0x002f5685, 0x5fd7: 0x002f7a85, + 0x5fd8: 0x002fe685, 0x5fd9: 0x00302c85, 0x5fda: 0x00306c85, 0x5fdb: 0x0030be85, + 0x5fdc: 0x0030e285, 0x5fdd: 0x0030f685, 0x5fde: 0x00310085, 0x5fdf: 0x00312a85, + 0x5fe0: 0x002bde8b, 0x5fe1: 0x002c0a8b, 0x5fe2: 0x002c3a8b, 0x5fe3: 0x002c628b, + 0x5fe4: 0x002c988b, 0x5fe5: 0x002d088b, 0x5fe6: 0x002d228b, 0x5fe7: 0x002d688b, + 0x5fe8: 0x002d9a8b, 0x5fe9: 0x002dcc8b, 0x5fea: 0x002dfe8b, 0x5feb: 0x002e228b, + 0x5fec: 0x002e828b, 0x5fed: 0x002e9e8b, 0x5fee: 0x002ee28b, 0x5fef: 0x002f2c8b, + 0x5ff0: 0x002f568b, 0x5ff1: 0x002f7a8b, 0x5ff2: 0x002fe68b, 0x5ff3: 0x00302c8b, + 0x5ff4: 0x00306c8b, 0x5ff5: 0x0030be8b, 0x5ff6: 0x0030e28b, 0x5ff7: 0x0030f68b, + 0x5ff8: 0x0031008b, 0x5ff9: 0x00312a8b, 0x5ffa: 0x002bde85, 0x5ffb: 0x002c0a85, + 0x5ffc: 0x002c3a85, 0x5ffd: 0x002c6285, 0x5ffe: 0x002c9885, 0x5fff: 0x002d0885, + // Block 0x180, offset 0x6000 + 0x6000: 0x002d2285, 0x6001: 0x002d6885, 0x6002: 0x002d9a85, 0x6003: 0x002dcc85, + 0x6004: 0x002dfe85, 0x6005: 0x002e2285, 0x6006: 0x002e8285, 0x6007: 0x002e9e85, + 0x6008: 0x002ee285, 0x6009: 0x002f2c85, 0x600a: 0x002f5685, 0x600b: 0x002f7a85, + 0x600c: 0x002fe685, 0x600d: 0x00302c85, 0x600e: 0x00306c85, 0x600f: 0x0030be85, + 0x6010: 0x0030e285, 0x6011: 0x0030f685, 0x6012: 0x00310085, 0x6013: 0x00312a85, + 0x6014: 0x002bde8b, 0x6015: 0x002c0a8b, 0x6016: 0x002c3a8b, 0x6017: 0x002c628b, + 0x6018: 0x002c988b, 0x6019: 0x002d088b, 0x601a: 0x002d228b, 0x601b: 0x002d688b, + 0x601c: 0x002d9a8b, 0x601d: 0x002dcc8b, 0x601e: 0x002dfe8b, 0x601f: 0x002e228b, + 0x6020: 0x002e828b, 0x6021: 0x002e9e8b, 0x6022: 0x002ee28b, 0x6023: 0x002f2c8b, + 0x6024: 0x002f568b, 0x6025: 0x002f7a8b, 0x6026: 0x002fe68b, 0x6027: 0x00302c8b, + 0x6028: 0x00306c8b, 0x6029: 0x0030be8b, 0x602a: 0x0030e28b, 0x602b: 0x0030f68b, + 0x602c: 0x0031008b, 0x602d: 0x00312a8b, 0x602e: 0x002bde85, 0x602f: 0x002c0a85, + 0x6030: 0x002c3a85, 0x6031: 0x002c6285, 0x6032: 0x002c9885, 0x6033: 0x002d0885, + 0x6034: 0x002d2285, 0x6035: 0x002d6885, 0x6036: 0x002d9a85, 0x6037: 0x002dcc85, + 0x6038: 0x002dfe85, 0x6039: 0x002e2285, 0x603a: 0x002e8285, 0x603b: 0x002e9e85, + 0x603c: 0x002ee285, 0x603d: 0x002f2c85, 0x603e: 0x002f5685, 0x603f: 0x002f7a85, + // Block 0x181, offset 0x6040 + 0x6040: 0x002fe685, 0x6041: 0x00302c85, 0x6042: 0x00306c85, 0x6043: 0x0030be85, + 0x6044: 0x0030e285, 0x6045: 0x0030f685, 0x6046: 0x00310085, 0x6047: 0x00312a85, + 0x6048: 0x002bde8b, 0x6049: 0x002c0a8b, 0x604a: 0x002c3a8b, 0x604b: 0x002c628b, + 0x604c: 0x002c988b, 0x604d: 0x002d088b, 0x604e: 0x002d228b, 0x604f: 0x002d688b, + 0x6050: 0x002d9a8b, 0x6051: 0x002dcc8b, 0x6052: 0x002dfe8b, 0x6053: 0x002e228b, + 0x6054: 0x002e828b, 0x6055: 0x002e9e8b, 0x6056: 0x002ee28b, 0x6057: 0x002f2c8b, + 0x6058: 0x002f568b, 0x6059: 0x002f7a8b, 0x605a: 0x002fe68b, 0x605b: 0x00302c8b, + 0x605c: 0x00306c8b, 0x605d: 0x0030be8b, 0x605e: 0x0030e28b, 0x605f: 0x0030f68b, + 0x6060: 0x0031008b, 0x6061: 0x00312a8b, 0x6062: 0x002bde85, 0x6063: 0x002c0a85, + 0x6064: 0x002c3a85, 0x6065: 0x002c6285, 0x6066: 0x002c9885, 0x6067: 0x002d0885, + 0x6068: 0x002d2285, 0x6069: 0x002d6885, 0x606a: 0x002d9a85, 0x606b: 0x002dcc85, + 0x606c: 0x002dfe85, 0x606d: 0x002e2285, 0x606e: 0x002e8285, 0x606f: 0x002e9e85, + 0x6070: 0x002ee285, 0x6071: 0x002f2c85, 0x6072: 0x002f5685, 0x6073: 0x002f7a85, + 0x6074: 0x002fe685, 0x6075: 0x00302c85, 0x6076: 0x00306c85, 0x6077: 0x0030be85, + 0x6078: 0x0030e285, 0x6079: 0x0030f685, 0x607a: 0x00310085, 0x607b: 0x00312a85, + 0x607c: 0x002bde8b, 0x607d: 0x002c0a8b, 0x607e: 0x002c3a8b, 0x607f: 0x002c628b, + // Block 0x182, offset 0x6080 + 0x6080: 0x002c988b, 0x6081: 0x002d088b, 0x6082: 0x002d228b, 0x6083: 0x002d688b, + 0x6084: 0x002d9a8b, 0x6085: 0x002dcc8b, 0x6086: 0x002dfe8b, 0x6087: 0x002e228b, + 0x6088: 0x002e828b, 0x6089: 0x002e9e8b, 0x608a: 0x002ee28b, 0x608b: 0x002f2c8b, + 0x608c: 0x002f568b, 0x608d: 0x002f7a8b, 0x608e: 0x002fe68b, 0x608f: 0x00302c8b, + 0x6090: 0x00306c8b, 0x6091: 0x0030be8b, 0x6092: 0x0030e28b, 0x6093: 0x0030f68b, + 0x6094: 0x0031008b, 0x6095: 0x00312a8b, 0x6096: 0x002bde85, 0x6097: 0x002c0a85, + 0x6098: 0x002c3a85, 0x6099: 0x002c6285, 0x609a: 0x002c9885, 0x609b: 0x002d0885, + 0x609c: 0x002d2285, 0x609d: 0x002d6885, 0x609e: 0x002d9a85, 0x609f: 0x002dcc85, + 0x60a0: 0x002dfe85, 0x60a1: 0x002e2285, 0x60a2: 0x002e8285, 0x60a3: 0x002e9e85, + 0x60a4: 0x002ee285, 0x60a5: 0x002f2c85, 0x60a6: 0x002f5685, 0x60a7: 0x002f7a85, + 0x60a8: 0x002fe685, 0x60a9: 0x00302c85, 0x60aa: 0x00306c85, 0x60ab: 0x0030be85, + 0x60ac: 0x0030e285, 0x60ad: 0x0030f685, 0x60ae: 0x00310085, 0x60af: 0x00312a85, + 0x60b0: 0x002bde8b, 0x60b1: 0x002c0a8b, 0x60b2: 0x002c3a8b, 0x60b3: 0x002c628b, + 0x60b4: 0x002c988b, 0x60b5: 0x002d088b, 0x60b6: 0x002d228b, 0x60b7: 0x002d688b, + 0x60b8: 0x002d9a8b, 0x60b9: 0x002dcc8b, 0x60ba: 0x002dfe8b, 0x60bb: 0x002e228b, + 0x60bc: 0x002e828b, 0x60bd: 0x002e9e8b, 0x60be: 0x002ee28b, 0x60bf: 0x002f2c8b, + // Block 0x183, offset 0x60c0 + 0x60c0: 0x002f568b, 0x60c1: 0x002f7a8b, 0x60c2: 0x002fe68b, 0x60c3: 0x00302c8b, + 0x60c4: 0x00306c8b, 0x60c5: 0x0030be8b, 0x60c6: 0x0030e28b, 0x60c7: 0x0030f68b, + 0x60c8: 0x0031008b, 0x60c9: 0x00312a8b, 0x60ca: 0x002bde85, 0x60cb: 0x002c0a85, + 0x60cc: 0x002c3a85, 0x60cd: 0x002c6285, 0x60ce: 0x002c9885, 0x60cf: 0x002d0885, + 0x60d0: 0x002d2285, 0x60d1: 0x002d6885, 0x60d2: 0x002d9a85, 0x60d3: 0x002dcc85, + 0x60d4: 0x002dfe85, 0x60d5: 0x002e2285, 0x60d6: 0x002e8285, 0x60d7: 0x002e9e85, + 0x60d8: 0x002ee285, 0x60d9: 0x002f2c85, 0x60da: 0x002f5685, 0x60db: 0x002f7a85, + 0x60dc: 0x002fe685, 0x60dd: 0x00302c85, 0x60de: 0x00306c85, 0x60df: 0x0030be85, + 0x60e0: 0x0030e285, 0x60e1: 0x0030f685, 0x60e2: 0x00310085, 0x60e3: 0x00312a85, + 0x60e4: 0x002da285, 0x60e5: 0x002dd485, + 0x60e8: 0x0032528b, 0x60e9: 0x0032548b, 0x60ea: 0x0032568b, 0x60eb: 0x00325a8b, + 0x60ec: 0x00325c8b, 0x60ed: 0x0032648b, 0x60ee: 0x0032688b, 0x60ef: 0x00326a8b, + 0x60f0: 0x00326c8b, 0x60f1: 0x0032708b, 0x60f2: 0x0032728b, 0x60f3: 0x0032768b, + 0x60f4: 0x0032788b, 0x60f5: 0x00327a8b, 0x60f6: 0x00327c8b, 0x60f7: 0x00327e8b, + 0x60f8: 0x0032888b, 0x60f9: 0x00326a8b, 0x60fa: 0x00328e8b, 0x60fb: 0x0032968b, + 0x60fc: 0x0032988b, 0x60fd: 0x00329a8b, 0x60fe: 0x00329c8b, 0x60ff: 0x00329e8b, + // Block 0x184, offset 0x6100 + 0x6100: 0x0032a28b, 0x6101: 0x00092485, 0x6102: 0x00325285, 0x6103: 0x00325485, + 0x6104: 0x00325685, 0x6105: 0x00325a85, 0x6106: 0x00325c85, 0x6107: 0x00326485, + 0x6108: 0x00326885, 0x6109: 0x00326a85, 0x610a: 0x00326c85, 0x610b: 0x00327085, + 0x610c: 0x00327285, 0x610d: 0x00327685, 0x610e: 0x00327885, 0x610f: 0x00327a85, + 0x6110: 0x00327c85, 0x6111: 0x00327e85, 0x6112: 0x00328885, 0x6113: 0x00328e85, + 0x6114: 0x00328e85, 0x6115: 0x00329685, 0x6116: 0x00329885, 0x6117: 0x00329a85, + 0x6118: 0x00329c85, 0x6119: 0x00329e85, 0x611a: 0x0032a285, 0x611b: 0x00091c85, + 0x611c: 0x00325c85, 0x611d: 0x00326a85, 0x611e: 0x00327085, 0x611f: 0x00329a85, + 0x6120: 0x00328885, 0x6121: 0x00327e85, 0x6122: 0x0032528b, 0x6123: 0x0032548b, + 0x6124: 0x0032568b, 0x6125: 0x00325a8b, 0x6126: 0x00325c8b, 0x6127: 0x0032648b, + 0x6128: 0x0032688b, 0x6129: 0x00326a8b, 0x612a: 0x00326c8b, 0x612b: 0x0032708b, + 0x612c: 0x0032728b, 0x612d: 0x0032768b, 0x612e: 0x0032788b, 0x612f: 0x00327a8b, + 0x6130: 0x00327c8b, 0x6131: 0x00327e8b, 0x6132: 0x0032888b, 0x6133: 0x00326a8b, + 0x6134: 0x00328e8b, 0x6135: 0x0032968b, 0x6136: 0x0032988b, 0x6137: 0x00329a8b, + 0x6138: 0x00329c8b, 0x6139: 0x00329e8b, 0x613a: 0x0032a28b, 0x613b: 0x00092485, + 0x613c: 0x00325285, 0x613d: 0x00325485, 0x613e: 0x00325685, 0x613f: 0x00325a85, + // Block 0x185, offset 0x6140 + 0x6140: 0x00325c85, 0x6141: 0x00326485, 0x6142: 0x00326885, 0x6143: 0x00326a85, + 0x6144: 0x00326c85, 0x6145: 0x00327085, 0x6146: 0x00327285, 0x6147: 0x00327685, + 0x6148: 0x00327885, 0x6149: 0x00327a85, 0x614a: 0x00327c85, 0x614b: 0x00327e85, + 0x614c: 0x00328885, 0x614d: 0x00328e85, 0x614e: 0x00328e85, 0x614f: 0x00329685, + 0x6150: 0x00329885, 0x6151: 0x00329a85, 0x6152: 0x00329c85, 0x6153: 0x00329e85, + 0x6154: 0x0032a285, 0x6155: 0x00091c85, 0x6156: 0x00325c85, 0x6157: 0x00326a85, + 0x6158: 0x00327085, 0x6159: 0x00329a85, 0x615a: 0x00328885, 0x615b: 0x00327e85, + 0x615c: 0x0032528b, 0x615d: 0x0032548b, 0x615e: 0x0032568b, 0x615f: 0x00325a8b, + 0x6160: 0x00325c8b, 0x6161: 0x0032648b, 0x6162: 0x0032688b, 0x6163: 0x00326a8b, + 0x6164: 0x00326c8b, 0x6165: 0x0032708b, 0x6166: 0x0032728b, 0x6167: 0x0032768b, + 0x6168: 0x0032788b, 0x6169: 0x00327a8b, 0x616a: 0x00327c8b, 0x616b: 0x00327e8b, + 0x616c: 0x0032888b, 0x616d: 0x00326a8b, 0x616e: 0x00328e8b, 0x616f: 0x0032968b, + 0x6170: 0x0032988b, 0x6171: 0x00329a8b, 0x6172: 0x00329c8b, 0x6173: 0x00329e8b, + 0x6174: 0x0032a28b, 0x6175: 0x00092485, 0x6176: 0x00325285, 0x6177: 0x00325485, + 0x6178: 0x00325685, 0x6179: 0x00325a85, 0x617a: 0x00325c85, 0x617b: 0x00326485, + 0x617c: 0x00326885, 0x617d: 0x00326a85, 0x617e: 0x00326c85, 0x617f: 0x00327085, + // Block 0x186, offset 0x6180 + 0x6180: 0x00327285, 0x6181: 0x00327685, 0x6182: 0x00327885, 0x6183: 0x00327a85, + 0x6184: 0x00327c85, 0x6185: 0x00327e85, 0x6186: 0x00328885, 0x6187: 0x00328e85, + 0x6188: 0x00328e85, 0x6189: 0x00329685, 0x618a: 0x00329885, 0x618b: 0x00329a85, + 0x618c: 0x00329c85, 0x618d: 0x00329e85, 0x618e: 0x0032a285, 0x618f: 0x00091c85, + 0x6190: 0x00325c85, 0x6191: 0x00326a85, 0x6192: 0x00327085, 0x6193: 0x00329a85, + 0x6194: 0x00328885, 0x6195: 0x00327e85, 0x6196: 0x0032528b, 0x6197: 0x0032548b, + 0x6198: 0x0032568b, 0x6199: 0x00325a8b, 0x619a: 0x00325c8b, 0x619b: 0x0032648b, + 0x619c: 0x0032688b, 0x619d: 0x00326a8b, 0x619e: 0x00326c8b, 0x619f: 0x0032708b, + 0x61a0: 0x0032728b, 0x61a1: 0x0032768b, 0x61a2: 0x0032788b, 0x61a3: 0x00327a8b, + 0x61a4: 0x00327c8b, 0x61a5: 0x00327e8b, 0x61a6: 0x0032888b, 0x61a7: 0x00326a8b, + 0x61a8: 0x00328e8b, 0x61a9: 0x0032968b, 0x61aa: 0x0032988b, 0x61ab: 0x00329a8b, + 0x61ac: 0x00329c8b, 0x61ad: 0x00329e8b, 0x61ae: 0x0032a28b, 0x61af: 0x00092485, + 0x61b0: 0x00325285, 0x61b1: 0x00325485, 0x61b2: 0x00325685, 0x61b3: 0x00325a85, + 0x61b4: 0x00325c85, 0x61b5: 0x00326485, 0x61b6: 0x00326885, 0x61b7: 0x00326a85, + 0x61b8: 0x00326c85, 0x61b9: 0x00327085, 0x61ba: 0x00327285, 0x61bb: 0x00327685, + 0x61bc: 0x00327885, 0x61bd: 0x00327a85, 0x61be: 0x00327c85, 0x61bf: 0x00327e85, + // Block 0x187, offset 0x61c0 + 0x61c0: 0x00328885, 0x61c1: 0x00328e85, 0x61c2: 0x00328e85, 0x61c3: 0x00329685, + 0x61c4: 0x00329885, 0x61c5: 0x00329a85, 0x61c6: 0x00329c85, 0x61c7: 0x00329e85, + 0x61c8: 0x0032a285, 0x61c9: 0x00091c85, 0x61ca: 0x00325c85, 0x61cb: 0x00326a85, + 0x61cc: 0x00327085, 0x61cd: 0x00329a85, 0x61ce: 0x00328885, 0x61cf: 0x00327e85, + 0x61d0: 0x0032528b, 0x61d1: 0x0032548b, 0x61d2: 0x0032568b, 0x61d3: 0x00325a8b, + 0x61d4: 0x00325c8b, 0x61d5: 0x0032648b, 0x61d6: 0x0032688b, 0x61d7: 0x00326a8b, + 0x61d8: 0x00326c8b, 0x61d9: 0x0032708b, 0x61da: 0x0032728b, 0x61db: 0x0032768b, + 0x61dc: 0x0032788b, 0x61dd: 0x00327a8b, 0x61de: 0x00327c8b, 0x61df: 0x00327e8b, + 0x61e0: 0x0032888b, 0x61e1: 0x00326a8b, 0x61e2: 0x00328e8b, 0x61e3: 0x0032968b, + 0x61e4: 0x0032988b, 0x61e5: 0x00329a8b, 0x61e6: 0x00329c8b, 0x61e7: 0x00329e8b, + 0x61e8: 0x0032a28b, 0x61e9: 0x00092485, 0x61ea: 0x00325285, 0x61eb: 0x00325485, + 0x61ec: 0x00325685, 0x61ed: 0x00325a85, 0x61ee: 0x00325c85, 0x61ef: 0x00326485, + 0x61f0: 0x00326885, 0x61f1: 0x00326a85, 0x61f2: 0x00326c85, 0x61f3: 0x00327085, + 0x61f4: 0x00327285, 0x61f5: 0x00327685, 0x61f6: 0x00327885, 0x61f7: 0x00327a85, + 0x61f8: 0x00327c85, 0x61f9: 0x00327e85, 0x61fa: 0x00328885, 0x61fb: 0x00328e85, + 0x61fc: 0x00328e85, 0x61fd: 0x00329685, 0x61fe: 0x00329885, 0x61ff: 0x00329a85, + // Block 0x188, offset 0x6200 + 0x6200: 0x00329c85, 0x6201: 0x00329e85, 0x6202: 0x0032a285, 0x6203: 0x00091c85, + 0x6204: 0x00325c85, 0x6205: 0x00326a85, 0x6206: 0x00327085, 0x6207: 0x00329a85, + 0x6208: 0x00328885, 0x6209: 0x00327e85, 0x620a: 0x00325e8b, 0x620b: 0x00325e85, + 0x620e: 0x0029cc85, 0x620f: 0x0029ce85, + 0x6210: 0x0029d085, 0x6211: 0x0029d285, 0x6212: 0x0029d485, 0x6213: 0x0029d685, + 0x6214: 0x0029d885, 0x6215: 0x0029da85, 0x6216: 0x0029dc85, 0x6217: 0x0029de85, + 0x6218: 0x0029cc85, 0x6219: 0x0029ce85, 0x621a: 0x0029d085, 0x621b: 0x0029d285, + 0x621c: 0x0029d485, 0x621d: 0x0029d685, 0x621e: 0x0029d885, 0x621f: 0x0029da85, + 0x6220: 0x0029dc85, 0x6221: 0x0029de85, 0x6222: 0x0029cc85, 0x6223: 0x0029ce85, + 0x6224: 0x0029d085, 0x6225: 0x0029d285, 0x6226: 0x0029d485, 0x6227: 0x0029d685, + 0x6228: 0x0029d885, 0x6229: 0x0029da85, 0x622a: 0x0029dc85, 0x622b: 0x0029de85, + 0x622c: 0x0029cc85, 0x622d: 0x0029ce85, 0x622e: 0x0029d085, 0x622f: 0x0029d285, + 0x6230: 0x0029d485, 0x6231: 0x0029d685, 0x6232: 0x0029d885, 0x6233: 0x0029da85, + 0x6234: 0x0029dc85, 0x6235: 0x0029de85, 0x6236: 0x0029cc85, 0x6237: 0x0029ce85, + 0x6238: 0x0029d085, 0x6239: 0x0029d285, 0x623a: 0x0029d485, 0x623b: 0x0029d685, + 0x623c: 0x0029d885, 0x623d: 0x0029da85, 0x623e: 0x0029dc85, 0x623f: 0x0029de85, + // Block 0x189, offset 0x6240 + 0x6240: 0x00393885, 0x6241: 0x00393c85, 0x6242: 0x00396485, 0x6243: 0x00398885, + 0x6245: 0x003a7485, 0x6246: 0x0039a685, 0x6247: 0x00397285, + 0x6248: 0x0039e685, 0x6249: 0x003a9085, 0x624a: 0x003a1a85, 0x624b: 0x003a4085, + 0x624c: 0x003a4e85, 0x624d: 0x003a5685, 0x624e: 0x0039c685, 0x624f: 0x0039ee85, + 0x6250: 0x0039fc85, 0x6251: 0x0039dc85, 0x6252: 0x003a1285, 0x6253: 0x0039a485, + 0x6254: 0x0039c885, 0x6255: 0x00395685, 0x6256: 0x00395885, 0x6257: 0x00397485, + 0x6258: 0x00398a85, 0x6259: 0x0039de85, 0x625a: 0x0039e885, 0x625b: 0x0039f085, + 0x625c: 0x00393a85, 0x625d: 0x003a5885, 0x625e: 0x0039fe85, 0x625f: 0x003a1085, + 0x6261: 0x00393c85, 0x6262: 0x00396485, + 0x6264: 0x003a6885, 0x6267: 0x00397285, + 0x6269: 0x003a9085, 0x626a: 0x003a1a85, 0x626b: 0x003a4085, + 0x626c: 0x003a4e85, 0x626d: 0x003a5685, 0x626e: 0x0039c685, 0x626f: 0x0039ee85, + 0x6270: 0x0039fc85, 0x6271: 0x0039dc85, 0x6272: 0x003a1285, + 0x6274: 0x0039c885, 0x6275: 0x00395685, 0x6276: 0x00395885, 0x6277: 0x00397485, + 0x6279: 0x0039de85, 0x627b: 0x0039f085, + // Block 0x18a, offset 0x6280 + 0x6282: 0x00396485, + 0x6287: 0x00397285, + 0x6289: 0x003a9085, 0x628b: 0x003a4085, + 0x628d: 0x003a5685, 0x628e: 0x0039c685, 0x628f: 0x0039ee85, + 0x6291: 0x0039dc85, 0x6292: 0x003a1285, + 0x6294: 0x0039c885, 0x6297: 0x00397485, + 0x6299: 0x0039de85, 0x629b: 0x0039f085, + 0x629d: 0x003a5885, 0x629f: 0x003a1085, + 0x62a1: 0x00393c85, 0x62a2: 0x00396485, + 0x62a4: 0x003a6885, 0x62a7: 0x00397285, + 0x62a8: 0x0039e685, 0x62a9: 0x003a9085, 0x62aa: 0x003a1a85, + 0x62ac: 0x003a4e85, 0x62ad: 0x003a5685, 0x62ae: 0x0039c685, 0x62af: 0x0039ee85, + 0x62b0: 0x0039fc85, 0x62b1: 0x0039dc85, 0x62b2: 0x003a1285, + 0x62b4: 0x0039c885, 0x62b5: 0x00395685, 0x62b6: 0x00395885, 0x62b7: 0x00397485, + 0x62b9: 0x0039de85, 0x62ba: 0x0039e885, 0x62bb: 0x0039f085, + 0x62bc: 0x00393a85, 0x62be: 0x0039fe85, + // Block 0x18b, offset 0x62c0 + 0x62c0: 0x00393885, 0x62c1: 0x00393c85, 0x62c2: 0x00396485, 0x62c3: 0x00398885, + 0x62c4: 0x003a6885, 0x62c5: 0x003a7485, 0x62c6: 0x0039a685, 0x62c7: 0x00397285, + 0x62c8: 0x0039e685, 0x62c9: 0x003a9085, 0x62cb: 0x003a4085, + 0x62cc: 0x003a4e85, 0x62cd: 0x003a5685, 0x62ce: 0x0039c685, 0x62cf: 0x0039ee85, + 0x62d0: 0x0039fc85, 0x62d1: 0x0039dc85, 0x62d2: 0x003a1285, 0x62d3: 0x0039a485, + 0x62d4: 0x0039c885, 0x62d5: 0x00395685, 0x62d6: 0x00395885, 0x62d7: 0x00397485, + 0x62d8: 0x00398a85, 0x62d9: 0x0039de85, 0x62da: 0x0039e885, 0x62db: 0x0039f085, + 0x62e1: 0x00393c85, 0x62e2: 0x00396485, 0x62e3: 0x00398885, + 0x62e5: 0x003a7485, 0x62e6: 0x0039a685, 0x62e7: 0x00397285, + 0x62e8: 0x0039e685, 0x62e9: 0x003a9085, 0x62eb: 0x003a4085, + 0x62ec: 0x003a4e85, 0x62ed: 0x003a5685, 0x62ee: 0x0039c685, 0x62ef: 0x0039ee85, + 0x62f0: 0x0039fc85, 0x62f1: 0x0039dc85, 0x62f2: 0x003a1285, 0x62f3: 0x0039a485, + 0x62f4: 0x0039c885, 0x62f5: 0x00395685, 0x62f6: 0x00395885, 0x62f7: 0x00397485, + 0x62f8: 0x00398a85, 0x62f9: 0x0039de85, 0x62fa: 0x0039e885, 0x62fb: 0x0039f085, + // Block 0x18c, offset 0x6300 + 0x6330: 0x40070a20, 0x6331: 0x40070c20, + // Block 0x18d, offset 0x6340 + 0x6340: 0x401f6e20, 0x6341: 0x401f7020, 0x6342: 0x401f7220, 0x6343: 0x401f7420, + 0x6344: 0x401f7620, 0x6345: 0x401f7820, 0x6346: 0x401f7a20, 0x6347: 0x401f7c20, + 0x6348: 0x401f7e20, 0x6349: 0x401f8020, 0x634a: 0x401f8220, 0x634b: 0x401f8420, + 0x634c: 0x401f8620, 0x634d: 0x401f8820, 0x634e: 0x401f8a20, 0x634f: 0x401f8c20, + 0x6350: 0x401f8e20, 0x6351: 0x401f9020, 0x6352: 0x401f9220, 0x6353: 0x401f9420, + 0x6354: 0x401f9620, 0x6355: 0x401f9820, 0x6356: 0x401f9a20, 0x6357: 0x401f9c20, + 0x6358: 0x401f9e20, 0x6359: 0x401fa020, 0x635a: 0x401fa220, 0x635b: 0x401fa420, + 0x635c: 0x401fa620, 0x635d: 0x401fa820, 0x635e: 0x401faa20, 0x635f: 0x401fac20, + 0x6360: 0x401fae20, 0x6361: 0x401fb020, 0x6362: 0x401fb220, 0x6363: 0x401fb420, + 0x6364: 0x401fb620, 0x6365: 0x401fb820, 0x6366: 0x401fba20, 0x6367: 0x401fbc20, + 0x6368: 0x401fbe20, 0x6369: 0x401fc020, 0x636a: 0x401fc220, 0x636b: 0x401fc420, + 0x6370: 0x401fc620, 0x6371: 0x401fc820, 0x6372: 0x401fca20, 0x6373: 0x401fcc20, + 0x6374: 0x401fce20, 0x6375: 0x401fd020, 0x6376: 0x401fd220, 0x6377: 0x401fd420, + 0x6378: 0x401fd620, 0x6379: 0x401fd820, 0x637a: 0x401fda20, 0x637b: 0x401fdc20, + 0x637c: 0x401fde20, 0x637d: 0x401fe020, 0x637e: 0x401fe220, 0x637f: 0x401fe420, + // Block 0x18e, offset 0x6380 + 0x6380: 0x401fe620, 0x6381: 0x401fe820, 0x6382: 0x401fea20, 0x6383: 0x401fec20, + 0x6384: 0x401fee20, 0x6385: 0x401ff020, 0x6386: 0x401ff220, 0x6387: 0x401ff420, + 0x6388: 0x401ff620, 0x6389: 0x401ff820, 0x638a: 0x401ffa20, 0x638b: 0x401ffc20, + 0x638c: 0x401ffe20, 0x638d: 0x40200020, 0x638e: 0x40200220, 0x638f: 0x40200420, + 0x6390: 0x40200620, 0x6391: 0x40200820, 0x6392: 0x40200a20, 0x6393: 0x40200c20, + 0x6394: 0x40200e20, 0x6395: 0x40201020, 0x6396: 0x40201220, 0x6397: 0x40201420, + 0x6398: 0x40201620, 0x6399: 0x40201820, 0x639a: 0x40201a20, 0x639b: 0x40201c20, + 0x639c: 0x40201e20, 0x639d: 0x40202020, 0x639e: 0x40202220, 0x639f: 0x40202420, + 0x63a0: 0x40202620, 0x63a1: 0x40202820, 0x63a2: 0x40202a20, 0x63a3: 0x40202c20, + 0x63a4: 0x40202e20, 0x63a5: 0x40203020, 0x63a6: 0x40203220, 0x63a7: 0x40203420, + 0x63a8: 0x40203620, 0x63a9: 0x40203820, 0x63aa: 0x40203a20, 0x63ab: 0x40203c20, + 0x63ac: 0x40203e20, 0x63ad: 0x40204020, 0x63ae: 0x40204220, 0x63af: 0x40204420, + 0x63b0: 0x40204620, 0x63b1: 0x40204820, 0x63b2: 0x40204a20, 0x63b3: 0x40204c20, + 0x63b4: 0x40204e20, 0x63b5: 0x40205020, 0x63b6: 0x40205220, 0x63b7: 0x40205420, + 0x63b8: 0x40205620, 0x63b9: 0x40205820, 0x63ba: 0x40205a20, 0x63bb: 0x40205c20, + 0x63bc: 0x40205e20, 0x63bd: 0x40206020, 0x63be: 0x40206220, 0x63bf: 0x40206420, + // Block 0x18f, offset 0x63c0 + 0x63c0: 0x40206620, 0x63c1: 0x40206820, 0x63c2: 0x40206a20, 0x63c3: 0x40206c20, + 0x63c4: 0x40206e20, 0x63c5: 0x40207020, 0x63c6: 0x40207220, 0x63c7: 0x40207420, + 0x63c8: 0x40207620, 0x63c9: 0x40207820, 0x63ca: 0x40207a20, 0x63cb: 0x40207c20, + 0x63cc: 0x40207e20, 0x63cd: 0x40208020, 0x63ce: 0x40208220, 0x63cf: 0x40208420, + 0x63d0: 0x40208620, 0x63d1: 0x40208820, 0x63d2: 0x40208a20, 0x63d3: 0x40208c20, + 0x63e0: 0x40208e20, 0x63e1: 0x40209020, 0x63e2: 0x40209220, 0x63e3: 0x40209420, + 0x63e4: 0x40209620, 0x63e5: 0x40209820, 0x63e6: 0x40209a20, 0x63e7: 0x40209c20, + 0x63e8: 0x40209e20, 0x63e9: 0x4020a020, 0x63ea: 0x4020a220, 0x63eb: 0x4020a420, + 0x63ec: 0x4020a620, 0x63ed: 0x4020a820, 0x63ee: 0x4020aa20, + 0x63f1: 0x4020ac20, 0x63f2: 0x4020ae20, 0x63f3: 0x4020b020, + 0x63f4: 0x4020b220, 0x63f5: 0x4020b420, 0x63f6: 0x4020b620, 0x63f7: 0x4020b820, + 0x63f8: 0x4020ba20, 0x63f9: 0x4020bc20, 0x63fa: 0x4020be20, 0x63fb: 0x4020c020, + 0x63fc: 0x4020c220, 0x63fd: 0x4020c420, 0x63fe: 0x4020c620, + // Block 0x190, offset 0x6400 + 0x6401: 0x4020c820, 0x6402: 0x4020ca20, 0x6403: 0x4020cc20, + 0x6404: 0x4020ce20, 0x6405: 0x4020d020, 0x6406: 0x4020d220, 0x6407: 0x4020d420, + 0x6408: 0x4020d620, 0x6409: 0x4020d820, 0x640a: 0x4020da20, 0x640b: 0x4020dc20, + 0x640c: 0x4020de20, 0x640d: 0x4020e020, 0x640e: 0x4020e220, 0x640f: 0x4020e420, + 0x6411: 0x4020e620, 0x6412: 0x4020e820, 0x6413: 0x4020ea20, + 0x6414: 0x4020ec20, 0x6415: 0x4020ee20, 0x6416: 0x4020f020, 0x6417: 0x4020f220, + 0x6418: 0x4020f420, 0x6419: 0x4020f620, 0x641a: 0x4020f820, 0x641b: 0x4020fa20, + 0x641c: 0x4020fc20, 0x641d: 0x4020fe20, 0x641e: 0x40210020, 0x641f: 0x40210220, + // Block 0x191, offset 0x6440 + 0x6440: 0xf0001f04, 0x6441: 0xf0001f04, 0x6442: 0xf0001f04, 0x6443: 0xf0001f04, + 0x6444: 0xf0001f04, 0x6445: 0xf0001f04, 0x6446: 0xf0001f04, 0x6447: 0xf0001f04, + 0x6448: 0xf0001f04, 0x6449: 0xf0001f04, 0x644a: 0xf0001f04, + 0x6450: 0xf0000a04, 0x6451: 0xf0000a04, 0x6452: 0xf0000a04, 0x6453: 0xf0000a04, + 0x6454: 0xf0000a04, 0x6455: 0xf0000a04, 0x6456: 0xf0000a04, 0x6457: 0xf0000a04, + 0x6458: 0xf0000a04, 0x6459: 0xf0000a04, 0x645a: 0xf0000a04, 0x645b: 0xf0000a04, + 0x645c: 0xf0000a04, 0x645d: 0xf0000a04, 0x645e: 0xf0000a04, 0x645f: 0xf0000a04, + 0x6460: 0xf0000a04, 0x6461: 0xf0000a04, 0x6462: 0xf0000a04, 0x6463: 0xf0000a04, + 0x6464: 0xf0000a04, 0x6465: 0xf0000a04, 0x6466: 0xf0000a04, 0x6467: 0xf0000a04, + 0x6468: 0xf0000a04, 0x6469: 0xf0000a04, 0x646a: 0xf0000a04, 0x646b: 0x002c3a8c, + 0x646c: 0x002f7a8c, 0x646d: 0xf0000c0c, 0x646e: 0xf0000c0c, + 0x6470: 0x002bde9d, 0x6471: 0x002c0a9d, 0x6472: 0x002c3a9d, 0x6473: 0x002c629d, + 0x6474: 0x002c989d, 0x6475: 0x002d089d, 0x6476: 0x002d229d, 0x6477: 0x002d689d, + 0x6478: 0x002d9a9d, 0x6479: 0x002dcc9d, 0x647a: 0x002dfe9d, 0x647b: 0x002e229d, + 0x647c: 0x002e829d, 0x647d: 0x002e9e9d, 0x647e: 0x002ee29d, 0x647f: 0x002f2c9d, + // Block 0x192, offset 0x6480 + 0x6480: 0x002f569d, 0x6481: 0x002f7a9d, 0x6482: 0x002fe69d, 0x6483: 0x00302c9d, + 0x6484: 0x00306c9d, 0x6485: 0x0030be9d, 0x6486: 0x0030e29d, 0x6487: 0x0030f69d, + 0x6488: 0x0031009d, 0x6489: 0x00312a9d, 0x648a: 0xf0001d1d, 0x648b: 0xf0001d1d, + 0x648c: 0xf0001d1d, 0x648d: 0xf0001d1d, 0x648e: 0xe0000ebc, 0x648f: 0xf0001d1d, + 0x6490: 0x002bde8c, 0x6491: 0x002c0a8c, 0x6492: 0x002c3a8c, 0x6493: 0x002c628c, + 0x6494: 0x002c988c, 0x6495: 0x002d088c, 0x6496: 0x002d228c, 0x6497: 0x002d688c, + 0x6498: 0x002d9a8c, 0x6499: 0x002dcc8c, 0x649a: 0x002dfe8c, 0x649b: 0x002e228c, + 0x649c: 0x002e828c, 0x649d: 0x002e9e8c, 0x649e: 0x002ee28c, 0x649f: 0x002f2c8c, + 0x64a0: 0x002f568c, 0x64a1: 0x002f7a8c, 0x64a2: 0x002fe68c, 0x64a3: 0x00302c8c, + 0x64a4: 0x00306c8c, 0x64a5: 0x0030be8c, 0x64a6: 0x0030e28c, 0x64a7: 0x0030f68c, + 0x64a8: 0x0031008c, 0x64a9: 0x00312a8c, 0x64aa: 0xf0001414, 0x64ab: 0xf0001414, + 0x64b0: 0x002bde9d, 0x64b1: 0x002c0a9d, 0x64b2: 0x002c3a9d, 0x64b3: 0x002c629d, + 0x64b4: 0x002c989d, 0x64b5: 0x002d089d, 0x64b6: 0x002d229d, 0x64b7: 0x002d689d, + 0x64b8: 0x002d9a9d, 0x64b9: 0x002dcc9d, 0x64ba: 0x002dfe9d, 0x64bb: 0x002e229d, + 0x64bc: 0x002e829d, 0x64bd: 0x002e9e9d, 0x64be: 0x002ee29d, 0x64bf: 0x002f2c9d, + // Block 0x193, offset 0x64c0 + 0x64c0: 0x002f569d, 0x64c1: 0x002f7a9d, 0x64c2: 0x002fe69d, 0x64c3: 0x00302c9d, + 0x64c4: 0x00306c9d, 0x64c5: 0x0030be9d, 0x64c6: 0x0030e29d, 0x64c7: 0x0030f69d, + 0x64c8: 0x0031009d, 0x64c9: 0x00312a9d, 0x64ca: 0x002f2c9d, 0x64cb: 0xe0000c81, + 0x64cc: 0xe0000eb5, 0x64cd: 0xe0000f74, 0x64ce: 0xe00009d2, 0x64cf: 0xe00010f0, + 0x64d0: 0xf0001d1d, 0x64d1: 0xe0000a6f, 0x64d2: 0xe0000a7e, 0x64d3: 0xe0000ba4, + 0x64d4: 0xe0000c84, 0x64d5: 0xe0000d8a, 0x64d6: 0xe0000d8e, 0x64d7: 0xe0000e9b, + 0x64d8: 0xe0000f77, 0x64d9: 0xe00010a2, 0x64da: 0xe00010c0, + // Block 0x194, offset 0x6500 + 0x6526: 0x40110c20, 0x6527: 0x40110e20, + 0x6528: 0x40111020, 0x6529: 0x40111220, 0x652a: 0x40111420, 0x652b: 0x40111620, + 0x652c: 0x40111820, 0x652d: 0x40111a20, 0x652e: 0x40111c20, 0x652f: 0x40111e20, + 0x6530: 0x40112020, 0x6531: 0x40112220, 0x6532: 0x40112420, 0x6533: 0x40112620, + 0x6534: 0x40112820, 0x6535: 0x40112a20, 0x6536: 0x40112c20, 0x6537: 0x40112e20, + 0x6538: 0x40113020, 0x6539: 0x40113220, 0x653a: 0x40113420, 0x653b: 0x40113620, + 0x653c: 0x40113820, 0x653d: 0x40113a20, 0x653e: 0x40113c20, 0x653f: 0x40113e20, + // Block 0x195, offset 0x6540 + 0x6540: 0xf0001c1c, 0x6541: 0xf0001c1c, 0x6542: 0x00658c9c, + 0x6550: 0x02c4969c, 0x6551: 0x02b6ae9c, 0x6552: 0x02a7989c, 0x6553: 0xf0001c1c, + 0x6554: 0x029d189c, 0x6555: 0x02b2349c, 0x6556: 0x0313c69c, 0x6557: 0x02b2529c, + 0x6558: 0x029d489c, 0x6559: 0x02cc409c, 0x655a: 0x02e2429c, 0x655b: 0x02cb329c, + 0x655c: 0x02a49a9c, 0x655d: 0x02bf189c, 0x655e: 0x02a31a9c, 0x655f: 0x02cb609c, + 0x6560: 0x02a43a9c, 0x6561: 0x02fa849c, 0x6562: 0x02ea3e9c, 0x6563: 0x0319529c, + 0x6564: 0x02b1e09c, 0x6565: 0x02a8729c, 0x6566: 0x02de289c, 0x6567: 0x02c52a9c, + 0x6568: 0x02c6aa9c, 0x6569: 0x029c009c, 0x656a: 0x029c129c, 0x656b: 0x0320949c, + 0x656c: 0x02bbcc9c, 0x656d: 0x029c5a9c, 0x656e: 0x02a7e69c, 0x656f: 0x02c60e9c, + 0x6570: 0x031ae09c, 0x6571: 0x02c4a69c, 0x6572: 0x02f3029c, 0x6573: 0x02f4f49c, + 0x6574: 0x02a8109c, 0x6575: 0x02dd009c, 0x6576: 0x02ce129c, 0x6577: 0x02ce109c, + 0x6578: 0x02ea669c, 0x6579: 0x02a4e49c, 0x657a: 0x02ab6c9c, + // Block 0x196, offset 0x6580 + 0x6580: 0xf0000404, 0x6581: 0xf0000404, 0x6582: 0xf0000404, 0x6583: 0xf0000404, + 0x6584: 0xf0000404, 0x6585: 0xf0000404, 0x6586: 0xf0000404, 0x6587: 0xf0000404, + 0x6588: 0xf0000404, + 0x6590: 0x02bf2e86, 0x6591: 0x02a7de86, + // Block 0x197, offset 0x65c0 + 0x65c0: 0x40210420, 0x65c1: 0x40210620, 0x65c2: 0x40210820, 0x65c3: 0x40210a20, + 0x65c4: 0x40210c20, 0x65c5: 0x40210e20, 0x65c6: 0x40211020, 0x65c7: 0x40211220, + 0x65c8: 0x40211420, 0x65c9: 0x40211620, 0x65ca: 0x40211820, 0x65cb: 0x40211a20, + 0x65cc: 0x40211c20, 0x65cd: 0x40211e20, 0x65ce: 0x40212020, 0x65cf: 0x40212220, + 0x65d0: 0x40212420, 0x65d1: 0x40212620, 0x65d2: 0x40212820, 0x65d3: 0x40212a20, + 0x65d4: 0x40212c20, 0x65d5: 0x40212e20, 0x65d6: 0x40213020, 0x65d7: 0x40213220, + 0x65d8: 0x40213420, 0x65d9: 0x40213620, 0x65da: 0x40213820, 0x65db: 0x40213a20, + 0x65dc: 0x40213c20, 0x65dd: 0x40213e20, 0x65de: 0x40214020, 0x65df: 0x40214220, + 0x65e0: 0x40214420, + 0x65f0: 0x40214620, 0x65f1: 0x40214820, 0x65f2: 0x40214a20, 0x65f3: 0x40214c20, + 0x65f4: 0x40214e20, 0x65f5: 0x40215020, 0x65f7: 0x40215220, + 0x65f8: 0x40215420, 0x65f9: 0x40215620, 0x65fa: 0x40215820, 0x65fb: 0x40215a20, + 0x65fc: 0x40215c20, 0x65fd: 0x40215e20, 0x65fe: 0x40216020, 0x65ff: 0x40216220, + // Block 0x198, offset 0x6600 + 0x6600: 0x40216420, 0x6601: 0x40216620, 0x6602: 0x40216820, 0x6603: 0x40216a20, + 0x6604: 0x40216c20, 0x6605: 0x40216e20, 0x6606: 0x40217020, 0x6607: 0x40217220, + 0x6608: 0x40217420, 0x6609: 0x40217620, 0x660a: 0x40217820, 0x660b: 0x40217a20, + 0x660c: 0x40217c20, 0x660d: 0x40217e20, 0x660e: 0x40218020, 0x660f: 0x40218220, + 0x6610: 0x40218420, 0x6611: 0x40218620, 0x6612: 0x40218820, 0x6613: 0x40218a20, + 0x6614: 0x40218c20, 0x6615: 0x40218e20, 0x6616: 0x40219020, 0x6617: 0x40219220, + 0x6618: 0x40219420, 0x6619: 0x40219620, 0x661a: 0x40219820, 0x661b: 0x40219a20, + 0x661c: 0x40219c20, 0x661d: 0x40219e20, 0x661e: 0x4021a020, 0x661f: 0x4021a220, + 0x6620: 0x4021a420, 0x6621: 0x4021a620, 0x6622: 0x4021a820, 0x6623: 0x4021aa20, + 0x6624: 0x4021ac20, 0x6625: 0x4021ae20, 0x6626: 0x4021b020, 0x6627: 0x4021b220, + 0x6628: 0x4021b420, 0x6629: 0x4021b620, 0x662a: 0x4021b820, 0x662b: 0x4021ba20, + 0x662c: 0x4021bc20, 0x662d: 0x4021be20, 0x662e: 0x4021c020, 0x662f: 0x4021c220, + 0x6630: 0x4021c420, 0x6631: 0x4021c620, 0x6632: 0x4021c820, 0x6633: 0x4021ca20, + 0x6634: 0x4021cc20, 0x6635: 0x4021ce20, 0x6636: 0x4021d020, 0x6637: 0x4021d220, + 0x6638: 0x4021d420, 0x6639: 0x4021d620, 0x663a: 0x4021d820, 0x663b: 0x4021da20, + 0x663c: 0x4021dc20, + // Block 0x199, offset 0x6640 + 0x6640: 0x4021de20, 0x6641: 0x4021e020, 0x6642: 0x4021e220, 0x6643: 0x4021e420, + 0x6644: 0x4021e620, 0x6645: 0x4021e820, 0x6646: 0x4021ea20, 0x6647: 0x4021ec20, + 0x6648: 0x4021ee20, 0x6649: 0x4021f020, 0x664a: 0x4021f220, 0x664b: 0x4021f420, + 0x664c: 0x4021f620, 0x664d: 0x4021f820, 0x664e: 0x4021fa20, 0x664f: 0x4021fc20, + 0x6650: 0x4021fe20, 0x6651: 0x40220020, 0x6652: 0x40220220, 0x6653: 0x40220420, + 0x6660: 0x40220620, 0x6661: 0x40220820, 0x6662: 0x40220a20, 0x6663: 0x40220c20, + 0x6664: 0x40220e20, 0x6665: 0x40221020, 0x6666: 0x40221220, 0x6667: 0x40221420, + 0x6668: 0x40221620, 0x6669: 0x40221820, 0x666a: 0x40221a20, 0x666b: 0x40221c20, + 0x666c: 0x40221e20, 0x666d: 0x40222020, 0x666e: 0x40222220, 0x666f: 0x40222420, + 0x6670: 0x40222620, 0x6671: 0x40222820, 0x6672: 0x40222a20, 0x6673: 0x40222c20, + 0x6674: 0x40222e20, 0x6675: 0x40223020, 0x6676: 0x40223220, 0x6677: 0x40223420, + 0x6678: 0x40223620, 0x6679: 0x40223820, 0x667a: 0x40223a20, 0x667b: 0x40223c20, + 0x667c: 0x40223e20, 0x667d: 0x40224020, 0x667e: 0x40224220, 0x667f: 0x40224420, + // Block 0x19a, offset 0x6680 + 0x6680: 0x40224620, 0x6681: 0x40224820, 0x6682: 0x40224a20, 0x6683: 0x40224c20, + 0x6684: 0x40224e20, 0x6686: 0x40225020, 0x6687: 0x40225220, + 0x6688: 0x40225420, 0x6689: 0x40225620, 0x668a: 0x40225820, + 0x66a0: 0x40225a20, 0x66a1: 0x40225c20, 0x66a2: 0x40225e20, 0x66a3: 0x40226020, + 0x66a4: 0x40226220, 0x66a5: 0x40226420, 0x66a6: 0x40226620, 0x66a7: 0x40226820, + 0x66a8: 0x40226a20, 0x66a9: 0x40226c20, 0x66aa: 0x40226e20, 0x66ab: 0x40227020, + 0x66ac: 0x40227220, 0x66ad: 0x40227420, 0x66ae: 0x40227620, 0x66af: 0x40227820, + 0x66b0: 0x40227a20, + // Block 0x19b, offset 0x66c0 + 0x66c0: 0x40227c20, 0x66c1: 0x40227e20, 0x66c2: 0x40228020, 0x66c3: 0x40228220, + 0x66c4: 0x40228420, 0x66c5: 0x40228620, 0x66c6: 0x40228820, 0x66c7: 0x40228a20, + 0x66c8: 0x40228c20, 0x66c9: 0x40228e20, 0x66ca: 0x40229020, 0x66cb: 0x40229220, + 0x66cc: 0x40229420, 0x66cd: 0x40229620, 0x66ce: 0x40229820, 0x66cf: 0x40229a20, + 0x66d0: 0x40229c20, 0x66d1: 0x40229e20, 0x66d2: 0x4022a020, 0x66d3: 0x4022a220, + 0x66d4: 0x4022a420, 0x66d5: 0x4022a620, 0x66d6: 0x4022a820, 0x66d7: 0x4022aa20, + 0x66d8: 0x4022ac20, 0x66d9: 0x4022ae20, 0x66da: 0x4022b020, 0x66db: 0x4022b220, + 0x66dc: 0x4022b420, 0x66dd: 0x4022b620, 0x66de: 0x4022b820, 0x66df: 0x4022ba20, + 0x66e0: 0x4022bc20, 0x66e1: 0x4022be20, 0x66e2: 0x4022c020, 0x66e3: 0x4022c220, + 0x66e4: 0x4022c420, 0x66e5: 0x4022c620, 0x66e6: 0x4022c820, 0x66e7: 0x4022ca20, + 0x66e8: 0x4022cc20, 0x66e9: 0x4022ce20, 0x66ea: 0x4022d020, 0x66eb: 0x4022d220, + 0x66ec: 0x4022d420, 0x66ed: 0x4022d620, 0x66ee: 0x4022d820, 0x66ef: 0x4022da20, + 0x66f0: 0x4022dc20, 0x66f1: 0x4022de20, 0x66f2: 0x4022e020, 0x66f3: 0x4022e220, + 0x66f4: 0x4022e420, 0x66f5: 0x4022e620, 0x66f6: 0x4022e820, 0x66f7: 0x4022ea20, + 0x66f8: 0x4022ec20, 0x66f9: 0x4022ee20, 0x66fa: 0x4022f020, 0x66fb: 0x4022f220, + 0x66fc: 0x4022f420, 0x66fd: 0x4022f620, 0x66fe: 0x4022f820, + // Block 0x19c, offset 0x6700 + 0x6700: 0x4022fa20, 0x6702: 0x4022fc20, 0x6703: 0x4022fe20, + 0x6704: 0x40230020, 0x6705: 0x40230220, 0x6706: 0x40230420, 0x6707: 0x40230620, + 0x6708: 0x40230820, 0x6709: 0x40230a20, 0x670a: 0x40230c20, 0x670b: 0x40230e20, + 0x670c: 0x40231020, 0x670d: 0x40231220, 0x670e: 0x40231420, 0x670f: 0x40231620, + 0x6710: 0x40231820, 0x6711: 0x40231a20, 0x6712: 0x40231c20, 0x6713: 0x40231e20, + 0x6714: 0x40232020, 0x6715: 0x40232220, 0x6716: 0x40232420, 0x6717: 0x40232620, + 0x6718: 0x40232820, 0x6719: 0x40232a20, 0x671a: 0x40232c20, 0x671b: 0x40232e20, + 0x671c: 0x40233020, 0x671d: 0x40233220, 0x671e: 0x40233420, 0x671f: 0x40233620, + 0x6720: 0x40233820, 0x6721: 0x40233a20, 0x6722: 0x40233c20, 0x6723: 0x40233e20, + 0x6724: 0x40234020, 0x6725: 0x40234220, 0x6726: 0x40234420, 0x6727: 0x40234620, + 0x6728: 0x40234820, 0x6729: 0x40234a20, 0x672a: 0x40234c20, 0x672b: 0x40234e20, + 0x672c: 0x40235020, 0x672d: 0x40235220, 0x672e: 0x40235420, 0x672f: 0x40235620, + 0x6730: 0x40235820, 0x6731: 0x40235a20, 0x6732: 0x40235c20, 0x6733: 0x40235e20, + 0x6734: 0x40236020, 0x6735: 0x40236220, 0x6736: 0x40236420, 0x6737: 0x40236620, + 0x6738: 0x40236820, 0x6739: 0x40236a20, 0x673a: 0x40236c20, 0x673b: 0x40236e20, + 0x673c: 0x40237020, 0x673d: 0x40237220, 0x673e: 0x40237420, 0x673f: 0x40237620, + // Block 0x19d, offset 0x6740 + 0x6740: 0x40237820, 0x6741: 0x40237a20, 0x6742: 0x40237c20, 0x6743: 0x40237e20, + 0x6744: 0x40238020, 0x6745: 0x40238220, 0x6746: 0x40238420, 0x6747: 0x40238620, + 0x6748: 0x40238820, 0x6749: 0x40238a20, 0x674a: 0x40238c20, 0x674b: 0x40238e20, + 0x674c: 0x40239020, 0x674d: 0x40239220, 0x674e: 0x40239420, 0x674f: 0x40239620, + 0x6750: 0x40239820, 0x6751: 0x40239a20, 0x6752: 0x40239c20, 0x6753: 0x40239e20, + 0x6754: 0x4023a020, 0x6755: 0x4023a220, 0x6756: 0x4023a420, 0x6757: 0x4023a620, + 0x6758: 0x4023a820, 0x6759: 0x4023aa20, 0x675a: 0x4023ac20, 0x675b: 0x4023ae20, + 0x675c: 0x4023b020, 0x675d: 0x4023b220, 0x675e: 0x4023b420, 0x675f: 0x4023b620, + 0x6760: 0x4023b820, 0x6761: 0x4023ba20, 0x6762: 0x4023bc20, 0x6763: 0x4023be20, + 0x6764: 0x4023c020, 0x6765: 0x4023c220, 0x6766: 0x4023c420, 0x6767: 0x4023c620, + 0x6768: 0x4023c820, 0x6769: 0x4023ca20, 0x676a: 0x4023cc20, 0x676b: 0x4023ce20, + 0x676c: 0x4023d020, 0x676d: 0x4023d220, 0x676e: 0x4023d420, 0x676f: 0x4023d620, + 0x6770: 0x4023d820, 0x6771: 0x4023da20, 0x6772: 0x4023dc20, 0x6773: 0x4023de20, + 0x6774: 0x4023e020, 0x6775: 0x4023e220, 0x6776: 0x4023e420, 0x6777: 0x4023e620, + 0x6778: 0x4023e820, 0x6779: 0x4023ea20, 0x677a: 0x4023ec20, 0x677b: 0x4023ee20, + 0x677c: 0x4023f020, 0x677d: 0x4023f220, 0x677e: 0x4023f420, 0x677f: 0x4023f620, + // Block 0x19e, offset 0x6780 + 0x6780: 0x4023f820, 0x6781: 0x4023fa20, 0x6782: 0x4023fc20, 0x6783: 0x4023fe20, + 0x6784: 0x40240020, 0x6785: 0x40240220, 0x6786: 0x40240420, 0x6787: 0x40240620, + 0x6788: 0x40240820, 0x6789: 0x40240a20, 0x678a: 0x40240c20, 0x678b: 0x40240e20, + 0x678c: 0x40241020, 0x678d: 0x40241220, 0x678e: 0x40241420, 0x678f: 0x40241620, + 0x6790: 0x40241820, 0x6791: 0x40241a20, 0x6792: 0x40241c20, 0x6793: 0x40241e20, + 0x6794: 0x40242020, 0x6795: 0x40242220, 0x6796: 0x40242420, 0x6797: 0x40242620, + 0x6798: 0x40242820, 0x6799: 0x40242a20, 0x679a: 0x40242c20, 0x679b: 0x40242e20, + 0x679c: 0x40243020, 0x679d: 0x40243220, 0x679e: 0x40243420, 0x679f: 0x40243620, + 0x67a0: 0x40243820, 0x67a1: 0x40243a20, 0x67a2: 0x40243c20, 0x67a3: 0x40243e20, + 0x67a4: 0x40244020, 0x67a5: 0x40244220, 0x67a6: 0x40244420, 0x67a7: 0x40244620, + 0x67a8: 0x40244820, 0x67a9: 0x40244a20, 0x67aa: 0x40244c20, 0x67ab: 0x40244e20, + 0x67ac: 0x40245020, 0x67ad: 0x40245220, 0x67ae: 0x40245420, 0x67af: 0x40245620, + 0x67b0: 0x40245820, 0x67b1: 0x40245a20, 0x67b2: 0x40245c20, 0x67b3: 0x40245e20, + 0x67b4: 0x40246020, 0x67b5: 0x40246220, 0x67b6: 0x40246420, 0x67b7: 0x40246620, + 0x67b9: 0x40246820, 0x67ba: 0x40246a20, 0x67bb: 0x40246c20, + 0x67bc: 0x40246e20, + // Block 0x19f, offset 0x67c0 + 0x67c0: 0x40247020, 0x67c1: 0x40247220, 0x67c2: 0x40247420, 0x67c3: 0x40247620, + 0x67c4: 0x40247820, 0x67c5: 0x40247a20, 0x67c6: 0x40247c20, 0x67c7: 0x40247e20, + 0x67c8: 0x40248020, 0x67c9: 0x40248220, 0x67ca: 0x40248420, 0x67cb: 0x40248620, + 0x67cc: 0x40248820, 0x67cd: 0x40248a20, 0x67ce: 0x40248c20, 0x67cf: 0x40248e20, + 0x67d0: 0x40249020, 0x67d1: 0x40249220, 0x67d2: 0x40249420, 0x67d3: 0x40249620, + 0x67d4: 0x40249820, 0x67d5: 0x40249a20, 0x67d6: 0x40249c20, 0x67d7: 0x40249e20, + 0x67d8: 0x4024a020, 0x67d9: 0x4024a220, 0x67da: 0x4024a420, 0x67db: 0x4024a620, + 0x67dc: 0x4024a820, 0x67dd: 0x4024aa20, 0x67de: 0x4024ac20, 0x67df: 0x4024ae20, + 0x67e0: 0x4024b020, 0x67e1: 0x4024b220, 0x67e2: 0x4024b420, 0x67e3: 0x4024b620, + 0x67e4: 0x4024b820, 0x67e5: 0x4024ba20, 0x67e6: 0x4024bc20, 0x67e7: 0x4024be20, + 0x67e8: 0x4024c020, 0x67e9: 0x4024c220, 0x67ea: 0x4024c420, 0x67eb: 0x4024c620, + 0x67ec: 0x4024c820, 0x67ed: 0x4024ca20, 0x67ee: 0x4024cc20, 0x67ef: 0x4024ce20, + 0x67f0: 0x4024d020, 0x67f1: 0x4024d220, 0x67f2: 0x4024d420, 0x67f3: 0x4024d620, + 0x67f4: 0x4024d820, 0x67f5: 0x4024da20, 0x67f6: 0x4024dc20, 0x67f7: 0x4024de20, + 0x67f8: 0x4024e020, 0x67f9: 0x4024e220, 0x67fa: 0x4024e420, 0x67fb: 0x4024e620, + 0x67fc: 0x4024e820, 0x67fd: 0x4024ea20, + // Block 0x1a0, offset 0x6800 + 0x6800: 0x4024ec20, 0x6801: 0x4024ee20, 0x6802: 0x4024f020, 0x6803: 0x4024f220, + 0x6810: 0x4024f420, 0x6811: 0x4024f620, 0x6812: 0x4024f820, 0x6813: 0x4024fa20, + 0x6814: 0x4024fc20, 0x6815: 0x4024fe20, 0x6816: 0x40250020, 0x6817: 0x40250220, + 0x6818: 0x40250420, 0x6819: 0x40250620, 0x681a: 0x40250820, 0x681b: 0x40250a20, + 0x681c: 0x40250c20, 0x681d: 0x40250e20, 0x681e: 0x40251020, 0x681f: 0x40251220, + 0x6820: 0x40251420, 0x6821: 0x40251620, 0x6822: 0x40251820, 0x6823: 0x40251a20, + 0x6824: 0x40251c20, 0x6825: 0x40251e20, 0x6826: 0x40252020, 0x6827: 0x40252220, + // Block 0x1a1, offset 0x6840 + 0x687b: 0x40252420, + 0x687c: 0x40252620, 0x687d: 0x40252820, 0x687e: 0x40252a20, 0x687f: 0x40252c20, + // Block 0x1a2, offset 0x6880 + 0x6880: 0x40252e20, 0x6881: 0x40253020, 0x6882: 0x40253220, 0x6883: 0x40253420, + 0x6884: 0x40253620, 0x6885: 0x40253820, 0x6886: 0x40253a20, 0x6887: 0x40253c20, + 0x6888: 0x40253e20, 0x6889: 0x40254020, 0x688a: 0x40254220, 0x688b: 0x40254420, + 0x688c: 0x40254620, 0x688d: 0x40254820, 0x688e: 0x40254a20, 0x688f: 0x40254c20, + 0x6890: 0x40254e20, 0x6891: 0x40255020, 0x6892: 0x40255220, 0x6893: 0x40255420, + 0x6894: 0x40255620, 0x6895: 0x40255820, 0x6896: 0x40255a20, 0x6897: 0x40255c20, + 0x6898: 0x40255e20, 0x6899: 0x40256020, 0x689a: 0x40256220, 0x689b: 0x40256420, + 0x689c: 0x40256620, 0x689d: 0x40256820, 0x689e: 0x40256a20, 0x689f: 0x40256c20, + 0x68a0: 0x40256e20, 0x68a1: 0x40257020, 0x68a2: 0x40257220, 0x68a3: 0x40257420, + 0x68a4: 0x40257620, 0x68a5: 0x40257820, 0x68a6: 0x40257a20, 0x68a7: 0x40257c20, + 0x68a8: 0x40257e20, 0x68a9: 0x40258020, 0x68aa: 0x40258220, 0x68ab: 0x40258420, + 0x68ac: 0x40258620, 0x68ad: 0x40258820, 0x68ae: 0x40258a20, 0x68af: 0x40258c20, + 0x68b0: 0x40258e20, 0x68b1: 0x40259020, 0x68b2: 0x40259220, 0x68b3: 0x40259420, + 0x68b4: 0x40259620, 0x68b5: 0x40259820, 0x68b6: 0x40259a20, 0x68b7: 0x40259c20, + 0x68b8: 0x40259e20, 0x68b9: 0x4025a020, 0x68ba: 0x4025a220, 0x68bb: 0x4025a420, + 0x68bc: 0x4025a620, 0x68bd: 0x4025a820, 0x68be: 0x4025aa20, 0x68bf: 0x4025ac20, + // Block 0x1a3, offset 0x68c0 + 0x68c0: 0x4025ae20, + 0x68c5: 0x4025b020, 0x68c6: 0x4025b220, 0x68c7: 0x4025b420, + 0x68c8: 0x4025b620, 0x68c9: 0x4025b820, 0x68ca: 0x4025ba20, 0x68cb: 0x4025bc20, + 0x68cc: 0x4025be20, 0x68cd: 0x4025c020, 0x68ce: 0x4025c220, 0x68cf: 0x4025c420, + // Block 0x1a4, offset 0x6900 + 0x6900: 0x4025c620, 0x6901: 0x4025c820, 0x6902: 0x4025ca20, 0x6903: 0x4025cc20, + 0x6904: 0x4025ce20, 0x6905: 0x4025d020, 0x6906: 0x4025d220, 0x6907: 0x4025d420, + 0x6908: 0x4025d620, 0x6909: 0x4025d820, 0x690a: 0x4025da20, 0x690b: 0x4025dc20, + 0x690c: 0x4025de20, 0x690d: 0x4025e020, 0x690e: 0x4025e220, 0x690f: 0x4025e420, + 0x6910: 0x4025e620, 0x6911: 0x4025e820, 0x6912: 0x4025ea20, 0x6913: 0x4025ec20, + 0x6914: 0x4025ee20, 0x6915: 0x4025f020, 0x6916: 0x4025f220, 0x6917: 0x4025f420, + 0x6918: 0x4025f620, 0x6919: 0x4025f820, 0x691a: 0x4025fa20, 0x691b: 0x4025fc20, + 0x691c: 0x4025fe20, 0x691d: 0x40260020, 0x691e: 0x40260220, 0x691f: 0x40260420, + 0x6920: 0x40260620, 0x6921: 0x40260820, 0x6922: 0x40260a20, 0x6923: 0x40260c20, + 0x6924: 0x40260e20, 0x6925: 0x40261020, 0x6926: 0x40261220, 0x6927: 0x40261420, + 0x6928: 0x40261620, 0x6929: 0x40261820, 0x692a: 0x40261a20, 0x692b: 0x40261c20, + 0x692c: 0x40261e20, 0x692d: 0x40262020, 0x692e: 0x40262220, 0x692f: 0x40262420, + 0x6930: 0x40262620, 0x6931: 0x40262820, 0x6932: 0x40262a20, 0x6933: 0x40262c20, + 0x6934: 0x40262e20, 0x6935: 0x40263020, 0x6936: 0x40263220, 0x6937: 0x40263420, + 0x6938: 0x40263620, 0x6939: 0x40263820, 0x693a: 0x40263a20, 0x693b: 0x40263c20, + 0x693c: 0x40263e20, 0x693d: 0x40264020, 0x693e: 0x40264220, 0x693f: 0x40264420, + // Block 0x1a5, offset 0x6940 + 0x6940: 0x40264620, 0x6941: 0x40264820, 0x6942: 0x40264a20, 0x6943: 0x40264c20, + 0x6944: 0x40264e20, 0x6945: 0x40265020, + // Block 0x1a6, offset 0x6980 + 0x6980: 0x40265220, 0x6981: 0x40265420, 0x6982: 0x40265620, 0x6983: 0x40265820, + 0x6984: 0x40265a20, 0x6985: 0x40265c20, 0x6986: 0x40265e20, 0x6987: 0x40266020, + 0x6988: 0x40266220, 0x6989: 0x40266420, 0x698a: 0x40266620, 0x698b: 0x40266820, + 0x698c: 0x40266a20, 0x698d: 0x40266c20, 0x698e: 0x40266e20, 0x698f: 0x40267020, + 0x6990: 0x40267220, 0x6991: 0x40267420, 0x6992: 0x40267620, 0x6993: 0x40267820, + 0x6994: 0x40267a20, 0x6995: 0x40267c20, 0x6996: 0x40267e20, 0x6997: 0x40268020, + 0x6998: 0x40268220, 0x6999: 0x40268420, 0x699a: 0x40268620, 0x699b: 0x40268820, + 0x699c: 0x40268a20, 0x699d: 0x40268c20, 0x699e: 0x40268e20, 0x699f: 0x40269020, + 0x69a0: 0x40269220, 0x69a1: 0x40269420, 0x69a2: 0x40269620, 0x69a3: 0x40269820, + 0x69a4: 0x40269a20, 0x69a5: 0x40269c20, 0x69a6: 0x40269e20, 0x69a7: 0x4026a020, + 0x69a8: 0x4026a220, 0x69a9: 0x4026a420, 0x69aa: 0x4026a620, 0x69ab: 0x4026a820, + 0x69ac: 0x4026aa20, 0x69ad: 0x4026ac20, 0x69ae: 0x4026ae20, 0x69af: 0x4026b020, + 0x69b0: 0x4026b220, 0x69b1: 0x4026b420, 0x69b2: 0x4026b620, 0x69b3: 0x4026b820, + 0x69b4: 0x4026ba20, 0x69b5: 0x4026bc20, 0x69b6: 0x4026be20, 0x69b7: 0x4026c020, + 0x69b8: 0x4026c220, 0x69b9: 0x4026c420, 0x69ba: 0x4026c620, 0x69bb: 0x4026c820, + 0x69bc: 0x4026ca20, 0x69bd: 0x4026cc20, 0x69be: 0x4026ce20, 0x69bf: 0x4026d020, + // Block 0x1a7, offset 0x69c0 + 0x69c0: 0x4026d220, 0x69c1: 0x4026d420, 0x69c2: 0x4026d620, 0x69c3: 0x4026d820, + 0x69c4: 0x4026da20, 0x69c5: 0x4026dc20, 0x69c6: 0x4026de20, 0x69c7: 0x4026e020, + 0x69c8: 0x4026e220, 0x69c9: 0x4026e420, 0x69ca: 0x4026e620, 0x69cb: 0x4026e820, + 0x69cc: 0x4026ea20, 0x69cd: 0x4026ec20, 0x69ce: 0x4026ee20, 0x69cf: 0x4026f020, + 0x69d0: 0x4026f220, 0x69d1: 0x4026f420, 0x69d2: 0x4026f620, 0x69d3: 0x4026f820, + 0x69d4: 0x4026fa20, 0x69d5: 0x4026fc20, 0x69d6: 0x4026fe20, 0x69d7: 0x40270020, + 0x69d8: 0x40270220, 0x69d9: 0x40270420, 0x69da: 0x40270620, 0x69db: 0x40270820, + 0x69dc: 0x40270a20, 0x69dd: 0x40270c20, 0x69de: 0x40270e20, 0x69df: 0x40271020, + 0x69e0: 0x40271220, 0x69e1: 0x40271420, 0x69e2: 0x40271620, 0x69e3: 0x40271820, + 0x69e4: 0x40271a20, 0x69e5: 0x40271c20, 0x69e6: 0x40271e20, 0x69e7: 0x40272020, + 0x69e8: 0x40272220, 0x69e9: 0x40272420, 0x69ea: 0x40272620, 0x69eb: 0x40272820, + 0x69ec: 0x40272a20, 0x69ed: 0x40272c20, 0x69ee: 0x40272e20, 0x69ef: 0x40273020, + 0x69f0: 0x40273220, 0x69f1: 0x40273420, 0x69f2: 0x40273620, 0x69f3: 0x40273820, + // Block 0x1a8, offset 0x6a00 + 0x6a00: 0x429c7a20, 0x6a01: 0x429c7020, 0x6a02: 0x429c8220, 0x6a03: 0x48024420, + 0x6a04: 0x429ec020, 0x6a05: 0x429f5c20, 0x6a06: 0x429f7620, 0x6a07: 0x42a00420, + 0x6a08: 0x42a0f420, 0x6a09: 0x42a13220, 0x6a0a: 0x42a1ce20, 0x6a0b: 0x42a19e20, + 0x6a0c: 0x44693c20, 0x6a0d: 0x480c7420, 0x6a0e: 0x42a29a20, 0x6a0f: 0x42a2a820, + 0x6a10: 0x42a2c820, 0x6a11: 0x42a2ee20, 0x6a12: 0x480a3820, 0x6a13: 0x44697220, + 0x6a14: 0x42a2ce20, 0x6a15: 0x42a31a20, 0x6a16: 0x480a9620, 0x6a17: 0x42a32e20, + 0x6a18: 0x42a34820, 0x6a19: 0x429d9820, 0x6a1a: 0x42a35820, 0x6a1b: 0x42a36a20, + 0x6a1c: 0x4923be20, 0x6a1d: 0x42a3ea20, 0x6a1e: 0x42a40620, 0x6a1f: 0x4469be20, + 0x6a20: 0x42a47620, 0x6a21: 0x42a48c20, 0x6a22: 0x42a4e420, 0x6a23: 0x42a4ee20, + 0x6a24: 0x446a2a20, 0x6a25: 0x42a58e20, 0x6a26: 0x42a59220, 0x6a27: 0x42a5c820, + 0x6a28: 0x42a5f420, 0x6a29: 0x42a60a20, 0x6a2a: 0x42a60c20, 0x6a2b: 0x42a62e20, + 0x6a2c: 0x42a69220, 0x6a2d: 0x42a6a220, 0x6a2e: 0x42a6b420, 0x6a2f: 0x42a6e620, + 0x6a30: 0x42a6fa20, 0x6a31: 0x42a6fe20, 0x6a32: 0x42a6fe20, 0x6a33: 0x42a6fe20, + 0x6a34: 0x48145820, 0x6a35: 0x42e0e020, 0x6a36: 0x42a79420, 0x6a37: 0x42a7be20, + 0x6a38: 0x4816c620, 0x6a39: 0x42a7d620, 0x6a3a: 0x42a7e220, 0x6a3b: 0x42a80c20, + 0x6a3c: 0x42a93c20, 0x6a3d: 0x42a87020, 0x6a3e: 0x42a89020, 0x6a3f: 0x42a8d020, + // Block 0x1a9, offset 0x6a40 + 0x6a40: 0x42a94420, 0x6a41: 0x42a9ec20, 0x6a42: 0x42aa2020, 0x6a43: 0x42aaa620, + 0x6a44: 0x42aac620, 0x6a45: 0x42ab0820, 0x6a46: 0x42ab0820, 0x6a47: 0x42ab3220, + 0x6a48: 0x42ab5620, 0x6a49: 0x42ab6620, 0x6a4a: 0x42ab8420, 0x6a4b: 0x42ae2c20, + 0x6a4c: 0x42ac0c20, 0x6a4d: 0x42ae2e20, 0x6a4e: 0x42aca220, 0x6a4f: 0x42ace820, + 0x6a50: 0x42a40e20, 0x6a51: 0x42b1dc20, 0x6a52: 0x42af9c20, 0x6a53: 0x42afe820, + 0x6a54: 0x42b01a20, 0x6a55: 0x42af1620, 0x6a56: 0x42b06420, 0x6a57: 0x42b06220, + 0x6a58: 0x42b15820, 0x6a59: 0x4829c820, 0x6a5a: 0x42b1e420, 0x6a5b: 0x42b1ee20, + 0x6a5c: 0x42b20c20, 0x6a5d: 0x42b23420, 0x6a5e: 0x42b24420, 0x6a5f: 0x42b2c420, + 0x6a60: 0x482d5020, 0x6a61: 0x482dd420, 0x6a62: 0x42b3d820, 0x6a63: 0x42b43620, + 0x6a64: 0x42b44e20, 0x6a65: 0x42b3b020, 0x6a66: 0x42b4cc20, 0x6a67: 0x446ddc20, + 0x6a68: 0x446df820, 0x6a69: 0x42b61020, 0x6a6a: 0x42b67c20, 0x6a6b: 0x42b67c20, + 0x6a6c: 0x48339020, 0x6a6d: 0x42b78620, 0x6a6e: 0x42b7b020, 0x6a6f: 0x42b7ce20, + 0x6a70: 0x42b7e620, 0x6a71: 0x48363020, 0x6a72: 0x42b7fe20, 0x6a73: 0x42b80c20, + 0x6a74: 0x42bea620, 0x6a75: 0x42b84420, 0x6a76: 0x446f0220, 0x6a77: 0x42b8c020, + 0x6a78: 0x42b8dc20, 0x6a79: 0x42b98020, 0x6a7a: 0x42b91a20, 0x6a7b: 0x483bc820, + 0x6a7c: 0x42ba8620, 0x6a7d: 0x483bcc20, 0x6a7e: 0x42badc20, 0x6a7f: 0x42bad620, + // Block 0x1aa, offset 0x6a80 + 0x6a80: 0x42baf820, 0x6a81: 0x42bbc220, 0x6a82: 0x42bbc420, 0x6a83: 0x44705e20, + 0x6a84: 0x42bbfa20, 0x6a85: 0x42bc5020, 0x6a86: 0x42bc7a20, 0x6a87: 0x42bcd220, + 0x6a88: 0x4470c420, 0x6a89: 0x48430620, 0x6a8a: 0x4470f820, 0x6a8b: 0x42bd6020, + 0x6a8c: 0x42bd6620, 0x6a8d: 0x42bd6c20, 0x6a8e: 0x42bd9420, 0x6a8f: 0x49472420, + 0x6a90: 0x42bdfc20, 0x6a91: 0x48466220, 0x6a92: 0x48466220, 0x6a93: 0x43040220, + 0x6a94: 0x42be4420, 0x6a95: 0x42be4420, 0x6a96: 0x44718e20, 0x6a97: 0x48657020, + 0x6a98: 0x48c3b420, 0x6a99: 0x42bec420, 0x6a9a: 0x42bed620, 0x6a9b: 0x4471c620, + 0x6a9c: 0x42bf3420, 0x6a9d: 0x42bf9a20, 0x6a9e: 0x42bfae20, 0x6a9f: 0x42bff220, + 0x6aa0: 0x42c10220, 0x6aa1: 0x44727420, 0x6aa2: 0x44723820, 0x6aa3: 0x42c12820, + 0x6aa4: 0x484da820, 0x6aa5: 0x42c18e20, 0x6aa6: 0x42c29020, 0x6aa7: 0x42c29820, + 0x6aa8: 0x42c29c20, 0x6aa9: 0x42c29820, 0x6aaa: 0x42c2f420, 0x6aab: 0x42c31c20, + 0x6aac: 0x42c36420, 0x6aad: 0x42c34820, 0x6aae: 0x42c35e20, 0x6aaf: 0x42c3bc20, + 0x6ab0: 0x42c3e420, 0x6ab1: 0x42c3ec20, 0x6ab2: 0x42c42020, 0x6ab3: 0x42c43620, + 0x6ab4: 0x42c4ba20, 0x6ab5: 0x42c56220, 0x6ab6: 0x42c5a820, 0x6ab7: 0x42c6a020, + 0x6ab8: 0x48561820, 0x6ab9: 0x42c67a20, 0x6aba: 0x42c5f820, 0x6abb: 0x42c6d020, + 0x6abc: 0x42c70620, 0x6abd: 0x42c7c820, 0x6abe: 0x4857e220, 0x6abf: 0x42c84420, + // Block 0x1ab, offset 0x6ac0 + 0x6ac0: 0x42c78a20, 0x6ac1: 0x42c75220, 0x6ac2: 0x44745c20, 0x6ac3: 0x42c8d220, + 0x6ac4: 0x42c8fc20, 0x6ac5: 0x42c93a20, 0x6ac6: 0x42c8ee20, 0x6ac7: 0x4474d820, + 0x6ac8: 0x42ca9e20, 0x6ac9: 0x42cad820, 0x6aca: 0x48601420, 0x6acb: 0x42cbc620, + 0x6acc: 0x42cdf020, 0x6acd: 0x42cc9220, 0x6ace: 0x44763220, 0x6acf: 0x42cd2220, + 0x6ad0: 0x44761020, 0x6ad1: 0x4475c820, 0x6ad2: 0x42a32420, 0x6ad3: 0x42a32a20, + 0x6ad4: 0x42ce0020, 0x6ad5: 0x42cd3820, 0x6ad6: 0x43015a20, 0x6ad7: 0x4487b220, + 0x6ad8: 0x42ce2e20, 0x6ad9: 0x42ce3620, 0x6ada: 0x42ce4220, 0x6adb: 0x42cebc20, + 0x6adc: 0x42cea620, 0x6add: 0x48678620, 0x6ade: 0x44769220, 0x6adf: 0x42cff420, + 0x6ae0: 0x42cf0a20, 0x6ae1: 0x42d0a420, 0x6ae2: 0x42d10a20, 0x6ae3: 0x4868da20, + 0x6ae4: 0x42d11c20, 0x6ae5: 0x42d03e20, 0x6ae6: 0x42d22820, 0x6ae7: 0x44773a20, + 0x6ae8: 0x42d28420, 0x6ae9: 0x42d34620, 0x6aea: 0x42d3d420, 0x6aeb: 0x42d55020, + 0x6aec: 0x486d4620, 0x6aed: 0x42d5b620, 0x6aee: 0x44783020, 0x6aef: 0x42d64220, + 0x6af0: 0x48714e20, 0x6af1: 0x42d6a820, 0x6af2: 0x44789c20, 0x6af3: 0x42d6e420, + 0x6af4: 0x42d73e20, 0x6af5: 0x42d77420, 0x6af6: 0x42d77620, 0x6af7: 0x48751a20, + 0x6af8: 0x483a1620, 0x6af9: 0x4875f420, 0x6afa: 0x42d89c20, 0x6afb: 0x48797820, + 0x6afc: 0x42d97e20, 0x6afd: 0x42d99a20, 0x6afe: 0x42d8ce20, 0x6aff: 0x42da2c20, + // Block 0x1ac, offset 0x6b00 + 0x6b00: 0x42da7c20, 0x6b01: 0x42daee20, 0x6b02: 0x42da8220, 0x6b03: 0x42dad220, + 0x6b04: 0x42daf020, 0x6b05: 0x42db0a20, 0x6b06: 0x487a3c20, 0x6b07: 0x42da6820, + 0x6b08: 0x42dc5e20, 0x6b09: 0x42dcdc20, 0x6b0a: 0x447a6620, 0x6b0b: 0x42dd9620, + 0x6b0c: 0x42dd8e20, 0x6b0d: 0x487da220, 0x6b0e: 0x42dbf220, 0x6b0f: 0x42dedc20, + 0x6b10: 0x487ebc20, 0x6b11: 0x487f1c20, 0x6b12: 0x42df8c20, 0x6b13: 0x42e07220, + 0x6b14: 0x42e03c20, 0x6b15: 0x42e03620, 0x6b16: 0x447b2c20, 0x6b17: 0x42e09420, + 0x6b18: 0x42e0fa20, 0x6b19: 0x42e0ee20, 0x6b1a: 0x42e15a20, 0x6b1b: 0x480a4a20, + 0x6b1c: 0x42e28a20, 0x6b1d: 0x4884c620, 0x6b1e: 0x42e33820, 0x6b1f: 0x48875620, + 0x6b20: 0x42e45020, 0x6b21: 0x42e46a20, 0x6b22: 0x42e4a020, 0x6b23: 0x488c1020, + 0x6b24: 0x42e50020, 0x6b25: 0x42e52a20, 0x6b26: 0x488e6a20, 0x6b27: 0x48902820, + 0x6b28: 0x42e6f420, 0x6b29: 0x42e71620, 0x6b2a: 0x447d5820, 0x6b2b: 0x42e74a20, + 0x6b2c: 0x447d7020, 0x6b2d: 0x447d7020, 0x6b2e: 0x42e88e20, 0x6b2f: 0x42e8b820, + 0x6b30: 0x42e8e220, 0x6b31: 0x42e90a20, 0x6b32: 0x42e99420, 0x6b33: 0x447e3620, + 0x6b34: 0x42ea4820, 0x6b35: 0x48986c20, 0x6b36: 0x42ea7c20, 0x6b37: 0x48992420, + 0x6b38: 0x42eae020, 0x6b39: 0x48433e20, 0x6b3a: 0x42ec2020, 0x6b3b: 0x489f4220, + 0x6b3c: 0x489f7020, 0x6b3d: 0x48a08820, 0x6b3e: 0x447ff820, 0x6b3f: 0x44801020, + // Block 0x1ad, offset 0x6b40 + 0x6b40: 0x42ede820, 0x6b41: 0x48a1e620, 0x6b42: 0x48a1e420, 0x6b43: 0x48a23220, + 0x6b44: 0x48a26620, 0x6b45: 0x42ee3c20, 0x6b46: 0x42ee3e20, 0x6b47: 0x42ee3e20, + 0x6b48: 0x42ee9420, 0x6b49: 0x44807220, 0x6b4a: 0x42ef1620, 0x6b4b: 0x44808c20, + 0x6b4c: 0x44812c20, 0x6b4d: 0x48a83a20, 0x6b4e: 0x42f09c20, 0x6b4f: 0x42f11820, + 0x6b50: 0x42f19820, 0x6b51: 0x4481c620, 0x6b52: 0x48ac4c20, 0x6b53: 0x42f2ac20, + 0x6b54: 0x48ad3420, 0x6b55: 0x48ad8a20, 0x6b56: 0x42f31e20, 0x6b57: 0x42f3d620, + 0x6b58: 0x44825e20, 0x6b59: 0x42f48020, 0x6b5a: 0x42f49420, 0x6b5b: 0x42f49e20, + 0x6b5c: 0x48b2f820, 0x6b5d: 0x48b54e20, 0x6b5e: 0x48b54e20, 0x6b5f: 0x42f5dc20, + 0x6b60: 0x44840420, 0x6b61: 0x48b75620, 0x6b62: 0x42f78c20, 0x6b63: 0x42f79220, + 0x6b64: 0x44844e20, 0x6b65: 0x48b90020, 0x6b66: 0x42f9a420, 0x6b67: 0x44854020, + 0x6b68: 0x42f9d020, 0x6b69: 0x42f9c620, 0x6b6a: 0x42fa0020, 0x6b6b: 0x48bf0c20, + 0x6b6c: 0x42fac620, 0x6b6d: 0x44860220, 0x6b6e: 0x42fb8e20, 0x6b6f: 0x42fc0420, + 0x6b70: 0x42fc8a20, 0x6b71: 0x44866820, 0x6b72: 0x48c45020, 0x6b73: 0x48c48e20, + 0x6b74: 0x4486b220, 0x6b75: 0x48c5b220, 0x6b76: 0x42fef420, 0x6b77: 0x48c67c20, + 0x6b78: 0x42ff2a20, 0x6b79: 0x42fff420, 0x6b7a: 0x43000a20, 0x6b7b: 0x48c9b420, + 0x6b7c: 0x48ca4620, 0x6b7d: 0x4300c020, 0x6b7e: 0x48cb5020, 0x6b7f: 0x4300e020, + // Block 0x1ae, offset 0x6b80 + 0x6b80: 0x4866be20, 0x6b81: 0x4487aa20, 0x6b82: 0x43016420, 0x6b83: 0x43020620, + 0x6b84: 0x44881620, 0x6b85: 0x43027c20, 0x6b86: 0x42b56a20, 0x6b87: 0x48cf4e20, + 0x6b88: 0x48cf6a20, 0x6b89: 0x48672620, 0x6b8a: 0x48673820, 0x6b8b: 0x43040220, + 0x6b8c: 0x43040820, 0x6b8d: 0x431f3c20, 0x6b8e: 0x4488d620, 0x6b8f: 0x43052220, + 0x6b90: 0x43051620, 0x6b91: 0x43053a20, 0x6b92: 0x42a56620, 0x6b93: 0x43056220, + 0x6b94: 0x43056620, 0x6b95: 0x43057a20, 0x6b96: 0x4305cc20, 0x6b97: 0x48d67820, + 0x6b98: 0x4305ca20, 0x6b99: 0x43063a20, 0x6b9a: 0x4306c620, 0x6b9b: 0x43075a20, + 0x6b9c: 0x43064620, 0x6b9d: 0x43077a20, 0x6b9e: 0x4307ce20, 0x6b9f: 0x4308ae20, + 0x6ba0: 0x4306a620, 0x6ba1: 0x43079420, 0x6ba2: 0x43079820, 0x6ba3: 0x4307b820, + 0x6ba4: 0x48d86c20, 0x6ba5: 0x48dad620, 0x6ba6: 0x48d9aa20, 0x6ba7: 0x448a5620, + 0x6ba8: 0x4309e220, 0x6ba9: 0x4309e620, 0x6baa: 0x430a2c20, 0x6bab: 0x48e79420, + 0x6bac: 0x430ac820, 0x6bad: 0x48de5820, 0x6bae: 0x448aba20, 0x6baf: 0x448ac220, + 0x6bb0: 0x48df6220, 0x6bb1: 0x48e1a420, 0x6bb2: 0x448ad620, 0x6bb3: 0x430ca020, + 0x6bb4: 0x430cb820, 0x6bb5: 0x430cce20, 0x6bb6: 0x430cd220, 0x6bb7: 0x430d5220, + 0x6bb8: 0x430d1020, 0x6bb9: 0x430e1c20, 0x6bba: 0x430dc420, 0x6bbb: 0x430ef220, + 0x6bbc: 0x430e5020, 0x6bbd: 0x430ed620, 0x6bbe: 0x430f0c20, 0x6bbf: 0x448bae20, + // Block 0x1af, offset 0x6bc0 + 0x6bc0: 0x430fc220, 0x6bc1: 0x43100220, 0x6bc2: 0x448bf220, 0x6bc3: 0x4310c020, + 0x6bc4: 0x4310c620, 0x6bc5: 0x48ecce20, 0x6bc6: 0x4311ae20, 0x6bc7: 0x4311bc20, + 0x6bc8: 0x448c6a20, 0x6bc9: 0x4311f420, 0x6bca: 0x44697620, 0x6bcb: 0x48f15c20, + 0x6bcc: 0x48f2cc20, 0x6bcd: 0x448d7c20, 0x6bce: 0x448d8e20, 0x6bcf: 0x43154020, + 0x6bd0: 0x4315da20, 0x6bd1: 0x43171420, 0x6bd2: 0x4318aa20, 0x6bd3: 0x48f95020, + 0x6bd4: 0x43195620, 0x6bd5: 0x43198220, 0x6bd6: 0x431a3620, 0x6bd7: 0x431aee20, + 0x6bd8: 0x48fe5e20, 0x6bd9: 0x48100820, 0x6bda: 0x431b9620, 0x6bdb: 0x431b7820, + 0x6bdc: 0x431be020, 0x6bdd: 0x4811bc20, 0x6bde: 0x431da820, 0x6bdf: 0x431e7020, + 0x6be0: 0x490ba420, 0x6be1: 0x490bda20, 0x6be2: 0x43212820, 0x6be3: 0x4321e220, + 0x6be4: 0x43222220, 0x6be5: 0x490e5c20, 0x6be6: 0x43223620, 0x6be7: 0x43247020, + 0x6be8: 0x4325ae20, 0x6be9: 0x4325b020, 0x6bea: 0x4324f820, 0x6beb: 0x4327f220, + 0x6bec: 0x43282a20, 0x6bed: 0x4917f420, 0x6bee: 0x432b1620, 0x6bef: 0x44932a20, + 0x6bf0: 0x432b6e20, 0x6bf1: 0x491aee20, 0x6bf2: 0x4493cc20, 0x6bf3: 0x432d8620, + 0x6bf4: 0x42bb6420, 0x6bf5: 0x432e4620, 0x6bf6: 0x49228a20, 0x6bf7: 0x49243420, + 0x6bf8: 0x4494dc20, 0x6bf9: 0x4494ec20, 0x6bfa: 0x432fc020, 0x6bfb: 0x49281420, + 0x6bfc: 0x44956420, 0x6bfd: 0x49292c20, 0x6bfe: 0x43301620, 0x6bff: 0x43301620, + // Block 0x1b0, offset 0x6c00 + 0x6c00: 0x43305220, 0x6c01: 0x492b6c20, 0x6c02: 0x4331c420, 0x6c03: 0x44966620, + 0x6c04: 0x43325220, 0x6c05: 0x43334e20, 0x6c06: 0x43338420, 0x6c07: 0x4333fc20, + 0x6c08: 0x44979c20, 0x6c09: 0x49366020, 0x6c0a: 0x43362420, 0x6c0b: 0x43388020, + 0x6c0c: 0x4339fa20, 0x6c0d: 0x44999c20, 0x6c0e: 0x4499da20, 0x6c0f: 0x433ace20, + 0x6c10: 0x49419c20, 0x6c11: 0x4499f020, 0x6c12: 0x49420a20, 0x6c13: 0x49441c20, + 0x6c14: 0x49452220, 0x6c15: 0x433d7620, 0x6c16: 0x449aac20, 0x6c17: 0x433df220, + 0x6c18: 0x433dfc20, 0x6c19: 0x433e0a20, 0x6c1a: 0x433e1e20, 0x6c1b: 0x433e2c20, + 0x6c1c: 0x433e7620, 0x6c1d: 0x494c0020, + // Block 0x1b1, offset 0x6c40 + 0x6c41: 0xa0000000, + 0x6c60: 0xa0000000, 0x6c61: 0xa0000000, 0x6c62: 0xa0000000, 0x6c63: 0xa0000000, + 0x6c64: 0xa0000000, 0x6c65: 0xa0000000, 0x6c66: 0xa0000000, 0x6c67: 0xa0000000, + 0x6c68: 0xa0000000, 0x6c69: 0xa0000000, 0x6c6a: 0xa0000000, 0x6c6b: 0xa0000000, + 0x6c6c: 0xa0000000, 0x6c6d: 0xa0000000, 0x6c6e: 0xa0000000, 0x6c6f: 0xa0000000, + 0x6c70: 0xa0000000, 0x6c71: 0xa0000000, 0x6c72: 0xa0000000, 0x6c73: 0xa0000000, + 0x6c74: 0xa0000000, 0x6c75: 0xa0000000, 0x6c76: 0xa0000000, 0x6c77: 0xa0000000, + 0x6c78: 0xa0000000, 0x6c79: 0xa0000000, 0x6c7a: 0xa0000000, 0x6c7b: 0xa0000000, + 0x6c7c: 0xa0000000, 0x6c7d: 0xa0000000, 0x6c7e: 0xa0000000, 0x6c7f: 0xa0000000, + // Block 0x1b2, offset 0x6c80 + 0x6c80: 0xa0000000, 0x6c81: 0xa0000000, 0x6c82: 0xa0000000, 0x6c83: 0xa0000000, + 0x6c84: 0xa0000000, 0x6c85: 0xa0000000, 0x6c86: 0xa0000000, 0x6c87: 0xa0000000, + 0x6c88: 0xa0000000, 0x6c89: 0xa0000000, 0x6c8a: 0xa0000000, 0x6c8b: 0xa0000000, + 0x6c8c: 0xa0000000, 0x6c8d: 0xa0000000, 0x6c8e: 0xa0000000, 0x6c8f: 0xa0000000, + 0x6c90: 0xa0000000, 0x6c91: 0xa0000000, 0x6c92: 0xa0000000, 0x6c93: 0xa0000000, + 0x6c94: 0xa0000000, 0x6c95: 0xa0000000, 0x6c96: 0xa0000000, 0x6c97: 0xa0000000, + 0x6c98: 0xa0000000, 0x6c99: 0xa0000000, 0x6c9a: 0xa0000000, 0x6c9b: 0xa0000000, + 0x6c9c: 0xa0000000, 0x6c9d: 0xa0000000, 0x6c9e: 0xa0000000, 0x6c9f: 0xa0000000, + 0x6ca0: 0xa0000000, 0x6ca1: 0xa0000000, 0x6ca2: 0xa0000000, 0x6ca3: 0xa0000000, + 0x6ca4: 0xa0000000, 0x6ca5: 0xa0000000, 0x6ca6: 0xa0000000, 0x6ca7: 0xa0000000, + 0x6ca8: 0xa0000000, 0x6ca9: 0xa0000000, 0x6caa: 0xa0000000, 0x6cab: 0xa0000000, + 0x6cac: 0xa0000000, 0x6cad: 0xa0000000, 0x6cae: 0xa0000000, 0x6caf: 0xa0000000, + 0x6cb0: 0xa0000000, 0x6cb1: 0xa0000000, 0x6cb2: 0xa0000000, 0x6cb3: 0xa0000000, + 0x6cb4: 0xa0000000, 0x6cb5: 0xa0000000, 0x6cb6: 0xa0000000, 0x6cb7: 0xa0000000, + 0x6cb8: 0xa0000000, 0x6cb9: 0xa0000000, 0x6cba: 0xa0000000, 0x6cbb: 0xa0000000, + 0x6cbc: 0xa0000000, 0x6cbd: 0xa0000000, 0x6cbe: 0xa0000000, 0x6cbf: 0xa0000000, + // Block 0x1b3, offset 0x6cc0 + 0x6cc0: 0xa0000000, 0x6cc1: 0xa0000000, 0x6cc2: 0xa0000000, 0x6cc3: 0xa0000000, + 0x6cc4: 0xa0000000, 0x6cc5: 0xa0000000, 0x6cc6: 0xa0000000, 0x6cc7: 0xa0000000, + 0x6cc8: 0xa0000000, 0x6cc9: 0xa0000000, 0x6cca: 0xa0000000, 0x6ccb: 0xa0000000, + 0x6ccc: 0xa0000000, 0x6ccd: 0xa0000000, 0x6cce: 0xa0000000, 0x6ccf: 0xa0000000, + 0x6cd0: 0xa0000000, 0x6cd1: 0xa0000000, 0x6cd2: 0xa0000000, 0x6cd3: 0xa0000000, + 0x6cd4: 0xa0000000, 0x6cd5: 0xa0000000, 0x6cd6: 0xa0000000, 0x6cd7: 0xa0000000, + 0x6cd8: 0xa0000000, 0x6cd9: 0xa0000000, 0x6cda: 0xa0000000, 0x6cdb: 0xa0000000, + 0x6cdc: 0xa0000000, 0x6cdd: 0xa0000000, 0x6cde: 0xa0000000, 0x6cdf: 0xa0000000, + 0x6ce0: 0xa0000000, 0x6ce1: 0xa0000000, 0x6ce2: 0xa0000000, 0x6ce3: 0xa0000000, + 0x6ce4: 0xa0000000, 0x6ce5: 0xa0000000, 0x6ce6: 0xa0000000, 0x6ce7: 0xa0000000, + 0x6ce8: 0xa0000000, 0x6ce9: 0xa0000000, 0x6cea: 0xa0000000, 0x6ceb: 0xa0000000, + 0x6cec: 0xa0000000, 0x6ced: 0xa0000000, 0x6cee: 0xa0000000, 0x6cef: 0xa0000000, + // Block 0x1b4, offset 0x6d00 + 0x6d00: 0xa0000000, 0x6d01: 0xa0000000, 0x6d02: 0xa0000000, 0x6d03: 0xa0000000, + 0x6d04: 0xa0000000, 0x6d05: 0xa0000000, 0x6d06: 0xa0000000, 0x6d07: 0xa0000000, + 0x6d08: 0xa0000000, 0x6d09: 0x40020020, 0x6d0a: 0x40020220, 0x6d0b: 0x40020420, + 0x6d0c: 0x40020620, 0x6d0d: 0x40020820, 0x6d0e: 0xa0000000, 0x6d0f: 0xa0000000, + 0x6d10: 0xa0000000, 0x6d11: 0xa0000000, 0x6d12: 0xa0000000, 0x6d13: 0xa0000000, + 0x6d14: 0xa0000000, 0x6d15: 0xa0000000, 0x6d16: 0xa0000000, 0x6d17: 0xa0000000, + 0x6d18: 0xa0000000, 0x6d19: 0xa0000000, 0x6d1a: 0xa0000000, 0x6d1b: 0xa0000000, + 0x6d1c: 0xa0000000, 0x6d1d: 0xa0000000, 0x6d1e: 0xa0000000, 0x6d1f: 0xa0000000, + 0x6d20: 0x40021220, 0x6d21: 0x4002ba20, 0x6d22: 0x4003e020, 0x6d23: 0x4004ea20, + 0x6d24: 0x4027de20, 0x6d25: 0x4004ec20, 0x6d26: 0x4004e620, 0x6d27: 0x4003d220, + 0x6d28: 0x4003f420, 0x6d29: 0x4003f620, 0x6d2a: 0x4004d820, 0x6d2b: 0x40093820, + 0x6d2c: 0x40024020, 0x6d2d: 0x40021a20, 0x6d2e: 0x4002e420, 0x6d2f: 0x4004e220, + 0x6d30: 0x4029cc20, 0x6d31: 0x4029ce20, 0x6d32: 0x4029d020, 0x6d33: 0x4029d220, + 0x6d34: 0x4029d420, 0x6d35: 0x4029d620, 0x6d36: 0x4029d820, 0x6d37: 0x4029da20, + 0x6d38: 0x4029dc20, 0x6d39: 0x4029de20, 0x6d3a: 0x40026c20, 0x6d3b: 0x40026220, + 0x6d3c: 0x40094020, 0x6d3d: 0x40094220, 0x6d3e: 0x40094420, 0x6d3f: 0x4002c420, + // Block 0x1b5, offset 0x6d40 + 0x6d40: 0x4004d620, 0x6d41: 0x002bde88, 0x6d42: 0x002c0a88, 0x6d43: 0x002c3a88, + 0x6d44: 0x002c6288, 0x6d45: 0x002c1083, 0x6d46: 0x002d0888, 0x6d47: 0x002d2288, + 0x6d48: 0x0030e483, 0x6d49: 0x002c4083, 0x6d4a: 0x002dcc88, 0x6d4b: 0x002c3c83, + 0x6d4c: 0xc0030002, 0x6d4d: 0x002e8288, 0x6d4e: 0x002e9e88, 0x6d4f: 0x002d2483, + 0x6d50: 0x002f2c88, 0x6d51: 0x002c6483, 0x6d52: 0x002c6683, 0x6d53: 0x002c0e83, + 0x6d54: 0x002c0c83, 0x6d55: 0x00306c88, 0x6d56: 0x0030be88, 0x6d57: 0x0030e288, + 0x6d58: 0x002c3e83, 0x6d59: 0x00310088, 0x6d5a: 0x00312a88, 0x6d5b: 0x4003f820, + 0x6d5c: 0x4004e420, 0x6d5d: 0x4003fa20, 0x6d5e: 0x40062420, 0x6d5f: 0x40021620, + 0x6d60: 0x40061e20, 0x6d61: 0x402bde20, 0x6d62: 0x402c0a20, 0x6d63: 0x402c3a20, + 0x6d64: 0x402c6220, 0x6d65: 0x402c1020, 0x6d66: 0x402d0820, 0x6d67: 0x402d2220, + 0x6d68: 0x4030e420, 0x6d69: 0x402c4020, 0x6d6a: 0x402dcc20, 0x6d6b: 0x402c3c20, + 0x6d6c: 0xc0000002, 0x6d6d: 0x402e8220, 0x6d6e: 0x402e9e20, 0x6d6f: 0x402d2420, + 0x6d70: 0x402f2c20, 0x6d71: 0x402c6420, 0x6d72: 0x402c6620, 0x6d73: 0x402c0e20, + 0x6d74: 0x402c0c20, 0x6d75: 0x40306c20, 0x6d76: 0x4030be20, 0x6d77: 0x4030e220, + 0x6d78: 0x402c3e20, 0x6d79: 0x40310020, 0x6d7a: 0x40312a20, 0x6d7b: 0x4003fc20, + 0x6d7c: 0x40094820, 0x6d7d: 0x4003fe20, 0x6d7e: 0x40094c20, 0x6d7f: 0xa0000000, + // Block 0x1b6, offset 0x6d80 + 0x6d80: 0xe00008f5, 0x6d81: 0xe00008ef, 0x6d82: 0xe0000921, 0x6d83: 0xe0000969, + 0x6d84: 0xe000095b, 0x6d85: 0xe000094d, 0x6d86: 0xe00009dd, 0x6d87: 0xe0000a53, + 0x6d88: 0xe000256e, 0x6d89: 0xe0002568, 0x6d8a: 0xe000257a, 0x6d8b: 0xe00025a6, + 0x6d8c: 0xe000263e, 0x6d8d: 0xe0002638, 0x6d8e: 0xe000264a, 0x6d8f: 0xe0002656, + 0x6d90: 0xe0000ab3, 0x6d91: 0xe0000d63, 0x6d92: 0xe00026db, 0x6d93: 0xe00026d5, + 0x6d94: 0xe00026e7, 0x6d95: 0xe0002727, 0x6d96: 0xe0002713, 0x6d97: 0x40093e20, + 0x6d98: 0xe0000e12, 0x6d99: 0xe0000fe1, 0x6d9a: 0xe0000fdb, 0x6d9b: 0xe0000fed, + 0x6d9c: 0xe0000fff, 0x6d9d: 0xe0001102, 0x6d9e: 0x00318888, 0x6d9f: 0xe0000f7b, + 0x6da0: 0xe00008f2, 0x6da1: 0xe00008ec, 0x6da2: 0xe000091e, 0x6da3: 0xe0000966, + 0x6da4: 0xe0000958, 0x6da5: 0xe000094a, 0x6da6: 0xe00009d5, 0x6da7: 0xe0000a4d, + 0x6da8: 0xe000256b, 0x6da9: 0xe0002565, 0x6daa: 0xe0002577, 0x6dab: 0xe00025a3, + 0x6dac: 0xe000263b, 0x6dad: 0xe0002635, 0x6dae: 0xe0002647, 0x6daf: 0xe0002653, + 0x6db0: 0xe0000aad, 0x6db1: 0xe0000d60, 0x6db2: 0xe00026d8, 0x6db3: 0xe00026d2, + 0x6db4: 0xe00026e4, 0x6db5: 0xe0002724, 0x6db6: 0xe0002710, 0x6db7: 0x40093c20, + 0x6db8: 0xe0000e0f, 0x6db9: 0xe0000fde, 0x6dba: 0xe0000fd8, 0x6dbb: 0xe0000fea, + 0x6dbc: 0xe0000ffc, 0x6dbd: 0xe00010ff, 0x6dbe: 0x40318820, 0x6dbf: 0xe0001114, + // Block 0x1b7, offset 0x6dc0 + 0x6dc0: 0xe0000983, 0x6dc1: 0xe0000980, 0x6dc2: 0xe00008fb, 0x6dc3: 0xe00008f8, + 0x6dc4: 0xe000097d, 0x6dc5: 0xe000097a, 0x6dc6: 0xe0000a38, 0x6dc7: 0xe0000a35, + 0x6dc8: 0xe0000a3e, 0x6dc9: 0xe0000a3b, 0x6dca: 0xe0000a4a, 0x6dcb: 0xe0000a47, + 0x6dcc: 0xe0000a44, 0x6dcd: 0xe0000a41, 0x6dce: 0xe0000a86, 0x6dcf: 0xe0000a83, + 0x6dd0: 0xe0000aaa, 0x6dd1: 0xe0000aa7, 0x6dd2: 0xe00025cc, 0x6dd3: 0xe00025c9, + 0x6dd4: 0xe0002574, 0x6dd5: 0xe0002571, 0x6dd6: 0xe00025b2, 0x6dd7: 0xe00025af, + 0x6dd8: 0xe00025c6, 0x6dd9: 0xe00025c3, 0x6dda: 0xe00025a0, 0x6ddb: 0xe000259d, + 0x6ddc: 0xe0000bb8, 0x6ddd: 0xe0000bb5, 0x6dde: 0xe0000bb2, 0x6ddf: 0xe0000baf, + 0x6de0: 0xe0000bc4, 0x6de1: 0xe0000bc1, 0x6de2: 0xe0000bca, 0x6de3: 0xe0000bc7, + 0x6de4: 0xe0002856, 0x6de5: 0xe0002853, 0x6de6: 0xe0000c1b, 0x6de7: 0xe0000c18, + 0x6de8: 0xe0002664, 0x6de9: 0xe0002661, 0x6dea: 0xe0002673, 0x6deb: 0xe0002670, + 0x6dec: 0xe0002644, 0x6ded: 0xe0002641, 0x6dee: 0xe000266d, 0x6def: 0xe000266a, + 0x6df0: 0xe0002667, 0x6df1: 0x402da220, 0x6df2: 0xe00027e2, 0x6df3: 0xe00027df, + 0x6df4: 0xe0000c8a, 0x6df5: 0xe0000c87, 0x6df6: 0xe000261a, 0x6df7: 0xe0002617, + 0x6df8: 0x402f7220, 0x6df9: 0xe0000ccc, 0x6dfa: 0xe0000cc9, 0x6dfb: 0xe0000cd8, + 0x6dfc: 0xe0000cd5, 0x6dfd: 0xe0000cd2, 0x6dfe: 0xe0000ccf, 0x6dff: 0xe0000d04, + // Block 0x1b8, offset 0x6e00 + 0x6e00: 0xe0000cfe, 0x6e01: 0xe0000cf8, 0x6e02: 0xe0000cf5, 0x6e03: 0xe0000d51, + 0x6e04: 0xe0000d4e, 0x6e05: 0xe0000d6f, 0x6e06: 0xe0000d6c, 0x6e07: 0xe0000d5d, + 0x6e08: 0xe0000d5a, 0x6e09: 0xf0000404, 0x6e0a: 0x002eda88, 0x6e0b: 0x402eda20, + 0x6e0c: 0xe0002761, 0x6e0d: 0xe000275e, 0x6e0e: 0xe00026e1, 0x6e0f: 0xe00026de, + 0x6e10: 0xe0002721, 0x6e11: 0xe000271e, 0x6e12: 0xe0000e93, 0x6e13: 0xe0000e8f, + 0x6e14: 0xe0002697, 0x6e15: 0xe0002694, 0x6e16: 0xe00026a9, 0x6e17: 0xe00026a6, + 0x6e18: 0xe000269d, 0x6e19: 0xe000269a, 0x6e1a: 0xe0002526, 0x6e1b: 0xe0002523, + 0x6e1c: 0xe0002534, 0x6e1d: 0xe0002531, 0x6e1e: 0xe000254e, 0x6e1f: 0xe000254b, + 0x6e20: 0xe000253a, 0x6e21: 0xe0002537, 0x6e22: 0xe0002508, 0x6e23: 0xe0002505, + 0x6e24: 0xe00024f9, 0x6e25: 0xe00024f6, 0x6e26: 0x00303688, 0x6e27: 0x40303620, + 0x6e28: 0xe000102b, 0x6e29: 0xe0001028, 0x6e2a: 0xe000103f, 0x6e2b: 0xe000103c, + 0x6e2c: 0xe0000fe7, 0x6e2d: 0xe0000fe4, 0x6e2e: 0xe0000ff9, 0x6e2f: 0xe0000ff6, + 0x6e30: 0xe0001025, 0x6e31: 0xe0001022, 0x6e32: 0xe0001039, 0x6e33: 0xe0001036, + 0x6e34: 0xe00010d8, 0x6e35: 0xe00010d5, 0x6e36: 0xe000110e, 0x6e37: 0xe000110b, + 0x6e38: 0xe0001117, 0x6e39: 0xe000113b, 0x6e3a: 0xe0001138, 0x6e3b: 0xe000114d, + 0x6e3c: 0xe000114a, 0x6e3d: 0xe0001147, 0x6e3e: 0xe0001144, 0x6e3f: 0xe0000f64, + // Block 0x1b9, offset 0x6e40 + 0x6e40: 0x402c1a20, 0x6e41: 0x002c2a88, 0x6e42: 0x002c3288, 0x6e43: 0x402c3220, + 0x6e44: 0x0031c488, 0x6e45: 0x4031c420, 0x6e46: 0x002efa88, 0x6e47: 0x002c4e88, + 0x6e48: 0x402c4e20, 0x6e49: 0x002c7288, 0x6e4a: 0x002c7a88, 0x6e4b: 0x002c8488, + 0x6e4c: 0x402c8420, 0x6e4d: 0xe000115c, 0x6e4e: 0x002cae88, 0x6e4f: 0x002cb888, + 0x6e50: 0x002cc288, 0x6e51: 0x002d1688, 0x6e52: 0x402d1620, 0x6e53: 0x002d4488, + 0x6e54: 0x002d5888, 0x6e55: 0x402d7820, 0x6e56: 0x002dc288, 0x6e57: 0x002db688, + 0x6e58: 0x002e0a88, 0x6e59: 0x402e0a20, 0x6e5a: 0x402e3820, 0x6e5b: 0x402e7220, + 0x6e5c: 0x0030a088, 0x6e5d: 0x002eb488, 0x6e5e: 0x402ebc20, 0x6e5f: 0x002f1088, + 0x6e60: 0xe0002789, 0x6e61: 0xe0002786, 0x6e62: 0x002d6088, 0x6e63: 0x402d6020, + 0x6e64: 0x002f3e88, 0x6e65: 0x402f3e20, 0x6e66: 0x002f8288, 0x6e67: 0x0031b488, + 0x6e68: 0x4031b420, 0x6e69: 0x00300888, 0x6e6a: 0x40301220, 0x6e6b: 0x40304220, + 0x6e6c: 0x00304a88, 0x6e6d: 0x40304a20, 0x6e6e: 0x00305288, 0x6e6f: 0xe000105f, + 0x6e70: 0xe000105c, 0x6e71: 0x0030b488, 0x6e72: 0x0030cc88, 0x6e73: 0x00311888, + 0x6e74: 0x40311820, 0x6e75: 0x00313488, 0x6e76: 0x40313420, 0x6e77: 0x00316488, + 0x6e78: 0x00316e88, 0x6e79: 0x40316e20, 0x6e7a: 0x40317820, 0x6e7b: 0x4031a620, + 0x6e7c: 0x0031bc88, 0x6e7d: 0x4031bc20, 0x6e7e: 0xe0000fc9, 0x6e7f: 0x40319420, + // Block 0x1ba, offset 0x6e80 + 0x6e80: 0x40321220, 0x6e81: 0x40321a20, 0x6e82: 0x40322220, 0x6e83: 0x40322a20, + 0x6e84: 0xe0000ad5, 0x6e85: 0xe0000ad1, 0x6e86: 0xe0000acd, 0x6e87: 0xf0000a0a, + 0x6e88: 0xf000040a, 0x6e89: 0xf0000404, 0x6e8a: 0xf0000a0a, 0x6e8b: 0xf000040a, + 0x6e8c: 0xf0000404, 0x6e8d: 0xe0000947, 0x6e8e: 0xe0000944, 0x6e8f: 0xe0002650, + 0x6e90: 0xe000264d, 0x6e91: 0xe000270d, 0x6e92: 0xe000270a, 0x6e93: 0xe0000ff3, + 0x6e94: 0xe0000ff0, 0x6e95: 0xe000101e, 0x6e96: 0xe000101a, 0x6e97: 0xe0001006, + 0x6e98: 0xe0001002, 0x6e99: 0xe0001016, 0x6e9a: 0xe0001012, 0x6e9b: 0xe000100e, + 0x6e9c: 0xe000100a, 0x6e9d: 0x402cae20, 0x6e9e: 0xe0000962, 0x6e9f: 0xe000095e, + 0x6ea0: 0xe0000976, 0x6ea1: 0xe0000972, 0x6ea2: 0xe00009f4, 0x6ea3: 0xe00009ef, + 0x6ea4: 0x002d3a88, 0x6ea5: 0x402d3a20, 0x6ea6: 0xe0000bbe, 0x6ea7: 0xe0000bbb, + 0x6ea8: 0xe0002614, 0x6ea9: 0xe0002611, 0x6eaa: 0xe0002753, 0x6eab: 0xe0002750, + 0x6eac: 0xe000275a, 0x6ead: 0xe0002756, 0x6eae: 0xe0001162, 0x6eaf: 0xe000115f, + 0x6eb0: 0xe0000c8d, 0x6eb1: 0xf0000a0a, 0x6eb2: 0xf000040a, 0x6eb3: 0xf0000404, + 0x6eb4: 0xe0000bac, 0x6eb5: 0xe0000ba9, 0x6eb6: 0x002d7888, 0x6eb7: 0x00319488, + 0x6eb8: 0xe0000d57, 0x6eb9: 0xe0000d54, 0x6eba: 0xe0000954, 0x6ebb: 0xe0000950, + 0x6ebc: 0xe00009ea, 0x6ebd: 0xe00009e5, 0x6ebe: 0xe0000e19, 0x6ebf: 0xe0000e15, + // Block 0x1bb, offset 0x6ec0 + 0x6ec0: 0xe000098f, 0x6ec1: 0xe000098c, 0x6ec2: 0xe0000995, 0x6ec3: 0xe0000992, + 0x6ec4: 0xe00025e8, 0x6ec5: 0xe00025e5, 0x6ec6: 0xe00025ee, 0x6ec7: 0xe00025eb, + 0x6ec8: 0xe000267f, 0x6ec9: 0xe000267c, 0x6eca: 0xe0002685, 0x6ecb: 0xe0002682, + 0x6ecc: 0xe000277d, 0x6ecd: 0xe000277a, 0x6ece: 0xe0002783, 0x6ecf: 0xe0002780, + 0x6ed0: 0xe00026af, 0x6ed1: 0xe00026ac, 0x6ed2: 0xe00026b5, 0x6ed3: 0xe00026b2, + 0x6ed4: 0xe0001053, 0x6ed5: 0xe0001050, 0x6ed6: 0xe0001059, 0x6ed7: 0xe0001056, + 0x6ed8: 0xe0002562, 0x6ed9: 0xe000255f, 0x6eda: 0xe0002514, 0x6edb: 0xe0002511, + 0x6edc: 0x00312288, 0x6edd: 0x40312220, 0x6ede: 0xe000285c, 0x6edf: 0xe0002859, + 0x6ee0: 0x002ebc88, 0x6ee1: 0x402c8c20, 0x6ee2: 0x002f2288, 0x6ee3: 0x402f2220, + 0x6ee4: 0x00314088, 0x6ee5: 0x40314020, 0x6ee6: 0xe000096f, 0x6ee7: 0xe000096c, + 0x6ee8: 0xe00025b8, 0x6ee9: 0xe00025b5, 0x6eea: 0xe000271a, 0x6eeb: 0xe0002716, + 0x6eec: 0xe000273e, 0x6eed: 0xe000273a, 0x6eee: 0xe0002745, 0x6eef: 0xe0002742, + 0x6ef0: 0xe000274c, 0x6ef1: 0xe0002748, 0x6ef2: 0xe0001129, 0x6ef3: 0xe0001126, + 0x6ef4: 0x402e5e20, 0x6ef5: 0x402ed020, 0x6ef6: 0x40305a20, 0x6ef7: 0x402dd420, + 0x6ef8: 0xe0000abf, 0x6ef9: 0xe0000ec4, 0x6efa: 0x002be888, 0x6efb: 0x002c4488, + 0x6efc: 0x402c4420, 0x6efd: 0x002e3888, 0x6efe: 0x00303e88, 0x6eff: 0x402ffc20, + // Block 0x1bc, offset 0x6f00 + 0x6f00: 0xe00009b1, 0x6f01: 0xe00009ae, 0x6f02: 0xe0000a22, 0x6f03: 0xe0000a1f, + 0x6f04: 0xe0000a28, 0x6f05: 0xe0000a25, 0x6f06: 0xe0000a2e, 0x6f07: 0xe0000a2b, + 0x6f08: 0xe0000a5a, 0x6f09: 0xe0000a56, 0x6f0a: 0xe0000a8c, 0x6f0b: 0xe0000a89, + 0x6f0c: 0xe0000a98, 0x6f0d: 0xe0000a95, 0x6f0e: 0xe0000aa4, 0x6f0f: 0xe0000aa1, + 0x6f10: 0xe0000a92, 0x6f11: 0xe0000a8f, 0x6f12: 0xe0000a9e, 0x6f13: 0xe0000a9b, + 0x6f14: 0xe00025db, 0x6f15: 0xe00025d7, 0x6f16: 0xe00025d3, 0x6f17: 0xe00025cf, + 0x6f18: 0xe0002602, 0x6f19: 0xe00025ff, 0x6f1a: 0xe0002608, 0x6f1b: 0xe0002605, + 0x6f1c: 0xe00025bf, 0x6f1d: 0xe00025bb, 0x6f1e: 0xe0000b8c, 0x6f1f: 0xe0000b89, + 0x6f20: 0xe0000bd0, 0x6f21: 0xe0000bcd, 0x6f22: 0xe0002868, 0x6f23: 0xe0002865, + 0x6f24: 0xe0002874, 0x6f25: 0xe0002871, 0x6f26: 0xe0002862, 0x6f27: 0xe000285f, + 0x6f28: 0xe000286e, 0x6f29: 0xe000286b, 0x6f2a: 0xe000287a, 0x6f2b: 0xe0002877, + 0x6f2c: 0xe0002691, 0x6f2d: 0xe000268e, 0x6f2e: 0xe000265d, 0x6f2f: 0xe0002659, + 0x6f30: 0xe000260e, 0x6f31: 0xe000260b, 0x6f32: 0xe0002620, 0x6f33: 0xe000261d, + 0x6f34: 0xe0002626, 0x6f35: 0xe0002623, 0x6f36: 0xe0000cde, 0x6f37: 0xe0000cdb, + 0x6f38: 0xe0000ce5, 0x6f39: 0xe0000ce1, 0x6f3a: 0xe0000cf2, 0x6f3b: 0xe0000cef, + 0x6f3c: 0xe0000cec, 0x6f3d: 0xe0000ce9, 0x6f3e: 0xe0000d1e, 0x6f3f: 0xe0000d1b, + // Block 0x1bd, offset 0x6f40 + 0x6f40: 0xe0000d24, 0x6f41: 0xe0000d21, 0x6f42: 0xe0000d2a, 0x6f43: 0xe0000d27, + 0x6f44: 0xe0000d69, 0x6f45: 0xe0000d66, 0x6f46: 0xe0000d7b, 0x6f47: 0xe0000d78, + 0x6f48: 0xe0000d87, 0x6f49: 0xe0000d84, 0x6f4a: 0xe0000d81, 0x6f4b: 0xe0000d7e, + 0x6f4c: 0xe000272e, 0x6f4d: 0xe000272a, 0x6f4e: 0xe0002736, 0x6f4f: 0xe0002732, + 0x6f50: 0xe0002770, 0x6f51: 0xe000276c, 0x6f52: 0xe0002768, 0x6f53: 0xe0002764, + 0x6f54: 0xe0000ea7, 0x6f55: 0xe0000ea4, 0x6f56: 0xe0000ead, 0x6f57: 0xe0000eaa, + 0x6f58: 0xe00026a3, 0x6f59: 0xe00026a0, 0x6f5a: 0xe00026bb, 0x6f5b: 0xe00026b8, + 0x6f5c: 0xe00026c2, 0x6f5d: 0xe00026be, 0x6f5e: 0xe00026c9, 0x6f5f: 0xe00026c6, + 0x6f60: 0xe0002548, 0x6f61: 0xe0002545, 0x6f62: 0xe0002554, 0x6f63: 0xe0002551, + 0x6f64: 0xe000252d, 0x6f65: 0xe0002529, 0x6f66: 0xe0002541, 0x6f67: 0xe000253d, + 0x6f68: 0xe000255b, 0x6f69: 0xe0002557, 0x6f6a: 0xe0002502, 0x6f6b: 0xe00024ff, + 0x6f6c: 0xe000250e, 0x6f6d: 0xe000250b, 0x6f6e: 0xe0002520, 0x6f6f: 0xe000251d, + 0x6f70: 0xe000251a, 0x6f71: 0xe0002517, 0x6f72: 0xe0001093, 0x6f73: 0xe0001090, + 0x6f74: 0xe000109f, 0x6f75: 0xe000109c, 0x6f76: 0xe0001099, 0x6f77: 0xe0001096, + 0x6f78: 0xe0001032, 0x6f79: 0xe000102e, 0x6f7a: 0xe0001046, 0x6f7b: 0xe0001042, + 0x6f7c: 0xe00010a9, 0x6f7d: 0xe00010a6, 0x6f7e: 0xe00010af, 0x6f7f: 0xe00010ac, + // Block 0x1be, offset 0x6f80 + 0x6f80: 0xe00010d2, 0x6f81: 0xe00010cf, 0x6f82: 0xe00010cc, 0x6f83: 0xe00010c9, + 0x6f84: 0xe00010e1, 0x6f85: 0xe00010de, 0x6f86: 0xe00010e7, 0x6f87: 0xe00010e4, + 0x6f88: 0xe00010ed, 0x6f89: 0xe00010ea, 0x6f8a: 0xe0002632, 0x6f8b: 0xe000262f, + 0x6f8c: 0xe000262c, 0x6f8d: 0xe0002629, 0x6f8e: 0xe0001123, 0x6f8f: 0xe0001120, + 0x6f90: 0xe0001141, 0x6f91: 0xe000113e, 0x6f92: 0xe0001153, 0x6f93: 0xe0001150, + 0x6f94: 0xe0001159, 0x6f95: 0xe0001156, 0x6f96: 0xe000287d, 0x6f97: 0xe00024fc, + 0x6f98: 0xe00010db, 0x6f99: 0xe0001111, 0x6f9a: 0xf0000404, 0x6f9b: 0xe0000f70, + 0x6f9c: 0x40300420, 0x6f9d: 0x40300620, 0x6f9e: 0xe0000f7f, 0x6f9f: 0x402c9620, + 0x6fa0: 0xe000099b, 0x6fa1: 0xe0000998, 0x6fa2: 0xe0000989, 0x6fa3: 0xe0000986, + 0x6fa4: 0xe0000928, 0x6fa5: 0xe0000924, 0x6fa6: 0xe0000930, 0x6fa7: 0xe000092c, + 0x6fa8: 0xe0000940, 0x6fa9: 0xe000093c, 0x6faa: 0xe0000938, 0x6fab: 0xe0000934, + 0x6fac: 0xe00009aa, 0x6fad: 0xe00009a6, 0x6fae: 0xe0000902, 0x6faf: 0xe00008fe, + 0x6fb0: 0xe000090a, 0x6fb1: 0xe0000906, 0x6fb2: 0xe000091a, 0x6fb3: 0xe0000916, + 0x6fb4: 0xe0000912, 0x6fb5: 0xe000090e, 0x6fb6: 0xe00009a2, 0x6fb7: 0xe000099e, + 0x6fb8: 0xe00025f4, 0x6fb9: 0xe00025f1, 0x6fba: 0xe00025e2, 0x6fbb: 0xe00025df, + 0x6fbc: 0xe00025ac, 0x6fbd: 0xe00025a9, 0x6fbe: 0xe0002581, 0x6fbf: 0xe000257d, + // Block 0x1bf, offset 0x6fc0 + 0x6fc0: 0xe0002589, 0x6fc1: 0xe0002585, 0x6fc2: 0xe0002599, 0x6fc3: 0xe0002595, + 0x6fc4: 0xe0002591, 0x6fc5: 0xe000258d, 0x6fc6: 0xe00025fb, 0x6fc7: 0xe00025f7, + 0x6fc8: 0xe0002679, 0x6fc9: 0xe0002676, 0x6fca: 0xe000268b, 0x6fcb: 0xe0002688, + 0x6fcc: 0xe00027b7, 0x6fcd: 0xe00027b4, 0x6fce: 0xe0002777, 0x6fcf: 0xe0002774, + 0x6fd0: 0xe00026ee, 0x6fd1: 0xe00026ea, 0x6fd2: 0xe00026f6, 0x6fd3: 0xe00026f2, + 0x6fd4: 0xe0002706, 0x6fd5: 0xe0002702, 0x6fd6: 0xe00026fe, 0x6fd7: 0xe00026fa, + 0x6fd8: 0xe00027be, 0x6fd9: 0xe00027ba, 0x6fda: 0xe0002790, 0x6fdb: 0xe000278c, + 0x6fdc: 0xe0002798, 0x6fdd: 0xe0002794, 0x6fde: 0xe00027a8, 0x6fdf: 0xe00027a4, + 0x6fe0: 0xe00027a0, 0x6fe1: 0xe000279c, 0x6fe2: 0xe00027b0, 0x6fe3: 0xe00027ac, + 0x6fe4: 0xe000108d, 0x6fe5: 0xe000108a, 0x6fe6: 0xe000104d, 0x6fe7: 0xe000104a, + 0x6fe8: 0xe0001066, 0x6fe9: 0xe0001062, 0x6fea: 0xe000106e, 0x6feb: 0xe000106a, + 0x6fec: 0xe000107e, 0x6fed: 0xe000107a, 0x6fee: 0xe0001076, 0x6fef: 0xe0001072, + 0x6ff0: 0xe0001086, 0x6ff1: 0xe0001082, 0x6ff2: 0xe0001108, 0x6ff3: 0xe0001105, + 0x6ff4: 0xe0001135, 0x6ff5: 0xe0001132, 0x6ff6: 0xe000112f, 0x6ff7: 0xe000112c, + 0x6ff8: 0xe000111d, 0x6ff9: 0xe000111a, 0x6ffa: 0xe0000d0a, 0x6ffb: 0xe0000d07, + 0x6ffc: 0x0030d888, 0x6ffd: 0x4030d820, 0x6ffe: 0x00312088, 0x6fff: 0x40312020, + // Block 0x1c0, offset 0x7000 + 0x7000: 0xe00009bc, 0x7001: 0xe00009c0, 0x7002: 0x002c3a8b, 0x7003: 0xf0000a04, + 0x7004: 0x40081c20, 0x7005: 0xe0000a5e, 0x7006: 0xe0000a62, 0x7007: 0x002cc28a, + 0x7008: 0x40081e20, 0x7009: 0xf0000a04, 0x700a: 0x002d2285, 0x700b: 0x002d688b, + 0x700c: 0x002d688b, 0x700d: 0x002d688b, 0x700e: 0x002d6885, 0x700f: 0xf0000202, + 0x7010: 0x002d9a8b, 0x7011: 0x002d9a8b, 0x7012: 0x002e228b, 0x7013: 0x002e2285, + 0x7014: 0x40082020, 0x7015: 0x002e9e8b, 0x7016: 0xe000281e, 0x7017: 0x40082220, + 0x7018: 0x40082420, 0x7019: 0x002f2c8b, 0x701a: 0x002f568b, 0x701b: 0x002f7a8b, + 0x701c: 0x002f7a8b, 0x701d: 0x002f7a8b, 0x701e: 0x40082620, 0x701f: 0x40082820, + 0x7020: 0xe0002833, 0x7021: 0xe0000fbd, 0x7022: 0xe0002842, 0x7023: 0x40082a20, + 0x7024: 0x00312a8b, 0x7025: 0x40082c20, 0x7026: 0x0032a288, 0x7027: 0x40082e20, + 0x7028: 0x00312a8b, 0x7029: 0x40083020, 0x702a: 0x002c3c83, 0x702b: 0xe000094d, + 0x702c: 0x002c0a8b, 0x702d: 0x002c3a8b, 0x702e: 0x40083220, 0x702f: 0x002c9885, + 0x7030: 0x002c988b, 0x7031: 0x002d088b, 0x7032: 0x002d1e88, 0x7033: 0x002e828b, + 0x7034: 0x002ee285, 0x7035: 0x00389084, 0x7036: 0x00389284, 0x7037: 0x00389484, + 0x7038: 0x00389684, 0x7039: 0x002d9a85, 0x703a: 0x40083420, 0x703b: 0xe0000b95, + 0x703c: 0x00327e85, 0x703d: 0x00325685, 0x703e: 0x0032568b, 0x703f: 0x00327e8b, + // Block 0x1c1, offset 0x7040 + 0x7040: 0x00093685, 0x7041: 0x40083620, 0x7042: 0x40083820, 0x7043: 0x40083a20, + 0x7044: 0x40083c20, 0x7045: 0x002c628b, 0x7046: 0x002c6285, 0x7047: 0x002c9885, + 0x7048: 0x002d9a85, 0x7049: 0x002dcc85, 0x704a: 0x40083e20, 0x704b: 0x400a6e20, + 0x704c: 0x40084020, 0x704d: 0xe00009c4, 0x704e: 0x402d1e20, 0x704f: 0x40084220, + 0x7050: 0xe00002cb, 0x7051: 0xe00002d3, 0x7052: 0xe00002b2, 0x7053: 0xe00002bb, + 0x7054: 0xe00003cd, 0x7055: 0xe00002c3, 0x7056: 0xe00003d1, 0x7057: 0xe00004ab, + 0x7058: 0xe0000579, 0x7059: 0xe00002c7, 0x705a: 0xe0000640, 0x705b: 0xe00002cf, + 0x705c: 0xe00004af, 0x705d: 0xe0000644, 0x705e: 0xe0000798, 0x705f: 0xf0001e1e, + 0x7060: 0x002d9a8a, 0x7061: 0xe00027d4, 0x7062: 0xe00027db, 0x7063: 0xe00027ee, + 0x7064: 0x0030be8a, 0x7065: 0xe0002848, 0x7066: 0xe000284f, 0x7067: 0xe00010bb, + 0x7068: 0xe00027f4, 0x7069: 0x0030f68a, 0x706a: 0xe0002883, 0x706b: 0xe000288a, + 0x706c: 0x002e228a, 0x706d: 0x002c3a8a, 0x706e: 0x002c628a, 0x706f: 0x002e828a, + 0x7070: 0x002d9a84, 0x7071: 0xe00027d1, 0x7072: 0xe00027d7, 0x7073: 0xe00027eb, + 0x7074: 0x0030be84, 0x7075: 0xe0002845, 0x7076: 0xe000284b, 0x7077: 0xe00010b6, + 0x7078: 0xe00027f1, 0x7079: 0x0030f684, 0x707a: 0xe0002880, 0x707b: 0xe0002886, + 0x707c: 0x002e2284, 0x707d: 0x002c3a84, 0x707e: 0x002c6284, 0x707f: 0x002e8284, + // Block 0x1c2, offset 0x7080 + 0x7080: 0xe0000024, 0x7081: 0xe0000029, 0x7082: 0xe000002e, 0x7083: 0xe0000033, + 0x7084: 0xe0000038, 0x7085: 0xe000003d, 0x7086: 0xe0000042, 0x7087: 0xe0000047, + 0x7088: 0xf0001f04, 0x7089: 0xf0001f04, 0x708a: 0xf0001f04, 0x708b: 0xf0001f04, + 0x708c: 0xf0001f04, 0x708d: 0xf0001f04, 0x708e: 0xf0001f04, 0x708f: 0xf0001f04, + 0x7090: 0xf0001f04, 0x7091: 0xf0000404, 0x7092: 0xf0000404, 0x7093: 0xf0000404, + 0x7094: 0xf0000404, 0x7095: 0xf0000404, 0x7096: 0xf0000404, 0x7097: 0xf0000404, + 0x7098: 0xf0000404, 0x7099: 0xf0000404, 0x709a: 0xf0000404, 0x709b: 0xf0000404, + 0x709c: 0xf0000404, 0x709d: 0xf0000404, 0x709e: 0xf0000404, 0x709f: 0xf0000404, + 0x70a0: 0xe000249f, 0x70a1: 0xf0000404, 0x70a2: 0xf0000404, 0x70a3: 0xe00024a7, + 0x70a4: 0xe00024af, 0x70a5: 0xf0000404, 0x70a6: 0xe00024b7, 0x70a7: 0xf0000404, + 0x70a8: 0xf0000404, 0x70a9: 0xf0000404, 0x70aa: 0xe00024bf, 0x70ab: 0xf0000404, + 0x70ac: 0xe00024c7, 0x70ad: 0xe00024cf, 0x70ae: 0xe00024d7, 0x70af: 0xe00024df, + 0x70b0: 0xf0000404, 0x70b1: 0xf0000404, 0x70b2: 0xf0000404, 0x70b3: 0xe00024e7, + 0x70b4: 0xf0000404, 0x70b5: 0xf0000404, 0x70b6: 0x002bde8c, 0x70b7: 0x002c0a8c, + 0x70b8: 0x002c3a8c, 0x70b9: 0x002c628c, 0x70ba: 0x002c988c, 0x70bb: 0x002d088c, + 0x70bc: 0x002d228c, 0x70bd: 0x002d688c, 0x70be: 0x002d9a8c, 0x70bf: 0x002dcc8c, + // Block 0x1c3, offset 0x70c0 + 0x70c0: 0xf0001f04, 0x70c1: 0xf0001f04, 0x70c2: 0xf0001f04, 0x70c3: 0xf0001f04, + 0x70c4: 0xf0001f04, 0x70c5: 0xf0001f04, 0x70c6: 0xf0001f04, 0x70c7: 0xf0001f04, + 0x70c8: 0xf0001f04, 0x70c9: 0xf0000404, 0x70ca: 0xf0000404, 0x70cb: 0xf0000404, + 0x70cc: 0xe00027c5, 0x70cd: 0xe0000b85, 0x70ce: 0xe00026cc, 0x70cf: 0xe0000d14, + 0x70d0: 0x00657693, 0x70d1: 0x00657893, 0x70d2: 0x00657a93, 0x70d3: 0x00657e93, + 0x70d4: 0x00658093, 0x70d5: 0x00658293, 0x70d6: 0x00658493, 0x70d7: 0x00658693, + 0x70d8: 0x00658893, 0x70d9: 0x00658a93, 0x70da: 0x00658c93, 0x70db: 0x00658e93, + 0x70dc: 0x00659093, 0x70dd: 0x00659293, 0x70de: 0x00659493, 0x70df: 0x00659693, + 0x70e0: 0x00659893, 0x70e1: 0x00659a93, 0x70e2: 0x00659c93, 0x70e3: 0x00659e93, + 0x70e4: 0x0065a093, 0x70e5: 0x0065a293, 0x70e6: 0x0065a493, 0x70e7: 0x0065a693, + 0x70e8: 0x0065a893, 0x70e9: 0x0065aa93, 0x70ea: 0x0065ac93, 0x70eb: 0x0065ae93, + 0x70ec: 0x0065b093, 0x70ed: 0x0065b293, 0x70ee: 0x0065b493, 0x70ef: 0x0065b693, + 0x70f0: 0x0065b893, 0x70f1: 0x0065ba93, 0x70f2: 0x0065bc93, 0x70f3: 0x0065be93, + 0x70f4: 0x0065c093, 0x70f5: 0x0065c493, 0x70f6: 0x0065c693, 0x70f7: 0x0065c893, + 0x70f8: 0x0065ca93, 0x70f9: 0x0065cc93, 0x70fa: 0x0065ce93, 0x70fb: 0x0065d093, + 0x70fc: 0x0065d293, 0x70fd: 0x0065d493, 0x70fe: 0x0065d693, + // Block 0x1c4, offset 0x7100 + 0x7100: 0xe000230b, 0x7101: 0xe00022f8, 0x7102: 0xe00022fc, 0x7103: 0xe0002311, + 0x7104: 0xe0002316, 0x7105: 0xe000231d, 0x7106: 0xe0002321, 0x7107: 0xe0002325, + 0x7108: 0xe000232b, 0x7109: 0xf0001c1c, 0x710a: 0xe0002330, 0x710b: 0xe000233c, + 0x710c: 0xe0002340, 0x710d: 0xe0002337, 0x710e: 0xe0002346, 0x710f: 0xe000234b, + 0x7110: 0xe000234f, 0x7111: 0xe0002353, 0x7112: 0xf0001c1c, 0x7113: 0xe000235e, + 0x7114: 0xe0002358, 0x7115: 0xf0001c1c, 0x7116: 0xe0002363, 0x7117: 0xe000236d, + 0x7118: 0xf0001f04, 0x7119: 0xf0001f04, 0x711a: 0xf0001f04, 0x711b: 0xf0001f04, + 0x711c: 0xf0001f04, 0x711d: 0xf0001f04, 0x711e: 0xf0001f04, 0x711f: 0xf0001f04, + 0x7120: 0xf0001f04, 0x7121: 0xf0001f04, 0x7122: 0xf0000404, 0x7123: 0xf0000404, + 0x7124: 0xf0000404, 0x7125: 0xf0000404, 0x7126: 0xf0000404, 0x7127: 0xf0000404, + 0x7128: 0xf0000404, 0x7129: 0xf0000404, 0x712a: 0xf0000404, 0x712b: 0xf0000404, + 0x712c: 0xf0000404, 0x712d: 0xf0000404, 0x712e: 0xf0000404, 0x712f: 0xf0000404, + 0x7130: 0xf0000404, 0x7131: 0xe0000c1e, 0x7132: 0xf0001c1c, 0x7133: 0xf0001d1d, + 0x7134: 0xe0000a31, 0x7135: 0xe0002824, 0x7136: 0xf0001c1c, 0x7137: 0xf0001c1c, + 0x7138: 0xe0000ac2, 0x7139: 0xe0000ac6, 0x713a: 0xe00027e8, 0x713b: 0xf0001c1c, + 0x713c: 0xf0001c1c, 0x713d: 0xf0001c1c, 0x713e: 0xf0001c1c, 0x713f: 0xe0002431, + // Block 0x1c5, offset 0x7140 + 0x7140: 0xf0001d1c, 0x7141: 0xf0001d1c, 0x7142: 0xf0001d1c, 0x7143: 0xf0001d1c, + 0x7144: 0xe00027f7, 0x7145: 0xe00027fa, 0x7146: 0xf0001d1d, 0x7147: 0xf0001d1d, + 0x7148: 0xe0000a6b, 0x7149: 0xe0000cb4, 0x714a: 0xf0001d1c, 0x714b: 0xf0001d1c, + 0x714c: 0xf0001d1c, 0x714d: 0xf0001c1c, 0x714e: 0xf0001c1c, 0x714f: 0xe00027fd, + 0x7150: 0xe00027ce, 0x7151: 0xe0000cb9, 0x7152: 0xe0000d36, 0x7153: 0xe0000be3, + 0x7154: 0xe0000fc5, 0x7155: 0xf0001c1c, 0x7156: 0xf0001c1c, 0x7157: 0xf0001c1c, + 0x7158: 0xe0002803, 0x7159: 0xf0001c1c, 0x715a: 0xf0001c1c, 0x715b: 0xf0001c1c, + 0x715c: 0xf0001c1c, 0x715d: 0xf0001c1c, 0x715e: 0xe0002806, 0x715f: 0xe0000d3e, + 0x7160: 0xe0000a72, 0x7161: 0xf0001c1c, 0x7162: 0xe0000cbd, 0x7163: 0xe0000d42, + 0x7164: 0xe0000a76, 0x7165: 0xf0001c1c, 0x7166: 0xe0000cc1, 0x7167: 0xe0000d2d, + 0x7168: 0xe0000d31, 0x7169: 0xf0001c1d, 0x716a: 0xe0000cc5, 0x716b: 0xe0000d4a, + 0x716c: 0xe0000be7, 0x716d: 0xe0000f0b, 0x716e: 0xe0000f0f, 0x716f: 0xe0000f15, + 0x7170: 0xe000282d, 0x7171: 0xe0002821, 0x7172: 0xe000288e, 0x7173: 0xe000281b, + 0x7174: 0xf0001d1c, 0x7175: 0xf0001d1c, 0x7176: 0xf0001d1c, 0x7177: 0xf0001d1c, + 0x7178: 0xe000280f, 0x7179: 0xf0001d1d, 0x717a: 0xf0001d1c, 0x717b: 0xf0001d1c, + 0x717c: 0xf0001d1c, 0x717d: 0xf0001d1c, 0x717e: 0xe0002812, 0x717f: 0xf0001d1d, + // Block 0x1c6, offset 0x7180 + 0x7180: 0xe0002815, 0x7181: 0xf0001d1d, 0x7182: 0xe00009b7, 0x7183: 0xe00024f3, + 0x7184: 0xf0001c1c, 0x7185: 0xf0001c1c, 0x7186: 0xe0000a66, 0x7187: 0xe0000a7a, + 0x7188: 0xf0001d1c, 0x7189: 0xf0001c1d, 0x718a: 0xe00027c2, 0x718b: 0xe00027c8, + 0x718c: 0xe00027e5, 0x718d: 0xe0002800, 0x718e: 0xe0002809, 0x718f: 0xe000280c, + 0x7190: 0xf0001c1c, 0x7191: 0xf0001c1c, 0x7192: 0xe0000d0d, 0x7193: 0xe0002818, + 0x7194: 0xf0001c1c, 0x7195: 0xe0000d3a, 0x7196: 0xe0000d46, 0x7197: 0xe0002827, + 0x7198: 0xe0000eb0, 0x7199: 0xe0000eb8, 0x719a: 0xe000282a, 0x719b: 0xe0002836, + 0x719c: 0xe000283f, 0x719d: 0xf0001c1d, 0x719e: 0xe00010b2, 0x719f: 0xe00009c8, + 0x71a0: 0xf0001f04, 0x71a1: 0xf0001f04, 0x71a2: 0xf0001f04, 0x71a3: 0xf0001f04, + 0x71a4: 0xf0001f04, 0x71a5: 0xf0001f04, 0x71a6: 0xf0001f04, 0x71a7: 0xf0001f04, + 0x71a8: 0xf0001f04, 0x71a9: 0xf0000404, 0x71aa: 0xf0000404, 0x71ab: 0xf0000404, + 0x71ac: 0xf0000404, 0x71ad: 0xf0000404, 0x71ae: 0xf0000404, 0x71af: 0xf0000404, + 0x71b0: 0xf0000404, 0x71b1: 0xf0000404, 0x71b2: 0xf0000404, 0x71b3: 0xf0000404, + 0x71b4: 0xf0000404, 0x71b5: 0xf0000404, 0x71b6: 0xf0000404, 0x71b7: 0xf0000404, + 0x71b8: 0xf0000404, 0x71b9: 0xf0000404, 0x71ba: 0xf0000404, 0x71bb: 0xf0000404, + 0x71bc: 0xf0000404, 0x71bd: 0xf0000404, 0x71be: 0xf0000404, 0x71bf: 0xe0000bdf, + // Block 0x1c7, offset 0x71c0 + 0x71c0: 0xf0000404, 0x71c1: 0xe00026cf, 0x71c2: 0xf0000404, 0x71c3: 0xe0000b99, + 0x71c4: 0xe0000b9d, 0x71c5: 0xe0000f83, 0x71c6: 0xe000283c, + 0x71d3: 0xf0000404, + 0x71d4: 0xf0000404, 0x71d5: 0xf0000404, 0x71d6: 0xf0000404, 0x71d7: 0xf0000404, + 0x71dd: 0xe000150b, 0x71de: 0xa1a09602, 0x71df: 0xe0001514, + 0x71e0: 0x0038ae85, 0x71e1: 0x00389085, 0x71e2: 0x00389685, 0x71e3: 0x00389885, + 0x71e4: 0x0038a485, 0x71e5: 0x0038a685, 0x71e6: 0x0038a885, 0x71e7: 0x0038b685, + 0x71e8: 0x0038ba85, 0x71e9: 0x00093885, 0x71ea: 0xe0001542, 0x71eb: 0xe000153f, + 0x71ec: 0xe000154c, 0x71ed: 0xe0001548, 0x71ee: 0xe00014e1, 0x71ef: 0xe00014e4, + 0x71f0: 0xe00014e7, 0x71f1: 0xe00014ea, 0x71f2: 0xe00014f0, 0x71f3: 0xe00014f3, + 0x71f4: 0xe00014f6, 0x71f5: 0xe00014fc, 0x71f6: 0xe0001505, + 0x71f8: 0xe0001508, 0x71f9: 0xe000150e, 0x71fa: 0xe000151b, 0x71fb: 0xe0001518, + 0x71fc: 0xe0001521, 0x71fe: 0xe0001524, + // Block 0x1c8, offset 0x7200 + 0x7200: 0xf0001f04, 0x7201: 0xf0001f04, 0x7202: 0xf0001f04, 0x7203: 0xf0001f04, + 0x7204: 0xf0001f04, 0x7205: 0xf0001f04, 0x7206: 0xf0001f04, 0x7207: 0xf0001f04, + 0x7208: 0xf0001f04, 0x7209: 0xf0001f04, 0x720a: 0xf0001f04, + 0x7210: 0xf0000a04, 0x7211: 0xf0000a04, 0x7212: 0xf0000a04, 0x7213: 0xf0000a04, + 0x7214: 0xe00024a3, 0x7215: 0xf0000a04, 0x7216: 0xf0000a04, 0x7217: 0xe00024ab, + 0x7218: 0xe00024b3, 0x7219: 0xf0000a04, 0x721a: 0xe00024bb, 0x721b: 0xf0000a04, + 0x721c: 0xf0000a04, 0x721d: 0xf0000a04, 0x721e: 0xe00024c3, 0x721f: 0xf0000a04, + 0x7220: 0xe00024cb, 0x7221: 0xe00024d3, 0x7222: 0xe00024db, 0x7223: 0xe00024e3, + 0x7224: 0xf0000a04, 0x7225: 0xf0000a04, 0x7226: 0xf0000a04, 0x7227: 0xe00024eb, + 0x7228: 0xf0000a04, 0x7229: 0xf0000a04, 0x722a: 0xe00024ef, 0x722b: 0x002c3a8c, + 0x722c: 0x002f7a8c, 0x722d: 0xf0000c0c, 0x722e: 0xf0000c0c, + 0x7230: 0x002bde9d, 0x7231: 0x002c0a9d, 0x7232: 0x002c3a9d, 0x7233: 0x002c629d, + 0x7234: 0x002c989d, 0x7235: 0x002d089d, 0x7236: 0x002d229d, 0x7237: 0x002d689d, + 0x7238: 0x002d9a9d, 0x7239: 0x002dcc9d, 0x723a: 0x002dfe9d, 0x723b: 0x002e229d, + 0x723c: 0x002e829d, 0x723d: 0x002e9e9d, 0x723e: 0x002ee29d, 0x723f: 0x002f2c9d, + // Block 0x1c9, offset 0x7240 + 0x7240: 0x002f569d, 0x7241: 0x002f7a9d, 0x7242: 0x002fe69d, 0x7243: 0x00302c9d, + 0x7244: 0x00306c9d, 0x7245: 0x0030be9d, 0x7246: 0x0030e29d, 0x7247: 0x0030f69d, + 0x7248: 0x0031009d, 0x7249: 0x00312a9d, 0x724a: 0xe00027cb, 0x724b: 0xf0001d1d, + 0x724c: 0xe0002830, 0x724d: 0xe0002839, 0x724e: 0xe0000ebc, 0x724f: 0xf0001d1d, + 0x7250: 0x002bde8c, 0x7251: 0x002c0a8c, 0x7252: 0x002c3a8c, 0x7253: 0x002c628c, + 0x7254: 0x002c988c, 0x7255: 0x002d088c, 0x7256: 0x002d228c, 0x7257: 0x002d688c, + 0x7258: 0x002d9a8c, 0x7259: 0x002dcc8c, 0x725a: 0x002dfe8c, 0x725b: 0x002e228c, + 0x725c: 0x002e828c, 0x725d: 0x002e9e8c, 0x725e: 0x002ee28c, 0x725f: 0x002f2c8c, + 0x7260: 0x002f568c, 0x7261: 0x002f7a8c, 0x7262: 0x002fe68c, 0x7263: 0x00302c8c, + 0x7264: 0x00306c8c, 0x7265: 0x0030be8c, 0x7266: 0x0030e28c, 0x7267: 0x0030f68c, + 0x7268: 0x0031008c, 0x7269: 0x00312a8c, 0x726a: 0xf0001414, 0x726b: 0xf0001414, + 0x7270: 0x002bde9d, 0x7271: 0x002c0a9d, 0x7272: 0x002c3a9d, 0x7273: 0x002c629d, + 0x7274: 0x002c989d, 0x7275: 0x002d089d, 0x7276: 0x002d229d, 0x7277: 0x002d689d, + 0x7278: 0x002d9a9d, 0x7279: 0x002dcc9d, 0x727a: 0x002dfe9d, 0x727b: 0x002e229d, + 0x727c: 0x002e829d, 0x727d: 0x002e9e9d, 0x727e: 0x002ee29d, 0x727f: 0x002f2c9d, + // Block 0x1ca, offset 0x7280 + 0x7280: 0xe0000cfe, 0x7281: 0xe0000cf8, 0x7282: 0xe0000cf5, 0x7283: 0xe0000d51, + 0x7284: 0xe0000d4e, 0x7285: 0xe0000d6f, 0x7286: 0xe0000d6c, 0x7287: 0xe0000d5d, + 0x7288: 0xe0000d5a, 0x7289: 0x002e9e89, 0x728a: 0x002eda88, 0x728b: 0x402eda20, + 0x728c: 0xe0000e2e, 0x728d: 0xe0000e2b, 0x728e: 0xe0000da0, 0x728f: 0xe0000d9d, + 0x7290: 0xe0000de0, 0x7291: 0xe0000ddd, 0x7292: 0xe0000e93, 0x7293: 0xe0000e8f, + 0x7294: 0xe0000eca, 0x7295: 0xe0000ec7, 0x7296: 0xe0000edc, 0x7297: 0xe0000ed9, + 0x7298: 0xe0000ed0, 0x7299: 0xe0000ecd, 0x729a: 0xe0000f1f, 0x729b: 0xe0000f1c, + 0x729c: 0xe0000f2d, 0x729d: 0xe0000f2a, 0x729e: 0xe0000f47, 0x729f: 0xe0000f44, + 0x72a0: 0xe0000f33, 0x72a1: 0xe0000f30, 0x72a2: 0xe0000f99, 0x72a3: 0xe0000f96, + 0x72a4: 0xe0000f8a, 0x72a5: 0xe0000f87, 0x72a6: 0x00303688, 0x72a7: 0x40303620, + 0x72a8: 0xe000102b, 0x72a9: 0xe0001028, 0x72aa: 0xe000103f, 0x72ab: 0xe000103c, + 0x72ac: 0xe0000fe7, 0x72ad: 0xe0000fe4, 0x72ae: 0xe0000ff9, 0x72af: 0xe0000ff6, + 0x72b0: 0xe0001025, 0x72b1: 0xe0001022, 0x72b2: 0xe0001039, 0x72b3: 0xe0001036, + 0x72b4: 0xe00010d8, 0x72b5: 0xe00010d5, 0x72b6: 0xe000110e, 0x72b7: 0xe000110b, + 0x72b8: 0xe0001117, 0x72b9: 0xe000113b, 0x72ba: 0xe0001138, 0x72bb: 0xe000114d, + 0x72bc: 0xe000114a, 0x72bd: 0xe0001147, 0x72be: 0xe0001144, 0x72bf: 0xe0000f64, + // Block 0x1cb, offset 0x72c0 + 0x72c0: 0xa0000000, 0x72c1: 0xa0000000, 0x72c2: 0xa0000000, 0x72c3: 0xa0000000, + 0x72c4: 0xa0000000, 0x72c6: 0x40096620, 0x72c7: 0x40096a20, + 0x72c8: 0x40070820, 0x72c9: 0x4004f220, 0x72ca: 0x4004f620, 0x72cb: 0x4027e620, + 0x72cc: 0x40024820, 0x72cd: 0x40024a20, 0x72ce: 0x40070e20, 0x72cf: 0x40071020, + 0x72d0: 0xae600000, 0x72d1: 0xae600000, 0x72d2: 0xae600000, 0x72d3: 0xae600000, + 0x72d4: 0xae600000, 0x72d5: 0xae600000, 0x72d6: 0xae600000, 0x72d7: 0xae600000, + 0x72d8: 0xa1e00000, 0x72d9: 0xa1f00000, 0x72da: 0xa2000000, 0x72db: 0x40026420, + 0x72de: 0x40027020, 0x72df: 0x4002cc20, + 0x72e0: 0x403aa220, 0x72e1: 0x40391c20, 0x72e2: 0x40391e20, 0x72e3: 0x40392020, + 0x72e4: 0x40392620, 0x72e5: 0x40392820, 0x72e6: 0x40393020, 0x72e7: 0xc0520151, + 0x72e8: 0x40393c20, 0x72e9: 0x40395621, 0x72ea: 0x40395620, 0x72eb: 0x40395820, + 0x72ec: 0x40396420, 0x72ed: 0x40397220, 0x72ee: 0x40397420, 0x72ef: 0x40398820, + 0x72f0: 0x40398a20, 0x72f1: 0x4039a420, 0x72f2: 0x4039a620, 0x72f3: 0x4039c620, + 0x72f4: 0x4039c820, 0x72f5: 0x4039dc20, 0x72f6: 0x4039de20, 0x72f7: 0x4039e620, + 0x72f8: 0x4039e820, 0x72f9: 0x4039ee20, 0x72fa: 0x4039f020, 0x72fb: 0x403a3820, + 0x72fc: 0x403a3a20, 0x72fd: 0x403a9c20, 0x72fe: 0x403a9e20, 0x72ff: 0x403aa020, + // Block 0x1cc, offset 0x7300 + 0x7300: 0xa0000000, 0x7301: 0x4039fc20, 0x7302: 0x403a1220, 0x7303: 0x403a1a20, + 0x7304: 0x403a4020, 0x7305: 0x403a4e20, 0x7306: 0x403a5620, 0x7307: 0x403a6820, + 0x7308: 0xc0560171, 0x7309: 0x403a9021, 0x730a: 0xc0580171, 0x730b: 0xa1b0a202, + 0x730c: 0xa1c0a502, 0x730d: 0xa1d0a902, 0x730e: 0xa1e0ad02, 0x730f: 0xa1f0b202, + 0x7310: 0xa200b602, 0x7311: 0xa210ba02, 0x7312: 0xa220bc02, 0x7313: 0xae60bd02, + 0x7314: 0xae60be02, 0x7315: 0xadc0bf02, 0x7316: 0xadc0c102, 0x7317: 0xae60c202, + 0x7318: 0xae60c302, 0x7319: 0xae60c402, 0x731a: 0xae60c502, 0x731b: 0xae60c602, + 0x731c: 0xadc0c702, 0x731d: 0xae60c802, 0x731e: 0xae60c902, 0x731f: 0xadc0c002, + 0x7320: 0xe000015e, 0x7321: 0xe00001e6, 0x7322: 0xe0000301, 0x7323: 0xe00003db, + 0x7324: 0xe00004b6, 0x7325: 0xe0000580, 0x7326: 0xe000064b, 0x7327: 0xe00006f3, + 0x7328: 0xe000079f, 0x7329: 0xe0000844, 0x732a: 0x4004ee20, 0x732b: 0x40024c20, + 0x732c: 0x40024e20, 0x732d: 0x4004de20, 0x732e: 0x40393a20, 0x732f: 0x403a1020, + 0x7330: 0xa230d102, 0x7331: 0x40392420, 0x7332: 0x40392220, 0x7333: 0x40392a20, + 0x7334: 0x00391c84, 0x7335: 0xf0000404, 0x7336: 0xf0000404, 0x7337: 0xf0000404, + 0x7338: 0xf0000404, 0x7339: 0x40395a20, 0x733a: 0x40395c20, 0x733b: 0x40393e20, + 0x733c: 0x40395e20, 0x733d: 0x40396020, 0x733e: 0x40394020, 0x733f: 0x40396220, + // Block 0x1cd, offset 0x7340 + 0x7340: 0x40073420, 0x7341: 0x40073620, + 0x7353: 0x003a269a, + 0x7354: 0x003a2699, 0x7355: 0x003a2697, 0x7356: 0x003a2698, 0x7357: 0x003a7c9a, + 0x7358: 0x003a7c99, 0x7359: 0x003a7a9a, 0x735a: 0x003a7a99, 0x735b: 0x003a7e9a, + 0x735c: 0x003a7e99, 0x735d: 0xf0001a1a, 0x735e: 0x003a849a, 0x735f: 0x003a8499, + 0x7360: 0x003a789a, 0x7361: 0x003a7899, 0x7362: 0x003a809a, 0x7363: 0x003a8099, + 0x7364: 0x003a989a, 0x7365: 0x003a9899, 0x7366: 0x003a9897, 0x7367: 0x003a9898, + 0x7368: 0x003a90a3, 0x7369: 0x003a90a4, 0x736a: 0xe0001559, 0x736b: 0xe0001556, + 0x736c: 0xe0001589, 0x736d: 0xe0001586, 0x736e: 0xe000158f, 0x736f: 0xe000158c, + 0x7370: 0xe000159b, 0x7371: 0xe0001598, 0x7372: 0xe0001595, 0x7373: 0xe0001592, + 0x7374: 0xe00015a1, 0x7375: 0xe000159e, 0x7376: 0xe00015bf, 0x7377: 0xe00015bc, + 0x7378: 0xe00015b9, 0x7379: 0xe00015ad, 0x737a: 0xe00015a7, 0x737b: 0xe00015a4, + 0x737c: 0x003a929a, 0x737d: 0x003a9299, 0x737e: 0x003a9297, 0x737f: 0x003a9298, + // Block 0x1ce, offset 0x7380 + 0x7380: 0xe000155f, 0x7381: 0xe0001565, 0x7382: 0xe000157a, 0x7383: 0xe00015b0, + 0x7384: 0xe00015b6, 0x7385: 0xf0001a1a, 0x7386: 0xf0001a1a, 0x7387: 0xf0001a1a, + 0x7388: 0xf0001a1a, 0x7389: 0xe0002894, 0x738a: 0xf0001a1a, 0x738b: 0xf0001a1a, + 0x738c: 0xf0001a1a, 0x738d: 0xf0001a1a, 0x738e: 0xf0001a1a, 0x738f: 0xe000289a, + 0x7390: 0xf0001a1a, 0x7391: 0xf0001a1a, 0x7392: 0xf0001a1a, 0x7393: 0xe00028a0, + 0x7394: 0xf0001a1a, 0x7395: 0xf0001a1a, 0x7396: 0xf0001a1a, 0x7397: 0xf0001a1a, + 0x7398: 0xf0001a1a, 0x7399: 0xf0001a1a, 0x739a: 0xf0001a1a, 0x739b: 0xf0001a1a, + 0x739c: 0xf0001a1a, 0x739d: 0xf0001a1a, 0x739e: 0xf0001a1a, 0x739f: 0xf0001a1a, + 0x73a0: 0xf0001a1a, 0x73a1: 0xf0001a1a, 0x73a2: 0xf0001a1a, 0x73a3: 0xf0001a1a, + 0x73a4: 0xf0001a1a, 0x73a5: 0xf0001a1a, 0x73a6: 0xf0001a1a, 0x73a7: 0xf0001a1a, + 0x73a8: 0xf0001a1a, 0x73a9: 0xf0001a1a, 0x73aa: 0xf0001a1a, 0x73ab: 0xf0001a1a, + 0x73ac: 0xf0001a1a, 0x73ad: 0xf0001a1a, 0x73ae: 0xf0001a1a, 0x73af: 0xf0001a1a, + 0x73b0: 0xf0001a1a, 0x73b1: 0xe00028e2, 0x73b2: 0xf0001a1a, 0x73b3: 0xf0001a1a, + 0x73b4: 0xf0001a1a, 0x73b5: 0xe00028e8, 0x73b6: 0xf0001a1a, 0x73b7: 0xf0001a1a, + 0x73b8: 0xf0001a1a, 0x73b9: 0xf0001a1a, 0x73ba: 0xf0001a1a, 0x73bb: 0xf0001a1a, + 0x73bc: 0xf0001a1a, 0x73bd: 0xe00028ee, 0x73be: 0xf0001a1a, 0x73bf: 0xf0001a1a, + // Block 0x1cf, offset 0x73c0 + 0x73c0: 0xf0001a1a, 0x73c1: 0xf0001a1a, 0x73c2: 0xf0001a1a, 0x73c3: 0xe00028f4, + 0x73c4: 0xf0001a1a, 0x73c5: 0xf0001a1a, 0x73c6: 0xf0001a1a, 0x73c7: 0xf0001a1a, + 0x73c8: 0xf0001a1a, 0x73c9: 0xe00028f7, 0x73ca: 0xf0001a1a, 0x73cb: 0xf0001a1a, + 0x73cc: 0xf0001a1a, 0x73cd: 0xf0001a1a, 0x73ce: 0xf0001a1a, 0x73cf: 0xe00028fd, + 0x73d0: 0xf0001a1a, 0x73d1: 0xf0001a1a, 0x73d2: 0xf0001a1a, 0x73d3: 0xe0002900, + 0x73d4: 0xf0001a1a, 0x73d5: 0xf0001a1a, 0x73d6: 0xf0001a1a, 0x73d7: 0xf0001a1a, + 0x73d8: 0xf0001a1a, 0x73d9: 0xe0002906, 0x73da: 0xf0001a1a, 0x73db: 0xf0001a1a, + 0x73dc: 0xf0001a1a, 0x73dd: 0x003a90a8, 0x73de: 0xe0000003, 0x73df: 0xe0000006, + 0x73e0: 0xe0000009, 0x73e1: 0xe000000c, 0x73e2: 0xe000000f, 0x73e3: 0xe0000012, + 0x73e4: 0xe000156b, 0x73e5: 0xe000156e, 0x73e6: 0xe0001577, 0x73e7: 0xe000157d, + 0x73e8: 0xe00015aa, 0x73e9: 0xe00015b3, 0x73ea: 0xf0001919, 0x73eb: 0xf0001919, + 0x73ec: 0xf0001919, 0x73ed: 0xf0001919, 0x73ee: 0xe0002891, 0x73ef: 0xf0001919, + 0x73f0: 0xf0001919, 0x73f1: 0xf0001919, 0x73f2: 0xf0001919, 0x73f3: 0xf0001919, + 0x73f4: 0xe0002897, 0x73f5: 0xf0001919, 0x73f6: 0xf0001919, 0x73f7: 0xf0001919, + 0x73f8: 0xf0001919, 0x73f9: 0xf0001919, 0x73fa: 0xe000289d, 0x73fb: 0xf0001919, + 0x73fc: 0xe00028df, 0x73fd: 0xf0001919, 0x73fe: 0xe00028e5, 0x73ff: 0xf0001919, + // Block 0x1d0, offset 0x7400 + 0x7400: 0xf0001919, 0x7401: 0xf0001919, 0x7402: 0xf0001919, 0x7403: 0xe00028eb, + 0x7404: 0xf0001919, 0x7405: 0xf0001919, 0x7406: 0xe00028f1, 0x7407: 0xf0001919, + 0x7408: 0xf0001919, 0x7409: 0xf0001919, 0x740a: 0xf0001919, 0x740b: 0xf0001919, + 0x740c: 0xf0001919, 0x740d: 0xf0001919, 0x740e: 0xe00028fa, 0x740f: 0xf0001919, + 0x7410: 0x003a90a7, 0x7411: 0xf0001919, 0x7412: 0xf0001919, 0x7413: 0xf0001919, + 0x7414: 0xf0001919, 0x7415: 0xe0002903, 0x7416: 0xf0001919, 0x7417: 0xe000155c, + 0x7418: 0xe0001562, 0x7419: 0xe0001568, 0x741a: 0xe0001571, 0x741b: 0xe0001580, + 0x741c: 0xf0001717, 0x741d: 0xf0001717, 0x741e: 0xf0001717, 0x741f: 0xf0001717, + 0x7420: 0xf0001717, 0x7421: 0xf0001717, 0x7422: 0xf0001717, 0x7423: 0xf0001717, + 0x7424: 0xf0001717, 0x7425: 0xf0001717, 0x7426: 0xf0001717, 0x7427: 0xf0001717, + 0x7428: 0xf0001717, 0x7429: 0xf0001717, 0x742a: 0xf0001717, 0x742b: 0xf0001717, + 0x742c: 0xf0001717, 0x742d: 0xf0001717, 0x742e: 0xf0001717, 0x742f: 0xf0001717, + 0x7430: 0xf0001717, 0x7431: 0xf0001717, 0x7432: 0xf0001717, 0x7433: 0xf0001717, + 0x7434: 0xf0001717, 0x7435: 0xf0001717, 0x7436: 0xf0001717, 0x7437: 0xf0001717, + 0x7438: 0xf0001717, 0x7439: 0xf0001717, 0x743a: 0xf0001717, 0x743b: 0xf0001717, + 0x743c: 0xf0001717, 0x743d: 0xf0001717, 0x743e: 0xf0001717, 0x743f: 0xf0001717, + // Block 0x1d1, offset 0x7440 + 0x7440: 0xf0001717, 0x7441: 0xf0001717, 0x7442: 0xf0001717, 0x7443: 0xf0001717, + 0x7444: 0xf0001717, 0x7445: 0xf0001717, 0x7446: 0xf0001717, 0x7447: 0xf0001717, + 0x7448: 0xf0001717, 0x7449: 0xf0001717, 0x744a: 0xf0001717, 0x744b: 0xf0001717, + 0x744c: 0xf0001717, 0x744d: 0xf0001717, 0x744e: 0xf0001717, 0x744f: 0xf0001717, + 0x7450: 0xf0001717, 0x7451: 0xf0001717, 0x7452: 0xf0001717, 0x7453: 0xf0001717, + 0x7454: 0xf0001717, 0x7455: 0xf0001717, 0x7456: 0xf0001717, 0x7457: 0xf0001717, + 0x7458: 0xf0001717, 0x7459: 0xf0001717, 0x745a: 0xf0001717, 0x745b: 0xf0001717, + 0x745c: 0xf0001717, 0x745d: 0xf0001717, 0x745e: 0xf0001717, 0x745f: 0xe0001574, + 0x7460: 0xe0001583, 0x7461: 0xf0001818, 0x7462: 0xf0001818, 0x7463: 0xf0001818, + 0x7464: 0xf0001818, 0x7465: 0xf0001818, 0x7466: 0xf0001818, 0x7467: 0xf0001818, + 0x7468: 0xf0001818, 0x7469: 0xf0001818, 0x746a: 0xf0001818, 0x746b: 0xf0001818, + 0x746c: 0xf0001818, 0x746d: 0xf0001818, 0x746e: 0xf0001818, 0x746f: 0xf0001818, + 0x7470: 0xf0001818, 0x7471: 0xf0001818, 0x7472: 0xf0001818, 0x7473: 0xf0001818, + 0x7474: 0xf0001818, 0x7475: 0xe00028d0, 0x7476: 0xf0001a1a, 0x7477: 0xe00028d6, + 0x7478: 0xf0001a1a, 0x7479: 0xe00028dc, 0x747a: 0xf0001a1a, 0x747b: 0xe00028b8, + 0x747c: 0xf0001a1a, 0x747d: 0xe00028be, 0x747e: 0xf0001a1a, 0x747f: 0xe00028ac, + // Block 0x1d2, offset 0x7480 + 0x7480: 0xf0001a1a, 0x7481: 0xe00028a6, 0x7482: 0xf0001a1a, 0x7483: 0xe00028b2, + 0x7484: 0xf0001a1a, 0x7485: 0xe00028c4, 0x7486: 0xf0001a1a, 0x7487: 0xe00028ca, + 0x7488: 0xf0001a1a, 0x7489: 0xf0001a1a, 0x748a: 0xf0001a1a, 0x748b: 0xf0001a1a, + 0x748c: 0xf0001a1a, 0x748d: 0xf0001a1a, 0x748e: 0xf0001a1a, 0x748f: 0xf0001a1a, + 0x7490: 0xf0001a1a, 0x7491: 0xe00028cd, 0x7492: 0xf0001919, 0x7493: 0xe00028d3, + 0x7494: 0xf0001919, 0x7495: 0xe00028d9, 0x7496: 0xf0001919, 0x7497: 0xe00028b5, + 0x7498: 0xf0001919, 0x7499: 0xe00028bb, 0x749a: 0xf0001919, 0x749b: 0xe00028a9, + 0x749c: 0xf0001919, 0x749d: 0xe00028a3, 0x749e: 0xf0001919, 0x749f: 0xe00028af, + 0x74a0: 0xf0001919, 0x74a1: 0xe00028c1, 0x74a2: 0xf0001919, 0x74a3: 0xe00028c7, + 0x74a4: 0xf0001919, 0x74a5: 0xf0001919, 0x74a6: 0xf0001919, 0x74a7: 0xf0001919, + 0x74a8: 0xf0001919, 0x74a9: 0xf0001919, 0x74aa: 0xf0001919, 0x74ab: 0xf0001919, + 0x74ac: 0xf0001919, 0x74ad: 0xf0001717, 0x74ae: 0xf0001717, 0x74af: 0xf0001717, + 0x74b0: 0xf0001717, 0x74b1: 0xf0001717, 0x74b2: 0xf0001717, 0x74b3: 0xf0001717, + 0x74b4: 0xf0001818, 0x74b5: 0xf0001818, 0x74b6: 0xf0001818, 0x74b7: 0xf0001818, + 0x74b8: 0xf0001818, 0x74b9: 0xf0001818, 0x74ba: 0xf0001818, 0x74bb: 0xf0001818, + 0x74bc: 0xf0001919, 0x74bd: 0xf0001a1a, 0x74be: 0x4004c020, 0x74bf: 0x4004c220, + // Block 0x1d3, offset 0x74c0 + 0x74c0: 0x00391c9a, 0x74c1: 0x00391e9a, 0x74c2: 0x00391e99, 0x74c3: 0x0039209a, + 0x74c4: 0x00392099, 0x74c5: 0x0039269a, 0x74c6: 0x00392699, 0x74c7: 0x0039289a, + 0x74c8: 0x00392899, 0x74c9: 0x0039309a, 0x74ca: 0x00393099, 0x74cb: 0x00393097, + 0x74cc: 0x00393098, 0x74cd: 0x0039389a, 0x74ce: 0x00393899, 0x74cf: 0x00393c9a, + 0x74d0: 0x00393c99, 0x74d1: 0x00393c97, 0x74d2: 0x00393c98, 0x74d3: 0x003956a4, + 0x74d4: 0x003956a3, 0x74d5: 0x0039569a, 0x74d6: 0x00395699, 0x74d7: 0x00395697, + 0x74d8: 0x00395698, 0x74d9: 0x0039589a, 0x74da: 0x00395899, 0x74db: 0x00395897, + 0x74dc: 0x00395898, 0x74dd: 0x0039649a, 0x74de: 0x00396499, 0x74df: 0x00396497, + 0x74e0: 0x00396498, 0x74e1: 0x0039729a, 0x74e2: 0x00397299, 0x74e3: 0x00397297, + 0x74e4: 0x00397298, 0x74e5: 0x0039749a, 0x74e6: 0x00397499, 0x74e7: 0x00397497, + 0x74e8: 0x00397498, 0x74e9: 0x0039889a, 0x74ea: 0x00398899, 0x74eb: 0x00398a9a, + 0x74ec: 0x00398a99, 0x74ed: 0x0039a49a, 0x74ee: 0x0039a499, 0x74ef: 0x0039a69a, + 0x74f0: 0x0039a699, 0x74f1: 0x0039c69a, 0x74f2: 0x0039c699, 0x74f3: 0x0039c697, + 0x74f4: 0x0039c698, 0x74f5: 0x0039c89a, 0x74f6: 0x0039c899, 0x74f7: 0x0039c897, + 0x74f8: 0x0039c898, 0x74f9: 0x0039dc9a, 0x74fa: 0x0039dc99, 0x74fb: 0x0039dc97, + 0x74fc: 0x0039dc98, 0x74fd: 0x0039de9a, 0x74fe: 0x0039de99, 0x74ff: 0x0039de97, + // Block 0x1d4, offset 0x7500 + 0x7500: 0x0039de98, 0x7501: 0x0039e69a, 0x7502: 0x0039e699, 0x7503: 0x0039e697, + 0x7504: 0x0039e698, 0x7505: 0x0039e89a, 0x7506: 0x0039e899, 0x7507: 0x0039e897, + 0x7508: 0x0039e898, 0x7509: 0x0039ee9a, 0x750a: 0x0039ee99, 0x750b: 0x0039ee97, + 0x750c: 0x0039ee98, 0x750d: 0x0039f09a, 0x750e: 0x0039f099, 0x750f: 0x0039f097, + 0x7510: 0x0039f098, 0x7511: 0x0039fc9a, 0x7512: 0x0039fc99, 0x7513: 0x0039fc97, + 0x7514: 0x0039fc98, 0x7515: 0x003a129a, 0x7516: 0x003a1299, 0x7517: 0x003a1297, + 0x7518: 0x003a1298, 0x7519: 0x003a1a9a, 0x751a: 0x003a1a99, 0x751b: 0x003a1a97, + 0x751c: 0x003a1a98, 0x751d: 0x003a409a, 0x751e: 0x003a4099, 0x751f: 0x003a4097, + 0x7520: 0x003a4098, 0x7521: 0x003a4e9a, 0x7522: 0x003a4e99, 0x7523: 0x003a4e97, + 0x7524: 0x003a4e98, 0x7525: 0x003a569a, 0x7526: 0x003a5699, 0x7527: 0x003a5697, + 0x7528: 0x003a5698, 0x7529: 0x003a689a, 0x752a: 0x003a6899, 0x752b: 0x003a6897, + 0x752c: 0x003a6898, 0x752d: 0x003a749a, 0x752e: 0x003a7499, 0x752f: 0x003a90a6, + 0x7530: 0x003a90a5, 0x7531: 0x003a909a, 0x7532: 0x003a9099, 0x7533: 0x003a9097, + 0x7534: 0x003a9098, 0x7535: 0xe0001732, 0x7536: 0xe000172f, 0x7537: 0xe0001738, + 0x7538: 0xe0001735, 0x7539: 0xe000173e, 0x753a: 0xe000173b, 0x753b: 0xf0001a1a, + 0x753c: 0xf0001919, 0x753f: 0xa0000000, + // Block 0x1d5, offset 0x7540 + 0x7541: 0x40409a20, 0x7542: 0x40409820, 0x7543: 0x40409c20, + 0x7545: 0x40407c20, 0x7546: 0x40407e20, 0x7547: 0x40408020, + 0x7548: 0x40408220, 0x7549: 0x40408420, 0x754a: 0x40408620, 0x754b: 0x40408820, + 0x754c: 0x40408c20, 0x754f: 0x40409020, + 0x7550: 0x40409220, 0x7553: 0x40409420, + 0x7554: 0x40409620, 0x7555: 0xc33108b1, 0x7556: 0x40409a20, 0x7557: 0x40409c20, + 0x7558: 0x40409e20, 0x7559: 0x4040a020, 0x755a: 0x4040a220, 0x755b: 0x4040a420, + 0x755c: 0x4040a620, 0x755d: 0x4040a820, 0x755e: 0x4040aa20, 0x755f: 0x4040ac20, + 0x7560: 0x4040ae20, 0x7561: 0x4040b020, 0x7562: 0x4040b220, 0x7563: 0x4040b420, + 0x7564: 0xc32f0851, 0x7565: 0x4040b820, 0x7566: 0x4040ba20, 0x7567: 0x4040bc20, + 0x7568: 0x4040be20, 0x756a: 0x4040c020, 0x756b: 0x4040c220, + 0x756c: 0x4040c420, 0x756d: 0x4040c620, 0x756e: 0x4040c820, 0x756f: 0x4040ca20, + 0x7570: 0x4040cc20, 0x7572: 0x4040d020, + 0x7576: 0x4040d420, 0x7577: 0x4040d620, + 0x7578: 0x4040d820, 0x7579: 0x4040da20, + 0x757c: 0xa070f102, 0x757d: 0x4040dc20, 0x757e: 0x4040de20, 0x757f: 0x4040e020, + // Block 0x1d6, offset 0x7580 + 0x7580: 0x4040e220, 0x7581: 0x4040e420, 0x7582: 0x4040e620, 0x7583: 0x4040e820, + 0x7584: 0x4040ea20, 0x7587: 0xc05a0191, + 0x7588: 0x4040f220, 0x758b: 0x4040f420, + 0x758c: 0x4040f620, 0x758d: 0x8209207c, 0x758e: 0x4040b420, + 0x7597: 0x4040fa20, + 0x759c: 0xe000183f, 0x759d: 0xe0001842, 0x759f: 0xe0001848, + 0x75a0: 0x40408a20, 0x75a1: 0x40408e20, 0x75a2: 0x4040ec20, 0x75a3: 0x4040ee20, + 0x75a6: 0xe000016d, 0x75a7: 0xe00001fb, + 0x75a8: 0xe0000316, 0x75a9: 0xe00003f0, 0x75aa: 0xe00004cb, 0x75ab: 0xe0000595, + 0x75ac: 0xe0000660, 0x75ad: 0xe0000708, 0x75ae: 0xe00007b4, 0x75af: 0xe0000859, + 0x75b0: 0x4040ce20, 0x75b1: 0x4040d220, 0x75b2: 0x4027e820, 0x75b3: 0x4027ea20, + 0x75b4: 0x40283020, 0x75b5: 0x40283220, 0x75b6: 0x40283420, 0x75b7: 0x40283620, + 0x75b8: 0x40283820, 0x75b9: 0x40283a20, 0x75ba: 0x40073a20, 0x75bb: 0x4027ec20, + // Block 0x1d7, offset 0x75c0 + 0x75c0: 0xa0000000, 0x75c1: 0xa0000000, 0x75c2: 0xa0000000, 0x75c3: 0xa0000000, + 0x75c4: 0xa0000000, 0x75c5: 0xa0000000, 0x75c6: 0xa0000000, 0x75c7: 0xa0000000, + 0x75c8: 0xa0000000, 0x75c9: 0x40020020, 0x75ca: 0x40020220, 0x75cb: 0x40020420, + 0x75cc: 0x40020620, 0x75cd: 0x40020820, 0x75ce: 0xa0000000, 0x75cf: 0xa0000000, + 0x75d0: 0xa0000000, 0x75d1: 0xa0000000, 0x75d2: 0xa0000000, 0x75d3: 0xa0000000, + 0x75d4: 0xa0000000, 0x75d5: 0xa0000000, 0x75d6: 0xa0000000, 0x75d7: 0xa0000000, + 0x75d8: 0xa0000000, 0x75d9: 0xa0000000, 0x75da: 0xa0000000, 0x75db: 0xa0000000, + 0x75dc: 0xa0000000, 0x75dd: 0xa0000000, 0x75de: 0xa0000000, 0x75df: 0xa0000000, + 0x75e0: 0x40021220, 0x75e1: 0x4002ba20, 0x75e2: 0x4003e020, 0x75e3: 0x4004ea20, + 0x75e4: 0x4027de20, 0x75e5: 0x4004ec20, 0x75e6: 0x4004e620, 0x75e7: 0x4003d220, + 0x75e8: 0x4003f420, 0x75e9: 0x4003f620, 0x75ea: 0x4004d820, 0x75eb: 0x40093820, + 0x75ec: 0x40024020, 0x75ed: 0x40021a20, 0x75ee: 0x4002e420, 0x75ef: 0x4004e220, + 0x75f0: 0x4029cc20, 0x75f1: 0x4029ce20, 0x75f2: 0x4029d020, 0x75f3: 0x4029d220, + 0x75f4: 0x4029d420, 0x75f5: 0x4029d620, 0x75f6: 0x4029d820, 0x75f7: 0x4029da20, + 0x75f8: 0x4029dc20, 0x75f9: 0x4029de20, 0x75fa: 0x40026c20, 0x75fb: 0x40026220, + 0x75fc: 0x40094020, 0x75fd: 0x40094220, 0x75fe: 0x40094420, 0x75ff: 0x4002c420, + // Block 0x1d8, offset 0x7600 + 0x7600: 0x4004d620, 0x7601: 0x002bde88, 0x7602: 0x002c0a88, 0x7603: 0xc3350911, + 0x7604: 0x002c6288, 0x7605: 0x002c9888, 0x7606: 0x002d0888, 0x7607: 0xc33900d1, + 0x7608: 0x002d6888, 0x7609: 0xc33b0931, 0x760a: 0x002dcc88, 0x760b: 0x002dfe88, + 0x760c: 0xc0030002, 0x760d: 0x002e8288, 0x760e: 0x002e9e88, 0x760f: 0xc33f0071, + 0x7610: 0x002f2c88, 0x7611: 0x002e0083, 0x7612: 0x002f7a88, 0x7613: 0xc3430911, + 0x7614: 0x00302c88, 0x7615: 0xc3470071, 0x7616: 0x0030be88, 0x7617: 0x0030e288, + 0x7618: 0x002d6a83, 0x7619: 0x00310088, 0x761a: 0x00312a88, 0x761b: 0x4003f820, + 0x761c: 0x4004e420, 0x761d: 0x4003fa20, 0x761e: 0x40062420, 0x761f: 0x40021620, + 0x7620: 0x40061e20, 0x7621: 0x402bde20, 0x7622: 0x402c0a20, 0x7623: 0xc3330911, + 0x7624: 0x402c6220, 0x7625: 0x402c9820, 0x7626: 0x402d0820, 0x7627: 0xc33700d1, + 0x7628: 0x402d6820, 0x7629: 0x402d9a20, 0x762a: 0x402dcc20, 0x762b: 0x402dfe20, + 0x762c: 0xc0000002, 0x762d: 0x402e8220, 0x762e: 0x402e9e20, 0x762f: 0xc33d0071, + 0x7630: 0x402f2c20, 0x7631: 0x402e0020, 0x7632: 0x402f7a20, 0x7633: 0xc3410911, + 0x7634: 0x40302c20, 0x7635: 0xc3450071, 0x7636: 0x4030be20, 0x7637: 0x4030e220, + 0x7638: 0x402d6a20, 0x7639: 0x40310020, 0x763a: 0x40312a20, 0x763b: 0x4003fc20, + 0x763c: 0x40094820, 0x763d: 0x4003fe20, 0x763e: 0x40094c20, 0x763f: 0xa0000000, + // Block 0x1d9, offset 0x7640 + 0x7640: 0xe00008f5, 0x7641: 0xe00008ef, 0x7642: 0xe0000921, 0x7643: 0xe0000969, + 0x7644: 0xe000095b, 0x7645: 0xe000094d, 0x7646: 0xe00009dd, 0x7647: 0x002c3c83, + 0x7648: 0xe0000ae8, 0x7649: 0xe0000ae2, 0x764a: 0xe0000af4, 0x764b: 0xe0000b20, + 0x764c: 0xe0002918, 0x764d: 0xe0002915, 0x764e: 0xe000291e, 0x764f: 0xe0002924, + 0x7650: 0xe0000ab3, 0x7651: 0xe0000d63, 0x7652: 0xe0000d9a, 0x7653: 0xe0000d94, + 0x7654: 0xe0000da6, 0x7655: 0xe0000de6, 0x7656: 0x002ee483, 0x7657: 0x40093e20, + 0x7658: 0xe0000e12, 0x7659: 0xe0000fe1, 0x765a: 0xe0000fdb, 0x765b: 0xe0000fed, + 0x765c: 0x00306e83, 0x765d: 0xe0001102, 0x765e: 0x00318888, 0x765f: 0xe0000f7b, + 0x7660: 0xe00008f2, 0x7661: 0xe00008ec, 0x7662: 0xe000091e, 0x7663: 0xe0000966, + 0x7664: 0xe0000958, 0x7665: 0xe000094a, 0x7666: 0xe00009d5, 0x7667: 0x402c3c20, + 0x7668: 0xe0000ae5, 0x7669: 0xe0000adf, 0x766a: 0xe0000af1, 0x766b: 0xe0000b1d, + 0x766c: 0xe0000c28, 0x766d: 0xe0000c22, 0x766e: 0xe0000c34, 0x766f: 0xe0000c40, + 0x7670: 0xe0000aad, 0x7671: 0xe0000d60, 0x7672: 0xe0000d97, 0x7673: 0xe0000d91, + 0x7674: 0xe0000da3, 0x7675: 0xe0000de3, 0x7676: 0x402ee420, 0x7677: 0x40093c20, + 0x7678: 0xe0000e0f, 0x7679: 0xe0000fde, 0x767a: 0xe0000fd8, 0x767b: 0xe0000fea, + 0x767c: 0x40306e20, 0x767d: 0xe00010ff, 0x767e: 0x40318820, 0x767f: 0xe0001114, + // Block 0x1da, offset 0x7680 + 0x7680: 0xe0000983, 0x7681: 0xe0000980, 0x7682: 0xe00008fb, 0x7683: 0xe00008f8, + 0x7684: 0xe000097d, 0x7685: 0xe000097a, 0x7686: 0xe0000a38, 0x7687: 0xe0000a35, + 0x7688: 0xe0000a3e, 0x7689: 0xe0000a3b, 0x768a: 0xe0000a4a, 0x768b: 0xe0000a47, + 0x768c: 0xe0000a44, 0x768d: 0xe0000a41, 0x768e: 0xe0000a86, 0x768f: 0xe0000a83, + 0x7690: 0xe0000aaa, 0x7691: 0xe0000aa7, 0x7692: 0xe0000b46, 0x7693: 0xe0000b43, + 0x7694: 0xe0000aee, 0x7695: 0xe0000aeb, 0x7696: 0xe0000b2c, 0x7697: 0xe0000b29, + 0x7698: 0xe0000b40, 0x7699: 0xe0000b3d, 0x769a: 0xe0000b1a, 0x769b: 0xe0000b17, + 0x769c: 0xe0000bb8, 0x769d: 0xe0000bb5, 0x769e: 0x002d2483, 0x769f: 0x402d2420, + 0x76a0: 0xe0000bc4, 0x76a1: 0xe0000bc1, 0x76a2: 0xe0000bca, 0x76a3: 0xe0000bc7, + 0x76a4: 0xe0000bee, 0x76a5: 0xe0000beb, 0x76a6: 0xe0000c1b, 0x76a7: 0xe0000c18, + 0x76a8: 0xe000292b, 0x76a9: 0xe0000c4e, 0x76aa: 0xe0002931, 0x76ab: 0xe0000c5d, + 0x76ac: 0xe000291b, 0x76ad: 0xe0000c2e, 0x76ae: 0xe000292e, 0x76af: 0xe0000c57, + 0x76b0: 0x002d9a83, 0x76b1: 0x402d9820, 0x76b2: 0xe00027e2, 0x76b3: 0xf0000404, + 0x76b4: 0xe0000c8a, 0x76b5: 0xe0000c87, 0x76b6: 0xe0000c9f, 0x76b7: 0xe0000c9c, + 0x76b8: 0x402f7220, 0x76b9: 0xe0000ccc, 0x76ba: 0xe0000cc9, 0x76bb: 0xe0000cd8, + 0x76bc: 0xe0000cd5, 0x76bd: 0xe0000cd2, 0x76be: 0xe0000ccf, 0x76bf: 0xe0000d04, + // Block 0x1db, offset 0x76c0 + 0x76c0: 0xe0000cfe, 0x76c1: 0xe0000cf8, 0x76c2: 0xe0000cf5, 0x76c3: 0xe0000d51, + 0x76c4: 0xe0000d4e, 0x76c5: 0xe0000d6f, 0x76c6: 0xe0000d6c, 0x76c7: 0xe0000d5d, + 0x76c8: 0xe0000d5a, 0x76c9: 0xf0000404, 0x76ca: 0x002eda88, 0x76cb: 0x402eda20, + 0x76cc: 0xe0000e2e, 0x76cd: 0xe0000e2b, 0x76ce: 0xe0000da0, 0x76cf: 0xe0000d9d, + 0x76d0: 0xe0000de0, 0x76d1: 0xe0000ddd, 0x76d2: 0xe0000e93, 0x76d3: 0xe0000e8f, + 0x76d4: 0xe0000eca, 0x76d5: 0xe0000ec7, 0x76d6: 0xe0000edc, 0x76d7: 0xe0000ed9, + 0x76d8: 0xe0000ed0, 0x76d9: 0xe0000ecd, 0x76da: 0xe0000f1f, 0x76db: 0xe0000f1c, + 0x76dc: 0xe0000f2d, 0x76dd: 0xe0000f2a, 0x76de: 0x002fe883, 0x76df: 0x402fe820, + 0x76e0: 0xe0000f33, 0x76e1: 0xe0000f30, 0x76e2: 0xe0000f99, 0x76e3: 0xe0000f96, + 0x76e4: 0xe0000f8a, 0x76e5: 0xe0000f87, 0x76e6: 0x00303688, 0x76e7: 0x40303620, + 0x76e8: 0xe000102b, 0x76e9: 0xe0001028, 0x76ea: 0xe000103f, 0x76eb: 0xe000103c, + 0x76ec: 0xe0000fe7, 0x76ed: 0xe0000fe4, 0x76ee: 0xe0000ff9, 0x76ef: 0xe0000ff6, + 0x76f0: 0xe0001025, 0x76f1: 0xe0001022, 0x76f2: 0xe0001039, 0x76f3: 0xe0001036, + 0x76f4: 0xe00010d8, 0x76f5: 0xe00010d5, 0x76f6: 0xe000110e, 0x76f7: 0xe000110b, + 0x76f8: 0xe0001117, 0x76f9: 0xe000113b, 0x76fa: 0xe0001138, 0x76fb: 0xe000114d, + 0x76fc: 0xe000114a, 0x76fd: 0xe0001147, 0x76fe: 0xe0001144, 0x76ff: 0xe0000f64, + // Block 0x1dc, offset 0x7700 + 0x7700: 0x402c1a20, 0x7701: 0x002c2a88, 0x7702: 0x002c3288, 0x7703: 0x402c3220, + 0x7704: 0x0031c488, 0x7705: 0x4031c420, 0x7706: 0x002efa88, 0x7707: 0x002c4e88, + 0x7708: 0x402c4e20, 0x7709: 0x002c7288, 0x770a: 0x002c7a88, 0x770b: 0x002c8488, + 0x770c: 0x402c8420, 0x770d: 0xe000115c, 0x770e: 0x002cae88, 0x770f: 0x002c9a83, + 0x7710: 0x002cc288, 0x7711: 0x002d1688, 0x7712: 0x402d1620, 0x7713: 0x002d4488, + 0x7714: 0x002d5888, 0x7715: 0x402d7820, 0x7716: 0x002dc288, 0x7717: 0x002db688, + 0x7718: 0x002e0a88, 0x7719: 0x402e0a20, 0x771a: 0x402e3820, 0x771b: 0x402e7220, + 0x771c: 0x0030a088, 0x771d: 0x002eb488, 0x771e: 0x402ebc20, 0x771f: 0x002f1088, + 0x7720: 0xe0000e56, 0x7721: 0xe0000e53, 0x7722: 0x002d6088, 0x7723: 0x402d6020, + 0x7724: 0x002f3e88, 0x7725: 0x402f3e20, 0x7726: 0x002f8288, 0x7727: 0x0031b488, + 0x7728: 0x4031b420, 0x7729: 0x00300888, 0x772a: 0x40301220, 0x772b: 0x40304220, + 0x772c: 0x00304a88, 0x772d: 0x40304a20, 0x772e: 0x00305288, 0x772f: 0xe000105f, + 0x7730: 0xe000105c, 0x7731: 0x0030b488, 0x7732: 0x0030cc88, 0x7733: 0x00311888, + 0x7734: 0x40311820, 0x7735: 0x00313488, 0x7736: 0x40313420, 0x7737: 0x00316488, + 0x7738: 0x00316e88, 0x7739: 0x40316e20, 0x773a: 0x40317820, 0x773b: 0x4031a620, + 0x773c: 0x0031bc88, 0x773d: 0x4031bc20, 0x773e: 0xe0000fc9, 0x773f: 0x40319420, + // Block 0x1dd, offset 0x7740 + 0x7740: 0x40321220, 0x7741: 0x40321a20, 0x7742: 0x40322220, 0x7743: 0x40322a20, + 0x7744: 0xe0000ad5, 0x7745: 0xe0000ad1, 0x7746: 0xe0000acd, 0x7747: 0xf0000a0a, + 0x7748: 0xf000040a, 0x7749: 0xf0000404, 0x774a: 0xf0000a0a, 0x774b: 0xf000040a, + 0x774c: 0xf0000404, 0x774d: 0xe0000947, 0x774e: 0xe0000944, 0x774f: 0xe0002921, + 0x7750: 0xe0000c3a, 0x7751: 0xe0000dcc, 0x7752: 0xe0000dc9, 0x7753: 0xe0000ff3, + 0x7754: 0xe0000ff0, 0x7755: 0xe0002964, 0x7756: 0xe0002961, 0x7757: 0xe0002952, + 0x7758: 0xe000294f, 0x7759: 0xe000295e, 0x775a: 0xe000295b, 0x775b: 0xe0002958, + 0x775c: 0xe0002955, 0x775d: 0x402cae20, 0x775e: 0xe0000962, 0x775f: 0xe000095e, + 0x7760: 0xe0000976, 0x7761: 0xe0000972, 0x7762: 0xe00009f4, 0x7763: 0xe00009ef, + 0x7764: 0x002d3a88, 0x7765: 0x402d3a20, 0x7766: 0xe0000bbe, 0x7767: 0xe0000bbb, + 0x7768: 0xe0000c99, 0x7769: 0xe0000c96, 0x776a: 0xe0000e20, 0x776b: 0xe0000e1d, + 0x776c: 0xe0000e27, 0x776d: 0xe0000e23, 0x776e: 0xe0001162, 0x776f: 0xe000115f, + 0x7770: 0xe0000c8d, 0x7771: 0xf0000a0a, 0x7772: 0xf000040a, 0x7773: 0xf0000404, + 0x7774: 0xe0000bac, 0x7775: 0xe0000ba9, 0x7776: 0x002d7888, 0x7777: 0x00319488, + 0x7778: 0xe0000d57, 0x7779: 0xe0000d54, 0x777a: 0xe0000954, 0x777b: 0xe0000950, + 0x777c: 0xe00009ea, 0x777d: 0xe00009e5, 0x777e: 0xe0000e19, 0x777f: 0xe0000e15, + // Block 0x1de, offset 0x7780 + 0x7780: 0xe000098f, 0x7781: 0xe000098c, 0x7782: 0xe0000995, 0x7783: 0xe0000992, + 0x7784: 0xe0000b62, 0x7785: 0xe0000b5f, 0x7786: 0xe0000b68, 0x7787: 0xe0000b65, + 0x7788: 0xe0002937, 0x7789: 0xe0000c69, 0x778a: 0xe000293a, 0x778b: 0xe0000c6f, + 0x778c: 0xe0000e4a, 0x778d: 0xe0000e47, 0x778e: 0xe0000e50, 0x778f: 0xe0000e4d, + 0x7790: 0xe0000ee8, 0x7791: 0xe0000ee5, 0x7792: 0xe0000eee, 0x7793: 0xe0000eeb, + 0x7794: 0xe0001053, 0x7795: 0xe0001050, 0x7796: 0xe0001059, 0x7797: 0xe0001056, + 0x7798: 0xe0000f61, 0x7799: 0xe0000f5e, 0x779a: 0xe0000fa5, 0x779b: 0xe0000fa2, + 0x779c: 0x00312288, 0x779d: 0x40312220, 0x779e: 0xe0000bf4, 0x779f: 0xe0000bf1, + 0x77a0: 0x002ebc88, 0x77a1: 0x402c8c20, 0x77a2: 0x002f2288, 0x77a3: 0x402f2220, + 0x77a4: 0x00314088, 0x77a5: 0x40314020, 0x77a6: 0xe000096f, 0x77a7: 0xe000096c, + 0x77a8: 0xe0000b32, 0x77a9: 0xe0000b2f, 0x77aa: 0xe000294c, 0x77ab: 0xe0002949, + 0x77ac: 0xe0000dfd, 0x77ad: 0xe0000df9, 0x77ae: 0xe0000e04, 0x77af: 0xe0000e01, + 0x77b0: 0xe0000e0b, 0x77b1: 0xe0000e07, 0x77b2: 0xe0001129, 0x77b3: 0xe0001126, + 0x77b4: 0x402e5e20, 0x77b5: 0x402ed020, 0x77b6: 0x40305a20, 0x77b7: 0x402dd420, + 0x77b8: 0xe0000abf, 0x77b9: 0xe0000ec4, 0x77ba: 0x002be888, 0x77bb: 0x002c4488, + 0x77bc: 0x402c4420, 0x77bd: 0x002e3888, 0x77be: 0x00303e88, 0x77bf: 0x402ffc20, + // Block 0x1df, offset 0x77c0 + 0x77c0: 0x40315820, 0x77c1: 0x0031d488, 0x77c2: 0x4031d420, 0x77c3: 0x002c1a88, + 0x77c4: 0x00307c88, 0x77c5: 0x0030da88, 0x77c6: 0x002ca288, 0x77c7: 0x402ca220, + 0x77c8: 0x002dde88, 0x77c9: 0x402dde20, 0x77ca: 0x002f6a88, 0x77cb: 0x402f6a20, + 0x77cc: 0x002f8e88, 0x77cd: 0x402f8e20, 0x77ce: 0x00311088, 0x77cf: 0x40311020, + 0x77d0: 0x402bf020, 0x77d1: 0x402bf820, 0x77d2: 0x402c0220, 0x77d3: 0x402c2a20, + 0x77d4: 0x402efa20, 0x77d5: 0x402c5620, 0x77d6: 0x402c7220, 0x77d7: 0x402c7a20, + 0x77d8: 0x402ccc20, 0x77d9: 0x402c9a20, 0x77da: 0x402cd420, 0x77db: 0x402cc220, + 0x77dc: 0x402cdc20, 0x77dd: 0x402ce820, 0x77de: 0x402cf020, 0x77df: 0x402dee20, + 0x77e0: 0x402d4420, 0x77e1: 0x402d2a20, 0x77e2: 0x402d3220, 0x77e3: 0x402d5820, + 0x77e4: 0x402d0020, 0x77e5: 0x40308820, 0x77e6: 0x402d8020, 0x77e7: 0x402d8e20, + 0x77e8: 0x402db620, 0x77e9: 0x402dc220, 0x77ea: 0x402daa20, 0x77eb: 0x402e4220, + 0x77ec: 0x402e4a20, 0x77ed: 0x402e5420, 0x77ee: 0x402e6820, 0x77ef: 0x4030a020, + 0x77f0: 0x4030ac20, 0x77f1: 0x402e9020, 0x77f2: 0x402eb420, 0x77f3: 0x402ec820, + 0x77f4: 0x402ea620, 0x77f5: 0x402f1020, 0x77f6: 0x402eee20, 0x77f7: 0x402f1a20, + 0x77f8: 0x402f4c20, 0x77f9: 0x402f9820, 0x77fa: 0x402fa220, 0x77fb: 0x402fac20, + 0x77fc: 0x402fb620, 0x77fd: 0x402fbe20, 0x77fe: 0x402fc620, 0x77ff: 0x402fd020, + // Block 0x1e0, offset 0x7800 + 0x7800: 0xe00009b1, 0x7801: 0xe00009ae, 0x7802: 0xe0000a22, 0x7803: 0xe0000a1f, + 0x7804: 0xe0000a28, 0x7805: 0xe0000a25, 0x7806: 0xe0000a2e, 0x7807: 0xe0000a2b, + 0x7808: 0xe000260e, 0x7809: 0xe000260b, 0x780a: 0xe0000a8c, 0x780b: 0xe0000a89, + 0x780c: 0xe0000a98, 0x780d: 0xe0000a95, 0x780e: 0xe0000aa4, 0x780f: 0xe0000aa1, + 0x7810: 0xe0000a92, 0x7811: 0xe0000a8f, 0x7812: 0xe0000a9e, 0x7813: 0xe0000a9b, + 0x7814: 0xe0000b55, 0x7815: 0xe0000b51, 0x7816: 0xe0000b4d, 0x7817: 0xe0000b49, + 0x7818: 0xe0000b7c, 0x7819: 0xe0000b79, 0x781a: 0xe0000b82, 0x781b: 0xe0000b7f, + 0x781c: 0xe0000b39, 0x781d: 0xe0000b35, 0x781e: 0xe0000b8c, 0x781f: 0xe0000b89, + 0x7820: 0xe0000bd0, 0x7821: 0xe0000bcd, 0x7822: 0xe0000c00, 0x7823: 0xe0000bfd, + 0x7824: 0xe0000c0c, 0x7825: 0xe0000c09, 0x7826: 0xe0000bfa, 0x7827: 0xe0000bf7, + 0x7828: 0xe0000c06, 0x7829: 0xe0000c03, 0x782a: 0xe0000c12, 0x782b: 0xe0000c0f, + 0x782c: 0xe0002940, 0x782d: 0xe0000c7b, 0x782e: 0xe0002927, 0x782f: 0xe0000c46, + 0x7830: 0xe0000c93, 0x7831: 0xe0000c90, 0x7832: 0xe0000cab, 0x7833: 0xe0000ca8, + 0x7834: 0xe0000cb1, 0x7835: 0xe0000cae, 0x7836: 0xe0000cde, 0x7837: 0xe0000cdb, + 0x7838: 0xe0000ce5, 0x7839: 0xe0000ce1, 0x783a: 0xe0000cf2, 0x783b: 0xe0000cef, + 0x783c: 0xe0000cec, 0x783d: 0xe0000ce9, 0x783e: 0xe0000d1e, 0x783f: 0xe0000d1b, + // Block 0x1e1, offset 0x7840 + 0x7840: 0xe0000d24, 0x7841: 0xe0000d21, 0x7842: 0xe0000d2a, 0x7843: 0xe0000d27, + 0x7844: 0xe0000d69, 0x7845: 0xe0000d66, 0x7846: 0xe0000d7b, 0x7847: 0xe0000d78, + 0x7848: 0xe0000d87, 0x7849: 0xe0000d84, 0x784a: 0xe0000d81, 0x784b: 0xe0000d7e, + 0x784c: 0xe0000ded, 0x784d: 0xe0000de9, 0x784e: 0xe0002946, 0x784f: 0xe0002943, + 0x7850: 0xe0000e3d, 0x7851: 0xe0000e39, 0x7852: 0xe0000e35, 0x7853: 0xe0000e31, + 0x7854: 0xe0000ea7, 0x7855: 0xe0000ea4, 0x7856: 0xe0000ead, 0x7857: 0xe0000eaa, + 0x7858: 0xe0000ed6, 0x7859: 0xe0000ed3, 0x785a: 0xe0000ef4, 0x785b: 0xe0000ef1, + 0x785c: 0xe0000efb, 0x785d: 0xe0000ef7, 0x785e: 0xe0000f02, 0x785f: 0xe0000eff, + 0x7860: 0xe0000f41, 0x7861: 0xe0000f3e, 0x7862: 0xe0000f53, 0x7863: 0xe0000f50, + 0x7864: 0xe0000f26, 0x7865: 0xe0000f22, 0x7866: 0xe0000f3a, 0x7867: 0xe0000f36, + 0x7868: 0xe0000f5a, 0x7869: 0xe0000f56, 0x786a: 0xe0000f93, 0x786b: 0xe0000f90, + 0x786c: 0xe0000f9f, 0x786d: 0xe0000f9c, 0x786e: 0xe0000fb1, 0x786f: 0xe0000fae, + 0x7870: 0xe0000fab, 0x7871: 0xe0000fa8, 0x7872: 0xe0001093, 0x7873: 0xe0001090, + 0x7874: 0xe000109f, 0x7875: 0xe000109c, 0x7876: 0xe0001099, 0x7877: 0xe0001096, + 0x7878: 0xe0001032, 0x7879: 0xe000102e, 0x787a: 0xe0002964, 0x787b: 0xe0002961, + 0x787c: 0xe00010a9, 0x787d: 0xe00010a6, 0x787e: 0xe00010af, 0x787f: 0xe00010ac, + // Block 0x1e2, offset 0x7880 + 0x7880: 0xe00010d2, 0x7881: 0xe00010cf, 0x7882: 0xe00010cc, 0x7883: 0xe00010c9, + 0x7884: 0xe00010e1, 0x7885: 0xe00010de, 0x7886: 0xe00010e7, 0x7887: 0xe00010e4, + 0x7888: 0xe00010ed, 0x7889: 0xe00010ea, 0x788a: 0xe0002912, 0x788b: 0xe000290f, + 0x788c: 0xe000290c, 0x788d: 0xe0002909, 0x788e: 0xe0001123, 0x788f: 0xe0001120, + 0x7890: 0xe0001141, 0x7891: 0xe000113e, 0x7892: 0xe0001153, 0x7893: 0xe0001150, + 0x7894: 0xe0001159, 0x7895: 0xe0001156, 0x7896: 0xe0000c15, 0x7897: 0xe0000f8d, + 0x7898: 0xe00010db, 0x7899: 0xe0001111, 0x789a: 0xf0000404, 0x789b: 0xe0000f70, + 0x789c: 0x40300420, 0x789d: 0x40300620, 0x789e: 0xe0000f7f, 0x789f: 0x402c9620, + 0x78a0: 0xe000099b, 0x78a1: 0xe0000998, 0x78a2: 0xe0000989, 0x78a3: 0xe0000986, + 0x78a4: 0xe0000928, 0x78a5: 0xe0000924, 0x78a6: 0xe0000930, 0x78a7: 0xe000092c, + 0x78a8: 0xe0000940, 0x78a9: 0xe000093c, 0x78aa: 0xe0000938, 0x78ab: 0xe0000934, + 0x78ac: 0xe00009aa, 0x78ad: 0xe00009a6, 0x78ae: 0xe0000902, 0x78af: 0xe00008fe, + 0x78b0: 0xe000090a, 0x78b1: 0xe0000906, 0x78b2: 0xe000091a, 0x78b3: 0xe0000916, + 0x78b4: 0xe0000912, 0x78b5: 0xe000090e, 0x78b6: 0xe00009a2, 0x78b7: 0xe000099e, + 0x78b8: 0xe0000b6e, 0x78b9: 0xe0000b6b, 0x78ba: 0xe0000b5c, 0x78bb: 0xe0000b59, + 0x78bc: 0xe0000b26, 0x78bd: 0xe0000b23, 0x78be: 0xe0000afb, 0x78bf: 0xe0000af7, + // Block 0x1e3, offset 0x78c0 + 0x78c0: 0xe0000b03, 0x78c1: 0xe0000aff, 0x78c2: 0xe0000b13, 0x78c3: 0xe0000b0f, + 0x78c4: 0xe0000b0b, 0x78c5: 0xe0000b07, 0x78c6: 0xe0000b75, 0x78c7: 0xe0000b71, + 0x78c8: 0xe0002934, 0x78c9: 0xe0000c63, 0x78ca: 0xe000293d, 0x78cb: 0xe0000c75, + 0x78cc: 0xe0000e84, 0x78cd: 0xe0000e81, 0x78ce: 0xe0000e44, 0x78cf: 0xe0000e41, + 0x78d0: 0xe0000dad, 0x78d1: 0xe0000da9, 0x78d2: 0xe0000db5, 0x78d3: 0xe0000db1, + 0x78d4: 0xe0000dc5, 0x78d5: 0xe0000dc1, 0x78d6: 0xe0000dbd, 0x78d7: 0xe0000db9, + 0x78d8: 0xe0000e8b, 0x78d9: 0xe0000e87, 0x78da: 0xe0000e5d, 0x78db: 0xe0000e59, + 0x78dc: 0xe0000e65, 0x78dd: 0xe0000e61, 0x78de: 0xe0000e75, 0x78df: 0xe0000e71, + 0x78e0: 0xe0000e6d, 0x78e1: 0xe0000e69, 0x78e2: 0xe0000e7d, 0x78e3: 0xe0000e79, + 0x78e4: 0xe000108d, 0x78e5: 0xe000108a, 0x78e6: 0xe000104d, 0x78e7: 0xe000104a, + 0x78e8: 0xe0001066, 0x78e9: 0xe0001062, 0x78ea: 0xe000106e, 0x78eb: 0xe000106a, + 0x78ec: 0xe000107e, 0x78ed: 0xe000107a, 0x78ee: 0xe0001076, 0x78ef: 0xe0001072, + 0x78f0: 0xe0001086, 0x78f1: 0xe0001082, 0x78f2: 0xe0001108, 0x78f3: 0xe0001105, + 0x78f4: 0xe0001135, 0x78f5: 0xe0001132, 0x78f6: 0xe000112f, 0x78f7: 0xe000112c, + 0x78f8: 0xe000111d, 0x78f9: 0xe000111a, 0x78fa: 0xe0000d0a, 0x78fb: 0xe0000d07, + 0x78fc: 0x0030d888, 0x78fd: 0x4030d820, 0x78fe: 0x00312088, 0x78ff: 0x40312020, + // Block 0x1e4, offset 0x7900 + 0x7900: 0x00093685, 0x7901: 0x40083620, 0x7902: 0x40083820, 0x7903: 0x40083a20, + 0x7904: 0x40083c20, 0x7905: 0x002c628b, 0x7906: 0x002c6285, 0x7907: 0x002c9885, + 0x7908: 0x002d9a85, 0x7909: 0x002dcc85, 0x790a: 0x40083e20, 0x790b: 0x400a6e20, + 0x790c: 0x40084020, 0x790d: 0xe00009c4, 0x790e: 0x402d1e20, 0x790f: 0x40084220, + 0x7910: 0xe00002cb, 0x7911: 0xe00002d3, 0x7912: 0xe00002b2, 0x7913: 0xe00002bb, + 0x7914: 0xe00003cd, 0x7915: 0xe00002c3, 0x7916: 0xe00003d1, 0x7917: 0xe00004ab, + 0x7918: 0xe0000579, 0x7919: 0xe00002c7, 0x791a: 0xe0000640, 0x791b: 0xe00002cf, + 0x791c: 0xe00004af, 0x791d: 0xe0000644, 0x791e: 0xe0000798, 0x791f: 0xf0001e1e, + 0x7920: 0x002d9a8a, 0x7921: 0xe00027d4, 0x7922: 0xe00027db, 0x7923: 0xe00027ee, + 0x7924: 0x0030be8a, 0x7925: 0xe0002848, 0x7926: 0xe000284f, 0x7927: 0xe00010bb, + 0x7928: 0xe00027f4, 0x7929: 0x0030f68a, 0x792a: 0xe0002883, 0x792b: 0xe000288a, + 0x792c: 0x002e228a, 0x792d: 0x002c3a8a, 0x792e: 0x002c628a, 0x792f: 0x002e828a, + 0x7930: 0x002d9a84, 0x7931: 0xf0001f04, 0x7932: 0xf0000404, 0x7933: 0xf0001f04, + 0x7934: 0x0030be84, 0x7935: 0xf0001f04, 0x7936: 0xf0000404, 0x7937: 0xe00010b6, + 0x7938: 0xe00027f1, 0x7939: 0x0030f684, 0x793a: 0xe0002880, 0x793b: 0xe0002886, + 0x793c: 0x002e2284, 0x793d: 0x002c3a84, 0x793e: 0x002c6284, 0x793f: 0x002e8284, + // Block 0x1e5, offset 0x7940 + 0x7940: 0xe0000024, 0x7941: 0xe0000029, 0x7942: 0xe000002e, 0x7943: 0xe0000033, + 0x7944: 0xe0000038, 0x7945: 0xe000003d, 0x7946: 0xe0000042, 0x7947: 0xe0000047, + 0x7948: 0xf0001f04, 0x7949: 0xf0001f04, 0x794a: 0xf0001f04, 0x794b: 0xf0001f04, + 0x794c: 0xf0001f04, 0x794d: 0xf0001f04, 0x794e: 0xf0001f04, 0x794f: 0xf0001f04, + 0x7950: 0xf0001f04, 0x7951: 0xf0000404, 0x7952: 0xf0000404, 0x7953: 0xf0000404, + 0x7954: 0xf0000404, 0x7955: 0xf0000404, 0x7956: 0xf0000404, 0x7957: 0xf0000404, + 0x7958: 0xf0000404, 0x7959: 0xf0000404, 0x795a: 0xf0000404, 0x795b: 0xf0000404, + 0x795c: 0xf0000404, 0x795d: 0xf0000404, 0x795e: 0xf0000404, 0x795f: 0xf0000404, + 0x7960: 0xf0000404, 0x7961: 0xf0000404, 0x7962: 0xf0000404, 0x7963: 0xf0000404, + 0x7964: 0xf0000404, 0x7965: 0xf0000404, 0x7966: 0xf0000404, 0x7967: 0xf0000404, + 0x7968: 0xf0000404, 0x7969: 0xf0000404, 0x796a: 0xf0000404, 0x796b: 0xf0000404, + 0x796c: 0xe00024c7, 0x796d: 0xf0000404, 0x796e: 0xf0000404, 0x796f: 0xf0000404, + 0x7970: 0xf0000404, 0x7971: 0xf0000404, 0x7972: 0xf0000404, 0x7973: 0xe00024e7, + 0x7974: 0xf0000404, 0x7975: 0xf0000404, 0x7976: 0x002bde8c, 0x7977: 0x002c0a8c, + 0x7978: 0x002c3a8c, 0x7979: 0x002c628c, 0x797a: 0x002c988c, 0x797b: 0x002d088c, + 0x797c: 0x002d228c, 0x797d: 0x002d688c, 0x797e: 0x002d9a8c, 0x797f: 0x002dcc8c, + // Block 0x1e6, offset 0x7980 + 0x7980: 0xe000230b, 0x7981: 0xe00022f8, 0x7982: 0xe00022fc, 0x7983: 0xe0002311, + 0x7984: 0xe0002316, 0x7985: 0xe000231d, 0x7986: 0xe0002321, 0x7987: 0xe0002325, + 0x7988: 0xe000232b, 0x7989: 0xf0001c1c, 0x798a: 0xe0002330, 0x798b: 0xe000233c, + 0x798c: 0xe0002340, 0x798d: 0xe0002337, 0x798e: 0xe0002346, 0x798f: 0xe000234b, + 0x7990: 0xe000234f, 0x7991: 0xe0002353, 0x7992: 0xf0001c1c, 0x7993: 0xe000235e, + 0x7994: 0xe0002358, 0x7995: 0xf0001c1c, 0x7996: 0xe0002363, 0x7997: 0xe000236d, + 0x7998: 0xf0001f04, 0x7999: 0xf0001f04, 0x799a: 0xf0001f04, 0x799b: 0xf0001f04, + 0x799c: 0xf0001f04, 0x799d: 0xf0001f04, 0x799e: 0xf0001f04, 0x799f: 0xf0001f04, + 0x79a0: 0xf0001f04, 0x79a1: 0xf0001f04, 0x79a2: 0xf0000404, 0x79a3: 0xf0000404, + 0x79a4: 0xf0000404, 0x79a5: 0xf0000404, 0x79a6: 0xf0000404, 0x79a7: 0xf0000404, + 0x79a8: 0xf0000404, 0x79a9: 0xf0000404, 0x79aa: 0xf0000404, 0x79ab: 0xf0000404, + 0x79ac: 0xf0000404, 0x79ad: 0xf0000404, 0x79ae: 0xf0000404, 0x79af: 0xf0000404, + 0x79b0: 0xf0000404, 0x79b1: 0xe0000c1e, 0x79b2: 0xf0001c1c, 0x79b3: 0xf0001d1d, + 0x79b4: 0xe0000a31, 0x79b5: 0xf0001d1c, 0x79b6: 0xf0001c1c, 0x79b7: 0xf0001c1c, + 0x79b8: 0xe0000ac2, 0x79b9: 0xe0000ac6, 0x79ba: 0xe00027e8, 0x79bb: 0xf0001c1c, + 0x79bc: 0xf0001c1c, 0x79bd: 0xf0001c1c, 0x79be: 0xf0001c1c, 0x79bf: 0xe0002431, + // Block 0x1e7, offset 0x79c0 + 0x79c0: 0xf0001d1c, 0x79c1: 0xf0001d1d, 0x79c2: 0xe00009b7, 0x79c3: 0xe00024f3, + 0x79c4: 0xf0001c1c, 0x79c5: 0xf0001c1c, 0x79c6: 0xe0000a66, 0x79c7: 0xe0000a7a, + 0x79c8: 0xf0001d1c, 0x79c9: 0xf0001c1d, 0x79ca: 0xf0001c1c, 0x79cb: 0xf0001d1d, + 0x79cc: 0xf0001c1c, 0x79cd: 0xf0001d1d, 0x79ce: 0xf0001d1d, 0x79cf: 0xf0001c1c, + 0x79d0: 0xf0001c1c, 0x79d1: 0xf0001c1c, 0x79d2: 0xe0000d0d, 0x79d3: 0xe0002818, + 0x79d4: 0xf0001c1c, 0x79d5: 0xe0000d3a, 0x79d6: 0xe0000d46, 0x79d7: 0xf0001d1d, + 0x79d8: 0xe0000eb0, 0x79d9: 0xe0000eb8, 0x79da: 0xf0001d1d, 0x79db: 0xf0001c1c, + 0x79dc: 0xf0001c1d, 0x79dd: 0xf0001c1d, 0x79de: 0xe00010b2, 0x79df: 0xe00009c8, + 0x79e0: 0xf0001f04, 0x79e1: 0xf0001f04, 0x79e2: 0xf0001f04, 0x79e3: 0xf0001f04, + 0x79e4: 0xf0001f04, 0x79e5: 0xf0001f04, 0x79e6: 0xf0001f04, 0x79e7: 0xf0001f04, + 0x79e8: 0xf0001f04, 0x79e9: 0xf0000404, 0x79ea: 0xf0000404, 0x79eb: 0xf0000404, + 0x79ec: 0xf0000404, 0x79ed: 0xf0000404, 0x79ee: 0xf0000404, 0x79ef: 0xf0000404, + 0x79f0: 0xf0000404, 0x79f1: 0xf0000404, 0x79f2: 0xf0000404, 0x79f3: 0xf0000404, + 0x79f4: 0xf0000404, 0x79f5: 0xf0000404, 0x79f6: 0xf0000404, 0x79f7: 0xf0000404, + 0x79f8: 0xf0000404, 0x79f9: 0xf0000404, 0x79fa: 0xf0000404, 0x79fb: 0xf0000404, + 0x79fc: 0xf0000404, 0x79fd: 0xf0000404, 0x79fe: 0xf0000404, 0x79ff: 0xe0000bdf, + // Block 0x1e8, offset 0x7a00 + 0x7a00: 0xf0001f04, 0x7a01: 0xf0001f04, 0x7a02: 0xf0001f04, 0x7a03: 0xf0001f04, + 0x7a04: 0xf0001f04, 0x7a05: 0xf0001f04, 0x7a06: 0xf0001f04, 0x7a07: 0xf0001f04, + 0x7a08: 0xf0001f04, 0x7a09: 0xf0001f04, 0x7a0a: 0xf0001f04, + 0x7a10: 0xf0000a04, 0x7a11: 0xf0000a04, 0x7a12: 0xf0000a04, 0x7a13: 0xf0000a04, + 0x7a14: 0xf0000a04, 0x7a15: 0xf0000a04, 0x7a16: 0xf0000a04, 0x7a17: 0xf0000a04, + 0x7a18: 0xe00024b3, 0x7a19: 0xf0000a04, 0x7a1a: 0xf0000a04, 0x7a1b: 0xf0000a04, + 0x7a1c: 0xf0000a04, 0x7a1d: 0xf0000a04, 0x7a1e: 0xf0000a04, 0x7a1f: 0xf0000a04, + 0x7a20: 0xe00024cb, 0x7a21: 0xf0000a04, 0x7a22: 0xf0000a04, 0x7a23: 0xf0000a04, + 0x7a24: 0xf0000a04, 0x7a25: 0xf0000a04, 0x7a26: 0xf0000a04, 0x7a27: 0xe00024eb, + 0x7a28: 0xf0000a04, 0x7a29: 0xf0000a04, 0x7a2a: 0xf0000a04, 0x7a2b: 0x002c3a8c, + 0x7a2c: 0x002f7a8c, 0x7a2d: 0xf0000c0c, 0x7a2e: 0xf0000c0c, + 0x7a30: 0x002bde9d, 0x7a31: 0x002c0a9d, 0x7a32: 0x002c3a9d, 0x7a33: 0x002c629d, + 0x7a34: 0x002c989d, 0x7a35: 0x002d089d, 0x7a36: 0x002d229d, 0x7a37: 0x002d689d, + 0x7a38: 0x002d9a9d, 0x7a39: 0x002dcc9d, 0x7a3a: 0x002dfe9d, 0x7a3b: 0x002e229d, + 0x7a3c: 0x002e829d, 0x7a3d: 0x002e9e9d, 0x7a3e: 0x002ee29d, 0x7a3f: 0x002f2c9d, + // Block 0x1e9, offset 0x7a40 + 0x7a40: 0xe00014bd, 0x7a41: 0x0033b483, 0x7a42: 0x00339688, 0x7a43: 0x0033a288, + 0x7a44: 0x0033c288, 0x7a45: 0x0033fc88, 0x7a46: 0xc02a0071, 0x7a47: 0x00343688, + 0x7a48: 0x00344688, 0x7a49: 0x00349a88, 0x7a4a: 0x0034e488, 0x7a4b: 0x00356288, + 0x7a4c: 0x00356a88, 0x7a4d: 0xe00014cf, 0x7a4e: 0x00357a88, 0x7a4f: 0x00365488, + 0x7a50: 0xc0090041, 0x7a51: 0x00335288, 0x7a52: 0x00335a88, 0x7a53: 0xc0130092, + 0x7a54: 0x00338a88, 0x7a55: 0xc34c0041, 0x7a56: 0xc01c0071, 0x7a57: 0xc0200071, + 0x7a58: 0xc0250041, 0x7a59: 0x00343e88, 0x7a5a: 0xc0370092, 0x7a5b: 0x00348488, + 0x7a5c: 0x0034a888, 0x7a5d: 0x0034ba88, 0x7a5e: 0xc02e0071, 0x7a5f: 0x00350e88, + 0x7a60: 0x00352888, 0x7a61: 0x00353a88, 0x7a62: 0x00354c88, 0x7a63: 0xc03e00f1, + 0x7a64: 0x0035ac88, 0x7a65: 0x0035b488, 0x7a66: 0x00360288, 0x7a67: 0xc0440071, + 0x7a68: 0x00365c88, 0x7a69: 0x00366688, 0x7a6a: 0x00367488, 0x7a6b: 0xc0480071, + 0x7a6c: 0x00368e88, 0x7a6d: 0xc04c0071, 0x7a6e: 0x0036b888, 0x7a6f: 0x0036c488, + 0x7a70: 0xc0060041, 0x7a71: 0x40335220, 0x7a72: 0x40335a20, 0x7a73: 0xc0100092, + 0x7a74: 0x40338a20, 0x7a75: 0xc3490041, 0x7a76: 0xc01a0071, 0x7a77: 0xc01e0071, + 0x7a78: 0xc0220041, 0x7a79: 0x40343e20, 0x7a7a: 0xc0340092, 0x7a7b: 0x40348420, + 0x7a7c: 0x4034a820, 0x7a7d: 0x4034ba20, 0x7a7e: 0xc02c0071, 0x7a7f: 0x40350e20, + // Block 0x1ea, offset 0x7a80 + 0x7a80: 0x40352820, 0x7a81: 0x40353a20, 0x7a82: 0x40354c20, 0x7a83: 0xc03a00f1, + 0x7a84: 0x4035ac20, 0x7a85: 0x4035b420, 0x7a86: 0x40360220, 0x7a87: 0xc0420071, + 0x7a88: 0x40365c20, 0x7a89: 0x40366620, 0x7a8a: 0x40367420, 0x7a8b: 0xc0460071, + 0x7a8c: 0x40368e20, 0x7a8d: 0xc04a0071, 0x7a8e: 0x4036b820, 0x7a8f: 0x4036c420, + 0x7a90: 0xe00014ba, 0x7a91: 0x4033b420, 0x7a92: 0x40339620, 0x7a93: 0x4033a220, + 0x7a94: 0x4033c220, 0x7a95: 0x4033fc20, 0x7a96: 0xc0280071, 0x7a97: 0x40343620, + 0x7a98: 0x40344620, 0x7a99: 0x40349a20, 0x7a9a: 0x4034e420, 0x7a9b: 0x40356220, + 0x7a9c: 0x40356a20, 0x7a9d: 0xe00014cc, 0x7a9e: 0x40357a20, 0x7a9f: 0x40365420, + 0x7aa0: 0x0035e088, 0x7aa1: 0x4035e020, 0x7aa2: 0x00369e88, 0x7aa3: 0x40369e20, + 0x7aa4: 0x0036ce88, 0x7aa5: 0x4036ce20, 0x7aa6: 0x0036d688, 0x7aa7: 0x4036d620, + 0x7aa8: 0x0036ea88, 0x7aa9: 0x4036ea20, 0x7aaa: 0x0036e088, 0x7aab: 0x4036e020, + 0x7aac: 0x0036f488, 0x7aad: 0x4036f420, 0x7aae: 0x0036fc88, 0x7aaf: 0x4036fc20, + 0x7ab0: 0x00370488, 0x7ab1: 0x40370420, 0x7ab2: 0x00370c88, 0x7ab3: 0x40370c20, + 0x7ab4: 0xc0500131, 0x7ab5: 0xc04e0131, 0x7ab6: 0x00371c88, 0x7ab7: 0x40371c20, + 0x7ab8: 0x0035a488, 0x7ab9: 0x4035a420, 0x7aba: 0x0035fa88, 0x7abb: 0x4035fa20, + 0x7abc: 0x0035f288, 0x7abd: 0x4035f220, 0x7abe: 0x0035e888, 0x7abf: 0x4035e820, + // Block 0x1eb, offset 0x7ac0 + 0x7ac1: 0x40409c20, 0x7ac2: 0x40409820, 0x7ac3: 0x40409a20, + 0x7ac5: 0x40407c20, 0x7ac6: 0x40407e20, 0x7ac7: 0x40408020, + 0x7ac8: 0x40408220, 0x7ac9: 0x40408420, 0x7aca: 0x40408620, 0x7acb: 0x40408820, + 0x7acc: 0x40408c20, 0x7acf: 0x40409020, + 0x7ad0: 0x40409220, 0x7ad3: 0x40409420, + 0x7ad4: 0x40409620, 0x7ad5: 0x40409820, 0x7ad6: 0x40409a20, 0x7ad7: 0x40409c20, + 0x7ad8: 0x40409e20, 0x7ad9: 0x4040a020, 0x7ada: 0x4040a220, 0x7adb: 0x4040a420, + 0x7adc: 0x4040a620, 0x7add: 0x4040a820, 0x7ade: 0x4040aa20, 0x7adf: 0x4040ac20, + 0x7ae0: 0x4040ae20, 0x7ae1: 0x4040b020, 0x7ae2: 0x4040b220, 0x7ae3: 0x4040b420, + 0x7ae4: 0x4040b620, 0x7ae5: 0x4040b820, 0x7ae6: 0x4040ba20, 0x7ae7: 0x4040bc20, + 0x7ae8: 0x4040be20, 0x7aea: 0x4040c020, 0x7aeb: 0x4040c220, + 0x7aec: 0x4040c420, 0x7aed: 0x4040c620, 0x7aee: 0x4040c820, 0x7aef: 0x4040ca20, + 0x7af0: 0x4040cc20, 0x7af2: 0x4040d020, + 0x7af6: 0x4040d420, 0x7af7: 0x4040d620, + 0x7af8: 0x4040d820, 0x7af9: 0x4040da20, + 0x7afc: 0xa070f102, 0x7afd: 0x4040dc20, 0x7afe: 0x4040de20, 0x7aff: 0x4040e020, + // Block 0x1ec, offset 0x7b00 + 0x7b00: 0xa0000000, 0x7b01: 0xa0000000, 0x7b02: 0xa0000000, 0x7b03: 0xa0000000, + 0x7b04: 0xa0000000, 0x7b05: 0xa0000000, 0x7b06: 0xa0000000, 0x7b07: 0xa0000000, + 0x7b08: 0xa0000000, 0x7b09: 0x40020020, 0x7b0a: 0x40020220, 0x7b0b: 0x40020420, + 0x7b0c: 0x40020620, 0x7b0d: 0x40020820, 0x7b0e: 0xa0000000, 0x7b0f: 0xa0000000, + 0x7b10: 0xa0000000, 0x7b11: 0xa0000000, 0x7b12: 0xa0000000, 0x7b13: 0xa0000000, + 0x7b14: 0xa0000000, 0x7b15: 0xa0000000, 0x7b16: 0xa0000000, 0x7b17: 0xa0000000, + 0x7b18: 0xa0000000, 0x7b19: 0xa0000000, 0x7b1a: 0xa0000000, 0x7b1b: 0xa0000000, + 0x7b1c: 0xa0000000, 0x7b1d: 0xa0000000, 0x7b1e: 0xa0000000, 0x7b1f: 0xa0000000, + 0x7b20: 0x40021220, 0x7b21: 0x4002ba20, 0x7b22: 0x4003e020, 0x7b23: 0x4004ea20, + 0x7b24: 0x4027de20, 0x7b25: 0x4004ec20, 0x7b26: 0x4004e620, 0x7b27: 0x4003d220, + 0x7b28: 0x4003f420, 0x7b29: 0x4003f620, 0x7b2a: 0x4004d820, 0x7b2b: 0x40093820, + 0x7b2c: 0x40024020, 0x7b2d: 0x40021a20, 0x7b2e: 0x4002e420, 0x7b2f: 0x4004e220, + 0x7b30: 0x4029cc20, 0x7b31: 0x4029ce20, 0x7b32: 0x4029d020, 0x7b33: 0x4029d220, + 0x7b34: 0x4029d420, 0x7b35: 0x4029d620, 0x7b36: 0x4029d820, 0x7b37: 0x4029da20, + 0x7b38: 0x4029dc20, 0x7b39: 0x4029de20, 0x7b3a: 0x40026c20, 0x7b3b: 0x40026220, + 0x7b3c: 0x40094020, 0x7b3d: 0x40094220, 0x7b3e: 0x40094420, 0x7b3f: 0x4002c420, + // Block 0x1ed, offset 0x7b40 + 0x7b40: 0x4004d620, 0x7b41: 0x002bde88, 0x7b42: 0x002c0a88, 0x7b43: 0x002c3a88, + 0x7b44: 0x002c6288, 0x7b45: 0x002c9888, 0x7b46: 0x002d0888, 0x7b47: 0x002d2288, + 0x7b48: 0x002d6888, 0x7b49: 0x002d9a88, 0x7b4a: 0x002dcc88, 0x7b4b: 0x002dfe88, + 0x7b4c: 0xc3520002, 0x7b4d: 0x002e8288, 0x7b4e: 0x002e9e88, 0x7b4f: 0x002ee288, + 0x7b50: 0x002f2c88, 0x7b51: 0x002f5688, 0x7b52: 0x002f7a88, 0x7b53: 0x002fe688, + 0x7b54: 0x00302c88, 0x7b55: 0x00306c88, 0x7b56: 0x0030be88, 0x7b57: 0x0030e288, + 0x7b58: 0x0030f688, 0x7b59: 0x00310088, 0x7b5a: 0x00312a88, 0x7b5b: 0x4003f820, + 0x7b5c: 0x4004e420, 0x7b5d: 0x4003fa20, 0x7b5e: 0x40062420, 0x7b5f: 0x40021620, + 0x7b60: 0x40061e20, 0x7b61: 0x402bde20, 0x7b62: 0x402c0a20, 0x7b63: 0x402c3a20, + 0x7b64: 0x402c6220, 0x7b65: 0x402c9820, 0x7b66: 0x402d0820, 0x7b67: 0x402d2220, + 0x7b68: 0x402d6820, 0x7b69: 0x402d9a20, 0x7b6a: 0x402dcc20, 0x7b6b: 0x402dfe20, + 0x7b6c: 0xc34f0002, 0x7b6d: 0x402e8220, 0x7b6e: 0x402e9e20, 0x7b6f: 0x402ee220, + 0x7b70: 0x402f2c20, 0x7b71: 0x402f5620, 0x7b72: 0x402f7a20, 0x7b73: 0x402fe620, + 0x7b74: 0x40302c20, 0x7b75: 0x40306c20, 0x7b76: 0x4030be20, 0x7b77: 0x4030e220, + 0x7b78: 0x4030f620, 0x7b79: 0x40310020, 0x7b7a: 0x40312a20, 0x7b7b: 0x4003fc20, + 0x7b7c: 0x40094820, 0x7b7d: 0x4003fe20, 0x7b7e: 0x40094c20, 0x7b7f: 0xa0000000, + // Block 0x1ee, offset 0x7b80 + 0x7b80: 0xe0000983, 0x7b81: 0xe0000980, 0x7b82: 0xe00008fb, 0x7b83: 0xe00008f8, + 0x7b84: 0xe000097d, 0x7b85: 0xe000097a, 0x7b86: 0xe0000a38, 0x7b87: 0xe0000a35, + 0x7b88: 0xe0000a3e, 0x7b89: 0xe0000a3b, 0x7b8a: 0xe0000a4a, 0x7b8b: 0xe0000a47, + 0x7b8c: 0xe0000a44, 0x7b8d: 0xe0000a41, 0x7b8e: 0xe0000a86, 0x7b8f: 0xe0000a83, + 0x7b90: 0xe0000aaa, 0x7b91: 0xe0000aa7, 0x7b92: 0xe0000b46, 0x7b93: 0xe0000b43, + 0x7b94: 0xe0000aee, 0x7b95: 0xe0000aeb, 0x7b96: 0xe0000b2c, 0x7b97: 0xe0000b29, + 0x7b98: 0xe0000b40, 0x7b99: 0xe0000b3d, 0x7b9a: 0xe0000b1a, 0x7b9b: 0xe0000b17, + 0x7b9c: 0xe0000bb8, 0x7b9d: 0xe0000bb5, 0x7b9e: 0xe0000bb2, 0x7b9f: 0xe0000baf, + 0x7ba0: 0xe0000bc4, 0x7ba1: 0xe0000bc1, 0x7ba2: 0xe0000bca, 0x7ba3: 0xe0000bc7, + 0x7ba4: 0xe0000bee, 0x7ba5: 0xe0000beb, 0x7ba6: 0xe0000c1b, 0x7ba7: 0xe0000c18, + 0x7ba8: 0xe0000c51, 0x7ba9: 0xe0000c4e, 0x7baa: 0xe0000c60, 0x7bab: 0xe0000c5d, + 0x7bac: 0xe0000c31, 0x7bad: 0xe0000c2e, 0x7bae: 0xe0000c5a, 0x7baf: 0xe0000c57, + 0x7bb0: 0xe0000c54, 0x7bb1: 0x402da220, 0x7bb2: 0xf0000a0a, 0x7bb3: 0xf0000404, + 0x7bb4: 0xe0000c8a, 0x7bb5: 0xe0000c87, 0x7bb6: 0xe0000c9f, 0x7bb7: 0xe0000c9c, + 0x7bb8: 0x402f7220, 0x7bb9: 0xe0000ccc, 0x7bba: 0xe0000cc9, 0x7bbb: 0xe0000cd8, + 0x7bbc: 0xe0000cd5, 0x7bbd: 0xe0000cd2, 0x7bbe: 0xe0000ccf, 0x7bbf: 0x002e22a3, + // Block 0x1ef, offset 0x7bc0 + 0x7bc0: 0x402e2221, 0x7bc1: 0xe0000cf8, 0x7bc2: 0xe0000cf5, 0x7bc3: 0xe0000d51, + 0x7bc4: 0xe0000d4e, 0x7bc5: 0xe0000d6f, 0x7bc6: 0xe0000d6c, 0x7bc7: 0xe0000d5d, + 0x7bc8: 0xe0000d5a, 0x7bc9: 0xf0000404, 0x7bca: 0x002eda88, 0x7bcb: 0x402eda20, + 0x7bcc: 0xe0000e2e, 0x7bcd: 0xe0000e2b, 0x7bce: 0xe0000da0, 0x7bcf: 0xe0000d9d, + 0x7bd0: 0xe0000de0, 0x7bd1: 0xe0000ddd, 0x7bd2: 0xe0000e93, 0x7bd3: 0xe0000e8f, + 0x7bd4: 0xe0000eca, 0x7bd5: 0xe0000ec7, 0x7bd6: 0xe0000edc, 0x7bd7: 0xe0000ed9, + 0x7bd8: 0xe0000ed0, 0x7bd9: 0xe0000ecd, 0x7bda: 0xe0000f1f, 0x7bdb: 0xe0000f1c, + 0x7bdc: 0xe0000f2d, 0x7bdd: 0xe0000f2a, 0x7bde: 0xe0000f47, 0x7bdf: 0xe0000f44, + 0x7be0: 0xe0000f33, 0x7be1: 0xe0000f30, 0x7be2: 0xe0000f99, 0x7be3: 0xe0000f96, + 0x7be4: 0xe0000f8a, 0x7be5: 0xe0000f87, 0x7be6: 0x00303688, 0x7be7: 0x40303620, + 0x7be8: 0xe000102b, 0x7be9: 0xe0001028, 0x7bea: 0xe000103f, 0x7beb: 0xe000103c, + 0x7bec: 0xe0000fe7, 0x7bed: 0xe0000fe4, 0x7bee: 0xe0000ff9, 0x7bef: 0xe0000ff6, + 0x7bf0: 0xe0001025, 0x7bf1: 0xe0001022, 0x7bf2: 0xe0001039, 0x7bf3: 0xe0001036, + 0x7bf4: 0xe00010d8, 0x7bf5: 0xe00010d5, 0x7bf6: 0xe000110e, 0x7bf7: 0xe000110b, + 0x7bf8: 0xe0001117, 0x7bf9: 0xe000113b, 0x7bfa: 0xe0001138, 0x7bfb: 0xe000114d, + 0x7bfc: 0xe000114a, 0x7bfd: 0xe0001147, 0x7bfe: 0xe0001144, 0x7bff: 0xe0000f64, + // Block 0x1f0, offset 0x7c00 + 0x7c00: 0xa0000000, 0x7c01: 0xa0000000, 0x7c02: 0xa0000000, 0x7c03: 0xa0000000, + 0x7c04: 0xa0000000, 0x7c05: 0xa0000000, 0x7c06: 0xa0000000, 0x7c07: 0xa0000000, + 0x7c08: 0xa0000000, 0x7c09: 0x40020020, 0x7c0a: 0x40020220, 0x7c0b: 0x40020420, + 0x7c0c: 0x40020620, 0x7c0d: 0x40020820, 0x7c0e: 0xa0000000, 0x7c0f: 0xa0000000, + 0x7c10: 0xa0000000, 0x7c11: 0xa0000000, 0x7c12: 0xa0000000, 0x7c13: 0xa0000000, + 0x7c14: 0xa0000000, 0x7c15: 0xa0000000, 0x7c16: 0xa0000000, 0x7c17: 0xa0000000, + 0x7c18: 0xa0000000, 0x7c19: 0xa0000000, 0x7c1a: 0xa0000000, 0x7c1b: 0xa0000000, + 0x7c1c: 0xa0000000, 0x7c1d: 0xa0000000, 0x7c1e: 0xa0000000, 0x7c1f: 0xa0000000, + 0x7c20: 0x40021220, 0x7c21: 0x4002ba20, 0x7c22: 0x4003e020, 0x7c23: 0x4004ea20, + 0x7c24: 0x4027de20, 0x7c25: 0x4004ec20, 0x7c26: 0x4004e620, 0x7c27: 0x4003d220, + 0x7c28: 0x4003f420, 0x7c29: 0x4003f620, 0x7c2a: 0x4004d820, 0x7c2b: 0x40093820, + 0x7c2c: 0x40024020, 0x7c2d: 0x40021a20, 0x7c2e: 0x4002e420, 0x7c2f: 0x4004e220, + 0x7c30: 0x4029cc20, 0x7c31: 0x4029ce20, 0x7c32: 0x4029d020, 0x7c33: 0x4029d220, + 0x7c34: 0x4029d420, 0x7c35: 0x4029d620, 0x7c36: 0x4029d820, 0x7c37: 0x4029da20, + 0x7c38: 0x4029dc20, 0x7c39: 0x4029de20, 0x7c3a: 0x40026c20, 0x7c3b: 0x40026220, + 0x7c3c: 0x40094020, 0x7c3d: 0x40094220, 0x7c3e: 0x40094420, 0x7c3f: 0x4002c420, + // Block 0x1f1, offset 0x7c40 + 0x7c40: 0x4004d620, 0x7c41: 0x002bde88, 0x7c42: 0x002c0a88, 0x7c43: 0xc3590953, + 0x7c44: 0x002c6288, 0x7c45: 0x002c9888, 0x7c46: 0x002d0888, 0x7c47: 0x002d2288, + 0x7c48: 0x002d6888, 0x7c49: 0x002d9a88, 0x7c4a: 0x002dcc88, 0x7c4b: 0x002dfe88, + 0x7c4c: 0xc0030002, 0x7c4d: 0x002e8288, 0x7c4e: 0x002e9e88, 0x7c4f: 0x002ee288, + 0x7c50: 0x002f2c88, 0x7c51: 0x002f5688, 0x7c52: 0xc35f0991, 0x7c53: 0xc3430991, + 0x7c54: 0x00302c88, 0x7c55: 0x00306c88, 0x7c56: 0x0030be88, 0x7c57: 0x0030e288, + 0x7c58: 0x0030f688, 0x7c59: 0x00310088, 0x7c5a: 0xc3630991, 0x7c5b: 0x4003f820, + 0x7c5c: 0x4004e420, 0x7c5d: 0x4003fa20, 0x7c5e: 0x40062420, 0x7c5f: 0x40021620, + 0x7c60: 0x40061e20, 0x7c61: 0x402bde20, 0x7c62: 0x402c0a20, 0x7c63: 0xc3550953, + 0x7c64: 0x402c6220, 0x7c65: 0x402c9820, 0x7c66: 0x402d0820, 0x7c67: 0x402d2220, + 0x7c68: 0x402d6820, 0x7c69: 0x402d9a20, 0x7c6a: 0x402dcc20, 0x7c6b: 0x402dfe20, + 0x7c6c: 0xc0000002, 0x7c6d: 0x402e8220, 0x7c6e: 0x402e9e20, 0x7c6f: 0x402ee220, + 0x7c70: 0x402f2c20, 0x7c71: 0x402f5620, 0x7c72: 0xc35d0991, 0x7c73: 0xc3410991, + 0x7c74: 0x40302c20, 0x7c75: 0x40306c20, 0x7c76: 0x4030be20, 0x7c77: 0x4030e220, + 0x7c78: 0x4030f620, 0x7c79: 0x40310020, 0x7c7a: 0xc3610991, 0x7c7b: 0x4003fc20, + 0x7c7c: 0x40094820, 0x7c7d: 0x4003fe20, 0x7c7e: 0x40094c20, 0x7c7f: 0xa0000000, + // Block 0x1f2, offset 0x7c80 + 0x7c80: 0xe0000983, 0x7c81: 0xe0000980, 0x7c82: 0xe00008fb, 0x7c83: 0xe00008f8, + 0x7c84: 0xe000097d, 0x7c85: 0xe000097a, 0x7c86: 0xe0000a38, 0x7c87: 0xe0000a35, + 0x7c88: 0xe0000a3e, 0x7c89: 0xe0000a3b, 0x7c8a: 0xe0000a4a, 0x7c8b: 0xe0000a47, + 0x7c8c: 0x002c3c83, 0x7c8d: 0x402c3c20, 0x7c8e: 0xe0000a86, 0x7c8f: 0xe0000a83, + 0x7c90: 0xe0000aaa, 0x7c91: 0xe0000aa7, 0x7c92: 0xe0000b46, 0x7c93: 0xe0000b43, + 0x7c94: 0xe0000aee, 0x7c95: 0xe0000aeb, 0x7c96: 0xe0000b2c, 0x7c97: 0xe0000b29, + 0x7c98: 0xe0000b40, 0x7c99: 0xe0000b3d, 0x7c9a: 0xe0000b1a, 0x7c9b: 0xe0000b17, + 0x7c9c: 0xe0000bb8, 0x7c9d: 0xe0000bb5, 0x7c9e: 0xe0000bb2, 0x7c9f: 0xe0000baf, + 0x7ca0: 0xe0000bc4, 0x7ca1: 0xe0000bc1, 0x7ca2: 0xe0000bca, 0x7ca3: 0xe0000bc7, + 0x7ca4: 0xe0000bee, 0x7ca5: 0xe0000beb, 0x7ca6: 0xe0000c1b, 0x7ca7: 0xe0000c18, + 0x7ca8: 0xe0000c51, 0x7ca9: 0xe0000c4e, 0x7caa: 0xe0000c60, 0x7cab: 0xe0000c5d, + 0x7cac: 0xe0000c31, 0x7cad: 0xe0000c2e, 0x7cae: 0xe0000c5a, 0x7caf: 0xe0000c57, + 0x7cb0: 0xe0000c54, 0x7cb1: 0x402da220, 0x7cb2: 0xf0000a0a, 0x7cb3: 0xf0000404, + 0x7cb4: 0xe0000c8a, 0x7cb5: 0xe0000c87, 0x7cb6: 0xe0000c9f, 0x7cb7: 0xe0000c9c, + 0x7cb8: 0x402f7220, 0x7cb9: 0xe0000ccc, 0x7cba: 0xe0000cc9, 0x7cbb: 0xe0000cd8, + 0x7cbc: 0xe0000cd5, 0x7cbd: 0xe0000cd2, 0x7cbe: 0xe0000ccf, 0x7cbf: 0xe0000d04, + // Block 0x1f3, offset 0x7cc0 + 0x7cc0: 0xe0000cfe, 0x7cc1: 0xe0000cf8, 0x7cc2: 0xe0000cf5, 0x7cc3: 0xe0000d51, + 0x7cc4: 0xe0000d4e, 0x7cc5: 0xe0000d6f, 0x7cc6: 0xe0000d6c, 0x7cc7: 0xe0000d5d, + 0x7cc8: 0xe0000d5a, 0x7cc9: 0xf0000404, 0x7cca: 0x002eda88, 0x7ccb: 0x402eda20, + 0x7ccc: 0xe0000e2e, 0x7ccd: 0xe0000e2b, 0x7cce: 0xe0000da0, 0x7ccf: 0xe0000d9d, + 0x7cd0: 0xe0000de0, 0x7cd1: 0xe0000ddd, 0x7cd2: 0xe0000e93, 0x7cd3: 0xe0000e8f, + 0x7cd4: 0xe0000eca, 0x7cd5: 0xe0000ec7, 0x7cd6: 0xe0000edc, 0x7cd7: 0xe0000ed9, + 0x7cd8: 0x002f7c83, 0x7cd9: 0x402f7c20, 0x7cda: 0xe0000f1f, 0x7cdb: 0xe0000f1c, + 0x7cdc: 0xe0000f2d, 0x7cdd: 0xe0000f2a, 0x7cde: 0xe0000f47, 0x7cdf: 0xe0000f44, + 0x7ce0: 0x002fe883, 0x7ce1: 0x402fe820, 0x7ce2: 0xe0000f99, 0x7ce3: 0xe0000f96, + 0x7ce4: 0xe0000f8a, 0x7ce5: 0xe0000f87, 0x7ce6: 0x00303688, 0x7ce7: 0x40303620, + 0x7ce8: 0xe000102b, 0x7ce9: 0xe0001028, 0x7cea: 0xe000103f, 0x7ceb: 0xe000103c, + 0x7cec: 0xe0000fe7, 0x7ced: 0xe0000fe4, 0x7cee: 0xe0000ff9, 0x7cef: 0xe0000ff6, + 0x7cf0: 0xe0001025, 0x7cf1: 0xe0001022, 0x7cf2: 0xe0001039, 0x7cf3: 0xe0001036, + 0x7cf4: 0xe00010d8, 0x7cf5: 0xe00010d5, 0x7cf6: 0xe000110e, 0x7cf7: 0xe000110b, + 0x7cf8: 0xe0001117, 0x7cf9: 0xe000113b, 0x7cfa: 0xe0001138, 0x7cfb: 0xe000114d, + 0x7cfc: 0xe000114a, 0x7cfd: 0x00312c83, 0x7cfe: 0x40312c20, 0x7cff: 0xe0000f64, + // Block 0x1f4, offset 0x7d00 + 0x7d00: 0xe0000d24, 0x7d01: 0xe0000d21, 0x7d02: 0xe0000d2a, 0x7d03: 0xe0000d27, + 0x7d04: 0xe0000d69, 0x7d05: 0xe0000d66, 0x7d06: 0xe0000d7b, 0x7d07: 0xe0000d78, + 0x7d08: 0xe0000d87, 0x7d09: 0xe0000d84, 0x7d0a: 0xe0000d81, 0x7d0b: 0xe0000d7e, + 0x7d0c: 0xe0000ded, 0x7d0d: 0xe0000de9, 0x7d0e: 0xe0000df5, 0x7d0f: 0xe0000df1, + 0x7d10: 0xe0000e3d, 0x7d11: 0xe0000e39, 0x7d12: 0xe0000e35, 0x7d13: 0xe0000e31, + 0x7d14: 0xe0000ea7, 0x7d15: 0xe0000ea4, 0x7d16: 0xe0000ead, 0x7d17: 0xe0000eaa, + 0x7d18: 0xe0000ed6, 0x7d19: 0xe0000ed3, 0x7d1a: 0xe0000ef4, 0x7d1b: 0xe0000ef1, + 0x7d1c: 0xe0000efb, 0x7d1d: 0xe0000ef7, 0x7d1e: 0xe0000f02, 0x7d1f: 0xe0000eff, + 0x7d20: 0xe0000f41, 0x7d21: 0xe0000f3e, 0x7d22: 0xe0000f53, 0x7d23: 0xe0000f50, + 0x7d24: 0xe0000f26, 0x7d25: 0xe0000f22, 0x7d26: 0xe000296a, 0x7d27: 0xe0002967, + 0x7d28: 0xe0000f5a, 0x7d29: 0xe0000f56, 0x7d2a: 0xe0000f93, 0x7d2b: 0xe0000f90, + 0x7d2c: 0xe0000f9f, 0x7d2d: 0xe0000f9c, 0x7d2e: 0xe0000fb1, 0x7d2f: 0xe0000fae, + 0x7d30: 0xe0000fab, 0x7d31: 0xe0000fa8, 0x7d32: 0xe0001093, 0x7d33: 0xe0001090, + 0x7d34: 0xe000109f, 0x7d35: 0xe000109c, 0x7d36: 0xe0001099, 0x7d37: 0xe0001096, + 0x7d38: 0xe0001032, 0x7d39: 0xe000102e, 0x7d3a: 0xe0001046, 0x7d3b: 0xe0001042, + 0x7d3c: 0xe00010a9, 0x7d3d: 0xe00010a6, 0x7d3e: 0xe00010af, 0x7d3f: 0xe00010ac, + // Block 0x1f5, offset 0x7d40 + 0x7d40: 0xa0000000, 0x7d41: 0xa0000000, 0x7d42: 0xa0000000, 0x7d43: 0xa0000000, + 0x7d44: 0xa0000000, 0x7d45: 0xa0000000, 0x7d46: 0xa0000000, 0x7d47: 0xa0000000, + 0x7d48: 0xa0000000, 0x7d49: 0x40020020, 0x7d4a: 0x40020220, 0x7d4b: 0x40020420, + 0x7d4c: 0x40020620, 0x7d4d: 0x40020820, 0x7d4e: 0xa0000000, 0x7d4f: 0xa0000000, + 0x7d50: 0xa0000000, 0x7d51: 0xa0000000, 0x7d52: 0xa0000000, 0x7d53: 0xa0000000, + 0x7d54: 0xa0000000, 0x7d55: 0xa0000000, 0x7d56: 0xa0000000, 0x7d57: 0xa0000000, + 0x7d58: 0xa0000000, 0x7d59: 0xa0000000, 0x7d5a: 0xa0000000, 0x7d5b: 0xa0000000, + 0x7d5c: 0xa0000000, 0x7d5d: 0xa0000000, 0x7d5e: 0xa0000000, 0x7d5f: 0xa0000000, + 0x7d60: 0x40021220, 0x7d61: 0x4002ba20, 0x7d62: 0x4003e020, 0x7d63: 0x4004ea20, + 0x7d64: 0x4027de20, 0x7d65: 0x4004ec20, 0x7d66: 0x4004e620, 0x7d67: 0x4003d220, + 0x7d68: 0x4003f420, 0x7d69: 0x4003f620, 0x7d6a: 0x4004d820, 0x7d6b: 0x40093820, + 0x7d6c: 0x40024020, 0x7d6d: 0x40021a20, 0x7d6e: 0x4002e420, 0x7d6f: 0x4004e220, + 0x7d70: 0x4029cc20, 0x7d71: 0x4029ce20, 0x7d72: 0x4029d020, 0x7d73: 0x4029d220, + 0x7d74: 0x4029d420, 0x7d75: 0x4029d620, 0x7d76: 0x4029d820, 0x7d77: 0x4029da20, + 0x7d78: 0x4029dc20, 0x7d79: 0x4029de20, 0x7d7a: 0x40026c20, 0x7d7b: 0x40026220, + 0x7d7c: 0x40094020, 0x7d7d: 0x40094220, 0x7d7e: 0x40094420, 0x7d7f: 0x4002c420, + // Block 0x1f6, offset 0x7d80 + 0x7d80: 0x4004d620, 0x7d81: 0x002bde88, 0x7d82: 0x002c0a88, 0x7d83: 0xc36509c2, + 0x7d84: 0xc36a09f2, 0x7d85: 0x002c9888, 0x7d86: 0xc36f0a22, 0x7d87: 0x002d2288, + 0x7d88: 0x002d6888, 0x7d89: 0x002d9a88, 0x7d8a: 0x002dcc88, 0x7d8b: 0x002dfe88, + 0x7d8c: 0xc37b0ac4, 0x7d8d: 0x002e8288, 0x7d8e: 0xc3740a52, 0x7d8f: 0x002ee288, + 0x7d90: 0xc38209c2, 0x7d91: 0x002f5688, 0x7d92: 0xc38509c2, 0x7d93: 0x002fe688, + 0x7d94: 0xc38a09c2, 0x7d95: 0x00306c88, 0x7d96: 0x0030be88, 0x7d97: 0x0030e288, + 0x7d98: 0x0030f688, 0x7d99: 0x00310088, 0x7d9a: 0x00312a88, 0x7d9b: 0x4003f820, + 0x7d9c: 0x4004e420, 0x7d9d: 0x4003fa20, 0x7d9e: 0x40062420, 0x7d9f: 0x40021620, + 0x7da0: 0x40061e20, 0x7da1: 0x402bde20, 0x7da2: 0x402c0a20, 0x7da3: 0xc33309b1, + 0x7da4: 0xc36809e1, 0x7da5: 0x402c9820, 0x7da6: 0xc36d0a11, 0x7da7: 0x402d2220, + 0x7da8: 0x402d6820, 0x7da9: 0x402d9a20, 0x7daa: 0x402dcc20, 0x7dab: 0x402dfe20, + 0x7dac: 0xc3770a73, 0x7dad: 0x402e8220, 0x7dae: 0xc3720a41, 0x7daf: 0x402ee220, + 0x7db0: 0xc38009b1, 0x7db1: 0x402f5620, 0x7db2: 0xc35d09b1, 0x7db3: 0x402fe620, + 0x7db4: 0xc38809b1, 0x7db5: 0x40306c20, 0x7db6: 0x4030be20, 0x7db7: 0x4030e220, + 0x7db8: 0x4030f620, 0x7db9: 0x40310020, 0x7dba: 0x40312a20, 0x7dbb: 0x4003fc20, + 0x7dbc: 0x40094820, 0x7dbd: 0x4003fe20, 0x7dbe: 0x40094c20, 0x7dbf: 0xa0000000, + // Block 0x1f7, offset 0x7dc0 + 0x7dc0: 0xa0000000, 0x7dc1: 0xa0000000, 0x7dc2: 0xa0000000, 0x7dc3: 0xa0000000, + 0x7dc4: 0xa0000000, 0x7dc5: 0xa0000000, 0x7dc6: 0xa0000000, 0x7dc7: 0xa0000000, + 0x7dc8: 0xa0000000, 0x7dc9: 0x40020020, 0x7dca: 0x40020220, 0x7dcb: 0x40020420, + 0x7dcc: 0x40020620, 0x7dcd: 0x40020820, 0x7dce: 0xa0000000, 0x7dcf: 0xa0000000, + 0x7dd0: 0xa0000000, 0x7dd1: 0xa0000000, 0x7dd2: 0xa0000000, 0x7dd3: 0xa0000000, + 0x7dd4: 0xa0000000, 0x7dd5: 0xa0000000, 0x7dd6: 0xa0000000, 0x7dd7: 0xa0000000, + 0x7dd8: 0xa0000000, 0x7dd9: 0xa0000000, 0x7dda: 0xa0000000, 0x7ddb: 0xa0000000, + 0x7ddc: 0xa0000000, 0x7ddd: 0xa0000000, 0x7dde: 0xa0000000, 0x7ddf: 0xa0000000, + 0x7de0: 0x40021220, 0x7de1: 0x4002ba20, 0x7de2: 0x4003e020, 0x7de3: 0x4004ea20, + 0x7de4: 0x4027de20, 0x7de5: 0x4004ec20, 0x7de6: 0x4004e620, 0x7de7: 0x4003d220, + 0x7de8: 0x4003f420, 0x7de9: 0x4003f620, 0x7dea: 0x4004d820, 0x7deb: 0x40093820, + 0x7dec: 0x40024020, 0x7ded: 0x40021a20, 0x7dee: 0x4002e420, 0x7def: 0x4004e220, + 0x7df0: 0x4029cc20, 0x7df1: 0x4029ce20, 0x7df2: 0x4029d020, 0x7df3: 0x4029d220, + 0x7df4: 0x4029d420, 0x7df5: 0x4029d620, 0x7df6: 0x4029d820, 0x7df7: 0x4029da20, + 0x7df8: 0x4029dc20, 0x7df9: 0x4029de20, 0x7dfa: 0x40026c20, 0x7dfb: 0x40026220, + 0x7dfc: 0x40094020, 0x7dfd: 0x40094220, 0x7dfe: 0x40094420, 0x7dff: 0x4002c420, + // Block 0x1f8, offset 0x7e00 + 0x7e00: 0x4004d620, 0x7e01: 0xc3970b93, 0x7e02: 0x002c0a88, 0x7e03: 0x002c3a88, + 0x7e04: 0x002c6288, 0x7e05: 0xc39e0be1, 0x7e06: 0x002d0888, 0x7e07: 0x002d2288, + 0x7e08: 0x002d6888, 0x7e09: 0x002d9a88, 0x7e0a: 0x002dcc88, 0x7e0b: 0x002dfe88, + 0x7e0c: 0xc0030002, 0x7e0d: 0x002e8288, 0x7e0e: 0x002e9e88, 0x7e0f: 0xc3a30b21, + 0x7e10: 0x002f2c88, 0x7e11: 0x002f5688, 0x7e12: 0x002f7a88, 0x7e13: 0x002fe688, + 0x7e14: 0x00302c88, 0x7e15: 0xc3900b21, 0x7e16: 0x0030be88, 0x7e17: 0x0030e288, + 0x7e18: 0x0030f688, 0x7e19: 0x00310088, 0x7e1a: 0x00312a88, 0x7e1b: 0x4003f820, + 0x7e1c: 0x4004e420, 0x7e1d: 0x4003fa20, 0x7e1e: 0x40062420, 0x7e1f: 0x40021620, + 0x7e20: 0x40061e20, 0x7e21: 0xc3930b52, 0x7e22: 0x402c0a20, 0x7e23: 0x402c3a20, + 0x7e24: 0x402c6220, 0x7e25: 0xc39c0be1, 0x7e26: 0x402d0820, 0x7e27: 0x402d2220, + 0x7e28: 0x402d6820, 0x7e29: 0x402d9a20, 0x7e2a: 0x402dcc20, 0x7e2b: 0x402dfe20, + 0x7e2c: 0xc0000002, 0x7e2d: 0x402e8220, 0x7e2e: 0x402e9e20, 0x7e2f: 0xc3a00b21, + 0x7e30: 0x402f2c20, 0x7e31: 0x402f5620, 0x7e32: 0x402f7a20, 0x7e33: 0x402fe620, + 0x7e34: 0x40302c20, 0x7e35: 0xc38d0b21, 0x7e36: 0x4030be20, 0x7e37: 0x4030e220, + 0x7e38: 0x4030f620, 0x7e39: 0x40310020, 0x7e3a: 0x40312a20, 0x7e3b: 0x4003fc20, + 0x7e3c: 0x40094820, 0x7e3d: 0x4003fe20, 0x7e3e: 0x40094c20, 0x7e3f: 0xa0000000, + // Block 0x1f9, offset 0x7e40 + 0x7e40: 0xe00008f5, 0x7e41: 0xe00008ef, 0x7e42: 0xe0000921, 0x7e43: 0xe0000969, + 0x7e44: 0x00320ca3, 0x7e45: 0x00321083, 0x7e46: 0x00320c83, 0x7e47: 0xe0000a53, + 0x7e48: 0xe0000ae8, 0x7e49: 0xe0000ae2, 0x7e4a: 0xe0000af4, 0x7e4b: 0xe0000b20, + 0x7e4c: 0xe0000c2b, 0x7e4d: 0xe0000c25, 0x7e4e: 0xe0000c37, 0x7e4f: 0xe0000c43, + 0x7e50: 0x002c62c3, 0x7e51: 0xe0000d63, 0x7e52: 0xe0000d9a, 0x7e53: 0xe0000d94, + 0x7e54: 0xe0000da6, 0x7e55: 0xe0000de6, 0x7e56: 0x00320ea3, 0x7e57: 0x40093e20, + 0x7e58: 0x00320e83, 0x7e59: 0xe0000fe1, 0x7e5a: 0xe0000fdb, 0x7e5b: 0xe0000fed, + 0x7e5c: 0x003100a3, 0x7e5d: 0xe0001102, 0x7e5e: 0xe0002973, 0x7e5f: 0xe0000f7b, + 0x7e60: 0xe00008f2, 0x7e61: 0xe00008ec, 0x7e62: 0xe000091e, 0x7e63: 0xe0000966, + 0x7e64: 0x40320c21, 0x7e65: 0x40321020, 0x7e66: 0x40320c20, 0x7e67: 0xe0000a4d, + 0x7e68: 0xe0000ae5, 0x7e69: 0xe0000adf, 0x7e6a: 0xe0000af1, 0x7e6b: 0xe0000b1d, + 0x7e6c: 0xe0000c28, 0x7e6d: 0xe0000c22, 0x7e6e: 0xe0000c34, 0x7e6f: 0xe0000c40, + 0x7e70: 0x402c6222, 0x7e71: 0xe0000d60, 0x7e72: 0xe0000d97, 0x7e73: 0xe0000d91, + 0x7e74: 0xe0000da3, 0x7e75: 0xe0000de3, 0x7e76: 0x40320e21, 0x7e77: 0x40093c20, + 0x7e78: 0x40320e20, 0x7e79: 0xe0000fde, 0x7e7a: 0xe0000fd8, 0x7e7b: 0xe0000fea, + 0x7e7c: 0x40310021, 0x7e7d: 0xe00010ff, 0x7e7e: 0xe0002970, 0x7e7f: 0xe0001114, + // Block 0x1fa, offset 0x7e80 + 0x7e80: 0xe0000983, 0x7e81: 0xe0000980, 0x7e82: 0xe00008fb, 0x7e83: 0xe00008f8, + 0x7e84: 0xe000097d, 0x7e85: 0xe000097a, 0x7e86: 0xe0000a38, 0x7e87: 0xe0000a35, + 0x7e88: 0xe0000a3e, 0x7e89: 0xe0000a3b, 0x7e8a: 0xe0000a4a, 0x7e8b: 0xe0000a47, + 0x7e8c: 0xe0000a44, 0x7e8d: 0xe0000a41, 0x7e8e: 0xe0000a86, 0x7e8f: 0xe0000a83, + 0x7e90: 0x002c62a3, 0x7e91: 0x402c6221, 0x7e92: 0xe0000b46, 0x7e93: 0xe0000b43, + 0x7e94: 0xe0000aee, 0x7e95: 0xe0000aeb, 0x7e96: 0xe0000b2c, 0x7e97: 0xe0000b29, + 0x7e98: 0x00320cc3, 0x7e99: 0x40320c22, 0x7e9a: 0xe0000b1a, 0x7e9b: 0xe0000b17, + 0x7e9c: 0xe0000bb8, 0x7e9d: 0xe0000bb5, 0x7e9e: 0xe0000bb2, 0x7e9f: 0xe0000baf, + 0x7ea0: 0xe0000bc4, 0x7ea1: 0xe0000bc1, 0x7ea2: 0xe0000bca, 0x7ea3: 0xe0000bc7, + 0x7ea4: 0xe0000bee, 0x7ea5: 0xe0000beb, 0x7ea6: 0xe0000c1b, 0x7ea7: 0xe0000c18, + 0x7ea8: 0xe0000c51, 0x7ea9: 0xe0000c4e, 0x7eaa: 0xe0000c60, 0x7eab: 0xe0000c5d, + 0x7eac: 0xe0000c31, 0x7ead: 0xe0000c2e, 0x7eae: 0xe0000c5a, 0x7eaf: 0xe0000c57, + 0x7eb0: 0xe0000c54, 0x7eb1: 0x402da220, 0x7eb2: 0xf0000a0a, 0x7eb3: 0xf0000404, + 0x7eb4: 0xe0000c8a, 0x7eb5: 0xe0000c87, 0x7eb6: 0xe0000c9f, 0x7eb7: 0xe0000c9c, + 0x7eb8: 0x402f7220, 0x7eb9: 0xe0000ccc, 0x7eba: 0xe0000cc9, 0x7ebb: 0xe0000cd8, + 0x7ebc: 0xe0000cd5, 0x7ebd: 0xe0000cd2, 0x7ebe: 0xe0000ccf, 0x7ebf: 0xe0000d04, + // Block 0x1fb, offset 0x7ec0 + 0x7ec0: 0xe0000cfe, 0x7ec1: 0xe0000cf8, 0x7ec2: 0xe0000cf5, 0x7ec3: 0xe0000d51, + 0x7ec4: 0xe0000d4e, 0x7ec5: 0xe0000d6f, 0x7ec6: 0xe0000d6c, 0x7ec7: 0xe0000d5d, + 0x7ec8: 0xe0000d5a, 0x7ec9: 0xf0000404, 0x7eca: 0x002eda88, 0x7ecb: 0x402eda20, + 0x7ecc: 0xe0000e2e, 0x7ecd: 0xe0000e2b, 0x7ece: 0xe0000da0, 0x7ecf: 0xe0000d9d, + 0x7ed0: 0x00320ec3, 0x7ed1: 0x40320e22, 0x7ed2: 0x00320ee3, 0x7ed3: 0x40320e23, + 0x7ed4: 0xe0000eca, 0x7ed5: 0xe0000ec7, 0x7ed6: 0xe0000edc, 0x7ed7: 0xe0000ed9, + 0x7ed8: 0xe0000ed0, 0x7ed9: 0xe0000ecd, 0x7eda: 0xe0000f1f, 0x7edb: 0xe0000f1c, + 0x7edc: 0xe0000f2d, 0x7edd: 0xe0000f2a, 0x7ede: 0xe0000f47, 0x7edf: 0xe0000f44, + 0x7ee0: 0xe0000f33, 0x7ee1: 0xe0000f30, 0x7ee2: 0xe0000f99, 0x7ee3: 0xe0000f96, + 0x7ee4: 0xe0000f8a, 0x7ee5: 0xe0000f87, 0x7ee6: 0x00303688, 0x7ee7: 0x40303620, + 0x7ee8: 0xe000102b, 0x7ee9: 0xe0001028, 0x7eea: 0xe000103f, 0x7eeb: 0xe000103c, + 0x7eec: 0xe0000fe7, 0x7eed: 0xe0000fe4, 0x7eee: 0xe0000ff9, 0x7eef: 0xe0000ff6, + 0x7ef0: 0x003100c3, 0x7ef1: 0x40310022, 0x7ef2: 0xe0001039, 0x7ef3: 0xe0001036, + 0x7ef4: 0xe00010d8, 0x7ef5: 0xe00010d5, 0x7ef6: 0xe000110e, 0x7ef7: 0xe000110b, + 0x7ef8: 0xe0001117, 0x7ef9: 0xe000113b, 0x7efa: 0xe0001138, 0x7efb: 0xe000114d, + 0x7efc: 0xe000114a, 0x7efd: 0xe0001147, 0x7efe: 0xe0001144, 0x7eff: 0xe0000f64, + // Block 0x1fc, offset 0x7f00 + 0x7f00: 0x40321220, 0x7f01: 0x40321a20, 0x7f02: 0x40322220, 0x7f03: 0x40322a20, + 0x7f04: 0xe0000ad5, 0x7f05: 0xe0000ad1, 0x7f06: 0xe0000acd, 0x7f07: 0xf0000a0a, + 0x7f08: 0xf000040a, 0x7f09: 0xf0000404, 0x7f0a: 0xf0000a0a, 0x7f0b: 0xf000040a, + 0x7f0c: 0xf0000404, 0x7f0d: 0xe0000947, 0x7f0e: 0xe0000944, 0x7f0f: 0xe0000c3d, + 0x7f10: 0xe0000c3a, 0x7f11: 0xe0000dcc, 0x7f12: 0xe0000dc9, 0x7f13: 0xe0000ff3, + 0x7f14: 0xe0000ff0, 0x7f15: 0xe000298b, 0x7f16: 0xe0002988, 0x7f17: 0xe0002979, + 0x7f18: 0xe0002976, 0x7f19: 0xe0002985, 0x7f1a: 0xe0002982, 0x7f1b: 0xe000297f, + 0x7f1c: 0xe000297c, 0x7f1d: 0x402cae20, 0x7f1e: 0xe000299d, 0x7f1f: 0xe000299a, + 0x7f20: 0xe0000976, 0x7f21: 0xe0000972, 0x7f22: 0xe0002997, 0x7f23: 0xe0002994, + 0x7f24: 0x002d3a88, 0x7f25: 0x402d3a20, 0x7f26: 0xe0000bbe, 0x7f27: 0xe0000bbb, + 0x7f28: 0xe0000c99, 0x7f29: 0xe0000c96, 0x7f2a: 0xe0000e20, 0x7f2b: 0xe0000e1d, + 0x7f2c: 0xe0000e27, 0x7f2d: 0xe0000e23, 0x7f2e: 0xe0001162, 0x7f2f: 0xe000115f, + 0x7f30: 0xe0000c8d, 0x7f31: 0xf0000a0a, 0x7f32: 0xf000040a, 0x7f33: 0xf0000404, + 0x7f34: 0xe0000bac, 0x7f35: 0xe0000ba9, 0x7f36: 0x002d7888, 0x7f37: 0x00319488, + 0x7f38: 0xe0000d57, 0x7f39: 0xe0000d54, 0x7f3a: 0xe00029b5, 0x7f3b: 0xe00029b2, + 0x7f3c: 0xe0002991, 0x7f3d: 0xe000298e, 0x7f3e: 0xe00029a3, 0x7f3f: 0xe00029a0, + // Block 0x1fd, offset 0x7f40 + 0x7f40: 0xe000098f, 0x7f41: 0xe000098c, 0x7f42: 0xe0000995, 0x7f43: 0xe0000992, + 0x7f44: 0xe0000b62, 0x7f45: 0xe0000b5f, 0x7f46: 0xe0000b68, 0x7f47: 0xe0000b65, + 0x7f48: 0xe0000c6c, 0x7f49: 0xe0000c69, 0x7f4a: 0xe0000c72, 0x7f4b: 0xe0000c6f, + 0x7f4c: 0xe0000e4a, 0x7f4d: 0xe0000e47, 0x7f4e: 0xe0000e50, 0x7f4f: 0xe0000e4d, + 0x7f50: 0xe0000ee8, 0x7f51: 0xe0000ee5, 0x7f52: 0xe0000eee, 0x7f53: 0xe0000eeb, + 0x7f54: 0xe0001053, 0x7f55: 0xe0001050, 0x7f56: 0xe0001059, 0x7f57: 0xe0001056, + 0x7f58: 0xe0000f61, 0x7f59: 0xe0000f5e, 0x7f5a: 0xe0000fa5, 0x7f5b: 0xe0000fa2, + 0x7f5c: 0x00312288, 0x7f5d: 0x40312220, 0x7f5e: 0xe0000bf4, 0x7f5f: 0xe0000bf1, + 0x7f60: 0x002ebc88, 0x7f61: 0x402c8c20, 0x7f62: 0x002f2288, 0x7f63: 0x402f2220, + 0x7f64: 0x00314088, 0x7f65: 0x40314020, 0x7f66: 0xe000096f, 0x7f67: 0xe000096c, + 0x7f68: 0xe0000b32, 0x7f69: 0xe0000b2f, 0x7f6a: 0xe00029af, 0x7f6b: 0xe00029ac, + 0x7f6c: 0xe0000dfd, 0x7f6d: 0xe0000df9, 0x7f6e: 0xe0000e04, 0x7f6f: 0xe0000e01, + 0x7f70: 0xe0000e0b, 0x7f71: 0xe0000e07, 0x7f72: 0xe0001129, 0x7f73: 0xe0001126, + 0x7f74: 0x402e5e20, 0x7f75: 0x402ed020, 0x7f76: 0x40305a20, 0x7f77: 0x402dd420, + 0x7f78: 0xe0000abf, 0x7f79: 0xe0000ec4, 0x7f7a: 0x002be888, 0x7f7b: 0x002c4488, + 0x7f7c: 0x402c4420, 0x7f7d: 0x002e3888, 0x7f7e: 0x00303e88, 0x7f7f: 0x402ffc20, + // Block 0x1fe, offset 0x7f80 + 0x7f80: 0x402c2820, 0x7f81: 0x402c7020, 0x7f82: 0x402d1420, 0x7f83: 0x402d4220, + 0x7f84: 0x402e0820, 0x7f85: 0x402e5220, 0x7f86: 0x402e8e20, 0x7f87: 0x402ec620, + 0x7f88: 0x402f3c20, 0x7f89: 0x402faa20, 0x7f8a: 0x402ff220, 0x7f8b: 0x40301020, + 0x7f8c: 0x4030ca20, 0x7f8d: 0x4030fe20, 0x7f8e: 0x40313e20, 0x7f8f: 0x402bea20, + 0x7f90: 0x402c0020, 0x7f91: 0x402c8220, 0x7f92: 0x402caa20, 0x7f93: 0x402cca20, + 0x7f94: 0x402ce420, 0x7f95: 0x402cc020, 0x7f96: 0x402dc020, 0x7f97: 0x402f0620, + 0x7f98: 0x40302220, 0x7f99: 0x40308620, 0x7f9a: 0x40317620, 0x7f9b: 0x002c0294, + 0x7f9c: 0x002c3a94, 0x7f9d: 0x002c5694, 0x7f9e: 0xe000296d, 0x7f9f: 0x002cdc94, + 0x7fa0: 0x002d0894, 0x7fa1: 0x002dee94, 0x7fa2: 0x002d2a94, 0x7fa3: 0x00308894, + 0x7fa4: 0x002db694, 0x7fa5: 0x002dc294, 0x7fa6: 0x002daa94, 0x7fa7: 0x002dbe94, + 0x7fa8: 0x002de694, 0x7fa9: 0x002e5494, 0x7faa: 0x002e5294, 0x7fab: 0x002e2a94, + 0x7fac: 0x002e9094, 0x7fad: 0x0030ac94, 0x7fae: 0x002eb494, 0x7faf: 0x002ec894, + 0x7fb0: 0x002ea694, 0x7fb1: 0x002f1094, 0x7fb2: 0x002f4c94, 0x7fb3: 0x002ff494, + 0x7fb4: 0x00300894, 0x7fb5: 0x00304294, 0x7fb6: 0x00307c94, 0x7fb7: 0x0030b494, + 0x7fb8: 0x00307494, 0x7fb9: 0x0030cc94, 0x7fba: 0x0030da94, 0x7fbb: 0x00312a94, + 0x7fbc: 0x00314894, 0x7fbd: 0x00315094, 0x7fbe: 0x00316494, 0x7fbf: 0x00326a94, + // Block 0x1ff, offset 0x7fc0 + 0x7fc0: 0xe0000d24, 0x7fc1: 0xe0000d21, 0x7fc2: 0xe0000d2a, 0x7fc3: 0xe0000d27, + 0x7fc4: 0xe0000d69, 0x7fc5: 0xe0000d66, 0x7fc6: 0xe0000d7b, 0x7fc7: 0xe0000d78, + 0x7fc8: 0xe0000d87, 0x7fc9: 0xe0000d84, 0x7fca: 0xe0000d81, 0x7fcb: 0xe0000d7e, + 0x7fcc: 0xe0000ded, 0x7fcd: 0xe0000de9, 0x7fce: 0xe00029a9, 0x7fcf: 0xe00029a6, + 0x7fd0: 0xe0000e3d, 0x7fd1: 0xe0000e39, 0x7fd2: 0xe0000e35, 0x7fd3: 0xe0000e31, + 0x7fd4: 0xe0000ea7, 0x7fd5: 0xe0000ea4, 0x7fd6: 0xe0000ead, 0x7fd7: 0xe0000eaa, + 0x7fd8: 0xe0000ed6, 0x7fd9: 0xe0000ed3, 0x7fda: 0xe0000ef4, 0x7fdb: 0xe0000ef1, + 0x7fdc: 0xe0000efb, 0x7fdd: 0xe0000ef7, 0x7fde: 0xe0000f02, 0x7fdf: 0xe0000eff, + 0x7fe0: 0xe0000f41, 0x7fe1: 0xe0000f3e, 0x7fe2: 0xe0000f53, 0x7fe3: 0xe0000f50, + 0x7fe4: 0xe0000f26, 0x7fe5: 0xe0000f22, 0x7fe6: 0xe0000f3a, 0x7fe7: 0xe0000f36, + 0x7fe8: 0xe0000f5a, 0x7fe9: 0xe0000f56, 0x7fea: 0xe0000f93, 0x7feb: 0xe0000f90, + 0x7fec: 0xe0000f9f, 0x7fed: 0xe0000f9c, 0x7fee: 0xe0000fb1, 0x7fef: 0xe0000fae, + 0x7ff0: 0xe0000fab, 0x7ff1: 0xe0000fa8, 0x7ff2: 0xe0001093, 0x7ff3: 0xe0001090, + 0x7ff4: 0xe000109f, 0x7ff5: 0xe000109c, 0x7ff6: 0xe0001099, 0x7ff7: 0xe0001096, + 0x7ff8: 0xe0001032, 0x7ff9: 0xe000102e, 0x7ffa: 0xe000298b, 0x7ffb: 0xe0002988, + 0x7ffc: 0xe00010a9, 0x7ffd: 0xe00010a6, 0x7ffe: 0xe00010af, 0x7fff: 0xe00010ac, + // Block 0x200, offset 0x8000 + 0x8000: 0xe00009bc, 0x8001: 0xe00009c0, 0x8002: 0x002c3a8b, 0x8003: 0xf0000a04, + 0x8004: 0x40081c20, 0x8005: 0xe0000a5e, 0x8006: 0xe0000a62, 0x8007: 0x002cc28a, + 0x8008: 0x40081e20, 0x8009: 0xf0000a04, 0x800a: 0x002d2285, 0x800b: 0x002d688b, + 0x800c: 0x002d688b, 0x800d: 0x002d688b, 0x800e: 0x002d6885, 0x800f: 0xf0000202, + 0x8010: 0x002d9a8b, 0x8011: 0x002d9a8b, 0x8012: 0x002e228b, 0x8013: 0x002e2285, + 0x8014: 0x40082020, 0x8015: 0x002e9e8b, 0x8016: 0xf000040a, 0x8017: 0x40082220, + 0x8018: 0x40082420, 0x8019: 0x002f2c8b, 0x801a: 0x002f568b, 0x801b: 0x002f7a8b, + 0x801c: 0x002f7a8b, 0x801d: 0x002f7a8b, 0x801e: 0x40082620, 0x801f: 0x40082820, + 0x8020: 0xf0001414, 0x8021: 0xe0000fbd, 0x8022: 0xf0001414, 0x8023: 0x40082a20, + 0x8024: 0x00312a8b, 0x8025: 0x40082c20, 0x8026: 0x0032a288, 0x8027: 0x40082e20, + 0x8028: 0x00312a8b, 0x8029: 0x40083020, 0x802a: 0x002dfe88, 0x802b: 0x00321083, + 0x802c: 0x002c0a8b, 0x802d: 0x002c3a8b, 0x802e: 0x40083220, 0x802f: 0x002c9885, + 0x8030: 0x002c988b, 0x8031: 0x002d088b, 0x8032: 0x002d1e88, 0x8033: 0x002e828b, + 0x8034: 0x002ee285, 0x8035: 0x00389084, 0x8036: 0x00389284, 0x8037: 0x00389484, + 0x8038: 0x00389684, 0x8039: 0x002d9a85, 0x803a: 0x40083420, 0x803b: 0xe0000b95, + 0x803c: 0x00327e85, 0x803d: 0x00325685, 0x803e: 0x0032568b, 0x803f: 0x00327e8b, + // Block 0x201, offset 0x8040 + 0x8040: 0xa0000000, 0x8041: 0xa0000000, 0x8042: 0xa0000000, 0x8043: 0xa0000000, + 0x8044: 0xa0000000, 0x8045: 0xa0000000, 0x8046: 0xa0000000, 0x8047: 0xa0000000, + 0x8048: 0xa0000000, 0x8049: 0x40020020, 0x804a: 0x40020220, 0x804b: 0x40020420, + 0x804c: 0x40020620, 0x804d: 0x40020820, 0x804e: 0xa0000000, 0x804f: 0xa0000000, + 0x8050: 0xa0000000, 0x8051: 0xa0000000, 0x8052: 0xa0000000, 0x8053: 0xa0000000, + 0x8054: 0xa0000000, 0x8055: 0xa0000000, 0x8056: 0xa0000000, 0x8057: 0xa0000000, + 0x8058: 0xa0000000, 0x8059: 0xa0000000, 0x805a: 0xa0000000, 0x805b: 0xa0000000, + 0x805c: 0xa0000000, 0x805d: 0xa0000000, 0x805e: 0xa0000000, 0x805f: 0xa0000000, + 0x8060: 0x40021220, 0x8061: 0x4002ba20, 0x8062: 0x4003e020, 0x8063: 0x4004ea20, + 0x8064: 0x4027de20, 0x8065: 0x4004ec20, 0x8066: 0x4004e620, 0x8067: 0x4003d220, + 0x8068: 0x4003f420, 0x8069: 0x4003f620, 0x806a: 0x4004d820, 0x806b: 0x40093820, + 0x806c: 0x40024020, 0x806d: 0x40021a20, 0x806e: 0x4002e420, 0x806f: 0x4004e220, + 0x8070: 0x4029cc20, 0x8071: 0x4029ce20, 0x8072: 0x4029d020, 0x8073: 0x4029d220, + 0x8074: 0x4029d420, 0x8075: 0x4029d620, 0x8076: 0x4029d820, 0x8077: 0x4029da20, + 0x8078: 0x4029dc20, 0x8079: 0x4029de20, 0x807a: 0x40026c20, 0x807b: 0x40026220, + 0x807c: 0x40094020, 0x807d: 0x40094220, 0x807e: 0x40094420, 0x807f: 0x4002c420, + // Block 0x202, offset 0x8080 + 0x8080: 0x4004d620, 0x8081: 0xc3a80071, 0x8082: 0x002c0a88, 0x8083: 0x002c3a88, + 0x8084: 0x002c6288, 0x8085: 0x002c9888, 0x8086: 0x002d0888, 0x8087: 0x002d2288, + 0x8088: 0x002d6888, 0x8089: 0x002d9a88, 0x808a: 0x002dcc88, 0x808b: 0x002dfe88, + 0x808c: 0xc0030002, 0x808d: 0x002e8288, 0x808e: 0x002e9e88, 0x808f: 0xc3ac0071, + 0x8090: 0x002f2c88, 0x8091: 0x002f5688, 0x8092: 0x002f7a88, 0x8093: 0x002fe688, + 0x8094: 0x00302c88, 0x8095: 0xc3b00071, 0x8096: 0x0030be88, 0x8097: 0x0030e288, + 0x8098: 0x0030f688, 0x8099: 0x00310088, 0x809a: 0x00312a88, 0x809b: 0x4003f820, + 0x809c: 0x4004e420, 0x809d: 0x4003fa20, 0x809e: 0x40062420, 0x809f: 0x40021620, + 0x80a0: 0x40061e20, 0x80a1: 0xc3a60071, 0x80a2: 0x402c0a20, 0x80a3: 0x402c3a20, + 0x80a4: 0x402c6220, 0x80a5: 0x402c9820, 0x80a6: 0x402d0820, 0x80a7: 0x402d2220, + 0x80a8: 0x402d6820, 0x80a9: 0x402d9a20, 0x80aa: 0x402dcc20, 0x80ab: 0x402dfe20, + 0x80ac: 0xc0000002, 0x80ad: 0x402e8220, 0x80ae: 0x402e9e20, 0x80af: 0xc3aa0071, + 0x80b0: 0x402f2c20, 0x80b1: 0x402f5620, 0x80b2: 0x402f7a20, 0x80b3: 0x402fe620, + 0x80b4: 0x40302c20, 0x80b5: 0xc3ae0071, 0x80b6: 0x4030be20, 0x80b7: 0x4030e220, + 0x80b8: 0x4030f620, 0x80b9: 0x40310020, 0x80ba: 0x40312a20, 0x80bb: 0x4003fc20, + 0x80bc: 0x40094820, 0x80bd: 0x4003fe20, 0x80be: 0x40094c20, 0x80bf: 0xa0000000, + // Block 0x203, offset 0x80c0 + 0x80c0: 0xe00008f5, 0x80c1: 0xe00008ef, 0x80c2: 0xe0000921, 0x80c3: 0xe0000969, + 0x80c4: 0xe00029bb, 0x80c5: 0xe000094d, 0x80c6: 0xe00009dd, 0x80c7: 0xe0000a53, + 0x80c8: 0xe0000ae8, 0x80c9: 0xe0000ae2, 0x80ca: 0xe0000af4, 0x80cb: 0xe0000b20, + 0x80cc: 0xe0000c2b, 0x80cd: 0xe0000c25, 0x80ce: 0xe0000c37, 0x80cf: 0xe0000c43, + 0x80d0: 0xe0000ab3, 0x80d1: 0xe0000d63, 0x80d2: 0xe0000d9a, 0x80d3: 0xe0000d94, + 0x80d4: 0xe0000da6, 0x80d5: 0xe0000de6, 0x80d6: 0xe00029c9, 0x80d7: 0x40093e20, + 0x80d8: 0xe0000e12, 0x80d9: 0xe0000fe1, 0x80da: 0xe0000fdb, 0x80db: 0xe0000fed, + 0x80dc: 0xe00029df, 0x80dd: 0xe0001102, 0x80de: 0x00318888, 0x80df: 0xe0000f7b, + 0x80e0: 0xe00008f2, 0x80e1: 0xe00008ec, 0x80e2: 0xe000091e, 0x80e3: 0xe0000966, + 0x80e4: 0xe00029b8, 0x80e5: 0xe000094a, 0x80e6: 0xe00009d5, 0x80e7: 0xe0000a4d, + 0x80e8: 0xe0000ae5, 0x80e9: 0xe0000adf, 0x80ea: 0xe0000af1, 0x80eb: 0xe0000b1d, + 0x80ec: 0xe0000c28, 0x80ed: 0xe0000c22, 0x80ee: 0xe0000c34, 0x80ef: 0xe0000c40, + 0x80f0: 0xe0000aad, 0x80f1: 0xe0000d60, 0x80f2: 0xe0000d97, 0x80f3: 0xe0000d91, + 0x80f4: 0xe0000da3, 0x80f5: 0xe0000de3, 0x80f6: 0xe00029c6, 0x80f7: 0x40093c20, + 0x80f8: 0xe0000e0f, 0x80f9: 0xe0000fde, 0x80fa: 0xe0000fd8, 0x80fb: 0xe0000fea, + 0x80fc: 0xe00029dc, 0x80fd: 0xe00010ff, 0x80fe: 0x40318820, 0x80ff: 0xe0001114, + // Block 0x204, offset 0x8100 + 0x8100: 0x40321220, 0x8101: 0x40321a20, 0x8102: 0x40322220, 0x8103: 0x40322a20, + 0x8104: 0xe0000ad5, 0x8105: 0xe0000ad1, 0x8106: 0xe0000acd, 0x8107: 0xf0000a0a, + 0x8108: 0xf000040a, 0x8109: 0xf0000404, 0x810a: 0xf0000a0a, 0x810b: 0xf000040a, + 0x810c: 0xf0000404, 0x810d: 0xe0000947, 0x810e: 0xe0000944, 0x810f: 0xe0000c3d, + 0x8110: 0xe0000c3a, 0x8111: 0xe0000dcc, 0x8112: 0xe0000dc9, 0x8113: 0xe0000ff3, + 0x8114: 0xe0000ff0, 0x8115: 0xe00029fe, 0x8116: 0xe00029fa, 0x8117: 0xe00029e6, + 0x8118: 0xe00029e2, 0x8119: 0xe00029f6, 0x811a: 0xe00029f2, 0x811b: 0xe00029ee, + 0x811c: 0xe00029ea, 0x811d: 0x402cae20, 0x811e: 0xe00029c2, 0x811f: 0xe00029be, + 0x8120: 0xe0000976, 0x8121: 0xe0000972, 0x8122: 0xe00009f4, 0x8123: 0xe00009ef, + 0x8124: 0x002d3a88, 0x8125: 0x402d3a20, 0x8126: 0xe0000bbe, 0x8127: 0xe0000bbb, + 0x8128: 0xe0000c99, 0x8129: 0xe0000c96, 0x812a: 0xe0000e20, 0x812b: 0xe0000e1d, + 0x812c: 0xe0000e27, 0x812d: 0xe0000e23, 0x812e: 0xe0001162, 0x812f: 0xe000115f, + 0x8130: 0xe0000c8d, 0x8131: 0xf0000a0a, 0x8132: 0xf000040a, 0x8133: 0xf0000404, + 0x8134: 0xe0000bac, 0x8135: 0xe0000ba9, 0x8136: 0x002d7888, 0x8137: 0x00319488, + 0x8138: 0xe0000d57, 0x8139: 0xe0000d54, 0x813a: 0xe0000954, 0x813b: 0xe0000950, + 0x813c: 0xe00009ea, 0x813d: 0xe00009e5, 0x813e: 0xe0000e19, 0x813f: 0xe0000e15, + // Block 0x205, offset 0x8140 + 0x8140: 0xe000098f, 0x8141: 0xe000098c, 0x8142: 0xe0000995, 0x8143: 0xe0000992, + 0x8144: 0xe0000b62, 0x8145: 0xe0000b5f, 0x8146: 0xe0000b68, 0x8147: 0xe0000b65, + 0x8148: 0xe0000c6c, 0x8149: 0xe0000c69, 0x814a: 0xe0000c72, 0x814b: 0xe0000c6f, + 0x814c: 0xe0000e4a, 0x814d: 0xe0000e47, 0x814e: 0xe0000e50, 0x814f: 0xe0000e4d, + 0x8150: 0xe0000ee8, 0x8151: 0xe0000ee5, 0x8152: 0xe0000eee, 0x8153: 0xe0000eeb, + 0x8154: 0xe0001053, 0x8155: 0xe0001050, 0x8156: 0xe0001059, 0x8157: 0xe0001056, + 0x8158: 0xe0000f61, 0x8159: 0xe0000f5e, 0x815a: 0xe0000fa5, 0x815b: 0xe0000fa2, + 0x815c: 0x00312288, 0x815d: 0x40312220, 0x815e: 0xe0000bf4, 0x815f: 0xe0000bf1, + 0x8160: 0x002ebc88, 0x8161: 0x402c8c20, 0x8162: 0x002f2288, 0x8163: 0x402f2220, + 0x8164: 0x00314088, 0x8165: 0x40314020, 0x8166: 0xe000096f, 0x8167: 0xe000096c, + 0x8168: 0xe0000b32, 0x8169: 0xe0000b2f, 0x816a: 0xe00029d8, 0x816b: 0xe00029d4, + 0x816c: 0xe0000dfd, 0x816d: 0xe0000df9, 0x816e: 0xe0000e04, 0x816f: 0xe0000e01, + 0x8170: 0xe0000e0b, 0x8171: 0xe0000e07, 0x8172: 0xe0001129, 0x8173: 0xe0001126, + 0x8174: 0x402e5e20, 0x8175: 0x402ed020, 0x8176: 0x40305a20, 0x8177: 0x402dd420, + 0x8178: 0xe0000abf, 0x8179: 0xe0000ec4, 0x817a: 0x002be888, 0x817b: 0x002c4488, + 0x817c: 0x402c4420, 0x817d: 0x002e3888, 0x817e: 0x00303e88, 0x817f: 0x402ffc20, + // Block 0x206, offset 0x8180 + 0x8180: 0xe0000d24, 0x8181: 0xe0000d21, 0x8182: 0xe0000d2a, 0x8183: 0xe0000d27, + 0x8184: 0xe0000d69, 0x8185: 0xe0000d66, 0x8186: 0xe0000d7b, 0x8187: 0xe0000d78, + 0x8188: 0xe0000d87, 0x8189: 0xe0000d84, 0x818a: 0xe0000d81, 0x818b: 0xe0000d7e, + 0x818c: 0xe0000ded, 0x818d: 0xe0000de9, 0x818e: 0xe00029d0, 0x818f: 0xe00029cc, + 0x8190: 0xe0000e3d, 0x8191: 0xe0000e39, 0x8192: 0xe0000e35, 0x8193: 0xe0000e31, + 0x8194: 0xe0000ea7, 0x8195: 0xe0000ea4, 0x8196: 0xe0000ead, 0x8197: 0xe0000eaa, + 0x8198: 0xe0000ed6, 0x8199: 0xe0000ed3, 0x819a: 0xe0000ef4, 0x819b: 0xe0000ef1, + 0x819c: 0xe0000efb, 0x819d: 0xe0000ef7, 0x819e: 0xe0000f02, 0x819f: 0xe0000eff, + 0x81a0: 0xe0000f41, 0x81a1: 0xe0000f3e, 0x81a2: 0xe0000f53, 0x81a3: 0xe0000f50, + 0x81a4: 0xe0000f26, 0x81a5: 0xe0000f22, 0x81a6: 0xe0000f3a, 0x81a7: 0xe0000f36, + 0x81a8: 0xe0000f5a, 0x81a9: 0xe0000f56, 0x81aa: 0xe0000f93, 0x81ab: 0xe0000f90, + 0x81ac: 0xe0000f9f, 0x81ad: 0xe0000f9c, 0x81ae: 0xe0000fb1, 0x81af: 0xe0000fae, + 0x81b0: 0xe0000fab, 0x81b1: 0xe0000fa8, 0x81b2: 0xe0001093, 0x81b3: 0xe0001090, + 0x81b4: 0xe000109f, 0x81b5: 0xe000109c, 0x81b6: 0xe0001099, 0x81b7: 0xe0001096, + 0x81b8: 0xe0001032, 0x81b9: 0xe000102e, 0x81ba: 0xe00029fe, 0x81bb: 0xe00029fa, + 0x81bc: 0xe00010a9, 0x81bd: 0xe00010a6, 0x81be: 0xe00010af, 0x81bf: 0xe00010ac, + // Block 0x207, offset 0x81c0 + 0x81c0: 0x40078220, 0x81c1: 0x40075e20, 0x81c2: 0x40076020, 0x81c3: 0x40076220, + 0x81c4: 0x40058220, 0x81c5: 0x40058420, 0x81c6: 0x40058620, 0x81c7: 0x40058820, + 0x81c8: 0x40058a20, 0x81c9: 0x40058c20, 0x81ca: 0x40058e20, 0x81cb: 0x4027bc20, + 0x81cc: 0x0027bc83, 0x81cd: 0x4027bc21, 0x81ce: 0x4027bc22, 0x81cf: 0x4027bc23, + 0x81d0: 0x4027bc24, 0x81d1: 0x4027bc25, 0x81d2: 0x4005a020, 0x81d3: 0x40076420, + 0x81d4: 0x4027bc26, 0x81d5: 0x40076620, 0x81d6: 0x40076820, 0x81d7: 0x40076a20, + 0x81d8: 0xadc00000, 0x81d9: 0xadc00000, 0x81da: 0x40076c20, 0x81db: 0x40076e20, + 0x81dc: 0x40077020, 0x81dd: 0x40077220, 0x81de: 0x40077420, 0x81df: 0x40077620, + 0x81e0: 0xe00001a0, 0x81e1: 0xe0000234, 0x81e2: 0xe000034c, 0x81e3: 0xe0000426, + 0x81e4: 0xe00004fb, 0x81e5: 0xe00005c5, 0x81e6: 0xe0000690, 0x81e7: 0xe0000738, + 0x81e8: 0xe00007e4, 0x81e9: 0xe0000889, 0x81ea: 0xe0000237, 0x81eb: 0xe000034f, + 0x81ec: 0xe0000429, 0x81ed: 0xe00004fe, 0x81ee: 0xe00005c8, 0x81ef: 0xe0000693, + 0x81f0: 0xe000073b, 0x81f1: 0xe00007e7, 0x81f2: 0xe000088c, 0x81f3: 0xe00001a3, + 0x81f4: 0x4027bc27, 0x81f5: 0xadc00000, 0x81f6: 0x40077a20, 0x81f7: 0xadc00000, + 0x81f8: 0x40077c20, 0x81f9: 0xae611002, 0x81fa: 0x40040020, 0x81fb: 0x40040220, + 0x81fc: 0x40040420, 0x81fd: 0x40040620, 0x81fe: 0xa0000000, 0x81ff: 0xa0000000, + // Block 0x208, offset 0x8200 + 0x8200: 0x404a7620, 0x8201: 0x404a7c20, 0x8202: 0xc4db2161, 0x8203: 0xe0002a23, + 0x8204: 0x404a8420, 0x8205: 0x404a8820, 0x8206: 0x404a8c20, 0x8207: 0x404a9020, + 0x8209: 0x404a9420, 0x820a: 0x004aa883, 0x820b: 0x004aac83, + 0x820c: 0x004ab083, 0x820d: 0xe0002a5b, 0x820e: 0x004ab483, 0x820f: 0x404aa820, + 0x8210: 0x404aac20, 0x8211: 0xc3b50c31, 0x8212: 0xe0002a58, 0x8213: 0x404ab420, + 0x8214: 0x404ab820, 0x8215: 0x404abc20, 0x8216: 0xc3ff1211, 0x8217: 0xe0002a7c, + 0x8218: 0xc46018e1, 0x8219: 0x404ac820, 0x821a: 0x404acc20, 0x821b: 0x404ad020, + 0x821c: 0xe0002a9d, 0x821d: 0x404ad420, 0x821e: 0x404ad820, 0x821f: 0x404adc20, + 0x8220: 0xc49b1d01, 0x8221: 0x404ae420, 0x8222: 0xc4481761, 0x8223: 0xc4551831, + 0x8224: 0x404af220, 0x8225: 0x004af283, 0x8226: 0xc48f1c51, 0x8227: 0x404afe20, + 0x8228: 0x404b0220, 0x8229: 0xe0002a02, 0x822a: 0x004ae883, 0x822b: 0x404a7a20, + 0x822c: 0x404aec20, + 0x8231: 0xc5270751, 0x8232: 0x8282258c, 0x8233: 0x8281258d, + 0x8234: 0x82842590, 0x8235: 0x82812591, 0x8236: 0x404b2420, 0x8237: 0x404b2620, + 0x8238: 0x404b2820, 0x8239: 0x404b2a20, 0x823a: 0x82822596, 0x823b: 0x83822596, + 0x823c: 0x82822598, 0x823d: 0x83822598, 0x823e: 0x004ac483, 0x823f: 0xae611102, + // Block 0x209, offset 0x8240 + 0x8240: 0x8382258c, 0x8241: 0x8281258f, 0x8242: 0x004ac484, 0x8243: 0x004ac485, + 0x8244: 0xae610e02, 0x8245: 0xae611202, 0x8246: 0xae600000, 0x8247: 0xae600000, + 0x8248: 0xc3b20c01, 0x8249: 0xc5122551, 0x824a: 0xae611502, 0x824b: 0xc5102521, + 0x824c: 0x404b0e20, 0x824d: 0x404b0820, 0x824e: 0x404b0c20, 0x824f: 0x404b1020, + 0x8250: 0x82822599, 0x8251: 0x8282259a, 0x8252: 0x8282259b, 0x8253: 0xe0002ac7, + 0x8254: 0x8282259c, 0x8255: 0x8282259d, 0x8256: 0x8282259e, 0x8257: 0x8282259f, + 0x8259: 0x828225a0, 0x825a: 0x838225a1, 0x825b: 0x838225a2, + 0x825c: 0x838225a3, 0x825d: 0xe0002acd, 0x825e: 0x838225a4, 0x825f: 0x828225a1, + 0x8260: 0x828225a2, 0x8261: 0x828225a3, 0x8262: 0xe0002aca, 0x8263: 0x828225a4, + 0x8264: 0x828225a5, 0x8265: 0x828225a6, 0x8266: 0x828225a7, 0x8267: 0xe0002ad0, + 0x8268: 0x828225a8, 0x8269: 0x828225a9, 0x826a: 0x828225aa, 0x826b: 0x828225ab, + 0x826c: 0xe0002ad3, 0x826d: 0x828225ac, 0x826e: 0x828225ad, 0x826f: 0x828225ae, + 0x8270: 0x828225af, 0x8271: 0x828225b0, 0x8272: 0xc5152581, 0x8273: 0xc51e2581, + 0x8274: 0x828225b3, 0x8275: 0x838225b3, 0x8276: 0x828225b4, 0x8277: 0x828225b5, + 0x8278: 0x828225b6, 0x8279: 0xe0002ac4, 0x827a: 0x838225ac, 0x827b: 0x838225b0, + 0x827c: 0x838225b1, 0x827e: 0x40077e20, 0x827f: 0x40078020, + // Block 0x20a, offset 0x8280 + 0x8280: 0xa0000000, 0x8281: 0xa0000000, 0x8282: 0xa0000000, 0x8283: 0xa0000000, + 0x8284: 0xa0000000, 0x8285: 0xa0000000, 0x8286: 0xa0000000, 0x8287: 0xa0000000, + 0x8288: 0xa0000000, 0x8289: 0x40020020, 0x828a: 0x40020220, 0x828b: 0x40020420, + 0x828c: 0x40020620, 0x828d: 0x40020820, 0x828e: 0xa0000000, 0x828f: 0xa0000000, + 0x8290: 0xa0000000, 0x8291: 0xa0000000, 0x8292: 0xa0000000, 0x8293: 0xa0000000, + 0x8294: 0xa0000000, 0x8295: 0xa0000000, 0x8296: 0xa0000000, 0x8297: 0xa0000000, + 0x8298: 0xa0000000, 0x8299: 0xa0000000, 0x829a: 0xa0000000, 0x829b: 0xa0000000, + 0x829c: 0xa0000000, 0x829d: 0xa0000000, 0x829e: 0xa0000000, 0x829f: 0xa0000000, + 0x82a0: 0x40021220, 0x82a1: 0x4002ba20, 0x82a2: 0x4003e020, 0x82a3: 0x4004ea20, + 0x82a4: 0x4027de20, 0x82a5: 0x4004ec20, 0x82a6: 0x4004e620, 0x82a7: 0x4003d220, + 0x82a8: 0x4003f420, 0x82a9: 0x4003f620, 0x82aa: 0x4004d820, 0x82ab: 0x40093820, + 0x82ac: 0x40024020, 0x82ad: 0x40021a20, 0x82ae: 0x4002e420, 0x82af: 0x4004e220, + 0x82b0: 0x4029cc20, 0x82b1: 0x4029ce20, 0x82b2: 0x4029d020, 0x82b3: 0x4029d220, + 0x82b4: 0x4029d420, 0x82b5: 0x4029d620, 0x82b6: 0x4029d820, 0x82b7: 0x4029da20, + 0x82b8: 0x4029dc20, 0x82b9: 0x4029de20, 0x82ba: 0x40026c20, 0x82bb: 0x40026220, + 0x82bc: 0x40094020, 0x82bd: 0x40094220, 0x82be: 0x40094420, 0x82bf: 0x4002c420, + // Block 0x20b, offset 0x82c0 + 0x82c0: 0x4004d620, 0x82c1: 0x002bde88, 0x82c2: 0x002c0a88, 0x82c3: 0x002c3a88, + 0x82c4: 0xc36a2662, 0x82c5: 0x002c9888, 0x82c6: 0x002d0888, 0x82c7: 0xc52b2692, + 0x82c8: 0x002d6888, 0x82c9: 0x002d9a88, 0x82ca: 0x002dcc88, 0x82cb: 0xc53026c2, + 0x82cc: 0xc0030002, 0x82cd: 0x002e8288, 0x82ce: 0xc53526f2, 0x82cf: 0x002ee288, + 0x82d0: 0x002f2c88, 0x82d1: 0x002f5688, 0x82d2: 0x002f7a88, 0x82d3: 0x002fe688, + 0x82d4: 0xc38a2722, 0x82d5: 0x00306c88, 0x82d6: 0x0030be88, 0x82d7: 0x0030e288, + 0x82d8: 0x002d6a83, 0x82d9: 0x00310088, 0x82da: 0x00312a88, 0x82db: 0x4003f820, + 0x82dc: 0x4004e420, 0x82dd: 0x4003fa20, 0x82de: 0x40062420, 0x82df: 0x40021620, + 0x82e0: 0x40061e20, 0x82e1: 0x402bde20, 0x82e2: 0x402c0a20, 0x82e3: 0x402c3a20, + 0x82e4: 0xc3682651, 0x82e5: 0x402c9820, 0x82e6: 0x402d0820, 0x82e7: 0xc3372681, + 0x82e8: 0x402d6820, 0x82e9: 0x402d9a20, 0x82ea: 0x402dcc20, 0x82eb: 0xc52e26b1, + 0x82ec: 0xc0000002, 0x82ed: 0x402e8220, 0x82ee: 0xc53326e1, 0x82ef: 0x402ee220, + 0x82f0: 0x402f2c20, 0x82f1: 0x402f5620, 0x82f2: 0x402f7a20, 0x82f3: 0x402fe620, + 0x82f4: 0xc3882711, 0x82f5: 0x40306c20, 0x82f6: 0x4030be20, 0x82f7: 0x4030e220, + 0x82f8: 0x402d6a20, 0x82f9: 0x40310020, 0x82fa: 0x40312a20, 0x82fb: 0x4003fc20, + 0x82fc: 0x40094820, 0x82fd: 0x4003fe20, 0x82fe: 0x40094c20, 0x82ff: 0xa0000000, + // Block 0x20c, offset 0x8300 + 0x8300: 0xe00008f5, 0x8301: 0xe00008ef, 0x8302: 0xe0002ad9, 0x8303: 0xe0000969, + 0x8304: 0xe000095b, 0x8305: 0xe000094d, 0x8306: 0xe00009dd, 0x8307: 0xe0000a53, + 0x8308: 0xe0000ae8, 0x8309: 0xe0000ae2, 0x830a: 0xe0002b0d, 0x830b: 0xe0000b20, + 0x830c: 0xe0000c2b, 0x830d: 0xe0000c25, 0x830e: 0xe0002b47, 0x830f: 0xe0000c43, + 0x8310: 0xe0000ab3, 0x8311: 0xe0000d63, 0x8312: 0xe0000d9a, 0x8313: 0xe0000d94, + 0x8314: 0xe0002b53, 0x8315: 0xe0000de6, 0x8316: 0xe0000dd2, 0x8317: 0x40093e20, + 0x8318: 0xe0000e12, 0x8319: 0xe0000fe1, 0x831a: 0xe0000fdb, 0x831b: 0xe0002b87, + 0x831c: 0xe0000fff, 0x831d: 0xe0001102, 0x831e: 0x00318888, 0x831f: 0xe0000f7b, + 0x8320: 0xe00008f2, 0x8321: 0xe00008ec, 0x8322: 0xe0002ad6, 0x8323: 0xe0000966, + 0x8324: 0xe0000958, 0x8325: 0xe000094a, 0x8326: 0xe00009d5, 0x8327: 0xe0000a4d, + 0x8328: 0xe0000ae5, 0x8329: 0xe0000adf, 0x832a: 0xe0002b0a, 0x832b: 0xe0000b1d, + 0x832c: 0xe0000c28, 0x832d: 0xe0000c22, 0x832e: 0xe0002b44, 0x832f: 0xe0000c40, + 0x8330: 0xe0000aad, 0x8331: 0xe0000d60, 0x8332: 0xe0000d97, 0x8333: 0xe0000d91, + 0x8334: 0xe0002b50, 0x8335: 0xe0000de3, 0x8336: 0xe0000dcf, 0x8337: 0x40093c20, + 0x8338: 0xe0000e0f, 0x8339: 0xe0000fde, 0x833a: 0xe0000fd8, 0x833b: 0xe0002b84, + 0x833c: 0xe0000ffc, 0x833d: 0xe00010ff, 0x833e: 0x40318820, 0x833f: 0xe0001114, + // Block 0x20d, offset 0x8340 + 0x8340: 0xe0000983, 0x8341: 0xe0000980, 0x8342: 0xe00008fb, 0x8343: 0xe00008f8, + 0x8344: 0xe000097d, 0x8345: 0xe000097a, 0x8346: 0xe0000a38, 0x8347: 0xe0000a35, + 0x8348: 0xe0002b07, 0x8349: 0xe0002b04, 0x834a: 0xe0000a4a, 0x834b: 0xe0000a47, + 0x834c: 0xe0000a44, 0x834d: 0xe0000a41, 0x834e: 0xe0000a86, 0x834f: 0xe0000a83, + 0x8350: 0xe0000aaa, 0x8351: 0xe0000aa7, 0x8352: 0xe0000b46, 0x8353: 0xe0000b43, + 0x8354: 0xe0000aee, 0x8355: 0xe0000aeb, 0x8356: 0xe0000b2c, 0x8357: 0xe0000b29, + 0x8358: 0xe0000b40, 0x8359: 0xe0000b3d, 0x835a: 0xe0000b1a, 0x835b: 0xe0000b17, + 0x835c: 0xe0002b3b, 0x835d: 0xe0002b38, 0x835e: 0xe0000bb2, 0x835f: 0xe0000baf, + 0x8360: 0xe0000bc4, 0x8361: 0xe0000bc1, 0x8362: 0xe0000bca, 0x8363: 0xe0000bc7, + 0x8364: 0xe0002b41, 0x8365: 0xe0002b3e, 0x8366: 0xe0000c1b, 0x8367: 0xe0000c18, + 0x8368: 0xe0000c51, 0x8369: 0xe0000c4e, 0x836a: 0xe0000c60, 0x836b: 0xe0000c5d, + 0x836c: 0xe0000c31, 0x836d: 0xe0000c2e, 0x836e: 0xe0000c5a, 0x836f: 0xe0000c57, + 0x8370: 0xe0000c54, 0x8371: 0x402da220, 0x8372: 0xf0000a0a, 0x8373: 0xf0000404, + 0x8374: 0xe0002b4d, 0x8375: 0xe0002b4a, 0x8376: 0xe0000c9f, 0x8377: 0xe0000c9c, + 0x8378: 0x402f7220, 0x8379: 0xe0000ccc, 0x837a: 0xe0000cc9, 0x837b: 0xe0000cd8, + 0x837c: 0xe0000cd5, 0x837d: 0xe0000cd2, 0x837e: 0xe0000ccf, 0x837f: 0xe0000d04, + // Block 0x20e, offset 0x8380 + 0x8380: 0xe0000cfe, 0x8381: 0xe0000cf8, 0x8382: 0xe0000cf5, 0x8383: 0xe0000d51, + 0x8384: 0xe0000d4e, 0x8385: 0xe0000d6f, 0x8386: 0xe0000d6c, 0x8387: 0xe0000d5d, + 0x8388: 0xe0000d5a, 0x8389: 0xf0000404, 0x838a: 0x002ea283, 0x838b: 0x402ea220, + 0x838c: 0xe0000e2e, 0x838d: 0xe0000e2b, 0x838e: 0xe0000da0, 0x838f: 0xe0000d9d, + 0x8390: 0xe0000de0, 0x8391: 0xe0000ddd, 0x8392: 0xe0000e93, 0x8393: 0xe0000e8f, + 0x8394: 0xe0000eca, 0x8395: 0xe0000ec7, 0x8396: 0xe0000edc, 0x8397: 0xe0000ed9, + 0x8398: 0xe0000ed0, 0x8399: 0xe0000ecd, 0x839a: 0xe0000f1f, 0x839b: 0xe0000f1c, + 0x839c: 0xe0002b81, 0x839d: 0xe0002b7e, 0x839e: 0xe0000f47, 0x839f: 0xe0000f44, + 0x83a0: 0xe0000f33, 0x83a1: 0xe0000f30, 0x83a2: 0xe0000f99, 0x83a3: 0xe0000f96, + 0x83a4: 0xe0000f8a, 0x83a5: 0xe0000f87, 0x83a6: 0x00303688, 0x83a7: 0x40303620, + 0x83a8: 0xe000102b, 0x83a9: 0xe0001028, 0x83aa: 0xe000103f, 0x83ab: 0xe000103c, + 0x83ac: 0xe0000fe7, 0x83ad: 0xe0000fe4, 0x83ae: 0xe0000ff9, 0x83af: 0xe0000ff6, + 0x83b0: 0xe0001025, 0x83b1: 0xe0001022, 0x83b2: 0xe0001039, 0x83b3: 0xe0001036, + 0x83b4: 0xe0002b8d, 0x83b5: 0xe0002b8a, 0x83b6: 0xe0002b93, 0x83b7: 0xe0002b90, + 0x83b8: 0xe0001117, 0x83b9: 0xe000113b, 0x83ba: 0xe0001138, 0x83bb: 0xe000114d, + 0x83bc: 0xe000114a, 0x83bd: 0xe0001147, 0x83be: 0xe0001144, 0x83bf: 0xe0000f64, + // Block 0x20f, offset 0x83c0 + 0x83c0: 0x402c1a20, 0x83c1: 0x002c2a88, 0x83c2: 0x002c3288, 0x83c3: 0x402c3220, + 0x83c4: 0x0031c488, 0x83c5: 0x4031c420, 0x83c6: 0x002ee483, 0x83c7: 0x002c4e88, + 0x83c8: 0x402c4e20, 0x83c9: 0x002c6683, 0x83ca: 0x002c7a88, 0x83cb: 0x002c8488, + 0x83cc: 0x402c8420, 0x83cd: 0xe000115c, 0x83ce: 0x002cae88, 0x83cf: 0x002cb888, + 0x83d0: 0x002c9a83, 0x83d1: 0x002d0a83, 0x83d2: 0x402d0a20, 0x83d3: 0x002d4488, + 0x83d4: 0x002d2683, 0x83d5: 0x402d7820, 0x83d6: 0x002dc288, 0x83d7: 0x002db688, + 0x83d8: 0x002e0a88, 0x83d9: 0x402e0a20, 0x83da: 0x402e3820, 0x83db: 0x402e7220, + 0x83dc: 0x0030a088, 0x83dd: 0x002eb488, 0x83de: 0x402ebc20, 0x83df: 0x002f1088, + 0x83e0: 0xe0000e56, 0x83e1: 0xe0000e53, 0x83e2: 0x002d6088, 0x83e3: 0x402d6020, + 0x83e4: 0x002f3e88, 0x83e5: 0x402f3e20, 0x83e6: 0x002f8288, 0x83e7: 0x0031b488, + 0x83e8: 0x4031b420, 0x83e9: 0x00300888, 0x83ea: 0x40301220, 0x83eb: 0x40304220, + 0x83ec: 0x00304a88, 0x83ed: 0x40304a20, 0x83ee: 0x00305288, 0x83ef: 0xe000105f, + 0x83f0: 0xe000105c, 0x83f1: 0x0030b488, 0x83f2: 0x0030c083, 0x83f3: 0x00311888, + 0x83f4: 0x40311820, 0x83f5: 0x00313488, 0x83f6: 0x40313420, 0x83f7: 0x00316488, + 0x83f8: 0x00316e88, 0x83f9: 0x40316e20, 0x83fa: 0x40317820, 0x83fb: 0x4031a620, + 0x83fc: 0x0031bc88, 0x83fd: 0x4031bc20, 0x83fe: 0xe0000fc9, 0x83ff: 0x40319420, + // Block 0x210, offset 0x8400 + 0x8400: 0x40315820, 0x8401: 0x0031d488, 0x8402: 0x4031d420, 0x8403: 0x002c1a88, + 0x8404: 0x00307c88, 0x8405: 0x0030da88, 0x8406: 0x002ca288, 0x8407: 0x402ca220, + 0x8408: 0x002dde88, 0x8409: 0x402dde20, 0x840a: 0x002f6a88, 0x840b: 0x402f6a20, + 0x840c: 0x002f8e88, 0x840d: 0x402f8e20, 0x840e: 0x00311088, 0x840f: 0x40311020, + 0x8410: 0x402bf020, 0x8411: 0x402bf820, 0x8412: 0x402c0220, 0x8413: 0x402c2a20, + 0x8414: 0x402ee420, 0x8415: 0x402c5620, 0x8416: 0x402c6620, 0x8417: 0x402c7a20, + 0x8418: 0x402ccc20, 0x8419: 0x402cb820, 0x841a: 0x402cd420, 0x841b: 0x402c9a20, + 0x841c: 0x402cdc20, 0x841d: 0x402ce820, 0x841e: 0x402cf020, 0x841f: 0x402dee20, + 0x8420: 0x402d4420, 0x8421: 0x402d2a20, 0x8422: 0x402d3220, 0x8423: 0x402d2620, + 0x8424: 0x402d0020, 0x8425: 0x40308820, 0x8426: 0x402d8020, 0x8427: 0x402d8e20, + 0x8428: 0x402db620, 0x8429: 0x402dc220, 0x842a: 0x402daa20, 0x842b: 0x402e4220, + 0x842c: 0x402e4a20, 0x842d: 0x402e5420, 0x842e: 0x402e6820, 0x842f: 0x4030a020, + 0x8430: 0x4030ac20, 0x8431: 0x402e9020, 0x8432: 0x402eb420, 0x8433: 0x402ec820, + 0x8434: 0x402ea620, 0x8435: 0x402f1020, 0x8436: 0x402eee20, 0x8437: 0x402f1a20, + 0x8438: 0x402f4c20, 0x8439: 0x402f9820, 0x843a: 0x402fa220, 0x843b: 0x402fac20, + 0x843c: 0x402fb620, 0x843d: 0x402fbe20, 0x843e: 0x402fc620, 0x843f: 0x402fd020, + // Block 0x211, offset 0x8440 + 0x8440: 0x402f8220, 0x8441: 0x402fd820, 0x8442: 0x402ff420, 0x8443: 0x40300820, + 0x8444: 0x402df620, 0x8445: 0x40301a20, 0x8446: 0x40302420, 0x8447: 0x40306420, + 0x8448: 0x40305220, 0x8449: 0x40307c20, 0x844a: 0x4030b420, 0x844b: 0x4030c020, + 0x844c: 0x4030da20, 0x844d: 0x4030ee20, 0x844e: 0x402e7a20, 0x844f: 0x40310820, + 0x8450: 0x40314820, 0x8451: 0x40315020, 0x8452: 0x40316420, 0x8453: 0x40318020, + 0x8454: 0x4031cc20, 0x8455: 0x4031e820, 0x8456: 0x40320a20, 0x8457: 0x40323220, + 0x8458: 0x40323a20, 0x8459: 0x402c1220, 0x845a: 0x402cf820, 0x845b: 0x402d4c20, + 0x845c: 0x402d7020, 0x845d: 0x402de620, 0x845e: 0x402e1a20, 0x845f: 0x402e2a20, + 0x8460: 0x402f6220, 0x8461: 0x4031fa20, 0x8462: 0x40320220, 0x8463: 0xe0000aca, + 0x8464: 0xe0000adc, 0x8465: 0xe0000ad9, 0x8466: 0xe0000fcc, 0x8467: 0xe0000fcf, + 0x8468: 0xe0000fba, 0x8469: 0xe0000ba1, 0x846a: 0xe0000d11, 0x846b: 0xe0000d18, + 0x846c: 0x40324220, 0x846d: 0x40324a20, 0x846e: 0x40309020, 0x846f: 0x40309820, + 0x8470: 0x002d6894, 0x8471: 0x002d8094, 0x8472: 0x002dcc94, 0x8473: 0x002f7a94, + 0x8474: 0x002f9894, 0x8475: 0x002fac94, 0x8476: 0x002fd894, 0x8477: 0x0030e294, + 0x8478: 0x00310094, 0x8479: 0x40064020, 0x847a: 0x40064420, 0x847b: 0x402d9620, + 0x847c: 0x4031de20, 0x847d: 0x402d9820, 0x847e: 0x4031e220, 0x847f: 0x4031f020, + // Block 0x212, offset 0x8480 + 0x8480: 0xae603502, 0x8481: 0xae603202, 0x8482: 0xae604202, 0x8483: 0xae604e02, + 0x8484: 0xae605b02, 0x8485: 0xae606302, 0x8486: 0xae603702, 0x8487: 0xae605202, + 0x8488: 0xae604702, 0x8489: 0xae606402, 0x848a: 0xae604302, 0x848b: 0xae604d02, + 0x848c: 0xae604102, 0x848d: 0xae605f02, 0x848e: 0xae605f02, 0x848f: 0xae606502, + 0x8490: 0xae606602, 0x8491: 0xae606702, 0x8492: 0xae605f02, 0x8493: 0xae602202, + 0x8494: 0xae602a02, 0x8495: 0xae805f02, 0x8496: 0xadc06002, 0x8497: 0xadc06002, + 0x8498: 0xadc06002, 0x8499: 0xadc06002, 0x849a: 0xae805f02, 0x849b: 0xad806802, + 0x849c: 0xadc06002, 0x849d: 0xadc06002, 0x849e: 0xadc06002, 0x849f: 0xadc06002, + 0x84a0: 0xadc06002, 0x84a1: 0xaca06e02, 0x84a2: 0xaca06f02, 0x84a3: 0xadc07002, + 0x84a4: 0xadc07502, 0x84a5: 0xadc07602, 0x84a6: 0xadc07702, 0x84a7: 0xaca05602, + 0x84a8: 0xaca05902, 0x84a9: 0xadc06002, 0x84aa: 0xadc06002, 0x84ab: 0xadc06002, + 0x84ac: 0xadc06002, 0x84ad: 0xadc07802, 0x84ae: 0xadc07902, 0x84af: 0xadc06002, + 0x84b0: 0xadc07a02, 0x84b1: 0xadc07b02, 0x84b2: 0xadc02102, 0x84b3: 0xadc06002, + 0x84b4: 0xa0107c02, 0x84b5: 0xa0107d02, 0x84b6: 0xa0106102, 0x84b7: 0xa0106102, + 0x84b8: 0xa0105402, 0x84b9: 0xadc07e02, 0x84ba: 0xadc06002, 0x84bb: 0xadc06002, + 0x84bc: 0xadc06002, 0x84bd: 0xae605f02, 0x84be: 0xae605f02, 0x84bf: 0xae605f02, + // Block 0x213, offset 0x84c0 + 0x84c0: 0xe00010d2, 0x84c1: 0xe00010cf, 0x84c2: 0xe00010cc, 0x84c3: 0xe00010c9, + 0x84c4: 0xe00010e1, 0x84c5: 0xe00010de, 0x84c6: 0xe00010e7, 0x84c7: 0xe00010e4, + 0x84c8: 0xe00010ed, 0x84c9: 0xe00010ea, 0x84ca: 0xe0002912, 0x84cb: 0xe000290f, + 0x84cc: 0xe000290c, 0x84cd: 0xe0002909, 0x84ce: 0xe0001123, 0x84cf: 0xe0001120, + 0x84d0: 0xe0002b99, 0x84d1: 0xe0002b96, 0x84d2: 0xe0001153, 0x84d3: 0xe0001150, + 0x84d4: 0xe0001159, 0x84d5: 0xe0001156, 0x84d6: 0xe0000c15, 0x84d7: 0xe0000f8d, + 0x84d8: 0xe00010db, 0x84d9: 0xe0001111, 0x84da: 0xf0000404, 0x84db: 0xe0000f70, + 0x84dc: 0x40300420, 0x84dd: 0x40300620, 0x84de: 0xe0000f7f, 0x84df: 0x402c9620, + 0x84e0: 0xe000099b, 0x84e1: 0xe0000998, 0x84e2: 0xe0000989, 0x84e3: 0xe0000986, + 0x84e4: 0xe0002ae0, 0x84e5: 0xe0002adc, 0x84e6: 0xe0002ae8, 0x84e7: 0xe0002ae4, + 0x84e8: 0xe0002af8, 0x84e9: 0xe0002af4, 0x84ea: 0xe0002af0, 0x84eb: 0xe0002aec, + 0x84ec: 0xe0002b00, 0x84ed: 0xe0002afc, 0x84ee: 0xe0000902, 0x84ef: 0xe00008fe, + 0x84f0: 0xe000090a, 0x84f1: 0xe0000906, 0x84f2: 0xe000091a, 0x84f3: 0xe0000916, + 0x84f4: 0xe0000912, 0x84f5: 0xe000090e, 0x84f6: 0xe00009a2, 0x84f7: 0xe000099e, + 0x84f8: 0xe0000b6e, 0x84f9: 0xe0000b6b, 0x84fa: 0xe0000b5c, 0x84fb: 0xe0000b59, + 0x84fc: 0xe0000b26, 0x84fd: 0xe0000b23, 0x84fe: 0xe0002b14, 0x84ff: 0xe0002b10, + // Block 0x214, offset 0x8500 + 0x8500: 0xe0002b1c, 0x8501: 0xe0002b18, 0x8502: 0xe0002b2c, 0x8503: 0xe0002b28, + 0x8504: 0xe0002b24, 0x8505: 0xe0002b20, 0x8506: 0xe0002b34, 0x8507: 0xe0002b30, + 0x8508: 0xe0000c66, 0x8509: 0xe0000c63, 0x850a: 0xe0000c78, 0x850b: 0xe0000c75, + 0x850c: 0xe0000e84, 0x850d: 0xe0000e81, 0x850e: 0xe0000e44, 0x850f: 0xe0000e41, + 0x8510: 0xe0002b5a, 0x8511: 0xe0002b56, 0x8512: 0xe0002b62, 0x8513: 0xe0002b5e, + 0x8514: 0xe0002b72, 0x8515: 0xe0002b6e, 0x8516: 0xe0002b6a, 0x8517: 0xe0002b66, + 0x8518: 0xe0002b7a, 0x8519: 0xe0002b76, 0x851a: 0xe0000e5d, 0x851b: 0xe0000e59, + 0x851c: 0xe0000e65, 0x851d: 0xe0000e61, 0x851e: 0xe0000e75, 0x851f: 0xe0000e71, + 0x8520: 0xe0000e6d, 0x8521: 0xe0000e69, 0x8522: 0xe0000e7d, 0x8523: 0xe0000e79, + 0x8524: 0xe000108d, 0x8525: 0xe000108a, 0x8526: 0xe000104d, 0x8527: 0xe000104a, + 0x8528: 0xe0001066, 0x8529: 0xe0001062, 0x852a: 0xe000106e, 0x852b: 0xe000106a, + 0x852c: 0xe000107e, 0x852d: 0xe000107a, 0x852e: 0xe0001076, 0x852f: 0xe0001072, + 0x8530: 0xe0001086, 0x8531: 0xe0001082, 0x8532: 0xe0001108, 0x8533: 0xe0001105, + 0x8534: 0xe0001135, 0x8535: 0xe0001132, 0x8536: 0xe000112f, 0x8537: 0xe000112c, + 0x8538: 0xe000111d, 0x8539: 0xe000111a, 0x853a: 0xe0000d0a, 0x853b: 0xe0000d07, + 0x853c: 0x0030d888, 0x853d: 0x4030d820, 0x853e: 0x00312088, 0x853f: 0x40312020, + // Block 0x215, offset 0x8540 + 0x8540: 0x00093685, 0x8541: 0x40083620, 0x8542: 0x40083820, 0x8543: 0x40083a20, + 0x8544: 0x40083c20, 0x8545: 0x002c628b, 0x8546: 0x002c6285, 0x8547: 0x002c9885, + 0x8548: 0x002d9a85, 0x8549: 0x002dcc85, 0x854a: 0x40083e20, 0x854b: 0x400a6e20, + 0x854c: 0x40084020, 0x854d: 0xe00009c4, 0x854e: 0x402d1e20, 0x854f: 0x40084220, + 0x8550: 0xe00002cb, 0x8551: 0xe00002d3, 0x8552: 0xe00002b2, 0x8553: 0xe00002bb, + 0x8554: 0xe00003cd, 0x8555: 0xe00002c3, 0x8556: 0xe00003d1, 0x8557: 0xe00004ab, + 0x8558: 0xe0000579, 0x8559: 0xe00002c7, 0x855a: 0xe0000640, 0x855b: 0xe00002cf, + 0x855c: 0xe00004af, 0x855d: 0xe0000644, 0x855e: 0xe0000798, 0x855f: 0xf0001e1e, + 0x8560: 0x002d9a8a, 0x8561: 0xf0001f0a, 0x8562: 0xf0000a0a, 0x8563: 0xf0001f0a, + 0x8564: 0x0030be8a, 0x8565: 0xf0001f0a, 0x8566: 0xf0000a0a, 0x8567: 0xe00010bb, + 0x8568: 0xe00027f4, 0x8569: 0x0030f68a, 0x856a: 0xe0002883, 0x856b: 0xe000288a, + 0x856c: 0x002e228a, 0x856d: 0x002c3a8a, 0x856e: 0x002c628a, 0x856f: 0x002e828a, + 0x8570: 0x002d9a84, 0x8571: 0xf0001f04, 0x8572: 0xf0000404, 0x8573: 0xf0001f04, + 0x8574: 0x0030be84, 0x8575: 0xf0001f04, 0x8576: 0xf0000404, 0x8577: 0xe00010b6, + 0x8578: 0xe00027f1, 0x8579: 0x0030f684, 0x857a: 0xe0002880, 0x857b: 0xe0002886, + 0x857c: 0x002e2284, 0x857d: 0x002c3a84, 0x857e: 0x002c6284, 0x857f: 0x002e8284, + // Block 0x216, offset 0x8580 + 0x8580: 0xe0000024, 0x8581: 0xe0000029, 0x8582: 0xe000002e, 0x8583: 0xe0000033, + 0x8584: 0xe0000038, 0x8585: 0xe000003d, 0x8586: 0xe0000042, 0x8587: 0xe0000047, + 0x8588: 0xf0001f04, 0x8589: 0xf0001f04, 0x858a: 0xf0001f04, 0x858b: 0xf0001f04, + 0x858c: 0xf0001f04, 0x858d: 0xf0001f04, 0x858e: 0xf0001f04, 0x858f: 0xf0001f04, + 0x8590: 0xf0001f04, 0x8591: 0xf0000404, 0x8592: 0xf0000404, 0x8593: 0xf0000404, + 0x8594: 0xf0000404, 0x8595: 0xf0000404, 0x8596: 0xf0000404, 0x8597: 0xf0000404, + 0x8598: 0xf0000404, 0x8599: 0xf0000404, 0x859a: 0xf0000404, 0x859b: 0xf0000404, + 0x859c: 0xf0000404, 0x859d: 0xf0000404, 0x859e: 0xf0000404, 0x859f: 0xf0000404, + 0x85a0: 0xf0000404, 0x85a1: 0xf0000404, 0x85a2: 0xf0000404, 0x85a3: 0xf0000404, + 0x85a4: 0xf0000404, 0x85a5: 0xf0000404, 0x85a6: 0xf0000404, 0x85a7: 0xf0000404, + 0x85a8: 0xf0000404, 0x85a9: 0xf0000404, 0x85aa: 0xf0000404, 0x85ab: 0xf0000404, + 0x85ac: 0xf0000404, 0x85ad: 0xf0000404, 0x85ae: 0xf0000404, 0x85af: 0xf0000404, + 0x85b0: 0xf0000404, 0x85b1: 0xf0000404, 0x85b2: 0xf0000404, 0x85b3: 0xe00024e7, + 0x85b4: 0xf0000404, 0x85b5: 0xf0000404, 0x85b6: 0x002bde8c, 0x85b7: 0x002c0a8c, + 0x85b8: 0x002c3a8c, 0x85b9: 0x002c628c, 0x85ba: 0x002c988c, 0x85bb: 0x002d088c, + 0x85bc: 0x002d228c, 0x85bd: 0x002d688c, 0x85be: 0x002d9a8c, 0x85bf: 0x002dcc8c, + // Block 0x217, offset 0x85c0 + 0x85c0: 0xf0001d1c, 0x85c1: 0xf0001d1d, 0x85c2: 0xe00009b7, 0x85c3: 0xf0001c1d, + 0x85c4: 0xf0001c1c, 0x85c5: 0xf0001c1c, 0x85c6: 0xe0000a66, 0x85c7: 0xe0000a7a, + 0x85c8: 0xf0001d1c, 0x85c9: 0xf0001c1d, 0x85ca: 0xf0001c1c, 0x85cb: 0xf0001d1d, + 0x85cc: 0xf0001c1c, 0x85cd: 0xf0001d1d, 0x85ce: 0xf0001d1d, 0x85cf: 0xf0001c1c, + 0x85d0: 0xf0001c1c, 0x85d1: 0xf0001c1c, 0x85d2: 0xe0000d0d, 0x85d3: 0xe0002818, + 0x85d4: 0xf0001c1c, 0x85d5: 0xe0000d3a, 0x85d6: 0xe0000d46, 0x85d7: 0xf0001d1d, + 0x85d8: 0xe0000eb0, 0x85d9: 0xe0000eb8, 0x85da: 0xf0001d1d, 0x85db: 0xf0001c1c, + 0x85dc: 0xf0001c1d, 0x85dd: 0xf0001c1d, 0x85de: 0xe00010b2, 0x85df: 0xe00009c8, + 0x85e0: 0xf0001f04, 0x85e1: 0xf0001f04, 0x85e2: 0xf0001f04, 0x85e3: 0xf0001f04, + 0x85e4: 0xf0001f04, 0x85e5: 0xf0001f04, 0x85e6: 0xf0001f04, 0x85e7: 0xf0001f04, + 0x85e8: 0xf0001f04, 0x85e9: 0xf0000404, 0x85ea: 0xf0000404, 0x85eb: 0xf0000404, + 0x85ec: 0xf0000404, 0x85ed: 0xf0000404, 0x85ee: 0xf0000404, 0x85ef: 0xf0000404, + 0x85f0: 0xf0000404, 0x85f1: 0xf0000404, 0x85f2: 0xf0000404, 0x85f3: 0xf0000404, + 0x85f4: 0xf0000404, 0x85f5: 0xf0000404, 0x85f6: 0xf0000404, 0x85f7: 0xf0000404, + 0x85f8: 0xf0000404, 0x85f9: 0xf0000404, 0x85fa: 0xf0000404, 0x85fb: 0xf0000404, + 0x85fc: 0xf0000404, 0x85fd: 0xf0000404, 0x85fe: 0xf0000404, 0x85ff: 0xe0000bdf, + // Block 0x218, offset 0x8600 + 0x8600: 0xf0001f04, 0x8601: 0xf0001f04, 0x8602: 0xf0001f04, 0x8603: 0xf0001f04, + 0x8604: 0xf0001f04, 0x8605: 0xf0001f04, 0x8606: 0xf0001f04, 0x8607: 0xf0001f04, + 0x8608: 0xf0001f04, 0x8609: 0xf0001f04, 0x860a: 0xf0001f04, + 0x8610: 0xf0000a04, 0x8611: 0xf0000a04, 0x8612: 0xf0000a04, 0x8613: 0xf0000a04, + 0x8614: 0xf0000a04, 0x8615: 0xf0000a04, 0x8616: 0xf0000a04, 0x8617: 0xf0000a04, + 0x8618: 0xf0000a04, 0x8619: 0xf0000a04, 0x861a: 0xf0000a04, 0x861b: 0xf0000a04, + 0x861c: 0xf0000a04, 0x861d: 0xf0000a04, 0x861e: 0xf0000a04, 0x861f: 0xf0000a04, + 0x8620: 0xf0000a04, 0x8621: 0xf0000a04, 0x8622: 0xf0000a04, 0x8623: 0xf0000a04, + 0x8624: 0xf0000a04, 0x8625: 0xf0000a04, 0x8626: 0xf0000a04, 0x8627: 0xe00024eb, + 0x8628: 0xf0000a04, 0x8629: 0xf0000a04, 0x862a: 0xf0000a04, 0x862b: 0x002c3a8c, + 0x862c: 0x002f7a8c, 0x862d: 0xf0000c0c, 0x862e: 0xf0000c0c, + 0x8630: 0x002bde9d, 0x8631: 0x002c0a9d, 0x8632: 0x002c3a9d, 0x8633: 0x002c629d, + 0x8634: 0x002c989d, 0x8635: 0x002d089d, 0x8636: 0x002d229d, 0x8637: 0x002d689d, + 0x8638: 0x002d9a9d, 0x8639: 0x002dcc9d, 0x863a: 0x002dfe9d, 0x863b: 0x002e229d, + 0x863c: 0x002e829d, 0x863d: 0x002e9e9d, 0x863e: 0x002ee29d, 0x863f: 0x002f2c9d, + // Block 0x219, offset 0x8640 + 0x8640: 0xa0000000, 0x8641: 0xa0000000, 0x8642: 0xa0000000, 0x8643: 0xa0000000, + 0x8644: 0xa0000000, 0x8645: 0xa0000000, 0x8646: 0xa0000000, 0x8647: 0xa0000000, + 0x8648: 0xa0000000, 0x8649: 0x40020020, 0x864a: 0x40020220, 0x864b: 0x40020420, + 0x864c: 0x40020620, 0x864d: 0x40020820, 0x864e: 0xa0000000, 0x864f: 0xa0000000, + 0x8650: 0xa0000000, 0x8651: 0xa0000000, 0x8652: 0xa0000000, 0x8653: 0xa0000000, + 0x8654: 0xa0000000, 0x8655: 0xa0000000, 0x8656: 0xa0000000, 0x8657: 0xa0000000, + 0x8658: 0xa0000000, 0x8659: 0xa0000000, 0x865a: 0xa0000000, 0x865b: 0xa0000000, + 0x865c: 0xa0000000, 0x865d: 0xa0000000, 0x865e: 0xa0000000, 0x865f: 0xa0000000, + 0x8660: 0x402be020, 0x8661: 0x402be220, 0x8662: 0x402be420, 0x8663: 0x402be620, + 0x8664: 0x402be820, 0x8665: 0x402bea20, 0x8666: 0x402bec20, 0x8667: 0x402bee20, + 0x8668: 0x402bf020, 0x8669: 0x402bf220, 0x866a: 0x402bf420, 0x866b: 0x402bf620, + 0x866c: 0x402bf820, 0x866d: 0x402bfa20, 0x866e: 0x402bfc20, 0x866f: 0x402bfe20, + 0x8670: 0x402c0020, 0x8671: 0x402c0220, 0x8672: 0x402c0420, 0x8673: 0x402c0620, + 0x8674: 0x402c0820, 0x8675: 0x402c0a20, 0x8676: 0x402c0c20, 0x8677: 0x402c0e20, + 0x8678: 0x402c1020, 0x8679: 0x402c1220, 0x867a: 0x402c1420, 0x867b: 0x402c1620, + 0x867c: 0x402c1820, 0x867d: 0x402c1a20, 0x867e: 0x402c1c20, 0x867f: 0x402c1e20, + // Block 0x21a, offset 0x8680 + 0x8680: 0x402c2020, 0x8681: 0x402c2220, 0x8682: 0x402c2420, 0x8683: 0x402c2620, + 0x8684: 0x402c2820, 0x8685: 0x402c2a20, 0x8686: 0x402c2c20, 0x8687: 0x402c2e20, + 0x8688: 0x402c3020, 0x8689: 0x402c3220, 0x868a: 0x402c3420, 0x868b: 0x402c3620, + 0x868c: 0xc53b0002, 0x868d: 0x402c3a20, 0x868e: 0x402c3c20, 0x868f: 0x402c3e20, + 0x8690: 0x402c4020, 0x8691: 0x402c4220, 0x8692: 0x402c4420, 0x8693: 0x402c4620, + 0x8694: 0x402c4820, 0x8695: 0x402c4a20, 0x8696: 0x402c4c20, 0x8697: 0x402c4e20, + 0x8698: 0x402c5020, 0x8699: 0x402c5220, 0x869a: 0x402c5420, 0x869b: 0x402c5620, + 0x869c: 0x402c5820, 0x869d: 0x402c5a20, 0x869e: 0x402c5c20, 0x869f: 0x402c5e20, + 0x86a0: 0x402c6020, 0x86a1: 0x402c6220, 0x86a2: 0x402c6420, 0x86a3: 0x402c6620, + 0x86a4: 0x402c6820, 0x86a5: 0x402c6a20, 0x86a6: 0x402c6c20, 0x86a7: 0x402c6e20, + 0x86a8: 0x402c7020, 0x86a9: 0x402c7220, 0x86aa: 0x402c7420, 0x86ab: 0x402c7620, + 0x86ac: 0xc5380002, 0x86ad: 0x402c7a20, 0x86ae: 0x402c7c20, 0x86af: 0x402c7e20, + 0x86b0: 0x402c8020, 0x86b1: 0x402c8220, 0x86b2: 0x402c8420, 0x86b3: 0x402c8620, + 0x86b4: 0x402c8820, 0x86b5: 0x402c8a20, 0x86b6: 0x402c8c20, 0x86b7: 0x402c8e20, + 0x86b8: 0x402c9020, 0x86b9: 0x402c9220, 0x86ba: 0x402c9420, 0x86bb: 0x402c9620, + 0x86bc: 0x402c9820, 0x86bd: 0x402c9a20, 0x86be: 0x402c9c20, 0x86bf: 0x402c9e20, + // Block 0x21b, offset 0x86c0 + 0x86c0: 0xe0002f1f, 0x86c1: 0xe0002f1c, 0x86c2: 0xe0002f35, 0x86c3: 0xe0002f59, + 0x86c4: 0xe0002f52, 0x86c5: 0xe0002f4b, 0x86c6: 0xe00009dd, 0x86c7: 0xe0002f95, + 0x86c8: 0xe0002fb1, 0x86c9: 0xe0002fae, 0x86ca: 0xe0002fb7, 0x86cb: 0xe0002fcd, + 0x86cc: 0xe0003031, 0x86cd: 0xe000302e, 0x86ce: 0xe0003037, 0x86cf: 0xe000303d, + 0x86d0: 0xe0000ab3, 0x86d1: 0xe00030a5, 0x86d2: 0xe00030ba, 0x86d3: 0xe00030b7, + 0x86d4: 0xe00030c0, 0x86d5: 0xe00030e0, 0x86d6: 0xe00030d6, 0x86d7: 0x40093e20, + 0x86d8: 0xe0000e12, 0x86d9: 0xe000318a, 0x86da: 0xe0003187, 0x86db: 0xe0003190, + 0x86dc: 0xe0003199, 0x86dd: 0xe000320a, 0x86de: 0x00318888, 0x86df: 0xe0000f7b, + 0x86e0: 0xe000323a, 0x86e1: 0xe0003237, 0x86e2: 0xe0003250, 0x86e3: 0xe0003274, + 0x86e4: 0xe000326d, 0x86e5: 0xe0003266, 0x86e6: 0xe00009d5, 0x86e7: 0xe00032c8, + 0x86e8: 0xe00032e4, 0x86e9: 0xe00032e1, 0x86ea: 0xe00032ea, 0x86eb: 0xe0003300, + 0x86ec: 0xe0003367, 0x86ed: 0xe0003364, 0x86ee: 0xe000336d, 0x86ef: 0xe0003373, + 0x86f0: 0xe0000aad, 0x86f1: 0xe00033cf, 0x86f2: 0xe00033e4, 0x86f3: 0xe00033e1, + 0x86f4: 0xe00033ea, 0x86f5: 0xe000340a, 0x86f6: 0xe0003400, 0x86f7: 0x40093c20, + 0x86f8: 0xe0000e0f, 0x86f9: 0xe00034b7, 0x86fa: 0xe00034b4, 0x86fb: 0xe00034bd, + 0x86fc: 0xe00034c6, 0x86fd: 0xe000353a, 0x86fe: 0x40318820, 0x86ff: 0xe0003546, + // Block 0x21c, offset 0x8700 + 0x8700: 0xe0002f66, 0x8701: 0xe0003281, 0x8702: 0xe0002f22, 0x8703: 0xe000323d, + 0x8704: 0xe0002f63, 0x8705: 0xe000327e, 0x8706: 0xe0002f89, 0x8707: 0xe00032bc, + 0x8708: 0xe0002f8c, 0x8709: 0xe00032bf, 0x870a: 0xe0002f92, 0x870b: 0xe00032c5, + 0x870c: 0xe0002f8f, 0x870d: 0xe00032c2, 0x870e: 0xe0002f9c, 0x870f: 0xe00032cf, + 0x8710: 0xe0000aaa, 0x8711: 0xe0000aa7, 0x8712: 0xe0002fe0, 0x8713: 0xe0003313, + 0x8714: 0xe0002fb4, 0x8715: 0xe00032e7, 0x8716: 0xe0002fd3, 0x8717: 0xe0003306, + 0x8718: 0xe0002fdd, 0x8719: 0xe0003310, 0x871a: 0xe0002fca, 0x871b: 0xe00032fd, + 0x871c: 0xe000300a, 0x871d: 0xe000333d, 0x871e: 0xe0003007, 0x871f: 0xe000333a, + 0x8720: 0xe0003010, 0x8721: 0xe0003343, 0x8722: 0xe0003013, 0x8723: 0xe0003346, + 0x8724: 0xe0003019, 0x8725: 0xe000334c, 0x8726: 0xe0000c1b, 0x8727: 0xe0000c18, + 0x8728: 0xe0003044, 0x8729: 0xe000337a, 0x872a: 0xe000304d, 0x872b: 0xe0003380, + 0x872c: 0xe0003034, 0x872d: 0xe000336a, 0x872e: 0xe000304a, 0x872f: 0xe000337d, + 0x8730: 0xe0003047, 0x8731: 0x402da220, 0x8732: 0xe00027e2, 0x8733: 0xe00027df, + 0x8734: 0xe000305f, 0x8735: 0xe0003392, 0x8736: 0xe0003068, 0x8737: 0xe000339e, + 0x8738: 0x402f7220, 0x8739: 0xe0003071, 0x873a: 0xe00033a7, 0x873b: 0xe0003077, + 0x873c: 0xe00033ad, 0x873d: 0xe0003074, 0x873e: 0xe00033aa, 0x873f: 0xe0000d04, + // Block 0x21d, offset 0x8740 + 0x8740: 0xe0000cfe, 0x8741: 0xe0000cf8, 0x8742: 0xe0000cf5, 0x8743: 0xe000309c, + 0x8744: 0xe00033c6, 0x8745: 0xe00030ab, 0x8746: 0xe00033d5, 0x8747: 0xe00030a2, + 0x8748: 0xe00033cc, 0x8749: 0xe00035eb, 0x874a: 0x002eda88, 0x874b: 0x402eda20, + 0x874c: 0xe00030fd, 0x874d: 0xe0003427, 0x874e: 0xe00030bd, 0x874f: 0xe00033e7, + 0x8750: 0xe00030dd, 0x8751: 0xe0003407, 0x8752: 0xe0000e93, 0x8753: 0xe0000e8f, + 0x8754: 0xe0003135, 0x8755: 0xe000345f, 0x8756: 0xe000313e, 0x8757: 0xe0003468, + 0x8758: 0xe0003138, 0x8759: 0xe0003462, 0x875a: 0xe0003151, 0x875b: 0xe000347b, + 0x875c: 0xe0003158, 0x875d: 0xe0003482, 0x875e: 0xe0003165, 0x875f: 0xe000348f, + 0x8760: 0xe000315b, 0x8761: 0xe0003485, 0x8762: 0xe0003178, 0x8763: 0xe00034a5, + 0x8764: 0xe0003172, 0x8765: 0xe000349c, 0x8766: 0x00303688, 0x8767: 0x40303620, + 0x8768: 0xe00031af, 0x8769: 0xe00034dc, 0x876a: 0xe00031b9, 0x876b: 0xe00034e6, + 0x876c: 0xe000318d, 0x876d: 0xe00034ba, 0x876e: 0xe0003196, 0x876f: 0xe00034c3, + 0x8770: 0xe00031ac, 0x8771: 0xe00034d9, 0x8772: 0xe00031b6, 0x8773: 0xe00034e3, + 0x8774: 0xe00031f8, 0x8775: 0xe0003525, 0x8776: 0xe0003210, 0x8777: 0xe0003540, + 0x8778: 0xe0003213, 0x8779: 0xe0003225, 0x877a: 0xe0003558, 0x877b: 0xe000322e, + 0x877c: 0xe0003561, 0x877d: 0xe000322b, 0x877e: 0xe000355e, 0x877f: 0xe0000f64, + // Block 0x21e, offset 0x8780 + 0x8780: 0x402c1a20, 0x8781: 0x002c2a88, 0x8782: 0x002c3288, 0x8783: 0x402c3220, + 0x8784: 0x0031c488, 0x8785: 0x4031c420, 0x8786: 0x002efa88, 0x8787: 0x002c4e88, + 0x8788: 0x402c4e20, 0x8789: 0x002c7288, 0x878a: 0x002c7a88, 0x878b: 0x002c8488, + 0x878c: 0x402c8420, 0x878d: 0xe000115c, 0x878e: 0x002cae88, 0x878f: 0x002cb888, + 0x8790: 0x002cc288, 0x8791: 0x002d1688, 0x8792: 0x402d1620, 0x8793: 0x002d4488, + 0x8794: 0x002d5888, 0x8795: 0x402d7820, 0x8796: 0x002dc288, 0x8797: 0x002db688, + 0x8798: 0x002e0a88, 0x8799: 0x402e0a20, 0x879a: 0x402e3820, 0x879b: 0x402e7220, + 0x879c: 0x0030a088, 0x879d: 0x002eb488, 0x879e: 0x402ebc20, 0x879f: 0x002f1088, + 0x87a0: 0xe0003111, 0x87a1: 0xe000343b, 0x87a2: 0x002d6088, 0x87a3: 0x402d6020, + 0x87a4: 0x002f3e88, 0x87a5: 0x402f3e20, 0x87a6: 0x002f8288, 0x87a7: 0x0031b488, + 0x87a8: 0x4031b420, 0x87a9: 0x00300888, 0x87aa: 0x40301220, 0x87ab: 0x40304220, + 0x87ac: 0x00304a88, 0x87ad: 0x40304a20, 0x87ae: 0x00305288, 0x87af: 0xe00031c9, + 0x87b0: 0xe00034f6, 0x87b1: 0x0030b488, 0x87b2: 0x0030cc88, 0x87b3: 0x00311888, + 0x87b4: 0x40311820, 0x87b5: 0x00313488, 0x87b6: 0x40313420, 0x87b7: 0x00316488, + 0x87b8: 0x00316e88, 0x87b9: 0x40316e20, 0x87ba: 0x40317820, 0x87bb: 0x4031a620, + 0x87bc: 0x0031bc88, 0x87bd: 0x4031bc20, 0x87be: 0xe0000fc9, 0x87bf: 0x40319420, + // Block 0x21f, offset 0x87c0 + 0x87c0: 0x40321220, 0x87c1: 0x40321a20, 0x87c2: 0x40322220, 0x87c3: 0x40322a20, + 0x87c4: 0xe0000ad5, 0x87c5: 0xe0000ad1, 0x87c6: 0xe0000acd, 0x87c7: 0xe000357f, + 0x87c8: 0xe000357c, 0x87c9: 0xe0003579, 0x87ca: 0xe00035c4, 0x87cb: 0xe00035c1, + 0x87cc: 0xe00035be, 0x87cd: 0xe0002f48, 0x87ce: 0xe0003263, 0x87cf: 0xe000303a, + 0x87d0: 0xe0003370, 0x87d1: 0xe00030d3, 0x87d2: 0xe00033fd, 0x87d3: 0xe0003193, + 0x87d4: 0xe00034c0, 0x87d5: 0xe00031a8, 0x87d6: 0xe00034d5, 0x87d7: 0xe000319c, + 0x87d8: 0xe00034c9, 0x87d9: 0xe00031a4, 0x87da: 0xe00034d1, 0x87db: 0xe00031a0, + 0x87dc: 0xe00034cd, 0x87dd: 0x402cae20, 0x87de: 0xe0002f55, 0x87df: 0xe0003270, + 0x87e0: 0xe0002f5f, 0x87e1: 0xe000327a, 0x87e2: 0xe00009f4, 0x87e3: 0xe00009ef, + 0x87e4: 0x002d3a88, 0x87e5: 0x402d3a20, 0x87e6: 0xe000300d, 0x87e7: 0xe0003340, + 0x87e8: 0xe0003065, 0x87e9: 0xe000339b, 0x87ea: 0xe00030f6, 0x87eb: 0xe0003420, + 0x87ec: 0xe00030f9, 0x87ed: 0xe0003423, 0x87ee: 0xe0001162, 0x87ef: 0xe000115f, + 0x87f0: 0xe0003395, 0x87f1: 0xe00032b0, 0x87f2: 0xe00032ad, 0x87f3: 0xe00032aa, + 0x87f4: 0xe0003004, 0x87f5: 0xe0003337, 0x87f6: 0x002d7888, 0x87f7: 0x00319488, + 0x87f8: 0xe000309f, 0x87f9: 0xe00033c9, 0x87fa: 0xe0002f4e, 0x87fb: 0xe0003269, + 0x87fc: 0xe00009ea, 0x87fd: 0xe00009e5, 0x87fe: 0xe0000e19, 0x87ff: 0xe0000e15, + // Block 0x220, offset 0x8800 + 0x8800: 0xe0002f6c, 0x8801: 0xe0003287, 0x8802: 0xe0002f6f, 0x8803: 0xe000328a, + 0x8804: 0xe0002fee, 0x8805: 0xe0003321, 0x8806: 0xe0002ff1, 0x8807: 0xe0003324, + 0x8808: 0xe0003053, 0x8809: 0xe0003386, 0x880a: 0xe0003056, 0x880b: 0xe0003389, + 0x880c: 0xe000310b, 0x880d: 0xe0003435, 0x880e: 0xe000310e, 0x880f: 0xe0003438, + 0x8810: 0xe0003141, 0x8811: 0xe000346b, 0x8812: 0xe0003144, 0x8813: 0xe000346e, + 0x8814: 0xe00031c3, 0x8815: 0xe00034f0, 0x8816: 0xe00031c6, 0x8817: 0xe00034f3, + 0x8818: 0xe000316f, 0x8819: 0xe0003499, 0x881a: 0xe000317e, 0x881b: 0xe00034ab, + 0x881c: 0x00312288, 0x881d: 0x40312220, 0x881e: 0xe000301c, 0x881f: 0xe000334f, + 0x8820: 0x002ebc88, 0x8821: 0x402c8c20, 0x8822: 0x002f2288, 0x8823: 0x402f2220, + 0x8824: 0x00314088, 0x8825: 0x40314020, 0x8826: 0xe0002f5c, 0x8827: 0xe0003277, + 0x8828: 0xe0002fd6, 0x8829: 0xe0003309, 0x882a: 0xe00030d9, 0x882b: 0xe0003403, + 0x882c: 0xe00030eb, 0x882d: 0xe0003415, 0x882e: 0xe00030ef, 0x882f: 0xe0003419, + 0x8830: 0xe00030f2, 0x8831: 0xe000341c, 0x8832: 0xe000321c, 0x8833: 0xe000354f, + 0x8834: 0x402e5e20, 0x8835: 0x402ed020, 0x8836: 0x40305a20, 0x8837: 0x402dd420, + 0x8838: 0xe0000abf, 0x8839: 0xe0000ec4, 0x883a: 0x002be888, 0x883b: 0x002c4488, + 0x883c: 0x402c4420, 0x883d: 0x002e3888, 0x883e: 0x00303e88, 0x883f: 0x402ffc20, + // Block 0x221, offset 0x8840 + 0x8840: 0xae603502, 0x8841: 0xae603202, 0x8842: 0xae604502, 0x8843: 0xae602202, + 0x8844: 0xe0000000, 0x8845: 0xaf007f02, 0x8846: 0xae605f02, 0x8847: 0xadc06002, + 0x8848: 0xadc06002, 0x8849: 0xadc06002, 0x884a: 0xae605f02, 0x884b: 0xae605f02, + 0x884c: 0xae605f02, 0x884d: 0xadc06002, 0x884e: 0xadc06002, 0x884f: 0xa0000000, + 0x8850: 0xae605f02, 0x8851: 0xae605f02, 0x8852: 0xae605f02, 0x8853: 0xadc06002, + 0x8854: 0xadc06002, 0x8855: 0xadc06002, 0x8856: 0xadc06002, 0x8857: 0xae605f02, + 0x8858: 0xae808002, 0x8859: 0xadc06002, 0x885a: 0xadc06002, 0x885b: 0xae605f02, + 0x885c: 0xae906002, 0x885d: 0xaea05f02, 0x885e: 0xaea05f02, 0x885f: 0xae906002, + 0x8860: 0xaea08102, 0x8861: 0xaea08202, 0x8862: 0xae906002, 0x8863: 0x84e615ef, + 0x8864: 0x84e6164c, 0x8865: 0x84e616cd, 0x8866: 0x84e61771, 0x8867: 0x84e61836, + 0x8868: 0x84e6161d, 0x8869: 0x84e61631, 0x886a: 0x84e616b4, 0x886b: 0x84e61741, + 0x886c: 0x84e617bd, 0x886d: 0x84e61816, 0x886e: 0x84e6185f, 0x886f: 0x84e6187b, + 0x8870: 0x00326688, 0x8871: 0x40326620, 0x8872: 0x0032a688, 0x8873: 0x4032a620, + 0x8874: 0x40064020, 0x8875: 0x40064220, 0x8876: 0x00326088, 0x8877: 0x40326020, + 0x887a: 0x00326c84, 0x887b: 0x40329220, + 0x887c: 0x40329020, 0x887d: 0x40329420, 0x887e: 0x402c1620, + // Block 0x222, offset 0x8880 + 0x8880: 0xe0002f7d, 0x8881: 0xe0003298, 0x8882: 0xe0002f80, 0x8883: 0xe00032b3, + 0x8884: 0xe0002f83, 0x8885: 0xe00032b6, 0x8886: 0xe0002f86, 0x8887: 0xe00032b9, + 0x8888: 0xe0002f98, 0x8889: 0xe00032cb, 0x888a: 0xe0002f9f, 0x888b: 0xe00032d2, + 0x888c: 0xe0002fa5, 0x888d: 0xe00032d8, 0x888e: 0xe0002fab, 0x888f: 0xe00032de, + 0x8890: 0xe0002fa2, 0x8891: 0xe00032d5, 0x8892: 0xe0002fa8, 0x8893: 0xe00032db, + 0x8894: 0xe0002fe7, 0x8895: 0xe000331a, 0x8896: 0xe0002fe3, 0x8897: 0xe0003316, + 0x8898: 0xe0002ffb, 0x8899: 0xe000332e, 0x889a: 0xe0002ffe, 0x889b: 0xe0003331, + 0x889c: 0xe0002fd9, 0x889d: 0xe000330c, 0x889e: 0xe0003001, 0x889f: 0xe0003334, + 0x88a0: 0xe0003016, 0x88a1: 0xe0003349, 0x88a2: 0xe0003022, 0x88a3: 0xe0003355, + 0x88a4: 0xe0003028, 0x88a5: 0xe000335b, 0x88a6: 0xe000301f, 0x88a7: 0xe0003352, + 0x88a8: 0xe0003025, 0x88a9: 0xe0003358, 0x88aa: 0xe000302b, 0x88ab: 0xe000335e, + 0x88ac: 0xe000305c, 0x88ad: 0xe000338f, 0x88ae: 0xe0003040, 0x88af: 0xe0003376, + 0x88b0: 0xe0003062, 0x88b1: 0xe0003398, 0x88b2: 0xe000306b, 0x88b3: 0xe00033a1, + 0x88b4: 0xe000306e, 0x88b5: 0xe00033a4, 0x88b6: 0xe000307a, 0x88b7: 0xe00033b0, + 0x88b8: 0xe000307d, 0x88b9: 0xe00033b3, 0x88ba: 0xe0003084, 0x88bb: 0xe00033ba, + 0x88bc: 0xe0003081, 0x88bd: 0xe00033b7, 0x88be: 0xe0003087, 0x88bf: 0xe00033bd, + // Block 0x223, offset 0x88c0 + 0x88c0: 0xe000308a, 0x88c1: 0xe00033c0, 0x88c2: 0xe000308d, 0x88c3: 0xe00033c3, + 0x88c4: 0xe00030a8, 0x88c5: 0xe00033d2, 0x88c6: 0xe00030ae, 0x88c7: 0xe00033d8, + 0x88c8: 0xe00030b4, 0x88c9: 0xe00033de, 0x88ca: 0xe00030b1, 0x88cb: 0xe00033db, + 0x88cc: 0xe00030e3, 0x88cd: 0xe000340d, 0x88ce: 0xe00030e7, 0x88cf: 0xe0003411, + 0x88d0: 0xe0003104, 0x88d1: 0xe000342e, 0x88d2: 0xe0003100, 0x88d3: 0xe000342a, + 0x88d4: 0xe000312f, 0x88d5: 0xe0003459, 0x88d6: 0xe0003132, 0x88d7: 0xe000345c, + 0x88d8: 0xe000313b, 0x88d9: 0xe0003465, 0x88da: 0xe0003147, 0x88db: 0xe0003471, + 0x88dc: 0xe000314a, 0x88dd: 0xe0003474, 0x88de: 0xe000314e, 0x88df: 0xe0003478, + 0x88e0: 0xe0003162, 0x88e1: 0xe000348c, 0x88e2: 0xe0003168, 0x88e3: 0xe0003492, + 0x88e4: 0xe0003154, 0x88e5: 0xe000347e, 0x88e6: 0xe000315e, 0x88e7: 0xe0003488, + 0x88e8: 0xe000316b, 0x88e9: 0xe0003495, 0x88ea: 0xe0003175, 0x88eb: 0xe00034a2, + 0x88ec: 0xe000317b, 0x88ed: 0xe00034a8, 0x88ee: 0xe0003184, 0x88ef: 0xe00034b1, + 0x88f0: 0xe0003181, 0x88f1: 0xe00034ae, 0x88f2: 0xe00031e3, 0x88f3: 0xe0003510, + 0x88f4: 0xe00031e9, 0x88f5: 0xe0003516, 0x88f6: 0xe00031e6, 0x88f7: 0xe0003513, + 0x88f8: 0xe00031b2, 0x88f9: 0xe00034df, 0x88fa: 0xe00031bc, 0x88fb: 0xe00034e9, + 0x88fc: 0xe00031ec, 0x88fd: 0xe0003519, 0x88fe: 0xe00031ef, 0x88ff: 0xe000351c, + // Block 0x224, offset 0x8900 + 0x8900: 0xe00031f5, 0x8901: 0xe0003522, 0x8902: 0xe00031f2, 0x8903: 0xe000351f, + 0x8904: 0xe00031fb, 0x8905: 0xe000352b, 0x8906: 0xe00031fe, 0x8907: 0xe000352e, + 0x8908: 0xe0003201, 0x8909: 0xe0003531, 0x890a: 0xe0003207, 0x890b: 0xe0003537, + 0x890c: 0xe0003204, 0x890d: 0xe0003534, 0x890e: 0xe0003219, 0x890f: 0xe000354c, + 0x8910: 0xe0003228, 0x8911: 0xe000355b, 0x8912: 0xe0003231, 0x8913: 0xe0003564, + 0x8914: 0xe0003234, 0x8915: 0xe0003567, 0x8916: 0xe0003361, 0x8917: 0xe000349f, + 0x8918: 0xe0003528, 0x8919: 0xe0003543, 0x891a: 0xe0002f10, 0x891b: 0xe0000f70, + 0x891c: 0x40300420, 0x891d: 0x40300620, 0x891e: 0xe0000f7f, 0x891f: 0x402c9620, + 0x8920: 0xe0002f72, 0x8921: 0xe000328d, 0x8922: 0xe0002f69, 0x8923: 0xe0003284, + 0x8924: 0xe0002f38, 0x8925: 0xe0003253, 0x8926: 0xe0002f3c, 0x8927: 0xe0003257, + 0x8928: 0xe0002f44, 0x8929: 0xe000325f, 0x892a: 0xe0002f40, 0x892b: 0xe000325b, + 0x892c: 0xe0002f79, 0x892d: 0xe0003294, 0x892e: 0xe0002f25, 0x892f: 0xe0003240, + 0x8930: 0xe0002f29, 0x8931: 0xe0003244, 0x8932: 0xe0002f31, 0x8933: 0xe000324c, + 0x8934: 0xe0002f2d, 0x8935: 0xe0003248, 0x8936: 0xe0002f75, 0x8937: 0xe0003290, + 0x8938: 0xe0002ff4, 0x8939: 0xe0003327, 0x893a: 0xe0002feb, 0x893b: 0xe000331e, + 0x893c: 0xe0002fd0, 0x893d: 0xe0003303, 0x893e: 0xe0002fba, 0x893f: 0xe00032ed, + // Block 0x225, offset 0x8940 + 0x8940: 0xe0002fbe, 0x8941: 0xe00032f1, 0x8942: 0xe0002fc6, 0x8943: 0xe00032f9, + 0x8944: 0xe0002fc2, 0x8945: 0xe00032f5, 0x8946: 0xe0002ff7, 0x8947: 0xe000332a, + 0x8948: 0xe0003050, 0x8949: 0xe0003383, 0x894a: 0xe0003059, 0x894b: 0xe000338c, + 0x894c: 0xe0003128, 0x894d: 0xe0003452, 0x894e: 0xe0003108, 0x894f: 0xe0003432, + 0x8950: 0xe00030c3, 0x8951: 0xe00033ed, 0x8952: 0xe00030c7, 0x8953: 0xe00033f1, + 0x8954: 0xe00030cf, 0x8955: 0xe00033f9, 0x8956: 0xe00030cb, 0x8957: 0xe00033f5, + 0x8958: 0xe000312b, 0x8959: 0xe0003455, 0x895a: 0xe0003114, 0x895b: 0xe000343e, + 0x895c: 0xe0003118, 0x895d: 0xe0003442, 0x895e: 0xe0003120, 0x895f: 0xe000344a, + 0x8960: 0xe000311c, 0x8961: 0xe0003446, 0x8962: 0xe0003124, 0x8963: 0xe000344e, + 0x8964: 0xe00031e0, 0x8965: 0xe000350d, 0x8966: 0xe00031c0, 0x8967: 0xe00034ed, + 0x8968: 0xe00031cc, 0x8969: 0xe00034f9, 0x896a: 0xe00031d0, 0x896b: 0xe00034fd, + 0x896c: 0xe00031d8, 0x896d: 0xe0003505, 0x896e: 0xe00031d4, 0x896f: 0xe0003501, + 0x8970: 0xe00031dc, 0x8971: 0xe0003509, 0x8972: 0xe000320d, 0x8973: 0xe000353d, + 0x8974: 0xe0003222, 0x8975: 0xe0003555, 0x8976: 0xe000321f, 0x8977: 0xe0003552, + 0x8978: 0xe0003216, 0x8979: 0xe0003549, 0x897a: 0xe0000d0a, 0x897b: 0xe0000d07, + 0x897c: 0x0030d888, 0x897d: 0x4030d820, 0x897e: 0x00312088, 0x897f: 0x40312020, + // Block 0x226, offset 0x8980 + 0x8980: 0x40063a20, 0x8981: 0xe00000b1, 0x8982: 0xe00012ea, 0x8983: 0xe00012f5, + 0x8984: 0xe00012e0, 0x8986: 0xe00012ee, 0x8987: 0xe00012f1, + 0x8988: 0xe000124f, 0x8989: 0xe0001249, 0x898a: 0xe00012e7, 0x898b: 0xe00012dd, + 0x898c: 0xe00012f8, 0x898d: 0xe00000b7, 0x898e: 0xe00000b4, 0x898f: 0xe00000ba, + 0x8990: 0xe0001343, 0x8991: 0xe000135e, 0x8992: 0xe0001356, 0x8993: 0xe0001352, + 0x8996: 0xe0001349, 0x8997: 0xe000135a, + 0x8998: 0xe0001346, 0x8999: 0xe0001361, 0x899a: 0xe0001340, 0x899b: 0xe000133a, + 0x899d: 0xe00000c0, 0x899e: 0xe00000bd, 0x899f: 0xe00000c3, + 0x89a0: 0xe00013e6, 0x89a1: 0xe0001401, 0x89a2: 0xe00013f9, 0x89a3: 0xe00013f5, + 0x89a4: 0xe00013a4, 0x89a5: 0xe00013a7, 0x89a6: 0xe00013ec, 0x89a7: 0xe00013fd, + 0x89a8: 0xe00013e9, 0x89a9: 0xe0001404, 0x89aa: 0xe00013e3, 0x89ab: 0xe00013dd, + 0x89ac: 0xe00013aa, 0x89ad: 0xe00000ae, 0x89ae: 0xe00000ab, 0x89af: 0x402c6020, + 0x89b2: 0xe000149f, 0x89b3: 0xe00014aa, + 0x89b4: 0xe0001495, 0x89b6: 0xe00014a3, 0x89b7: 0xe00014a6, + 0x89b8: 0xe00013a1, 0x89b9: 0xe000139b, 0x89ba: 0xe000149c, 0x89bb: 0xe0001492, + 0x89bc: 0xe00014ad, 0x89bd: 0x40062020, 0x89be: 0x40063820, + // Block 0x227, offset 0x89c0 + 0x89c0: 0x00021284, 0x89c1: 0x00021284, 0x89c2: 0x00021284, 0x89c3: 0x00021284, + 0x89c4: 0x00021284, 0x89c5: 0x00021284, 0x89c6: 0x00021284, 0x89c7: 0x0002129b, + 0x89c8: 0x00021284, 0x89c9: 0x00021284, 0x89ca: 0x00021284, 0x89cb: 0xa0000000, + 0x89cc: 0xa0000000, 0x89cd: 0xa0000000, 0x89ce: 0xa0000000, 0x89cf: 0xa0000000, + 0x89d0: 0x40022620, 0x89d1: 0x0002269b, 0x89d2: 0x40022820, 0x89d3: 0x40022a20, + 0x89d4: 0x40022c20, 0x89d5: 0x40022e20, 0x89d6: 0x4004c420, 0x89d7: 0x40021820, + 0x89d8: 0x4003d420, 0x89d9: 0x4003d620, 0x89da: 0x4003d820, 0x89db: 0x4003da20, + 0x89dc: 0x4003e220, 0x89dd: 0x4003e420, 0x89de: 0x4003e620, 0x89df: 0x4003e820, + 0x89e0: 0x4004f820, 0x89e1: 0x4004fa20, 0x89e2: 0x40050220, 0x89e3: 0x40050420, + 0x89e4: 0x0002e484, 0x89e5: 0xe0002bac, 0x89e6: 0xe0002bb2, 0x89e7: 0x40050620, + 0x89e8: 0x40020e20, 0x89e9: 0x40021020, 0x89ea: 0xa0000000, 0x89eb: 0xa0000000, + 0x89ec: 0xa0000000, 0x89ed: 0xa0000000, 0x89ee: 0xa0000000, 0x89ef: 0x0002129b, + 0x89f0: 0x4004f020, 0x89f1: 0x4004f420, 0x89f2: 0x40050e20, 0x89f3: 0xf0001f04, + 0x89f4: 0xf0000404, 0x89f5: 0x40051020, 0x89f6: 0xf0001f04, 0x89f7: 0xf0000404, + 0x89f8: 0x40051620, 0x89f9: 0x4003dc20, 0x89fa: 0x4003de20, 0x89fb: 0x40051820, + 0x89fc: 0xe0002ba0, 0x89fd: 0x4002e020, 0x89fe: 0x40021420, 0x89ff: 0x40051a20, + // Block 0x228, offset 0x8a00 + 0x8a00: 0x40051e20, 0x8a01: 0x40052220, 0x8a02: 0x40052420, 0x8a03: 0x40050820, + 0x8a04: 0x40095820, 0x8a05: 0x40040c20, 0x8a06: 0x40040e20, 0x8a07: 0xe0002ba9, + 0x8a08: 0xe0002ba6, 0x8a09: 0xe0002ba3, 0x8a0a: 0x4004e820, 0x8a0b: 0x4004d420, + 0x8a0c: 0x40050a20, 0x8a0d: 0x40050c20, 0x8a0e: 0x4004da20, 0x8a0f: 0x40026620, + 0x8a10: 0x40052020, 0x8a11: 0x4004dc20, 0x8a12: 0x40095020, 0x8a13: 0x40023420, + 0x8a14: 0x40051c20, 0x8a15: 0x40039c20, 0x8a16: 0x40039e20, 0x8a17: 0xe00000a6, + 0x8a18: 0x4003a020, 0x8a19: 0x4003a220, 0x8a1a: 0x4003a420, 0x8a1b: 0x4003a620, + 0x8a1c: 0x4003a820, 0x8a1d: 0x4003aa20, 0x8a1e: 0x4003ac20, 0x8a1f: 0x00021284, + 0x8a20: 0xa0000000, 0x8a21: 0xa0000000, 0x8a22: 0xa0000000, 0x8a23: 0xa0000000, + 0x8a24: 0xa0000000, + 0x8a2a: 0xa0000000, 0x8a2b: 0xa0000000, + 0x8a2c: 0xa0000000, 0x8a2d: 0xa0000000, 0x8a2e: 0xa0000000, 0x8a2f: 0xa0000000, + 0x8a30: 0x0029cc94, 0x8a31: 0x002d9a94, + 0x8a34: 0x0029d494, 0x8a35: 0x0029d694, 0x8a36: 0x0029d894, 0x8a37: 0x0029da94, + 0x8a38: 0x0029dc94, 0x8a39: 0x0029de94, 0x8a3a: 0x00093894, 0x8a3b: 0x00094e94, + 0x8a3c: 0x00094294, 0x8a3d: 0x0003f494, 0x8a3e: 0x0003f694, 0x8a3f: 0x002e9e94, + // Block 0x229, offset 0x8a40 + 0x8a40: 0xe00009bc, 0x8a41: 0xe00009c0, 0x8a42: 0x002c3a8b, 0x8a43: 0xe0002d26, + 0x8a44: 0x40081c20, 0x8a45: 0xe0000a5e, 0x8a46: 0xe0000a62, 0x8a47: 0x002cc28a, + 0x8a48: 0x40081e20, 0x8a49: 0xe0002d29, 0x8a4a: 0x002d2285, 0x8a4b: 0x002d688b, + 0x8a4c: 0x002d688b, 0x8a4d: 0x002d688b, 0x8a4e: 0x002d6885, 0x8a4f: 0xf0000202, + 0x8a50: 0x002d9a8b, 0x8a51: 0x002d9a8b, 0x8a52: 0x002e228b, 0x8a53: 0x002e2285, + 0x8a54: 0x40082020, 0x8a55: 0x002e9e8b, 0x8a56: 0xe000281e, 0x8a57: 0x40082220, + 0x8a58: 0x40082420, 0x8a59: 0x002f2c8b, 0x8a5a: 0x002f568b, 0x8a5b: 0x002f7a8b, + 0x8a5c: 0x002f7a8b, 0x8a5d: 0x002f7a8b, 0x8a5e: 0x40082620, 0x8a5f: 0x40082820, + 0x8a60: 0xe0002833, 0x8a61: 0xe0000fbd, 0x8a62: 0xe0002842, 0x8a63: 0x40082a20, + 0x8a64: 0x00312a8b, 0x8a65: 0x40082c20, 0x8a66: 0x0032a288, 0x8a67: 0x40082e20, + 0x8a68: 0x00312a8b, 0x8a69: 0x40083020, 0x8a6a: 0x402c3620, 0x8a6b: 0xe0002f4b, + 0x8a6c: 0x002c0a8b, 0x8a6d: 0x002c3a8b, 0x8a6e: 0x40083220, 0x8a6f: 0x002c9885, + 0x8a70: 0x002c988b, 0x8a71: 0x002d088b, 0x8a72: 0x002d1e88, 0x8a73: 0x002e828b, + 0x8a74: 0x002ee285, 0x8a75: 0x00389084, 0x8a76: 0x00389284, 0x8a77: 0x00389484, + 0x8a78: 0x00389684, 0x8a79: 0x002d9a85, 0x8a7a: 0x40083420, 0x8a7b: 0xe0000b95, + 0x8a7c: 0x00327e85, 0x8a7d: 0x00325685, 0x8a7e: 0x0032568b, 0x8a7f: 0x00327e8b, + // Block 0x22a, offset 0x8a80 + 0x8a80: 0x00093685, 0x8a81: 0x40083620, 0x8a82: 0x40083820, 0x8a83: 0x40083a20, + 0x8a84: 0x40083c20, 0x8a85: 0x002c628b, 0x8a86: 0x002c6285, 0x8a87: 0x002c9885, + 0x8a88: 0x002d9a85, 0x8a89: 0x002dcc85, 0x8a8a: 0x40083e20, 0x8a8b: 0x400a6e20, + 0x8a8c: 0x40084020, 0x8a8d: 0xe00009c4, 0x8a8e: 0x402d1e20, 0x8a8f: 0x40084220, + 0x8a90: 0xe00002cb, 0x8a91: 0xe00002d3, 0x8a92: 0xe00002b2, 0x8a93: 0xe00002bb, + 0x8a94: 0xe00003cd, 0x8a95: 0xe00002c3, 0x8a96: 0xe00003d1, 0x8a97: 0xe00004ab, + 0x8a98: 0xe0000579, 0x8a99: 0xe00002c7, 0x8a9a: 0xe0000640, 0x8a9b: 0xe00002cf, + 0x8a9c: 0xe00004af, 0x8a9d: 0xe0000644, 0x8a9e: 0xe0000798, 0x8a9f: 0xe0002d42, + 0x8aa0: 0x002d9a8a, 0x8aa1: 0xe00027d4, 0x8aa2: 0xe00027db, 0x8aa3: 0xe00027ee, + 0x8aa4: 0x0030be8a, 0x8aa5: 0xe0002848, 0x8aa6: 0xe000284f, 0x8aa7: 0xe00010bb, + 0x8aa8: 0xe00027f4, 0x8aa9: 0x0030f68a, 0x8aaa: 0xe0002883, 0x8aab: 0xe000288a, + 0x8aac: 0x002e228a, 0x8aad: 0x002c3a8a, 0x8aae: 0x002c628a, 0x8aaf: 0x002e828a, + 0x8ab0: 0x002d9a84, 0x8ab1: 0xe00027d1, 0x8ab2: 0xe00027d7, 0x8ab3: 0xe00027eb, + 0x8ab4: 0x0030be84, 0x8ab5: 0xe0002845, 0x8ab6: 0xe000284b, 0x8ab7: 0xe00010b6, + 0x8ab8: 0xe00027f1, 0x8ab9: 0x0030f684, 0x8aba: 0xe0002880, 0x8abb: 0xe0002886, + 0x8abc: 0x002e2284, 0x8abd: 0x002c3a84, 0x8abe: 0x002c6284, 0x8abf: 0x002e8284, + // Block 0x22b, offset 0x8ac0 + 0x8ac0: 0x4009a620, 0x8ac1: 0xe00000f5, 0x8ac2: 0x4009a820, 0x8ac3: 0x4009aa20, + 0x8ac4: 0xe00000f8, 0x8ac5: 0x4009ac20, 0x8ac6: 0x4009ae20, 0x8ac7: 0xe00000fb, + 0x8ac8: 0x4009b020, 0x8ac9: 0xe00000fe, 0x8aca: 0x4009b220, 0x8acb: 0x4009b420, + 0x8acc: 0x4009b620, 0x8acd: 0x4009b820, 0x8ace: 0x4009ba20, 0x8acf: 0x4009bc20, + 0x8ad0: 0x4009be20, 0x8ad1: 0x4009c020, 0x8ad2: 0x4009c220, 0x8ad3: 0x4009c420, + 0x8ad4: 0x4009c620, 0x8ad5: 0x4009c820, 0x8ad6: 0x4009ca20, 0x8ad7: 0x4009cc20, + 0x8ad8: 0x4009ce20, 0x8ad9: 0x4009d020, 0x8ada: 0x4009d220, 0x8adb: 0x4009d420, + 0x8adc: 0x4009d620, 0x8add: 0x4009d820, 0x8ade: 0x4009da20, 0x8adf: 0x4009dc20, + 0x8ae0: 0xe0002f16, 0x8ae1: 0x4009de20, 0x8ae2: 0xe0000104, 0x8ae3: 0x4009e020, + 0x8ae4: 0x4009e220, 0x8ae5: 0x4009e420, 0x8ae6: 0x4009e620, 0x8ae7: 0x4009e820, + 0x8ae8: 0x4009ea20, 0x8ae9: 0x4009ec20, 0x8aea: 0x4009ee20, 0x8aeb: 0x4009f020, + 0x8aec: 0x4009f220, 0x8aed: 0xe0000101, 0x8aee: 0xe0002f13, 0x8aef: 0xe0002f19, + 0x8af0: 0xe0000107, 0x8af1: 0xe000010a, 0x8af2: 0x4009f420, 0x8af3: 0x4009f620, + 0x8af4: 0xe000010d, 0x8af5: 0xe0000110, 0x8af6: 0x4009f820, 0x8af7: 0x4009fa20, + 0x8af8: 0xe0000113, 0x8af9: 0xe0000116, 0x8afa: 0x4009fc20, 0x8afb: 0x4009fe20, + 0x8afc: 0x400a0020, 0x8afd: 0x400a0220, 0x8afe: 0x400a0420, 0x8aff: 0x400a0620, + // Block 0x22c, offset 0x8b00 + 0x8b00: 0x400d1820, 0x8b01: 0x400d1a20, 0x8b02: 0x400d1c20, 0x8b03: 0x400d1e20, + 0x8b04: 0x400d2020, 0x8b05: 0x400d2220, 0x8b06: 0x400d2420, 0x8b07: 0x400d2620, + 0x8b08: 0x400d2820, 0x8b09: 0x400d2a20, 0x8b0a: 0x400d2c20, + 0x8b20: 0x0029ce86, 0x8b21: 0x0029d086, 0x8b22: 0x0029d286, 0x8b23: 0x0029d486, + 0x8b24: 0x0029d686, 0x8b25: 0x0029d886, 0x8b26: 0x0029da86, 0x8b27: 0x0029dc86, + 0x8b28: 0x0029de86, 0x8b29: 0xe0002d45, 0x8b2a: 0xe0002d58, 0x8b2b: 0xe0002d6b, + 0x8b2c: 0xe0002d7e, 0x8b2d: 0xe0002d8d, 0x8b2e: 0xe0002d9c, 0x8b2f: 0xe0002dab, + 0x8b30: 0xe0002dba, 0x8b31: 0xe0002dc9, 0x8b32: 0xe0002dd8, 0x8b33: 0xe0002df6, + 0x8b34: 0xe0002bba, 0x8b35: 0xe0002bbe, 0x8b36: 0xe0002bc2, 0x8b37: 0xe0002bc6, + 0x8b38: 0xe0002bca, 0x8b39: 0xe0002bce, 0x8b3a: 0xe0002bd2, 0x8b3b: 0xe0002bd6, + 0x8b3c: 0xe0002bda, 0x8b3d: 0xe0000015, 0x8b3e: 0xe000001a, 0x8b3f: 0xe000001f, + // Block 0x22d, offset 0x8b40 + 0x8b40: 0xe0000024, 0x8b41: 0xe0000029, 0x8b42: 0xe000002e, 0x8b43: 0xe0000033, + 0x8b44: 0xe0000038, 0x8b45: 0xe000003d, 0x8b46: 0xe0000042, 0x8b47: 0xe0000047, + 0x8b48: 0xe0002d3f, 0x8b49: 0xe0002df3, 0x8b4a: 0xe0002e60, 0x8b4b: 0xe0002e95, + 0x8b4c: 0xe0002ec2, 0x8b4d: 0xe0002ed4, 0x8b4e: 0xe0002ee3, 0x8b4f: 0xe0002ef2, + 0x8b50: 0xe0002f01, 0x8b51: 0xe0002d48, 0x8b52: 0xe0002d5b, 0x8b53: 0xe0002d6e, + 0x8b54: 0xe0002d81, 0x8b55: 0xe0002d90, 0x8b56: 0xe0002d9f, 0x8b57: 0xe0002dae, + 0x8b58: 0xe0002dbd, 0x8b59: 0xe0002dcc, 0x8b5a: 0xe0002ddb, 0x8b5b: 0xe0002df9, + 0x8b5c: 0xe0002bde, 0x8b5d: 0xe0002be6, 0x8b5e: 0xe0002bee, 0x8b5f: 0xe0002bf6, + 0x8b60: 0xe000249f, 0x8b61: 0xe0002bfe, 0x8b62: 0xe0002c06, 0x8b63: 0xe00024a7, + 0x8b64: 0xe00024af, 0x8b65: 0xe0002c0e, 0x8b66: 0xe00024b7, 0x8b67: 0xe0002c16, + 0x8b68: 0xe0002c1e, 0x8b69: 0xe0002c26, 0x8b6a: 0xe00024bf, 0x8b6b: 0xe0002c2e, + 0x8b6c: 0xe00024c7, 0x8b6d: 0xe00024cf, 0x8b6e: 0xe00024d7, 0x8b6f: 0xe00024df, + 0x8b70: 0xe0002c36, 0x8b71: 0xe0002c3e, 0x8b72: 0xe0002c46, 0x8b73: 0xe00024e7, + 0x8b74: 0xe0002c4e, 0x8b75: 0xe0002c56, 0x8b76: 0x002bde8c, 0x8b77: 0x002c0a8c, + 0x8b78: 0x002c3a8c, 0x8b79: 0x002c628c, 0x8b7a: 0x002c988c, 0x8b7b: 0x002d088c, + 0x8b7c: 0x002d228c, 0x8b7d: 0x002d688c, 0x8b7e: 0x002d9a8c, 0x8b7f: 0x002dcc8c, + // Block 0x22e, offset 0x8b80 + 0x8b80: 0x40151420, 0x8b81: 0x40151620, 0x8b82: 0x40151820, 0x8b83: 0x40151a20, + 0x8b84: 0x40151c20, 0x8b85: 0x40151e20, 0x8b86: 0x40152020, 0x8b87: 0x40152220, + 0x8b88: 0x40152420, 0x8b89: 0x40152620, 0x8b8a: 0x40152820, 0x8b8b: 0x40152a20, + 0x8b8c: 0x40152c20, 0x8b8d: 0x40152e20, 0x8b8e: 0x40153020, 0x8b8f: 0x40153220, + 0x8b90: 0x40153420, 0x8b91: 0x40153620, 0x8b92: 0x40153820, 0x8b93: 0x40153a20, + 0x8b94: 0x40153c20, 0x8b95: 0x40153e20, 0x8b96: 0x40154020, 0x8b97: 0x40154220, + 0x8b98: 0x40154420, 0x8b99: 0x40154620, 0x8b9a: 0x40154820, 0x8b9b: 0x40154a20, + 0x8b9c: 0x40154c20, 0x8b9d: 0x40154e20, 0x8b9e: 0x40155020, 0x8b9f: 0x40155220, + 0x8ba0: 0x40155420, 0x8ba1: 0x40155620, 0x8ba2: 0x40155820, 0x8ba3: 0x40155a20, + 0x8ba4: 0x40155c20, 0x8ba5: 0x40155e20, 0x8ba6: 0x40156020, 0x8ba7: 0x40156220, + 0x8ba8: 0x40156420, 0x8ba9: 0x40156620, 0x8baa: 0x40156820, 0x8bab: 0x40156a20, + 0x8bac: 0x40156c20, 0x8bad: 0x40156e20, 0x8bae: 0x40157020, 0x8baf: 0x40157220, + 0x8bb0: 0x40157420, 0x8bb1: 0x40157620, 0x8bb2: 0x40157820, 0x8bb3: 0x40157a20, + 0x8bb4: 0xe0002b9c, 0x8bb5: 0xe0002d2c, 0x8bb6: 0xe0002d2f, 0x8bb7: 0x40157c20, + 0x8bb8: 0x40157e20, 0x8bb9: 0x40158020, 0x8bba: 0x40158220, 0x8bbb: 0x40158420, + 0x8bbc: 0x40158620, 0x8bbd: 0x40158820, 0x8bbe: 0x40158a20, 0x8bbf: 0x40158c20, + // Block 0x22f, offset 0x8bc0 + 0x8bc0: 0xe0002c5e, 0x8bc1: 0xe0002c62, 0x8bc2: 0xe0002c66, 0x8bc3: 0xe0002c6a, + 0x8bc4: 0xe0002c6e, 0x8bc5: 0xe0002c72, 0x8bc6: 0xe0002c76, 0x8bc7: 0xe0002c7a, + 0x8bc8: 0xe0002c7e, 0x8bc9: 0xe0002c82, 0x8bca: 0xe0002c86, 0x8bcb: 0xe0002c8a, + 0x8bcc: 0xe0002c8e, 0x8bcd: 0xe0002c92, 0x8bce: 0xe000004c, 0x8bcf: 0xe0000051, + 0x8bd0: 0xe0000056, 0x8bd1: 0xe000005b, 0x8bd2: 0xe0000060, 0x8bd3: 0xe0000065, + 0x8bd4: 0xe000006a, 0x8bd5: 0xe000006f, 0x8bd6: 0xe0000083, 0x8bd7: 0xe000008d, + 0x8bd8: 0xe0000092, 0x8bd9: 0xe0000097, 0x8bda: 0xe000009c, 0x8bdb: 0xe00000a1, + 0x8bdc: 0xe0000088, 0x8bdd: 0xe0000074, 0x8bde: 0xe000007c, + 0x8be0: 0xe0002c96, 0x8be1: 0xe0002ca6, 0x8be2: 0xe0002c9e, 0x8be3: 0xe0002cd6, + 0x8be4: 0xe0002caa, 0x8be5: 0xe0002cbe, 0x8be6: 0xe0002c9a, 0x8be7: 0xe0002cba, + 0x8be8: 0xe0002ca2, 0x8be9: 0xe0002cc6, 0x8bea: 0xe0002ce6, 0x8beb: 0xe0002cfa, + 0x8bec: 0xe0002cf6, 0x8bed: 0xe0002cee, 0x8bee: 0xe0002d22, 0x8bef: 0xe0002cda, + 0x8bf0: 0xe0002ce2, 0x8bf1: 0xe0002cf2, 0x8bf2: 0xe0002cea, 0x8bf3: 0xe0002d06, + 0x8bf4: 0xe0002cce, 0x8bf5: 0xe0002cfe, 0x8bf6: 0xe0002d1a, 0x8bf7: 0xe0002d0a, + 0x8bf8: 0xe0002cc2, 0x8bf9: 0xe0002cae, 0x8bfa: 0xe0002cd2, 0x8bfb: 0xe0002cde, + 0x8bfc: 0xe0002d02, 0x8bfd: 0xe0002cb2, 0x8bfe: 0xe0002d1e, 0x8bff: 0xe0002cca, + // Block 0x230, offset 0x8c00 + 0x8c00: 0xe0002d0e, 0x8c01: 0xe0002cb6, 0x8c02: 0xe0002d12, 0x8c03: 0xe0002d16, + 0x8c04: 0x02aa9e86, 0x8c05: 0x02bcf886, 0x8c06: 0x02cb0e86, 0x8c07: 0x02f71e86, + 0x8c08: 0xe00002e3, 0x8c09: 0xe00003d8, 0x8c0a: 0xe00004b3, 0x8c0b: 0xe000057d, + 0x8c0c: 0xe0000648, 0x8c0d: 0xe00006f0, 0x8c0e: 0xe000079c, 0x8c0f: 0xe0000841, + 0x8c10: 0xe0000ec0, 0x8c11: 0xe0002e05, 0x8c12: 0xe0002e10, 0x8c13: 0xe0002e1b, + 0x8c14: 0xe0002e26, 0x8c15: 0xe0002e31, 0x8c16: 0xe0002e38, 0x8c17: 0xe0002e3f, + 0x8c18: 0xe0002e46, 0x8c19: 0xe0002e4d, 0x8c1a: 0xe0002e63, 0x8c1b: 0xe0002e6a, + 0x8c1c: 0xe0002e71, 0x8c1d: 0xe0002e74, 0x8c1e: 0xe0002e77, 0x8c1f: 0xe0002e7a, + 0x8c20: 0x0062ac86, 0x8c21: 0x0062b086, 0x8c22: 0x0062b286, 0x8c23: 0x0062b686, + 0x8c24: 0x0062b886, 0x8c25: 0x0062ba86, 0x8c26: 0x0062be86, 0x8c27: 0x0062c286, + 0x8c28: 0x0062c486, 0x8c29: 0x0062c886, 0x8c2a: 0x0062ca86, 0x8c2b: 0x0062cc86, + 0x8c2c: 0x0062ce86, 0x8c2d: 0x0062d086, 0x8c2e: 0xf0000606, 0x8c2f: 0xf0000606, + 0x8c30: 0xf0000606, 0x8c31: 0xf0000606, 0x8c32: 0xf0000606, 0x8c33: 0xf0000606, + 0x8c34: 0xf0000606, 0x8c35: 0xf0000606, 0x8c36: 0xf0000606, 0x8c37: 0xf0000606, + 0x8c38: 0xf0000606, 0x8c39: 0xf0000606, 0x8c3a: 0xf0000606, 0x8c3b: 0xf0000606, + 0x8c3c: 0xe0002127, 0x8c3d: 0xe0002122, 0x8c3e: 0xf0000606, 0x8c3f: 0x4027ac20, + // Block 0x231, offset 0x8c40 + 0x8c40: 0x029c0086, 0x8c41: 0x029d1886, 0x8c42: 0x029c1286, 0x8c43: 0x02adb686, + 0x8c44: 0x029d2886, 0x8c45: 0x02a2da86, 0x8c46: 0x029c0686, 0x8c47: 0x02a2d686, + 0x8c48: 0x029cba86, 0x8c49: 0x02a68286, 0x8c4a: 0x02ce1086, 0x8c4b: 0x02e0d686, + 0x8c4c: 0x02d86886, 0x8c4d: 0x02ce5086, 0x8c4e: 0x0323a286, 0x8c4f: 0x02ae3e86, + 0x8c50: 0x02cbca86, 0x8c51: 0x02d05486, 0x8c52: 0x02ce1286, 0x8c53: 0x02f27c86, + 0x8c54: 0x02a81a86, 0x8c55: 0x02e4f286, 0x8c56: 0x03194286, 0x8c57: 0x02f2ba86, + 0x8c58: 0x02a56886, 0x8c59: 0x02f3b086, 0x8c5a: 0x02ea6e86, 0x8c5b: 0x02b2e686, + 0x8c5c: 0x0320d286, 0x8c5d: 0x02a25486, 0x8c5e: 0x02a6e086, 0x8c5f: 0x02d9d086, + 0x8c60: 0x03300a86, 0x8c61: 0x029e2286, 0x8c62: 0x02a33286, 0x8c63: 0x02d6c686, + 0x8c64: 0x029c1486, 0x8c65: 0x029c5a86, 0x8c66: 0x029c1686, 0x8c67: 0x02bbcc86, + 0x8c68: 0x02a7e686, 0x8c69: 0x02a67686, 0x8c6a: 0x02b72e86, 0x8c6b: 0x02b6cc86, + 0x8c6c: 0x02edc686, 0x8c6d: 0x029e0286, 0x8c6e: 0x03198e86, 0x8c6f: 0x02a6a886, + 0x8c70: 0x02b23886, 0x8c71: 0xe0002e7d, 0x8c72: 0xe0002e80, 0x8c73: 0xe0002e83, + 0x8c74: 0xe0002e86, 0x8c75: 0xe0002e98, 0x8c76: 0xe0002e9b, 0x8c77: 0xe0002e9e, + 0x8c78: 0xe0002ea1, 0x8c79: 0xe0002ea4, 0x8c7a: 0xe0002ea7, 0x8c7b: 0xe0002eaa, + 0x8c7c: 0xe0002ead, 0x8c7d: 0xe0002eb0, 0x8c7e: 0xe0002eb3, 0x8c7f: 0xe0002ec5, + // Block 0x232, offset 0x8c80 + 0x8c80: 0xe0002dea, 0x8c81: 0xe0002e57, 0x8c82: 0xe0002e8c, 0x8c83: 0xe0002eb9, + 0x8c84: 0xe0002ecb, 0x8c85: 0xe0002eda, 0x8c86: 0xe0002ee9, 0x8c87: 0xe0002ef8, + 0x8c88: 0xe0002f07, 0x8c89: 0xe0002d50, 0x8c8a: 0xe0002d63, 0x8c8b: 0xe0002d76, + 0x8c8c: 0xe00027c5, 0x8c8d: 0xe0000b85, 0x8c8e: 0xe00026cc, 0x8c8f: 0xe0000d14, + 0x8c90: 0x00657693, 0x8c91: 0x00657893, 0x8c92: 0x00657a93, 0x8c93: 0x00657e93, + 0x8c94: 0x00658093, 0x8c95: 0x00658293, 0x8c96: 0x00658493, 0x8c97: 0x00658693, + 0x8c98: 0x00658893, 0x8c99: 0x00658a93, 0x8c9a: 0x00658c93, 0x8c9b: 0x00658e93, + 0x8c9c: 0x00659093, 0x8c9d: 0x00659293, 0x8c9e: 0x00659493, 0x8c9f: 0x00659693, + 0x8ca0: 0x00659893, 0x8ca1: 0x00659a93, 0x8ca2: 0x00659c93, 0x8ca3: 0x00659e93, + 0x8ca4: 0x0065a093, 0x8ca5: 0x0065a293, 0x8ca6: 0x0065a493, 0x8ca7: 0x0065a693, + 0x8ca8: 0x0065a893, 0x8ca9: 0x0065aa93, 0x8caa: 0x0065ac93, 0x8cab: 0x0065ae93, + 0x8cac: 0x0065b093, 0x8cad: 0x0065b293, 0x8cae: 0x0065b493, 0x8caf: 0x0065b693, + 0x8cb0: 0x0065b893, 0x8cb1: 0x0065ba93, 0x8cb2: 0x0065bc93, 0x8cb3: 0x0065be93, + 0x8cb4: 0x0065c093, 0x8cb5: 0x0065c493, 0x8cb6: 0x0065c693, 0x8cb7: 0x0065c893, + 0x8cb8: 0x0065ca93, 0x8cb9: 0x0065cc93, 0x8cba: 0x0065ce93, 0x8cbb: 0x0065d093, + 0x8cbc: 0x0065d293, 0x8cbd: 0x0065d493, 0x8cbe: 0x0065d693, + // Block 0x233, offset 0x8cc0 + 0x8cc0: 0xe000230b, 0x8cc1: 0xe00022f8, 0x8cc2: 0xe00022fc, 0x8cc3: 0xe0002311, + 0x8cc4: 0xe0002316, 0x8cc5: 0xe000231d, 0x8cc6: 0xe0002321, 0x8cc7: 0xe0002325, + 0x8cc8: 0xe000232b, 0x8cc9: 0xf0001c1c, 0x8cca: 0xe0002330, 0x8ccb: 0xe000233c, + 0x8ccc: 0xe0002340, 0x8ccd: 0xe0002337, 0x8cce: 0xe0002346, 0x8ccf: 0xe000234b, + 0x8cd0: 0xe000234f, 0x8cd1: 0xe0002353, 0x8cd2: 0xf0001c1c, 0x8cd3: 0xe000235e, + 0x8cd4: 0xe0002358, 0x8cd5: 0xf0001c1c, 0x8cd6: 0xe0002363, 0x8cd7: 0xe000236d, + 0x8cd8: 0xe0002d39, 0x8cd9: 0xe0002ded, 0x8cda: 0xe0002e5a, 0x8cdb: 0xe0002e8f, + 0x8cdc: 0xe0002ebc, 0x8cdd: 0xe0002ece, 0x8cde: 0xe0002edd, 0x8cdf: 0xe0002eec, + 0x8ce0: 0xe0002efb, 0x8ce1: 0xe0002f0a, 0x8ce2: 0xe0002d54, 0x8ce3: 0xe0002d67, + 0x8ce4: 0xe0002d7a, 0x8ce5: 0xe0002d89, 0x8ce6: 0xe0002d98, 0x8ce7: 0xe0002da7, + 0x8ce8: 0xe0002db6, 0x8ce9: 0xe0002dc5, 0x8cea: 0xe0002dd4, 0x8ceb: 0xe0002de3, + 0x8cec: 0xe0002e01, 0x8ced: 0xe0002e0c, 0x8cee: 0xe0002e17, 0x8cef: 0xe0002e22, + 0x8cf0: 0xe0002e2d, 0x8cf1: 0xe0000c1e, 0x8cf2: 0xe000329b, 0x8cf3: 0xe0002f0d, + 0x8cf4: 0xe0000a31, 0x8cf5: 0xe0002824, 0x8cf6: 0xe00035d6, 0x8cf7: 0xe00032a7, + 0x8cf8: 0xe0000ac2, 0x8cf9: 0xe0000ac6, 0x8cfa: 0xe00027e8, 0x8cfb: 0xf0001c1c, + 0x8cfc: 0xf0001c1c, 0x8cfd: 0xf0001c1c, 0x8cfe: 0xf0001c1c, 0x8cff: 0xe0002431, + // Block 0x234, offset 0x8d00 + 0x8d00: 0xe00035d0, 0x8d01: 0xe00035b8, 0x8d02: 0xe00035ee, 0x8d03: 0xe000358e, + 0x8d04: 0xe00027f7, 0x8d05: 0xe00027fa, 0x8d06: 0xe0003594, 0x8d07: 0xe0003573, + 0x8d08: 0xe0000a6b, 0x8d09: 0xe0000cb4, 0x8d0a: 0xe00035d9, 0x8d0b: 0xe00035bb, + 0x8d0c: 0xe00035f1, 0x8d0d: 0xe00035f4, 0x8d0e: 0xe000359d, 0x8d0f: 0xe00027fd, + 0x8d10: 0xe00027ce, 0x8d11: 0xe0000cb9, 0x8d12: 0xe0000d36, 0x8d13: 0xe0000be3, + 0x8d14: 0xe0000fc5, 0x8d15: 0xe00035f7, 0x8d16: 0xe00035a0, 0x8d17: 0xe00032a4, + 0x8d18: 0xe0002803, 0x8d19: 0xe0003570, 0x8d1a: 0xe00035c7, 0x8d1b: 0xe00035fa, + 0x8d1c: 0xe00035a3, 0x8d1d: 0xe0003099, 0x8d1e: 0xe0002806, 0x8d1f: 0xe0000d3e, + 0x8d20: 0xe0000a72, 0x8d21: 0xe0003588, 0x8d22: 0xe0000cbd, 0x8d23: 0xe0000d42, + 0x8d24: 0xe0000a76, 0x8d25: 0xe000358b, 0x8d26: 0xe0000cc1, 0x8d27: 0xe0000d2d, + 0x8d28: 0xe0000d31, 0x8d29: 0xe00035d3, 0x8d2a: 0xe0000cc5, 0x8d2b: 0xe0000d4a, + 0x8d2c: 0xe0000be7, 0x8d2d: 0xe0000f0b, 0x8d2e: 0xe0000f0f, 0x8d2f: 0xe0000f15, + 0x8d30: 0xe000282d, 0x8d31: 0xe0002821, 0x8d32: 0xe000288e, 0x8d33: 0xe000281b, + 0x8d34: 0xe00035dc, 0x8d35: 0xe00035ca, 0x8d36: 0xe00035fd, 0x8d37: 0xe00035a6, + 0x8d38: 0xe000280f, 0x8d39: 0xe00035a9, 0x8d3a: 0xe00035df, 0x8d3b: 0xe00035cd, + 0x8d3c: 0xe0003600, 0x8d3d: 0xe00035af, 0x8d3e: 0xe0002812, 0x8d3f: 0xe00035b2, + // Block 0x235, offset 0x8d40 + 0x8d40: 0xe0002815, 0x8d41: 0xe00035b5, 0x8d42: 0xe00009b7, 0x8d43: 0xe00024f3, + 0x8d44: 0xe0003090, 0x8d45: 0xe0003096, 0x8d46: 0xe0000a66, 0x8d47: 0xe0000a7a, + 0x8d48: 0xe000329e, 0x8d49: 0xe0003576, 0x8d4a: 0xe00027c2, 0x8d4b: 0xe00027c8, + 0x8d4c: 0xe00027e5, 0x8d4d: 0xe0002800, 0x8d4e: 0xe0002809, 0x8d4f: 0xe000280c, + 0x8d50: 0xe0003582, 0x8d51: 0xe0003585, 0x8d52: 0xe0000d0d, 0x8d53: 0xe0002818, + 0x8d54: 0xe0003591, 0x8d55: 0xe0000d3a, 0x8d56: 0xe0000d46, 0x8d57: 0xe0002827, + 0x8d58: 0xe0000eb0, 0x8d59: 0xe0000eb8, 0x8d5a: 0xe000282a, 0x8d5b: 0xe0002836, + 0x8d5c: 0xe000283f, 0x8d5d: 0xe00035e2, 0x8d5e: 0xe00010b2, 0x8d5f: 0xe00009c8, + 0x8d60: 0xe0002de7, 0x8d61: 0xe0002e54, 0x8d62: 0xe0002e89, 0x8d63: 0xe0002eb6, + 0x8d64: 0xe0002ec8, 0x8d65: 0xe0002ed7, 0x8d66: 0xe0002ee6, 0x8d67: 0xe0002ef5, + 0x8d68: 0xe0002f04, 0x8d69: 0xe0002d4c, 0x8d6a: 0xe0002d5f, 0x8d6b: 0xe0002d72, + 0x8d6c: 0xe0002d85, 0x8d6d: 0xe0002d94, 0x8d6e: 0xe0002da3, 0x8d6f: 0xe0002db2, + 0x8d70: 0xe0002dc1, 0x8d71: 0xe0002dd0, 0x8d72: 0xe0002ddf, 0x8d73: 0xe0002dfd, + 0x8d74: 0xe0002e08, 0x8d75: 0xe0002e13, 0x8d76: 0xe0002e1e, 0x8d77: 0xe0002e29, + 0x8d78: 0xe0002e34, 0x8d79: 0xe0002e3b, 0x8d7a: 0xe0002e42, 0x8d7b: 0xe0002e49, + 0x8d7c: 0xe0002e50, 0x8d7d: 0xe0002e66, 0x8d7e: 0xe0002e6d, 0x8d7f: 0xe0000bdf, + // Block 0x236, offset 0x8d80 + 0x8d80: 0xe000356a, 0x8d81: 0xe00026cf, 0x8d82: 0xe000356d, 0x8d83: 0xe0000b99, + 0x8d84: 0xe0000b9d, 0x8d85: 0xe0000f83, 0x8d86: 0xe000283c, + 0x8d93: 0xf0000404, + 0x8d94: 0xf0000404, 0x8d95: 0xf0000404, 0x8d96: 0xf0000404, 0x8d97: 0xf0000404, + 0x8d9d: 0xe000150b, 0x8d9e: 0xa1a09602, 0x8d9f: 0xe0001514, + 0x8da0: 0x0038ae85, 0x8da1: 0x00389085, 0x8da2: 0x00389685, 0x8da3: 0x00389885, + 0x8da4: 0x0038a485, 0x8da5: 0x0038a685, 0x8da6: 0x0038a885, 0x8da7: 0x0038b685, + 0x8da8: 0x0038ba85, 0x8da9: 0x00093885, 0x8daa: 0xe0001542, 0x8dab: 0xe000153f, + 0x8dac: 0xe000154c, 0x8dad: 0xe0001548, 0x8dae: 0xe00014e1, 0x8daf: 0xe00014e4, + 0x8db0: 0xe00014e7, 0x8db1: 0xe00014ea, 0x8db2: 0xe00014f0, 0x8db3: 0xe00014f3, + 0x8db4: 0xe00014f6, 0x8db5: 0xe00014fc, 0x8db6: 0xe0001505, + 0x8db8: 0xe0001508, 0x8db9: 0xe000150e, 0x8dba: 0xe000151b, 0x8dbb: 0xe0001518, + 0x8dbc: 0xe0001521, 0x8dbe: 0xe0001524, + // Block 0x237, offset 0x8dc0 + 0x8dc0: 0xa0000000, 0x8dc1: 0xa0000000, 0x8dc2: 0xa0000000, 0x8dc3: 0xa0000000, + 0x8dc4: 0xa0000000, 0x8dc5: 0xa0000000, 0x8dc6: 0xa0000000, 0x8dc7: 0xa0000000, + 0x8dc8: 0xa0000000, 0x8dc9: 0xa0000000, 0x8dca: 0xa0000000, 0x8dcb: 0xa0000000, + 0x8dcc: 0xa0000000, 0x8dcd: 0xa0000000, 0x8dce: 0xa0000000, 0x8dcf: 0xa0000000, + 0x8dd0: 0x00024096, 0x8dd1: 0x00025c96, 0x8dd2: 0x00030496, 0x8dd3: 0x00026c96, + 0x8dd4: 0x00026296, 0x8dd5: 0x0002ba96, 0x8dd6: 0x0002c496, 0x8dd7: 0x0004b496, + 0x8dd8: 0x0004b696, 0x8dd9: 0xe0002bb6, + 0x8de0: 0xae608202, 0x8de1: 0xae600000, 0x8de2: 0xae608102, 0x8de3: 0xae600000, + 0x8de4: 0xae600000, 0x8de5: 0xae600000, 0x8de6: 0xae600000, + 0x8df0: 0xe0002baf, 0x8df1: 0x00022c96, 0x8df2: 0x00022a96, 0x8df3: 0x00021696, + 0x8df4: 0x00021696, 0x8df5: 0x0003f496, 0x8df6: 0x0003f696, 0x8df7: 0x0003fc96, + 0x8df8: 0x0003fe96, 0x8df9: 0x0004b096, 0x8dfa: 0x0004b296, 0x8dfb: 0x0004ac96, + 0x8dfc: 0x0004ae96, 0x8dfd: 0x0004a096, 0x8dfe: 0x0004a296, 0x8dff: 0x00049c96, + // Block 0x238, offset 0x8e00 + 0x8e00: 0xe0002d36, 0x8e01: 0xe0002d33, 0x8e02: 0xe0002d3c, 0x8e03: 0xe0002df0, + 0x8e04: 0xe0002e5d, 0x8e05: 0xe0002e92, 0x8e06: 0xe0002ebf, 0x8e07: 0xe0002ed1, + 0x8e08: 0xe0002ee0, 0x8e09: 0xe0002eef, 0x8e0a: 0xe0002efe, + 0x8e10: 0xe0002be2, 0x8e11: 0xe0002bea, 0x8e12: 0xe0002bf2, 0x8e13: 0xe0002bfa, + 0x8e14: 0xe00024a3, 0x8e15: 0xe0002c02, 0x8e16: 0xe0002c0a, 0x8e17: 0xe00024ab, + 0x8e18: 0xe00024b3, 0x8e19: 0xe0002c12, 0x8e1a: 0xe00024bb, 0x8e1b: 0xe0002c1a, + 0x8e1c: 0xe0002c22, 0x8e1d: 0xe0002c2a, 0x8e1e: 0xe00024c3, 0x8e1f: 0xe0002c32, + 0x8e20: 0xe00024cb, 0x8e21: 0xe00024d3, 0x8e22: 0xe00024db, 0x8e23: 0xe00024e3, + 0x8e24: 0xe0002c3a, 0x8e25: 0xe0002c42, 0x8e26: 0xe0002c4a, 0x8e27: 0xe00024eb, + 0x8e28: 0xe0002c52, 0x8e29: 0xe0002c5a, 0x8e2a: 0xe00024ef, 0x8e2b: 0x002c3a8c, + 0x8e2c: 0x002f7a8c, 0x8e2d: 0xe0003093, 0x8e2e: 0xe00035e8, + 0x8e30: 0x002bde9d, 0x8e31: 0x002c0a9d, 0x8e32: 0x002c3a9d, 0x8e33: 0x002c629d, + 0x8e34: 0x002c989d, 0x8e35: 0x002d089d, 0x8e36: 0x002d229d, 0x8e37: 0x002d689d, + 0x8e38: 0x002d9a9d, 0x8e39: 0x002dcc9d, 0x8e3a: 0x002dfe9d, 0x8e3b: 0x002e229d, + 0x8e3c: 0x002e829d, 0x8e3d: 0x002e9e9d, 0x8e3e: 0x002ee29d, 0x8e3f: 0x002f2c9d, + // Block 0x239, offset 0x8e40 + 0x8e40: 0x002f569d, 0x8e41: 0x002f7a9d, 0x8e42: 0x002fe69d, 0x8e43: 0x00302c9d, + 0x8e44: 0x00306c9d, 0x8e45: 0x0030be9d, 0x8e46: 0x0030e29d, 0x8e47: 0x0030f69d, + 0x8e48: 0x0031009d, 0x8e49: 0x00312a9d, 0x8e4a: 0xe00027cb, 0x8e4b: 0xe00035ac, + 0x8e4c: 0xe0002830, 0x8e4d: 0xe0002839, 0x8e4e: 0xe0000ebc, 0x8e4f: 0xe00035e5, + 0x8e50: 0x002bde8c, 0x8e51: 0x002c0a8c, 0x8e52: 0x002c3a8c, 0x8e53: 0x002c628c, + 0x8e54: 0x002c988c, 0x8e55: 0x002d088c, 0x8e56: 0x002d228c, 0x8e57: 0x002d688c, + 0x8e58: 0x002d9a8c, 0x8e59: 0x002dcc8c, 0x8e5a: 0x002dfe8c, 0x8e5b: 0x002e228c, + 0x8e5c: 0x002e828c, 0x8e5d: 0x002e9e8c, 0x8e5e: 0x002ee28c, 0x8e5f: 0x002f2c8c, + 0x8e60: 0x002f568c, 0x8e61: 0x002f7a8c, 0x8e62: 0x002fe68c, 0x8e63: 0x00302c8c, + 0x8e64: 0x00306c8c, 0x8e65: 0x0030be8c, 0x8e66: 0x0030e28c, 0x8e67: 0x0030f68c, + 0x8e68: 0x0031008c, 0x8e69: 0x00312a8c, 0x8e6a: 0xe0003597, 0x8e6b: 0xe000359a, + 0x8e70: 0x002bde9d, 0x8e71: 0x002c0a9d, 0x8e72: 0x002c3a9d, 0x8e73: 0x002c629d, + 0x8e74: 0x002c989d, 0x8e75: 0x002d089d, 0x8e76: 0x002d229d, 0x8e77: 0x002d689d, + 0x8e78: 0x002d9a9d, 0x8e79: 0x002dcc9d, 0x8e7a: 0x002dfe9d, 0x8e7b: 0x002e229d, + 0x8e7c: 0x002e829d, 0x8e7d: 0x002e9e9d, 0x8e7e: 0x002ee29d, 0x8e7f: 0x002f2c9d, + // Block 0x23a, offset 0x8e80 + 0x8e80: 0x002f569d, 0x8e81: 0x002f7a9d, 0x8e82: 0x002fe69d, 0x8e83: 0x00302c9d, + 0x8e84: 0x00306c9d, 0x8e85: 0x0030be9d, 0x8e86: 0x0030e29d, 0x8e87: 0x0030f69d, + 0x8e88: 0x0031009d, 0x8e89: 0x00312a9d, 0x8e8a: 0x002f2c9d, 0x8e8b: 0xe0000c81, + 0x8e8c: 0xe0000eb5, 0x8e8d: 0xe0000f74, 0x8e8e: 0xe00009d2, 0x8e8f: 0xe00010f0, + 0x8e90: 0xe00032a1, 0x8e91: 0xe0000a6f, 0x8e92: 0xe0000a7e, 0x8e93: 0xe0000ba4, + 0x8e94: 0xe0000c84, 0x8e95: 0xe0000d8a, 0x8e96: 0xe0000d8e, 0x8e97: 0xe0000e9b, + 0x8e98: 0xe0000f77, 0x8e99: 0xe00010a2, 0x8e9a: 0xe00010c0, + // Block 0x23b, offset 0x8ec0 + 0x8ec0: 0xa0000000, 0x8ec1: 0xa0000000, 0x8ec2: 0xa0000000, 0x8ec3: 0xa0000000, + 0x8ec4: 0xa0000000, 0x8ec5: 0xa0000000, 0x8ec6: 0xa0000000, 0x8ec7: 0xa0000000, + 0x8ec8: 0xa0000000, 0x8ec9: 0x40020020, 0x8eca: 0x40020220, 0x8ecb: 0x40020420, + 0x8ecc: 0x40020620, 0x8ecd: 0x40020820, 0x8ece: 0xa0000000, 0x8ecf: 0xa0000000, + 0x8ed0: 0xa0000000, 0x8ed1: 0xa0000000, 0x8ed2: 0xa0000000, 0x8ed3: 0xa0000000, + 0x8ed4: 0xa0000000, 0x8ed5: 0xa0000000, 0x8ed6: 0xa0000000, 0x8ed7: 0xa0000000, + 0x8ed8: 0xa0000000, 0x8ed9: 0xa0000000, 0x8eda: 0xa0000000, 0x8edb: 0xa0000000, + 0x8edc: 0xa0000000, 0x8edd: 0xa0000000, 0x8ede: 0xa0000000, 0x8edf: 0xa0000000, + 0x8ee0: 0x40021220, 0x8ee1: 0x4002ba20, 0x8ee2: 0x4003e020, 0x8ee3: 0x4004ea20, + 0x8ee4: 0x4027de20, 0x8ee5: 0x4004ec20, 0x8ee6: 0x4004e620, 0x8ee7: 0x4003d220, + 0x8ee8: 0x4003f420, 0x8ee9: 0x4003f620, 0x8eea: 0x4004d820, 0x8eeb: 0x40093820, + 0x8eec: 0x40024020, 0x8eed: 0x40021a20, 0x8eee: 0x4002e420, 0x8eef: 0x4004e220, + 0x8ef0: 0x4029cc20, 0x8ef1: 0x4029ce20, 0x8ef2: 0x4029d020, 0x8ef3: 0x4029d220, + 0x8ef4: 0x4029d420, 0x8ef5: 0x4029d620, 0x8ef6: 0x4029d820, 0x8ef7: 0x4029da20, + 0x8ef8: 0x4029dc20, 0x8ef9: 0x4029de20, 0x8efa: 0x40026c20, 0x8efb: 0x40026220, + 0x8efc: 0x40094020, 0x8efd: 0x40094220, 0x8efe: 0x40094420, 0x8eff: 0x4002c420, + // Block 0x23c, offset 0x8f00 + 0x8f00: 0x4004d620, 0x8f01: 0x002bde88, 0x8f02: 0x002c0a88, 0x8f03: 0xc3352741, + 0x8f04: 0x002c6288, 0x8f05: 0x002c9888, 0x8f06: 0x002d0888, 0x8f07: 0xc3392741, + 0x8f08: 0xc5402741, 0x8f09: 0x002d9a88, 0x8f0a: 0xc5442741, 0x8f0b: 0x002dfe88, + 0x8f0c: 0xc0030002, 0x8f0d: 0x002e8288, 0x8f0e: 0x002e9e88, 0x8f0f: 0x002ee288, + 0x8f10: 0x002f2c88, 0x8f11: 0x002f5688, 0x8f12: 0x002f7a88, 0x8f13: 0xc3432741, + 0x8f14: 0x00302c88, 0x8f15: 0xc34700d1, 0x8f16: 0x0030be88, 0x8f17: 0x0030e288, + 0x8f18: 0x0030f688, 0x8f19: 0x00310088, 0x8f1a: 0x00312a88, 0x8f1b: 0x4003f820, + 0x8f1c: 0x4004e420, 0x8f1d: 0x4003fa20, 0x8f1e: 0x40062420, 0x8f1f: 0x40021620, + 0x8f20: 0x40061e20, 0x8f21: 0x402bde20, 0x8f22: 0x402c0a20, 0x8f23: 0xc3332741, + 0x8f24: 0x402c6220, 0x8f25: 0x402c9820, 0x8f26: 0x402d0820, 0x8f27: 0xc3372741, + 0x8f28: 0xc53e2741, 0x8f29: 0x402d9a20, 0x8f2a: 0xc5422741, 0x8f2b: 0x402dfe20, + 0x8f2c: 0xc0000002, 0x8f2d: 0x402e8220, 0x8f2e: 0x402e9e20, 0x8f2f: 0x402ee220, + 0x8f30: 0x402f2c20, 0x8f31: 0x402f5620, 0x8f32: 0x402f7a20, 0x8f33: 0xc3412741, + 0x8f34: 0x40302c20, 0x8f35: 0xc34500d1, 0x8f36: 0x4030be20, 0x8f37: 0x4030e220, + 0x8f38: 0x4030f620, 0x8f39: 0x40310020, 0x8f3a: 0x40312a20, 0x8f3b: 0x4003fc20, + 0x8f3c: 0x40094820, 0x8f3d: 0x4003fe20, 0x8f3e: 0x40094c20, 0x8f3f: 0xa0000000, + // Block 0x23d, offset 0x8f40 + 0x8f40: 0xe0000983, 0x8f41: 0xe0000980, 0x8f42: 0xe00008fb, 0x8f43: 0xe00008f8, + 0x8f44: 0xe000097d, 0x8f45: 0xe000097a, 0x8f46: 0xe0000a38, 0x8f47: 0xe0000a35, + 0x8f48: 0x002c3c83, 0x8f49: 0x402c3c20, 0x8f4a: 0xe0000a4a, 0x8f4b: 0xe0000a47, + 0x8f4c: 0xe0000a44, 0x8f4d: 0xe0000a41, 0x8f4e: 0xe0000a86, 0x8f4f: 0xe0000a83, + 0x8f50: 0xe0000aaa, 0x8f51: 0xe0000aa7, 0x8f52: 0xe0000b46, 0x8f53: 0xe0000b43, + 0x8f54: 0xe0000aee, 0x8f55: 0xe0000aeb, 0x8f56: 0xe0000b2c, 0x8f57: 0xe0000b29, + 0x8f58: 0xe0000b40, 0x8f59: 0xe0000b3d, 0x8f5a: 0xe0000b1a, 0x8f5b: 0xe0000b17, + 0x8f5c: 0x002d2483, 0x8f5d: 0x402d2420, 0x8f5e: 0xe0000bb2, 0x8f5f: 0xe0000baf, + 0x8f60: 0xe0000bc4, 0x8f61: 0xe0000bc1, 0x8f62: 0xe0000bca, 0x8f63: 0xe0000bc7, + 0x8f64: 0x002d6a83, 0x8f65: 0x402d6a20, 0x8f66: 0xe0000c1b, 0x8f67: 0xe0000c18, + 0x8f68: 0xe0000c51, 0x8f69: 0xe0000c4e, 0x8f6a: 0xe0000c60, 0x8f6b: 0xe0000c5d, + 0x8f6c: 0xe0000c31, 0x8f6d: 0xe0000c2e, 0x8f6e: 0xe0000c5a, 0x8f6f: 0xe0000c57, + 0x8f70: 0xe0000c54, 0x8f71: 0x402da220, 0x8f72: 0xf0000a0a, 0x8f73: 0xf0000404, + 0x8f74: 0x002dce83, 0x8f75: 0x402dce20, 0x8f76: 0xe0000c9f, 0x8f77: 0xe0000c9c, + 0x8f78: 0x402f7220, 0x8f79: 0xe0000ccc, 0x8f7a: 0xe0000cc9, 0x8f7b: 0xe0000cd8, + 0x8f7c: 0xe0000cd5, 0x8f7d: 0xe0000cd2, 0x8f7e: 0xe0000ccf, 0x8f7f: 0xe0000d04, + // Block 0x23e, offset 0x8f80 + 0x8f80: 0xe0000cfe, 0x8f81: 0xe0000cf8, 0x8f82: 0xe0000cf5, 0x8f83: 0xe0000d51, + 0x8f84: 0xe0000d4e, 0x8f85: 0xe0000d6f, 0x8f86: 0xe0000d6c, 0x8f87: 0xe0000d5d, + 0x8f88: 0xe0000d5a, 0x8f89: 0xf0000404, 0x8f8a: 0x002eda88, 0x8f8b: 0x402eda20, + 0x8f8c: 0xe0000e2e, 0x8f8d: 0xe0000e2b, 0x8f8e: 0xe0000da0, 0x8f8f: 0xe0000d9d, + 0x8f90: 0xe0000de0, 0x8f91: 0xe0000ddd, 0x8f92: 0xe0000e93, 0x8f93: 0xe0000e8f, + 0x8f94: 0xe0000eca, 0x8f95: 0xe0000ec7, 0x8f96: 0xe0000edc, 0x8f97: 0xe0000ed9, + 0x8f98: 0xe0000ed0, 0x8f99: 0xe0000ecd, 0x8f9a: 0xe0000f1f, 0x8f9b: 0xe0000f1c, + 0x8f9c: 0x002fe883, 0x8f9d: 0x402fe820, 0x8f9e: 0xe0000f47, 0x8f9f: 0xe0000f44, + 0x8fa0: 0xe0000f33, 0x8fa1: 0xe0000f30, 0x8fa2: 0xe0000f99, 0x8fa3: 0xe0000f96, + 0x8fa4: 0xe0000f8a, 0x8fa5: 0xe0000f87, 0x8fa6: 0x00303688, 0x8fa7: 0x40303620, + 0x8fa8: 0xe000102b, 0x8fa9: 0xe0001028, 0x8faa: 0xe000103f, 0x8fab: 0xe000103c, + 0x8fac: 0x00306e83, 0x8fad: 0x40306e20, 0x8fae: 0xe0000ff9, 0x8faf: 0xe0000ff6, + 0x8fb0: 0xe0001025, 0x8fb1: 0xe0001022, 0x8fb2: 0xe0001039, 0x8fb3: 0xe0001036, + 0x8fb4: 0xe00010d8, 0x8fb5: 0xe00010d5, 0x8fb6: 0xe000110e, 0x8fb7: 0xe000110b, + 0x8fb8: 0xe0001117, 0x8fb9: 0xe000113b, 0x8fba: 0xe0001138, 0x8fbb: 0xe000114d, + 0x8fbc: 0xe000114a, 0x8fbd: 0xe0001147, 0x8fbe: 0xe0001144, 0x8fbf: 0xe0000f64, + // Block 0x23f, offset 0x8fc0 + 0x8fc0: 0xa0000000, 0x8fc1: 0xa0000000, 0x8fc2: 0xa0000000, 0x8fc3: 0xa0000000, + 0x8fc4: 0xa0000000, 0x8fc5: 0xa0000000, 0x8fc6: 0xa0000000, 0x8fc7: 0xa0000000, + 0x8fc8: 0xa0000000, 0x8fc9: 0x40020020, 0x8fca: 0x40020220, 0x8fcb: 0x40020420, + 0x8fcc: 0x40020620, 0x8fcd: 0x40020820, 0x8fce: 0xa0000000, 0x8fcf: 0xa0000000, + 0x8fd0: 0xa0000000, 0x8fd1: 0xa0000000, 0x8fd2: 0xa0000000, 0x8fd3: 0xa0000000, + 0x8fd4: 0xa0000000, 0x8fd5: 0xa0000000, 0x8fd6: 0xa0000000, 0x8fd7: 0xa0000000, + 0x8fd8: 0xa0000000, 0x8fd9: 0xa0000000, 0x8fda: 0xa0000000, 0x8fdb: 0xa0000000, + 0x8fdc: 0xa0000000, 0x8fdd: 0xa0000000, 0x8fde: 0xa0000000, 0x8fdf: 0xa0000000, + 0x8fe0: 0x40021220, 0x8fe1: 0x4002ba20, 0x8fe2: 0x4003e020, 0x8fe3: 0x4004ea20, + 0x8fe4: 0x4027de20, 0x8fe5: 0x4004ec20, 0x8fe6: 0x4004e620, 0x8fe7: 0x4003d220, + 0x8fe8: 0x4003f420, 0x8fe9: 0x4003f620, 0x8fea: 0x4004d820, 0x8feb: 0x40093820, + 0x8fec: 0x40024020, 0x8fed: 0x40021a20, 0x8fee: 0x4002e420, 0x8fef: 0x4004e220, + 0x8ff0: 0x4029cc20, 0x8ff1: 0x4029ce20, 0x8ff2: 0x4029d020, 0x8ff3: 0x4029d220, + 0x8ff4: 0x4029d420, 0x8ff5: 0x4029d620, 0x8ff6: 0x4029d820, 0x8ff7: 0x4029da20, + 0x8ff8: 0x4029dc20, 0x8ff9: 0x4029de20, 0x8ffa: 0x40026c20, 0x8ffb: 0x40026220, + 0x8ffc: 0x40094020, 0x8ffd: 0x40094220, 0x8ffe: 0x40094420, 0x8fff: 0x4002c420, + // Block 0x240, offset 0x9000 + 0x9000: 0x4004d620, 0x9001: 0x002bde88, 0x9002: 0x002c0a88, 0x9003: 0x002c3a88, + 0x9004: 0x002c6288, 0x9005: 0x002c9888, 0x9006: 0x002d0888, 0x9007: 0x002d2288, + 0x9008: 0x002d6888, 0x9009: 0x002d9a88, 0x900a: 0x002dcc88, 0x900b: 0x002dfe88, + 0x900c: 0xc0030002, 0x900d: 0x002e8288, 0x900e: 0xc5462761, 0x900f: 0x002ee288, + 0x9010: 0x002f2c88, 0x9011: 0x002f5688, 0x9012: 0x002f7a88, 0x9013: 0x002fe688, + 0x9014: 0x00302c88, 0x9015: 0x00306c88, 0x9016: 0x0030be88, 0x9017: 0x0030e288, + 0x9018: 0x0030f688, 0x9019: 0x00310088, 0x901a: 0x00312a88, 0x901b: 0x4003f820, + 0x901c: 0x4004e420, 0x901d: 0x4003fa20, 0x901e: 0x40062420, 0x901f: 0x40021620, + 0x9020: 0x40061e20, 0x9021: 0x402bde20, 0x9022: 0x402c0a20, 0x9023: 0x402c3a20, + 0x9024: 0x402c6220, 0x9025: 0x402c9820, 0x9026: 0x402d0820, 0x9027: 0x402d2220, + 0x9028: 0x402d6820, 0x9029: 0x402d9a20, 0x902a: 0x402dcc20, 0x902b: 0x402dfe20, + 0x902c: 0xc0000002, 0x902d: 0x402e8220, 0x902e: 0xc5332761, 0x902f: 0x402ee220, + 0x9030: 0x402f2c20, 0x9031: 0x402f5620, 0x9032: 0x402f7a20, 0x9033: 0x402fe620, + 0x9034: 0x40302c20, 0x9035: 0x40306c20, 0x9036: 0x4030be20, 0x9037: 0x4030e220, + 0x9038: 0x4030f620, 0x9039: 0x40310020, 0x903a: 0x40312a20, 0x903b: 0x4003fc20, + 0x903c: 0x40094820, 0x903d: 0x4003fe20, 0x903e: 0x40094c20, 0x903f: 0xa0000000, + // Block 0x241, offset 0x9040 + 0x9040: 0xe00008f5, 0x9041: 0xe00008ef, 0x9042: 0xe0000921, 0x9043: 0xe0000969, + 0x9044: 0xe000095b, 0x9045: 0xe000094d, 0x9046: 0xe00009dd, 0x9047: 0xe0000a53, + 0x9048: 0xe0000ae8, 0x9049: 0xe0000ae2, 0x904a: 0xe0000af4, 0x904b: 0xe0000b20, + 0x904c: 0xe0000c2b, 0x904d: 0xe0000c25, 0x904e: 0xe0000c37, 0x904f: 0xe0000c43, + 0x9050: 0xe0000ab3, 0x9051: 0x002ea083, 0x9052: 0xe0000d9a, 0x9053: 0xe0000d94, + 0x9054: 0xe0000da6, 0x9055: 0xe0000de6, 0x9056: 0xe0000dd2, 0x9057: 0x40093e20, + 0x9058: 0xe0000e12, 0x9059: 0xe0000fe1, 0x905a: 0xe0000fdb, 0x905b: 0xe0000fed, + 0x905c: 0xe0000fff, 0x905d: 0xe0001102, 0x905e: 0x00318888, 0x905f: 0xe0000f7b, + 0x9060: 0xe00008f2, 0x9061: 0xe00008ec, 0x9062: 0xe000091e, 0x9063: 0xe0000966, + 0x9064: 0xe0000958, 0x9065: 0xe000094a, 0x9066: 0xe00009d5, 0x9067: 0xe0000a4d, + 0x9068: 0xe0000ae5, 0x9069: 0xe0000adf, 0x906a: 0xe0000af1, 0x906b: 0xe0000b1d, + 0x906c: 0xe0000c28, 0x906d: 0xe0000c22, 0x906e: 0xe0000c34, 0x906f: 0xe0000c40, + 0x9070: 0xe0000aad, 0x9071: 0x402ea020, 0x9072: 0xe0000d97, 0x9073: 0xe0000d91, + 0x9074: 0xe0000da3, 0x9075: 0xe0000de3, 0x9076: 0xe0000dcf, 0x9077: 0x40093c20, + 0x9078: 0xe0000e0f, 0x9079: 0xe0000fde, 0x907a: 0xe0000fd8, 0x907b: 0xe0000fea, + 0x907c: 0xe0000ffc, 0x907d: 0xe00010ff, 0x907e: 0x40318820, 0x907f: 0xe0001114, + // Block 0x242, offset 0x9080 + 0x9080: 0xa0000000, 0x9081: 0xa0000000, 0x9082: 0xa0000000, 0x9083: 0xa0000000, + 0x9084: 0xa0000000, 0x9085: 0xa0000000, 0x9086: 0xa0000000, 0x9087: 0xa0000000, + 0x9088: 0xa0000000, 0x9089: 0x40020020, 0x908a: 0x40020220, 0x908b: 0x40020420, + 0x908c: 0x40020620, 0x908d: 0x40020820, 0x908e: 0xa0000000, 0x908f: 0xa0000000, + 0x9090: 0xa0000000, 0x9091: 0xa0000000, 0x9092: 0xa0000000, 0x9093: 0xa0000000, + 0x9094: 0xa0000000, 0x9095: 0xa0000000, 0x9096: 0xa0000000, 0x9097: 0xa0000000, + 0x9098: 0xa0000000, 0x9099: 0xa0000000, 0x909a: 0xa0000000, 0x909b: 0xa0000000, + 0x909c: 0xa0000000, 0x909d: 0xa0000000, 0x909e: 0xa0000000, 0x909f: 0xa0000000, + 0x90a0: 0x40021220, 0x90a1: 0x4002ba20, 0x90a2: 0x4003e020, 0x90a3: 0x4004ea20, + 0x90a4: 0x4027de20, 0x90a5: 0x4004ec20, 0x90a6: 0x4004e620, 0x90a7: 0x4003d220, + 0x90a8: 0x4003f420, 0x90a9: 0x4003f620, 0x90aa: 0x4004d820, 0x90ab: 0x40093820, + 0x90ac: 0x40024020, 0x90ad: 0x40021a20, 0x90ae: 0x4002e420, 0x90af: 0x4004e220, + 0x90b0: 0x4029cc20, 0x90b1: 0x4029ce20, 0x90b2: 0x4029d020, 0x90b3: 0x4029d220, + 0x90b4: 0x4029d420, 0x90b5: 0x4029d620, 0x90b6: 0x4029d820, 0x90b7: 0x4029da20, + 0x90b8: 0x4029dc20, 0x90b9: 0x4029de20, 0x90ba: 0x40026c20, 0x90bb: 0x40026220, + 0x90bc: 0x40094020, 0x90bd: 0x40094220, 0x90be: 0x40094420, 0x90bf: 0x4002c420, + // Block 0x243, offset 0x90c0 + 0x90c0: 0x4004d620, 0x90c1: 0xc5580071, 0x90c2: 0x002c0a88, 0x90c3: 0x002c3a88, + 0x90c4: 0x002c6288, 0x90c5: 0x002c9888, 0x90c6: 0x002d0888, 0x90c7: 0x002d2288, + 0x90c8: 0x002d6888, 0x90c9: 0x002d9a88, 0x90ca: 0x002dcc88, 0x90cb: 0x002dfe88, + 0x90cc: 0xc0030002, 0x90cd: 0x002e8288, 0x90ce: 0x002e9e88, 0x90cf: 0xc5532781, + 0x90d0: 0x002f2c88, 0x90d1: 0x002f5688, 0x90d2: 0x002f7a88, 0x90d3: 0xc54a0991, + 0x90d4: 0x00302c88, 0x90d5: 0xc55c0071, 0x90d6: 0x0030be88, 0x90d7: 0x0030bea3, + 0x90d8: 0x0030f688, 0x90d9: 0x00310088, 0x90da: 0xc54e0991, 0x90db: 0x4003f820, + 0x90dc: 0x4004e420, 0x90dd: 0x4003fa20, 0x90de: 0x40062420, 0x90df: 0x40021620, + 0x90e0: 0x40061e20, 0x90e1: 0xc5560071, 0x90e2: 0x402c0a20, 0x90e3: 0x402c3a20, + 0x90e4: 0x402c6220, 0x90e5: 0x402c9820, 0x90e6: 0x402d0820, 0x90e7: 0x402d2220, + 0x90e8: 0x402d6820, 0x90e9: 0x402d9a20, 0x90ea: 0x402dcc20, 0x90eb: 0x402dfe20, + 0x90ec: 0xc0000002, 0x90ed: 0x402e8220, 0x90ee: 0x402e9e20, 0x90ef: 0xc5502781, + 0x90f0: 0x402f2c20, 0x90f1: 0x402f5620, 0x90f2: 0x402f7a20, 0x90f3: 0xc5480991, + 0x90f4: 0x40302c20, 0x90f5: 0xc55a0071, 0x90f6: 0x4030be20, 0x90f7: 0x4030be21, + 0x90f8: 0x4030f620, 0x90f9: 0x40310020, 0x90fa: 0xc54c0991, 0x90fb: 0x4003fc20, + 0x90fc: 0x40094820, 0x90fd: 0x4003fe20, 0x90fe: 0x40094c20, 0x90ff: 0xa0000000, + // Block 0x244, offset 0x9100 + 0x9100: 0xe00008f5, 0x9101: 0xe00008ef, 0x9102: 0xe0000921, 0x9103: 0xe0000969, + 0x9104: 0x0030f083, 0x9105: 0xe000094d, 0x9106: 0xe00009dd, 0x9107: 0xe0000a53, + 0x9108: 0xe0000ae8, 0x9109: 0xe0000ae2, 0x910a: 0xe0000af4, 0x910b: 0xe0000b20, + 0x910c: 0xe0000c2b, 0x910d: 0xe0000c25, 0x910e: 0xe0000c37, 0x910f: 0xe0000c43, + 0x9110: 0xe0000ab3, 0x9111: 0xe0000d63, 0x9112: 0xe0000d9a, 0x9113: 0xe0000d94, + 0x9114: 0xe0000da6, 0x9115: 0x0030ee83, 0x9116: 0x0030f283, 0x9117: 0x40093e20, + 0x9118: 0xe0000e12, 0x9119: 0xe0000fe1, 0x911a: 0xe0000fdb, 0x911b: 0xe0000fed, + 0x911c: 0x0030f483, 0x911d: 0xe0001102, 0x911e: 0x00318888, 0x911f: 0xe0000f7b, + 0x9120: 0xe00008f2, 0x9121: 0xe00008ec, 0x9122: 0xe000091e, 0x9123: 0xe0000966, + 0x9124: 0x4030f020, 0x9125: 0xe000094a, 0x9126: 0xe00009d5, 0x9127: 0xe0000a4d, + 0x9128: 0xe0000ae5, 0x9129: 0xe0000adf, 0x912a: 0xe0000af1, 0x912b: 0xe0000b1d, + 0x912c: 0xe0000c28, 0x912d: 0xe0000c22, 0x912e: 0xe0000c34, 0x912f: 0xe0000c40, + 0x9130: 0xe0000aad, 0x9131: 0xe0000d60, 0x9132: 0xe0000d97, 0x9133: 0xe0000d91, + 0x9134: 0xe0000da3, 0x9135: 0x4030ee20, 0x9136: 0x4030f220, 0x9137: 0x40093c20, + 0x9138: 0xe0000e0f, 0x9139: 0xe0000fde, 0x913a: 0xe0000fd8, 0x913b: 0xe0000fea, + 0x913c: 0x4030f420, 0x913d: 0xe00010ff, 0x913e: 0x40318820, 0x913f: 0xe0001114, + // Block 0x245, offset 0x9140 + 0x9140: 0xe0000cfe, 0x9141: 0xe0000cf8, 0x9142: 0xe0000cf5, 0x9143: 0xe0000d51, + 0x9144: 0xe0000d4e, 0x9145: 0xe0000d6f, 0x9146: 0xe0000d6c, 0x9147: 0xe0000d5d, + 0x9148: 0xe0000d5a, 0x9149: 0xf0000404, 0x914a: 0x002eda88, 0x914b: 0x402eda20, + 0x914c: 0xe0000e2e, 0x914d: 0xe0000e2b, 0x914e: 0xe0000da0, 0x914f: 0xe0000d9d, + 0x9150: 0xe0000de0, 0x9151: 0xe0000ddd, 0x9152: 0xe0000e93, 0x9153: 0xe0000e8f, + 0x9154: 0xe0000eca, 0x9155: 0xe0000ec7, 0x9156: 0xe0000edc, 0x9157: 0xe0000ed9, + 0x9158: 0xe0000ed0, 0x9159: 0xe0000ecd, 0x915a: 0xe0000f1f, 0x915b: 0xe0000f1c, + 0x915c: 0xe0000f2d, 0x915d: 0xe0000f2a, 0x915e: 0xe0000f47, 0x915f: 0xe0000f44, + 0x9160: 0x00302683, 0x9161: 0x40302620, 0x9162: 0xe0000f99, 0x9163: 0xe0000f96, + 0x9164: 0xe0000f8a, 0x9165: 0xe0000f87, 0x9166: 0x00303688, 0x9167: 0x40303620, + 0x9168: 0xe000102b, 0x9169: 0xe0001028, 0x916a: 0xe000103f, 0x916b: 0xe000103c, + 0x916c: 0xe0000fe7, 0x916d: 0xe0000fe4, 0x916e: 0xe0000ff9, 0x916f: 0xe0000ff6, + 0x9170: 0xe0001025, 0x9171: 0xe0001022, 0x9172: 0xe0001039, 0x9173: 0xe0001036, + 0x9174: 0xe0003636, 0x9175: 0xe0003633, 0x9176: 0xe000110e, 0x9177: 0xe000110b, + 0x9178: 0xe0001117, 0x9179: 0xe000360c, 0x917a: 0xe0003609, 0x917b: 0xe0003618, + 0x917c: 0xe0003615, 0x917d: 0x00302a83, 0x917e: 0x40302a20, 0x917f: 0xe0000f64, + // Block 0x246, offset 0x9180 + 0x9180: 0x40321220, 0x9181: 0x40321a20, 0x9182: 0x40322220, 0x9183: 0x40322a20, + 0x9184: 0xe0000ad5, 0x9185: 0xe0000ad1, 0x9186: 0xe0000acd, 0x9187: 0xf0000a0a, + 0x9188: 0xf000040a, 0x9189: 0xf0000404, 0x918a: 0xf0000a0a, 0x918b: 0xf000040a, + 0x918c: 0xf0000404, 0x918d: 0xe0000947, 0x918e: 0xe0000944, 0x918f: 0xe0000c3d, + 0x9190: 0xe0000c3a, 0x9191: 0xe0000dcc, 0x9192: 0xe0000dc9, 0x9193: 0xe0000ff3, + 0x9194: 0xe0000ff0, 0x9195: 0xe000368d, 0x9196: 0xe000368a, 0x9197: 0xe000367b, + 0x9198: 0xe0003678, 0x9199: 0xe0003687, 0x919a: 0xe0003684, 0x919b: 0xe0003681, + 0x919c: 0xe000367e, 0x919d: 0x402cae20, 0x919e: 0xe000366f, 0x919f: 0xe000366c, + 0x91a0: 0xe0000976, 0x91a1: 0xe0000972, 0x91a2: 0xe00009f4, 0x91a3: 0xe00009ef, + 0x91a4: 0x002d3a88, 0x91a5: 0x402d3a20, 0x91a6: 0xe0000bbe, 0x91a7: 0xe0000bbb, + 0x91a8: 0xe0000c99, 0x91a9: 0xe0000c96, 0x91aa: 0xe0000e20, 0x91ab: 0xe0000e1d, + 0x91ac: 0xe0000e27, 0x91ad: 0xe0000e23, 0x91ae: 0xe0001162, 0x91af: 0xe000115f, + 0x91b0: 0xe0000c8d, 0x91b1: 0xe00032b0, 0x91b2: 0xe00032ad, 0x91b3: 0xe00032aa, + 0x91b4: 0xe0000bac, 0x91b5: 0xe0000ba9, 0x91b6: 0x002d7888, 0x91b7: 0x00319488, + 0x91b8: 0xe0000d57, 0x91b9: 0xe0000d54, 0x91ba: 0xe0000954, 0x91bb: 0xe0000950, + 0x91bc: 0xe00009ea, 0x91bd: 0xe00009e5, 0x91be: 0xe0000e19, 0x91bf: 0xe0000e15, + // Block 0x247, offset 0x91c0 + 0x91c0: 0xe000098f, 0x91c1: 0xe000098c, 0x91c2: 0xe0000995, 0x91c3: 0xe0000992, + 0x91c4: 0xe0000b62, 0x91c5: 0xe0000b5f, 0x91c6: 0xe0000b68, 0x91c7: 0xe0000b65, + 0x91c8: 0xe0000c6c, 0x91c9: 0xe0000c69, 0x91ca: 0xe0000c72, 0x91cb: 0xe0000c6f, + 0x91cc: 0xe0000e4a, 0x91cd: 0xe0000e47, 0x91ce: 0xe0000e50, 0x91cf: 0xe0000e4d, + 0x91d0: 0xe0000ee8, 0x91d1: 0xe0000ee5, 0x91d2: 0xe0000eee, 0x91d3: 0xe0000eeb, + 0x91d4: 0xe0001053, 0x91d5: 0xe0001050, 0x91d6: 0xe0001059, 0x91d7: 0xe0001056, + 0x91d8: 0xe0000f61, 0x91d9: 0xe0000f5e, 0x91da: 0xe0000fa5, 0x91db: 0xe0000fa2, + 0x91dc: 0x00312288, 0x91dd: 0x40312220, 0x91de: 0xe0000bf4, 0x91df: 0xe0000bf1, + 0x91e0: 0x002ebc88, 0x91e1: 0x402c8c20, 0x91e2: 0x002f2288, 0x91e3: 0x402f2220, + 0x91e4: 0x00314088, 0x91e5: 0x40314020, 0x91e6: 0xe000096f, 0x91e7: 0xe000096c, + 0x91e8: 0xe0000b32, 0x91e9: 0xe0000b2f, 0x91ea: 0xe0003675, 0x91eb: 0xe0003672, + 0x91ec: 0xe0003663, 0x91ed: 0xe0003660, 0x91ee: 0xe0000e04, 0x91ef: 0xe0000e01, + 0x91f0: 0xe0000e0b, 0x91f1: 0xe0000e07, 0x91f2: 0xe0001129, 0x91f3: 0xe0001126, + 0x91f4: 0x402e5e20, 0x91f5: 0x402ed020, 0x91f6: 0x40305a20, 0x91f7: 0x402dd420, + 0x91f8: 0xe0000abf, 0x91f9: 0xe0000ec4, 0x91fa: 0x002be888, 0x91fb: 0x002c4488, + 0x91fc: 0x402c4420, 0x91fd: 0x002e3888, 0x91fe: 0x00303e88, 0x91ff: 0x402ffc20, + // Block 0x248, offset 0x9200 + 0x9200: 0xe0000d24, 0x9201: 0xe0000d21, 0x9202: 0xe0000d2a, 0x9203: 0xe0000d27, + 0x9204: 0xe0000d69, 0x9205: 0xe0000d66, 0x9206: 0xe0000d7b, 0x9207: 0xe0000d78, + 0x9208: 0xe0000d87, 0x9209: 0xe0000d84, 0x920a: 0xe0000d81, 0x920b: 0xe0000d7e, + 0x920c: 0xe0003651, 0x920d: 0xe000364e, 0x920e: 0xe000365d, 0x920f: 0xe000365a, + 0x9210: 0xe0000e3d, 0x9211: 0xe0000e39, 0x9212: 0xe0000e35, 0x9213: 0xe0000e31, + 0x9214: 0xe0000ea7, 0x9215: 0xe0000ea4, 0x9216: 0xe0000ead, 0x9217: 0xe0000eaa, + 0x9218: 0xe0000ed6, 0x9219: 0xe0000ed3, 0x921a: 0xe0000ef4, 0x921b: 0xe0000ef1, + 0x921c: 0xe0000efb, 0x921d: 0xe0000ef7, 0x921e: 0xe0000f02, 0x921f: 0xe0000eff, + 0x9220: 0xe0000f41, 0x9221: 0xe0000f3e, 0x9222: 0xe0000f53, 0x9223: 0xe0000f50, + 0x9224: 0xe0000f26, 0x9225: 0xe0000f22, 0x9226: 0xe0003606, 0x9227: 0xe0003603, + 0x9228: 0xe0000f5a, 0x9229: 0xe0000f56, 0x922a: 0xe0000f93, 0x922b: 0xe0000f90, + 0x922c: 0xe0000f9f, 0x922d: 0xe0000f9c, 0x922e: 0xe0000fb1, 0x922f: 0xe0000fae, + 0x9230: 0xe0000fab, 0x9231: 0xe0000fa8, 0x9232: 0xe0001093, 0x9233: 0xe0001090, + 0x9234: 0xe000109f, 0x9235: 0xe000109c, 0x9236: 0xe0001099, 0x9237: 0xe0001096, + 0x9238: 0xe0001032, 0x9239: 0xe000102e, 0x923a: 0xe000368d, 0x923b: 0xe000368a, + 0x923c: 0xe00010a9, 0x923d: 0xe00010a6, 0x923e: 0xe00010af, 0x923f: 0xe00010ac, + // Block 0x249, offset 0x9240 + 0x9240: 0xe0003630, 0x9241: 0xe000362d, 0x9242: 0xe000362a, 0x9243: 0xe0003627, + 0x9244: 0xe000363f, 0x9245: 0xe000363c, 0x9246: 0xe0003645, 0x9247: 0xe0003642, + 0x9248: 0xe000364b, 0x9249: 0xe0003648, 0x924a: 0xe00010fc, 0x924b: 0xe00010f9, + 0x924c: 0xe00010f6, 0x924d: 0xe00010f3, 0x924e: 0xe0001123, 0x924f: 0xe0001120, + 0x9250: 0xe0003612, 0x9251: 0xe000360f, 0x9252: 0xe000361e, 0x9253: 0xe000361b, + 0x9254: 0xe0003624, 0x9255: 0xe0003621, 0x9256: 0xe0000c15, 0x9257: 0xe0000f8d, + 0x9258: 0xe0003639, 0x9259: 0xe0001111, 0x925a: 0xf0000404, 0x925b: 0xe0000f70, + 0x925c: 0x40300420, 0x925d: 0x40300620, 0x925e: 0xe0000f7f, 0x925f: 0x402c9620, + 0x9260: 0xe000099b, 0x9261: 0xe0000998, 0x9262: 0xe0000989, 0x9263: 0xe0000986, + 0x9264: 0xe0000928, 0x9265: 0xe0000924, 0x9266: 0xe0000930, 0x9267: 0xe000092c, + 0x9268: 0xe0000940, 0x9269: 0xe000093c, 0x926a: 0xe0000938, 0x926b: 0xe0000934, + 0x926c: 0xe00009aa, 0x926d: 0xe00009a6, 0x926e: 0xe0000902, 0x926f: 0xe00008fe, + 0x9270: 0xe000090a, 0x9271: 0xe0000906, 0x9272: 0xe000091a, 0x9273: 0xe0000916, + 0x9274: 0xe0000912, 0x9275: 0xe000090e, 0x9276: 0xe00009a2, 0x9277: 0xe000099e, + 0x9278: 0xe0000b6e, 0x9279: 0xe0000b6b, 0x927a: 0xe0000b5c, 0x927b: 0xe0000b59, + 0x927c: 0xe0000b26, 0x927d: 0xe0000b23, 0x927e: 0xe0000afb, 0x927f: 0xe0000af7, + // Block 0x24a, offset 0x9280 + 0x9280: 0xe0000b03, 0x9281: 0xe0000aff, 0x9282: 0xe0000b13, 0x9283: 0xe0000b0f, + 0x9284: 0xe0000b0b, 0x9285: 0xe0000b07, 0x9286: 0xe0000b75, 0x9287: 0xe0000b71, + 0x9288: 0xe0000c66, 0x9289: 0xe0000c63, 0x928a: 0xe0000c78, 0x928b: 0xe0000c75, + 0x928c: 0xe0000e84, 0x928d: 0xe0000e81, 0x928e: 0xe0000e44, 0x928f: 0xe0000e41, + 0x9290: 0xe0000dad, 0x9291: 0xe0000da9, 0x9292: 0xe0000db5, 0x9293: 0xe0000db1, + 0x9294: 0xe0000dc5, 0x9295: 0xe0000dc1, 0x9296: 0xe0003657, 0x9297: 0xe0003654, + 0x9298: 0xe0000e8b, 0x9299: 0xe0000e87, 0x929a: 0xe0000e5d, 0x929b: 0xe0000e59, + 0x929c: 0xe0000e65, 0x929d: 0xe0000e61, 0x929e: 0xe0000e75, 0x929f: 0xe0000e71, + 0x92a0: 0xe0003669, 0x92a1: 0xe0003666, 0x92a2: 0xe0000e7d, 0x92a3: 0xe0000e79, + 0x92a4: 0xe000108d, 0x92a5: 0xe000108a, 0x92a6: 0xe000104d, 0x92a7: 0xe000104a, + 0x92a8: 0xe0001066, 0x92a9: 0xe0001062, 0x92aa: 0xe000106e, 0x92ab: 0xe000106a, + 0x92ac: 0xe000107e, 0x92ad: 0xe000107a, 0x92ae: 0xe0001076, 0x92af: 0xe0001072, + 0x92b0: 0xe0001086, 0x92b1: 0xe0001082, 0x92b2: 0xe0001108, 0x92b3: 0xe0001105, + 0x92b4: 0xe0001135, 0x92b5: 0xe0001132, 0x92b6: 0xe000112f, 0x92b7: 0xe000112c, + 0x92b8: 0xe000111d, 0x92b9: 0xe000111a, 0x92ba: 0xe0000d0a, 0x92bb: 0xe0000d07, + 0x92bc: 0x0030d888, 0x92bd: 0x4030d820, 0x92be: 0x00312088, 0x92bf: 0x40312020, + // Block 0x24b, offset 0x92c0 + 0x92c0: 0xe0000024, 0x92c1: 0xe0000029, 0x92c2: 0xe000002e, 0x92c3: 0xe0000033, + 0x92c4: 0xe0000038, 0x92c5: 0xe000003d, 0x92c6: 0xe0000042, 0x92c7: 0xe0000047, + 0x92c8: 0xf0001f04, 0x92c9: 0xf0001f04, 0x92ca: 0xf0001f04, 0x92cb: 0xf0001f04, + 0x92cc: 0xf0001f04, 0x92cd: 0xf0001f04, 0x92ce: 0xf0001f04, 0x92cf: 0xf0001f04, + 0x92d0: 0xf0001f04, 0x92d1: 0xf0000404, 0x92d2: 0xf0000404, 0x92d3: 0xf0000404, + 0x92d4: 0xf0000404, 0x92d5: 0xf0000404, 0x92d6: 0xf0000404, 0x92d7: 0xf0000404, + 0x92d8: 0xf0000404, 0x92d9: 0xf0000404, 0x92da: 0xf0000404, 0x92db: 0xf0000404, + 0x92dc: 0xf0000404, 0x92dd: 0xf0000404, 0x92de: 0xf0000404, 0x92df: 0xf0000404, + 0x92e0: 0xf0000404, 0x92e1: 0xf0000404, 0x92e2: 0xf0000404, 0x92e3: 0xf0000404, + 0x92e4: 0xf0000404, 0x92e5: 0xf0000404, 0x92e6: 0xf0000404, 0x92e7: 0xf0000404, + 0x92e8: 0xf0000404, 0x92e9: 0xf0000404, 0x92ea: 0xf0000404, 0x92eb: 0xf0000404, + 0x92ec: 0xf0000404, 0x92ed: 0xf0000404, 0x92ee: 0xf0000404, 0x92ef: 0xf0000404, + 0x92f0: 0xf0000404, 0x92f1: 0xf0000404, 0x92f2: 0xe0002c46, 0x92f3: 0xf0000404, + 0x92f4: 0xf0000404, 0x92f5: 0xe0002c56, 0x92f6: 0x002bde8c, 0x92f7: 0x002c0a8c, + 0x92f8: 0x002c3a8c, 0x92f9: 0x002c628c, 0x92fa: 0x002c988c, 0x92fb: 0x002d088c, + 0x92fc: 0x002d228c, 0x92fd: 0x002d688c, 0x92fe: 0x002d9a8c, 0x92ff: 0x002dcc8c, + // Block 0x24c, offset 0x9300 + 0x9300: 0xf0001d1c, 0x9301: 0xf0001d1c, 0x9302: 0xf0001d1c, 0x9303: 0xf0001d1c, + 0x9304: 0xf0001d1c, 0x9305: 0xf0001d1d, 0x9306: 0xf0001d1d, 0x9307: 0xf0001d1d, + 0x9308: 0xe0000a6b, 0x9309: 0xe0000cb4, 0x930a: 0xf0001d1c, 0x930b: 0xf0001d1c, + 0x930c: 0xf0001d1c, 0x930d: 0xf0001c1c, 0x930e: 0xf0001c1c, 0x930f: 0xf0001c1c, + 0x9310: 0xe00027ce, 0x9311: 0xe0000cb9, 0x9312: 0xe0000d36, 0x9313: 0xe0000be3, + 0x9314: 0xe0000fc5, 0x9315: 0xf0001c1c, 0x9316: 0xf0001c1c, 0x9317: 0xf0001c1c, + 0x9318: 0xf0001c1c, 0x9319: 0xf0001c1c, 0x931a: 0xf0001c1c, 0x931b: 0xf0001c1c, + 0x931c: 0xf0001c1c, 0x931d: 0xf0001c1c, 0x931e: 0xf0001c1c, 0x931f: 0xe0000d3e, + 0x9320: 0xe0000a72, 0x9321: 0xf0001c1c, 0x9322: 0xe0000cbd, 0x9323: 0xe0000d42, + 0x9324: 0xe0000a76, 0x9325: 0xf0001c1c, 0x9326: 0xe0000cc1, 0x9327: 0xe0000d2d, + 0x9328: 0xe0000d31, 0x9329: 0xf0001c1d, 0x932a: 0xe0000cc5, 0x932b: 0xe0000d4a, + 0x932c: 0xe0000be7, 0x932d: 0xe0000f0b, 0x932e: 0xe0000f0f, 0x932f: 0xe0000f15, + 0x9330: 0xf0001c1c, 0x9331: 0xf0001c1c, 0x9332: 0xf0001c1c, 0x9333: 0xf0001c1c, + 0x9334: 0xf0001d1c, 0x9335: 0xf0001d1c, 0x9336: 0xf0001d1c, 0x9337: 0xf0001d1c, + 0x9338: 0xf0001d1c, 0x9339: 0xf0001d1d, 0x933a: 0xe00035df, 0x933b: 0xe00035cd, + 0x933c: 0xe0003600, 0x933d: 0xe00035af, 0x933e: 0xe0002812, 0x933f: 0xe00035b2, + // Block 0x24d, offset 0x9340 + 0x9340: 0xf0001d1c, 0x9341: 0xf0001d1d, 0x9342: 0xe00009b7, 0x9343: 0xf0001c1d, + 0x9344: 0xf0001c1c, 0x9345: 0xf0001c1c, 0x9346: 0xe0000a66, 0x9347: 0xe0000a7a, + 0x9348: 0xf0001d1c, 0x9349: 0xf0001c1d, 0x934a: 0xf0001c1c, 0x934b: 0xf0001d1d, + 0x934c: 0xf0001c1c, 0x934d: 0xf0001d1d, 0x934e: 0xf0001d1d, 0x934f: 0xf0001c1c, + 0x9350: 0xf0001c1c, 0x9351: 0xf0001c1c, 0x9352: 0xe0000d0d, 0x9353: 0xf0001c1c, + 0x9354: 0xf0001c1c, 0x9355: 0xe0000d3a, 0x9356: 0xe0000d46, 0x9357: 0xf0001d1d, + 0x9358: 0xe0000eb0, 0x9359: 0xe0000eb8, 0x935a: 0xf0001d1d, 0x935b: 0xf0001c1c, + 0x935c: 0xf0001c1d, 0x935d: 0xe00035e2, 0x935e: 0xe00010b2, 0x935f: 0xe00009c8, + 0x9360: 0xf0001f04, 0x9361: 0xf0001f04, 0x9362: 0xf0001f04, 0x9363: 0xf0001f04, + 0x9364: 0xf0001f04, 0x9365: 0xf0001f04, 0x9366: 0xf0001f04, 0x9367: 0xf0001f04, + 0x9368: 0xf0001f04, 0x9369: 0xf0000404, 0x936a: 0xf0000404, 0x936b: 0xf0000404, + 0x936c: 0xf0000404, 0x936d: 0xf0000404, 0x936e: 0xf0000404, 0x936f: 0xf0000404, + 0x9370: 0xf0000404, 0x9371: 0xf0000404, 0x9372: 0xf0000404, 0x9373: 0xf0000404, + 0x9374: 0xf0000404, 0x9375: 0xf0000404, 0x9376: 0xf0000404, 0x9377: 0xf0000404, + 0x9378: 0xf0000404, 0x9379: 0xf0000404, 0x937a: 0xf0000404, 0x937b: 0xf0000404, + 0x937c: 0xf0000404, 0x937d: 0xf0000404, 0x937e: 0xf0000404, 0x937f: 0xe0000bdf, + // Block 0x24e, offset 0x9380 + 0x9380: 0xf0001f04, 0x9381: 0xf0001f04, 0x9382: 0xf0001f04, 0x9383: 0xf0001f04, + 0x9384: 0xf0001f04, 0x9385: 0xf0001f04, 0x9386: 0xf0001f04, 0x9387: 0xf0001f04, + 0x9388: 0xf0001f04, 0x9389: 0xf0001f04, 0x938a: 0xf0001f04, + 0x9390: 0xf0000a04, 0x9391: 0xf0000a04, 0x9392: 0xf0000a04, 0x9393: 0xf0000a04, + 0x9394: 0xf0000a04, 0x9395: 0xf0000a04, 0x9396: 0xf0000a04, 0x9397: 0xf0000a04, + 0x9398: 0xf0000a04, 0x9399: 0xf0000a04, 0x939a: 0xf0000a04, 0x939b: 0xf0000a04, + 0x939c: 0xf0000a04, 0x939d: 0xf0000a04, 0x939e: 0xf0000a04, 0x939f: 0xf0000a04, + 0x93a0: 0xf0000a04, 0x93a1: 0xf0000a04, 0x93a2: 0xf0000a04, 0x93a3: 0xf0000a04, + 0x93a4: 0xf0000a04, 0x93a5: 0xf0000a04, 0x93a6: 0xe0002c4a, 0x93a7: 0xf0000a04, + 0x93a8: 0xf0000a04, 0x93a9: 0xe0002c5a, 0x93aa: 0xf0000a04, 0x93ab: 0x002c3a8c, + 0x93ac: 0x002f7a8c, 0x93ad: 0xf0000c0c, 0x93ae: 0xe00035e8, + 0x93b0: 0x002bde9d, 0x93b1: 0x002c0a9d, 0x93b2: 0x002c3a9d, 0x93b3: 0x002c629d, + 0x93b4: 0x002c989d, 0x93b5: 0x002d089d, 0x93b6: 0x002d229d, 0x93b7: 0x002d689d, + 0x93b8: 0x002d9a9d, 0x93b9: 0x002dcc9d, 0x93ba: 0x002dfe9d, 0x93bb: 0x002e229d, + 0x93bc: 0x002e829d, 0x93bd: 0x002e9e9d, 0x93be: 0x002ee29d, 0x93bf: 0x002f2c9d, + // Block 0x24f, offset 0x93c0 + 0x93c0: 0x002f569d, 0x93c1: 0x002f7a9d, 0x93c2: 0x002fe69d, 0x93c3: 0x00302c9d, + 0x93c4: 0x00306c9d, 0x93c5: 0x0030be9d, 0x93c6: 0x0030e29d, 0x93c7: 0x0030f69d, + 0x93c8: 0x0031009d, 0x93c9: 0x00312a9d, 0x93ca: 0xf0001d1d, 0x93cb: 0xf0001d1d, + 0x93cc: 0xf0001d1d, 0x93cd: 0xf0001d1d, 0x93ce: 0xe0000ebc, 0x93cf: 0xe00035e5, + 0x93d0: 0x002bde8c, 0x93d1: 0x002c0a8c, 0x93d2: 0x002c3a8c, 0x93d3: 0x002c628c, + 0x93d4: 0x002c988c, 0x93d5: 0x002d088c, 0x93d6: 0x002d228c, 0x93d7: 0x002d688c, + 0x93d8: 0x002d9a8c, 0x93d9: 0x002dcc8c, 0x93da: 0x002dfe8c, 0x93db: 0x002e228c, + 0x93dc: 0x002e828c, 0x93dd: 0x002e9e8c, 0x93de: 0x002ee28c, 0x93df: 0x002f2c8c, + 0x93e0: 0x002f568c, 0x93e1: 0x002f7a8c, 0x93e2: 0x002fe68c, 0x93e3: 0x00302c8c, + 0x93e4: 0x00306c8c, 0x93e5: 0x0030be8c, 0x93e6: 0x0030e28c, 0x93e7: 0x0030f68c, + 0x93e8: 0x0031008c, 0x93e9: 0x00312a8c, 0x93ea: 0xf0001414, 0x93eb: 0xf0001414, + 0x93f0: 0x002bde9d, 0x93f1: 0x002c0a9d, 0x93f2: 0x002c3a9d, 0x93f3: 0x002c629d, + 0x93f4: 0x002c989d, 0x93f5: 0x002d089d, 0x93f6: 0x002d229d, 0x93f7: 0x002d689d, + 0x93f8: 0x002d9a9d, 0x93f9: 0x002dcc9d, 0x93fa: 0x002dfe9d, 0x93fb: 0x002e229d, + 0x93fc: 0x002e829d, 0x93fd: 0x002e9e9d, 0x93fe: 0x002ee29d, 0x93ff: 0x002f2c9d, + // Block 0x250, offset 0x9400 + 0x9400: 0xa0000000, 0x9401: 0xa0000000, 0x9402: 0xa0000000, 0x9403: 0xa0000000, + 0x9404: 0xa0000000, 0x9406: 0x40096620, 0x9407: 0x40096a20, + 0x9408: 0x40070820, 0x9409: 0x4004f220, 0x940a: 0x4004f620, 0x940b: 0x4027e620, + 0x940c: 0x40024820, 0x940d: 0x40024a20, 0x940e: 0x40070e20, 0x940f: 0x40071020, + 0x9410: 0xae600000, 0x9411: 0xae600000, 0x9412: 0xae600000, 0x9413: 0xae600000, + 0x9414: 0xae600000, 0x9415: 0xae600000, 0x9416: 0xae600000, 0x9417: 0xae600000, + 0x9418: 0xa1e00000, 0x9419: 0xa1f00000, 0x941a: 0xa2000000, 0x941b: 0x40026420, + 0x941e: 0x40027020, 0x941f: 0x4002cc20, + 0x9420: 0x403aa220, 0x9421: 0x40393a20, 0x9422: 0x40393620, 0x9423: 0x40393a21, + 0x9424: 0x40393a25, 0x9425: 0x40393a23, 0x9426: 0x00393b44, 0x9427: 0xc55e0151, + 0x9428: 0x40393c20, 0x9429: 0x403a8823, 0x942a: 0x40395620, 0x942b: 0x40395820, + 0x942c: 0x40396420, 0x942d: 0x40397220, 0x942e: 0x40397420, 0x942f: 0x40398820, + 0x9430: 0x40398a20, 0x9431: 0x4039a420, 0x9432: 0x4039a620, 0x9433: 0x4039c620, + 0x9434: 0x4039c820, 0x9435: 0x4039dc20, 0x9436: 0x4039de20, 0x9437: 0x4039e620, + 0x9438: 0x4039e820, 0x9439: 0x4039ee20, 0x943a: 0x4039f020, 0x943b: 0x403a3820, + 0x943c: 0x403a3a20, 0x943d: 0x403a9c20, 0x943e: 0x403a9e20, 0x943f: 0x403aa020, + // Block 0x251, offset 0x9440 + 0x9440: 0xa0000000, 0x9441: 0x4039fc20, 0x9442: 0x403a1220, 0x9443: 0x403a1c23, + 0x9444: 0x403a4020, 0x9445: 0x403a4e20, 0x9446: 0x403a5620, 0x9447: 0x403a8820, + 0x9448: 0xc5620171, 0x9449: 0xc5660171, 0x944a: 0xc5680171, 0x944b: 0xa000b002, + 0x944c: 0xa000b202, 0x944d: 0xa000b102, 0x944e: 0xa1e0ad02, 0x944f: 0xa000af02, + 0x9450: 0xa000ae02, 0x9451: 0xa210ba02, 0x9452: 0xa220bc02, 0x9453: 0xae60bd02, + 0x9454: 0xae60be02, 0x9455: 0xadc0bf02, 0x9456: 0xadc0c102, 0x9457: 0xae60c202, + 0x9458: 0xae60c302, 0x9459: 0xae60c402, 0x945a: 0xae60c502, 0x945b: 0xae60c602, + 0x945c: 0xadc0c702, 0x945d: 0xae60c802, 0x945e: 0xae60c902, 0x945f: 0xadc0c002, + 0x9460: 0xe000015e, 0x9461: 0xe00001e6, 0x9462: 0xe0000301, 0x9463: 0xe00003db, + 0x9464: 0xe00004b6, 0x9465: 0xe0000580, 0x9466: 0xe000064b, 0x9467: 0xe00006f3, + 0x9468: 0xe000079f, 0x9469: 0xe0000844, 0x946a: 0x4004ee20, 0x946b: 0x40024c20, + 0x946c: 0x40024e20, 0x946d: 0x4004de20, 0x946e: 0x40393a20, 0x946f: 0x403a1020, + 0x9470: 0xa230d102, 0x9471: 0x40393821, 0x9472: 0x40393a22, 0x9473: 0x40393a24, + 0x9474: 0x00391c84, 0x9475: 0xf0000404, 0x9476: 0xf0000404, 0x9477: 0xf0000404, + 0x9478: 0xe0003780, 0x9479: 0x40395a20, 0x947a: 0x40395c20, 0x947b: 0x40393e20, + 0x947c: 0x40395e20, 0x947d: 0x40396020, 0x947e: 0x40394020, 0x947f: 0x40396220, + // Block 0x252, offset 0x9480 + 0x9480: 0x40394220, 0x9481: 0x40397620, 0x9482: 0x40397820, 0x9483: 0x40396620, + 0x9484: 0x40396820, 0x9485: 0x40397a20, 0x9486: 0x40396a20, 0x9487: 0x40396e20, + 0x9488: 0x40398c20, 0x9489: 0x40398e20, 0x948a: 0x40399020, 0x948b: 0x40399220, + 0x948c: 0x40399420, 0x948d: 0x40399620, 0x948e: 0x40399820, 0x948f: 0x40399a20, + 0x9490: 0x40399c20, 0x9491: 0x4039a820, 0x9492: 0x4039aa20, 0x9493: 0x4039ac20, + 0x9494: 0x4039ae20, 0x9495: 0x4039b020, 0x9496: 0x4039b220, 0x9497: 0x4039b420, + 0x9498: 0x4039b620, 0x9499: 0x4039b820, 0x949a: 0x4039ca20, 0x949b: 0x4039cc20, + 0x949c: 0x4039ce20, 0x949d: 0x4039e020, 0x949e: 0x4039e220, 0x949f: 0x4039ea20, + 0x94a0: 0x4039f220, 0x94a1: 0x4039fe20, 0x94a2: 0x403a0020, 0x94a3: 0x403a0220, + 0x94a4: 0x403a0420, 0x94a5: 0x403a0820, 0x94a6: 0x403a0a20, 0x94a7: 0x403a1420, + 0x94a8: 0x403a1620, 0x94a9: 0x403a1c20, 0x94aa: 0x403a1c21, 0x94ab: 0x403a1c22, + 0x94ac: 0x403a1c24, 0x94ad: 0x403a1c25, 0x94ae: 0x403a1c26, 0x94af: 0x403a2a20, + 0x94b0: 0x403a2c20, 0x94b1: 0x403a2e20, 0x94b2: 0x403a3020, 0x94b3: 0x403a3220, + 0x94b4: 0x403a3420, 0x94b5: 0x403a4220, 0x94b6: 0x403a4420, 0x94b7: 0x403a4620, + 0x94b8: 0x403a4820, 0x94b9: 0x403a6020, 0x94ba: 0x403a5820, 0x94bb: 0x403a5a20, + 0x94bc: 0x403a5c20, 0x94bd: 0x403a5e20, 0x94be: 0x403a8826, 0x94bf: 0x40396c20, + // Block 0x253, offset 0x94c0 + 0x94c0: 0x403a8825, 0x94c1: 0x403a8822, 0x94c2: 0xe0003777, 0x94c3: 0x403a8824, + 0x94c4: 0x403a7620, 0x94c5: 0x403a7820, 0x94c6: 0x403a7a20, 0x94c7: 0x403a7c20, + 0x94c8: 0x403a7e20, 0x94c9: 0x403a8020, 0x94ca: 0x403a8220, 0x94cb: 0x403a8420, + 0x94cc: 0xc5640171, 0x94cd: 0x403a9226, 0x94ce: 0x403a9227, 0x94cf: 0x403a8620, + 0x94d0: 0x403a9224, 0x94d1: 0x403a9225, 0x94d2: 0x403a9222, 0x94d3: 0xe00037b6, + 0x94d4: 0x4002e820, 0x94d5: 0xc56a0171, 0x94d6: 0xae600000, 0x94d7: 0xae600000, + 0x94d8: 0xae600000, 0x94d9: 0xae600000, 0x94da: 0xae600000, 0x94db: 0xae600000, + 0x94dc: 0xae600000, 0x94dd: 0xa0000000, 0x94de: 0x40071220, 0x94df: 0xae600000, + 0x94e0: 0xae600000, 0x94e1: 0xae600000, 0x94e2: 0xae600000, 0x94e3: 0xadc00000, + 0x94e4: 0xae600000, 0x94e5: 0x003a7484, 0x94e6: 0x003a9084, 0x94e7: 0xae600000, + 0x94e8: 0xae600000, 0x94e9: 0x40071420, 0x94ea: 0xadc00000, 0x94eb: 0xae600000, + 0x94ec: 0xae600000, 0x94ed: 0xadc00000, 0x94ee: 0x40399e20, 0x94ef: 0x4039ba20, + 0x94f0: 0xe0000161, 0x94f1: 0xe00001e9, 0x94f2: 0xe0000304, 0x94f3: 0xe00003de, + 0x94f4: 0xe00004b9, 0x94f5: 0xe0000583, 0x94f6: 0xe000064e, 0x94f7: 0xe00006f6, + 0x94f8: 0xe00007a2, 0x94f9: 0xe0000847, 0x94fa: 0x4039d020, 0x94fb: 0x4039e420, + 0x94fc: 0x4039f420, 0x94fd: 0xe0001553, 0x94fe: 0xe0001779, 0x94ff: 0x403a7020, + // Block 0x254, offset 0x9500 + 0x9500: 0x00396e97, 0x9501: 0x00396e98, 0x9502: 0x0039969a, 0x9503: 0x00399699, + 0x9504: 0x0039949a, 0x9505: 0x00399499, 0x9506: 0x0039989a, 0x9507: 0x00399899, + 0x9508: 0x00398c9a, 0x9509: 0x00398c99, 0x950a: 0x0039b69a, 0x950b: 0x0039b699, + 0x950c: 0x0039a89a, 0x950d: 0x0039a899, 0x950e: 0x003a1c9a, 0x950f: 0x003a1c99, + 0x9510: 0x003a1c97, 0x9511: 0x003a1c98, 0x9512: 0x003a2a9a, 0x9513: 0x003a2a99, + 0x9514: 0x003a2a97, 0x9515: 0x003a2a98, 0x9516: 0x003a329a, 0x9517: 0x003a3299, + 0x9518: 0x003a3297, 0x9519: 0x003a3298, 0x951a: 0x003a2e9a, 0x951b: 0x003a2e99, + 0x951c: 0x003a2e97, 0x951d: 0x003a2e98, 0x951e: 0x003a589a, 0x951f: 0x003a5899, + 0x9520: 0x003a5a9a, 0x9521: 0x003a5a99, 0x9522: 0x003a5a97, 0x9523: 0x003a5a98, + 0x9524: 0xe0003774, 0x9525: 0xe0003771, 0x9526: 0x003a6c9a, 0x9527: 0x003a6c99, + 0x9528: 0x003a6c97, 0x9529: 0x003a6c98, 0x952a: 0x003a6a9a, 0x952b: 0x003a6a99, + 0x952c: 0x003a6a97, 0x952d: 0x003a6a98, 0x952e: 0x003aaa9a, 0x952f: 0x003aaa99, + 0x9530: 0xe00037bc, 0x9531: 0xe00037b9, 0x9532: 0x40071820, 0x9533: 0x40071a20, + 0x9534: 0x40071c20, 0x9535: 0x40071e20, 0x9536: 0x40072020, 0x9537: 0x40072220, + 0x9538: 0x40072420, 0x9539: 0x40072620, 0x953a: 0x40072820, 0x953b: 0x40072a20, + 0x953c: 0x40072c20, 0x953d: 0x40072e20, 0x953e: 0x40073020, 0x953f: 0x40073220, + // Block 0x255, offset 0x9540 + 0x9540: 0xe000155f, 0x9541: 0xe0001565, 0x9542: 0xe000157a, 0x9543: 0xe00015b0, + 0x9544: 0xe00015b6, 0x9545: 0xf0001a1a, 0x9546: 0xf0001a1a, 0x9547: 0xf0001a1a, + 0x9548: 0xf0001a1a, 0x9549: 0xe0002894, 0x954a: 0xe00036a5, 0x954b: 0xf0001a1a, + 0x954c: 0xf0001a1a, 0x954d: 0xf0001a1a, 0x954e: 0xf0001a1a, 0x954f: 0xe000289a, + 0x9550: 0xe00036b1, 0x9551: 0xf0001a1a, 0x9552: 0xf0001a1a, 0x9553: 0xe00028a0, + 0x9554: 0xe00036ba, 0x9555: 0xf0001a1a, 0x9556: 0xf0001a1a, 0x9557: 0xf0001a1a, + 0x9558: 0xf0001a1a, 0x9559: 0xf0001a1a, 0x955a: 0xf0001a1a, 0x955b: 0xf0001a1a, + 0x955c: 0xf0001a1a, 0x955d: 0xf0001a1a, 0x955e: 0xf0001a1a, 0x955f: 0xf0001a1a, + 0x9560: 0xf0001a1a, 0x9561: 0xf0001a1a, 0x9562: 0xf0001a1a, 0x9563: 0xf0001a1a, + 0x9564: 0xf0001a1a, 0x9565: 0xf0001a1a, 0x9566: 0xf0001a1a, 0x9567: 0xf0001a1a, + 0x9568: 0xf0001a1a, 0x9569: 0xf0001a1a, 0x956a: 0xf0001a1a, 0x956b: 0xf0001a1a, + 0x956c: 0xf0001a1a, 0x956d: 0xf0001a1a, 0x956e: 0xf0001a1a, 0x956f: 0xf0001a1a, + 0x9570: 0xf0001a1a, 0x9571: 0xe00028e2, 0x9572: 0xe0003708, 0x9573: 0xf0001a1a, + 0x9574: 0xf0001a1a, 0x9575: 0xe00028e8, 0x9576: 0xe000370e, 0x9577: 0xe0003714, + 0x9578: 0xe000371a, 0x9579: 0xe0003720, 0x957a: 0xe0003726, 0x957b: 0xe0003732, + 0x957c: 0xe000373e, 0x957d: 0xe00028ee, 0x957e: 0xe0003744, 0x957f: 0xf0001a1a, + // Block 0x256, offset 0x9580 + 0x9580: 0xf0001a1a, 0x9581: 0xf0001a1a, 0x9582: 0xf0001a1a, 0x9583: 0xe00028f4, + 0x9584: 0xe000374d, 0x9585: 0xf0001a1a, 0x9586: 0xf0001a1a, 0x9587: 0xf0001a1a, + 0x9588: 0xf0001a1a, 0x9589: 0xe00028f7, 0x958a: 0xe0003750, 0x958b: 0xf0001a1a, + 0x958c: 0xf0001a1a, 0x958d: 0xf0001a1a, 0x958e: 0xf0001a1a, 0x958f: 0xe00028fd, + 0x9590: 0xe000375c, 0x9591: 0xe0003765, 0x9592: 0xe000376b, 0x9593: 0xe0002900, + 0x9594: 0xe000376e, 0x9595: 0xe0003786, 0x9596: 0xe000378c, 0x9597: 0xe0003792, + 0x9598: 0xe00037a4, 0x9599: 0xe0002906, 0x959a: 0xe00037b3, 0x959b: 0xf0001a1a, + 0x959c: 0xf0001a1a, 0x959d: 0xe000377d, 0x959e: 0xe0000003, 0x959f: 0xe0000006, + 0x95a0: 0xe0000009, 0x95a1: 0xe000000c, 0x95a2: 0xe000000f, 0x95a3: 0xe0000012, + 0x95a4: 0xe000156b, 0x95a5: 0xe000156e, 0x95a6: 0xe0001577, 0x95a7: 0xe000157d, + 0x95a8: 0xe00015aa, 0x95a9: 0xe00015b3, 0x95aa: 0xf0001919, 0x95ab: 0xf0001919, + 0x95ac: 0xf0001919, 0x95ad: 0xf0001919, 0x95ae: 0xe0002891, 0x95af: 0xe00036a2, + 0x95b0: 0xf0001919, 0x95b1: 0xf0001919, 0x95b2: 0xf0001919, 0x95b3: 0xf0001919, + 0x95b4: 0xe0002897, 0x95b5: 0xe00036ae, 0x95b6: 0xf0001919, 0x95b7: 0xf0001919, + 0x95b8: 0xf0001919, 0x95b9: 0xf0001919, 0x95ba: 0xe000289d, 0x95bb: 0xe00036b7, + 0x95bc: 0xe00028df, 0x95bd: 0xe0003705, 0x95be: 0xe00028e5, 0x95bf: 0xe000370b, + // Block 0x257, offset 0x95c0 + 0x95c0: 0xe0003711, 0x95c1: 0xe000372f, 0x95c2: 0xe000373b, 0x95c3: 0xe00028eb, + 0x95c4: 0xe0003741, 0x95c5: 0xf0001919, 0x95c6: 0xe00028f1, 0x95c7: 0xe000374a, + 0x95c8: 0xf0001919, 0x95c9: 0xf0001919, 0x95ca: 0xf0001919, 0x95cb: 0xf0001919, + 0x95cc: 0xf0001919, 0x95cd: 0xf0001919, 0x95ce: 0xe00028fa, 0x95cf: 0xe0003759, + 0x95d0: 0xe000377a, 0x95d1: 0xe0003795, 0x95d2: 0xe0003798, 0x95d3: 0xe00037a1, + 0x95d4: 0xe00037a7, 0x95d5: 0xe0002903, 0x95d6: 0xe00037b0, 0x95d7: 0xe000155c, + 0x95d8: 0xe0001562, 0x95d9: 0xe0001568, 0x95da: 0xe0001571, 0x95db: 0xe0001580, + 0x95dc: 0xf0001717, 0x95dd: 0xf0001717, 0x95de: 0xf0001717, 0x95df: 0xf0001717, + 0x95e0: 0xe000369c, 0x95e1: 0xf0001717, 0x95e2: 0xf0001717, 0x95e3: 0xf0001717, + 0x95e4: 0xf0001717, 0x95e5: 0xe00036a8, 0x95e6: 0xf0001717, 0x95e7: 0xf0001717, + 0x95e8: 0xf0001717, 0x95e9: 0xf0001717, 0x95ea: 0xf0001717, 0x95eb: 0xf0001717, + 0x95ec: 0xf0001717, 0x95ed: 0xf0001717, 0x95ee: 0xf0001717, 0x95ef: 0xf0001717, + 0x95f0: 0xf0001717, 0x95f1: 0xf0001717, 0x95f2: 0xf0001717, 0x95f3: 0xf0001717, + 0x95f4: 0xf0001717, 0x95f5: 0xf0001717, 0x95f6: 0xf0001717, 0x95f7: 0xf0001717, + 0x95f8: 0xf0001717, 0x95f9: 0xf0001717, 0x95fa: 0xf0001717, 0x95fb: 0xf0001717, + 0x95fc: 0xf0001717, 0x95fd: 0xf0001717, 0x95fe: 0xf0001717, 0x95ff: 0xf0001717, + // Block 0x258, offset 0x9600 + 0x9600: 0xf0001717, 0x9601: 0xf0001717, 0x9602: 0xf0001717, 0x9603: 0xf0001717, + 0x9604: 0xe0003717, 0x9605: 0xe000371d, 0x9606: 0xe0003723, 0x9607: 0xe0003729, + 0x9608: 0xe0003735, 0x9609: 0xf0001717, 0x960a: 0xf0001717, 0x960b: 0xf0001717, + 0x960c: 0xf0001717, 0x960d: 0xe0003747, 0x960e: 0xf0001717, 0x960f: 0xf0001717, + 0x9610: 0xf0001717, 0x9611: 0xf0001717, 0x9612: 0xf0001717, 0x9613: 0xf0001717, + 0x9614: 0xf0001717, 0x9615: 0xf0001717, 0x9616: 0xe0003753, 0x9617: 0xe0003762, + 0x9618: 0xe0003768, 0x9619: 0xe000375f, 0x961a: 0xe0003783, 0x961b: 0xe0003789, + 0x961c: 0xe000378f, 0x961d: 0xe000379b, 0x961e: 0xe00037aa, 0x961f: 0xe0001574, + 0x9620: 0xe0001583, 0x9621: 0xf0001818, 0x9622: 0xe000369f, 0x9623: 0xf0001818, + 0x9624: 0xe00036ab, 0x9625: 0xf0001818, 0x9626: 0xe00036b4, 0x9627: 0xf0001818, + 0x9628: 0xe00036d2, 0x9629: 0xf0001818, 0x962a: 0xe00036de, 0x962b: 0xe000372c, + 0x962c: 0xe0003738, 0x962d: 0xf0001818, 0x962e: 0xf0001818, 0x962f: 0xe0003756, + 0x9630: 0xe000379e, 0x9631: 0xe00037ad, 0x9632: 0xf0001818, 0x9633: 0xe0003690, + 0x9634: 0xe0003693, 0x9635: 0xe00028d0, 0x9636: 0xe00036f6, 0x9637: 0xe00028d6, + 0x9638: 0xe00036fc, 0x9639: 0xe00028dc, 0x963a: 0xe0003702, 0x963b: 0xe00028b8, + 0x963c: 0xe00036d8, 0x963d: 0xe00028be, 0x963e: 0xe00036e4, 0x963f: 0xe00028ac, + // Block 0x259, offset 0x9640 + 0x9640: 0xe00036c6, 0x9641: 0xe00028a6, 0x9642: 0xe00036c0, 0x9643: 0xe00028b2, + 0x9644: 0xe00036cc, 0x9645: 0xe00028c4, 0x9646: 0xe00036ea, 0x9647: 0xe00028ca, + 0x9648: 0xe00036f0, 0x9649: 0xf0001a1a, 0x964a: 0xf0001a1a, 0x964b: 0xf0001a1a, + 0x964c: 0xf0001a1a, 0x964d: 0xf0001a1a, 0x964e: 0xf0001a1a, 0x964f: 0xf0001a1a, + 0x9650: 0xf0001a1a, 0x9651: 0xe00028cd, 0x9652: 0xe00036f3, 0x9653: 0xe00028d3, + 0x9654: 0xe00036f9, 0x9655: 0xe00028d9, 0x9656: 0xe00036ff, 0x9657: 0xe00028b5, + 0x9658: 0xe00036d5, 0x9659: 0xe00028bb, 0x965a: 0xe00036e1, 0x965b: 0xe00028a9, + 0x965c: 0xe00036c3, 0x965d: 0xe00028a3, 0x965e: 0xe00036bd, 0x965f: 0xe00028af, + 0x9660: 0xe00036c9, 0x9661: 0xe00028c1, 0x9662: 0xe00036e7, 0x9663: 0xe00028c7, + 0x9664: 0xe00036ed, 0x9665: 0xf0001919, 0x9666: 0xf0001919, 0x9667: 0xf0001919, + 0x9668: 0xf0001919, 0x9669: 0xf0001919, 0x966a: 0xf0001919, 0x966b: 0xf0001919, + 0x966c: 0xf0001919, 0x966d: 0xf0001717, 0x966e: 0xf0001717, 0x966f: 0xf0001717, + 0x9670: 0xf0001717, 0x9671: 0xe00036cf, 0x9672: 0xe00036db, 0x9673: 0xf0001717, + 0x9674: 0xf0001818, 0x9675: 0xf0001818, 0x9676: 0xf0001818, 0x9677: 0xf0001818, + 0x9678: 0xf0001818, 0x9679: 0xf0001818, 0x967a: 0xf0001818, 0x967b: 0xf0001818, + 0x967c: 0xe0003696, 0x967d: 0xe0003699, 0x967e: 0x4004c020, 0x967f: 0x4004c220, + // Block 0x25a, offset 0x9680 + 0x9680: 0xa0000000, 0x9681: 0xa0000000, 0x9682: 0xa0000000, 0x9683: 0xa0000000, + 0x9684: 0xa0000000, 0x9685: 0xa0000000, 0x9686: 0xa0000000, 0x9687: 0xa0000000, + 0x9688: 0xa0000000, 0x9689: 0x40020020, 0x968a: 0x40020220, 0x968b: 0x40020420, + 0x968c: 0x40020620, 0x968d: 0x40020820, 0x968e: 0xa0000000, 0x968f: 0xa0000000, + 0x9690: 0xa0000000, 0x9691: 0xa0000000, 0x9692: 0xa0000000, 0x9693: 0xa0000000, + 0x9694: 0xa0000000, 0x9695: 0xa0000000, 0x9696: 0xa0000000, 0x9697: 0xa0000000, + 0x9698: 0xa0000000, 0x9699: 0xa0000000, 0x969a: 0xa0000000, 0x969b: 0xa0000000, + 0x969c: 0xa0000000, 0x969d: 0xa0000000, 0x969e: 0xa0000000, 0x969f: 0xa0000000, + 0x96a0: 0x40021220, 0x96a1: 0x4002ba20, 0x96a2: 0x4003e020, 0x96a3: 0x4004ea20, + 0x96a4: 0x4027de20, 0x96a5: 0x4004ec20, 0x96a6: 0x4004e620, 0x96a7: 0x4003d220, + 0x96a8: 0x4003f420, 0x96a9: 0x4003f620, 0x96aa: 0x4004d820, 0x96ab: 0x40093820, + 0x96ac: 0x40024020, 0x96ad: 0x40021a20, 0x96ae: 0x4002e420, 0x96af: 0x4004e220, + 0x96b0: 0x4029cc20, 0x96b1: 0x4029ce20, 0x96b2: 0x4029d020, 0x96b3: 0x4029d220, + 0x96b4: 0x4029d420, 0x96b5: 0x4029d620, 0x96b6: 0x4029d820, 0x96b7: 0x4029da20, + 0x96b8: 0x4029dc20, 0x96b9: 0x4029de20, 0x96ba: 0x40026c20, 0x96bb: 0x40026220, + 0x96bc: 0x40094020, 0x96bd: 0x40094220, 0x96be: 0x40094420, 0x96bf: 0x4002c420, + // Block 0x25b, offset 0x96c0 + 0x96c0: 0x4004d620, 0x96c1: 0xc57327b1, 0x96c2: 0x002c0a88, 0x96c3: 0x002c3a88, + 0x96c4: 0x002c6288, 0x96c5: 0x002c9888, 0x96c6: 0x002d0888, 0x96c7: 0x002d2288, + 0x96c8: 0x002d6888, 0x96c9: 0x002d9a88, 0x96ca: 0x002dcc88, 0x96cb: 0x002dfe88, + 0x96cc: 0xc0030002, 0x96cd: 0x002e8288, 0x96ce: 0x002e9e88, 0x96cf: 0xc5780071, + 0x96d0: 0x002f2c88, 0x96d1: 0x002f5688, 0x96d2: 0x002f7a88, 0x96d3: 0x002fe688, + 0x96d4: 0x00302c88, 0x96d5: 0xc56e0071, 0x96d6: 0x0030be88, 0x96d7: 0x0030e288, + 0x96d8: 0x0030f688, 0x96d9: 0x00310088, 0x96da: 0x00312a88, 0x96db: 0x4003f820, + 0x96dc: 0x4004e420, 0x96dd: 0x4003fa20, 0x96de: 0x40062420, 0x96df: 0x40021620, + 0x96e0: 0x40061e20, 0x96e1: 0xc57027b1, 0x96e2: 0x402c0a20, 0x96e3: 0x402c3a20, + 0x96e4: 0x402c6220, 0x96e5: 0x402c9820, 0x96e6: 0x402d0820, 0x96e7: 0x402d2220, + 0x96e8: 0x402d6820, 0x96e9: 0x402d9a20, 0x96ea: 0x402dcc20, 0x96eb: 0x402dfe20, + 0x96ec: 0xc0000002, 0x96ed: 0x402e8220, 0x96ee: 0x402e9e20, 0x96ef: 0xc5760071, + 0x96f0: 0x402f2c20, 0x96f1: 0x402f5620, 0x96f2: 0x402f7a20, 0x96f3: 0x402fe620, + 0x96f4: 0x40302c20, 0x96f5: 0xc56c0071, 0x96f6: 0x4030be20, 0x96f7: 0x4030e220, + 0x96f8: 0x4030f620, 0x96f9: 0x40310020, 0x96fa: 0x40312a20, 0x96fb: 0x4003fc20, + 0x96fc: 0x40094820, 0x96fd: 0x4003fe20, 0x96fe: 0x40094c20, 0x96ff: 0xa0000000, + // Block 0x25c, offset 0x9700 + 0x9700: 0xe00008f5, 0x9701: 0xe00008ef, 0x9702: 0xe0000921, 0x9703: 0xe0000969, + 0x9704: 0x00320e83, 0x9705: 0x00320c83, 0x9706: 0x00320ea3, 0x9707: 0xe0000a53, + 0x9708: 0xe0000ae8, 0x9709: 0xe0000ae2, 0x970a: 0xe0000af4, 0x970b: 0xe0000b20, + 0x970c: 0xe0000c2b, 0x970d: 0xe0000c25, 0x970e: 0xe0000c37, 0x970f: 0xe0000c43, + 0x9710: 0xe0000ab3, 0x9711: 0xe0000d63, 0x9712: 0xe0000d9a, 0x9713: 0xe0000d94, + 0x9714: 0xe0000da6, 0x9715: 0xe0000de6, 0x9716: 0x00321083, 0x9717: 0x40093e20, + 0x9718: 0x003210a3, 0x9719: 0xe0000fe1, 0x971a: 0xe0000fdb, 0x971b: 0xe0000fed, + 0x971c: 0x003100a3, 0x971d: 0xe0001102, 0x971e: 0x00318888, 0x971f: 0xe0000f7b, + 0x9720: 0xe00008f2, 0x9721: 0xe00008ec, 0x9722: 0xe000091e, 0x9723: 0xe0000966, + 0x9724: 0x40320e20, 0x9725: 0x40320c20, 0x9726: 0x40320e21, 0x9727: 0xe0000a4d, + 0x9728: 0xe0000ae5, 0x9729: 0xe0000adf, 0x972a: 0xe0000af1, 0x972b: 0xe0000b1d, + 0x972c: 0xe0000c28, 0x972d: 0xe0000c22, 0x972e: 0xe0000c34, 0x972f: 0xe0000c40, + 0x9730: 0xe0000aad, 0x9731: 0xe0000d60, 0x9732: 0xe0000d97, 0x9733: 0xe0000d91, + 0x9734: 0xe0000da3, 0x9735: 0xe0000de3, 0x9736: 0x40321020, 0x9737: 0x40093c20, + 0x9738: 0x40321021, 0x9739: 0xe0000fde, 0x973a: 0xe0000fd8, 0x973b: 0xe0000fea, + 0x973c: 0x40310021, 0x973d: 0xe00010ff, 0x973e: 0x40318820, 0x973f: 0xe0001114, + // Block 0x25d, offset 0x9740 + 0x9740: 0xe0000983, 0x9741: 0xe0000980, 0x9742: 0xe00008fb, 0x9743: 0xe00008f8, + 0x9744: 0xe000097d, 0x9745: 0xe000097a, 0x9746: 0xe0000a38, 0x9747: 0xe0000a35, + 0x9748: 0xe0000a3e, 0x9749: 0xe0000a3b, 0x974a: 0xe0000a4a, 0x974b: 0xe0000a47, + 0x974c: 0xe0000a44, 0x974d: 0xe0000a41, 0x974e: 0xe0000a86, 0x974f: 0xe0000a83, + 0x9750: 0xe00037c2, 0x9751: 0xe00037bf, 0x9752: 0xe0000b46, 0x9753: 0xe0000b43, + 0x9754: 0xe0000aee, 0x9755: 0xe0000aeb, 0x9756: 0xe0000b2c, 0x9757: 0xe0000b29, + 0x9758: 0xe0000b40, 0x9759: 0xe0000b3d, 0x975a: 0xe0000b1a, 0x975b: 0xe0000b17, + 0x975c: 0xe0000bb8, 0x975d: 0xe0000bb5, 0x975e: 0xe0000bb2, 0x975f: 0xe0000baf, + 0x9760: 0xe0000bc4, 0x9761: 0xe0000bc1, 0x9762: 0xe0000bca, 0x9763: 0xe0000bc7, + 0x9764: 0xe0000bee, 0x9765: 0xe0000beb, 0x9766: 0xe0000c1b, 0x9767: 0xe0000c18, + 0x9768: 0xe0000c51, 0x9769: 0xe0000c4e, 0x976a: 0xe0000c60, 0x976b: 0xe0000c5d, + 0x976c: 0xe0000c31, 0x976d: 0xe0000c2e, 0x976e: 0xe0000c5a, 0x976f: 0xe0000c57, + 0x9770: 0xe0000c54, 0x9771: 0x402da220, 0x9772: 0xf0000a0a, 0x9773: 0xf0000404, + 0x9774: 0xe0000c8a, 0x9775: 0xe0000c87, 0x9776: 0xe0000c9f, 0x9777: 0xe0000c9c, + 0x9778: 0x402f7220, 0x9779: 0xe0000ccc, 0x977a: 0xe0000cc9, 0x977b: 0xe0000cd8, + 0x977c: 0xe0000cd5, 0x977d: 0xe0000cd2, 0x977e: 0xe0000ccf, 0x977f: 0xe0000d04, + // Block 0x25e, offset 0x9780 + 0x9780: 0xe0000cfe, 0x9781: 0xe0000cf8, 0x9782: 0xe0000cf5, 0x9783: 0xe0000d51, + 0x9784: 0xe0000d4e, 0x9785: 0xe0000d6f, 0x9786: 0xe0000d6c, 0x9787: 0xe0000d5d, + 0x9788: 0xe0000d5a, 0x9789: 0xf0000404, 0x978a: 0xe00037ce, 0x978b: 0xe00037cb, + 0x978c: 0xe0000e2e, 0x978d: 0xe0000e2b, 0x978e: 0xe0000da0, 0x978f: 0xe0000d9d, + 0x9790: 0xe0000de0, 0x9791: 0xe0000ddd, 0x9792: 0xe0000e93, 0x9793: 0xe0000e8f, + 0x9794: 0xe0000eca, 0x9795: 0xe0000ec7, 0x9796: 0xe0000edc, 0x9797: 0xe0000ed9, + 0x9798: 0xe0000ed0, 0x9799: 0xe0000ecd, 0x979a: 0xe0000f1f, 0x979b: 0xe0000f1c, + 0x979c: 0xe0000f2d, 0x979d: 0xe0000f2a, 0x979e: 0xe0000f47, 0x979f: 0xe0000f44, + 0x97a0: 0xe0000f33, 0x97a1: 0xe0000f30, 0x97a2: 0xe0000f99, 0x97a3: 0xe0000f96, + 0x97a4: 0xe0000f8a, 0x97a5: 0xe0000f87, 0x97a6: 0xe00037d4, 0x97a7: 0xe00037d1, + 0x97a8: 0xe000102b, 0x97a9: 0xe0001028, 0x97aa: 0xe000103f, 0x97ab: 0xe000103c, + 0x97ac: 0xe0000fe7, 0x97ad: 0xe0000fe4, 0x97ae: 0xe0000ff9, 0x97af: 0xe0000ff6, + 0x97b0: 0xe0001025, 0x97b1: 0xe0001022, 0x97b2: 0xe0001039, 0x97b3: 0xe0001036, + 0x97b4: 0xe00010d8, 0x97b5: 0xe00010d5, 0x97b6: 0xe000110e, 0x97b7: 0xe000110b, + 0x97b8: 0xe0001117, 0x97b9: 0xe000113b, 0x97ba: 0xe0001138, 0x97bb: 0xe000114d, + 0x97bc: 0xe000114a, 0x97bd: 0xe0001147, 0x97be: 0xe0001144, 0x97bf: 0xe0000f64, + // Block 0x25f, offset 0x97c0 + 0x97c0: 0x402c1a20, 0x97c1: 0x002c2a88, 0x97c2: 0x002c3288, 0x97c3: 0x402c3220, + 0x97c4: 0x0031c488, 0x97c5: 0x4031c420, 0x97c6: 0x002efa88, 0x97c7: 0x002c4e88, + 0x97c8: 0x402c4e20, 0x97c9: 0x002c7288, 0x97ca: 0x002c7a88, 0x97cb: 0x002c8488, + 0x97cc: 0x402c8420, 0x97cd: 0xe000115c, 0x97ce: 0x002cae88, 0x97cf: 0x002cb888, + 0x97d0: 0x002cc288, 0x97d1: 0x002d1688, 0x97d2: 0x402d1620, 0x97d3: 0x002d4488, + 0x97d4: 0x002d5888, 0x97d5: 0x402d7820, 0x97d6: 0x002dc288, 0x97d7: 0x002db688, + 0x97d8: 0x002e0a88, 0x97d9: 0x402e0a20, 0x97da: 0x402e3820, 0x97db: 0x402e7220, + 0x97dc: 0x0030a088, 0x97dd: 0x002eb488, 0x97de: 0x402ebc20, 0x97df: 0x002f1088, + 0x97e0: 0xe0000e56, 0x97e1: 0xe0000e53, 0x97e2: 0x002d6088, 0x97e3: 0x402d6020, + 0x97e4: 0x002f3e88, 0x97e5: 0x402f3e20, 0x97e6: 0x002f8288, 0x97e7: 0x0031b488, + 0x97e8: 0x4031b420, 0x97e9: 0x00300888, 0x97ea: 0x40301220, 0x97eb: 0x40304220, + 0x97ec: 0x00304a88, 0x97ed: 0x40304a20, 0x97ee: 0x00305288, 0x97ef: 0xe000105f, + 0x97f0: 0xe000105c, 0x97f1: 0x0030b488, 0x97f2: 0x0030cc88, 0x97f3: 0x00311888, + 0x97f4: 0x40311820, 0x97f5: 0x00313488, 0x97f6: 0x40313420, 0x97f7: 0xe00037da, + 0x97f8: 0x00316e88, 0x97f9: 0x40316e20, 0x97fa: 0x40317820, 0x97fb: 0x4031a620, + 0x97fc: 0x0031bc88, 0x97fd: 0x4031bc20, 0x97fe: 0xe0000fc9, 0x97ff: 0x40319420, + // Block 0x260, offset 0x9800 + 0x9800: 0x40321220, 0x9801: 0x40321a20, 0x9802: 0x40322220, 0x9803: 0x40322a20, + 0x9804: 0xe0000ad5, 0x9805: 0xe0000ad1, 0x9806: 0xe0000acd, 0x9807: 0xf0000a0a, + 0x9808: 0xf000040a, 0x9809: 0xf0000404, 0x980a: 0xf0000a0a, 0x980b: 0xf000040a, + 0x980c: 0xf0000404, 0x980d: 0xe0000947, 0x980e: 0xe0000944, 0x980f: 0xe0000c3d, + 0x9810: 0xe0000c3a, 0x9811: 0xe0000dcc, 0x9812: 0xe0000dc9, 0x9813: 0xe0000ff3, + 0x9814: 0xe0000ff0, 0x9815: 0xe000298b, 0x9816: 0xe0002988, 0x9817: 0xe0002979, + 0x9818: 0xe0002976, 0x9819: 0xe0002985, 0x981a: 0xe0002982, 0x981b: 0xe000297f, + 0x981c: 0xe000297c, 0x981d: 0x402cae20, 0x981e: 0xe00037e8, 0x981f: 0xe00037e5, + 0x9820: 0xe0000976, 0x9821: 0xe0000972, 0x9822: 0xe00029af, 0x9823: 0xe00029ac, + 0x9824: 0xe00037c8, 0x9825: 0xe00037c5, 0x9826: 0xe0000bbe, 0x9827: 0xe0000bbb, + 0x9828: 0xe0000c99, 0x9829: 0xe0000c96, 0x982a: 0xe0000e20, 0x982b: 0xe0000e1d, + 0x982c: 0xe0000e27, 0x982d: 0xe0000e23, 0x982e: 0xe00037e1, 0x982f: 0xe00037dd, + 0x9830: 0xe0000c8d, 0x9831: 0xf0000a0a, 0x9832: 0xf000040a, 0x9833: 0xf0000404, + 0x9834: 0xe0000bac, 0x9835: 0xe0000ba9, 0x9836: 0x002d7888, 0x9837: 0x00319488, + 0x9838: 0xe0000d57, 0x9839: 0xe0000d54, 0x983a: 0xe0002991, 0x983b: 0xe000298e, + 0x983c: 0xe00037ee, 0x983d: 0xe00037eb, 0x983e: 0xe0003800, 0x983f: 0xe00037fd, + // Block 0x261, offset 0x9840 + 0x9840: 0xe000098f, 0x9841: 0xe000098c, 0x9842: 0xe0000995, 0x9843: 0xe0000992, + 0x9844: 0xe0000b62, 0x9845: 0xe0000b5f, 0x9846: 0xe0000b68, 0x9847: 0xe0000b65, + 0x9848: 0xe0000c6c, 0x9849: 0xe0000c69, 0x984a: 0xe0000c72, 0x984b: 0xe0000c6f, + 0x984c: 0xe0000e4a, 0x984d: 0xe0000e47, 0x984e: 0xe0000e50, 0x984f: 0xe0000e4d, + 0x9850: 0xe0000ee8, 0x9851: 0xe0000ee5, 0x9852: 0xe0000eee, 0x9853: 0xe0000eeb, + 0x9854: 0xe0001053, 0x9855: 0xe0001050, 0x9856: 0xe0001059, 0x9857: 0xe0001056, + 0x9858: 0xe0000f61, 0x9859: 0xe0000f5e, 0x985a: 0xe0000fa5, 0x985b: 0xe0000fa2, + 0x985c: 0x00312288, 0x985d: 0x40312220, 0x985e: 0xe0000bf4, 0x985f: 0xe0000bf1, + 0x9860: 0x002ebc88, 0x9861: 0x402c8c20, 0x9862: 0x002f2288, 0x9863: 0x402f2220, + 0x9864: 0x00314088, 0x9865: 0x40314020, 0x9866: 0xe000096f, 0x9867: 0xe000096c, + 0x9868: 0xe0000b32, 0x9869: 0xe0000b2f, 0x986a: 0xe00037fa, 0x986b: 0xe00037f7, + 0x986c: 0xe0000dfd, 0x986d: 0xe0000df9, 0x986e: 0xe0000e04, 0x986f: 0xe0000e01, + 0x9870: 0xe0000e0b, 0x9871: 0xe0000e07, 0x9872: 0xe0001129, 0x9873: 0xe0001126, + 0x9874: 0x402e5e20, 0x9875: 0x402ed020, 0x9876: 0x40305a20, 0x9877: 0x402dd420, + 0x9878: 0xe0000abf, 0x9879: 0xe0000ec4, 0x987a: 0x002be888, 0x987b: 0x002c4488, + 0x987c: 0x402c4420, 0x987d: 0x002e3888, 0x987e: 0x00303e88, 0x987f: 0x402ffc20, + // Block 0x262, offset 0x9880 + 0x9880: 0x402f8220, 0x9881: 0x402fd820, 0x9882: 0x402ff420, 0x9883: 0x40300820, + 0x9884: 0x402df620, 0x9885: 0x40301a20, 0x9886: 0x40302420, 0x9887: 0x40306420, + 0x9888: 0x40305220, 0x9889: 0x40307c20, 0x988a: 0x4030b420, 0x988b: 0x4030cc20, + 0x988c: 0x4030da20, 0x988d: 0x4030ee20, 0x988e: 0x402e7a20, 0x988f: 0x40310820, + 0x9890: 0x40314820, 0x9891: 0x40315020, 0x9892: 0xe00037d7, 0x9893: 0x40318020, + 0x9894: 0x4031cc20, 0x9895: 0x4031e820, 0x9896: 0x40320a20, 0x9897: 0x40323220, + 0x9898: 0x40323a20, 0x9899: 0x402c1220, 0x989a: 0x402cf820, 0x989b: 0x402d4c20, + 0x989c: 0x402d7020, 0x989d: 0x402de620, 0x989e: 0x402e1a20, 0x989f: 0x402e2a20, + 0x98a0: 0x402f6220, 0x98a1: 0x4031fa20, 0x98a2: 0x40320220, 0x98a3: 0xe0000aca, + 0x98a4: 0xe0000adc, 0x98a5: 0xe0000ad9, 0x98a6: 0xe0000fcc, 0x98a7: 0xe0000fcf, + 0x98a8: 0xe0000fba, 0x98a9: 0xe0000ba1, 0x98aa: 0xe0000d11, 0x98ab: 0xe0000d18, + 0x98ac: 0x40324220, 0x98ad: 0x40324a20, 0x98ae: 0x40309020, 0x98af: 0x40309820, + 0x98b0: 0x002d6894, 0x98b1: 0x002d8094, 0x98b2: 0x002dcc94, 0x98b3: 0x002f7a94, + 0x98b4: 0x002f9894, 0x98b5: 0x002fac94, 0x98b6: 0x002fd894, 0x98b7: 0x0030e294, + 0x98b8: 0x00310094, 0x98b9: 0x40064020, 0x98ba: 0x40064420, 0x98bb: 0x402d9620, + 0x98bc: 0x4031de20, 0x98bd: 0x402d9820, 0x98be: 0x4031e220, 0x98bf: 0x4031f020, + // Block 0x263, offset 0x98c0 + 0x98c0: 0xe0000d24, 0x98c1: 0xe0000d21, 0x98c2: 0xe0000d2a, 0x98c3: 0xe0000d27, + 0x98c4: 0xe0000d69, 0x98c5: 0xe0000d66, 0x98c6: 0xe0000d7b, 0x98c7: 0xe0000d78, + 0x98c8: 0xe0000d87, 0x98c9: 0xe0000d84, 0x98ca: 0xe0000d81, 0x98cb: 0xe0000d7e, + 0x98cc: 0xe0000ded, 0x98cd: 0xe0000de9, 0x98ce: 0xe00037f4, 0x98cf: 0xe00037f1, + 0x98d0: 0xe0000e3d, 0x98d1: 0xe0000e39, 0x98d2: 0xe0000e35, 0x98d3: 0xe0000e31, + 0x98d4: 0xe0000ea7, 0x98d5: 0xe0000ea4, 0x98d6: 0xe0000ead, 0x98d7: 0xe0000eaa, + 0x98d8: 0xe0000ed6, 0x98d9: 0xe0000ed3, 0x98da: 0xe0000ef4, 0x98db: 0xe0000ef1, + 0x98dc: 0xe0000efb, 0x98dd: 0xe0000ef7, 0x98de: 0xe0000f02, 0x98df: 0xe0000eff, + 0x98e0: 0xe0000f41, 0x98e1: 0xe0000f3e, 0x98e2: 0xe0000f53, 0x98e3: 0xe0000f50, + 0x98e4: 0xe0000f26, 0x98e5: 0xe0000f22, 0x98e6: 0xe0000f3a, 0x98e7: 0xe0000f36, + 0x98e8: 0xe0000f5a, 0x98e9: 0xe0000f56, 0x98ea: 0xe0000f93, 0x98eb: 0xe0000f90, + 0x98ec: 0xe0000f9f, 0x98ed: 0xe0000f9c, 0x98ee: 0xe0000fb1, 0x98ef: 0xe0000fae, + 0x98f0: 0xe0000fab, 0x98f1: 0xe0000fa8, 0x98f2: 0xe0001093, 0x98f3: 0xe0001090, + 0x98f4: 0xe000109f, 0x98f5: 0xe000109c, 0x98f6: 0xe0001099, 0x98f7: 0xe0001096, + 0x98f8: 0xe0001032, 0x98f9: 0xe000102e, 0x98fa: 0xe000298b, 0x98fb: 0xe0002988, + 0x98fc: 0xe00010a9, 0x98fd: 0xe00010a6, 0x98fe: 0xe00010af, 0x98ff: 0xe00010ac, + // Block 0x264, offset 0x9900 + 0x9900: 0xe00009bc, 0x9901: 0xe00009c0, 0x9902: 0x002c3a8b, 0x9903: 0xf0000a04, + 0x9904: 0x40081c20, 0x9905: 0xe0000a5e, 0x9906: 0xe0000a62, 0x9907: 0x002cc28a, + 0x9908: 0x40081e20, 0x9909: 0xf0000a04, 0x990a: 0x002d2285, 0x990b: 0x002d688b, + 0x990c: 0x002d688b, 0x990d: 0x002d688b, 0x990e: 0x002d6885, 0x990f: 0xf0000202, + 0x9910: 0x002d9a8b, 0x9911: 0x002d9a8b, 0x9912: 0x002e228b, 0x9913: 0x002e2285, + 0x9914: 0x40082020, 0x9915: 0x002e9e8b, 0x9916: 0xf000040a, 0x9917: 0x40082220, + 0x9918: 0x40082420, 0x9919: 0x002f2c8b, 0x991a: 0x002f568b, 0x991b: 0x002f7a8b, + 0x991c: 0x002f7a8b, 0x991d: 0x002f7a8b, 0x991e: 0x40082620, 0x991f: 0x40082820, + 0x9920: 0xf0001414, 0x9921: 0xe0000fbd, 0x9922: 0xf0001414, 0x9923: 0x40082a20, + 0x9924: 0x00312a8b, 0x9925: 0x40082c20, 0x9926: 0x0032a288, 0x9927: 0x40082e20, + 0x9928: 0x00312a8b, 0x9929: 0x40083020, 0x992a: 0x002dfe88, 0x992b: 0x00320c83, + 0x992c: 0x002c0a8b, 0x992d: 0x002c3a8b, 0x992e: 0x40083220, 0x992f: 0x002c9885, + 0x9930: 0x002c988b, 0x9931: 0x002d088b, 0x9932: 0x002d1e88, 0x9933: 0x002e828b, + 0x9934: 0x002ee285, 0x9935: 0x00389084, 0x9936: 0x00389284, 0x9937: 0x00389484, + 0x9938: 0x00389684, 0x9939: 0x002d9a85, 0x993a: 0x40083420, 0x993b: 0xe0000b95, + 0x993c: 0x00327e85, 0x993d: 0x00325685, 0x993e: 0x0032568b, 0x993f: 0x00327e8b, + // Block 0x265, offset 0x9940 + 0x9940: 0xa0000000, 0x9941: 0xa0000000, 0x9942: 0xa0000000, 0x9943: 0xa0000000, + 0x9944: 0xa0000000, 0x9945: 0xa0000000, 0x9946: 0xa0000000, 0x9947: 0xa0000000, + 0x9948: 0xa0000000, 0x9949: 0x40020020, 0x994a: 0x40020220, 0x994b: 0x40020420, + 0x994c: 0x40020620, 0x994d: 0x40020820, 0x994e: 0xa0000000, 0x994f: 0xa0000000, + 0x9950: 0xa0000000, 0x9951: 0xa0000000, 0x9952: 0xa0000000, 0x9953: 0xa0000000, + 0x9954: 0xa0000000, 0x9955: 0xa0000000, 0x9956: 0xa0000000, 0x9957: 0xa0000000, + 0x9958: 0xa0000000, 0x9959: 0xa0000000, 0x995a: 0xa0000000, 0x995b: 0xa0000000, + 0x995c: 0xa0000000, 0x995d: 0xa0000000, 0x995e: 0xa0000000, 0x995f: 0xa0000000, + 0x9960: 0x40021220, 0x9961: 0x4002ba20, 0x9962: 0x4003e020, 0x9963: 0x4004ea20, + 0x9964: 0x4027de20, 0x9965: 0x4004ec20, 0x9966: 0x4004e620, 0x9967: 0x4003d220, + 0x9968: 0x4003f420, 0x9969: 0x4003f620, 0x996a: 0x4004d820, 0x996b: 0x40093820, + 0x996c: 0x40024020, 0x996d: 0x40021a20, 0x996e: 0x4002e420, 0x996f: 0x4004e220, + 0x9970: 0x4029cc20, 0x9971: 0x4029ce20, 0x9972: 0x4029d020, 0x9973: 0x4029d220, + 0x9974: 0x4029d420, 0x9975: 0x4029d620, 0x9976: 0x4029d820, 0x9977: 0x4029da20, + 0x9978: 0x4029dc20, 0x9979: 0x4029de20, 0x997a: 0x40026c20, 0x997b: 0x40026220, + 0x997c: 0x40094020, 0x997d: 0x40094220, 0x997e: 0x40094420, 0x997f: 0x4002c420, + // Block 0x266, offset 0x9980 + 0x9980: 0x4004d620, 0x9981: 0xc57327b1, 0x9982: 0x002c0a88, 0x9983: 0x002c3a88, + 0x9984: 0x002c6288, 0x9985: 0x002c9888, 0x9986: 0x002d0888, 0x9987: 0x002d2288, + 0x9988: 0x002d6888, 0x9989: 0x002d9a88, 0x998a: 0x002dcc88, 0x998b: 0x002dfe88, + 0x998c: 0xc0030002, 0x998d: 0x002e8288, 0x998e: 0x002e9e88, 0x998f: 0xc57e27e1, + 0x9990: 0x002f2c88, 0x9991: 0x002f5688, 0x9992: 0x002f7a88, 0x9993: 0x002fe688, + 0x9994: 0x00302c88, 0x9995: 0xc3900b21, 0x9996: 0x0030be88, 0x9997: 0x0030bea3, + 0x9998: 0x0030f688, 0x9999: 0x00310088, 0x999a: 0x00312a88, 0x999b: 0x4003f820, + 0x999c: 0x4004e420, 0x999d: 0x4003fa20, 0x999e: 0x40062420, 0x999f: 0x40021620, + 0x99a0: 0x40061e20, 0x99a1: 0xc57027b1, 0x99a2: 0x402c0a20, 0x99a3: 0x402c3a20, + 0x99a4: 0x402c6220, 0x99a5: 0x402c9820, 0x99a6: 0x402d0820, 0x99a7: 0x402d2220, + 0x99a8: 0x402d6820, 0x99a9: 0x402d9a20, 0x99aa: 0x402dcc20, 0x99ab: 0x402dfe20, + 0x99ac: 0xc0000002, 0x99ad: 0x402e8220, 0x99ae: 0x402e9e20, 0x99af: 0xc57a27e1, + 0x99b0: 0x402f2c20, 0x99b1: 0x402f5620, 0x99b2: 0x402f7a20, 0x99b3: 0x402fe620, + 0x99b4: 0x40302c20, 0x99b5: 0xc38d0b21, 0x99b6: 0x4030be20, 0x99b7: 0x4030be21, + 0x99b8: 0x4030f620, 0x99b9: 0x40310020, 0x99ba: 0x40312a20, 0x99bb: 0x4003fc20, + 0x99bc: 0x40094820, 0x99bd: 0x4003fe20, 0x99be: 0x40094c20, 0x99bf: 0xa0000000, + // Block 0x267, offset 0x99c0 + 0x99c0: 0xe00008f5, 0x99c1: 0xe00008ef, 0x99c2: 0xe0000921, 0x99c3: 0xe0000969, + 0x99c4: 0x00320e83, 0x99c5: 0x00320c83, 0x99c6: 0x00320ea3, 0x99c7: 0xe0000a53, + 0x99c8: 0xe0000ae8, 0x99c9: 0xe0000ae2, 0x99ca: 0xe0000af4, 0x99cb: 0xe0000b20, + 0x99cc: 0xe0000c2b, 0x99cd: 0xe0000c25, 0x99ce: 0xe0000c37, 0x99cf: 0xe0000c43, + 0x99d0: 0x002c62a3, 0x99d1: 0xe0000d63, 0x99d2: 0xe0000d9a, 0x99d3: 0xe0000d94, + 0x99d4: 0xe0000da6, 0x99d5: 0x003210e3, 0x99d6: 0x00321083, 0x99d7: 0x40093e20, + 0x99d8: 0x003210a3, 0x99d9: 0xe0000fe1, 0x99da: 0xe0000fdb, 0x99db: 0xe0000fed, + 0x99dc: 0x003100a3, 0x99dd: 0xe0001102, 0x99de: 0xe0003806, 0x99df: 0xe0000f7b, + 0x99e0: 0xe00008f2, 0x99e1: 0xe00008ec, 0x99e2: 0xe000091e, 0x99e3: 0xe0000966, + 0x99e4: 0x40320e20, 0x99e5: 0x40320c20, 0x99e6: 0x40320e21, 0x99e7: 0xe0000a4d, + 0x99e8: 0xe0000ae5, 0x99e9: 0xe0000adf, 0x99ea: 0xe0000af1, 0x99eb: 0xe0000b1d, + 0x99ec: 0xe0000c28, 0x99ed: 0xe0000c22, 0x99ee: 0xe0000c34, 0x99ef: 0xe0000c40, + 0x99f0: 0x402c6221, 0x99f1: 0xe0000d60, 0x99f2: 0xe0000d97, 0x99f3: 0xe0000d91, + 0x99f4: 0xe0000da3, 0x99f5: 0x40321023, 0x99f6: 0x40321020, 0x99f7: 0x40093c20, + 0x99f8: 0x40321021, 0x99f9: 0xe0000fde, 0x99fa: 0xe0000fd8, 0x99fb: 0xe0000fea, + 0x99fc: 0x40310021, 0x99fd: 0xe00010ff, 0x99fe: 0xe0003803, 0x99ff: 0xe0001114, + // Block 0x268, offset 0x9a00 + 0x9a00: 0xe0000983, 0x9a01: 0xe0000980, 0x9a02: 0xe00008fb, 0x9a03: 0xe00008f8, + 0x9a04: 0xe000097d, 0x9a05: 0xe000097a, 0x9a06: 0xe0000a38, 0x9a07: 0xe0000a35, + 0x9a08: 0xe0000a3e, 0x9a09: 0xe0000a3b, 0x9a0a: 0xe0000a4a, 0x9a0b: 0xe0000a47, + 0x9a0c: 0xe0000a44, 0x9a0d: 0xe0000a41, 0x9a0e: 0xe0000a86, 0x9a0f: 0xe0000a83, + 0x9a10: 0x002c62c3, 0x9a11: 0x402c6222, 0x9a12: 0xe0000b46, 0x9a13: 0xe0000b43, + 0x9a14: 0xe0000aee, 0x9a15: 0xe0000aeb, 0x9a16: 0xe0000b2c, 0x9a17: 0xe0000b29, + 0x9a18: 0xe0000b40, 0x9a19: 0xe0000b3d, 0x9a1a: 0xe0000b1a, 0x9a1b: 0xe0000b17, + 0x9a1c: 0xe0000bb8, 0x9a1d: 0xe0000bb5, 0x9a1e: 0xe0000bb2, 0x9a1f: 0xe0000baf, + 0x9a20: 0xe0000bc4, 0x9a21: 0xe0000bc1, 0x9a22: 0xe0000bca, 0x9a23: 0xe0000bc7, + 0x9a24: 0xe0000bee, 0x9a25: 0xe0000beb, 0x9a26: 0xe0000c1b, 0x9a27: 0xe0000c18, + 0x9a28: 0xe0000c51, 0x9a29: 0xe0000c4e, 0x9a2a: 0xe0000c60, 0x9a2b: 0xe0000c5d, + 0x9a2c: 0xe0000c31, 0x9a2d: 0xe0000c2e, 0x9a2e: 0xe0000c5a, 0x9a2f: 0xe0000c57, + 0x9a30: 0xe0000c54, 0x9a31: 0x402da220, 0x9a32: 0xf0000a0a, 0x9a33: 0xf0000404, + 0x9a34: 0xe0000c8a, 0x9a35: 0xe0000c87, 0x9a36: 0xe0000c9f, 0x9a37: 0xe0000c9c, + 0x9a38: 0x402f7220, 0x9a39: 0xe0000ccc, 0x9a3a: 0xe0000cc9, 0x9a3b: 0xe0000cd8, + 0x9a3c: 0xe0000cd5, 0x9a3d: 0xe0000cd2, 0x9a3e: 0xe0000ccf, 0x9a3f: 0xe0000d04, + // Block 0x269, offset 0x9a40 + 0x9a40: 0xe0000cfe, 0x9a41: 0xe0000cf8, 0x9a42: 0xe0000cf5, 0x9a43: 0xe0000d51, + 0x9a44: 0xe0000d4e, 0x9a45: 0xe0000d6f, 0x9a46: 0xe0000d6c, 0x9a47: 0xe0000d5d, + 0x9a48: 0xe0000d5a, 0x9a49: 0xf0000404, 0x9a4a: 0x002e9ea3, 0x9a4b: 0x402e9e21, + 0x9a4c: 0xe0000e2e, 0x9a4d: 0xe0000e2b, 0x9a4e: 0xe0000da0, 0x9a4f: 0xe0000d9d, + 0x9a50: 0x003210c3, 0x9a51: 0x40321022, 0x9a52: 0x00321103, 0x9a53: 0x40321024, + 0x9a54: 0xe0000eca, 0x9a55: 0xe0000ec7, 0x9a56: 0xe0000edc, 0x9a57: 0xe0000ed9, + 0x9a58: 0xe0000ed0, 0x9a59: 0xe0000ecd, 0x9a5a: 0xe0000f1f, 0x9a5b: 0xe0000f1c, + 0x9a5c: 0xe0000f2d, 0x9a5d: 0xe0000f2a, 0x9a5e: 0xe0000f47, 0x9a5f: 0xe0000f44, + 0x9a60: 0xe0000f33, 0x9a61: 0xe0000f30, 0x9a62: 0xe0000f99, 0x9a63: 0xe0000f96, + 0x9a64: 0xe0000f8a, 0x9a65: 0xe0000f87, 0x9a66: 0x00303688, 0x9a67: 0x40303620, + 0x9a68: 0xe000102b, 0x9a69: 0xe0001028, 0x9a6a: 0xe000103f, 0x9a6b: 0xe000103c, + 0x9a6c: 0xe0000fe7, 0x9a6d: 0xe0000fe4, 0x9a6e: 0xe0000ff9, 0x9a6f: 0xe0000ff6, + 0x9a70: 0x003100c3, 0x9a71: 0x40310022, 0x9a72: 0xe0001039, 0x9a73: 0xe0001036, + 0x9a74: 0xe0003636, 0x9a75: 0xe0003633, 0x9a76: 0xe000110e, 0x9a77: 0xe000110b, + 0x9a78: 0xe0001117, 0x9a79: 0xe000113b, 0x9a7a: 0xe0001138, 0x9a7b: 0xe000114d, + 0x9a7c: 0xe000114a, 0x9a7d: 0xe0001147, 0x9a7e: 0xe0001144, 0x9a7f: 0xe0000f64, + // Block 0x26a, offset 0x9a80 + 0x9a80: 0x40321220, 0x9a81: 0x40321a20, 0x9a82: 0x40322220, 0x9a83: 0x40322a20, + 0x9a84: 0xe0000ad5, 0x9a85: 0xe0000ad1, 0x9a86: 0xe0000acd, 0x9a87: 0xf0000a0a, + 0x9a88: 0xf000040a, 0x9a89: 0xf0000404, 0x9a8a: 0xf0000a0a, 0x9a8b: 0xf000040a, + 0x9a8c: 0xf0000404, 0x9a8d: 0xe0000947, 0x9a8e: 0xe0000944, 0x9a8f: 0xe0000c3d, + 0x9a90: 0xe0000c3a, 0x9a91: 0xe0000dcc, 0x9a92: 0xe0000dc9, 0x9a93: 0xe0000ff3, + 0x9a94: 0xe0000ff0, 0x9a95: 0xe000298b, 0x9a96: 0xe0002988, 0x9a97: 0xe0002979, + 0x9a98: 0xe0002976, 0x9a99: 0xe0002985, 0x9a9a: 0xe0002982, 0x9a9b: 0xe000297f, + 0x9a9c: 0xe000297c, 0x9a9d: 0x402cae20, 0x9a9e: 0xe00037e8, 0x9a9f: 0xe00037e5, + 0x9aa0: 0xe0000976, 0x9aa1: 0xe0000972, 0x9aa2: 0xe00029af, 0x9aa3: 0xe00029ac, + 0x9aa4: 0x002d3a88, 0x9aa5: 0x402d3a20, 0x9aa6: 0xe0000bbe, 0x9aa7: 0xe0000bbb, + 0x9aa8: 0xe0000c99, 0x9aa9: 0xe0000c96, 0x9aaa: 0xe0000e20, 0x9aab: 0xe0000e1d, + 0x9aac: 0xe0000e27, 0x9aad: 0xe0000e23, 0x9aae: 0xe0001162, 0x9aaf: 0xe000115f, + 0x9ab0: 0xe0000c8d, 0x9ab1: 0xf0000a0a, 0x9ab2: 0xf000040a, 0x9ab3: 0xf0000404, + 0x9ab4: 0xe0000bac, 0x9ab5: 0xe0000ba9, 0x9ab6: 0x002d7888, 0x9ab7: 0x00319488, + 0x9ab8: 0xe0000d57, 0x9ab9: 0xe0000d54, 0x9aba: 0xe0002991, 0x9abb: 0xe000298e, + 0x9abc: 0xe00037ee, 0x9abd: 0xe00037eb, 0x9abe: 0xe0003800, 0x9abf: 0xe00037fd, + // Block 0x26b, offset 0x9ac0 + 0x9ac0: 0xe000098f, 0x9ac1: 0xe000098c, 0x9ac2: 0xe0000995, 0x9ac3: 0xe0000992, + 0x9ac4: 0xe0000b62, 0x9ac5: 0xe0000b5f, 0x9ac6: 0xe0000b68, 0x9ac7: 0xe0000b65, + 0x9ac8: 0xe0000c6c, 0x9ac9: 0xe0000c69, 0x9aca: 0xe0000c72, 0x9acb: 0xe0000c6f, + 0x9acc: 0xe0000e4a, 0x9acd: 0xe0000e47, 0x9ace: 0xe0000e50, 0x9acf: 0xe0000e4d, + 0x9ad0: 0xe0000ee8, 0x9ad1: 0xe0000ee5, 0x9ad2: 0xe0000eee, 0x9ad3: 0xe0000eeb, + 0x9ad4: 0xe0001053, 0x9ad5: 0xe0001050, 0x9ad6: 0xe0001059, 0x9ad7: 0xe0001056, + 0x9ad8: 0xe0000f61, 0x9ad9: 0xe0000f5e, 0x9ada: 0xe0000fa5, 0x9adb: 0xe0000fa2, + 0x9adc: 0x00312288, 0x9add: 0x40312220, 0x9ade: 0xe0000bf4, 0x9adf: 0xe0000bf1, + 0x9ae0: 0x002ebc88, 0x9ae1: 0x402c8c20, 0x9ae2: 0x002f2288, 0x9ae3: 0x402f2220, + 0x9ae4: 0x00314088, 0x9ae5: 0x40314020, 0x9ae6: 0xe000096f, 0x9ae7: 0xe000096c, + 0x9ae8: 0xe0000b32, 0x9ae9: 0xe0000b2f, 0x9aea: 0xe00037fa, 0x9aeb: 0xe00037f7, + 0x9aec: 0xe000381e, 0x9aed: 0xe000381b, 0x9aee: 0xe0000e04, 0x9aef: 0xe0000e01, + 0x9af0: 0xe0000e0b, 0x9af1: 0xe0000e07, 0x9af2: 0xe0001129, 0x9af3: 0xe0001126, + 0x9af4: 0x402e5e20, 0x9af5: 0x402ed020, 0x9af6: 0x40305a20, 0x9af7: 0x402dd420, + 0x9af8: 0xe0000abf, 0x9af9: 0xe0000ec4, 0x9afa: 0x002be888, 0x9afb: 0x002c4488, + 0x9afc: 0x402c4420, 0x9afd: 0x002e3888, 0x9afe: 0x00303e88, 0x9aff: 0x402ffc20, + // Block 0x26c, offset 0x9b00 + 0x9b00: 0xe0000d24, 0x9b01: 0xe0000d21, 0x9b02: 0xe0000d2a, 0x9b03: 0xe0000d27, + 0x9b04: 0xe0000d69, 0x9b05: 0xe0000d66, 0x9b06: 0xe0000d7b, 0x9b07: 0xe0000d78, + 0x9b08: 0xe0000d87, 0x9b09: 0xe0000d84, 0x9b0a: 0xe0000d81, 0x9b0b: 0xe0000d7e, + 0x9b0c: 0xe000380c, 0x9b0d: 0xe0003809, 0x9b0e: 0xe0003818, 0x9b0f: 0xe0003815, + 0x9b10: 0xe0000e3d, 0x9b11: 0xe0000e39, 0x9b12: 0xe0000e35, 0x9b13: 0xe0000e31, + 0x9b14: 0xe0000ea7, 0x9b15: 0xe0000ea4, 0x9b16: 0xe0000ead, 0x9b17: 0xe0000eaa, + 0x9b18: 0xe0000ed6, 0x9b19: 0xe0000ed3, 0x9b1a: 0xe0000ef4, 0x9b1b: 0xe0000ef1, + 0x9b1c: 0xe0000efb, 0x9b1d: 0xe0000ef7, 0x9b1e: 0xe0000f02, 0x9b1f: 0xe0000eff, + 0x9b20: 0xe0000f41, 0x9b21: 0xe0000f3e, 0x9b22: 0xe0000f53, 0x9b23: 0xe0000f50, + 0x9b24: 0xe0000f26, 0x9b25: 0xe0000f22, 0x9b26: 0xe0000f3a, 0x9b27: 0xe0000f36, + 0x9b28: 0xe0000f5a, 0x9b29: 0xe0000f56, 0x9b2a: 0xe0000f93, 0x9b2b: 0xe0000f90, + 0x9b2c: 0xe0000f9f, 0x9b2d: 0xe0000f9c, 0x9b2e: 0xe0000fb1, 0x9b2f: 0xe0000fae, + 0x9b30: 0xe0000fab, 0x9b31: 0xe0000fa8, 0x9b32: 0xe0001093, 0x9b33: 0xe0001090, + 0x9b34: 0xe000109f, 0x9b35: 0xe000109c, 0x9b36: 0xe0001099, 0x9b37: 0xe0001096, + 0x9b38: 0xe0001032, 0x9b39: 0xe000102e, 0x9b3a: 0xe000298b, 0x9b3b: 0xe0002988, + 0x9b3c: 0xe00010a9, 0x9b3d: 0xe00010a6, 0x9b3e: 0xe00010af, 0x9b3f: 0xe00010ac, + // Block 0x26d, offset 0x9b40 + 0x9b40: 0xe0003630, 0x9b41: 0xe000362d, 0x9b42: 0xe000362a, 0x9b43: 0xe0003627, + 0x9b44: 0xe000363f, 0x9b45: 0xe000363c, 0x9b46: 0xe0003645, 0x9b47: 0xe0003642, + 0x9b48: 0xe000364b, 0x9b49: 0xe0003648, 0x9b4a: 0xe00010fc, 0x9b4b: 0xe00010f9, + 0x9b4c: 0xe00010f6, 0x9b4d: 0xe00010f3, 0x9b4e: 0xe0001123, 0x9b4f: 0xe0001120, + 0x9b50: 0xe0001141, 0x9b51: 0xe000113e, 0x9b52: 0xe0001153, 0x9b53: 0xe0001150, + 0x9b54: 0xe0001159, 0x9b55: 0xe0001156, 0x9b56: 0xe0000c15, 0x9b57: 0xe0000f8d, + 0x9b58: 0xe0003639, 0x9b59: 0xe0001111, 0x9b5a: 0xf0000404, 0x9b5b: 0xe0000f70, + 0x9b5c: 0x40300420, 0x9b5d: 0x40300620, 0x9b5e: 0xe0000f7f, 0x9b5f: 0x402c9620, + 0x9b60: 0xe000099b, 0x9b61: 0xe0000998, 0x9b62: 0xe0000989, 0x9b63: 0xe0000986, + 0x9b64: 0xe0000928, 0x9b65: 0xe0000924, 0x9b66: 0xe0000930, 0x9b67: 0xe000092c, + 0x9b68: 0xe0000940, 0x9b69: 0xe000093c, 0x9b6a: 0xe0000938, 0x9b6b: 0xe0000934, + 0x9b6c: 0xe00009aa, 0x9b6d: 0xe00009a6, 0x9b6e: 0xe0000902, 0x9b6f: 0xe00008fe, + 0x9b70: 0xe000090a, 0x9b71: 0xe0000906, 0x9b72: 0xe000091a, 0x9b73: 0xe0000916, + 0x9b74: 0xe0000912, 0x9b75: 0xe000090e, 0x9b76: 0xe00009a2, 0x9b77: 0xe000099e, + 0x9b78: 0xe0000b6e, 0x9b79: 0xe0000b6b, 0x9b7a: 0xe0000b5c, 0x9b7b: 0xe0000b59, + 0x9b7c: 0xe0000b26, 0x9b7d: 0xe0000b23, 0x9b7e: 0xe0000afb, 0x9b7f: 0xe0000af7, + // Block 0x26e, offset 0x9b80 + 0x9b80: 0xe0000b03, 0x9b81: 0xe0000aff, 0x9b82: 0xe0000b13, 0x9b83: 0xe0000b0f, + 0x9b84: 0xe0000b0b, 0x9b85: 0xe0000b07, 0x9b86: 0xe0000b75, 0x9b87: 0xe0000b71, + 0x9b88: 0xe0000c66, 0x9b89: 0xe0000c63, 0x9b8a: 0xe0000c78, 0x9b8b: 0xe0000c75, + 0x9b8c: 0xe0000e84, 0x9b8d: 0xe0000e81, 0x9b8e: 0xe0000e44, 0x9b8f: 0xe0000e41, + 0x9b90: 0xe0000dad, 0x9b91: 0xe0000da9, 0x9b92: 0xe0000db5, 0x9b93: 0xe0000db1, + 0x9b94: 0xe0000dc5, 0x9b95: 0xe0000dc1, 0x9b96: 0xe0003812, 0x9b97: 0xe000380f, + 0x9b98: 0xe0000e8b, 0x9b99: 0xe0000e87, 0x9b9a: 0xe0000e5d, 0x9b9b: 0xe0000e59, + 0x9b9c: 0xe0000e65, 0x9b9d: 0xe0000e61, 0x9b9e: 0xe0000e75, 0x9b9f: 0xe0000e71, + 0x9ba0: 0xe0003824, 0x9ba1: 0xe0003821, 0x9ba2: 0xe0000e7d, 0x9ba3: 0xe0000e79, + 0x9ba4: 0xe000108d, 0x9ba5: 0xe000108a, 0x9ba6: 0xe000104d, 0x9ba7: 0xe000104a, + 0x9ba8: 0xe0001066, 0x9ba9: 0xe0001062, 0x9baa: 0xe000106e, 0x9bab: 0xe000106a, + 0x9bac: 0xe000107e, 0x9bad: 0xe000107a, 0x9bae: 0xe0001076, 0x9baf: 0xe0001072, + 0x9bb0: 0xe0001086, 0x9bb1: 0xe0001082, 0x9bb2: 0xe0001108, 0x9bb3: 0xe0001105, + 0x9bb4: 0xe0001135, 0x9bb5: 0xe0001132, 0x9bb6: 0xe000112f, 0x9bb7: 0xe000112c, + 0x9bb8: 0xe000111d, 0x9bb9: 0xe000111a, 0x9bba: 0xe0000d0a, 0x9bbb: 0xe0000d07, + 0x9bbc: 0x0030d888, 0x9bbd: 0x4030d820, 0x9bbe: 0x00312088, 0x9bbf: 0x40312020, + // Block 0x26f, offset 0x9bc0 + 0x9bc0: 0xe0000024, 0x9bc1: 0xe0000029, 0x9bc2: 0xe000002e, 0x9bc3: 0xe0000033, + 0x9bc4: 0xe0000038, 0x9bc5: 0xe000003d, 0x9bc6: 0xe0000042, 0x9bc7: 0xe0000047, + 0x9bc8: 0xf0001f04, 0x9bc9: 0xf0001f04, 0x9bca: 0xf0001f04, 0x9bcb: 0xf0001f04, + 0x9bcc: 0xf0001f04, 0x9bcd: 0xf0001f04, 0x9bce: 0xf0001f04, 0x9bcf: 0xf0001f04, + 0x9bd0: 0xf0001f04, 0x9bd1: 0xf0000404, 0x9bd2: 0xf0000404, 0x9bd3: 0xf0000404, + 0x9bd4: 0xf0000404, 0x9bd5: 0xf0000404, 0x9bd6: 0xf0000404, 0x9bd7: 0xf0000404, + 0x9bd8: 0xf0000404, 0x9bd9: 0xf0000404, 0x9bda: 0xf0000404, 0x9bdb: 0xf0000404, + 0x9bdc: 0xf0000404, 0x9bdd: 0xf0000404, 0x9bde: 0xf0000404, 0x9bdf: 0xf0000404, + 0x9be0: 0xf0000404, 0x9be1: 0xf0000404, 0x9be2: 0xf0000404, 0x9be3: 0xf0000404, + 0x9be4: 0xf0000404, 0x9be5: 0xf0000404, 0x9be6: 0xf0000404, 0x9be7: 0xf0000404, + 0x9be8: 0xf0000404, 0x9be9: 0xf0000404, 0x9bea: 0xf0000404, 0x9beb: 0xf0000404, + 0x9bec: 0xf0000404, 0x9bed: 0xf0000404, 0x9bee: 0xf0000404, 0x9bef: 0xf0000404, + 0x9bf0: 0xf0000404, 0x9bf1: 0xf0000404, 0x9bf2: 0xe0002c46, 0x9bf3: 0xf0000404, + 0x9bf4: 0xf0000404, 0x9bf5: 0xf0000404, 0x9bf6: 0x002bde8c, 0x9bf7: 0x002c0a8c, + 0x9bf8: 0x002c3a8c, 0x9bf9: 0x002c628c, 0x9bfa: 0x002c988c, 0x9bfb: 0x002d088c, + 0x9bfc: 0x002d228c, 0x9bfd: 0x002d688c, 0x9bfe: 0x002d9a8c, 0x9bff: 0x002dcc8c, + // Block 0x270, offset 0x9c00 + 0x9c00: 0xf0001d1c, 0x9c01: 0xf0001d1c, 0x9c02: 0xf0001d1c, 0x9c03: 0xf0001d1c, + 0x9c04: 0xf0001d1c, 0x9c05: 0xf0001d1d, 0x9c06: 0xf0001d1d, 0x9c07: 0xf0001d1d, + 0x9c08: 0xe0000a6b, 0x9c09: 0xe0000cb4, 0x9c0a: 0xf0001d1c, 0x9c0b: 0xf0001d1c, + 0x9c0c: 0xf0001d1c, 0x9c0d: 0xf0001c1c, 0x9c0e: 0xf0001c1c, 0x9c0f: 0xf0001c1c, + 0x9c10: 0xf0001c1d, 0x9c11: 0xe0000cb9, 0x9c12: 0xe0000d36, 0x9c13: 0xe0000be3, + 0x9c14: 0xe0000fc5, 0x9c15: 0xf0001c1c, 0x9c16: 0xf0001c1c, 0x9c17: 0xf0001c1c, + 0x9c18: 0xf0001c1c, 0x9c19: 0xf0001c1c, 0x9c1a: 0xf0001c1c, 0x9c1b: 0xf0001c1c, + 0x9c1c: 0xf0001c1c, 0x9c1d: 0xf0001c1c, 0x9c1e: 0xf0001c1c, 0x9c1f: 0xe0000d3e, + 0x9c20: 0xe0000a72, 0x9c21: 0xf0001c1c, 0x9c22: 0xe0000cbd, 0x9c23: 0xe0000d42, + 0x9c24: 0xe0000a76, 0x9c25: 0xf0001c1c, 0x9c26: 0xe0000cc1, 0x9c27: 0xe0000d2d, + 0x9c28: 0xe0000d31, 0x9c29: 0xf0001c1d, 0x9c2a: 0xe0000cc5, 0x9c2b: 0xe0000d4a, + 0x9c2c: 0xe0000be7, 0x9c2d: 0xe0000f0b, 0x9c2e: 0xe0000f0f, 0x9c2f: 0xe0000f15, + 0x9c30: 0xf0001c1c, 0x9c31: 0xf0001c1c, 0x9c32: 0xf0001c1c, 0x9c33: 0xf0001c1c, + 0x9c34: 0xf0001d1c, 0x9c35: 0xf0001d1c, 0x9c36: 0xf0001d1c, 0x9c37: 0xf0001d1c, + 0x9c38: 0xf0001d1c, 0x9c39: 0xf0001d1d, 0x9c3a: 0xe00035df, 0x9c3b: 0xe00035cd, + 0x9c3c: 0xe0003600, 0x9c3d: 0xe00035af, 0x9c3e: 0xe0002812, 0x9c3f: 0xe00035b2, + // Block 0x271, offset 0x9c40 + 0x9c40: 0xf0001f04, 0x9c41: 0xf0001f04, 0x9c42: 0xf0001f04, 0x9c43: 0xf0001f04, + 0x9c44: 0xf0001f04, 0x9c45: 0xf0001f04, 0x9c46: 0xf0001f04, 0x9c47: 0xf0001f04, + 0x9c48: 0xf0001f04, 0x9c49: 0xf0001f04, 0x9c4a: 0xf0001f04, + 0x9c50: 0xf0000a04, 0x9c51: 0xf0000a04, 0x9c52: 0xf0000a04, 0x9c53: 0xf0000a04, + 0x9c54: 0xf0000a04, 0x9c55: 0xf0000a04, 0x9c56: 0xf0000a04, 0x9c57: 0xf0000a04, + 0x9c58: 0xf0000a04, 0x9c59: 0xf0000a04, 0x9c5a: 0xf0000a04, 0x9c5b: 0xf0000a04, + 0x9c5c: 0xf0000a04, 0x9c5d: 0xf0000a04, 0x9c5e: 0xf0000a04, 0x9c5f: 0xf0000a04, + 0x9c60: 0xf0000a04, 0x9c61: 0xf0000a04, 0x9c62: 0xf0000a04, 0x9c63: 0xf0000a04, + 0x9c64: 0xf0000a04, 0x9c65: 0xf0000a04, 0x9c66: 0xe0002c4a, 0x9c67: 0xf0000a04, + 0x9c68: 0xf0000a04, 0x9c69: 0xf0000a04, 0x9c6a: 0xf0000a04, 0x9c6b: 0x002c3a8c, + 0x9c6c: 0x002f7a8c, 0x9c6d: 0xf0000c0c, 0x9c6e: 0xe00035e8, + 0x9c70: 0x002bde9d, 0x9c71: 0x002c0a9d, 0x9c72: 0x002c3a9d, 0x9c73: 0x002c629d, + 0x9c74: 0x002c989d, 0x9c75: 0x002d089d, 0x9c76: 0x002d229d, 0x9c77: 0x002d689d, + 0x9c78: 0x002d9a9d, 0x9c79: 0x002dcc9d, 0x9c7a: 0x002dfe9d, 0x9c7b: 0x002e229d, + 0x9c7c: 0x002e829d, 0x9c7d: 0x002e9e9d, 0x9c7e: 0x002ee29d, 0x9c7f: 0x002f2c9d, + // Block 0x272, offset 0x9c80 + 0x9c80: 0xa0000000, 0x9c81: 0xa0000000, 0x9c82: 0xa0000000, 0x9c83: 0xa0000000, + 0x9c84: 0xa0000000, 0x9c85: 0xa0000000, 0x9c86: 0xa0000000, 0x9c87: 0xa0000000, + 0x9c88: 0xa0000000, 0x9c89: 0x40020020, 0x9c8a: 0x40020220, 0x9c8b: 0x40020420, + 0x9c8c: 0x40020620, 0x9c8d: 0x40020820, 0x9c8e: 0xa0000000, 0x9c8f: 0xa0000000, + 0x9c90: 0xa0000000, 0x9c91: 0xa0000000, 0x9c92: 0xa0000000, 0x9c93: 0xa0000000, + 0x9c94: 0xa0000000, 0x9c95: 0xa0000000, 0x9c96: 0xa0000000, 0x9c97: 0xa0000000, + 0x9c98: 0xa0000000, 0x9c99: 0xa0000000, 0x9c9a: 0xa0000000, 0x9c9b: 0xa0000000, + 0x9c9c: 0xa0000000, 0x9c9d: 0xa0000000, 0x9c9e: 0xa0000000, 0x9c9f: 0xa0000000, + 0x9ca0: 0x40021220, 0x9ca1: 0x4002ba20, 0x9ca2: 0x4003e020, 0x9ca3: 0x4004ea20, + 0x9ca4: 0x4027de20, 0x9ca5: 0x4004ec20, 0x9ca6: 0x4004e620, 0x9ca7: 0x4003d220, + 0x9ca8: 0x4003f420, 0x9ca9: 0x4003f620, 0x9caa: 0x4004d820, 0x9cab: 0x40093820, + 0x9cac: 0x40024020, 0x9cad: 0x40021a20, 0x9cae: 0x4002e420, 0x9caf: 0x4004e220, + 0x9cb0: 0x4029cc20, 0x9cb1: 0x4029ce20, 0x9cb2: 0x4029d020, 0x9cb3: 0x4029d220, + 0x9cb4: 0x4029d420, 0x9cb5: 0x4029d620, 0x9cb6: 0x4029d820, 0x9cb7: 0x4029da20, + 0x9cb8: 0x4029dc20, 0x9cb9: 0x4029de20, 0x9cba: 0x40026c20, 0x9cbb: 0x40026220, + 0x9cbc: 0x40094020, 0x9cbd: 0x40094220, 0x9cbe: 0x40094420, 0x9cbf: 0x4002c420, + // Block 0x273, offset 0x9cc0 + 0x9cc0: 0x4004d620, 0x9cc1: 0x002bde88, 0x9cc2: 0x002c0a88, 0x9cc3: 0x002c3a88, + 0x9cc4: 0x002c6288, 0x9cc5: 0x002c9888, 0x9cc6: 0x002d0888, 0x9cc7: 0x002d2288, + 0x9cc8: 0x002d6888, 0x9cc9: 0x002d9a88, 0x9cca: 0x002dcc88, 0x9ccb: 0x002dfe88, + 0x9ccc: 0xc0030002, 0x9ccd: 0x002e8288, 0x9cce: 0xc5852853, 0x9ccf: 0x002ee288, + 0x9cd0: 0x002f2c88, 0x9cd1: 0x002f5688, 0x9cd2: 0x002f7a88, 0x9cd3: 0x002fe688, + 0x9cd4: 0x00302c88, 0x9cd5: 0x00306c88, 0x9cd6: 0x0030be88, 0x9cd7: 0x0030e288, + 0x9cd8: 0x0030f688, 0x9cd9: 0x00310088, 0x9cda: 0x00312a88, 0x9cdb: 0x4003f820, + 0x9cdc: 0x4004e420, 0x9cdd: 0x4003fa20, 0x9cde: 0x40062420, 0x9cdf: 0x40021620, + 0x9ce0: 0x40061e20, 0x9ce1: 0x402bde20, 0x9ce2: 0x402c0a20, 0x9ce3: 0x402c3a20, + 0x9ce4: 0x402c6220, 0x9ce5: 0x402c9820, 0x9ce6: 0x402d0820, 0x9ce7: 0x402d2220, + 0x9ce8: 0x402d6820, 0x9ce9: 0x402d9a20, 0x9cea: 0x402dcc20, 0x9ceb: 0x402dfe20, + 0x9cec: 0xc0000002, 0x9ced: 0x402e8220, 0x9cee: 0xc5822822, 0x9cef: 0x402ee220, + 0x9cf0: 0x402f2c20, 0x9cf1: 0x402f5620, 0x9cf2: 0x402f7a20, 0x9cf3: 0x402fe620, + 0x9cf4: 0x40302c20, 0x9cf5: 0x40306c20, 0x9cf6: 0x4030be20, 0x9cf7: 0x4030e220, + 0x9cf8: 0x4030f620, 0x9cf9: 0x40310020, 0x9cfa: 0x40312a20, 0x9cfb: 0x4003fc20, + 0x9cfc: 0x40094820, 0x9cfd: 0x4003fe20, 0x9cfe: 0x40094c20, 0x9cff: 0xa0000000, + // Block 0x274, offset 0x9d00 + 0x9d01: 0x40417021, 0x9d02: 0x40417020, 0x9d03: 0x40417220, + 0x9d05: 0x40417020, 0x9d06: 0x40417220, 0x9d07: 0x40417420, + 0x9d08: 0x40417620, 0x9d09: 0x40417820, 0x9d0a: 0x40417a20, 0x9d0b: 0x40417c20, + 0x9d0c: 0x40418020, 0x9d0d: 0x40418420, 0x9d0f: 0x40418620, + 0x9d10: 0x40418820, 0x9d11: 0x40418a20, 0x9d13: 0x40418c20, + 0x9d14: 0x40418e20, 0x9d15: 0x40419020, 0x9d16: 0x40419220, 0x9d17: 0x40419420, + 0x9d18: 0x40419620, 0x9d19: 0x40419820, 0x9d1a: 0x40419a20, 0x9d1b: 0x40419c20, + 0x9d1c: 0x40419e20, 0x9d1d: 0x4041a020, 0x9d1e: 0x4041a220, 0x9d1f: 0x4041a420, + 0x9d20: 0x4041a620, 0x9d21: 0x4041a820, 0x9d22: 0x4041aa20, 0x9d23: 0x4041ac20, + 0x9d24: 0x4041ae20, 0x9d25: 0x4041b020, 0x9d26: 0x4041b220, 0x9d27: 0x4041b420, + 0x9d28: 0x4041b620, 0x9d2a: 0x4041b820, 0x9d2b: 0x4041ba20, + 0x9d2c: 0x4041bc20, 0x9d2d: 0x4041be20, 0x9d2e: 0x4041c020, 0x9d2f: 0x4041c220, + 0x9d30: 0x4041c420, 0x9d32: 0x4041c620, 0x9d33: 0x4041d220, + 0x9d35: 0x4041c820, 0x9d36: 0x4041ca20, 0x9d37: 0x4041cc20, + 0x9d38: 0x4041ce20, 0x9d39: 0x4041d020, + 0x9d3c: 0xa070f102, 0x9d3d: 0x4041d420, 0x9d3e: 0x4041d620, 0x9d3f: 0x4041d820, + // Block 0x275, offset 0x9d40 + 0x9d40: 0xa0000000, 0x9d41: 0xa0000000, 0x9d42: 0xa0000000, 0x9d43: 0xa0000000, + 0x9d44: 0xa0000000, 0x9d45: 0xa0000000, 0x9d46: 0xa0000000, 0x9d47: 0xa0000000, + 0x9d48: 0xa0000000, 0x9d49: 0x40020020, 0x9d4a: 0x40020220, 0x9d4b: 0x40020420, + 0x9d4c: 0x40020620, 0x9d4d: 0x40020820, 0x9d4e: 0xa0000000, 0x9d4f: 0xa0000000, + 0x9d50: 0xa0000000, 0x9d51: 0xa0000000, 0x9d52: 0xa0000000, 0x9d53: 0xa0000000, + 0x9d54: 0xa0000000, 0x9d55: 0xa0000000, 0x9d56: 0xa0000000, 0x9d57: 0xa0000000, + 0x9d58: 0xa0000000, 0x9d59: 0xa0000000, 0x9d5a: 0xa0000000, 0x9d5b: 0xa0000000, + 0x9d5c: 0xa0000000, 0x9d5d: 0xa0000000, 0x9d5e: 0xa0000000, 0x9d5f: 0xa0000000, + 0x9d60: 0x40021220, 0x9d61: 0x4002ba20, 0x9d62: 0x4003e020, 0x9d63: 0x4004ea20, + 0x9d64: 0x4027de20, 0x9d65: 0x4004ec20, 0x9d66: 0x4004e620, 0x9d67: 0xc58f26f2, + 0x9d68: 0x4003f420, 0x9d69: 0x4003f620, 0x9d6a: 0x4004d820, 0x9d6b: 0x40093820, + 0x9d6c: 0x40024020, 0x9d6d: 0x40021a20, 0x9d6e: 0x4002e420, 0x9d6f: 0x4004e220, + 0x9d70: 0x4029cc20, 0x9d71: 0x4029ce20, 0x9d72: 0x4029d020, 0x9d73: 0x4029d220, + 0x9d74: 0x4029d420, 0x9d75: 0x4029d620, 0x9d76: 0x4029d820, 0x9d77: 0x4029da20, + 0x9d78: 0x4029dc20, 0x9d79: 0x4029de20, 0x9d7a: 0x40026c20, 0x9d7b: 0x40026220, + 0x9d7c: 0x40094020, 0x9d7d: 0x40094220, 0x9d7e: 0x40094420, 0x9d7f: 0x4002c420, + // Block 0x276, offset 0x9d80 + 0x9d80: 0x4004d620, 0x9d81: 0x002bde88, 0x9d82: 0x002c0a88, 0x9d83: 0x002c3a88, + 0x9d84: 0x002c6288, 0x9d85: 0x002c9888, 0x9d86: 0x002d0888, 0x9d87: 0x002d2288, + 0x9d88: 0x002d6888, 0x9d89: 0x002d9a88, 0x9d8a: 0x002dcc88, 0x9d8b: 0x002dfe88, + 0x9d8c: 0xc0030002, 0x9d8d: 0x002e8288, 0x9d8e: 0x002e9e88, 0x9d8f: 0x002ee288, + 0x9d90: 0x002f2c88, 0x9d91: 0x002f5688, 0x9d92: 0x002f7a88, 0x9d93: 0xc58909c2, + 0x9d94: 0xc38a2722, 0x9d95: 0x00306c88, 0x9d96: 0x0030be88, 0x9d97: 0x0030e288, + 0x9d98: 0x0030f688, 0x9d99: 0x00310088, 0x9d9a: 0x00312a88, 0x9d9b: 0x4003f820, + 0x9d9c: 0x4004e420, 0x9d9d: 0x4003fa20, 0x9d9e: 0x40062420, 0x9d9f: 0x40021620, + 0x9da0: 0x40061e20, 0x9da1: 0x402bde20, 0x9da2: 0x402c0a20, 0x9da3: 0x402c3a20, + 0x9da4: 0x402c6220, 0x9da5: 0x402c9820, 0x9da6: 0x402d0820, 0x9da7: 0x402d2220, + 0x9da8: 0x402d6820, 0x9da9: 0x402d9a20, 0x9daa: 0x402dcc20, 0x9dab: 0x402dfe20, + 0x9dac: 0xc0000002, 0x9dad: 0x402e8220, 0x9dae: 0x402e9e20, 0x9daf: 0x402ee220, + 0x9db0: 0x402f2c20, 0x9db1: 0x402f5620, 0x9db2: 0x402f7a20, 0x9db3: 0xc34109b1, + 0x9db4: 0xc3882711, 0x9db5: 0x40306c20, 0x9db6: 0x4030be20, 0x9db7: 0x4030e220, + 0x9db8: 0x4030f620, 0x9db9: 0x40310020, 0x9dba: 0x40312a20, 0x9dbb: 0x4003fc20, + 0x9dbc: 0x40094820, 0x9dbd: 0x4003fe20, 0x9dbe: 0x40094c20, 0x9dbf: 0xa0000000, + // Block 0x277, offset 0x9dc0 + 0x9dc0: 0x402c1a20, 0x9dc1: 0x002c0c83, 0x9dc2: 0x002c3288, 0x9dc3: 0x402c3220, + 0x9dc4: 0x0031c488, 0x9dc5: 0x4031c420, 0x9dc6: 0x002efa88, 0x9dc7: 0x002c4e88, + 0x9dc8: 0x402c4e20, 0x9dc9: 0x002c7288, 0x9dca: 0x002c6483, 0x9dcb: 0x002c8488, + 0x9dcc: 0x402c8420, 0x9dcd: 0xe000115c, 0x9dce: 0x002cae88, 0x9dcf: 0x002cb888, + 0x9dd0: 0x002cc288, 0x9dd1: 0x002d1688, 0x9dd2: 0x402d1620, 0x9dd3: 0x002d4488, + 0x9dd4: 0x002d5888, 0x9dd5: 0x402d7820, 0x9dd6: 0x002dc288, 0x9dd7: 0x002db688, + 0x9dd8: 0x002e0083, 0x9dd9: 0x402e0020, 0x9dda: 0x402e3820, 0x9ddb: 0x402e7220, + 0x9ddc: 0x0030a088, 0x9ddd: 0x002eb488, 0x9dde: 0x402ebc20, 0x9ddf: 0x002f1088, + 0x9de0: 0xe0000e56, 0x9de1: 0xe0000e53, 0x9de2: 0x002d6088, 0x9de3: 0x402d6020, + 0x9de4: 0x002f3e88, 0x9de5: 0x402f3e20, 0x9de6: 0x002f8288, 0x9de7: 0x0031b488, + 0x9de8: 0x4031b420, 0x9de9: 0x00300888, 0x9dea: 0x40301220, 0x9deb: 0x40304220, + 0x9dec: 0x00304a88, 0x9ded: 0x40304a20, 0x9dee: 0x00305288, 0x9def: 0xe000105f, + 0x9df0: 0xe000105c, 0x9df1: 0x0030b488, 0x9df2: 0x0030cc88, 0x9df3: 0x00310285, + 0x9df4: 0x40310220, 0x9df5: 0x00313488, 0x9df6: 0x40313420, 0x9df7: 0x00316488, + 0x9df8: 0x00316e88, 0x9df9: 0x40316e20, 0x9dfa: 0x40317820, 0x9dfb: 0x4031a620, + 0x9dfc: 0x0031bc88, 0x9dfd: 0x4031bc20, 0x9dfe: 0xe0000fc9, 0x9dff: 0x40319420, + // Block 0x278, offset 0x9e00 + 0x9e00: 0x40315820, 0x9e01: 0x0031d488, 0x9e02: 0x4031d420, 0x9e03: 0x002c1a88, + 0x9e04: 0x00307c88, 0x9e05: 0x0030da88, 0x9e06: 0x002ca288, 0x9e07: 0x402ca220, + 0x9e08: 0x002dde88, 0x9e09: 0x402dde20, 0x9e0a: 0x002f6a88, 0x9e0b: 0x402f6a20, + 0x9e0c: 0x002f8e88, 0x9e0d: 0x402f8e20, 0x9e0e: 0x00311088, 0x9e0f: 0x40311020, + 0x9e10: 0x402bf020, 0x9e11: 0x402bf820, 0x9e12: 0x402c0220, 0x9e13: 0x402c0c20, + 0x9e14: 0x402efa20, 0x9e15: 0x402c5620, 0x9e16: 0x402c7220, 0x9e17: 0x402c6420, + 0x9e18: 0x402ccc20, 0x9e19: 0x402cb820, 0x9e1a: 0x402cd420, 0x9e1b: 0x402cc220, + 0x9e1c: 0x402cdc20, 0x9e1d: 0x402ce820, 0x9e1e: 0x402cf020, 0x9e1f: 0x402dee20, + 0x9e20: 0x402d4420, 0x9e21: 0x402d2a20, 0x9e22: 0x402d3220, 0x9e23: 0x402d5820, + 0x9e24: 0x402d0020, 0x9e25: 0x40308820, 0x9e26: 0x402d8020, 0x9e27: 0x402d8e20, + 0x9e28: 0x402db620, 0x9e29: 0x402dc220, 0x9e2a: 0x402daa20, 0x9e2b: 0x402e4220, + 0x9e2c: 0x402e4a20, 0x9e2d: 0x402e5420, 0x9e2e: 0x402e6820, 0x9e2f: 0x4030a020, + 0x9e30: 0x4030ac20, 0x9e31: 0x402e9020, 0x9e32: 0x402eb420, 0x9e33: 0x402ec820, + 0x9e34: 0x402ea620, 0x9e35: 0x402f1020, 0x9e36: 0x402eee20, 0x9e37: 0x402f1a20, + 0x9e38: 0x402f4c20, 0x9e39: 0x402f9820, 0x9e3a: 0x402fa220, 0x9e3b: 0x402fac20, + 0x9e3c: 0x402fb620, 0x9e3d: 0x402fbe20, 0x9e3e: 0x402fc620, 0x9e3f: 0x402fd020, + // Block 0x279, offset 0x9e40 + 0x9e40: 0x402f8220, 0x9e41: 0x402fd820, 0x9e42: 0x402ff420, 0x9e43: 0x40300820, + 0x9e44: 0x402df620, 0x9e45: 0x40301a20, 0x9e46: 0x40302420, 0x9e47: 0x40306420, + 0x9e48: 0x40305220, 0x9e49: 0x40307c20, 0x9e4a: 0x4030b420, 0x9e4b: 0x4030cc20, + 0x9e4c: 0x4030da20, 0x9e4d: 0x4030ee20, 0x9e4e: 0x402e7a20, 0x9e4f: 0x40310820, + 0x9e50: 0x40314820, 0x9e51: 0x40315020, 0x9e52: 0x40316420, 0x9e53: 0x40318020, + 0x9e54: 0x4031cc20, 0x9e55: 0x4031e820, 0x9e56: 0x40320a20, 0x9e57: 0x40323220, + 0x9e58: 0x40323a20, 0x9e59: 0x402c1220, 0x9e5a: 0x402cf820, 0x9e5b: 0x402d4c20, + 0x9e5c: 0x402d7020, 0x9e5d: 0x402de620, 0x9e5e: 0x402e1a20, 0x9e5f: 0x402e2a20, + 0x9e60: 0x402f6220, 0x9e61: 0x4031fa20, 0x9e62: 0x40320220, 0x9e63: 0xe0000aca, + 0x9e64: 0xe0000adc, 0x9e65: 0xe0000ad9, 0x9e66: 0xe0000fcc, 0x9e67: 0xe0000fcf, + 0x9e68: 0xe0000fba, 0x9e69: 0xe0000ba1, 0x9e6a: 0xe0000d11, 0x9e6b: 0xe0000d18, + 0x9e6c: 0x40324220, 0x9e6d: 0x40324a20, 0x9e6e: 0x40309020, 0x9e6f: 0x40309820, + 0x9e70: 0x002d6894, 0x9e71: 0x002d8094, 0x9e72: 0x002dcc94, 0x9e73: 0x002f7a94, + 0x9e74: 0x002f9894, 0x9e75: 0x002fac94, 0x9e76: 0x002fd894, 0x9e77: 0x0030e294, + 0x9e78: 0x00310094, 0x9e79: 0x40064020, 0x9e7a: 0x40064420, 0x9e7b: 0x402d9620, + 0x9e7c: 0xc58c26f2, 0x9e7d: 0x402d9820, 0x9e7e: 0x4031e220, 0x9e7f: 0x4031f020, + // Block 0x27a, offset 0x9e80 + 0x9e80: 0xa0000000, 0x9e81: 0xa0000000, 0x9e82: 0xa0000000, 0x9e83: 0xa0000000, + 0x9e84: 0xa0000000, 0x9e85: 0xa0000000, 0x9e86: 0xa0000000, 0x9e87: 0xa0000000, + 0x9e88: 0xa0000000, 0x9e89: 0x40020020, 0x9e8a: 0x40020220, 0x9e8b: 0x40020420, + 0x9e8c: 0x40020620, 0x9e8d: 0x40020820, 0x9e8e: 0xa0000000, 0x9e8f: 0xa0000000, + 0x9e90: 0xa0000000, 0x9e91: 0xa0000000, 0x9e92: 0xa0000000, 0x9e93: 0xa0000000, + 0x9e94: 0xa0000000, 0x9e95: 0xa0000000, 0x9e96: 0xa0000000, 0x9e97: 0xa0000000, + 0x9e98: 0xa0000000, 0x9e99: 0xa0000000, 0x9e9a: 0xa0000000, 0x9e9b: 0xa0000000, + 0x9e9c: 0xa0000000, 0x9e9d: 0xa0000000, 0x9e9e: 0xa0000000, 0x9e9f: 0xa0000000, + 0x9ea0: 0x40021220, 0x9ea1: 0x4002ba20, 0x9ea2: 0x4003e020, 0x9ea3: 0x4004ea20, + 0x9ea4: 0x4027de20, 0x9ea5: 0x4004ec20, 0x9ea6: 0x4004e620, 0x9ea7: 0x4003d220, + 0x9ea8: 0x4003f420, 0x9ea9: 0x4003f620, 0x9eaa: 0x4004d820, 0x9eab: 0x40093820, + 0x9eac: 0x40024020, 0x9ead: 0x40021a20, 0x9eae: 0x4002e420, 0x9eaf: 0x4004e220, + 0x9eb0: 0x4029cc20, 0x9eb1: 0x4029ce20, 0x9eb2: 0x4029d020, 0x9eb3: 0x4029d220, + 0x9eb4: 0x4029d420, 0x9eb5: 0x4029d620, 0x9eb6: 0x4029d820, 0x9eb7: 0x4029da20, + 0x9eb8: 0x4029dc20, 0x9eb9: 0x4029de20, 0x9eba: 0x40026c20, 0x9ebb: 0x40026220, + 0x9ebc: 0x40094020, 0x9ebd: 0x40094220, 0x9ebe: 0x40094420, 0x9ebf: 0x4002c420, + // Block 0x27b, offset 0x9ec0 + 0x9ec0: 0x4004d620, 0x9ec1: 0x002bde83, 0x9ec2: 0x002c0a88, 0x9ec3: 0x002c3a88, + 0x9ec4: 0x002c6288, 0x9ec5: 0x002be083, 0x9ec6: 0x002d0888, 0x9ec7: 0x002d2288, + 0x9ec8: 0x002be883, 0x9ec9: 0x002be283, 0x9eca: 0x002dcc88, 0x9ecb: 0x002bea83, + 0x9ecc: 0xc5950002, 0x9ecd: 0x002bee83, 0x9ece: 0x002bf083, 0x9ecf: 0x002be483, + 0x9ed0: 0x002bf283, 0x9ed1: 0x002f5688, 0x9ed2: 0x002f7a88, 0x9ed3: 0x002fe688, + 0x9ed4: 0x00302c88, 0x9ed5: 0x002be683, 0x9ed6: 0x0030be88, 0x9ed7: 0x002bf483, + 0x9ed8: 0x0030f688, 0x9ed9: 0x00310088, 0x9eda: 0x00312a88, 0x9edb: 0x4003f820, + 0x9edc: 0x4004e420, 0x9edd: 0x4003fa20, 0x9ede: 0x40062420, 0x9edf: 0x40021620, + 0x9ee0: 0x40061e20, 0x9ee1: 0x402bde20, 0x9ee2: 0x402c0a20, 0x9ee3: 0x402c3a20, + 0x9ee4: 0x402c6220, 0x9ee5: 0x402be020, 0x9ee6: 0x402d0820, 0x9ee7: 0x402d2220, + 0x9ee8: 0x402be820, 0x9ee9: 0x402be220, 0x9eea: 0x402dcc20, 0x9eeb: 0x402bea20, + 0x9eec: 0xc5920002, 0x9eed: 0x402bee20, 0x9eee: 0x402bf020, 0x9eef: 0x402be420, + 0x9ef0: 0x402bf220, 0x9ef1: 0x402f5620, 0x9ef2: 0x402f7a20, 0x9ef3: 0x402fe620, + 0x9ef4: 0x40302c20, 0x9ef5: 0x402be620, 0x9ef6: 0x4030be20, 0x9ef7: 0x402bf420, + 0x9ef8: 0x4030f620, 0x9ef9: 0x40310020, 0x9efa: 0x40312a20, 0x9efb: 0x4003fc20, + 0x9efc: 0x40094820, 0x9efd: 0x4003fe20, 0x9efe: 0x40094c20, 0x9eff: 0xa0000000, + // Block 0x27c, offset 0x9f00 + 0x9f00: 0xe000382a, 0x9f01: 0xe0003827, 0x9f02: 0xe0003840, 0x9f03: 0xe0003864, + 0x9f04: 0xe000385d, 0x9f05: 0xe0003856, 0x9f06: 0xe00009dd, 0x9f07: 0xe0000a53, + 0x9f08: 0xe0003894, 0x9f09: 0xe000388e, 0x9f0a: 0xe00038a0, 0x9f0b: 0xe00038cc, + 0x9f0c: 0xe000393a, 0x9f0d: 0xe0003934, 0x9f0e: 0xe0003946, 0x9f0f: 0xe0003952, + 0x9f10: 0xe0000ab3, 0x9f11: 0xe0003be8, 0x9f12: 0xe0003999, 0x9f13: 0xe0003993, + 0x9f14: 0xe00039a5, 0x9f15: 0xe00039e5, 0x9f16: 0xe00039d1, 0x9f17: 0x40093e20, + 0x9f18: 0xe0000e12, 0x9f19: 0xe0003a89, 0x9f1a: 0xe0003a83, 0x9f1b: 0xe0003a95, + 0x9f1c: 0xe0003aa7, 0x9f1d: 0xe0001102, 0x9f1e: 0x00318888, 0x9f1f: 0xe0000f7b, + 0x9f20: 0xe00008f2, 0x9f21: 0xe00008ec, 0x9f22: 0xe000091e, 0x9f23: 0xe0000966, + 0x9f24: 0xe0000958, 0x9f25: 0xe000094a, 0x9f26: 0xe00009d5, 0x9f27: 0xe0000a4d, + 0x9f28: 0xe0003891, 0x9f29: 0xe000388b, 0x9f2a: 0xe000389d, 0x9f2b: 0xe00038c9, + 0x9f2c: 0xe0003937, 0x9f2d: 0xe0003931, 0x9f2e: 0xe0003943, 0x9f2f: 0xe000394f, + 0x9f30: 0xe0000aad, 0x9f31: 0xe0003be5, 0x9f32: 0xe0003996, 0x9f33: 0xe0003990, + 0x9f34: 0xe00039a2, 0x9f35: 0xe00039e2, 0x9f36: 0xe00039ce, 0x9f37: 0x40093c20, + 0x9f38: 0xe0000e0f, 0x9f39: 0xe0003a86, 0x9f3a: 0xe0003a80, 0x9f3b: 0xe0003a92, + 0x9f3c: 0xe0003aa4, 0x9f3d: 0xe00010ff, 0x9f3e: 0x40318820, 0x9f3f: 0xe0001114, + // Block 0x27d, offset 0x9f40 + 0x9f40: 0xe0003871, 0x9f41: 0xe0000980, 0x9f42: 0xe000382d, 0x9f43: 0xe00008f8, + 0x9f44: 0xe000386e, 0x9f45: 0xe000097a, 0x9f46: 0xe0000a38, 0x9f47: 0xe0000a35, + 0x9f48: 0xe0000a3e, 0x9f49: 0xe0000a3b, 0x9f4a: 0xe0000a4a, 0x9f4b: 0xe0000a47, + 0x9f4c: 0xe0000a44, 0x9f4d: 0xe0000a41, 0x9f4e: 0xe0000a86, 0x9f4f: 0xe0000a83, + 0x9f50: 0xe0000aaa, 0x9f51: 0xe0000aa7, 0x9f52: 0xe00038f2, 0x9f53: 0xe00038ef, + 0x9f54: 0xe000389a, 0x9f55: 0xe0003897, 0x9f56: 0xe00038d8, 0x9f57: 0xe00038d5, + 0x9f58: 0xe00038ec, 0x9f59: 0xe00038e9, 0x9f5a: 0xe00038c6, 0x9f5b: 0xe00038c3, + 0x9f5c: 0xe0000bb8, 0x9f5d: 0xe0000bb5, 0x9f5e: 0xe0000bb2, 0x9f5f: 0xe0000baf, + 0x9f60: 0xe0000bc4, 0x9f61: 0xe0000bc1, 0x9f62: 0xe0000bca, 0x9f63: 0xe0000bc7, + 0x9f64: 0xe0003b4d, 0x9f65: 0xe0003b4a, 0x9f66: 0xe0000c1b, 0x9f67: 0xe0000c18, + 0x9f68: 0xe0003960, 0x9f69: 0xe000395d, 0x9f6a: 0xe000396f, 0x9f6b: 0xe000396c, + 0x9f6c: 0xe0003940, 0x9f6d: 0xe000393d, 0x9f6e: 0xe0003969, 0x9f6f: 0xe0003966, + 0x9f70: 0xe0003963, 0x9f71: 0x402da220, 0x9f72: 0xe00027e2, 0x9f73: 0xe00027df, + 0x9f74: 0xe0000c8a, 0x9f75: 0xe0000c87, 0x9f76: 0xe0003b86, 0x9f77: 0xe0003b83, + 0x9f78: 0x402f7220, 0x9f79: 0xe0003b98, 0x9f7a: 0xe0003b95, 0x9f7b: 0xe0003ba4, + 0x9f7c: 0xe0003ba1, 0x9f7d: 0xe0003b9e, 0x9f7e: 0xe0003b9b, 0x9f7f: 0xe0000d04, + // Block 0x27e, offset 0x9f80 + 0x9f80: 0xe0000cfe, 0x9f81: 0xe0000cf8, 0x9f82: 0xe0000cf5, 0x9f83: 0xe0003bd6, + 0x9f84: 0xe0003bd3, 0x9f85: 0xe0003bf4, 0x9f86: 0xe0003bf1, 0x9f87: 0xe0003be2, + 0x9f88: 0xe0003bdf, 0x9f89: 0xe00035eb, 0x9f8a: 0x002eda88, 0x9f8b: 0x402eda20, + 0x9f8c: 0xe0003a1f, 0x9f8d: 0xe0003a1c, 0x9f8e: 0xe000399f, 0x9f8f: 0xe000399c, + 0x9f90: 0xe00039df, 0x9f91: 0xe00039dc, 0x9f92: 0xe0000e93, 0x9f93: 0xe0000e8f, + 0x9f94: 0xe0000eca, 0x9f95: 0xe0000ec7, 0x9f96: 0xe0000edc, 0x9f97: 0xe0000ed9, + 0x9f98: 0xe0000ed0, 0x9f99: 0xe0000ecd, 0x9f9a: 0xe0000f1f, 0x9f9b: 0xe0000f1c, + 0x9f9c: 0xe0000f2d, 0x9f9d: 0xe0000f2a, 0x9f9e: 0xe0000f47, 0x9f9f: 0xe0000f44, + 0x9fa0: 0xe0000f33, 0x9fa1: 0xe0000f30, 0x9fa2: 0xe0000f99, 0x9fa3: 0xe0000f96, + 0x9fa4: 0xe0000f8a, 0x9fa5: 0xe0000f87, 0x9fa6: 0x00303688, 0x9fa7: 0x40303620, + 0x9fa8: 0xe0003ad3, 0x9fa9: 0xe0003ad0, 0x9faa: 0xe0003ae7, 0x9fab: 0xe0003ae4, + 0x9fac: 0xe0003a8f, 0x9fad: 0xe0003a8c, 0x9fae: 0xe0003aa1, 0x9faf: 0xe0003a9e, + 0x9fb0: 0xe0003acd, 0x9fb1: 0xe0003aca, 0x9fb2: 0xe0003ae1, 0x9fb3: 0xe0003ade, + 0x9fb4: 0xe0003c24, 0x9fb5: 0xe0003c21, 0x9fb6: 0xe000110e, 0x9fb7: 0xe000110b, + 0x9fb8: 0xe0001117, 0x9fb9: 0xe000113b, 0x9fba: 0xe0001138, 0x9fbb: 0xe000114d, + 0x9fbc: 0xe000114a, 0x9fbd: 0xe0001147, 0x9fbe: 0xe0001144, 0x9fbf: 0xe0000f64, + // Block 0x27f, offset 0x9fc0 + 0x9fc0: 0x402c1a20, 0x9fc1: 0x002c2a88, 0x9fc2: 0x002c3288, 0x9fc3: 0x402c3220, + 0x9fc4: 0x0031c488, 0x9fc5: 0x4031c420, 0x9fc6: 0x002efa88, 0x9fc7: 0x002c4e88, + 0x9fc8: 0x402c4e20, 0x9fc9: 0x002c7288, 0x9fca: 0x002c7a88, 0x9fcb: 0x002c8488, + 0x9fcc: 0x402c8420, 0x9fcd: 0xe000115c, 0x9fce: 0x002cae88, 0x9fcf: 0x002cb888, + 0x9fd0: 0x002cc288, 0x9fd1: 0x002d1688, 0x9fd2: 0x402d1620, 0x9fd3: 0x002d4488, + 0x9fd4: 0x002d5888, 0x9fd5: 0x402d7820, 0x9fd6: 0x002dc288, 0x9fd7: 0x002db688, + 0x9fd8: 0x002e0a88, 0x9fd9: 0x402e0a20, 0x9fda: 0x402e3820, 0x9fdb: 0x402e7220, + 0x9fdc: 0x0030a088, 0x9fdd: 0x002eb488, 0x9fde: 0x402ebc20, 0x9fdf: 0x002f1088, + 0x9fe0: 0xe0003a47, 0x9fe1: 0xe0003a44, 0x9fe2: 0x002d6088, 0x9fe3: 0x402d6020, + 0x9fe4: 0x002f3e88, 0x9fe5: 0x402f3e20, 0x9fe6: 0x002f8288, 0x9fe7: 0x0031b488, + 0x9fe8: 0x4031b420, 0x9fe9: 0x00300888, 0x9fea: 0x40301220, 0x9feb: 0x40304220, + 0x9fec: 0x00304a88, 0x9fed: 0x40304a20, 0x9fee: 0x00305288, 0x9fef: 0xe0003b07, + 0x9ff0: 0xe0003b04, 0x9ff1: 0x0030b488, 0x9ff2: 0x0030cc88, 0x9ff3: 0x00311888, + 0x9ff4: 0x40311820, 0x9ff5: 0x00313488, 0x9ff6: 0x40313420, 0x9ff7: 0x00316488, + 0x9ff8: 0x00316e88, 0x9ff9: 0x40316e20, 0x9ffa: 0x40317820, 0x9ffb: 0x4031a620, + 0x9ffc: 0x0031bc88, 0x9ffd: 0x4031bc20, 0x9ffe: 0xe0000fc9, 0x9fff: 0x40319420, + // Block 0x280, offset 0xa000 + 0xa000: 0x40321220, 0xa001: 0x40321a20, 0xa002: 0x40322220, 0xa003: 0x40322a20, + 0xa004: 0xe0000ad5, 0xa005: 0xe0000ad1, 0xa006: 0xe0000acd, 0xa007: 0xe000357f, + 0xa008: 0xe000357c, 0xa009: 0xe0003579, 0xa00a: 0xe00035c4, 0xa00b: 0xe00035c1, + 0xa00c: 0xe00035be, 0xa00d: 0xe0003853, 0xa00e: 0xe0000944, 0xa00f: 0xe000394c, + 0xa010: 0xe0003949, 0xa011: 0xe00039cb, 0xa012: 0xe00039c8, 0xa013: 0xe0003a9b, + 0xa014: 0xe0003a98, 0xa015: 0xe0003ac6, 0xa016: 0xe0003ac2, 0xa017: 0xe0003aae, + 0xa018: 0xe0003aaa, 0xa019: 0xe0003abe, 0xa01a: 0xe0003aba, 0xa01b: 0xe0003ab6, + 0xa01c: 0xe0003ab2, 0xa01d: 0x402cae20, 0xa01e: 0xe0003860, 0xa01f: 0xe000095e, + 0xa020: 0xe000386a, 0xa021: 0xe0000972, 0xa022: 0xe00009f4, 0xa023: 0xe00009ef, + 0xa024: 0x002d3a88, 0xa025: 0x402d3a20, 0xa026: 0xe0000bbe, 0xa027: 0xe0000bbb, + 0xa028: 0xe0003b80, 0xa029: 0xe0003b7d, 0xa02a: 0xe0003a11, 0xa02b: 0xe0003a0e, + 0xa02c: 0xe0003a18, 0xa02d: 0xe0003a14, 0xa02e: 0xe0001162, 0xa02f: 0xe000115f, + 0xa030: 0xe0000c8d, 0xa031: 0xf0000a0a, 0xa032: 0xf000040a, 0xa033: 0xf0000404, + 0xa034: 0xe0000bac, 0xa035: 0xe0000ba9, 0xa036: 0x002d7888, 0xa037: 0x00319488, + 0xa038: 0xe0003bdc, 0xa039: 0xe0003bd9, 0xa03a: 0xe0003859, 0xa03b: 0xe0000950, + 0xa03c: 0xe00009ea, 0xa03d: 0xe00009e5, 0xa03e: 0xe0000e19, 0xa03f: 0xe0000e15, + // Block 0x281, offset 0xa040 + 0xa040: 0xe0003877, 0xa041: 0xe000098c, 0xa042: 0xe000387a, 0xa043: 0xe0000992, + 0xa044: 0xe000390e, 0xa045: 0xe000390b, 0xa046: 0xe0003914, 0xa047: 0xe0003911, + 0xa048: 0xe000397b, 0xa049: 0xe0003978, 0xa04a: 0xe0003981, 0xa04b: 0xe000397e, + 0xa04c: 0xe0003a3b, 0xa04d: 0xe0003a38, 0xa04e: 0xe0003a41, 0xa04f: 0xe0003a3e, + 0xa050: 0xe0000ee8, 0xa051: 0xe0000ee5, 0xa052: 0xe0000eee, 0xa053: 0xe0000eeb, + 0xa054: 0xe0003afb, 0xa055: 0xe0003af8, 0xa056: 0xe0003b01, 0xa057: 0xe0003afe, + 0xa058: 0xe0000f61, 0xa059: 0xe0000f5e, 0xa05a: 0xe0000fa5, 0xa05b: 0xe0000fa2, + 0xa05c: 0x00312288, 0xa05d: 0x40312220, 0xa05e: 0xe0003b53, 0xa05f: 0xe0003b50, + 0xa060: 0x002ebc88, 0xa061: 0x402c8c20, 0xa062: 0x002f2288, 0xa063: 0x402f2220, + 0xa064: 0x00314088, 0xa065: 0x40314020, 0xa066: 0xe0003867, 0xa067: 0xe000096c, + 0xa068: 0xe00038de, 0xa069: 0xe00038db, 0xa06a: 0xe00039d8, 0xa06b: 0xe00039d4, + 0xa06c: 0xe00039fc, 0xa06d: 0xe00039f8, 0xa06e: 0xe0003a03, 0xa06f: 0xe0003a00, + 0xa070: 0xe0003a0a, 0xa071: 0xe0003a06, 0xa072: 0xe0001129, 0xa073: 0xe0001126, + 0xa074: 0x402e5e20, 0xa075: 0x402ed020, 0xa076: 0x40305a20, 0xa077: 0x402dd420, + 0xa078: 0xe0000abf, 0xa079: 0xe0000ec4, 0xa07a: 0x002be888, 0xa07b: 0x002c4488, + 0xa07c: 0x402c4420, 0xa07d: 0x002e3888, 0xa07e: 0x00303e88, 0xa07f: 0x402ffc20, + // Block 0x282, offset 0xa080 + 0xa080: 0x402f8220, 0xa081: 0x402fd820, 0xa082: 0x402ff420, 0xa083: 0x40300820, + 0xa084: 0x402df620, 0xa085: 0x40301a20, 0xa086: 0x40302420, 0xa087: 0x40306420, + 0xa088: 0x40305220, 0xa089: 0x40307c20, 0xa08a: 0x4030b420, 0xa08b: 0x4030cc20, + 0xa08c: 0x4030da20, 0xa08d: 0x4030ee20, 0xa08e: 0x402e7a20, 0xa08f: 0x40310820, + 0xa090: 0x40314820, 0xa091: 0x40315020, 0xa092: 0x40316420, 0xa093: 0x40318020, + 0xa094: 0x4031cc20, 0xa095: 0x4031e820, 0xa096: 0x40320a20, 0xa097: 0x40323220, + 0xa098: 0x40323a20, 0xa099: 0x402c1220, 0xa09a: 0x402cf820, 0xa09b: 0x402d4c20, + 0xa09c: 0x402d7020, 0xa09d: 0x402de620, 0xa09e: 0x402e1a20, 0xa09f: 0x402e2a20, + 0xa0a0: 0x402f6220, 0xa0a1: 0x4031fa20, 0xa0a2: 0x40320220, 0xa0a3: 0xe0000aca, + 0xa0a4: 0xe0000adc, 0xa0a5: 0xe0000ad9, 0xa0a6: 0xe0000fcc, 0xa0a7: 0xe0000fcf, + 0xa0a8: 0xe0000fba, 0xa0a9: 0xe0000ba1, 0xa0aa: 0xe0000d11, 0xa0ab: 0xe0000d18, + 0xa0ac: 0x40324220, 0xa0ad: 0x40324a20, 0xa0ae: 0x40309020, 0xa0af: 0x40309820, + 0xa0b0: 0x002d6894, 0xa0b1: 0x002d8094, 0xa0b2: 0x002dcc94, 0xa0b3: 0x002f7a94, + 0xa0b4: 0x002f9894, 0xa0b5: 0x002fac94, 0xa0b6: 0x002fd894, 0xa0b7: 0x0030e294, + 0xa0b8: 0x00310094, 0xa0b9: 0x40064020, 0xa0ba: 0x40064420, 0xa0bb: 0x402bf620, + 0xa0bc: 0x4031de20, 0xa0bd: 0x402d9820, 0xa0be: 0x4031e220, 0xa0bf: 0x4031f020, + // Block 0x283, offset 0xa0c0 + 0xa0c0: 0xe0003888, 0xa0c1: 0xe00009ae, 0xa0c2: 0xe0000a22, 0xa0c3: 0xe0000a1f, + 0xa0c4: 0xe0000a28, 0xa0c5: 0xe0000a25, 0xa0c6: 0xe0000a2e, 0xa0c7: 0xe0000a2b, + 0xa0c8: 0xe0000a5a, 0xa0c9: 0xe0000a56, 0xa0ca: 0xe0000a8c, 0xa0cb: 0xe0000a89, + 0xa0cc: 0xe0000a98, 0xa0cd: 0xe0000a95, 0xa0ce: 0xe0000aa4, 0xa0cf: 0xe0000aa1, + 0xa0d0: 0xe0000a92, 0xa0d1: 0xe0000a8f, 0xa0d2: 0xe0000a9e, 0xa0d3: 0xe0000a9b, + 0xa0d4: 0xe0003901, 0xa0d5: 0xe00038fd, 0xa0d6: 0xe00038f9, 0xa0d7: 0xe00038f5, + 0xa0d8: 0xe0003928, 0xa0d9: 0xe0003925, 0xa0da: 0xe000392e, 0xa0db: 0xe000392b, + 0xa0dc: 0xe00038e5, 0xa0dd: 0xe00038e1, 0xa0de: 0xe0000b8c, 0xa0df: 0xe0000b89, + 0xa0e0: 0xe0000bd0, 0xa0e1: 0xe0000bcd, 0xa0e2: 0xe0003b5f, 0xa0e3: 0xe0003b5c, + 0xa0e4: 0xe0003b6b, 0xa0e5: 0xe0003b68, 0xa0e6: 0xe0003b59, 0xa0e7: 0xe0003b56, + 0xa0e8: 0xe0003b65, 0xa0e9: 0xe0003b62, 0xa0ea: 0xe0003b71, 0xa0eb: 0xe0003b6e, + 0xa0ec: 0xe000398d, 0xa0ed: 0xe000398a, 0xa0ee: 0xe0003959, 0xa0ef: 0xe0003955, + 0xa0f0: 0xe0003b7a, 0xa0f1: 0xe0003b77, 0xa0f2: 0xe0003b8c, 0xa0f3: 0xe0003b89, + 0xa0f4: 0xe0003b92, 0xa0f5: 0xe0003b8f, 0xa0f6: 0xe0003baa, 0xa0f7: 0xe0003ba7, + 0xa0f8: 0xe0003bb1, 0xa0f9: 0xe0003bad, 0xa0fa: 0xe0003bbe, 0xa0fb: 0xe0003bbb, + 0xa0fc: 0xe0003bb8, 0xa0fd: 0xe0003bb5, 0xa0fe: 0xe0003bc4, 0xa0ff: 0xe0003bc1, + // Block 0x284, offset 0xa100 + 0xa100: 0xe0003bca, 0xa101: 0xe0003bc7, 0xa102: 0xe0003bd0, 0xa103: 0xe0003bcd, + 0xa104: 0xe0003bee, 0xa105: 0xe0003beb, 0xa106: 0xe0003bfa, 0xa107: 0xe0003bf7, + 0xa108: 0xe0003c06, 0xa109: 0xe0003c03, 0xa10a: 0xe0003c00, 0xa10b: 0xe0003bfd, + 0xa10c: 0xe00039ec, 0xa10d: 0xe00039e8, 0xa10e: 0xe00039f4, 0xa10f: 0xe00039f0, + 0xa110: 0xe0003a2e, 0xa111: 0xe0003a2a, 0xa112: 0xe0003a26, 0xa113: 0xe0003a22, + 0xa114: 0xe0003c0c, 0xa115: 0xe0003c09, 0xa116: 0xe0003c12, 0xa117: 0xe0003c0f, + 0xa118: 0xe0000ed6, 0xa119: 0xe0000ed3, 0xa11a: 0xe0000ef4, 0xa11b: 0xe0000ef1, + 0xa11c: 0xe0000efb, 0xa11d: 0xe0000ef7, 0xa11e: 0xe0000f02, 0xa11f: 0xe0000eff, + 0xa120: 0xe0000f41, 0xa121: 0xe0000f3e, 0xa122: 0xe0000f53, 0xa123: 0xe0000f50, + 0xa124: 0xe0000f26, 0xa125: 0xe0000f22, 0xa126: 0xe0000f3a, 0xa127: 0xe0000f36, + 0xa128: 0xe0000f5a, 0xa129: 0xe0000f56, 0xa12a: 0xe0000f93, 0xa12b: 0xe0000f90, + 0xa12c: 0xe0000f9f, 0xa12d: 0xe0000f9c, 0xa12e: 0xe0000fb1, 0xa12f: 0xe0000fae, + 0xa130: 0xe0000fab, 0xa131: 0xe0000fa8, 0xa132: 0xe0003b3b, 0xa133: 0xe0003b38, + 0xa134: 0xe0003b47, 0xa135: 0xe0003b44, 0xa136: 0xe0003b41, 0xa137: 0xe0003b3e, + 0xa138: 0xe0003ada, 0xa139: 0xe0003ad6, 0xa13a: 0xe0003aee, 0xa13b: 0xe0003aea, + 0xa13c: 0xe00010a9, 0xa13d: 0xe00010a6, 0xa13e: 0xe00010af, 0xa13f: 0xe00010ac, + // Block 0x285, offset 0xa140 + 0xa140: 0xe0003c1e, 0xa141: 0xe0003c1b, 0xa142: 0xe0003c18, 0xa143: 0xe0003c15, + 0xa144: 0xe0003c2d, 0xa145: 0xe0003c2a, 0xa146: 0xe0003c33, 0xa147: 0xe0003c30, + 0xa148: 0xe0003c39, 0xa149: 0xe0003c36, 0xa14a: 0xe00010fc, 0xa14b: 0xe00010f9, + 0xa14c: 0xe00010f6, 0xa14d: 0xe00010f3, 0xa14e: 0xe0001123, 0xa14f: 0xe0001120, + 0xa150: 0xe0001141, 0xa151: 0xe000113e, 0xa152: 0xe0001153, 0xa153: 0xe0001150, + 0xa154: 0xe0001159, 0xa155: 0xe0001156, 0xa156: 0xe0003b74, 0xa157: 0xe0000f8d, + 0xa158: 0xe0003c27, 0xa159: 0xe0001111, 0xa15a: 0xf0000404, 0xa15b: 0xe0000f70, + 0xa15c: 0x40300420, 0xa15d: 0x40300620, 0xa15e: 0xe0000f7f, 0xa15f: 0x402c9620, + 0xa160: 0xe000387d, 0xa161: 0xe0000998, 0xa162: 0xe0003874, 0xa163: 0xe0000986, + 0xa164: 0xe0003843, 0xa165: 0xe0000924, 0xa166: 0xe0003847, 0xa167: 0xe000092c, + 0xa168: 0xe000384f, 0xa169: 0xe000093c, 0xa16a: 0xe000384b, 0xa16b: 0xe0000934, + 0xa16c: 0xe0003884, 0xa16d: 0xe00009a6, 0xa16e: 0xe0003830, 0xa16f: 0xe00008fe, + 0xa170: 0xe0003834, 0xa171: 0xe0000906, 0xa172: 0xe000383c, 0xa173: 0xe0000916, + 0xa174: 0xe0003838, 0xa175: 0xe000090e, 0xa176: 0xe0003880, 0xa177: 0xe000099e, + 0xa178: 0xe000391a, 0xa179: 0xe0003917, 0xa17a: 0xe0003908, 0xa17b: 0xe0003905, + 0xa17c: 0xe00038d2, 0xa17d: 0xe00038cf, 0xa17e: 0xe00038a7, 0xa17f: 0xe00038a3, + // Block 0x286, offset 0xa180 + 0xa180: 0xe00038af, 0xa181: 0xe00038ab, 0xa182: 0xe00038bf, 0xa183: 0xe00038bb, + 0xa184: 0xe00038b7, 0xa185: 0xe00038b3, 0xa186: 0xe0003921, 0xa187: 0xe000391d, + 0xa188: 0xe0003975, 0xa189: 0xe0003972, 0xa18a: 0xe0003987, 0xa18b: 0xe0003984, + 0xa18c: 0xe0003a75, 0xa18d: 0xe0003a72, 0xa18e: 0xe0003a35, 0xa18f: 0xe0003a32, + 0xa190: 0xe00039ac, 0xa191: 0xe00039a8, 0xa192: 0xe00039b4, 0xa193: 0xe00039b0, + 0xa194: 0xe00039c4, 0xa195: 0xe00039c0, 0xa196: 0xe00039bc, 0xa197: 0xe00039b8, + 0xa198: 0xe0003a7c, 0xa199: 0xe0003a78, 0xa19a: 0xe0003a4e, 0xa19b: 0xe0003a4a, + 0xa19c: 0xe0003a56, 0xa19d: 0xe0003a52, 0xa19e: 0xe0003a66, 0xa19f: 0xe0003a62, + 0xa1a0: 0xe0003a5e, 0xa1a1: 0xe0003a5a, 0xa1a2: 0xe0003a6e, 0xa1a3: 0xe0003a6a, + 0xa1a4: 0xe0003b35, 0xa1a5: 0xe0003b32, 0xa1a6: 0xe0003af5, 0xa1a7: 0xe0003af2, + 0xa1a8: 0xe0003b0e, 0xa1a9: 0xe0003b0a, 0xa1aa: 0xe0003b16, 0xa1ab: 0xe0003b12, + 0xa1ac: 0xe0003b26, 0xa1ad: 0xe0003b22, 0xa1ae: 0xe0003b1e, 0xa1af: 0xe0003b1a, + 0xa1b0: 0xe0003b2e, 0xa1b1: 0xe0003b2a, 0xa1b2: 0xe0001108, 0xa1b3: 0xe0001105, + 0xa1b4: 0xe0001135, 0xa1b5: 0xe0001132, 0xa1b6: 0xe000112f, 0xa1b7: 0xe000112c, + 0xa1b8: 0xe000111d, 0xa1b9: 0xe000111a, 0xa1ba: 0xe0000d0a, 0xa1bb: 0xe0000d07, + 0xa1bc: 0x0030d888, 0xa1bd: 0x4030d820, 0xa1be: 0x00312088, 0xa1bf: 0x40312020, + // Block 0x287, offset 0xa1c0 + 0xa1c0: 0xe00009bc, 0xa1c1: 0xe00009c0, 0xa1c2: 0x002c3a8b, 0xa1c3: 0xf0000a04, + 0xa1c4: 0x40081c20, 0xa1c5: 0xe0000a5e, 0xa1c6: 0xe0000a62, 0xa1c7: 0x002cc28a, + 0xa1c8: 0x40081e20, 0xa1c9: 0xf0000a04, 0xa1ca: 0x002d2285, 0xa1cb: 0x002d688b, + 0xa1cc: 0x002d688b, 0xa1cd: 0x002d688b, 0xa1ce: 0x002d6885, 0xa1cf: 0xf0000202, + 0xa1d0: 0x002d9a8b, 0xa1d1: 0x002d9a8b, 0xa1d2: 0x002e228b, 0xa1d3: 0x002e2285, + 0xa1d4: 0x40082020, 0xa1d5: 0x002e9e8b, 0xa1d6: 0xe000281e, 0xa1d7: 0x40082220, + 0xa1d8: 0x40082420, 0xa1d9: 0x002f2c8b, 0xa1da: 0x002f568b, 0xa1db: 0x002f7a8b, + 0xa1dc: 0x002f7a8b, 0xa1dd: 0x002f7a8b, 0xa1de: 0x40082620, 0xa1df: 0x40082820, + 0xa1e0: 0xe0002833, 0xa1e1: 0xe0000fbd, 0xa1e2: 0xe0002842, 0xa1e3: 0x40082a20, + 0xa1e4: 0x00312a8b, 0xa1e5: 0x40082c20, 0xa1e6: 0x0032a288, 0xa1e7: 0x40082e20, + 0xa1e8: 0x00312a8b, 0xa1e9: 0x40083020, 0xa1ea: 0x002bea83, 0xa1eb: 0xe0003856, + 0xa1ec: 0x002c0a8b, 0xa1ed: 0x002c3a8b, 0xa1ee: 0x40083220, 0xa1ef: 0x002c9885, + 0xa1f0: 0x002c988b, 0xa1f1: 0x002d088b, 0xa1f2: 0x002d1e88, 0xa1f3: 0x002e828b, + 0xa1f4: 0x002ee285, 0xa1f5: 0x00389084, 0xa1f6: 0x00389284, 0xa1f7: 0x00389484, + 0xa1f8: 0x00389684, 0xa1f9: 0x002d9a85, 0xa1fa: 0x40083420, 0xa1fb: 0xe0000b95, + 0xa1fc: 0x00327e85, 0xa1fd: 0x00325685, 0xa1fe: 0x0032568b, 0xa1ff: 0x00327e8b, + // Block 0x288, offset 0xa200 + 0xa200: 0xe0000024, 0xa201: 0xe0000029, 0xa202: 0xe000002e, 0xa203: 0xe0000033, + 0xa204: 0xe0000038, 0xa205: 0xe000003d, 0xa206: 0xe0000042, 0xa207: 0xe0000047, + 0xa208: 0xf0001f04, 0xa209: 0xf0001f04, 0xa20a: 0xf0001f04, 0xa20b: 0xf0001f04, + 0xa20c: 0xf0001f04, 0xa20d: 0xf0001f04, 0xa20e: 0xf0001f04, 0xa20f: 0xf0001f04, + 0xa210: 0xf0001f04, 0xa211: 0xf0000404, 0xa212: 0xf0000404, 0xa213: 0xf0000404, + 0xa214: 0xf0000404, 0xa215: 0xf0000404, 0xa216: 0xf0000404, 0xa217: 0xf0000404, + 0xa218: 0xf0000404, 0xa219: 0xf0000404, 0xa21a: 0xf0000404, 0xa21b: 0xf0000404, + 0xa21c: 0xf0000404, 0xa21d: 0xf0000404, 0xa21e: 0xf0000404, 0xa21f: 0xf0000404, + 0xa220: 0xe000249f, 0xa221: 0xf0000404, 0xa222: 0xf0000404, 0xa223: 0xe00024a7, + 0xa224: 0xe00024af, 0xa225: 0xf0000404, 0xa226: 0xe00024b7, 0xa227: 0xe0002c16, + 0xa228: 0xe0002c1e, 0xa229: 0xe0002c26, 0xa22a: 0xe00024bf, 0xa22b: 0xe0002c2e, + 0xa22c: 0xf0000404, 0xa22d: 0xf0000404, 0xa22e: 0xf0000404, 0xa22f: 0xf0000404, + 0xa230: 0xe0002c36, 0xa231: 0xf0000404, 0xa232: 0xe0002c46, 0xa233: 0xf0000404, + 0xa234: 0xf0000404, 0xa235: 0xf0000404, 0xa236: 0x002bde8c, 0xa237: 0x002c0a8c, + 0xa238: 0x002c3a8c, 0xa239: 0x002c628c, 0xa23a: 0x002c988c, 0xa23b: 0x002d088c, + 0xa23c: 0x002d228c, 0xa23d: 0x002d688c, 0xa23e: 0x002d9a8c, 0xa23f: 0x002dcc8c, + // Block 0x289, offset 0xa240 + 0xa240: 0xe000230b, 0xa241: 0xe00022f8, 0xa242: 0xe00022fc, 0xa243: 0xe0002311, + 0xa244: 0xe0002316, 0xa245: 0xe000231d, 0xa246: 0xe0002321, 0xa247: 0xe0002325, + 0xa248: 0xe000232b, 0xa249: 0xf0001c1c, 0xa24a: 0xe0002330, 0xa24b: 0xe000233c, + 0xa24c: 0xe0002340, 0xa24d: 0xe0002337, 0xa24e: 0xe0002346, 0xa24f: 0xe000234b, + 0xa250: 0xe000234f, 0xa251: 0xe0002353, 0xa252: 0xf0001c1c, 0xa253: 0xe000235e, + 0xa254: 0xe0002358, 0xa255: 0xf0001c1c, 0xa256: 0xe0002363, 0xa257: 0xe000236d, + 0xa258: 0xf0001f04, 0xa259: 0xf0001f04, 0xa25a: 0xf0001f04, 0xa25b: 0xf0001f04, + 0xa25c: 0xf0001f04, 0xa25d: 0xf0001f04, 0xa25e: 0xf0001f04, 0xa25f: 0xf0001f04, + 0xa260: 0xf0001f04, 0xa261: 0xf0001f04, 0xa262: 0xf0000404, 0xa263: 0xf0000404, + 0xa264: 0xf0000404, 0xa265: 0xf0000404, 0xa266: 0xf0000404, 0xa267: 0xf0000404, + 0xa268: 0xf0000404, 0xa269: 0xf0000404, 0xa26a: 0xf0000404, 0xa26b: 0xf0000404, + 0xa26c: 0xf0000404, 0xa26d: 0xf0000404, 0xa26e: 0xf0000404, 0xa26f: 0xf0000404, + 0xa270: 0xf0000404, 0xa271: 0xe0000c1e, 0xa272: 0xf0001c1c, 0xa273: 0xe0002f0d, + 0xa274: 0xe0000a31, 0xa275: 0xe0002824, 0xa276: 0xe00035d6, 0xa277: 0xe00032a7, + 0xa278: 0xe0000ac2, 0xa279: 0xe0000ac6, 0xa27a: 0xe00027e8, 0xa27b: 0xf0001c1c, + 0xa27c: 0xf0001c1c, 0xa27d: 0xf0001c1c, 0xa27e: 0xf0001c1c, 0xa27f: 0xe0002431, + // Block 0x28a, offset 0xa280 + 0xa280: 0xe00035d0, 0xa281: 0xe00035b8, 0xa282: 0xf0001d1c, 0xa283: 0xe000358e, + 0xa284: 0xe00027f7, 0xa285: 0xe00027fa, 0xa286: 0xe0003594, 0xa287: 0xf0001d1d, + 0xa288: 0xe0000a6b, 0xa289: 0xe0000cb4, 0xa28a: 0xe00035d9, 0xa28b: 0xe00035bb, + 0xa28c: 0xf0001d1c, 0xa28d: 0xf0001c1c, 0xa28e: 0xe000359d, 0xa28f: 0xe00027fd, + 0xa290: 0xe00027ce, 0xa291: 0xe0000cb9, 0xa292: 0xe0000d36, 0xa293: 0xe0000be3, + 0xa294: 0xe0000fc5, 0xa295: 0xe00035f7, 0xa296: 0xe00035a0, 0xa297: 0xe00032a4, + 0xa298: 0xe0002803, 0xa299: 0xe0003570, 0xa29a: 0xe00035c7, 0xa29b: 0xe00035fa, + 0xa29c: 0xe00035a3, 0xa29d: 0xe0003099, 0xa29e: 0xe0002806, 0xa29f: 0xe0000d3e, + 0xa2a0: 0xe0000a72, 0xa2a1: 0xe0003588, 0xa2a2: 0xe0000cbd, 0xa2a3: 0xe0000d42, + 0xa2a4: 0xe0000a76, 0xa2a5: 0xe000358b, 0xa2a6: 0xe0000cc1, 0xa2a7: 0xe0000d2d, + 0xa2a8: 0xe0000d31, 0xa2a9: 0xe00035d3, 0xa2aa: 0xe0000cc5, 0xa2ab: 0xe0000d4a, + 0xa2ac: 0xe0000be7, 0xa2ad: 0xe0000f0b, 0xa2ae: 0xe0000f0f, 0xa2af: 0xe0000f15, + 0xa2b0: 0xe000282d, 0xa2b1: 0xe0002821, 0xa2b2: 0xf0001c1c, 0xa2b3: 0xe000281b, + 0xa2b4: 0xe00035dc, 0xa2b5: 0xe00035ca, 0xa2b6: 0xf0001d1c, 0xa2b7: 0xe00035a6, + 0xa2b8: 0xe000280f, 0xa2b9: 0xe00035a9, 0xa2ba: 0xe00035df, 0xa2bb: 0xe00035cd, + 0xa2bc: 0xe0003600, 0xa2bd: 0xe00035af, 0xa2be: 0xe0002812, 0xa2bf: 0xe00035b2, + // Block 0x28b, offset 0xa2c0 + 0xa2c0: 0xe0002815, 0xa2c1: 0xe00035b5, 0xa2c2: 0xe00009b7, 0xa2c3: 0xf0001c1d, + 0xa2c4: 0xf0001c1c, 0xa2c5: 0xf0001c1c, 0xa2c6: 0xe0000a66, 0xa2c7: 0xe0000a7a, + 0xa2c8: 0xf0001d1c, 0xa2c9: 0xf0001c1d, 0xa2ca: 0xe00027c2, 0xa2cb: 0xe00027c8, + 0xa2cc: 0xe00027e5, 0xa2cd: 0xe0002800, 0xa2ce: 0xe0002809, 0xa2cf: 0xe000280c, + 0xa2d0: 0xe0003582, 0xa2d1: 0xe0003585, 0xa2d2: 0xe0000d0d, 0xa2d3: 0xe0002818, + 0xa2d4: 0xe0003591, 0xa2d5: 0xe0000d3a, 0xa2d6: 0xe0000d46, 0xa2d7: 0xe0002827, + 0xa2d8: 0xe0000eb0, 0xa2d9: 0xe0000eb8, 0xa2da: 0xe000282a, 0xa2db: 0xf0001c1c, + 0xa2dc: 0xf0001c1d, 0xa2dd: 0xe00035e2, 0xa2de: 0xe00010b2, 0xa2df: 0xe00009c8, + 0xa2e0: 0xf0001f04, 0xa2e1: 0xf0001f04, 0xa2e2: 0xf0001f04, 0xa2e3: 0xf0001f04, + 0xa2e4: 0xf0001f04, 0xa2e5: 0xf0001f04, 0xa2e6: 0xf0001f04, 0xa2e7: 0xf0001f04, + 0xa2e8: 0xf0001f04, 0xa2e9: 0xf0000404, 0xa2ea: 0xf0000404, 0xa2eb: 0xf0000404, + 0xa2ec: 0xf0000404, 0xa2ed: 0xf0000404, 0xa2ee: 0xf0000404, 0xa2ef: 0xf0000404, + 0xa2f0: 0xf0000404, 0xa2f1: 0xf0000404, 0xa2f2: 0xf0000404, 0xa2f3: 0xf0000404, + 0xa2f4: 0xf0000404, 0xa2f5: 0xf0000404, 0xa2f6: 0xf0000404, 0xa2f7: 0xf0000404, + 0xa2f8: 0xf0000404, 0xa2f9: 0xf0000404, 0xa2fa: 0xf0000404, 0xa2fb: 0xf0000404, + 0xa2fc: 0xf0000404, 0xa2fd: 0xf0000404, 0xa2fe: 0xf0000404, 0xa2ff: 0xe0000bdf, + // Block 0x28c, offset 0xa300 + 0xa300: 0xf0000404, 0xa301: 0xe00026cf, 0xa302: 0xe000356d, 0xa303: 0xe0000b99, + 0xa304: 0xe0000b9d, 0xa305: 0xe0000f83, 0xa306: 0xf0000404, + 0xa313: 0xf0000404, + 0xa314: 0xf0000404, 0xa315: 0xf0000404, 0xa316: 0xf0000404, 0xa317: 0xf0000404, + 0xa31d: 0xe000150b, 0xa31e: 0xa1a09602, 0xa31f: 0xe0001514, + 0xa320: 0x0038ae85, 0xa321: 0x00389085, 0xa322: 0x00389685, 0xa323: 0x00389885, + 0xa324: 0x0038a485, 0xa325: 0x0038a685, 0xa326: 0x0038a885, 0xa327: 0x0038b685, + 0xa328: 0x0038ba85, 0xa329: 0x00093885, 0xa32a: 0xe0001542, 0xa32b: 0xe000153f, + 0xa32c: 0xe000154c, 0xa32d: 0xe0001548, 0xa32e: 0xe00014e1, 0xa32f: 0xe00014e4, + 0xa330: 0xe00014e7, 0xa331: 0xe00014ea, 0xa332: 0xe00014f0, 0xa333: 0xe00014f3, + 0xa334: 0xe00014f6, 0xa335: 0xe00014fc, 0xa336: 0xe0001505, + 0xa338: 0xe0001508, 0xa339: 0xe000150e, 0xa33a: 0xe000151b, 0xa33b: 0xe0001518, + 0xa33c: 0xe0001521, 0xa33e: 0xe0001524, + // Block 0x28d, offset 0xa340 + 0xa340: 0xf0001f04, 0xa341: 0xf0001f04, 0xa342: 0xf0001f04, 0xa343: 0xf0001f04, + 0xa344: 0xf0001f04, 0xa345: 0xf0001f04, 0xa346: 0xf0001f04, 0xa347: 0xf0001f04, + 0xa348: 0xf0001f04, 0xa349: 0xf0001f04, 0xa34a: 0xf0001f04, + 0xa350: 0xf0000a04, 0xa351: 0xf0000a04, 0xa352: 0xf0000a04, 0xa353: 0xf0000a04, + 0xa354: 0xe00024a3, 0xa355: 0xf0000a04, 0xa356: 0xf0000a04, 0xa357: 0xe00024ab, + 0xa358: 0xe00024b3, 0xa359: 0xf0000a04, 0xa35a: 0xe00024bb, 0xa35b: 0xe0002c1a, + 0xa35c: 0xe0002c22, 0xa35d: 0xe0002c2a, 0xa35e: 0xe00024c3, 0xa35f: 0xe0002c32, + 0xa360: 0xf0000a04, 0xa361: 0xf0000a04, 0xa362: 0xf0000a04, 0xa363: 0xf0000a04, + 0xa364: 0xe0002c3a, 0xa365: 0xf0000a04, 0xa366: 0xe0002c4a, 0xa367: 0xf0000a04, + 0xa368: 0xf0000a04, 0xa369: 0xf0000a04, 0xa36a: 0xf0000a04, 0xa36b: 0x002c3a8c, + 0xa36c: 0x002f7a8c, 0xa36d: 0xf0000c0c, 0xa36e: 0xe00035e8, + 0xa370: 0x002bde9d, 0xa371: 0x002c0a9d, 0xa372: 0x002c3a9d, 0xa373: 0x002c629d, + 0xa374: 0x002c989d, 0xa375: 0x002d089d, 0xa376: 0x002d229d, 0xa377: 0x002d689d, + 0xa378: 0x002d9a9d, 0xa379: 0x002dcc9d, 0xa37a: 0x002dfe9d, 0xa37b: 0x002e229d, + 0xa37c: 0x002e829d, 0xa37d: 0x002e9e9d, 0xa37e: 0x002ee29d, 0xa37f: 0x002f2c9d, + // Block 0x28e, offset 0xa380 + 0xa380: 0x002f569d, 0xa381: 0x002f7a9d, 0xa382: 0x002fe69d, 0xa383: 0x00302c9d, + 0xa384: 0x00306c9d, 0xa385: 0x0030be9d, 0xa386: 0x0030e29d, 0xa387: 0x0030f69d, + 0xa388: 0x0031009d, 0xa389: 0x00312a9d, 0xa38a: 0xe00027cb, 0xa38b: 0xe00035ac, + 0xa38c: 0xf0001d1d, 0xa38d: 0xf0001d1d, 0xa38e: 0xe0000ebc, 0xa38f: 0xe00035e5, + 0xa390: 0x002bde8c, 0xa391: 0x002c0a8c, 0xa392: 0x002c3a8c, 0xa393: 0x002c628c, + 0xa394: 0x002c988c, 0xa395: 0x002d088c, 0xa396: 0x002d228c, 0xa397: 0x002d688c, + 0xa398: 0x002d9a8c, 0xa399: 0x002dcc8c, 0xa39a: 0x002dfe8c, 0xa39b: 0x002e228c, + 0xa39c: 0x002e828c, 0xa39d: 0x002e9e8c, 0xa39e: 0x002ee28c, 0xa39f: 0x002f2c8c, + 0xa3a0: 0x002f568c, 0xa3a1: 0x002f7a8c, 0xa3a2: 0x002fe68c, 0xa3a3: 0x00302c8c, + 0xa3a4: 0x00306c8c, 0xa3a5: 0x0030be8c, 0xa3a6: 0x0030e28c, 0xa3a7: 0x0030f68c, + 0xa3a8: 0x0031008c, 0xa3a9: 0x00312a8c, 0xa3aa: 0xe0003597, 0xa3ab: 0xe000359a, + 0xa3b0: 0x002bde9d, 0xa3b1: 0x002c0a9d, 0xa3b2: 0x002c3a9d, 0xa3b3: 0x002c629d, + 0xa3b4: 0x002c989d, 0xa3b5: 0x002d089d, 0xa3b6: 0x002d229d, 0xa3b7: 0x002d689d, + 0xa3b8: 0x002d9a9d, 0xa3b9: 0x002dcc9d, 0xa3ba: 0x002dfe9d, 0xa3bb: 0x002e229d, + 0xa3bc: 0x002e829d, 0xa3bd: 0x002e9e9d, 0xa3be: 0x002ee29d, 0xa3bf: 0x002f2c9d, + // Block 0x28f, offset 0xa3c0 + 0xa3c0: 0x40055620, 0xa3c1: 0xa1809102, 0xa3c2: 0xa1909002, 0xa3c3: 0x40055820, + 0xa3c4: 0xae600000, 0xa3c5: 0xadc00000, 0xa3c6: 0x40055a20, 0xa3c7: 0xa1208d02, + 0xa3d0: 0x40389020, 0xa3d1: 0x40389220, 0xa3d2: 0x40389420, 0xa3d3: 0x40389620, + 0xa3d4: 0x40389820, 0xa3d5: 0x40389a20, 0xa3d6: 0x40389c20, 0xa3d7: 0x40389e20, + 0xa3d8: 0x4038a020, 0xa3d9: 0x4038a220, 0xa3da: 0x0038a499, 0xa3db: 0x4038a420, + 0xa3dc: 0x4038a620, 0xa3dd: 0x0038a899, 0xa3de: 0x4038a820, 0xa3df: 0x0038aa99, + 0xa3e0: 0x4038aa20, 0xa3e1: 0x4038ac20, 0xa3e2: 0x4038ae20, 0xa3e3: 0x0038b099, + 0xa3e4: 0x4038b020, 0xa3e5: 0x0038b299, 0xa3e6: 0x4038b220, 0xa3e7: 0x4038b420, + 0xa3e8: 0x4038b620, 0xa3e9: 0x4038b820, 0xa3ea: 0x4038ba20, + 0xa3f0: 0xe00014ff, 0xa3f1: 0xe0001502, 0xa3f2: 0xe0001511, 0xa3f3: 0x4003d21f, + 0xa3f4: 0x4003e01f, + // Block 0x290, offset 0xa400 + 0xa400: 0xa000f202, 0xa401: 0x403fba21, 0xa402: 0x403fba20, 0xa403: 0x403fbc20, + 0xa404: 0x403fbc20, 0xa405: 0x403fbe20, 0xa406: 0x403fc020, 0xa407: 0x403fcc20, + 0xa408: 0x403fce20, 0xa409: 0x403fd020, 0xa40a: 0x403fd220, 0xa40b: 0x403fd420, + 0xa40c: 0x403fd820, 0xa40d: 0x403fdc20, 0xa40e: 0x403fde20, 0xa40f: 0x403fe020, + 0xa410: 0x403fe220, 0xa411: 0x403fe420, 0xa412: 0x403fe620, 0xa413: 0x403fe820, + 0xa414: 0x403fea20, 0xa415: 0x403fec20, 0xa416: 0x403fee20, 0xa417: 0x403ff020, + 0xa418: 0x403ff420, 0xa419: 0x403ff620, 0xa41a: 0x403ff820, 0xa41b: 0x403ffa20, + 0xa41c: 0x403ffc20, 0xa41d: 0x40400220, 0xa41e: 0x40400420, 0xa41f: 0x40400620, + 0xa420: 0x40400820, 0xa421: 0x40400a20, 0xa422: 0x40400e20, 0xa423: 0x40401020, + 0xa424: 0x40401220, 0xa425: 0x40401420, 0xa426: 0x40401620, 0xa427: 0x40401820, + 0xa428: 0x40401a20, 0xa429: 0xe0001830, 0xa42a: 0x40401c20, 0xa42b: 0x40401e20, + 0xa42c: 0x40402020, 0xa42d: 0x40402420, 0xa42e: 0x40402620, 0xa42f: 0x40402820, + 0xa430: 0x40402c20, 0xa431: 0xe0001839, 0xa432: 0x40402e20, 0xa433: 0x40403020, + 0xa434: 0xe000183c, 0xa435: 0x40403220, 0xa436: 0x40403420, 0xa437: 0x40403620, + 0xa438: 0x40403820, 0xa439: 0x40403a20, 0xa43a: 0x40404c20, 0xa43b: 0x40404e20, + 0xa43c: 0xa070f102, 0xa43d: 0x40403c20, 0xa43e: 0x40404a20, 0xa43f: 0x40405620, + // Block 0x291, offset 0xa440 + 0xa440: 0xa0000000, 0xa441: 0xa0000000, 0xa442: 0xa0000000, 0xa443: 0xa0000000, + 0xa444: 0xa0000000, 0xa445: 0xa0000000, 0xa446: 0xa0000000, 0xa447: 0xa0000000, + 0xa448: 0xa0000000, 0xa449: 0x40020020, 0xa44a: 0x40020220, 0xa44b: 0x40020420, + 0xa44c: 0x40020620, 0xa44d: 0x40020820, 0xa44e: 0xa0000000, 0xa44f: 0xa0000000, + 0xa450: 0xa0000000, 0xa451: 0xa0000000, 0xa452: 0xa0000000, 0xa453: 0xa0000000, + 0xa454: 0xa0000000, 0xa455: 0xa0000000, 0xa456: 0xa0000000, 0xa457: 0xa0000000, + 0xa458: 0xa0000000, 0xa459: 0xa0000000, 0xa45a: 0xa0000000, 0xa45b: 0xa0000000, + 0xa45c: 0xa0000000, 0xa45d: 0xa0000000, 0xa45e: 0xa0000000, 0xa45f: 0xa0000000, + 0xa460: 0x40021220, 0xa461: 0x4002ba20, 0xa462: 0x4003e020, 0xa463: 0x4004ea20, + 0xa464: 0x4027de20, 0xa465: 0x4004ec20, 0xa466: 0x4004e620, 0xa467: 0x4003d220, + 0xa468: 0x4003f420, 0xa469: 0x4003f620, 0xa46a: 0x4004d820, 0xa46b: 0x40093820, + 0xa46c: 0x40024020, 0xa46d: 0x40021a20, 0xa46e: 0x4002e420, 0xa46f: 0x4004e220, + 0xa470: 0x4029cc20, 0xa471: 0x4029ce20, 0xa472: 0x4029d020, 0xa473: 0x4029d220, + 0xa474: 0x4029d420, 0xa475: 0x4029d620, 0xa476: 0x4029d820, 0xa477: 0x4029da20, + 0xa478: 0x4029dc20, 0xa479: 0x4029de20, 0xa47a: 0x40026c20, 0xa47b: 0x40026220, + 0xa47c: 0x40094020, 0xa47d: 0x40094220, 0xa47e: 0x40094420, 0xa47f: 0x4002c420, + // Block 0x292, offset 0xa480 + 0xa480: 0x4004d620, 0xa481: 0x002bde88, 0xa482: 0x002c0a88, 0xa483: 0xc59b2891, + 0xa484: 0xc5a12913, 0xa485: 0x002c9888, 0xa486: 0x002d0888, 0xa487: 0x002d2288, + 0xa488: 0x002d6888, 0xa489: 0x002d9a88, 0xa48a: 0x002dcc88, 0xa48b: 0x002dfe88, + 0xa48c: 0xc5a629e4, 0xa48d: 0x002e8288, 0xa48e: 0xc5ab2a52, 0xa48f: 0x002ee288, + 0xa490: 0x002f2c88, 0xa491: 0x002f5688, 0xa492: 0x002f7a88, 0xa493: 0xc3430991, + 0xa494: 0x00302c88, 0xa495: 0x00306c88, 0xa496: 0x0030be88, 0xa497: 0x0030e288, + 0xa498: 0x0030f688, 0xa499: 0x00310088, 0xa49a: 0xc3630991, 0xa49b: 0x4003f820, + 0xa49c: 0x4004e420, 0xa49d: 0x4003fa20, 0xa49e: 0x40062420, 0xa49f: 0x40021620, + 0xa4a0: 0x40061e20, 0xa4a1: 0x402bde20, 0xa4a2: 0x402c0a20, 0xa4a3: 0xc5982891, + 0xa4a4: 0xc59e28c2, 0xa4a5: 0x402c9820, 0xa4a6: 0x402d0820, 0xa4a7: 0x402d2220, + 0xa4a8: 0x402d6820, 0xa4a9: 0x402d9a20, 0xa4aa: 0x402dcc20, 0xa4ab: 0x402dfe20, + 0xa4ac: 0xc3772993, 0xa4ad: 0x402e8220, 0xa4ae: 0xc5332a41, 0xa4af: 0x402ee220, + 0xa4b0: 0x402f2c20, 0xa4b1: 0x402f5620, 0xa4b2: 0x402f7a20, 0xa4b3: 0xc3410991, + 0xa4b4: 0x40302c20, 0xa4b5: 0x40306c20, 0xa4b6: 0x4030be20, 0xa4b7: 0x4030e220, + 0xa4b8: 0x4030f620, 0xa4b9: 0x40310020, 0xa4ba: 0xc3610991, 0xa4bb: 0x4003fc20, + 0xa4bc: 0x40094820, 0xa4bd: 0x4003fe20, 0xa4be: 0x40094c20, 0xa4bf: 0xa0000000, + // Block 0x293, offset 0xa4c0 + 0xa4c0: 0xe0000983, 0xa4c1: 0xe0000980, 0xa4c2: 0xe00008fb, 0xa4c3: 0xe00008f8, + 0xa4c4: 0xe000097d, 0xa4c5: 0xe000097a, 0xa4c6: 0x002c3e83, 0xa4c7: 0x402c3e20, + 0xa4c8: 0xe0000a3e, 0xa4c9: 0xe0000a3b, 0xa4ca: 0xe0000a4a, 0xa4cb: 0xe0000a47, + 0xa4cc: 0x002c3c83, 0xa4cd: 0x402c3c20, 0xa4ce: 0xe0000a86, 0xa4cf: 0xe0000a83, + 0xa4d0: 0x002c6683, 0xa4d1: 0x402c6620, 0xa4d2: 0xe0000b46, 0xa4d3: 0xe0000b43, + 0xa4d4: 0xe0000aee, 0xa4d5: 0xe0000aeb, 0xa4d6: 0xe0000b2c, 0xa4d7: 0xe0000b29, + 0xa4d8: 0xe0000b40, 0xa4d9: 0xe0000b3d, 0xa4da: 0xe0000b1a, 0xa4db: 0xe0000b17, + 0xa4dc: 0xe0000bb8, 0xa4dd: 0xe0000bb5, 0xa4de: 0xe0000bb2, 0xa4df: 0xe0000baf, + 0xa4e0: 0xe0000bc4, 0xa4e1: 0xe0000bc1, 0xa4e2: 0xe0000bca, 0xa4e3: 0xe0000bc7, + 0xa4e4: 0xe0000bee, 0xa4e5: 0xe0000beb, 0xa4e6: 0xe0000c1b, 0xa4e7: 0xe0000c18, + 0xa4e8: 0xe0000c51, 0xa4e9: 0xe0000c4e, 0xa4ea: 0xe0000c60, 0xa4eb: 0xe0000c5d, + 0xa4ec: 0xe0000c31, 0xa4ed: 0xe0000c2e, 0xa4ee: 0xe0000c5a, 0xa4ef: 0xe0000c57, + 0xa4f0: 0xe0000c54, 0xa4f1: 0x402da220, 0xa4f2: 0xf0000a0a, 0xa4f3: 0xf0000404, + 0xa4f4: 0xe0000c8a, 0xa4f5: 0xe0000c87, 0xa4f6: 0xe0000c9f, 0xa4f7: 0xe0000c9c, + 0xa4f8: 0x402f7220, 0xa4f9: 0xe0000ccc, 0xa4fa: 0xe0000cc9, 0xa4fb: 0xe0000cd8, + 0xa4fc: 0xe0000cd5, 0xa4fd: 0xe0000cd2, 0xa4fe: 0xe0000ccf, 0xa4ff: 0xe0000d04, + // Block 0x294, offset 0xa500 + 0xa500: 0xe0000cfe, 0xa501: 0xe0000cf8, 0xa502: 0xe0000cf5, 0xa503: 0xe0000d51, + 0xa504: 0xe0000d4e, 0xa505: 0xe0000d6f, 0xa506: 0xe0000d6c, 0xa507: 0xe0000d5d, + 0xa508: 0xe0000d5a, 0xa509: 0xf0000404, 0xa50a: 0x002eda88, 0xa50b: 0x402eda20, + 0xa50c: 0xe0000e2e, 0xa50d: 0xe0000e2b, 0xa50e: 0xe0000da0, 0xa50f: 0xe0000d9d, + 0xa510: 0xe0000de0, 0xa511: 0xe0000ddd, 0xa512: 0xe0000e93, 0xa513: 0xe0000e8f, + 0xa514: 0xe0000eca, 0xa515: 0xe0000ec7, 0xa516: 0xe0000edc, 0xa517: 0xe0000ed9, + 0xa518: 0xe0000ed0, 0xa519: 0xe0000ecd, 0xa51a: 0xe0000f1f, 0xa51b: 0xe0000f1c, + 0xa51c: 0xe0000f2d, 0xa51d: 0xe0000f2a, 0xa51e: 0xe0000f47, 0xa51f: 0xe0000f44, + 0xa520: 0x002fe883, 0xa521: 0x402fe820, 0xa522: 0xe0000f99, 0xa523: 0xe0000f96, + 0xa524: 0xe0000f8a, 0xa525: 0xe0000f87, 0xa526: 0x00303688, 0xa527: 0x40303620, + 0xa528: 0xe000102b, 0xa529: 0xe0001028, 0xa52a: 0xe000103f, 0xa52b: 0xe000103c, + 0xa52c: 0xe0000fe7, 0xa52d: 0xe0000fe4, 0xa52e: 0xe0000ff9, 0xa52f: 0xe0000ff6, + 0xa530: 0xe0001025, 0xa531: 0xe0001022, 0xa532: 0xe0001039, 0xa533: 0xe0001036, + 0xa534: 0xe00010d8, 0xa535: 0xe00010d5, 0xa536: 0xe000110e, 0xa537: 0xe000110b, + 0xa538: 0xe0001117, 0xa539: 0xe000113b, 0xa53a: 0xe0001138, 0xa53b: 0xe000114d, + 0xa53c: 0xe000114a, 0xa53d: 0x00312c83, 0xa53e: 0x40312c20, 0xa53f: 0xe0000f64, + // Block 0x295, offset 0xa540 + 0xa540: 0x40321220, 0xa541: 0x40321a20, 0xa542: 0x40322220, 0xa543: 0x40322a20, + 0xa544: 0x002c6487, 0xa545: 0x002c6485, 0xa546: 0x002c6483, 0xa547: 0x002e2487, + 0xa548: 0x002e2485, 0xa549: 0x002e2483, 0xa54a: 0x002ea087, 0xa54b: 0x002ea085, + 0xa54c: 0x002ea083, 0xa54d: 0xe0000947, 0xa54e: 0xe0000944, 0xa54f: 0xe0000c3d, + 0xa550: 0xe0000c3a, 0xa551: 0xe0000dcc, 0xa552: 0xe0000dc9, 0xa553: 0xe0000ff3, + 0xa554: 0xe0000ff0, 0xa555: 0xe000101e, 0xa556: 0xe000101a, 0xa557: 0xe0001006, + 0xa558: 0xe0001002, 0xa559: 0xe0001016, 0xa55a: 0xe0001012, 0xa55b: 0xe000100e, + 0xa55c: 0xe000100a, 0xa55d: 0x402cae20, 0xa55e: 0xe0000962, 0xa55f: 0xe000095e, + 0xa560: 0xe0000976, 0xa561: 0xe0000972, 0xa562: 0xe00009f4, 0xa563: 0xe00009ef, + 0xa564: 0x002d3a88, 0xa565: 0x402d3a20, 0xa566: 0xe0000bbe, 0xa567: 0xe0000bbb, + 0xa568: 0xe0000c99, 0xa569: 0xe0000c96, 0xa56a: 0xe0000e20, 0xa56b: 0xe0000e1d, + 0xa56c: 0xe0000e27, 0xa56d: 0xe0000e23, 0xa56e: 0xe0001162, 0xa56f: 0xe000115f, + 0xa570: 0xe0000c8d, 0xa571: 0xf0000a0a, 0xa572: 0xf000040a, 0xa573: 0xf0000404, + 0xa574: 0xe0000bac, 0xa575: 0xe0000ba9, 0xa576: 0x002d7888, 0xa577: 0x00319488, + 0xa578: 0xe0000d57, 0xa579: 0xe0000d54, 0xa57a: 0xe0000954, 0xa57b: 0xe0000950, + 0xa57c: 0xe00009ea, 0xa57d: 0xe00009e5, 0xa57e: 0xe0000e19, 0xa57f: 0xe0000e15, + // Block 0x296, offset 0xa580 + 0xa580: 0xe00009b1, 0xa581: 0xe00009ae, 0xa582: 0xe0000a22, 0xa583: 0xe0000a1f, + 0xa584: 0xe0000a28, 0xa585: 0xe0000a25, 0xa586: 0xe0000a2e, 0xa587: 0xe0000a2b, + 0xa588: 0xe0003c3f, 0xa589: 0xe0003c3c, 0xa58a: 0xe0000a8c, 0xa58b: 0xe0000a89, + 0xa58c: 0xe0000a98, 0xa58d: 0xe0000a95, 0xa58e: 0xe0000aa4, 0xa58f: 0xe0000aa1, + 0xa590: 0xe0000a92, 0xa591: 0xe0000a8f, 0xa592: 0xe0000a9e, 0xa593: 0xe0000a9b, + 0xa594: 0xe0000b55, 0xa595: 0xe0000b51, 0xa596: 0xe0000b4d, 0xa597: 0xe0000b49, + 0xa598: 0xe0000b7c, 0xa599: 0xe0000b79, 0xa59a: 0xe0000b82, 0xa59b: 0xe0000b7f, + 0xa59c: 0xe0000b39, 0xa59d: 0xe0000b35, 0xa59e: 0xe0000b8c, 0xa59f: 0xe0000b89, + 0xa5a0: 0xe0000bd0, 0xa5a1: 0xe0000bcd, 0xa5a2: 0xe0000c00, 0xa5a3: 0xe0000bfd, + 0xa5a4: 0xe0000c0c, 0xa5a5: 0xe0000c09, 0xa5a6: 0xe0000bfa, 0xa5a7: 0xe0000bf7, + 0xa5a8: 0xe0000c06, 0xa5a9: 0xe0000c03, 0xa5aa: 0xe0000c12, 0xa5ab: 0xe0000c0f, + 0xa5ac: 0xe0000c7e, 0xa5ad: 0xe0000c7b, 0xa5ae: 0xe0000c4a, 0xa5af: 0xe0000c46, + 0xa5b0: 0xe0000c93, 0xa5b1: 0xe0000c90, 0xa5b2: 0xe0000cab, 0xa5b3: 0xe0000ca8, + 0xa5b4: 0xe0000cb1, 0xa5b5: 0xe0000cae, 0xa5b6: 0xe0000cde, 0xa5b7: 0xe0000cdb, + 0xa5b8: 0xe0000ce5, 0xa5b9: 0xe0000ce1, 0xa5ba: 0xe0000cf2, 0xa5bb: 0xe0000cef, + 0xa5bc: 0xe0000cec, 0xa5bd: 0xe0000ce9, 0xa5be: 0xe0000d1e, 0xa5bf: 0xe0000d1b, + // Block 0x297, offset 0xa5c0 + 0xa5c0: 0xa0000000, 0xa5c1: 0xa0000000, 0xa5c2: 0xa0000000, 0xa5c3: 0xa0000000, + 0xa5c4: 0xa0000000, 0xa5c5: 0xa0000000, 0xa5c6: 0xa0000000, 0xa5c7: 0xa0000000, + 0xa5c8: 0xa0000000, 0xa5c9: 0x40020020, 0xa5ca: 0x40020220, 0xa5cb: 0x40020420, + 0xa5cc: 0x40020620, 0xa5cd: 0x40020820, 0xa5ce: 0xa0000000, 0xa5cf: 0xa0000000, + 0xa5d0: 0xa0000000, 0xa5d1: 0xa0000000, 0xa5d2: 0xa0000000, 0xa5d3: 0xa0000000, + 0xa5d4: 0xa0000000, 0xa5d5: 0xa0000000, 0xa5d6: 0xa0000000, 0xa5d7: 0xa0000000, + 0xa5d8: 0xa0000000, 0xa5d9: 0xa0000000, 0xa5da: 0xa0000000, 0xa5db: 0xa0000000, + 0xa5dc: 0xa0000000, 0xa5dd: 0xa0000000, 0xa5de: 0xa0000000, 0xa5df: 0xa0000000, + 0xa5e0: 0x40021220, 0xa5e1: 0x4002ba20, 0xa5e2: 0x4003e020, 0xa5e3: 0x4004ea20, + 0xa5e4: 0x4027de20, 0xa5e5: 0x4004ec20, 0xa5e6: 0x4004e620, 0xa5e7: 0x4003d220, + 0xa5e8: 0x4003f420, 0xa5e9: 0x4003f620, 0xa5ea: 0x4004d820, 0xa5eb: 0x40093820, + 0xa5ec: 0x40024020, 0xa5ed: 0x40021a20, 0xa5ee: 0x4002e420, 0xa5ef: 0x4004e220, + 0xa5f0: 0x4029cc20, 0xa5f1: 0x4029ce20, 0xa5f2: 0x4029d020, 0xa5f3: 0x4029d220, + 0xa5f4: 0x4029d420, 0xa5f5: 0x4029d620, 0xa5f6: 0x4029d820, 0xa5f7: 0x4029da20, + 0xa5f8: 0x4029dc20, 0xa5f9: 0x4029de20, 0xa5fa: 0x40026c20, 0xa5fb: 0x40026220, + 0xa5fc: 0x40094020, 0xa5fd: 0x40094220, 0xa5fe: 0x40094420, 0xa5ff: 0x4002c420, + // Block 0x298, offset 0xa600 + 0xa600: 0x4004d620, 0xa601: 0x002bde88, 0xa602: 0x002c0a88, 0xa603: 0xc5b12aa4, + 0xa604: 0xc5bb2b54, 0xa605: 0x002c9888, 0xa606: 0x002d0888, 0xa607: 0xc5c72c24, + 0xa608: 0x002d6888, 0xa609: 0x002d9a88, 0xa60a: 0x002dcc88, 0xa60b: 0x002dfe88, + 0xa60c: 0xc5d12cf6, 0xa60d: 0x002e8288, 0xa60e: 0xc5db2dc4, 0xa60f: 0xc5e30b21, + 0xa610: 0x002f2c88, 0xa611: 0x002f5688, 0xa612: 0x002f7a88, 0xa613: 0xc5e92e54, + 0xa614: 0xc5f12ee4, 0xa615: 0xc5f90b21, 0xa616: 0x0030be88, 0xa617: 0x0030e288, + 0xa618: 0x0030f688, 0xa619: 0x00310088, 0xa61a: 0xc5ff2f74, 0xa61b: 0x4003f820, + 0xa61c: 0x4004e420, 0xa61d: 0x4003fa20, 0xa61e: 0x40062420, 0xa61f: 0x40021620, + 0xa620: 0x40061e20, 0xa621: 0x402bde20, 0xa622: 0x402c0a20, 0xa623: 0xc5ae2a72, + 0xa624: 0xc5b62b02, 0xa625: 0x402c9820, 0xa626: 0x402d0820, 0xa627: 0xc5c42bf2, + 0xa628: 0x402d6820, 0xa629: 0x402d9a20, 0xa62a: 0x402dcc20, 0xa62b: 0x402dfe20, + 0xa62c: 0xc5cc2c84, 0xa62d: 0x402e8220, 0xa62e: 0xc5d82d92, 0xa62f: 0xc5e00b21, + 0xa630: 0x402f2c20, 0xa631: 0x402f5620, 0xa632: 0x402f7a20, 0xa633: 0xc5e62e22, + 0xa634: 0xc5ee2eb2, 0xa635: 0xc5f60b21, 0xa636: 0x4030be20, 0xa637: 0x4030e220, + 0xa638: 0x4030f620, 0xa639: 0x40310020, 0xa63a: 0xc5fc2f42, 0xa63b: 0x4003fc20, + 0xa63c: 0x40094820, 0xa63d: 0x4003fe20, 0xa63e: 0x40094c20, 0xa63f: 0xa0000000, + // Block 0x299, offset 0xa640 + 0xa640: 0xe00008f5, 0xa641: 0xe00008ef, 0xa642: 0xe0000921, 0xa643: 0xe0000969, + 0xa644: 0xe000095b, 0xa645: 0xe000094d, 0xa646: 0xe00009dd, 0xa647: 0xe0000a53, + 0xa648: 0xe0000ae8, 0xa649: 0xe0000ae2, 0xa64a: 0xe0000af4, 0xa64b: 0xe0000b20, + 0xa64c: 0xe0000c2b, 0xa64d: 0xe0000c25, 0xa64e: 0xe0000c37, 0xa64f: 0xe0000c43, + 0xa650: 0xe0000ab3, 0xa651: 0xe0000d63, 0xa652: 0xe0000d9a, 0xa653: 0xe0000d94, + 0xa654: 0xe0000da6, 0xa655: 0xe0000de6, 0xa656: 0x002ee483, 0xa657: 0x40093e20, + 0xa658: 0xe0000e12, 0xa659: 0xe0000fe1, 0xa65a: 0xe0000fdb, 0xa65b: 0xe0000fed, + 0xa65c: 0x00306e83, 0xa65d: 0xe0001102, 0xa65e: 0x00318888, 0xa65f: 0xe0000f7b, + 0xa660: 0xe00008f2, 0xa661: 0xe00008ec, 0xa662: 0xe000091e, 0xa663: 0xe0000966, + 0xa664: 0xe0000958, 0xa665: 0xe000094a, 0xa666: 0xe00009d5, 0xa667: 0xe0000a4d, + 0xa668: 0xe0000ae5, 0xa669: 0xe0000adf, 0xa66a: 0xe0000af1, 0xa66b: 0xe0000b1d, + 0xa66c: 0xe0000c28, 0xa66d: 0xe0000c22, 0xa66e: 0xe0000c34, 0xa66f: 0xe0000c40, + 0xa670: 0xe0000aad, 0xa671: 0xe0000d60, 0xa672: 0xe0000d97, 0xa673: 0xe0000d91, + 0xa674: 0xe0000da3, 0xa675: 0xe0000de3, 0xa676: 0x402ee420, 0xa677: 0x40093c20, + 0xa678: 0xe0000e0f, 0xa679: 0xe0000fde, 0xa67a: 0xe0000fd8, 0xa67b: 0xe0000fea, + 0xa67c: 0x40306e20, 0xa67d: 0xe00010ff, 0xa67e: 0x40318820, 0xa67f: 0xe0001114, + // Block 0x29a, offset 0xa680 + 0xa680: 0xe0000cfe, 0xa681: 0xe0000cf8, 0xa682: 0xe0000cf5, 0xa683: 0xe0000d51, + 0xa684: 0xe0000d4e, 0xa685: 0xe0000d6f, 0xa686: 0xe0000d6c, 0xa687: 0xe0000d5d, + 0xa688: 0xe0000d5a, 0xa689: 0xf0000404, 0xa68a: 0x002eda88, 0xa68b: 0x402eda20, + 0xa68c: 0xe0000e2e, 0xa68d: 0xe0000e2b, 0xa68e: 0xe0000da0, 0xa68f: 0xe0000d9d, + 0xa690: 0x002ee4a3, 0xa691: 0x402ee421, 0xa692: 0xe0000e93, 0xa693: 0xe0000e8f, + 0xa694: 0xe0000eca, 0xa695: 0xe0000ec7, 0xa696: 0xe0000edc, 0xa697: 0xe0000ed9, + 0xa698: 0xe0000ed0, 0xa699: 0xe0000ecd, 0xa69a: 0xe0000f1f, 0xa69b: 0xe0000f1c, + 0xa69c: 0xe0000f2d, 0xa69d: 0xe0000f2a, 0xa69e: 0xe0000f47, 0xa69f: 0xe0000f44, + 0xa6a0: 0xe0000f33, 0xa6a1: 0xe0000f30, 0xa6a2: 0xe0000f99, 0xa6a3: 0xe0000f96, + 0xa6a4: 0xe0000f8a, 0xa6a5: 0xe0000f87, 0xa6a6: 0x00303688, 0xa6a7: 0x40303620, + 0xa6a8: 0xe000102b, 0xa6a9: 0xe0001028, 0xa6aa: 0xe000103f, 0xa6ab: 0xe000103c, + 0xa6ac: 0xe0000fe7, 0xa6ad: 0xe0000fe4, 0xa6ae: 0xe0000ff9, 0xa6af: 0xe0000ff6, + 0xa6b0: 0x00306ea3, 0xa6b1: 0x40306e21, 0xa6b2: 0xe0001039, 0xa6b3: 0xe0001036, + 0xa6b4: 0xe00010d8, 0xa6b5: 0xe00010d5, 0xa6b6: 0xe000110e, 0xa6b7: 0xe000110b, + 0xa6b8: 0xe0001117, 0xa6b9: 0xe000113b, 0xa6ba: 0xe0001138, 0xa6bb: 0xe000114d, + 0xa6bc: 0xe000114a, 0xa6bd: 0xe0001147, 0xa6be: 0xe0001144, 0xa6bf: 0xe0000f64, + // Block 0x29b, offset 0xa6c0 + 0xa6c0: 0x40321220, 0xa6c1: 0x40321a20, 0xa6c2: 0x40322220, 0xa6c3: 0x40322a20, + 0xa6c4: 0xe0000ad5, 0xa6c5: 0xe0000ad1, 0xa6c6: 0xe0000acd, 0xa6c7: 0xf0000a0a, + 0xa6c8: 0xf000040a, 0xa6c9: 0xf0000404, 0xa6ca: 0xf0000a0a, 0xa6cb: 0xf000040a, + 0xa6cc: 0xf0000404, 0xa6cd: 0xe0000947, 0xa6ce: 0xe0000944, 0xa6cf: 0xe0000c3d, + 0xa6d0: 0xe0000c3a, 0xa6d1: 0xe0000dcc, 0xa6d2: 0xe0000dc9, 0xa6d3: 0xe0000ff3, + 0xa6d4: 0xe0000ff0, 0xa6d5: 0xe0002964, 0xa6d6: 0xe0002961, 0xa6d7: 0xe0002952, + 0xa6d8: 0xe000294f, 0xa6d9: 0xe000295e, 0xa6da: 0xe000295b, 0xa6db: 0xe0002958, + 0xa6dc: 0xe0002955, 0xa6dd: 0x402cae20, 0xa6de: 0xe0000962, 0xa6df: 0xe000095e, + 0xa6e0: 0xe0000976, 0xa6e1: 0xe0000972, 0xa6e2: 0xe00009f4, 0xa6e3: 0xe00009ef, + 0xa6e4: 0x002d3a88, 0xa6e5: 0x402d3a20, 0xa6e6: 0xe0000bbe, 0xa6e7: 0xe0000bbb, + 0xa6e8: 0xe0000c99, 0xa6e9: 0xe0000c96, 0xa6ea: 0xe0000e20, 0xa6eb: 0xe0000e1d, + 0xa6ec: 0xe0000e27, 0xa6ed: 0xe0000e23, 0xa6ee: 0xe0001162, 0xa6ef: 0xe000115f, + 0xa6f0: 0xe0000c8d, 0xa6f1: 0xf0000a0a, 0xa6f2: 0xf000040a, 0xa6f3: 0xf0000404, + 0xa6f4: 0xe0000bac, 0xa6f5: 0xe0000ba9, 0xa6f6: 0x002d7888, 0xa6f7: 0x00319488, + 0xa6f8: 0xe0000d57, 0xa6f9: 0xe0000d54, 0xa6fa: 0xe0000954, 0xa6fb: 0xe0000950, + 0xa6fc: 0xe00009ea, 0xa6fd: 0xe00009e5, 0xa6fe: 0xe0000e19, 0xa6ff: 0xe0000e15, + // Block 0x29c, offset 0xa700 + 0xa700: 0xe000098f, 0xa701: 0xe000098c, 0xa702: 0xe0000995, 0xa703: 0xe0000992, + 0xa704: 0xe0000b62, 0xa705: 0xe0000b5f, 0xa706: 0xe0000b68, 0xa707: 0xe0000b65, + 0xa708: 0xe0000c6c, 0xa709: 0xe0000c69, 0xa70a: 0xe0000c72, 0xa70b: 0xe0000c6f, + 0xa70c: 0xe0000e4a, 0xa70d: 0xe0000e47, 0xa70e: 0xe0000e50, 0xa70f: 0xe0000e4d, + 0xa710: 0xe0000ee8, 0xa711: 0xe0000ee5, 0xa712: 0xe0000eee, 0xa713: 0xe0000eeb, + 0xa714: 0xe0001053, 0xa715: 0xe0001050, 0xa716: 0xe0001059, 0xa717: 0xe0001056, + 0xa718: 0xe0000f61, 0xa719: 0xe0000f5e, 0xa71a: 0xe0000fa5, 0xa71b: 0xe0000fa2, + 0xa71c: 0x00312288, 0xa71d: 0x40312220, 0xa71e: 0xe0000bf4, 0xa71f: 0xe0000bf1, + 0xa720: 0x002ebc88, 0xa721: 0x402c8c20, 0xa722: 0x002f2288, 0xa723: 0x402f2220, + 0xa724: 0x00314088, 0xa725: 0x40314020, 0xa726: 0xe000096f, 0xa727: 0xe000096c, + 0xa728: 0xe0000b32, 0xa729: 0xe0000b2f, 0xa72a: 0xe000294c, 0xa72b: 0xe0002949, + 0xa72c: 0xe0000dfd, 0xa72d: 0xe0000df9, 0xa72e: 0xe0000e04, 0xa72f: 0xe0000e01, + 0xa730: 0xe0000e0b, 0xa731: 0xe0000e07, 0xa732: 0xe0001129, 0xa733: 0xe0001126, + 0xa734: 0x402e5e20, 0xa735: 0x402ed020, 0xa736: 0x40305a20, 0xa737: 0x402dd420, + 0xa738: 0xe0000abf, 0xa739: 0xe0000ec4, 0xa73a: 0x002be888, 0xa73b: 0x002c4488, + 0xa73c: 0x402c4420, 0xa73d: 0x002e3888, 0xa73e: 0x00303e88, 0xa73f: 0x402ffc20, + // Block 0x29d, offset 0xa740 + 0xa740: 0x00339288, 0xa741: 0x40339220, 0xa742: 0x0033a088, 0xa743: 0x4033a020, + 0xa744: 0x0033ee88, 0xa745: 0x4033ee20, 0xa746: 0x00341088, 0xa747: 0x40341020, + 0xa748: 0x0034a488, 0xa749: 0x4034a420, 0xa74a: 0x0034ec88, 0xa74b: 0x4034ec20, + 0xa74c: 0x00354288, 0xa74d: 0x40354220, 0xa74e: 0x00355688, 0xa74f: 0x40355620, + 0xa750: 0x0033f088, 0xa751: 0x4033f020, 0xa752: 0x00349688, 0xa753: 0x40349620, + 0xa754: 0x0034a688, 0xa755: 0x4034a620, 0xa756: 0x00353888, 0xa757: 0x40353820, + 0xa758: 0x0036cc88, 0xa759: 0x4036cc20, 0xa75a: 0x00348288, 0xa75b: 0x40348220, + 0xa75c: 0x00372e88, 0xa75d: 0x40372e20, 0xa75e: 0x00348088, 0xa75f: 0x40348020, + 0xa760: 0x00349888, 0xa761: 0x40349820, 0xa762: 0x0034da88, 0xa763: 0x4034da20, + 0xa764: 0x00351688, 0xa765: 0x40351620, 0xa766: 0x0035dc88, 0xa767: 0x4035dc20, + 0xa771: 0x00384288, 0xa772: 0x00384488, 0xa773: 0x00384688, + 0xa774: 0x00384888, 0xa775: 0xc6042fd1, 0xa776: 0x00384c88, 0xa777: 0x00384e88, + 0xa778: 0x00385088, 0xa779: 0x00385288, 0xa77a: 0x00385488, 0xa77b: 0x00385688, + 0xa77c: 0x00385888, 0xa77d: 0x00385a88, 0xa77e: 0x00385c88, 0xa77f: 0x00385e88, + // Block 0x29e, offset 0xa780 + 0xa780: 0x40388020, 0xa781: 0x40388220, 0xa782: 0x40388420, 0xa783: 0x40388620, + 0xa784: 0x40388820, 0xa785: 0x40388a20, 0xa786: 0x40388c20, 0xa787: 0x40388a20, + 0xa789: 0x40026e20, 0xa78a: 0x40021c20, + 0xa78f: 0x4027e420, + 0xa791: 0xadc00000, 0xa792: 0xae600000, 0xa793: 0xae600000, + 0xa794: 0xae600000, 0xa795: 0xae600000, 0xa796: 0xadc00000, 0xa797: 0xae600000, + 0xa798: 0xae600000, 0xa799: 0xae600000, 0xa79a: 0xade00000, 0xa79b: 0xadc00000, + 0xa79c: 0xae600000, 0xa79d: 0xae600000, 0xa79e: 0xae600000, 0xa79f: 0xae600000, + 0xa7a0: 0xae600000, 0xa7a1: 0xae600000, 0xa7a2: 0xadc00000, 0xa7a3: 0xadc00000, + 0xa7a4: 0xadc00000, 0xa7a5: 0xadc00000, 0xa7a6: 0xadc00000, 0xa7a7: 0xadc00000, + 0xa7a8: 0xae600000, 0xa7a9: 0xae600000, 0xa7aa: 0xadc00000, 0xa7ab: 0xae600000, + 0xa7ac: 0xae600000, 0xa7ad: 0xade00000, 0xa7ae: 0xae400000, 0xa7af: 0xae600000, + 0xa7b0: 0xa0a08502, 0xa7b1: 0xa0b08602, 0xa7b2: 0xa0c08702, 0xa7b3: 0xa0d08802, + 0xa7b4: 0xa0e08902, 0xa7b5: 0xa0f08a02, 0xa7b6: 0xa1008b02, 0xa7b7: 0xa1108c02, + 0xa7b8: 0xa1208d02, 0xa7b9: 0xa1308e02, 0xa7ba: 0xa1308e02, 0xa7bb: 0xa1408f02, + 0xa7bc: 0xa1509202, 0xa7bd: 0xa1600000, 0xa7be: 0x40055420, 0xa7bf: 0xa1709502, + // Block 0x29f, offset 0xa7c0 + 0xa7c0: 0xa0000000, 0xa7c1: 0xa0000000, 0xa7c2: 0xa0000000, 0xa7c3: 0xa0000000, + 0xa7c4: 0xa0000000, 0xa7c5: 0xa0000000, 0xa7c6: 0xa0000000, 0xa7c7: 0xa0000000, + 0xa7c8: 0xa0000000, 0xa7c9: 0x40020020, 0xa7ca: 0x40020220, 0xa7cb: 0x40020420, + 0xa7cc: 0x40020620, 0xa7cd: 0x40020820, 0xa7ce: 0xa0000000, 0xa7cf: 0xa0000000, + 0xa7d0: 0xa0000000, 0xa7d1: 0xa0000000, 0xa7d2: 0xa0000000, 0xa7d3: 0xa0000000, + 0xa7d4: 0xa0000000, 0xa7d5: 0xa0000000, 0xa7d6: 0xa0000000, 0xa7d7: 0xa0000000, + 0xa7d8: 0xa0000000, 0xa7d9: 0xa0000000, 0xa7da: 0xa0000000, 0xa7db: 0xa0000000, + 0xa7dc: 0xa0000000, 0xa7dd: 0xa0000000, 0xa7de: 0xa0000000, 0xa7df: 0xa0000000, + 0xa7e0: 0x40021220, 0xa7e1: 0x4002ba20, 0xa7e2: 0x4003e020, 0xa7e3: 0x4004ea20, + 0xa7e4: 0x4027de20, 0xa7e5: 0x4004ec20, 0xa7e6: 0x4004e620, 0xa7e7: 0x4003d220, + 0xa7e8: 0x4003f420, 0xa7e9: 0x4003f620, 0xa7ea: 0x4004d820, 0xa7eb: 0x40093820, + 0xa7ec: 0x40024020, 0xa7ed: 0x40021a20, 0xa7ee: 0x4002e420, 0xa7ef: 0x4004e220, + 0xa7f0: 0x4029cc20, 0xa7f1: 0x4029ce20, 0xa7f2: 0x4029d020, 0xa7f3: 0x4029d220, + 0xa7f4: 0x4029d420, 0xa7f5: 0x4029d620, 0xa7f6: 0x4029d820, 0xa7f7: 0x4029da20, + 0xa7f8: 0x4029dc20, 0xa7f9: 0x4029de20, 0xa7fa: 0x40026c20, 0xa7fb: 0x40026220, + 0xa7fc: 0x40094020, 0xa7fd: 0x40094220, 0xa7fe: 0x40094420, 0xa7ff: 0x4002c420, + // Block 0x2a0, offset 0xa800 + 0xa800: 0x4004d620, 0xa801: 0x002bde88, 0xa802: 0x002c0a88, 0xa803: 0xc60809c2, + 0xa804: 0x002c6288, 0xa805: 0x002c9888, 0xa806: 0x002d0888, 0xa807: 0xc60f3026, + 0xa808: 0x002d6888, 0xa809: 0xc6183081, 0xa80a: 0x002dcc88, 0xa80b: 0xc61d30c4, + 0xa80c: 0xc0030002, 0xa80d: 0x002e8288, 0xa80e: 0xc6263145, 0xa80f: 0xc33f3081, + 0xa810: 0x002f2c88, 0xa811: 0x002f5688, 0xa812: 0x002f7a88, 0xa813: 0xc58909c2, + 0xa814: 0x00302c88, 0xa815: 0xc3473081, 0xa816: 0x0030be88, 0xa817: 0x0030e288, + 0xa818: 0x0030f688, 0xa819: 0x00310088, 0xa81a: 0x00312a88, 0xa81b: 0x4003f820, + 0xa81c: 0x4004e420, 0xa81d: 0x4003fa20, 0xa81e: 0x40062420, 0xa81f: 0x40021620, + 0xa820: 0x40061e20, 0xa821: 0x402bde20, 0xa822: 0x402c0a20, 0xa823: 0xc60609b1, + 0xa824: 0x402c6220, 0xa825: 0x402c9820, 0xa826: 0x402d0820, 0xa827: 0xc60b2ff3, + 0xa828: 0x402d6820, 0xa829: 0xc6163081, 0xa82a: 0x402dcc20, 0xa82b: 0xc61a30a2, + 0xa82c: 0xc0000002, 0xa82d: 0x402e8220, 0xa82e: 0xc6223103, 0xa82f: 0xc33d3081, + 0xa830: 0x402f2c20, 0xa831: 0x402f5620, 0xa832: 0x402f7a20, 0xa833: 0xc34109b1, + 0xa834: 0x40302c20, 0xa835: 0xc3453081, 0xa836: 0x4030be20, 0xa837: 0x4030e220, + 0xa838: 0x4030f620, 0xa839: 0x40310020, 0xa83a: 0x40312a20, 0xa83b: 0x4003fc20, + 0xa83c: 0x40094820, 0xa83d: 0x4003fe20, 0xa83e: 0x40094c20, 0xa83f: 0xa0000000, + // Block 0x2a1, offset 0xa840 + 0xa840: 0xe0000d24, 0xa841: 0xe0000d21, 0xa842: 0xe0000d2a, 0xa843: 0xe0000d27, + 0xa844: 0x002ea083, 0xa845: 0x402ea020, 0xa846: 0xe0000d7b, 0xa847: 0xe0000d78, + 0xa848: 0xe0000d87, 0xa849: 0xe0000d84, 0xa84a: 0xe0000d81, 0xa84b: 0xe0000d7e, + 0xa84c: 0xe0000ded, 0xa84d: 0xe0000de9, 0xa84e: 0xe0000df5, 0xa84f: 0xe0000df1, + 0xa850: 0xe0000e3d, 0xa851: 0xe0000e39, 0xa852: 0xe0000e35, 0xa853: 0xe0000e31, + 0xa854: 0xe0000ea7, 0xa855: 0xe0000ea4, 0xa856: 0xe0000ead, 0xa857: 0xe0000eaa, + 0xa858: 0xe0000ed6, 0xa859: 0xe0000ed3, 0xa85a: 0xe0000ef4, 0xa85b: 0xe0000ef1, + 0xa85c: 0xe0000efb, 0xa85d: 0xe0000ef7, 0xa85e: 0xe0000f02, 0xa85f: 0xe0000eff, + 0xa860: 0xe0000f41, 0xa861: 0xe0000f3e, 0xa862: 0xe0000f53, 0xa863: 0xe0000f50, + 0xa864: 0xe0000f26, 0xa865: 0xe0000f22, 0xa866: 0xe0000f3a, 0xa867: 0xe0000f36, + 0xa868: 0xe0000f5a, 0xa869: 0xe0000f56, 0xa86a: 0xe0000f93, 0xa86b: 0xe0000f90, + 0xa86c: 0xe0000f9f, 0xa86d: 0xe0000f9c, 0xa86e: 0xe0000fb1, 0xa86f: 0xe0000fae, + 0xa870: 0xe0000fab, 0xa871: 0xe0000fa8, 0xa872: 0xe0001093, 0xa873: 0xe0001090, + 0xa874: 0xe000109f, 0xa875: 0xe000109c, 0xa876: 0xe0001099, 0xa877: 0xe0001096, + 0xa878: 0xe0001032, 0xa879: 0xe000102e, 0xa87a: 0xe0001046, 0xa87b: 0xe0001042, + 0xa87c: 0xe00010a9, 0xa87d: 0xe00010a6, 0xa87e: 0xe00010af, 0xa87f: 0xe00010ac, + // Block 0x2a2, offset 0xa880 + 0xa880: 0xe0000b03, 0xa881: 0xe0000aff, 0xa882: 0xe0000b13, 0xa883: 0xe0000b0f, + 0xa884: 0xe0000b0b, 0xa885: 0xe0000b07, 0xa886: 0xe0000b75, 0xa887: 0xe0000b71, + 0xa888: 0xe0000c66, 0xa889: 0xe0000c63, 0xa88a: 0x002d9c83, 0xa88b: 0x402d9c20, + 0xa88c: 0x002ee483, 0xa88d: 0x402ee420, 0xa88e: 0xe0000e44, 0xa88f: 0xe0000e41, + 0xa890: 0xe0000dad, 0xa891: 0xe0000da9, 0xa892: 0xe0000db5, 0xa893: 0xe0000db1, + 0xa894: 0xe0000dc5, 0xa895: 0xe0000dc1, 0xa896: 0xe0000dbd, 0xa897: 0xe0000db9, + 0xa898: 0xe0003c96, 0xa899: 0xe0003c93, 0xa89a: 0xe0000e5d, 0xa89b: 0xe0000e59, + 0xa89c: 0xe0000e65, 0xa89d: 0xe0000e61, 0xa89e: 0xe0000e75, 0xa89f: 0xe0000e71, + 0xa8a0: 0xe0000e6d, 0xa8a1: 0xe0000e69, 0xa8a2: 0xe0003c9c, 0xa8a3: 0xe0003c99, + 0xa8a4: 0x00306e83, 0xa8a5: 0x40306e20, 0xa8a6: 0xe000104d, 0xa8a7: 0xe000104a, + 0xa8a8: 0xe0001066, 0xa8a9: 0xe0001062, 0xa8aa: 0xe000106e, 0xa8ab: 0xe000106a, + 0xa8ac: 0xe000107e, 0xa8ad: 0xe000107a, 0xa8ae: 0xe0001076, 0xa8af: 0xe0001072, + 0xa8b0: 0xe0003ca2, 0xa8b1: 0xe0003c9f, 0xa8b2: 0xe0001108, 0xa8b3: 0xe0001105, + 0xa8b4: 0xe0001135, 0xa8b5: 0xe0001132, 0xa8b6: 0xe000112f, 0xa8b7: 0xe000112c, + 0xa8b8: 0xe000111d, 0xa8b9: 0xe000111a, 0xa8ba: 0xe0000d0a, 0xa8bb: 0xe0000d07, + 0xa8bc: 0x0030d888, 0xa8bd: 0x4030d820, 0xa8be: 0x00312088, 0xa8bf: 0x40312020, + // Block 0x2a3, offset 0xa8c0 + 0xa8c0: 0xa0000000, 0xa8c1: 0xa0000000, 0xa8c2: 0xa0000000, 0xa8c3: 0xa0000000, + 0xa8c4: 0xa0000000, 0xa8c5: 0xa0000000, 0xa8c6: 0xa0000000, 0xa8c7: 0xa0000000, + 0xa8c8: 0xa0000000, 0xa8c9: 0x40020020, 0xa8ca: 0x40020220, 0xa8cb: 0x40020420, + 0xa8cc: 0x40020620, 0xa8cd: 0x40020820, 0xa8ce: 0xa0000000, 0xa8cf: 0xa0000000, + 0xa8d0: 0xa0000000, 0xa8d1: 0xa0000000, 0xa8d2: 0xa0000000, 0xa8d3: 0xa0000000, + 0xa8d4: 0xa0000000, 0xa8d5: 0xa0000000, 0xa8d6: 0xa0000000, 0xa8d7: 0xa0000000, + 0xa8d8: 0xa0000000, 0xa8d9: 0xa0000000, 0xa8da: 0xa0000000, 0xa8db: 0xa0000000, + 0xa8dc: 0xa0000000, 0xa8dd: 0xa0000000, 0xa8de: 0xa0000000, 0xa8df: 0xa0000000, + 0xa8e0: 0x40021220, 0xa8e1: 0x4002ba20, 0xa8e2: 0x4003e020, 0xa8e3: 0x4004ea20, + 0xa8e4: 0x4027de20, 0xa8e5: 0x4004ec20, 0xa8e6: 0x4004e620, 0xa8e7: 0x4003d220, + 0xa8e8: 0x4003f420, 0xa8e9: 0x4003f620, 0xa8ea: 0x4004d820, 0xa8eb: 0x40093820, + 0xa8ec: 0x40024020, 0xa8ed: 0x40021a20, 0xa8ee: 0x4002e420, 0xa8ef: 0x4004e220, + 0xa8f0: 0x4029cc20, 0xa8f1: 0x4029ce20, 0xa8f2: 0x4029d020, 0xa8f3: 0x4029d220, + 0xa8f4: 0x4029d420, 0xa8f5: 0x4029d620, 0xa8f6: 0x4029d820, 0xa8f7: 0x4029da20, + 0xa8f8: 0x4029dc20, 0xa8f9: 0x4029de20, 0xa8fa: 0x40026c20, 0xa8fb: 0x40026220, + 0xa8fc: 0x40094020, 0xa8fd: 0x40094220, 0xa8fe: 0x40094420, 0xa8ff: 0x4002c420, + // Block 0x2a4, offset 0xa900 + 0xa900: 0x4004d620, 0xa901: 0xc63031a1, 0xa902: 0x002c0a88, 0xa903: 0x002c3a88, + 0xa904: 0x002c6288, 0xa905: 0xc63631e1, 0xa906: 0x002d0888, 0xa907: 0x002d2288, + 0xa908: 0x002d6888, 0xa909: 0xc63a31e1, 0xa90a: 0x002dcc88, 0xa90b: 0x002dfe88, + 0xa90c: 0xc0030002, 0xa90d: 0x002e8288, 0xa90e: 0x002e9e88, 0xa90f: 0xc63f3201, + 0xa910: 0x002f2c88, 0xa911: 0x002f5688, 0xa912: 0x002f7a88, 0xa913: 0x002fe688, + 0xa914: 0x00302c88, 0xa915: 0xc64431e1, 0xa916: 0x0030be88, 0xa917: 0x0030e288, + 0xa918: 0x0030f688, 0xa919: 0xc64831e1, 0xa91a: 0x00312a88, 0xa91b: 0x4003f820, + 0xa91c: 0x4004e420, 0xa91d: 0x4003fa20, 0xa91e: 0x40062420, 0xa91f: 0x40021620, + 0xa920: 0x40061e20, 0xa921: 0xc62c31a1, 0xa922: 0x402c0a20, 0xa923: 0x402c3a20, + 0xa924: 0x402c6220, 0xa925: 0xc63431e1, 0xa926: 0x402d0820, 0xa927: 0x402d2220, + 0xa928: 0x402d6820, 0xa929: 0xc63831e1, 0xa92a: 0x402dcc20, 0xa92b: 0x402dfe20, + 0xa92c: 0xc0000002, 0xa92d: 0x402e8220, 0xa92e: 0x402e9e20, 0xa92f: 0xc63c3201, + 0xa930: 0x402f2c20, 0xa931: 0x402f5620, 0xa932: 0x402f7a20, 0xa933: 0x402fe620, + 0xa934: 0x40302c20, 0xa935: 0xc64231e1, 0xa936: 0x4030be20, 0xa937: 0x4030e220, + 0xa938: 0x4030f620, 0xa939: 0xc64631e1, 0xa93a: 0x40312a20, 0xa93b: 0x4003fc20, + 0xa93c: 0x40094820, 0xa93d: 0x4003fe20, 0xa93e: 0x40094c20, 0xa93f: 0xa0000000, + // Block 0x2a5, offset 0xa940 + 0xa940: 0xe00008f5, 0xa941: 0x002c0883, 0xa942: 0xe0000921, 0xa943: 0xe0000969, + 0xa944: 0x00320ca3, 0xa945: 0x00321083, 0xa946: 0x00320c83, 0xa947: 0xe0000a53, + 0xa948: 0xe0000ae8, 0xa949: 0x002d0683, 0xa94a: 0xe0000af4, 0xa94b: 0xe0000b20, + 0xa94c: 0xe0000c2b, 0xa94d: 0x002dca83, 0xa94e: 0xe0000c37, 0xa94f: 0xe0000c43, + 0xa950: 0x002c6483, 0xa951: 0xe0000d63, 0xa952: 0xe0000d9a, 0xa953: 0x002f2a83, + 0xa954: 0xe0000da6, 0xa955: 0xe0000de6, 0xa956: 0x00320e83, 0xa957: 0x40093e20, + 0xa958: 0x00320ea3, 0xa959: 0xe0000fe1, 0xa95a: 0x0030bc83, 0xa95b: 0xe0000fed, + 0xa95c: 0xe0000fff, 0xa95d: 0x00312883, 0xa95e: 0x00318888, 0xa95f: 0xe0000f7b, + 0xa960: 0xe00008f2, 0xa961: 0x402c0820, 0xa962: 0xe000091e, 0xa963: 0xe0000966, + 0xa964: 0x40320c21, 0xa965: 0x40321020, 0xa966: 0x40320c20, 0xa967: 0xe0000a4d, + 0xa968: 0xe0000ae5, 0xa969: 0x402d0620, 0xa96a: 0xe0000af1, 0xa96b: 0xe0000b1d, + 0xa96c: 0xe0000c28, 0xa96d: 0x402dca20, 0xa96e: 0xe0000c34, 0xa96f: 0xe0000c40, + 0xa970: 0x402c6420, 0xa971: 0xe0000d60, 0xa972: 0xe0000d97, 0xa973: 0x402f2a20, + 0xa974: 0xe0000da3, 0xa975: 0xe0000de3, 0xa976: 0x40320e20, 0xa977: 0x40093c20, + 0xa978: 0x40320e21, 0xa979: 0xe0000fde, 0xa97a: 0x4030bc20, 0xa97b: 0xe0000fea, + 0xa97c: 0xe0000ffc, 0xa97d: 0x40312820, 0xa97e: 0x40318820, 0xa97f: 0xe0001114, + // Block 0x2a6, offset 0xa980 + 0xa980: 0xe0000983, 0xa981: 0xe0000980, 0xa982: 0xe00008fb, 0xa983: 0xe00008f8, + 0xa984: 0xe000097d, 0xa985: 0xe000097a, 0xa986: 0xe0000a38, 0xa987: 0xe0000a35, + 0xa988: 0xe0000a3e, 0xa989: 0xe0000a3b, 0xa98a: 0xe0000a4a, 0xa98b: 0xe0000a47, + 0xa98c: 0xe0000a44, 0xa98d: 0xe0000a41, 0xa98e: 0xe0000a86, 0xa98f: 0xe0000a83, + 0xa990: 0x002c62a3, 0xa991: 0x402c6221, 0xa992: 0xe0000b46, 0xa993: 0xe0000b43, + 0xa994: 0xe0000aee, 0xa995: 0xe0000aeb, 0xa996: 0xe0000b2c, 0xa997: 0xe0000b29, + 0xa998: 0xe0000b40, 0xa999: 0xe0000b3d, 0xa99a: 0xe0000b1a, 0xa99b: 0xe0000b17, + 0xa99c: 0xe0000bb8, 0xa99d: 0xe0000bb5, 0xa99e: 0xe0000bb2, 0xa99f: 0xe0000baf, + 0xa9a0: 0xe0000bc4, 0xa9a1: 0xe0000bc1, 0xa9a2: 0xe0000bca, 0xa9a3: 0xe0000bc7, + 0xa9a4: 0xe0000bee, 0xa9a5: 0xe0000beb, 0xa9a6: 0xe0000c1b, 0xa9a7: 0xe0000c18, + 0xa9a8: 0xe0000c51, 0xa9a9: 0xe0000c4e, 0xa9aa: 0xe0000c60, 0xa9ab: 0xe0000c5d, + 0xa9ac: 0xe0000c31, 0xa9ad: 0xe0000c2e, 0xa9ae: 0xe0000c5a, 0xa9af: 0xe0000c57, + 0xa9b0: 0xe0000c54, 0xa9b1: 0x402da220, 0xa9b2: 0xf0000a0a, 0xa9b3: 0xf0000404, + 0xa9b4: 0xe0000c8a, 0xa9b5: 0xe0000c87, 0xa9b6: 0xe0000c9f, 0xa9b7: 0xe0000c9c, + 0xa9b8: 0x402f7220, 0xa9b9: 0xe0000ccc, 0xa9ba: 0xe0000cc9, 0xa9bb: 0xe0000cd8, + 0xa9bc: 0xe0000cd5, 0xa9bd: 0xe0000cd2, 0xa9be: 0xe0000ccf, 0xa9bf: 0xe0000d04, + // Block 0x2a7, offset 0xa9c0 + 0xa9c0: 0x40321220, 0xa9c1: 0x40321a20, 0xa9c2: 0x40322220, 0xa9c3: 0x40322a20, + 0xa9c4: 0xe0000ad5, 0xa9c5: 0xe0000ad1, 0xa9c6: 0xe0000acd, 0xa9c7: 0xf0000a0a, + 0xa9c8: 0xf000040a, 0xa9c9: 0xf0000404, 0xa9ca: 0xf0000a0a, 0xa9cb: 0xf000040a, + 0xa9cc: 0xf0000404, 0xa9cd: 0xe0000947, 0xa9ce: 0xe0000944, 0xa9cf: 0xe0000c3d, + 0xa9d0: 0xe0000c3a, 0xa9d1: 0xe0000dcc, 0xa9d2: 0xe0000dc9, 0xa9d3: 0xe0000ff3, + 0xa9d4: 0xe0000ff0, 0xa9d5: 0xe000101e, 0xa9d6: 0xe000101a, 0xa9d7: 0xe0003cde, + 0xa9d8: 0xe0003cdb, 0xa9d9: 0xe0001016, 0xa9da: 0xe0001012, 0xa9db: 0xe000100e, + 0xa9dc: 0xe000100a, 0xa9dd: 0x402cae20, 0xa9de: 0xe000299d, 0xa9df: 0xe000299a, + 0xa9e0: 0xe0000976, 0xa9e1: 0xe0000972, 0xa9e2: 0xe0002997, 0xa9e3: 0xe0002994, + 0xa9e4: 0x002d3a88, 0xa9e5: 0x402d3a20, 0xa9e6: 0xe0000bbe, 0xa9e7: 0xe0000bbb, + 0xa9e8: 0xe0000c99, 0xa9e9: 0xe0000c96, 0xa9ea: 0xe0000e20, 0xa9eb: 0xe0000e1d, + 0xa9ec: 0xe0000e27, 0xa9ed: 0xe0000e23, 0xa9ee: 0xe0001162, 0xa9ef: 0xe000115f, + 0xa9f0: 0xe0000c8d, 0xa9f1: 0xf0000a0a, 0xa9f2: 0xf000040a, 0xa9f3: 0xf0000404, + 0xa9f4: 0xe0000bac, 0xa9f5: 0xe0000ba9, 0xa9f6: 0x002d7888, 0xa9f7: 0x00319488, + 0xa9f8: 0xe0000d57, 0xa9f9: 0xe0000d54, 0xa9fa: 0xe00029b5, 0xa9fb: 0xe00029b2, + 0xa9fc: 0xe0002991, 0xa9fd: 0xe000298e, 0xa9fe: 0xe00037ee, 0xa9ff: 0xe00037eb, + // Block 0x2a8, offset 0xaa00 + 0xaa00: 0xe000098f, 0xaa01: 0xe000098c, 0xaa02: 0xe0000995, 0xaa03: 0xe0000992, + 0xaa04: 0xe0000b62, 0xaa05: 0xe0000b5f, 0xaa06: 0xe0000b68, 0xaa07: 0xe0000b65, + 0xaa08: 0xe0000c6c, 0xaa09: 0xe0000c69, 0xaa0a: 0xe0000c72, 0xaa0b: 0xe0000c6f, + 0xaa0c: 0xe0000e4a, 0xaa0d: 0xe0000e47, 0xaa0e: 0xe0000e50, 0xaa0f: 0xe0000e4d, + 0xaa10: 0xe0000ee8, 0xaa11: 0xe0000ee5, 0xaa12: 0xe0000eee, 0xaa13: 0xe0000eeb, + 0xaa14: 0xe0001053, 0xaa15: 0xe0001050, 0xaa16: 0xe0001059, 0xaa17: 0xe0001056, + 0xaa18: 0xe0000f61, 0xaa19: 0xe0000f5e, 0xaa1a: 0xe0000fa5, 0xaa1b: 0xe0000fa2, + 0xaa1c: 0x00312288, 0xaa1d: 0x40312220, 0xaa1e: 0xe0000bf4, 0xaa1f: 0xe0000bf1, + 0xaa20: 0x002ebc88, 0xaa21: 0x402c8c20, 0xaa22: 0x002f2288, 0xaa23: 0x402f2220, + 0xaa24: 0x00314088, 0xaa25: 0x40314020, 0xaa26: 0xe000096f, 0xaa27: 0xe000096c, + 0xaa28: 0xe0000b32, 0xaa29: 0xe0000b2f, 0xaa2a: 0xe00037e8, 0xaa2b: 0xe00037e5, + 0xaa2c: 0xe0000dfd, 0xaa2d: 0xe0000df9, 0xaa2e: 0xe0000e04, 0xaa2f: 0xe0000e01, + 0xaa30: 0xe0000e0b, 0xaa31: 0xe0000e07, 0xaa32: 0xe0001129, 0xaa33: 0xe0001126, + 0xaa34: 0x402e5e20, 0xaa35: 0x402ed020, 0xaa36: 0x40305a20, 0xaa37: 0x402dd420, + 0xaa38: 0xe0000abf, 0xaa39: 0xe0000ec4, 0xaa3a: 0x002be888, 0xaa3b: 0x002c4488, + 0xaa3c: 0x402c4420, 0xaa3d: 0x002e3888, 0xaa3e: 0x00303e88, 0xaa3f: 0x402ffc20, + // Block 0x2a9, offset 0xaa40 + 0xaa40: 0xe00009b1, 0xaa41: 0xe00009ae, 0xaa42: 0xe0000a22, 0xaa43: 0xe0000a1f, + 0xaa44: 0xe0000a28, 0xaa45: 0xe0000a25, 0xaa46: 0xe0000a2e, 0xaa47: 0xe0000a2b, + 0xaa48: 0xe0000a5a, 0xaa49: 0xe0000a56, 0xaa4a: 0xe0000a8c, 0xaa4b: 0xe0000a89, + 0xaa4c: 0xe0000a98, 0xaa4d: 0xe0000a95, 0xaa4e: 0xe0000aa4, 0xaa4f: 0xe0000aa1, + 0xaa50: 0xe0000a92, 0xaa51: 0xe0000a8f, 0xaa52: 0xe0000a9e, 0xaa53: 0xe0000a9b, + 0xaa54: 0xe0000b55, 0xaa55: 0xe0000b51, 0xaa56: 0xe0003cba, 0xaa57: 0xe0003cb7, + 0xaa58: 0xe0000b7c, 0xaa59: 0xe0000b79, 0xaa5a: 0xe0000b82, 0xaa5b: 0xe0000b7f, + 0xaa5c: 0xe0000b39, 0xaa5d: 0xe0000b35, 0xaa5e: 0xe0000b8c, 0xaa5f: 0xe0000b89, + 0xaa60: 0xe0000bd0, 0xaa61: 0xe0000bcd, 0xaa62: 0xe0000c00, 0xaa63: 0xe0000bfd, + 0xaa64: 0xe0000c0c, 0xaa65: 0xe0000c09, 0xaa66: 0xe0000bfa, 0xaa67: 0xe0000bf7, + 0xaa68: 0xe0000c06, 0xaa69: 0xe0000c03, 0xaa6a: 0xe0000c12, 0xaa6b: 0xe0000c0f, + 0xaa6c: 0xe0000c7e, 0xaa6d: 0xe0000c7b, 0xaa6e: 0xe0003cc0, 0xaa6f: 0xe0003cbd, + 0xaa70: 0xe0000c93, 0xaa71: 0xe0000c90, 0xaa72: 0xe0000cab, 0xaa73: 0xe0000ca8, + 0xaa74: 0xe0000cb1, 0xaa75: 0xe0000cae, 0xaa76: 0xe0000cde, 0xaa77: 0xe0000cdb, + 0xaa78: 0xe0000ce5, 0xaa79: 0xe0000ce1, 0xaa7a: 0xe0000cf2, 0xaa7b: 0xe0000cef, + 0xaa7c: 0xe0000cec, 0xaa7d: 0xe0000ce9, 0xaa7e: 0xe0000d1e, 0xaa7f: 0xe0000d1b, + // Block 0x2aa, offset 0xaa80 + 0xaa80: 0xe0000d24, 0xaa81: 0xe0000d21, 0xaa82: 0xe0000d2a, 0xaa83: 0xe0000d27, + 0xaa84: 0xe0000d69, 0xaa85: 0xe0000d66, 0xaa86: 0xe0000d7b, 0xaa87: 0xe0000d78, + 0xaa88: 0xe0000d87, 0xaa89: 0xe0000d84, 0xaa8a: 0xe0000d81, 0xaa8b: 0xe0000d7e, + 0xaa8c: 0xe0003ccc, 0xaa8d: 0xe0003cc9, 0xaa8e: 0xe0003cf0, 0xaa8f: 0xe0003ced, + 0xaa90: 0xe0000e3d, 0xaa91: 0xe0000e39, 0xaa92: 0xe0003cd2, 0xaa93: 0xe0003ccf, + 0xaa94: 0xe0000ea7, 0xaa95: 0xe0000ea4, 0xaa96: 0xe0000ead, 0xaa97: 0xe0000eaa, + 0xaa98: 0xe0000ed6, 0xaa99: 0xe0000ed3, 0xaa9a: 0xe0000ef4, 0xaa9b: 0xe0000ef1, + 0xaa9c: 0xe0000efb, 0xaa9d: 0xe0000ef7, 0xaa9e: 0xe0000f02, 0xaa9f: 0xe0000eff, + 0xaaa0: 0xe0000f41, 0xaaa1: 0xe0000f3e, 0xaaa2: 0xe0000f53, 0xaaa3: 0xe0000f50, + 0xaaa4: 0xe0000f26, 0xaaa5: 0xe0000f22, 0xaaa6: 0xe0000f3a, 0xaaa7: 0xe0000f36, + 0xaaa8: 0xe0000f5a, 0xaaa9: 0xe0000f56, 0xaaaa: 0xe0000f93, 0xaaab: 0xe0000f90, + 0xaaac: 0xe0000f9f, 0xaaad: 0xe0000f9c, 0xaaae: 0xe0000fb1, 0xaaaf: 0xe0000fae, + 0xaab0: 0xe0000fab, 0xaab1: 0xe0000fa8, 0xaab2: 0xe0001093, 0xaab3: 0xe0001090, + 0xaab4: 0xe000109f, 0xaab5: 0xe000109c, 0xaab6: 0xe0001099, 0xaab7: 0xe0001096, + 0xaab8: 0xe0003ce4, 0xaab9: 0xe0003ce1, 0xaaba: 0xe0001046, 0xaabb: 0xe0001042, + 0xaabc: 0xe00010a9, 0xaabd: 0xe00010a6, 0xaabe: 0xe00010af, 0xaabf: 0xe00010ac, + // Block 0x2ab, offset 0xaac0 + 0xaac0: 0xe00010d2, 0xaac1: 0xe00010cf, 0xaac2: 0xe00010cc, 0xaac3: 0xe00010c9, + 0xaac4: 0xe00010e1, 0xaac5: 0xe00010de, 0xaac6: 0xe00010e7, 0xaac7: 0xe00010e4, + 0xaac8: 0xe00010ed, 0xaac9: 0xe00010ea, 0xaaca: 0xe00010fc, 0xaacb: 0xe00010f9, + 0xaacc: 0xe00010f6, 0xaacd: 0xe00010f3, 0xaace: 0xe0001123, 0xaacf: 0xe0001120, + 0xaad0: 0xe0001141, 0xaad1: 0xe000113e, 0xaad2: 0xe0001153, 0xaad3: 0xe0001150, + 0xaad4: 0xe0001159, 0xaad5: 0xe0001156, 0xaad6: 0xe0000c15, 0xaad7: 0xe0000f8d, + 0xaad8: 0xe00010db, 0xaad9: 0xe0001111, 0xaada: 0xf0000404, 0xaadb: 0xe0000f70, + 0xaadc: 0x40300420, 0xaadd: 0x40300620, 0xaade: 0xe0000f7f, 0xaadf: 0x402c9620, + 0xaae0: 0xe000099b, 0xaae1: 0xe0000998, 0xaae2: 0xe0000989, 0xaae3: 0xe0000986, + 0xaae4: 0xe0003cae, 0xaae5: 0xe0003cab, 0xaae6: 0xe0000930, 0xaae7: 0xe000092c, + 0xaae8: 0xe0000940, 0xaae9: 0xe000093c, 0xaaea: 0xe0000938, 0xaaeb: 0xe0000934, + 0xaaec: 0xe00009aa, 0xaaed: 0xe00009a6, 0xaaee: 0xe0003ca8, 0xaaef: 0xe0003ca5, + 0xaaf0: 0xe000090a, 0xaaf1: 0xe0000906, 0xaaf2: 0xe000091a, 0xaaf3: 0xe0000916, + 0xaaf4: 0xe0000912, 0xaaf5: 0xe000090e, 0xaaf6: 0xe00009a2, 0xaaf7: 0xe000099e, + 0xaaf8: 0xe0000b6e, 0xaaf9: 0xe0000b6b, 0xaafa: 0xe0000b5c, 0xaafb: 0xe0000b59, + 0xaafc: 0xe0000b26, 0xaafd: 0xe0000b23, 0xaafe: 0xe0003cb4, 0xaaff: 0xe0003cb1, + // Block 0x2ac, offset 0xab00 + 0xab00: 0xe0000b03, 0xab01: 0xe0000aff, 0xab02: 0xe0000b13, 0xab03: 0xe0000b0f, + 0xab04: 0xe0000b0b, 0xab05: 0xe0000b07, 0xab06: 0xe0000b75, 0xab07: 0xe0000b71, + 0xab08: 0xe0000c66, 0xab09: 0xe0000c63, 0xab0a: 0xe0000c78, 0xab0b: 0xe0000c75, + 0xab0c: 0xe0000e84, 0xab0d: 0xe0000e81, 0xab0e: 0xe0000e44, 0xab0f: 0xe0000e41, + 0xab10: 0xe0003cc6, 0xab11: 0xe0003cc3, 0xab12: 0xe0000db5, 0xab13: 0xe0000db1, + 0xab14: 0xe0000dc5, 0xab15: 0xe0000dc1, 0xab16: 0xe0000dbd, 0xab17: 0xe0000db9, + 0xab18: 0xe0000e8b, 0xab19: 0xe0000e87, 0xab1a: 0xe0003cd8, 0xab1b: 0xe0003cd5, + 0xab1c: 0xe0000e65, 0xab1d: 0xe0000e61, 0xab1e: 0xe0000e75, 0xab1f: 0xe0000e71, + 0xab20: 0xe0000e6d, 0xab21: 0xe0000e69, 0xab22: 0xe0000e7d, 0xab23: 0xe0000e79, + 0xab24: 0xe000108d, 0xab25: 0xe000108a, 0xab26: 0xe000104d, 0xab27: 0xe000104a, + 0xab28: 0xe0003cea, 0xab29: 0xe0003ce7, 0xab2a: 0xe000106e, 0xab2b: 0xe000106a, + 0xab2c: 0xe000107e, 0xab2d: 0xe000107a, 0xab2e: 0xe0001076, 0xab2f: 0xe0001072, + 0xab30: 0xe0001086, 0xab31: 0xe0001082, 0xab32: 0xe0001108, 0xab33: 0xe0001105, + 0xab34: 0xe0001135, 0xab35: 0xe0001132, 0xab36: 0xe000112f, 0xab37: 0xe000112c, + 0xab38: 0xe000111d, 0xab39: 0xe000111a, 0xab3a: 0xe0000d0a, 0xab3b: 0xe0000d07, + 0xab3c: 0x0030d888, 0xab3d: 0x4030d820, 0xab3e: 0x00312088, 0xab3f: 0x40312020, + // Block 0x2ad, offset 0xab40 + 0xab40: 0x40021220, 0xab41: 0x40025c20, 0xab42: 0x40030420, 0xab43: 0x40051220, + 0xab44: 0x40279a20, 0xab45: 0x4027ca20, 0xab46: 0xe0002206, 0xab47: 0xe00001d3, + 0xab48: 0x40049c20, 0xab49: 0x40049e20, 0xab4a: 0x4004a020, 0xab4b: 0x4004a220, + 0xab4c: 0x4004a420, 0xab4d: 0x4004a620, 0xab4e: 0x4004a820, 0xab4f: 0x4004aa20, + 0xab50: 0x4004ac20, 0xab51: 0x4004ae20, 0xab52: 0x40279c20, 0xab53: 0x40279e20, + 0xab54: 0x4004b020, 0xab55: 0x4004b220, 0xab56: 0x4004b420, 0xab57: 0x4004b620, + 0xab58: 0x4004b820, 0xab59: 0x4004ba20, 0xab5a: 0x4004bc20, 0xab5b: 0x4004be20, + 0xab5c: 0x40023820, 0xab5d: 0x4003ea20, 0xab5e: 0x4003ec20, 0xab5f: 0x4003ee20, + 0xab60: 0x4027a020, 0xab61: 0xe0000267, 0xab62: 0xe000037f, 0xab63: 0xe0000459, + 0xab64: 0xe000052e, 0xab65: 0xe00005f8, 0xab66: 0xe00006c3, 0xab67: 0xe000076b, + 0xab68: 0xe0000817, 0xab69: 0xe00008bc, 0xab6a: 0xada12202, 0xab6b: 0xae412302, + 0xab6c: 0xae812402, 0xab6d: 0xade12502, 0xab6e: 0xae012602, 0xab6f: 0xae012702, + 0xab70: 0x40023a20, 0xab71: 0x4027ce20, 0xab72: 0xe0000152, 0xab73: 0x4027d020, + 0xab74: 0xe0000155, 0xab75: 0x4027d220, 0xab76: 0x00279c84, 0xab77: 0x4027a220, + 0xab78: 0x02a68284, 0xab79: 0x02a68884, 0xab7a: 0x02a68a84, 0xab7b: 0x4027cc20, + 0xab7c: 0xe000231a, 0xab7d: 0x40051420, 0xab7e: 0x4027a420, 0xab7f: 0x4027a620, + // Block 0x2ae, offset 0xab80 + 0xab81: 0xc64a3231, 0xab82: 0xc6503231, 0xab83: 0xc71a3231, + 0xab84: 0xc7203231, 0xab85: 0xc7d83a21, 0xab86: 0xc7e233e1, 0xab87: 0xc8c13231, + 0xab88: 0xc8c73231, 0xab89: 0xc9763231, 0xab8a: 0xc97c3231, 0xab8b: 0xc65c32b1, + 0xab8c: 0xc6693231, 0xab8d: 0xc72633e1, 0xab8e: 0xc73b3671, 0xab8f: 0xc80433e1, + 0xab90: 0xc8193671, 0xab91: 0xc8d332b1, 0xab92: 0xc8e03231, 0xab93: 0xc98233e1, + 0xab94: 0xc9973671, 0xab95: 0xc66f33e1, 0xab96: 0xc6843671, 0xab97: 0xc74833e1, + 0xab98: 0xc75d3671, 0xab99: 0xc82633e1, 0xab9a: 0xc83b3671, 0xab9b: 0xc8e633e1, + 0xab9c: 0xc8fb3671, 0xab9d: 0xc99f33e1, 0xab9e: 0xc9b43671, 0xab9f: 0xc68c33e1, + 0xaba0: 0xc6a13671, 0xaba1: 0xc76533e1, 0xaba2: 0xc77a3671, 0xaba3: 0xc8433a21, + 0xaba4: 0xc84d33e1, 0xaba5: 0xc8623671, 0xaba6: 0xc90333e1, 0xaba7: 0xc9183671, + 0xaba8: 0xc9c133e1, 0xaba9: 0xc9d63671, 0xabaa: 0xc6a93231, 0xabab: 0xc7823231, + 0xabac: 0xc86d3231, 0xabad: 0xc9203231, 0xabae: 0xc9de3231, 0xabaf: 0xc6b436f1, + 0xabb0: 0xc6cf3671, 0xabb1: 0xc6d73671, 0xabb2: 0xc78d36f1, 0xabb3: 0xc7a83671, + 0xabb4: 0xc7b03671, 0xabb5: 0xc87836f1, 0xabb6: 0xc8933671, 0xabb7: 0xc89b3671, + 0xabb8: 0xc92b36f1, 0xabb9: 0xc9463671, 0xabba: 0xc94e3671, 0xabbb: 0xc9e936f1, + 0xabbc: 0xca043671, 0xabbd: 0xca0c3671, 0xabbe: 0xc6df3231, 0xabbf: 0xc7b83231, + // Block 0x2af, offset 0xabc0 + 0xabc0: 0xc8a63231, 0xabc1: 0xc9563231, 0xabc2: 0xca143231, 0xabc3: 0xc6e53231, + 0xabc4: 0xc6eb3231, 0xabc5: 0xc8ac3231, 0xabc6: 0xc8b23231, 0xabc7: 0xca1a3231, + 0xabc8: 0xca203231, 0xabc9: 0xc6f43231, 0xabca: 0xc7c13231, 0xabcb: 0xc8bb3231, + 0xabcc: 0xc95f3231, 0xabcd: 0xca293231, 0xabce: 0xc6fa3a21, 0xabcf: 0xc7043a21, + 0xabd0: 0xc7c73a21, 0xabd1: 0xc9653a21, 0xabd2: 0xca2f3a21, 0xabd3: 0xca453ab1, + 0xabd4: 0xc7f73671, 0xabd5: 0xc6563231, 0xabd6: 0xc8cd3231, + 0xabd9: 0xa0812802, 0xabda: 0xa0812902, 0xabdb: 0x40063c20, + 0xabdc: 0x40063e20, 0xabdd: 0x4027d820, 0xabde: 0xe000015b, 0xabdf: 0xe0004033, + 0xabe0: 0x40023c20, 0xabe1: 0xc64d3281, 0xabe2: 0xc6533281, 0xabe3: 0xc71d3281, + 0xabe4: 0xc7233281, 0xabe5: 0xc7dd3601, 0xabe6: 0xc7ea3501, 0xabe7: 0xc8c43281, + 0xabe8: 0xc8ca3281, 0xabe9: 0xc9793281, 0xabea: 0xc97f3281, 0xabeb: 0xc6613361, + 0xabec: 0xc66c3281, 0xabed: 0xc72e3501, 0xabee: 0xc73f36c1, 0xabef: 0xc80c3501, + 0xabf0: 0xc81d36c1, 0xabf1: 0xc8d83361, 0xabf2: 0xc8e33281, 0xabf3: 0xc98a3501, + 0xabf4: 0xc99b36c1, 0xabf5: 0xc6773501, 0xabf6: 0xc68836c1, 0xabf7: 0xc7503501, + 0xabf8: 0xc76136c1, 0xabf9: 0xc82e3501, 0xabfa: 0xc83f36c1, 0xabfb: 0xc8ee3501, + 0xabfc: 0xc8ff36c1, 0xabfd: 0xc9a73501, 0xabfe: 0xc9b836c1, 0xabff: 0xc6943501, + // Block 0x2b0, offset 0xac00 + 0xac00: 0xc6a536c1, 0xac01: 0xc76d3501, 0xac02: 0xc77e36c1, 0xac03: 0xc8483601, + 0xac04: 0xc8553501, 0xac05: 0xc86636c1, 0xac06: 0xc90b3501, 0xac07: 0xc91c36c1, + 0xac08: 0xc9c93501, 0xac09: 0xc9da36c1, 0xac0a: 0xc6ac3281, 0xac0b: 0xc7853281, + 0xac0c: 0xc8703281, 0xac0d: 0xc9233281, 0xac0e: 0xc9e13281, 0xac0f: 0xc6bf38a1, + 0xac10: 0xc6d336c1, 0xac11: 0xc6db36c1, 0xac12: 0xc79838a1, 0xac13: 0xc7ac36c1, + 0xac14: 0xc7b436c1, 0xac15: 0xc88338a1, 0xac16: 0xc89736c1, 0xac17: 0xc89f36c1, + 0xac18: 0xc93638a1, 0xac19: 0xc94a36c1, 0xac1a: 0xc95236c1, 0xac1b: 0xc9f438a1, + 0xac1c: 0xca0836c1, 0xac1d: 0xca1036c1, 0xac1e: 0xc6e23281, 0xac1f: 0xc7bb3281, + 0xac20: 0xc8a93281, 0xac21: 0xc9593281, 0xac22: 0xca173281, 0xac23: 0xc6e83281, + 0xac24: 0xc6ee3281, 0xac25: 0xc8af3281, 0xac26: 0xc8b53281, 0xac27: 0xca1d3281, + 0xac28: 0xca233281, 0xac29: 0xc6f73281, 0xac2a: 0xc7c43281, 0xac2b: 0xc8be3281, + 0xac2c: 0xc9623281, 0xac2d: 0xca2c3281, 0xac2e: 0xc6ff3601, 0xac2f: 0xc7093501, + 0xac30: 0xc7cc3501, 0xac31: 0xc96a3501, 0xac32: 0xca343501, 0xac33: 0xca453ae1, + 0xac34: 0xc7fb36c1, 0xac35: 0xc6593281, 0xac36: 0xc8d03281, 0xac37: 0xc71636c1, + 0xac38: 0xc7d436c1, 0xac39: 0xc97236c1, 0xac3a: 0xca4136c1, 0xac3b: 0x40023e20, + 0xac3c: 0x4027d620, 0xac3d: 0x4027d820, 0xac3e: 0xe000015b, 0xac3f: 0xe0003eda, + // Block 0x2b1, offset 0xac40 + 0xac45: 0x4065da20, 0xac46: 0x4065dc20, 0xac47: 0x4065de20, + 0xac48: 0x4065e020, 0xac49: 0x4065e420, 0xac4a: 0x4065e620, 0xac4b: 0x4065e820, + 0xac4c: 0x4065ea20, 0xac4d: 0x4065ec20, 0xac4e: 0x4065ee20, 0xac4f: 0x4065f420, + 0xac50: 0x4065f620, 0xac51: 0x4065f820, 0xac52: 0x4065fa20, 0xac53: 0x4065fe20, + 0xac54: 0x40660020, 0xac55: 0x40660220, 0xac56: 0x40660420, 0xac57: 0x40660620, + 0xac58: 0x40660820, 0xac59: 0x40660a20, 0xac5a: 0x40661220, 0xac5b: 0x40661420, + 0xac5c: 0x40661820, 0xac5d: 0x40661a20, 0xac5e: 0x40661e20, 0xac5f: 0x40662020, + 0xac60: 0x40662220, 0xac61: 0x40662420, 0xac62: 0x40662620, 0xac63: 0x40662820, + 0xac64: 0x40662a20, 0xac65: 0x40662e20, 0xac66: 0x40663620, 0xac67: 0x40663820, + 0xac68: 0x40663a20, 0xac69: 0x40663c20, 0xac6a: 0x4065e220, 0xac6b: 0x4065f020, + 0xac6c: 0x4065fc20, 0xac6d: 0x40663e20, + 0xac71: 0x4062ac20, 0xac72: 0x4062ae20, 0xac73: 0x40646820, + 0xac74: 0x4062b020, 0xac75: 0x40646c20, 0xac76: 0x40646e20, 0xac77: 0x4062b220, + 0xac78: 0x4062b420, 0xac79: 0x4062b620, 0xac7a: 0x40647420, 0xac7b: 0x40647620, + 0xac7c: 0x40647820, 0xac7d: 0x40647a20, 0xac7e: 0x40647c20, 0xac7f: 0x40647e20, + // Block 0x2b2, offset 0xac80 + 0xac80: 0x4062e020, 0xac81: 0x4062b820, 0xac82: 0x4062ba20, 0xac83: 0x4062bc20, + 0xac84: 0x4062ee20, 0xac85: 0x4062be20, 0xac86: 0x4062c020, 0xac87: 0x4062c220, + 0xac88: 0x4062c420, 0xac89: 0x4062c620, 0xac8a: 0x4062c820, 0xac8b: 0x4062ca20, + 0xac8c: 0x4062cc20, 0xac8d: 0x4062ce20, 0xac8e: 0x4062d020, 0xac8f: 0x4063a820, + 0xac90: 0x4063aa20, 0xac91: 0x4063ac20, 0xac92: 0x4063ae20, 0xac93: 0x4063b020, + 0xac94: 0x4063b220, 0xac95: 0x4063b420, 0xac96: 0x4063b620, 0xac97: 0x4063b820, + 0xac98: 0x4063ba20, 0xac99: 0x4063bc20, 0xac9a: 0x4063be20, 0xac9b: 0x4063c020, + 0xac9c: 0x4063c220, 0xac9d: 0x4063c420, 0xac9e: 0x4063c620, 0xac9f: 0x4063c820, + 0xaca0: 0x4063ca20, 0xaca1: 0x4063cc20, 0xaca2: 0x4063ce20, 0xaca3: 0x4063d020, + 0xaca4: 0x4063a620, 0xaca5: 0x0062d484, 0xaca6: 0x0062d684, 0xaca7: 0x0064a284, + 0xaca8: 0x0064a484, 0xaca9: 0x0064ac84, 0xacaa: 0x0064b084, 0xacab: 0x0064ba84, + 0xacac: 0x0064c284, 0xacad: 0x0064c684, 0xacae: 0x0062e484, 0xacaf: 0x0064ce84, + 0xacb0: 0x0064d284, 0xacb1: 0x0062e684, 0xacb2: 0x0062e884, 0xacb3: 0x0062ec84, + 0xacb4: 0x0062f084, 0xacb5: 0x0062f284, 0xacb6: 0x0062fa84, 0xacb7: 0x0062fe84, + 0xacb8: 0x00630284, 0xacb9: 0x00630484, 0xacba: 0x00630684, 0xacbb: 0x00630884, + 0xacbc: 0x00630a84, 0xacbd: 0x00631084, 0xacbe: 0x00631884, 0xacbf: 0x00632c84, + // Block 0x2b3, offset 0xacc0 + 0xacc0: 0x40275220, 0xacc1: 0x40275420, 0xacc2: 0x40275620, 0xacc3: 0x40275820, + 0xacc4: 0x40275a20, 0xacc5: 0x40275c20, 0xacc6: 0x40275e20, 0xacc7: 0x40276020, + 0xacc8: 0x40276220, 0xacc9: 0x40276420, 0xacca: 0x40276620, 0xaccb: 0x40276820, + 0xaccc: 0x40276a20, 0xaccd: 0x40276c20, 0xacce: 0x40276e20, 0xaccf: 0x40277020, + 0xacd0: 0x40277220, 0xacd1: 0x40277420, 0xacd2: 0x40277620, 0xacd3: 0x40277820, + 0xacd4: 0x40277a20, 0xacd5: 0x40277c20, 0xacd6: 0x40277e20, 0xacd7: 0x40278020, + 0xacd8: 0x40278220, 0xacd9: 0x40278420, 0xacda: 0x40278620, 0xacdb: 0x40278820, + 0xacdc: 0x40278a20, 0xacdd: 0x40278c20, 0xacde: 0x40278e20, 0xacdf: 0x40279020, + 0xace0: 0x40279220, 0xace1: 0x40279420, 0xace2: 0x40279620, 0xace3: 0x40279820, + 0xacf0: 0xc7ff3601, 0xacf1: 0xc7433601, 0xacf2: 0xc8213601, 0xacf3: 0xc9bc3601, + 0xacf4: 0xc86a3281, 0xacf5: 0xc6af3601, 0xacf6: 0xc7883601, 0xacf7: 0xc8733601, + 0xacf8: 0xc9263601, 0xacf9: 0xc9e43601, 0xacfa: 0xc8a33281, 0xacfb: 0xc6f13281, + 0xacfc: 0xc7be3281, 0xacfd: 0xc8b83281, 0xacfe: 0xc95c3281, 0xacff: 0xca263281, + // Block 0x2b4, offset 0xad00 + 0xad00: 0xf0000404, 0xad01: 0xf0000404, 0xad02: 0xf0000404, 0xad03: 0xf0000404, + 0xad04: 0xf0000404, 0xad05: 0xf0000404, 0xad06: 0xf0000404, 0xad07: 0xf0000404, + 0xad08: 0xf0000404, 0xad09: 0xf0000404, 0xad0a: 0xf0000404, 0xad0b: 0xf0000404, + 0xad0c: 0xf0000404, 0xad0d: 0xf0000404, 0xad0e: 0xe000004c, 0xad0f: 0xe0000051, + 0xad10: 0xe0000056, 0xad11: 0xe000005b, 0xad12: 0xe0000060, 0xad13: 0xe0000065, + 0xad14: 0xe000006a, 0xad15: 0xe000006f, 0xad16: 0xe0000083, 0xad17: 0xe000008d, + 0xad18: 0xe0000092, 0xad19: 0xe0000097, 0xad1a: 0xe000009c, 0xad1b: 0xe00000a1, + 0xad1c: 0xe0000088, 0xad1d: 0xe0000074, 0xad1e: 0xe000007c, + 0xad20: 0xe0002c96, 0xad21: 0xe0002ca6, 0xad22: 0xe0002c9e, 0xad23: 0xe0002cd6, + 0xad24: 0xe0002caa, 0xad25: 0xe0002cbe, 0xad26: 0xe0002c9a, 0xad27: 0xe0002cba, + 0xad28: 0xe0002ca2, 0xad29: 0xe0002cc6, 0xad2a: 0xe0002ce6, 0xad2b: 0xe0002cfa, + 0xad2c: 0xe0002cf6, 0xad2d: 0xe0002cee, 0xad2e: 0xe0002d22, 0xad2f: 0xe0002cda, + 0xad30: 0xe0002ce2, 0xad31: 0xe0002cf2, 0xad32: 0xe0002cea, 0xad33: 0xe0002d06, + 0xad34: 0xe0002cce, 0xad35: 0xe0002cfe, 0xad36: 0xe0002d1a, 0xad37: 0xe0002d0a, + 0xad38: 0xe0002cc2, 0xad39: 0xe0002cae, 0xad3a: 0xe0002cd2, 0xad3b: 0xe0002cde, + 0xad3c: 0xe0002d02, 0xad3d: 0xe0002cb2, 0xad3e: 0xe0002d1e, 0xad3f: 0xe0002cca, + // Block 0x2b5, offset 0xad40 + 0xad40: 0xe0002d0e, 0xad41: 0xe0002cb6, 0xad42: 0xe0002d12, 0xad43: 0xe0002d16, + 0xad44: 0x02aa9e86, 0xad45: 0x02bcf886, 0xad46: 0x02cb0e86, 0xad47: 0x02f71e86, + 0xad48: 0xe00002e3, 0xad49: 0xe00003d8, 0xad4a: 0xe00004b3, 0xad4b: 0xe000057d, + 0xad4c: 0xe0000648, 0xad4d: 0xe00006f0, 0xad4e: 0xe000079c, 0xad4f: 0xe0000841, + 0xad50: 0xe0000ec0, 0xad51: 0xf0000606, 0xad52: 0xf0000606, 0xad53: 0xf0000606, + 0xad54: 0xf0000606, 0xad55: 0xf0000606, 0xad56: 0xf0000606, 0xad57: 0xf0000606, + 0xad58: 0xf0000606, 0xad59: 0xf0000606, 0xad5a: 0xf0000606, 0xad5b: 0xf0000606, + 0xad5c: 0xf0000606, 0xad5d: 0xf0000606, 0xad5e: 0xf0000606, 0xad5f: 0xf0000606, + 0xad60: 0x0062ac86, 0xad61: 0x0062b086, 0xad62: 0x0062b286, 0xad63: 0x0062b686, + 0xad64: 0x0062b886, 0xad65: 0x0062ba86, 0xad66: 0x0062be86, 0xad67: 0x0062c286, + 0xad68: 0x0062c486, 0xad69: 0x0062c886, 0xad6a: 0x0062ca86, 0xad6b: 0x0062cc86, + 0xad6c: 0x0062ce86, 0xad6d: 0x0062d086, 0xad6e: 0xf0000606, 0xad6f: 0xf0000606, + 0xad70: 0xf0000606, 0xad71: 0xf0000606, 0xad72: 0xf0000606, 0xad73: 0xf0000606, + 0xad74: 0xf0000606, 0xad75: 0xf0000606, 0xad76: 0xf0000606, 0xad77: 0xf0000606, + 0xad78: 0xf0000606, 0xad79: 0xf0000606, 0xad7a: 0xf0000606, 0xad7b: 0xf0000606, + 0xad7c: 0xe0002127, 0xad7d: 0xe0002122, 0xad7e: 0xf0000606, 0xad7f: 0x4027ac20, + // Block 0x2b6, offset 0xad80 + 0xad80: 0xe0002dea, 0xad81: 0xe0002e57, 0xad82: 0xe0002e8c, 0xad83: 0xe0002eb9, + 0xad84: 0xe0002ecb, 0xad85: 0xe0002eda, 0xad86: 0xe0002ee9, 0xad87: 0xe0002ef8, + 0xad88: 0xe0002f07, 0xad89: 0xe0002d50, 0xad8a: 0xe0002d63, 0xad8b: 0xe0002d76, + 0xad8c: 0xf0001c1d, 0xad8d: 0xe0000b85, 0xad8e: 0xf0001d1c, 0xad8f: 0xe0000d14, + 0xad90: 0x00657693, 0xad91: 0x00657893, 0xad92: 0x00657a93, 0xad93: 0x00657e93, + 0xad94: 0x00658093, 0xad95: 0x00658293, 0xad96: 0x00658493, 0xad97: 0x00658693, + 0xad98: 0x00658893, 0xad99: 0x00658a93, 0xad9a: 0x00658c93, 0xad9b: 0x00658e93, + 0xad9c: 0x00659093, 0xad9d: 0x00659293, 0xad9e: 0x00659493, 0xad9f: 0x00659693, + 0xada0: 0x00659893, 0xada1: 0x00659a93, 0xada2: 0x00659c93, 0xada3: 0x00659e93, + 0xada4: 0x0065a093, 0xada5: 0x0065a293, 0xada6: 0x0065a493, 0xada7: 0x0065a693, + 0xada8: 0x0065a893, 0xada9: 0x0065aa93, 0xadaa: 0x0065ac93, 0xadab: 0x0065ae93, + 0xadac: 0x0065b093, 0xadad: 0x0065b293, 0xadae: 0x0065b493, 0xadaf: 0x0065b693, + 0xadb0: 0x0065b893, 0xadb1: 0x0065ba93, 0xadb2: 0x0065bc93, 0xadb3: 0x0065be93, + 0xadb4: 0x0065c093, 0xadb5: 0x0065c493, 0xadb6: 0x0065c693, 0xadb7: 0x0065c893, + 0xadb8: 0x0065ca93, 0xadb9: 0x0065cc93, 0xadba: 0x0065ce93, 0xadbb: 0x0065d093, + 0xadbc: 0x0065d293, 0xadbd: 0x0065d493, 0xadbe: 0x0065d693, + // Block 0x2b7, offset 0xadc0 + 0xadc0: 0xe000230b, 0xadc1: 0xe00022f8, 0xadc2: 0xe00022fc, 0xadc3: 0xe0002311, + 0xadc4: 0xe0002316, 0xadc5: 0xe000231d, 0xadc6: 0xe0002321, 0xadc7: 0xe0002325, + 0xadc8: 0xe000232b, 0xadc9: 0xf0001c1c, 0xadca: 0xe0002330, 0xadcb: 0xe000233c, + 0xadcc: 0xe0002340, 0xadcd: 0xe0002337, 0xadce: 0xe0002346, 0xadcf: 0xe000234b, + 0xadd0: 0xe000234f, 0xadd1: 0xe0002353, 0xadd2: 0xf0001c1c, 0xadd3: 0xe000235e, + 0xadd4: 0xe0002358, 0xadd5: 0xf0001c1c, 0xadd6: 0xe0002363, 0xadd7: 0xe000236d, + 0xadd8: 0xe0002d39, 0xadd9: 0xe0002ded, 0xadda: 0xe0002e5a, 0xaddb: 0xe0002e8f, + 0xaddc: 0xe0002ebc, 0xaddd: 0xe0002ece, 0xadde: 0xe0002edd, 0xaddf: 0xe0002eec, + 0xade0: 0xe0002efb, 0xade1: 0xe0002f0a, 0xade2: 0xe0002d54, 0xade3: 0xe0002d67, + 0xade4: 0xe0002d7a, 0xade5: 0xe0002d89, 0xade6: 0xe0002d98, 0xade7: 0xe0002da7, + 0xade8: 0xe0002db6, 0xade9: 0xe0002dc5, 0xadea: 0xe0002dd4, 0xadeb: 0xe0002de3, + 0xadec: 0xe0002e01, 0xaded: 0xe0002e0c, 0xadee: 0xe0002e17, 0xadef: 0xe0002e22, + 0xadf0: 0xe0002e2d, 0xadf1: 0xe0000c1e, 0xadf2: 0xf0001c1c, 0xadf3: 0xf0001d1d, + 0xadf4: 0xe0000a31, 0xadf5: 0xf0001d1c, 0xadf6: 0xf0001c1c, 0xadf7: 0xf0001c1c, + 0xadf8: 0xe0000ac2, 0xadf9: 0xe0000ac6, 0xadfa: 0xf0001d1d, 0xadfb: 0xe0004091, + 0xadfc: 0xe0004097, 0xadfd: 0xe000408e, 0xadfe: 0xe0004094, 0xadff: 0xe0002431, + // Block 0x2b8, offset 0xae00 + 0xae00: 0xf0001d1c, 0xae01: 0xf0001d1d, 0xae02: 0xe00009b7, 0xae03: 0xf0001c1d, + 0xae04: 0xf0001c1c, 0xae05: 0xf0001c1c, 0xae06: 0xe0000a66, 0xae07: 0xe0000a7a, + 0xae08: 0xf0001d1c, 0xae09: 0xf0001c1d, 0xae0a: 0xf0001c1c, 0xae0b: 0xf0001d1d, + 0xae0c: 0xf0001c1c, 0xae0d: 0xf0001d1d, 0xae0e: 0xf0001d1d, 0xae0f: 0xf0001c1c, + 0xae10: 0xf0001c1c, 0xae11: 0xf0001c1c, 0xae12: 0xe0000d0d, 0xae13: 0xf0001c1c, + 0xae14: 0xf0001c1c, 0xae15: 0xe0000d3a, 0xae16: 0xe0000d46, 0xae17: 0xf0001d1d, + 0xae18: 0xe0000eb0, 0xae19: 0xe0000eb8, 0xae1a: 0xf0001d1d, 0xae1b: 0xf0001c1c, + 0xae1c: 0xf0001c1d, 0xae1d: 0xf0001c1d, 0xae1e: 0xe00010b2, 0xae1f: 0xe00009c8, + 0xae20: 0xe0002de7, 0xae21: 0xe0002e54, 0xae22: 0xe0002e89, 0xae23: 0xe0002eb6, + 0xae24: 0xe0002ec8, 0xae25: 0xe0002ed7, 0xae26: 0xe0002ee6, 0xae27: 0xe0002ef5, + 0xae28: 0xe0002f04, 0xae29: 0xe0002d4c, 0xae2a: 0xe0002d5f, 0xae2b: 0xe0002d72, + 0xae2c: 0xe0002d85, 0xae2d: 0xe0002d94, 0xae2e: 0xe0002da3, 0xae2f: 0xe0002db2, + 0xae30: 0xe0002dc1, 0xae31: 0xe0002dd0, 0xae32: 0xe0002ddf, 0xae33: 0xe0002dfd, + 0xae34: 0xe0002e08, 0xae35: 0xe0002e13, 0xae36: 0xe0002e1e, 0xae37: 0xe0002e29, + 0xae38: 0xe0002e34, 0xae39: 0xe0002e3b, 0xae3a: 0xe0002e42, 0xae3b: 0xe0002e49, + 0xae3c: 0xe0002e50, 0xae3d: 0xe0002e66, 0xae3e: 0xe0002e6d, 0xae3f: 0xe0000bdf, + // Block 0x2b9, offset 0xae40 + 0xae40: 0x6c009820, 0xae41: 0x6c0ea820, 0xae43: 0x6c08fe20, + 0xae47: 0x6c148c20, + 0xae48: 0x6c0ad420, 0xae49: 0x6c083420, 0xae4a: 0x6c0ad220, 0xae4b: 0x6c01b020, + 0xae4d: 0x6c12c420, 0xae4e: 0x6c158a20, + 0xae50: 0x6c172e20, 0xae51: 0x6c00da20, + 0xae54: 0x6c02d020, 0xae55: 0x6c173020, 0xae56: 0x6c0bc820, 0xae57: 0x6c18e620, + 0xae58: 0x6c041820, 0xae59: 0x6c134c20, + 0xae5e: 0x6c0ad620, + 0xae61: 0x6c164420, + 0xae66: 0x6c135c20, + 0xae6a: 0x6c173220, + 0xae6d: 0x6c0e8020, + 0xae71: 0x6c173420, 0xae72: 0x6c051c20, + 0xae76: 0x6c173620, + 0xae78: 0x6c036a20, 0xae79: 0x6c0e1420, 0xae7b: 0x6c095e20, + 0xae7c: 0x6c173820, 0xae7f: 0x6c173a20, + // Block 0x2ba, offset 0xae80 + 0xae82: 0x6c173c20, 0xae83: 0x6c110e20, + 0xae85: 0x6c041a20, + 0xae8b: 0x6c111220, + 0xae8d: 0x6c10ae20, 0xae8e: 0x6c062620, 0xae8f: 0x6c13fa20, + 0xae95: 0x6c29d820, 0xae96: 0x6c173e20, 0xae97: 0x6c0ad820, + 0xae98: 0x6c174020, 0xae99: 0x6c01a220, + 0xae9d: 0x6c04f220, 0xae9e: 0x6c068020, 0xae9f: 0x6c152220, + 0xaea2: 0x6c1b9e20, + 0xaeb1: 0x6c15ec20, 0xaeb3: 0x6c10e220, + 0xaebe: 0x6c02fa20, + // Block 0x2bb, offset 0xaec0 + 0xaec0: 0x6c03d620, 0xaec2: 0x6c174220, + 0xaec5: 0x6c174420, 0xaec6: 0x6c163e20, + 0xaec8: 0x6c158620, 0xaec9: 0x6c0d0c20, 0xaeca: 0x6c174820, 0xaecb: 0x6c08c020, + 0xaecc: 0x6c10ce20, 0xaece: 0x6c174e20, + 0xaed1: 0x6c00f820, 0xaed2: 0x6c065e20, + 0xaed4: 0x6c065c20, 0xaed5: 0x6c008c20, + 0xaed8: 0x6c171a20, 0xaed9: 0x6c171820, 0xaedb: 0x6c077e20, + 0xaedc: 0x6c000220, 0xaede: 0x6c175020, 0xaedf: 0x6c175220, + 0xaee0: 0x6c175420, 0xaee1: 0x6c13fc20, 0xaee2: 0x6c175620, + 0xaee4: 0x6c068420, 0xaee5: 0x6c008e20, 0xaee6: 0x6c147820, + 0xaee8: 0x6c046420, 0xaeeb: 0x6c046620, + 0xaeec: 0x6c046820, 0xaeed: 0x6c0f3420, 0xaeee: 0x6c164020, + 0xaef0: 0x6c175820, 0xaef3: 0x6c175a20, + 0xaef6: 0x6c175c20, + 0xaefa: 0x6c0b5e20, + // Block 0x2bc, offset 0xaf00 + 0xaf00: 0x6c09c020, 0xaf01: 0x6c0b6020, 0xaf02: 0x6c176620, + 0xaf04: 0x6c176220, 0xaf06: 0x6c176420, 0xaf07: 0x6c041c20, + 0xaf0a: 0x6c075e20, 0xaf0b: 0x6c021820, + 0xaf0d: 0x6c176020, 0xaf0e: 0x6c175e20, 0xaf0f: 0x6c132a20, + 0xaf14: 0x6c086020, 0xaf15: 0x6c085e20, 0xaf16: 0x6c0d7420, 0xaf17: 0x6c176820, + 0xaf18: 0x6c12c620, 0xaf19: 0x6c0c4e20, + 0xaf1e: 0x6c176a20, 0xaf1f: 0x6c176e20, + 0xaf23: 0x6c0dc220, + 0xaf24: 0x6c168a20, 0xaf25: 0x6c005420, + 0xaf2d: 0x6c176c20, 0xaf2e: 0x6c01b420, + 0xaf30: 0x6c04b020, 0xaf32: 0x6c0e8220, + 0xaf36: 0x6c05c220, 0xaf37: 0x6c177020, + 0xaf3b: 0x6c10ec20, + // Block 0x2bd, offset 0xaf40 + 0xaf41: 0x6c038620, + 0xaf49: 0x6c177220, 0xaf4a: 0x6c005620, + 0xaf4d: 0x6c066020, 0xaf4e: 0x6c038820, 0xaf4f: 0x6c131020, + 0xaf50: 0x6c11c420, 0xaf51: 0x6c041e20, + 0xaf5a: 0x6c021a20, + 0xaf5c: 0x6c17b820, 0xaf5d: 0x6c0fae20, + 0xaf6f: 0x6c117c20, + 0xaf70: 0x6c177620, + 0xaf74: 0x6c11d820, 0xaf76: 0x6c168c20, + 0xaf78: 0x6c0b1e20, 0xaf7a: 0x6c086220, + 0xaf7c: 0x6c08c220, 0xaf7d: 0x6c01b820, + // Block 0x2be, offset 0xaf80 + 0xaf83: 0x6c0f1220, + 0xaf86: 0x6c0df820, 0xaf87: 0x6c177e20, + 0xaf8d: 0x6c005820, 0xaf8e: 0x6c0f3620, 0xaf8f: 0x6c09c220, + 0xaf90: 0x6c078020, 0xaf91: 0x6c155420, 0xaf93: 0x6c0d9420, + 0xaf95: 0x6c01b620, 0xaf97: 0x6c177c20, + 0xaf99: 0x6c158820, 0xaf9a: 0x6c177420, 0xaf9b: 0x6c177820, + 0xaf9c: 0x6c07f420, 0xaf9d: 0x6c177a20, 0xaf9e: 0x6c1ade20, + 0xafa9: 0x6c178a20, + 0xafaf: 0x6c179020, + 0xafb0: 0x6c178c20, 0xafb3: 0x6c01bc20, + 0xafb5: 0x6c134e20, 0xafb6: 0x6c178020, + 0xafbb: 0x6c178820, + 0xafbc: 0x6c068620, 0xafbf: 0x6c086420, + // Block 0x2bf, offset 0xafc0 + 0xafc3: 0x6c02fc20, + 0xafc6: 0x6c179220, + 0xafc8: 0x6c178220, 0xafcb: 0x6c168e20, + 0xafcd: 0x6c08c420, 0xafcf: 0x6c178420, + 0xafd1: 0x6c178e20, + 0xafd6: 0x6c179420, + 0xafd8: 0x6c178620, 0xafdb: 0x6c046a20, + 0xafdd: 0x6c005a20, + 0xafe0: 0x6c046c20, 0xafe1: 0x6c01ba20, + 0xafeb: 0x6c1ae020, + 0xafed: 0x6c148620, 0xafee: 0x6c12f820, 0xafef: 0x6c068820, + 0xaff5: 0x6c0b2220, 0xaff6: 0x6c163620, + 0xafff: 0x6c138820, + // Block 0x2c0, offset 0xb000 + 0xb002: 0x6c055420, 0xb003: 0x6c0d4220, + 0xb004: 0x6c020020, + 0xb00a: 0x6c09f220, + 0xb00e: 0x6c179c20, + 0xb010: 0x6c17a620, 0xb011: 0x6c17a220, + 0xb014: 0x6c179820, 0xb017: 0x6c0d5620, + 0xb018: 0x6c179e20, 0xb01a: 0x6c17a420, 0xb01b: 0x6c17a020, + 0xb01d: 0x6c139220, 0xb01f: 0x6c179a20, + 0xb021: 0x6c0b2020, 0xb023: 0x6c147a20, + 0xb024: 0x6c17a820, 0xb025: 0x6c17aa20, + 0xb02e: 0x6c099420, 0xb02f: 0x6c17c420, + 0xb033: 0x6c114420, + 0xb035: 0x6c128820, 0xb036: 0x6c17ba20, + 0xb038: 0x6c13b820, 0xb03a: 0x6c01a420, + 0xb03e: 0x6c17c220, + // Block 0x2c1, offset 0xb040 + 0xb045: 0x6c17b620, 0xb046: 0x6c17c820, + 0xb049: 0x6c0ce020, 0xb04b: 0x6c062820, + 0xb04d: 0x6c115c20, 0xb04f: 0x6c233820, + 0xb051: 0x6c17c620, 0xb052: 0x6c0fe620, + 0xb054: 0x6c17b020, 0xb056: 0x6c068c20, + 0xb059: 0x6c068a20, 0xb05a: 0x6c17ac20, + 0xb05f: 0x6c094420, + 0xb061: 0x6c17bc20, 0xb063: 0x6c13b620, + 0xb064: 0x6c0e4e20, 0xb065: 0x6c17b420, 0xb066: 0x6c05c620, + 0xb068: 0x6c17ae20, 0xb069: 0x6c17be20, 0xb06a: 0x6c17b220, 0xb06b: 0x6c166a20, + 0xb06c: 0x6c17c020, 0xb06d: 0x6c170620, + 0xb076: 0x6c04f420, + 0xb079: 0x6c05c420, + // Block 0x2c2, offset 0xb080 + 0xb083: 0x6c17ca20, + 0xb087: 0x6c17cc20, + 0xb088: 0x6c17d420, 0xb089: 0x6c005c20, + 0xb08f: 0x6c137820, + 0xb090: 0x6c17d220, + 0xb095: 0x6c17d020, 0xb096: 0x6c17d820, + 0xb09a: 0x6c17d620, + 0xb09c: 0x6c0f3820, + 0xb0a5: 0x6c05c820, + 0xb0ac: 0x6c17da20, + 0xb0b2: 0x6c091a20, + 0xb0b4: 0x6c0d4420, 0xb0b5: 0x6c0f3a20, 0xb0b6: 0x6c051420, + 0xb0b8: 0x6c17dc20, + 0xb0bd: 0x6c03d820, + // Block 0x2c3, offset 0xb0c0 + 0xb0c0: 0x6c17de20, + 0xb0c5: 0x6c17e220, + 0xb0cd: 0x6c13fe20, + 0xb0d1: 0x6c05b020, + 0xb0d8: 0x6c083620, 0xb0d9: 0x6c124e20, 0xb0da: 0x6c17e020, + 0xb0ec: 0x6c07a220, 0xb0ed: 0x6c159220, + 0xb0f2: 0x6c17e620, 0xb0f3: 0x6c17ec20, + 0xb0f4: 0x6c17e420, 0xb0f5: 0x6c07a020, 0xb0f7: 0x6c0a4620, + 0xb0fe: 0x6c055620, + // Block 0x2c4, offset 0xb100 + 0xb102: 0x6c17ee20, + 0xb105: 0x6c04c620, + 0xb109: 0x6c17e820, 0xb10a: 0x6c17ea20, + 0xb10d: 0x6c104620, 0xb10f: 0x6c0d3420, + 0xb111: 0x6c046e20, + 0xb115: 0x6c142e20, 0xb116: 0x6c17f020, + 0xb11a: 0x6c164220, + 0xb11e: 0x6c17f220, + 0xb123: 0x6c17f820, + 0xb125: 0x6c17f420, 0xb127: 0x6c0cd820, + 0xb12d: 0x6c17f620, 0xb12e: 0x6c17fa20, + 0xb135: 0x6c17fe20, + 0xb139: 0x6c17fc20, 0xb13b: 0x6c136820, + // Block 0x2c5, offset 0xb140 + 0xb140: 0x6c03da20, 0xb141: 0x6c180220, 0xb142: 0x6c180420, + 0xb144: 0x6c019620, + 0xb149: 0x6c180020, + 0xb152: 0x6c097820, + 0xb154: 0x6c180a20, 0xb155: 0x6c180820, 0xb156: 0x6c180620, + 0xb158: 0x6c179620, 0xb15a: 0x6c180c20, + 0xb15f: 0x6c0a4820, + 0xb161: 0x6c180e20, + 0xb16a: 0x6c155620, + 0xb172: 0x6c150220, + 0xb177: 0x6c181220, + 0xb17a: 0x6c181020, 0xb17b: 0x6c181620, + 0xb17c: 0x6c181420, 0xb17f: 0x6c181820, + // Block 0x2c6, offset 0xb180 + 0xb180: 0x6c181a20, 0xb181: 0x6c00a820, 0xb183: 0x6c060a20, + 0xb184: 0x6c055a20, 0xb185: 0x6c09c420, 0xb186: 0x6c0eaa20, 0xb187: 0x6c047020, + 0xb188: 0x6c0c5020, 0xb189: 0x6c068e20, 0xb18b: 0x6c073820, + 0xb18c: 0x6c181e20, 0xb18d: 0x6c14e020, 0xb18e: 0x6c0fb820, + 0xb190: 0x6c08c620, 0xb192: 0x6c181c20, + 0xb194: 0x6c182020, + 0xb19a: 0x6c0fe820, + 0xb19c: 0x6c02de20, + 0xb1a2: 0x6c182220, + 0xb1a5: 0x6c10e420, + 0xb1a8: 0x6c0ca420, 0xb1a9: 0x6c182620, 0xb1aa: 0x6c182820, 0xb1ab: 0x6c11b820, + 0xb1ac: 0x6c069020, 0xb1ad: 0x6c16fa20, 0xb1ae: 0x6c182a20, + 0xb1b1: 0x6c047420, + 0xb1b5: 0x6c135020, 0xb1b6: 0x6c0d6420, 0xb1b7: 0x6c050a20, + 0xb1b8: 0x6c0f9620, + 0xb1bc: 0x6c05ca20, + // Block 0x2c7, offset 0xb1c0 + 0xb1c0: 0x6c182c20, 0xb1c2: 0x6c182e20, + 0xb1c5: 0x6c10ac20, 0xb1c6: 0x6c013a20, + 0xb1c9: 0x6c183420, 0xb1ca: 0x6c081220, + 0xb1cc: 0x6c183220, 0xb1cd: 0x6c07a420, 0xb1cf: 0x6c183620, + 0xb1d0: 0x6c27ee20, 0xb1d1: 0x6c183820, 0xb1d2: 0x6c141620, 0xb1d3: 0x6c183a20, + 0xb1d5: 0x6c183c20, 0xb1d6: 0x6c183e20, 0xb1d7: 0x6c0ada20, + 0xb1d9: 0x6c092820, + 0xb1e0: 0x6c02fe20, 0xb1e2: 0x6c184420, + 0xb1e4: 0x6c184020, 0xb1e5: 0x6c14ca20, 0xb1e6: 0x6c184220, + 0xb1e8: 0x6c12d020, 0xb1e9: 0x6c184620, 0xb1ea: 0x6c184820, 0xb1eb: 0x6c184a20, + 0xb1ec: 0x6c0fea20, + 0xb1f0: 0x6c185220, 0xb1f1: 0x6c184e20, 0xb1f2: 0x6c185020, 0xb1f3: 0x6c184c20, + 0xb1f4: 0x6c07de20, 0xb1f5: 0x6c185420, 0xb1f6: 0x6c152420, 0xb1f7: 0x6c169020, + 0xb1fd: 0x6c185620, + // Block 0x2c8, offset 0xb200 + 0xb204: 0x6c0bd020, 0xb205: 0x6c185820, 0xb206: 0x6c0a0020, + 0xb209: 0x6c185a20, 0xb20b: 0x6c0eac20, + 0xb20c: 0x6c164620, 0xb20d: 0x6c0fec20, + 0xb216: 0x6c18ec20, + 0xb21b: 0x6c185c20, + 0xb21c: 0x6c31a420, 0xb21d: 0x6c04b220, + 0xb220: 0x6c185e20, 0xb221: 0x6c145020, + 0xb226: 0x6c0a1c20, 0xb227: 0x6c0df020, + 0xb229: 0x6c186220, 0xb22a: 0x6c10b020, + 0xb22d: 0x6c186420, + 0xb230: 0x6c186620, 0xb231: 0x6c025020, + 0xb235: 0x6c186820, 0xb236: 0x6c047620, + 0xb238: 0x6c108020, 0xb239: 0x6c017020, 0xb23a: 0x6c09ec20, + 0xb23d: 0x6c11a220, 0xb23e: 0x6c186a20, + // Block 0x2c9, offset 0xb240 + 0xb240: 0x6c0fee20, 0xb243: 0x6c0b6220, + 0xb244: 0x6c186c20, 0xb246: 0x6c133020, 0xb247: 0x6c0c3420, + 0xb248: 0x6c02f420, 0xb24a: 0x6c030220, 0xb24b: 0x6c186e20, + 0xb24e: 0x6c187220, + 0xb251: 0x6c055820, + 0xb254: 0x6c187020, 0xb257: 0x6c16ae20, + 0xb25d: 0x6c0a1e20, + 0xb264: 0x6c11da20, 0xb265: 0x6c137020, 0xb267: 0x6c187420, + 0xb269: 0x6c15fc20, 0xb26a: 0x6c187620, + 0xb26e: 0x6c187820, + 0xb270: 0x6c102820, 0xb273: 0x6c187a20, + 0xb276: 0x6c0bd220, 0xb277: 0x6c081420, + 0xb278: 0x6c05cc20, 0xb279: 0x6c187c20, 0xb27a: 0x6c086620, 0xb27b: 0x6c073a20, + // Block 0x2ca, offset 0xb280 + 0xb283: 0x6c0f3c20, + 0xb284: 0x6c188020, 0xb287: 0x6c0d4620, + 0xb28a: 0x6c07f620, 0xb28b: 0x6c188220, + 0xb28c: 0x6c188420, 0xb28d: 0x6c0c9c20, 0xb28f: 0x6c187e20, + 0xb294: 0x6c188820, 0xb296: 0x6c140020, + 0xb29b: 0x6c072420, + 0xb29e: 0x6c188620, + 0xb2a3: 0x6c05ce20, + 0xb2a4: 0x6c07d420, 0xb2a5: 0x6c117e20, + 0xb2a9: 0x6c188e20, 0xb2aa: 0x6c188a20, + 0xb2af: 0x6c131220, + 0xb2b0: 0x6c0adc20, 0xb2b1: 0x6c189c20, 0xb2b2: 0x6c02bc20, 0xb2b3: 0x6c189020, + 0xb2b4: 0x6c188c20, 0xb2b5: 0x6c0cda20, + 0xb2bd: 0x6c189420, 0xb2bf: 0x6c189220, + // Block 0x2cb, offset 0xb2c0 + 0xb2c3: 0x6c027c20, + 0xb2c7: 0x6c05a420, + 0xb2c8: 0x6c189e20, 0xb2c9: 0x6c162220, + 0xb2cd: 0x6c189620, + 0xb2d1: 0x6c18a020, 0xb2d2: 0x6c189a20, + 0xb2d4: 0x6c189820, + 0xb2db: 0x6c166620, + 0xb2df: 0x6c069220, + 0xb2e0: 0x6c01be20, 0xb2e3: 0x6c16b020, + 0xb2e9: 0x6c0a3620, 0xb2ea: 0x6c0fdc20, 0xb2eb: 0x6c072620, + 0xb2ec: 0x6c18a620, 0xb2ed: 0x6c18a820, + 0xb2f1: 0x6c169220, + 0xb2f4: 0x6c16da20, 0xb2f5: 0x6c18ac20, + 0xb2f9: 0x6c069420, + 0xb2fc: 0x6c18aa20, 0xb2fe: 0x6c025220, + // Block 0x2cc, offset 0xb300 + 0xb301: 0x6c18ae20, 0xb303: 0x6c144020, + 0xb305: 0x6c0ee820, 0xb307: 0x6c155820, + 0xb309: 0x6c138a20, + 0xb30d: 0x6c18b020, + 0xb312: 0x6c2f1420, + 0xb315: 0x6c104820, 0xb317: 0x6c18b220, + 0xb318: 0x6c030420, 0xb319: 0x6c14b620, + 0xb31d: 0x6c0a4a20, 0xb31e: 0x6c18b420, 0xb31f: 0x6c13a620, + 0xb320: 0x6c18bc20, 0xb322: 0x6c0bd420, 0xb323: 0x6c18b620, + 0xb324: 0x6c04c820, 0xb326: 0x6c18b820, 0xb327: 0x6c030620, + 0xb332: 0x6c054020, 0xb333: 0x6c18be20, + 0xb335: 0x6c18c020, + 0xb338: 0x6c18c220, 0xb339: 0x6c18c420, 0xb33a: 0x6c094620, + 0xb33e: 0x6c069620, 0xb33f: 0x6c150c20, + // Block 0x2cd, offset 0xb340 + 0xb341: 0x6c152020, 0xb342: 0x6c10d620, + 0xb345: 0x6c13ba20, 0xb346: 0x6c18c620, + 0xb348: 0x6c18c820, + 0xb34d: 0x6c18cc20, 0xb34f: 0x6c18d020, + 0xb350: 0x6c18ce20, + 0xb355: 0x6c18d220, 0xb356: 0x6c01b220, 0xb357: 0x6c142c20, + 0xb359: 0x6c081020, 0xb35a: 0x6c18d420, + 0xb35d: 0x6c0cee20, + 0xb360: 0x6c0a4c20, 0xb361: 0x6c047a20, 0xb363: 0x6c18d620, + 0xb36a: 0x6c121620, + 0xb36f: 0x6c18d820, + 0xb371: 0x6c18da20, 0xb373: 0x6c18dc20, + 0xb378: 0x6c18de20, 0xb379: 0x6c126420, 0xb37a: 0x6c04f820, 0xb37b: 0x6c008a20, + 0xb37f: 0x6c106620, + // Block 0x2ce, offset 0xb380 + 0xb380: 0x6c18e020, 0xb381: 0x6c09c620, 0xb383: 0x6c0c5220, + 0xb385: 0x6c18e420, 0xb386: 0x6c18e220, 0xb387: 0x6c0a4e20, + 0xb388: 0x6c066220, 0xb389: 0x6c18e820, 0xb38a: 0x6c11dc20, + 0xb38d: 0x6c18ea20, + 0xb391: 0x6c121820, 0xb392: 0x6c0d6020, 0xb393: 0x6c0dd420, + 0xb394: 0x6c047820, 0xb397: 0x6c10c420, + 0xb398: 0x6c0e1620, 0xb39a: 0x6c118020, + 0xb39c: 0x6c143020, 0xb39e: 0x6c18ee20, + 0xb3a0: 0x6c0c5420, + 0xb3a6: 0x6c054e20, + 0xb3a9: 0x6c18f020, + 0xb3ae: 0x6c18f220, 0xb3af: 0x6c00d420, + 0xb3b0: 0x6c00aa20, 0xb3b1: 0x6c038a20, 0xb3b3: 0x6c0d4820, + 0xb3b4: 0x6c040e20, 0xb3b5: 0x6c15ee20, 0xb3b7: 0x6c18f820, + 0xb3b8: 0x6c01a620, 0xb3bb: 0x6c18f620, + 0xb3bf: 0x6c047c20, + // Block 0x2cf, offset 0xb3c0 + 0xb3c2: 0x6c18fa20, + 0xb3c4: 0x6c153220, + 0xb3d6: 0x6c18fc20, + 0xb3d8: 0x6c166c20, 0xb3da: 0x6c069820, + 0xb3df: 0x6c060c20, + 0xb3e0: 0x6c18fe20, + 0xb3e5: 0x6c190220, 0xb3e6: 0x6c190020, + 0xb3e8: 0x6c0b8220, 0xb3e9: 0x6c00ee20, + 0xb3ed: 0x6c013820, 0xb3ee: 0x6c190420, + 0xb3f0: 0x6c190620, 0xb3f3: 0x6c060e20, + 0xb3f6: 0x6c190820, + 0xb3fb: 0x6c044820, + // Block 0x2d0, offset 0xb400 + 0xb402: 0x6c083820, 0xb403: 0x6c190a20, + 0xb408: 0x6c147c20, 0xb409: 0x6c078220, 0xb40a: 0x6c042020, 0xb40b: 0x6c155a20, + 0xb40c: 0x6c0cdc20, 0xb40d: 0x6c11de20, 0xb40e: 0x6c098a20, + 0xb414: 0x6c09da20, 0xb416: 0x6c096020, 0xb417: 0x6c097a20, + 0xb419: 0x6c0a3820, 0xb41b: 0x6c11e020, + 0xb41f: 0x6c191020, + 0xb421: 0x6c010220, 0xb422: 0x6c0cde20, 0xb423: 0x6c069a20, + 0xb424: 0x6c062a20, 0xb425: 0x6c04f620, + 0xb428: 0x6c191820, 0xb429: 0x6c0df620, 0xb42a: 0x6c0df420, 0xb42b: 0x6c047e20, + 0xb42c: 0x6c0a5020, 0xb42d: 0x6c191a20, 0xb42e: 0x6c191620, 0xb42f: 0x6c01c020, + 0xb430: 0x6c0dc420, 0xb431: 0x6c090020, 0xb432: 0x6c086a20, 0xb433: 0x6c00c820, + 0xb436: 0x6c02d420, 0xb437: 0x6c072820, + 0xb438: 0x6c086820, 0xb43a: 0x6c191c20, + // Block 0x2d1, offset 0xb440 + 0xb441: 0x6c191e20, 0xb443: 0x6c03fe20, + 0xb444: 0x6c028020, + 0xb448: 0x6c072a20, 0xb449: 0x6c03fc20, 0xb44a: 0x6c0f2e20, 0xb44b: 0x6c00c620, + 0xb44c: 0x6c104a20, 0xb44d: 0x6c14cc20, 0xb44e: 0x6c069e20, 0xb44f: 0x6c15fe20, + 0xb450: 0x6c0fba20, 0xb451: 0x6c069c20, + 0xb45b: 0x6c054220, + 0xb45d: 0x6c193020, 0xb45f: 0x6c04ee20, + 0xb460: 0x6c142820, + 0xb466: 0x6c121a20, + 0xb469: 0x6c192e20, 0xb46b: 0x6c036c20, + 0xb46c: 0x6c192420, 0xb46d: 0x6c192620, 0xb46e: 0x6c192a20, + 0xb476: 0x6c192c20, + 0xb478: 0x6c042220, 0xb479: 0x6c0b8620, 0xb47b: 0x6c133220, + 0xb47c: 0x6c192820, 0xb47d: 0x6c192020, 0xb47e: 0x6c066620, + // Block 0x2d2, offset 0xb480 + 0xb480: 0x6c192220, 0xb482: 0x6c16cc20, + 0xb486: 0x6c13bc20, + 0xb488: 0x6c0f4020, 0xb489: 0x6c066420, 0xb48a: 0x6c073c20, + 0xb48e: 0x6c193220, + 0xb491: 0x6c10a220, + 0xb49f: 0x6c193a20, + 0xb4a8: 0x6c098c20, 0xb4aa: 0x6c097c20, + 0xb4b0: 0x6c194020, 0xb4b1: 0x6c193c20, 0xb4b3: 0x6c149620, + 0xb4b5: 0x6c193620, 0xb4b6: 0x6c194820, 0xb4b7: 0x6c193e20, + 0xb4bb: 0x6c194420, + 0xb4bc: 0x6c062c20, 0xb4bd: 0x6c14ce20, + // Block 0x2d3, offset 0xb4c0 + 0xb4c0: 0x6c194620, + 0xb4c4: 0x6c194a20, 0xb4c6: 0x6c194e20, + 0xb4cb: 0x6c07f820, + 0xb4cc: 0x6c170820, 0xb4ce: 0x6c193820, 0xb4cf: 0x6c193420, + 0xb4d0: 0x6c194c20, 0xb4d2: 0x6c194220, + 0xb4e2: 0x6c195220, + 0xb4e4: 0x6c196420, 0xb4e5: 0x6c195620, + 0xb4e8: 0x6c195e20, 0xb4eb: 0x6c196020, + 0xb4ec: 0x6c195820, 0xb4ef: 0x6c199a20, + 0xb4f2: 0x6c07ea20, 0xb4f3: 0x6c025620, + 0xb4f8: 0x6c195420, + 0xb4fc: 0x6c196820, 0xb4fd: 0x6c00ac20, 0xb4fe: 0x6c196620, + // Block 0x2d4, offset 0xb500 + 0xb500: 0x6c000a20, 0xb501: 0x6c12b020, 0xb502: 0x6c196220, + 0xb504: 0x6c195a20, 0xb507: 0x6c195020, + 0xb508: 0x6c195c20, 0xb509: 0x6c07a820, + 0xb518: 0x6c196a20, + 0xb521: 0x6c00ae20, 0xb522: 0x6c197c20, + 0xb525: 0x6c196c20, 0xb526: 0x6c196e20, + 0xb528: 0x6c0a5220, 0xb529: 0x6c146620, + 0xb52d: 0x6c197820, 0xb52e: 0x6c197620, + 0xb532: 0x6c0f8a20, + 0xb53a: 0x6c197a20, + 0xb53d: 0x6c197420, + // Block 0x2d5, offset 0xb540 + 0xb544: 0x6c00e420, 0xb546: 0x6c078420, 0xb547: 0x6c0b2420, + 0xb54f: 0x6c197020, + 0xb550: 0x6c0ff020, + 0xb554: 0x6c197220, 0xb556: 0x6c000420, + 0xb56e: 0x6c198620, 0xb56f: 0x6c155220, + 0xb571: 0x6c0a5620, 0xb573: 0x6c199220, + 0xb578: 0x6c199020, 0xb579: 0x6c197e20, + 0xb57e: 0x6c0d7e20, + // Block 0x2d6, offset 0xb580 + 0xb580: 0x6c198020, + 0xb584: 0x6c0dd620, 0xb585: 0x6c198a20, 0xb586: 0x6c0a5420, + 0xb58c: 0x6c198420, 0xb58f: 0x6c151820, + 0xb593: 0x6c055c20, + 0xb596: 0x6c198c20, 0xb597: 0x6c198e20, + 0xb59c: 0x6c198820, 0xb59d: 0x6c199420, + 0xb5a3: 0x6c198220, + 0xb5bb: 0x6c19a020, + 0xb5bc: 0x6c19aa20, 0xb5be: 0x6c19a220, + // Block 0x2d7, offset 0xb5c0 + 0xb5c0: 0x6c199820, 0xb5c3: 0x6c19ac20, + 0xb5c4: 0x6c0c9e20, 0xb5c7: 0x6c19b020, + 0xb5c9: 0x6c06a020, 0xb5ca: 0x6c199c20, 0xb5cb: 0x6c0eae20, + 0xb5d8: 0x6c19a420, 0xb5d9: 0x6c199620, 0xb5da: 0x6c030a20, + 0xb5dc: 0x6c038c20, 0xb5dd: 0x6c02be20, 0xb5de: 0x6c19a620, 0xb5df: 0x6c199e20, + 0xb5e7: 0x6c05d020, + 0xb5e8: 0x6c19b220, 0xb5e9: 0x6c19ae20, 0xb5ea: 0x6c0ce220, 0xb5eb: 0x6c040020, + 0xb5ec: 0x6c048020, 0xb5ee: 0x6c19a820, + 0xb5f0: 0x6c051020, + 0xb5f6: 0x6c010420, + // Block 0x2d8, offset 0xb600 + 0xb604: 0x6c19ba20, 0xb605: 0x6c19b620, 0xb607: 0x6c1a2820, + 0xb614: 0x6c19c020, + 0xb61a: 0x6c19b420, + 0xb61c: 0x6c19bc20, 0xb61f: 0x6c19b820, + 0xb623: 0x6c086c20, + 0xb624: 0x6c19be20, + 0xb637: 0x6c19c420, + 0xb639: 0x6c19ce20, + 0xb63d: 0x6c19ca20, 0xb63e: 0x6c19c820, + // Block 0x2d9, offset 0xb640 + 0xb646: 0x6c0e1820, + 0xb649: 0x6c01c220, + 0xb654: 0x6c19c220, 0xb656: 0x6c19c620, 0xb657: 0x6c0a5820, + 0xb658: 0x6c00e220, 0xb65b: 0x6c19cc20, + 0xb669: 0x6c01f420, + 0xb66f: 0x6c19e220, + 0xb671: 0x6c0b0020, 0xb672: 0x6c19da20, + 0xb674: 0x6c19d620, 0xb676: 0x6c19d820, + 0xb678: 0x6c19dc20, + // Block 0x2da, offset 0xb680 + 0xb682: 0x6c00f620, + 0xb68c: 0x6c0cae20, 0xb68e: 0x6c19d020, + 0xb690: 0x6c19d220, + 0xb69b: 0x6c02e820, + 0xb6a4: 0x6c19e020, + 0xb6a8: 0x6c038e20, 0xb6aa: 0x6c19e620, 0xb6ab: 0x6c19de20, + 0xb6ac: 0x6c19e420, + 0xb6b4: 0x6c133420, + 0xb6b8: 0x6c109220, 0xb6ba: 0x6c11d020, + // Block 0x2db, offset 0xb6c0 + 0xb6c0: 0x6c19ea20, + 0xb6c6: 0x6c19e820, 0xb6c7: 0x6c027e20, + 0xb6ca: 0x6c19ec20, + 0xb6cf: 0x6c19f220, + 0xb6d4: 0x6c19f020, + 0xb6e0: 0x6c19ee20, 0xb6e2: 0x6c111620, + 0xb6e5: 0x6c19f420, + 0xb6ee: 0x6c19f620, + 0xb6f4: 0x6c19fa20, 0xb6f6: 0x6c19f820, + 0xb6fc: 0x6c19fe20, + // Block 0x2dc, offset 0xb700 + 0xb700: 0x6c1a0420, 0xb701: 0x6c1a0020, 0xb702: 0x6c19fc20, 0xb703: 0x6c1a0220, + 0xb708: 0x6c1a0620, + 0xb70e: 0x6c1a0820, + 0xb711: 0x6c1a0a20, 0xb713: 0x6c1a0c20, + 0xb717: 0x6c1a0e20, + 0xb718: 0x6c183020, 0xb71a: 0x6c098820, 0xb71b: 0x6c086e20, + 0xb71e: 0x6c021e20, + 0xb720: 0x6c00b020, 0xb723: 0x6c0e3c20, + 0xb72e: 0x6c1a1020, + 0xb730: 0x6c076020, 0xb732: 0x6c005e20, 0xb733: 0x6c0b8020, + 0xb739: 0x6c1a1220, 0xb73a: 0x6c062e20, + 0xb73d: 0x6c073e20, 0xb73f: 0x6c1a1620, + // Block 0x2dd, offset 0xb740 + 0xb740: 0x6c1a1420, 0xb743: 0x6c139820, + 0xb744: 0x6c1a1820, + 0xb748: 0x6c1a1c20, 0xb749: 0x6c1a1a20, 0xb74b: 0x6c1a1e20, + 0xb74d: 0x6c1a2020, 0xb74f: 0x6c05d220, + 0xb752: 0x6c013c20, 0xb753: 0x6c1a2220, + 0xb756: 0x6c1a2620, + 0xb758: 0x6c1a2420, + 0xb75c: 0x6c1a2a20, 0xb75f: 0x6c0fe020, + 0xb766: 0x6c1a2c20, 0xb767: 0x6c002a20, + 0xb768: 0x6c07d620, + 0xb76d: 0x6c055e20, + 0xb770: 0x6c0e5220, + 0xb777: 0x6c1a2e20, + 0xb778: 0x6c1a3020, 0xb77b: 0x6c1a3420, + // Block 0x2de, offset 0xb780 + 0xb780: 0x6c1a3620, 0xb782: 0x6c07e020, + 0xb787: 0x6c04ca20, + 0xb78a: 0x6c140220, + 0xb78e: 0x6c1a3220, 0xb78f: 0x6c1a3820, + 0xb790: 0x6c079a20, 0xb791: 0x6c06a220, + 0xb7a1: 0x6c1a4020, + 0xb7a4: 0x6c076220, 0xb7a6: 0x6c0e1a20, + 0xb7a9: 0x6c1a3a20, 0xb7aa: 0x6c0f2420, + 0xb7bf: 0x6c1a4220, + // Block 0x2df, offset 0xb7c0 + 0xb7c2: 0x6c0b8820, + 0xb7c8: 0x6c1a3e20, 0xb7c9: 0x6c1a4420, 0xb7cb: 0x6c056220, + 0xb7d3: 0x6c1a4620, + 0xb7e0: 0x6c1a4820, 0xb7e2: 0x6c06a420, 0xb7e3: 0x6c027420, + 0xb7e4: 0x6c1a4c20, + 0xb7ea: 0x6c1a4e20, + 0xb7f0: 0x6c1a5020, 0xb7f3: 0x6c1a4a20, + // Block 0x2e0, offset 0xb800 + 0xb800: 0x6c1a3c20, 0xb803: 0x6c1a5220, + 0xb806: 0x6c1a5420, + 0xb80b: 0x6c145c20, + 0xb80e: 0x6c0ade20, + 0xb812: 0x6c1a5820, 0xb813: 0x6c1a5a20, + 0xb814: 0x6c1a5620, 0xb816: 0x6c1a5e20, + 0xb81c: 0x6c111420, 0xb81f: 0x6c009020, + 0xb820: 0x6c12c820, 0xb823: 0x6c1a6020, + 0xb834: 0x6c0b0220, 0xb837: 0x6c090220, + 0xb839: 0x6c115e20, 0xb83a: 0x6c039020, + 0xb83c: 0x6c07ee20, + // Block 0x2e1, offset 0xb840 + 0xb840: 0x6c144620, 0xb842: 0x6c104c20, + 0xb845: 0x6c05d420, 0xb846: 0x6c0d9620, + 0xb84a: 0x6c1a5c20, 0xb84b: 0x6c1a6220, + 0xb855: 0x6c0d8020, + 0xb859: 0x6c1a6420, + 0xb85d: 0x6c1a6620, + 0xb861: 0x6c1a6a20, + 0xb864: 0x6c0f4220, + 0xb86a: 0x6c030c20, + 0xb86f: 0x6c319c20, + 0xb870: 0x6c013e20, 0xb871: 0x6c13be20, + 0xb874: 0x6c0ae020, 0xb875: 0x6c0fbc20, + 0xb87a: 0x6c07e420, + 0xb87d: 0x6c1a7620, + // Block 0x2e2, offset 0xb880 + 0xb880: 0x6c135220, 0xb881: 0x6c168220, + 0xb88a: 0x6c022020, 0xb88b: 0x6c1a6e20, + 0xb891: 0x6c0cb020, 0xb892: 0x6c1a7420, + 0xb894: 0x6c0ff220, 0xb897: 0x6c0fbe20, + 0xb898: 0x6c0ff420, 0xb899: 0x6c11d220, 0xb89a: 0x6c0f0a20, + 0xb89e: 0x6c07aa20, + 0xb8a2: 0x6c1a6c20, + 0xb8a9: 0x6c016820, 0xb8ab: 0x6c0f9820, + 0xb8b0: 0x6c1a7020, 0xb8b2: 0x6c1a6820, + 0xb8b5: 0x6c0b6420, + 0xb8b9: 0x6c1a7820, + 0xb8be: 0x6c09e820, + // Block 0x2e3, offset 0xb8c0 + 0xb8c3: 0x6c048220, + 0xb8c5: 0x6c1a7a20, + 0xb8d3: 0x6c13a820, + 0xb8d7: 0x6c0d3620, + 0xb8dc: 0x6c0efc20, 0xb8df: 0x6c1a7e20, + 0xb8e8: 0x6c143220, 0xb8eb: 0x6c1a8020, + 0xb8ee: 0x6c1a8a20, + 0xb8f3: 0x6c133620, + 0xb8f8: 0x6c1a8820, 0xb8f9: 0x6c1a7c20, 0xb8fa: 0x6c1a8220, 0xb8fb: 0x6c1a8620, + 0xb8fe: 0x6c076420, + // Block 0x2e4, offset 0xb900 + 0xb901: 0x6c136a20, + 0xb905: 0x6c1a8c20, 0xb907: 0x6c0e3e20, + 0xb90a: 0x6c022220, + 0xb90c: 0x6c0ae220, + 0xb911: 0x6c1a9020, 0xb913: 0x6c1a8e20, + 0xb915: 0x6c072c20, 0xb917: 0x6c1a9220, + 0xb918: 0x6c1a9620, 0xb919: 0x6c1a9420, + 0xb91c: 0x6c1a9a20, 0xb91e: 0x6c1a8420, 0xb91f: 0x6c1a9e20, + 0xb924: 0x6c1a9c20, 0xb925: 0x6c1a9820, + 0xb92b: 0x6c087020, + 0xb92c: 0x6c0b6620, 0xb92e: 0x6c0ce420, 0xb92f: 0x6c1aa020, + 0xb930: 0x6c0bf820, 0xb931: 0x6c009a20, 0xb932: 0x6c116c20, + 0xb937: 0x6c0f2620, + 0xb939: 0x6c1aa420, 0xb93a: 0x6c1aa220, 0xb93b: 0x6c1aa620, + 0xb93c: 0x6c1aa820, 0xb93d: 0x6c1aaa20, + // Block 0x2e5, offset 0xb940 + 0xb942: 0x6c1aac20, + 0xb949: 0x6c137a20, 0xb94a: 0x6c1aae20, + 0xb94f: 0x6c01c420, + 0xb950: 0x6c1ab020, + 0xb955: 0x6c158420, 0xb956: 0x6c025420, + 0xb958: 0x6c18f420, 0xb959: 0x6c09dc20, 0xb95a: 0x6c0d7620, 0xb95b: 0x6c1ab220, + 0xb95c: 0x6c152620, + 0xb962: 0x6c14b820, + 0xb965: 0x6c1ab620, 0xb967: 0x6c0dc620, + 0xb969: 0x6c0f9a20, 0xb96a: 0x6c0d7820, 0xb96b: 0x6c12ca20, + 0xb96c: 0x6c1ab820, 0xb96d: 0x6c1aba20, 0xb96e: 0x6c017220, + 0xb971: 0x6c090420, 0xb972: 0x6c1abc20, + 0xb977: 0x6c006020, + 0xb978: 0x6c1abe20, + 0xb97e: 0x6c1ac020, + // Block 0x2e6, offset 0xb980 + 0xb984: 0x6c014020, 0xb987: 0x6c039220, + 0xb988: 0x6c10a820, 0xb989: 0x6c13c020, + 0xb98e: 0x6c1ac820, 0xb98f: 0x6c0ce620, + 0xb990: 0x6c1ac620, 0xb991: 0x6c056420, + 0xb994: 0x6c144a20, 0xb995: 0x6c1ac420, 0xb997: 0x6c0ff620, + 0xb998: 0x6c1acc20, 0xb99a: 0x6c1aca20, + 0xb9a0: 0x6c1ad020, 0xb9a2: 0x6c1ace20, + 0xb9a5: 0x6c017420, 0xb9a7: 0x6c1ad220, + 0xb9a8: 0x6c0a5a20, 0xb9a9: 0x6c1ad620, 0xb9aa: 0x6c0dfe20, + 0xb9ac: 0x6c1ad420, 0xb9ae: 0x6c133e20, + 0xb9b3: 0x6c0a3a20, + 0xb9b4: 0x6c0fe220, + 0xb9b8: 0x6c1ad820, + 0xb9bd: 0x6c06a620, + // Block 0x2e7, offset 0xb9c0 + 0xb9c1: 0x6c1ada20, 0xb9c2: 0x6c10e620, 0xb9c3: 0x6c121c20, + 0xb9c4: 0x6c14f220, + 0xb9ca: 0x6c10ee20, + 0xb9cd: 0x6c1aec20, + 0xb9d3: 0x6c03dc20, + 0xb9d6: 0x6c159620, + 0xb9d9: 0x6c14ae20, 0xb9db: 0x6c1baa20, + 0xb9dd: 0x6c1adc20, + 0xb9e3: 0x6c1ae220, + 0xb9e5: 0x6c0d8220, + 0xb9e8: 0x6c140420, + 0xb9ec: 0x6c0fc020, + 0xb9f2: 0x6c1ae420, + 0xb9f9: 0x6c145e20, 0xb9fb: 0x6c07ac20, + 0xb9fe: 0x6c0a5c20, + // Block 0x2e8, offset 0xba00 + 0xba06: 0x6c1ae620, + 0xba09: 0x6c087420, 0xba0b: 0x6c087220, + 0xba10: 0x6c003220, 0xba11: 0x6c063020, 0xba13: 0x6c0bd620, + 0xba14: 0x6c006220, + 0xba19: 0x6c1aee20, 0xba1a: 0x6c1af020, + 0xba1c: 0x6c1aea20, + 0xba25: 0x6c00ec20, 0xba26: 0x6c030e20, + 0xba28: 0x6c1ae820, 0xba2a: 0x6c14da20, 0xba2b: 0x6c127e20, + 0xba36: 0x6c001020, + 0xba3b: 0x6c00b220, + 0xba3f: 0x6c087620, + // Block 0x2e9, offset 0xba40 + 0xba41: 0x6c006420, 0xba43: 0x6c000620, + 0xba49: 0x6c1afa20, + 0xba51: 0x6c1af620, + 0xba58: 0x6c14c820, 0xba5a: 0x6c1afc20, + 0xba5c: 0x6c1af820, 0xba5f: 0x6c1af420, + 0xba60: 0x6c0b2620, + 0xba65: 0x6c1af220, + 0xba69: 0x6c138c20, + 0xba6f: 0x6c066820, + 0xba75: 0x6c1b0420, 0xba76: 0x6c1b0620, + 0xba7c: 0x6c0a5e20, + // Block 0x2ea, offset 0xba80 + 0xba80: 0x6c1afe20, 0xba81: 0x6c16dc20, + 0xba86: 0x6c113c20, + 0xba89: 0x6c1b0220, + 0xba9a: 0x6c076620, + 0xbaa2: 0x6c1b0820, + 0xbaa6: 0x6c12cc20, + 0xbaaa: 0x6c1b0a20, + 0xbaac: 0x6c1b0020, + 0xbabf: 0x6c14c620, + // Block 0x2eb, offset 0xbac0 + 0xbad2: 0x6c116020, + 0xbada: 0x6c1b0c20, 0xbadb: 0x6c128020, + 0xbafc: 0x6c1b0e20, 0xbafd: 0x6c1b1620, 0xbafe: 0x6c1b1020, + // Block 0x2ec, offset 0xbb00 + 0xbb01: 0x6c01c620, 0xbb02: 0x6c1b1420, + 0xbb09: 0x6c090620, 0xbb0b: 0x6c1b1220, + 0xbb0c: 0x6c05d620, + 0xbb10: 0x6c1b2e20, + 0xbb16: 0x6c1b2020, 0xbb17: 0x6c1b1a20, + 0xbb21: 0x6c0e7c20, 0xbb23: 0x6c1b1820, + 0xbb26: 0x6c1b1c20, + 0xbb29: 0x6c1b1e20, + 0xbb3a: 0x6c1b2220, 0xbb3b: 0x6c1b2420, + // Block 0x2ed, offset 0xbb40 + 0xbb49: 0x6c039420, 0xbb4b: 0x6c1b2820, + 0xbb4c: 0x6c1b2620, + 0xbb56: 0x6c1b2a20, + 0xbb62: 0x6c0ae420, + 0xbb6a: 0x6c1b3020, + 0xbb6c: 0x6c0f2820, + 0xbb70: 0x6c010620, 0xbb72: 0x6c1b2c20, + 0xbb76: 0x6c1b3220, + 0xbb7e: 0x6c1b3420, + // Block 0x2ee, offset 0xbb80 + 0xbb80: 0x6c1b3a20, 0xbb83: 0x6c1b3620, + 0xbb85: 0x6c1b3820, + 0xbb90: 0x6c087820, 0xbb91: 0x6c1b3c20, + 0xbb94: 0x6c06a820, 0xbb95: 0x6c1b3e20, 0xbb97: 0x6c08c820, + 0xbb98: 0x6c0d6820, 0xbb9a: 0x6c1b4020, 0xbb9b: 0x6c1b4220, + 0xbb9c: 0x6c088820, 0xbb9d: 0x6c06aa20, 0xbb9f: 0x6c14f420, + 0xbba3: 0x6c03bc20, + 0xbba4: 0x6c063220, 0xbba5: 0x6c1b4420, 0xbba6: 0x6c02a420, + 0xbba9: 0x6c1b4620, 0xbbab: 0x6c0d6a20, + 0xbbb0: 0x6c1b4820, 0xbbb1: 0x6c1b9820, 0xbbb3: 0x6c1b4a20, + 0xbbb5: 0x6c1b4c20, + 0xbbb8: 0x6c1b4e20, 0xbbba: 0x6c1b5220, + // Block 0x2ef, offset 0xbbc0 + 0xbbc0: 0x6c1b5420, 0xbbc3: 0x6c1b5620, + 0xbbc5: 0x6c0dd820, 0xbbc7: 0x6c00ca20, + 0xbbc8: 0x6c096220, 0xbbc9: 0x6c004420, 0xbbcb: 0x6c0cea20, + 0xbbcc: 0x6c031020, 0xbbcd: 0x6c08fa20, 0xbbcf: 0x6c06ac20, + 0xbbd5: 0x6c0ff820, 0xbbd7: 0x6c098e20, + 0xbbd8: 0x6c031220, 0xbbd9: 0x6c0e8420, 0xbbda: 0x6c0f4420, 0xbbdb: 0x6c003020, + 0xbbdc: 0x6c03de20, 0xbbdd: 0x6c13c220, 0xbbdf: 0x6c091420, + 0xbbe2: 0x6c041020, 0xbbe3: 0x6c0c5620, + 0xbbe4: 0x6c090820, 0xbbe5: 0x6c155c20, 0xbbe6: 0x6c1b5820, + 0xbbee: 0x6c042420, + 0xbbf0: 0x6c07ae20, 0xbbf3: 0x6c025820, + 0xbbf4: 0x6c014220, 0xbbf5: 0x6c0a6020, 0xbbf6: 0x6c01c820, + 0xbbf8: 0x6c1b5a20, 0xbbf9: 0x6c159820, + 0xbbff: 0x6c09de20, + // Block 0x2f0, offset 0xbc00 + 0xbc02: 0x6c095820, 0xbc03: 0x6c1b5c20, + 0xbc04: 0x6c039620, 0xbc05: 0x6c108c20, 0xbc06: 0x6c14a220, 0xbc07: 0x6c1b5e20, + 0xbc09: 0x6c1b6020, + 0xbc0c: 0x6c12ce20, + 0xbc10: 0x6c1b6420, 0xbc12: 0x6c030020, 0xbc13: 0x6c051620, + 0xbc14: 0x6c1b6220, + 0xbc1b: 0x6c031420, + 0xbc1d: 0x6c0b2820, 0xbc1e: 0x6c1b6c20, 0xbc1f: 0x6c081620, + 0xbc21: 0x6c01ca20, 0xbc22: 0x6c1b6a20, + 0xbc24: 0x6c1b6620, 0xbc25: 0x6c1b6e20, 0xbc26: 0x6c1b6820, 0xbc27: 0x6c10fa20, + 0xbc28: 0x6c205420, 0xbc29: 0x6c0b2a20, 0xbc2b: 0x6c1b7020, + 0xbc2e: 0x6c164820, + 0xbc30: 0x6c1b7220, 0xbc33: 0x6c1b7620, + 0xbc35: 0x6c0eb020, 0xbc36: 0x6c1b7420, + 0xbc38: 0x6c0bc620, 0xbc3a: 0x6c08ca20, + 0xbc3e: 0x6c0d9820, 0xbc3f: 0x6c097e20, + // Block 0x2f1, offset 0xbc40 + 0xbc41: 0x6c130620, 0xbc42: 0x6c0c5820, + 0xbc44: 0x6c092a20, 0xbc45: 0x6c1b7820, 0xbc46: 0x6c0a6220, 0xbc47: 0x6c1b7a20, + 0xbc48: 0x6c1b7c20, 0xbc49: 0x6c006620, 0xbc4a: 0x6c0d6c20, 0xbc4b: 0x6c0b6820, + 0xbc4d: 0x6c1b7e20, 0xbc4e: 0x6c104e20, 0xbc4f: 0x6c0a6420, + 0xbc51: 0x6c0a6620, 0xbc53: 0x6c1b8020, + 0xbc56: 0x6c0c5a20, + 0xbc5a: 0x6c0a6820, + 0xbc60: 0x6c1b8220, 0xbc62: 0x6c1b8420, + 0xbc64: 0x6c151020, + 0xbc68: 0x6c1b8620, + 0xbc6d: 0x6c04b420, + 0xbc71: 0x6c099020, + 0xbc78: 0x6c1b8820, 0xbc79: 0x6c1b8a20, 0xbc7a: 0x6c094820, 0xbc7b: 0x6c0b1c20, + 0xbc7c: 0x6c10d020, 0xbc7d: 0x6c0b6c20, 0xbc7e: 0x6c125020, 0xbc7f: 0x6c10e820, + // Block 0x2f2, offset 0xbc80 + 0xbc80: 0x6c04ba20, 0xbc81: 0x6c1b8c20, + 0xbc85: 0x6c044a20, 0xbc86: 0x6c1b8e20, + 0xbc88: 0x6c052420, 0xbc8a: 0x6c108620, 0xbc8b: 0x6c019820, + 0xbc8d: 0x6c087a20, 0xbc8e: 0x6c1b9020, 0xbc8f: 0x6c1b9620, + 0xbc90: 0x6c1b9420, 0xbc91: 0x6c052220, 0xbc93: 0x6c1b9220, + 0xbc95: 0x6c0f9c20, + 0xbc9e: 0x6c0d5820, + 0xbca0: 0x6c0fc220, 0xbca1: 0x6c092020, + 0xbca4: 0x6c0cec20, 0xbca5: 0x6c160020, + 0xbcac: 0x6c1b9a20, 0xbcae: 0x6c1b9c20, 0xbcaf: 0x6c109420, + 0xbcb1: 0x6c083a20, + 0xbcb6: 0x6c1ba020, + 0xbcb9: 0x6c1ba220, + // Block 0x2f3, offset 0xbcc0 + 0xbccc: 0x6c1ba420, + 0xbcd0: 0x6c039820, 0xbcd1: 0x6c1ba620, + 0xbcd4: 0x6c1ba820, + 0xbce1: 0x6c019020, + 0xbce8: 0x6c0cb220, 0xbce9: 0x6c037820, 0xbceb: 0x6c1bac20, + 0xbcec: 0x6c14a020, + 0xbcf1: 0x6c0d9c20, 0xbcf3: 0x6c02a620, + 0xbcf6: 0x6c1bb020, 0xbcf7: 0x6c1bb420, + 0xbcf8: 0x6c036e20, 0xbcfb: 0x6c1bae20, + 0xbcfc: 0x6c1bb220, 0xbcfe: 0x6c1bb820, + // Block 0x2f4, offset 0xbd00 + 0xbd05: 0x6c1bb620, 0xbd07: 0x6c1bba20, + 0xbd19: 0x6c1bbc20, + 0xbd20: 0x6c106220, 0xbd21: 0x6c048420, + 0xbd28: 0x6c020220, 0xbd29: 0x6c1bbe20, 0xbd2a: 0x6c1bc820, + 0xbd2d: 0x6c1bc420, 0xbd2f: 0x6c13c620, + 0xbd30: 0x6c13c420, + 0xbd36: 0x6c0ffa20, + 0xbd3a: 0x6c1bc220, 0xbd3b: 0x6c09f420, + 0xbd3d: 0x6c1bc020, + // Block 0x2f5, offset 0xbd40 + 0xbd47: 0x6c0ba820, + 0xbd4b: 0x6c1bca20, + 0xbd4e: 0x6c07ec20, + 0xbd51: 0x6c1bd620, + 0xbd54: 0x6c1bd820, 0xbd55: 0x6c1bcc20, 0xbd56: 0x6c025a20, 0xbd57: 0x6c1bce20, + 0xbd58: 0x6c1be020, 0xbd59: 0x6c1bde20, 0xbd5a: 0x6c1bdc20, 0xbd5b: 0x6c1bd420, + 0xbd5f: 0x6c1bd220, + 0xbd62: 0x6c1bda20, + 0xbd69: 0x6c13c820, + // Block 0x2f6, offset 0xbd80 + 0xbd8b: 0x6c1be820, + 0xbd8c: 0x6c1be220, 0xbd8e: 0x6c1be620, + 0xbd90: 0x6c15f020, 0xbd92: 0x6c1be420, + 0xbd9c: 0x6c1bd020, + 0xbda9: 0x6c0baa20, + 0xbdac: 0x6c1bea20, 0xbdaf: 0x6c078620, + 0xbdb3: 0x6c1bec20, + 0xbdb6: 0x6c1bee20, + // Block 0x2f7, offset 0xbdc0 + 0xbdc2: 0x6c1bf420, + 0xbdc4: 0x6c1bf220, 0xbdc7: 0x6c1bf020, + 0xbdcb: 0x6c0ffc20, + 0xbdcc: 0x6c1bc620, + 0xbdd0: 0x6c1c0020, + 0xbddd: 0x6c1bf820, + 0xbde2: 0x6c1bf620, + 0xbdec: 0x6c1bfa20, 0xbdee: 0x6c1bfc20, + 0xbdf7: 0x6c1c0220, + 0xbdfa: 0x6c169420, + 0xbdfc: 0x6c1c0420, 0xbdfd: 0x6c1bfe20, + // Block 0x2f8, offset 0xbe00 + 0xbe09: 0x6c1c0620, + 0xbe0c: 0x6c037020, 0xbe0d: 0x6c1c0820, + 0xbe12: 0x6c1c0c20, 0xbe13: 0x6c1c0a20, + 0xbe16: 0x6c1c0e20, + 0xbe1b: 0x6c1c1020, + 0xbe1d: 0x6c0c5c20, 0xbe1e: 0x6c099220, + 0xbe21: 0x6c0a1420, 0xbe23: 0x6c0d0220, + 0xbe25: 0x6c06ae20, 0xbe26: 0x6c078820, 0xbe27: 0x6c06b020, + 0xbe28: 0x6c044c20, 0xbe2b: 0x6c1c1220, + 0xbe2e: 0x6c078a20, + 0xbe31: 0x6c063420, 0xbe32: 0x6c1c1420, 0xbe33: 0x6c149c20, + 0xbe34: 0x6c112a20, 0xbe35: 0x6c1c1620, 0xbe37: 0x6c06b220, + 0xbe3b: 0x6c030820, + 0xbe3d: 0x6c0e0220, 0xbe3e: 0x6c04cc20, + // Block 0x2f9, offset 0xbe40 + 0xbe42: 0x6c087c20, 0xbe43: 0x6c12d220, + 0xbe46: 0x6c11e220, + 0xbe4b: 0x6c1c1820, + 0xbe4c: 0x6c039a20, + 0xbe51: 0x6c1c1e20, + 0xbe56: 0x6c0eb220, + 0xbe59: 0x6c1c1c20, 0xbe5a: 0x6c1c1a20, 0xbe5b: 0x6c1c2020, + 0xbe5d: 0x6c0f4620, + 0xbe65: 0x6c0b8a20, + 0xbe6b: 0x6c087e20, + 0xbe6d: 0x6c0c1420, 0xbe6f: 0x6c0d9e20, + 0xbe70: 0x6c03b020, 0xbe73: 0x6c0eb420, + 0xbe76: 0x6c1c2220, 0xbe77: 0x6c1c2420, + 0xbe78: 0x6c0ae620, + 0xbe7d: 0x6c140620, + // Block 0x2fa, offset 0xbe80 + 0xbe80: 0x6c1c2a20, 0xbe83: 0x6c1c2820, + 0xbe84: 0x6c1c2620, 0xbe85: 0x6c131620, 0xbe87: 0x6c1c3820, + 0xbe8c: 0x6c144820, 0xbe8e: 0x6c1c2c20, + 0xbe94: 0x6c1c3020, 0xbe95: 0x6c146a20, 0xbe97: 0x6c1c2e20, + 0xbe9f: 0x6c1c3220, + 0xbea1: 0x6c11b020, 0xbea2: 0x6c1c3420, 0xbea3: 0x6c135420, + 0xbea4: 0x6c1c3620, + 0xbeb2: 0x6c031620, 0xbeb3: 0x6c135620, + 0xbeb4: 0x6c110220, 0xbeb5: 0x6c1c3a20, 0xbeb6: 0x6c1c3c20, + 0xbeb8: 0x6c06b420, 0xbeb9: 0x6c031820, 0xbeba: 0x6c1c3e20, 0xbebb: 0x6c061020, + 0xbebc: 0x6c159420, 0xbebd: 0x6c155e20, 0xbebe: 0x6c039c20, 0xbebf: 0x6c1c4220, + // Block 0x2fb, offset 0xbec0 + 0xbec1: 0x6c0eb620, 0xbec3: 0x6c06b620, + 0xbec4: 0x6c0a6a20, 0xbec7: 0x6c121e20, + 0xbeca: 0x6c0a6c20, + 0xbecf: 0x6c0a3c20, + 0xbed5: 0x6c0f4820, 0xbed6: 0x6c13ca20, 0xbed7: 0x6c0f9e20, + 0xbeda: 0x6c06b820, + 0xbedc: 0x6c12d420, + 0xbee0: 0x6c1c4420, + 0xbee6: 0x6c0fde20, 0xbee7: 0x6c079c20, + 0xbeeb: 0x6c063620, + 0xbeed: 0x6c0f4a20, + 0xbef5: 0x6c004620, 0xbef6: 0x6c0a2820, 0xbef7: 0x6c06ba20, + 0xbef8: 0x6c159a20, + // Block 0x2fc, offset 0xbf00 + 0xbf01: 0x6c1c4620, 0xbf02: 0x6c1c4820, 0xbf03: 0x6c114620, + 0xbf08: 0x6c1c4a20, 0xbf09: 0x6c16b620, 0xbf0a: 0x6c16de20, + 0xbf0f: 0x6c1c4e20, + 0xbf10: 0x6c1c4c20, 0xbf13: 0x6c028220, + 0xbf16: 0x6c1c5020, + 0xbf1a: 0x6c1c5620, 0xbf1b: 0x6c1c5820, + 0xbf1d: 0x6c1c5420, 0xbf1f: 0x6c129c20, + 0xbf20: 0x6c0a6e20, 0xbf21: 0x6c1c5c20, 0xbf22: 0x6c1c5a20, 0xbf23: 0x6c1c5220, + 0xbf28: 0x6c1c5e20, 0xbf29: 0x6c1c6020, + 0xbf2c: 0x6c1c6220, + 0xbf30: 0x6c1c6820, 0xbf31: 0x6c1c6420, 0xbf33: 0x6c1c6620, + 0xbf34: 0x6c1c6a20, 0xbf36: 0x6c014420, 0xbf37: 0x6c0f4c20, + 0xbf38: 0x6c1c6c20, 0xbf3a: 0x6c05d820, 0xbf3b: 0x6c022420, + 0xbf3c: 0x6c111020, 0xbf3e: 0x6c1c6e20, 0xbf3f: 0x6c10de20, + // Block 0x2fd, offset 0xbf40 + 0xbf41: 0x6c138e20, 0xbf43: 0x6c1c7020, + 0xbf44: 0x6c16e020, + 0xbf49: 0x6c1c7220, 0xbf4a: 0x6c135820, 0xbf4b: 0x6c1c7820, + 0xbf4c: 0x6c172c20, 0xbf4d: 0x6c174c20, 0xbf4f: 0x6c08f020, + 0xbf50: 0x6c10d220, 0xbf51: 0x6c1c7a20, 0xbf53: 0x6c042620, + 0xbf54: 0x6c0eb820, 0xbf55: 0x6c00b420, 0xbf56: 0x6c1c7c20, 0xbf57: 0x6c132420, + 0xbf58: 0x6c06bc20, 0xbf5b: 0x6c0e5420, + 0xbf5f: 0x6c0f4e20, + 0xbf65: 0x6c152e20, 0xbf66: 0x6c061220, 0xbf67: 0x6c063820, + 0xbf69: 0x6c1c7e20, + 0xbf6d: 0x6c1c8020, 0xbf6f: 0x6c1c8c20, + 0xbf71: 0x6c095a20, + 0xbf75: 0x6c0eba20, 0xbf77: 0x6c048620, + 0xbf78: 0x6c1c8220, + 0xbf7c: 0x6c127220, 0xbf7e: 0x6c0e4020, + // Block 0x2fe, offset 0xbf80 + 0xbf81: 0x6c1c8420, + 0xbf88: 0x6c1c8620, 0xbf8a: 0x6c048820, + 0xbf8c: 0x6c1c8820, 0xbf8e: 0x6c1c8a20, + 0xbf91: 0x6c1c8e20, 0xbf93: 0x6c101820, + 0xbf96: 0x6c1c9020, 0xbf97: 0x6c1c9220, + 0xbf99: 0x6c1c9420, + 0xbf9c: 0x6c1c7620, 0xbf9d: 0x6c1c7420, + 0xbfa1: 0x6c1c9620, 0xbfa2: 0x6c056620, + 0xbfa6: 0x6c126a20, + 0xbfa9: 0x6c07b020, 0xbfaa: 0x6c128a20, 0xbfab: 0x6c0ebc20, + 0xbfac: 0x6c12b220, 0xbfad: 0x6c1c9820, + 0xbfb0: 0x6c0a7020, 0xbfb1: 0x6c010820, 0xbfb3: 0x6c1c9a20, + 0xbfb7: 0x6c1c9c20, + 0xbfb9: 0x6c153420, + 0xbfbc: 0x6c122020, 0xbfbf: 0x6c1ca220, + // Block 0x2ff, offset 0xbfc0 + 0xbfc0: 0x6c017620, 0xbfc1: 0x6c0bd820, 0xbfc2: 0x6c1ca020, 0xbfc3: 0x6c1c9e20, + 0xbfc4: 0x6c056820, 0xbfc5: 0x6c0da020, 0xbfc7: 0x6c1caa20, + 0xbfc8: 0x6c1ca620, 0xbfca: 0x6c1ca420, 0xbfcb: 0x6c161620, + 0xbfcc: 0x6c066a20, + 0xbfd0: 0x6c0a3e20, 0xbfd1: 0x6c1ca820, 0xbfd2: 0x6c0fc420, 0xbfd3: 0x6c09c820, + 0xbfd7: 0x6c106820, + 0xbfd8: 0x6c1cb020, 0xbfd9: 0x6c1cae20, + 0xbfde: 0x6c1cac20, + 0xbfe0: 0x6c1cb220, 0xbfe1: 0x6c066c20, + 0xbfe8: 0x6c1cb420, 0xbfe9: 0x6c131420, 0xbfea: 0x6c0a0220, + 0xbfed: 0x6c1cb620, 0xbfee: 0x6c125220, + 0xbff3: 0x6c106a20, + 0xbff4: 0x6c0ebe20, + 0xbff9: 0x6c0f8c20, + 0xbffc: 0x6c1cb820, 0xbffd: 0x6c03c220, + // Block 0x300, offset 0xc000 + 0xc003: 0x6c0b2c20, + 0xc005: 0x6c127420, + 0xc00c: 0x6c039e20, 0xc00d: 0x6c10f020, + 0xc016: 0x6c1cba20, 0xc017: 0x6c088020, + 0xc018: 0x6c140820, 0xc019: 0x6c140a20, + 0xc01c: 0x6c017820, 0xc01d: 0x6c1cc420, + 0xc020: 0x6c0e8620, + 0xc024: 0x6c1cbe20, + 0xc02b: 0x6c022620, + 0xc030: 0x6c1d2420, 0xc031: 0x6c1cc220, + 0xc035: 0x6c110420, + 0xc038: 0x6c1cc020, 0xc03b: 0x6c1cbc20, + 0xc03d: 0x6c075020, 0xc03f: 0x6c1cc820, + // Block 0x301, offset 0xc040 + 0xc04e: 0x6c1cd420, 0xc04f: 0x6c1ce020, + 0xc050: 0x6c1cd020, 0xc052: 0x6c0fe420, + 0xc055: 0x6c1cda20, 0xc056: 0x6c12d620, + 0xc059: 0x6c1cce20, 0xc05b: 0x6c1cd820, + 0xc05c: 0x6c169620, 0xc05d: 0x6c088220, + 0xc060: 0x6c0da220, 0xc061: 0x6c1cca20, + 0xc065: 0x6c042820, 0xc066: 0x6c1cde20, 0xc067: 0x6c0bda20, + 0xc068: 0x6c014620, 0xc069: 0x6c1cd220, 0xc06a: 0x6c022820, 0xc06b: 0x6c1cdc20, + 0xc06f: 0x6c048a20, + 0xc071: 0x6c1cd620, + 0xc07a: 0x6c1ce220, + // Block 0x302, offset 0xc080 + 0xc081: 0x6c1ce620, 0xc082: 0x6c1cfa20, 0xc083: 0x6c1cf620, + 0xc086: 0x6c1cf020, + 0xc08a: 0x6c1cee20, 0xc08b: 0x6c16b820, + 0xc08d: 0x6c1cf220, + 0xc090: 0x6c048c20, 0xc092: 0x6c06be20, + 0xc095: 0x6c0a4020, + 0xc099: 0x6c1d0020, 0xc09a: 0x6c1ce420, + 0xc09f: 0x6c1cec20, + 0xc0a0: 0x6c1ccc20, 0xc0a2: 0x6c022c20, 0xc0a3: 0x6c1cf420, + 0xc0a4: 0x6c1cf820, 0xc0a5: 0x6c0e5620, + 0xc0a8: 0x6c076820, 0xc0a9: 0x6c01a820, 0xc0aa: 0x6c1ce820, 0xc0ab: 0x6c1cfe20, + 0xc0ac: 0x6c1cfc20, 0xc0ad: 0x6c048e20, 0xc0af: 0x6c0d4a20, + 0xc0b0: 0x6c02c020, + 0xc0b5: 0x6c056a20, 0xc0b7: 0x6c1cea20, + // Block 0x303, offset 0xc0c0 + 0xc0c1: 0x6c1d0220, 0xc0c3: 0x6c1d0820, + 0xc0c4: 0x6c1d0c20, + 0xc0c9: 0x6c090a20, 0xc0cb: 0x6c1d1820, + 0xc0cc: 0x6c0f5020, 0xc0cd: 0x6c1d0420, + 0xc0d2: 0x6c1d1420, + 0xc0d4: 0x6c022a20, 0xc0d6: 0x6c1d1020, 0xc0d7: 0x6c1d1220, + 0xc0da: 0x6c1d0a20, 0xc0db: 0x6c1d0e20, + 0xc0df: 0x6c066e20, + 0xc0e0: 0x6c156020, 0xc0e3: 0x6c031a20, + 0xc0e6: 0x6c012e20, 0xc0e7: 0x6c1d1620, + 0xc0e9: 0x6c111820, 0xc0ea: 0x6c001a20, + 0xc0f2: 0x6c122220, 0xc0f3: 0x6c1cc620, + 0xc0f4: 0x6c1d2220, 0xc0f5: 0x6c1d2a20, 0xc0f6: 0x6c151a20, + 0xc0f8: 0x6c1d1c20, + 0xc0fc: 0x6c0ffe20, 0xc0fd: 0x6c1d2620, + // Block 0x304, offset 0xc100 + 0xc105: 0x6c0ae820, 0xc106: 0x6c1d2820, 0xc107: 0x6c109620, + 0xc111: 0x6c171220, 0xc113: 0x6c1d2020, + 0xc118: 0x6c1d2c20, 0xc11a: 0x6c075220, + 0xc11c: 0x6c0c1620, 0xc11f: 0x6c006820, + 0xc120: 0x6c1d1e20, 0xc121: 0x6c1d1a20, 0xc123: 0x6c0cf020, + 0xc127: 0x6c1d0620, + 0xc128: 0x6c083c20, + 0xc130: 0x6c0d8420, 0xc131: 0x6c1d4420, 0xc133: 0x6c0cf220, + 0xc134: 0x6c1d3a20, 0xc136: 0x6c1d3420, 0xc137: 0x6c1d3620, + 0xc139: 0x6c095c20, 0xc13a: 0x6c1d3c20, 0xc13b: 0x6c1d4220, + // Block 0x305, offset 0xc140 + 0xc140: 0x6c1d3820, 0xc141: 0x6c099620, 0xc143: 0x6c1d3e20, + 0xc146: 0x6c1d3220, + 0xc148: 0x6c154820, 0xc149: 0x6c154620, + 0xc14d: 0x6c1d4620, 0xc14e: 0x6c1d4820, 0xc14f: 0x6c006a20, + 0xc155: 0x6c1d3020, + 0xc15a: 0x6c050c20, 0xc15b: 0x6c000c20, + 0xc15f: 0x6c031c20, + 0xc161: 0x6c1d4020, + 0xc167: 0x6c1d5020, + 0xc168: 0x6c1d4e20, + 0xc16c: 0x6c1d5820, + 0xc174: 0x6c1d5a20, + 0xc17c: 0x6c1d5620, 0xc17d: 0x6c1d5c20, 0xc17e: 0x6c1d4c20, 0xc17f: 0x6c1d5420, + // Block 0x306, offset 0xc180 + 0xc182: 0x6c1d5e20, + 0xc184: 0x6c1d6020, 0xc187: 0x6c1d4a20, + 0xc188: 0x6c08cc20, 0xc18a: 0x6c1d5220, 0xc18b: 0x6c0da420, + 0xc18c: 0x6c06c020, 0xc18d: 0x6c1d2e20, 0xc18e: 0x6c0b2e20, + 0xc193: 0x6c1d7a20, + 0xc195: 0x6c13aa20, + 0xc198: 0x6c1d6620, 0xc199: 0x6c1d6820, 0xc19a: 0x6c1d6a20, + 0xc19d: 0x6c1d7820, 0xc19f: 0x6c1d7620, + 0xc1a2: 0x6c148e20, 0xc1a3: 0x6c031e20, + 0xc1a5: 0x6c1d7220, 0xc1a7: 0x6c056e20, + 0xc1a8: 0x6c025c20, 0xc1ab: 0x6c1d6c20, + 0xc1ae: 0x6c163820, 0xc1af: 0x6c1d7020, + 0xc1b0: 0x6c006c20, 0xc1b1: 0x6c1d7420, 0xc1b3: 0x6c1d6220, + 0xc1b4: 0x6c1d6e20, 0xc1b5: 0x6c1d7c20, 0xc1b6: 0x6c056c20, 0xc1b7: 0x6c1d6420, + 0xc1be: 0x6c15c620, + // Block 0x307, offset 0xc1c0 + 0xc1c2: 0x6c156220, + 0xc1c7: 0x6c1d8220, + 0xc1ca: 0x6c1d8a20, + 0xc1ce: 0x6c0d3820, + 0xc1d0: 0x6c16ba20, 0xc1d1: 0x6c1d8c20, + 0xc1d4: 0x6c1d8620, 0xc1d6: 0x6c1d8020, + 0xc1d9: 0x6c1d7e20, 0xc1da: 0x6c1d8820, + 0xc1e4: 0x6c133820, 0xc1e7: 0x6c105020, + 0xc1e9: 0x6c057020, 0xc1eb: 0x6c1d8e20, + 0xc1ec: 0x6c1d8420, 0xc1ee: 0x6c1d9020, + 0xc1f2: 0x6c05da20, + 0xc1f6: 0x6c019a20, + 0xc1fa: 0x6c1da020, + 0xc1fe: 0x6c032020, + // Block 0x308, offset 0xc200 + 0xc203: 0x6c1d9c20, + 0xc206: 0x6c1d9e20, 0xc207: 0x6c076a20, + 0xc208: 0x6c1d9a20, 0xc209: 0x6c1d9620, 0xc20a: 0x6c1d9420, 0xc20b: 0x6c1da220, + 0xc20c: 0x6c1d9220, 0xc20d: 0x6c1da620, + 0xc210: 0x6c022e20, + 0xc223: 0x6c1daa20, + 0xc226: 0x6c1da820, + 0xc232: 0x6c0ec020, + 0xc234: 0x6c1db020, 0xc236: 0x6c1dac20, 0xc237: 0x6c1d9820, + 0xc238: 0x6c05dc20, 0xc23a: 0x6c1dae20, + 0xc23c: 0x6c1db620, 0xc23d: 0x6c1db420, 0xc23e: 0x6c1db820, 0xc23f: 0x6c1db220, + // Block 0x309, offset 0xc240 + 0xc240: 0x6c1dba20, + 0xc248: 0x6c1dbc20, 0xc249: 0x6c1dbe20, 0xc24a: 0x6c13ac20, + 0xc24c: 0x6c1dc220, 0xc24d: 0x6c1dc020, 0xc24e: 0x6c09ca20, + 0xc250: 0x6c0bdc20, 0xc251: 0x6c020420, 0xc252: 0x6c023020, + 0xc254: 0x6c1dc420, 0xc256: 0x6c003e20, + 0xc25a: 0x6c0c1820, 0xc25b: 0x6c1dc620, + 0xc25d: 0x6c2c0020, 0xc25e: 0x6c1dc820, 0xc25f: 0x6c05a620, + 0xc261: 0x6c1dca20, + 0xc266: 0x6c0c5e20, + 0xc26a: 0x6c1dcc20, + 0xc26e: 0x6c1dce20, 0xc26f: 0x6c03e020, + 0xc270: 0x6c1dd020, 0xc272: 0x6c1dd220, 0xc273: 0x6c1dd420, + 0xc274: 0x6c0da620, + 0xc278: 0x6c063a20, 0xc27b: 0x6c151220, + 0xc27f: 0x6c140c20, + // Block 0x30a, offset 0xc280 + 0xc280: 0x6c0a2020, 0xc281: 0x6c1dd620, + 0xc287: 0x6c0c6020, + 0xc288: 0x6c2d6c20, 0xc289: 0x6c122420, 0xc28b: 0x6c096420, + 0xc28d: 0x6c07b220, 0xc28e: 0x6c1dd820, + 0xc293: 0x6c0d8620, + 0xc295: 0x6c132620, + 0xc298: 0x6c0dda20, 0xc29b: 0x6c1dde20, + 0xc29e: 0x6c1dda20, + 0xc2a0: 0x6c1de020, 0xc2a3: 0x6c1ddc20, + 0xc2a8: 0x6c1de220, + 0xc2ae: 0x6c133a20, + 0xc2b1: 0x6c002e20, + 0xc2b6: 0x6c12d820, + 0xc2b9: 0x6c122620, + 0xc2bc: 0x6c1de420, 0xc2be: 0x6c1dea20, 0xc2bf: 0x6c0a7220, + // Block 0x30b, offset 0xc2c0 + 0xc2c0: 0x6c03e220, 0xc2c2: 0x6c1de620, 0xc2c3: 0x6c1df420, + 0xc2c4: 0x6c0a7420, + 0xc2c9: 0x6c1de820, 0xc2ca: 0x6c112c20, + 0xc2d1: 0x6c15c820, 0xc2d2: 0x6c1dec20, 0xc2d3: 0x6c1dee20, + 0xc2d4: 0x6c1df620, 0xc2d5: 0x6c100020, 0xc2d6: 0x6c1df020, 0xc2d7: 0x6c06c220, + 0xc2d8: 0x6c0c3c20, 0xc2db: 0x6c1e1220, + 0xc2dc: 0x6c11c820, 0xc2de: 0x6c0ddc20, + 0xc2eb: 0x6c122820, + 0xc2ec: 0x6c1e9c20, + 0xc2f1: 0x6c13cc20, + 0xc2f5: 0x6c0f5220, + 0xc2f9: 0x6c147e20, 0xc2fb: 0x6c1dfc20, + 0xc2fc: 0x6c017a20, 0xc2fd: 0x6c0e8820, + // Block 0x30c, offset 0xc300 + 0xc302: 0x6c1e0e20, + 0xc305: 0x6c0e1c20, 0xc306: 0x6c1e0220, 0xc307: 0x6c1e1020, + 0xc308: 0x6c1e0620, 0xc309: 0x6c1e1420, 0xc30a: 0x6c1e0c20, + 0xc30c: 0x6c1e0a20, 0xc30d: 0x6c118220, 0xc30f: 0x6c1dfe20, + 0xc310: 0x6c023220, 0xc311: 0x6c1dfa20, 0xc312: 0x6c044e20, 0xc313: 0x6c0dde20, + 0xc314: 0x6c1df220, 0xc317: 0x6c1df820, + 0xc318: 0x6c06c420, 0xc319: 0x6c0c3620, 0xc31b: 0x6c0a7620, + 0xc31c: 0x6c1e0820, 0xc31d: 0x6c114820, + 0xc320: 0x6c045020, 0xc321: 0x6c028420, + 0xc32c: 0x6c02c220, 0xc32d: 0x6c0b0620, 0xc32e: 0x6c1e1820, 0xc32f: 0x6c1e2220, + 0xc331: 0x6c1e1a20, 0xc333: 0x6c05de20, + 0xc335: 0x6c1e2420, 0xc336: 0x6c081820, 0xc337: 0x6c072e20, + 0xc33e: 0x6c099820, 0xc33f: 0x6c1e0020, + // Block 0x30d, offset 0xc340 + 0xc341: 0x6c08ce20, 0xc342: 0x6c1e1e20, + 0xc347: 0x6c088420, + 0xc348: 0x6c1e2020, 0xc349: 0x6c004820, + 0xc34c: 0x6c1e1620, + 0xc351: 0x6c0ec220, + 0xc359: 0x6c045220, + 0xc35f: 0x6c049020, + 0xc367: 0x6c1e1c20, + 0xc368: 0x6c000e20, 0xc36b: 0x6c079e20, + 0xc36f: 0x6c0b3020, + 0xc37a: 0x6c0f5420, + 0xc37d: 0x6c120820, 0xc37e: 0x6c1e2820, 0xc37f: 0x6c0cf820, + // Block 0x30e, offset 0xc380 + 0xc389: 0x6c0d4c20, + 0xc38c: 0x6c082a20, 0xc38d: 0x6c1e2a20, 0xc38f: 0x6c1e2e20, + 0xc390: 0x6c1e2620, + 0xc395: 0x6c139a20, 0xc397: 0x6c0eea20, + 0xc39c: 0x6c0cf420, + 0xc3a7: 0x6c13ce20, + 0xc3a8: 0x6c092c20, 0xc3a9: 0x6c1e4620, 0xc3ab: 0x6c1e4420, + 0xc3ae: 0x6c0bb420, + 0xc3b2: 0x6c05e020, + 0xc3b6: 0x6c1e3820, 0xc3b7: 0x6c0a7a20, + 0xc3ba: 0x6c10b820, 0xc3bb: 0x6c110620, + // Block 0x30f, offset 0xc3c0 + 0xc3c0: 0x6c1e3420, 0xc3c3: 0x6c0cf620, + 0xc3c8: 0x6c098020, 0xc3c9: 0x6c1e3e20, + 0xc3cc: 0x6c0a7820, 0xc3ce: 0x6c1e3220, 0xc3cf: 0x6c1e3c20, + 0xc3d2: 0x6c114a20, + 0xc3d6: 0x6c1e3020, + 0xc3d8: 0x6c052620, 0xc3db: 0x6c02ae20, + 0xc3df: 0x6c1e4020, + 0xc3e0: 0x6c161e20, 0xc3e1: 0x6c07b420, 0xc3e2: 0x6c0e1e20, 0xc3e3: 0x6c1e3a20, + 0xc3e5: 0x6c0c3820, 0xc3e7: 0x6c06c620, + 0xc3e8: 0x6c0b8c20, 0xc3e9: 0x6c014820, 0xc3ea: 0x6c0cb420, 0xc3eb: 0x6c1e3620, + 0xc3ec: 0x6c03f620, + 0xc3f2: 0x6c057220, + 0xc3f4: 0x6c0f0e20, 0xc3f5: 0x6c1e4220, + 0xc3fb: 0x6c0cfa20, + 0xc3fe: 0x6c1e4820, + // Block 0x310, offset 0xc400 + 0xc400: 0x6c1e4c20, 0xc403: 0x6c0d6620, + 0xc404: 0x6c1e5820, 0xc406: 0x6c1e4e20, + 0xc409: 0x6c1e5220, + 0xc40f: 0x6c129e20, + 0xc410: 0x6c0f5620, 0xc412: 0x6c1e5420, + 0xc416: 0x6c156420, + 0xc41a: 0x6c159c20, 0xc41b: 0x6c032220, + 0xc421: 0x6c001c20, 0xc423: 0x6c1e5020, + 0xc429: 0x6c1e4a20, + 0xc42e: 0x6c03a020, + 0xc434: 0x6c014a20, 0xc436: 0x6c1e5620, + 0xc43a: 0x6c159e20, + // Block 0x311, offset 0xc440 + 0xc446: 0x6c1e5e20, + 0xc44d: 0x6c0d6e20, 0xc44f: 0x6c1e6c20, + 0xc453: 0x6c1e6020, + 0xc456: 0x6c1e5a20, 0xc457: 0x6c1e6820, + 0xc45c: 0x6c1e2c20, + 0xc466: 0x6c1e6220, + 0xc468: 0x6c1e6a20, + 0xc46c: 0x6c11e420, 0xc46d: 0x6c100220, + 0xc474: 0x6c1e5c20, 0xc476: 0x6c1e6420, + 0xc47a: 0x6c057420, + 0xc47e: 0x6c07fa20, + // Block 0x312, offset 0xc480 + 0xc482: 0x6c0c3a20, + 0xc48e: 0x6c1e7420, + 0xc498: 0x6c0f7820, + 0xc4a7: 0x6c1e6e20, + 0xc4a9: 0x6c145420, + 0xc4af: 0x6c1e7020, + 0xc4b6: 0x6c1e7220, + 0xc4b8: 0x6c14ec20, 0xc4ba: 0x6c0bc420, + // Block 0x313, offset 0xc4c0 + 0xc4c3: 0x6c05a820, + 0xc4c8: 0x6c1e8020, + 0xc4d2: 0x6c083e20, 0xc4d3: 0x6c1e7a20, + 0xc4d5: 0x6c1e7820, + 0xc4da: 0x6c110820, + 0xc4de: 0x6c105220, + 0xc4e4: 0x6c0f8e20, 0xc4e5: 0x6c1e7c20, + 0xc4e9: 0x6c1e7e20, 0xc4eb: 0x6c12fa20, + 0xc4ed: 0x6c112e20, 0xc4ee: 0x6c081a20, + 0xc4f0: 0x6c0c6220, 0xc4f2: 0x6c143420, + 0xc4f9: 0x6c028620, 0xc4fb: 0x6c1e8c20, + 0xc4fc: 0x6c1e8220, + // Block 0x314, offset 0xc500 + 0xc501: 0x6c15a020, 0xc502: 0x6c1e9020, + 0xc505: 0x6c1e8820, 0xc507: 0x6c1e8a20, + 0xc50d: 0x6c0cfc20, + 0xc512: 0x6c1e8620, + 0xc514: 0x6c1e0420, + 0xc518: 0x6c1e8e20, 0xc51a: 0x6c1e8420, + 0xc520: 0x6c1e9820, 0xc521: 0x6c1e9a20, 0xc522: 0x6c0f7a20, 0xc523: 0x6c1e9e20, + 0xc526: 0x6c081c20, 0xc527: 0x6c1e9420, + 0xc52c: 0x6c03e420, 0xc52f: 0x6c1ea020, + 0xc531: 0x6c1e9220, 0xc532: 0x6c1ea820, + 0xc534: 0x6c1ea620, 0xc536: 0x6c1ea420, + 0xc53a: 0x6c1eaa20, + 0xc53d: 0x6c1eae20, 0xc53e: 0x6c0aea20, + // Block 0x315, offset 0xc540 + 0xc540: 0x6c1eac20, + 0xc545: 0x6c1eb420, + 0xc558: 0x6c1eb020, + 0xc55c: 0x6c1eb220, 0xc55d: 0x6c1e6620, + 0xc563: 0x6c1eb820, + 0xc564: 0x6c1eb620, + 0xc56a: 0x6c1e7620, 0xc56b: 0x6c1eba20, + 0xc56c: 0x6c1ea220, 0xc56f: 0x6c088620, + 0xc574: 0x6c1ebc20, 0xc575: 0x6c1ebe20, 0xc576: 0x6c1ec220, 0xc577: 0x6c1ec020, + 0xc578: 0x6c1ec420, 0xc579: 0x6c023420, 0xc57b: 0x6c06c820, + 0xc57e: 0x6c13d020, 0xc57f: 0x6c0bde20, + // Block 0x316, offset 0xc580 + 0xc585: 0x6c063c20, + 0xc588: 0x6c1ec820, + 0xc58d: 0x6c1ece20, 0xc58f: 0x6c12c020, + 0xc591: 0x6c042a20, + 0xc595: 0x6c1ecc20, 0xc596: 0x6c1eca20, 0xc597: 0x6c114c20, + 0xc598: 0x6c1ed020, 0xc599: 0x6c049220, + 0xc59d: 0x6c1ed420, 0xc59e: 0x6c1ed220, + 0xc5a2: 0x6c032420, 0xc5a3: 0x6c084020, + 0xc5a6: 0x6c109820, + 0xc5ac: 0x6c057620, + 0xc5b0: 0x6c0bac20, 0xc5b2: 0x6c1ed620, + 0xc5b4: 0x6c0be020, 0xc5b5: 0x6c0f7c20, 0xc5b7: 0x6c12da20, + 0xc5b8: 0x6c1ed820, + // Block 0x317, offset 0xc5c0 + 0xc5c2: 0x6c1eda20, 0xc5c3: 0x6c1edc20, + 0xc5c7: 0x6c134820, + 0xc5c8: 0x6c1b5020, 0xc5c9: 0x6c0c0c20, + 0xc5cc: 0x6c12b420, 0xc5ce: 0x6c07c820, + 0xc5d0: 0x6c122a20, 0xc5d1: 0x6c11e620, + 0xc5d7: 0x6c0fc620, + 0xc5d9: 0x6c164a20, 0xc5db: 0x6c1ee020, + 0xc5dc: 0x6c093020, 0xc5df: 0x6c1ee220, + 0xc5e1: 0x6c002c20, + 0xc5e4: 0x6c04d020, 0xc5e5: 0x6c0c1a20, 0xc5e7: 0x6c12dc20, + 0xc5eb: 0x6c1ee420, + 0xc5ec: 0x6c085820, 0xc5ed: 0x6c0e4220, 0xc5ef: 0x6c088a20, + 0xc5f0: 0x6c0b3220, + 0xc5f7: 0x6c1ee620, + 0xc5f9: 0x6c13d220, + 0xc5fc: 0x6c016a20, 0xc5fd: 0x6c088c20, + // Block 0x318, offset 0xc600 + 0xc601: 0x6c1eec20, 0xc603: 0x6c1ee820, + 0xc604: 0x6c1eee20, 0xc605: 0x6c163a20, 0xc606: 0x6c1eea20, + 0xc60b: 0x6c0c7620, + 0xc60c: 0x6c1ef020, 0xc60f: 0x6c0d5c20, + 0xc612: 0x6c1ef220, + 0xc617: 0x6c03a420, + 0xc619: 0x6c1ef620, 0xc61b: 0x6c1ef420, + 0xc620: 0x6c1ef820, 0xc621: 0x6c1efa20, 0xc622: 0x6c03a620, + 0xc625: 0x6c10e020, 0xc626: 0x6c0e2020, 0xc627: 0x6c044420, + 0xc628: 0x6c088e20, 0xc629: 0x6c0cfe20, + 0xc62c: 0x6c0a0420, 0xc62d: 0x6c002020, + 0xc631: 0x6c1efc20, + 0xc63a: 0x6c017c20, 0xc63b: 0x6c1f0420, + // Block 0x319, offset 0xc640 + 0xc642: 0x6c06ca20, 0xc643: 0x6c1f0220, + 0xc646: 0x6c076e20, 0xc647: 0x6c0a7c20, + 0xc64a: 0x6c1f0020, + 0xc64c: 0x6c0a7e20, 0xc64e: 0x6c14d020, 0xc64f: 0x6c076c20, + 0xc653: 0x6c006e20, + 0xc654: 0x6c0c1c20, + 0xc65c: 0x6c1f0e20, 0xc65f: 0x6c0be220, + 0xc660: 0x6c010a20, + 0xc665: 0x6c09f620, 0xc667: 0x6c146020, + 0xc668: 0x6c07fc20, + 0xc66d: 0x6c0a8020, 0xc66f: 0x6c0bce20, + 0xc674: 0x6c1f0c20, 0xc675: 0x6c1f0820, 0xc676: 0x6c1f0a20, + 0xc67c: 0x6c0e8a20, 0xc67f: 0x6c1f4a20, + // Block 0x31a, offset 0xc680 + 0xc681: 0x6c1f1620, 0xc682: 0x6c08d020, 0xc683: 0x6c06cc20, + 0xc684: 0x6c1f1220, + 0xc689: 0x6c1f1420, 0xc68b: 0x6c0b3420, + 0xc68f: 0x6c1f1020, + 0xc692: 0x6c083220, + 0xc69d: 0x6c1f1a20, 0xc69e: 0x6c1f1820, 0xc69f: 0x6c1f2220, + 0xc6a2: 0x6c1f2420, + 0xc6a4: 0x6c1f1c20, 0xc6a6: 0x6c023820, 0xc6a7: 0x6c1f1e20, + 0xc6a8: 0x6c1f2020, 0xc6a9: 0x6c120a20, + 0xc6ae: 0x6c12de20, 0xc6af: 0x6c057820, + 0xc6b0: 0x6c1f2620, + 0xc6b4: 0x6c0be420, 0xc6b6: 0x6c0a8220, + 0xc6ba: 0x6c0e5820, + // Block 0x31b, offset 0xc6c0 + 0xc6c1: 0x6c04b620, 0xc6c3: 0x6c1f2820, + 0xc6c4: 0x6c1f3020, 0xc6c7: 0x6c01ce20, + 0xc6c8: 0x6c1f2a20, 0xc6c9: 0x6c1f2e20, + 0xc6ce: 0x6c1f2c20, + 0xc6d1: 0x6c0a2220, + 0xc6d6: 0x6c0e4420, 0xc6d7: 0x6c004a20, + 0xc6d8: 0x6c1f3220, + 0xc6dd: 0x6c1f3420, + 0xc6e2: 0x6c0ec420, + 0xc6e6: 0x6c16aa20, + 0xc6eb: 0x6c085a20, + 0xc6ee: 0x6c13ae20, + 0xc6f4: 0x6c140e20, + 0xc6f8: 0x6c1f4220, 0xc6f9: 0x6c1f3820, + 0xc6fc: 0x6c1f3e20, 0xc6fe: 0x6c1f3c20, + // Block 0x31c, offset 0xc700 + 0xc701: 0x6c1f3620, + 0xc704: 0x6c1f4020, 0xc707: 0x6c10a420, + 0xc709: 0x6c1f3a20, + 0xc716: 0x6c1f4420, + 0xc719: 0x6c0a2420, 0xc71a: 0x6c1f4620, + 0xc71c: 0x6c15a220, 0xc71d: 0x6c119420, + 0xc720: 0x6c1f4820, + 0xc726: 0x6c1f4c20, + 0xc729: 0x6c1f4e20, + 0xc730: 0x6c1f5020, 0xc732: 0x6c04bc20, 0xc733: 0x6c010c20, + 0xc734: 0x6c06ce20, 0xc735: 0x6c1f5220, 0xc737: 0x6c1f5420, + 0xc738: 0x6c0a2e20, 0xc739: 0x6c0d0020, + 0xc73c: 0x6c191220, 0xc73d: 0x6c0cb820, 0xc73e: 0x6c0cb620, 0xc73f: 0x6c0da820, + // Block 0x31d, offset 0xc740 + 0xc740: 0x6c07a620, 0xc743: 0x6c17ce20, + 0xc748: 0x6c05c020, 0xc749: 0x6c156620, 0xc74b: 0x6c13d420, + 0xc74d: 0x6c131820, 0xc74f: 0x6c1f5620, + 0xc754: 0x6c07fe20, 0xc755: 0x6c0eee20, 0xc756: 0x6c1f5820, 0xc757: 0x6c16e220, + 0xc75b: 0x6c141020, + 0xc75d: 0x6c0ec620, 0xc75e: 0x6c1f5a20, 0xc75f: 0x6c03a820, + 0xc766: 0x6c1f5c20, 0xc767: 0x6c1f5e20, + 0xc768: 0x6c150420, 0xc76a: 0x6c149820, 0xc76b: 0x6c148020, + 0xc76c: 0x6c144c20, 0xc76d: 0x6c081e20, 0xc76e: 0x6c1f6220, + 0xc771: 0x6c096620, + 0xc774: 0x6c143620, 0xc776: 0x6c1f6620, 0xc777: 0x6c1f6c20, + 0xc778: 0x6c1f6a20, 0xc77a: 0x6c03a220, + 0xc77d: 0x6c042c20, 0xc77f: 0x6c1f6420, + // Block 0x31e, offset 0xc780 + 0xc781: 0x6c1f6820, + 0xc786: 0x6c1f6e20, + 0xc789: 0x6c0bb620, + 0xc78e: 0x6c160220, 0xc78f: 0x6c005220, + 0xc790: 0x6c07d820, 0xc791: 0x6c0d7020, 0xc793: 0x6c094a20, + 0xc796: 0x6c0aee20, + 0xc799: 0x6c1f7420, + 0xc79c: 0x6c0fc820, 0xc79e: 0x6c1f7020, 0xc79f: 0x6c0d4e20, + 0xc7a0: 0x6c1f7220, 0xc7a1: 0x6c0aec20, 0xc7a2: 0x6c150a20, 0xc7a3: 0x6c1f7620, + 0xc7a4: 0x6c1f7820, 0xc7a5: 0x6c15dc20, + 0xc7aa: 0x6c1f8220, + 0xc7ad: 0x6c06d020, 0xc7af: 0x6c114e20, + 0xc7b0: 0x6c1f7c20, 0xc7b1: 0x6c100420, 0xc7b2: 0x6c1efe20, 0xc7b3: 0x6c1f0620, + 0xc7b5: 0x6c040a20, 0xc7b7: 0x6c113220, + 0xc7bc: 0x6c1f8020, 0xc7be: 0x6c0a8420, 0xc7bf: 0x6c11e820, + // Block 0x31f, offset 0xc7c0 + 0xc7c5: 0x6c1f8c20, 0xc7c7: 0x6c125420, + 0xc7c9: 0x6c1f7a20, 0xc7cb: 0x6c1f8620, + 0xc7cc: 0x6c1f8420, + 0xc7d0: 0x6c0c1e20, + 0xc7d5: 0x6c146e20, 0xc7d7: 0x6c166e20, + 0xc7da: 0x6c146220, + 0xc7dc: 0x6c01d020, 0xc7dd: 0x6c089020, + 0xc7e0: 0x6c171420, 0xc7e1: 0x6c1f8a20, 0xc7e2: 0x6c0bae20, + 0xc7e6: 0x6c1f8820, + 0xc7e9: 0x6c1f7e20, + 0xc7ef: 0x6c063e20, + 0xc7f3: 0x6c1f9620, + 0xc7f4: 0x6c1f9220, 0xc7f6: 0x6c01d220, 0xc7f7: 0x6c1f8e20, + 0xc7f8: 0x6c1f9a20, 0xc7f9: 0x6c1fa620, + // Block 0x320, offset 0xc800 + 0xc801: 0x6c0d8820, + 0xc804: 0x6c135a20, 0xc806: 0x6c1faa20, + 0xc80a: 0x6c126020, + 0xc80e: 0x6c1fa820, 0xc80f: 0x6c118420, + 0xc810: 0x6c141220, 0xc811: 0x6c032620, 0xc813: 0x6c0c6e20, + 0xc814: 0x6c09cc20, + 0xc818: 0x6c0f1620, 0xc81a: 0x6c156820, + 0xc81d: 0x6c1fa020, 0xc81e: 0x6c1f9e20, + 0xc822: 0x6c1fa220, + 0xc824: 0x6c1f9c20, 0xc827: 0x6c1fac20, + 0xc829: 0x6c1f9820, + 0xc82c: 0x6c1f9420, 0xc82e: 0x6c1fa420, 0xc82f: 0x6c1f9020, + 0xc831: 0x6c0e8c20, 0xc833: 0x6c154020, + 0xc834: 0x6c091c20, 0xc835: 0x6c080020, + 0xc83b: 0x6c078c20, + 0xc83e: 0x6c147220, 0xc83f: 0x6c027620, + // Block 0x321, offset 0xc840 + 0xc842: 0x6c0f0c20, 0xc843: 0x6c107c20, + 0xc844: 0x6c010e20, + 0xc853: 0x6c0c6420, + 0xc856: 0x6c0be820, 0xc857: 0x6c053820, + 0xc85e: 0x6c1fb020, + 0xc861: 0x6c06d220, 0xc862: 0x6c02ec20, + 0xc869: 0x6c1fb420, 0xc86a: 0x6c02dc20, 0xc86b: 0x6c1fc020, + 0xc872: 0x6c1fba20, + 0xc874: 0x6c0c6620, + 0xc878: 0x6c028a20, 0xc879: 0x6c077020, + 0xc87c: 0x6c028820, 0xc87d: 0x6c07b620, + // Block 0x322, offset 0xc880 + 0xc880: 0x6c1fb620, 0xc881: 0x6c05ae20, 0xc882: 0x6c057a20, 0xc883: 0x6c100620, + 0xc886: 0x6c1fb220, + 0xc888: 0x6c004c20, + 0xc88d: 0x6c1fb820, 0xc88e: 0x6c1fbc20, + 0xc890: 0x6c04c220, 0xc891: 0x6c053c20, 0xc893: 0x6c032820, + 0xc894: 0x6c040220, + 0xc899: 0x6c1fc220, + 0xc89c: 0x6c080a20, 0xc89d: 0x6c147620, 0xc89f: 0x6c084220, + 0xc8a3: 0x6c1fc420, + 0xc8a7: 0x6c127c20, + 0xc8b4: 0x6c1fdc20, 0xc8b6: 0x6c019e20, 0xc8b7: 0x6c1fc620, + 0xc8be: 0x6c1fe820, 0xc8bf: 0x6c1fc820, + // Block 0x323, offset 0xc8c0 + 0xc8c1: 0x6c164c20, 0xc8c3: 0x6c1fd620, + 0xc8c5: 0x6c116220, + 0xc8cd: 0x6c1fe620, 0xc8cf: 0x6c1fcc20, + 0xc8d3: 0x6c002820, + 0xc8d4: 0x6c1fd020, 0xc8d7: 0x6c06d420, + 0xc8db: 0x6c1fd420, + 0xc8dd: 0x6c1fd220, 0xc8df: 0x6c1fca20, + 0xc8e0: 0x6c1fe020, 0xc8e2: 0x6c0a8620, + 0xc8e6: 0x6c1ab420, 0xc8e7: 0x6c067020, + 0xc8e8: 0x6c160420, + 0xc8ed: 0x6c1fce20, 0xc8ef: 0x6c0f5820, + 0xc8f0: 0x6c023a20, 0xc8f1: 0x6c077220, 0xc8f3: 0x6c1fbe20, + 0xc8f5: 0x6c1fde20, 0xc8f6: 0x6c02b620, + 0xc8f9: 0x6c1fda20, 0xc8fa: 0x6c1fe220, + 0xc8fc: 0x6c100820, + // Block 0x324, offset 0xc900 + 0xc904: 0x6c03ac20, 0xc906: 0x6c201e20, + 0xc909: 0x6c14e220, 0xc90a: 0x6c1fec20, 0xc90b: 0x6c03aa20, + 0xc90d: 0x6c1ffa20, + 0xc912: 0x6c141420, + 0xc914: 0x6c1ffc20, 0xc915: 0x6c200020, 0xc917: 0x6c200820, + 0xc918: 0x6c1ff020, 0xc91a: 0x6c0e0820, + 0xc91f: 0x6c100a20, + 0xc920: 0x6c201020, 0xc921: 0x6c1ff620, 0xc923: 0x6c200a20, + 0xc927: 0x6c1ffe20, + 0xc92e: 0x6c0b3620, 0xc92f: 0x6c201220, + 0xc932: 0x6c0be620, + 0xc939: 0x6c200e20, 0xc93a: 0x6c032a20, + // Block 0x325, offset 0xc940 + 0xc940: 0x6c172420, 0xc941: 0x6c1fea20, + 0xc944: 0x6c200620, 0xc945: 0x6c007020, + 0xc948: 0x6c1fee20, 0xc94b: 0x6c14c420, + 0xc94c: 0x6c1ff820, 0xc94d: 0x6c0b0820, 0xc94e: 0x6c0efe20, 0xc94f: 0x6c1fe420, + 0xc952: 0x6c200420, + 0xc959: 0x6c0bb820, 0xc95a: 0x6c201820, 0xc95b: 0x6c02d620, + 0xc95c: 0x6c05e220, + 0xc961: 0x6c201c20, 0xc962: 0x6c1ff220, 0xc963: 0x6c201a20, + 0xc965: 0x6c200c20, 0xc966: 0x6c1ff420, + 0xc968: 0x6c201420, 0xc96a: 0x6c201620, + 0xc970: 0x6c203820, + 0xc974: 0x6c108420, 0xc976: 0x6c200220, + 0xc979: 0x6c203020, + 0xc97d: 0x6c203420, 0xc97f: 0x6c0f2020, + // Block 0x326, offset 0xc980 + 0xc98a: 0x6c15a420, + 0xc993: 0x6c130820, + 0xc994: 0x6c202a20, 0xc995: 0x6c0d8c20, + 0xc999: 0x6c203620, 0xc99a: 0x6c0cba20, + 0xc99c: 0x6c202420, 0xc99d: 0x6c203e20, 0xc99e: 0x6c203c20, + 0xc9a0: 0x6c10c620, 0xc9a1: 0x6c203a20, 0xc9a2: 0x6c10bc20, + 0xc9aa: 0x6c204220, 0xc9ab: 0x6c202820, + 0xc9ad: 0x6c04b820, 0xc9ae: 0x6c202e20, 0xc9af: 0x6c0a0620, + 0xc9b3: 0x6c116420, + 0xc9b4: 0x6c203220, 0xc9b5: 0x6c04be20, 0xc9b7: 0x6c202220, + 0xc9b8: 0x6c202620, 0xc9b9: 0x6c202020, + 0xc9bc: 0x6c16e420, 0xc9bd: 0x6c02a820, 0xc9be: 0x6c202c20, + // Block 0x327, offset 0xc9c0 + 0xc9c1: 0x6c204020, 0xc9c2: 0x6c025e20, + 0xc9ca: 0x6c07e620, + 0xc9ce: 0x6c013620, + 0xc9d1: 0x6c206220, + 0xc9d4: 0x6c16e620, 0xc9d5: 0x6c206820, + 0xc9db: 0x6c0b3820, + 0xc9dc: 0x6c206620, + 0xc9e0: 0x6c206420, + 0xc9e7: 0x6c205e20, + 0xc9ee: 0x6c204620, + 0xc9f1: 0x6c208020, 0xc9f2: 0x6c204420, + 0xc9f4: 0x6c206a20, + 0xc9fb: 0x6c205a20, + 0xc9fe: 0x6c205020, 0xc9ff: 0x6c204a20, + // Block 0x328, offset 0xca00 + 0xca01: 0x6c204c20, 0xca03: 0x6c205c20, + 0xca07: 0x6c319e20, + 0xca0a: 0x6c205620, 0xca0b: 0x6c06d620, + 0xca0c: 0x6c0f0020, 0xca0d: 0x6c0d0420, 0xca0e: 0x6c205220, + 0xca10: 0x6c204820, 0xca13: 0x6c204e20, + 0xca18: 0x6c15a620, 0xca19: 0x6c146820, + 0xca1d: 0x6c205820, 0xca1e: 0x6c206c20, + 0xca27: 0x6c207c20, + 0xca28: 0x6c206e20, 0xca2b: 0x6c208820, + 0xca2d: 0x6c208420, + 0xca32: 0x6c207a20, + 0xca39: 0x6c207820, 0xca3b: 0x6c0f1020, + 0xca3d: 0x6c0d0620, 0xca3f: 0x6c207420, + // Block 0x329, offset 0xca40 + 0xca42: 0x6c207020, + 0xca45: 0x6c207e20, + 0xca4a: 0x6c208a20, 0xca4b: 0x6c124a20, + 0xca4c: 0x6c209620, + 0xca52: 0x6c208c20, 0xca53: 0x6c209220, + 0xca54: 0x6c208620, 0xca57: 0x6c0e9c20, + 0xca59: 0x6c128c20, 0xca5b: 0x6c207220, + 0xca5e: 0x6c208220, 0xca5f: 0x6c0a8820, + 0xca61: 0x6c14ee20, 0xca62: 0x6c20aa20, 0xca63: 0x6c209020, + 0xca69: 0x6c05e420, 0xca6a: 0x6c017e20, 0xca6b: 0x6c02b220, + 0xca6e: 0x6c206020, + 0xca75: 0x6c0a8a20, 0xca76: 0x6c209a20, + 0xca78: 0x6c20a820, 0xca79: 0x6c098220, 0xca7a: 0x6c02d820, + 0xca7d: 0x6c0e1020, + // Block 0x32a, offset 0xca80 + 0xca84: 0x6c209420, 0xca87: 0x6c209e20, + 0xca88: 0x6c20a620, 0xca8b: 0x6c049420, + 0xca98: 0x6c040420, 0xca99: 0x6c20a220, + 0xca9f: 0x6c03ae20, + 0xcaa1: 0x6c107e20, 0xcaa2: 0x6c20a020, + 0xcaa6: 0x6c20a420, + 0xcab2: 0x6c209820, + 0xcab8: 0x6c209c20, + 0xcabf: 0x6c02b420, + // Block 0x32b, offset 0xcac0 + 0xcac0: 0x6c0e4620, + 0xcac4: 0x6c20b220, + 0xcacd: 0x6c20ae20, 0xcace: 0x6c067220, + 0xcad0: 0x6c20ac20, + 0xcad7: 0x6c20b820, + 0xcadc: 0x6c1fae20, + 0xcae0: 0x6c20b020, 0xcae2: 0x6c20b420, 0xcae3: 0x6c20b620, + 0xcaea: 0x6c20ce20, + 0xcaec: 0x6c20c620, 0xcaee: 0x6c1fd820, + 0xcaf3: 0x6c20c420, + 0xcaf8: 0x6c20c220, 0xcafb: 0x6c20bc20, + // Block 0x32c, offset 0xcb00 + 0xcb01: 0x6c208e20, 0xcb02: 0x6c20c020, 0xcb03: 0x6c20be20, + 0xcb11: 0x6c20ca20, 0xcb13: 0x6c16d020, + 0xcb1a: 0x6c20d020, 0xcb1b: 0x6c051e20, + 0xcb1e: 0x6c20c820, 0xcb1f: 0x6c20cc20, + 0xcb28: 0x6c11ae20, 0xcb2a: 0x6c20d220, + 0xcb3a: 0x6c20da20, 0xcb3b: 0x6c20d420, + // Block 0x32d, offset 0xcb40 + 0xcb44: 0x6c15f220, 0xcb45: 0x6c20d620, + 0xcb4a: 0x6c207620, + 0xcb52: 0x6c20dc20, + 0xcb56: 0x6c20de20, + 0xcb5d: 0x6c00e620, 0xcb5f: 0x6c20e220, + 0xcb60: 0x6c05b220, 0xcb61: 0x6c08d220, 0xcb63: 0x6c04d220, + 0xcb67: 0x6c018020, + 0xcb72: 0x6c15ca20, + 0xcb77: 0x6c20e620, + 0xcb78: 0x6c20e420, 0xcb79: 0x6c20ea20, 0xcb7a: 0x6c03e620, + 0xcb7d: 0x6c04d420, 0xcb7e: 0x6c032c20, + // Block 0x32e, offset 0xcb80 + 0xcb83: 0x6c20f020, + 0xcb87: 0x6c20ee20, + 0xcb89: 0x6c20f220, + 0xcb8c: 0x6c01d420, 0xcb8e: 0x6c0e2220, + 0xcb90: 0x6c20f420, 0xcb93: 0x6c032e20, + 0xcb94: 0x6c20f820, + 0xcb99: 0x6c20f620, 0xcb9b: 0x6c20fa20, + 0xcb9f: 0x6c20fc20, + 0xcba1: 0x6c20fe20, 0xcba2: 0x6c089220, 0xcba3: 0x6c0bea20, + 0xcba4: 0x6c075a20, 0xcba6: 0x6c12fc20, + 0xcba9: 0x6c139c20, 0xcbaa: 0x6c170c20, + 0xcbaf: 0x6c08be20, + 0xcbb3: 0x6c07b820, + 0xcbb4: 0x6c16ac20, + 0xcbb8: 0x6c210020, 0xcbb9: 0x6c210220, 0xcbbb: 0x6c089420, + 0xcbbf: 0x6c210420, + // Block 0x32f, offset 0xcbc0 + 0xcbc0: 0x6c210620, 0xcbc3: 0x6c210a20, + 0xcbc4: 0x6c210820, 0xcbc6: 0x6c144420, + 0xcbc9: 0x6c0a0820, 0xcbca: 0x6c096820, 0xcbcb: 0x6c085c20, + 0xcbcd: 0x6c210c20, + 0xcbd5: 0x6c211020, 0xcbd6: 0x6c0b0a20, + 0xcbd8: 0x6c210e20, + 0xcbde: 0x6c211220, + 0xcbe4: 0x6c211420, + 0xcbea: 0x6c211620, 0xcbeb: 0x6c211820, + 0xcbef: 0x6c211a20, + 0xcbf1: 0x6c211e20, 0xcbf2: 0x6c211c20, 0xcbf3: 0x6c212020, + 0xcbf4: 0x6c018220, 0xcbf5: 0x6c0e4820, 0xcbf7: 0x6c212220, + 0xcbfa: 0x6c082020, 0xcbfb: 0x6c028c20, + 0xcbfc: 0x6c212420, 0xcbff: 0x6c0fb020, + // Block 0x330, offset 0xcc00 + 0xcc00: 0x6c1a7220, + 0xcc05: 0x6c03b220, 0xcc06: 0x6c212620, + 0xcc0b: 0x6c212820, + 0xcc0d: 0x6c13b020, 0xcc0e: 0x6c146420, + 0xcc12: 0x6c107620, 0xcc13: 0x6c212a20, + 0xcc14: 0x6c122c20, + 0xcc18: 0x6c125620, 0xcc1b: 0x6c14f620, + 0xcc1f: 0x6c212c20, + 0xcc2b: 0x6c213020, + 0xcc2c: 0x6c212e20, 0xcc2f: 0x6c213420, + 0xcc33: 0x6c213220, + // Block 0x331, offset 0xcc40 + 0xcc48: 0x6c213820, + 0xcc4f: 0x6c089620, + 0xcc51: 0x6c14b220, 0xcc53: 0x6c213a20, + 0xcc54: 0x6c213c20, 0xcc57: 0x6c03b420, + 0xcc5b: 0x6c213e20, + 0xcc63: 0x6c214220, + 0xcc64: 0x6c214020, + 0xcc74: 0x6c0b8e20, 0xcc77: 0x6c128e20, + 0xcc78: 0x6c011020, + 0xcc7e: 0x6c11ea20, + // Block 0x332, offset 0xcc80 + 0xcc80: 0x6c0f5a20, 0xcc81: 0x6c09ce20, 0xcc82: 0x6c042e20, + 0xcc8e: 0x6c11ec20, + 0xcc90: 0x6c08ec20, + 0xcc95: 0x6c214620, 0xcc97: 0x6c033020, + 0xcc9a: 0x6c016c20, + 0xcc9d: 0x6c10cc20, 0xcc9e: 0x6c214420, 0xcc9f: 0x6c06d820, + 0xcca0: 0x6c0e5a20, 0xcca2: 0x6c214820, + 0xcca8: 0x6c215820, 0xccaa: 0x6c214a20, + 0xccb0: 0x6c0d7a20, 0xccb2: 0x6c043020, 0xccb3: 0x6c215a20, + 0xccba: 0x6c05b420, + 0xccbd: 0x6c03b620, 0xccbe: 0x6c215620, + // Block 0x333, offset 0xccc0 + 0xccc1: 0x6c215220, 0xccc2: 0x6c214c20, 0xccc3: 0x6c15cc20, + 0xccc8: 0x6c0ef020, + 0xcccc: 0x6c109a20, 0xcccd: 0x6c214e20, + 0xccd0: 0x6c215e20, 0xccd2: 0x6c215c20, 0xccd3: 0x6c052a20, + 0xccd6: 0x6c019220, + 0xccd9: 0x6c078e20, 0xccda: 0x6c215020, 0xccdb: 0x6c215420, + 0xcce1: 0x6c144220, 0xcce2: 0x6c0de020, + 0xcceb: 0x6c148220, + 0xccee: 0x6c216e20, + 0xccf1: 0x6c217020, 0xccf3: 0x6c01d620, + 0xccf8: 0x6c132820, 0xccf9: 0x6c154a20, 0xccfa: 0x6c217420, 0xccfb: 0x6c08d620, + 0xccfc: 0x6c0a8c20, 0xccfd: 0x6c216620, 0xccfe: 0x6c217220, 0xccff: 0x6c014c20, + // Block 0x334, offset 0xcd00 + 0xcd01: 0x6c049620, + 0xcd04: 0x6c216020, 0xcd05: 0x6c216a20, + 0xcd09: 0x6c0c6820, 0xcd0a: 0x6c118620, + 0xcd0c: 0x6c122e20, + 0xcd13: 0x6c216420, + 0xcd15: 0x6c13d620, 0xcd17: 0x6c216820, + 0xcd19: 0x6c217a20, 0xcd1b: 0x6c217620, + 0xcd1d: 0x6c216c20, + 0xcd21: 0x6c13d820, 0xcd22: 0x6c113420, 0xcd23: 0x6c043220, + 0xcd25: 0x6c0f7620, + 0xcd28: 0x6c0e8e20, 0xcd2a: 0x6c217c20, + 0xcd2f: 0x6c217820, + 0xcd30: 0x6c0daa20, 0xcd31: 0x6c216220, 0xcd33: 0x6c011220, + // Block 0x335, offset 0xcd40 + 0xcd4b: 0x6c15a820, + 0xcd4c: 0x6c219220, + 0xcd52: 0x6c219020, + 0xcd57: 0x6c0c6c20, + 0xcd59: 0x6c218a20, 0xcd5b: 0x6c15e420, + 0xcd5e: 0x6c105420, 0xcd5f: 0x6c217e20, + 0xcd65: 0x6c0efa20, + 0xcd69: 0x6c011420, 0xcd6a: 0x6c06da20, 0xcd6b: 0x6c218420, + 0xcd72: 0x6c099a20, 0xcd73: 0x6c218e20, + 0xcd75: 0x6c218c20, 0xcd76: 0x6c218220, + 0xcd78: 0x6c218820, 0xcd7b: 0x6c02c420, + 0xcd7d: 0x6c218620, 0xcd7e: 0x6c113620, + // Block 0x336, offset 0xcd80 + 0xcd81: 0x6c162420, + 0xcd84: 0x6c0af020, 0xcd85: 0x6c0c6a20, + 0xcd99: 0x6c219e20, 0xcd9a: 0x6c219a20, + 0xcd9c: 0x6c12b620, + 0xcda3: 0x6c219420, + 0xcda4: 0x6c219820, 0xcda6: 0x6c00f020, + 0xcda9: 0x6c06dc20, 0xcdaa: 0x6c16e820, + 0xcdac: 0x6c026e20, 0xcdae: 0x6c12e020, + 0xcdb4: 0x6c15ce20, 0xcdb7: 0x6c023c20, + 0xcdb8: 0x6c0b3a20, 0xcdb9: 0x6c219c20, + // Block 0x337, offset 0xcdc0 + 0xcdc5: 0x6c21a620, + 0xcdc8: 0x6c0a8e20, + 0xcdcc: 0x6c156c20, 0xcdce: 0x6c21a020, + 0xcdd3: 0x6c219620, + 0xcdd5: 0x6c21a220, + 0xcdd9: 0x6c168420, 0xcddb: 0x6c101220, + 0xcddc: 0x6c106c20, + 0xcdef: 0x6c026020, + 0xcdf2: 0x6c012620, + 0xcdf5: 0x6c21ae20, + 0xcdf8: 0x6c21b420, + 0xcdfc: 0x6c164e20, + // Block 0x338, offset 0xce00 + 0xce00: 0x6c15d420, + 0xce05: 0x6c21c220, 0xce06: 0x6c21b620, 0xce07: 0x6c21b020, + 0xce0b: 0x6c167020, + 0xce0c: 0x6c21bc20, + 0xce11: 0x6c09e020, 0xce12: 0x6c21c020, + 0xce15: 0x6c21ca20, + 0xce18: 0x6c100e20, 0xce19: 0x6c21c620, + 0xce1e: 0x6c21ba20, + 0xce21: 0x6c0e2420, + 0xce24: 0x6c21c820, 0xce26: 0x6c21b220, + 0xce28: 0x6c21be20, 0xce2a: 0x6c21cc20, 0xce2b: 0x6c00b820, + 0xce2c: 0x6c21b820, 0xce2e: 0x6c21ce20, + 0xce31: 0x6c0b3c20, 0xce33: 0x6c0a0a20, + 0xce35: 0x6c132220, 0xce37: 0x6c077420, + 0xce39: 0x6c21a820, 0xce3a: 0x6c21c420, 0xce3b: 0x6c0fa020, + // Block 0x339, offset 0xce40 + 0xce45: 0x6c0bec20, 0xce47: 0x6c02c620, + 0xce48: 0x6c07ba20, 0xce49: 0x6c0a9020, 0xce4a: 0x6c21ac20, 0xce4b: 0x6c09d020, + 0xce53: 0x6c057c20, + 0xce55: 0x6c21aa20, + 0xce59: 0x6c21d620, 0xce5a: 0x6c0a2620, 0xce5b: 0x6c061420, + 0xce5d: 0x6c21f420, 0xce5f: 0x6c21e820, + 0xce60: 0x6c045420, 0xce61: 0x6c0fca20, 0xce63: 0x6c21de20, + 0xce64: 0x6c21f020, 0xce65: 0x6c001e20, 0xce66: 0x6c00e020, + 0xce69: 0x6c01aa20, 0xce6b: 0x6c21e220, + 0xce6c: 0x6c0d5020, 0xce6d: 0x6c21d020, 0xce6e: 0x6c21d420, 0xce6f: 0x6c06de20, + 0xce78: 0x6c21f620, 0xce7a: 0x6c21ec20, + 0xce7e: 0x6c21dc20, + // Block 0x33a, offset 0xce80 + 0xce83: 0x6c21ea20, + 0xce8a: 0x6c14a620, + 0xce8d: 0x6c21e620, 0xce8e: 0x6c21ee20, + 0xce96: 0x6c064020, + 0xce98: 0x6c0a9220, 0xce9b: 0x6c0e2620, + 0xce9f: 0x6c21da20, + 0xcea7: 0x6c156a20, + 0xceab: 0x6c21e020, + 0xceae: 0x6c21d220, 0xceaf: 0x6c101020, + 0xceb2: 0x6c21d820, + 0xceb6: 0x6c21e420, + 0xcebe: 0x6c172620, 0xcebf: 0x6c090c20, + // Block 0x33b, offset 0xcec0 + 0xcec0: 0x6c149020, 0xcec2: 0x6c21f820, + 0xcecc: 0x6c11bc20, 0xcecf: 0x6c221020, + 0xced0: 0x6c061620, + 0xced6: 0x6c0a0c20, + 0xced8: 0x6c21fc20, + 0xcedc: 0x6c162620, 0xcedd: 0x6c06e020, 0xcedf: 0x6c221620, + 0xcee2: 0x6c009c20, + 0xcee5: 0x6c221220, + 0xceea: 0x6c21fa20, + 0xceef: 0x6c220620, + 0xcef2: 0x6c220a20, + 0xcef6: 0x6c15aa20, 0xcef7: 0x6c220020, + 0xcefa: 0x6c0f8820, + 0xcefd: 0x6c220420, + // Block 0x33c, offset 0xcf00 + 0xcf02: 0x6c221420, + 0xcf04: 0x6c220820, 0xcf05: 0x6c14de20, + 0xcf09: 0x6c21fe20, 0xcf0b: 0x6c08d420, + 0xcf0c: 0x6c222e20, + 0xcf11: 0x6c02c820, 0xcf13: 0x6c220220, + 0xcf14: 0x6c220c20, 0xcf15: 0x6c220e20, + 0xcf1d: 0x6c0dd020, 0xcf1e: 0x6c0dac20, + 0xcf2c: 0x6c221e20, 0xcf2f: 0x6c222a20, + 0xcf32: 0x6c222620, + 0xcf34: 0x6c0f7e20, 0xcf37: 0x6c223420, + 0xcf38: 0x6c222020, + 0xcf3e: 0x6c222220, 0xcf3f: 0x6c21f220, + // Block 0x33d, offset 0xcf40 + 0xcf41: 0x6c045e20, 0xcf42: 0x6c129020, + 0xcf46: 0x6c090e20, + 0xcf49: 0x6c074a20, + 0xcf4f: 0x6c16ea20, + 0xcf51: 0x6c221a20, 0xcf53: 0x6c223220, + 0xcf54: 0x6c014e20, 0xcf55: 0x6c0d0820, + 0xcf60: 0x6c119620, 0xcf62: 0x6c033220, 0xcf63: 0x6c16bc20, + 0xcf6b: 0x6c149220, + 0xcf6c: 0x6c0f1420, + 0xcf71: 0x6c222820, 0xcf72: 0x6c222c20, + 0xcf78: 0x6c0ca020, + 0xcf7e: 0x6c223020, 0xcf7f: 0x6c222420, + // Block 0x33e, offset 0xcf80 + 0xcf81: 0x6c221820, + 0xcf85: 0x6c033620, + 0xcf94: 0x6c05b620, + 0xcf98: 0x6c224c20, 0xcf9b: 0x6c224220, + 0xcf9c: 0x6c0c7020, 0xcf9f: 0x6c02ba20, + 0xcfa4: 0x6c0a0e20, 0xcfa6: 0x6c225420, + 0xcfad: 0x6c224620, 0xcfae: 0x6c0ec820, 0xcfaf: 0x6c224020, + 0xcfb0: 0x6c0f2220, + 0xcfb4: 0x6c228620, + 0xcfb8: 0x6c223a20, 0xcfba: 0x6c223820, + 0xcfbc: 0x6c224a20, + // Block 0x33f, offset 0xcfc0 + 0xcfc0: 0x6c223e20, 0xcfc1: 0x6c223c20, 0xcfc2: 0x6c224820, + 0xcfc4: 0x6c0bc220, 0xcfc6: 0x6c223620, + 0xcfce: 0x6c224e20, + 0xcfd1: 0x6c225020, + 0xcfd7: 0x6c033420, + 0xcfe1: 0x6c225a20, 0xcfe3: 0x6c225820, + 0xcfe4: 0x6c225c20, + 0xcfea: 0x6c226220, + 0xcff1: 0x6c0fb220, 0xcff3: 0x6c225620, + 0xcff9: 0x6c225e20, + // Block 0x340, offset 0xd000 + 0xd000: 0x6c05aa20, 0xd001: 0x6c0dea20, 0xd002: 0x6c225220, 0xd003: 0x6c111a20, + 0xd006: 0x6c226020, + 0xd014: 0x6c226a20, 0xd015: 0x6c226620, + 0xd018: 0x6c226c20, 0xd01b: 0x6c227220, + 0xd01f: 0x6c226420, + 0xd020: 0x6c073020, 0xd021: 0x6c10f420, + 0xd024: 0x6c21a420, + 0xd02b: 0x6c15f420, + 0xd02c: 0x6c226820, 0xd02e: 0x6c227020, 0xd02f: 0x6c0de220, + 0xd031: 0x6c226e20, 0xd033: 0x6c224420, + 0xd036: 0x6c2e8020, + 0xd03a: 0x6c227820, + 0xd03e: 0x6c228020, + // Block 0x341, offset 0xd040 + 0xd041: 0x6c227c20, + 0xd049: 0x6c227420, 0xd04b: 0x6c227620, + 0xd04f: 0x6c227e20, + 0xd051: 0x6c227a20, + 0xd055: 0x6c12b820, + 0xd058: 0x6c228a20, 0xd05a: 0x6c228420, 0xd05b: 0x6c228220, + 0xd05d: 0x6c228820, 0xd05e: 0x6c109020, 0xd05f: 0x6c228c20, + 0xd066: 0x6c0e9e20, 0xd067: 0x6c0dd220, + 0xd06c: 0x6c0bca20, + 0xd070: 0x6c228e20, 0xd072: 0x6c229220, + 0xd07e: 0x6c229020, + // Block 0x342, offset 0xd080 + 0xd08c: 0x6c221c20, + 0xd091: 0x6c229420, + 0xd098: 0x6c10b620, + 0xd0a3: 0x6c229620, + 0xd0ab: 0x6c01d820, + 0xd0af: 0x6c101420, + 0xd0b0: 0x6c023e20, + 0xd0b8: 0x6c043420, + 0xd0bc: 0x6c094c20, 0xd0bd: 0x6c07bc20, + // Block 0x343, offset 0xd0c0 + 0xd0c9: 0x6c16d220, 0xd0ca: 0x6c0b9020, + 0xd0ce: 0x6c015020, + 0xd0d2: 0x6c229a20, + 0xd0d9: 0x6c229820, + 0xd0ec: 0x6c22a020, 0xd0ed: 0x6c0e2820, 0xd0ee: 0x6c22a620, 0xd0ef: 0x6c229c20, + 0xd0f3: 0x6c22a420, + 0xd0f8: 0x6c22a220, 0xd0f9: 0x6c0fac20, 0xd0fa: 0x6c007220, + // Block 0x344, offset 0xd100 + 0xd108: 0x6c16b220, 0xd10b: 0x6c22aa20, + 0xd10f: 0x6c00cc20, + 0xd119: 0x6c22ae20, + 0xd11d: 0x6c22ac20, 0xd11f: 0x6c22a820, + 0xd131: 0x6c229e20, + 0xd139: 0x6c13da20, + 0xd13d: 0x6c22b220, + // Block 0x345, offset 0xd140 + 0xd149: 0x6c22b020, + 0xd154: 0x6c015220, + 0xd159: 0x6c22b620, 0xd15a: 0x6c133c20, + 0xd15c: 0x6c22b420, + 0xd161: 0x6c14ba20, + 0xd166: 0x6c0a9620, + 0xd176: 0x6c0ca220, + 0xd17c: 0x6c0a9420, + // Block 0x346, offset 0xd180 + 0xd189: 0x6c16be20, + 0xd18c: 0x6c22c220, 0xd18e: 0x6c0c7220, + 0xd195: 0x6c22ba20, 0xd196: 0x6c22c420, + 0xd199: 0x6c015420, + 0xd1a2: 0x6c22c020, + 0xd1a4: 0x6c116620, 0xd1a5: 0x6c22b820, 0xd1a6: 0x6c22be20, 0xd1a7: 0x6c0a9820, + 0xd1a9: 0x6c120220, + 0xd1ac: 0x6c22c620, 0xd1ae: 0x6c093220, + 0xd1bd: 0x6c0c7420, + // Block 0x347, offset 0xd1c0 + 0xd1c4: 0x6c22cc20, + 0xd1c8: 0x6c22bc20, 0xd1ca: 0x6c053220, + 0xd1cf: 0x6c22c820, + 0xd1d4: 0x6c15ac20, 0xd1d5: 0x6c22ce20, + 0xd1d9: 0x6c31a620, + 0xd1df: 0x6c09ea20, + 0xd1e8: 0x6c22d020, + 0xd1ec: 0x6c22d220, + 0xd1f1: 0x6c110020, + 0xd1f9: 0x6c22d620, + 0xd1fe: 0x6c22d820, + // Block 0x348, offset 0xd200 + 0xd203: 0x6c110a20, + 0xd208: 0x6c101620, 0xd209: 0x6c22dc20, + 0xd20e: 0x6c22e020, + 0xd210: 0x6c167220, 0xd212: 0x6c22da20, + 0xd214: 0x6c22de20, 0xd215: 0x6c015620, 0xd217: 0x6c22d420, + 0xd21f: 0x6c19d420, + 0xd220: 0x6c22e220, + 0xd225: 0x6c0d0a20, 0xd226: 0x6c084420, 0xd227: 0x6c22e620, + 0xd22c: 0x6c22e420, 0xd22d: 0x6c0b0c20, 0xd22e: 0x6c191420, + 0xd235: 0x6c22e820, + 0xd239: 0x6c22ec20, 0xd23b: 0x6c22ca20, + 0xd23c: 0x6c22ea20, 0xd23f: 0x6c22ee20, + // Block 0x349, offset 0xd240 + 0xd246: 0x6c119820, + 0xd24d: 0x6c22f020, + 0xd250: 0x6c22f220, + 0xd25b: 0x6c22f420, + 0xd268: 0x6c22f620, 0xd26a: 0x6c0f2c20, + 0xd26c: 0x6c22fa20, 0xd26d: 0x6c22f820, + 0xd270: 0x6c22fc20, 0xd272: 0x6c22fe20, + 0xd275: 0x6c094e20, 0xd276: 0x6c12e220, + 0xd27a: 0x6c152820, 0xd27b: 0x6c230020, + 0xd27c: 0x6c230220, 0xd27d: 0x6c0ce820, 0xd27e: 0x6c08d820, 0xd27f: 0x6c230420, + // Block 0x34a, offset 0xd280 + 0xd280: 0x6c230620, + 0xd286: 0x6c230820, 0xd287: 0x6c137c20, + 0xd288: 0x6c11ee20, 0xd28b: 0x6c230a20, + 0xd28c: 0x6c115220, + 0xd292: 0x6c0eca20, + 0xd298: 0x6c230c20, 0xd299: 0x6c020620, 0xd29b: 0x6c044620, + 0xd29d: 0x6c14dc20, 0xd29f: 0x6c14bc20, + 0xd2a1: 0x6c01a020, 0xd2a2: 0x6c16ec20, + 0xd2a7: 0x6c143820, + 0xd2a9: 0x6c132c20, + 0xd2b2: 0x6c0bee20, + 0xd2b4: 0x6c230e20, + 0xd2b9: 0x6c106e20, + 0xd2bd: 0x6c05e620, 0xd2be: 0x6c231020, + // Block 0x34b, offset 0xd2c0 + 0xd2c0: 0x6c07c020, 0xd2c1: 0x6c231420, 0xd2c2: 0x6c231220, + 0xd2c7: 0x6c231620, + 0xd2d2: 0x6c231820, + 0xd2d6: 0x6c231a20, + 0xd2e0: 0x6c03e820, 0xd2e2: 0x6c231c20, + 0xd2e7: 0x6c231e20, + 0xd2ec: 0x6c05e820, 0xd2ef: 0x6c11f020, + 0xd2f2: 0x6c232220, + 0xd2f6: 0x6c0af220, + 0xd2f9: 0x6c232020, + // Block 0x34c, offset 0xd300 + 0xd302: 0x6c049820, 0xd303: 0x6c232420, + 0xd304: 0x6c232820, 0xd306: 0x6c232620, + 0xd30e: 0x6c232a20, + 0xd310: 0x6c064220, 0xd312: 0x6c232c20, + 0xd317: 0x6c04fa20, + 0xd319: 0x6c0cbc20, 0xd31b: 0x6c075620, + 0xd320: 0x6c233020, 0xd321: 0x6c233220, 0xd322: 0x6c232e20, + 0xd329: 0x6c096a20, + 0xd32c: 0x6c107820, 0xd32d: 0x6c049a20, + 0xd337: 0x6c233620, + 0xd338: 0x6c0e0c20, 0xd339: 0x6c233420, + 0xd33c: 0x6c16ee20, 0xd33d: 0x6c116820, + // Block 0x34d, offset 0xd340 + 0xd34a: 0x6c233c20, + 0xd356: 0x6c234020, 0xd357: 0x6c233a20, + 0xd35b: 0x6c14f820, + 0xd35c: 0x6c233e20, 0xd35d: 0x6c234220, 0xd35f: 0x6c165020, + 0xd365: 0x6c234a20, + 0xd369: 0x6c234820, 0xd36a: 0x6c0ea020, 0xd36b: 0x6c10fe20, + 0xd36e: 0x6c05ea20, 0xd36f: 0x6c234620, + 0xd374: 0x6c234420, 0xd376: 0x6c156e20, 0xd377: 0x6c157020, + 0xd37e: 0x6c234c20, 0xd37f: 0x6c015820, + // Block 0x34e, offset 0xd380 + 0xd384: 0x6c074820, 0xd385: 0x6c089820, + 0xd38e: 0x6c234e20, 0xd38f: 0x6c235020, + 0xd397: 0x6c235420, + 0xd3a3: 0x6c09d220, + 0xd3a8: 0x6c235820, 0xd3aa: 0x6c235620, + 0xd3b0: 0x6c235a20, 0xd3b2: 0x6c028e20, + 0xd3b5: 0x6c235e20, + 0xd3b8: 0x6c235c20, 0xd3ba: 0x6c236220, 0xd3bb: 0x6c236020, + // Block 0x34f, offset 0xd3c0 + 0xd3c4: 0x6c061820, 0xd3c7: 0x6c161820, + 0xd3c9: 0x6c04c020, 0xd3cb: 0x6c018420, + 0xd3d6: 0x6c04fc20, + 0xd3e9: 0x6c037220, + 0xd3f2: 0x6c169820, 0xd3f3: 0x6c236620, + 0xd3fb: 0x6c236a20, + // Block 0x350, offset 0xd400 + 0xd400: 0x6c236c20, 0xd402: 0x6c01da20, + 0xd408: 0x6c236420, 0xd40a: 0x6c084620, + 0xd40d: 0x6c0ef220, 0xd40e: 0x6c236820, + 0xd41e: 0x6c237220, + 0xd420: 0x6c096c20, + 0xd425: 0x6c236e20, + 0xd42a: 0x6c056020, + 0xd42d: 0x6c11f220, 0xd42e: 0x6c237020, + 0xd431: 0x6c23a620, + 0xd438: 0x6c237c20, + 0xd43e: 0x6c061a20, + // Block 0x351, offset 0xd440 + 0xd443: 0x6c043620, + 0xd445: 0x6c237620, 0xd446: 0x6c160620, + 0xd449: 0x6c162820, + 0xd462: 0x6c0de420, + 0xd465: 0x6c237a20, + 0xd472: 0x6c237e20, 0xd473: 0x6c167420, + 0xd474: 0x6c04d620, 0xd475: 0x6c125820, 0xd476: 0x6c113820, + 0xd47a: 0x6c238020, + 0xd47f: 0x6c238420, + // Block 0x352, offset 0xd480 + 0xd481: 0x6c238a20, + 0xd495: 0x6c238220, + 0xd499: 0x6c238820, 0xd49a: 0x6c067420, 0xd49b: 0x6c011620, + 0xd49c: 0x6c238c20, 0xd49e: 0x6c0ba420, 0xd49f: 0x6c238620, + 0xd4a0: 0x6c168020, 0xd4a3: 0x6c239220, + 0xd4a4: 0x6c31a220, + 0xd4a9: 0x6c238e20, 0xd4aa: 0x6c239420, + 0xd4af: 0x6c237820, + 0xd4b0: 0x6c239020, 0xd4b3: 0x6c079020, + 0xd4b6: 0x6c239620, + 0xd4be: 0x6c239820, + // Block 0x353, offset 0xd4c0 + 0xd4c3: 0x6c160820, + 0xd4cb: 0x6c239a20, + 0xd4de: 0x6c239c20, + 0xd4e2: 0x6c237420, + 0xd4e7: 0x6c239e20, + 0xd4f0: 0x6c033820, + 0xd4fd: 0x6c08da20, + // Block 0x354, offset 0xd500 + 0xd50a: 0x6c23a020, + 0xd50f: 0x6c23a220, + 0xd514: 0x6c23a420, + 0xd51c: 0x6c00f220, + 0xd520: 0x6c23a820, 0xd522: 0x6c129220, 0xd523: 0x6c23aa20, + 0xd526: 0x6c02f820, 0xd527: 0x6c23ac20, + 0xd529: 0x6c23ae20, + 0xd52e: 0x6c23b020, + 0xd530: 0x6c23b420, 0xd531: 0x6c23b620, 0xd532: 0x6c23b220, + 0xd536: 0x6c12c220, 0xd537: 0x6c23ba20, + 0xd538: 0x6c23b820, + // Block 0x355, offset 0xd540 + 0xd543: 0x6c23be20, + 0xd544: 0x6c23bc20, 0xd545: 0x6c23c020, + 0xd54c: 0x6c23c220, 0xd54d: 0x6c23c620, 0xd54e: 0x6c23c420, + 0xd551: 0x6c074e20, 0xd553: 0x6c23ca20, + 0xd555: 0x6c23c820, + 0xd558: 0x6c033a20, 0xd55a: 0x6c0b6a20, + 0xd55c: 0x6c0fa420, 0xd55e: 0x6c23cc20, 0xd55f: 0x6c0bf020, + 0xd563: 0x6c084820, + 0xd565: 0x6c016e20, 0xd566: 0x6c23ce20, + 0xd568: 0x6c15ae20, 0xd56b: 0x6c139e20, + 0xd56c: 0x6c23d020, + 0xd570: 0x6c0fb420, 0xd571: 0x6c157220, 0xd572: 0x6c06e220, 0xd573: 0x6c0b3e20, + 0xd577: 0x6c0e4a20, + 0xd578: 0x6c18ca20, 0xd57a: 0x6c0ecc20, 0xd57b: 0x6c020820, + 0xd57c: 0x6c23d220, + // Block 0x356, offset 0xd580 + 0xd584: 0x6c23d420, 0xd586: 0x6c23de20, + 0xd589: 0x6c23da20, 0xd58a: 0x6c23d820, 0xd58b: 0x6c1ec620, + 0xd58c: 0x6c024020, 0xd58d: 0x6c23d620, 0xd58f: 0x6c007420, + 0xd591: 0x6c11b420, + 0xd594: 0x6c11f420, + 0xd599: 0x6c162a20, 0xd59a: 0x6c23e020, 0xd59b: 0x6c23dc20, + 0xd59c: 0x6c0e6c20, 0xd59d: 0x6c0bcc20, + 0xd5a0: 0x6c11b620, 0xd5a2: 0x6c127620, + 0xd5a4: 0x6c23e420, 0xd5a5: 0x6c162020, 0xd5a6: 0x6c057e20, 0xd5a7: 0x6c23e620, + 0xd5a9: 0x6c23e220, 0xd5aa: 0x6c120c20, 0xd5ab: 0x6c23e820, + 0xd5ad: 0x6c23ea20, + 0xd5b0: 0x6c007620, 0xd5b3: 0x6c0af420, + 0xd5b4: 0x6c23f420, 0xd5b6: 0x6c23ee20, 0xd5b7: 0x6c10c220, + 0xd5b8: 0x6c23ec20, + 0xd5bf: 0x6c03b820, + // Block 0x357, offset 0xd5c0 + 0xd5c2: 0x6c23fa20, + 0xd5c6: 0x6c23f020, 0xd5c7: 0x6c23f220, + 0xd5c9: 0x6c23f820, 0xd5ca: 0x6c23f620, 0xd5cb: 0x6c126620, + 0xd5ce: 0x6c0cc020, 0xd5cf: 0x6c0cbe20, + 0xd5d1: 0x6c03ea20, + 0xd5d4: 0x6c23fc20, + 0xd5da: 0x6c23fe20, + 0xd5dd: 0x6c240020, + 0xd5e3: 0x6c240420, + 0xd5e5: 0x6c240220, + 0xd5eb: 0x6c012820, + 0xd5f1: 0x6c241420, 0xd5f2: 0x6c123020, 0xd5f3: 0x6c240820, + 0xd5f5: 0x6c240c20, + 0xd5f8: 0x6c241020, 0xd5f9: 0x6c0b4020, + 0xd5fc: 0x6c241220, 0xd5fd: 0x6c240e20, 0xd5fe: 0x6c091020, + // Block 0x358, offset 0xd600 + 0xd602: 0x6c240620, 0xd603: 0x6c240a20, + 0xd605: 0x6c12a020, 0xd607: 0x6c0a9a20, + 0xd60a: 0x6c241820, + 0xd60d: 0x6c241620, + 0xd612: 0x6c241a20, + 0xd614: 0x6c08dc20, 0xd615: 0x6c077620, + 0xd618: 0x6c101a20, 0xd619: 0x6c241c20, 0xd61b: 0x6c0f0620, + 0xd61e: 0x6c242020, + 0xd622: 0x6c160a20, 0xd623: 0x6c241e20, + 0xd629: 0x6c0d0e20, + 0xd630: 0x6c242a20, 0xd632: 0x6c242e20, 0xd633: 0x6c243020, + 0xd634: 0x6c0e5c20, + 0xd63a: 0x6c242c20, + 0xd63c: 0x6c242620, 0xd63e: 0x6c242220, 0xd63f: 0x6c242420, + // Block 0x359, offset 0xd640 + 0xd641: 0x6c242820, + 0xd649: 0x6c243620, 0xd64b: 0x6c243220, + 0xd64d: 0x6c243420, + 0xd65f: 0x6c243820, + 0xd660: 0x6c243c20, 0xd661: 0x6c243e20, 0xd662: 0x6c244020, + 0xd664: 0x6c244220, 0xd667: 0x6c243a20, + 0xd670: 0x6c244620, + 0xd674: 0x6c244420, + 0xd67b: 0x6c244820, + // Block 0x35a, offset 0xd680 + 0xd682: 0x6c165220, + 0xd686: 0x6c244e20, 0xd687: 0x6c244a20, + 0xd688: 0x6c244c20, + 0xd68c: 0x6c037420, + 0xd692: 0x6c154c20, + 0xd696: 0x6c136c20, + 0xd698: 0x6c245220, + 0xd69c: 0x6c245020, + 0xd6a1: 0x6c245420, 0xd6a2: 0x6c245620, + 0xd6a7: 0x6c245e20, + 0xd6a8: 0x6c245820, 0xd6a9: 0x6c245a20, 0xd6aa: 0x6c245c20, + 0xd6ac: 0x6c246020, + 0xd6b0: 0x6c246220, 0xd6b2: 0x6c246420, + 0xd6b6: 0x6c246620, + 0xd6b8: 0x6c246820, 0xd6ba: 0x6c11be20, 0xd6bb: 0x6c0fcc20, + 0xd6bc: 0x6c246a20, 0xd6bd: 0x6c118820, 0xd6be: 0x6c128420, + // Block 0x35b, offset 0xd6c0 + 0xd6c0: 0x6c246c20, 0xd6c3: 0x6c246e20, + 0xd6c4: 0x6c0f8020, 0xd6c6: 0x6c024220, 0xd6c7: 0x6c06e420, + 0xd6c8: 0x6c247020, 0xd6cb: 0x6c247220, + 0xd6ce: 0x6c247420, + 0xd6d0: 0x6c082620, 0xd6d3: 0x6c247820, + 0xd6d6: 0x6c247620, + 0xd6d9: 0x6c247a20, 0xd6da: 0x6c247c20, + 0xd6ee: 0x6c123220, + 0xd6f0: 0x6c247e20, + 0xd6f4: 0x6c248020, 0xd6f7: 0x6c317020, + 0xd6f8: 0x6c248220, 0xd6f9: 0x6c248420, 0xd6fa: 0x6c248620, + 0xd6ff: 0x6c083020, + // Block 0x35c, offset 0xd700 + 0xd702: 0x6c248820, 0xd703: 0x6c115020, + 0xd706: 0x6c145220, + 0xd708: 0x6c011820, 0xd70a: 0x6c012a20, + 0xd70d: 0x6c248a20, + 0xd712: 0x6c248e20, + 0xd716: 0x6c248c20, 0xd717: 0x6c100c20, + 0xd71b: 0x6c0bf220, + 0xd71c: 0x6c20e820, 0xd71e: 0x6c249020, 0xd71f: 0x6c14d220, + 0xd721: 0x6c249220, 0xd723: 0x6c033c20, + 0xd724: 0x6c120e20, 0xd725: 0x6c249420, 0xd727: 0x6c249620, + 0xd72a: 0x6c249820, + 0xd72e: 0x6c150820, + 0xd732: 0x6c14fa20, + 0xd734: 0x6c0eec20, + 0xd738: 0x6c0d1020, 0xd73b: 0x6c249c20, + 0xd73e: 0x6c0a1020, + // Block 0x35d, offset 0xd740 + 0xd741: 0x6c0a9c20, + 0xd744: 0x6c24a220, 0xd747: 0x6c24a020, + 0xd748: 0x6c249e20, 0xd749: 0x6c125a20, 0xd74b: 0x6c033e20, + 0xd74c: 0x6c05f220, + 0xd75b: 0x6c24ae20, + 0xd75e: 0x6c24a820, 0xd75f: 0x6c0b4220, + 0xd760: 0x6c14b420, + 0xd764: 0x6c24a620, 0xd765: 0x6c24aa20, 0xd766: 0x6c24ac20, + 0xd769: 0x6c24a420, + 0xd777: 0x6c24b020, + 0xd778: 0x6c24b220, 0xd77a: 0x6c0ece20, + 0xd77c: 0x6c037620, + // Block 0x35e, offset 0xd780 + 0xd780: 0x6c0e7e20, + 0xd787: 0x6c24b420, + 0xd79a: 0x6c24b620, 0xd79b: 0x6c24bc20, + 0xd7a1: 0x6c0b9220, 0xd7a3: 0x6c107020, + 0xd7a5: 0x6c24be20, 0xd7a6: 0x6c143a20, + 0xd7a8: 0x6c24b820, 0xd7ab: 0x6c24ba20, + 0xd7b9: 0x6c24c420, + 0xd7be: 0x6c24c220, 0xd7bf: 0x6c24c020, + // Block 0x35f, offset 0xd7c0 + 0xd7cb: 0x6c24c820, + 0xd7ce: 0x6c24c620, + 0xd7d1: 0x6c24ca20, + 0xd7de: 0x6c24ce20, + 0xd7e0: 0x6c24cc20, + 0xd7e5: 0x6c137220, + 0xd7ec: 0x6c09f820, 0xd7ed: 0x6c165420, + 0xd7f0: 0x6c24d020, 0xd7f3: 0x6c105620, + 0xd7f6: 0x6c24d220, + 0xd7f9: 0x6c24d420, 0xd7fb: 0x6c24dc20, + 0xd7fc: 0x6c24d820, 0xd7fd: 0x6c24da20, 0xd7ff: 0x6c24d620, + // Block 0x360, offset 0xd800 + 0xd807: 0x6c24de20, + 0xd80d: 0x6c24e020, + 0xd817: 0x6c24e220, + 0xd81a: 0x6c24e420, 0xd81b: 0x6c14be20, + 0xd81c: 0x6c24e620, + 0xd822: 0x6c153020, 0xd823: 0x6c24e820, + 0xd825: 0x6c0e5020, 0xd827: 0x6c117820, + 0xd829: 0x6c04fe20, + 0xd82d: 0x6c0e2a20, 0xd82e: 0x6c24ea20, 0xd82f: 0x6c049c20, + 0xd833: 0x6c0c2020, + 0xd83c: 0x6c24ec20, + // Block 0x361, offset 0xd840 + 0xd842: 0x6c079220, + 0xd84c: 0x6c24ee20, + 0xd852: 0x6c24f020, + 0xd854: 0x6c05ec20, 0xd855: 0x6c07c220, + 0xd860: 0x6c24f420, + 0xd865: 0x6c0fd820, 0xd866: 0x6c07c420, 0xd867: 0x6c040820, + 0xd872: 0x6c13dc20, + 0xd874: 0x6c113a20, + 0xd87a: 0x6c0fda20, + 0xd87f: 0x6c071420, + // Block 0x362, offset 0xd880 + 0xd885: 0x6c24f820, + 0xd89d: 0x6c0a9e20, + 0xd8ab: 0x6c162c20, + 0xd8ac: 0x6c06e620, 0xd8af: 0x6c05ee20, + 0xd8b2: 0x6c11a620, + 0xd8b4: 0x6c24fc20, + 0xd8bc: 0x6c250020, + // Block 0x363, offset 0xd8c0 + 0xd8c1: 0x6c067620, + 0xd8c6: 0x6c24fe20, 0xd8c7: 0x6c0f5c20, + 0xd8cc: 0x6c250420, 0xd8cd: 0x6c026220, 0xd8ce: 0x6c24fa20, + 0xd8d1: 0x6c123420, 0xd8d3: 0x6c00dc20, + 0xd8d5: 0x6c07f020, 0xd8d7: 0x6c172820, + 0xd8da: 0x6c250220, + 0xd8e3: 0x6c250620, + 0xd8e7: 0x6c136e20, + 0xd8e9: 0x6c0c3220, 0xd8ea: 0x6c250a20, + 0xd8ef: 0x6c250c20, + 0xd8f5: 0x6c250820, + 0xd8fa: 0x6c029020, + 0xd8fc: 0x6c251820, 0xd8fe: 0x6c251620, + // Block 0x364, offset 0xd900 + 0xd901: 0x6c08de20, + 0xd905: 0x6c251a20, 0xd906: 0x6c251020, + 0xd90a: 0x6c251c20, 0xd90b: 0x6c251220, + 0xd910: 0x6c121020, 0xd911: 0x6c250e20, + 0xd914: 0x6c251420, + 0xd91a: 0x6c252220, + 0xd927: 0x6c252020, + 0xd928: 0x6c145620, + 0xd92c: 0x6c251e20, 0xd92f: 0x6c009620, + 0xd934: 0x6c252620, + 0xd93d: 0x6c252420, + // Block 0x365, offset 0xd940 + 0xd941: 0x6c0aa020, + 0xd947: 0x6c252820, + 0xd94e: 0x6c0cc220, + 0xd951: 0x6c252c20, 0xd952: 0x6c252a20, + 0xd959: 0x6c252e20, + 0xd966: 0x6c24f220, + 0xd96a: 0x6c24f620, 0xd96b: 0x6c253220, + 0xd96c: 0x6c253020, + 0xd97a: 0x6c08e020, + 0xd97c: 0x6c169a20, 0xd97e: 0x6c093420, + // Block 0x366, offset 0xd980 + 0xd980: 0x6c253420, 0xd981: 0x6c055220, + 0xd987: 0x6c03ec20, + 0xd988: 0x6c03ba20, 0xd989: 0x6c089a20, + 0xd990: 0x6c157420, 0xd993: 0x6c254020, + 0xd995: 0x6c253e20, 0xd996: 0x6c0cc420, 0xd997: 0x6c253820, + 0xd99a: 0x6c253c20, + 0xd99d: 0x6c09e220, 0xd99e: 0x6c0b4420, 0xd99f: 0x6c253a20, + 0xd9a0: 0x6c253620, 0xd9a2: 0x6c10f820, + 0xd9a5: 0x6c0aa220, + 0xd9a8: 0x6c129420, + 0xd9ad: 0x6c07c620, + 0xd9b7: 0x6c101c20, + 0xd9ba: 0x6c254220, + 0xd9bf: 0x6c254420, + // Block 0x367, offset 0xd9c0 + 0xd9c0: 0x6c257020, 0xd9c1: 0x6c04d820, + 0xd9c4: 0x6c16fe20, 0xd9c5: 0x6c0ca620, + 0xd9ca: 0x6c254620, + 0xd9cd: 0x6c01dc20, 0xd9ce: 0x6c0f5e20, 0xd9cf: 0x6c131a20, + 0xd9dd: 0x6c254820, + 0xd9e6: 0x6c046020, 0xd9e7: 0x6c254a20, + 0xd9ea: 0x6c254e20, + 0xd9ee: 0x6c255020, + 0xd9f0: 0x6c10f620, 0xd9f3: 0x6c255220, + 0xd9f9: 0x6c255420, 0xd9fa: 0x6c255620, + 0xd9fd: 0x6c04da20, 0xd9fe: 0x6c01de20, 0xd9ff: 0x6c107220, + // Block 0x368, offset 0xda00 + 0xda00: 0x6c099c20, 0xda01: 0x6c089c20, + 0xda09: 0x6c255820, 0xda0b: 0x6c099e20, + 0xda11: 0x6c01cc20, 0xda12: 0x6c12a220, + 0xda15: 0x6c255a20, + 0xda18: 0x6c123620, + 0xda1f: 0x6c0cc620, + 0xda21: 0x6c256020, 0xda23: 0x6c256220, + 0xda24: 0x6c117620, 0xda26: 0x6c0b4620, 0xda27: 0x6c255c20, + 0xda29: 0x6c0e7620, + 0xda2c: 0x6c255e20, + 0xda30: 0x6c0aa420, + 0xda3b: 0x6c007820, + // Block 0x369, offset 0xda40 + 0xda40: 0x6c03be20, + 0xda48: 0x6c256420, 0xda4b: 0x6c0f6020, + 0xda4d: 0x6c256620, 0xda4e: 0x6c0c0e20, + 0xda54: 0x6c14aa20, 0xda57: 0x6c126220, + 0xda58: 0x6c256820, 0xda59: 0x6c256a20, 0xda5a: 0x6c0e5e20, + 0xda5c: 0x6c165620, 0xda5f: 0x6c256e20, + 0xda60: 0x6c256c20, + 0xda6e: 0x6c096e20, + 0xda71: 0x6c257220, 0xda72: 0x6c00a020, + 0xda77: 0x6c257820, + 0xda7b: 0x6c257420, + 0xda7c: 0x6c01e020, 0xda7d: 0x6c058020, 0xda7e: 0x6c257620, 0xda7f: 0x6c06e820, + // Block 0x36a, offset 0xda80 + 0xda80: 0x6c074020, 0xda82: 0x6c13a420, 0xda83: 0x6c257a20, + 0xda86: 0x6c143c20, + 0xda89: 0x6c257e20, + 0xda8d: 0x6c0c2220, 0xda8e: 0x6c011a20, 0xda8f: 0x6c01ac20, + 0xda90: 0x6c001820, + 0xda97: 0x6c257c20, + 0xdaa1: 0x6c258020, 0xdaa2: 0x6c258220, 0xdaa3: 0x6c0af620, + 0xdaa9: 0x6c258420, 0xdaab: 0x6c029220, + 0xdab0: 0x6c258820, + 0xdab4: 0x6c05b820, 0xdab6: 0x6c043820, + 0xdab9: 0x6c258a20, 0xdaba: 0x6c051220, + 0xdabd: 0x6c258c20, 0xdabf: 0x6c0c7820, + // Block 0x36b, offset 0xdac0 + 0xdac1: 0x6c108220, 0xdac3: 0x6c0c4020, + 0xdac4: 0x6c080220, + 0xdac8: 0x6c258e20, + 0xdad2: 0x6c0e7820, 0xdad3: 0x6c0d1220, + 0xdad5: 0x6c259220, 0xdad6: 0x6c259620, 0xdad7: 0x6c259020, + 0xdad8: 0x6c259420, + 0xdadf: 0x6c052820, + 0xdae9: 0x6c259820, 0xdaea: 0x6c053020, + 0xdaee: 0x6c043a20, 0xdaef: 0x6c15b020, + 0xdaf0: 0x6c259c20, + 0xdaf6: 0x6c259e20, + 0xdafa: 0x6c00d820, + 0xdaff: 0x6c25a420, + // Block 0x36c, offset 0xdb00 + 0xdb03: 0x6c02e020, + 0xdb04: 0x6c25a220, 0xdb05: 0x6c25a020, 0xdb07: 0x6c25a820, + 0xdb08: 0x6c259a20, 0xdb0a: 0x6c25aa20, 0xdb0b: 0x6c161a20, + 0xdb0d: 0x6c25ac20, 0xdb0f: 0x6c25ae20, + 0xdb12: 0x6c1ac220, 0xdb13: 0x6c25b220, + 0xdb15: 0x6c25b020, + 0xdb19: 0x6c25b420, 0xdb1a: 0x6c25b620, + 0xdb1c: 0x6c163220, 0xdb1d: 0x6c25b820, 0xdb1f: 0x6c2f4820, + 0xdb20: 0x6c0aa620, 0xdb21: 0x6c25ba20, 0xdb22: 0x6c25bc20, 0xdb23: 0x6c09fa20, + 0xdb25: 0x6c105820, 0xdb26: 0x6c25be20, + 0xdb2a: 0x6c0e0420, + 0xdb2d: 0x6c25c020, 0xdb2f: 0x6c0e2c20, + 0xdb30: 0x6c25c220, + 0xdb36: 0x6c047220, + 0xdb38: 0x6c182420, 0xdb39: 0x6c0e6e20, 0xdb3a: 0x6c08f620, + 0xdb3f: 0x6c034020, + // Block 0x36d, offset 0xdb40 + 0xdb42: 0x6c25c420, + 0xdb44: 0x6c25de20, 0xdb46: 0x6c25ca20, + 0xdb48: 0x6c043c20, 0xdb4a: 0x6c25c820, 0xdb4b: 0x6c25e220, + 0xdb4f: 0x6c25c620, + 0xdb51: 0x6c0aa820, + 0xdb58: 0x6c25ce20, 0xdb59: 0x6c25d020, 0xdb5b: 0x6c0f8220, + 0xdb5e: 0x6c25d220, + 0xdb60: 0x6c02b020, + 0xdb65: 0x6c0b7820, 0xdb66: 0x6c12e420, + 0xdb68: 0x6c25d620, + 0xdb6c: 0x6c0dc820, + 0xdb73: 0x6c25cc20, + 0xdb75: 0x6c25d420, 0xdb76: 0x6c25d820, + 0xdb79: 0x6c080e20, + // Block 0x36e, offset 0xdb80 + 0xdb85: 0x6c25e620, 0xdb86: 0x6c127820, + 0xdb88: 0x6c11ac20, 0xdb89: 0x6c101e20, 0xdb8b: 0x6c04dc20, + 0xdb8c: 0x6c25e420, 0xdb8d: 0x6c25e020, 0xdb8f: 0x6c11ca20, + 0xdb90: 0x6c25da20, 0xdb91: 0x6c0e7020, 0xdb92: 0x6c102220, + 0xdb94: 0x6c102020, 0xdb96: 0x6c080420, + 0xdb9d: 0x6c260a20, + 0xdba5: 0x6c25ea20, 0xdba7: 0x6c25ee20, + 0xdbac: 0x6c25f420, 0xdbae: 0x6c25f620, + 0xdbb0: 0x6c25f020, 0xdbb1: 0x6c25f220, + 0xdbb4: 0x6c25ec20, 0xdbb5: 0x6c25e820, + 0xdbba: 0x6c25dc20, + // Block 0x36f, offset 0xdbc0 + 0xdbc6: 0x6c137620, 0xdbc7: 0x6c01e220, + 0xdbcb: 0x6c260420, + 0xdbcd: 0x6c25fe20, 0xdbcf: 0x6c260820, + 0xdbd2: 0x6c260620, + 0xdbd4: 0x6c118a20, 0xdbd5: 0x6c149e20, 0xdbd7: 0x6c084a20, + 0xdbd8: 0x6c25fa20, 0xdbd9: 0x6c260c20, 0xdbda: 0x6c260220, + 0xdbdc: 0x6c260020, 0xdbdd: 0x6c25f820, 0xdbdf: 0x6c25fc20, + 0xdbe1: 0x6c034220, + 0xdbea: 0x6c0e2e20, + 0xdbed: 0x6c0c7a20, + 0xdbf1: 0x6c11a420, + 0xdbf4: 0x6c261620, + 0xdbf8: 0x6c11a820, + // Block 0x370, offset 0xdc00 + 0xdc00: 0x6c0c4220, 0xdc01: 0x6c261020, + 0xdc04: 0x6c11fe20, 0xdc06: 0x6c261820, 0xdc07: 0x6c137e20, + 0xdc09: 0x6c0e6a20, 0xdc0b: 0x6c260e20, + 0xdc0c: 0x6c261220, 0xdc0f: 0x6c261420, + 0xdc1d: 0x6c261a20, + 0xdc20: 0x6c091820, + 0xdc24: 0x6c107420, 0xdc25: 0x6c262420, 0xdc26: 0x6c262220, + 0xdc29: 0x6c261c20, + 0xdc2d: 0x6c16f020, + 0xdc33: 0x6c262e20, + 0xdc36: 0x6c263620, 0xdc37: 0x6c263020, + // Block 0x371, offset 0xdc40 + 0xdc40: 0x6c262820, + 0xdc47: 0x6c262a20, + 0xdc4d: 0x6c263420, + 0xdc51: 0x6c261e20, 0xdc52: 0x6c190c20, 0xdc53: 0x6c262c20, + 0xdc54: 0x6c262020, 0xdc57: 0x6c263220, + 0xdc5f: 0x6c263e20, + 0xdc61: 0x6c034420, 0xdc63: 0x6c263820, + 0xdc67: 0x6c263a20, + 0xdc6a: 0x6c263c20, 0xdc6b: 0x6c264220, + 0xdc77: 0x6c264020, + 0xdc78: 0x6c124c20, + 0xdc7d: 0x6c264420, 0xdc7e: 0x6c16c020, 0xdc7f: 0x6c13b220, + // Block 0x372, offset 0xdc80 + 0xdc80: 0x6c264e20, 0xdc83: 0x6c264820, + 0xdc8c: 0x6c264620, 0xdc8d: 0x6c0c2420, 0xdc8f: 0x6c264c20, + 0xdc90: 0x6c265020, + 0xdc94: 0x6c264a20, 0xdc96: 0x6c265820, + 0xdc98: 0x6c265220, + 0xdc9f: 0x6c265420, + 0xdca0: 0x6c262620, + 0xdca4: 0x6c265620, 0xdca5: 0x6c265a20, + 0xdcac: 0x6c265c20, + 0xdcb3: 0x6c136420, + 0xdcb5: 0x6c265e20, + 0xdcbe: 0x6c151420, + // Block 0x373, offset 0xdcc0 + 0xdcc1: 0x6c04c420, 0xdcc2: 0x6c053620, 0xdcc3: 0x6c266020, + 0xdcc9: 0x6c134020, 0xdccb: 0x6c0b9420, + 0xdccd: 0x6c14b020, + 0xdcd0: 0x6c266220, 0xdcd2: 0x6c162e20, + 0xdcd5: 0x6c118c20, 0xdcd7: 0x6c0cc820, + 0xdcd8: 0x6c110c20, 0xdcdb: 0x6c09e620, + 0xdcdf: 0x6c004020, + 0xdce1: 0x6c266c20, 0xdce2: 0x6c266820, + 0xdce4: 0x6c266420, 0xdce5: 0x6c02f220, 0xdce7: 0x6c0aaa20, + 0xdce8: 0x6c266e20, 0xdceb: 0x6c266a20, + 0xdced: 0x6c266620, 0xdcee: 0x6c267620, + 0xdcf1: 0x6c267420, 0xdcf2: 0x6c267220, 0xdcf3: 0x6c267020, + 0xdcf9: 0x6c267820, + 0xdcfd: 0x6c267a20, 0xdcfe: 0x6c0bf420, + // Block 0x374, offset 0xdd00 + 0xdd00: 0x6c267c20, 0xdd02: 0x6c268020, + 0xdd05: 0x6c267e20, + 0xdd0a: 0x6c064420, + 0xdd0e: 0x6c0cac20, + 0xdd12: 0x6c268420, + 0xdd16: 0x6c102420, + 0xdd18: 0x6c268220, + 0xdd1c: 0x6c268620, 0xdd1e: 0x6c134220, 0xdd1f: 0x6c0d1420, + 0xdd20: 0x6c06ea20, 0xdd22: 0x6c268820, + 0xdd27: 0x6c165820, + 0xdd2f: 0x6c268c20, + 0xdd32: 0x6c268e20, + 0xdd34: 0x6c269020, 0xdd36: 0x6c269220, + 0xdd38: 0x6c089e20, 0xdd3a: 0x6c269420, 0xdd3b: 0x6c058220, + 0xdd3e: 0x6c044020, + // Block 0x375, offset 0xdd40 + 0xdd40: 0x6c03c020, 0xdd42: 0x6c269820, + 0xdd44: 0x6c153620, 0xdd45: 0x6c06ec20, 0xdd46: 0x6c269620, + 0xdd4a: 0x6c269e20, 0xdd4b: 0x6c151c20, + 0xdd4d: 0x6c111c20, + 0xdd50: 0x6c128220, + 0xdd54: 0x6c0a1220, 0xdd55: 0x6c269c20, 0xdd57: 0x6c093620, + 0xdd58: 0x6c06ee20, 0xdd59: 0x6c08a020, 0xdd5a: 0x6c043e20, 0xdd5b: 0x6c134420, + 0xdd5c: 0x6c269a20, + 0xdd60: 0x6c0cca20, 0xdd61: 0x6c141820, 0xdd62: 0x6c080620, + 0xdd6b: 0x6c08a220, + 0xdd6c: 0x6c0f2a20, 0xdd6e: 0x6c26a420, 0xdd6f: 0x6c168620, + 0xdd70: 0x6c07ca20, 0xdd72: 0x6c26a620, 0xdd73: 0x6c0b4820, + 0xdd75: 0x6c26aa20, + 0xdd79: 0x6c0aac20, 0xdd7a: 0x6c077820, + 0xdd7f: 0x6c26a820, + // Block 0x376, offset 0xdd80 + 0xdd82: 0x6c09a020, 0xdd83: 0x6c061c20, + 0xdd84: 0x6c0ccc20, 0xdd85: 0x6c26a020, 0xdd86: 0x6c26ac20, + 0xdd8b: 0x6c26a220, + 0xdd8c: 0x6c058420, 0xdd8e: 0x6c26b220, 0xdd8f: 0x6c26ba20, + 0xdd90: 0x6c05ba20, + 0xdd96: 0x6c26b020, + 0xdd9b: 0x6c26c220, + 0xdd9e: 0x6c06f020, + 0xdda1: 0x6c15e620, 0xdda2: 0x6c003820, 0xdda3: 0x6c26bc20, + 0xdda6: 0x6c044220, + 0xdda8: 0x6c26b620, + 0xddae: 0x6c26b820, + 0xddb1: 0x6c102620, 0xddb2: 0x6c26b420, 0xddb3: 0x6c26ae20, + 0xddb5: 0x6c024420, 0xddb6: 0x6c0c4820, + 0xddb9: 0x6c05f020, + 0xddbd: 0x6c26c620, + // Block 0x377, offset 0xddc0 + 0xddc9: 0x6c26c020, + 0xddcf: 0x6c26c420, + 0xddd3: 0x6c26be20, + 0xddd9: 0x6c058620, 0xddda: 0x6c0d5e20, 0xdddb: 0x6c26c820, + 0xdddc: 0x6c0d1820, 0xdddf: 0x6c26e220, + 0xdde2: 0x6c26da20, 0xdde3: 0x6c26ce20, + 0xddeb: 0x6c26d620, + 0xddec: 0x6c098420, 0xdded: 0x6c007a20, 0xddee: 0x6c26cc20, 0xddef: 0x6c26dc20, + 0xddf0: 0x6c26e420, 0xddf1: 0x6c06f220, 0xddf2: 0x6c14fc20, + 0xddf4: 0x6c0f1c20, 0xddf5: 0x6c26d020, + 0xddf8: 0x6c26e020, 0xddfa: 0x6c26ca20, 0xddfb: 0x6c0e3020, + 0xddfd: 0x6c26d420, 0xddfe: 0x6c003a20, 0xddff: 0x6c14e420, + // Block 0x378, offset 0xde00 + 0xde07: 0x6c26d220, + 0xde0a: 0x6c04de20, 0xde0b: 0x6c123820, + 0xde0f: 0x6c0d1620, + 0xde11: 0x6c166820, 0xde12: 0x6c0a2a20, + 0xde15: 0x6c273220, + 0xde18: 0x6c26e620, 0xde1a: 0x6c0c7c20, + 0xde1c: 0x6c26de20, 0xde1d: 0x6c26e820, 0xde1e: 0x6c26ec20, + 0xde20: 0x6c0f6220, 0xde21: 0x6c26f220, + 0xde24: 0x6c26ea20, + 0xde28: 0x6c138020, 0xde29: 0x6c034620, + 0xde2c: 0x6c14e620, 0xde2f: 0x6c007c20, + 0xde32: 0x6c26f020, + 0xde34: 0x6c16c220, + 0xde3b: 0x6c26ee20, + // Block 0x379, offset 0xde40 + 0xde41: 0x6c015a20, + 0xde44: 0x6c10c020, 0xde45: 0x6c26f420, + 0xde49: 0x6c270220, 0xde4a: 0x6c26f620, 0xde4b: 0x6c270420, + 0xde52: 0x6c26fc20, + 0xde5b: 0x6c119a20, + 0xde5e: 0x6c092420, 0xde5f: 0x6c270020, + 0xde61: 0x6c26fa20, 0xde62: 0x6c270620, 0xde63: 0x6c26f820, + 0xde66: 0x6c09d420, + 0xde6b: 0x6c13de20, + 0xde6e: 0x6c09e420, + 0xde71: 0x6c26fe20, 0xde72: 0x6c271620, + 0xde75: 0x6c270e20, 0xde77: 0x6c271420, + 0xde79: 0x6c271020, 0xde7a: 0x6c271820, 0xde7b: 0x6c270c20, + 0xde7d: 0x6c26d820, 0xde7e: 0x6c0c2620, + // Block 0x37a, offset 0xde80 + 0xde81: 0x6c11f620, 0xde83: 0x6c271220, + 0xde86: 0x6c270820, + 0xde8a: 0x6c0c7e20, 0xde8b: 0x6c058820, + 0xde8d: 0x6c09a220, + 0xde94: 0x6c0b0e20, 0xde95: 0x6c0ca820, 0xde96: 0x6c271e20, + 0xde99: 0x6c272220, 0xde9a: 0x6c272420, + 0xde9d: 0x6c271c20, 0xde9e: 0x6c272020, + 0xdea6: 0x6c270a20, 0xdea7: 0x6c271a20, + 0xdea9: 0x6c272a20, 0xdeaa: 0x6c272820, + 0xdead: 0x6c148820, + 0xdeb0: 0x6c053a20, + 0xdeb9: 0x6c272620, 0xdebb: 0x6c272e20, + 0xdebc: 0x6c272c20, 0xdebd: 0x6c273420, 0xdebf: 0x6c273820, + // Block 0x37b, offset 0xdec0 + 0xdec2: 0x6c084c20, 0xdec3: 0x6c273020, + 0xdec8: 0x6c273a20, 0xdec9: 0x6c273c20, + 0xdecc: 0x6c273e20, 0xdece: 0x6c274a20, 0xdecf: 0x6c0fa220, + 0xded0: 0x6c274220, 0xded2: 0x6c274020, 0xded3: 0x6c274420, + 0xded4: 0x6c274620, 0xded6: 0x6c274820, + 0xdedb: 0x6c274c20, + 0xdedc: 0x6c274e20, + // Block 0x37c, offset 0xdf00 + 0xdf36: 0x6c034820, + 0xdf38: 0x6c275020, 0xdf3a: 0x6c275220, + // Block 0x37d, offset 0xdf40 + 0xdf45: 0x6c275420, + 0xdf4c: 0x6c275620, 0xdf4d: 0x6c275820, 0xdf4e: 0x6c275a20, + 0xdf50: 0x6c275c20, 0xdf51: 0x6c275e20, + 0xdf54: 0x6c276220, 0xdf55: 0x6c276020, + 0xdf58: 0x6c276420, + 0xdf5f: 0x6c276620, + 0xdf60: 0x6c276820, + 0xdf67: 0x6c276e20, + 0xdf68: 0x6c276a20, 0xdf69: 0x6c276c20, 0xdf6a: 0x6c07da20, 0xdf6b: 0x6c058a20, + 0xdf6e: 0x6c0e6020, + 0xdf70: 0x6c11c620, 0xdf72: 0x6c0a2c20, + 0xdf75: 0x6c113e20, 0xdf77: 0x6c123a20, + 0xdf78: 0x6c277020, 0xdf79: 0x6c1da420, + // Block 0x37e, offset 0xdf80 + 0xdf82: 0x6c277220, 0xdf83: 0x6c277620, + 0xdf85: 0x6c15d620, 0xdf86: 0x6c277420, 0xdf87: 0x6c277a20, + 0xdf88: 0x6c277820, 0xdf8a: 0x6c15b220, + 0xdf8c: 0x6c277c20, 0xdf8e: 0x6c125c20, + 0xdf94: 0x6c277e20, + 0xdf9a: 0x6c278420, + 0xdf9d: 0x6c278220, 0xdf9e: 0x6c278020, + 0xdfa3: 0x6c278620, + 0xdfa4: 0x6c054820, + 0xdfa8: 0x6c0c8020, 0xdfa9: 0x6c03ee20, + 0xdfae: 0x6c278e20, 0xdfaf: 0x6c278820, + 0xdfb2: 0x6c278a20, + 0xdfb6: 0x6c279020, + 0xdfb8: 0x6c279220, 0xdfb9: 0x6c278c20, + 0xdfbd: 0x6c00ce20, + // Block 0x37f, offset 0xdfc0 + 0xdfc1: 0x6c018620, + 0xdfc5: 0x6c279620, 0xdfc6: 0x6c279820, + 0xdfca: 0x6c279a20, + 0xdfcc: 0x6c15d020, + 0xdfd2: 0x6c09a420, + 0xdfd4: 0x6c279e20, 0xdfd5: 0x6c279c20, + 0xdfe0: 0x6c0b9620, 0xdfe1: 0x6c27a020, + 0xdfe6: 0x6c27a220, + 0xdfe9: 0x6c27a420, 0xdfeb: 0x6c037a20, + 0xdff0: 0x6c034a20, 0xdff3: 0x6c27a620, + 0xdff9: 0x6c27a820, 0xdffb: 0x6c144e20, + 0xdffc: 0x6c15d220, + // Block 0x380, offset 0xe000 + 0xe000: 0x6c15b420, 0xe001: 0x6c16f220, 0xe003: 0x6c06f620, + 0xe004: 0x6c27ae20, 0xe005: 0x6c093820, 0xe006: 0x6c27ac20, + 0xe00b: 0x6c27b020, + 0xe00c: 0x6c08e220, + 0xe010: 0x6c0d9a20, 0xe012: 0x6c27b220, + 0xe015: 0x6c06f420, 0xe017: 0x6c14fe20, + 0xe018: 0x6c27b420, 0xe019: 0x6c27b620, + 0xe01c: 0x6c27b820, + 0xe021: 0x6c27ba20, + 0xe028: 0x6c27bc20, + 0xe033: 0x6c08e420, + 0xe036: 0x6c152a20, + 0xe03b: 0x6c27c020, + 0xe03d: 0x6c0e3220, 0xe03f: 0x6c27be20, + // Block 0x381, offset 0xe040 + 0xe046: 0x6c27c420, + 0xe04a: 0x6c27c220, + 0xe052: 0x6c27c620, + 0xe056: 0x6c0bf620, + 0xe058: 0x6c27c820, 0xe05a: 0x6c27ca20, + 0xe05e: 0x6c134a20, 0xe05f: 0x6c27cc20, + 0xe061: 0x6c0d1a20, 0xe062: 0x6c27ce20, + 0xe068: 0x6c27d020, + 0xe06f: 0x6c16c420, + 0xe070: 0x6c27d620, 0xe072: 0x6c27d420, 0xe073: 0x6c27d220, + 0xe074: 0x6c0ed020, 0xe076: 0x6c27d820, 0xe077: 0x6c0b1020, + 0xe079: 0x6c27da20, + 0xe07d: 0x6c27dc20, 0xe07e: 0x6c16f420, 0xe07f: 0x6c27de20, + // Block 0x382, offset 0xe080 + 0xe084: 0x6c27e020, 0xe085: 0x6c27e420, 0xe086: 0x6c27e220, 0xe087: 0x6c11aa20, + 0xe089: 0x6c10da20, 0xe08b: 0x6c170020, + 0xe08c: 0x6c11b220, + 0xe093: 0x6c27e820, + 0xe096: 0x6c0aae20, + 0xe098: 0x6c127020, 0xe09a: 0x6c27ea20, 0xe09b: 0x6c27e620, + 0xe09d: 0x6c034c20, + 0xe0a1: 0x6c064820, 0xe0a2: 0x6c08a420, + 0xe0a5: 0x6c123c20, + 0xe0a9: 0x6c05f420, 0xe0aa: 0x6c141a20, + 0xe0ac: 0x6c27f020, 0xe0ad: 0x6c27ec20, 0xe0af: 0x6c06f820, + 0xe0b1: 0x6c06fa20, 0xe0b2: 0x6c009220, + 0xe0b4: 0x6c07e820, + 0xe0ba: 0x6c115620, + // Block 0x383, offset 0xe0c0 + 0xe0c3: 0x6c007e20, + 0xe0c4: 0x6c27fa20, 0xe0c6: 0x6c0e3420, + 0xe0cc: 0x6c115420, 0xe0ce: 0x6c0dae20, + 0xe0d6: 0x6c27fe20, + 0xe0d9: 0x6c27f620, 0xe0da: 0x6c27fc20, 0xe0db: 0x6c27f220, + 0xe0dd: 0x6c27f820, 0xe0de: 0x6c13e020, + 0xe0e1: 0x6c064a20, + 0xe0e4: 0x6c00ba20, 0xe0e5: 0x6c27f420, + 0xe0ef: 0x6c280220, + 0xe0f1: 0x6c280420, + 0xe0f4: 0x6c105a20, + 0xe0f8: 0x6c049e20, + 0xe0fc: 0x6c281a20, 0xe0fd: 0x6c111e20, + // Block 0x384, offset 0xe100 + 0xe102: 0x6c08a620, + 0xe105: 0x6c04a020, 0xe106: 0x6c0c1020, 0xe107: 0x6c171020, + 0xe108: 0x6c14ac20, 0xe109: 0x6c280020, 0xe10a: 0x6c0c2820, + 0xe11a: 0x6c041220, 0xe11b: 0x6c280620, + 0xe123: 0x6c280a20, + 0xe129: 0x6c280820, + 0xe12f: 0x6c280c20, + 0xe131: 0x6c0e0020, 0xe133: 0x6c112020, + 0xe139: 0x6c0ed220, + 0xe13e: 0x6c281420, + // Block 0x385, offset 0xe140 + 0xe146: 0x6c281220, + 0xe14b: 0x6c280e20, + 0xe14e: 0x6c0b6e20, + 0xe150: 0x6c12e620, 0xe151: 0x6c281820, 0xe153: 0x6c281620, + 0xe154: 0x6c06fc20, 0xe155: 0x6c172a20, + 0xe15f: 0x6c283820, + 0xe165: 0x6c282020, 0xe166: 0x6c282220, + 0xe16b: 0x6c097020, + 0xe16e: 0x6c281e20, + 0xe170: 0x6c074c20, 0xe171: 0x6c281c20, + 0xe174: 0x6c282420, + 0xe178: 0x6c0ed420, 0xe179: 0x6c131c20, 0xe17a: 0x6c0c8220, + 0xe17f: 0x6c0db020, + // Block 0x386, offset 0xe180 + 0xe180: 0x6c282c20, 0xe182: 0x6c282e20, 0xe183: 0x6c282620, + 0xe188: 0x6c282820, 0xe18a: 0x6c282a20, + 0xe18f: 0x6c06fe20, + 0xe193: 0x6c283a20, + 0xe195: 0x6c283220, + 0xe19a: 0x6c12e820, + 0xe19c: 0x6c146c20, 0xe19d: 0x6c126c20, + 0xe1a0: 0x6c283020, 0xe1a3: 0x6c283620, + 0xe1a4: 0x6c283420, + 0xe1a8: 0x6c141c20, 0xe1a9: 0x6c283c20, + 0xe1b0: 0x6c283e20, 0xe1b3: 0x6c0caa20, + 0xe1b5: 0x6c284020, + 0xe1b8: 0x6c284420, 0xe1ba: 0x6c284c20, + 0xe1bd: 0x6c284620, 0xe1be: 0x6c284220, 0xe1bf: 0x6c112220, + // Block 0x387, offset 0xe1c0 + 0xe1c0: 0x6c284820, 0xe1c2: 0x6c284a20, + 0xe1c6: 0x6c019c20, + 0xe1c8: 0x6c285820, 0xe1c9: 0x6c284e20, + 0xe1cd: 0x6c285020, + 0xe1d1: 0x6c285220, 0xe1d3: 0x6c0d3a20, + 0xe1d8: 0x6c285620, 0xe1d9: 0x6c285420, 0xe1da: 0x6c285a20, + 0xe1df: 0x6c285c20, + 0xe1e0: 0x6c285e20, 0xe1e3: 0x6c0b4a20, + 0xe1e5: 0x6c020a20, 0xe1e7: 0x6c286020, + 0xe1e8: 0x6c167620, 0xe1ea: 0x6c08e620, + 0xe1ed: 0x6c09a620, + 0xe1f3: 0x6c08a820, + 0xe1f4: 0x6c0e6220, + 0xe1fa: 0x6c286220, 0xe1fb: 0x6c286420, + 0xe1fc: 0x6c00de20, 0xe1fe: 0x6c286620, + // Block 0x388, offset 0xe200 + 0xe201: 0x6c286820, 0xe202: 0x6c286a20, + 0xe205: 0x6c286c20, 0xe207: 0x6c286e20, + 0xe208: 0x6c04a220, 0xe209: 0x6c1e9620, 0xe20a: 0x6c287020, + 0xe20c: 0x6c0c4a20, 0xe20d: 0x6c287220, 0xe20e: 0x6c092620, + 0xe210: 0x6c287420, 0xe212: 0x6c174a20, + 0xe216: 0x6c287620, 0xe217: 0x6c139420, + 0xe218: 0x6c036820, 0xe21b: 0x6c0c8420, + 0xe21c: 0x6c09fc20, 0xe21e: 0x6c12fe20, 0xe21f: 0x6c09a820, + 0xe229: 0x6c287820, 0xe22a: 0x6c070020, 0xe22b: 0x6c287a20, + 0xe22c: 0x6c11f820, 0xe22e: 0x6c289620, + 0xe233: 0x6c287e20, + 0xe235: 0x6c0d8a20, 0xe236: 0x6c118e20, 0xe237: 0x6c061e20, + 0xe238: 0x6c287c20, 0xe239: 0x6c0c8620, + // Block 0x389, offset 0xe240 + 0xe240: 0x6c288020, + 0xe247: 0x6c0f6420, + 0xe258: 0x6c288420, 0xe259: 0x6c288220, 0xe25a: 0x6c288820, + 0xe25d: 0x6c288620, 0xe25f: 0x6c288a20, + 0xe262: 0x6c288e20, + 0xe264: 0x6c288c20, 0xe266: 0x6c034e20, + 0xe268: 0x6c289020, 0xe26a: 0x6c289220, 0xe26b: 0x6c289420, + 0xe26e: 0x6c077a20, 0xe26f: 0x6c165a20, + 0xe271: 0x6c289820, 0xe272: 0x6c0b1220, + 0xe276: 0x6c015c20, 0xe277: 0x6c289a20, + 0xe278: 0x6c289c20, + 0xe27e: 0x6c289e20, + // Block 0x38a, offset 0xe280 + 0xe28b: 0x6c00a420, + 0xe28d: 0x6c28a020, + 0xe292: 0x6c28a220, + 0xe299: 0x6c12ea20, + 0xe29d: 0x6c091e20, 0xe29f: 0x6c28a620, + 0xe2a5: 0x6c024620, 0xe2a6: 0x6c002420, + 0xe2ab: 0x6c28a420, + 0xe2ac: 0x6c28aa20, 0xe2ad: 0x6c114020, 0xe2af: 0x6c0b4c20, + 0xe2b1: 0x6c01e420, 0xe2b3: 0x6c13e220, + 0xe2b8: 0x6c059e20, 0xe2b9: 0x6c04e020, 0xe2bb: 0x6c28a820, + 0xe2bd: 0x6c020c20, + // Block 0x38b, offset 0xe2c0 + 0xe2c5: 0x6c02f620, + 0xe2d1: 0x6c015e20, 0xe2d2: 0x6c28b220, 0xe2d3: 0x6c169c20, + 0xe2d4: 0x6c0db220, 0xe2d7: 0x6c12a420, + 0xe2d9: 0x6c28ca20, 0xe2db: 0x6c01e620, + 0xe2dc: 0x6c28c620, 0xe2de: 0x6c28c220, 0xe2df: 0x6c28b020, + 0xe2e1: 0x6c28ac20, 0xe2e3: 0x6c28ae20, + 0xe2e5: 0x6c095620, 0xe2e6: 0x6c050020, 0xe2e7: 0x6c0ea220, + 0xe2eb: 0x6c108a20, + 0xe2f1: 0x6c011e20, 0xe2f3: 0x6c28b620, + 0xe2f4: 0x6c28b420, + 0xe2f9: 0x6c28c020, 0xe2fa: 0x6c28b820, 0xe2fb: 0x6c28be20, + // Block 0x38c, offset 0xe300 + 0xe302: 0x6c14f020, 0xe303: 0x6c28bc20, + 0xe304: 0x6c01e820, 0xe305: 0x6c02ee20, 0xe306: 0x6c28c420, + 0xe309: 0x6c28c820, + 0xe30e: 0x6c058c20, + 0xe316: 0x6c28d020, 0xe317: 0x6c28e220, + 0xe318: 0x6c28e420, + 0xe31c: 0x6c001620, + 0xe323: 0x6c28f220, + 0xe328: 0x6c00a220, 0xe32b: 0x6c28e020, + 0xe32f: 0x6c28de20, + 0xe331: 0x6c28d420, 0xe332: 0x6c28d220, + 0xe334: 0x6c28ce20, 0xe335: 0x6c28cc20, 0xe336: 0x6c0e7a20, + 0xe338: 0x6c0dee20, 0xe339: 0x6c28d820, + // Block 0x38d, offset 0xe340 + 0xe340: 0x6c28d620, + 0xe345: 0x6c28dc20, + 0xe349: 0x6c0d1c20, 0xe34a: 0x6c058e20, + 0xe34f: 0x6c00fe20, + 0xe350: 0x6c28da20, 0xe352: 0x6c070220, + 0xe358: 0x6c0d1e20, + 0xe373: 0x6c28fe20, + 0xe375: 0x6c290020, 0xe377: 0x6c01ea20, + 0xe37b: 0x6c019420, + 0xe37c: 0x6c28fa20, + // Block 0x38e, offset 0xe380 + 0xe385: 0x6c28e620, 0xe387: 0x6c28f620, + 0xe389: 0x6c290420, 0xe38a: 0x6c28f820, + 0xe38e: 0x6c28f420, + 0xe393: 0x6c28ba20, + 0xe396: 0x6c28f020, + 0xe39a: 0x6c28e820, + 0xe39e: 0x6c035020, 0xe39f: 0x6c28ec20, + 0xe3a0: 0x6c290220, 0xe3a2: 0x6c28ee20, + 0xe3a8: 0x6c290620, 0xe3aa: 0x6c28ea20, 0xe3ab: 0x6c119c20, + 0xe3b1: 0x6c15de20, + 0xe3b5: 0x6c28fc20, + 0xe3bd: 0x6c292820, + // Block 0x38f, offset 0xe3c0 + 0xe3c1: 0x6c291820, + 0xe3c5: 0x6c0bba20, + 0xe3ca: 0x6c03f820, + 0xe3cc: 0x6c04e220, 0xe3ce: 0x6c290e20, + 0xe3d3: 0x6c01ee20, + 0xe3d6: 0x6c0ab020, + 0xe3d8: 0x6c291420, + 0xe3dc: 0x6c07cc20, 0xe3df: 0x6c0fce20, + 0xe3e0: 0x6c291e20, + 0xe3e9: 0x6c13b420, 0xe3eb: 0x6c290c20, + 0xe3ef: 0x6c01ec20, + 0xe3f0: 0x6c064c20, 0xe3f1: 0x6c126e20, 0xe3f2: 0x6c292020, + 0xe3f4: 0x6c290820, 0xe3f7: 0x6c291a20, + 0xe3fb: 0x6c292e20, + 0xe3fd: 0x6c291020, + // Block 0x390, offset 0xe400 + 0xe403: 0x6c291220, + 0xe404: 0x6c105c20, 0xe407: 0x6c291c20, + 0xe40b: 0x6c291620, + 0xe40c: 0x6c13e420, 0xe40d: 0x6c292220, 0xe40e: 0x6c008020, + 0xe413: 0x6c290a20, + 0xe420: 0x6c292620, 0xe422: 0x6c292420, + 0xe429: 0x6c117a20, 0xe42a: 0x6c293220, + 0xe42c: 0x6c294820, + 0xe431: 0x6c02f020, + 0xe435: 0x6c294e20, + 0xe438: 0x6c292a20, + 0xe43c: 0x6c293420, 0xe43d: 0x6c15e820, + // Block 0x391, offset 0xe440 + 0xe446: 0x6c294620, + 0xe449: 0x6c15b620, + 0xe44e: 0x6c161c20, + 0xe457: 0x6c0ea420, + 0xe45b: 0x6c02ca20, + 0xe461: 0x6c130020, 0xe462: 0x6c295220, 0xe463: 0x6c102a20, + 0xe466: 0x6c002220, + 0xe469: 0x6c294420, 0xe46b: 0x6c293c20, + 0xe46c: 0x6c0d2020, 0xe46d: 0x6c293020, 0xe46e: 0x6c294020, 0xe46f: 0x6c294a20, + 0xe471: 0x6c10fc20, + 0xe475: 0x6c001420, 0xe477: 0x6c293a20, + 0xe479: 0x6c294c20, 0xe47a: 0x6c130c20, + // Block 0x392, offset 0xe480 + 0xe482: 0x6c294220, + 0xe484: 0x6c293820, + 0xe48b: 0x6c0ab220, + 0xe490: 0x6c09aa20, + 0xe494: 0x6c08e820, + 0xe499: 0x6c150020, + 0xe49c: 0x6c12aa20, 0xe49f: 0x6c295820, + 0xe4a1: 0x6c296a20, + 0xe4ad: 0x6c293e20, + 0xe4b2: 0x6c02e220, + 0xe4b8: 0x6c0af820, 0xe4b9: 0x6c295420, 0xe4bb: 0x6c295e20, + 0xe4bc: 0x6c0d2220, 0xe4bf: 0x6c295620, + // Block 0x393, offset 0xe4c0 + 0xe4c1: 0x6c296420, + 0xe4c4: 0x6c0e7220, 0xe4c6: 0x6c296620, + 0xe4c9: 0x6c15b820, 0xe4ca: 0x6c295020, 0xe4cb: 0x6c026420, + 0xe4cd: 0x6c295c20, + 0xe4d0: 0x6c296220, 0xe4d1: 0x6c14a820, + 0xe4d6: 0x6c296820, + 0xe4d9: 0x6c295a20, 0xe4da: 0x6c296020, + 0xe4ec: 0x6c13e620, 0xe4ee: 0x6c16c620, + 0xe4f4: 0x6c297020, + 0xe4fc: 0x6c297e20, 0xe4ff: 0x6c296e20, + // Block 0x394, offset 0xe500 + 0xe500: 0x6c091620, + 0xe506: 0x6c292c20, + 0xe511: 0x6c137420, 0xe513: 0x6c149420, + 0xe514: 0x6c297c20, 0xe515: 0x6c297a20, 0xe517: 0x6c297220, + 0xe518: 0x6c297420, 0xe51a: 0x6c00e820, + 0xe51f: 0x6c297820, + 0xe521: 0x6c296c20, + 0xe526: 0x6c0f1a20, + 0xe52c: 0x6c297620, 0xe52d: 0x6c00bc20, + 0xe535: 0x6c0d3c20, + 0xe53d: 0x6c135e20, + // Block 0x395, offset 0xe540 + 0xe540: 0x6c298020, 0xe541: 0x6c298820, 0xe543: 0x6c121220, + 0xe548: 0x6c298620, 0xe549: 0x6c0ab420, 0xe54a: 0x6c092220, 0xe54b: 0x6c298c20, + 0xe54e: 0x6c04a420, + 0xe555: 0x6c298e20, 0xe557: 0x6c130e20, + 0xe558: 0x6c298420, 0xe55a: 0x6c293620, + 0xe563: 0x6c298220, + 0xe568: 0x6c172220, 0xe569: 0x6c102c20, 0xe56a: 0x6c130220, + 0xe56d: 0x6c299c20, + 0xe577: 0x6c29a820, + 0xe57e: 0x6c29aa20, + // Block 0x396, offset 0xe580 + 0xe580: 0x6c299020, + 0xe584: 0x6c119020, 0xe587: 0x6c29a420, + 0xe588: 0x6c299420, 0xe58a: 0x6c299820, + 0xe590: 0x6c29ac20, 0xe591: 0x6c299620, + 0xe594: 0x6c299e20, 0xe597: 0x6c016020, + 0xe599: 0x6c10b220, 0xe59b: 0x6c29a020, + 0xe59c: 0x6c29a620, + 0xe5a4: 0x6c299220, 0xe5a6: 0x6c0c8820, + 0xe5a8: 0x6c299a20, 0xe5a9: 0x6c082220, 0xe5aa: 0x6c0b4e20, 0xe5ab: 0x6c054420, + 0xe5ac: 0x6c153820, 0xe5ae: 0x6c154220, 0xe5af: 0x6c0a3020, + 0xe5b9: 0x6c29b420, 0xe5ba: 0x6c29b020, + // Block 0x397, offset 0xe5c0 + 0xe5c1: 0x6c172020, + 0xe5c9: 0x6c29ae20, + 0xe5cd: 0x6c15f620, 0xe5cf: 0x6c29b220, + 0xe5d0: 0x6c29b620, + 0xe5d5: 0x6c29b820, + 0xe5dc: 0x6c29be20, 0xe5dd: 0x6c29ba20, + 0xe5e4: 0x6c102e20, 0xe5e5: 0x6c29bc20, + 0xe5e9: 0x6c11fa20, 0xe5ea: 0x6c29a220, + 0xe5f7: 0x6c0a3220, + 0xe5f9: 0x6c29c020, 0xe5fa: 0x6c29ca20, 0xe5fb: 0x6c0d2420, + 0xe5fe: 0x6c29c820, + // Block 0x398, offset 0xe600 + 0xe602: 0x6c298a20, + 0xe606: 0x6c29cc20, 0xe607: 0x6c0cce20, + 0xe60a: 0x6c29c220, 0xe60b: 0x6c29c620, + 0xe613: 0x6c29c420, + 0xe616: 0x6c20d820, 0xe617: 0x6c20ba20, + 0xe61a: 0x6c29d020, + 0xe622: 0x6c29ce20, + 0xe62d: 0x6c15f820, 0xe62f: 0x6c249a20, + 0xe630: 0x6c29d220, + 0xe63f: 0x6c29d420, + // Block 0x399, offset 0xe640 + 0xe64d: 0x6c29d620, 0xe64e: 0x6c064e20, + 0xe650: 0x6c041420, + 0xe654: 0x6c29da20, 0xe655: 0x6c186020, + 0xe65a: 0x6c045620, + 0xe65c: 0x6c163c20, 0xe65e: 0x6c050e20, 0xe65f: 0x6c29dc20, + 0xe667: 0x6c29de20, + 0xe66b: 0x6c0e9020, + 0xe671: 0x6c29e020, + 0xe679: 0x6c10dc20, 0xe67b: 0x6c003420, + // Block 0x39a, offset 0xe680 + 0xe68a: 0x6c01fe20, 0xe68b: 0x6c29ea20, + 0xe68c: 0x6c29ec20, + 0xe693: 0x6c29e220, + 0xe695: 0x6c084e20, + 0xe6a3: 0x6c29e420, + 0xe6a4: 0x6c112820, + 0xe6a9: 0x6c29e620, 0xe6aa: 0x6c29e820, 0xe6ab: 0x6c29fc20, + 0xe6af: 0x6c29f020, + 0xe6b0: 0x6c29f620, + 0xe6b6: 0x6c29ee20, + // Block 0x39b, offset 0xe6c0 + 0xe6c4: 0x6c29f220, 0xe6c6: 0x6c29f420, 0xe6c7: 0x6c094020, + 0xe6c9: 0x6c29f820, 0xe6cb: 0x6c0e3620, + 0xe6cd: 0x6c059020, 0xe6ce: 0x6c027820, + 0xe6d4: 0x6c29fe20, + 0xe6d9: 0x6c027220, 0xe6db: 0x6c2a0820, + 0xe6de: 0x6c2a0020, 0xe6df: 0x6c2a0620, + 0xe6e4: 0x6c11d420, + 0xe6e9: 0x6c2a0220, + 0xe6ec: 0x6c2a0420, 0xe6ed: 0x6c12ac20, 0xe6ee: 0x6c121420, 0xe6ef: 0x6c2a0a20, + 0xe6f8: 0x6c0df220, 0xe6f9: 0x6c2a1e20, 0xe6fb: 0x6c2a1620, + 0xe6fe: 0x6c020e20, + // Block 0x39c, offset 0xe700 + 0xe700: 0x6c2a1220, 0xe702: 0x6c13e820, 0xe703: 0x6c2a1420, + 0xe706: 0x6c2a0e20, + 0xe708: 0x6c2a1020, 0xe709: 0x6c2a1a20, 0xe70a: 0x6c2a2020, + 0xe70d: 0x6c2a1c20, + 0xe711: 0x6c2a1820, 0xe712: 0x6c2a0c20, + 0xe718: 0x6c0e6420, 0xe71a: 0x6c2a2e20, + 0xe71c: 0x6c14a420, + 0xe725: 0x6c2a2a20, + 0xe729: 0x6c2a2c20, + 0xe734: 0x6c2a2220, 0xe737: 0x6c2a2620, + 0xe73b: 0x6c2a2820, + 0xe73f: 0x6c2a2420, + // Block 0x39d, offset 0xe740 + 0xe749: 0x6c0c4c20, 0xe74b: 0x6c16f620, + 0xe74c: 0x6c2a3620, 0xe74e: 0x6c2a3820, + 0xe753: 0x6c2a4420, + 0xe755: 0x6c0b1820, 0xe757: 0x6c2a3c20, + 0xe759: 0x6c2a4220, + 0xe75f: 0x6c2a3220, + 0xe760: 0x6c2a3020, 0xe763: 0x6c2a4620, + 0xe766: 0x6c01f020, + 0xe768: 0x6c2a3e20, 0xe76a: 0x6c2a4820, + 0xe76e: 0x6c2a4020, + 0xe774: 0x6c2a3a20, 0xe776: 0x6c0ed620, + 0xe778: 0x6c2a3420, + 0xe77f: 0x6c117420, + // Block 0x39e, offset 0xe780 + 0xe782: 0x6c2a5020, + 0xe78d: 0x6c158220, + 0xe79f: 0x6c2a4e20, + 0xe7a2: 0x6c2a4c20, + 0xe7ab: 0x6c2a5e20, + 0xe7af: 0x6c2a5220, + 0xe7b3: 0x6c2a6220, + 0xe7ba: 0x6c15d820, 0xe7bb: 0x6c2a6820, + 0xe7bd: 0x6c2a5620, + // Block 0x39f, offset 0xe7c0 + 0xe7c0: 0x6c2a5820, + 0xe7c4: 0x6c2a6020, 0xe7c6: 0x6c2a6620, 0xe7c7: 0x6c2a6420, + 0xe7cb: 0x6c2a5420, + 0xe7d0: 0x6c2a5a20, 0xe7d2: 0x6c2a7c20, + 0xe7e0: 0x6c2a6e20, + 0xe7ef: 0x6c2a6a20, + 0xe7f2: 0x6c2a6c20, + 0xe7f6: 0x6c2a7620, 0xe7f7: 0x6c2a7820, + 0xe7f9: 0x6c024820, 0xe7fb: 0x6c03f020, + 0xe7fe: 0x6c2a7420, + // Block 0x3a0, offset 0xe800 + 0xe805: 0x6c2a4a20, + 0xe80d: 0x6c2a7220, 0xe80e: 0x6c2a7a20, 0xe80f: 0x6c2a7020, + 0xe811: 0x6c2a7e20, + 0xe815: 0x6c2a8220, 0xe816: 0x6c2a8020, + 0xe821: 0x6c2a8620, 0xe822: 0x6c2a8420, 0xe823: 0x6c29fa20, + 0xe827: 0x6c2a8e20, + 0xe831: 0x6c2a8820, + 0xe836: 0x6c2a8a20, + 0xe839: 0x6c2a8c20, 0xe83b: 0x6c2a9020, + // Block 0x3a1, offset 0xe840 + 0xe840: 0x6c05bc20, 0xe842: 0x6c2a9420, + 0xe844: 0x6c2a9220, 0xe846: 0x6c09ac20, + 0xe84c: 0x6c070420, 0xe84d: 0x6c218020, + 0xe852: 0x6c2a9620, 0xe853: 0x6c09ee20, + 0xe857: 0x6c026620, + 0xe859: 0x6c2a9820, 0xe85b: 0x6c012020, + 0xe85d: 0x6c0ab620, 0xe85e: 0x6c2a9a20, + 0xe861: 0x6c070620, 0xe862: 0x6c2a9c20, 0xe863: 0x6c008220, + 0xe868: 0x6c129620, 0xe86b: 0x6c2a9e20, + 0xe870: 0x6c0b9820, 0xe872: 0x6c2aac20, + 0xe875: 0x6c2aa620, 0xe877: 0x6c0e9220, + 0xe87d: 0x6c2aa820, 0xe87e: 0x6c2aa220, 0xe87f: 0x6c04e420, + // Block 0x3a2, offset 0xe880 + 0xe881: 0x6c2aa020, 0xe882: 0x6c2aae20, + 0xe888: 0x6c055020, 0xe88b: 0x6c0db420, + 0xe88d: 0x6c2aba20, + 0xe892: 0x6c2ab220, + 0xe896: 0x6c0d6220, 0xe897: 0x6c2ab020, + 0xe899: 0x6c2ab620, + 0xe89e: 0x6c2aa420, + 0xe8a2: 0x6c2ab820, + 0xe8a4: 0x6c2abc20, + 0xe8ab: 0x6c123e20, + 0xe8ae: 0x6c2ab420, + 0xe8b0: 0x6c2abe20, 0xe8b1: 0x6c2ac220, + 0xe8b4: 0x6c064620, 0xe8b5: 0x6c2aaa20, 0xe8b7: 0x6c004220, + 0xe8bf: 0x6c2ac020, + // Block 0x3a3, offset 0xe8c0 + 0xe8c1: 0x6c07ce20, 0xe8c2: 0x6c16b420, 0xe8c3: 0x6c2ac420, + 0xe8c4: 0x6c2ac620, 0xe8c5: 0x6c0d2620, + 0xe8cf: 0x6c160c20, + 0xe8d4: 0x6c2ac820, 0xe8d5: 0x6c157620, + 0xe8d8: 0x6c2aca20, 0xe8d9: 0x6c2acc20, + 0xe8dc: 0x6c13a020, 0xe8dd: 0x6c2ace20, 0xe8df: 0x6c079820, + 0xe8e1: 0x6c160e20, + 0xe8e8: 0x6c2ad820, + 0xe8f2: 0x6c2ada20, 0xe8f3: 0x6c0ab820, + 0xe8f4: 0x6c2ad620, + 0xe8f8: 0x6c15da20, 0xe8f9: 0x6c2ad020, + 0xe8fc: 0x6c2ad420, 0xe8fd: 0x6c0bfa20, 0xe8fe: 0x6c0bc020, + // Block 0x3a4, offset 0xe900 + 0xe902: 0x6c2ad220, + 0xe904: 0x6c2adc20, 0xe907: 0x6c131e20, + 0xe90a: 0x6c2ae020, + 0xe90c: 0x6c2ade20, + 0xe910: 0x6c02cc20, 0xe912: 0x6c13ea20, 0xe913: 0x6c2ae220, + 0xe91d: 0x6c2afa20, 0xe91e: 0x6c2ae620, + 0xe925: 0x6c2ae820, + 0xe92a: 0x6c2aea20, 0xe92b: 0x6c2aec20, + 0xe936: 0x6c2af420, + 0xe938: 0x6c2af620, 0xe93b: 0x6c2af220, + // Block 0x3a5, offset 0xe940 + 0xe941: 0x6c2aee20, 0xe943: 0x6c2ae420, + 0xe944: 0x6c2af020, + 0xe94c: 0x6c2af820, 0xe94d: 0x6c2ed820, + 0xe956: 0x6c018820, + 0xe95e: 0x6c2afe20, 0xe95f: 0x6c04e620, + 0xe960: 0x6c2afc20, + 0xe964: 0x6c2b0220, 0xe966: 0x6c2b0020, + 0xe96a: 0x6c2b0620, + 0xe96d: 0x6c2b0420, 0xe96f: 0x6c2b0820, + 0xe972: 0x6c09ae20, + 0xe974: 0x6c2b0a20, 0xe977: 0x6c2b0c20, + 0xe97e: 0x6c2b0e20, 0xe97f: 0x6c0bfc20, + // Block 0x3a6, offset 0xe980 + 0xe981: 0x6c15ba20, 0xe983: 0x6c2b1020, + 0xe986: 0x6c132020, 0xe987: 0x6c113020, + 0xe988: 0x6c2b1220, 0xe98a: 0x6c2b1420, 0xe98b: 0x6c05f620, + 0xe98f: 0x6c03c420, + 0xe993: 0x6c2b1620, + 0xe996: 0x6c08aa20, 0xe997: 0x6c112620, + 0xe998: 0x6c2b1820, 0xe99a: 0x6c029420, + 0xe9a1: 0x6c2b1a20, + 0xe9a6: 0x6c2b1e20, 0xe9a7: 0x6c15fa20, + 0xe9a9: 0x6c2b1c20, 0xe9aa: 0x6c0b5020, + 0xe9ac: 0x6c2b2020, 0xe9af: 0x6c2b2220, + 0xe9b2: 0x6c2b2420, 0xe9b3: 0x6c035220, + 0xe9ba: 0x6c2b2620, + 0xe9bd: 0x6c2b2820, 0xe9bf: 0x6c2b2a20, + // Block 0x3a7, offset 0xe9c0 + 0xe9c0: 0x6c2b2c20, + 0xe9d2: 0x6c029620, + 0xe9da: 0x6c2b2e20, + 0xe9dc: 0x6c2b3020, 0xe9dd: 0x6c2b3220, + 0xe9e3: 0x6c021c20, + 0xe9e6: 0x6c0b1420, 0xe9e7: 0x6c2b3420, + 0xe9f4: 0x6c2b3620, + 0xe9f8: 0x6c2b3820, + // Block 0x3a8, offset 0xea00 + 0xea00: 0x6c062020, 0xea02: 0x6c0f6620, 0xea03: 0x6c2b3a20, + 0xea08: 0x6c059220, 0xea0a: 0x6c0b7020, + 0xea0c: 0x6c2b4020, 0xea0e: 0x6c103020, + 0xea10: 0x6c2b3e20, 0xea13: 0x6c054620, + 0xea16: 0x6c2b3c20, 0xea17: 0x6c0de620, + 0xea18: 0x6c03c620, 0xea1b: 0x6c2b4220, + 0xea1d: 0x6c2b4420, 0xea1f: 0x6c0aba20, + 0xea23: 0x6c05be20, + 0xea25: 0x6c2b4620, + 0xea2a: 0x6c13ec20, + 0xea2d: 0x6c0c3e20, + 0xea31: 0x6c045820, 0xea33: 0x6c153a20, + 0xea34: 0x6c0cd020, 0xea36: 0x6c2b4820, + 0xea3a: 0x6c0b5220, 0xea3b: 0x6c0e9420, + 0xea3c: 0x6c0abc20, + // Block 0x3a9, offset 0xea40 + 0xea41: 0x6c2b4a20, + 0xea46: 0x6c2b5020, + 0xea48: 0x6c2b5220, + 0xea50: 0x6c079420, 0xea51: 0x6c0d7c20, 0xea52: 0x6c2b4e20, + 0xea54: 0x6c0abe20, 0xea55: 0x6c129820, + 0xea5b: 0x6c2b4c20, + 0xea5e: 0x6c08ac20, + 0xea60: 0x6c012220, 0xea62: 0x6c2b5a20, 0xea63: 0x6c059420, + 0xea66: 0x6c08b020, + 0xea69: 0x6c08ae20, 0xea6b: 0x6c171e20, + 0xea6c: 0x6c2b5820, 0xea6d: 0x6c2b5620, 0xea6e: 0x6c0c8a20, + 0xea70: 0x6c040620, 0xea71: 0x6c170a20, 0xea72: 0x6c026820, 0xea73: 0x6c0ac020, + 0xea7c: 0x6c2b5420, + // Block 0x3aa, offset 0xea80 + 0xea82: 0x6c2b5e20, + 0xea84: 0x6c2b6020, 0xea85: 0x6c2b5c20, 0xea87: 0x6c065020, + 0xea89: 0x6c158c20, + 0xea8c: 0x6c08b220, 0xea8d: 0x6c10f220, + 0xea91: 0x6c2b6620, 0xea93: 0x6c0c0020, + 0xea95: 0x6c0e3820, + 0xea98: 0x6c157820, 0xea9a: 0x6c2b6c20, + 0xea9e: 0x6c067820, + 0xeaa0: 0x6c0bfe20, 0xeaa1: 0x6c2b6420, 0xeaa3: 0x6c2b6e20, + 0xeaa4: 0x6c067a20, 0xeaa5: 0x6c2b6820, 0xeaa6: 0x6c2b6a20, + 0xeaa8: 0x6c2b6220, + 0xeaac: 0x6c0c4420, 0xeaad: 0x6c107a20, + 0xeab0: 0x6c0e1220, 0xeab2: 0x6c01f220, + 0xeab9: 0x6c124020, + 0xeabc: 0x6c03f220, 0xeabf: 0x6c0ed820, + // Block 0x3ab, offset 0xeac0 + 0xeac2: 0x6c2b7420, + 0xeac4: 0x6c2b7020, 0xeac7: 0x6c0e4c20, + 0xeacb: 0x6c0c0220, + 0xeacc: 0x6c035420, 0xeacd: 0x6c2b7220, 0xeacf: 0x6c0b7a20, + 0xead2: 0x6c165c20, + 0xead6: 0x6c170420, + 0xeada: 0x6c2b7620, 0xeadb: 0x6c2b8c20, + 0xeadc: 0x6c0eda20, 0xeade: 0x6c2b8a20, + 0xeae0: 0x6c2b8420, 0xeae1: 0x6c2b9420, 0xeae2: 0x6c2b8620, + 0xeae4: 0x6c2b7e20, 0xeae6: 0x6c0f6820, 0xeae7: 0x6c2b7c20, + 0xeaeb: 0x6c2b7820, + 0xeaed: 0x6c154e20, 0xeaee: 0x6c08b420, + 0xeaf1: 0x6c2b8020, 0xeaf3: 0x6c2b7a20, + 0xeaf7: 0x6c2b8820, + 0xeaf8: 0x6c0a3420, 0xeafa: 0x6c062220, + 0xeafe: 0x6c0dec20, + // Block 0x3ac, offset 0xeb00 + 0xeb00: 0x6c141e20, 0xeb01: 0x6c013020, 0xeb02: 0x6c008420, + 0xeb04: 0x6c103220, 0xeb07: 0x6c2b9020, + 0xeb0c: 0x6c2b8e20, 0xeb0e: 0x6c10b420, + 0xeb10: 0x6c2b9820, + 0xeb14: 0x6c2b8220, 0xeb16: 0x6c2b9620, 0xeb17: 0x6c2b9a20, + 0xeb19: 0x6c05f820, 0xeb1a: 0x6c2b9220, 0xeb1b: 0x6c070820, + 0xeb1d: 0x6c093a20, + 0xeb20: 0x6c2b9c20, 0xeb21: 0x6c15bc20, + 0xeb26: 0x6c2ba220, + 0xeb28: 0x6c2ba820, 0xeb2b: 0x6c2ba420, + 0xeb2c: 0x6c128620, + 0xeb33: 0x6c2b9e20, + 0xeb39: 0x6c04e820, + 0xeb3e: 0x6c2ba620, + // Block 0x3ad, offset 0xeb40 + 0xeb41: 0x6c2baa20, + 0xeb49: 0x6c2bb220, + 0xeb4c: 0x6c2bac20, 0xeb4e: 0x6c2bb020, 0xeb4f: 0x6c2bae20, + 0xeb56: 0x6c2bb420, + 0xeb58: 0x6c08f220, 0xeb5a: 0x6c2bb820, 0xeb5b: 0x6c2bb620, + 0xeb5c: 0x6c12ec20, 0xeb5f: 0x6c2bbc20, + 0xeb66: 0x6c059620, + 0xeb6b: 0x6c2bba20, + 0xeb6c: 0x6c2bbe20, 0xeb6f: 0x6c2bc020, + 0xeb70: 0x6c03f420, 0xeb71: 0x6c279420, 0xeb72: 0x6c0afa20, + 0xeb74: 0x6c2bc220, 0xeb77: 0x6c067c20, + 0xeb7d: 0x6c2bc420, + // Block 0x3ae, offset 0xeb80 + 0xeb80: 0x6c2bc620, 0xeb83: 0x6c085020, + 0xeb8a: 0x6c1ede20, + 0xeb8c: 0x6c2bc820, 0xeb8e: 0x6c2bca20, + 0xeb90: 0x6c09b020, 0xeb92: 0x6c2bcc20, 0xeb93: 0x6c2bce20, + 0xeb96: 0x6c2bd020, + 0xeb99: 0x6c2bd220, 0xeb9a: 0x6c2bd420, + // Block 0x3af, offset 0xebc0 + 0xebf7: 0x6c0e0a20, + 0xebfa: 0x6c2bd620, + 0xebff: 0x6c2bda20, + // Block 0x3b0, offset 0xec00 + 0xec01: 0x6c2bd820, + 0xec06: 0x6c103420, + 0xec08: 0x6c2bdc20, 0xec0a: 0x6c13ee20, + 0xec0c: 0x6c2bde20, 0xec0e: 0x6c2be020, + 0xec10: 0x6c2be220, + 0xec15: 0x6c2be420, + 0xec1a: 0x6c109c20, + 0xec21: 0x6c0ac220, 0xec22: 0x6c2be620, + 0xec2a: 0x6c073220, 0xec2b: 0x6c174620, + 0xec2c: 0x6c2be820, + 0xec38: 0x6c2bea20, 0xec39: 0x6c129a20, 0xec3a: 0x6c2bec20, + 0xec3c: 0x6c2bfc20, + // Block 0x3b1, offset 0xec40 + 0xec42: 0x6c2bee20, + 0xec45: 0x6c2bf220, + 0xec49: 0x6c2bf020, 0xec4a: 0x6c2bf420, + 0xec4c: 0x6c142020, 0xec4d: 0x6c2bf620, 0xec4e: 0x6c2bf820, + 0xec54: 0x6c2bfa20, + 0xec58: 0x6c2bfe20, + 0xec5d: 0x6c024e20, 0xec5e: 0x6c0f3e20, + 0xec60: 0x6c12ee20, 0xec61: 0x6c07dc20, 0xec62: 0x6c070a20, + 0xec67: 0x6c12ba20, + 0xec68: 0x6c01f620, 0xec69: 0x6c11fc20, 0xec6a: 0x6c2c0420, 0xec6b: 0x6c035620, + 0xec6c: 0x6c0c2a20, 0xec6d: 0x6c2c0220, 0xec6e: 0x6c2c0c20, 0xec6f: 0x6c0ea620, + 0xec70: 0x6c151620, 0xec72: 0x6c2c0820, 0xec73: 0x6c2c0a20, + 0xec74: 0x6c03c820, 0xec76: 0x6c2c0e20, 0xec77: 0x6c116a20, + 0xec78: 0x6c0db620, 0xec7b: 0x6c124220, + 0xec7c: 0x6c0fa620, 0xec7d: 0x6c2c0620, 0xec7f: 0x6c142220, + // Block 0x3b2, offset 0xec80 + 0xec80: 0x6c021020, 0xec81: 0x6c2c1220, 0xec82: 0x6c16d420, 0xec83: 0x6c0ef420, + 0xec84: 0x6c170e20, 0xec87: 0x6c08b620, + 0xec88: 0x6c2c1020, 0xec8a: 0x6c0d5a20, + 0xec8d: 0x6c2c3220, 0xec8e: 0x6c0c8c20, + 0xec91: 0x6c10d820, 0xec93: 0x6c12bc20, + 0xec9a: 0x6c2c1820, 0xec9b: 0x6c085220, + 0xec9c: 0x6c08b820, 0xec9e: 0x6c0ac420, + 0xeca0: 0x6c116e20, 0xeca2: 0x6c05fa20, 0xeca3: 0x6c2c1620, + 0xeca4: 0x6c2c1420, 0xeca6: 0x6c12f020, + 0xecaa: 0x6c091220, + 0xecad: 0x6c0fd020, + 0xecba: 0x6c2c1c20, 0xecbb: 0x6c2c1e20, + 0xecbc: 0x6c070c20, 0xecbd: 0x6c2c1a20, + // Block 0x3b3, offset 0xecc0 + 0xecc4: 0x6c2c2020, 0xecc5: 0x6c2c2220, 0xecc7: 0x6c2c2620, + 0xecc8: 0x6c0d3e20, 0xecca: 0x6c2c2420, 0xeccb: 0x6c037c20, + 0xeccd: 0x6c2c2a20, 0xeccf: 0x6c2c2820, + 0xecd0: 0x6c2c2c20, 0xecd3: 0x6c2c3020, + 0xecd4: 0x6c2c3420, 0xecd6: 0x6c2c3620, + // Block 0x3b4, offset 0xed00 + 0xed24: 0x6c0c2c20, 0xed26: 0x6c092e20, 0xed27: 0x6c2c3820, + 0xed2b: 0x6c029820, + 0xed2d: 0x6c2c3a20, + 0xed30: 0x6c0d2820, 0xed31: 0x6c2c3c20, 0xed33: 0x6c2c3e20, + 0xed34: 0x6c12f220, 0xed37: 0x6c03ca20, + // Block 0x3b5, offset 0xed40 + 0xed41: 0x6c2c4020, + 0xed45: 0x6c0edc20, + 0xed4a: 0x6c013220, + 0xed59: 0x6c2c4220, + 0xed63: 0x6c097220, + 0xed68: 0x6c0bb020, + 0xed73: 0x6c0d5220, + 0xed7a: 0x6c2c4820, + 0xed7e: 0x6c2c4620, + // Block 0x3b6, offset 0xed80 + 0xed82: 0x6c2c4420, + 0xed8b: 0x6c2c5420, + 0xed8c: 0x6c2c5020, 0xed8f: 0x6c2c4a20, + 0xed96: 0x6c2c4e20, + 0xed9a: 0x6c2c4c20, 0xed9b: 0x6c2c5220, + 0xed9d: 0x6c045a20, 0xed9f: 0x6c2c5a20, + 0xeda1: 0x6c0c2e20, 0xeda3: 0x6c2c5c20, + 0xeda8: 0x6c065220, 0xedaa: 0x6c2c5620, 0xedab: 0x6c2c5820, + 0xedaf: 0x6c16d620, + 0xedb3: 0x6c0ede20, + 0xedb5: 0x6c0c8e20, + 0xedbc: 0x6c2c5e20, 0xedbf: 0x6c2c6420, + // Block 0x3b7, offset 0xedc0 + 0xedc8: 0x6c2c6020, 0xedc9: 0x6c2c6220, 0xedca: 0x6c15be20, + 0xedcf: 0x6c103620, + 0xedd0: 0x6c2c6a20, + 0xeddd: 0x6c2c6620, 0xedde: 0x6c2c6820, 0xeddf: 0x6c2c6c20, + 0xedea: 0x6c2c8820, + 0xedf0: 0x6c2c7220, + 0xedf4: 0x6c2c7420, 0xedf5: 0x6c2c7020, + // Block 0x3b8, offset 0xee00 + 0xee02: 0x6c2c6e20, + 0xee04: 0x6c0f6a20, 0xee07: 0x6c2c7820, + 0xee08: 0x6c2c8020, 0xee09: 0x6c2c7a20, 0xee0a: 0x6c2c7620, + 0xee0c: 0x6c2c7c20, + 0xee10: 0x6c2c7e20, + 0xee15: 0x6c2c8c20, + 0xee19: 0x6c2c8220, + 0xee1f: 0x6c0c3020, + 0xee20: 0x6c2c8620, 0xee23: 0x6c2c8a20, + 0xee24: 0x6c2c8420, + 0xee32: 0x6c2c9020, + 0xee34: 0x6c09b220, 0xee36: 0x6c2c8e20, + 0xee3c: 0x6c2c9220, + // Block 0x3b9, offset 0xee40 + 0xee41: 0x6c2c9420, + 0xee44: 0x6c2c9a20, 0xee45: 0x6c2c9820, 0xee47: 0x6c2c9620, + 0xee4a: 0x6c2c9e20, 0xee4b: 0x6c2c9c20, + 0xee4d: 0x6c153c20, + 0xee51: 0x6c2ca220, 0xee53: 0x6c2ca020, + 0xee54: 0x6c2ca420, + 0xee59: 0x6c2ca620, + 0xee61: 0x6c2caa20, + 0xee6a: 0x6c2ca820, 0xee6b: 0x6c0b5420, + 0xee6c: 0x6c2cac20, 0xee6f: 0x6c050220, + 0xee70: 0x6c2cae20, 0xee71: 0x6c2cb220, + 0xee7e: 0x6c2cb420, + // Block 0x3ba, offset 0xee80 + 0xee85: 0x6c2cb620, 0xee86: 0x6c2cb020, + 0xee88: 0x6c2cb820, 0xee8a: 0x6c093c20, 0xee8b: 0x6c2cba20, + 0xee8c: 0x6c03cc20, 0xee8d: 0x6c054a20, + 0xee92: 0x6c05fc20, + 0xee9b: 0x6c2cbc20, + 0xee9f: 0x6c10c820, + 0xeea2: 0x6c0fa820, 0xeea3: 0x6c2cbe20, + 0xeeab: 0x6c2cc420, + 0xeeb8: 0x6c08f820, 0xeebb: 0x6c2cc220, + 0xeebc: 0x6c2cc020, 0xeebd: 0x6c059820, 0xeebe: 0x6c2cc620, + // Block 0x3bb, offset 0xeec0 + 0xeec3: 0x6c029a20, + 0xeec5: 0x6c2cca20, + 0xeec9: 0x6c07d020, 0xeeca: 0x6c2cc820, + 0xeecc: 0x6c2cda20, + 0xeed2: 0x6c2cce20, 0xeed3: 0x6c2cd220, + 0xeed4: 0x6c13a220, 0xeed5: 0x6c2ccc20, + 0xeed9: 0x6c2cd020, 0xeedb: 0x6c2cd820, + 0xeedc: 0x6c2cd420, 0xeedd: 0x6c03ce20, 0xeedf: 0x6c2cd620, + 0xeee6: 0x6c2cdc20, + 0xeee9: 0x6c115820, 0xeeea: 0x6c167820, + 0xeeef: 0x6c09b420, + 0xeef3: 0x6c2cde20, + 0xeef8: 0x6c155020, 0xeef9: 0x6c2ce220, 0xeefb: 0x6c2ce020, + 0xeefe: 0x6c2ce820, 0xeeff: 0x6c158e20, + // Block 0x3bc, offset 0xef00 + 0xef02: 0x6c2ce620, + 0xef04: 0x6c02ce20, 0xef05: 0x6c2ce420, 0xef06: 0x6c2cee20, + 0xef09: 0x6c2cec20, + 0xef0c: 0x6c2cea20, 0xef0d: 0x6c0f9020, 0xef0e: 0x6c2cf020, + 0xef17: 0x6c2cf220, + 0xef1c: 0x6c2cf420, 0xef1f: 0x6c073420, + 0xef21: 0x6c052e20, 0xef22: 0x6c2cf620, 0xef23: 0x6c2cf820, + 0xef24: 0x6c2cfa20, + // Block 0x3bd, offset 0xef40 + 0xef5b: 0x6c0b5620, + 0xef5c: 0x6c2cfc20, 0xef5e: 0x6c08ea20, 0xef5f: 0x6c2cfe20, + 0xef63: 0x6c2d0020, + 0xef67: 0x6c18a420, + 0xef68: 0x6c18a220, + 0xef6d: 0x6c2d0220, 0xef6e: 0x6c273620, 0xef6f: 0x6c2d0420, + 0xef70: 0x6c0dfc20, 0xef71: 0x6c0b1a20, 0xef72: 0x6c112420, + 0xef77: 0x6c2d0620, + 0xef7a: 0x6c138220, 0xef7b: 0x6c0f1820, + 0xef7c: 0x6c075820, 0xef7f: 0x6c0e0620, + // Block 0x3be, offset 0xef80 + 0xef82: 0x6c00d020, + 0xef84: 0x6c148420, 0xef85: 0x6c0b7220, + 0xef8e: 0x6c05a020, + 0xef91: 0x6c04ea20, + 0xef94: 0x6c138420, + 0xef9a: 0x6c2d0820, + 0xefa2: 0x6c2d0c20, + 0xefa5: 0x6c2d0a20, 0xefa6: 0x6c01f820, + 0xefa9: 0x6c10d420, 0xefaa: 0x6c2d0e20, 0xefab: 0x6c119220, + 0xefad: 0x6c0f9220, 0xefaf: 0x6c2d1020, + 0xefb0: 0x6c09f020, + 0xefb4: 0x6c2d1420, 0xefb7: 0x6c14d420, + 0xefb8: 0x6c2d3220, 0xefb9: 0x6c2d1820, 0xefba: 0x6c2d1a20, + 0xefbd: 0x6c0f0220, + // Block 0x3bf, offset 0xefc0 + 0xefc0: 0x6c0db820, 0xefc1: 0x6c0d2a20, 0xefc3: 0x6c103820, + 0xefc5: 0x6c2d1620, 0xefc6: 0x6c041620, + 0xefcb: 0x6c2d2820, + 0xefcd: 0x6c2d2220, 0xefce: 0x6c2d3c20, 0xefcf: 0x6c103a20, + 0xefd0: 0x6c0e7420, 0xefd1: 0x6c2d1c20, 0xefd3: 0x6c0f6c20, + 0xefd4: 0x6c0fd220, 0xefd5: 0x6c2d1e20, 0xefd6: 0x6c2d2620, 0xefd7: 0x6c0b8420, + 0xefd9: 0x6c117220, 0xefda: 0x6c0f0820, + 0xefdd: 0x6c0c0420, 0xefde: 0x6c2d2420, 0xefdf: 0x6c0d5420, + 0xefe0: 0x6c0d4020, 0xefe1: 0x6c2d2020, 0xefe2: 0x6c001220, 0xefe3: 0x6c16c820, + 0xefe7: 0x6c2d2a20, + 0xefee: 0x6c0dba20, + 0xeff1: 0x6c09b620, 0xeff2: 0x6c0b5820, + 0xeff5: 0x6c2d2e20, 0xeff6: 0x6c2d2c20, + 0xeff8: 0x6c009e20, 0xeff9: 0x6c2d3020, + 0xeffc: 0x6c127a20, 0xeffe: 0x6c2d4020, + // Block 0x3c0, offset 0xf000 + 0xf001: 0x6c109e20, 0xf002: 0x6c0b9a20, + 0xf005: 0x6c0e6620, 0xf007: 0x6c051820, + 0xf009: 0x6c2d3e20, 0xf00a: 0x6c157a20, 0xf00b: 0x6c00fa20, + 0xf00d: 0x6c138620, 0xf00e: 0x6c01fa20, 0xf00f: 0x6c2d3420, + 0xf010: 0x6c2d3620, 0xf011: 0x6c2d3820, 0xf012: 0x6c2d3a20, 0xf013: 0x6c105e20, + 0xf014: 0x6c0dfa20, 0xf015: 0x6c008620, 0xf016: 0x6c2d4220, + 0xf018: 0x6c2d4420, 0xf019: 0x6c31a020, + 0xf01c: 0x6c0d7220, 0xf01e: 0x6c2d4620, + 0xf020: 0x6c016220, 0xf021: 0x6c0cd420, 0xf023: 0x6c05fe20, + 0xf025: 0x6c15c020, + 0xf028: 0x6c2d4820, 0xf029: 0x6c0f8420, + 0xf02d: 0x6c0d2c20, 0xf02e: 0x6c093e20, 0xf02f: 0x6c2d4a20, + 0xf032: 0x6c2d5020, + 0xf035: 0x6c0a1620, 0xf036: 0x6c2d4c20, 0xf037: 0x6c0c9220, + 0xf038: 0x6c0c9020, 0xf03a: 0x6c008820, + 0xf03c: 0x6c165e20, 0xf03d: 0x6c2d5420, 0xf03f: 0x6c124420, + // Block 0x3c1, offset 0xf040 + 0xf040: 0x6c2d5820, 0xf041: 0x6c2d5620, 0xf042: 0x6c2d5220, 0xf043: 0x6c25a620, + 0xf044: 0x6c035820, 0xf047: 0x6c2d1220, + 0xf049: 0x6c2d5c20, 0xf04a: 0x6c2d5a20, + 0xf04f: 0x6c2d5e20, + 0xf051: 0x6c157c20, + 0xf063: 0x6c10aa20, + 0xf066: 0x6c13f020, + 0xf068: 0x6c2d6020, 0xf06a: 0x6c094220, + 0xf06f: 0x6c2d6220, + 0xf071: 0x6c2d6420, + 0xf075: 0x6c2d6620, + 0xf078: 0x6c0f6e20, + // Block 0x3c2, offset 0xf080 + 0xf081: 0x6c009420, + 0xf08a: 0x6c070e20, + 0xf08e: 0x6c16f820, + 0xf09b: 0x6c2d6e20, + 0xf0a1: 0x6c054c20, 0xf0a2: 0x6c2d6820, + 0xf0a4: 0x6c2d6a20, + 0xf0a8: 0x6c130420, + 0xf0ad: 0x6c029c20, + 0xf0b5: 0x6c157e20, 0xf0b7: 0x6c04a620, + 0xf0bd: 0x6c0fd420, + // Block 0x3c3, offset 0xf0c0 + 0xf0c2: 0x6c2d7020, + 0xf0d2: 0x6c2d7220, + 0xf0d9: 0x6c2d7420, + 0xf0ed: 0x6c0f7020, + 0xf0f0: 0x6c2d7820, 0xf0f2: 0x6c2d7620, + // Block 0x3c4, offset 0xf100 + 0xf109: 0x6c108e20, 0xf10a: 0x6c2d7a20, 0xf10b: 0x6c09b820, + 0xf10c: 0x6c095020, 0xf10d: 0x6c115a20, 0xf10e: 0x6c0e9620, + 0xf112: 0x6c097420, + 0xf114: 0x6c0b9c20, 0xf116: 0x6c2d7c20, + 0xf118: 0x6c2d7e20, + 0xf122: 0x6c0b7e20, 0xf123: 0x6c2d8020, + 0xf125: 0x6c2d8220, + 0xf129: 0x6c2d8420, 0xf12a: 0x6c15ea20, + 0xf12c: 0x6c09ba20, + 0xf132: 0x6c2d8820, 0xf133: 0x6c2d8620, + 0xf135: 0x6c071020, 0xf137: 0x6c074220, + 0xf138: 0x6c085420, + // Block 0x3c5, offset 0xf140 + 0xf142: 0x6c2d8e20, + 0xf147: 0x6c0a1820, + 0xf149: 0x6c2d8c20, 0xf14b: 0x6c2d8a20, + 0xf14d: 0x6c0dca20, + 0xf150: 0x6c067e20, 0xf152: 0x6c0c0620, + 0xf157: 0x6c11c020, + 0xf15c: 0x6c09be20, + 0xf162: 0x6c2d9020, + 0xf164: 0x6c0ac620, + 0xf16a: 0x6c2d9620, 0xf16b: 0x6c2d9220, + 0xf16f: 0x6c2d9420, + 0xf174: 0x6c2d9a20, 0xf175: 0x6c2d9820, + 0xf178: 0x6c0afc20, 0xf17a: 0x6c2d9c20, + // Block 0x3c6, offset 0xf180 + 0xf180: 0x6c2d9e20, 0xf181: 0x6c2da020, + 0xf186: 0x6c120020, 0xf187: 0x6c07be20, + 0xf188: 0x6c095220, 0xf189: 0x6c2da220, 0xf18b: 0x6c2da420, + 0xf18c: 0x6c161020, 0xf18d: 0x6c09d620, 0xf18e: 0x6c152c20, 0xf18f: 0x6c166020, + 0xf190: 0x6c2da620, 0xf191: 0x6c04ec20, + 0xf196: 0x6c2da820, + 0xf198: 0x6c0f7220, 0xf19b: 0x6c2dae20, + 0xf19c: 0x6c02e420, 0xf19d: 0x6c0b5a20, 0xf19f: 0x6c2daa20, + 0xf1a1: 0x6c2dac20, 0xf1a3: 0x6c0f3020, + 0xf1a6: 0x6c143e20, 0xf1a7: 0x6c052020, + 0xf1b5: 0x6c2db220, 0xf1b6: 0x6c2db420, + 0xf1bc: 0x6c2db020, 0xf1bf: 0x6c2db820, + // Block 0x3c7, offset 0xf1c0 + 0xf1cd: 0x6c10a620, 0xf1ce: 0x6c027a20, + 0xf1d1: 0x6c2dc020, + 0xf1d4: 0x6c2dba20, 0xf1d5: 0x6c2dbe20, + 0xf1de: 0x6c2db620, + 0xf1e9: 0x6c2e4c20, + 0xf1ec: 0x6c2dbc20, + 0xf1f4: 0x6c169e20, 0xf1f7: 0x6c065420, + 0xf1ff: 0x6c2dd020, + // Block 0x3c8, offset 0xf200 + 0xf204: 0x6c0f9420, 0xf205: 0x6c2dc620, + 0xf208: 0x6c2dcc20, 0xf209: 0x6c2dc820, 0xf20b: 0x6c2dd220, + 0xf210: 0x6c2dd420, + 0xf217: 0x6c2dc420, + 0xf21a: 0x6c2dde20, 0xf21b: 0x6c016420, + 0xf21e: 0x6c2dc220, + 0xf222: 0x6c11ba20, + 0xf224: 0x6c2dca20, 0xf226: 0x6c0ac820, + 0xf231: 0x6c071220, + 0xf23e: 0x6c142420, + // Block 0x3c9, offset 0xf240 + 0xf240: 0x6c04f020, 0xf243: 0x6c09d820, + 0xf245: 0x6c106020, + 0xf251: 0x6c0c9620, 0xf253: 0x6c2dda20, + 0xf255: 0x6c2dce20, 0xf256: 0x6c2dd820, + 0xf258: 0x6c14d620, 0xf25a: 0x6c0ee020, 0xf25b: 0x6c2ddc20, + 0xf25c: 0x6c2dd620, + 0xf26d: 0x6c0c9420, + 0xf277: 0x6c2de420, + 0xf279: 0x6c2de220, + // Block 0x3ca, offset 0xf280 + 0xf28f: 0x6c2de020, + 0xf292: 0x6c13f220, + 0xf2a4: 0x6c0a4220, + 0xf2a9: 0x6c2de620, 0xf2aa: 0x6c139620, + 0xf2ad: 0x6c012420, + 0xf2b2: 0x6c12a820, 0xf2b3: 0x6c0e9820, + 0xf2b8: 0x6c045c20, 0xf2ba: 0x6c2dea20, + 0xf2bc: 0x6c071620, + // Block 0x3cb, offset 0xf2c0 + 0xf2c6: 0x6c082c20, + 0xf2cf: 0x6c2de820, + 0xf2d0: 0x6c0b9e20, + 0xf2d8: 0x6c0ba020, 0xf2d9: 0x6c2df020, 0xf2da: 0x6c2df420, + 0xf2e0: 0x6c0afe20, 0xf2e2: 0x6c2df220, 0xf2e3: 0x6c2df620, + 0xf2e6: 0x6c04ce20, + 0xf2e8: 0x6c12a620, 0xf2eb: 0x6c095420, + 0xf2ec: 0x6c16ca20, 0xf2ee: 0x6c2dee20, 0xf2ef: 0x6c080820, + 0xf2f2: 0x6c170220, + 0xf2f5: 0x6c2dfa20, + 0xf2fa: 0x6c2df820, 0xf2fb: 0x6c2dfc20, + // Block 0x3cc, offset 0xf300 + 0xf304: 0x6c2dec20, + 0xf30b: 0x6c10ba20, + 0xf30d: 0x6c0fd620, + 0xf314: 0x6c0f1e20, 0xf316: 0x6c2e0620, + 0xf31b: 0x6c0e3a20, + 0xf31c: 0x6c2dfe20, + 0xf320: 0x6c2e0020, + 0xf32c: 0x6c053e20, 0xf32e: 0x6c2e0420, + 0xf335: 0x6c060020, + 0xf33c: 0x6c2e0220, 0xf33e: 0x6c0aca20, + // Block 0x3cd, offset 0xf340 + 0xf34c: 0x6c02e620, + 0xf354: 0x6c2e0e20, 0xf356: 0x6c079620, 0xf357: 0x6c0d2e20, + 0xf35a: 0x6c0f0420, + 0xf367: 0x6c026a20, + 0xf36c: 0x6c2e0a20, 0xf36d: 0x6c2e0c20, 0xf36e: 0x6c0ef620, + 0xf370: 0x6c2e0820, + 0xf379: 0x6c2e1020, + // Block 0x3ce, offset 0xf380 + 0xf383: 0x6c2e1c20, + 0xf388: 0x6c2e2220, + 0xf390: 0x6c2e2020, 0xf391: 0x6c0f8620, + 0xf396: 0x6c2e1220, 0xf397: 0x6c2e1420, + 0xf398: 0x6c2e1a20, + 0xf39d: 0x6c2e1e20, + 0xf3a1: 0x6c04a820, + 0xf3a4: 0x6c2e2420, 0xf3a5: 0x6c2e1820, + 0xf3a8: 0x6c2e1620, + // Block 0x3cf, offset 0xf3c0 + 0xf3c3: 0x6c2e2c20, + 0xf3c7: 0x6c2e2e20, + 0xf3d0: 0x6c2e3020, 0xf3d3: 0x6c2e2a20, + 0xf3d4: 0x6c2e2820, + 0xf3d8: 0x6c0acc20, 0xf3d9: 0x6c103c20, 0xf3da: 0x6c2e2620, + 0xf3e1: 0x6c2e3820, + 0xf3eb: 0x6c2e3420, + 0xf3f5: 0x6c2e3620, 0xf3f6: 0x6c2e3220, + 0xf3f8: 0x6c0de820, 0xf3fa: 0x6c2e3a20, + // Block 0x3d0, offset 0xf400 + 0xf401: 0x6c2e3c20, + 0xf404: 0x6c2e4020, + 0xf411: 0x6c035a20, 0xf412: 0x6c2e3e20, 0xf413: 0x6c154420, + 0xf41a: 0x6c2e5620, 0xf41b: 0x6c2e4220, + 0xf41e: 0x6c2e4820, + 0xf420: 0x6c2e4420, 0xf422: 0x6c2e4620, + 0xf42a: 0x6c2e4a20, + 0xf430: 0x6c2e4e20, + 0xf435: 0x6c2e5020, 0xf437: 0x6c2e5220, + 0xf43c: 0x6c2e5820, 0xf43d: 0x6c2e5420, 0xf43e: 0x6c2e5a20, 0xf43f: 0x6c2e5e20, + // Block 0x3d1, offset 0xf440 + 0xf441: 0x6c2e5c20, + // Block 0x3d2, offset 0xf480 + 0xf4b7: 0x6c0ee220, + // Block 0x3d3, offset 0xf4c0 + 0xf4c0: 0x6c151e20, 0xf4c2: 0x6c2e6020, 0xf4c3: 0x6c0c9820, + 0xf4c7: 0x6c2e6220, + 0xf4c9: 0x6c136020, 0xf4ca: 0x6c2e6420, 0xf4cb: 0x6c024a20, + 0xf4cf: 0x6c00f420, + 0xf4d1: 0x6c035e20, 0xf4d3: 0x6c035c20, + 0xf4d4: 0x6c2e6620, 0xf4d6: 0x6c2e6820, + 0xf4d8: 0x6c2e6a20, 0xf4d9: 0x6c2e6c20, + 0xf4e0: 0x6c2e6e20, 0xf4e2: 0x6c036020, 0xf4e3: 0x6c029e20, + 0xf4e4: 0x6c071820, 0xf4e5: 0x6c11cc20, 0xf4e7: 0x6c2e7220, + 0xf4e8: 0x6c2e7020, + 0xf4ed: 0x6c2e7420, + 0xf4f2: 0x6c013420, + 0xf4f9: 0x6c2e7a20, 0xf4fb: 0x6c2e7820, + 0xf4fc: 0x6c2e7620, 0xf4fe: 0x6c2e7c20, + // Block 0x3d4, offset 0xf500 + 0xf503: 0x6c2e8220, + 0xf507: 0x6c004e20, + 0xf50a: 0x6c2e7e20, + 0xf50c: 0x6c2e8620, 0xf50d: 0x6c2e8420, + 0xf514: 0x6c2e8a20, 0xf515: 0x6c2e8820, 0xf516: 0x6c2e8c20, + 0xf518: 0x6c104420, + 0xf51c: 0x6c2e8e20, + 0xf521: 0x6c2e9020, 0xf522: 0x6c2e9420, + 0xf525: 0x6c2e9220, + // Block 0x3d5, offset 0xf540 + 0xf55c: 0x6c12f420, + 0xf561: 0x6c2e9620, + 0xf568: 0x6c2e9820, 0xf56a: 0x6c07e220, + 0xf56e: 0x6c2e9a20, 0xf56f: 0x6c2e9c20, + 0xf572: 0x6c142620, + 0xf57b: 0x6c0cd220, + 0xf57f: 0x6c000820, + // Block 0x3d6, offset 0xf580 + 0xf580: 0x6c0d8e20, 0xf582: 0x6c2e9e20, + 0xf584: 0x6c12f620, + 0xf58b: 0x6c2ea420, + 0xf58c: 0x6c2ea020, 0xf58d: 0x6c071a20, 0xf58f: 0x6c2ea220, + 0xf590: 0x6c062420, + 0xf59b: 0x6c136220, + 0xf59c: 0x6c2ea820, 0xf59d: 0x6c2eac20, 0xf59e: 0x6c2eaa20, 0xf59f: 0x6c2eae20, + 0xf5a2: 0x6c00be20, 0xf5a3: 0x6c0b7420, + 0xf5a4: 0x6c0a4420, 0xf5a5: 0x6c036220, 0xf5a6: 0x6c2eb020, + 0xf5aa: 0x6c117020, + 0xf5ac: 0x6c2eb420, + 0xf5b0: 0x6c00c020, 0xf5b2: 0x6c2eb220, 0xf5b3: 0x6c0ef820, + 0xf5b5: 0x6c166220, 0xf5b6: 0x6c103e20, 0xf5b7: 0x6c2ea620, + 0xf5b8: 0x6c161420, 0xf5ba: 0x6c060220, + 0xf5bd: 0x6c15c220, + // Block 0x3d7, offset 0xf5c0 + 0xf5c5: 0x6c051a20, 0xf5c6: 0x6c163020, + 0xf5c8: 0x6c053420, 0xf5ca: 0x6c0dbc20, 0xf5cb: 0x6c281020, + 0xf5cd: 0x6c2eb620, 0xf5ce: 0x6c024c20, 0xf5cf: 0x6c0ba220, + 0xf5d4: 0x6c02a020, 0xf5d5: 0x6c2eba20, 0xf5d7: 0x6c2ebc20, + 0xf5d8: 0x6c2eb820, 0xf5d9: 0x6c05ac20, 0xf5db: 0x6c07d220, + 0xf5dc: 0x6c0ace20, + 0xf5e0: 0x6c00c220, 0xf5e3: 0x6c167a20, + 0xf5e7: 0x6c2ec020, + 0xf5e8: 0x6c2d4e20, 0xf5ea: 0x6c2ebe20, + 0xf5f0: 0x6c2ec620, 0xf5f1: 0x6c2ec220, 0xf5f2: 0x6c2ec420, + 0xf5f4: 0x6c2ec820, 0xf5f6: 0x6c2eca20, 0xf5f7: 0x6c16a020, + 0xf5f8: 0x6c2ecc20, 0xf5f9: 0x6c2ece20, 0xf5fb: 0x6c0c1220, + 0xf5fc: 0x6c11d620, + // Block 0x3d8, offset 0xf600 + 0xf600: 0x6c0bbe20, 0xf601: 0x6c037e20, + 0xf604: 0x6c158020, 0xf605: 0x6c021220, 0xf606: 0x6c09bc20, 0xf607: 0x6c065620, + 0xf609: 0x6c2ed420, 0xf60b: 0x6c2ed220, + 0xf60c: 0x6c08ba20, 0xf60d: 0x6c2ed620, 0xf60e: 0x6c2ed020, + 0xf611: 0x6c082420, + 0xf615: 0x6c2ede20, 0xf616: 0x6c2a5c20, + 0xf619: 0x6c190e20, 0xf61b: 0x6c0bb220, + 0xf61c: 0x6c2eda20, + 0xf622: 0x6c161220, 0xf623: 0x6c10ca20, + 0xf628: 0x6c00d220, 0xf62a: 0x6c0c4620, 0xf62b: 0x6c08fc20, + 0xf630: 0x6c134620, 0xf632: 0x6c00fc20, + 0xf636: 0x6c16a220, 0xf637: 0x6c15e220, + 0xf639: 0x6c2ee020, 0xf63b: 0x6c0fb620, + // Block 0x3d9, offset 0xf640 + 0xf640: 0x6c098620, + 0xf644: 0x6c2ee220, 0xf646: 0x6c2ee420, 0xf647: 0x6c0b5c20, + 0xf648: 0x6c2ee620, 0xf64a: 0x6c16a420, + 0xf64d: 0x6c2edc20, 0xf64e: 0x6c2eea20, 0xf64f: 0x6c2eee20, + 0xf651: 0x6c2eec20, 0xf653: 0x6c2ee820, + 0xf656: 0x6c2ef020, + 0xf659: 0x6c2ef220, + 0xf65c: 0x6c0d3020, 0xf65e: 0x6c01fc20, + 0xf664: 0x6c2ef420, 0xf667: 0x6c14c020, + 0xf66a: 0x6c2ef620, + 0xf670: 0x6c2ef820, 0xf672: 0x6c16d820, + 0xf678: 0x6c1f6020, 0xf679: 0x6c2efa20, + 0xf67d: 0x6c2efc20, 0xf67e: 0x6c2efe20, + // Block 0x3da, offset 0xf680 + 0xf682: 0x6c2f0620, + 0xf684: 0x6c2f0020, 0xf686: 0x6c2f0220, + 0xf688: 0x6c2f0420, 0xf689: 0x6c2f0820, + 0xf692: 0x6c0c0820, + 0xf696: 0x6c153e20, + 0xf699: 0x6c0c0a20, + 0xf69c: 0x6c2f0a20, 0xf69e: 0x6c124620, + 0xf6a0: 0x6c2f0c20, 0xf6a1: 0x6c314420, 0xf6a2: 0x6c14e820, + 0xf6a4: 0x6c2f0e20, 0xf6a6: 0x6c2f1020, + 0xf6a8: 0x6c2f1220, 0xf6a9: 0x6c02a220, 0xf6ab: 0x6c2f1620, + 0xf6ad: 0x6c0b7620, + 0xf6b1: 0x6c2f1820, + 0xf6b4: 0x6c052c20, + 0xf6b9: 0x6c2f1a20, 0xf6ba: 0x6c2f2220, + 0xf6bc: 0x6c2f1e20, + // Block 0x3db, offset 0xf6c0 + 0xf6c1: 0x6c2f2020, + 0xf6c4: 0x6c02da20, 0xf6c5: 0x6c2f1c20, 0xf6c6: 0x6c2f2420, + 0xf6cb: 0x6c2f2620, + 0xf6cd: 0x6c005020, 0xf6cf: 0x6c2f2820, + 0xf6d0: 0x6c2f2a20, + 0xf6d8: 0x6c0ad020, + 0xf6dc: 0x6c2f2c20, + 0xf6e0: 0x6c03fa20, 0xf6e3: 0x6c2f3220, + 0xf6e6: 0x6c2f3020, + 0xf6e8: 0x6c2f2e20, 0xf6eb: 0x6c2ba020, + 0xf6ed: 0x6c139020, + 0xf6f3: 0x6c2f3420, + 0xf6f4: 0x6c2f3620, + // Block 0x3dc, offset 0xf700 + 0xf703: 0x6c2f3820, + 0xf706: 0x6c2f3a20, + 0xf708: 0x6c2f3c20, 0xf70b: 0x6c2f3e20, + 0xf713: 0x6c036420, + 0xf71c: 0x6c2f4020, + 0xf72d: 0x6c2f4220, 0xf72e: 0x6c10ea20, + 0xf732: 0x6c2f4620, 0xf733: 0x6c01ae20, + 0xf735: 0x6c2f4c20, 0xf736: 0x6c2f4a20, + 0xf73b: 0x6c00c420, + 0xf73f: 0x6c04aa20, + // Block 0x3dd, offset 0xf740 + 0xf741: 0x6c136620, 0xf742: 0x6c0ee420, 0xf743: 0x6c075c20, + 0xf745: 0x6c071c20, 0xf746: 0x6c0a1a20, + 0xf748: 0x6c0b7c20, + 0xf74c: 0x6c2f5020, 0xf74f: 0x6c2f4e20, + 0xf750: 0x6c159020, 0xf751: 0x6c038020, 0xf752: 0x6c120420, 0xf753: 0x6c10a020, + 0xf757: 0x6c0bbc20, + 0xf758: 0x6c166420, 0xf75a: 0x6c059a20, + 0xf761: 0x6c2f5620, + 0xf764: 0x6c2f5420, + 0xf76c: 0x6c142a20, 0xf76d: 0x6c104020, + 0xf774: 0x6c011c20, 0xf777: 0x6c2f5820, + 0xf778: 0x6c2f5220, 0xf77b: 0x6c12be20, + 0xf77c: 0x6c15e020, 0xf77d: 0x6c2f5a20, + // Block 0x3de, offset 0xf780 + 0xf786: 0x6c2f5c20, + 0xf78b: 0x6c2f6020, + 0xf78c: 0x6c0dcc20, 0xf78d: 0x6c02aa20, 0xf78e: 0x6c02ac20, 0xf78f: 0x6c2f5e20, + 0xf794: 0x6c038220, 0xf795: 0x6c060420, + 0xf798: 0x6c038420, 0xf79b: 0x6c0faa20, + 0xf79e: 0x6c168820, + 0xf7a7: 0x6c065820, + 0xf7ab: 0x6c2f6220, + 0xf7af: 0x6c2f6420, + 0xf7b0: 0x6c2f6620, 0xf7b1: 0x6c2f6820, 0xf7b3: 0x6c2f6c20, + 0xf7b4: 0x6c2f6a20, + // Block 0x3df, offset 0xf7c0 + 0xf7e8: 0x6c130a20, 0xf7ea: 0x6c2f6e20, + 0xf7ef: 0x6c2f7020, + 0xf7f1: 0x6c2f7220, + 0xf7f6: 0x6c2f7420, + // Block 0x3e0, offset 0xf800 + 0xf803: 0x6c2f7820, + 0xf804: 0x6c2f7620, 0xf806: 0x6c2f7a20, + 0xf81b: 0x6c124820, + 0xf81c: 0x6c27aa20, 0xf81f: 0x6c0b1620, + 0xf822: 0x6c03d020, + 0xf829: 0x6c2f7c20, 0xf82b: 0x6c2f7e20, + 0xf82d: 0x6c18ba20, 0xf82e: 0x6c20ec20, 0xf82f: 0x6c120620, + 0xf832: 0x6c00b620, + 0xf834: 0x6c003620, + 0xf83c: 0x6c08bc20, 0xf83d: 0x6c13f420, 0xf83e: 0x6c0b0420, + // Block 0x3e1, offset 0xf840 + 0xf843: 0x6c2f8020, + 0xf845: 0x6c150e20, + 0xf849: 0x6c2f8220, 0xf84a: 0x6c15c420, + 0xf84c: 0x6c010020, + 0xf850: 0x6c085620, 0xf852: 0x6c2f8420, 0xf853: 0x6c021420, + 0xf854: 0x6c2f8620, + 0xf858: 0x6c2f8820, + 0xf85d: 0x6c2f8c20, 0xf85e: 0x6c2f8e20, + 0xf860: 0x6c2f9220, 0xf861: 0x6c2f8a20, + 0xf864: 0x6c2f9020, + 0xf868: 0x6c036620, + 0xf86c: 0x6c2f9420, 0xf86e: 0x6c2f9620, + 0xf87d: 0x6c2f9820, 0xf87e: 0x6c2f9a20, + // Block 0x3e2, offset 0xf880 + 0xf882: 0x6c2f9c20, + 0xf885: 0x6c2fa020, + 0xf889: 0x6c2f9e20, 0xf88b: 0x6c2fa420, + 0xf88c: 0x6c2faa20, + 0xf890: 0x6c2fa220, 0xf891: 0x6c2fa620, 0xf892: 0x6c2fa820, + 0xf895: 0x6c2fac20, 0xf897: 0x6c04ac20, + // Block 0x3e3, offset 0xf8c0 + 0xf8d6: 0x6c097620, 0xf8d7: 0x6c2fae20, + 0xf8d8: 0x6c2fb020, 0xf8d9: 0x6c071e20, + 0xf8e5: 0x6c2fb220, + 0xf8e8: 0x6c027020, + 0xf8ec: 0x6c114220, 0xf8ed: 0x6c2fb420, 0xf8ee: 0x6c2fb620, + 0xf8f3: 0x6c0e6820, + 0xf8f4: 0x6c10be20, + 0xf8fc: 0x6c2fb820, + // Block 0x3e4, offset 0xf900 + 0xf901: 0x6c119e20, + 0xf904: 0x6c0d9020, 0xf905: 0x6c012c20, 0xf906: 0x6c050420, + 0xf908: 0x6c050620, + 0xf910: 0x6c0e9a20, 0xf911: 0x6c2fc220, 0xf912: 0x6c050820, + 0xf915: 0x6c021620, + 0xf918: 0x6c2fc020, 0xf91b: 0x6c2fbc20, + 0xf91d: 0x6c2fbe20, 0xf91f: 0x6c2fba20, + 0xf922: 0x6c2fd620, + 0xf92d: 0x6c2fc420, 0xf92e: 0x6c2fc620, + 0xf931: 0x6c2fc820, 0xf932: 0x6c2fca20, + 0xf938: 0x6c2fce20, 0xf93b: 0x6c2fcc20, + 0xf93f: 0x6c09fe20, + // Block 0x3e5, offset 0xf940 + 0xf941: 0x6c2fd020, + 0xf945: 0x6c2fd420, + 0xf94e: 0x6c03d220, 0xf94f: 0x6c2fd220, + 0xf952: 0x6c0d3220, 0xf953: 0x6c060620, + 0xf959: 0x6c2fd820, + 0xf968: 0x6c0d9220, 0xf96b: 0x6c2fda20, + 0xf970: 0x6c104220, + 0xf977: 0x6c2fdc20, + 0xf97e: 0x6c2fe620, + // Block 0x3e6, offset 0xf980 + 0xf980: 0x6c2fe220, 0xf982: 0x6c2fe020, 0xf983: 0x6c2fe420, + 0xf985: 0x6c2fde20, + 0xf98d: 0x6c2fea20, + 0xf995: 0x6c2fe820, 0xf997: 0x6c2fee20, + 0xf99a: 0x6c04ae20, 0xf99b: 0x6c2fec20, + 0xf99f: 0x6c2ff020, + 0xf9a2: 0x6c2ff220, + 0xf9a4: 0x6c2ff620, 0xf9a5: 0x6c2ff420, + 0xf9a9: 0x6c2ff820, 0xf9aa: 0x6c2ffc20, 0xf9ab: 0x6c2ffa20, + // Block 0x3e7, offset 0xf9c0 + 0xf9e8: 0x6c075420, + 0xf9ed: 0x6c2ffe20, + 0xf9f0: 0x6c300020, + 0xf9f8: 0x6c026c20, + 0xf9fc: 0x6c300220, + // Block 0x3e8, offset 0xfa00 + 0xfa00: 0x6c300420, + 0xfa04: 0x6c0ba620, + 0xfa0f: 0x6c300620, + 0xfa11: 0x6c300820, 0xfa13: 0x6c300a20, + 0xfa14: 0x6c300c20, + 0xfa18: 0x6c072020, + 0xfa1e: 0x6c300e20, 0xfa1f: 0x6c301020, + 0xfa22: 0x6c301220, 0xfa23: 0x6c301420, + 0xfa26: 0x6c301620, + 0xfa2a: 0x6c11c220, 0xfa2b: 0x6c301a20, + 0xfa2d: 0x6c126820, 0xfa2e: 0x6c301c20, 0xfa2f: 0x6c301820, + 0xfa31: 0x6c302020, + 0xfa34: 0x6c301e20, 0xfa37: 0x6c302220, + 0xfa3b: 0x6c302420, + // Block 0x3e9, offset 0xfa40 + 0xfa46: 0x6c302620, + 0xfa58: 0x6c302820, 0xfa5a: 0x6c302a20, + 0xfa5f: 0x6c302c20, + 0xfa62: 0x6c302e20, 0xfa63: 0x6c303020, + 0xfa65: 0x6c303220, 0xfa67: 0x6c303420, + 0xfa68: 0x6c303620, 0xfa69: 0x6c303820, 0xfa6a: 0x6c303a20, + 0xfa6e: 0x6c303c20, 0xfa6f: 0x6c303e20, + 0xfa71: 0x6c20e020, 0xfa72: 0x6c304020, + 0xfa7b: 0x6c268a20, + 0xfa7c: 0x6c03d420, + // Block 0x3ea, offset 0xfa80 + 0xfa81: 0x6c023620, 0xfa82: 0x6c077c20, 0xfa83: 0x6c304420, + 0xfa84: 0x6c304220, 0xfa85: 0x6c149a20, + 0xfa8d: 0x6c304820, 0xfa8e: 0x6c304a20, 0xfa8f: 0x6c304620, + 0xfa91: 0x6c304c20, + 0xfa94: 0x6c145820, + 0xfa98: 0x6c304e20, 0xfa9a: 0x6c046220, + 0xfaaf: 0x6c16ce20, + 0xfab4: 0x6c305020, + // Block 0x3eb, offset 0xfac0 + 0xfac3: 0x6c305420, + 0xface: 0x6c003c20, + 0xfad1: 0x6c305620, 0xfad2: 0x6c132e20, 0xfad3: 0x6c305220, + 0xfad6: 0x6c305820, 0xfad7: 0x6c305a20, + 0xfadf: 0x6c305c20, + 0xfae0: 0x6c305e20, + 0xfae8: 0x6c306020, 0xfaea: 0x6c147020, 0xfaeb: 0x6c082e20, + 0xfaed: 0x6c080c20, 0xfaee: 0x6c0c9a20, + 0xfaf4: 0x6c306220, + 0xfaf9: 0x6c306820, + // Block 0x3ec, offset 0xfb00 + 0xfb00: 0x6c306420, + 0xfb06: 0x6c306a20, + 0xfb09: 0x6c068220, 0xfb0a: 0x6c306620, + 0xfb0f: 0x6c306c20, + 0xfb11: 0x6c306e20, 0xfb12: 0x6c307020, + 0xfb14: 0x6c307820, 0xfb16: 0x6c082820, + 0xfb1b: 0x6c0dc020, + 0xfb21: 0x6c307a20, 0xfb22: 0x6c307420, 0xfb23: 0x6c307220, + 0xfb24: 0x6c307620, + 0xfb28: 0x6c05a220, + 0xfb30: 0x6c308220, 0xfb31: 0x6c308020, 0xfb32: 0x6c307e20, + 0xfb35: 0x6c002620, + // Block 0x3ed, offset 0xfb40 + 0xfb44: 0x6c309620, 0xfb46: 0x6c308e20, + 0xfb48: 0x6c309020, 0xfb49: 0x6c308820, 0xfb4a: 0x6c309420, + 0xfb4c: 0x6c308c20, 0xfb4d: 0x6c02b820, + 0xfb50: 0x6c171c20, 0xfb52: 0x6c309220, 0xfb53: 0x6c308a20, + 0xfb54: 0x6c308620, 0xfb55: 0x6c308420, + 0xfb5b: 0x6c309a20, + 0xfb61: 0x6c30a020, + 0xfb64: 0x6c309e20, 0xfb65: 0x6c309c20, + 0xfb6d: 0x6c12ae20, 0xfb6e: 0x6c309820, 0xfb6f: 0x6c00a620, + 0xfb70: 0x6c30a220, 0xfb72: 0x6c30a620, + 0xfb79: 0x6c02d220, 0xfb7a: 0x6c307c20, 0xfb7b: 0x6c00ea20, + 0xfb7e: 0x6c30aa20, + // Block 0x3ee, offset 0xfb80 + 0xfb86: 0x6c30a820, 0xfb87: 0x6c30a420, + 0xfb88: 0x6c0e0e20, + 0xfb92: 0x6c147420, + 0xfb97: 0x6c167c20, + 0xfb9a: 0x6c30ac20, + 0xfba0: 0x6c30ae20, + 0xfba7: 0x6c30b020, + 0xfbb6: 0x6c30b220, + 0xfbb8: 0x6c30b420, + // Block 0x3ef, offset 0xfbc0 + 0xfbe5: 0x6c0ee620, 0xfbe7: 0x6c30b620, + 0xfbe9: 0x6c11ce20, 0xfbeb: 0x6c30c020, + 0xfbec: 0x6c30b820, + 0xfbf0: 0x6c30ba20, 0xfbf3: 0x6c13f620, + 0xfbf4: 0x6c14d820, 0xfbf6: 0x6c108820, + // Block 0x3f0, offset 0xfc00 + 0xfc03: 0x6c30c220, + 0xfc06: 0x6c30c420, 0xfc07: 0x6c106420, + 0xfc08: 0x6c30be20, 0xfc09: 0x6c30bc20, + 0xfc0e: 0x6c018c20, + 0xfc12: 0x6c30d420, + 0xfc15: 0x6c30d220, + 0xfc1b: 0x6c016620, + 0xfc1f: 0x6c30ce20, + 0xfc23: 0x6c30cc20, + 0xfc26: 0x6c30c820, + 0xfc28: 0x6c02ea20, 0xfc2a: 0x6c30c620, 0xfc2b: 0x6c08f420, + 0xfc2c: 0x6c018a20, + 0xfc3b: 0x6c072220, + 0xfc3e: 0x6c30da20, 0xfc3f: 0x6c30d820, + // Block 0x3f1, offset 0xfc40 + 0xfc41: 0x6c30d620, + 0xfc44: 0x6c30d020, 0xfc46: 0x6c30dc20, + 0xfc48: 0x6c30de20, + 0xfc50: 0x6c30e820, 0xfc51: 0x6c30e620, + 0xfc59: 0x6c30ea20, + 0xfc5c: 0x6c00d620, 0xfc5d: 0x6c30e020, 0xfc5e: 0x6c30e220, + 0xfc60: 0x6c074420, 0xfc61: 0x6c14c220, + 0xfc64: 0x6c30e420, + 0xfc6c: 0x6c13f820, 0xfc6f: 0x6c30f420, + 0xfc72: 0x6c30ec20, + 0xfc7a: 0x6c30f620, + // Block 0x3f2, offset 0xfc80 + 0xfc87: 0x6c30f020, + 0xfc89: 0x6c30ee20, + 0xfc8f: 0x6c059c20, + 0xfc9a: 0x6c30f820, + 0xfca4: 0x6c30fa20, + 0xfca9: 0x6c30fc20, 0xfcab: 0x6c30f220, + 0xfcaf: 0x6c30ca20, + 0xfcb2: 0x6c30fe20, + 0xfcb4: 0x6c0f3220, + 0xfcb8: 0x6c310620, 0xfcba: 0x6c310820, 0xfcbb: 0x6c310420, + // Block 0x3f3, offset 0xfcc0 + 0xfcc1: 0x6c310220, 0xfcc2: 0x6c310e20, + 0xfcc4: 0x6c310020, 0xfcc6: 0x6c310a20, + 0xfccf: 0x6c310c20, + 0xfcd3: 0x6c311220, + 0xfcd9: 0x6c311020, + 0xfce6: 0x6c311620, + 0xfced: 0x6c311820, 0xfcef: 0x6c311a20, + 0xfcf2: 0x6c171620, + 0xfcf8: 0x6c311420, 0xfcf9: 0x6c0dce20, 0xfcfa: 0x6c07f220, + 0xfcfd: 0x6c311c20, + // Block 0x3f4, offset 0xfd00 + 0xfd1a: 0x6c311e20, 0xfd1b: 0x6c312020, + 0xfd1e: 0x6c312220, + // Block 0x3f5, offset 0xfd40 + 0xfd75: 0x6c312420, + 0xfd78: 0x6c060820, 0xfd79: 0x6c312620, + 0xfd7d: 0x6c312820, 0xfd7f: 0x6c08ee20, + // Block 0x3f6, offset 0xfd80 + 0xfd81: 0x6c312a20, + 0xfd88: 0x6c312c20, 0xfd8b: 0x6c312e20, + 0xfd8c: 0x6c313020, + 0xfd91: 0x6c313620, 0xfd92: 0x6c313220, 0xfd93: 0x6c16fc20, + 0xfd95: 0x6c313420, 0xfd97: 0x6c16a620, + 0xfd9d: 0x6c313820, 0xfd9f: 0x6c167e20, + 0xfda5: 0x6c313a20, 0xfda6: 0x6c11a020, + 0xfda9: 0x6c313c20, 0xfdaa: 0x6c314020, + 0xfdad: 0x6c314220, + 0xfdb8: 0x6c313e20, 0xfdb9: 0x6c073620, 0xfdba: 0x6c14ea20, 0xfdbb: 0x6c145a20, + 0xfdbc: 0x6c1c4020, 0xfdbe: 0x6c213620, 0xfdbf: 0x6c148a20, + // Block 0x3f7, offset 0xfdc0 + 0xfdc4: 0x6c018e20, + 0xfdcc: 0x6c314620, 0xfdcd: 0x6c040c20, 0xfdce: 0x6c314820, 0xfdcf: 0x6c314a20, + 0xfdd0: 0x6c314c20, 0xfdd2: 0x6c074620, + 0xfdd4: 0x6c314e20, + 0xfdd8: 0x6c235220, 0xfdd9: 0x6c150620, 0xfddb: 0x6c0dbe20, + 0xfddc: 0x6c315020, 0xfddd: 0x6c315420, 0xfdde: 0x6c315220, + 0xfde0: 0x6c315620, + 0xfde5: 0x6c315820, + 0xfde8: 0x6c315a20, + 0xfdef: 0x6c315c20, + 0xfdf4: 0x6c315e20, 0xfdf6: 0x6c316020, 0xfdf7: 0x6c316220, + 0xfdf9: 0x6c316420, 0xfdfb: 0x6c316620, + 0xfdfc: 0x6c316820, 0xfdfd: 0x6c316a20, + // Block 0x3f8, offset 0xfe00 + 0xfe07: 0x6c316c20, + 0xfe08: 0x6c316e20, + 0xfe0e: 0x6c0f7420, + 0xfe13: 0x6c065a20, + 0xfe15: 0x6c317220, + 0xfe20: 0x6c0cd620, 0xfe21: 0x6c317420, + 0xfe2c: 0x6c317620, + 0xfe3b: 0x6c125e20, + 0xfe3e: 0x6c317820, + // Block 0x3f9, offset 0xfe40 + 0xfe4a: 0x6c317a20, 0xfe4b: 0x6c254c20, + 0xfe4e: 0x6c2c2e20, 0xfe4f: 0x6c2f4420, + 0xfe52: 0x6c317c20, + 0xfe54: 0x6c317e20, + 0xfe5f: 0x6c318220, + 0xfe60: 0x6c318420, 0xfe61: 0x6c318620, 0xfe62: 0x6c16a820, 0xfe63: 0x6c318020, + 0xfe66: 0x6c318820, 0xfe67: 0x6c318a20, + 0xfe6a: 0x6c318e20, + 0xfe6c: 0x6c318c20, + 0xfe72: 0x6c319220, + 0xfe76: 0x6c319420, 0xfe77: 0x6c319020, + // Block 0x3fa, offset 0xfe80 + 0xfe8d: 0x6c163420, + 0xfe95: 0x6c319620, + 0xfe9c: 0x6c319820, 0xfe9d: 0x6c258620, + 0xfea0: 0x6c319a20, + // Block 0x3fb, offset 0xfec0 + 0xfec0: 0x6c2bdc20, 0xfec1: 0x6c06ce20, 0xfec2: 0x6c093c20, 0xfec3: 0x6c2c1020, + 0xfec4: 0x6c02c820, 0xfec5: 0x6c051c20, 0xfec6: 0x6c04f620, 0xfec7: 0x6c319820, + 0xfec8: 0x6c319820, 0xfec9: 0x6c056420, 0xfeca: 0x6c04ec20, 0xfecb: 0x6c19b020, + 0xfecc: 0x6c10a820, 0xfecd: 0x6c1dac20, 0xfece: 0x6c245a20, 0xfecf: 0x6c15d620, + 0xfed0: 0x6c29d420, 0xfed1: 0x6c15d820, 0xfed2: 0x6c15da20, 0xfed3: 0x6c2d5e20, + 0xfed4: 0x6c207020, 0xfed5: 0x6c15e420, 0xfed6: 0x6c22ae20, 0xfed7: 0x6c237220, + 0xfed8: 0x6c15e820, 0xfed9: 0x6c15ea20, 0xfeda: 0x6c2fc820, 0xfedb: 0x6c174220, + 0xfedc: 0x6c15ee20, 0xfedd: 0x6c15f220, 0xfede: 0x6c22f420, 0xfedf: 0x6c15f820, + 0xfee0: 0x6c312220, 0xfee1: 0x6c15f020, 0xfee2: 0x6c15f420, 0xfee3: 0x6c15f620, + 0xfee4: 0x6c2b0220, 0xfee5: 0x6c1e1420, 0xfee6: 0x6c285620, 0xfee7: 0x43103e20, + 0xfee8: 0x6c16de20, 0xfee9: 0x6c16e220, 0xfeea: 0x6c16e820, 0xfeeb: 0x6c16ee20, + 0xfeec: 0x6c16f820, 0xfeed: 0x6c179220, 0xfeee: 0x6c169020, 0xfeef: 0x6c18b420, + 0xfef0: 0x42c98820, 0xfef1: 0x6c16d020, 0xfef2: 0x6c22f220, 0xfef3: 0x6c249620, + 0xfef4: 0x6c16f220, 0xfef5: 0x6c29cc20, 0xfef6: 0x6c163c20, 0xfef7: 0x6c16d620, + 0xfef8: 0x6c16d820, 0xfef9: 0x6c16ce20, 0xfefa: 0x6c07f220, 0xfefb: 0x6c250420, + 0xfefc: 0x6c254420, 0xfefd: 0x42fb4020, 0xfefe: 0x43079220, 0xfeff: 0x43260820, + // Block 0x3fc, offset 0xff00 + 0xff00: 0x6c08ee20, 0xff01: 0x6c170420, 0xff02: 0x6c1a9e20, 0xff03: 0x6c16e020, + 0xff04: 0x6c262620, 0xff05: 0x6c16f420, 0xff06: 0x6c16ec20, 0xff07: 0x6c251c20, + 0xff08: 0x6c16d420, 0xff09: 0x6c15e220, 0xff0a: 0x6c1a9620, 0xff0b: 0x42b8c420, + 0xff0c: 0x6c209220, 0xff0d: 0x42dbb420, 0xff0e: 0x6c16ea20, 0xff0f: 0x6c168620, + 0xff10: 0x6c271420, 0xff11: 0x6c2ea420, 0xff12: 0x6c2f1420, 0xff13: 0x6c170020, + 0xff14: 0x6c31a420, 0xff15: 0x6c164620, 0xff16: 0x6c165620, 0xff17: 0x6c003a20, + 0xff18: 0x6c126e20, 0xff19: 0x6c166220, 0xff1a: 0x6c2bc620, 0xff1b: 0x6c1dfe20, + 0xff1c: 0x6c207020, 0xff1d: 0x6c0dec20, 0xff1e: 0x6c0e1420, 0xff1f: 0x6c10fa20, + 0xff20: 0x6c0fe420, 0xff21: 0x6c161820, 0xff22: 0x6c007620, 0xff23: 0x6c142c20, + 0xff24: 0x42f1f620, 0xff25: 0x6c138820, 0xff26: 0x6c131420, 0xff27: 0x6c12c420, + 0xff28: 0x6c122e20, 0xff29: 0x6c1ed820, 0xff2a: 0x6c080620, 0xff2b: 0x6c190a20, + 0xff2c: 0x6c07aa20, 0xff2d: 0x6c0a9c20, 0xff2e: 0x6c15b620, 0xff2f: 0x43155420, + 0xff30: 0x6c082020, 0xff31: 0x6c0dfc20, 0xff32: 0x6c0ef020, 0xff33: 0x6c099820, + 0xff34: 0x6c095620, 0xff35: 0x6c161e20, 0xff36: 0x6c162020, 0xff37: 0x6c164020, + 0xff38: 0x6c182620, 0xff39: 0x6c185a20, 0xff3a: 0x6c164c20, 0xff3b: 0x6c165820, + 0xff3c: 0x6c165a20, 0xff3d: 0x6c165c20, 0xff3e: 0x6c166020, 0xff3f: 0x6c18c020, + // Block 0x3fd, offset 0xff40 + 0xff40: 0x6c16cc20, 0xff41: 0x6c0a3a20, 0xff42: 0x6c1c6220, 0xff43: 0x6c163a20, + 0xff44: 0x6c228020, 0xff45: 0x6c24f620, 0xff46: 0x6c2e7420, 0xff47: 0x6c2ffc20, + 0xff48: 0x6c16a620, 0xff49: 0x6c314820, 0xff4a: 0x6c166620, 0xff4b: 0x42cd8c20, + 0xff4c: 0x42d6ee20, 0xff4d: 0x6c2cf620, 0xff4e: 0x6c110220, 0xff4f: 0x6c16ba20, + 0xff50: 0x6c1dba20, 0xff51: 0x6c110820, 0xff52: 0x6c16bc20, 0xff53: 0x6c16be20, + 0xff54: 0x42e91220, 0xff55: 0x42f39420, 0xff56: 0x6c16c220, 0xff57: 0x6c16c420, + 0xff58: 0x6c2cdc20, 0xff59: 0x6c16c620, 0xff5a: 0x6c16c820, 0xff5b: 0x43269420, + 0xff5c: 0x6c16ae20, 0xff5d: 0x6c16b020, 0xff5e: 0x6c00ac20, 0xff5f: 0x6c16b220, + 0xff60: 0x6c16b420, 0xff61: 0x43155420, 0xff62: 0x6c16b620, 0xff63: 0x6c110420, + 0xff64: 0x6c110620, 0xff65: 0x42d75c20, 0xff66: 0x6c16c020, 0xff67: 0x6c235e20, + 0xff68: 0x6c168a20, 0xff69: 0x6c1a1220, 0xff6a: 0x6c10fa20, 0xff6b: 0x6c169420, + 0xff6c: 0x6c169620, 0xff6d: 0x6c169820, 0xff6e: 0x6c238e20, 0xff6f: 0x6c278420, + 0xff70: 0x6c27c420, 0xff71: 0x6c169e20, 0xff72: 0x6c16a220, 0xff73: 0x6c2f0420, + 0xff74: 0x6c166420, 0xff75: 0x6c168e20, 0xff76: 0x6c255020, 0xff77: 0x6c2d9a20, + 0xff78: 0x6c2ecc20, 0xff79: 0x6c1d1a20, 0xff7a: 0x6c163e20, 0xff7b: 0x6c164220, + 0xff7c: 0x6c164820, 0xff7d: 0x6c10e820, 0xff7e: 0x6c164a20, 0xff7f: 0x6c207020, + // Block 0x3fe, offset 0xff80 + 0xff80: 0x6c22e020, 0xff81: 0x6c165220, 0xff82: 0x6c297e20, 0xff83: 0x6c165e20, + 0xff84: 0x6c163420, 0xff85: 0x6c1f2a20, 0xff86: 0x6c2e9a20, 0xff87: 0x6c162220, + 0xff88: 0x42cef620, 0xff89: 0x6c154020, 0xff8a: 0x6c162420, 0xff8b: 0x6c162620, + 0xff8c: 0x6c162820, 0xff8d: 0x6c162a20, 0xff8e: 0x6c162c20, 0xff8f: 0x6c128220, + 0xff90: 0x6c168820, 0xff91: 0x6c16fa20, 0xff92: 0x6c1dce20, 0xff93: 0x6c161420, + 0xff94: 0x6c166a20, 0xff95: 0x6c1bde20, 0xff96: 0x6c21cc20, 0xff97: 0x6c167820, + 0xff98: 0x6c161620, 0xff99: 0x6c1d6020, 0xff9a: 0x6c053820, 0xff9b: 0x6c161820, + 0xff9c: 0x6c163020, 0xff9d: 0x6c15fc20, 0xff9e: 0x6c15fe20, 0xff9f: 0x6c160020, + 0xffa0: 0x6c006e20, 0xffa1: 0x6c160220, 0xffa2: 0x6c160420, 0xffa3: 0x6c0f7620, + 0xffa4: 0x6c160620, 0xffa5: 0x6c160a20, 0xffa6: 0x6c1da420, 0xffa7: 0x6c160c20, + 0xffa8: 0x6c160e20, 0xffa9: 0x6c161020, 0xffaa: 0x6c161220, 0xffab: 0x6c106620, + 0xffac: 0x6c0f8820, 0xffad: 0x6c193020, 0xffae: 0x6c167220, 0xffaf: 0x42e93020, + 0xffb0: 0x6c29ca20, 0xffb1: 0x6c167a20, 0xffb2: 0x6c167c20, 0xffb3: 0x6c167e20, + 0xffb4: 0x6c166e20, 0xffb5: 0x6c167020, 0xffb6: 0x6c167620, 0xffb7: 0x6c161a20, + 0xffb8: 0x6c02b020, 0xffb9: 0x6c162e20, 0xffba: 0x42e58020, 0xffbb: 0x6c229820, + 0xffbc: 0x6c08f220, 0xffbd: 0x6c09c020, 0xffbe: 0x6c0e7a20, 0xffbf: 0x6c086620, + // Block 0x3ff, offset 0xffc0 + 0xffc0: 0x6c0c3420, 0xffc1: 0x6c0fde20, 0xffc2: 0x6c0dde20, 0xffc3: 0x6c102420, + 0xffc4: 0x6c0dd820, 0xffc5: 0x6c105420, 0xffc6: 0x6c140e20, 0xffc7: 0x6c2ce020, + 0xffc8: 0x6c070420, 0xffc9: 0x6c071a20, 0xffca: 0x6c05f620, 0xffcb: 0x6c028220, + 0xffcc: 0x6c181a20, 0xffcd: 0x42ab8020, 0xffce: 0x43f41c20, 0xffcf: 0x43f41e20, + 0xffd0: 0x6c0f0a20, 0xffd1: 0x43f42220, 0xffd2: 0x6c0be420, 0xffd3: 0x43f42620, + 0xffd4: 0x43f42820, 0xffd5: 0x42a3bc20, 0xffd6: 0x6c0ea020, 0xffd7: 0x6c012a20, + 0xffd8: 0x6c169a20, 0xffd9: 0x6c0b4420, 0xffda: 0x6c0aa220, 0xffdb: 0x6c131a20, + 0xffdc: 0x6c153e20, 0xffdd: 0x6c0bf420, 0xffde: 0x6c00ce20, 0xffdf: 0x43f43e20, + 0xffe0: 0x430c2420, 0xffe1: 0x43f44220, 0xffe2: 0x6c0a3420, 0xffe3: 0x43f44620, + 0xffe4: 0x43f44820, 0xffe5: 0x6c009e20, 0xffe6: 0x6c0fd420, 0xffe7: 0x43f44e20, + 0xffe8: 0x43f45020, 0xffe9: 0x43f45220, 0xffea: 0x6c120620, 0xffeb: 0x6c08bc20, + 0xffec: 0x6c036620, 0xffed: 0x6c0f3220, 0xffee: 0x4321bc20, 0xffef: 0x6c16a020, + 0xfff0: 0x6c12f820, 0xfff1: 0x6c0cd820, 0xfff2: 0x6c14e020, 0xfff3: 0x6c138a20, + 0xfff4: 0x6c04c820, 0xfff5: 0x6c121820, 0xfff6: 0x6c02be20, 0xfff7: 0x6c0e1820, + 0xfff8: 0x6c038e20, 0xfff9: 0x6c135220, 0xfffa: 0x6c143220, 0xfffb: 0x6c0cec20, + 0xfffc: 0x6c1b9c20, 0xfffd: 0x6c022a20, 0xfffe: 0x6c025c20, 0xffff: 0x6c0d3820, + // Block 0x400, offset 0x10000 + 0x10000: 0x6c0ec020, 0x10001: 0x6c12c020, 0x10002: 0x6c03a620, 0x10003: 0x6c0a2220, + 0x10004: 0x6c116220, 0x10005: 0x6c023c20, 0x10006: 0x6c0a2620, 0x10007: 0x6c033220, + 0x10008: 0x6c093220, 0x10009: 0x42e45620, 0x1000a: 0x6c0de420, 0x1000b: 0x6c123420, + 0x1000c: 0x6c093420, 0x1000d: 0x6c089a20, 0x1000e: 0x6c03ba20, 0x1000f: 0x6c157420, + 0x10010: 0x6c0cc420, 0x10011: 0x6c09e220, 0x10012: 0x6c01dc20, 0x10013: 0x6c0f5e20, + 0x10014: 0x6c074020, 0x10015: 0x6c108220, 0x10016: 0x6c0c4220, 0x10017: 0x6c16c220, + 0x10018: 0x6c270220, 0x10019: 0x6c11f620, 0x1001a: 0x6c0a2c20, 0x1001b: 0x6c093820, + 0x1001c: 0x6c09a620, 0x1001d: 0x4304f220, 0x1001e: 0x4304f220, 0x1001f: 0x6c0ea420, + 0x10020: 0x6c02cc20, 0x10021: 0x6c08aa20, 0x10022: 0x6c013020, 0x10023: 0x6c04e820, + 0x10024: 0x6c12bc20, 0x10025: 0x6c0d3e20, 0x10026: 0x431f6c20, 0x10027: 0x6c009e20, + 0x10028: 0x6c10ca20, 0x10029: 0x6c04aa20, 0x1002a: 0x6c12be20, 0x1002b: 0x6c056a20, + 0x1002c: 0x4885dc20, 0x1002d: 0x6c036820, + 0x10030: 0x6c135c20, 0x10031: 0x6c185420, 0x10032: 0x6c0ca420, 0x10033: 0x429f0020, + 0x10034: 0x6c09c420, 0x10035: 0x6c182c20, 0x10036: 0x6c155820, 0x10037: 0x6c094620, + 0x10038: 0x6c02be20, 0x10039: 0x42aaaa20, 0x1003a: 0x6c199620, 0x1003b: 0x42abc420, + 0x1003c: 0x6c0f0a20, 0x1003d: 0x6c133620, 0x1003e: 0x6c014020, 0x1003f: 0x6c144a20, + // Block 0x401, offset 0x10040 + 0x10040: 0x6c1b0820, 0x10041: 0x42b65020, 0x10042: 0x42bda420, 0x10043: 0x42bdb220, + 0x10044: 0x6c07b020, 0x10045: 0x6c1cb620, 0x10046: 0x6c1d2c20, 0x10047: 0x6c0b2e20, + 0x10048: 0x6c154820, 0x10049: 0x6c0d3820, 0x1004a: 0x42c2c020, 0x1004b: 0x6c0ec020, + 0x1004c: 0x6c0da620, 0x1004d: 0x6c1e5820, 0x1004e: 0x6c1e2c20, 0x1004f: 0x42c8a420, + 0x10050: 0x6c1eca20, 0x10051: 0x6c0be420, 0x10052: 0x6c16e220, 0x10053: 0x6c141020, + 0x10054: 0x6c0aee20, 0x10055: 0x6c210220, 0x10056: 0x6c082020, 0x10057: 0x6c162420, + 0x10058: 0x42ddb620, 0x10059: 0x6c08d420, 0x1005a: 0x6c033220, 0x1005b: 0x6c109020, + 0x1005c: 0x6c093220, 0x1005d: 0x42ef4e20, 0x1005e: 0x6c094e20, 0x1005f: 0x6c11f020, + 0x10060: 0x6c0ea020, 0x10061: 0x42e8e220, 0x10062: 0x42ea0c20, 0x10063: 0x6c020820, + 0x10064: 0x42ec3a20, 0x10065: 0x6c243820, 0x10066: 0x6c012a20, 0x10067: 0x6c0bf220, + 0x10068: 0x6c0eec20, 0x10069: 0x42ee9420, 0x1006a: 0x6c0e7e20, 0x1006b: 0x42f19820, + 0x1006c: 0x42f56220, 0x1006d: 0x6c0c4220, 0x1006e: 0x42f8f620, 0x1006f: 0x6c26c220, + 0x10070: 0x6c16c220, 0x10071: 0x42fe7c20, 0x10072: 0x6c093820, 0x10073: 0x6c070220, + 0x10074: 0x6c01ec20, 0x10075: 0x430ef220, 0x10076: 0x6c2aee20, 0x10077: 0x6c132020, + 0x10078: 0x6c08aa20, 0x10079: 0x6c0ed820, 0x1007a: 0x6c0a3420, 0x1007b: 0x6c0c0220, + 0x1007c: 0x6c013020, 0x1007d: 0x6c0dec20, 0x1007e: 0x6c154e20, 0x1007f: 0x6c04e820, + // Block 0x402, offset 0x10080 + 0x10080: 0x6c1ede20, 0x10081: 0x6c0d3e20, 0x10082: 0x6c155020, 0x10083: 0x6c2d5020, + 0x10084: 0x43233220, 0x10085: 0x4324ec20, 0x10086: 0x432cf820, 0x10087: 0x6c10ca20, + 0x10088: 0x6c153e20, 0x10089: 0x432fb620, 0x1008a: 0x6c04aa20, 0x1008b: 0x43301620, + 0x1008c: 0x6c12be20, 0x1008d: 0x43362420, 0x1008e: 0x6c319820, 0x1008f: 0x48509420, + 0x10090: 0x48508820, 0x10091: 0x4867aa20, 0x10092: 0x44773a20, 0x10093: 0x44803020, + 0x10094: 0x44807220, 0x10095: 0x48a49220, 0x10096: 0x48b9a020, 0x10097: 0x48fda620, + 0x10098: 0x433e8620, 0x10099: 0x433f1c20, + // Block 0x403, offset 0x100c0 + 0x100c1: 0x4002ba20, 0x100c2: 0x4003e020, 0x100c3: 0x4004ea20, + 0x100c4: 0x4027de20, 0x100c5: 0x4004ec20, 0x100c6: 0x4004e620, 0x100c7: 0x4003d220, + 0x100c8: 0x4003f420, 0x100c9: 0x4003f620, 0x100ca: 0x4004d820, 0x100cb: 0x40093820, + 0x100cc: 0x40024020, 0x100cd: 0x40021a20, 0x100ce: 0x4002e420, 0x100cf: 0x4004e220, + 0x100d0: 0x4029cc20, 0x100d1: 0x4029ce20, 0x100d2: 0x4029d020, 0x100d3: 0x4029d220, + 0x100d4: 0x4029d420, 0x100d5: 0x4029d620, 0x100d6: 0x4029d820, 0x100d7: 0x4029da20, + 0x100d8: 0x4029dc20, 0x100d9: 0x4029de20, 0x100da: 0x40026c20, 0x100db: 0x40026220, + 0x100dc: 0x40094020, 0x100dd: 0x40094220, 0x100de: 0x40094420, 0x100df: 0x4002c420, + 0x100e0: 0x4004d620, 0x100e1: 0x002bde88, 0x100e2: 0x002c0a88, 0x100e3: 0x002c3a88, + 0x100e4: 0x002c6288, 0x100e5: 0x002c9888, 0x100e6: 0x002d0888, 0x100e7: 0x002d2288, + 0x100e8: 0x002d6888, 0x100e9: 0x002d9a88, 0x100ea: 0x002dcc88, 0x100eb: 0x002dfe88, + 0x100ec: 0x002e2288, 0x100ed: 0x002e8288, 0x100ee: 0x002e9e88, 0x100ef: 0x002ee288, + 0x100f0: 0x002f2c88, 0x100f1: 0x002f5688, 0x100f2: 0x002f7a88, 0x100f3: 0x002fe688, + 0x100f4: 0x00302c88, 0x100f5: 0x00306c88, 0x100f6: 0x0030be88, 0x100f7: 0x0030e288, + 0x100f8: 0x0030f688, 0x100f9: 0x00310088, 0x100fa: 0x00312a88, 0x100fb: 0x4003f820, + 0x100fc: 0x4003d220, 0x100fd: 0x4003fa20, 0x100fe: 0x40062420, 0x100ff: 0x40021620, + // Block 0x404, offset 0x10100 + 0x10100: 0x40061e20, 0x10101: 0x402bde20, 0x10102: 0x402c0a20, 0x10103: 0x402c3a20, + 0x10104: 0x402c6220, 0x10105: 0x402c9820, 0x10106: 0x402d0820, 0x10107: 0x402d2220, + 0x10108: 0x402d6820, 0x10109: 0x402d9a20, 0x1010a: 0x402dcc20, 0x1010b: 0x402dfe20, + 0x1010c: 0x402e2220, 0x1010d: 0x402e8220, 0x1010e: 0x402e9e20, 0x1010f: 0x402ee220, + 0x10110: 0x402f2c20, 0x10111: 0x402f5620, 0x10112: 0x402f7a20, 0x10113: 0x402fe620, + 0x10114: 0x40302c20, 0x10115: 0x40306c20, 0x10116: 0x4030be20, 0x10117: 0x4030e220, + 0x10118: 0x4030f620, 0x10119: 0x40310020, 0x1011a: 0x40312a20, 0x1011b: 0x4003fc20, + 0x1011c: 0x40094820, 0x1011d: 0x4003fe20, 0x1011e: 0x40094c20, 0x1011f: 0x00041883, + 0x10120: 0x00041a83, 0x10121: 0x40030420, 0x10122: 0x4004a420, 0x10123: 0x4004a620, + 0x10124: 0x40025c20, 0x10125: 0x00023e92, 0x10126: 0xca3c3601, 0x10127: 0xc64d3281, + 0x10128: 0xc71d3281, 0x10129: 0xc7dd3601, 0x1012a: 0xc8c43281, 0x1012b: 0xc9793281, + 0x1012c: 0xc6e83281, 0x1012d: 0xc8af3281, 0x1012e: 0xca1d3281, 0x1012f: 0xc8483601, + 0x10130: 0x0027d692, 0x10131: 0xc6533281, 0x10132: 0xc7233281, 0x10133: 0xc7f23601, + 0x10134: 0xc8ca3281, 0x10135: 0xc97f3281, 0x10136: 0xc6663281, 0x10137: 0xc7363601, + 0x10138: 0xc8143601, 0x10139: 0xc8dd3281, 0x1013a: 0xc9923601, 0x1013b: 0xc67f3601, + 0x1013c: 0xc7583601, 0x1013d: 0xc8363601, 0x1013e: 0xc8f63601, 0x1013f: 0xc9af3601, + // Block 0x405, offset 0x10140 + 0x10140: 0xc69c3601, 0x10141: 0xc7753601, 0x10142: 0xc85d3601, 0x10143: 0xc9133601, + 0x10144: 0xc9d13601, 0x10145: 0xc6ac3281, 0x10146: 0xc7853281, 0x10147: 0xc8703281, + 0x10148: 0xc9233281, 0x10149: 0xc9e13281, 0x1014a: 0xc6ca3601, 0x1014b: 0xc7a33601, + 0x1014c: 0xc88e3601, 0x1014d: 0xc9413601, 0x1014e: 0xc9ff3601, 0x1014f: 0xc6e23281, + 0x10150: 0xc7bb3281, 0x10151: 0xc8a93281, 0x10152: 0xc9593281, 0x10153: 0xca173281, + 0x10154: 0xc6ee3281, 0x10155: 0xc8b53281, 0x10156: 0xca233281, 0x10157: 0xc6f73281, + 0x10158: 0xc7c43281, 0x10159: 0xc8be3281, 0x1015a: 0xc9623281, 0x1015b: 0xca2c3281, + 0x1015c: 0xc7113601, 0x1015d: 0xca453ae1, 0x1015e: 0xa0012812, 0x1015f: 0xa0012912, + 0x10160: 0x4063a620, 0x10161: 0x4062ac20, 0x10162: 0x4062ae20, 0x10163: 0x40646820, + 0x10164: 0x4062b020, 0x10165: 0x40646c20, 0x10166: 0x40646e20, 0x10167: 0x4062b220, + 0x10168: 0x4062b420, 0x10169: 0x4062b620, 0x1016a: 0x40647420, 0x1016b: 0x40647620, + 0x1016c: 0x40647820, 0x1016d: 0x40647a20, 0x1016e: 0x40647c20, 0x1016f: 0x40647e20, + 0x10170: 0x4062e020, 0x10171: 0x4062b820, 0x10172: 0x4062ba20, 0x10173: 0x4062bc20, + 0x10174: 0x4062ee20, 0x10175: 0x4062be20, 0x10176: 0x4062c020, 0x10177: 0x4062c220, + 0x10178: 0x4062c420, 0x10179: 0x4062c620, 0x1017a: 0x4062c820, 0x1017b: 0x4062ca20, + 0x1017c: 0x4062cc20, 0x1017d: 0x4062ce20, 0x1017e: 0x4062d020, + // Block 0x406, offset 0x10180 + 0x10182: 0x4063a820, 0x10183: 0x4063aa20, + 0x10184: 0x4063ac20, 0x10185: 0x4063ae20, 0x10186: 0x4063b020, 0x10187: 0x4063b220, + 0x1018a: 0x4063b420, 0x1018b: 0x4063b620, + 0x1018c: 0x4063b820, 0x1018d: 0x4063ba20, 0x1018e: 0x4063bc20, 0x1018f: 0x4063be20, + 0x10192: 0x4063c020, 0x10193: 0x4063c220, + 0x10194: 0x4063c420, 0x10195: 0x4063c620, 0x10196: 0x4063c820, 0x10197: 0x4063ca20, + 0x1019a: 0x4063cc20, 0x1019b: 0x4063ce20, + 0x1019c: 0x4063d020, + 0x101a0: 0x4027dc20, 0x101a1: 0x4027e020, 0x101a2: 0x40094620, 0x101a3: 0x40021220, + 0x101a4: 0x40094a20, 0x101a5: 0x4027e220, 0x101a6: 0x40280820, + 0x101a8: 0x400d3220, 0x101a9: 0x40084420, 0x101aa: 0x40084820, 0x101ab: 0x40084620, + 0x101ac: 0x40084a20, 0x101ad: 0x400e6e20, 0x101ae: 0x400ec420, + 0x101b9: 0xa0000000, 0x101ba: 0xa0000000, 0x101bb: 0xa0000000, + 0x101bc: 0x4027ae20, 0x101bd: 0x4027b020, 0x101be: 0x00000285, 0x101bf: 0x2bfffe85, + // Block 0x407, offset 0x101c0 + 0x101c0: 0xe0003d0b, 0x101c1: 0xe0003cf3, 0x101c2: 0xe0003cf7, 0x101c3: 0xe0003cff, + 0x101c4: 0xe0003d0f, 0x101c5: 0xe0003d03, 0x101c6: 0xe0003d13, 0x101c7: 0xe0003cfb, + 0x101c8: 0xe0003d07, + 0x101d0: 0x02bf2e86, 0x101d1: 0x02a7de86, + // Block 0x408, offset 0x10200 + 0x10200: 0x429c7a20, 0x10201: 0x6c036a20, 0x10202: 0x429c8220, 0x10203: 0x48024420, + 0x10204: 0x429ec020, 0x10205: 0x6c12f820, 0x10206: 0x429f7620, 0x10207: 0x42a00420, + 0x10208: 0x42a0f420, 0x10209: 0x6c124e20, 0x1020a: 0x6c0cd820, 0x1020b: 0x6c0d3420, + 0x1020c: 0x44693c20, 0x1020d: 0x480c7420, 0x1020e: 0x6c14e020, 0x1020f: 0x6c182020, + 0x10210: 0x42a2c820, 0x10211: 0x6c050a20, 0x10212: 0x480a3820, 0x10213: 0x44697220, + 0x10214: 0x42a2ce20, 0x10215: 0x6c07a420, 0x10216: 0x480a9620, 0x10217: 0x6c0ada20, + 0x10218: 0x6c184020, 0x10219: 0x429d9820, 0x1021a: 0x6c0fea20, 0x1021b: 0x6c185420, + 0x1021c: 0x4923be20, 0x1021d: 0x6c186820, 0x1021e: 0x6c0b6220, 0x1021f: 0x4469be20, + 0x10220: 0x6c073a20, 0x10221: 0x42a48c20, 0x10222: 0x6c02bc20, 0x10223: 0x42a4ee20, + 0x10224: 0x446a2a20, 0x10225: 0x6c155820, 0x10226: 0x6c138a20, 0x10227: 0x6c04c820, + 0x10228: 0x6c094620, 0x10229: 0x6c13ba20, 0x1022a: 0x6c18c620, 0x1022b: 0x6c142c20, + 0x1022c: 0x6c18e820, 0x1022d: 0x6c121820, 0x1022e: 0x6c118020, 0x1022f: 0x6c0d4820, + 0x10230: 0x42a6fa20, 0x10231: 0x6c047c20, 0x10232: 0x6c047c20, 0x10233: 0x6c047c20, + 0x10234: 0x48145820, 0x10235: 0x6c023e20, 0x10236: 0x6c042020, 0x10237: 0x6c191020, + 0x10238: 0x4816c620, 0x10239: 0x6c047e20, 0x1023a: 0x6c090020, 0x1023b: 0x42a80c20, + 0x1023c: 0x42a93c20, 0x1023d: 0x6c042220, 0x1023e: 0x6c0f4020, 0x1023f: 0x6c098c20, + // Block 0x409, offset 0x10240 + 0x10240: 0x6c195220, 0x10241: 0x42a9ec20, 0x10242: 0x6c0ff020, 0x10243: 0x6c055c20, + 0x10244: 0x6c198220, 0x10245: 0x6c0c9e20, 0x10246: 0x6c0c9e20, 0x10247: 0x6c199620, + 0x10248: 0x6c040020, 0x10249: 0x42ab6620, 0x1024a: 0x42ab8420, 0x1024b: 0x6c1a2620, + 0x1024c: 0x6c0e1820, 0x1024d: 0x42ae2e20, 0x1024e: 0x42aca220, 0x1024f: 0x6c133420, + 0x10250: 0x6c0c3420, 0x10251: 0x6c0ce420, 0x10252: 0x6c0ade20, 0x10253: 0x6c0b0220, + 0x10254: 0x42b01a20, 0x10255: 0x6c056220, 0x10256: 0x42b06420, 0x10257: 0x6c13be20, + 0x10258: 0x42b15820, 0x10259: 0x4829c820, 0x1025a: 0x6c116c20, 0x1025b: 0x6c0f2620, + 0x1025c: 0x42b20c20, 0x1025d: 0x6c0d7620, 0x1025e: 0x6c14b820, 0x1025f: 0x6c1ace20, + 0x10260: 0x482d5020, 0x10261: 0x482dd420, 0x10262: 0x42b3d820, 0x10263: 0x42b43620, + 0x10264: 0x42b44e20, 0x10265: 0x42b3b020, 0x10266: 0x6c12cc20, 0x10267: 0x446ddc20, + 0x10268: 0x446df820, 0x10269: 0x42b61020, 0x1026a: 0x6c1b3420, 0x1026b: 0x6c1b3420, + 0x1026c: 0x48339020, 0x1026d: 0x6c1b5c20, 0x1026e: 0x42b7b020, 0x1026f: 0x6c10fa20, + 0x10270: 0x6c1b7620, 0x10271: 0x48363020, 0x10272: 0x6c097e20, 0x10273: 0x6c0a6220, + 0x10274: 0x6c101820, 0x10275: 0x6c1b8420, 0x10276: 0x446f0220, 0x10277: 0x6c0fc220, + 0x10278: 0x6c1b9c20, 0x10279: 0x42b98020, 0x1027a: 0x42b91a20, 0x1027b: 0x483bc820, + 0x1027c: 0x42ba8620, 0x1027d: 0x483bcc20, 0x1027e: 0x42badc20, 0x1027f: 0x42bad620, + // Block 0x40a, offset 0x10280 + 0x10280: 0x42baf820, 0x10281: 0x6c0a1420, 0x10282: 0x42bbc420, 0x10283: 0x44705e20, + 0x10284: 0x6c0e0220, 0x10285: 0x42bc5020, 0x10286: 0x6c140620, 0x10287: 0x42bcd220, + 0x10288: 0x4470c420, 0x10289: 0x48430620, 0x1028a: 0x4470f820, 0x1028b: 0x42bd6020, + 0x1028c: 0x42bd6620, 0x1028d: 0x6c0a2820, 0x1028e: 0x6c16de20, 0x1028f: 0x49472420, + 0x10290: 0x6c1c6e20, 0x10291: 0x48466220, 0x10292: 0x48466220, 0x10293: 0x6c286820, + 0x10294: 0x42be4420, 0x10295: 0x42be4420, 0x10296: 0x44718e20, 0x10297: 0x48657020, + 0x10298: 0x48c3b420, 0x10299: 0x6c056620, 0x1029a: 0x6c0ebc20, 0x1029b: 0x4471c620, + 0x1029c: 0x42bf3420, 0x1029d: 0x6c10f020, 0x1029e: 0x6c088020, 0x1029f: 0x42bff220, + 0x102a0: 0x6c1d0220, 0x102a1: 0x44727420, 0x102a2: 0x44723820, 0x102a3: 0x6c022a20, + 0x102a4: 0x484da820, 0x102a5: 0x6c109620, 0x102a6: 0x6c08cc20, 0x102a7: 0x6c06c020, + 0x102a8: 0x6c0b2e20, 0x102a9: 0x6c06c020, 0x102aa: 0x42c2f420, 0x102ab: 0x6c0d3820, + 0x102ac: 0x6c05da20, 0x102ad: 0x6c133820, 0x102ae: 0x42c35e20, 0x102af: 0x42c3bc20, + 0x102b0: 0x6c0ec020, 0x102b1: 0x6c1dac20, 0x102b2: 0x6c0bdc20, 0x102b3: 0x6c1dc620, + 0x102b4: 0x42c4ba20, 0x102b5: 0x6c13cc20, 0x102b6: 0x6c1df220, 0x102b7: 0x6c1e2620, + 0x102b8: 0x48561820, 0x102b9: 0x6c120820, 0x102ba: 0x42c5f820, 0x102bb: 0x6c092c20, + 0x102bc: 0x6c0cf620, 0x102bd: 0x42c7c820, 0x102be: 0x4857e220, 0x102bf: 0x42c84420, + // Block 0x40b, offset 0x102c0 + 0x102c0: 0x42c78a20, 0x102c1: 0x6c014820, 0x102c2: 0x44745c20, 0x102c3: 0x6c145420, + 0x102c4: 0x42c8fc20, 0x102c5: 0x42c93a20, 0x102c6: 0x42c8ee20, 0x102c7: 0x4474d820, + 0x102c8: 0x6c12c020, 0x102c9: 0x6c057620, 0x102ca: 0x48601420, 0x102cb: 0x42cbc620, + 0x102cc: 0x6c0a2e20, 0x102cd: 0x6c1f1420, 0x102ce: 0x44763220, 0x102cf: 0x6c0a2220, + 0x102d0: 0x44761020, 0x102d1: 0x4475c820, 0x102d2: 0x6c141620, 0x102d3: 0x6c183c20, + 0x102d4: 0x6c07a620, 0x102d5: 0x42cd3820, 0x102d6: 0x6c27ec20, 0x102d7: 0x4487b220, + 0x102d8: 0x6c16e220, 0x102d9: 0x6c141020, 0x102da: 0x42ce4220, 0x102db: 0x6c1f7020, + 0x102dc: 0x6c094a20, 0x102dd: 0x48678620, 0x102de: 0x44769220, 0x102df: 0x42cff420, + 0x102e0: 0x6c1f8c20, 0x102e1: 0x42d0a420, 0x102e2: 0x6c116220, 0x102e3: 0x4868da20, + 0x102e4: 0x42d11c20, 0x102e5: 0x42d03e20, 0x102e6: 0x42d22820, 0x102e7: 0x44773a20, + 0x102e8: 0x42d28420, 0x102e9: 0x42d34620, 0x102ea: 0x42d3d420, 0x102eb: 0x42d55020, + 0x102ec: 0x486d4620, 0x102ed: 0x6c051e20, 0x102ee: 0x44783020, 0x102ef: 0x6c08d220, + 0x102f0: 0x48714e20, 0x102f1: 0x6c20f820, 0x102f2: 0x44789c20, 0x102f3: 0x42d6e420, + 0x102f4: 0x42d73e20, 0x102f5: 0x6c082020, 0x102f6: 0x6c028c20, 0x102f7: 0x48751a20, + 0x102f8: 0x483a1620, 0x102f9: 0x4875f420, 0x102fa: 0x6c11ec20, 0x102fb: 0x48797820, + 0x102fc: 0x6c014c20, 0x102fd: 0x42d99a20, 0x102fe: 0x42d8ce20, 0x102ff: 0x42da2c20, + // Block 0x40c, offset 0x10300 + 0x10300: 0x6c113620, 0x10301: 0x6c023c20, 0x10302: 0x6c162420, 0x10303: 0x6c06dc20, + 0x10304: 0x6c0b3a20, 0x10305: 0x6c21a620, 0x10306: 0x487a3c20, 0x10307: 0x42da6820, + 0x10308: 0x6c06de20, 0x10309: 0x6c21d220, 0x1030a: 0x447a6620, 0x1030b: 0x6c08d420, + 0x1030c: 0x42dd8e20, 0x1030d: 0x487da220, 0x1030e: 0x6c21a820, 0x1030f: 0x6c0ec820, + 0x10310: 0x487ebc20, 0x10311: 0x487f1c20, 0x10312: 0x6c226020, 0x10313: 0x42e07220, + 0x10314: 0x6c109020, 0x10315: 0x6c228220, 0x10316: 0x447b2c20, 0x10317: 0x42e09420, + 0x10318: 0x6c07bc20, 0x10319: 0x42e0ee20, 0x1031a: 0x6c0e2820, 0x1031b: 0x480a4a20, + 0x1031c: 0x42e28a20, 0x1031d: 0x4884c620, 0x1031e: 0x42e33820, 0x1031f: 0x48875620, + 0x10320: 0x6c22f620, 0x10321: 0x6c094e20, 0x10322: 0x42e4a020, 0x10323: 0x488c1020, + 0x10324: 0x6c07c020, 0x10325: 0x42e52a20, 0x10326: 0x488e6a20, 0x10327: 0x48902820, + 0x10328: 0x6c236220, 0x10329: 0x6c018420, 0x1032a: 0x447d5820, 0x1032b: 0x42e74a20, + 0x1032c: 0x447d7020, 0x1032d: 0x447d7020, 0x1032e: 0x42e88e20, 0x1032f: 0x6c238c20, + 0x10330: 0x42e8e220, 0x10331: 0x42e90a20, 0x10332: 0x6c23a020, 0x10333: 0x447e3620, + 0x10334: 0x42ea4820, 0x10335: 0x48986c20, 0x10336: 0x42ea7c20, 0x10337: 0x48992420, + 0x10338: 0x6c007620, 0x10339: 0x48433e20, 0x1033a: 0x42ec2020, 0x1033b: 0x489f4220, + 0x1033c: 0x489f7020, 0x1033d: 0x48a08820, 0x1033e: 0x447ff820, 0x1033f: 0x44801020, + // Block 0x40d, offset 0x10340 + 0x10340: 0x6c0eec20, 0x10341: 0x48a1e620, 0x10342: 0x48a1e420, 0x10343: 0x48a23220, + 0x10344: 0x48a26620, 0x10345: 0x6c24a820, 0x10346: 0x6c0b4220, 0x10347: 0x6c0b4220, + 0x10348: 0x42ee9420, 0x10349: 0x44807220, 0x1034a: 0x6c24c820, 0x1034b: 0x44808c20, + 0x1034c: 0x44812c20, 0x1034d: 0x48a83a20, 0x1034e: 0x42f09c20, 0x1034f: 0x6c250420, + 0x10350: 0x42f19820, 0x10351: 0x4481c620, 0x10352: 0x48ac4c20, 0x10353: 0x6c0cc420, + 0x10354: 0x48ad3420, 0x10355: 0x48ad8a20, 0x10356: 0x6c131a20, 0x10357: 0x42f3d620, + 0x10358: 0x44825e20, 0x10359: 0x6c074020, 0x1035a: 0x42f49420, 0x1035b: 0x6c01ac20, + 0x1035c: 0x48b2f820, 0x1035d: 0x48b54e20, 0x1035e: 0x48b54e20, 0x1035f: 0x42f5dc20, + 0x10360: 0x44840420, 0x10361: 0x48b75620, 0x10362: 0x6c261820, 0x10363: 0x6c0e6a20, + 0x10364: 0x44844e20, 0x10365: 0x48b90020, 0x10366: 0x6c268420, 0x10367: 0x44854020, + 0x10368: 0x42f9d020, 0x10369: 0x42f9c620, 0x1036a: 0x6c03c020, 0x1036b: 0x48bf0c20, + 0x1036c: 0x6c26bc20, 0x1036d: 0x44860220, 0x1036e: 0x6c26d220, 0x1036f: 0x42fc0420, + 0x10370: 0x42fc8a20, 0x10371: 0x44866820, 0x10372: 0x48c45020, 0x10373: 0x48c48e20, + 0x10374: 0x4486b220, 0x10375: 0x48c5b220, 0x10376: 0x42fef420, 0x10377: 0x48c67c20, + 0x10378: 0x42ff2a20, 0x10379: 0x42fff420, 0x1037a: 0x6c093820, 0x1037b: 0x48c9b420, + 0x1037c: 0x48ca4620, 0x1037d: 0x4300c020, 0x1037e: 0x48cb5020, 0x1037f: 0x6c27d620, + // Block 0x40e, offset 0x10380 + 0x10380: 0x4866be20, 0x10381: 0x4487aa20, 0x10382: 0x6c009220, 0x10383: 0x43020620, + 0x10384: 0x44881620, 0x10385: 0x6c281420, 0x10386: 0x42b56a20, 0x10387: 0x48cf4e20, + 0x10388: 0x48cf6a20, 0x10389: 0x48672620, 0x1038a: 0x48673820, 0x1038b: 0x6c286820, + 0x1038c: 0x43040820, 0x1038d: 0x6c08ea20, 0x1038e: 0x4488d620, 0x1038f: 0x43052220, + 0x10390: 0x6c00a420, 0x10391: 0x6c091e20, 0x10392: 0x42a56620, 0x10393: 0x6c01e420, + 0x10394: 0x6c13e220, 0x10395: 0x6c020c20, 0x10396: 0x6c050020, 0x10397: 0x48d67820, + 0x10398: 0x6c095620, 0x10399: 0x43063a20, 0x1039a: 0x4306c620, 0x1039b: 0x43075a20, + 0x1039c: 0x6c28f220, 0x1039d: 0x6c292820, 0x1039e: 0x4307ce20, 0x1039f: 0x6c0ea420, + 0x103a0: 0x4306a620, 0x103a1: 0x6c03f820, 0x103a2: 0x6c04e220, 0x103a3: 0x6c07cc20, + 0x103a4: 0x48d86c20, 0x103a5: 0x48dad620, 0x103a6: 0x48d9aa20, 0x103a7: 0x448a5620, + 0x103a8: 0x4309e220, 0x103a9: 0x4309e620, 0x103aa: 0x430a2c20, 0x103ab: 0x48e79420, + 0x103ac: 0x430ac820, 0x103ad: 0x48de5820, 0x103ae: 0x448aba20, 0x103af: 0x448ac220, + 0x103b0: 0x48df6220, 0x103b1: 0x48e1a420, 0x103b2: 0x448ad620, 0x103b3: 0x6c041420, + 0x103b4: 0x6c163c20, 0x103b5: 0x6c29de20, 0x103b6: 0x430cd220, 0x103b7: 0x6c29e620, + 0x103b8: 0x430d1020, 0x103b9: 0x430e1c20, 0x103ba: 0x430dc420, 0x103bb: 0x430ef220, + 0x103bc: 0x430e5020, 0x103bd: 0x430ed620, 0x103be: 0x430f0c20, 0x103bf: 0x448bae20, + // Block 0x40f, offset 0x103c0 + 0x103c0: 0x430fc220, 0x103c1: 0x43100220, 0x103c2: 0x448bf220, 0x103c3: 0x4310c020, + 0x103c4: 0x6c008220, 0x103c5: 0x48ecce20, 0x103c6: 0x4311ae20, 0x103c7: 0x4311bc20, + 0x103c8: 0x448c6a20, 0x103c9: 0x4311f420, 0x103ca: 0x44697620, 0x103cb: 0x48f15c20, + 0x103cc: 0x48f2cc20, 0x103cd: 0x448d7c20, 0x103ce: 0x448d8e20, 0x103cf: 0x6c0bfe20, + 0x103d0: 0x6c154e20, 0x103d1: 0x6c1ede20, 0x103d2: 0x6c2be420, 0x103d3: 0x48f95020, + 0x103d4: 0x6c035620, 0x103d5: 0x6c2c1220, 0x103d6: 0x431a3620, 0x103d7: 0x6c03ca20, + 0x103d8: 0x48fe5e20, 0x103d9: 0x48100820, 0x103da: 0x6c2c5420, 0x103db: 0x431b7820, + 0x103dc: 0x431be020, 0x103dd: 0x4811bc20, 0x103de: 0x431da820, 0x103df: 0x6c155020, + 0x103e0: 0x490ba420, 0x103e1: 0x490bda20, 0x103e2: 0x43212820, 0x103e3: 0x4321e220, + 0x103e4: 0x43222220, 0x103e5: 0x490e5c20, 0x103e6: 0x43223620, 0x103e7: 0x43247020, + 0x103e8: 0x4325ae20, 0x103e9: 0x4325b020, 0x103ea: 0x4324f820, 0x103eb: 0x4327f220, + 0x103ec: 0x43282a20, 0x103ed: 0x4917f420, 0x103ee: 0x6c024a20, 0x103ef: 0x44932a20, + 0x103f0: 0x432b6e20, 0x103f1: 0x491aee20, 0x103f2: 0x4493cc20, 0x103f3: 0x432d8620, + 0x103f4: 0x42bb6420, 0x103f5: 0x432e4620, 0x103f6: 0x49228a20, 0x103f7: 0x49243420, + 0x103f8: 0x4494dc20, 0x103f9: 0x4494ec20, 0x103fa: 0x432fc020, 0x103fb: 0x49281420, + 0x103fc: 0x44956420, 0x103fd: 0x49292c20, 0x103fe: 0x43301620, 0x103ff: 0x43301620, + // Block 0x410, offset 0x10400 + 0x10400: 0x43305220, 0x10401: 0x492b6c20, 0x10402: 0x6c03d020, 0x10403: 0x44966620, + 0x10404: 0x43325220, 0x10405: 0x43334e20, 0x10406: 0x43338420, 0x10407: 0x4333fc20, + 0x10408: 0x44979c20, 0x10409: 0x49366020, 0x1040a: 0x43362420, 0x1040b: 0x43388020, + 0x1040c: 0x4339fa20, 0x1040d: 0x44999c20, 0x1040e: 0x4499da20, 0x1040f: 0x433ace20, + 0x10410: 0x49419c20, 0x10411: 0x4499f020, 0x10412: 0x49420a20, 0x10413: 0x49441c20, + 0x10414: 0x49452220, 0x10415: 0x6c145a20, 0x10416: 0x449aac20, 0x10417: 0x6c316420, + 0x10418: 0x433dfc20, 0x10419: 0x433e0a20, 0x1041a: 0x433e1e20, 0x1041b: 0x433e2c20, + 0x1041c: 0x6c125e20, 0x1041d: 0x494c0020, + // Block 0x411, offset 0x10440 + 0x10440: 0xe00014bd, 0x10441: 0x0033b483, 0x10442: 0x00339688, 0x10443: 0x0033a288, + 0x10444: 0x0033c288, 0x10445: 0x0033fc88, 0x10446: 0xca490071, 0x10447: 0x00343688, + 0x10448: 0x00344688, 0x10449: 0x00349a88, 0x1044a: 0x0034e488, 0x1044b: 0x00356288, + 0x1044c: 0x00356a88, 0x1044d: 0xe00014cf, 0x1044e: 0x00357a88, 0x1044f: 0x00365488, + 0x10450: 0xc0090041, 0x10451: 0x00335288, 0x10452: 0x00335a88, 0x10453: 0xc0130092, + 0x10454: 0x00338a88, 0x10455: 0xc34c0041, 0x10456: 0xc01c0071, 0x10457: 0xc0200071, + 0x10458: 0xc0250041, 0x10459: 0x00343e88, 0x1045a: 0xc0370092, 0x1045b: 0x00348488, + 0x1045c: 0x0034a888, 0x1045d: 0x0034ba88, 0x1045e: 0xc02e0071, 0x1045f: 0x00350e88, + 0x10460: 0x00352888, 0x10461: 0x00353a88, 0x10462: 0x00354c88, 0x10463: 0xc03e00f1, + 0x10464: 0x0035ac88, 0x10465: 0x0035b488, 0x10466: 0x00360288, 0x10467: 0xc0440071, + 0x10468: 0x00365c88, 0x10469: 0x00366688, 0x1046a: 0x00367488, 0x1046b: 0xc0480071, + 0x1046c: 0x00368e88, 0x1046d: 0xc04c0071, 0x1046e: 0x0036b888, 0x1046f: 0x0036c488, + 0x10470: 0xc0060041, 0x10471: 0x40335220, 0x10472: 0x40335a20, 0x10473: 0xc0100092, + 0x10474: 0x40338a20, 0x10475: 0xc3490041, 0x10476: 0xc01a0071, 0x10477: 0xc01e0071, + 0x10478: 0xc0220041, 0x10479: 0x40343e20, 0x1047a: 0xc0340092, 0x1047b: 0x40348420, + 0x1047c: 0x4034a820, 0x1047d: 0x4034ba20, 0x1047e: 0xc02c0071, 0x1047f: 0x40350e20, + // Block 0x412, offset 0x10480 + 0x10480: 0x40352820, 0x10481: 0x40353a20, 0x10482: 0x40354c20, 0x10483: 0xc03a00f1, + 0x10484: 0x4035ac20, 0x10485: 0x4035b420, 0x10486: 0x40360220, 0x10487: 0xc0420071, + 0x10488: 0x40365c20, 0x10489: 0x40366620, 0x1048a: 0x40367420, 0x1048b: 0xc0460071, + 0x1048c: 0x40368e20, 0x1048d: 0xc04a0071, 0x1048e: 0x4036b820, 0x1048f: 0x4036c420, + 0x10490: 0xe00014ba, 0x10491: 0x4033b420, 0x10492: 0x40339620, 0x10493: 0x4033a220, + 0x10494: 0x4033c220, 0x10495: 0x4033fc20, 0x10496: 0xca470071, 0x10497: 0x40343620, + 0x10498: 0x40344620, 0x10499: 0x40349a20, 0x1049a: 0x4034e420, 0x1049b: 0x40356220, + 0x1049c: 0x40356a20, 0x1049d: 0xe00014cc, 0x1049e: 0x40357a20, 0x1049f: 0x40365420, + 0x104a0: 0x0035e088, 0x104a1: 0x4035e020, 0x104a2: 0x00369e88, 0x104a3: 0x40369e20, + 0x104a4: 0x0036ce88, 0x104a5: 0x4036ce20, 0x104a6: 0x0036d688, 0x104a7: 0x4036d620, + 0x104a8: 0x0036ea88, 0x104a9: 0x4036ea20, 0x104aa: 0x0036e088, 0x104ab: 0x4036e020, + 0x104ac: 0x0036f488, 0x104ad: 0x4036f420, 0x104ae: 0x0036fc88, 0x104af: 0x4036fc20, + 0x104b0: 0x00370488, 0x104b1: 0x40370420, 0x104b2: 0x00370c88, 0x104b3: 0x40370c20, + 0x104b4: 0xc0500131, 0x104b5: 0xc04e0131, 0x104b6: 0x00371c88, 0x104b7: 0x40371c20, + 0x104b8: 0x0035a488, 0x104b9: 0x4035a420, 0x104ba: 0x0035fa88, 0x104bb: 0x4035fa20, + 0x104bc: 0x0035f288, 0x104bd: 0x4035f220, 0x104be: 0x0035e888, 0x104bf: 0x4035e820, + // Block 0x413, offset 0x104c0 + 0x104c0: 0x00352088, 0x104c1: 0x40352020, 0x104c2: 0x40070620, 0x104c3: 0xae608302, + 0x104c4: 0xae605f02, 0x104c5: 0xae602a02, 0x104c6: 0xae602202, 0x104c7: 0xae605f02, + 0x104c8: 0xa0000000, 0x104c9: 0xa0000000, 0x104ca: 0x00341c88, 0x104cb: 0x40341c20, + 0x104cc: 0x00369688, 0x104cd: 0x40369620, 0x104ce: 0x00353088, 0x104cf: 0x40353020, + 0x104d0: 0xe00014b7, 0x104d1: 0xe00014b4, 0x104d2: 0x00336a88, 0x104d3: 0x40336a20, + 0x104d4: 0x00337a88, 0x104d5: 0x40337a20, 0x104d6: 0x0033dc88, 0x104d7: 0x4033dc20, + 0x104d8: 0x0033aa88, 0x104d9: 0x4033aa20, 0x104da: 0x00345888, 0x104db: 0x40345820, + 0x104dc: 0x00347888, 0x104dd: 0x40347820, 0x104de: 0x00347088, 0x104df: 0x40347020, + 0x104e0: 0x00346888, 0x104e1: 0x40346820, 0x104e2: 0x0034ca88, 0x104e3: 0x4034ca20, + 0x104e4: 0x0034dc88, 0x104e5: 0x4034dc20, 0x104e6: 0x00351888, 0x104e7: 0x40351820, + 0x104e8: 0x00372688, 0x104e9: 0x40372620, 0x104ea: 0x00354488, 0x104eb: 0x40354420, + 0x104ec: 0x00355888, 0x104ed: 0x40355820, 0x104ee: 0x00359c83, 0x104ef: 0x40359c20, + 0x104f0: 0x00359a88, 0x104f1: 0x40359a20, 0x104f2: 0x0035cc88, 0x104f3: 0x4035cc20, + 0x104f4: 0x00360e88, 0x104f5: 0x40360e20, 0x104f6: 0x00362a88, 0x104f7: 0x40362a20, + 0x104f8: 0x00363a88, 0x104f9: 0x40363a20, 0x104fa: 0x0035d488, 0x104fb: 0x4035d420, + 0x104fc: 0x00364488, 0x104fd: 0x40364420, 0x104fe: 0x00364c88, 0x104ff: 0x40364c20, + // Block 0x414, offset 0x10500 + 0x10500: 0xa0000000, 0x10501: 0xa0000000, 0x10502: 0xa0000000, 0x10503: 0xa0000000, + 0x10504: 0xa0000000, 0x10505: 0xa0000000, 0x10506: 0xa0000000, 0x10507: 0xa0000000, + 0x10508: 0xa0000000, 0x10509: 0x40020020, 0x1050a: 0x40020220, 0x1050b: 0x40020420, + 0x1050c: 0x40020620, 0x1050d: 0x40020820, 0x1050e: 0xa0000000, 0x1050f: 0xa0000000, + 0x10510: 0xa0000000, 0x10511: 0xa0000000, 0x10512: 0xa0000000, 0x10513: 0xa0000000, + 0x10514: 0xa0000000, 0x10515: 0xa0000000, 0x10516: 0xa0000000, 0x10517: 0xa0000000, + 0x10518: 0xa0000000, 0x10519: 0xa0000000, 0x1051a: 0xa0000000, 0x1051b: 0xa0000000, + 0x1051c: 0xa0000000, 0x1051d: 0xa0000000, 0x1051e: 0xa0000000, 0x1051f: 0xa0000000, + 0x10520: 0x40021220, 0x10521: 0x4002ba20, 0x10522: 0x4003e020, 0x10523: 0x4004ea20, + 0x10524: 0x4027de20, 0x10525: 0x4004ec20, 0x10526: 0x4004e620, 0x10527: 0x4003d220, + 0x10528: 0x4003f420, 0x10529: 0x4003f620, 0x1052a: 0x4004d820, 0x1052b: 0x40093820, + 0x1052c: 0x40024020, 0x1052d: 0x40021a20, 0x1052e: 0x4002e420, 0x1052f: 0x4004e220, + 0x10530: 0x4029cc20, 0x10531: 0x4029ce20, 0x10532: 0x4029d020, 0x10533: 0x4029d220, + 0x10534: 0x4029d420, 0x10535: 0x4029d620, 0x10536: 0x4029d820, 0x10537: 0x4029da20, + 0x10538: 0x4029dc20, 0x10539: 0x4029de20, 0x1053a: 0x40026c20, 0x1053b: 0x40026220, + 0x1053c: 0x40094020, 0x1053d: 0x40094220, 0x1053e: 0x40094420, 0x1053f: 0x4002c420, + // Block 0x415, offset 0x10540 + 0x10540: 0x4004d620, 0x10541: 0xca5027b1, 0x10542: 0x002c0a88, 0x10543: 0x002c3a88, + 0x10544: 0x002c6288, 0x10545: 0xc39e0be1, 0x10546: 0x002d0888, 0x10547: 0x002d2288, + 0x10548: 0x002d6888, 0x10549: 0x002d9a88, 0x1054a: 0x002dcc88, 0x1054b: 0xca4b3b11, + 0x1054c: 0xc0030002, 0x1054d: 0x002e8288, 0x1054e: 0x002e9e88, 0x1054f: 0xc3a30b21, + 0x10550: 0x002f2c88, 0x10551: 0x002f5688, 0x10552: 0x002f7a88, 0x10553: 0x002fe688, + 0x10554: 0x00302c88, 0x10555: 0xc3900b21, 0x10556: 0x0030be88, 0x10557: 0x0030e288, + 0x10558: 0x0030f688, 0x10559: 0x00310088, 0x1055a: 0x00312a88, 0x1055b: 0x4003f820, + 0x1055c: 0x4004e420, 0x1055d: 0x4003fa20, 0x1055e: 0x40062420, 0x1055f: 0x40021620, + 0x10560: 0x40061e20, 0x10561: 0xca4d27b1, 0x10562: 0x402c0a20, 0x10563: 0x402c3a20, + 0x10564: 0x402c6220, 0x10565: 0xc39c0be1, 0x10566: 0x402d0820, 0x10567: 0x402d2220, + 0x10568: 0x402d6820, 0x10569: 0x402d9a20, 0x1056a: 0x402dcc20, 0x1056b: 0x402dfe20, + 0x1056c: 0xc0000002, 0x1056d: 0x402e8220, 0x1056e: 0x402e9e20, 0x1056f: 0xc3a00b21, + 0x10570: 0x402f2c20, 0x10571: 0x402f5620, 0x10572: 0x402f7a20, 0x10573: 0x402fe620, + 0x10574: 0x40302c20, 0x10575: 0xc38d0b21, 0x10576: 0x4030be20, 0x10577: 0x4030e220, + 0x10578: 0x4030f620, 0x10579: 0x40310020, 0x1057a: 0x40312a20, 0x1057b: 0x4003fc20, + 0x1057c: 0x40094820, 0x1057d: 0x4003fe20, 0x1057e: 0x40094c20, 0x1057f: 0xa0000000, + // Block 0x416, offset 0x10580 + 0x10580: 0xe0000983, 0x10581: 0xe0000980, 0x10582: 0xe00008fb, 0x10583: 0xe00008f8, + 0x10584: 0xe000097d, 0x10585: 0xe000097a, 0x10586: 0xe0000a38, 0x10587: 0xe0000a35, + 0x10588: 0xe0000a3e, 0x10589: 0xe0000a3b, 0x1058a: 0xe0000a4a, 0x1058b: 0xe0000a47, + 0x1058c: 0xe0000a44, 0x1058d: 0xe0000a41, 0x1058e: 0xe0000a86, 0x1058f: 0xe0000a83, + 0x10590: 0x002c62a3, 0x10591: 0x402c6221, 0x10592: 0xe0000b46, 0x10593: 0xe0000b43, + 0x10594: 0xe0000aee, 0x10595: 0xe0000aeb, 0x10596: 0xe0000b2c, 0x10597: 0xe0000b29, + 0x10598: 0x00320cc3, 0x10599: 0x40320c22, 0x1059a: 0xe0000b1a, 0x1059b: 0xe0000b17, + 0x1059c: 0xe0000bb8, 0x1059d: 0xe0000bb5, 0x1059e: 0xe0000bb2, 0x1059f: 0xe0000baf, + 0x105a0: 0xe0000bc4, 0x105a1: 0xe0000bc1, 0x105a2: 0xe0000bca, 0x105a3: 0xe0000bc7, + 0x105a4: 0xe0000bee, 0x105a5: 0xe0000beb, 0x105a6: 0xe0000c1b, 0x105a7: 0xe0000c18, + 0x105a8: 0xe0000c51, 0x105a9: 0xe0000c4e, 0x105aa: 0xe0000c60, 0x105ab: 0xe0000c5d, + 0x105ac: 0xe0000c31, 0x105ad: 0xe0000c2e, 0x105ae: 0xe0000c5a, 0x105af: 0xe0000c57, + 0x105b0: 0xe0000c54, 0x105b1: 0x402da220, 0x105b2: 0xf0000a0a, 0x105b3: 0xf0000404, + 0x105b4: 0xe0000c8a, 0x105b5: 0xe0000c87, 0x105b6: 0xe0000c9f, 0x105b7: 0xe0000c9c, + 0x105b8: 0x402f5621, 0x105b9: 0xe0000ccc, 0x105ba: 0xe0000cc9, 0x105bb: 0xe0000cd8, + 0x105bc: 0xe0000cd5, 0x105bd: 0xe0000cd2, 0x105be: 0xe0000ccf, 0x105bf: 0xe0000d04, + // Block 0x417, offset 0x105c0 + 0x105c0: 0xca533b21, 0x105c1: 0xca553b21, 0x105c2: 0xca573b21, 0x105c3: 0xca593b21, + 0x105c4: 0xca5b3b21, 0x105c5: 0xca5d3b21, 0x105c6: 0xca5f3b21, 0x105c7: 0xca613b21, + 0x105c8: 0xca633b21, 0x105c9: 0xca653b21, 0x105ca: 0xca673b21, 0x105cb: 0xca693b21, + 0x105cc: 0xca6b3b21, 0x105cd: 0xca6d3b21, 0x105ce: 0xca6f3b21, 0x105cf: 0xca713b21, + 0x105d0: 0xca733b21, 0x105d1: 0xca753b21, 0x105d2: 0xca773b21, 0x105d3: 0xca793b21, + 0x105d4: 0xca7b3b21, 0x105d5: 0xca7d3b21, 0x105d6: 0xca7f3b21, 0x105d7: 0xca813b21, + 0x105d8: 0xca833b21, 0x105d9: 0xca853b21, 0x105da: 0xca873b21, 0x105db: 0xca8b3b21, + 0x105dc: 0xca913b21, 0x105dd: 0xca953b21, 0x105de: 0xca973b21, 0x105df: 0xca993b21, + 0x105e0: 0xca9b3b21, 0x105e1: 0xca9d3b21, 0x105e2: 0xca9f3b21, 0x105e3: 0xca9f3b21, + 0x105e4: 0xe000413a, 0x105e5: 0xe000413d, 0x105e6: 0xe0004140, 0x105e7: 0xe0004143, + 0x105e8: 0xe0004146, 0x105e9: 0xe000414a, 0x105ea: 0xe000414d, 0x105eb: 0xca893b21, + 0x105ec: 0xca8d3b21, 0x105ed: 0xca8f3b21, 0x105ee: 0xca933b21, 0x105ef: 0xe0004151, + 0x105f0: 0xe0004154, 0x105f1: 0xe0004157, 0x105f2: 0xe000415a, 0x105f3: 0xe000415d, + 0x105f4: 0xa0000000, 0x105f5: 0xa0000000, 0x105f6: 0xcaa43b81, 0x105f7: 0xcaa63bb1, + 0x105f8: 0x40501220, 0x105f9: 0x40501420, 0x105fa: 0x40501620, 0x105fb: 0xcaa13b51, + 0x105fc: 0x40501a20, 0x105fd: 0x40501c20, 0x105fe: 0x40501e20, 0x105ff: 0x40502020, + // Block 0x418, offset 0x10600 + 0x10600: 0x40502220, 0x10601: 0xcaa83bb1, 0x10602: 0x40502620, 0x10603: 0x40502820, + 0x10604: 0xcaaa3bb1, 0x10605: 0x40502c20, 0x10606: 0x40503020, 0x10607: 0x40503420, + 0x10608: 0xadc11802, 0x10609: 0xadc11b02, 0x1060a: 0xadc11c02, 0x1060b: 0xadc11a02, + 0x1060c: 0xa0005f02, 0x1060d: 0xadc11d02, 0x1060e: 0xadc11402, 0x1060f: 0xadc11502, + 0x10610: 0xadc11702, 0x10611: 0xadc11602, 0x10612: 0x82092817, 0x10613: 0xa0000000, + 0x10614: 0x40032620, 0x10615: 0x40032820, 0x10616: 0x4002ac20, 0x10617: 0x4027bc20, + 0x10618: 0xe000409a, 0x10619: 0x4005be20, 0x1061a: 0x4005c020, 0x1061b: 0x4027f620, + 0x1061c: 0x404fea20, 0x1061d: 0xadc11902, + 0x10620: 0xe00001b5, 0x10621: 0xe0000249, 0x10622: 0xe0000361, 0x10623: 0xe000043b, + 0x10624: 0xe0000510, 0x10625: 0xe00005da, 0x10626: 0xe00006a5, 0x10627: 0xe000074d, + 0x10628: 0xe00007f9, 0x10629: 0xe000089e, + 0x10630: 0xe00001b8, 0x10631: 0xe000024c, 0x10632: 0xe0000364, 0x10633: 0xe000043e, + 0x10634: 0xe0000513, 0x10635: 0xe00005dd, 0x10636: 0xe00006a8, 0x10637: 0xe0000750, + 0x10638: 0xe00007fc, 0x10639: 0xe00008a1, + // Block 0x419, offset 0x10640 + 0x10642: 0x40439020, 0x10643: 0x40439220, + 0x10645: 0x40437020, 0x10646: 0x40437220, 0x10647: 0x40437420, + 0x10648: 0x40437620, 0x10649: 0x40437820, 0x1064a: 0x40437a20, 0x1064b: 0x40437c20, + 0x1064c: 0x40438020, 0x1064e: 0x40438420, 0x1064f: 0x40438620, + 0x10650: 0x40438820, 0x10652: 0x40438a20, 0x10653: 0x40438c20, + 0x10654: 0x40438e20, 0x10655: 0x40439020, 0x10656: 0x40439220, 0x10657: 0x40439420, + 0x10658: 0x40439620, 0x10659: 0x40439820, 0x1065a: 0x40439a20, 0x1065b: 0x40439c20, + 0x1065c: 0x40439e20, 0x1065d: 0x4043a020, 0x1065e: 0x4043a220, 0x1065f: 0x4043a420, + 0x10660: 0x4043a620, 0x10661: 0x4043a820, 0x10662: 0x4043aa20, 0x10663: 0x4043ac20, + 0x10664: 0x4043ae20, 0x10665: 0x4043b020, 0x10666: 0x4043b220, 0x10667: 0x4043b420, + 0x10668: 0x4043b620, 0x1066a: 0x4043b820, 0x1066b: 0x4043ba20, + 0x1066c: 0x4043bc20, 0x1066d: 0x4043be20, 0x1066e: 0x4043c020, 0x1066f: 0x4043c220, + 0x10670: 0x4043c420, 0x10671: 0x4043c620, 0x10672: 0x4043c820, 0x10673: 0x4043d420, + 0x10675: 0x4043ca20, 0x10676: 0x4043cc20, 0x10677: 0x4043ce20, + 0x10678: 0x4043d020, 0x10679: 0x4043d220, + 0x1067c: 0xa070f102, 0x1067d: 0x4043d820, 0x1067e: 0x4043de20, 0x1067f: 0xc06a0311, + // Block 0x41a, offset 0x10680 + 0x10680: 0x4043e220, 0x10681: 0x4043e420, 0x10682: 0x4043e620, 0x10683: 0x4043e820, + 0x10684: 0x4043ea20, 0x10686: 0xc06c0341, 0x10687: 0x4043f220, + 0x10688: 0x4043f420, 0x1068a: 0xc0710311, 0x1068b: 0x4043f820, + 0x1068c: 0x4043fa20, 0x1068d: 0x820921fe, + 0x10695: 0x4043fe20, 0x10696: 0x40440020, + 0x1069e: 0x4043d620, + 0x106a0: 0x40437e20, 0x106a1: 0x40438220, 0x106a2: 0x4043ec20, 0x106a3: 0x4043ee20, + 0x106a6: 0xe0000182, 0x106a7: 0xe0000213, + 0x106a8: 0xe000032e, 0x106a9: 0xe0000408, 0x106aa: 0xe00004dd, 0x106ab: 0xe00005a7, + 0x106ac: 0xe0000672, 0x106ad: 0xe000071a, 0x106ae: 0xe00007c6, 0x106af: 0xe000086b, + 0x106b1: 0x40439420, 0x106b2: 0x40439620, + // Block 0x41b, offset 0x106c0 + 0x106c0: 0xf0000404, 0x106c1: 0xf0000404, 0x106c2: 0xf0000404, 0x106c3: 0xf0000404, + 0x106c4: 0xf0000404, 0x106c5: 0xf0000404, 0x106c6: 0xf0000404, 0x106c7: 0xf0000404, + 0x106c8: 0xf0000404, 0x106c9: 0xf0000404, 0x106ca: 0xf0000404, 0x106cb: 0xf0000404, + 0x106cc: 0xf0000404, 0x106cd: 0xf0000404, 0x106ce: 0xe000004c, 0x106cf: 0xe0000051, + 0x106d0: 0xe0000056, 0x106d1: 0xe000005b, 0x106d2: 0xe0000060, 0x106d3: 0xe0000065, + 0x106d4: 0xe000006a, 0x106d5: 0xe000006f, 0x106d6: 0xe0000083, 0x106d7: 0xe000008d, + 0x106d8: 0xe0000092, 0x106d9: 0xe0000097, 0x106da: 0xe000009c, 0x106db: 0xe00000a1, + 0x106dc: 0xe0000088, 0x106dd: 0xe0000074, 0x106de: 0xe000007c, + 0x106e0: 0xe0002c96, 0x106e1: 0xe0002ca6, 0x106e2: 0xe0002c9e, 0x106e3: 0xe0002cd6, + 0x106e4: 0xe0002caa, 0x106e5: 0xe0002cbe, 0x106e6: 0xe0002c9a, 0x106e7: 0xe0002cba, + 0x106e8: 0xe0002ca2, 0x106e9: 0xe0002cc6, 0x106ea: 0xe0002ce6, 0x106eb: 0xe0002cfa, + 0x106ec: 0xe0002cf6, 0x106ed: 0xe0002cee, 0x106ee: 0xe0002d22, 0x106ef: 0xe0002cda, + 0x106f0: 0xe0002ce2, 0x106f1: 0xe0002cf2, 0x106f2: 0xe0002cea, 0x106f3: 0xe0002d06, + 0x106f4: 0xe0002cce, 0x106f5: 0xe0002cfe, 0x106f6: 0xe0002d1a, 0x106f7: 0xe0002d0a, + 0x106f8: 0xf0000404, 0x106f9: 0xe0002cae, 0x106fa: 0xe0002cd2, 0x106fb: 0xf0000404, + 0x106fc: 0xe0002d02, 0x106fd: 0xe0002cb2, 0x106fe: 0xe0002d1e, 0x106ff: 0xe0002cca, + // Block 0x41c, offset 0x10700 + 0x10700: 0xe0008556, 0x10701: 0xe0008b49, 0x10703: 0xe0009a4a, + 0x10707: 0xe0005e27, + 0x10708: 0xe000871e, 0x10709: 0xe0006c4c, 0x1070a: 0xe0006ca0, 0x1070b: 0xe0009fed, + 0x1070d: 0xe0006789, + 0x10711: 0xe00098b6, + 0x10714: 0xe0009245, 0x10715: 0xe0006948, 0x10716: 0xe0007018, + 0x10718: 0xe0004c4a, 0x10719: 0xe0006618, + 0x1071e: 0xe00073be, 0x1071f: 0xe0008f07, + 0x10726: 0xe000665c, + 0x1072b: 0xe00075de, + 0x1072d: 0xe0008fe1, + 0x10730: 0xe0006771, 0x10731: 0xe0004a99, 0x10732: 0xe00049e6, + 0x10738: 0xe000a5b0, 0x10739: 0xe000532a, 0x1073b: 0xe0008e8f, + // Block 0x41d, offset 0x10740 + 0x10742: 0xe0007be3, 0x10743: 0xe0005214, + 0x10745: 0xe0004c4d, + 0x1074b: 0xe0009055, + 0x1074d: 0xe0006ad3, 0x1074e: 0xe000a418, 0x1074f: 0xe0009fe1, + 0x10756: 0xe0004b72, + 0x10758: 0xe00073c2, 0x10759: 0xe00083a6, + 0x1075d: 0xe0004c50, 0x1075e: 0xe0004554, 0x1075f: 0xe0007800, + 0x10767: 0xe0005708, + 0x1076b: 0xe00042b4, + 0x1076c: 0xe0004564, 0x1076d: 0xe0005621, + 0x10773: 0xe000820f, + 0x10776: 0xe000672d, 0x10777: 0xe0006c38, + 0x1077c: 0xe0008fdd, 0x1077e: 0xe000450c, + // Block 0x41e, offset 0x10780 + 0x10782: 0xe00057ab, + 0x10786: 0xe0005b9b, + 0x10788: 0xe00079b1, 0x1078b: 0xe0006ad6, + 0x1078c: 0xe0008459, 0x1078e: 0xe0007fc6, 0x1078f: 0xe0008026, + 0x10790: 0xe00080da, 0x10791: 0xe000808a, 0x10792: 0xe000a41b, + 0x10794: 0xe0007c58, 0x10795: 0xe0008b4d, + 0x10798: 0xe0005033, 0x10799: 0xe0005043, 0x1079b: 0xe0006ad9, + 0x1079e: 0xe00075a8, 0x1079f: 0xe0004f43, + 0x107a1: 0xe0005ebb, 0x107a2: 0xe000a13f, + 0x107a4: 0xe0004bc6, 0x107a5: 0xe000a18f, 0x107a6: 0xe00079db, + 0x107a8: 0xe000a381, 0x107ab: 0xe000a20e, + 0x107ac: 0xe0004695, 0x107ad: 0xe0008b51, 0x107ae: 0xe0005891, + 0x107b3: 0xe000630c, + 0x107b4: 0xe0008029, 0x107b6: 0xe000532e, + 0x107b9: 0xe0006226, 0x107ba: 0xe00084e6, + // Block 0x41f, offset 0x107c0 + 0x107c0: 0xe0007595, 0x107c1: 0xe00084ea, + 0x107c4: 0xe000998c, 0x107c6: 0xe0006807, 0x107c7: 0xe0004c53, + 0x107ca: 0xe0004fb7, 0x107cb: 0xe0004440, + 0x107cd: 0xe00085be, + 0x107d4: 0xe00085d2, 0x107d5: 0xe0006adc, 0x107d6: 0xe0009aab, 0x107d7: 0xe0008722, + 0x107d8: 0xe000678c, 0x107d9: 0xe0006e50, + 0x107dd: 0xe0005631, 0x107de: 0xe000852a, 0x107df: 0xe00094fc, + 0x107e1: 0xe000a8d7, 0x107e3: 0xe00054be, + 0x107e4: 0xe0005a04, 0x107e5: 0xe000845c, + 0x107ee: 0xe00041b7, + 0x107f0: 0xe0007727, 0x107f2: 0xe0008fe5, 0x107f3: 0xe00069c6, + 0x107f5: 0xe0007caf, 0x107f6: 0xe0004510, 0x107f7: 0xe0004443, + 0x107fb: 0xe0008582, + 0x107ff: 0xe0006458, + // Block 0x420, offset 0x10800 + 0x10800: 0xe0008e49, 0x10801: 0xe000504b, + 0x10809: 0xe000a143, 0x1080a: 0xe000845f, 0x1080b: 0xe0004fff, + 0x1080d: 0xe0007c5b, 0x1080e: 0xe000504e, 0x1080f: 0xe00066c1, + 0x10810: 0xe0006530, 0x10811: 0xe000a851, + 0x1082f: 0xe00064d4, + 0x10830: 0xe0004877, + 0x10834: 0xe0006324, 0x10836: 0xe0005a08, + 0x10838: 0xe00074bd, 0x1083a: 0xe0006adf, + 0x1083c: 0xe0006ae2, 0x1083d: 0xe0004160, + // Block 0x421, offset 0x10840 + 0x10842: 0xe0008c25, 0x10843: 0xe0008965, + 0x10846: 0xe0005332, 0x10847: 0xe000885f, + 0x10848: 0xe0009e62, 0x10849: 0xe0004cec, 0x1084b: 0xe00070ab, + 0x1084d: 0xe000819a, 0x1084e: 0xe0008862, 0x1084f: 0xe0008e92, + 0x10850: 0xe0008e71, 0x10851: 0xe0007fc9, 0x10853: 0xe00068a8, + 0x10854: 0xe0008af9, 0x10855: 0xe0009ff0, 0x10856: 0xe0009fb1, 0x10857: 0xe0009ad5, + 0x10859: 0xe00079b4, 0x1085a: 0xe000855a, 0x1085b: 0xe00068f4, + 0x1085c: 0xe000866e, 0x1085d: 0xe0004cef, 0x1085e: 0xe0005261, 0x1085f: 0xe0009cb6, + 0x10869: 0xe0009d60, 0x1086a: 0xe000a6f4, + 0x1086f: 0xe000785d, + 0x10870: 0xe00064d8, 0x10873: 0xe0004163, + 0x10876: 0xe000517b, + 0x10878: 0xe0004ae5, 0x10879: 0xe0004e6d, 0x1087a: 0xe0008969, 0x1087b: 0xe0008d73, + 0x1087c: 0xe0004c11, 0x1087d: 0xe000926f, 0x1087e: 0xe000855e, 0x1087f: 0xe0006ae5, + // Block 0x422, offset 0x10880 + 0x10881: 0xe00074c1, 0x10883: 0xe0004228, + 0x10884: 0xe00091ad, 0x10886: 0xe000586f, + 0x10888: 0xe00099a8, 0x10889: 0xe0004a0e, 0x1088a: 0xe0004afd, 0x1088b: 0xe0005a7c, + 0x1088d: 0xe00073ee, 0x1088f: 0xe0008e95, + 0x10891: 0xe0008212, + 0x10894: 0xe000607b, 0x10896: 0xe0005c70, 0x10897: 0xe0005675, + 0x10898: 0xe0009248, 0x1089a: 0xe000733d, 0x1089b: 0xe0004976, + 0x1089c: 0xe0008f0a, 0x1089d: 0xe0008402, + 0x108ae: 0xe0006033, 0x108af: 0xe000a772, + 0x108b2: 0xe0009189, + 0x108b5: 0xe0009a56, 0x108b6: 0xe00058dd, + 0x108bb: 0xe0009b9c, + 0x108bf: 0xe0009db4, + // Block 0x423, offset 0x108c0 + 0x108c1: 0xe000802c, 0x108c2: 0xe0004799, 0x108c3: 0xe0009778, + 0x108c4: 0xe00075ab, 0x108c5: 0xe0004cf2, + 0x108c9: 0xe0007c5e, 0x108ca: 0xe0008f51, + 0x108cc: 0xe00066ac, 0x108ce: 0xe0008ce9, 0x108cf: 0xe00070ae, + 0x108d0: 0xe0005d33, 0x108d1: 0xe0007f42, 0x108d3: 0xe0004699, + 0x108d4: 0xe000a299, 0x108d7: 0xe00070f0, + 0x108d8: 0xe000680a, 0x108da: 0xe0005ce8, 0x108db: 0xe0005fcc, + 0x108dd: 0xe000667c, 0x108df: 0xe0006ae8, + 0x108e0: 0xe000a335, 0x108e1: 0xe00074c5, 0x108e3: 0xe0007cb2, + 0x108ee: 0xe000718f, 0x108ef: 0xe000678f, + 0x108f0: 0xe000a577, 0x108f1: 0xe0004c56, 0x108f3: 0xe000648f, + 0x108f4: 0xe0009548, 0x108f5: 0xe0009eeb, 0x108f6: 0xe00072b5, + 0x108f8: 0xe0006731, 0x108fa: 0xe0007967, + 0x108fe: 0xe00069c9, + // Block 0x424, offset 0x10900 + 0x10900: 0xe00093e7, 0x10902: 0xe000661c, + 0x10905: 0xe0007385, 0x10906: 0xe0005895, + 0x10909: 0xe000938f, 0x1090b: 0xe0004446, + 0x1090d: 0xe000648c, 0x1090f: 0xe00072b9, + 0x10911: 0xe0006195, 0x10912: 0xe000550c, + 0x10914: 0xe0004ddb, 0x10916: 0xe000a1f6, + 0x10918: 0xe000547a, 0x10919: 0xe000a775, 0x1091a: 0xe0008405, + 0x1091c: 0xe00094a0, 0x1091e: 0xe000469d, 0x1091f: 0xe000924b, + 0x10921: 0xe0009393, 0x10922: 0xe0009650, 0x10923: 0xe00063e8, + 0x10924: 0xe00099ab, 0x10925: 0xe00049b6, 0x10926: 0xe0004e07, 0x10927: 0xe0008e05, + 0x10928: 0xe00044b2, 0x10929: 0xe000954c, 0x1092a: 0xe0007be6, 0x1092b: 0xe0005c74, + 0x1092c: 0xe0009afc, 0x1092d: 0xe0007e65, 0x1092e: 0xe000576c, + 0x10930: 0xe0005ce0, + 0x1093b: 0xe0007803, + // Block 0x425, offset 0x10940 + 0x10943: 0xe0007927, + 0x10944: 0xe00051cc, 0x10947: 0xe0004166, + 0x10948: 0xe00045a8, 0x10949: 0xe000819d, 0x1094a: 0xe000802f, + 0x1094e: 0xe0007e83, 0x1094f: 0xe0009db8, + 0x10953: 0xe0007637, + 0x10955: 0xe000a192, 0x10956: 0xe0009272, + 0x10958: 0xe0004288, 0x1095a: 0xe0008e98, + 0x1095c: 0xe0008b55, + 0x10960: 0xe0007ef2, 0x10962: 0xe0009721, + 0x10965: 0xe0004514, + 0x1096a: 0xe0009fe9, + 0x10970: 0xe0006f44, 0x10972: 0xe0007442, + 0x10974: 0xe0009988, 0x10975: 0xe0008b59, 0x10976: 0xe0007fcc, + 0x10978: 0xe0009c9b, + // Block 0x426, offset 0x10980 + 0x10980: 0xe0004b75, + 0x10985: 0xe0006792, + 0x1098b: 0xe00043fc, + 0x1098d: 0xe00063ec, + 0x10991: 0xe0004558, 0x10992: 0xe000a400, + 0x10994: 0xe0004671, 0x10996: 0xe00093eb, + 0x10998: 0xe0006bd8, 0x10999: 0xe000694b, 0x1099a: 0xe000a75a, 0x1099b: 0xe0007f9e, + 0x1099d: 0xe0009bc8, 0x1099e: 0xe0006b87, + 0x109a2: 0xe00041ba, + 0x109ac: 0xe00097fc, 0x109ad: 0xe0007f46, 0x109ae: 0xe0008d76, + 0x109b2: 0xe0007c61, 0x109b3: 0xe000896d, + 0x109b4: 0xe0004cf5, 0x109b5: 0xe0009433, 0x109b7: 0xe0006ca4, + 0x109bd: 0xe00087ae, 0x109be: 0xe00046a1, 0x109bf: 0xe000793f, + // Block 0x427, offset 0x109c0 + 0x109c2: 0xe0005c12, + 0x109c4: 0xe0009f15, 0x109c5: 0xe0004f53, + 0x109c9: 0xe00095e0, 0x109ca: 0xe0006e54, + 0x109cf: 0xe0006ca8, + 0x109d1: 0xe0004bc9, + 0x109d5: 0xe00066c5, 0x109d6: 0xe000a91f, + 0x109da: 0xe0005b9e, 0x109db: 0xe000510b, + 0x109de: 0xe00081a0, + 0x109e2: 0xe0009550, + 0x109e5: 0xe0007e9e, 0x109e6: 0xe0009862, 0x109e7: 0xe00073c6, + 0x109e9: 0xe000a093, + 0x109ec: 0xe0009724, 0x109ed: 0xe0009327, 0x109ee: 0xe0005679, + 0x109f5: 0xe0004400, + 0x109f9: 0xe0004169, 0x109fb: 0xe0006580, + 0x109fe: 0xe0007778, 0x109ff: 0xe0006aeb, + // Block 0x428, offset 0x10a00 + 0x10a00: 0xe0008408, 0x10a01: 0xe0008f55, 0x10a02: 0xe00052a1, 0x10a03: 0xe0009554, + 0x10a04: 0xe000790f, 0x10a06: 0xe00046a5, 0x10a07: 0xe000a2e9, + 0x10a09: 0xe0004570, 0x10a0b: 0xe000540a, + 0x10a10: 0xe0006a7f, 0x10a12: 0xe0008215, 0x10a13: 0xe00054ee, + 0x10a14: 0xe0008f0d, 0x10a15: 0xe0008cb6, 0x10a17: 0xe000843b, + 0x10a18: 0xe000918d, 0x10a1a: 0xe0005f80, 0x10a1b: 0xe000617a, + 0x10a1c: 0xe0005265, 0x10a1f: 0xe0006cac, + 0x10a21: 0xe0005b62, 0x10a22: 0xe0005913, + 0x10a24: 0xe0009eb3, 0x10a25: 0xe0008306, 0x10a27: 0xe00092eb, + 0x10a2a: 0xe0007fcf, 0x10a2b: 0xe000a493, + 0x10a31: 0xe0005b46, 0x10a32: 0xe0008865, 0x10a33: 0xe000934f, + 0x10a35: 0xe00072bd, 0x10a37: 0xe00058e0, + 0x10a39: 0xe00092ef, 0x10a3a: 0xe000519b, 0x10a3b: 0xe000547e, + 0x10a3c: 0xe000796b, + // Block 0x429, offset 0x10a40 + 0x10a40: 0xe0007d52, 0x10a41: 0xe000830a, 0x10a43: 0xe00080e6, + 0x10a44: 0xe000a385, 0x10a45: 0xe0009916, 0x10a46: 0xe0008cec, 0x10a47: 0xe000a87f, + 0x10a48: 0xe0006e58, 0x10a49: 0xe0004b01, 0x10a4b: 0xe0004f27, + 0x10a4c: 0xe0009bf4, 0x10a4d: 0xe0005fa0, 0x10a4e: 0xe0009c4a, + 0x10a52: 0xe00075ae, + 0x10a55: 0xe0007445, 0x10a57: 0xe0007a83, + 0x10a5a: 0xe0005482, + 0x10a5c: 0xe00056b5, + 0x10a62: 0xe0005037, + 0x10a65: 0xe00085b2, 0x10a67: 0xe0005217, + 0x10a68: 0xe0008971, 0x10a69: 0xe0005899, 0x10a6a: 0xe0008218, 0x10a6b: 0xe0009d4c, + 0x10a6c: 0xe000497a, 0x10a6d: 0xe0005c60, 0x10a6e: 0xe000a3e5, + 0x10a71: 0xe000497e, + 0x10a75: 0xe0006620, 0x10a76: 0xe0005051, 0x10a77: 0xe0004c59, + 0x10a78: 0xe0008975, + 0x10a7c: 0xe0004659, + // Block 0x42a, offset 0x10a80 + 0x10a80: 0xe0005054, + 0x10a86: 0xe00079ad, + 0x10a89: 0xe0007afb, 0x10a8a: 0xe000945d, + 0x10a8d: 0xe00087fa, 0x10a8f: 0xe0004749, + 0x10a92: 0xe0006036, 0x10a93: 0xe0004cf8, + 0x10a95: 0xe0005fa4, 0x10a97: 0xe0007f4a, + 0x10a98: 0xe0008299, + 0x10aa0: 0xe0004a59, 0x10aa3: 0xe000997f, + 0x10aa4: 0xe000814e, 0x10aa5: 0xe0005ff0, + 0x10aaa: 0xe0005f90, + 0x10aac: 0xe0005635, + 0x10ab0: 0xe0006ac3, 0x10ab1: 0xe000a496, 0x10ab2: 0xe000992e, + 0x10ab6: 0xe0007806, 0x10ab7: 0xe0005881, + 0x10abd: 0xe00059b4, + // Block 0x42b, offset 0x10ac0 + 0x10ac4: 0xe0009485, 0x10ac5: 0xe000487a, 0x10ac6: 0xe0008f59, + 0x10ac9: 0xe000589d, 0x10aca: 0xe0009684, 0x10acb: 0xe0008cef, + 0x10acc: 0xe0005cc8, 0x10acd: 0xe0005639, + 0x10ad2: 0xe000843e, + 0x10ad4: 0xe00093ef, + 0x10adb: 0xe0005cbc, + 0x10adc: 0xe0005cb8, 0x10add: 0xe00083f2, 0x10ade: 0xe000a922, + 0x10ae0: 0xe0004e70, 0x10ae1: 0xe0006548, + 0x10ae9: 0xe00060c4, + 0x10aed: 0xe0006ac7, + 0x10af0: 0xe000a63c, 0x10af1: 0xe0004449, 0x10af3: 0xe0005734, + 0x10af4: 0xe0006acb, 0x10af6: 0xe000a883, + 0x10af8: 0xe0009590, 0x10af9: 0xe0007ea1, 0x10afa: 0xe0009906, + 0x10afd: 0xe000a0c3, + // Block 0x42c, offset 0x10b00 + 0x10b00: 0xe000550f, 0x10b01: 0xe0008d79, 0x10b03: 0xe00084ee, + 0x10b06: 0xe000685c, 0x10b07: 0xe0008aa9, + 0x10b08: 0xe0007be9, 0x10b0a: 0xe000422c, + 0x10b0e: 0xe0006199, + 0x10b11: 0xe000a389, 0x10b13: 0xe0007e21, + 0x10b16: 0xe0008192, 0x10b17: 0xe00059b8, + 0x10b1d: 0xe00096d0, + 0x10b24: 0xe0009d24, 0x10b25: 0xe0006600, 0x10b26: 0xe00045a0, 0x10b27: 0xe00045a4, + 0x10b29: 0xe0005ceb, 0x10b2a: 0xe0006bdc, + 0x10b2e: 0xe0004ad5, + 0x10b30: 0xe0005512, 0x10b31: 0xe00093f3, 0x10b32: 0xe0004ed0, 0x10b33: 0xe000487d, + 0x10b36: 0xe0008c71, 0x10b37: 0xe0007174, + 0x10b38: 0xe0004e0b, 0x10b39: 0xe000930b, 0x10b3a: 0xe00085d5, 0x10b3b: 0xe00041e4, + // Block 0x42d, offset 0x10b40 + 0x10b43: 0xe0009694, + 0x10b44: 0xe000474d, 0x10b47: 0xe0009a26, + 0x10b49: 0xe0008e80, 0x10b4a: 0xe0006bc0, 0x10b4b: 0xe0004f2b, + 0x10b4c: 0xe00057e7, 0x10b4d: 0xe0008979, + 0x10b54: 0xe00094a4, 0x10b55: 0xe00069cc, 0x10b56: 0xe0006795, 0x10b57: 0xe00086d6, + 0x10b5a: 0xe0006b8a, 0x10b5b: 0xe000439c, + 0x10b5d: 0xe00062c0, 0x10b5e: 0xe000510e, 0x10b5f: 0xe00095b8, + 0x10b61: 0xe0006f64, + 0x10b69: 0xe00085c2, 0x10b6a: 0xe000897d, + 0x10b6f: 0xe0006798, + 0x10b72: 0xe000a0b7, + 0x10b74: 0xe0004479, 0x10b75: 0xe0009397, 0x10b77: 0xe0006c08, + 0x10b7a: 0xe0005d36, + 0x10b7d: 0xe0009eee, 0x10b7f: 0xe00096d3, + // Block 0x42e, offset 0x10b80 + 0x10b82: 0xe0004e73, 0x10b83: 0xe000a70f, + 0x10b87: 0xe0004f2f, + 0x10b88: 0xe0006584, 0x10b89: 0xe0005c27, + 0x10b8d: 0xe0004574, + 0x10b91: 0xe0008c74, 0x10b92: 0xe0004578, 0x10b93: 0xe0008441, + 0x10b97: 0xe00092f3, + 0x10b98: 0xe0005df5, 0x10b9b: 0xe0005934, + 0x10b9f: 0xe0004982, + 0x10ba0: 0xe000416c, 0x10ba3: 0xe00059bc, + 0x10ba4: 0xe0004f57, + 0x10ba9: 0xe0008cf2, 0x10baa: 0xe0005271, 0x10bab: 0xe0004594, + 0x10bac: 0xe0004cfb, 0x10bad: 0xe0009727, + 0x10bbe: 0xe000a1e6, + // Block 0x42f, offset 0x10bc0 + 0x10bc1: 0xe00046a9, 0x10bc3: 0xe00063a8, + 0x10bc5: 0xe0009a2a, 0x10bc7: 0xe0007f4e, + 0x10bc9: 0xe0005fa8, + 0x10bcc: 0xe0004e2f, 0x10bcd: 0xe00046ad, + 0x10bd2: 0xe0005cac, + 0x10bd5: 0xe000563d, 0x10bd6: 0xe0008062, + 0x10bd8: 0xe00042f4, 0x10bd9: 0xe0006138, 0x10bdb: 0xe000a7ba, + 0x10bdd: 0xe00073ca, 0x10bde: 0xe0005a91, 0x10bdf: 0xe0006039, + 0x10be0: 0xe0005c6c, 0x10be1: 0xe0009f18, 0x10be2: 0xe000701b, 0x10be3: 0xe00088e9, + 0x10be4: 0xe0004f5b, 0x10be6: 0xe000972a, + 0x10bf3: 0xe000a7be, + 0x10bf5: 0xe00058e3, + 0x10bf8: 0xe0004e0f, 0x10bfa: 0xe0008672, 0x10bfb: 0xe0004f03, + 0x10bfe: 0xe0004c5c, 0x10bff: 0xe00061e1, + // Block 0x430, offset 0x10c00 + 0x10c01: 0xe00061c5, 0x10c02: 0xe0005223, 0x10c03: 0xe000447c, + 0x10c05: 0xe0009e65, + 0x10c08: 0xe000a887, 0x10c0a: 0xe0004d97, + 0x10c0c: 0xe000a123, 0x10c0d: 0xe0009e68, 0x10c0f: 0xe0009e6b, + 0x10c10: 0xe00066c9, + 0x10c15: 0xe000694e, 0x10c16: 0xe000a54d, 0x10c17: 0xe0006858, + 0x10c19: 0xe00073f1, + 0x10c20: 0xe0008726, 0x10c21: 0xe0004b05, 0x10c23: 0xe0004380, + 0x10c27: 0xe000a365, + 0x10c2a: 0xe0006951, + 0x10c2f: 0xe000a6b8, + 0x10c31: 0xe0004e76, + 0x10c36: 0xe0004cfe, + 0x10c39: 0xe0009f89, + 0x10c3d: 0xe0007943, 0x10c3e: 0xe0009ddc, 0x10c3f: 0xe0005311, + // Block 0x431, offset 0x10c40 + 0x10c40: 0xe0004c5f, 0x10c41: 0xe0007599, 0x10c43: 0xe0009500, + 0x10c44: 0xe00085b6, 0x10c45: 0xe0006c84, 0x10c47: 0xe00073ce, + 0x10c48: 0xe0007c64, 0x10c49: 0xe000a81e, 0x10c4a: 0xe0006328, + 0x10c4d: 0xe0005e2b, + 0x10c51: 0xe0006954, 0x10c52: 0xe0008df9, 0x10c53: 0xe0009b00, + 0x10c54: 0xe000a339, 0x10c57: 0xe00051e4, + 0x10c5a: 0xe00062c4, + 0x10c5c: 0xe00066cd, 0x10c5e: 0xe00065c4, + 0x10c60: 0xe0008ad5, 0x10c61: 0xe000870a, + 0x10c66: 0xe0004b5d, + 0x10c68: 0xe0006f10, + 0x10c6c: 0xe0007743, 0x10c6e: 0xe00099f0, 0x10c6f: 0xe0006108, + 0x10c70: 0xe00084f2, 0x10c71: 0xe00081a3, 0x10c72: 0xe00070b1, 0x10c73: 0xe0008ff9, + 0x10c74: 0xe00041e8, 0x10c75: 0xe00057af, 0x10c77: 0xe0004e13, + 0x10c78: 0xe0006b8d, 0x10c79: 0xe000a87b, 0x10c7a: 0xe0004f8f, 0x10c7b: 0xe0004210, + 0x10c7d: 0xe0008ff5, 0x10c7e: 0xe000763b, 0x10c7f: 0xe00046b1, + // Block 0x432, offset 0x10c80 + 0x10c84: 0xe00077b4, + 0x10c93: 0xe0007757, + 0x10c96: 0xe000645c, + 0x10c98: 0xe0005cee, 0x10c9a: 0xe000a778, + 0x10c9d: 0xe0008d7c, 0x10c9f: 0xe00080ea, + 0x10ca0: 0xe0009990, + 0x10ca5: 0xe0004e47, 0x10ca6: 0xe0009ff3, + 0x10caa: 0xe0004f93, + 0x10cad: 0xe0007ad3, 0x10cae: 0xe0007448, + 0x10cb2: 0xe0005916, + 0x10cb9: 0xe0004d01, 0x10cbb: 0xe00044b5, + // Block 0x433, offset 0x10cc0 + 0x10cc3: 0xe000932b, + 0x10cc5: 0xe0009353, + 0x10cc8: 0xe0007fd2, 0x10cc9: 0xe000924e, 0x10cca: 0xe0005003, 0x10ccb: 0xe0007fd5, + 0x10ccd: 0xe000632c, + 0x10cd4: 0xe0007285, 0x10cd6: 0xe0009955, 0x10cd7: 0xe0007192, + 0x10cdb: 0xe0006330, + 0x10cdf: 0xe0007246, + 0x10ce1: 0xe0007bec, 0x10ce2: 0xe00097bc, 0x10ce3: 0xe0004c62, + 0x10ce4: 0xe0004805, 0x10ce5: 0xe0004c65, 0x10ce6: 0xe0005a48, + 0x10ce8: 0xe0005584, 0x10ce9: 0xe0004808, 0x10cea: 0xe0009058, 0x10ceb: 0xe0004ea3, + 0x10cec: 0xe000703c, 0x10ced: 0xe0009d50, 0x10cee: 0xe0008c29, 0x10cef: 0xe000416f, + 0x10cf0: 0xe0009bf7, 0x10cf1: 0xe00091b1, 0x10cf2: 0xe0006aee, 0x10cf3: 0xe0007fd8, + 0x10cf4: 0xe0004d04, 0x10cf5: 0xe0009cfa, 0x10cf6: 0xe000a369, + 0x10cf8: 0xe0006af1, + // Block 0x434, offset 0x10d00 + 0x10d01: 0xe0008032, 0x10d03: 0xe000a8c7, + 0x10d04: 0xe00041ec, + 0x10d08: 0xe000a107, 0x10d09: 0xe000517f, 0x10d0a: 0xe00088ed, 0x10d0b: 0xe00097b8, + 0x10d0c: 0xe0005641, 0x10d0d: 0xe0005ff4, 0x10d0e: 0xe000a77b, 0x10d0f: 0xe0005cf1, + 0x10d10: 0xe0009c4d, 0x10d11: 0xe000a212, + 0x10d1b: 0xe0004da7, + 0x10d1d: 0xe0005d5d, 0x10d1f: 0xe00083ae, + 0x10d20: 0xe0009e38, + 0x10d26: 0xe000679b, + 0x10d29: 0xe0006860, 0x10d2b: 0xe000a0c7, + 0x10d2c: 0xe0008372, 0x10d2e: 0xe0008a09, + 0x10d33: 0xe0007c6a, + 0x10d36: 0xe00052dd, + 0x10d38: 0xe000a8fb, 0x10d39: 0xe0009958, 0x10d3b: 0xe000619d, + 0x10d3c: 0xe000a77e, 0x10d3d: 0xe000a799, 0x10d3e: 0xe0007c67, + // Block 0x435, offset 0x10d40 + 0x10d40: 0xe000a017, 0x10d42: 0xe00058e6, + 0x10d46: 0xe0005f2d, + 0x10d48: 0xe0008b5d, 0x10d4a: 0xe000480b, + 0x10d4e: 0xe00094d8, + 0x10d51: 0xe0009b58, + 0x10d5d: 0xe00077d0, + 0x10d62: 0xe00052ff, + 0x10d64: 0xe0005a4c, 0x10d66: 0xe000829c, + 0x10d68: 0xe0008ea4, 0x10d6a: 0xe0008ea1, 0x10d6b: 0xe0009654, + 0x10d70: 0xe0008620, 0x10d71: 0xe000480e, 0x10d73: 0xe00061ed, + 0x10d75: 0xe0004172, 0x10d76: 0xe0005283, + 0x10d7b: 0xe00074c9, + 0x10d7c: 0xe000a41e, 0x10d7d: 0xe0005ff8, 0x10d7f: 0xe00044e2, + // Block 0x436, offset 0x10d80 + 0x10d80: 0xe0008868, + 0x10d84: 0xe0005629, 0x10d86: 0xe0009e6e, 0x10d87: 0xe0009fb5, + 0x10d8b: 0xe0006b90, + 0x10d8c: 0xe000a550, 0x10d8d: 0xe000a1c5, 0x10d8e: 0xe0004c68, 0x10d8f: 0xe0007bb3, + 0x10d90: 0xe000679e, + 0x10d96: 0xe00041bd, + 0x10da0: 0xe0009221, 0x10da2: 0xe000763f, + 0x10da4: 0xe0009aae, 0x10da5: 0xe000a95b, + 0x10da8: 0xe00085d8, 0x10dab: 0xe000905b, + 0x10dac: 0xe0004bcc, 0x10daf: 0xe0004214, + 0x10db3: 0xe000a195, + 0x10db8: 0xe000a0cb, 0x10dbb: 0xe000a860, + 0x10dbc: 0xe0004b66, 0x10dbd: 0xe00084f6, 0x10dbf: 0xe00084a1, + // Block 0x437, offset 0x10dc0 + 0x10dc0: 0xe000775a, 0x10dc1: 0xe0009f3c, 0x10dc2: 0xe0007519, 0x10dc3: 0xe000567d, + 0x10dc4: 0xe000a511, 0x10dc6: 0xe00099f3, 0x10dc7: 0xe0007dbe, + 0x10dc8: 0xe000a10b, 0x10dc9: 0xe00087fd, + 0x10de1: 0xe00080ee, + 0x10de5: 0xe0004175, 0x10de6: 0xe00075e1, + 0x10de8: 0xe00096d6, 0x10de9: 0xe0005d39, + 0x10ded: 0xe00048ce, 0x10dee: 0xe000a733, + 0x10df1: 0xe00063d4, 0x10df2: 0xe0009594, + 0x10dfa: 0xe0009e71, + 0x10dfd: 0xe0004751, 0x10dff: 0xe00041c0, + // Block 0x438, offset 0x10e00 + 0x10e04: 0xe0009d63, 0x10e06: 0xe0006af4, 0x10e07: 0xe00090fd, + 0x10e09: 0xe000777b, + 0x10e0e: 0xe0005cf4, 0x10e0f: 0xe000a95e, + 0x10e10: 0xe000544e, + 0x10e14: 0xe0007cb5, + 0x10e1c: 0xe0005e97, + 0x10e2b: 0xe0004feb, + 0x10e2e: 0xe0007249, 0x10e2f: 0xe000821b, + 0x10e31: 0xe000939b, 0x10e33: 0xe0005919, + 0x10e35: 0xe00076cb, + 0x10e3c: 0xe0006c88, 0x10e3e: 0xe0009ab1, + // Block 0x439, offset 0x10e40 + 0x10e40: 0xe000777e, 0x10e42: 0xe00052cf, + 0x10e44: 0xe0009b04, 0x10e46: 0xe0006cb0, + 0x10e4f: 0xe00061a1, + 0x10e53: 0xe000479c, + 0x10e56: 0xe00053c6, 0x10e57: 0xe000540e, + 0x10e5c: 0xe00095bc, 0x10e5e: 0xe00075b1, + 0x10e63: 0xe000a0cf, + 0x10e7b: 0xe000744b, + 0x10e7c: 0xe0008c77, 0x10e7d: 0xe00076eb, 0x10e7e: 0xe0009865, + // Block 0x43a, offset 0x10e80 + 0x10e80: 0xe000448e, 0x10e81: 0xe0007d82, 0x10e83: 0xe00051f8, + 0x10e84: 0xe0006e5c, 0x10e86: 0xe0009598, 0x10e87: 0xe0005754, + 0x10e89: 0xe000a781, 0x10e8a: 0xe000a0d3, 0x10e8b: 0xe0009658, + 0x10e91: 0xe00083c6, 0x10e93: 0xe0007ef5, + 0x10e94: 0xe0007643, + 0x10e98: 0xe0009504, 0x10e99: 0xe000a821, 0x10e9a: 0xe000a5b4, + 0x10e9c: 0xe000a925, 0x10e9d: 0xe00042b8, 0x10e9e: 0xe0008ffd, 0x10e9f: 0xe00081e5, + 0x10ea3: 0xe000a79c, + 0x10ea4: 0xe000a69c, 0x10ea7: 0xe000a802, + 0x10ea8: 0xe00058c5, 0x10ea9: 0xe000821e, 0x10eaa: 0xe0006cb4, 0x10eab: 0xe0005197, + 0x10eac: 0xe0004bcf, 0x10eae: 0xe0005336, + 0x10eb0: 0xe00074b1, + // Block 0x43b, offset 0x10ec0 + 0x10ec5: 0xe000a784, 0x10ec7: 0xe0006d4c, + 0x10ec9: 0xe00070b4, + 0x10ed1: 0xe000a127, + 0x10ed4: 0xe0009101, + 0x10eda: 0xe0007c6d, 0x10edb: 0xe0004675, + 0x10edc: 0xe0005057, 0x10edf: 0xe0009251, + 0x10ee0: 0xe00057a3, 0x10ee2: 0xe0007d56, 0x10ee3: 0xe0006af7, + 0x10ee4: 0xe00099ae, + 0x10ef7: 0xe0007cb8, + 0x10efd: 0xe0007195, 0x10efe: 0xe0008ea7, 0x10eff: 0xe0009bb0, + // Block 0x43c, offset 0x10f00 + 0x10f04: 0xe0004c14, 0x10f06: 0xe0009b5c, + 0x10f08: 0xe0008d7f, 0x10f09: 0xe0004178, + 0x10f0c: 0xe0009f1b, 0x10f0d: 0xe0005c15, 0x10f0e: 0xe00076ab, + 0x10f10: 0xe0004c17, 0x10f12: 0xe000a403, + 0x10f14: 0xe0004c6b, 0x10f16: 0xe000946d, 0x10f17: 0xe0006cb8, + 0x10f29: 0xe000a57a, + 0x10f2c: 0xe0009805, 0x10f2f: 0xe000703f, + 0x10f32: 0xe0008cf5, + 0x10f34: 0xe000995b, 0x10f36: 0xe00073f4, 0x10f37: 0xe000a499, + 0x10f38: 0xe000617d, 0x10f39: 0xe0005bbf, 0x10f3b: 0xe000a961, + 0x10f3f: 0xe0006191, + // Block 0x43d, offset 0x10f40 + 0x10f41: 0xe0007cbb, 0x10f42: 0xe0008f9d, + 0x10f49: 0xe0005412, 0x10f4b: 0xe0009c56, + 0x10f4d: 0xe000972d, 0x10f4e: 0xe0007acf, 0x10f4f: 0xe000a90b, + 0x10f53: 0xe000a236, + 0x10f64: 0xe0004fef, 0x10f65: 0xe00052a5, + 0x10f68: 0xe000505a, 0x10f69: 0xe0007647, 0x10f6a: 0xe0008d82, 0x10f6b: 0xe000a928, + 0x10f6c: 0xe0006dda, 0x10f6d: 0xe0004c1a, 0x10f6f: 0xe0007781, + 0x10f72: 0xe0009aa5, + 0x10f74: 0xe0006864, 0x10f76: 0xe00042dc, + 0x10f78: 0xe0009c5a, 0x10f7a: 0xe000751d, + // Block 0x43e, offset 0x10f80 + 0x10f80: 0xe0005269, + 0x10f84: 0xe000a717, 0x10f86: 0xe000a736, 0x10f87: 0xe000a01a, + 0x10f8f: 0xe00096af, + 0x10f99: 0xe0004c1d, 0x10f9a: 0xe0008376, + 0x10fa5: 0xe0007a0f, + 0x10fac: 0xe0006a47, 0x10fae: 0xe000a216, + 0x10fb3: 0xe00048ea, + 0x10fb4: 0xe000796f, 0x10fb6: 0xe00077f0, + 0x10fbc: 0xe0008676, + // Block 0x43f, offset 0x10fc0 + 0x10fc0: 0xe0008a0d, 0x10fc1: 0xe0006fac, 0x10fc2: 0xe000a75d, 0x10fc3: 0xe000870e, + 0x10fc8: 0xe0007c1f, 0x10fc9: 0xe000576f, 0x10fca: 0xe0005208, + 0x10fcd: 0xe000a92b, + 0x10fd1: 0xe000977c, + 0x10fda: 0xe0007198, 0x10fdb: 0xe0006afa, + 0x10fde: 0xe000a6bb, 0x10fdf: 0xe0007521, + 0x10fe0: 0xe00084fa, + 0x10fe6: 0xe0007a87, + 0x10feb: 0xe000a50d, + 0x10fee: 0xe0007dc1, + 0x10ff0: 0xe00048fe, + 0x10ff7: 0xe0004f1b, + 0x10ff9: 0xe0005a0c, 0x10ffa: 0xe0004811, + 0x10fff: 0xe000829f, + // Block 0x440, offset 0x11000 + 0x11001: 0xe000837a, 0x11002: 0xe000a4ed, 0x11003: 0xe0009e74, + 0x11004: 0xe00078e5, + 0x11008: 0xe0004e17, 0x11009: 0xe0007903, 0x1100a: 0xe0009688, 0x1100b: 0xe0004d7f, + 0x1100d: 0xe00081a6, + 0x11012: 0xe00080f6, 0x11013: 0xe00080f2, + 0x11016: 0xe0005515, + 0x11018: 0xe000533a, + 0x1101c: 0xe0008152, 0x1101f: 0xe0009c50, + 0x11025: 0xe0005b0a, + 0x11028: 0xe0008800, + 0x1102c: 0xe0007cbe, 0x1102d: 0xe0004ea6, 0x1102e: 0xe00069cf, + 0x11030: 0xe000905e, + 0x1103b: 0xe000505d, + 0x1103e: 0xe000501b, + // Block 0x441, offset 0x11040 + 0x11040: 0xe0009061, 0x11042: 0xe0009d28, + 0x11047: 0xe0004f07, + 0x1104a: 0xe00063f0, + 0x1104c: 0xe00068ac, 0x1104d: 0xe00053ca, 0x1104e: 0xe00042f8, 0x1104f: 0xe00064c5, + 0x11050: 0xe0008e74, 0x11051: 0xe0004496, + 0x11061: 0xe0009cca, + 0x11064: 0xe0004902, 0x11066: 0xe0009b60, 0x11067: 0xe00094dc, + 0x11068: 0xe00084a4, 0x11069: 0xe0004344, 0x1106a: 0xe0009e0c, + 0x1106e: 0xe00054c4, 0x1106f: 0xe00064c8, + 0x11070: 0xe00046b5, 0x11071: 0xe0007747, 0x11073: 0xe0007ef8, + 0x11075: 0xe0004c6e, 0x11077: 0xe00041c3, + 0x11078: 0xe0004d07, 0x1107b: 0xe00090b8, + 0x1107c: 0xe0009b08, + // Block 0x442, offset 0x11080 + 0x11082: 0xe000719b, + 0x11088: 0xe00054c1, 0x1108b: 0xe000a38d, + 0x1108c: 0xe0005681, + 0x11093: 0xe000a198, + 0x11095: 0xe000a79f, + 0x1109e: 0xe0009ad8, + 0x110a0: 0xe0008356, 0x110a2: 0xe0004c71, 0x110a3: 0xe00080fa, + 0x110a4: 0xe00091e9, + 0x110b8: 0xe0007e25, + 0x110bd: 0xe000837e, + // Block 0x443, offset 0x110c0 + 0x110c3: 0xe000775d, + 0x110c6: 0xe0004218, 0x110c7: 0xe0007f52, + 0x110c8: 0xe0008f5d, 0x110c9: 0xe000a36d, 0x110cb: 0xe0005f03, + 0x110ce: 0xe0006fc8, 0x110cf: 0xe0007a8b, + 0x110d1: 0xe00095c0, 0x110d2: 0xe00057ef, + 0x110dc: 0xe000781e, 0x110df: 0xe00079df, + 0x110e0: 0xe00067a1, + 0x110e4: 0xe00069d2, + 0x110ed: 0xe0009c1e, + 0x110f0: 0xe0009436, 0x110f3: 0xe0004348, + 0x110f4: 0xe0007475, 0x110f7: 0xe0009209, + 0x110f9: 0xe0006492, 0x110fa: 0xe0005060, 0x110fb: 0xe0008fa1, + 0x110fc: 0xe0005063, 0x110fd: 0xe00070b7, + // Block 0x444, offset 0x11100 + 0x11100: 0xe0004dcb, 0x11102: 0xe0005452, 0x11103: 0xe0004926, + 0x11105: 0xe00045e5, 0x11106: 0xe0009c86, + 0x11108: 0xe00043a0, 0x11109: 0xe00082f6, 0x1110a: 0xe00075ff, 0x1110b: 0xe000693c, + 0x11117: 0xe000562d, + 0x11119: 0xe000852e, + 0x1111d: 0xe0004a11, 0x1111e: 0xe0009628, + 0x11120: 0xe000a7a2, 0x11121: 0xe000667f, 0x11123: 0xe0008035, + 0x11124: 0xe0008c7a, 0x11126: 0xe00047e1, 0x11127: 0xe0007a13, + 0x1112a: 0xe00042fc, + 0x1112f: 0xe0007ea4, + 0x11130: 0xe000792b, 0x11131: 0xe0006682, + 0x11134: 0xe000872a, 0x11135: 0xe0005518, + 0x1113a: 0xe000479f, + // Block 0x445, offset 0x11140 + 0x11140: 0xe0006660, + 0x11149: 0xe00094e0, 0x1114a: 0xe0004b78, 0x1114b: 0xe0007b47, + 0x1114c: 0xe0009bcc, 0x1114d: 0xe00073e6, 0x1114f: 0xe000444c, + 0x11150: 0xe00070ba, 0x11151: 0xe0007042, 0x11152: 0xe000744e, + 0x11154: 0xe0009bbc, 0x11157: 0xe000551b, + 0x11158: 0xe0005456, 0x11159: 0xe0004880, 0x1115a: 0xe00097c0, + 0x1115e: 0xe0006d40, + 0x11161: 0xe0008981, 0x11162: 0xe0007c70, + 0x11164: 0xe000a7c2, + 0x11169: 0xe0007aff, + 0x11175: 0xe0009105, + 0x11179: 0xe000932f, + 0x1117c: 0xe0008985, 0x1117d: 0xe0006d1c, 0x1117e: 0xe0007289, + // Block 0x446, offset 0x11180 + 0x11180: 0xe00090bb, 0x11181: 0xe0005e73, 0x11183: 0xe00046b9, + 0x11185: 0xe0006d80, + 0x11189: 0xe0007f56, 0x1118a: 0xe0008afd, + 0x1118d: 0xe0005111, + 0x11190: 0xe0004f97, 0x11193: 0xe000610b, + 0x1119c: 0xe000981d, 0x1119d: 0xe0007efb, 0x1119e: 0xe000901d, 0x1119f: 0xe000a239, + 0x111a1: 0xe0006ed0, 0x111a3: 0xe0006705, + 0x111a8: 0xe0006189, 0x111a9: 0xe00055ed, 0x111ab: 0xe0008fa5, + 0x111ae: 0xe0009ab4, + 0x111b0: 0xe0005416, 0x111b1: 0xe0005738, 0x111b3: 0xe0006868, + 0x111ba: 0xe0007c73, 0x111bb: 0xe000872e, + 0x111be: 0xe0004230, + // Block 0x447, offset 0x111c0 + 0x111c1: 0xe0006588, 0x111c3: 0xe0004404, + 0x111c5: 0xe0007d5e, 0x111c7: 0xe000533e, + 0x111ce: 0xe000a7c6, + 0x111d1: 0xe000a02f, 0x111d3: 0xe0007717, + 0x111d4: 0xe0005587, 0x111d5: 0xe000a421, + 0x111d8: 0xe0005beb, 0x111d9: 0xe0004b09, 0x111da: 0xe0005ac4, + 0x111dc: 0xe000541a, 0x111dd: 0xe00082a2, 0x111de: 0xe0004b7b, 0x111df: 0xe0005b2a, + 0x111e4: 0xe0007861, + 0x111eb: 0xe0006afd, + 0x111ec: 0xe0008586, 0x111ef: 0xe0008732, + 0x111f9: 0xe0008562, 0x111fa: 0xe000a424, 0x111fb: 0xe0006d83, + 0x111fd: 0xe000719e, + // Block 0x448, offset 0x11200 + 0x11206: 0xe0006775, + 0x11208: 0xe000882d, + 0x1120f: 0xe0009ff6, + 0x11210: 0xe000a3d1, + 0x11214: 0xe0005066, 0x11215: 0xe0006df8, 0x11216: 0xe0007e74, + 0x11219: 0xe000728d, 0x1121a: 0xe0005321, + 0x1121c: 0xe0007809, + 0x11222: 0xe00060d4, + 0x11224: 0xe0008532, 0x11225: 0xe0004a14, 0x11227: 0xe00054c7, + 0x11229: 0xe0009508, 0x1122a: 0xe0009bfa, 0x1122b: 0xe00067a4, + 0x1122c: 0xe0009aa8, 0x1122d: 0xe0007ea7, 0x1122e: 0xe000772b, 0x1122f: 0xe000a17b, + 0x11231: 0xe0007541, + 0x11237: 0xe0008462, + 0x11238: 0xe0004a17, + 0x1123e: 0xe000a33d, + // Block 0x449, offset 0x11240 + 0x11244: 0xe0007973, 0x11247: 0xe0005069, + 0x11248: 0xe000521a, 0x11249: 0xe0006735, + 0x1124e: 0xe0004ea9, 0x1124f: 0xe0008eaa, + 0x11250: 0xe000a5b8, 0x11251: 0xe00047a2, 0x11253: 0xe0009275, + 0x11254: 0xe000686c, 0x11255: 0xe000a279, 0x11257: 0xe0009c9e, + 0x11258: 0xe00087b2, 0x1125a: 0xe000a19b, + 0x11260: 0xe0008989, 0x11262: 0xe0006b00, + 0x11267: 0xe0007c76, + 0x11269: 0xe00059ec, 0x1126a: 0xe0009b94, 0x1126b: 0xe000830e, + 0x1126c: 0xe0008736, 0x1126d: 0xe0006dfc, 0x1126e: 0xe0006870, + 0x11273: 0xe0005232, + 0x11274: 0xe0005274, 0x11276: 0xe0005226, + 0x11278: 0xe0004234, + 0x1127d: 0xe000a427, + // Block 0x44a, offset 0x11280 + 0x11282: 0xe00079b7, 0x11283: 0xe0006957, + 0x11284: 0xe0005ebf, + 0x1128a: 0xe000858a, + 0x11291: 0xe0009cfd, 0x11292: 0xe0009cad, 0x11293: 0xe000506c, + 0x11296: 0xe0007eaa, 0x11297: 0xe0004fbb, + 0x11299: 0xe000610e, + 0x1129d: 0xe00087b6, + 0x112a3: 0xe00069d5, + 0x112a5: 0xe0009ab7, 0x112a7: 0xe0007e29, + 0x112a8: 0xe00063f4, + 0x112ac: 0xe0009ca1, 0x112af: 0xe00098e6, + 0x112b2: 0xe00053b2, + 0x112b9: 0xe0005f06, 0x112bb: 0xe0009488, + 0x112be: 0xe000962c, + // Block 0x44b, offset 0x112c0 + 0x112c3: 0xe0008b61, + 0x112c6: 0xe000603c, + 0x112c8: 0xe0005a50, 0x112c9: 0xe00085db, 0x112cb: 0xe00073f7, + 0x112cd: 0xe0006c0c, + 0x112d0: 0xe000886b, 0x112d1: 0xe0004814, 0x112d2: 0xe0006b93, 0x112d3: 0xe0006fcc, + 0x112d4: 0xe00081a9, + 0x112d9: 0xe000858e, 0x112da: 0xe0007ead, + 0x112dc: 0xe00043a4, 0x112dd: 0xe0008e9b, 0x112de: 0xe000518b, + 0x112e3: 0xe0004c20, + 0x112e4: 0xe0004d0a, 0x112e5: 0xe000607e, 0x112e6: 0xe0004238, + 0x112e8: 0xe0008465, 0x112ea: 0xe00091b5, + 0x112ec: 0xe000a92e, 0x112ee: 0xe000a147, + 0x112f8: 0xe0007a17, 0x112fa: 0xe0007525, 0x112fb: 0xe00084fe, + 0x112ff: 0xe00085de, + // Block 0x44c, offset 0x11300 + 0x11301: 0xe00081ac, 0x11303: 0xe0007e68, + 0x11309: 0xe0006acf, + 0x11311: 0xe0006b03, 0x11313: 0xe0006229, + 0x11318: 0xe000520c, 0x11319: 0xe000a3d5, 0x1131b: 0xe0007c79, + 0x1131c: 0xe000519e, 0x1131f: 0xe0007a1b, + 0x11320: 0xe00074cd, 0x11323: 0xe0008cb9, + 0x11325: 0xe00075b4, 0x11327: 0xe0009c21, + 0x11329: 0xe0005e2f, + 0x1132d: 0xe0007784, + 0x11335: 0xe0009868, 0x11336: 0xe000995e, + 0x1133c: 0xe000939f, 0x1133f: 0xe00075e4, + // Block 0x44d, offset 0x11340 + 0x11340: 0xe00075e7, 0x11341: 0xe0005bee, + 0x11346: 0xe0009ccd, + 0x11349: 0xe0007dd9, + 0x1134c: 0xe00072c1, + 0x11350: 0xe0007dc4, + 0x1135a: 0xe000a4d5, + 0x11362: 0xe000695a, 0x11363: 0xe0008536, + 0x11366: 0xe00067a7, 0x11367: 0xe0008c2d, + 0x1136a: 0xe000581f, + 0x11372: 0xe000a57d, + 0x11377: 0xe0008c31, + 0x1137f: 0xe0006ddd, + // Block 0x44e, offset 0x11380 + 0x11384: 0xe000622c, + 0x1138d: 0xe000680d, + 0x11392: 0xe0005f09, 0x11393: 0xe000a6a0, + 0x11395: 0xe00076ef, + 0x1139a: 0xe00061f0, 0x1139b: 0xe00080fe, + 0x1139f: 0xe0006f48, + 0x113a2: 0xe0006081, + 0x113a4: 0xe00073fa, 0x113a7: 0xe0007e71, + 0x113aa: 0xe0007cc1, + 0x113b3: 0xe00074b5, + 0x113b5: 0xe00085ce, + 0x113ba: 0xe000622f, 0x113bb: 0xe0006388, + 0x113bc: 0xe0007d26, 0x113bd: 0xe0005df8, 0x113be: 0xe0004d0d, 0x113bf: 0xe0004b8d, + // Block 0x44f, offset 0x113c0 + 0x113c1: 0xe000417b, 0x113c2: 0xe00071a1, + 0x113c4: 0xe0008102, + 0x113c8: 0xe00077f4, 0x113c9: 0xe00091b9, 0x113cb: 0xe00052bd, + 0x113cc: 0xe000a331, + 0x113d6: 0xe0009f1e, 0x113d7: 0xe0004d10, + 0x113d9: 0xe0006ed4, 0x113da: 0xe0005e77, 0x113db: 0xe0007c22, + 0x113e0: 0xe0005d3c, 0x113e1: 0xe00088f1, 0x113e2: 0xe0004ed3, 0x113e3: 0xe0007947, + 0x113e5: 0xe0008a11, 0x113e6: 0xe000a14b, + 0x113e9: 0xe00052d5, 0x113eb: 0xe0006084, + 0x113ed: 0xe000a49c, 0x113ee: 0xe000a49f, 0x113ef: 0xe0007cc4, + 0x113f6: 0xe0009730, + 0x113fa: 0xe000a097, 0x113fb: 0xe000a09b, + 0x113fd: 0xe0005bc2, + // Block 0x450, offset 0x11400 + 0x11400: 0xe0004ed6, + 0x11405: 0xe000a553, + 0x11408: 0xe0007efe, 0x11409: 0xe000a931, 0x1140b: 0xe0006e60, + 0x1140c: 0xe0004bd2, + 0x11416: 0xe0009e3b, + 0x11419: 0xe00087ba, 0x1141b: 0xe000a2ed, + 0x11425: 0xe0008d85, + 0x11428: 0xe0008623, 0x1142a: 0xe0006a4b, + 0x1142d: 0xe0005229, + 0x11430: 0xe0007bbb, 0x11432: 0xe00052c0, + 0x11434: 0xe0007bb7, + 0x1143e: 0xe00057cb, 0x1143f: 0xe0007a8f, + // Block 0x451, offset 0x11440 + 0x11440: 0xe0006cbc, 0x11443: 0xe0007865, + 0x11445: 0xe0006f84, + 0x1144c: 0xe0005998, + 0x11450: 0xe00085e1, 0x11451: 0xe000a319, + 0x11454: 0xe0004986, 0x11455: 0xe00085c6, 0x11456: 0xe0008626, 0x11457: 0xe00085e4, + 0x11458: 0xe0008ded, 0x1145a: 0xe00067aa, 0x1145b: 0xe0009d81, + 0x1145c: 0xe00085e7, 0x1145d: 0xe000a739, 0x1145f: 0xe0005f68, + 0x11461: 0xe0009c24, 0x11463: 0xe00047a5, + 0x11464: 0xe0004817, 0x11465: 0xe0005286, + 0x11469: 0xe000a19e, 0x1146b: 0xe000711c, + 0x11470: 0xe0007291, 0x11471: 0xe00086c2, + 0x11475: 0xe00067ad, 0x11476: 0xe0008629, + 0x11478: 0xe000a033, 0x1147a: 0xe0008221, + 0x1147c: 0xe000795b, 0x1147f: 0xe0006c10, + // Block 0x452, offset 0x11480 + 0x11481: 0xe00088b3, 0x11482: 0xe0007fa2, + 0x11485: 0xe0005500, 0x11487: 0xe0007fdb, + 0x11488: 0xe00071a4, 0x11489: 0xe0007663, 0x1148a: 0xe00041c6, 0x1148b: 0xe0007148, + 0x1148c: 0xe0007ddd, 0x1148f: 0xe0004ba6, + 0x11493: 0xe00066d1, + 0x11495: 0xe0009bd4, 0x11496: 0xe000a71b, 0x11497: 0xe0008e09, + 0x11498: 0xe0004a5d, 0x11499: 0xe0008ead, 0x1149a: 0xe0008b65, 0x1149b: 0xe0007de1, + 0x1149c: 0xe000840b, + 0x114a2: 0xe0004492, 0x114a3: 0xe0006e64, + 0x114a4: 0xe0007545, 0x114a5: 0xe0008224, 0x114a6: 0xe000a5bc, + 0x114ac: 0xe0006fd0, 0x114ae: 0xe0004deb, + 0x114b0: 0xe0008803, 0x114b3: 0xe000a1a1, + 0x114b4: 0xe0007a1f, 0x114b5: 0xe0007045, 0x114b6: 0xe000417e, + 0x114b8: 0xe00074d1, 0x114b9: 0xe0007f5a, + 0x114bf: 0xe0007295, + // Block 0x453, offset 0x114c0 + 0x114c0: 0xe0009439, 0x114c2: 0xe00088f5, 0x114c3: 0xe0008106, + 0x114c4: 0xe000506f, 0x114c5: 0xe0008502, 0x114c6: 0xe00062ac, 0x114c7: 0xe0004c74, + 0x114cc: 0xe00067b0, + 0x114d0: 0xe0005f0c, 0x114d2: 0xe000a05b, 0x114d3: 0xe0007fde, + 0x114d4: 0xe0007479, 0x114d6: 0xe0009a7a, 0x114d7: 0xe000525d, + 0x114d8: 0xe00099f6, + 0x114de: 0xe0005e07, 0x114df: 0xe000930f, + 0x114e1: 0xe00049ea, 0x114e2: 0xe0009a5a, + 0x114e4: 0xe0007c7c, 0x114e5: 0xe0007eb0, 0x114e6: 0xe0007549, 0x114e7: 0xe0005259, + 0x114e8: 0xe000943c, 0x114e9: 0xe0007559, 0x114eb: 0xe0006b06, + 0x114ec: 0xe0004a61, 0x114ed: 0xe000a406, 0x114ee: 0xe0005ba1, 0x114ef: 0xe0008f61, + 0x114f0: 0xe000a5f4, + 0x114f5: 0xe00097c4, 0x114f6: 0xe0006685, + 0x114f8: 0xe00097a8, 0x114fa: 0xe0006b09, + // Block 0x454, offset 0x11500 + 0x11501: 0xe0006739, + 0x11504: 0xe0006b0c, 0x11505: 0xe0004f47, 0x11507: 0xe000873a, + 0x11508: 0xe000898d, 0x11509: 0xe00081af, 0x1150a: 0xe0008df1, 0x1150b: 0xe000755d, + 0x1150c: 0xe0008f10, 0x1150d: 0xe00054ca, 0x1150e: 0xe000551e, 0x1150f: 0xe0007048, + 0x11511: 0xe000704b, + 0x11514: 0xe00084a7, 0x11516: 0xe00095e4, + 0x11519: 0xe0006cc0, + 0x1151f: 0xe0006ed8, + 0x11520: 0xe0006edc, + 0x11524: 0xe0007fe1, + 0x11528: 0xe00063f8, 0x1152b: 0xe0007e59, + 0x11531: 0xe0009961, + 0x11538: 0xe00073fd, 0x11539: 0xe0008312, 0x1153a: 0xe00094a8, 0x1153b: 0xe000481a, + 0x1153c: 0xe00052f9, 0x1153e: 0xe00061f3, 0x1153f: 0xe00052ba, + // Block 0x455, offset 0x11540 + 0x11540: 0xe0004d83, 0x11541: 0xe00069d8, + 0x11545: 0xe00044b8, 0x11546: 0xe00047a8, 0x11547: 0xe0008a15, + 0x11548: 0xe0004dcf, 0x1154b: 0xe0007cfa, + 0x1154d: 0xe0007403, 0x1154e: 0xe0007400, + 0x11550: 0xe0004f4b, 0x11551: 0xe0006f14, + 0x11555: 0xe0008991, + 0x1155b: 0xe0006624, + 0x11560: 0xe0005521, 0x11562: 0xe0005bf1, + 0x11564: 0xe00099a4, 0x11565: 0xe0005cf7, + 0x11568: 0xe0004d13, + 0x1156c: 0xe00070f4, 0x1156f: 0xe00056e8, + 0x11571: 0xe0006be0, 0x11573: 0xe0006ee0, + 0x11579: 0xe000a8cb, 0x1157a: 0xe0005114, + // Block 0x456, offset 0x11580 + 0x11588: 0xe000a01d, 0x1158a: 0xe0008ac9, + 0x1158c: 0xe000501f, 0x1158f: 0xe0007e2d, + 0x11590: 0xe0005072, 0x11591: 0xe00086e2, 0x11592: 0xe0004679, + 0x11594: 0xe0009278, + 0x1159d: 0xe00086a2, + 0x115a1: 0xe00043a8, 0x115a3: 0xe0004d16, + 0x115a5: 0xe0009d00, 0x115a6: 0xe0005dd9, 0x115a7: 0xe0009733, + 0x115a8: 0xe00088b6, 0x115a9: 0xe00076cf, 0x115aa: 0xe0006904, 0x115ab: 0xe00071a7, + 0x115ac: 0xe0004384, 0x115ad: 0xe0005a54, + 0x115b1: 0xe00054cd, 0x115b3: 0xe0007603, + 0x115b5: 0xe000a42a, 0x115b7: 0xe0006250, + 0x115b8: 0xe0007667, 0x115ba: 0xe0005a10, + 0x115be: 0xe0008ad9, + // Block 0x457, offset 0x115c0 + 0x115c0: 0xe00071aa, + 0x115d2: 0xe0005685, + 0x115d9: 0xe00099b1, + 0x115e0: 0xe0006cc4, + 0x115e8: 0xe00075b7, 0x115e9: 0xe00075ea, + 0x115ed: 0xe0009736, 0x115ef: 0xe000673d, + 0x115f0: 0xe0006741, 0x115f1: 0xe0005289, + 0x115f4: 0xe000a29d, 0x115f6: 0xe0005524, + 0x115fb: 0xe0008f65, + 0x115fd: 0xe000a341, + // Block 0x458, offset 0x11600 + 0x11606: 0xe00049ba, 0x11607: 0xe0007375, + 0x1160d: 0xe0005872, 0x1160e: 0xe0005075, + 0x11610: 0xe000492a, 0x11611: 0xe0004906, + 0x11614: 0xe00097ff, 0x11615: 0xe0007787, 0x11616: 0xe0007760, 0x11617: 0xe00043ac, + 0x11619: 0xe0005c78, 0x1161b: 0xe0004ddf, + 0x1161f: 0xe00083ca, + 0x11622: 0xe000884f, + 0x11624: 0xe000a760, 0x11626: 0xe000797f, 0x11627: 0xe0007379, + 0x11629: 0xe0006924, + 0x11634: 0xe0007e86, + 0x1163d: 0xe0008830, + // Block 0x459, offset 0x11640 + 0x11641: 0xe000434c, 0x11642: 0xe0005c98, + 0x1164b: 0xe00061f6, + 0x1164c: 0xe0004300, 0x1164e: 0xe0008038, + 0x11650: 0xe00057f7, 0x11653: 0xe00076f3, + 0x11654: 0xe0007e89, + 0x11669: 0xe000737d, + 0x1166c: 0xe0007e77, 0x1166f: 0xe0009254, + 0x11671: 0xe0007fa6, + // Block 0x45a, offset 0x11680 + 0x11681: 0xe0005c18, 0x11682: 0xe00087be, + 0x11684: 0xe0009357, 0x11687: 0xe0004c77, + 0x1168b: 0xe0005527, + 0x11692: 0xe0009049, + 0x11694: 0xe0004ff3, 0x11695: 0xe0009739, + 0x11699: 0xe0005d81, + 0x1169d: 0xe0005710, + 0x116a0: 0xe0004bd5, 0x116a2: 0xe0007eb3, + 0x116a7: 0xe00079ff, + 0x116aa: 0xe0007997, 0x116ab: 0xe000799f, + 0x116ae: 0xe000a26d, + 0x116b0: 0xe000a1c8, + 0x116b7: 0xe0008444, + 0x116b8: 0xe0007b4b, 0x116ba: 0xe0005a14, + 0x116bc: 0xe0006d86, 0x116bd: 0xe0007607, + // Block 0x45b, offset 0x116c0 + 0x116c9: 0xe000935b, 0x116cb: 0xe0004ed9, + 0x116cd: 0xe0007e7a, + 0x116d1: 0xe00092f7, 0x116d2: 0xe0005e33, 0x116d3: 0xe0008a19, + 0x116d6: 0xe00076d3, + 0x116da: 0xe000a255, + 0x116dd: 0xe000950c, 0x116de: 0xe0008eb0, + 0x116e1: 0xe00072d1, 0x116e2: 0xe000704e, + 0x116e5: 0xe000498a, 0x116e6: 0xe0008e77, 0x116e7: 0xe0004bd8, + 0x116e8: 0xe00044bb, 0x116eb: 0xe000613b, + 0x116ee: 0xe0009257, + 0x116f1: 0xe0005078, 0x116f2: 0xe0008468, 0x116f3: 0xe0006b0f, + 0x116f4: 0xe0009cd0, 0x116f5: 0xe00099f9, 0x116f7: 0xe000a14f, + 0x116f9: 0xe0004f9b, + 0x116fd: 0xe0007120, 0x116fe: 0xe0004518, + // Block 0x45c, offset 0x11700 + 0x11702: 0xe0007406, 0x11703: 0xe0009e77, + 0x11706: 0xe000654c, + 0x11709: 0xe00068b0, + 0x1170c: 0xe000a934, + 0x11711: 0xe0009bd8, + 0x11715: 0xe0005eb3, 0x11716: 0xe0009630, + 0x11719: 0xe00091bd, 0x1171a: 0xe000986b, 0x1171b: 0xe00064dc, + 0x1171d: 0xe0008c7d, + 0x11725: 0xe00071ad, + 0x11728: 0xe0007030, 0x1172b: 0xe0006b12, + 0x1172d: 0xe0006e00, + 0x11733: 0xe000873e, + 0x11736: 0xe00054d0, 0x11737: 0xe00082a5, + 0x11738: 0xe0006cc8, + 0x1173d: 0xe000603f, 0x1173f: 0xe000a787, + // Block 0x45d, offset 0x11740 + 0x11740: 0xe0008b69, 0x11743: 0xe00081e8, + 0x11744: 0xe000760b, 0x11745: 0xe0009ed7, 0x11747: 0xe00063fc, + 0x1174c: 0xe000a640, 0x1174e: 0xe0005f98, + 0x11754: 0xe0005e7b, 0x11755: 0xe0005e0b, + 0x11758: 0xe0009471, + 0x1175e: 0xe0006709, 0x1175f: 0xe00099b4, + 0x11761: 0xe00064f8, 0x11762: 0xe000545a, 0x11763: 0xe0009e3e, + 0x11768: 0xe0009608, 0x1176a: 0xe00060e0, 0x1176b: 0xe0006460, + 0x1176c: 0xe0008f13, + 0x11770: 0xe000a259, 0x11771: 0xe00057cf, 0x11772: 0xe000423c, 0x11773: 0xe0009e10, + 0x11774: 0xe0005239, 0x11777: 0xe0006628, + 0x11778: 0xe000a1fa, 0x11779: 0xe0004240, 0x1177a: 0xe0007f01, 0x1177b: 0xe000a5c0, + 0x1177c: 0xe0008227, 0x1177d: 0xe000822a, 0x1177e: 0xe000507b, 0x1177f: 0xe0007983, + // Block 0x45e, offset 0x11780 + 0x11784: 0xe0008742, 0x11787: 0xe000695d, + 0x1178a: 0xe0006ccc, 0x1178b: 0xe0005117, + 0x1178f: 0xe0006d89, + 0x11795: 0xe000886e, 0x11796: 0xe0009eb6, 0x11797: 0xe0008add, + 0x1179a: 0xe00046bd, + 0x1179c: 0xe00067b3, + 0x117a0: 0xe0006cd0, + 0x117a6: 0xe000552a, 0x117a7: 0xe0008e7a, + 0x117ab: 0xe000481d, + 0x117ad: 0xe0008b6d, + 0x117b3: 0xe00069db, + 0x117b5: 0xe00076d7, 0x117b6: 0xe0006d8c, 0x117b7: 0xe00043b0, + 0x117b8: 0xe0007f5e, + 0x117bd: 0xe000803b, 0x117be: 0xe000822d, + // Block 0x45f, offset 0x117c0 + 0x117c1: 0xe000999c, 0x117c2: 0xe0006cd4, + 0x117c8: 0xe0009ff9, 0x117c9: 0xe00059d8, 0x117ca: 0xe0005837, 0x117cb: 0xe000724c, + 0x117d0: 0xe0004c7a, 0x117d1: 0xe0004f9f, 0x117d3: 0xe0004a35, + 0x117d5: 0xe00083ce, 0x117d6: 0xe0005ba4, + 0x117da: 0xe0008eb3, 0x117db: 0xe0008995, + 0x117dd: 0xe0007451, 0x117de: 0xe000a8f7, 0x117df: 0xe0006111, + 0x117e0: 0xe00093a3, 0x117e1: 0xe0006180, 0x117e2: 0xe0009e41, 0x117e3: 0xe0004b0d, + 0x117e5: 0xe0004b90, 0x117e7: 0xe00087c2, + 0x117e8: 0xe000a1cb, 0x117e9: 0xe0005cc0, + 0x117ec: 0xe00058e9, + 0x117f1: 0xe0007d86, 0x117f3: 0xe0009664, + 0x117f6: 0xe0007a23, 0x117f7: 0xe0008b71, + 0x117fa: 0xe000451c, 0x117fb: 0xe000a6be, + 0x117ff: 0xe00085ba, + // Block 0x460, offset 0x11800 + 0x11801: 0xe00065c8, 0x11803: 0xe000511a, + 0x11804: 0xe0005b2e, 0x11807: 0xe0004350, + 0x11808: 0xe000a289, 0x1180a: 0xe0009e44, 0x1180b: 0xe00084da, + 0x1180f: 0xe000747d, + 0x11811: 0xe0007409, 0x11813: 0xe0004def, + 0x11814: 0xe0008cf8, 0x11815: 0xe0008506, 0x11817: 0xe00068f8, + 0x11818: 0xe000a515, 0x1181b: 0xe000846b, + 0x1181f: 0xe0008c80, + 0x11822: 0xe000558a, + 0x11825: 0xe0006232, 0x11826: 0xe000a2a1, 0x11827: 0xe000a42d, + 0x11829: 0xe0005277, + 0x1182d: 0xe0006235, + 0x11831: 0xe0007821, + 0x11834: 0xe0005615, 0x11835: 0xe0008746, + 0x1183a: 0xe00043b4, + 0x1183c: 0xe0009f8d, + // Block 0x461, offset 0x11840 + 0x11840: 0xe0004d19, + 0x11846: 0xe0006610, + 0x11848: 0xe0009b64, 0x1184a: 0xe00043b8, + 0x1184c: 0xe00061f9, 0x1184e: 0xe0005e37, + 0x11854: 0xe0005b0e, 0x11856: 0xe0005342, 0x11857: 0xe000a3e8, + 0x11858: 0xe00096b2, 0x11859: 0xe000a833, 0x1185b: 0xe000846e, + 0x1185d: 0xe00084aa, + 0x11862: 0xe000a391, + 0x11864: 0xe0005689, 0x11866: 0xe000792f, 0x11867: 0xe0008066, + 0x11869: 0xe000943f, 0x1186a: 0xe0009ef1, 0x1186b: 0xe0008cfb, + 0x1186c: 0xe0006a4f, 0x1186d: 0xe0009d90, + 0x11870: 0xe00093a7, 0x11871: 0xe0007b4f, + 0x11877: 0xe0006400, + 0x11879: 0xe00079e3, + 0x1187c: 0xe0009f64, 0x1187f: 0xe00068fc, + // Block 0x462, offset 0x11880 + 0x11880: 0xe0007e45, 0x11881: 0xe0008b75, 0x11882: 0xe0008d88, + 0x11885: 0xe00054d3, 0x11887: 0xe00072d5, + 0x11888: 0xe000a8af, 0x11889: 0xe00078b9, 0x1188a: 0xe000a6c1, 0x1188b: 0xe0005c8c, + 0x1188c: 0xe000a78a, + 0x11890: 0xe0006d8f, 0x11891: 0xe00046c1, 0x11892: 0xe000552d, + 0x11897: 0xe000570c, + 0x11898: 0xe0006495, 0x11899: 0xe0006b15, + 0x1189c: 0xe0006d20, 0x1189e: 0xe0008e0d, + 0x118a0: 0xe0005875, 0x118a1: 0xe00078e8, 0x118a3: 0xe000927b, + 0x118a7: 0xe0009de0, + 0x118a8: 0xe000a644, 0x118a9: 0xe00066d5, 0x118aa: 0xe00072d9, + 0x118ac: 0xe0006464, 0x118ad: 0xe0007f04, 0x118ae: 0xe00061fc, 0x118af: 0xe000a409, + 0x118b5: 0xe0009229, 0x118b7: 0xe0005504, + 0x118b9: 0xe000959c, + 0x118bc: 0xe0007f07, 0x118bd: 0xe000a836, + // Block 0x463, offset 0x118c0 + 0x118c3: 0xe0007561, + 0x118c5: 0xe0009f91, + 0x118c9: 0xe000558d, + 0x118cc: 0xe000507e, 0x118cd: 0xe000850a, + 0x118d0: 0xe0009bb4, 0x118d2: 0xe0009cc2, + 0x118d6: 0xe00097ac, 0x118d7: 0xe0009064, + 0x118d8: 0xe0005ec3, 0x118d9: 0xe0005ec7, + 0x118dd: 0xe000960c, 0x118de: 0xe0006284, 0x118df: 0xe0006288, + 0x118e0: 0xe000991a, 0x118e1: 0xe0009932, + 0x118e4: 0xe0007cc7, + 0x118e8: 0xe0007e31, 0x118eb: 0xe0009aa2, + 0x118ed: 0xe00065dc, 0x118ee: 0xe000511d, + 0x118f1: 0xe0009a7e, + 0x118f5: 0xe0005249, + 0x118f8: 0xe00052eb, 0x118fb: 0xe000a8b3, + 0x118fc: 0xe0004408, 0x118fd: 0xe000a501, 0x118ff: 0xe0006874, + // Block 0x464, offset 0x11900 + 0x1190a: 0xe000973c, + 0x1190d: 0xe00086a6, 0x1190f: 0xe000772f, + 0x11912: 0xe000527a, + 0x11914: 0xe0008c35, 0x11915: 0xe0009d03, 0x11916: 0xe0009e7a, 0x11917: 0xe000965c, + 0x11919: 0xe000a4a2, 0x1191b: 0xe00053b6, + 0x1191c: 0xe0005a18, 0x1191d: 0xe0006b18, + 0x11920: 0xe0009bfd, 0x11921: 0xe0008471, + 0x11925: 0xe0005007, 0x11926: 0xe0009e20, 0x11927: 0xe0006fd4, + 0x11928: 0xe000810a, 0x11929: 0xe0005302, 0x1192a: 0xe0004b7e, + 0x1192f: 0xe0004598, + 0x11933: 0xe000a6a4, + // Block 0x465, offset 0x11940 + 0x11941: 0xe0008592, 0x11942: 0xe00072dd, 0x11943: 0xe000740c, + 0x11946: 0xe000a17f, 0x11947: 0xe0004b31, + 0x11948: 0xe0006087, 0x1194a: 0xe000a371, + 0x1194d: 0xe000a648, + 0x11950: 0xe000498e, 0x11952: 0xe000a153, + 0x11955: 0xe0006d92, + 0x11959: 0xe0007869, 0x1195a: 0xe00079a7, + 0x1195d: 0xe0004ad9, 0x1195f: 0xe000a893, + 0x11960: 0xe0004b93, 0x11962: 0xe000a6c4, 0x11963: 0xe00085ea, + 0x11964: 0xe000a86f, 0x11965: 0xe00099b7, + 0x11968: 0xe000a05f, 0x11969: 0xe000835a, 0x1196a: 0xe00041f0, 0x1196b: 0xe0009c7a, + 0x1196c: 0xe000524d, 0x1196d: 0xe0004992, 0x1196f: 0xe0007481, + 0x11970: 0xe000a8ff, + // Block 0x466, offset 0x11980 + 0x11981: 0xe0007a93, 0x11983: 0xe000492e, + 0x11984: 0xe000973f, 0x11985: 0xe0007abf, + 0x11989: 0xe000754d, 0x1198b: 0xe0005d85, + 0x1198c: 0xe0008c83, 0x1198d: 0xe000a063, 0x1198f: 0xe000a375, + 0x11992: 0xe00083e6, + 0x11994: 0xe000a6c7, 0x11995: 0xe000a964, 0x11996: 0xe0009d66, 0x11997: 0xe00061c9, + 0x1199a: 0xe000714c, 0x1199b: 0xe0008999, + 0x1199f: 0xe0007c7f, + 0x119a0: 0xe0008230, 0x119a2: 0xe00058c9, 0x119a3: 0xe000a5c4, + 0x119a4: 0xe00097c8, 0x119a7: 0xe0005cfa, + 0x119b0: 0xe0008e11, 0x119b1: 0xe00069de, 0x119b2: 0xe0006960, 0x119b3: 0xe0005508, + 0x119b4: 0xe000993a, 0x119b5: 0xe00093f7, 0x119b6: 0xe0006254, + 0x119b8: 0xe00047ab, 0x119bb: 0xe000a20a, + 0x119bc: 0xe0005530, 0x119bd: 0xe000948b, 0x119be: 0xe00049be, + // Block 0x467, offset 0x119c0 + 0x119c4: 0xe0005235, 0x119c5: 0xe0008b79, 0x119c6: 0xe000986e, 0x119c7: 0xe00055f1, + 0x119c9: 0xe0009610, 0x119cb: 0xe0007e35, + 0x119cf: 0xe0005823, + 0x119d1: 0xe000a4c9, 0x119d3: 0xe0004e33, + 0x119d5: 0xe00094e4, + 0x119d8: 0xe0005eeb, 0x119d9: 0xe00095c4, 0x119da: 0xe000a505, 0x119db: 0xe000a4f1, + 0x119dc: 0xe0006e04, 0x119dd: 0xe00093fb, 0x119df: 0xe0008233, + 0x119e0: 0xe000a3eb, 0x119e1: 0xe000760f, 0x119e2: 0xe0007180, + 0x119f0: 0xe0009aba, 0x119f1: 0xe00052b1, 0x119f2: 0xe00080ba, 0x119f3: 0xe0006cd8, + 0x119f4: 0xe0009946, 0x119f6: 0xe000a64c, 0x119f7: 0xe0008fa9, + 0x119f8: 0xe0004755, 0x119f9: 0xe000780c, 0x119fa: 0xe0006fd8, 0x119fb: 0xe0009994, + 0x119fc: 0xe0009de4, + // Block 0x468, offset 0x11a00 + 0x11a00: 0xe0009742, 0x11a01: 0xe00071b0, 0x11a03: 0xe0006ee4, + 0x11a06: 0xe0004520, + 0x11a08: 0xe0008236, 0x11a09: 0xe0008239, + 0x11a0d: 0xe0006258, 0x11a0e: 0xe0009db0, 0x11a0f: 0xe000840e, + 0x11a14: 0xe00083d2, 0x11a15: 0xe0007613, + 0x11a1a: 0xe0007fe4, 0x11a1b: 0xe0007763, + 0x11a1c: 0xe000a379, 0x11a1f: 0xe0004304, + 0x11a27: 0xe0004b81, + 0x11a2c: 0xe00070bd, 0x11a2d: 0xe0005120, + 0x11a30: 0xe000a650, + 0x11a34: 0xe00093ab, 0x11a37: 0xe000444f, + 0x11a3c: 0xe00074d5, 0x11a3e: 0xe0004452, 0x11a3f: 0xe000810e, + // Block 0x469, offset 0x11a40 + 0x11a42: 0xe0007f62, + 0x11a44: 0xe0005c90, 0x11a46: 0xe0005590, 0x11a47: 0xe000835e, + 0x11a48: 0xe00085ed, 0x11a4a: 0xe000465d, 0x11a4b: 0xe0009c00, + 0x11a4c: 0xe000a654, 0x11a4d: 0xe0007d2a, + 0x11a52: 0xe0008e4d, 0x11a53: 0xe0009ef4, + 0x11a55: 0xe0006042, + 0x11a58: 0xe0009333, 0x11a59: 0xe0009337, 0x11a5a: 0xe000935f, + 0x11a5d: 0xe0009cba, 0x11a5f: 0xe0009c62, + 0x11a60: 0xe0007cca, 0x11a62: 0xe0005e3b, 0x11a63: 0xe0004a65, + 0x11a64: 0xe00041f4, 0x11a67: 0xe000a3ee, + 0x11a68: 0xe0004455, 0x11a6b: 0xe0008e15, + 0x11a6e: 0xe00058ec, + 0x11a70: 0xe00081b2, 0x11a71: 0xe000537a, 0x11a73: 0xe000428c, + 0x11a74: 0xe00073b2, 0x11a75: 0xe0007faa, 0x11a76: 0xe00046c5, 0x11a77: 0xe00043bc, + 0x11a7a: 0xe0005c1b, + 0x11a7d: 0xe00094ac, 0x11a7e: 0xe0007f22, + // Block 0x46a, offset 0x11a80 + 0x11a81: 0xe00097cc, 0x11a82: 0xe0007fe7, 0x11a83: 0xe0007fae, + 0x11a8a: 0xe0006963, + 0x11a8d: 0xe0004c23, 0x11a8e: 0xe0009021, + 0x11a90: 0xe0005968, 0x11a91: 0xe0006ab3, 0x11a92: 0xe0004e79, + 0x11a94: 0xe00096d9, 0x11a96: 0xe0008382, + 0x11a98: 0xe000a93a, 0x11a99: 0xe000a937, 0x11a9a: 0xe0009b68, + 0x11aa4: 0xe0006878, 0x11aa7: 0xe0005645, + 0x11aa8: 0xe0004354, 0x11aa9: 0xe00045ab, 0x11aab: 0xe000625c, + 0x11aac: 0xe00046c9, 0x11aae: 0xe000613e, 0x11aaf: 0xe0009363, + 0x11ab2: 0xe000a245, + 0x11ab6: 0xe0007913, + 0x11ab8: 0xe0006f88, 0x11aba: 0xe00053ce, 0x11abb: 0xe0009b80, + 0x11abc: 0xe0004759, 0x11abe: 0xe0004308, + // Block 0x46b, offset 0x11ac0 + 0x11ac3: 0xe0004f5f, + 0x11ac6: 0xe0008d8b, 0x11ac7: 0xe0004244, + 0x11ac8: 0xe000a1a4, 0x11ac9: 0xe00083f6, 0x11aca: 0xe0007c82, 0x11acb: 0xe0006141, + 0x11acc: 0xe0007a03, + 0x11ad5: 0xe0007b03, 0x11ad7: 0xe000a020, + 0x11ade: 0xe00060e4, 0x11adf: 0xe00054f1, + 0x11ae3: 0xe00061cd, + 0x11ae6: 0xe00051a1, + 0x11af2: 0xe000922d, + 0x11af6: 0xe0005757, 0x11af7: 0xe000a6ca, + 0x11af8: 0xe000a2a5, 0x11afa: 0xe000933b, + 0x11afc: 0xe0004c7d, 0x11afd: 0xe000a5f8, 0x11afe: 0xe0006fb0, 0x11aff: 0xe0008411, + // Block 0x46c, offset 0x11b00 + 0x11b00: 0xe000596c, + 0x11b07: 0xe000545e, + 0x11b08: 0xe00049ed, 0x11b0a: 0xe0006144, + 0x11b0c: 0xe0007361, 0x11b0d: 0xe00071b3, 0x11b0e: 0xe0008342, + 0x11b10: 0xe0006fdc, 0x11b11: 0xe00075ba, 0x11b12: 0xe00047ae, + 0x11b14: 0xe00086da, 0x11b15: 0xe00087c6, 0x11b16: 0xe000a4cd, + 0x11b1a: 0xe00094b0, + 0x11b1e: 0xe00076af, 0x11b1f: 0xe0004f33, + 0x11b21: 0xe000430c, 0x11b22: 0xe0009225, + 0x11b27: 0xe00093ff, + 0x11b29: 0xe0008a1d, 0x11b2a: 0xe0008aad, + 0x11b2e: 0xe0005c64, + 0x11b30: 0xe000899d, 0x11b31: 0xe000a93d, 0x11b32: 0xe000a967, 0x11b33: 0xe00092a3, + 0x11b34: 0xe00054d6, 0x11b35: 0xe0004d1c, 0x11b36: 0xe000a430, + 0x11b39: 0xe00077d4, + 0x11b3e: 0xe00058ef, 0x11b3f: 0xe0006404, + // Block 0x46d, offset 0x11b40 + 0x11b40: 0xe0007051, 0x11b41: 0xe0009dbc, 0x11b43: 0xe000475d, + 0x11b47: 0xe0006e68, + 0x11b48: 0xe000a433, 0x11b49: 0xe0006966, 0x11b4a: 0xe0007b07, 0x11b4b: 0xe00071b6, + 0x11b4d: 0xe0008806, 0x11b4e: 0xe000931f, + 0x11b51: 0xe000670d, 0x11b52: 0xe00064cb, 0x11b53: 0xe0009abd, + 0x11b57: 0xe0008833, + 0x11b58: 0xe0009b0c, 0x11b5b: 0xe000440c, + 0x11b63: 0xe0004d1f, + 0x11b68: 0xe000853a, + 0x11b6e: 0xe000687c, + 0x11b71: 0xe000500b, 0x11b73: 0xe000638c, + 0x11b76: 0xe00067b6, + 0x11b79: 0xe0006969, 0x11b7a: 0xe00090be, + 0x11b7c: 0xe00077b8, 0x11b7e: 0xe0008d8e, 0x11b7f: 0xe00073d2, + // Block 0x46e, offset 0x11b80 + 0x11b80: 0xe0005081, 0x11b83: 0xe00065e0, + 0x11b84: 0xe00096dc, 0x11b86: 0xe00061d1, + 0x11b89: 0xe0004635, 0x11b8a: 0xe0009cd3, + 0x11b91: 0xe0007917, 0x11b92: 0xe0006d95, + 0x11b94: 0xe0006810, 0x11b95: 0xe0009ca4, 0x11b96: 0xe00056d3, 0x11b97: 0xe000a157, + 0x11b98: 0xe0008ab1, 0x11b9b: 0xe0009e7d, + 0x11ba8: 0xe0009e24, 0x11bab: 0xe0009f67, + 0x11bac: 0xe0009c27, + 0x11bb1: 0xe0009e80, + 0x11bb5: 0xe0008871, + 0x11bb9: 0xe0005e9b, + 0x11bbc: 0xe000771b, 0x11bbd: 0xe0009820, + // Block 0x46f, offset 0x11bc0 + 0x11bc2: 0xe0006900, + 0x11bc4: 0xe0008f16, 0x11bc5: 0xe000537e, 0x11bc6: 0xe0009b34, 0x11bc7: 0xe0006147, + 0x11bc8: 0xe0005251, 0x11bc9: 0xe0005827, 0x11bca: 0xe0006813, + 0x11bcc: 0xe0006334, 0x11bcd: 0xe00062c8, 0x11bcf: 0xe00051a4, + 0x11bd0: 0xe0004b84, 0x11bd1: 0xe000467d, 0x11bd2: 0xe00044be, 0x11bd3: 0xe00094b4, + 0x11bd4: 0xe00063ac, 0x11bd5: 0xe0009adb, 0x11bd6: 0xe0009ac0, 0x11bd7: 0xe0007eb6, + 0x11bd8: 0xe0004c80, 0x11bd9: 0xe0008dfd, 0x11bdb: 0xe00096df, + 0x11bdc: 0xe0006498, + 0x11bec: 0xe0004add, 0x11bed: 0xe0007485, 0x11bee: 0xe0005183, 0x11bef: 0xe0009029, + 0x11bf1: 0xe0004996, 0x11bf3: 0xe0004e1b, + 0x11bf5: 0xe0008df5, 0x11bf6: 0xe0009323, 0x11bf7: 0xe0004820, + 0x11bfd: 0xe0007c25, 0x11bfe: 0xe00073a2, 0x11bff: 0xe00051a7, + // Block 0x470, offset 0x11c00 + 0x11c01: 0xe0009067, 0x11c02: 0xe0004b69, + 0x11c07: 0xe000906a, + 0x11c09: 0xe000766b, + 0x11c0c: 0xe00045cd, + 0x11c10: 0xe00051ad, 0x11c11: 0xe0005533, 0x11c12: 0xe00059cc, + 0x11c28: 0xe000778a, 0x11c2a: 0xe00051b0, 0x11c2b: 0xe0008e7d, + 0x11c2f: 0xe0009109, + 0x11c39: 0xe00083ea, 0x11c3a: 0xe0008b7d, 0x11c3b: 0xe0007a2b, + 0x11c3d: 0xe0005e3f, 0x11c3e: 0xe000a345, + // Block 0x471, offset 0x11c40 + 0x11c42: 0xe0007ccd, 0x11c43: 0xe0004dbf, + 0x11c44: 0xe0004d22, 0x11c46: 0xe0004932, + 0x11c49: 0xe0009287, + 0x11c4c: 0xe0009d54, 0x11c4d: 0xe000a09f, 0x11c4e: 0xe00070c0, 0x11c4f: 0xe00051dc, + 0x11c50: 0xe0007a27, + 0x11c55: 0xe0009e83, 0x11c57: 0xe00094e8, + 0x11c67: 0xe0006745, + 0x11c68: 0xe0006b1b, 0x11c69: 0xe00059d0, 0x11c6b: 0xe00061d5, + 0x11c6e: 0xe00044c1, + 0x11c71: 0xe000778d, 0x11c72: 0xe0004e1f, + 0x11c76: 0xe0009871, 0x11c77: 0xe0009634, + 0x11c7a: 0xe00051e0, 0x11c7b: 0xe0005255, + 0x11c7f: 0xe0006d98, + // Block 0x472, offset 0x11c80 + 0x11c80: 0xe000a8b7, 0x11c83: 0xe0007054, + 0x11c84: 0xe0005c88, 0x11c87: 0xe00095c8, + 0x11c88: 0xe00071b9, 0x11c89: 0xe0005536, 0x11c8a: 0xe0006816, + 0x11c8c: 0xe000874a, 0x11c8e: 0xe0005123, 0x11c8f: 0xe0005593, + 0x11c92: 0xe000649b, + 0x11c96: 0xe00077bc, + 0x11c98: 0xe0004dd3, 0x11c9b: 0xe0004b60, + 0x11c9c: 0xe0007c28, 0x11c9f: 0xe0008c39, + 0x11ca0: 0xe0005885, 0x11ca1: 0xe0009442, 0x11ca2: 0xe0009ba0, + 0x11ca5: 0xe0008b25, 0x11ca7: 0xe000499a, + 0x11ca8: 0xe0009823, 0x11ca9: 0xe0007977, 0x11caa: 0xe0008cfe, + 0x11cac: 0xe0004d9b, + 0x11cbe: 0xe0007a97, + // Block 0x473, offset 0x11cc0 + 0x11cc0: 0xe0004248, 0x11cc3: 0xe0008a21, + 0x11cc4: 0xe000823c, 0x11cc6: 0xe0004eac, + 0x11cc9: 0xe00082a8, + 0x11ccf: 0xe0006114, + 0x11cd0: 0xe0008c86, + 0x11cd6: 0xe00083da, + 0x11cda: 0xe000786d, 0x11cdb: 0xe000a5c8, + 0x11cdf: 0xe0006de0, + 0x11ce0: 0xe00076b3, 0x11ce1: 0xe0007617, 0x11ce3: 0xe0009949, + 0x11ce9: 0xe000447f, 0x11ceb: 0xe0009874, + 0x11ced: 0xe00045ae, 0x11cee: 0xe000a839, + 0x11cf2: 0xe0006f4c, + 0x11cf4: 0xe0008112, 0x11cf5: 0xe000453c, 0x11cf6: 0xe000780f, 0x11cf7: 0xe0006c74, + // Block 0x474, offset 0x11d00 + 0x11d06: 0xe0004d25, + 0x11d09: 0xe000421c, + 0x11d0d: 0xe0007124, 0x11d0f: 0xe00062cc, + 0x11d12: 0xe0006468, + 0x11d14: 0xe0007057, 0x11d16: 0xe0007eb9, 0x11d17: 0xe0005539, + 0x11d1c: 0xe00071bc, + 0x11d22: 0xe000910d, + 0x11d24: 0xe00077d8, 0x11d25: 0xe0009877, + 0x11d28: 0xe0009bd0, 0x11d2a: 0xe0005486, 0x11d2b: 0xe0006390, + 0x11d2c: 0xe0006338, 0x11d2d: 0xe0009bc0, 0x11d2f: 0xe0005596, + 0x11d30: 0xe0004966, + 0x11d36: 0xe0009403, + 0x11d3a: 0xe000a854, + 0x11d3e: 0xe000928b, + // Block 0x475, offset 0x11d40 + 0x11d58: 0xe00088f9, + 0x11d60: 0xe00097d0, + 0x11d67: 0xe0009808, + 0x11d69: 0xe0005ddd, + 0x11d6d: 0xe00094ec, 0x11d6f: 0xe000906d, + 0x11d73: 0xe0004d28, + 0x11d78: 0xe0006045, 0x11d79: 0xe0006048, 0x11d7a: 0xe0008b29, 0x11d7b: 0xe0006f8c, + 0x11d7d: 0xe0009f21, + // Block 0x476, offset 0x11d80 + 0x11d85: 0xe0004e7c, + 0x11d88: 0xe0005a94, + 0x11d90: 0xe0009c3f, 0x11d91: 0xe0009c3b, 0x11d92: 0xe0006c3c, 0x11d93: 0xe0007ebc, + 0x11d95: 0xe0006de3, + 0x11d99: 0xe0008fad, 0x11d9a: 0xe000523d, + 0x11d9d: 0xe000a84b, 0x11d9e: 0xe0005462, 0x11d9f: 0xe0004c26, + 0x11da4: 0xe00095a0, 0x11da5: 0xe00063b0, + 0x11da9: 0xe0005bc5, 0x11dab: 0xe000614a, + 0x11dad: 0xe0009cd6, 0x11dae: 0xe00097f8, + 0x11db0: 0xe00092af, 0x11db2: 0xe00062d0, + 0x11dbb: 0xe000539e, + 0x11dbc: 0xe0004358, 0x11dbe: 0xe0004a1a, 0x11dbf: 0xe000458c, + // Block 0x477, offset 0x11dc0 + 0x11dc1: 0xe0007d62, + 0x11dc4: 0xe0005a97, 0x11dc5: 0xe0009510, 0x11dc7: 0xe0009c33, + 0x11dc9: 0xe00092a7, 0x11dca: 0xe00045b1, + 0x11dcd: 0xe0008d01, 0x11dce: 0xe00046cd, + 0x11dd0: 0xe000a5fc, 0x11dd2: 0xe0004fbf, + 0x11dd4: 0xe00053d2, 0x11dd5: 0xe000a863, 0x11dd7: 0xe00065ac, + 0x11dd8: 0xe000658c, 0x11dda: 0xe00044c4, + 0x11de0: 0xe0008cbc, 0x11de1: 0xe00054d9, 0x11de2: 0xe0009b10, 0x11de3: 0xe0005599, + 0x11de5: 0xe00057fb, 0x11de6: 0xe0009313, 0x11de7: 0xe00044c7, + 0x11dec: 0xe0008414, 0x11ded: 0xe000a580, 0x11def: 0xe0006a83, + 0x11df1: 0xe0004220, 0x11df2: 0xe00094b8, + 0x11df4: 0xe000a58c, + 0x11dfa: 0xe0009cd9, + 0x11dfe: 0xe0007ebf, + // Block 0x478, offset 0x11e00 + 0x11e00: 0xe000633c, 0x11e02: 0xe0005b7a, + 0x11e04: 0xe0009c47, 0x11e07: 0xe000a25d, + 0x11e0a: 0xe0005950, + 0x11e0f: 0xe0005b4a, + 0x11e14: 0xe00057d3, + 0x11e18: 0xe0007871, 0x11e19: 0xe0009367, + 0x11e1d: 0xe0006fa0, + 0x11e22: 0xe00092fb, 0x11e23: 0xe0005970, + 0x11e24: 0xe0009b84, + 0x11e2a: 0xe0004bdb, 0x11e2b: 0xe000a590, + 0x11e2c: 0xe00057ff, 0x11e2f: 0xe0009070, + 0x11e32: 0xe0005126, + 0x11e36: 0xe00071bf, 0x11e37: 0xe0004823, + 0x11e38: 0xe000823f, 0x11e39: 0xe0004458, 0x11e3b: 0xe000499e, + 0x11e3d: 0xe0006394, 0x11e3e: 0xe0006408, 0x11e3f: 0xe0008b81, + // Block 0x479, offset 0x11e40 + 0x11e45: 0xe0004826, + 0x11e48: 0xe000a73c, 0x11e49: 0xe0006238, + 0x11e4d: 0xe0006d9b, 0x11e4e: 0xe0004bde, 0x11e4f: 0xe0006260, + 0x11e51: 0xe0004c83, + 0x11e54: 0xe0007906, 0x11e55: 0xe0009a32, 0x11e56: 0xe0007c85, 0x11e57: 0xe0009d69, + 0x11e5d: 0xe0009e56, 0x11e5e: 0xe00093af, + 0x11e62: 0xe0004310, 0x11e63: 0xe0006be4, + 0x11e66: 0xe00055f5, + 0x11e6c: 0xe00046d1, 0x11e6d: 0xe0007875, + 0x11e72: 0xe0004829, + 0x11e74: 0xe0008b85, 0x11e75: 0xe00088fd, 0x11e77: 0xe00067b9, + 0x11e78: 0xe00071c2, + 0x11e7e: 0xe0006e6c, + // Block 0x47a, offset 0x11e80 + 0x11e81: 0xe00056d6, 0x11e82: 0xe00059dc, 0x11e83: 0xe0009e47, + 0x11e85: 0xe000a73f, 0x11e87: 0xe00061a5, + 0x11e8c: 0xe0006a53, + 0x11e90: 0xe000696c, 0x11e91: 0xe0006340, + 0x11e97: 0xe00056b8, + 0x11e99: 0xe0005ba7, 0x11e9b: 0xe00048d2, + 0x11e9c: 0xe0006b1e, 0x11e9d: 0xe00041c9, 0x11e9f: 0xe00091fd, + 0x11ea1: 0xe000769b, + 0x11ea4: 0xe0004f63, 0x11ea5: 0xe00094bc, 0x11ea7: 0xe00067bc, + 0x11eab: 0xe000867a, + 0x11eac: 0xe000933f, 0x11eaf: 0xe0006b21, + 0x11eb0: 0xe00074d9, 0x11eb1: 0xe00086aa, 0x11eb2: 0xe00092ab, + 0x11eb7: 0xe0005346, + 0x11eb9: 0xe000640c, + 0x11ebc: 0xe00078eb, 0x11ebd: 0xe000740f, 0x11ebf: 0xe00082ab, + // Block 0x47b, offset 0x11ec0 + 0x11ec1: 0xe0006410, 0x11ec2: 0xe0005129, 0x11ec3: 0xe0008a25, + 0x11ec4: 0xe000608a, 0x11ec5: 0xe00058f2, 0x11ec6: 0xe0009d84, + 0x11eca: 0xe000646c, 0x11ecb: 0xe0006e70, + 0x11ecc: 0xe0008b89, 0x11ecf: 0xe0008dd9, + 0x11ed2: 0xe0005c2a, + 0x11ed7: 0xe0005084, + 0x11ee0: 0xe000614d, 0x11ee3: 0xe0005087, + 0x11ee5: 0xe0008566, 0x11ee6: 0xe000534a, + 0x11ee8: 0xe0009073, 0x11ee9: 0xe0008d04, + 0x11eec: 0xe00072e1, 0x11eed: 0xe000806a, + 0x11ef1: 0xe000a067, 0x11ef2: 0xe00054f4, + 0x11ef4: 0xe0007fea, + 0x11efa: 0xe0007e49, 0x11efb: 0xe0006264, + 0x11efc: 0xe0006268, 0x11efd: 0xe00055f9, 0x11eff: 0xe0007c88, + // Block 0x47c, offset 0x11f00 + 0x11f00: 0xe000832e, 0x11f03: 0xe00099a0, + 0x11f06: 0xe000490a, 0x11f07: 0xe00073d6, + 0x11f09: 0xe0006414, 0x11f0a: 0xe000a436, + 0x11f0c: 0xe00093b3, 0x11f0e: 0xe0005ffc, 0x11f0f: 0xe000a4d9, + 0x11f10: 0xe0006880, 0x11f11: 0xe0004fc3, 0x11f13: 0xe00079e7, + 0x11f14: 0xe0006e08, 0x11f15: 0xe000a89f, + 0x11f1b: 0xe00044e5, + 0x11f1e: 0xe000662c, 0x11f1f: 0xe0006fe0, + 0x11f20: 0xe0007b53, 0x11f21: 0xe000a2f1, + 0x11f24: 0xe0005a58, 0x11f25: 0xe00098fa, 0x11f27: 0xe0005f0f, + 0x11f28: 0xe000867e, 0x11f2b: 0xe0004d2b, + 0x11f2d: 0xe000705a, 0x11f2f: 0xe0007412, + 0x11f30: 0xe0009ffc, 0x11f31: 0xe000806e, + 0x11f34: 0xe0006117, 0x11f35: 0xe0005319, 0x11f36: 0xe00093b7, 0x11f37: 0xe0007d2e, + 0x11f3a: 0xe0006630, 0x11f3b: 0xe0007733, + // Block 0x47d, offset 0x11f40 + 0x11f41: 0xe0008d07, 0x11f42: 0xe0007415, 0x11f43: 0xe000a658, + 0x11f44: 0xe000a65c, + 0x11f48: 0xe0004c29, 0x11f49: 0xe0009111, 0x11f4b: 0xe0009115, + 0x11f4c: 0xe0006d24, 0x11f4e: 0xe000a539, 0x11f4f: 0xe000766f, + 0x11f59: 0xe0008f69, 0x11f5b: 0xe000a2a9, + 0x11f5d: 0xe0008eb6, 0x11f5e: 0xe000a940, 0x11f5f: 0xe0006fe4, + 0x11f61: 0xe0009eb9, 0x11f62: 0xe0008acd, + 0x11f64: 0xe0007c8b, 0x11f65: 0xe000a5d0, 0x11f66: 0xe000a6cd, 0x11f67: 0xe000a439, + 0x11f68: 0xe00074dd, 0x11f69: 0xe0005e43, 0x11f6b: 0xe0009b14, + 0x11f6c: 0xe000724f, 0x11f6e: 0xe0006688, 0x11f6f: 0xe00046d5, + 0x11f70: 0xe0006e34, 0x11f73: 0xe0006e0c, + 0x11f74: 0xe0009668, 0x11f76: 0xe0008b8d, 0x11f77: 0xe0004e97, + 0x11f78: 0xe0008b91, 0x11f7a: 0xe0009076, 0x11f7b: 0xe00076f7, + // Block 0x47e, offset 0x11f80 + 0x11f84: 0xe000a806, 0x11f87: 0xe0004181, + 0x11f88: 0xe000a7de, 0x11f89: 0xe000a83c, 0x11f8b: 0xe000628c, + 0x11f8c: 0xe0004edc, 0x11f8e: 0xe0007b57, + 0x11f90: 0xe00081b5, 0x11f91: 0xe0006d9e, + 0x11f96: 0xe00051c0, 0x11f97: 0xe00076db, + 0x11f98: 0xe0007879, + 0x11f9d: 0xe0006000, 0x11f9e: 0xe0004c2c, + 0x11fa0: 0xe000482c, 0x11fa2: 0xe00093bb, 0x11fa3: 0xe000512c, + 0x11fab: 0xe00086e6, + 0x11fac: 0xe0006f50, 0x11fae: 0xe000604b, + 0x11fb1: 0xe000531d, 0x11fb2: 0xe000874e, 0x11fb3: 0xe000a3f1, + 0x11fb4: 0xe0009edb, 0x11fb5: 0xe000a0a3, + 0x11fb8: 0xe0005bc8, 0x11fb9: 0xe0006f68, 0x11fbb: 0xe00046d9, + 0x11fbe: 0xe00055fd, 0x11fbf: 0xe000a96a, + // Block 0x47f, offset 0x11fc0 + 0x11fc0: 0xe00079aa, 0x11fc1: 0xe000512f, + 0x11fc4: 0xe0007b2b, 0x11fc5: 0xe0007b37, 0x11fc6: 0xe0005938, 0x11fc7: 0xe00053d6, + 0x11fc9: 0xe000a742, + 0x11fd3: 0xe0009ebc, + 0x11fd6: 0xe0007766, + 0x11fd9: 0xe0006da1, 0x11fda: 0xe00060e8, 0x11fdb: 0xe000a7e2, + 0x11fdc: 0xe0007ec2, 0x11fdd: 0xe0009edf, + 0x11fe0: 0xe0004b11, 0x11fe3: 0xe0007a9b, + 0x11fe6: 0xe000a943, + 0x11fe8: 0xe0005b4e, 0x11fe9: 0xe0005210, 0x11fea: 0xe0005772, + 0x11fec: 0xe0007183, 0x11fee: 0xe0007987, 0x11fef: 0xe0009790, + 0x11ff0: 0xe0007e41, 0x11ff2: 0xe00048d6, 0x11ff3: 0xe0007bef, + 0x11ff4: 0xe00046dd, 0x11ff7: 0xe00042bc, + 0x11ff8: 0xe0006da4, 0x11ff9: 0xe0008d0d, 0x11ffa: 0xe0008d0a, + 0x11ffc: 0xe0005e47, 0x11ffe: 0xe0009025, 0x11fff: 0xe0009697, + // Block 0x480, offset 0x12000 + 0x12000: 0xe0009802, 0x12003: 0xe000a6d0, + 0x12005: 0xe0004568, + 0x12008: 0xe0008186, 0x12009: 0xe0008242, 0x1200b: 0xe0006928, + 0x1200c: 0xe0006398, 0x1200d: 0xe00066d9, + 0x12014: 0xe0006bc4, 0x12015: 0xe0009201, 0x12017: 0xe000583b, + 0x1201b: 0xe0005ecb, + 0x1201d: 0xe0008d10, 0x1201e: 0xe000508a, 0x1201f: 0xe000508d, + 0x12023: 0xe000568d, + 0x12026: 0xe00060d8, 0x12027: 0xe0005b32, + 0x12028: 0xe00060a8, 0x1202a: 0xe00061ff, 0x1202b: 0xe0005e9f, + 0x1202c: 0xe0006729, 0x1202d: 0xe0009317, 0x1202e: 0xe000990a, + 0x12031: 0xe0008eb9, 0x12033: 0xe0009d58, + 0x12034: 0xe00062d4, 0x12036: 0xe0009ac3, + 0x1203a: 0xe0004e5b, + 0x1203d: 0xe000a78d, + // Block 0x481, offset 0x12040 + 0x12045: 0xe000803e, 0x12046: 0xe000424c, + 0x12049: 0xe0006c50, + 0x1204e: 0xe0005cfd, 0x1204f: 0xe000a1fe, + 0x12050: 0xe0008809, 0x12051: 0xe00097b0, 0x12053: 0xe0009ef7, + 0x12056: 0xe0008752, + 0x1205c: 0xe00056bb, 0x1205e: 0xe0005090, 0x1205f: 0xe00070f8, + 0x12060: 0xe0004410, + 0x1206a: 0xe0009745, + 0x1206c: 0xe0008156, 0x1206d: 0xe000a15b, 0x1206f: 0xe000649e, + 0x12070: 0xe000455c, 0x12071: 0xe0005649, 0x12072: 0xe0004883, 0x12073: 0xe000611a, + 0x12075: 0xe0008874, 0x12077: 0xe0009cdc, + 0x1207b: 0xe00052e5, + 0x1207c: 0xe00088b9, 0x1207e: 0xe0007150, 0x1207f: 0xe0009d2c, + // Block 0x482, offset 0x12080 + 0x12087: 0xe000696f, + 0x12089: 0xe0007e4d, 0x1208b: 0xe0006418, + 0x1208c: 0xe00068b4, 0x1208f: 0xe00051e8, + 0x12090: 0xe0006e10, 0x12093: 0xe00056be, + 0x12095: 0xe0009a5e, 0x12097: 0xe0005db1, + 0x12098: 0xe0007c2b, 0x12099: 0xe0007dc7, 0x1209a: 0xe0005f12, + 0x1209c: 0xe00049f0, 0x1209d: 0xe0009079, + 0x120af: 0xe000482f, + 0x120b0: 0xe0009e14, 0x120b2: 0xe0007454, 0x120b3: 0xe000907c, + 0x120b6: 0xe0004184, 0x120b7: 0xe0004187, + 0x120b8: 0xe0004c86, + 0x120be: 0xe0007418, + // Block 0x483, offset 0x120c0 + 0x120c1: 0xe0009ade, + 0x120c4: 0xe0006634, 0x120c5: 0xe0005305, + 0x120ca: 0xe0008e51, + 0x120cf: 0xe00064e0, + 0x120d0: 0xe000604e, 0x120d1: 0xe0004314, 0x120d2: 0xe0009a4e, 0x120d3: 0xe0007ad7, + 0x120d4: 0xe0008245, 0x120d7: 0xe0007168, + 0x120d8: 0xe000862c, 0x120d9: 0xe000a12b, 0x120da: 0xe0008248, + 0x120dd: 0xe0009b18, 0x120de: 0xe00086ae, 0x120df: 0xe00051fc, + 0x120e2: 0xe00088bc, + 0x120e9: 0xe0004c89, + 0x120ec: 0xe0004250, 0x120ef: 0xe000418a, + 0x120f0: 0xe000521d, 0x120f1: 0xe0008ebc, 0x120f3: 0xe0005c2d, + 0x120f4: 0xe000741b, 0x120f5: 0xe0009461, 0x120f6: 0xe0006b24, + 0x120f9: 0xe0007457, 0x120fb: 0xe0006b27, + 0x120fe: 0xe0008b95, + // Block 0x484, offset 0x12100 + 0x12103: 0xe000a6f7, + 0x12112: 0xe00072e5, 0x12113: 0xe00089a1, + 0x12116: 0xe0006da7, 0x12117: 0xe0005c94, + 0x1211d: 0xe0004ae9, 0x1211e: 0xe0004290, + 0x12121: 0xe0004be1, 0x12122: 0xe00064e4, + 0x1212a: 0xe0008ebf, + 0x1212e: 0xe00084ad, 0x1212f: 0xe0008072, + 0x12131: 0xe00049c2, 0x12132: 0xe0004886, + 0x12134: 0xe0008a29, + 0x12138: 0xe000a1ea, 0x12139: 0xe0004f67, 0x1213b: 0xe00074b9, + 0x1213c: 0xe00045b5, 0x1213d: 0xe000880c, + // Block 0x485, offset 0x12140 + 0x12140: 0xe0004560, 0x12141: 0xe000a15f, 0x12142: 0xe00047b1, 0x12143: 0xe000553c, + 0x12144: 0xe0004b35, 0x12146: 0xe0004b39, + 0x12148: 0xe0007673, 0x12149: 0xe000768b, + 0x1214e: 0xe00091c1, + 0x12150: 0xe000564d, 0x12151: 0xe0006cdc, 0x12153: 0xe000a5d4, + 0x12154: 0xe0005187, + 0x1216d: 0xe0009119, 0x1216f: 0xe0008c3d, + 0x12174: 0xe0006819, 0x12176: 0xe0009c66, 0x12177: 0xe0004224, + 0x1217e: 0xe0004dc3, 0x1217f: 0xe0004254, + // Block 0x486, offset 0x12180 + 0x12181: 0xe00058a1, 0x12183: 0xe0008c41, + 0x12185: 0xe0005f15, 0x12186: 0xe0006470, + 0x1218f: 0xe00048da, + 0x12193: 0xe000880f, + 0x12194: 0xe00099ba, 0x12197: 0xe00046e1, + 0x1219b: 0xe00051b3, + 0x1219d: 0xe0008d13, 0x1219f: 0xe000a745, + 0x121a0: 0xe000591c, 0x121a1: 0xe0007de5, 0x121a2: 0xe00096e2, 0x121a3: 0xe000757d, + 0x121a7: 0xe0007c8e, + 0x121a8: 0xe0005d00, + 0x121ad: 0xe0006b2a, 0x121af: 0xe0008c89, + 0x121b0: 0xe00047b4, 0x121b1: 0xe000490e, 0x121b3: 0xe000705d, + 0x121b5: 0xe0006550, 0x121b6: 0xe0006202, + // Block 0x487, offset 0x121c0 + 0x121c4: 0xe0005096, 0x121c5: 0xe0006638, + 0x121c9: 0xe0005fac, 0x121ca: 0xe0005132, 0x121cb: 0xe0005093, + 0x121cc: 0xe0009457, 0x121cd: 0xe0004912, + 0x121d0: 0xe00069e1, 0x121d2: 0xe0006749, + 0x121d5: 0xe0008e19, 0x121d6: 0xe0008c45, 0x121d7: 0xe0008d16, + 0x121d8: 0xe0004f37, 0x121da: 0xe000692c, + 0x121df: 0xe0005651, + 0x121e0: 0xe0005466, 0x121e3: 0xe00096b5, + 0x121e7: 0xe00086c6, + 0x121e8: 0xe00047b7, + 0x121ec: 0xe0004e37, 0x121ee: 0xe0006c54, + 0x121f2: 0xe0006daa, + 0x121f9: 0xe000553f, 0x121fa: 0xe0004a69, 0x121fb: 0xe00068b8, + 0x121fc: 0xe00068bc, + // Block 0x488, offset 0x12200 + 0x12200: 0xe0007de9, 0x12201: 0xe0004a45, + 0x12204: 0xe0008b31, 0x12205: 0xe0008417, + 0x1220b: 0xe00058cd, + 0x1220d: 0xe0007489, 0x1220e: 0xe0009826, + 0x12211: 0xe00069e4, 0x12212: 0xe00096e5, + 0x12219: 0xe0009407, + 0x12227: 0xe0006004, + 0x12230: 0xe0007812, + 0x12234: 0xe0005382, 0x12236: 0xe0008e55, + 0x12239: 0xe0009a82, + 0x1223d: 0xe0007a2f, 0x1223f: 0xe00098fe, + // Block 0x489, offset 0x12240 + 0x12242: 0xe0006b96, + 0x1224a: 0xe000787d, + 0x1224f: 0xe0004edf, + 0x12253: 0xe0009f48, + 0x12254: 0xe0006f18, 0x12255: 0xe0009ac6, 0x12257: 0xe0004524, + 0x12259: 0xe0006150, 0x1225a: 0xe00096e8, + 0x1225d: 0xe000599c, 0x1225e: 0xe0005ccc, + 0x12260: 0xe00051ec, 0x12261: 0xe000824b, 0x12262: 0xe000824e, 0x12263: 0xe0006205, + 0x12265: 0xe000815a, + 0x12268: 0xe0008b99, 0x1226a: 0xe0008b35, 0x1226b: 0xe0009009, + 0x1226c: 0xe00042e0, 0x1226d: 0xe000799b, 0x1226e: 0xe0008877, 0x1226f: 0xe00072e9, + 0x12273: 0xe0005f30, + 0x12275: 0xe0004f3b, 0x12277: 0xe000a1a7, + 0x12278: 0xe0009829, 0x12279: 0xe0007b5b, + // Block 0x48a, offset 0x12280 + 0x1228e: 0xe00041cc, + 0x12291: 0xe000681c, + 0x12294: 0xe0005857, 0x12295: 0xe0007f66, + 0x12298: 0xe0004d2e, 0x1229b: 0xe000911d, + 0x1229c: 0xe000641c, 0x1229f: 0xe0008836, + 0x122a4: 0xe000456c, 0x122a5: 0xe000a660, 0x122a6: 0xe0004294, 0x122a7: 0xe0006972, + 0x122ad: 0xe0006b99, 0x122ae: 0xe0007b5f, + 0x122b0: 0xe00090c1, 0x122b1: 0xe000980b, + 0x122b4: 0xe0005c30, 0x122b7: 0xe0004c2f, + 0x122bb: 0xe0009bc4, + 0x122bc: 0xe000a12f, 0x122be: 0xe000496a, + // Block 0x48b, offset 0x122c0 + 0x122c0: 0xe0004889, 0x122c1: 0xe0004832, 0x122c3: 0xe0006344, + 0x122c7: 0xe0008a2d, + 0x122ca: 0xe0006bc8, 0x122cb: 0xe0004c8c, + 0x122cc: 0xe0009c89, 0x122cd: 0xe00093bf, 0x122ce: 0xe000927e, + 0x122d0: 0xe0004b87, 0x122d3: 0xe00049c6, + 0x122e5: 0xe000a40c, 0x122e6: 0xe0007fb2, 0x122e7: 0xe000936b, + 0x122e8: 0xe0004a39, 0x122e9: 0xe0004482, 0x122ea: 0xe000445b, + 0x122ed: 0xe0006d5c, + 0x122f2: 0xe00048ee, + 0x122f9: 0xe000488c, 0x122fb: 0xe0004eaf, + 0x122fd: 0xe0008d19, 0x122ff: 0xe0004f6b, + // Block 0x48c, offset 0x12300 + 0x12300: 0xe0008949, 0x12302: 0xe000761b, + 0x12305: 0xe0008e59, + 0x1230a: 0xe00064fc, 0x1230b: 0xe0009c7e, + 0x12311: 0xe00058a5, 0x12312: 0xe00062b8, 0x12313: 0xe0005bf4, + 0x12314: 0xe00070c3, 0x12317: 0xe000887a, + 0x12319: 0xe0009efa, 0x1231b: 0xe0004ee2, + 0x1231e: 0xe000982c, 0x1231f: 0xe0008756, + 0x12321: 0xe0006051, 0x12323: 0xe0007881, + 0x1232b: 0xe0004611, + 0x12335: 0xe00096eb, + 0x12338: 0xe00062d8, 0x12339: 0xe00071c5, 0x1233a: 0xe000a556, 0x1233b: 0xe0004e7f, + 0x1233d: 0xe0008f6d, + // Block 0x48d, offset 0x12340 + 0x12343: 0xe0006540, + 0x12344: 0xe0004318, 0x12347: 0xe0009982, + 0x12348: 0xe0007ec5, 0x1234a: 0xe0005c51, 0x1234b: 0xe0004be4, + 0x12350: 0xe0009b38, 0x12352: 0xe000808e, 0x12353: 0xe00072ed, + 0x12358: 0xe0004f23, 0x12359: 0xe0005714, 0x1235a: 0xe00072c5, + 0x1235f: 0xe0005099, + 0x12361: 0xe0006ce0, 0x12362: 0xe0009ae1, + 0x12366: 0xe0005691, + 0x1236b: 0xe000a71f, + 0x12375: 0xe0006c14, + 0x1237f: 0xe0004414, + // Block 0x48e, offset 0x12380 + 0x12380: 0xe000534e, + 0x12384: 0xe00045b9, + 0x12389: 0xe0008b9d, + 0x1238d: 0xe000791b, 0x1238e: 0xe0004fc7, + 0x12390: 0xe0009614, + 0x12394: 0xe000548a, 0x12397: 0xe0006590, + 0x1239c: 0xe000a6d3, 0x1239d: 0xe0009015, 0x1239f: 0xe00041cf, + 0x123a0: 0xe0004761, 0x123a2: 0xe000457c, 0x123a3: 0xe000875a, + 0x123ae: 0xe000559c, + 0x123b3: 0xe0006a57, + 0x123b6: 0xe0007b0f, + 0x123bb: 0xe000a0d7, + 0x123bc: 0xe0008386, 0x123bf: 0xe0007b0b, + // Block 0x48f, offset 0x123c0 + 0x123c2: 0xe0005542, 0x123c3: 0xe0004e5e, + 0x123d3: 0xe0005a9a, + 0x123da: 0xe00058f5, 0x123db: 0xe0009001, + 0x123dc: 0xe000488f, 0x123dd: 0xe00055e5, 0x123de: 0xe0007a9f, 0x123df: 0xe0005954, + 0x123ea: 0xe0005958, + 0x123ec: 0xe0009a3a, + 0x123f6: 0xe000a249, + 0x123fb: 0xe00077e0, + 0x123fc: 0xe0009618, + // Block 0x490, offset 0x12400 + 0x12402: 0xe0006310, 0x12403: 0xe000936f, + 0x12404: 0xe00057b3, + 0x1240a: 0xe0004e23, + 0x1240c: 0xe000875e, + 0x12411: 0xe00092ff, 0x12412: 0xe00057b7, + 0x12416: 0xe0005803, + 0x1241e: 0xe0005a5c, + 0x12420: 0xe000a8eb, 0x12421: 0xe000925a, 0x12423: 0xe000a8a3, + 0x1242c: 0xe000a1ce, + 0x12432: 0xe0007f26, + 0x12437: 0xe000a96d, + 0x12438: 0xe0007790, 0x12439: 0xe0008447, 0x1243a: 0xe000509c, 0x1243b: 0xe000a7fa, + 0x1243d: 0xe000a8ef, 0x1243e: 0xe0004a6d, 0x1243f: 0xe000435c, + // Block 0x491, offset 0x12440 + 0x12443: 0xe0006c8c, + 0x12446: 0xe000a8f3, 0x12447: 0xe000a261, + 0x12449: 0xe0004681, + 0x1244c: 0xe000418d, 0x1244e: 0xe0009b6c, + 0x12450: 0xe0004c8f, + 0x12454: 0xe000a242, + 0x12459: 0xe000a90f, 0x1245a: 0xe0006ee8, 0x1245b: 0xe0004360, + 0x1245f: 0xe00079ba, + 0x12460: 0xe00095cc, 0x12461: 0xe000a5cc, 0x12462: 0xe000907f, 0x12463: 0xe0008ba1, + 0x12464: 0xe000925d, 0x12465: 0xe000668b, 0x12466: 0xe0006153, 0x12467: 0xe0005135, + 0x1246a: 0xe0007e6b, + 0x12472: 0xe000701e, + 0x12477: 0xe000593c, + 0x12478: 0xe0004e9a, 0x1247b: 0xe0006b2d, + 0x1247f: 0xe00060cc, + // Block 0x492, offset 0x12480 + 0x12480: 0xe0007f0a, 0x12482: 0xe0008d91, 0x12483: 0xe0007737, + 0x12484: 0xe0009121, 0x12486: 0xe0009c03, + 0x12489: 0xe00072f1, 0x1248a: 0xe00071c8, + 0x1248d: 0xe0009f24, + 0x12491: 0xe0005047, + 0x12496: 0xe000748d, + 0x12498: 0xe00086ca, + 0x1249e: 0xe0008092, + 0x124a2: 0xe00096b8, + 0x124a4: 0xe0006d28, + 0x124ab: 0xe0009b88, + 0x124ad: 0xe0004418, 0x124ae: 0xe00059e0, 0x124af: 0xe0006a5b, + 0x124b2: 0xe0006f6c, 0x124b3: 0xe0007252, + 0x124b5: 0xe0005352, 0x124b7: 0xe0008362, + 0x124ba: 0xe0006c40, + 0x124bc: 0xe00041f8, 0x124bd: 0xe000a763, 0x124bf: 0xe00089a5, + // Block 0x493, offset 0x124c0 + 0x124c1: 0xe000a824, + 0x124c4: 0xe00045d1, 0x124c5: 0xe000841a, 0x124c6: 0xe0004c92, + 0x124cb: 0xe0006156, + 0x124cd: 0xe0006054, 0x124cf: 0xe0005f18, + 0x124d2: 0xe00055bd, 0x124d3: 0xe00082fa, + 0x124d4: 0xe0006975, 0x124d6: 0xe0006978, 0x124d7: 0xe000697b, + 0x124d8: 0xe000697e, 0x124da: 0xe0009373, 0x124db: 0xe0006057, + 0x124eb: 0xe000a43c, + 0x124ec: 0xe0004c95, 0x124ef: 0xe000541e, + 0x124f3: 0xe0009985, + 0x124ff: 0xe0006c34, + // Block 0x494, offset 0x12500 + 0x12505: 0xe000940b, + 0x12508: 0xe00089a9, + 0x1250f: 0xe00075a5, + 0x12510: 0xe00088bf, 0x12511: 0xe000626c, 0x12513: 0xe0005f6c, + 0x1251b: 0xe00068c0, + 0x12523: 0xe000509f, + 0x12524: 0xe000853e, + 0x12533: 0xe0007d32, + 0x12534: 0xe00071cb, 0x12537: 0xe0006ab7, + 0x12538: 0xe0007b63, + 0x1253e: 0xe0006554, 0x1253f: 0xe0004e82, + // Block 0x495, offset 0x12540 + 0x12540: 0xe0008ba5, 0x12541: 0xe000900d, 0x12542: 0xe0004c98, 0x12543: 0xe0009d5c, + 0x1254b: 0xe00086b2, + 0x1254e: 0xe0006558, 0x1254f: 0xe00054f7, + 0x12550: 0xe0006e14, 0x12552: 0xe0005eef, + 0x12554: 0xe000a8db, 0x12555: 0xe0006be8, 0x12557: 0xe000a06b, + 0x12559: 0xe0007cd0, 0x1255a: 0xe0007c91, 0x1255b: 0xe0007529, + 0x1255c: 0xe0006b9c, 0x1255d: 0xe00079bd, 0x1255e: 0xe000a519, 0x1255f: 0xe00043c0, + 0x12560: 0xe0009082, + 0x12568: 0xe000495e, 0x1256a: 0xe0007e51, + 0x1256d: 0xe0007bf2, + 0x12570: 0xe0009c06, 0x12572: 0xe000500f, + 0x12574: 0xe0009d48, 0x12576: 0xe00061a9, + 0x1257a: 0xe0004639, + 0x1257d: 0xe00050a2, 0x1257e: 0xe0006884, + // Block 0x496, offset 0x12580 + 0x12581: 0xe0007565, 0x12582: 0xe00050a5, 0x12583: 0xe0007cfe, + 0x12584: 0xe00080be, 0x12585: 0xe0008116, 0x12586: 0xe000a163, 0x12587: 0xe0007a33, + 0x12588: 0xe0009a62, 0x12589: 0xe0009a86, + 0x1258c: 0xe0005601, 0x1258d: 0xe000a4a5, + 0x12590: 0xe00060ac, 0x12592: 0xe00060d0, 0x12593: 0xe000543a, + 0x12594: 0xe0005fb0, 0x12595: 0xe00061e5, 0x12596: 0xe000991e, + 0x12598: 0xe00069e7, 0x12599: 0xe0006b30, 0x1259a: 0xe0009085, 0x1259b: 0xe0009d6c, + 0x125ab: 0xe0005ea3, + 0x125ac: 0xe0005f33, 0x125ae: 0xe000887d, + 0x125b0: 0xe0009b3c, 0x125b1: 0xe0009ae4, 0x125b3: 0xe0009fff, + 0x125b8: 0xe0006981, 0x125b9: 0xe0008251, 0x125bb: 0xe00099bd, + 0x125bc: 0xe0007060, 0x125bd: 0xe0004835, 0x125be: 0xe00095e8, 0x125bf: 0xe0007a37, + // Block 0x497, offset 0x125c0 + 0x125c1: 0xe000a664, 0x125c2: 0xe000a395, + 0x125c4: 0xe0006f1c, 0x125c5: 0xe0007255, 0x125c6: 0xe000857a, + 0x125c9: 0xe0009514, 0x125ca: 0xe00062dc, + 0x125cc: 0xe0009f95, + 0x125d0: 0xe0005cb4, 0x125d1: 0xe00082ae, 0x125d3: 0xe000a51d, + 0x125d4: 0xe0004364, 0x125d5: 0xe0006578, 0x125d7: 0xe0006b33, + 0x125d9: 0xe0009e28, 0x125da: 0xe000862f, 0x125db: 0xe000655c, + 0x125dc: 0xe00090c4, 0x125dd: 0xe00070c6, + 0x125e0: 0xe0005a60, 0x125e1: 0xe0009e86, 0x125e2: 0xe0009cdf, 0x125e3: 0xe00083de, + 0x125e5: 0xe00052fc, + 0x125e8: 0xe0008ec2, 0x125eb: 0xe000a2ad, + 0x125ee: 0xe0006348, 0x125ef: 0xe0006270, + 0x125f0: 0xe0009c09, 0x125f1: 0xe000774b, 0x125f3: 0xe0007b67, + // Block 0x498, offset 0x12600 + 0x12604: 0xe000a6fa, 0x12607: 0xe0008542, + 0x1260a: 0xe0009558, 0x1260b: 0xe0007885, + 0x1260c: 0xe00059c0, + 0x12611: 0xe000668e, 0x12612: 0xe0007033, + 0x12617: 0xe0007021, + 0x12619: 0xe00071ce, 0x1261b: 0xe0005787, + 0x1261e: 0xe0005655, 0x1261f: 0xe00084b0, + 0x12625: 0xe0009125, 0x12627: 0xe0008254, + 0x12629: 0xe0006f20, 0x1262a: 0xe000a521, 0x1262b: 0xe000a28d, + 0x1262c: 0xe0007114, 0x1262e: 0xe000559f, + 0x12632: 0xe0008ec5, + 0x12635: 0xe00072f5, 0x12636: 0xe000a88b, + 0x12638: 0xe0004b15, 0x12639: 0xe000811a, 0x1263a: 0xe000602c, 0x1263b: 0xe000a624, + 0x1263c: 0xe0007dca, 0x1263d: 0xe000a903, 0x1263e: 0xe0009ce2, + // Block 0x499, offset 0x12640 + 0x12641: 0xe0005c33, + 0x12659: 0xe0008ab5, 0x1265a: 0xe0008f71, + 0x1265c: 0xe0006a5f, + 0x12661: 0xe00063d8, 0x12663: 0xe0007ded, + 0x12664: 0xe0004bb6, 0x12665: 0xe00083ee, 0x12666: 0xe0009e89, 0x12667: 0xe0007bbf, + 0x12669: 0xe000a43f, 0x1266a: 0xe000583f, + 0x1266c: 0xe0005d03, 0x1266e: 0xe00067bf, + 0x12674: 0xe0007f2a, 0x12677: 0xe000a1aa, + 0x12678: 0xe0009a66, 0x12679: 0xe000a349, + 0x1267f: 0xe0009d6f, + // Block 0x49a, offset 0x12680 + 0x12682: 0xe00055a2, + 0x12685: 0xe0007ac3, 0x12687: 0xe00046e5, + 0x12688: 0xe0007063, 0x12689: 0xe0006fa4, + 0x1268c: 0xe0007f6a, 0x1268d: 0xe000a748, 0x1268e: 0xe0007a3b, + 0x12691: 0xe00070fc, 0x12693: 0xe0007a3f, + 0x12694: 0xe00086fa, 0x12695: 0xe000969a, 0x12696: 0xe0005d3f, + 0x126aa: 0xe000681f, 0x126ab: 0xe0004a9d, + 0x126af: 0xe0007769, + 0x126b2: 0xe00077c0, + 0x126b4: 0xe0007e39, 0x126b5: 0xe000a0db, 0x126b7: 0xe0005695, + 0x126b8: 0xe000a7a5, + 0x126bc: 0xe00058d1, 0x126bf: 0xe0009b40, + // Block 0x49b, offset 0x126c0 + 0x126c0: 0xe0008ba9, 0x126c3: 0xe0004e27, + 0x126c4: 0xe00099c0, 0x126c5: 0xe0006e18, 0x126c6: 0xe000a74b, 0x126c7: 0xe00050a8, + 0x126c8: 0xe0004de3, 0x126cb: 0xe0005db5, + 0x126cf: 0xe000a442, + 0x126d1: 0xe0007299, 0x126d2: 0xe0009491, + 0x126d6: 0xe00052c3, + 0x126d8: 0xe0005545, 0x126d9: 0xe0008e1d, 0x126da: 0xe0005bf7, + 0x126dd: 0xe00069ea, 0x126de: 0xe0007154, + 0x126e0: 0xe00069ed, 0x126e1: 0xe00053da, 0x126e2: 0xe0007a07, + 0x126e4: 0xe0007909, 0x126e5: 0xe0005b12, 0x126e6: 0xe0004368, + 0x126e8: 0xe0008bad, 0x126ea: 0xe0005c7c, 0x126eb: 0xe00083b2, + 0x126ec: 0xe0007388, 0x126ee: 0xe000a6d6, + 0x126f1: 0xe0007569, 0x126f3: 0xe00072f9, + 0x126f5: 0xe0007a43, 0x126f6: 0xe000587b, 0x126f7: 0xe000a4dd, + 0x126f8: 0xe000966c, 0x126f9: 0xe000797b, 0x126fa: 0xe0009518, 0x126fb: 0xe00095ec, + 0x126fc: 0xe000612c, + // Block 0x49c, offset 0x12700 + 0x12717: 0xe0006c58, + 0x12719: 0xe000a5d8, 0x1271a: 0xe0008880, 0x1271b: 0xe000431c, + 0x1271d: 0xe0009cb0, 0x1271f: 0xe0008bb1, + 0x12720: 0xe00044ca, 0x12721: 0xe0005548, 0x12723: 0xe0006b36, + 0x12724: 0xe00063b4, 0x12725: 0xe000761f, 0x12726: 0xe0007da6, + 0x12728: 0xe0007e8c, 0x1272b: 0xe0006f24, + 0x1272c: 0xe0009998, 0x1272d: 0xe00081b8, 0x1272f: 0xe000a167, + 0x12732: 0xe0006e74, + 0x12734: 0xe00042c0, 0x12736: 0xe0007b6b, 0x12737: 0xe0007aa3, + 0x12738: 0xe0008257, 0x1273a: 0xe000611d, + 0x1273c: 0xe0006208, 0x1273d: 0xe0008812, 0x1273e: 0xe000a4e1, + // Block 0x49d, offset 0x12740 + 0x12743: 0xe00064a1, + 0x12744: 0xe000620b, 0x12745: 0xe00059a0, + 0x1274a: 0xe0008ec8, + 0x1274d: 0xe0005356, 0x1274e: 0xe0005fd0, + 0x12751: 0xe0006de6, 0x12753: 0xe00068c4, + 0x12754: 0xe0008a31, 0x12756: 0xe000a445, + 0x12758: 0xe0006ce4, 0x1275b: 0xe00053de, + 0x1275c: 0xe0007491, 0x1275e: 0xe0008bb5, 0x1275f: 0xe000a668, + 0x12763: 0xe0006290, + 0x12767: 0xe0007f6e, + 0x1276b: 0xe000982f, + 0x1276e: 0xe000850e, 0x1276f: 0xe0009bdc, + 0x12772: 0xe000811e, 0x12773: 0xe00051f0, + 0x1277a: 0xe0006691, + // Block 0x49e, offset 0x12780 + 0x1278f: 0xe000548e, + 0x12790: 0xe0008122, + 0x12795: 0xe00060ec, 0x12796: 0xe0008f75, + 0x12798: 0xe000a133, + 0x1279c: 0xe0005c36, 0x1279d: 0xe0004c9b, 0x1279f: 0xe0006008, + 0x127a2: 0xe000856a, + 0x127a5: 0xe00067c2, 0x127a7: 0xe0005c9c, + 0x127aa: 0xe00047ba, 0x127ab: 0xe0007d0e, + 0x127af: 0xe0007066, + 0x127b1: 0xe0009129, 0x127b2: 0xe0007258, + 0x127b5: 0xe000838a, 0x127b6: 0xe0007f72, 0x127b7: 0xe000a4f5, + 0x127ba: 0xe0005315, + 0x127bd: 0xe0007f3a, + // Block 0x49f, offset 0x127c0 + 0x127c2: 0xe0006420, 0x127c3: 0xe0007d8a, + 0x127c4: 0xe00093c3, 0x127c5: 0xe0005fe0, + 0x127c8: 0xe000a4a8, 0x127c9: 0xe000a66c, 0x127cb: 0xe00085f0, + 0x127cc: 0xe00094c0, 0x127ce: 0xe000a399, + 0x127d1: 0xe000a628, 0x127d3: 0xe0008815, + 0x127d4: 0xe000554b, 0x127d5: 0xe000573c, + 0x127d9: 0xe000a6fd, + 0x127ec: 0xe000a4ab, 0x127ed: 0xe0009fb9, 0x127ef: 0xe000969d, + 0x127f4: 0xe0008901, 0x127f5: 0xe00062bc, 0x127f7: 0xe0005ac7, + 0x127f8: 0xe000a448, + 0x127fe: 0xe0004916, 0x127ff: 0xe0005e4b, + // Block 0x4a0, offset 0x12800 + 0x12801: 0xe00078ee, 0x12802: 0xe0009efd, + 0x12804: 0xe0007793, 0x12806: 0xe0009a52, + 0x12809: 0xe0005b16, + 0x1280c: 0xe0004fa3, 0x1280f: 0xe0005bfa, + 0x12811: 0xe000445e, 0x12813: 0xe0005d42, + 0x12814: 0xe0007a47, 0x12815: 0xe0008d1c, + 0x12819: 0xe0005386, 0x1281a: 0xe0004d31, + 0x12820: 0xe0005e0f, 0x12822: 0xe000a06f, 0x12823: 0xe0005974, + 0x1282a: 0xe000844a, 0x1282b: 0xe0005e4f, + 0x1282c: 0xe0009088, 0x1282d: 0xe0005ef3, + 0x12830: 0xe0006940, 0x12831: 0xe00071d1, 0x12832: 0xe00093c7, 0x12833: 0xe00087ca, + 0x12838: 0xe0008ae1, + 0x1283c: 0xe000980e, 0x1283e: 0xe00078bd, 0x1283f: 0xe0008762, + // Block 0x4a1, offset 0x12840 + 0x12841: 0xe0007b6f, + 0x1284f: 0xe000833a, + 0x12851: 0xe00063b8, + 0x12854: 0xe000463d, 0x12857: 0xe000920d, + 0x12858: 0xe000634c, 0x12859: 0xe0004ee5, 0x1285a: 0xe000729d, 0x1285b: 0xe00086ea, + 0x1285c: 0xe00086fe, 0x1285d: 0xe000a913, 0x1285e: 0xe0005a9d, 0x1285f: 0xe0006e1c, + 0x12861: 0xe0005619, 0x12862: 0xe000a670, + 0x12864: 0xe0008316, 0x12866: 0xe0005bcb, + 0x1286d: 0xe00053e2, 0x1286e: 0xe0008d1f, 0x1286f: 0xe0007581, + 0x12870: 0xe0004e61, + 0x12874: 0xe00088c2, + 0x12878: 0xe0006c18, 0x1287a: 0xe00086ce, + 0x1287c: 0xe0005659, 0x1287d: 0xe0006694, 0x1287e: 0xe0005d61, + // Block 0x4a2, offset 0x12880 + 0x12881: 0xe0006c78, 0x12882: 0xe0009235, + 0x12884: 0xe0009231, 0x12886: 0xe0007f0d, + 0x12888: 0xe00095a4, 0x12889: 0xe000436c, 0x1288b: 0xe000a727, + 0x1288c: 0xe000745a, 0x1288d: 0xe0008ecb, 0x1288e: 0xe0009d94, + 0x12890: 0xe0008096, 0x12892: 0xe000a53d, + 0x12894: 0xe000a44b, 0x12897: 0xe0004258, + 0x12898: 0xe0006c1c, + 0x1289f: 0xe0005cc4, + 0x128a1: 0xe0008d94, 0x128a3: 0xe000a073, + 0x128a4: 0xe0009c37, 0x128a7: 0xe0005a7f, + 0x128a8: 0xe0006de9, + 0x128ae: 0xe000a6d9, 0x128af: 0xe00092b3, + 0x128b1: 0xe00089ad, 0x128b3: 0xe0007c94, + 0x128b6: 0xe0008a35, + 0x128b9: 0xe00053e6, + 0x128be: 0xe00053a2, + // Block 0x4a3, offset 0x128c0 + 0x128c0: 0xe00045bd, 0x128c1: 0xe0009b1c, 0x128c2: 0xe00059e4, 0x128c3: 0xe0005295, + 0x128c6: 0xe00068c8, 0x128c7: 0xe0006d60, + 0x128c9: 0xe000725b, 0x128ca: 0xe0007bf5, + 0x128d5: 0xe000739e, + 0x128d8: 0xe000526d, 0x128da: 0xe0007b73, 0x128db: 0xe00060f0, + 0x128de: 0xe00069f0, 0x128df: 0xe0008c8c, + 0x128e0: 0xe000a44e, 0x128e1: 0xe000825a, + 0x128e4: 0xe000554e, + 0x128e9: 0xe000a451, 0x128eb: 0xe0005807, + 0x128ec: 0xe0008f79, 0x128ee: 0xe0006711, 0x128ef: 0xe0009b20, + 0x128f1: 0xe0006a63, 0x128f3: 0xe0008702, + 0x128f4: 0xe0007bc3, + 0x128fa: 0xe000955c, + 0x128fe: 0xe00058f8, + // Block 0x4a4, offset 0x12900 + 0x12901: 0xe0007889, + 0x12905: 0xe000a39d, 0x12906: 0xe00055c1, 0x12907: 0xe0007e5d, + 0x12909: 0xe0006b39, 0x1290b: 0xe000756d, + 0x1290f: 0xe0005c39, + 0x12911: 0xe0009ee3, 0x12912: 0xe0006d64, 0x12913: 0xe0009239, + 0x12915: 0xe0006a67, + 0x12918: 0xe0005aa0, 0x1291a: 0xe000a077, 0x1291b: 0xe0007b77, + 0x1291c: 0xe0008346, 0x1291d: 0xe0005940, 0x1291e: 0xe0008bb9, 0x1291f: 0xe0007069, + 0x12923: 0xe000a1ad, + 0x12926: 0xe00088c5, 0x12927: 0xe0005b36, + 0x12928: 0xe0005b65, + 0x1292f: 0xe0007b7b, + 0x12930: 0xe000623b, 0x12932: 0xe00059f0, + 0x12937: 0xe00084c2, + 0x12938: 0xe000961c, + 0x1293c: 0xe00078c1, 0x1293e: 0xe00057bb, + // Block 0x4a5, offset 0x12940 + 0x12944: 0xe0006fb4, + 0x1294c: 0xe0004a71, 0x1294e: 0xe0007b13, + 0x12950: 0xe000a3a1, 0x12951: 0xe0007177, 0x12953: 0xe00057d7, + 0x12958: 0xe0009b70, + 0x1295d: 0xe000a454, 0x1295e: 0xe0009d06, + 0x12963: 0xe0005e53, + 0x12969: 0xe0007b17, 0x1296b: 0xe000a559, + 0x1296f: 0xe0008c49, + 0x12970: 0xe000a6dc, + 0x12978: 0xe0004c9e, + 0x1297c: 0xe0008682, 0x1297d: 0xe0008818, 0x1297e: 0xe0008839, + // Block 0x4a6, offset 0x12980 + 0x12981: 0xe0005138, + 0x12985: 0xe00046e9, 0x12986: 0xe00061d9, + 0x1298a: 0xe0009964, + 0x1298e: 0xe0007adb, + 0x12992: 0xe00096ee, + 0x12995: 0xe000a183, + 0x12998: 0xe000a8a7, 0x12999: 0xe00085f3, 0x1299a: 0xe0004b19, + 0x129a1: 0xe0008bbd, + 0x129a4: 0xe000706c, + 0x129ab: 0xe000a2b1, + 0x129ac: 0xe00044cd, 0x129ad: 0xe0009b74, 0x129ae: 0xe0009ebf, 0x129af: 0xe000a3a5, + 0x129b0: 0xe0009ec2, 0x129b3: 0xe000663c, + 0x129b7: 0xe0008ece, + 0x129b8: 0xe0008686, 0x129b9: 0xe0008ae5, + // Block 0x4a7, offset 0x129c0 + 0x129c8: 0xe00059c4, 0x129ca: 0xe00078c5, 0x129cb: 0xe000a857, + 0x129cf: 0xe0007c97, + 0x129d3: 0xe00047e4, + 0x129d8: 0xe000a525, 0x129d9: 0xe000578b, + 0x129dc: 0xe000a812, 0x129dd: 0xe000902d, 0x129df: 0xe0007a4b, + 0x129f1: 0xe00046ed, + 0x129f9: 0xe0009d98, + 0x129fd: 0xe000674d, + // Block 0x4a8, offset 0x12a00 + 0x12a04: 0xe000a7ca, + 0x12a09: 0xe0007933, + 0x12a0c: 0xe0008f7d, + 0x12a19: 0xe00064a4, 0x12a1a: 0xe0006888, + 0x12a1c: 0xe000a4f9, 0x12a1e: 0xe0005605, + 0x12a20: 0xe000738b, 0x12a21: 0xe0006159, + 0x12a26: 0xe00096f1, + 0x12a2d: 0xe0004769, 0x12a2e: 0xe000a8bb, 0x12a2f: 0xe00086b6, + 0x12a30: 0xe0007adf, 0x12a31: 0xe000a291, + 0x12a36: 0xe0007a4f, + // Block 0x4a9, offset 0x12a40 + 0x12a46: 0xe000a023, 0x12a47: 0xe000a83f, + 0x12a49: 0xe0005978, 0x12a4a: 0xe000a80a, + 0x12a4c: 0xe000a674, 0x12a4e: 0xe00089b1, + 0x12a50: 0xe0007b7f, 0x12a52: 0xe00081eb, + 0x12a56: 0xe00051c4, 0x12a57: 0xe00051d0, + 0x12a59: 0xe0007a53, + 0x12a5c: 0xe0008076, 0x12a5e: 0xe0006c44, + 0x12a62: 0xe0004765, + 0x12a64: 0xe0005f1b, 0x12a65: 0xe000a5dc, 0x12a66: 0xe000a790, 0x12a67: 0xe0008d22, + 0x12a68: 0xe0007e8f, 0x12a69: 0xe0006500, + 0x12a6c: 0xe000788d, 0x12a6e: 0xe00085f6, + 0x12a7d: 0xe0006e78, + // Block 0x4aa, offset 0x12a80 + 0x12a80: 0xe0007b3b, + 0x12a84: 0xe0007495, 0x12a85: 0xe0007d36, 0x12a87: 0xe000a766, + 0x12a89: 0xe000809a, 0x12a8a: 0xe00080de, + 0x12a8f: 0xe000a7ce, + 0x12a92: 0xe000a3a9, + 0x12a94: 0xe0007f76, + 0x12a99: 0xe000a946, 0x12a9b: 0xe0009f27, + 0x12a9f: 0xe00072a1, + 0x12aa0: 0xe00073b6, 0x12aa2: 0xe0006751, + 0x12aa4: 0xe00084de, + 0x12aa8: 0xe00081ee, + 0x12aac: 0xe0007c9a, 0x12aaf: 0xe0006eec, + 0x12ab1: 0xe0007ac7, 0x12ab2: 0xe000476d, + 0x12ab9: 0xe000a949, 0x12aba: 0xe000a94c, + 0x12abe: 0xe00099c3, + // Block 0x4ab, offset 0x12ac0 + 0x12ac1: 0xe0007b2f, 0x12ac3: 0xe0007a57, + 0x12ac8: 0xe0005718, 0x12ac9: 0xe0005609, 0x12acb: 0xe0009748, + 0x12ace: 0xe0005baa, + 0x12ad0: 0xe0005d65, 0x12ad2: 0xe000706f, + 0x12ad4: 0xe0006504, 0x12ad5: 0xe0007a5b, 0x12ad6: 0xe0007585, + 0x12ad9: 0xe0009be4, + 0x12adf: 0xe0007b83, + 0x12ae0: 0xe0008086, + 0x12ae5: 0xe0008d25, 0x12ae6: 0xe00092b7, 0x12ae7: 0xe00071d4, + 0x12aec: 0xe000a827, 0x12aed: 0xe0009780, 0x12aee: 0xe0006fa8, + 0x12af9: 0xe000a970, 0x12afb: 0xe000a7d2, + 0x12afc: 0xe00074e1, 0x12afe: 0xe0005551, 0x12aff: 0xe0007ec8, + // Block 0x4ac, offset 0x12b00 + 0x12b00: 0xe000a27d, + 0x12b06: 0xe0009ee7, 0x12b07: 0xe0006f54, + 0x12b0b: 0xe000a7e6, + 0x12b0c: 0xe0004b3d, 0x12b0d: 0xe0006bcc, + 0x12b10: 0xe0005aa3, + 0x12b14: 0xe000a973, 0x12b17: 0xe0007b3f, + 0x12b1a: 0xe000783d, 0x12b1b: 0xe00057bf, + 0x12b1f: 0xe0004aa1, + 0x12b25: 0xe0009794, + 0x12b28: 0xe0009303, 0x12b2a: 0xe0008d28, + 0x12b2c: 0xe0009ce5, 0x12b2d: 0xe000883f, + 0x12b30: 0xe0008126, 0x12b32: 0xe00081bb, + 0x12b35: 0xe000868a, 0x12b36: 0xe00067c5, + 0x12b38: 0xe0009d09, 0x12b39: 0xe0005327, 0x12b3a: 0xe0007815, 0x12b3b: 0xe000a74e, + 0x12b3d: 0xe0006ce8, 0x12b3e: 0xe0008474, + // Block 0x4ad, offset 0x12b40 + 0x12b40: 0xe0006cec, 0x12b42: 0xe00087ce, + 0x12b46: 0xe0008766, 0x12b47: 0xe0009dc0, + 0x12b48: 0xe0009d30, 0x12b4b: 0xe0008a39, + 0x12b4c: 0xe0009d72, + 0x12b52: 0xe0009638, 0x12b53: 0xe0006474, + 0x12b54: 0xe0006314, 0x12b56: 0xe00082b1, + 0x12b58: 0xe00055c5, 0x12b59: 0xe00075bd, 0x12b5a: 0xe0009c43, 0x12b5b: 0xe0007fed, + 0x12b5d: 0xe0006a6b, 0x12b5f: 0xe000605a, + 0x12b61: 0xe000605d, 0x12b62: 0xe0005b68, + 0x12b67: 0xe00060b0, + 0x12b69: 0xe00061e9, + 0x12b6f: 0xe0004892, + 0x12b72: 0xe0006d68, + 0x12b74: 0xe00088c8, + 0x12b78: 0xe0008632, 0x12b79: 0xe0009cbe, + 0x12b7d: 0xe00045e9, + // Block 0x4ae, offset 0x12b80 + 0x12b80: 0xe0006dad, 0x12b81: 0xe0005d06, + 0x12b87: 0xe00068cc, + 0x12b8d: 0xe0004540, + 0x12b92: 0xe000a4ae, + 0x12b96: 0xe00057a7, + 0x12ba2: 0xe00055c9, + 0x12ba7: 0xe000a94f, + 0x12bac: 0xe00045ed, 0x12baf: 0xe0006560, + 0x12bb3: 0xe00086ba, + 0x12bb4: 0xe000768f, 0x12bb5: 0xe000a980, + // Block 0x4af, offset 0x12bc0 + 0x12bc0: 0xe0006cf0, 0x12bc2: 0xe0004b1d, + 0x12bc4: 0xe0008905, + 0x12bc9: 0xe00069f3, + 0x12bce: 0xe000771f, + 0x12bd0: 0xe000a457, 0x12bd2: 0xe00069f6, + 0x12bd7: 0xe0004ca1, + 0x12bd9: 0xe0008883, + 0x12be1: 0xe0004be7, 0x12be2: 0xe000a043, + 0x12be5: 0xe0007341, + 0x12be8: 0xe0008352, 0x12be9: 0xe00071d7, + 0x12bf4: 0xe0009e59, 0x12bf7: 0xe0004615, + 0x12bf8: 0xe0005d09, 0x12bf9: 0xe000a34d, 0x12bfa: 0xe000838e, 0x12bfb: 0xe0006c20, + 0x12bfc: 0xe0005843, 0x12bfd: 0xe0009d75, + // Block 0x4b0, offset 0x12c00 + 0x12c09: 0xe000513b, 0x12c0a: 0xe0007bf8, + 0x12c13: 0xe0004a1d, + 0x12c16: 0xe00093cb, 0x12c17: 0xe000844d, + 0x12c18: 0xe0008cbf, 0x12c19: 0xe0008853, 0x12c1b: 0xe0005f70, + 0x12c1c: 0xe000741e, 0x12c1d: 0xe0008e01, + 0x12c22: 0xe000a4b1, + 0x12c25: 0xe0007e7d, 0x12c27: 0xe0007dcd, + 0x12c28: 0xe000815e, 0x12c29: 0xe0006fe8, 0x12c2a: 0xe0008886, 0x12c2b: 0xe0006120, + 0x12c31: 0xe000528c, + 0x12c34: 0xe000a7a8, 0x12c36: 0xe000825d, 0x12c37: 0xe0008260, + 0x12c3e: 0xe000a62c, 0x12c3f: 0xe000812a, + // Block 0x4b1, offset 0x12c40 + 0x12c43: 0xe0007796, + 0x12c44: 0xe0007d02, 0x12c45: 0xe0006b3c, + 0x12c50: 0xe000876a, 0x12c52: 0xe0007c9d, + 0x12c57: 0xe0004e4b, + 0x12c58: 0xe0009e5c, + 0x12c5c: 0xe0005d89, + 0x12c60: 0xe0005bce, + 0x12c68: 0xe00055cd, 0x12c69: 0xe0007c2e, 0x12c6a: 0xe000a6df, 0x12c6b: 0xe000a271, + 0x12c6c: 0xe000a1d1, 0x12c6f: 0xe000a7ea, + 0x12c70: 0xe0007b87, 0x12c72: 0xe000a713, + 0x12c75: 0xe00059f8, 0x12c77: 0xe0004b41, + 0x12c78: 0xe00071da, 0x12c7a: 0xe00053a6, 0x12c7b: 0xe000a24d, + 0x12c7c: 0xe000623e, + // Block 0x4b2, offset 0x12c80 + 0x12c81: 0xe000a275, + 0x12c84: 0xe000a2b5, 0x12c86: 0xe00085f9, 0x12c87: 0xe000713c, + 0x12c88: 0xe0005aca, 0x12c89: 0xe0007d06, 0x12c8b: 0xe0007e55, + 0x12c8e: 0xe0008bc1, + 0x12c94: 0xe000951c, 0x12c95: 0xe0004298, 0x12c96: 0xe0004ca4, 0x12c97: 0xe0007ff0, + 0x12c98: 0xe00050ab, + 0x12c9e: 0xe0006822, 0x12c9f: 0xe0006274, + 0x12ca0: 0xe0004485, + 0x12ca6: 0xe000464d, 0x12ca7: 0xe000831a, + 0x12ca9: 0xe0007df1, 0x12cab: 0xe0005f36, + 0x12cad: 0xe0006a6f, + 0x12cb2: 0xe0005a1c, 0x12cb3: 0xe00054dc, + 0x12cb7: 0xe0008b01, + 0x12cb9: 0xe000a2b9, 0x12cbb: 0xe0009d0c, + // Block 0x4b3, offset 0x12cc0 + 0x12cc0: 0xe00062e0, 0x12cc2: 0xe0004190, + 0x12cc6: 0xe00084b3, + 0x12cc8: 0xe00041d2, 0x12cc9: 0xe0006278, 0x12cca: 0xe0006bec, + 0x12ccc: 0xe0009f99, 0x12ccd: 0xe000912d, 0x12ccf: 0xe00041fc, + 0x12cd2: 0xe0009191, + 0x12cd6: 0xe0004b21, + 0x12cd9: 0xe00049a2, + 0x12cdd: 0xe000a793, 0x12cde: 0xe000578f, + 0x12ce0: 0xe0008ed1, 0x12ce2: 0xe0008392, 0x12ce3: 0xe00072fd, + 0x12ce4: 0xe0006697, 0x12ce5: 0xe0008477, 0x12ce6: 0xe000a21a, + 0x12ce9: 0xe000a3ad, 0x12cea: 0xe0004eb2, 0x12ceb: 0xe0009936, + 0x12ced: 0xe0006350, 0x12cee: 0xe0009d87, + 0x12cf5: 0xe0008c4d, 0x12cf7: 0xe000615c, + 0x12cf9: 0xe0006fec, + 0x12cfd: 0xe0008bc5, 0x12cfe: 0xe000a2bd, + // Block 0x4b4, offset 0x12d00 + 0x12d01: 0xe0006e7c, 0x12d03: 0xe0004ca7, + 0x12d04: 0xe000a2f5, 0x12d05: 0xe0005847, 0x12d06: 0xe0005d0c, 0x12d07: 0xe00071dd, + 0x12d09: 0xe0005c3c, + 0x12d13: 0xe0007df5, + 0x12d1b: 0xe0009a6a, + 0x12d20: 0xe00089b5, 0x12d21: 0xe00072a5, 0x12d22: 0xe0009b24, + 0x12d24: 0xe0008857, 0x12d25: 0xe000a45a, 0x12d26: 0xe00050ae, + 0x12d28: 0xe000491a, 0x12d2a: 0xe00050b1, 0x12d2b: 0xe0006755, + 0x12d2c: 0xe0007df9, 0x12d2e: 0xe0008e21, 0x12d2f: 0xe0004a75, + 0x12d30: 0xe0007ae3, 0x12d31: 0xe0008d97, 0x12d32: 0xe00064ce, 0x12d33: 0xe0005db9, + 0x12d34: 0xe0004fcb, 0x12d35: 0xe0006984, 0x12d36: 0xe0009ce8, + 0x12d38: 0xe0009b28, 0x12d3a: 0xe000657c, + 0x12d3f: 0xe000a4e5, + // Block 0x4b5, offset 0x12d40 + 0x12d40: 0xe0007ff3, 0x12d41: 0xe0006060, 0x12d43: 0xe0009902, + 0x12d44: 0xe0006e80, 0x12d45: 0xe0008cc2, 0x12d46: 0xe0007010, + 0x12d4b: 0xe00081be, + 0x12d4e: 0xe000a1d4, + 0x12d55: 0xe000a002, 0x12d57: 0xe000812e, + 0x12d59: 0xe000527d, 0x12d5a: 0xe000a45d, 0x12d5b: 0xe0007b8b, + 0x12d5c: 0xe0008263, 0x12d5d: 0xe000a6a8, 0x12d5e: 0xe0006db0, 0x12d5f: 0xe000738e, + 0x12d60: 0xe0005c3f, 0x12d62: 0xe0007f7a, 0x12d63: 0xe0007186, + 0x12d64: 0xe0007ecb, 0x12d65: 0xe0007d12, + 0x12d68: 0xe0009131, 0x12d69: 0xe000a3b1, 0x12d6a: 0xe0005de0, + 0x12d6d: 0xe0005492, 0x12d6f: 0xe000584b, + 0x12d70: 0xe0004b96, 0x12d71: 0xe0008a3d, 0x12d72: 0xe000940f, 0x12d73: 0xe0009281, + 0x12d7d: 0xe0008e5d, 0x12d7e: 0xe0004f6f, + // Block 0x4b6, offset 0x12d80 + 0x12d80: 0xe0009811, 0x12d82: 0xe00050b4, 0x12d83: 0xe0005d0f, + 0x12d86: 0xe0004d34, 0x12d87: 0xe0006e84, + 0x12d89: 0xe000597c, 0x12d8a: 0xe00061dd, 0x12d8b: 0xe000876e, + 0x12d98: 0xe0005d69, + 0x12d9c: 0xe000a678, 0x12d9d: 0xe0004b99, 0x12d9e: 0xe00062e4, 0x12d9f: 0xe00046f1, + 0x12da1: 0xe0009135, 0x12da3: 0xe00050b7, + 0x12da5: 0xe00046f5, 0x12da7: 0xe0006594, + 0x12da8: 0xe00092bb, 0x12daa: 0xe0008d2b, 0x12dab: 0xe0005496, + 0x12db0: 0xe000a5e0, 0x12db2: 0xe00071e0, + 0x12db5: 0xe00079c0, + 0x12db9: 0xe00072a9, + 0x12dbd: 0xe0006d43, 0x12dbf: 0xe0006e88, + // Block 0x4b7, offset 0x12dc0 + 0x12dc6: 0xe00091c5, + 0x12dca: 0xe00046f9, + 0x12dcf: 0xe0005b3a, + 0x12dd4: 0xe0007b8f, + 0x12dd8: 0xe0004a79, 0x12dda: 0xe00092bf, 0x12ddb: 0xe000a600, + 0x12ddc: 0xe00049f3, + 0x12de0: 0xe000a460, 0x12de2: 0xe0009f00, 0x12de3: 0xe0009d34, + 0x12de6: 0xe0007da9, + 0x12de9: 0xe0009560, + 0x12dee: 0xe0007d66, + 0x12df2: 0xe0009c5e, + 0x12df7: 0xe00085fc, + // Block 0x4b8, offset 0x12e00 + 0x12e01: 0xe0006640, 0x12e03: 0xe000987a, + 0x12e04: 0xe00045f1, + 0x12e0c: 0xe0004d37, 0x12e0d: 0xe0005f84, 0x12e0e: 0xe0008a41, + 0x12e11: 0xe0009031, 0x12e13: 0xe00065b0, + 0x12e15: 0xe0007d6a, + 0x12e18: 0xe0004320, 0x12e1a: 0xe0007571, 0x12e1b: 0xe00095f0, + 0x12e1e: 0xe0006d2c, 0x12e1f: 0xe0006d6c, + 0x12e23: 0xe0006bf0, + 0x12e25: 0xe0006d70, 0x12e26: 0xe0007072, + 0x12e28: 0xe0007f7e, 0x12e2b: 0xe000669a, + 0x12e2c: 0xe0007f82, + 0x12e30: 0xe00089b9, 0x12e31: 0xe0008266, 0x12e32: 0xe0004388, 0x12e33: 0xe00074e5, + 0x12e37: 0xe00051f4, + 0x12e38: 0xe00089bd, 0x12e3a: 0xe0008bc9, + 0x12e3f: 0xe0005f88, + // Block 0x4b9, offset 0x12e40 + 0x12e47: 0xe0004f0b, + 0x12e4a: 0xe0004771, 0x12e4b: 0xe0008a45, + 0x12e4c: 0xe00047bd, 0x12e4e: 0xe0004619, 0x12e4f: 0xe0007e80, + 0x12e51: 0xe00089c1, 0x12e53: 0xe000543e, + 0x12e54: 0xe0006354, + 0x12e59: 0xe0005c42, 0x12e5a: 0xe00068d0, 0x12e5b: 0xe0009139, + 0x12e5c: 0xe00098ba, 0x12e5d: 0xe000615f, + 0x12e60: 0xe0008a49, 0x12e62: 0xe0009f9d, + 0x12e64: 0xe00099fc, 0x12e65: 0xe0005889, 0x12e66: 0xe000a85a, 0x12e67: 0xe000588d, + 0x12e6a: 0xe0006508, 0x12e6b: 0xe000a583, + 0x12e6f: 0xe0008f81, + 0x12e70: 0xe000847a, + 0x12e75: 0xe000a55c, 0x12e76: 0xe000546a, + 0x12e78: 0xe00050ba, 0x12e7a: 0xe00043c4, + 0x12e7f: 0xe00050bd, + // Block 0x4ba, offset 0x12e80 + 0x12e86: 0xe00043c8, 0x12e87: 0xe0008ed4, + 0x12e88: 0xe00065b4, 0x12e8a: 0xe000963c, 0x12e8b: 0xe0009fa1, + 0x12e8e: 0xe0007078, 0x12e8f: 0xe0007075, + 0x12e91: 0xe000841d, + 0x12e94: 0xe0008c51, + 0x12e99: 0xe000a8df, 0x12e9a: 0xe0004d3a, + 0x12e9d: 0xe0006bf4, + 0x12ea3: 0xe0008041, + 0x12ea5: 0xe0004461, + 0x12ea9: 0xe000994c, 0x12eab: 0xe00079eb, + 0x12eb1: 0xe0009e8c, 0x12eb2: 0xe0009f6a, 0x12eb3: 0xe0004324, + 0x12eb4: 0xe00075ed, 0x12eb5: 0xe00085ff, + 0x12eb8: 0xe00053aa, 0x12eb9: 0xe000913d, + 0x12ebc: 0xe000565d, 0x12ebd: 0xe0008889, 0x12ebe: 0xe00091c9, + // Block 0x4bb, offset 0x12ec0 + 0x12ec0: 0xe0004d3d, 0x12ec2: 0xe0004193, 0x12ec3: 0xe000a2f9, + 0x12ec5: 0xe0006644, 0x12ec7: 0xe0009035, + 0x12eca: 0xe0008a4d, + 0x12ecd: 0xe000847d, 0x12ece: 0xe000a1d7, + 0x12ed2: 0xe0007891, 0x12ed3: 0xe00099ff, + 0x12ed4: 0xe00099c6, 0x12ed5: 0xe000a8ab, + 0x12ed8: 0xe00056c1, 0x12ed9: 0xe00046fd, 0x12edb: 0xe0009c6a, + 0x12ede: 0xe00069f9, + 0x12ee2: 0xe0005d12, 0x12ee3: 0xe00090c7, + 0x12ee4: 0xe0008e83, 0x12ee7: 0xe0006b9f, + 0x12ef0: 0xe00053ea, 0x12ef2: 0xe0005de3, 0x12ef3: 0xe0005dc5, + 0x12ef4: 0xe00099c9, + 0x12ef9: 0xe00069fc, 0x12efa: 0xe0006987, + 0x12efc: 0xe0004838, 0x12eff: 0xe00081f1, + // Block 0x4bc, offset 0x12f00 + 0x12f00: 0xe00078f1, 0x12f01: 0xe000994f, + 0x12f07: 0xe0008e61, + 0x12f08: 0xe00047e7, 0x12f09: 0xe00082b4, 0x12f0b: 0xe0009f5c, + 0x12f0d: 0xe0007895, + 0x12f10: 0xe00082b7, + 0x12f15: 0xe000a026, + 0x12f19: 0xe000707b, + 0x12f1f: 0xe0007d16, + 0x12f20: 0xe00094c4, 0x12f21: 0xe00093cf, 0x12f22: 0xe0006358, + 0x12f24: 0xe0005c45, 0x12f26: 0xe00071e3, 0x12f27: 0xe000a047, + 0x12f2f: 0xe0008de9, + 0x12f30: 0xe0005775, 0x12f33: 0xe000987d, + 0x12f34: 0xe00087d2, + 0x12f3b: 0xe0005bfd, + // Block 0x4bd, offset 0x12f40 + 0x12f42: 0xe0005bad, 0x12f43: 0xe0005ca4, + 0x12f46: 0xe0005acd, + 0x12f48: 0xe0009e5f, 0x12f49: 0xe000538a, + 0x12f4c: 0xe00076df, 0x12f4e: 0xe000425c, + 0x12f52: 0xe0008269, + 0x12f55: 0xe0007d8e, 0x12f56: 0xe0006598, + 0x12f58: 0xe000591f, + 0x12f5c: 0xe0008a51, + 0x12f61: 0xe00099cc, 0x12f62: 0xe00078c9, + 0x12f64: 0xe0008ab9, 0x12f65: 0xe000923d, 0x12f67: 0xe000595c, + 0x12f68: 0xe0004a49, 0x12f69: 0xe000575a, + 0x12f6c: 0xe0006e8c, 0x12f6d: 0xe0007bc7, 0x12f6e: 0xe0008396, 0x12f6f: 0xe0004d40, + 0x12f70: 0xe0007d6e, 0x12f71: 0xe0009b8c, 0x12f72: 0xe00089c5, + 0x12f78: 0xe00047c0, 0x12f7b: 0xe000571c, + 0x12f7c: 0xe00063bc, 0x12f7d: 0xe00064e8, 0x12f7e: 0xe00064ec, + // Block 0x4be, offset 0x12f80 + 0x12f80: 0xe0005023, 0x12f81: 0xe0008d9a, 0x12f83: 0xe000608d, + 0x12f84: 0xe0008909, 0x12f86: 0xe0004464, 0x12f87: 0xe000a67c, + 0x12f8b: 0xe0004895, + 0x12f8e: 0xe0004bea, + 0x12f90: 0xe000483b, 0x12f93: 0xe000a463, + 0x12f96: 0xe000a604, + 0x12f9a: 0xe0007799, 0x12f9b: 0xe000a769, + 0x12f9c: 0xe000a4b4, 0x12f9e: 0xe000a4b7, + 0x12fa4: 0xe0009d0f, + 0x12fac: 0xe000a04b, 0x12fae: 0xe0009f6d, + 0x12fb4: 0xe0008fb1, 0x12fb6: 0xe0006ba2, + 0x12fb8: 0xe0004dc7, 0x12fba: 0xe0009832, + 0x12fbf: 0xe000600c, + // Block 0x4bf, offset 0x12fc0 + 0x12fc2: 0xe0007ff6, 0x12fc3: 0xe00064a7, + 0x12fc6: 0xe000688c, + 0x12fc8: 0xe0007b93, 0x12fca: 0xe00084c6, + 0x12fcc: 0xe0007e3d, 0x12fcd: 0xe000a137, 0x12fce: 0xe000774f, + 0x12fd2: 0xe000a10f, + 0x12fd4: 0xe000a700, 0x12fd6: 0xe0004467, + 0x12fd9: 0xe00066af, 0x12fdb: 0xe0006ff0, + 0x12fdc: 0xe0005554, 0x12fde: 0xe00086d2, 0x12fdf: 0xe0005f78, + 0x12fe1: 0xe0009141, 0x12fe3: 0xe0004328, + 0x12fe4: 0xe000635c, 0x12fe5: 0xe0004aa5, 0x12fe7: 0xe0005aa6, + 0x12fea: 0xe0009be8, + 0x12fec: 0xe0004898, 0x12fee: 0xe00060b4, + 0x12ff1: 0xe0008044, 0x12ff2: 0xe0005f74, + 0x12ff4: 0xe00090e5, + 0x12ff8: 0xe0006cf4, 0x12ff9: 0xe0007345, 0x12ffb: 0xe000a40f, + 0x12ffc: 0xe0006360, 0x12ffe: 0xe0007301, + // Block 0x4c0, offset 0x13000 + 0x13001: 0xe0006ff4, + 0x13004: 0xe0005fb4, 0x13007: 0xe000612f, + 0x13008: 0xe0009ba4, 0x13009: 0xe000620e, 0x1300a: 0xe0006090, 0x1300b: 0xe0004260, + 0x1300c: 0xe000a2fd, + 0x1301a: 0xe0006d78, 0x1301b: 0xe0005f39, + 0x1301e: 0xe0009145, + 0x13020: 0xe0005fb8, + 0x13025: 0xe0008635, 0x13026: 0xe0008638, + 0x13028: 0xe0008712, 0x13029: 0xe000a2c1, + 0x13034: 0xe0007349, 0x13037: 0xe0004e2b, + 0x13038: 0xe0006063, 0x1303a: 0xe0008d2e, 0x1303b: 0xe00078cd, + 0x1303c: 0xe0007677, 0x1303e: 0xe0008ff1, + // Block 0x4c1, offset 0x13040 + 0x13040: 0xe000928f, + 0x13046: 0xe000a608, 0x13047: 0xe0008cc5, + 0x1304d: 0xe000a2c5, + 0x13052: 0xe0006f90, + 0x1305a: 0xe000779c, 0x1305b: 0xe0008bcd, + 0x1305f: 0xe000725e, + 0x13060: 0xe0004e3b, 0x13061: 0xe00071e6, 0x13062: 0xe0007261, 0x13063: 0xe00055d1, + 0x13065: 0xe00069ff, 0x13066: 0xe00060b8, + 0x13068: 0xe0007c31, 0x1306b: 0xe0009640, + 0x13077: 0xe0004544, + 0x13079: 0xe0005557, + 0x1307d: 0xe0004ee8, 0x1307e: 0xe000483e, 0x1307f: 0xe0007bfb, + // Block 0x4c2, offset 0x13080 + 0x1308b: 0xe0009149, + 0x1308d: 0xe0007264, 0x1308e: 0xe000a0bf, + 0x13091: 0xe0006010, + 0x13096: 0xe0007c34, + 0x13099: 0xe0005e1f, + 0x1309e: 0xe0005e57, + 0x130a0: 0xe000549a, 0x130a2: 0xe00060f4, + 0x130a5: 0xe0006604, + 0x130aa: 0xe0009241, + 0x130ac: 0xe0007305, 0x130ad: 0xe0005bb0, + 0x130b0: 0xe000432c, 0x130b3: 0xe0005661, + 0x130b9: 0xe000779f, 0x130bb: 0xe00095f4, + 0x130bc: 0xe0004580, 0x130bd: 0xe000489b, 0x130bf: 0xe0004caa, + // Block 0x4c3, offset 0x130c0 + 0x130c7: 0xe00060f8, + 0x130c9: 0xe0006a87, + 0x130cd: 0xe000a5a0, + 0x130d7: 0xe0009784, + 0x130d9: 0xe0004370, 0x130da: 0xe0009798, 0x130db: 0xe0006066, + 0x130dc: 0xe000503b, 0x130de: 0xe000833e, + 0x130e1: 0xe000a5a4, 0x130e2: 0xe0007421, 0x130e3: 0xe0008420, + 0x130e5: 0xe000908b, 0x130e7: 0xe000752d, + 0x130e9: 0xe0004cad, + 0x130ed: 0xe000535a, 0x130ee: 0xe0007e6e, 0x130ef: 0xe0004bed, + 0x130f0: 0xe000904d, 0x130f3: 0xe0006e20, + 0x130fa: 0xe0009b44, 0x130fb: 0xe000496e, + 0x130fc: 0xe000441c, 0x130fd: 0xe0006e38, + // Block 0x4c4, offset 0x13100 + 0x13102: 0xe0006b3f, + 0x1310c: 0xe00096bb, 0x1310f: 0xe00068d4, + 0x13111: 0xe00075f0, 0x13112: 0xe000698a, + 0x13122: 0xe0005778, + 0x13125: 0xe000908e, 0x13126: 0xe0009445, 0x13127: 0xe0009a6e, + 0x1312c: 0xe0005dc9, 0x1312d: 0xe0009e04, + 0x13130: 0xe0009da0, 0x13132: 0xe0009e8f, + 0x13134: 0xe0009ceb, + // Block 0x4c5, offset 0x13140 + 0x13143: 0xe0008f19, + 0x13145: 0xe0004eb5, + 0x1314f: 0xe0007a5f, + 0x1315c: 0xe00044a2, 0x1315d: 0xe00096f4, + 0x13160: 0xe000585b, + 0x13167: 0xe0007fb6, + 0x13168: 0xe0009284, 0x1316b: 0xe0005c48, + 0x1316c: 0xe0004701, 0x1316e: 0xe000a04f, 0x1316f: 0xe0007a63, + 0x1317c: 0xe0006930, + // Block 0x4c6, offset 0x13180 + 0x13181: 0xe00050c0, + 0x13187: 0xe0008bd1, + 0x1318c: 0xe0005aee, 0x1318d: 0xe000776c, 0x1318e: 0xe000717a, 0x1318f: 0xe00086be, + 0x13191: 0xe000698d, 0x13193: 0xe00054fa, + 0x13197: 0xe0007dfd, + 0x1319f: 0xe0006f58, + 0x131a3: 0xe00042c4, + 0x131a4: 0xe0007bcb, 0x131a7: 0xe000659c, + 0x131a8: 0xe0007e92, 0x131a9: 0xe0006e24, + 0x131ad: 0xe0009bec, + 0x131ba: 0xe000a594, 0x131bb: 0xe000a598, + 0x131bc: 0xe0005de6, 0x131be: 0xe0005245, + // Block 0x4c7, offset 0x131c0 + 0x131c1: 0xe0008602, + 0x131c5: 0xe0006424, + 0x131c8: 0xe0007e95, 0x131ca: 0xe0005b6b, 0x131cb: 0xe0009260, + 0x131ce: 0xe00047c3, 0x131cf: 0xe00059f4, + 0x131d0: 0xe0006364, 0x131d1: 0xe00077a2, + 0x131d4: 0xe0009475, 0x131d5: 0xe0004488, + 0x131da: 0xe0008a55, + 0x131e0: 0xe00052c6, + 0x131e7: 0xe000894d, + 0x131e8: 0xe0005de9, 0x131ea: 0xe0009814, + 0x131ec: 0xe0004705, 0x131ef: 0xe00050c3, + 0x131f4: 0xe0005740, 0x131f5: 0xe0004264, 0x131f7: 0xe0005d8d, + 0x131fa: 0xe0004b45, 0x131fb: 0xe0006368, + 0x131fc: 0xe0008716, 0x131fd: 0xe0004c32, + // Block 0x4c8, offset 0x13200 + 0x13201: 0xe00096f7, + 0x1320c: 0xe0005b7d, 0x1320e: 0xe00096fa, 0x1320f: 0xe0005027, + 0x13211: 0xe000549e, 0x13212: 0xe0008450, + 0x13216: 0xe00079c3, + 0x13219: 0xe00077a5, + 0x13227: 0xe0005b80, + 0x1322a: 0xe00058fb, 0x1322b: 0xe0005944, + 0x1322c: 0xe000636c, 0x1322d: 0xe000a5a8, + 0x13231: 0xe0005b52, + 0x1323a: 0xe0007424, + 0x1323e: 0xe0006b42, + // Block 0x4c9, offset 0x13240 + 0x13240: 0xe0006b45, 0x13241: 0xe00050c6, + 0x13245: 0xe0007f10, 0x13246: 0xe0009564, 0x13247: 0xe00050c9, + 0x13248: 0xe00050cc, 0x13249: 0xe0009091, 0x1324a: 0xe0009da4, + 0x13250: 0xe0007ff9, 0x13253: 0xe0006908, + 0x13254: 0xe0006825, 0x13255: 0xe0006a02, 0x13256: 0xe0008d31, 0x13257: 0xe0009094, + 0x1325a: 0xe0008d34, 0x1325b: 0xe00044d0, + 0x1325c: 0xe000a466, 0x1325d: 0xe00098be, 0x1325e: 0xe00074e9, 0x1325f: 0xe0007267, + 0x13260: 0xe0006b48, 0x13262: 0xe0005308, + 0x13265: 0xe0006cf8, 0x13267: 0xe0008d9d, + 0x13268: 0xe0009f03, + 0x1326d: 0xe0008c8f, + 0x1327a: 0xe00050cf, + 0x1327c: 0xe0004aa9, 0x1327f: 0xe0005af2, + // Block 0x4ca, offset 0x13280 + 0x13280: 0xe0009f44, 0x13281: 0xe0004fcf, + 0x1328a: 0xe00047ea, 0x1328b: 0xe0008546, + 0x1328d: 0xe000a55f, 0x1328e: 0xe0008bd5, 0x1328f: 0xe00066dd, + 0x13291: 0xe0007ffc, + 0x13294: 0xe0008cc8, + 0x1329d: 0xe00090f9, + 0x132a6: 0xe00078f4, 0x132a7: 0xe000a952, + 0x132a8: 0xe000513e, 0x132aa: 0xe0006e90, 0x132ab: 0xe0005422, + 0x132ae: 0xe0005a82, + 0x132b0: 0xe000530b, 0x132b1: 0xe000555a, 0x132b3: 0xe0007899, + 0x132b4: 0xe0007841, + 0x132b9: 0xe0007fff, 0x132ba: 0xe0007d92, 0x132bb: 0xe0005d45, + 0x132bd: 0xe0004fd3, 0x132be: 0xe000a562, 0x132bf: 0xe00055d5, + // Block 0x4cb, offset 0x132c0 + 0x132c0: 0xe00071e9, 0x132c1: 0xe0006b4b, + 0x132c6: 0xe000429c, + 0x132c9: 0xe0006648, 0x132ca: 0xe0005241, 0x132cb: 0xe0009835, + 0x132d1: 0xe00049f6, 0x132d2: 0xe00096fd, + 0x132d5: 0xe0006990, + 0x132d8: 0xe0006993, + 0x132df: 0xe0008d37, + 0x132e2: 0xe0005a64, 0x132e3: 0xe0005eb7, + 0x132e4: 0xe0009a9a, 0x132e6: 0xe000914d, 0x132e7: 0xe000773b, + 0x132e9: 0xe00091cd, 0x132ea: 0xe00090ca, 0x132eb: 0xe0009912, + 0x132ec: 0xe00044e8, + 0x132f8: 0xe00042e4, 0x132fb: 0xe0008480, + // Block 0x4cc, offset 0x13300 + 0x13300: 0xe000a955, 0x13301: 0xe000489e, 0x13302: 0xe000585f, + 0x13305: 0xe0007024, + 0x13308: 0xe0004268, 0x1330a: 0xe0008ccb, 0x1330b: 0xe0008bd9, + 0x1330c: 0xe00055a5, 0x1330d: 0xe0009700, + 0x13314: 0xe0008596, 0x13317: 0xe0009d78, + 0x13319: 0xe00090e9, 0x1331a: 0xe00099cf, + 0x1331c: 0xe0005cd0, 0x1331e: 0xe0004a20, 0x1331f: 0xe0009f40, + 0x13320: 0xe0008d3a, + 0x13327: 0xe0006f5c, + 0x1332e: 0xe0008e25, + 0x13331: 0xe0009a9e, + 0x13336: 0xe000807a, 0x13337: 0xe00090ed, + 0x13339: 0xe0009195, 0x1333b: 0xe000555d, + 0x1333c: 0xe0004196, 0x1333d: 0xe00047c6, 0x1333f: 0xe0004841, + // Block 0x4cd, offset 0x13340 + 0x13340: 0xe00048de, + 0x13345: 0xe0004420, 0x13346: 0xe00060bc, + 0x13349: 0xe00099d2, + 0x1334d: 0xe000890d, 0x1334e: 0xe0007b97, + 0x13357: 0xe00071ec, + 0x13360: 0xe00052a9, 0x13361: 0xe0006d50, 0x13362: 0xe0007bfe, + 0x13369: 0xe0007d1a, 0x1336b: 0xe000a59c, + 0x13370: 0xe000789d, + 0x13374: 0xe000a31d, 0x13375: 0xe00076b7, 0x13376: 0xe0004cb0, + 0x13379: 0xe0004df3, 0x1337a: 0xe00049a6, + 0x1337d: 0xe0008bdd, 0x1337e: 0xe0007f13, 0x1337f: 0xe0009520, + // Block 0x4ce, offset 0x13380 + 0x13380: 0xe0005700, 0x13381: 0xe0005625, 0x13382: 0xe0005ad0, 0x13383: 0xe0008ad1, + 0x13384: 0xe0009293, 0x13385: 0xe0007f16, 0x13386: 0xe0009e08, + 0x13388: 0xe0007ece, 0x1338a: 0xe0007dd0, + 0x13392: 0xe00091d1, 0x13393: 0xe00093d3, + 0x13395: 0xe0008d3d, 0x13396: 0xe0004c35, 0x13397: 0xe0009413, + 0x13398: 0xe0004dab, 0x1339b: 0xe0004d43, + 0x1339f: 0xe0004dd7, + 0x133a0: 0xe0004a23, 0x133a3: 0xe0007140, + 0x133a9: 0xe0007dac, 0x133aa: 0xe0007daf, + 0x133ac: 0xe00082ba, 0x133ae: 0xe0004df7, 0x133af: 0xe0007ed1, + 0x133b3: 0xe00082bd, + 0x133b6: 0xe0004d46, + 0x133b9: 0xe0007cd3, 0x133ba: 0xe0004eb8, 0x133bb: 0xe0009417, + 0x133be: 0xe0004aad, 0x133bf: 0xe0005ca8, + // Block 0x4cf, offset 0x133c0 + 0x133c4: 0xe00092c3, 0x133c5: 0xe0004ebb, 0x133c7: 0xe00056c4, + 0x133c8: 0xe0008da0, 0x133ca: 0xe0008abd, 0x133cb: 0xe0005dcd, + 0x133d7: 0xe0006123, + 0x133d9: 0xe0009343, + 0x133dd: 0xe000664c, 0x133df: 0xe0004709, + 0x133e0: 0xe0008772, 0x133e2: 0xe0006ba5, 0x133e3: 0xe0008f85, + 0x133e5: 0xe0005665, 0x133e6: 0xe000716c, + 0x133ea: 0xe00071ef, + 0x133ed: 0xe00042c8, 0x133ef: 0xe000535e, + 0x133f6: 0xe000470d, + 0x133f8: 0xe0004775, 0x133f9: 0xe0008f49, 0x133fa: 0xe00098c2, + 0x133fd: 0xe0008047, 0x133ff: 0xe000426c, + // Block 0x4d0, offset 0x13400 + 0x13406: 0xe0009d12, + 0x13408: 0xe000502b, 0x1340a: 0xe0008da3, + 0x1340c: 0xe00075f3, 0x1340f: 0xe000a509, + 0x13411: 0xe000707e, 0x13412: 0xe0004ff7, + 0x13418: 0xe0008b05, 0x13419: 0xe0006d74, 0x1341b: 0xe0008911, + 0x1341e: 0xe0009c0c, + 0x13420: 0xe0005dd1, + 0x13425: 0xe0006ba8, 0x13426: 0xe00067c8, 0x13427: 0xe0009479, + 0x13428: 0xe00068d8, + 0x1342c: 0xe0008c92, 0x1342d: 0xe0005a20, 0x1342f: 0xe000528f, + 0x13433: 0xe00041d5, + 0x13435: 0xe000656c, + 0x13439: 0xe0007027, + // Block 0x4d1, offset 0x13440 + 0x13445: 0xe0006ef0, 0x13446: 0xe0009fa5, + 0x13448: 0xe0004aed, 0x13449: 0xe0005720, 0x1344b: 0xe0004f73, + 0x1344c: 0xe00089c9, 0x1344d: 0xe0007309, 0x1344f: 0xe0006534, + 0x13450: 0xe0004b25, 0x13451: 0xe00098c6, 0x13452: 0xe0009c6e, 0x13453: 0xe00047ed, + 0x13454: 0xe0005442, 0x13456: 0xe0009465, + 0x1345f: 0xe0006828, + 0x13460: 0xe0004f0f, + 0x13465: 0xe00044eb, 0x13466: 0xe0004ab1, 0x13467: 0xe000461d, + 0x13469: 0xe0009c82, + 0x1346c: 0xe0006ff8, 0x1346e: 0xe0006db3, + 0x13471: 0xe00070c9, 0x13473: 0xe0008c55, + 0x13475: 0xe0007a67, + 0x1347d: 0xe0007ca0, + // Block 0x4d2, offset 0x13480 + 0x13487: 0xe000446a, + 0x1348b: 0xe00089cd, + 0x1348d: 0xe00048a1, 0x1348e: 0xe000a4ba, 0x1348f: 0xe0008843, + 0x13492: 0xe0009883, + 0x13494: 0xe00062e8, 0x13495: 0xe00050d2, 0x13497: 0xe0006bf8, + 0x13499: 0xe0006715, 0x1349a: 0xe0009263, + 0x1349c: 0xe00049ca, 0x1349d: 0xe0004661, + 0x134a0: 0xe0009886, 0x134a1: 0xe0004a7d, + 0x134ad: 0xe00089d1, + 0x134b1: 0xe0006cfc, + 0x134b4: 0xe00086ee, + 0x134b8: 0xe000888c, + 0x134be: 0xe00070cc, + // Block 0x4d3, offset 0x134c0 + 0x134c0: 0xe0008ac1, 0x134c1: 0xe000a680, + 0x134c4: 0xe0006564, 0x134c6: 0xe00089d5, 0x134c7: 0xe0009dc4, + 0x134c9: 0xe00098ca, 0x134ca: 0xe000a541, 0x134cb: 0xe000a37d, + 0x134cc: 0xe000a7ab, + 0x134d2: 0xe0007499, + 0x134d4: 0xe00080c2, + 0x134d9: 0xe00048a4, 0x134db: 0xe0007845, + 0x134dd: 0xe0004d49, + 0x134e0: 0xe0007081, + 0x134e4: 0xe00055d9, 0x134e6: 0xe0006a05, + 0x134e9: 0xe0006b4e, 0x134ea: 0xe00090cd, + 0x134f3: 0xe0009fbd, + 0x134f7: 0xe0006779, + 0x134fe: 0xe0005fe8, + // Block 0x4d4, offset 0x13500 + 0x13500: 0xe000947d, + 0x13507: 0xe0008ddd, + 0x13509: 0xe0009889, 0x1350b: 0xe0004e85, + 0x1350f: 0xe0005b1a, + 0x13512: 0xe00092c7, + 0x1351e: 0xe0005362, 0x1351f: 0xe0008b09, + 0x13520: 0xe00066b2, 0x13521: 0xe0004270, + 0x13527: 0xe000a684, + 0x1352a: 0xe00086f2, 0x1352b: 0xe0007084, + 0x13537: 0xe0009620, + 0x13538: 0xe0009d15, + 0x1353d: 0xe00095f8, 0x1353e: 0xe00059e8, 0x1353f: 0xe00067cb, + // Block 0x4d5, offset 0x13540 + 0x13543: 0xe000580b, + 0x1354c: 0xe0008ed7, 0x1354d: 0xe0008915, + 0x13550: 0xe0005744, 0x13552: 0xe0008f1c, + 0x13554: 0xe000726a, + 0x1355b: 0xe0008a59, + 0x1355c: 0xe0009b48, 0x1355f: 0xe0005b83, + 0x13560: 0xe0005b3e, + 0x13564: 0xe00095fc, 0x13565: 0xe0007849, 0x13567: 0xe00044ee, + 0x13569: 0xe00065e4, + 0x1356c: 0xe0005d15, + 0x13572: 0xe00082c0, 0x13573: 0xe0006211, + 0x1357e: 0xe000854a, + // Block 0x4d6, offset 0x13580 + 0x13581: 0xe0009568, 0x13583: 0xe0006996, + 0x13589: 0xe0006890, + 0x1358d: 0xe0006093, + 0x13592: 0xe0005dd5, + 0x13595: 0xe00062ec, 0x13597: 0xe0008d40, + 0x13598: 0xe0008ae9, + 0x1359f: 0xe0007100, + 0x135a2: 0xe000863b, + 0x135a4: 0xe0008196, 0x135a5: 0xe0008f4d, 0x135a6: 0xe0005d91, 0x135a7: 0xe0008776, + 0x135a8: 0xe00064f4, + 0x135ae: 0xe00058a9, + 0x135b1: 0xe00058ad, 0x135b2: 0xe00092cf, 0x135b3: 0xe000449a, + 0x135b9: 0xe00071f2, + 0x135bc: 0xe0005d95, 0x135bd: 0xe0008e65, 0x135be: 0xe0008be1, + // Block 0x4d7, offset 0x135c0 + 0x135c5: 0xe00082c3, 0x135c6: 0xe0005fd4, + 0x135ca: 0xe000a469, + 0x135d5: 0xe00048a7, 0x135d6: 0xe000546e, 0x135d7: 0xe0004d4c, + 0x135d9: 0xe0008da6, 0x135da: 0xe00087d6, + 0x135dc: 0xe0006241, 0x135dd: 0xe0006c68, 0x135de: 0xe0006894, 0x135df: 0xe0008d43, + 0x135e0: 0xe00043cc, 0x135e2: 0xe0006096, + 0x135e5: 0xe00051b6, 0x135e7: 0xe00058b1, + 0x135ef: 0xe00051b9, + 0x135f2: 0xe0005922, + 0x135f4: 0xe0008951, 0x135f6: 0xe0008da9, + 0x135f8: 0xe0005f9c, 0x135fa: 0xe0004eeb, 0x135fb: 0xe00047c9, + 0x135fe: 0xe0004ebe, + // Block 0x4d8, offset 0x13600 + 0x13600: 0xe00050d5, 0x13602: 0xe0008eda, 0x13603: 0xe000734d, + 0x13604: 0xe0007825, 0x13605: 0xe000a529, 0x13606: 0xe0008002, 0x13607: 0xe000a8cf, + 0x13608: 0xe000a5e4, 0x1360a: 0xe00061ad, 0x1360b: 0xe00061b1, + 0x1360d: 0xe0005200, + 0x13610: 0xe00052e8, 0x13613: 0xe0006dec, + 0x13614: 0xe000730d, 0x13615: 0xe0006a08, 0x13617: 0xe0006b51, + 0x13618: 0xe0004baa, 0x13619: 0xe0009097, 0x1361a: 0xe0005013, 0x1361b: 0xe0006898, + 0x1361c: 0xe00080c6, + 0x13620: 0xe0007087, 0x13621: 0xe0006428, 0x13622: 0xe0006d54, + 0x1362b: 0xe0008605, + 0x1362c: 0xe0008edd, 0x1362e: 0xe000931b, 0x1362f: 0xe0005c00, + 0x13630: 0xe000702a, 0x13631: 0xe000690c, 0x13632: 0xe0006f60, 0x13633: 0xe00074ed, + 0x13635: 0xe000888f, + 0x13639: 0xe000708a, 0x1363a: 0xe0004330, + // Block 0x4d9, offset 0x13640 + 0x13642: 0xe0008e29, 0x13643: 0xe000a2c9, + 0x13644: 0xe0008d46, 0x13645: 0xe0004711, 0x13646: 0xe0006370, + 0x13649: 0xe0007371, + 0x1364d: 0xe00085a2, + 0x13650: 0xe0004641, + 0x13656: 0xe0004b49, + 0x13659: 0xe000a60c, 0x1365b: 0xe0008daf, + 0x1365c: 0xe000a329, 0x1365e: 0xe0004bf0, + 0x13661: 0xe0005793, 0x13662: 0xe000a2cd, 0x13663: 0xe0006664, + 0x13666: 0xe0005017, + 0x13668: 0xe000834a, 0x13669: 0xe0008dac, 0x1366a: 0xe0008512, + 0x1366e: 0xe0006db6, + 0x13670: 0xe00091ed, 0x13671: 0xe0009c72, 0x13672: 0xe0006b54, 0x13673: 0xe00043d0, + 0x13676: 0xe0008ac5, + 0x13679: 0xe00045f5, 0x1367a: 0xe0009a02, + 0x1367f: 0xe0004cb3, + // Block 0x4da, offset 0x13680 + 0x13683: 0xe000974b, + 0x13686: 0xe0004779, + 0x1368e: 0xe0008be5, 0x1368f: 0xe00071f5, + 0x13693: 0xe0004715, + 0x13698: 0xe000677d, + 0x1369c: 0xe0008e2d, + 0x136a0: 0xe0005af6, 0x136a2: 0xe0008ee0, 0x136a3: 0xe0004e3f, + 0x136a5: 0xe0005141, 0x136a6: 0xe0005144, 0x136a7: 0xe0008fb5, + 0x136a9: 0xe0008162, 0x136ab: 0xe0006ef4, + 0x136ac: 0xe00071f8, 0x136ad: 0xe000826c, 0x136ae: 0xe00047f0, + 0x136b0: 0xe0004ab5, 0x136b1: 0xe00043d4, 0x136b2: 0xe0005ecf, + 0x136b4: 0xe00095a8, 0x136b5: 0xe0009448, + 0x136b8: 0xe0005c80, 0x136ba: 0xe00050d8, 0x136bb: 0xe0009b78, + 0x136bd: 0xe000868e, 0x136be: 0xe0005cd4, 0x136bf: 0xe0005fbc, + // Block 0x4db, offset 0x136c0 + 0x136c4: 0xe0004936, 0x136c7: 0xe00099d5, + 0x136ca: 0xe0005177, 0x136cb: 0xe0006999, + 0x136cc: 0xe00082c6, 0x136cd: 0xe0006294, + 0x136d6: 0xe0006db9, 0x136d7: 0xe0006d30, + 0x136d8: 0xe000a0df, 0x136da: 0xe0006e94, + 0x136dc: 0xe0005fd8, 0x136dd: 0xe0009211, 0x136de: 0xe0005366, + 0x136e0: 0xe00096a0, 0x136e1: 0xe000627c, 0x136e3: 0xe0007a6b, + 0x136e6: 0xe000745d, + 0x136e8: 0xe0009dc8, 0x136e9: 0xe0007e01, + 0x136ec: 0xe0005fc0, 0x136ef: 0xe00081c1, + 0x136f4: 0xe0005980, 0x136f6: 0xe0009de8, + 0x136f9: 0xe0008cce, 0x136fb: 0xe00099d8, + // Block 0x4dc, offset 0x13700 + 0x13708: 0xe0007bcf, 0x13709: 0xe0009151, 0x1370a: 0xe00077c4, 0x1370b: 0xe000988c, + 0x13710: 0xe000988f, 0x13711: 0xe0004685, + 0x13715: 0xe0007d1e, 0x13717: 0xe0009817, + 0x13718: 0xe00047f3, 0x1371b: 0xe00062f0, + 0x1371d: 0xe0009155, 0x1371e: 0xe000a46c, 0x1371f: 0xe0007f2e, + 0x13720: 0xe00048f2, 0x13721: 0xe000881b, 0x13722: 0xe0005748, 0x13723: 0xe000a2d1, + 0x1372b: 0xe0006759, + 0x1372e: 0xe00098ce, 0x1372f: 0xe0007a6f, + 0x13731: 0xe0008e31, 0x13732: 0xe0005c54, 0x13733: 0xe0004621, + 0x13735: 0xe0005e7f, 0x13737: 0xe0005c03, + 0x13739: 0xe0009f2a, 0x1373b: 0xe0006244, + 0x1373d: 0xe00097d4, 0x1373e: 0xe0008919, + // Block 0x4dd, offset 0x13740 + 0x13741: 0xe000650c, 0x13743: 0xe0006934, + 0x13744: 0xe0007c37, 0x13745: 0xe00070cf, 0x13746: 0xe0006162, 0x13747: 0xe0007ed4, + 0x13748: 0xe0004424, + 0x13750: 0xe0007036, 0x13752: 0xe0009039, + 0x13754: 0xe00090f1, 0x13755: 0xe0006e98, 0x13756: 0xe0006c24, 0x13757: 0xe0005d99, + 0x13759: 0xe000651c, 0x1375a: 0xe0005bd1, + 0x1375e: 0xe0007ed7, + 0x13761: 0xe00071fb, 0x13762: 0xe0004e88, + 0x13769: 0xe00073da, 0x1376a: 0xe000a6e2, 0x1376b: 0xe00047cc, + 0x1376d: 0xe00045f9, 0x1376f: 0xe000a301, + 0x13770: 0xe0008d49, + 0x13776: 0xe0007923, + 0x13779: 0xe00079ef, + 0x1377c: 0xe00047cf, 0x1377d: 0xe0006a8b, 0x1377e: 0xe0004625, + // Block 0x4de, offset 0x13780 + 0x13781: 0xe000a7ee, 0x13782: 0xe00092cb, + 0x13787: 0xe0005b86, + 0x13788: 0xe000a984, 0x1378a: 0xe0004b4d, + 0x1378c: 0xe0007104, 0x1378d: 0xe0005c57, 0x1378f: 0xe00089d9, + 0x13793: 0xe0007b9b, + 0x13794: 0xe000883c, 0x13796: 0xe0006f70, + 0x13798: 0xe00092d3, 0x1379b: 0xe00055dd, + 0x1379c: 0xe000580f, + // Block 0x4df, offset 0x137c0 + 0x137f6: 0xe00067ce, 0x137f7: 0xe0006bab, + 0x137f8: 0xe000a16b, 0x137fa: 0xe0004645, + 0x137fe: 0xe0006668, 0x137ff: 0xe000a187, + // Block 0x4e0, offset 0x13800 + 0x13803: 0xe00077f8, + 0x13804: 0xe0004781, 0x13805: 0xe000a029, 0x13807: 0xe0008fb9, + 0x1380b: 0xe0007d96, + 0x1380c: 0xe00077e4, 0x1380d: 0xe0005b89, 0x1380e: 0xe0005426, + 0x13810: 0xe0004a81, + 0x13814: 0xe0005ed3, 0x13815: 0xe000a07b, + 0x13818: 0xe000682b, + 0x1381d: 0xe00088cb, 0x1381f: 0xe00048aa, + 0x13820: 0xe0006298, 0x13821: 0xe0004428, 0x13823: 0xe0004b6c, + 0x13826: 0xe000682e, + 0x13828: 0xe000798b, 0x1382a: 0xe0008e8c, 0x1382b: 0xe0004b63, + 0x1382e: 0xe00099db, + 0x13830: 0xe0006538, 0x13832: 0xe0006dbc, + 0x13835: 0xe0005f1e, 0x13837: 0xe0009cee, + 0x13838: 0xe0006544, 0x13839: 0xe0005d18, + 0x1383c: 0xe0009fc1, 0x1383d: 0xe00047f6, 0x1383e: 0xe0009051, + // Block 0x4e1, offset 0x13840 + 0x13842: 0xe0004629, + 0x13845: 0xe000575d, 0x13846: 0xe0006a0b, 0x13847: 0xe0005147, + 0x13848: 0xe00050db, 0x1384a: 0xe00078a1, + 0x1384c: 0xe00043d8, 0x1384e: 0xe0006214, + 0x13854: 0xe0004844, 0x13856: 0xe00048ad, 0x13857: 0xe000442c, + 0x13858: 0xe00087da, 0x1385a: 0xe0005a24, + 0x1385d: 0xe00088ce, 0x1385e: 0xe00071fe, + 0x13864: 0xe0004daf, + 0x13868: 0xe0006e9c, 0x13869: 0xe0008423, 0x1386b: 0xe0004430, + 0x1386f: 0xe00042e8, + 0x13872: 0xe000a958, + 0x13876: 0xe0008a5d, + 0x13878: 0xe0005d1b, 0x13879: 0xe000449e, + 0x1387d: 0xe0008005, + // Block 0x4e2, offset 0x13880 + 0x13881: 0xe0007d72, + 0x13885: 0xe0007427, + 0x1388a: 0xe00084ca, + 0x1388c: 0xe00084ce, 0x1388e: 0xe0005a28, + 0x13892: 0xe00073a6, + 0x13894: 0xe0006d00, 0x13895: 0xe000a907, 0x13896: 0xe000a917, + 0x1389b: 0xe00070d2, + 0x1389f: 0xe000891d, + 0x138a0: 0xe0009967, 0x138a1: 0xe000699c, 0x138a3: 0xe0006c90, + 0x138a4: 0xe0007460, 0x138a6: 0xe0008a61, + 0x138a9: 0xe0009dcc, 0x138ab: 0xe0007e05, + 0x138ac: 0xe000a84e, 0x138ae: 0xe000a1ee, + 0x138b0: 0xe000a07f, 0x138b3: 0xe0007c3a, + 0x138b9: 0xe0004bf3, 0x138ba: 0xe00048b0, 0x138bb: 0xe0006520, + 0x138bc: 0xe00084d2, 0x138be: 0xe000a305, + // Block 0x4e3, offset 0x138c0 + 0x138c0: 0xe0007eda, 0x138c1: 0xe0005aa9, 0x138c3: 0xe0004847, + 0x138c4: 0xe0006099, 0x138c5: 0xe0008608, 0x138c6: 0xe00050de, + 0x138c9: 0xe0004cb6, + 0x138cc: 0xe0008483, + 0x138d0: 0xe0005220, 0x138d1: 0xe000538e, 0x138d2: 0xe0005b8c, + 0x138d4: 0xe000863e, 0x138d5: 0xe0004719, 0x138d6: 0xe000974e, 0x138d7: 0xe0006069, + 0x138d8: 0xe000809e, 0x138d9: 0xe0009d18, + 0x138de: 0xe00041d8, + 0x138e1: 0xe0006def, + 0x138e6: 0xe000804a, + 0x138e8: 0xe00052d2, + 0x138ec: 0xe0005c1e, 0x138ed: 0xe00050e1, + 0x138f0: 0xe000804d, 0x138f3: 0xe0008486, + 0x138f6: 0xe0007818, + 0x138fd: 0xe0009ba8, 0x138ff: 0xe000471d, + // Block 0x4e4, offset 0x13900 + 0x13903: 0xe00053ee, + 0x13906: 0xe0005a2c, + 0x1390a: 0xe0005bb3, + 0x13912: 0xe0004af1, + 0x13915: 0xe000a4bd, 0x13916: 0xe0006ffc, + 0x13918: 0xe0006abb, 0x1391a: 0xe000996a, + 0x1391e: 0xe00061b5, + 0x1392f: 0xe0005984, + 0x13930: 0xe00097d8, 0x13931: 0xe0007cd6, 0x13932: 0xe0007000, 0x13933: 0xe0007f86, + 0x13935: 0xe0007e98, 0x13936: 0xe0006fb8, 0x13937: 0xe00090f5, + 0x1393d: 0xe0009670, 0x1393e: 0xe0005b42, 0x1393f: 0xe0008336, + // Block 0x4e5, offset 0x13940 + 0x13944: 0xe0008489, 0x13945: 0xe00072ad, 0x13946: 0xe0006b57, 0x13947: 0xe0008d4c, + 0x13949: 0xe00082fe, 0x1394b: 0xe0005cb0, + 0x1394c: 0xe00050e4, + 0x13953: 0xe000a6ac, + 0x13956: 0xe0009703, + 0x13958: 0xe0008f1f, 0x1395a: 0xe00056d9, 0x1395b: 0xe000a16f, + 0x1395d: 0xe0004274, + 0x13961: 0xe000484a, 0x13962: 0xe000909a, + 0x13965: 0xe000699f, 0x13966: 0xe00068dc, + 0x13969: 0xe00045fd, 0x1396a: 0xe000642c, 0x1396b: 0xe0007351, + 0x1396d: 0xe00052e1, 0x1396f: 0xe000503f, + 0x13971: 0xe0004bae, 0x13972: 0xe0008302, + 0x13974: 0xe000a751, 0x13975: 0xe000514a, + 0x1397a: 0xe0009e4a, + // Block 0x4e6, offset 0x13980 + 0x13983: 0xe00081c4, + 0x13984: 0xe0008e9e, 0x13986: 0xe0005392, + 0x1398a: 0xe0004d4f, + 0x1398c: 0xe00064aa, 0x1398e: 0xe0009c0f, + 0x13995: 0xe0006831, 0x13996: 0xe000639c, + 0x13999: 0xe0008db2, 0x1399a: 0xe00064ad, 0x1399b: 0xe000438c, + 0x1399e: 0xe0009e92, + 0x139a0: 0xe00044f1, 0x139a1: 0xe000a46f, + 0x139a4: 0xe000831e, 0x139a5: 0xe0006dbf, + 0x139af: 0xe00048b3, + 0x139b1: 0xe0004b29, + 0x139b4: 0xe0005669, 0x139b7: 0xe000a897, + 0x139b8: 0xe000a88f, + 0x139bd: 0xe00052f5, 0x139be: 0xe0008641, + // Block 0x4e7, offset 0x139c0 + 0x139c2: 0xe000909d, + 0x139c5: 0xe000a351, 0x139c6: 0xe000996d, 0x139c7: 0xe000a355, + 0x139c8: 0xe0005f48, 0x139c9: 0xe0005f5c, 0x139ca: 0xe00094c8, + 0x139d6: 0xe00063dc, + 0x139d8: 0xe0007e09, 0x139da: 0xe0004200, 0x139db: 0xe0004721, + 0x139e3: 0xe0007311, + 0x139e4: 0xe0007531, 0x139e7: 0xe000981a, + 0x139e9: 0xe0007201, 0x139eb: 0xe0009b98, + 0x139ef: 0xe0009e95, + 0x139f0: 0xe00056dc, + 0x139f9: 0xe00093d7, 0x139fa: 0xe000726d, + 0x139fe: 0xe00069a2, + // Block 0x4e8, offset 0x13a00 + 0x13a01: 0xe00065ec, + 0x13a06: 0xe0008a65, + 0x13a0a: 0xe0006e3c, 0x13a0b: 0xe00077c8, + 0x13a0e: 0xe00074f1, + 0x13a10: 0xe00067d1, 0x13a11: 0xe00067d4, 0x13a12: 0xe00044f4, 0x13a13: 0xe0006a0e, + 0x13a14: 0xe00043dc, 0x13a15: 0xe0007e0d, + 0x13a20: 0xe0008f22, + 0x13a24: 0xe00076fb, 0x13a25: 0xe0007004, 0x13a26: 0xe00052b4, + 0x13a2b: 0xe0008e35, + 0x13a2d: 0xe000764b, + 0x13a30: 0xe0007edd, 0x13a31: 0xe0004528, + 0x13a34: 0xe00082c9, 0x13a36: 0xe0005396, 0x13a37: 0xe0009f85, + 0x13a38: 0xe000877a, 0x13a39: 0xe00066e1, 0x13a3a: 0xe0006ea0, + 0x13a3f: 0xe0009c8c, + // Block 0x4e9, offset 0x13a40 + 0x13a40: 0xe0006430, 0x13a42: 0xe0005925, 0x13a43: 0xe0007d5a, + 0x13a44: 0xe0007270, 0x13a46: 0xe00070d5, + 0x13a48: 0xe00045c1, 0x13a4a: 0xe00062f4, 0x13a4b: 0xe0005bd4, + 0x13a4f: 0xe000484d, + 0x13a5a: 0xe00067d7, + 0x13a5c: 0xe0005e13, 0x13a5d: 0xe0007392, 0x13a5e: 0xe0008a69, + 0x13a60: 0xe0004bf6, 0x13a63: 0xe00091d5, + 0x13a68: 0xe0009d9c, 0x13a69: 0xe000530e, + 0x13a70: 0xe0006524, 0x13a73: 0xe0006ea4, + 0x13a74: 0xe0006183, 0x13a75: 0xe000993d, + 0x13a78: 0xe0007273, 0x13a79: 0xe00068e0, 0x13a7a: 0xe00083fa, + 0x13a7d: 0xe00053f2, 0x13a7e: 0xe000a6e5, 0x13a7f: 0xe0005299, + // Block 0x4ea, offset 0x13a80 + 0x13a80: 0xe00056ec, 0x13a82: 0xe00069a5, + 0x13a86: 0xe000791f, + 0x13a8a: 0xe0008db5, + 0x13a8d: 0xe0008c95, 0x13a8f: 0xe0006a8f, + 0x13a91: 0xe0005292, + 0x13a98: 0xe000582b, 0x13a99: 0xe0007aa7, 0x13a9a: 0xe0005928, + 0x13a9d: 0xe000577b, 0x13a9f: 0xe000877e, + 0x13aa0: 0xe00059a4, 0x13aa3: 0xe00074f5, + 0x13aa5: 0xe0007db2, 0x13aa7: 0xe0008782, + 0x13aa8: 0xe0005dbd, 0x13aaa: 0xe000860b, + 0x13aac: 0xe0007963, 0x13aad: 0xe0009970, + 0x13ab3: 0xe00090a0, + 0x13ab4: 0xe00099de, 0x13ab6: 0xe000956c, + 0x13aba: 0xe00054df, 0x13abb: 0xe0009159, + 0x13abc: 0xe0004cb9, 0x13abe: 0xe000826f, + // Block 0x4eb, offset 0x13ac0 + 0x13ac1: 0xe00079d8, 0x13ac2: 0xe0007fba, 0x13ac3: 0xe0006e40, + 0x13ac5: 0xe0004cbc, 0x13ac7: 0xe00079c6, + 0x13ac8: 0xe000a91b, 0x13aca: 0xe0004cbf, + 0x13acc: 0xe0006f28, 0x13acd: 0xe0006b5a, + 0x13ad0: 0xe00090d0, 0x13ad2: 0xe0006dc2, + 0x13ad6: 0xe0009ec5, + 0x13adb: 0xe0009524, + 0x13adc: 0xe0007315, 0x13ade: 0xe0006165, 0x13adf: 0xe0008ee3, + 0x13ae1: 0xe00043e0, + 0x13aea: 0xe000a173, 0x13aeb: 0xe0006434, + 0x13aec: 0xe0006374, + 0x13af3: 0xe00098ea, + 0x13af5: 0xe0009ac9, 0x13af6: 0xe00062f8, 0x13af7: 0xe000a2d5, + 0x13af8: 0xe00041db, 0x13af9: 0xe0006ea8, + 0x13afd: 0xe0006478, + // Block 0x4ec, offset 0x13b00 + 0x13b00: 0xe00067da, + 0x13b05: 0xe00079c9, 0x13b07: 0xe0008be9, + 0x13b11: 0xe0009dec, + 0x13b18: 0xe00070d8, 0x13b19: 0xe00093db, 0x13b1a: 0xe0008db8, + 0x13b1f: 0xe0005699, + 0x13b24: 0xe0008426, 0x13b26: 0xe000a0e3, + 0x13b28: 0xe00060fc, 0x13b2a: 0xe0005ad3, 0x13b2b: 0xe0005ad6, + 0x13b2e: 0xe0004278, 0x13b2f: 0xe00058b5, + 0x13b31: 0xe000427c, 0x13b32: 0xe0006d58, + 0x13b34: 0xe0006910, 0x13b36: 0xe0007ae7, + 0x13b38: 0xe0009706, + 0x13b3e: 0xe000776f, + // Block 0x4ed, offset 0x13b40 + 0x13b4a: 0xe0009570, 0x13b4b: 0xe0008008, + 0x13b4d: 0xe0008692, 0x13b4e: 0xe0004dfb, + 0x13b52: 0xe0005ed7, + 0x13b54: 0xe000a82a, + 0x13b58: 0xe0006a11, 0x13b59: 0xe00067dd, 0x13b5a: 0xe00056f0, + 0x13b5d: 0xe00090a3, 0x13b5f: 0xe0006c5c, + 0x13b61: 0xe0004590, 0x13b62: 0xe000854e, 0x13b63: 0xe0006834, + 0x13b65: 0xe000446d, 0x13b66: 0xe000a472, 0x13b67: 0xe0006df2, + 0x13b68: 0xe000502f, 0x13b69: 0xe0004fd7, 0x13b6a: 0xe000514d, 0x13b6b: 0xe0008166, + 0x13b6c: 0xe000689c, 0x13b6d: 0xe0009cf1, 0x13b6e: 0xe0007c01, 0x13b6f: 0xe0007575, + 0x13b70: 0xe0005150, 0x13b71: 0xe000a565, 0x13b73: 0xe0006438, + 0x13b77: 0xe00090a6, + 0x13b78: 0xe00080a2, 0x13b79: 0xe0004f77, 0x13b7b: 0xe0009838, + 0x13b7c: 0xe000606c, 0x13b7d: 0xe00075c0, 0x13b7e: 0xe0006a14, 0x13b7f: 0xe00085ca, + // Block 0x4ee, offset 0x13b80 + 0x13b85: 0xe0007c3d, + 0x13b91: 0xe0008132, 0x13b92: 0xe0007aeb, 0x13b93: 0xe0005a68, + 0x13b94: 0xe0009c12, 0x13b95: 0xe0009709, 0x13b97: 0xe0006126, + 0x13b9b: 0xe0004199, + 0x13b9c: 0xe00060c8, 0x13b9e: 0xe0009e98, 0x13b9f: 0xe0004cc2, + 0x13ba0: 0xe000629c, 0x13ba1: 0xe000848c, 0x13ba3: 0xe00044f7, + 0x13ba5: 0xe0007829, 0x13ba6: 0xe0004850, 0x13ba7: 0xe0008892, + 0x13bab: 0xe0008b0d, + 0x13bb1: 0xe0007b9f, 0x13bb3: 0xe000569d, + 0x13bb4: 0xe00088d1, + 0x13bb9: 0xe0009e2c, 0x13bba: 0xe0005f3c, 0x13bbb: 0xe0006837, + 0x13bbd: 0xe0004853, 0x13bbe: 0xe0009fa9, 0x13bbf: 0xe0006247, + // Block 0x4ef, offset 0x13bc0 + 0x13bc0: 0xe0006914, 0x13bc1: 0xe0008fd9, 0x13bc2: 0xe0006168, 0x13bc3: 0xe0006568, + 0x13bc4: 0xe000419c, 0x13bc5: 0xe000606f, + 0x13bc8: 0xe0008644, 0x13bc9: 0xe0005ea7, + 0x13bd7: 0xe0006014, + 0x13bdb: 0xe00042a0, + 0x13bdc: 0xe0009574, 0x13bdd: 0xe000945a, + 0x13be3: 0xe0007cd9, + 0x13be8: 0xe000860e, 0x13bea: 0xe0004b51, 0x13beb: 0xe0005edb, + 0x13bef: 0xe00066e5, + 0x13bf1: 0xe0007204, 0x13bf2: 0xe0008647, 0x13bf3: 0xe0004434, + 0x13bf4: 0xe000a6e8, 0x13bf5: 0xe0008516, 0x13bf6: 0xe0005324, + 0x13bf8: 0xe0007f8a, 0x13bf9: 0xe00079cc, + 0x13bfc: 0xe00056a1, + // Block 0x4f0, offset 0x13c00 + 0x13c00: 0xe0007319, 0x13c03: 0xe0008a6d, + 0x13c07: 0xe000a202, + 0x13c09: 0xe000970c, 0x13c0a: 0xe000a3b5, + 0x13c0f: 0xe000859a, + 0x13c10: 0xe0009578, 0x13c11: 0xe000848f, 0x13c12: 0xe000a688, + 0x13c33: 0xe00056c7, + 0x13c37: 0xe000a005, + 0x13c3b: 0xe0008921, + // Block 0x4f1, offset 0x13c40 + 0x13c45: 0xe0005d48, + 0x13c49: 0xe0005d1e, 0x13c4a: 0xe0008786, + 0x13c4e: 0xe0006b5d, + 0x13c52: 0xe00044fa, 0x13c53: 0xe0005f3f, + 0x13c56: 0xe0004725, + 0x13c58: 0xe00074f9, 0x13c5a: 0xe0007aab, 0x13c5b: 0xe0008c59, + 0x13c5d: 0xe0008e86, 0x13c5e: 0xe0007e11, 0x13c5f: 0xe000a0f3, + 0x13c60: 0xe00082cc, 0x13c62: 0xe000a359, + 0x13c68: 0xe0005863, 0x13c69: 0xe00067e0, 0x13c6a: 0xe00075c3, 0x13c6b: 0xe0005e17, + 0x13c7d: 0xe0005edf, 0x13c7e: 0xe0005ef7, 0x13c7f: 0xe000864a, + // Block 0x4f2, offset 0x13c80 + 0x13c81: 0xe0009674, 0x13c82: 0xe0008955, + 0x13c85: 0xe0004a85, + 0x13c89: 0xe0005afa, 0x13c8a: 0xe0004d87, + 0x13c8c: 0xe0004f13, + 0x13c91: 0xe0009a05, 0x13c93: 0xe00049f9, + 0x13c94: 0xe0006719, 0x13c96: 0xe00093df, + 0x13c98: 0xe0007381, + 0x13c9c: 0xe000944b, 0x13c9f: 0xe00055a8, + 0x13ca0: 0xe0009d1b, 0x13ca1: 0xe000a0f7, + 0x13ca9: 0xe000669d, 0x13cab: 0xe0004f7b, + 0x13caf: 0xe000a568, + 0x13cb0: 0xe0004856, 0x13cb1: 0xe0005cd8, 0x13cb2: 0xe00069a8, + 0x13cb4: 0xe00076e3, 0x13cb6: 0xe0006781, + 0x13cb9: 0xe0008895, + 0x13cbd: 0xe00072b1, + // Block 0x4f3, offset 0x13cc0 + 0x13cc3: 0xe0009940, + 0x13cc4: 0xe0005560, 0x13cc6: 0xe0006a17, 0x13cc7: 0xe00087de, + 0x13cca: 0xe0005878, 0x13ccb: 0xe0009494, + 0x13ccc: 0xe0005f7c, 0x13ccd: 0xe0009e18, 0x13cce: 0xe00081c7, + 0x13ce9: 0xe000983b, + 0x13cec: 0xe0005e5b, + 0x13cf1: 0xe000a80e, + 0x13cf5: 0xe0007dd3, + 0x13cf8: 0xe0008272, 0x13cf9: 0xe0009df0, + 0x13cfc: 0xe000764f, 0x13cfd: 0xe0005797, + // Block 0x4f4, offset 0x13d00 + 0x13d06: 0xe00066b5, + 0x13d09: 0xe0007b33, 0x13d0a: 0xe00076ff, + 0x13d11: 0xe0009f60, + 0x13d17: 0xe0008898, + 0x13d1a: 0xe0007589, 0x13d1b: 0xe00042cc, + 0x13d21: 0xe0009e9b, 0x13d23: 0xe000566d, + 0x13d26: 0xe00081ca, + 0x13d29: 0xe0009d1e, 0x13d2a: 0xe00047f9, 0x13d2b: 0xe000a475, + 0x13d2c: 0xe000878a, 0x13d2d: 0xe00041de, 0x13d2f: 0xe000782d, + 0x13d31: 0xe00097e4, 0x13d33: 0xe00081f4, + 0x13d35: 0xe0004ec1, 0x13d37: 0xe000a7f2, + 0x13d3a: 0xe0009011, + // Block 0x4f5, offset 0x13d40 + 0x13d42: 0xe00096be, + 0x13d50: 0xe0007207, + 0x13d54: 0xe000742a, + 0x13d59: 0xe00060dc, + 0x13d5c: 0xe0006bfc, 0x13d5f: 0xe0004d52, + 0x13d61: 0xe000643c, + 0x13d68: 0xe000957c, + 0x13d6d: 0xe0009892, 0x13d6f: 0xe0004b9c, + 0x13d72: 0xe0009e9e, + 0x13d74: 0xe0006bd0, + 0x13d78: 0xe000903d, 0x13d79: 0xe0004689, 0x13d7a: 0xe00091f1, 0x13d7b: 0xe0007831, + 0x13d7c: 0xe00093e3, 0x13d7f: 0xe000a478, + // Block 0x4f6, offset 0x13d80 + 0x13d80: 0xe0007128, 0x13d81: 0xe0009199, 0x13d82: 0xe0006018, + 0x13d84: 0xe00098d2, 0x13d86: 0xe0006e28, + 0x13d89: 0xe0007f8e, 0x13d8a: 0xe0007d9a, 0x13d8b: 0xe0004470, + 0x13d8d: 0xe000742d, + 0x13d90: 0xe0007f3e, 0x13d91: 0xe0006b60, 0x13d93: 0xe00064d1, + 0x13d96: 0xe0006a1a, + 0x13d9a: 0xe000720a, + 0x13dac: 0xe000675d, 0x13dad: 0xe0007703, 0x13dae: 0xe0005988, 0x13daf: 0xe00097e8, + 0x13db1: 0xe0009e30, + 0x13db4: 0xe000731d, + 0x13dbc: 0xe0005bb6, 0x13dbd: 0xe0009fc5, + // Block 0x4f7, offset 0x13dc0 + 0x13dc0: 0xe000683a, + 0x13dc6: 0xe0005ce4, + 0x13dd1: 0xe0005fe4, 0x13dd3: 0xe0005e5f, + 0x13dd4: 0xe00066e9, 0x13dd5: 0xe00096c1, 0x13dd7: 0xe0008611, + 0x13dd8: 0xe0006c60, 0x13dda: 0xe00080d2, + 0x13dde: 0xe0005c06, 0x13ddf: 0xe0008f25, + 0x13de1: 0xe000944e, 0x13de3: 0xe000878e, + 0x13de5: 0xe00097dc, 0x13de6: 0xe0008dbb, + 0x13dea: 0xe0008b11, + 0x13dec: 0xe000708d, 0x13ded: 0xe00083b6, 0x13def: 0xe000915d, + 0x13dfd: 0xe0009e4d, 0x13dff: 0xe00081cd, + // Block 0x4f8, offset 0x13e00 + 0x13e01: 0xe00053f6, 0x13e03: 0xe0006510, + 0x13e06: 0xe0009580, + 0x13e09: 0xe000970f, 0x13e0a: 0xe0007c40, 0x13e0b: 0xe0007c43, + 0x13e0e: 0xe0004bf9, + 0x13e13: 0xe00080a6, + 0x13e15: 0xe00082cf, 0x13e16: 0xe00044fd, + 0x13e18: 0xe0007f19, 0x13e19: 0xe000a3f4, + 0x13e1e: 0xe00096c4, + 0x13e21: 0xe00068e4, 0x13e23: 0xe0007321, + 0x13e24: 0xe00082d2, + 0x13e28: 0xe0004e4f, 0x13e29: 0xe0009be0, 0x13e2a: 0xe000616b, 0x13e2b: 0xe00056a5, + 0x13e2d: 0xe0007090, + 0x13e3a: 0xe0009019, + 0x13e3e: 0xe0005b8f, + // Block 0x4f9, offset 0x13e40 + 0x13e40: 0xe0007d3a, + 0x13e44: 0xe00062fc, 0x13e46: 0xe00077a8, 0x13e47: 0xe0006217, + 0x13e49: 0xe0007c46, 0x13e4a: 0xe00047fc, + 0x13e4c: 0xe000a232, 0x13e4f: 0xe0008429, + 0x13e51: 0xe00043e4, + 0x13e54: 0xe0008792, 0x13e57: 0xe000816a, + 0x13e59: 0xe0009a08, 0x13e5b: 0xe0006f2c, + 0x13e5d: 0xe000542a, + 0x13e64: 0xe000a1da, 0x13e65: 0xe000979c, 0x13e66: 0xe0009528, + 0x13e68: 0xe000a7fe, 0x13e69: 0xe0006c48, 0x13e6a: 0xe00074fd, + 0x13e6f: 0xe0006dc5, + 0x13e70: 0xe000a7d6, + 0x13e7a: 0xe0008c98, + // Block 0x4fa, offset 0x13e80 + 0x13e81: 0xe0004859, + 0x13e89: 0xe0008614, + 0x13e8d: 0xe0005813, 0x13e8e: 0xe0007501, 0x13e8f: 0xe0008796, + 0x13e90: 0xe0006132, + 0x13e95: 0xe000800b, + 0x13e9c: 0xe00058fe, 0x13e9d: 0xe0007c04, + 0x13ea4: 0xe0005724, 0x13ea5: 0xe0007835, + 0x13ea9: 0xe0006514, 0x13eaa: 0xe000720d, + 0x13eb7: 0xe000889b, + 0x13eb9: 0xe00077ab, 0x13eba: 0xe0005d6d, 0x13ebb: 0xe0008d4f, + 0x13ebd: 0xe0009a3e, 0x13ebf: 0xe0004a3d, + // Block 0x4fb, offset 0x13ec0 + 0x13ec0: 0xe0009b4c, 0x13ec2: 0xe0007c07, + 0x13ec4: 0xe0005153, 0x13ec6: 0xe0005aac, 0x13ec7: 0xe0007093, + 0x13eca: 0xe0007d22, 0x13ecb: 0xe0006a93, + 0x13ed6: 0xe000795f, 0x13ed7: 0xe00065a0, + 0x13ed8: 0xe00078d1, 0x13eda: 0xe0006eac, + 0x13ee2: 0xe0005b56, + 0x13ee7: 0xe0004500, + 0x13ee9: 0xe0006528, + 0x13eed: 0xe00057c3, 0x13eef: 0xe0009bf0, + 0x13efc: 0xe000624a, 0x13eff: 0xe0005760, + // Block 0x4fc, offset 0x13f00 + 0x13f01: 0xe0005156, + 0x13f0e: 0xe000a47b, + 0x13f10: 0xe000a037, 0x13f13: 0xe000a76c, + 0x13f14: 0xe000452c, 0x13f15: 0xe000948e, + 0x13f1b: 0xe000a23c, + 0x13f1c: 0xe0005aaf, 0x13f1e: 0xe000800e, 0x13f1f: 0xe000a47e, + 0x13f27: 0xe000a85d, + 0x13f2b: 0xe000a82d, + 0x13f2c: 0xe0004eee, 0x13f2f: 0xe0004ef1, + 0x13f31: 0xe000739a, + 0x13f38: 0xe000864d, 0x13f39: 0xe000a52d, 0x13f3a: 0xe000a830, 0x13f3b: 0xe0005f8c, + // Block 0x4fd, offset 0x13f40 + 0x13f4a: 0xe00061b9, 0x13f4b: 0xe0007c49, + 0x13f4c: 0xe0006440, 0x13f4d: 0xe0006a1d, + 0x13f53: 0xe000851a, + 0x13f55: 0xe0009584, + 0x13f63: 0xe00049aa, + 0x13f64: 0xe0008d52, + 0x13f68: 0xe000683d, 0x13f69: 0xe00099e1, 0x13f6a: 0xe00056df, + 0x13f6f: 0xe0004d55, + 0x13f70: 0xe00082d5, 0x13f71: 0xe0009481, + 0x13f74: 0xe00082d8, + // Block 0x4fe, offset 0x13f80 + 0x13f80: 0xe0008f28, + 0x13f85: 0xe0008b15, 0x13f86: 0xe00088d4, 0x13f87: 0xe0006b63, + 0x13f89: 0xe0005a6c, 0x13f8b: 0xe000536a, + 0x13f94: 0xe000a6eb, + 0x13f99: 0xe0007db5, 0x13f9b: 0xe0008ee6, + 0x13f9e: 0xe000a638, 0x13f9f: 0xe0004bfc, + 0x13fa3: 0xe000518f, + 0x13fa4: 0xe000a113, + 0x13fa9: 0xe00049ce, + 0x13fac: 0xe00049d2, 0x13fad: 0xe00091d9, + 0x13fb8: 0xe00070db, 0x13fb9: 0xe0007fbe, 0x13fbb: 0xe0007039, + 0x13fbe: 0xe00075c6, + // Block 0x4ff, offset 0x13fc0 + 0x13fc0: 0xe0009788, 0x13fc2: 0xe0006761, 0x13fc3: 0xe0007505, + 0x13fc6: 0xe000a309, + 0x13fc8: 0xe0007ca3, 0x13fc9: 0xe0006840, 0x13fca: 0xe0005d4b, 0x13fcb: 0xe0005867, + 0x13fd1: 0xe000539a, + 0x13fd8: 0xe00090a9, 0x13fda: 0xe00069ab, + 0x13fdc: 0xe00062b0, 0x13fdd: 0xe0005159, + 0x13fe1: 0xe0006bae, + 0x13fe5: 0xe0006e44, + 0x13fe8: 0xe0008b39, 0x13fe9: 0xe0008dbe, + 0x13ff4: 0xe00094f0, 0x13ff5: 0xe0007aaf, 0x13ff7: 0xe0004e43, + 0x13ffa: 0xe0007c4c, 0x13ffb: 0xe000968c, + 0x13fff: 0xe000816e, + // Block 0x500, offset 0x14000 + 0x14000: 0xe00056a9, + 0x1400c: 0xe0004a26, 0x1400e: 0xe00042d4, + 0x14015: 0xe000749d, 0x14017: 0xe000a68c, + 0x14019: 0xe0009df4, + 0x1401f: 0xe00081d0, + 0x14020: 0xe000671d, + 0x14024: 0xe00082db, 0x14025: 0xe000609c, 0x14026: 0xe000a008, + 0x14028: 0xe0007396, + 0x1402e: 0xe0006721, + 0x14034: 0xe000a481, 0x14036: 0xe0008b2d, + 0x14038: 0xe0007db8, + // Block 0x501, offset 0x14040 + 0x14042: 0xe000584f, 0x14043: 0xe000647c, + 0x1404c: 0xe00063a0, 0x1404d: 0xe000834e, + 0x14058: 0xe0008453, + 0x1405e: 0xe0005dfb, 0x1405f: 0xe000601c, + 0x14062: 0xe000a3b9, 0x14063: 0xe000574c, + 0x1406d: 0xe0005d4e, + 0x14073: 0xe0005472, + 0x14074: 0xe000919d, + 0x1407a: 0xe0005763, 0x1407b: 0xe0005c21, + 0x1407d: 0xe0008e69, + // Block 0x502, offset 0x14080 + 0x14080: 0xe0007144, + 0x14084: 0xe0009a96, 0x14087: 0xe0005dfe, + 0x1408a: 0xe000609f, 0x1408b: 0xe0007551, + 0x14092: 0xe0005efb, + 0x1409a: 0xe0009da8, 0x1409b: 0xe0009dac, + 0x140a0: 0xe0006378, 0x140a3: 0xe000515c, + 0x140ac: 0xe0006eb0, 0x140af: 0xe0007ee0, + 0x140b2: 0xe0009922, + 0x140b7: 0xe00054a2, + 0x140b9: 0xe000a1b0, 0x140bb: 0xe000842c, + 0x140be: 0xe0006f74, + // Block 0x503, offset 0x140c0 + 0x140c5: 0xe00073de, + 0x140cd: 0xe00042ec, + 0x140d1: 0xe0007bd3, + 0x140d5: 0xe0007ab3, + 0x140df: 0xe000582f, + 0x140e1: 0xe000592b, 0x140e2: 0xe0008f89, 0x140e3: 0xe0005901, + 0x140f1: 0xe000485c, 0x140f2: 0xe000462d, + 0x140f6: 0xe00086f6, + 0x140f9: 0xe00056e2, 0x140fb: 0xe0005e63, + // Block 0x504, offset 0x14100 + 0x14100: 0xe000a321, + 0x14104: 0xe00052f1, 0x14106: 0xe0008fe9, + 0x1410a: 0xe0005fec, + 0x1410c: 0xe000a206, 0x1410d: 0xe0007a73, 0x1410e: 0xe00042a4, + 0x14112: 0xe000a2d9, 0x14113: 0xe0007365, + 0x14117: 0xe000419f, + 0x14119: 0xe00075c9, 0x1411b: 0xe00081d3, + 0x1411d: 0xe0009926, 0x1411e: 0xe00081f7, + 0x14121: 0xe000a3bd, 0x14122: 0xe0004cc5, 0x14123: 0xe000842f, + 0x14128: 0xe0009f06, 0x1412b: 0xe0006c64, + 0x1412e: 0xe000493a, + 0x14130: 0xe0007189, 0x14132: 0xe0005204, + 0x14137: 0xe000992a, + 0x1413d: 0xe00085a6, 0x1413e: 0xe0004fdb, 0x1413f: 0xe0004fdf, + // Block 0x505, offset 0x14140 + 0x14141: 0xe0008136, 0x14142: 0xe0006030, + 0x14148: 0xe00041a2, 0x1414b: 0xe00054e2, + 0x1414d: 0xe0009ea1, + 0x14152: 0xe000536e, + 0x14156: 0xe0007210, 0x14157: 0xe0009161, + 0x1415b: 0xe00088d7, + 0x1415d: 0xe0006843, 0x1415e: 0xe000491e, + 0x14162: 0xe000652c, + 0x1416a: 0xe0004503, 0x1416b: 0xe0009f70, + 0x14174: 0xe000485f, + // Block 0x506, offset 0x14180 + 0x14180: 0xe0008552, 0x14181: 0xe000881e, 0x14182: 0xe00059c8, + 0x14185: 0xe00087e2, + 0x1418a: 0xe00052c9, + 0x1418d: 0xe000493e, 0x1418f: 0xe0005d21, + 0x14192: 0xe0006846, + 0x14194: 0xe0007c0a, 0x14195: 0xe0008275, + 0x14198: 0xe0004d58, 0x14199: 0xe0004db3, + 0x1419c: 0xe00066a0, 0x1419d: 0xe000879a, 0x1419f: 0xe0006b66, + 0x141a1: 0xe0005d24, + 0x141a8: 0xe00069ae, + 0x141af: 0xe0008f2b, + 0x141b1: 0xe0009f2d, 0x141b3: 0xe0006d04, + 0x141b4: 0xe00064b0, 0x141b5: 0xe00064b3, + 0x141b8: 0xe0005766, 0x141b9: 0xe0004a29, + 0x141bd: 0xe0008c9b, 0x141be: 0xe0004506, + // Block 0x507, offset 0x141c0 + 0x141c4: 0xe0009497, 0x141c7: 0xe00066ed, + 0x141ca: 0xe0009df8, + 0x141cc: 0xe0004942, + 0x141d0: 0xe00042d0, 0x141d2: 0xe0009ea4, 0x141d3: 0xe00066a3, + 0x141d5: 0xe00082de, + 0x141d8: 0xe00081d6, 0x141d9: 0xe00064b6, 0x141da: 0xe00088da, + 0x141e5: 0xe0007f32, 0x141e7: 0xe0004785, + 0x141ea: 0xe0009c8f, 0x141eb: 0xe0009a0b, + 0x141f0: 0xe0004548, + 0x141f6: 0xe00073aa, + 0x141f8: 0xe0005c09, 0x141fa: 0xe0009660, 0x141fb: 0xe0006f30, + // Block 0x508, offset 0x14200 + 0x14201: 0xe00043e8, + 0x14204: 0xe00078a5, + 0x1420d: 0xe000871a, + 0x14216: 0xe0007cdc, + 0x14218: 0xe0004b9f, + 0x1421c: 0xe0009624, 0x1421e: 0xe00065b8, 0x1421f: 0xe0004fe3, + 0x14220: 0xe00054a6, + 0x14224: 0xe0005817, + 0x1422a: 0xe0005eab, + 0x1422d: 0xe000a988, 0x1422f: 0xe0009a42, + 0x14232: 0xe00073ae, + 0x14234: 0xe00057db, + 0x1423f: 0xe0006dc8, + // Block 0x509, offset 0x14240 + 0x14241: 0xe0007ee3, 0x14243: 0xe00053fa, + 0x14246: 0xe00066f1, 0x14247: 0xe0009d7b, + 0x14248: 0xe000a1f2, 0x14249: 0xe000515f, 0x1424b: 0xe0004601, + 0x1424f: 0xe0004ec4, + 0x14253: 0xe0005f94, + 0x14256: 0xe0007430, 0x14257: 0xe0006bb1, + 0x14258: 0xe0008b19, + 0x14261: 0xe00045c5, + 0x14268: 0xe0007653, 0x14269: 0xe0005563, 0x1426a: 0xe0009a36, + 0x1426c: 0xe0005162, 0x1426f: 0xe0004d5b, + 0x14272: 0xe0004f7f, + 0x14277: 0xe000949a, + 0x1427a: 0xe0004204, + 0x1427d: 0xe000581b, 0x1427f: 0xe0008959, + // Block 0x50a, offset 0x14280 + 0x14280: 0xe0004a89, + 0x14292: 0xe0004208, + 0x14294: 0xe0004fa7, 0x14296: 0xe0004651, + 0x1429a: 0xe00048b6, + 0x1429c: 0xe0008650, 0x1429d: 0xe00088dd, + 0x142a3: 0xe000a1b3, + 0x142a5: 0xe0004bba, + 0x142b1: 0xe0009fc9, 0x142b3: 0xe00048f6, + 0x142b4: 0xe0006d08, + 0x142b8: 0xe000978c, + // Block 0x50b, offset 0x142c0 + 0x142c0: 0xe0007937, 0x142c2: 0xe0008bed, 0x142c3: 0xe00067e3, + 0x142c7: 0xe0004bbe, + 0x142c8: 0xe00047d2, 0x142c9: 0xe0006570, 0x142ca: 0xe0007509, + 0x142cc: 0xe000a531, 0x142ce: 0xe0009c53, + 0x142d0: 0xe00076bb, 0x142d1: 0xe00084b6, 0x142d3: 0xe000a7da, + 0x142d4: 0xe000839a, 0x142d5: 0xe0006c28, 0x142d6: 0xe000a8d3, 0x142d7: 0xe0009b2c, + 0x142d8: 0xe00050e7, 0x142db: 0xe0007dbb, + 0x142dd: 0xe00075cc, 0x142df: 0xe0007158, + 0x142e2: 0xe000a8bf, 0x142e3: 0xe0004649, + 0x142e5: 0xe00052d9, + 0x142ea: 0xe0006444, + 0x142ed: 0xe0006f34, + 0x142f1: 0xe000a23f, + 0x142f4: 0xe0007096, 0x142f6: 0xe00041a5, + 0x142fa: 0xe0009165, 0x142fb: 0xe0008ee9, + 0x142fc: 0xe0008c5d, 0x142fe: 0xe0008653, + // Block 0x50c, offset 0x14300 + 0x14301: 0xe00048b9, + 0x14306: 0xe00088e0, + 0x1430b: 0xe0008f2e, + 0x14310: 0xe0006b69, 0x14311: 0xe00084b9, + 0x14314: 0xe0008d55, 0x14315: 0xe0009e1c, 0x14316: 0xe0009f79, 0x14317: 0xe000a3d9, + 0x14318: 0xe0004de7, 0x1431b: 0xe000889e, + 0x1431e: 0xe0006b6c, + 0x14320: 0xe0007ba3, 0x14321: 0xe000a7ae, 0x14322: 0xe0007325, 0x14323: 0xe0007c0d, + 0x14326: 0xe0007433, + 0x14329: 0xe0007436, 0x1432b: 0xe0009ae7, + 0x1432c: 0xe0004d5e, 0x1432d: 0xe0004e64, 0x1432e: 0xe00089dd, + 0x14330: 0xe000a97c, 0x14331: 0xe000a56b, 0x14332: 0xe000a1b6, 0x14333: 0xe0006d0c, + 0x14335: 0xe0006eb4, + 0x14339: 0xe0009600, + 0x1433c: 0xe000a703, 0x1433f: 0xe0004b6f, + // Block 0x50d, offset 0x14340 + 0x14342: 0xe0008dc1, + 0x14344: 0xe0005b92, 0x14345: 0xe0008eec, 0x14346: 0xe0004b55, 0x14347: 0xe00049fc, + 0x1434c: 0xe00090ac, 0x1434d: 0xe000851e, + 0x14351: 0xe0004b59, 0x14353: 0xe0006dcb, + 0x14355: 0xe0009b7c, + 0x14358: 0xe0008278, 0x1435a: 0xe0009751, + 0x1435e: 0xe00078f7, + 0x14360: 0xe0007008, 0x14361: 0xe00047d5, 0x14362: 0xe000a30d, 0x14363: 0xe000616e, + 0x14364: 0xe0007ca6, 0x14365: 0xe0004862, 0x14366: 0xe000715c, 0x14367: 0xe0009ec8, + 0x14368: 0xe000a6ee, 0x1436a: 0xe0006f38, + 0x14370: 0xe0007213, 0x14372: 0xe00049ff, + 0x14379: 0xe00069b1, + 0x1437c: 0xe0008432, 0x1437e: 0xe0008366, 0x1437f: 0xe0008d58, + // Block 0x50e, offset 0x14380 + 0x14382: 0xe0009604, + 0x14384: 0xe0007329, 0x14387: 0xe00053fe, + 0x14389: 0xe00081fa, 0x1438b: 0xe0009678, + 0x1438d: 0xe0008847, 0x1438f: 0xe000983e, + 0x14392: 0xe00058b9, + 0x14396: 0xe0005b26, + 0x1439b: 0xe000827b, + 0x1439c: 0xe0009644, 0x1439e: 0xe0009dfc, 0x1439f: 0xe0007463, + 0x143a0: 0xe000a816, 0x143a1: 0xe0007439, + 0x143a4: 0xe0007657, 0x143a6: 0xe00096a3, 0x143a7: 0xe000a1b9, + 0x143aa: 0xe0008bf1, 0x143ab: 0xe0004280, + 0x143ad: 0xe000827e, 0x143ae: 0xe0008617, + 0x143b0: 0xe0007466, 0x143b1: 0xe000a842, 0x143b3: 0xe0007707, + 0x143b4: 0xe000a0fb, 0x143b6: 0xe0007579, 0x143b7: 0xe0009f4c, + 0x143b8: 0xe0008c9e, 0x143ba: 0xe000793b, + 0x143bc: 0xe000a81a, 0x143be: 0xe00051bc, + // Block 0x50f, offset 0x143c0 + 0x143c0: 0xe0006072, 0x143c1: 0xe000769f, 0x143c2: 0xe00081d9, + 0x143c4: 0xe0005728, 0x143c7: 0xe000454c, + 0x143cc: 0xe00041e1, 0x143ce: 0xe000621a, + 0x143d0: 0xe00062b4, 0x143d1: 0xe000a412, + 0x143d4: 0xe000a03b, 0x143d6: 0xe0007108, 0x143d7: 0xe0006448, + 0x143d9: 0xe0004665, 0x143da: 0xe00084d6, 0x143db: 0xe00043ec, + 0x143dc: 0xe0008172, 0x143dd: 0xe0006b6f, + 0x143e0: 0xe0007ee6, 0x143e3: 0xe0008050, + 0x143e6: 0xe0004789, + 0x143e8: 0xe0006075, 0x143eb: 0xe0008925, + 0x143ec: 0xe0005c4b, + 0x143f3: 0xe0004cc8, + 0x143f7: 0xe0007cdf, + 0x143f9: 0xe0004f83, + 0x143fe: 0xe0005e83, + // Block 0x510, offset 0x14400 + 0x14401: 0xe000a56e, 0x14403: 0xe000a7b1, + 0x14409: 0xe0009041, + 0x1440c: 0xe0007dd6, 0x1440e: 0xe000a873, 0x1440f: 0xe00050ea, + 0x14414: 0xe0006ef8, 0x14416: 0xe0009377, + 0x14418: 0xe00074a1, 0x14419: 0xe0009754, 0x1441a: 0xe0005402, + 0x1441c: 0xe00066a6, 0x1441f: 0xe0008dc4, + 0x14426: 0xe0004729, + 0x1442b: 0xe0006f94, + 0x1442c: 0xe00069b4, 0x1442f: 0xe00079f3, + 0x14430: 0xe0008435, 0x14431: 0xe0006efc, + 0x14434: 0xe0004605, 0x14437: 0xe000a484, + 0x1443d: 0xe0007c10, 0x1443f: 0xe000a415, + // Block 0x511, offset 0x14440 + 0x14440: 0xe00055e1, + 0x14449: 0xe00082e1, 0x1444a: 0xe00065cc, + 0x1444c: 0xe0007ab7, 0x1444e: 0xe0007276, + 0x14450: 0xe0007216, 0x14452: 0xe0009347, 0x14453: 0xe00078a9, + 0x14456: 0xe000934b, + 0x1445a: 0xe00092d7, + 0x1445c: 0xe00054aa, 0x1445e: 0xe000794b, + // Block 0x512, offset 0x14480 + 0x144b7: 0xe00048e2, + 0x144bf: 0xe00047d8, + // Block 0x513, offset 0x144c0 + 0x144c1: 0xe000a630, + 0x144c6: 0xe00056ca, 0x144c7: 0xe0004438, + 0x144c8: 0xe00050ed, 0x144c9: 0xe0007469, 0x144ca: 0xe0009f50, + 0x144cc: 0xe0007e15, 0x144ce: 0xe0007279, + 0x144d5: 0xe000743c, 0x144d6: 0xe00098ee, + 0x144da: 0xe000560d, + 0x144e1: 0xe0006d10, 0x144e2: 0xe000a610, + 0x144e8: 0xe000a976, 0x144ea: 0xe000a487, 0x144eb: 0xe0007c13, + 0x144ec: 0xe00088e3, + 0x144f3: 0xe0006a97, + 0x144f8: 0xe0009a0e, 0x144f9: 0xe0009f09, 0x144fa: 0xe000743f, + // Block 0x514, offset 0x14500 + 0x14502: 0xe0009712, 0x14503: 0xe0005f60, + 0x1450a: 0xe0005f4c, + 0x1450c: 0xe0006078, 0x1450d: 0xe0005d51, + 0x14513: 0xe0006135, + 0x14514: 0xe0006a20, + 0x14518: 0xe0005f64, + 0x1451d: 0xe0009d7e, 0x1451e: 0xe0008bf5, + 0x14520: 0xe00067e6, 0x14521: 0xe0008821, 0x14522: 0xe00049ae, + 0x14527: 0xe0006a73, + 0x14528: 0xe000a571, 0x14529: 0xe0009d38, 0x1452a: 0xe0009bac, 0x1452b: 0xe0004a8d, + 0x1452c: 0xe0009469, 0x1452f: 0xe00088a1, + 0x14530: 0xe000702d, 0x14532: 0xe0008656, 0x14533: 0xe0008495, + 0x14534: 0xe0004e9d, 0x14536: 0xe0009e00, 0x14537: 0xe0005f21, + 0x14538: 0xe00054e5, 0x1453a: 0xe000a6b0, 0x1453b: 0xe00069b7, + 0x1453c: 0xe0009648, 0x1453d: 0xe0008492, 0x1453f: 0xe0006171, + // Block 0x515, offset 0x14540 + 0x14540: 0xe000a00b, 0x14541: 0xe00068a0, 0x14542: 0xe0005b6e, 0x14543: 0xe000859e, + 0x14544: 0xe000a6f1, 0x14546: 0xe00065f0, 0x14547: 0xe000861a, + 0x14548: 0xe00041a8, 0x1454a: 0xe0008929, + 0x14551: 0xe0009169, 0x14553: 0xe0006a77, + 0x14559: 0xe0008f31, 0x1455a: 0xe0005b71, + 0x1455c: 0xe0006b72, 0x1455e: 0xe0006d14, + 0x14560: 0xe00064b9, 0x14561: 0xe00044a6, 0x14562: 0xe000a2dd, 0x14563: 0xe0005f24, + 0x14564: 0xe000952c, 0x14566: 0xe00067e9, + 0x1456a: 0xe00091dd, + 0x1456c: 0xe00087e6, 0x1456d: 0xe0005566, + 0x14574: 0xe0005b74, + 0x1457b: 0xe00067ec, + 0x1457c: 0xe0004ccb, 0x1457d: 0xe0006d46, + // Block 0x516, offset 0x14580 + 0x14584: 0xe00090af, 0x14585: 0xe0009943, 0x14587: 0xe0008322, + 0x14588: 0xe0009045, 0x1458a: 0xe00092db, 0x1458b: 0xe0007693, + 0x1458d: 0xe0006f78, 0x1458f: 0xe0007bd7, + 0x14590: 0xe0007535, 0x14593: 0xe000879e, + 0x14594: 0xe0006a23, 0x14596: 0xe000710c, + 0x1459b: 0xe00049d6, + // Block 0x517, offset 0x145c0 + 0x145e4: 0xe000892d, 0x145e6: 0xe0006b75, 0x145e7: 0xe00051d4, + 0x145eb: 0xe000a281, + 0x145ed: 0xe0008659, + 0x145f0: 0xe0008eef, 0x145f3: 0xe0004ec7, + 0x145f4: 0xe00067ef, 0x145f6: 0xe00042a8, 0x145f7: 0xe00050f0, + // Block 0x518, offset 0x14600 + 0x14601: 0xe00091a1, + 0x14605: 0xe0009715, + 0x1460a: 0xe000818a, + 0x1460e: 0xe0008f34, + 0x14610: 0xe000a32d, + 0x14619: 0xe0008d5b, + 0x14620: 0xe0009757, 0x14623: 0xe0009973, + 0x14628: 0xe0009841, 0x1462b: 0xe0004c38, + 0x14632: 0xe0009307, 0x14633: 0xe0008de1, + 0x1463a: 0xe00067f2, + 0x1463e: 0xe00090b2, + // Block 0x519, offset 0x14640 + 0x14642: 0xe0005165, + 0x14646: 0xe0009c15, + 0x1464b: 0xe00063c0, + 0x1464c: 0xe00091e1, 0x1464e: 0xe0009aea, 0x1464f: 0xe00041ab, + 0x14655: 0xe0008b3d, 0x14656: 0xe00094f4, 0x14657: 0xe0006849, + 0x1465b: 0xe0009cf4, + 0x1465d: 0xe00044d3, 0x1465f: 0xe0004fab, + 0x14661: 0xe0008931, 0x14663: 0xe0006eb8, + 0x14668: 0xe0004a02, 0x1466a: 0xe0004e8b, 0x1466b: 0xe00049da, + 0x1466c: 0xe0004ef4, 0x1466f: 0xe0005ab2, + 0x14671: 0xe0009a11, 0x14673: 0xe0005569, + 0x1467c: 0xe0004d9f, + // Block 0x51a, offset 0x14680 + 0x14686: 0xe0008fbd, + 0x14688: 0xe00070de, 0x14689: 0xe00058d5, 0x1468a: 0xe0007f92, + 0x1468f: 0xe0005446, + 0x14690: 0xe0009530, + 0x14694: 0xe0009b50, + 0x1469d: 0xe0004a2c, 0x1469e: 0xe00044d6, 0x1469f: 0xe00090d3, + 0x146aa: 0xe0008e39, + 0x146b0: 0xe0008281, + 0x146b4: 0xe0007fc2, 0x146b5: 0xe0008e3d, 0x146b6: 0xe0008cd1, + 0x146bd: 0xe0008053, + // Block 0x51b, offset 0x146c0 + 0x146c0: 0xe0008b41, 0x146c2: 0xe0008284, + 0x146c4: 0xe0008ca1, 0x146c7: 0xe0004530, + 0x146c8: 0xe000556c, 0x146c9: 0xe0009266, 0x146ca: 0xe000a3f7, + 0x146cc: 0xe000941b, 0x146cf: 0xe0008cd4, + 0x146d5: 0xe0009fcd, + 0x146d9: 0xe00098d6, + 0x146dc: 0xe00098f2, 0x146df: 0xe0008935, + 0x146e0: 0xe00094cc, 0x146e3: 0xe0005e87, + 0x146e4: 0xe0008e6d, + 0x146f2: 0xe0008fc1, + 0x146f4: 0xe00098da, 0x146f6: 0xe0004e53, + 0x146fb: 0xe0004c3b, + // Block 0x51c, offset 0x14700 + 0x14701: 0xe0008d5e, + 0x14705: 0xe00097a0, 0x14707: 0xe00088a4, + 0x14709: 0xe000561d, 0x1470a: 0xe0008ef2, 0x1470b: 0xe0008cd7, + 0x1470d: 0xe0007839, + 0x14710: 0xe00059fc, 0x14711: 0xe00094f8, 0x14713: 0xe00090d6, + 0x14714: 0xe0008a71, + 0x14719: 0xe0005d9d, + 0x14721: 0xe0006fbc, + 0x14729: 0xe0004a4d, 0x1472a: 0xe0005d71, 0x1472b: 0xe000750d, + 0x1472c: 0xe0004dff, + 0x14731: 0xe0009aed, 0x14733: 0xe0004e03, + // Block 0x51d, offset 0x14740 + 0x14740: 0xe0004cce, + 0x14746: 0xe00096c7, + 0x1474a: 0xe0009269, 0x1474b: 0xe00076a3, + 0x1474c: 0xe0004e67, 0x1474d: 0xe0004db7, + 0x14752: 0xe000a251, + 0x1475f: 0xe0007a77, + 0x14768: 0xe0005a70, 0x1476b: 0xe000916d, + 0x14778: 0xe00098de, 0x14779: 0xe00090d9, 0x1477a: 0xe000975a, 0x1477b: 0xe00041ae, + 0x1477c: 0xe000857e, 0x1477e: 0xe00074a5, + // Block 0x51e, offset 0x14780 + 0x14783: 0xe0004bff, + 0x14785: 0xe0005ab5, 0x14787: 0xe0008a75, + 0x14788: 0xe0008f37, 0x14789: 0xe0008824, + 0x14792: 0xe000964c, 0x14793: 0xe0005e67, + 0x14794: 0xe00066a9, 0x14795: 0xe000472d, + 0x1479b: 0xe00058bd, + 0x1479c: 0xe00099e4, 0x1479d: 0xe000a845, 0x1479e: 0xe0005ee3, 0x1479f: 0xe00095ac, + 0x147a6: 0xe000598c, 0x147a7: 0xe0006650, + 0x147a8: 0xe0004ab9, 0x147a9: 0xe00064bc, 0x147aa: 0xe0005c84, + 0x147af: 0xe0009215, + 0x147b0: 0xe00078d5, 0x147b3: 0xe0008ef5, + 0x147b8: 0xe0007219, 0x147b9: 0xe00066f5, 0x147bb: 0xe00066f9, + 0x147be: 0xe00089e1, 0x147bf: 0xe00079cf, + // Block 0x51f, offset 0x147c0 + 0x147c0: 0xe0007d3e, 0x147c2: 0xe00048fa, + 0x147c4: 0xe000a0bb, 0x147c5: 0xe000813a, 0x147c6: 0xe0005b1e, + 0x147c9: 0xe00089e5, + 0x147cd: 0xe00095b0, 0x147ce: 0xe0004c02, + 0x147d2: 0xe00068e8, + 0x147d4: 0xe0005da1, 0x147d7: 0xe0004374, + 0x147d8: 0xe000a614, + 0x147dd: 0xe00079d2, 0x147de: 0xe000a0ff, 0x147df: 0xe0004bb2, + 0x147e1: 0xe0006a26, 0x147e2: 0xe0005948, 0x147e3: 0xe0005960, + 0x147e4: 0xe0005ad9, + // Block 0x520, offset 0x14800 + 0x1481b: 0xe0007511, + 0x1481c: 0xe0004865, 0x1481f: 0xe0009f7c, + 0x14822: 0xe00057f3, 0x14823: 0xe00057eb, + 0x14826: 0xe0009d3c, + 0x14828: 0xe00065d0, + 0x1482d: 0xe0006b78, 0x1482e: 0xe00065e8, 0x1482f: 0xe00065d4, + 0x14830: 0xe0009171, 0x14831: 0xe0007f36, 0x14832: 0xe000529d, + 0x1483b: 0xe000759d, + 0x1483f: 0xe0009588, + // Block 0x521, offset 0x14840 + 0x14840: 0xe00042ac, 0x14842: 0xe0008011, 0x14843: 0xe0007ce2, + 0x14844: 0xe000a8e3, 0x14845: 0xe0007515, + 0x1484d: 0xe0005704, 0x1484e: 0xe0007ba7, + 0x14851: 0xe0004f87, 0x14853: 0xe00075f6, + 0x14854: 0xe000637c, 0x14855: 0xe0007ce5, + 0x14862: 0xe000975d, + 0x14864: 0xe00084bc, 0x14865: 0xe000a3dd, 0x14866: 0xe00041b1, + 0x14868: 0xe0009c2a, 0x1486a: 0xe0008939, 0x1486b: 0xe0006300, + 0x1486c: 0xe0007e61, 0x1486d: 0xe00091e5, + 0x14870: 0xe0007369, 0x14872: 0xe000459c, + 0x14874: 0xe000a706, 0x14877: 0xe000621d, + 0x14878: 0xe000666c, 0x14879: 0xe000893d, 0x1487a: 0xe000522c, + 0x1487d: 0xe0009844, + // Block 0x522, offset 0x14880 + 0x14880: 0xe0009c92, 0x14881: 0xe0007160, 0x14882: 0xe0004ae1, 0x14883: 0xe000556f, + 0x14885: 0xe000a796, 0x14886: 0xe00079f7, + 0x14888: 0xe000a3c1, 0x1488b: 0xe0009ea7, + 0x1488c: 0xe00082e4, 0x1488d: 0xe0007099, 0x1488f: 0xe0009ca7, + 0x14890: 0xe00098e2, 0x14891: 0xe0004cd1, + 0x14894: 0xe0005572, 0x14895: 0xe0004731, 0x14896: 0xe000895d, 0x14897: 0xe00056cd, + 0x14899: 0xe00088a7, 0x1489a: 0xe0009c76, + 0x1489d: 0xe0006dce, 0x1489e: 0xe0005a30, 0x1489f: 0xe0007110, + 0x148a0: 0xe0008d61, 0x148a1: 0xe0008f8d, 0x148a2: 0xe0006765, 0x148a3: 0xe0005990, + 0x148ae: 0xe00096a6, + 0x148b1: 0xe0008ef8, 0x148b2: 0xe0009175, + 0x148b4: 0xe0009b54, 0x148b5: 0xe0004eca, 0x148b6: 0xe00081fd, + 0x148b8: 0xe000856e, + 0x148bc: 0xe0009fe5, 0x148be: 0xe000828a, + // Block 0x523, offset 0x148c0 + 0x148c1: 0xe00056f4, 0x148c2: 0xe000721c, + 0x148c7: 0xe0008014, + 0x148c9: 0xe0008c61, 0x148ca: 0xe0008287, 0x148cb: 0xe00080aa, + 0x148cd: 0xe0009dd0, 0x148ce: 0xe0004a05, 0x148cf: 0xe00076bf, + 0x148d0: 0xe000a00e, 0x148d1: 0xe000a690, 0x148d2: 0xe0008f3a, 0x148d3: 0xe0005575, + 0x148d4: 0xe00053ae, 0x148d5: 0xe00081dc, + 0x148d8: 0xe0004d61, 0x148d9: 0xe0007ee9, 0x148db: 0xe0005c5a, + 0x148dc: 0xe000712c, 0x148dd: 0xe000544a, 0x148de: 0xe00096a9, + 0x148e0: 0xe000813e, 0x148e1: 0xe000709c, 0x148e3: 0xe0004609, + 0x148e8: 0xe0007ce8, 0x148e9: 0xe0008941, + 0x148ec: 0xe0007118, 0x148ed: 0xe0008d64, 0x148ee: 0xe000926c, 0x148ef: 0xe00056f8, + 0x148f2: 0xe00090b5, + 0x148f5: 0xe0008f91, 0x148f6: 0xe0007f1c, 0x148f7: 0xe0009534, + 0x148f8: 0xe0006ebc, 0x148fa: 0xe000828d, + 0x148fc: 0xe0005bb9, 0x148fd: 0xe00044d9, 0x148ff: 0xe0009f73, + // Block 0x524, offset 0x14900 + 0x14900: 0xe0007eec, 0x14901: 0xe0005f27, 0x14902: 0xe000a1bc, 0x14903: 0xe000721f, + 0x14904: 0xe000a5e8, 0x14905: 0xe0008a79, 0x14907: 0xe0008498, + 0x14908: 0xe0005e1b, 0x1490a: 0xe00065d8, + 0x1490c: 0xe000592e, 0x1490f: 0xe0005769, + 0x14910: 0xe0005d54, 0x14911: 0xe00083e2, + 0x14915: 0xe0007d76, + 0x14919: 0xe0005ee7, + 0x14920: 0xe0006a9b, 0x14922: 0xe000a3c5, 0x14923: 0xe00051aa, + 0x14926: 0xe000644c, + 0x14928: 0xe00097b4, 0x1492a: 0xe0006b7b, + 0x1492f: 0xe0004334, + 0x14930: 0xe0009c18, 0x14931: 0xe0004cd4, 0x14933: 0xe0006a29, + 0x14935: 0xe000709f, + 0x14938: 0xe00088aa, + 0x1493d: 0xe0004ef7, + // Block 0x525, offset 0x14940 + 0x14941: 0xe000807e, 0x14943: 0xe000a13b, + 0x14944: 0xe0004f4f, 0x14945: 0xe00091f5, + 0x1494a: 0xe0004c05, + 0x1495c: 0xe00048bc, 0x1495d: 0xe000a053, 0x1495e: 0xe0005853, + 0x14961: 0xe0004dbb, 0x14962: 0xe0007bdb, + 0x14968: 0xe00067f5, 0x1496a: 0xe000949d, 0x1496b: 0xe0006a2c, + 0x1496d: 0xe0004a41, 0x1496f: 0xe000542e, + 0x14974: 0xe0009a8a, 0x14975: 0xe0008017, + 0x1497d: 0xe0005578, + // Block 0x526, offset 0x14980 + 0x14982: 0xe0007623, + 0x14992: 0xe0009847, + 0x14995: 0xe000a21e, + 0x14999: 0xe00069ba, + 0x1499e: 0xe000839e, + 0x149a2: 0xe000794f, 0x149a3: 0xe00087ea, + 0x149a7: 0xe000572c, + 0x149ad: 0xe0008bf9, + 0x149b0: 0xe0005da5, 0x149b1: 0xe0009d21, 0x149b2: 0xe0005372, + 0x149b4: 0xe00079a3, + 0x149bd: 0xe0008a7d, + // Block 0x527, offset 0x149c0 + 0x149c8: 0xe0005964, 0x149c9: 0xe0008290, 0x149ca: 0xe0008bfd, 0x149cb: 0xe000984a, + 0x149cc: 0xe0008696, 0x149cd: 0xe00064bf, 0x149ce: 0xe0008efb, + 0x149d2: 0xe0008efe, + 0x149d6: 0xe0009bb8, 0x149d7: 0xe000a7b4, + 0x149e2: 0xe0009718, 0x149e3: 0xe0004378, + 0x149e4: 0xe00048bf, 0x149e5: 0xe00070e1, + 0x149e9: 0xe0006020, 0x149ea: 0xe000579b, + 0x149ec: 0xe0007222, + 0x149f2: 0xe0008c65, + 0x149f4: 0xe00055ab, 0x149f5: 0xe000a754, 0x149f6: 0xe0005f42, 0x149f7: 0xe000a4d1, + 0x149f8: 0xe0006c00, 0x149f9: 0xe0005b95, + // Block 0x528, offset 0x14a00 + 0x14a03: 0xe000798f, + 0x14a07: 0xe000732d, + 0x14a09: 0xe0009976, 0x14a0b: 0xe000971b, + 0x14a0d: 0xe0008ca4, + 0x14a10: 0xe000a4c0, 0x14a12: 0xe000700c, + 0x14a1c: 0xe000984d, 0x14a1e: 0xe0007d42, + 0x14a22: 0xe000a1dd, + 0x14a2a: 0xe0005bd7, 0x14a2b: 0xe0008438, + 0x14a2c: 0xe00087a2, 0x14a2e: 0xe000971e, 0x14a2f: 0xe000a3fa, + 0x14a31: 0xe00063c4, 0x14a32: 0xe00052ad, + 0x14a34: 0xe0005a85, 0x14a35: 0xe00044ae, + // Block 0x529, offset 0x14a40 + 0x14a40: 0xe00078ad, 0x14a41: 0xe000a8c3, 0x14a43: 0xe000746c, + 0x14a45: 0xe0007b1b, 0x14a47: 0xe0009451, + 0x14a49: 0xe0008293, 0x14a4b: 0xe0006e2c, + 0x14a4c: 0xe0005d27, 0x14a4d: 0xe0008fed, 0x14a4e: 0xe000781b, 0x14a4f: 0xe00058c1, + 0x14a50: 0xe0005d2a, 0x14a51: 0xe0005193, + 0x14a57: 0xe000718c, + 0x14a58: 0xe0008c01, + 0x14a5c: 0xe00067f8, 0x14a5d: 0xe0009a72, + 0x14a63: 0xe0008d67, + 0x14a64: 0xe0006c6c, 0x14a66: 0xe0004d64, 0x14a67: 0xe0009538, + 0x14a6a: 0xe000801a, + 0x14a6d: 0xe00049de, + 0x14a75: 0xe0009454, + 0x14a7f: 0xe0004faf, + // Block 0x52a, offset 0x14a80 + 0x14a87: 0xe000684c, + 0x14a8d: 0xe00056fc, + 0x14a90: 0xe0004584, 0x14a91: 0xe0009d40, 0x14a92: 0xe0006c7c, + 0x14a94: 0xe0009760, 0x14a97: 0xe0008326, + 0x14a9c: 0xe000a72b, 0x14a9e: 0xe0004f17, 0x14a9f: 0xe0008dc7, + 0x14ab4: 0xe0005a34, 0x14ab5: 0xe0006670, 0x14ab7: 0xe00048c2, + 0x14ab8: 0xe00063e0, 0x14aba: 0xe0007d0a, + 0x14abf: 0xe00089e9, + // Block 0x52b, offset 0x14ac0 + 0x14ac0: 0xe0004390, 0x14ac1: 0xe00091a5, + 0x14ac5: 0xe00044dc, + 0x14ac9: 0xe000a2e1, 0x14acb: 0xe0009ecb, + 0x14ace: 0xe0006d7c, 0x14acf: 0xe0006df5, + 0x14ad0: 0xe0006e48, 0x14ad2: 0xe0008f3d, + 0x14ad7: 0xe0004669, + 0x14adb: 0xe0007a7b, + 0x14ade: 0xe000818e, + 0x14ae2: 0xe00063c8, + 0x14ae4: 0xe0004cd7, 0x14ae5: 0xe000736d, 0x14ae6: 0xe0008c05, + 0x14af7: 0xe000a545, + 0x14af8: 0xe0004c3e, + 0x14afc: 0xe0006678, 0x14afe: 0xe00060a2, + // Block 0x52c, offset 0x14b00 + 0x14b00: 0xe000836a, 0x14b03: 0xe00097e0, + 0x14b05: 0xe0005671, + 0x14b0b: 0xe00085aa, + 0x14b11: 0xe0006ec0, 0x14b13: 0xe00089ed, + 0x14b15: 0xe00095d0, 0x14b16: 0xe0007225, + 0x14b18: 0xe0006024, 0x14b19: 0xe0004a2f, 0x14b1a: 0xe0008dca, 0x14b1b: 0xe0006f98, + 0x14b1c: 0xe000a0e7, + 0x14b33: 0xe0007c16, + 0x14b36: 0xe0004cda, 0x14b37: 0xe00070a2, + 0x14b39: 0xe0007228, + // Block 0x52d, offset 0x14b40 + 0x14b46: 0xe0008332, + 0x14b4c: 0xe0008c09, 0x14b4f: 0xe000a35d, + 0x14b51: 0xe0008a81, 0x14b52: 0xe0006769, + 0x14b57: 0xe000a311, + 0x14b5f: 0xe0009a8e, + 0x14b64: 0xe0006dd1, 0x14b65: 0xe0008c69, + 0x14b6a: 0xe0009eaa, + 0x14b72: 0xe0006674, + 0x14b78: 0xe00044df, 0x14b79: 0xe000941f, 0x14b7a: 0xe0008176, + 0x14b7c: 0xe00043f0, 0x14b7d: 0xe0008dcd, + // Block 0x52e, offset 0x14b80 + 0x14b84: 0xe0005afe, 0x14b86: 0xe0009423, + 0x14b8f: 0xe00075f9, + 0x14b90: 0xe0009850, + 0x14b95: 0xe0004946, + 0x14b98: 0xe0009853, 0x14b99: 0xe0009a14, 0x14b9a: 0xe000884b, + 0x14b9e: 0xe0007331, 0x14b9f: 0xe0005406, + 0x14ba0: 0xe0008c0d, 0x14ba1: 0xe00050f3, 0x14ba2: 0xe00089f1, 0x14ba3: 0xe00095d4, + 0x14ba4: 0xe00050f6, 0x14ba6: 0xe0004fe7, 0x14ba7: 0xe0004abd, + 0x14ba8: 0xe0006129, 0x14baa: 0xe0008a85, 0x14bab: 0xe0006e30, + 0x14bac: 0xe00056ad, 0x14bae: 0xe0004868, 0x14baf: 0xe0009297, + // Block 0x52f, offset 0x14bc0 + 0x14bc8: 0xe0007bab, 0x14bc9: 0xe000746f, 0x14bca: 0xe0005994, 0x14bcb: 0xe0004a08, + 0x14bcd: 0xe000557b, + 0x14bd4: 0xe0007627, 0x14bd7: 0xe0008cda, + 0x14bdb: 0xe0005376, + 0x14bdc: 0xe000a02c, 0x14bdd: 0xe0008056, + 0x14be4: 0xe0006c94, + 0x14beb: 0xe0009763, + 0x14bec: 0xe0009766, 0x14bee: 0xe0008296, + 0x14bf0: 0xe000a618, + 0x14bf5: 0xe0004534, + 0x14bfc: 0xe0009a76, 0x14bfe: 0xe0008e41, + // Block 0x530, offset 0x14c00 + 0x14c0a: 0xe0006480, + 0x14c0c: 0xe000466d, + 0x14c14: 0xe0007f96, 0x14c16: 0xe000717d, 0x14c17: 0xe000885b, + 0x14c1a: 0xe0009856, 0x14c1b: 0xe0006318, + 0x14c1f: 0xe0006d34, + 0x14c21: 0xe000865c, 0x14c23: 0xe000a3c9, + 0x14c24: 0xe000a6b4, 0x14c27: 0xe0004473, + 0x14c2c: 0xe000a48a, 0x14c2d: 0xe0009179, + 0x14c30: 0xe0008572, + // Block 0x531, offset 0x14c40 + 0x14c43: 0xe0008de5, + 0x14c47: 0xe0006f00, + 0x14c48: 0xe00059a8, 0x14c4a: 0xe0007ceb, 0x14c4b: 0xe0005e8b, + 0x14c4c: 0xe0005e23, + 0x14c51: 0xe0008945, + 0x14c56: 0xe0007cee, 0x14c57: 0xe00044aa, + 0x14c58: 0xe00087ee, + 0x14c5c: 0xe00054ae, 0x14c5d: 0xe0005e8f, 0x14c5e: 0xe0007f9a, 0x14c5f: 0xe0006c2c, + 0x14c61: 0xe0004735, 0x14c62: 0xe0009f30, + 0x14c64: 0xe0005c0c, 0x14c66: 0xe00097ec, + 0x14c68: 0xe000937b, + 0x14c76: 0xe0009219, + 0x14c7b: 0xe0005da9, + // Block 0x532, offset 0x14c80 + 0x14c83: 0xe00052cc, + 0x14c84: 0xe000a723, + 0x14c8f: 0xe0008fc5, + 0x14c90: 0xe0005bda, 0x14c93: 0xe00054fd, + 0x14c94: 0xe000758d, + 0x14c98: 0xe0008e45, 0x14c99: 0xe0005750, + 0x14ca5: 0xe0006ec4, + 0x14caa: 0xe0005adc, 0x14cab: 0xe00089f5, + 0x14cb5: 0xe00095b4, 0x14cb6: 0xe000a61c, + 0x14cb8: 0xe0009b30, 0x14cba: 0xe00054b2, + // Block 0x533, offset 0x14cc0 + 0x14cc2: 0xe000a7f6, + 0x14cc4: 0xe0008f01, + 0x14cca: 0xe000a5ac, + 0x14ccc: 0xe0006a9f, + 0x14cd1: 0xe0004338, 0x14cd2: 0xe000433c, + 0x14cd5: 0xe00091f9, + 0x14cdb: 0xe0004b2d, + 0x14cde: 0xe0005833, + 0x14ce0: 0xe0006bd4, 0x14ce2: 0xe0005931, 0x14ce3: 0xe0009f33, + 0x14cea: 0xe0005adf, + 0x14cf0: 0xe000784d, 0x14cf1: 0xe000937f, 0x14cf2: 0xe00078d9, + 0x14cf5: 0xe0004ac1, 0x14cf7: 0xe0006fc0, + 0x14cfc: 0xe000577e, 0x14cfd: 0xe00092df, 0x14cfe: 0xe00057df, 0x14cff: 0xe000929b, + // Block 0x534, offset 0x14d00 + 0x14d37: 0xe00087a6, + // Block 0x535, offset 0x14d40 + 0x14d40: 0xe00061bd, 0x14d43: 0xe0006f7c, + 0x14d48: 0xe000a0a7, 0x14d49: 0xe0009e50, 0x14d4a: 0xe0006c30, 0x14d4b: 0xe0004476, + 0x14d4e: 0xe0004bc2, 0x14d4f: 0xe000832a, + 0x14d51: 0xe000a083, 0x14d52: 0xe000a087, 0x14d53: 0xe0004284, + 0x14d54: 0xe0006280, + 0x14d58: 0xe0004394, + 0x14d5f: 0xe0006a2f, + 0x14d63: 0xe000420c, + 0x14d64: 0xe000a117, 0x14d65: 0xe000653c, + 0x14d68: 0xe0004ecd, 0x14d69: 0xe00062a0, 0x14d6b: 0xe000494a, + 0x14d6c: 0xe000586b, 0x14d6d: 0xe0005904, + 0x14d71: 0xe0007acb, + 0x14d76: 0xe0009427, + 0x14d79: 0xe0007993, 0x14d7b: 0xe0007aef, + 0x14d7c: 0xe00076a7, 0x14d7d: 0xe000a4fd, 0x14d7e: 0xe0007a0b, + // Block 0x536, offset 0x14d80 + 0x14d83: 0xe00045d5, + 0x14d87: 0xe00076e7, + 0x14d88: 0xe0008200, 0x14d8a: 0xe000a634, 0x14d8b: 0xe0004655, + 0x14d8c: 0xe00057e3, 0x14d8d: 0xe00055ae, + 0x14d93: 0xe000448b, + 0x14d94: 0xe000a11b, 0x14d95: 0xe0004e57, 0x14d96: 0xe0009cc6, + 0x14d9a: 0xe0004efa, + 0x14d9c: 0xe0004a91, 0x14d9e: 0xe000a103, + 0x14da0: 0xe0004e8e, 0x14da1: 0xe000953c, 0x14da2: 0xe00065a4, + 0x14da5: 0xe00053ba, + // Block 0x537, offset 0x14dc0 + 0x14ddc: 0xe00067fb, + 0x14de1: 0xe0009540, + 0x14de4: 0xe0009a17, + 0x14de8: 0xe00077dc, 0x14dea: 0xe0009d44, + 0x14dee: 0xe0007e19, 0x14def: 0xe00090dc, + 0x14df2: 0xe0006450, + 0x14dfb: 0xe0008d6a, + 0x14dff: 0xe00075cf, + // Block 0x538, offset 0x14e00 + 0x14e00: 0xe0009acc, 0x14e02: 0xe0009f76, + 0x14e04: 0xe00067fe, + 0x14e0b: 0xe0005c0f, + 0x14e0c: 0xe0005f50, 0x14e0d: 0xe00043f4, + 0x14e10: 0xe000a08b, + 0x14e18: 0xe000a3e1, 0x14e1b: 0xe0009e53, + 0x14e1c: 0xe000a11f, 0x14e1d: 0xe0006f80, 0x14e1e: 0xe00073e2, 0x14e1f: 0xe00094d0, + 0x14e21: 0xe00056e5, 0x14e22: 0xe0008142, 0x14e23: 0xe000917d, + 0x14e24: 0xe0008ca7, + 0x14e2a: 0xe00064c2, + 0x14e2c: 0xe0009895, + 0x14e30: 0xe00083ba, 0x14e32: 0xe000727c, 0x14e33: 0xe0009181, + 0x14e34: 0xe0006a32, 0x14e35: 0xe0005cdc, 0x14e36: 0xe000557e, 0x14e37: 0xe000a0eb, + 0x14e38: 0xe0005c68, + 0x14e3c: 0xe00088e6, 0x14e3d: 0xe00078b1, + // Block 0x539, offset 0x14e40 + 0x14e44: 0xe0008cdd, 0x14e45: 0xe000801d, 0x14e46: 0xe0005ca0, + 0x14e4a: 0xe00054e8, 0x14e4b: 0xe000722b, + 0x14e4d: 0xe000a694, 0x14e4e: 0xe00047db, + 0x14e51: 0xe0005168, + 0x14e54: 0xe00045c9, 0x14e55: 0xe00080ae, 0x14e57: 0xe0007e9b, + 0x14e58: 0xe0007772, 0x14e59: 0xe0004f3f, 0x14e5b: 0xe0008caa, + 0x14e5c: 0xe00087aa, + 0x14e63: 0xe0005d75, + 0x14e64: 0xe0009c98, 0x14e67: 0xe000722e, + 0x14e68: 0xe0007231, 0x14e69: 0xe0007cf1, 0x14e6a: 0xe000a265, + 0x14e70: 0xe00073ba, 0x14e71: 0xe000836e, 0x14e73: 0xe000a866, + 0x14e74: 0xe0005b5a, 0x14e76: 0xe00084bf, 0x14e77: 0xe0005a88, + 0x14e78: 0xe0005a8b, 0x14e79: 0xe0009898, 0x14e7b: 0xe00094d4, + 0x14e7c: 0xe0008fc9, + // Block 0x53a, offset 0x14e80 + 0x14e80: 0xe000869a, 0x14e81: 0xe000767b, + 0x14e84: 0xe00080e2, 0x14e85: 0xe00075d2, 0x14e86: 0xe000921d, 0x14e87: 0xe000486b, + 0x14e89: 0xe00099e7, 0x14e8b: 0xe0008f95, + 0x14e8c: 0xe000861d, 0x14e8d: 0xe0007d7a, 0x14e8e: 0xe00088ad, + 0x14e95: 0xe0008d6d, 0x14e96: 0xe0007234, + 0x14e99: 0xe00075a1, 0x14e9a: 0xe0004ac5, 0x14e9b: 0xe0009859, + 0x14e9c: 0xe0008706, 0x14e9d: 0xe0007d9e, 0x14e9e: 0xe00047ff, + 0x14ea2: 0xe0005d2d, 0x14ea3: 0xe00051c8, + 0x14ea8: 0xe0008020, 0x14ea9: 0xe0008023, 0x14eaa: 0xe0006f3c, + 0x14eaf: 0xe00061c1, + 0x14eb0: 0xe00068a4, 0x14eb2: 0xe00080b2, + 0x14eb6: 0xe0005a38, 0x14eb7: 0xe0005b77, + 0x14eb9: 0xe0006304, 0x14eba: 0xe0006100, 0x14ebb: 0xe00089f9, + // Block 0x53b, offset 0x14ec0 + 0x14ec0: 0xe0007237, + 0x14ec4: 0xe00070e4, 0x14ec5: 0xe0006c98, 0x14ec6: 0xe0008c11, 0x14ec7: 0xe0009185, + 0x14ec8: 0xe0009d8a, 0x14ec9: 0xe0005f45, + 0x14ecc: 0xe0008f40, 0x14ecd: 0xe0004a51, 0x14ece: 0xe0006c9c, 0x14ecf: 0xe0006a35, + 0x14ed1: 0xe0008aed, 0x14ed3: 0xe0007c19, + 0x14ed4: 0xe0008f43, 0x14ed6: 0xe0005dc1, + 0x14ed9: 0xe0007baf, + 0x14edc: 0xe0006d18, 0x14ede: 0xe000a011, + 0x14ee3: 0xe00080ca, + 0x14ee6: 0xe0006aa3, 0x14ee7: 0xe0006174, + 0x14eea: 0xe00083d6, + 0x14ef0: 0xe0006c04, 0x14ef2: 0xe0005ab8, + 0x14ef8: 0xe0009d8d, 0x14ef9: 0xe00065a8, + 0x14efd: 0xe0008cad, + // Block 0x53c, offset 0x14f00 + 0x14f02: 0xe000594c, + 0x14f04: 0xe0007775, 0x14f06: 0xe00096ca, + 0x14f08: 0xe0005a3c, 0x14f09: 0xe00077ae, + 0x14f0c: 0xe00066b8, + 0x14f11: 0xe000967c, + 0x14f16: 0xe0008c15, + 0x14f1a: 0xe0008c6d, 0x14f1b: 0xe0008a89, + 0x14f1c: 0xe0008c19, 0x14f1d: 0xe000958c, 0x14f1e: 0xe00069bd, + 0x14f20: 0xe00048c5, 0x14f21: 0xe0006220, 0x14f22: 0xe0005fc4, + 0x14f26: 0xe0008a8d, + 0x14f28: 0xe0007b43, 0x14f29: 0xe000a285, + 0x14f2d: 0xe0008522, + 0x14f33: 0xe0004fb3, + 0x14f34: 0xe000a574, 0x14f35: 0xe00052ee, 0x14f37: 0xe0008526, + 0x14f3a: 0xe0005eaf, + 0x14f3c: 0xe00053be, + // Block 0x53d, offset 0x14f40 + 0x14f40: 0xe00055b1, 0x14f41: 0xe0009f7f, + 0x14f44: 0xe0009ece, 0x14f45: 0xe0007753, + 0x14f4b: 0xe000a3fd, + 0x14f4d: 0xe000767f, 0x14f4f: 0xe00049b2, + 0x14f58: 0xe0009769, + 0x14f60: 0xe0004d8b, 0x14f63: 0xe00082e7, + 0x14f66: 0xe000989b, + 0x14f68: 0xe00042d8, 0x14f6b: 0xe0004d8f, + 0x14f6c: 0xe0004550, 0x14f6d: 0xe0009dd4, + 0x14f71: 0xe00055b4, + 0x14f74: 0xe0006a38, + 0x14f78: 0xe0009fd1, 0x14f79: 0xe0004a55, + // Block 0x53e, offset 0x14f80 + 0x14f81: 0xe000443c, 0x14f83: 0xe00053c2, + 0x14f86: 0xe0009544, + 0x14f8b: 0xe00081df, + 0x14f8d: 0xe0006918, + 0x14f90: 0xe0004398, 0x14f93: 0xe000a08f, + 0x14f99: 0xe0008203, + 0x14f9c: 0xe0005581, 0x14f9d: 0xe0004d67, 0x14f9e: 0xe0007d46, + 0x14fa0: 0xe0009fd5, 0x14fa1: 0xe0008206, + 0x14fad: 0xe0004d6a, 0x14fae: 0xe0004d6d, + 0x14fb1: 0xe0006f9c, 0x14fb2: 0xe0008ce0, 0x14fb3: 0xe00083be, + 0x14fb5: 0xe00080ce, 0x14fb6: 0xe00070a5, + 0x14fba: 0xe0007bdf, 0x14fbb: 0xe00080b6, + 0x14fbf: 0xe000a222, + // Block 0x53f, offset 0x14fc0 + 0x14fc0: 0xe000a48d, 0x14fc1: 0xe000a325, 0x14fc2: 0xe0008c1d, 0x14fc3: 0xe0004739, + 0x14fc5: 0xe000a177, 0x14fc6: 0xe0007335, + 0x14fc8: 0xe000723a, 0x14fca: 0xe0008082, + 0x14fcc: 0xe0007164, 0x14fcd: 0xe0004efd, 0x14fce: 0xe000516b, 0x14fcf: 0xe000a18b, + 0x14fd0: 0xe0007c1c, 0x14fd1: 0xe0007e1d, 0x14fd2: 0xe0006380, 0x14fd3: 0xe0005611, + 0x14fd6: 0xe00063a4, 0x14fd7: 0xe0009cf7, + 0x14fd8: 0xe0005a40, + 0x14fde: 0xe00076c3, + 0x14fe1: 0xe000a98c, 0x14fe3: 0xe0007539, + 0x14fe6: 0xe000a1e0, + 0x14feb: 0xe000684f, + 0x14fed: 0xe00056d0, 0x14fee: 0xe000a709, + 0x14ff0: 0xe000a361, + 0x14ff7: 0xe000770b, + 0x14ff8: 0xe000473d, 0x14ff9: 0xe0009c95, 0x14ffb: 0xe0006a7b, + 0x14fff: 0xe000865f, + // Block 0x540, offset 0x15000 + 0x15002: 0xe0005b98, + 0x15006: 0xe0004a0b, 0x15007: 0xe0009952, + 0x15008: 0xe000477d, 0x1500b: 0xe0007472, + 0x1500c: 0xe0008cb0, 0x1500d: 0xe00077cc, 0x1500e: 0xe000762b, + 0x15012: 0xe0007da2, 0x15013: 0xe0008a91, + 0x15014: 0xe0007683, + 0x15018: 0xe0008146, 0x15019: 0xe0006d38, 0x1501a: 0xe00089fd, + 0x1501e: 0xe0005c4e, + 0x15025: 0xe000a490, 0x15026: 0xe000976c, 0x15027: 0xe000486e, + 0x1502b: 0xe0008a01, + 0x1502f: 0xe000a2e5, + 0x15030: 0xe0006aa7, 0x15031: 0xe0005ae2, 0x15033: 0xe0006fc4, + 0x15034: 0xe0004ac9, + // Block 0x541, offset 0x15040 + 0x15068: 0xe0009f54, + 0x1506d: 0xe0008b1d, 0x1506f: 0xe0006c80, + 0x15071: 0xe0009c1b, 0x15072: 0xe00059d4, + 0x15076: 0xe0004d70, + 0x1507a: 0xe00078dd, + 0x1507c: 0xe000727f, 0x1507f: 0xe0006574, + // Block 0x542, offset 0x15080 + 0x15082: 0xe0005bdd, + 0x15084: 0xe0009f0f, 0x15087: 0xe0009f0c, + 0x15089: 0xe0005be0, 0x1508b: 0xe0007555, + 0x1509b: 0xe00069c0, + 0x1509c: 0xe0006518, 0x1509f: 0xe00074a9, + 0x150a1: 0xe0007130, 0x150a2: 0xe00050f9, + 0x150a6: 0xe0008a95, 0x150a7: 0xe0007134, + 0x150aa: 0xe00085ae, 0x150ab: 0xe000790c, + 0x150ad: 0xe0009a2e, 0x150ae: 0xe00083c2, 0x150af: 0xe0006384, + 0x150b1: 0xe0007138, + 0x150b4: 0xe000849b, + 0x150bb: 0xe00095d8, + 0x150bc: 0xe0006b7e, 0x150bd: 0xe0009ead, 0x150be: 0xe00074ad, + // Block 0x543, offset 0x150c0 + 0x150c3: 0xe0004c08, + 0x150c9: 0xe000a226, 0x150ca: 0xe00078b5, + 0x150cc: 0xe000849e, + 0x150d0: 0xe00092e3, 0x150d2: 0xe00052b7, 0x150d3: 0xe00075d5, + 0x150d4: 0xe0009ed1, 0x150d5: 0xe0008fcd, + 0x150d8: 0xe00079d5, 0x150da: 0xe000a76f, + 0x150de: 0xe0008a05, + 0x150e0: 0xe0006654, + 0x150e6: 0xe00087f2, 0x150e7: 0xe0008209, + 0x150e8: 0xe0004a95, 0x150ea: 0xe00051d8, + 0x150ec: 0xe000a4c3, 0x150ee: 0xe00095dc, + 0x150f0: 0xe0008a99, 0x150f1: 0xe000a7b7, 0x150f3: 0xe00054b6, + 0x150f9: 0xe00054ba, + 0x150fc: 0xe000a979, 0x150fd: 0xe0004e91, + // Block 0x544, offset 0x15100 + 0x15102: 0xe0007d4a, + 0x15105: 0xe0005e6b, + 0x15108: 0xe0007282, 0x15109: 0xe0004f8b, 0x1510b: 0xe0004e6a, + 0x1510c: 0xe00092e7, 0x1510d: 0xe0006ec8, + 0x15110: 0xe0008456, 0x15111: 0xe00050fc, 0x15112: 0xe0007eef, + 0x15114: 0xe0007d7e, 0x15115: 0xe00055b7, 0x15117: 0xe000a22a, + 0x1511c: 0xe0007b1f, 0x1511e: 0xe0009383, + // Block 0x545, offset 0x15140 + 0x15156: 0xe000723d, 0x15157: 0xe0004f00, + 0x15158: 0xe0004ba2, 0x15159: 0xe000a22e, + 0x1515d: 0xe0009fad, + 0x15163: 0xe000770f, + 0x15165: 0xe00066fd, + 0x15168: 0xe000a3cd, + 0x1516c: 0xe0005dec, 0x1516d: 0xe00078fa, 0x1516e: 0xe0009f58, + 0x15170: 0xe0008961, 0x15171: 0xe0009acf, 0x15173: 0xe00099ea, + 0x15174: 0xe0007339, + 0x15179: 0xe0008576, + // Block 0x546, offset 0x15180 + 0x15181: 0xe0006308, + 0x15184: 0xe0009c2d, + 0x15188: 0xe0004d73, 0x15189: 0xe000478d, + 0x1518f: 0xe0004509, + 0x15190: 0xe0008f04, 0x15191: 0xe0005280, 0x15192: 0xe0004cdd, + 0x15195: 0xe00041b4, + 0x15198: 0xe0009c30, 0x15199: 0xe0006801, 0x1519b: 0xe0006bb4, + 0x1519c: 0xe0009fd9, 0x1519d: 0xe0009ad2, 0x1519e: 0xe0009af0, 0x1519f: 0xe0006b81, + 0x151a2: 0xe00065f4, + 0x151a8: 0xe0007355, 0x151aa: 0xe000753d, + 0x151ad: 0xe000a1bf, 0x151ae: 0xe000631c, + 0x151b1: 0xe000579f, + 0x151b8: 0xe0009a92, 0x151bb: 0xe000a0ab, + 0x151bd: 0xe000a315, 0x151bf: 0xe0008f99, + // Block 0x547, offset 0x151c0 + 0x151c1: 0xe0006abf, 0x151c2: 0xe0007014, 0x151c3: 0xe00077b1, + 0x151c4: 0xe0005b22, 0x151c5: 0xe000989e, + 0x151c8: 0xe0006658, 0x151cb: 0xe000587e, + 0x151cd: 0xe0004a32, 0x151ce: 0xe00050ff, 0x151cf: 0xe0005102, + 0x151d1: 0xe0006a3b, + 0x151d6: 0xe0006186, + 0x151d8: 0xe00097f0, 0x151d9: 0xe0009dd8, 0x151db: 0xe0006a3e, + 0x151eb: 0xe0004538, + 0x151ed: 0xe0009005, + 0x151f0: 0xe0005730, + 0x151f5: 0xe000817a, 0x151f6: 0xe000985c, 0x151f7: 0xe00070a8, + 0x151f8: 0xe0006f04, + 0x151fe: 0xe0005781, + // Block 0x548, offset 0x15200 + 0x15200: 0xe0005f54, 0x15201: 0xe0007cf4, 0x15202: 0xe0009387, 0x15203: 0xe0009f12, + 0x15204: 0xe00097f4, 0x15205: 0xe0004ce0, + 0x1520a: 0xe000a586, + 0x1520c: 0xe00072c9, 0x1520d: 0xe000a757, 0x1520e: 0xe0005dad, 0x1520f: 0xe00086de, + 0x15212: 0xe0009b90, + 0x15215: 0xe0004c0b, 0x15217: 0xe000a269, + 0x15218: 0xe0005784, 0x1521a: 0xe0004741, 0x1521b: 0xe00079fb, + 0x1521f: 0xe0009979, + 0x15222: 0xe0005907, + 0x15224: 0xe00078e1, 0x15225: 0xe0005105, + 0x15229: 0xe000a5ec, 0x1522a: 0xe000590a, + // Block 0x549, offset 0x15240 + 0x15268: 0xe0004962, 0x1526a: 0xe000820c, + 0x15270: 0xe0009cb3, + 0x15278: 0xe000a1c2, 0x15279: 0xe0004c41, + 0x1527c: 0xe00045d9, 0x1527f: 0xe00065f8, + // Block 0x54a, offset 0x15280 + 0x15280: 0xe0006a41, + 0x15286: 0xe0006320, + 0x1528f: 0xe0005c24, + 0x15291: 0xe00097a4, 0x15293: 0xe0007240, + 0x15294: 0xe00096ac, 0x15296: 0xe0004acd, 0x15297: 0xe0005ae5, + 0x15298: 0xe0004871, + 0x1529f: 0xe0009f36, + 0x152a1: 0xe000494e, 0x152a3: 0xe0006484, + 0x152a5: 0xe0007af3, 0x152a6: 0xe00060a5, + 0x152ab: 0xe000976f, + 0x152ad: 0xe0008662, 0x152ae: 0xe00063cc, + 0x152b0: 0xe00096cd, 0x152b2: 0xe0009f82, + 0x152b4: 0xe000691c, + 0x152b9: 0xe000a869, 0x152ba: 0xe0004af5, 0x152bb: 0xe0004802, + 0x152bd: 0xe0008e89, + // Block 0x54b, offset 0x152c0 + 0x152c2: 0xe0006aab, + 0x152c5: 0xe0006944, 0x152c6: 0xe0007170, + 0x152ca: 0xe0007359, 0x152cb: 0xe0008a9d, + 0x152cd: 0xe000a4c6, + 0x152d0: 0xe000516e, 0x152d2: 0xe00091a9, + 0x152d6: 0xe0006c70, + 0x152d8: 0xe0005e93, 0x152d9: 0xe00073ea, 0x152da: 0xe0007243, + 0x152df: 0xe000a620, + 0x152e2: 0xe0006aaf, 0x152e3: 0xe0005a00, + 0x152e7: 0xe0005bbc, + 0x152e8: 0xe000a549, 0x152e9: 0xe000a295, 0x152ea: 0xe0009caa, + 0x152ee: 0xe0004d76, 0x152ef: 0xe000942b, + 0x152f1: 0xe00080d6, 0x152f2: 0xe00045dd, + 0x152fa: 0xe0006d3c, + 0x152fc: 0xe0004ea0, + // Block 0x54c, offset 0x15300 + 0x15301: 0xe0004b8a, 0x15302: 0xe000a4e9, 0x15303: 0xe00063d0, + 0x15304: 0xe00064f0, 0x15305: 0xe0005f2a, + 0x15308: 0xe00070e7, 0x1530b: 0xe00098a1, + 0x1530d: 0xe0005eff, 0x1530e: 0xe00058d9, 0x1530f: 0xe00081e2, + 0x15311: 0xe0005d57, + 0x15314: 0xe0005def, + 0x15318: 0xe0007b23, 0x1531a: 0xe00078fd, + 0x15326: 0xe0006bb7, + 0x1532f: 0xe0005abb, + 0x15334: 0xe0006488, + // Block 0x54d, offset 0x15340 + 0x15340: 0xe0009af3, 0x15343: 0xe0009e34, + 0x1534e: 0xe0008af1, + 0x15351: 0xe0009eb0, 0x15352: 0xe0006852, 0x15353: 0xe0008665, + 0x15357: 0xe00056b1, + 0x1535f: 0xe0007687, + 0x15367: 0xe0008ce3, + 0x15368: 0xe00090df, 0x1536a: 0xe00082ea, 0x1536b: 0xe0004c0e, + 0x1536d: 0xe000a1e3, 0x1536e: 0xe0006ecc, + 0x15379: 0xe00070ea, + // Block 0x54e, offset 0x15380 + 0x15381: 0xe0004791, + 0x15386: 0xe0009ed4, + 0x15389: 0xe0005d30, 0x1538a: 0xe0006bba, + 0x15394: 0xe0009a1a, 0x15396: 0xe0009680, + 0x1539b: 0xe0008dd0, + 0x153a2: 0xe0007c4f, + 0x153a4: 0xe0004922, + 0x153a8: 0xe0004745, + 0x153b7: 0xe0008ce6, + // Block 0x54f, offset 0x153c0 + 0x153c8: 0xe0008b45, 0x153ca: 0xe00059ac, + 0x153cc: 0xe00098a4, 0x153cd: 0xe000985f, + 0x153d0: 0xe000762f, 0x153d2: 0xe0006701, 0x153d3: 0xe0006d49, + 0x153d5: 0xe000a014, + 0x153e4: 0xe0006bbd, 0x153e5: 0xe000a5f0, + 0x153ed: 0xe0005171, 0x153ee: 0xe0007d4e, 0x153ef: 0xe0007851, + 0x153f1: 0xe00059b0, 0x153f2: 0xe0007ca9, + 0x153f5: 0xe00062a4, + 0x153f9: 0xe0004631, 0x153fa: 0xe00070ed, 0x153fb: 0xe0005e6f, + 0x153fe: 0xe0009f39, + // Block 0x550, offset 0x15400 + 0x15407: 0xe00043f8, + 0x15409: 0xe0006608, + 0x1540f: 0xe0007591, + 0x15412: 0xe0008fd1, 0x15413: 0xe0006f08, + 0x15417: 0xe0005d79, + 0x15420: 0xe000a70c, 0x15423: 0xe0008aa1, + 0x15427: 0xe0005a8e, + 0x15438: 0xe0005ae8, 0x1543b: 0xe0006f0c, + // Block 0x551, offset 0x15440 + 0x15465: 0xe0008d70, 0x15466: 0xe00083aa, 0x15467: 0xe0006804, + 0x15469: 0xe0004ce3, + 0x15473: 0xe000676d, + 0x15474: 0xe0006028, 0x15476: 0xe0007a7f, + // Block 0x552, offset 0x15480 + 0x15483: 0xe00045e1, + 0x15486: 0xe0009205, 0x15487: 0xe00066bb, + 0x15488: 0xe0007697, 0x15489: 0xe00075d8, + 0x1548c: 0xe0006785, + 0x15492: 0xe0005a74, + 0x15495: 0xe0009af6, + 0x15498: 0xe00065fc, 0x15499: 0xe0009a1d, 0x1549b: 0xe000814a, + 0x1549f: 0xe0009a20, + 0x154a3: 0xe00048c8, + 0x154a6: 0xe000773f, + 0x154a8: 0xe0007723, + 0x154b0: 0xe0004af9, + 0x154b6: 0xe00076c7, + 0x154bb: 0xe000a535, + // Block 0x553, offset 0x154c0 + 0x154c1: 0xe0004c44, 0x154c2: 0xe000a86c, + 0x154c4: 0xe0009a23, + 0x154d1: 0xe000460d, 0x154d3: 0xe00063e4, + 0x154d4: 0xe0008fd5, + 0x154dd: 0xe00075db, 0x154de: 0xe00075fc, + 0x154e0: 0xe00048e6, 0x154e1: 0xe0006177, + 0x154e9: 0xe0006725, + 0x154ec: 0xe0006938, 0x154ef: 0xe0009fdd, + 0x154f0: 0xe0008dd3, 0x154f2: 0xe000869e, + 0x154f7: 0xe000817e, + 0x154fb: 0xe00098a7, + 0x154fe: 0xe0004952, + // Block 0x554, offset 0x15500 + 0x15504: 0xe0009690, + 0x15509: 0xe000735d, + 0x15516: 0xe00098aa, + 0x1551a: 0xe000765b, + 0x15521: 0xe00042f0, + 0x15524: 0xe0004956, + 0x15529: 0xe00060c0, + 0x1552c: 0xe000942f, 0x1552f: 0xe00077e8, + 0x15534: 0xe000a03f, 0x15535: 0xe00098ad, + 0x15538: 0xe0007855, 0x15539: 0xe0005c5d, 0x1553b: 0xe0004972, + 0x1553f: 0xe0008668, + // Block 0x555, offset 0x15540 + 0x15541: 0xe00084e2, 0x15542: 0xe0007f1f, + 0x15544: 0xe00047de, 0x15547: 0xe0004d79, + 0x15553: 0xe000866b, + 0x15556: 0xe0007c52, 0x15557: 0xe0004ce6, + 0x15559: 0xe00090e2, + 0x15566: 0xe0009772, + 0x15569: 0xe0006614, 0x1556a: 0xe00077fc, 0x1556b: 0xe00072cd, + 0x15570: 0xe0007abb, 0x15571: 0xe00048cb, 0x15572: 0xe000997c, 0x15573: 0xe000a0af, + 0x15578: 0xe000a877, 0x15579: 0xe00083fe, 0x1557a: 0xe0005abe, + 0x1557d: 0xe000a057, 0x1557f: 0xe00065bc, + // Block 0x556, offset 0x15580 + 0x15587: 0xe0008aa5, + 0x1558f: 0xe0006104, + 0x15595: 0xe0005aeb, + 0x1559a: 0xe00077ec, 0x1559b: 0xe0004ad1, + 0x1559c: 0xe0004d7c, 0x1559e: 0xe00057c7, + // Block 0x557, offset 0x155c0 + 0x155f5: 0xe0005ac1, 0x155f7: 0xe0005a78, + 0x155f9: 0xe000a0ef, 0x155fb: 0xe000437c, + 0x155fd: 0xe0007af7, 0x155ff: 0xe0005b02, + // Block 0x558, offset 0x15600 + 0x15600: 0xe0008059, 0x15602: 0xe0004e94, + 0x15604: 0xe00098b0, + 0x1560b: 0xe000624d, + 0x1560c: 0xe000805c, 0x1560f: 0xe0004f1f, + 0x15611: 0xe0007c55, 0x15612: 0xe0005108, 0x15613: 0xe0005b06, + 0x15617: 0xe000590d, + 0x1561d: 0xe0006b84, 0x1561e: 0xe00087f6, 0x1561f: 0xe0005d7d, + 0x15624: 0xe00098b3, 0x15625: 0xe0005f58, + 0x15629: 0xe0006855, 0x1562a: 0xe0005fdc, + 0x1562f: 0xe0004da3, + 0x15634: 0xe0004d93, 0x15635: 0xe0005fc8, + 0x1563b: 0xe0005df2, + 0x1563d: 0xe0005e01, 0x1563e: 0xe000a848, 0x1563f: 0xe0005e04, + // Block 0x559, offset 0x15640 + 0x15643: 0xe000a698, + 0x15645: 0xe0004ffb, + 0x1564c: 0xe000a72f, 0x1564d: 0xe0006dd4, 0x1564e: 0xe0005910, 0x1564f: 0xe0008b21, + 0x15650: 0xe0005d5a, 0x15651: 0xe000a89b, + 0x15654: 0xe0004588, 0x15656: 0xe0005174, + 0x15658: 0xe000618d, 0x1565a: 0xe000468d, 0x1565b: 0xe00054eb, + 0x1565c: 0xe000990e, 0x1565d: 0xe00082ed, 0x1565e: 0xe0008af5, + 0x15660: 0xe000a990, + 0x15665: 0xe0004795, + 0x15668: 0xe0005476, + 0x1566e: 0xe0005432, 0x1566f: 0xe0007713, + 0x15672: 0xe000938b, + 0x15674: 0xe0006223, 0x15675: 0xe0005436, 0x15676: 0xe0007b27, 0x15677: 0xe00055e9, + 0x1567a: 0xe00068ec, 0x1567b: 0xe0006920, + 0x1567c: 0xe00066be, 0x1567d: 0xe00062a8, 0x1567f: 0xe0008182, + // Block 0x55a, offset 0x15680 + 0x15680: 0xe00098f6, 0x15682: 0xe0008dd6, + 0x15684: 0xe0008f46, 0x15687: 0xe0007cac, + 0x15688: 0xe000660c, 0x15689: 0xe0009af9, 0x1568a: 0xe00065c0, + 0x1568e: 0xe0008c21, + 0x15690: 0xe000522f, 0x15693: 0xe0004874, + 0x15697: 0xe00055ba, + 0x15699: 0xe0006a44, + 0x156a0: 0xe0006dd7, 0x156a2: 0xe00068f0, + 0x156ab: 0xe0006e4c, + 0x156ac: 0xe00082f0, 0x156af: 0xe0007cf7, + 0x156b4: 0xe0007953, + 0x156b8: 0xe0004691, 0x156b9: 0xe0007957, 0x156bb: 0xe00069c3, + 0x156be: 0xe000a0b3, + // Block 0x55b, offset 0x156c0 + 0x156ca: 0xe0008cb3, 0x156cb: 0xe0008827, + 0x156ce: 0xe000882a, + 0x156d2: 0xe00099ed, + 0x156d4: 0xe0009a46, 0x156d5: 0xe000a8e7, 0x156d7: 0xe00083a2, + 0x156df: 0xe00088b0, + 0x156e0: 0xe0009775, 0x156e1: 0xe0005a44, + 0x156e6: 0xe00042b0, 0x156e7: 0xe0006f40, + 0x156e9: 0xe0004c47, 0x156ea: 0xe000929f, 0x156eb: 0xe000495a, + 0x156ec: 0xe0007900, + 0x156f2: 0xe000805f, + 0x156f6: 0xe000765f, 0x156f7: 0xe0007633, + // Block 0x55c, offset 0x15700 + 0x1570d: 0xe0005be3, 0x1570e: 0xe0005b5e, + 0x15710: 0xe0006454, 0x15712: 0xe0005be7, + 0x15714: 0xe00049e2, 0x15715: 0xe0004340, + 0x1571c: 0xe0004ce9, 0x1571d: 0xe0009880, + 0x15720: 0xe0007859, 0x15722: 0xe000a589, + 0x15725: 0xe00082f3, + // Block 0x55d, offset 0x15740 + 0x15740: 0xe00050ed, 0x15741: 0xe00046dd, 0x15742: 0xe0009269, 0x15743: 0xe00041a8, + 0x15744: 0xe000a628, 0x15745: 0xe00049e6, 0x15746: 0xe0004c65, 0x15747: 0xe0004ce9, + 0x15748: 0xe0004ce9, 0x15749: 0xe00047a2, 0x1574a: 0xe0005193, 0x1574b: 0xe0005754, + 0x1574c: 0xe000521a, 0x1574d: 0xe0005757, 0x1574e: 0xe000575a, 0x1574f: 0xe000575d, + 0x15750: 0xe0005760, 0x15751: 0xe0005763, 0x15752: 0xe0005766, 0x15753: 0xe0005769, + 0x15754: 0xe000761b, 0x15755: 0xe0005787, 0x15756: 0xe000578b, 0x15757: 0xe000578f, + 0x15758: 0xe0005797, 0x15759: 0xe000579b, 0x1575a: 0xe000579f, 0x1575b: 0xe00057ab, + 0x1575c: 0xe00057af, 0x1575d: 0xe00057b3, 0x1575e: 0xe00057bf, 0x1575f: 0xe00057c3, + 0x15760: 0xe00057c7, 0x15761: 0xe00057f7, 0x15762: 0xe0005807, 0x15763: 0xe0005813, + 0x15764: 0xe0005817, 0x15765: 0xe0005827, 0x15766: 0xe000582b, 0x15767: 0xe000582f, + 0x15768: 0xe0005837, 0x15769: 0xe000583b, 0x1576a: 0xe000583f, 0x1576b: 0xe0005843, + 0x1576c: 0x43219c20, 0x1576d: 0xe000586f, 0x1576e: 0xe0005881, 0x1576f: 0xe0005a91, + 0x15770: 0xe0005a97, 0x15771: 0xe0005a9a, 0x15772: 0xe0005aa3, 0x15773: 0xe0005aa6, + 0x15774: 0xe0005aa9, 0x15775: 0xe0005aac, 0x15776: 0xe0005aaf, 0x15777: 0xe0005ab2, + 0x15778: 0xe0005ab8, 0x15779: 0xe0005abb, 0x1577a: 0xe0005abe, 0x1577b: 0xe0005aee, + 0x1577c: 0xe0005af2, 0x1577d: 0xe0005af6, 0x1577e: 0xe0005afa, 0x1577f: 0xe0005afe, + // Block 0x55e, offset 0x15780 + 0x15780: 0xe0005b02, 0x15781: 0xe0005b26, 0x15782: 0xe0005b2a, 0x15783: 0xe0005b2e, + 0x15784: 0xe0005b3e, 0x15785: 0xe0005b42, 0x15786: 0xe0005b68, 0x15787: 0xe0005b6b, + 0x15788: 0xe0005b6e, 0x15789: 0xe0005b77, 0x1578a: 0xe0005beb, 0x1578b: 0xe0005bf1, + 0x1578c: 0xe0005bf4, 0x1578d: 0xe0005bf7, 0x1578e: 0xe0005bfa, 0x1578f: 0xe0005c00, + 0x15790: 0xe0005c03, 0x15791: 0xe0005c0f, 0x15792: 0xe0005cac, 0x15793: 0xe0005cb0, + 0x15794: 0xe0005cb8, 0x15795: 0xe0005cc8, 0x15796: 0xe0005cd0, 0x15797: 0xe0005cd4, + 0x15798: 0xe0005cd8, 0x15799: 0xe0005cdc, 0x1579a: 0xe00055e1, 0x1579b: 0xe00051a4, + 0x1579c: 0xe000761b, 0x1579d: 0xe00051bc, 0x1579e: 0xe000532a, 0x1579f: 0xe0005259, + 0x157a0: 0xe000527a, 0x157a1: 0xe000713c, 0x157a2: 0xe000847a, 0x157a3: 0xe0006858, + 0x157a4: 0xe0006368, 0x157a5: 0xe0009db4, 0x157a6: 0xe00066d5, 0x157a7: 0xe0006789, + 0x157a8: 0xe0009f95, 0x157a9: 0xe00071c2, 0x157aa: 0xe0006d54, 0x157ab: 0xe000932b, + 0x157ac: 0xe0006d40, 0x157ad: 0xe0006ff4, 0x157ae: 0xe0007b33, 0x157af: 0xe0006f38, + 0x157b0: 0xe0006c40, 0x157b1: 0xe0009171, 0x157b2: 0xe0009a62, 0x157b3: 0xe00073a2, + 0x157b4: 0xe0007829, 0x157b5: 0xe0005885, 0x157b6: 0xe0005889, 0x157b7: 0xe0005891, + 0x157b8: 0xe0005899, 0x157b9: 0xe000589d, 0x157ba: 0xe00058a1, 0x157bb: 0xe00058b1, + 0x157bc: 0xe00058b5, 0x157bd: 0xe00058b9, 0x157be: 0xe00058c1, 0x157bf: 0xe00058e3, + // Block 0x55f, offset 0x157c0 + 0x157c0: 0xe00058e6, 0x157c1: 0xe0005232, 0x157c2: 0xe00058e9, 0x157c3: 0xe00058f2, + 0x157c4: 0xe00058f8, 0x157c5: 0xe00058fb, 0x157c6: 0xe0005904, 0x157c7: 0xe000590a, + 0x157c8: 0xe000590d, 0x157c9: 0xe0005910, 0x157ca: 0xe0005934, 0x157cb: 0xe0005938, + 0x157cc: 0xe000593c, 0x157cd: 0xe0005948, 0x157ce: 0xe0005239, 0x157cf: 0xe0005968, + 0x157d0: 0xe000596c, 0x157d1: 0xe000523d, 0x157d2: 0xe0005974, 0x157d3: 0xe0005978, + 0x157d4: 0xe000597c, 0x157d5: 0xe0005241, 0x157d6: 0xe0005980, 0x157d7: 0xe0005984, + 0x157d8: 0xe000598c, 0x157d9: 0xe0005988, 0x157da: 0xe0005990, 0x157db: 0xe0005994, + 0x157dc: 0xe00059b8, 0x157dd: 0xe00059bc, 0x157de: 0xe00084f6, 0x157df: 0xe00059c4, + 0x157e0: 0xe00059c8, 0x157e1: 0xe0006f38, 0x157e2: 0xe00059d8, 0x157e3: 0xe0005249, + 0x157e4: 0xe0005255, 0x157e5: 0xe00059e0, 0x157e6: 0xe00059e8, 0x157e7: 0xe00059f8, + 0x157e8: 0xe0005a04, 0x157e9: 0xe0005a0c, 0x157ea: 0xe0005259, 0x157eb: 0xe0005a14, + 0x157ec: 0xe0005a18, 0x157ed: 0xe0005a1c, 0x157ee: 0xe000a3b1, 0x157ef: 0xe0005a24, + 0x157f0: 0xe0005a2c, 0x157f1: 0xe0005a34, 0x157f2: 0xe0005a38, 0x157f3: 0xe0005a3c, + 0x157f4: 0xe0005a40, 0x157f5: 0xe0005a7c, 0x157f6: 0xe0005a82, 0x157f7: 0xe0005a85, + 0x157f8: 0xe0005a8b, 0x157f9: 0xe000760f, 0x157fa: 0xe0005b9b, 0x157fb: 0xe0005b9e, + 0x157fc: 0xe0005ba1, 0x157fd: 0xe00052ba, 0x157fe: 0xe0005ba7, 0x157ff: 0xe000761b, + // Block 0x560, offset 0x15800 + 0x15800: 0xe0005baa, 0x15801: 0xe0005bad, 0x15802: 0xe0005bb6, 0x15803: 0xe0005bb9, + 0x15804: 0xe0005be3, 0x15805: 0xe000a7de, 0x15806: 0xe0007e19, 0x15807: 0xe0005c27, + 0x15808: 0xe00052e5, 0x15809: 0xe0005c2d, 0x1580a: 0xe0005c33, 0x1580b: 0xe0005c36, + 0x1580c: 0xe0005c3c, 0x1580d: 0xe0005c42, 0x1580e: 0xe0005c48, 0x1580f: 0xe00052e8, + 0x15810: 0xe0005c4e, 0x15811: 0xe0005c60, 0x15812: 0xe0005c64, 0x15813: 0xe0005c68, + 0x15814: 0xe0005c74, 0x15815: 0xe0005c78, 0x15816: 0xe0005c7c, 0x15817: 0xe0005c84, + 0x15818: 0xe0005c8c, 0x15819: 0xe0005c90, 0x1581a: 0xe0005c94, 0x1581b: 0xe000713c, + 0x1581c: 0xe0005ca0, 0x1581d: 0xe0005ceb, 0x1581e: 0xe0005cf1, 0x1581f: 0xe0005cf7, + 0x15820: 0xe00079e7, 0x15821: 0xe0005cfd, 0x15822: 0xe0005d00, 0x15823: 0xe00052fc, + 0x15824: 0xe0005d0c, 0x15825: 0xe0005d12, 0x15826: 0xe0005d18, 0x15827: 0xe0005d21, + 0x15828: 0xe0005d24, 0x15829: 0xe0005d27, 0x1582a: 0xe0005d2d, 0x1582b: 0xe0005311, + 0x1582c: 0xe0005315, 0x1582d: 0xe0005d5d, 0x1582e: 0xe0005d65, 0x1582f: 0xe0005d69, + 0x15830: 0xe0005d6d, 0x15831: 0xe0005d75, 0x15832: 0xe0005d79, 0x15833: 0xe0005d7d, + 0x15834: 0xe0005db1, 0x15835: 0xe0005db5, 0x15836: 0xe0005dbd, 0x15837: 0xe0005dcd, + 0x15838: 0xe0005dd1, 0x15839: 0xe0005dd5, 0x1583a: 0xe0006cf0, 0x1583b: 0xe00085f3, + 0x1583c: 0xe00074a1, 0x1583d: 0xe0007595, 0x1583e: 0xe0005324, 0x1583f: 0xe00085d5, + // Block 0x561, offset 0x15840 + 0x15840: 0xe0008aa9, 0x15841: 0xe000552a, 0x15842: 0xe00094b4, 0x15843: 0xe000546e, + 0x15844: 0xe0005500, 0x15845: 0xe0005655, 0x15846: 0xe0009edb, 0x15847: 0xe00066f9, + 0x15848: 0xe000a206, 0x15849: 0xe00043f4, 0x1584a: 0xe0004601, 0x1584b: 0xe0004a35, + 0x1584c: 0xe0007d52, 0x1584d: 0x42ab8020, 0x1584e: 0x43f41c20, 0x1584f: 0x43f41e20, + 0x15850: 0xe00097c0, 0x15851: 0x43f42220, 0x15852: 0xe0009668, 0x15853: 0x43f42620, + 0x15854: 0x43f42820, 0x15855: 0xe000a922, 0x15856: 0xe0008886, 0x15857: 0xe00084c6, + 0x15858: 0x42f27820, 0x15859: 0xe00074e9, 0x1585a: 0xe0006cf8, 0x1585b: 0xe00066dd, + 0x1585c: 0xe0008c15, 0x1585d: 0xe0008be1, 0x1585e: 0xe0008005, 0x1585f: 0x43f43e20, + 0x15860: 0x430c2420, 0x15861: 0x43f44220, 0x15862: 0xe0008c9e, 0x15863: 0x43f44620, + 0x15864: 0x43f44820, 0x15865: 0xe000856e, 0x15866: 0xe0005578, 0x15867: 0x43f44e20, + 0x15868: 0x43f45020, 0x15869: 0x43f45220, 0x1586a: 0xe0006384, 0x1586b: 0xe0006b7e, + 0x1586c: 0xe0004a95, 0x1586d: 0xe000a03f, 0x1586e: 0xe0005853, 0x1586f: 0xe0005a88, + 0x15870: 0xe0006033, 0x15871: 0xe00073c6, 0x15872: 0xe0005fa0, 0x15873: 0xe0005fa8, + 0x15874: 0xe0004f5b, 0x15875: 0xe0006954, 0x15876: 0xe00042b8, 0x15877: 0xe0009b5c, + 0x15878: 0xe000505a, 0x15879: 0xe0006660, 0x1587a: 0xe0006189, 0x1587b: 0xe00099a4, + 0x1587c: 0x42b8dc20, 0x1587d: 0xe000a6c7, 0x1587e: 0xe0004455, 0x1587f: 0xe0009021, + // Block 0x562, offset 0x15880 + 0x15880: 0xe000922d, 0x15881: 0xe0006260, 0x15882: 0x42cbc420, 0x15883: 0xe0006d9e, + 0x15884: 0xe0005f15, 0x15885: 0xe000a1aa, 0x15886: 0xe0008880, 0x15887: 0xe000a06f, + 0x15888: 0xe00085f6, 0x15889: 0x42e45620, 0x1588a: 0xe0009b24, 0x1588b: 0xe000698d, + 0x1588c: 0xe0006b42, 0x1588d: 0xe0009091, 0x1588e: 0xe00050cc, 0x1588f: 0xe0007ff9, + 0x15890: 0xe0008d31, 0x15891: 0xe00098be, 0x15892: 0xe000a55f, 0x15893: 0xe0008bd5, + 0x15894: 0xe00048de, 0x15895: 0xe0005625, 0x15896: 0xe0008ac1, 0x15897: 0xe0005980, + 0x15898: 0xe0009151, 0x15899: 0xe000650c, 0x1589a: 0xe0006dbc, 0x1589b: 0xe0008608, + 0x1589c: 0xe0009970, 0x1589d: 0x4304f220, 0x1589e: 0x4304f220, 0x1589f: 0xe0008898, + 0x158a0: 0xe00042d0, 0x158a1: 0xe0007430, 0x158a2: 0xe000769f, 0x158a3: 0xe0004f83, + 0x158a4: 0xe0006a77, 0x158a5: 0xe0009045, 0x158a6: 0x431f6c20, 0x158a7: 0xe000856e, + 0x158a8: 0xe00051c8, 0x158a9: 0xe000a222, 0x158aa: 0xe0006a7b, 0x158ab: 0x42c0ea20, + 0x158ac: 0x4885dc20, 0x158ad: 0x43043020, + 0x158b0: 0xe000665c, 0x158b1: 0x42a36a20, 0x158b2: 0xe0008971, 0x158b3: 0x429f0020, + 0x158b4: 0xe0009916, 0x158b5: 0xe0005054, 0x158b6: 0xe0007f4e, 0x158b7: 0xe0008672, + 0x158b8: 0xe00042b8, 0x158b9: 0x42aaaa20, 0x158ba: 0xe000a821, 0x158bb: 0xe0007d56, + 0x158bc: 0xe00097c0, 0x158bd: 0xe0006868, 0x158be: 0xe0007973, 0x158bf: 0xe000686c, + // Block 0x563, offset 0x158c0 + 0x158c0: 0xe000695a, 0x158c1: 0xe0008623, 0x158c2: 0x42bda420, 0x158c3: 0x42bdb220, + 0x158c4: 0xe000943f, 0x158c5: 0xe0007f04, 0x158c6: 0xe0005eeb, 0x158c7: 0x42c29c20, + 0x158c8: 0xe0008236, 0x158c9: 0xe0009021, 0x158ca: 0xe0007cca, 0x158cb: 0xe000922d, + 0x158cc: 0xe00054d6, 0x158cd: 0xe000823c, 0x158ce: 0xe00071bc, 0x158cf: 0x42c8a420, + 0x158d0: 0xe0007c85, 0x158d1: 0xe0009668, 0x158d2: 0xe000583b, 0x158d3: 0xe0005ecb, + 0x158d4: 0xe0008752, 0x158d5: 0x42d6f220, 0x158d6: 0xe0006c40, 0x158d7: 0xe0005c33, + 0x158d8: 0x42ddb620, 0x158d9: 0xe00085f0, 0x158da: 0xe000a06f, 0x158db: 0xe0008bb9, + 0x158dc: 0xe00085f6, 0x158dd: 0x42ef4e20, 0x158de: 0xe000868a, 0x158df: 0xe0006560, + 0x158e0: 0xe0008886, 0x158e1: 0xe0008a3d, 0x158e2: 0x42ea0c20, 0x158e3: 0x42ea7620, + 0x158e4: 0x42ec3a20, 0x158e5: 0xe0007d16, 0x158e6: 0xe00084c6, 0x158e7: 0xe0006ff0, + 0x158e8: 0xe00090e5, 0x158e9: 0x42ee9420, 0x158ea: 0xe000928f, 0x158eb: 0x42f19820, + 0x158ec: 0x42f56220, 0x158ed: 0xe0008ac1, 0x158ee: 0x42f8f620, 0x158ef: 0xe0008daf, + 0x158f0: 0xe0005980, 0x158f1: 0xe0006668, 0x158f2: 0xe0008608, 0x158f3: 0xe000a688, + 0x158f4: 0xe000a568, 0x158f5: 0x430ef220, 0x158f6: 0xe00043e8, 0x158f7: 0xe00066f1, + 0x158f8: 0xe0007430, 0x158f9: 0xe0008d58, 0x158fa: 0xe0008c9e, 0x158fb: 0xe0009678, + 0x158fc: 0xe000769f, 0x158fd: 0xe00051bc, 0x158fe: 0xe000827e, 0x158ff: 0xe0004f83, + // Block 0x564, offset 0x15900 + 0x15900: 0xe00065cc, 0x15901: 0xe0009045, 0x15902: 0xe0007219, 0x15903: 0xe00090b5, + 0x15904: 0x43233220, 0x15905: 0x4324ec20, 0x15906: 0xe00088e6, 0x15907: 0xe00051c8, + 0x15908: 0xe0008c15, 0x15909: 0x432fb620, 0x1590a: 0xe000a222, 0x1590b: 0x43301620, + 0x1590c: 0xe0006a7b, 0x1590d: 0xe00091a9, 0x1590e: 0xe0004ce9, 0x1590f: 0x48509420, + 0x15910: 0x48508820, 0x15911: 0x4867aa20, 0x15912: 0x44773a20, 0x15913: 0x44803020, + 0x15914: 0x44807220, 0x15915: 0x48a49220, 0x15916: 0x48b9a020, 0x15917: 0x48fda620, + 0x15918: 0x433e8620, 0x15919: 0xe0005b5e, + // Block 0x565, offset 0x15940 + 0x15940: 0xe0003d0b, 0x15941: 0xe0003cf3, 0x15942: 0xe0003cf7, 0x15943: 0xe0003cff, + 0x15944: 0xe0003d0f, 0x15945: 0xe0003d03, 0x15946: 0xf0000404, 0x15947: 0xe0003cfb, + 0x15948: 0xe0003d07, + 0x15950: 0x02bf2e86, 0x15951: 0x02a7de86, + // Block 0x566, offset 0x15980 + 0x15980: 0x429c7a20, 0x15981: 0xe000a5b0, 0x15982: 0x429c8220, 0x15983: 0x48024420, + 0x15984: 0x429ec020, 0x15985: 0xe0006033, 0x15986: 0xe0009b9c, 0x15987: 0xe000661c, + 0x15988: 0x42a0f420, 0x15989: 0xe000694b, 0x1598a: 0xe00073c6, 0x1598b: 0xe0006ca8, + 0x1598c: 0x44693c20, 0x1598d: 0x480c7420, 0x1598e: 0xe0005fa0, 0x1598f: 0x42a2a820, + 0x15990: 0x42a2c820, 0x15991: 0xe0004c59, 0x15992: 0x480a3820, 0x15993: 0x44697220, + 0x15994: 0xe0005217, 0x15995: 0xe00087fa, 0x15996: 0x480a9620, 0x15997: 0xe0007f4a, + 0x15998: 0xe000814e, 0x15999: 0x429d9820, 0x1599a: 0xe0005635, 0x1599b: 0x42a36a20, + 0x1599c: 0x4923be20, 0x1599d: 0x42a3ea20, 0x1599e: 0xe00084ee, 0x1599f: 0x4469be20, + 0x159a0: 0xe00041e4, 0x159a1: 0x42a48c20, 0x159a2: 0xe000a0b7, 0x159a3: 0xe0006c08, + 0x159a4: 0x446a2a20, 0x159a5: 0xe0007f4e, 0x159a6: 0xe0005fa8, 0x159a7: 0xe0004f5b, + 0x159a8: 0xe0008672, 0x159a9: 0xe0009e65, 0x159aa: 0x42a60c20, 0x159ab: 0xe0006858, + 0x159ac: 0xe000a81e, 0x159ad: 0xe0006954, 0x159ae: 0xe00062c4, 0x159af: 0xe0008ff9, + 0x159b0: 0xe0008ff5, 0x159b1: 0xe00046b1, 0x159b2: 0xe00046b1, 0x159b3: 0xe00046b1, + 0x159b4: 0x48145820, 0x159b5: 0xe000a6dc, 0x159b6: 0xe0005003, 0x159b7: 0xe0007246, + 0x159b8: 0x4816c620, 0x159b9: 0xe0004ea3, 0x159ba: 0xe00091b1, 0x159bb: 0x42a80c20, + 0x159bc: 0x42a93c20, 0x159bd: 0xe000a8fb, 0x159be: 0xe0008b5d, 0x159bf: 0xe0008ea4, + // Block 0x567, offset 0x159c0 + 0x159c0: 0xe000763f, 0x159c1: 0x42a9ec20, 0x159c2: 0xe000544e, 0x159c3: 0xe000479c, + 0x159c4: 0xe000a0cf, 0x159c5: 0xe0006e5c, 0x159c6: 0xe0006e5c, 0x159c7: 0xe000a821, + 0x159c8: 0xe0005197, 0x159c9: 0x42ab6620, 0x159ca: 0x42ab8420, 0x159cb: 0xe0005515, + 0x159cc: 0xe0009b5c, 0x159cd: 0x42ae2e20, 0x159ce: 0x42aca220, 0x159cf: 0xe0006864, + 0x159d0: 0xe0008aa9, 0x159d1: 0x42b1dc20, 0x159d2: 0xe0006fc8, 0x159d3: 0xe0007475, + 0x159d4: 0x42b01a20, 0x159d5: 0xe000a38d, 0x159d6: 0x42b06420, 0x159d7: 0xe0006682, + 0x159d8: 0x42b15820, 0x159d9: 0x4829c820, 0x159da: 0x42b1e420, 0x159db: 0x42b1ee20, + 0x159dc: 0xe0006775, 0x159dd: 0xe0005321, 0x159de: 0xe00060d4, 0x159df: 0xe0006b00, + 0x159e0: 0x482d5020, 0x159e1: 0x482dd420, 0x159e2: 0xe000a92e, 0x159e3: 0xe0007c79, + 0x159e4: 0xe0009c21, 0x159e5: 0x42b3b020, 0x159e6: 0xe00067a7, 0x159e7: 0x446ddc20, + 0x159e8: 0x446df820, 0x159e9: 0xe0007efe, 0x159ea: 0xe00057cb, 0x159eb: 0xe00057cb, + 0x159ec: 0x48339020, 0x159ed: 0xe0008106, 0x159ee: 0xe00099f6, 0x159ef: 0xe0005259, + 0x159f0: 0x42b7e620, 0x159f1: 0x48363020, 0x159f2: 0x42b7fe20, 0x159f3: 0x42b80c20, + 0x159f4: 0x42bea620, 0x159f5: 0x42b84420, 0x159f6: 0x446f0220, 0x159f7: 0xe0005521, + 0x159f8: 0x42b8dc20, 0x159f9: 0xe00071aa, 0x159fa: 0x42b91a20, 0x159fb: 0x483bc820, + 0x159fc: 0x42ba8620, 0x159fd: 0x483bcc20, 0x159fe: 0x42badc20, 0x159ff: 0x42bad620, + // Block 0x568, offset 0x15a00 + 0x15a00: 0x42baf820, 0x15a01: 0xe00072d1, 0x15a02: 0xe000704e, 0x15a03: 0x44705e20, + 0x15a04: 0xe0007120, 0x15a05: 0xe0007030, 0x15a06: 0xe000603f, 0x15a07: 0x42bcd220, + 0x15a08: 0x4470c420, 0x15a09: 0x48430620, 0x15a0a: 0x4470f820, 0x15a0b: 0x42bd6020, + 0x15a0c: 0xe00069db, 0x15a0d: 0xe0006d8c, 0x15a0e: 0xe0005837, 0x15a0f: 0x49472420, + 0x15a10: 0x42bdfc20, 0x15a11: 0x48466220, 0x15a12: 0x48466220, 0x15a13: 0xe00079d8, + 0x15a14: 0xe000558a, 0x15a15: 0xe000558a, 0x15a16: 0x44718e20, 0x15a17: 0x48657020, + 0x15a18: 0x48c3b420, 0x15a19: 0xe000a391, 0x15a1a: 0xe0008cfb, 0x15a1b: 0x4471c620, + 0x15a1c: 0x42bf3420, 0x15a1d: 0xe000850a, 0x15a1e: 0xe0009064, 0x15a1f: 0x42bff220, + 0x15a20: 0xe0007a93, 0x15a21: 0x44727420, 0x15a22: 0x44723820, 0x15a23: 0xe000a6c7, + 0x15a24: 0x484da820, 0x15a25: 0xe00055f1, 0x15a26: 0xe00085ed, 0x15a27: 0xe000a654, + 0x15a28: 0x42c29c20, 0x15a29: 0xe000a654, 0x15a2a: 0xe0005c1b, 0x15a2b: 0xe0009021, + 0x15a2c: 0xe000a245, 0x15a2d: 0xe0006878, 0x15a2e: 0xe0009363, 0x15a2f: 0xe00060e4, + 0x15a30: 0xe000922d, 0x15a31: 0xe0005757, 0x15a32: 0xe0006fdc, 0x15a33: 0x42c43620, + 0x15a34: 0x42c4ba20, 0x15a35: 0xe0009e80, 0x15a36: 0xe00063ac, 0x15a37: 0xe0007a27, + 0x15a38: 0x48561820, 0x15a39: 0xe0005e3f, 0x15a3a: 0x42c5f820, 0x15a3b: 0xe0006b1b, + 0x15a3c: 0xe0007054, 0x15a3d: 0x42c7c820, 0x15a3e: 0x4857e220, 0x15a3f: 0xe000910d, + // Block 0x569, offset 0x15a40 + 0x15a40: 0x42c78a20, 0x15a41: 0xe0007977, 0x15a42: 0x44745c20, 0x15a43: 0xe0005ddd, + 0x15a44: 0x42c8fc20, 0x15a45: 0xe000a84b, 0x15a46: 0x42c8ee20, 0x15a47: 0x4474d820, + 0x15a48: 0xe0006260, 0x15a49: 0xe00046d1, 0x15a4a: 0x48601420, 0x15a4b: 0xe0005087, + 0x15a4c: 0xe0006da4, 0x15a4d: 0xe0009111, 0x15a4e: 0x44763220, 0x15a4f: 0xe0006d9e, + 0x15a50: 0x44761020, 0x15a51: 0x4475c820, 0x15a52: 0xe0006036, 0x15a53: 0xe0005fa4, + 0x15a54: 0xe0009802, 0x15a55: 0x42cd3820, 0x15a56: 0xe00052e1, 0x15a57: 0x4487b220, + 0x15a58: 0xe000583b, 0x15a59: 0xe0005ecb, 0x15a5a: 0x42ce4220, 0x15a5b: 0xe0005090, + 0x15a5c: 0xe0009ef7, 0x15a5d: 0x48678620, 0x15a5e: 0x44769220, 0x15a5f: 0x42cff420, + 0x15a60: 0x42cf0a20, 0x15a61: 0x42d0a420, 0x15a62: 0xe0005f15, 0x15a63: 0x4868da20, + 0x15a64: 0x42d11c20, 0x15a65: 0x42d03e20, 0x15a66: 0x42d22820, 0x15a67: 0x44773a20, + 0x15a68: 0xe0006b96, 0x15a69: 0x42d34620, 0x15a6a: 0xe000445b, 0x15a6b: 0x42d55020, + 0x15a6c: 0x486d4620, 0x15a6d: 0xe0009001, 0x15a6e: 0x44783020, 0x15a6f: 0xe000925a, + 0x15a70: 0x48714e20, 0x15a71: 0xe000a242, 0x15a72: 0x44789c20, 0x15a73: 0xe000701e, + 0x15a74: 0x42d73e20, 0x15a75: 0xe0006c40, 0x15a76: 0x42d77620, 0x15a77: 0x48751a20, + 0x15a78: 0x483a1620, 0x15a79: 0x4875f420, 0x15a7a: 0xe0006558, 0x15a7b: 0x48797820, + 0x15a7c: 0xe0007a37, 0x15a7d: 0x42d99a20, 0x15a7e: 0x42d8ce20, 0x15a7f: 0x42da2c20, + // Block 0x56a, offset 0x15a80 + 0x15a80: 0xe0009ce2, 0x15a81: 0xe000a1aa, 0x15a82: 0xe0005c33, 0x15a83: 0xe000a43f, + 0x15a84: 0xe0009a66, 0x15a85: 0xe0007ac3, 0x15a86: 0x487a3c20, 0x15a87: 0x42da6820, + 0x15a88: 0xe000a167, 0x15a89: 0xe000850e, 0x15a8a: 0x447a6620, 0x15a8b: 0xe00085f0, + 0x15a8c: 0x42dd8e20, 0x15a8d: 0x487da220, 0x15a8e: 0xe000797b, 0x15a8f: 0xe0008d1f, + 0x15a90: 0x487ebc20, 0x15a91: 0x487f1c20, 0x15a92: 0xe00068c8, 0x15a93: 0x42e07220, + 0x15a94: 0xe0008bb9, 0x15a95: 0xe0007b77, 0x15a96: 0x447b2c20, 0x15a97: 0x42e09420, + 0x15a98: 0xe0008818, 0x15a99: 0x42e0ee20, 0x15a9a: 0xe0009b74, 0x15a9b: 0x480a4a20, + 0x15a9c: 0x42e28a20, 0x15a9d: 0x4884c620, 0x15a9e: 0x42e33820, 0x15a9f: 0x48875620, + 0x15aa0: 0xe0009303, 0x15aa1: 0xe000868a, 0x15aa2: 0x42e4a020, 0x15aa3: 0x488c1020, + 0x15aa4: 0xe0006dad, 0x15aa5: 0x42e52a20, 0x15aa6: 0x488e6a20, 0x15aa7: 0x48902820, + 0x15aa8: 0xe00053a6, 0x15aa9: 0xe0007e55, 0x15aaa: 0x447d5820, 0x15aab: 0x42e74a20, + 0x15aac: 0x447d7020, 0x15aad: 0x447d7020, 0x15aae: 0x42e88e20, 0x15aaf: 0xe0008263, + 0x15ab0: 0xe0008a3d, 0x15ab1: 0x42e90a20, 0x15ab2: 0xe00046f9, 0x15ab3: 0x447e3620, + 0x15ab4: 0x42ea4820, 0x15ab5: 0x48986c20, 0x15ab6: 0x42ea7c20, 0x15ab7: 0x48992420, + 0x15ab8: 0xe000847a, 0x15ab9: 0x48433e20, 0x15aba: 0xe00082b7, 0x15abb: 0x489f4220, + 0x15abc: 0x489f7020, 0x15abd: 0x48a08820, 0x15abe: 0x447ff820, 0x15abf: 0x44801020, + // Block 0x56b, offset 0x15ac0 + 0x15ac0: 0xe00090e5, 0x15ac1: 0x48a1e620, 0x15ac2: 0x48a1e420, 0x15ac3: 0x48a23220, + 0x15ac4: 0x48a26620, 0x15ac5: 0xe0009145, 0x15ac6: 0x42ee3e20, 0x15ac7: 0x42ee3e20, + 0x15ac8: 0x42ee9420, 0x15ac9: 0x44807220, 0x15aca: 0xe0009149, 0x15acb: 0x44808c20, + 0x15acc: 0x44812c20, 0x15acd: 0x48a83a20, 0x15ace: 0x42f09c20, 0x15acf: 0xe0005aee, + 0x15ad0: 0x42f19820, 0x15ad1: 0x4481c620, 0x15ad2: 0x48ac4c20, 0x15ad3: 0xe0008d31, + 0x15ad4: 0x48ad3420, 0x15ad5: 0x48ad8a20, 0x15ad6: 0xe00066dd, 0x15ad7: 0xe0009912, + 0x15ad8: 0x44825e20, 0x15ad9: 0xe00048de, 0x15ada: 0x42f49420, 0x15adb: 0x42f49e20, + 0x15adc: 0x48b2f820, 0x15add: 0x48b54e20, 0x15ade: 0x48b54e20, 0x15adf: 0x42f5dc20, + 0x15ae0: 0x44840420, 0x15ae1: 0x48b75620, 0x15ae2: 0xe00089d5, 0x15ae3: 0xe00098ca, + 0x15ae4: 0x44844e20, 0x15ae5: 0x48b90020, 0x15ae6: 0x42f9a420, 0x15ae7: 0x44854020, + 0x15ae8: 0x42f9d020, 0x15ae9: 0x42f9c620, 0x15aea: 0xe00050d5, 0x15aeb: 0x48bf0c20, + 0x15aec: 0xe0006664, 0x15aed: 0x44860220, 0x15aee: 0xe00099d5, 0x15aef: 0x42fc0420, + 0x15af0: 0xe00070cf, 0x15af1: 0x44866820, 0x15af2: 0x48c45020, 0x15af3: 0x48c48e20, + 0x15af4: 0x4486b220, 0x15af5: 0x48c5b220, 0x15af6: 0x42fef420, 0x15af7: 0x48c67c20, + 0x15af8: 0x42ff2a20, 0x15af9: 0xe00048b0, 0x15afa: 0xe0008608, 0x15afb: 0x48c9b420, + 0x15afc: 0x48ca4620, 0x15afd: 0x4300c020, 0x15afe: 0x48cb5020, 0x15aff: 0xe00097d8, + // Block 0x56c, offset 0x15b00 + 0x15b00: 0x4866be20, 0x15b01: 0x4487aa20, 0x15b02: 0xe0008302, 0x15b03: 0x43020620, + 0x15b04: 0x44881620, 0x15b05: 0xe00069a2, 0x15b06: 0xe00085ce, 0x15b07: 0x48cf4e20, + 0x15b08: 0x48cf6a20, 0x15b09: 0x48672620, 0x15b0a: 0x48673820, 0x15b0b: 0xe00079d8, + 0x15b0c: 0x43040820, 0x15b0d: 0x431f3c20, 0x15b0e: 0x4488d620, 0x15b0f: 0x43052220, + 0x15b10: 0xe0008008, 0x15b11: 0xe00090a3, 0x15b12: 0x42a56620, 0x15b13: 0xe000a565, + 0x15b14: 0xe0006438, 0x15b15: 0xe00075c0, 0x15b16: 0xe0004850, 0x15b17: 0x48d67820, + 0x15b18: 0xe0007829, 0x15b19: 0xe000945a, 0x15b1a: 0x4306c620, 0x15b1b: 0x43075a20, + 0x15b1c: 0xe0007cd9, 0x15b1d: 0xe0005edf, 0x15b1e: 0x4307ce20, 0x15b1f: 0xe0008898, + 0x15b20: 0x4306a620, 0x15b21: 0xe0004d87, 0x15b22: 0xe0004f13, 0x15b23: 0xe000944b, + 0x15b24: 0x48d86c20, 0x15b25: 0x48dad620, 0x15b26: 0x48d9aa20, 0x15b27: 0x448a5620, + 0x15b28: 0xe0009e30, 0x15b29: 0x4309e620, 0x15b2a: 0x430a2c20, 0x15b2b: 0x48e79420, + 0x15b2c: 0xe00082d2, 0x15b2d: 0x48de5820, 0x15b2e: 0x448aba20, 0x15b2f: 0x448ac220, + 0x15b30: 0x48df6220, 0x15b31: 0x48e1a420, 0x15b32: 0x448ad620, 0x15b33: 0xe000a037, + 0x15b34: 0xe0005aaf, 0x15b35: 0xe000a85d, 0x15b36: 0x430cd220, 0x15b37: 0xe00099e1, + 0x15b38: 0x430d1020, 0x15b39: 0x430e1c20, 0x15b3a: 0x430dc420, 0x15b3b: 0x430ef220, + 0x15b3c: 0xe0008b39, 0x15b3d: 0x430ed620, 0x15b3e: 0x430f0c20, 0x15b3f: 0x448bae20, + // Block 0x56d, offset 0x15b40 + 0x15b40: 0x430fc220, 0x15b41: 0x43100220, 0x15b42: 0x448bf220, 0x15b43: 0x4310c020, + 0x15b44: 0xe000842f, 0x15b45: 0x48ecce20, 0x15b46: 0x4311ae20, 0x15b47: 0x4311bc20, + 0x15b48: 0x448c6a20, 0x15b49: 0x4311f420, 0x15b4a: 0x44697620, 0x15b4b: 0x48f15c20, + 0x15b4c: 0x48f2cc20, 0x15b4d: 0x448d7c20, 0x15b4e: 0x448d8e20, 0x15b4f: 0xe0007008, + 0x15b50: 0xe000827e, 0x15b51: 0xe00065cc, 0x15b52: 0xe000743c, 0x15b53: 0x48f95020, + 0x15b54: 0xe0004a8d, 0x15b55: 0xe00068a0, 0x15b56: 0xe00049d6, 0x15b57: 0xe00050f0, + 0x15b58: 0x48fe5e20, 0x15b59: 0x48100820, 0x15b5a: 0xe00063c0, 0x15b5b: 0x431b7820, + 0x15b5c: 0x431be020, 0x15b5d: 0x4811bc20, 0x15b5e: 0x431da820, 0x15b5f: 0xe0007219, + 0x15b60: 0x490ba420, 0x15b61: 0x490bda20, 0x15b62: 0x43212820, 0x15b63: 0x4321e220, + 0x15b64: 0x43222220, 0x15b65: 0x490e5c20, 0x15b66: 0x43223620, 0x15b67: 0xe00063e0, + 0x15b68: 0xe000a311, 0x15b69: 0x4325b020, 0x15b6a: 0xe0006678, 0x15b6b: 0x4327f220, + 0x15b6c: 0x43282a20, 0x15b6d: 0x4917f420, 0x15b6e: 0xe0004476, 0x15b6f: 0x44932a20, + 0x15b70: 0x432b6e20, 0x15b71: 0x491aee20, 0x15b72: 0x4493cc20, 0x15b73: 0x432d8620, + 0x15b74: 0x42bb6420, 0x15b75: 0xe00080ca, 0x15b76: 0x49228a20, 0x15b77: 0x49243420, + 0x15b78: 0x4494dc20, 0x15b79: 0x4494ec20, 0x15b7a: 0xe0009fd5, 0x15b7b: 0x49281420, + 0x15b7c: 0x44956420, 0x15b7d: 0x49292c20, 0x15b7e: 0x43301620, 0x15b7f: 0x43301620, + // Block 0x56e, offset 0x15b80 + 0x15b80: 0x43305220, 0x15b81: 0x492b6c20, 0x15b82: 0xe00050f9, 0x15b83: 0x44966620, + 0x15b84: 0x43325220, 0x15b85: 0x43334e20, 0x15b86: 0x43338420, 0x15b87: 0x4333fc20, + 0x15b88: 0x44979c20, 0x15b89: 0x49366020, 0x15b8a: 0xe00091a9, 0x15b8b: 0x43388020, + 0x15b8c: 0x4339fa20, 0x15b8d: 0x44999c20, 0x15b8e: 0x4499da20, 0x15b8f: 0x433ace20, + 0x15b90: 0x49419c20, 0x15b91: 0x4499f020, 0x15b92: 0x49420a20, 0x15b93: 0x49441c20, + 0x15b94: 0x49452220, 0x15b95: 0xe0005df2, 0x15b96: 0x449aac20, 0x15b97: 0x433df220, + 0x15b98: 0x433dfc20, 0x15b99: 0x433e0a20, 0x15b9a: 0x433e1e20, 0x15b9b: 0x433e2c20, + 0x15b9c: 0xe00069c3, 0x15b9d: 0x494c0020, + // Block 0x56f, offset 0x15bc0 + 0x15bc0: 0xa000f202, 0x15bc1: 0x403fba21, 0x15bc2: 0x403fba20, 0x15bc3: 0x403fbc20, + 0x15bc4: 0x403fbc20, 0x15bc5: 0x403fbe20, 0x15bc6: 0x403fc020, 0x15bc7: 0x403fcc20, + 0x15bc8: 0x403fce20, 0x15bc9: 0x403fd020, 0x15bca: 0x403fd220, 0x15bcb: 0x403fd420, + 0x15bcc: 0x403fd820, 0x15bcd: 0x403fdc20, 0x15bce: 0x403fde20, 0x15bcf: 0x403fe020, + 0x15bd0: 0x403fe220, 0x15bd1: 0x403fe420, 0x15bd2: 0x403fe620, 0x15bd3: 0x403fe820, + 0x15bd4: 0x403fea20, 0x15bd5: 0xcaac3be1, 0x15bd6: 0x403fee20, 0x15bd7: 0x403ff020, + 0x15bd8: 0x403ff420, 0x15bd9: 0x403ff620, 0x15bda: 0x403ff820, 0x15bdb: 0x403ffa20, + 0x15bdc: 0x403ffc20, 0x15bdd: 0x40400220, 0x15bde: 0x40400420, 0x15bdf: 0x40400620, + 0x15be0: 0x40400820, 0x15be1: 0x40400a20, 0x15be2: 0x40400e20, 0x15be3: 0x40401020, + 0x15be4: 0x40401220, 0x15be5: 0x40401420, 0x15be6: 0x40401620, 0x15be7: 0x40401820, + 0x15be8: 0x40401a20, 0x15be9: 0xe0001830, 0x15bea: 0x40401c20, 0x15beb: 0x40401e20, + 0x15bec: 0x40402020, 0x15bed: 0x40402420, 0x15bee: 0x40402620, 0x15bef: 0x40402820, + 0x15bf0: 0x40402c20, 0x15bf1: 0xe0001839, 0x15bf2: 0x40402e20, 0x15bf3: 0x40403c20, + 0x15bf4: 0xe000a994, 0x15bf5: 0x40403220, 0x15bf6: 0x40403420, 0x15bf7: 0x40403620, + 0x15bf8: 0x40403820, 0x15bf9: 0x40403a20, 0x15bfa: 0x40404c20, 0x15bfb: 0x40404e20, + 0x15bfc: 0xa070f102, 0x15bfd: 0x40403c20, 0x15bfe: 0x40404a20, 0x15bff: 0x40405620, + // Block 0x570, offset 0x15c00 + 0x15c00: 0xa0000000, 0x15c01: 0xa0000000, 0x15c02: 0xa0000000, 0x15c03: 0xa0000000, + 0x15c04: 0xa0000000, 0x15c05: 0xa0000000, 0x15c06: 0xa0000000, 0x15c07: 0xa0000000, + 0x15c08: 0xa0000000, 0x15c09: 0x40020020, 0x15c0a: 0x40020220, 0x15c0b: 0x40020420, + 0x15c0c: 0x40020620, 0x15c0d: 0x40020820, 0x15c0e: 0xa0000000, 0x15c0f: 0xa0000000, + 0x15c10: 0xa0000000, 0x15c11: 0xa0000000, 0x15c12: 0xa0000000, 0x15c13: 0xa0000000, + 0x15c14: 0xa0000000, 0x15c15: 0xa0000000, 0x15c16: 0xa0000000, 0x15c17: 0xa0000000, + 0x15c18: 0xa0000000, 0x15c19: 0xa0000000, 0x15c1a: 0xa0000000, 0x15c1b: 0xa0000000, + 0x15c1c: 0xa0000000, 0x15c1d: 0xa0000000, 0x15c1e: 0xa0000000, 0x15c1f: 0xa0000000, + 0x15c20: 0x40021220, 0x15c21: 0x4002ba20, 0x15c22: 0x4003e020, 0x15c23: 0x4004ea20, + 0x15c24: 0x4027de20, 0x15c25: 0x4004ec20, 0x15c26: 0x4004e620, 0x15c27: 0x4003d220, + 0x15c28: 0x4003f420, 0x15c29: 0x4003f620, 0x15c2a: 0x4004d820, 0x15c2b: 0x40093820, + 0x15c2c: 0x40024020, 0x15c2d: 0x40021a20, 0x15c2e: 0x4002e420, 0x15c2f: 0x4004e220, + 0x15c30: 0x4029cc20, 0x15c31: 0x4029ce20, 0x15c32: 0x4029d020, 0x15c33: 0x4029d220, + 0x15c34: 0x4029d420, 0x15c35: 0x4029d620, 0x15c36: 0x4029d820, 0x15c37: 0x4029da20, + 0x15c38: 0x4029dc20, 0x15c39: 0x4029de20, 0x15c3a: 0x40026c20, 0x15c3b: 0x40026220, + 0x15c3c: 0x40094020, 0x15c3d: 0x40094220, 0x15c3e: 0x40094420, 0x15c3f: 0x4002c420, + // Block 0x571, offset 0x15c40 + 0x15c40: 0x4004d620, 0x15c41: 0x002bde88, 0x15c42: 0x002c0a88, 0x15c43: 0x002c3a88, + 0x15c44: 0x002c6288, 0x15c45: 0x002c9888, 0x15c46: 0x002d0888, 0x15c47: 0xcab12692, + 0x15c48: 0x002d6888, 0x15c49: 0x002d9a88, 0x15c4a: 0x002dcc88, 0x15c4b: 0xcab726c2, + 0x15c4c: 0xc0030002, 0x15c4d: 0xcac33c48, 0x15c4e: 0xcadf3daa, 0x15c4f: 0x002ee288, + 0x15c50: 0x002f2c88, 0x15c51: 0x002f5688, 0x15c52: 0x002f7a88, 0x15c53: 0xcaf409c2, + 0x15c54: 0xcafa2722, 0x15c55: 0x00306c88, 0x15c56: 0x0030be88, 0x15c57: 0x0030e288, + 0x15c58: 0x0030f688, 0x15c59: 0x00310088, 0x15c5a: 0x00312a88, 0x15c5b: 0x4003f820, + 0x15c5c: 0x4004e420, 0x15c5d: 0x4003fa20, 0x15c5e: 0x40062420, 0x15c5f: 0x40021620, + 0x15c60: 0x40061e20, 0x15c61: 0x402bde20, 0x15c62: 0x402c0a20, 0x15c63: 0x402c3a20, + 0x15c64: 0x402c6220, 0x15c65: 0x402c9820, 0x15c66: 0x402d0820, 0x15c67: 0xcaae2692, + 0x15c68: 0x402d6820, 0x15c69: 0x402d9a20, 0x15c6a: 0x402dcc20, 0x15c6b: 0xcab426c2, + 0x15c6c: 0xc0000002, 0x15c6d: 0xcaba3c48, 0x15c6e: 0xcacc3cca, 0x15c6f: 0x402ee220, + 0x15c70: 0x402f2c20, 0x15c71: 0x402f5620, 0x15c72: 0x402f7a20, 0x15c73: 0xcaf109c2, + 0x15c74: 0xcaf72722, 0x15c75: 0x40306c20, 0x15c76: 0x4030be20, 0x15c77: 0x4030e220, + 0x15c78: 0x4030f620, 0x15c79: 0x40310020, 0x15c7a: 0x40312a20, 0x15c7b: 0x4003fc20, + 0x15c7c: 0x40094820, 0x15c7d: 0x4003fe20, 0x15c7e: 0x40094c20, 0x15c7f: 0xa0000000, + // Block 0x572, offset 0x15c80 + 0x15c80: 0x402c1a20, 0x15c81: 0x002c2a88, 0x15c82: 0x002c3288, 0x15c83: 0x402c3220, + 0x15c84: 0x0031c488, 0x15c85: 0x4031c420, 0x15c86: 0x002ee2a3, 0x15c87: 0x002c4e88, + 0x15c88: 0x402c4e20, 0x15c89: 0x002c7288, 0x15c8a: 0x002c7a88, 0x15c8b: 0x002c8488, + 0x15c8c: 0x402c8420, 0x15c8d: 0xe000115c, 0x15c8e: 0x002cae88, 0x15c8f: 0x002cb888, + 0x15c90: 0x002c9a83, 0x15c91: 0x002d1688, 0x15c92: 0x402d1620, 0x15c93: 0x002d4488, + 0x15c94: 0x002d5888, 0x15c95: 0x402d7820, 0x15c96: 0x002dc288, 0x15c97: 0x002db688, + 0x15c98: 0x002e0a88, 0x15c99: 0x402e0a20, 0x15c9a: 0x402e3820, 0x15c9b: 0x402e7220, + 0x15c9c: 0x0030a088, 0x15c9d: 0x002eb488, 0x15c9e: 0x402ebc20, 0x15c9f: 0x002f1088, + 0x15ca0: 0xe0000e56, 0x15ca1: 0xe0000e53, 0x15ca2: 0x002d6088, 0x15ca3: 0x402d6020, + 0x15ca4: 0x002f3e88, 0x15ca5: 0x402f3e20, 0x15ca6: 0x002f8288, 0x15ca7: 0x0031b488, + 0x15ca8: 0x4031b420, 0x15ca9: 0x00300888, 0x15caa: 0x40301220, 0x15cab: 0x40304220, + 0x15cac: 0x00304a88, 0x15cad: 0x40304a20, 0x15cae: 0x00305288, 0x15caf: 0xe000105f, + 0x15cb0: 0xe000105c, 0x15cb1: 0x0030b488, 0x15cb2: 0x0030cc88, 0x15cb3: 0x00311888, + 0x15cb4: 0x40311820, 0x15cb5: 0x00313488, 0x15cb6: 0x40313420, 0x15cb7: 0x00316488, + 0x15cb8: 0x00316e88, 0x15cb9: 0x40316e20, 0x15cba: 0x40317820, 0x15cbb: 0x4031a620, + 0x15cbc: 0x0031bc88, 0x15cbd: 0x4031bc20, 0x15cbe: 0xe0000fc9, 0x15cbf: 0x40319420, + // Block 0x573, offset 0x15cc0 + 0x15cc0: 0x40315820, 0x15cc1: 0x0031d488, 0x15cc2: 0x4031d420, 0x15cc3: 0x002c1a88, + 0x15cc4: 0x00307c88, 0x15cc5: 0x0030da88, 0x15cc6: 0x002ca288, 0x15cc7: 0x402ca220, + 0x15cc8: 0x002dde88, 0x15cc9: 0x402dde20, 0x15cca: 0x002f6a88, 0x15ccb: 0x402f6a20, + 0x15ccc: 0x002f8e88, 0x15ccd: 0x402f8e20, 0x15cce: 0x00311088, 0x15ccf: 0x40311020, + 0x15cd0: 0x402bf020, 0x15cd1: 0x402bf820, 0x15cd2: 0x402c0220, 0x15cd3: 0x402c2a20, + 0x15cd4: 0x402ee221, 0x15cd5: 0x402c5620, 0x15cd6: 0x402c7220, 0x15cd7: 0x402c7a20, + 0x15cd8: 0x402ccc20, 0x15cd9: 0x402cb820, 0x15cda: 0x402cd420, 0x15cdb: 0x402c9a20, + 0x15cdc: 0x402cdc20, 0x15cdd: 0x402ce820, 0x15cde: 0x402cf020, 0x15cdf: 0x402dee20, + 0x15ce0: 0x402d4420, 0x15ce1: 0x402d2a20, 0x15ce2: 0x402d3220, 0x15ce3: 0x402d5820, + 0x15ce4: 0x402d0020, 0x15ce5: 0x40308820, 0x15ce6: 0x402d8020, 0x15ce7: 0x402d8e20, + 0x15ce8: 0x402db620, 0x15ce9: 0x402dc220, 0x15cea: 0x402daa20, 0x15ceb: 0x402e4220, + 0x15cec: 0x402e4a20, 0x15ced: 0x402e5420, 0x15cee: 0x402e6820, 0x15cef: 0x4030a020, + 0x15cf0: 0x4030ac20, 0x15cf1: 0x402e9020, 0x15cf2: 0x402eb420, 0x15cf3: 0x402ec820, + 0x15cf4: 0x402ea620, 0x15cf5: 0x402f1020, 0x15cf6: 0x402eee20, 0x15cf7: 0x402f1a20, + 0x15cf8: 0x402f4c20, 0x15cf9: 0x402f9820, 0x15cfa: 0x402fa220, 0x15cfb: 0x402fac20, + 0x15cfc: 0x402fb620, 0x15cfd: 0x402fbe20, 0x15cfe: 0x402fc620, 0x15cff: 0x402fd020, + // Block 0x574, offset 0x15d00 + 0x15d00: 0xa0000000, 0x15d01: 0xa0000000, 0x15d02: 0xa0000000, 0x15d03: 0xa0000000, + 0x15d04: 0xa0000000, 0x15d05: 0xa0000000, 0x15d06: 0xa0000000, 0x15d07: 0xa0000000, + 0x15d08: 0xa0000000, 0x15d09: 0x40020020, 0x15d0a: 0x40020220, 0x15d0b: 0x40020420, + 0x15d0c: 0x40020620, 0x15d0d: 0x40020820, 0x15d0e: 0xa0000000, 0x15d0f: 0xa0000000, + 0x15d10: 0xa0000000, 0x15d11: 0xa0000000, 0x15d12: 0xa0000000, 0x15d13: 0xa0000000, + 0x15d14: 0xa0000000, 0x15d15: 0xa0000000, 0x15d16: 0xa0000000, 0x15d17: 0xa0000000, + 0x15d18: 0xa0000000, 0x15d19: 0xa0000000, 0x15d1a: 0xa0000000, 0x15d1b: 0xa0000000, + 0x15d1c: 0xa0000000, 0x15d1d: 0xa0000000, 0x15d1e: 0xa0000000, 0x15d1f: 0xa0000000, + 0x15d20: 0x40021220, 0x15d21: 0x4002ba20, 0x15d22: 0x4003e020, 0x15d23: 0x4004ea20, + 0x15d24: 0x4027de20, 0x15d25: 0x4004ec20, 0x15d26: 0x4004e620, 0x15d27: 0x4003d220, + 0x15d28: 0x4003f420, 0x15d29: 0x4003f620, 0x15d2a: 0x4004d820, 0x15d2b: 0x40093820, + 0x15d2c: 0x40024020, 0x15d2d: 0x40021a20, 0x15d2e: 0x4002e420, 0x15d2f: 0x4004e220, + 0x15d30: 0x4029cc20, 0x15d31: 0x4029ce20, 0x15d32: 0x4029d020, 0x15d33: 0x4029d220, + 0x15d34: 0x4029d420, 0x15d35: 0x4029d620, 0x15d36: 0x4029d820, 0x15d37: 0x4029da20, + 0x15d38: 0x4029dc20, 0x15d39: 0x4029de20, 0x15d3a: 0x40026c20, 0x15d3b: 0x40026220, + 0x15d3c: 0x40094020, 0x15d3d: 0x40094220, 0x15d3e: 0x40094420, 0x15d3f: 0x4002c420, + // Block 0x575, offset 0x15d40 + 0x15d40: 0x4004d620, 0x15d41: 0xcb030be1, 0x15d42: 0x002c0a88, 0x15d43: 0xc3350991, + 0x15d44: 0x002c6288, 0x15d45: 0xcb083ea1, 0x15d46: 0x002d0888, 0x15d47: 0x002d2288, + 0x15d48: 0x002d6888, 0x15d49: 0xcb0d0be1, 0x15d4a: 0x002dcc88, 0x15d4b: 0x002dfe88, + 0x15d4c: 0xc0030002, 0x15d4d: 0x002e8288, 0x15d4e: 0x002e9e88, 0x15d4f: 0x002ee288, + 0x15d50: 0x002f2c88, 0x15d51: 0x002f5688, 0x15d52: 0x002f7a88, 0x15d53: 0xc3430991, + 0x15d54: 0x00302c88, 0x15d55: 0xcb123ed1, 0x15d56: 0x0030be88, 0x15d57: 0x0030e288, + 0x15d58: 0x0030f688, 0x15d59: 0x002d9ac3, 0x15d5a: 0xc3630991, 0x15d5b: 0x4003f820, + 0x15d5c: 0x4004e420, 0x15d5d: 0x4003fa20, 0x15d5e: 0x40062420, 0x15d5f: 0x40021620, + 0x15d60: 0x40061e20, 0x15d61: 0xcb010be1, 0x15d62: 0x402c0a20, 0x15d63: 0xc3330991, + 0x15d64: 0x402c6220, 0x15d65: 0xcb053ea1, 0x15d66: 0x402d0820, 0x15d67: 0x402d2220, + 0x15d68: 0x402d6820, 0x15d69: 0xcb0b0be1, 0x15d6a: 0x402dcc20, 0x15d6b: 0x402dfe20, + 0x15d6c: 0xc0000002, 0x15d6d: 0x402e8220, 0x15d6e: 0x402e9e20, 0x15d6f: 0x402ee220, + 0x15d70: 0x402f2c20, 0x15d71: 0x402f5620, 0x15d72: 0x402f7a20, 0x15d73: 0xc3410991, + 0x15d74: 0x40302c20, 0x15d75: 0xcb0f3ed1, 0x15d76: 0x4030be20, 0x15d77: 0x4030e220, + 0x15d78: 0x4030f620, 0x15d79: 0x402d9a22, 0x15d7a: 0xc3610991, 0x15d7b: 0x4003fc20, + 0x15d7c: 0x40094820, 0x15d7d: 0x4003fe20, 0x15d7e: 0x40094c20, 0x15d7f: 0xa0000000, + // Block 0x576, offset 0x15d80 + 0x15d80: 0xe00008f5, 0x15d81: 0xe00008ef, 0x15d82: 0xe0000921, 0x15d83: 0xe0000969, + 0x15d84: 0xe000095b, 0x15d85: 0xe000094d, 0x15d86: 0xe00009dd, 0x15d87: 0xe0000a53, + 0x15d88: 0xe0000ae8, 0x15d89: 0xe0000ae2, 0x15d8a: 0xe0000af4, 0x15d8b: 0xe0000b20, + 0x15d8c: 0xe0000c2b, 0x15d8d: 0xe0000c25, 0x15d8e: 0xe0000c37, 0x15d8f: 0xe0000c43, + 0x15d90: 0xe0000ab3, 0x15d91: 0xe0000d63, 0x15d92: 0xe0000d9a, 0x15d93: 0xe0000d94, + 0x15d94: 0xe0000da6, 0x15d95: 0xe0000de6, 0x15d96: 0xe0000dd2, 0x15d97: 0x40093e20, + 0x15d98: 0xe0000e12, 0x15d99: 0xe0000fe1, 0x15d9a: 0xe0000fdb, 0x15d9b: 0xe0000fed, + 0x15d9c: 0xe0000fff, 0x15d9d: 0xe000a99a, 0x15d9e: 0x00318888, 0x15d9f: 0xe0000f7b, + 0x15da0: 0xe00008f2, 0x15da1: 0xe00008ec, 0x15da2: 0xe000091e, 0x15da3: 0xe0000966, + 0x15da4: 0xe0000958, 0x15da5: 0xe000094a, 0x15da6: 0xe00009d5, 0x15da7: 0xe0000a4d, + 0x15da8: 0xe0000ae5, 0x15da9: 0xe0000adf, 0x15daa: 0xe0000af1, 0x15dab: 0xe0000b1d, + 0x15dac: 0xe0000c28, 0x15dad: 0xe0000c22, 0x15dae: 0xe0000c34, 0x15daf: 0xe0000c40, + 0x15db0: 0xe0000aad, 0x15db1: 0xe0000d60, 0x15db2: 0xe0000d97, 0x15db3: 0xe0000d91, + 0x15db4: 0xe0000da3, 0x15db5: 0xe0000de3, 0x15db6: 0xe0000dcf, 0x15db7: 0x40093c20, + 0x15db8: 0xe0000e0f, 0x15db9: 0xe0000fde, 0x15dba: 0xe0000fd8, 0x15dbb: 0xe0000fea, + 0x15dbc: 0xe0000ffc, 0x15dbd: 0xe000a997, 0x15dbe: 0x40318820, 0x15dbf: 0xe000a9ac, + // Block 0x577, offset 0x15dc0 + 0x15dc0: 0xe0000983, 0x15dc1: 0xe0000980, 0x15dc2: 0xe00008fb, 0x15dc3: 0xe00008f8, + 0x15dc4: 0x002bdea3, 0x15dc5: 0x402bde21, 0x15dc6: 0xe0000a38, 0x15dc7: 0xe0000a35, + 0x15dc8: 0xe0000a3e, 0x15dc9: 0xe0000a3b, 0x15dca: 0xe0000a4a, 0x15dcb: 0xe0000a47, + 0x15dcc: 0x002c3c83, 0x15dcd: 0x402c3c20, 0x15dce: 0xe0000a86, 0x15dcf: 0xe0000a83, + 0x15dd0: 0xe0000aaa, 0x15dd1: 0xe0000aa7, 0x15dd2: 0xe0000b46, 0x15dd3: 0xe0000b43, + 0x15dd4: 0xe0000aee, 0x15dd5: 0xe0000aeb, 0x15dd6: 0x002c98c3, 0x15dd7: 0x402c9822, + 0x15dd8: 0x002c98a3, 0x15dd9: 0x402c9821, 0x15dda: 0xe0000b1a, 0x15ddb: 0xe0000b17, + 0x15ddc: 0xe0000bb8, 0x15ddd: 0xe0000bb5, 0x15dde: 0xe0000bb2, 0x15ddf: 0xe0000baf, + 0x15de0: 0xe0000bc4, 0x15de1: 0xe0000bc1, 0x15de2: 0xe0000bca, 0x15de3: 0xe0000bc7, + 0x15de4: 0xe0000bee, 0x15de5: 0xe0000beb, 0x15de6: 0xe0000c1b, 0x15de7: 0xe0000c18, + 0x15de8: 0xe0000c51, 0x15de9: 0xe0000c4e, 0x15dea: 0xe0000c60, 0x15deb: 0xe0000c5d, + 0x15dec: 0xe0000c31, 0x15ded: 0xe0000c2e, 0x15dee: 0x002d9aa3, 0x15def: 0x402d9a21, + 0x15df0: 0xe0000c54, 0x15df1: 0x402da220, 0x15df2: 0xf0000a0a, 0x15df3: 0xf0000404, + 0x15df4: 0xe0000c8a, 0x15df5: 0xe0000c87, 0x15df6: 0xe0000c9f, 0x15df7: 0xe0000c9c, + 0x15df8: 0x402f7220, 0x15df9: 0xe0000ccc, 0x15dfa: 0xe0000cc9, 0x15dfb: 0xe0000cd8, + 0x15dfc: 0xe0000cd5, 0x15dfd: 0xe0000cd2, 0x15dfe: 0xe0000ccf, 0x15dff: 0xe0000d04, + // Block 0x578, offset 0x15e00 + 0x15e00: 0xe0000cfe, 0x15e01: 0xe0000cf8, 0x15e02: 0xe0000cf5, 0x15e03: 0xe0000d51, + 0x15e04: 0xe0000d4e, 0x15e05: 0xe0000d6f, 0x15e06: 0xe0000d6c, 0x15e07: 0xe0000d5d, + 0x15e08: 0xe0000d5a, 0x15e09: 0xf0000404, 0x15e0a: 0x002eda88, 0x15e0b: 0x402eda20, + 0x15e0c: 0xe0000e2e, 0x15e0d: 0xe0000e2b, 0x15e0e: 0xe0000da0, 0x15e0f: 0xe0000d9d, + 0x15e10: 0xe0000de0, 0x15e11: 0xe0000ddd, 0x15e12: 0xe0000e93, 0x15e13: 0xe0000e8f, + 0x15e14: 0xe0000eca, 0x15e15: 0xe0000ec7, 0x15e16: 0xe0000edc, 0x15e17: 0xe0000ed9, + 0x15e18: 0xe0000ed0, 0x15e19: 0xe0000ecd, 0x15e1a: 0xe0000f1f, 0x15e1b: 0xe0000f1c, + 0x15e1c: 0xe0000f2d, 0x15e1d: 0xe0000f2a, 0x15e1e: 0xe0000f47, 0x15e1f: 0xe0000f44, + 0x15e20: 0x002fe883, 0x15e21: 0x402fe820, 0x15e22: 0xe0000f99, 0x15e23: 0xe0000f96, + 0x15e24: 0xe0000f8a, 0x15e25: 0xe0000f87, 0x15e26: 0x00303688, 0x15e27: 0x40303620, + 0x15e28: 0xe000102b, 0x15e29: 0xe0001028, 0x15e2a: 0x00306cc3, 0x15e2b: 0x40306c22, + 0x15e2c: 0xe0000fe7, 0x15e2d: 0xe0000fe4, 0x15e2e: 0xe0000ff9, 0x15e2f: 0xe0000ff6, + 0x15e30: 0xe0001025, 0x15e31: 0xe0001022, 0x15e32: 0x00306ca3, 0x15e33: 0x40306c21, + 0x15e34: 0xe00010d8, 0x15e35: 0xe00010d5, 0x15e36: 0xe000a9a6, 0x15e37: 0xe000a9a3, + 0x15e38: 0xe000a9af, 0x15e39: 0xe000113b, 0x15e3a: 0xe0001138, 0x15e3b: 0xe000114d, + 0x15e3c: 0xe000114a, 0x15e3d: 0x00312c83, 0x15e3e: 0x40312c20, 0x15e3f: 0xe0000f64, + // Block 0x579, offset 0x15e40 + 0x15e40: 0x40321220, 0x15e41: 0x40321a20, 0x15e42: 0x40322220, 0x15e43: 0x40322a20, + 0x15e44: 0xe0000ad5, 0x15e45: 0xe0000ad1, 0x15e46: 0xe0000acd, 0x15e47: 0xf0000a0a, + 0x15e48: 0xf000040a, 0x15e49: 0xf0000404, 0x15e4a: 0xf0000a0a, 0x15e4b: 0xf000040a, + 0x15e4c: 0xf0000404, 0x15e4d: 0xe0000947, 0x15e4e: 0xe0000944, 0x15e4f: 0xe0000c3d, + 0x15e50: 0xe0000c3a, 0x15e51: 0xe0000dcc, 0x15e52: 0xe0000dc9, 0x15e53: 0xe0000ff3, + 0x15e54: 0xe0000ff0, 0x15e55: 0xe000a9d3, 0x15e56: 0xe000a9d0, 0x15e57: 0xe0001006, + 0x15e58: 0xe0001002, 0x15e59: 0xe0001016, 0x15e5a: 0xe0001012, 0x15e5b: 0xe000100e, + 0x15e5c: 0xe000100a, 0x15e5d: 0x402cae20, 0x15e5e: 0xe0000962, 0x15e5f: 0xe000095e, + 0x15e60: 0xe0000976, 0x15e61: 0xe0000972, 0x15e62: 0xe00009f4, 0x15e63: 0xe00009ef, + 0x15e64: 0x002d3a88, 0x15e65: 0x402d3a20, 0x15e66: 0xe0000bbe, 0x15e67: 0xe0000bbb, + 0x15e68: 0xe0000c99, 0x15e69: 0xe0000c96, 0x15e6a: 0xe0000e20, 0x15e6b: 0xe0000e1d, + 0x15e6c: 0xe0000e27, 0x15e6d: 0xe0000e23, 0x15e6e: 0xe0001162, 0x15e6f: 0xe000115f, + 0x15e70: 0xe0000c8d, 0x15e71: 0xf0000a0a, 0x15e72: 0xf000040a, 0x15e73: 0xf0000404, + 0x15e74: 0xe0000bac, 0x15e75: 0xe0000ba9, 0x15e76: 0x002d7888, 0x15e77: 0x00319488, + 0x15e78: 0xe0000d57, 0x15e79: 0xe0000d54, 0x15e7a: 0xe0000954, 0x15e7b: 0xe0000950, + 0x15e7c: 0xe00009ea, 0x15e7d: 0xe00009e5, 0x15e7e: 0xe0000e19, 0x15e7f: 0xe0000e15, + // Block 0x57a, offset 0x15e80 + 0x15e80: 0xe000098f, 0x15e81: 0xe000098c, 0x15e82: 0xe0000995, 0x15e83: 0xe0000992, + 0x15e84: 0xe0000b62, 0x15e85: 0xe0000b5f, 0x15e86: 0xe0000b68, 0x15e87: 0xe0000b65, + 0x15e88: 0xe0000c6c, 0x15e89: 0xe0000c69, 0x15e8a: 0xe0000c72, 0x15e8b: 0xe0000c6f, + 0x15e8c: 0xe0000e4a, 0x15e8d: 0xe0000e47, 0x15e8e: 0xe0000e50, 0x15e8f: 0xe0000e4d, + 0x15e90: 0xe0000ee8, 0x15e91: 0xe0000ee5, 0x15e92: 0xe0000eee, 0x15e93: 0xe0000eeb, + 0x15e94: 0xe0001053, 0x15e95: 0xe0001050, 0x15e96: 0xe0001059, 0x15e97: 0xe0001056, + 0x15e98: 0xe0000f61, 0x15e99: 0xe0000f5e, 0x15e9a: 0xe0000fa5, 0x15e9b: 0xe0000fa2, + 0x15e9c: 0x00312288, 0x15e9d: 0x40312220, 0x15e9e: 0xe0000bf4, 0x15e9f: 0xe0000bf1, + 0x15ea0: 0x002ebc88, 0x15ea1: 0x402c8c20, 0x15ea2: 0x002f2288, 0x15ea3: 0x402f2220, + 0x15ea4: 0x00314088, 0x15ea5: 0x40314020, 0x15ea6: 0xe000096f, 0x15ea7: 0xe000096c, + 0x15ea8: 0xe0000b32, 0x15ea9: 0xe0000b2f, 0x15eaa: 0xe0000dd9, 0x15eab: 0xe0000dd5, + 0x15eac: 0xe0000dfd, 0x15ead: 0xe0000df9, 0x15eae: 0xe0000e04, 0x15eaf: 0xe0000e01, + 0x15eb0: 0xe0000e0b, 0x15eb1: 0xe0000e07, 0x15eb2: 0xe000a9c1, 0x15eb3: 0xe000a9be, + 0x15eb4: 0x402e5e20, 0x15eb5: 0x402ed020, 0x15eb6: 0x40305a20, 0x15eb7: 0x402dd420, + 0x15eb8: 0xe0000abf, 0x15eb9: 0xe0000ec4, 0x15eba: 0x002be888, 0x15ebb: 0x002c4488, + 0x15ebc: 0x402c4420, 0x15ebd: 0x002e3888, 0x15ebe: 0x00303e88, 0x15ebf: 0x402ffc20, + // Block 0x57b, offset 0x15ec0 + 0x15ec0: 0xae603502, 0x15ec1: 0xae603202, 0x15ec2: 0xae603c02, 0x15ec3: 0xae604e02, + 0x15ec4: 0xae605b02, 0x15ec5: 0xae606302, 0x15ec6: 0xae603702, 0x15ec7: 0xcafd3e71, + 0x15ec8: 0xae604702, 0x15ec9: 0xae606402, 0x15eca: 0xae604302, 0x15ecb: 0xae604d02, + 0x15ecc: 0xae604102, 0x15ecd: 0xae605f02, 0x15ece: 0xae605f02, 0x15ecf: 0xae606502, + 0x15ed0: 0xae606602, 0x15ed1: 0xae606702, 0x15ed2: 0xae605f02, 0x15ed3: 0xae602202, + 0x15ed4: 0xae602a02, 0x15ed5: 0xae805f02, 0x15ed6: 0xadc06002, 0x15ed7: 0xadc06002, + 0x15ed8: 0xadc06002, 0x15ed9: 0xadc06002, 0x15eda: 0xae805f02, 0x15edb: 0xad806802, + 0x15edc: 0xadc06002, 0x15edd: 0xadc06002, 0x15ede: 0xadc06002, 0x15edf: 0xadc06002, + 0x15ee0: 0xadc06002, 0x15ee1: 0xaca06e02, 0x15ee2: 0xaca06f02, 0x15ee3: 0xadc07002, + 0x15ee4: 0xadc07502, 0x15ee5: 0xadc07602, 0x15ee6: 0xadc07702, 0x15ee7: 0xaca05602, + 0x15ee8: 0xaca05902, 0x15ee9: 0xadc06002, 0x15eea: 0xadc06002, 0x15eeb: 0xadc06002, + 0x15eec: 0xadc06002, 0x15eed: 0xadc07802, 0x15eee: 0xadc07902, 0x15eef: 0xadc06002, + 0x15ef0: 0xadc07a02, 0x15ef1: 0xadc07b02, 0x15ef2: 0xadc02102, 0x15ef3: 0xadc06002, + 0x15ef4: 0xa0107c02, 0x15ef5: 0xa0107d02, 0x15ef6: 0xa0106102, 0x15ef7: 0xa0106102, + 0x15ef8: 0xa0105402, 0x15ef9: 0xadc07e02, 0x15efa: 0xadc06002, 0x15efb: 0xadc06002, + 0x15efc: 0xadc06002, 0x15efd: 0xae605f02, 0x15efe: 0xae605f02, 0x15eff: 0xae605f02, + // Block 0x57c, offset 0x15f00 + 0x15f00: 0xe0000d24, 0x15f01: 0xe0000d21, 0x15f02: 0xe0000d2a, 0x15f03: 0xe0000d27, + 0x15f04: 0xe0000d69, 0x15f05: 0xe0000d66, 0x15f06: 0xe0000d7b, 0x15f07: 0xe0000d78, + 0x15f08: 0xe0000d87, 0x15f09: 0xe0000d84, 0x15f0a: 0xe0000d81, 0x15f0b: 0xe0000d7e, + 0x15f0c: 0xe0000ded, 0x15f0d: 0xe0000de9, 0x15f0e: 0xe0000df5, 0x15f0f: 0xe0000df1, + 0x15f10: 0xe0000e3d, 0x15f11: 0xe0000e39, 0x15f12: 0xe0000e35, 0x15f13: 0xe0000e31, + 0x15f14: 0xe0000ea7, 0x15f15: 0xe0000ea4, 0x15f16: 0xe0000ead, 0x15f17: 0xe0000eaa, + 0x15f18: 0xe0000ed6, 0x15f19: 0xe0000ed3, 0x15f1a: 0xe0000ef4, 0x15f1b: 0xe0000ef1, + 0x15f1c: 0xe0000efb, 0x15f1d: 0xe0000ef7, 0x15f1e: 0xe0000f02, 0x15f1f: 0xe0000eff, + 0x15f20: 0xe0000f41, 0x15f21: 0xe0000f3e, 0x15f22: 0xe0000f53, 0x15f23: 0xe0000f50, + 0x15f24: 0xe0000f26, 0x15f25: 0xe0000f22, 0x15f26: 0xe000296a, 0x15f27: 0xe0002967, + 0x15f28: 0xe0000f5a, 0x15f29: 0xe0000f56, 0x15f2a: 0xe0000f93, 0x15f2b: 0xe0000f90, + 0x15f2c: 0xe0000f9f, 0x15f2d: 0xe0000f9c, 0x15f2e: 0xe0000fb1, 0x15f2f: 0xe0000fae, + 0x15f30: 0xe0000fab, 0x15f31: 0xe0000fa8, 0x15f32: 0xe0001093, 0x15f33: 0xe0001090, + 0x15f34: 0xe000109f, 0x15f35: 0xe000109c, 0x15f36: 0xe0001099, 0x15f37: 0xe0001096, + 0x15f38: 0xe0001032, 0x15f39: 0xe000102e, 0x15f3a: 0xe000a9d3, 0x15f3b: 0xe000a9d0, + 0x15f3c: 0xe00010a9, 0x15f3d: 0xe00010a6, 0x15f3e: 0xe00010af, 0x15f3f: 0xe00010ac, + // Block 0x57d, offset 0x15f40 + 0x15f40: 0xe00010d2, 0x15f41: 0xe00010cf, 0x15f42: 0xe00010cc, 0x15f43: 0xe00010c9, + 0x15f44: 0xe00010e1, 0x15f45: 0xe00010de, 0x15f46: 0xe00010e7, 0x15f47: 0xe00010e4, + 0x15f48: 0xe00010ed, 0x15f49: 0xe00010ea, 0x15f4a: 0xe00010fc, 0x15f4b: 0xe00010f9, + 0x15f4c: 0xe00010f6, 0x15f4d: 0xe00010f3, 0x15f4e: 0xe000a9bb, 0x15f4f: 0xe000a9b8, + 0x15f50: 0xe0001141, 0x15f51: 0xe000113e, 0x15f52: 0xe0001153, 0x15f53: 0xe0001150, + 0x15f54: 0xe0001159, 0x15f55: 0xe0001156, 0x15f56: 0xe0000c15, 0x15f57: 0xe0000f8d, + 0x15f58: 0xe00010db, 0x15f59: 0xe000a9a9, 0x15f5a: 0xf0000404, 0x15f5b: 0xe0000f70, + 0x15f5c: 0x40300420, 0x15f5d: 0x40300620, 0x15f5e: 0xe0000f7f, 0x15f5f: 0x402c9620, + 0x15f60: 0xe000099b, 0x15f61: 0xe0000998, 0x15f62: 0xe0000989, 0x15f63: 0xe0000986, + 0x15f64: 0xe0000928, 0x15f65: 0xe0000924, 0x15f66: 0xe0000930, 0x15f67: 0xe000092c, + 0x15f68: 0xe0000940, 0x15f69: 0xe000093c, 0x15f6a: 0xe0000938, 0x15f6b: 0xe0000934, + 0x15f6c: 0xe00009aa, 0x15f6d: 0xe00009a6, 0x15f6e: 0xe0000902, 0x15f6f: 0xe00008fe, + 0x15f70: 0xe000090a, 0x15f71: 0xe0000906, 0x15f72: 0xe000091a, 0x15f73: 0xe0000916, + 0x15f74: 0xe0000912, 0x15f75: 0xe000090e, 0x15f76: 0xe00009a2, 0x15f77: 0xe000099e, + 0x15f78: 0xe0000b6e, 0x15f79: 0xe0000b6b, 0x15f7a: 0xe0000b5c, 0x15f7b: 0xe0000b59, + 0x15f7c: 0xe0000b26, 0x15f7d: 0xe0000b23, 0x15f7e: 0xe0000afb, 0x15f7f: 0xe0000af7, + // Block 0x57e, offset 0x15f80 + 0x15f80: 0xe0000b03, 0x15f81: 0xe0000aff, 0x15f82: 0xe0000b13, 0x15f83: 0xe0000b0f, + 0x15f84: 0xe0000b0b, 0x15f85: 0xe0000b07, 0x15f86: 0xe0000b75, 0x15f87: 0xe0000b71, + 0x15f88: 0xe0000c66, 0x15f89: 0xe0000c63, 0x15f8a: 0xe0000c78, 0x15f8b: 0xe0000c75, + 0x15f8c: 0xe0000e84, 0x15f8d: 0xe0000e81, 0x15f8e: 0xe0000e44, 0x15f8f: 0xe0000e41, + 0x15f90: 0xe0000dad, 0x15f91: 0xe0000da9, 0x15f92: 0xe0000db5, 0x15f93: 0xe0000db1, + 0x15f94: 0xe0000dc5, 0x15f95: 0xe0000dc1, 0x15f96: 0xe0000dbd, 0x15f97: 0xe0000db9, + 0x15f98: 0xe0000e8b, 0x15f99: 0xe0000e87, 0x15f9a: 0xe0000e5d, 0x15f9b: 0xe0000e59, + 0x15f9c: 0xe0000e65, 0x15f9d: 0xe0000e61, 0x15f9e: 0xe0000e75, 0x15f9f: 0xe0000e71, + 0x15fa0: 0xe0000e6d, 0x15fa1: 0xe0000e69, 0x15fa2: 0xe0000e7d, 0x15fa3: 0xe0000e79, + 0x15fa4: 0xe000108d, 0x15fa5: 0xe000108a, 0x15fa6: 0xe000104d, 0x15fa7: 0xe000104a, + 0x15fa8: 0xe0001066, 0x15fa9: 0xe0001062, 0x15faa: 0xe000106e, 0x15fab: 0xe000106a, + 0x15fac: 0xe000107e, 0x15fad: 0xe000107a, 0x15fae: 0xe0001076, 0x15faf: 0xe0001072, + 0x15fb0: 0xe0001086, 0x15fb1: 0xe0001082, 0x15fb2: 0xe000a9a0, 0x15fb3: 0xe000a99d, + 0x15fb4: 0xe000a9cd, 0x15fb5: 0xe000a9ca, 0x15fb6: 0xe000a9c7, 0x15fb7: 0xe000a9c4, + 0x15fb8: 0xe000a9b5, 0x15fb9: 0xe000a9b2, 0x15fba: 0xe0000d0a, 0x15fbb: 0xe0000d07, + 0x15fbc: 0x0030d888, 0x15fbd: 0x4030d820, 0x15fbe: 0x00312088, 0x15fbf: 0x40312020, + // Block 0x57f, offset 0x15fc0 + 0x15fc0: 0xe0000024, 0x15fc1: 0xe0000029, 0x15fc2: 0xe000002e, 0x15fc3: 0xe0000033, + 0x15fc4: 0xe0000038, 0x15fc5: 0xe000003d, 0x15fc6: 0xe0000042, 0x15fc7: 0xe0000047, + 0x15fc8: 0xf0001f04, 0x15fc9: 0xf0001f04, 0x15fca: 0xf0001f04, 0x15fcb: 0xf0001f04, + 0x15fcc: 0xf0001f04, 0x15fcd: 0xf0001f04, 0x15fce: 0xf0001f04, 0x15fcf: 0xf0001f04, + 0x15fd0: 0xf0001f04, 0x15fd1: 0xf0000404, 0x15fd2: 0xf0000404, 0x15fd3: 0xf0000404, + 0x15fd4: 0xf0000404, 0x15fd5: 0xf0000404, 0x15fd6: 0xf0000404, 0x15fd7: 0xf0000404, + 0x15fd8: 0xf0000404, 0x15fd9: 0xf0000404, 0x15fda: 0xf0000404, 0x15fdb: 0xf0000404, + 0x15fdc: 0xf0000404, 0x15fdd: 0xf0000404, 0x15fde: 0xf0000404, 0x15fdf: 0xf0000404, + 0x15fe0: 0xf0000404, 0x15fe1: 0xf0000404, 0x15fe2: 0xf0000404, 0x15fe3: 0xf0000404, + 0x15fe4: 0xf0000404, 0x15fe5: 0xf0000404, 0x15fe6: 0xf0000404, 0x15fe7: 0xf0000404, + 0x15fe8: 0xf0000404, 0x15fe9: 0xf0000404, 0x15fea: 0xf0000404, 0x15feb: 0xf0000404, + 0x15fec: 0xf0000404, 0x15fed: 0xf0000404, 0x15fee: 0xf0000404, 0x15fef: 0xf0000404, + 0x15ff0: 0xf0000404, 0x15ff1: 0xf0000404, 0x15ff2: 0xf0000404, 0x15ff3: 0xf0000404, + 0x15ff4: 0xe0002c4e, 0x15ff5: 0xf0000404, 0x15ff6: 0x002bde8c, 0x15ff7: 0x002c0a8c, + 0x15ff8: 0x002c3a8c, 0x15ff9: 0x002c628c, 0x15ffa: 0x002c988c, 0x15ffb: 0x002d088c, + 0x15ffc: 0x002d228c, 0x15ffd: 0x002d688c, 0x15ffe: 0x002d9a8c, 0x15fff: 0x002dcc8c, + // Block 0x580, offset 0x16000 + 0x16000: 0xf0001d1c, 0x16001: 0xf0001d1d, 0x16002: 0xe00009b7, 0x16003: 0xf0001c1d, + 0x16004: 0xf0001c1c, 0x16005: 0xf0001c1c, 0x16006: 0xe0000a66, 0x16007: 0xe0000a7a, + 0x16008: 0xf0001d1c, 0x16009: 0xe0003576, 0x1600a: 0xf0001c1c, 0x1600b: 0xf0001d1d, + 0x1600c: 0xf0001c1c, 0x1600d: 0xf0001d1d, 0x1600e: 0xf0001d1d, 0x1600f: 0xf0001c1c, + 0x16010: 0xf0001c1c, 0x16011: 0xf0001c1c, 0x16012: 0xe0000d0d, 0x16013: 0xf0001c1c, + 0x16014: 0xf0001c1c, 0x16015: 0xe0000d3a, 0x16016: 0xe0000d46, 0x16017: 0xf0001d1d, + 0x16018: 0xe0000eb0, 0x16019: 0xe0000eb8, 0x1601a: 0xf0001d1d, 0x1601b: 0xf0001c1c, + 0x1601c: 0xf0001c1d, 0x1601d: 0xf0001c1d, 0x1601e: 0xe00010b2, 0x1601f: 0xe00009c8, + 0x16020: 0xf0001f04, 0x16021: 0xf0001f04, 0x16022: 0xf0001f04, 0x16023: 0xf0001f04, + 0x16024: 0xf0001f04, 0x16025: 0xf0001f04, 0x16026: 0xf0001f04, 0x16027: 0xf0001f04, + 0x16028: 0xf0001f04, 0x16029: 0xf0000404, 0x1602a: 0xf0000404, 0x1602b: 0xf0000404, + 0x1602c: 0xf0000404, 0x1602d: 0xf0000404, 0x1602e: 0xf0000404, 0x1602f: 0xf0000404, + 0x16030: 0xf0000404, 0x16031: 0xf0000404, 0x16032: 0xf0000404, 0x16033: 0xf0000404, + 0x16034: 0xf0000404, 0x16035: 0xf0000404, 0x16036: 0xf0000404, 0x16037: 0xf0000404, + 0x16038: 0xf0000404, 0x16039: 0xf0000404, 0x1603a: 0xf0000404, 0x1603b: 0xf0000404, + 0x1603c: 0xf0000404, 0x1603d: 0xf0000404, 0x1603e: 0xf0000404, 0x1603f: 0xe0000bdf, + // Block 0x581, offset 0x16040 + 0x16040: 0xf0001f04, 0x16041: 0xf0001f04, 0x16042: 0xf0001f04, 0x16043: 0xf0001f04, + 0x16044: 0xf0001f04, 0x16045: 0xf0001f04, 0x16046: 0xf0001f04, 0x16047: 0xf0001f04, + 0x16048: 0xf0001f04, 0x16049: 0xf0001f04, 0x1604a: 0xf0001f04, + 0x16050: 0xf0000a04, 0x16051: 0xf0000a04, 0x16052: 0xf0000a04, 0x16053: 0xf0000a04, + 0x16054: 0xf0000a04, 0x16055: 0xf0000a04, 0x16056: 0xf0000a04, 0x16057: 0xf0000a04, + 0x16058: 0xf0000a04, 0x16059: 0xf0000a04, 0x1605a: 0xf0000a04, 0x1605b: 0xf0000a04, + 0x1605c: 0xf0000a04, 0x1605d: 0xf0000a04, 0x1605e: 0xf0000a04, 0x1605f: 0xf0000a04, + 0x16060: 0xf0000a04, 0x16061: 0xf0000a04, 0x16062: 0xf0000a04, 0x16063: 0xf0000a04, + 0x16064: 0xf0000a04, 0x16065: 0xf0000a04, 0x16066: 0xf0000a04, 0x16067: 0xf0000a04, + 0x16068: 0xe0002c52, 0x16069: 0xf0000a04, 0x1606a: 0xf0000a04, 0x1606b: 0x002c3a8c, + 0x1606c: 0x002f7a8c, 0x1606d: 0xf0000c0c, 0x1606e: 0xf0000c0c, + 0x16070: 0x002bde9d, 0x16071: 0x002c0a9d, 0x16072: 0x002c3a9d, 0x16073: 0x002c629d, + 0x16074: 0x002c989d, 0x16075: 0x002d089d, 0x16076: 0x002d229d, 0x16077: 0x002d689d, + 0x16078: 0x002d9a9d, 0x16079: 0x002dcc9d, 0x1607a: 0x002dfe9d, 0x1607b: 0x002e229d, + 0x1607c: 0x002e829d, 0x1607d: 0x002e9e9d, 0x1607e: 0x002ee29d, 0x1607f: 0x002f2c9d, + // Block 0x582, offset 0x16080 + 0x16080: 0xa0000000, 0x16081: 0xa0000000, 0x16082: 0xa0000000, 0x16083: 0xa0000000, + 0x16084: 0xa0000000, 0x16085: 0xa0000000, 0x16086: 0xa0000000, 0x16087: 0xa0000000, + 0x16088: 0xa0000000, 0x16089: 0x40020020, 0x1608a: 0x40020220, 0x1608b: 0x40020420, + 0x1608c: 0x40020620, 0x1608d: 0x40020820, 0x1608e: 0xa0000000, 0x1608f: 0xa0000000, + 0x16090: 0xa0000000, 0x16091: 0xa0000000, 0x16092: 0xa0000000, 0x16093: 0xa0000000, + 0x16094: 0xa0000000, 0x16095: 0xa0000000, 0x16096: 0xa0000000, 0x16097: 0xa0000000, + 0x16098: 0xa0000000, 0x16099: 0xa0000000, 0x1609a: 0xa0000000, 0x1609b: 0xa0000000, + 0x1609c: 0xa0000000, 0x1609d: 0xa0000000, 0x1609e: 0xa0000000, 0x1609f: 0xa0000000, + 0x160a0: 0x40021220, 0x160a1: 0x4002ba20, 0x160a2: 0x4003e020, 0x160a3: 0x4004ea20, + 0x160a4: 0x4027de20, 0x160a5: 0x4004ec20, 0x160a6: 0x4004e620, 0x160a7: 0x4003d220, + 0x160a8: 0x4003f420, 0x160a9: 0x4003f620, 0x160aa: 0x4004d820, 0x160ab: 0x40093820, + 0x160ac: 0x40024020, 0x160ad: 0x40021a20, 0x160ae: 0x4002e420, 0x160af: 0x4004e220, + 0x160b0: 0x4029cc20, 0x160b1: 0x4029ce20, 0x160b2: 0x4029d020, 0x160b3: 0x4029d220, + 0x160b4: 0x4029d420, 0x160b5: 0x4029d620, 0x160b6: 0x4029d820, 0x160b7: 0x4029da20, + 0x160b8: 0x4029dc20, 0x160b9: 0x4029de20, 0x160ba: 0x40026c20, 0x160bb: 0x40026220, + 0x160bc: 0x40094020, 0x160bd: 0x40094220, 0x160be: 0x40094420, 0x160bf: 0x4002c420, + // Block 0x583, offset 0x160c0 + 0x160c0: 0x4004d620, 0x160c1: 0x002bde88, 0x160c2: 0x002c0a88, 0x160c3: 0xcb170991, + 0x160c4: 0x002c6288, 0x160c5: 0x002c9888, 0x160c6: 0x002d0888, 0x160c7: 0xcb1b0911, + 0x160c8: 0x002d6888, 0x160c9: 0x002d9a88, 0x160ca: 0x002dcc88, 0x160cb: 0xcb1f0911, + 0x160cc: 0xcb253f03, 0x160cd: 0x002e8288, 0x160ce: 0xcb2b0911, 0x160cf: 0x002ee288, + 0x160d0: 0x002f2c88, 0x160d1: 0x002f5688, 0x160d2: 0xcb2f0911, 0x160d3: 0xcb330991, + 0x160d4: 0x00302c88, 0x160d5: 0x00306c88, 0x160d6: 0x0030be88, 0x160d7: 0x0030e288, + 0x160d8: 0x0030f688, 0x160d9: 0x00310088, 0x160da: 0xcb370991, 0x160db: 0x4003f820, + 0x160dc: 0x4004e420, 0x160dd: 0x4003fa20, 0x160de: 0x40062420, 0x160df: 0x40021620, + 0x160e0: 0x40061e20, 0x160e1: 0x402bde20, 0x160e2: 0x402c0a20, 0x160e3: 0xcb150991, + 0x160e4: 0x402c6220, 0x160e5: 0x402c9820, 0x160e6: 0x402d0820, 0x160e7: 0xcb190911, + 0x160e8: 0x402d6820, 0x160e9: 0x402d9a20, 0x160ea: 0x402dcc20, 0x160eb: 0xcb1d0911, + 0x160ec: 0xcb213f03, 0x160ed: 0x402e8220, 0x160ee: 0xcb290911, 0x160ef: 0x402ee220, + 0x160f0: 0x402f2c20, 0x160f1: 0x402f5620, 0x160f2: 0xcb2d0911, 0x160f3: 0xcb310991, + 0x160f4: 0x40302c20, 0x160f5: 0x40306c20, 0x160f6: 0x4030be20, 0x160f7: 0x4030e220, + 0x160f8: 0x4030f620, 0x160f9: 0x40310020, 0x160fa: 0xcb350991, 0x160fb: 0x4003fc20, + 0x160fc: 0x40094820, 0x160fd: 0x4003fe20, 0x160fe: 0x40094c20, 0x160ff: 0xa0000000, + // Block 0x584, offset 0x16100 + 0x16100: 0xe0000983, 0x16101: 0xe0000980, 0x16102: 0xe00008fb, 0x16103: 0xe00008f8, + 0x16104: 0xe000097d, 0x16105: 0xe000097a, 0x16106: 0xe0000a38, 0x16107: 0xe0000a35, + 0x16108: 0xe0000a3e, 0x16109: 0xe0000a3b, 0x1610a: 0xe0000a4a, 0x1610b: 0xe0000a47, + 0x1610c: 0x002c6083, 0x1610d: 0x402c6020, 0x1610e: 0xe0000a86, 0x1610f: 0xe0000a83, + 0x16110: 0xe0000aaa, 0x16111: 0xe0000aa7, 0x16112: 0xe0000b46, 0x16113: 0xe0000b43, + 0x16114: 0xe0000aee, 0x16115: 0xe0000aeb, 0x16116: 0xe0000b2c, 0x16117: 0xe0000b29, + 0x16118: 0xe0000b40, 0x16119: 0xe0000b3d, 0x1611a: 0xe0000b1a, 0x1611b: 0xe0000b17, + 0x1611c: 0xe0000bb8, 0x1611d: 0xe0000bb5, 0x1611e: 0xe0000bb2, 0x1611f: 0xe0000baf, + 0x16120: 0xe0000bc4, 0x16121: 0xe0000bc1, 0x16122: 0x002d6683, 0x16123: 0x402d6620, + 0x16124: 0xe0000bee, 0x16125: 0xe0000beb, 0x16126: 0xe0000c1b, 0x16127: 0xe0000c18, + 0x16128: 0xe0000c51, 0x16129: 0xe0000c4e, 0x1612a: 0xe0000c60, 0x1612b: 0xe0000c5d, + 0x1612c: 0xe0000c31, 0x1612d: 0xe0000c2e, 0x1612e: 0xe0000c5a, 0x1612f: 0xe0000c57, + 0x16130: 0xe0000c54, 0x16131: 0x402da220, 0x16132: 0xf0000a0a, 0x16133: 0xf0000404, + 0x16134: 0xe0000c8a, 0x16135: 0xe0000c87, 0x16136: 0x002e2083, 0x16137: 0x402e2020, + 0x16138: 0x402f7220, 0x16139: 0xe0000ccc, 0x1613a: 0xe0000cc9, 0x1613b: 0x002e8083, + 0x1613c: 0x402e8020, 0x1613d: 0xe0000cd2, 0x1613e: 0xe0000ccf, 0x1613f: 0xe0000d04, + // Block 0x585, offset 0x16140 + 0x16140: 0xe0000cfe, 0x16141: 0xe0000cf8, 0x16142: 0xe0000cf5, 0x16143: 0xe0000d51, + 0x16144: 0xe0000d4e, 0x16145: 0x002ee083, 0x16146: 0x402ee020, 0x16147: 0xe0000d5d, + 0x16148: 0xe0000d5a, 0x16149: 0xf0000404, 0x1614a: 0x002eda88, 0x1614b: 0x402eda20, + 0x1614c: 0xe0000e2e, 0x1614d: 0xe0000e2b, 0x1614e: 0xe0000da0, 0x1614f: 0xe0000d9d, + 0x16150: 0xe0000de0, 0x16151: 0xe0000ddd, 0x16152: 0xe0000e93, 0x16153: 0xe0000e8f, + 0x16154: 0xe0000eca, 0x16155: 0xe0000ec7, 0x16156: 0x002fe483, 0x16157: 0x402fe420, + 0x16158: 0xe0000ed0, 0x16159: 0xe0000ecd, 0x1615a: 0xe0000f1f, 0x1615b: 0xe0000f1c, + 0x1615c: 0xe0000f2d, 0x1615d: 0xe0000f2a, 0x1615e: 0xe0000f47, 0x1615f: 0xe0000f44, + 0x16160: 0x00302a83, 0x16161: 0x40302a20, 0x16162: 0xe0000f99, 0x16163: 0xe0000f96, + 0x16164: 0xe0000f8a, 0x16165: 0xe0000f87, 0x16166: 0x00303688, 0x16167: 0x40303620, + 0x16168: 0xe000102b, 0x16169: 0xe0001028, 0x1616a: 0xe000103f, 0x1616b: 0xe000103c, + 0x1616c: 0xe0000fe7, 0x1616d: 0xe0000fe4, 0x1616e: 0xe0000ff9, 0x1616f: 0xe0000ff6, + 0x16170: 0xe0001025, 0x16171: 0xe0001022, 0x16172: 0xe0001039, 0x16173: 0xe0001036, + 0x16174: 0xe00010d8, 0x16175: 0xe00010d5, 0x16176: 0xe000110e, 0x16177: 0xe000110b, + 0x16178: 0xe0001117, 0x16179: 0xe000113b, 0x1617a: 0xe0001138, 0x1617b: 0xe000114d, + 0x1617c: 0xe000114a, 0x1617d: 0x00316283, 0x1617e: 0x40316220, 0x1617f: 0xe0000f64, + // Block 0x586, offset 0x16180 + 0x16180: 0xe0000d24, 0x16181: 0xe0000d21, 0x16182: 0xe0000d2a, 0x16183: 0xe0000d27, + 0x16184: 0xe0000d69, 0x16185: 0xe0000d66, 0x16186: 0xe0000d7b, 0x16187: 0xe0000d78, + 0x16188: 0xe0000d87, 0x16189: 0xe0000d84, 0x1618a: 0xe0000d81, 0x1618b: 0xe0000d7e, + 0x1618c: 0xe0000ded, 0x1618d: 0xe0000de9, 0x1618e: 0xe0000df5, 0x1618f: 0xe0000df1, + 0x16190: 0xe0000e3d, 0x16191: 0xe0000e39, 0x16192: 0xe0000e35, 0x16193: 0xe0000e31, + 0x16194: 0xe0000ea7, 0x16195: 0xe0000ea4, 0x16196: 0xe0000ead, 0x16197: 0xe0000eaa, + 0x16198: 0xe0000ed6, 0x16199: 0xe0000ed3, 0x1619a: 0xe0000ef4, 0x1619b: 0xe0000ef1, + 0x1619c: 0xe0000efb, 0x1619d: 0xe0000ef7, 0x1619e: 0xe0000f02, 0x1619f: 0xe0000eff, + 0x161a0: 0xe0000f41, 0x161a1: 0xe0000f3e, 0x161a2: 0xe0000f53, 0x161a3: 0xe0000f50, + 0x161a4: 0xe0000f26, 0x161a5: 0xe0000f22, 0x161a6: 0xe000a9d9, 0x161a7: 0xe000a9d6, + 0x161a8: 0xe0000f5a, 0x161a9: 0xe0000f56, 0x161aa: 0xe0000f93, 0x161ab: 0xe0000f90, + 0x161ac: 0xe0000f9f, 0x161ad: 0xe0000f9c, 0x161ae: 0xe0000fb1, 0x161af: 0xe0000fae, + 0x161b0: 0xe0000fab, 0x161b1: 0xe0000fa8, 0x161b2: 0xe0001093, 0x161b3: 0xe0001090, + 0x161b4: 0xe000109f, 0x161b5: 0xe000109c, 0x161b6: 0xe0001099, 0x161b7: 0xe0001096, + 0x161b8: 0xe0001032, 0x161b9: 0xe000102e, 0x161ba: 0xe0001046, 0x161bb: 0xe0001042, + 0x161bc: 0xe00010a9, 0x161bd: 0xe00010a6, 0x161be: 0xe00010af, 0x161bf: 0xe00010ac, + // Block 0x587, offset 0x161c0 + 0x161c2: 0xe000a9f1, 0x161c3: 0xa000f402, + 0x161c5: 0x40440220, 0x161c6: 0x40440420, 0x161c7: 0x40440620, + 0x161c8: 0x40440820, 0x161c9: 0x40440a20, 0x161ca: 0x40440c20, 0x161cb: 0x40440e20, + 0x161cc: 0x40441220, 0x161ce: 0x40441620, 0x161cf: 0x40441820, + 0x161d0: 0x40441a20, 0x161d2: 0x40441c20, 0x161d3: 0x40441e20, + 0x161d4: 0x40442020, 0x161d5: 0xcb393f61, 0x161d6: 0x40442420, 0x161d7: 0x40442620, + 0x161d8: 0x40442820, 0x161d9: 0x40442a20, 0x161da: 0x40442c20, 0x161db: 0x40442e20, + 0x161dc: 0x40443020, 0x161dd: 0x40443220, 0x161de: 0x40443420, 0x161df: 0x40443620, + 0x161e0: 0x40443820, 0x161e1: 0x40443a20, 0x161e2: 0x40443c20, 0x161e3: 0xcb3b3fc1, + 0x161e4: 0x40444020, 0x161e5: 0x40444220, 0x161e6: 0x40444420, 0x161e7: 0x40444620, + 0x161e8: 0xcb3f3f61, 0x161e9: 0x40444a20, 0x161ea: 0x40444c20, 0x161eb: 0x40444e20, + 0x161ec: 0x40445020, 0x161ed: 0x40445220, 0x161ee: 0x40445420, 0x161ef: 0x40445620, + 0x161f0: 0xcb413f61, 0x161f1: 0x40446a20, 0x161f2: 0xcb433f61, 0x161f3: 0xcb453f61, + 0x161f4: 0x40446820, 0x161f5: 0x40445c20, 0x161f6: 0x40445e20, 0x161f7: 0x40446020, + 0x161f8: 0x40446220, 0x161f9: 0x40446420, 0x161fa: 0x40446c20, + 0x161fd: 0xa000f502, 0x161fe: 0x40447020, 0x161ff: 0x40447220, + // Block 0x588, offset 0x16200 + 0x16200: 0x40447420, 0x16201: 0x40447620, 0x16202: 0x40447820, 0x16203: 0x40447a20, + 0x16204: 0x40447c20, 0x16206: 0xcb4703b1, 0x16207: 0xc0760401, + 0x16208: 0x40448620, 0x1620a: 0x40448820, 0x1620b: 0x40448a20, + 0x1620c: 0x00448c83, 0x1620d: 0x82092248, 0x1620e: 0xe000186c, + 0x16217: 0x40448c20, + 0x16220: 0x40441020, 0x16221: 0x40441420, 0x16222: 0x40447e20, 0x16223: 0x40448020, + 0x16226: 0xe0000185, 0x16227: 0xe0000216, + 0x16228: 0xe0000331, 0x16229: 0xe000040b, 0x1622a: 0xe00004e0, 0x1622b: 0xe00005aa, + 0x1622c: 0xe0000675, 0x1622d: 0xe000071d, 0x1622e: 0xe00007c9, 0x1622f: 0xe000086e, + 0x16230: 0x40285a20, 0x16231: 0x40285c20, 0x16232: 0x40285e20, 0x16233: 0x40286020, + 0x16234: 0x40286220, 0x16235: 0x40286420, + 0x16239: 0x40074e20, 0x1623a: 0xe000a9e5, 0x1623b: 0xcb3d4031, + 0x1623c: 0xe000a9f7, 0x1623d: 0xe000a9fd, 0x1623e: 0xe000aa03, 0x1623f: 0xe000a9df, + // Block 0x589, offset 0x16240 + 0x16240: 0xa000f202, 0x16241: 0x403fba21, 0x16242: 0x403fba20, 0x16243: 0x403fbc20, + 0x16244: 0x403fbc20, 0x16245: 0x403fbe20, 0x16246: 0x403fc020, 0x16247: 0x403fcc20, + 0x16248: 0x403fce20, 0x16249: 0x403fd020, 0x1624a: 0x403fd220, 0x1624b: 0x403fd420, + 0x1624c: 0x403fd820, 0x1624d: 0x403fdc20, 0x1624e: 0x403fde20, 0x1624f: 0x403fe020, + 0x16250: 0x403fe220, 0x16251: 0x403fe420, 0x16252: 0x403fe620, 0x16253: 0x403fe820, + 0x16254: 0x403fea20, 0x16255: 0xcaac3be1, 0x16256: 0x403fee20, 0x16257: 0x403ff020, + 0x16258: 0x403ff420, 0x16259: 0x403ff620, 0x1625a: 0x403ff820, 0x1625b: 0x403ffa20, + 0x1625c: 0xcb4a4061, 0x1625d: 0x40400220, 0x1625e: 0x40400420, 0x1625f: 0x40400620, + 0x16260: 0x40400820, 0x16261: 0x40400a20, 0x16262: 0x40400e20, 0x16263: 0x40401020, + 0x16264: 0x40401220, 0x16265: 0x40401420, 0x16266: 0x40401620, 0x16267: 0x40401820, + 0x16268: 0x40401a20, 0x16269: 0xe0001830, 0x1626a: 0x40401c20, 0x1626b: 0x40401e20, + 0x1626c: 0x40402020, 0x1626d: 0x40402420, 0x1626e: 0x40402620, 0x1626f: 0x40402820, + 0x16270: 0x40402c20, 0x16271: 0xe0001839, 0x16272: 0x40402e20, 0x16273: 0x40403c20, + 0x16274: 0xe000a994, 0x16275: 0x40403220, 0x16276: 0x40403420, 0x16277: 0x40403620, + 0x16278: 0x40403820, 0x16279: 0x40403a20, 0x1627a: 0x40404c20, 0x1627b: 0x40404e20, + 0x1627c: 0xa070f102, 0x1627d: 0x40403c20, 0x1627e: 0x40404a20, 0x1627f: 0x40405620, + // Block 0x58a, offset 0x16280 + 0x16280: 0xa0000000, 0x16281: 0xa0000000, 0x16282: 0xa0000000, 0x16283: 0xa0000000, + 0x16284: 0xa0000000, 0x16285: 0xa0000000, 0x16286: 0xa0000000, 0x16287: 0xa0000000, + 0x16288: 0xa0000000, 0x16289: 0x40020020, 0x1628a: 0x40020220, 0x1628b: 0x40020420, + 0x1628c: 0x40020620, 0x1628d: 0x40020820, 0x1628e: 0xa0000000, 0x1628f: 0xa0000000, + 0x16290: 0xa0000000, 0x16291: 0xa0000000, 0x16292: 0xa0000000, 0x16293: 0xa0000000, + 0x16294: 0xa0000000, 0x16295: 0xa0000000, 0x16296: 0xa0000000, 0x16297: 0xa0000000, + 0x16298: 0xa0000000, 0x16299: 0xa0000000, 0x1629a: 0xa0000000, 0x1629b: 0xa0000000, + 0x1629c: 0xa0000000, 0x1629d: 0xa0000000, 0x1629e: 0xa0000000, 0x1629f: 0xa0000000, + 0x162a0: 0x40021220, 0x162a1: 0x4002ba20, 0x162a2: 0x4003e020, 0x162a3: 0x4004ea20, + 0x162a4: 0x4027de20, 0x162a5: 0x4004ec20, 0x162a6: 0x4004e620, 0x162a7: 0x4003d220, + 0x162a8: 0x4003f420, 0x162a9: 0x4003f620, 0x162aa: 0x4004d820, 0x162ab: 0x40093820, + 0x162ac: 0x40024020, 0x162ad: 0x40021a20, 0x162ae: 0x4002e420, 0x162af: 0x4004e220, + 0x162b0: 0x4029cc20, 0x162b1: 0x4029ce20, 0x162b2: 0x4029d020, 0x162b3: 0x4029d220, + 0x162b4: 0x4029d420, 0x162b5: 0x4029d620, 0x162b6: 0x4029d820, 0x162b7: 0x4029da20, + 0x162b8: 0x4029dc20, 0x162b9: 0x4029de20, 0x162ba: 0x40026c20, 0x162bb: 0x40026220, + 0x162bc: 0x40094020, 0x162bd: 0x40094220, 0x162be: 0x40094420, 0x162bf: 0x4002c420, + // Block 0x58b, offset 0x162c0 + 0x162c0: 0x4004d620, 0x162c1: 0x002bde88, 0x162c2: 0x002c0a88, 0x162c3: 0xcb4c0931, + 0x162c4: 0x002c6288, 0x162c5: 0x002c9888, 0x162c6: 0x002d0888, 0x162c7: 0xcb5040c2, + 0x162c8: 0x002d6888, 0x162c9: 0x002d9a88, 0x162ca: 0x002dcc88, 0x162cb: 0x002dfe88, + 0x162cc: 0xc0030002, 0x162cd: 0x002e8288, 0x162ce: 0x002e9e88, 0x162cf: 0x002ee288, + 0x162d0: 0x002f2c88, 0x162d1: 0x002f5688, 0x162d2: 0x002f7a88, 0x162d3: 0x002fe688, + 0x162d4: 0x00302c88, 0x162d5: 0x00306c88, 0x162d6: 0x0030be88, 0x162d7: 0x0030e288, + 0x162d8: 0x0030f688, 0x162d9: 0x00310088, 0x162da: 0xcb580931, 0x162db: 0x4003f820, + 0x162dc: 0x4004e420, 0x162dd: 0x4003fa20, 0x162de: 0x40062420, 0x162df: 0x40021620, + 0x162e0: 0x40061e20, 0x162e1: 0x402bde20, 0x162e2: 0x402c0a20, 0x162e3: 0xcb4e0931, + 0x162e4: 0x402c6220, 0x162e5: 0x402c9820, 0x162e6: 0x402d0820, 0x162e7: 0xcb5440c2, + 0x162e8: 0x402d6820, 0x162e9: 0x402d9a20, 0x162ea: 0x402dcc20, 0x162eb: 0x402dfe20, + 0x162ec: 0xc0000002, 0x162ed: 0x402e8220, 0x162ee: 0x402e9e20, 0x162ef: 0x402ee220, + 0x162f0: 0x402f2c20, 0x162f1: 0x402f5620, 0x162f2: 0x402f7a20, 0x162f3: 0x402fe620, + 0x162f4: 0x40302c20, 0x162f5: 0x40306c20, 0x162f6: 0x4030be20, 0x162f7: 0x4030e220, + 0x162f8: 0x4030f620, 0x162f9: 0x40310020, 0x162fa: 0xcb5a0931, 0x162fb: 0x4003fc20, + 0x162fc: 0x40094820, 0x162fd: 0x4003fe20, 0x162fe: 0x40094c20, 0x162ff: 0xa0000000, + // Block 0x58c, offset 0x16300 + 0x16300: 0xe0000983, 0x16301: 0xe0000980, 0x16302: 0xe00008fb, 0x16303: 0xe00008f8, + 0x16304: 0xe000097d, 0x16305: 0xe000097a, 0x16306: 0xe0000a38, 0x16307: 0xe0000a35, + 0x16308: 0xe0000a3e, 0x16309: 0xe0000a3b, 0x1630a: 0x402c3820, 0x1630b: 0x002c3883, + 0x1630c: 0xe0000a44, 0x1630d: 0xe0000a41, 0x1630e: 0xe0000a86, 0x1630f: 0xe0000a83, + 0x16310: 0xe0000aaa, 0x16311: 0xe0000aa7, 0x16312: 0xe0000b46, 0x16313: 0xe0000b43, + 0x16314: 0xe0000aee, 0x16315: 0xe0000aeb, 0x16316: 0xe0000b2c, 0x16317: 0xe0000b29, + 0x16318: 0xe0000b40, 0x16319: 0xe0000b3d, 0x1631a: 0xe0000b1a, 0x1631b: 0xe0000b17, + 0x1631c: 0xe0000bb8, 0x1631d: 0xe0000bb5, 0x1631e: 0xe0000bb2, 0x1631f: 0xe0000baf, + 0x16320: 0x402d2020, 0x16321: 0x002d2083, 0x16322: 0xe0000bca, 0x16323: 0xe0000bc7, + 0x16324: 0xe0000bee, 0x16325: 0xe0000beb, 0x16326: 0x402d9820, 0x16327: 0x002d9883, + 0x16328: 0xe0000c51, 0x16329: 0xe0000c4e, 0x1632a: 0xe0000c60, 0x1632b: 0xe0000c5d, + 0x1632c: 0xe0000c31, 0x1632d: 0xe0000c2e, 0x1632e: 0xe0000c5a, 0x1632f: 0xe0000c57, + 0x16330: 0xe0000c54, 0x16331: 0x402da220, 0x16332: 0xf0000a0a, 0x16333: 0xf0000404, + 0x16334: 0xe0000c8a, 0x16335: 0xe0000c87, 0x16336: 0xe0000c9f, 0x16337: 0xe0000c9c, + 0x16338: 0x402f7220, 0x16339: 0xe0000ccc, 0x1633a: 0xe0000cc9, 0x1633b: 0xe0000cd8, + 0x1633c: 0xe0000cd5, 0x1633d: 0xe0000cd2, 0x1633e: 0xe0000ccf, 0x1633f: 0xe0000d04, + // Block 0x58d, offset 0x16340 + 0x16340: 0xe0000cfe, 0x16341: 0xe0000cf8, 0x16342: 0xe0000cf5, 0x16343: 0xe0000d51, + 0x16344: 0xe0000d4e, 0x16345: 0xe0000d6f, 0x16346: 0xe0000d6c, 0x16347: 0xe0000d5d, + 0x16348: 0xe0000d5a, 0x16349: 0xf0000404, 0x1634a: 0x002eda88, 0x1634b: 0x402eda20, + 0x1634c: 0xe0000e2e, 0x1634d: 0xe0000e2b, 0x1634e: 0xe0000da0, 0x1634f: 0xe0000d9d, + 0x16350: 0xe0000de0, 0x16351: 0xe0000ddd, 0x16352: 0xe0000e93, 0x16353: 0xe0000e8f, + 0x16354: 0xe0000eca, 0x16355: 0xe0000ec7, 0x16356: 0xe0000edc, 0x16357: 0xe0000ed9, + 0x16358: 0xe0000ed0, 0x16359: 0xe0000ecd, 0x1635a: 0xe0000f1f, 0x1635b: 0xe0000f1c, + 0x1635c: 0xe0000f2d, 0x1635d: 0xe0000f2a, 0x1635e: 0xe0000f47, 0x1635f: 0xe0000f44, + 0x16360: 0xe0000f33, 0x16361: 0xe0000f30, 0x16362: 0xe0000f99, 0x16363: 0xe0000f96, + 0x16364: 0xe0000f8a, 0x16365: 0xe0000f87, 0x16366: 0x00303688, 0x16367: 0x40303620, + 0x16368: 0xe000102b, 0x16369: 0xe0001028, 0x1636a: 0xe000103f, 0x1636b: 0xe000103c, + 0x1636c: 0xe0000fe7, 0x1636d: 0xe0000fe4, 0x1636e: 0xe0000ff9, 0x1636f: 0xe0000ff6, + 0x16370: 0xe0001025, 0x16371: 0xe0001022, 0x16372: 0xe0001039, 0x16373: 0xe0001036, + 0x16374: 0xe00010d8, 0x16375: 0xe00010d5, 0x16376: 0xe000110e, 0x16377: 0xe000110b, + 0x16378: 0xe0001117, 0x16379: 0xe000113b, 0x1637a: 0xe0001138, 0x1637b: 0x40312820, + 0x1637c: 0x00312883, 0x1637d: 0xe0001147, 0x1637e: 0xe0001144, 0x1637f: 0xe0000f64, + // Block 0x58e, offset 0x16380 + 0x16380: 0xe00009bc, 0x16381: 0xe00009c0, 0x16382: 0x002c3a8b, 0x16383: 0xf0000a04, + 0x16384: 0x40081c20, 0x16385: 0xe0000a5e, 0x16386: 0xe0000a62, 0x16387: 0x002cc28a, + 0x16388: 0x40081e20, 0x16389: 0xf0000a04, 0x1638a: 0x002d2285, 0x1638b: 0x002d688b, + 0x1638c: 0x002d688b, 0x1638d: 0x002d688b, 0x1638e: 0x002d6885, 0x1638f: 0xe000aa06, + 0x16390: 0x002d9a8b, 0x16391: 0x002d9a8b, 0x16392: 0x002e228b, 0x16393: 0x002e2285, + 0x16394: 0x40082020, 0x16395: 0x002e9e8b, 0x16396: 0xf000040a, 0x16397: 0x40082220, + 0x16398: 0x40082420, 0x16399: 0x002f2c8b, 0x1639a: 0x002f568b, 0x1639b: 0x002f7a8b, + 0x1639c: 0x002f7a8b, 0x1639d: 0x002f7a8b, 0x1639e: 0x40082620, 0x1639f: 0x40082820, + 0x163a0: 0xf0001414, 0x163a1: 0xe0000fbd, 0x163a2: 0xf0001414, 0x163a3: 0x40082a20, + 0x163a4: 0x00312a8b, 0x163a5: 0x40082c20, 0x163a6: 0x0032a288, 0x163a7: 0x40082e20, + 0x163a8: 0x00312a8b, 0x163a9: 0x40083020, 0x163aa: 0x002dfe88, 0x163ab: 0xe000094d, + 0x163ac: 0x002c0a8b, 0x163ad: 0x002c3a8b, 0x163ae: 0x40083220, 0x163af: 0x002c9885, + 0x163b0: 0x002c988b, 0x163b1: 0x002d088b, 0x163b2: 0x002d1e88, 0x163b3: 0x002e828b, + 0x163b4: 0x002ee285, 0x163b5: 0x00389084, 0x163b6: 0x00389284, 0x163b7: 0x00389484, + 0x163b8: 0x00389684, 0x163b9: 0x002d9a85, 0x163ba: 0x40083420, 0x163bb: 0xe0000b95, + 0x163bc: 0x00327e85, 0x163bd: 0x00325685, 0x163be: 0x0032568b, 0x163bf: 0x00327e8b, + // Block 0x58f, offset 0x163c0 + 0x163f8: 0xe000aa09, 0x163f9: 0xe0000e97, 0x163fa: 0x4030a820, 0x163fb: 0x402d2020, + 0x163fc: 0x402f4a20, 0x163fd: 0x402e9820, 0x163fe: 0x402db220, 0x163ff: 0x402e9a20, + // Block 0x590, offset 0x16400 + 0x16400: 0xcd3882c1, 0x16401: 0xce0382c1, 0x16402: 0xce0682c1, 0x16403: 0xce0b82c1, + 0x16404: 0xce0e9581, 0x16405: 0xce1182c1, 0x16406: 0xce1482c1, 0x16407: 0xce1782c1, + 0x16408: 0xce1a95e1, 0x16409: 0xce1c82c1, 0x1640a: 0xce1f82c1, 0x1640b: 0xce2282c1, + 0x1640c: 0xce2582c1, 0x1640d: 0xce2882c1, 0x1640e: 0xce2b82c1, 0x1640f: 0xce2e82c1, + 0x16410: 0xce3182c1, 0x16411: 0xcb5c4101, 0x16412: 0xce3482c1, 0x16413: 0xce3782c1, + 0x16414: 0xcb604201, 0x16415: 0xce3a82c1, 0x16416: 0xce3d82c1, 0x16417: 0xce4082c1, + 0x16418: 0xce4382c1, 0x16419: 0xce4682c1, 0x1641a: 0xce4982c1, 0x1641b: 0xce4c82c1, + 0x1641c: 0xcb6442d1, 0x1641d: 0xce4f95e1, 0x1641e: 0xcb6b44d1, 0x1641f: 0xce5182c1, + 0x16420: 0xce5495e1, 0x16421: 0xce5695e1, 0x16422: 0x404ec420, 0x16423: 0xe000aa45, + 0x16424: 0xe000aa4b, 0x16425: 0xcb6f4571, 0x16426: 0xe000aa55, 0x16427: 0xe000aa58, + 0x16428: 0xe000aa5b, 0x16429: 0xcb7245e1, 0x1642a: 0xe000ad32, 0x1642b: 0xcd7c82f1, + 0x1642c: 0xcd3b82f1, 0x1642d: 0xccb17051, 0x1642e: 0x404eea20, 0x1642f: 0xcdbd8bc1, + 0x16430: 0x404ef420, 0x16431: 0xcbeb5561, 0x16432: 0x404f0620, 0x16433: 0x404eec20, + 0x16434: 0x404f0a20, 0x16435: 0x404f0220, 0x16436: 0x404f0c20, 0x16437: 0xce099551, + 0x16438: 0x404f3020, 0x16439: 0x8209278a, 0x1643a: 0x8209278b, 0x1643b: 0xce589611, + 0x1643c: 0xce5c9611, 0x1643d: 0xce609681, 0x1643e: 0x40510e20, 0x1643f: 0xe000aa41, + // Block 0x591, offset 0x16440 + 0x16440: 0xe00001ac, 0x16441: 0xe0000240, 0x16442: 0xe0000358, 0x16443: 0xe0000432, + 0x16444: 0xe0000507, 0x16445: 0xe00005d1, 0x16446: 0xe000069c, 0x16447: 0xe0000744, + 0x16448: 0xe00007f0, 0x16449: 0xe0000895, 0x1644a: 0x40032220, 0x1644b: 0x40032420, + 0x1644c: 0xe000aa19, 0x1644d: 0xe000aa20, 0x1644e: 0xcb694441, 0x1644f: 0xe000aa48, + 0x16450: 0x404ea020, 0x16451: 0x404ea220, 0x16452: 0x404ece20, 0x16453: 0x404ed020, + 0x16454: 0x404ed220, 0x16455: 0x404ed420, 0x16456: 0x404ef620, 0x16457: 0x404ef820, + 0x16458: 0x404efa20, 0x16459: 0x404efc20, 0x1645a: 0x404e2620, 0x1645b: 0x404e3c20, + 0x1645c: 0x404eb820, 0x1645d: 0x404eba20, 0x1645e: 0x40510020, 0x1645f: 0x40510220, + 0x16460: 0x40510820, 0x16461: 0x404e4020, 0x16462: 0x404f0c20, 0x16463: 0x404f1820, + 0x16464: 0x404f1a20, 0x16465: 0x404ea420, 0x16466: 0x404ec020, 0x16467: 0x404f0e20, + 0x16468: 0x404f1020, 0x16469: 0x404f1c20, 0x1646a: 0x404f1e20, 0x1646b: 0x404f2020, + 0x1646c: 0x404f2220, 0x1646d: 0x404f2420, 0x1646e: 0x404e5c20, 0x1646f: 0x404ebc20, + 0x16470: 0x404ebe20, 0x16471: 0x404ee820, 0x16472: 0x404ee220, 0x16473: 0x404ef020, + 0x16474: 0x404ef220, 0x16475: 0x404e1620, 0x16476: 0x404e1a20, 0x16477: 0x404e1e20, + 0x16478: 0x404e2a20, 0x16479: 0x404e3620, 0x1647a: 0x404e4420, 0x1647b: 0x404e6420, + 0x1647c: 0x404e6c20, 0x1647d: 0x404e7620, 0x1647e: 0x404e7820, 0x1647f: 0x404e8020, + // Block 0x592, offset 0x16480 + 0x16480: 0x404e9e20, 0x16481: 0x404eac20, 0x16482: 0x40510c20, 0x16483: 0x404ee020, + 0x16484: 0x404f0020, 0x16485: 0x404f0420, 0x16486: 0x404f1220, 0x16487: 0x404f2620, + 0x16488: 0x404f2a20, 0x16489: 0x404f2e20, 0x1648a: 0x404f3020, 0x1648b: 0x404f2820, + 0x1648c: 0x404f2c20, 0x1648d: 0xadc11302, 0x1648e: 0x404e7c20, 0x1648f: 0x404f3220, + 0x16490: 0xe00001af, 0x16491: 0xe0000243, 0x16492: 0xe000035b, 0x16493: 0xe0000435, + 0x16494: 0xe000050a, 0x16495: 0xe00005d4, 0x16496: 0xe000069f, 0x16497: 0xe0000747, + 0x16498: 0xe00007f3, 0x16499: 0xe0000898, 0x1649a: 0x404f3420, 0x1649b: 0x404f3620, + 0x1649c: 0x404ee420, 0x1649d: 0x404f0820, 0x1649e: 0x4007a820, 0x1649f: 0x4007aa20, + 0x164a0: 0x00379888, 0x164a1: 0x00379c88, 0x164a2: 0x0037a088, 0x164a3: 0x0037a488, + 0x164a4: 0x0037a888, 0x164a5: 0x0037ac88, 0x164a6: 0x0037b088, 0x164a7: 0x0037b888, + 0x164a8: 0x0037bc88, 0x164a9: 0x0037c088, 0x164aa: 0x0037c488, 0x164ab: 0x0037c888, + 0x164ac: 0x0037cc88, 0x164ad: 0x0037d488, 0x164ae: 0x0037d888, 0x164af: 0x0037dc88, + 0x164b0: 0x0037e088, 0x164b1: 0x0037e488, 0x164b2: 0x0037e888, 0x164b3: 0x0037f088, + 0x164b4: 0x0037f488, 0x164b5: 0x0037f888, 0x164b6: 0x0037fc88, 0x164b7: 0x00380088, + 0x164b8: 0x00380488, 0x164b9: 0x00380888, 0x164ba: 0x00380c88, 0x164bb: 0x00381088, + 0x164bc: 0x00381488, 0x164bd: 0x00381888, 0x164be: 0x00381c88, 0x164bf: 0x00382488, + // Block 0x593, offset 0x164c0 + 0x164c0: 0xa0000000, 0x164c1: 0xa0000000, 0x164c2: 0xa0000000, 0x164c3: 0xa0000000, + 0x164c4: 0xa0000000, 0x164c5: 0xa0000000, 0x164c6: 0xa0000000, 0x164c7: 0xa0000000, + 0x164c8: 0xa0000000, 0x164c9: 0x40020020, 0x164ca: 0x40020220, 0x164cb: 0x40020420, + 0x164cc: 0x40020620, 0x164cd: 0x40020820, 0x164ce: 0xa0000000, 0x164cf: 0xa0000000, + 0x164d0: 0xa0000000, 0x164d1: 0xa0000000, 0x164d2: 0xa0000000, 0x164d3: 0xa0000000, + 0x164d4: 0xa0000000, 0x164d5: 0xa0000000, 0x164d6: 0xa0000000, 0x164d7: 0xa0000000, + 0x164d8: 0xa0000000, 0x164d9: 0xa0000000, 0x164da: 0xa0000000, 0x164db: 0xa0000000, + 0x164dc: 0xa0000000, 0x164dd: 0xa0000000, 0x164de: 0xa0000000, 0x164df: 0xa0000000, + 0x164e0: 0x40021220, 0x164e1: 0x4002ba20, 0x164e2: 0x4003e020, 0x164e3: 0x4004ea20, + 0x164e4: 0x4027de20, 0x164e5: 0x4004ec20, 0x164e6: 0x4004e620, 0x164e7: 0x4003d220, + 0x164e8: 0x4003f420, 0x164e9: 0x4003f620, 0x164ea: 0x4004d820, 0x164eb: 0x40093820, + 0x164ec: 0x40024020, 0x164ed: 0x40021a20, 0x164ee: 0x4002e420, 0x164ef: 0x4004e220, + 0x164f0: 0x4029cc20, 0x164f1: 0x4029ce20, 0x164f2: 0x4029d020, 0x164f3: 0x4029d220, + 0x164f4: 0x4029d420, 0x164f5: 0x4029d620, 0x164f6: 0x4029d820, 0x164f7: 0x4029da20, + 0x164f8: 0x4029dc20, 0x164f9: 0x4029de20, 0x164fa: 0x40026c20, 0x164fb: 0x40026220, + 0x164fc: 0x40094020, 0x164fd: 0x40094220, 0x164fe: 0x40094420, 0x164ff: 0x4002c420, + // Block 0x594, offset 0x16500 + 0x16500: 0x4004d620, 0x16501: 0xce660b93, 0x16502: 0x002c0a88, 0x16503: 0x002c3a88, + 0x16504: 0x002c6288, 0x16505: 0xc39e0be1, 0x16506: 0x002d0888, 0x16507: 0x002d2288, + 0x16508: 0x002d6888, 0x16509: 0x002d9a88, 0x1650a: 0x002dcc88, 0x1650b: 0x002dfe88, + 0x1650c: 0xc0030002, 0x1650d: 0x002e8288, 0x1650e: 0x002e9e88, 0x1650f: 0xc3a30b21, + 0x16510: 0x002f2c88, 0x16511: 0x002f5688, 0x16512: 0x002f7a88, 0x16513: 0x002fe688, + 0x16514: 0x00302c88, 0x16515: 0xc3900b21, 0x16516: 0x0030be88, 0x16517: 0x0030e288, + 0x16518: 0x0030f688, 0x16519: 0x00310088, 0x1651a: 0x00312a88, 0x1651b: 0x4003f820, + 0x1651c: 0x4004e420, 0x1651d: 0x4003fa20, 0x1651e: 0x40062420, 0x1651f: 0x40021620, + 0x16520: 0x40061e20, 0x16521: 0xce620b52, 0x16522: 0x402c0a20, 0x16523: 0x402c3a20, + 0x16524: 0x402c6220, 0x16525: 0xc39c0be1, 0x16526: 0x402d0820, 0x16527: 0x402d2220, + 0x16528: 0x402d6820, 0x16529: 0x402d9a20, 0x1652a: 0x402dcc20, 0x1652b: 0x402dfe20, + 0x1652c: 0xc0000002, 0x1652d: 0x402e8220, 0x1652e: 0x402e9e20, 0x1652f: 0xc3a00b21, + 0x16530: 0x402f2c20, 0x16531: 0x402f5620, 0x16532: 0x402f7a20, 0x16533: 0x402fe620, + 0x16534: 0x40302c20, 0x16535: 0xc38d0b21, 0x16536: 0x4030be20, 0x16537: 0x4030e220, + 0x16538: 0x4030f620, 0x16539: 0x40310020, 0x1653a: 0x40312a20, 0x1653b: 0x4003fc20, + 0x1653c: 0x40094820, 0x1653d: 0x4003fe20, 0x1653e: 0x40094c20, 0x1653f: 0xa0000000, + // Block 0x595, offset 0x16540 + 0x16540: 0xa0000000, 0x16541: 0xa0000000, 0x16542: 0xa0000000, 0x16543: 0xa0000000, + 0x16544: 0xa0000000, 0x16545: 0xa0000000, 0x16546: 0xa0000000, 0x16547: 0xa0000000, + 0x16548: 0xa0000000, 0x16549: 0x40020020, 0x1654a: 0x40020220, 0x1654b: 0x40020420, + 0x1654c: 0x40020620, 0x1654d: 0x40020820, 0x1654e: 0xa0000000, 0x1654f: 0xa0000000, + 0x16550: 0xa0000000, 0x16551: 0xa0000000, 0x16552: 0xa0000000, 0x16553: 0xa0000000, + 0x16554: 0xa0000000, 0x16555: 0xa0000000, 0x16556: 0xa0000000, 0x16557: 0xa0000000, + 0x16558: 0xa0000000, 0x16559: 0xa0000000, 0x1655a: 0xa0000000, 0x1655b: 0xa0000000, + 0x1655c: 0xa0000000, 0x1655d: 0xa0000000, 0x1655e: 0xa0000000, 0x1655f: 0xa0000000, + 0x16560: 0x40021220, 0x16561: 0x4002ba20, 0x16562: 0x4003e020, 0x16563: 0x4004ea20, + 0x16564: 0x4027de20, 0x16565: 0x4004ec20, 0x16566: 0x4004e620, 0x16567: 0x4003d220, + 0x16568: 0x4003f420, 0x16569: 0x4003f620, 0x1656a: 0x4004d820, 0x1656b: 0x40093820, + 0x1656c: 0x40024020, 0x1656d: 0x40021a20, 0x1656e: 0x4002e420, 0x1656f: 0x4004e220, + 0x16570: 0x4029cc20, 0x16571: 0x4029ce20, 0x16572: 0x4029d020, 0x16573: 0x4029d220, + 0x16574: 0x4029d420, 0x16575: 0x4029d620, 0x16576: 0x4029d820, 0x16577: 0x4029da20, + 0x16578: 0x4029dc20, 0x16579: 0x4029de20, 0x1657a: 0x40026c20, 0x1657b: 0x40026220, + 0x1657c: 0x40094020, 0x1657d: 0x40094220, 0x1657e: 0x40094420, 0x1657f: 0x4002c420, + // Block 0x596, offset 0x16580 + 0x16580: 0x4004d620, 0x16581: 0x002bde88, 0x16582: 0x002c0a88, 0x16583: 0x002c3a88, + 0x16584: 0x002c6288, 0x16585: 0xce6d2741, 0x16586: 0x002d0888, 0x16587: 0x002d2288, + 0x16588: 0x002d6888, 0x16589: 0x002d9a88, 0x1658a: 0x002dcc88, 0x1658b: 0x002dfe88, + 0x1658c: 0xc0030002, 0x1658d: 0x002e8288, 0x1658e: 0x002e9e88, 0x1658f: 0xc33f2741, + 0x16590: 0x002f2c88, 0x16591: 0x002f5688, 0x16592: 0x002f7a88, 0x16593: 0xc3430991, + 0x16594: 0x00302c88, 0x16595: 0x00306c88, 0x16596: 0x0030be88, 0x16597: 0x0030e288, + 0x16598: 0x0030f688, 0x16599: 0x00310088, 0x1659a: 0x00312a88, 0x1659b: 0x4003f820, + 0x1659c: 0x4004e420, 0x1659d: 0x4003fa20, 0x1659e: 0x40062420, 0x1659f: 0x40021620, + 0x165a0: 0x40061e20, 0x165a1: 0x402bde20, 0x165a2: 0x402c0a20, 0x165a3: 0x402c3a20, + 0x165a4: 0x402c6220, 0x165a5: 0xce6b2741, 0x165a6: 0x402d0820, 0x165a7: 0x402d2220, + 0x165a8: 0x402d6820, 0x165a9: 0x402d9a20, 0x165aa: 0x402dcc20, 0x165ab: 0x402dfe20, + 0x165ac: 0xc0000002, 0x165ad: 0x402e8220, 0x165ae: 0x402e9e20, 0x165af: 0xc33d2741, + 0x165b0: 0x402f2c20, 0x165b1: 0x402f5620, 0x165b2: 0x402f7a20, 0x165b3: 0xc3410991, + 0x165b4: 0x40302c20, 0x165b5: 0x40306c20, 0x165b6: 0x4030be20, 0x165b7: 0x4030e220, + 0x165b8: 0x4030f620, 0x165b9: 0x40310020, 0x165ba: 0x40312a20, 0x165bb: 0x4003fc20, + 0x165bc: 0x40094820, 0x165bd: 0x4003fe20, 0x165be: 0x40094c20, 0x165bf: 0xa0000000, + // Block 0x597, offset 0x165c0 + 0x165c0: 0xe00008f5, 0x165c1: 0xe00008ef, 0x165c2: 0xe0000921, 0x165c3: 0xe0000969, + 0x165c4: 0xe000095b, 0x165c5: 0xe000094d, 0x165c6: 0xe00009dd, 0x165c7: 0xe0000a53, + 0x165c8: 0xe0000ae8, 0x165c9: 0xe0000ae2, 0x165ca: 0x002c9a83, 0x165cb: 0xe0000b20, + 0x165cc: 0xe0000c2b, 0x165cd: 0xe0000c25, 0x165ce: 0xe0000c37, 0x165cf: 0xe0000c43, + 0x165d0: 0xe0000ab3, 0x165d1: 0xe0000d63, 0x165d2: 0xe0000d9a, 0x165d3: 0xe0000d94, + 0x165d4: 0x002ee483, 0x165d5: 0xe0000de6, 0x165d6: 0xe0000dd2, 0x165d7: 0x40093e20, + 0x165d8: 0xe0000e12, 0x165d9: 0xe0000fe1, 0x165da: 0xe0000fdb, 0x165db: 0xe0000fed, + 0x165dc: 0xe0000fff, 0x165dd: 0xe0001102, 0x165de: 0x00318888, 0x165df: 0xe0000f7b, + 0x165e0: 0xe00008f2, 0x165e1: 0xe00008ec, 0x165e2: 0xe000091e, 0x165e3: 0xe0000966, + 0x165e4: 0xe0000958, 0x165e5: 0xe000094a, 0x165e6: 0xe00009d5, 0x165e7: 0xe0000a4d, + 0x165e8: 0xe0000ae5, 0x165e9: 0xe0000adf, 0x165ea: 0x402c9a20, 0x165eb: 0xe0000b1d, + 0x165ec: 0xe0000c28, 0x165ed: 0xe0000c22, 0x165ee: 0xe0000c34, 0x165ef: 0xe0000c40, + 0x165f0: 0xe0000aad, 0x165f1: 0xe0000d60, 0x165f2: 0xe0000d97, 0x165f3: 0xe0000d91, + 0x165f4: 0x402ee420, 0x165f5: 0xe0000de3, 0x165f6: 0xe0000dcf, 0x165f7: 0x40093c20, + 0x165f8: 0xe0000e0f, 0x165f9: 0xe0000fde, 0x165fa: 0xe0000fd8, 0x165fb: 0xe0000fea, + 0x165fc: 0xe0000ffc, 0x165fd: 0xe00010ff, 0x165fe: 0x40318820, 0x165ff: 0xe0001114, + // Block 0x598, offset 0x16600 + 0x16600: 0xe0000cfe, 0x16601: 0xe0000cf8, 0x16602: 0xe0000cf5, 0x16603: 0xe0000d51, + 0x16604: 0xe0000d4e, 0x16605: 0xe0000d6f, 0x16606: 0xe0000d6c, 0x16607: 0xe0000d5d, + 0x16608: 0xe0000d5a, 0x16609: 0xf0000404, 0x1660a: 0x002eda88, 0x1660b: 0x402eda20, + 0x1660c: 0xe0000e2e, 0x1660d: 0xe0000e2b, 0x1660e: 0xe0000da0, 0x1660f: 0xe0000d9d, + 0x16610: 0xe0000de0, 0x16611: 0xe0000ddd, 0x16612: 0xe0000e93, 0x16613: 0xe0000e8f, + 0x16614: 0xe0000eca, 0x16615: 0xe0000ec7, 0x16616: 0xe0000edc, 0x16617: 0xe0000ed9, + 0x16618: 0xe0000ed0, 0x16619: 0xe0000ecd, 0x1661a: 0xe0000f1f, 0x1661b: 0xe0000f1c, + 0x1661c: 0xe0000f2d, 0x1661d: 0xe0000f2a, 0x1661e: 0xe0000f47, 0x1661f: 0xe0000f44, + 0x16620: 0x002fe883, 0x16621: 0x402fe820, 0x16622: 0xe0000f99, 0x16623: 0xe0000f96, + 0x16624: 0xe0000f8a, 0x16625: 0xe0000f87, 0x16626: 0x00303688, 0x16627: 0x40303620, + 0x16628: 0xe000102b, 0x16629: 0xe0001028, 0x1662a: 0xe000103f, 0x1662b: 0xe000103c, + 0x1662c: 0xe0000fe7, 0x1662d: 0xe0000fe4, 0x1662e: 0xe0000ff9, 0x1662f: 0xe0000ff6, + 0x16630: 0xe0001025, 0x16631: 0xe0001022, 0x16632: 0xe0001039, 0x16633: 0xe0001036, + 0x16634: 0xe00010d8, 0x16635: 0xe00010d5, 0x16636: 0xe000110e, 0x16637: 0xe000110b, + 0x16638: 0xe0001117, 0x16639: 0xe000113b, 0x1663a: 0xe0001138, 0x1663b: 0xe000114d, + 0x1663c: 0xe000114a, 0x1663d: 0xe0001147, 0x1663e: 0xe0001144, 0x1663f: 0xe0000f64, + // Block 0x599, offset 0x16640 + 0x16640: 0xe00010d2, 0x16641: 0xe00010cf, 0x16642: 0xe00010cc, 0x16643: 0xe00010c9, + 0x16644: 0xe00010e1, 0x16645: 0xe00010de, 0x16646: 0xe00010e7, 0x16647: 0xe00010e4, + 0x16648: 0xe00010ed, 0x16649: 0xe00010ea, 0x1664a: 0xe00010fc, 0x1664b: 0xe00010f9, + 0x1664c: 0xe00010f6, 0x1664d: 0xe00010f3, 0x1664e: 0xe0001123, 0x1664f: 0xe0001120, + 0x16650: 0xe0001141, 0x16651: 0xe000113e, 0x16652: 0xe0001153, 0x16653: 0xe0001150, + 0x16654: 0xe0001159, 0x16655: 0xe0001156, 0x16656: 0xe0000c15, 0x16657: 0xe0000f8d, + 0x16658: 0xe00010db, 0x16659: 0xe0001111, 0x1665a: 0xf0000404, 0x1665b: 0xe0000f70, + 0x1665c: 0x40300420, 0x1665d: 0x40300620, 0x1665e: 0xe0000f7f, 0x1665f: 0x402c9620, + 0x16660: 0xe000099b, 0x16661: 0xe0000998, 0x16662: 0xe0000989, 0x16663: 0xe0000986, + 0x16664: 0xe0000928, 0x16665: 0xe0000924, 0x16666: 0xe0000930, 0x16667: 0xe000092c, + 0x16668: 0xe0000940, 0x16669: 0xe000093c, 0x1666a: 0xe0000938, 0x1666b: 0xe0000934, + 0x1666c: 0xe00009aa, 0x1666d: 0xe00009a6, 0x1666e: 0xe0000902, 0x1666f: 0xe00008fe, + 0x16670: 0xe000090a, 0x16671: 0xe0000906, 0x16672: 0xe000091a, 0x16673: 0xe0000916, + 0x16674: 0xe0000912, 0x16675: 0xe000090e, 0x16676: 0xe00009a2, 0x16677: 0xe000099e, + 0x16678: 0xe0000b6e, 0x16679: 0xe0000b6b, 0x1667a: 0xe0000b5c, 0x1667b: 0xe0000b59, + 0x1667c: 0xe0000b26, 0x1667d: 0xe0000b23, 0x1667e: 0xe000ad41, 0x1667f: 0xe000ad3e, + // Block 0x59a, offset 0x16680 + 0x16680: 0xe000ad47, 0x16681: 0xe000ad44, 0x16682: 0xe000ad53, 0x16683: 0xe000ad50, + 0x16684: 0xe000ad4d, 0x16685: 0xe000ad4a, 0x16686: 0xe000ad59, 0x16687: 0xe000ad56, + 0x16688: 0xe0000c66, 0x16689: 0xe0000c63, 0x1668a: 0xe0000c78, 0x1668b: 0xe0000c75, + 0x1668c: 0xe0000e84, 0x1668d: 0xe0000e81, 0x1668e: 0xe0000e44, 0x1668f: 0xe0000e41, + 0x16690: 0xe000ad5f, 0x16691: 0xe000ad5c, 0x16692: 0xe000ad65, 0x16693: 0xe000ad62, + 0x16694: 0xe000ad6b, 0x16695: 0xe000ad68, 0x16696: 0xe0002946, 0x16697: 0xe0002943, + 0x16698: 0xe000ad71, 0x16699: 0xe000ad6e, 0x1669a: 0xe0000e5d, 0x1669b: 0xe0000e59, + 0x1669c: 0xe0000e65, 0x1669d: 0xe0000e61, 0x1669e: 0xe0000e75, 0x1669f: 0xe0000e71, + 0x166a0: 0xe0000e6d, 0x166a1: 0xe0000e69, 0x166a2: 0xe0000e7d, 0x166a3: 0xe0000e79, + 0x166a4: 0xe000108d, 0x166a5: 0xe000108a, 0x166a6: 0xe000104d, 0x166a7: 0xe000104a, + 0x166a8: 0xe0001066, 0x166a9: 0xe0001062, 0x166aa: 0xe000106e, 0x166ab: 0xe000106a, + 0x166ac: 0xe000107e, 0x166ad: 0xe000107a, 0x166ae: 0xe0001076, 0x166af: 0xe0001072, + 0x166b0: 0xe0001086, 0x166b1: 0xe0001082, 0x166b2: 0xe0001108, 0x166b3: 0xe0001105, + 0x166b4: 0xe0001135, 0x166b5: 0xe0001132, 0x166b6: 0xe000112f, 0x166b7: 0xe000112c, + 0x166b8: 0xe000111d, 0x166b9: 0xe000111a, 0x166ba: 0xe0000d0a, 0x166bb: 0xe0000d07, + 0x166bc: 0x0030d888, 0x166bd: 0x4030d820, 0x166be: 0x00312088, 0x166bf: 0x40312020, + // Block 0x59b, offset 0x166c0 + 0x166c0: 0xa0000000, 0x166c1: 0xa0000000, 0x166c2: 0xa0000000, 0x166c3: 0xa0000000, + 0x166c4: 0xa0000000, 0x166c5: 0xa0000000, 0x166c6: 0xa0000000, 0x166c7: 0xa0000000, + 0x166c8: 0xa0000000, 0x166c9: 0x40020020, 0x166ca: 0x40020220, 0x166cb: 0x40020420, + 0x166cc: 0x40020620, 0x166cd: 0x40020820, 0x166ce: 0xa0000000, 0x166cf: 0xa0000000, + 0x166d0: 0xa0000000, 0x166d1: 0xa0000000, 0x166d2: 0xa0000000, 0x166d3: 0xa0000000, + 0x166d4: 0xa0000000, 0x166d5: 0xa0000000, 0x166d6: 0xa0000000, 0x166d7: 0xa0000000, + 0x166d8: 0xa0000000, 0x166d9: 0xa0000000, 0x166da: 0xa0000000, 0x166db: 0xa0000000, + 0x166dc: 0xa0000000, 0x166dd: 0xa0000000, 0x166de: 0xa0000000, 0x166df: 0xa0000000, + 0x166e0: 0x40021220, 0x166e1: 0x4002ba20, 0x166e2: 0x4003e020, 0x166e3: 0x4004ea20, + 0x166e4: 0x4027de20, 0x166e5: 0x4004ec20, 0x166e6: 0x4004e620, 0x166e7: 0x4003d220, + 0x166e8: 0x4003f420, 0x166e9: 0x4003f620, 0x166ea: 0x4004d820, 0x166eb: 0x40093820, + 0x166ec: 0x40024020, 0x166ed: 0x40021a20, 0x166ee: 0x4002e420, 0x166ef: 0x4004e220, + 0x166f0: 0x4029cc20, 0x166f1: 0x4029ce20, 0x166f2: 0x4029d020, 0x166f3: 0x4029d220, + 0x166f4: 0x4029d420, 0x166f5: 0x4029d620, 0x166f6: 0x4029d820, 0x166f7: 0x4029da20, + 0x166f8: 0x4029dc20, 0x166f9: 0x4029de20, 0x166fa: 0x40026c20, 0x166fb: 0x40026220, + 0x166fc: 0x40094020, 0x166fd: 0x40094220, 0x166fe: 0x40094420, 0x166ff: 0x4002c420, + // Block 0x59c, offset 0x16700 + 0x16700: 0x4004d620, 0x16701: 0x002bde88, 0x16702: 0x002c0a88, 0x16703: 0xce7109c2, + 0x16704: 0xce7609c2, 0x16705: 0x002c9888, 0x16706: 0x002d0888, 0x16707: 0x002d2288, + 0x16708: 0x002d6888, 0x16709: 0x002d9a88, 0x1670a: 0x002dcc88, 0x1670b: 0xce7b09c2, + 0x1670c: 0xc0030002, 0x1670d: 0x002e8288, 0x1670e: 0xce8026f2, 0x1670f: 0x002ee288, + 0x16710: 0xce8509c2, 0x16711: 0x002f5688, 0x16712: 0x002f7a88, 0x16713: 0xce8a09b1, + 0x16714: 0x00302c88, 0x16715: 0x00306c88, 0x16716: 0x0030be88, 0x16717: 0x0030e288, + 0x16718: 0x0030f688, 0x16719: 0x00310088, 0x1671a: 0x00312a88, 0x1671b: 0x4003f820, + 0x1671c: 0x4004e420, 0x1671d: 0x4003fa20, 0x1671e: 0x40062420, 0x1671f: 0x40021620, + 0x16720: 0x40061e20, 0x16721: 0x402bde20, 0x16722: 0x402c0a20, 0x16723: 0xce6f09b1, + 0x16724: 0xce7409b1, 0x16725: 0x402c9820, 0x16726: 0x402d0820, 0x16727: 0x402d2220, + 0x16728: 0x402d6820, 0x16729: 0x402d9a20, 0x1672a: 0x402dcc20, 0x1672b: 0xce7909b1, + 0x1672c: 0xc0000002, 0x1672d: 0x402e8220, 0x1672e: 0xce7e26e1, 0x1672f: 0x402ee220, + 0x16730: 0xce8309b1, 0x16731: 0x402f5620, 0x16732: 0x402f7a20, 0x16733: 0xce8809b1, + 0x16734: 0x40302c20, 0x16735: 0x40306c20, 0x16736: 0x4030be20, 0x16737: 0x4030e220, + 0x16738: 0x4030f620, 0x16739: 0x40310020, 0x1673a: 0x40312a20, 0x1673b: 0x4003fc20, + 0x1673c: 0x40094820, 0x1673d: 0x4003fe20, 0x1673e: 0x40094c20, 0x1673f: 0xa0000000, + // Block 0x59d, offset 0x16740 + 0x16741: 0x40421220, 0x16742: 0x40421420, 0x16743: 0x40421620, + 0x16745: 0x4041f620, 0x16746: 0x4041f820, 0x16747: 0x4041fa20, + 0x16748: 0x4041fc20, 0x16749: 0x4041fe20, 0x1674a: 0x40420020, 0x1674b: 0x40420220, + 0x1674c: 0x40420620, 0x1674f: 0x40420a20, + 0x16750: 0x40420c20, 0x16753: 0x40420e20, + 0x16754: 0x40421020, 0x16755: 0xce8c96b1, 0x16756: 0x40421420, 0x16757: 0x40421620, + 0x16758: 0x40421820, 0x16759: 0x40421a20, 0x1675a: 0x40421c20, 0x1675b: 0x40421e20, + 0x1675c: 0x40422020, 0x1675d: 0x40422220, 0x1675e: 0x40422420, 0x1675f: 0x40422620, + 0x16760: 0x40422820, 0x16761: 0x40422a20, 0x16762: 0x40422c20, 0x16763: 0x40422e20, + 0x16764: 0x40423020, 0x16765: 0x40423220, 0x16766: 0x40423420, 0x16767: 0x40423620, + 0x16768: 0x40423820, 0x1676a: 0x40423a20, 0x1676b: 0x40423c20, + 0x1676c: 0x40423e20, 0x1676d: 0x40424020, 0x1676e: 0x40424220, 0x1676f: 0x40424420, + 0x16770: 0x40424820, 0x16772: 0x40424a20, 0x16773: 0x40424c20, + 0x16775: 0x40424e20, 0x16776: 0x40425220, 0x16777: 0x40425420, + 0x16778: 0x40425620, 0x16779: 0x40425820, + 0x1677c: 0xa070f102, 0x1677d: 0x40425a20, 0x1677e: 0x40425c20, 0x1677f: 0x40425e20, + // Block 0x59e, offset 0x16780 + 0x16780: 0x40426020, 0x16781: 0x40426220, 0x16782: 0x40426420, 0x16783: 0x40426620, + 0x16784: 0x40426820, 0x16787: 0xc05d01e1, + 0x16788: 0x40427020, 0x1678b: 0x40427220, + 0x1678c: 0x40427420, 0x1678d: 0x8209213b, + 0x16796: 0x40427820, 0x16797: 0x40427a20, + 0x1679c: 0xe000185d, 0x1679d: 0xe0001860, 0x1679f: 0x40424421, + 0x167a0: 0x40420420, 0x167a1: 0x40420820, 0x167a2: 0x40426a20, 0x167a3: 0x40426c20, + 0x167a6: 0xe0000176, 0x167a7: 0xe0000204, + 0x167a8: 0xe000031f, 0x167a9: 0xe00003f9, 0x167aa: 0xe00004d4, 0x167ab: 0xe000059e, + 0x167ac: 0xe0000669, 0x167ad: 0xe0000711, 0x167ae: 0xe00007bd, 0x167af: 0xe0000862, + 0x167b0: 0x40073c20, 0x167b1: 0x40425020, 0x167b2: 0x40283c20, 0x167b3: 0x40283e20, + 0x167b4: 0x40284020, 0x167b5: 0x40284220, 0x167b6: 0x40284420, 0x167b7: 0x40284620, + // Block 0x59f, offset 0x167c0 + 0x167c1: 0xa000f902, 0x167c2: 0xa000f802, 0x167c3: 0xa000f402, + 0x167c5: 0x40410620, 0x167c6: 0x40410820, 0x167c7: 0x40411020, + 0x167c8: 0x40411220, 0x167c9: 0x40410020, 0x167ca: 0x40410220, + 0x167cf: 0x40411420, + 0x167d0: 0x40410a20, 0x167d3: 0x40410420, + 0x167d4: 0x40410c20, 0x167d5: 0x40411c20, 0x167d6: 0x40411e20, 0x167d7: 0x40412020, + 0x167d8: 0x40412220, 0x167d9: 0x40412420, 0x167da: 0x40412620, 0x167db: 0x40412820, + 0x167dc: 0x40412a20, 0x167dd: 0x40412c20, 0x167de: 0x40412e20, 0x167df: 0x40413020, + 0x167e0: 0x40413220, 0x167e1: 0x40413420, 0x167e2: 0x40413620, 0x167e3: 0x40413820, + 0x167e4: 0x40413a20, 0x167e5: 0x40413c20, 0x167e6: 0x40413e20, 0x167e7: 0x40414020, + 0x167e8: 0x40414220, 0x167ea: 0x40414420, 0x167eb: 0x40414620, + 0x167ec: 0x40414820, 0x167ed: 0x40414a20, 0x167ee: 0x40414c20, 0x167ef: 0x40414e20, + 0x167f0: 0x40415220, 0x167f2: 0x40415420, 0x167f3: 0xe000ad83, + 0x167f5: 0x40415620, 0x167f6: 0xe000ad74, + 0x167f8: 0x40411620, 0x167f9: 0x40411820, + 0x167fc: 0xa000fa02, 0x167fe: 0x40415a20, 0x167ff: 0x40415c20, + // Block 0x5a0, offset 0x16800 + 0x16800: 0x40415e20, 0x16801: 0x40416020, 0x16802: 0x40416220, + 0x16807: 0x40416420, + 0x16808: 0x40416620, 0x1680b: 0x40416820, + 0x1680c: 0x40416a20, 0x1680d: 0x40415a20, + 0x16811: 0x40411a20, + 0x16819: 0xe000ad77, 0x1681a: 0xe000ad7a, 0x1681b: 0xe000ad7d, + 0x1681c: 0x40415820, 0x1681e: 0xe000ad80, + 0x16826: 0xe0000170, 0x16827: 0xe00001fe, + 0x16828: 0xe0000319, 0x16829: 0xe00003f3, 0x1682a: 0xe00004ce, 0x1682b: 0xe0000598, + 0x1682c: 0xe0000663, 0x1682d: 0xe000070b, 0x1682e: 0xe00007b7, 0x1682f: 0xe000085c, + 0x16830: 0xa000f702, 0x16831: 0xa000f602, 0x16832: 0x40410e20, 0x16833: 0x4040fe20, + 0x16834: 0x4040fc20, 0x16835: 0x40415020, + // Block 0x5a1, offset 0x16840 + 0x16840: 0xa0000000, 0x16841: 0xa0000000, 0x16842: 0xa0000000, 0x16843: 0xa0000000, + 0x16844: 0xa0000000, 0x16845: 0xa0000000, 0x16846: 0xa0000000, 0x16847: 0xa0000000, + 0x16848: 0xa0000000, 0x16849: 0x40020020, 0x1684a: 0x40020220, 0x1684b: 0x40020420, + 0x1684c: 0x40020620, 0x1684d: 0x40020820, 0x1684e: 0xa0000000, 0x1684f: 0xa0000000, + 0x16850: 0xa0000000, 0x16851: 0xa0000000, 0x16852: 0xa0000000, 0x16853: 0xa0000000, + 0x16854: 0xa0000000, 0x16855: 0xa0000000, 0x16856: 0xa0000000, 0x16857: 0xa0000000, + 0x16858: 0xa0000000, 0x16859: 0xa0000000, 0x1685a: 0xa0000000, 0x1685b: 0xa0000000, + 0x1685c: 0xa0000000, 0x1685d: 0xa0000000, 0x1685e: 0xa0000000, 0x1685f: 0xa0000000, + 0x16860: 0x40021220, 0x16861: 0x4002ba20, 0x16862: 0x4003e020, 0x16863: 0x4004ea20, + 0x16864: 0x4027de20, 0x16865: 0x4004ec20, 0x16866: 0x4004e620, 0x16867: 0x4003d220, + 0x16868: 0x4003f420, 0x16869: 0x4003f620, 0x1686a: 0x4004d820, 0x1686b: 0x40093820, + 0x1686c: 0x40024020, 0x1686d: 0x40021a20, 0x1686e: 0x4002e420, 0x1686f: 0x4004e220, + 0x16870: 0x4029cc20, 0x16871: 0x4029ce20, 0x16872: 0x4029d020, 0x16873: 0x4029d220, + 0x16874: 0x4029d420, 0x16875: 0x4029d620, 0x16876: 0x4029d820, 0x16877: 0x4029da20, + 0x16878: 0x4029dc20, 0x16879: 0x4029de20, 0x1687a: 0x40026c20, 0x1687b: 0x40026220, + 0x1687c: 0x40094020, 0x1687d: 0x40094220, 0x1687e: 0x40094420, 0x1687f: 0x4002c420, + // Block 0x5a2, offset 0x16880 + 0x16880: 0x4004d620, 0x16881: 0xce900be1, 0x16882: 0x002c0a88, 0x16883: 0xc33531e1, + 0x16884: 0x002c6288, 0x16885: 0xce6d0be1, 0x16886: 0x002d0888, 0x16887: 0x002d2288, + 0x16888: 0x002d6888, 0x16889: 0x002d9a88, 0x1688a: 0x002dcc88, 0x1688b: 0x002dfe88, + 0x1688c: 0xc0030002, 0x1688d: 0x002e8288, 0x1688e: 0xc54631e1, 0x1688f: 0xc33f31e1, + 0x16890: 0x002f2c88, 0x16891: 0x002f5688, 0x16892: 0x002f7a88, 0x16893: 0xc34331e1, + 0x16894: 0x00302c88, 0x16895: 0x00306c88, 0x16896: 0x0030be88, 0x16897: 0x0030e288, + 0x16898: 0x0030f688, 0x16899: 0x00310088, 0x1689a: 0xce959711, 0x1689b: 0x4003f820, + 0x1689c: 0x4004e420, 0x1689d: 0x4003fa20, 0x1689e: 0x40062420, 0x1689f: 0x40021620, + 0x168a0: 0x40061e20, 0x168a1: 0xce8e0be1, 0x168a2: 0x402c0a20, 0x168a3: 0xc33331e1, + 0x168a4: 0x402c6220, 0x168a5: 0xce6b0be1, 0x168a6: 0x402d0820, 0x168a7: 0x402d2220, + 0x168a8: 0x402d6820, 0x168a9: 0x402d9a20, 0x168aa: 0x402dcc20, 0x168ab: 0x402dfe20, + 0x168ac: 0xc0000002, 0x168ad: 0x402e8220, 0x168ae: 0xc53331e1, 0x168af: 0xc33d31e1, + 0x168b0: 0x402f2c20, 0x168b1: 0x402f5620, 0x168b2: 0x402f7a20, 0x168b3: 0xc34131e1, + 0x168b4: 0x40302c20, 0x168b5: 0x40306c20, 0x168b6: 0x4030be20, 0x168b7: 0x4030e220, + 0x168b8: 0x4030f620, 0x168b9: 0x40310020, 0x168ba: 0xce929711, 0x168bb: 0x4003fc20, + 0x168bc: 0x40094820, 0x168bd: 0x4003fe20, 0x168be: 0x40094c20, 0x168bf: 0xa0000000, + // Block 0x5a3, offset 0x168c0 + 0x168c0: 0xe00008f5, 0x168c1: 0xe00008ef, 0x168c2: 0xe0000921, 0x168c3: 0xe0000969, + 0x168c4: 0xe000095b, 0x168c5: 0xe000094d, 0x168c6: 0xe00009dd, 0x168c7: 0xe0000a53, + 0x168c8: 0xe0000ae8, 0x168c9: 0xe0000ae2, 0x168ca: 0xe0000af4, 0x168cb: 0xe0000b20, + 0x168cc: 0xe0000c2b, 0x168cd: 0xe0000c25, 0x168ce: 0xe0000c37, 0x168cf: 0xe0000c43, + 0x168d0: 0xe0000ab3, 0x168d1: 0xe0000d63, 0x168d2: 0xe0000d9a, 0x168d3: 0x002ee483, + 0x168d4: 0xe0000da6, 0x168d5: 0xe0000de6, 0x168d6: 0xe0000dd2, 0x168d7: 0x40093e20, + 0x168d8: 0xe0000e12, 0x168d9: 0xe0000fe1, 0x168da: 0xe0000fdb, 0x168db: 0xe0000fed, + 0x168dc: 0xe0000fff, 0x168dd: 0xe0001102, 0x168de: 0x00318888, 0x168df: 0xe0000f7b, + 0x168e0: 0xe00008f2, 0x168e1: 0xe00008ec, 0x168e2: 0xe000091e, 0x168e3: 0xe0000966, + 0x168e4: 0xe0000958, 0x168e5: 0xe000094a, 0x168e6: 0xe00009d5, 0x168e7: 0xe0000a4d, + 0x168e8: 0xe0000ae5, 0x168e9: 0xe0000adf, 0x168ea: 0xe0000af1, 0x168eb: 0xe0000b1d, + 0x168ec: 0xe0000c28, 0x168ed: 0xe0000c22, 0x168ee: 0xe0000c34, 0x168ef: 0xe0000c40, + 0x168f0: 0xe0000aad, 0x168f1: 0xe0000d60, 0x168f2: 0xe0000d97, 0x168f3: 0x402ee420, + 0x168f4: 0xe0000da3, 0x168f5: 0xe0000de3, 0x168f6: 0xe0000dcf, 0x168f7: 0x40093c20, + 0x168f8: 0xe0000e0f, 0x168f9: 0xe0000fde, 0x168fa: 0xe0000fd8, 0x168fb: 0xe0000fea, + 0x168fc: 0xe0000ffc, 0x168fd: 0xe00010ff, 0x168fe: 0x40318820, 0x168ff: 0xe0001114, + // Block 0x5a4, offset 0x16900 + 0x16900: 0xe0000983, 0x16901: 0xe0000980, 0x16902: 0xe00008fb, 0x16903: 0xe00008f8, + 0x16904: 0x002be083, 0x16905: 0x402be020, 0x16906: 0x002c3c83, 0x16907: 0x402c3c20, + 0x16908: 0xe0000a3e, 0x16909: 0xe0000a3b, 0x1690a: 0xe0000a4a, 0x1690b: 0xe0000a47, + 0x1690c: 0xe0000a44, 0x1690d: 0xe0000a41, 0x1690e: 0xe0000a86, 0x1690f: 0xe0000a83, + 0x16910: 0xe0000aaa, 0x16911: 0xe0000aa7, 0x16912: 0xe0000b46, 0x16913: 0xe0000b43, + 0x16914: 0xe0000aee, 0x16915: 0xe0000aeb, 0x16916: 0xe0000b2c, 0x16917: 0xe0000b29, + 0x16918: 0x002c9a83, 0x16919: 0x402c9a20, 0x1691a: 0xe0000b1a, 0x1691b: 0xe0000b17, + 0x1691c: 0xe0000bb8, 0x1691d: 0xe0000bb5, 0x1691e: 0xe0000bb2, 0x1691f: 0xe0000baf, + 0x16920: 0xe0000bc4, 0x16921: 0xe0000bc1, 0x16922: 0xe0000bca, 0x16923: 0xe0000bc7, + 0x16924: 0xe0000bee, 0x16925: 0xe0000beb, 0x16926: 0xe0000c1b, 0x16927: 0xe0000c18, + 0x16928: 0xe0000c51, 0x16929: 0xe0000c4e, 0x1692a: 0xe0000c60, 0x1692b: 0xe0000c5d, + 0x1692c: 0xe0000c31, 0x1692d: 0xe0000c2e, 0x1692e: 0xe0000c5a, 0x1692f: 0xe0000c57, + 0x16930: 0xe0000c54, 0x16931: 0x402da220, 0x16932: 0xf0000a0a, 0x16933: 0xf0000404, + 0x16934: 0xe0000c8a, 0x16935: 0xe0000c87, 0x16936: 0xe0000c9f, 0x16937: 0xe0000c9c, + 0x16938: 0x402f7220, 0x16939: 0xe0000ccc, 0x1693a: 0xe0000cc9, 0x1693b: 0xe0000cd8, + 0x1693c: 0xe0000cd5, 0x1693d: 0xe0000cd2, 0x1693e: 0xe0000ccf, 0x1693f: 0xe0000d04, + // Block 0x5a5, offset 0x16940 + 0x16940: 0xe0000cfe, 0x16941: 0x002e2483, 0x16942: 0x402e2420, 0x16943: 0x002ea083, + 0x16944: 0x402ea020, 0x16945: 0xe0000d6f, 0x16946: 0xe0000d6c, 0x16947: 0xe0000d5d, + 0x16948: 0xe0000d5a, 0x16949: 0xf0000404, 0x1694a: 0x002eda88, 0x1694b: 0x402eda20, + 0x1694c: 0xe0000e2e, 0x1694d: 0xe0000e2b, 0x1694e: 0xe0000da0, 0x1694f: 0xe0000d9d, + 0x16950: 0xe0000de0, 0x16951: 0xe0000ddd, 0x16952: 0xe0000e93, 0x16953: 0xe0000e8f, + 0x16954: 0xe0000eca, 0x16955: 0xe0000ec7, 0x16956: 0xe0000edc, 0x16957: 0xe0000ed9, + 0x16958: 0xe0000ed0, 0x16959: 0xe0000ecd, 0x1695a: 0x002fe883, 0x1695b: 0x402fe820, + 0x1695c: 0xe0000f2d, 0x1695d: 0xe0000f2a, 0x1695e: 0xe0000f47, 0x1695f: 0xe0000f44, + 0x16960: 0xe0000f33, 0x16961: 0xe0000f30, 0x16962: 0xe0000f99, 0x16963: 0xe0000f96, + 0x16964: 0xe0000f8a, 0x16965: 0xe0000f87, 0x16966: 0x00303688, 0x16967: 0x40303620, + 0x16968: 0xe000102b, 0x16969: 0xe0001028, 0x1696a: 0xe000103f, 0x1696b: 0xe000103c, + 0x1696c: 0xe0000fe7, 0x1696d: 0xe0000fe4, 0x1696e: 0xe0000ff9, 0x1696f: 0xe0000ff6, + 0x16970: 0xe0001025, 0x16971: 0xe0001022, 0x16972: 0xe0001039, 0x16973: 0xe0001036, + 0x16974: 0xe00010d8, 0x16975: 0xe00010d5, 0x16976: 0xe000110e, 0x16977: 0xe000110b, + 0x16978: 0xe0001117, 0x16979: 0x00312c83, 0x1697a: 0x40312c20, 0x1697b: 0x00312e83, + 0x1697c: 0x40312e20, 0x1697d: 0xe0001147, 0x1697e: 0xe0001144, 0x1697f: 0xe0000f64, + // Block 0x5a6, offset 0x16980 + 0x16980: 0xe00009b1, 0x16981: 0xe00009ae, 0x16982: 0xe0000a22, 0x16983: 0xe0000a1f, + 0x16984: 0xe0000a28, 0x16985: 0xe0000a25, 0x16986: 0xe0000a2e, 0x16987: 0xe0000a2b, + 0x16988: 0xe000261a, 0x16989: 0xe0002617, 0x1698a: 0xe0000a8c, 0x1698b: 0xe0000a89, + 0x1698c: 0xe0000a98, 0x1698d: 0xe0000a95, 0x1698e: 0xe0000aa4, 0x1698f: 0xe0000aa1, + 0x16990: 0xe0000a92, 0x16991: 0xe0000a8f, 0x16992: 0xe0000a9e, 0x16993: 0xe0000a9b, + 0x16994: 0xe0000b55, 0x16995: 0xe0000b51, 0x16996: 0xe0000b4d, 0x16997: 0xe0000b49, + 0x16998: 0xe0000b7c, 0x16999: 0xe0000b79, 0x1699a: 0xe0000b82, 0x1699b: 0xe0000b7f, + 0x1699c: 0xe0000b39, 0x1699d: 0xe0000b35, 0x1699e: 0xe0000b8c, 0x1699f: 0xe0000b89, + 0x169a0: 0xe0000bd0, 0x169a1: 0xe0000bcd, 0x169a2: 0xe0000c00, 0x169a3: 0xe0000bfd, + 0x169a4: 0xe0000c0c, 0x169a5: 0xe0000c09, 0x169a6: 0xe0000bfa, 0x169a7: 0xe0000bf7, + 0x169a8: 0xe0000c06, 0x169a9: 0xe0000c03, 0x169aa: 0xe0000c12, 0x169ab: 0xe0000c0f, + 0x169ac: 0xe0000c7e, 0x169ad: 0xe0000c7b, 0x169ae: 0xe0000c4a, 0x169af: 0xe0000c46, + 0x169b0: 0xe0000c93, 0x169b1: 0xe0000c90, 0x169b2: 0xe0000cab, 0x169b3: 0xe0000ca8, + 0x169b4: 0xe0000cb1, 0x169b5: 0xe0000cae, 0x169b6: 0xe0000cde, 0x169b7: 0xe0000cdb, + 0x169b8: 0xe0000ce5, 0x169b9: 0xe0000ce1, 0x169ba: 0xe0000cf2, 0x169bb: 0xe0000cef, + 0x169bc: 0xe0000cec, 0x169bd: 0xe0000ce9, 0x169be: 0xe0000d1e, 0x169bf: 0xe0000d1b, + // Block 0x5a7, offset 0x169c0 + 0x169c0: 0xe0000d24, 0x169c1: 0xe0000d21, 0x169c2: 0xe0000d2a, 0x169c3: 0xe0000d27, + 0x169c4: 0xe0000d69, 0x169c5: 0xe0000d66, 0x169c6: 0xe0000d7b, 0x169c7: 0xe0000d78, + 0x169c8: 0xe0000d87, 0x169c9: 0xe0000d84, 0x169ca: 0xe0000d81, 0x169cb: 0xe0000d7e, + 0x169cc: 0xe0002946, 0x169cd: 0xe0002943, 0x169ce: 0xe0000df5, 0x169cf: 0xe0000df1, + 0x169d0: 0xe0000e3d, 0x169d1: 0xe0000e39, 0x169d2: 0xe000294c, 0x169d3: 0xe0002949, + 0x169d4: 0xe0000ea7, 0x169d5: 0xe0000ea4, 0x169d6: 0xe0000ead, 0x169d7: 0xe0000eaa, + 0x169d8: 0xe0000ed6, 0x169d9: 0xe0000ed3, 0x169da: 0xe0000ef4, 0x169db: 0xe0000ef1, + 0x169dc: 0xe0000efb, 0x169dd: 0xe0000ef7, 0x169de: 0xe0000f02, 0x169df: 0xe0000eff, + 0x169e0: 0xe0000f41, 0x169e1: 0xe0000f3e, 0x169e2: 0xe0000f53, 0x169e3: 0xe0000f50, + 0x169e4: 0xe000296a, 0x169e5: 0xe0002967, 0x169e6: 0xe0000f3a, 0x169e7: 0xe0000f36, + 0x169e8: 0xe0000f5a, 0x169e9: 0xe0000f56, 0x169ea: 0xe0000f93, 0x169eb: 0xe0000f90, + 0x169ec: 0xe0000f9f, 0x169ed: 0xe0000f9c, 0x169ee: 0xe0000fb1, 0x169ef: 0xe0000fae, + 0x169f0: 0xe0000fab, 0x169f1: 0xe0000fa8, 0x169f2: 0xe0001093, 0x169f3: 0xe0001090, + 0x169f4: 0xe000109f, 0x169f5: 0xe000109c, 0x169f6: 0xe0001099, 0x169f7: 0xe0001096, + 0x169f8: 0xe0001032, 0x169f9: 0xe000102e, 0x169fa: 0xe0001046, 0x169fb: 0xe0001042, + 0x169fc: 0xe00010a9, 0x169fd: 0xe00010a6, 0x169fe: 0xe00010af, 0x169ff: 0xe00010ac, + // Block 0x5a8, offset 0x16a00 + 0x16a00: 0xe0000b03, 0x16a01: 0xe0000aff, 0x16a02: 0xe0000b13, 0x16a03: 0xe0000b0f, + 0x16a04: 0xe0000b0b, 0x16a05: 0xe0000b07, 0x16a06: 0xe0000b75, 0x16a07: 0xe0000b71, + 0x16a08: 0xe0000c66, 0x16a09: 0xe0000c63, 0x16a0a: 0xe0000c78, 0x16a0b: 0xe0000c75, + 0x16a0c: 0xe0000e84, 0x16a0d: 0xe0000e81, 0x16a0e: 0xe0000e44, 0x16a0f: 0xe0000e41, + 0x16a10: 0xe0003c96, 0x16a11: 0xe0003c93, 0x16a12: 0xe0000db5, 0x16a13: 0xe0000db1, + 0x16a14: 0xe0000dc5, 0x16a15: 0xe0000dc1, 0x16a16: 0xe0000dbd, 0x16a17: 0xe0000db9, + 0x16a18: 0xe0000e8b, 0x16a19: 0xe0000e87, 0x16a1a: 0xe0003c9c, 0x16a1b: 0xe0003c99, + 0x16a1c: 0xe0000e65, 0x16a1d: 0xe0000e61, 0x16a1e: 0xe0000e75, 0x16a1f: 0xe0000e71, + 0x16a20: 0xe0000e6d, 0x16a21: 0xe0000e69, 0x16a22: 0xe0000e7d, 0x16a23: 0xe0000e79, + 0x16a24: 0xe000108d, 0x16a25: 0xe000108a, 0x16a26: 0xe000104d, 0x16a27: 0xe000104a, + 0x16a28: 0xe0001066, 0x16a29: 0xe0001062, 0x16a2a: 0xe000106e, 0x16a2b: 0xe000106a, + 0x16a2c: 0xe000107e, 0x16a2d: 0xe000107a, 0x16a2e: 0xe0001076, 0x16a2f: 0xe0001072, + 0x16a30: 0xe0001086, 0x16a31: 0xe0001082, 0x16a32: 0xe0001108, 0x16a33: 0xe0001105, + 0x16a34: 0xe0001135, 0x16a35: 0xe0001132, 0x16a36: 0xe000112f, 0x16a37: 0xe000112c, + 0x16a38: 0xe000111d, 0x16a39: 0xe000111a, 0x16a3a: 0xe0000d0a, 0x16a3b: 0xe0000d07, + 0x16a3c: 0x0030d888, 0x16a3d: 0x4030d820, 0x16a3e: 0x00312088, 0x16a3f: 0x40312020, + // Block 0x5a9, offset 0x16a40 + 0x16a40: 0xa0000000, 0x16a41: 0xa0000000, 0x16a42: 0xa0000000, 0x16a43: 0xa0000000, + 0x16a44: 0xa0000000, 0x16a46: 0x40096620, 0x16a47: 0x40096a20, + 0x16a48: 0x40070820, 0x16a49: 0x4004f220, 0x16a4a: 0x4004f620, 0x16a4b: 0x4027e620, + 0x16a4c: 0x40024820, 0x16a4d: 0x40024a20, 0x16a4e: 0x40070e20, 0x16a4f: 0x40071020, + 0x16a50: 0xae600000, 0x16a51: 0xae600000, 0x16a52: 0xae600000, 0x16a53: 0xae600000, + 0x16a54: 0xae600000, 0x16a55: 0xae600000, 0x16a56: 0xae600000, 0x16a57: 0xae600000, + 0x16a58: 0xa1e00000, 0x16a59: 0xa1f00000, 0x16a5a: 0xa2000000, 0x16a5b: 0x40026420, + 0x16a5e: 0x40027020, 0x16a5f: 0x4002cc20, + 0x16a60: 0x403aa220, 0x16a61: 0x40393a20, 0x16a62: 0x40393620, 0x16a63: 0x40393821, + 0x16a64: 0x403a7421, 0x16a65: 0x40393824, 0x16a66: 0x003a9344, 0x16a67: 0xce980151, + 0x16a68: 0x40393c20, 0x16a69: 0x403a6824, 0x16a6a: 0x40395620, 0x16a6b: 0x40395820, + 0x16a6c: 0x40396420, 0x16a6d: 0xce9c0171, 0x16a6e: 0x40397420, 0x16a6f: 0x40398820, + 0x16a70: 0x40398a20, 0x16a71: 0x4039a420, 0x16a72: 0x4039a620, 0x16a73: 0x4039c620, + 0x16a74: 0x4039c820, 0x16a75: 0x4039dc20, 0x16a76: 0x4039de20, 0x16a77: 0x4039e620, + 0x16a78: 0x4039e820, 0x16a79: 0x4039ee20, 0x16a7a: 0x4039f020, 0x16a7b: 0x403a3820, + 0x16a7c: 0x403a3a20, 0x16a7d: 0x403a9c20, 0x16a7e: 0x403a9e20, 0x16a7f: 0x403aa020, + // Block 0x5aa, offset 0x16a80 + 0x16a80: 0xa0000000, 0x16a81: 0x4039fc20, 0x16a82: 0x403a1220, 0x16a83: 0x403a1c22, + 0x16a84: 0x403a4020, 0x16a85: 0x403a4e20, 0x16a86: 0x403a5620, 0x16a87: 0xcea00171, + 0x16a88: 0xcea20171, 0x16a89: 0xcea60171, 0x16a8a: 0xcea80171, 0x16a8b: 0xa000b002, + 0x16a8c: 0xa000b202, 0x16a8d: 0xa000b102, 0x16a8e: 0xa1e0ad02, 0x16a8f: 0xa000af02, + 0x16a90: 0xa000ae02, 0x16a91: 0xa210ba02, 0x16a92: 0xa220bc02, 0x16a93: 0xae60bd02, + 0x16a94: 0xae60be02, 0x16a95: 0xadc0bf02, 0x16a96: 0xadc0c102, 0x16a97: 0xae60c202, + 0x16a98: 0xae60c302, 0x16a99: 0xae60c402, 0x16a9a: 0xae60c502, 0x16a9b: 0xae60c602, + 0x16a9c: 0xadc0c702, 0x16a9d: 0xae60c802, 0x16a9e: 0xae60c902, 0x16a9f: 0xadc0c002, + 0x16aa0: 0xe000015e, 0x16aa1: 0xe00001e6, 0x16aa2: 0xe0000301, 0x16aa3: 0xe00003db, + 0x16aa4: 0xe00004b6, 0x16aa5: 0xe0000580, 0x16aa6: 0xe000064b, 0x16aa7: 0xe00006f3, + 0x16aa8: 0xe000079f, 0x16aa9: 0xe0000844, 0x16aaa: 0x4004ee20, 0x16aab: 0x40024c20, + 0x16aac: 0x40024e20, 0x16aad: 0x4004de20, 0x16aae: 0x40393a20, 0x16aaf: 0x403a1020, + 0x16ab0: 0xa230d102, 0x16ab1: 0x40393823, 0x16ab2: 0x40393822, 0x16ab3: 0x40393825, + 0x16ab4: 0x00391c84, 0x16ab5: 0xf0000404, 0x16ab6: 0xf0000404, 0x16ab7: 0xe000ad89, + 0x16ab8: 0xe0003780, 0x16ab9: 0x40395821, 0x16aba: 0x40395c20, 0x16abb: 0x40393e20, + 0x16abc: 0x40395820, 0x16abd: 0x40396020, 0x16abe: 0x40394020, 0x16abf: 0x40396220, + // Block 0x5ab, offset 0x16ac0 + 0x16ac0: 0x40394220, 0x16ac1: 0x40396620, 0x16ac2: 0x40397820, 0x16ac3: 0x40396620, + 0x16ac4: 0x40396820, 0x16ac5: 0x40396c20, 0x16ac6: 0x40396a20, 0x16ac7: 0x40396e20, + 0x16ac8: 0x40398a21, 0x16ac9: 0x40398a20, 0x16aca: 0x40399020, 0x16acb: 0x40399220, + 0x16acc: 0x40399420, 0x16acd: 0x40399620, 0x16ace: 0x40399820, 0x16acf: 0x40399a20, + 0x16ad0: 0x40399c20, 0x16ad1: 0x4039a621, 0x16ad2: 0x4039aa20, 0x16ad3: 0x4039a620, + 0x16ad4: 0x4039ae20, 0x16ad5: 0x4039b020, 0x16ad6: 0x4039b820, 0x16ad7: 0x4039b420, + 0x16ad8: 0x4039b620, 0x16ad9: 0x4039b820, 0x16ada: 0x4039ca20, 0x16adb: 0x4039cc20, + 0x16adc: 0x4039ce20, 0x16add: 0x4039e020, 0x16ade: 0x4039e220, 0x16adf: 0x4039ea20, + 0x16ae0: 0x4039f220, 0x16ae1: 0x4039fe20, 0x16ae2: 0x403a0020, 0x16ae3: 0x403a0220, + 0x16ae4: 0x403a0420, 0x16ae5: 0x403a0820, 0x16ae6: 0x403a0a20, 0x16ae7: 0x403a1420, + 0x16ae8: 0x403a1620, 0x16ae9: 0x403a1c20, 0x16aea: 0x403a1c21, 0x16aeb: 0x403a2020, + 0x16aec: 0x403a2220, 0x16aed: 0x403a2620, 0x16aee: 0x403a2820, 0x16aef: 0x403a2021, + 0x16af0: 0x403a2c20, 0x16af1: 0x403a2e20, 0x16af2: 0x403a3020, 0x16af3: 0x403a3220, + 0x16af4: 0x403a3420, 0x16af5: 0x403a4220, 0x16af6: 0x403a4420, 0x16af7: 0x403a4620, + 0x16af8: 0x403a4820, 0x16af9: 0x403a6020, 0x16afa: 0x403a5820, 0x16afb: 0x403a5c21, + 0x16afc: 0x403a5c20, 0x16afd: 0x403a5e20, 0x16afe: 0x403a6823, 0x16aff: 0x40396c20, + // Block 0x5ac, offset 0x16b00 + 0x16b00: 0x003a6883, 0x16b01: 0x403a6822, 0x16b02: 0xe000ad86, 0x16b03: 0x403a6825, + 0x16b04: 0x403a7620, 0x16b05: 0x403a7820, 0x16b06: 0x403a7a20, 0x16b07: 0x403a7422, + 0x16b08: 0x403a7e20, 0x16b09: 0x403a7423, 0x16b0a: 0x403a8220, 0x16b0b: 0x403a8420, + 0x16b0c: 0xcea40171, 0x16b0d: 0x403a9225, 0x16b0e: 0x403a9620, 0x16b0f: 0x403a8620, + 0x16b10: 0x403a9224, 0x16b11: 0x403a9a20, 0x16b12: 0x403a9222, 0x16b13: 0xe00037b6, + 0x16b14: 0x4002e820, 0x16b15: 0xce9e0171, 0x16b16: 0xae600000, 0x16b17: 0xae600000, + 0x16b18: 0xae600000, 0x16b19: 0xae600000, 0x16b1a: 0xae600000, 0x16b1b: 0xae600000, + 0x16b1c: 0xae600000, 0x16b1d: 0xa0000000, 0x16b1e: 0x40071220, 0x16b1f: 0xae600000, + 0x16b20: 0xae600000, 0x16b21: 0xae600000, 0x16b22: 0xae600000, 0x16b23: 0xadc00000, + 0x16b24: 0xae600000, 0x16b25: 0x003a7484, 0x16b26: 0x003a9084, 0x16b27: 0xae600000, + 0x16b28: 0xae600000, 0x16b29: 0x40071420, 0x16b2a: 0xadc00000, 0x16b2b: 0xae600000, + 0x16b2c: 0xae600000, 0x16b2d: 0xadc00000, 0x16b2e: 0x40399e20, 0x16b2f: 0x4039ba20, + 0x16b30: 0xe0000161, 0x16b31: 0xe00001e9, 0x16b32: 0xe0000304, 0x16b33: 0xe00003de, + 0x16b34: 0xe00004b9, 0x16b35: 0xe0000583, 0x16b36: 0xe000064e, 0x16b37: 0xe00006f6, + 0x16b38: 0xe00007a2, 0x16b39: 0xe0000847, 0x16b3a: 0x4039d020, 0x16b3b: 0x4039e420, + 0x16b3c: 0x4039f420, 0x16b3d: 0xe0001553, 0x16b3e: 0xe0001779, 0x16b3f: 0x403a7020, + // Block 0x5ad, offset 0x16b40 + 0x16b40: 0x00021284, 0x16b41: 0x00021284, 0x16b42: 0x00021284, 0x16b43: 0x00021284, + 0x16b44: 0x00021284, 0x16b45: 0x00021284, 0x16b46: 0x00021284, 0x16b47: 0x0002129b, + 0x16b48: 0x00021284, 0x16b49: 0x00021284, 0x16b4a: 0x00021284, 0x16b4b: 0xa0000000, + 0x16b4c: 0x40021221, 0x16b4d: 0x40021222, 0x16b4e: 0xa0000000, 0x16b4f: 0xa0000000, + 0x16b50: 0x40022620, 0x16b51: 0x0002269b, 0x16b52: 0x40022820, 0x16b53: 0x40022a20, + 0x16b54: 0x40022c20, 0x16b55: 0x40022e20, 0x16b56: 0x4004c420, 0x16b57: 0x40021820, + 0x16b58: 0x4003d420, 0x16b59: 0x4003d620, 0x16b5a: 0x4003d820, 0x16b5b: 0x4003da20, + 0x16b5c: 0x4003e220, 0x16b5d: 0x4003e420, 0x16b5e: 0x4003e620, 0x16b5f: 0x4003e820, + 0x16b60: 0x4004f820, 0x16b61: 0x4004fa20, 0x16b62: 0x40050220, 0x16b63: 0x40050420, + 0x16b64: 0x0002e484, 0x16b65: 0xf0001f04, 0x16b66: 0xf0000404, 0x16b67: 0x40050620, + 0x16b68: 0x40020e20, 0x16b69: 0x40021020, 0x16b6a: 0xa0000000, 0x16b6b: 0xa0000000, + 0x16b6c: 0xa0000000, 0x16b6d: 0xa0000000, 0x16b6e: 0xa0000000, 0x16b6f: 0x0002129b, + 0x16b70: 0x4004f020, 0x16b71: 0x4004f420, 0x16b72: 0x40050e20, 0x16b73: 0xf0001f04, + 0x16b74: 0xf0000404, 0x16b75: 0x40051020, 0x16b76: 0xf0001f04, 0x16b77: 0xf0000404, + 0x16b78: 0x40051620, 0x16b79: 0x4003dc20, 0x16b7a: 0x4003de20, 0x16b7b: 0x40051820, + 0x16b7c: 0xf0001f04, 0x16b7d: 0x4002e020, 0x16b7e: 0x40021420, 0x16b7f: 0x40051a20, + // Block 0x5ae, offset 0x16b80 + 0x16b80: 0x40073420, 0x16b81: 0x40073620, + 0x16b93: 0x003a269a, + 0x16b94: 0x003a2699, 0x16b95: 0x003a2697, 0x16b96: 0x003a2698, 0x16b97: 0x003a7c9a, + 0x16b98: 0x003a7c99, 0x16b99: 0x003a7a9a, 0x16b9a: 0x003a7a99, 0x16b9b: 0x003a7e9a, + 0x16b9c: 0x003a7e99, 0x16b9d: 0xe000ad8c, 0x16b9e: 0x003a849a, 0x16b9f: 0x003a8499, + 0x16ba0: 0x003a789a, 0x16ba1: 0x003a7899, 0x16ba2: 0x003a809a, 0x16ba3: 0x003a8099, + 0x16ba4: 0x003a989a, 0x16ba5: 0x003a9899, 0x16ba6: 0x003a9897, 0x16ba7: 0x003a9898, + 0x16ba8: 0x003a8e97, 0x16ba9: 0x003a8e98, 0x16baa: 0xe0001559, 0x16bab: 0xe0001556, + 0x16bac: 0xe0001589, 0x16bad: 0xe0001586, 0x16bae: 0xe000158f, 0x16baf: 0xe000158c, + 0x16bb0: 0xe000159b, 0x16bb1: 0xe0001598, 0x16bb2: 0xe0001595, 0x16bb3: 0xe0001592, + 0x16bb4: 0xe00015a1, 0x16bb5: 0xe000159e, 0x16bb6: 0xe00015bf, 0x16bb7: 0xe00015bc, + 0x16bb8: 0xe00015b9, 0x16bb9: 0xe00015ad, 0x16bba: 0xe00015a7, 0x16bbb: 0xe00015a4, + 0x16bbc: 0x003a929a, 0x16bbd: 0x003a9299, 0x16bbe: 0x003a9297, 0x16bbf: 0x003a9298, + // Block 0x5af, offset 0x16bc0 + 0x16bc0: 0xf0001a1a, 0x16bc1: 0xf0001a1a, 0x16bc2: 0xf0001a1a, 0x16bc3: 0xe00028f4, + 0x16bc4: 0xe000374d, 0x16bc5: 0xf0001a1a, 0x16bc6: 0xf0001a1a, 0x16bc7: 0xf0001a1a, + 0x16bc8: 0xf0001a1a, 0x16bc9: 0xe00028f7, 0x16bca: 0xe0003750, 0x16bcb: 0xf0001a1a, + 0x16bcc: 0xf0001a1a, 0x16bcd: 0xf0001a1a, 0x16bce: 0xf0001a1a, 0x16bcf: 0xe00028fd, + 0x16bd0: 0xe000375c, 0x16bd1: 0xf0001a1a, 0x16bd2: 0xf0001a1a, 0x16bd3: 0xe0002900, + 0x16bd4: 0xe000376e, 0x16bd5: 0xe0003786, 0x16bd6: 0xe000378c, 0x16bd7: 0xe0003792, + 0x16bd8: 0xe00037a4, 0x16bd9: 0xe0002906, 0x16bda: 0xe00037b3, 0x16bdb: 0xf0001a1a, + 0x16bdc: 0xf0001a1a, 0x16bdd: 0xe000377d, 0x16bde: 0xe0000003, 0x16bdf: 0xe0000006, + 0x16be0: 0xe0000009, 0x16be1: 0xe000000c, 0x16be2: 0xe000000f, 0x16be3: 0xe0000012, + 0x16be4: 0xe000156b, 0x16be5: 0xe000156e, 0x16be6: 0xe0001577, 0x16be7: 0xe000157d, + 0x16be8: 0xe00015aa, 0x16be9: 0xe00015b3, 0x16bea: 0xf0001919, 0x16beb: 0xf0001919, + 0x16bec: 0xf0001919, 0x16bed: 0xf0001919, 0x16bee: 0xe0002891, 0x16bef: 0xe00036a2, + 0x16bf0: 0xf0001919, 0x16bf1: 0xf0001919, 0x16bf2: 0xf0001919, 0x16bf3: 0xf0001919, + 0x16bf4: 0xe0002897, 0x16bf5: 0xe00036ae, 0x16bf6: 0xf0001919, 0x16bf7: 0xf0001919, + 0x16bf8: 0xf0001919, 0x16bf9: 0xf0001919, 0x16bfa: 0xe000289d, 0x16bfb: 0xe00036b7, + 0x16bfc: 0xe00028df, 0x16bfd: 0xe0003705, 0x16bfe: 0xe00028e5, 0x16bff: 0xe000370b, + // Block 0x5b0, offset 0x16c00 + 0x16c00: 0xe0003711, 0x16c01: 0xe000372f, 0x16c02: 0xe000373b, 0x16c03: 0xe00028eb, + 0x16c04: 0xe0003741, 0x16c05: 0xf0001919, 0x16c06: 0xe00028f1, 0x16c07: 0xe000374a, + 0x16c08: 0xf0001919, 0x16c09: 0xf0001919, 0x16c0a: 0xf0001919, 0x16c0b: 0xf0001919, + 0x16c0c: 0xf0001919, 0x16c0d: 0xf0001919, 0x16c0e: 0xe00028fa, 0x16c0f: 0xe0003759, + 0x16c10: 0xe000377a, 0x16c11: 0xe0003795, 0x16c12: 0xe0003798, 0x16c13: 0xe00037a1, + 0x16c14: 0xe00037a7, 0x16c15: 0xe0002903, 0x16c16: 0xe00037b0, 0x16c17: 0xe000155c, + 0x16c18: 0xe0001562, 0x16c19: 0xe0001568, 0x16c1a: 0xe0001571, 0x16c1b: 0xe0001580, + 0x16c1c: 0xf0001717, 0x16c1d: 0xf0001717, 0x16c1e: 0xf0001717, 0x16c1f: 0xf0001717, + 0x16c20: 0xf0001717, 0x16c21: 0xf0001717, 0x16c22: 0xf0001717, 0x16c23: 0xf0001717, + 0x16c24: 0xf0001717, 0x16c25: 0xf0001717, 0x16c26: 0xf0001717, 0x16c27: 0xf0001717, + 0x16c28: 0xf0001717, 0x16c29: 0xf0001717, 0x16c2a: 0xf0001717, 0x16c2b: 0xf0001717, + 0x16c2c: 0xf0001717, 0x16c2d: 0xf0001717, 0x16c2e: 0xf0001717, 0x16c2f: 0xf0001717, + 0x16c30: 0xf0001717, 0x16c31: 0xf0001717, 0x16c32: 0xf0001717, 0x16c33: 0xf0001717, + 0x16c34: 0xf0001717, 0x16c35: 0xf0001717, 0x16c36: 0xf0001717, 0x16c37: 0xf0001717, + 0x16c38: 0xf0001717, 0x16c39: 0xf0001717, 0x16c3a: 0xf0001717, 0x16c3b: 0xf0001717, + 0x16c3c: 0xf0001717, 0x16c3d: 0xf0001717, 0x16c3e: 0xf0001717, 0x16c3f: 0xf0001717, + // Block 0x5b1, offset 0x16c40 + 0x16c40: 0xf0001717, 0x16c41: 0xf0001717, 0x16c42: 0xf0001717, 0x16c43: 0xf0001717, + 0x16c44: 0xe0003717, 0x16c45: 0xe000371d, 0x16c46: 0xe0003723, 0x16c47: 0xe0003729, + 0x16c48: 0xe0003735, 0x16c49: 0xf0001717, 0x16c4a: 0xf0001717, 0x16c4b: 0xf0001717, + 0x16c4c: 0xf0001717, 0x16c4d: 0xf0001717, 0x16c4e: 0xf0001717, 0x16c4f: 0xf0001717, + 0x16c50: 0xf0001717, 0x16c51: 0xf0001717, 0x16c52: 0xf0001717, 0x16c53: 0xf0001717, + 0x16c54: 0xf0001717, 0x16c55: 0xf0001717, 0x16c56: 0xf0001717, 0x16c57: 0xf0001717, + 0x16c58: 0xf0001717, 0x16c59: 0xf0001717, 0x16c5a: 0xe0003783, 0x16c5b: 0xe0003789, + 0x16c5c: 0xe000378f, 0x16c5d: 0xe000379b, 0x16c5e: 0xe00037aa, 0x16c5f: 0xe0001574, + 0x16c60: 0xe0001583, 0x16c61: 0xf0001818, 0x16c62: 0xf0001818, 0x16c63: 0xf0001818, + 0x16c64: 0xf0001818, 0x16c65: 0xf0001818, 0x16c66: 0xf0001818, 0x16c67: 0xf0001818, + 0x16c68: 0xf0001818, 0x16c69: 0xf0001818, 0x16c6a: 0xf0001818, 0x16c6b: 0xe000372c, + 0x16c6c: 0xe0003738, 0x16c6d: 0xf0001818, 0x16c6e: 0xf0001818, 0x16c6f: 0xf0001818, + 0x16c70: 0xe000379e, 0x16c71: 0xe00037ad, 0x16c72: 0xf0001818, 0x16c73: 0xe0003690, + 0x16c74: 0xe0003693, 0x16c75: 0xe00028d0, 0x16c76: 0xe00036f6, 0x16c77: 0xe00028d6, + 0x16c78: 0xe00036fc, 0x16c79: 0xe00028dc, 0x16c7a: 0xe0003702, 0x16c7b: 0xe00028b8, + 0x16c7c: 0xe00036d8, 0x16c7d: 0xe00028be, 0x16c7e: 0xe00036e4, 0x16c7f: 0xe00028ac, + // Block 0x5b2, offset 0x16c80 + 0x16c80: 0xe00036c6, 0x16c81: 0xe00028a6, 0x16c82: 0xe00036c0, 0x16c83: 0xe00028b2, + 0x16c84: 0xe00036cc, 0x16c85: 0xe00028c4, 0x16c86: 0xe00036ea, 0x16c87: 0xe00028ca, + 0x16c88: 0xe00036f0, 0x16c89: 0xf0001a1a, 0x16c8a: 0xf0001a1a, 0x16c8b: 0xf0001a1a, + 0x16c8c: 0xf0001a1a, 0x16c8d: 0xf0001a1a, 0x16c8e: 0xf0001a1a, 0x16c8f: 0xf0001a1a, + 0x16c90: 0xf0001a1a, 0x16c91: 0xe00028cd, 0x16c92: 0xe00036f3, 0x16c93: 0xe00028d3, + 0x16c94: 0xe00036f9, 0x16c95: 0xe00028d9, 0x16c96: 0xe00036ff, 0x16c97: 0xe00028b5, + 0x16c98: 0xe00036d5, 0x16c99: 0xe00028bb, 0x16c9a: 0xe00036e1, 0x16c9b: 0xe00028a9, + 0x16c9c: 0xe00036c3, 0x16c9d: 0xe00028a3, 0x16c9e: 0xe00036bd, 0x16c9f: 0xe00028af, + 0x16ca0: 0xe00036c9, 0x16ca1: 0xe00028c1, 0x16ca2: 0xe00036e7, 0x16ca3: 0xe00028c7, + 0x16ca4: 0xe00036ed, 0x16ca5: 0xf0001919, 0x16ca6: 0xf0001919, 0x16ca7: 0xf0001919, + 0x16ca8: 0xf0001919, 0x16ca9: 0xf0001919, 0x16caa: 0xf0001919, 0x16cab: 0xf0001919, + 0x16cac: 0xf0001919, 0x16cad: 0xf0001717, 0x16cae: 0xf0001717, 0x16caf: 0xf0001717, + 0x16cb0: 0xf0001717, 0x16cb1: 0xf0001717, 0x16cb2: 0xf0001717, 0x16cb3: 0xf0001717, + 0x16cb4: 0xf0001818, 0x16cb5: 0xf0001818, 0x16cb6: 0xf0001818, 0x16cb7: 0xf0001818, + 0x16cb8: 0xf0001818, 0x16cb9: 0xf0001818, 0x16cba: 0xf0001818, 0x16cbb: 0xf0001818, + 0x16cbc: 0xe0003696, 0x16cbd: 0xe0003699, 0x16cbe: 0x4004c020, 0x16cbf: 0x4004c220, + // Block 0x5b3, offset 0x16cc0 + 0x16cc0: 0xa0000000, 0x16cc1: 0xa0000000, 0x16cc2: 0xa0000000, 0x16cc3: 0xa0000000, + 0x16cc4: 0xa0000000, 0x16cc5: 0xa0000000, 0x16cc6: 0xa0000000, 0x16cc7: 0xa0000000, + 0x16cc8: 0xa0000000, 0x16cc9: 0x40020020, 0x16cca: 0x40020220, 0x16ccb: 0x40020420, + 0x16ccc: 0x40020620, 0x16ccd: 0x40020820, 0x16cce: 0xa0000000, 0x16ccf: 0xa0000000, + 0x16cd0: 0xa0000000, 0x16cd1: 0xa0000000, 0x16cd2: 0xa0000000, 0x16cd3: 0xa0000000, + 0x16cd4: 0xa0000000, 0x16cd5: 0xa0000000, 0x16cd6: 0xa0000000, 0x16cd7: 0xa0000000, + 0x16cd8: 0xa0000000, 0x16cd9: 0xa0000000, 0x16cda: 0xa0000000, 0x16cdb: 0xa0000000, + 0x16cdc: 0xa0000000, 0x16cdd: 0xa0000000, 0x16cde: 0xa0000000, 0x16cdf: 0xa0000000, + 0x16ce0: 0x40021220, 0x16ce1: 0x4002ba20, 0x16ce2: 0x4003e020, 0x16ce3: 0x4004ea20, + 0x16ce4: 0x4027de20, 0x16ce5: 0x4004ec20, 0x16ce6: 0x4004e620, 0x16ce7: 0x4003d220, + 0x16ce8: 0x4003f420, 0x16ce9: 0x4003f620, 0x16cea: 0x4004d820, 0x16ceb: 0x40093820, + 0x16cec: 0x40024020, 0x16ced: 0x40021a20, 0x16cee: 0x4002e420, 0x16cef: 0x4004e220, + 0x16cf0: 0x4029cc20, 0x16cf1: 0x4029ce20, 0x16cf2: 0x4029d020, 0x16cf3: 0x4029d220, + 0x16cf4: 0x4029d420, 0x16cf5: 0x4029d620, 0x16cf6: 0x4029d820, 0x16cf7: 0x4029da20, + 0x16cf8: 0x4029dc20, 0x16cf9: 0x4029de20, 0x16cfa: 0x40026c20, 0x16cfb: 0x40026220, + 0x16cfc: 0x40094020, 0x16cfd: 0x40094220, 0x16cfe: 0x40094420, 0x16cff: 0x4002c420, + // Block 0x5b4, offset 0x16d00 + 0x16d00: 0x4004d620, 0x16d01: 0xcead9741, 0x16d02: 0x002c0a88, 0x16d03: 0x002c3a88, + 0x16d04: 0x002c6288, 0x16d05: 0x002c9888, 0x16d06: 0x002d0888, 0x16d07: 0x002d2288, + 0x16d08: 0x002d6888, 0x16d09: 0xc6182741, 0x16d0a: 0x002dcc88, 0x16d0b: 0x002dfe88, + 0x16d0c: 0xc0030002, 0x16d0d: 0x002e8288, 0x16d0e: 0x002e9e88, 0x16d0f: 0x002ee288, + 0x16d10: 0x002f2c88, 0x16d11: 0x002f5688, 0x16d12: 0x002f7a88, 0x16d13: 0xceb39771, + 0x16d14: 0xceb99771, 0x16d15: 0x00306c88, 0x16d16: 0x0030be88, 0x16d17: 0x0030e288, + 0x16d18: 0x0030f688, 0x16d19: 0x00310088, 0x16d1a: 0x00312a88, 0x16d1b: 0x4003f820, + 0x16d1c: 0x4004e420, 0x16d1d: 0x4003fa20, 0x16d1e: 0x40062420, 0x16d1f: 0x40021620, + 0x16d20: 0x40061e20, 0x16d21: 0xceaa9741, 0x16d22: 0x402c0a20, 0x16d23: 0x402c3a20, + 0x16d24: 0x402c6220, 0x16d25: 0x402c9820, 0x16d26: 0x402d0820, 0x16d27: 0x402d2220, + 0x16d28: 0x402d6820, 0x16d29: 0xc6162741, 0x16d2a: 0x402dcc20, 0x16d2b: 0x402dfe20, + 0x16d2c: 0xc0000002, 0x16d2d: 0x402e8220, 0x16d2e: 0x402e9e20, 0x16d2f: 0x402ee220, + 0x16d30: 0x402f2c20, 0x16d31: 0x402f5620, 0x16d32: 0x402f7a20, 0x16d33: 0xceb09771, + 0x16d34: 0xceb69771, 0x16d35: 0x40306c20, 0x16d36: 0x4030be20, 0x16d37: 0x4030e220, + 0x16d38: 0x4030f620, 0x16d39: 0x40310020, 0x16d3a: 0x40312a20, 0x16d3b: 0x4003fc20, + 0x16d3c: 0x40094820, 0x16d3d: 0x4003fe20, 0x16d3e: 0x40094c20, 0x16d3f: 0xa0000000, + // Block 0x5b5, offset 0x16d40 + 0x16d40: 0xe00008f5, 0x16d41: 0xe00008ef, 0x16d42: 0x002be283, 0x16d43: 0xe0000969, + 0x16d44: 0xe000095b, 0x16d45: 0xe000094d, 0x16d46: 0xe00009dd, 0x16d47: 0xe0000a53, + 0x16d48: 0xe0000ae8, 0x16d49: 0xe0000ae2, 0x16d4a: 0xe0000af4, 0x16d4b: 0xe0000b20, + 0x16d4c: 0xe0000c2b, 0x16d4d: 0xe0000c25, 0x16d4e: 0x002d9c83, 0x16d4f: 0xe0000c43, + 0x16d50: 0xe0000ab3, 0x16d51: 0xe0000d63, 0x16d52: 0xe0000d9a, 0x16d53: 0xe0000d94, + 0x16d54: 0xe0000da6, 0x16d55: 0xe0000de6, 0x16d56: 0xe0000dd2, 0x16d57: 0x40093e20, + 0x16d58: 0xe0000e12, 0x16d59: 0xe0000fe1, 0x16d5a: 0xe0000fdb, 0x16d5b: 0xe0000fed, + 0x16d5c: 0xe0000fff, 0x16d5d: 0xe0001102, 0x16d5e: 0x00318888, 0x16d5f: 0xe0000f7b, + 0x16d60: 0xe00008f2, 0x16d61: 0xe00008ec, 0x16d62: 0x402be220, 0x16d63: 0xe0000966, + 0x16d64: 0xe0000958, 0x16d65: 0xe000094a, 0x16d66: 0xe00009d5, 0x16d67: 0xe0000a4d, + 0x16d68: 0xe0000ae5, 0x16d69: 0xe0000adf, 0x16d6a: 0xe0000af1, 0x16d6b: 0xe0000b1d, + 0x16d6c: 0xe0000c28, 0x16d6d: 0xe0000c22, 0x16d6e: 0x402d9c20, 0x16d6f: 0xe0000c40, + 0x16d70: 0xe0000aad, 0x16d71: 0xe0000d60, 0x16d72: 0xe0000d97, 0x16d73: 0xe0000d91, + 0x16d74: 0xe0000da3, 0x16d75: 0xe0000de3, 0x16d76: 0xe0000dcf, 0x16d77: 0x40093c20, + 0x16d78: 0xe0000e0f, 0x16d79: 0xe0000fde, 0x16d7a: 0xe0000fd8, 0x16d7b: 0xe0000fea, + 0x16d7c: 0xe0000ffc, 0x16d7d: 0xe00010ff, 0x16d7e: 0x40318820, 0x16d7f: 0xe0001114, + // Block 0x5b6, offset 0x16d80 + 0x16d80: 0xe0000983, 0x16d81: 0xe0000980, 0x16d82: 0x002be083, 0x16d83: 0x402be020, + 0x16d84: 0xe000097d, 0x16d85: 0xe000097a, 0x16d86: 0xe0000a38, 0x16d87: 0xe0000a35, + 0x16d88: 0xe0000a3e, 0x16d89: 0xe0000a3b, 0x16d8a: 0xe0000a4a, 0x16d8b: 0xe0000a47, + 0x16d8c: 0xe0000a44, 0x16d8d: 0xe0000a41, 0x16d8e: 0xe0000a86, 0x16d8f: 0xe0000a83, + 0x16d90: 0xe0000aaa, 0x16d91: 0xe0000aa7, 0x16d92: 0xe0000b46, 0x16d93: 0xe0000b43, + 0x16d94: 0xe0000aee, 0x16d95: 0xe0000aeb, 0x16d96: 0xe0000b2c, 0x16d97: 0xe0000b29, + 0x16d98: 0xe0000b40, 0x16d99: 0xe0000b3d, 0x16d9a: 0xe0000b1a, 0x16d9b: 0xe0000b17, + 0x16d9c: 0xe0000bb8, 0x16d9d: 0xe0000bb5, 0x16d9e: 0xe0000bb2, 0x16d9f: 0xe0000baf, + 0x16da0: 0xe0000bc4, 0x16da1: 0xe0000bc1, 0x16da2: 0xe0000bca, 0x16da3: 0xe0000bc7, + 0x16da4: 0xe0000bee, 0x16da5: 0xe0000beb, 0x16da6: 0xe0000c1b, 0x16da7: 0xe0000c18, + 0x16da8: 0xe0000c51, 0x16da9: 0xe0000c4e, 0x16daa: 0xe0000c60, 0x16dab: 0xe0000c5d, + 0x16dac: 0xe0000c31, 0x16dad: 0xe0000c2e, 0x16dae: 0xe0000c5a, 0x16daf: 0xe0000c57, + 0x16db0: 0xe0000c54, 0x16db1: 0x402da220, 0x16db2: 0xf0000a0a, 0x16db3: 0xf0000404, + 0x16db4: 0xe0000c8a, 0x16db5: 0xe0000c87, 0x16db6: 0xe0000c9f, 0x16db7: 0xe0000c9c, + 0x16db8: 0x402f7220, 0x16db9: 0xe0000ccc, 0x16dba: 0xe0000cc9, 0x16dbb: 0xe0000cd8, + 0x16dbc: 0xe0000cd5, 0x16dbd: 0xe0000cd2, 0x16dbe: 0xe0000ccf, 0x16dbf: 0xe0000d04, + // Block 0x5b7, offset 0x16dc0 + 0x16dc0: 0xe0000cfe, 0x16dc1: 0xe0000cf8, 0x16dc2: 0xe0000cf5, 0x16dc3: 0xe0000d51, + 0x16dc4: 0xe0000d4e, 0x16dc5: 0xe0000d6f, 0x16dc6: 0xe0000d6c, 0x16dc7: 0xe0000d5d, + 0x16dc8: 0xe0000d5a, 0x16dc9: 0xf0000404, 0x16dca: 0x002eda88, 0x16dcb: 0x402eda20, + 0x16dcc: 0xe0000e2e, 0x16dcd: 0xe0000e2b, 0x16dce: 0xe0000da0, 0x16dcf: 0xe0000d9d, + 0x16dd0: 0xe0000de0, 0x16dd1: 0xe0000ddd, 0x16dd2: 0xe0000e93, 0x16dd3: 0xe0000e8f, + 0x16dd4: 0xe0000eca, 0x16dd5: 0xe0000ec7, 0x16dd6: 0xe0000edc, 0x16dd7: 0xe0000ed9, + 0x16dd8: 0xe0000ed0, 0x16dd9: 0xe0000ecd, 0x16dda: 0xe0000f1f, 0x16ddb: 0xe0000f1c, + 0x16ddc: 0xe0000f2d, 0x16ddd: 0xe0000f2a, 0x16dde: 0x002fe883, 0x16ddf: 0x402fe820, + 0x16de0: 0xe0000f33, 0x16de1: 0xe0000f30, 0x16de2: 0x00302e83, 0x16de3: 0x40302e20, + 0x16de4: 0xe0000f8a, 0x16de5: 0xe0000f87, 0x16de6: 0x00303688, 0x16de7: 0x40303620, + 0x16de8: 0xe000102b, 0x16de9: 0xe0001028, 0x16dea: 0xe000103f, 0x16deb: 0xe000103c, + 0x16dec: 0xe0000fe7, 0x16ded: 0xe0000fe4, 0x16dee: 0xe0000ff9, 0x16def: 0xe0000ff6, + 0x16df0: 0xe0001025, 0x16df1: 0xe0001022, 0x16df2: 0xe0001039, 0x16df3: 0xe0001036, + 0x16df4: 0xe00010d8, 0x16df5: 0xe00010d5, 0x16df6: 0xe000110e, 0x16df7: 0xe000110b, + 0x16df8: 0xe0001117, 0x16df9: 0xe000113b, 0x16dfa: 0xe0001138, 0x16dfb: 0xe000114d, + 0x16dfc: 0xe000114a, 0x16dfd: 0xe0001147, 0x16dfe: 0xe0001144, 0x16dff: 0xe0000f64, + // Block 0x5b8, offset 0x16e00 + 0x16e00: 0xe000098f, 0x16e01: 0xe000098c, 0x16e02: 0xe0000995, 0x16e03: 0xe0000992, + 0x16e04: 0xe0000b62, 0x16e05: 0xe0000b5f, 0x16e06: 0xe0000b68, 0x16e07: 0xe0000b65, + 0x16e08: 0xe0000c6c, 0x16e09: 0xe0000c69, 0x16e0a: 0xe0000c72, 0x16e0b: 0xe0000c6f, + 0x16e0c: 0xe0000e4a, 0x16e0d: 0xe0000e47, 0x16e0e: 0xe0000e50, 0x16e0f: 0xe0000e4d, + 0x16e10: 0xe0000ee8, 0x16e11: 0xe0000ee5, 0x16e12: 0xe0000eee, 0x16e13: 0xe0000eeb, + 0x16e14: 0xe0001053, 0x16e15: 0xe0001050, 0x16e16: 0xe0001059, 0x16e17: 0xe0001056, + 0x16e18: 0x002fe883, 0x16e19: 0x402fe820, 0x16e1a: 0x00302e83, 0x16e1b: 0x40302e20, + 0x16e1c: 0x00312288, 0x16e1d: 0x40312220, 0x16e1e: 0xe0000bf4, 0x16e1f: 0xe0000bf1, + 0x16e20: 0x002ebc88, 0x16e21: 0x402c8c20, 0x16e22: 0x002f2288, 0x16e23: 0x402f2220, + 0x16e24: 0x00314088, 0x16e25: 0x40314020, 0x16e26: 0xe000096f, 0x16e27: 0xe000096c, + 0x16e28: 0xe0000b32, 0x16e29: 0xe0000b2f, 0x16e2a: 0xe0000dd9, 0x16e2b: 0xe0000dd5, + 0x16e2c: 0xe0000dfd, 0x16e2d: 0xe0000df9, 0x16e2e: 0xe0000e04, 0x16e2f: 0xe0000e01, + 0x16e30: 0xe0000e0b, 0x16e31: 0xe0000e07, 0x16e32: 0xe0001129, 0x16e33: 0xe0001126, + 0x16e34: 0x402e5e20, 0x16e35: 0x402ed020, 0x16e36: 0x40305a20, 0x16e37: 0x402dd420, + 0x16e38: 0xe0000abf, 0x16e39: 0xe0000ec4, 0x16e3a: 0x002be888, 0x16e3b: 0x002c4488, + 0x16e3c: 0x402c4420, 0x16e3d: 0x002e3888, 0x16e3e: 0x00303e88, 0x16e3f: 0x402ffc20, + // Block 0x5b9, offset 0x16e40 + 0x16e40: 0xe00010d2, 0x16e41: 0xe00010cf, 0x16e42: 0xe00010cc, 0x16e43: 0xe00010c9, + 0x16e44: 0xe00010e1, 0x16e45: 0xe00010de, 0x16e46: 0xe00010e7, 0x16e47: 0xe00010e4, + 0x16e48: 0xe00010ed, 0x16e49: 0xe00010ea, 0x16e4a: 0xe00010fc, 0x16e4b: 0xe00010f9, + 0x16e4c: 0xe00010f6, 0x16e4d: 0xe00010f3, 0x16e4e: 0xe0001123, 0x16e4f: 0xe0001120, + 0x16e50: 0xe0001141, 0x16e51: 0xe000113e, 0x16e52: 0xe0001153, 0x16e53: 0xe0001150, + 0x16e54: 0xe0001159, 0x16e55: 0xe0001156, 0x16e56: 0xe0000c15, 0x16e57: 0xe0000f8d, + 0x16e58: 0xe00010db, 0x16e59: 0xe0001111, 0x16e5a: 0xf0000404, 0x16e5b: 0xe0000f70, + 0x16e5c: 0x40300420, 0x16e5d: 0x40300620, 0x16e5e: 0xe0000f7f, 0x16e5f: 0x402c9620, + 0x16e60: 0xe000099b, 0x16e61: 0xe0000998, 0x16e62: 0xe0000989, 0x16e63: 0xe0000986, + 0x16e64: 0xe0003934, 0x16e65: 0xe0003931, 0x16e66: 0xe000393a, 0x16e67: 0xe0003937, + 0x16e68: 0xe0003975, 0x16e69: 0xe0003972, 0x16e6a: 0xe0003960, 0x16e6b: 0xe000395d, + 0x16e6c: 0xe0003987, 0x16e6d: 0xe0003984, 0x16e6e: 0xe000388e, 0x16e6f: 0xe000388b, + 0x16e70: 0xe0003894, 0x16e71: 0xe0003891, 0x16e72: 0xe0003908, 0x16e73: 0xe0003905, + 0x16e74: 0xe00038d2, 0x16e75: 0xe00038cf, 0x16e76: 0xe000391a, 0x16e77: 0xe0003917, + 0x16e78: 0xe0000b6e, 0x16e79: 0xe0000b6b, 0x16e7a: 0xe0000b5c, 0x16e7b: 0xe0000b59, + 0x16e7c: 0xe0000b26, 0x16e7d: 0xe0000b23, 0x16e7e: 0xe0000afb, 0x16e7f: 0xe0000af7, + // Block 0x5ba, offset 0x16e80 + 0x16e80: 0xa0000000, 0x16e81: 0xa0000000, 0x16e82: 0xa0000000, 0x16e83: 0xa0000000, + 0x16e84: 0xa0000000, 0x16e85: 0xa0000000, 0x16e86: 0xa0000000, 0x16e87: 0xa0000000, + 0x16e88: 0xa0000000, 0x16e89: 0x40020020, 0x16e8a: 0x40020220, 0x16e8b: 0x40020420, + 0x16e8c: 0x40020620, 0x16e8d: 0x40020820, 0x16e8e: 0xa0000000, 0x16e8f: 0xa0000000, + 0x16e90: 0xa0000000, 0x16e91: 0xa0000000, 0x16e92: 0xa0000000, 0x16e93: 0xa0000000, + 0x16e94: 0xa0000000, 0x16e95: 0xa0000000, 0x16e96: 0xa0000000, 0x16e97: 0xa0000000, + 0x16e98: 0xa0000000, 0x16e99: 0xa0000000, 0x16e9a: 0xa0000000, 0x16e9b: 0xa0000000, + 0x16e9c: 0xa0000000, 0x16e9d: 0xa0000000, 0x16e9e: 0xa0000000, 0x16e9f: 0xa0000000, + 0x16ea0: 0x40021220, 0x16ea1: 0x4002ba20, 0x16ea2: 0x4003e020, 0x16ea3: 0x4004ea20, + 0x16ea4: 0x4027de20, 0x16ea5: 0x4004ec20, 0x16ea6: 0x4004e620, 0x16ea7: 0x4003d220, + 0x16ea8: 0x4003f420, 0x16ea9: 0x4003f620, 0x16eaa: 0x4004d820, 0x16eab: 0x40093820, + 0x16eac: 0x40024020, 0x16ead: 0x40021a20, 0x16eae: 0x4002e420, 0x16eaf: 0x4004e220, + 0x16eb0: 0x4029cc20, 0x16eb1: 0x4029ce20, 0x16eb2: 0x4029d020, 0x16eb3: 0x4029d220, + 0x16eb4: 0x4029d420, 0x16eb5: 0x4029d620, 0x16eb6: 0x4029d820, 0x16eb7: 0x4029da20, + 0x16eb8: 0x4029dc20, 0x16eb9: 0x4029de20, 0x16eba: 0x40026c20, 0x16ebb: 0x40026220, + 0x16ebc: 0x40094020, 0x16ebd: 0x40094220, 0x16ebe: 0x40094420, 0x16ebf: 0x4002c420, + // Block 0x5bb, offset 0x16ec0 + 0x16ec0: 0x4004d620, 0x16ec1: 0xcec29791, 0x16ec2: 0x002c0a88, 0x16ec3: 0xceca0991, + 0x16ec4: 0x002c6288, 0x16ec5: 0x002c9888, 0x16ec6: 0x002d0888, 0x16ec7: 0xced20991, + 0x16ec8: 0x002d6888, 0x16ec9: 0x002d9a88, 0x16eca: 0x002dcc88, 0x16ecb: 0xcb1f0991, + 0x16ecc: 0xc0030002, 0x16ecd: 0x002e8288, 0x16ece: 0xced797e1, 0x16ecf: 0xcee49811, + 0x16ed0: 0x002f2c88, 0x16ed1: 0x002f5688, 0x16ed2: 0x002f7a88, 0x16ed3: 0xcb330991, + 0x16ed4: 0x00302c88, 0x16ed5: 0xc3900b21, 0x16ed6: 0x0030be88, 0x16ed7: 0x0030e288, + 0x16ed8: 0x0030f688, 0x16ed9: 0x00310088, 0x16eda: 0xcedc0991, 0x16edb: 0x4003f820, + 0x16edc: 0x4004e420, 0x16edd: 0x4003fa20, 0x16ede: 0x40062420, 0x16edf: 0x40021620, + 0x16ee0: 0x40061e20, 0x16ee1: 0xcebc9791, 0x16ee2: 0x402c0a20, 0x16ee3: 0xcec80991, + 0x16ee4: 0x402c6220, 0x16ee5: 0x402c9820, 0x16ee6: 0x402d0820, 0x16ee7: 0xced00991, + 0x16ee8: 0x402d6820, 0x16ee9: 0x402d9a20, 0x16eea: 0x402dcc20, 0x16eeb: 0xcb1d0991, + 0x16eec: 0xc0000002, 0x16eed: 0x402e8220, 0x16eee: 0xced497e1, 0x16eef: 0xcede9811, + 0x16ef0: 0x402f2c20, 0x16ef1: 0x402f5620, 0x16ef2: 0x402f7a20, 0x16ef3: 0xcb310991, + 0x16ef4: 0x40302c20, 0x16ef5: 0xc38d0b21, 0x16ef6: 0x4030be20, 0x16ef7: 0x4030e220, + 0x16ef8: 0x4030f620, 0x16ef9: 0x40310020, 0x16efa: 0xceda0991, 0x16efb: 0x4003fc20, + 0x16efc: 0x40094820, 0x16efd: 0x4003fe20, 0x16efe: 0x40094c20, 0x16eff: 0xa0000000, + // Block 0x5bc, offset 0x16f00 + 0x16f00: 0xe00008f5, 0x16f01: 0x002c0883, 0x16f02: 0xe0000921, 0x16f03: 0x00320ea3, + 0x16f04: 0x00320e83, 0x16f05: 0x00320c83, 0x16f06: 0x00320a83, 0x16f07: 0xe0000a53, + 0x16f08: 0xe0000ae8, 0x16f09: 0xe0000ae2, 0x16f0a: 0xe0000af4, 0x16f0b: 0xe0000b20, + 0x16f0c: 0xe0000c2b, 0x16f0d: 0xe0000c25, 0x16f0e: 0xe0000c37, 0x16f0f: 0xe0000c43, + 0x16f10: 0x002c96a3, 0x16f11: 0x002ee0c3, 0x16f12: 0xe0000d9a, 0x16f13: 0xe0000d94, + 0x16f14: 0x003210e3, 0x16f15: 0x003210c3, 0x16f16: 0x00321083, 0x16f17: 0x40093e20, + 0x16f18: 0x00320883, 0x16f19: 0xe0000fe1, 0x16f1a: 0xe0000fdb, 0x16f1b: 0xe0000fed, + 0x16f1c: 0x003100a3, 0x16f1d: 0xe0001102, 0x16f1e: 0x00306aa3, 0x16f1f: 0xe0000f7b, + 0x16f20: 0xe00008f2, 0x16f21: 0x402c0820, 0x16f22: 0xe000091e, 0x16f23: 0x40320e21, + 0x16f24: 0x40320e20, 0x16f25: 0x40320c20, 0x16f26: 0x40320a20, 0x16f27: 0xe0000a4d, + 0x16f28: 0xe0000ae5, 0x16f29: 0xe0000adf, 0x16f2a: 0xe0000af1, 0x16f2b: 0xe0000b1d, + 0x16f2c: 0xe0000c28, 0x16f2d: 0xe0000c22, 0x16f2e: 0xe0000c34, 0x16f2f: 0xe0000c40, + 0x16f30: 0x402c9621, 0x16f31: 0x402ee022, 0x16f32: 0xe0000d97, 0x16f33: 0xe0000d91, + 0x16f34: 0x40321023, 0x16f35: 0x40321022, 0x16f36: 0x40321020, 0x16f37: 0x40093c20, + 0x16f38: 0x40320820, 0x16f39: 0xe0000fde, 0x16f3a: 0xe0000fd8, 0x16f3b: 0xe0000fea, + 0x16f3c: 0x40310021, 0x16f3d: 0xe00010ff, 0x16f3e: 0x40306a21, 0x16f3f: 0xe0001114, + // Block 0x5bd, offset 0x16f40 + 0x16f40: 0xe0000983, 0x16f41: 0xe0000980, 0x16f42: 0xe00008fb, 0x16f43: 0xe00008f8, + 0x16f44: 0xe000097d, 0x16f45: 0xe000097a, 0x16f46: 0xe0000a38, 0x16f47: 0xe0000a35, + 0x16f48: 0xe0000a3e, 0x16f49: 0xe0000a3b, 0x16f4a: 0xe0000a4a, 0x16f4b: 0xe0000a47, + 0x16f4c: 0x002c5c83, 0x16f4d: 0x402c5c20, 0x16f4e: 0xe0000a86, 0x16f4f: 0xe0000a83, + 0x16f50: 0x002c9683, 0x16f51: 0x402c9620, 0x16f52: 0xe0000b46, 0x16f53: 0xe0000b43, + 0x16f54: 0xe0000aee, 0x16f55: 0xe0000aeb, 0x16f56: 0xe0000b2c, 0x16f57: 0xe0000b29, + 0x16f58: 0xe0000b40, 0x16f59: 0xe0000b3d, 0x16f5a: 0xe0000b1a, 0x16f5b: 0xe0000b17, + 0x16f5c: 0xe0000bb8, 0x16f5d: 0xe0000bb5, 0x16f5e: 0xe0000bb2, 0x16f5f: 0xe0000baf, + 0x16f60: 0xe0000bc4, 0x16f61: 0xe0000bc1, 0x16f62: 0xe0000bca, 0x16f63: 0xe0000bc7, + 0x16f64: 0xe0000bee, 0x16f65: 0xe0000beb, 0x16f66: 0xe0000c1b, 0x16f67: 0xe0000c18, + 0x16f68: 0xe0000c51, 0x16f69: 0xe0000c4e, 0x16f6a: 0xe0000c60, 0x16f6b: 0xe0000c5d, + 0x16f6c: 0xe0000c31, 0x16f6d: 0xe0000c2e, 0x16f6e: 0xe0000c5a, 0x16f6f: 0xe0000c57, + 0x16f70: 0xe0000c54, 0x16f71: 0x402da220, 0x16f72: 0xf0000a0a, 0x16f73: 0xf0000404, + 0x16f74: 0xe0000c8a, 0x16f75: 0xe0000c87, 0x16f76: 0xe0000c9f, 0x16f77: 0xe0000c9c, + 0x16f78: 0x402f7220, 0x16f79: 0xe0000ccc, 0x16f7a: 0xe0000cc9, 0x16f7b: 0xe0000cd8, + 0x16f7c: 0xe0000cd5, 0x16f7d: 0xe0000cd2, 0x16f7e: 0xe0000ccf, 0x16f7f: 0xe0000d04, + // Block 0x5be, offset 0x16f80 + 0x16f80: 0xe0000cfe, 0x16f81: 0xe0000cf8, 0x16f82: 0xe0000cf5, 0x16f83: 0x002ee0a3, + 0x16f84: 0x402ee021, 0x16f85: 0xe0000d6f, 0x16f86: 0xe0000d6c, 0x16f87: 0xe0000d5d, + 0x16f88: 0xe0000d5a, 0x16f89: 0xf0000404, 0x16f8a: 0x002ee083, 0x16f8b: 0x402ee020, + 0x16f8c: 0xe0000e2e, 0x16f8d: 0xe0000e2b, 0x16f8e: 0xe0000da0, 0x16f8f: 0xe0000d9d, + 0x16f90: 0x003210a3, 0x16f91: 0x40321021, 0x16f92: 0x003208a3, 0x16f93: 0x40320821, + 0x16f94: 0xe0000eca, 0x16f95: 0xe0000ec7, 0x16f96: 0xe0000edc, 0x16f97: 0xe0000ed9, + 0x16f98: 0xe0000ed0, 0x16f99: 0xe0000ecd, 0x16f9a: 0xe0000f1f, 0x16f9b: 0xe0000f1c, + 0x16f9c: 0xe0000f2d, 0x16f9d: 0xe0000f2a, 0x16f9e: 0xe0000f47, 0x16f9f: 0xe0000f44, + 0x16fa0: 0x00302a83, 0x16fa1: 0x40302a20, 0x16fa2: 0xe0000f99, 0x16fa3: 0xe0000f96, + 0x16fa4: 0xe0000f8a, 0x16fa5: 0xe0000f87, 0x16fa6: 0x00306a83, 0x16fa7: 0x40306a20, + 0x16fa8: 0xe000102b, 0x16fa9: 0xe0001028, 0x16faa: 0xe000103f, 0x16fab: 0xe000103c, + 0x16fac: 0xe0000fe7, 0x16fad: 0xe0000fe4, 0x16fae: 0xe0000ff9, 0x16faf: 0xe0000ff6, + 0x16fb0: 0x003100c3, 0x16fb1: 0x40310022, 0x16fb2: 0xe0001039, 0x16fb3: 0xe0001036, + 0x16fb4: 0xe00010d8, 0x16fb5: 0xe00010d5, 0x16fb6: 0xe000110e, 0x16fb7: 0xe000110b, + 0x16fb8: 0xe0001117, 0x16fb9: 0xe000113b, 0x16fba: 0xe0001138, 0x16fbb: 0xe000114d, + 0x16fbc: 0xe000114a, 0x16fbd: 0x00320683, 0x16fbe: 0x40320620, 0x16fbf: 0xe0000f64, + // Block 0x5bf, offset 0x16fc0 + 0x16fc0: 0x402c1a20, 0x16fc1: 0x002c2a88, 0x16fc2: 0x002c3288, 0x16fc3: 0x402c3220, + 0x16fc4: 0x0031c488, 0x16fc5: 0x4031c420, 0x16fc6: 0x002efa88, 0x16fc7: 0x002c4e88, + 0x16fc8: 0x402c4e20, 0x16fc9: 0x002c7288, 0x16fca: 0x002c7a88, 0x16fcb: 0x002c8488, + 0x16fcc: 0x402c8420, 0x16fcd: 0xe000115c, 0x16fce: 0x002cae88, 0x16fcf: 0x002cb888, + 0x16fd0: 0x002cc288, 0x16fd1: 0x002d1688, 0x16fd2: 0x402d1620, 0x16fd3: 0x002d4488, + 0x16fd4: 0x002d5888, 0x16fd5: 0x402d7820, 0x16fd6: 0x002dc288, 0x16fd7: 0x002db688, + 0x16fd8: 0x002e0a88, 0x16fd9: 0x402e0a20, 0x16fda: 0x402e3820, 0x16fdb: 0x402e7220, + 0x16fdc: 0x0030a088, 0x16fdd: 0x002eb488, 0x16fde: 0x402ebc20, 0x16fdf: 0x002f1088, + 0x16fe0: 0xe0000e56, 0x16fe1: 0xe0000e53, 0x16fe2: 0x002d6088, 0x16fe3: 0x402d6020, + 0x16fe4: 0x002f3e88, 0x16fe5: 0x402f3e20, 0x16fe6: 0x002f8288, 0x16fe7: 0x0031b488, + 0x16fe8: 0x4031b420, 0x16fe9: 0x00300888, 0x16fea: 0x40301220, 0x16feb: 0x40304220, + 0x16fec: 0x00304a88, 0x16fed: 0x40304a20, 0x16fee: 0x00305288, 0x16fef: 0xe000105f, + 0x16ff0: 0xe000105c, 0x16ff1: 0x0030b488, 0x16ff2: 0x0030cc88, 0x16ff3: 0x00311888, + 0x16ff4: 0x40311820, 0x16ff5: 0x00313488, 0x16ff6: 0x40313420, 0x16ff7: 0xcece0991, + 0x16ff8: 0x00316e88, 0x16ff9: 0x40316e20, 0x16ffa: 0x40317820, 0x16ffb: 0x4031a620, + 0x16ffc: 0x0031bc88, 0x16ffd: 0x4031bc20, 0x16ffe: 0xe0000fc9, 0x16fff: 0x40319420, + // Block 0x5c0, offset 0x17000 + 0x17000: 0x40321220, 0x17001: 0x40321a20, 0x17002: 0x40322220, 0x17003: 0x40322a20, + 0x17004: 0xe0000ad5, 0x17005: 0xe0000ad1, 0x17006: 0xe0000acd, 0x17007: 0xf0000a0a, + 0x17008: 0xf000040a, 0x17009: 0xf0000404, 0x1700a: 0xf0000a0a, 0x1700b: 0xf000040a, + 0x1700c: 0xf0000404, 0x1700d: 0xe0000947, 0x1700e: 0xe0000944, 0x1700f: 0xe0000c3d, + 0x17010: 0xe0000c3a, 0x17011: 0xe0000dcc, 0x17012: 0xe0000dc9, 0x17013: 0xe0000ff3, + 0x17014: 0xe0000ff0, 0x17015: 0xe000298b, 0x17016: 0xe0002988, 0x17017: 0xe0002979, + 0x17018: 0xe0002976, 0x17019: 0xe0002985, 0x1701a: 0xe0002982, 0x1701b: 0xe000297f, + 0x1701c: 0xe000297c, 0x1701d: 0x402cae20, 0x1701e: 0xe00037e8, 0x1701f: 0xe00037e5, + 0x17020: 0xe000299d, 0x17021: 0xe000299a, 0x17022: 0xe000ad9e, 0x17023: 0xe000ad9b, + 0x17024: 0x002d6683, 0x17025: 0x402d6620, 0x17026: 0x002d6483, 0x17027: 0x402d6420, + 0x17028: 0x002e2083, 0x17029: 0x402e2020, 0x1702a: 0x00321103, 0x1702b: 0x40321024, + 0x1702c: 0xe000ade0, 0x1702d: 0xe000addd, 0x1702e: 0x002c6083, 0x1702f: 0x402c6020, + 0x17030: 0xe0000c8d, 0x17031: 0xf0000a0a, 0x17032: 0xf000040a, 0x17033: 0xf0000404, + 0x17034: 0xe0000bac, 0x17035: 0xe0000ba9, 0x17036: 0x002d7888, 0x17037: 0x00319488, + 0x17038: 0xe0000d57, 0x17039: 0xe0000d54, 0x1703a: 0xe0002991, 0x1703b: 0xe000298e, + 0x1703c: 0xe000ad98, 0x1703d: 0xe000ad95, 0x1703e: 0xe000ad92, 0x1703f: 0xe000ad8f, + // Block 0x5c1, offset 0x17040 + 0x17040: 0xe000098f, 0x17041: 0xe000098c, 0x17042: 0xe0000995, 0x17043: 0xe0000992, + 0x17044: 0xe0000b62, 0x17045: 0xe0000b5f, 0x17046: 0xe0000b68, 0x17047: 0xe0000b65, + 0x17048: 0xe0000c6c, 0x17049: 0xe0000c69, 0x1704a: 0xe0000c72, 0x1704b: 0xe0000c6f, + 0x1704c: 0xe0000e4a, 0x1704d: 0xe0000e47, 0x1704e: 0xe0000e50, 0x1704f: 0xe0000e4d, + 0x17050: 0xe0000ee8, 0x17051: 0xe0000ee5, 0x17052: 0xe0000eee, 0x17053: 0xe0000eeb, + 0x17054: 0xe0001053, 0x17055: 0xe0001050, 0x17056: 0xe0001059, 0x17057: 0xe0001056, + 0x17058: 0xe0000f61, 0x17059: 0xe0000f5e, 0x1705a: 0xe0000fa5, 0x1705b: 0xe0000fa2, + 0x1705c: 0x00312288, 0x1705d: 0x40312220, 0x1705e: 0xe0000bf4, 0x1705f: 0xe0000bf1, + 0x17060: 0x002ebc88, 0x17061: 0x402c8c20, 0x17062: 0x002f2288, 0x17063: 0x402f2220, + 0x17064: 0x00314088, 0x17065: 0x40314020, 0x17066: 0x00320ca3, 0x17067: 0x40320c21, + 0x17068: 0xe0000b32, 0x17069: 0xe0000b2f, 0x1706a: 0xe00037fa, 0x1706b: 0xe00037f7, + 0x1706c: 0xe000adbc, 0x1706d: 0xe000adb9, 0x1706e: 0xe0000e04, 0x1706f: 0xe0000e01, + 0x17070: 0xe0000e0b, 0x17071: 0xe0000e07, 0x17072: 0xe0001129, 0x17073: 0xe0001126, + 0x17074: 0x402e5e20, 0x17075: 0x402ed020, 0x17076: 0x40305a20, 0x17077: 0x402dd420, + 0x17078: 0xe0000abf, 0x17079: 0xe0000ec4, 0x1707a: 0x002be888, 0x1707b: 0x002c4488, + 0x1707c: 0x402c4420, 0x1707d: 0x002e3888, 0x1707e: 0x00303e88, 0x1707f: 0x402ffc20, + // Block 0x5c2, offset 0x17080 + 0x17080: 0x402f8220, 0x17081: 0x402fd820, 0x17082: 0x402ff420, 0x17083: 0x40300820, + 0x17084: 0x402df620, 0x17085: 0x40301a20, 0x17086: 0x40302420, 0x17087: 0x40306420, + 0x17088: 0x40305220, 0x17089: 0x40307c20, 0x1708a: 0x4030b420, 0x1708b: 0x4030cc20, + 0x1708c: 0x4030da20, 0x1708d: 0x4030ee20, 0x1708e: 0x402e7a20, 0x1708f: 0x40310820, + 0x17090: 0x40314820, 0x17091: 0x40315020, 0x17092: 0xcecc0991, 0x17093: 0x40318020, + 0x17094: 0x4031cc20, 0x17095: 0x4031e820, 0x17096: 0x40320a20, 0x17097: 0x40323220, + 0x17098: 0x40323a20, 0x17099: 0x402c1220, 0x1709a: 0x402cf820, 0x1709b: 0x402d4c20, + 0x1709c: 0x402d7020, 0x1709d: 0x402de620, 0x1709e: 0x402e1a20, 0x1709f: 0x402e2a20, + 0x170a0: 0x402f6220, 0x170a1: 0x4031fa20, 0x170a2: 0x40320220, 0x170a3: 0xe0000aca, + 0x170a4: 0xe0000adc, 0x170a5: 0xe0000ad9, 0x170a6: 0xe0000fcc, 0x170a7: 0xe0000fcf, + 0x170a8: 0xe0000fba, 0x170a9: 0xe0000ba1, 0x170aa: 0xe0000d11, 0x170ab: 0xe0000d18, + 0x170ac: 0x40324220, 0x170ad: 0x40324a20, 0x170ae: 0x40309020, 0x170af: 0x40309820, + 0x170b0: 0x002d6894, 0x170b1: 0x002d8094, 0x170b2: 0x002dcc94, 0x170b3: 0x002f7a94, + 0x170b4: 0x002f9894, 0x170b5: 0x002fac94, 0x170b6: 0x002fd894, 0x170b7: 0x0030e294, + 0x170b8: 0x00310094, 0x170b9: 0x40064020, 0x170ba: 0x40064420, 0x170bb: 0x402d9620, + 0x170bc: 0x4031de20, 0x170bd: 0x402d9820, 0x170be: 0x4031e220, 0x170bf: 0x4031f020, + // Block 0x5c3, offset 0x170c0 + 0x170c0: 0xe0000d24, 0x170c1: 0xe0000d21, 0x170c2: 0xe0000d2a, 0x170c3: 0xe0000d27, + 0x170c4: 0xe0000d69, 0x170c5: 0xe0000d66, 0x170c6: 0xe0000d7b, 0x170c7: 0xe0000d78, + 0x170c8: 0xe0000d87, 0x170c9: 0xe0000d84, 0x170ca: 0xe0000d81, 0x170cb: 0xe0000d7e, + 0x170cc: 0xe000adb0, 0x170cd: 0xe000adad, 0x170ce: 0xe000adb6, 0x170cf: 0xe000adb3, + 0x170d0: 0xe0000e3d, 0x170d1: 0xe0000e39, 0x170d2: 0xe0000e35, 0x170d3: 0xe0000e31, + 0x170d4: 0xe0000ea7, 0x170d5: 0xe0000ea4, 0x170d6: 0xe0000ead, 0x170d7: 0xe0000eaa, + 0x170d8: 0xe0000ed6, 0x170d9: 0xe0000ed3, 0x170da: 0xe0000ef4, 0x170db: 0xe0000ef1, + 0x170dc: 0xe0000efb, 0x170dd: 0xe0000ef7, 0x170de: 0xe0000f02, 0x170df: 0xe0000eff, + 0x170e0: 0xe0000f41, 0x170e1: 0xe0000f3e, 0x170e2: 0xe0000f53, 0x170e3: 0xe0000f50, + 0x170e4: 0xe0000f26, 0x170e5: 0xe0000f22, 0x170e6: 0xe000a9d9, 0x170e7: 0xe000a9d6, + 0x170e8: 0xe0000f5a, 0x170e9: 0xe0000f56, 0x170ea: 0xe0000f93, 0x170eb: 0xe0000f90, + 0x170ec: 0xe0000f9f, 0x170ed: 0xe0000f9c, 0x170ee: 0xe0000fb1, 0x170ef: 0xe0000fae, + 0x170f0: 0xe0000fab, 0x170f1: 0xe0000fa8, 0x170f2: 0xe0001093, 0x170f3: 0xe0001090, + 0x170f4: 0xe000109f, 0x170f5: 0xe000109c, 0x170f6: 0xe0001099, 0x170f7: 0xe0001096, + 0x170f8: 0xe0001032, 0x170f9: 0xe000102e, 0x170fa: 0xe000298b, 0x170fb: 0xe0002988, + 0x170fc: 0xe00010a9, 0x170fd: 0xe00010a6, 0x170fe: 0xe00010af, 0x170ff: 0xe00010ac, + // Block 0x5c4, offset 0x17100 + 0x17100: 0xe00010d2, 0x17101: 0xe00010cf, 0x17102: 0xe00010cc, 0x17103: 0xe00010c9, + 0x17104: 0xe00010e1, 0x17105: 0xe00010de, 0x17106: 0xe00010e7, 0x17107: 0xe00010e4, + 0x17108: 0xe00010ed, 0x17109: 0xe00010ea, 0x1710a: 0xe00010fc, 0x1710b: 0xe00010f9, + 0x1710c: 0xe00010f6, 0x1710d: 0xe00010f3, 0x1710e: 0xe0001123, 0x1710f: 0xe0001120, + 0x17110: 0xe0001141, 0x17111: 0xe000113e, 0x17112: 0xe0001153, 0x17113: 0xe0001150, + 0x17114: 0xe0001159, 0x17115: 0xe0001156, 0x17116: 0xe0000c15, 0x17117: 0xe0000f8d, + 0x17118: 0xe00010db, 0x17119: 0xe0001111, 0x1711a: 0xf0000404, 0x1711b: 0xe0000f70, + 0x1711c: 0x40300420, 0x1711d: 0x40300620, 0x1711e: 0xe0000f7f, 0x1711f: 0x402c9620, + 0x17120: 0xe000099b, 0x17121: 0xe0000998, 0x17122: 0xe0000989, 0x17123: 0xe0000986, + 0x17124: 0xe0003cae, 0x17125: 0xe0003cab, 0x17126: 0xe0000930, 0x17127: 0xe000092c, + 0x17128: 0xe0000940, 0x17129: 0xe000093c, 0x1712a: 0xe000adaa, 0x1712b: 0xe000ada7, + 0x1712c: 0xe00009aa, 0x1712d: 0xe00009a6, 0x1712e: 0xe0003ca8, 0x1712f: 0xe0003ca5, + 0x17130: 0xe000090a, 0x17131: 0xe0000906, 0x17132: 0xe000091a, 0x17133: 0xe0000916, + 0x17134: 0xe000ada4, 0x17135: 0xe000ada1, 0x17136: 0xe00009a2, 0x17137: 0xe000099e, + 0x17138: 0xe0000b6e, 0x17139: 0xe0000b6b, 0x1713a: 0xe0000b5c, 0x1713b: 0xe0000b59, + 0x1713c: 0xe0000b26, 0x1713d: 0xe0000b23, 0x1713e: 0xe0000afb, 0x1713f: 0xe0000af7, + // Block 0x5c5, offset 0x17140 + 0x17140: 0xe0000b03, 0x17141: 0xe0000aff, 0x17142: 0xe0000b13, 0x17143: 0xe0000b0f, + 0x17144: 0xe0000b0b, 0x17145: 0xe0000b07, 0x17146: 0xe0000b75, 0x17147: 0xe0000b71, + 0x17148: 0xe0000c66, 0x17149: 0xe0000c63, 0x1714a: 0xe0000c78, 0x1714b: 0xe0000c75, + 0x1714c: 0xe0000e84, 0x1714d: 0xe0000e81, 0x1714e: 0xe0000e44, 0x1714f: 0xe0000e41, + 0x17150: 0xe000380c, 0x17151: 0xe0003809, 0x17152: 0xe000adc8, 0x17153: 0xe000adc5, + 0x17154: 0xe000add4, 0x17155: 0xe000add1, 0x17156: 0xe000adce, 0x17157: 0xe000adcb, + 0x17158: 0xe000adda, 0x17159: 0xe000add7, 0x1715a: 0xe0000e5d, 0x1715b: 0xe0000e59, + 0x1715c: 0xe0000e65, 0x1715d: 0xe0000e61, 0x1715e: 0xe0000e75, 0x1715f: 0xe0000e71, + 0x17160: 0xe000adc2, 0x17161: 0xe000adbf, 0x17162: 0xe0000e7d, 0x17163: 0xe0000e79, + 0x17164: 0xe000108d, 0x17165: 0xe000108a, 0x17166: 0xe000104d, 0x17167: 0xe000104a, + 0x17168: 0xe0001066, 0x17169: 0xe0001062, 0x1716a: 0xe000106e, 0x1716b: 0xe000106a, + 0x1716c: 0xe000107e, 0x1716d: 0xe000107a, 0x1716e: 0xe0001076, 0x1716f: 0xe0001072, + 0x17170: 0xe0001086, 0x17171: 0xe0001082, 0x17172: 0xe0001108, 0x17173: 0xe0001105, + 0x17174: 0xe0001135, 0x17175: 0xe0001132, 0x17176: 0xe000112f, 0x17177: 0xe000112c, + 0x17178: 0xe000111d, 0x17179: 0xe000111a, 0x1717a: 0xe0000d0a, 0x1717b: 0xe0000d07, + 0x1717c: 0x0030d888, 0x1717d: 0x4030d820, 0x1717e: 0x00312088, 0x1717f: 0x40312020, + // Block 0x5c6, offset 0x17180 + 0x17182: 0x4044b620, 0x17183: 0x4044b820, + 0x17185: 0x40449220, 0x17186: 0x40449420, 0x17187: 0x40449620, + 0x17188: 0x40449820, 0x17189: 0x40449a20, 0x1718a: 0x40449c20, 0x1718b: 0x40449e20, + 0x1718c: 0x4044a020, 0x1718d: 0x4044a220, 0x1718e: 0x4044a420, 0x1718f: 0x4044a620, + 0x17190: 0x4044a820, 0x17191: 0x4044aa20, 0x17192: 0x4044ac20, 0x17193: 0x4044ae20, + 0x17194: 0x4044b020, 0x17195: 0x4044b220, 0x17196: 0x4044b420, + 0x1719a: 0x4044b620, 0x1719b: 0x4044b820, + 0x1719c: 0x4044ba20, 0x1719d: 0x4044bc20, 0x1719e: 0x4044be20, 0x1719f: 0x4044c020, + 0x171a0: 0x4044c220, 0x171a1: 0x4044c420, 0x171a2: 0x4044c620, 0x171a3: 0x4044c820, + 0x171a4: 0x4044ce20, 0x171a5: 0x4044cc20, 0x171a6: 0x4044ce20, 0x171a7: 0x4044d020, + 0x171a8: 0x4044d220, 0x171a9: 0x4044d420, 0x171aa: 0x4044d620, 0x171ab: 0x4044d820, + 0x171ac: 0x4044da20, 0x171ad: 0x4044dc20, 0x171ae: 0x4044de20, 0x171af: 0x4044e020, + 0x171b0: 0x4044e220, 0x171b1: 0x4044e420, 0x171b3: 0x4044e620, + 0x171b4: 0x4044e820, 0x171b5: 0x4044ea20, 0x171b6: 0x4044ec20, 0x171b7: 0x4044ee20, + 0x171b8: 0x4044f020, 0x171b9: 0x4044f220, 0x171ba: 0x4044f420, 0x171bb: 0x4044f620, + 0x171bd: 0x4044f820, + // Block 0x5c7, offset 0x171c0 + 0x171c0: 0xa0000000, 0x171c1: 0xa0000000, 0x171c2: 0xa0000000, 0x171c3: 0xa0000000, + 0x171c4: 0xa0000000, 0x171c5: 0xa0000000, 0x171c6: 0xa0000000, 0x171c7: 0xa0000000, + 0x171c8: 0xa0000000, 0x171c9: 0x40020020, 0x171ca: 0x40020220, 0x171cb: 0x40020420, + 0x171cc: 0x40020620, 0x171cd: 0x40020820, 0x171ce: 0xa0000000, 0x171cf: 0xa0000000, + 0x171d0: 0xa0000000, 0x171d1: 0xa0000000, 0x171d2: 0xa0000000, 0x171d3: 0xa0000000, + 0x171d4: 0xa0000000, 0x171d5: 0xa0000000, 0x171d6: 0xa0000000, 0x171d7: 0xa0000000, + 0x171d8: 0xa0000000, 0x171d9: 0xa0000000, 0x171da: 0xa0000000, 0x171db: 0xa0000000, + 0x171dc: 0xa0000000, 0x171dd: 0xa0000000, 0x171de: 0xa0000000, 0x171df: 0xa0000000, + 0x171e0: 0x40021220, 0x171e1: 0x4002ba20, 0x171e2: 0x4003e020, 0x171e3: 0x4004ea20, + 0x171e4: 0x4027de20, 0x171e5: 0x4004ec20, 0x171e6: 0x4004e620, 0x171e7: 0x4003d220, + 0x171e8: 0x4003f420, 0x171e9: 0x4003f620, 0x171ea: 0x4004d820, 0x171eb: 0x40093820, + 0x171ec: 0x40024020, 0x171ed: 0x40021a20, 0x171ee: 0x4002e420, 0x171ef: 0x4004e220, + 0x171f0: 0x4029cc20, 0x171f1: 0x4029ce20, 0x171f2: 0x4029d020, 0x171f3: 0x4029d220, + 0x171f4: 0x4029d420, 0x171f5: 0x4029d620, 0x171f6: 0x4029d820, 0x171f7: 0x4029da20, + 0x171f8: 0x4029dc20, 0x171f9: 0x4029de20, 0x171fa: 0x40026c20, 0x171fb: 0x40026220, + 0x171fc: 0x40094020, 0x171fd: 0x40094220, 0x171fe: 0x40094420, 0x171ff: 0x4002c420, + // Block 0x5c8, offset 0x17200 + 0x17200: 0x4004d620, 0x17201: 0xce900071, 0x17202: 0x002c0a88, 0x17203: 0xc3590953, + 0x17204: 0x002c6288, 0x17205: 0x002c9888, 0x17206: 0x002d0888, 0x17207: 0x002d2288, + 0x17208: 0x002d6888, 0x17209: 0x002d9a88, 0x1720a: 0x002dcc88, 0x1720b: 0x002dfe88, + 0x1720c: 0xc0030002, 0x1720d: 0x002e8288, 0x1720e: 0x002e9e88, 0x1720f: 0xc33f2741, + 0x17210: 0x002f2c88, 0x17211: 0x002f5688, 0x17212: 0xc35f0991, 0x17213: 0xc3430991, + 0x17214: 0x00302c88, 0x17215: 0x00306c88, 0x17216: 0x0030be88, 0x17217: 0x0030e288, + 0x17218: 0x0030f688, 0x17219: 0x00310088, 0x1721a: 0xc3630991, 0x1721b: 0x4003f820, + 0x1721c: 0x4004e420, 0x1721d: 0x4003fa20, 0x1721e: 0x40062420, 0x1721f: 0x40021620, + 0x17220: 0x40061e20, 0x17221: 0xce8e0071, 0x17222: 0x402c0a20, 0x17223: 0xc3550953, + 0x17224: 0x402c6220, 0x17225: 0x402c9820, 0x17226: 0x402d0820, 0x17227: 0x402d2220, + 0x17228: 0x402d6820, 0x17229: 0x402d9a20, 0x1722a: 0x402dcc20, 0x1722b: 0x402dfe20, + 0x1722c: 0xc0000002, 0x1722d: 0x402e8220, 0x1722e: 0x402e9e20, 0x1722f: 0xc33d2741, + 0x17230: 0x402f2c20, 0x17231: 0x402f5620, 0x17232: 0xc35d0991, 0x17233: 0xc3410991, + 0x17234: 0x40302c20, 0x17235: 0x40306c20, 0x17236: 0x4030be20, 0x17237: 0x4030e220, + 0x17238: 0x4030f620, 0x17239: 0x40310020, 0x1723a: 0xc3610991, 0x1723b: 0x4003fc20, + 0x1723c: 0x40094820, 0x1723d: 0x4003fe20, 0x1723e: 0x40094c20, 0x1723f: 0xa0000000, + // Block 0x5c9, offset 0x17240 + 0x17240: 0xe00008f5, 0x17241: 0xe00008ef, 0x17242: 0xe0000921, 0x17243: 0xe0000969, + 0x17244: 0x002be083, 0x17245: 0xe000094d, 0x17246: 0xe00009dd, 0x17247: 0xe0000a53, + 0x17248: 0xe0000ae8, 0x17249: 0xe0000ae2, 0x1724a: 0xe0000af4, 0x1724b: 0xe0000b20, + 0x1724c: 0xe0000c2b, 0x1724d: 0xe0000c25, 0x1724e: 0xe0000c37, 0x1724f: 0xe0000c43, + 0x17250: 0xe0000ab3, 0x17251: 0xe0000d63, 0x17252: 0xe0000d9a, 0x17253: 0xe0000d94, + 0x17254: 0x002ee483, 0x17255: 0xe0000de6, 0x17256: 0xe0000dd2, 0x17257: 0x40093e20, + 0x17258: 0xe0000e12, 0x17259: 0xe0000fe1, 0x1725a: 0xe0000fdb, 0x1725b: 0xe0000fed, + 0x1725c: 0xe0000fff, 0x1725d: 0xe0001102, 0x1725e: 0x00318888, 0x1725f: 0xe0000f7b, + 0x17260: 0xe00008f2, 0x17261: 0xe00008ec, 0x17262: 0xe000091e, 0x17263: 0xe0000966, + 0x17264: 0x402be020, 0x17265: 0xe000094a, 0x17266: 0xe00009d5, 0x17267: 0xe0000a4d, + 0x17268: 0xe0000ae5, 0x17269: 0xe0000adf, 0x1726a: 0xe0000af1, 0x1726b: 0xe0000b1d, + 0x1726c: 0xe0000c28, 0x1726d: 0xe0000c22, 0x1726e: 0xe0000c34, 0x1726f: 0xe0000c40, + 0x17270: 0xe0000aad, 0x17271: 0xe0000d60, 0x17272: 0xe0000d97, 0x17273: 0xe0000d91, + 0x17274: 0x402ee420, 0x17275: 0xe0000de3, 0x17276: 0xe0000dcf, 0x17277: 0x40093c20, + 0x17278: 0xe0000e0f, 0x17279: 0xe0000fde, 0x1727a: 0xe0000fd8, 0x1727b: 0xe0000fea, + 0x1727c: 0xe0000ffc, 0x1727d: 0xe00010ff, 0x1727e: 0x40318820, 0x1727f: 0xe0001114, + // Block 0x5ca, offset 0x17280 + 0x17280: 0x40321220, 0x17281: 0x40321a20, 0x17282: 0x40322220, 0x17283: 0x40322a20, + 0x17284: 0xe0000ad5, 0x17285: 0xe0000ad1, 0x17286: 0xe0000acd, 0x17287: 0xf0000a0a, + 0x17288: 0xf000040a, 0x17289: 0xf0000404, 0x1728a: 0xf0000a0a, 0x1728b: 0xf000040a, + 0x1728c: 0xf0000404, 0x1728d: 0xe0000947, 0x1728e: 0xe0000944, 0x1728f: 0xe0000c3d, + 0x17290: 0xe0000c3a, 0x17291: 0xe0000dcc, 0x17292: 0xe0000dc9, 0x17293: 0xe0000ff3, + 0x17294: 0xe0000ff0, 0x17295: 0xe000101e, 0x17296: 0xe000101a, 0x17297: 0xe0001006, + 0x17298: 0xe0001002, 0x17299: 0xe0001016, 0x1729a: 0xe0001012, 0x1729b: 0xe000100e, + 0x1729c: 0xe000100a, 0x1729d: 0x402cae20, 0x1729e: 0xe00038f2, 0x1729f: 0xe00038ef, + 0x172a0: 0xe0000976, 0x172a1: 0xe0000972, 0x172a2: 0xe00009f4, 0x172a3: 0xe00009ef, + 0x172a4: 0x002d3a88, 0x172a5: 0x402d3a20, 0x172a6: 0xe0000bbe, 0x172a7: 0xe0000bbb, + 0x172a8: 0xe0000c99, 0x172a9: 0xe0000c96, 0x172aa: 0xe0000e20, 0x172ab: 0xe0000e1d, + 0x172ac: 0xe0000e27, 0x172ad: 0xe0000e23, 0x172ae: 0xe0001162, 0x172af: 0xe000115f, + 0x172b0: 0xe0000c8d, 0x172b1: 0xf0000a0a, 0x172b2: 0xf000040a, 0x172b3: 0xf0000404, + 0x172b4: 0xe0000bac, 0x172b5: 0xe0000ba9, 0x172b6: 0x002d7888, 0x172b7: 0x00319488, + 0x172b8: 0xe0000d57, 0x172b9: 0xe0000d54, 0x172ba: 0xe0000954, 0x172bb: 0xe0000950, + 0x172bc: 0xe00009ea, 0x172bd: 0xe00009e5, 0x172be: 0xe0000e19, 0x172bf: 0xe0000e15, + // Block 0x5cb, offset 0x172c0 + 0x172c0: 0xe0000b03, 0x172c1: 0xe0000aff, 0x172c2: 0xe0000b13, 0x172c3: 0xe0000b0f, + 0x172c4: 0xe0000b0b, 0x172c5: 0xe0000b07, 0x172c6: 0xe0000b75, 0x172c7: 0xe0000b71, + 0x172c8: 0xe0000c66, 0x172c9: 0xe0000c63, 0x172ca: 0xe0000c78, 0x172cb: 0xe0000c75, + 0x172cc: 0xe0000e84, 0x172cd: 0xe0000e81, 0x172ce: 0xe0000e44, 0x172cf: 0xe0000e41, + 0x172d0: 0xe000ad5f, 0x172d1: 0xe000ad5c, 0x172d2: 0xe000ad65, 0x172d3: 0xe000ad62, + 0x172d4: 0xe000ad6b, 0x172d5: 0xe000ad68, 0x172d6: 0xe0002946, 0x172d7: 0xe0002943, + 0x172d8: 0xe000ad71, 0x172d9: 0xe000ad6e, 0x172da: 0xe0000e5d, 0x172db: 0xe0000e59, + 0x172dc: 0xe0000e65, 0x172dd: 0xe0000e61, 0x172de: 0xe0000e75, 0x172df: 0xe0000e71, + 0x172e0: 0xe0000e6d, 0x172e1: 0xe0000e69, 0x172e2: 0xe0000e7d, 0x172e3: 0xe0000e79, + 0x172e4: 0xe000108d, 0x172e5: 0xe000108a, 0x172e6: 0xe000104d, 0x172e7: 0xe000104a, + 0x172e8: 0xe0001066, 0x172e9: 0xe0001062, 0x172ea: 0xe000106e, 0x172eb: 0xe000106a, + 0x172ec: 0xe000107e, 0x172ed: 0xe000107a, 0x172ee: 0xe0001076, 0x172ef: 0xe0001072, + 0x172f0: 0xe0001086, 0x172f1: 0xe0001082, 0x172f2: 0xe0001108, 0x172f3: 0xe0001105, + 0x172f4: 0xe0001135, 0x172f5: 0xe0001132, 0x172f6: 0xe000112f, 0x172f7: 0xe000112c, + 0x172f8: 0xe000111d, 0x172f9: 0xe000111a, 0x172fa: 0xe0000d0a, 0x172fb: 0xe0000d07, + 0x172fc: 0x0030d888, 0x172fd: 0x4030d820, 0x172fe: 0x00312088, 0x172ff: 0x40312020, + // Block 0x5cc, offset 0x17300 + 0x17300: 0xa0000000, 0x17301: 0xa0000000, 0x17302: 0xa0000000, 0x17303: 0xa0000000, + 0x17304: 0xa0000000, 0x17305: 0xa0000000, 0x17306: 0xa0000000, 0x17307: 0xa0000000, + 0x17308: 0xa0000000, 0x17309: 0x40020020, 0x1730a: 0x40020220, 0x1730b: 0x40020420, + 0x1730c: 0x40020620, 0x1730d: 0x40020820, 0x1730e: 0xa0000000, 0x1730f: 0xa0000000, + 0x17310: 0xa0000000, 0x17311: 0xa0000000, 0x17312: 0xa0000000, 0x17313: 0xa0000000, + 0x17314: 0xa0000000, 0x17315: 0xa0000000, 0x17316: 0xa0000000, 0x17317: 0xa0000000, + 0x17318: 0xa0000000, 0x17319: 0xa0000000, 0x1731a: 0xa0000000, 0x1731b: 0xa0000000, + 0x1731c: 0xa0000000, 0x1731d: 0xa0000000, 0x1731e: 0xa0000000, 0x1731f: 0xa0000000, + 0x17320: 0x40021220, 0x17321: 0x4002ba20, 0x17322: 0x4003e020, 0x17323: 0x4004ea20, + 0x17324: 0x4027de20, 0x17325: 0x4004ec20, 0x17326: 0x4004e620, 0x17327: 0x4003d220, + 0x17328: 0x4003f420, 0x17329: 0x4003f620, 0x1732a: 0x4004d820, 0x1732b: 0x40093820, + 0x1732c: 0x40024020, 0x1732d: 0x40021a20, 0x1732e: 0x4002e420, 0x1732f: 0x4004e220, + 0x17330: 0x4029cc20, 0x17331: 0x4029ce20, 0x17332: 0x4029d020, 0x17333: 0x4029d220, + 0x17334: 0x4029d420, 0x17335: 0x4029d620, 0x17336: 0x4029d820, 0x17337: 0x4029da20, + 0x17338: 0x4029dc20, 0x17339: 0x4029de20, 0x1733a: 0x40026c20, 0x1733b: 0x40026220, + 0x1733c: 0x40094020, 0x1733d: 0x40094220, 0x1733e: 0x40094420, 0x1733f: 0x4002c420, + // Block 0x5cd, offset 0x17340 + 0x17340: 0x4004d620, 0x17341: 0x002bde88, 0x17342: 0x002c0a88, 0x17343: 0xc59b2891, + 0x17344: 0x002c6288, 0x17345: 0x002c9888, 0x17346: 0x002d0888, 0x17347: 0x002d2288, + 0x17348: 0x002d6888, 0x17349: 0x002d9a88, 0x1734a: 0x002dcc88, 0x1734b: 0x002dfe88, + 0x1734c: 0xc0030002, 0x1734d: 0x002e8288, 0x1734e: 0x002e9e88, 0x1734f: 0x002ee288, + 0x17350: 0x002f2c88, 0x17351: 0x002f5688, 0x17352: 0x002f7a88, 0x17353: 0xc3430991, + 0x17354: 0x00302c88, 0x17355: 0x00306c88, 0x17356: 0x0030be88, 0x17357: 0x0030e288, + 0x17358: 0x0030f688, 0x17359: 0x00310088, 0x1735a: 0xc3630991, 0x1735b: 0x4003f820, + 0x1735c: 0x4004e420, 0x1735d: 0x4003fa20, 0x1735e: 0x40062420, 0x1735f: 0x40021620, + 0x17360: 0x40061e20, 0x17361: 0x402bde20, 0x17362: 0x402c0a20, 0x17363: 0xc5982891, + 0x17364: 0x402c6220, 0x17365: 0x402c9820, 0x17366: 0x402d0820, 0x17367: 0x402d2220, + 0x17368: 0x402d6820, 0x17369: 0x402d9a20, 0x1736a: 0x402dcc20, 0x1736b: 0x402dfe20, + 0x1736c: 0xc0000002, 0x1736d: 0x402e8220, 0x1736e: 0x402e9e20, 0x1736f: 0x402ee220, + 0x17370: 0x402f2c20, 0x17371: 0x402f5620, 0x17372: 0x402f7a20, 0x17373: 0xc3410991, + 0x17374: 0x40302c20, 0x17375: 0x40306c20, 0x17376: 0x4030be20, 0x17377: 0x4030e220, + 0x17378: 0x4030f620, 0x17379: 0x40310020, 0x1737a: 0xc3610991, 0x1737b: 0x4003fc20, + 0x1737c: 0x40094820, 0x1737d: 0x4003fe20, 0x1737e: 0x40094c20, 0x1737f: 0xa0000000, + // Block 0x5ce, offset 0x17380 + 0x17380: 0xe0000983, 0x17381: 0xe0000980, 0x17382: 0xe00008fb, 0x17383: 0xe00008f8, + 0x17384: 0xe000097d, 0x17385: 0xe000097a, 0x17386: 0x002c3e83, 0x17387: 0x402c3e20, + 0x17388: 0xe0000a3e, 0x17389: 0xe0000a3b, 0x1738a: 0xe0000a4a, 0x1738b: 0xe0000a47, + 0x1738c: 0x002c3c83, 0x1738d: 0x402c3c20, 0x1738e: 0xe0000a86, 0x1738f: 0xe0000a83, + 0x17390: 0x002c6483, 0x17391: 0x402c6420, 0x17392: 0xe0000b46, 0x17393: 0xe0000b43, + 0x17394: 0xe0000aee, 0x17395: 0xe0000aeb, 0x17396: 0xe0000b2c, 0x17397: 0xe0000b29, + 0x17398: 0xe0000b40, 0x17399: 0xe0000b3d, 0x1739a: 0xe0000b1a, 0x1739b: 0xe0000b17, + 0x1739c: 0xe0000bb8, 0x1739d: 0xe0000bb5, 0x1739e: 0xe0000bb2, 0x1739f: 0xe0000baf, + 0x173a0: 0xe0000bc4, 0x173a1: 0xe0000bc1, 0x173a2: 0xe0000bca, 0x173a3: 0xe0000bc7, + 0x173a4: 0xe0000bee, 0x173a5: 0xe0000beb, 0x173a6: 0xe0000c1b, 0x173a7: 0xe0000c18, + 0x173a8: 0xe0000c51, 0x173a9: 0xe0000c4e, 0x173aa: 0xe0000c60, 0x173ab: 0xe0000c5d, + 0x173ac: 0xe0000c31, 0x173ad: 0xe0000c2e, 0x173ae: 0xe0000c5a, 0x173af: 0xe0000c57, + 0x173b0: 0xe0000c54, 0x173b1: 0x402da220, 0x173b2: 0xf0000a0a, 0x173b3: 0xf0000404, + 0x173b4: 0xe0000c8a, 0x173b5: 0xe0000c87, 0x173b6: 0xe0000c9f, 0x173b7: 0xe0000c9c, + 0x173b8: 0x402f7220, 0x173b9: 0xe0000ccc, 0x173ba: 0xe0000cc9, 0x173bb: 0xe0000cd8, + 0x173bc: 0xe0000cd5, 0x173bd: 0xe0000cd2, 0x173be: 0xe0000ccf, 0x173bf: 0xe0000d04, + // Block 0x5cf, offset 0x173c0 + 0x173c0: 0xa0000000, 0x173c1: 0xa0000000, 0x173c2: 0xa0000000, 0x173c3: 0xa0000000, + 0x173c4: 0xa0000000, 0x173c5: 0xa0000000, 0x173c6: 0xa0000000, 0x173c7: 0xa0000000, + 0x173c8: 0xa0000000, 0x173c9: 0x40020020, 0x173ca: 0x40020220, 0x173cb: 0x40020420, + 0x173cc: 0x40020620, 0x173cd: 0x40020820, 0x173ce: 0xa0000000, 0x173cf: 0xa0000000, + 0x173d0: 0xa0000000, 0x173d1: 0xa0000000, 0x173d2: 0xa0000000, 0x173d3: 0xa0000000, + 0x173d4: 0xa0000000, 0x173d5: 0xa0000000, 0x173d6: 0xa0000000, 0x173d7: 0xa0000000, + 0x173d8: 0xa0000000, 0x173d9: 0xa0000000, 0x173da: 0xa0000000, 0x173db: 0xa0000000, + 0x173dc: 0xa0000000, 0x173dd: 0xa0000000, 0x173de: 0xa0000000, 0x173df: 0xa0000000, + 0x173e0: 0x40021220, 0x173e1: 0x4002ba20, 0x173e2: 0x4003e020, 0x173e3: 0x4004ea20, + 0x173e4: 0x4027de20, 0x173e5: 0x4004ec20, 0x173e6: 0x4004e620, 0x173e7: 0x4003d220, + 0x173e8: 0x4003f420, 0x173e9: 0x4003f620, 0x173ea: 0x4004d820, 0x173eb: 0x40093820, + 0x173ec: 0x40024020, 0x173ed: 0x40021a20, 0x173ee: 0x4002e420, 0x173ef: 0x4004e220, + 0x173f0: 0x4029cc20, 0x173f1: 0x4029ce20, 0x173f2: 0x4029d020, 0x173f3: 0x4029d220, + 0x173f4: 0x4029d420, 0x173f5: 0x4029d620, 0x173f6: 0x4029d820, 0x173f7: 0x4029da20, + 0x173f8: 0x4029dc20, 0x173f9: 0x4029de20, 0x173fa: 0x40026c20, 0x173fb: 0x40026220, + 0x173fc: 0x40094020, 0x173fd: 0x40094220, 0x173fe: 0x40094420, 0x173ff: 0x4002c420, + // Block 0x5d0, offset 0x17400 + 0x17400: 0x4004d620, 0x17401: 0x002bde88, 0x17402: 0x002c0a88, 0x17403: 0xcb170911, + 0x17404: 0xceec09c2, 0x17405: 0xc6360071, 0x17406: 0x002d0888, 0x17407: 0xceef2a52, + 0x17408: 0x002d6888, 0x17409: 0x002d9a88, 0x1740a: 0x002dcc88, 0x1740b: 0x002dfe88, + 0x1740c: 0xcef60ac4, 0x1740d: 0x002e8288, 0x1740e: 0xcefb2a52, 0x1740f: 0x002ee288, + 0x17410: 0x002f2c88, 0x17411: 0x002f5688, 0x17412: 0xcefe9872, 0x17413: 0xcf0109c2, + 0x17414: 0xcf0609c2, 0x17415: 0x00306c88, 0x17416: 0x0030be88, 0x17417: 0x0030e288, + 0x17418: 0xcf0b09c2, 0x17419: 0x00310088, 0x1741a: 0xcf0e09c2, 0x1741b: 0x4003f820, + 0x1741c: 0x4004e420, 0x1741d: 0x4003fa20, 0x1741e: 0x40062420, 0x1741f: 0x40021620, + 0x17420: 0x40061e20, 0x17421: 0x402bde20, 0x17422: 0x402c0a20, 0x17423: 0xcb150911, + 0x17424: 0xceea09b1, 0x17425: 0xc6340071, 0x17426: 0x402d0820, 0x17427: 0xcb192a41, + 0x17428: 0x402d6820, 0x17429: 0x402d9a20, 0x1742a: 0x402dcc20, 0x1742b: 0x402dfe20, + 0x1742c: 0xcef20a73, 0x1742d: 0x402e8220, 0x1742e: 0xcb292a41, 0x1742f: 0x402ee220, + 0x17430: 0x402f2c20, 0x17431: 0x402f5620, 0x17432: 0xcb2d9861, 0x17433: 0xcb3109b1, + 0x17434: 0xcf0409b1, 0x17435: 0x40306c20, 0x17436: 0x4030be20, 0x17437: 0x4030e220, + 0x17438: 0xcf0909b1, 0x17439: 0x40310020, 0x1743a: 0xcb3509b1, 0x1743b: 0x4003fc20, + 0x1743c: 0x40094820, 0x1743d: 0x4003fe20, 0x1743e: 0x40094c20, 0x1743f: 0xa0000000, + // Block 0x5d1, offset 0x17440 + 0x17440: 0xe00008f5, 0x17441: 0xe00008ef, 0x17442: 0xe0000921, 0x17443: 0xe0000969, + 0x17444: 0xe000095b, 0x17445: 0xe000094d, 0x17446: 0xe00009dd, 0x17447: 0x002c6083, + 0x17448: 0xe0000ae8, 0x17449: 0xe0000ae2, 0x1744a: 0xe0000af4, 0x1744b: 0x002d0683, + 0x1744c: 0xe0000c2b, 0x1744d: 0xe0000c25, 0x1744e: 0xe0000c37, 0x1744f: 0xe0000c43, + 0x17450: 0xe0000ab3, 0x17451: 0xe0000d63, 0x17452: 0xe0000d9a, 0x17453: 0xe0000d94, + 0x17454: 0xe0000da6, 0x17455: 0xe0000de6, 0x17456: 0xe0000dd2, 0x17457: 0x40093e20, + 0x17458: 0xe0000e12, 0x17459: 0xe0000fe1, 0x1745a: 0xe0000fdb, 0x1745b: 0xe0000fed, + 0x1745c: 0xe0000fff, 0x1745d: 0xe0001102, 0x1745e: 0x00318888, 0x1745f: 0xe0000f7b, + 0x17460: 0xe00008f2, 0x17461: 0xe00008ec, 0x17462: 0xe000091e, 0x17463: 0xe0000966, + 0x17464: 0xe0000958, 0x17465: 0xe000094a, 0x17466: 0xe00009d5, 0x17467: 0x402c6020, + 0x17468: 0xe0000ae5, 0x17469: 0xe0000adf, 0x1746a: 0xe0000af1, 0x1746b: 0x402d0620, + 0x1746c: 0xe0000c28, 0x1746d: 0xe0000c22, 0x1746e: 0xe0000c34, 0x1746f: 0xe0000c40, + 0x17470: 0xe0000aad, 0x17471: 0xe0000d60, 0x17472: 0xe0000d97, 0x17473: 0xe0000d91, + 0x17474: 0xe0000da3, 0x17475: 0xe0000de3, 0x17476: 0xe0000dcf, 0x17477: 0x40093c20, + 0x17478: 0xe0000e0f, 0x17479: 0xe0000fde, 0x1747a: 0xe0000fd8, 0x1747b: 0xe0000fea, + 0x1747c: 0xe0000ffc, 0x1747d: 0xe00010ff, 0x1747e: 0x40318820, 0x1747f: 0xe0001114, + // Block 0x5d2, offset 0x17480 + 0x17480: 0xe00009b1, 0x17481: 0xe00009ae, 0x17482: 0xe0000a22, 0x17483: 0xe0000a1f, + 0x17484: 0xe0000a28, 0x17485: 0xe0000a25, 0x17486: 0xe0000a2e, 0x17487: 0xe0000a2b, + 0x17488: 0xe000ade6, 0x17489: 0xe000ade3, 0x1748a: 0xe0000a8c, 0x1748b: 0xe0000a89, + 0x1748c: 0xe0000a98, 0x1748d: 0xe0000a95, 0x1748e: 0xe0000aa4, 0x1748f: 0xe0000aa1, + 0x17490: 0xe0000a92, 0x17491: 0xe0000a8f, 0x17492: 0xe0000a9e, 0x17493: 0xe0000a9b, + 0x17494: 0xe0000b55, 0x17495: 0xe0000b51, 0x17496: 0xe0000b4d, 0x17497: 0xe0000b49, + 0x17498: 0xe0000b7c, 0x17499: 0xe0000b79, 0x1749a: 0xe0000b82, 0x1749b: 0xe0000b7f, + 0x1749c: 0xe0000b39, 0x1749d: 0xe0000b35, 0x1749e: 0xe0000b8c, 0x1749f: 0xe0000b89, + 0x174a0: 0xe0000bd0, 0x174a1: 0xe0000bcd, 0x174a2: 0xe0000c00, 0x174a3: 0xe0000bfd, + 0x174a4: 0xe0000c0c, 0x174a5: 0xe0000c09, 0x174a6: 0xe0000bfa, 0x174a7: 0xe0000bf7, + 0x174a8: 0xe0000c06, 0x174a9: 0xe0000c03, 0x174aa: 0xe0000c12, 0x174ab: 0xe0000c0f, + 0x174ac: 0xe0000c7e, 0x174ad: 0xe0000c7b, 0x174ae: 0xe0000c4a, 0x174af: 0xe0000c46, + 0x174b0: 0xe0000c93, 0x174b1: 0xe0000c90, 0x174b2: 0xe0000cab, 0x174b3: 0xe0000ca8, + 0x174b4: 0xe0000cb1, 0x174b5: 0xe0000cae, 0x174b6: 0xe0000cde, 0x174b7: 0xe0000cdb, + 0x174b8: 0xe0000ce5, 0x174b9: 0xe0000ce1, 0x174ba: 0xe0000cf2, 0x174bb: 0xe0000cef, + 0x174bc: 0xe0000cec, 0x174bd: 0xe0000ce9, 0x174be: 0xe0000d1e, 0x174bf: 0xe0000d1b, + // Block 0x5d3, offset 0x174c0 + 0x174c0: 0xa0000000, 0x174c1: 0xa0000000, 0x174c2: 0xa0000000, 0x174c3: 0xa0000000, + 0x174c4: 0xa0000000, 0x174c5: 0xa0000000, 0x174c6: 0xa0000000, 0x174c7: 0xa0000000, + 0x174c8: 0xa0000000, 0x174c9: 0x40020020, 0x174ca: 0x40020220, 0x174cb: 0x40020420, + 0x174cc: 0x40020620, 0x174cd: 0x40020820, 0x174ce: 0xa0000000, 0x174cf: 0xa0000000, + 0x174d0: 0xa0000000, 0x174d1: 0xa0000000, 0x174d2: 0xa0000000, 0x174d3: 0xa0000000, + 0x174d4: 0xa0000000, 0x174d5: 0xa0000000, 0x174d6: 0xa0000000, 0x174d7: 0xa0000000, + 0x174d8: 0xa0000000, 0x174d9: 0xa0000000, 0x174da: 0xa0000000, 0x174db: 0xa0000000, + 0x174dc: 0xa0000000, 0x174dd: 0xa0000000, 0x174de: 0xa0000000, 0x174df: 0xa0000000, + 0x174e0: 0x40021220, 0x174e1: 0x4002ba20, 0x174e2: 0x4003e020, 0x174e3: 0x4004ea20, + 0x174e4: 0x4027de20, 0x174e5: 0x4004ec20, 0x174e6: 0x4004e620, 0x174e7: 0x4003d220, + 0x174e8: 0x4003f420, 0x174e9: 0x4003f620, 0x174ea: 0x4004d820, 0x174eb: 0x40093820, + 0x174ec: 0x40024020, 0x174ed: 0x40021a20, 0x174ee: 0x4002e420, 0x174ef: 0x4004e220, + 0x174f0: 0x4029cc20, 0x174f1: 0x4029ce20, 0x174f2: 0x4029d020, 0x174f3: 0x4029d220, + 0x174f4: 0x4029d420, 0x174f5: 0x4029d620, 0x174f6: 0x4029d820, 0x174f7: 0x4029da20, + 0x174f8: 0x4029dc20, 0x174f9: 0x4029de20, 0x174fa: 0x40026c20, 0x174fb: 0x40026220, + 0x174fc: 0x40094020, 0x174fd: 0x40094220, 0x174fe: 0x40094420, 0x174ff: 0x4002c420, + // Block 0x5d4, offset 0x17500 + 0x17500: 0x4004d620, 0x17501: 0xc57327b1, 0x17502: 0x002c0a88, 0x17503: 0x002c3a88, + 0x17504: 0x002c6288, 0x17505: 0xcf130be1, 0x17506: 0x002d0888, 0x17507: 0x002d2288, + 0x17508: 0x002d6888, 0x17509: 0x002d9a88, 0x1750a: 0x002dcc88, 0x1750b: 0x002dfe88, + 0x1750c: 0xc0030002, 0x1750d: 0x002e8288, 0x1750e: 0x002e9e88, 0x1750f: 0xcf199891, + 0x17510: 0x002f2c88, 0x17511: 0x002f5688, 0x17512: 0x002f7a88, 0x17513: 0x002fe688, + 0x17514: 0x00302c88, 0x17515: 0xc3900b21, 0x17516: 0x0030be88, 0x17517: 0x0030e288, + 0x17518: 0x0030f688, 0x17519: 0x00310088, 0x1751a: 0x00312a88, 0x1751b: 0x4003f820, + 0x1751c: 0x4004e420, 0x1751d: 0x4003fa20, 0x1751e: 0x40062420, 0x1751f: 0x40021620, + 0x17520: 0x40061e20, 0x17521: 0xc57027b1, 0x17522: 0x402c0a20, 0x17523: 0x402c3a20, + 0x17524: 0x402c6220, 0x17525: 0xcf110be1, 0x17526: 0x402d0820, 0x17527: 0x402d2220, + 0x17528: 0x402d6820, 0x17529: 0x402d9a20, 0x1752a: 0x402dcc20, 0x1752b: 0x402dfe20, + 0x1752c: 0xc0000002, 0x1752d: 0x402e8220, 0x1752e: 0x402e9e20, 0x1752f: 0xcf159891, + 0x17530: 0x402f2c20, 0x17531: 0x402f5620, 0x17532: 0x402f7a20, 0x17533: 0x402fe620, + 0x17534: 0x40302c20, 0x17535: 0xc38d0b21, 0x17536: 0x4030be20, 0x17537: 0x4030e220, + 0x17538: 0x4030f620, 0x17539: 0x40310020, 0x1753a: 0x40312a20, 0x1753b: 0x4003fc20, + 0x1753c: 0x40094820, 0x1753d: 0x4003fe20, 0x1753e: 0x40094c20, 0x1753f: 0xa0000000, + // Block 0x5d5, offset 0x17540 + 0x17540: 0xe00008f5, 0x17541: 0xe00008ef, 0x17542: 0xe0000921, 0x17543: 0xe0000969, + 0x17544: 0x00320e83, 0x17545: 0x00320c83, 0x17546: 0x00320ea3, 0x17547: 0xe0000a53, + 0x17548: 0xe0000ae8, 0x17549: 0xe0000ae2, 0x1754a: 0xe0000af4, 0x1754b: 0xe0000b20, + 0x1754c: 0xe0000c2b, 0x1754d: 0xe0000c25, 0x1754e: 0xe0000c37, 0x1754f: 0xe0000c43, + 0x17550: 0x002c62c3, 0x17551: 0xe0000d63, 0x17552: 0xe0000d9a, 0x17553: 0xe0000d94, + 0x17554: 0x00321103, 0x17555: 0xe0000de6, 0x17556: 0x00321083, 0x17557: 0x40093e20, + 0x17558: 0x003210a3, 0x17559: 0xe0000fe1, 0x1755a: 0xe0000fdb, 0x1755b: 0xe0000fed, + 0x1755c: 0x003100a3, 0x1755d: 0xe0001102, 0x1755e: 0xe0002973, 0x1755f: 0xe0000f7b, + 0x17560: 0xe00008f2, 0x17561: 0xe00008ec, 0x17562: 0xe000091e, 0x17563: 0xe0000966, + 0x17564: 0x40320e20, 0x17565: 0x40320c20, 0x17566: 0x40320e21, 0x17567: 0xe0000a4d, + 0x17568: 0xe0000ae5, 0x17569: 0xe0000adf, 0x1756a: 0xe0000af1, 0x1756b: 0xe0000b1d, + 0x1756c: 0xe0000c28, 0x1756d: 0xe0000c22, 0x1756e: 0xe0000c34, 0x1756f: 0xe0000c40, + 0x17570: 0x402c6222, 0x17571: 0xe0000d60, 0x17572: 0xe0000d97, 0x17573: 0xe0000d91, + 0x17574: 0x40321024, 0x17575: 0xe0000de3, 0x17576: 0x40321020, 0x17577: 0x40093c20, + 0x17578: 0x40321021, 0x17579: 0xe0000fde, 0x1757a: 0xe0000fd8, 0x1757b: 0xe0000fea, + 0x1757c: 0x40310021, 0x1757d: 0xe00010ff, 0x1757e: 0xe0002970, 0x1757f: 0xe0001114, + // Block 0x5d6, offset 0x17580 + 0x17580: 0xe0000983, 0x17581: 0xe0000980, 0x17582: 0xe00008fb, 0x17583: 0xe00008f8, + 0x17584: 0xe000097d, 0x17585: 0xe000097a, 0x17586: 0xe0000a38, 0x17587: 0xe0000a35, + 0x17588: 0xe0000a3e, 0x17589: 0xe0000a3b, 0x1758a: 0xe0000a4a, 0x1758b: 0xe0000a47, + 0x1758c: 0xe0000a44, 0x1758d: 0xe0000a41, 0x1758e: 0xe0000a86, 0x1758f: 0xe0000a83, + 0x17590: 0x002c62a3, 0x17591: 0x402c6221, 0x17592: 0xe0000b46, 0x17593: 0xe0000b43, + 0x17594: 0xe0000aee, 0x17595: 0xe0000aeb, 0x17596: 0xe0000b2c, 0x17597: 0xe0000b29, + 0x17598: 0x00320ec3, 0x17599: 0x40320e22, 0x1759a: 0xe0000b1a, 0x1759b: 0xe0000b17, + 0x1759c: 0xe0000bb8, 0x1759d: 0xe0000bb5, 0x1759e: 0xe0000bb2, 0x1759f: 0xe0000baf, + 0x175a0: 0xe0000bc4, 0x175a1: 0xe0000bc1, 0x175a2: 0xe0000bca, 0x175a3: 0xe0000bc7, + 0x175a4: 0xe0000bee, 0x175a5: 0xe0000beb, 0x175a6: 0xe0000c1b, 0x175a7: 0xe0000c18, + 0x175a8: 0xe0000c51, 0x175a9: 0xe0000c4e, 0x175aa: 0xe0000c60, 0x175ab: 0xe0000c5d, + 0x175ac: 0xe0000c31, 0x175ad: 0xe0000c2e, 0x175ae: 0xe0000c5a, 0x175af: 0xe0000c57, + 0x175b0: 0xe0000c54, 0x175b1: 0x402da220, 0x175b2: 0xf0000a0a, 0x175b3: 0xf0000404, + 0x175b4: 0xe0000c8a, 0x175b5: 0xe0000c87, 0x175b6: 0xe0000c9f, 0x175b7: 0xe0000c9c, + 0x175b8: 0x402f7220, 0x175b9: 0xe0000ccc, 0x175ba: 0xe0000cc9, 0x175bb: 0xe0000cd8, + 0x175bc: 0xe0000cd5, 0x175bd: 0xe0000cd2, 0x175be: 0xe0000ccf, 0x175bf: 0xe0000d04, + // Block 0x5d7, offset 0x175c0 + 0x175c0: 0xe0000cfe, 0x175c1: 0xe0000cf8, 0x175c2: 0xe0000cf5, 0x175c3: 0xe0000d51, + 0x175c4: 0xe0000d4e, 0x175c5: 0xe0000d6f, 0x175c6: 0xe0000d6c, 0x175c7: 0xe0000d5d, + 0x175c8: 0xe0000d5a, 0x175c9: 0xf0000404, 0x175ca: 0x002eda88, 0x175cb: 0x402eda20, + 0x175cc: 0xe0000e2e, 0x175cd: 0xe0000e2b, 0x175ce: 0xe0000da0, 0x175cf: 0xe0000d9d, + 0x175d0: 0x003210c3, 0x175d1: 0x40321022, 0x175d2: 0x003210e3, 0x175d3: 0x40321023, + 0x175d4: 0xe0000eca, 0x175d5: 0xe0000ec7, 0x175d6: 0xe0000edc, 0x175d7: 0xe0000ed9, + 0x175d8: 0xe0000ed0, 0x175d9: 0xe0000ecd, 0x175da: 0xe0000f1f, 0x175db: 0xe0000f1c, + 0x175dc: 0xe0000f2d, 0x175dd: 0xe0000f2a, 0x175de: 0xe0000f47, 0x175df: 0xe0000f44, + 0x175e0: 0xe0000f33, 0x175e1: 0xe0000f30, 0x175e2: 0xe0000f99, 0x175e3: 0xe0000f96, + 0x175e4: 0xe0000f8a, 0x175e5: 0xe0000f87, 0x175e6: 0x00303688, 0x175e7: 0x40303620, + 0x175e8: 0xe000102b, 0x175e9: 0xe0001028, 0x175ea: 0xe000103f, 0x175eb: 0xe000103c, + 0x175ec: 0xe0000fe7, 0x175ed: 0xe0000fe4, 0x175ee: 0xe0000ff9, 0x175ef: 0xe0000ff6, + 0x175f0: 0x003100c3, 0x175f1: 0x40310022, 0x175f2: 0xe0001039, 0x175f3: 0xe0001036, + 0x175f4: 0xe00010d8, 0x175f5: 0xe00010d5, 0x175f6: 0xe000110e, 0x175f7: 0xe000110b, + 0x175f8: 0xe0001117, 0x175f9: 0xe000113b, 0x175fa: 0xe0001138, 0x175fb: 0xe000114d, + 0x175fc: 0xe000114a, 0x175fd: 0xe0001147, 0x175fe: 0xe0001144, 0x175ff: 0xe0000f64, + // Block 0x5d8, offset 0x17600 + 0x17600: 0xe0000b03, 0x17601: 0xe0000aff, 0x17602: 0xe0000b13, 0x17603: 0xe0000b0f, + 0x17604: 0xe0000b0b, 0x17605: 0xe0000b07, 0x17606: 0xe0000b75, 0x17607: 0xe0000b71, + 0x17608: 0xe0000c66, 0x17609: 0xe0000c63, 0x1760a: 0xe0000c78, 0x1760b: 0xe0000c75, + 0x1760c: 0xe0000e84, 0x1760d: 0xe0000e81, 0x1760e: 0xe0000e44, 0x1760f: 0xe0000e41, + 0x17610: 0xe000adec, 0x17611: 0xe000ade9, 0x17612: 0xe000adf2, 0x17613: 0xe000adef, + 0x17614: 0xe000adfe, 0x17615: 0xe000adfb, 0x17616: 0xe000adf8, 0x17617: 0xe000adf5, + 0x17618: 0xe000ae04, 0x17619: 0xe000ae01, 0x1761a: 0xe0000e5d, 0x1761b: 0xe0000e59, + 0x1761c: 0xe0000e65, 0x1761d: 0xe0000e61, 0x1761e: 0xe0000e75, 0x1761f: 0xe0000e71, + 0x17620: 0xe0000e6d, 0x17621: 0xe0000e69, 0x17622: 0xe0000e7d, 0x17623: 0xe0000e79, + 0x17624: 0xe000108d, 0x17625: 0xe000108a, 0x17626: 0xe000104d, 0x17627: 0xe000104a, + 0x17628: 0xe0001066, 0x17629: 0xe0001062, 0x1762a: 0xe000106e, 0x1762b: 0xe000106a, + 0x1762c: 0xe000107e, 0x1762d: 0xe000107a, 0x1762e: 0xe0001076, 0x1762f: 0xe0001072, + 0x17630: 0xe0001086, 0x17631: 0xe0001082, 0x17632: 0xe0001108, 0x17633: 0xe0001105, + 0x17634: 0xe0001135, 0x17635: 0xe0001132, 0x17636: 0xe000112f, 0x17637: 0xe000112c, + 0x17638: 0xe000111d, 0x17639: 0xe000111a, 0x1763a: 0xe0000d0a, 0x1763b: 0xe0000d07, + 0x1763c: 0x0030d888, 0x1763d: 0x4030d820, 0x1763e: 0x00312088, 0x1763f: 0x40312020, + // Block 0x5d9, offset 0x17640 + 0x17640: 0xa0000000, 0x17641: 0xa0000000, 0x17642: 0xa0000000, 0x17643: 0xa0000000, + 0x17644: 0xa0000000, 0x17645: 0xa0000000, 0x17646: 0xa0000000, 0x17647: 0xa0000000, + 0x17648: 0xa0000000, 0x17649: 0x40020020, 0x1764a: 0x40020220, 0x1764b: 0x40020420, + 0x1764c: 0x40020620, 0x1764d: 0x40020820, 0x1764e: 0xa0000000, 0x1764f: 0xa0000000, + 0x17650: 0xa0000000, 0x17651: 0xa0000000, 0x17652: 0xa0000000, 0x17653: 0xa0000000, + 0x17654: 0xa0000000, 0x17655: 0xa0000000, 0x17656: 0xa0000000, 0x17657: 0xa0000000, + 0x17658: 0xa0000000, 0x17659: 0xa0000000, 0x1765a: 0xa0000000, 0x1765b: 0xa0000000, + 0x1765c: 0xa0000000, 0x1765d: 0xa0000000, 0x1765e: 0xa0000000, 0x1765f: 0xa0000000, + 0x17660: 0x40021220, 0x17661: 0x4002ba20, 0x17662: 0x4003e020, 0x17663: 0x4004ea20, + 0x17664: 0x4027de20, 0x17665: 0x4004ec20, 0x17666: 0x4004e620, 0x17667: 0x4003d220, + 0x17668: 0x4003f420, 0x17669: 0x4003f620, 0x1766a: 0x4004d820, 0x1766b: 0x40093820, + 0x1766c: 0x40024020, 0x1766d: 0x40021a20, 0x1766e: 0x4002e420, 0x1766f: 0x4004e220, + 0x17670: 0x4029cc20, 0x17671: 0x4029ce20, 0x17672: 0x4029d020, 0x17673: 0x4029d220, + 0x17674: 0x4029d420, 0x17675: 0x4029d620, 0x17676: 0x4029d820, 0x17677: 0x4029da20, + 0x17678: 0x4029dc20, 0x17679: 0x4029de20, 0x1767a: 0x40026c20, 0x1767b: 0x40026220, + 0x1767c: 0x40094020, 0x1767d: 0x40094220, 0x1767e: 0x40094420, 0x1767f: 0x4002c420, + // Block 0x5da, offset 0x17680 + 0x17680: 0x4004d620, 0x17681: 0xc57327b1, 0x17682: 0x002c0a88, 0x17683: 0x002c3a88, + 0x17684: 0x002c6288, 0x17685: 0xcf130be1, 0x17686: 0x002d0888, 0x17687: 0x002d2288, + 0x17688: 0x002d6888, 0x17689: 0x002d9a88, 0x1768a: 0x002dcc88, 0x1768b: 0x002dfe88, + 0x1768c: 0xc0030002, 0x1768d: 0x002e8288, 0x1768e: 0x002e9e88, 0x1768f: 0xcf199891, + 0x17690: 0x002f2c88, 0x17691: 0x002f5688, 0x17692: 0x002f7a88, 0x17693: 0x002fe688, + 0x17694: 0x00302c88, 0x17695: 0xc3900b21, 0x17696: 0x0030be83, 0x17697: 0x0030bea3, + 0x17698: 0x0030f688, 0x17699: 0x00310088, 0x1769a: 0x00312a88, 0x1769b: 0x4003f820, + 0x1769c: 0x4004e420, 0x1769d: 0x4003fa20, 0x1769e: 0x40062420, 0x1769f: 0x40021620, + 0x176a0: 0x40061e20, 0x176a1: 0xc57027b1, 0x176a2: 0x402c0a20, 0x176a3: 0x402c3a20, + 0x176a4: 0x402c6220, 0x176a5: 0xcf110be1, 0x176a6: 0x402d0820, 0x176a7: 0x402d2220, + 0x176a8: 0x402d6820, 0x176a9: 0x402d9a20, 0x176aa: 0x402dcc20, 0x176ab: 0x402dfe20, + 0x176ac: 0xc0000002, 0x176ad: 0x402e8220, 0x176ae: 0x402e9e20, 0x176af: 0xcf159891, + 0x176b0: 0x402f2c20, 0x176b1: 0x402f5620, 0x176b2: 0x402f7a20, 0x176b3: 0x402fe620, + 0x176b4: 0x40302c20, 0x176b5: 0xc38d0b21, 0x176b6: 0x4030be20, 0x176b7: 0x4030be21, + 0x176b8: 0x4030f620, 0x176b9: 0x40310020, 0x176ba: 0x40312a20, 0x176bb: 0x4003fc20, + 0x176bc: 0x40094820, 0x176bd: 0x4003fe20, 0x176be: 0x40094c20, 0x176bf: 0xa0000000, + // Block 0x5db, offset 0x176c0 + 0x176c0: 0xe0000cfe, 0x176c1: 0xe0000cf8, 0x176c2: 0xe0000cf5, 0x176c3: 0xe0000d51, + 0x176c4: 0xe0000d4e, 0x176c5: 0xe0000d6f, 0x176c6: 0xe0000d6c, 0x176c7: 0xe0000d5d, + 0x176c8: 0xe0000d5a, 0x176c9: 0xf0000404, 0x176ca: 0x002eda88, 0x176cb: 0x402eda20, + 0x176cc: 0xe0000e2e, 0x176cd: 0xe0000e2b, 0x176ce: 0xe0000da0, 0x176cf: 0xe0000d9d, + 0x176d0: 0x003210c3, 0x176d1: 0x40321022, 0x176d2: 0x003210e3, 0x176d3: 0x40321023, + 0x176d4: 0xe0000eca, 0x176d5: 0xe0000ec7, 0x176d6: 0xe0000edc, 0x176d7: 0xe0000ed9, + 0x176d8: 0xe0000ed0, 0x176d9: 0xe0000ecd, 0x176da: 0xe0000f1f, 0x176db: 0xe0000f1c, + 0x176dc: 0xe0000f2d, 0x176dd: 0xe0000f2a, 0x176de: 0xe0000f47, 0x176df: 0xe0000f44, + 0x176e0: 0xe0000f33, 0x176e1: 0xe0000f30, 0x176e2: 0xe0000f99, 0x176e3: 0xe0000f96, + 0x176e4: 0xe0000f8a, 0x176e5: 0xe0000f87, 0x176e6: 0x00303688, 0x176e7: 0x40303620, + 0x176e8: 0xe000102b, 0x176e9: 0xe0001028, 0x176ea: 0xe000103f, 0x176eb: 0xe000103c, + 0x176ec: 0xe0000fe7, 0x176ed: 0xe0000fe4, 0x176ee: 0xe0000ff9, 0x176ef: 0xe0000ff6, + 0x176f0: 0x003100c3, 0x176f1: 0x40310022, 0x176f2: 0xe0001039, 0x176f3: 0xe0001036, + 0x176f4: 0xe0003636, 0x176f5: 0xe0003633, 0x176f6: 0xe000110e, 0x176f7: 0xe000110b, + 0x176f8: 0xe0001117, 0x176f9: 0xe000113b, 0x176fa: 0xe0001138, 0x176fb: 0xe000114d, + 0x176fc: 0xe000114a, 0x176fd: 0xe0001147, 0x176fe: 0xe0001144, 0x176ff: 0xe0000f64, + // Block 0x5dc, offset 0x17700 + 0x17700: 0xe0000d24, 0x17701: 0xe0000d21, 0x17702: 0xe0000d2a, 0x17703: 0xe0000d27, + 0x17704: 0xe0000d69, 0x17705: 0xe0000d66, 0x17706: 0xe0000d7b, 0x17707: 0xe0000d78, + 0x17708: 0xe0000d87, 0x17709: 0xe0000d84, 0x1770a: 0xe0000d81, 0x1770b: 0xe0000d7e, + 0x1770c: 0xe0000ded, 0x1770d: 0xe0000de9, 0x1770e: 0xe00037f4, 0x1770f: 0xe00037f1, + 0x17710: 0xe0000e3d, 0x17711: 0xe0000e39, 0x17712: 0xe0000e35, 0x17713: 0xe0000e31, + 0x17714: 0xe0000ea7, 0x17715: 0xe0000ea4, 0x17716: 0xe0000ead, 0x17717: 0xe0000eaa, + 0x17718: 0xe0000ed6, 0x17719: 0xe0000ed3, 0x1771a: 0xe0000ef4, 0x1771b: 0xe0000ef1, + 0x1771c: 0xe0000efb, 0x1771d: 0xe0000ef7, 0x1771e: 0xe0000f02, 0x1771f: 0xe0000eff, + 0x17720: 0xe0000f41, 0x17721: 0xe0000f3e, 0x17722: 0xe0000f53, 0x17723: 0xe0000f50, + 0x17724: 0xe0000f26, 0x17725: 0xe0000f22, 0x17726: 0xe0000f3a, 0x17727: 0xe0000f36, + 0x17728: 0xe0000f5a, 0x17729: 0xe0000f56, 0x1772a: 0xe0000f93, 0x1772b: 0xe0000f90, + 0x1772c: 0xe0000f9f, 0x1772d: 0xe0000f9c, 0x1772e: 0xe0000fb1, 0x1772f: 0xe0000fae, + 0x17730: 0xe0000fab, 0x17731: 0xe0000fa8, 0x17732: 0xe0001093, 0x17733: 0xe0001090, + 0x17734: 0xe000109f, 0x17735: 0xe000109c, 0x17736: 0xe0001099, 0x17737: 0xe0001096, + 0x17738: 0xe0001032, 0x17739: 0xe000102e, 0x1773a: 0xe000298b, 0x1773b: 0xe0002988, + 0x1773c: 0xe000ae07, 0x1773d: 0xe00010a6, 0x1773e: 0xe000ae0a, 0x1773f: 0xe00010ac, + // Block 0x5dd, offset 0x17740 + 0x17742: 0x40429620, 0x17743: 0x40429820, + 0x17745: 0x40427e20, 0x17746: 0x40428020, 0x17747: 0x40428220, + 0x17748: 0x40428420, 0x17749: 0x40428620, 0x1774a: 0x40428820, + 0x1774e: 0x40428a20, 0x1774f: 0x40428c20, + 0x17750: 0x40428e20, 0x17752: 0xc0610231, 0x17753: 0x40429220, + 0x17754: 0x40429420, 0x17755: 0xcf1d98d1, + 0x17759: 0xcf219961, 0x1775a: 0xcf239961, + 0x1775c: 0xcf439961, 0x1775e: 0xcf259961, 0x1775f: 0xcf279961, + 0x17763: 0xcf299961, + 0x17764: 0xcf2b9961, + 0x17768: 0xcf2d9961, 0x17769: 0xcf419961, 0x1776a: 0xcf2f9961, + 0x1776e: 0xcf319961, 0x1776f: 0xcf339961, + 0x17770: 0xcf359961, 0x17771: 0xcf3f9961, 0x17772: 0xcf379961, 0x17773: 0xcf3d9961, + 0x17774: 0xcf3b9961, 0x17775: 0xcf399961, 0x17776: 0xcf459961, 0x17777: 0xcf479961, + 0x17778: 0xcf499961, 0x17779: 0xcf4b9961, + 0x1777e: 0x4042c620, 0x1777f: 0x4042c820, + // Block 0x5de, offset 0x17780 + 0x17781: 0x40430020, 0x17782: 0x40430220, 0x17783: 0x40430420, + 0x17785: 0x4042e020, 0x17786: 0x4042e220, 0x17787: 0x4042e420, + 0x17788: 0x4042e620, 0x17789: 0x4042e820, 0x1778a: 0x4042ea20, 0x1778b: 0x4042ec20, + 0x1778c: 0x4042f020, 0x1778e: 0x4042f420, 0x1778f: 0x4042f620, + 0x17790: 0x4042f820, 0x17792: 0x4042fa20, 0x17793: 0x4042fc20, + 0x17794: 0x4042fe20, 0x17795: 0x40430020, 0x17796: 0x40430220, 0x17797: 0x40430420, + 0x17798: 0x40430620, 0x17799: 0x40430820, 0x1779a: 0x40430a20, 0x1779b: 0x40430e20, + 0x1779c: 0x40431020, 0x1779d: 0x40431420, 0x1779e: 0x40431620, 0x1779f: 0x40431820, + 0x177a0: 0x40431a20, 0x177a1: 0x40431c20, 0x177a2: 0x40431e20, 0x177a3: 0x40432020, + 0x177a4: 0x40432220, 0x177a5: 0x40432420, 0x177a6: 0x40432620, 0x177a7: 0x40432820, + 0x177a8: 0x40432a20, 0x177aa: 0x40432c20, 0x177ab: 0x40432e20, + 0x177ac: 0x40433020, 0x177ad: 0x40433220, 0x177ae: 0x40433420, 0x177af: 0x40433620, + 0x177b0: 0x40433820, 0x177b1: 0x40433a20, 0x177b2: 0x40433c20, 0x177b3: 0x40434820, + 0x177b5: 0x40433e20, 0x177b6: 0x40434020, 0x177b7: 0x40434220, + 0x177b8: 0x40434420, 0x177b9: 0x40434620, + 0x177bd: 0x40434a20, 0x177be: 0x40434c20, 0x177bf: 0x40434e20, + // Block 0x5df, offset 0x177c0 + 0x177c1: 0x40491020, 0x177c2: 0x40491220, 0x177c3: 0x40491420, + 0x177c4: 0x40491620, 0x177c5: 0x40491820, 0x177c6: 0x40491a20, 0x177c7: 0x40491c20, + 0x177c8: 0x40491e20, 0x177c9: 0x40492020, 0x177ca: 0x40492220, 0x177cb: 0x40492420, + 0x177cc: 0x40492620, 0x177cd: 0x40492820, 0x177ce: 0x40492a20, 0x177cf: 0x40492c20, + 0x177d0: 0x40492e20, 0x177d1: 0x40493020, 0x177d2: 0x40493220, 0x177d3: 0x40493420, + 0x177d4: 0x40493620, 0x177d5: 0x40493820, 0x177d6: 0x40493a20, 0x177d7: 0x40493c20, + 0x177d8: 0x40493e20, 0x177d9: 0x40494020, 0x177da: 0x40494220, 0x177db: 0x40494420, + 0x177dc: 0x40494620, 0x177dd: 0x40494820, 0x177de: 0x40494a20, 0x177df: 0x40494c20, + 0x177e0: 0x40494e20, 0x177e1: 0x40495020, 0x177e2: 0x40495220, 0x177e3: 0x40495420, + 0x177e4: 0x40495620, 0x177e5: 0x40495820, 0x177e6: 0x40495a20, 0x177e7: 0x40495c20, + 0x177e8: 0x40495e20, 0x177e9: 0x40496020, 0x177ea: 0x40496220, 0x177eb: 0x40496420, + 0x177ec: 0x40496620, 0x177ed: 0x40496820, 0x177ee: 0x40496a20, 0x177ef: 0x40057820, + 0x177f0: 0x40496e20, 0x177f1: 0x40497020, 0x177f2: 0x40497220, 0x177f3: 0xe000ae10, + 0x177f4: 0x40497620, 0x177f5: 0x40497820, 0x177f6: 0x40497a20, 0x177f7: 0x40497c20, + 0x177f8: 0x826724bf, 0x177f9: 0x826724c0, 0x177fa: 0x40498e20, + 0x177ff: 0x4027f420, + // Block 0x5e0, offset 0x17800 + 0x17800: 0xc07f04e1, 0x17801: 0xc0ae04e1, 0x17802: 0xc0dd04e1, 0x17803: 0xc10c04e1, + 0x17804: 0xc13b04e1, 0x17805: 0x00497283, 0x17806: 0x40057e20, 0x17807: 0xa000ff02, + 0x17808: 0xa6b10002, 0x17809: 0xa6b10102, 0x1780a: 0xa6b10202, 0x1780b: 0xa6b10302, + 0x1780c: 0xa000ff02, 0x1780d: 0xcf4d9991, 0x1780e: 0xa000fe02, 0x1780f: 0x40057820, + 0x17810: 0xe000019a, 0x17811: 0xe000022e, 0x17812: 0xe0000346, 0x17813: 0xe0000420, + 0x17814: 0xe00004f5, 0x17815: 0xe00005bf, 0x17816: 0xe000068a, 0x17817: 0xe0000732, + 0x17818: 0xe00007de, 0x17819: 0xe0000883, 0x1781a: 0x40057a20, 0x1781b: 0x40057c20, + // Block 0x5e1, offset 0x17840 + 0x17840: 0xa0000000, 0x17841: 0xa0000000, 0x17842: 0xa0000000, 0x17843: 0xa0000000, + 0x17844: 0xa0000000, 0x17845: 0xa0000000, 0x17846: 0xa0000000, 0x17847: 0xa0000000, + 0x17848: 0xa0000000, 0x17849: 0x40020020, 0x1784a: 0x40020220, 0x1784b: 0x40020420, + 0x1784c: 0x40020620, 0x1784d: 0x40020820, 0x1784e: 0xa0000000, 0x1784f: 0xa0000000, + 0x17850: 0xa0000000, 0x17851: 0xa0000000, 0x17852: 0xa0000000, 0x17853: 0xa0000000, + 0x17854: 0xa0000000, 0x17855: 0xa0000000, 0x17856: 0xa0000000, 0x17857: 0xa0000000, + 0x17858: 0xa0000000, 0x17859: 0xa0000000, 0x1785a: 0xa0000000, 0x1785b: 0xa0000000, + 0x1785c: 0xa0000000, 0x1785d: 0xa0000000, 0x1785e: 0xa0000000, 0x1785f: 0xa0000000, + 0x17860: 0x40021220, 0x17861: 0x4002ba20, 0x17862: 0x4003e020, 0x17863: 0x4004ea20, + 0x17864: 0x4027de20, 0x17865: 0x4004ec20, 0x17866: 0x4004e620, 0x17867: 0x4003d220, + 0x17868: 0x4003f420, 0x17869: 0x4003f620, 0x1786a: 0x4004d820, 0x1786b: 0x40093820, + 0x1786c: 0x40024020, 0x1786d: 0x40021a20, 0x1786e: 0x4002e420, 0x1786f: 0x4004e220, + 0x17870: 0x4029cc20, 0x17871: 0x4029ce20, 0x17872: 0x4029d020, 0x17873: 0x4029d220, + 0x17874: 0x4029d420, 0x17875: 0x4029d620, 0x17876: 0x4029d820, 0x17877: 0x4029da20, + 0x17878: 0x4029dc20, 0x17879: 0x4029de20, 0x1787a: 0x40026c20, 0x1787b: 0x40026220, + 0x1787c: 0x40094020, 0x1787d: 0x40094220, 0x1787e: 0x40094420, 0x1787f: 0x4002c420, + // Block 0x5e2, offset 0x17880 + 0x17880: 0x4004d620, 0x17881: 0xcf5399e1, 0x17882: 0x002c0a88, 0x17883: 0x002c3a88, + 0x17884: 0x002c6288, 0x17885: 0xcf5999e1, 0x17886: 0x002d0888, 0x17887: 0x002d2288, + 0x17888: 0x002d6888, 0x17889: 0xcf5f99e1, 0x1788a: 0x002dcc88, 0x1788b: 0x002dfe88, + 0x1788c: 0xc0030002, 0x1788d: 0x002e8288, 0x1788e: 0xc5350a52, 0x1788f: 0xcf6599e1, + 0x17890: 0x002f2c88, 0x17891: 0x002f5688, 0x17892: 0x002f7a88, 0x17893: 0x002fe688, + 0x17894: 0x00302c88, 0x17895: 0xcf6b99e1, 0x17896: 0x0030be88, 0x17897: 0x0030e288, + 0x17898: 0x0030f688, 0x17899: 0x00310088, 0x1789a: 0x00312a88, 0x1789b: 0x4003f820, + 0x1789c: 0x4004e420, 0x1789d: 0x4003fa20, 0x1789e: 0x40062420, 0x1789f: 0x40021620, + 0x178a0: 0x40061e20, 0x178a1: 0xcf5099e1, 0x178a2: 0x402c0a20, 0x178a3: 0x402c3a20, + 0x178a4: 0x402c6220, 0x178a5: 0xcf5699e1, 0x178a6: 0x402d0820, 0x178a7: 0x402d2220, + 0x178a8: 0x402d6820, 0x178a9: 0xcf5c99e1, 0x178aa: 0x402dcc20, 0x178ab: 0x402dfe20, + 0x178ac: 0xc0000002, 0x178ad: 0x402e8220, 0x178ae: 0xc5330a41, 0x178af: 0xcf6299e1, + 0x178b0: 0x402f2c20, 0x178b1: 0x402f5620, 0x178b2: 0x402f7a20, 0x178b3: 0x402fe620, + 0x178b4: 0x40302c20, 0x178b5: 0xcf6899e1, 0x178b6: 0x4030be20, 0x178b7: 0x4030e220, + 0x178b8: 0x4030f620, 0x178b9: 0x40310020, 0x178ba: 0x40312a20, 0x178bb: 0x4003fc20, + 0x178bc: 0x40094820, 0x178bd: 0x4003fe20, 0x178be: 0x40094c20, 0x178bf: 0xa0000000, + // Block 0x5e3, offset 0x178c0 + 0x178c0: 0xe00008f5, 0x178c1: 0x002bdea3, 0x178c2: 0xe0000921, 0x178c3: 0xe0000969, + 0x178c4: 0xe000095b, 0x178c5: 0xe000094d, 0x178c6: 0xe00009dd, 0x178c7: 0xe0000a53, + 0x178c8: 0xe0000ae8, 0x178c9: 0x002c98a3, 0x178ca: 0xe0000af4, 0x178cb: 0xe0000b20, + 0x178cc: 0xe0000c2b, 0x178cd: 0x002d9aa3, 0x178ce: 0xe0000c37, 0x178cf: 0xe0000c43, + 0x178d0: 0xe0000ab3, 0x178d1: 0xe0000d63, 0x178d2: 0xe0000d9a, 0x178d3: 0x002ee2a3, + 0x178d4: 0xe0000da6, 0x178d5: 0xe0000de6, 0x178d6: 0xe0000dd2, 0x178d7: 0x40093e20, + 0x178d8: 0xe0000e12, 0x178d9: 0xe0000fe1, 0x178da: 0x00306ca3, 0x178db: 0xe0000fed, + 0x178dc: 0xe0000fff, 0x178dd: 0xe0001102, 0x178de: 0x00318888, 0x178df: 0xe0000f7b, + 0x178e0: 0xe00008f2, 0x178e1: 0x402bde21, 0x178e2: 0xe000091e, 0x178e3: 0xe0000966, + 0x178e4: 0xe0000958, 0x178e5: 0xe000094a, 0x178e6: 0xe00009d5, 0x178e7: 0xe0000a4d, + 0x178e8: 0xe0000ae5, 0x178e9: 0x402c9821, 0x178ea: 0xe0000af1, 0x178eb: 0xe0000b1d, + 0x178ec: 0xe0000c28, 0x178ed: 0x402d9a21, 0x178ee: 0xe0000c34, 0x178ef: 0xe0000c40, + 0x178f0: 0xe0000aad, 0x178f1: 0xe0000d60, 0x178f2: 0xe0000d97, 0x178f3: 0x402ee221, + 0x178f4: 0xe0000da3, 0x178f5: 0xe0000de3, 0x178f6: 0xe0000dcf, 0x178f7: 0x40093c20, + 0x178f8: 0xe0000e0f, 0x178f9: 0xe0000fde, 0x178fa: 0x40306c21, 0x178fb: 0xe0000fea, + 0x178fc: 0xe0000ffc, 0x178fd: 0xe00010ff, 0x178fe: 0x40318820, 0x178ff: 0xe0001114, + // Block 0x5e4, offset 0x17900 + 0x17900: 0x002bdec3, 0x17901: 0x402bde22, 0x17902: 0xe00008fb, 0x17903: 0xe00008f8, + 0x17904: 0xe000097d, 0x17905: 0xe000097a, 0x17906: 0xe0000a38, 0x17907: 0xe0000a35, + 0x17908: 0xe0000a3e, 0x17909: 0xe0000a3b, 0x1790a: 0xe0000a4a, 0x1790b: 0xe0000a47, + 0x1790c: 0xe0000a44, 0x1790d: 0xe0000a41, 0x1790e: 0xe0000a86, 0x1790f: 0xe0000a83, + 0x17910: 0xe0000aaa, 0x17911: 0xe0000aa7, 0x17912: 0x002c98c3, 0x17913: 0x402c9822, + 0x17914: 0xe0000aee, 0x17915: 0xe0000aeb, 0x17916: 0xe0000b2c, 0x17917: 0xe0000b29, + 0x17918: 0xe0000b40, 0x17919: 0xe0000b3d, 0x1791a: 0xe0000b1a, 0x1791b: 0xe0000b17, + 0x1791c: 0xe0000bb8, 0x1791d: 0xe0000bb5, 0x1791e: 0xe0000bb2, 0x1791f: 0xe0000baf, + 0x17920: 0xe0000bc4, 0x17921: 0xe0000bc1, 0x17922: 0xe0000bca, 0x17923: 0xe0000bc7, + 0x17924: 0xe0000bee, 0x17925: 0xe0000beb, 0x17926: 0xe0000c1b, 0x17927: 0xe0000c18, + 0x17928: 0xe0000c51, 0x17929: 0xe0000c4e, 0x1792a: 0x002d9ac3, 0x1792b: 0x402d9a22, + 0x1792c: 0xe0000c31, 0x1792d: 0xe0000c2e, 0x1792e: 0xe0000c5a, 0x1792f: 0xe0000c57, + 0x17930: 0xe0000c54, 0x17931: 0x402da220, 0x17932: 0xf0000a0a, 0x17933: 0xf0000404, + 0x17934: 0xe0000c8a, 0x17935: 0xe0000c87, 0x17936: 0xe0000c9f, 0x17937: 0xe0000c9c, + 0x17938: 0x402f7220, 0x17939: 0xe0000ccc, 0x1793a: 0xe0000cc9, 0x1793b: 0xe0000cd8, + 0x1793c: 0xe0000cd5, 0x1793d: 0xe0000cd2, 0x1793e: 0xe0000ccf, 0x1793f: 0xe0000d04, + // Block 0x5e5, offset 0x17940 + 0x17940: 0xe0000cfe, 0x17941: 0xe0000cf8, 0x17942: 0xe0000cf5, 0x17943: 0xe0000d51, + 0x17944: 0xe0000d4e, 0x17945: 0xe0000d6f, 0x17946: 0xe0000d6c, 0x17947: 0xe0000d5d, + 0x17948: 0xe0000d5a, 0x17949: 0xf0000404, 0x1794a: 0x002ea086, 0x1794b: 0x002ea085, + 0x1794c: 0x002ee2c3, 0x1794d: 0x402ee222, 0x1794e: 0xe0000da0, 0x1794f: 0xe0000d9d, + 0x17950: 0xe0000de0, 0x17951: 0xe0000ddd, 0x17952: 0xe0000e93, 0x17953: 0xe0000e8f, + 0x17954: 0xe0000eca, 0x17955: 0xe0000ec7, 0x17956: 0xe0000edc, 0x17957: 0xe0000ed9, + 0x17958: 0xe0000ed0, 0x17959: 0xe0000ecd, 0x1795a: 0xe0000f1f, 0x1795b: 0xe0000f1c, + 0x1795c: 0xe0000f2d, 0x1795d: 0xe0000f2a, 0x1795e: 0xe0000f47, 0x1795f: 0xe0000f44, + 0x17960: 0xe0000f33, 0x17961: 0xe0000f30, 0x17962: 0xe0000f99, 0x17963: 0xe0000f96, + 0x17964: 0xe0000f8a, 0x17965: 0xe0000f87, 0x17966: 0x00303688, 0x17967: 0x40303620, + 0x17968: 0xe000102b, 0x17969: 0xe0001028, 0x1796a: 0x00306cc3, 0x1796b: 0x40306c22, + 0x1796c: 0xe0000fe7, 0x1796d: 0xe0000fe4, 0x1796e: 0xe0000ff9, 0x1796f: 0xe0000ff6, + 0x17970: 0xe0001025, 0x17971: 0xe0001022, 0x17972: 0xe0001039, 0x17973: 0xe0001036, + 0x17974: 0xe00010d8, 0x17975: 0xe00010d5, 0x17976: 0xe000110e, 0x17977: 0xe000110b, + 0x17978: 0xe0001117, 0x17979: 0xe000113b, 0x1797a: 0xe0001138, 0x1797b: 0xe000114d, + 0x1797c: 0xe000114a, 0x1797d: 0xe0001147, 0x1797e: 0xe0001144, 0x1797f: 0xe0000f64, + // Block 0x5e6, offset 0x17980 + 0x17980: 0x40321220, 0x17981: 0x40321a20, 0x17982: 0x40322220, 0x17983: 0x40322a20, + 0x17984: 0xe0000ad5, 0x17985: 0xe0000ad1, 0x17986: 0xe0000acd, 0x17987: 0xf0000a0a, + 0x17988: 0xf000040a, 0x17989: 0xf0000404, 0x1798a: 0xf0000a0a, 0x1798b: 0xf000040a, + 0x1798c: 0xf0000404, 0x1798d: 0xe0000947, 0x1798e: 0xe0000944, 0x1798f: 0xe0000c3d, + 0x17990: 0xe0000c3a, 0x17991: 0xe0000dcc, 0x17992: 0xe0000dc9, 0x17993: 0xe0000ff3, + 0x17994: 0xe0000ff0, 0x17995: 0xe000a9d3, 0x17996: 0xe000a9d0, 0x17997: 0xe000ae82, + 0x17998: 0xe000ae7f, 0x17999: 0xe0001016, 0x1799a: 0xe0001012, 0x1799b: 0xe000100e, + 0x1799c: 0xe000100a, 0x1799d: 0x402cae20, 0x1799e: 0xe000ae28, 0x1799f: 0xe000ae25, + 0x179a0: 0xe000ae2e, 0x179a1: 0xe000ae2b, 0x179a2: 0xe00009f4, 0x179a3: 0xe00009ef, + 0x179a4: 0x002d3a88, 0x179a5: 0x402d3a20, 0x179a6: 0xe0000bbe, 0x179a7: 0xe0000bbb, + 0x179a8: 0xe0000c99, 0x179a9: 0xe0000c96, 0x179aa: 0xe0000e20, 0x179ab: 0xe0000e1d, + 0x179ac: 0xe000ae7c, 0x179ad: 0xe000ae79, 0x179ae: 0xe0001162, 0x179af: 0xe000115f, + 0x179b0: 0xe0000c8d, 0x179b1: 0xf0000a0a, 0x179b2: 0xf000040a, 0x179b3: 0xf0000404, + 0x179b4: 0xe0000bac, 0x179b5: 0xe0000ba9, 0x179b6: 0x002d7888, 0x179b7: 0x00319488, + 0x179b8: 0xe0000d57, 0x179b9: 0xe0000d54, 0x179ba: 0xe000ae22, 0x179bb: 0xe000ae1f, + 0x179bc: 0xe00009ea, 0x179bd: 0xe00009e5, 0x179be: 0xe0000e19, 0x179bf: 0xe0000e15, + // Block 0x5e7, offset 0x179c0 + 0x179c0: 0xe000098f, 0x179c1: 0xe000098c, 0x179c2: 0xe0000995, 0x179c3: 0xe0000992, + 0x179c4: 0xe0000b62, 0x179c5: 0xe0000b5f, 0x179c6: 0xe0000b68, 0x179c7: 0xe0000b65, + 0x179c8: 0xe0000c6c, 0x179c9: 0xe0000c69, 0x179ca: 0xe0000c72, 0x179cb: 0xe0000c6f, + 0x179cc: 0xe0000e4a, 0x179cd: 0xe0000e47, 0x179ce: 0xe0000e50, 0x179cf: 0xe0000e4d, + 0x179d0: 0xe0000ee8, 0x179d1: 0xe0000ee5, 0x179d2: 0xe0000eee, 0x179d3: 0xe0000eeb, + 0x179d4: 0xe0001053, 0x179d5: 0xe0001050, 0x179d6: 0xe0001059, 0x179d7: 0xe0001056, + 0x179d8: 0xe0000f61, 0x179d9: 0xe0000f5e, 0x179da: 0xe0000fa5, 0x179db: 0xe0000fa2, + 0x179dc: 0x00312288, 0x179dd: 0x40312220, 0x179de: 0xe0000bf4, 0x179df: 0xe0000bf1, + 0x179e0: 0x002ebc88, 0x179e1: 0x402c8c20, 0x179e2: 0x002f2288, 0x179e3: 0x402f2220, + 0x179e4: 0x00314088, 0x179e5: 0x40314020, 0x179e6: 0xe000096f, 0x179e7: 0xe000096c, + 0x179e8: 0xe0000b32, 0x179e9: 0xe0000b2f, 0x179ea: 0xe000ae6a, 0x179eb: 0xe000ae67, + 0x179ec: 0xe000ae70, 0x179ed: 0xe000ae6d, 0x179ee: 0xe0000e04, 0x179ef: 0xe0000e01, + 0x179f0: 0xe000ae76, 0x179f1: 0xe000ae73, 0x179f2: 0xe0001129, 0x179f3: 0xe0001126, + 0x179f4: 0x402e5e20, 0x179f5: 0x402ed020, 0x179f6: 0x40305a20, 0x179f7: 0x402dd420, + 0x179f8: 0xe0000abf, 0x179f9: 0xe0000ec4, 0x179fa: 0x002be888, 0x179fb: 0x002c4488, + 0x179fc: 0x402c4420, 0x179fd: 0x002e3888, 0x179fe: 0x00303e88, 0x179ff: 0x402ffc20, + // Block 0x5e8, offset 0x17a00 + 0x17a00: 0x402f8220, 0x17a01: 0x402fd820, 0x17a02: 0x402ff420, 0x17a03: 0x40300820, + 0x17a04: 0x402df620, 0x17a05: 0x40301a20, 0x17a06: 0x40302420, 0x17a07: 0x40306420, + 0x17a08: 0x40305220, 0x17a09: 0x40307c20, 0x17a0a: 0x4030b420, 0x17a0b: 0x4030cc20, + 0x17a0c: 0x4030da20, 0x17a0d: 0x4030ee20, 0x17a0e: 0x402e7a20, 0x17a0f: 0x40310820, + 0x17a10: 0x40314820, 0x17a11: 0x40315020, 0x17a12: 0x40316420, 0x17a13: 0x40318020, + 0x17a14: 0x4031cc20, 0x17a15: 0x4031e820, 0x17a16: 0x40320a20, 0x17a17: 0x40323220, + 0x17a18: 0x40323a20, 0x17a19: 0x402c1220, 0x17a1a: 0x402cf820, 0x17a1b: 0x402d4c20, + 0x17a1c: 0x402d7020, 0x17a1d: 0x402de620, 0x17a1e: 0x402e1a20, 0x17a1f: 0x402e2a20, + 0x17a20: 0x402f6220, 0x17a21: 0x4031fa20, 0x17a22: 0x40320220, 0x17a23: 0xe0000aca, + 0x17a24: 0xe0000adc, 0x17a25: 0xe0000ad9, 0x17a26: 0xe0000fcc, 0x17a27: 0xe0000fcf, + 0x17a28: 0xe0000fba, 0x17a29: 0xe0000ba1, 0x17a2a: 0xe0000d11, 0x17a2b: 0xe0000d18, + 0x17a2c: 0x40324220, 0x17a2d: 0x40324a20, 0x17a2e: 0x40309020, 0x17a2f: 0x40309820, + 0x17a30: 0x002d6894, 0x17a31: 0x002d8094, 0x17a32: 0x002dcc94, 0x17a33: 0x002f7a94, + 0x17a34: 0x002f9894, 0x17a35: 0x002fac94, 0x17a36: 0x002fd894, 0x17a37: 0x0030e294, + 0x17a38: 0x00310094, 0x17a39: 0x40064020, 0x17a3a: 0x40064420, 0x17a3b: 0x40312c20, + 0x17a3c: 0x4031de20, 0x17a3d: 0x00312c83, 0x17a3e: 0x4031e220, 0x17a3f: 0x4031f020, + // Block 0x5e9, offset 0x17a40 + 0x17a40: 0xe00009b1, 0x17a41: 0xe00009ae, 0x17a42: 0xe0000a22, 0x17a43: 0xe0000a1f, + 0x17a44: 0xe0000a28, 0x17a45: 0xe0000a25, 0x17a46: 0xe0000a2e, 0x17a47: 0xe0000a2b, + 0x17a48: 0xe0000a5a, 0x17a49: 0xe0000a56, 0x17a4a: 0xe0000a8c, 0x17a4b: 0xe0000a89, + 0x17a4c: 0xe0000a98, 0x17a4d: 0xe0000a95, 0x17a4e: 0xe0000aa4, 0x17a4f: 0xe0000aa1, + 0x17a50: 0xe0000a92, 0x17a51: 0xe0000a8f, 0x17a52: 0xe0000a9e, 0x17a53: 0xe0000a9b, + 0x17a54: 0xe000ae40, 0x17a55: 0xe000ae3d, 0x17a56: 0xe000ae3a, 0x17a57: 0xe000ae37, + 0x17a58: 0xe0000b7c, 0x17a59: 0xe0000b79, 0x17a5a: 0xe0000b82, 0x17a5b: 0xe0000b7f, + 0x17a5c: 0xe0000b39, 0x17a5d: 0xe0000b35, 0x17a5e: 0xe0000b8c, 0x17a5f: 0xe0000b89, + 0x17a60: 0xe0000bd0, 0x17a61: 0xe0000bcd, 0x17a62: 0xe0000c00, 0x17a63: 0xe0000bfd, + 0x17a64: 0xe0000c0c, 0x17a65: 0xe0000c09, 0x17a66: 0xe0000bfa, 0x17a67: 0xe0000bf7, + 0x17a68: 0xe0000c06, 0x17a69: 0xe0000c03, 0x17a6a: 0xe0000c12, 0x17a6b: 0xe0000c0f, + 0x17a6c: 0xe0000c7e, 0x17a6d: 0xe0000c7b, 0x17a6e: 0xe000ae46, 0x17a6f: 0xe000ae43, + 0x17a70: 0xe0000c93, 0x17a71: 0xe0000c90, 0x17a72: 0xe0000cab, 0x17a73: 0xe0000ca8, + 0x17a74: 0xe0000cb1, 0x17a75: 0xe0000cae, 0x17a76: 0xe0000cde, 0x17a77: 0xe0000cdb, + 0x17a78: 0xe0000ce5, 0x17a79: 0xe0000ce1, 0x17a7a: 0xe0000cf2, 0x17a7b: 0xe0000cef, + 0x17a7c: 0xe0000cec, 0x17a7d: 0xe0000ce9, 0x17a7e: 0xe0000d1e, 0x17a7f: 0xe0000d1b, + // Block 0x5ea, offset 0x17a80 + 0x17a80: 0xe0000d24, 0x17a81: 0xe0000d21, 0x17a82: 0xe0000d2a, 0x17a83: 0xe0000d27, + 0x17a84: 0xe0000d69, 0x17a85: 0xe0000d66, 0x17a86: 0xe0000d7b, 0x17a87: 0xe0000d78, + 0x17a88: 0xe0000d87, 0x17a89: 0xe0000d84, 0x17a8a: 0xe0000d81, 0x17a8b: 0xe0000d7e, + 0x17a8c: 0xe000ae52, 0x17a8d: 0xe000ae4f, 0x17a8e: 0xe0000df5, 0x17a8f: 0xe0000df1, + 0x17a90: 0xe000ae64, 0x17a91: 0xe000ae61, 0x17a92: 0xe000ae5e, 0x17a93: 0xe000ae5b, + 0x17a94: 0xe0000ea7, 0x17a95: 0xe0000ea4, 0x17a96: 0xe0000ead, 0x17a97: 0xe0000eaa, + 0x17a98: 0xe0000ed6, 0x17a99: 0xe0000ed3, 0x17a9a: 0xe0000ef4, 0x17a9b: 0xe0000ef1, + 0x17a9c: 0xe0000efb, 0x17a9d: 0xe0000ef7, 0x17a9e: 0xe0000f02, 0x17a9f: 0xe0000eff, + 0x17aa0: 0xe0000f41, 0x17aa1: 0xe0000f3e, 0x17aa2: 0xe0000f53, 0x17aa3: 0xe0000f50, + 0x17aa4: 0xe0000f26, 0x17aa5: 0xe0000f22, 0x17aa6: 0xe0000f3a, 0x17aa7: 0xe0000f36, + 0x17aa8: 0xe0000f5a, 0x17aa9: 0xe0000f56, 0x17aaa: 0xe0000f93, 0x17aab: 0xe0000f90, + 0x17aac: 0xe0000f9f, 0x17aad: 0xe0000f9c, 0x17aae: 0xe0000fb1, 0x17aaf: 0xe0000fae, + 0x17ab0: 0xe0000fab, 0x17ab1: 0xe0000fa8, 0x17ab2: 0xe0001093, 0x17ab3: 0xe0001090, + 0x17ab4: 0xe000109f, 0x17ab5: 0xe000109c, 0x17ab6: 0xe0001099, 0x17ab7: 0xe0001096, + 0x17ab8: 0xe000ae88, 0x17ab9: 0xe000ae85, 0x17aba: 0xe000a9d3, 0x17abb: 0xe000a9d0, + 0x17abc: 0xe00010a9, 0x17abd: 0xe00010a6, 0x17abe: 0xe00010af, 0x17abf: 0xe00010ac, + // Block 0x5eb, offset 0x17ac0 + 0x17ac0: 0xe00010d2, 0x17ac1: 0xe00010cf, 0x17ac2: 0xe00010cc, 0x17ac3: 0xe00010c9, + 0x17ac4: 0xe00010e1, 0x17ac5: 0xe00010de, 0x17ac6: 0xe00010e7, 0x17ac7: 0xe00010e4, + 0x17ac8: 0xe00010ed, 0x17ac9: 0xe00010ea, 0x17aca: 0xe00010fc, 0x17acb: 0xe00010f9, + 0x17acc: 0xe00010f6, 0x17acd: 0xe00010f3, 0x17ace: 0xe0001123, 0x17acf: 0xe0001120, + 0x17ad0: 0xe0001141, 0x17ad1: 0xe000113e, 0x17ad2: 0xe0001153, 0x17ad3: 0xe0001150, + 0x17ad4: 0xe0001159, 0x17ad5: 0xe0001156, 0x17ad6: 0xe0000c15, 0x17ad7: 0xe0000f8d, + 0x17ad8: 0xe00010db, 0x17ad9: 0xe0001111, 0x17ada: 0xf0000404, 0x17adb: 0xe0000f70, + 0x17adc: 0x40300420, 0x17add: 0x40300620, 0x17ade: 0xe0000f7f, 0x17adf: 0x402c9620, + 0x17ae0: 0xe000099b, 0x17ae1: 0xe0000998, 0x17ae2: 0xe0000989, 0x17ae3: 0xe0000986, + 0x17ae4: 0xe000ae1c, 0x17ae5: 0xe000ae19, 0x17ae6: 0xe0000930, 0x17ae7: 0xe000092c, + 0x17ae8: 0xe0000940, 0x17ae9: 0xe000093c, 0x17aea: 0xe0000938, 0x17aeb: 0xe0000934, + 0x17aec: 0xe00009aa, 0x17aed: 0xe00009a6, 0x17aee: 0xe000ae16, 0x17aef: 0xe000ae13, + 0x17af0: 0xe000090a, 0x17af1: 0xe0000906, 0x17af2: 0xe000091a, 0x17af3: 0xe0000916, + 0x17af4: 0xe0000912, 0x17af5: 0xe000090e, 0x17af6: 0xe00009a2, 0x17af7: 0xe000099e, + 0x17af8: 0xe0000b6e, 0x17af9: 0xe0000b6b, 0x17afa: 0xe0000b5c, 0x17afb: 0xe0000b59, + 0x17afc: 0xe0000b26, 0x17afd: 0xe0000b23, 0x17afe: 0xe000ae34, 0x17aff: 0xe000ae31, + // Block 0x5ec, offset 0x17b00 + 0x17b00: 0xe0000b03, 0x17b01: 0xe0000aff, 0x17b02: 0xe0000b13, 0x17b03: 0xe0000b0f, + 0x17b04: 0xe0000b0b, 0x17b05: 0xe0000b07, 0x17b06: 0xe0000b75, 0x17b07: 0xe0000b71, + 0x17b08: 0xe0000c66, 0x17b09: 0xe0000c63, 0x17b0a: 0xe0000c78, 0x17b0b: 0xe0000c75, + 0x17b0c: 0xe0000e84, 0x17b0d: 0xe0000e81, 0x17b0e: 0xe0000e44, 0x17b0f: 0xe0000e41, + 0x17b10: 0xe000ae4c, 0x17b11: 0xe000ae49, 0x17b12: 0xe0000db5, 0x17b13: 0xe0000db1, + 0x17b14: 0xe0000dc5, 0x17b15: 0xe0000dc1, 0x17b16: 0xe0000dbd, 0x17b17: 0xe0000db9, + 0x17b18: 0xe0000e8b, 0x17b19: 0xe0000e87, 0x17b1a: 0xe000ae58, 0x17b1b: 0xe000ae55, + 0x17b1c: 0xe0000e65, 0x17b1d: 0xe0000e61, 0x17b1e: 0xe0000e75, 0x17b1f: 0xe0000e71, + 0x17b20: 0xe0000e6d, 0x17b21: 0xe0000e69, 0x17b22: 0xe0000e7d, 0x17b23: 0xe0000e79, + 0x17b24: 0xe000108d, 0x17b25: 0xe000108a, 0x17b26: 0xe000104d, 0x17b27: 0xe000104a, + 0x17b28: 0xe000ae8e, 0x17b29: 0xe000ae8b, 0x17b2a: 0xe000106e, 0x17b2b: 0xe000106a, + 0x17b2c: 0xe000107e, 0x17b2d: 0xe000107a, 0x17b2e: 0xe0001076, 0x17b2f: 0xe0001072, + 0x17b30: 0xe0001086, 0x17b31: 0xe0001082, 0x17b32: 0xe0001108, 0x17b33: 0xe0001105, + 0x17b34: 0xe0001135, 0x17b35: 0xe0001132, 0x17b36: 0xe000112f, 0x17b37: 0xe000112c, + 0x17b38: 0xe000111d, 0x17b39: 0xe000111a, 0x17b3a: 0xe0000d0a, 0x17b3b: 0xe0000d07, + 0x17b3c: 0x0030d888, 0x17b3d: 0x4030d820, 0x17b3e: 0x00312088, 0x17b3f: 0x40312020, + // Block 0x5ed, offset 0x17b40 + 0x17b40: 0xa0000000, 0x17b41: 0xa0000000, 0x17b42: 0xa0000000, 0x17b43: 0xa0000000, + 0x17b44: 0xa0000000, 0x17b45: 0xa0000000, 0x17b46: 0xa0000000, 0x17b47: 0xa0000000, + 0x17b48: 0xa0000000, 0x17b49: 0x40020020, 0x17b4a: 0x40020220, 0x17b4b: 0x40020420, + 0x17b4c: 0x40020620, 0x17b4d: 0x40020820, 0x17b4e: 0xa0000000, 0x17b4f: 0xa0000000, + 0x17b50: 0xa0000000, 0x17b51: 0xa0000000, 0x17b52: 0xa0000000, 0x17b53: 0xa0000000, + 0x17b54: 0xa0000000, 0x17b55: 0xa0000000, 0x17b56: 0xa0000000, 0x17b57: 0xa0000000, + 0x17b58: 0xa0000000, 0x17b59: 0xa0000000, 0x17b5a: 0xa0000000, 0x17b5b: 0xa0000000, + 0x17b5c: 0xa0000000, 0x17b5d: 0xa0000000, 0x17b5e: 0xa0000000, 0x17b5f: 0xa0000000, + 0x17b60: 0x40021220, 0x17b61: 0x4002ba20, 0x17b62: 0x4003e020, 0x17b63: 0x4004ea20, + 0x17b64: 0x4027de20, 0x17b65: 0x4004ec20, 0x17b66: 0x4004e620, 0x17b67: 0x4003d220, + 0x17b68: 0x4003f420, 0x17b69: 0x4003f620, 0x17b6a: 0x4004d820, 0x17b6b: 0x40093820, + 0x17b6c: 0x40024020, 0x17b6d: 0x40021a20, 0x17b6e: 0x4002e420, 0x17b6f: 0x4004e220, + 0x17b70: 0x4029cc20, 0x17b71: 0x4029ce20, 0x17b72: 0x4029d020, 0x17b73: 0x4029d220, + 0x17b74: 0x4029d420, 0x17b75: 0x4029d620, 0x17b76: 0x4029d820, 0x17b77: 0x4029da20, + 0x17b78: 0x4029dc20, 0x17b79: 0x4029de20, 0x17b7a: 0x40026c20, 0x17b7b: 0x40026220, + 0x17b7c: 0x40094020, 0x17b7d: 0x40094220, 0x17b7e: 0x40094420, 0x17b7f: 0x4002c420, + // Block 0x5ee, offset 0x17b80 + 0x17b80: 0x4004d620, 0x17b81: 0x002bde88, 0x17b82: 0x002c0a88, 0x17b83: 0xc3350911, + 0x17b84: 0x002c6288, 0x17b85: 0x002c9888, 0x17b86: 0x002d0888, 0x17b87: 0xc33900d1, + 0x17b88: 0x002d6888, 0x17b89: 0xc33b0931, 0x17b8a: 0x002dcc88, 0x17b8b: 0x002dfe88, + 0x17b8c: 0xc0030002, 0x17b8d: 0x002e8288, 0x17b8e: 0x002e9e88, 0x17b8f: 0xc33f0071, + 0x17b90: 0x002f2c88, 0x17b91: 0x002f5688, 0x17b92: 0x002f7a88, 0x17b93: 0xc3430911, + 0x17b94: 0x00302c88, 0x17b95: 0xc3470071, 0x17b96: 0x0030be88, 0x17b97: 0x0030e288, + 0x17b98: 0x0030f688, 0x17b99: 0x00310088, 0x17b9a: 0x00312a88, 0x17b9b: 0x4003f820, + 0x17b9c: 0x4004e420, 0x17b9d: 0x4003fa20, 0x17b9e: 0x40062420, 0x17b9f: 0x40021620, + 0x17ba0: 0x40061e20, 0x17ba1: 0x402bde20, 0x17ba2: 0x402c0a20, 0x17ba3: 0xc3330911, + 0x17ba4: 0x402c6220, 0x17ba5: 0x402c9820, 0x17ba6: 0x402d0820, 0x17ba7: 0xc33700d1, + 0x17ba8: 0x402d6820, 0x17ba9: 0x402d9a20, 0x17baa: 0x402dcc20, 0x17bab: 0x402dfe20, + 0x17bac: 0xc0000002, 0x17bad: 0x402e8220, 0x17bae: 0x402e9e20, 0x17baf: 0xc33d0071, + 0x17bb0: 0x402f2c20, 0x17bb1: 0x402f5620, 0x17bb2: 0x402f7a20, 0x17bb3: 0xc3410911, + 0x17bb4: 0x40302c20, 0x17bb5: 0xc3450071, 0x17bb6: 0x4030be20, 0x17bb7: 0x4030e220, + 0x17bb8: 0x4030f620, 0x17bb9: 0x40310020, 0x17bba: 0x40312a20, 0x17bbb: 0x4003fc20, + 0x17bbc: 0x40094820, 0x17bbd: 0x4003fe20, 0x17bbe: 0x40094c20, 0x17bbf: 0xa0000000, + // Block 0x5ef, offset 0x17bc0 + 0x17bc0: 0x00093685, 0x17bc1: 0x40083620, 0x17bc2: 0x40083820, 0x17bc3: 0x40083a20, + 0x17bc4: 0x40083c20, 0x17bc5: 0x002c628b, 0x17bc6: 0x002c6285, 0x17bc7: 0x002c9885, + 0x17bc8: 0x002d9a85, 0x17bc9: 0x002dcc85, 0x17bca: 0x40083e20, 0x17bcb: 0x400a6e20, + 0x17bcc: 0x40084020, 0x17bcd: 0xe00009c4, 0x17bce: 0x402d1e20, 0x17bcf: 0x40084220, + 0x17bd0: 0xe00002cb, 0x17bd1: 0xe00002d3, 0x17bd2: 0xe00002b2, 0x17bd3: 0xe00002bb, + 0x17bd4: 0xe00003cd, 0x17bd5: 0xe00002c3, 0x17bd6: 0xe00003d1, 0x17bd7: 0xe00004ab, + 0x17bd8: 0xe0000579, 0x17bd9: 0xe00002c7, 0x17bda: 0xe0000640, 0x17bdb: 0xe00002cf, + 0x17bdc: 0xe00004af, 0x17bdd: 0xe0000644, 0x17bde: 0xe0000798, 0x17bdf: 0xf0001e1e, + 0x17be0: 0x002d9a8a, 0x17be1: 0xe00027d4, 0x17be2: 0xe00027db, 0x17be3: 0xe00027ee, + 0x17be4: 0x0030be8a, 0x17be5: 0xe0002848, 0x17be6: 0xe000284f, 0x17be7: 0xe00010bb, + 0x17be8: 0xe00027f4, 0x17be9: 0x0030f68a, 0x17bea: 0xe0002883, 0x17beb: 0xe000288a, + 0x17bec: 0x002e228a, 0x17bed: 0x002c3a8a, 0x17bee: 0x002c628a, 0x17bef: 0x002e828a, + 0x17bf0: 0x002d9a84, 0x17bf1: 0xf0001f04, 0x17bf2: 0xf0000404, 0x17bf3: 0xf0001f04, + 0x17bf4: 0x0030be84, 0x17bf5: 0xf0001f04, 0x17bf6: 0xf0000404, 0x17bf7: 0xe00010b6, + 0x17bf8: 0xf0001f04, 0x17bf9: 0x0030f684, 0x17bfa: 0xf0001f04, 0x17bfb: 0xf0000404, + 0x17bfc: 0x002e2284, 0x17bfd: 0x002c3a84, 0x17bfe: 0x002c6284, 0x17bff: 0x002e8284, + // Block 0x5f0, offset 0x17c00 + 0x17c00: 0xf0001f04, 0x17c01: 0xf0001f04, 0x17c02: 0xf0001f04, 0x17c03: 0xf0001f04, + 0x17c04: 0xf0001f04, 0x17c05: 0xf0001f04, 0x17c06: 0xf0001f04, 0x17c07: 0xf0001f04, + 0x17c08: 0xf0001f04, 0x17c09: 0xf0001f04, 0x17c0a: 0xf0001f04, + 0x17c10: 0xf0000a04, 0x17c11: 0xf0000a04, 0x17c12: 0xf0000a04, 0x17c13: 0xf0000a04, + 0x17c14: 0xf0000a04, 0x17c15: 0xf0000a04, 0x17c16: 0xf0000a04, 0x17c17: 0xf0000a04, + 0x17c18: 0xe00024b3, 0x17c19: 0xf0000a04, 0x17c1a: 0xf0000a04, 0x17c1b: 0xf0000a04, + 0x17c1c: 0xf0000a04, 0x17c1d: 0xf0000a04, 0x17c1e: 0xf0000a04, 0x17c1f: 0xf0000a04, + 0x17c20: 0xf0000a04, 0x17c21: 0xf0000a04, 0x17c22: 0xf0000a04, 0x17c23: 0xf0000a04, + 0x17c24: 0xf0000a04, 0x17c25: 0xf0000a04, 0x17c26: 0xf0000a04, 0x17c27: 0xf0000a04, + 0x17c28: 0xf0000a04, 0x17c29: 0xf0000a04, 0x17c2a: 0xf0000a04, 0x17c2b: 0x002c3a8c, + 0x17c2c: 0x002f7a8c, 0x17c2d: 0xf0000c0c, 0x17c2e: 0xf0000c0c, + 0x17c30: 0x002bde9d, 0x17c31: 0x002c0a9d, 0x17c32: 0x002c3a9d, 0x17c33: 0x002c629d, + 0x17c34: 0x002c989d, 0x17c35: 0x002d089d, 0x17c36: 0x002d229d, 0x17c37: 0x002d689d, + 0x17c38: 0x002d9a9d, 0x17c39: 0x002dcc9d, 0x17c3a: 0x002dfe9d, 0x17c3b: 0x002e229d, + 0x17c3c: 0x002e829d, 0x17c3d: 0x002e9e9d, 0x17c3e: 0x002ee29d, 0x17c3f: 0x002f2c9d, + // Block 0x5f1, offset 0x17c40 + 0x17c40: 0x00352088, 0x17c41: 0x40352020, 0x17c42: 0x40070620, 0x17c43: 0xae608302, + 0x17c44: 0xae605f02, 0x17c45: 0xae602a02, 0x17c46: 0xae602202, 0x17c47: 0xae605f02, + 0x17c48: 0xa0000000, 0x17c49: 0xa0000000, 0x17c4a: 0x00341c88, 0x17c4b: 0x40341c20, + 0x17c4c: 0x00369688, 0x17c4d: 0x40369620, 0x17c4e: 0x00353088, 0x17c4f: 0x40353020, + 0x17c50: 0x00336483, 0x17c51: 0x40336420, 0x17c52: 0x00336a88, 0x17c53: 0x40336a20, + 0x17c54: 0x00337a88, 0x17c55: 0x40337a20, 0x17c56: 0x0033dc88, 0x17c57: 0x4033dc20, + 0x17c58: 0x0033aa88, 0x17c59: 0x4033aa20, 0x17c5a: 0x00345888, 0x17c5b: 0x40345820, + 0x17c5c: 0x00347888, 0x17c5d: 0x40347820, 0x17c5e: 0x00347088, 0x17c5f: 0x40347020, + 0x17c60: 0x00346888, 0x17c61: 0x40346820, 0x17c62: 0x0034ca88, 0x17c63: 0x4034ca20, + 0x17c64: 0x0034dc88, 0x17c65: 0x4034dc20, 0x17c66: 0x00351888, 0x17c67: 0x40351820, + 0x17c68: 0x00372688, 0x17c69: 0x40372620, 0x17c6a: 0x00354488, 0x17c6b: 0x40354420, + 0x17c6c: 0x00355888, 0x17c6d: 0x40355820, 0x17c6e: 0x00359288, 0x17c6f: 0x40359220, + 0x17c70: 0x00359a88, 0x17c71: 0x40359a20, 0x17c72: 0x0035cc88, 0x17c73: 0x4035cc20, + 0x17c74: 0x00360e88, 0x17c75: 0x40360e20, 0x17c76: 0x00362a88, 0x17c77: 0x40362a20, + 0x17c78: 0x00363a88, 0x17c79: 0x40363a20, 0x17c7a: 0x0035d488, 0x17c7b: 0x4035d420, + 0x17c7c: 0x00364488, 0x17c7d: 0x40364420, 0x17c7e: 0x00364c88, 0x17c7f: 0x40364c20, + // Block 0x5f2, offset 0x17c80 + 0x17c80: 0xa0000000, 0x17c81: 0xa0000000, 0x17c82: 0xa0000000, 0x17c83: 0xa0000000, + 0x17c84: 0xa0000000, 0x17c86: 0x40096620, 0x17c87: 0x40096a20, + 0x17c88: 0x40070820, 0x17c89: 0x4004f220, 0x17c8a: 0x4004f620, 0x17c8b: 0x4027e620, + 0x17c8c: 0x40024820, 0x17c8d: 0x40024a20, 0x17c8e: 0x40070e20, 0x17c8f: 0x40071020, + 0x17c90: 0xa0000001, 0x17c91: 0xa0000002, 0x17c92: 0xa0000004, 0x17c93: 0xa0000003, + 0x17c94: 0xa0000005, 0x17c95: 0xae600000, 0x17c96: 0xae600000, 0x17c97: 0xae600000, + 0x17c98: 0xa1e00000, 0x17c99: 0xa1f00000, 0x17c9a: 0xa2000000, 0x17c9b: 0x40026420, + 0x17c9e: 0x40027020, 0x17c9f: 0x4002cc20, + 0x17ca0: 0x403aa220, 0x17ca1: 0x4039a620, 0x17ca2: 0x40393a20, 0x17ca3: 0x40393821, + 0x17ca4: 0x40399c21, 0x17ca5: 0x40392820, 0x17ca6: 0x4039a821, 0x17ca7: 0xcf6e0151, + 0x17ca8: 0xcf729a11, 0x17ca9: 0x40395420, 0x17caa: 0xcf769a11, 0x17cab: 0x40394c20, + 0x17cac: 0xcf7a9a11, 0x17cad: 0x40395620, 0x17cae: 0x40395820, 0x17caf: 0xcf7e9a11, + 0x17cb0: 0x40396220, 0x17cb1: 0xcf829a11, 0x17cb2: 0x40396c20, 0x17cb3: 0x40397020, + 0x17cb4: 0x40397220, 0x17cb5: 0x40397420, 0x17cb6: 0x40397620, 0x17cb7: 0x40397820, + 0x17cb8: 0x40397a20, 0x17cb9: 0x40397c20, 0x17cba: 0x40397e20, 0x17cbb: 0x403a3820, + 0x17cbc: 0x403a3a20, 0x17cbd: 0x403a9c20, 0x17cbe: 0x403a9e20, 0x17cbf: 0x403aa020, + // Block 0x5f3, offset 0x17cc0 + 0x17cc0: 0xa0000000, 0x17cc1: 0x40398020, 0x17cc2: 0x40398220, 0x17cc3: 0x403a1a20, + 0x17cc4: 0xcf8a9a11, 0x17cc5: 0xcf8c9a11, 0x17cc6: 0xcf8e9a11, 0x17cc7: 0x403a6820, + 0x17cc8: 0xcf929a32, 0x17cc9: 0x403a8e20, 0x17cca: 0xcf970171, 0x17ccb: 0xa000c302, + 0x17ccc: 0xa000c502, 0x17ccd: 0xa000c402, 0x17cce: 0xa000bd02, 0x17ccf: 0xa000bf02, + 0x17cd0: 0xa000be02, 0x17cd1: 0xa000c702, 0x17cd2: 0xa220bc02, 0x17cd3: 0xa000c902, + 0x17cd4: 0xa000c602, 0x17cd5: 0xadc0bf02, 0x17cd6: 0xa000c102, 0x17cd7: 0xa000c202, + 0x17cd8: 0xa000c802, 0x17cd9: 0xae60c402, 0x17cda: 0xae60c502, 0x17cdb: 0xae60c602, + 0x17cdc: 0xadc0c702, 0x17cdd: 0xae60c802, 0x17cde: 0xae60c902, 0x17cdf: 0xadc0c002, + 0x17ce0: 0xe000015e, 0x17ce1: 0xe00001e6, 0x17ce2: 0xe0000301, 0x17ce3: 0xe00003db, + 0x17ce4: 0xe00004b6, 0x17ce5: 0xe0000580, 0x17ce6: 0xe000064b, 0x17ce7: 0xe00006f3, + 0x17ce8: 0xe000079f, 0x17ce9: 0xe0000844, 0x17cea: 0x4004ee20, 0x17ceb: 0x40024c20, + 0x17cec: 0x40024e20, 0x17ced: 0x4004de20, 0x17cee: 0x40393a20, 0x17cef: 0x403a1020, + 0x17cf0: 0xa000c002, 0x17cf1: 0x40392420, 0x17cf2: 0x40392220, 0x17cf3: 0x40392a20, + 0x17cf4: 0x00391c84, 0x17cf5: 0xf0000404, 0x17cf6: 0xe000b07a, 0x17cf7: 0xf0000404, + 0x17cf8: 0xf0000404, 0x17cf9: 0xcf789a11, 0x17cfa: 0x40395c20, 0x17cfb: 0x40393e20, + 0x17cfc: 0x40395e20, 0x17cfd: 0x40396020, 0x17cfe: 0xcf749a11, 0x17cff: 0x40396220, + // Block 0x5f4, offset 0x17d00 + 0x17d00: 0x40394220, 0x17d01: 0x40397620, 0x17d02: 0x40397820, 0x17d03: 0x40396620, + 0x17d04: 0x40396820, 0x17d05: 0x40397a20, 0x17d06: 0xcf7c9a11, 0x17d07: 0x40396e20, + 0x17d08: 0xcf809a11, 0x17d09: 0x40398e20, 0x17d0a: 0x40399020, 0x17d0b: 0x40399220, + 0x17d0c: 0x40399420, 0x17d0d: 0x40399620, 0x17d0e: 0x40399820, 0x17d0f: 0x40399a20, + 0x17d10: 0x40399c20, 0x17d11: 0xcf849a11, 0x17d12: 0x4039aa20, 0x17d13: 0x4039ac20, + 0x17d14: 0x4039ae20, 0x17d15: 0x4039b020, 0x17d16: 0x4039b220, 0x17d17: 0x4039b420, + 0x17d18: 0x40396e20, 0x17d19: 0x4039b820, 0x17d1a: 0x4039ca20, 0x17d1b: 0x4039cc20, + 0x17d1c: 0x4039ce20, 0x17d1d: 0x4039e020, 0x17d1e: 0x4039e220, 0x17d1f: 0x4039ea20, + 0x17d20: 0x4039f220, 0x17d21: 0x4039fe20, 0x17d22: 0x403a0020, 0x17d23: 0x403a0220, + 0x17d24: 0x403a0420, 0x17d25: 0x403a0820, 0x17d26: 0x403a0a20, 0x17d27: 0x403a1420, + 0x17d28: 0x403a1620, 0x17d29: 0xcf869a11, 0x17d2a: 0x403a1e20, 0x17d2b: 0x403a2020, + 0x17d2c: 0x403a2220, 0x17d2d: 0x403a2620, 0x17d2e: 0x403a2820, 0x17d2f: 0xcf889a11, + 0x17d30: 0x403a2c20, 0x17d31: 0x403a2e20, 0x17d32: 0x403a3020, 0x17d33: 0x403a3220, + 0x17d34: 0x403a3420, 0x17d35: 0x403a4220, 0x17d36: 0x403a4420, 0x17d37: 0x403a4620, + 0x17d38: 0x403a4820, 0x17d39: 0x403a6020, 0x17d3a: 0xcf909a11, 0x17d3b: 0x403a5a20, + 0x17d3c: 0x403a5c20, 0x17d3d: 0x403a5e20, 0x17d3e: 0x4039a220, 0x17d3f: 0x40396c20, + // Block 0x5f5, offset 0x17d40 + 0x17d40: 0xe000b077, 0x17d41: 0xcf950171, 0x17d42: 0x4039a021, 0x17d43: 0x4039a420, + 0x17d44: 0x403a7620, 0x17d45: 0x403a7820, 0x17d46: 0x403a7a20, 0x17d47: 0x403a7c20, + 0x17d48: 0x403a7e20, 0x17d49: 0x403a8020, 0x17d4a: 0x403a8220, 0x17d4b: 0x403a8420, + 0x17d4c: 0xcf999a11, 0x17d4d: 0x403a9420, 0x17d4e: 0x403a9620, 0x17d4f: 0x403a8620, + 0x17d50: 0x403a9820, 0x17d51: 0x403a9a20, 0x17d52: 0xcf9b0171, 0x17d53: 0x4039ac21, + 0x17d54: 0x4002e820, 0x17d55: 0x403a7220, 0x17d56: 0xae600000, 0x17d57: 0xae600000, + 0x17d58: 0xae600000, 0x17d59: 0xae600000, 0x17d5a: 0xae600000, 0x17d5b: 0xae600000, + 0x17d5c: 0xae600000, 0x17d5d: 0xa0000000, 0x17d5e: 0x40071220, 0x17d5f: 0xae600000, + 0x17d60: 0xae600000, 0x17d61: 0xae600000, 0x17d62: 0xae600000, 0x17d63: 0xadc00000, + 0x17d64: 0xae600000, 0x17d65: 0x003a7484, 0x17d66: 0x003a9084, 0x17d67: 0xae600000, + 0x17d68: 0xae600000, 0x17d69: 0x40071420, 0x17d6a: 0xadc00000, 0x17d6b: 0xae600000, + 0x17d6c: 0xae600000, 0x17d6d: 0xadc00000, 0x17d6e: 0x40399e20, 0x17d6f: 0x4039ba20, + 0x17d70: 0xe0000161, 0x17d71: 0xe00001e9, 0x17d72: 0xe0000304, 0x17d73: 0xe00003de, + 0x17d74: 0xe00004b9, 0x17d75: 0xe0000583, 0x17d76: 0xe000064e, 0x17d77: 0xe00006f6, + 0x17d78: 0xe00007a2, 0x17d79: 0xe0000847, 0x17d7a: 0x4039d020, 0x17d7b: 0x4039e420, + 0x17d7c: 0x4039f420, 0x17d7d: 0xe0001553, 0x17d7e: 0xe0001779, 0x17d7f: 0x403a7020, + // Block 0x5f6, offset 0x17d80 + 0x17d80: 0xe000155f, 0x17d81: 0xe0001565, 0x17d82: 0xe000157a, 0x17d83: 0xe00015b0, + 0x17d84: 0xe00015b6, 0x17d85: 0xe000ae97, 0x17d86: 0xe000ae9d, 0x17d87: 0xe000aea3, + 0x17d88: 0xe000aeb5, 0x17d89: 0xf0001a1a, 0x17d8a: 0xf0001a1a, 0x17d8b: 0xe000aebe, + 0x17d8c: 0xe000aec4, 0x17d8d: 0xe000aeca, 0x17d8e: 0xe000aedc, 0x17d8f: 0xe000289a, + 0x17d90: 0xe00036b1, 0x17d91: 0xe000aee2, 0x17d92: 0xe000aef4, 0x17d93: 0xe00028a0, + 0x17d94: 0xe00036ba, 0x17d95: 0xe000aefd, 0x17d96: 0xe000af03, 0x17d97: 0xe000af09, + 0x17d98: 0xe000af0f, 0x17d99: 0xe000af15, 0x17d9a: 0xe000af18, 0x17d9b: 0xe000af1e, + 0x17d9c: 0xe000af2d, 0x17d9d: 0xe000af36, 0x17d9e: 0xe000af3f, 0x17d9f: 0xe000af4e, + 0x17da0: 0xe000af8a, 0x17da1: 0xe000af99, 0x17da2: 0xe000af9f, 0x17da3: 0xe000afa5, + 0x17da4: 0xe000afab, 0x17da5: 0xe000afb7, 0x17da6: 0xe000afbd, 0x17da7: 0xe000afc6, + 0x17da8: 0xe000afcf, 0x17da9: 0xe000afd5, 0x17daa: 0xe000afdb, 0x17dab: 0xe000afe1, + 0x17dac: 0xe000afe7, 0x17dad: 0xe000afed, 0x17dae: 0xe000aff3, 0x17daf: 0xe000aff9, + 0x17db0: 0xe000afff, 0x17db1: 0xe00028e2, 0x17db2: 0xe0003708, 0x17db3: 0xe000b005, + 0x17db4: 0xe000b00b, 0x17db5: 0xe00028e8, 0x17db6: 0xe000370e, 0x17db7: 0xf0001a1a, + 0x17db8: 0xe000371a, 0x17db9: 0xe0003720, 0x17dba: 0xe0003726, 0x17dbb: 0xe0003732, + 0x17dbc: 0xe000373e, 0x17dbd: 0xf0001a1a, 0x17dbe: 0xf0001a1a, 0x17dbf: 0xe000b017, + // Block 0x5f7, offset 0x17dc0 + 0x17dc0: 0xe000b01d, 0x17dc1: 0xe000b023, 0x17dc2: 0xe000b02f, 0x17dc3: 0xe00028f4, + 0x17dc4: 0xe000374d, 0x17dc5: 0xe000b038, 0x17dc6: 0xe000b03e, 0x17dc7: 0xe000b044, + 0x17dc8: 0xe000b04d, 0x17dc9: 0xe00028f7, 0x17dca: 0xe0003750, 0x17dcb: 0xe000b053, + 0x17dcc: 0xe000b059, 0x17dcd: 0xe000b05f, 0x17dce: 0xe000b071, 0x17dcf: 0xe00028fd, + 0x17dd0: 0xe000375c, 0x17dd1: 0xe0003765, 0x17dd2: 0xe000376b, 0x17dd3: 0xf0001a1a, + 0x17dd4: 0xf0001a1a, 0x17dd5: 0xe0003786, 0x17dd6: 0xe000378c, 0x17dd7: 0xe0003792, + 0x17dd8: 0xe00037a4, 0x17dd9: 0xf0001a1a, 0x17dda: 0xf0001a1a, 0x17ddb: 0xe000af21, + 0x17ddc: 0xe000af24, 0x17ddd: 0xe000377d, 0x17dde: 0xe0000003, 0x17ddf: 0xe0000006, + 0x17de0: 0xe0000009, 0x17de1: 0xe000000c, 0x17de2: 0xe000000f, 0x17de3: 0xe0000012, + 0x17de4: 0xe000156b, 0x17de5: 0xe000156e, 0x17de6: 0xe0001577, 0x17de7: 0xe000157d, + 0x17de8: 0xe00015aa, 0x17de9: 0xe00015b3, 0x17dea: 0xe000aea6, 0x17deb: 0xe000aea9, + 0x17dec: 0xe000aeb2, 0x17ded: 0xe000aeb8, 0x17dee: 0xf0001919, 0x17def: 0xf0001919, + 0x17df0: 0xe000aecd, 0x17df1: 0xe000aed0, 0x17df2: 0xe000aed9, 0x17df3: 0xe000aedf, + 0x17df4: 0xe0002897, 0x17df5: 0xe00036ae, 0x17df6: 0xe000aee5, 0x17df7: 0xe000aee8, + 0x17df8: 0xe000aef1, 0x17df9: 0xe000aef7, 0x17dfa: 0xe000289d, 0x17dfb: 0xe00036b7, + 0x17dfc: 0xe00028df, 0x17dfd: 0xe0003705, 0x17dfe: 0xe00028e5, 0x17dff: 0xe000370b, + // Block 0x5f8, offset 0x17e00 + 0x17e00: 0xf0001919, 0x17e01: 0xe000372f, 0x17e02: 0xe000373b, 0x17e03: 0xf0001919, + 0x17e04: 0xf0001919, 0x17e05: 0xe000b02c, 0x17e06: 0xe00028f1, 0x17e07: 0xe000374a, + 0x17e08: 0xe000b032, 0x17e09: 0xe000b04a, 0x17e0a: 0xe000b062, 0x17e0b: 0xe000b065, + 0x17e0c: 0xe000b06e, 0x17e0d: 0xe000b074, 0x17e0e: 0xe00028fa, 0x17e0f: 0xe0003759, + 0x17e10: 0xe000377a, 0x17e11: 0xe0003795, 0x17e12: 0xe0003798, 0x17e13: 0xe00037a1, + 0x17e14: 0xe00037a7, 0x17e15: 0xf0001919, 0x17e16: 0xf0001919, 0x17e17: 0xe000155c, + 0x17e18: 0xe0001562, 0x17e19: 0xe0001568, 0x17e1a: 0xe0001571, 0x17e1b: 0xe0001580, + 0x17e1c: 0xe000ae94, 0x17e1d: 0xe000ae9a, 0x17e1e: 0xe000aea0, 0x17e1f: 0xe000aeac, + 0x17e20: 0xf0001717, 0x17e21: 0xe000aebb, 0x17e22: 0xe000aec1, 0x17e23: 0xe000aec7, + 0x17e24: 0xe000aed3, 0x17e25: 0xe00036a8, 0x17e26: 0xe000aeeb, 0x17e27: 0xe000aefa, + 0x17e28: 0xe000af00, 0x17e29: 0xe000af06, 0x17e2a: 0xe000af0c, 0x17e2b: 0xe000af12, + 0x17e2c: 0xe000af1b, 0x17e2d: 0xe000af27, 0x17e2e: 0xe000af30, 0x17e2f: 0xe000af39, + 0x17e30: 0xe000af48, 0x17e31: 0xe000af87, 0x17e32: 0xe000af8d, 0x17e33: 0xe000af96, + 0x17e34: 0xe000af9c, 0x17e35: 0xe000afa2, 0x17e36: 0xe000afa8, 0x17e37: 0xe000afb4, + 0x17e38: 0xe000afba, 0x17e39: 0xe000afc9, 0x17e3a: 0xe000afd2, 0x17e3b: 0xe000afd8, + 0x17e3c: 0xe000afde, 0x17e3d: 0xe000afe4, 0x17e3e: 0xe000afea, 0x17e3f: 0xe000aff0, + // Block 0x5f9, offset 0x17e40 + 0x17e40: 0xe000aff6, 0x17e41: 0xe000affc, 0x17e42: 0xe000b002, 0x17e43: 0xe000b008, + 0x17e44: 0xe0003717, 0x17e45: 0xe000371d, 0x17e46: 0xe0003723, 0x17e47: 0xe0003729, + 0x17e48: 0xe0003735, 0x17e49: 0xe000b014, 0x17e4a: 0xe000b01a, 0x17e4b: 0xe000b020, + 0x17e4c: 0xe000b026, 0x17e4d: 0xe0003747, 0x17e4e: 0xe000b035, 0x17e4f: 0xe000b03b, + 0x17e50: 0xe000b041, 0x17e51: 0xe000b047, 0x17e52: 0xe000b050, 0x17e53: 0xe000b056, + 0x17e54: 0xe000b05c, 0x17e55: 0xe000b068, 0x17e56: 0xe0003753, 0x17e57: 0xe0003762, + 0x17e58: 0xe0003768, 0x17e59: 0xe000375f, 0x17e5a: 0xe0003783, 0x17e5b: 0xe0003789, + 0x17e5c: 0xe000378f, 0x17e5d: 0xe000379b, 0x17e5e: 0xf0001717, 0x17e5f: 0xe0001574, + 0x17e60: 0xe0001583, 0x17e61: 0xe000aeaf, 0x17e62: 0xf0001818, 0x17e63: 0xe000aed6, + 0x17e64: 0xe00036ab, 0x17e65: 0xe000aeee, 0x17e66: 0xe00036b4, 0x17e67: 0xe000af4b, + 0x17e68: 0xe00036d2, 0x17e69: 0xe000af7e, 0x17e6a: 0xe00036de, 0x17e6b: 0xe000372c, + 0x17e6c: 0xe0003738, 0x17e6d: 0xe000b029, 0x17e6e: 0xe000b06b, 0x17e6f: 0xe0003756, + 0x17e70: 0xe000379e, 0x17e71: 0xf0001818, 0x17e72: 0xe000ae91, 0x17e73: 0xe0003690, + 0x17e74: 0xe0003693, 0x17e75: 0xe00028d0, 0x17e76: 0xe00036f6, 0x17e77: 0xe00028d6, + 0x17e78: 0xe00036fc, 0x17e79: 0xe00028dc, 0x17e7a: 0xe0003702, 0x17e7b: 0xe00028b8, + 0x17e7c: 0xe00036d8, 0x17e7d: 0xe00028be, 0x17e7e: 0xe00036e4, 0x17e7f: 0xe00028ac, + // Block 0x5fa, offset 0x17e80 + 0x17e80: 0xe00036c6, 0x17e81: 0xe00028a6, 0x17e82: 0xe00036c0, 0x17e83: 0xe00028b2, + 0x17e84: 0xe00036cc, 0x17e85: 0xe00028c4, 0x17e86: 0xe00036ea, 0x17e87: 0xe00028ca, + 0x17e88: 0xe00036f0, 0x17e89: 0xe000af5a, 0x17e8a: 0xe000af66, 0x17e8b: 0xe000af72, + 0x17e8c: 0xe000af84, 0x17e8d: 0xe000af78, 0x17e8e: 0xe000af45, 0x17e8f: 0xe000af93, + 0x17e90: 0xe000afb1, 0x17e91: 0xe00028cd, 0x17e92: 0xe00036f3, 0x17e93: 0xe00028d3, + 0x17e94: 0xe00036f9, 0x17e95: 0xe00028d9, 0x17e96: 0xe00036ff, 0x17e97: 0xe00028b5, + 0x17e98: 0xe00036d5, 0x17e99: 0xe00028bb, 0x17e9a: 0xe00036e1, 0x17e9b: 0xe00028a9, + 0x17e9c: 0xe00036c3, 0x17e9d: 0xe00028a3, 0x17e9e: 0xe00036bd, 0x17e9f: 0xe00028af, + 0x17ea0: 0xe00036c9, 0x17ea1: 0xe00028c1, 0x17ea2: 0xe00036e7, 0x17ea3: 0xe00028c7, + 0x17ea4: 0xe00036ed, 0x17ea5: 0xe000af57, 0x17ea6: 0xe000af63, 0x17ea7: 0xe000af6f, + 0x17ea8: 0xe000af81, 0x17ea9: 0xe000af75, 0x17eaa: 0xe000af42, 0x17eab: 0xe000af90, + 0x17eac: 0xe000afae, 0x17ead: 0xe000af51, 0x17eae: 0xe000af5d, 0x17eaf: 0xe000af69, + 0x17eb0: 0xe000af7b, 0x17eb1: 0xe00036cf, 0x17eb2: 0xe00036db, 0x17eb3: 0xe000afc0, + 0x17eb4: 0xe000af2a, 0x17eb5: 0xe000af33, 0x17eb6: 0xe000af3c, 0x17eb7: 0xe000af54, + 0x17eb8: 0xe000af60, 0x17eb9: 0xe000af6c, 0x17eba: 0xe000afc3, 0x17ebb: 0xe000afcc, + 0x17ebc: 0xe0003696, 0x17ebd: 0xe0003699, 0x17ebe: 0x4004c020, 0x17ebf: 0x4004c220, + // Block 0x5fb, offset 0x17ec0 + 0x17ec0: 0x0039de98, 0x17ec1: 0x0039e69a, 0x17ec2: 0x0039e699, 0x17ec3: 0x0039e697, + 0x17ec4: 0x0039e698, 0x17ec5: 0x0039e89a, 0x17ec6: 0x0039e899, 0x17ec7: 0x0039e897, + 0x17ec8: 0x0039e898, 0x17ec9: 0x0039ee9a, 0x17eca: 0x0039ee99, 0x17ecb: 0x0039ee97, + 0x17ecc: 0x0039ee98, 0x17ecd: 0x0039f09a, 0x17ece: 0x0039f099, 0x17ecf: 0x0039f097, + 0x17ed0: 0x0039f098, 0x17ed1: 0x0039fc9a, 0x17ed2: 0x0039fc99, 0x17ed3: 0x0039fc97, + 0x17ed4: 0x0039fc98, 0x17ed5: 0x003a129a, 0x17ed6: 0x003a1299, 0x17ed7: 0x003a1297, + 0x17ed8: 0x003a1298, 0x17ed9: 0x003a1a9a, 0x17eda: 0x003a1a99, 0x17edb: 0x003a1a97, + 0x17edc: 0x003a1a98, 0x17edd: 0x003a409a, 0x17ede: 0x003a4099, 0x17edf: 0x003a4097, + 0x17ee0: 0x003a4098, 0x17ee1: 0x003a4e9a, 0x17ee2: 0x003a4e99, 0x17ee3: 0x003a4e97, + 0x17ee4: 0x003a4e98, 0x17ee5: 0x003a569a, 0x17ee6: 0x003a5699, 0x17ee7: 0x003a5697, + 0x17ee8: 0x003a5698, 0x17ee9: 0x003a689a, 0x17eea: 0x003a6899, 0x17eeb: 0x003a6897, + 0x17eec: 0x003a6898, 0x17eed: 0x003a749a, 0x17eee: 0x003a7499, 0x17eef: 0x003a8e9a, + 0x17ef0: 0x003a8e99, 0x17ef1: 0x003a909a, 0x17ef2: 0x003a9099, 0x17ef3: 0x003a9097, + 0x17ef4: 0x003a9098, 0x17ef5: 0xe0001732, 0x17ef6: 0xe000172f, 0x17ef7: 0xe0001738, + 0x17ef8: 0xe0001735, 0x17ef9: 0xe000173e, 0x17efa: 0xe000173b, 0x17efb: 0xe000b011, + 0x17efc: 0xe000b00e, 0x17eff: 0xa0000000, + // Block 0x5fc, offset 0x17f00 + 0x17f00: 0xa0000000, 0x17f01: 0xa0000000, 0x17f02: 0xa0000000, 0x17f03: 0xa0000000, + 0x17f04: 0xa0000000, 0x17f05: 0xa0000000, 0x17f06: 0xa0000000, 0x17f07: 0xa0000000, + 0x17f08: 0xa0000000, 0x17f09: 0x40020020, 0x17f0a: 0x40020220, 0x17f0b: 0x40020420, + 0x17f0c: 0x40020620, 0x17f0d: 0x40020820, 0x17f0e: 0xa0000000, 0x17f0f: 0xa0000000, + 0x17f10: 0xa0000000, 0x17f11: 0xa0000000, 0x17f12: 0xa0000000, 0x17f13: 0xa0000000, + 0x17f14: 0xa0000000, 0x17f15: 0xa0000000, 0x17f16: 0xa0000000, 0x17f17: 0xa0000000, + 0x17f18: 0xa0000000, 0x17f19: 0xa0000000, 0x17f1a: 0xa0000000, 0x17f1b: 0xa0000000, + 0x17f1c: 0xa0000000, 0x17f1d: 0xa0000000, 0x17f1e: 0xa0000000, 0x17f1f: 0xa0000000, + 0x17f20: 0x40021220, 0x17f21: 0x4002ba20, 0x17f22: 0x4003e020, 0x17f23: 0x4004ea20, + 0x17f24: 0x4027de20, 0x17f25: 0x4004ec20, 0x17f26: 0x4004e620, 0x17f27: 0x4003d220, + 0x17f28: 0x4003f420, 0x17f29: 0x4003f620, 0x17f2a: 0x4004d820, 0x17f2b: 0x40093820, + 0x17f2c: 0x40024020, 0x17f2d: 0x40021a20, 0x17f2e: 0x4002e420, 0x17f2f: 0x4004e220, + 0x17f30: 0x4029cc20, 0x17f31: 0x4029ce20, 0x17f32: 0x4029d020, 0x17f33: 0x4029d220, + 0x17f34: 0x4029d420, 0x17f35: 0x4029d620, 0x17f36: 0x4029d820, 0x17f37: 0x4029da20, + 0x17f38: 0x4029dc20, 0x17f39: 0x4029de20, 0x17f3a: 0x40026c20, 0x17f3b: 0x40026220, + 0x17f3c: 0x40094020, 0x17f3d: 0x40094220, 0x17f3e: 0x40094420, 0x17f3f: 0x4002c420, + // Block 0x5fd, offset 0x17f40 + 0x17f40: 0x4004d620, 0x17f41: 0xcead9741, 0x17f42: 0x002c0a88, 0x17f43: 0x002c3a88, + 0x17f44: 0x002c6288, 0x17f45: 0xce6d2741, 0x17f46: 0x002d0888, 0x17f47: 0x002d2288, + 0x17f48: 0x002d6888, 0x17f49: 0x002d9a88, 0x17f4a: 0x002dcc88, 0x17f4b: 0x002dfe88, + 0x17f4c: 0xc0030002, 0x17f4d: 0x002e8288, 0x17f4e: 0x002e9e88, 0x17f4f: 0xcfa09a71, + 0x17f50: 0x002f2c88, 0x17f51: 0x002f5688, 0x17f52: 0x002f7a88, 0x17f53: 0x002fe688, + 0x17f54: 0x00302c88, 0x17f55: 0xc3479aa1, 0x17f56: 0x0030be88, 0x17f57: 0x0030e288, + 0x17f58: 0x0030f688, 0x17f59: 0x00310088, 0x17f5a: 0x00312a88, 0x17f5b: 0x4003f820, + 0x17f5c: 0x4004e420, 0x17f5d: 0x4003fa20, 0x17f5e: 0x40062420, 0x17f5f: 0x40021620, + 0x17f60: 0x40061e20, 0x17f61: 0xceaa9741, 0x17f62: 0x402c0a20, 0x17f63: 0x402c3a20, + 0x17f64: 0x402c6220, 0x17f65: 0xce6b2741, 0x17f66: 0x402d0820, 0x17f67: 0x402d2220, + 0x17f68: 0x402d6820, 0x17f69: 0x402d9a20, 0x17f6a: 0x402dcc20, 0x17f6b: 0x402dfe20, + 0x17f6c: 0xc0000002, 0x17f6d: 0x402e8220, 0x17f6e: 0x402e9e20, 0x17f6f: 0xcf9d9a71, + 0x17f70: 0x402f2c20, 0x17f71: 0x402f5620, 0x17f72: 0x402f7a20, 0x17f73: 0x402fe620, + 0x17f74: 0x40302c20, 0x17f75: 0xc3459aa1, 0x17f76: 0x4030be20, 0x17f77: 0x4030e220, + 0x17f78: 0x4030f620, 0x17f79: 0x40310020, 0x17f7a: 0x40312a20, 0x17f7b: 0x4003fc20, + 0x17f7c: 0x40094820, 0x17f7d: 0x4003fe20, 0x17f7e: 0x40094c20, 0x17f7f: 0xa0000000, + // Block 0x5fe, offset 0x17f80 + 0x17f80: 0xe00008f5, 0x17f81: 0xe000b098, 0x17f82: 0x002be283, 0x17f83: 0xe000b092, + 0x17f84: 0xe000095b, 0x17f85: 0xe000094d, 0x17f86: 0xe00009dd, 0x17f87: 0xe0000a53, + 0x17f88: 0xe0000ae8, 0x17f89: 0xe000b10c, 0x17f8a: 0x002c9a83, 0x17f8b: 0xe0000b20, + 0x17f8c: 0xe0000c2b, 0x17f8d: 0xe000b150, 0x17f8e: 0xe0000c37, 0x17f8f: 0xe0000c43, + 0x17f90: 0xe0000ab3, 0x17f91: 0xe000b190, 0x17f92: 0xe0000d9a, 0x17f93: 0xe000b1c6, + 0x17f94: 0x002ee483, 0x17f95: 0xe000b1a8, 0x17f96: 0xe0000dd2, 0x17f97: 0x40093e20, + 0x17f98: 0xe0000e12, 0x17f99: 0xe0000fe1, 0x17f9a: 0xe000b268, 0x17f9b: 0xe0000fed, + 0x17f9c: 0xe0000fff, 0x17f9d: 0xe000b2b8, 0x17f9e: 0x00318888, 0x17f9f: 0xe0000f7b, + 0x17fa0: 0xe00008f2, 0x17fa1: 0xe000b095, 0x17fa2: 0x402be220, 0x17fa3: 0xe000b08f, + 0x17fa4: 0xe0000958, 0x17fa5: 0xe000094a, 0x17fa6: 0xe00009d5, 0x17fa7: 0xe0000a4d, + 0x17fa8: 0xe0000ae5, 0x17fa9: 0xe000b109, 0x17faa: 0x402c9a20, 0x17fab: 0xe0000b1d, + 0x17fac: 0xe0000c28, 0x17fad: 0xe000b14d, 0x17fae: 0xe0000c34, 0x17faf: 0xe0000c40, + 0x17fb0: 0xe0000aad, 0x17fb1: 0xe000b18d, 0x17fb2: 0xe0000d97, 0x17fb3: 0xe000b1c3, + 0x17fb4: 0x402ee420, 0x17fb5: 0xe000b1a5, 0x17fb6: 0xe0000dcf, 0x17fb7: 0x40093c20, + 0x17fb8: 0xe0000e0f, 0x17fb9: 0xe0000fde, 0x17fba: 0xe000b265, 0x17fbb: 0xe0000fea, + 0x17fbc: 0xe0000ffc, 0x17fbd: 0xe000b2b5, 0x17fbe: 0x40318820, 0x17fbf: 0xe0001114, + // Block 0x5ff, offset 0x17fc0 + 0x17fc0: 0xe0000983, 0x17fc1: 0xe0000980, 0x17fc2: 0x002be083, 0x17fc3: 0x402be020, + 0x17fc4: 0xe000097d, 0x17fc5: 0xe000097a, 0x17fc6: 0xe000b0ec, 0x17fc7: 0xe000b0e9, + 0x17fc8: 0xe0000a3e, 0x17fc9: 0xe0000a3b, 0x17fca: 0xe0000a4a, 0x17fcb: 0xe0000a47, + 0x17fcc: 0xe0000a44, 0x17fcd: 0xe0000a41, 0x17fce: 0xe0000a86, 0x17fcf: 0xe0000a83, + 0x17fd0: 0x002c6483, 0x17fd1: 0x402c6420, 0x17fd2: 0xe0000b46, 0x17fd3: 0xe0000b43, + 0x17fd4: 0xe0000aee, 0x17fd5: 0xe0000aeb, 0x17fd6: 0xe0000b2c, 0x17fd7: 0xe0000b29, + 0x17fd8: 0xe0000b40, 0x17fd9: 0xe0000b3d, 0x17fda: 0xe0000b1a, 0x17fdb: 0xe0000b17, + 0x17fdc: 0xe0000bb8, 0x17fdd: 0xe0000bb5, 0x17fde: 0xe0000bb2, 0x17fdf: 0xe0000baf, + 0x17fe0: 0xe0000bc4, 0x17fe1: 0xe0000bc1, 0x17fe2: 0xe0000bca, 0x17fe3: 0xe0000bc7, + 0x17fe4: 0xe0000bee, 0x17fe5: 0xe0000beb, 0x17fe6: 0xe0000c1b, 0x17fe7: 0xe0000c18, + 0x17fe8: 0xe000b14a, 0x17fe9: 0xe000b147, 0x17fea: 0xe0000c60, 0x17feb: 0xe0000c5d, + 0x17fec: 0xe0000c31, 0x17fed: 0xe0000c2e, 0x17fee: 0xe0000c5a, 0x17fef: 0xe0000c57, + 0x17ff0: 0xe0000c54, 0x17ff1: 0x402da220, 0x17ff2: 0xf0000a0a, 0x17ff3: 0xf0000404, + 0x17ff4: 0xe0000c8a, 0x17ff5: 0xe0000c87, 0x17ff6: 0xe0000c9f, 0x17ff7: 0xe0000c9c, + 0x17ff8: 0x402f7220, 0x17ff9: 0xe000b170, 0x17ffa: 0xe000b16d, 0x17ffb: 0xe0000cd8, + 0x17ffc: 0xe0000cd5, 0x17ffd: 0xe0000cd2, 0x17ffe: 0xe0000ccf, 0x17fff: 0xe0000d04, + // Block 0x600, offset 0x18000 + 0x18000: 0xe0000cfe, 0x18001: 0xe0000cf8, 0x18002: 0xe0000cf5, 0x18003: 0xe000b196, + 0x18004: 0xe000b193, 0x18005: 0xe0000d6f, 0x18006: 0xe0000d6c, 0x18007: 0xe0000d5d, + 0x18008: 0xe0000d5a, 0x18009: 0xf0000404, 0x1800a: 0x002eda88, 0x1800b: 0x402eda20, + 0x1800c: 0xe0000e2e, 0x1800d: 0xe0000e2b, 0x1800e: 0xe0000da0, 0x1800f: 0xe0000d9d, + 0x18010: 0xe0000de0, 0x18011: 0xe0000ddd, 0x18012: 0xe0000e93, 0x18013: 0xe0000e8f, + 0x18014: 0xe000b21e, 0x18015: 0xe000b21b, 0x18016: 0xe0000edc, 0x18017: 0xe0000ed9, + 0x18018: 0xe0000ed0, 0x18019: 0xe0000ecd, 0x1801a: 0xe000b232, 0x1801b: 0xe000b22f, + 0x1801c: 0xe0000f2d, 0x1801d: 0xe0000f2a, 0x1801e: 0xe0000f47, 0x1801f: 0xe0000f44, + 0x18020: 0xe0000f33, 0x18021: 0xe0000f30, 0x18022: 0xe0000f99, 0x18023: 0xe0000f96, + 0x18024: 0xe0000f8a, 0x18025: 0xe0000f87, 0x18026: 0x00303688, 0x18027: 0x40303620, + 0x18028: 0xe000b25a, 0x18029: 0xe000b257, 0x1802a: 0xe000103f, 0x1802b: 0xe000103c, + 0x1802c: 0xe0000fe7, 0x1802d: 0xe0000fe4, 0x1802e: 0xe0000ff9, 0x1802f: 0xe0000ff6, + 0x18030: 0xe0001025, 0x18031: 0xe0001022, 0x18032: 0xe0001039, 0x18033: 0xe0001036, + 0x18034: 0xe00010d8, 0x18035: 0xe00010d5, 0x18036: 0xe000110e, 0x18037: 0xe000110b, + 0x18038: 0xe0001117, 0x18039: 0xe000b2c4, 0x1803a: 0xe000b2c1, 0x1803b: 0xe000114d, + 0x1803c: 0xe000114a, 0x1803d: 0xe0001147, 0x1803e: 0xe0001144, 0x1803f: 0xe0000f64, + // Block 0x601, offset 0x18040 + 0x18040: 0x402c1a20, 0x18041: 0x002c2a88, 0x18042: 0x002c3288, 0x18043: 0x402c3220, + 0x18044: 0x0031c488, 0x18045: 0x4031c420, 0x18046: 0x002efa88, 0x18047: 0x002c4e88, + 0x18048: 0x402c4e20, 0x18049: 0x002c7288, 0x1804a: 0x002c7a88, 0x1804b: 0x002c8488, + 0x1804c: 0x402c8420, 0x1804d: 0xe000115c, 0x1804e: 0x002cae88, 0x1804f: 0x002cb888, + 0x18050: 0x002cc288, 0x18051: 0x002d1688, 0x18052: 0x402d1620, 0x18053: 0x002d4488, + 0x18054: 0x002d5888, 0x18055: 0x402d7820, 0x18056: 0x002dc288, 0x18057: 0x002db688, + 0x18058: 0x002e0a88, 0x18059: 0x402e0a20, 0x1805a: 0x402e3820, 0x1805b: 0x402e7220, + 0x1805c: 0x0030a088, 0x1805d: 0x002eb488, 0x1805e: 0x402ebc20, 0x1805f: 0x002f1088, + 0x18060: 0x002ee683, 0x18061: 0x402ee620, 0x18062: 0x002d6088, 0x18063: 0x402d6020, + 0x18064: 0x002f3e88, 0x18065: 0x402f3e20, 0x18066: 0x002f8288, 0x18067: 0x0031b488, + 0x18068: 0x4031b420, 0x18069: 0x00300888, 0x1806a: 0x40301220, 0x1806b: 0x40304220, + 0x1806c: 0x00304a88, 0x1806d: 0x40304a20, 0x1806e: 0x00305288, 0x1806f: 0x00306e83, + 0x18070: 0x40306e20, 0x18071: 0x0030b488, 0x18072: 0x0030cc88, 0x18073: 0x00311888, + 0x18074: 0x40311820, 0x18075: 0x00313488, 0x18076: 0x40313420, 0x18077: 0x00316488, + 0x18078: 0x00316e88, 0x18079: 0x40316e20, 0x1807a: 0x40317820, 0x1807b: 0x4031a620, + 0x1807c: 0x0031bc88, 0x1807d: 0x4031bc20, 0x1807e: 0xe0000fc9, 0x1807f: 0x40319420, + // Block 0x602, offset 0x18080 + 0x18080: 0x40321220, 0x18081: 0x40321a20, 0x18082: 0x40322220, 0x18083: 0x40322a20, + 0x18084: 0xe0000ad5, 0x18085: 0xe0000ad1, 0x18086: 0xe0000acd, 0x18087: 0xf0000a0a, + 0x18088: 0xf000040a, 0x18089: 0xf0000404, 0x1808a: 0xf0000a0a, 0x1808b: 0xf000040a, + 0x1808c: 0xf0000404, 0x1808d: 0xe0000947, 0x1808e: 0xe0000944, 0x1808f: 0xe0000c3d, + 0x18090: 0xe0000c3a, 0x18091: 0xe0000dcc, 0x18092: 0xe0000dc9, 0x18093: 0xe0000ff3, + 0x18094: 0xe0000ff0, 0x18095: 0xe000101e, 0x18096: 0xe000101a, 0x18097: 0xe000b275, + 0x18098: 0xe000b271, 0x18099: 0xe0001016, 0x1809a: 0xe0001012, 0x1809b: 0xe000100e, + 0x1809c: 0xe000100a, 0x1809d: 0x402cae20, 0x1809e: 0xe0000962, 0x1809f: 0xe000095e, + 0x180a0: 0xe0000976, 0x180a1: 0xe0000972, 0x180a2: 0xe00009f4, 0x180a3: 0xe00009ef, + 0x180a4: 0x002d3a88, 0x180a5: 0x402d3a20, 0x180a6: 0xe0000bbe, 0x180a7: 0xe0000bbb, + 0x180a8: 0xe0000c99, 0x180a9: 0xe0000c96, 0x180aa: 0xe0000e20, 0x180ab: 0xe0000e1d, + 0x180ac: 0xe0000e27, 0x180ad: 0xe0000e23, 0x180ae: 0xe0001162, 0x180af: 0xe000115f, + 0x180b0: 0xe0000c8d, 0x180b1: 0xf0000a0a, 0x180b2: 0xf000040a, 0x180b3: 0xf0000404, + 0x180b4: 0xe000b138, 0x180b5: 0xe000b135, 0x180b6: 0x002d7888, 0x180b7: 0x00319488, + 0x180b8: 0xe0000d57, 0x180b9: 0xe0000d54, 0x180ba: 0xe000b0a5, 0x180bb: 0xe000b0a1, + 0x180bc: 0xe000b0ae, 0x180bd: 0xe000b0a9, 0x180be: 0xe000b1d3, 0x180bf: 0xe000b1cf, + // Block 0x603, offset 0x180c0 + 0x180c0: 0xe000098f, 0x180c1: 0xe000098c, 0x180c2: 0xe0000995, 0x180c3: 0xe0000992, + 0x180c4: 0xe0000b62, 0x180c5: 0xe0000b5f, 0x180c6: 0xe0000b68, 0x180c7: 0xe0000b65, + 0x180c8: 0xe0000c6c, 0x180c9: 0xe0000c69, 0x180ca: 0xe0000c72, 0x180cb: 0xe0000c6f, + 0x180cc: 0xe0000e4a, 0x180cd: 0xe0000e47, 0x180ce: 0xe0000e50, 0x180cf: 0xe0000e4d, + 0x180d0: 0xe0000ee8, 0x180d1: 0xe0000ee5, 0x180d2: 0xe0000eee, 0x180d3: 0xe0000eeb, + 0x180d4: 0xe0001053, 0x180d5: 0xe0001050, 0x180d6: 0xe0001059, 0x180d7: 0xe0001056, + 0x180d8: 0xe0000f61, 0x180d9: 0xe0000f5e, 0x180da: 0xe0000fa5, 0x180db: 0xe0000fa2, + 0x180dc: 0x00312288, 0x180dd: 0x40312220, 0x180de: 0xe0000bf4, 0x180df: 0xe0000bf1, + 0x180e0: 0x002ebc88, 0x180e1: 0x402c8c20, 0x180e2: 0x002f2288, 0x180e3: 0x402f2220, + 0x180e4: 0x00314088, 0x180e5: 0x40314020, 0x180e6: 0xe000096f, 0x180e7: 0xe000096c, + 0x180e8: 0xe0000b32, 0x180e9: 0xe0000b2f, 0x180ea: 0xe0000dd9, 0x180eb: 0xe0000dd5, + 0x180ec: 0xe000b1bf, 0x180ed: 0xe000b1bb, 0x180ee: 0xe0000e04, 0x180ef: 0xe0000e01, + 0x180f0: 0xe0000e0b, 0x180f1: 0xe0000e07, 0x180f2: 0xe0001129, 0x180f3: 0xe0001126, + 0x180f4: 0x402e5e20, 0x180f5: 0x402ed020, 0x180f6: 0x40305a20, 0x180f7: 0x402dd420, + 0x180f8: 0xe0000abf, 0x180f9: 0xe0000ec4, 0x180fa: 0x002be888, 0x180fb: 0x002c4488, + 0x180fc: 0x402c4420, 0x180fd: 0x002e3888, 0x180fe: 0x00303e88, 0x180ff: 0x402ffc20, + // Block 0x604, offset 0x18100 + 0x18100: 0xae603502, 0x18101: 0xae603802, 0x18102: 0xae603c02, 0x18103: 0xae603702, + 0x18104: 0xae605b02, 0x18105: 0xae606302, 0x18106: 0xae603702, 0x18107: 0xae605202, + 0x18108: 0xae604702, 0x18109: 0xae603602, 0x1810a: 0xae604302, 0x1810b: 0xae604d02, + 0x1810c: 0xae604102, 0x1810d: 0xae605f02, 0x1810e: 0xae605f02, 0x1810f: 0xae606502, + 0x18110: 0xae606602, 0x18111: 0xae606702, 0x18112: 0xae605f02, 0x18113: 0xae602202, + 0x18114: 0xae602a02, 0x18115: 0xae805f02, 0x18116: 0xadc06002, 0x18117: 0xadc06002, + 0x18118: 0xadc06002, 0x18119: 0xadc06002, 0x1811a: 0xae805f02, 0x1811b: 0xad806802, + 0x1811c: 0xadc06002, 0x1811d: 0xadc06002, 0x1811e: 0xadc06002, 0x1811f: 0xadc06002, + 0x18120: 0xadc06002, 0x18121: 0xaca06e02, 0x18122: 0xaca06f02, 0x18123: 0xae603902, + 0x18124: 0xadc07502, 0x18125: 0xadc07602, 0x18126: 0xadc07702, 0x18127: 0xaca05602, + 0x18128: 0xaca05902, 0x18129: 0xadc06002, 0x1812a: 0xadc06002, 0x1812b: 0xadc06002, + 0x1812c: 0xadc06002, 0x1812d: 0xadc07802, 0x1812e: 0xadc07902, 0x1812f: 0xadc06002, + 0x18130: 0xadc07a02, 0x18131: 0xadc07b02, 0x18132: 0xadc02102, 0x18133: 0xadc06002, + 0x18134: 0xa0107c02, 0x18135: 0xa0107d02, 0x18136: 0xa0106102, 0x18137: 0xa0106102, + 0x18138: 0xa0105402, 0x18139: 0xadc07e02, 0x1813a: 0xadc06002, 0x1813b: 0xadc06002, + 0x1813c: 0xadc06002, 0x1813d: 0xae605f02, 0x1813e: 0xae605f02, 0x1813f: 0xae605f02, + // Block 0x605, offset 0x18140 + 0x18140: 0xae603502, 0x18141: 0xae603802, 0x18142: 0xae604502, 0x18143: 0xae602202, + 0x18144: 0xe000b07d, 0x18145: 0xaf007f02, 0x18146: 0xae605f02, 0x18147: 0xadc06002, + 0x18148: 0xadc06002, 0x18149: 0xadc06002, 0x1814a: 0xae605f02, 0x1814b: 0xae605f02, + 0x1814c: 0xae605f02, 0x1814d: 0xadc06002, 0x1814e: 0xadc06002, 0x1814f: 0xa0000000, + 0x18150: 0xae605f02, 0x18151: 0xae605f02, 0x18152: 0xae605f02, 0x18153: 0xadc06002, + 0x18154: 0xadc06002, 0x18155: 0xadc06002, 0x18156: 0xadc06002, 0x18157: 0xae605f02, + 0x18158: 0xae808002, 0x18159: 0xadc06002, 0x1815a: 0xadc06002, 0x1815b: 0xae605f02, + 0x1815c: 0xae906002, 0x1815d: 0xaea05f02, 0x1815e: 0xaea05f02, 0x1815f: 0xae906002, + 0x18160: 0xaea08102, 0x18161: 0xaea08202, 0x18162: 0xae906002, 0x18163: 0x84e615ef, + 0x18164: 0x84e6164c, 0x18165: 0x84e616cd, 0x18166: 0x84e61771, 0x18167: 0x84e61836, + 0x18168: 0x84e6161d, 0x18169: 0x84e61631, 0x1816a: 0x84e616b4, 0x1816b: 0x84e61741, + 0x1816c: 0x84e617bd, 0x1816d: 0x84e61816, 0x1816e: 0x84e6185f, 0x1816f: 0x84e6187b, + 0x18170: 0x00326688, 0x18171: 0x40326620, 0x18172: 0x0032a688, 0x18173: 0x4032a620, + 0x18174: 0x40064020, 0x18175: 0x40064220, 0x18176: 0x00326088, 0x18177: 0x40326020, + 0x1817a: 0x00326c84, 0x1817b: 0x40329220, + 0x1817c: 0x40329020, 0x1817d: 0x40329420, 0x1817e: 0x40026220, + // Block 0x606, offset 0x18180 + 0x18184: 0x40062020, 0x18185: 0xe000b080, 0x18186: 0xe000b2f4, 0x18187: 0x40030620, + 0x18188: 0xe000b30e, 0x18189: 0xe000b338, 0x1818a: 0xe000b352, + 0x1818c: 0xe000b36c, 0x1818e: 0xe000b37e, 0x1818f: 0xe000b3ac, + 0x18190: 0xe000b355, 0x18191: 0x00325288, 0x18192: 0x00325488, 0x18193: 0x00325688, + 0x18194: 0x00325a88, 0x18195: 0x00325c88, 0x18196: 0x00326488, 0x18197: 0x00326888, + 0x18198: 0x00326a88, 0x18199: 0x00326c88, 0x1819a: 0x00327088, 0x1819b: 0x00327288, + 0x1819c: 0x00327688, 0x1819d: 0x00327888, 0x1819e: 0x00327a88, 0x1819f: 0x00327c88, + 0x181a0: 0x00327e88, 0x181a1: 0x00328888, 0x181a3: 0x00328e88, + 0x181a4: 0x00329688, 0x181a5: 0x00329888, 0x181a6: 0x00329a88, 0x181a7: 0x00329c88, + 0x181a8: 0x00329e88, 0x181a9: 0x0032a288, 0x181aa: 0xe000134f, 0x181ab: 0xe00013f2, + 0x181ac: 0xe000b2f1, 0x181ad: 0xe000b30b, 0x181ae: 0xe000b335, 0x181af: 0xe000b34f, + 0x181b0: 0xe000b381, 0x181b1: 0x40325220, 0x181b2: 0x40325420, 0x181b3: 0x40325620, + 0x181b4: 0x40325a20, 0x181b5: 0x40325c20, 0x181b6: 0x40326420, 0x181b7: 0x40326820, + 0x181b8: 0x40326a20, 0x181b9: 0x40326c20, 0x181ba: 0x40327020, 0x181bb: 0x40327220, + 0x181bc: 0x40327620, 0x181bd: 0x40327820, 0x181be: 0x40327a20, 0x181bf: 0x40327c20, + // Block 0x607, offset 0x181c0 + 0x181c0: 0x40327e20, 0x181c1: 0x40328820, 0x181c2: 0x00328e99, 0x181c3: 0x40328e20, + 0x181c4: 0x40329620, 0x181c5: 0x40329820, 0x181c6: 0x40329a20, 0x181c7: 0x40329c20, + 0x181c8: 0x40329e20, 0x181c9: 0x4032a220, 0x181ca: 0xe000134c, 0x181cb: 0xe00013ef, + 0x181cc: 0xe000b369, 0x181cd: 0xe000b37b, 0x181ce: 0xe000b3a9, 0x181cf: 0xe0001368, + 0x181d0: 0x00325484, 0x181d1: 0x00326a84, 0x181d2: 0x0032988a, 0x181d3: 0xf000020a, + 0x181d4: 0xf000020a, 0x181d5: 0x00329a84, 0x181d6: 0x00327e84, 0x181d7: 0xe0001364, + 0x181d8: 0x00328688, 0x181d9: 0x40328620, 0x181da: 0x00326288, 0x181db: 0x40326220, + 0x181dc: 0x00325e88, 0x181dd: 0x40325e20, 0x181de: 0x00328488, 0x181df: 0x40328420, + 0x181e0: 0x0032a488, 0x181e1: 0x4032a420, 0x181e2: 0x0032e888, 0x181e3: 0x4032e820, + 0x181e4: 0x0032f288, 0x181e5: 0x4032f220, 0x181e6: 0x0032f488, 0x181e7: 0x4032f420, + 0x181e8: 0x0032fa88, 0x181e9: 0x4032fa20, 0x181ea: 0x00330888, 0x181eb: 0x40330820, + 0x181ec: 0x00330e88, 0x181ed: 0x40330e20, 0x181ee: 0x00331688, 0x181ef: 0x40331620, + 0x181f0: 0x00327084, 0x181f1: 0x00328884, 0x181f2: 0x00328e84, 0x181f3: 0x40326e20, + 0x181f4: 0x00326a8a, 0x181f5: 0x00325c84, 0x181f6: 0x40092e20, 0x181f7: 0x0032a888, + 0x181f8: 0x4032a820, 0x181f9: 0x00328e8a, 0x181fa: 0x00328288, 0x181fb: 0x40328220, + 0x181fc: 0x40328c20, 0x181fd: 0x00329288, 0x181fe: 0x00329088, 0x181ff: 0x00329488, + // Block 0x608, offset 0x18200 + 0x18200: 0xe00009b1, 0x18201: 0xe00009ae, 0x18202: 0xe0000a22, 0x18203: 0xe0000a1f, + 0x18204: 0xe000b0e6, 0x18205: 0xe000b0e3, 0x18206: 0xe0000a2e, 0x18207: 0xe0000a2b, + 0x18208: 0xe000b0f3, 0x18209: 0xe000b0ef, 0x1820a: 0xe0000a8c, 0x1820b: 0xe0000a89, + 0x1820c: 0xe000b0fa, 0x1820d: 0xe000b0f7, 0x1820e: 0xe0000aa4, 0x1820f: 0xe0000aa1, + 0x18210: 0xe0000a92, 0x18211: 0xe0000a8f, 0x18212: 0xe0000a9e, 0x18213: 0xe0000a9b, + 0x18214: 0xe0000b55, 0x18215: 0xe0000b51, 0x18216: 0xe000b119, 0x18217: 0xe000b115, + 0x18218: 0xe0000b7c, 0x18219: 0xe0000b79, 0x1821a: 0xe0000b82, 0x1821b: 0xe0000b7f, + 0x1821c: 0xe0000b39, 0x1821d: 0xe0000b35, 0x1821e: 0xe0000b8c, 0x1821f: 0xe0000b89, + 0x18220: 0xe0000bd0, 0x18221: 0xe0000bcd, 0x18222: 0xe0000c00, 0x18223: 0xe0000bfd, + 0x18224: 0xe000b13e, 0x18225: 0xe000b13b, 0x18226: 0xe0000bfa, 0x18227: 0xe0000bf7, + 0x18228: 0xe0000c06, 0x18229: 0xe0000c03, 0x1822a: 0xe0000c12, 0x1822b: 0xe0000c0f, + 0x1822c: 0xe0000c7e, 0x1822d: 0xe0000c7b, 0x1822e: 0xe000b15d, 0x1822f: 0xe000b159, + 0x18230: 0xe000b164, 0x18231: 0xe000b161, 0x18232: 0xe000b16a, 0x18233: 0xe000b167, + 0x18234: 0xe0000cb1, 0x18235: 0xe0000cae, 0x18236: 0xe000b176, 0x18237: 0xe000b173, + 0x18238: 0xe000b17d, 0x18239: 0xe000b179, 0x1823a: 0xe0000cf2, 0x1823b: 0xe0000cef, + 0x1823c: 0xe0000cec, 0x1823d: 0xe0000ce9, 0x1823e: 0xe000b184, 0x1823f: 0xe000b181, + // Block 0x609, offset 0x18240 + 0x18240: 0xe0000d24, 0x18241: 0xe0000d21, 0x18242: 0xe000b18a, 0x18243: 0xe000b187, + 0x18244: 0xe0000d69, 0x18245: 0xe0000d66, 0x18246: 0xe000b19c, 0x18247: 0xe000b199, + 0x18248: 0xe0000d87, 0x18249: 0xe0000d84, 0x1824a: 0xe0000d81, 0x1824b: 0xe0000d7e, + 0x1824c: 0xe000b1af, 0x1824d: 0xe000b1ab, 0x1824e: 0xe000b1b7, 0x1824f: 0xe000b1b3, + 0x18250: 0xe0000e3d, 0x18251: 0xe0000e39, 0x18252: 0xe000b1db, 0x18253: 0xe000b1d7, + 0x18254: 0xe000b218, 0x18255: 0xe000b215, 0x18256: 0xe0000ead, 0x18257: 0xe0000eaa, + 0x18258: 0xe0000ed6, 0x18259: 0xe0000ed3, 0x1825a: 0xe000b224, 0x1825b: 0xe000b221, + 0x1825c: 0xe000b22b, 0x1825d: 0xe000b227, 0x1825e: 0xe0000f02, 0x1825f: 0xe0000eff, + 0x18260: 0xe0000f41, 0x18261: 0xe0000f3e, 0x18262: 0xe000b240, 0x18263: 0xe000b23d, + 0x18264: 0xe000b239, 0x18265: 0xe000b235, 0x18266: 0xe0000f3a, 0x18267: 0xe0000f36, + 0x18268: 0xe000b247, 0x18269: 0xe000b243, 0x1826a: 0xe0000f93, 0x1826b: 0xe0000f90, + 0x1826c: 0xe000b24e, 0x1826d: 0xe000b24b, 0x1826e: 0xe0000fb1, 0x1826f: 0xe0000fae, + 0x18270: 0xe0000fab, 0x18271: 0xe0000fa8, 0x18272: 0xe0001093, 0x18273: 0xe0001090, + 0x18274: 0xe000109f, 0x18275: 0xe000109c, 0x18276: 0xe0001099, 0x18277: 0xe0001096, + 0x18278: 0xe000b261, 0x18279: 0xe000b25d, 0x1827a: 0xe0001046, 0x1827b: 0xe0001042, + 0x1827c: 0xe000b294, 0x1827d: 0xe000b291, 0x1827e: 0xe000b29a, 0x1827f: 0xe000b297, + // Block 0x60a, offset 0x18280 + 0x18280: 0xe00010d2, 0x18281: 0xe00010cf, 0x18282: 0xe000b2a0, 0x18283: 0xe000b29d, + 0x18284: 0xe00010e1, 0x18285: 0xe00010de, 0x18286: 0xe00010e7, 0x18287: 0xe00010e4, + 0x18288: 0xe000b2a6, 0x18289: 0xe000b2a3, 0x1828a: 0xe00010fc, 0x1828b: 0xe00010f9, + 0x1828c: 0xe00010f6, 0x1828d: 0xe00010f3, 0x1828e: 0xe0001123, 0x1828f: 0xe0001120, + 0x18290: 0xe0001141, 0x18291: 0xe000113e, 0x18292: 0xe000b2ca, 0x18293: 0xe000b2c7, + 0x18294: 0xe0001159, 0x18295: 0xe0001156, 0x18296: 0xe0000c15, 0x18297: 0xe0000f8d, + 0x18298: 0xe00010db, 0x18299: 0xe0001111, 0x1829a: 0xf0000404, 0x1829b: 0xe0000f70, + 0x1829c: 0x40300420, 0x1829d: 0x40300620, 0x1829e: 0xe0000f7f, 0x1829f: 0x402c9620, + 0x182a0: 0xe000b09e, 0x182a1: 0xe000b09b, 0x182a2: 0xe000b08c, 0x182a3: 0xe000b089, + 0x182a4: 0xe000b0da, 0x182a5: 0xe000b0d7, 0x182a6: 0xe000393a, 0x182a7: 0xe0003937, + 0x182a8: 0xe000b0ce, 0x182a9: 0xe000b0cb, 0x182aa: 0xe000b0d4, 0x182ab: 0xe000b0d1, + 0x182ac: 0xe000b0e0, 0x182ad: 0xe000b0dd, 0x182ae: 0xe000b0c2, 0x182af: 0xe000b0bf, + 0x182b0: 0xe0003894, 0x182b1: 0xe0003891, 0x182b2: 0xe000b0b6, 0x182b3: 0xe000b0b3, + 0x182b4: 0xe000b0bc, 0x182b5: 0xe000b0b9, 0x182b6: 0xe000b0c8, 0x182b7: 0xe000b0c5, + 0x182b8: 0xe000b112, 0x182b9: 0xe000b10f, 0x182ba: 0xe000b100, 0x182bb: 0xe000b0fd, + 0x182bc: 0xe000b106, 0x182bd: 0xe000b103, 0x182be: 0xe000b12c, 0x182bf: 0xe000b129, + // Block 0x60b, offset 0x182c0 + 0x182c0: 0xe000ad47, 0x182c1: 0xe000ad44, 0x182c2: 0xe000b120, 0x182c3: 0xe000b11d, + 0x182c4: 0xe000b126, 0x182c5: 0xe000b123, 0x182c6: 0xe000b132, 0x182c7: 0xe000b12f, + 0x182c8: 0xe000b144, 0x182c9: 0xe000b141, 0x182ca: 0xe000b156, 0x182cb: 0xe000b153, + 0x182cc: 0xe000b1cc, 0x182cd: 0xe000b1c9, 0x182ce: 0xe000b1a2, 0x182cf: 0xe000b19f, + 0x182d0: 0xe000b1ee, 0x182d1: 0xe000b1eb, 0x182d2: 0xe000ad65, 0x182d3: 0xe000ad62, + 0x182d4: 0xe000b1e2, 0x182d5: 0xe000b1df, 0x182d6: 0xe000b1e8, 0x182d7: 0xe000b1e5, + 0x182d8: 0xe000b1f4, 0x182d9: 0xe000b1f1, 0x182da: 0xe000b20c, 0x182db: 0xe000b209, + 0x182dc: 0xe000b1fa, 0x182dd: 0xe000b1f7, 0x182de: 0xe000b200, 0x182df: 0xe000b1fd, + 0x182e0: 0xe000b206, 0x182e1: 0xe000b203, 0x182e2: 0xe000b212, 0x182e3: 0xe000b20f, + 0x182e4: 0xe000b26e, 0x182e5: 0xe000b26b, 0x182e6: 0xe000b254, 0x182e7: 0xe000b251, + 0x182e8: 0xe000b288, 0x182e9: 0xe000b285, 0x182ea: 0xe0002958, 0x182eb: 0xe0002955, + 0x182ec: 0xe000b27c, 0x182ed: 0xe000b279, 0x182ee: 0xe000b282, 0x182ef: 0xe000b27f, + 0x182f0: 0xe000b28e, 0x182f1: 0xe000b28b, 0x182f2: 0xe0001108, 0x182f3: 0xe0001105, + 0x182f4: 0xe000b2be, 0x182f5: 0xe000b2bb, 0x182f6: 0xe000b2ac, 0x182f7: 0xe000b2a9, + 0x182f8: 0xe000b2b2, 0x182f9: 0xe000b2af, 0x182fa: 0xe0000d0a, 0x182fb: 0xe0000d07, + 0x182fc: 0x0030d888, 0x182fd: 0x4030d820, 0x182fe: 0x00312088, 0x182ff: 0x40312020, + // Block 0x60c, offset 0x18300 + 0x18300: 0xe0001165, 0x18301: 0xe00011a9, 0x18302: 0xe000117d, 0x18303: 0xe00011c1, + 0x18304: 0xe000b2cd, 0x18305: 0xe000b2df, 0x18306: 0xe000118f, 0x18307: 0xe00011d3, + 0x18308: 0xe0001168, 0x18309: 0xe00011ac, 0x1830a: 0xe0001181, 0x1830b: 0xe00011c5, + 0x1830c: 0xe000b2d1, 0x1830d: 0xe000b2e3, 0x1830e: 0xe0001193, 0x1830f: 0xe00011d7, + 0x18310: 0xe000121a, 0x18311: 0xe0001230, 0x18312: 0xe0001228, 0x18313: 0xe000123e, + 0x18314: 0xe000b2fb, 0x18315: 0xe000b303, + 0x18318: 0xe000121d, 0x18319: 0xe0001233, 0x1831a: 0xe000122c, 0x1831b: 0xe0001242, + 0x1831c: 0xe000b2ff, 0x1831d: 0xe000b307, + 0x18320: 0xe0001252, 0x18321: 0xe0001296, 0x18322: 0xe000126a, 0x18323: 0xe00012ae, + 0x18324: 0xe000b311, 0x18325: 0xe000b323, 0x18326: 0xe000127c, 0x18327: 0xe00012c0, + 0x18328: 0xe0001255, 0x18329: 0xe0001299, 0x1832a: 0xe000126e, 0x1832b: 0xe00012b2, + 0x1832c: 0xe000b315, 0x1832d: 0xe000b327, 0x1832e: 0xe0001280, 0x1832f: 0xe00012c4, + 0x18330: 0xe00012fb, 0x18331: 0xe0001319, 0x18332: 0xe0001309, 0x18333: 0xe0001327, + 0x18334: 0xe000b33f, 0x18335: 0xe000b347, 0x18336: 0xe0001311, 0x18337: 0xe000132f, + 0x18338: 0xe00012fe, 0x18339: 0xe000131c, 0x1833a: 0xe000130d, 0x1833b: 0xe000132b, + 0x1833c: 0xe000b343, 0x1833d: 0xe000b34b, 0x1833e: 0xe0001315, 0x1833f: 0xe0001333, + // Block 0x60d, offset 0x18340 + 0x18340: 0xe000136c, 0x18341: 0xe0001382, 0x18342: 0xe000137a, 0x18343: 0xe0001390, + 0x18344: 0xe000b359, 0x18345: 0xe000b361, + 0x18348: 0xe000136f, 0x18349: 0xe0001385, 0x1834a: 0xe000137e, 0x1834b: 0xe0001394, + 0x1834c: 0xe000b35d, 0x1834d: 0xe000b365, + 0x18350: 0xe00013ad, 0x18351: 0xe00013bc, 0x18352: 0xe00013b4, 0x18353: 0xe00013ca, + 0x18354: 0xe000b36f, 0x18355: 0xe000b373, 0x18356: 0xe00013b8, 0x18357: 0xe00013d2, + 0x18359: 0xe00013bf, 0x1835b: 0xe00013ce, + 0x1835d: 0xe000b377, 0x1835f: 0xe00013d6, + 0x18360: 0xe0001407, 0x18361: 0xe000144b, 0x18362: 0xe000141f, 0x18363: 0xe0001463, + 0x18364: 0xe000b385, 0x18365: 0xe000b397, 0x18366: 0xe0001431, 0x18367: 0xe0001475, + 0x18368: 0xe000140a, 0x18369: 0xe000144e, 0x1836a: 0xe0001423, 0x1836b: 0xe0001467, + 0x1836c: 0xe000b389, 0x1836d: 0xe000b39b, 0x1836e: 0xe0001435, 0x1836f: 0xe0001479, + 0x18370: 0xe00011f7, 0x18371: 0xe000b2f1, 0x18372: 0xe000124c, 0x18373: 0xe000b30b, + 0x18374: 0xe00012e4, 0x18375: 0xe000b335, 0x18376: 0xe000133d, 0x18377: 0xe000b34f, + 0x18378: 0xe000139e, 0x18379: 0xe000b369, 0x1837a: 0xe00013e0, 0x1837b: 0xe000b37b, + 0x1837c: 0xe0001499, 0x1837d: 0xe000b3a9, + // Block 0x60e, offset 0x18380 + 0x18380: 0xe00011a1, 0x18381: 0xe00011e5, 0x18382: 0xe0001185, 0x18383: 0xe00011c9, + 0x18384: 0xe000b2d5, 0x18385: 0xe000b2e7, 0x18386: 0xe0001197, 0x18387: 0xe00011db, + 0x18388: 0xe00011a5, 0x18389: 0xe00011e9, 0x1838a: 0xe000118a, 0x1838b: 0xe00011ce, + 0x1838c: 0xe000b2da, 0x1838d: 0xe000b2ec, 0x1838e: 0xe000119c, 0x1838f: 0xe00011e0, + 0x18390: 0xe000128e, 0x18391: 0xe00012d2, 0x18392: 0xe0001272, 0x18393: 0xe00012b6, + 0x18394: 0xe000b319, 0x18395: 0xe000b32b, 0x18396: 0xe0001284, 0x18397: 0xe00012c8, + 0x18398: 0xe0001292, 0x18399: 0xe00012d6, 0x1839a: 0xe0001277, 0x1839b: 0xe00012bb, + 0x1839c: 0xe000b31e, 0x1839d: 0xe000b330, 0x1839e: 0xe0001289, 0x1839f: 0xe00012cd, + 0x183a0: 0xe0001443, 0x183a1: 0xe0001487, 0x183a2: 0xe0001427, 0x183a3: 0xe000146b, + 0x183a4: 0xe000b38d, 0x183a5: 0xe000b39f, 0x183a6: 0xe0001439, 0x183a7: 0xe000147d, + 0x183a8: 0xe0001447, 0x183a9: 0xe000148b, 0x183aa: 0xe000142c, 0x183ab: 0xe0001470, + 0x183ac: 0xe000b392, 0x183ad: 0xe000b3a4, 0x183ae: 0xe000143e, 0x183af: 0xe0001482, + 0x183b0: 0xe0001201, 0x183b1: 0xe000120e, 0x183b2: 0xe00011fd, 0x183b3: 0xe0001214, + 0x183b4: 0xe000b2f7, 0x183b6: 0xe0001207, 0x183b7: 0xe000120a, + 0x183b8: 0xe0001204, 0x183b9: 0xe0001211, 0x183ba: 0xe00011fa, 0x183bb: 0xe000b2f4, + 0x183bc: 0xe0001217, 0x183bd: 0x40063620, 0x183be: 0x40326c20, 0x183bf: 0x40063620, + // Block 0x60f, offset 0x183c0 + 0x183c0: 0x40063a20, 0x183c1: 0xe00000b1, 0x183c2: 0xe00012ea, 0x183c3: 0xe00012f5, + 0x183c4: 0xe000b33b, 0x183c6: 0xe00012ee, 0x183c7: 0xe00012f1, + 0x183c8: 0xe000124f, 0x183c9: 0xe000b30e, 0x183ca: 0xe00012e7, 0x183cb: 0xe000b338, + 0x183cc: 0xe00012f8, 0x183cd: 0xe00000b7, 0x183ce: 0xe000b083, 0x183cf: 0xe00000ba, + 0x183d0: 0xe0001343, 0x183d1: 0xe000135e, 0x183d2: 0xe0001356, 0x183d3: 0xe000b355, + 0x183d6: 0xe0001349, 0x183d7: 0xe000135a, + 0x183d8: 0xe0001346, 0x183d9: 0xe0001361, 0x183da: 0xe0001340, 0x183db: 0xe000b352, + 0x183dd: 0xe00000c0, 0x183de: 0xe000b086, 0x183df: 0xe00000c3, + 0x183e0: 0xe00013e6, 0x183e1: 0xe0001401, 0x183e2: 0xe00013f9, 0x183e3: 0xe000b381, + 0x183e4: 0xe00013a4, 0x183e5: 0xe00013a7, 0x183e6: 0xe00013ec, 0x183e7: 0xe00013fd, + 0x183e8: 0xe00013e9, 0x183e9: 0xe0001404, 0x183ea: 0xe00013e3, 0x183eb: 0xe000b37e, + 0x183ec: 0xe00013aa, 0x183ed: 0xe00000ae, 0x183ee: 0xe000b080, 0x183ef: 0x40061e20, + 0x183f2: 0xe000149f, 0x183f3: 0xe00014aa, + 0x183f4: 0xe000b3af, 0x183f6: 0xe00014a3, 0x183f7: 0xe00014a6, + 0x183f8: 0xe00013a1, 0x183f9: 0xe000b36c, 0x183fa: 0xe000149c, 0x183fb: 0xe000b3ac, + 0x183fc: 0xe00014ad, 0x183fd: 0x40062020, 0x183fe: 0x40063820, + // Block 0x610, offset 0x18400 + 0x18400: 0xa0000000, 0x18401: 0xa0000000, 0x18402: 0xa0000000, 0x18403: 0xa0000000, + 0x18404: 0xa0000000, 0x18405: 0xa0000000, 0x18406: 0xa0000000, 0x18407: 0xa0000000, + 0x18408: 0xa0000000, 0x18409: 0x40020020, 0x1840a: 0x40020220, 0x1840b: 0x40020420, + 0x1840c: 0x40020620, 0x1840d: 0x40020820, 0x1840e: 0xa0000000, 0x1840f: 0xa0000000, + 0x18410: 0xa0000000, 0x18411: 0xa0000000, 0x18412: 0xa0000000, 0x18413: 0xa0000000, + 0x18414: 0xa0000000, 0x18415: 0xa0000000, 0x18416: 0xa0000000, 0x18417: 0xa0000000, + 0x18418: 0xa0000000, 0x18419: 0xa0000000, 0x1841a: 0xa0000000, 0x1841b: 0xa0000000, + 0x1841c: 0xa0000000, 0x1841d: 0xa0000000, 0x1841e: 0xa0000000, 0x1841f: 0xa0000000, + 0x18420: 0x40021220, 0x18421: 0x4002ba20, 0x18422: 0x4003e020, 0x18423: 0x4004ea20, + 0x18424: 0x4027de20, 0x18425: 0x4004ec20, 0x18426: 0x4004e620, 0x18427: 0x4003d220, + 0x18428: 0x4003f420, 0x18429: 0x4003f620, 0x1842a: 0x4004d820, 0x1842b: 0x40093820, + 0x1842c: 0x40024020, 0x1842d: 0x40021a20, 0x1842e: 0x4002e420, 0x1842f: 0x4004e220, + 0x18430: 0x4029cc20, 0x18431: 0x4029ce20, 0x18432: 0x4029d020, 0x18433: 0x4029d220, + 0x18434: 0x4029d420, 0x18435: 0x4029d620, 0x18436: 0x4029d820, 0x18437: 0x4029da20, + 0x18438: 0x4029dc20, 0x18439: 0x4029de20, 0x1843a: 0x40026c20, 0x1843b: 0x40026220, + 0x1843c: 0x40094020, 0x1843d: 0x40094220, 0x1843e: 0x40094420, 0x1843f: 0x4002c420, + // Block 0x611, offset 0x18440 + 0x18440: 0x4004d620, 0x18441: 0x002bde88, 0x18442: 0x002c0a88, 0x18443: 0x002c3a88, + 0x18444: 0x002c6288, 0x18445: 0x002c9888, 0x18446: 0x002d0888, 0x18447: 0x002d2288, + 0x18448: 0x002d6888, 0x18449: 0x002d9a88, 0x1844a: 0x002dcc88, 0x1844b: 0x002dfe88, + 0x1844c: 0xc0030002, 0x1844d: 0x002e8288, 0x1844e: 0x002e9e88, 0x1844f: 0x002ee288, + 0x18450: 0x002f2c88, 0x18451: 0x002f5688, 0x18452: 0x002f7a88, 0x18453: 0x002fe688, + 0x18454: 0x00302c88, 0x18455: 0x00306c88, 0x18456: 0x0030be88, 0x18457: 0x0030e288, + 0x18458: 0x0030f688, 0x18459: 0x00310088, 0x1845a: 0x00312a88, 0x1845b: 0x4003f820, + 0x1845c: 0x4004e420, 0x1845d: 0x4003fa20, 0x1845e: 0x40062420, 0x1845f: 0x40021620, + 0x18460: 0x40061e20, 0x18461: 0xcfa39ac2, 0x18462: 0x402c0a20, 0x18463: 0xcfa809b1, + 0x18464: 0x402c6220, 0x18465: 0xcfaa9b41, 0x18466: 0x402d0820, 0x18467: 0x402d2220, + 0x18468: 0x402d6820, 0x18469: 0xcfac9b51, 0x1846a: 0x402dcc20, 0x1846b: 0x402dfe20, + 0x1846c: 0xc0000002, 0x1846d: 0x402e8220, 0x1846e: 0x402e9e20, 0x1846f: 0xcfae9b62, + 0x18470: 0x402f2c20, 0x18471: 0x402f5620, 0x18472: 0x402f7a20, 0x18473: 0xcfb39be1, + 0x18474: 0x40302c20, 0x18475: 0xcfb59c02, 0x18476: 0x4030be20, 0x18477: 0x4030e220, + 0x18478: 0x4030f620, 0x18479: 0x40310020, 0x1847a: 0x40312a20, 0x1847b: 0x4003fc20, + 0x1847c: 0x40094820, 0x1847d: 0x4003fe20, 0x1847e: 0x40094c20, 0x1847f: 0xa0000000, + // Block 0x612, offset 0x18480 + 0x18480: 0xe00008f5, 0x18481: 0xe00008ef, 0x18482: 0xe0000921, 0x18483: 0xe0000969, + 0x18484: 0xe000095b, 0x18485: 0xe000094d, 0x18486: 0xe00009dd, 0x18487: 0xe0000a53, + 0x18488: 0xe0000ae8, 0x18489: 0xe0000ae2, 0x1848a: 0xe0000af4, 0x1848b: 0xe0000b20, + 0x1848c: 0xe0000c2b, 0x1848d: 0xe0000c25, 0x1848e: 0xe0000c37, 0x1848f: 0xe0000c43, + 0x18490: 0xe0000ab3, 0x18491: 0xe0000d63, 0x18492: 0xe0000d9a, 0x18493: 0xe0000d94, + 0x18494: 0xe0000da6, 0x18495: 0xe0000de6, 0x18496: 0xe0000dd2, 0x18497: 0x40093e20, + 0x18498: 0xe0000e12, 0x18499: 0xe0000fe1, 0x1849a: 0xe0000fdb, 0x1849b: 0xe0000fed, + 0x1849c: 0xe0000fff, 0x1849d: 0xe0001102, 0x1849e: 0x00318888, 0x1849f: 0xe0000f7b, + 0x184a0: 0xe00008f2, 0x184a1: 0xe00008ec, 0x184a2: 0xe000091e, 0x184a3: 0xe0000966, + 0x184a4: 0xcfa69b21, 0x184a5: 0xe000094a, 0x184a6: 0xe00009d5, 0x184a7: 0xe0000a4d, + 0x184a8: 0xe0000ae5, 0x184a9: 0xe0000adf, 0x184aa: 0xe0000af1, 0x184ab: 0xe0000b1d, + 0x184ac: 0xe0000c28, 0x184ad: 0xe0000c22, 0x184ae: 0xe0000c34, 0x184af: 0xe0000c40, + 0x184b0: 0xe0000aad, 0x184b1: 0xe0000d60, 0x184b2: 0xe0000d97, 0x184b3: 0xe0000d91, + 0x184b4: 0xe0000da3, 0x184b5: 0xe0000de3, 0x184b6: 0xcfb19bc1, 0x184b7: 0x40093c20, + 0x184b8: 0xe0000e0f, 0x184b9: 0xe0000fde, 0x184ba: 0xe0000fd8, 0x184bb: 0xe0000fea, + 0x184bc: 0xcfb89c61, 0x184bd: 0xe00010ff, 0x184be: 0x40318820, 0x184bf: 0xe0001114, + // Block 0x613, offset 0x184c0 + 0x184c0: 0xa0000000, 0x184c1: 0xa0000000, 0x184c2: 0xa0000000, 0x184c3: 0xa0000000, + 0x184c4: 0xa0000000, 0x184c5: 0xa0000000, 0x184c6: 0xa0000000, 0x184c7: 0xa0000000, + 0x184c8: 0xa0000000, 0x184c9: 0x40020020, 0x184ca: 0x40020220, 0x184cb: 0x40020420, + 0x184cc: 0x40020620, 0x184cd: 0x40020820, 0x184ce: 0xa0000000, 0x184cf: 0xa0000000, + 0x184d0: 0xa0000000, 0x184d1: 0xa0000000, 0x184d2: 0xa0000000, 0x184d3: 0xa0000000, + 0x184d4: 0xa0000000, 0x184d5: 0xa0000000, 0x184d6: 0xa0000000, 0x184d7: 0xa0000000, + 0x184d8: 0xa0000000, 0x184d9: 0xa0000000, 0x184da: 0xa0000000, 0x184db: 0xa0000000, + 0x184dc: 0xa0000000, 0x184dd: 0xa0000000, 0x184de: 0xa0000000, 0x184df: 0xa0000000, + 0x184e0: 0x40021220, 0x184e1: 0x4002ba20, 0x184e2: 0x4003e020, 0x184e3: 0x4004ea20, + 0x184e4: 0x4027de20, 0x184e5: 0x4004ec20, 0x184e6: 0x4004e620, 0x184e7: 0x4003d220, + 0x184e8: 0x4003f420, 0x184e9: 0x4003f620, 0x184ea: 0x4004d820, 0x184eb: 0x40093820, + 0x184ec: 0x40024020, 0x184ed: 0x40021a20, 0x184ee: 0x4002e420, 0x184ef: 0x4004e220, + 0x184f0: 0x4029cc20, 0x184f1: 0x4029ce20, 0x184f2: 0x4029d020, 0x184f3: 0x4029d220, + 0x184f4: 0x4029d420, 0x184f5: 0x4029d620, 0x184f6: 0x4029d820, 0x184f7: 0x4029da20, + 0x184f8: 0x4029dc20, 0x184f9: 0x4029de20, 0x184fa: 0x40026c20, 0x184fb: 0x40026220, + 0x184fc: 0x40094020, 0x184fd: 0x40094220, 0x184fe: 0x40094420, 0x184ff: 0x4002c420, + // Block 0x614, offset 0x18500 + 0x18500: 0x4004d620, 0x18501: 0x002bde88, 0x18502: 0x002c0a88, 0x18503: 0x002c3a88, + 0x18504: 0x002c6288, 0x18505: 0xce6d3081, 0x18506: 0x002d0888, 0x18507: 0xc52b2692, + 0x18508: 0x002d6888, 0x18509: 0x002d9a88, 0x1850a: 0x002dcc88, 0x1850b: 0x002dfe88, + 0x1850c: 0xc0030002, 0x1850d: 0x002e8288, 0x1850e: 0x002e9e88, 0x1850f: 0xc33f3081, + 0x18510: 0x002f2c88, 0x18511: 0x002f5688, 0x18512: 0x002f7a88, 0x18513: 0xc3433081, + 0x18514: 0x00302c88, 0x18515: 0x00306c88, 0x18516: 0x0030be88, 0x18517: 0x0030e288, + 0x18518: 0x0030f688, 0x18519: 0x00310088, 0x1851a: 0x00312a88, 0x1851b: 0x4003f820, + 0x1851c: 0x4004e420, 0x1851d: 0x4003fa20, 0x1851e: 0x40062420, 0x1851f: 0x40021620, + 0x18520: 0x40061e20, 0x18521: 0x402bde20, 0x18522: 0x402c0a20, 0x18523: 0x402c3a20, + 0x18524: 0x402c6220, 0x18525: 0xce6b3081, 0x18526: 0x402d0820, 0x18527: 0xc3372681, + 0x18528: 0x402d6820, 0x18529: 0x402d9a20, 0x1852a: 0x402dcc20, 0x1852b: 0x402dfe20, + 0x1852c: 0xc0000002, 0x1852d: 0x402e8220, 0x1852e: 0x402e9e20, 0x1852f: 0xc33d3081, + 0x18530: 0x402f2c20, 0x18531: 0x402f5620, 0x18532: 0x402f7a20, 0x18533: 0xc3413081, + 0x18534: 0x40302c20, 0x18535: 0x40306c20, 0x18536: 0x4030be20, 0x18537: 0x4030e220, + 0x18538: 0x4030f620, 0x18539: 0x40310020, 0x1853a: 0x40312a20, 0x1853b: 0x4003fc20, + 0x1853c: 0x40094820, 0x1853d: 0x4003fe20, 0x1853e: 0x40094c20, 0x1853f: 0xa0000000, + // Block 0x615, offset 0x18540 + 0x18540: 0xe0000d24, 0x18541: 0xe0000d21, 0x18542: 0xe0000d2a, 0x18543: 0xe0000d27, + 0x18544: 0xe0000d69, 0x18545: 0xe0000d66, 0x18546: 0xe0000d7b, 0x18547: 0xe0000d78, + 0x18548: 0xe0000d87, 0x18549: 0xe0000d84, 0x1854a: 0xe0000d81, 0x1854b: 0xe0000d7e, + 0x1854c: 0xe0000ded, 0x1854d: 0xe0000de9, 0x1854e: 0xe0000df5, 0x1854f: 0xe0000df1, + 0x18550: 0xe0000e3d, 0x18551: 0xe0000e39, 0x18552: 0xe0000e35, 0x18553: 0xe0000e31, + 0x18554: 0xe0000ea7, 0x18555: 0xe0000ea4, 0x18556: 0xe0000ead, 0x18557: 0xe0000eaa, + 0x18558: 0xe0000ed6, 0x18559: 0xe0000ed3, 0x1855a: 0xe0000ef4, 0x1855b: 0xe0000ef1, + 0x1855c: 0xe0000efb, 0x1855d: 0xe0000ef7, 0x1855e: 0xe0000f02, 0x1855f: 0xe0000eff, + 0x18560: 0xe0000f41, 0x18561: 0xe0000f3e, 0x18562: 0x002fe883, 0x18563: 0x402fe820, + 0x18564: 0xe0000f26, 0x18565: 0xe0000f22, 0x18566: 0xe0000f3a, 0x18567: 0xe0000f36, + 0x18568: 0xe000296a, 0x18569: 0xe0002967, 0x1856a: 0xe0000f93, 0x1856b: 0xe0000f90, + 0x1856c: 0xe0000f9f, 0x1856d: 0xe0000f9c, 0x1856e: 0xe0000fb1, 0x1856f: 0xe0000fae, + 0x18570: 0xe0000fab, 0x18571: 0xe0000fa8, 0x18572: 0xe0001093, 0x18573: 0xe0001090, + 0x18574: 0xe000109f, 0x18575: 0xe000109c, 0x18576: 0xe0001099, 0x18577: 0xe0001096, + 0x18578: 0xe0001032, 0x18579: 0xe000102e, 0x1857a: 0xe0001046, 0x1857b: 0xe0001042, + 0x1857c: 0xe00010a9, 0x1857d: 0xe00010a6, 0x1857e: 0xe00010af, 0x1857f: 0xe00010ac, + // Block 0x616, offset 0x18580 + 0x18580: 0xe00010d2, 0x18581: 0xe00010cf, 0x18582: 0xe00010cc, 0x18583: 0xe00010c9, + 0x18584: 0xe00010e1, 0x18585: 0xe00010de, 0x18586: 0xe00010e7, 0x18587: 0xe00010e4, + 0x18588: 0xe00010ed, 0x18589: 0xe00010ea, 0x1858a: 0xe00010fc, 0x1858b: 0xe00010f9, + 0x1858c: 0xe00010f6, 0x1858d: 0xe00010f3, 0x1858e: 0xe0001123, 0x1858f: 0xe0001120, + 0x18590: 0xe0001141, 0x18591: 0xe000113e, 0x18592: 0xe0001153, 0x18593: 0xe0001150, + 0x18594: 0xe0001159, 0x18595: 0xe0001156, 0x18596: 0xe0000c15, 0x18597: 0xe0000f8d, + 0x18598: 0xe00010db, 0x18599: 0xe0001111, 0x1859a: 0xf0000404, 0x1859b: 0xe0000f70, + 0x1859c: 0x40300420, 0x1859d: 0x40300620, 0x1859e: 0xe0000f7f, 0x1859f: 0x402c9620, + 0x185a0: 0xe000099b, 0x185a1: 0xe0000998, 0x185a2: 0xe0000989, 0x185a3: 0xe0000986, + 0x185a4: 0xe0000928, 0x185a5: 0xe0000924, 0x185a6: 0xe0000930, 0x185a7: 0xe000092c, + 0x185a8: 0xe0000940, 0x185a9: 0xe000093c, 0x185aa: 0xe0000938, 0x185ab: 0xe0000934, + 0x185ac: 0xe00009aa, 0x185ad: 0xe00009a6, 0x185ae: 0xe0000902, 0x185af: 0xe00008fe, + 0x185b0: 0xe000090a, 0x185b1: 0xe0000906, 0x185b2: 0xe000091a, 0x185b3: 0xe0000916, + 0x185b4: 0xe0000912, 0x185b5: 0xe000090e, 0x185b6: 0xe00009a2, 0x185b7: 0xe000099e, + 0x185b8: 0x002c9a83, 0x185b9: 0x402c9a20, 0x185ba: 0xe0000b5c, 0x185bb: 0xe0000b59, + 0x185bc: 0xe0000b26, 0x185bd: 0xe0000b23, 0x185be: 0xe0000afb, 0x185bf: 0xe0000af7, + // Block 0x617, offset 0x185c0 + 0x185c0: 0xe0000b03, 0x185c1: 0xe0000aff, 0x185c2: 0xe0000b13, 0x185c3: 0xe0000b0f, + 0x185c4: 0xe0000b0b, 0x185c5: 0xe0000b07, 0x185c6: 0xe000b3c5, 0x185c7: 0xe000b3c2, + 0x185c8: 0xe0000c66, 0x185c9: 0xe0000c63, 0x185ca: 0xe0000c78, 0x185cb: 0xe0000c75, + 0x185cc: 0x002ee483, 0x185cd: 0x402ee420, 0x185ce: 0xe0000e44, 0x185cf: 0xe0000e41, + 0x185d0: 0xe0000dad, 0x185d1: 0xe0000da9, 0x185d2: 0xe0000db5, 0x185d3: 0xe0000db1, + 0x185d4: 0xe0000dc5, 0x185d5: 0xe0000dc1, 0x185d6: 0xe0000dbd, 0x185d7: 0xe0000db9, + 0x185d8: 0xe0003c96, 0x185d9: 0xe0003c93, 0x185da: 0xe0000e5d, 0x185db: 0xe0000e59, + 0x185dc: 0xe0000e65, 0x185dd: 0xe0000e61, 0x185de: 0xe0000e75, 0x185df: 0xe0000e71, + 0x185e0: 0xe0000e6d, 0x185e1: 0xe0000e69, 0x185e2: 0xe0003c9c, 0x185e3: 0xe0003c99, + 0x185e4: 0xe000108d, 0x185e5: 0xe000108a, 0x185e6: 0xe000104d, 0x185e7: 0xe000104a, + 0x185e8: 0xe0001066, 0x185e9: 0xe0001062, 0x185ea: 0xe000106e, 0x185eb: 0xe000106a, + 0x185ec: 0xe000107e, 0x185ed: 0xe000107a, 0x185ee: 0xe0001076, 0x185ef: 0xe0001072, + 0x185f0: 0xe0001086, 0x185f1: 0xe0001082, 0x185f2: 0xe0001108, 0x185f3: 0xe0001105, + 0x185f4: 0xe0001135, 0x185f5: 0xe0001132, 0x185f6: 0xe000112f, 0x185f7: 0xe000112c, + 0x185f8: 0xe000111d, 0x185f9: 0xe000111a, 0x185fa: 0xe0000d0a, 0x185fb: 0xe0000d07, + 0x185fc: 0x0030d888, 0x185fd: 0x4030d820, 0x185fe: 0x00312088, 0x185ff: 0x40312020, + // Block 0x618, offset 0x18600 + 0x18600: 0xa0000000, 0x18601: 0xa0000000, 0x18602: 0xa0000000, 0x18603: 0xa0000000, + 0x18604: 0xa0000000, 0x18605: 0xa0000000, 0x18606: 0xa0000000, 0x18607: 0xa0000000, + 0x18608: 0xa0000000, 0x18609: 0x40020020, 0x1860a: 0x40020220, 0x1860b: 0x40020420, + 0x1860c: 0x40020620, 0x1860d: 0x40020820, 0x1860e: 0xa0000000, 0x1860f: 0xa0000000, + 0x18610: 0xa0000000, 0x18611: 0xa0000000, 0x18612: 0xa0000000, 0x18613: 0xa0000000, + 0x18614: 0xa0000000, 0x18615: 0xa0000000, 0x18616: 0xa0000000, 0x18617: 0xa0000000, + 0x18618: 0xa0000000, 0x18619: 0xa0000000, 0x1861a: 0xa0000000, 0x1861b: 0xa0000000, + 0x1861c: 0xa0000000, 0x1861d: 0xa0000000, 0x1861e: 0xa0000000, 0x1861f: 0xa0000000, + 0x18620: 0x40021220, 0x18621: 0x4002ba20, 0x18622: 0x4003e020, 0x18623: 0x4004ea20, + 0x18624: 0x4027de20, 0x18625: 0x4004ec20, 0x18626: 0x4004e620, 0x18627: 0x4003d220, + 0x18628: 0x4003f420, 0x18629: 0x4003f620, 0x1862a: 0x4004d820, 0x1862b: 0x40093820, + 0x1862c: 0x40024020, 0x1862d: 0x40021a20, 0x1862e: 0x4002e420, 0x1862f: 0x4004e220, + 0x18630: 0x4029cc20, 0x18631: 0x4029ce20, 0x18632: 0x4029d020, 0x18633: 0x4029d220, + 0x18634: 0x4029d420, 0x18635: 0x4029d620, 0x18636: 0x4029d820, 0x18637: 0x4029da20, + 0x18638: 0x4029dc20, 0x18639: 0x4029de20, 0x1863a: 0x40026c20, 0x1863b: 0x40026220, + 0x1863c: 0x40094020, 0x1863d: 0x40094220, 0x1863e: 0x40094420, 0x1863f: 0x4002c420, + // Block 0x619, offset 0x18640 + 0x18640: 0x4004d620, 0x18641: 0xcfbf9c81, 0x18642: 0x002c0a88, 0x18643: 0x002c3a88, + 0x18644: 0x002c6288, 0x18645: 0xcfcd9cc1, 0x18646: 0x002d0888, 0x18647: 0x002d2288, + 0x18648: 0x002d6888, 0x18649: 0xcfe19c81, 0x1864a: 0x002dcc88, 0x1864b: 0x002dfe88, + 0x1864c: 0xc0030002, 0x1864d: 0xcfeb9c81, 0x1864e: 0xcff59c81, 0x1864f: 0xcfff9c81, + 0x18650: 0x002f2c88, 0x18651: 0x002f5688, 0x18652: 0x002f7a88, 0x18653: 0x002fe688, + 0x18654: 0x00302c88, 0x18655: 0xd00e9d81, 0x18656: 0x0030be88, 0x18657: 0x0030e288, + 0x18658: 0x0030f688, 0x18659: 0x00310088, 0x1865a: 0x00312a88, 0x1865b: 0x4003f820, + 0x1865c: 0x4004e420, 0x1865d: 0x4003fa20, 0x1865e: 0x40062420, 0x1865f: 0x40021620, + 0x18660: 0x40061e20, 0x18661: 0xcfba9c81, 0x18662: 0x402c0a20, 0x18663: 0x402c3a20, + 0x18664: 0x402c6220, 0x18665: 0xcfc49cc1, 0x18666: 0x402d0820, 0x18667: 0x402d2220, + 0x18668: 0x402d6820, 0x18669: 0xcfdc9c81, 0x1866a: 0x402dcc20, 0x1866b: 0x402dfe20, + 0x1866c: 0xc0000002, 0x1866d: 0xcfe69c81, 0x1866e: 0xcff09c81, 0x1866f: 0xcffa9c81, + 0x18670: 0x402f2c20, 0x18671: 0x402f5620, 0x18672: 0x402f7a20, 0x18673: 0x402fe620, + 0x18674: 0x40302c20, 0x18675: 0xd0049d81, 0x18676: 0x4030be20, 0x18677: 0x4030e220, + 0x18678: 0x4030f620, 0x18679: 0x40310020, 0x1867a: 0x40312a20, 0x1867b: 0x4003fc20, + 0x1867c: 0x40094820, 0x1867d: 0x4003fe20, 0x1867e: 0x40094c20, 0x1867f: 0xa0000000, + // Block 0x61a, offset 0x18680 + 0x18680: 0x002bde63, 0x18681: 0x002bde23, 0x18682: 0xe0000921, 0x18683: 0xe0000969, + 0x18684: 0xe000095b, 0x18685: 0xe000094d, 0x18686: 0xe00009dd, 0x18687: 0xe0000a53, + 0x18688: 0x002c9863, 0x18689: 0x002c9823, 0x1868a: 0xcfd99d51, 0x1868b: 0xe0000b20, + 0x1868c: 0x002d9a63, 0x1868d: 0x002d9a23, 0x1868e: 0xe0000c37, 0x1868f: 0xe0000c43, + 0x18690: 0xe0000ab3, 0x18691: 0xe0000d63, 0x18692: 0x002ee263, 0x18693: 0x002ee223, + 0x18694: 0xe0000da6, 0x18695: 0xe0000de6, 0x18696: 0xe0000dd2, 0x18697: 0x40093e20, + 0x18698: 0xe0000e12, 0x18699: 0x00306c63, 0x1869a: 0x00306c23, 0x1869b: 0xe0000fed, + 0x1869c: 0x00306d23, 0x1869d: 0xe0001102, 0x1869e: 0x00318888, 0x1869f: 0xe0000f7b, + 0x186a0: 0x402bde1f, 0x186a1: 0x402bde1d, 0x186a2: 0xe000091e, 0x186a3: 0xe0000966, + 0x186a4: 0xe0000958, 0x186a5: 0xe000094a, 0x186a6: 0xe00009d5, 0x186a7: 0xe0000a4d, + 0x186a8: 0x402c981f, 0x186a9: 0x402c981d, 0x186aa: 0xcfd69d51, 0x186ab: 0xe0000b1d, + 0x186ac: 0x402d9a1f, 0x186ad: 0x402d9a1d, 0x186ae: 0xe0000c34, 0x186af: 0xe0000c40, + 0x186b0: 0xe0000aad, 0x186b1: 0xe0000d60, 0x186b2: 0x402ee21f, 0x186b3: 0x402ee21d, + 0x186b4: 0xe0000da3, 0x186b5: 0xe0000de3, 0x186b6: 0xe0000dcf, 0x186b7: 0x40093c20, + 0x186b8: 0xe0000e0f, 0x186b9: 0x40306c1f, 0x186ba: 0x40306c1d, 0x186bb: 0xe0000fea, + 0x186bc: 0x40306c25, 0x186bd: 0xe00010ff, 0x186be: 0x40318820, 0x186bf: 0xe0001114, + // Block 0x61b, offset 0x186c0 + 0x186c0: 0x002bde03, 0x186c1: 0x402bde1c, 0x186c2: 0xe00008fb, 0x186c3: 0xe00008f8, + 0x186c4: 0xe000097d, 0x186c5: 0xe000097a, 0x186c6: 0xe0000a38, 0x186c7: 0xe0000a35, + 0x186c8: 0xe0000a3e, 0x186c9: 0xe0000a3b, 0x186ca: 0xe0000a4a, 0x186cb: 0xe0000a47, + 0x186cc: 0xe0000a44, 0x186cd: 0xe0000a41, 0x186ce: 0xe0000a86, 0x186cf: 0xe0000a83, + 0x186d0: 0xe0000aaa, 0x186d1: 0xe0000aa7, 0x186d2: 0x002c9803, 0x186d3: 0x402c981c, + 0x186d4: 0xe0000aee, 0x186d5: 0xe0000aeb, 0x186d6: 0xe0000b2c, 0x186d7: 0xe0000b29, + 0x186d8: 0xe0000b40, 0x186d9: 0xe0000b3d, 0x186da: 0x002c9843, 0x186db: 0x402c981e, + 0x186dc: 0xe0000bb8, 0x186dd: 0xe0000bb5, 0x186de: 0xe0000bb2, 0x186df: 0xe0000baf, + 0x186e0: 0xe0000bc4, 0x186e1: 0xe0000bc1, 0x186e2: 0xe0000bca, 0x186e3: 0xe0000bc7, + 0x186e4: 0xe0000bee, 0x186e5: 0xe0000beb, 0x186e6: 0xe0000c1b, 0x186e7: 0xe0000c18, + 0x186e8: 0xe0000c51, 0x186e9: 0xe0000c4e, 0x186ea: 0x002d9a03, 0x186eb: 0x402d9a1c, + 0x186ec: 0xe0000c31, 0x186ed: 0xe0000c2e, 0x186ee: 0xe0000c5a, 0x186ef: 0xe0000c57, + 0x186f0: 0xe0000c54, 0x186f1: 0x402da220, 0x186f2: 0xf0000a0a, 0x186f3: 0xf0000404, + 0x186f4: 0xe0000c8a, 0x186f5: 0xe0000c87, 0x186f6: 0xe0000c9f, 0x186f7: 0xe0000c9c, + 0x186f8: 0x402f7220, 0x186f9: 0xe0000ccc, 0x186fa: 0xe0000cc9, 0x186fb: 0xe0000cd8, + 0x186fc: 0xe0000cd5, 0x186fd: 0xe0000cd2, 0x186fe: 0xe0000ccf, 0x186ff: 0xe0000d04, + // Block 0x61c, offset 0x18700 + 0x18700: 0xe0000cfe, 0x18701: 0xe0000cf8, 0x18702: 0xe0000cf5, 0x18703: 0x002e9e23, + 0x18704: 0x402e9e1d, 0x18705: 0xe0000d6f, 0x18706: 0xe0000d6c, 0x18707: 0x002e9e43, + 0x18708: 0x402e9e1e, 0x18709: 0xf0000404, 0x1870a: 0x002eda88, 0x1870b: 0x402eda20, + 0x1870c: 0x002ee203, 0x1870d: 0x402ee21c, 0x1870e: 0xe0000da0, 0x1870f: 0xe0000d9d, + 0x18710: 0xe0000de0, 0x18711: 0xe0000ddd, 0x18712: 0xe0000e93, 0x18713: 0xe0000e8f, + 0x18714: 0xe0000eca, 0x18715: 0xe0000ec7, 0x18716: 0xe0000edc, 0x18717: 0xe0000ed9, + 0x18718: 0xe0000ed0, 0x18719: 0xe0000ecd, 0x1871a: 0xe0000f1f, 0x1871b: 0xe0000f1c, + 0x1871c: 0xe0000f2d, 0x1871d: 0xe0000f2a, 0x1871e: 0xe0000f47, 0x1871f: 0xe0000f44, + 0x18720: 0xe0000f33, 0x18721: 0xe0000f30, 0x18722: 0xe0000f99, 0x18723: 0xe0000f96, + 0x18724: 0xe0000f8a, 0x18725: 0xe0000f87, 0x18726: 0x00303688, 0x18727: 0x40303620, + 0x18728: 0xe000102b, 0x18729: 0xe0001028, 0x1872a: 0x00306c03, 0x1872b: 0x40306c1c, + 0x1872c: 0xe0000fe7, 0x1872d: 0xe0000fe4, 0x1872e: 0xe0000ff9, 0x1872f: 0xe0000ff6, + 0x18730: 0xe0001025, 0x18731: 0xe0001022, 0x18732: 0xe0001039, 0x18733: 0xe0001036, + 0x18734: 0xe00010d8, 0x18735: 0xe00010d5, 0x18736: 0xe000110e, 0x18737: 0xe000110b, + 0x18738: 0xe0001117, 0x18739: 0xe000113b, 0x1873a: 0xe0001138, 0x1873b: 0xe000114d, + 0x1873c: 0xe000114a, 0x1873d: 0xe0001147, 0x1873e: 0xe0001144, 0x1873f: 0xe0000f64, + // Block 0x61d, offset 0x18740 + 0x18740: 0x40321220, 0x18741: 0x40321a20, 0x18742: 0x40322220, 0x18743: 0x40322a20, + 0x18744: 0xe0000ad5, 0x18745: 0xe0000ad1, 0x18746: 0xe0000acd, 0x18747: 0xf0000a0a, + 0x18748: 0xf000040a, 0x18749: 0xf0000404, 0x1874a: 0xf0000a0a, 0x1874b: 0xf000040a, + 0x1874c: 0xf0000404, 0x1874d: 0x002bde43, 0x1874e: 0x402bde1e, 0x1874f: 0x002d9a43, + 0x18750: 0x402d9a1e, 0x18751: 0x002ee243, 0x18752: 0x402ee21e, 0x18753: 0x00306c43, + 0x18754: 0x40306c1e, 0x18755: 0x00306ca3, 0x18756: 0x40306c21, 0x18757: 0x00306cc3, + 0x18758: 0x40306c22, 0x18759: 0x00306ce3, 0x1875a: 0x40306c23, 0x1875b: 0x00306d03, + 0x1875c: 0x40306c24, 0x1875d: 0x402cae20, 0x1875e: 0xe000b51f, 0x1875f: 0xe000b51c, + 0x18760: 0xe000b525, 0x18761: 0xe000b522, 0x18762: 0xe00009f4, 0x18763: 0xe00009ef, + 0x18764: 0x002d3a88, 0x18765: 0x402d3a20, 0x18766: 0xe0000bbe, 0x18767: 0xe0000bbb, + 0x18768: 0xe0000c99, 0x18769: 0xe0000c96, 0x1876a: 0xe0000e20, 0x1876b: 0xe0000e1d, + 0x1876c: 0xe000b579, 0x1876d: 0xe000b576, 0x1876e: 0xe0001162, 0x1876f: 0xe000115f, + 0x18770: 0xe0000c8d, 0x18771: 0xf0000a0a, 0x18772: 0xf000040a, 0x18773: 0xf0000404, + 0x18774: 0xe0000bac, 0x18775: 0xe0000ba9, 0x18776: 0x002d7888, 0x18777: 0x00319488, + 0x18778: 0x002e9e63, 0x18779: 0x402e9e1f, 0x1877a: 0xe000b537, 0x1877b: 0xe000b534, + 0x1877c: 0xe00009ea, 0x1877d: 0xe00009e5, 0x1877e: 0xe0000e19, 0x1877f: 0xe0000e15, + // Block 0x61e, offset 0x18780 + 0x18780: 0xe000098f, 0x18781: 0xe000098c, 0x18782: 0xe0000995, 0x18783: 0xe0000992, + 0x18784: 0xe0000b62, 0x18785: 0xe0000b5f, 0x18786: 0xe0000b68, 0x18787: 0xe0000b65, + 0x18788: 0xe0000c6c, 0x18789: 0xe0000c69, 0x1878a: 0xe0000c72, 0x1878b: 0xe0000c6f, + 0x1878c: 0xe0000e4a, 0x1878d: 0xe0000e47, 0x1878e: 0xe0000e50, 0x1878f: 0xe0000e4d, + 0x18790: 0xe0000ee8, 0x18791: 0xe0000ee5, 0x18792: 0xe0000eee, 0x18793: 0xe0000eeb, + 0x18794: 0xe0001053, 0x18795: 0xe0001050, 0x18796: 0xe0001059, 0x18797: 0xe0001056, + 0x18798: 0xe0000f61, 0x18799: 0xe0000f5e, 0x1879a: 0xe0000fa5, 0x1879b: 0xe0000fa2, + 0x1879c: 0x00312288, 0x1879d: 0x40312220, 0x1879e: 0xe0000bf4, 0x1879f: 0xe0000bf1, + 0x187a0: 0x002ebc88, 0x187a1: 0x402c8c20, 0x187a2: 0x002f2288, 0x187a3: 0x402f2220, + 0x187a4: 0x00314088, 0x187a5: 0x40314020, 0x187a6: 0xe000096f, 0x187a7: 0xe000096c, + 0x187a8: 0xe0000b32, 0x187a9: 0xe0000b2f, 0x187aa: 0xe000b567, 0x187ab: 0xe000b564, + 0x187ac: 0xe000b56d, 0x187ad: 0xe000b56a, 0x187ae: 0xe0000e04, 0x187af: 0xe0000e01, + 0x187b0: 0xe000b573, 0x187b1: 0xe000b570, 0x187b2: 0xe0001129, 0x187b3: 0xe0001126, + 0x187b4: 0x402e5e20, 0x187b5: 0x402ed020, 0x187b6: 0x40305a20, 0x187b7: 0x402dd420, + 0x187b8: 0xe0000abf, 0x187b9: 0xe0000ec4, 0x187ba: 0x002be888, 0x187bb: 0x002c4488, + 0x187bc: 0x402c4420, 0x187bd: 0x002e3888, 0x187be: 0x00303e88, 0x187bf: 0x402ffc20, + // Block 0x61f, offset 0x187c0 + 0x187c0: 0xe00009b1, 0x187c1: 0xe00009ae, 0x187c2: 0xe0000a22, 0x187c3: 0xe0000a1f, + 0x187c4: 0xe0000a28, 0x187c5: 0xe0000a25, 0x187c6: 0xe0000a2e, 0x187c7: 0xe0000a2b, + 0x187c8: 0xe0000a5a, 0x187c9: 0xe0000a56, 0x187ca: 0xe0000a8c, 0x187cb: 0xe0000a89, + 0x187cc: 0xe0000a98, 0x187cd: 0xe0000a95, 0x187ce: 0xe0000aa4, 0x187cf: 0xe0000aa1, + 0x187d0: 0xe0000a92, 0x187d1: 0xe0000a8f, 0x187d2: 0xe0000a9e, 0x187d3: 0xe0000a9b, + 0x187d4: 0xe000b54f, 0x187d5: 0xe000b54c, 0x187d6: 0xe000b549, 0x187d7: 0xe000b546, + 0x187d8: 0xe0000b7c, 0x187d9: 0xe0000b79, 0x187da: 0xe0000b82, 0x187db: 0xe0000b7f, + 0x187dc: 0xe0000b39, 0x187dd: 0xe0000b35, 0x187de: 0xe0000b8c, 0x187df: 0xe0000b89, + 0x187e0: 0xe0000bd0, 0x187e1: 0xe0000bcd, 0x187e2: 0xe0000c00, 0x187e3: 0xe0000bfd, + 0x187e4: 0xe0000c0c, 0x187e5: 0xe0000c09, 0x187e6: 0xe0000bfa, 0x187e7: 0xe0000bf7, + 0x187e8: 0xe0000c06, 0x187e9: 0xe0000c03, 0x187ea: 0xe0000c12, 0x187eb: 0xe0000c0f, + 0x187ec: 0xe0000c7e, 0x187ed: 0xe0000c7b, 0x187ee: 0xe000b555, 0x187ef: 0xe000b552, + 0x187f0: 0xe0000c93, 0x187f1: 0xe0000c90, 0x187f2: 0xe0000cab, 0x187f3: 0xe0000ca8, + 0x187f4: 0xe0000cb1, 0x187f5: 0xe0000cae, 0x187f6: 0xe0000cde, 0x187f7: 0xe0000cdb, + 0x187f8: 0xe0000ce5, 0x187f9: 0xe0000ce1, 0x187fa: 0xe0000cf2, 0x187fb: 0xe0000cef, + 0x187fc: 0xe0000cec, 0x187fd: 0xe0000ce9, 0x187fe: 0x002e8223, 0x187ff: 0x402e821d, + // Block 0x620, offset 0x18800 + 0x18800: 0xe0000d24, 0x18801: 0xe0000d21, 0x18802: 0xe0000d2a, 0x18803: 0xe0000d27, + 0x18804: 0xe0000d69, 0x18805: 0xe0000d66, 0x18806: 0xe0000d7b, 0x18807: 0xe0000d78, + 0x18808: 0xe0000d87, 0x18809: 0xe0000d84, 0x1880a: 0xe0000d81, 0x1880b: 0xe0000d7e, + 0x1880c: 0xe000b585, 0x1880d: 0xe000b582, 0x1880e: 0xe0000df5, 0x1880f: 0xe0000df1, + 0x18810: 0xe000b561, 0x18811: 0xe000b55e, 0x18812: 0xe000b55b, 0x18813: 0xe000b558, + 0x18814: 0xe0000ea7, 0x18815: 0xe0000ea4, 0x18816: 0xe0000ead, 0x18817: 0xe0000eaa, + 0x18818: 0xe0000ed6, 0x18819: 0xe0000ed3, 0x1881a: 0xe0000ef4, 0x1881b: 0xe0000ef1, + 0x1881c: 0xe0000efb, 0x1881d: 0xe0000ef7, 0x1881e: 0xe0000f02, 0x1881f: 0xe0000eff, + 0x18820: 0xe0000f41, 0x18821: 0xe0000f3e, 0x18822: 0xe0000f53, 0x18823: 0xe0000f50, + 0x18824: 0xe0000f26, 0x18825: 0xe0000f22, 0x18826: 0xe0000f3a, 0x18827: 0xe0000f36, + 0x18828: 0xe0000f5a, 0x18829: 0xe0000f56, 0x1882a: 0xe0000f93, 0x1882b: 0xe0000f90, + 0x1882c: 0xe0000f9f, 0x1882d: 0xe0000f9c, 0x1882e: 0xe0000fb1, 0x1882f: 0xe0000fae, + 0x18830: 0xe0000fab, 0x18831: 0xe0000fa8, 0x18832: 0xe0001093, 0x18833: 0xe0001090, + 0x18834: 0xe000109f, 0x18835: 0xe000109c, 0x18836: 0xe0001099, 0x18837: 0xe0001096, + 0x18838: 0xe000b5a3, 0x18839: 0xe000b5a0, 0x1883a: 0xe000b59d, 0x1883b: 0xe000b59a, + 0x1883c: 0xe00010a9, 0x1883d: 0xe00010a6, 0x1883e: 0xe00010af, 0x1883f: 0xe00010ac, + // Block 0x621, offset 0x18840 + 0x18840: 0xe00010d2, 0x18841: 0xe00010cf, 0x18842: 0xe00010cc, 0x18843: 0xe00010c9, + 0x18844: 0xe00010e1, 0x18845: 0xe00010de, 0x18846: 0xe00010e7, 0x18847: 0xe00010e4, + 0x18848: 0xe00010ed, 0x18849: 0xe00010ea, 0x1884a: 0xe00010fc, 0x1884b: 0xe00010f9, + 0x1884c: 0xe00010f6, 0x1884d: 0xe00010f3, 0x1884e: 0xe0001123, 0x1884f: 0xe0001120, + 0x18850: 0xe0001141, 0x18851: 0xe000113e, 0x18852: 0xe0001153, 0x18853: 0xe0001150, + 0x18854: 0xe0001159, 0x18855: 0xe0001156, 0x18856: 0xe0000c15, 0x18857: 0xe0000f8d, + 0x18858: 0xe00010db, 0x18859: 0xe0001111, 0x1885a: 0xf0000404, 0x1885b: 0xe0000f70, + 0x1885c: 0x40300420, 0x1885d: 0x40300620, 0x1885e: 0xe0000f7f, 0x1885f: 0x402c9620, + 0x18860: 0xe000099b, 0x18861: 0xe0000998, 0x18862: 0xe0000989, 0x18863: 0xe0000986, + 0x18864: 0xe000b531, 0x18865: 0xe000b52e, 0x18866: 0xe000b543, 0x18867: 0xe000b540, + 0x18868: 0xe0000940, 0x18869: 0xe000093c, 0x1886a: 0xe0000938, 0x1886b: 0xe0000934, + 0x1886c: 0xe00009aa, 0x1886d: 0xe00009a6, 0x1886e: 0xe000b52b, 0x1886f: 0xe000b528, + 0x18870: 0xe000b53d, 0x18871: 0xe000b53a, 0x18872: 0xe000091a, 0x18873: 0xe0000916, + 0x18874: 0xe0000912, 0x18875: 0xe000090e, 0x18876: 0xe00009a2, 0x18877: 0xe000099e, + 0x18878: 0xe0000b6e, 0x18879: 0xe0000b6b, 0x1887a: 0xe0000b5c, 0x1887b: 0xe0000b59, + 0x1887c: 0xe0000b26, 0x1887d: 0xe0000b23, 0x1887e: 0x002c98c3, 0x1887f: 0x402c9822, + // Block 0x622, offset 0x18880 + 0x18880: 0x002c9903, 0x18881: 0x402c9824, 0x18882: 0xe0000b13, 0x18883: 0xe0000b0f, + 0x18884: 0xe0000b0b, 0x18885: 0xe0000b07, 0x18886: 0xe0000b75, 0x18887: 0xe0000b71, + 0x18888: 0xe0000c66, 0x18889: 0xe0000c63, 0x1888a: 0xe0000c78, 0x1888b: 0xe0000c75, + 0x1888c: 0xe0000e84, 0x1888d: 0xe0000e81, 0x1888e: 0xe0000e44, 0x1888f: 0xe0000e41, + 0x18890: 0xe000b57f, 0x18891: 0xe000b57c, 0x18892: 0xe000b591, 0x18893: 0xe000b58e, + 0x18894: 0xe0000dc5, 0x18895: 0xe0000dc1, 0x18896: 0xe0000dbd, 0x18897: 0xe0000db9, + 0x18898: 0xe0000e8b, 0x18899: 0xe0000e87, 0x1889a: 0xe000b58b, 0x1889b: 0xe000b588, + 0x1889c: 0xe000b597, 0x1889d: 0xe000b594, 0x1889e: 0xe0000e75, 0x1889f: 0xe0000e71, + 0x188a0: 0xe0000e6d, 0x188a1: 0xe0000e69, 0x188a2: 0xe0000e7d, 0x188a3: 0xe0000e79, + 0x188a4: 0xe000108d, 0x188a5: 0xe000108a, 0x188a6: 0xe000104d, 0x188a7: 0xe000104a, + 0x188a8: 0xe000b5a9, 0x188a9: 0xe000b5a6, 0x188aa: 0xe000b5af, 0x188ab: 0xe000b5ac, + 0x188ac: 0xe000107e, 0x188ad: 0xe000107a, 0x188ae: 0xe0001076, 0x188af: 0xe0001072, + 0x188b0: 0xe0001086, 0x188b1: 0xe0001082, 0x188b2: 0xe0001108, 0x188b3: 0xe0001105, + 0x188b4: 0xe0001135, 0x188b5: 0xe0001132, 0x188b6: 0xe000112f, 0x188b7: 0xe000112c, + 0x188b8: 0xe000111d, 0x188b9: 0xe000111a, 0x188ba: 0xe0000d0a, 0x188bb: 0xe0000d07, + 0x188bc: 0x0030d888, 0x188bd: 0x4030d820, 0x188be: 0x00312088, 0x188bf: 0x40312020, + // Block 0x623, offset 0x188c0 + 0x188c0: 0x6d200220, 0x188c1: 0x6c16fe20, 0x188c2: 0x6d0bdc20, 0x188c3: 0x6d1b3420, + 0x188c4: 0x6d0bd620, 0x188c5: 0x6cc58020, 0x188c6: 0x6c6ece20, 0x188c7: 0xe000240a, + 0x188c8: 0x6c29ae20, 0x188c9: 0x6c29ca20, 0x188ca: 0x6c100220, 0x188cb: 0x6c6b9220, + 0x188cc: 0x6cff9e20, 0x188cd: 0x6cffa020, 0x188ce: 0x6cf39620, 0x188cf: 0x6cedd020, + 0x188d0: 0x6cedd220, 0x188d1: 0x6cf39820, 0x188d2: 0x6cd8fa20, 0x188d3: 0x6d10c420, + 0x188d4: 0x6c630820, 0x188d5: 0x6c616620, 0x188d6: 0x6d036620, 0x188d7: 0x6d036820, + 0x188d8: 0x6cd49220, 0x188d9: 0x6cdbee20, 0x188db: 0x6cc64c20, + 0x188dc: 0x6cc63420, 0x188dd: 0x6d266620, 0x188de: 0x6c271e20, 0x188df: 0x2ca22083, + 0x188e0: 0x6c9f8820, 0x188e1: 0x6cd74220, 0x188e2: 0x6cd74420, 0x188e3: 0x6c0c6c20, + 0x188e4: 0x6d2ff820, 0x188e5: 0x6d2ff220, 0x188e6: 0x6cbb3620, 0x188e7: 0x6ca96420, + 0x188e8: 0x6cc38820, 0x188e9: 0xe000243f, 0x188ea: 0xe0002442, 0x188eb: 0x6ca2c020, + 0x188ec: 0x6cd2f220, 0x188ed: 0x6cd40820, 0x188ee: 0x6cd30220, 0x188ef: 0x6cd86820, + 0x188f0: 0x6cd86a20, 0x188f1: 0x6c429620, 0x188f2: 0x6cee4220, 0x188f3: 0xe0002451, + 0x188f4: 0x6cee4020, 0x188f5: 0xe000244e, 0x188f6: 0x6cc5ba20, 0x188f7: 0x6cc60a20, + 0x188f8: 0x02ff1684, 0x188f9: 0x03000484, 0x188fa: 0x6d24ba20, 0x188fb: 0x6d24bc20, + 0x188fc: 0x6cc78020, 0x188fd: 0x6c719e20, 0x188fe: 0x6c12be20, 0x188ff: 0x6c12c220, + // Block 0x624, offset 0x18900 + 0x18900: 0x6c12c420, 0x18901: 0x6c562e20, 0x18902: 0x6d199a20, 0x18903: 0x6cf76620, + 0x18904: 0x6cf94e20, 0x18905: 0x6c673620, 0x18906: 0x0313a484, 0x18907: 0xe000246c, + 0x18908: 0x6d0d2e20, 0x18909: 0x6c077420, 0x1890a: 0xe000246f, 0x1890b: 0x6c17e220, + 0x1890c: 0x6c21a220, 0x1890d: 0x6c21a620, 0x1890e: 0x6c21f020, 0x1890f: 0x6c3f9a20, + 0x18910: 0x6c6c7c20, 0x18911: 0x6c16dc20, 0x18912: 0x6c16de20, 0x18913: 0x6d2f1620, + 0x18914: 0x6c9ae820, 0x18915: 0xe000247b, 0x18916: 0x6c3f9c20, 0x18917: 0x6d222020, + 0x18918: 0x6cbe6a20, 0x18919: 0x6cef7e20, 0x1891a: 0x6d13ae20, 0x1891b: 0x6c3c9820, + 0x1891c: 0x6c3a3020, 0x1891d: 0x6cd29c20, 0x1891e: 0xe0002481, 0x1891f: 0x6cd29e20, + 0x18920: 0x6cd2a020, 0x18921: 0xe0002484, 0x18922: 0x6c96ae20, 0x18923: 0x6c476c20, + 0x18924: 0x6c4b2420, 0x18925: 0x6d220e20, 0x18926: 0x6ca7ce20, 0x18927: 0x6c920a20, + 0x18928: 0x6c975620, 0x18929: 0x6c5a4020, 0x1892a: 0x6c9e4820, 0x1892b: 0x6cb6bc20, + 0x1892c: 0x6cb6be20, 0x1892d: 0x6c1bd020, 0x1892e: 0x6c1bd220, 0x1892f: 0x6c902820, + 0x18930: 0x6c902a20, 0x18931: 0x6c4ab620, 0x18932: 0x6c4ab420, 0x18933: 0x2c4a3883, + // Block 0x625, offset 0x18940 + 0x18940: 0x2d13b686, 0x18941: 0x2c4bb683, 0x18942: 0x2d3a5283, 0x18943: 0x2cb1dc83, + 0x18944: 0x2d15aa84, 0x18945: 0x2c73be83, 0x18946: 0x2c37b486, 0x18947: 0x2ce7e283, + 0x18948: 0x2cc55a84, 0x18949: 0x2c372e83, 0x1894a: 0x2cc80e83, 0x1894b: 0x2c030a84, + 0x1894c: 0x2c6ed083, 0x1894d: 0x2c9d1683, 0x1894e: 0x2c0d9e83, 0x1894f: 0x2c610c83, + 0x18950: 0x2cb9ec83, 0x18951: 0x2c29b083, 0x18952: 0x2c855c83, 0x18953: 0x2c059c83, + 0x18954: 0x2c08aa83, 0x18955: 0x2c397e83, 0x18956: 0x2cf83483, 0x18957: 0x2cd22485, + 0x18958: 0x2c100483, 0x18959: 0x2c6a4e83, 0x1895a: 0x2c16e083, 0x1895b: 0x2cd7b483, + 0x1895c: 0x2d200483, 0x1895d: 0x2c79c883, 0x1895e: 0x2ceed683, 0x1895f: 0x2ce91084, + 0x18960: 0x2cd2e283, 0x18961: 0x2d34ca83, 0x18962: 0x2cdba683, 0x18963: 0x2cf55a83, + 0x18964: 0x2c26e483, 0x18965: 0x2caa6e84, 0x18966: 0x2d3f6883, 0x18967: 0x2c9db683, + 0x18968: 0x2c25b083, 0x18969: 0x2cffa283, 0x1896a: 0x2d1edc83, 0x1896b: 0x2cd18a83, + 0x1896c: 0x2c17fa83, 0x1896d: 0x2cccb083, 0x1896e: 0x2c1fd683, 0x1896f: 0x2c454a83, + 0x18970: 0x2c610e83, 0x18971: 0x2c6c1a83, 0x18972: 0x2c420a83, 0x18973: 0x2d107e83, + 0x18974: 0x2c4a0283, 0x18975: 0x2d1ac083, 0x18976: 0x2c45cc83, 0x18977: 0x2d163c83, + 0x18978: 0x2c454c83, 0x18979: 0x2c616883, 0x1897a: 0x2cccb283, 0x1897b: 0x2c1bd483, + 0x1897c: 0x2d02a283, 0x1897d: 0x2c436083, 0x1897e: 0x2c563883, 0x1897f: 0x2cd43684, + // Block 0x626, offset 0x18980 + 0x18980: 0x2d337e83, 0x18981: 0x2cb3fc83, 0x18982: 0x2cf17a84, 0x18983: 0x2c30f883, + 0x18984: 0x2c6c1e83, 0x18985: 0x2c398083, 0x18986: 0x2cf39a83, 0x18987: 0x2cc63684, + 0x18988: 0x2d264283, 0x18989: 0x2d266885, 0x1898a: 0x2ca25c84, 0x1898b: 0x2cba3883, + 0x1898c: 0x2d34cc83, 0x1898d: 0x2c271283, 0x1898e: 0x2cd49883, 0x1898f: 0x2cf39c83, + 0x18990: 0x2c08ac83, 0x18991: 0x2c98c083, 0x18992: 0x2cd2e483, 0x18993: 0x2cb72683, + 0x18994: 0x2cd70284, 0x18995: 0x2c5d8484, 0x18996: 0x2d2f8083, 0x18997: 0x2c3fa083, + 0x18998: 0x2d10c683, 0x18999: 0x2cac5083, 0x1899a: 0x2cb14483, 0x1899b: 0x2d0b0883, + 0x1899c: 0x2ca96683, 0x1899d: 0x2cc34c83, 0x1899e: 0x2d07fa83, 0x1899f: 0x2d22b883, + 0x189a0: 0x2c483e83, 0x189a1: 0x2cec0c83, 0x189a2: 0x2c415c83, 0x189a3: 0x2cd0d284, + 0x189a4: 0x2d1e6c83, 0x189a5: 0x2ce47e83, 0x189a6: 0x2cb04483, 0x189a7: 0x2ca54083, + 0x189a8: 0x2c0e4683, 0x189a9: 0x2c040883, 0x189aa: 0x2cafa883, 0x189ab: 0x2c9f8a83, + 0x189ac: 0x2ca26483, 0x189ad: 0x2c98c283, 0x189ae: 0x2cd2a883, 0x189af: 0x2cd22c83, + 0x189b0: 0x2cd2f483, 0x189b1: 0x2cc74083, 0x189b2: 0x2c50b283, 0x189b3: 0x2d08f283, + 0x189b4: 0x2c856c83, 0x189b5: 0x2d39f083, 0x189b6: 0x2c9cd683, 0x189b7: 0x2c9d1a83, + 0x189b8: 0x2c3d1a83, 0x189b9: 0x2cedf483, 0x189ba: 0x2d0f7683, 0x189bb: 0x2d221c83, + 0x189bc: 0x2c819a83, 0x189bd: 0x2c373083, 0x189be: 0x2c82b283, 0x189bf: 0x2c378483, + // Block 0x627, offset 0x189c0 + 0x189c0: 0x2d22c683, 0x189c1: 0x2cc78283, 0x189c2: 0x2c189483, 0x189c3: 0x2d3f2a83, + 0x189c4: 0x2d357083, 0x189c5: 0x2c6fd083, 0x189c6: 0x2ccf0683, 0x189c7: 0x2c201683, + 0x189c8: 0x2d385283, 0x189c9: 0x2c449e83, 0x189ca: 0x2ccb1483, 0x189cb: 0x2c12aa83, + 0x189cc: 0x2c549483, 0x189cd: 0x2c1d0883, 0x189ce: 0x2d093883, 0x189cf: 0x2d03ba83, + 0x189d0: 0x2d13be83, 0x189d1: 0x2d0b7083, 0x189d2: 0x2c665283, 0x189d3: 0x2c68c683, + 0x189d4: 0x2d0c5c83, 0x189d5: 0x2c475c83, 0x189d6: 0x2c30fa83, 0x189d7: 0x2cd2b083, + 0x189d8: 0x2d357c83, 0x189d9: 0x2c06dc83, 0x189da: 0x2c1be883, 0x189db: 0x2d407e84, + 0x189dc: 0x2d40a683, 0x189dd: 0x2ccfa483, 0x189de: 0x2c17ce83, 0x189df: 0x2d02ae83, + 0x189e0: 0x2c18a083, 0x189e1: 0x2c21a883, 0x189e2: 0x2d169e83, 0x189e3: 0x2d1fa483, + 0x189e4: 0x2c0b7883, 0x189e5: 0x2c84fc83, 0x189e6: 0x2c6c2e84, 0x189e7: 0x2d2f0083, + 0x189e8: 0x2c9ac683, 0x189e9: 0x2c3fba83, 0x189ea: 0x2c859883, 0x189eb: 0x2d3c5683, + 0x189ec: 0x2d222283, 0x189ed: 0x2cbe3083, 0x189ee: 0x2c39f283, 0x189ef: 0x2c9e5683, + 0x189f0: 0x2c43d083, 0x189f1: 0x2ceeee83, 0x189f2: 0x2c6fb483, 0x189f3: 0x2d19ba83, + 0x189f4: 0x2d12dc83, 0x189f5: 0x2c3c2c83, 0x189f6: 0x2c39f483, 0x189f7: 0x2cd25883, + 0x189f8: 0x2cd44283, 0x189f9: 0x2cfd6683, 0x189fa: 0x2c969883, 0x189fb: 0x2c476e83, + 0x189fc: 0x2c42bc83, 0x189fd: 0x2c0bf483, 0x189fe: 0x2c310e83, 0x189ff: 0x2c170e83, + // Block 0x628, offset 0x18a00 + 0x18a00: 0x2c43e083, 0x18a01: 0x2c4ae283, 0x18a02: 0x2d211283, 0x18a03: 0x2ca79a83, + 0x18a04: 0x2c91bc83, 0x18a05: 0x2c924c83, 0x18a06: 0x2c973283, 0x18a07: 0x2c966883, + 0x18a08: 0x2c59ce83, 0x18a09: 0x2cd56083, 0x18a0a: 0x2c521c83, 0x18a0b: 0x2d353483, + 0x18a0c: 0x2c9e3283, 0x18a0d: 0x2c2f7483, 0x18a0e: 0x2c47a683, 0x18a0f: 0x2cd56683, + 0x18a10: 0x2c08a283, 0x18a11: 0x2cb63483, 0x18a12: 0x2c1bc283, 0x18a13: 0x2c8fb083, + 0x18a14: 0x2c4a9683, 0x18a15: 0x2d26f683, + 0x18a30: 0x40273a20, 0x18a31: 0x40273c20, 0x18a32: 0x40273e20, 0x18a33: 0x40274020, + 0x18a34: 0x40274220, 0x18a35: 0x40274420, 0x18a36: 0x40274620, 0x18a37: 0x40274820, + 0x18a38: 0x40274a20, 0x18a39: 0x40274c20, 0x18a3a: 0x40274e20, 0x18a3b: 0x40275020, + // Block 0x629, offset 0x18a40 + 0x18a40: 0x00021283, 0x18a41: 0x40025c20, 0x18a42: 0x40030420, 0x18a43: 0x40051220, + 0x18a44: 0x40279a20, 0x18a45: 0x4027ca20, 0x18a46: 0xe0002206, 0x18a47: 0x6c8c9620, + 0x18a48: 0x40049c20, 0x18a49: 0x40049e20, 0x18a4a: 0x4004a020, 0x18a4b: 0x4004a220, + 0x18a4c: 0x4004a420, 0x18a4d: 0x4004a620, 0x18a4e: 0x4004a820, 0x18a4f: 0x4004aa20, + 0x18a50: 0x4004ac20, 0x18a51: 0x4004ae20, 0x18a52: 0x40279c20, 0x18a53: 0x40279e20, + 0x18a54: 0x4004b020, 0x18a55: 0x4004b220, 0x18a56: 0x4004b420, 0x18a57: 0x4004b620, + 0x18a58: 0x4004b820, 0x18a59: 0x4004ba20, 0x18a5a: 0x4004bc20, 0x18a5b: 0x4004be20, + 0x18a5c: 0x40023820, 0x18a5d: 0x4003ea20, 0x18a5e: 0x4003ec20, 0x18a5f: 0x4003ee20, + 0x18a60: 0x4027a020, 0x18a61: 0xe0000267, 0x18a62: 0xe000037f, 0x18a63: 0xe0000459, + 0x18a64: 0xe000052e, 0x18a65: 0xe00005f8, 0x18a66: 0xe00006c3, 0x18a67: 0xe000076b, + 0x18a68: 0xe0000817, 0x18a69: 0xe00008bc, 0x18a6a: 0xada12202, 0x18a6b: 0xae412302, + 0x18a6c: 0xae812402, 0x18a6d: 0xade12502, 0x18a6e: 0xae012602, 0x18a6f: 0xae012702, + 0x18a70: 0x40023a20, 0x18a71: 0x4027ce20, 0x18a72: 0xe0000152, 0x18a73: 0x4027d020, + 0x18a74: 0xe0000155, 0x18a75: 0x4027d220, 0x18a76: 0x00279c84, 0x18a77: 0x4027a220, + 0x18a78: 0x2cd22484, 0x18a79: 0x2ca75483, 0x18a7a: 0x2cc96283, 0x18a7b: 0x4027cc20, + 0x18a7c: 0xe000231a, 0x18a7d: 0x40051420, 0x18a7e: 0x4027a420, 0x18a7f: 0x4027a620, + // Block 0x62a, offset 0x18a80 + 0x18a80: 0x00633a84, 0x18a81: 0x00634484, 0x18a82: 0x0064f684, 0x18a83: 0x0064f884, + 0x18a84: 0x00635a84, 0x18a85: 0x00635c84, 0x18a86: 0x00635e84, 0x18a87: 0x0063ee84, + 0x18a88: 0x0063f084, 0x18a89: 0x0063f684, 0x18a8a: 0x00640884, 0x18a8b: 0x00640a84, + 0x18a8c: 0x00640e84, 0x18a8d: 0x00642284, 0x18a8e: 0x00642884, + 0x18a90: 0x4027a820, 0x18a91: 0x4027aa20, 0x18a92: 0x2d13b685, 0x18a93: 0x2c37b485, + 0x18a94: 0x2cc9f285, 0x18a95: 0x2cd87484, 0x18a96: 0x2cce4884, 0x18a97: 0x2d378285, + 0x18a98: 0x2cfa2684, 0x18a99: 0x2c63fc83, 0x18a9a: 0x2d15aa83, 0x18a9b: 0x2c0dba83, + 0x18a9c: 0x2c2f4083, 0x18a9d: 0x2ce45484, 0x18a9e: 0x2c2a8a83, 0x18a9f: 0x2cc55a83, + 0x18aa0: 0xe000237a, 0x18aa1: 0xe0002383, 0x18aa2: 0xe0002380, 0x18aa3: 0xe000237d, + 0x18aa4: 0x40661c20, 0x18aa5: 0xe000238c, 0x18aa6: 0x40661620, 0x18aa7: 0xe0002389, + 0x18aa8: 0xe000239e, 0x18aa9: 0xe0002386, 0x18aaa: 0xe0002395, 0x18aab: 0xe000239b, + 0x18aac: 0x40663420, 0x18aad: 0x4065f220, 0x18aae: 0xe000238f, 0x18aaf: 0xe0002392, + 0x18ab0: 0x40663020, 0x18ab1: 0x40663220, 0x18ab2: 0x40662c20, 0x18ab3: 0xe0002398, + 0x18ab4: 0x0065dc99, 0x18ab5: 0x0065e699, 0x18ab6: 0x0065ee99, 0x18ab7: 0x0065f499, + 0x18ab8: 0x40660c20, 0x18ab9: 0x40660e20, 0x18aba: 0x40661020, + // Block 0x62b, offset 0x18ac0 + 0x18ac0: 0xf0000404, 0x18ac1: 0xf0000404, 0x18ac2: 0xf0000404, 0x18ac3: 0xf0000404, + 0x18ac4: 0xf0000404, 0x18ac5: 0xf0000404, 0x18ac6: 0xf0000404, 0x18ac7: 0xf0000404, + 0x18ac8: 0xf0000404, 0x18ac9: 0xf0000404, 0x18aca: 0xf0000404, 0x18acb: 0xf0000404, + 0x18acc: 0xf0000404, 0x18acd: 0xf0000404, 0x18ace: 0xe000004c, 0x18acf: 0xe0000051, + 0x18ad0: 0xe0000056, 0x18ad1: 0xe000005b, 0x18ad2: 0xe0000060, 0x18ad3: 0xe0000065, + 0x18ad4: 0xe000006a, 0x18ad5: 0xe000006f, 0x18ad6: 0xe0000083, 0x18ad7: 0xe000008d, + 0x18ad8: 0xe0000092, 0x18ad9: 0xe0000097, 0x18ada: 0xe000009c, 0x18adb: 0xe00000a1, + 0x18adc: 0xe0000088, 0x18add: 0xe0000074, 0x18ade: 0xe000007c, + 0x18ae0: 0xe000b438, 0x18ae1: 0xe000b3d4, 0x18ae2: 0xe000b40c, 0x18ae3: 0xe000b41c, + 0x18ae4: 0xe000b428, 0x18ae5: 0xe000b3f4, 0x18ae6: 0xe000b400, 0x18ae7: 0xe000b3c8, + 0x18ae8: 0xe000b3ec, 0x18ae9: 0xe000b414, 0x18aea: 0xe000b440, 0x18aeb: 0xe000b3dc, + 0x18aec: 0xe000b418, 0x18aed: 0xe000b3fc, 0x18aee: 0xe000b3e8, 0x18aef: 0xe000b424, + 0x18af0: 0xe000b408, 0x18af1: 0xe000b448, 0x18af2: 0xe000b43c, 0x18af3: 0xe000b410, + 0x18af4: 0xe000b3f8, 0x18af5: 0xe000b420, 0x18af6: 0xe000b3cc, 0x18af7: 0xe000b44c, + 0x18af8: 0xe000b3f0, 0x18af9: 0xe000b3d0, 0x18afa: 0xe000b3d8, 0x18afb: 0xe000b434, + 0x18afc: 0xe000b3e4, 0x18afd: 0xe000b404, 0x18afe: 0xe000b450, 0x18aff: 0xe000b42c, + // Block 0x62c, offset 0x18b00 + 0x18b00: 0xe000b3e0, 0x18b01: 0xe000b430, 0x18b02: 0xe000b454, 0x18b03: 0xe000b444, + 0x18b04: 0x2cf20683, 0x18b05: 0x2d200c83, 0x18b06: 0x2cf17a83, 0x18b07: 0x2d32e283, + 0x18b08: 0xe00002e3, 0x18b09: 0xe00003d8, 0x18b0a: 0xe00004b3, 0x18b0b: 0xe000057d, + 0x18b0c: 0xe0000648, 0x18b0d: 0xe00006f0, 0x18b0e: 0xe000079c, 0x18b0f: 0xe0000841, + 0x18b10: 0xe0000ec0, 0x18b11: 0xf0000606, 0x18b12: 0xf0000606, 0x18b13: 0xf0000606, + 0x18b14: 0xf0000606, 0x18b15: 0xf0000606, 0x18b16: 0xf0000606, 0x18b17: 0xf0000606, + 0x18b18: 0xf0000606, 0x18b19: 0xf0000606, 0x18b1a: 0xf0000606, 0x18b1b: 0xf0000606, + 0x18b1c: 0xf0000606, 0x18b1d: 0xf0000606, 0x18b1e: 0xf0000606, 0x18b1f: 0xf0000606, + 0x18b20: 0x0062ac86, 0x18b21: 0x0062b086, 0x18b22: 0x0062b286, 0x18b23: 0x0062b686, + 0x18b24: 0x0062b886, 0x18b25: 0x0062ba86, 0x18b26: 0x0062be86, 0x18b27: 0x0062c286, + 0x18b28: 0x0062c486, 0x18b29: 0x0062c886, 0x18b2a: 0x0062ca86, 0x18b2b: 0x0062cc86, + 0x18b2c: 0x0062ce86, 0x18b2d: 0x0062d086, 0x18b2e: 0xf0000606, 0x18b2f: 0xf0000606, + 0x18b30: 0xf0000606, 0x18b31: 0xf0000606, 0x18b32: 0xf0000606, 0x18b33: 0xf0000606, + 0x18b34: 0xf0000606, 0x18b35: 0xf0000606, 0x18b36: 0xf0000606, 0x18b37: 0xf0000606, + 0x18b38: 0xf0000606, 0x18b39: 0xf0000606, 0x18b3a: 0xf0000606, 0x18b3b: 0xf0000606, + 0x18b3c: 0xe0002127, 0x18b3d: 0xe0002122, 0x18b3e: 0xf0000606, 0x18b3f: 0x4027ac20, + // Block 0x62d, offset 0x18b40 + 0x18b40: 0x2d13b684, 0x18b41: 0x2c37b484, 0x18b42: 0x2cc9f284, 0x18b43: 0x2cd87483, + 0x18b44: 0x2cf41483, 0x18b45: 0x2c8f2483, 0x18b46: 0x2cb4c683, 0x18b47: 0x2c030a83, + 0x18b48: 0x2c6f9a83, 0x18b49: 0x2cd22483, 0x18b4a: 0x2d266884, 0x18b4b: 0x2c5d8483, + 0x18b4c: 0x2cd70283, 0x18b4d: 0x2ca25c83, 0x18b4e: 0x2c6c2e83, 0x18b4f: 0x2ce91083, + 0x18b50: 0x2cc63683, 0x18b51: 0x2d399283, 0x18b52: 0x2d1f9884, 0x18b53: 0x2ccf3683, + 0x18b54: 0x2c9fe683, 0x18b55: 0x2ce27083, 0x18b56: 0x2c110e83, 0x18b57: 0x2d3ac683, + 0x18b58: 0x2c814083, 0x18b59: 0x2c9d3483, 0x18b5a: 0x2ca3e283, 0x18b5b: 0x2caa6e83, + 0x18b5c: 0x2cd3bc83, 0x18b5d: 0x2d1eb483, 0x18b5e: 0x2d1b3683, 0x18b5f: 0x2d3ab083, + 0x18b60: 0x2cfe3a83, 0x18b61: 0x2d04b283, 0x18b62: 0x2d013e83, 0x18b63: 0x2d333683, + 0x18b64: 0x2cce4883, 0x18b65: 0x2d378284, 0x18b66: 0x2cfa2683, 0x18b67: 0x2d426084, + 0x18b68: 0x2d200884, 0x18b69: 0x2d13c083, 0x18b6a: 0x2d3f7083, 0x18b6b: 0x2d08f883, + 0x18b6c: 0x2c64ca83, 0x18b6d: 0x2cb6c883, 0x18b6e: 0x2d3e6083, 0x18b6f: 0x2d007083, + 0x18b70: 0x2d12ca83, 0x18b71: 0xf0000606, 0x18b72: 0xf0000606, 0x18b73: 0xf0000606, + 0x18b74: 0xf0000606, 0x18b75: 0xf0000606, 0x18b76: 0xf0000606, 0x18b77: 0xf0000606, + 0x18b78: 0xf0000606, 0x18b79: 0xf0000606, 0x18b7a: 0xf0000606, 0x18b7b: 0xf0000606, + 0x18b7c: 0xf0000606, 0x18b7d: 0xf0000606, 0x18b7e: 0xf0000606, 0x18b7f: 0xf0000606, + // Block 0x62e, offset 0x18b80 + 0x18b80: 0xf0000203, 0x18b81: 0xf0000203, 0x18b82: 0xf0000203, 0x18b83: 0xf0000203, + 0x18b84: 0xf0000203, 0x18b85: 0xf0000203, 0x18b86: 0xf0000203, 0x18b87: 0xf0000203, + 0x18b88: 0xf0000203, 0x18b89: 0xe000b484, 0x18b8a: 0xe000b490, 0x18b8b: 0xe000b49c, + 0x18b8c: 0xf0001c1d, 0x18b8d: 0xe0000b85, 0x18b8e: 0xf0001d1c, 0x18b8f: 0xe0000d14, + 0x18b90: 0x00657693, 0x18b91: 0x00657893, 0x18b92: 0x00657a93, 0x18b93: 0x00657e93, + 0x18b94: 0x00658093, 0x18b95: 0x00658293, 0x18b96: 0x00658493, 0x18b97: 0x00658693, + 0x18b98: 0x00658893, 0x18b99: 0x00658a93, 0x18b9a: 0x00658c93, 0x18b9b: 0x00658e93, + 0x18b9c: 0x00659093, 0x18b9d: 0x00659293, 0x18b9e: 0x00659493, 0x18b9f: 0x00659693, + 0x18ba0: 0x00659893, 0x18ba1: 0x00659a93, 0x18ba2: 0x00659c93, 0x18ba3: 0x00659e93, + 0x18ba4: 0x0065a093, 0x18ba5: 0x0065a293, 0x18ba6: 0x0065a493, 0x18ba7: 0x0065a693, + 0x18ba8: 0x0065a893, 0x18ba9: 0x0065aa93, 0x18baa: 0x0065ac93, 0x18bab: 0x0065ae93, + 0x18bac: 0x0065b093, 0x18bad: 0x0065b293, 0x18bae: 0x0065b493, 0x18baf: 0x0065b693, + 0x18bb0: 0x0065b893, 0x18bb1: 0x0065ba93, 0x18bb2: 0x0065bc93, 0x18bb3: 0x0065be93, + 0x18bb4: 0x0065c093, 0x18bb5: 0x0065c493, 0x18bb6: 0x0065c693, 0x18bb7: 0x0065c893, + 0x18bb8: 0x0065ca93, 0x18bb9: 0x0065cc93, 0x18bba: 0x0065ce93, 0x18bbb: 0x0065d093, + 0x18bbc: 0x0065d293, 0x18bbd: 0x0065d493, 0x18bbe: 0x0065d693, + // Block 0x62f, offset 0x18bc0 + 0x18bc0: 0xe000230b, 0x18bc1: 0xe00022f8, 0x18bc2: 0xe00022fc, 0x18bc3: 0xe0002311, + 0x18bc4: 0xe0002316, 0x18bc5: 0xe000231d, 0x18bc6: 0xe0002321, 0x18bc7: 0xe0002325, + 0x18bc8: 0xe000232b, 0x18bc9: 0xf0001c1c, 0x18bca: 0xe0002330, 0x18bcb: 0xe000233c, + 0x18bcc: 0xe0002340, 0x18bcd: 0xe0002337, 0x18bce: 0xe0002346, 0x18bcf: 0xe000234b, + 0x18bd0: 0xe000234f, 0x18bd1: 0xe0002353, 0x18bd2: 0xf0001c1c, 0x18bd3: 0xe000235e, + 0x18bd4: 0xe0002358, 0x18bd5: 0xf0001c1c, 0x18bd6: 0xe0002363, 0x18bd7: 0xe000236d, + 0x18bd8: 0xf0000203, 0x18bd9: 0xf0000203, 0x18bda: 0xf0000203, 0x18bdb: 0xf0000203, + 0x18bdc: 0xf0000203, 0x18bdd: 0xf0000203, 0x18bde: 0xf0000203, 0x18bdf: 0xf0000203, + 0x18be0: 0xf0000203, 0x18be1: 0xf0000203, 0x18be2: 0xe000b47c, 0x18be3: 0xe000b488, + 0x18be4: 0xe000b494, 0x18be5: 0xe000b4a0, 0x18be6: 0xe000b4a8, 0x18be7: 0xe000b4b0, + 0x18be8: 0xe000b4b8, 0x18be9: 0xe000b4c0, 0x18bea: 0xe000b4c8, 0x18beb: 0xe000b4d0, + 0x18bec: 0xe000b4d8, 0x18bed: 0xe000b4e0, 0x18bee: 0xe000b4e8, 0x18bef: 0xe000b4f0, + 0x18bf0: 0xe000b4f8, 0x18bf1: 0xe0000c1e, 0x18bf2: 0xf0001c1c, 0x18bf3: 0xf0001d1d, + 0x18bf4: 0xe0000a31, 0x18bf5: 0xf0001d1c, 0x18bf6: 0xf0001c1c, 0x18bf7: 0xf0001c1c, + 0x18bf8: 0xe0000ac2, 0x18bf9: 0xe0000ac6, 0x18bfa: 0xf0001d1d, 0x18bfb: 0xf0000203, + 0x18bfc: 0xf0000203, 0x18bfd: 0xf0000203, 0x18bfe: 0xf0000203, 0x18bff: 0xe000b5b2, + // Block 0x630, offset 0x18c00 + 0x18c00: 0xf0001d1c, 0x18c01: 0xf0001d1d, 0x18c02: 0xe00009b7, 0x18c03: 0xf0001c1d, + 0x18c04: 0xf0001c1c, 0x18c05: 0xf0001c1c, 0x18c06: 0xe0000a66, 0x18c07: 0xe0000a7a, + 0x18c08: 0xf0001d1c, 0x18c09: 0xf0001c1d, 0x18c0a: 0xf0001c1c, 0x18c0b: 0xf0001d1d, + 0x18c0c: 0xf0001c1c, 0x18c0d: 0xf0001d1d, 0x18c0e: 0xf0001d1d, 0x18c0f: 0xf0001c1c, + 0x18c10: 0xf0001c1c, 0x18c11: 0xf0001c1c, 0x18c12: 0xe0000d0d, 0x18c13: 0xf0001c1c, + 0x18c14: 0xf0001c1c, 0x18c15: 0xe0000d3a, 0x18c16: 0xe0000d46, 0x18c17: 0xf0001d1d, + 0x18c18: 0xe0000eb0, 0x18c19: 0xe0000eb8, 0x18c1a: 0xf0001d1d, 0x18c1b: 0xf0001c1c, + 0x18c1c: 0xf0001c1d, 0x18c1d: 0xf0001c1d, 0x18c1e: 0xe00010b2, 0x18c1f: 0xe00009c8, + 0x18c20: 0xf0000203, 0x18c21: 0xf0000203, 0x18c22: 0xf0000203, 0x18c23: 0xf0000203, + 0x18c24: 0xf0000203, 0x18c25: 0xf0000203, 0x18c26: 0xf0000203, 0x18c27: 0xf0000203, + 0x18c28: 0xf0000203, 0x18c29: 0xe000b480, 0x18c2a: 0xe000b48c, 0x18c2b: 0xe000b498, + 0x18c2c: 0xe000b4a4, 0x18c2d: 0xe000b4ac, 0x18c2e: 0xe000b4b4, 0x18c2f: 0xe000b4bc, + 0x18c30: 0xe000b4c4, 0x18c31: 0xe000b4cc, 0x18c32: 0xe000b4d4, 0x18c33: 0xe000b4dc, + 0x18c34: 0xe000b4e4, 0x18c35: 0xe000b4ec, 0x18c36: 0xe000b4f4, 0x18c37: 0xe000b4fc, + 0x18c38: 0xe000b500, 0x18c39: 0xe000b504, 0x18c3a: 0xe000b508, 0x18c3b: 0xe000b50c, + 0x18c3c: 0xe000b510, 0x18c3d: 0xe000b514, 0x18c3e: 0xe000b518, 0x18c3f: 0xe0000bdf, + // Block 0x631, offset 0x18c40 + 0x18c40: 0x6cbf9220, 0x18c41: 0x6ce52c20, + 0x18c44: 0x6c7ae020, 0x18c45: 0x6cf41220, 0x18c46: 0x6d1ac620, + 0x18c4c: 0x6d144820, + 0x18c56: 0x6d006c20, + 0x18c5c: 0x6c1d9020, + 0x18c61: 0x6caae820, + 0x18c64: 0x6c27da20, + 0x18c68: 0x6d067820, 0x18c69: 0x6d03c420, 0x18c6b: 0x6d044c20, + 0x18c6c: 0x6c8e4020, 0x18c6d: 0x6c8c1820, 0x18c6e: 0x6cfd7e20, 0x18c6f: 0x6d1dbe20, + 0x18c70: 0x6d030e20, 0x18c71: 0x6d31ac20, 0x18c72: 0x6c272020, 0x18c73: 0x6cf49420, + 0x18c74: 0x6cac3820, 0x18c77: 0x6c968e20, + 0x18c78: 0x6cba3c20, 0x18c79: 0x6d165420, 0x18c7a: 0x6d1a2020, 0x18c7b: 0x6ca58220, + 0x18c7c: 0x6c1a7e20, 0x18c7d: 0x6c3c1020, + // Block 0x632, offset 0x18c80 + 0x18c81: 0x6d3cec20, 0x18c82: 0x6c39ba20, 0x18c83: 0x6c029620, + 0x18c84: 0x6cf41c20, 0x18c85: 0x6d427220, 0x18c87: 0x6d38f620, + 0x18c88: 0x6c304e20, 0x18c89: 0x6cda7e20, 0x18c8a: 0x6d16a020, 0x18c8b: 0x6cbefc20, + 0x18c8c: 0x6c7b8220, 0x18c8d: 0x6c831e20, 0x18c8e: 0x6ca4da20, 0x18c8f: 0x6d3aa820, + 0x18c90: 0x6cd4a220, + 0x18c94: 0x6d062820, 0x18c97: 0x6ccfb620, + 0x18c98: 0x6c6bc820, 0x18c99: 0x6c2e6620, 0x18c9a: 0x6caab620, 0x18c9b: 0x6cda8420, + 0x18c9c: 0x6d16d820, 0x18c9d: 0x6c905020, 0x18c9e: 0x6d1d3220, 0x18c9f: 0x6c081020, + 0x18ca3: 0x6c7f9220, + 0x18ca4: 0x6c9e7220, 0x18ca5: 0x6d171820, 0x18ca6: 0x6c85be20, 0x18ca7: 0x6c61c020, + 0x18ca8: 0x6d223420, 0x18ca9: 0x6c953c20, 0x18caa: 0x6c147420, + 0x18cae: 0x6c5ce420, 0x18caf: 0x6d063820, + 0x18cb0: 0x6c5bb220, 0x18cb1: 0x6cc53820, 0x18cb3: 0x6d392620, + 0x18cb5: 0x6c4ebe20, 0x18cb6: 0x6cf88220, 0x18cb7: 0x6cdf7420, + 0x18cb8: 0x6d10f020, 0x18cb9: 0x6c5bba20, 0x18cba: 0x6c75b820, 0x18cbb: 0x6c96c020, + 0x18cbc: 0x6c94ac20, 0x18cbd: 0x6ce0fa20, 0x18cbe: 0x6d110220, 0x18cbf: 0x6d2fba20, + // Block 0x633, offset 0x18cc0 + 0x18cc0: 0x6d2cf420, 0x18cc1: 0x6d226420, 0x18cc2: 0x6d3d7620, 0x18cc3: 0x6c37d620, + 0x18cc4: 0x6cc4cc20, 0x18cc5: 0x6cb70820, 0x18cc6: 0x6c1c3e20, 0x18cc7: 0x6cf45620, + 0x18cc8: 0x6c4eda20, 0x18cc9: 0x6ce17820, 0x18cca: 0x6ccb3220, + 0x18ccc: 0x6cbf4820, 0x18ccd: 0x6c824020, 0x18cce: 0x6cc97c20, + 0x18cd1: 0x6c7cda20, 0x18cd2: 0x6cb44620, 0x18cd3: 0x6cde8a20, + 0x18cd4: 0x6cd53020, 0x18cd5: 0x6d0f6820, 0x18cd6: 0x6cab8a20, 0x18cd7: 0x6cdf3620, + 0x18cd9: 0x6c9dd220, 0x18cda: 0x6d1b7820, 0x18cdb: 0x6c2e3a20, + 0x18cdc: 0x6d228820, 0x18cdd: 0x6c9eec20, 0x18cde: 0x6c75ee20, 0x18cdf: 0x6ca7b820, + 0x18ce0: 0x6d023a20, 0x18ce1: 0x6d1f8820, + 0x18ce4: 0x6c185420, 0x18ce5: 0x6c3c7620, 0x18ce6: 0x6c82f820, 0x18ce7: 0x6c874020, + 0x18ce9: 0x6c95d420, 0x18ceb: 0x6c617420, + 0x18cf0: 0x6cc2b020, 0x18cf2: 0x6c110220, 0x18cf3: 0x6c898420, + 0x18cf4: 0x6c475620, 0x18cf5: 0x6c994020, 0x18cf7: 0x6c489020, + 0x18cf8: 0x6cdc2820, 0x18cfb: 0x6c996a20, + 0x18cfc: 0x6c976220, 0x18cfd: 0x6cc29820, 0x18cfe: 0x6cd39420, 0x18cff: 0x6c84b620, + // Block 0x634, offset 0x18d00 + 0x18d01: 0x6cedee20, 0x18d02: 0x6c79d820, 0x18d03: 0x6c325420, + 0x18d04: 0x6d325a20, 0x18d05: 0x6ce62020, + 0x18d08: 0x6c0e0620, 0x18d09: 0x6c5d9e20, 0x18d0a: 0x6c305420, 0x18d0b: 0x6c460e20, + 0x18d0c: 0x6c195220, 0x18d0e: 0x6cbd2020, 0x18d0f: 0x6c6f0020, + 0x18d10: 0x6c922620, 0x18d11: 0x6d042020, 0x18d13: 0x6ca3f820, + 0x18d14: 0x6d01a220, 0x18d16: 0x6c09be20, 0x18d17: 0x6c6b0420, + 0x18d18: 0x6cda9c20, 0x18d1a: 0x6c455220, + 0x18d1c: 0x6d200620, 0x18d1d: 0x6d03b620, 0x18d1e: 0x6cb83c20, 0x18d1f: 0x6cafae20, + 0x18d20: 0x6c2d3620, 0x18d21: 0x6c3f3c20, 0x18d22: 0x6c95de20, 0x18d23: 0x6cb84220, + 0x18d24: 0x6cb84420, 0x18d25: 0x6ce0ba20, 0x18d26: 0x6c03fa20, 0x18d27: 0x6c418420, + 0x18d28: 0x6c222420, 0x18d29: 0x6d077e20, 0x18d2a: 0x6c80f620, + 0x18d2d: 0x6ccf0c20, 0x18d2f: 0x6c83a820, + 0x18d30: 0x6c578820, 0x18d31: 0x6ce7ea20, 0x18d32: 0x6cb0f020, 0x18d33: 0x6c2b2420, + 0x18d34: 0x6cc85e20, 0x18d35: 0x6c360820, 0x18d36: 0x6cbcb020, 0x18d37: 0x6d178c20, + 0x18d38: 0x6d3d0020, 0x18d39: 0x6cc8cc20, 0x18d3a: 0x6c649420, + 0x18d3c: 0x6c1c2e20, 0x18d3d: 0x6c1d1820, 0x18d3e: 0x6cf66220, + // Block 0x635, offset 0x18d40 + 0x18d40: 0x6c94b420, 0x18d41: 0x6c2aa020, 0x18d42: 0x6c8bbe20, 0x18d43: 0x6c747020, + 0x18d44: 0x6cdae020, 0x18d45: 0x6cfffa20, 0x18d46: 0x6d299020, + 0x18d49: 0x6d3a7620, 0x18d4a: 0x6d2e0e20, 0x18d4b: 0x6c64f020, + 0x18d4c: 0x6d408c20, 0x18d4d: 0x6c1fa020, 0x18d4e: 0x6d022a20, 0x18d4f: 0x6c869820, + 0x18d51: 0x6c1c8e20, 0x18d52: 0x6cf7b820, 0x18d53: 0x6c656020, + 0x18d55: 0x6c5fc020, 0x18d57: 0x6c3a7c20, + 0x18d58: 0x6c1f0620, 0x18d59: 0x6c07d420, 0x18d5a: 0x6c6a7820, + 0x18d5c: 0x6c036c20, 0x18d5d: 0x6c898a20, 0x18d5e: 0x6c7b1e20, + 0x18d60: 0x6cf95e20, 0x18d61: 0x6c0ca420, 0x18d62: 0x6c747420, 0x18d63: 0x6c825c20, + 0x18d64: 0x6d035020, 0x18d65: 0x6c045820, 0x18d66: 0x6d103220, 0x18d67: 0x6c940a20, + 0x18d68: 0x6c070a20, 0x18d69: 0x6c362420, 0x18d6a: 0x6c91c220, + 0x18d6d: 0x6c181220, 0x18d6e: 0x6caad020, 0x18d6f: 0x6d07fe20, + 0x18d70: 0x6c525220, 0x18d71: 0x6d224420, 0x18d73: 0x6c4b0620, + 0x18d74: 0x6d17dc20, 0x18d75: 0x6d085020, 0x18d76: 0x6c462c20, 0x18d77: 0x6c910020, + 0x18d78: 0x6ce2f020, 0x18d79: 0x6c820420, 0x18d7a: 0x6cd2f820, + 0x18d7c: 0x6cdcee20, 0x18d7d: 0x6d11ec20, 0x18d7e: 0x6cfa6820, 0x18d7f: 0x6d408420, + // Block 0x636, offset 0x18d80 + 0x18d81: 0x6cc3a220, 0x18d82: 0x6d1a2220, 0x18d83: 0x6cf56420, + 0x18d84: 0x6d34d420, 0x18d85: 0x6c639620, 0x18d86: 0x6c564e20, 0x18d87: 0x6c7e3620, + 0x18d88: 0x6d15c620, 0x18d89: 0x6c788020, 0x18d8a: 0x6c3d4620, 0x18d8b: 0x6cbd6020, + 0x18d8c: 0x6c009220, 0x18d8e: 0x6c78ac20, 0x18d8f: 0x6c1e8820, + 0x18d90: 0x6d014620, 0x18d91: 0x6c1e9a20, 0x18d92: 0x6ceeac20, + 0x18d95: 0x6c58ea20, 0x18d96: 0x6cda8a20, 0x18d97: 0x6d203a20, + 0x18d99: 0x6c75e020, 0x18d9a: 0x6d2f7e20, 0x18d9b: 0x6d066620, + 0x18d9c: 0x6cd2ac20, 0x18d9e: 0x6cd64220, 0x18d9f: 0x6c7cea20, + 0x18da0: 0x6cd6a220, 0x18da1: 0x6c515420, 0x18da2: 0x6c414e20, 0x18da3: 0x6d0d3020, + 0x18da4: 0x6cbfec20, 0x18da5: 0x6ccf9820, 0x18da6: 0x6c577a20, 0x18da7: 0x6cf56820, + 0x18da8: 0x6c391820, 0x18da9: 0x6cad2420, 0x18daa: 0x6c281e20, 0x18dab: 0x6c39bc20, + 0x18dac: 0x6c455c20, 0x18dad: 0x6c022620, 0x18dae: 0x6c3f3020, 0x18daf: 0x6ca54420, + 0x18db0: 0x6d093a20, 0x18db1: 0x6d1ee420, 0x18db2: 0x6c572620, + 0x18db4: 0x6c189620, 0x18db5: 0x6c4c5420, 0x18db6: 0x6ca2c820, 0x18db7: 0x6c577e20, + 0x18db8: 0x6c858820, 0x18db9: 0x6c37fa20, 0x18dba: 0x6cfe8020, 0x18dbb: 0x6cb3ea20, + 0x18dbd: 0x6cd88820, + // Block 0x637, offset 0x18dc0 + 0x18dc0: 0x6c821c20, 0x18dc1: 0x6c8c4820, 0x18dc2: 0x6d16dc20, 0x18dc3: 0x6c544c20, + 0x18dc5: 0x6d068c20, 0x18dc6: 0x6cc17620, 0x18dc7: 0x6c373a20, + 0x18dca: 0x6d09e220, + 0x18dcf: 0x6ca80020, + 0x18dd0: 0x6cef9a20, 0x18dd1: 0x6d017820, 0x18dd2: 0x6ce31420, 0x18dd3: 0x6c532620, + 0x18dd4: 0x6cea7820, 0x18dd5: 0x6ca80220, 0x18dd6: 0x6ca80420, 0x18dd7: 0x6d1a4020, + 0x18dd8: 0x6d313420, + 0x18dde: 0x6cec5020, 0x18ddf: 0x6cd45a20, + 0x18de0: 0x6caaea20, 0x18de1: 0x6d12e420, 0x18de2: 0x6cb5b620, 0x18de3: 0x6ce82620, + 0x18de4: 0x6c4df820, 0x18de5: 0x6c75ac20, 0x18de6: 0x6c302c20, 0x18de7: 0x6c5cba20, + 0x18de8: 0x6c923220, 0x18de9: 0x6c707a20, 0x18dea: 0x6c5db820, 0x18deb: 0x6c8cdc20, + 0x18ded: 0x6ce4e420, 0x18dee: 0x6c94e820, + 0x18df5: 0x6c43e220, 0x18df6: 0x6d0c0620, 0x18df7: 0x6cd26420, + 0x18df8: 0x6d090c20, 0x18df9: 0x6cae3020, 0x18dfa: 0x6c217820, 0x18dfb: 0x6ca96c20, + 0x18dfc: 0x6c348a20, 0x18dfd: 0x6d2aca20, 0x18dfe: 0x6c362820, 0x18dff: 0x6d00a820, + // Block 0x638, offset 0x18e00 + 0x18e00: 0x6d1ea020, 0x18e01: 0x6c362a20, 0x18e02: 0x6cd13420, 0x18e03: 0x6cf1dc20, + 0x18e04: 0x6c7a3e20, 0x18e05: 0x6c555020, 0x18e06: 0x6c43e620, 0x18e07: 0x6cf9c020, + 0x18e08: 0x6c97dc20, 0x18e09: 0x6c94a820, 0x18e0a: 0x6c602a20, 0x18e0b: 0x6c53f620, + 0x18e0c: 0x6d361620, 0x18e0f: 0x6cec5420, + 0x18e11: 0x6c046820, 0x18e12: 0x6c00a020, 0x18e13: 0x6d3c6220, + 0x18e14: 0x6cb8ec20, 0x18e15: 0x6c46ac20, 0x18e16: 0x6c289220, 0x18e17: 0x6c06a820, + 0x18e18: 0x6c0f0e20, 0x18e19: 0x6c1e6020, 0x18e1a: 0x6c862820, 0x18e1b: 0x6cfff620, + 0x18e1c: 0x6d054020, + 0x18e22: 0x6c537020, 0x18e23: 0x6ce40620, + 0x18e24: 0x6c244220, 0x18e25: 0x6c7e0a20, 0x18e26: 0x6c816020, 0x18e27: 0x6d367820, + 0x18e28: 0x6d004e20, 0x18e29: 0x6cf66620, 0x18e2b: 0x6cbcce20, + 0x18e2c: 0x6d2be820, 0x18e2d: 0x6cf66820, + 0x18e30: 0x6c23a220, 0x18e31: 0x6c607a20, 0x18e32: 0x6c5dec20, 0x18e33: 0x6cde1220, + 0x18e34: 0x6d0cbe20, 0x18e35: 0x6d072420, 0x18e36: 0x6cb31c20, 0x18e37: 0x6cc9dc20, + 0x18e3b: 0x6c4c3a20, + 0x18e3c: 0x6d133620, 0x18e3d: 0x6cfdfe20, 0x18e3e: 0x6d08e620, 0x18e3f: 0x6c516c20, + // Block 0x639, offset 0x18e40 + 0x18e40: 0x6d42aa20, 0x18e41: 0x6d188020, 0x18e42: 0x6c226620, + 0x18e44: 0x6c837020, 0x18e45: 0x6cfba620, 0x18e46: 0x6cdf5620, 0x18e47: 0x6cc6bc20, + 0x18e48: 0x6d18be20, 0x18e49: 0x6d372220, 0x18e4a: 0x6cf6fe20, 0x18e4b: 0x6cfbb420, + 0x18e4c: 0x6c72aa20, 0x18e4d: 0x6c60d620, 0x18e4e: 0x6c4e6820, + 0x18e50: 0x6cad9e20, 0x18e51: 0x6c86e620, 0x18e53: 0x6c7fe020, + 0x18e54: 0x6cc9e020, 0x18e55: 0x6c4e7020, 0x18e56: 0x6d0cfe20, 0x18e57: 0x6cc16020, + 0x18e59: 0x6d0d1620, 0x18e5a: 0x6c4e7420, 0x18e5b: 0x6c76ba20, + 0x18e5c: 0x6c1bce20, 0x18e5d: 0x6ca7e820, 0x18e5e: 0x6c5d9620, + 0x18e60: 0x6c092820, 0x18e61: 0x6cf98a20, 0x18e62: 0x6cf24820, 0x18e63: 0x6d080420, + 0x18e64: 0x6cec9420, 0x18e65: 0x6d1f8a20, 0x18e66: 0x6cbd4c20, 0x18e67: 0x6d066c20, + 0x18e68: 0x6ca7f020, 0x18e69: 0x6c091620, 0x18e6a: 0x6c501020, 0x18e6b: 0x6c6e0820, + 0x18e6c: 0x6c02bc20, 0x18e6d: 0x6c02be20, + 0x18e70: 0x6d311e20, 0x18e71: 0x6cdf8a20, 0x18e72: 0x6c70f220, + 0x18e74: 0x6d427a20, 0x18e75: 0x6c106220, 0x18e76: 0x6c6a8a20, 0x18e77: 0x6c009020, + 0x18e78: 0x6d29fc20, 0x18e79: 0x6c222620, 0x18e7a: 0x6c37fc20, + 0x18e7f: 0x6ca80620, + // Block 0x63a, offset 0x18e80 + 0x18e80: 0x6c8f2a20, 0x18e81: 0x6c99e220, 0x18e82: 0x6c334420, 0x18e83: 0x6c052020, + 0x18e84: 0x6c095a20, 0x18e85: 0x6c05ee20, 0x18e87: 0x6c1f2c20, + 0x18e88: 0x6cfa3620, 0x18e89: 0x6ce4e820, 0x18e8a: 0x6c16a220, + 0x18e8d: 0x6c342420, 0x18e8e: 0x6cee7e20, 0x18e8f: 0x6c3fea20, + 0x18e90: 0x6c348c20, 0x18e91: 0x6d225420, 0x18e92: 0x6d12ac20, 0x18e93: 0x6c7c7620, + 0x18e94: 0x6cefb620, 0x18e95: 0x6c7b2220, 0x18e97: 0x6cee8020, + 0x18e98: 0x6d10a420, 0x18e99: 0x6c903420, 0x18e9a: 0x6d037a20, 0x18e9b: 0x6d3b7c20, + 0x18e9c: 0x6c1b3020, 0x18e9d: 0x6d00b420, 0x18e9e: 0x6ca83a20, 0x18e9f: 0x6c810020, + 0x18ea0: 0x6d13fe20, 0x18ea1: 0x6d3f9e20, 0x18ea2: 0x6c976a20, 0x18ea3: 0x6d2f3820, + 0x18ea4: 0x6cfa4220, 0x18ea5: 0x6c4bfe20, 0x18ea6: 0x6d00c820, + 0x18ea8: 0x6c625c20, 0x18ea9: 0x6c8a0220, 0x18eaa: 0x6d184820, 0x18eab: 0x6c607c20, + 0x18eac: 0x6d1a8e20, 0x18eae: 0x6c266020, 0x18eaf: 0x6d184a20, + 0x18eb0: 0x6d020a20, 0x18eb1: 0x6c506220, 0x18eb2: 0x6d1e5c20, 0x18eb3: 0x6c76ea20, + 0x18eb4: 0x6c163220, 0x18eb5: 0x6cdf3e20, 0x18eb6: 0x6ce13020, 0x18eb7: 0x6d34a220, + 0x18eb8: 0x6c066e20, 0x18eb9: 0x6c9b5220, 0x18eba: 0x6c7ca220, 0x18ebb: 0x6c153620, + 0x18ebc: 0x6c82e020, 0x18ebe: 0x6cf91220, + // Block 0x63b, offset 0x18ec0 + 0x18ec0: 0x6cf72820, 0x18ec1: 0x6cbc7220, 0x18ec2: 0x6ca47e20, 0x18ec3: 0x6d274e20, + 0x18ec5: 0x6c8f7220, 0x18ec6: 0x6c3fbe20, 0x18ec7: 0x6d3f7220, + 0x18ec9: 0x6c475e20, 0x18eca: 0x6c762820, 0x18ecb: 0x6c2dd420, + 0x18ecc: 0x6c57aa20, 0x18ecd: 0x6c7ce020, 0x18ecf: 0x6c42fc20, + 0x18ed0: 0x6ce26020, 0x18ed2: 0x6ccd2a20, 0x18ed3: 0x6c7f3a20, + 0x18ed4: 0x6ca7f420, 0x18ed5: 0x6c3de220, 0x18ed6: 0x6c42fe20, 0x18ed7: 0x6cbc8420, + 0x18ed8: 0x6c04e420, 0x18ed9: 0x6c632620, 0x18eda: 0x6c796a20, 0x18edb: 0x6cf85620, + 0x18edc: 0x6d230820, 0x18edd: 0x6d3c5a20, 0x18ede: 0x6cd05820, 0x18edf: 0x6c21ba20, + 0x18ee0: 0x6cfed420, 0x18ee1: 0x6c615220, 0x18ee2: 0x6caa3820, 0x18ee3: 0x6cff6a20, + 0x18ee4: 0x6d165a20, 0x18ee5: 0x6d20a820, 0x18ee6: 0x6d145420, 0x18ee7: 0x6d0d3620, + 0x18ee8: 0x6cd04020, 0x18ee9: 0x6cc4aa20, 0x18eea: 0x6c501220, 0x18eeb: 0x6cc96620, + 0x18eec: 0x6c755820, 0x18eed: 0x6d1ee820, 0x18eef: 0x6d02fc20, + 0x18ef0: 0x6cadae20, 0x18ef1: 0x6cbfa020, 0x18ef2: 0x6c14b820, + 0x18ef4: 0x6c106420, 0x18ef5: 0x6c2fdc20, 0x18ef6: 0x6cd88a20, 0x18ef7: 0x6c378620, + 0x18ef9: 0x6c992820, 0x18efa: 0x6d281820, 0x18efb: 0x6c5e8a20, + 0x18efd: 0x6cbc1e20, 0x18efe: 0x6d045820, 0x18eff: 0x6cad4a20, + // Block 0x63c, offset 0x18f00 + 0x18f00: 0x6c1e7420, 0x18f01: 0x6cae5220, 0x18f02: 0x6caad620, 0x18f03: 0x6c6a8c20, + 0x18f04: 0x6d13d420, 0x18f05: 0x6c37c220, 0x18f06: 0x6c34d420, + 0x18f0a: 0x6c347c20, + 0x18f0d: 0x6cbca420, 0x18f0e: 0x6c938220, 0x18f0f: 0x6cc02620, + 0x18f10: 0x6cda1020, 0x18f11: 0x6c11f020, 0x18f12: 0x6c310020, 0x18f13: 0x6cf5b820, + 0x18f14: 0x6c3c2e20, 0x18f15: 0x6d172220, 0x18f16: 0x6cdd0e20, 0x18f17: 0x6cbc7a20, + 0x18f18: 0x6cb37620, 0x18f19: 0x6d02c020, 0x18f1a: 0x6ce7b020, 0x18f1b: 0x6d032820, + 0x18f1c: 0x6d1f1220, 0x18f1d: 0x6c06fe20, 0x18f1e: 0x6c905820, + 0x18f23: 0x6d279820, + 0x18f24: 0x6c83ac20, 0x18f25: 0x6cde4420, 0x18f26: 0x6c802620, 0x18f27: 0x6c97b820, + 0x18f28: 0x6cbb3a20, 0x18f29: 0x6d38d220, 0x18f2a: 0x6d0e5c20, 0x18f2b: 0x6cf5de20, + 0x18f2c: 0x6c923620, 0x18f2d: 0x6cf5e020, 0x18f2e: 0x6ccae220, 0x18f2f: 0x6c395220, + 0x18f31: 0x6cefb820, 0x18f32: 0x6c383a20, 0x18f33: 0x6d179020, + 0x18f34: 0x6ca4f420, 0x18f35: 0x6c196c20, 0x18f36: 0x6ce09820, 0x18f37: 0x6c5ec620, + 0x18f38: 0x6cd5d020, 0x18f39: 0x6cb10e20, 0x18f3a: 0x6c012e20, 0x18f3b: 0x6c7ac420, + 0x18f3c: 0x6c139820, 0x18f3e: 0x6cfb5a20, 0x18f3f: 0x6d361c20, + // Block 0x63d, offset 0x18f40 + 0x18f42: 0x6c3c4820, 0x18f43: 0x6c88f420, + 0x18f44: 0x6d0a0a20, 0x18f45: 0x6d06ee20, 0x18f46: 0x6c9d5020, 0x18f47: 0x6c5bd620, + 0x18f48: 0x6ca29220, 0x18f49: 0x6d1d8c20, 0x18f4a: 0x6d2df420, 0x18f4b: 0x6d17de20, + 0x18f4c: 0x6caa1e20, 0x18f4d: 0x6ce10020, 0x18f4e: 0x6cf63e20, 0x18f4f: 0x6d27ac20, + 0x18f50: 0x6cd5e220, 0x18f51: 0x6c3e9420, 0x18f52: 0x6d17e020, 0x18f53: 0x6c26b020, + 0x18f55: 0x6c881e20, 0x18f56: 0x6c127a20, 0x18f57: 0x6c116e20, + 0x18f58: 0x6c725e20, 0x18f59: 0x6c927a20, 0x18f5a: 0x6cdae220, 0x18f5b: 0x6ca59a20, + 0x18f5c: 0x6c02dc20, 0x18f5d: 0x6c018c20, 0x18f5e: 0x6cba6420, + 0x18f60: 0x6c24d420, 0x18f61: 0x6c232420, 0x18f63: 0x6cc48220, + 0x18f64: 0x6ca73220, 0x18f65: 0x6c96fe20, 0x18f66: 0x6d030220, 0x18f67: 0x6d26e020, + 0x18f68: 0x6ca38220, 0x18f69: 0x6c02ee20, 0x18f6a: 0x6cd01620, 0x18f6b: 0x6c96dc20, + 0x18f6e: 0x6c807a20, 0x18f6f: 0x6cf6e620, + 0x18f70: 0x6d26f820, 0x18f71: 0x6d372620, 0x18f72: 0x6cf26420, 0x18f73: 0x6c57f620, + 0x18f74: 0x6c9c1820, 0x18f75: 0x6ca7bc20, 0x18f76: 0x6ced6620, 0x18f77: 0x6c9c9c20, + 0x18f78: 0x6ca89e20, 0x18f79: 0x6cc1f820, 0x18f7a: 0x6d29b820, 0x18f7b: 0x6c893e20, + 0x18f7c: 0x6d34c620, 0x18f7d: 0x6d3eda20, 0x18f7e: 0x6c4d1a20, 0x18f7f: 0x6d066e20, + // Block 0x63e, offset 0x18f80 + 0x18f80: 0x6c501820, 0x18f81: 0x6d078020, 0x18f82: 0x6d35b020, 0x18f83: 0x6c9e1220, + 0x18f84: 0x6c214820, 0x18f85: 0x6c46b020, 0x18f87: 0x6c216020, + 0x18f88: 0x6c946a20, 0x18f89: 0x6d3a9820, 0x18f8a: 0x6cd43820, 0x18f8b: 0x6c8a5e20, + 0x18f8c: 0x6c6fcc20, 0x18f8d: 0x6d014020, 0x18f8e: 0x6c2f9220, 0x18f8f: 0x6c6bae20, + 0x18f90: 0x6cc65220, 0x18f91: 0x6c982e20, 0x18f93: 0x6c788a20, + 0x18f94: 0x6d119620, 0x18f95: 0x6ca8fc20, 0x18f96: 0x6d148e20, 0x18f97: 0x6c80a620, + 0x18f98: 0x6d1df020, 0x18f99: 0x6d1a4420, 0x18f9a: 0x6d0c7e20, 0x18f9b: 0x6cda9e20, + 0x18f9d: 0x6c8baa20, 0x18f9e: 0x6d0aec20, 0x18f9f: 0x6c98d820, + 0x18fa0: 0x6c9ff420, 0x18fa1: 0x6d41aa20, 0x18fa2: 0x6d225620, 0x18fa3: 0x6d179220, + 0x18fa4: 0x6c46b220, 0x18fa5: 0x6c9cfa20, 0x18fa6: 0x6c75c820, 0x18fa7: 0x6cf1e420, + 0x18fa9: 0x6c773a20, 0x18faa: 0x6c2d7020, 0x18fab: 0x6c8f9820, + 0x18fad: 0x6d040620, 0x18fae: 0x6c255420, 0x18faf: 0x6cbbec20, + 0x18fb0: 0x6c9dde20, 0x18fb1: 0x6c9c1c20, 0x18fb2: 0x6cbdf420, + 0x18fb4: 0x6cecc220, 0x18fb5: 0x6c2a5e20, 0x18fb6: 0x6c009420, + 0x18fb8: 0x6c0b8c20, 0x18fb9: 0x6ca9fe20, 0x18fba: 0x6c882020, 0x18fbb: 0x6c6caa20, + 0x18fbc: 0x6d207020, 0x18fbd: 0x6c20bc20, 0x18fbe: 0x6d426420, 0x18fbf: 0x6c0fe020, + // Block 0x63f, offset 0x18fc0 + 0x18fc0: 0x6c5a9020, 0x18fc1: 0x6d11f020, 0x18fc2: 0x6ce9e020, 0x18fc3: 0x6c61e220, + 0x18fc4: 0x6c012420, 0x18fc5: 0x6c95fa20, 0x18fc6: 0x6c613220, 0x18fc7: 0x6cefba20, + 0x18fc8: 0x6c0e7420, 0x18fc9: 0x6d289020, 0x18fca: 0x6d06f020, 0x18fcb: 0x6ca71220, + 0x18fcc: 0x6d281420, 0x18fce: 0x6c039820, 0x18fcf: 0x6d301a20, + 0x18fd0: 0x6c705420, 0x18fd1: 0x6cef9020, 0x18fd2: 0x6d016e20, 0x18fd3: 0x6cb75420, + 0x18fd4: 0x6d149020, 0x18fd5: 0x6d017020, 0x18fd6: 0x6c222a20, 0x18fd7: 0x6cc02820, + 0x18fd8: 0x6c316a20, 0x18fd9: 0x6ca7d420, 0x18fda: 0x6cb78a20, 0x18fdb: 0x6c613c20, + 0x18fdc: 0x6ce99420, 0x18fde: 0x6cd94c20, 0x18fdf: 0x6c2d7420, + 0x18fe0: 0x6c816820, 0x18fe1: 0x6d2e2c20, + 0x18fe4: 0x6d1a1c20, 0x18fe5: 0x6c132620, 0x18fe6: 0x6c611220, 0x18fe7: 0x6c5b8620, + 0x18fe8: 0x6d3ede20, 0x18fe9: 0x6c7f8820, 0x18fea: 0x6ca49020, 0x18feb: 0x6c71f020, + 0x18fec: 0x6cbdfc20, 0x18fed: 0x6c272620, 0x18fef: 0x6c6a6020, + 0x18ff0: 0x6d062620, 0x18ff1: 0x6c22fa20, 0x18ff2: 0x6d1e6e20, 0x18ff3: 0x6c30d820, + 0x18ff4: 0x6c1afe20, 0x18ff6: 0x6c9f9020, 0x18ff7: 0x6c59a820, + 0x18ff8: 0x6cdc2020, 0x18ff9: 0x6c785620, 0x18ffa: 0x6d40aa20, 0x18ffb: 0x6c501a20, + 0x18ffc: 0x6c19ba20, 0x18ffd: 0x6d094220, 0x18ffe: 0x6ca5bc20, 0x18fff: 0x6c1bec20, + // Block 0x640, offset 0x19000 + 0x19000: 0x6c87f020, 0x19001: 0x6c01a020, 0x19002: 0x6ca22a20, 0x19003: 0x6cd7ca20, + 0x19004: 0x6cfdb220, 0x19005: 0x6d0f9020, 0x19006: 0x6c572c20, 0x19007: 0x6c261620, + 0x19008: 0x6cc02a20, 0x19009: 0x6c814c20, 0x1900a: 0x6c3e2e20, 0x1900b: 0x6c334620, + 0x1900c: 0x6c984c20, 0x1900d: 0x6c80a820, 0x1900e: 0x6ceb7220, 0x1900f: 0x6c4df220, + 0x19010: 0x6c988820, 0x19011: 0x6c0ed220, 0x19012: 0x6cc43220, 0x19013: 0x6cb59e20, + 0x19014: 0x6c4df420, 0x19016: 0x6c905c20, + 0x19018: 0x6ce57e20, 0x19019: 0x6d2aba20, 0x1901a: 0x6cb5ba20, 0x1901b: 0x6d298a20, + 0x1901c: 0x6c9c4620, 0x1901d: 0x6cadd220, 0x1901e: 0x6d2e5620, 0x1901f: 0x6cfe2c20, + 0x19020: 0x6c429c20, 0x19022: 0x6cb5bc20, + 0x19024: 0x6c923820, 0x19026: 0x6d283020, 0x19027: 0x6c362e20, + 0x19028: 0x6c329a20, 0x19029: 0x6c9f5020, 0x1902a: 0x6cee8420, 0x1902b: 0x6cc2ec20, + 0x1902c: 0x6cda1c20, 0x1902d: 0x6c9f5220, 0x1902e: 0x6ce85e20, + 0x19030: 0x6ca03620, 0x19031: 0x6d11b420, 0x19032: 0x6c746220, 0x19033: 0x6c862c20, + 0x19034: 0x6c7b2620, 0x19035: 0x6c42a420, 0x19036: 0x6d257e20, 0x19037: 0x6c26fa20, + 0x19039: 0x6c816220, 0x1903a: 0x6c909c20, 0x1903b: 0x6cba6620, + 0x1903c: 0x6c025c20, 0x1903d: 0x6c0c7620, 0x1903e: 0x6d1d9a20, 0x1903f: 0x6c989820, + // Block 0x641, offset 0x19040 + 0x19040: 0x6c29e020, 0x19042: 0x6c025e20, + 0x19044: 0x6cf78e20, 0x19045: 0x6c3ed420, 0x19046: 0x6c27f820, 0x19047: 0x6c701420, + 0x19048: 0x6cc90220, 0x19049: 0x6ce77a20, 0x1904a: 0x6cc13220, 0x1904b: 0x6c368220, + 0x1904c: 0x6cb51a20, 0x1904d: 0x6c607e20, 0x1904e: 0x6c608020, 0x1904f: 0x6c574c20, + 0x19050: 0x6c69b820, 0x19051: 0x6d41cc20, 0x19052: 0x6c0c7a20, 0x19053: 0x6c9b4620, + 0x19054: 0x6c045620, 0x19055: 0x6cf01420, 0x19056: 0x6d160e20, 0x19057: 0x6c02f020, + 0x19058: 0x6d229e20, 0x19059: 0x6c4ff020, 0x1905a: 0x6c336620, 0x1905b: 0x6cf31a20, + 0x1905c: 0x6ca6d620, 0x1905d: 0x6c249e20, 0x1905f: 0x6c846e20, + 0x19060: 0x6c916c20, 0x19061: 0x6ca7be20, 0x19062: 0x6c57f820, 0x19063: 0x6c86f020, + 0x19065: 0x6c941c20, 0x19066: 0x6c3c7e20, 0x19067: 0x6c9d0c20, + 0x19068: 0x6d249e20, 0x1906a: 0x6c71e620, + 0x1906d: 0x6d2dec20, 0x1906e: 0x6cae8220, 0x1906f: 0x6d15b220, + 0x19071: 0x6c61e420, 0x19072: 0x6c08ae20, + 0x19074: 0x6cc5b420, 0x19075: 0x6c597220, 0x19076: 0x6c388020, 0x19077: 0x6c43c220, + 0x19078: 0x6c7a8020, 0x19079: 0x6c6bb420, 0x1907a: 0x6ccbc220, + 0x1907c: 0x6cd7c220, 0x1907d: 0x6ce71620, 0x1907e: 0x6d24c820, 0x1907f: 0x6d3e0420, + // Block 0x642, offset 0x19080 + 0x19080: 0x6c092c20, 0x19081: 0x6c7ad820, 0x19082: 0x6c859e20, 0x19083: 0x6c598220, + 0x19084: 0x6d09e620, 0x19085: 0x6caad820, 0x19087: 0x6d303820, + 0x19088: 0x6cf20220, 0x19089: 0x6cfb4420, 0x1908a: 0x6cb85a20, 0x1908b: 0x6d127a20, + 0x1908c: 0x6c996c20, 0x1908f: 0x6cd5d420, + 0x19091: 0x6cbb7a20, 0x19092: 0x6d3cd220, 0x19093: 0x6c7d6020, + 0x19094: 0x6cf4ea20, 0x19095: 0x6d1bb820, 0x19096: 0x6c207220, 0x19097: 0x6ce33e20, + 0x19098: 0x6c880e20, 0x19099: 0x6c087820, 0x1909a: 0x6c464e20, 0x1909b: 0x6c986820, + 0x1909c: 0x6d01d020, 0x1909d: 0x6c3cec20, 0x1909e: 0x6c909e20, 0x1909f: 0x6d2a1820, + 0x190a0: 0x6d335e20, 0x190a1: 0x6c1ea220, 0x190a2: 0x6c980020, 0x190a3: 0x6c8faa20, + 0x190a5: 0x6d1b8620, 0x190a6: 0x6cb1f020, 0x190a7: 0x6d337020, + 0x190a8: 0x6c653020, 0x190a9: 0x6c945420, 0x190aa: 0x6ca7e420, 0x190ab: 0x6d179a20, + 0x190ad: 0x6c623420, 0x190ae: 0x6c60a420, 0x190af: 0x6d2d1a20, + 0x190b0: 0x6d221a20, 0x190b1: 0x6c6fa620, 0x190b2: 0x6c585620, 0x190b3: 0x6d34e220, + 0x190b4: 0x6c7e3c20, 0x190b5: 0x6c8ca820, 0x190b6: 0x6d34f020, 0x190b7: 0x6c079420, + 0x190b8: 0x6d2cae20, 0x190b9: 0x6c705820, 0x190ba: 0x6c286620, 0x190bb: 0x6c8a9020, + 0x190bc: 0x6d16e820, 0x190bd: 0x6d2fa020, 0x190be: 0x6cfc8e20, 0x190bf: 0x6c1bf820, + // Block 0x643, offset 0x190c0 + 0x190c0: 0x6c22ba20, 0x190c1: 0x6c1b8420, 0x190c2: 0x6d0d5420, 0x190c3: 0x6c80aa20, + 0x190c4: 0x6c310220, 0x190c5: 0x6c905e20, 0x190c6: 0x6c14ec20, + 0x190c8: 0x6ce9a020, 0x190c9: 0x6c13da20, 0x190ca: 0x6c006620, 0x190cb: 0x6c1b9c20, + 0x190cd: 0x6d1cec20, 0x190ce: 0x6d305a20, 0x190cf: 0x6ce7ee20, + 0x190d1: 0x6ce9a620, 0x190d2: 0x6c13f420, 0x190d3: 0x6d11be20, + 0x190d4: 0x6d3ffe20, 0x190d6: 0x6cac4020, 0x190d7: 0x6cbc5620, + 0x190d8: 0x6c883220, 0x190d9: 0x6cbd9c20, 0x190da: 0x6c91d820, 0x190db: 0x6d0eb820, + 0x190dc: 0x6c778e20, 0x190dd: 0x6cda5e20, 0x190de: 0x6d192820, 0x190df: 0x6c14b420, + 0x190e0: 0x6c6ef620, 0x190e1: 0x6c67b020, 0x190e3: 0x6c6ea820, + 0x190e5: 0x6c305c20, 0x190e7: 0x6c733620, + 0x190e8: 0x6c4e8420, 0x190e9: 0x6c2c1020, + 0x190ec: 0x6c52f620, 0x190ee: 0x6c1b0820, 0x190ef: 0x6c2dae20, + 0x190f0: 0x6c093020, 0x190f2: 0x6d0a6e20, 0x190f3: 0x6c913e20, + 0x190f5: 0x6d007e20, 0x190f6: 0x6c094420, + 0x190f8: 0x6c095c20, 0x190fa: 0x6cfb4620, 0x190fb: 0x6cc8c820, + 0x190fc: 0x6c0d1420, 0x190fd: 0x6c379620, 0x190fe: 0x6c736220, + // Block 0x644, offset 0x19100 + 0x19100: 0x6d324820, 0x19101: 0x6c072e20, 0x19102: 0x6c365620, 0x19103: 0x6d227a20, + 0x19104: 0x6cc1b220, 0x19105: 0x6d299420, 0x19106: 0x6c9ca820, 0x19107: 0x6d16b220, + 0x19108: 0x6cd8e620, + 0x1910c: 0x6ccd6e20, 0x1910d: 0x6cdf1620, 0x1910e: 0x6ca28220, 0x1910f: 0x6c6e8220, + 0x19110: 0x6c0b9620, 0x19111: 0x6cc68e20, 0x19112: 0x6c136e20, 0x19113: 0x6c120220, + 0x19114: 0x6c2f4820, + 0x19119: 0x6c2b5620, 0x1911a: 0x6ce7ac20, 0x1911b: 0x6cde3220, + 0x1911c: 0x6d03ce20, 0x1911d: 0x6cd90a20, 0x1911e: 0x6c343e20, 0x1911f: 0x6cf85e20, + 0x19120: 0x6ce1b220, 0x19122: 0x6ce31620, 0x19123: 0x6ccd7820, + 0x19124: 0x6c667620, 0x19125: 0x6d35da20, 0x19126: 0x6cee7220, 0x19127: 0x6d1b4620, + 0x1912a: 0x6c58d620, 0x1912b: 0x6d37f220, + 0x1912c: 0x6cb78c20, 0x1912d: 0x6d3f8820, 0x1912f: 0x6d01c220, + 0x19130: 0x6d01d220, 0x19131: 0x6d2ade20, 0x19132: 0x6cef1e20, + 0x19135: 0x6cde9820, 0x19136: 0x6d2d9820, 0x19137: 0x6ca95820, + 0x1913b: 0x6d166620, + 0x1913c: 0x6cc58420, 0x1913d: 0x6cd59620, 0x1913e: 0x6c142a20, 0x1913f: 0x6d3d1e20, + // Block 0x645, offset 0x19140 + 0x19141: 0x6c9e0620, 0x19142: 0x6c5fdc20, 0x19143: 0x6c39a420, + 0x19144: 0x6cadfe20, 0x19145: 0x6c008e20, 0x19146: 0x6c392020, 0x19147: 0x6c029a20, + 0x19148: 0x6cbe0220, 0x19149: 0x6cb82220, 0x1914a: 0x6cffd020, 0x1914b: 0x6c3b1020, + 0x1914c: 0x6c417420, 0x1914d: 0x6cbb6620, 0x1914e: 0x6c437a20, 0x1914f: 0x6ce71c20, + 0x19150: 0x6c14ba20, 0x19151: 0x6d201620, 0x19152: 0x6c42b420, 0x19153: 0x6c07a820, + 0x19154: 0x6c3fb420, 0x19155: 0x6c1f0c20, 0x19156: 0x6d3aac20, + 0x19158: 0x6d390020, 0x1915a: 0x6c4f6220, 0x1915b: 0x6ca8e420, + 0x1915c: 0x6c73f820, 0x1915d: 0x6c1cb020, 0x1915e: 0x6c143820, 0x1915f: 0x6c799c20, + 0x19160: 0x6c8ae820, 0x19161: 0x6c85a020, 0x19162: 0x6d22e020, + 0x19164: 0x6d20d620, 0x19165: 0x6c4d5820, 0x19166: 0x6c85a220, 0x19167: 0x6c53ee20, + 0x19168: 0x6c45d820, 0x19169: 0x6c789820, 0x1916a: 0x6d260c20, 0x1916b: 0x6c2a6220, + 0x1916c: 0x6c5b9a20, 0x1916e: 0x6c4a2220, 0x1916f: 0x6c6f0620, + 0x19170: 0x6d429a20, 0x19171: 0x6c3fce20, 0x19172: 0x6cbcb220, 0x19173: 0x6c06c820, + 0x19174: 0x6c180a20, 0x19175: 0x6c223e20, 0x19176: 0x6c985020, 0x19177: 0x6c4d9820, + 0x19178: 0x6cf86a20, 0x19179: 0x6cc02e20, 0x1917a: 0x6c5a4620, + 0x1917d: 0x6c1d9620, 0x1917e: 0x6cca4c20, 0x1917f: 0x6d0bf420, + // Block 0x646, offset 0x19180 + 0x19180: 0x6d345620, 0x19181: 0x6c2a6c20, 0x19182: 0x6ce27420, 0x19183: 0x6c9aec20, + 0x19184: 0x6c8ce220, 0x19185: 0x6cd45e20, 0x19186: 0x6ce9fa20, 0x19187: 0x6c119220, + 0x19188: 0x6c2ea020, 0x19189: 0x6c181420, 0x1918a: 0x6cae9c20, 0x1918b: 0x6d13f020, + 0x1918c: 0x6c711220, 0x1918d: 0x6c61e820, 0x1918e: 0x6c7f0620, 0x1918f: 0x6ce4ea20, + 0x19190: 0x6d261a20, 0x19192: 0x6c112820, 0x19193: 0x6cb4e420, + 0x19194: 0x6d230e20, 0x19195: 0x6c880220, 0x19196: 0x6c231420, + 0x1919a: 0x6d212020, 0x1919b: 0x6c603220, + 0x1919c: 0x6cf09420, 0x1919d: 0x6c9cf020, 0x1919e: 0x6cdc3e20, 0x1919f: 0x6d00aa20, + 0x191a0: 0x6d059620, 0x191a1: 0x6c1c1c20, 0x191a2: 0x6cc06020, 0x191a3: 0x6c5bde20, + 0x191a5: 0x6d212220, 0x191a6: 0x6cbcc620, 0x191a7: 0x6cd74e20, + 0x191a8: 0x6cd72620, 0x191a9: 0x6c349020, 0x191aa: 0x6c908820, + 0x191ac: 0x6cad0620, 0x191ad: 0x6cdf7820, 0x191ae: 0x6d393020, 0x191af: 0x6d1af420, + 0x191b0: 0x6ccab420, 0x191b1: 0x6c3a5a20, 0x191b2: 0x6c187620, 0x191b3: 0x6d258020, + 0x191b4: 0x6d151620, 0x191b5: 0x6c5d2a20, 0x191b6: 0x6ccb3420, 0x191b7: 0x6d131020, + 0x191b8: 0x6c9fbc20, 0x191b9: 0x6c3bbe20, 0x191ba: 0x6c513620, + 0x191bc: 0x6d1b6420, 0x191bd: 0x6c130220, 0x191be: 0x6ca6b620, 0x191bf: 0x6c02e820, + // Block 0x647, offset 0x191c0 + 0x191c0: 0x6c3cb420, 0x191c1: 0x6c883420, 0x191c2: 0x6c16be20, 0x191c3: 0x6c15c820, + 0x191c4: 0x6c967020, 0x191c5: 0x6c2e5a20, 0x191c6: 0x6c54e620, 0x191c7: 0x6c928020, + 0x191c9: 0x6d184c20, 0x191ca: 0x6c574e20, 0x191cb: 0x6d2bf220, + 0x191cc: 0x6c550020, 0x191cd: 0x6c368420, 0x191ce: 0x6c5dee20, 0x191cf: 0x6cdcf820, + 0x191d0: 0x6ca6bc20, 0x191d1: 0x6cfcf620, 0x191d2: 0x6c842620, 0x191d3: 0x6cfcf820, + 0x191d4: 0x6d0eba20, 0x191d5: 0x6c8fa420, 0x191d6: 0x6c9af620, 0x191d7: 0x6c6c5c20, + 0x191d8: 0x6c5f5020, 0x191da: 0x6c0b5a20, 0x191db: 0x6d22a420, + 0x191dc: 0x6c5e0620, 0x191dd: 0x6c9ea420, 0x191de: 0x6c1df220, 0x191df: 0x6c970620, + 0x191e1: 0x6c822c20, 0x191e2: 0x6c6b5620, 0x191e3: 0x6cf10a20, + 0x191e4: 0x6d192a20, 0x191e5: 0x6d07e020, 0x191e6: 0x6cf91420, 0x191e7: 0x6c11e220, + 0x191e8: 0x6c7fe420, 0x191e9: 0x6d1b2220, 0x191ea: 0x6d027220, 0x191eb: 0x6d28a620, + 0x191ec: 0x6c95d220, 0x191ed: 0x6c8dd220, 0x191ee: 0x6cb97020, 0x191ef: 0x6c5d9a20, + 0x191f0: 0x6c646a20, 0x191f1: 0x6cf2a820, + 0x191f4: 0x6c43d420, 0x191f5: 0x6d399020, 0x191f6: 0x6c2e8220, 0x191f7: 0x6d1e2c20, + 0x191f8: 0x6c614220, 0x191f9: 0x6d0fc020, 0x191fa: 0x6cc82220, 0x191fb: 0x6cf79a20, + 0x191fc: 0x6cd6f020, 0x191fd: 0x6d240820, 0x191fe: 0x6d146020, 0x191ff: 0x6cb9f220, + // Block 0x648, offset 0x19200 + 0x19200: 0x6c5fde20, 0x19201: 0x6cc26420, 0x19202: 0x6ce48a20, 0x19203: 0x6cd42820, + 0x19204: 0x6cb9ee20, 0x19205: 0x6ca26020, 0x19206: 0x6c6c2620, 0x19207: 0x6c992420, + 0x19208: 0x6d1ac820, 0x19209: 0x6c412a20, 0x1920a: 0x6cb2ee20, 0x1920b: 0x6d084020, + 0x1920c: 0x6c994220, 0x1920d: 0x6c39c020, 0x1920e: 0x6d0b1020, 0x1920f: 0x6c425420, + 0x19210: 0x6cd95020, 0x19211: 0x6c5a8a20, 0x19212: 0x6d22d620, 0x19213: 0x6c484820, + 0x19214: 0x6c48e820, 0x19215: 0x6c8ef820, 0x19216: 0x6c35de20, 0x19217: 0x6d3eec20, + 0x19218: 0x6d3f3220, 0x19219: 0x6c093820, 0x1921a: 0x6cec1620, + 0x1921c: 0x6c8acc20, 0x1921f: 0x6c7af620, + 0x19221: 0x6c4d5a20, 0x19222: 0x6d19b020, 0x19223: 0x6d398820, + 0x19224: 0x6c1d4820, 0x19225: 0x6cfbea20, 0x19226: 0x6d087420, + 0x19228: 0x6cc01420, 0x19229: 0x6cae0c20, 0x1922a: 0x6c4ad620, 0x1922b: 0x6c373e20, + 0x1922c: 0x6c45dc20, 0x1922d: 0x6cbf0820, 0x1922e: 0x6c54ac20, 0x1922f: 0x6c81a620, + 0x19230: 0x6c85a420, 0x19231: 0x6c192220, 0x19232: 0x6cca1620, 0x19233: 0x6d3df420, + 0x19234: 0x6cf2ae20, 0x19235: 0x6cb3d420, 0x19236: 0x6c793020, 0x19237: 0x6cea8820, + 0x19238: 0x6cae5c20, 0x19239: 0x6ce27620, 0x1923a: 0x6cde4a20, 0x1923b: 0x6d3d4c20, + 0x1923c: 0x6c0c8e20, 0x1923d: 0x6c480e20, 0x1923e: 0x6c54be20, + // Block 0x649, offset 0x19240 + 0x19240: 0x6c0de020, 0x19241: 0x6d35de20, 0x19242: 0x6c302e20, 0x19243: 0x6c332220, + 0x19244: 0x6d387220, 0x19245: 0x6ca58a20, 0x19246: 0x6c8c1c20, 0x19247: 0x6cb32a20, + 0x19248: 0x6c613420, 0x19249: 0x6c9f5420, 0x1924a: 0x6cefc220, 0x1924b: 0x6c17ea20, + 0x1924c: 0x6c46b620, 0x1924d: 0x6c053220, 0x1924e: 0x6cc7aa20, 0x1924f: 0x6cdfa820, + 0x19250: 0x6c103a20, 0x19251: 0x6d3f8c20, 0x19252: 0x6c7c3c20, 0x19253: 0x6c815820, + 0x19254: 0x6c4ec220, 0x19255: 0x6d1c7020, 0x19256: 0x6d362620, 0x19257: 0x6c6ac620, + 0x19258: 0x6d040220, 0x19259: 0x6d00b820, 0x1925a: 0x6d0a1620, 0x1925b: 0x6ccd4620, + 0x1925c: 0x6cb9a620, 0x1925d: 0x6d004620, 0x1925e: 0x6cdacc20, 0x1925f: 0x6c4d1820, + 0x19260: 0x6c9d5820, 0x19261: 0x6c5cee20, 0x19262: 0x6caf7220, + 0x19264: 0x6c5be020, 0x19265: 0x6ca34c20, 0x19266: 0x6cd96220, 0x19267: 0x6c07bc20, + 0x19268: 0x6c1d7220, 0x19269: 0x6c6ae220, 0x1926a: 0x6c5a6e20, 0x1926b: 0x6c802c20, + 0x1926d: 0x6c56b420, 0x1926e: 0x6c30b620, 0x1926f: 0x6c5de420, + 0x19270: 0x6c4bd420, 0x19271: 0x6d111c20, 0x19272: 0x6c130420, 0x19273: 0x6c4b1220, + 0x19274: 0x6c66a620, 0x19275: 0x6c65c020, 0x19276: 0x6c29e620, 0x19277: 0x6c6d2420, + 0x19278: 0x6c96cc20, 0x19279: 0x6c5bf820, 0x1927a: 0x6c9e3420, 0x1927b: 0x6c11a820, + 0x1927c: 0x6c94ba20, 0x1927d: 0x6cb0aa20, 0x1927e: 0x6d105a20, 0x1927f: 0x6c726420, + // Block 0x64a, offset 0x19280 + 0x19280: 0x6c726620, 0x19281: 0x6cc3dc20, 0x19283: 0x6cb91220, + 0x19284: 0x6ccc8e20, 0x19286: 0x6c701820, 0x19287: 0x6c5df020, + 0x19288: 0x6d27fa20, 0x19289: 0x6c26b820, 0x1928a: 0x6d07ba20, 0x1928b: 0x6cff0420, + 0x1928c: 0x6c3ac620, 0x1928d: 0x6c131020, 0x1928e: 0x6d132420, + 0x19290: 0x6c2a9820, 0x19292: 0x6cbda020, 0x19293: 0x6c5b6a20, + 0x19294: 0x6cea6c20, 0x19296: 0x6cbb2420, 0x19297: 0x6cf7a020, + 0x19298: 0x6ca64a20, 0x19299: 0x6cc9ce20, 0x1929a: 0x6c9b5620, 0x1929b: 0x6ce95e20, + 0x1929c: 0x6c804220, 0x1929d: 0x6c4ff220, 0x1929e: 0x6c22e620, 0x1929f: 0x6d2d4e20, + 0x192a0: 0x6c023220, 0x192a1: 0x6c95c420, 0x192a2: 0x6c9efa20, + 0x192a4: 0x6c3daa20, 0x192a6: 0x6d010c20, 0x192a7: 0x6c0f8c20, + 0x192a8: 0x6c5c6820, 0x192a9: 0x6cbeb820, 0x192aa: 0x6d010e20, + 0x192ad: 0x6c0fa220, 0x192ae: 0x6cb9dc20, 0x192af: 0x6cb34020, + 0x192b0: 0x6c696820, 0x192b1: 0x6c750a20, 0x192b2: 0x6c7dc620, 0x192b3: 0x6cd97a20, + 0x192b4: 0x6c718e20, 0x192b5: 0x6c36f020, 0x192b6: 0x6ca8c020, 0x192b7: 0x6cb95a20, + 0x192b8: 0x6c2f1a20, 0x192b9: 0x6c2f1c20, 0x192bb: 0x6cb4da20, + 0x192bc: 0x6d33c220, 0x192bd: 0x6cb5c620, 0x192be: 0x6d3c8620, 0x192bf: 0x6c7a1c20, + // Block 0x64b, offset 0x192c0 + 0x192c0: 0x6d20b420, 0x192c1: 0x6cbd5820, 0x192c2: 0x6c7a2620, 0x192c3: 0x6c50d420, + 0x192c4: 0x6c3e0a20, 0x192c6: 0x6c2be220, 0x192c7: 0x6cfca620, + 0x192c8: 0x6c4b3c20, 0x192c9: 0x6c50ee20, 0x192ca: 0x6cc44620, 0x192cb: 0x6c4eaa20, + 0x192cc: 0x6ce7b420, 0x192cd: 0x6c0ee620, 0x192ce: 0x6ccd3e20, 0x192cf: 0x6c08de20, + 0x192d0: 0x6c924e20, 0x192d1: 0x6d12f020, 0x192d2: 0x6ca5e220, 0x192d3: 0x6c1fba20, + 0x192d4: 0x6cca5020, 0x192d5: 0x6c2e2820, 0x192d6: 0x6c925020, 0x192d7: 0x6ce81220, + 0x192d8: 0x6c88bc20, 0x192d9: 0x6c786620, 0x192da: 0x6cca5220, 0x192db: 0x6d31e420, + 0x192dc: 0x6c1fc020, 0x192dd: 0x6c890220, 0x192de: 0x6c998c20, + 0x192e0: 0x6cb90620, 0x192e1: 0x6c769220, 0x192e2: 0x6cceb620, 0x192e3: 0x6cfeea20, + 0x192e4: 0x6c0a2020, 0x192e5: 0x6d2bf420, 0x192e6: 0x6d1b7220, 0x192e7: 0x6cf6bc20, + 0x192e8: 0x6ccdaa20, 0x192e9: 0x6cdb1220, 0x192ea: 0x6cc98e20, 0x192eb: 0x6cc8e820, + 0x192ec: 0x6c219c20, 0x192ed: 0x6c917c20, 0x192ee: 0x6c8d9820, 0x192ef: 0x6c13c620, + 0x192f1: 0x6c593020, + 0x192f4: 0x6c63a220, 0x192f5: 0x6c04ee20, 0x192f6: 0x6c553220, 0x192f7: 0x6c30ec20, + 0x192f9: 0x6c90f020, 0x192fa: 0x6c70d220, 0x192fb: 0x6c73a620, + 0x192fc: 0x6c785c20, 0x192fd: 0x6cdd5220, 0x192fe: 0x6c95f020, 0x192ff: 0x6d303c20, + // Block 0x64c, offset 0x19300 + 0x19300: 0x6c2f7220, 0x19301: 0x6c32d220, 0x19302: 0x6d3b1c20, 0x19303: 0x6d0d3a20, + 0x19304: 0x6cacf420, 0x19305: 0x6c13d820, + 0x1930a: 0x6d15e620, + 0x1930d: 0x6d1f3420, 0x1930e: 0x6c5ae620, 0x1930f: 0x6d11c820, + 0x19310: 0x6d118020, 0x19311: 0x6d34d620, 0x19312: 0x6c45d220, 0x19313: 0x6cb6d420, + 0x19314: 0x6c44ac20, 0x19317: 0x6c545c20, + 0x19318: 0x6c9d2420, 0x19319: 0x6c3df020, 0x1931a: 0x6c54a020, 0x1931b: 0x6c4a1a20, + 0x1931c: 0x6ce05620, 0x1931d: 0x6c2b1a20, 0x1931f: 0x6d0c7220, + 0x19322: 0x6cc26620, + 0x19324: 0x6c16e420, 0x19325: 0x6ca02e20, 0x19326: 0x6ce1bc20, 0x19327: 0x6c063c20, + 0x19328: 0x6c011e20, 0x1932b: 0x6cfbf620, + 0x1932f: 0x6c996e20, + 0x19330: 0x6c811c20, 0x19331: 0x6ca42220, 0x19332: 0x6c070c20, 0x19333: 0x6c18be20, + 0x19335: 0x6c3a0420, 0x19336: 0x6d38e620, 0x19337: 0x6c5ece20, + 0x19338: 0x6c6a1420, 0x19339: 0x6cd5d620, 0x1933b: 0x6c7dd220, + 0x1933c: 0x6c2ea620, 0x1933d: 0x6c925220, + // Block 0x64d, offset 0x19340 + 0x19342: 0x6d215020, 0x19343: 0x6cdf2620, + 0x19344: 0x6c162e20, 0x19345: 0x6c97de20, 0x19346: 0x6c9fb820, 0x19347: 0x6c593220, + 0x19348: 0x6cf15420, 0x19349: 0x6caa9220, 0x1934a: 0x6c593420, 0x1934b: 0x6c540a20, + 0x1934c: 0x6c6e8e20, 0x1934d: 0x6c0f2620, 0x1934e: 0x6cfc2020, 0x1934f: 0x6c864820, + 0x19350: 0x6c6d2620, 0x19352: 0x6c989c20, 0x19353: 0x6cb1ba20, + 0x19354: 0x6c4fde20, 0x19355: 0x6d0fd620, 0x19357: 0x6cfd0a20, + 0x19358: 0x6cdb1420, 0x19359: 0x6cf01620, 0x1935a: 0x6c183c20, 0x1935b: 0x6cf6be20, + 0x1935c: 0x6c6d4c20, 0x1935d: 0x6c135a20, 0x1935e: 0x6c51e420, 0x1935f: 0x6c3b4020, + 0x19360: 0x6ccca620, 0x19361: 0x6c8d6a20, 0x19363: 0x6c337220, + 0x19364: 0x6cb54220, 0x19365: 0x6cb4b820, 0x19366: 0x6d26fa20, 0x19367: 0x6c0f8e20, + 0x19369: 0x6c5c7820, 0x1936a: 0x6c2f0220, 0x1936b: 0x6d0ef620, + 0x1936c: 0x6c72d020, 0x1936d: 0x6c69e020, 0x1936e: 0x6ca44c20, 0x1936f: 0x6c8b8620, + 0x19370: 0x6d20aa20, 0x19371: 0x6ce41c20, 0x19372: 0x6ce47620, 0x19373: 0x6cf42a20, + 0x19374: 0x6c53a220, 0x19375: 0x6cff7220, 0x19376: 0x6c503620, + 0x19378: 0x6ce55c20, 0x19379: 0x6d32ca20, 0x1937b: 0x6c59a020, + 0x1937c: 0x6c403420, 0x1937f: 0x6cea2c20, + // Block 0x64e, offset 0x19380 + 0x19381: 0x6cc61a20, 0x19382: 0x6c68ba20, + 0x19384: 0x6d031c20, 0x19387: 0x6d260020, + 0x19388: 0x6c73ee20, 0x19389: 0x6c572820, 0x1938b: 0x6c056020, + 0x1938c: 0x6ca1c420, 0x1938e: 0x6c425e20, 0x1938f: 0x6cef9220, + 0x19391: 0x6c9a8020, 0x19392: 0x6cd89c20, 0x19393: 0x6c0b8820, + 0x19394: 0x6c914220, 0x19395: 0x6cc0e620, + 0x19398: 0x6c43da20, 0x19399: 0x6d303e20, 0x1939a: 0x6c938c20, 0x1939b: 0x6cac2020, + 0x1939c: 0x6cc66220, 0x1939d: 0x6cc03020, 0x1939e: 0x6c8aea20, 0x1939f: 0x6c45e020, + 0x193a0: 0x6cfbf820, 0x193a1: 0x6cf86e20, 0x193a2: 0x6d02c620, + 0x193a4: 0x6ca79620, + 0x193a8: 0x6d00a220, 0x193a9: 0x6c8afe20, 0x193aa: 0x6c3d6420, 0x193ab: 0x6c25d620, + 0x193ac: 0x6d3d4e20, 0x193ad: 0x6c034820, 0x193ae: 0x6d429c20, 0x193af: 0x6d305020, + 0x193b0: 0x6d416e20, 0x193b1: 0x6c510620, 0x193b2: 0x6c601a20, + 0x193b4: 0x6c648620, + 0x193b8: 0x6ce8b020, 0x193b9: 0x6cfb5c20, 0x193ba: 0x6d0d8620, 0x193bb: 0x6ce0f420, + 0x193bc: 0x6cde5620, 0x193bd: 0x6c2bf620, 0x193be: 0x6c744c20, 0x193bf: 0x6c01fc20, + // Block 0x64f, offset 0x193c0 + 0x193c0: 0x6c4e1020, 0x193c1: 0x6cff8820, 0x193c2: 0x6c712020, 0x193c3: 0x6cee8c20, + 0x193c4: 0x6c054c20, 0x193c5: 0x6d3c5e20, 0x193c6: 0x6ca82e20, 0x193c7: 0x6ce53820, + 0x193c8: 0x6ca3c020, 0x193cb: 0x6d1fd420, + 0x193cc: 0x6c9dc620, 0x193cf: 0x6ca3c820, + 0x193d0: 0x6cd13c20, 0x193d1: 0x6c13a220, 0x193d2: 0x6d0c1020, 0x193d3: 0x6c44b620, + 0x193d4: 0x6c1d5420, 0x193d5: 0x6cc86420, 0x193d6: 0x6c63ca20, 0x193d7: 0x6cbd8220, + 0x193d8: 0x6c98e620, 0x193d9: 0x6c365c20, 0x193da: 0x6c863220, 0x193db: 0x6c1b3420, + 0x193dc: 0x6d29da20, 0x193dd: 0x6c513820, 0x193de: 0x6c6ae420, 0x193df: 0x6ca72c20, + 0x193e1: 0x6c499020, 0x193e2: 0x6c540c20, 0x193e3: 0x6c414220, + 0x193e5: 0x6c07be20, 0x193e6: 0x6cdd8020, 0x193e7: 0x6cf37220, + 0x193e8: 0x6c623820, 0x193e9: 0x6cf66a20, 0x193ea: 0x6cbf4a20, 0x193eb: 0x6c515820, + 0x193ec: 0x6cf23020, 0x193ed: 0x6cfb7220, 0x193ee: 0x6c6b0820, 0x193ef: 0x6c5cf820, + 0x193f0: 0x6cb00420, 0x193f1: 0x6cd00620, 0x193f2: 0x6c1d7620, 0x193f3: 0x6d324e20, + 0x193f5: 0x6d2d8a20, 0x193f6: 0x6cd78a20, 0x193f7: 0x6c5f0420, + 0x193f8: 0x6cd99420, 0x193f9: 0x6d354220, 0x193fa: 0x6c07a220, + 0x193fe: 0x6c810e20, 0x193ff: 0x6c0a2220, + // Block 0x650, offset 0x19400 + 0x19400: 0x6d08ae20, 0x19401: 0x6cade820, 0x19402: 0x6c278a20, + 0x19404: 0x6d340e20, 0x19405: 0x6cb00e20, 0x19406: 0x6c15d420, 0x19407: 0x6c0a2420, + 0x19408: 0x6cdafa20, 0x19409: 0x6c5df220, 0x1940a: 0x6c523420, 0x1940b: 0x6c6f2a20, + 0x1940c: 0x6c200620, 0x1940d: 0x6c67b420, 0x1940e: 0x6ca5a020, 0x1940f: 0x6c47be20, + 0x19410: 0x6c39de20, 0x19413: 0x6cde9a20, + 0x19414: 0x6c256020, 0x19415: 0x6cf6c220, 0x19416: 0x6c2a8420, 0x19417: 0x6cfb9020, + 0x19418: 0x6c7b7220, 0x19419: 0x6d308a20, 0x1941a: 0x6cddfc20, 0x1941b: 0x6c55ae20, + 0x1941c: 0x6c256220, 0x1941d: 0x6c92c820, 0x1941e: 0x6c738c20, 0x1941f: 0x6c92ca20, + 0x19420: 0x6cba7220, 0x19421: 0x6cad9620, 0x19422: 0x6d326c20, + 0x19424: 0x6c867a20, 0x19425: 0x6c128e20, 0x19426: 0x6cb64a20, + 0x19429: 0x6ce41e20, 0x1942a: 0x6c8d6c20, 0x1942b: 0x6cc1d420, + 0x1942c: 0x6c88cc20, 0x1942d: 0x6c91e020, 0x1942e: 0x6cd54020, 0x1942f: 0x6c462620, + 0x19430: 0x6d309a20, 0x19431: 0x6cad3c20, 0x19432: 0x6c6d5a20, 0x19433: 0x6cbe9020, + 0x19436: 0x6d3fc420, 0x19437: 0x6cb46620, + 0x19438: 0x6c6cbc20, 0x19439: 0x6c0c8620, 0x1943a: 0x6c66ee20, 0x1943b: 0x6c4bf220, + 0x1943e: 0x6d2a3020, 0x1943f: 0x6c8b5a20, + // Block 0x651, offset 0x19440 + 0x19440: 0x6c848a20, 0x19441: 0x6c95c620, 0x19442: 0x6cd08620, 0x19443: 0x6c9de220, + 0x19444: 0x6c66fc20, 0x19445: 0x6c2bb020, 0x19446: 0x6c076a20, + 0x19448: 0x6c88d420, 0x1944a: 0x6cfbc620, 0x1944b: 0x6cb22220, + 0x1944c: 0x6cc41620, 0x1944d: 0x6c8fda20, 0x1944e: 0x6d41e020, + 0x19450: 0x6c74fe20, 0x19451: 0x6ccd2020, 0x19452: 0x6d092620, + 0x19454: 0x6d027820, 0x19456: 0x6c804e20, 0x19457: 0x6cb6aa20, + 0x19458: 0x6d159820, 0x19459: 0x6caad420, 0x1945a: 0x6c84ca20, 0x1945b: 0x6d271e20, + 0x1945d: 0x6d15be20, 0x1945e: 0x6c1a9220, 0x1945f: 0x6c619620, + 0x19460: 0x6c4f4a20, 0x19461: 0x6d015e20, 0x19462: 0x6c792a20, 0x19463: 0x6d3e1020, + 0x19464: 0x6c509220, 0x19465: 0x6cf86220, 0x19466: 0x6cc26820, 0x19467: 0x6c4d1020, + 0x19468: 0x6cf95220, 0x19469: 0x6c4d1220, 0x1946a: 0x6c4a4820, 0x1946b: 0x6c14c220, + 0x1946c: 0x6d09fa20, 0x1946d: 0x6d058220, 0x1946e: 0x6cd09c20, 0x1946f: 0x6c79e820, + 0x19470: 0x6cf96020, 0x19471: 0x6ccc4a20, 0x19472: 0x6d208a20, 0x19473: 0x6d0bae20, + 0x19474: 0x6cb3f220, 0x19475: 0x6d40bc20, 0x19476: 0x6d1fc820, 0x19477: 0x6d3f3e20, + 0x19478: 0x6c88be20, 0x19479: 0x6cfaaa20, 0x1947a: 0x6cfa3e20, 0x1947b: 0x6d15f620, + 0x1947c: 0x6ccc5820, 0x1947d: 0x6d0e8420, 0x1947e: 0x6c69a220, 0x1947f: 0x6cf66e20, + // Block 0x652, offset 0x19480 + 0x19480: 0x6c1bb620, 0x19481: 0x6cd3b220, 0x19482: 0x6c774620, 0x19483: 0x6d1afc20, + 0x19484: 0x6c522420, 0x19485: 0x6d189620, 0x19486: 0x6cf6e820, 0x19487: 0x6ccb6a20, + 0x19488: 0x6c6d5c20, 0x19489: 0x6d135e20, 0x1948a: 0x6d1ec420, 0x1948b: 0x6cc41820, + 0x1948c: 0x6d129a20, 0x1948d: 0x6c945e20, 0x1948e: 0x6c7d9c20, 0x1948f: 0x6d333820, + 0x19494: 0x6d003a20, 0x19496: 0x6c253a20, 0x19497: 0x6d04e420, + 0x19498: 0x6c01d820, 0x19499: 0x6d051e20, 0x1949a: 0x6c118820, 0x1949b: 0x6c201820, + 0x1949c: 0x6d2c1e20, 0x1949e: 0x6d16f420, 0x1949f: 0x6caf4420, + 0x194a0: 0x6c7a3020, 0x194a1: 0x6cd0fa20, 0x194a2: 0x6c80bc20, 0x194a3: 0x6ce9e420, + 0x194a4: 0x6cf61020, 0x194a5: 0x6c8d0620, 0x194a6: 0x6cb4f820, 0x194a7: 0x6cf2f020, + 0x194a8: 0x6c88fa20, 0x194a9: 0x6c319e20, 0x194aa: 0x6c9af420, 0x194ab: 0x6c807220, + 0x194ac: 0x6cefdc20, 0x194ad: 0x6c32ca20, 0x194ae: 0x6c7b2a20, 0x194af: 0x6c004c20, + 0x194b0: 0x6d291a20, 0x194b1: 0x6c5bfa20, 0x194b2: 0x6d182620, 0x194b3: 0x6ca14c20, + 0x194b4: 0x6d3f5e20, 0x194b5: 0x6c3be820, 0x194b6: 0x6caec420, + 0x194b8: 0x6c0a6c20, 0x194b9: 0x6c871e20, 0x194ba: 0x6c918220, 0x194bb: 0x6c964620, + 0x194bc: 0x6c4d0a20, 0x194bd: 0x6d31bc20, 0x194be: 0x6c40ee20, 0x194bf: 0x6cc3ac20, + // Block 0x653, offset 0x194c0 + 0x194c0: 0x6d315220, 0x194c1: 0x6c797a20, 0x194c2: 0x6c1a0420, 0x194c3: 0x6c6ffe20, + 0x194c4: 0x6c746420, 0x194c5: 0x6c623a20, 0x194c6: 0x6c8d5620, + 0x194c8: 0x6cceaa20, 0x194c9: 0x6cc40020, 0x194ca: 0x6cc8ea20, 0x194cb: 0x6c21ac20, + 0x194cc: 0x6ca5b220, 0x194cd: 0x6d339820, 0x194ce: 0x6c907a20, 0x194cf: 0x6cad3620, + 0x194d2: 0x6c063820, 0x194d3: 0x6cc66420, + 0x194d4: 0x6cfa9a20, 0x194d5: 0x6c832c20, 0x194d6: 0x6cfeb420, 0x194d7: 0x6c3d6620, + 0x194d8: 0x6cc18620, 0x194da: 0x6ccbe820, 0x194db: 0x6d352c20, + 0x194dc: 0x6cdfe020, 0x194dd: 0x6cc70e20, 0x194de: 0x6cda4a20, 0x194df: 0x6d1cf620, + 0x194e0: 0x6c98e820, 0x194e1: 0x6ca3ca20, 0x194e2: 0x6c0baa20, + 0x194e4: 0x6cd65820, 0x194e5: 0x6ce11020, 0x194e6: 0x6c4ee220, 0x194e7: 0x6ccaf620, + 0x194e8: 0x6cc69420, 0x194ea: 0x6c2aa820, 0x194eb: 0x6cb44e20, + 0x194ec: 0x6c687820, 0x194ed: 0x6ce07620, 0x194ef: 0x6cc48e20, + 0x194f0: 0x6ca92c20, 0x194f1: 0x6c8b5c20, 0x194f2: 0x6c2f2020, 0x194f3: 0x6c2e8620, + 0x194f4: 0x6d381620, 0x194f6: 0x6c93f420, 0x194f7: 0x6c28b020, + 0x194f8: 0x6cf56020, 0x194f9: 0x6c4aba20, 0x194fa: 0x6c5fbe20, 0x194fb: 0x6ca67620, + 0x194fc: 0x6d164a20, 0x194fd: 0x6ca75820, 0x194fe: 0x6d221e20, 0x194ff: 0x6cedf220, + // Block 0x654, offset 0x19500 + 0x19500: 0x6c4ce620, 0x19501: 0x6d2b3c20, 0x19502: 0x6d0c5820, 0x19503: 0x6c251a20, + 0x19504: 0x6cfb2620, 0x19505: 0x6c68be20, 0x19506: 0x6ce80620, 0x19507: 0x6c3fac20, + 0x19508: 0x6cae0020, 0x1950a: 0x6d1e9220, 0x1950b: 0x6cbfa220, + 0x1950c: 0x6d0ad620, 0x1950d: 0x6c107220, 0x1950e: 0x6c0b7c20, 0x1950f: 0x6cd31c20, + 0x19510: 0x6d2c2220, 0x19511: 0x6d16c020, 0x19512: 0x6c0b7e20, + 0x19514: 0x6c333820, 0x19515: 0x6c7f8e20, 0x19516: 0x6d13d820, 0x19517: 0x6c149220, + 0x19518: 0x6c1cb220, 0x19519: 0x6d087820, 0x1951a: 0x6d069220, 0x1951b: 0x6d20d820, + 0x1951c: 0x6d04c020, + 0x19520: 0x6cde3620, 0x19521: 0x6c4c1620, + 0x19525: 0x6c906420, 0x19526: 0x6d018220, 0x19527: 0x6c180c20, + 0x19528: 0x6c657e20, 0x19529: 0x6cdf9820, 0x1952a: 0x6cb08c20, 0x1952b: 0x6d296820, + 0x1952c: 0x6d080620, 0x1952d: 0x6cfb3c20, 0x1952e: 0x6ca7d220, + 0x19534: 0x6c9d3820, 0x19535: 0x6c61f020, 0x19536: 0x6caa1c20, 0x19537: 0x6c54c020, + 0x19538: 0x6c571020, 0x19539: 0x6cee1020, 0x1953a: 0x6d1f2a20, 0x1953b: 0x6d2ac020, + 0x1953c: 0x6c09a020, 0x1953d: 0x6c9cee20, 0x1953e: 0x6cbab020, 0x1953f: 0x6d019220, + // Block 0x655, offset 0x19540 + 0x19540: 0x6c394420, 0x19541: 0x6d176020, 0x19542: 0x6cdfa020, 0x19543: 0x6c832e20, + 0x19544: 0x6d1e2e20, 0x19546: 0x6c6d0220, 0x19547: 0x6ccf4a20, + 0x19548: 0x6d1b4820, 0x19549: 0x6c613820, 0x1954b: 0x6cdaa620, + 0x1954f: 0x6cee1c20, + 0x19550: 0x6c9e5820, 0x19551: 0x6cdab420, 0x19552: 0x6d17a620, 0x19553: 0x6ccc8820, + 0x19554: 0x6cf61420, 0x19555: 0x6c603e20, 0x19556: 0x6c960020, 0x19557: 0x6d1ea620, + 0x19558: 0x6c998220, 0x19559: 0x6d2c7c20, 0x1955a: 0x6cdc4020, 0x1955b: 0x6d362a20, + 0x1955c: 0x6c0b9c20, 0x1955d: 0x6c83d820, + 0x19565: 0x6cbc4820, 0x19566: 0x6c498e20, 0x19567: 0x6cf64a20, + 0x19568: 0x6d324a20, 0x19569: 0x6d1d9020, 0x1956a: 0x6ca84020, 0x1956b: 0x6c75ca20, + 0x1956c: 0x6d01c620, 0x1956d: 0x6d11b620, 0x1956e: 0x6d01c820, 0x1956f: 0x6d33f020, + 0x19570: 0x6ca5a820, 0x19572: 0x6cd7f420, 0x19573: 0x6c903620, + 0x19574: 0x6c18d220, 0x19575: 0x6c9d5c20, 0x19576: 0x6cc3cc20, 0x19577: 0x6c27e420, + 0x19578: 0x6ccd4820, + 0x1957c: 0x6cdae820, 0x1957d: 0x6d01da20, 0x1957e: 0x6c0f2820, 0x1957f: 0x6c2f7a20, + // Block 0x656, offset 0x19580 + 0x19580: 0x6d40ca20, 0x19582: 0x6cd5f220, 0x19583: 0x6ccf2220, + 0x19584: 0x6c4ee420, 0x19585: 0x6cdfb220, 0x19586: 0x6c431420, + 0x1958a: 0x6ca36420, 0x1958b: 0x6c9d7a20, + 0x1958c: 0x6d0a3020, 0x1958d: 0x6c9afa20, 0x1958e: 0x6c66b420, 0x1958f: 0x6c24fe20, + 0x19590: 0x6c749220, 0x19591: 0x6c51de20, 0x19592: 0x6c3ac820, 0x19593: 0x6cd28220, + 0x19594: 0x6c17f220, 0x19595: 0x6cd0c220, 0x19596: 0x6caa8a20, 0x19597: 0x6cb2c420, + 0x19598: 0x6c980220, + 0x1959d: 0x6d189a20, 0x1959e: 0x6c1dda20, + 0x195a0: 0x6c7a6220, 0x195a1: 0x6c05d420, 0x195a2: 0x6c825a20, 0x195a3: 0x6c787020, + 0x195a4: 0x6ccc7820, 0x195a5: 0x6c0a4e20, 0x195a6: 0x6cdbfc20, 0x195a7: 0x6c443420, + 0x195a8: 0x6cb0c020, 0x195a9: 0x6d189c20, 0x195aa: 0x6cfb9220, 0x195ab: 0x6ca6c820, + 0x195ac: 0x6d1c9820, 0x195ad: 0x6d3a8020, 0x195ae: 0x6c216220, 0x195af: 0x6c3cbc20, + 0x195b0: 0x6d074620, 0x195b1: 0x6cb19c20, 0x195b2: 0x6cf48020, 0x195b3: 0x6c8a2420, + 0x195b4: 0x6c124c20, 0x195b5: 0x6d409020, 0x195b6: 0x6d422a20, 0x195b7: 0x6c0bc620, + 0x195b8: 0x6d122a20, 0x195b9: 0x6c58a420, 0x195ba: 0x6cac3220, 0x195bb: 0x6d04fa20, + 0x195bd: 0x6c82ea20, 0x195be: 0x6cbee420, 0x195bf: 0x6d001220, + // Block 0x657, offset 0x195c0 + 0x195c0: 0x6c689620, 0x195c1: 0x6c4c9420, + 0x195c4: 0x6d0cf020, 0x195c5: 0x6d092420, 0x195c6: 0x6d39e220, 0x195c7: 0x6c527e20, + 0x195c8: 0x6d1cb820, 0x195c9: 0x6cf71620, + 0x195cc: 0x6c889220, 0x195cd: 0x6cfc4820, 0x195ce: 0x6c58bc20, 0x195cf: 0x6d1a1620, + 0x195d1: 0x6c892a20, 0x195d2: 0x6ccd6020, 0x195d3: 0x6c125220, + 0x195d4: 0x6c077020, 0x195d5: 0x6c662220, 0x195d6: 0x6cd63020, 0x195d7: 0x6c397a20, + 0x195d8: 0x6c2d9820, 0x195da: 0x6c03d820, 0x195db: 0x6d21fe20, + 0x195de: 0x6ca47420, 0x195df: 0x6c831420, + 0x195e0: 0x6d198220, 0x195e1: 0x6c272820, 0x195e3: 0x6c14ea20, + 0x195e4: 0x6c178e20, 0x195e5: 0x6c416a20, 0x195e6: 0x6c6cdc20, 0x195e7: 0x6ca59220, + 0x195eb: 0x6c8a6a20, + 0x195ec: 0x6ca0e620, 0x195ed: 0x6d1fb220, 0x195ef: 0x6c8f2820, + 0x195f0: 0x6c4de620, 0x195f2: 0x6d1e7420, 0x195f3: 0x6c6cf020, + 0x195f4: 0x6c1b8c20, 0x195f5: 0x6cc5dc20, 0x195f6: 0x6ca9b620, + 0x195f9: 0x6c53ba20, 0x195fa: 0x6ce53620, + 0x195fc: 0x6c002420, 0x195fd: 0x6c485620, 0x195fe: 0x6c0bf820, 0x195ff: 0x6c0eea20, + // Block 0x658, offset 0x19600 + 0x19600: 0x6cbf1420, 0x19602: 0x6cd5d820, 0x19603: 0x6c20ee20, + 0x19604: 0x6c5b5420, 0x19605: 0x6c179a20, 0x19606: 0x6c3ff220, 0x19607: 0x6c5ab620, + 0x19608: 0x6c363a20, 0x19609: 0x6cf09a20, 0x1960a: 0x6c3b7820, 0x1960b: 0x6cdfe220, + 0x1960d: 0x6c94fa20, 0x1960e: 0x6c51cc20, 0x1960f: 0x6d1e4a20, + 0x19610: 0x6c5b5a20, 0x19612: 0x6d215820, 0x19613: 0x6d3ff820, + 0x19614: 0x6d0e8a20, 0x19615: 0x6cc07420, 0x19616: 0x6d2fbc20, 0x19617: 0x6c6f1a20, + 0x19618: 0x6cdf2820, + 0x1961f: 0x6cea0820, + 0x19620: 0x6c8bc220, 0x19621: 0x6c6f2620, 0x19622: 0x6d2c8220, 0x19623: 0x6d038620, + 0x19624: 0x6c56ba20, 0x19626: 0x6d071020, + 0x1962a: 0x6c254c20, 0x1962b: 0x6cbeb020, + 0x1962c: 0x6ca14e20, 0x1962e: 0x6d2a2220, 0x1962f: 0x6c084c20, + 0x19630: 0x6c1ace20, 0x19633: 0x6d0ebc20, + 0x19634: 0x6c443620, 0x19635: 0x6ca16220, 0x19636: 0x6c075c20, 0x19637: 0x6c732820, + 0x19638: 0x6c2ee620, 0x19639: 0x6d2fe020, 0x1963b: 0x6cf3ea20, + 0x1963c: 0x6d0ebe20, 0x1963e: 0x6c74c620, 0x1963f: 0x6cfade20, + // Block 0x659, offset 0x19640 + 0x19640: 0x6cdf4a20, 0x19641: 0x6c4e6620, 0x19643: 0x6c2d2c20, + 0x19644: 0x6c62ac20, 0x19645: 0x6c6b6020, 0x19647: 0x6d414c20, + 0x19649: 0x6d025820, 0x1964a: 0x6c7f7620, 0x1964b: 0x6c38e220, + 0x1964c: 0x6c5e4020, 0x1964d: 0x6cf92820, 0x1964e: 0x6ca8b620, 0x1964f: 0x6c9cb820, + 0x19650: 0x6cc49c20, 0x19651: 0x6c24c220, 0x19652: 0x6d1a3220, 0x19653: 0x6c9d2820, + 0x19655: 0x6c747e20, 0x19656: 0x6cc0ea20, 0x19657: 0x6ce73820, + 0x19658: 0x6ced7a20, 0x19659: 0x6d2ffc20, 0x1965a: 0x6c84fe20, 0x1965b: 0x6cce9c20, + 0x1965c: 0x6c79a620, 0x1965d: 0x6cfa7e20, 0x1965e: 0x6d301e20, 0x1965f: 0x6d33c420, + 0x19660: 0x6ce5be20, 0x19661: 0x6cd4bc20, 0x19662: 0x6c073e20, 0x19663: 0x6d136220, + 0x19664: 0x6cb14c20, 0x19665: 0x6c164420, 0x19666: 0x6c563e20, 0x19667: 0x6c791620, + 0x19668: 0x6c6f4a20, 0x19669: 0x6c011620, 0x1966a: 0x6c213020, 0x1966b: 0x6cb97620, + 0x1966c: 0x6c06ea20, 0x1966d: 0x6c032620, 0x1966e: 0x6c3b6020, 0x1966f: 0x6c77d620, + 0x19670: 0x6ceafc20, 0x19671: 0x6ceafe20, 0x19672: 0x6d423020, 0x19673: 0x6c8cbc20, + 0x19675: 0x6c4aea20, 0x19676: 0x6d0be620, 0x19677: 0x6cd35420, + 0x19678: 0x6c545220, 0x19679: 0x6c8b0020, 0x1967a: 0x6ccbee20, 0x1967b: 0x6cd8b220, + 0x1967d: 0x6c071020, 0x1967e: 0x6cc5e820, 0x1967f: 0x6c319820, + // Block 0x65a, offset 0x19680 + 0x19680: 0x6c0eec20, 0x19681: 0x6c895620, 0x19682: 0x6cba0c20, 0x19683: 0x6c3aac20, + 0x19684: 0x6c624220, 0x19685: 0x6d3ffa20, 0x19686: 0x6c5ac820, 0x19687: 0x6c514020, + 0x19688: 0x6c83e420, 0x19689: 0x6d259620, 0x1968a: 0x6d26ce20, 0x1968b: 0x6d04e620, + 0x1968c: 0x6c15d620, 0x1968d: 0x6c2b8c20, 0x1968e: 0x6c825020, 0x1968f: 0x6c6cae20, + 0x19690: 0x6c1d1c20, 0x19691: 0x6cd8ec20, 0x19692: 0x6cb49a20, 0x19693: 0x6d11d420, + 0x19694: 0x6c678620, 0x19695: 0x6c583620, 0x19696: 0x6c595620, 0x19697: 0x6ce1f620, + 0x19698: 0x6cc82c20, 0x19699: 0x6cf26620, 0x1969a: 0x6d1ccc20, 0x1969b: 0x6cc53420, + 0x1969c: 0x6d1a3420, 0x1969d: 0x6cd30e20, 0x1969e: 0x6d1a2620, 0x1969f: 0x6c73e220, + 0x196a0: 0x6cea4020, 0x196a1: 0x6d080020, 0x196a2: 0x6c632e20, 0x196a3: 0x6d379e20, + 0x196a4: 0x6cbc9820, 0x196a5: 0x6d3ab220, 0x196a6: 0x6c2db020, + 0x196a8: 0x6d201820, 0x196ab: 0x6d14a420, + 0x196ac: 0x6cd2c220, 0x196ad: 0x6d16fa20, 0x196ae: 0x6ca0e820, + 0x196b1: 0x6cc3ae20, 0x196b2: 0x6cfea420, 0x196b3: 0x6cf3ba20, + 0x196b4: 0x6c44c020, 0x196b5: 0x6d1ce620, 0x196b6: 0x6ce66820, 0x196b7: 0x6cd2c620, + 0x196b8: 0x6ca5cc20, 0x196b9: 0x6c44c620, 0x196ba: 0x6cde5020, 0x196bb: 0x6cf28a20, + 0x196bc: 0x6c711820, 0x196bd: 0x6c15a820, 0x196be: 0x6cb19620, 0x196bf: 0x6d3d5420, + // Block 0x65b, offset 0x196c0 + 0x196c0: 0x6c54c420, 0x196c1: 0x6ca4fa20, 0x196c2: 0x6d0c9820, 0x196c3: 0x6c468620, + 0x196c4: 0x6d225c20, 0x196c5: 0x6c540420, 0x196c7: 0x6cd7f620, + 0x196c8: 0x6c1aba20, 0x196c9: 0x6c56a420, 0x196ca: 0x6d105220, 0x196cb: 0x6cf22e20, + 0x196cc: 0x6cfcd020, 0x196cd: 0x6cb21020, 0x196ce: 0x6cc69c20, 0x196cf: 0x6c90a820, + 0x196d0: 0x6c81b420, 0x196d1: 0x6cccfe20, 0x196d2: 0x6cfef020, 0x196d3: 0x6d2ae220, + 0x196d4: 0x6c4d7820, 0x196d5: 0x6c38b420, 0x196d6: 0x6c4e6220, 0x196d7: 0x6c14d420, + 0x196d8: 0x6d2e7620, 0x196da: 0x6cde1620, 0x196db: 0x6d3b2a20, + 0x196dc: 0x6ca9c820, 0x196dd: 0x6c4f1820, 0x196de: 0x6d21b620, 0x196df: 0x6d3db420, + 0x196e0: 0x6d205c20, 0x196e1: 0x6c86fc20, 0x196e2: 0x6c5e2a20, 0x196e3: 0x6cf73e20, + 0x196e4: 0x6cfb0020, 0x196e5: 0x6c155820, 0x196e6: 0x6c889420, + 0x196e8: 0x6cd7be20, 0x196e9: 0x6c6fce20, 0x196ea: 0x6cb42820, 0x196eb: 0x6cbffc20, + 0x196ec: 0x6c45d620, 0x196ed: 0x6d3ee820, 0x196ee: 0x6d20bc20, + 0x196f1: 0x6cc62820, 0x196f2: 0x6ca98420, 0x196f3: 0x6c99d820, + 0x196f4: 0x6c032820, 0x196f5: 0x6c6f9820, 0x196f7: 0x6d069620, + 0x196f8: 0x6cb29020, 0x196f9: 0x6c0b8a20, 0x196fa: 0x6c995420, + 0x196ff: 0x6d14ce20, + // Block 0x65c, offset 0x19700 + 0x19700: 0x6d20f620, 0x19702: 0x6cb29220, 0x19703: 0x6cc0f220, + 0x19704: 0x6c05f420, 0x19705: 0x6c5bae20, + 0x19709: 0x6c109420, 0x1970a: 0x6c985820, 0x1970b: 0x6c7e7020, + 0x1970c: 0x6ce8a820, 0x1970d: 0x6cf3c220, 0x1970e: 0x6c85ec20, 0x1970f: 0x6c8cea20, + 0x19711: 0x6c620220, 0x19712: 0x6c75bc20, 0x19713: 0x6d405620, + 0x19714: 0x6c349220, 0x19715: 0x6c745020, 0x19716: 0x6c277020, 0x19717: 0x6c073220, + 0x1971d: 0x6c7e8020, 0x1971e: 0x6c0d3e20, 0x1971f: 0x6cdbf820, + 0x19720: 0x6ce8c220, 0x19721: 0x6d08e220, + 0x19727: 0x6c350c20, + 0x1972a: 0x6cdc5420, 0x1972b: 0x6c0a2e20, + 0x1972c: 0x6ce87420, 0x1972d: 0x6ccb4a20, 0x1972e: 0x6c120020, 0x1972f: 0x6ce8e420, + 0x19730: 0x6c9e3620, 0x19731: 0x6c6c5220, 0x19732: 0x6c93b020, + 0x19735: 0x6d2e8020, 0x19736: 0x6c08f620, 0x19737: 0x6c60ac20, + 0x19738: 0x6d2b7420, 0x19739: 0x6d07d620, 0x1973a: 0x6c86a020, + 0x1973d: 0x6cdc8220, 0x1973e: 0x6d1dc220, 0x1973f: 0x6cd57620, + // Block 0x65d, offset 0x19740 + 0x19742: 0x6c358620, + 0x19747: 0x6cbf8620, + 0x19748: 0x6c958020, 0x19749: 0x6d322220, 0x1974a: 0x6cea4620, 0x1974b: 0x6c46fe20, + 0x1974c: 0x6d223c20, 0x1974d: 0x6c82be20, 0x1974e: 0x6c0eee20, 0x1974f: 0x6ca56e20, + 0x19750: 0x6cb12020, 0x19751: 0x6c890e20, 0x19752: 0x6ce17a20, 0x19753: 0x6c883820, + 0x19754: 0x6cf16220, 0x19755: 0x6c291020, 0x19756: 0x6c87be20, 0x19757: 0x6ce65e20, + 0x19758: 0x6cec1820, 0x19759: 0x6d390220, 0x1975a: 0x6c426620, 0x1975b: 0x6d03d220, + 0x1975c: 0x6c021420, 0x1975d: 0x6c393820, 0x1975e: 0x6caf0e20, 0x1975f: 0x6c0eda20, + 0x19760: 0x6ceb0620, 0x19761: 0x6cd4d020, 0x19762: 0x6d14e420, 0x19763: 0x6c0ef020, + 0x19764: 0x6cbcb820, 0x19765: 0x6ce80e20, 0x19766: 0x6c45e820, 0x19767: 0x6ce74820, + 0x19768: 0x6c4e1220, 0x19769: 0x6c1a0820, 0x1976a: 0x6c6ace20, 0x1976b: 0x6c593a20, + 0x1976c: 0x6d042c20, 0x1976d: 0x6c2d6220, 0x1976e: 0x6c146a20, 0x1976f: 0x6c308020, + 0x19770: 0x6caffc20, 0x19771: 0x6cc86a20, 0x19772: 0x6c8b2220, 0x19773: 0x6cd14020, + 0x19774: 0x6cab8420, 0x19775: 0x6c2c8020, 0x19776: 0x6d217020, 0x19777: 0x6c200220, + 0x19778: 0x6cc6a220, 0x19779: 0x6c774820, 0x1977a: 0x6ce12420, 0x1977b: 0x6c23b620, + 0x1977c: 0x6cb18220, 0x1977d: 0x6c209820, 0x1977e: 0x6c92ce20, 0x1977f: 0x6ce79020, + // Block 0x65e, offset 0x19780 + 0x19780: 0x6d336620, 0x19781: 0x6c86a420, 0x19782: 0x6cc9a020, 0x19783: 0x6cac4420, + 0x19784: 0x6cd82e20, 0x19786: 0x6c291220, 0x19787: 0x6c55de20, + 0x19788: 0x6d190c20, 0x19789: 0x6cfd3220, 0x1978a: 0x6d028020, 0x1978b: 0x6c958820, + 0x1978c: 0x6c8f5e20, 0x1978e: 0x6cdfea20, 0x1978f: 0x6c422e20, + 0x19791: 0x6ce01c20, + 0x19795: 0x6d1ef020, 0x19796: 0x6ca3e020, + 0x19798: 0x6c429a20, 0x19799: 0x6c759820, 0x1979a: 0x6c1bfe20, 0x1979b: 0x6c464020, + 0x1979c: 0x6cecfa20, 0x1979d: 0x6c85ee20, 0x1979e: 0x6c8e5420, 0x1979f: 0x6c8b0a20, + 0x197a0: 0x6cf9c420, 0x197a1: 0x6c06ac20, 0x197a2: 0x6c018a20, 0x197a3: 0x6d237220, + 0x197a4: 0x6c713220, 0x197a5: 0x6cc75820, 0x197a6: 0x6d0a3420, 0x197a7: 0x6d3e7a20, + 0x197a8: 0x6c25ee20, 0x197a9: 0x6c120620, 0x197aa: 0x6d2baa20, 0x197ab: 0x6d1dc420, + 0x197ac: 0x6c407420, 0x197ad: 0x6cc88a20, 0x197af: 0x6cf7cc20, + 0x197b0: 0x6cd5e620, 0x197b1: 0x6c68c020, 0x197b2: 0x6c68c220, 0x197b3: 0x6d057020, + 0x197b4: 0x6d2f2620, 0x197b7: 0x6cd71220, + 0x197b8: 0x6c18a820, 0x197b9: 0x6c390820, 0x197ba: 0x6c5ff820, 0x197bb: 0x6d33a820, + 0x197bd: 0x6c480420, 0x197be: 0x6cf4d620, + // Block 0x65f, offset 0x197c0 + 0x197c0: 0x6cbcae20, 0x197c1: 0x6cd5bc20, 0x197c2: 0x6c4d1420, 0x197c3: 0x6ceb0820, + 0x197c4: 0x6c319020, 0x197c5: 0x6d3f0220, 0x197c6: 0x6cc46e20, 0x197c7: 0x6ca27820, + 0x197c8: 0x6c3fd020, 0x197c9: 0x6c8cca20, 0x197ca: 0x6c601e20, 0x197cb: 0x6d04ce20, + 0x197cc: 0x6d084c20, 0x197cd: 0x6ca37820, 0x197ce: 0x6d0aee20, 0x197cf: 0x6c6be020, + 0x197d0: 0x6c85f020, 0x197d1: 0x6c269c20, 0x197d2: 0x6cc7a020, 0x197d3: 0x6d24ee20, + 0x197d4: 0x6c939c20, 0x197d5: 0x6cd06220, 0x197d6: 0x6c851820, 0x197d7: 0x6c89bc20, + 0x197d8: 0x6c450e20, 0x197d9: 0x6d033820, 0x197da: 0x6d004420, 0x197db: 0x6cbdd820, + 0x197dc: 0x6cbcc220, 0x197dd: 0x6c182020, 0x197de: 0x6d1f3c20, 0x197df: 0x6c109a20, + 0x197e0: 0x6c7bc220, 0x197e1: 0x6cc3be20, 0x197e2: 0x6c00aa20, 0x197e3: 0x6cbd3420, + 0x197e4: 0x6cbac020, 0x197e5: 0x6c1f5220, 0x197e6: 0x6cae1e20, 0x197e7: 0x6c7e0620, + 0x197e8: 0x6d13fa20, 0x197e9: 0x6c48ce20, 0x197ea: 0x6cd14220, 0x197eb: 0x6cb0fa20, + 0x197ed: 0x6d393820, 0x197ee: 0x6c59de20, 0x197ef: 0x6c5ad620, + 0x197f0: 0x6c557e20, 0x197f1: 0x6c074220, + 0x197f4: 0x6d2bec20, 0x197f5: 0x6c624620, 0x197f6: 0x6c47c220, 0x197f7: 0x6cf6a420, + 0x197f8: 0x6c431620, 0x197f9: 0x6c148620, 0x197fa: 0x6c96d620, 0x197fb: 0x6d3b2020, + 0x197fc: 0x6ce9ea20, 0x197fd: 0x6d3ca020, 0x197fe: 0x6cface20, 0x197ff: 0x6c80de20, + // Block 0x660, offset 0x19800 + 0x19803: 0x6d36e820, + 0x19804: 0x6c00cc20, 0x19805: 0x6cfc2e20, 0x19806: 0x6c4c3c20, 0x19807: 0x6cf7a220, + 0x19809: 0x6ce9f020, 0x1980a: 0x6c11de20, 0x1980b: 0x6ccb0420, + 0x1980c: 0x6cfaea20, 0x1980d: 0x6c6c0e20, 0x1980e: 0x6c3bfa20, 0x1980f: 0x6cc45a20, + 0x19811: 0x6d123a20, 0x19812: 0x6c29fa20, 0x19813: 0x6c63f420, + 0x19814: 0x6c82fc20, 0x19815: 0x6d0d0220, 0x19816: 0x6c918e20, 0x19817: 0x6ce9d620, + 0x19818: 0x6d1cd220, 0x19819: 0x6cb0de20, 0x1981a: 0x6c964a20, 0x1981b: 0x6c87a420, + 0x1981c: 0x6c0d1220, 0x1981e: 0x6c995620, 0x1981f: 0x6c040e20, + 0x19820: 0x6c5a6a20, 0x19822: 0x6d121220, 0x19823: 0x6c50a420, + 0x19824: 0x6c218420, 0x19825: 0x6c516420, 0x19826: 0x6ca95620, 0x19827: 0x6c1e0220, + 0x19828: 0x6c874620, 0x19829: 0x6ce19420, 0x1982a: 0x6c585a20, 0x1982b: 0x6c095420, + 0x1982c: 0x6c033420, 0x1982d: 0x6c181020, 0x1982e: 0x6d104620, 0x1982f: 0x6c269e20, + 0x19830: 0x6c024420, 0x19831: 0x6d091020, 0x19833: 0x6d3e5220, + 0x19834: 0x6c265a20, 0x19835: 0x6cc4ce20, 0x19836: 0x6c053820, 0x19837: 0x6c25f020, + 0x19838: 0x6ced4e20, 0x19839: 0x6cdebe20, 0x1983a: 0x6c05dc20, 0x1983b: 0x6c417a20, + 0x1983c: 0x6d0c7620, 0x1983d: 0x6cf5a620, 0x1983e: 0x6d3ad420, 0x1983f: 0x6d0b4e20, + // Block 0x661, offset 0x19840 + 0x19840: 0x6c393a20, 0x19841: 0x6d203c20, 0x19842: 0x6c012820, 0x19843: 0x6ce9a420, + 0x19844: 0x6c9b2020, 0x19845: 0x6ccf5c20, 0x19846: 0x6c6d2e20, 0x19847: 0x6c47ce20, + 0x19848: 0x6c627820, 0x19849: 0x6cbc0020, 0x1984a: 0x6c695820, 0x1984b: 0x6d0d0420, + 0x1984c: 0x6cf92e20, 0x1984d: 0x6c772020, 0x1984e: 0x6c9e0220, 0x1984f: 0x6d086a20, + 0x19850: 0x6cccc420, 0x19851: 0x6cf2d820, 0x19852: 0x6cb8b420, 0x19853: 0x6c58f620, + 0x19854: 0x6cc5d020, 0x19855: 0x6d322420, 0x19856: 0x6ce45c20, 0x19857: 0x6c740020, + 0x19858: 0x6d008620, 0x19859: 0x6cb75820, 0x1985a: 0x6c01f820, 0x1985b: 0x6c9a8220, + 0x1985c: 0x6c476820, 0x1985e: 0x6ce1b820, 0x1985f: 0x6c389220, + 0x19860: 0x6c722c20, 0x19861: 0x6c162820, 0x19862: 0x6cd74c20, 0x19863: 0x6c096820, + 0x19864: 0x6c996220, 0x19865: 0x6cd77820, 0x19866: 0x6c477220, 0x19867: 0x6c53a420, + 0x19868: 0x6c579620, 0x19869: 0x6c95fe20, 0x1986a: 0x6c4f7420, 0x1986b: 0x6c63b820, + 0x1986c: 0x6cc2e220, 0x1986d: 0x6c40f420, 0x1986e: 0x6c599020, 0x1986f: 0x6c103c20, + 0x19870: 0x6c478e20, 0x19871: 0x6c3c4e20, 0x19872: 0x6ca28820, 0x19873: 0x6c009c20, + 0x19874: 0x6d1cee20, 0x19875: 0x6cd75020, 0x19876: 0x6c89be20, 0x19877: 0x6c6ad020, + 0x19878: 0x6c1c2220, 0x19879: 0x6c6ad220, 0x1987a: 0x6c1d7020, 0x1987b: 0x6cb2e820, + 0x1987c: 0x6c186a20, 0x1987d: 0x6d0c9a20, 0x1987e: 0x6c321c20, 0x1987f: 0x6c2c5a20, + // Block 0x662, offset 0x19880 + 0x19881: 0x6c89c220, 0x19882: 0x6cfcd220, 0x19883: 0x6c0c0420, + 0x19884: 0x6d042e20, 0x19885: 0x6c9bda20, 0x19886: 0x6d130220, 0x19887: 0x6c9d5e20, + 0x19888: 0x6cb7a020, 0x19889: 0x6cb7a220, 0x1988a: 0x6cf30620, 0x1988b: 0x6d01dc20, + 0x1988c: 0x6d239820, 0x1988d: 0x6cb87020, 0x1988e: 0x6c1a2820, 0x1988f: 0x6d11c220, + 0x19890: 0x6d1bd420, 0x19891: 0x6d0fd420, 0x19892: 0x6c606820, 0x19893: 0x6d3fa220, + 0x19894: 0x6d07b220, 0x19895: 0x6c9f6e20, 0x19896: 0x6c907620, 0x19897: 0x6c766e20, + 0x19898: 0x6d11ca20, 0x19899: 0x6d0dcc20, 0x1989a: 0x6cdcfa20, 0x1989b: 0x6c4b6c20, + 0x1989c: 0x6c5a7a20, 0x1989d: 0x6d1c8e20, 0x1989e: 0x6cd14420, 0x1989f: 0x6c140220, + 0x198a0: 0x6c883c20, 0x198a2: 0x6d082420, 0x198a3: 0x6c200e20, + 0x198a4: 0x6c184220, 0x198a5: 0x6ca6ca20, 0x198a6: 0x6cc27820, 0x198a7: 0x6c9e7e20, + 0x198a8: 0x6c5dfe20, 0x198a9: 0x6d21a420, 0x198aa: 0x6d2e1620, 0x198ab: 0x6c55c820, + 0x198ac: 0x6c136020, 0x198ad: 0x6c0c2c20, 0x198ae: 0x6cb9d020, 0x198af: 0x6cf6ee20, + 0x198b0: 0x6c67c220, 0x198b1: 0x6c79c620, 0x198b2: 0x6c970220, 0x198b3: 0x6c98a220, + 0x198b4: 0x6d2e2220, 0x198b5: 0x6c0b5c20, 0x198b6: 0x6c5f6c20, 0x198b7: 0x6c74d820, + 0x198b8: 0x6ca45820, 0x198b9: 0x6c0a9020, 0x198ba: 0x6cd3f420, 0x198bb: 0x6cd7ac20, + 0x198bc: 0x6ca18820, 0x198bd: 0x6c8b6420, 0x198be: 0x6c9f0820, 0x198bf: 0x6ca19420, + // Block 0x663, offset 0x198c0 + 0x198c0: 0x6cf74820, 0x198c1: 0x6c156820, 0x198c2: 0x6cc21620, 0x198c3: 0x6c69e620, + 0x198c4: 0x6c5e5a20, 0x198c5: 0x6cfb1a20, 0x198c6: 0x6d068820, 0x198c7: 0x6ca98820, + 0x198c8: 0x6ce74020, 0x198c9: 0x6c542220, 0x198ca: 0x6d240e20, + 0x198cc: 0x6c1ce220, 0x198cd: 0x6c0fbc20, 0x198ce: 0x6d415820, 0x198cf: 0x6c2dba20, + 0x198d0: 0x6d3cfa20, 0x198d1: 0x6c5ea620, 0x198d2: 0x6cb86220, + 0x198d4: 0x6d043020, 0x198d5: 0x6c5c0020, 0x198d6: 0x6cd23420, 0x198d7: 0x6c7a1e20, + 0x198d9: 0x6c32f220, 0x198da: 0x6d10da20, 0x198db: 0x6d20da20, + 0x198dc: 0x6c056420, 0x198dd: 0x6c6a9220, 0x198de: 0x6d30e820, 0x198df: 0x6c634620, + 0x198e0: 0x6cd2c820, 0x198e1: 0x6c2bea20, 0x198e2: 0x6c302a20, 0x198e3: 0x6c223a20, + 0x198e4: 0x6c3fd220, 0x198e5: 0x6c9f4020, 0x198e6: 0x6d314020, 0x198e7: 0x6d31d020, + 0x198e9: 0x6d0e6420, 0x198ea: 0x6cbc2020, 0x198eb: 0x6c4f4e20, + 0x198ec: 0x6c45ea20, 0x198ed: 0x6cbb6e20, 0x198ee: 0x6c94a220, 0x198ef: 0x6c48f620, + 0x198f0: 0x6c7e7620, 0x198f1: 0x6cc8ce20, 0x198f2: 0x6c383420, 0x198f3: 0x6c260a20, + 0x198f4: 0x6d0c9c20, 0x198f5: 0x6c458a20, 0x198f6: 0x6c6ad420, 0x198f7: 0x6c48d020, + 0x198f8: 0x6c4c7020, 0x198f9: 0x6cdd7c20, 0x198fa: 0x6cf2ba20, 0x198fb: 0x6d335220, + 0x198fc: 0x6ca84220, 0x198fd: 0x6c2e2c20, 0x198fe: 0x6c7f3c20, 0x198ff: 0x6cde6420, + // Block 0x664, offset 0x19900 + 0x19900: 0x6c254620, 0x19901: 0x6d0af420, 0x19902: 0x6c4bd020, + 0x19905: 0x6c2b3420, 0x19907: 0x6c9dc820, + 0x19908: 0x6c6a2a20, 0x19909: 0x6c9f7020, 0x1990a: 0x6c71ca20, 0x1990b: 0x6d217420, + 0x1990c: 0x6d318020, 0x1990d: 0x6d2fc820, 0x1990e: 0x6d2cd220, 0x1990f: 0x6d038820, + 0x19911: 0x6c049420, 0x19912: 0x6c516620, 0x19913: 0x6c46d220, + 0x19914: 0x6c538220, 0x19915: 0x6c816e20, 0x19916: 0x6cf51620, 0x19917: 0x6c0e8c20, + 0x19918: 0x6c795420, 0x19919: 0x6c92d420, 0x1991a: 0x6c246420, 0x1991b: 0x6c885020, + 0x1991c: 0x6d141820, 0x1991d: 0x6cbc6020, 0x1991e: 0x6cd53820, + 0x19920: 0x6d08b220, 0x19921: 0x6c6c6220, 0x19922: 0x6cbd4220, 0x19923: 0x6c5b7020, + 0x19924: 0x6cdb3620, 0x19925: 0x6c207c20, 0x19926: 0x6c33b420, 0x19927: 0x6c8fb220, + 0x19929: 0x6ca4c820, 0x1992a: 0x6ce02220, 0x1992b: 0x6c285220, + 0x1992c: 0x6cf03e20, 0x1992d: 0x6c41f220, 0x1992e: 0x6c26c620, 0x1992f: 0x6c86d420, + 0x19930: 0x6c10de20, 0x19931: 0x6cfd3e20, 0x19932: 0x6cac8c20, 0x19933: 0x6c7eb620, + 0x19934: 0x6d39ec20, 0x19935: 0x6ca7c420, 0x19936: 0x6c580220, 0x19937: 0x6d1cce20, + 0x19938: 0x6cfd4620, 0x19939: 0x6c809020, 0x1993a: 0x6ca0a020, 0x1993b: 0x6c03e220, + 0x1993d: 0x6c4adc20, 0x1993e: 0x6c08c620, 0x1993f: 0x6c3d5020, + // Block 0x665, offset 0x19940 + 0x19940: 0x6c5da820, 0x19941: 0x6d173c20, 0x19942: 0x6c8f2c20, + 0x19944: 0x6d19cc20, 0x19945: 0x6c735c20, 0x19946: 0x6c5d7420, 0x19947: 0x6c1a0a20, + 0x19948: 0x6c311c20, 0x19949: 0x6c356a20, 0x1994b: 0x6d0da620, + 0x1994c: 0x6d3c9420, 0x1994d: 0x6d2cce20, 0x1994e: 0x6cb70420, 0x1994f: 0x6d216220, + 0x19950: 0x6cc37620, 0x19951: 0x6c5d7a20, 0x19952: 0x6ca84420, 0x19953: 0x6c59e220, + 0x19954: 0x6c71cc20, 0x19955: 0x6ccf6820, + 0x19958: 0x6caebe20, 0x19959: 0x6ca01820, 0x1995a: 0x6c129220, 0x1995b: 0x6c90ba20, + 0x1995c: 0x6c843e20, 0x1995d: 0x6c205e20, 0x1995f: 0x6c24f020, + 0x19960: 0x6ccdc820, 0x19961: 0x6c280a20, 0x19962: 0x6cb68220, + 0x19964: 0x6c7f7a20, 0x19965: 0x6c8de620, 0x19966: 0x6c8a6220, 0x19967: 0x6cc62220, + 0x19968: 0x6d20c820, 0x19969: 0x6d16ca20, 0x1996a: 0x6c2df820, 0x1996b: 0x6cb6dc20, + 0x1996c: 0x6d147820, 0x1996d: 0x6ca6f420, 0x1996e: 0x6c3d5220, 0x1996f: 0x6c657420, + 0x19970: 0x6d0b1c20, 0x19971: 0x6c398c20, 0x19972: 0x6cc8c420, 0x19973: 0x6cfa8c20, + 0x19976: 0x6c096a20, 0x19977: 0x6cd25e20, + 0x19978: 0x6cb38020, 0x19979: 0x6ca6fc20, 0x1997a: 0x6d35f620, 0x1997b: 0x6ce22020, + 0x1997c: 0x6ce4f020, 0x1997d: 0x6ce4f220, 0x1997e: 0x6cc81620, 0x1997f: 0x6d176a20, + // Block 0x666, offset 0x19980 + 0x19980: 0x6c8b0420, 0x19981: 0x6c01bc20, 0x19982: 0x6c511020, 0x19983: 0x6cbf1620, + 0x19984: 0x6c85f420, 0x19985: 0x6c4a5c20, 0x19986: 0x6d3f4a20, 0x19987: 0x6cdaaa20, + 0x19988: 0x6d261020, 0x19989: 0x6d0ba220, 0x1998a: 0x6c13dc20, 0x1998b: 0x6ced2420, + 0x1998c: 0x6c72f420, 0x1998d: 0x6ce6cc20, 0x1998e: 0x6d1fd020, 0x1998f: 0x6c5bc620, + 0x19990: 0x6c659c20, 0x19991: 0x6cc89e20, 0x19992: 0x6c986420, 0x19993: 0x6c71b820, + 0x19994: 0x6d3e5620, 0x19995: 0x6c70a820, 0x19996: 0x6c013a20, 0x19997: 0x6cdc5020, + 0x19998: 0x6c7f1620, 0x19999: 0x6c5d3020, 0x1999a: 0x6cc35e20, 0x1999b: 0x6c167220, + 0x1999c: 0x6c34fa20, 0x1999d: 0x6c798020, 0x1999e: 0x6ca55020, 0x1999f: 0x6c11d220, + 0x199a0: 0x6ce35620, 0x199a1: 0x6d064c20, 0x199a2: 0x6c701020, 0x199a3: 0x6c59e420, + 0x199a4: 0x6cb7b820, 0x199a5: 0x6c6b0e20, 0x199a6: 0x6c98f220, 0x199a7: 0x6d0c2020, + 0x199a9: 0x6d354820, 0x199aa: 0x6ce9b020, + 0x199ac: 0x6c00c220, 0x199ad: 0x6cad0a20, 0x199ae: 0x6c125a20, 0x199af: 0x6ce12820, + 0x199b0: 0x6c372220, 0x199b1: 0x6c5d3c20, 0x199b2: 0x6cb63e20, 0x199b3: 0x6c1ea620, + 0x199b4: 0x6cdd9020, 0x199b5: 0x6d3d8820, 0x199b6: 0x6caa2620, 0x199b7: 0x6ce8f220, + 0x199b8: 0x6cd01a20, 0x199b9: 0x6c90f820, 0x199ba: 0x6c0c2020, 0x199bb: 0x6c844020, + 0x199bc: 0x6c977c20, 0x199bd: 0x6d02f020, 0x199be: 0x6c133c20, 0x199bf: 0x6c5a0a20, + // Block 0x667, offset 0x199c0 + 0x199c0: 0x6c9a6c20, 0x199c1: 0x6c42e620, 0x199c2: 0x6c887620, 0x199c3: 0x6c2a3e20, + 0x199c4: 0x6d2e2420, 0x199c5: 0x6d3eaa20, + 0x199c8: 0x6d375620, 0x199c9: 0x6c03d020, 0x199ca: 0x6c258a20, 0x199cb: 0x6cbfe420, + 0x199cd: 0x6c8fea20, 0x199ce: 0x6cfb0a20, 0x199cf: 0x6c3afa20, + 0x199d0: 0x6c4cac20, 0x199d1: 0x6c19b820, 0x199d2: 0x6c6fda20, 0x199d3: 0x6c35f620, + 0x199d4: 0x6c1cb420, 0x199d5: 0x6d269220, 0x199d6: 0x6c531620, 0x199d7: 0x6d119e20, + 0x199d8: 0x6d0ae220, 0x199d9: 0x6d10e620, 0x199da: 0x6ce74420, 0x199db: 0x6d2cc020, + 0x199dc: 0x6d204020, 0x199dd: 0x6d095620, 0x199de: 0x6d11aa20, 0x199df: 0x6c78a820, + 0x199e0: 0x6c591620, 0x199e1: 0x6c80cc20, 0x199e2: 0x6d26ba20, 0x199e3: 0x6c18ca20, + 0x199e6: 0x6cd0b220, + 0x199e8: 0x6ca90e20, 0x199e9: 0x6ca00a20, 0x199ea: 0x6c52ba20, 0x199eb: 0x6c205820, + 0x199ec: 0x6d27fe20, 0x199ed: 0x6d07be20, 0x199ee: 0x6c6d4420, 0x199ef: 0x6d3d9c20, + 0x199f0: 0x6d209c20, 0x199f1: 0x6cdfbc20, 0x199f2: 0x6c775420, 0x199f3: 0x6cbf6420, + 0x199f5: 0x6c1a4c20, 0x199f6: 0x6c6f8820, 0x199f7: 0x6d097620, + 0x199f8: 0x6d32fa20, 0x199f9: 0x6c1ce420, 0x199fa: 0x6cac4a20, 0x199fb: 0x6cbc6620, + 0x199fd: 0x6cc1e620, 0x199fe: 0x6c7fd620, 0x199ff: 0x6d190e20, + // Block 0x668, offset 0x19a00 + 0x19a00: 0x6cc6de20, 0x19a01: 0x6cd84e20, 0x19a02: 0x6cb89c20, 0x19a03: 0x6cd89220, + 0x19a05: 0x6c380420, 0x19a07: 0x6c9b1020, + 0x19a08: 0x6c578e20, 0x19a0b: 0x6c4d6620, + 0x19a0c: 0x6cbc4420, 0x19a0d: 0x6c1f4620, 0x19a0e: 0x6cc3d420, 0x19a0f: 0x6c334e20, + 0x19a10: 0x6c863820, 0x19a11: 0x6c03b820, 0x19a12: 0x6c6c0420, 0x19a13: 0x6d05ee20, + 0x19a14: 0x6c963620, 0x19a16: 0x6d27de20, 0x19a17: 0x6d37ae20, + 0x19a18: 0x6c568220, 0x19a19: 0x6d1ad220, 0x19a1b: 0x6d351020, + 0x19a1c: 0x6cb9fa20, 0x19a1e: 0x6c419420, 0x19a1f: 0x6c667c20, + 0x19a20: 0x6d3ae220, 0x19a21: 0x6d3ae420, 0x19a22: 0x6c7a7820, 0x19a23: 0x6ca81a20, + 0x19a24: 0x6cc8ca20, 0x19a25: 0x6d2ac220, 0x19a26: 0x6c020820, 0x19a27: 0x6d363820, + 0x19a28: 0x6c461a20, 0x19a29: 0x6d17b220, 0x19a2a: 0x6c1ab020, 0x19a2b: 0x6c5ed620, + 0x19a2c: 0x6d39a620, 0x19a2d: 0x6c81b220, 0x19a2e: 0x6cc5ee20, 0x19a2f: 0x6cc67620, + 0x19a30: 0x6d32c620, 0x19a31: 0x6ca34220, 0x19a32: 0x6c12ec20, + 0x19a35: 0x6d151e20, 0x19a36: 0x6c746820, 0x19a37: 0x6c0cee20, + 0x19a38: 0x6c1a1e20, 0x19a39: 0x6c75ce20, 0x19a3a: 0x6c312620, 0x19a3b: 0x6cefe420, + 0x19a3c: 0x6d17fa20, 0x19a3d: 0x6d306020, 0x19a3e: 0x6d0cae20, + // Block 0x669, offset 0x19a40 + 0x19a40: 0x6cca0220, 0x19a41: 0x6c950220, 0x19a42: 0x6cb2be20, 0x19a43: 0x6d2f9020, + 0x19a44: 0x6c4e2020, 0x19a45: 0x6d239a20, 0x19a46: 0x6c278220, 0x19a47: 0x6d2fca20, + 0x19a48: 0x6c3a3e20, 0x19a49: 0x6ccc6620, 0x19a4a: 0x6c8d3820, 0x19a4b: 0x6cde7a20, + 0x19a4c: 0x6cc12220, 0x19a4d: 0x6c986e20, 0x19a4e: 0x6d132c20, 0x19a4f: 0x6c05d220, + 0x19a50: 0x6c4b6e20, 0x19a51: 0x6c489e20, 0x19a52: 0x6ca43620, 0x19a53: 0x6c442420, + 0x19a55: 0x6cd28420, 0x19a56: 0x6c782820, 0x19a57: 0x6cdd9220, + 0x19a58: 0x6c225c20, 0x19a59: 0x6d394620, 0x19a5a: 0x6cdf3820, 0x19a5b: 0x6c7b3420, + 0x19a5c: 0x6cbe2420, 0x19a5d: 0x6d05d820, 0x19a5e: 0x6c322820, 0x19a5f: 0x6c131220, + 0x19a60: 0x6c58da20, 0x19a61: 0x6c234420, 0x19a62: 0x6cc9de20, 0x19a63: 0x6d336020, + 0x19a64: 0x6cb9be20, 0x19a65: 0x6c6c5420, 0x19a66: 0x6d3fb420, 0x19a67: 0x6cf00020, + 0x19a6a: 0x6cf8de20, 0x19a6b: 0x6ca36c20, + 0x19a6c: 0x6cb45420, 0x19a6d: 0x6cd9e020, 0x19a6e: 0x6c729420, 0x19a6f: 0x6d319620, + 0x19a70: 0x6cce8620, 0x19a71: 0x6ce1e820, 0x19a72: 0x6c049c20, 0x19a73: 0x6cdea020, + 0x19a74: 0x6cba7c20, 0x19a75: 0x6cf23a20, 0x19a76: 0x6cc6ae20, 0x19a77: 0x6c962820, + 0x19a78: 0x6c55ca20, 0x19a79: 0x6cda2e20, 0x19a7a: 0x6d37cc20, 0x19a7b: 0x6cb46020, + 0x19a7c: 0x6c9ef620, 0x19a7d: 0x6c6c6420, 0x19a7e: 0x6cce8a20, 0x19a7f: 0x6c9d8e20, + // Block 0x66a, offset 0x19a80 + 0x19a80: 0x6cd61c20, 0x19a81: 0x6c8d7020, 0x19a82: 0x6c82de20, 0x19a83: 0x6c67c420, + 0x19a84: 0x6c838a20, 0x19a85: 0x6d370e20, 0x19a86: 0x6c2e0020, + 0x19a88: 0x6cca2e20, 0x19a89: 0x6c473e20, 0x19a8a: 0x6c397220, 0x19a8b: 0x6c9ab220, + 0x19a8c: 0x6cdc9e20, 0x19a8d: 0x6c65f620, 0x19a8e: 0x6ce15020, 0x19a8f: 0x6d025e20, + 0x19a90: 0x6c7a6a20, 0x19a91: 0x6cf3fe20, 0x19a92: 0x6c38d220, 0x19a93: 0x6c963820, + 0x19a94: 0x6c117820, 0x19a95: 0x6c136620, 0x19a96: 0x6c8d7a20, 0x19a97: 0x6d142620, + 0x19a98: 0x6c23be20, 0x19a99: 0x6d27ce20, 0x19a9a: 0x6c9b7420, 0x19a9b: 0x6d245020, + 0x19a9c: 0x6d374220, 0x19a9d: 0x6d162020, 0x19a9e: 0x6c285620, 0x19a9f: 0x6c5e2c20, + 0x19aa0: 0x6cef5a20, 0x19aa1: 0x6ce03220, 0x19aa2: 0x6ccb7e20, 0x19aa3: 0x6d024420, + 0x19aa4: 0x6cda3620, 0x19aa5: 0x6cd97620, 0x19aa6: 0x6cb94c20, 0x19aa7: 0x6c8eda20, + 0x19aa8: 0x6d194620, 0x19aaa: 0x6c835a20, 0x19aab: 0x6c84aa20, + 0x19aac: 0x6c3af420, 0x19aad: 0x6c8b6a20, 0x19aae: 0x6c8c8820, 0x19aaf: 0x6cfd4820, + 0x19ab0: 0x6d002c20, 0x19ab1: 0x6cab6420, 0x19ab2: 0x6c9cbc20, 0x19ab3: 0x6cfb1220, + 0x19ab4: 0x6cc4f820, 0x19ab5: 0x6d3c0220, 0x19ab6: 0x6cd6be20, 0x19ab7: 0x6d0d1e20, + 0x19ab8: 0x6c0be020, 0x19ab9: 0x6c8df020, 0x19aba: 0x6c531a20, 0x19abb: 0x6cb5a620, + 0x19abc: 0x6c8a9620, 0x19abd: 0x6c04ca20, 0x19abe: 0x6c097e20, 0x19abf: 0x6c554820, + // Block 0x66b, offset 0x19ac0 + 0x19ac0: 0x6c554a20, 0x19ac2: 0x6c12f220, 0x19ac3: 0x6cae1c20, + 0x19ac4: 0x6cbf2c20, 0x19ac5: 0x6c9ffe20, 0x19ac6: 0x6c700220, 0x19ac7: 0x6c10a220, + 0x19ac8: 0x6c9a1420, 0x19ac9: 0x6cca1e20, 0x19aca: 0x6cf0a820, + 0x19acd: 0x6c841e20, 0x19ace: 0x6cc36220, + 0x19ad0: 0x6c5cfa20, 0x19ad1: 0x6cfdf220, 0x19ad3: 0x6cd3c620, + 0x19ad4: 0x6d1c9020, 0x19ad6: 0x6ca43820, 0x19ad7: 0x6c59f220, + 0x19ad8: 0x6c701a20, 0x19ad9: 0x6d0c2620, 0x19adb: 0x6cc99020, + 0x19adc: 0x6ce96220, 0x19add: 0x6d022e20, 0x19ade: 0x6d309c20, 0x19adf: 0x6c9ada20, + 0x19ae0: 0x6cf8f420, 0x19ae1: 0x6c978a20, 0x19ae3: 0x6c5a1820, + 0x19ae4: 0x6ce02420, 0x19ae5: 0x6d001420, 0x19ae6: 0x6d137220, 0x19ae7: 0x6c0a9420, + 0x19ae8: 0x6c955a20, 0x19ae9: 0x6c38d420, 0x19aea: 0x6c870620, 0x19aeb: 0x6c251220, + 0x19aec: 0x6c1fa620, 0x19aed: 0x6c2a4620, 0x19aee: 0x6c2bb620, 0x19aef: 0x6c7c1c20, + 0x19af0: 0x6c1ecc20, 0x19af1: 0x6cfb1420, 0x19af2: 0x6c165220, 0x19af3: 0x6c9cce20, + 0x19af4: 0x6cba8e20, 0x19af5: 0x6cc00820, 0x19af6: 0x6d322620, + 0x19afa: 0x6c568620, 0x19afb: 0x6c418c20, + 0x19afc: 0x6c1b9220, 0x19afd: 0x6c48f220, 0x19afe: 0x6ca27a20, 0x19aff: 0x6c0ede20, + // Block 0x66c, offset 0x19b00 + 0x19b00: 0x6c579020, 0x19b01: 0x6c44fc20, 0x19b02: 0x6d10e820, 0x19b03: 0x6c996420, + 0x19b04: 0x6cee0820, + 0x19b08: 0x6cc7a420, 0x19b09: 0x6d090820, 0x19b0a: 0x6d32b820, 0x19b0b: 0x6c9f4a20, + 0x19b0c: 0x6c67a420, 0x19b0e: 0x6d2e5a20, 0x19b0f: 0x6d423820, + 0x19b10: 0x6d26a620, 0x19b11: 0x6c8b0620, 0x19b13: 0x6d392420, + 0x19b14: 0x6c098020, 0x19b15: 0x6cc5f020, 0x19b16: 0x6d234e20, + 0x19b18: 0x6c21c020, 0x19b19: 0x6c379820, 0x19b1a: 0x6d17b420, 0x19b1b: 0x6c9cf620, + 0x19b1c: 0x6cbeca20, 0x19b1e: 0x6cee1e20, 0x19b1f: 0x6c621e20, + 0x19b20: 0x6c104020, 0x19b22: 0x6c0cae20, 0x19b23: 0x6c38a820, + 0x19b24: 0x6d26c820, 0x19b25: 0x6c83ee20, 0x19b26: 0x6c38aa20, 0x19b27: 0x6cc1a820, + 0x19b28: 0x6c3f7620, 0x19b29: 0x6c376220, 0x19b2a: 0x6c354420, 0x19b2b: 0x6d32e420, + 0x19b2c: 0x6ce47020, 0x19b2d: 0x6d239c20, 0x19b2e: 0x6c6d3020, 0x19b2f: 0x6cb70c20, + 0x19b30: 0x6c714220, 0x19b31: 0x6c7f1e20, 0x19b32: 0x6c17f020, 0x19b33: 0x6c06d020, + 0x19b34: 0x6ca9a820, 0x19b35: 0x6d186020, 0x19b36: 0x6d065420, 0x19b37: 0x6ca1e020, + 0x19b38: 0x6d0a3620, 0x19b39: 0x6c3eda20, 0x19b3b: 0x6ca8ec20, + 0x19b3c: 0x6ce64820, 0x19b3d: 0x6c082c20, 0x19b3e: 0x6d2c8a20, 0x19b3f: 0x6ceeae20, + // Block 0x66d, offset 0x19b40 + 0x19b40: 0x6c782a20, 0x19b41: 0x6d10b020, 0x19b42: 0x6caba420, 0x19b43: 0x6cff0820, + 0x19b44: 0x6c451a20, 0x19b45: 0x6ce13820, 0x19b46: 0x6c4b7620, 0x19b47: 0x6c5c3a20, + 0x19b48: 0x6cddfe20, 0x19b4a: 0x6d114620, 0x19b4b: 0x6c266820, + 0x19b4c: 0x6cb7ea20, 0x19b4d: 0x6c6cba20, 0x19b4e: 0x6c94c220, 0x19b4f: 0x6c9d9020, + 0x19b50: 0x6c9d9220, 0x19b51: 0x6c64fe20, 0x19b52: 0x6c92ec20, 0x19b53: 0x6c38c820, + 0x19b54: 0x6cab5620, 0x19b55: 0x6c9c7e20, 0x19b56: 0x6c6b6420, 0x19b57: 0x6c3f9220, + 0x19b58: 0x6c0d1a20, 0x19b59: 0x6c5a7c20, 0x19b5a: 0x6cda5c20, 0x19b5b: 0x6d115e20, + 0x19b5c: 0x6ca89620, 0x19b5d: 0x6c6c6c20, 0x19b5e: 0x6c88d620, 0x19b5f: 0x6c0faa20, + 0x19b60: 0x6c652420, 0x19b61: 0x6ce3ca20, 0x19b62: 0x6c8d8220, 0x19b63: 0x6d415220, + 0x19b64: 0x6cd20e20, 0x19b65: 0x6d1b2620, 0x19b66: 0x6c2a4820, 0x19b67: 0x6c1e0620, + 0x19b68: 0x6c10e220, 0x19b69: 0x6c9f1220, 0x19b6a: 0x6d0e1620, 0x19b6b: 0x6c805620, + 0x19b6c: 0x6c1d3420, 0x19b6d: 0x6c68b020, 0x19b6e: 0x6cd6bc20, 0x19b6f: 0x6cc2ac20, + 0x19b70: 0x6ca8c820, 0x19b71: 0x6c964c20, 0x19b73: 0x6cd21e20, + 0x19b74: 0x6c965020, 0x19b75: 0x6d3a4c20, 0x19b77: 0x6c1d6e20, + 0x19b78: 0x6c734e20, 0x19b79: 0x6c6f0c20, 0x19b7a: 0x6c379a20, 0x19b7b: 0x6d17b820, + 0x19b7c: 0x6cc8d620, 0x19b7d: 0x6c113c20, 0x19b7e: 0x6cc57a20, 0x19b7f: 0x6c3edc20, + // Block 0x66e, offset 0x19b80 + 0x19b80: 0x6c7fb820, 0x19b81: 0x6cdcaa20, 0x19b82: 0x6d20e220, 0x19b83: 0x6d1f1c20, + 0x19b84: 0x6c2d1820, 0x19b85: 0x6c8cf420, 0x19b86: 0x6d3aec20, 0x19b87: 0x6cde5220, + 0x19b88: 0x6cb29e20, 0x19b89: 0x6d2d2a20, 0x19b8a: 0x6c684c20, 0x19b8b: 0x6c20de20, + 0x19b8c: 0x6c10ac20, 0x19b8d: 0x6c7a0620, 0x19b8e: 0x6c25b620, + 0x19b90: 0x6c4e5220, 0x19b91: 0x6c4e5420, 0x19b92: 0x6ca20020, 0x19b93: 0x6c567420, + 0x19b94: 0x6c457220, 0x19b95: 0x6c2b2020, 0x19b96: 0x6c3e3c20, 0x19b97: 0x6d088020, + 0x19b98: 0x6c9c4c20, 0x19b99: 0x6c9a0420, 0x19b9a: 0x6c811e20, 0x19b9b: 0x6c481e20, + 0x19b9c: 0x6d2fc020, 0x19b9d: 0x6cde6620, 0x19b9e: 0x6d23a220, 0x19b9f: 0x6d402820, + 0x19ba0: 0x6c844820, 0x19ba1: 0x6c92d820, 0x19ba2: 0x6cf3f620, 0x19ba3: 0x6c826c20, + 0x19ba4: 0x6c615e20, 0x19ba5: 0x6c875220, 0x19ba6: 0x6c84d820, + 0x19ba8: 0x6cb30420, 0x19ba9: 0x6d101020, 0x19baa: 0x6cec2e20, 0x19bab: 0x6ceb1a20, + 0x19bac: 0x6cae6e20, 0x19bae: 0x6d2fb420, 0x19baf: 0x6c4b0220, + 0x19bb1: 0x6d061e20, 0x19bb2: 0x6ca38020, 0x19bb3: 0x6cc3e420, + 0x19bb4: 0x6ceff620, 0x19bb5: 0x6d32e620, 0x19bb6: 0x6c300e20, 0x19bb7: 0x6cf00820, + 0x19bb8: 0x6c0f6020, 0x19bba: 0x6c595820, 0x19bbb: 0x6d08c020, + 0x19bbc: 0x6d295620, 0x19bbd: 0x6c877220, 0x19bbe: 0x6d0d6020, 0x19bbf: 0x6c59ae20, + // Block 0x66f, offset 0x19bc0 + 0x19bc0: 0x6d095820, 0x19bc1: 0x6c554c20, 0x19bc2: 0x6c05f820, 0x19bc3: 0x6cc4c220, + 0x19bc4: 0x6cfeba20, 0x19bc5: 0x6cb38620, 0x19bc6: 0x6c8a9820, 0x19bc7: 0x6d388a20, + 0x19bc8: 0x6d17ba20, 0x19bc9: 0x6d06e220, 0x19bca: 0x6c960820, 0x19bcb: 0x6c77be20, + 0x19bcc: 0x6c1f5620, 0x19bce: 0x6ca35620, 0x19bcf: 0x6c4e2220, + 0x19bd0: 0x6c17a220, 0x19bd1: 0x6c929220, 0x19bd2: 0x6d2e0620, 0x19bd3: 0x6cde7c20, + 0x19bd4: 0x6c3da220, 0x19bd5: 0x6c52c820, 0x19bd6: 0x6d2ba020, 0x19bd7: 0x6cbc0620, + 0x19bd8: 0x6cdb5020, 0x19bd9: 0x6cb1fa20, 0x19bda: 0x6c49ba20, + 0x19bdc: 0x6c5cd020, 0x19bdd: 0x6c1e8020, 0x19bdf: 0x6c374420, + 0x19be0: 0x6c374620, 0x19be1: 0x6cc85a20, 0x19be2: 0x6cb6e220, 0x19be3: 0x6cd8ba20, + 0x19be4: 0x6c713620, 0x19be6: 0x6d0dbe20, 0x19be7: 0x6c058220, + 0x19be8: 0x6d131e20, 0x19be9: 0x6d3e6c20, 0x19bea: 0x6ca55220, 0x19beb: 0x6c20b220, + 0x19bec: 0x6c03c220, 0x19bed: 0x6c126c20, 0x19bee: 0x6ce42c20, 0x19bef: 0x6c4f1c20, + 0x19bf0: 0x6d425220, 0x19bf1: 0x6c03d420, 0x19bf2: 0x6d301420, 0x19bf3: 0x6cec2820, + 0x19bf4: 0x6c44c420, 0x19bf5: 0x6c098220, 0x19bf6: 0x6c37ca20, 0x19bf7: 0x6d3af820, + 0x19bf8: 0x6cf50220, 0x19bf9: 0x6cf19a20, 0x19bfa: 0x6d369820, 0x19bfb: 0x6d393c20, + 0x19bfc: 0x6c929420, 0x19bfd: 0x6cf1a020, 0x19bfe: 0x6c4bdc20, 0x19bff: 0x6cc08e20, + // Block 0x670, offset 0x19c00 + 0x19c00: 0x6c7e9420, 0x19c01: 0x6d292020, 0x19c02: 0x6cda2820, 0x19c03: 0x6c9dd420, + 0x19c04: 0x6c2c0620, 0x19c05: 0x6cb7ec20, 0x19c06: 0x6c129a20, 0x19c07: 0x6cb1bc20, + 0x19c08: 0x6c887820, 0x19c09: 0x6cd21020, 0x19c0a: 0x6c8ff620, 0x19c0b: 0x6cdad620, + 0x19c0c: 0x6cb73220, 0x19c0d: 0x6d25fa20, 0x19c0e: 0x6c3c9e20, 0x19c0f: 0x6d056820, + 0x19c10: 0x6c73f620, 0x19c11: 0x6c2c3020, 0x19c12: 0x6cb14820, 0x19c13: 0x6c494a20, + 0x19c14: 0x6ca98620, 0x19c15: 0x6cc5d220, 0x19c16: 0x6d321c20, 0x19c17: 0x6c412e20, + 0x19c18: 0x6cb08a20, 0x19c19: 0x6ce05420, 0x19c1a: 0x6c179220, 0x19c1b: 0x6c217220, + 0x19c1c: 0x6c508e20, 0x19c1d: 0x6d3b7220, 0x19c1e: 0x6ca0ec20, 0x19c1f: 0x6c0ce020, + 0x19c20: 0x6cb75e20, 0x19c21: 0x6cd34620, 0x19c22: 0x6c08ca20, 0x19c23: 0x6c740620, + 0x19c24: 0x6cd8a420, 0x19c26: 0x6c485220, 0x19c27: 0x6ca32a20, + 0x19c28: 0x6c5b4e20, 0x19c29: 0x6cf5ca20, 0x19c2a: 0x6c37c820, 0x19c2b: 0x6d04ca20, + 0x19c2c: 0x6ca1ca20, 0x19c2e: 0x6cf77220, 0x19c2f: 0x6d360220, + 0x19c30: 0x6cc8fc20, 0x19c31: 0x6c711a20, 0x19c32: 0x6c2e9420, 0x19c33: 0x6d30f420, + 0x19c34: 0x6cced820, 0x19c35: 0x6c9bd220, 0x19c36: 0x6c098420, 0x19c37: 0x6c4eb420, + 0x19c38: 0x6d210420, 0x19c39: 0x6cfcb820, 0x19c3a: 0x6cacd420, 0x19c3b: 0x6ca5a620, + 0x19c3c: 0x6c119820, 0x19c3d: 0x6c109c20, 0x19c3f: 0x6cb70020, + // Block 0x671, offset 0x19c40 + 0x19c40: 0x6c620820, 0x19c41: 0x6d3d6420, 0x19c42: 0x6c925e20, 0x19c43: 0x6c75c220, + 0x19c44: 0x6cfccc20, 0x19c45: 0x6cf62620, 0x19c46: 0x6c113220, 0x19c47: 0x6cf1e220, + 0x19c48: 0x6d346a20, 0x19c49: 0x6d3f5820, 0x19c4a: 0x6c7d6820, 0x19c4b: 0x6c231a20, + 0x19c4c: 0x6ce4f820, 0x19c4d: 0x6c1f5820, 0x19c4e: 0x6c2b3620, 0x19c4f: 0x6c218220, + 0x19c50: 0x6cbfb620, 0x19c51: 0x6d306220, 0x19c52: 0x6d2be220, 0x19c53: 0x6cc75420, + 0x19c54: 0x6c0d7c20, 0x19c55: 0x6c605c20, 0x19c56: 0x6cf65420, 0x19c57: 0x6d39b220, + 0x19c58: 0x6c746a20, 0x19c59: 0x6c440a20, 0x19c5a: 0x6c5eee20, 0x19c5b: 0x6c265620, + 0x19c5c: 0x6c187c20, 0x19c5d: 0x6cddce20, 0x19c5e: 0x6cc92820, 0x19c5f: 0x6cfdf420, + 0x19c60: 0x6c5a5c20, 0x19c61: 0x6cb65020, 0x19c62: 0x6d3b1820, 0x19c63: 0x6cdcf620, + 0x19c64: 0x6c146c20, 0x19c65: 0x6cf25a20, 0x19c66: 0x6c781a20, 0x19c67: 0x6c77c420, + 0x19c68: 0x6c47b820, 0x19c69: 0x6c410220, 0x19c6a: 0x6c396620, 0x19c6b: 0x6c234c20, + 0x19c6c: 0x6c128c20, 0x19c6d: 0x6d36bc20, 0x19c6e: 0x6c15d820, 0x19c6f: 0x6c825420, + 0x19c70: 0x6d04ee20, 0x19c71: 0x6d2d4820, 0x19c72: 0x6d308220, 0x19c73: 0x6d218a20, + 0x19c74: 0x6c4b7020, 0x19c75: 0x6c45ae20, 0x19c76: 0x6d295020, 0x19c77: 0x6c27fe20, + 0x19c78: 0x6c5e0020, 0x19c79: 0x6cd9e220, 0x19c7a: 0x6ce0ac20, 0x19c7b: 0x6c473020, + 0x19c7c: 0x6cf8e620, 0x19c7d: 0x6c978020, 0x19c7e: 0x6c346620, 0x19c7f: 0x6c02f420, + // Block 0x672, offset 0x19c80 + 0x19c80: 0x6cb0c420, 0x19c81: 0x6cf52a20, 0x19c82: 0x6c007c20, 0x19c83: 0x6c9b7620, + 0x19c84: 0x6cb0d220, 0x19c85: 0x6c9b7820, 0x19c86: 0x6d103a20, 0x19c87: 0x6d374420, + 0x19c88: 0x6c0fac20, 0x19c89: 0x6d1cc820, 0x19c8a: 0x6cef6020, 0x19c8b: 0x6cc50e20, + 0x19c8c: 0x6c7ffa20, 0x19c8d: 0x6d0c4620, 0x19c8e: 0x6c161220, 0x19c8f: 0x6cc33620, + 0x19c90: 0x6d31d820, 0x19c91: 0x6cb46a20, 0x19c93: 0x6cdf2a20, + 0x19c94: 0x6c3a9e20, 0x19c95: 0x6cd55620, 0x19c97: 0x6c298820, + 0x19c98: 0x6c25f220, 0x19c99: 0x6cdf9c20, 0x19c9a: 0x6ce49820, 0x19c9b: 0x6c1ba020, + 0x19c9c: 0x6cde9020, 0x19c9d: 0x6c642a20, 0x19c9e: 0x6cd75e20, 0x19c9f: 0x6c5a3220, + 0x19ca0: 0x6c8a6820, 0x19ca3: 0x6c185e20, + 0x19ca4: 0x6c6cf820, 0x19ca5: 0x6c360020, 0x19ca6: 0x6c464620, 0x19ca7: 0x6c3e6420, + 0x19ca8: 0x6c34f020, 0x19caa: 0x6c363e20, 0x19cab: 0x6c07f020, + 0x19cac: 0x6ce1ca20, 0x19cad: 0x6c2c6020, 0x19caf: 0x6c2c7020, + 0x19cb0: 0x6c10a620, 0x19cb1: 0x6ced3820, 0x19cb2: 0x6d2fd020, 0x19cb3: 0x6c950620, + 0x19cb4: 0x6cb62620, 0x19cb5: 0x6ca2a420, 0x19cb6: 0x6cba6c20, + 0x19cb8: 0x6d3fae20, 0x19cb9: 0x6cd9d620, 0x19cbb: 0x6d1f6220, + 0x19cbc: 0x6d38ac20, 0x19cbd: 0x6cdea620, 0x19cbf: 0x6cdb3c20, + // Block 0x673, offset 0x19cc0 + 0x19cc0: 0x6c10c220, 0x19cc1: 0x6cf7aa20, 0x19cc2: 0x6c67c620, 0x19cc3: 0x6c12ba20, + 0x19cc4: 0x6c406620, 0x19cc5: 0x6ce2b820, 0x19cc6: 0x6c185220, 0x19cc7: 0x6c407820, + 0x19cc8: 0x6c3ae020, 0x19cc9: 0x6cf48c20, 0x19cca: 0x6cf5ac20, 0x19ccb: 0x6d101620, + 0x19ccc: 0x6ca04820, 0x19ccd: 0x6cad2020, 0x19cce: 0x6c98a620, 0x19ccf: 0x6ccbba20, + 0x19cd0: 0x6c9bb420, 0x19cd1: 0x6c12a820, 0x19cd2: 0x6ce57220, 0x19cd3: 0x6c764820, + 0x19cd4: 0x6c043620, 0x19cd5: 0x6cffa620, 0x19cd6: 0x6d032620, 0x19cd7: 0x6cb76220, + 0x19cda: 0x6cceb020, 0x19cdb: 0x6c590a20, + 0x19cdc: 0x6ca96a20, 0x19cdd: 0x6cff7820, 0x19cde: 0x6c18b220, 0x19cdf: 0x6c27ce20, + 0x19ce0: 0x6c3c3820, 0x19ce1: 0x6d1ad420, 0x19ce2: 0x6c01fa20, 0x19ce3: 0x6cc4be20, + 0x19ce4: 0x6cc64420, 0x19ce5: 0x6c976020, 0x19ce6: 0x6c394c20, 0x19ce7: 0x6cc10220, + 0x19ce8: 0x6cd2ce20, 0x19ce9: 0x6c511820, 0x19cea: 0x6c0b9220, 0x19ceb: 0x6c276220, + 0x19cec: 0x6ca11420, 0x19ced: 0x6c2aca20, + 0x19cf0: 0x6c7ba020, 0x19cf2: 0x6c144220, 0x19cf3: 0x6c349620, + 0x19cf4: 0x6d1fd220, 0x19cf5: 0x6c504020, 0x19cf7: 0x6c486020, + 0x19cf8: 0x6d095c20, 0x19cf9: 0x6c833620, 0x19cfa: 0x6c6c9220, 0x19cfb: 0x6cb70220, + 0x19cfc: 0x6cc11020, 0x19cfd: 0x6cee2220, 0x19cfe: 0x6d13f620, 0x19cff: 0x6c89e620, + // Block 0x674, offset 0x19d00 + 0x19d02: 0x6d0cb020, 0x19d03: 0x6d180220, + 0x19d04: 0x6d1a7620, 0x19d05: 0x6cb60020, 0x19d06: 0x6d306420, 0x19d07: 0x6cf8a620, + 0x19d08: 0x6d180420, 0x19d09: 0x6d128620, 0x19d0a: 0x6cf3d820, 0x19d0b: 0x6d33fa20, + 0x19d0c: 0x6d366a20, 0x19d0d: 0x6c4e5a20, 0x19d0e: 0x6c21c820, 0x19d0f: 0x6c3d8420, + 0x19d10: 0x6c215220, 0x19d11: 0x6cb2b620, 0x19d12: 0x6c7afa20, 0x19d13: 0x6c1dc220, + 0x19d15: 0x6ceb8a20, 0x19d16: 0x6cbf4220, 0x19d17: 0x6c233020, + 0x19d18: 0x6c42d220, 0x19d19: 0x6c7acc20, 0x19d1a: 0x6cc12620, 0x19d1b: 0x6cc12820, + 0x19d1c: 0x6d340020, 0x19d1d: 0x6c9c0a20, 0x19d1e: 0x6c865220, 0x19d1f: 0x6d389c20, + 0x19d20: 0x6cde8420, 0x19d21: 0x6d340220, 0x19d22: 0x6c482420, 0x19d23: 0x6c899c20, + 0x19d24: 0x6c54ee20, 0x19d25: 0x6c7e8820, 0x19d26: 0x6c2d2620, 0x19d27: 0x6c22d820, + 0x19d28: 0x6d1bde20, 0x19d2b: 0x6cb62a20, + 0x19d2d: 0x6c144620, 0x19d2e: 0x6c99b020, 0x19d2f: 0x6c31b020, + 0x19d30: 0x6d19fe20, 0x19d31: 0x6c148820, 0x19d32: 0x6cc8dc20, 0x19d33: 0x6c524020, + 0x19d34: 0x6cc87820, 0x19d35: 0x6c3d9420, 0x19d36: 0x6c7f4e20, 0x19d37: 0x6d043420, + 0x19d38: 0x6c64e020, 0x19d39: 0x6d186220, 0x19d3a: 0x6c9a6820, + 0x19d3c: 0x6c987620, 0x19d3d: 0x6c627e20, 0x19d3e: 0x6cdd3a20, 0x19d3f: 0x6c4f0c20, + // Block 0x675, offset 0x19d40 + 0x19d41: 0x6c868420, 0x19d42: 0x6d3f2220, 0x19d43: 0x6d412820, + 0x19d44: 0x6d114820, 0x19d45: 0x6c43a820, 0x19d46: 0x6c844c20, 0x19d47: 0x6cb71c20, + 0x19d48: 0x6c462420, 0x19d49: 0x6c868620, 0x19d4a: 0x6c0db220, 0x19d4b: 0x6cdd3c20, + 0x19d4e: 0x6cdb3e20, 0x19d4f: 0x6c1e4c20, + 0x19d50: 0x6c650220, 0x19d51: 0x6d010020, 0x19d52: 0x6c076420, 0x19d53: 0x6d066020, + 0x19d54: 0x6c6eb620, 0x19d55: 0x6cb46220, 0x19d56: 0x6c8d7220, 0x19d57: 0x6cfdd620, + 0x19d58: 0x6d42ac20, 0x19d59: 0x6c2e4420, 0x19d5a: 0x6c216a20, 0x19d5b: 0x6cbeb620, + 0x19d5c: 0x6ca41020, 0x19d5d: 0x6d2cfe20, 0x19d5e: 0x6c940820, 0x19d5f: 0x6d157420, + 0x19d60: 0x6cceba20, 0x19d61: 0x6d21ba20, 0x19d62: 0x6c575c20, 0x19d63: 0x6c845e20, + 0x19d64: 0x6cabce20, 0x19d67: 0x6c846020, + 0x19d6a: 0x6cd6e620, + 0x19d6c: 0x6d18d620, 0x19d6d: 0x6ca95c20, 0x19d6e: 0x6cd83820, 0x19d6f: 0x6c7ab020, + 0x19d70: 0x6c407a20, 0x19d71: 0x6d142820, 0x19d72: 0x6c2ab820, 0x19d73: 0x6cc49620, + 0x19d74: 0x6c131e20, 0x19d76: 0x6ce39820, 0x19d77: 0x6cbdb420, + 0x19d78: 0x6c0c8820, 0x19d79: 0x6cdca420, 0x19d7a: 0x6cef4c20, 0x19d7b: 0x6c33bc20, + 0x19d7c: 0x6ccb7a20, 0x19d7d: 0x6c00f620, 0x19d7e: 0x6cb7f420, 0x19d7f: 0x6d420e20, + // Block 0x676, offset 0x19d80 + 0x19d80: 0x6c7b7620, 0x19d81: 0x6c3a7420, 0x19d83: 0x6d1b9620, + 0x19d85: 0x6ccaea20, 0x19d86: 0x6c314820, 0x19d87: 0x6c5c8220, + 0x19d88: 0x6d026220, 0x19d89: 0x6d2b1c20, 0x19d8a: 0x6ce03420, 0x19d8b: 0x6ce15a20, + 0x19d8c: 0x6d374620, 0x19d8d: 0x6d191620, 0x19d8e: 0x6c3f1c20, 0x19d8f: 0x6c359420, + 0x19d91: 0x6c75fc20, 0x19d92: 0x6c638e20, 0x19d93: 0x6c141220, + 0x19d94: 0x6cfbca20, 0x19d95: 0x6c981420, 0x19d97: 0x6c0aba20, + 0x19d98: 0x6c8d9220, 0x19d99: 0x6c6b7620, 0x19d9a: 0x6c7d3620, 0x19d9b: 0x6c63f620, + 0x19d9d: 0x6c19a420, 0x19d9e: 0x6c813420, 0x19d9f: 0x6d03b420, + 0x19da0: 0x6c3af620, 0x19da1: 0x6c936e20, 0x19da2: 0x6d2c9e20, 0x19da3: 0x6c51a420, + 0x19da4: 0x6c5f9420, 0x19da5: 0x6ca66220, 0x19da6: 0x6d1cd620, 0x19da7: 0x6d002e20, + 0x19da8: 0x6ce2d820, 0x19da9: 0x6c81c820, 0x19daa: 0x6d2b2820, 0x19dab: 0x6c7cba20, + 0x19dad: 0x6cb9e620, 0x19dae: 0x6c719020, 0x19daf: 0x6cb18c20, + 0x19db0: 0x6c38f220, 0x19db1: 0x6ce80020, 0x19db2: 0x6c8c4020, 0x19db3: 0x6c9cc020, + 0x19db4: 0x6d3de820, 0x19db5: 0x6d013020, 0x19db6: 0x6c56ee20, 0x19db7: 0x6c9cc220, + 0x19db8: 0x6c6a4820, 0x19db9: 0x6d28e220, 0x19dba: 0x6c23d620, 0x19dbb: 0x6c87b220, + 0x19dbc: 0x6cc4a020, 0x19dbd: 0x6d3a4a20, 0x19dbe: 0x6d1ab820, 0x19dbf: 0x6c4f4020, + // Block 0x677, offset 0x19dc0 + 0x19dc1: 0x6d198620, 0x19dc2: 0x6c948020, 0x19dc3: 0x6d274420, + 0x19dc4: 0x6cc4a420, 0x19dc5: 0x6c8df620, 0x19dc6: 0x6ca78620, 0x19dc7: 0x6d24b620, + 0x19dc8: 0x6caaa020, 0x19dca: 0x6d174020, 0x19dcb: 0x6caaa420, + 0x19dcc: 0x6d174220, 0x19dcd: 0x6cb98020, 0x19dce: 0x6cf9b620, 0x19dcf: 0x6c1edc20, + 0x19dd0: 0x6d1a6820, 0x19dd1: 0x6c9d4820, 0x19dd2: 0x6cf65820, 0x19dd3: 0x6ca35a20, + 0x19dd4: 0x6c76de20, 0x19dd5: 0x6d412020, 0x19dd6: 0x6cf9da20, 0x19dd7: 0x6d0cc620, + 0x19dd8: 0x6ce8f420, 0x19dd9: 0x6ce30020, 0x19dda: 0x6cf38820, 0x19ddb: 0x6cdda820, + 0x19ddc: 0x6d1aaa20, 0x19ddd: 0x6c1d0a20, 0x19dde: 0x6d38de20, 0x19ddf: 0x6c988620, + 0x19de0: 0x6d254820, 0x19de1: 0x6caa8020, 0x19de2: 0x6c9e7020, 0x19de3: 0x6d2a4820, + 0x19de4: 0x6ced1420, 0x19de5: 0x6c83ca20, 0x19de6: 0x6cc10420, 0x19de7: 0x6ca33a20, + 0x19de8: 0x6cd26220, 0x19de9: 0x6c098c20, 0x19dea: 0x6d3e2a20, 0x19deb: 0x6c056c20, + 0x19ded: 0x6c736c20, 0x19dee: 0x6cfde620, 0x19def: 0x6c7c7c20, + 0x19df0: 0x6cac2c20, 0x19df1: 0x6c7ba220, 0x19df2: 0x6d0a1220, 0x19df3: 0x6d2cc620, + 0x19df4: 0x6d10fc20, 0x19df5: 0x6c7d6a20, 0x19df6: 0x6c5acc20, 0x19df7: 0x6cf65a20, + 0x19df8: 0x6c357420, 0x19df9: 0x6d0fcc20, 0x19dfa: 0x6ce59020, 0x19dfb: 0x6d1f4e20, + 0x19dfc: 0x6c746c20, 0x19dfd: 0x6c83f620, 0x19dff: 0x6c842020, + // Block 0x678, offset 0x19e00 + 0x19e00: 0x6c198020, 0x19e01: 0x6c624e20, 0x19e02: 0x6c562a20, 0x19e03: 0x6d2e7020, + 0x19e04: 0x6c3f7a20, 0x19e05: 0x6c16ba20, 0x19e06: 0x6c495c20, 0x19e07: 0x6c714420, + 0x19e08: 0x6c9b3220, 0x19e09: 0x6c167820, 0x19e0a: 0x6ce0a620, 0x19e0b: 0x6ca1e220, + 0x19e0c: 0x6d039e20, 0x19e0d: 0x6c852620, 0x19e0e: 0x6d0c2a20, 0x19e0f: 0x6cd9da20, + 0x19e10: 0x6cd1ee20, 0x19e11: 0x6d186420, 0x19e12: 0x6c0e2a20, 0x19e13: 0x6c234e20, + 0x19e14: 0x6c542c20, 0x19e15: 0x6ced3a20, 0x19e16: 0x6c2c9620, 0x19e17: 0x6c5f4420, + 0x19e18: 0x6c443820, 0x19e19: 0x6c4e3420, 0x19e1a: 0x6c0f6220, 0x19e1b: 0x6d04f420, + 0x19e1c: 0x6c8ea220, 0x19e1d: 0x6c11ae20, 0x19e1e: 0x6c11b020, 0x19e1f: 0x6d18d820, + 0x19e20: 0x6d082c20, 0x19e21: 0x6d0ce020, 0x19e22: 0x6d2a5c20, 0x19e23: 0x6c4f1e20, + 0x19e24: 0x6d1e0020, 0x19e25: 0x6d3fc820, 0x19e27: 0x6c775820, + 0x19e28: 0x6d21bc20, 0x19e29: 0x6cb53820, 0x19e2a: 0x6d310620, 0x19e2b: 0x6c967e20, + 0x19e2e: 0x6cd6e820, 0x19e2f: 0x6c6d6a20, + 0x19e30: 0x6c49b020, 0x19e31: 0x6cb46c20, 0x19e32: 0x6c8c7220, + 0x19e34: 0x6ce69c20, 0x19e35: 0x6c679420, 0x19e36: 0x6c7eac20, 0x19e37: 0x6d191820, + 0x19e38: 0x6d1dce20, 0x19e39: 0x6c22ec20, 0x19e3a: 0x6d0dfe20, 0x19e3b: 0x6c6b7020, + 0x19e3c: 0x6d09c820, 0x19e3d: 0x6cf11020, 0x19e3e: 0x6cfc4c20, 0x19e3f: 0x6ca93620, + // Block 0x679, offset 0x19e40 + 0x19e40: 0x6c408c20, 0x19e41: 0x6c445c20, 0x19e43: 0x6ca19c20, + 0x19e44: 0x6d3b4620, 0x19e45: 0x6ca38a20, 0x19e46: 0x6cfc5620, 0x19e47: 0x6cf1c420, + 0x19e48: 0x6c877820, 0x19e49: 0x6c11c220, 0x19e4a: 0x6c9f1c20, 0x19e4b: 0x6c655220, + 0x19e4c: 0x6ca6e220, 0x19e4d: 0x6c14b020, 0x19e4e: 0x6cecb020, 0x19e4f: 0x6d069c20, + 0x19e50: 0x6caa8220, 0x19e51: 0x6c973020, 0x19e52: 0x6d417020, 0x19e53: 0x6c770c20, + 0x19e54: 0x6c761620, 0x19e55: 0x6c4f7020, + 0x19e58: 0x6d23f420, 0x19e59: 0x6cf11220, 0x19e5a: 0x6d39fa20, + 0x19e5d: 0x6d170a20, 0x19e5f: 0x6c2dbc20, + 0x19e60: 0x6c3e4420, 0x19e61: 0x6c08d620, 0x19e62: 0x6d3a6820, 0x19e63: 0x6d3f0c20, + 0x19e64: 0x6cd5cc20, 0x19e65: 0x6cf9ba20, 0x19e66: 0x6ca5e020, + 0x19e68: 0x6c68fe20, 0x19e69: 0x6d0a1420, 0x19e6a: 0x6c1cc620, 0x19e6b: 0x6caa2220, + 0x19e6c: 0x6cc67e20, 0x19e6d: 0x6d364220, 0x19e6e: 0x6cca6e20, + 0x19e70: 0x6cccf020, 0x19e71: 0x6d237e20, 0x19e73: 0x6c6c4e20, + 0x19e75: 0x6c929c20, 0x19e76: 0x6c4db020, 0x19e77: 0x6c0cb220, + 0x19e78: 0x6d183a20, 0x19e79: 0x6d41c020, 0x19e7a: 0x6d2e7220, 0x19e7b: 0x6d23ac20, + 0x19e7c: 0x6ced3c20, 0x19e7d: 0x6ca5fe20, 0x19e7e: 0x6c495e20, 0x19e7f: 0x6c748420, + // Block 0x67a, offset 0x19e80 + 0x19e80: 0x6c082820, 0x19e81: 0x6c11a220, 0x19e83: 0x6c351220, + 0x19e84: 0x6cb7c620, 0x19e85: 0x6d10b420, 0x19e86: 0x6c7d1820, 0x19e87: 0x6cc84820, + 0x19e88: 0x6c542e20, 0x19e89: 0x6d0a3820, 0x19e8a: 0x6d020020, + 0x19e8c: 0x6c7d1a20, 0x19e8e: 0x6d00f020, 0x19e8f: 0x6c0f6420, + 0x19e90: 0x6c78d820, 0x19e91: 0x6c24ec20, 0x19e92: 0x6d074020, 0x19e93: 0x6c042820, + 0x19e94: 0x6cab5820, 0x19e95: 0x6d400c20, 0x19e97: 0x6ce42e20, + 0x19e98: 0x6c1ef220, 0x19e99: 0x6c1b5820, 0x19e9a: 0x6ca7b420, 0x19e9b: 0x6c49ac20, + 0x19e9c: 0x6c3cbe20, 0x19e9d: 0x6d023020, 0x19e9e: 0x6c2aba20, 0x19e9f: 0x6cef4e20, + 0x19ea0: 0x6c74e220, 0x19ea1: 0x6c7d2e20, 0x19ea2: 0x6d2bb420, 0x19ea3: 0x6cc9ac20, + 0x19ea4: 0x6c34bc20, 0x19ea5: 0x6c8d8420, 0x19ea6: 0x6c9b9a20, + 0x19ea8: 0x6c4cde20, 0x19ea9: 0x6c9b9c20, 0x19eaa: 0x6c8fec20, + 0x19eac: 0x6d1d5e20, 0x19eae: 0x6c49c620, 0x19eaf: 0x6c248820, + 0x19eb0: 0x6c84e620, 0x19eb1: 0x6c320c20, 0x19eb3: 0x6c0bf220, + 0x19eb5: 0x6cf62c20, 0x19eb7: 0x6c2a6620, + 0x19eb8: 0x6c2a6820, 0x19eb9: 0x6cfcba20, 0x19eba: 0x6c880020, + 0x19ebc: 0x6ccedc20, 0x19ebd: 0x6d00b020, 0x19ebe: 0x6cd1c420, 0x19ebf: 0x6cf09e20, + // Block 0x67b, offset 0x19ec0 + 0x19ec2: 0x6c51d820, 0x19ec3: 0x6d1f5a20, + 0x19ec4: 0x6c92b220, 0x19ec5: 0x6c7f5020, 0x19ec6: 0x6d1d0e20, 0x19ec7: 0x6cd14c20, + 0x19ec8: 0x6c739220, 0x19ec9: 0x6cb7e420, 0x19eca: 0x6c65ea20, 0x19ecb: 0x6d285c20, + 0x19ecd: 0x6cb7f620, 0x19ecf: 0x6c8c7c20, + 0x19ed0: 0x6c60ea20, 0x19ed1: 0x6c970a20, 0x19ed2: 0x6c208220, 0x19ed3: 0x6ca74620, + 0x19ed4: 0x6c0d6e20, 0x19ed5: 0x6c87c020, 0x19ed6: 0x6c8dfa20, 0x19ed7: 0x6c427a20, + 0x19ed8: 0x6c1a2020, 0x19ed9: 0x6d07b020, 0x19eda: 0x6cfc1a20, 0x19edb: 0x6c558620, + 0x19edc: 0x6c088620, 0x19edd: 0x6d40d020, 0x19ede: 0x6c271a20, 0x19edf: 0x6c271c20, + 0x19ee0: 0x6c5d3e20, 0x19ee1: 0x6cc9d020, 0x19ee2: 0x6c184420, 0x19ee3: 0x6ce37c20, + 0x19ee5: 0x6cab1a20, 0x19ee6: 0x6d371420, 0x19ee7: 0x6c8ebe20, + 0x19ee8: 0x6c3aea20, 0x19ee9: 0x6c695e20, 0x19eea: 0x6c493620, 0x19eeb: 0x6cf7ba20, + 0x19eec: 0x6c8bf820, 0x19eed: 0x6d07f820, 0x19eee: 0x6cc62a20, 0x19eef: 0x6ce25a20, + 0x19ef0: 0x6cb05820, 0x19ef1: 0x6d032a20, 0x19ef2: 0x6ccd7c20, 0x19ef3: 0x6d360e20, + 0x19ef4: 0x6cec3220, 0x19ef5: 0x6ce81020, 0x19ef6: 0x6ce46620, 0x19ef7: 0x6d13e820, + 0x19ef8: 0x6d019c20, 0x19ef9: 0x6cb05c20, 0x19efa: 0x6d10ec20, 0x19efb: 0x6d10ee20, + 0x19efc: 0x6caa8620, 0x19efd: 0x6c503a20, 0x19efe: 0x6ca8e820, 0x19eff: 0x6d1b4a20, + // Block 0x67c, offset 0x19f00 + 0x19f00: 0x6c390a20, 0x19f01: 0x6ca3fa20, 0x19f02: 0x6d109c20, 0x19f03: 0x6ced7e20, + 0x19f04: 0x6d25e820, 0x19f05: 0x6cf9c820, 0x19f06: 0x6d392c20, 0x19f07: 0x6d25ea20, + 0x19f08: 0x6cd38a20, 0x19f09: 0x6c9e5a20, 0x19f0a: 0x6cf62e20, 0x19f0b: 0x6c621220, + 0x19f0c: 0x6ce22a20, 0x19f0d: 0x6c3ab020, 0x19f0e: 0x6d096020, 0x19f0f: 0x6ca5e820, + 0x19f10: 0x6c224620, 0x19f11: 0x6c9d4a20, 0x19f12: 0x6c0ba220, + 0x19f14: 0x6ca2e620, 0x19f15: 0x6d238020, 0x19f16: 0x6c366220, 0x19f17: 0x6d353a20, + 0x19f18: 0x6cc57420, 0x19f19: 0x6d070020, 0x19f1a: 0x6c94b020, 0x19f1b: 0x6c5be820, + 0x19f1c: 0x6d0a9620, 0x19f1d: 0x6ca4b820, 0x19f1e: 0x6c4eee20, 0x19f1f: 0x6c63d620, + 0x19f20: 0x6c312e20, 0x19f21: 0x6c57b420, 0x19f22: 0x6ce86c20, 0x19f23: 0x6cb26220, + 0x19f24: 0x6c244c20, 0x19f25: 0x6cf68220, 0x19f26: 0x6cd99820, 0x19f27: 0x6c9c6c20, + 0x19f28: 0x6d034420, 0x19f29: 0x6cf51a20, 0x19f2a: 0x6cbf5420, 0x19f2b: 0x6d2edc20, + 0x19f2c: 0x6ce23620, 0x19f2d: 0x6d043620, 0x19f2e: 0x6c701e20, 0x19f2f: 0x6c728220, + 0x19f30: 0x6c5d4020, 0x19f31: 0x6ce36e20, 0x19f32: 0x6c977420, 0x19f33: 0x6d0ea420, + 0x19f34: 0x6c5f2020, 0x19f35: 0x6cd47a20, 0x19f36: 0x6c82d620, 0x19f37: 0x6ced4420, + 0x19f38: 0x6c183820, 0x19f39: 0x6c120a20, 0x19f3a: 0x6c6c0620, 0x19f3b: 0x6d205820, + 0x19f3c: 0x6c5b6620, 0x19f3d: 0x6d2c9420, 0x19f3e: 0x6cdb4820, 0x19f3f: 0x6c444220, + // Block 0x67d, offset 0x19f40 + 0x19f40: 0x6ca51a20, 0x19f41: 0x6cf8f820, 0x19f43: 0x6c331a20, + 0x19f44: 0x6c1b6420, 0x19f45: 0x6cef5020, 0x19f46: 0x6d30ae20, 0x19f47: 0x6c4bf420, + 0x19f48: 0x6c175620, 0x19f49: 0x6c1ae020, 0x19f4a: 0x6d2a2820, 0x19f4b: 0x6c5c8420, + 0x19f4c: 0x6c944820, 0x19f4d: 0x6c8a4620, 0x19f4e: 0x6c818a20, 0x19f4f: 0x6cead820, + 0x19f50: 0x6c5b0420, 0x19f51: 0x6cf54620, 0x19f52: 0x6c02fa20, 0x19f53: 0x6ccf8620, + 0x19f54: 0x6cdc0220, 0x19f55: 0x6c974c20, 0x19f56: 0x6ce0b620, 0x19f57: 0x6d035a20, + 0x19f58: 0x6c6e4020, 0x19f59: 0x6c017620, 0x19f5a: 0x6cdee220, 0x19f5b: 0x6c156420, + 0x19f5c: 0x6cf11a20, 0x19f5d: 0x6ce98420, 0x19f5e: 0x6c62dc20, 0x19f5f: 0x6c18fa20, + 0x19f60: 0x6c185820, 0x19f61: 0x6d247c20, 0x19f62: 0x6cfc6020, 0x19f63: 0x6d02d020, + 0x19f67: 0x6ca51c20, + 0x19f69: 0x6d0f1020, 0x19f6a: 0x6cc01e20, 0x19f6b: 0x6c675820, + 0x19f6c: 0x6cd95c20, 0x19f6d: 0x6c75c420, 0x19f6e: 0x6c89fc20, 0x19f6f: 0x6c714e20, + 0x19f71: 0x6c97d220, 0x19f72: 0x6c8b7220, + 0x19f74: 0x6c1f3820, 0x19f75: 0x6c1bae20, 0x19f76: 0x6cfdcc20, 0x19f77: 0x6cbd3a20, + 0x19f78: 0x6c9a6220, 0x19f79: 0x6cd5fa20, 0x19f7a: 0x6c149020, 0x19f7b: 0x6c1bc420, + 0x19f7c: 0x6c474620, 0x19f7d: 0x6d21a820, 0x19f7e: 0x6d1a0420, + // Block 0x67e, offset 0x19f80 + 0x19f80: 0x6c8eac20, 0x19f81: 0x6c818020, 0x19f82: 0x6cd61e20, 0x19f83: 0x6d30be20, + 0x19f84: 0x6cd6c420, 0x19f85: 0x6c5aac20, + 0x19f88: 0x6c364620, 0x19f8a: 0x6ccc7020, 0x19f8b: 0x6d402e20, + 0x19f8c: 0x6c74a620, 0x19f8d: 0x6c75ec20, 0x19f8e: 0x6ce93820, 0x19f8f: 0x6c90ca20, + 0x19f90: 0x6cef5c20, 0x19f91: 0x6c1cf420, 0x19f92: 0x6d3b4820, 0x19f93: 0x6c8b7420, + 0x19f95: 0x6d30cc20, 0x19f96: 0x6d2f8c20, + 0x19f98: 0x6d178020, 0x19f99: 0x6c1e5c20, 0x19f9a: 0x6ca5ea20, 0x19f9b: 0x6c0e7820, + 0x19f9c: 0x6cdb8620, 0x19f9d: 0x6d160620, 0x19f9e: 0x6c506020, 0x19f9f: 0x6d0bc820, + 0x19fa0: 0x6c58ac20, 0x19fa1: 0x6c980a20, 0x19fa2: 0x6c980c20, 0x19fa3: 0x6cc1f220, + 0x19fa4: 0x6c81c420, 0x19fa5: 0x6c4ffe20, 0x19fa6: 0x6d37d620, 0x19fa7: 0x6c9f4e20, + 0x19fa8: 0x6cfb5620, 0x19fa9: 0x6d324420, 0x19faa: 0x6cd55e20, 0x19fab: 0x6d423e20, + 0x19fac: 0x6d3afc20, 0x19fad: 0x6c46aa20, 0x19fae: 0x6d089820, 0x19faf: 0x6d17c620, + 0x19fb0: 0x6d366e20, 0x19fb1: 0x6d00c620, 0x19fb2: 0x6c6d1e20, 0x19fb3: 0x6c11a420, + 0x19fb5: 0x6c10ae20, 0x19fb6: 0x6c896a20, 0x19fb7: 0x6d341020, + 0x19fb8: 0x6c626c20, 0x19fb9: 0x6ced4620, 0x19fba: 0x6c49a420, 0x19fbb: 0x6c70bc20, + 0x19fbc: 0x6c6ea220, 0x19fbd: 0x6c00c420, 0x19fbe: 0x6c404220, 0x19fbf: 0x6c4b7220, + // Block 0x67f, offset 0x19fc0 + 0x19fc0: 0x6c548020, 0x19fc1: 0x6d0ec620, 0x19fc2: 0x6cc87e20, 0x19fc3: 0x6d36ee20, + 0x19fc4: 0x6c0c9420, 0x19fc5: 0x6d157620, 0x19fc6: 0x6cdd9e20, 0x19fc7: 0x6c2efa20, + 0x19fc8: 0x6c4b9620, 0x19fc9: 0x6cd18020, 0x19fca: 0x6d0ab820, 0x19fcb: 0x6c194620, + 0x19fcc: 0x6ccf2020, 0x19fcd: 0x6cbe8a20, + 0x19fd0: 0x6c218a20, 0x19fd1: 0x6c533820, 0x19fd2: 0x6c308220, 0x19fd3: 0x6c198220, + 0x19fd4: 0x6ceff820, 0x19fd5: 0x6cc7ea20, 0x19fd6: 0x6cd55420, 0x19fd7: 0x6c10f220, + 0x19fd8: 0x6c600e20, 0x19fd9: 0x6d28b620, 0x19fda: 0x6cb5d420, 0x19fdb: 0x6d0c0220, + 0x19fdc: 0x6c3fe820, 0x19fdd: 0x6d235820, 0x19fde: 0x6c3e9020, 0x19fdf: 0x6cb39220, + 0x19fe0: 0x6d33e620, 0x19fe1: 0x6ce06220, 0x19fe2: 0x6d424020, 0x19fe3: 0x6c17ec20, + 0x19fe4: 0x6cc19a20, 0x19fe5: 0x6d204e20, 0x19fe6: 0x6c514a20, 0x19fe7: 0x6c547420, + 0x19fe8: 0x6c4b0e20, 0x19fe9: 0x6c366620, 0x19fea: 0x6c67ea20, 0x19feb: 0x6d27f620, + 0x19fec: 0x6ce83020, 0x19fed: 0x6c259820, 0x19fee: 0x6ce87020, 0x19fef: 0x6c402a20, + 0x19ff0: 0x6d424c20, 0x19ff1: 0x6c558820, 0x19ff3: 0x6c0f4a20, + 0x19ff4: 0x6d2f6e20, 0x19ff5: 0x6c754a20, 0x19ff6: 0x6ce0d020, 0x19ff7: 0x6c74aa20, + 0x19ff8: 0x6c404620, 0x19ff9: 0x6c5a0220, 0x19ffa: 0x6c211820, 0x19ffb: 0x6d1e5e20, + 0x19ffc: 0x6c20f020, 0x19ffd: 0x6cdda020, 0x19ffe: 0x6c1b5c20, 0x19fff: 0x6cb92a20, + // Block 0x680, offset 0x1a000 + 0x1a000: 0x6c10fc20, 0x1a001: 0x6cff9c20, 0x1a002: 0x6c979220, 0x1a003: 0x6c117c20, + 0x1a004: 0x6cb7f820, 0x1a005: 0x6c66f620, 0x1a006: 0x6c0a9a20, 0x1a007: 0x6c5f8420, + 0x1a008: 0x6d34b820, 0x1a009: 0x6d3a3620, 0x1a00a: 0x6cc1f420, 0x1a00b: 0x6d2e3420, + 0x1a00c: 0x6c60fa20, 0x1a00d: 0x6c0b2420, 0x1a00f: 0x6c878020, + 0x1a010: 0x6c879420, 0x1a011: 0x6d272a20, 0x1a012: 0x6cc34020, 0x1a013: 0x6c195a20, + 0x1a014: 0x6c3fcc20, 0x1a015: 0x6c144020, 0x1a016: 0x6ce19c20, 0x1a017: 0x6cd37420, + 0x1a018: 0x6c4f9620, 0x1a019: 0x6cbcbe20, 0x1a01a: 0x6cb5d620, 0x1a01b: 0x6c0efc20, + 0x1a01c: 0x6ca33e20, 0x1a01d: 0x6ce82a20, 0x1a01e: 0x6c1e7a20, 0x1a01f: 0x6c243c20, + 0x1a020: 0x6d26c020, 0x1a021: 0x6d33e820, 0x1a022: 0x6c18cc20, 0x1a023: 0x6c1f4a20, + 0x1a024: 0x6c09b420, 0x1a025: 0x6c9b1c20, 0x1a026: 0x6c038020, 0x1a027: 0x6ce4a220, + 0x1a028: 0x6c9f5a20, 0x1a029: 0x6c8aba20, 0x1a02a: 0x6c3ccc20, 0x1a02b: 0x6c197420, + 0x1a02c: 0x6cc0b820, 0x1a02d: 0x6ce58820, 0x1a02e: 0x6c3eac20, 0x1a02f: 0x6c7e0820, + 0x1a030: 0x6c65b820, + 0x1a034: 0x6d325620, 0x1a035: 0x6cc08a20, 0x1a036: 0x6d42a820, 0x1a037: 0x6c1c4c20, + 0x1a038: 0x6c7c9420, 0x1a039: 0x6c8b2420, 0x1a03a: 0x6c074a20, 0x1a03b: 0x6c326e20, + 0x1a03c: 0x6cf46c20, 0x1a03e: 0x6d3d9220, 0x1a03f: 0x6c92ba20, + // Block 0x681, offset 0x1a040 + 0x1a040: 0x6ce0d220, 0x1a042: 0x6c1eaa20, 0x1a043: 0x6c89a020, + 0x1a044: 0x6ce51820, 0x1a045: 0x6c7dbe20, 0x1a046: 0x6c16c420, 0x1a047: 0x6c74ac20, + 0x1a048: 0x6ce8ec20, 0x1a049: 0x6c594e20, 0x1a04a: 0x6c3aca20, 0x1a04b: 0x6c0a3c20, + 0x1a04d: 0x6cf97c20, 0x1a04e: 0x6cf31820, 0x1a04f: 0x6c628a20, + 0x1a050: 0x6cc27a20, 0x1a051: 0x6c7cdc20, 0x1a052: 0x6c55c220, 0x1a053: 0x6cbfca20, + 0x1a054: 0x6cdc7c20, 0x1a055: 0x6c10fa20, 0x1a057: 0x6cc0bc20, + 0x1a058: 0x6cb0c820, 0x1a059: 0x6cad1020, 0x1a05a: 0x6cec4020, 0x1a05b: 0x6d115620, + 0x1a05c: 0x6cc6c220, 0x1a05d: 0x6d09b620, 0x1a05e: 0x6c246c20, 0x1a05f: 0x6c2efc20, + 0x1a060: 0x6c1c8a20, 0x1a061: 0x6c25f620, 0x1a062: 0x6c9c1220, 0x1a063: 0x6d086420, + 0x1a064: 0x6c34be20, 0x1a065: 0x6c0d0420, 0x1a066: 0x6d310a20, 0x1a067: 0x6c1ec620, + 0x1a068: 0x6c164220, 0x1a069: 0x6c4b9e20, 0x1a06a: 0x6c32e620, 0x1a06b: 0x6d409420, + 0x1a06c: 0x6c2afe20, 0x1a06d: 0x6c7f3820, 0x1a06e: 0x6ce2da20, 0x1a06f: 0x6d272c20, + 0x1a070: 0x6cc34220, 0x1a071: 0x6d3a5020, 0x1a072: 0x6c8d1020, 0x1a073: 0x6c186c20, + 0x1a074: 0x6d31e020, 0x1a075: 0x6c400220, 0x1a076: 0x6ccf4e20, 0x1a077: 0x6ce5c620, + 0x1a078: 0x6c7ac820, 0x1a079: 0x6c004420, 0x1a07b: 0x6cbf5620, + 0x1a07c: 0x6cd61220, 0x1a07d: 0x6c4d3420, 0x1a07e: 0x6ccd5e20, 0x1a07f: 0x6cec7620, + // Block 0x682, offset 0x1a080 + 0x1a080: 0x6d2e3620, 0x1a081: 0x6c904a20, 0x1a082: 0x6c6f6220, 0x1a083: 0x6c85b820, + 0x1a085: 0x6c210220, 0x1a086: 0x6cc66c20, 0x1a087: 0x6d26ac20, + 0x1a088: 0x6c743a20, 0x1a089: 0x6c776c20, 0x1a08a: 0x6c390c20, 0x1a08b: 0x6cb5da20, + 0x1a08c: 0x6c534220, 0x1a08d: 0x6c3e7220, 0x1a08e: 0x6c915220, 0x1a08f: 0x6c535820, + 0x1a090: 0x6ceb2a20, 0x1a091: 0x6c9f5c20, 0x1a092: 0x6ce4a420, 0x1a093: 0x6c737c20, + 0x1a094: 0x6cb70620, 0x1a095: 0x6d332620, 0x1a096: 0x6cbece20, 0x1a097: 0x6c45f220, + 0x1a098: 0x6ce4b620, 0x1a099: 0x6c80dc20, 0x1a09a: 0x6c99a620, 0x1a09b: 0x6d1b6a20, + 0x1a09c: 0x6c92c020, 0x1a09d: 0x6d250e20, 0x1a09e: 0x6c715420, 0x1a09f: 0x6cb0b820, + 0x1a0a1: 0x6d00f420, 0x1a0a2: 0x6c0bbe20, 0x1a0a3: 0x6c5cd820, + 0x1a0a4: 0x6d39cc20, 0x1a0a5: 0x6cc6c820, 0x1a0a6: 0x6cca8e20, 0x1a0a7: 0x6cf38420, + 0x1a0a8: 0x6c144e20, 0x1a0a9: 0x6c795820, 0x1a0aa: 0x6ccdc420, 0x1a0ab: 0x6caede20, + 0x1a0ac: 0x6c980e20, 0x1a0ad: 0x6d050620, 0x1a0af: 0x6c237020, + 0x1a0b0: 0x6c796020, 0x1a0b1: 0x6d3bb220, 0x1a0b2: 0x6c154620, 0x1a0b3: 0x6cd84220, + 0x1a0b4: 0x6c1cf620, 0x1a0b5: 0x6cdcae20, 0x1a0b6: 0x6c076e20, 0x1a0b7: 0x6c769e20, + 0x1a0b9: 0x6d376020, 0x1a0ba: 0x6cf12620, 0x1a0bb: 0x6c9f8420, + 0x1a0bc: 0x6c8db220, 0x1a0bd: 0x6d414220, 0x1a0be: 0x6ca8d420, 0x1a0bf: 0x6c8dfc20, + // Block 0x683, offset 0x1a0c0 + 0x1a0c0: 0x6cb77420, 0x1a0c1: 0x6d26b020, 0x1a0c3: 0x6d186820, + 0x1a0c4: 0x6cf82220, 0x1a0c5: 0x6c18d820, 0x1a0c7: 0x6cc71e20, + 0x1a0c8: 0x6c18f820, 0x1a0c9: 0x6ca9da20, 0x1a0ca: 0x6d1ef220, 0x1a0cb: 0x6c618c20, + 0x1a0cc: 0x6c0ebe20, 0x1a0cd: 0x6c39ca20, + 0x1a0d0: 0x6c242220, 0x1a0d1: 0x6c2be820, 0x1a0d2: 0x6c684020, 0x1a0d3: 0x6d20fc20, + 0x1a0d4: 0x6c50fe20, 0x1a0d5: 0x6d06b220, 0x1a0d6: 0x6d22f820, 0x1a0d7: 0x6cc0f620, + 0x1a0d9: 0x6c044420, 0x1a0da: 0x6c44cc20, 0x1a0db: 0x6c6f0e20, + 0x1a0dd: 0x6d0bb820, 0x1a0de: 0x6cd5de20, 0x1a0df: 0x6d1f3e20, + 0x1a0e0: 0x6cd98e20, 0x1a0e1: 0x6d130820, 0x1a0e2: 0x6c125820, 0x1a0e3: 0x6d112a20, + 0x1a0e4: 0x6cd5fc20, 0x1a0e5: 0x6d0cba20, 0x1a0e6: 0x6cd67220, 0x1a0e7: 0x6c8aa220, + 0x1a0e8: 0x6c235020, 0x1a0e9: 0x6d23d420, 0x1a0ea: 0x6c0f6620, 0x1a0eb: 0x6cdbfe20, + 0x1a0ed: 0x6d0eca20, 0x1a0ee: 0x6c834820, 0x1a0ef: 0x6c8bf420, + 0x1a0f0: 0x6ce30220, 0x1a0f1: 0x6c31de20, 0x1a0f2: 0x6d272e20, 0x1a0f3: 0x6c611620, + 0x1a0f5: 0x6d278620, + 0x1a0f8: 0x6c706220, 0x1a0f9: 0x6c71a820, 0x1a0fa: 0x6c1e5820, 0x1a0fb: 0x6c18ac20, + 0x1a0fc: 0x6c457820, 0x1a0fd: 0x6cfe4220, 0x1a0fe: 0x6cfbee20, 0x1a0ff: 0x6c011c20, + // Block 0x684, offset 0x1a100 + 0x1a100: 0x6c4ae020, 0x1a101: 0x6d223220, 0x1a102: 0x6c82bc20, + 0x1a104: 0x6ce89c20, 0x1a105: 0x6c18b820, 0x1a106: 0x6d03e020, 0x1a107: 0x6cc03e20, + 0x1a108: 0x6c4f9a20, 0x1a10a: 0x6c292c20, 0x1a10b: 0x6c112e20, + 0x1a10c: 0x6c2bf420, 0x1a10d: 0x6d0d7020, 0x1a10e: 0x6d3e3020, + 0x1a110: 0x6d1bc020, 0x1a111: 0x6c14fa20, 0x1a113: 0x6c840020, + 0x1a114: 0x6cdd7e20, 0x1a115: 0x6c969c20, 0x1a116: 0x6c96a620, + 0x1a118: 0x6ce11e20, 0x1a119: 0x6cade620, 0x1a11a: 0x6c90ae20, 0x1a11b: 0x6cb51820, + 0x1a11c: 0x6c25ec20, 0x1a11d: 0x6ce8ee20, 0x1a11e: 0x6c369a20, 0x1a11f: 0x6c11aa20, + 0x1a120: 0x6c6b2c20, 0x1a121: 0x6d156420, 0x1a122: 0x6c60d020, 0x1a123: 0x6c294220, + 0x1a124: 0x6c752220, 0x1a125: 0x6c08cc20, 0x1a126: 0x6c832620, 0x1a127: 0x6d174a20, + 0x1a128: 0x6c214020, 0x1a129: 0x6c214620, 0x1a12a: 0x6cb38820, 0x1a12b: 0x6c83cc20, + 0x1a12c: 0x6d291420, 0x1a12d: 0x6cdf7020, 0x1a12e: 0x6cb39420, 0x1a12f: 0x6c242620, + 0x1a130: 0x6c725020, 0x1a131: 0x6d070620, 0x1a132: 0x6c395820, + 0x1a134: 0x6d070820, 0x1a135: 0x6c37d420, 0x1a136: 0x6c5d7e20, 0x1a137: 0x6d39b820, + 0x1a138: 0x6cc4c820, 0x1a139: 0x6c381c20, 0x1a13a: 0x6c72fc20, 0x1a13b: 0x6c4db620, + 0x1a13c: 0x6c896e20, 0x1a13d: 0x6d341220, 0x1a13e: 0x6c9d8220, 0x1a13f: 0x6d209a20, + // Block 0x685, offset 0x1a140 + 0x1a141: 0x6c133a20, 0x1a142: 0x6c9a2c20, 0x1a143: 0x6d1a0620, + 0x1a144: 0x6c9e4220, 0x1a145: 0x6ce8f620, 0x1a146: 0x6c7c9e20, + 0x1a149: 0x6c9d9a20, 0x1a14a: 0x6cc6ca20, 0x1a14b: 0x6d241c20, + 0x1a14c: 0x6cbae620, 0x1a14d: 0x6c9c8c20, 0x1a14e: 0x6c718020, 0x1a14f: 0x6cb07e20, + 0x1a150: 0x6c6cc620, 0x1a151: 0x6cee5e20, 0x1a152: 0x6c62c020, 0x1a153: 0x6c9baa20, + 0x1a154: 0x6c672020, 0x1a155: 0x6d098020, 0x1a156: 0x6c068220, 0x1a157: 0x6c420220, + 0x1a158: 0x6c161e20, 0x1a159: 0x6c87cc20, 0x1a15a: 0x6c851620, 0x1a15b: 0x6cc04020, + 0x1a15c: 0x6c33ee20, 0x1a15d: 0x6d1d3e20, 0x1a15e: 0x6d27ea20, 0x1a15f: 0x6c18ce20, + 0x1a160: 0x6d353220, 0x1a161: 0x6cc4ca20, 0x1a163: 0x6c94b220, + 0x1a164: 0x6c763a20, 0x1a165: 0x6c4b1420, 0x1a166: 0x6d26d620, 0x1a167: 0x6c5c0820, + 0x1a168: 0x6cb0b220, 0x1a169: 0x6c13f820, 0x1a16a: 0x6c34a820, 0x1a16b: 0x6c152220, + 0x1a16c: 0x6ccc1020, 0x1a16d: 0x6cd3c820, 0x1a16e: 0x6ccf7620, 0x1a16f: 0x6d03fa20, + 0x1a170: 0x6d1c9420, 0x1a171: 0x6cd3ca20, 0x1a172: 0x6c1c6420, 0x1a173: 0x6d134820, + 0x1a174: 0x6c4e3620, 0x1a175: 0x6c3ad420, 0x1a176: 0x6d134a20, 0x1a177: 0x6d0de220, + 0x1a178: 0x6d416220, 0x1a179: 0x6cd9ee20, 0x1a17a: 0x6c6c6620, 0x1a17b: 0x6c351a20, + 0x1a17c: 0x6cfd2220, 0x1a17d: 0x6c492e20, 0x1a17e: 0x6ce1f820, 0x1a17f: 0x6cbcfa20, + // Block 0x686, offset 0x1a180 + 0x1a180: 0x6c15f420, 0x1a181: 0x6c4e4420, 0x1a182: 0x6c9c1420, 0x1a183: 0x6d26fc20, + 0x1a184: 0x6c247020, 0x1a185: 0x6cba8420, 0x1a186: 0x6c6cc420, 0x1a187: 0x6ccdd020, + 0x1a188: 0x6ca25820, 0x1a189: 0x6d251e20, 0x1a18b: 0x6cae8a20, + 0x1a18c: 0x6d336e20, 0x1a18d: 0x6d374a20, 0x1a18e: 0x6c216c20, 0x1a18f: 0x6d22aa20, + 0x1a190: 0x6ca1f820, 0x1a191: 0x6cedae20, 0x1a192: 0x6c681020, 0x1a193: 0x6cb54c20, + 0x1a194: 0x6cdb5e20, 0x1a195: 0x6cb1e220, 0x1a196: 0x6ce4d020, 0x1a197: 0x6c7b7820, + 0x1a198: 0x6c247a20, 0x1a199: 0x6cdcb820, 0x1a19b: 0x6c6a4220, + 0x1a19c: 0x6c671420, 0x1a19d: 0x6c028820, 0x1a19e: 0x6c696e20, 0x1a19f: 0x6d138e20, + 0x1a1a1: 0x6d139020, 0x1a1a2: 0x6c8ff020, 0x1a1a3: 0x6d2a3620, + 0x1a1a4: 0x6c05de20, 0x1a1a5: 0x6c889a20, 0x1a1a7: 0x6c58c620, + 0x1a1a8: 0x6c942620, 0x1a1a9: 0x6cef7820, 0x1a1aa: 0x6cfc5820, 0x1a1ab: 0x6ce60a20, + 0x1a1ac: 0x6c0fc820, 0x1a1ad: 0x6d337620, 0x1a1ae: 0x6d3a3e20, 0x1a1af: 0x6c06c420, + 0x1a1b0: 0x6c9bba20, 0x1a1b1: 0x6d015220, 0x1a1b2: 0x6cab6820, 0x1a1b3: 0x6d1ed820, + 0x1a1b5: 0x6cffc820, 0x1a1b6: 0x6c87aa20, 0x1a1b7: 0x6d2c6e20, + 0x1a1b8: 0x6c9cd020, 0x1a1ba: 0x6d128420, + 0x1a1bd: 0x6cb31620, 0x1a1be: 0x6d014220, + // Block 0x687, offset 0x1a1c0 + 0x1a1c2: 0x6ccdd220, 0x1a1c3: 0x6d3d1420, + 0x1a1c5: 0x6ccddc20, 0x1a1c6: 0x6c754020, 0x1a1c7: 0x6c61fc20, + 0x1a1c8: 0x6c6a2620, 0x1a1ca: 0x6ca7a420, 0x1a1cb: 0x6c028420, + 0x1a1cc: 0x6c1f3a20, 0x1a1cd: 0x6cf4e420, 0x1a1ce: 0x6c495420, 0x1a1cf: 0x6d01b820, + 0x1a1d0: 0x6ce6d020, 0x1a1d1: 0x6d096220, 0x1a1d2: 0x6c297220, 0x1a1d3: 0x6d2d8620, + 0x1a1d4: 0x6ce06620, 0x1a1d5: 0x6cae7c20, 0x1a1d6: 0x6d00d420, 0x1a1d7: 0x6d072020, + 0x1a1d8: 0x6cfcf220, 0x1a1d9: 0x6cd8d820, 0x1a1da: 0x6c7aee20, 0x1a1db: 0x6d335a20, + 0x1a1dc: 0x6cf3e620, 0x1a1dd: 0x6c5d5c20, 0x1a1de: 0x6cc90620, 0x1a1df: 0x6cf1ee20, + 0x1a1e0: 0x6c317a20, 0x1a1e1: 0x6c58a020, 0x1a1e2: 0x6c7e1420, 0x1a1e3: 0x6c405a20, + 0x1a1e4: 0x6c1fd020, 0x1a1e5: 0x6cfba420, 0x1a1e6: 0x6cbdae20, 0x1a1e7: 0x6cbc8820, + 0x1a1e8: 0x6c7fba20, 0x1a1ea: 0x6d0bca20, 0x1a1eb: 0x6d1c0220, + 0x1a1ec: 0x6cc40820, 0x1a1ed: 0x6c4f5620, 0x1a1ee: 0x6c218c20, 0x1a1ef: 0x6d371e20, + 0x1a1f1: 0x6cf05620, 0x1a1f2: 0x6d0d0620, 0x1a1f3: 0x6cfe6a20, + 0x1a1f4: 0x6d194c20, 0x1a1f5: 0x6ca66a20, 0x1a1f6: 0x6d335c20, 0x1a1f7: 0x6c1fca20, + 0x1a1f9: 0x6cd23020, 0x1a1fa: 0x6c2f4a20, 0x1a1fb: 0x6d3ee020, + 0x1a1fc: 0x6c73e820, 0x1a1fd: 0x6d067620, 0x1a1fe: 0x6d255a20, + // Block 0x688, offset 0x1a200 + 0x1a201: 0x6d063020, 0x1a202: 0x6c2a0220, 0x1a203: 0x6ce48620, + 0x1a204: 0x6c448020, 0x1a205: 0x6d14b420, 0x1a206: 0x6c532420, 0x1a207: 0x6d13dc20, + 0x1a209: 0x6c851220, 0x1a20a: 0x6c7a3820, 0x1a20b: 0x6cfc0820, + 0x1a20c: 0x6cdbbe20, 0x1a20d: 0x6cf87620, 0x1a20e: 0x6d088620, + 0x1a211: 0x6c2b2a20, 0x1a212: 0x6c7f0420, 0x1a213: 0x6d387e20, + 0x1a214: 0x6ca76420, 0x1a215: 0x6c19f820, 0x1a216: 0x6c668620, 0x1a217: 0x6c09ba20, + 0x1a218: 0x6d3bc820, 0x1a219: 0x6c8d1620, 0x1a21a: 0x6c504e20, 0x1a21b: 0x6c058020, + 0x1a21c: 0x6ce10a20, 0x1a21d: 0x6c1ac220, 0x1a21e: 0x6c96c820, 0x1a21f: 0x6cfce420, + 0x1a220: 0x6cd69420, 0x1a221: 0x6d1da020, 0x1a222: 0x6cc12c20, + 0x1a224: 0x6cb44c20, 0x1a225: 0x6c5c2020, 0x1a226: 0x6cef3620, 0x1a227: 0x6d161620, + 0x1a228: 0x6d134c20, 0x1a22a: 0x6c184820, 0x1a22b: 0x6c4ff820, + 0x1a22c: 0x6c0d5a20, 0x1a22e: 0x6cfd3620, 0x1a22f: 0x6c155e20, + 0x1a230: 0x6c5d4e20, 0x1a232: 0x6c4ebc20, 0x1a233: 0x6c224220, + 0x1a234: 0x6d33ec20, 0x1a235: 0x6cb5f220, 0x1a236: 0x6c7c7e20, 0x1a237: 0x6cc75620, + 0x1a239: 0x6d1bca20, 0x1a23a: 0x6d047e20, + 0x1a23c: 0x6c55a020, 0x1a23d: 0x6c250620, 0x1a23f: 0x6cc3fc20, + // Block 0x689, offset 0x1a240 + 0x1a240: 0x6c2b9220, 0x1a241: 0x6cf53020, 0x1a242: 0x6cbfd020, + 0x1a244: 0x6d0eee20, 0x1a245: 0x6c8a5020, 0x1a246: 0x6c08a620, + 0x1a248: 0x6c0d7220, 0x1a24a: 0x6d252c20, 0x1a24b: 0x6caaa620, + 0x1a24c: 0x6c05c620, 0x1a24d: 0x6d1cf220, 0x1a24e: 0x6c536c20, 0x1a24f: 0x6c225820, + 0x1a250: 0x6cb87220, 0x1a251: 0x6ce35a20, 0x1a252: 0x6d23b220, 0x1a253: 0x6c824c20, + 0x1a254: 0x6c05d020, 0x1a256: 0x6c625620, 0x1a257: 0x6c3ee820, + 0x1a258: 0x6cfd0420, 0x1a259: 0x6c133820, 0x1a25a: 0x6c550620, 0x1a25b: 0x6ccb6620, + 0x1a25c: 0x6c080a20, 0x1a25d: 0x6cbe5620, 0x1a25e: 0x6d22a020, 0x1a25f: 0x6cebf620, + 0x1a260: 0x6c007a20, 0x1a261: 0x6c4e3c20, 0x1a262: 0x6c28d020, 0x1a263: 0x6c444620, + 0x1a264: 0x6c2b9c20, 0x1a265: 0x6c5e2020, 0x1a266: 0x6cace420, + 0x1a268: 0x6d3c6a20, 0x1a269: 0x6c8d7c20, 0x1a26a: 0x6c970820, 0x1a26b: 0x6c974820, + 0x1a26c: 0x6c888c20, 0x1a26d: 0x6cff4220, 0x1a26e: 0x6d093220, 0x1a26f: 0x6d327820, + 0x1a270: 0x6cb3b820, 0x1a271: 0x6c408e20, 0x1a272: 0x6caa0e20, 0x1a273: 0x6cf93220, + 0x1a274: 0x6c338e20, 0x1a275: 0x6c28f020, 0x1a276: 0x6d280c20, 0x1a277: 0x6cfd5220, + 0x1a278: 0x6d1b3020, 0x1a279: 0x6cd52220, 0x1a27a: 0x6c339420, 0x1a27b: 0x6c086820, + 0x1a27c: 0x6c56e620, 0x1a27d: 0x6c3a5420, 0x1a27e: 0x6c3aa820, 0x1a27f: 0x6d28be20, + // Block 0x68a, offset 0x1a280 + 0x1a280: 0x6c075620, 0x1a281: 0x6c3a2820, 0x1a282: 0x6cfab820, 0x1a283: 0x6cd3ae20, + 0x1a284: 0x6c9e3020, 0x1a285: 0x6d2e0820, 0x1a286: 0x6d2e0a20, 0x1a287: 0x6d2d8c20, + 0x1a288: 0x6c5c4820, 0x1a289: 0x6c3f8820, 0x1a28a: 0x6ced5a20, 0x1a28b: 0x6ca0b420, + 0x1a28c: 0x6cbc1020, 0x1a28d: 0x6c8a8a20, 0x1a28f: 0x6c9f1e20, + 0x1a290: 0x6c54d820, 0x1a291: 0x6c535e20, 0x1a292: 0x6d213c20, 0x1a293: 0x6cb60820, + 0x1a294: 0x6c350420, 0x1a295: 0x6c020020, 0x1a297: 0x6c03ba20, + 0x1a298: 0x6c2c7820, 0x1a299: 0x6d08aa20, 0x1a29a: 0x6c2c8a20, 0x1a29b: 0x6c0a0e20, + 0x1a29c: 0x6d393e20, 0x1a29d: 0x6cad6020, 0x1a29e: 0x6ce5f620, 0x1a29f: 0x6d155020, + 0x1a2a1: 0x6c63ea20, 0x1a2a2: 0x6d36f220, 0x1a2a3: 0x6ce8f820, + 0x1a2a4: 0x6d00f820, 0x1a2a5: 0x6c28ba20, 0x1a2a6: 0x6ce5a620, 0x1a2a7: 0x6d022620, + 0x1a2a8: 0x6c172620, 0x1a2a9: 0x6d25f220, 0x1a2aa: 0x6c496a20, 0x1a2ab: 0x6c89a420, + 0x1a2ac: 0x6c083220, 0x1a2ae: 0x6c930020, 0x1a2af: 0x6c60e420, + 0x1a2b0: 0x6d08c220, 0x1a2b1: 0x6cd62420, 0x1a2b2: 0x6c318220, 0x1a2b3: 0x6cd9f420, + 0x1a2b4: 0x6c55e220, 0x1a2b5: 0x6d286420, 0x1a2b6: 0x6c160820, 0x1a2b7: 0x6c054620, + 0x1a2b8: 0x6cc6da20, 0x1a2b9: 0x6c359c20, 0x1a2ba: 0x6cf24020, 0x1a2bb: 0x6c03ca20, + 0x1a2bc: 0x6c3cc220, 0x1a2bd: 0x6d209e20, 0x1a2be: 0x6d310c20, 0x1a2bf: 0x6c3bae20, + // Block 0x68b, offset 0x1a2c0 + 0x1a2c0: 0x6c496c20, 0x1a2c1: 0x6c104c20, 0x1a2c2: 0x6c446220, 0x1a2c3: 0x6c33c420, + 0x1a2c4: 0x6c5a3420, 0x1a2c5: 0x6c31f820, 0x1a2c6: 0x6ce3ce20, 0x1a2c7: 0x6c0fcc20, + 0x1a2c8: 0x6cba8a20, 0x1a2c9: 0x6c8b8220, 0x1a2ca: 0x6c901620, 0x1a2cb: 0x6cf13420, + 0x1a2cc: 0x6d2eac20, 0x1a2cd: 0x6c801820, 0x1a2ce: 0x6cdbea20, 0x1a2cf: 0x6ca36020, + 0x1a2d0: 0x6c0a1020, 0x1a2d1: 0x6ceb3e20, 0x1a2d2: 0x6d3b1a20, 0x1a2d3: 0x6c2e5c20, + 0x1a2d4: 0x6c104620, 0x1a2d5: 0x6c716820, 0x1a2d6: 0x6cb3b020, 0x1a2d7: 0x6cfa0c20, + 0x1a2d8: 0x6cf04420, 0x1a2d9: 0x6cb3b420, 0x1a2da: 0x6c267420, 0x1a2db: 0x6c387220, + 0x1a2dc: 0x6c14e420, 0x1a2dd: 0x6c56f020, 0x1a2de: 0x6d28c020, + 0x1a2e4: 0x6c38f020, 0x1a2e5: 0x6d028a20, 0x1a2e6: 0x6c536020, 0x1a2e7: 0x6c1b2e20, + 0x1a2e8: 0x6c05c820, 0x1a2e9: 0x6d1a7a20, 0x1a2eb: 0x6c6dd220, + 0x1a2ec: 0x6c0f6820, 0x1a2ed: 0x6cc88820, 0x1a2ee: 0x6c1e3a20, 0x1a2ef: 0x6d1c1220, + 0x1a2f0: 0x6d143a20, 0x1a2f1: 0x6c411820, 0x1a2f2: 0x6c7d6c20, 0x1a2f3: 0x6d27f020, + 0x1a2f4: 0x6d31ec20, 0x1a2f5: 0x6d0b5a20, 0x1a2f6: 0x6c70b820, 0x1a2f7: 0x6c547a20, + 0x1a2f8: 0x6c9f7620, 0x1a2f9: 0x6c040220, 0x1a2fa: 0x6c441c20, 0x1a2fb: 0x6c0bb220, + 0x1a2fc: 0x6d3d0820, 0x1a2fd: 0x6c505420, 0x1a2fe: 0x6d31ee20, 0x1a2ff: 0x6cd14a20, + // Block 0x68c, offset 0x1a300 + 0x1a300: 0x6c44a020, 0x1a301: 0x6c0a3e20, 0x1a302: 0x6c34b220, 0x1a303: 0x6c216820, + 0x1a304: 0x6c1fb220, 0x1a305: 0x6cca5a20, 0x1a306: 0x6c1a4620, 0x1a307: 0x6cc48a20, + 0x1a308: 0x6c191220, 0x1a309: 0x6c99b820, 0x1a30a: 0x6cadf220, 0x1a30b: 0x6ceec220, + 0x1a30c: 0x6cb07420, 0x1a30d: 0x6c3f8c20, 0x1a30e: 0x6d3d0e20, 0x1a30f: 0x6cb53c20, + 0x1a310: 0x6c8bec20, 0x1a311: 0x6d142020, 0x1a312: 0x6c9adc20, 0x1a313: 0x6cf3f820, + 0x1a314: 0x6cb7fa20, 0x1a315: 0x6c2f0020, 0x1a316: 0x6c191a20, 0x1a317: 0x6cfa0e20, + 0x1a318: 0x6c518e20, 0x1a319: 0x6cca9220, 0x1a31a: 0x6c487e20, 0x1a31b: 0x6c543e20, + 0x1a31c: 0x6c023420, 0x1a31d: 0x6c3f9420, 0x1a31e: 0x6cbbc620, 0x1a31f: 0x6c5d4c20, + 0x1a320: 0x6cafa220, 0x1a321: 0x6d0cf820, 0x1a322: 0x6cd84420, 0x1a323: 0x6cf7b420, + 0x1a324: 0x6ca02420, 0x1a325: 0x6c7ce420, 0x1a326: 0x6c445620, + 0x1a328: 0x6c02fc20, 0x1a329: 0x6cca4220, 0x1a32a: 0x6cd6ee20, 0x1a32b: 0x6c90d820, + 0x1a32c: 0x6d320620, 0x1a32d: 0x6c5c9a20, 0x1a32e: 0x6c156620, + 0x1a330: 0x6c8c8420, 0x1a331: 0x6ca2ee20, 0x1a332: 0x6c4f3c20, 0x1a333: 0x6c31fc20, + 0x1a334: 0x6c6d7820, 0x1a335: 0x6c9df420, 0x1a336: 0x6c38fa20, 0x1a337: 0x6c370020, + 0x1a338: 0x6c174220, 0x1a339: 0x6c536220, 0x1a33a: 0x6c536e20, 0x1a33b: 0x6d238820, + 0x1a33c: 0x6d096a20, 0x1a33d: 0x6cad3a20, 0x1a33e: 0x6c088220, 0x1a33f: 0x6c175220, + // Block 0x68d, offset 0x1a340 + 0x1a340: 0x6d1fe220, 0x1a341: 0x6d153a20, 0x1a342: 0x6d096e20, 0x1a343: 0x6cc97e20, + 0x1a344: 0x6d073420, 0x1a345: 0x6c866820, 0x1a346: 0x6c868a20, 0x1a347: 0x6d263220, + 0x1a348: 0x6c336220, 0x1a349: 0x6c5e0420, 0x1a34a: 0x6ccc7e20, 0x1a34b: 0x6c838c20, + 0x1a34c: 0x6cb3ce20, 0x1a34d: 0x6c550e20, 0x1a34e: 0x6c4c8e20, 0x1a34f: 0x6c10c420, + 0x1a350: 0x6cc8a620, 0x1a351: 0x6cf0fa20, 0x1a352: 0x6cd9f620, 0x1a353: 0x6c01dc20, + 0x1a354: 0x6d21cc20, 0x1a355: 0x6cfd8e20, 0x1a356: 0x6c527c20, 0x1a357: 0x6d0fea20, + 0x1a358: 0x6cff4420, 0x1a359: 0x6d116820, 0x1a35b: 0x6c0ac020, + 0x1a35d: 0x6c528420, 0x1a35e: 0x6ce25620, 0x1a35f: 0x6c8eee20, + 0x1a361: 0x6d3b3420, 0x1a363: 0x6cf89a20, + 0x1a364: 0x6d298e20, 0x1a365: 0x6d17d420, 0x1a366: 0x6c312a20, 0x1a367: 0x6d259020, + 0x1a368: 0x6c700820, 0x1a36a: 0x6c0f2020, 0x1a36b: 0x6ce35c20, + 0x1a36c: 0x6d1d0220, 0x1a36e: 0x6d154020, 0x1a36f: 0x6ca70420, + 0x1a370: 0x6ccee220, 0x1a371: 0x6c07c020, 0x1a372: 0x6c465620, 0x1a373: 0x6c04d420, + 0x1a374: 0x6ca14820, 0x1a375: 0x6c410420, 0x1a376: 0x6c372620, 0x1a377: 0x6ccf2e20, + 0x1a379: 0x6d36d620, 0x1a37a: 0x6d106c20, 0x1a37b: 0x6c66ca20, + 0x1a37c: 0x6d263420, 0x1a37d: 0x6cd73020, 0x1a37e: 0x6ce38420, 0x1a37f: 0x6cf02020, + // Block 0x68e, offset 0x1a380 + 0x1a380: 0x6d0aaa20, 0x1a381: 0x6d36f620, 0x1a382: 0x6d18bc20, 0x1a383: 0x6cc59c20, + 0x1a384: 0x6cd3ee20, 0x1a385: 0x6c55d420, 0x1a386: 0x6ca55620, 0x1a387: 0x6d126a20, + 0x1a388: 0x6c66f820, 0x1a389: 0x6cdc1220, 0x1a38a: 0x6d1d1e20, 0x1a38b: 0x6c061a20, + 0x1a38c: 0x6c55e420, 0x1a38d: 0x6c55e620, 0x1a38e: 0x6d137a20, + 0x1a390: 0x6d107420, 0x1a391: 0x6c888e20, 0x1a392: 0x6cf72620, 0x1a393: 0x6c372820, + 0x1a394: 0x6c331c20, 0x1a395: 0x6d297e20, 0x1a396: 0x6d3b4420, 0x1a397: 0x6d1d2820, + 0x1a398: 0x6d1d2c20, 0x1a399: 0x6c6cca20, 0x1a39a: 0x6c208820, 0x1a39b: 0x6c28ec20, + 0x1a39d: 0x6c7b4a20, 0x1a39e: 0x6d196020, 0x1a39f: 0x6d139a20, + 0x1a3a0: 0x6c662e20, 0x1a3a1: 0x6c372a20, 0x1a3a2: 0x6ca93e20, 0x1a3a3: 0x6c228820, + 0x1a3a4: 0x6cba3420, 0x1a3a5: 0x6d098220, 0x1a3a6: 0x6c0ea420, 0x1a3a7: 0x6c9d1420, + 0x1a3a8: 0x6cd73a20, 0x1a3a9: 0x6ca0a620, 0x1a3aa: 0x6c897c20, 0x1a3ab: 0x6cb71820, + 0x1a3ac: 0x6cb71a20, 0x1a3ad: 0x6cd44c20, 0x1a3ae: 0x6c3f2020, 0x1a3af: 0x6c0f3a20, + 0x1a3b0: 0x6c085820, 0x1a3b1: 0x6c0d0020, 0x1a3b2: 0x6d161c20, 0x1a3b3: 0x6cf13a20, + 0x1a3b4: 0x6c587e20, 0x1a3b5: 0x6c38ac20, 0x1a3b6: 0x6cb60e20, 0x1a3b7: 0x6c98f620, + 0x1a3b8: 0x6c060820, 0x1a3b9: 0x6c020420, 0x1a3ba: 0x6c020a20, 0x1a3bb: 0x6c403020, + 0x1a3bc: 0x6cb63020, 0x1a3bd: 0x6cc45020, 0x1a3be: 0x6ceb4020, 0x1a3bf: 0x6d187420, + // Block 0x68f, offset 0x1a3c0 + 0x1a3c0: 0x6c0f5420, 0x1a3c1: 0x6cb12820, 0x1a3c2: 0x6c039220, + 0x1a3c4: 0x6d082220, 0x1a3c7: 0x6d23fe20, + 0x1a3c8: 0x6c1b5620, 0x1a3c9: 0x6c915e20, 0x1a3ca: 0x6d156820, 0x1a3cb: 0x6c868c20, + 0x1a3cd: 0x6ca7b020, 0x1a3ce: 0x6cf90220, 0x1a3cf: 0x6cf3fa20, + 0x1a3d1: 0x6c834a20, 0x1a3d2: 0x6cb41a20, 0x1a3d3: 0x6d3d1220, + 0x1a3d4: 0x6d417e20, 0x1a3d5: 0x6d3dc620, 0x1a3d6: 0x6c168220, 0x1a3d7: 0x6c01de20, + 0x1a3d8: 0x6c377220, 0x1a3d9: 0x6d244620, 0x1a3da: 0x6c839c20, 0x1a3db: 0x6c408220, + 0x1a3dc: 0x6d2c6420, 0x1a3dd: 0x6c5d0a20, 0x1a3de: 0x6c218e20, 0x1a3df: 0x6cd9fe20, + 0x1a3e0: 0x6c089a20, 0x1a3e1: 0x6c0ab420, 0x1a3e2: 0x6d2c6620, + 0x1a3e4: 0x6c519e20, 0x1a3e5: 0x6c873a20, 0x1a3e7: 0x6c4f3220, + 0x1a3e8: 0x6d292220, 0x1a3e9: 0x6c474a20, 0x1a3ea: 0x6c1a5e20, 0x1a3eb: 0x6c90dc20, + 0x1a3ec: 0x6ca19e20, 0x1a3ed: 0x6c9daa20, 0x1a3ee: 0x6c975020, 0x1a3ef: 0x6c030420, + 0x1a3f0: 0x6d30c020, 0x1a3f1: 0x6d3a3a20, 0x1a3f2: 0x6c5a3820, 0x1a3f3: 0x6c38f620, + 0x1a3f4: 0x6c2b0220, 0x1a3f5: 0x6ce7a420, 0x1a3f7: 0x6c320220, + 0x1a3f8: 0x6cf33620, 0x1a3f9: 0x6cf13020, 0x1a3fa: 0x6c62f620, 0x1a3fb: 0x6c1ca020, + 0x1a3fc: 0x6c8c1220, 0x1a3fd: 0x6c0c6420, 0x1a3fe: 0x6c901e20, 0x1a3ff: 0x6c664a20, + // Block 0x690, offset 0x1a400 + 0x1a400: 0x6ca8da20, 0x1a401: 0x6c959e20, 0x1a402: 0x6cd03420, + 0x1a404: 0x6c487a20, 0x1a405: 0x6ca8a820, 0x1a406: 0x6d178a20, 0x1a407: 0x6c7a4820, + 0x1a408: 0x6cece220, 0x1a409: 0x6cebee20, 0x1a40a: 0x6cb87620, 0x1a40b: 0x6c0f5620, + 0x1a40c: 0x6c779220, 0x1a40d: 0x6c8d5020, 0x1a40e: 0x6c423020, 0x1a40f: 0x6c487820, + 0x1a410: 0x6c4d2c20, 0x1a411: 0x6c7bb020, 0x1a412: 0x6c527420, 0x1a413: 0x6c7c4620, + 0x1a414: 0x6d2b0a20, 0x1a415: 0x6ce64e20, 0x1a416: 0x6c80ee20, 0x1a417: 0x6c0a8020, + 0x1a418: 0x6c595a20, 0x1a419: 0x6cb3aa20, 0x1a41a: 0x6d11de20, 0x1a41b: 0x6cedaa20, + 0x1a41c: 0x6ce43c20, 0x1a41d: 0x6cdc1620, 0x1a41e: 0x6c7ad020, 0x1a41f: 0x6c337e20, + 0x1a420: 0x6c02b620, 0x1a421: 0x6c671620, 0x1a422: 0x6ca09c20, 0x1a423: 0x6c7d4220, + 0x1a424: 0x6c7b4c20, 0x1a425: 0x6c01e620, 0x1a426: 0x6c96ea20, 0x1a427: 0x6cbeaa20, + 0x1a428: 0x6cbb8820, 0x1a42a: 0x6c77b820, 0x1a42b: 0x6c508220, + 0x1a42c: 0x6c34c820, 0x1a42d: 0x6cfaa820, 0x1a42e: 0x6ca37c20, 0x1a42f: 0x6cdd3420, + 0x1a430: 0x6c6bf820, 0x1a431: 0x6caf8220, 0x1a432: 0x6cabcc20, 0x1a433: 0x6cd93020, + 0x1a434: 0x6c16bc20, 0x1a435: 0x6ca86c20, 0x1a436: 0x6c977620, 0x1a437: 0x6cd93e20, + 0x1a438: 0x6c22e420, 0x1a439: 0x6cfae420, 0x1a43a: 0x6c7e2420, + 0x1a43c: 0x6c2b9e20, 0x1a43d: 0x6cb3e420, 0x1a43e: 0x6ce5ac20, 0x1a43f: 0x6d40f420, + // Block 0x691, offset 0x1a440 + 0x1a440: 0x6cf2c820, 0x1a441: 0x6c3ae420, 0x1a442: 0x6c115020, 0x1a443: 0x6caee220, + 0x1a444: 0x6cc9d620, 0x1a446: 0x6cc76e20, 0x1a447: 0x6cb68620, + 0x1a448: 0x6c25fc20, 0x1a449: 0x6cac8e20, 0x1a44a: 0x6c0fc020, 0x1a44b: 0x6c979c20, + 0x1a44c: 0x6d401420, 0x1a44d: 0x6c22f220, 0x1a44e: 0x6c7d4420, 0x1a44f: 0x6c62f820, + 0x1a450: 0x6c801420, 0x1a452: 0x6c9bc220, 0x1a453: 0x6c9df820, + 0x1a454: 0x6cac9620, 0x1a455: 0x6c91aa20, 0x1a456: 0x6d416020, + 0x1a458: 0x6c8ee220, 0x1a459: 0x6d160020, 0x1a45a: 0x6cf1a820, 0x1a45b: 0x6c866c20, + 0x1a45c: 0x6c868e20, 0x1a45d: 0x6d2bb820, 0x1a45e: 0x6d3a9220, 0x1a45f: 0x6c5cfc20, + 0x1a460: 0x6cd03c20, 0x1a461: 0x6c1c6620, 0x1a462: 0x6d043c20, 0x1a463: 0x6cee3a20, + 0x1a464: 0x6c302020, 0x1a465: 0x6c5e2220, 0x1a466: 0x6cb07a20, 0x1a467: 0x6c551420, + 0x1a468: 0x6c9ab420, 0x1a469: 0x6c17f420, 0x1a46a: 0x6c9ab820, 0x1a46b: 0x6c175820, + 0x1a46c: 0x6c719620, 0x1a46d: 0x6caa3420, 0x1a46f: 0x6d197620, + 0x1a470: 0x6cc7f020, 0x1a471: 0x6c8e0420, 0x1a472: 0x6d0bba20, + 0x1a474: 0x6cb7bc20, 0x1a475: 0x6d3e7620, 0x1a477: 0x6c058c20, + 0x1a478: 0x6c45aa20, 0x1a479: 0x6d2af620, 0x1a47a: 0x6c6bfe20, 0x1a47b: 0x6d219a20, + 0x1a47c: 0x6cbd9820, 0x1a47d: 0x6c075820, 0x1a47e: 0x6c035820, 0x1a47f: 0x6ceb5020, + // Block 0x692, offset 0x1a480 + 0x1a480: 0x6d0f6c20, 0x1a481: 0x6cbbfc20, 0x1a482: 0x6d1ff220, 0x1a483: 0x6d36fa20, + 0x1a484: 0x6c6c0a20, 0x1a485: 0x6ca16a20, 0x1a486: 0x6cd12420, 0x1a487: 0x6ccdb820, + 0x1a488: 0x6cb65620, 0x1a489: 0x6ccdba20, 0x1a48a: 0x6c9d0420, 0x1a48b: 0x6c460220, + 0x1a48c: 0x6d157c20, 0x1a48d: 0x6c453e20, 0x1a48e: 0x6c454020, 0x1a48f: 0x6ce82020, + 0x1a490: 0x6c3dac20, 0x1a491: 0x6d092220, 0x1a492: 0x6d137e20, 0x1a493: 0x6ce69a20, + 0x1a494: 0x6ce5ae20, 0x1a495: 0x6ca1f620, 0x1a496: 0x6c8ec620, 0x1a497: 0x6c117e20, + 0x1a498: 0x6c848020, 0x1a499: 0x6cd51820, 0x1a49a: 0x6c932420, 0x1a49b: 0x6c5e3a20, + 0x1a49c: 0x6c263c20, 0x1a49d: 0x6cac1220, 0x1a49e: 0x6c8ed420, 0x1a49f: 0x6c72b820, + 0x1a4a0: 0x6d2e9220, 0x1a4a1: 0x6c718220, 0x1a4a2: 0x6d330a20, 0x1a4a3: 0x6d40f820, + 0x1a4a4: 0x6cfd3820, 0x1a4a5: 0x6d375020, + 0x1a4a8: 0x6c7eb020, 0x1a4ab: 0x6c7ebe20, + 0x1a4ac: 0x6d060a20, 0x1a4ad: 0x6c454220, 0x1a4ae: 0x6c35a220, 0x1a4af: 0x6ca21e20, + 0x1a4b0: 0x6d384a20, 0x1a4b1: 0x6ce3aa20, 0x1a4b2: 0x6d25ce20, 0x1a4b3: 0x6d2dc020, + 0x1a4b4: 0x6c454420, 0x1a4b5: 0x6cf24420, 0x1a4b6: 0x6c80f420, 0x1a4b7: 0x6d21f620, + 0x1a4b8: 0x6cda0820, 0x1a4b9: 0x6d2ca020, 0x1a4ba: 0x6c4d3620, 0x1a4bb: 0x6c576e20, + 0x1a4bc: 0x6d2e3e20, 0x1a4be: 0x6c90de20, 0x1a4bf: 0x6c165020, + // Block 0x693, offset 0x1a4c0 + 0x1a4c0: 0x6d376c20, 0x1a4c1: 0x6cf12820, 0x1a4c2: 0x6d083c20, 0x1a4c3: 0x6d2a6420, + 0x1a4c4: 0x6c9f8620, 0x1a4c5: 0x6c4aac20, 0x1a4c6: 0x6cda7020, + 0x1a4c9: 0x6cd85420, 0x1a4ca: 0x6c352820, 0x1a4cb: 0x6c134220, + 0x1a4cc: 0x6c7b7a20, 0x1a4cd: 0x6ce2dc20, 0x1a4ce: 0x6ca57c20, 0x1a4cf: 0x6c819620, + 0x1a4d0: 0x6c920820, 0x1a4d1: 0x6d159e20, 0x1a4d2: 0x6d029220, 0x1a4d3: 0x6d0e2a20, + 0x1a4d4: 0x6cbe9820, 0x1a4d5: 0x6cb42420, 0x1a4d6: 0x6c1e1220, 0x1a4d7: 0x6cfbe020, + 0x1a4d8: 0x6c497020, 0x1a4d9: 0x6c6b8a20, 0x1a4da: 0x6c7f8220, 0x1a4db: 0x6c9bca20, + 0x1a4dc: 0x6d13ac20, 0x1a4de: 0x6c869420, 0x1a4df: 0x6d1b8420, + 0x1a4e0: 0x6c212620, 0x1a4e1: 0x6cbfde20, 0x1a4e2: 0x6ce2d220, 0x1a4e3: 0x6d21f820, + 0x1a4e6: 0x6c278420, 0x1a4e7: 0x6c327420, + 0x1a4e8: 0x6c537e20, 0x1a4ea: 0x6cf8c220, + 0x1a4ec: 0x6cb64820, 0x1a4ee: 0x6d25a620, 0x1a4ef: 0x6c609e20, + 0x1a4f0: 0x6d285020, 0x1a4f1: 0x6c39dc20, 0x1a4f2: 0x6c45ac20, 0x1a4f3: 0x6c4f8820, + 0x1a4f4: 0x6d326620, 0x1a4f5: 0x6cc3f620, + 0x1a4f8: 0x6c6c0220, 0x1a4f9: 0x6cb02020, 0x1a4fa: 0x6c423220, 0x1a4fb: 0x6d082820, + 0x1a4fc: 0x6cd11420, 0x1a4fd: 0x6cd28c20, 0x1a4fe: 0x6cbc2a20, 0x1a4ff: 0x6c227020, + // Block 0x694, offset 0x1a500 + 0x1a500: 0x6c2eee20, 0x1a501: 0x6c0f7220, 0x1a502: 0x6c2de620, 0x1a503: 0x6ced5020, + 0x1a504: 0x6c227220, 0x1a505: 0x6d355420, 0x1a506: 0x6c041220, 0x1a507: 0x6cf47e20, + 0x1a508: 0x6c061820, 0x1a509: 0x6c28be20, 0x1a50a: 0x6c039420, 0x1a50b: 0x6ce79620, + 0x1a50d: 0x6c45bc20, 0x1a50e: 0x6c702e20, 0x1a50f: 0x6c4b8620, + 0x1a510: 0x6c22e820, 0x1a511: 0x6d1ff420, 0x1a512: 0x6d25ba20, 0x1a513: 0x6c81be20, + 0x1a514: 0x6c716e20, 0x1a515: 0x6c3f1820, 0x1a516: 0x6ca88e20, 0x1a517: 0x6c358c20, + 0x1a518: 0x6c358e20, 0x1a519: 0x6d040e20, 0x1a51a: 0x6c771620, 0x1a51b: 0x6d0ee220, + 0x1a51c: 0x6ce90220, 0x1a51d: 0x6cb3f820, 0x1a51e: 0x6c083820, 0x1a51f: 0x6ca02620, + 0x1a520: 0x6cd73620, 0x1a521: 0x6d0ef220, 0x1a522: 0x6cb68c20, 0x1a523: 0x6d25ca20, + 0x1a524: 0x6c0cca20, 0x1a526: 0x6d07f220, 0x1a527: 0x6c544220, + 0x1a528: 0x6c5a3020, 0x1a529: 0x6d10c220, 0x1a52a: 0x6c73a220, 0x1a52b: 0x6c7cb220, + 0x1a52c: 0x6c36de20, 0x1a52d: 0x6c60f620, 0x1a52e: 0x6ca19220, 0x1a52f: 0x6c1d2e20, + 0x1a530: 0x6c062220, 0x1a531: 0x6cf54e20, 0x1a532: 0x6d327a20, 0x1a533: 0x6d076620, + 0x1a534: 0x6cdee820, 0x1a535: 0x6c1c9620, 0x1a536: 0x6cf74a20, 0x1a537: 0x6c23d220, + 0x1a538: 0x6c968620, 0x1a539: 0x6c7a1020, 0x1a53a: 0x6d0f0820, 0x1a53b: 0x6c11c420, + 0x1a53d: 0x6c520e20, 0x1a53e: 0x6c2ac620, 0x1a53f: 0x6cc49e20, + // Block 0x695, offset 0x1a540 + 0x1a540: 0x6ce7a820, 0x1a541: 0x6d248c20, 0x1a542: 0x6cfe7020, 0x1a543: 0x6ca4d820, + 0x1a544: 0x6cd76420, 0x1a545: 0x6c3bb220, 0x1a546: 0x6cb47820, 0x1a547: 0x6c8dba20, + 0x1a548: 0x6c02ba20, 0x1a549: 0x6c58d020, 0x1a54a: 0x6d15a020, 0x1a54b: 0x6c58d220, + 0x1a54c: 0x6c9bc620, 0x1a54d: 0x6d1c4e20, 0x1a54e: 0x6c831820, 0x1a54f: 0x6d0f2e20, + 0x1a550: 0x6c062820, 0x1a551: 0x6c2f2c20, 0x1a552: 0x6c8e0620, 0x1a553: 0x6cd1f820, + 0x1a554: 0x6c689020, 0x1a555: 0x6c8b4420, 0x1a556: 0x6c6dee20, 0x1a557: 0x6c718c20, + 0x1a558: 0x6ce30a20, 0x1a559: 0x6cb0e620, 0x1a55a: 0x6c42a620, 0x1a55b: 0x6cff3420, + 0x1a55c: 0x6cec5e20, 0x1a55d: 0x6c1fd420, 0x1a55e: 0x6c2bc420, 0x1a55f: 0x6c588e20, + 0x1a560: 0x6d11d220, 0x1a561: 0x6c866e20, 0x1a562: 0x6c9c7020, 0x1a563: 0x6c550a20, + 0x1a564: 0x6cd11620, 0x1a565: 0x6c638a20, 0x1a566: 0x6d1aa620, 0x1a567: 0x6ceec620, + 0x1a569: 0x6cb18e20, 0x1a56a: 0x6c934420, 0x1a56b: 0x6c8dbc20, + 0x1a56c: 0x6d184420, 0x1a56d: 0x6c111620, 0x1a56e: 0x6ccd9820, 0x1a56f: 0x6c54fe20, + 0x1a570: 0x6cd53620, 0x1a571: 0x6cead420, 0x1a572: 0x6ca16e20, 0x1a573: 0x6c575820, + 0x1a574: 0x6ce61a20, 0x1a575: 0x6c0dfe20, 0x1a576: 0x6caee620, 0x1a577: 0x6c5d0820, + 0x1a578: 0x6c3dae20, 0x1a579: 0x6c4cdc20, 0x1a57a: 0x6c10d020, 0x1a57b: 0x6c849820, + 0x1a57c: 0x6c163e20, 0x1a57d: 0x6cb03420, 0x1a57e: 0x6c260020, 0x1a57f: 0x6c9bb220, + // Block 0x696, offset 0x1a580 + 0x1a580: 0x6cddc020, 0x1a581: 0x6cbb6020, 0x1a582: 0x6d34c420, 0x1a583: 0x6c7c2420, + 0x1a584: 0x6c08a820, 0x1a585: 0x6c029220, 0x1a586: 0x6c9bc820, 0x1a587: 0x6cfd0620, + 0x1a588: 0x6c7ab420, 0x1a589: 0x6ce7fc20, 0x1a58a: 0x6ce93c20, 0x1a58b: 0x6cf04a20, + 0x1a58c: 0x6cfaf820, 0x1a58e: 0x6ce94220, 0x1a58f: 0x6c81cc20, + 0x1a590: 0x6c162220, 0x1a591: 0x6ca6c420, 0x1a592: 0x6ca6d020, 0x1a593: 0x6c845220, + 0x1a594: 0x6c304620, 0x1a595: 0x6c72c620, 0x1a596: 0x6cba8620, 0x1a597: 0x6c0fc620, + 0x1a598: 0x6cccac20, 0x1a599: 0x6d2c0e20, 0x1a59a: 0x6ce25e20, 0x1a59b: 0x6cba8c20, + 0x1a59c: 0x6ca9ee20, 0x1a59d: 0x6d181620, 0x1a59e: 0x6c6e9e20, 0x1a59f: 0x6c41e820, + 0x1a5a0: 0x6c2ba020, 0x1a5a1: 0x6c65de20, 0x1a5a2: 0x6c9ab020, 0x1a5a3: 0x6c26c420, + 0x1a5a4: 0x6c660620, 0x1a5a5: 0x6d244a20, 0x1a5a6: 0x6d024c20, 0x1a5a7: 0x6d294820, + 0x1a5a8: 0x6c988020, 0x1a5a9: 0x6c849a20, 0x1a5aa: 0x6c4c0a20, 0x1a5ab: 0x6d09ca20, + 0x1a5ac: 0x6cdedc20, 0x1a5ad: 0x6d310e20, 0x1a5ae: 0x6d107620, 0x1a5af: 0x6ce98620, + 0x1a5b0: 0x6cce2e20, 0x1a5b1: 0x6cf93e20, 0x1a5b2: 0x6cbbcc20, 0x1a5b3: 0x6cf13620, + 0x1a5b4: 0x6d1d6220, 0x1a5b5: 0x6c1fa820, 0x1a5b6: 0x6cc1ec20, 0x1a5b7: 0x6cebfa20, + 0x1a5b9: 0x6d343220, 0x1a5ba: 0x6ce6e420, 0x1a5bb: 0x6c47f820, + 0x1a5bc: 0x6cce3020, 0x1a5bd: 0x6c10ec20, 0x1a5be: 0x6c3f1a20, 0x1a5bf: 0x6ce61e20, + // Block 0x697, offset 0x1a5c0 + 0x1a5c0: 0x6cded220, 0x1a5c1: 0x6cdeea20, 0x1a5c2: 0x6d3da620, 0x1a5c3: 0x6c4e4020, + 0x1a5c4: 0x6cb2da20, 0x1a5c5: 0x6c519a20, 0x1a5c6: 0x6d3c7420, 0x1a5c7: 0x6d396e20, + 0x1a5c8: 0x6c0fd220, 0x1a5c9: 0x6c8eec20, 0x1a5ca: 0x6caa8c20, 0x1a5cb: 0x6cf71220, + 0x1a5cc: 0x6cada220, 0x1a5cd: 0x6c2cb420, 0x1a5ce: 0x6c50ac20, 0x1a5cf: 0x6ce44620, + 0x1a5d0: 0x6cec8020, 0x1a5d1: 0x6ce44a20, 0x1a5d2: 0x6cb66a20, 0x1a5d3: 0x6c62a820, + 0x1a5d4: 0x6c1b6620, 0x1a5d5: 0x6c03cc20, 0x1a5d6: 0x6c6d7020, 0x1a5d7: 0x6c78e820, + 0x1a5d8: 0x6c873e20, 0x1a5d9: 0x6c72c820, 0x1a5da: 0x6cc25620, 0x1a5db: 0x6c7ec820, + 0x1a5dc: 0x6c47f020, 0x1a5dd: 0x6cb88620, 0x1a5de: 0x6cb6b420, 0x1a5df: 0x6cfd5020, + 0x1a5e0: 0x6c664220, 0x1a5e1: 0x6cd29a20, 0x1a5e2: 0x6c655420, 0x1a5e3: 0x6c005e20, + 0x1a5e4: 0x6c577220, 0x1a5e5: 0x6d2c1420, 0x1a5e6: 0x6d2b2e20, 0x1a5e7: 0x6d11e820, + 0x1a5e8: 0x6d2dd820, 0x1a5e9: 0x6c630420, 0x1a5ea: 0x6c145c20, 0x1a5eb: 0x6d0f3420, + 0x1a5ec: 0x6c654c20, 0x1a5ee: 0x6d0e1020, + 0x1a5f0: 0x6c68a820, 0x1a5f1: 0x6ce7a220, 0x1a5f2: 0x6ca41820, 0x1a5f3: 0x6d271a20, + 0x1a5f5: 0x6c1b6e20, + // Block 0x698, offset 0x1a600 + 0x1a600: 0x6d13b620, 0x1a601: 0x6c2f4020, 0x1a602: 0x6c779820, 0x1a603: 0x6cb4c620, + 0x1a604: 0x6cce4620, 0x1a605: 0x6cfa2420, 0x1a606: 0x6c4e4c20, 0x1a607: 0x6ced6820, + 0x1a608: 0x6d2f1820, 0x1a609: 0x6cc9f220, 0x1a60a: 0x6cce4820, 0x1a60b: 0x6cfa2620, + 0x1a60c: 0x6c5e6220, 0x1a60d: 0x6c105620, 0x1a60e: 0x6d221020, 0x1a60f: 0x6c9dfa20, + 0x1a610: 0x6c411e20, 0x1a611: 0x6c1e1820, 0x1a612: 0x6c1e1a20, 0x1a613: 0x6d3b6c20, + 0x1a614: 0x6cbc8e20, 0x1a615: 0x6caf2220, 0x1a616: 0x6cd2ea20, 0x1a617: 0x6cd2e820, + 0x1a618: 0x6cbf9420, 0x1a619: 0x6c0dba20, 0x1a61a: 0x6d12b820, 0x1a61b: 0x6c237e20, + 0x1a61c: 0x6c2fd620, 0x1a61d: 0x6cd7b820, 0x1a61e: 0x6c19b020, 0x1a61f: 0x6c2fca20, + 0x1a620: 0x6cbf9620, 0x1a621: 0x6c898020, 0x1a622: 0x6c2fcc20, 0x1a623: 0x6d1f9a20, + 0x1a624: 0x6c898220, 0x1a625: 0x6d0c5420, 0x1a626: 0x6c0e0820, 0x1a627: 0x6cca9c20, + 0x1a628: 0x6c4bb620, 0x1a629: 0x6c6f3620, 0x1a62a: 0x6c447a20, 0x1a62b: 0x6d0ac420, + 0x1a62c: 0x6cbb0220, 0x1a62d: 0x6d378220, 0x1a62e: 0x6c611020, 0x1a62f: 0x6c6ba220, + 0x1a630: 0x6c3c0c20, 0x1a631: 0x6c497420, 0x1a632: 0x6c202c20, 0x1a633: 0x6c159620, + 0x1a634: 0x6c8ba220, 0x1a635: 0x6d3d3620, 0x1a636: 0x6d3a5220, 0x1a637: 0x6c4d0420, + 0x1a638: 0x6cecb420, 0x1a639: 0x6c27b220, 0x1a63a: 0x6cf06a20, 0x1a63b: 0x6d3a5420, + 0x1a63c: 0x6c6e0020, 0x1a63d: 0x6c857420, 0x1a63e: 0x6c71aa20, 0x1a63f: 0x6cb1dc20, + // Block 0x699, offset 0x1a640 + 0x1a640: 0x6c3dc220, 0x1a641: 0x6d144620, 0x1a642: 0x6d163420, 0x1a643: 0x6ca38c20, + 0x1a644: 0x6cf55020, 0x1a645: 0x6c6f9c20, 0x1a646: 0x6c6f9e20, 0x1a647: 0x6cea9020, + 0x1a648: 0x6c99c220, 0x1a649: 0x6d163820, 0x1a64a: 0x6d13b820, 0x1a64b: 0x6d337c20, + 0x1a64c: 0x6cf33c20, 0x1a64d: 0x6d2ca620, 0x1a64e: 0x6c56f820, 0x1a64f: 0x6c37f420, + 0x1a650: 0x6c820820, 0x1a651: 0x6d1a1e20, 0x1a652: 0x6cb24620, 0x1a653: 0x6caccc20, + 0x1a654: 0x6cbbce20, 0x1a655: 0x6c560e20, 0x1a656: 0x6c48c220, 0x1a657: 0x6c19c420, + 0x1a658: 0x6c19d420, 0x1a659: 0x6d15aa20, 0x1a65a: 0x6d1abc20, 0x1a65b: 0x6d0bd820, + 0x1a65c: 0x6c9ebc20, 0x1a65d: 0x6c6f9a20, 0x1a65e: 0x6cb6c020, 0x1a65f: 0x6d129c20, + 0x1a660: 0x6cf76820, 0x1a661: 0x6cfd5e20, 0x1a662: 0x6c412020, 0x1a663: 0x6c6fa020, + 0x1a664: 0x6cfa2820, 0x1a665: 0x6c563020, 0x1a666: 0x6cd49620, 0x1a667: 0x6c315a20, + 0x1a668: 0x6cd2aa20, 0x1a669: 0x6c5e7020, 0x1a66a: 0x6ca45420, 0x1a66b: 0x6c631a20, + 0x1a66c: 0x6c71ec20, 0x1a66d: 0x6cd23220, 0x1a66e: 0x6c992220, 0x1a66f: 0x6c549020, + 0x1a670: 0x6c971020, 0x1a671: 0x6c949020, 0x1a672: 0x6d3dfe20, 0x1a673: 0x6cc7f820, + 0x1a674: 0x6d08f620, 0x1a675: 0x6d0d4220, 0x1a676: 0x6c3f3a20, 0x1a677: 0x6ccbcc20, + 0x1a678: 0x6ca2f020, 0x1a679: 0x6c418220, 0x1a67a: 0x6cdd5020, 0x1a67b: 0x6d20d020, + 0x1a67c: 0x6c258c20, 0x1a67d: 0x6d30d420, 0x1a67e: 0x6c419020, 0x1a67f: 0x6d35d220, + // Block 0x69a, offset 0x1a680 + 0x1a680: 0x6c4a5020, 0x1a681: 0x6c419820, 0x1a682: 0x6c949a20, 0x1a683: 0x6c8c2220, + 0x1a684: 0x6d17d820, 0x1a685: 0x6c73be20, 0x1a686: 0x6c823620, 0x1a687: 0x6c96ec20, + 0x1a688: 0x6d221220, 0x1a689: 0x6d328020, 0x1a68a: 0x6cd30620, 0x1a68b: 0x6cd31020, + 0x1a68c: 0x6c37b420, 0x1a68d: 0x6c1f0020, 0x1a68e: 0x6d20a220, 0x1a68f: 0x6c7c3020, + 0x1a690: 0x6d20a020, 0x1a691: 0x6d277420, 0x1a692: 0x6c563220, 0x1a693: 0x6cb56020, + 0x1a694: 0x6cf41420, 0x1a695: 0x6c6dfe20, 0x1a696: 0x6cd87220, 0x1a697: 0x6cdc1c20, + 0x1a698: 0x6c44a620, 0x1a699: 0x6c44a820, 0x1a69a: 0x6d0b6c20, 0x1a69b: 0x6d003620, + 0x1a69c: 0x6d0b7420, 0x1a69d: 0x6cb57820, 0x1a69e: 0x6d0b7c20, 0x1a69f: 0x6c5fd820, + 0x1a6a0: 0x6ce7e220, 0x1a6a1: 0x6cedd420, 0x1a6a2: 0x6c777420, 0x1a6a3: 0x6cde2a20, + 0x1a6a4: 0x6c682220, 0x1a6a5: 0x6c4d4e20, 0x1a6a6: 0x6d165220, 0x1a6a7: 0x6c158c20, + 0x1a6a8: 0x6c524420, 0x1a6a9: 0x6ca22220, 0x1a6aa: 0x6d13b220, 0x1a6ab: 0x6cfdd820, + 0x1a6ac: 0x6c6d8e20, 0x1a6ad: 0x6ce66220, 0x1a6ae: 0x6c89aa20, 0x1a6af: 0x6cfdda20, + 0x1a6b0: 0x6c6d9620, 0x1a6b1: 0x6d12d420, 0x1a6b2: 0x6cbd1c20, 0x1a6b3: 0x6c0ece20, + 0x1a6b4: 0x6d204420, 0x1a6b5: 0x6d01a020, 0x1a6b6: 0x6c283820, 0x1a6b7: 0x6c880820, + 0x1a6b8: 0x6c34b420, 0x1a6b9: 0x6c9ae020, 0x1a6ba: 0x6cc55a20, 0x1a6bb: 0x6cc55c20, + 0x1a6bc: 0x6c5fb620, 0x1a6bd: 0x6c630a20, 0x1a6be: 0x6cedd620, 0x1a6bf: 0x6d163a20, + // Block 0x69b, offset 0x1a6c0 + 0x1a6c0: 0x6cd03620, 0x1a6c1: 0x6cc55e20, 0x1a6c2: 0x6c820220, 0x1a6c3: 0x6c2f4220, + 0x1a6c4: 0x6d2b3220, 0x1a6c5: 0x6c6c7e20, 0x1a6c6: 0x6cb3fa20, 0x1a6c7: 0x6c1d8c20, + 0x1a6c8: 0x6c030c20, 0x1a6c9: 0x6d2ef620, 0x1a6ca: 0x6c6c1c20, 0x1a6cb: 0x6c6ba420, + 0x1a6cc: 0x6c0da020, 0x1a6cd: 0x6cc61220, 0x1a6ce: 0x6c237c20, 0x1a6cf: 0x6c3d0820, + 0x1a6d0: 0x6cca1220, 0x1a6d1: 0x6c94d420, 0x1a6d2: 0x6c0da220, 0x1a6d3: 0x6c121c20, + 0x1a6d4: 0x6d3ed620, 0x1a6d5: 0x6cd2ee20, 0x1a6d6: 0x6cddda20, 0x1a6d7: 0x6d2f1a20, + 0x1a6d8: 0x6c3fa420, 0x1a6d9: 0x6cfd5620, 0x1a6da: 0x6cfa6a20, 0x1a6db: 0x6cea9220, + 0x1a6dc: 0x6c52e820, 0x1a6dd: 0x6ce70a20, 0x1a6de: 0x6cc5a620, 0x1a6df: 0x6cb88e20, + 0x1a6e0: 0x6c41c220, 0x1a6e1: 0x6c436220, 0x1a6e2: 0x6c0ea620, 0x1a6e3: 0x6c272220, + 0x1a6e4: 0x6c8e1820, 0x1a6e5: 0x6d15ae20, 0x1a6e6: 0x6c17b020, 0x1a6e7: 0x6c169020, + 0x1a6e8: 0x6cc93e20, 0x1a6e9: 0x6cce5a20, 0x1a6ea: 0x6d144a20, 0x1a6eb: 0x6ca25e20, + 0x1a6ec: 0x6c9b0220, 0x1a6ed: 0x6cc5a820, 0x1a6ee: 0x6c63fe20, 0x1a6ef: 0x6c17b220, + 0x1a6f0: 0x6d0ffc20, 0x1a6f1: 0x6cb96820, 0x1a6f2: 0x6d380e20, 0x1a6f3: 0x6cb04620, + 0x1a6f4: 0x6cf2cc20, 0x1a6f5: 0x6cf41820, 0x1a6f6: 0x6c665020, 0x1a6f7: 0x6c643620, + 0x1a6f8: 0x6d117e20, 0x1a6f9: 0x6c3c1220, 0x1a6fa: 0x6c121e20, 0x1a6fb: 0x6cc5ac20, + 0x1a6fc: 0x6ceddc20, 0x1a6fd: 0x6c3bc420, 0x1a6fe: 0x6c2b0c20, 0x1a6ff: 0x6c39b620, + // Block 0x69c, offset 0x1a700 + 0x1a700: 0x6d378420, 0x1a701: 0x6cb6c820, 0x1a702: 0x6cadf820, 0x1a703: 0x6d20a620, + 0x1a704: 0x6c2e0620, 0x1a705: 0x6c33d220, 0x1a706: 0x6cf49c20, 0x1a707: 0x6d165620, + 0x1a708: 0x6d030a20, 0x1a709: 0x6c777620, 0x1a70a: 0x6d13bc20, 0x1a70b: 0x6c5fbc20, + 0x1a70c: 0x6c008620, 0x1a70d: 0x6cf55420, 0x1a70e: 0x6c617220, 0x1a70f: 0x6c3dca20, + 0x1a710: 0x6c37f620, 0x1a711: 0x6d04b220, 0x1a712: 0x6c6ccc20, 0x1a713: 0x6caf2420, + 0x1a714: 0x6c281820, 0x1a715: 0x6c3d3420, 0x1a716: 0x6ce16c20, 0x1a717: 0x6d381020, + 0x1a718: 0x6d1e8820, 0x1a719: 0x6c5d8620, 0x1a71a: 0x6c5b8a20, 0x1a71b: 0x6d221420, + 0x1a71c: 0x6c251620, 0x1a71d: 0x6c1fee20, 0x1a71e: 0x6cca1420, 0x1a71f: 0x6cef8220, + 0x1a720: 0x6c1ff020, 0x1a721: 0x6c17cc20, 0x1a722: 0x6d0b0a20, 0x1a723: 0x6cfc7020, + 0x1a724: 0x6ccdfe20, 0x1a725: 0x6c165e20, 0x1a726: 0x6c94d620, 0x1a727: 0x6c122020, + 0x1a728: 0x6d0a6420, 0x1a729: 0x6d031220, 0x1a72a: 0x6cef8420, 0x1a72b: 0x6d3a9a20, + 0x1a72c: 0x6d2b5820, 0x1a72d: 0x6cfb2220, 0x1a72e: 0x6caa4820, 0x1a72f: 0x6c0eaa20, + 0x1a730: 0x6c46e620, 0x1a731: 0x6ca62020, 0x1a732: 0x6ca67a20, 0x1a733: 0x6d015420, + 0x1a734: 0x6c04de20, 0x1a735: 0x6d066a20, 0x1a736: 0x6c8e2c20, 0x1a737: 0x6d38f820, + 0x1a738: 0x6ccfa020, 0x1a739: 0x6cc0ca20, 0x1a73a: 0x6c22ac20, 0x1a73b: 0x6c07ce20, + 0x1a73c: 0x6cd2f620, 0x1a73d: 0x6c631e20, 0x1a73e: 0x6caf2620, 0x1a73f: 0x6d167220, + // Block 0x69d, offset 0x1a740 + 0x1a740: 0x6cd87c20, 0x1a741: 0x6d15b620, 0x1a742: 0x6d328220, 0x1a743: 0x6c2d3420, + 0x1a744: 0x6c4d9020, 0x1a745: 0x6c972220, 0x1a746: 0x6c286220, 0x1a747: 0x6d3a9c20, + 0x1a748: 0x6c105a20, 0x1a749: 0x6cc0cc20, 0x1a74a: 0x6c08b420, 0x1a74b: 0x6d2f5020, + 0x1a74c: 0x6c228c20, 0x1a74d: 0x6cf06e20, 0x1a74e: 0x6c2b0e20, 0x1a74f: 0x6d3a9e20, + 0x1a750: 0x6d426220, 0x1a751: 0x6d200e20, 0x1a752: 0x6d0ffe20, 0x1a753: 0x6ce3ba20, + 0x1a754: 0x6d2e4820, 0x1a755: 0x6c50b820, 0x1a756: 0x6c091020, 0x1a757: 0x6ceae420, + 0x1a758: 0x6ccf0820, 0x1a759: 0x6d20ac20, 0x1a75a: 0x6d167420, 0x1a75b: 0x6c3dd020, + 0x1a75c: 0x6d427420, 0x1a75d: 0x6c463420, 0x1a75e: 0x6ca95020, 0x1a75f: 0x6ce70e20, + 0x1a760: 0x6ca62220, 0x1a761: 0x6cfa7620, 0x1a762: 0x6cc17220, 0x1a763: 0x6d1d7c20, + 0x1a764: 0x6cec0e20, 0x1a765: 0x6cb8a220, 0x1a766: 0x6cd40a20, 0x1a767: 0x6c761a20, + 0x1a768: 0x6c068820, 0x1a769: 0x6cae0420, 0x1a76a: 0x6c5b1a20, 0x1a76b: 0x6c51b620, + 0x1a76c: 0x6c819c20, 0x1a76d: 0x6cfdac20, 0x1a76e: 0x6c43c420, 0x1a76f: 0x6d0f8420, + 0x1a770: 0x6c041820, 0x1a771: 0x6c382c20, 0x1a772: 0x6ca02a20, 0x1a773: 0x6c632420, + 0x1a774: 0x6c37bc20, 0x1a775: 0x6c0e0a20, 0x1a776: 0x6c5fda20, 0x1a777: 0x6c523820, + 0x1a778: 0x6c5d6c20, 0x1a779: 0x6c4ac420, 0x1a77a: 0x6cc2b620, 0x1a77b: 0x6ce54820, + 0x1a77c: 0x6c68c820, 0x1a77d: 0x6c22b020, 0x1a77e: 0x6d16a220, 0x1a77f: 0x6cd2b220, + // Block 0x69e, offset 0x1a780 + 0x1a780: 0x6d03c620, 0x1a781: 0x6ccfa620, 0x1a782: 0x6ceaa620, 0x1a783: 0x6c76c020, + 0x1a784: 0x6d343a20, 0x1a785: 0x6c40dc20, 0x1a786: 0x6c7ee220, 0x1a787: 0x6d146c20, + 0x1a788: 0x6c1b7a20, 0x1a789: 0x6c7ad220, 0x1a78a: 0x6c49d420, 0x1a78b: 0x6c858620, + 0x1a78c: 0x6d19a820, 0x1a78d: 0x6cd31220, 0x1a78e: 0x6c9cda20, 0x1a78f: 0x6d398220, + 0x1a790: 0x6d067a20, 0x1a791: 0x6d201420, 0x1a792: 0x6c011820, 0x1a793: 0x6c921620, + 0x1a794: 0x6ca1c020, 0x1a795: 0x6c373420, 0x1a796: 0x6c94de20, 0x1a797: 0x6c305220, + 0x1a798: 0x6c143020, 0x1a799: 0x6c1a9420, 0x1a79a: 0x6d0a6a20, 0x1a79b: 0x6c456220, + 0x1a79c: 0x6d385620, 0x1a79d: 0x6d13ca20, 0x1a79e: 0x6cc78c20, 0x1a79f: 0x6c25a220, + 0x1a7a0: 0x6cf98820, 0x1a7a1: 0x6cd88620, 0x1a7a2: 0x6d292c20, 0x1a7a3: 0x6c937820, + 0x1a7a4: 0x6cdefc20, 0x1a7a5: 0x6c68ca20, 0x1a7a6: 0x6d312220, 0x1a7a7: 0x6c12ca20, + 0x1a7a8: 0x6cbbd020, 0x1a7a9: 0x6c7b1220, 0x1a7aa: 0x6c147020, 0x1a7ab: 0x6ca95220, + 0x1a7ac: 0x6ca9b020, 0x1a7ad: 0x6c6c8420, 0x1a7ae: 0x6cf43220, 0x1a7af: 0x6c53ec20, + 0x1a7b0: 0x6c6efe20, 0x1a7b1: 0x6c1a6420, 0x1a7b2: 0x6d321e20, 0x1a7b3: 0x6d428220, + 0x1a7b4: 0x6c1e2620, 0x1a7b5: 0x6cbd1e20, 0x1a7b6: 0x6c937a20, 0x1a7b7: 0x6c70f820, + 0x1a7b8: 0x6cd5a420, 0x1a7b9: 0x6ce6b420, 0x1a7ba: 0x6cd09220, 0x1a7bb: 0x6ce9f420, + 0x1a7bc: 0x6c0ec020, 0x1a7bd: 0x6ca3e820, 0x1a7be: 0x6cfe8820, 0x1a7bf: 0x6c0b8220, + // Block 0x69f, offset 0x1a7c0 + 0x1a7c0: 0x6ce9de20, 0x1a7c1: 0x6d222420, 0x1a7c2: 0x6cf85220, 0x1a7c3: 0x6c242e20, + 0x1a7c4: 0x6c354e20, 0x1a7c5: 0x6cc01020, 0x1a7c6: 0x6d061620, 0x1a7c7: 0x6c4a1820, + 0x1a7c8: 0x6c7a8420, 0x1a7c9: 0x6cf43420, 0x1a7ca: 0x6c759620, 0x1a7cb: 0x6d16da20, + 0x1a7cc: 0x6c3f4620, 0x1a7cd: 0x6c894820, 0x1a7ce: 0x6d410e20, 0x1a7cf: 0x6cbc3020, + 0x1a7d0: 0x6c859a20, 0x1a7d1: 0x6d1e1620, 0x1a7d2: 0x6c5d1c20, 0x1a7d3: 0x6c6e5220, + 0x1a7d4: 0x6cba4220, 0x1a7d5: 0x6cca4820, 0x1a7d6: 0x6cadf420, 0x1a7d7: 0x6cda7220, + 0x1a7d8: 0x6c3e0620, 0x1a7d9: 0x6cf59820, 0x1a7da: 0x6c850020, 0x1a7db: 0x6c3f4820, + 0x1a7dc: 0x6cb24a20, 0x1a7dd: 0x6c05ea20, 0x1a7de: 0x6d20d220, 0x1a7df: 0x6cb59020, + 0x1a7e0: 0x6cf99020, 0x1a7e1: 0x6d032220, 0x1a7e2: 0x6d04b620, 0x1a7e3: 0x6d222620, + 0x1a7e4: 0x6c2c2420, 0x1a7e5: 0x6c17d020, 0x1a7e6: 0x6c1d9220, 0x1a7e7: 0x6d377c20, + 0x1a7e8: 0x6d0d4e20, 0x1a7e9: 0x6c87e820, 0x1a7ea: 0x6c859c20, 0x1a7eb: 0x6c7ee420, + 0x1a7ec: 0x6cd8fc20, 0x1a7ed: 0x6c656a20, 0x1a7ee: 0x6d04b820, 0x1a7ef: 0x6c3f5220, + 0x1a7f0: 0x6c5daa20, 0x1a7f1: 0x6c721e20, 0x1a7f2: 0x6cffd820, 0x1a7f3: 0x6cabf620, + 0x1a7f4: 0x6c666420, 0x1a7f5: 0x6c0c8c20, 0x1a7f6: 0x6c1f2020, 0x1a7f7: 0x6c3a9420, + 0x1a7f8: 0x6c3cde20, 0x1a7f9: 0x6d0b8a20, 0x1a7fa: 0x6c017a20, 0x1a7fb: 0x6c06f820, + 0x1a7fc: 0x6d22ea20, 0x1a7fd: 0x6d02bc20, 0x1a7fe: 0x6c08ce20, 0x1a7ff: 0x6c561620, + // Block 0x6a0, offset 0x1a800 + 0x1a800: 0x6c166220, 0x1a801: 0x6d33be20, 0x1a802: 0x6c0e1020, 0x1a803: 0x6c6fe420, + 0x1a804: 0x6d10de20, 0x1a805: 0x6c252020, 0x1a806: 0x6c87ea20, 0x1a807: 0x6cecf420, + 0x1a808: 0x6c7ee620, 0x1a809: 0x6c122820, 0x1a80a: 0x6d401c20, 0x1a80b: 0x6c448220, + 0x1a80c: 0x6c490a20, 0x1a80d: 0x6c06fa20, 0x1a80e: 0x6ce4dc20, 0x1a80f: 0x6cd4b420, + 0x1a810: 0x6cd4b620, 0x1a811: 0x6c9b0420, 0x1a812: 0x6c2a0620, 0x1a813: 0x6cdfd420, + 0x1a814: 0x6c740e20, 0x1a815: 0x6c20c220, 0x1a816: 0x6d041e20, 0x1a817: 0x6cae9420, + 0x1a818: 0x6ce17020, 0x1a819: 0x6c548e20, 0x1a81a: 0x6d15da20, 0x1a81b: 0x6cb4d620, + 0x1a81c: 0x6ce3de20, 0x1a81d: 0x6c421420, 0x1a81e: 0x6c6e5e20, 0x1a81f: 0x6c6bd620, + 0x1a820: 0x6cdbb220, 0x1a821: 0x6c170a20, 0x1a822: 0x6c6a9e20, 0x1a823: 0x6c39ce20, + 0x1a824: 0x6d344420, 0x1a825: 0x6c796c20, 0x1a826: 0x6c734220, 0x1a827: 0x6d3f7420, + 0x1a828: 0x6c722020, 0x1a829: 0x6cba4620, 0x1a82a: 0x6ca5c820, 0x1a82b: 0x6c94e420, + 0x1a82c: 0x6d3cf420, 0x1a82d: 0x6cf27e20, 0x1a82e: 0x6c95a820, 0x1a82f: 0x6cd91020, + 0x1a830: 0x6c839220, 0x1a831: 0x6c5d1e20, 0x1a832: 0x6c2fea20, 0x1a833: 0x6d3f3620, + 0x1a834: 0x6c07aa20, 0x1a835: 0x6cf43820, 0x1a836: 0x6c722220, 0x1a837: 0x6ca39e20, + 0x1a838: 0x6c112020, 0x1a839: 0x6c657820, 0x1a83a: 0x6d2d3820, 0x1a83b: 0x6d125a20, + 0x1a83c: 0x6d344620, 0x1a83d: 0x6ccc4020, 0x1a83e: 0x6cbe3820, 0x1a83f: 0x6cbd1220, + // Block 0x6a1, offset 0x1a840 + 0x1a840: 0x6d1ba420, 0x1a841: 0x6c196620, 0x1a842: 0x6c648020, 0x1a843: 0x6d0d6220, + 0x1a844: 0x6cc85c20, 0x1a845: 0x6d382420, 0x1a846: 0x6c217620, 0x1a847: 0x6c641220, + 0x1a848: 0x6c61da20, 0x1a849: 0x6cefa820, 0x1a84a: 0x6d224220, 0x1a84b: 0x6c0e1820, + 0x1a84c: 0x6cc91620, 0x1a84d: 0x6ce31a20, 0x1a84e: 0x6cee7020, 0x1a84f: 0x6cb0ee20, + 0x1a850: 0x6d0e5a20, 0x1a851: 0x6c3c3a20, 0x1a852: 0x6ce17220, 0x1a853: 0x6cf2e020, + 0x1a854: 0x6c360620, 0x1a855: 0x6d009a20, 0x1a856: 0x6c17e820, 0x1a857: 0x6cd13020, + 0x1a858: 0x6c76ca20, 0x1a859: 0x6c2c3820, 0x1a85a: 0x6d429620, 0x1a85b: 0x6c138e20, + 0x1a85c: 0x6ce66c20, 0x1a85d: 0x6c070620, 0x1a85e: 0x6d018820, 0x1a85f: 0x6c59b020, + 0x1a860: 0x6d11a820, 0x1a861: 0x6d2e5420, 0x1a862: 0x6c1e2a20, 0x1a863: 0x6d0bec20, + 0x1a864: 0x6d1f2820, 0x1a865: 0x6c666820, 0x1a866: 0x6d063a20, 0x1a867: 0x6d2bd220, + 0x1a868: 0x6c220220, 0x1a869: 0x6c3fdc20, 0x1a86a: 0x6c087020, 0x1a86b: 0x6d35d420, + 0x1a86c: 0x6d3fea20, 0x1a86d: 0x6c9e1620, 0x1a86e: 0x6c601020, 0x1a86f: 0x6d15e420, + 0x1a870: 0x6d018a20, 0x1a871: 0x6d0a0420, 0x1a872: 0x6c10f420, 0x1a873: 0x6c329420, + 0x1a874: 0x6c12da20, 0x1a875: 0x6d314c20, 0x1a876: 0x6cab7c20, 0x1a877: 0x6ce7d420, + 0x1a878: 0x6ce7d620, 0x1a879: 0x6c070820, 0x1a87a: 0x6d28b220, 0x1a87b: 0x6c908420, + 0x1a87c: 0x6c6aac20, 0x1a87d: 0x6cefaa20, 0x1a87e: 0x6c3bd620, 0x1a87f: 0x6c16a020, + // Block 0x6a2, offset 0x1a880 + 0x1a880: 0x6c4a5220, 0x1a881: 0x6cda1420, 0x1a882: 0x6d361420, 0x1a883: 0x6cdab020, + 0x1a884: 0x6cf96620, 0x1a885: 0x6c40b020, 0x1a886: 0x6d261420, 0x1a887: 0x6cc70420, + 0x1a888: 0x6c860420, 0x1a889: 0x6caa6420, 0x1a88a: 0x6d282c20, 0x1a88b: 0x6c67a620, + 0x1a88c: 0x6c96bc20, 0x1a88d: 0x6c056e20, 0x1a88e: 0x6c2cc820, 0x1a88f: 0x6ce0ee20, + 0x1a890: 0x6c503c20, 0x1a891: 0x6c6ac220, 0x1a892: 0x6cf60820, 0x1a893: 0x6ccd8820, + 0x1a894: 0x6cba5020, 0x1a895: 0x6c744020, 0x1a896: 0x6c122c20, 0x1a897: 0x6c1f3c20, + 0x1a898: 0x6cca1820, 0x1a899: 0x6c071c20, 0x1a89a: 0x6cffe820, 0x1a89b: 0x6d1e3420, + 0x1a89c: 0x6d10f220, 0x1a89d: 0x6ce09620, 0x1a89e: 0x6cdd1420, 0x1a89f: 0x6d101c20, + 0x1a8a0: 0x6c37ea20, 0x1a8a1: 0x6c0e1c20, 0x1a8a2: 0x6c635a20, 0x1a8a3: 0x6c271820, + 0x1a8a4: 0x6d293620, 0x1a8a5: 0x6ce17620, 0x1a8a6: 0x6c483820, 0x1a8a7: 0x6c0d3420, + 0x1a8a8: 0x6c1ede20, 0x1a8a9: 0x6caabc20, 0x1a8aa: 0x6c116c20, 0x1a8ab: 0x6c82c820, + 0x1a8ac: 0x6c24ca20, 0x1a8ad: 0x6d1d8820, 0x1a8ae: 0x6d2a1420, 0x1a8af: 0x6d3ff620, + 0x1a8b0: 0x6c07f420, 0x1a8b1: 0x6cd95e20, 0x1a8b2: 0x6c02ce20, 0x1a8b3: 0x6c1ffe20, + 0x1a8b4: 0x6d226620, 0x1a8b5: 0x6d2d4220, 0x1a8b6: 0x6d40c220, 0x1a8b7: 0x6cce0620, + 0x1a8b8: 0x6c208e20, 0x1a8b9: 0x6c6e8c20, 0x1a8ba: 0x6c1c2c20, 0x1a8bb: 0x6ccc3220, + 0x1a8bc: 0x6c4ecc20, 0x1a8bd: 0x6d2eb820, 0x1a8be: 0x6cbe4c20, 0x1a8bf: 0x6d0e8020, + // Block 0x6a3, offset 0x1a8c0 + 0x1a8c0: 0x6c2c6620, 0x1a8c1: 0x6d01bc20, 0x1a8c2: 0x6c909220, 0x1a8c3: 0x6c072020, + 0x1a8c4: 0x6cb1b020, 0x1a8c5: 0x6c6c9420, 0x1a8c6: 0x6c88f020, 0x1a8c7: 0x6c926020, + 0x1a8c8: 0x6c976620, 0x1a8c9: 0x6cb8ea20, 0x1a8ca: 0x6cfaba20, 0x1a8cb: 0x6ce09c20, + 0x1a8cc: 0x6d1c7a20, 0x1a8cd: 0x6c307e20, 0x1a8ce: 0x6d3bd220, 0x1a8cf: 0x6cfe3c20, + 0x1a8d0: 0x6ccd9220, 0x1a8d1: 0x6cbbe220, 0x1a8d2: 0x6c6f2220, 0x1a8d3: 0x6ce9e820, + 0x1a8d4: 0x6d420620, 0x1a8d5: 0x6cb44220, 0x1a8d6: 0x6cf66020, 0x1a8d7: 0x6c815e20, + 0x1a8d8: 0x6c16f020, 0x1a8d9: 0x6c49ec20, 0x1a8da: 0x6c89ec20, 0x1a8db: 0x6cb50420, + 0x1a8dc: 0x6c197820, 0x1a8dd: 0x6c150820, 0x1a8de: 0x6cefee20, 0x1a8df: 0x6c5efe20, + 0x1a8e0: 0x6c0e8220, 0x1a8e1: 0x6c5bf020, 0x1a8e2: 0x6c202420, 0x1a8e3: 0x6ce5fc20, + 0x1a8e4: 0x6c289a20, 0x1a8e5: 0x6c691220, 0x1a8e6: 0x6c700a20, 0x1a8e7: 0x6ccbb820, + 0x1a8e8: 0x6c3be020, 0x1a8e9: 0x6cfce620, 0x1a8ea: 0x6c713c20, 0x1a8eb: 0x6c366c20, + 0x1a8ec: 0x6c685820, 0x1a8ed: 0x6c66a420, 0x1a8ee: 0x6ce76420, 0x1a8ef: 0x6c8c5620, + 0x1a8f0: 0x6c0f2420, 0x1a8f1: 0x6c482220, 0x1a8f2: 0x6cfd5820, 0x1a8f3: 0x6cdade20, + 0x1a8f4: 0x6cfce820, 0x1a8f5: 0x6c676e20, 0x1a8f6: 0x6c9fc020, 0x1a8f7: 0x6d130e20, + 0x1a8f8: 0x6c6d3220, 0x1a8f9: 0x6c644e20, 0x1a8fa: 0x6cbc5220, 0x1a8fb: 0x6cb0b420, + 0x1a8fc: 0x6c3c6020, 0x1a8fd: 0x6d394220, 0x1a8fe: 0x6c00c020, 0x1a8ff: 0x6cc9e820, + // Block 0x6a4, offset 0x1a900 + 0x1a900: 0x6d154220, 0x1a901: 0x6c75d220, 0x1a902: 0x6ca9be20, 0x1a903: 0x6c151620, + 0x1a904: 0x6d184620, 0x1a905: 0x6c297c20, 0x1a906: 0x6c6e2420, 0x1a907: 0x6d07b620, + 0x1a908: 0x6c7b3020, 0x1a909: 0x6c65c820, 0x1a90a: 0x6c1f6820, 0x1a90b: 0x6c27f420, + 0x1a90c: 0x6c692020, 0x1a90d: 0x6ccc3420, 0x1a90e: 0x6d294020, 0x1a90f: 0x6c121820, + 0x1a910: 0x6c0d5020, 0x1a911: 0x6c017220, 0x1a912: 0x6cc7c420, 0x1a913: 0x6cdf3c20, + 0x1a914: 0x6c1dd820, 0x1a915: 0x6c148a20, 0x1a916: 0x6c7fb220, 0x1a917: 0x6ca64620, + 0x1a918: 0x6c6cb420, 0x1a919: 0x6cba7020, 0x1a91a: 0x6c9b3420, 0x1a91b: 0x6cf47620, + 0x1a91c: 0x6ca91820, 0x1a91d: 0x6cbf5a20, 0x1a91e: 0x6ca64820, 0x1a91f: 0x6c16c820, + 0x1a920: 0x6c8b2e20, 0x1a921: 0x6c82dc20, 0x1a922: 0x6c93b820, 0x1a923: 0x6c7bd020, + 0x1a924: 0x6c066c20, 0x1a925: 0x6d240420, 0x1a926: 0x6c0c2a20, 0x1a927: 0x6d297820, + 0x1a928: 0x6d349e20, 0x1a929: 0x6cd8f220, 0x1a92a: 0x6d1eb420, 0x1a92b: 0x6c4fe820, + 0x1a92c: 0x6c193220, 0x1a92d: 0x6c193620, 0x1a92e: 0x6c86bc20, 0x1a92f: 0x6ce2be20, + 0x1a930: 0x6cf02420, 0x1a931: 0x6c903a20, 0x1a932: 0x6c1eee20, 0x1a933: 0x6c154020, + 0x1a934: 0x6cc4e020, 0x1a935: 0x6cd51220, 0x1a936: 0x6c5c8820, 0x1a937: 0x6c874220, + 0x1a938: 0x6c956820, 0x1a939: 0x6d298020, 0x1a93a: 0x6caace20, 0x1a93b: 0x6ce18820, + 0x1a93c: 0x6d0e1220, 0x1a93d: 0x6c829420, 0x1a93e: 0x6ca47c20, 0x1a93f: 0x6c372e20, + // Block 0x6a5, offset 0x1a940 + 0x1a940: 0x6cf49020, 0x1a941: 0x6d27d220, 0x1a942: 0x6d294a20, 0x1a943: 0x6d252e20, + 0x1a944: 0x6d044a20, 0x1a945: 0x6c1ca820, 0x1a946: 0x6d2f9620, 0x1a947: 0x6d044e20, + 0x1a948: 0x6cfa6e20, 0x1a949: 0x6c49d020, 0x1a94a: 0x6c332e20, 0x1a94b: 0x6c787820, + 0x1a94c: 0x6c333020, 0x1a94d: 0x6c9dfe20, 0x1a94e: 0x6ce91c20, 0x1a94f: 0x6c169420, + 0x1a950: 0x6c373220, 0x1a951: 0x6c333220, 0x1a952: 0x6c373620, 0x1a953: 0x6c6c2c20, + 0x1a954: 0x6ce92020, 0x1a955: 0x6cd87e20, 0x1a956: 0x6d0d4420, 0x1a957: 0x6d0d5020, + 0x1a958: 0x6cd2bc20, 0x1a95a: 0x6c292a20, 0x1a95b: 0x6cb8c220, + 0x1a95c: 0x6c30a820, 0x1a95d: 0x6c3b2820, 0x1a95e: 0x6c98d620, 0x1a95f: 0x6ccfe220, + 0x1a960: 0x6c30aa20, 0x1a962: 0x6c6dc620, 0x1a963: 0x6c852e20, + 0x1a964: 0x6c5a2a20, 0x1a965: 0x6cc80e20, 0x1a966: 0x6cedd820, 0x1a967: 0x6ca57e20, + 0x1a968: 0x6cc2b220, 0x1a969: 0x6c898820, 0x1a96a: 0x6d20d420, 0x1a96b: 0x6c030a20, + 0x1a96c: 0x6c454e20, 0x1a96d: 0x6c8f2420, 0x1a96e: 0x6cf55c20, 0x1a96f: 0x6c4f4220, + 0x1a970: 0x6c7f8620, 0x1a971: 0x6c460a20, 0x1a972: 0x6ce45620, 0x1a973: 0x6c490020, + 0x1a974: 0x6d041020, 0x1a975: 0x6c0daa20, 0x1a976: 0x6cb57a20, 0x1a977: 0x6c720620, + 0x1a978: 0x6c2d0620, 0x1a979: 0x6d3e0820, 0x1a97a: 0x6c3b2020, 0x1a97b: 0x6d100620, + 0x1a97c: 0x6c647a20, 0x1a97d: 0x6cd45820, 0x1a97e: 0x6c621420, 0x1a97f: 0x6d17da20, + // Block 0x6a6, offset 0x1a980 + 0x1a980: 0x6c627020, 0x1a981: 0x6c15ec20, 0x1a982: 0x6c6ed020, 0x1a983: 0x6c993e20, + 0x1a984: 0x6cc4a620, 0x1a985: 0x6ca58020, 0x1a986: 0x6d253020, 0x1a987: 0x6c991c20, + 0x1a988: 0x6c424c20, 0x1a989: 0x6cc4a820, 0x1a98a: 0x6c12c620, 0x1a98b: 0x6c6ed220, + 0x1a98c: 0x6c12c820, 0x1a98d: 0x6d292620, 0x1a98e: 0x6c488820, 0x1a98f: 0x6c6ef020, + 0x1a990: 0x6c994820, 0x1a991: 0x6d390820, 0x1a992: 0x6c994e20, 0x1a993: 0x6c46a020, + 0x1a994: 0x6d063220, 0x1a995: 0x6c9e1820, 0x1a996: 0x6c9d1620, 0x1a997: 0x6cc6ec20, + 0x1a998: 0x6d1a1a20, 0x1a999: 0x6d013e20, 0x1a99a: 0x6c76bc20, 0x1a99b: 0x6c755020, + 0x1a99c: 0x6ca9ae20, 0x1a99d: 0x6d145a20, 0x1a99e: 0x6c9c3420, 0x1a99f: 0x6cd32820, + 0x1a9a0: 0x6c490620, 0x1a9a1: 0x6c9b0e20, 0x1a9a2: 0x6d37ec20, 0x1a9a3: 0x6c722620, + 0x1a9a4: 0x6d24d020, 0x1a9a5: 0x6c9ff220, 0x1a9a6: 0x6c79de20, 0x1a9a7: 0x6c8ba420, + 0x1a9a8: 0x6c3fe020, 0x1a9a9: 0x6d014420, 0x1a9aa: 0x6c9d7620, 0x1a9ab: 0x6c0d9e20, + 0x1a9ac: 0x6c2fd820, 0x1a9ad: 0x6cdf0c20, 0x1a9ae: 0x6c425020, 0x1a9af: 0x6c3c9a20, + 0x1a9b0: 0x6c0da620, 0x1a9b1: 0x6c564620, 0x1a9b2: 0x6c1caa20, 0x1a9b3: 0x6c73cc20, + 0x1a9b4: 0x6c564820, 0x1a9b5: 0x6c7bdc20, 0x1a9b6: 0x6d12a220, 0x1a9b7: 0x6c839020, + 0x1a9b8: 0x6cac9a20, 0x1a9b9: 0x6c3dd220, 0x1a9ba: 0x6c9f8c20, 0x1a9bb: 0x6c305020, + 0x1a9bc: 0x6cfbe620, 0x1a9bd: 0x6c8ac620, 0x1a9be: 0x6cb84020, 0x1a9bf: 0x6c646820, + // Block 0x6a7, offset 0x1a9c0 + 0x1a9c0: 0x6c6e4a20, 0x1a9c1: 0x6cd5a620, 0x1a9c2: 0x6c9a4c20, 0x1a9c3: 0x6ce88a20, + 0x1a9c4: 0x6cb4d820, 0x1a9c5: 0x6c480220, 0x1a9c6: 0x6d3cda20, 0x1a9c7: 0x6cd91220, + 0x1a9c8: 0x6c6e6020, 0x1a9c9: 0x6c894a20, 0x1a9ca: 0x6cbec420, 0x1a9cb: 0x6c2db820, + 0x1a9cc: 0x6c8cc420, 0x1a9cd: 0x6c306c20, 0x1a9ce: 0x6c421620, 0x1a9cf: 0x6c658220, + 0x1a9d0: 0x6d19c620, 0x1a9d1: 0x6c23ea20, 0x1a9d2: 0x6d14f220, 0x1a9d3: 0x6c860620, + 0x1a9d4: 0x6c20a820, 0x1a9d5: 0x6ca03420, 0x1a9d6: 0x6d3ce820, 0x1a9d7: 0x6c24cc20, + 0x1a9d8: 0x6cd7fe20, 0x1a9d9: 0x6c345c20, 0x1a9da: 0x6c6d3420, 0x1a9db: 0x6c8c2620, + 0x1a9dc: 0x6c8c2820, 0x1a9dd: 0x6ca91a20, 0x1a9de: 0x6cf6b620, 0x1a9df: 0x6c31be20, + 0x1a9e0: 0x6c610c20, 0x1a9e1: 0x6c387820, 0x1a9e2: 0x6c387a20, 0x1a9e3: 0x6c387c20, + 0x1a9e4: 0x6c3cd620, 0x1a9e5: 0x6c704a20, 0x1a9e6: 0x6c1ed220, 0x1a9e7: 0x6d337a20, + 0x1a9e8: 0x6c3c1420, 0x1a9e9: 0x6ca2c220, 0x1a9ea: 0x6d377a20, 0x1a9eb: 0x6c3dcc20, + 0x1a9ec: 0x6c3c1620, 0x1a9ed: 0x6cb27220, 0x1a9ee: 0x6c3c2020, 0x1a9ef: 0x6c764420, + 0x1a9f0: 0x6c59b220, 0x1a9f1: 0x6c765220, 0x1a9f2: 0x6c419a20, 0x1a9f3: 0x6c2ad820, + 0x1a9f4: 0x6cb2bc20, 0x1a9f5: 0x6cb9ec20, 0x1a9f6: 0x6d044820, 0x1a9f7: 0x6c7b0a20, + 0x1a9f8: 0x6ce83620, 0x1a9f9: 0x6c022420, 0x1a9fa: 0x6c1e5020, 0x1a9fb: 0x6c5e6820, + 0x1a9fc: 0x6c295020, 0x1a9fd: 0x6c4dd220, 0x1a9fe: 0x6c4dda20, 0x1a9ff: 0x6d2a3420, + // Block 0x6a8, offset 0x1aa00 + 0x1aa00: 0x6c29b020, 0x1aa01: 0x6c2da220, 0x1aa02: 0x6c29b220, 0x1aa03: 0x6cc5a020, + 0x1aa04: 0x6cc5a220, 0x1aa05: 0x6c204a20, 0x1aa06: 0x6c3b0820, 0x1aa07: 0x6cbc9020, + 0x1aa08: 0x6d163e20, 0x1aa09: 0x6c5e6a20, 0x1aa0a: 0x6c76a020, 0x1aa0b: 0x6cba3a20, + 0x1aa0c: 0x6c25ac20, 0x1aa0d: 0x6c1e7220, 0x1aa0e: 0x6cf1c620, 0x1aa0f: 0x6c5e7220, + 0x1aa10: 0x6c281c20, 0x1aa11: 0x6d03b820, 0x1aa12: 0x6c577820, 0x1aa13: 0x6cecb620, + 0x1aa14: 0x6c73ce20, 0x1aa15: 0x6c839e20, 0x1aa16: 0x6d267020, 0x1aa17: 0x6c8abc20, + 0x1aa18: 0x6c8e3e20, 0x1aa19: 0x6d2aa220, 0x1aa1a: 0x6c425220, 0x1aa1b: 0x6c209e20, + 0x1aa1c: 0x6c3dd420, 0x1aa1d: 0x6c1e5420, 0x1aa1e: 0x6cc26020, 0x1aa1f: 0x6c704c20, + 0x1aa20: 0x6cccb820, 0x1aa21: 0x6c9f8e20, 0x1aa22: 0x6c8c9a20, 0x1aa23: 0x6d378a20, + 0x1aa24: 0x6cac9c20, 0x1aa25: 0x6c0cd820, 0x1aa26: 0x6c6a6420, 0x1aa27: 0x6c6a6620, + 0x1aa28: 0x6cad4420, 0x1aa29: 0x6c857620, 0x1aa2a: 0x6cccba20, 0x1aa2b: 0x6c0cda20, + 0x1aa2c: 0x6c158e20, 0x1aa2d: 0x6c6e0620, 0x1aa2e: 0x6c484420, 0x1aa2f: 0x6c44b820, + 0x1aa30: 0x6c2a0020, 0x1aa31: 0x6c20a220, 0x1aa32: 0x6c7c3220, 0x1aa33: 0x6c7a2020, + 0x1aa34: 0x6c34ca20, 0x1aa35: 0x6c37be20, 0x1aa36: 0x6d358020, 0x1aa37: 0x6cd64020, + 0x1aa38: 0x6cc36e20, 0x1aa39: 0x6ccbce20, 0x1aa3a: 0x6c22b220, 0x1aa3b: 0x6c787a20, + 0x1aa3c: 0x6c6a7620, 0x1aa3d: 0x6c4b2a20, 0x1aa3e: 0x6c22b420, 0x1aa3f: 0x6c4b2c20, + // Block 0x6a9, offset 0x1aa40 + 0x1aa40: 0x6c764620, 0x1aa41: 0x6c34cc20, 0x1aa42: 0x6c619020, 0x1aa43: 0x6ce3d820, + 0x1aa44: 0x6c6e1420, 0x1aa45: 0x6c907c20, 0x1aa46: 0x6c95a620, 0x1aa47: 0x6d2ab220, + 0x1aa48: 0x6d24cc20, 0x1aa49: 0x6c260c20, 0x1aa4a: 0x6d08da20, 0x1aa4b: 0x6c788220, + 0x1aa4c: 0x6c7e5a20, 0x1aa4d: 0x6cb97820, 0x1aa4e: 0x6ccbd020, 0x1aa4f: 0x6c20a420, + 0x1aa50: 0x6c489420, 0x1aa51: 0x6c665820, 0x1aa52: 0x6c261020, 0x1aa53: 0x6c83aa20, + 0x1aa54: 0x6ce2e820, 0x1aa55: 0x6c3a9620, 0x1aa56: 0x6cb3c620, 0x1aa57: 0x6c15a020, + 0x1aa58: 0x6cb59c20, 0x1aa59: 0x6c20a620, 0x1aa5a: 0x6d3f3820, 0x1aa5b: 0x6c426c20, + 0x1aa5c: 0x6cec8420, 0x1aa5d: 0x6c0e5a20, 0x1aa5e: 0x6c5e9e20, 0x1aa5f: 0x6c342220, + 0x1aa60: 0x6cbe7220, 0x1aa61: 0x6ccd7420, 0x1aa62: 0x6c316620, 0x1aa63: 0x6c666a20, + 0x1aa64: 0x6c61c220, 0x1aa65: 0x6c0e5c20, 0x1aa66: 0x6d0be220, 0x1aa67: 0x6c722820, + 0x1aa68: 0x6c5d5420, 0x1aa69: 0x6cd16220, 0x1aa6a: 0x6c658420, 0x1aa6b: 0x6c344420, + 0x1aa6c: 0x6c329620, 0x1aa6d: 0x6cf36220, 0x1aa6e: 0x6c489820, 0x1aa6f: 0x6c3fe220, + 0x1aa70: 0x6cd15a20, 0x1aa71: 0x6c667420, 0x1aa72: 0x6c438c20, 0x1aa73: 0x6c269420, + 0x1aa74: 0x6c765420, 0x1aa75: 0x6c20aa20, 0x1aa76: 0x6c1fe220, 0x1aa77: 0x6c15bc20, + 0x1aa78: 0x6ce94e20, 0x1aa79: 0x6c926220, 0x1aa7a: 0x6c83de20, 0x1aa7b: 0x6caf0a20, + 0x1aa7c: 0x6ccce820, 0x1aa7d: 0x6cb15620, 0x1aa7e: 0x6c79bc20, 0x1aa7f: 0x6c690220, + // Block 0x6aa, offset 0x1aa80 + 0x1aa80: 0x6c486620, 0x1aa81: 0x6cbb8a20, 0x1aa82: 0x6c747220, 0x1aa83: 0x6c57a820, + 0x1aa84: 0x6d2be620, 0x1aa85: 0x6d3df620, 0x1aa86: 0x6c882a20, 0x1aa87: 0x6c727420, + 0x1aa88: 0x6caf8420, 0x1aa89: 0x6c8e8020, 0x1aa8a: 0x6c4b5e20, 0x1aa8b: 0x6c692220, + 0x1aa8c: 0x6c4b6020, 0x1aa8d: 0x6c66b020, 0x1aa8e: 0x6c66b220, 0x1aa8f: 0x6ce0c820, + 0x1aa90: 0x6c5d5a20, 0x1aa91: 0x6c627220, 0x1aa92: 0x6c66cc20, 0x1aa93: 0x6d187e20, + 0x1aa94: 0x6c66ce20, 0x1aa95: 0x6d370020, 0x1aa96: 0x6c154220, 0x1aa97: 0x6c662020, + 0x1aa98: 0x6ca09820, 0x1aa99: 0x6c84c820, 0x1aa9a: 0x6d3a8c20, 0x1aa9b: 0x6c855c20, + 0x1aa9c: 0x6d0b6220, 0x1aa9d: 0x6cc36c20, 0x1aa9e: 0x6c04da20, 0x1aa9f: 0x6c455420, + 0x1aaa0: 0x6c631620, 0x1aaa1: 0x6cf55220, 0x1aaa2: 0x6c971e20, 0x1aaa3: 0x6c8abe20, + 0x1aaa4: 0x6c6cce20, 0x1aaa5: 0x6c792020, 0x1aaa6: 0x6d006420, 0x1aaa7: 0x6d34d220, + 0x1aaa8: 0x6c304c20, 0x1aaa9: 0x6d3aa020, 0x1aaaa: 0x6caa4a20, 0x1aaab: 0x6c6a6820, + 0x1aaac: 0x6cc17420, 0x1aaad: 0x6ccec020, 0x1aaae: 0x6d167620, 0x1aaaf: 0x6d398020, + 0x1aab0: 0x6ca0c020, 0x1aab1: 0x6c857a20, 0x1aab2: 0x6c6cd020, 0x1aab3: 0x6c813e20, + 0x1aab4: 0x6c814020, 0x1aab5: 0x6c733e20, 0x1aab6: 0x6c79ce20, 0x1aab7: 0x6d0f8620, + 0x1aab8: 0x6cebc620, 0x1aab9: 0x6cffd420, 0x1aaba: 0x6ca1c220, 0x1aabb: 0x6c7b8420, + 0x1aabc: 0x6c6a7a20, 0x1aabd: 0x6c8aca20, 0x1aabe: 0x6c50ba20, 0x1aabf: 0x6cd31420, + // Block 0x6ab, offset 0x1aac0 + 0x1aac0: 0x6c788420, 0x1aac1: 0x6c6ce020, 0x1aac2: 0x6c433620, 0x1aac3: 0x6c0ec220, + 0x1aac4: 0x6c9f9820, 0x1aac5: 0x6c1bf420, 0x1aac6: 0x6c80a020, 0x1aac7: 0x6d1e1820, + 0x1aac8: 0x6d1e1a20, 0x1aac9: 0x6c9e0c20, 0x1aaca: 0x6c788620, 0x1aacb: 0x6d099220, + 0x1aacc: 0x6c734420, 0x1aacd: 0x6cbe7420, 0x1aace: 0x6c922820, 0x1aacf: 0x6c107c20, + 0x1aad0: 0x6c9bcc20, 0x1aad1: 0x6c1c0420, 0x1aad2: 0x6c823c20, 0x1aad3: 0x6c768620, + 0x1aad4: 0x6c9e1a20, 0x1aad5: 0x6c307220, 0x1aad6: 0x6d06b420, 0x1aad7: 0x6d06ba20, + 0x1aad8: 0x6c76a620, 0x1aad9: 0x6cf55620, 0x1aada: 0x6d175020, 0x1aadb: 0x6d099820, + 0x1aadc: 0x6cf24a20, 0x1aadd: 0x6cd16420, 0x1aade: 0x6c815620, 0x1aadf: 0x6ca28420, + 0x1aae0: 0x6c926420, 0x1aae1: 0x6cb1b220, 0x1aae2: 0x6cd39620, 0x1aae3: 0x6c5ee220, + 0x1aae4: 0x6cbd7c20, 0x1aae5: 0x6c67ee20, 0x1aae6: 0x6c174c20, 0x1aae7: 0x6cc37420, + 0x1aae8: 0x6cfe3e20, 0x1aae9: 0x6d181c20, 0x1aaea: 0x6c747620, 0x1aaeb: 0x6c385220, + 0x1aaec: 0x6c72fa20, 0x1aaed: 0x6ce76620, 0x1aaee: 0x6c727620, 0x1aaef: 0x6c27f620, + 0x1aaf0: 0x6d00d620, 0x1aaf1: 0x6c973820, 0x1aaf2: 0x6d09a420, 0x1aaf3: 0x6d09a820, + 0x1aaf4: 0x6c940220, 0x1aaf5: 0x6c867020, 0x1aaf6: 0x6c184e20, 0x1aaf7: 0x6cc4e220, + 0x1aaf8: 0x6cc37c20, 0x1aaf9: 0x6c059c20, 0x1aafa: 0x6cce9420, 0x1aafb: 0x6d277620, + 0x1aafc: 0x6c6f4220, 0x1aafd: 0x6c062c20, 0x1aafe: 0x6c463220, 0x1aaff: 0x6cf49220, + // Block 0x6ac, offset 0x1ab00 + 0x1ab00: 0x6d277820, 0x1ab01: 0x6cf17820, 0x1ab02: 0x6c0ade20, 0x1ab03: 0x6c412220, + 0x1ab04: 0x6c412420, 0x1ab05: 0x6c059e20, 0x1ab06: 0x6c22f420, 0x1ab07: 0x6d198a20, + 0x1ab08: 0x6d045020, 0x1ab09: 0x6cae5020, 0x1ab0a: 0x6c705020, 0x1ab0b: 0x6ce20420, + 0x1ab0c: 0x6c43c620, 0x1ab0d: 0x6cb42c20, 0x1ab0e: 0x6c35f820, 0x1ab0f: 0x6cad5a20, + 0x1ab10: 0x6c3e4820, 0x1ab11: 0x6c458820, 0x1ab12: 0x6c269620, 0x1ab13: 0x6c6fee20, + 0x1ab14: 0x6cbef220, 0x1ab15: 0x6c08aa20, 0x1ab16: 0x6c577620, 0x1ab17: 0x6c06c620, + 0x1ab18: 0x6ca4ea20, 0x1ab19: 0x6cd41420, 0x1ab1a: 0x6c397e20, 0x1ab1b: 0x6c6fc620, + 0x1ab1c: 0x6d144c20, 0x1ab1d: 0x6d288020, 0x1ab1e: 0x6c67d020, 0x1ab1f: 0x6c777820, + 0x1ab20: 0x6c681820, 0x1ab21: 0x6c7b8020, 0x1ab22: 0x6c549220, 0x1ab23: 0x6cf98420, + 0x1ab24: 0x6cc0ce20, 0x1ab25: 0x6c0b6820, 0x1ab26: 0x6c4ac620, 0x1ab27: 0x6cbc9c20, + 0x1ab28: 0x6d29d020, 0x1ab29: 0x6c7b8a20, 0x1ab2a: 0x6c3a4c20, 0x1ab2b: 0x6c54b420, + 0x1ab2c: 0x6d224620, 0x1ab2d: 0x6c4aee20, 0x1ab2e: 0x6c7cf020, 0x1ab2f: 0x6c5bd220, + 0x1ab30: 0x6c27ea20, 0x1ab31: 0x6c4b5c20, 0x1ab32: 0x6c881a20, 0x1ab33: 0x6c882c20, + 0x1ab34: 0x6cdb9420, 0x1ab35: 0x6c31c220, 0x1ab36: 0x6c703420, 0x1ab37: 0x6c74fa20, + 0x1ab38: 0x6cf83420, 0x1ab39: 0x6cb04020, 0x1ab3a: 0x6cc0c420, 0x1ab3b: 0x6d13c020, + 0x1ab3c: 0x6c77d420, 0x1ab3d: 0x6d0d5220, 0x1ab3e: 0x6c0b3220, 0x1ab3f: 0x6ca68c20, + // Block 0x6ad, offset 0x1ab40 + 0x1ab40: 0x6cc0f820, 0x1ab41: 0x6cd22420, 0x1ab42: 0x6d0a6020, 0x1ab43: 0x6cb88c20, + 0x1ab44: 0x6ca75420, 0x1ab45: 0x6cc96220, 0x1ab46: 0x6d40a220, 0x1ab47: 0x6cd0d020, + 0x1ab48: 0x6cf41620, 0x1ab49: 0x6c5b8420, 0x1ab4a: 0x6c04dc20, 0x1ab4b: 0x6cd2fa20, + 0x1ab4c: 0x6cf83620, 0x1ab4d: 0x6ced6a20, 0x1ab4e: 0x6c572420, 0x1ab4f: 0x6d006620, + 0x1ab50: 0x6ced6c20, 0x1ab51: 0x6c068e20, 0x1ab52: 0x6d40a820, 0x1ab53: 0x6d3cee20, + 0x1ab54: 0x6d007020, 0x1ab55: 0x6c27ba20, 0x1ab56: 0x6c972820, 0x1ab57: 0x6ca3ea20, + 0x1ab58: 0x6c27c020, 0x1ab59: 0x6c601220, 0x1ab5a: 0x6c0efe20, 0x1ab5b: 0x6cd67c20, + 0x1ab5c: 0x6c100420, 0x1ab5d: 0x6c7bd420, 0x1ab5e: 0x6c0b6420, 0x1ab5f: 0x6c102a20, + 0x1ab60: 0x6d2e4620, 0x1ab61: 0x6c761820, 0x1ab62: 0x6c913020, 0x1ab63: 0x6d1f9c20, + 0x1ab64: 0x6c91b420, 0x1ab65: 0x6cf58420, 0x1ab66: 0x6c48a620, 0x1ab67: 0x6cf2d420, + 0x1ab68: 0x6d017620, 0x1ab69: 0x6c6a4e20, 0x1ab6a: 0x6c6a5020, 0x1ab6b: 0x6cf06820, + 0x1ab6c: 0x6c01f020, 0x1ab6d: 0x6cbef420, 0x1ab6e: 0x6d338020, 0x1ab6f: 0x6c991e20, + 0x1ab70: 0x6d1b3620, 0x1ab71: 0x6cee6620, 0x1ab72: 0x6ccec420, 0x1ab73: 0x6c5fd220, + 0x1ab74: 0x6cc3a020, 0x1ab75: 0x6c948c20, 0x1ab76: 0x6c1b7c20, 0x1ab77: 0x6c731020, + 0x1ab78: 0x6d016a20, 0x1ab79: 0x6d067e20, 0x1ab7a: 0x6c6c8620, 0x1ab7b: 0x6cc3a620, + 0x1ab7c: 0x6cf4be20, 0x1ab7d: 0x6c5fec20, 0x1ab7e: 0x6c360a20, 0x1ab7f: 0x6cbe3a20, + // Block 0x6ae, offset 0x1ab80 + 0x1ab80: 0x6cf63820, 0x1ab81: 0x6cca6620, 0x1ab82: 0x6c16e020, 0x1ab83: 0x6cef8020, + 0x1ab84: 0x6c35c020, 0x1ab85: 0x6ce62220, 0x1ab86: 0x6c856020, 0x1ab87: 0x6d300c20, + 0x1ab88: 0x6c4e4e20, 0x1ab89: 0x6c856420, 0x1ab8a: 0x6d0b4620, 0x1ab8b: 0x6d0ac820, + 0x1ab8c: 0x6d0e3620, 0x1ab8d: 0x6ccf3020, 0x1ab8e: 0x6c2bca20, 0x1ab8f: 0x6d2c7020, + 0x1ab90: 0x6cacf020, 0x1ab91: 0x6d0b0c20, 0x1ab92: 0x6c50bc20, 0x1ab93: 0x6d0b1620, + 0x1ab94: 0x6d358220, 0x1ab95: 0x6c12cc20, 0x1ab96: 0x6cacf620, 0x1ab97: 0x6ce31020, + 0x1ab98: 0x6c83a420, 0x1ab99: 0x6ccf3820, 0x1ab9a: 0x6c546020, 0x1ab9b: 0x6ce63420, + 0x1ab9c: 0x6d416820, 0x1ab9d: 0x6c261220, 0x1ab9e: 0x6c3a9820, 0x1ab9f: 0x6d254c20, + 0x1aba0: 0x6c12dc20, 0x1aba1: 0x6d255e20, 0x1aba2: 0x6cfd6a20, 0x1aba3: 0x6d0d6420, + 0x1aba4: 0x6c860c20, 0x1aba5: 0x6c744220, 0x1aba6: 0x6ccc5020, 0x1aba7: 0x6c2cca20, + 0x1aba8: 0x6c1e7c20, 0x1aba9: 0x6c6ff020, 0x1abaa: 0x6c6c9620, 0x1abab: 0x6c024620, + 0x1abac: 0x6c4b1020, 0x1abad: 0x6d0e9020, 0x1abae: 0x6cd80020, 0x1abaf: 0x6c862620, + 0x1abb0: 0x6c16f220, 0x1abb1: 0x6c7faa20, 0x1abb2: 0x6c864620, 0x1abb3: 0x6d0cd020, + 0x1abb4: 0x6d0df620, 0x1abb5: 0x6d25dc20, 0x1abb6: 0x6cd7b420, 0x1abb7: 0x6c455020, + 0x1abb8: 0x6c8b9c20, 0x1abb9: 0x6cc73e20, 0x1abba: 0x6cc25a20, 0x1abbb: 0x6cc25c20, + 0x1abbc: 0x6c377c20, 0x1abbd: 0x6c82b020, 0x1abbe: 0x6c315e20, 0x1abbf: 0x6cfc7420, + // Block 0x6af, offset 0x1abc0 + 0x1abc0: 0x6d3b6e20, 0x1abc1: 0x6cc9fa20, 0x1abc2: 0x6c115a20, 0x1abc3: 0x6c115e20, + 0x1abc4: 0x6c116020, 0x1abc5: 0x6c116620, 0x1abc6: 0x6c00b420, 0x1abc7: 0x6c278620, + 0x1abc8: 0x6d200420, 0x1abc9: 0x6c137220, 0x1abca: 0x6c5fb820, 0x1abcb: 0x6d206820, + 0x1abcc: 0x6cd6a020, 0x1abcd: 0x6c390020, 0x1abce: 0x6cd42620, 0x1abcf: 0x6c48e420, + 0x1abd0: 0x6c035c20, 0x1abd1: 0x6c37e220, 0x1abd2: 0x6cc91020, 0x1abd3: 0x6cd30820, + 0x1abd4: 0x6cd4a620, 0x1abd5: 0x6d3d2a20, 0x1abd6: 0x6cc23c20, 0x1abd7: 0x6cd45220, + 0x1abd8: 0x6c0b7a20, 0x1abd9: 0x6d068a20, 0x1abda: 0x6c640420, 0x1abdb: 0x6cacaa20, + 0x1abdc: 0x6cda0c20, 0x1abdd: 0x6c433820, 0x1abde: 0x6cf08020, 0x1abdf: 0x6cda0e20, + 0x1abe0: 0x6c2ebc20, 0x1abe1: 0x6cc8e220, 0x1abe2: 0x6c23bc20, 0x1abe3: 0x6c79c820, + 0x1abe4: 0x6c475020, 0x1abe5: 0x6c71ea20, 0x1abe6: 0x6c8e1a20, 0x1abe7: 0x6c488a20, + 0x1abe8: 0x6c29b420, 0x1abe9: 0x6c79d420, 0x1abea: 0x6d34ce20, 0x1abeb: 0x6c697a20, + 0x1abec: 0x6d2f9420, 0x1abed: 0x6c03e820, 0x1abee: 0x6c2f4420, 0x1abef: 0x6c785220, + 0x1abf0: 0x6cdf0e20, 0x1abf1: 0x6c1bd620, 0x1abf2: 0x6cd2a420, 0x1abf3: 0x6d200820, + 0x1abf4: 0x6cbfee20, 0x1abf5: 0x6cb34620, 0x1abf6: 0x6d12ba20, 0x1abf7: 0x6c500e20, + 0x1abf8: 0x6cd7bc20, 0x1abf9: 0x6ce08a20, 0x1abfa: 0x6c1b7220, 0x1abfb: 0x6c820a20, + 0x1abfc: 0x6c2daa20, 0x1abfd: 0x6c5e6c20, 0x1abfe: 0x6c8a5c20, 0x1abff: 0x6c529020, + // Block 0x6b0, offset 0x1ac00 + 0x1ac00: 0x6c9ebe20, 0x1ac01: 0x6d056020, 0x1ac02: 0x6c982420, 0x1ac03: 0x6c1a9020, + 0x1ac04: 0x6c447c20, 0x1ac05: 0x6d077820, 0x1ac06: 0x6d108620, 0x1ac07: 0x6d3ed820, + 0x1ac08: 0x6c50b620, 0x1ac09: 0x6c5fc220, 0x1ac0a: 0x6c2e0820, 0x1ac0b: 0x6c25b220, + 0x1ac0c: 0x6ce70c20, 0x1ac0d: 0x6c9fe620, 0x1ac0e: 0x6c545a20, 0x1ac0f: 0x6c856e20, + 0x1ac10: 0x6ce91620, 0x1ac11: 0x6cfe1620, 0x1ac12: 0x6d2bc220, 0x1ac13: 0x6cfa2a20, + 0x1ac14: 0x6d12a020, 0x1ac15: 0x6c937420, 0x1ac16: 0x6d0aca20, 0x1ac17: 0x6c96ee20, + 0x1ac18: 0x6cab7420, 0x1ac19: 0x6c5d5220, 0x1ac1a: 0x6d13c220, 0x1ac1b: 0x6c755420, + 0x1ac1c: 0x6c1e1c20, 0x1ac1d: 0x6c8c4420, 0x1ac1e: 0x6cea1620, 0x1ac1f: 0x6d1a2420, + 0x1ac20: 0x6c3a7e20, 0x1ac21: 0x6c08b820, 0x1ac22: 0x6cbdfe20, 0x1ac23: 0x6cbe0020, + 0x1ac24: 0x6c6ba820, 0x1ac25: 0x6c105c20, 0x1ac26: 0x6c3d1c20, 0x1ac27: 0x6c03ea20, + 0x1ac28: 0x6c339620, 0x1ac29: 0x6c3b0c20, 0x1ac2a: 0x6c354820, 0x1ac2b: 0x6c4dce20, + 0x1ac2c: 0x6ce62c20, 0x1ac2d: 0x6c792420, 0x1ac2e: 0x6cd74620, 0x1ac2f: 0x6cb6d020, + 0x1ac30: 0x6c52f020, 0x1ac31: 0x6d338620, 0x1ac32: 0x6d1aca20, 0x1ac33: 0x6cf3a020, + 0x1ac34: 0x6cf3a220, 0x1ac35: 0x6c178c20, 0x1ac36: 0x6ca55820, 0x1ac37: 0x6d093c20, + 0x1ac38: 0x6cf56a20, 0x1ac39: 0x6c20b420, 0x1ac3a: 0x6c309e20, 0x1ac3b: 0x6cf1c820, + 0x1ac3c: 0x6c544820, 0x1ac3d: 0x6c529220, 0x1ac3e: 0x6cf3a420, 0x1ac3f: 0x6c433220, + // Block 0x6b1, offset 0x1ac40 + 0x1ac40: 0x6d0bda20, 0x1ac41: 0x6c759420, 0x1ac42: 0x6c937620, 0x1ac43: 0x6c35d020, + 0x1ac44: 0x6c43c020, 0x1ac45: 0x6c99ce20, 0x1ac46: 0x6c270420, 0x1ac47: 0x6cb6d220, + 0x1ac48: 0x6c19b620, 0x1ac49: 0x6cf3a620, 0x1ac4a: 0x6c433420, 0x1ac4b: 0x6c3d3820, + 0x1ac4c: 0x6c698020, 0x1ac4d: 0x6c529420, 0x1ac4e: 0x6c1b7820, 0x1ac4f: 0x6cd0da20, + 0x1ac50: 0x6ca55a20, 0x1ac51: 0x6cea1820, 0x1ac52: 0x6c3f3220, 0x1ac53: 0x6d167820, + 0x1ac54: 0x6c270620, 0x1ac55: 0x6cab7620, 0x1ac56: 0x6c857c20, 0x1ac57: 0x6c077620, + 0x1ac58: 0x6d253820, 0x1ac59: 0x6c4c0e20, 0x1ac5a: 0x6cf21a20, 0x1ac5b: 0x6cba9c20, + 0x1ac5c: 0x6cf35020, 0x1ac5d: 0x6c35da20, 0x1ac5e: 0x6cd19820, 0x1ac5f: 0x6c731220, + 0x1ac60: 0x6cae4620, 0x1ac61: 0x6cf1ce20, 0x1ac62: 0x6ca55c20, 0x1ac63: 0x6c965a20, + 0x1ac64: 0x6c8e1c20, 0x1ac65: 0x6cc46020, 0x1ac66: 0x6d1e9420, 0x1ac67: 0x6c2bd420, + 0x1ac68: 0x6d385a20, 0x1ac69: 0x6cd31620, 0x1ac6a: 0x6d38fa20, 0x1ac6b: 0x6ce60e20, + 0x1ac6c: 0x6cf84420, 0x1ac6d: 0x6d16a820, 0x1ac6e: 0x6cb74220, 0x1ac6f: 0x6cb27420, + 0x1ac70: 0x6d3ef420, 0x1ac71: 0x6c46ea20, 0x1ac72: 0x6c21f420, 0x1ac73: 0x6cf07220, + 0x1ac74: 0x6d062a20, 0x1ac75: 0x6c000420, 0x1ac76: 0x6ca49220, 0x1ac77: 0x6c40be20, + 0x1ac78: 0x6cadac20, 0x1ac79: 0x6d16aa20, 0x1ac7a: 0x6cfe8220, 0x1ac7b: 0x6ccfa820, + 0x1ac7c: 0x6c549820, 0x1ac7d: 0x6ca04020, 0x1ac7e: 0x6c267a20, 0x1ac7f: 0x6cc26220, + // Block 0x6b2, offset 0x1ac80 + 0x1ac80: 0x6c71a220, 0x1ac81: 0x6c4dd420, 0x1ac82: 0x6d288820, 0x1ac83: 0x6ceaa820, + 0x1ac84: 0x6c341a20, 0x1ac85: 0x6cb3ec20, 0x1ac86: 0x6cad4620, 0x1ac87: 0x6c0cdc20, + 0x1ac88: 0x6c3de020, 0x1ac89: 0x6d0f4420, 0x1ac8a: 0x6c50be20, 0x1ac8b: 0x6d28e820, + 0x1ac8c: 0x6c50c020, 0x1ac8d: 0x6c4d0c20, 0x1ac8e: 0x6c6fd420, 0x1ac8f: 0x6d1e1220, + 0x1ac90: 0x6c40aa20, 0x1ac91: 0x6c264020, 0x1ac92: 0x6d38fc20, 0x1ac93: 0x6cec1220, + 0x1ac94: 0x6c760c20, 0x1ac95: 0x6c483220, 0x1ac96: 0x6c760e20, 0x1ac97: 0x6d42b820, + 0x1ac98: 0x6c106020, 0x1ac99: 0x6c8f6a20, 0x1ac9a: 0x6c2fda20, 0x1ac9b: 0x6ca8f420, + 0x1ac9c: 0x6cdefe20, 0x1ac9d: 0x6cd7c820, 0x1ac9e: 0x6cfc7820, 0x1ac9f: 0x6c5da420, + 0x1aca0: 0x6cb75020, 0x1aca1: 0x6c37c020, 0x1aca2: 0x6c35e420, 0x1aca3: 0x6c49da20, + 0x1aca4: 0x6d2cb220, 0x1aca5: 0x6cf85420, 0x1aca6: 0x6d148a20, 0x1aca7: 0x6c8b9220, + 0x1aca8: 0x6d3e0a20, 0x1aca9: 0x6c9ec020, 0x1acaa: 0x6c9c2e20, 0x1acab: 0x6d34fa20, + 0x1acac: 0x6d119420, 0x1acad: 0x6c5e9220, 0x1acae: 0x6d390a20, 0x1acaf: 0x6c437820, + 0x1acb0: 0x6cd5a820, 0x1acb1: 0x6d295e20, 0x1acb2: 0x6cffd620, 0x1acb3: 0x6c4d0e20, + 0x1acb4: 0x6c5a8e20, 0x1acb5: 0x6c7ad420, 0x1acb6: 0x6c580c20, 0x1acb7: 0x6ce20820, + 0x1acb8: 0x6cfb3020, 0x1acb9: 0x6c35e620, 0x1acba: 0x6d084220, 0x1acbb: 0x6d04ba20, + 0x1acbc: 0x6c4c1020, 0x1acbd: 0x6d0e4220, 0x1acbe: 0x6c81a020, 0x1acbf: 0x6d13ce20, + // Block 0x6b3, offset 0x1acc0 + 0x1acc0: 0x6c001620, 0x1acc1: 0x6cb23820, 0x1acc2: 0x6cd04a20, 0x1acc3: 0x6ce72020, + 0x1acc4: 0x6c529a20, 0x1acc5: 0x6d045c20, 0x1acc6: 0x6c341c20, 0x1acc7: 0x6cec4c20, + 0x1acc8: 0x6c4cf820, 0x1acc9: 0x6d28f820, 0x1acca: 0x6d201e20, 0x1accb: 0x6c2f3020, + 0x1accc: 0x6cac1c20, 0x1accd: 0x6cfddc20, 0x1acce: 0x6c001420, 0x1accf: 0x6c449c20, + 0x1acd0: 0x6c7b8c20, 0x1acd1: 0x6d0b4a20, 0x1acd2: 0x6c264220, 0x1acd3: 0x6cfe8a20, + 0x1acd4: 0x6c094220, 0x1acd5: 0x6c5b9620, 0x1acd6: 0x6ca77420, 0x1acd7: 0x6c570a20, + 0x1acd8: 0x6d044220, 0x1acd9: 0x6c7b1820, 0x1acda: 0x6c347620, 0x1acdb: 0x6c3b1c20, + 0x1acdc: 0x6c619c20, 0x1acdd: 0x6ca9b220, 0x1acde: 0x6ca1ba20, 0x1acdf: 0x6d1d7620, + 0x1ace0: 0x6c502420, 0x1ace1: 0x6d254e20, 0x1ace2: 0x6c905620, 0x1ace3: 0x6cb3ee20, + 0x1ace4: 0x6c984820, 0x1ace5: 0x6c438020, 0x1ace6: 0x6cab2820, 0x1ace7: 0x6c1a9a20, + 0x1ace8: 0x6ccece20, 0x1ace9: 0x6c87dc20, 0x1acea: 0x6ca2f420, 0x1aceb: 0x6d40ae20, + 0x1acec: 0x6c50ea20, 0x1aced: 0x6c7a3420, 0x1acee: 0x6cfe9220, 0x1acef: 0x6cfc9a20, + 0x1acf0: 0x6c814820, 0x1acf1: 0x6c0e5e20, 0x1acf2: 0x6d302c20, 0x1acf3: 0x6d2bd020, + 0x1acf4: 0x6c89ac20, 0x1acf5: 0x6c033620, 0x1acf6: 0x6c9ec220, 0x1acf7: 0x6c8ae220, + 0x1acf8: 0x6cdbb420, 0x1acf9: 0x6c3e2a20, 0x1acfa: 0x6c103420, 0x1acfb: 0x6c4e9020, + 0x1acfc: 0x6c524620, 0x1acfd: 0x6c44f220, 0x1acfe: 0x6cd76820, 0x1acff: 0x6c447420, + // Block 0x6b4, offset 0x1ad00 + 0x1ad00: 0x6d203620, 0x1ad01: 0x6d0e4c20, 0x1ad02: 0x6c46fc20, 0x1ad03: 0x6c477020, + 0x1ad04: 0x6c077820, 0x1ad05: 0x6c4dec20, 0x1ad06: 0x6cdd0c20, 0x1ad07: 0x6c213820, + 0x1ad08: 0x6d171c20, 0x1ad09: 0x6c001820, 0x1ad0a: 0x6c63ae20, 0x1ad0b: 0x6ce84620, + 0x1ad0c: 0x6cfb3220, 0x1ad0d: 0x6cecf620, 0x1ad0e: 0x6c85c420, 0x1ad0f: 0x6cf5b220, + 0x1ad10: 0x6ce0e820, 0x1ad11: 0x6d428a20, 0x1ad12: 0x6cc02420, 0x1ad13: 0x6c17d420, + 0x1ad14: 0x6cf3ac20, 0x1ad15: 0x6d2a6e20, 0x1ad16: 0x6d0b4c20, 0x1ad17: 0x6c30a420, + 0x1ad18: 0x6cb6e420, 0x1ad19: 0x6c2b6020, 0x1ad1a: 0x6cbe0c20, 0x1ad1b: 0x6c96ba20, + 0x1ad1c: 0x6ca0ee20, 0x1ad1d: 0x6c461220, 0x1ad1e: 0x6c30e620, 0x1ad1f: 0x6cc26c20, + 0x1ad20: 0x6c814a20, 0x1ad21: 0x6c898c20, 0x1ad22: 0x6cdd5420, 0x1ad23: 0x6d2a7020, + 0x1ad24: 0x6c58fe20, 0x1ad25: 0x6c813620, 0x1ad26: 0x6ccbd620, 0x1ad27: 0x6c5ea020, + 0x1ad28: 0x6d426820, 0x1ad29: 0x6cf28420, 0x1ad2a: 0x6c3cca20, 0x1ad2b: 0x6c6cfc20, + 0x1ad2c: 0x6c56fc20, 0x1ad2d: 0x6cb77620, 0x1ad2e: 0x6cd45c20, 0x1ad2f: 0x6ceefa20, + 0x1ad30: 0x6cd64420, 0x1ad31: 0x6c171020, 0x1ad32: 0x6c374e20, 0x1ad33: 0x6c85e620, + 0x1ad34: 0x6cbb5620, 0x1ad35: 0x6c017e20, 0x1ad36: 0x6d2ab620, 0x1ad37: 0x6d1d7820, + 0x1ad38: 0x6ca75e20, 0x1ad39: 0x6d208420, 0x1ad3a: 0x6ce4e620, 0x1ad3b: 0x6c7f4420, + 0x1ad3c: 0x6ccc4220, 0x1ad3d: 0x6cf5d820, 0x1ad3e: 0x6ceba020, 0x1ad3f: 0x6c54b820, + // Block 0x6b5, offset 0x1ad40 + 0x1ad40: 0x6c003c20, 0x1ad41: 0x6d2f6420, 0x1ad42: 0x6caa1420, 0x1ad43: 0x6c790220, + 0x1ad44: 0x6d3d4420, 0x1ad45: 0x6d3d4620, 0x1ad46: 0x6cce0220, 0x1ad47: 0x6c2c3a20, + 0x1ad48: 0x6c524a20, 0x1ad49: 0x6c8ba820, 0x1ad4a: 0x6c001020, 0x1ad4b: 0x6c112220, + 0x1ad4c: 0x6cfd6c20, 0x1ad4d: 0x6cea1e20, 0x1ad4e: 0x6cf43e20, 0x1ad4f: 0x6cf20620, + 0x1ad50: 0x6c253020, 0x1ad51: 0x6ccc4420, 0x1ad52: 0x6c477a20, 0x1ad53: 0x6cb6ec20, + 0x1ad54: 0x6cb6ee20, 0x1ad55: 0x6ce21620, 0x1ad56: 0x6c287420, 0x1ad57: 0x6c287620, + 0x1ad58: 0x6d12e620, 0x1ad59: 0x6d3f1020, 0x1ad5a: 0x6c08d820, 0x1ad5b: 0x6c253220, + 0x1ad5c: 0x6c1fc220, 0x1ad5d: 0x6c510220, 0x1ad5e: 0x6d0b5020, 0x1ad5f: 0x6cb6f420, + 0x1ad60: 0x6d304820, 0x1ad61: 0x6c39f620, 0x1ad62: 0x6c898e20, 0x1ad63: 0x6cfb5820, + 0x1ad64: 0x6cafd820, 0x1ad65: 0x6ccc4620, 0x1ad66: 0x6c7ed420, 0x1ad67: 0x6d2ab820, + 0x1ad68: 0x6d1baa20, 0x1ad69: 0x6c48ae20, 0x1ad6a: 0x6cabc220, 0x1ad6b: 0x6d30d620, + 0x1ad6c: 0x6ccb2020, 0x1ad6d: 0x6d3bc220, 0x1ad6e: 0x6ca81020, 0x1ad6f: 0x6c4cf620, + 0x1ad70: 0x6c953020, 0x1ad71: 0x6d0bf020, 0x1ad72: 0x6c2c3c20, 0x1ad73: 0x6cc2d220, + 0x1ad74: 0x6c15a420, 0x1ad75: 0x6c100620, 0x1ad76: 0x6c2fa020, 0x1ad77: 0x6c809e20, + 0x1ad78: 0x6cffe420, 0x1ad79: 0x6c710c20, 0x1ad7a: 0x6ce0f220, 0x1ad7b: 0x6c1c1a20, + 0x1ad7c: 0x6ce31e20, 0x1ad7d: 0x6c016c20, 0x1ad7e: 0x6c6f7020, 0x1ad7f: 0x6c288620, + // Block 0x6b6, offset 0x1ad80 + 0x1ad80: 0x6c761020, 0x1ad81: 0x6d1df420, 0x1ad82: 0x6cf08a20, 0x1ad83: 0x6ca3fc20, + 0x1ad84: 0x6ccd8a20, 0x1ad85: 0x6d232a20, 0x1ad86: 0x6d305820, 0x1ad87: 0x6c7e6220, + 0x1ad88: 0x6c6a0820, 0x1ad89: 0x6c53f820, 0x1ad8a: 0x6c4e5820, 0x1ad8b: 0x6c2e9820, + 0x1ad8c: 0x6d388220, 0x1ad8d: 0x6c147e20, 0x1ad8e: 0x6cec5220, 0x1ad8f: 0x6caaec20, + 0x1ad90: 0x6d230020, 0x1ad91: 0x6d19d820, 0x1ad92: 0x6d28b820, 0x1ad93: 0x6d10a220, + 0x1ad94: 0x6cab2420, 0x1ad95: 0x6c9e2020, 0x1ad96: 0x6c555220, 0x1ad97: 0x6d27e820, + 0x1ad98: 0x6c201e20, 0x1ad99: 0x6c5bbc20, 0x1ad9a: 0x6c591a20, 0x1ad9b: 0x6c591c20, + 0x1ad9c: 0x6cf7e620, 0x1ad9d: 0x6c509c20, 0x1ad9e: 0x6c5ec220, 0x1ad9f: 0x6c7cf420, + 0x1ada0: 0x6d37ee20, 0x1ada1: 0x6cef0620, 0x1ada2: 0x6ccc5220, 0x1ada3: 0x6d06cc20, + 0x1ada4: 0x6c59ba20, 0x1ada5: 0x6c344a20, 0x1ada6: 0x6ca82620, 0x1ada7: 0x6d079020, + 0x1ada8: 0x6c89b420, 0x1ada9: 0x6d232c20, 0x1adaa: 0x6cca9e20, 0x1adab: 0x6c1aae20, + 0x1adac: 0x6cbbe020, 0x1adad: 0x6d0e6a20, 0x1adae: 0x6c27dc20, 0x1adaf: 0x6cae4a20, + 0x1adb0: 0x6c116820, 0x1adb1: 0x6c83d020, 0x1adb2: 0x6d1d7a20, 0x1adb3: 0x6d2bd620, + 0x1adb4: 0x6cee7c20, 0x1adb5: 0x6c9e6c20, 0x1adb6: 0x6d1c6220, 0x1adb7: 0x6cae3220, + 0x1adb8: 0x6c103820, 0x1adb9: 0x6c7c7420, 0x1adba: 0x6cf88420, 0x1adbb: 0x6d232e20, + 0x1adbc: 0x6c6ac420, 0x1adbd: 0x6c912820, 0x1adbe: 0x6c7a9620, 0x1adbf: 0x6d2a8220, + // Block 0x6b7, offset 0x1adc0 + 0x1adc0: 0x6c56a220, 0x1adc1: 0x6ce33c20, 0x1adc2: 0x6d110420, 0x1adc3: 0x6c51ca20, + 0x1adc4: 0x6c000e20, 0x1adc5: 0x6d054220, 0x1adc6: 0x6cbabe20, 0x1adc7: 0x6ccb2e20, + 0x1adc8: 0x6d1d8a20, 0x1adc9: 0x6cdabe20, 0x1adca: 0x6c53a620, 0x1adcb: 0x6d00b220, + 0x1adcc: 0x6c00a220, 0x1adcd: 0x6cdd2420, 0x1adce: 0x6c96f020, 0x1adcf: 0x6c139620, + 0x1add0: 0x6c4d6c20, 0x1add1: 0x6c780420, 0x1add2: 0x6c264c20, 0x1add3: 0x6cca7e20, + 0x1add4: 0x6c187220, 0x1add5: 0x6cc81820, 0x1add6: 0x6cd9aa20, 0x1add7: 0x6cebdc20, + 0x1add8: 0x6c5ee420, 0x1add9: 0x6cad1c20, 0x1adda: 0x6cf36e20, 0x1addb: 0x6cba1020, + 0x1addc: 0x6cd39820, 0x1addd: 0x6c440020, 0x1adde: 0x6d3e3220, 0x1addf: 0x6c6a0a20, + 0x1ade0: 0x6c960c20, 0x1ade1: 0x6cf22820, 0x1ade2: 0x6cec3420, 0x1ade3: 0x6cd8c820, + 0x1ade4: 0x6c1ab420, 0x1ade5: 0x6c4fca20, 0x1ade6: 0x6cddd820, + 0x1ade8: 0x6c4d1620, 0x1ade9: 0x6cdd7020, 0x1adea: 0x6cbd7e20, 0x1adeb: 0x6ca83820, + 0x1adec: 0x6c50a020, 0x1aded: 0x6d347020, 0x1adee: 0x6cc9e220, 0x1adef: 0x6ca2c620, + 0x1adf0: 0x6c448a20, 0x1adf1: 0x6ca2e420, 0x1adf2: 0x6c2cb820, 0x1adf3: 0x6c002c20, + 0x1adf4: 0x6cbb6220, 0x1adf5: 0x6ce6f620, 0x1adf6: 0x6c09c220, 0x1adf7: 0x6c024a20, + 0x1adf8: 0x6c024c20, 0x1adf9: 0x6c880c20, 0x1adfa: 0x6d417420, 0x1adfb: 0x6d300020, + 0x1adfc: 0x6ca12420, 0x1adfd: 0x6cda4620, 0x1adfe: 0x6cda2020, 0x1adff: 0x6ce06820, + // Block 0x6b8, offset 0x1ae00 + 0x1ae00: 0x6c2b7820, 0x1ae01: 0x6cb50820, 0x1ae02: 0x6c69aa20, 0x1ae03: 0x6c1cd020, + 0x1ae04: 0x6c685a20, 0x1ae05: 0x6c765620, 0x1ae06: 0x6ce0a020, 0x1ae07: 0x6cccf820, + 0x1ae08: 0x6c127820, 0x1ae09: 0x6c637620, 0x1ae0a: 0x6c004620, 0x1ae0b: 0x6cfee620, + 0x1ae0c: 0x6cb1b420, 0x1ae0d: 0x6c912a20, 0x1ae0e: 0x6c40c020, 0x1ae0f: 0x6c47aa20, + 0x1ae10: 0x6cfee820, 0x1ae11: 0x6c54e220, 0x1ae12: 0x6c5bf220, 0x1ae13: 0x6c4c2c20, + 0x1ae14: 0x6cab8220, 0x1ae15: 0x6cfabc20, 0x1ae16: 0x6d2ad820, 0x1ae17: 0x6c16b420, + 0x1ae18: 0x6d05b820, 0x1ae19: 0x6cb32e20, 0x1ae1a: 0x6c2a5c20, 0x1ae1b: 0x6c96f420, + 0x1ae1c: 0x6c96ca20, 0x1ae1d: 0x6c557820, 0x1ae1e: 0x6c836c20, 0x1ae1f: 0x6c317220, + 0x1ae20: 0x6c40c220, 0x1ae21: 0x6ce0c420, 0x1ae22: 0x6d12ae20, 0x1ae23: 0x6c07fe20, + 0x1ae24: 0x6d1bcc20, 0x1ae25: 0x6cc9f020, 0x1ae26: 0x6c69ac20, 0x1ae27: 0x6c9d6420, + 0x1ae28: 0x6cfffc20, 0x1ae29: 0x6c571220, 0x1ae2a: 0x6c971620, 0x1ae2b: 0x6cc48020, + 0x1ae2c: 0x6c1fc420, 0x1ae2d: 0x6cae7e20, 0x1ae2e: 0x6c816420, 0x1ae2f: 0x6d000420, + 0x1ae30: 0x6c5f1020, 0x1ae31: 0x6d3a7c20, 0x1ae32: 0x6c177020, 0x1ae33: 0x6c7d0820, + 0x1ae34: 0x6d419820, 0x1ae35: 0x6cfefe20, 0x1ae36: 0x6cd80c20, 0x1ae37: 0x6c4fdc20, + 0x1ae38: 0x6c3f7e20, 0x1ae39: 0x6c8a0020, 0x1ae3a: 0x6cbbe820, 0x1ae3b: 0x6cf68e20, + 0x1ae3c: 0x6c1f6a20, 0x1ae3d: 0x6c15d020, 0x1ae3e: 0x6c28a420, 0x1ae3f: 0x6c521e20, + // Block 0x6b9, offset 0x1ae40 + 0x1ae40: 0x6d0aa020, 0x1ae41: 0x6c35b620, 0x1ae42: 0x6d420a20, 0x1ae43: 0x6c385420, + 0x1ae44: 0x6c1acc20, 0x1ae45: 0x6c5ae220, 0x1ae46: 0x6d297220, 0x1ae47: 0x6c207420, + 0x1ae48: 0x6c245220, 0x1ae49: 0x6c289c20, 0x1ae4a: 0x6d23ba20, 0x1ae4b: 0x6cea2420, + 0x1ae4c: 0x6c134a20, 0x1ae4d: 0x6c69b620, 0x1ae4e: 0x6d126220, 0x1ae4f: 0x6cf69020, + 0x1ae50: 0x6cb7be20, 0x1ae51: 0x6c4fd020, 0x1ae52: 0x6c882e20, 0x1ae53: 0x6d05ca20, + 0x1ae54: 0x6c2aa420, 0x1ae55: 0x6c5ae820, 0x1ae56: 0x6d1a8c20, 0x1ae57: 0x6cb40c20, + 0x1ae58: 0x6c73b220, 0x1ae59: 0x6cbd9220, 0x1ae5a: 0x6d0a2e20, 0x1ae5b: 0x6ca85a20, + 0x1ae5c: 0x6c912c20, 0x1ae5d: 0x6cd80e20, 0x1ae5e: 0x6d0dd420, 0x1ae5f: 0x6d1d4820, + 0x1ae60: 0x6c265e20, 0x1ae61: 0x6d2d9420, 0x1ae62: 0x6cab2620, 0x1ae63: 0x6d394e20, + 0x1ae64: 0x6c6d4820, 0x1ae65: 0x6ca9c420, 0x1ae66: 0x6c5c2620, 0x1ae67: 0x6d01f420, + 0x1ae68: 0x6cb7ce20, 0x1ae69: 0x6c36a620, 0x1ae6a: 0x6d2a8e20, 0x1ae6b: 0x6d140e20, + 0x1ae6c: 0x6cd3d620, 0x1ae6d: 0x6c69c220, 0x1ae6e: 0x6d263020, 0x1ae6f: 0x6c003420, + 0x1ae70: 0x6d1dac20, 0x1ae71: 0x6c74b420, 0x1ae72: 0x6c7b3820, 0x1ae73: 0x6d228a20, + 0x1ae74: 0x6cae3420, 0x1ae75: 0x6c2a2820, 0x1ae76: 0x6c40c820, 0x1ae77: 0x6c528e20, + 0x1ae78: 0x6c33aa20, 0x1ae79: 0x6c290220, 0x1ae7a: 0x6d036420, 0x1ae7b: 0x6cc9cc20, + 0x1ae7c: 0x6caf8e20, 0x1ae7d: 0x6cb07220, 0x1ae7e: 0x6d1a0e20, 0x1ae7f: 0x6d41a020, + // Block 0x6ba, offset 0x1ae80 + 0x1ae80: 0x6ca92020, 0x1ae81: 0x6c2b9620, 0x1ae82: 0x6c807820, 0x1ae83: 0x6cddfa20, + 0x1ae84: 0x6c5d5e20, 0x1ae85: 0x6cc7cc20, 0x1ae86: 0x6c4fac20, 0x1ae87: 0x6cfa4820, + 0x1ae88: 0x6d135220, 0x1ae89: 0x6c343820, 0x1ae8a: 0x6cb0be20, 0x1ae8b: 0x6c1de020, + 0x1ae8c: 0x6c629020, 0x1ae8d: 0x6c6d5620, 0x1ae8e: 0x6c4fec20, 0x1ae8f: 0x6ce42820, + 0x1ae90: 0x6c16ca20, 0x1ae91: 0x6d0ac220, 0x1ae92: 0x6c99c620, 0x1ae93: 0x6c10d820, + 0x1ae94: 0x6ce43820, 0x1ae95: 0x6c91e420, 0x1ae96: 0x6c5c6420, 0x1ae97: 0x6c0f8820, + 0x1ae98: 0x6d1eba20, 0x1ae99: 0x6ca88620, 0x1ae9a: 0x6d1a9e20, 0x1ae9b: 0x6c56d620, + 0x1ae9c: 0x6c99ca20, 0x1ae9d: 0x6c52d220, 0x1ae9e: 0x6d30a820, 0x1ae9f: 0x6c846c20, + 0x1aea0: 0x6c8eb220, 0x1aea1: 0x6c4d8e20, 0x1aea2: 0x6ca45620, 0x1aea3: 0x6cff2e20, + 0x1aea4: 0x6ca08220, 0x1aea5: 0x6d0ee620, 0x1aea6: 0x6c86e820, 0x1aea7: 0x6c916820, + 0x1aea8: 0x6c8fba20, 0x1aea9: 0x6ca08c20, 0x1aeaa: 0x6c28dc20, 0x1aeab: 0x6c193a20, + 0x1aeac: 0x6cb21e20, 0x1aead: 0x6cb07c20, 0x1aeae: 0x6cfe5c20, 0x1aeaf: 0x6c5e2420, + 0x1aeb0: 0x6ca08e20, 0x1aeb1: 0x6cf91e20, 0x1aeb2: 0x6c34c220, 0x1aeb3: 0x6c7ab220, + 0x1aeb4: 0x6d0ce820, 0x1aeb5: 0x6c154e20, 0x1aeb6: 0x6d1c1820, 0x1aeb7: 0x6cc50420, + 0x1aeb8: 0x6c2d3020, 0x1aeb9: 0x6c7ede20, 0x1aeba: 0x6cded620, 0x1aebb: 0x6cff4c20, + 0x1aebc: 0x6c74fc20, 0x1aebd: 0x6c21e420, 0x1aebe: 0x6c583c20, 0x1aebf: 0x6c5e3c20, + // Block 0x6bb, offset 0x1aec0 + 0x1aec0: 0x6d3bfe20, 0x1aec1: 0x6ca8aa20, 0x1aec2: 0x6cff4e20, 0x1aec3: 0x6c10ee20, + 0x1aec4: 0x6c84a420, 0x1aec5: 0x6c161620, 0x1aec6: 0x6c14a820, 0x1aec7: 0x6c876020, + 0x1aec8: 0x6d194020, 0x1aec9: 0x6c953620, 0x1aeca: 0x6ca45e20, 0x1aecb: 0x6d28dc20, + 0x1aecc: 0x6cda6e20, 0x1aecd: 0x6cf82420, 0x1aece: 0x6d2b7e20, 0x1aecf: 0x6c654e20, + 0x1aed0: 0x6d28de20, 0x1aed1: 0x6d3a8e20, 0x1aed2: 0x6c800620, 0x1aed3: 0x6ca8c220, + 0x1aed4: 0x6ca45220, 0x1aed5: 0x6c806220, 0x1aed6: 0x6c8f6420, 0x1aed7: 0x6ceed620, + 0x1aed8: 0x6c5b1220, 0x1aed9: 0x6d199c20, 0x1aeda: 0x6cbff020, 0x1aedb: 0x6cd87420, + 0x1aedc: 0x6ca8e220, 0x1aedd: 0x6c656220, 0x1aede: 0x6c5b1420, 0x1aedf: 0x6d031420, + 0x1aee0: 0x6d199e20, 0x1aee1: 0x6ca3dc20, 0x1aee2: 0x6ce94420, 0x1aee3: 0x6ce94620, + 0x1aee4: 0x6c33d620, 0x1aee5: 0x6c777c20, 0x1aee6: 0x6d24c620, 0x1aee7: 0x6c6ef420, + 0x1aee8: 0x6cb0ec20, 0x1aee9: 0x6d277c20, 0x1aeea: 0x6c22f620, 0x1aeeb: 0x6c551c20, + 0x1aeec: 0x6c5b1820, 0x1aeed: 0x6d253a20, 0x1aeee: 0x6c354a20, 0x1aeef: 0x6c4c5620, + 0x1aef0: 0x6c7dca20, 0x1aef1: 0x6c22f820, 0x1aef2: 0x6ce6ee20, 0x1aef3: 0x6ce88420, + 0x1aef4: 0x6ceedc20, 0x1aef5: 0x6c94d820, 0x1aef6: 0x6c4c5a20, 0x1aef7: 0x6cc43020, + 0x1aef8: 0x6cc64020, 0x1aef9: 0x6c8c9e20, 0x1aefa: 0x6c47fe20, 0x1aefb: 0x6c4c5c20, + 0x1aefc: 0x6cdf0020, 0x1aefd: 0x6c4c5e20, 0x1aefe: 0x6ce88820, 0x1aeff: 0x6d202020, + // Block 0x6bc, offset 0x1af00 + 0x1af00: 0x6c4c6220, 0x1af01: 0x6d1a4220, 0x1af02: 0x6c5d2020, 0x1af03: 0x6cb48620, + 0x1af04: 0x6d223820, 0x1af05: 0x6c4dee20, 0x1af06: 0x6d255020, 0x1af07: 0x6c94ea20, + 0x1af08: 0x6cc29620, 0x1af09: 0x6d224820, 0x1af0a: 0x6cbe3e20, 0x1af0b: 0x6c4c6620, + 0x1af0c: 0x6c1ffa20, 0x1af0d: 0x6cef0820, 0x1af0e: 0x6d256020, 0x1af0f: 0x6cc29a20, + 0x1af10: 0x6c7a4020, 0x1af11: 0x6c400a20, 0x1af12: 0x6d257420, 0x1af13: 0x6d257620, + 0x1af14: 0x6d0bbc20, 0x1af15: 0x6ce8b620, 0x1af16: 0x6ce8d420, 0x1af17: 0x6ce8d620, + 0x1af18: 0x6ce95020, 0x1af19: 0x6c94b820, 0x1af1a: 0x6c5c0c20, 0x1af1b: 0x6d188220, + 0x1af1c: 0x6c589220, 0x1af1d: 0x6c944a20, 0x1af1e: 0x6c946e20, 0x1af1f: 0x6ce91020, + 0x1af20: 0x6d0b6620, 0x1af21: 0x6ce91220, 0x1af22: 0x6ce6aa20, 0x1af23: 0x6cd15220, + 0x1af24: 0x6cb48020, 0x1af25: 0x6c920c20, 0x1af26: 0x6c7b5020, 0x1af27: 0x6d0ac620, + 0x1af28: 0x6d292820, 0x1af29: 0x6ceeda20, 0x1af2a: 0x6c436620, 0x1af2b: 0x6d22be20, + 0x1af2c: 0x6cf34020, 0x1af2d: 0x6c4a3420, 0x1af2e: 0x6cb04820, 0x1af2f: 0x6d145020, + 0x1af30: 0x6c2a8a20, 0x1af31: 0x6cb89220, 0x1af32: 0x6cb89420, 0x1af33: 0x6d320e20, + 0x1af34: 0x6d3d1a20, 0x1af35: 0x6c295220, 0x1af36: 0x6cb83e20, 0x1af37: 0x6cfa6220, + 0x1af38: 0x6ccdf620, 0x1af39: 0x6c7bd820, 0x1af3a: 0x6c16e220, 0x1af3b: 0x6cb56e20, + 0x1af3c: 0x6ca7f220, 0x1af3d: 0x6ca0c220, 0x1af3e: 0x6c5e7620, 0x1af3f: 0x6c639820, + // Block 0x6bd, offset 0x1af40 + 0x1af40: 0x6d34dc20, 0x1af41: 0x6d34de20, 0x1af42: 0x6c04b420, 0x1af43: 0x6d098e20, + 0x1af44: 0x6d167a20, 0x1af45: 0x6cbdc620, 0x1af46: 0x6c99d020, 0x1af47: 0x6c755620, + 0x1af48: 0x6cc6f220, 0x1af49: 0x6cea3c20, 0x1af4a: 0x6c39e820, 0x1af4b: 0x6c07a420, + 0x1af4c: 0x6c07a620, 0x1af4d: 0x6cdf8820, 0x1af4e: 0x6c76be20, 0x1af4f: 0x6c580a20, + 0x1af50: 0x6d427620, 0x1af51: 0x6c792620, 0x1af52: 0x6c091820, 0x1af53: 0x6c6e0a20, + 0x1af54: 0x6c2c1220, 0x1af55: 0x6c6d8620, 0x1af56: 0x6c617c20, 0x1af57: 0x6c7b0c20, + 0x1af58: 0x6c2bcc20, 0x1af59: 0x6c6d8820, 0x1af5a: 0x6c646220, 0x1af5b: 0x6cdfca20, + 0x1af5c: 0x6c857e20, 0x1af5d: 0x6c03a620, 0x1af5e: 0x6cf4a420, 0x1af5f: 0x6c3b5020, + 0x1af60: 0x6d3c7a20, 0x1af61: 0x6cb2f620, 0x1af62: 0x6c04e220, 0x1af63: 0x6ce0bc20, + 0x1af64: 0x6c7d4a20, 0x1af65: 0x6cc0da20, 0x1af66: 0x6ce05220, 0x1af67: 0x6d339420, + 0x1af68: 0x6ceaea20, 0x1af69: 0x6c417020, 0x1af6a: 0x6cb27620, 0x1af6b: 0x6c2d3a20, + 0x1af6c: 0x6c48a820, 0x1af6d: 0x6ca5ba20, 0x1af6e: 0x6cdf1420, 0x1af6f: 0x6caf3020, + 0x1af70: 0x6c6ed620, 0x1af71: 0x6d100020, 0x1af72: 0x6c3d0a20, 0x1af73: 0x6c02c420, + 0x1af74: 0x6c921820, 0x1af75: 0x6cbf9c20, 0x1af76: 0x6ca22620, 0x1af77: 0x6c785420, + 0x1af78: 0x6c469220, 0x1af79: 0x6d094020, 0x1af7a: 0x6c036220, 0x1af7b: 0x6c1b0420, + 0x1af7c: 0x6c180020, 0x1af7d: 0x6c8ca020, 0x1af7e: 0x6d3aaa20, 0x1af7f: 0x6c3fb020, + // Block 0x6be, offset 0x1af80 + 0x1af80: 0x6c549a20, 0x1af81: 0x6d358420, 0x1af82: 0x6c20be20, 0x1af83: 0x6c7e3a20, + 0x1af84: 0x6c902e20, 0x1af85: 0x6c903020, 0x1af86: 0x6c913820, 0x1af87: 0x6c02c620, + 0x1af88: 0x6c272e20, 0x1af89: 0x6cad4820, 0x1af8a: 0x6c9fe220, 0x1af8b: 0x6d03ca20, + 0x1af8c: 0x6c305620, 0x1af8d: 0x6c619e20, 0x1af8e: 0x6c51ba20, 0x1af8f: 0x6c93ce20, + 0x1af90: 0x6c222820, 0x1af91: 0x6c1b8220, 0x1af92: 0x6c82ba20, 0x1af93: 0x6c40e420, + 0x1af94: 0x6d19aa20, 0x1af95: 0x6c546220, 0x1af96: 0x6c32f420, 0x1af97: 0x6d2f9c20, + 0x1af98: 0x6c3e0820, 0x1af99: 0x6c49dc20, 0x1af9a: 0x6d10d420, 0x1af9b: 0x6c347820, + 0x1af9c: 0x6c347a20, 0x1af9d: 0x6c4ad020, 0x1af9e: 0x6c13ca20, 0x1af9f: 0x6d0f8e20, + 0x1afa0: 0x6d1a3820, 0x1afa1: 0x6c37fe20, 0x1afa2: 0x6c469a20, 0x1afa3: 0x6d254420, + 0x1afa4: 0x6c2e6a20, 0x1afa5: 0x6d007620, 0x1afa6: 0x6c78fa20, 0x1afa7: 0x6cce3220, + 0x1afa8: 0x6cd43e20, 0x1afa9: 0x6c35ec20, 0x1afaa: 0x6c0e4020, 0x1afab: 0x6c2d4020, + 0x1afac: 0x6c530c20, 0x1afad: 0x6d0ad820, 0x1afae: 0x6c7ad620, 0x1afaf: 0x6c26f820, + 0x1afb0: 0x6c762020, 0x1afb1: 0x6c295a20, 0x1afb2: 0x6c764a20, 0x1afb3: 0x6c4f9e20, + 0x1afb4: 0x6ca4dc20, 0x1afb5: 0x6c017820, 0x1afb6: 0x6d036c20, 0x1afb7: 0x6cfc9c20, + 0x1afb8: 0x6d260820, 0x1afb9: 0x6c051a20, 0x1afba: 0x6c3d5a20, 0x1afbb: 0x6c03ae20, + 0x1afbc: 0x6d172020, 0x1afbd: 0x6d1b4220, 0x1afbe: 0x6c4e9220, 0x1afbf: 0x6d06a020, + // Block 0x6bf, offset 0x1afc0 + 0x1afc0: 0x6c20c420, 0x1afc1: 0x6cbd6220, 0x1afc2: 0x6c44f420, 0x1afc3: 0x6c001c20, + 0x1afc4: 0x6c081620, 0x1afc5: 0x6c39aa20, 0x1afc6: 0x6cc3a820, 0x1afc7: 0x6d1e2020, + 0x1afc8: 0x6c75a020, 0x1afc9: 0x6c633e20, 0x1afca: 0x6c2c2a20, 0x1afcb: 0x6c96fa20, + 0x1afcc: 0x6c811420, 0x1afcd: 0x6c731820, 0x1afce: 0x6c19c620, 0x1afcf: 0x6ccccc20, + 0x1afd0: 0x6c6c3c20, 0x1afd1: 0x6d303020, 0x1afd2: 0x6c8ae420, 0x1afd3: 0x6c8ae620, + 0x1afd4: 0x6c107e20, 0x1afd5: 0x6c19d820, 0x1afd6: 0x6c57d820, 0x1afd7: 0x6c108020, + 0x1afd8: 0x6cd25a20, 0x1afd9: 0x6d099420, 0x1afda: 0x6c4c1820, 0x1afdb: 0x6c6eda20, + 0x1afdc: 0x6d12a820, 0x1afdd: 0x6ca76020, 0x1afde: 0x6c2bee20, 0x1afdf: 0x6d230420, + 0x1afe0: 0x6c109220, 0x1afe1: 0x6d0ae820, 0x1afe2: 0x6cc2d420, 0x1afe3: 0x6cdc3420, + 0x1afe4: 0x6cafdc20, 0x1afe5: 0x6cbe4020, 0x1afe6: 0x6cecfe20, 0x1afe7: 0x6c723820, + 0x1afe8: 0x6c951420, 0x1afe9: 0x6d329220, 0x1afea: 0x6c796e20, 0x1afeb: 0x6c1d3820, + 0x1afec: 0x6c2fee20, 0x1afed: 0x6c275a20, 0x1afee: 0x6ce09220, 0x1afef: 0x6c018020, + 0x1aff0: 0x6c114220, 0x1aff1: 0x6c1f2e20, 0x1aff2: 0x6c081820, 0x1aff3: 0x6c76ce20, + 0x1aff4: 0x6d344c20, 0x1aff5: 0x6c348420, 0x1aff6: 0x6d175220, 0x1aff7: 0x6d344e20, + 0x1aff8: 0x6d175420, 0x1aff9: 0x6cadd020, 0x1affa: 0x6c5eb420, 0x1affb: 0x6d3cdc20, + 0x1affc: 0x6cb5b820, 0x1affd: 0x6ccaee20, 0x1affe: 0x6c723a20, 0x1afff: 0x6ca5d420, + // Block 0x6c0, offset 0x1b000 + 0x1b000: 0x6c7a3a20, 0x1b001: 0x6c78a020, 0x1b002: 0x6ce0ec20, 0x1b003: 0x6c7d5020, + 0x1b004: 0x6ca69620, 0x1b005: 0x6c648220, 0x1b006: 0x6c32fa20, 0x1b007: 0x6c6c8e20, + 0x1b008: 0x6c427620, 0x1b009: 0x6d230620, 0x1b00a: 0x6c360c20, 0x1b00b: 0x6cae9820, + 0x1b00c: 0x6c480820, 0x1b00d: 0x6ce92220, 0x1b00e: 0x6c839420, 0x1b00f: 0x6c39ea20, + 0x1b010: 0x6d0b2420, 0x1b011: 0x6cba4c20, 0x1b012: 0x6c7ddc20, 0x1b013: 0x6c01b620, + 0x1b014: 0x6cd0ca20, 0x1b015: 0x6c34e620, 0x1b016: 0x6ca4f220, 0x1b017: 0x6ce85c20, + 0x1b018: 0x6c19fa20, 0x1b019: 0x6d19da20, 0x1b01a: 0x6c5cea20, 0x1b01b: 0x6c099420, + 0x1b01c: 0x6c88f220, 0x1b01d: 0x6c4c1c20, 0x1b01e: 0x6c2e9a20, 0x1b01f: 0x6d3bc420, + 0x1b020: 0x6c547020, 0x1b021: 0x6c05fa20, 0x1b022: 0x6c05fc20, 0x1b023: 0x6d211420, + 0x1b024: 0x6c2b2e20, 0x1b025: 0x6c98e220, 0x1b026: 0x6c6a0c20, 0x1b027: 0x6cc83c20, + 0x1b028: 0x6d12ec20, 0x1b029: 0x6c452e20, 0x1b02a: 0x6c76aa20, 0x1b02b: 0x6d3f8020, + 0x1b02c: 0x6d211620, 0x1b02d: 0x6c59bc20, 0x1b02e: 0x6c362c20, 0x1b02f: 0x6d10f620, + 0x1b030: 0x6d0e6c20, 0x1b031: 0x6c064c20, 0x1b032: 0x6c223620, 0x1b033: 0x6c99f620, + 0x1b034: 0x6c16ec20, 0x1b035: 0x6c321420, 0x1b036: 0x6ceb1c20, 0x1b037: 0x6d1b5020, + 0x1b038: 0x6c3ca620, 0x1b039: 0x6d382820, 0x1b03a: 0x6c6be820, 0x1b03b: 0x6c6c4420, + 0x1b03c: 0x6c528820, 0x1b03d: 0x6c428620, 0x1b03e: 0x6c210620, 0x1b03f: 0x6c658e20, + // Block 0x6c1, offset 0x1b040 + 0x1b040: 0x6cb2ec20, 0x1b041: 0x6c836a20, 0x1b042: 0x6cfe3220, 0x1b043: 0x6c599220, + 0x1b044: 0x6c837620, 0x1b045: 0x6c32c020, 0x1b046: 0x6cec8e20, 0x1b047: 0x6d079220, + 0x1b048: 0x6c61fe20, 0x1b049: 0x6c604a20, 0x1b04a: 0x6c7b2420, 0x1b04b: 0x6d1c7c20, + 0x1b04c: 0x6cddee20, 0x1b04d: 0x6c1a1620, 0x1b04e: 0x6d1e4220, 0x1b04f: 0x6c765c20, + 0x1b050: 0x6cdac020, 0x1b051: 0x6cdac220, 0x1b052: 0x6cd26e20, 0x1b053: 0x6c9d4e20, + 0x1b054: 0x6cde0820, 0x1b055: 0x6cf24e20, 0x1b056: 0x6c1a1820, 0x1b057: 0x6ce8b820, + 0x1b058: 0x6ce0fe20, 0x1b059: 0x6cc3c820, 0x1b05a: 0x6d37f420, 0x1b05b: 0x6c862a20, + 0x1b05c: 0x6d37f620, 0x1b05d: 0x6c057620, 0x1b05e: 0x6cc9c620, 0x1b05f: 0x6d2a0620, + 0x1b060: 0x6c330020, 0x1b061: 0x6ce4a820, 0x1b062: 0x6cf4f820, 0x1b063: 0x6d335020, + 0x1b064: 0x6d099c20, 0x1b065: 0x6c440420, 0x1b066: 0x6d324020, 0x1b067: 0x6c00a420, + 0x1b068: 0x6c459020, 0x1b069: 0x6d0ca620, 0x1b06a: 0x6c76da20, 0x1b06b: 0x6ce4aa20, + 0x1b06c: 0x6d257820, 0x1b06d: 0x6cf14e20, 0x1b06e: 0x6d01be20, 0x1b06f: 0x6c8f3220, + 0x1b070: 0x6c4d8c20, 0x1b071: 0x6c810220, 0x1b072: 0x6c16b620, 0x1b073: 0x6caea820, + 0x1b074: 0x6c084820, 0x1b075: 0x6c18da20, 0x1b076: 0x6c927820, 0x1b077: 0x6c91c620, + 0x1b078: 0x6cab3c20, 0x1b079: 0x6cba6220, 0x1b07a: 0x6c9a1620, 0x1b07b: 0x6ca12620, + 0x1b07c: 0x6d3b8220, 0x1b07d: 0x6cd6d420, 0x1b07e: 0x6cd52e20, 0x1b07f: 0x6c90e820, + // Block 0x6c2, offset 0x1b080 + 0x1b080: 0x6c1b4620, 0x1b081: 0x6c97e220, 0x1b082: 0x6c0c0620, 0x1b083: 0x6c6e9420, + 0x1b084: 0x6c130020, 0x1b085: 0x6cd5ee20, 0x1b086: 0x6d367a20, 0x1b087: 0x6d2ec020, + 0x1b088: 0x6c770a20, 0x1b089: 0x6d1d9620, 0x1b08a: 0x6c2d6e20, 0x1b08b: 0x6c190820, + 0x1b08c: 0x6d347c20, 0x1b08d: 0x6cf8ac20, 0x1b08e: 0x6c4c2420, 0x1b08f: 0x6cbb4620, + 0x1b090: 0x6c6d2220, 0x1b091: 0x6c2c7a20, 0x1b092: 0x6cce0a20, 0x1b093: 0x6ca29020, + 0x1b094: 0x6c24d220, 0x1b095: 0x6d0e9220, 0x1b096: 0x6cde1020, 0x1b097: 0x6d2b8220, + 0x1b098: 0x6cb9ac20, 0x1b099: 0x6cbb1020, 0x1b09a: 0x6c895e20, 0x1b09b: 0x6cf14220, + 0x1b09c: 0x6d3c9a20, 0x1b09d: 0x6cbb9820, 0x1b09e: 0x6d2b8620, 0x1b09f: 0x6d05ba20, + 0x1b0a0: 0x6ccd9a20, 0x1b0a1: 0x6ccd9c20, 0x1b0a2: 0x6c038e20, 0x1b0a3: 0x6cb44820, + 0x1b0a4: 0x6c7b3220, 0x1b0a5: 0x6c303220, 0x1b0a6: 0x6c38b020, 0x1b0a7: 0x6cc3e820, + 0x1b0a8: 0x6ca16020, 0x1b0a9: 0x6c33a020, 0x1b0aa: 0x6c33a220, 0x1b0ab: 0x6d41ea20, + 0x1b0ac: 0x6c2c7c20, 0x1b0ad: 0x6cd17220, 0x1b0ae: 0x6c350820, 0x1b0af: 0x6c350e20, + 0x1b0b0: 0x6cdffc20, 0x1b0b1: 0x6c2ae020, 0x1b0b2: 0x6ca21820, 0x1b0b3: 0x6c3b8420, + 0x1b0b4: 0x6c59d820, 0x1b0b5: 0x6cdffe20, 0x1b0b6: 0x6c26fe20, 0x1b0b7: 0x6d12fa20, + 0x1b0b8: 0x6d3b5220, 0x1b0b9: 0x6c673a20, 0x1b0ba: 0x6c02e420, 0x1b0bb: 0x6cbb1e20, + 0x1b0bc: 0x6c5f2c20, 0x1b0bd: 0x6cbba220, 0x1b0be: 0x6c790a20, 0x1b0bf: 0x6d188420, + // Block 0x6c3, offset 0x1b0c0 + 0x1b0c0: 0x6cb01a20, 0x1b0c1: 0x6c0a4420, 0x1b0c2: 0x6c2d7c20, 0x1b0c3: 0x6c677820, + 0x1b0c4: 0x6d12b420, 0x1b0c5: 0x6d1dae20, 0x1b0c6: 0x6d091620, 0x1b0c7: 0x6ce00c20, + 0x1b0c8: 0x6c803820, 0x1b0c9: 0x6c728820, 0x1b0ca: 0x6c581420, 0x1b0cb: 0x6c298e20, + 0x1b0cc: 0x6cc50220, 0x1b0cd: 0x6cba8020, 0x1b0ce: 0x6d09ae20, 0x1b0cf: 0x6cfd1820, + 0x1b0d0: 0x6cf81620, 0x1b0d1: 0x6c51ee20, 0x1b0d2: 0x6c00c620, 0x1b0d3: 0x6d0b0020, + 0x1b0d4: 0x6c29ee20, 0x1b0d5: 0x6c4fee20, 0x1b0d6: 0x6cc84a20, 0x1b0d7: 0x6c6d8220, + 0x1b0d8: 0x6c82e220, 0x1b0d9: 0x6c7c0620, 0x1b0da: 0x6c916a20, 0x1b0db: 0x6d0cea20, + 0x1b0dc: 0x6ce03020, 0x1b0dd: 0x6cf03820, 0x1b0de: 0x6c581820, 0x1b0df: 0x6c903e20, + 0x1b0e0: 0x6c904020, 0x1b0e1: 0x6cc8ec20, 0x1b0e2: 0x6c86ea20, 0x1b0e3: 0x6c8bfe20, + 0x1b0e4: 0x6cc50620, 0x1b0e5: 0x6c165c20, 0x1b0e6: 0x6d09c420, 0x1b0e7: 0x6d0d0c20, + 0x1b0e8: 0x6c829620, 0x1b0e9: 0x6c03da20, 0x1b0ea: 0x6ceca620, 0x1b0eb: 0x6cd2e220, + 0x1b0ec: 0x6cc56020, 0x1b0ed: 0x6cca6220, 0x1b0ee: 0x6d3c2c20, 0x1b0ef: 0x6d3c2e20, + 0x1b0f0: 0x6cd0dc20, 0x1b0f1: 0x6d13c620, 0x1b0f2: 0x6c972420, 0x1b0f3: 0x6c784a20, + 0x1b0f4: 0x6d3aba20, 0x1b0f5: 0x6d3c3620, 0x1b0f6: 0x6c553020, 0x1b0f7: 0x6c554020, + 0x1b0f8: 0x6c7da620, 0x1b0f9: 0x6d13ee20, 0x1b0fa: 0x6c555420, 0x1b0fb: 0x6d06d020, + 0x1b0fc: 0x6c7db220, 0x1b0fd: 0x6cd46e20, 0x1b0fe: 0x6c989420, 0x1b0ff: 0x6d41ec20, + // Block 0x6c4, offset 0x1b100 + 0x1b100: 0x6cd47020, 0x1b101: 0x6d141220, 0x1b102: 0x6d34ca20, 0x1b103: 0x6c474e20, + 0x1b104: 0x6c1f0220, 0x1b105: 0x6c67d220, 0x1b106: 0x6c3c9c20, 0x1b107: 0x6c06e020, + 0x1b108: 0x6d2d5820, 0x1b109: 0x6c0b8420, 0x1b10a: 0x6cdba620, 0x1b10b: 0x6cc42e20, + 0x1b10c: 0x6c8ca220, 0x1b10d: 0x6c3fc020, 0x1b10e: 0x6c261420, 0x1b10f: 0x6cfa3220, + 0x1b110: 0x6d049a20, 0x1b111: 0x6d02a020, 0x1b112: 0x6ca4cc20, 0x1b113: 0x6cfa5a20, + 0x1b114: 0x6c7cb420, 0x1b115: 0x6cf55a20, 0x1b116: 0x6cec6820, 0x1b117: 0x6d25f820, + 0x1b118: 0x6c992020, 0x1b119: 0x6cda7c20, 0x1b11a: 0x6c341620, 0x1b11b: 0x6c341820, + 0x1b11c: 0x6d12ca20, 0x1b11d: 0x6cbe6c20, 0x1b11e: 0x6cec6e20, 0x1b11f: 0x6c46a220, + 0x1b120: 0x6c46a420, 0x1b121: 0x6cb78820, 0x1b122: 0x6c9c0420, 0x1b123: 0x6c9c0820, + 0x1b124: 0x6d1a8020, 0x1b125: 0x6c5d9420, 0x1b126: 0x6c190c20, 0x1b127: 0x6c26e420, + 0x1b128: 0x6d2b3020, 0x1b129: 0x6ce45420, 0x1b12a: 0x6cdf5a20, 0x1b12b: 0x6c40a620, + 0x1b12c: 0x6c48e220, 0x1b12d: 0x6d108020, 0x1b12e: 0x6d0f4020, 0x1b12f: 0x6c4f4620, + 0x1b130: 0x6c42fa20, 0x1b131: 0x6cd18e20, 0x1b132: 0x6ce1aa20, 0x1b133: 0x6cdf5c20, + 0x1b134: 0x6ce7e420, 0x1b135: 0x6d0d3420, 0x1b136: 0x6c08b020, 0x1b137: 0x6d145220, + 0x1b138: 0x6c7ab820, 0x1b139: 0x6c631c20, 0x1b13a: 0x6c343a20, 0x1b13b: 0x6c577c20, + 0x1b13c: 0x6c7bce20, 0x1b13d: 0x6d27d620, 0x1b13e: 0x6c632020, 0x1b13f: 0x6c031820, + // Block 0x6c5, offset 0x1b140 + 0x1b140: 0x6c370e20, 0x1b141: 0x6c87ec20, 0x1b142: 0x6c58ee20, 0x1b143: 0x6c2b1220, + 0x1b144: 0x6d0d4620, 0x1b145: 0x6cad7e20, 0x1b146: 0x6c733c20, 0x1b147: 0x6cb57c20, + 0x1b148: 0x6ca3ac20, 0x1b149: 0x6c3cd820, 0x1b14a: 0x6d007820, 0x1b14b: 0x6c3bcc20, + 0x1b14c: 0x6c2d0820, 0x1b14d: 0x6d107820, 0x1b14e: 0x6c7c5e20, 0x1b14f: 0x6d408620, + 0x1b150: 0x6c58f820, 0x1b151: 0x6cb75220, 0x1b152: 0x6c762620, 0x1b153: 0x6d2bc820, + 0x1b154: 0x6c077c20, 0x1b155: 0x6d16e020, 0x1b156: 0x6c679e20, 0x1b157: 0x6ce26220, + 0x1b158: 0x6d29fe20, 0x1b159: 0x6c079820, 0x1b15a: 0x6cf5b420, 0x1b15b: 0x6c5a5020, + 0x1b15c: 0x6c3a5020, 0x1b15d: 0x6c2dc020, 0x1b15e: 0x6d0a8620, 0x1b15f: 0x6c07e020, + 0x1b160: 0x6c2d5620, 0x1b161: 0x6c02d020, 0x1b162: 0x6cceea20, 0x1b163: 0x6cf24c20, + 0x1b164: 0x6c4d0220, 0x1b165: 0x6c02d220, 0x1b166: 0x6cf4fa20, 0x1b167: 0x6c02d420, + 0x1b168: 0x6c67ac20, 0x1b169: 0x6c881c20, 0x1b16a: 0x6c345a20, 0x1b16b: 0x6d275e20, + 0x1b16c: 0x6c67ae20, 0x1b16d: 0x6cd3c420, 0x1b16e: 0x6c3be620, 0x1b16f: 0x6c5df620, + 0x1b170: 0x6c0a8620, 0x1b171: 0x6c944c20, 0x1b172: 0x6c34c620, 0x1b173: 0x6caa6e20, + 0x1b174: 0x6caa3a20, 0x1b175: 0x6c2f6820, 0x1b176: 0x6ca38e20, 0x1b177: 0x6cb89620, + 0x1b178: 0x6c645c20, 0x1b179: 0x6cddde20, 0x1b17a: 0x6c6fa220, 0x1b17b: 0x6caa8e20, + 0x1b17c: 0x6c142820, 0x1b17d: 0x6c500620, 0x1b17e: 0x6cfa7020, 0x1b17f: 0x6c391a20, + // Block 0x6c6, offset 0x1b180 + 0x1b180: 0x6c611a20, 0x1b181: 0x6cd76e20, 0x1b182: 0x6cc78a20, 0x1b183: 0x6c39f020, + 0x1b184: 0x6cee4420, 0x1b185: 0x6c52ec20, 0x1b186: 0x6d3c0620, 0x1b187: 0x6c3fa620, + 0x1b188: 0x6c965c20, 0x1b189: 0x6c27b420, 0x1b18a: 0x6cc5be20, 0x1b18b: 0x6c3d3a20, + 0x1b18c: 0x6c6e4820, 0x1b18d: 0x6d0c5620, 0x1b18e: 0x6c4d5420, 0x1b18f: 0x6cf1fc20, + 0x1b190: 0x6d378e20, 0x1b191: 0x6cabb020, 0x1b192: 0x6c323220, 0x1b193: 0x6c617e20, + 0x1b194: 0x6c792820, 0x1b195: 0x6d381220, 0x1b196: 0x6d108a20, 0x1b197: 0x6c6cd420, + 0x1b198: 0x6d277e20, 0x1b199: 0x6c9eaa20, 0x1b19a: 0x6c3d1e20, 0x1b19b: 0x6c1ca420, + 0x1b19c: 0x6d267a20, 0x1b19d: 0x6d3c0a20, 0x1b19e: 0x6ca96220, 0x1b19f: 0x6d0e3a20, + 0x1b1a0: 0x6ca30620, 0x1b1a1: 0x6d02a820, 0x1b1a2: 0x6c3b5220, 0x1b1a3: 0x6c08ba20, + 0x1b1a4: 0x6d20ae20, 0x1b1a5: 0x6ceb6e20, 0x1b1a6: 0x6c3c1820, 0x1b1a7: 0x6ced7220, + 0x1b1a8: 0x6c39a220, 0x1b1a9: 0x6cf41e20, 0x1b1aa: 0x6d22cc20, 0x1b1ab: 0x6c4a3620, + 0x1b1ac: 0x6c323a20, 0x1b1ad: 0x6c036420, 0x1b1ae: 0x6ca5b420, 0x1b1af: 0x6d38cc20, + 0x1b1b0: 0x6d3d2c20, 0x1b1b1: 0x6d2f5620, 0x1b1b2: 0x6c267c20, 0x1b1b3: 0x6ca39820, + 0x1b1b4: 0x6d25fe20, 0x1b1b5: 0x6ce80820, 0x1b1b6: 0x6cfb2a20, 0x1b1b7: 0x6d343c20, + 0x1b1b8: 0x6c353020, 0x1b1b9: 0x6c9a7420, 0x1b1ba: 0x6ca0c620, 0x1b1bb: 0x6cb4d020, + 0x1b1bc: 0x6c092a20, 0x1b1bd: 0x6ccfaa20, 0x1b1be: 0x6cbc9420, 0x1b1bf: 0x6c353220, + // Block 0x6c7, offset 0x1b1c0 + 0x1b1c0: 0x6c50c420, 0x1b1c1: 0x6d062c20, 0x1b1c2: 0x6c37f820, 0x1b1c3: 0x6d328420, + 0x1b1c4: 0x6c9f2820, 0x1b1c5: 0x6c04e620, 0x1b1c6: 0x6ca22820, 0x1b1c7: 0x6c3d3e20, + 0x1b1c8: 0x6c8ca420, 0x1b1c9: 0x6d3ee220, 0x1b1ca: 0x6d3ee420, 0x1b1cb: 0x6cd2b420, + 0x1b1cc: 0x6cc4ac20, 0x1b1cd: 0x6cccc020, 0x1b1ce: 0x6d0f4620, 0x1b1cf: 0x6c975c20, + 0x1b1d0: 0x6c6c1620, 0x1b1d1: 0x6c46ee20, 0x1b1d2: 0x6cd88020, 0x1b1d3: 0x6d041420, + 0x1b1d4: 0x6cef8e20, 0x1b1d5: 0x6d3e0c20, 0x1b1d6: 0x6c71f620, 0x1b1d7: 0x6cccc220, + 0x1b1d8: 0x6cb1e820, 0x1b1d9: 0x6cc5d420, 0x1b1da: 0x6d10d620, 0x1b1db: 0x6c305820, + 0x1b1dc: 0x6c674c20, 0x1b1dd: 0x6cd4b020, 0x1b1de: 0x6c5ff020, 0x1b1df: 0x6c40e620, + 0x1b1e0: 0x6cfe1c20, 0x1b1e1: 0x6c572a20, 0x1b1e2: 0x6c72da20, 0x1b1e3: 0x6c682c20, + 0x1b1e4: 0x6c469c20, 0x1b1e5: 0x6c81a220, 0x1b1e6: 0x6c647420, 0x1b1e7: 0x6c647620, + 0x1b1e8: 0x6d148c20, 0x1b1e9: 0x6ca75c20, 0x1b1ea: 0x6d344220, 0x1b1eb: 0x6c5e9820, + 0x1b1ec: 0x6c5ea220, 0x1b1ed: 0x6cfc8a20, 0x1b1ee: 0x6c525620, 0x1b1ef: 0x6c49de20, + 0x1b1f0: 0x6c756020, 0x1b1f1: 0x6c7ac020, 0x1b1f2: 0x6d0e4420, 0x1b1f3: 0x6ca02c20, + 0x1b1f4: 0x6c8ad020, 0x1b1f5: 0x6cae0a20, 0x1b1f6: 0x6c35ee20, 0x1b1f7: 0x6d202220, + 0x1b1f8: 0x6d0c6e20, 0x1b1f9: 0x6c143420, 0x1b1fa: 0x6ccfb820, 0x1b1fb: 0x6d19ae20, + 0x1b1fc: 0x6cd24e20, 0x1b1fd: 0x6c4ad220, 0x1b1fe: 0x6cc2be20, 0x1b1ff: 0x6d3e0e20, + // Block 0x6c8, offset 0x1b200 + 0x1b200: 0x6cd90820, 0x1b201: 0x6cee6820, 0x1b202: 0x6c530e20, 0x1b203: 0x6cec0420, + 0x1b204: 0x6c907e20, 0x1b205: 0x6d0b8420, 0x1b206: 0x6cc52020, 0x1b207: 0x6c682e20, + 0x1b208: 0x6c942e20, 0x1b209: 0x6cb24e20, 0x1b20a: 0x6cfc9e20, 0x1b20b: 0x6cced020, + 0x1b20c: 0x6c850820, 0x1b20d: 0x6c19c820, 0x1b20e: 0x6d017a20, 0x1b20f: 0x6c984a20, + 0x1b210: 0x6c3d5c20, 0x1b211: 0x6cdd1020, 0x1b212: 0x6c99e420, 0x1b213: 0x6cef9c20, + 0x1b214: 0x6c789420, 0x1b215: 0x6c21ae20, 0x1b216: 0x6c21b020, 0x1b217: 0x6ce6b820, + 0x1b218: 0x6ca78820, 0x1b219: 0x6d03da20, 0x1b21a: 0x6ca3ee20, 0x1b21b: 0x6d20ec20, + 0x1b21c: 0x6ca31a20, 0x1b21d: 0x6cb3c820, 0x1b21e: 0x6ca56820, 0x1b21f: 0x6c72e220, + 0x1b220: 0x6ccfc620, 0x1b221: 0x6d35ae20, 0x1b222: 0x6c4df020, 0x1b223: 0x6c2c2c20, + 0x1b224: 0x6d3c1020, 0x1b225: 0x6c355220, 0x1b226: 0x6cb20820, 0x1b227: 0x6ce9f820, + 0x1b228: 0x6cfca020, 0x1b229: 0x6c9e1020, 0x1b22a: 0x6cf3ae20, 0x1b22b: 0x6d0c7020, + 0x1b22c: 0x6cf44220, 0x1b22d: 0x6c001e20, 0x1b22e: 0x6d0c7c20, 0x1b22f: 0x6d20ee20, + 0x1b230: 0x6cd89a20, 0x1b231: 0x6d20f020, 0x1b232: 0x6cebd020, 0x1b233: 0x6c87de20, + 0x1b234: 0x6cfb3a20, 0x1b235: 0x6c707c20, 0x1b236: 0x6cc24220, 0x1b237: 0x6d3c8020, + 0x1b238: 0x6cb4e220, 0x1b239: 0x6cfb4020, 0x1b23a: 0x6d3d4820, 0x1b23b: 0x6c2ff020, + 0x1b23c: 0x6c166420, 0x1b23d: 0x6c923420, 0x1b23e: 0x6c006420, 0x1b23f: 0x6c353620, + // Block 0x6c9, offset 0x1b240 + 0x1b240: 0x6c353820, 0x1b241: 0x6c908620, 0x1b242: 0x6c9dbe20, 0x1b243: 0x6c239020, + 0x1b244: 0x6cb3f020, 0x1b245: 0x6c710e20, 0x1b246: 0x6cb32820, 0x1b247: 0x6c10f620, + 0x1b248: 0x6c8cde20, 0x1b249: 0x6ced0020, 0x1b24a: 0x6c0c7220, 0x1b24b: 0x6cfeb020, + 0x1b24c: 0x6cd52620, 0x1b24d: 0x6cb6f020, 0x1b24e: 0x6c5ab020, 0x1b24f: 0x6c394020, + 0x1b250: 0x6cf2b220, 0x1b251: 0x6cc89820, 0x1b252: 0x6cdfda20, 0x1b253: 0x6c39f820, + 0x1b254: 0x6c3b0420, 0x1b255: 0x6c6aae20, 0x1b256: 0x6ce46020, 0x1b257: 0x6ca5d620, + 0x1b258: 0x6cc2d820, 0x1b259: 0x6c6e5820, 0x1b25a: 0x6c5cbc20, 0x1b25b: 0x6c6da420, + 0x1b25c: 0x6cb8d220, 0x1b25d: 0x6c2d4c20, 0x1b25e: 0x6d042620, 0x1b25f: 0x6c568a20, + 0x1b260: 0x6cec8820, 0x1b261: 0x6c7ef220, 0x1b262: 0x6c097420, 0x1b263: 0x6d19dc20, + 0x1b264: 0x6c1d6820, 0x1b265: 0x6ca52e20, 0x1b266: 0x6c3fe420, 0x1b267: 0x6c6e6e20, + 0x1b268: 0x6c94ec20, 0x1b269: 0x6c01b820, 0x1b26a: 0x6c7f9420, 0x1b26b: 0x6c7d5220, + 0x1b26c: 0x6d1a5220, 0x1b26d: 0x6d0b9220, 0x1b26e: 0x6c707e20, 0x1b26f: 0x6c85e820, + 0x1b270: 0x6c2d1220, 0x1b271: 0x6cfb4220, 0x1b272: 0x6c57da20, 0x1b273: 0x6c579220, + 0x1b274: 0x6d1bac20, 0x1b275: 0x6c14ee20, 0x1b276: 0x6cd05a20, 0x1b277: 0x6ce66e20, + 0x1b278: 0x6c296420, 0x1b279: 0x6d11ac20, 0x1b27a: 0x6cf4e620, 0x1b27b: 0x6ca44820, + 0x1b27c: 0x6c21b220, 0x1b27d: 0x6c641420, 0x1b27e: 0x6ce7d820, 0x1b27f: 0x6d06d220, + // Block 0x6ca, offset 0x1b280 + 0x1b280: 0x6d233020, 0x1b281: 0x6cef0a20, 0x1b282: 0x6c2c5420, 0x1b283: 0x6cc74820, + 0x1b284: 0x6c9a5620, 0x1b285: 0x6c27de20, 0x1b286: 0x6cc86220, 0x1b287: 0x6cbd2c20, + 0x1b288: 0x6c5ab220, 0x1b289: 0x6cf2ea20, 0x1b28a: 0x6cb99420, 0x1b28b: 0x6c210820, + 0x1b28c: 0x6c9e7420, 0x1b28d: 0x6c3fec20, 0x1b28e: 0x6c6b9620, 0x1b28f: 0x6c329820, + 0x1b290: 0x6d151420, 0x1b291: 0x6d382a20, 0x1b292: 0x6c99f820, 0x1b293: 0x6c59be20, + 0x1b294: 0x6c9dc220, 0x1b295: 0x6c013020, 0x1b296: 0x6d1bae20, 0x1b297: 0x6d079420, + 0x1b298: 0x6c6a0e20, 0x1b299: 0x6cee8220, 0x1b29a: 0x6c9a8e20, 0x1b29b: 0x6d261620, + 0x1b29c: 0x6d32c220, 0x1b29d: 0x6cbfae20, 0x1b29e: 0x6cd37a20, 0x1b29f: 0x6d01a820, + 0x1b2a0: 0x6ceb7c20, 0x1b2a1: 0x6c88f620, 0x1b2a2: 0x6c997820, 0x1b2a3: 0x6cc4c420, + 0x1b2a4: 0x6cd7e620, 0x1b2a5: 0x6cb0f220, 0x1b2a6: 0x6cf08e20, 0x1b2a7: 0x6cebd820, + 0x1b2a8: 0x6c6ff420, 0x1b2a9: 0x6c555620, 0x1b2aa: 0x6c02a620, 0x1b2ab: 0x6cbd1420, + 0x1b2ac: 0x6c05fe20, 0x1b2ad: 0x6d059220, 0x1b2ae: 0x6ce7da20, 0x1b2af: 0x6c4a6420, + 0x1b2b0: 0x6c1e8a20, 0x1b2b1: 0x6d110620, 0x1b2b2: 0x6cb09e20, 0x1b2b3: 0x6cf78420, + 0x1b2b4: 0x6d257a20, 0x1b2b5: 0x6d1d4020, 0x1b2b6: 0x6cc67020, 0x1b2b7: 0x6cc81a20, + 0x1b2b8: 0x6c1ab620, 0x1b2b9: 0x6c8e6620, 0x1b2ba: 0x6c9a5e20, 0x1b2bb: 0x6cac5c20, + 0x1b2bc: 0x6c02a820, 0x1b2bd: 0x6c966020, 0x1b2be: 0x6c46ae20, 0x1b2bf: 0x6c7cf620, + // Block 0x6cb, offset 0x1b2c0 + 0x1b2c0: 0x6cbd8020, 0x1b2c1: 0x6c644820, 0x1b2c2: 0x6ccae420, 0x1b2c3: 0x6d315e20, + 0x1b2c4: 0x6d257c20, 0x1b2c5: 0x6c6a1020, 0x1b2c6: 0x6cc68020, 0x1b2c7: 0x6ca00420, + 0x1b2c8: 0x6d1bc220, 0x1b2c9: 0x6c604c20, 0x1b2ca: 0x6cdac820, 0x1b2cb: 0x6ca79c20, + 0x1b2cc: 0x6cfb6c20, 0x1b2cd: 0x6ce1ce20, 0x1b2ce: 0x6cad0020, 0x1b2cf: 0x6c80b220, + 0x1b2d0: 0x6ca4fc20, 0x1b2d1: 0x6c05ca20, 0x1b2d2: 0x6c00a620, 0x1b2d3: 0x6cb0a020, + 0x1b2d4: 0x6cb20e20, 0x1b2d5: 0x6d182020, 0x1b2d6: 0x6cb17e20, 0x1b2d7: 0x6d238a20, + 0x1b2d8: 0x6c824220, 0x1b2d9: 0x6d081820, 0x1b2da: 0x6c975820, 0x1b2db: 0x6d140020, + 0x1b2dc: 0x6d2ec220, 0x1b2dd: 0x6c773820, 0x1b2de: 0x6d1d9820, 0x1b2df: 0x6ca6a820, + 0x1b2e0: 0x6c840e20, 0x1b2e1: 0x6c2b7a20, 0x1b2e2: 0x6c4a7820, 0x1b2e3: 0x6d0c1a20, + 0x1b2e4: 0x6c6c9c20, 0x1b2e5: 0x6d3b8420, 0x1b2e6: 0x6c16b820, 0x1b2e7: 0x6d2ada20, + 0x1b2e8: 0x6c4dac20, 0x1b2e9: 0x6ca59c20, 0x1b2ea: 0x6c81d820, 0x1b2eb: 0x6ca05c20, + 0x1b2ec: 0x6d300220, 0x1b2ed: 0x6c56ae20, 0x1b2ee: 0x6c56b020, 0x1b2ef: 0x6c02d620, + 0x1b2f0: 0x6ca59e20, 0x1b2f1: 0x6cbb1220, 0x1b2f2: 0x6c96f620, 0x1b2f3: 0x6cb1e420, + 0x1b2f4: 0x6c472a20, 0x1b2f5: 0x6cf46020, 0x1b2f6: 0x6cbbea20, 0x1b2f7: 0x6ceb8820, + 0x1b2f8: 0x6d2e1020, 0x1b2f9: 0x6c98f020, 0x1b2fa: 0x6cfb7820, 0x1b2fb: 0x6cfb7a20, + 0x1b2fc: 0x6ca14a20, 0x1b2fd: 0x6c8a0420, 0x1b2fe: 0x6c883020, 0x1b2ff: 0x6c57b820, + // Block 0x6cc, offset 0x1b300 + 0x1b300: 0x6c4a8420, 0x1b301: 0x6c2aa620, 0x1b302: 0x6d348c20, 0x1b303: 0x6d05ce20, + 0x1b304: 0x6d140a20, 0x1b305: 0x6c579c20, 0x1b306: 0x6cf69220, 0x1b307: 0x6c7d0a20, + 0x1b308: 0x6cc52820, 0x1b309: 0x6cf69420, 0x1b30a: 0x6d0ea020, 0x1b30b: 0x6c151820, + 0x1b30c: 0x6c686420, 0x1b30d: 0x6c9a6620, 0x1b30e: 0x6c396820, 0x1b30f: 0x6c385620, + 0x1b310: 0x6cfad420, 0x1b311: 0x6d188620, 0x1b312: 0x6c5c2a20, 0x1b313: 0x6c69c420, + 0x1b314: 0x6c405220, 0x1b315: 0x6cd3d820, 0x1b316: 0x6c0a4620, 0x1b317: 0x6ccda420, + 0x1b318: 0x6cdc5a20, 0x1b319: 0x6cbb2020, 0x1b31a: 0x6c88c820, 0x1b31b: 0x6c589420, + 0x1b31c: 0x6d02ec20, 0x1b31d: 0x6ca7aa20, 0x1b31e: 0x6c303420, 0x1b31f: 0x6d188820, + 0x1b320: 0x6c117020, 0x1b321: 0x6c00c820, 0x1b322: 0x6ca77820, 0x1b323: 0x6ca92220, + 0x1b324: 0x6c966420, 0x1b325: 0x6ce5ce20, 0x1b326: 0x6c1de220, 0x1b327: 0x6c6d5820, + 0x1b328: 0x6c226820, 0x1b329: 0x6d219e20, 0x1b32a: 0x6cb21620, 0x1b32b: 0x6cc6be20, + 0x1b32c: 0x6cc7ce20, 0x1b32d: 0x6ca3a820, 0x1b32e: 0x6d0c3220, 0x1b32f: 0x6cdf4620, + 0x1b330: 0x6d1bfc20, 0x1b331: 0x6c11b620, 0x1b332: 0x6ca7b220, 0x1b333: 0x6d26ea20, + 0x1b334: 0x6d1c9620, 0x1b335: 0x6c9dd620, 0x1b336: 0x6c0ae620, 0x1b337: 0x6c966620, + 0x1b338: 0x6cd08020, 0x1b339: 0x6d043e20, 0x1b33a: 0x6ca6d420, 0x1b33b: 0x6c31c820, + 0x1b33c: 0x6c8f2020, 0x1b33d: 0x6d251c20, 0x1b33e: 0x6c804820, 0x1b33f: 0x6d0ee820, + // Block 0x6cd, offset 0x1b340 + 0x1b340: 0x6cd6a820, 0x1b341: 0x6c8d8c20, 0x1b342: 0x6c696620, 0x1b343: 0x6ca77a20, + 0x1b344: 0x6c804c20, 0x1b345: 0x6cb94420, 0x1b346: 0x6d1c1a20, 0x1b347: 0x6cd6ae20, + 0x1b348: 0x6c5c9020, 0x1b349: 0x6cc32620, 0x1b34a: 0x6c9d0a20, 0x1b34b: 0x6c84b820, + 0x1b34c: 0x6c944e20, 0x1b34d: 0x6d0d0e20, 0x1b34e: 0x6d3a4020, 0x1b34f: 0x6c805820, + 0x1b350: 0x6d3f6820, 0x1b351: 0x6c6a5220, 0x1b352: 0x6c73c420, 0x1b353: 0x6c73c620, + 0x1b354: 0x6c799220, 0x1b355: 0x6d281220, 0x1b356: 0x6c965e20, 0x1b357: 0x6d3f2820, + 0x1b358: 0x6c25a020, 0x1b359: 0x6cdcca20, 0x1b35a: 0x6c3dd620, 0x1b35b: 0x6c06d620, + 0x1b35c: 0x6d3e0020, 0x1b35d: 0x6cffcc20, 0x1b35e: 0x6d031a20, 0x1b35f: 0x6c9bfe20, + 0x1b360: 0x6cd88c20, 0x1b361: 0x6cdf0220, 0x1b362: 0x6c05a420, 0x1b363: 0x6c619220, + 0x1b364: 0x6c46f020, 0x1b365: 0x6caa3c20, 0x1b366: 0x6d08f820, 0x1b367: 0x6d206a20, + 0x1b368: 0x6d3ba220, 0x1b369: 0x6c4d1e20, 0x1b36a: 0x6c943020, 0x1b36b: 0x6cdcd020, + 0x1b36c: 0x6ca48e20, 0x1b36d: 0x6c9ec420, 0x1b36e: 0x6c239220, 0x1b36f: 0x6cb8d420, + 0x1b370: 0x6cd52820, 0x1b371: 0x6c11f620, 0x1b372: 0x6d0aea20, 0x1b373: 0x6d3e3420, + 0x1b374: 0x6ca63e20, 0x1b375: 0x6c3d8820, 0x1b376: 0x6d3e4e20, 0x1b377: 0x6c841020, + 0x1b378: 0x6d091820, 0x1b379: 0x6c0ff620, 0x1b37a: 0x6cc7d020, 0x1b37b: 0x6ca38820, + 0x1b37c: 0x6ca89020, 0x1b37d: 0x6ca89220, 0x1b37e: 0x6d1c1c20, 0x1b37f: 0x6c945020, + // Block 0x6ce, offset 0x1b380 + 0x1b380: 0x6c9db620, 0x1b381: 0x6ca8f220, 0x1b382: 0x6cc6ee20, 0x1b383: 0x6cdddc20, + 0x1b384: 0x6c4ab820, 0x1b385: 0x6d2d1820, 0x1b386: 0x6cbef820, 0x1b387: 0x6d221620, + 0x1b388: 0x6cd43a20, 0x1b389: 0x6c011220, 0x1b38a: 0x6ce83820, 0x1b38b: 0x6cd97e20, + 0x1b38c: 0x6cecc020, 0x1b38d: 0x6cc78420, 0x1b38e: 0x6d118220, 0x1b38f: 0x6c52f220, + 0x1b390: 0x6d145e20, 0x1b391: 0x6c6e0c20, 0x1b392: 0x6d3cc820, 0x1b393: 0x6c9d2220, + 0x1b394: 0x6d3a5820, 0x1b395: 0x6c295620, 0x1b396: 0x6c530020, 0x1b397: 0x6d3f7020, + 0x1b398: 0x6c490420, 0x1b399: 0x6d38fe20, 0x1b39a: 0x6c2f9620, 0x1b39b: 0x6cecee20, + 0x1b39c: 0x6d198e20, 0x1b39d: 0x6c05e220, 0x1b39e: 0x6cd24220, 0x1b39f: 0x6cd24420, + 0x1b3a0: 0x6c1d3620, 0x1b3a1: 0x6cd04620, 0x1b3a2: 0x6c788c20, 0x1b3a3: 0x6d078220, + 0x1b3a4: 0x6cd32c20, 0x1b3a5: 0x6d202420, 0x1b3a6: 0x6c58fa20, 0x1b3a7: 0x6d14b820, + 0x1b3a8: 0x6ce5b820, 0x1b3a9: 0x6cd2be20, 0x1b3aa: 0x6cfc8c20, 0x1b3ab: 0x6c456e20, + 0x1b3ac: 0x6c19ca20, 0x1b3ad: 0x6cc44220, 0x1b3ae: 0x6c457a20, 0x1b3af: 0x6cfe9420, + 0x1b3b0: 0x6d291220, 0x1b3b1: 0x6d2cba20, 0x1b3b2: 0x6c05f020, 0x1b3b3: 0x6c4d5e20, + 0x1b3b4: 0x6d0e4e20, 0x1b3b5: 0x6cfe9620, 0x1b3b6: 0x6c634020, 0x1b3b7: 0x6cd05020, + 0x1b3b8: 0x6c18ae20, 0x1b3b9: 0x6cc66020, 0x1b3ba: 0x6c5a4c20, 0x1b3bb: 0x6c9d3020, + 0x1b3bc: 0x6c79e020, 0x1b3bd: 0x6c7b5220, 0x1b3be: 0x6c0d2e20, 0x1b3bf: 0x6cdaa020, + // Block 0x6cf, offset 0x1b3c0 + 0x1b3c0: 0x6c112420, 0x1b3c1: 0x6d296620, 0x1b3c2: 0x6c61de20, 0x1b3c3: 0x6d24da20, + 0x1b3c4: 0x6c61e020, 0x1b3c5: 0x6d1a5420, 0x1b3c6: 0x6c9d3620, 0x1b3c7: 0x6c79e620, + 0x1b3c8: 0x6cbe4220, 0x1b3c9: 0x6cc3b420, 0x1b3ca: 0x6d315620, 0x1b3cb: 0x6c668820, + 0x1b3cc: 0x6c3fee20, 0x1b3cd: 0x6ca90420, 0x1b3ce: 0x6c0e1e20, 0x1b3cf: 0x6c587420, + 0x1b3d0: 0x6c9a9020, 0x1b3d1: 0x6cbdd620, 0x1b3d2: 0x6c4e0c20, 0x1b3d3: 0x6d233220, + 0x1b3d4: 0x6cd26620, 0x1b3d5: 0x6ca90620, 0x1b3d6: 0x6c6d1020, 0x1b3d7: 0x6ca90a20, + 0x1b3d8: 0x6d365020, 0x1b3d9: 0x6d226820, 0x1b3da: 0x6c060220, 0x1b3db: 0x6c7b5620, + 0x1b3dc: 0x6ca90c20, 0x1b3dd: 0x6cbddc20, 0x1b3de: 0x6ca12820, 0x1b3df: 0x6c13f220, + 0x1b3e0: 0x6c726020, 0x1b3e1: 0x6c489c20, 0x1b3e2: 0x6cbde220, 0x1b3e3: 0x6c54e420, + 0x1b3e4: 0x6cf50a20, 0x1b3e5: 0x6c89f020, 0x1b3e6: 0x6cd27a20, 0x1b3e7: 0x6ca91020, + 0x1b3e8: 0x6d2d4620, 0x1b3e9: 0x6cd06820, 0x1b3ea: 0x6ceffc20, 0x1b3eb: 0x6d014820, + 0x1b3ec: 0x6c7b5820, 0x1b3ed: 0x6c5c0e20, 0x1b3ee: 0x6c8a0620, 0x1b3ef: 0x6c75e220, + 0x1b3f0: 0x6c589620, 0x1b3f1: 0x6d18c020, 0x1b3f2: 0x6d156a20, 0x1b3f3: 0x6c061c20, + 0x1b3f4: 0x6cbd4a20, 0x1b3f5: 0x6c1d4620, 0x1b3f6: 0x6c062020, 0x1b3f7: 0x6c3c7c20, + 0x1b3f8: 0x6c25b020, 0x1b3f9: 0x6c332c20, 0x1b3fa: 0x6cd87820, 0x1b3fb: 0x6d09d420, + 0x1b3fc: 0x6c29ce20, 0x1b3fd: 0x6c93ca20, 0x1b3fe: 0x6c333620, 0x1b3ff: 0x6cd45020, + // Block 0x6d0, offset 0x1b400 + 0x1b400: 0x6cb34a20, 0x1b401: 0x6c3c2420, 0x1b402: 0x6d3b7420, 0x1b403: 0x6c3d5e20, + 0x1b404: 0x6ccf3a20, 0x1b405: 0x6c789620, 0x1b406: 0x6c674e20, 0x1b407: 0x6c675c20, + 0x1b408: 0x6d3b7a20, 0x1b409: 0x6cf08420, 0x1b40a: 0x6d41e820, 0x1b40b: 0x6d0a0c20, + 0x1b40c: 0x6cd5d220, 0x1b40d: 0x6c335420, 0x1b40e: 0x6c29e820, 0x1b40f: 0x6cffa220, + 0x1b410: 0x6c6a5420, 0x1b411: 0x6cceac20, 0x1b412: 0x6c377e20, 0x1b413: 0x6c378020, + 0x1b414: 0x6c378220, 0x1b415: 0x6c40d020, 0x1b416: 0x6c645e20, 0x1b417: 0x6cd49a20, + 0x1b418: 0x6c189220, 0x1b419: 0x6cce4a20, 0x1b41a: 0x6cce4c20, 0x1b41b: 0x6ca1b420, + 0x1b41c: 0x6c40c620, 0x1b41d: 0x6c169e20, 0x1b41e: 0x6c8a9a20, 0x1b41f: 0x6cfc1020, + 0x1b420: 0x6cfc1220, 0x1b421: 0x6c7dde20, 0x1b422: 0x6d1edc20, 0x1b423: 0x6cedbc20, + 0x1b424: 0x6d1ede20, 0x1b425: 0x6c8a8c20, 0x1b426: 0x6c8a8e20, 0x1b427: 0x6d10ca20, + 0x1b428: 0x6c983020, 0x1b429: 0x6cedc620, 0x1b42a: 0x6cedc020, 0x1b42b: 0x6cedc220, + 0x1b42c: 0x6c40d420, 0x1b42d: 0x6d10cc20, 0x1b42e: 0x6c34d620, 0x1b42f: 0x6c7cec20, + 0x1b430: 0x6d37f020, 0x1b431: 0x6c6ff620, 0x1b432: 0x6c419c20, 0x1b433: 0x6c478820, + 0x1b434: 0x6c419e20, 0x1b435: 0x6ce9b420, 0x1b436: 0x6c41b620, 0x1b437: 0x6c41b820, + 0x1b438: 0x6cd18a20, 0x1b439: 0x6d1ac220, 0x1b43a: 0x6c1b7020, 0x1b43b: 0x6c779020, + 0x1b43c: 0x6ca5b620, 0x1b43d: 0x6c6c8020, 0x1b43e: 0x6cef8620, 0x1b43f: 0x6ca7d020, + // Block 0x6d1, offset 0x1b440 + 0x1b440: 0x6c70f020, 0x1b441: 0x6cb08620, 0x1b442: 0x6c134e20, 0x1b443: 0x6cf83c20, + 0x1b444: 0x6c086c20, 0x1b445: 0x6c705620, 0x1b446: 0x6c6bbe20, 0x1b447: 0x6ce48020, + 0x1b448: 0x6cc0dc20, 0x1b449: 0x6ce44c20, 0x1b44a: 0x6c6bc020, 0x1b44b: 0x6cf35620, + 0x1b44c: 0x6c2dfa20, 0x1b44d: 0x6cd1a220, 0x1b44e: 0x6cd2c020, 0x1b44f: 0x6cb28020, + 0x1b450: 0x6c5ea420, 0x1b451: 0x6d017c20, 0x1b452: 0x6d31c620, 0x1b453: 0x6d017e20, + 0x1b454: 0x6ca5ca20, 0x1b455: 0x6d2de020, 0x1b456: 0x6cf5ba20, 0x1b457: 0x6cef9e20, + 0x1b458: 0x6c97b420, 0x1b459: 0x6c353a20, 0x1b45a: 0x6c910620, 0x1b45b: 0x6cb29820, + 0x1b45c: 0x6ce44e20, 0x1b45d: 0x6c3aa420, 0x1b45e: 0x6cd55820, 0x1b45f: 0x6d01aa20, + 0x1b460: 0x6ce8a020, 0x1b461: 0x6c939a20, 0x1b462: 0x6c93a620, 0x1b463: 0x6cf7f820, + 0x1b464: 0x6c135420, 0x1b465: 0x6c93ae20, 0x1b466: 0x6c727820, 0x1b467: 0x6d01f620, + 0x1b468: 0x6c72a420, 0x1b469: 0x6c73ba20, 0x1b46a: 0x6c8a3020, 0x1b46b: 0x6c74e620, + 0x1b46c: 0x6cd58820, 0x1b46d: 0x6cf93a20, 0x1b46e: 0x6c17fa20, 0x1b46f: 0x6cea3620, + 0x1b470: 0x6ca67420, 0x1b471: 0x6cccb020, 0x1b472: 0x6cec4820, 0x1b473: 0x6cfa6c20, + 0x1b474: 0x6c856820, 0x1b475: 0x6c35c620, 0x1b476: 0x6c2a5420, 0x1b477: 0x6c5ca820, + 0x1b478: 0x6c8f6820, 0x1b479: 0x6d165c20, 0x1b47a: 0x6cb6ca20, 0x1b47b: 0x6cc5b020, + 0x1b47c: 0x6cf49e20, 0x1b47d: 0x6c4e8020, 0x1b47e: 0x6ccf9c20, 0x1b47f: 0x6d221820, + // Block 0x6d2, offset 0x1b480 + 0x1b480: 0x6c1e5220, 0x1b481: 0x6cdc1e20, 0x1b482: 0x6cb6cc20, 0x1b483: 0x6cc5b220, + 0x1b484: 0x6d267c20, 0x1b485: 0x6c04b820, 0x1b486: 0x6d118420, 0x1b487: 0x6c01f220, + 0x1b488: 0x6d0b0e20, 0x1b489: 0x6cf4a620, 0x1b48a: 0x6c6a6e20, 0x1b48b: 0x6c35cc20, + 0x1b48c: 0x6c5fc620, 0x1b48d: 0x6cb8a420, 0x1b48e: 0x6c3b5420, 0x1b48f: 0x6cecc420, + 0x1b490: 0x6cb57020, 0x1b491: 0x6c132820, 0x1b492: 0x6cb96a20, 0x1b493: 0x6cb57220, + 0x1b494: 0x6c142e20, 0x1b495: 0x6c6bb020, 0x1b496: 0x6cc0d020, 0x1b497: 0x6c429820, + 0x1b498: 0x6cfc7a20, 0x1b499: 0x6c02c020, 0x1b49a: 0x6c7f8a20, 0x1b49b: 0x6c29d020, + 0x1b49c: 0x6c031a20, 0x1b49d: 0x6d427c20, 0x1b49e: 0x6d427e20, 0x1b49f: 0x6d100220, + 0x1b4a0: 0x6c71f820, 0x1b4a1: 0x6c425c20, 0x1b4a2: 0x6c785820, 0x1b4a3: 0x6c466e20, + 0x1b4a4: 0x6d08fa20, 0x1b4a5: 0x6cb2fa20, 0x1b4a6: 0x6c858a20, 0x1b4a7: 0x6ce56e20, + 0x1b4a8: 0x6cc0e020, 0x1b4a9: 0x6d0c6220, 0x1b4aa: 0x6c3de420, 0x1b4ab: 0x6d052e20, + 0x1b4ac: 0x6c640020, 0x1b4ad: 0x6c8e0a20, 0x1b4ae: 0x6ceaec20, 0x1b4af: 0x6cafb220, + 0x1b4b0: 0x6c02c820, 0x1b4b1: 0x6c273020, 0x1b4b2: 0x6c7be020, 0x1b4b3: 0x6d268620, + 0x1b4b4: 0x6cc0e220, 0x1b4b5: 0x6c566220, 0x1b4b6: 0x6cb36620, 0x1b4b7: 0x6c9f2a20, + 0x1b4b8: 0x6c01a220, 0x1b4b9: 0x6ce57020, 0x1b4ba: 0x6c8ca620, 0x1b4bb: 0x6c1b0620, + 0x1b4bc: 0x6cb2ea20, 0x1b4bd: 0x6c2fde20, 0x1b4be: 0x6c4e8c20, 0x1b4bf: 0x6c7c3420, + // Block 0x6d3, offset 0x1b4c0 + 0x1b4c0: 0x6d053020, 0x1b4c1: 0x6c992a20, 0x1b4c2: 0x6ce71420, 0x1b4c3: 0x6d08fc20, + 0x1b4c4: 0x6d16ae20, 0x1b4c5: 0x6c0be220, 0x1b4c6: 0x6c50d220, 0x1b4c7: 0x6c032c20, + 0x1b4c8: 0x6c95e620, 0x1b4c9: 0x6c35f020, 0x1b4ca: 0x6c3fc220, 0x1b4cb: 0x6d09e420, + 0x1b4cc: 0x6c2e6c20, 0x1b4cd: 0x6c921e20, 0x1b4ce: 0x6c371e20, 0x1b4cf: 0x6c373c20, + 0x1b4d0: 0x6c40e820, 0x1b4d1: 0x6cc28c20, 0x1b4d2: 0x6c305a20, 0x1b4d3: 0x6d149420, + 0x1b4d4: 0x6ca22e20, 0x1b4d5: 0x6cd25020, 0x1b4d6: 0x6c011a20, 0x1b4d7: 0x6ceee820, + 0x1b4d8: 0x6c586220, 0x1b4d9: 0x6d359620, 0x1b4da: 0x6c9d2c20, 0x1b4db: 0x6c850220, + 0x1b4dc: 0x6c61a420, 0x1b4dd: 0x6ce72220, 0x1b4de: 0x6ceeea20, 0x1b4df: 0x6d202620, + 0x1b4e0: 0x6c483420, 0x1b4e1: 0x6cf99420, 0x1b4e2: 0x6c850420, 0x1b4e3: 0x6d10d820, + 0x1b4e4: 0x6c698620, 0x1b4e5: 0x6d329420, 0x1b4e6: 0x6c943220, 0x1b4e7: 0x6c683020, + 0x1b4e8: 0x6c355420, 0x1b4e9: 0x6c355620, 0x1b4ea: 0x6d22ee20, 0x1b4eb: 0x6d007a20, + 0x1b4ec: 0x6c100e20, 0x1b4ed: 0x6cbc3620, 0x1b4ee: 0x6cc43420, 0x1b4ef: 0x6c3c3220, + 0x1b4f0: 0x6c3c3420, 0x1b4f1: 0x6ca4a220, 0x1b4f2: 0x6c850a20, 0x1b4f3: 0x6d1f1420, + 0x1b4f4: 0x6cfca220, 0x1b4f5: 0x6c532820, 0x1b4f6: 0x6c29d220, 0x1b4f7: 0x6ccfc820, + 0x1b4f8: 0x6c19cc20, 0x1b4f9: 0x6ce88e20, 0x1b4fa: 0x6c44f620, 0x1b4fb: 0x6c75a220, + 0x1b4fc: 0x6c502620, 0x1b4fd: 0x6cf9a020, 0x1b4fe: 0x6d1a4620, 0x1b4ff: 0x6d223a20, + // Block 0x6d4, offset 0x1b500 + 0x1b500: 0x6c811620, 0x1b501: 0x6c770820, 0x1b502: 0x6c814e20, 0x1b503: 0x6c7ee820, + 0x1b504: 0x6cfbf220, 0x1b505: 0x6cc3aa20, 0x1b506: 0x6c797020, 0x1b507: 0x6c1d1020, + 0x1b508: 0x6c1d1220, 0x1b509: 0x6cde4620, 0x1b50a: 0x6c8bac20, 0x1b50b: 0x6c578a20, + 0x1b50c: 0x6c708420, 0x1b50d: 0x6c7ef420, 0x1b50e: 0x6cb5be20, 0x1b50f: 0x6c9f4420, + 0x1b510: 0x6c7d5420, 0x1b511: 0x6c7d5620, 0x1b512: 0x6d40b420, 0x1b513: 0x6c480a20, + 0x1b514: 0x6c24c820, 0x1b515: 0x6d0b2620, 0x1b516: 0x6d0b2820, 0x1b517: 0x6c429e20, + 0x1b518: 0x6c94ee20, 0x1b519: 0x6c94f020, 0x1b51a: 0x6c837420, 0x1b51b: 0x6c742020, + 0x1b51c: 0x6c342820, 0x1b51d: 0x6d32ac20, 0x1b51e: 0x6c4c1e20, 0x1b51f: 0x6d1a5620, + 0x1b520: 0x6c2ff220, 0x1b521: 0x6c4dfa20, 0x1b522: 0x6d32ae20, 0x1b523: 0x6cefac20, + 0x1b524: 0x6cff7e20, 0x1b525: 0x6cafde20, 0x1b526: 0x6d0bf220, 0x1b527: 0x6cd91420, + 0x1b528: 0x6c6ab220, 0x1b529: 0x6c07e220, 0x1b52a: 0x6d40b620, 0x1b52b: 0x6c7a3c20, + 0x1b52c: 0x6c2ff420, 0x1b52d: 0x6d2de420, 0x1b52e: 0x6c480c20, 0x1b52f: 0x6d1a5820, + 0x1b530: 0x6d3f6a20, 0x1b531: 0x6d2b4e20, 0x1b532: 0x6c59c020, 0x1b533: 0x6d211820, + 0x1b534: 0x6cec6220, 0x1b535: 0x6d0fb220, 0x1b536: 0x6c3c4a20, 0x1b537: 0x6cc05c20, + 0x1b538: 0x6d0fb420, 0x1b539: 0x6ce32020, 0x1b53a: 0x6d15ec20, 0x1b53b: 0x6d361e20, + 0x1b53c: 0x6cd37c20, 0x1b53d: 0x6d291620, 0x1b53e: 0x6d11ae20, 0x1b53f: 0x6c363020, + // Block 0x6d5, offset 0x1b540 + 0x1b540: 0x6d3af220, 0x1b541: 0x6c76ac20, 0x1b542: 0x6c93dc20, 0x1b543: 0x6d0d7a20, + 0x1b544: 0x6c9a5820, 0x1b545: 0x6c4e0e20, 0x1b546: 0x6c5ec820, 0x1b547: 0x6c5eca20, + 0x1b548: 0x6c591e20, 0x1b549: 0x6ce67020, 0x1b54a: 0x6cd16a20, 0x1b54b: 0x6c99fa20, + 0x1b54c: 0x6cba5220, 0x1b54d: 0x6cf4e820, 0x1b54e: 0x6d211a20, 0x1b54f: 0x6d3f8420, + 0x1b550: 0x6c7f9a20, 0x1b551: 0x6c786420, 0x1b552: 0x6d0c9220, 0x1b553: 0x6d0c9420, + 0x1b554: 0x6cefbc20, 0x1b555: 0x6d3f8620, 0x1b556: 0x6c13e020, 0x1b557: 0x6cdc3c20, + 0x1b558: 0x6cc67220, 0x1b559: 0x6c78ee20, 0x1b55a: 0x6cbd2e20, 0x1b55b: 0x6d211c20, + 0x1b55c: 0x6ce45220, 0x1b55d: 0x6c90e220, 0x1b55e: 0x6ce8ba20, 0x1b55f: 0x6c330420, + 0x1b560: 0x6cf64220, 0x1b561: 0x6cf25220, 0x1b562: 0x6c123020, 0x1b563: 0x6c296c20, + 0x1b564: 0x6cc68220, 0x1b565: 0x6c6ae020, 0x1b566: 0x6c765e20, 0x1b567: 0x6c8e6820, + 0x1b568: 0x6cf4fc20, 0x1b569: 0x6cd92420, 0x1b56a: 0x6cbb7c20, 0x1b56b: 0x6d3e3620, + 0x1b56c: 0x6cef0c20, 0x1b56d: 0x6c07f620, 0x1b56e: 0x6c2ccc20, 0x1b56f: 0x6c25da20, + 0x1b570: 0x6cba1220, 0x1b571: 0x6d1e4420, 0x1b572: 0x6ca83e20, 0x1b573: 0x6c25dc20, + 0x1b574: 0x6c614820, 0x1b575: 0x6cd41620, 0x1b576: 0x6cc93c20, 0x1b577: 0x6cd96820, + 0x1b578: 0x6d3fa020, 0x1b579: 0x6c67f420, 0x1b57a: 0x6c89f220, 0x1b57b: 0x6c773c20, + 0x1b57c: 0x6c15c620, 0x1b57d: 0x6c2ec820, 0x1b57e: 0x6c132420, 0x1b57f: 0x6c2f7820, + // Block 0x6d6, offset 0x1b580 + 0x1b580: 0x6ce86820, 0x1b581: 0x6c90ec20, 0x1b582: 0x6d2f3a20, 0x1b583: 0x6d2dfe20, + 0x1b584: 0x6d2e0020, 0x1b585: 0x6c024e20, 0x1b586: 0x6c127c20, 0x1b587: 0x6cc11e20, + 0x1b588: 0x6cbac820, 0x1b589: 0x6c24d620, 0x1b58a: 0x6d418e20, 0x1b58b: 0x6c29e220, + 0x1b58c: 0x6c29e420, 0x1b58d: 0x6cf79020, 0x1b58e: 0x6d238c20, 0x1b58f: 0x6cae2620, + 0x1b590: 0x6c8f9a20, 0x1b591: 0x6cfe4420, 0x1b592: 0x6c135620, 0x1b593: 0x6c0e8620, + 0x1b594: 0x6cbd3c20, 0x1b595: 0x6c686620, 0x1b596: 0x6d0dc620, 0x1b597: 0x6c816a20, + 0x1b598: 0x6d2e7420, 0x1b599: 0x6c8bcc20, 0x1b59a: 0x6c8a0820, 0x1b59b: 0x6c8a0a20, + 0x1b59c: 0x6c6c5020, 0x1b59d: 0x6c2ae220, 0x1b59e: 0x6c350a20, 0x1b59f: 0x6d41ee20, + 0x1b5a0: 0x6c69ba20, 0x1b5a1: 0x6c4b6220, 0x1b5a2: 0x6d113420, 0x1b5a3: 0x6c686820, + 0x1b5a4: 0x6d113620, 0x1b5a5: 0x6c748e20, 0x1b5a6: 0x6d2d9620, 0x1b5a7: 0x6d188a20, + 0x1b5a8: 0x6d091a20, 0x1b5a9: 0x6ca4be20, 0x1b5aa: 0x6d133820, 0x1b5ab: 0x6d133a20, + 0x1b5ac: 0x6d155a20, 0x1b5ad: 0x6ca87020, 0x1b5ae: 0x6cfc2a20, 0x1b5af: 0x6c608220, + 0x1b5b0: 0x6d020c20, 0x1b5b1: 0x6c786e20, 0x1b5b2: 0x6cf69820, 0x1b5b3: 0x6c2c9a20, + 0x1b5b4: 0x6c02e620, 0x1b5b5: 0x6d419c20, 0x1b5b6: 0x6cf14820, 0x1b5b7: 0x6d156c20, + 0x1b5b8: 0x6cc6c020, 0x1b5b9: 0x6c29f020, 0x1b5ba: 0x6c8e1420, 0x1b5bb: 0x6d28cc20, + 0x1b5bc: 0x6d228c20, 0x1b5bd: 0x6d26f220, 0x1b5be: 0x6d1b0c20, 0x1b5bf: 0x6cc83820, + // Block 0x6d7, offset 0x1b5c0 + 0x1b5c0: 0x6c6b5420, 0x1b5c1: 0x6c869c20, 0x1b5c2: 0x6c4a9820, 0x1b5c3: 0x6c8fbe20, + 0x1b5c4: 0x6c8fc020, 0x1b5c5: 0x6c2ce420, 0x1b5c6: 0x6cc6d620, 0x1b5c7: 0x6cf72a20, + 0x1b5c8: 0x6c718620, 0x1b5c9: 0x6c155020, 0x1b5ca: 0x6d1d2220, 0x1b5cb: 0x6c7c5420, + 0x1b5cc: 0x6d0cee20, 0x1b5cd: 0x6ceec820, 0x1b5ce: 0x6ca4d420, 0x1b5cf: 0x6cc32820, + 0x1b5d0: 0x6c17ac20, 0x1b5d1: 0x6c24a420, 0x1b5d2: 0x6c945220, 0x1b5d3: 0x6c2cf420, + 0x1b5d4: 0x6c2cf620, 0x1b5d5: 0x6ca8e020, 0x1b5d6: 0x6d0d1220, 0x1b5d7: 0x6d0d1020, + 0x1b5d8: 0x6d0e2020, 0x1b5d9: 0x6c7cbc20, 0x1b5da: 0x6d0e2220, 0x1b5db: 0x6c1fd620, + 0x1b5dc: 0x6c7b0820, 0x1b5dd: 0x6c1fd820, 0x1b5de: 0x6d385020, 0x1b5df: 0x6c597020, + 0x1b5e0: 0x6c6d8a20, 0x1b5e1: 0x6d09d820, 0x1b5e2: 0x6c175e20, 0x1b5e3: 0x6c176020, + 0x1b5e4: 0x6c8b2620, 0x1b5e5: 0x6c454a20, 0x1b5e6: 0x6d426020, 0x1b5e7: 0x6cbc1a20, + 0x1b5e8: 0x6c71e820, 0x1b5e9: 0x6c45ce20, 0x1b5ea: 0x6c71f220, 0x1b5eb: 0x6cf35220, + 0x1b5ec: 0x6cb4be20, 0x1b5ed: 0x6cb4c020, 0x1b5ee: 0x6c143620, 0x1b5ef: 0x6cc05e20, + 0x1b5f0: 0x6cc08220, 0x1b5f1: 0x6c610e20, 0x1b5f2: 0x6d15ac20, 0x1b5f3: 0x6cd87020, + 0x1b5f4: 0x6c03e620, 0x1b5f5: 0x6d338a20, 0x1b5f6: 0x6d2f5820, 0x1b5f7: 0x6cfe1e20, + 0x1b5f8: 0x6d14bc20, 0x1b5f9: 0x6c6c8820, 0x1b5fa: 0x6d0a6c20, 0x1b5fb: 0x6c734020, + 0x1b5fc: 0x6c033820, 0x1b5fd: 0x6d0a8c20, 0x1b5fe: 0x6c6c1a20, 0x1b5ff: 0x6c3dc620, + // Block 0x6d8, offset 0x1b600 + 0x1b600: 0x6d287e20, 0x1b601: 0x6c090220, 0x1b602: 0x6cd2f020, 0x1b603: 0x6c105820, + 0x1b604: 0x6c2f4620, 0x1b605: 0x6cd66220, 0x1b606: 0x6c384a20, 0x1b607: 0x6ca7ec20, + 0x1b608: 0x6cd19020, 0x1b609: 0x6c3b0e20, 0x1b60a: 0x6cabe420, 0x1b60b: 0x6d34e020, + 0x1b60c: 0x6cf57a20, 0x1b60d: 0x6c565420, 0x1b60e: 0x6c286420, 0x1b60f: 0x6ceede20, + 0x1b610: 0x6d2f2020, 0x1b611: 0x6ce16e20, 0x1b612: 0x6c273220, 0x1b613: 0x6ca0c820, + 0x1b614: 0x6cae0620, 0x1b615: 0x6cabe620, 0x1b616: 0x6ce5e820, 0x1b617: 0x6c0e4c20, + 0x1b618: 0x6c87f220, 0x1b619: 0x6d358620, 0x1b61a: 0x6d397620, 0x1b61b: 0x6c0eb420, + 0x1b61c: 0x6d358820, 0x1b61d: 0x6c2c2620, 0x1b61e: 0x6ca0de20, 0x1b61f: 0x6d16e220, + 0x1b620: 0x6d16e420, 0x1b621: 0x6cb28220, 0x1b622: 0x6cb84820, 0x1b623: 0x6c731420, + 0x1b624: 0x6cc79220, 0x1b625: 0x6cd66420, 0x1b626: 0x6c274020, 0x1b627: 0x6d334020, + 0x1b628: 0x6cd71420, 0x1b629: 0x6cbc3820, 0x1b62a: 0x6d313620, 0x1b62b: 0x6cd1b020, + 0x1b62c: 0x6cc44420, 0x1b62d: 0x6cf77020, 0x1b62e: 0x6c051c20, 0x1b62f: 0x6c275020, + 0x1b630: 0x6c4a4420, 0x1b631: 0x6c1d9420, 0x1b632: 0x6cb29a20, 0x1b633: 0x6d2f2c20, + 0x1b634: 0x6cca4a20, 0x1b635: 0x6cec8a20, 0x1b636: 0x6c275c20, 0x1b637: 0x6ceefc20, + 0x1b638: 0x6c16a420, 0x1b639: 0x6ccc4820, 0x1b63a: 0x6cb5c220, 0x1b63b: 0x6d2abe20, + 0x1b63c: 0x6c4c6820, 0x1b63d: 0x6c997a20, 0x1b63e: 0x6c321620, 0x1b63f: 0x6c540020, + // Block 0x6d9, offset 0x1b640 + 0x1b640: 0x6d334c20, 0x1b641: 0x6d059420, 0x1b642: 0x6c9d4420, 0x1b643: 0x6cef0e20, + 0x1b644: 0x6cf2ec20, 0x1b645: 0x6c3e7620, 0x1b646: 0x6d179620, 0x1b647: 0x6c052e20, + 0x1b648: 0x6cb2a420, 0x1b649: 0x6c2f3a20, 0x1b64a: 0x6c459220, 0x1b64b: 0x6cac5e20, + 0x1b64c: 0x6c5a5420, 0x1b64d: 0x6ce1d220, 0x1b64e: 0x6c9d5420, 0x1b64f: 0x6c644a20, + 0x1b650: 0x6ce2a020, 0x1b651: 0x6c5ad020, 0x1b652: 0x6d37c020, 0x1b653: 0x6cccfa20, + 0x1b654: 0x6c97e620, 0x1b655: 0x6ca29420, 0x1b656: 0x6c0c0820, 0x1b657: 0x6c4c7220, + 0x1b658: 0x6d2adc20, 0x1b659: 0x6ca29620, 0x1b65a: 0x6c053420, 0x1b65b: 0x6d2f3c20, + 0x1b65c: 0x6c6e2820, 0x1b65d: 0x6c15d220, 0x1b65e: 0x6c3ed620, 0x1b65f: 0x6d36a620, + 0x1b660: 0x6c54f420, 0x1b661: 0x6c385820, 0x1b662: 0x6c207620, 0x1b663: 0x6c09f220, + 0x1b664: 0x6c0ae220, 0x1b665: 0x6d2f4820, 0x1b666: 0x6c9d8420, 0x1b667: 0x6cbba420, + 0x1b668: 0x6c14d820, 0x1b669: 0x6c3b8620, 0x1b66a: 0x6c9b4820, 0x1b66b: 0x6c053e20, + 0x1b66c: 0x6c1de420, 0x1b66d: 0x6c9eee20, 0x1b66e: 0x6c1eb820, 0x1b66f: 0x6c6b3220, + 0x1b670: 0x6cfc3e20, 0x1b671: 0x6c7fe220, 0x1b672: 0x6c420a20, 0x1b673: 0x6cb26e20, + 0x1b674: 0x6ca6f220, 0x1b675: 0x6c646020, 0x1b676: 0x6c0e0420, 0x1b677: 0x6c0e0c20, + 0x1b678: 0x6d041620, 0x1b679: 0x6c422620, 0x1b67a: 0x6d107e20, 0x1b67b: 0x6c58ec20, + 0x1b67c: 0x6d200c20, 0x1b67d: 0x6d1e9a20, 0x1b67e: 0x6c613e20, 0x1b67f: 0x6c4a0220, + // Block 0x6da, offset 0x1b680 + 0x1b680: 0x6cb04220, 0x1b681: 0x6ce62420, 0x1b682: 0x6d2b3420, 0x1b683: 0x6c4a0420, + 0x1b684: 0x6d3c0820, 0x1b685: 0x6ca1b020, 0x1b686: 0x6cbec220, 0x1b687: 0x6c091c20, + 0x1b688: 0x6cbd5220, 0x1b689: 0x6c33d820, 0x1b68a: 0x6c206c20, 0x1b68b: 0x6c4ac220, + 0x1b68c: 0x6d0b4820, 0x1b68d: 0x6c043020, 0x1b68e: 0x6c6bb620, 0x1b68f: 0x6d067020, + 0x1b690: 0x6c913420, 0x1b691: 0x6cf42020, 0x1b692: 0x6d3c5420, 0x1b693: 0x6c7a8220, + 0x1b694: 0x6d1b9e20, 0x1b695: 0x6c2bd620, 0x1b696: 0x6cad4c20, 0x1b697: 0x6c2d3c20, + 0x1b698: 0x6d0ad020, 0x1b699: 0x6c9eac20, 0x1b69a: 0x6c44ba20, 0x1b69b: 0x6c22b820, + 0x1b69c: 0x6c3f3e20, 0x1b69d: 0x6ce71820, 0x1b69e: 0x6cacf220, 0x1b69f: 0x6c3a8220, + 0x1b6a0: 0x6cfdb420, 0x1b6a1: 0x6d15ce20, 0x1b6a2: 0x6d359820, 0x1b6a3: 0x6ce54e20, + 0x1b6a4: 0x6d359a20, 0x1b6a5: 0x6d04be20, 0x1b6a6: 0x6c324420, 0x1b6a7: 0x6d428e20, + 0x1b6a8: 0x6cfe9c20, 0x1b6a9: 0x6ce89020, 0x1b6aa: 0x6c4ae620, 0x1b6ab: 0x6c7a8820, + 0x1b6ac: 0x6c984e20, 0x1b6ad: 0x6ce66420, 0x1b6ae: 0x6d1fb620, 0x1b6af: 0x6c101020, + 0x1b6b0: 0x6c0e0e20, 0x1b6b1: 0x6c1a6e20, 0x1b6b2: 0x6c7ef620, 0x1b6b3: 0x6c097620, + 0x1b6b4: 0x6c601620, 0x1b6b5: 0x6c012620, 0x1b6b6: 0x6cd5c220, 0x1b6b7: 0x6c772c20, + 0x1b6b8: 0x6d1d8420, 0x1b6b9: 0x6ceb7820, 0x1b6ba: 0x6cd91620, 0x1b6bb: 0x6cd5c420, + 0x1b6bc: 0x6cbea620, 0x1b6bd: 0x6d233620, 0x1b6be: 0x6d224a20, 0x1b6bf: 0x6c9eb420, + // Block 0x6db, offset 0x1b6c0 + 0x1b6c0: 0x6cd9ac20, 0x1b6c1: 0x6c12e620, 0x1b6c2: 0x6cfd7220, 0x1b6c3: 0x6c3aaa20, + 0x1b6c4: 0x6c6ff820, 0x1b6c5: 0x6c365420, 0x1b6c6: 0x6c4a6620, 0x1b6c7: 0x6c8f3420, + 0x1b6c8: 0x6ccc5620, 0x1b6c9: 0x6c881020, 0x1b6ca: 0x6c80b420, 0x1b6cb: 0x6cd9ae20, + 0x1b6cc: 0x6d365220, 0x1b6cd: 0x6cb3f620, 0x1b6ce: 0x6cbeac20, 0x1b6cf: 0x6c700e20, + 0x1b6d0: 0x6c6ffa20, 0x1b6d1: 0x6c6c9e20, 0x1b6d2: 0x6c025020, 0x1b6d3: 0x6c7e0420, + 0x1b6d4: 0x6c90a020, 0x1b6d5: 0x6d1b5e20, 0x1b6d6: 0x6c8a9e20, 0x1b6d7: 0x6c277e20, + 0x1b6d8: 0x6c927c20, 0x1b6d9: 0x6d182220, 0x1b6da: 0x6c1ea420, 0x1b6db: 0x6c151a20, + 0x1b6dc: 0x6ce8d820, 0x1b6dd: 0x6cd81220, 0x1b6de: 0x6d02e420, 0x1b6df: 0x6c9eb820, + 0x1b6e0: 0x6c16f420, 0x1b6e1: 0x6cf46220, 0x1b6e2: 0x6c3ac420, 0x1b6e3: 0x6c4a0820, + 0x1b6e4: 0x6c7aa620, 0x1b6e5: 0x6c7b3c20, 0x1b6e6: 0x6c0a4820, 0x1b6e7: 0x6cbb2220, + 0x1b6e8: 0x6d021020, 0x1b6e9: 0x6c8c2c20, 0x1b6ea: 0x6c8c2e20, 0x1b6eb: 0x6c8a3220, + 0x1b6ec: 0x6c916e20, 0x1b6ed: 0x6c631220, 0x1b6ee: 0x6d1d2420, 0x1b6ef: 0x6cfafa20, + 0x1b6f0: 0x6ce65420, 0x1b6f1: 0x6d1dd820, 0x1b6f2: 0x6c84bc20, 0x1b6f3: 0x6ce65820, + 0x1b6f4: 0x6d1ac020, 0x1b6f5: 0x6d09d220, 0x1b6f6: 0x6d0c5220, 0x1b6f7: 0x6ce65c20, + 0x1b6f8: 0x6c2b5220, 0x1b6f9: 0x6cac1420, 0x1b6fa: 0x6c665420, 0x1b6fb: 0x6c5b1c20, + 0x1b6fc: 0x6ca39a20, 0x1b6fd: 0x6c5b2220, 0x1b6fe: 0x6c45cc20, 0x1b6ff: 0x6ca75620, + // Block 0x6dc, offset 0x1b700 + 0x1b700: 0x6c762420, 0x1b701: 0x6c0b6620, 0x1b702: 0x6d166220, 0x1b703: 0x6cb73620, + 0x1b704: 0x6ca9f020, 0x1b705: 0x6c3bc620, 0x1b706: 0x6c71a420, 0x1b707: 0x6d0d5620, + 0x1b708: 0x6d16ea20, 0x1b709: 0x6d2a0020, 0x1b70a: 0x6c09f420, 0x1b70b: 0x6d163c20, + 0x1b70c: 0x6d13ba20, 0x1b70d: 0x6c37b820, 0x1b70e: 0x6cc9f820, 0x1b70f: 0x6cd2fc20, + 0x1b710: 0x6c37ba20, 0x1b711: 0x6cd38020, 0x1b712: 0x6cd39a20, 0x1b713: 0x6c454c20, + 0x1b714: 0x6c2e0420, 0x1b715: 0x6d1ac420, 0x1b716: 0x6c563620, 0x1b717: 0x6c3dc820, + 0x1b718: 0x6c52ea20, 0x1b719: 0x6cf34420, 0x1b71a: 0x6ce99c20, 0x1b71b: 0x6c1af420, + 0x1b71c: 0x6c67d420, 0x1b71d: 0x6c03a820, 0x1b71e: 0x6cd04420, 0x1b71f: 0x6c2c1420, + 0x1b720: 0x6d2eb020, 0x1b721: 0x6c73dc20, 0x1b722: 0x6ce1b020, 0x1b723: 0x6c3f4020, + 0x1b724: 0x6c2bd820, 0x1b725: 0x6c9c3820, 0x1b726: 0x6cfb2c20, 0x1b727: 0x6c552220, + 0x1b728: 0x6c173820, 0x1b729: 0x6caa4e20, 0x1b72a: 0x6c6e4c20, 0x1b72b: 0x6d31be20, + 0x1b72c: 0x6d14be20, 0x1b72d: 0x6c9ce020, 0x1b72e: 0x6cc28e20, 0x1b72f: 0x6cec8220, + 0x1b730: 0x6cce5e20, 0x1b731: 0x6cc91820, 0x1b732: 0x6d078620, 0x1b733: 0x6c6e6420, + 0x1b734: 0x6c2dc220, 0x1b735: 0x6d2eb420, 0x1b736: 0x6c67de20, 0x1b737: 0x6cbb0820, + 0x1b738: 0x6cae9a20, 0x1b739: 0x6c287820, 0x1b73a: 0x6cbb0e20, 0x1b73b: 0x6c099620, + 0x1b73c: 0x6c099820, 0x1b73d: 0x6ccf4820, 0x1b73e: 0x6c288820, 0x1b73f: 0x6c65aa20, + // Block 0x6dd, offset 0x1b740 + 0x1b740: 0x6c46b420, 0x1b741: 0x6c448e20, 0x1b742: 0x6c37f020, 0x1b743: 0x6c09c420, + 0x1b744: 0x6c79c020, 0x1b745: 0x6c673820, 0x1b746: 0x6c0d1820, 0x1b747: 0x6cff1420, + 0x1b748: 0x6c28a620, 0x1b749: 0x6c4c2e20, 0x1b74a: 0x6c67f820, 0x1b74b: 0x6c538620, + 0x1b74c: 0x6c9c7820, 0x1b74d: 0x6c4c4420, 0x1b74e: 0x6ceca420, 0x1b74f: 0x6c751620, + 0x1b750: 0x6c616820, 0x1b751: 0x6c616a20, 0x1b752: 0x6c4a3220, 0x1b753: 0x6c28f820, + 0x1b754: 0x6c921a20, 0x1b755: 0x6c921c20, 0x1b756: 0x6ce98820, 0x1b757: 0x6c5bb420, + 0x1b758: 0x6d362220, 0x1b759: 0x6c5bda20, 0x1b75a: 0x6c5bdc20, 0x1b75b: 0x6d155c20, + 0x1b75c: 0x6d155e20, 0x1b75d: 0x6d158020, 0x1b75e: 0x6d158220, 0x1b75f: 0x6d265e20, + 0x1b760: 0x6d266220, 0x1b761: 0x6cccb220, 0x1b762: 0x6d03c020, 0x1b763: 0x6cf17c20, + 0x1b764: 0x6ce71020, 0x1b765: 0x6d0e4620, 0x1b766: 0x6d0e4820, 0x1b767: 0x6d22f020, + 0x1b768: 0x6c1a9c20, 0x1b769: 0x6c112620, 0x1b76a: 0x6c0bfa20, 0x1b76b: 0x6c2dc420, + 0x1b76c: 0x6c0d3020, 0x1b76d: 0x6cae9e20, 0x1b76e: 0x6d1e4620, 0x1b76f: 0x6cb19820, + 0x1b770: 0x6d2ec420, 0x1b771: 0x6d1d0420, 0x1b772: 0x6c1af020, 0x1b773: 0x6c1bd420, + 0x1b774: 0x6d3d1c20, 0x1b775: 0x6ceb6c20, 0x1b776: 0x6c5fc820, 0x1b777: 0x6c39be20, + 0x1b778: 0x6d379220, 0x1b779: 0x6d168420, 0x1b77a: 0x6cedde20, 0x1b77b: 0x6c17fe20, + 0x1b77c: 0x6c08c020, 0x1b77d: 0x6c2b1620, 0x1b77e: 0x6c8caa20, 0x1b77f: 0x6c3dea20, + // Block 0x6de, offset 0x1b780 + 0x1b780: 0x6cedfa20, 0x1b781: 0x6d328820, 0x1b782: 0x6c241e20, 0x1b783: 0x6cedfc20, + 0x1b784: 0x6c6e4e20, 0x1b785: 0x6c274220, 0x1b786: 0x6cf59e20, 0x1b787: 0x6d0a7020, + 0x1b788: 0x6c523a20, 0x1b789: 0x6d0f9420, 0x1b78a: 0x6c57e820, 0x1b78b: 0x6c93d020, + 0x1b78c: 0x6c546420, 0x1b78d: 0x6cee0220, 0x1b78e: 0x6c1a6620, 0x1b78f: 0x6d35b220, + 0x1b790: 0x6d061820, 0x1b791: 0x6c6e6620, 0x1b792: 0x6ce89220, 0x1b793: 0x6c238e20, + 0x1b794: 0x6d377e20, 0x1b795: 0x6c7eea20, 0x1b796: 0x6c239620, 0x1b797: 0x6c2a9020, + 0x1b798: 0x6cabf820, 0x1b799: 0x6cf7dc20, 0x1b79a: 0x6c300020, 0x1b79b: 0x6c61e620, + 0x1b79c: 0x6c16a620, 0x1b79d: 0x6d35dc20, 0x1b79e: 0x6c239820, 0x1b79f: 0x6d387020, + 0x1b7a0: 0x6c7ef820, 0x1b7a1: 0x6d233820, 0x1b7a2: 0x6d018e20, 0x1b7a3: 0x6c6bdc20, + 0x1b7a4: 0x6c667820, 0x1b7a5: 0x6cd38220, 0x1b7a6: 0x6c641620, 0x1b7a7: 0x6c0b9820, + 0x1b7a8: 0x6c59c220, 0x1b7a9: 0x6c3ff020, 0x1b7aa: 0x6d0a0e20, 0x1b7ab: 0x6cefbe20, + 0x1b7ac: 0x6cad0420, 0x1b7ad: 0x6d110c20, 0x1b7ae: 0x6cee9820, 0x1b7af: 0x6cf64820, + 0x1b7b0: 0x6d32d020, 0x1b7b1: 0x6cb1b620, 0x1b7b2: 0x6ce36220, 0x1b7b3: 0x6c2a7c20, + 0x1b7b4: 0x6d32de20, 0x1b7b5: 0x6d32f020, 0x1b7b6: 0x6c0cf420, 0x1b7b7: 0x6c2a7e20, + 0x1b7b8: 0x6c1cd420, 0x1b7b9: 0x6c183020, 0x1b7ba: 0x6c692620, 0x1b7bb: 0x6c5c2c20, + 0x1b7bc: 0x6c693c20, 0x1b7bd: 0x6c5af220, 0x1b7be: 0x6c9a2e20, 0x1b7bf: 0x6c906c20, + // Block 0x6df, offset 0x1b7c0 + 0x1b7c0: 0x6cfd9220, 0x1b7c1: 0x6c067a20, 0x1b7c2: 0x6cc1fe20, 0x1b7c3: 0x6d02a220, + 0x1b7c4: 0x6d036220, 0x1b7c5: 0x6c090420, 0x1b7c6: 0x6d164020, 0x1b7c7: 0x6c820c20, + 0x1b7c8: 0x6cc56420, 0x1b7c9: 0x6c29b620, 0x1b7ca: 0x6c2f8e20, 0x1b7cb: 0x6c410820, + 0x1b7cc: 0x6c618020, 0x1b7cd: 0x6cc58620, 0x1b7ce: 0x6cc56a20, 0x1b7cf: 0x6c162620, + 0x1b7d0: 0x6ce05020, 0x1b7d1: 0x6ce26820, 0x1b7d2: 0x6ce26a20, 0x1b7d3: 0x6c416020, + 0x1b7d4: 0x6cb72a20, 0x1b7d5: 0x6cd2fe20, 0x1b7d6: 0x6c25ae20, 0x1b7d7: 0x6d357420, + 0x1b7d8: 0x6cee4620, 0x1b7d9: 0x6c982820, 0x1b7da: 0x6cf56e20, 0x1b7db: 0x6c388220, + 0x1b7dc: 0x6d1ba020, 0x1b7dd: 0x6ce4d820, 0x1b7de: 0x6c9f2c20, 0x1b7df: 0x6cf1ca20, + 0x1b7e0: 0x6d379620, 0x1b7e1: 0x6c1cac20, 0x1b7e2: 0x6cf4b620, 0x1b7e3: 0x6c5fca20, + 0x1b7e4: 0x6cf42220, 0x1b7e5: 0x6cf84620, 0x1b7e6: 0x6c639a20, 0x1b7e7: 0x6d1e8e20, + 0x1b7e8: 0x6ced7420, 0x1b7e9: 0x6c230220, 0x1b7ea: 0x6cd90220, 0x1b7eb: 0x6c7b0e20, + 0x1b7ec: 0x6d22d020, 0x1b7ed: 0x6c0b6c20, 0x1b7ee: 0x6d357620, 0x1b7ef: 0x6cb57420, + 0x1b7f0: 0x6c251820, 0x1b7f1: 0x6c189a20, 0x1b7f2: 0x6cdf5e20, 0x1b7f3: 0x6cea3e20, + 0x1b7f4: 0x6cb96e20, 0x1b7f5: 0x6ca75a20, 0x1b7f6: 0x6c5cde20, 0x1b7f7: 0x6d045420, + 0x1b7f8: 0x6ca97620, 0x1b7f9: 0x6c7bb620, 0x1b7fa: 0x6cfa7820, 0x1b7fb: 0x6d02aa20, + 0x1b7fc: 0x6c772420, 0x1b7fd: 0x6c549e20, 0x1b7fe: 0x6c767c20, 0x1b7ff: 0x6c3bce20, + // Block 0x6e0, offset 0x1b800 + 0x1b800: 0x6c57e620, 0x1b801: 0x6cdf6220, 0x1b802: 0x6cd95220, 0x1b803: 0x6cf42420, + 0x1b804: 0x6cab9a20, 0x1b805: 0x6c170220, 0x1b806: 0x6c20a020, 0x1b807: 0x6c71fa20, + 0x1b808: 0x6d16b420, 0x1b809: 0x6c05e620, 0x1b80a: 0x6c173a20, 0x1b80b: 0x6c9f2e20, + 0x1b80c: 0x6cadb020, 0x1b80d: 0x6d428020, 0x1b80e: 0x6d2b7620, 0x1b80f: 0x6d104020, + 0x1b810: 0x6c720a20, 0x1b811: 0x6c04e820, 0x1b812: 0x6caa5e20, 0x1b813: 0x6ca49420, + 0x1b814: 0x6d328a20, 0x1b815: 0x6cabe820, 0x1b816: 0x6c106a20, 0x1b817: 0x6ce5ea20, + 0x1b818: 0x6c567020, 0x1b819: 0x6c566420, 0x1b81a: 0x6c720c20, 0x1b81b: 0x6c267e20, + 0x1b81c: 0x6c87f420, 0x1b81d: 0x6cd7d420, 0x1b81e: 0x6c1d8e20, 0x1b81f: 0x6c2c2020, + 0x1b820: 0x6c274420, 0x1b821: 0x6d147020, 0x1b822: 0x6ce84020, 0x1b823: 0x6d1f0620, + 0x1b824: 0x6c3d4820, 0x1b825: 0x6c5ff420, 0x1b826: 0x6cae5420, 0x1b827: 0x6d041820, + 0x1b828: 0x6d260420, 0x1b829: 0x6ca5be20, 0x1b82a: 0x6c48e620, 0x1b82b: 0x6c3dec20, + 0x1b82c: 0x6cf84820, 0x1b82d: 0x6c093220, 0x1b82e: 0x6d1e9620, 0x1b82f: 0x6cbc9620, + 0x1b830: 0x6d086e20, 0x1b831: 0x6c230820, 0x1b832: 0x6c0dc220, 0x1b833: 0x6c5a4220, + 0x1b834: 0x6d068020, 0x1b835: 0x6c1f0e20, 0x1b836: 0x6c093420, 0x1b837: 0x6cd5ac20, + 0x1b838: 0x6cf5a020, 0x1b839: 0x6cdf9620, 0x1b83a: 0x6d1e8220, 0x1b83b: 0x6d3fe820, + 0x1b83c: 0x6c334220, 0x1b83d: 0x6ca1b220, 0x1b83e: 0x6d34f220, 0x1b83f: 0x6d16b620, + // Block 0x6e1, offset 0x1b840 + 0x1b840: 0x6cd33220, 0x1b841: 0x6ca59420, 0x1b842: 0x6d09e820, 0x1b843: 0x6cd33420, + 0x1b844: 0x6cf86020, 0x1b845: 0x6c81a420, 0x1b846: 0x6c525820, 0x1b847: 0x6c7b8e20, + 0x1b848: 0x6ca1c620, 0x1b849: 0x6d34fe20, 0x1b84a: 0x6d008020, 0x1b84b: 0x6c88e820, + 0x1b84c: 0x6ce55220, 0x1b84d: 0x6c5a4820, 0x1b84e: 0x6c2e7020, 0x1b84f: 0x6c502820, + 0x1b850: 0x6c799e20, 0x1b851: 0x6c4ad420, 0x1b852: 0x6c525a20, 0x1b853: 0x6cf5a220, + 0x1b854: 0x6c68ce20, 0x1b855: 0x6cd5b820, 0x1b856: 0x6cd8fe20, 0x1b857: 0x6c54aa20, + 0x1b858: 0x6cbfa420, 0x1b859: 0x6d104220, 0x1b85a: 0x6c5ba820, 0x1b85b: 0x6c5b2420, + 0x1b85c: 0x6c1bfa20, 0x1b85d: 0x6c63b020, 0x1b85e: 0x6d149a20, 0x1b85f: 0x6d045e20, + 0x1b860: 0x6c48ec20, 0x1b861: 0x6c8c4c20, 0x1b862: 0x6c5a9220, 0x1b863: 0x6d3f3a20, + 0x1b864: 0x6d068e20, 0x1b865: 0x6c1b8a20, 0x1b866: 0x6cce4e20, 0x1b867: 0x6caa7c20, + 0x1b868: 0x6c524220, 0x1b869: 0x6c371020, 0x1b86a: 0x6c788e20, 0x1b86b: 0x6c305e20, + 0x1b86c: 0x6ce48820, 0x1b86d: 0x6c457c20, 0x1b86e: 0x6cc29020, 0x1b86f: 0x6cf94220, + 0x1b870: 0x6cb84a20, 0x1b871: 0x6d268c20, 0x1b872: 0x6cae5820, 0x1b873: 0x6c790020, + 0x1b874: 0x6c2a6420, 0x1b875: 0x6c5baa20, 0x1b876: 0x6c35fa20, 0x1b877: 0x6d003220, + 0x1b878: 0x6ce7c620, 0x1b879: 0x6d0be020, 0x1b87a: 0x6c764c20, 0x1b87b: 0x6c12ce20, + 0x1b87c: 0x6ca4e020, 0x1b87d: 0x6d282020, 0x1b87e: 0x6c984020, 0x1b87f: 0x6d1e2a20, + // Block 0x6e2, offset 0x1b880 + 0x1b880: 0x6d1e2220, 0x1b881: 0x6d24d420, 0x1b882: 0x6caf5220, 0x1b883: 0x6c7da020, + 0x1b884: 0x6cbb6a20, 0x1b885: 0x6d269420, 0x1b886: 0x6d230c20, 0x1b887: 0x6ce89420, + 0x1b888: 0x6c6bd820, 0x1b889: 0x6cf5e220, 0x1b88a: 0x6d304a20, 0x1b88b: 0x6c8c4e20, + 0x1b88c: 0x6ce3e020, 0x1b88d: 0x6c4e9620, 0x1b88e: 0x6c502a20, 0x1b88f: 0x6cbca820, + 0x1b890: 0x6ce3ea20, 0x1b891: 0x6c108220, 0x1b892: 0x6d172620, 0x1b893: 0x6cba4a20, + 0x1b894: 0x6c5b4c20, 0x1b895: 0x6cf5bc20, 0x1b896: 0x6c070020, 0x1b897: 0x6c975e20, + 0x1b898: 0x6d13e420, 0x1b899: 0x6c524820, 0x1b89a: 0x6cd95620, 0x1b89b: 0x6cc29420, + 0x1b89c: 0x6c1a6820, 0x1b89d: 0x6c7c3820, 0x1b89e: 0x6cf4d020, 0x1b89f: 0x6cf4d220, + 0x1b8a0: 0x6d1e9e20, 0x1b8a1: 0x6c83b620, 0x1b8a2: 0x6c89ae20, 0x1b8a3: 0x6c590e20, + 0x1b8a4: 0x6c230c20, 0x1b8a5: 0x6d175a20, 0x1b8a6: 0x6d269620, 0x1b8a7: 0x6c85c820, + 0x1b8a8: 0x6ca8e620, 0x1b8a9: 0x6ca4e620, 0x1b8aa: 0x6c360e20, 0x1b8ab: 0x6cc3b620, + 0x1b8ac: 0x6d080e20, 0x1b8ad: 0x6cb8c420, 0x1b8ae: 0x6cf4d420, 0x1b8af: 0x6c9fa420, + 0x1b8b0: 0x6c239a20, 0x1b8b1: 0x6c3a5220, 0x1b8b2: 0x6c069c20, 0x1b8b3: 0x6c344c20, + 0x1b8b4: 0x6c253420, 0x1b8b5: 0x6c171220, 0x1b8b6: 0x6c9af220, 0x1b8b7: 0x6cca4e20, + 0x1b8b8: 0x6c61ea20, 0x1b8b9: 0x6c498820, 0x1b8ba: 0x6c497e20, 0x1b8bb: 0x6d042820, + 0x1b8bc: 0x6c2a0e20, 0x1b8bd: 0x6cb4e620, 0x1b8be: 0x6c797420, 0x1b8bf: 0x6ce4ec20, + // Block 0x6e3, offset 0x1b8c0 + 0x1b8c0: 0x6c94f220, 0x1b8c1: 0x6cf60a20, 0x1b8c2: 0x6c76d220, 0x1b8c3: 0x6c4bc020, + 0x1b8c4: 0x6ca6a020, 0x1b8c5: 0x6cbe7620, 0x1b8c6: 0x6c1da020, 0x1b8c7: 0x6c339820, + 0x1b8c8: 0x6c4cb620, 0x1b8c9: 0x6d2d7420, 0x1b8ca: 0x6c6da820, 0x1b8cb: 0x6ced0420, + 0x1b8cc: 0x6d24ea20, 0x1b8cd: 0x6c6c4220, 0x1b8ce: 0x6c620020, 0x1b8cf: 0x6c7f9620, + 0x1b8d0: 0x6d231020, 0x1b8d1: 0x6c5dca20, 0x1b8d2: 0x6c512620, 0x1b8d3: 0x6cc2da20, + 0x1b8d4: 0x6cdfdc20, 0x1b8d5: 0x6ce3ec20, 0x1b8d6: 0x6ce3f420, 0x1b8d7: 0x6ca81620, + 0x1b8d8: 0x6cee0e20, 0x1b8d9: 0x6c21b420, 0x1b8da: 0x6c54bc20, 0x1b8db: 0x6c5cc020, + 0x1b8dc: 0x6cf5e420, 0x1b8dd: 0x6c16ea20, 0x1b8de: 0x6d02ca20, 0x1b8df: 0x6ceefe20, + 0x1b8e0: 0x6c5bc020, 0x1b8e1: 0x6c363420, 0x1b8e2: 0x6cdd6620, 0x1b8e3: 0x6d3fee20, + 0x1b8e4: 0x6c648420, 0x1b8e5: 0x6d1e3620, 0x1b8e6: 0x6c2d4e20, 0x1b8e7: 0x6c723c20, + 0x1b8e8: 0x6c11ce20, 0x1b8e9: 0x6c19fc20, 0x1b8ea: 0x6c2a6e20, 0x1b8eb: 0x6c072220, + 0x1b8ec: 0x6cbcb420, 0x1b8ed: 0x6c119420, 0x1b8ee: 0x6c287a20, 0x1b8ef: 0x6c498020, + 0x1b8f0: 0x6c34f420, 0x1b8f1: 0x6ca4f820, 0x1b8f2: 0x6d283220, 0x1b8f3: 0x6cfdea20, + 0x1b8f4: 0x6d3c8420, 0x1b8f5: 0x6c2ea220, 0x1b8f6: 0x6c59c420, 0x1b8f7: 0x6c217e20, + 0x1b8f8: 0x6cbf2220, 0x1b8f9: 0x6cc54c20, 0x1b8fa: 0x6d037220, 0x1b8fb: 0x6c12e820, + 0x1b8fc: 0x6c0b3e20, 0x1b8fd: 0x6c9fac20, 0x1b8fe: 0x6d3f8a20, 0x1b8ff: 0x6ce32220, + // Block 0x6e4, offset 0x1b900 + 0x1b900: 0x6cbc2620, 0x1b901: 0x6c1db820, 0x1b902: 0x6c073020, 0x1b903: 0x6d079820, + 0x1b904: 0x6cee8620, 0x1b905: 0x6c43ea20, 0x1b906: 0x6cb8ee20, 0x1b907: 0x6cefc020, + 0x1b908: 0x6d236a20, 0x1b909: 0x6d212420, 0x1b90a: 0x6c099a20, 0x1b90b: 0x6d079a20, + 0x1b90c: 0x6c592020, 0x1b90d: 0x6c9fb620, 0x1b90e: 0x6c099c20, 0x1b90f: 0x6d17e220, + 0x1b910: 0x6c9e2420, 0x1b911: 0x6d1e3820, 0x1b912: 0x6c768820, 0x1b913: 0x6c296620, + 0x1b914: 0x6d19e020, 0x1b915: 0x6c363620, 0x1b916: 0x6c18c620, 0x1b917: 0x6c998a20, + 0x1b918: 0x6cb86820, 0x1b919: 0x6c78b820, 0x1b91a: 0x6d214820, 0x1b91b: 0x6c00a820, + 0x1b91c: 0x6cbcc020, 0x1b91d: 0x6d0d7e20, 0x1b91e: 0x6caaf620, 0x1b91f: 0x6c41dc20, + 0x1b920: 0x6d283420, 0x1b921: 0x6d3ff020, 0x1b922: 0x6cc9c220, 0x1b923: 0x6c839620, + 0x1b924: 0x6c3bd820, 0x1b925: 0x6d1d6620, 0x1b926: 0x6c7cf820, 0x1b927: 0x6c7cfa20, + 0x1b928: 0x6cc3d820, 0x1b929: 0x6c459420, 0x1b92a: 0x6d27ae20, 0x1b92b: 0x6cdaca20, + 0x1b92c: 0x6cdae420, 0x1b92d: 0x6cb5f820, 0x1b92e: 0x6d110e20, 0x1b92f: 0x6cd96020, + 0x1b930: 0x6c5a6c20, 0x1b931: 0x6c604e20, 0x1b932: 0x6c478c20, 0x1b933: 0x6c726220, + 0x1b934: 0x6c20ae20, 0x1b935: 0x6ca6aa20, 0x1b936: 0x6d00b620, 0x1b937: 0x6c766020, + 0x1b938: 0x6d332a20, 0x1b939: 0x6d1e4820, 0x1b93a: 0x6c12ae20, 0x1b93b: 0x6d0a9a20, + 0x1b93c: 0x6cd0aa20, 0x1b93d: 0x6c0f1020, 0x1b93e: 0x6c768e20, 0x1b93f: 0x6d262820, + // Block 0x6e5, offset 0x1b940 + 0x1b940: 0x6cf89e20, 0x1b941: 0x6c5d3420, 0x1b942: 0x6d1e5020, 0x1b943: 0x6d102420, + 0x1b944: 0x6c862e20, 0x1b945: 0x6ccaaa20, 0x1b946: 0x6ce1d420, 0x1b947: 0x6d19f220, + 0x1b948: 0x6c224e20, 0x1b949: 0x6d06f220, 0x1b94a: 0x6cba5820, 0x1b94b: 0x6cdf7c20, + 0x1b94c: 0x6c599420, 0x1b94d: 0x6d283a20, 0x1b94e: 0x6cd0ac20, 0x1b94f: 0x6ca03820, + 0x1b950: 0x6c463020, 0x1b951: 0x6ccf5020, 0x1b952: 0x6c23a420, 0x1b953: 0x6cb15820, + 0x1b954: 0x6ca29820, 0x1b955: 0x6ca2a020, 0x1b956: 0x6c4c7620, 0x1b957: 0x6c1c5620, + 0x1b958: 0x6c11d420, 0x1b959: 0x6c11a620, 0x1b95a: 0x6c119c20, 0x1b95b: 0x6c24da20, + 0x1b95c: 0x6c9fc220, 0x1b95d: 0x6ce27e20, 0x1b95e: 0x6d2ec820, 0x1b95f: 0x6ce7ce20, + 0x1b960: 0x6c02d820, 0x1b961: 0x6cd6d620, 0x1b962: 0x6c97e820, 0x1b963: 0x6c499620, + 0x1b964: 0x6cc3ea20, 0x1b965: 0x6d2a8420, 0x1b966: 0x6c701620, 0x1b967: 0x6c5c1020, + 0x1b968: 0x6c765820, 0x1b969: 0x6c881220, 0x1b96a: 0x6cab9e20, 0x1b96b: 0x6cd96c20, + 0x1b96c: 0x6cbd8e20, 0x1b96d: 0x6d1b7020, 0x1b96e: 0x6c93f220, 0x1b96f: 0x6cce0c20, + 0x1b970: 0x6cf0b820, 0x1b971: 0x6ce95220, 0x1b972: 0x6c976c20, 0x1b973: 0x6cb8fe20, + 0x1b974: 0x6ccf6220, 0x1b975: 0x6d1d9c20, 0x1b976: 0x6cbed620, 0x1b977: 0x6c773e20, + 0x1b978: 0x6c2c8e20, 0x1b979: 0x6d348e20, 0x1b97a: 0x6c90a220, 0x1b97b: 0x6c738220, + 0x1b97c: 0x6cb51c20, 0x1b97d: 0x6cb50c20, 0x1b97e: 0x6d23c020, 0x1b97f: 0x6cb2c220, + // Block 0x6e6, offset 0x1b980 + 0x1b980: 0x6c89f620, 0x1b981: 0x6c23da20, 0x1b982: 0x6d1eae20, 0x1b983: 0x6c1cd620, + 0x1b984: 0x6d36aa20, 0x1b985: 0x6ce7d020, 0x1b986: 0x6c197a20, 0x1b987: 0x6cb7c020, + 0x1b988: 0x6cc12020, 0x1b989: 0x6caebc20, 0x1b98a: 0x6c075a20, 0x1b98b: 0x6c0cb820, + 0x1b98c: 0x6cbf5c20, 0x1b98d: 0x6c686a20, 0x1b98e: 0x6d2b8a20, 0x1b98f: 0x6c1c4220, + 0x1b990: 0x6c883620, 0x1b991: 0x6cb2cc20, 0x1b992: 0x6c7d0c20, 0x1b993: 0x6c5c1220, + 0x1b994: 0x6cbbf020, 0x1b995: 0x6c1a3620, 0x1b996: 0x6d1b7a20, 0x1b997: 0x6d1b7c20, + 0x1b998: 0x6cf80620, 0x1b999: 0x6cf6ba20, 0x1b99a: 0x6c28a820, 0x1b99b: 0x6ce00220, + 0x1b99c: 0x6c34a220, 0x1b99d: 0x6c335e20, 0x1b99e: 0x6c335a20, 0x1b99f: 0x6cdaf820, + 0x1b9a0: 0x6c74b620, 0x1b9a1: 0x6c130e20, 0x1b9a2: 0x6cff0220, 0x1b9a3: 0x6c385a20, + 0x1b9a4: 0x6c3be420, 0x1b9a5: 0x6c817220, 0x1b9a6: 0x6c81da20, 0x1b9a7: 0x6c1cd820, + 0x1b9a8: 0x6c4db820, 0x1b9a9: 0x6cb7d220, 0x1b9aa: 0x6cfb7c20, 0x1b9ab: 0x6c9fc420, + 0x1b9ac: 0x6c6e2a20, 0x1b9ad: 0x6c8a7420, 0x1b9ae: 0x6cf46420, 0x1b9af: 0x6c11da20, + 0x1b9b0: 0x6c749020, 0x1b9b1: 0x6c245420, 0x1b9b2: 0x6cfd0820, 0x1b9b3: 0x6ce06e20, + 0x1b9b4: 0x6cd12220, 0x1b9b5: 0x6caf9820, 0x1b9b6: 0x6d188e20, 0x1b9b7: 0x6c1f7420, + 0x1b9b8: 0x6cfad620, 0x1b9b9: 0x6ca4c020, 0x1b9ba: 0x6c28ac20, 0x1b9bb: 0x6ce07420, + 0x1b9bc: 0x6c6e2c20, 0x1b9bd: 0x6cd93220, 0x1b9be: 0x6c4f0220, 0x1b9bf: 0x6c693e20, + // Block 0x6e7, offset 0x1b9c0 + 0x1b9c0: 0x6cf0cc20, 0x1b9c1: 0x6d07cc20, 0x1b9c2: 0x6c303620, 0x1b9c3: 0x6cbdb020, + 0x1b9c4: 0x6cbd9e20, 0x1b9c5: 0x6c728a20, 0x1b9c6: 0x6c12b220, 0x1b9c7: 0x6c791020, + 0x1b9c8: 0x6d021420, 0x1b9c9: 0x6d1bfe20, 0x1b9ca: 0x6c02ea20, 0x1b9cb: 0x6c99ba20, + 0x1b9cc: 0x6d189020, 0x1b9cd: 0x6c8c3020, 0x1b9ce: 0x6ccb5420, 0x1b9cf: 0x6c75e420, + 0x1b9d0: 0x6c57f220, 0x1b9d1: 0x6c9afe20, 0x1b9d2: 0x6c803c20, 0x1b9d3: 0x6c00ca20, + 0x1b9d4: 0x6c8c3220, 0x1b9d5: 0x6d0c3c20, 0x1b9d6: 0x6c7e2620, 0x1b9d7: 0x6cfa4a20, + 0x1b9d8: 0x6c1c8420, 0x1b9d9: 0x6d228e20, 0x1b9da: 0x6d1b8820, 0x1b9db: 0x6c270e20, + 0x1b9dc: 0x6c9be420, 0x1b9dd: 0x6c00d820, 0x1b9de: 0x6c9b4a20, 0x1b9df: 0x6c337020, + 0x1b9e0: 0x6cb65c20, 0x1b9e1: 0x6ca0ac20, 0x1b9e2: 0x6c7fbe20, 0x1b9e3: 0x6c9b0020, + 0x1b9e4: 0x6c1de620, 0x1b9e5: 0x6d370220, 0x1b9e6: 0x6cab1620, 0x1b9e7: 0x6cab1820, + 0x1b9e8: 0x6d0c3420, 0x1b9e9: 0x6d103420, 0x1b9ea: 0x6c0f8a20, 0x1b9eb: 0x6d372820, + 0x1b9ec: 0x6c7c0c20, 0x1b9ed: 0x6c7bd220, 0x1b9ee: 0x6d1ff820, 0x1b9ef: 0x6c3db220, + 0x1b9f0: 0x6c8eb420, 0x1b9f1: 0x6c9ef020, 0x1b9f2: 0x6c1a5420, 0x1b9f3: 0x6c5cb020, + 0x1b9f4: 0x6c163820, 0x1b9f5: 0x6c9bea20, 0x1b9f6: 0x6c804a20, 0x1b9f7: 0x6c57fa20, + 0x1b9f8: 0x6d083620, 0x1b9f9: 0x6cc51a20, 0x1b9fa: 0x6c164020, 0x1b9fb: 0x6c62b820, + 0x1b9fc: 0x6c72ca20, 0x1b9fd: 0x6c583e20, 0x1b9fe: 0x6ccf8820, 0x1b9ff: 0x6d195a20, + // Block 0x6e8, offset 0x1ba00 + 0x1ba00: 0x6c893820, 0x1ba01: 0x6ca44020, 0x1ba02: 0x6c9cb020, 0x1ba03: 0x6ce18c20, + 0x1ba04: 0x6c751a20, 0x1ba05: 0x6c42b020, 0x1ba06: 0x6c42b220, 0x1ba07: 0x6d3c5220, + 0x1ba08: 0x6c436020, 0x1ba09: 0x6d266e20, 0x1ba0a: 0x6cf49820, 0x1ba0b: 0x6c645a20, + 0x1ba0c: 0x6d056420, 0x1ba0d: 0x6cd59420, 0x1ba0e: 0x6cc65020, 0x1ba0f: 0x6cf83820, + 0x1ba10: 0x6c19b220, 0x1ba11: 0x6cf2a620, 0x1ba12: 0x6c6bb820, 0x1ba13: 0x6c436e20, + 0x1ba14: 0x6c646c20, 0x1ba15: 0x6cbaa020, 0x1ba16: 0x6c5da020, 0x1ba17: 0x6cbaa220, + 0x1ba18: 0x6d2e4a20, 0x1ba19: 0x6c306e20, 0x1ba1a: 0x6cb81220, 0x1ba1b: 0x6c63b620, + 0x1ba1c: 0x6c2e9220, 0x1ba1d: 0x6d2b5e20, 0x1ba1e: 0x6c63be20, 0x1ba1f: 0x6c614420, + 0x1ba20: 0x6d33de20, 0x1ba21: 0x6c76b020, 0x1ba22: 0x6c603420, 0x1ba23: 0x6c7c8620, + 0x1ba24: 0x6c414020, 0x1ba25: 0x6c2ace20, 0x1ba26: 0x6d2e6820, 0x1ba27: 0x6cbaca20, + 0x1ba28: 0x6c439e20, 0x1ba29: 0x6c65bc20, 0x1ba2a: 0x6c6b0620, 0x1ba2b: 0x6d238e20, + 0x1ba2c: 0x6c65be20, 0x1ba2d: 0x6d0dc820, 0x1ba2e: 0x6c92a020, 0x1ba2f: 0x6c54f620, + 0x1ba30: 0x6d2e7e20, 0x1ba31: 0x6cf8da20, 0x1ba32: 0x6cf8ec20, 0x1ba33: 0x6c219a20, + 0x1ba34: 0x6c279420, 0x1ba35: 0x6cc20420, 0x1ba36: 0x6c563820, 0x1ba37: 0x6c563a20, + 0x1ba38: 0x6c563c20, 0x1ba39: 0x6c35c820, 0x1ba3a: 0x6cd30c20, 0x1ba3b: 0x6ce3d220, + 0x1ba3c: 0x6c992620, 0x1ba3d: 0x6c566620, 0x1ba3e: 0x6c858c20, 0x1ba3f: 0x6c39a620, + // Block 0x6e9, offset 0x1ba40 + 0x1ba40: 0x6cdd4e20, 0x1ba41: 0x6c0b2e20, 0x1ba42: 0x6c2d4220, 0x1ba43: 0x6c6ed820, + 0x1ba44: 0x6cce3420, 0x1ba45: 0x6d14c020, 0x1ba46: 0x6d15dc20, 0x1ba47: 0x6ccd7a20, + 0x1ba48: 0x6c568c20, 0x1ba49: 0x6c3a0220, 0x1ba4a: 0x6d0d8020, 0x1ba4b: 0x6cd43620, + 0x1ba4c: 0x6cd48e20, 0x1ba4d: 0x6c10fe20, 0x1ba4e: 0x6d2bc020, 0x1ba4f: 0x6cbff220, + 0x1ba50: 0x6c820e20, 0x1ba51: 0x6cb3fe20, 0x1ba52: 0x6c031020, 0x1ba53: 0x6c26e020, + 0x1ba54: 0x6cc61020, 0x1ba55: 0x6c390220, 0x1ba56: 0x6cc83020, 0x1ba57: 0x6d292a20, + 0x1ba58: 0x6cea9620, 0x1ba59: 0x6d2f1e20, 0x1ba5a: 0x6c2df620, 0x1ba5b: 0x6c776620, + 0x1ba5c: 0x6d207220, 0x1ba5d: 0x6c7a1820, 0x1ba5e: 0x6c41c420, 0x1ba5f: 0x6ccf9e20, + 0x1ba60: 0x6c137820, 0x1ba61: 0x6cea9820, 0x1ba62: 0x6c475420, 0x1ba63: 0x6c79d620, + 0x1ba64: 0x6cf4a220, 0x1ba65: 0x6c2a9420, 0x1ba66: 0x6cb89820, 0x1ba67: 0x6d343620, + 0x1ba68: 0x6cc5b620, 0x1ba69: 0x6c7de620, 0x1ba6a: 0x6c9ac020, 0x1ba6b: 0x6ccade20, + 0x1ba6c: 0x6d0f7420, 0x1ba6d: 0x6ca97820, 0x1ba6e: 0x6c051220, 0x1ba6f: 0x6c17e620, + 0x1ba70: 0x6cc53620, 0x1ba71: 0x6cf57020, 0x1ba72: 0x6cb97220, 0x1ba73: 0x6c047020, + 0x1ba74: 0x6c639c20, 0x1ba75: 0x6d20b220, 0x1ba76: 0x6c3dda20, 0x1ba77: 0x6c02c220, + 0x1ba78: 0x6cf57e20, 0x1ba79: 0x6caf2a20, 0x1ba7a: 0x6d34e620, 0x1ba7b: 0x6d357820, + 0x1ba7c: 0x6c35d220, 0x1ba7d: 0x6c2a9620, 0x1ba7e: 0x6d2f8420, 0x1ba7f: 0x6c19bc20, + // Block 0x6ea, offset 0x1ba80 + 0x1ba80: 0x6c618420, 0x1ba81: 0x6d0d3c20, 0x1ba82: 0x6c7bb820, 0x1ba83: 0x6c0b6e20, + 0x1ba84: 0x6c173220, 0x1ba85: 0x6c704e20, 0x1ba86: 0x6cf1cc20, 0x1ba87: 0x6c551e20, + 0x1ba88: 0x6d267e20, 0x1ba89: 0x6c73de20, 0x1ba8a: 0x6c039a20, 0x1ba8b: 0x6cbe0420, + 0x1ba8c: 0x6c282020, 0x1ba8d: 0x6d331820, 0x1ba8e: 0x6d27d820, 0x1ba8f: 0x6cecc820, + 0x1ba90: 0x6ca54820, 0x1ba91: 0x6d168820, 0x1ba92: 0x6cd49e20, 0x1ba93: 0x6d3b5420, + 0x1ba94: 0x6cb3d020, 0x1ba95: 0x6ce7e620, 0x1ba96: 0x6c30da20, 0x1ba97: 0x6c777e20, + 0x1ba98: 0x6d301220, 0x1ba99: 0x6cb3d220, 0x1ba9a: 0x6c3f3620, 0x1ba9b: 0x6cad3220, + 0x1ba9c: 0x6c036020, 0x1ba9d: 0x6c029c20, 0x1ba9e: 0x6d2aa420, 0x1ba9f: 0x6ce94820, + 0x1baa0: 0x6c79b220, 0x1baa1: 0x6c94d020, 0x1baa2: 0x6cbb3820, 0x1baa3: 0x6d287a20, + 0x1baa4: 0x6c565620, 0x1baa5: 0x6c063020, 0x1baa6: 0x6c0dc420, 0x1baa7: 0x6d34f420, + 0x1baa8: 0x6cae5620, 0x1baa9: 0x6cdf8c20, 0x1baaa: 0x6c106c20, 0x1baab: 0x6caf3620, + 0x1baac: 0x6cdf1820, 0x1baad: 0x6d118c20, 0x1baae: 0x6d31b820, 0x1baaf: 0x6d2bc620, + 0x1bab0: 0x6d0f4820, 0x1bab1: 0x6c063220, 0x1bab2: 0x6c508c20, 0x1bab3: 0x6ca62820, + 0x1bab4: 0x6d12ce20, 0x1bab5: 0x6c2bda20, 0x1bab6: 0x6c1bee20, 0x1bab7: 0x6caf3820, + 0x1bab8: 0x6c632220, 0x1bab9: 0x6ca0a820, 0x1baba: 0x6c9a7620, 0x1babb: 0x6c185a20, + 0x1babc: 0x6d0ad220, 0x1babd: 0x6c1d6420, 0x1babe: 0x6cc0e420, 0x1babf: 0x6c9f9420, + // Block 0x6eb, offset 0x1bac0 + 0x1bac0: 0x6c1f1020, 0x1bac1: 0x6c632a20, 0x1bac2: 0x6c3dee20, 0x1bac3: 0x6d2c7220, + 0x1bac4: 0x6d3a5c20, 0x1bac5: 0x6c27bc20, 0x1bac6: 0x6c146020, 0x1bac7: 0x6ca2c420, + 0x1bac8: 0x6ca6ec20, 0x1bac9: 0x6c7e3e20, 0x1baca: 0x6c3f4220, 0x1bacb: 0x6cad3420, + 0x1bacc: 0x6c04ea20, 0x1bacd: 0x6cabee20, 0x1bace: 0x6c8b9a20, 0x1bacf: 0x6ca2d020, + 0x1bad0: 0x6c48d820, 0x1bad1: 0x6cb97420, 0x1bad2: 0x6c71fc20, 0x1bad3: 0x6cde2e20, + 0x1bad4: 0x6c036820, 0x1bad5: 0x6ceaac20, 0x1bad6: 0x6ceaae20, 0x1bad7: 0x6c02a020, + 0x1bad8: 0x6c705a20, 0x1bad9: 0x6d3cf020, 0x1bada: 0x6caca020, 0x1badb: 0x6d2f5a20, + 0x1badc: 0x6c043c20, 0x1badd: 0x6c043220, 0x1bade: 0x6c2bdc20, 0x1badf: 0x6ca62420, + 0x1bae0: 0x6c720e20, 0x1bae1: 0x6c7de820, 0x1bae2: 0x6c903220, 0x1bae3: 0x6c656420, + 0x1bae4: 0x6cb83420, 0x1bae5: 0x6d1d7e20, 0x1bae6: 0x6c7f8c20, 0x1bae7: 0x6ca8f620, + 0x1bae8: 0x6c0e5020, 0x1bae9: 0x6d2aa820, 0x1baea: 0x6cb8bc20, 0x1baeb: 0x6c522e20, + 0x1baec: 0x6c7dea20, 0x1baed: 0x6cd33620, 0x1baee: 0x6c6a8e20, 0x1baef: 0x6d331e20, + 0x1baf0: 0x6ca8ee20, 0x1baf1: 0x6c45da20, 0x1baf2: 0x6c45de20, 0x1baf3: 0x6cc2ca20, + 0x1baf4: 0x6cd68020, 0x1baf5: 0x6c25a620, 0x1baf6: 0x6d288a20, 0x1baf7: 0x6c77a020, + 0x1baf8: 0x6d149c20, 0x1baf9: 0x6d008220, 0x1bafa: 0x6c12d020, 0x1bafb: 0x6c5a9420, + 0x1bafc: 0x6cb1ea20, 0x1bafd: 0x6d3b6620, 0x1bafe: 0x6cd41020, 0x1baff: 0x6ca2d620, + // Block 0x6ec, offset 0x1bb00 + 0x1bb00: 0x6c03fc20, 0x1bb01: 0x6c1b0c20, 0x1bb02: 0x6c48ac20, 0x1bb03: 0x6d359c20, + 0x1bb04: 0x6c7dec20, 0x1bb05: 0x6c348020, 0x1bb06: 0x6c348220, 0x1bb07: 0x6d350020, + 0x1bb08: 0x6cbcaa20, 0x1bb09: 0x6c01a420, 0x1bb0a: 0x6ca9f220, 0x1bb0b: 0x6d322020, + 0x1bb0c: 0x6c43ca20, 0x1bb0d: 0x6c698820, 0x1bb0e: 0x6c7ae620, 0x1bb0f: 0x6c306020, + 0x1bb10: 0x6ca2d820, 0x1bb11: 0x6ce55420, 0x1bb12: 0x6c8ad220, 0x1bb13: 0x6d2bca20, + 0x1bb14: 0x6c937c20, 0x1bb15: 0x6c2e7220, 0x1bb16: 0x6cebca20, 0x1bb17: 0x6c73fa20, + 0x1bb18: 0x6c8b9420, 0x1bb19: 0x6c71b020, 0x1bb1a: 0x6d35b820, 0x1bb1b: 0x6c943420, + 0x1bb1c: 0x6d0b8620, 0x1bb1d: 0x6cf27c20, 0x1bb1e: 0x6cde3420, 0x1bb1f: 0x6d008420, + 0x1bb20: 0x6ca49c20, 0x1bb21: 0x6c292820, 0x1bb22: 0x6c68d020, 0x1bb23: 0x6d329820, + 0x1bb24: 0x6c612a20, 0x1bb25: 0x6c5a9620, 0x1bb26: 0x6cfb3420, 0x1bb27: 0x6d24be20, + 0x1bb28: 0x6c002020, 0x1bb29: 0x6ceab420, 0x1bb2a: 0x6caab820, 0x1bb2b: 0x6c261c20, + 0x1bb2c: 0x6c0ed420, 0x1bb2d: 0x6c44fa20, 0x1bb2e: 0x6ce3be20, 0x1bb2f: 0x6d322c20, + 0x1bb30: 0x6c19dc20, 0x1bb31: 0x6cc94220, 0x1bb32: 0x6cc94420, 0x1bb33: 0x6c793220, + 0x1bb34: 0x6c9a5020, 0x1bb35: 0x6c906220, 0x1bb36: 0x6c706820, 0x1bb37: 0x6cae9020, + 0x1bb38: 0x6c657a20, 0x1bb39: 0x6d172820, 0x1bb3a: 0x6ce6ba20, 0x1bb3b: 0x6cccce20, + 0x1bb3c: 0x6cc83a20, 0x1bb3d: 0x6cecf820, 0x1bb3e: 0x6d008a20, 0x1bb3f: 0x6c138820, + // Block 0x6ed, offset 0x1bb40 + 0x1bb40: 0x6c3ca020, 0x1bb41: 0x6c68da20, 0x1bb42: 0x6cf43c20, 0x1bb43: 0x6c75a420, + 0x1bb44: 0x6c6fe820, 0x1bb45: 0x6ce7b220, 0x1bb46: 0x6c7da220, 0x1bb47: 0x6c5dac20, + 0x1bb48: 0x6ce89620, 0x1bb49: 0x6d3cf620, 0x1bb4a: 0x6cb3d620, 0x1bb4b: 0x6c938820, + 0x1bb4c: 0x6c033a20, 0x1bb4d: 0x6c4e9820, 0x1bb4e: 0x6cce6020, 0x1bb4f: 0x6ca7da20, + 0x1bb50: 0x6c72e420, 0x1bb51: 0x6d2b4620, 0x1bb52: 0x6cd5ba20, 0x1bb53: 0x6d127620, + 0x1bb54: 0x6c741220, 0x1bb55: 0x6c103620, 0x1bb56: 0x6cecd020, 0x1bb57: 0x6c108420, + 0x1bb58: 0x6d421620, 0x1bb59: 0x6d172a20, 0x1bb5a: 0x6d2ce820, 0x1bb5b: 0x6c937e20, + 0x1bb5c: 0x6cd9a420, 0x1bb5d: 0x6ceab620, 0x1bb5e: 0x6c813a20, 0x1bb5f: 0x6cdce620, + 0x1bb60: 0x6c052220, 0x1bb61: 0x6c657c20, 0x1bb62: 0x6c590220, 0x1bb63: 0x6c29d420, + 0x1bb64: 0x6cf13c20, 0x1bb65: 0x6ced7820, 0x1bb66: 0x6cbd6e20, 0x1bb67: 0x6caf0220, + 0x1bb68: 0x6ccf2c20, 0x1bb69: 0x6c8af820, 0x1bb6a: 0x6c9f4620, 0x1bb6b: 0x6c9aca20, + 0x1bb6c: 0x6c3f5a20, 0x1bb6d: 0x6c041e20, 0x1bb6e: 0x6c723e20, 0x1bb6f: 0x6c29cc20, + 0x1bb70: 0x6cf2b420, 0x1bb71: 0x6c003e20, 0x1bb72: 0x6c731c20, 0x1bb73: 0x6d26a420, + 0x1bb74: 0x6d3fec20, 0x1bb75: 0x6c186420, 0x1bb76: 0x6c20c820, 0x1bb77: 0x6c6ab620, + 0x1bb78: 0x6ce85420, 0x1bb79: 0x6c07ae20, 0x1bb7a: 0x6ca33220, 0x1bb7b: 0x6ca72020, + 0x1bb7c: 0x6cc90e20, 0x1bb7d: 0x6d423620, 0x1bb7e: 0x6cf2e220, 0x1bb7f: 0x6cf5e820, + // Block 0x6ee, offset 0x1bb80 + 0x1bb80: 0x6cfa9820, 0x1bb81: 0x6c19e620, 0x1bb82: 0x6c2cc420, 0x1bb83: 0x6ccae020, + 0x1bb84: 0x6c94d220, 0x1bb85: 0x6cbec620, 0x1bb86: 0x6c427820, 0x1bb87: 0x6c342a20, + 0x1bb88: 0x6cd46020, 0x1bb89: 0x6c2e1820, 0x1bb8a: 0x6cb3d820, 0x1bb8b: 0x6c2bf020, + 0x1bb8c: 0x6d2f0420, 0x1bb8d: 0x6c5d2420, 0x1bb8e: 0x6c613620, 0x1bb8f: 0x6ce1c220, + 0x1bb90: 0x6cb82820, 0x1bb91: 0x6cb5c420, 0x1bb92: 0x6cabfa20, 0x1bb93: 0x6cd4c820, + 0x1bb94: 0x6cb8e220, 0x1bb95: 0x6c8ce420, 0x1bb96: 0x6d125c20, 0x1bb97: 0x6d0b9c20, + 0x1bb98: 0x6c742420, 0x1bb99: 0x6d32b020, 0x1bb9a: 0x6c899020, 0x1bb9b: 0x6c48b020, + 0x1bb9c: 0x6d175c20, 0x1bb9d: 0x6c5dc220, 0x1bb9e: 0x6ccd8220, 0x1bb9f: 0x6d332020, + 0x1bba0: 0x6c361020, 0x1bba1: 0x6c112a20, 0x1bba2: 0x6ce09420, 0x1bba3: 0x6c181e20, + 0x1bba4: 0x6c0db020, 0x1bba5: 0x6c69fa20, 0x1bba6: 0x6ce3ee20, 0x1bba7: 0x6c79a420, + 0x1bba8: 0x6ce99020, 0x1bba9: 0x6d0d6620, 0x1bbaa: 0x6c262220, 0x1bbab: 0x6d387420, + 0x1bbac: 0x6c708a20, 0x1bbad: 0x6ce53420, 0x1bbae: 0x6cb98820, 0x1bbaf: 0x6c791820, + 0x1bbb0: 0x6c040020, 0x1bbb1: 0x6cabd420, 0x1bbb2: 0x6c69fc20, 0x1bbb3: 0x6c91ba20, + 0x1bbb4: 0x6c48cc20, 0x1bbb5: 0x6ca04e20, 0x1bbb6: 0x6c454620, 0x1bbb7: 0x6d35e020, + 0x1bbb8: 0x6c283420, 0x1bbb9: 0x6c9c2a20, 0x1bbba: 0x6c11f220, 0x1bbbb: 0x6ccaa620, + 0x1bbbc: 0x6c498220, 0x1bbbd: 0x6caf1020, 0x1bbbe: 0x6d261c20, 0x1bbbf: 0x6caaee20, + // Block 0x6ef, offset 0x1bbc0 + 0x1bbc0: 0x6c659020, 0x1bbc1: 0x6d32c420, 0x1bbc2: 0x6c6f7220, 0x1bbc3: 0x6c659220, + 0x1bbc4: 0x6d212620, 0x1bbc5: 0x6d0ca820, 0x1bbc6: 0x6c7c7820, 0x1bbc7: 0x6ca42620, + 0x1bbc8: 0x6c52a420, 0x1bbc9: 0x6cc74a20, 0x1bbca: 0x6cb09620, 0x1bbcb: 0x6cee8820, + 0x1bbcc: 0x6cc9c420, 0x1bbcd: 0x6d408820, 0x1bbce: 0x6d079c20, 0x1bbcf: 0x6c9e7620, + 0x1bbd0: 0x6ce32420, 0x1bbd1: 0x6ca7dc20, 0x1bbd2: 0x6c139c20, 0x1bbd3: 0x6cd38620, + 0x1bbd4: 0x6d3ff220, 0x1bbd5: 0x6d324220, 0x1bbd6: 0x6d13f220, 0x1bbd7: 0x6d0a1020, + 0x1bbd8: 0x6d1df620, 0x1bbd9: 0x6c0af220, 0x1bbda: 0x6d0fb620, 0x1bbdb: 0x6c592220, + 0x1bbdc: 0x6d0d8220, 0x1bbdd: 0x6d296a20, 0x1bbde: 0x6c018620, 0x1bbdf: 0x6d059a20, + 0x1bbe0: 0x6d0bac20, 0x1bbe1: 0x6cf2ee20, 0x1bbe2: 0x6c784c20, 0x1bbe3: 0x6c1fb420, + 0x1bbe4: 0x6c600020, 0x1bbe5: 0x6ce3fa20, 0x1bbe6: 0x6c7e5e20, 0x1bbe7: 0x6c7e7a20, + 0x1bbe8: 0x6c18c820, 0x1bbe9: 0x6c762e20, 0x1bbea: 0x6c6f7420, 0x1bbeb: 0x6c6f7c20, + 0x1bbec: 0x6ce8ae20, 0x1bbed: 0x6c6a1220, 0x1bbee: 0x6c5ab420, 0x1bbef: 0x6c44b420, + 0x1bbf0: 0x6c1d5020, 0x1bbf1: 0x6cfed620, 0x1bbf2: 0x6c2ea420, 0x1bbf3: 0x6d004020, + 0x1bbf4: 0x6d256220, 0x1bbf5: 0x6cb98a20, 0x1bbf6: 0x6d127c20, 0x1bbf7: 0x6c139e20, + 0x1bbf8: 0x6d2bda20, 0x1bbf9: 0x6c069e20, 0x1bbfa: 0x6d10f820, 0x1bbfb: 0x6cee8a20, + 0x1bbfc: 0x6c086a20, 0x1bbfd: 0x6c802820, 0x1bbfe: 0x6cf20c20, 0x1bbff: 0x6cbe1420, + // Block 0x6f0, offset 0x1bc00 + 0x1bc00: 0x6c14ca20, 0x1bc01: 0x6c439220, 0x1bc02: 0x6c90e420, 0x1bc03: 0x6d3ff420, + 0x1bc04: 0x6c44ce20, 0x1bc05: 0x6c68f220, 0x1bc06: 0x6c46b820, 0x1bc07: 0x6cbe1a20, + 0x1bc08: 0x6cc68420, 0x1bc09: 0x6cc3ca20, 0x1bc0a: 0x6c1d7420, 0x1bc0b: 0x6c1fb620, + 0x1bc0c: 0x6d2df620, 0x1bc0d: 0x6cdcf020, 0x1bc0e: 0x6cdcd420, 0x1bc0f: 0x6c0f1220, + 0x1bc10: 0x6c1f4e20, 0x1bc11: 0x6cc67420, 0x1bc12: 0x6c057a20, 0x1bc13: 0x6c25ba20, + 0x1bc14: 0x6ccaac20, 0x1bc15: 0x6c780620, 0x1bc16: 0x6d111020, 0x1bc17: 0x6c29dc20, + 0x1bc18: 0x6d33ee20, 0x1bc19: 0x6caa6620, 0x1bc1a: 0x6c7e4820, 0x1bc1b: 0x6c64b020, + 0x1bc1c: 0x6cd9b020, 0x1bc1d: 0x6cc0ae20, 0x1bc1e: 0x6c430820, 0x1bc1f: 0x6cfc1420, + 0x1bc20: 0x6cd78620, 0x1bc21: 0x6cca8020, 0x1bc22: 0x6c6d1420, 0x1bc23: 0x6c9edc20, + 0x1bc24: 0x6c365820, 0x1bc25: 0x6c20ce20, 0x1bc26: 0x6caafc20, 0x1bc27: 0x6cccea20, + 0x1bc28: 0x6cde5c20, 0x1bc29: 0x6d2c7e20, 0x1bc2a: 0x6ce10220, 0x1bc2b: 0x6cac6420, + 0x1bc2c: 0x6c048620, 0x1bc2d: 0x6c265020, 0x1bc2e: 0x6c863020, 0x1bc2f: 0x6ce1d620, + 0x1bc30: 0x6c555c20, 0x1bc31: 0x6d365620, 0x1bc32: 0x6cebe220, 0x1bc33: 0x6c574220, + 0x1bc34: 0x6cb90220, 0x1bc35: 0x6cf20e20, 0x1bc36: 0x6cbb3e20, 0x1bc37: 0x6ce4ac20, + 0x1bc38: 0x6d316220, 0x1bc39: 0x6c365a20, 0x1bc3a: 0x6d00ba20, 0x1bc3b: 0x6cab0220, + 0x1bc3c: 0x6cc2fc20, 0x1bc3d: 0x6c13e220, 0x1bc3e: 0x6d2ccc20, 0x1bc3f: 0x6c441020, + // Block 0x6f1, offset 0x1bc40 + 0x1bc40: 0x6cf44e20, 0x1bc41: 0x6c372420, 0x1bc42: 0x6ccf5220, 0x1bc43: 0x6c776820, + 0x1bc44: 0x6ccf5420, 0x1bc45: 0x6cd4e820, 0x1bc46: 0x6c042620, 0x1bc47: 0x6d111220, + 0x1bc48: 0x6c0d8020, 0x1bc49: 0x6cd9be20, 0x1bc4a: 0x6cdfae20, 0x1bc4b: 0x6cc97820, + 0x1bc4c: 0x6c15ca20, 0x1bc4d: 0x6cdd2a20, 0x1bc4e: 0x6c6f8020, 0x1bc4f: 0x6c1cd220, + 0x1bc50: 0x6c205620, 0x1bc51: 0x6c48d220, 0x1bc52: 0x6c0de620, 0x1bc53: 0x6c3cac20, + 0x1bc54: 0x6cd65620, 0x1bc55: 0x6c2c7e20, 0x1bc56: 0x6cb7ae20, 0x1bc57: 0x6cd9cc20, + 0x1bc58: 0x6d2cf820, 0x1bc59: 0x6c88c220, 0x1bc5a: 0x6c197c20, 0x1bc5b: 0x6c1ab820, + 0x1bc5c: 0x6c499820, 0x1bc5d: 0x6c928220, 0x1bc5e: 0x6c961420, 0x1bc5f: 0x6c90ee20, + 0x1bc60: 0x6d400020, 0x1bc61: 0x6c413420, 0x1bc62: 0x6c56b620, 0x1bc63: 0x6d2bea20, + 0x1bc64: 0x6c209420, 0x1bc65: 0x6ce19e20, 0x1bc66: 0x6c57ac20, 0x1bc67: 0x6c24dc20, + 0x1bc68: 0x6ca38420, 0x1bc69: 0x6ca07220, 0x1bc6a: 0x6c676820, 0x1bc6b: 0x6c4a7a20, + 0x1bc6c: 0x6d1cfc20, 0x1bc6d: 0x6d348020, 0x1bc6e: 0x6c026020, 0x1bc6f: 0x6d36ae20, + 0x1bc70: 0x6ca85c20, 0x1bc71: 0x6c97ea20, 0x1bc72: 0x6c163020, 0x1bc73: 0x6c79c220, + 0x1bc74: 0x6c1e6220, 0x1bc75: 0x6ccf6420, 0x1bc76: 0x6ce95420, 0x1bc77: 0x6c691420, + 0x1bc78: 0x6ca05620, 0x1bc79: 0x6ca06820, 0x1bc7a: 0x6d306c20, 0x1bc7b: 0x6c11fc20, + 0x1bc7c: 0x6c794820, 0x1bc7d: 0x6c0c0a20, 0x1bc7e: 0x6c67f620, 0x1bc7f: 0x6d19f420, + // Block 0x6f2, offset 0x1bc80 + 0x1bc80: 0x6c46ce20, 0x1bc81: 0x6cb90420, 0x1bc82: 0x6c8aa020, 0x1bc83: 0x6c608420, + 0x1bc84: 0x6d1bce20, 0x1bc85: 0x6c73b420, 0x1bc86: 0x6cb1d020, 0x1bc87: 0x6cb1ca20, + 0x1bc88: 0x6c813c20, 0x1bc89: 0x6c33ac20, 0x1bc8a: 0x6cfcfa20, 0x1bc8b: 0x6cc84420, + 0x1bc8c: 0x6c4b6620, 0x1bc8d: 0x6d297420, 0x1bc8e: 0x6d185020, 0x1bc8f: 0x6cfb7e20, + 0x1bc90: 0x6c198820, 0x1bc91: 0x6c198a20, 0x1bc92: 0x6cc94620, 0x1bc93: 0x6ca4ba20, + 0x1bc94: 0x6c53ca20, 0x1bc95: 0x6cd81620, 0x1bc96: 0x6c4ee020, 0x1bc97: 0x6c4a2620, + 0x1bc98: 0x6c266420, 0x1bc99: 0x6d420c20, 0x1bc9a: 0x6ca73420, 0x1bc9b: 0x6c8c2a20, + 0x1bc9c: 0x6d332c20, 0x1bc9d: 0x6c5ae420, 0x1bc9e: 0x6d3c4820, 0x1bc9f: 0x6c692820, + 0x1bca0: 0x6c615020, 0x1bca1: 0x6c126620, 0x1bca2: 0x6c283c20, 0x1bca3: 0x6c283e20, + 0x1bca4: 0x6c183220, 0x1bca5: 0x6c0e8820, 0x1bca6: 0x6c17ee20, 0x1bca7: 0x6c73b620, + 0x1bca8: 0x6c3f8020, 0x1bca9: 0x6c89d220, 0x1bcaa: 0x6c07c220, 0x1bcab: 0x6c3f8220, + 0x1bcac: 0x6cbc5820, 0x1bcad: 0x6c0e8a20, 0x1bcae: 0x6c25c620, 0x1bcaf: 0x6d3d7a20, + 0x1bcb0: 0x6d3bda20, 0x1bcb1: 0x6ceff020, 0x1bcb2: 0x6cb40e20, 0x1bcb3: 0x6cbe2220, + 0x1bcb4: 0x6c33a620, 0x1bcb5: 0x6ca73620, 0x1bcb6: 0x6c574420, 0x1bcb7: 0x6d00d820, + 0x1bcb8: 0x6c912e20, 0x1bcb9: 0x6c692a20, 0x1bcba: 0x6c249020, 0x1bcbb: 0x6cde8c20, + 0x1bcbc: 0x6c4f0420, 0x1bcbd: 0x6cbc5c20, 0x1bcbe: 0x6cf29a20, 0x1bcbf: 0x6c65d620, + // Block 0x6f3, offset 0x1bcc0 + 0x1bcc0: 0x6c41ea20, 0x1bcc1: 0x6d1db220, 0x1bcc2: 0x6c825620, 0x1bcc3: 0x6ca46e20, + 0x1bcc4: 0x6c91da20, 0x1bcc5: 0x6ccda820, 0x1bcc6: 0x6d3d7c20, 0x1bcc7: 0x6d2afa20, + 0x1bcc8: 0x6cb41420, 0x1bcc9: 0x6c21d620, 0x1bcca: 0x6c5f5220, 0x1bccb: 0x6c293420, + 0x1bccc: 0x6ccb5620, 0x1bccd: 0x6c126820, 0x1bcce: 0x6cbe8c20, 0x1bccf: 0x6cbe8420, + 0x1bcd0: 0x6c595220, 0x1bcd1: 0x6c6a3020, 0x1bcd2: 0x6cbd9420, 0x1bcd3: 0x6c7b0220, + 0x1bcd4: 0x6c27fa20, 0x1bcd5: 0x6d00dc20, 0x1bcd6: 0x6c761420, 0x1bcd7: 0x6cb06e20, + 0x1bcd8: 0x6c040620, 0x1bcd9: 0x6c02f220, 0x1bcda: 0x6c728c20, 0x1bcdb: 0x6d132620, + 0x1bcdc: 0x6c370620, 0x1bcdd: 0x6c9c2c20, 0x1bcde: 0x6cda2620, 0x1bcdf: 0x6c9c7a20, + 0x1bce0: 0x6c615420, 0x1bce1: 0x6cdf4820, 0x1bce2: 0x6d3da820, 0x1bce3: 0x6c29f220, + 0x1bce4: 0x6d040a20, 0x1bce5: 0x6c804420, 0x1bce6: 0x6c10da20, 0x1bce7: 0x6c71d820, + 0x1bce8: 0x6d129220, 0x1bce9: 0x6cc80620, 0x1bcea: 0x6d136820, 0x1bceb: 0x6d135a20, + 0x1bcec: 0x6ca65220, 0x1bced: 0x6cf31420, 0x1bcee: 0x6c60bc20, 0x1bcef: 0x6c0d8820, + 0x1bcf0: 0x6ca92420, 0x1bcf1: 0x6c43b420, 0x1bcf2: 0x6d370420, 0x1bcf3: 0x6d36de20, + 0x1bcf4: 0x6c7e1a20, 0x1bcf5: 0x6ca08620, 0x1bcf6: 0x6c66ec20, 0x1bcf7: 0x6d011020, + 0x1bcf8: 0x6c8b4c20, 0x1bcf9: 0x6cdfc020, 0x1bcfa: 0x6c042a20, 0x1bcfb: 0x6cda3020, + 0x1bcfc: 0x6c91e820, 0x1bcfd: 0x6c94ca20, 0x1bcfe: 0x6cc54220, 0x1bcff: 0x6ce2fe20, + // Block 0x6f4, offset 0x1bd00 + 0x1bd00: 0x6cac4c20, 0x1bd01: 0x6d103620, 0x1bd02: 0x6c834c20, 0x1bd03: 0x6c10dc20, + 0x1bd04: 0x6cd51420, 0x1bd05: 0x6d297a20, 0x1bd06: 0x6ca74220, 0x1bd07: 0x6cfc4020, + 0x1bd08: 0x6c75fa20, 0x1bd09: 0x6c5d6620, 0x1bd0a: 0x6c86f420, 0x1bd0b: 0x6c7ea420, + 0x1bd0c: 0x6c58e420, 0x1bd0d: 0x6d1cb620, 0x1bd0e: 0x6c917020, 0x1bd0f: 0x6c904420, + 0x1bd10: 0x6cb93a20, 0x1bd11: 0x6cb93c20, 0x1bd12: 0x6d297c20, 0x1bd13: 0x6cb94620, + 0x1bd14: 0x6c7fe620, 0x1bd15: 0x6cfafc20, 0x1bd16: 0x6d1c1e20, 0x1bd17: 0x6c9a3a20, + 0x1bd18: 0x6cc50820, 0x1bd19: 0x6c14e020, 0x1bd1a: 0x6d1d6c20, 0x1bd1b: 0x6c249820, + 0x1bd1c: 0x6d012420, 0x1bd1d: 0x6ccf8a20, 0x1bd1e: 0x6c957420, 0x1bd1f: 0x6c760820, + 0x1bd20: 0x6c9cb220, 0x1bd21: 0x6c84a620, 0x1bd22: 0x6d298220, 0x1bd23: 0x6c945820, + 0x1bd24: 0x6cdfc420, 0x1bd25: 0x6d416420, 0x1bd26: 0x6c876620, 0x1bd27: 0x6c2cf820, + 0x1bd28: 0x6cec0020, 0x1bd29: 0x6c293c20, 0x1bd2a: 0x6c697420, 0x1bd2b: 0x6c751c20, + 0x1bd2c: 0x6c805c20, 0x1bd2d: 0x6c879e20, 0x1bd2e: 0x6ca47620, 0x1bd2f: 0x6d337e20, + 0x1bd30: 0x6c4b2820, 0x1bd31: 0x6c4ad820, 0x1bd32: 0x6cb4f020, 0x1bd33: 0x6d0a3a20, + 0x1bd34: 0x6cb3fc20, 0x1bd35: 0x6cdba820, 0x1bd36: 0x6cd42a20, 0x1bd37: 0x6c779a20, + 0x1bd38: 0x6d1e9020, 0x1bd39: 0x6c410c20, 0x1bd3a: 0x6d15bc20, 0x1bd3b: 0x6c455e20, + 0x1bd3c: 0x6c416620, 0x1bd3d: 0x6c047220, 0x1bd3e: 0x6c39e220, 0x1bd3f: 0x6d334220, + // Block 0x6f5, offset 0x1bd40 + 0x1bd40: 0x6cb36c20, 0x1bd41: 0x6c2cc020, 0x1bd42: 0x6c79da20, 0x1bd43: 0x6c9f9a20, + 0x1bd44: 0x6cf4c420, 0x1bd45: 0x6c480020, 0x1bd46: 0x6c50f020, 0x1bd47: 0x6c12d620, + 0x1bd48: 0x6cffdc20, 0x1bd49: 0x6c9ce620, 0x1bd4a: 0x6c1f2420, 0x1bd4b: 0x6c43d620, + 0x1bd4c: 0x6c2b6220, 0x1bd4d: 0x6d06b620, 0x1bd4e: 0x6c699a20, 0x1bd4f: 0x6c9fa820, + 0x1bd50: 0x6c18bc20, 0x1bd51: 0x6c6ff220, 0x1bd52: 0x6ccfda20, 0x1bd53: 0x6c344620, + 0x1bd54: 0x6d224e20, 0x1bd55: 0x6c1c0e20, 0x1bd56: 0x6c024020, 0x1bd57: 0x6c044020, + 0x1bd58: 0x6d06b820, 0x1bd59: 0x6c699c20, 0x1bd5a: 0x6c344820, 0x1bd5b: 0x6c88b420, + 0x1bd5c: 0x6ca82c20, 0x1bd5d: 0x6c097820, 0x1bd5e: 0x6c172c20, 0x1bd5f: 0x6c2d1a20, + 0x1bd60: 0x6c342e20, 0x1bd61: 0x6d179c20, 0x1bd62: 0x6c41d420, 0x1bd63: 0x6cca5420, + 0x1bd64: 0x6c786820, 0x1bd65: 0x6d0e7020, 0x1bd66: 0x6c339a20, 0x1bd67: 0x6c5ecc20, + 0x1bd68: 0x6ce81420, 0x1bd69: 0x6cffea20, 0x1bd6a: 0x6c345020, 0x1bd6b: 0x6c690620, + 0x1bd6c: 0x6c6e8420, 0x1bd6d: 0x6d0fc220, 0x1bd6e: 0x6cf9ce20, 0x1bd6f: 0x6c9f5e20, + 0x1bd70: 0x6cd5e420, 0x1bd71: 0x6c004820, 0x1bd72: 0x6cbb8c20, 0x1bd73: 0x6c004a20, + 0x1bd74: 0x6d333220, 0x1bd75: 0x6c2b8820, 0x1bd76: 0x6d324c20, 0x1bd77: 0x6c3d8e20, + 0x1bd78: 0x6cd60020, 0x1bd79: 0x6c8a1020, 0x1bd7a: 0x6cc13620, 0x1bd7b: 0x6d049e20, + 0x1bd7c: 0x6d161020, 0x1bd7d: 0x6c694020, 0x1bd7e: 0x6ccdfc20, 0x1bd7f: 0x6c694220, + // Block 0x6f6, offset 0x1bd80 + 0x1bd80: 0x6d3daa20, 0x1bd81: 0x6d18c220, 0x1bd82: 0x6c88ca20, 0x1bd83: 0x6c0a6820, + 0x1bd84: 0x6c848820, 0x1bd85: 0x6d002220, 0x1bd86: 0x6d002420, 0x1bd87: 0x6cf17a20, + 0x1bd88: 0x6d08f420, 0x1bd89: 0x6cb58220, 0x1bd8a: 0x6cb5a220, 0x1bd8b: 0x6d2cea20, + 0x1bd8c: 0x6c0d3620, 0x1bd8d: 0x6c742620, 0x1bd8e: 0x6d2cf020, 0x1bd8f: 0x6c80b820, + 0x1bd90: 0x6c3a5620, 0x1bd91: 0x6c048020, 0x1bd92: 0x6c048820, 0x1bd93: 0x6c7fb420, + 0x1bd94: 0x6d22a620, 0x1bd95: 0x6c7ff620, 0x1bd96: 0x6cf06420, 0x1bd97: 0x6c30f820, + 0x1bd98: 0x6cd0de20, 0x1bd99: 0x6c8a9420, 0x1bd9a: 0x6c640a20, 0x1bd9b: 0x6c554420, + 0x1bd9c: 0x6d00a020, 0x1bd9d: 0x6c641820, 0x1bd9e: 0x6d225820, 0x1bd9f: 0x6d316420, + 0x1bda0: 0x6c69ae20, 0x1bda1: 0x6cf30220, 0x1bda2: 0x6ce5ca20, 0x1bda3: 0x6c313a20, + 0x1bda4: 0x6c6c1e20, 0x1bda5: 0x6c1bdc20, 0x1bda6: 0x6d1a2e20, 0x1bda7: 0x6c3f4420, + 0x1bda8: 0x6cbaa420, 0x1bda9: 0x6d2ddc20, 0x1bdaa: 0x6cc17820, 0x1bdab: 0x6d3d3220, + 0x1bdac: 0x6d2de620, 0x1bdad: 0x6c32ba20, 0x1bdae: 0x6c262820, 0x1bdaf: 0x6cd7e820, + 0x1bdb0: 0x6d02dc20, 0x1bdb1: 0x6d3d5c20, 0x1bdb2: 0x6d3d7e20, 0x1bdb3: 0x6cbd9620, + 0x1bdb4: 0x6c8bda20, 0x1bdb5: 0x6d3dac20, 0x1bdb6: 0x6c1f7c20, 0x1bdb7: 0x6c32e020, + 0x1bdb8: 0x6d3a9020, 0x1bdb9: 0x6c398020, 0x1bdba: 0x6c159820, 0x1bdbb: 0x6c4f5e20, + 0x1bdbc: 0x6d20c220, 0x1bdbd: 0x6cd1aa20, 0x1bdbe: 0x6cae0e20, 0x1bdbf: 0x6d1f0820, + // Block 0x6f7, offset 0x1bdc0 + 0x1bdc0: 0x6c9a7c20, 0x1bdc1: 0x6cacfa20, 0x1bdc2: 0x6cb5a420, 0x1bdc3: 0x6d2d6820, + 0x1bdc4: 0x6c98d020, 0x1bdc5: 0x6c938a20, 0x1bdc6: 0x6cae1220, 0x1bdc7: 0x6caf6020, + 0x1bdc8: 0x6c8e4e20, 0x1bdc9: 0x6c3d6220, 0x1bdca: 0x6c39d020, 0x1bdcb: 0x6d081020, + 0x1bdcc: 0x6c6daa20, 0x1bdcd: 0x6c6dac20, 0x1bdce: 0x6ca63620, 0x1bdcf: 0x6d40b820, + 0x1bdd0: 0x6d2fb020, 0x1bdd1: 0x6d15ee20, 0x1bdd2: 0x6c8e6a20, 0x1bdd3: 0x6cce7420, + 0x1bdd4: 0x6c668a20, 0x1bdd5: 0x6d214c20, 0x1bdd6: 0x6d15fe20, 0x1bdd7: 0x6cb61a20, + 0x1bdd8: 0x6d36e020, 0x1bdd9: 0x6c385e20, 0x1bdda: 0x6cb16620, 0x1bddb: 0x6c386020, + 0x1bddc: 0x6d2db220, 0x1bddd: 0x6c7b4420, 0x1bdde: 0x6cdc9a20, 0x1bddf: 0x6d21d420, + 0x1bde0: 0x6cf39a20, 0x1bde1: 0x6c616c20, 0x1bde2: 0x6c61a820, 0x1bde3: 0x6c61ec20, + 0x1bde4: 0x6c5dce20, 0x1bde5: 0x6cc63620, 0x1bde6: 0x6c285e20, 0x1bde7: 0x6c6fca20, + 0x1bde8: 0x6d34d820, 0x1bde9: 0x6d2a3a20, 0x1bdea: 0x6d006820, 0x1bdeb: 0x6ce54620, + 0x1bdec: 0x6d09d620, 0x1bded: 0x6d066820, 0x1bdee: 0x6c40bc20, 0x1bdef: 0x6c7e5820, + 0x1bdf0: 0x6c420c20, 0x1bdf1: 0x6c4e8a20, 0x1bdf2: 0x6cdf1020, 0x1bdf3: 0x6c2c1620, + 0x1bdf4: 0x6d056620, 0x1bdf5: 0x6c159420, 0x1bdf6: 0x6cd23a20, 0x1bdf7: 0x6c7bde20, + 0x1bdf8: 0x6d0f7c20, 0x1bdf9: 0x6cd24620, 0x1bdfa: 0x6cee4c20, 0x1bdfb: 0x6c9f3020, + 0x1bdfc: 0x6c9f3220, 0x1bdfd: 0x6cea8620, 0x1bdfe: 0x6c20fc20, 0x1bdff: 0x6cf42820, + // Block 0x6f8, offset 0x1be00 + 0x1be00: 0x6d278820, 0x1be01: 0x6c06e620, 0x1be02: 0x6c01f420, 0x1be03: 0x6d2b3e20, + 0x1be04: 0x6c04ba20, 0x1be05: 0x6c6a7420, 0x1be06: 0x6c7d4c20, 0x1be07: 0x6cd0e020, + 0x1be08: 0x6c566820, 0x1be09: 0x6c39c420, 0x1be0a: 0x6c501c20, 0x1be0b: 0x6c4b2e20, + 0x1be0c: 0x6c166020, 0x1be0d: 0x6d077c20, 0x1be0e: 0x6c9fe820, 0x1be0f: 0x6c5cb220, + 0x1be10: 0x6c3b1620, 0x1be11: 0x6cbdc820, 0x1be12: 0x6c54a220, 0x1be13: 0x6d16ba20, + 0x1be14: 0x6cf58620, 0x1be15: 0x6d02b220, 0x1be16: 0x6d0c6420, 0x1be17: 0x6d2b4020, + 0x1be18: 0x6c39c620, 0x1be19: 0x6cdfd220, 0x1be1a: 0x6cd09420, 0x1be1b: 0x6c721020, + 0x1be1c: 0x6d0f9620, 0x1be1d: 0x6d296020, 0x1be1e: 0x6c0dcc20, 0x1be1f: 0x6d036a20, + 0x1be20: 0x6d1d3420, 0x1be21: 0x6d087620, 0x1be22: 0x6cb36e20, 0x1be23: 0x6d31c020, + 0x1be24: 0x6c8cb420, 0x1be25: 0x6c210020, 0x1be26: 0x6c502020, 0x1be27: 0x6c9a7e20, + 0x1be28: 0x6d422e20, 0x1be29: 0x6ca0e020, 0x1be2a: 0x6c0b8620, 0x1be2b: 0x6d069020, + 0x1be2c: 0x6c5cb420, 0x1be2d: 0x6d2f5c20, 0x1be2e: 0x6d401820, 0x1be2f: 0x6cd33820, + 0x1be30: 0x6cd33a20, 0x1be31: 0x6d22e220, 0x1be32: 0x6c3a8e20, 0x1be33: 0x6c2e7420, + 0x1be34: 0x6c993220, 0x1be35: 0x6ca68620, 0x1be36: 0x6c16e620, 0x1be37: 0x6cf14a20, + 0x1be38: 0x6c2fe420, 0x1be39: 0x6c006220, 0x1be3a: 0x6c0dce20, 0x1be3b: 0x6c01f620, + 0x1be3c: 0x6d390e20, 0x1be3d: 0x6c8f7420, 0x1be3e: 0x6cfbec20, 0x1be3f: 0x6c7be820, + // Block 0x6f9, offset 0x1be40 + 0x1be40: 0x6ce5ba20, 0x1be41: 0x6c175c20, 0x1be42: 0x6cd25c20, 0x1be43: 0x6c5a8220, + 0x1be44: 0x6c5a4e20, 0x1be45: 0x6d084820, 0x1be46: 0x6c7c6220, 0x1be47: 0x6d058020, + 0x1be48: 0x6c68dc20, 0x1be49: 0x6c6cea20, 0x1be4a: 0x6d35ba20, 0x1be4b: 0x6c6cec20, + 0x1be4c: 0x6cce3620, 0x1be4d: 0x6ce72e20, 0x1be4e: 0x6c53a020, 0x1be4f: 0x6d0e5020, + 0x1be50: 0x6c40ec20, 0x1be51: 0x6cfde020, 0x1be52: 0x6ccc9c20, 0x1be53: 0x6cffa820, + 0x1be54: 0x6d12de20, 0x1be55: 0x6d274c20, 0x1be56: 0x6c5aa220, 0x1be57: 0x6c4dfe20, + 0x1be58: 0x6c4eac20, 0x1be59: 0x6c75ae20, 0x1be5a: 0x6ced0820, 0x1be5b: 0x6cfcb020, + 0x1be5c: 0x6c7d5820, 0x1be5d: 0x6d392020, 0x1be5e: 0x6cf5ea20, 0x1be5f: 0x6c19de20, + 0x1be60: 0x6cd15820, 0x1be61: 0x6c101420, 0x1be62: 0x6d304c20, 0x1be63: 0x6d304e20, + 0x1be64: 0x6cf4dc20, 0x1be65: 0x6c4eae20, 0x1be66: 0x6c5bb620, 0x1be67: 0x6c503420, + 0x1be68: 0x6c194e20, 0x1be69: 0x6ced1820, 0x1be6a: 0x6ce4f420, 0x1be6b: 0x6d3d5e20, + 0x1be6c: 0x6d41b220, 0x1be6d: 0x6d38e820, 0x1be6e: 0x6cb48c20, 0x1be6f: 0x6c6e2020, + 0x1be70: 0x6cf60c20, 0x1be71: 0x6ccd4020, 0x1be72: 0x6ca63820, 0x1be73: 0x6cf60e20, + 0x1be74: 0x6cbe7a20, 0x1be75: 0x6cb6fc20, 0x1be76: 0x6c6db420, 0x1be77: 0x6c4afc20, + 0x1be78: 0x6d332220, 0x1be79: 0x6d179e20, 0x1be7a: 0x6d362820, 0x1be7b: 0x6c01c220, + 0x1be7c: 0x6ced1a20, 0x1be7d: 0x6c8bb220, 0x1be7e: 0x6c89b820, 0x1be7f: 0x6c166e20, + // Block 0x6fa, offset 0x1be80 + 0x1be80: 0x6cee1820, 0x1be81: 0x6cffac20, 0x1be82: 0x6d298c20, 0x1be83: 0x6c3b0620, + 0x1be84: 0x6d07a620, 0x1be85: 0x6c453420, 0x1be86: 0x6d151820, 0x1be87: 0x6cf9d020, + 0x1be88: 0x6d275420, 0x1be89: 0x6c5ac220, 0x1be8a: 0x6d064220, 0x1be8b: 0x6c9fba20, + 0x1be8c: 0x6c7c8820, 0x1be8d: 0x6d126020, 0x1be8e: 0x6d1d3a20, 0x1be8f: 0x6cd55c20, + 0x1be90: 0x6cefd820, 0x1be91: 0x6cd55a20, 0x1be92: 0x6cbe8220, 0x1be93: 0x6c998e20, + 0x1be94: 0x6ca40020, 0x1be95: 0x6c65ac20, 0x1be96: 0x6caa9420, 0x1be97: 0x6c01c620, + 0x1be98: 0x6d0fc420, 0x1be99: 0x6c210a20, 0x1be9a: 0x6d111e20, 0x1be9b: 0x6cdd7820, + 0x1be9c: 0x6c6d2820, 0x1be9d: 0x6ca00e20, 0x1be9e: 0x6c691620, 0x1be9f: 0x6c766620, + 0x1bea0: 0x6c430e20, 0x1bea1: 0x6cf25620, 0x1bea2: 0x6c171c20, 0x1bea3: 0x6cb7b020, + 0x1bea4: 0x6c505220, 0x1bea5: 0x6d0e9420, 0x1bea6: 0x6c864a20, 0x1bea7: 0x6c00ba20, + 0x1bea8: 0x6c623620, 0x1bea9: 0x6c626020, 0x1beaa: 0x6c9af820, 0x1beab: 0x6d299620, + 0x1beac: 0x6d01f820, 0x1bead: 0x6c505820, 0x1beae: 0x6ca2a220, 0x1beaf: 0x6ca14020, + 0x1beb0: 0x6c233820, 0x1beb1: 0x6ca6b820, 0x1beb2: 0x6d2ed420, 0x1beb3: 0x6c5c1420, + 0x1beb4: 0x6c066220, 0x1beb5: 0x6c4ef820, 0x1beb6: 0x6d081e20, 0x1beb7: 0x6c200420, + 0x1beb8: 0x6c8a1820, 0x1beb9: 0x6cfacc20, 0x1beba: 0x6c28ae20, 0x1bebb: 0x6c6e2e20, + 0x1bebc: 0x6cb1d220, 0x1bebd: 0x6c8bdc20, 0x1bebe: 0x6cea2820, 0x1bebf: 0x6cf80e20, + // Block 0x6fb, offset 0x1bec0 + 0x1bec0: 0x6d189220, 0x1bec1: 0x6c627620, 0x1bec2: 0x6c5a7620, 0x1bec3: 0x6c278820, + 0x1bec4: 0x6d131220, 0x1bec5: 0x6d131420, 0x1bec6: 0x6c867820, 0x1bec7: 0x6ce00e20, + 0x1bec8: 0x6ce78220, 0x1bec9: 0x6cffba20, 0x1beca: 0x6c3ace20, 0x1becb: 0x6cd07420, + 0x1becc: 0x6d2fde20, 0x1becd: 0x6c506620, 0x1bece: 0x6d18c420, 0x1becf: 0x6cfdfc20, + 0x1bed0: 0x6d03a220, 0x1bed1: 0x6cd02620, 0x1bed2: 0x6c694a20, 0x1bed3: 0x6c067020, + 0x1bed4: 0x6c6eaa20, 0x1bed5: 0x6d0ed020, 0x1bed6: 0x6c00de20, 0x1bed7: 0x6d135c20, + 0x1bed8: 0x6cc7dc20, 0x1bed9: 0x6cd57420, 0x1beda: 0x6c9b5820, 0x1bedb: 0x6d09b820, + 0x1bedc: 0x6d122e20, 0x1bedd: 0x6cb4bc20, 0x1bede: 0x6c86ca20, 0x1bedf: 0x6c18f620, + 0x1bee0: 0x6c7c0e20, 0x1bee1: 0x6c2f0420, 0x1bee2: 0x6c8a7e20, 0x1bee3: 0x6d0ef820, + 0x1bee4: 0x6c5e3e20, 0x1bee5: 0x6c917e20, 0x1bee6: 0x6cf73220, 0x1bee7: 0x6cc6dc20, + 0x1bee8: 0x6c8fd620, 0x1bee9: 0x6ca47220, 0x1beea: 0x6c95d620, 0x1beeb: 0x6c945a20, + 0x1beec: 0x6cccae20, 0x1beed: 0x6ce18e20, 0x1beee: 0x6d0e2420, 0x1beef: 0x6d3a4420, + 0x1bef0: 0x6d264220, 0x1bef1: 0x6d264420, 0x1bef2: 0x6cc0c620, 0x1bef3: 0x6d12bc20, + 0x1bef4: 0x6c452620, 0x1bef5: 0x6d12c420, 0x1bef6: 0x6c54a420, 0x1bef7: 0x6c50d620, + 0x1bef8: 0x6cd4b820, 0x1bef9: 0x6c127420, 0x1befa: 0x6c127020, 0x1befb: 0x6cd18620, + 0x1befc: 0x6c97da20, 0x1befd: 0x6c134820, 0x1befe: 0x6c135020, 0x1beff: 0x6ce3fc20, + // Block 0x6fc, offset 0x1bf00 + 0x1bf00: 0x6d41b020, 0x1bf01: 0x6c11d020, 0x1bf02: 0x6d06d620, 0x1bf03: 0x6c5be220, + 0x1bf04: 0x6d1af620, 0x1bf05: 0x6cbcd220, 0x1bf06: 0x6c3b4220, 0x1bf07: 0x6cb03820, + 0x1bf08: 0x6d266820, 0x1bf09: 0x6d1f9820, 0x1bf0a: 0x6cc85020, 0x1bf0b: 0x6cae8e20, + 0x1bf0c: 0x6c3b5a20, 0x1bf0d: 0x6c3df220, 0x1bf0e: 0x6c8cb620, 0x1bf0f: 0x6c3a4820, + 0x1bf10: 0x6cc17a20, 0x1bf11: 0x6ce3da20, 0x1bf12: 0x6caa7e20, 0x1bf13: 0x6ce5bc20, + 0x1bf14: 0x6cd77620, 0x1bf15: 0x6d322e20, 0x1bf16: 0x6c80fa20, 0x1bf17: 0x6c80f820, + 0x1bf18: 0x6d416c20, 0x1bf19: 0x6c9ff620, 0x1bf1a: 0x6c598c20, 0x1bf1b: 0x6cee5220, + 0x1bf1c: 0x6cea2020, 0x1bf1d: 0x6c176220, 0x1bf1e: 0x6c5ed220, 0x1bf1f: 0x6cb4f220, + 0x1bf20: 0x6d1bba20, 0x1bf21: 0x6d3f9820, 0x1bf22: 0x6cee5820, 0x1bf23: 0x6ce78420, + 0x1bf24: 0x6c811220, 0x1bf25: 0x6c81fa20, 0x1bf26: 0x6c9b5a20, 0x1bf27: 0x6c8fd820, + 0x1bf28: 0x6ca25c20, 0x1bf29: 0x6c2ac820, 0x1bf2a: 0x6cf06c20, 0x1bf2b: 0x6ca0bc20, + 0x1bf2c: 0x6c079220, 0x1bf2d: 0x6d2c1620, 0x1bf2e: 0x6cd59020, 0x1bf2f: 0x6cd59220, + 0x1bf30: 0x6ca26220, 0x1bf31: 0x6d397e20, 0x1bf32: 0x6cc56620, 0x1bf33: 0x6c031420, + 0x1bf34: 0x6cb48220, 0x1bf35: 0x6c352a20, 0x1bf36: 0x6c347020, 0x1bf37: 0x6c29ba20, + 0x1bf38: 0x6c857220, 0x1bf39: 0x6c4abe20, 0x1bf3a: 0x6c5e7820, 0x1bf3b: 0x6c6f4820, + 0x1bf3c: 0x6c08b220, 0x1bf3d: 0x6d051c20, 0x1bf3e: 0x6c19b420, 0x1bf3f: 0x6c22a820, + // Block 0x6fd, offset 0x1bf40 + 0x1bf40: 0x6ccbc020, 0x1bf41: 0x6cc83420, 0x1bf42: 0x6d28ac20, 0x1bf43: 0x6cc2b420, + 0x1bf44: 0x6cb8a620, 0x1bf45: 0x6d20b620, 0x1bf46: 0x6c416820, 0x1bf47: 0x6cf35420, + 0x1bf48: 0x6c137c20, 0x1bf49: 0x6cccbc20, 0x1bf4a: 0x6d09dc20, 0x1bf4b: 0x6c388420, + 0x1bf4c: 0x6cf4aa20, 0x1bf4d: 0x6d3ee620, 0x1bf4e: 0x6c87d820, 0x1bf4f: 0x6d041220, + 0x1bf50: 0x6c110820, 0x1bf51: 0x6c259220, 0x1bf52: 0x6cc5c220, 0x1bf53: 0x6c0bea20, + 0x1bf54: 0x6ceaa220, 0x1bf55: 0x6c2c1820, 0x1bf56: 0x6d2f2220, 0x1bf57: 0x6c983220, + 0x1bf58: 0x6c1be220, 0x1bf59: 0x6d168a20, 0x1bf5a: 0x6c412c20, 0x1bf5b: 0x6c456020, + 0x1bf5c: 0x6c323420, 0x1bf5d: 0x6c83a220, 0x1bf5e: 0x6cb6d620, 0x1bf5f: 0x6cd59820, + 0x1bf60: 0x6c425620, 0x1bf61: 0x6ce56a20, 0x1bf62: 0x6c681a20, 0x1bf63: 0x6ccdf820, + 0x1bf64: 0x6cedb620, 0x1bf65: 0x6c7ee020, 0x1bf66: 0x6c704420, 0x1bf67: 0x6c983420, + 0x1bf68: 0x6d0f7e20, 0x1bf69: 0x6c96b220, 0x1bf6a: 0x6c9e8820, 0x1bf6b: 0x6cd88e20, + 0x1bf6c: 0x6d254020, 0x1bf6d: 0x6c4f6020, 0x1bf6e: 0x6c3a8620, 0x1bf6f: 0x6c069020, + 0x1bf70: 0x6c6a7e20, 0x1bf71: 0x6c2fe020, 0x1bf72: 0x6c430020, 0x1bf73: 0x6d118e20, + 0x1bf74: 0x6cfa7c20, 0x1bf75: 0x6c1ed620, 0x1bf76: 0x6c20fe20, 0x1bf77: 0x6cabd020, + 0x1bf78: 0x6cd4a820, 0x1bf79: 0x6c578220, 0x1bf7a: 0x6d02b420, 0x1bf7b: 0x6c1e2020, + 0x1bf7c: 0x6d3aae20, 0x1bf7d: 0x6c1e2220, 0x1bf7e: 0x6cd90420, 0x1bf7f: 0x6c04bc20, + // Block 0x6fe, offset 0x1bf80 + 0x1bf80: 0x6cd90620, 0x1bf81: 0x6c5fd420, 0x1bf82: 0x6cf2d620, 0x1bf83: 0x6c6cda20, + 0x1bf84: 0x6c469420, 0x1bf85: 0x6c5e8e20, 0x1bf86: 0x6c98c620, 0x1bf87: 0x6cafb820, + 0x1bf88: 0x6c093a20, 0x1bf89: 0x6cee6220, 0x1bf8a: 0x6c021220, 0x1bf8b: 0x6c398820, + 0x1bf8c: 0x6c3b5c20, 0x1bf8d: 0x6d16bc20, 0x1bf8e: 0x6c3df420, 0x1bf8f: 0x6ca3e420, + 0x1bf90: 0x6cf58820, 0x1bf91: 0x6c566a20, 0x1bf92: 0x6d0ad420, 0x1bf93: 0x6c30dc20, + 0x1bf94: 0x6d02fe20, 0x1bf95: 0x6d31ba20, 0x1bf96: 0x6d109020, 0x1bf97: 0x6c8ba020, + 0x1bf98: 0x6cc8c220, 0x1bf99: 0x6c35ac20, 0x1bf9a: 0x6c99d620, 0x1bf9b: 0x6d2f9a20, + 0x1bf9c: 0x6c4cae20, 0x1bf9d: 0x6d339620, 0x1bf9e: 0x6c230420, 0x1bf9f: 0x6d281c20, + 0x1bfa0: 0x6d41e420, 0x1bfa1: 0x6c30de20, 0x1bfa2: 0x6cd4aa20, 0x1bfa3: 0x6d2a3c20, + 0x1bfa4: 0x6c352c20, 0x1bfa5: 0x6c858e20, 0x1bfa6: 0x6c934620, 0x1bfa7: 0x6c656620, + 0x1bfa8: 0x6c19be20, 0x1bfa9: 0x6cd9a020, 0x1bfaa: 0x6cbaa620, 0x1bfab: 0x6c3c2220, + 0x1bfac: 0x6ca3e620, 0x1bfad: 0x6cfe8620, 0x1bfae: 0x6cfa8a20, 0x1bfaf: 0x6c7a2e20, + 0x1bfb0: 0x6cb28420, 0x1bfb1: 0x6cdf1c20, 0x1bfb2: 0x6cf7d420, 0x1bfb3: 0x6d350220, + 0x1bfb4: 0x6c48da20, 0x1bfb5: 0x6cfe8c20, 0x1bfb6: 0x6c643a20, 0x1bfb7: 0x6c633420, + 0x1bfb8: 0x6c467620, 0x1bfb9: 0x6c05aa20, 0x1bfba: 0x6ca0e220, 0x1bfbb: 0x6d16f220, + 0x1bfbc: 0x6d12d820, 0x1bfbd: 0x6d12e020, 0x1bfbe: 0x6cd33c20, 0x1bfbf: 0x6ca7fa20, + // Block 0x6ff, offset 0x1bfc0 + 0x1bfc0: 0x6c08c220, 0x1bfc1: 0x6c34d820, 0x1bfc2: 0x6d149e20, 0x1bfc3: 0x6c8cb820, + 0x1bfc4: 0x6c0dd020, 0x1bfc5: 0x6ca63020, 0x1bfc6: 0x6c7e4020, 0x1bfc7: 0x6c50d820, + 0x1bfc8: 0x6c04f020, 0x1bfc9: 0x6c388620, 0x1bfca: 0x6d37a420, 0x1bfcb: 0x6c274620, + 0x1bfcc: 0x6c222c20, 0x1bfcd: 0x6d100a20, 0x1bfce: 0x6c3d4a20, 0x1bfcf: 0x6c041a20, + 0x1bfd0: 0x6ca1fe20, 0x1bfd1: 0x6c418620, 0x1bfd2: 0x6cb4d420, 0x1bfd3: 0x6cc4ba20, + 0x1bfd4: 0x6cc74220, 0x1bfd5: 0x6c995220, 0x1bfd6: 0x6cce9a20, 0x1bfd7: 0x6cd90e20, + 0x1bfd8: 0x6d30e620, 0x1bfd9: 0x6cf99620, 0x1bfda: 0x6d202a20, 0x1bfdb: 0x6ccfba20, + 0x1bfdc: 0x6c4b3020, 0x1bfdd: 0x6ceb9a20, 0x1bfde: 0x6d2cb420, 0x1bfdf: 0x6ca3ec20, + 0x1bfe0: 0x6ca8fe20, 0x1bfe1: 0x6d1e2420, 0x1bfe2: 0x6c2be420, 0x1bfe3: 0x6d359e20, + 0x1bfe4: 0x6d2bcc20, 0x1bfe5: 0x6c13cc20, 0x1bfe6: 0x6c287020, 0x1bfe7: 0x6c46f820, + 0x1bfe8: 0x6c107620, 0x1bfe9: 0x6c6fdc20, 0x1bfea: 0x6c022820, 0x1bfeb: 0x6c3e0c20, + 0x1bfec: 0x6c657020, 0x1bfed: 0x6c032e20, 0x1bfee: 0x6c34da20, 0x1bfef: 0x6c77de20, + 0x1bff0: 0x6ca3b020, 0x1bff1: 0x6d3abe20, 0x1bff2: 0x6c094820, 0x1bff3: 0x6c8efa20, + 0x1bff4: 0x6c147620, 0x1bff5: 0x6cccd020, 0x1bff6: 0x6cd89e20, 0x1bff7: 0x6c1f1820, + 0x1bff8: 0x6cadb620, 0x1bff9: 0x6cd31a20, 0x1bffa: 0x6c48dc20, 0x1bffb: 0x6d2bce20, + 0x1bffc: 0x6d119820, 0x1bffd: 0x6c195620, 0x1bffe: 0x6c6fde20, 0x1bfff: 0x6cd33e20, + // Block 0x700, offset 0x1c000 + 0x1c000: 0x6d33a620, 0x1c001: 0x6c8efc20, 0x1c002: 0x6c99de20, 0x1c003: 0x6c87da20, + 0x1c004: 0x6cc65620, 0x1c005: 0x6d2cb620, 0x1c006: 0x6d2aa020, 0x1c007: 0x6c0bec20, + 0x1c008: 0x6d2e4c20, 0x1c009: 0x6d35a020, 0x1c00a: 0x6c8f7620, 0x1c00b: 0x6c306220, + 0x1c00c: 0x6c914420, 0x1c00d: 0x6cd0ea20, 0x1c00e: 0x6c85a620, 0x1c00f: 0x6c7f9020, + 0x1c010: 0x6d1e1c20, 0x1c011: 0x6cd5ae20, 0x1c012: 0x6d09f620, 0x1c013: 0x6cd68420, + 0x1c014: 0x6cb76820, 0x1c015: 0x6d313820, 0x1c016: 0x6cb4dc20, 0x1c017: 0x6c85ca20, + 0x1c018: 0x6d14c220, 0x1c019: 0x6cfdba20, 0x1c01a: 0x6d323020, 0x1c01b: 0x6c85cc20, + 0x1c01c: 0x6ccb1a20, 0x1c01d: 0x6c484e20, 0x1c01e: 0x6c76a420, 0x1c01f: 0x6c078420, + 0x1c020: 0x6cc58e20, 0x1c021: 0x6cffde20, 0x1c022: 0x6c041c20, 0x1c023: 0x6cc59020, + 0x1c024: 0x6c0e1220, 0x1c025: 0x6d3e1620, 0x1c026: 0x6c1d9820, 0x1c027: 0x6d172c20, + 0x1c028: 0x6c22be20, 0x1c029: 0x6d063420, 0x1c02a: 0x6d399220, 0x1c02b: 0x6c666c20, + 0x1c02c: 0x6d41a820, 0x1c02d: 0x6c374a20, 0x1c02e: 0x6c378e20, 0x1c02f: 0x6d1fb820, + 0x1c030: 0x6c380c20, 0x1c031: 0x6c45e220, 0x1c032: 0x6c77a620, 0x1c033: 0x6c81ac20, + 0x1c034: 0x6d2d6a20, 0x1c035: 0x6c8aec20, 0x1c036: 0x6d19be20, 0x1c037: 0x6d104420, + 0x1c038: 0x6c50f220, 0x1c039: 0x6c449820, 0x1c03a: 0x6d172e20, 0x1c03b: 0x6cd34e20, + 0x1c03c: 0x6c43dc20, 0x1c03d: 0x6d28fc20, 0x1c03e: 0x6c943620, 0x1c03f: 0x6c3e3420, + // Block 0x701, offset 0x1c040 + 0x1c040: 0x6c6aa620, 0x1c041: 0x6c525c20, 0x1c042: 0x6c4b3e20, 0x1c043: 0x6ce21020, + 0x1c044: 0x6c49e420, 0x1c045: 0x6ceef420, 0x1c046: 0x6c7b9820, 0x1c047: 0x6cc79620, + 0x1c048: 0x6c01ac20, 0x1c049: 0x6c012020, 0x1c04a: 0x6c734a20, 0x1c04b: 0x6d14c420, + 0x1c04c: 0x6d3cf820, 0x1c04d: 0x6c7a3620, 0x1c04e: 0x6d35bc20, 0x1c04f: 0x6cbf0420, + 0x1c050: 0x6ce73020, 0x1c051: 0x6cca6c20, 0x1c052: 0x6cca6a20, 0x1c053: 0x6c586a20, + 0x1c054: 0x6c710420, 0x1c055: 0x6c6fea20, 0x1c056: 0x6d094c20, 0x1c057: 0x6c34e020, + 0x1c058: 0x6d3c7c20, 0x1c059: 0x6d20f220, 0x1c05a: 0x6d296420, + 0x1c05c: 0x6d1ba620, 0x1c05d: 0x6c6c1820, 0x1c05e: 0x6c8f6220, 0x1c05f: 0x6d2e5020, + 0x1c060: 0x6d0ade20, 0x1c061: 0x6cc52620, 0x1c062: 0x6d313a20, 0x1c063: 0x6c295e20, + 0x1c064: 0x6cb4de20, 0x1c065: 0x6cbbd820, 0x1c066: 0x6c578c20, 0x1c067: 0x6c4b4020, + 0x1c068: 0x6c67a220, 0x1c069: 0x6d3c1220, 0x1c06a: 0x6d09f820, 0x1c06b: 0x6cdd1620, + 0x1c06c: 0x6ccbe620, 0x1c06d: 0x6d314e20, 0x1c06e: 0x6c069a20, 0x1c06f: 0x6ce64020, + 0x1c070: 0x6c7df220, 0x1c071: 0x6c6e7020, 0x1c072: 0x6cb3c220, 0x1c073: 0x6c07b020, + 0x1c074: 0x6c3e4e20, 0x1c075: 0x6cc89a20, 0x1c076: 0x6ce7b620, 0x1c077: 0x6c742820, + 0x1c078: 0x6cf5ec20, 0x1c079: 0x6c80ba20, 0x1c07a: 0x6c8f0420, 0x1c07b: 0x6c3c3c20, + 0x1c07c: 0x6cb4e820, 0x1c07d: 0x6cf1d420, 0x1c07e: 0x6c756c20, 0x1c07f: 0x6c41d620, + // Block 0x702, offset 0x1c080 + 0x1c080: 0x6cdaa220, 0x1c081: 0x6c894c20, 0x1c082: 0x6cc04620, 0x1c083: 0x6ce6be20, + 0x1c084: 0x6d1fc020, 0x1c085: 0x6c99ec20, 0x1c086: 0x6c052420, 0x1c087: 0x6c906620, + 0x1c088: 0x6cae6820, 0x1c089: 0x6d3c1620, 0x1c08a: 0x6c2c4020, 0x1c08b: 0x6d078c20, + 0x1c08c: 0x6ce8a220, 0x1c08d: 0x6d2a7e20, 0x1c08e: 0x6c022a20, 0x1c08f: 0x6c481020, + 0x1c090: 0x6c097a20, 0x1c091: 0x6c2b6820, 0x1c092: 0x6c4e0020, 0x1c093: 0x6d3f0820, + 0x1c094: 0x6d33d420, 0x1c095: 0x6cc5e620, 0x1c096: 0x6c070e20, 0x1c097: 0x6c450820, + 0x1c098: 0x6c658620, 0x1c099: 0x6c591020, 0x1c09a: 0x6ced0a20, 0x1c09b: 0x6caaba20, + 0x1c09c: 0x6c634a20, 0x1c09d: 0x6ce57c20, 0x1c09e: 0x6c61ee20, 0x1c09f: 0x6cfeb220, + 0x1c0a0: 0x6c938e20, 0x1c0a1: 0x6c5ce620, 0x1c0a2: 0x6cce6820, 0x1c0a3: 0x6c133020, + 0x1c0a4: 0x6c3b6c20, 0x1c0a5: 0x6cd91a20, 0x1c0a6: 0x6c9c0220, 0x1c0a7: 0x6cf3c020, + 0x1c0a8: 0x6c83bc20, 0x1c0a9: 0x6c83be20, 0x1c0aa: 0x6c311020, 0x1c0ab: 0x6cbdd020, + 0x1c0ac: 0x6d1cea20, 0x1c0ad: 0x6cdd1820, 0x1c0ae: 0x6c708c20, 0x1c0af: 0x6ce2ea20, + 0x1c0b0: 0x6d019020, 0x1c0b1: 0x6c7da820, 0x1c0b2: 0x6d3d5020, 0x1c0b3: 0x6cd4ca20, + 0x1c0b4: 0x6c14c020, 0x1c0b5: 0x6c394220, 0x1c0b6: 0x6cefae20, 0x1c0b7: 0x6c6e7220, + 0x1c0b8: 0x6c83c020, 0x1c0b9: 0x6c0d3220, 0x1c0ba: 0x6cfa6420, 0x1c0bb: 0x6c3d1020, + 0x1c0bc: 0x6ce21c20, 0x1c0bd: 0x6d35e220, 0x1c0be: 0x6c7efa20, 0x1c0bf: 0x6c87fc20, + // Block 0x703, offset 0x1c0c0 + 0x1c0c0: 0x6c658820, 0x1c0c1: 0x6d3cfc20, 0x1c0c2: 0x6c8ce620, 0x1c0c3: 0x6c83d420, + 0x1c0c4: 0x6cb79220, 0x1c0c5: 0x6c0e2220, 0x1c0c6: 0x6c94f820, 0x1c0c7: 0x6c231620, + 0x1c0c8: 0x6cba5420, 0x1c0c9: 0x6c9dc420, 0x1c0ca: 0x6cb5e620, 0x1c0cb: 0x6cb5e820, + 0x1c0cc: 0x6c114620, 0x1c0cd: 0x6c4bf820, 0x1c0ce: 0x6c14f420, 0x1c0cf: 0x6c2a7020, + 0x1c0d0: 0x6c3a5820, 0x1c0d1: 0x6cabfe20, 0x1c0d2: 0x6c057020, 0x1c0d3: 0x6c057220, + 0x1c0d4: 0x6c5cca20, 0x1c0d5: 0x6d3f8e20, 0x1c0d6: 0x6c1a0020, 0x1c0d7: 0x6d2a4c20, + 0x1c0d8: 0x6c603820, 0x1c0d9: 0x6c861020, 0x1c0da: 0x6caea020, 0x1c0db: 0x6d233e20, + 0x1c0dc: 0x6d234020, 0x1c0dd: 0x6c481420, 0x1c0de: 0x6c75ba20, 0x1c0df: 0x6c307620, + 0x1c0e0: 0x6ce0f620, 0x1c0e1: 0x6c428020, 0x1c0e2: 0x6cee1a20, 0x1c0e3: 0x6c2c5620, + 0x1c0e4: 0x6c262a20, 0x1c0e5: 0x6c389c20, 0x1c0e6: 0x6c195c20, 0x1c0e7: 0x6d2e6220, + 0x1c0e8: 0x6cb6fe20, 0x1c0e9: 0x6d24f620, 0x1c0ea: 0x6d0d8820, 0x1c0eb: 0x6d234220, + 0x1c0ec: 0x6cc29e20, 0x1c0ed: 0x6d17a020, 0x1c0ee: 0x6ccbaa20, 0x1c0ef: 0x6cc59820, + 0x1c0f0: 0x6c20d220, 0x1c0f1: 0x6c837820, 0x1c0f2: 0x6cb4f420, 0x1c0f3: 0x6d3d0220, + 0x1c0f4: 0x6c3e7a20, 0x1c0f5: 0x6c77f820, 0x1c0f6: 0x6c7f0820, 0x1c0f7: 0x6d405220, + 0x1c0f8: 0x6d405420, 0x1c0f9: 0x6d2fb220, 0x1c0fa: 0x6c491620, 0x1c0fb: 0x6c3b2a20, + 0x1c0fc: 0x6c3b7420, 0x1c0fd: 0x6ccfe620, 0x1c0fe: 0x6cbe7c20, 0x1c0ff: 0x6ca5e420, + // Block 0x704, offset 0x1c100 + 0x1c100: 0x6ced1c20, 0x1c101: 0x6c4cc020, 0x1c102: 0x6c925420, 0x1c103: 0x6c4fc620, + 0x1c104: 0x6c6a1620, 0x1c105: 0x6d15f020, 0x1c106: 0x6c1dae20, 0x1c107: 0x6c71b620, + 0x1c108: 0x6c712220, 0x1c109: 0x6c1a0220, 0x1c10a: 0x6d423a20, 0x1c10b: 0x6c895420, + 0x1c10c: 0x6cbab820, 0x1c10d: 0x6d346020, 0x1c10e: 0x6c20d420, 0x1c10f: 0x6d0af020, + 0x1c110: 0x6c709220, 0x1c111: 0x6c06a020, 0x1c112: 0x6c684620, 0x1c113: 0x6d3d6020, + 0x1c114: 0x6d3e3a20, 0x1c115: 0x6c0d3820, 0x1c116: 0x6caea220, 0x1c117: 0x6c2fa620, + 0x1c118: 0x6c1eda20, 0x1c119: 0x6c172e20, 0x1c11a: 0x6c9b0620, 0x1c11b: 0x6c57dc20, + 0x1c11c: 0x6c659420, 0x1c11d: 0x6c4a6820, 0x1c11e: 0x6cf88820, 0x1c11f: 0x6c319c20, + 0x1c120: 0x6cba5620, 0x1c121: 0x6c2a5820, 0x1c122: 0x6c4bb420, 0x1c123: 0x6c2da020, + 0x1c124: 0x6c954620, 0x1c125: 0x6d33e020, 0x1c126: 0x6cc38220, 0x1c127: 0x6ca04420, + 0x1c128: 0x6c40b220, 0x1c129: 0x6c454820, 0x1c12a: 0x6caf1220, 0x1c12b: 0x6d2dee20, + 0x1c12c: 0x6d199420, 0x1c12d: 0x6ceb7e20, 0x1c12e: 0x6ccbac20, 0x1c12f: 0x6c349a20, + 0x1c130: 0x6d125e20, 0x1c131: 0x6c400c20, 0x1c132: 0x6cefda20, 0x1c133: 0x6cee9a20, + 0x1c134: 0x6c32c820, 0x1c135: 0x6c641a20, 0x1c136: 0x6d3f9a20, 0x1c137: 0x6c64b220, + 0x1c138: 0x6d151a20, 0x1c139: 0x6cd0ae20, 0x1c13a: 0x6cf78620, 0x1c13b: 0x6d0e8220, + 0x1c13c: 0x6d0da220, 0x1c13d: 0x6c200020, 0x1c13e: 0x6c64b420, 0x1c13f: 0x6c210c20, + // Block 0x705, offset 0x1c140 + 0x1c140: 0x6d226a20, 0x1c141: 0x6c513a20, 0x1c142: 0x6d2be020, 0x1c143: 0x6cf2fa20, + 0x1c144: 0x6cb11420, 0x1c145: 0x6c087a20, 0x1c146: 0x6d10ac20, 0x1c147: 0x6c5dd020, + 0x1c148: 0x6d05b220, 0x1c149: 0x6cc92020, 0x1c14a: 0x6d0fc620, 0x1c14b: 0x6c7e7c20, + 0x1c14c: 0x6d0caa20, 0x1c14d: 0x6c079e20, 0x1c14e: 0x6c5ac420, 0x1c14f: 0x6c7c8a20, + 0x1c150: 0x6c6bea20, 0x1c151: 0x6c7c8c20, 0x1c152: 0x6cd7f220, 0x1c153: 0x6c3c5420, + 0x1c154: 0x6d004820, 0x1c155: 0x6ceb8220, 0x1c156: 0x6d35e420, 0x1c157: 0x6c668c20, + 0x1c158: 0x6ca29a20, 0x1c159: 0x6c999020, 0x1c15a: 0x6c1f9420, 0x1c15b: 0x6c569e20, + 0x1c15c: 0x6c556c20, 0x1c15d: 0x6c890420, 0x1c15e: 0x6c837a20, 0x1c15f: 0x6ce67e20, + 0x1c160: 0x6ca40220, 0x1c161: 0x6d215220, 0x1c162: 0x6d1f4620, 0x1c163: 0x6c9a0820, + 0x1c164: 0x6cd96620, 0x1c165: 0x6d089a20, 0x1c166: 0x6d089c20, 0x1c167: 0x6d101e20, + 0x1c168: 0x6d316620, 0x1c169: 0x6cb11620, 0x1c16a: 0x6d12fe20, 0x1c16b: 0x6c605220, + 0x1c16c: 0x6c6ae620, 0x1c16d: 0x6d130020, 0x1c16e: 0x6c1ee020, 0x1c16f: 0x6c33fa20, + 0x1c170: 0x6d212820, 0x1c171: 0x6d408a20, 0x1c172: 0x6cee9c20, 0x1c173: 0x6c9a0a20, + 0x1c174: 0x6ce40220, 0x1c175: 0x6c603a20, 0x1c176: 0x6c6ae820, 0x1c177: 0x6c766220, + 0x1c178: 0x6cbfb420, 0x1c179: 0x6d1c7e20, 0x1c17a: 0x6cc77a20, 0x1c17b: 0x6c59d020, + 0x1c17c: 0x6c909620, 0x1c17d: 0x6c822220, 0x1c17e: 0x6cc38420, 0x1c17f: 0x6cfe7620, + // Block 0x706, offset 0x1c180 + 0x1c180: 0x6cb23c20, 0x1c181: 0x6cd41820, 0x1c182: 0x6c414420, 0x1c183: 0x6cdfe820, + 0x1c184: 0x6c802e20, 0x1c185: 0x6cf15620, 0x1c186: 0x6d215420, 0x1c187: 0x6c192c20, + 0x1c188: 0x6c935620, 0x1c189: 0x6c71be20, 0x1c18a: 0x6cd0cc20, 0x1c18b: 0x6c1f9620, + 0x1c18c: 0x6cb0ea20, 0x1c18d: 0x6d01d420, 0x1c18e: 0x6c642420, 0x1c18f: 0x6d182420, + 0x1c190: 0x6d2e0220, 0x1c191: 0x6c3ec020, 0x1c192: 0x6cab0620, 0x1c193: 0x6c9d6620, + 0x1c194: 0x6c80c220, 0x1c195: 0x6cc69020, 0x1c196: 0x6c47ae20, 0x1c197: 0x6c66a820, + 0x1c198: 0x6c71c020, 0x1c199: 0x6cddf220, 0x1c19a: 0x6d11c020, 0x1c19b: 0x6d317a20, + 0x1c19c: 0x6c055220, 0x1c19d: 0x6ccc0820, 0x1c19e: 0x6d259220, 0x1c19f: 0x6d3f2020, + 0x1c1a0: 0x6ca01020, 0x1c1a1: 0x6cdae620, 0x1c1a2: 0x6c644c20, 0x1c1a3: 0x6d112020, + 0x1c1a4: 0x6c6b0a20, 0x1c1a5: 0x6c5a7420, 0x1c1a6: 0x6c422a20, 0x1c1a7: 0x6c3a6220, + 0x1c1a8: 0x6d2cd020, 0x1c1a9: 0x6cb9ae20, 0x1c1aa: 0x6c96ce20, 0x1c1ab: 0x6cdcf420, + 0x1c1ac: 0x6d259420, 0x1c1ad: 0x6d01d620, 0x1c1ae: 0x6cc69220, 0x1c1af: 0x6cd27c20, + 0x1c1b0: 0x6d33fe20, 0x1c1b1: 0x6c24de20, 0x1c1b2: 0x6d27ba20, 0x1c1b3: 0x6ce68020, + 0x1c1b4: 0x6c8e7a20, 0x1c1b5: 0x6cc68620, 0x1c1b6: 0x6ce10e20, 0x1c1b7: 0x6cc3de20, + 0x1c1b8: 0x6d2cfa20, 0x1c1b9: 0x6cd80220, 0x1c1ba: 0x6cd17420, 0x1c1bb: 0x6cde7020, + 0x1c1bc: 0x6c781420, 0x1c1bd: 0x6cf66c20, 0x1c1be: 0x6c479c20, 0x1c1bf: 0x6cb51020, + // Block 0x707, offset 0x1c1c0 + 0x1c1c0: 0x6c431020, 0x1c1c1: 0x6c431220, 0x1c1c2: 0x6cdcdc20, 0x1c1c3: 0x6cac6620, + 0x1c1c4: 0x6ce1da20, 0x1c1c5: 0x6c441220, 0x1c1c6: 0x6d0a1a20, 0x1c1c7: 0x6c2cd420, + 0x1c1c8: 0x6caa2420, 0x1c1c9: 0x6c606420, 0x1c1ca: 0x6cd78c20, 0x1c1cb: 0x6c46c220, + 0x1c1cc: 0x6c20d820, 0x1c1cd: 0x6cbacc20, 0x1c1ce: 0x6c13ec20, 0x1c1cf: 0x6cba1620, + 0x1c1d0: 0x6c57ec20, 0x1c1d1: 0x6c9a1820, 0x1c1d2: 0x6d070a20, 0x1c1d3: 0x6c42ac20, + 0x1c1d4: 0x6c42cc20, 0x1c1d5: 0x6d3d8020, 0x1c1d6: 0x6ceb3620, 0x1c1d7: 0x6cbc7420, + 0x1c1d8: 0x6d105c20, 0x1c1d9: 0x6c2cd620, 0x1c1da: 0x6c642620, 0x1c1db: 0x6c76e220, + 0x1c1dc: 0x6d41be20, 0x1c1dd: 0x6c2a5a20, 0x1c1de: 0x6c907220, 0x1c1df: 0x6c0d4420, + 0x1c1e0: 0x6d39ba20, 0x1c1e1: 0x6ccaa420, 0x1c1e2: 0x6cf79c20, 0x1c1e3: 0x6c5f1420, + 0x1c1e4: 0x6c882220, 0x1c1e5: 0x6c5c1620, 0x1c1e6: 0x6d1da420, 0x1c1e7: 0x6cba7420, + 0x1c1e8: 0x6c4cc220, 0x1c1e9: 0x6c414620, 0x1c1ea: 0x6c415020, 0x1c1eb: 0x6ce95820, + 0x1c1ec: 0x6c57bc20, 0x1c1ed: 0x6cb52020, 0x1c1ee: 0x6ccbae20, 0x1c1ef: 0x6c24e220, + 0x1c1f0: 0x6caeb220, 0x1c1f1: 0x6d1fe420, 0x1c1f2: 0x6c559020, 0x1c1f3: 0x6c67b620, + 0x1c1f4: 0x6c56be20, 0x1c1f5: 0x6c594a20, 0x1c1f6: 0x6c4b6820, 0x1c1f7: 0x6ca85e20, + 0x1c1f8: 0x6d185220, 0x1c1f9: 0x6c42d820, 0x1c1fa: 0x6c774420, 0x1c1fb: 0x6c4a8620, + 0x1c1fc: 0x6c4a8820, 0x1c1fd: 0x6c128a20, 0x1c1fe: 0x6c97fa20, 0x1c1ff: 0x6c6cac20, + // Block 0x708, offset 0x1c200 + 0x1c200: 0x6c2b4020, 0x1c201: 0x6d3c2220, 0x1c202: 0x6c822620, 0x1c203: 0x6c810a20, + 0x1c204: 0x6c18dc20, 0x1c205: 0x6c233a20, 0x1c206: 0x6c841820, 0x1c207: 0x6d04e220, + 0x1c208: 0x6cbe8620, 0x1c209: 0x6cd6da20, 0x1c20a: 0x6c38b220, 0x1c20b: 0x6ce7c220, + 0x1c20c: 0x6c499e20, 0x1c20d: 0x6d2ae820, 0x1c20e: 0x6cdafc20, 0x1c20f: 0x6c82d020, + 0x1c210: 0x6c91d220, 0x1c211: 0x6c896620, 0x1c212: 0x6c9d7820, 0x1c213: 0x6c90b020, + 0x1c214: 0x6c177420, 0x1c215: 0x6cdafe20, 0x1c216: 0x6c782220, 0x1c217: 0x6c1e6620, + 0x1c218: 0x6ce12020, 0x1c219: 0x6c0c1620, 0x1c21a: 0x6c92a220, 0x1c21b: 0x6c6f8420, + 0x1c21c: 0x6d30fc20, 0x1c21d: 0x6d2bf620, 0x1c21e: 0x6cd50020, 0x1c21f: 0x6d2ed620, + 0x1c220: 0x6c977020, 0x1c221: 0x6ca06a20, 0x1c222: 0x6ca7a820, 0x1c223: 0x6d106a20, + 0x1c224: 0x6ce59820, 0x1c225: 0x6caeb420, 0x1c226: 0x6d3b1e20, 0x1c227: 0x6ccc0e20, + 0x1c228: 0x6cf6c020, 0x1c229: 0x6cc31020, 0x1c22a: 0x6c526c20, 0x1c22b: 0x6c64ce20, + 0x1c22c: 0x6c233c20, 0x1c22d: 0x6c630e20, 0x1c22e: 0x6d0f3a20, 0x1c22f: 0x6cbb1820, + 0x1c230: 0x6d098820, 0x1c231: 0x6d1be420, 0x1c232: 0x6c37de20, 0x1c233: 0x6d0a3c20, + 0x1c234: 0x6d349820, 0x1c235: 0x6cbbf620, 0x1c236: 0x6d417c20, 0x1c237: 0x6c23b420, + 0x1c238: 0x6cb49620, 0x1c239: 0x6cd60a20, 0x1c23a: 0x6c57ae20, 0x1c23b: 0x6c7d1e20, + 0x1c23c: 0x6d319020, 0x1c23d: 0x6d41f220, 0x1c23e: 0x6d26ec20, 0x1c23f: 0x6ccdac20, + // Block 0x709, offset 0x1c240 + 0x1c240: 0x6cf6c420, 0x1c241: 0x6c211420, 0x1c242: 0x6c2d8020, 0x1c243: 0x6c382620, + 0x1c244: 0x6c41e620, 0x1c245: 0x6ca07620, 0x1c246: 0x6cf47a20, 0x1c247: 0x6cbbaa20, + 0x1c248: 0x6cc52c20, 0x1c249: 0x6c8c6020, 0x1c24a: 0x6c8e9620, 0x1c24b: 0x6cbbf820, + 0x1c24c: 0x6cfd0c20, 0x1c24d: 0x6cc90820, 0x1c24e: 0x6c38ba20, 0x1c24f: 0x6d2e1420, + 0x1c250: 0x6ceb4820, 0x1c251: 0x6c81bc20, 0x1c252: 0x6d27c620, 0x1c253: 0x6cd75a20, + 0x1c254: 0x6c33ae20, 0x1c255: 0x6c199220, 0x1c256: 0x6ce13220, 0x1c257: 0x6c9b3820, + 0x1c258: 0x6c715a20, 0x1c259: 0x6c1a4220, 0x1c25a: 0x6cdb3020, 0x1c25b: 0x6c74ba20, + 0x1c25c: 0x6c74bc20, 0x1c25d: 0x6c2d8220, 0x1c25e: 0x6c5c3020, 0x1c25f: 0x6c5f3020, + 0x1c260: 0x6caae020, 0x1c261: 0x6cfe4e20, 0x1c262: 0x6ceb8e20, 0x1c263: 0x6ca94620, + 0x1c264: 0x6cc8b020, 0x1c265: 0x6d39c420, 0x1c266: 0x6ce78620, 0x1c267: 0x6d2b8e20, + 0x1c268: 0x6c3b9420, 0x1c269: 0x6cbf6020, 0x1c26a: 0x6cc4d220, 0x1c26b: 0x6c526e20, + 0x1c26c: 0x6cb9c820, 0x1c26d: 0x6c472e20, 0x1c26e: 0x6c8f1a20, 0x1c26f: 0x6c81e020, + 0x1c270: 0x6c42dc20, 0x1c271: 0x6c1eae20, 0x1c272: 0x6cf94620, 0x1c273: 0x6cd18820, + 0x1c274: 0x6d3f6c20, 0x1c275: 0x6cca6820, 0x1c276: 0x6c60a620, 0x1c277: 0x6c30c620, + 0x1c278: 0x6c6eca20, 0x1c279: 0x6c91dc20, 0x1c27a: 0x6c673c20, 0x1c27b: 0x6c1f9820, + 0x1c27c: 0x6d25aa20, 0x1c27d: 0x6cde9c20, 0x1c27e: 0x6cd50c20, 0x1c27f: 0x6c678220, + // Block 0x70a, offset 0x1c280 + 0x1c280: 0x6ce01820, 0x1c281: 0x6c8c3820, 0x1c282: 0x6ca9cc20, 0x1c283: 0x6d1b0620, + 0x1c284: 0x6cf7a820, 0x1c285: 0x6cdc8020, 0x1c286: 0x6ccd1020, 0x1c287: 0x6d41d020, + 0x1c288: 0x6d082a20, 0x1c289: 0x6c199a20, 0x1c28a: 0x6c423420, 0x1c28b: 0x6c716220, + 0x1c28c: 0x6d41d820, 0x1c28d: 0x6d18c620, 0x1c28e: 0x6cbda220, 0x1c28f: 0x6cb49c20, + 0x1c290: 0x6d0cd620, 0x1c291: 0x6c826020, 0x1c292: 0x6c3c6a20, 0x1c293: 0x6c5b6c20, + 0x1c294: 0x6c299220, 0x1c295: 0x6c629620, 0x1c296: 0x6cdc7020, 0x1c297: 0x6c0ff820, + 0x1c298: 0x6cb2d420, 0x1c299: 0x6c1a4420, 0x1c29a: 0x6c1ef020, 0x1c29b: 0x6d3b5a20, + 0x1c29c: 0x6c4b7c20, 0x1c29d: 0x6c60aa20, 0x1c29e: 0x6c6ba020, 0x1c29f: 0x6c643020, + 0x1c2a0: 0x6cbe8e20, 0x1c2a1: 0x6d2d2020, 0x1c2a2: 0x6c65e020, 0x1c2a3: 0x6cbb2820, + 0x1c2a4: 0x6c2a3420, 0x1c2a5: 0x6d161a20, 0x1c2a6: 0x6c0c8220, 0x1c2a7: 0x6cd93a20, + 0x1c2a8: 0x6ccefe20, 0x1c2a9: 0x6c8c3a20, 0x1c2aa: 0x6c87e420, 0x1c2ab: 0x6c140e20, + 0x1c2ac: 0x6c9b5c20, 0x1c2ad: 0x6d1aa020, 0x1c2ae: 0x6ce24820, 0x1c2af: 0x6cdf4e20, + 0x1c2b0: 0x6c9de020, 0x1c2b1: 0x6cb67020, 0x1c2b2: 0x6ce96820, 0x1c2b3: 0x6c0d5c20, + 0x1c2b4: 0x6c5e0820, 0x1c2b5: 0x6c62aa20, 0x1c2b6: 0x6cb93420, 0x1c2b7: 0x6ca65820, + 0x1c2b8: 0x6ca92a20, 0x1c2b9: 0x6d142220, 0x1c2ba: 0x6c432a20, 0x1c2bb: 0x6c76f620, + 0x1c2bc: 0x6d1b9220, 0x1c2bd: 0x6caa2c20, 0x1c2be: 0x6cbeba20, 0x1c2bf: 0x6d0de620, + // Block 0x70b, offset 0x1c2c0 + 0x1c2c0: 0x6cb67220, 0x1c2c1: 0x6c9d9e20, 0x1c2c2: 0x6d2fe820, 0x1c2c3: 0x6c4b8820, + 0x1c2c4: 0x6c212220, 0x1c2c5: 0x6c5f6a20, 0x1c2c6: 0x6c7ca420, 0x1c2c7: 0x6cb33c20, + 0x1c2c8: 0x6c2af020, 0x1c2c9: 0x6c1eba20, 0x1c2ca: 0x6c449020, 0x1c2cb: 0x6c9de420, + 0x1c2cc: 0x6d1ec220, 0x1c2cd: 0x6d373e20, 0x1c2ce: 0x6c5a6620, 0x1c2cf: 0x6cb93e20, + 0x1c2d0: 0x6c82f420, 0x1c2d1: 0x6c827020, 0x1c2d2: 0x6cc9a820, 0x1c2d3: 0x6c91f220, + 0x1c2d4: 0x6c86cc20, 0x1c2d5: 0x6c24a220, 0x1c2d6: 0x6c941220, 0x1c2d7: 0x6c9efc20, + 0x1c2d8: 0x6c5c7a20, 0x1c2d9: 0x6cab5c20, 0x1c2da: 0x6c916220, 0x1c2db: 0x6d370620, + 0x1c2dc: 0x6c42ea20, 0x1c2dd: 0x6c31d020, 0x1c2de: 0x6d25c620, 0x1c2df: 0x6c86f620, + 0x1c2e0: 0x6c3ae820, 0x1c2e1: 0x6d3dba20, 0x1c2e2: 0x6cda3420, 0x1c2e3: 0x6c886020, + 0x1c2e4: 0x6c681c20, 0x1c2e5: 0x6c1ec420, 0x1c2e6: 0x6cbeec20, 0x1c2e7: 0x6d39e020, + 0x1c2e8: 0x6c918020, 0x1c2e9: 0x6d0cfc20, 0x1c2ea: 0x6c871a20, 0x1c2eb: 0x6d39de20, + 0x1c2ec: 0x6c193e20, 0x1c2ed: 0x6c6b5a20, 0x1c2ee: 0x6c36d820, 0x1c2ef: 0x6cda6820, + 0x1c2f0: 0x6c580020, 0x1c2f1: 0x6ca8a220, 0x1c2f2: 0x6d244e20, 0x1c2f3: 0x6c8fdc20, + 0x1c2f4: 0x6c7f7420, 0x1c2f5: 0x6c69f020, 0x1c2f6: 0x6cfc4620, 0x1c2f7: 0x6c4aa820, + 0x1c2f8: 0x6c71de20, 0x1c2f9: 0x6cff4820, 0x1c2fa: 0x6c8d9a20, 0x1c2fb: 0x6d1c2a20, + 0x1c2fc: 0x6c653c20, 0x1c2fd: 0x6d1b2420, 0x1c2fe: 0x6d1f9620, 0x1c2ff: 0x6d1cc420, + // Block 0x70c, offset 0x1c300 + 0x1c300: 0x6cfd9a20, 0x1c301: 0x6ca9e020, 0x1c302: 0x6c0fb620, 0x1c303: 0x6c156020, + 0x1c304: 0x6c7ff820, 0x1c305: 0x6c71e220, 0x1c306: 0x6cd6b220, 0x1c307: 0x6ccf9020, + 0x1c308: 0x6cef7420, 0x1c309: 0x6c23cc20, 0x1c30a: 0x6cc33020, 0x1c30b: 0x6cc20620, + 0x1c30c: 0x6c126220, 0x1c30d: 0x6c704820, 0x1c30e: 0x6d247a20, 0x1c30f: 0x6c957e20, + 0x1c310: 0x6c878a20, 0x1c311: 0x6c24a820, 0x1c312: 0x6c945c20, 0x1c313: 0x6c294420, + 0x1c314: 0x6c752820, 0x1c315: 0x6d0f3e20, 0x1c316: 0x6c806420, 0x1c317: 0x6c800e20, + 0x1c318: 0x6d3a4620, 0x1c319: 0x6c82a220, 0x1c31a: 0x6c855420, 0x1c31b: 0x6c03e020, + 0x1c31c: 0x6ca46620, 0x1c31d: 0x6d249220, 0x1c31e: 0x6c8dd820, 0x1c31f: 0x6c4a3020, + 0x1c320: 0x6cba3820, 0x1c321: 0x6c22aa20, 0x1c322: 0x6c596a20, 0x1c323: 0x6d02b620, + 0x1c324: 0x6d20b820, 0x1c325: 0x6d16be20, 0x1c326: 0x6cb8b220, 0x1c327: 0x6cab3020, + 0x1c328: 0x6d057820, 0x1c329: 0x6c173c20, 0x1c32a: 0x6c1f1a20, 0x1c32b: 0x6cb78020, + 0x1c32c: 0x6c768220, 0x1c32d: 0x6d173020, 0x1c32e: 0x6c741420, 0x1c32f: 0x6cf87020, + 0x1c330: 0x6d06a420, 0x1c331: 0x6c509820, 0x1c332: 0x6d231420, 0x1c333: 0x6c7cf220, + 0x1c334: 0x6c80ac20, 0x1c335: 0x6c7b6220, 0x1c336: 0x6cd77c20, 0x1c337: 0x6cf5ee20, + 0x1c338: 0x6c002220, 0x1c339: 0x6d13f420, 0x1c33a: 0x6cb4f620, 0x1c33b: 0x6c1f9e20, + 0x1c33c: 0x6c1ba620, 0x1c33d: 0x6cbd3020, 0x1c33e: 0x6c7b6620, 0x1c33f: 0x6c76d420, + // Block 0x70d, offset 0x1c340 + 0x1c340: 0x6c7b6820, 0x1c341: 0x6c76dc20, 0x1c342: 0x6c202220, 0x1c343: 0x6ccc5a20, + 0x1c344: 0x6c485a20, 0x1c345: 0x6d19ea20, 0x1c346: 0x6d02de20, 0x1c347: 0x6d004a20, + 0x1c348: 0x6d215620, 0x1c349: 0x6cba6820, 0x1c34a: 0x6cfeec20, 0x1c34b: 0x6d131620, + 0x1c34c: 0x6c43a020, 0x1c34d: 0x6cf37420, 0x1c34e: 0x6ce0a820, 0x1c34f: 0x6c6d3e20, + 0x1c350: 0x6cab4820, 0x1c351: 0x6c54f820, 0x1c352: 0x6ce40e20, 0x1c353: 0x6c582c20, + 0x1c354: 0x6d05d420, 0x1c355: 0x6cae3820, 0x1c356: 0x6cf81020, 0x1c357: 0x6d000820, + 0x1c358: 0x6c1fa220, 0x1c359: 0x6ccf7820, 0x1c35a: 0x6ccdae20, 0x1c35b: 0x6c4dbe20, + 0x1c35c: 0x6c1f7e20, 0x1c35d: 0x6d18c820, 0x1c35e: 0x6c36c420, 0x1c35f: 0x6d21b420, + 0x1c360: 0x6c21e220, 0x1c361: 0x6c596e20, 0x1c362: 0x6d34cc20, 0x1c363: 0x6d333620, + 0x1c364: 0x6c228a20, 0x1c365: 0x6c105e20, 0x1c366: 0x6cf42c20, 0x1c367: 0x6cb58420, + 0x1c368: 0x6c106e20, 0x1c369: 0x6c107020, 0x1c36a: 0x6cec4e20, 0x1c36b: 0x6c721220, + 0x1c36c: 0x6cb97e20, 0x1c36d: 0x6c1b1620, 0x1c36e: 0x6ccb2a20, 0x1c36f: 0x6c1ba820, + 0x1c370: 0x6ccb3620, 0x1c371: 0x6d37fa20, 0x1c372: 0x6cdc4620, 0x1c373: 0x6cdc4820, + 0x1c374: 0x6c864c20, 0x1c375: 0x6c263420, 0x1c376: 0x6d218220, 0x1c377: 0x6c867c20, + 0x1c378: 0x6c4a9a20, 0x1c379: 0x6c271220, 0x1c37a: 0x6c35ca20, 0x1c37b: 0x6cd86c20, + 0x1c37c: 0x6c646420, 0x1c37d: 0x6d301c20, 0x1c37e: 0x6ca0cc20, 0x1c37f: 0x6ca0ce20, + // Block 0x70e, offset 0x1c380 + 0x1c380: 0x6d109220, 0x1c381: 0x6ca0d020, 0x1c382: 0x6c242020, 0x1c383: 0x6d0f5020, + 0x1c384: 0x6ce4da20, 0x1c385: 0x6cd0ee20, 0x1c386: 0x6c274820, 0x1c387: 0x6cce0020, + 0x1c388: 0x6d06a620, 0x1c389: 0x6d0a7c20, 0x1c38a: 0x6cd4ba20, 0x1c38b: 0x6c118c20, + 0x1c38c: 0x6c742a20, 0x1c38d: 0x6cb19420, 0x1c38e: 0x6cb85c20, 0x1c38f: 0x6cc04820, + 0x1c390: 0x6cdaa420, 0x1c391: 0x6cbe7820, 0x1c392: 0x6d27e620, 0x1c393: 0x6c88ee20, + 0x1c394: 0x6d17a220, 0x1c395: 0x6c3d2a20, 0x1c396: 0x6d346220, 0x1c397: 0x6d12f220, + 0x1c398: 0x6c119620, 0x1c399: 0x6c5cce20, 0x1c39a: 0x6c27e020, 0x1c39b: 0x6c603c20, + 0x1c39c: 0x6c2ebe20, 0x1c39d: 0x6d317c20, 0x1c39e: 0x6d27f220, 0x1c39f: 0x6cf15820, + 0x1c3a0: 0x6c1e4820, 0x1c3a1: 0x6c0d8220, 0x1c3a2: 0x6ce41220, 0x1c3a3: 0x6c6d4020, + 0x1c3a4: 0x6cce1620, 0x1c3a5: 0x6d1a9220, 0x1c3a6: 0x6c2dda20, 0x1c3a7: 0x6c702220, + 0x1c3a8: 0x6c5c3220, 0x1c3a9: 0x6c24b020, 0x1c3aa: 0x6d189820, 0x1c3ab: 0x6c27fc20, + 0x1c3ac: 0x6c327e20, 0x1c3ad: 0x6c678420, 0x1c3ae: 0x6c892020, 0x1c3af: 0x6c0d8c20, + 0x1c3b0: 0x6c31d220, 0x1c3b1: 0x6c674020, 0x1c3b2: 0x6c653e20, 0x1c3b3: 0x6cd49820, + 0x1c3b4: 0x6cab3220, 0x1c3b5: 0x6c32b620, 0x1c3b6: 0x6d3ac020, 0x1c3b7: 0x6d19c020, + 0x1c3b8: 0x6cbec820, 0x1c3b9: 0x6d175e20, 0x1c3ba: 0x6ccbda20, 0x1c3bb: 0x6cbc4020, + 0x1c3bc: 0x6c784e20, 0x1c3bd: 0x6cff8a20, 0x1c3be: 0x6d0a8e20, 0x1c3bf: 0x6c2d5e20, + // Block 0x70f, offset 0x1c3c0 + 0x1c3c0: 0x6c5b5620, 0x1c3c1: 0x6c5b5820, 0x1c3c2: 0x6c47a020, 0x1c3c3: 0x6cbb9020, + 0x1c3c4: 0x6c5f0620, 0x1c3c5: 0x6d185420, 0x1c3c6: 0x6cab4a20, 0x1c3c7: 0x6c5b6220, + 0x1c3c8: 0x6c32da20, 0x1c3c9: 0x6d142420, 0x1c3ca: 0x6cff5c20, 0x1c3cb: 0x6cf39c20, + 0x1c3cc: 0x6c497220, 0x1c3cd: 0x6ca22020, 0x1c3ce: 0x6c9a4820, 0x1c3cf: 0x6c9a4a20, + 0x1c3d0: 0x6c006020, 0x1c3d1: 0x6c6b9420, 0x1c3d2: 0x6c318820, 0x1c3d3: 0x6d239020, + 0x1c3d4: 0x6c08ac20, 0x1c3d5: 0x6c090a20, 0x1c3d6: 0x6c094e20, 0x1c3d7: 0x6cafc220, + 0x1c3d8: 0x6cafc420, 0x1c3d9: 0x6c095e20, 0x1c3da: 0x6c152c20, 0x1c3db: 0x6c98c020, + 0x1c3dc: 0x6c4fbc20, 0x1c3dd: 0x6c111a20, 0x1c3de: 0x6cafba20, 0x1c3df: 0x6c8b9020, + 0x1c3e0: 0x6c633820, 0x1c3e1: 0x6d2d6420, 0x1c3e2: 0x6cc9c020, 0x1c3e3: 0x6ca27620, + 0x1c3e4: 0x6ceb9e20, 0x1c3e5: 0x6d09fc20, 0x1c3e6: 0x6c379020, 0x1c3e7: 0x6cc66620, + 0x1c3e8: 0x6cfbfa20, 0x1c3e9: 0x6c710620, 0x1c3ea: 0x6ca21020, 0x1c3eb: 0x6c4fc420, + 0x1c3ec: 0x6cc04a20, 0x1c3ed: 0x6c311220, 0x1c3ee: 0x6ccbea20, 0x1c3ef: 0x6ce06020, + 0x1c3f0: 0x6cadd620, 0x1c3f1: 0x6c712420, 0x1c3f2: 0x6c343020, 0x1c3f3: 0x6c253c20, + 0x1c3f4: 0x6c087220, 0x1c3f5: 0x6cca0020, 0x1c3f6: 0x6cca6420, 0x1c3f7: 0x6c999420, + 0x1c3f8: 0x6cc9c820, 0x1c3f9: 0x6cd4ea20, 0x1c3fa: 0x6d208e20, 0x1c3fb: 0x6cebac20, + 0x1c3fc: 0x6c513c20, 0x1c3fd: 0x6c668e20, 0x1c3fe: 0x6cde7420, 0x1c3ff: 0x6cca0620, + // Block 0x710, offset 0x1c400 + 0x1c400: 0x6c935e20, 0x1c401: 0x6ca21620, 0x1c402: 0x6c98fa20, 0x1c403: 0x6ce78820, + 0x1c404: 0x6cc72220, 0x1c405: 0x6c16f820, 0x1c406: 0x6cb49820, 0x1c407: 0x6c934e20, + 0x1c408: 0x6d2da820, 0x1c409: 0x6ccafc20, 0x1c40a: 0x6d2daa20, 0x1c40b: 0x6c9b5e20, + 0x1c40c: 0x6c91f420, 0x1c40d: 0x6cc20820, 0x1c40e: 0x6c2f2220, 0x1c40f: 0x6cd2e420, + 0x1c410: 0x6c2b0a20, 0x1c411: 0x6c9f2620, 0x1c412: 0x6c73d220, 0x1c413: 0x6c983620, + 0x1c414: 0x6cb72620, 0x1c415: 0x6cb1c420, 0x1c416: 0x6ca39220, 0x1c417: 0x6cb72e20, + 0x1c418: 0x6c29bc20, 0x1c419: 0x6cfa7a20, 0x1c41a: 0x6c1fde20, 0x1c41b: 0x6c3b1a20, + 0x1c41c: 0x6d0f8820, 0x1c41d: 0x6ca58620, 0x1c41e: 0x6c0d9a20, 0x1c41f: 0x6c3e1020, + 0x1c420: 0x6ccfbc20, 0x1c421: 0x6c2fe620, 0x1c422: 0x6cbe3420, 0x1c423: 0x6cb76a20, + 0x1c424: 0x6d19c220, 0x1c425: 0x6cf5c020, 0x1c426: 0x6c4d6020, 0x1c427: 0x6d100e20, + 0x1c428: 0x6c012220, 0x1c429: 0x6d0b8e20, 0x1c42a: 0x6c78a620, 0x1c42b: 0x6cbe4420, + 0x1c42c: 0x6d0bb020, 0x1c42d: 0x6c300220, 0x1c42e: 0x6c288a20, 0x1c42f: 0x6c93e020, + 0x1c430: 0x6cbe7e20, 0x1c431: 0x6d102620, 0x1c432: 0x6d275620, 0x1c433: 0x6d275c20, + 0x1c434: 0x6cd70220, 0x1c435: 0x6cd73c20, 0x1c436: 0x6d331620, 0x1c437: 0x6c0da420, + 0x1c438: 0x6d1e0c20, 0x1c439: 0x6c294e20, 0x1c43a: 0x6cd73e20, 0x1c43b: 0x6c821020, + 0x1c43c: 0x6ca67820, 0x1c43d: 0x6cea7620, 0x1c43e: 0x6c391420, 0x1c43f: 0x6c4abc20, + // Block 0x711, offset 0x1c440 + 0x1c440: 0x6ce62620, 0x1c441: 0x6d338220, 0x1c442: 0x6cc00020, 0x1c443: 0x6c0d1e20, + 0x1c444: 0x6d2b3620, 0x1c445: 0x6c9dfc20, 0x1c446: 0x6c248c20, 0x1c447: 0x6c5b8820, + 0x1c448: 0x6c2dac20, 0x1c449: 0x6c4e7c20, 0x1c44a: 0x6c142c20, 0x1c44b: 0x6d3d2020, + 0x1c44c: 0x6c202a20, 0x1c44d: 0x6cecba20, 0x1c44e: 0x6c391c20, 0x1c44f: 0x6c26e820, + 0x1c450: 0x6cf57220, 0x1c451: 0x6cea9c20, 0x1c452: 0x6c982a20, 0x1c453: 0x6cbffa20, + 0x1c454: 0x6cb73020, 0x1c455: 0x6ccd6a20, 0x1c456: 0x6cb24220, 0x1c457: 0x6c4e8620, + 0x1c458: 0x6cb89a20, 0x1c459: 0x6cf34620, 0x1c45a: 0x6cf34820, 0x1c45b: 0x6d0a6620, + 0x1c45c: 0x6cd87a20, 0x1c45d: 0x6cc7f420, 0x1c45e: 0x6c45d420, 0x1c45f: 0x6c674220, + 0x1c460: 0x6c1af620, 0x1c461: 0x6cf34a20, 0x1c462: 0x6ce92c20, 0x1c463: 0x6c704220, + 0x1c464: 0x6ce0b820, 0x1c465: 0x6d338c20, 0x1c466: 0x6d34e820, 0x1c467: 0x6cb8a820, + 0x1c468: 0x6c9d1c20, 0x1c469: 0x6c475820, 0x1c46a: 0x6cedc420, 0x1c46b: 0x6c6e0e20, + 0x1c46c: 0x6c6e1020, 0x1c46d: 0x6cc8be20, 0x1c46e: 0x6c755a20, 0x1c46f: 0x6c52f820, + 0x1c470: 0x6cdf6020, 0x1c471: 0x6cc34e20, 0x1c472: 0x6c5fcc20, 0x1c473: 0x6c0b7020, + 0x1c474: 0x6c0b7220, 0x1c475: 0x6c420e20, 0x1c476: 0x6cf1fe20, 0x1c477: 0x6d378820, + 0x1c478: 0x6c398420, 0x1c479: 0x6d045620, 0x1c47a: 0x6c73e020, 0x1c47b: 0x6c561020, + 0x1c47c: 0x6ca96820, 0x1c47d: 0x6cb73820, 0x1c47e: 0x6c3b5620, 0x1c47f: 0x6d067220, + // Block 0x712, offset 0x1c480 + 0x1c480: 0x6d068420, 0x1c481: 0x6cbe0620, 0x1c482: 0x6d146220, 0x1c483: 0x6cf2ce20, + 0x1c484: 0x6d278020, 0x1c485: 0x6d253e20, 0x1c486: 0x6c4f9020, 0x1c487: 0x6d0d3e20, + 0x1c488: 0x6c189c20, 0x1c489: 0x6c189e20, 0x1c48a: 0x6c286820, 0x1c48b: 0x6d1eec20, + 0x1c48c: 0x6c33da20, 0x1c48d: 0x6c565820, 0x1c48e: 0x6c5d9c20, 0x1c48f: 0x6cb4cc20, + 0x1c490: 0x6ca26820, 0x1c491: 0x6caa7620, 0x1c492: 0x6c99d220, 0x1c493: 0x6c268220, + 0x1c494: 0x6c9e0020, 0x1c495: 0x6c9d1e20, 0x1c496: 0x6c1cae20, 0x1c497: 0x6cacce20, + 0x1c498: 0x6c08bc20, 0x1c499: 0x6ccbc420, 0x1c49a: 0x6d34ea20, 0x1c49b: 0x6cae0220, + 0x1c49c: 0x6cac9e20, 0x1c49d: 0x6d3c7620, 0x1c49e: 0x6d288420, 0x1c49f: 0x6c463820, + 0x1c4a0: 0x6c8e4220, 0x1c4a1: 0x6c99d420, 0x1c4a2: 0x6d2aa620, 0x1c4a3: 0x6c3c1c20, + 0x1c4a4: 0x6cab2e20, 0x1c4a5: 0x6c858020, 0x1c4a6: 0x6c94da20, 0x1c4a7: 0x6c122220, + 0x1c4a8: 0x6c3c1e20, 0x1c4a9: 0x6ceee020, 0x1c4aa: 0x6c565a20, 0x1c4ab: 0x6ca0d220, + 0x1c4ac: 0x6c9a7820, 0x1c4ad: 0x6cd59e20, 0x1c4ae: 0x6c71a620, 0x1c4af: 0x6d296220, + 0x1c4b0: 0x6ceab020, 0x1c4b1: 0x6ceaee20, 0x1c4b2: 0x6ceaf020, 0x1c4b3: 0x6c50c820, + 0x1c4b4: 0x6c859020, 0x1c4b5: 0x6c9cdc20, 0x1c4b6: 0x6d147220, 0x1c4b7: 0x6c37e420, + 0x1c4b8: 0x6c3a8820, 0x1c4b9: 0x6d1efe20, 0x1c4ba: 0x6ce48420, 0x1c4bb: 0x6d358a20, + 0x1c4bc: 0x6d2f8820, 0x1c4bd: 0x6c46f220, 0x1c4be: 0x6d2d6020, 0x1c4bf: 0x6d0c6820, + // Block 0x713, offset 0x1c4c0 + 0x1c4c0: 0x6cd7ce20, 0x1c4c1: 0x6c7be420, 0x1c4c2: 0x6c6ef820, 0x1c4c3: 0x6c705c20, + 0x1c4c4: 0x6d016020, 0x1c4c5: 0x6cc00620, 0x1c4c6: 0x6d16c220, 0x1c4c7: 0x6c632c20, + 0x1c4c8: 0x6d379a20, 0x1c4c9: 0x6cc2c220, 0x1c4ca: 0x6cb2fc20, 0x1c4cb: 0x6c5b9020, + 0x1c4cc: 0x6c9d2620, 0x1c4cd: 0x6c077e20, 0x1c4ce: 0x6d2aaa20, 0x1c4cf: 0x6d39f420, + 0x1c4d0: 0x6c821820, 0x1c4d1: 0x6d1e9820, 0x1c4d2: 0x6c46f420, 0x1c4d3: 0x6c530420, + 0x1c4d4: 0x6c417620, 0x1c4d5: 0x6c382e20, 0x1c4d6: 0x6c992e20, 0x1c4d7: 0x6cd89020, + 0x1c4d8: 0x6c54a620, 0x1c4d9: 0x6cb27a20, 0x1c4da: 0x6c229220, 0x1c4db: 0x6c392220, + 0x1c4dc: 0x6d339a20, 0x1c4dd: 0x6cda8020, 0x1c4de: 0x6ca95420, 0x1c4df: 0x6c195420, + 0x1c4e0: 0x6c8cac20, 0x1c4e1: 0x6cad8220, 0x1c4e2: 0x6c0e5220, 0x1c4e3: 0x6cb74620, + 0x1c4e4: 0x6cd88220, 0x1c4e5: 0x6ca5c020, 0x1c4e6: 0x6c70f620, 0x1c4e7: 0x6cc96a20, + 0x1c4e8: 0x6d3ab020, 0x1c4e9: 0x6cd0e220, 0x1c4ea: 0x6c832020, 0x1c4eb: 0x6d087020, + 0x1c4ec: 0x6c73f020, 0x1c4ed: 0x6c3df620, 0x1c4ee: 0x6caca220, 0x1c4ef: 0x6c9f9620, + 0x1c4f0: 0x6cdf6820, 0x1c4f1: 0x6d0f4a20, 0x1c4f2: 0x6c612020, 0x1c4f3: 0x6d1e1420, + 0x1c4f4: 0x6c497c20, 0x1c4f5: 0x6c083a20, 0x1c4f6: 0x6d090020, 0x1c4f7: 0x6c8f6c20, + 0x1c4f8: 0x6c913a20, 0x1c4f9: 0x6c28f420, 0x1c4fa: 0x6c95e020, 0x1c4fb: 0x6d016220, + 0x1c4fc: 0x6cb3c020, 0x1c4fd: 0x6d2aac20, 0x1c4fe: 0x6c6d9020, 0x1c4ff: 0x6d1a3c20, + // Block 0x714, offset 0x1c500 + 0x1c500: 0x6cac5420, 0x1c501: 0x6c6a9020, 0x1c502: 0x6d16f620, 0x1c503: 0x6c5a9820, + 0x1c504: 0x6c5b2620, 0x1c505: 0x6d293020, 0x1c506: 0x6c19ce20, 0x1c507: 0x6d19b420, + 0x1c508: 0x6ceeec20, 0x1c509: 0x6c546620, 0x1c50a: 0x6c665a20, 0x1c50b: 0x6d0f9820, + 0x1c50c: 0x6c8ad420, 0x1c50d: 0x6cd8a820, 0x1c50e: 0x6c61aa20, 0x1c50f: 0x6c374020, + 0x1c510: 0x6d03d020, 0x1c511: 0x6c3e1220, 0x1c512: 0x6cc94c20, 0x1c513: 0x6ccb1820, + 0x1c514: 0x6d350420, 0x1c515: 0x6d1b3e20, 0x1c516: 0x6cf3b620, 0x1c517: 0x6cf7d620, + 0x1c518: 0x6c77a420, 0x1c519: 0x6d398a20, 0x1c51a: 0x6c67da20, 0x1c51b: 0x6c95e820, + 0x1c51c: 0x6c95f420, 0x1c51d: 0x6c01a620, 0x1c51e: 0x6c306420, 0x1c51f: 0x6ce3dc20, + 0x1c520: 0x6ca1c820, 0x1c521: 0x6c832220, 0x1c522: 0x6d13da20, 0x1c523: 0x6c9ce420, + 0x1c524: 0x6cc2c420, 0x1c525: 0x6c6c3020, 0x1c526: 0x6cb37020, 0x1c527: 0x6cef9820, + 0x1c528: 0x6cff7020, 0x1c529: 0x6d017220, 0x1c52a: 0x6c531420, 0x1c52b: 0x6d069420, + 0x1c52c: 0x6cda8620, 0x1c52d: 0x6c7b9220, 0x1c52e: 0x6ce20a20, 0x1c52f: 0x6cbcac20, + 0x1c530: 0x6c71fe20, 0x1c531: 0x6c378a20, 0x1c532: 0x6d386020, 0x1c533: 0x6cc81220, + 0x1c534: 0x6cb28620, 0x1c535: 0x6d09ec20, 0x1c536: 0x6d046020, 0x1c537: 0x6d35a220, + 0x1c538: 0x6c49e020, 0x1c539: 0x6c586420, 0x1c53a: 0x6c9fec20, 0x1c53b: 0x6c5d7020, + 0x1c53c: 0x6cebcc20, 0x1c53d: 0x6cb84c20, 0x1c53e: 0x6cac1e20, 0x1c53f: 0x6cf35820, + // Block 0x715, offset 0x1c540 + 0x1c540: 0x6cc0e820, 0x1c541: 0x6c8e4a20, 0x1c542: 0x6d16f820, 0x1c543: 0x6c633a20, + 0x1c544: 0x6c6e5a20, 0x1c545: 0x6cb9f420, 0x1c546: 0x6c675420, 0x1c547: 0x6c683220, + 0x1c548: 0x6d312a20, 0x1c549: 0x6cd1ac20, 0x1c54a: 0x6d3d3420, 0x1c54b: 0x6c12d420, + 0x1c54c: 0x6c380020, 0x1c54d: 0x6c5b9c20, 0x1c54e: 0x6c61ac20, 0x1c54f: 0x6c8e4620, + 0x1c550: 0x6c159c20, 0x1c551: 0x6c5ce020, 0x1c552: 0x6c561420, 0x1c553: 0x6ca9b420, + 0x1c554: 0x6d09ee20, 0x1c555: 0x6c6ce220, 0x1c556: 0x6c8aee20, 0x1c557: 0x6cc03220, + 0x1c558: 0x6cefa220, 0x1c559: 0x6d30ea20, 0x1c55a: 0x6c75a620, 0x1c55b: 0x6c4df620, + 0x1c55c: 0x6c052620, 0x1c55d: 0x6c985220, 0x1c55e: 0x6d3d3a20, 0x1c55f: 0x6d1f1820, + 0x1c560: 0x6cf5c220, 0x1c561: 0x6c0ed620, 0x1c562: 0x6c310420, 0x1c563: 0x6c590420, + 0x1c564: 0x6c532a20, 0x1c565: 0x6d173220, 0x1c566: 0x6cb48820, 0x1c567: 0x6d1ce420, + 0x1c568: 0x6c802420, 0x1c569: 0x6c502e20, 0x1c56a: 0x6c811820, 0x1c56b: 0x6c4e5620, + 0x1c56c: 0x6c850c20, 0x1c56d: 0x6c44be20, 0x1c56e: 0x6c3e3620, 0x1c56f: 0x6cf3b820, + 0x1c570: 0x6c88ea20, 0x1c571: 0x6c213a20, 0x1c572: 0x6c3ca220, 0x1c573: 0x6d173420, + 0x1c574: 0x6d22f220, 0x1c575: 0x6ce73420, 0x1c576: 0x6c815420, 0x1c577: 0x6c4d3a20, + 0x1c578: 0x6c6cee20, 0x1c579: 0x6c634220, 0x1c57a: 0x6c1cb820, 0x1c57b: 0x6c6f0820, + 0x1c57c: 0x6c9a5220, 0x1c57d: 0x6cdbb820, 0x1c57e: 0x6c195e20, 0x1c57f: 0x6cae1420, + // Block 0x716, offset 0x1c580 + 0x1c580: 0x6cfcaa20, 0x1c581: 0x6cd09820, 0x1c582: 0x6ce92e20, 0x1c583: 0x6c7dd020, + 0x1c584: 0x6cb25020, 0x1c585: 0x6ca80820, 0x1c586: 0x6c4e9c20, 0x1c587: 0x6c6da020, + 0x1c588: 0x6cfea220, 0x1c589: 0x6ccf3c20, 0x1c58a: 0x6ca71e20, 0x1c58b: 0x6ce84e20, + 0x1c58c: 0x6d1e2620, 0x1c58d: 0x6cffe020, 0x1c58e: 0x6cfb3620, 0x1c58f: 0x6ce6bc20, + 0x1c590: 0x6c355820, 0x1c591: 0x6cda8e20, 0x1c592: 0x6cea1c20, 0x1c593: 0x6c72e620, + 0x1c594: 0x6c132c20, 0x1c595: 0x6ce3e220, 0x1c596: 0x6c85d020, 0x1c597: 0x6cd71620, + 0x1c598: 0x6cd8aa20, 0x1c599: 0x6c832820, 0x1c59a: 0x6cd71820, 0x1c59b: 0x6ce1be20, + 0x1c59c: 0x6c318e20, 0x1c59d: 0x6c81ce20, 0x1c59e: 0x6c7eec20, 0x1c59f: 0x6c87f620, + 0x1c5a0: 0x6ceef620, 0x1c5a1: 0x6cf28020, 0x1c5a2: 0x6d279a20, 0x1c5a3: 0x6c590620, + 0x1c5a4: 0x6c2b6420, 0x1c5a5: 0x6c528a20, 0x1c5a6: 0x6cc8fa20, 0x1c5a7: 0x6c666e20, + 0x1c5a8: 0x6d2f0220, 0x1c5a9: 0x6ccb1c20, 0x1c5aa: 0x6c3e5220, 0x1c5ab: 0x6c498420, + 0x1c5ac: 0x6d042a20, 0x1c5ad: 0x6cd46420, 0x1c5ae: 0x6cd69020, 0x1c5af: 0x6d0b2a20, + 0x1c5b0: 0x6c21b620, 0x1c5b1: 0x6d2f2e20, 0x1c5b2: 0x6d12e820, 0x1c5b3: 0x6c797620, + 0x1c5b4: 0x6cf2e420, 0x1c5b5: 0x6c4e0220, 0x1c5b6: 0x6ceac020, 0x1c5b7: 0x6c2ffa20, + 0x1c5b8: 0x6c510820, 0x1c5b9: 0x6cf28620, 0x1c5ba: 0x6c708e20, 0x1c5bb: 0x6ccf4020, + 0x1c5bc: 0x6c894e20, 0x1c5bd: 0x6c5cc220, 0x1c5be: 0x6cde4e20, 0x1c5bf: 0x6d3cfe20, + // Block 0x717, offset 0x1c5c0 + 0x1c5c0: 0x6c2d5220, 0x1c5c1: 0x6cbcb620, 0x1c5c2: 0x6c2a6a20, 0x1c5c3: 0x6c735620, + 0x1c5c4: 0x6d3e2420, 0x1c5c5: 0x6cf5f020, 0x1c5c6: 0x6cff8220, 0x1c5c7: 0x6cb5ca20, + 0x1c5c8: 0x6c477e20, 0x1c5c9: 0x6c4cb820, 0x1c5ca: 0x6d0bf620, 0x1c5cb: 0x6c8bb020, + 0x1c5cc: 0x6ce17420, 0x1c5cd: 0x6d387620, 0x1c5ce: 0x6caf0420, 0x1c5cf: 0x6c503820, + 0x1c5d0: 0x6c166620, 0x1c5d1: 0x6cd4cc20, 0x1c5d2: 0x6cb4ea20, 0x1c5d3: 0x6c399020, + 0x1c5d4: 0x6d345820, 0x1c5d5: 0x6c923c20, 0x1c5d6: 0x6ca53020, 0x1c5d7: 0x6c711420, + 0x1c5d8: 0x6ce21e20, 0x1c5d9: 0x6c239c20, 0x1c5da: 0x6c833020, 0x1c5db: 0x6d30f020, + 0x1c5dc: 0x6cb29c20, 0x1c5dd: 0x6c3a3420, 0x1c5de: 0x6cd91c20, 0x1c5df: 0x6ce4ee20, + 0x1c5e0: 0x6cb09020, 0x1c5e1: 0x6c288020, 0x1c5e2: 0x6d231620, 0x1c5e3: 0x6ca5d820, + 0x1c5e4: 0x6d208620, 0x1c5e5: 0x6c923e20, 0x1c5e6: 0x6c421a20, 0x1c5e7: 0x6c9d3a20, + 0x1c5e8: 0x6c6e7420, 0x1c5e9: 0x6c8ce820, 0x1c5ea: 0x6c94f420, 0x1c5eb: 0x6d1a5c20, + 0x1c5ec: 0x6c253620, 0x1c5ed: 0x6cc18820, 0x1c5ee: 0x6c57ea20, 0x1c5ef: 0x6d231820, + 0x1c5f0: 0x6ca72220, 0x1c5f1: 0x6ccfde20, 0x1c5f2: 0x6c0bf620, 0x1c5f3: 0x6c214220, + 0x1c5f4: 0x6c54c220, 0x1c5f5: 0x6d24ec20, 0x1c5f6: 0x6c7efc20, 0x1c5f7: 0x6c5d2620, + 0x1c5f8: 0x6cbe4620, 0x1c5f9: 0x6d0bf820, 0x1c5fa: 0x6cba0220, 0x1c5fb: 0x6ce46220, + 0x1c5fc: 0x6c9e9020, 0x1c5fd: 0x6d350c20, 0x1c5fe: 0x6d1ae420, 0x1c5ff: 0x6c9d3c20, + // Block 0x718, offset 0x1c600 + 0x1c600: 0x6c07b220, 0x1c601: 0x6d24de20, 0x1c602: 0x6cf20820, 0x1c603: 0x6cc91c20, + 0x1c604: 0x6c39fa20, 0x1c605: 0x6cbe4820, 0x1c606: 0x6d24e020, 0x1c607: 0x6c786220, + 0x1c608: 0x6c61f220, 0x1c609: 0x6ccf4220, 0x1c60a: 0x6d24e220, 0x1c60b: 0x6ccba420, + 0x1c60c: 0x6c924020, 0x1c60d: 0x6d3f4420, 0x1c60e: 0x6c319620, 0x1c60f: 0x6cb81420, + 0x1c610: 0x6c667a20, 0x1c611: 0x6c9e1c20, 0x1c612: 0x6cb09220, 0x1c613: 0x6cf94420, + 0x1c614: 0x6d210220, 0x1c615: 0x6d24e420, 0x1c616: 0x6cd05c20, 0x1c617: 0x6cd09e20, + 0x1c618: 0x6cc74c20, 0x1c619: 0x6c592420, 0x1c61a: 0x6d3a6420, 0x1c61b: 0x6c659620, + 0x1c61c: 0x6caa9020, 0x1c61d: 0x6d212a20, 0x1c61e: 0x6cc06220, 0x1c61f: 0x6ce67220, + 0x1c620: 0x6cc18a20, 0x1c621: 0x6c325c20, 0x1c622: 0x6c389e20, 0x1c623: 0x6d2bdc20, + 0x1c624: 0x6c0f0420, 0x1c625: 0x6cf2f220, 0x1c626: 0x6cf28820, 0x1c627: 0x6c2c5820, + 0x1c628: 0x6cee8e20, 0x1c629: 0x6cf15020, 0x1c62a: 0x6cc7ac20, 0x1c62b: 0x6d01ae20, + 0x1c62c: 0x6c12ea20, 0x1c62d: 0x6cf09820, 0x1c62e: 0x6c510a20, 0x1c62f: 0x6c42a220, + 0x1c630: 0x6d0d8a20, 0x1c631: 0x6c534a20, 0x1c632: 0x6d089420, 0x1c633: 0x6c9cf220, + 0x1c634: 0x6c786a20, 0x1c635: 0x6c98da20, 0x1c636: 0x6d1bb020, 0x1c637: 0x6d0d8c20, + 0x1c638: 0x6d1f3820, 0x1c639: 0x6c52a620, 0x1c63a: 0x6c9e9220, 0x1c63b: 0x6cd13a20, + 0x1c63c: 0x6c9a5a20, 0x1c63d: 0x6d290420, 0x1c63e: 0x6c5cec20, 0x1c63f: 0x6ca3c420, + // Block 0x719, offset 0x1c640 + 0x1c640: 0x6c4afe20, 0x1c641: 0x6c1c2020, 0x1c642: 0x6c363820, 0x1c643: 0x6cac2620, + 0x1c644: 0x6c99fc20, 0x1c645: 0x6c88fc20, 0x1c646: 0x6cb79620, 0x1c647: 0x6cb79820, + 0x1c648: 0x6c99fe20, 0x1c649: 0x6ce4a020, 0x1c64a: 0x6c23ec20, 0x1c64b: 0x6cef1020, + 0x1c64c: 0x6c116a20, 0x1c64d: 0x6ce93220, 0x1c64e: 0x6c9e2620, 0x1c64f: 0x6c5bc420, + 0x1c650: 0x6ca11a20, 0x1c651: 0x6d059c20, 0x1c652: 0x6c604020, 0x1c653: 0x6cae4020, + 0x1c654: 0x6c649e20, 0x1c655: 0x6c658a20, 0x1c656: 0x6c555e20, 0x1c657: 0x6c3ce020, + 0x1c658: 0x6cfd7420, 0x1c659: 0x6d17a820, 0x1c65a: 0x6d1b5420, 0x1c65b: 0x6d2e6420, + 0x1c65c: 0x6cd26a20, 0x1c65d: 0x6c6a1820, 0x1c65e: 0x6c197020, 0x1c65f: 0x6c59c620, + 0x1c660: 0x6ce09a20, 0x1c661: 0x6d212c20, 0x1c662: 0x6c09a220, 0x1c663: 0x6c9fb020, + 0x1c664: 0x6cd1be20, 0x1c665: 0x6ce86020, 0x1c666: 0x6cd10220, 0x1c667: 0x6d1e3a20, + 0x1c668: 0x6c712620, 0x1c669: 0x6c307820, 0x1c66a: 0x6ce98a20, 0x1c66b: 0x6c68f620, + 0x1c66c: 0x6c690820, 0x1c66d: 0x6cc06420, 0x1c66e: 0x6d0c0820, 0x1c66f: 0x6ce0c020, + 0x1c670: 0x6c8f9420, 0x1c671: 0x6c5dd220, 0x1c672: 0x6d256420, 0x1c673: 0x6ca42820, + 0x1c674: 0x6c04f620, 0x1c675: 0x6d1fcc20, 0x1c676: 0x6cc2f020, 0x1c677: 0x6d3c1820, + 0x1c678: 0x6c89ba20, 0x1c679: 0x6c14f620, 0x1c67a: 0x6d0c9620, 0x1c67b: 0x6c214c20, + 0x1c67c: 0x6ca83020, 0x1c67d: 0x6d3e3e20, 0x1c67e: 0x6cec9020, 0x1c67f: 0x6cd1c020, + // Block 0x71a, offset 0x1c680 + 0x1c680: 0x6c97ba20, 0x1c681: 0x6d1c7220, 0x1c682: 0x6c7ed620, 0x1c683: 0x6c7cfc20, + 0x1c684: 0x6c3d0020, 0x1c685: 0x6c669020, 0x1c686: 0x6d06da20, 0x1c687: 0x6c908a20, + 0x1c688: 0x6cef1220, 0x1c689: 0x6c413620, 0x1c68a: 0x6cfa6620, 0x1c68b: 0x6d1c7420, + 0x1c68c: 0x6cb31020, 0x1c68d: 0x6c6d1820, 0x1c68e: 0x6d0e8620, 0x1c68f: 0x6ce10420, + 0x1c690: 0x6d258220, 0x1c691: 0x6cdd7a20, 0x1c692: 0x6d258420, 0x1c693: 0x6c881420, + 0x1c694: 0x6d11b820, 0x1c695: 0x6c9c0620, 0x1c696: 0x6d3cde20, 0x1c697: 0x6c1a1c20, + 0x1c698: 0x6c78ba20, 0x1c699: 0x6cdf7a20, 0x1c69a: 0x6cde0a20, 0x1c69b: 0x6cebe420, + 0x1c69c: 0x6c8e3620, 0x1c69d: 0x6c465220, 0x1c69e: 0x6ccaae20, 0x1c69f: 0x6ca00620, + 0x1c6a0: 0x6d2cc420, 0x1c6a1: 0x6cd27220, 0x1c6a2: 0x6d17e820, 0x1c6a3: 0x6c952220, + 0x1c6a4: 0x6c969a20, 0x1c6a5: 0x6cb48e20, 0x1c6a6: 0x6cee9e20, 0x1c6a7: 0x6c863420, + 0x1c6a8: 0x6c111220, 0x1c6a9: 0x6cf50020, 0x1c6aa: 0x6cf64c20, 0x1c6ab: 0x6cf15a20, + 0x1c6ac: 0x6cbaba20, 0x1c6ad: 0x6d2ace20, 0x1c6ae: 0x6cd1ce20, 0x1c6af: 0x6cdace20, + 0x1c6b0: 0x6c004220, 0x1c6b1: 0x6cbd8420, 0x1c6b2: 0x6cd9b220, 0x1c6b3: 0x6d27b220, + 0x1c6b4: 0x6d054420, 0x1c6b5: 0x6d19ec20, 0x1c6b6: 0x6cc68a20, 0x1c6b7: 0x6c5d2e20, + 0x1c6b8: 0x6cdad020, 0x1c6b9: 0x6cddcc20, 0x1c6ba: 0x6ca6ac20, 0x1c6bb: 0x6cddf420, + 0x1c6bc: 0x6cd1d020, 0x1c6bd: 0x6cc81c20, 0x1c6be: 0x6c002a20, 0x1c6bf: 0x6cacba20, + // Block 0x71b, offset 0x1c6c0 + 0x1c6c0: 0x6c1f5020, 0x1c6c1: 0x6c1e7e20, 0x1c6c2: 0x6cacdc20, 0x1c6c3: 0x6cf22c20, + 0x1c6c4: 0x6c123220, 0x1c6c5: 0x6c9ede20, 0x1c6c6: 0x6c440620, 0x1c6c7: 0x6c2cce20, + 0x1c6c8: 0x6c504420, 0x1c6c9: 0x6c5a7020, 0x1c6ca: 0x6cf8a020, 0x1c6cb: 0x6d3e4020, + 0x1c6cc: 0x6c2b7220, 0x1c6cd: 0x6d365a20, 0x1c6ce: 0x6d03f220, 0x1c6cf: 0x6c3f6c20, + 0x1c6d0: 0x6c6aea20, 0x1c6d1: 0x6c573e20, 0x1c6d2: 0x6c439a20, 0x1c6d3: 0x6d3f1a20, + 0x1c6d4: 0x6ce1d820, 0x1c6d5: 0x6ce2aa20, 0x1c6d6: 0x6cdbc820, 0x1c6d7: 0x6c09c820, + 0x1c6d8: 0x6c69a420, 0x1c6d9: 0x6c5be620, 0x1c6da: 0x6c4bce20, 0x1c6db: 0x6d1a7020, + 0x1c6dc: 0x6c42ca20, 0x1c6dd: 0x6c8f9620, 0x1c6de: 0x6d362c20, 0x1c6df: 0x6d0e8820, + 0x1c6e0: 0x6ccf5820, 0x1c6e1: 0x6c97be20, 0x1c6e2: 0x6d1c8020, 0x1c6e3: 0x6c215020, + 0x1c6e4: 0x6c93e620, 0x1c6e5: 0x6c807420, 0x1c6e6: 0x6c943e20, 0x1c6e7: 0x6d003420, + 0x1c6e8: 0x6c0d3c20, 0x1c6e9: 0x6cdfb020, 0x1c6ea: 0x6d236e20, 0x1c6eb: 0x6d052420, + 0x1c6ec: 0x6c56b820, 0x1c6ed: 0x6c09ca20, 0x1c6ee: 0x6c0c0c20, 0x1c6ef: 0x6d368e20, + 0x1c6f0: 0x6c67f220, 0x1c6f1: 0x6c79f620, 0x1c6f2: 0x6cd0be20, 0x1c6f3: 0x6cce0e20, + 0x1c6f4: 0x6c2b3a20, 0x1c6f5: 0x6c9d6820, 0x1c6f6: 0x6c025220, 0x1c6f7: 0x6c91cc20, + 0x1c6f8: 0x6c562820, 0x1c6f9: 0x6c54e820, 0x1c6fa: 0x6d1eac20, 0x1c6fb: 0x6c15cc20, + 0x1c6fc: 0x6c396420, 0x1c6fd: 0x6d1d9e20, 0x1c6fe: 0x6c4bd620, 0x1c6ff: 0x6c97c420, + // Block 0x71c, offset 0x1c700 + 0x1c700: 0x6cbeae20, 0x1c701: 0x6d216e20, 0x1c702: 0x6cb1b820, 0x1c703: 0x6c623e20, + 0x1c704: 0x6d0b3420, 0x1c705: 0x6c176e20, 0x1c706: 0x6cb51220, 0x1c707: 0x6cf7fe20, + 0x1c708: 0x6c624020, 0x1c709: 0x6c928620, 0x1c70a: 0x6c90a620, 0x1c70b: 0x6c8f9c20, + 0x1c70c: 0x6c6ca020, 0x1c70d: 0x6c4c7a20, 0x1c70e: 0x6c23a620, 0x1c70f: 0x6c910e20, + 0x1c710: 0x6d349020, 0x1c711: 0x6c414c20, 0x1c712: 0x6cbb1a20, 0x1c713: 0x6c83e220, + 0x1c714: 0x6d0db420, 0x1c715: 0x6c127e20, 0x1c716: 0x6c69b020, 0x1c717: 0x6c232a20, + 0x1c718: 0x6c215620, 0x1c719: 0x6ce95620, 0x1c71a: 0x6cab4020, 0x1c71b: 0x6ce2a820, + 0x1c71c: 0x6d12b020, 0x1c71d: 0x6cf79220, 0x1c71e: 0x6c9d6a20, 0x1c71f: 0x6ce11220, + 0x1c720: 0x6ca12c20, 0x1c721: 0x6cce1020, 0x1c722: 0x6c4ee620, 0x1c723: 0x6c881620, + 0x1c724: 0x6c803220, 0x1c725: 0x6cebe820, 0x1c726: 0x6c1b4820, 0x1c727: 0x6c41aa20, + 0x1c728: 0x6c3cae20, 0x1c729: 0x6d081a20, 0x1c72a: 0x6d140420, 0x1c72b: 0x6c97ec20, + 0x1c72c: 0x6d3f5c20, 0x1c72d: 0x6c989620, 0x1c72e: 0x6c774020, 0x1c72f: 0x6c961620, + 0x1c730: 0x6cae7a20, 0x1c731: 0x6cd5f420, 0x1c732: 0x6d2f0620, 0x1c733: 0x6d2eca20, + 0x1c734: 0x6d3c4620, 0x1c735: 0x6d070c20, 0x1c736: 0x6c594020, 0x1c737: 0x6c5d9020, + 0x1c738: 0x6c66aa20, 0x1c739: 0x6d0c1c20, 0x1c73a: 0x6cd6d820, 0x1c73b: 0x6c89f820, + 0x1c73c: 0x6c24fa20, 0x1c73d: 0x6ce36420, 0x1c73e: 0x6d106020, 0x1c73f: 0x6c677220, + // Block 0x71d, offset 0x1c740 + 0x1c740: 0x6c23a820, 0x1c741: 0x6d1d0620, 0x1c742: 0x6c537220, 0x1c743: 0x6d0a1c20, + 0x1c744: 0x6cd5f620, 0x1c745: 0x6c499a20, 0x1c746: 0x6d1c8620, 0x1c747: 0x6cfeee20, + 0x1c748: 0x6d404220, 0x1c749: 0x6c7de020, 0x1c74a: 0x6d070e20, 0x1c74b: 0x6c890c20, + 0x1c74c: 0x6d369020, 0x1c74d: 0x6cef2020, 0x1c74e: 0x6cb0ac20, 0x1c74f: 0x6d23c420, + 0x1c750: 0x6c69be20, 0x1c751: 0x6cb3c420, 0x1c752: 0x6c297820, 0x1c753: 0x6c5c1820, + 0x1c754: 0x6c6b1c20, 0x1c755: 0x6cf46820, 0x1c756: 0x6cabdc20, 0x1c757: 0x6c608620, + 0x1c758: 0x6cac4220, 0x1c759: 0x6cef2c20, 0x1c75a: 0x6cdb1820, 0x1c75b: 0x6cb9b820, + 0x1c75c: 0x6cb9ba20, 0x1c75d: 0x6cf69c20, 0x1c75e: 0x6c92cc20, 0x1c75f: 0x6cf8c620, + 0x1c760: 0x6d0aa220, 0x1c761: 0x6c340620, 0x1c762: 0x6c59da20, 0x1c763: 0x6c9fc620, + 0x1c764: 0x6cc90420, 0x1c765: 0x6cdb0020, 0x1c766: 0x6c81b820, 0x1c767: 0x6d318a20, + 0x1c768: 0x6c23aa20, 0x1c769: 0x6d182820, 0x1c76a: 0x6d30fe20, 0x1c76b: 0x6cec9820, + 0x1c76c: 0x6ccd9e20, 0x1c76d: 0x6ce00420, 0x1c76e: 0x6c177620, 0x1c76f: 0x6d0a3220, + 0x1c770: 0x6c7d0e20, 0x1c771: 0x6d126420, 0x1c772: 0x6ccee420, 0x1c773: 0x6ce8da20, + 0x1c774: 0x6d39bc20, 0x1c775: 0x6cc95820, 0x1c776: 0x6c522220, 0x1c777: 0x6c0a2a20, + 0x1c778: 0x6ccd0820, 0x1c779: 0x6c151c20, 0x1c77a: 0x6c151e20, 0x1c77b: 0x6cd56820, + 0x1c77c: 0x6ce77c20, 0x1c77d: 0x6cb41020, 0x1c77e: 0x6c8bce20, 0x1c77f: 0x6cef2e20, + // Block 0x71e, offset 0x1c780 + 0x1c780: 0x6ccb6c20, 0x1c781: 0x6ccb4620, 0x1c782: 0x6c1a3820, 0x1c783: 0x6c6f3020, + 0x1c784: 0x6c1a3a20, 0x1c785: 0x6c57be20, 0x1c786: 0x6c686c20, 0x1c787: 0x6c81dc20, + 0x1c788: 0x6c183420, 0x1c789: 0x6c41e020, 0x1c78a: 0x6c259c20, 0x1c78b: 0x6c53cc20, + 0x1c78c: 0x6cd81820, 0x1c78d: 0x6cd60220, 0x1c78e: 0x6cae8420, 0x1c78f: 0x6c4e2a20, + 0x1c790: 0x6d27c020, 0x1c791: 0x6c8f3c20, 0x1c792: 0x6c53ce20, 0x1c793: 0x6c3ed820, + 0x1c794: 0x6c505a20, 0x1c795: 0x6c513e20, 0x1c796: 0x6cfb8020, 0x1c797: 0x6c66b620, + 0x1c798: 0x6ccd0a20, 0x1c799: 0x6cf8c820, 0x1c79a: 0x6d24c220, 0x1c79b: 0x6c934c20, + 0x1c79c: 0x6c7fac20, 0x1c79d: 0x6ca96020, 0x1c79e: 0x6d21a220, 0x1c79f: 0x6c8c3420, + 0x1c7a0: 0x6c9e4020, 0x1c7a1: 0x6d2a5020, 0x1c7a2: 0x6c290420, 0x1c7a3: 0x6c595420, + 0x1c7a4: 0x6d2afc20, 0x1c7a5: 0x6d021620, 0x1c7a6: 0x6d23ea20, 0x1c7a7: 0x6c853020, + 0x1c7a8: 0x6cd3da20, 0x1c7a9: 0x6d091c20, 0x1c7aa: 0x6c8d5820, 0x1c7ab: 0x6ced9420, + 0x1c7ac: 0x6d3e8a20, 0x1c7ad: 0x6d1db420, 0x1c7ae: 0x6c5c3420, 0x1c7af: 0x6c120420, + 0x1c7b0: 0x6c891620, 0x1c7b1: 0x6c2d8420, 0x1c7b2: 0x6d134020, 0x1c7b3: 0x6c02ec20, + 0x1c7b4: 0x6c589820, 0x1c7b5: 0x6d319220, 0x1c7b6: 0x6c152420, 0x1c7b7: 0x6c980420, + 0x1c7b8: 0x6c284420, 0x1c7b9: 0x6c28b220, 0x1c7ba: 0x6d189e20, 0x1c7bb: 0x6cdc5c20, + 0x1c7bc: 0x6cb0ba20, 0x1c7bd: 0x6c728e20, 0x1c7be: 0x6cde8e20, 0x1c7bf: 0x6cbda420, + // Block 0x71f, offset 0x1c7c0 + 0x1c7c0: 0x6c5f3420, 0x1c7c1: 0x6d3d9a20, 0x1c7c2: 0x6c884c20, 0x1c7c3: 0x6ca9c620, + 0x1c7c4: 0x6c4c3020, 0x1c7c5: 0x6c6d4e20, 0x1c7c6: 0x6c3b8c20, 0x1c7c7: 0x6ccb5a20, + 0x1c7c8: 0x6c608820, 0x1c7c9: 0x6cdbda20, 0x1c7ca: 0x6c5c3620, 0x1c7cb: 0x6c1eea20, + 0x1c7cc: 0x6cdeac20, 0x1c7cd: 0x6cd93620, 0x1c7ce: 0x6c2f7e20, 0x1c7cf: 0x6ccba620, + 0x1c7d0: 0x6d3a7e20, 0x1c7d1: 0x6c7f5620, 0x1c7d2: 0x6c0d5220, 0x1c7d3: 0x6c884e20, + 0x1c7d4: 0x6c9d0220, 0x1c7d5: 0x6cd20220, 0x1c7d6: 0x6cd60c20, 0x1c7d7: 0x6c9d8620, + 0x1c7d8: 0x6ca95a20, 0x1c7d9: 0x6d1ca220, 0x1c7da: 0x6d1ca420, 0x1c7db: 0x6c9b4c20, + 0x1c7dc: 0x6c6d5e20, 0x1c7dd: 0x6cb65e20, 0x1c7de: 0x6c0a7020, 0x1c7df: 0x6c629820, + 0x1c7e0: 0x6c4ff420, 0x1c7e1: 0x6cc7d220, 0x1c7e2: 0x6c256a20, 0x1c7e3: 0x6cf31c20, + 0x1c7e4: 0x6ce1f020, 0x1c7e5: 0x6d1b0e20, 0x1c7e6: 0x6d1b1020, 0x1c7e7: 0x6c336820, + 0x1c7e8: 0x6c226c20, 0x1c7e9: 0x6c5df820, 0x1c7ea: 0x6c6eb220, 0x1c7eb: 0x6c807c20, + 0x1c7ec: 0x6c75f020, 0x1c7ed: 0x6c007820, 0x1c7ee: 0x6cb45820, 0x1c7ef: 0x6d3db020, + 0x1c7f0: 0x6cef4020, 0x1c7f1: 0x6c0d5420, 0x1c7f2: 0x6c47d620, 0x1c7f3: 0x6cb9d620, + 0x1c7f4: 0x6d1ca620, 0x1c7f5: 0x6c0d9c20, 0x1c7f6: 0x6c7e1c20, 0x1c7f7: 0x6c3ade20, + 0x1c7f8: 0x6c125e20, 0x1c7f9: 0x6c99c820, 0x1c7fa: 0x6c66f020, 0x1c7fb: 0x6cf02620, + 0x1c7fc: 0x6c963420, 0x1c7fd: 0x6d29a420, 0x1c7fe: 0x6c940e20, 0x1c7ff: 0x6c869e20, + // Block 0x720, offset 0x1c800 + 0x1c800: 0x6d1ebe20, 0x1c801: 0x6d106e20, 0x1c802: 0x6c91ea20, 0x1c803: 0x6cd8f420, + 0x1c804: 0x6d36e220, 0x1c805: 0x6d1cb220, 0x1c806: 0x6c31cc20, 0x1c807: 0x6cee3c20, + 0x1c808: 0x6c5afc20, 0x1c809: 0x6d024020, 0x1c80a: 0x6cac8020, 0x1c80b: 0x6cd08420, + 0x1c80c: 0x6c0c3820, 0x1c80d: 0x6c153820, 0x1c80e: 0x6ca17220, 0x1c80f: 0x6c8eba20, + 0x1c810: 0x6c651620, 0x1c811: 0x6cb4ba20, 0x1c812: 0x6ccb7420, 0x1c813: 0x6c1a4e20, + 0x1c814: 0x6c47e220, 0x1c815: 0x6c0d6820, 0x1c816: 0x6c5e2820, 0x1c817: 0x6cfd3020, + 0x1c818: 0x6c917220, 0x1c819: 0x6cbe2620, 0x1c81a: 0x6c4f2c20, 0x1c81b: 0x6d1cba20, + 0x1c81c: 0x6cc6d820, 0x1c81d: 0x6c86f820, 0x1c81e: 0x6c6eb420, 0x1c81f: 0x6cff3a20, + 0x1c820: 0x6d1cbc20, 0x1c821: 0x6cdc0e20, 0x1c822: 0x6cf03c20, 0x1c823: 0x6d025620, + 0x1c824: 0x6c57fc20, 0x1c825: 0x6d097820, 0x1c826: 0x6d39d420, 0x1c827: 0x6c8fc620, + 0x1c828: 0x6c7f6a20, 0x1c829: 0x6c337820, 0x1c82a: 0x6c38de20, 0x1c82b: 0x6c55ee20, + 0x1c82c: 0x6c7f6c20, 0x1c82d: 0x6cd63420, 0x1c82e: 0x6c8e3220, 0x1c82f: 0x6d1cbe20, + 0x1c830: 0x6c9ca020, 0x1c831: 0x6c62c820, 0x1c832: 0x6c892c20, 0x1c833: 0x6c66fe20, + 0x1c834: 0x6d1cc620, 0x1c835: 0x6c3c0220, 0x1c836: 0x6c8c0020, 0x1c837: 0x6d192c20, + 0x1c838: 0x6c653220, 0x1c839: 0x6d270a20, 0x1c83a: 0x6c155620, 0x1c83b: 0x6c27a620, + 0x1c83c: 0x6cc4e620, 0x1c83d: 0x6c661820, 0x1c83e: 0x6c7fe820, 0x1c83f: 0x6c38e020, + // Block 0x721, offset 0x1c840 + 0x1c840: 0x6cd6f420, 0x1c841: 0x6d252620, 0x1c842: 0x6d3dd420, 0x1c843: 0x6c3c8020, + 0x1c844: 0x6ccf8c20, 0x1c845: 0x6c830220, 0x1c846: 0x6c7fea20, 0x1c847: 0x6c23c620, + 0x1c848: 0x6cc20020, 0x1c849: 0x6d1dda20, 0x1c84a: 0x6cb9e020, 0x1c84b: 0x6c383620, + 0x1c84c: 0x6c49b420, 0x1c84d: 0x6cc41a20, 0x1c84e: 0x6d0f2220, 0x1c84f: 0x6c507c20, + 0x1c850: 0x6d1d7020, 0x1c851: 0x6cc95c20, 0x1c852: 0x6d29ba20, 0x1c853: 0x6c946020, + 0x1c854: 0x6d0f0420, 0x1c855: 0x6c84a820, 0x1c856: 0x6c9d0e20, 0x1c857: 0x6ccde820, + 0x1c858: 0x6cdfc620, 0x1c859: 0x6c293e20, 0x1c85a: 0x6c697620, 0x1c85b: 0x6c161820, + 0x1c85c: 0x6d1d7220, 0x1c85d: 0x6c508420, 0x1c85e: 0x6c03dc20, 0x1c85f: 0x6d3a4220, + 0x1c860: 0x6c805e20, 0x1c861: 0x6c800820, 0x1c862: 0x6ca47820, 0x1c863: 0x6cecac20, + 0x1c864: 0x6c947020, 0x1c865: 0x6d0a5e20, 0x1c866: 0x6cfc6a20, 0x1c867: 0x6d0f2820, + 0x1c868: 0x6c424820, 0x1c869: 0x6d0f3220, 0x1c86a: 0x6d24ac20, 0x1c86b: 0x6c5d8420, + 0x1c86c: 0x6c0be820, 0x1c86d: 0x6c9eca20, 0x1c86e: 0x6c49d220, 0x1c86f: 0x6c2a9a20, + 0x1c870: 0x6c5a8620, 0x1c871: 0x6cfe7a20, 0x1c872: 0x6cfe7c20, 0x1c873: 0x6c5caa20, + 0x1c874: 0x6c529620, 0x1c875: 0x6c8c9c20, 0x1c876: 0x6d2a6620, 0x1c877: 0x6d3bbe20, + 0x1c878: 0x6c6faa20, 0x1c879: 0x6d2ca820, 0x1c87a: 0x6d015820, 0x1c87b: 0x6c1be420, + 0x1c87c: 0x6d3d2420, 0x1c87d: 0x6d28f220, 0x1c87e: 0x6d28f420, 0x1c87f: 0x6c11ec20, + // Block 0x722, offset 0x1c880 + 0x1c880: 0x6d0f8020, 0x1c881: 0x6cb74820, 0x1c882: 0x6d379c20, 0x1c883: 0x6c3b5e20, + 0x1c884: 0x6ca98220, 0x1c885: 0x6c6efa20, 0x1c886: 0x6cf18220, 0x1c887: 0x6cb36820, + 0x1c888: 0x6d16c420, 0x1c889: 0x6c913c20, 0x1c88a: 0x6c20b620, 0x1c88b: 0x6caf4020, + 0x1c88c: 0x6c767e20, 0x1c88d: 0x6caca420, 0x1c88e: 0x6d0c6a20, 0x1c88f: 0x6c768020, + 0x1c890: 0x6cad2620, 0x1c891: 0x6ca26e20, 0x1c892: 0x6c179020, 0x1c893: 0x6c8a9220, + 0x1c894: 0x6c4b3420, 0x1c895: 0x6c778220, 0x1c896: 0x6c33dc20, 0x1c897: 0x6c49d620, + 0x1c898: 0x6d02b820, 0x1c899: 0x6d358c20, 0x1c89a: 0x6c4a2e20, 0x1c89b: 0x6c49d820, + 0x1c89c: 0x6cef9420, 0x1c89d: 0x6cbb5420, 0x1c89e: 0x6c0be420, 0x1c89f: 0x6c268420, + 0x1c8a0: 0x6cf99820, 0x1c8a1: 0x6d329a20, 0x1c8a2: 0x6d39fc20, 0x1c8a3: 0x6c785e20, + 0x1c8a4: 0x6d2fa220, 0x1c8a5: 0x6c3e1420, 0x1c8a6: 0x6c036e20, 0x1c8a7: 0x6d017420, + 0x1c8a8: 0x6c34dc20, 0x1c8a9: 0x6c8e1e20, 0x1c8aa: 0x6d3cf220, 0x1c8ab: 0x6d087a20, + 0x1c8ac: 0x6c721420, 0x1c8ad: 0x6ce08e20, 0x1c8ae: 0x6cad8420, 0x1c8af: 0x6c6f0220, + 0x1c8b0: 0x6cad5020, 0x1c8b1: 0x6cdf1e20, 0x1c8b2: 0x6cdf2020, 0x1c8b3: 0x6c0dd220, + 0x1c8b4: 0x6d100c20, 0x1c8b5: 0x6ce6f020, 0x1c8b6: 0x6c4d9420, 0x1c8b7: 0x6d3ac220, + 0x1c8b8: 0x6d2cb820, 0x1c8b9: 0x6c2d0a20, 0x1c8ba: 0x6cf07a20, 0x1c8bb: 0x6cd25220, + 0x1c8bc: 0x6c88e620, 0x1c8bd: 0x6c1bfc20, 0x1c8be: 0x6c5a4a20, 0x1c8bf: 0x6d397820, + // Block 0x723, offset 0x1c8c0 + 0x1c8c0: 0x6c54ae20, 0x1c8c1: 0x6cd77020, 0x1c8c2: 0x6c806e20, 0x1c8c3: 0x6ce63620, + 0x1c8c4: 0x6c68de20, 0x1c8c5: 0x6d06a820, 0x1c8c6: 0x6c525e20, 0x1c8c7: 0x6cc35420, + 0x1c8c8: 0x6c8af020, 0x1c8c9: 0x6c590820, 0x1c8ca: 0x6d0fa020, 0x1c8cb: 0x6d04c420, + 0x1c8cc: 0x6d04c620, 0x1c8cd: 0x6cfbfe20, 0x1c8ce: 0x6d1a3020, 0x1c8cf: 0x6cf36020, + 0x1c8d0: 0x6d386620, 0x1c8d1: 0x6d10e220, 0x1c8d2: 0x6cd35020, 0x1c8d3: 0x6cee6e20, + 0x1c8d4: 0x6ce73620, 0x1c8d5: 0x6c9ece20, 0x1c8d6: 0x6d28fe20, 0x1c8d7: 0x6c768420, + 0x1c8d8: 0x6c529e20, 0x1c8d9: 0x6c81d020, 0x1c8da: 0x6cf9a820, 0x1c8db: 0x6d3a0420, + 0x1c8dc: 0x6d084a20, 0x1c8dd: 0x6d32a020, 0x1c8de: 0x6cb37820, 0x1c8df: 0x6d0be420, + 0x1c8e0: 0x6c5b2e20, 0x1c8e1: 0x6c49e620, 0x1c8e2: 0x6c180e20, 0x1c8e3: 0x6c5aa420, + 0x1c8e4: 0x6c77a820, 0x1c8e5: 0x6c194c20, 0x1c8e6: 0x6c389020, 0x1c8e7: 0x6cce6220, + 0x1c8e8: 0x6d12e220, 0x1c8e9: 0x6c5bac20, 0x1c8eb: 0x6ce19a20, + 0x1c8ec: 0x6c6cf220, 0x1c8ed: 0x6cc55020, 0x1c8ee: 0x6c8b9620, 0x1c8ef: 0x6cf5f220, + 0x1c8f0: 0x6c3e5420, 0x1c8f1: 0x6c6f0a20, 0x1c8f2: 0x6d019420, 0x1c8f3: 0x6cb48a20, + 0x1c8f4: 0x6ce64220, 0x1c8f5: 0x6d3d3c20, 0x1c8f6: 0x6ce6c020, 0x1c8f7: 0x6cecd420, + 0x1c8f8: 0x6c4d4020, 0x1c8f9: 0x6cae6a20, 0x1c8fa: 0x6c80fc20, 0x1c8fb: 0x6d0e5220, + 0x1c8fc: 0x6d06bc20, 0x1c8fd: 0x6c3c3e20, 0x1c8fe: 0x6c1c1020, 0x1c8ff: 0x6cc66820, + // Block 0x724, offset 0x1c900 + 0x1c900: 0x6c554620, 0x1c901: 0x6cf5f420, 0x1c902: 0x6cd4ce20, 0x1c903: 0x6c51c420, + 0x1c904: 0x6d099620, 0x1c905: 0x6c7a9220, 0x1c906: 0x6c72e820, 0x1c907: 0x6cfeb620, + 0x1c908: 0x6cf5f620, 0x1c909: 0x6d0bfa20, 0x1c90a: 0x6c4eb220, 0x1c90b: 0x6d3c3c20, + 0x1c90c: 0x6c75b020, 0x1c90d: 0x6c2c4220, 0x1c90e: 0x6d019620, 0x1c90f: 0x6c601c20, + 0x1c910: 0x6cf4e020, 0x1c911: 0x6d0bfc20, 0x1c912: 0x6c942c20, 0x1c913: 0x6c4e0620, + 0x1c914: 0x6d0e6220, 0x1c915: 0x6c591220, 0x1c916: 0x6c9aee20, 0x1c917: 0x6c711620, + 0x1c918: 0x6c2a1020, 0x1c919: 0x6c072420, 0x1c91a: 0x6c3b7a20, 0x1c91b: 0x6c8c5220, + 0x1c91c: 0x6c7d6220, 0x1c91d: 0x6c5d2820, 0x1c91e: 0x6cea2220, 0x1c91f: 0x6cf61620, + 0x1c920: 0x6c253e20, 0x1c921: 0x6cf3c820, 0x1c922: 0x6c52a820, 0x1c923: 0x6c179c20, + 0x1c924: 0x6c3f6220, 0x1c925: 0x6cf2f420, 0x1c926: 0x6c684820, 0x1c927: 0x6c231820, + 0x1c928: 0x6c3ce220, 0x1c929: 0x6cb2a620, 0x1c92a: 0x6cbf2620, 0x1c92b: 0x6cc91e20, + 0x1c92c: 0x6cf61820, 0x1c92d: 0x6cbf2820, 0x1c92e: 0x6d033420, 0x1c92f: 0x6c174420, + 0x1c930: 0x6d0e7420, 0x1c931: 0x6d0e7620, 0x1c932: 0x6d17aa20, 0x1c933: 0x6c744e20, + 0x1c934: 0x6d234620, 0x1c935: 0x6c42a820, 0x1c936: 0x6cc47820, 0x1c937: 0x6caff020, + 0x1c938: 0x6d049420, 0x1c939: 0x6cee6420, 0x1c93a: 0x6cd10420, 0x1c93b: 0x6c171420, + 0x1c93c: 0x6cce6e20, 0x1c93d: 0x6d048420, 0x1c93e: 0x6ca72420, 0x1c93f: 0x6c44d020, + // Block 0x725, offset 0x1c940 + 0x1c940: 0x6cf13e20, 0x1c941: 0x6c18d420, 0x1c942: 0x6c51ce20, 0x1c943: 0x6c7cd220, + 0x1c944: 0x6d37fe20, 0x1c945: 0x6c32cc20, 0x1c946: 0x6cf96a20, 0x1c947: 0x6c5ac620, + 0x1c948: 0x6c3ce420, 0x1c949: 0x6c890620, 0x1c94a: 0x6d07a820, 0x1c94b: 0x6d037e20, + 0x1c94c: 0x6c59d220, 0x1c94d: 0x6c690a20, 0x1c94e: 0x6c64b620, 0x1c94f: 0x6c09cc20, + 0x1c950: 0x6d1bbc20, 0x1c951: 0x6d3a7020, 0x1c952: 0x6cefde20, 0x1c953: 0x6ce93620, + 0x1c954: 0x6ccd4a20, 0x1c955: 0x6cf67020, 0x1c956: 0x6caa9620, 0x1c957: 0x6caa9820, + 0x1c958: 0x6c150220, 0x1c959: 0x6d0c1220, 0x1c95a: 0x6c6f1020, 0x1c95b: 0x6c6f2420, + 0x1c95c: 0x6d237020, 0x1c95d: 0x6c9a9c20, 0x1c95e: 0x6ccbfc20, 0x1c95f: 0x6cf0a620, + 0x1c960: 0x6d2c3820, 0x1c961: 0x6d033620, 0x1c962: 0x6cbf3e20, 0x1c963: 0x6cc75020, + 0x1c964: 0x6c9a0c20, 0x1c965: 0x6c593620, 0x1c966: 0x6d06f420, 0x1c967: 0x6d2fbe20, + 0x1c968: 0x6ceea020, 0x1c969: 0x6c38a620, 0x1c96a: 0x6cc07620, 0x1c96b: 0x6cdc4a20, + 0x1c96c: 0x6d0fc820, 0x1c96d: 0x6c8b1620, 0x1c96e: 0x6d3a6e20, 0x1c96f: 0x6c6a2220, + 0x1c970: 0x6c434e20, 0x1c971: 0x6c485c20, 0x1c972: 0x6c05b420, 0x1c973: 0x6c557020, + 0x1c974: 0x6d275820, 0x1c975: 0x6cf96c20, 0x1c976: 0x6cd41a20, 0x1c977: 0x6c89ce20, + 0x1c978: 0x6c0afa20, 0x1c979: 0x6c46c420, 0x1c97a: 0x6cea0020, 0x1c97b: 0x6ce11420, + 0x1c97c: 0x6c17a020, 0x1c97d: 0x6cccfc20, 0x1c97e: 0x6c371a20, 0x1c97f: 0x6c0f2a20, + // Block 0x726, offset 0x1c980 + 0x1c980: 0x6c5a5a20, 0x1c981: 0x6d00ce20, 0x1c982: 0x6cf8ae20, 0x1c983: 0x6cf50e20, + 0x1c984: 0x6cf67220, 0x1c985: 0x6d284220, 0x1c986: 0x6c515a20, 0x1c987: 0x6c51d220, + 0x1c988: 0x6cf67420, 0x1c989: 0x6d27bc20, 0x1c98a: 0x6d048020, 0x1c98b: 0x6ca37e20, + 0x1c98c: 0x6ccd5020, 0x1c98d: 0x6cbf8e20, 0x1c98e: 0x6d121620, 0x1c98f: 0x6d099e20, + 0x1c990: 0x6c9d6c20, 0x1c991: 0x6c882420, 0x1c992: 0x6d1c8820, 0x1c993: 0x6cf45a20, + 0x1c994: 0x6cc69a20, 0x1c995: 0x6c459e20, 0x1c996: 0x6d0f3820, 0x1c997: 0x6cbb5820, + 0x1c998: 0x6c8e3820, 0x1c999: 0x6cf67620, 0x1c99a: 0x6c09f820, 0x1c99b: 0x6c0c1820, + 0x1c99c: 0x6c233e20, 0x1c99d: 0x6c92a620, 0x1c99e: 0x6c64d620, 0x1c99f: 0x6cd53420, + 0x1c9a0: 0x6d185620, 0x1c9a1: 0x6c90b220, 0x1c9a2: 0x6caeb620, 0x1c9a3: 0x6cdbd420, + 0x1c9a4: 0x6d185820, 0x1c9a5: 0x6ce28e20, 0x1c9a6: 0x6c749420, 0x1c9a7: 0x6d3fb220, + 0x1c9a8: 0x6d284620, 0x1c9a9: 0x6c56c020, 0x1c9aa: 0x6d154820, 0x1c9ab: 0x6d36b420, + 0x1c9ac: 0x6c026220, 0x1c9ad: 0x6cf0bc20, 0x1c9ae: 0x6c8f1420, 0x1c9af: 0x6c4efa20, + 0x1c9b0: 0x6cab4c20, 0x1c9b1: 0x6cc55420, 0x1c9b2: 0x6c6f2c20, 0x1c9b3: 0x6c97fc20, + 0x1c9b4: 0x6c7de220, 0x1c9b5: 0x6cce1820, 0x1c9b6: 0x6c24b220, 0x1c9b7: 0x6d2b9020, + 0x1c9b8: 0x6c64f620, 0x1c9b9: 0x6cf6c620, 0x1c9ba: 0x6cf6c820, 0x1c9bb: 0x6cf6ca20, + 0x1c9bc: 0x6d185a20, 0x1c9bd: 0x6d000c20, 0x1c9be: 0x6c1c6e20, 0x1c9bf: 0x6c59ea20, + // Block 0x727, offset 0x1c9c0 + 0x1c9c0: 0x6c15e420, 0x1c9c1: 0x6d131820, 0x1c9c2: 0x6ce01020, 0x1c9c3: 0x6cc48820, + 0x1c9c4: 0x6d0ec020, 0x1c9c5: 0x6cfb9420, 0x1c9c6: 0x6cbbae20, 0x1c9c7: 0x6c75e820, + 0x1c9c8: 0x6c2aaa20, 0x1c9c9: 0x6c340a20, 0x1c9ca: 0x6cd01820, 0x1c9cb: 0x6c687a20, + 0x1c9cc: 0x6c3b9620, 0x1c9cd: 0x6cd82a20, 0x1c9ce: 0x6c8a1a20, 0x1c9cf: 0x6d23ee20, + 0x1c9d0: 0x6c8bde20, 0x1c9d1: 0x6ce78a20, 0x1c9d2: 0x6cce8420, 0x1c9d3: 0x6c3b4620, + 0x1c9d4: 0x6c38bc20, 0x1c9d5: 0x6d0ec220, 0x1c9d6: 0x6d0a3e20, 0x1c9d7: 0x6c807620, + 0x1c9d8: 0x6c9a6a20, 0x1c9d9: 0x6ce1a220, 0x1c9da: 0x6d18a220, 0x1c9db: 0x6c6e3020, + 0x1c9dc: 0x6c9afc20, 0x1c9dd: 0x6c6ecc20, 0x1c9de: 0x6c694420, 0x1c9df: 0x6d1c9a20, + 0x1c9e0: 0x6d23f020, 0x1c9e1: 0x6d18ca20, 0x1c9e2: 0x6d091e20, 0x1c9e3: 0x6c7fc020, + 0x1c9e4: 0x6cdf8020, 0x1c9e5: 0x6d2a9220, 0x1c9e6: 0x6c120c20, 0x1c9e7: 0x6cdc7420, + 0x1c9e8: 0x6cf6ea20, 0x1c9e9: 0x6cc40220, 0x1c9ea: 0x6c235420, 0x1c9eb: 0x6c886220, + 0x1c9ec: 0x6c5b6e20, 0x1c9ed: 0x6d3a2c20, 0x1c9ee: 0x6d022c20, 0x1c9ef: 0x6c8d6e20, + 0x1c9f0: 0x6ceec020, 0x1c9f1: 0x6d18cc20, 0x1c9f2: 0x6d00fc20, 0x1c9f3: 0x6d2fe220, + 0x1c9f4: 0x6c5c5220, 0x1c9f5: 0x6c270020, 0x1c9f6: 0x6ca9ce20, 0x1c9f7: 0x6c7fc220, + 0x1c9f8: 0x6cc7de20, 0x1c9f9: 0x6cfc3a20, 0x1c9fa: 0x6c77b620, 0x1c9fb: 0x6d09ba20, + 0x1c9fc: 0x6c6d6620, 0x1c9fd: 0x6c1df820, 0x1c9fe: 0x6c2a3a20, 0x1c9ff: 0x6d123020, + // Block 0x728, offset 0x1ca00 + 0x1ca00: 0x6c51fc20, 0x1ca01: 0x6c807e20, 0x1ca02: 0x6c0c4220, 0x1ca03: 0x6cc6ce20, + 0x1ca04: 0x6c86d020, 0x1ca05: 0x6ca18220, 0x1ca06: 0x6c067820, 0x1ca07: 0x6cc93220, + 0x1ca08: 0x6c941420, 0x1ca09: 0x6c7ea620, 0x1ca0a: 0x6c023620, 0x1ca0b: 0x6d0ab020, + 0x1ca0c: 0x6c7c1020, 0x1ca0d: 0x6cd7aa20, 0x1ca0e: 0x6c8ab420, 0x1ca0f: 0x6c872020, + 0x1ca10: 0x6c918420, 0x1ca11: 0x6c74ea20, 0x1ca12: 0x6c8a8620, 0x1ca13: 0x6d0efa20, + 0x1ca14: 0x6cf73a20, 0x1ca15: 0x6d025a20, 0x1ca16: 0x6c8fde20, 0x1ca17: 0x6d136e20, + 0x1ca18: 0x6c121a20, 0x1ca19: 0x6cc50c20, 0x1ca1a: 0x6d271420, 0x1ca1b: 0x6c808820, + 0x1ca1c: 0x6c23ce20, 0x1ca1d: 0x6c750c20, 0x1ca1e: 0x6c1d3220, 0x1ca1f: 0x6c49b620, + 0x1ca20: 0x6c72d620, 0x1ca21: 0x6c185620, 0x1ca22: 0x6c9cba20, 0x1ca23: 0x6ce19220, + 0x1ca24: 0x6c809220, 0x1ca25: 0x6d3a4820, 0x1ca26: 0x6c809a20, 0x1ca27: 0x6c8dda20, + 0x1ca28: 0x6c24c420, 0x1ca29: 0x6d24b220, 0x1ca2a: 0x6d2f8020, 0x1ca2b: 0x6d2ff420, + 0x1ca2c: 0x6cabd220, 0x1ca2d: 0x6d328c20, 0x1ca2e: 0x6cad5220, 0x1ca2f: 0x6c195820, + 0x1ca30: 0x6d254620, 0x1ca31: 0x6c009620, 0x1ca32: 0x6cf09c20, 0x1ca33: 0x6c4f4420, + 0x1ca34: 0x6c749620, 0x1ca35: 0x6c74c820, 0x1ca36: 0x6c3fa020, 0x1ca37: 0x6d13b020, + 0x1ca38: 0x6c03aa20, 0x1ca39: 0x6c2e5620, 0x1ca3a: 0x6d13b420, 0x1ca3b: 0x6d10c620, + 0x1ca3c: 0x6d411020, 0x1ca3d: 0x6cd6d020, 0x1ca3e: 0x6c379e20, 0x1ca3f: 0x6cac5020, + // Block 0x729, offset 0x1ca40 + 0x1ca40: 0x6c206e20, 0x1ca41: 0x6c77e220, 0x1ca42: 0x6d29d420, 0x1ca43: 0x6c2ec020, + 0x1ca44: 0x6cbace20, 0x1ca45: 0x6d1dfc20, 0x1ca46: 0x6cbb2a20, 0x1ca47: 0x6cb14420, + 0x1ca48: 0x6c04be20, 0x1ca49: 0x6cacac20, 0x1ca4a: 0x6c175a20, 0x1ca4b: 0x6c64a020, + 0x1ca4c: 0x6cac0020, 0x1ca4d: 0x6c31a020, 0x1ca4e: 0x6c205420, 0x1ca4f: 0x6d215a20, + 0x1ca50: 0x6d2c3a20, 0x1ca51: 0x6c0afc20, 0x1ca52: 0x6c2ec220, 0x1ca53: 0x6c055420, + 0x1ca54: 0x6c0f2c20, 0x1ca55: 0x6c205a20, 0x1ca56: 0x6d1fea20, 0x1ca57: 0x6d206e20, + 0x1ca58: 0x6c31d620, 0x1ca59: 0x6d0b0820, 0x1ca5a: 0x6c197220, 0x1ca5b: 0x6ca96620, + 0x1ca5c: 0x6ca9ac20, 0x1ca5d: 0x6cb24020, 0x1ca5e: 0x6c6f4c20, 0x1ca5f: 0x6ca1be20, + 0x1ca60: 0x6cdde020, 0x1ca61: 0x6ca22420, 0x1ca62: 0x6c814220, 0x1ca63: 0x6cc5c420, + 0x1ca64: 0x6c981a20, 0x1ca65: 0x6c398a20, 0x1ca66: 0x6c98ca20, 0x1ca67: 0x6ca27020, + 0x1ca68: 0x6c426020, 0x1ca69: 0x6cf4b820, 0x1ca6a: 0x6d0e4020, 0x1ca6b: 0x6c437420, + 0x1ca6c: 0x6c06ec20, 0x1ca6d: 0x6cd8a020, 0x1ca6e: 0x6c665e20, 0x1ca6f: 0x6c476620, + 0x1ca70: 0x6d202c20, 0x1ca71: 0x6c437e20, 0x1ca72: 0x6cd0f220, 0x1ca73: 0x6ca23020, + 0x1ca74: 0x6c2be620, 0x1ca75: 0x6cb8be20, 0x1ca76: 0x6cc37020, 0x1ca77: 0x6cc2cc20, + 0x1ca78: 0x6d3f4020, 0x1ca79: 0x6ce27020, 0x1ca7a: 0x6cf5c420, 0x1ca7b: 0x6c985620, + 0x1ca7c: 0x6c793820, 0x1ca7d: 0x6cb8d820, 0x1ca7e: 0x6cf44620, 0x1ca7f: 0x6c481220, + // Block 0x72a, offset 0x1ca80 + 0x1ca80: 0x6cf61a20, 0x1ca81: 0x6c83c220, 0x1ca82: 0x6c83da20, 0x1ca83: 0x6cb3f420, + 0x1ca84: 0x6c5ed420, 0x1ca85: 0x6c428220, 0x1ca86: 0x6d346420, 0x1ca87: 0x6c078820, + 0x1ca88: 0x6cc2f220, 0x1ca89: 0x6c214e20, 0x1ca8a: 0x6c31a220, 0x1ca8b: 0x6c724a20, + 0x1ca8c: 0x6c636e20, 0x1ca8d: 0x6c64a220, 0x1ca8e: 0x6c3c5620, 0x1ca8f: 0x6cb0f820, + 0x1ca90: 0x6c780820, 0x1ca91: 0x6c713020, 0x1ca92: 0x6c77c220, 0x1ca93: 0x6c1e9c20, + 0x1ca94: 0x6cf8b220, 0x1ca95: 0x6c074020, 0x1ca96: 0x6c961820, 0x1ca97: 0x6c6bf220, + 0x1ca98: 0x6c967220, 0x1ca99: 0x6cca0820, 0x1ca9a: 0x6cf0be20, 0x1ca9b: 0x6c98fc20, + 0x1ca9c: 0x6c33b020, 0x1ca9d: 0x6ce78c20, 0x1ca9e: 0x6cbc7620, 0x1ca9f: 0x6c67fc20, + 0x1caa0: 0x6cf94820, 0x1caa1: 0x6c86d220, 0x1caa2: 0x6c31d820, 0x1caa3: 0x6c8b5e20, + 0x1caa4: 0x6cac1020, 0x1caa5: 0x6cb16e20, 0x1caa6: 0x6c0fa620, 0x1caa7: 0x6cf73c20, + 0x1caa8: 0x6c1d8620, 0x1caa9: 0x6cef6820, 0x1caaa: 0x6c7cc220, 0x1caab: 0x6c1d8a20, + 0x1caac: 0x6cc34c20, 0x1caad: 0x6cc38020, 0x1caae: 0x6c035e20, 0x1caaf: 0x6c391620, + 0x1cab0: 0x6cbff420, 0x1cab1: 0x6c611c20, 0x1cab2: 0x6c110420, 0x1cab3: 0x6d3d2220, + 0x1cab4: 0x6c019c20, 0x1cab5: 0x6c436820, 0x1cab6: 0x6d3c3020, 0x1cab7: 0x6c4a0620, + 0x1cab8: 0x6c96b020, 0x1cab9: 0x6d1eee20, 0x1caba: 0x6c778020, 0x1cabb: 0x6c0eae20, + 0x1cabc: 0x6c544a20, 0x1cabd: 0x6d0b7620, 0x1cabe: 0x6d1a2820, 0x1cabf: 0x6c582620, + // Block 0x72b, offset 0x1cac0 + 0x1cac0: 0x6d3c3420, 0x1cac1: 0x6d27da20, 0x1cac2: 0x6c7bba20, 0x1cac3: 0x6ca97a20, + 0x1cac4: 0x6c2b5420, 0x1cac5: 0x6cbe2e20, 0x1cac6: 0x6d381420, 0x1cac7: 0x6ca26a20, + 0x1cac8: 0x6c06d820, 0x1cac9: 0x6caf4220, 0x1caca: 0x6c70fc20, 0x1cacb: 0x6d147420, + 0x1cacc: 0x6cd0e420, 0x1cacd: 0x6cad4e20, 0x1cace: 0x6cf98e20, 0x1cacf: 0x6ceaf220, + 0x1cad0: 0x6c552620, 0x1cad1: 0x6c8cae20, 0x1cad2: 0x6c3a8a20, 0x1cad3: 0x6cafbe20, + 0x1cad4: 0x6ca62a20, 0x1cad5: 0x6d119020, 0x1cad6: 0x6d201a20, 0x1cad7: 0x6c467020, + 0x1cad8: 0x6d094620, 0x1cad9: 0x6c705e20, 0x1cada: 0x6c286a20, 0x1cadb: 0x6c0eb820, + 0x1cadc: 0x6c7a7420, 0x1cadd: 0x6cfbe820, 0x1cade: 0x6ca8f820, 0x1cadf: 0x6c586620, + 0x1cae0: 0x6c523c20, 0x1cae1: 0x6c68d420, 0x1cae2: 0x6c50dc20, 0x1cae3: 0x6d2fa420, + 0x1cae4: 0x6c5ff620, 0x1cae5: 0x6d0a7220, 0x1cae6: 0x6cccd220, 0x1cae7: 0x6cde3820, + 0x1cae8: 0x6cc65820, 0x1cae9: 0x6cd45620, 0x1caea: 0x6ce72820, 0x1caeb: 0x6c81a820, + 0x1caec: 0x6c318a20, 0x1caed: 0x6cf99c20, 0x1caee: 0x6cd1ae20, 0x1caef: 0x6c7b1a20, + 0x1caf0: 0x6d329c20, 0x1caf1: 0x6d22e420, 0x1caf2: 0x6cdccc20, 0x1caf3: 0x6d20f420, + 0x1caf4: 0x6c096220, 0x1caf5: 0x6c985420, 0x1caf6: 0x6cf5c620, 0x1caf7: 0x6c734c20, + 0x1caf8: 0x6c87e020, 0x1caf9: 0x6cf9aa20, 0x1cafa: 0x6d1a4820, 0x1cafb: 0x6cdb7e20, + 0x1cafc: 0x6c80ae20, 0x1cafd: 0x6c070220, 0x1cafe: 0x6d35c020, 0x1caff: 0x6d0c7420, + // Block 0x72c, offset 0x1cb00 + 0x1cb00: 0x6ccbdc20, 0x1cb01: 0x6c85d220, 0x1cb02: 0x6c4e9e20, 0x1cb03: 0x6cfc0020, + 0x1cb04: 0x6c6dae20, 0x1cb05: 0x6cabfc20, 0x1cb06: 0x6c3a0620, 0x1cb07: 0x6cfeb820, + 0x1cb08: 0x6c044220, 0x1cb09: 0x6cb5cc20, 0x1cb0a: 0x6ca5da20, 0x1cb0b: 0x6c0bfc20, + 0x1cb0c: 0x6d1b5620, 0x1cb0d: 0x6c7efe20, 0x1cb0e: 0x6c8b0220, 0x1cb0f: 0x6c648820, + 0x1cb10: 0x6cbaac20, 0x1cb11: 0x6c7d5a20, 0x1cb12: 0x6d0c0a20, 0x1cb13: 0x6c4cba20, + 0x1cb14: 0x6d402020, 0x1cb15: 0x6c9c4820, 0x1cb16: 0x6c166820, 0x1cb17: 0x6d13e620, + 0x1cb18: 0x6d35e820, 0x1cb19: 0x6d32b420, 0x1cb1a: 0x6d0b2c20, 0x1cb1b: 0x6c9bce20, + 0x1cb1c: 0x6c10f820, 0x1cb1d: 0x6c243620, 0x1cb1e: 0x6cceec20, 0x1cb1f: 0x6c8b9820, + 0x1cb20: 0x6c2d1620, 0x1cb21: 0x6c953e20, 0x1cb22: 0x6c556020, 0x1cb23: 0x6d3f9020, + 0x1cb24: 0x6c4b4620, 0x1cb25: 0x6cefc820, 0x1cb26: 0x6c3c4c20, 0x1cb27: 0x6cf28c20, + 0x1cb28: 0x6d256620, 0x1cb29: 0x6d037420, 0x1cb2a: 0x6d399820, 0x1cb2b: 0x6c98ba20, + 0x1cb2c: 0x6cf14020, 0x1cb2d: 0x6c1fe420, 0x1cb2e: 0x6cfcce20, 0x1cb2f: 0x6ce93420, + 0x1cb30: 0x6d0bb220, 0x1cb31: 0x6ca4ac20, 0x1cb32: 0x6d004220, 0x1cb33: 0x6c636020, + 0x1cb34: 0x6c540620, 0x1cb35: 0x6c0af420, 0x1cb36: 0x6d1f3a20, 0x1cb37: 0x6d1f4820, + 0x1cb38: 0x6c9a0020, 0x1cb39: 0x6c13e420, 0x1cb3a: 0x6d111420, 0x1cb3b: 0x6cdcd620, + 0x1cb3c: 0x6c0f1420, 0x1cb3d: 0x6ca00820, 0x1cb3e: 0x6c574020, 0x1cb3f: 0x6d258620, + // Block 0x72d, offset 0x1cb40 + 0x1cb40: 0x6cd9b420, 0x1cb41: 0x6c96c420, 0x1cb42: 0x6d258820, 0x1cb43: 0x6c270c20, + 0x1cb44: 0x6d239220, 0x1cb45: 0x6cd1d220, 0x1cb46: 0x6c4fcc20, 0x1cb47: 0x6cbb6420, + 0x1cb48: 0x6d17ea20, 0x1cb49: 0x6d316a20, 0x1cb4a: 0x6c123420, 0x1cb4b: 0x6c4fe220, + 0x1cb4c: 0x6c97ee20, 0x1cb4d: 0x6c6e9620, 0x1cb4e: 0x6c67b820, 0x1cb4f: 0x6ca12e20, + 0x1cb50: 0x6d2ecc20, 0x1cb51: 0x6c150a20, 0x1cb52: 0x6c026420, 0x1cb53: 0x6c025420, + 0x1cb54: 0x6c4fd420, 0x1cb55: 0x6c24e020, 0x1cb56: 0x6c07c420, 0x1cb57: 0x6c749820, + 0x1cb58: 0x6c0a2c20, 0x1cb59: 0x6c09fe20, 0x1cb5a: 0x6c59dc20, 0x1cb5b: 0x6cb44a20, + 0x1cb5c: 0x6c8bd020, 0x1cb5d: 0x6d072620, 0x1cb5e: 0x6ce77e20, 0x1cb5f: 0x6d121e20, + 0x1cb60: 0x6c8a1220, 0x1cb61: 0x6cd79020, 0x1cb62: 0x6cff0620, 0x1cb63: 0x6cd49020, + 0x1cb64: 0x6c33a820, 0x1cb65: 0x6c69c620, 0x1cb66: 0x6c442020, 0x1cb67: 0x6c739020, + 0x1cb68: 0x6c31b420, 0x1cb69: 0x6c5c3820, 0x1cb6a: 0x6c7b3e20, 0x1cb6b: 0x6cfc2c20, + 0x1cb6c: 0x6d021820, 0x1cb6d: 0x6cde1820, 0x1cb6e: 0x6cfc3220, 0x1cb6f: 0x6d09b020, + 0x1cb70: 0x6ca92620, 0x1cb71: 0x6cb21820, 0x1cb72: 0x6c5dfc20, 0x1cb73: 0x6caa2a20, + 0x1cb74: 0x6c9be620, 0x1cb75: 0x6c8b5420, 0x1cb76: 0x6ca51e20, 0x1cb77: 0x6c4a0c20, + 0x1cb78: 0x6cd48420, 0x1cb79: 0x6c917420, 0x1cb7a: 0x6cde2020, 0x1cb7b: 0x6cfd3c20, + 0x1cb7c: 0x6c9ca220, 0x1cb7d: 0x6cc4e820, 0x1cb7e: 0x6c584020, 0x1cb7f: 0x6ca52820, + // Block 0x72e, offset 0x1cb80 + 0x1cb80: 0x6c957820, 0x1cb81: 0x6cfc5420, 0x1cb82: 0x6cb6ac20, 0x1cb83: 0x6c751e20, + 0x1cb84: 0x6d07fa20, 0x1cb85: 0x6c9eae20, 0x1cb86: 0x6d3e1a20, 0x1cb87: 0x6c93d620, + 0x1cb88: 0x6c914c20, 0x1cb89: 0x6d22b820, 0x1cb8a: 0x6cda7a20, 0x1cb8b: 0x6cedda20, + 0x1cb8c: 0x6cbff620, 0x1cb8d: 0x6c40d220, 0x1cb8e: 0x6c2f4c20, 0x1cb8f: 0x6c821620, + 0x1cb90: 0x6c031620, 0x1cb91: 0x6c5e7c20, 0x1cb92: 0x6c52fa20, 0x1cb93: 0x6c2c1a20, + 0x1cb94: 0x6c202e20, 0x1cb95: 0x6c416c20, 0x1cb96: 0x6c6fac20, 0x1cb97: 0x6d20be20, + 0x1cb98: 0x6cb6d820, 0x1cb99: 0x6d20c020, 0x1cb9a: 0x6c170620, 0x1cb9b: 0x6c969020, + 0x1cb9c: 0x6c456420, 0x1cb9d: 0x6cf43020, 0x1cb9e: 0x6c3d4220, 0x1cb9f: 0x6cf18420, + 0x1cba0: 0x6c6bc620, 0x1cba1: 0x6d0b1a20, 0x1cba2: 0x6c0d2620, 0x1cba3: 0x6c0b8020, + 0x1cba4: 0x6c056220, 0x1cba5: 0x6d268820, 0x1cba6: 0x6c73f220, 0x1cba7: 0x6c9ac220, + 0x1cba8: 0x6c73f420, 0x1cba9: 0x6cecca20, 0x1cbaa: 0x6c646e20, 0x1cbab: 0x6c99da20, + 0x1cbac: 0x6c282420, 0x1cbad: 0x6cb20420, 0x1cbae: 0x6cef9620, 0x1cbaf: 0x6c585820, + 0x1cbb0: 0x6cfc8020, 0x1cbb1: 0x6cbaa820, 0x1cbb2: 0x6c8cbe20, 0x1cbb3: 0x6c274a20, + 0x1cbb4: 0x6d16fc20, 0x1cbb5: 0x6c016820, 0x1cbb6: 0x6cb28820, 0x1cbb7: 0x6c2d4620, + 0x1cbb8: 0x6c3e1620, 0x1cbb9: 0x6d080220, 0x1cbba: 0x6cf7da20, 0x1cbbb: 0x6c0e5820, + 0x1cbbc: 0x6c229420, 0x1cbbd: 0x6c467820, 0x1cbbe: 0x6c640620, 0x1cbbf: 0x6cce9e20, + // Block 0x72f, offset 0x1cbc0 + 0x1cbc0: 0x6cb37220, 0x1cbc1: 0x6c222220, 0x1cbc2: 0x6c77e420, 0x1cbc3: 0x6cc4bc20, + 0x1cbc4: 0x6cd0f420, 0x1cbc5: 0x6ccfbe20, 0x1cbc6: 0x6d14a820, 0x1cbc7: 0x6d411220, + 0x1cbc8: 0x6c633c20, 0x1cbc9: 0x6c9f3a20, 0x1cbca: 0x6cccd420, 0x1cbcb: 0x6c8efe20, + 0x1cbcc: 0x6c095020, 0x1cbcd: 0x6d312c20, 0x1cbce: 0x6d312e20, 0x1cbcf: 0x6c73fc20, + 0x1cbd0: 0x6c383820, 0x1cbd1: 0x6c8f7820, 0x1cbd2: 0x6c6c3e20, 0x1cbd3: 0x6c698e20, + 0x1cbd4: 0x6c667020, 0x1cbd5: 0x6c85d420, 0x1cbd6: 0x6c4a1e20, 0x1cbd7: 0x6cfa9220, + 0x1cbd8: 0x6d386820, 0x1cbd9: 0x6c45e420, 0x1cbda: 0x6d0be820, 0x1cbdb: 0x6d053420, + 0x1cbdc: 0x6d0fa420, 0x1cbdd: 0x6d063620, 0x1cbde: 0x6c95f620, 0x1cbdf: 0x6cda9020, + 0x1cbe0: 0x6d399420, 0x1cbe1: 0x6cbd6420, 0x1cbe2: 0x6d1a4a20, 0x1cbe3: 0x6d09fe20, + 0x1cbe4: 0x6c05f620, 0x1cbe5: 0x6c379220, 0x1cbe6: 0x6cfe2a20, 0x1cbe7: 0x6d10e420, + 0x1cbe8: 0x6cf9ac20, 0x1cbe9: 0x6c4f6620, 0x1cbea: 0x6c4a4a20, 0x1cbeb: 0x6c1cba20, + 0x1cbec: 0x6d06ac20, 0x1cbed: 0x6c047820, 0x1cbee: 0x6cae1620, 0x1cbef: 0x6c81f020, + 0x1cbf0: 0x6c28fa20, 0x1cbf1: 0x6d1d6420, 0x1cbf2: 0x6c5aa620, 0x1cbf3: 0x6cf19220, + 0x1cbf4: 0x6c355c20, 0x1cbf5: 0x6c19e820, 0x1cbf6: 0x6c2c4420, 0x1cbf7: 0x6cf44c20, + 0x1cbf8: 0x6cf3c420, 0x1cbf9: 0x6c19e020, 0x1cbfa: 0x6c75b220, 0x1cbfb: 0x6c99ee20, + 0x1cbfc: 0x6c071220, 0x1cbfd: 0x6ce6c220, 0x1cbfe: 0x6cfcb420, 0x1cbff: 0x6c1f3220, + // Block 0x730, offset 0x1cc00 + 0x1cc00: 0x6c4e0820, 0x1cc01: 0x6d081220, 0x1cc02: 0x6d0c8820, 0x1cc03: 0x6cc05020, + 0x1cc04: 0x6d088a20, 0x1cc05: 0x6c80be20, 0x1cc06: 0x6c851420, 0x1cc07: 0x6d053c20, + 0x1cc08: 0x6c3e5620, 0x1cc09: 0x6c8e5020, 0x1cc0a: 0x6d0b1e20, 0x1cc0b: 0x6cf5f820, + 0x1cc0c: 0x6c8cec20, 0x1cc0d: 0x6c83c420, 0x1cc0e: 0x6c6d0420, 0x1cc0f: 0x6c88b620, + 0x1cc10: 0x6cdd6020, 0x1cc11: 0x6cddd620, 0x1cc12: 0x6c3cfe20, 0x1cc13: 0x6cecd620, + 0x1cc14: 0x6c2d5a20, 0x1cc15: 0x6cb20c20, 0x1cc16: 0x6d2df020, 0x1cc17: 0x6ccb2c20, + 0x1cc18: 0x6c9f5620, 0x1cc19: 0x6d234820, 0x1cc1a: 0x6c709420, 0x1cc1b: 0x6c186820, + 0x1cc1c: 0x6c7f0a20, 0x1cc1d: 0x6cf19620, 0x1cc1e: 0x6cd16c20, 0x1cc1f: 0x6cef1420, + 0x1cc20: 0x6ce4f620, 0x1cc21: 0x6c1f4020, 0x1cc22: 0x6d423c20, 0x1cc23: 0x6c081e20, + 0x1cc24: 0x6c196020, 0x1cc25: 0x6c562220, 0x1cc26: 0x6cb5ea20, 0x1cc27: 0x6c365e20, + 0x1cc28: 0x6c7d6420, 0x1cc29: 0x6c167020, 0x1cc2a: 0x6cb5ec20, 0x1cc2b: 0x6c082020, + 0x1cc2c: 0x6ced2020, 0x1cc2d: 0x6c925620, 0x1cc2e: 0x6c239e20, 0x1cc2f: 0x6c495220, + 0x1cc30: 0x6d0d9020, 0x1cc31: 0x6c2dca20, 0x1cc32: 0x6c072620, 0x1cc33: 0x6c8bb620, + 0x1cc34: 0x6cbd7220, 0x1cc35: 0x6caff220, 0x1cc36: 0x6cabd620, 0x1cc37: 0x6cc3b820, + 0x1cc38: 0x6d3d6220, 0x1cc39: 0x6cbd7420, 0x1cc3a: 0x6c383c20, 0x1cc3b: 0x6c6d8020, + 0x1cc3c: 0x6cbf2a20, 0x1cc3d: 0x6c321a20, 0x1cc3e: 0x6c6bec20, 0x1cc3f: 0x6c5cf220, + // Block 0x731, offset 0x1cc40 + 0x1cc40: 0x6d226c20, 0x1cc41: 0x6c999820, 0x1cc42: 0x6c9a1020, 0x1cc43: 0x6c210e20, + 0x1cc44: 0x6d07aa20, 0x1cc45: 0x6ce34a20, 0x1cc46: 0x6d038020, 0x1cc47: 0x6c277a20, + 0x1cc48: 0x6cc75220, 0x1cc49: 0x6c9f6020, 0x1cc4a: 0x6c64b820, 0x1cc4b: 0x6cefe020, + 0x1cc4c: 0x6cc86620, 0x1cc4d: 0x6c593820, 0x1cc4e: 0x6d00be20, 0x1cc4f: 0x6c1fe820, + 0x1cc50: 0x6c65ae20, 0x1cc51: 0x6d3bce20, 0x1cc52: 0x6c171620, 0x1cc53: 0x6c890a20, + 0x1cc54: 0x6cc2fe20, 0x1cc55: 0x6cf9d420, 0x1cc56: 0x6c32ce20, 0x1cc57: 0x6d262220, + 0x1cc58: 0x6d0b2e20, 0x1cc59: 0x6ca50220, 0x1cc5a: 0x6c557220, 0x1cc5b: 0x6d1bbe20, + 0x1cc5c: 0x6d215e20, 0x1cc5d: 0x6c59d620, 0x1cc5e: 0x6cc8d420, 0x1cc5f: 0x6ccb3020, + 0x1cc60: 0x6c8e7c20, 0x1cc61: 0x6cd1de20, 0x1cc62: 0x6cc69e20, 0x1cc63: 0x6cdd8220, + 0x1cc64: 0x6d112620, 0x1cc65: 0x6cf15c20, 0x1cc66: 0x6cf45c20, 0x1cc67: 0x6d317e20, + 0x1cc68: 0x6c6d2a20, 0x1cc69: 0x6d1c8a20, 0x1cc6a: 0x6c969e20, 0x1cc6b: 0x6ce1dc20, + 0x1cc6c: 0x6c8e8220, 0x1cc6d: 0x6ce11820, 0x1cc6e: 0x6c864e20, 0x1cc6f: 0x6c80c420, + 0x1cc70: 0x6c4a7020, 0x1cc71: 0x6d325020, 0x1cc72: 0x6cbad020, 0x1cc73: 0x6c25be20, + 0x1cc74: 0x6c748020, 0x1cc75: 0x6d2f8e20, 0x1cc76: 0x6d112820, 0x1cc77: 0x6c00bc20, + 0x1cc78: 0x6c0d4620, 0x1cc79: 0x6cd4f620, 0x1cc7a: 0x6c16c020, 0x1cc7b: 0x6c7d8020, + 0x1cc7c: 0x6d3b8820, 0x1cc7d: 0x6c234020, 0x1cc7e: 0x6c6cb020, 0x1cc7f: 0x6d141620, + // Block 0x732, offset 0x1cc80 + 0x1cc80: 0x6c250020, 0x1cc81: 0x6c234220, 0x1cc82: 0x6cb63820, 0x1cc83: 0x6c841a20, + 0x1cc84: 0x6d1d0820, 0x1cc85: 0x6cdd8a20, 0x1cc86: 0x6cc08c20, 0x1cc87: 0x6d082020, + 0x1cc88: 0x6c026620, 0x1cc89: 0x6c88c420, 0x1cc8a: 0x6c9ad420, 0x1cc8b: 0x6d2eda20, + 0x1cc8c: 0x6d1a9620, 0x1cc8d: 0x6c57e220, 0x1cc8e: 0x6d1be620, 0x1cc8f: 0x6cf0ce20, + 0x1cc90: 0x6c92e620, 0x1cc91: 0x6cf3ec20, 0x1cc92: 0x6c2aac20, 0x1cc93: 0x6d054820, + 0x1cc94: 0x6d2b9420, 0x1cc95: 0x6d0a4220, 0x1cc96: 0x6cc1b420, 0x1cc97: 0x6c299420, + 0x1cc98: 0x6c8be020, 0x1cc99: 0x6c8a1c20, 0x1cc9a: 0x6cbf6220, 0x1cc9b: 0x6cdb3420, + 0x1cc9c: 0x6c59ec20, 0x1cc9d: 0x6c4a8c20, 0x1cc9e: 0x6cb45220, 0x1cc9f: 0x6c6e3220, + 0x1cca0: 0x6c38be20, 0x1cca1: 0x6c6d4220, 0x1cca2: 0x6c8e9820, 0x1cca3: 0x6c5f3620, + 0x1cca4: 0x6c5cae20, 0x1cca5: 0x6c6e3420, 0x1cca6: 0x6c00e220, 0x1cca7: 0x6c0a8e20, + 0x1cca8: 0x6c120e20, 0x1cca9: 0x6cc1d820, 0x1ccaa: 0x6d2a5820, 0x1ccab: 0x6c290c20, + 0x1ccac: 0x6c694c20, 0x1ccad: 0x6c4c0420, 0x1ccae: 0x6ce07e20, 0x1ccaf: 0x6c5c5420, + 0x1ccb0: 0x6c58a620, 0x1ccb1: 0x6ccb7020, 0x1ccb2: 0x6cdc7620, 0x1ccb3: 0x6ce4c620, + 0x1ccb4: 0x6c1f9a20, 0x1ccb5: 0x6d21b820, 0x1ccb6: 0x6c6d6820, 0x1ccb7: 0x6c917620, + 0x1ccb8: 0x6c0d6020, 0x1ccb9: 0x6cd54220, 0x1ccba: 0x6cf21820, 0x1ccbb: 0x6d41a220, + 0x1ccbc: 0x6c7fd020, 0x1ccbd: 0x6cf82020, 0x1ccbe: 0x6d3ea820, 0x1ccbf: 0x6d083020, + // Block 0x733, offset 0x1ccc0 + 0x1ccc0: 0x6cc88420, 0x1ccc1: 0x6cf31e20, 0x1ccc2: 0x6c415820, 0x1ccc3: 0x6c827220, + 0x1ccc4: 0x6c31da20, 0x1ccc5: 0x6c86fe20, 0x1ccc6: 0x6d374020, 0x1ccc7: 0x6cc76a20, + 0x1ccc8: 0x6c848e20, 0x1ccc9: 0x6d29ac20, 0x1ccca: 0x6cbf7620, 0x1cccb: 0x6ce43a20, + 0x1cccc: 0x6c4aa420, 0x1cccd: 0x6cdc0020, 0x1ccce: 0x6c7eb220, 0x1cccf: 0x6c8fe020, + 0x1ccd0: 0x6c918620, 0x1ccd1: 0x6c872620, 0x1ccd2: 0x6d29b220, 0x1ccd3: 0x6c808a20, + 0x1ccd4: 0x6d1c2e20, 0x1ccd5: 0x6c9cb420, 0x1ccd6: 0x6cfd9c20, 0x1ccd7: 0x6cbf8820, + 0x1ccd8: 0x6c49b820, 0x1ccd9: 0x6c2a5020, 0x1ccda: 0x6d29c020, 0x1ccdb: 0x6c58ce20, + 0x1ccdc: 0x6c483e20, 0x1ccdd: 0x6c0eba20, 0x1ccde: 0x6c2e8820, 0x1ccdf: 0x6c0ed820, + 0x1cce0: 0x6c568e20, 0x1cce1: 0x6d347620, 0x1cce2: 0x6cb18020, 0x1cce3: 0x6c050c20, + 0x1cce4: 0x6cc4f020, 0x1cce5: 0x6c87a220, 0x1cce6: 0x6cec0c20, + 0x1cce8: 0x6cfdaa20, 0x1cce9: 0x6cb8aa20, 0x1ccea: 0x6c04c020, 0x1cceb: 0x6cae3a20, + 0x1ccec: 0x6c39c820, 0x1cced: 0x6c282620, 0x1ccee: 0x6cf26c20, 0x1ccef: 0x6cab3420, + 0x1ccf2: 0x6cec4a20, 0x1ccf3: 0x6c552a20, + 0x1ccf4: 0x6c8cc020, 0x1ccf5: 0x6d14aa20, 0x1ccf6: 0x6cb29420, 0x1ccf7: 0x6c223820, + 0x1ccf8: 0x6c042020, 0x1ccf9: 0x6c72ea20, 0x1ccfa: 0x6c16a820, 0x1ccfb: 0x6c1aa820, + 0x1ccfd: 0x6c296820, 0x1ccfe: 0x6c9bd620, 0x1ccff: 0x6c109820, + // Block 0x734, offset 0x1cd00 + 0x1cd00: 0x6d3c8820, 0x1cd01: 0x6cb2aa20, 0x1cd02: 0x6c0afe20, 0x1cd03: 0x6d393220, + 0x1cd04: 0x6d316c20, 0x1cd06: 0x6c225020, 0x1cd07: 0x6d1bd220, + 0x1cd08: 0x6cb7b220, 0x1cd09: 0x6cfb7420, 0x1cd0a: 0x6c90f220, 0x1cd0b: 0x6c2c9220, + 0x1cd0c: 0x6cab5020, 0x1cd0d: 0x6c9b2e20, 0x1cd0e: 0x6d3b8a20, 0x1cd0f: 0x6c084e20, + 0x1cd10: 0x6c8c6420, 0x1cd11: 0x6d2bb020, 0x1cd12: 0x6cf47c20, 0x1cd13: 0x6cb0c220, + 0x1cd14: 0x6c280220, 0x1cd15: 0x6cf27420, 0x1cd16: 0x6d1c0820, 0x1cd17: 0x6d0e0420, + 0x1cd18: 0x6c415c20, 0x1cd19: 0x6c273420, 0x1cd1a: 0x6cd03820, 0x1cd1b: 0x6ce49a20, + 0x1cd1c: 0x6ce49c20, 0x1cd1d: 0x6c4e1c20, 0x1cd1e: 0x6c16b020, 0x1cd1f: 0x6cd0d220, + 0x1cd20: 0x6cbe6e20, 0x1cd21: 0x6ccfcc20, 0x1cd22: 0x6c15aa20, 0x1cd23: 0x6c15ac20, + 0x1cd24: 0x6cc89c20, 0x1cd25: 0x6cd10620, 0x1cd26: 0x6cda4c20, 0x1cd27: 0x6cd00820, + 0x1cd28: 0x6d1e6c20, 0x1cd29: 0x6cd66020, 0x1cd2a: 0x6c920e20, 0x1cd2b: 0x6c40a820, + 0x1cd2c: 0x6d1e1020, 0x1cd2d: 0x6c080e20, 0x1cd2e: 0x6c3cdc20, 0x1cd2f: 0x6ca90820, + 0x1cd30: 0x6ce47e20, 0x1cd31: 0x6d1ee020, 0x1cd32: 0x6c63fc20, 0x1cd33: 0x6ccf9a20, + 0x1cd34: 0x6d2c1820, 0x1cd35: 0x6c2d3220, 0x1cd36: 0x6c3dce20, 0x1cd37: 0x6ca3e220, + 0x1cd38: 0x6c2cbc20, 0x1cd39: 0x6cb24820, 0x1cd3a: 0x6ce62e20, 0x1cd3b: 0x6c578420, + 0x1cd3c: 0x6ce6b220, 0x1cd3d: 0x6d321a20, 0x1cd3e: 0x6d28f620, 0x1cd3f: 0x6c9b0820, + // Block 0x735, offset 0x1cd40 + 0x1cd40: 0x6c093c20, 0x1cd41: 0x6cb58620, 0x1cd42: 0x6c8f2620, 0x1cd43: 0x6d09de20, + 0x1cd44: 0x6c8e4420, 0x1cd45: 0x6c170820, 0x1cd46: 0x6ca23220, 0x1cd47: 0x6d278a20, + 0x1cd48: 0x6c393620, 0x1cd49: 0x6c3e1820, 0x1cd4a: 0x6c44bc20, 0x1cd4b: 0x6ce48e20, + 0x1cd4c: 0x6c6bca20, 0x1cd4d: 0x6c6bcc20, 0x1cd4e: 0x6cc35220, 0x1cd4f: 0x6cf07c20, + 0x1cd50: 0x6c3e1a20, 0x1cd51: 0x6ce49020, 0x1cd52: 0x6ca23420, 0x1cd53: 0x6c341e20, + 0x1cd54: 0x6cacb020, 0x1cd55: 0x6c675620, 0x1cd56: 0x6cebd220, 0x1cd57: 0x6c269020, + 0x1cd58: 0x6ca3f020, 0x1cd59: 0x6c8e4c20, 0x1cd5a: 0x6c079a20, 0x1cd5b: 0x6d31c820, + 0x1cd5c: 0x6c1f2820, 0x1cd5d: 0x6ca23820, 0x1cd5e: 0x6ca23a20, 0x1cd5f: 0x6c12d820, + 0x1cd60: 0x6ce49620, 0x1cd61: 0x6c40f220, 0x1cd62: 0x6c096420, 0x1cd63: 0x6c269a20, + 0x1cd64: 0x6d35ea20, 0x1cd65: 0x6c361220, 0x1cd66: 0x6cb5ce20, 0x1cd67: 0x6c94a020, + 0x1cd68: 0x6cac3e20, 0x1cd69: 0x6d199020, 0x1cd6a: 0x6c384e20, 0x1cd6b: 0x6c579820, + 0x1cd6c: 0x6ccef220, 0x1cd6d: 0x6d212e20, 0x1cd6e: 0x6ca24220, 0x1cd6f: 0x6c75be20, + 0x1cd70: 0x6d176620, 0x1cd71: 0x6c8e5820, 0x1cd72: 0x6ccef420, 0x1cd73: 0x6c2eac20, + 0x1cd74: 0x6c1db020, 0x1cd75: 0x6c579e20, 0x1cd76: 0x6c290020, 0x1cd77: 0x6d3c9020, + 0x1cd78: 0x6c5eea20, 0x1cd79: 0x6ced2a20, 0x1cd7a: 0x6c676620, 0x1cd7b: 0x6c1a2620, + 0x1cd7c: 0x6c171e20, 0x1cd7d: 0x6cea8020, 0x1cd7e: 0x6c825220, 0x1cd7f: 0x6c5f1620, + // Block 0x736, offset 0x1cd80 + 0x1cd80: 0x6c13b020, 0x1cd81: 0x6c8e9a20, 0x1cd82: 0x6c2f3c20, 0x1cd83: 0x6ce98220, + 0x1cd84: 0x6c8c6c20, 0x1cd85: 0x6c678c20, 0x1cd86: 0x6c679020, 0x1cd87: 0x6c1e0020, + 0x1cd88: 0x6cb0d620, 0x1cd89: 0x6c2f0620, 0x1cd8a: 0x6c2f1020, 0x1cd8b: 0x6cb04420, + 0x1cd8c: 0x6c6a8220, 0x1cd8d: 0x6c287220, 0x1cd8e: 0x6cd4da20, 0x1cd8f: 0x6cd4dc20, + 0x1cd90: 0x6d369220, 0x1cd91: 0x6d153420, 0x1cd92: 0x6ca54020, 0x1cd93: 0x6ca39420, + 0x1cd94: 0x6c2f4e20, 0x1cd95: 0x6c08be20, 0x1cd96: 0x6c69f620, 0x1cd97: 0x6c89da20, + 0x1cd98: 0x6c426220, 0x1cd99: 0x6c437620, 0x1cd9a: 0x6c6fd620, 0x1cd9b: 0x6d38da20, + 0x1cd9c: 0x6cfa3020, 0x1cd9d: 0x6ccd7220, 0x1cd9e: 0x6d057220, 0x1cd9f: 0x6caa9e20, + 0x1cda0: 0x6c859220, 0x1cda1: 0x6d0f8a20, 0x1cda2: 0x6c192020, 0x1cda3: 0x6d1f0c20, + 0x1cda4: 0x6c033220, 0x1cda5: 0x6c6bce20, 0x1cda6: 0x6c73fe20, 0x1cda7: 0x6cb59620, + 0x1cda8: 0x6cf95620, 0x1cda9: 0x6c251e20, 0x1cdaa: 0x6c095220, 0x1cdab: 0x6d16fe20, + 0x1cdac: 0x6c85aa20, 0x1cdad: 0x6d401a20, 0x1cdae: 0x6c204e20, 0x1cdaf: 0x6c3c2620, + 0x1cdb0: 0x6d3ad220, 0x1cdb1: 0x6cad8620, 0x1cdb2: 0x6cafd020, 0x1cdb3: 0x6c418a20, + 0x1cdb4: 0x6c77ee20, 0x1cdb5: 0x6c21fa20, 0x1cdb6: 0x6d08de20, 0x1cdb7: 0x6d33c620, + 0x1cdb8: 0x6c283020, 0x1cdb9: 0x6d31ca20, 0x1cdba: 0x6c380220, 0x1cdbb: 0x6d350e20, + 0x1cdbc: 0x6ce29c20, 0x1cdbd: 0x6c706a20, 0x1cdbe: 0x6c600220, 0x1cdbf: 0x6c3a9a20, + // Block 0x737, offset 0x1cdc0 + 0x1cdc0: 0x6c706c20, 0x1cdc1: 0x6cccda20, 0x1cdc2: 0x6c634420, 0x1cdc3: 0x6d080820, + 0x1cdc4: 0x6d2cbc20, 0x1cdc5: 0x6c0e1420, 0x1cdc6: 0x6ca80a20, 0x1cdc7: 0x6d334620, + 0x1cdc8: 0x6d1d8020, 0x1cdc9: 0x6c6e6820, 0x1cdca: 0x6cc2e020, 0x1cdcb: 0x6ce29e20, + 0x1cdcc: 0x6ce6f420, 0x1cdcd: 0x6d14e620, 0x1cdce: 0x6c6a0020, 0x1cdcf: 0x6cefb020, + 0x1cdd0: 0x6c5b3620, 0x1cdd1: 0x6cdfa220, 0x1cdd2: 0x6d101220, 0x1cdd3: 0x6c1c1220, + 0x1cdd4: 0x6d35ec20, 0x1cdd5: 0x6c523220, 0x1cdd6: 0x6d0b5220, 0x1cdd7: 0x6c9a9220, + 0x1cdd8: 0x6c311a20, 0x1cdd9: 0x6c6e8620, 0x1cdda: 0x6cfec020, 0x1cddb: 0x6ce7c820, + 0x1cddc: 0x6ce86220, 0x1cddd: 0x6c986020, 0x1cdde: 0x6cb05e20, 0x1cddf: 0x6cfec220, + 0x1cde0: 0x6cdb8020, 0x1cde1: 0x6c3d7020, 0x1cde2: 0x6c861220, 0x1cde3: 0x6d363420, + 0x1cde4: 0x6c25de20, 0x1cde5: 0x6c345220, 0x1cde6: 0x6cf4ee20, 0x1cde7: 0x6ccbf420, + 0x1cde8: 0x6c815a20, 0x1cde9: 0x6cd46a20, 0x1cdea: 0x6c592620, 0x1cdeb: 0x6cfb5e20, + 0x1cdec: 0x6d17ee20, 0x1cded: 0x6c07f820, 0x1cdee: 0x6d2f3420, 0x1cdef: 0x6c495620, + 0x1cdf0: 0x6cdfec20, 0x1cdf1: 0x6c3ab820, 0x1cdf2: 0x6c966a20, 0x1cdf3: 0x6c8bba20, + 0x1cdf4: 0x6c1abc20, 0x1cdf5: 0x6c621a20, 0x1cdf6: 0x6ce50220, 0x1cdf7: 0x6c013820, + 0x1cdf8: 0x6c1c3220, 0x1cdf9: 0x6c09d020, 0x1cdfa: 0x6c09d220, 0x1cdfb: 0x6c9f6220, + 0x1cdfc: 0x6c481a20, 0x1cdfd: 0x6c330820, 0x1cdfe: 0x6c354220, 0x1cdff: 0x6cefe220, + // Block 0x738, offset 0x1ce00 + 0x1ce00: 0x6d209220, 0x1ce01: 0x6c254420, 0x1ce02: 0x6d0b5620, 0x1ce03: 0x6d3a1620, + 0x1ce04: 0x6c244020, 0x1ce05: 0x6c27e620, 0x1ce06: 0x6cd0b020, 0x1ce07: 0x6d380220, + 0x1ce08: 0x6c1c4620, 0x1ce09: 0x6d239420, 0x1ce0a: 0x6c541c20, 0x1ce0b: 0x6c3c5c20, + 0x1ce0c: 0x6c7e8420, 0x1ce0d: 0x6d0fd220, 0x1ce0e: 0x6c18de20, 0x1ce0f: 0x6ce8c420, + 0x1ce10: 0x6d226e20, 0x1ce11: 0x6c4c2820, 0x1ce12: 0x6cf19e20, 0x1ce13: 0x6c594420, + 0x1ce14: 0x6c7aa220, 0x1ce15: 0x6c642820, 0x1ce16: 0x6d19f620, 0x1ce17: 0x6d182c20, + 0x1ce18: 0x6c911020, 0x1ce19: 0x6ccaf820, 0x1ce1a: 0x6c749a20, 0x1ce1b: 0x6c1c5a20, + 0x1ce1c: 0x6cf6a620, 0x1ce1d: 0x6c492220, 0x1ce1e: 0x6d185c20, 0x1ce1f: 0x6cf16020, + 0x1ce20: 0x6c608c20, 0x1ce21: 0x6c205c20, 0x1ce22: 0x6c049220, 0x1ce23: 0x6c5bfe20, + 0x1ce24: 0x6c8e8420, 0x1ce25: 0x6c149c20, 0x1ce26: 0x6cd47220, 0x1ce27: 0x6caaaa20, + 0x1ce28: 0x6c2cd820, 0x1ce29: 0x6c26fc20, 0x1ce2a: 0x6c0d0e20, 0x1ce2b: 0x6cdfb820, + 0x1ce2c: 0x6d2f4020, 0x1ce2d: 0x6c0c1c20, 0x1ce2e: 0x6cd0c620, 0x1ce2f: 0x6c246220, + 0x1ce30: 0x6c95c020, 0x1ce31: 0x6d18a420, 0x1ce32: 0x6d403220, 0x1ce33: 0x6c1d7c20, + 0x1ce34: 0x6d2f4220, 0x1ce35: 0x6d2d4a20, 0x1ce36: 0x6cda4220, 0x1ce37: 0x6ccb5e20, + 0x1ce38: 0x6cc39c20, 0x1ce39: 0x6c2e3c20, 0x1ce3a: 0x6c911a20, 0x1ce3b: 0x6c911c20, + 0x1ce3c: 0x6ca15220, 0x1ce3d: 0x6cbda620, 0x1ce3e: 0x6d1b0820, 0x1ce3f: 0x6d1d0a20, + // Block 0x739, offset 0x1ce40 + 0x1ce40: 0x6c59fa20, 0x1ce41: 0x6c3f0820, 0x1ce42: 0x6c8a2620, 0x1ce43: 0x6c8fac20, + 0x1ce44: 0x6cbbfe20, 0x1ce45: 0x6c8ea820, 0x1ce46: 0x6c817a20, 0x1ce47: 0x6cfba820, + 0x1ce48: 0x6c3ad620, 0x1ce49: 0x6c280420, 0x1ce4a: 0x6d1b7420, 0x1ce4b: 0x6c51f020, + 0x1ce4c: 0x6c005420, 0x1ce4d: 0x6c04a620, 0x1ce4e: 0x6cfbaa20, 0x1ce4f: 0x6c492a20, + 0x1ce50: 0x6c4b8c20, 0x1ce51: 0x6ca9f620, 0x1ce52: 0x6d242e20, 0x1ce53: 0x6cef4a20, + 0x1ce54: 0x6d18e820, 0x1ce55: 0x6d1dc620, 0x1ce56: 0x6cb07820, 0x1ce57: 0x6c82ee20, + 0x1ce58: 0x6c86a820, 0x1ce59: 0x6cd57820, 0x1ce5a: 0x6c28d820, 0x1ce5b: 0x6c8c3c20, + 0x1ce5c: 0x6c2d8c20, 0x1ce5d: 0x6c8c3e20, 0x1ce5e: 0x6c7f6420, 0x1ce5f: 0x6c0d1020, + 0x1ce60: 0x6c62ba20, 0x1ce61: 0x6c1ae820, 0x1ce62: 0x6d103820, 0x1ce63: 0x6d086220, + 0x1ce64: 0x6c6a3820, 0x1ce65: 0x6d330e20, 0x1ce66: 0x6c99cc20, 0x1ce67: 0x6c874420, + 0x1ce68: 0x6c5e4820, 0x1ce69: 0x6c7f7820, 0x1ce6a: 0x6c631420, 0x1ce6b: 0x6c2cf220, + 0x1ce6c: 0x6d086620, 0x1ce6d: 0x6d1d2e20, 0x1ce6e: 0x6d1b2820, 0x1ce6f: 0x6cc21420, + 0x1ce70: 0x6d1dea20, 0x1ce71: 0x6cdfc820, 0x1ce72: 0x6c2cfe20, 0x1ce73: 0x6c95da20, + 0x1ce74: 0x6c947c20, 0x1ce75: 0x6c948420, 0x1ce76: 0x6c0e4620, 0x1ce77: 0x6c0e5420, + 0x1ce78: 0x6c4ada20, 0x1ce79: 0x6c037020, 0x1ce7a: 0x6c37e620, 0x1ce7b: 0x6c2a9c20, + 0x1ce7c: 0x6c37ec20, 0x1ce7d: 0x6c040820, 0x1ce7e: 0x6c041620, 0x1ce7f: 0x6cbc8020, + // Block 0x73a, offset 0x1ce80 + 0x1ce80: 0x6c5fd620, 0x1ce81: 0x6d2a6820, 0x1ce82: 0x6d2a6a20, 0x1ce83: 0x6c994420, + 0x1ce84: 0x6c2a8c20, 0x1ce85: 0x6cabb820, 0x1ce86: 0x6c69f820, 0x1ce87: 0x6c59ac20, + 0x1ce88: 0x6c4a3e20, 0x1ce89: 0x6c229620, 0x1ce8a: 0x6c8ccc20, 0x1ce8b: 0x6c42b620, + 0x1ce8c: 0x6ca0f020, 0x1ce8d: 0x6c5ffa20, 0x1ce8e: 0x6c68e420, 0x1ce8f: 0x6caf0620, + 0x1ce90: 0x6c42be20, 0x1ce91: 0x6c004020, 0x1ce92: 0x6c356620, 0x1ce93: 0x6c503e20, + 0x1ce94: 0x6c4ec420, 0x1ce95: 0x6c09a420, 0x1ce96: 0x6ced2220, 0x1ce97: 0x6c1dbc20, + 0x1ce98: 0x6cba5c20, 0x1ce99: 0x6cf65220, 0x1ce9a: 0x6c005020, 0x1ce9b: 0x6cffb820, + 0x1ce9c: 0x6c505c20, 0x1ce9d: 0x6c5a7820, 0x1ce9e: 0x6c505e20, 0x1ce9f: 0x6d2b0220, + 0x1cea0: 0x6c251020, 0x1cea1: 0x6c506c20, 0x1cea2: 0x6cffc220, 0x1cea3: 0x6d132820, + 0x1cea4: 0x6cb33820, 0x1cea5: 0x6c507220, 0x1cea6: 0x6c695220, 0x1cea7: 0x6c00f220, + 0x1cea8: 0x6d03ae20, 0x1cea9: 0x6c5a8020, 0x1ceaa: 0x6c872820, 0x1ceab: 0x6cb1a620, + 0x1ceac: 0x6c51a220, 0x1cead: 0x6c69e220, 0x1ceae: 0x6cafa820, 0x1ceaf: 0x6c41ca20, + 0x1ceb0: 0x6cad8820, 0x1ceb1: 0x6d391c20, 0x1ceb2: 0x6c756e20, 0x1ceb3: 0x6cc06620, + 0x1ceb4: 0x6c259420, 0x1ceb5: 0x6cc3ce20, 0x1ceb6: 0x6d2bee20, 0x1ceb7: 0x6c47b420, + 0x1ceb8: 0x6c757620, 0x1ceb9: 0x6c757820, 0x1ceba: 0x6d394420, 0x1cebb: 0x6d2bfe20, + 0x1cebc: 0x6c47d820, 0x1cebd: 0x6d2f7c20, 0x1cebe: 0x6c31e020, 0x1cebf: 0x6c9f8a20, + // Block 0x73b, offset 0x1cec0 + 0x1cec0: 0x6cb6da20, 0x1cec1: 0x6d1c5620, 0x1cec2: 0x6d20c620, 0x1cec3: 0x6c069220, + 0x1cec4: 0x6d2f5e20, 0x1cec5: 0x6d37a820, 0x1cec6: 0x6cae3c20, 0x1cec7: 0x6c50de20, + 0x1cec8: 0x6d1c5c20, 0x1cec9: 0x6c50f420, 0x1ceca: 0x6d173820, 0x1cecb: 0x6c0e6020, + 0x1cecc: 0x6cecfc20, 0x1cecd: 0x6c50f620, 0x1cece: 0x6c021620, 0x1cecf: 0x6d2de220, + 0x1ced0: 0x6d0c8020, 0x1ced1: 0x6c647e20, 0x1ced2: 0x6c510e20, 0x1ced3: 0x6d208820, + 0x1ced4: 0x6c7c3a20, 0x1ced5: 0x6c394620, 0x1ced6: 0x6c413220, 0x1ced7: 0x6c2a1220, + 0x1ced8: 0x6cac5620, 0x1ced9: 0x6c3f6620, 0x1ceda: 0x6cc06820, 0x1cedb: 0x6cd15e20, + 0x1cedc: 0x6c2a1620, 0x1cedd: 0x6c926a20, 0x1cede: 0x6d2df820, 0x1cedf: 0x6c9b2220, + 0x1cee0: 0x6c841c20, 0x1cee1: 0x6c6ca220, 0x1cee2: 0x6d071220, 0x1cee3: 0x6c64ca20, + 0x1cee4: 0x6cac6a20, 0x1cee5: 0x6c49a620, 0x1cee6: 0x6c014e20, 0x1cee7: 0x6c915c20, + 0x1cee8: 0x6d065e20, 0x1cee9: 0x6d38b420, 0x1ceea: 0x6c299620, 0x1ceeb: 0x6c015620, + 0x1ceec: 0x6c47e420, 0x1ceed: 0x6c872a20, 0x1ceee: 0x6ca26420, 0x1ceef: 0x6c2f5020, + 0x1cef0: 0x6c421020, 0x1cef1: 0x6d057420, 0x1cef2: 0x6c983a20, 0x1cef3: 0x6cee4e20, + 0x1cef4: 0x6d344020, 0x1cef5: 0x6cb74a20, 0x1cef6: 0x6d25e020, 0x1cef7: 0x6ce49220, + 0x1cef8: 0x6cfd6420, 0x1cef9: 0x6c33ca20, 0x1cefa: 0x6d02ba20, 0x1cefb: 0x6cf86620, + 0x1cefc: 0x6cacae20, 0x1cefd: 0x6c3c2820, 0x1cefe: 0x6c33de20, 0x1ceff: 0x6c9f3c20, + // Block 0x73c, offset 0x1cf00 + 0x1cf00: 0x6c9fee20, 0x1cf01: 0x6cd12c20, 0x1cf02: 0x6cd34420, 0x1cf03: 0x6d278c20, + 0x1cf04: 0x6c9e0e20, 0x1cf05: 0x6cac3a20, 0x1cf06: 0x6c39cc20, 0x1cf07: 0x6c9e8a20, + 0x1cf08: 0x6c27c220, 0x1cf09: 0x6c99e020, 0x1cf0a: 0x6c995820, 0x1cf0b: 0x6c770420, + 0x1cf0c: 0x6cfc9020, 0x1cf0d: 0x6c79ba20, 0x1cf0e: 0x6cd35620, 0x1cf0f: 0x6d0f5420, + 0x1cf10: 0x6d32a220, 0x1cf11: 0x6d119c20, 0x1cf12: 0x6ccfce20, 0x1cf13: 0x6c5dae20, + 0x1cf14: 0x6c26ec20, 0x1cf15: 0x6d31cc20, 0x1cf16: 0x6c7bee20, 0x1cf17: 0x6c706e20, + 0x1cf18: 0x6cd09a20, 0x1cf19: 0x6d14d020, 0x1cf1a: 0x6cd12e20, 0x1cf1b: 0x6c9a8a20, + 0x1cf1c: 0x6ca0f420, 0x1cf1d: 0x6d3ad620, 0x1cf1e: 0x6d313c20, 0x1cf1f: 0x6d313e20, + 0x1cf20: 0x6c9dbc20, 0x1cf21: 0x6cd35820, 0x1cf22: 0x6d24d620, 0x1cf23: 0x6c2e8a20, + 0x1cf24: 0x6ca69020, 0x1cf25: 0x6d3f4620, 0x1cf26: 0x6d3f4820, 0x1cf27: 0x6c179620, + 0x1cf28: 0x6d2c7620, 0x1cf29: 0x6d087e20, 0x1cf2a: 0x6c0dda20, 0x1cf2b: 0x6c9cea20, + 0x1cf2c: 0x6c8f7e20, 0x1cf2d: 0x6cdbc220, 0x1cf2e: 0x6ce73e20, 0x1cf2f: 0x6c9c3020, + 0x1cf30: 0x6c2f3620, 0x1cf31: 0x6c2c4620, 0x1cf32: 0x6ca54c20, 0x1cf33: 0x6c9ff820, + 0x1cf34: 0x6d088c20, 0x1cf35: 0x6c1aaa20, 0x1cf36: 0x6c7bf420, 0x1cf37: 0x6c735a20, + 0x1cf38: 0x6ca1ce20, 0x1cf39: 0x6d323a20, 0x1cf3a: 0x6ce5d220, 0x1cf3b: 0x6d0fac20, + 0x1cf3c: 0x6d0d6c20, 0x1cf3d: 0x6ca10620, 0x1cf3e: 0x6d382620, 0x1cf3f: 0x6ca0f620, + // Block 0x73d, offset 0x1cf40 + 0x1cf40: 0x6d311220, 0x1cf41: 0x6d32b620, 0x1cf42: 0x6c9a0220, 0x1cf43: 0x6cdd1e20, + 0x1cf44: 0x6cceda20, 0x1cf45: 0x6c4ec820, 0x1cf46: 0x6c592820, 0x1cf47: 0x6c2c5c20, + 0x1cf48: 0x6c1a7620, 0x1cf49: 0x6c25e020, 0x1cf4a: 0x6c736420, 0x1cf4b: 0x6c356820, + 0x1cf4c: 0x6c97bc20, 0x1cf4d: 0x6cfcc420, 0x1cf4e: 0x6cf61e20, 0x1cf4f: 0x6c7dd420, + 0x1cf50: 0x6c7f4820, 0x1cf51: 0x6c659820, 0x1cf52: 0x6ccd4e20, 0x1cf53: 0x6ce50420, + 0x1cf54: 0x6c4bfc20, 0x1cf55: 0x6ced2c20, 0x1cf56: 0x6c839820, 0x1cf57: 0x6cd39c20, + 0x1cf58: 0x6cbf4020, 0x1cf59: 0x6c8b1820, 0x1cf5a: 0x6d0b3020, 0x1cf5b: 0x6c6ec820, + 0x1cf5c: 0x6d32d420, 0x1cf5d: 0x6c83ea20, 0x1cf5e: 0x6c7f4a20, 0x1cf5f: 0x6cdc4c20, + 0x1cf60: 0x6c737420, 0x1cf61: 0x6cd72820, 0x1cf62: 0x6cdbca20, 0x1cf63: 0x6c317420, + 0x1cf64: 0x6c09d420, 0x1cf65: 0x6cb0a620, 0x1cf66: 0x6ca29c20, 0x1cf67: 0x6c5cd420, + 0x1cf68: 0x6ca6ae20, 0x1cf69: 0x6c926c20, 0x1cf6a: 0x6d17f220, 0x1cf6b: 0x6c6aec20, + 0x1cf6c: 0x6c113620, 0x1cf6d: 0x6d38ea20, 0x1cf6e: 0x6d217220, 0x1cf6f: 0x6c5cd620, + 0x1cf70: 0x6c96c620, 0x1cf71: 0x6cfa4420, 0x1cf72: 0x6d040420, 0x1cf73: 0x6c5ada20, + 0x1cf74: 0x6c4c0220, 0x1cf75: 0x6d290a20, 0x1cf76: 0x6c218620, 0x1cf77: 0x6c64ba20, + 0x1cf78: 0x6c9a9e20, 0x1cf79: 0x6c322620, 0x1cf7a: 0x6c541e20, 0x1cf7b: 0x6d07b420, + 0x1cf7c: 0x6ce53c20, 0x1cf7d: 0x6c7c9220, 0x1cf7e: 0x6c42ce20, 0x1cf7f: 0x6cc8da20, + // Block 0x73e, offset 0x1cf80 + 0x1cf80: 0x6c99a020, 0x1cf81: 0x6d071420, 0x1cf82: 0x6c381e20, 0x1cf83: 0x6cf30820, + 0x1cf84: 0x6c9e7820, 0x1cf85: 0x6c1e2e20, 0x1cf86: 0x6c7d0620, 0x1cf87: 0x6c9c3220, + 0x1cf88: 0x6cf25e20, 0x1cf89: 0x6c7a0020, 0x1cf8a: 0x6c298420, 0x1cf8b: 0x6c188220, + 0x1cf8c: 0x6c782420, 0x1cf8d: 0x6cda2420, 0x1cf8e: 0x6cf97620, 0x1cf8f: 0x6cbf5020, + 0x1cf90: 0x6ca15420, 0x1cf91: 0x6ca01620, 0x1cf92: 0x6c977220, 0x1cf93: 0x6cd72c20, + 0x1cf94: 0x6d2b0420, 0x1cf95: 0x6d2f4420, 0x1cf96: 0x6d18a620, 0x1cf97: 0x6c2dde20, + 0x1cf98: 0x6c79c420, 0x1cf99: 0x6ca15620, 0x1cf9a: 0x6cd75c20, 0x1cf9b: 0x6c235620, + 0x1cf9c: 0x6c907820, 0x1cf9d: 0x6c1ad020, 0x1cf9e: 0x6c977820, 0x1cf9f: 0x6cb19a20, + 0x1cfa0: 0x6c199420, 0x1cfa1: 0x6c4b1a20, 0x1cfa2: 0x6c9b3a20, 0x1cfa3: 0x6c596c20, + 0x1cfa4: 0x6cc8f220, 0x1cfa5: 0x6cb1d420, 0x1cfa6: 0x6cf6f020, 0x1cfa7: 0x6cbc0220, + 0x1cfa8: 0x6cb45a20, 0x1cfa9: 0x6d3a8420, 0x1cfaa: 0x6c2aea20, 0x1cfab: 0x6cd07e20, + 0x1cfac: 0x6cd76020, 0x1cfad: 0x6c8a7c20, 0x1cfae: 0x6c185020, 0x1cfaf: 0x6cfbac20, + 0x1cfb0: 0x6c771220, 0x1cfb1: 0x6d132a20, 0x1cfb2: 0x6d074820, 0x1cfb3: 0x6ce79220, + 0x1cfb4: 0x6ca1ea20, 0x1cfb5: 0x6c8be620, 0x1cfb6: 0x6c4b7e20, 0x1cfb7: 0x6c66e020, + 0x1cfb8: 0x6d136420, 0x1cfb9: 0x6c00f420, 0x1cfba: 0x6c5c6a20, 0x1cfbb: 0x6d2dac20, + 0x1cfbc: 0x6c65f220, 0x1cfbd: 0x6c47e620, 0x1cfbe: 0x6d2fea20, 0x1cfbf: 0x6cc1e420, + // Block 0x73f, offset 0x1cfc0 + 0x1cfc0: 0x6c9a3420, 0x1cfc1: 0x6c1e3620, 0x1cfc2: 0x6ccb0620, 0x1cfc3: 0x6ca94c20, + 0x1cfc4: 0x6d09c020, 0x1cfc5: 0x6d123e20, 0x1cfc6: 0x6c5e1820, 0x1cfc7: 0x6c9b7020, + 0x1cfc8: 0x6c9de620, 0x1cfc9: 0x6cb22020, 0x1cfca: 0x6c9de820, 0x1cfcb: 0x6c870220, + 0x1cfcc: 0x6c7c1420, 0x1cfcd: 0x6c750020, 0x1cfce: 0x6d07e220, 0x1cfcf: 0x6c9dee20, + 0x1cfd0: 0x6c5e4a20, 0x1cfd1: 0x6c919220, 0x1cfd2: 0x6c9b8e20, 0x1cfd3: 0x6c8fe420, + 0x1cfd4: 0x6c49bc20, 0x1cfd5: 0x6c97d620, 0x1cfd6: 0x6cf82e20, 0x1cfd7: 0x6c1f9020, + 0x1cfd8: 0x6ce19620, 0x1cfd9: 0x6c771c20, 0x1cfda: 0x6d3a9620, 0x1cfdb: 0x6c98c220, + 0x1cfdc: 0x6c6c3220, 0x1cfdd: 0x6c8ba620, 0x1cfde: 0x6d234a20, 0x1cfdf: 0x6cd78420, + 0x1cfe0: 0x6d2ad220, 0x1cfe1: 0x6c752c20, 0x1cfe2: 0x6cd2a820, 0x1cfe3: 0x6d15c020, + 0x1cfe4: 0x6cd04820, 0x1cfe5: 0x6d339c20, 0x1cfe6: 0x6c53f020, 0x1cfe7: 0x6cd04e20, + 0x1cfe8: 0x6d1ce020, 0x1cfe9: 0x6c72d420, 0x1cfea: 0x6d387820, 0x1cfeb: 0x6c68e820, + 0x1cfec: 0x6c25e220, 0x1cfed: 0x6c32ae20, 0x1cfee: 0x6c006820, 0x1cfef: 0x6c695020, + 0x1cff0: 0x6d2b9820, 0x1cff1: 0x6d265c20, 0x1cff2: 0x6c03ce20, 0x1cff3: 0x6cd22c20, + 0x1cff4: 0x6c2f9420, 0x1cff5: 0x6cb73a20, 0x1cff6: 0x6c5e8620, 0x1cff7: 0x6d3eee20, + 0x1cff8: 0x6c417c20, 0x1cff9: 0x6cf4ba20, 0x1cffa: 0x6d302020, 0x1cffb: 0x6c7a2a20, + 0x1cffc: 0x6c426420, 0x1cffd: 0x6cf84c20, 0x1cffe: 0x6c388820, 0x1cfff: 0x6c7be620, + // Block 0x740, offset 0x1d000 + 0x1d000: 0x6c295820, 0x1d001: 0x6c969220, 0x1d002: 0x6ccbd220, 0x1d003: 0x6c27c420, + 0x1d004: 0x6c740220, 0x1d005: 0x6c85ac20, 0x1d006: 0x6c3d4e20, 0x1d007: 0x6c9f3e20, + 0x1d008: 0x6c35b020, 0x1d009: 0x6c5da620, 0x1d00a: 0x6c772820, 0x1d00b: 0x6d350620, + 0x1d00c: 0x6cb75c20, 0x1d00d: 0x6c76c420, 0x1d00e: 0x6c6bd020, 0x1d00f: 0x6c0d2a20, + 0x1d010: 0x6c35e020, 0x1d011: 0x6d0b8820, 0x1d012: 0x6caf4e20, 0x1d013: 0x6d302420, + 0x1d014: 0x6d0c7820, 0x1d015: 0x6cdc2a20, 0x1d016: 0x6d3b7820, 0x1d017: 0x6c17d220, + 0x1d018: 0x6c33e020, 0x1d019: 0x6cac3c20, 0x1d01a: 0x6d0e4a20, 0x1d01b: 0x6c6d7e20, + 0x1d01c: 0x6c3c2a20, 0x1d01d: 0x6c381020, 0x1d01e: 0x6ca0f820, 0x1d01f: 0x6d2c7820, + 0x1d020: 0x6c707020, 0x1d021: 0x6d22f620, 0x1d022: 0x6c77f020, 0x1d023: 0x6ceb0a20, + 0x1d024: 0x6ceb0c20, 0x1d025: 0x6c2bec20, 0x1d026: 0x6d2d3c20, 0x1d027: 0x6d314220, + 0x1d028: 0x6c35fc20, 0x1d029: 0x6c3e3820, 0x1d02a: 0x6ca23e20, 0x1d02b: 0x6d3ad820, + 0x1d02c: 0x6c7e5c20, 0x1d02d: 0x6c0aee20, 0x1d02e: 0x6caa5620, 0x1d02f: 0x6cb25220, + 0x1d030: 0x6cae6020, 0x1d031: 0x6c8cce20, 0x1d032: 0x6cad8a20, 0x1d033: 0x6c821e20, + 0x1d034: 0x6cb37c20, 0x1d035: 0x6c0e6220, 0x1d036: 0x6cb37e20, 0x1d037: 0x6ccfd020, + 0x1d038: 0x6d28b020, 0x1d039: 0x6c009820, 0x1d03a: 0x6c85d620, 0x1d03b: 0x6c8f8020, + 0x1d03c: 0x6ce73a20, 0x1d03d: 0x6d1e8420, 0x1d03e: 0x6c85d820, 0x1d03f: 0x6c7c2a20, + // Block 0x741, offset 0x1d040 + 0x1d040: 0x6c1ed820, 0x1d041: 0x6c793620, 0x1d042: 0x6cc2e420, 0x1d043: 0x6d399c20, + 0x1d044: 0x6c7b9c20, 0x1d045: 0x6c4a5a20, 0x1d046: 0x6c361420, 0x1d047: 0x6ca4a620, + 0x1d048: 0x6cb86420, 0x1d049: 0x6c924420, 0x1d04a: 0x6cefb220, 0x1d04b: 0x6c009a20, + 0x1d04c: 0x6c448420, 0x1d04d: 0x6cfcb620, 0x1d04e: 0x6d03e220, 0x1d04f: 0x6d0c8a20, + 0x1d050: 0x6c307420, 0x1d051: 0x6cae6c20, 0x1d052: 0x6cf5fc20, 0x1d053: 0x6c81f220, + 0x1d054: 0x6c533c20, 0x1d055: 0x6cd78020, 0x1d056: 0x6cf9b020, 0x1d057: 0x6cbb7020, + 0x1d058: 0x6cbeea20, 0x1d059: 0x6cef0220, 0x1d05a: 0x6cbbdc20, 0x1d05b: 0x6d176820, + 0x1d05c: 0x6c793e20, 0x1d05d: 0x6cfec620, 0x1d05e: 0x6cc3c220, 0x1d05f: 0x6c162a20, + 0x1d060: 0x6c80c820, 0x1d061: 0x6c52ac20, 0x1d062: 0x6d213020, 0x1d063: 0x6cfec820, + 0x1d064: 0x6cf9c620, 0x1d065: 0x6c988e20, 0x1d066: 0x6c960220, 0x1d067: 0x6d1e3c20, + 0x1d068: 0x6c17dc20, 0x1d069: 0x6c182220, 0x1d06a: 0x6cf2f620, 0x1d06b: 0x6c8e5c20, + 0x1d06c: 0x6d1d3c20, 0x1d06d: 0x6c985a20, 0x1d06e: 0x6cc3c420, 0x1d06f: 0x6d0e7820, + 0x1d070: 0x6ccbf620, 0x1d071: 0x6c7dac20, 0x1d072: 0x6d234c20, 0x1d073: 0x6c1c2420, + 0x1d074: 0x6c57de20, 0x1d075: 0x6c91be20, 0x1d076: 0x6c190420, 0x1d077: 0x6c659a20, + 0x1d078: 0x6caaa820, 0x1d079: 0x6cd92620, 0x1d07a: 0x6d3d6e20, 0x1d07b: 0x6c794620, + 0x1d07c: 0x6caeaa20, 0x1d07d: 0x6d0c1420, 0x1d07e: 0x6d3c9220, 0x1d07f: 0x6c797e20, + // Block 0x742, offset 0x1d080 + 0x1d080: 0x6c19ec20, 0x1d081: 0x6cb5fc20, 0x1d082: 0x6d402220, 0x1d083: 0x6cbecc20, + 0x1d084: 0x6c8bbc20, 0x1d085: 0x6c757420, 0x1d086: 0x6c0e7e20, 0x1d087: 0x6c2fac20, + 0x1d088: 0x6c9f6420, 0x1d089: 0x6c2dce20, 0x1d08a: 0x6c64bc20, 0x1d08b: 0x6c51d020, + 0x1d08c: 0x6c926e20, 0x1d08d: 0x6c00ac20, 0x1d08e: 0x6cdc4e20, 0x1d08f: 0x6cc3d220, + 0x1d090: 0x6c837c20, 0x1d091: 0x6c06b020, 0x1d092: 0x6d1a7420, 0x1d093: 0x6c334c20, + 0x1d094: 0x6cf45220, 0x1d095: 0x6cb5fe20, 0x1d096: 0x6c951820, 0x1d097: 0x6ced2e20, + 0x1d098: 0x6c2d2020, 0x1d099: 0x6ca4b220, 0x1d09a: 0x6c073420, 0x1d09b: 0x6cb7a420, + 0x1d09c: 0x6c190620, 0x1d09d: 0x6cc87020, 0x1d09e: 0x6d0cb620, 0x1d09f: 0x6c2ed220, + 0x1d0a0: 0x6c2fb020, 0x1d0a1: 0x6c31a820, 0x1d0a2: 0x6ceb2e20, 0x1d0a3: 0x6c6b0c20, + 0x1d0a4: 0x6d1bc620, 0x1d0a5: 0x6c0b4420, 0x1d0a6: 0x6c78c620, 0x1d0a7: 0x6c0a0220, + 0x1d0a8: 0x6cf0b020, 0x1d0a9: 0x6cd79220, 0x1d0aa: 0x6d318220, 0x1d0ab: 0x6c32d420, + 0x1d0ac: 0x6cf9de20, 0x1d0ad: 0x6c297a20, 0x1d0ae: 0x6ce35420, 0x1d0af: 0x6ca50c20, + 0x1d0b0: 0x6caf1420, 0x1d0b1: 0x6c65c420, 0x1d0b2: 0x6c2c8220, 0x1d0b3: 0x6ce0a220, + 0x1d0b4: 0x6c13f620, 0x1d0b5: 0x6ce54220, 0x1d0b6: 0x6cb7b420, 0x1d0b7: 0x6c341420, + 0x1d0b8: 0x6c3c5e20, 0x1d0b9: 0x6d08a420, 0x1d0ba: 0x6cc3f020, 0x1d0bb: 0x6cc3f220, + 0x1d0bc: 0x6c96a020, 0x1d0bd: 0x6c45a620, 0x1d0be: 0x6ca73820, 0x1d0bf: 0x6cdb0820, + // Block 0x743, offset 0x1d0c0 + 0x1d0c0: 0x6c357820, 0x1d0c1: 0x6c225420, 0x1d0c2: 0x6c8e8820, 0x1d0c3: 0x6cd81a20, + 0x1d0c4: 0x6ce12620, 0x1d0c5: 0x6c058820, 0x1d0c6: 0x6c574620, 0x1d0c7: 0x6caf8620, + 0x1d0c8: 0x6ceff420, 0x1d0c9: 0x6cca8820, 0x1d0ca: 0x6c82d220, 0x1d0cb: 0x6c25c420, + 0x1d0cc: 0x6ce4ba20, 0x1d0cd: 0x6cf9e620, 0x1d0ce: 0x6cf6aa20, 0x1d0cf: 0x6c883e20, + 0x1d0d0: 0x6cac7020, 0x1d0d1: 0x6cef3020, 0x1d0d2: 0x6d27fc20, 0x1d0d3: 0x6c330e20, + 0x1d0d4: 0x6d307e20, 0x1d0d5: 0x6c782620, 0x1d0d6: 0x6c7e6020, 0x1d0d7: 0x6d3b8c20, + 0x1d0d8: 0x6cbed820, 0x1d0d9: 0x6c4be420, 0x1d0da: 0x6d3b9220, 0x1d0db: 0x6c152620, + 0x1d0dc: 0x6cb7da20, 0x1d0dd: 0x6c026c20, 0x1d0de: 0x6cae8620, 0x1d0df: 0x6c8f4020, + 0x1d0e0: 0x6c91de20, 0x1d0e1: 0x6c771420, 0x1d0e2: 0x6c209a20, 0x1d0e3: 0x6c190e20, + 0x1d0e4: 0x6d1afe20, 0x1d0e5: 0x6c82d820, 0x1d0e6: 0x6c0c1e20, 0x1d0e7: 0x6cb7dc20, + 0x1d0e8: 0x6ca07c20, 0x1d0e9: 0x6cb7de20, 0x1d0ea: 0x6c24e820, 0x1d0eb: 0x6d3fc220, + 0x1d0ec: 0x6cbeda20, 0x1d0ed: 0x6c21da20, 0x1d0ee: 0x6c952a20, 0x1d0ef: 0x6c5f5420, + 0x1d0f0: 0x6ccdbe20, 0x1d0f1: 0x6c817c20, 0x1d0f2: 0x6cc1c020, 0x1d0f3: 0x6d2b9a20, + 0x1d0f4: 0x6c2aec20, 0x1d0f5: 0x6c66e220, 0x1d0f6: 0x6cf8f220, 0x1d0f7: 0x6c8be820, + 0x1d0f8: 0x6c2fbe20, 0x1d0f9: 0x6ce01e20, 0x1d0fa: 0x6c59fc20, 0x1d0fb: 0x6cac7620, + 0x1d0fc: 0x6d28ce20, 0x1d0fd: 0x6cbbb820, 0x1d0fe: 0x6c2b4820, 0x1d0ff: 0x6c86aa20, + // Block 0x744, offset 0x1d100 + 0x1d100: 0x6c673e20, 0x1d101: 0x6c688220, 0x1d102: 0x6cf94a20, 0x1d103: 0x6d2f0e20, + 0x1d104: 0x6cbc0420, 0x1d105: 0x6c33b620, 0x1d106: 0x6c65f420, 0x1d107: 0x6d241220, + 0x1d108: 0x6d3cb420, 0x1d109: 0x6c518420, 0x1d10a: 0x6c78e020, 0x1d10b: 0x6d2b1420, + 0x1d10c: 0x6c826a20, 0x1d10d: 0x6c787220, 0x1d10e: 0x6c1ef620, 0x1d10f: 0x6d137020, + 0x1d110: 0x6cc40c20, 0x1d111: 0x6c299a20, 0x1d112: 0x6d161e20, 0x1d113: 0x6c678e20, + 0x1d114: 0x6caf9e20, 0x1d115: 0x6cafa020, 0x1d116: 0x6d243020, 0x1d117: 0x6cb1f420, + 0x1d118: 0x6c36d020, 0x1d119: 0x6c00fe20, 0x1d11a: 0x6c783e20, 0x1d11b: 0x6c652220, + 0x1d11c: 0x6d243220, 0x1d11d: 0x6cc88e20, 0x1d11e: 0x6c9b7220, 0x1d11f: 0x6cada020, + 0x1d120: 0x6c227820, 0x1d121: 0x6c0f9020, 0x1d122: 0x6d107c20, 0x1d123: 0x6c96e420, + 0x1d124: 0x6c10e620, 0x1d125: 0x6cfbc820, 0x1d126: 0x6c7c1620, 0x1d127: 0x6c828020, + 0x1d128: 0x6c82fe20, 0x1d129: 0x6d375420, 0x1d12a: 0x6c870420, 0x1d12b: 0x6c872e20, + 0x1d12c: 0x6c38e420, 0x1d12d: 0x6cc41c20, 0x1d12e: 0x6cada620, 0x1d12f: 0x6d1c3020, + 0x1d130: 0x6c874a20, 0x1d131: 0x6c8fe620, 0x1d132: 0x6c8fe820, 0x1d133: 0x6ca19620, + 0x1d134: 0x6c0fc220, 0x1d135: 0x6cd6b420, 0x1d136: 0x6c49be20, 0x1d137: 0x6c800020, + 0x1d138: 0x6d298620, 0x1d139: 0x6d0d1820, 0x1d13a: 0x6cd2f420, 0x1d13b: 0x6cd2e620, + 0x1d13c: 0x6c84f420, 0x1d13d: 0x6cc61c20, 0x1d13e: 0x6ccf3620, 0x1d13f: 0x6d268020, + // Block 0x745, offset 0x1d140 + 0x1d140: 0x6cd88420, 0x1d141: 0x6cb56820, 0x1d142: 0x6cdde220, 0x1d143: 0x6c96b420, + 0x1d144: 0x6d016420, 0x1d145: 0x6d109420, 0x1d146: 0x6cfa8020, 0x1d147: 0x6cb58820, + 0x1d148: 0x6cb58a20, 0x1d149: 0x6d34f820, 0x1d14a: 0x6c07d820, 0x1d14b: 0x6c333a20, + 0x1d14c: 0x6d381820, 0x1d14d: 0x6cc5d620, 0x1d14e: 0x6d13cc20, 0x1d14f: 0x6cd25420, + 0x1d150: 0x6d203020, 0x1d151: 0x6d35a820, 0x1d152: 0x6ce57a20, 0x1d153: 0x6c3e1e20, + 0x1d154: 0x6c3fc420, 0x1d155: 0x6c9d2e20, 0x1d156: 0x6d411420, 0x1d157: 0x6d33ac20, + 0x1d158: 0x6cdb9620, 0x1d159: 0x6c9a8420, 0x1d15a: 0x6d428620, 0x1d15b: 0x6cc0ec20, + 0x1d15c: 0x6c567220, 0x1d15d: 0x6d3ac620, 0x1d15e: 0x6cd03a20, 0x1d15f: 0x6cdc3020, + 0x1d160: 0x6c223020, 0x1d161: 0x6c147a20, 0x1d162: 0x6c9c3e20, 0x1d163: 0x6c939020, + 0x1d164: 0x6d223e20, 0x1d165: 0x6cfdbc20, 0x1d166: 0x6cf3c620, 0x1d167: 0x6ce55620, + 0x1d168: 0x6cb1ae20, 0x1d169: 0x6d3ada20, 0x1d16a: 0x6c4aec20, 0x1d16b: 0x6cf9ae20, + 0x1d16c: 0x6d33c820, 0x1d16d: 0x6c61f420, 0x1d16e: 0x6c434620, 0x1d16f: 0x6d314420, + 0x1d170: 0x6c434820, 0x1d171: 0x6cd71e20, 0x1d172: 0x6c6d0620, 0x1d173: 0x6cd0a020, + 0x1d174: 0x6c40f620, 0x1d175: 0x6c7daa20, 0x1d176: 0x6c2c4820, 0x1d177: 0x6c29d820, + 0x1d178: 0x6c5dc620, 0x1d179: 0x6ce22820, 0x1d17a: 0x6cb5ee20, 0x1d17b: 0x6c481620, + 0x1d17c: 0x6c498a20, 0x1d17d: 0x6d41b420, 0x1d17e: 0x6c8d0820, 0x1d17f: 0x6c925a20, + // Block 0x746, offset 0x1d180 + 0x1d180: 0x6c0de820, 0x1d181: 0x6c6d1a20, 0x1d182: 0x6c29da20, 0x1d183: 0x6d346620, + 0x1d184: 0x6c925820, 0x1d185: 0x6c14f820, 0x1d186: 0x6c06a620, 0x1d187: 0x6d30d820, + 0x1d188: 0x6c5aca20, 0x1d189: 0x6d1fd620, 0x1d18a: 0x6cf8a220, 0x1d18b: 0x6d19ee20, + 0x1d18c: 0x6d3e5420, 0x1d18d: 0x6c5dd420, 0x1d18e: 0x6d316e20, 0x1d18f: 0x6c3e9c20, + 0x1d190: 0x6d262420, 0x1d191: 0x6cf3d020, 0x1d192: 0x6cfc1820, 0x1d193: 0x6d0fca20, + 0x1d194: 0x6d33f420, 0x1d195: 0x6d13fc20, 0x1d196: 0x6c9a1220, 0x1d197: 0x6cd7f820, + 0x1d198: 0x6c2c6c20, 0x1d199: 0x6c077a20, 0x1d19a: 0x6d3d8220, 0x1d19b: 0x6d318420, + 0x1d19c: 0x6d1e5620, 0x1d19d: 0x6c606c20, 0x1d19e: 0x6c435220, 0x1d19f: 0x6ce11a20, + 0x1d1a0: 0x6cd80420, 0x1d1a1: 0x6c96d020, 0x1d1a2: 0x6cde7820, 0x1d1a3: 0x6c40b620, + 0x1d1a4: 0x6d07bc20, 0x1d1a5: 0x6cb63c20, 0x1d1a6: 0x6d241420, 0x1d1a7: 0x6cf81220, + 0x1d1a8: 0x6c5f3a20, 0x1d1a9: 0x6cd8e020, 0x1d1aa: 0x6c152820, 0x1d1ab: 0x6c28b420, + 0x1d1ac: 0x6c4b8020, 0x1d1ad: 0x6cdc7820, 0x1d1ae: 0x6c853820, 0x1d1af: 0x6ca9d020, + 0x1d1b0: 0x6c9c8a20, 0x1d1b1: 0x6c29f820, 0x1d1b2: 0x6c86d620, 0x1d1b3: 0x6cc4ee20, + 0x1d1b4: 0x6d271620, 0x1d1b5: 0x6ce3b420, 0x1d1b6: 0x6d29c220, 0x1d1b7: 0x6c836420, + 0x1d1b8: 0x6cc74020, 0x1d1b9: 0x6d222e20, 0x1d1ba: 0x6d20dc20, 0x1d1bb: 0x6c83ae20, + 0x1d1bc: 0x6d019820, 0x1d1bd: 0x6cbd7620, 0x1d1be: 0x6c50b220, 0x1d1bf: 0x6ce83c20, + // Block 0x747, offset 0x1d1c0 + 0x1d1c0: 0x6d052c20, 0x1d1c1: 0x6cd7c620, 0x1d1c2: 0x6cc56c20, 0x1d1c3: 0x6ce83e20, + 0x1d1c4: 0x6d3ef020, 0x1d1c5: 0x6c13c820, 0x1d1c6: 0x6c41cc20, 0x1d1c7: 0x6d16cc20, + 0x1d1c8: 0x6cfa8220, 0x1d1c9: 0x6c0dc620, 0x1d1ca: 0x6ca6f620, 0x1d1cb: 0x6cbfa620, + 0x1d1cc: 0x6cbfa820, 0x1d1cd: 0x6d37e820, 0x1d1ce: 0x6c3bd420, 0x1d1cf: 0x6c502220, + 0x1d1d0: 0x6d279020, 0x1d1d1: 0x6c77e620, 0x1d1d2: 0x6c9e8c20, 0x1d1d3: 0x6d33ae20, + 0x1d1d4: 0x6c6d9820, 0x1d1d5: 0x6c08c820, 0x1d1d6: 0x6d33b020, 0x1d1d7: 0x6d22e620, + 0x1d1d8: 0x6c9d3420, 0x1d1d9: 0x6c7a8a20, 0x1d1da: 0x6c04f420, 0x1d1db: 0x6caf5620, + 0x1d1dc: 0x6ca5ce20, 0x1d1dd: 0x6c85da20, 0x1d1de: 0x6d1f1a20, 0x1d1df: 0x6d409a20, + 0x1d1e0: 0x6caf5820, 0x1d1e1: 0x6c0edc20, 0x1d1e2: 0x6c8cd020, 0x1d1e3: 0x6ca0fc20, + 0x1d1e4: 0x6c1a8020, 0x1d1e5: 0x6ca6fe20, 0x1d1e6: 0x6cbd6620, 0x1d1e7: 0x6d0f5620, + 0x1d1e8: 0x6d423220, 0x1d1e9: 0x6d35c420, 0x1d1ea: 0x6d33ca20, 0x1d1eb: 0x6cd52420, + 0x1d1ec: 0x6c721a20, 0x1d1ed: 0x6d3ef620, 0x1d1ee: 0x6c5d7220, 0x1d1ef: 0x6c5ea820, + 0x1d1f0: 0x6c196220, 0x1d1f1: 0x6ce74220, 0x1d1f2: 0x6d35f820, 0x1d1f3: 0x6c5d7620, + 0x1d1f4: 0x6c511220, 0x1d1f5: 0x6d19ce20, 0x1d1f6: 0x6d3e2620, 0x1d1f7: 0x6d35fa20, + 0x1d1f8: 0x6c6a0220, 0x1d1f9: 0x6cc59420, 0x1d1fa: 0x6c325020, 0x1d1fb: 0x6d14e820, + 0x1d1fc: 0x6d399e20, 0x1d1fd: 0x6c5bb820, 0x1d1fe: 0x6ca9ba20, 0x1d1ff: 0x6c3ff420, + // Block 0x748, offset 0x1d200 + 0x1d200: 0x6cf62020, 0x1d201: 0x6c77aa20, 0x1d202: 0x6c80ca20, 0x1d203: 0x6c3d7420, + 0x1d204: 0x6d0a9020, 0x1d205: 0x6cd72020, 0x1d206: 0x6c939420, 0x1d207: 0x6c7dae20, + 0x1d208: 0x6c41da20, 0x1d209: 0x6c6db820, 0x1d20a: 0x6ce32e20, 0x1d20b: 0x6c1a0c20, + 0x1d20c: 0x6ce8b420, 0x1d20d: 0x6cce7020, 0x1d20e: 0x6cd72220, 0x1d20f: 0x6d0bc020, + 0x1d210: 0x6c951a20, 0x1d211: 0x6c927020, 0x1d212: 0x6c481c20, 0x1d213: 0x6d424420, + 0x1d214: 0x6cc59a20, 0x1d215: 0x6d3ce620, 0x1d216: 0x6c057c20, 0x1d217: 0x6c044a20, + 0x1d218: 0x6c5eec20, 0x1d219: 0x6d33f620, 0x1d21a: 0x6d366020, 0x1d21b: 0x6c7db420, + 0x1d21c: 0x6c837e20, 0x1d21d: 0x6caeac20, 0x1d21e: 0x6c780a20, 0x1d21f: 0x6c0dea20, + 0x1d220: 0x6c1dbe20, 0x1d221: 0x6d41b620, 0x1d222: 0x6d237420, 0x1d223: 0x6cda5220, + 0x1d224: 0x6c94ae20, 0x1d225: 0x6cfd8020, 0x1d226: 0x6d140620, 0x1d227: 0x6cf8b620, + 0x1d228: 0x6c0b4620, 0x1d229: 0x6c624820, 0x1d22a: 0x6c3ec420, 0x1d22b: 0x6cb0b020, + 0x1d22c: 0x6cab0820, 0x1d22d: 0x6c6a2c20, 0x1d22e: 0x6d380420, 0x1d22f: 0x6d3fa820, + 0x1d230: 0x6d064e20, 0x1d231: 0x6c197e20, 0x1d232: 0x6c2a2220, 0x1d233: 0x6cf1e820, + 0x1d234: 0x6cfb8220, 0x1d235: 0x6d3e6820, 0x1d236: 0x6d23c820, 0x1d237: 0x6c626420, + 0x1d238: 0x6d072e20, 0x1d239: 0x6d31f420, 0x1d23a: 0x6d36b820, 0x1d23b: 0x6c2a2a20, + 0x1d23c: 0x6c645420, 0x1d23d: 0x6c5f1820, 0x1d23e: 0x6c431820, 0x1d23f: 0x6c431a20, + // Block 0x749, offset 0x1d240 + 0x1d240: 0x6c47c420, 0x1d241: 0x6cc6a020, 0x1d242: 0x6cdc6020, 0x1d243: 0x6cc73c20, + 0x1d244: 0x6c627a20, 0x1d245: 0x6c775220, 0x1d246: 0x6ca2ac20, 0x1d247: 0x6c11dc20, + 0x1d248: 0x6c9a2620, 0x1d249: 0x6d370c20, 0x1d24a: 0x6c624a20, 0x1d24b: 0x6c92d620, + 0x1d24c: 0x6cda5a20, 0x1d24d: 0x6c5f3c20, 0x1d24e: 0x6d1d0c20, 0x1d24f: 0x6cf1f020, + 0x1d250: 0x6cbfc420, 0x1d251: 0x6ccb6020, 0x1d252: 0x6c51e620, 0x1d253: 0x6d18aa20, + 0x1d254: 0x6c59fe20, 0x1d255: 0x6cbce620, 0x1d256: 0x6c615620, 0x1d257: 0x6cdc8820, + 0x1d258: 0x6cff2020, 0x1d259: 0x6cb45e20, 0x1d25a: 0x6c688420, 0x1d25b: 0x6d3d0c20, + 0x1d25c: 0x6d380c20, 0x1d25d: 0x6d41e620, 0x1d25e: 0x6c93ba20, 0x1d25f: 0x6cdc8c20, + 0x1d260: 0x6ca9d420, 0x1d261: 0x6ccb7820, 0x1d262: 0x6c5c6c20, 0x1d263: 0x6cc4de20, + 0x1d264: 0x6cab1e20, 0x1d265: 0x6d243420, 0x1d266: 0x6cb1f820, 0x1d267: 0x6c62bc20, + 0x1d268: 0x6ce9ce20, 0x1d269: 0x6cf1f420, 0x1d26a: 0x6c199e20, 0x1d26b: 0x6c5e1a20, + 0x1d26c: 0x6c7c1820, 0x1d26d: 0x6c93c020, 0x1d26e: 0x6c0c4c20, 0x1d26f: 0x6ccba820, + 0x1d270: 0x6cc4f420, 0x1d271: 0x6d3d1620, 0x1d272: 0x6c84d420, 0x1d273: 0x6c24aa20, + 0x1d274: 0x6d08f220, 0x1d275: 0x6cebc420, 0x1d276: 0x6c6f5620, 0x1d277: 0x6cbefa20, + 0x1d278: 0x6cf59020, 0x1d279: 0x6cbefe20, 0x1d27a: 0x6c796820, 0x1d27b: 0x6d207a20, + 0x1d27c: 0x6ccfc020, 0x1d27d: 0x6c6e1a20, 0x1d27e: 0x6d11f220, 0x1d27f: 0x6c1fe020, + // Block 0x74a, offset 0x1d280 + 0x1d280: 0x6d3cce20, 0x1d281: 0x6ce84420, 0x1d282: 0x6c814620, 0x1d283: 0x6cbca020, + 0x1d284: 0x6d2d2820, 0x1d285: 0x6d11a020, 0x1d286: 0x6c0b3020, 0x1d287: 0x6c05c420, + 0x1d288: 0x6d11a220, 0x1d289: 0x6c0ddc20, 0x1d28a: 0x6cebd420, 0x1d28b: 0x6d3a0820, + 0x1d28c: 0x6c699020, 0x1d28d: 0x6cbc3a20, 0x1d28e: 0x6c2e1020, 0x1d28f: 0x6cf36620, + 0x1d290: 0x6c4a5e20, 0x1d291: 0x6d10ea20, 0x1d292: 0x6d35fc20, 0x1d293: 0x6c205020, + 0x1d294: 0x6d120220, 0x1d295: 0x6ce5c220, 0x1d296: 0x6c69a020, 0x1d297: 0x6c205220, + 0x1d298: 0x6c6f1220, 0x1d299: 0x6cfeca20, 0x1d29a: 0x6c19f020, 0x1d29b: 0x6c79ec20, + 0x1d29c: 0x6c24ac20, 0x1d29d: 0x6cf29420, 0x1d29e: 0x6c289420, 0x1d29f: 0x6c7a4a20, + 0x1d2a0: 0x6c780c20, 0x1d2a1: 0x6d3d7020, 0x1d2a2: 0x6d05b420, 0x1d2a3: 0x6cda5420, + 0x1d2a4: 0x6c491c20, 0x1d2a5: 0x6c7c3e20, 0x1d2a6: 0x6c312420, 0x1d2a7: 0x6d3dfa20, + 0x1d2a8: 0x6d09a020, 0x1d2a9: 0x6cf29620, 0x1d2aa: 0x6cebea20, 0x1d2ab: 0x6d0bc620, + 0x1d2ac: 0x6d217820, 0x1d2ad: 0x6c726a20, 0x1d2ae: 0x6cbf5220, 0x1d2af: 0x6d113a20, + 0x1d2b0: 0x6d113c20, 0x1d2b1: 0x6ce5cc20, 0x1d2b2: 0x6c177820, 0x1d2b3: 0x6d228020, + 0x1d2b4: 0x6ce4bc20, 0x1d2b5: 0x6c2e3e20, 0x1d2b6: 0x6c729220, 0x1d2b7: 0x6c8aa820, + 0x1d2b8: 0x6cf6ce20, 0x1d2b9: 0x6cf52220, 0x1d2ba: 0x6c7c4420, 0x1d2bb: 0x6c206220, + 0x1d2bc: 0x6d2f7220, 0x1d2bd: 0x6c7b7c20, 0x1d2be: 0x6c7b7420, 0x1d2bf: 0x6c907420, + // Block 0x74b, offset 0x1d2c0 + 0x1d2c0: 0x6c199c20, 0x1d2c1: 0x6c256c20, 0x1d2c2: 0x6cb18420, 0x1d2c3: 0x6d2a9420, + 0x1d2c4: 0x6c24ba20, 0x1d2c5: 0x6cbc6820, 0x1d2c6: 0x6cbf7820, 0x1d2c7: 0x6c314c20, + 0x1d2c8: 0x6d2a9e20, 0x1d2c9: 0x6c904620, 0x1d2ca: 0x6cbd0a20, 0x1d2cb: 0x6c856c20, + 0x1d2cc: 0x6c1f0a20, 0x1d2cd: 0x6cd40c20, 0x1d2ce: 0x6c3fb820, 0x1d2cf: 0x6cba9220, + 0x1d2d0: 0x6c1f1c20, 0x1d2d1: 0x6c531820, 0x1d2d2: 0x6cb59820, 0x1d2d3: 0x6c508620, + 0x1d2d4: 0x6cd18420, 0x1d2d5: 0x6c3c0820, 0x1d2d6: 0x6cd5b220, 0x1d2d7: 0x6c9eb020, + 0x1d2d8: 0x6cc24020, 0x1d2d9: 0x6d2e5220, 0x1d2da: 0x6d3adc20, 0x1d2db: 0x6c8cd420, + 0x1d2dc: 0x6c8f8220, 0x1d2dd: 0x6c0e1620, 0x1d2de: 0x6c6e6a20, 0x1d2df: 0x6c6e7e20, + 0x1d2e0: 0x6d2eb620, 0x1d2e1: 0x6c046620, 0x1d2e2: 0x6cd8c220, 0x1d2e3: 0x6c75c020, + 0x1d2e4: 0x6c534e20, 0x1d2e5: 0x6ce74a20, 0x1d2e6: 0x6cd95a20, 0x1d2e7: 0x6c6e8820, + 0x1d2e8: 0x6c2e2e20, 0x1d2e9: 0x6d17f820, 0x1d2ea: 0x6cd5e820, 0x1d2eb: 0x6c6e7820, + 0x1d2ec: 0x6cc24c20, 0x1d2ed: 0x6c6b1020, 0x1d2ee: 0x6cb26020, 0x1d2ef: 0x6c329e20, + 0x1d2f0: 0x6ccea620, 0x1d2f1: 0x6d3bac20, 0x1d2f2: 0x6c136220, 0x1d2f3: 0x6c2ab020, + 0x1d2f4: 0x6c259e20, 0x1d2f5: 0x6cec5a20, 0x1d2f6: 0x6c6ec020, 0x1d2f7: 0x6c76fa20, + 0x1d2f8: 0x6c6ec420, 0x1d2f9: 0x6d39f020, 0x1d2fa: 0x6d39f620, 0x1d2fb: 0x6c821a20, + 0x1d2fc: 0x6cae9220, 0x1d2fd: 0x6d20e020, 0x1d2fe: 0x6c1b0e20, 0x1d2ff: 0x6c418820, + // Block 0x74c, offset 0x1d300 + 0x1d300: 0x6c984220, 0x1d301: 0x6d39fe20, 0x1d302: 0x6cedb820, 0x1d303: 0x6c321220, + 0x1d304: 0x6c5eac20, 0x1d305: 0x6cff7420, 0x1d306: 0x6c03f020, 0x1d307: 0x6cdb9820, + 0x1d308: 0x6c5ffc20, 0x1d309: 0x6cbdce20, 0x1d30a: 0x6d2faa20, 0x1d30b: 0x6cdce820, + 0x1d30c: 0x6d0b2020, 0x1d30d: 0x6d3c7e20, 0x1d30e: 0x6d255220, 0x1d30f: 0x6c568420, + 0x1d310: 0x6c4f6820, 0x1d311: 0x6cffe220, 0x1d312: 0x6c132e20, 0x1d313: 0x6c096c20, + 0x1d314: 0x6c08d020, 0x1d315: 0x6c658020, 0x1d316: 0x6d15de20, 0x1d317: 0x6c2ffc20, + 0x1d318: 0x6ccce220, 0x1d319: 0x6cd0fe20, 0x1d31a: 0x6c264820, 0x1d31b: 0x6c2b6c20, + 0x1d31c: 0x6d3a0e20, 0x1d31d: 0x6ca33420, 0x1d31e: 0x6c1aac20, 0x1d31f: 0x6c470620, + 0x1d320: 0x6c85f620, 0x1d321: 0x6cbcba20, 0x1d322: 0x6c9faa20, 0x1d323: 0x6c05ae20, + 0x1d324: 0x6ce58220, 0x1d325: 0x6cd8b620, 0x1d326: 0x6c3e5820, 0x1d327: 0x6c12de20, + 0x1d328: 0x6c07b420, 0x1d329: 0x6cae1a20, 0x1d32a: 0x6c26a020, 0x1d32b: 0x6d3f0620, + 0x1d32c: 0x6c2c4a20, 0x1d32d: 0x6c8cee20, 0x1d32e: 0x6d2ac420, 0x1d32f: 0x6caa4220, + 0x1d330: 0x6c3e5a20, 0x1d331: 0x6c467e20, 0x1d332: 0x6c389620, 0x1d333: 0x6c634e20, + 0x1d334: 0x6c41d820, 0x1d335: 0x6c394820, 0x1d336: 0x6cd2cc20, 0x1d337: 0x6c993820, + 0x1d338: 0x6cb35620, 0x1d339: 0x6ce45020, 0x1d33a: 0x6c648a20, 0x1d33b: 0x6cbf1820, + 0x1d33c: 0x6c8f8a20, 0x1d33d: 0x6c9fe420, 0x1d33e: 0x6c0af020, 0x1d33f: 0x6c960420, + // Block 0x74d, offset 0x1d340 + 0x1d340: 0x6c4b4c20, 0x1d341: 0x6cc10c20, 0x1d342: 0x6c1b2620, 0x1d343: 0x6d19e220, + 0x1d344: 0x6d120820, 0x1d345: 0x6cfc0e20, 0x1d346: 0x6c08e220, 0x1d347: 0x6cbf1a20, + 0x1d348: 0x6c7dfa20, 0x1d349: 0x6c2acc20, 0x1d34a: 0x6cff8c20, 0x1d34b: 0x6c6c4620, + 0x1d34c: 0x6cc2f420, 0x1d34d: 0x6cdcec20, 0x1d34e: 0x6cc7ae20, 0x1d34f: 0x6c381420, + 0x1d350: 0x6c7b9e20, 0x1d351: 0x6d3af620, 0x1d352: 0x6ce7b820, 0x1d353: 0x6c5ed820, + 0x1d354: 0x6c26a820, 0x1d355: 0x6c4f7a20, 0x1d356: 0x6c12ee20, 0x1d357: 0x6d383020, + 0x1d358: 0x6c79ee20, 0x1d359: 0x6c7f0e20, 0x1d35a: 0x6c09a820, 0x1d35b: 0x6ccc8a20, + 0x1d35c: 0x6c28fe20, 0x1d35d: 0x6d32c820, 0x1d35e: 0x6c12fa20, 0x1d35f: 0x6c3d7e20, + 0x1d360: 0x6d27b420, 0x1d361: 0x6ce8c620, 0x1d362: 0x6cabd820, 0x1d363: 0x6c83ec20, + 0x1d364: 0x6c80d020, 0x1d365: 0x6c71ba20, 0x1d366: 0x6c495820, 0x1d367: 0x6c65b020, + 0x1d368: 0x6c4e1e20, 0x1d369: 0x6ce75620, 0x1d36a: 0x6cf9d620, 0x1d36b: 0x6d366220, + 0x1d36c: 0x6c1a0e20, 0x1d36d: 0x6cdb9a20, 0x1d36e: 0x6cd39e20, 0x1d36f: 0x6d3b0c20, + 0x1d370: 0x6d424620, 0x1d371: 0x6cffb020, 0x1d372: 0x6cce7620, 0x1d373: 0x6ce67620, + 0x1d374: 0x6c12fc20, 0x1d375: 0x6d0c9e20, 0x1d376: 0x6c435020, 0x1d377: 0x6c7b2c20, + 0x1d378: 0x6c41a020, 0x1d379: 0x6c1dc020, 0x1d37a: 0x6c7c2e20, 0x1d37b: 0x6c42aa20, + 0x1d37c: 0x6d27b620, 0x1d37d: 0x6cab2a20, 0x1d37e: 0x6cb8f420, 0x1d37f: 0x6cffb220, + // Block 0x74e, offset 0x1d380 + 0x1d380: 0x6c65b220, 0x1d381: 0x6cb3de20, 0x1d382: 0x6c7f1c20, 0x1d383: 0x6d405c20, + 0x1d384: 0x6c08ec20, 0x1d385: 0x6c0a0420, 0x1d386: 0x6c0a0620, 0x1d387: 0x6c448c20, + 0x1d388: 0x6cdf3020, 0x1d389: 0x6c48e020, 0x1d38a: 0x6d209420, 0x1d38b: 0x6c64cc20, + 0x1d38c: 0x6c2a2420, 0x1d38d: 0x6c472420, 0x1d38e: 0x6c1b4420, 0x1d38f: 0x6d32e220, + 0x1d390: 0x6cbed220, 0x1d391: 0x6ccc6820, 0x1d392: 0x6d38ec20, 0x1d393: 0x6c928e20, + 0x1d394: 0x6c0f3020, 0x1d395: 0x6c5f0a20, 0x1d396: 0x6c8bc420, 0x1d397: 0x6cdb9e20, + 0x1d398: 0x6c75d420, 0x1d399: 0x6c3ec820, 0x1d39a: 0x6d2c4220, 0x1d39b: 0x6c472620, + 0x1d39c: 0x6c798620, 0x1d39d: 0x6cb9b220, 0x1d39e: 0x6cb90a20, 0x1d39f: 0x6c75d620, + 0x1d3a0: 0x6c20dc20, 0x1d3a1: 0x6c495a20, 0x1d3a2: 0x6d250420, 0x1d3a3: 0x6c130820, + 0x1d3a4: 0x6d40cc20, 0x1d3a5: 0x6c0fe620, 0x1d3a6: 0x6d2ae420, 0x1d3a7: 0x6cbcd620, + 0x1d3a8: 0x6cebb020, 0x1d3a9: 0x6c954e20, 0x1d3aa: 0x6c27ec20, 0x1d3ab: 0x6cfef420, + 0x1d3ac: 0x6cc92620, 0x1d3ad: 0x6c66ba20, 0x1d3ae: 0x6d07c020, 0x1d3af: 0x6c0b0020, + 0x1d3b0: 0x6cdcfc20, 0x1d3b1: 0x6cfd8620, 0x1d3b2: 0x6cfc2420, 0x1d3b3: 0x6cb2c620, + 0x1d3b4: 0x6d318c20, 0x1d3b5: 0x6d039420, 0x1d3b6: 0x6c559420, 0x1d3b7: 0x6d154a20, + 0x1d3b8: 0x6d3b1420, 0x1d3b9: 0x6d265820, 0x1d3ba: 0x6c211020, 0x1d3bb: 0x6c93f620, + 0x1d3bc: 0x6cf37e20, 0x1d3bd: 0x6c303820, 0x1d3be: 0x6cd79a20, 0x1d3bf: 0x6c609020, + // Block 0x74f, offset 0x1d3c0 + 0x1d3c0: 0x6c6af220, 0x1d3c1: 0x6c59ee20, 0x1d3c2: 0x6d039620, 0x1d3c3: 0x6c9aa820, + 0x1d3c4: 0x6c396a20, 0x1d3c5: 0x6c200a20, 0x1d3c6: 0x6d3bde20, 0x1d3c7: 0x6cb0fc20, + 0x1d3c8: 0x6c3c6220, 0x1d3c9: 0x6d3a2820, 0x1d3ca: 0x6c59f020, 0x1d3cb: 0x6cbce020, + 0x1d3cc: 0x6c542420, 0x1d3cd: 0x6cbfbe20, 0x1d3ce: 0x6c9e9a20, 0x1d3cf: 0x6cba7620, + 0x1d3d0: 0x6c483c20, 0x1d3d1: 0x6c7d1020, 0x1d3d2: 0x6cd41c20, 0x1d3d3: 0x6c90f420, + 0x1d3d4: 0x6d27c820, 0x1d3d5: 0x6c517020, 0x1d3d6: 0x6ce13420, 0x1d3d7: 0x6d26ee20, + 0x1d3d8: 0x6c1d7e20, 0x1d3d9: 0x6c42de20, 0x1d3da: 0x6c3a7020, 0x1d3db: 0x6cc92e20, + 0x1d3dc: 0x6d32f420, 0x1d3dd: 0x6c465e20, 0x1d3de: 0x6ca87220, 0x1d3df: 0x6cba7e20, + 0x1d3e0: 0x6cffbc20, 0x1d3e1: 0x6c24b420, 0x1d3e2: 0x6c903820, 0x1d3e3: 0x6caec620, + 0x1d3e4: 0x6c322e20, 0x1d3e5: 0x6c867e20, 0x1d3e6: 0x6c0a5420, 0x1d3e7: 0x6d3d9e20, + 0x1d3e8: 0x6c1ea820, 0x1d3e9: 0x6ccc9020, 0x1d3ea: 0x6c1b5220, 0x1d3eb: 0x6d3b2c20, + 0x1d3ec: 0x6cbada20, 0x1d3ed: 0x6c8fae20, 0x1d3ee: 0x6c7fb620, 0x1d3ef: 0x6c64fa20, + 0x1d3f0: 0x6c10ba20, 0x1d3f1: 0x6c844220, 0x1d3f2: 0x6c5c5820, 0x1d3f3: 0x6c0a5620, + 0x1d3f4: 0x6c2b9020, 0x1d3f5: 0x6c236420, 0x1d3f6: 0x6d0c3620, 0x1d3f7: 0x6caf2020, + 0x1d3f8: 0x6c11e020, 0x1d3f9: 0x6d3be620, 0x1d3fa: 0x6cb02220, 0x1d3fb: 0x6cb19e20, + 0x1d3fc: 0x6c30c820, 0x1d3fd: 0x6d243620, 0x1d3fe: 0x6c9ef820, 0x1d3ff: 0x6ce96020, + // Block 0x750, offset 0x1d400 + 0x1d400: 0x6d2b1020, 0x1d401: 0x6ccc9220, 0x1d402: 0x6c4b8420, 0x1d403: 0x6d156e20, + 0x1d404: 0x6c56cc20, 0x1d405: 0x6c15e620, 0x1d406: 0x6c7a0820, 0x1d407: 0x6c246820, + 0x1d408: 0x6cb2d620, 0x1d409: 0x6d2a9020, 0x1d40a: 0x6c5f5620, 0x1d40b: 0x6c4b1c20, + 0x1d40c: 0x6cdb3820, 0x1d40d: 0x6c90fc20, 0x1d40e: 0x6c131a20, 0x1d40f: 0x6c92e820, + 0x1d410: 0x6ca73e20, 0x1d411: 0x6cdd3820, 0x1d412: 0x6c24b620, 0x1d413: 0x6c2e5420, + 0x1d414: 0x6cdd4020, 0x1d415: 0x6c822a20, 0x1d416: 0x6c32dc20, 0x1d417: 0x6c89d020, + 0x1d418: 0x6cff2220, 0x1d419: 0x6c0f9420, 0x1d41a: 0x6c9da020, 0x1d41b: 0x6ccc9420, + 0x1d41c: 0x6c299c20, 0x1d41d: 0x6c8a3620, 0x1d41e: 0x6c280c20, 0x1d41f: 0x6c2d8e20, + 0x1d420: 0x6c3f9020, 0x1d421: 0x6c65f820, 0x1d422: 0x6c9fd020, 0x1d423: 0x6c7d2820, + 0x1d424: 0x6c27a020, 0x1d425: 0x6c689820, 0x1d426: 0x6c2ab620, 0x1d427: 0x6c5a0c20, + 0x1d428: 0x6cdd0020, 0x1d429: 0x6c818220, 0x1d42a: 0x6d295220, 0x1d42b: 0x6cff3c20, + 0x1d42c: 0x6c931e20, 0x1d42d: 0x6cd3f620, 0x1d42e: 0x6d295420, 0x1d42f: 0x6cb81c20, + 0x1d430: 0x6cac0a20, 0x1d431: 0x6cb81e20, 0x1d432: 0x6cac0c20, 0x1d433: 0x6c41f620, + 0x1d434: 0x6c72b220, 0x1d435: 0x6c328a20, 0x1d436: 0x6c930620, 0x1d437: 0x6d0cf220, + 0x1d438: 0x6c0fea20, 0x1d439: 0x6c291820, 0x1d43a: 0x6cc9ec20, 0x1d43b: 0x6d3b5e20, + 0x1d43c: 0x6c8fca20, 0x1d43d: 0x6cb94020, 0x1d43e: 0x6c888420, 0x1d43f: 0x6c10cc20, + // Block 0x751, offset 0x1d440 + 0x1d440: 0x6d396220, 0x1d441: 0x6c7f6e20, 0x1d442: 0x6cd42020, 0x1d443: 0x6c7fec20, + 0x1d444: 0x6c7d3420, 0x1d445: 0x6d21d620, 0x1d446: 0x6d270420, 0x1d447: 0x6c500020, + 0x1d448: 0x6d31a220, 0x1d449: 0x6cdf5020, 0x1d44a: 0x6ce43e20, 0x1d44b: 0x6ca8a420, + 0x1d44c: 0x6c1e0420, 0x1d44d: 0x6c60ec20, 0x1d44e: 0x6d199820, 0x1d44f: 0x6cb82020, + 0x1d450: 0x6ce2ca20, 0x1d451: 0x6d3c0020, 0x1d452: 0x6d396820, 0x1d453: 0x6c387020, + 0x1d454: 0x6cda3c20, 0x1d455: 0x6d396620, 0x1d456: 0x6cba9820, 0x1d457: 0x6d3de020, + 0x1d458: 0x6ce2d420, 0x1d459: 0x6c933a20, 0x1d45a: 0x6c919420, 0x1d45b: 0x6c662a20, + 0x1d45c: 0x6cebbe20, 0x1d45d: 0x6d1cd420, 0x1d45e: 0x6d248620, 0x1d45f: 0x6c7f7e20, + 0x1d460: 0x6c8ff420, 0x1d461: 0x6cbd1620, 0x1d462: 0x6c88a220, 0x1d463: 0x6c800a20, + 0x1d464: 0x6cb95c20, 0x1d465: 0x6d272020, 0x1d466: 0x6d37e420, 0x1d467: 0x6cc20e20, + 0x1d468: 0x6c88a420, 0x1d469: 0x6c0b2820, 0x1d46a: 0x6c32ea20, 0x1d46b: 0x6d415a20, + 0x1d46c: 0x6c84d620, 0x1d46d: 0x6cd86220, 0x1d46e: 0x6c958e20, 0x1d46f: 0x6d1cde20, + 0x1d470: 0x6d273820, 0x1d471: 0x6d3df220, 0x1d472: 0x6d24ae20, 0x1d473: 0x6c9cd620, + 0x1d474: 0x6c2b5820, 0x1d475: 0x6c388a20, 0x1d476: 0x6ccfb020, 0x1d477: 0x6d302820, + 0x1d478: 0x6ccfc220, 0x1d479: 0x6caa7220, 0x1d47a: 0x6c50e220, 0x1d47b: 0x6c832420, + 0x1d47c: 0x6cfa8e20, 0x1d47d: 0x6d3efa20, 0x1d47e: 0x6ca5c620, 0x1d47f: 0x6c25b420, + // Block 0x752, offset 0x1d480 + 0x1d480: 0x6d2f4620, 0x1d481: 0x6cb8c020, 0x1d482: 0x6d2d5a20, 0x1d483: 0x6c08d220, + 0x1d484: 0x6c04c620, 0x1d485: 0x6cf4d820, 0x1d486: 0x6ccbde20, 0x1d487: 0x6c772a20, + 0x1d488: 0x6cc77620, 0x1d489: 0x6c3bba20, 0x1d48a: 0x6c096e20, 0x1d48b: 0x6c252620, + 0x1d48c: 0x6d1b9a20, 0x1d48d: 0x6d304020, 0x1d48e: 0x6c1b9020, 0x1d48f: 0x6cdf8620, + 0x1d490: 0x6c56fa20, 0x1d491: 0x6c033c20, 0x1d492: 0x6c85f820, 0x1d493: 0x6c419620, + 0x1d494: 0x6c722e20, 0x1d495: 0x6cb38420, 0x1d496: 0x6ca10c20, 0x1d497: 0x6c241020, + 0x1d498: 0x6d2d6e20, 0x1d499: 0x6d392220, 0x1d49a: 0x6c83c620, 0x1d49b: 0x6cdaac20, + 0x1d49c: 0x6ce5d620, 0x1d49d: 0x6c85fa20, 0x1d49e: 0x6cf62220, 0x1d49f: 0x6cdab620, + 0x1d4a0: 0x6c535020, 0x1d4a1: 0x6ce74c20, 0x1d4a2: 0x6d3e4420, 0x1d4a3: 0x6c12e020, + 0x1d4a4: 0x6d26bc20, 0x1d4a5: 0x6d388620, 0x1d4a6: 0x6c8bb820, 0x1d4a7: 0x6d3c1a20, + 0x1d4a8: 0x6c042220, 0x1d4a9: 0x6c81f620, 0x1d4aa: 0x6c3bda20, 0x1d4ab: 0x6c375820, + 0x1d4ac: 0x6cc10e20, 0x1d4ad: 0x6c521620, 0x1d4ae: 0x6c895a20, 0x1d4af: 0x6cfcd820, + 0x1d4b0: 0x6c3ea020, 0x1d4b1: 0x6c895c20, 0x1d4b2: 0x6c11fa20, 0x1d4b3: 0x6c6dc220, + 0x1d4b4: 0x6c851c20, 0x1d4b5: 0x6d26c620, 0x1d4b6: 0x6c929020, 0x1d4b7: 0x6c714020, + 0x1d4b8: 0x6cb61e20, 0x1d4b9: 0x6c254e20, 0x1d4ba: 0x6c045220, 0x1d4bb: 0x6d2ece20, + 0x1d4bc: 0x6c8bc620, 0x1d4bd: 0x6d402620, 0x1d4be: 0x6c6dcc20, 0x1d4bf: 0x6c4cc420, + // Block 0x753, offset 0x1d4c0 + 0x1d4c0: 0x6c57e020, 0x1d4c1: 0x6cca2220, 0x1d4c2: 0x6cca2620, 0x1d4c3: 0x6ce12a20, + 0x1d4c4: 0x6c0b4c20, 0x1d4c5: 0x6cc75c20, 0x1d4c6: 0x6c9e5c20, 0x1d4c7: 0x6c542620, + 0x1d4c8: 0x6d065220, 0x1d4c9: 0x6d402a20, 0x1d4ca: 0x6c56fe20, 0x1d4cb: 0x6c66be20, + 0x1d4cc: 0x6d294e20, 0x1d4cd: 0x6c225e20, 0x1d4ce: 0x6c843020, 0x1d4cf: 0x6d021a20, + 0x1d4d0: 0x6c3da020, 0x1d4d1: 0x6cab1220, 0x1d4d2: 0x6c076020, 0x1d4d3: 0x6c47d020, + 0x1d4d4: 0x6d052820, 0x1d4d5: 0x6c42e020, 0x1d4d6: 0x6ce13620, 0x1d4d7: 0x6cc0b220, + 0x1d4d8: 0x6c645620, 0x1d4d9: 0x6c126a20, 0x1d4da: 0x6d3c2420, 0x1d4db: 0x6ce14020, + 0x1d4dc: 0x6c9c7c20, 0x1d4dd: 0x6cca2c20, 0x1d4de: 0x6c3bf420, 0x1d4df: 0x6d2a2620, + 0x1d4e0: 0x6c775620, 0x1d4e1: 0x6c67fe20, 0x1d4e2: 0x6ca07e20, 0x1d4e3: 0x6cca3020, + 0x1d4e4: 0x6cca3220, 0x1d4e5: 0x6cab1c20, 0x1d4e6: 0x6cf70820, 0x1d4e7: 0x6c897420, + 0x1d4e8: 0x6c680820, 0x1d4e9: 0x6c7b4620, 0x1d4ea: 0x6c0ffa20, 0x1d4eb: 0x6c58b620, + 0x1d4ec: 0x6cd63620, 0x1d4ed: 0x6d403e20, 0x1d4ee: 0x6cfd4020, 0x1d4ef: 0x6cab2020, + 0x1d4f0: 0x6ce97020, 0x1d4f1: 0x6ca8b820, 0x1d4f2: 0x6c873020, 0x1d4f3: 0x6d42b220, + 0x1d4f4: 0x6c2bb820, 0x1d4f5: 0x6ca8ba20, 0x1d4f6: 0x6ce5e420, 0x1d4f7: 0x6c809820, + 0x1d4f8: 0x6c9d1a20, 0x1d4f9: 0x6cd7c020, 0x1d4fa: 0x6c6f5820, 0x1d4fb: 0x6cf83e20, + 0x1d4fc: 0x6c456620, 0x1d4fd: 0x6d331c20, 0x1d4fe: 0x6c6f5e20, 0x1d4ff: 0x6d201c20, + // Block 0x754, offset 0x1d500 + 0x1d500: 0x6c61b020, 0x1d501: 0x6c143a20, 0x1d502: 0x6d391020, 0x1d503: 0x6d09f020, + 0x1d504: 0x6d264a20, 0x1d505: 0x6c531c20, 0x1d506: 0x6d207e20, 0x1d507: 0x6c50e420, + 0x1d508: 0x6cecce20, 0x1d509: 0x6cc5d820, 0x1d50a: 0x6cf1d220, 0x1d50b: 0x6cf18c20, + 0x1d50c: 0x6cc03620, 0x1d50d: 0x6ca32820, 0x1d50e: 0x6d3e1c20, 0x1d50f: 0x6ce80c20, + 0x1d510: 0x6ca99020, 0x1d511: 0x6c3d1420, 0x1d512: 0x6c61d020, 0x1d513: 0x6cd4c020, + 0x1d514: 0x6c213c20, 0x1d515: 0x6caf5a20, 0x1d516: 0x6d323220, 0x1d517: 0x6ccbe020, + 0x1d518: 0x6c532e20, 0x1d519: 0x6d351220, 0x1d51a: 0x6c5ffe20, 0x1d51b: 0x6c3b2220, + 0x1d51c: 0x6d279e20, 0x1d51d: 0x6cc5de20, 0x1d51e: 0x6c283220, 0x1d51f: 0x6c6c4020, + 0x1d520: 0x6cda9420, 0x1d521: 0x6c39d220, 0x1d522: 0x6cdd5a20, 0x1d523: 0x6c252820, + 0x1d524: 0x6c6fb820, 0x1d525: 0x6d288c20, 0x1d526: 0x6c03f220, 0x1d527: 0x6c6c8c20, + 0x1d528: 0x6c3d6a20, 0x1d529: 0x6d35fe20, 0x1d52a: 0x6c229820, 0x1d52b: 0x6d3f1620, + 0x1d52c: 0x6c1da620, 0x1d52d: 0x6c533e20, 0x1d52e: 0x6d288e20, 0x1d52f: 0x6c833420, + 0x1d530: 0x6cf87a20, 0x1d531: 0x6c3e5c20, 0x1d532: 0x6d019a20, 0x1d533: 0x6ccfe020, + 0x1d534: 0x6c0e6c20, 0x1d535: 0x6d3ae820, 0x1d536: 0x6cc0fc20, 0x1d537: 0x6c8cf020, + 0x1d538: 0x6d3aea20, 0x1d539: 0x6cced620, 0x1d53a: 0x6c421e20, 0x1d53b: 0x6d101420, + 0x1d53c: 0x6c3e5e20, 0x1d53d: 0x6ceb1820, 0x1d53e: 0x6d31d420, 0x1d53f: 0x6c275e20, + // Block 0x755, offset 0x1d540 + 0x1d540: 0x6c1f3420, 0x1d541: 0x6cd1b420, 0x1d542: 0x6d37b620, 0x1d543: 0x6cfb4e20, + 0x1d544: 0x6d411a20, 0x1d545: 0x6c6ede20, 0x1d546: 0x6c04f820, 0x1d547: 0x6cc18c20, + 0x1d548: 0x6ca10e20, 0x1d549: 0x6cd5c620, 0x1d54a: 0x6d41ac20, 0x1d54b: 0x6c7c2c20, + 0x1d54c: 0x6c6db020, 0x1d54d: 0x6cc5f220, 0x1d54e: 0x6c4f7c20, 0x1d54f: 0x6d01b220, + 0x1d550: 0x6c6ad620, 0x1d551: 0x6d39a820, 0x1d552: 0x6c1db420, 0x1d553: 0x6c48b620, + 0x1d554: 0x6c042420, 0x1d555: 0x6c745420, 0x1d556: 0x6c7bf620, 0x1d557: 0x6c556220, + 0x1d558: 0x6c22c620, 0x1d559: 0x6c587820, 0x1d55a: 0x6c44d220, 0x1d55b: 0x6ce1c820, + 0x1d55c: 0x6c6ad820, 0x1d55d: 0x6c7a9a20, 0x1d55e: 0x6c68fc20, 0x1d55f: 0x6cc2f620, + 0x1d560: 0x6c411620, 0x1d561: 0x6c960620, 0x1d562: 0x6d089620, 0x1d563: 0x6c07ee20, + 0x1d564: 0x6cfcc620, 0x1d565: 0x6c3e8620, 0x1d566: 0x6c449420, 0x1d567: 0x6c307a20, + 0x1d568: 0x6cc67a20, 0x1d569: 0x6ce5d820, 0x1d56a: 0x6d19e420, 0x1d56b: 0x6c82c220, + 0x1d56c: 0x6d01b420, 0x1d56d: 0x6c736820, 0x1d56e: 0x6d06e020, 0x1d56f: 0x6c40f820, + 0x1d570: 0x6c2eae20, 0x1d571: 0x6ce7ba20, 0x1d572: 0x6cd7ea20, 0x1d573: 0x6c67e820, + 0x1d574: 0x6cfdc420, 0x1d575: 0x6c5bc820, 0x1d576: 0x6c745620, 0x1d577: 0x6d346820, + 0x1d578: 0x6c65b420, 0x1d579: 0x6c737620, 0x1d57a: 0x6c1ac020, 0x1d57b: 0x6c9e2c20, + 0x1d57c: 0x6d31e820, 0x1d57d: 0x6c939e20, 0x1d57e: 0x6c1a1020, 0x1d57f: 0x6cc07a20, + // Block 0x756, offset 0x1d580 + 0x1d580: 0x6cd4ec20, 0x1d581: 0x6c055020, 0x1d582: 0x6ce7bc20, 0x1d583: 0x6cfedc20, + 0x1d584: 0x6c588020, 0x1d585: 0x6cbd3620, 0x1d586: 0x6c451220, 0x1d587: 0x6d052620, + 0x1d588: 0x6ce34c20, 0x1d589: 0x6ce82e20, 0x1d58a: 0x6d00c020, 0x1d58b: 0x6c536420, + 0x1d58c: 0x6cf8a420, 0x1d58d: 0x6c3ea220, 0x1d58e: 0x6ce64620, 0x1d58f: 0x6cdbcc20, + 0x1d590: 0x6c335220, 0x1d591: 0x6c7db620, 0x1d592: 0x6c3d8020, 0x1d593: 0x6c6dc420, + 0x1d594: 0x6c56a620, 0x1d595: 0x6d33f820, 0x1d596: 0x6d0ca020, 0x1d597: 0x6c6f1c20, + 0x1d598: 0x6c3cb020, 0x1d599: 0x6c622020, 0x1d59a: 0x6d077420, 0x1d59b: 0x6cc60c20, + 0x1d59c: 0x6d3faa20, 0x1d59d: 0x6c187820, 0x1d59e: 0x6c34a420, 0x1d59f: 0x6c865020, + 0x1d5a0: 0x6c93ec20, 0x1d5a1: 0x6c896020, 0x1d5a2: 0x6c1dcc20, 0x1d5a3: 0x6cc36420, + 0x1d5a4: 0x6ccede20, 0x1d5a5: 0x6cb62020, 0x1d5a6: 0x6cb62220, 0x1d5a7: 0x6d3ce020, + 0x1d5a8: 0x6cb62420, 0x1d5a9: 0x6ced3420, 0x1d5aa: 0x6cba6a20, 0x1d5ab: 0x6cfcec20, + 0x1d5ac: 0x6cd47420, 0x1d5ad: 0x6cef2220, 0x1d5ae: 0x6cb70e20, 0x1d5af: 0x6ce23020, + 0x1d5b0: 0x6ced3620, 0x1d5b1: 0x6c428c20, 0x1d5b2: 0x6cee3020, 0x1d5b3: 0x6c080420, + 0x1d5b4: 0x6d3cc620, 0x1d5b5: 0x6c113a20, 0x1d5b6: 0x6c4cc620, 0x1d5b7: 0x6c255020, + 0x1d5b8: 0x6c950420, 0x1d5b9: 0x6c8f1020, 0x1d5ba: 0x6cb71020, 0x1d5bb: 0x6d2e6e20, + 0x1d5bc: 0x6c0a0820, 0x1d5bd: 0x6c21cc20, 0x1d5be: 0x6c8d3c20, 0x1d5bf: 0x6c9dca20, + // Block 0x757, offset 0x1d5c0 + 0x1d5c0: 0x6cb51420, 0x1d5c1: 0x6cbcd820, 0x1d5c2: 0x6ce4b420, 0x1d5c3: 0x6d3fac20, + 0x1d5c4: 0x6c4bd820, 0x1d5c5: 0x6d405e20, 0x1d5c6: 0x6cf67c20, 0x1d5c7: 0x6d3e6a20, + 0x1d5c8: 0x6d043220, 0x1d5c9: 0x6c899a20, 0x1d5ca: 0x6c6ca420, 0x1d5cb: 0x6c3a1220, + 0x1d5cc: 0x6cc8a020, 0x1d5cd: 0x6c9f7220, 0x1d5ce: 0x6d239e20, 0x1d5cf: 0x6d400420, + 0x1d5d0: 0x6c38ae20, 0x1d5d1: 0x6c93ee20, 0x1d5d2: 0x6d071620, 0x1d5d3: 0x6d1bd820, + 0x1d5d4: 0x6cce5620, 0x1d5d5: 0x6cb81820, 0x1d5d6: 0x6d073020, 0x1d5d7: 0x6cfd8820, + 0x1d5d8: 0x6c64dc20, 0x1d5d9: 0x6c78ce20, 0x1d5da: 0x6cfcfe20, 0x1d5db: 0x6cc87620, + 0x1d5dc: 0x6c9dcc20, 0x1d5dd: 0x6c5f1c20, 0x1d5de: 0x6c32d820, 0x1d5df: 0x6c1d1e20, + 0x1d5e0: 0x6c2c9420, 0x1d5e1: 0x6c9f7820, 0x1d5e2: 0x6c9e7c20, 0x1d5e3: 0x6d259c20, + 0x1d5e4: 0x6d01fe20, 0x1d5e5: 0x6c060e20, 0x1d5e6: 0x6cd82020, 0x1d5e7: 0x6cbfc020, + 0x1d5e8: 0x6c0b0220, 0x1d5e9: 0x6c58dc20, 0x1d5ea: 0x6c44d820, 0x1d5eb: 0x6c234620, + 0x1d5ec: 0x6c9e3820, 0x1d5ed: 0x6cf0c420, 0x1d5ee: 0x6c403620, 0x1d5ef: 0x6cf00620, + 0x1d5f0: 0x6ce7f420, 0x1d5f1: 0x6c465a20, 0x1d5f2: 0x6c9e9c20, 0x1d5f3: 0x6d00de20, + 0x1d5f4: 0x6c891220, 0x1d5f5: 0x6d3fb620, 0x1d5f6: 0x6c0bb620, 0x1d5f7: 0x6d284a20, + 0x1d5f8: 0x6d19fc20, 0x1d5f9: 0x6ce36820, 0x1d5fa: 0x6c486c20, 0x1d5fb: 0x6d36ea20, + 0x1d5fc: 0x6d284c20, 0x1d5fd: 0x6c198c20, 0x1d5fe: 0x6c152020, 0x1d5ff: 0x6c278c20, + // Block 0x758, offset 0x1d600 + 0x1d600: 0x6cf9ea20, 0x1d601: 0x6d259e20, 0x1d602: 0x6d400620, 0x1d603: 0x6d05da20, + 0x1d604: 0x6d1d6a20, 0x1d605: 0x6cf14420, 0x1d606: 0x6c44da20, 0x1d607: 0x6d07c220, + 0x1d608: 0x6d1c9c20, 0x1d609: 0x6c6d5220, 0x1d60a: 0x6d18ae20, 0x1d60b: 0x6d3ca220, + 0x1d60c: 0x6ca6c020, 0x1d60d: 0x6c053c20, 0x1d60e: 0x6c47c820, 0x1d60f: 0x6cac7220, + 0x1d610: 0x6d395420, 0x1d611: 0x6c64fc20, 0x1d612: 0x6c220a20, 0x1d613: 0x6cc31620, + 0x1d614: 0x6cd6e020, 0x1d615: 0x6d276620, 0x1d616: 0x6cf9f220, 0x1d617: 0x6c24ea20, + 0x1d618: 0x6cf6d220, 0x1d619: 0x6cc6a620, 0x1d61a: 0x6ce1ea20, 0x1d61b: 0x6c405420, + 0x1d61c: 0x6d27ca20, 0x1d61d: 0x6c188820, 0x1d61e: 0x6c432020, 0x1d61f: 0x6cc82820, + 0x1d620: 0x6c55b820, 0x1d621: 0x6d294620, 0x1d622: 0x6ce2b420, 0x1d623: 0x6cfd1020, + 0x1d624: 0x6cdb1e20, 0x1d625: 0x6d31fc20, 0x1d626: 0x6d403420, 0x1d627: 0x6ce1ec20, + 0x1d628: 0x6c5a8420, 0x1d629: 0x6c114a20, 0x1d62a: 0x6c0a5820, 0x1d62b: 0x6c3cf620, + 0x1d62c: 0x6c246a20, 0x1d62d: 0x6c844620, 0x1d62e: 0x6cdd4220, 0x1d62f: 0x6d0ddc20, + 0x1d630: 0x6cf81820, 0x1d631: 0x6d403820, 0x1d632: 0x6c826420, 0x1d633: 0x6c739820, + 0x1d634: 0x6cba8220, 0x1d635: 0x6c980820, 0x1d636: 0x6d34a420, 0x1d637: 0x6c93bc20, + 0x1d638: 0x6ca2b220, 0x1d639: 0x6cb1a020, 0x1d63a: 0x6c885220, 0x1d63b: 0x6c9c8020, + 0x1d63c: 0x6d08bc20, 0x1d63d: 0x6d400a20, 0x1d63e: 0x6c5f5820, 0x1d63f: 0x6ccd1220, + // Block 0x759, offset 0x1d640 + 0x1d640: 0x6cdc8e20, 0x1d641: 0x6c38ca20, 0x1d642: 0x6c940620, 0x1d643: 0x6c083020, + 0x1d644: 0x6d141e20, 0x1d645: 0x6ccac220, 0x1d646: 0x6ca1ec20, 0x1d647: 0x6d114c20, + 0x1d648: 0x6cbb4a20, 0x1d649: 0x6c5d0220, 0x1d64a: 0x6cfd5a20, 0x1d64b: 0x6c629a20, + 0x1d64c: 0x6ccc8620, 0x1d64d: 0x6d055220, 0x1d64e: 0x6cc49420, 0x1d64f: 0x6d08be20, + 0x1d650: 0x6cdca020, 0x1d651: 0x6cbbc020, 0x1d652: 0x6d2b9e20, 0x1d653: 0x6d427020, + 0x1d654: 0x6d341e20, 0x1d655: 0x6ccdca20, 0x1d656: 0x6cca3420, 0x1d657: 0x6c8bf020, + 0x1d658: 0x6d243820, 0x1d659: 0x6c386220, 0x1d65a: 0x6c8a3820, 0x1d65b: 0x6c21e020, + 0x1d65c: 0x6d41f820, 0x1d65d: 0x6c66f220, 0x1d65e: 0x6cc54a20, 0x1d65f: 0x6c15f020, + 0x1d660: 0x6cc8b620, 0x1d661: 0x6d055620, 0x1d662: 0x6c5c6e20, 0x1d663: 0x6c57ca20, + 0x1d664: 0x6d414a20, 0x1d665: 0x6cf70a20, 0x1d666: 0x6cbb4e20, 0x1d667: 0x6d287c20, + 0x1d668: 0x6c270220, 0x1d669: 0x6cd12620, 0x1d66a: 0x6c5c7e20, 0x1d66b: 0x6cf91620, + 0x1d66c: 0x6ccb8020, 0x1d66d: 0x6c660020, 0x1d66e: 0x6c679220, 0x1d66f: 0x6c58b820, + 0x1d670: 0x6d2a5e20, 0x1d671: 0x6c236e20, 0x1d672: 0x6d026020, 0x1d673: 0x6c695a20, + 0x1d674: 0x6c0aa820, 0x1d675: 0x6c28de20, 0x1d676: 0x6d191020, 0x1d677: 0x6ca9ec20, + 0x1d678: 0x6cdca220, 0x1d679: 0x6d191220, 0x1d67a: 0x6ccc9a20, 0x1d67b: 0x6d060420, + 0x1d67c: 0x6c62cc20, 0x1d67d: 0x6c0d6c20, 0x1d67e: 0x6cba3020, 0x1d67f: 0x6c7fee20, + // Block 0x75a, offset 0x1d680 + 0x1d680: 0x6cb47020, 0x1d681: 0x6d09c620, 0x1d682: 0x6d415420, 0x1d683: 0x6cb69620, + 0x1d684: 0x6caee820, 0x1d685: 0x6d124620, 0x1d686: 0x6ca19a20, 0x1d687: 0x6c835c20, + 0x1d688: 0x6d012820, 0x1d689: 0x6d415620, 0x1d68a: 0x6c7c1a20, 0x1d68b: 0x6d1ed220, + 0x1d68c: 0x6d076220, 0x1d68d: 0x6c828420, 0x1d68e: 0x6cfb0420, 0x1d68f: 0x6c156220, + 0x1d690: 0x6c69f220, 0x1d691: 0x6c919620, 0x1d692: 0x6c156a20, 0x1d693: 0x6d1c4020, + 0x1d694: 0x6c111820, 0x1d695: 0x6cc51620, 0x1d696: 0x6cfb1620, 0x1d697: 0x6d418620, + 0x1d698: 0x6d415c20, 0x1d699: 0x6c965220, 0x1d69a: 0x6c84e020, 0x1d69b: 0x6c2a5220, + 0x1d69c: 0x6c806a20, 0x1d69d: 0x6c82ac20, 0x1d69e: 0x6c894020, 0x1d69f: 0x6cd7b620, + 0x1d6a0: 0x6c6f4620, 0x1d6a1: 0x6d207420, 0x1d6a2: 0x6c52ee20, 0x1d6a3: 0x6d38f420, + 0x1d6a4: 0x6cfa7420, 0x1d6a5: 0x6c436a20, 0x1d6a6: 0x6d264820, 0x1d6a7: 0x6c5fce20, + 0x1d6a8: 0x6cecbc20, 0x1d6a9: 0x6c7bda20, 0x1d6aa: 0x6c617a20, 0x1d6ab: 0x6cc5b820, + 0x1d6ac: 0x6cef8820, 0x1d6ad: 0x6d278220, 0x1d6ae: 0x6c52fc20, 0x1d6af: 0x6c213420, + 0x1d6b0: 0x6caf2c20, 0x1d6b1: 0x6ccbca20, 0x1d6b2: 0x6c425820, 0x1d6b3: 0x6ca30820, + 0x1d6b4: 0x6cc5c620, 0x1d6b5: 0x6d401620, 0x1d6b6: 0x6c94dc20, 0x1d6b7: 0x6c3b1220, + 0x1d6b8: 0x6d34ec20, 0x1d6b9: 0x6cf17e20, 0x1d6ba: 0x6c39c220, 0x1d6bb: 0x6d3aa420, + 0x1d6bc: 0x6d321420, 0x1d6bd: 0x6ca97c20, 0x1d6be: 0x6cd4a020, 0x1d6bf: 0x6cfc8220, + // Block 0x75b, offset 0x1d6c0 + 0x1d6c0: 0x6c421220, 0x1d6c1: 0x6d016620, 0x1d6c2: 0x6c3dfa20, 0x1d6c3: 0x6c88e420, + 0x1d6c4: 0x6d410c20, 0x1d6c5: 0x6ccfb220, 0x1d6c6: 0x6cf84e20, 0x1d6c7: 0x6d33a020, + 0x1d6c8: 0x6d37a020, 0x1d6c9: 0x6d390420, 0x1d6ca: 0x6c04ec20, 0x1d6cb: 0x6c3dfc20, + 0x1d6cc: 0x6c1f1420, 0x1d6cd: 0x6ccec820, 0x1d6ce: 0x6d16ce20, 0x1d6cf: 0x6c6d9220, + 0x1d6d0: 0x6c273820, 0x1d6d1: 0x6c054a20, 0x1d6d2: 0x6cc65a20, 0x1d6d3: 0x6c6a9820, + 0x1d6d4: 0x6c7a8620, 0x1d6d5: 0x6cc54620, 0x1d6d6: 0x6c2e7620, 0x1d6d7: 0x6c4f6420, + 0x1d6d8: 0x6c5b9e20, 0x1d6d9: 0x6c449220, 0x1d6da: 0x6d087c20, 0x1d6db: 0x6c67dc20, + 0x1d6dc: 0x6c95ea20, 0x1d6dd: 0x6c740420, 0x1d6de: 0x6c68d620, 0x1d6df: 0x6ce7ae20, + 0x1d6e0: 0x6c450020, 0x1d6e1: 0x6cfea820, 0x1d6e2: 0x6c735020, 0x1d6e3: 0x6d053620, + 0x1d6e4: 0x6cf87220, 0x1d6e5: 0x6cdbf020, 0x1d6e6: 0x6ce1c020, 0x1d6e7: 0x6c61d220, + 0x1d6e8: 0x6ce31820, 0x1d6e9: 0x6c5eb820, 0x1d6ea: 0x6d06be20, 0x1d6eb: 0x6c8cf220, + 0x1d6ec: 0x6d1bb220, 0x1d6ed: 0x6d06c020, 0x1d6ee: 0x6cb6f620, 0x1d6ef: 0x6c39fc20, + 0x1d6f0: 0x6c21b820, 0x1d6f1: 0x6cce5220, 0x1d6f2: 0x6c4bc220, 0x1d6f3: 0x6cd11e20, + 0x1d6f4: 0x6cef0420, 0x1d6f5: 0x6c9dc020, 0x1d6f6: 0x6cd46820, 0x1d6f7: 0x6c081a20, + 0x1d6f8: 0x6c1da820, 0x1d6f9: 0x6ce22220, 0x1d6fa: 0x6c8f0620, 0x1d6fb: 0x6cc35a20, + 0x1d6fc: 0x6d3f7820, 0x1d6fd: 0x6d2e5c20, 0x1d6fe: 0x6ced0c20, 0x1d6ff: 0x6c93d820, + // Block 0x75c, offset 0x1d700 + 0x1d700: 0x6d3cc420, 0x1d701: 0x6d3e2820, 0x1d702: 0x6c78b420, 0x1d703: 0x6cfd7820, + 0x1d704: 0x6c64a420, 0x1d705: 0x6c9e2820, 0x1d706: 0x6c802a20, 0x1d707: 0x6ce33020, + 0x1d708: 0x6c9e9420, 0x1d709: 0x6c5eda20, 0x1d70a: 0x6d275020, 0x1d70b: 0x6c5bca20, + 0x1d70c: 0x6cd7ec20, 0x1d70d: 0x6c348620, 0x1d70e: 0x6c32c420, 0x1d70f: 0x6c0ba020, + 0x1d710: 0x6cfcc820, 0x1d711: 0x6c464a20, 0x1d712: 0x6d3c8a20, 0x1d713: 0x6c58d820, + 0x1d714: 0x6c2c5e20, 0x1d715: 0x6c93a020, 0x1d716: 0x6c0af620, 0x1d717: 0x6c9f5820, + 0x1d718: 0x6d256820, 0x1d719: 0x6c6d1c20, 0x1d71a: 0x6c401020, 0x1d71b: 0x6cc81e20, + 0x1d71c: 0x6d31ea20, 0x1d71d: 0x6c3ce620, 0x1d71e: 0x6c24ce20, 0x1d71f: 0x6c430c20, + 0x1d720: 0x6c150420, 0x1d721: 0x6c83f020, 0x1d722: 0x6d17fc20, 0x1d723: 0x6c64be20, + 0x1d724: 0x6c0d4020, 0x1d725: 0x6cb15a20, 0x1d726: 0x6c97f020, 0x1d727: 0x6c824820, + 0x1d728: 0x6d1bda20, 0x1d729: 0x6cdd2e20, 0x1d72a: 0x6ca1d820, 0x1d72b: 0x6ccaba20, + 0x1d72c: 0x6d00e020, 0x1d72d: 0x6c8a1420, 0x1d72e: 0x6ccda220, 0x1d72f: 0x6d2b8c20, + 0x1d730: 0x6c677a20, 0x1d731: 0x6cba2420, 0x1d732: 0x6cbbb220, 0x1d733: 0x6c589a20, + 0x1d734: 0x6c694620, 0x1d735: 0x6d415020, 0x1d736: 0x6c3d1a20, 0x1d737: 0x6d016820, + 0x1d738: 0x6c426820, 0x1d739: 0x6c3d2420, 0x1d73a: 0x6cc38a20, 0x1d73b: 0x6c3d2620, + 0x1d73c: 0x6cb81020, 0x1d73d: 0x6c0e6e20, 0x1d73e: 0x6cb2ac20, 0x1d73f: 0x6cfe3420, + // Block 0x75d, offset 0x1d740 + 0x1d740: 0x6d2ff620, 0x1d741: 0x6c428e20, 0x1d742: 0x6d1bdc20, 0x1d743: 0x6d1bea20, + 0x1d744: 0x6cbee020, 0x1d745: 0x6cfa4c20, 0x1d746: 0x6c49aa20, 0x1d747: 0x6d41fa20, + 0x1d748: 0x6ce02a20, 0x1d749: 0x6c126020, 0x1d74a: 0x6cb7fe20, 0x1d74b: 0x6cf27620, + 0x1d74c: 0x6d1c2220, 0x1d74d: 0x6c828620, 0x1d74e: 0x6ce04820, 0x1d74f: 0x6c919820, + 0x1d750: 0x6c49c420, 0x1d751: 0x6cedf420, 0x1d752: 0x6cedf020, 0x1d753: 0x6c424e20, + 0x1d754: 0x6cedfe20, 0x1d755: 0x6c4e5020, 0x1d756: 0x6c953820, 0x1d757: 0x6c952c20, + 0x1d758: 0x6c3e2220, 0x1d759: 0x6c9c3a20, 0x1d75a: 0x6c380620, 0x1d75b: 0x6c470020, + 0x1d75c: 0x6d3a6020, 0x1d75d: 0x6c707220, 0x1d75e: 0x6c98d420, 0x1d75f: 0x6c477420, + 0x1d760: 0x6c9f4220, 0x1d761: 0x6c427220, 0x1d762: 0x6c03f420, 0x1d763: 0x6c48b220, + 0x1d764: 0x6ce33220, 0x1d765: 0x6c736a20, 0x1d766: 0x6c3e8820, 0x1d767: 0x6cd0b420, + 0x1d768: 0x6d0da820, 0x1d769: 0x6d2fc220, 0x1d76a: 0x6d41b820, 0x1d76b: 0x6c48b820, + 0x1d76c: 0x6d3d7220, 0x1d76d: 0x6d237620, 0x1d76e: 0x6d366620, 0x1d76f: 0x6c018e20, + 0x1d770: 0x6c382020, 0x1d771: 0x6c803420, 0x1d772: 0x6cd56220, 0x1d773: 0x6cd80620, + 0x1d774: 0x6cb00820, 0x1d775: 0x6c96da20, 0x1d776: 0x6c8f1620, 0x1d777: 0x6c03f820, + 0x1d778: 0x6c382420, 0x1d779: 0x6c844a20, 0x1d77a: 0x6c177e20, 0x1d77b: 0x6cf0d020, + 0x1d77c: 0x6c0a3420, 0x1d77d: 0x6c629c20, 0x1d77e: 0x6d2b9c20, 0x1d77f: 0x6c1ce620, + // Block 0x75e, offset 0x1d780 + 0x1d780: 0x6c8f2220, 0x1d781: 0x6c5f5a20, 0x1d782: 0x6c739e20, 0x1d783: 0x6c9da220, + 0x1d784: 0x6d2fec20, 0x1d785: 0x6c956220, 0x1d786: 0x6cb03220, 0x1d787: 0x6c5f9e20, + 0x1d788: 0x6c5fb020, 0x1d789: 0x6c946820, 0x1d78a: 0x6d0f7620, 0x1d78b: 0x6c9cde20, + 0x1d78c: 0x6cba9e20, 0x1d78d: 0x6c268820, 0x1d78e: 0x6c9a4e20, 0x1d78f: 0x6d0f9a20, + 0x1d790: 0x6d1fbc20, 0x1d791: 0x6d1fb420, 0x1d792: 0x6c3b6620, 0x1d793: 0x6c033e20, + 0x1d794: 0x6c42b820, 0x1d795: 0x6d104a20, 0x1d796: 0x6c477620, 0x1d797: 0x6cbaaa20, + 0x1d798: 0x6d29d620, 0x1d799: 0x6c42ba20, 0x1d79a: 0x6c8cf620, 0x1d79b: 0x6d176e20, + 0x1d79c: 0x6d3aee20, 0x1d79d: 0x6c2b2820, 0x1d79e: 0x6d04c820, 0x1d79f: 0x6cbb3c20, + 0x1d7a0: 0x6d14fa20, 0x1d7a1: 0x6cfcca20, 0x1d7a2: 0x6cc67c20, 0x1d7a3: 0x6cc44a20, + 0x1d7a4: 0x6cc44c20, 0x1d7a5: 0x6cbb4420, 0x1d7a6: 0x6c588220, 0x1d7a7: 0x6cdd2620, + 0x1d7a8: 0x6cfcdc20, 0x1d7a9: 0x6d17fe20, 0x1d7aa: 0x6d107a20, 0x1d7ab: 0x6cbad220, + 0x1d7ac: 0x6cb9c220, 0x1d7ad: 0x6d218820, 0x1d7ae: 0x6c44dc20, 0x1d7af: 0x6c6b2220, + 0x1d7b0: 0x6ce0cc20, 0x1d7b1: 0x6d25ac20, 0x1d7b2: 0x6cf6d420, 0x1d7b3: 0x6c38d820, + 0x1d7b4: 0x6ccd1a20, 0x1d7b5: 0x6c3ba220, 0x1d7b6: 0x6ccd1e20, 0x1d7b7: 0x6c88d820, + 0x1d7b8: 0x6c827420, 0x1d7b9: 0x6c44e420, 0x1d7ba: 0x6caa0820, 0x1d7bb: 0x6cbb5e20, + 0x1d7bc: 0x6c164620, 0x1d7bd: 0x6d221c20, 0x1d7be: 0x6c461020, 0x1d7bf: 0x6d170420, + // Block 0x75f, offset 0x1d7c0 + 0x1d7c0: 0x6c1cbe20, 0x1d7c1: 0x6cf22220, 0x1d7c2: 0x6c3b2420, 0x1d7c3: 0x6c533020, + 0x1d7c4: 0x6c1c0820, 0x1d7c5: 0x6c1c0a20, 0x1d7c6: 0x6c252a20, 0x1d7c7: 0x6c3e6020, + 0x1d7c8: 0x6cf9b220, 0x1d7c9: 0x6c079c20, 0x1d7ca: 0x6d177020, 0x1d7cb: 0x6c7e4220, + 0x1d7cc: 0x6d177220, 0x1d7cd: 0x6caf6220, 0x1d7ce: 0x6c8cf820, 0x1d7cf: 0x6c8f2e20, + 0x1d7d0: 0x6d360020, 0x1d7d1: 0x6cc18e20, 0x1d7d2: 0x6cf77a20, 0x1d7d3: 0x6d00ae20, + 0x1d7d4: 0x6cfdc620, 0x1d7d5: 0x6cf62420, 0x1d7d6: 0x6cf88e20, 0x1d7d7: 0x6c785020, + 0x1d7d8: 0x6cbc4620, 0x1d7d9: 0x6c5bcc20, 0x1d7da: 0x6c5aba20, 0x1d7db: 0x6cfecc20, + 0x1d7dc: 0x6ccc5e20, 0x1d7dd: 0x6c536620, 0x1d7de: 0x6c676c20, 0x1d7df: 0x6c2b7e20, + 0x1d7e0: 0x6c255220, 0x1d7e1: 0x6c3a6420, 0x1d7e2: 0x6c2a2620, 0x1d7e3: 0x6ccc6a20, + 0x1d7e4: 0x6c1c4a20, 0x1d7e5: 0x6d3b1620, 0x1d7e6: 0x6c65d220, 0x1d7e7: 0x6d07c420, + 0x1d7e8: 0x6c1c6220, 0x1d7e9: 0x6cb0fe20, 0x1d7ea: 0x6d3fb820, 0x1d7eb: 0x6cece620, + 0x1d7ec: 0x6c5aea20, 0x1d7ed: 0x6c542820, 0x1d7ee: 0x6c517420, 0x1d7ef: 0x6c51e820, + 0x1d7f0: 0x6c4f0a20, 0x1d7f1: 0x6c027220, 0x1d7f2: 0x6cb16820, 0x1d7f3: 0x6d18d020, + 0x1d7f4: 0x6c885420, 0x1d7f5: 0x6c543420, 0x1d7f6: 0x6c030820, 0x1d7f7: 0x6c8bf220, + 0x1d7f8: 0x6cae4820, 0x1d7f9: 0x6cbc6a20, 0x1d7fa: 0x6c027e20, 0x1d7fb: 0x6c386420, + 0x1d7fc: 0x6d18d220, 0x1d7fd: 0x6c5c8020, 0x1d7fe: 0x6d07e420, 0x1d7ff: 0x6c2a4a20, + // Block 0x760, offset 0x1d800 + 0x1d800: 0x6d124420, 0x1d801: 0x6c819a20, 0x1d802: 0x6c819820, 0x1d803: 0x6c779c20, + 0x1d804: 0x6c996620, 0x1d805: 0x6d30d220, 0x1d806: 0x6cb5a820, 0x1d807: 0x6c467a20, + 0x1d808: 0x6c468020, 0x1d809: 0x6c467c20, 0x1d80a: 0x6c2f3420, 0x1d80b: 0x6c2eb020, + 0x1d80c: 0x6c373020, 0x1d80d: 0x6cd64620, 0x1d80e: 0x6cc85620, 0x1d80f: 0x6ca3b220, + 0x1d810: 0x6ca3b420, 0x1d811: 0x6c329220, 0x1d812: 0x6c82b220, 0x1d813: 0x6ce63220, + 0x1d814: 0x6d3efc20, 0x1d815: 0x6c44c220, 0x1d816: 0x6c17b620, 0x1d817: 0x6c503220, + 0x1d818: 0x6d27a020, 0x1d819: 0x6c03b020, 0x1d81a: 0x6caf6420, 0x1d81b: 0x6d14ec20, + 0x1d81c: 0x6cd8bc20, 0x1d81d: 0x6cc26e20, 0x1d81e: 0x6c635220, 0x1d81f: 0x6c723220, + 0x1d820: 0x6c5d5620, 0x1d821: 0x6c1e8e20, 0x1d822: 0x6c81d420, 0x1d823: 0x6c951c20, + 0x1d824: 0x6c607020, 0x1d825: 0x6ce0c620, 0x1d826: 0x6cab8e20, 0x1d827: 0x6c90b420, + 0x1d828: 0x6caa2820, 0x1d829: 0x6c67be20, 0x1d82a: 0x6cad1e20, 0x1d82b: 0x6d2c5620, + 0x1d82c: 0x6c90be20, 0x1d82d: 0x6c5f7020, 0x1d82e: 0x6c81e420, 0x1d82f: 0x6c5e2e20, + 0x1d830: 0x6d1ed420, 0x1d831: 0x6ca1a020, 0x1d832: 0x6c580420, 0x1d833: 0x6c378420, + 0x1d834: 0x6d169620, 0x1d835: 0x6c2f5420, 0x1d836: 0x6d127420, 0x1d837: 0x6c264420, + 0x1d838: 0x6cd95820, 0x1d839: 0x6cbd6820, 0x1d83a: 0x6d27a220, 0x1d83b: 0x6c1b9420, + 0x1d83c: 0x6c27ca20, 0x1d83d: 0x6c27cc20, 0x1d83e: 0x6c533420, 0x1d83f: 0x6c450220, + // Block 0x761, offset 0x1d840 + 0x1d840: 0x6d344820, 0x1d841: 0x6cacb220, 0x1d842: 0x6ca80c20, 0x1d843: 0x6c27d420, + 0x1d844: 0x6d31d620, 0x1d845: 0x6c181a20, 0x1d846: 0x6c8cfa20, 0x1d847: 0x6d32ba20, + 0x1d848: 0x6d1fc220, 0x1d849: 0x6cec3020, 0x1d84a: 0x6c89e420, 0x1d84b: 0x6c8f8c20, + 0x1d84c: 0x6d345c20, 0x1d84d: 0x6ca90220, 0x1d84e: 0x6ce55e20, 0x1d84f: 0x6c375c20, + 0x1d850: 0x6d0bb420, 0x1d851: 0x6ce5f020, 0x1d852: 0x6c485e20, 0x1d853: 0x6d077220, + 0x1d854: 0x6c880420, 0x1d855: 0x6c504620, 0x1d856: 0x6cd16e20, 0x1d857: 0x6c8b1a20, + 0x1d858: 0x6cb24420, 0x1d859: 0x6c6dce20, 0x1d85a: 0x6c726c20, 0x1d85b: 0x6c08ee20, + 0x1d85c: 0x6c2bfe20, 0x1d85d: 0x6c4c7c20, 0x1d85e: 0x6cf1a220, 0x1d85f: 0x6d071a20, + 0x1d860: 0x6cb25820, 0x1d861: 0x6c232e20, 0x1d862: 0x6c2fc820, 0x1d863: 0x6ca5f820, + 0x1d864: 0x6ce68c20, 0x1d865: 0x6c71d020, 0x1d866: 0x6c234820, 0x1d867: 0x6c7c4220, + 0x1d868: 0x6c894420, 0x1d869: 0x6c7d1220, 0x1d86a: 0x6c234a20, 0x1d86b: 0x6c884020, + 0x1d86c: 0x6cf26020, 0x1d86d: 0x6c7d1420, 0x1d86e: 0x6c885820, 0x1d86f: 0x6c886820, + 0x1d870: 0x6c236620, 0x1d871: 0x6c027420, 0x1d872: 0x6cd11820, 0x1d873: 0x6cd96e20, + 0x1d874: 0x6ce64c20, 0x1d875: 0x6c7d2a20, 0x1d876: 0x6ca88820, 0x1d877: 0x6d34aa20, + 0x1d878: 0x6c281020, 0x1d879: 0x6ca93420, 0x1d87a: 0x6cbc8a20, 0x1d87b: 0x6ca65e20, + 0x1d87c: 0x6ce65220, 0x1d87d: 0x6ce65620, 0x1d87e: 0x6c8ff820, 0x1d87f: 0x6d22c620, + // Block 0x762, offset 0x1d880 + 0x1d880: 0x6d22b620, 0x1d881: 0x6d2fac20, 0x1d882: 0x6cd8ac20, 0x1d883: 0x6cda8220, + 0x1d884: 0x6d180020, 0x1d885: 0x6cdad820, 0x1d886: 0x6cd8ca20, 0x1d887: 0x6d2fcc20, + 0x1d888: 0x6d2fce20, 0x1d889: 0x6cc78220, 0x1d88a: 0x6d164c20, 0x1d88b: 0x6c81fe20, + 0x1d88c: 0x6c5e8020, 0x1d88d: 0x6cbffe20, 0x1d88e: 0x6c78f220, 0x1d88f: 0x6c12b620, + 0x1d890: 0x6c437020, 0x1d891: 0x6c0eb020, 0x1d892: 0x6c58f020, 0x1d893: 0x6c597a20, + 0x1d894: 0x6d15c220, 0x1d895: 0x6cc5c820, 0x1d896: 0x6cffd220, 0x1d897: 0x6cc7f620, + 0x1d898: 0x6d38d820, 0x1d899: 0x6d25fc20, 0x1d89a: 0x6c323820, 0x1d89b: 0x6c425a20, + 0x1d89c: 0x6cc65420, 0x1d89d: 0x6c416e20, 0x1d89e: 0x6c138020, 0x1d89f: 0x6cf2d220, + 0x1d8a0: 0x6c169820, 0x1d8a1: 0x6c476020, 0x1d8a2: 0x6d33a220, 0x1d8a3: 0x6c4dd620, + 0x1d8a4: 0x6c3d4420, 0x1d8a5: 0x6c3a3220, 0x1d8a6: 0x6c3b6420, 0x1d8a7: 0x6cadb220, + 0x1d8a8: 0x6cad2820, 0x1d8a9: 0x6c647020, 0x1d8aa: 0x6c39a820, 0x1d8ab: 0x6d3ccc20, + 0x1d8ac: 0x6d1f0220, 0x1d8ad: 0x6ca31420, 0x1d8ae: 0x6c01e820, 0x1d8af: 0x6c78f620, + 0x1d8b0: 0x6cc46420, 0x1d8b1: 0x6c456820, 0x1d8b2: 0x6d22da20, 0x1d8b3: 0x6cf1d020, + 0x1d8b4: 0x6d10d020, 0x1d8b5: 0x6cb58c20, 0x1d8b6: 0x6cafc020, 0x1d8b7: 0x6cb9f620, + 0x1d8b8: 0x6cf59220, 0x1d8b9: 0x6cf59420, 0x1d8ba: 0x6c3a8c20, 0x1d8bb: 0x6c78f820, + 0x1d8bc: 0x6c6e1220, 0x1d8bd: 0x6cdf6420, 0x1d8be: 0x6cd09020, 0x1d8bf: 0x6d37e620, + // Block 0x763, offset 0x1d8c0 + 0x1d8c0: 0x6d2f2820, 0x1d8c1: 0x6d007220, 0x1d8c2: 0x6cd09620, 0x1d8c3: 0x6cf07e20, + 0x1d8c4: 0x6d391220, 0x1d8c5: 0x6c2e7820, 0x1d8c6: 0x6c282c20, 0x1d8c7: 0x6c3a9020, + 0x1d8c8: 0x6c037220, 0x1d8c9: 0x6c0ec820, 0x1d8ca: 0x6cc17c20, 0x1d8cb: 0x6ce49420, + 0x1d8cc: 0x6c06f220, 0x1d8cd: 0x6c484a20, 0x1d8ce: 0x6cdf0420, 0x1d8cf: 0x6d3ef220, + 0x1d8d0: 0x6c7a3220, 0x1d8d1: 0x6d33b420, 0x1d8d2: 0x6ca68820, 0x1d8d3: 0x6cb28a20, + 0x1d8d4: 0x6d3f5420, 0x1d8d5: 0x6c3f4c20, 0x1d8d6: 0x6cad2a20, 0x1d8d7: 0x6d313020, + 0x1d8d8: 0x6cfb3820, 0x1d8d9: 0x6d428820, 0x1d8da: 0x6cadb820, 0x1d8db: 0x6c640820, + 0x1d8dc: 0x6cd15620, 0x1d8dd: 0x6d33b620, 0x1d8de: 0x6c05ac20, 0x1d8df: 0x6ca23620, + 0x1d8e0: 0x6cc0ee20, 0x1d8e1: 0x6c552e20, 0x1d8e2: 0x6c77ea20, 0x1d8e3: 0x6c1b8620, + 0x1d8e4: 0x6d1b4020, 0x1d8e5: 0x6d057a20, 0x1d8e6: 0x6d0f5220, 0x1d8e7: 0x6c8f7a20, + 0x1d8e8: 0x6c306620, 0x1d8e9: 0x6c761c20, 0x1d8ea: 0x6c914620, 0x1d8eb: 0x6c6e5c20, + 0x1d8ec: 0x6caa5820, 0x1d8ed: 0x6d0bea20, 0x1d8ee: 0x6cacd020, 0x1d8ef: 0x6c7ae820, + 0x1d8f0: 0x6d14d620, 0x1d8f1: 0x6c49e820, 0x1d8f2: 0x6c4d3e20, 0x1d8f3: 0x6c438220, + 0x1d8f4: 0x6c307020, 0x1d8f5: 0x6c1aa220, 0x1d8f6: 0x6c683e20, 0x1d8f7: 0x6d046420, + 0x1d8f8: 0x6d046620, 0x1d8f9: 0x6c374c20, 0x1d8fa: 0x6c01b020, 0x1d8fb: 0x6c526020, + 0x1d8fc: 0x6cb10a20, 0x1d8fd: 0x6ca5a420, 0x1d8fe: 0x6d3f5620, 0x1d8ff: 0x6c4a4c20, + // Block 0x764, offset 0x1d900 + 0x1d900: 0x6c19e220, 0x1d901: 0x6ce5c020, 0x1d902: 0x6d33ce20, 0x1d903: 0x6c252c20, + 0x1d904: 0x6c99e620, 0x1d905: 0x6d009220, 0x1d906: 0x6c252e20, 0x1d907: 0x6d009420, + 0x1d908: 0x6c972e20, 0x1d909: 0x6c972a20, 0x1d90a: 0x6c600420, 0x1d90b: 0x6d029e20, + 0x1d90c: 0x6ca8f020, 0x1d90d: 0x6c7b2020, 0x1d90e: 0x6cc97220, 0x1d90f: 0x6d2a0420, + 0x1d910: 0x6cb5aa20, 0x1d911: 0x6ca4e820, 0x1d912: 0x6c9cec20, 0x1d913: 0x6ca9b820, + 0x1d914: 0x6c943a20, 0x1d915: 0x6ced7c20, 0x1d916: 0x6c0ef420, 0x1d917: 0x6cf1d820, + 0x1d918: 0x6ced0e20, 0x1d919: 0x6d04d020, 0x1d91a: 0x6c68ea20, 0x1d91b: 0x6c6e7a20, + 0x1d91c: 0x6d1fc420, 0x1d91d: 0x6c524e20, 0x1d91e: 0x6c260820, 0x1d91f: 0x6c8b0820, + 0x1d920: 0x6cccdc20, 0x1d921: 0x6ce6c420, 0x1d922: 0x6c99f020, 0x1d923: 0x6c214420, + 0x1d924: 0x6cd0a220, 0x1d925: 0x6cba0420, 0x1d926: 0x6c2a9220, 0x1d927: 0x6c72ee20, + 0x1d928: 0x6c243820, 0x1d929: 0x6d04cc20, 0x1d92a: 0x6d032e20, 0x1d92b: 0x6ceac220, + 0x1d92c: 0x6cad3820, 0x1d92d: 0x6c19f220, 0x1d92e: 0x6ca56c20, 0x1d92f: 0x6cb43620, + 0x1d930: 0x6c311420, 0x1d931: 0x6ceac420, 0x1d932: 0x6ca7d620, 0x1d933: 0x6ca53e20, + 0x1d934: 0x6cb05a20, 0x1d935: 0x6c478220, 0x1d936: 0x6c954020, 0x1d937: 0x6c85fc20, + 0x1d938: 0x6c88b820, 0x1d939: 0x6d2f3020, 0x1d93a: 0x6c254020, 0x1d93b: 0x6c6a1c20, + 0x1d93c: 0x6c899420, 0x1d93d: 0x6cd6fc20, 0x1d93e: 0x6caff420, 0x1d93f: 0x6c0bfe20, + // Block 0x765, offset 0x1d940 + 0x1d940: 0x6c94fc20, 0x1d941: 0x6cb11020, 0x1d942: 0x6c82c420, 0x1d943: 0x6c7cfe20, + 0x1d944: 0x6c20d620, 0x1d945: 0x6c288c20, 0x1d946: 0x6ce4fa20, 0x1d947: 0x6ca57020, + 0x1d948: 0x6c6dbc20, 0x1d949: 0x6ca37a20, 0x1d94a: 0x6c7e7820, 0x1d94b: 0x6d12f420, + 0x1d94c: 0x6d0c0e20, 0x1d94d: 0x6cc5f420, 0x1d94e: 0x6cd0a420, 0x1d94f: 0x6c21c220, + 0x1d950: 0x6c3f7820, 0x1d951: 0x6c3f6a20, 0x1d952: 0x6c709620, 0x1d953: 0x6c3a3620, + 0x1d954: 0x6cbabc20, 0x1d955: 0x6ced8820, 0x1d956: 0x6c307c20, 0x1d957: 0x6caff620, + 0x1d958: 0x6c4c6e20, 0x1d959: 0x6d3f9220, 0x1d95a: 0x6c2fa820, 0x1d95b: 0x6cf2fe20, + 0x1d95c: 0x6c9a6020, 0x1d95d: 0x6ca5f420, 0x1d95e: 0x6d3bd020, 0x1d95f: 0x6c1c3420, + 0x1d960: 0x6c23f020, 0x1d961: 0x6c954820, 0x1d962: 0x6cab8020, 0x1d963: 0x6c2c6e20, + 0x1d964: 0x6c013c20, 0x1d965: 0x6d038220, 0x1d966: 0x6ca50420, 0x1d967: 0x6cd5ea20, + 0x1d968: 0x6cd69220, 0x1d969: 0x6ca42e20, 0x1d96a: 0x6d283c20, 0x1d96b: 0x6d380020, + 0x1d96c: 0x6cc78620, 0x1d96d: 0x6c366020, 0x1d96e: 0x6cc9ca20, 0x1d96f: 0x6ce8c820, + 0x1d970: 0x6d10ae20, 0x1d971: 0x6c669220, 0x1d972: 0x6cefe620, 0x1d973: 0x6c690e20, + 0x1d974: 0x6d213220, 0x1d975: 0x6c637220, 0x1d976: 0x6c32d020, 0x1d977: 0x6c09d820, + 0x1d978: 0x6c16b220, 0x1d979: 0x6c401220, 0x1d97a: 0x6cfcde20, 0x1d97b: 0x6ca6b020, + 0x1d97c: 0x6c9e2e20, 0x1d97d: 0x6cec3820, 0x1d97e: 0x6ce2a220, 0x1d97f: 0x6ce9e620, + // Block 0x766, offset 0x1d980 + 0x1d980: 0x6c055620, 0x1d981: 0x6cba1820, 0x1d982: 0x6c93a820, 0x1d983: 0x6cec3a20, + 0x1d984: 0x6cda3e20, 0x1d985: 0x6ce11c20, 0x1d986: 0x6cdaee20, 0x1d987: 0x6d3c9820, + 0x1d988: 0x6c441420, 0x1d989: 0x6d183220, 0x1d98a: 0x6c100a20, 0x1d98b: 0x6c89fa20, + 0x1d98c: 0x6c607220, 0x1d98d: 0x6cb00a20, 0x1d98e: 0x6d00d020, 0x1d98f: 0x6c42d020, + 0x1d990: 0x6c93b420, 0x1d991: 0x6c0d8420, 0x1d992: 0x6cab6c20, 0x1d993: 0x6c16c220, + 0x1d994: 0x6c92ae20, 0x1d995: 0x6c4c8220, 0x1d996: 0x6cace020, 0x1d997: 0x6c1fbc20, + 0x1d998: 0x6c0c1a20, 0x1d999: 0x6c67c020, 0x1d99a: 0x6c3d9220, 0x1d99b: 0x6ce12c20, + 0x1d99c: 0x6ca06e20, 0x1d99d: 0x6cf6ac20, 0x1d99e: 0x6d3b8e20, 0x1d99f: 0x6c93f820, + 0x1d9a0: 0x6c686e20, 0x1d9a1: 0x6d1d4420, 0x1d9a2: 0x6c936220, 0x1d9a3: 0x6d36be20, + 0x1d9a4: 0x6d098620, 0x1d9a5: 0x6c211e20, 0x1d9a6: 0x6c8c6620, 0x1d9a7: 0x6ce78e20, + 0x1d9a8: 0x6caec820, 0x1d9a9: 0x6ca6cc20, 0x1d9aa: 0x6c1fcc20, 0x1d9ab: 0x6c8a1e20, + 0x1d9ac: 0x6c256620, 0x1d9ad: 0x6c4a8e20, 0x1d9ae: 0x6cff1620, 0x1d9af: 0x6ce29020, + 0x1d9b0: 0x6c38c220, 0x1d9b1: 0x6d349a20, 0x1d9b2: 0x6c688020, 0x1d9b3: 0x6ccdb420, + 0x1d9b4: 0x6c550420, 0x1d9b5: 0x6c255c20, 0x1d9b6: 0x6cc90a20, 0x1d9b7: 0x6cfd8a20, + 0x1d9b8: 0x6cdc1020, 0x1d9b9: 0x6c3bf020, 0x1d9ba: 0x6d1c0020, 0x1d9bb: 0x6ccd1620, + 0x1d9bc: 0x6d3b5c20, 0x1d9bd: 0x6c284c20, 0x1d9be: 0x6c7b4020, 0x1d9bf: 0x6ca9d220, + // Block 0x767, offset 0x1d9c0 + 0x1d9c0: 0x6cea7020, 0x1d9c1: 0x6c886a20, 0x1d9c2: 0x6c0a7620, 0x1d9c3: 0x6d1dc020, + 0x1d9c4: 0x6c74cc20, 0x1d9c5: 0x6c1f8020, 0x1d9c6: 0x6d18d420, 0x1d9c7: 0x6c732c20, + 0x1d9c8: 0x6c7e9820, 0x1d9c9: 0x6c88ce20, 0x1d9ca: 0x6ccac420, 0x1d9cb: 0x6cea7420, + 0x1d9cc: 0x6c47da20, 0x1d9cd: 0x6cb67820, 0x1d9ce: 0x6c257c20, 0x1d9cf: 0x6c0d8e20, + 0x1d9d0: 0x6d09bc20, 0x1d9d1: 0x6ca53a20, 0x1d9d2: 0x6cf32020, 0x1d9d3: 0x6d2a0e20, + 0x1d9d4: 0x6cfd3420, 0x1d9d5: 0x6c0c4420, 0x1d9d6: 0x6d044020, 0x1d9d7: 0x6c7b5c20, + 0x1d9d8: 0x6c7eaa20, 0x1d9d9: 0x6d0c4220, 0x1d9da: 0x6c918820, 0x1d9db: 0x6c5e4220, + 0x1d9dc: 0x6d28a020, 0x1d9dd: 0x6c95cc20, 0x1d9de: 0x6cc21020, 0x1d9df: 0x6d2a1020, + 0x1d9e0: 0x6c946c20, 0x1d9e1: 0x6ca61e20, 0x1d9e2: 0x6d28aa20, 0x1d9e3: 0x6c189420, + 0x1d9e4: 0x6cb8b620, 0x1d9e5: 0x6cf2da20, 0x1d9e6: 0x6c4a2420, 0x1d9e7: 0x6d29e220, + 0x1d9e8: 0x6c8bea20, 0x1d9e9: 0x6c4a0e20, 0x1d9ea: 0x6d3f2a20, 0x1d9eb: 0x6c68c420, + 0x1d9ec: 0x6ca80e20, 0x1d9ed: 0x6c1e4020, 0x1d9ee: 0x6c620c20, 0x1d9ef: 0x6c42c820, + 0x1d9f0: 0x6c1e4420, 0x1d9f1: 0x6c9dce20, 0x1d9f2: 0x6ca87420, 0x1d9f3: 0x6d357020, + 0x1d9f4: 0x6d35c620, 0x1d9f5: 0x6c43f220, 0x1d9f6: 0x6c669420, 0x1d9f7: 0x6c2eb220, + 0x1d9f8: 0x6d33e420, 0x1d9f9: 0x6d04d820, 0x1d9fa: 0x6cdf3220, 0x1d9fb: 0x6d319820, + 0x1d9fc: 0x6c6fd020, 0x1d9fd: 0x6cfc8420, 0x1d9fe: 0x6d20ca20, 0x1d9ff: 0x6c138620, + // Block 0x768, offset 0x1da00 + 0x1da00: 0x6d11a420, 0x1da01: 0x6d20e820, 0x1da02: 0x6c1cc220, 0x1da03: 0x6cf89020, + 0x1da04: 0x6cf89220, 0x1da05: 0x6c700620, 0x1da06: 0x6d217a20, 0x1da07: 0x6d227220, + 0x1da08: 0x6d043820, 0x1da09: 0x6c71d420, 0x1da0a: 0x6c702a20, 0x1da0b: 0x6d035820, + 0x1da0c: 0x6ccf0620, 0x1da0d: 0x6ccf2820, 0x1da0e: 0x6ccf9620, 0x1da0f: 0x6c6fb220, + 0x1da10: 0x6cd36020, 0x1da11: 0x6cdfa420, 0x1da12: 0x6cd4e220, 0x1da13: 0x6cd3b620, + 0x1da14: 0x6ce50820, 0x1da15: 0x6ce0a420, 0x1da16: 0x6cb4b020, 0x1da17: 0x6cb4b220, + 0x1da18: 0x6c496420, 0x1da19: 0x6c57cc20, 0x1da1a: 0x6ce54020, 0x1da1b: 0x6c201620, + 0x1da1c: 0x6cd75220, 0x1da1d: 0x6cf9d820, 0x1da1e: 0x6cf45e20, 0x1da1f: 0x6d385220, + 0x1da20: 0x6c29be20, 0x1da21: 0x6c1ff420, 0x1da22: 0x6cccd620, 0x1da23: 0x6d15d420, + 0x1da24: 0x6c397c20, 0x1da25: 0x6cabc020, 0x1da26: 0x6cdf6a20, 0x1da27: 0x6c389420, + 0x1da28: 0x6c04c820, 0x1da29: 0x6c1ff620, 0x1da2a: 0x6c4f6c20, 0x1da2b: 0x6c39d420, + 0x1da2c: 0x6c047a20, 0x1da2d: 0x6c08d420, 0x1da2e: 0x6c934820, 0x1da2f: 0x6d37b020, + 0x1da30: 0x6c667220, 0x1da31: 0x6c122a20, 0x1da32: 0x6c8cfc20, 0x1da33: 0x6d3a1020, + 0x1da34: 0x6d2ac620, 0x1da35: 0x6c34f220, 0x1da36: 0x6c0ef620, 0x1da37: 0x6cfb5020, + 0x1da38: 0x6c447620, 0x1da39: 0x6c1ff820, 0x1da3a: 0x6cf9b420, 0x1da3b: 0x6c914e20, + 0x1da3c: 0x6cbf2e20, 0x1da3d: 0x6cacfc20, 0x1da3e: 0x6cf62a20, 0x1da3f: 0x6c7af420, + // Block 0x769, offset 0x1da40 + 0x1da40: 0x6c3ea420, 0x1da41: 0x6d2a8620, 0x1da42: 0x6c3cb220, 0x1da43: 0x6c83f220, + 0x1da44: 0x6cce7820, 0x1da45: 0x6d216420, 0x1da46: 0x6c80d220, 0x1da47: 0x6ce6ce20, + 0x1da48: 0x6d237820, 0x1da49: 0x6cefe820, 0x1da4a: 0x6c0f3220, 0x1da4b: 0x6c9be020, + 0x1da4c: 0x6ca76c20, 0x1da4d: 0x6c70b420, 0x1da4e: 0x6c59f420, 0x1da4f: 0x6cd44a20, + 0x1da50: 0x6c78d020, 0x1da51: 0x6c0bb820, 0x1da52: 0x6ca2a620, 0x1da53: 0x6c2ede20, + 0x1da54: 0x6c315c20, 0x1da55: 0x6c059020, 0x1da56: 0x6c13ae20, 0x1da57: 0x6d18b220, + 0x1da58: 0x6cd9d820, 0x1da59: 0x6c123a20, 0x1da5a: 0x6c129c20, 0x1da5b: 0x6c90c020, + 0x1da5c: 0x6c279820, 0x1da5d: 0x6d098a20, 0x1da5e: 0x6d123420, 0x1da5f: 0x6c1cee20, + 0x1da60: 0x6c2b0820, 0x1da61: 0x6c291c20, 0x1da62: 0x6cbb2c20, 0x1da63: 0x6c91f620, + 0x1da64: 0x6d162220, 0x1da65: 0x6c60e020, 0x1da66: 0x6c670e20, 0x1da67: 0x6c5e3020, + 0x1da68: 0x6c9b8620, 0x1da69: 0x6cb69820, 0x1da6a: 0x6c91fe20, 0x1da6b: 0x6c919a20, + 0x1da6c: 0x6c157220, 0x1da6d: 0x6cd6c020, 0x1da6e: 0x6c449e20, 0x1da6f: 0x6c894620, + 0x1da70: 0x6c647220, 0x1da71: 0x6c650020, 0x1da72: 0x6ccb1420, 0x1da73: 0x6d0e5420, + 0x1da74: 0x6c3e6820, 0x1da75: 0x6cb25a20, 0x1da76: 0x6d0eea20, 0x1da77: 0x6d0f1c20, + 0x1da78: 0x6c12aa20, 0x1da79: 0x6c12c020, 0x1da7a: 0x6d164220, 0x1da7b: 0x6c821220, + 0x1da7c: 0x6ce62820, 0x1da7d: 0x6c681e20, 0x1da7e: 0x6c008420, 0x1da7f: 0x6ca39020, + // Block 0x76a, offset 0x1da80 + 0x1da80: 0x6ce56820, 0x1da81: 0x6c682020, 0x1da82: 0x6c6a5a20, 0x1da83: 0x6cae8c20, + 0x1da84: 0x6cecbe20, 0x1da85: 0x6d167020, 0x1da86: 0x6c145e20, 0x1da87: 0x6c9db820, + 0x1da88: 0x6c9cd820, 0x1da89: 0x6c416220, 0x1da8a: 0x6cb89e20, 0x1da8b: 0x6d22c820, + 0x1da8c: 0x6d22ca20, 0x1da8d: 0x6cce9620, 0x1da8e: 0x6cbeee20, 0x1da8f: 0x6c323020, + 0x1da90: 0x6c564c20, 0x1da91: 0x6cb6ce20, 0x1da92: 0x6c982c20, 0x1da93: 0x6d3f2e20, + 0x1da94: 0x6c5ba020, 0x1da95: 0x6cdbaa20, 0x1da96: 0x6d357220, 0x1da97: 0x6cfd6020, + 0x1da98: 0x6cafb020, 0x1da99: 0x6c3ddc20, 0x1da9a: 0x6cea4220, 0x1da9b: 0x6cef8a20, + 0x1da9c: 0x6cf3a820, 0x1da9d: 0x6d338420, 0x1da9e: 0x6cb73e20, 0x1da9f: 0x6cccbe20, + 0x1daa0: 0x6cf18020, 0x1daa1: 0x6cba3e20, 0x1daa2: 0x6cc56e20, 0x1daa3: 0x6c3dde20, + 0x1daa4: 0x6c79b620, 0x1daa5: 0x6c6bba20, 0x1daa6: 0x6c913620, 0x1daa7: 0x6d067420, + 0x1daa8: 0x6c5e8220, 0x1daa9: 0x6cbd5420, 0x1daaa: 0x6cb57620, 0x1daab: 0x6d0c5a20, + 0x1daac: 0x6c3b1420, 0x1daad: 0x6c032020, 0x1daae: 0x6cc8c020, 0x1daaf: 0x6d02ac20, + 0x1dab0: 0x6c618a20, 0x1dab1: 0x6c570620, 0x1dab2: 0x6c570820, 0x1dab3: 0x6c398620, + 0x1dab4: 0x6cf4ae20, 0x1dab5: 0x6c73e420, 0x1dab6: 0x6c466c20, 0x1dab7: 0x6d34ee20, + 0x1dab8: 0x6d278420, 0x1dab9: 0x6cbd5620, 0x1daba: 0x6c029e20, 0x1dabb: 0x6c1e7820, + 0x1dabc: 0x6c994620, 0x1dabd: 0x6d0b1420, 0x1dabe: 0x6c3a8020, 0x1dabf: 0x6cc63220, + // Block 0x76b, offset 0x1dac0 + 0x1dac0: 0x6c4f5a20, 0x1dac1: 0x6c22fc20, 0x1dac2: 0x6d1a2a20, 0x1dac3: 0x6d1fa220, + 0x1dac4: 0x6c0b7420, 0x1dac5: 0x6d169a20, 0x1dac6: 0x6cbd1020, 0x1dac7: 0x6cef8c20, + 0x1dac8: 0x6c858420, 0x1dac9: 0x6cb05420, 0x1daca: 0x6c35d420, 0x1dacb: 0x6cfc7c20, + 0x1dacc: 0x6c169a20, 0x1dacd: 0x6c122420, 0x1dace: 0x6d3aa620, 0x1dacf: 0x6cda4820, + 0x1dad0: 0x6ce30e20, 0x1dad1: 0x6d260220, 0x1dad2: 0x6cc4ae20, 0x1dad3: 0x6c8cb020, + 0x1dad4: 0x6cdf1a20, 0x1dad5: 0x6cce9820, 0x1dad6: 0x6c2b5c20, 0x1dad7: 0x6c9e6e20, + 0x1dad8: 0x6cbe9c20, 0x1dad9: 0x6c859620, 0x1dada: 0x6d1e7220, 0x1dadb: 0x6c77d820, + 0x1dadc: 0x6ca27220, 0x1dadd: 0x6c06ee20, 0x1dade: 0x6c05a820, 0x1dadf: 0x6c467220, + 0x1dae0: 0x6c9f3420, 0x1dae1: 0x6d15c420, 0x1dae2: 0x6d15ca20, 0x1dae3: 0x6c720020, + 0x1dae4: 0x6cb1de20, 0x1dae5: 0x6cc91420, 0x1dae6: 0x6c7a7620, 0x1dae7: 0x6ca8fa20, + 0x1dae8: 0x6ca62c20, 0x1dae9: 0x6c0ebc20, 0x1daea: 0x6c0dc820, 0x1daeb: 0x6cccc620, + 0x1daec: 0x6d051a20, 0x1daed: 0x6d119220, 0x1daee: 0x6cfa8420, 0x1daef: 0x6c079620, + 0x1daf0: 0x6c530620, 0x1daf1: 0x6d1ba220, 0x1daf2: 0x6d2c7420, 0x1daf3: 0x6c2fe220, + 0x1daf4: 0x6c706020, 0x1daf5: 0x6c2e6220, 0x1daf6: 0x6ca7de20, 0x1daf7: 0x6c417e20, + 0x1daf8: 0x6c54a820, 0x1daf9: 0x6cb27c20, 0x1dafa: 0x6c99dc20, 0x1dafb: 0x6c3e0220, + 0x1dafc: 0x6cd0e820, 0x1dafd: 0x6c46f620, 0x1dafe: 0x6c093e20, 0x1daff: 0x6cf07620, + // Block 0x76c, offset 0x1db00 + 0x1db00: 0x6c3e0420, 0x1db01: 0x6d3d2e20, 0x1db02: 0x6c994c20, 0x1db03: 0x6c393220, + 0x1db04: 0x6c633020, 0x1db05: 0x6c98cc20, 0x1db06: 0x6c98ce20, 0x1db07: 0x6c036a20, + 0x1db08: 0x6c223220, 0x1db09: 0x6ca0d620, 0x1db0a: 0x6d3e0620, 0x1db0b: 0x6c2be020, + 0x1db0c: 0x6c1b0a20, 0x1db0d: 0x6c61b220, 0x1db0e: 0x6c6d9420, 0x1db0f: 0x6c8f6e20, + 0x1db10: 0x6c23e220, 0x1db11: 0x6ca78e20, 0x1db12: 0x6d256c20, 0x1db13: 0x6d08fe20, + 0x1db14: 0x6d1c5a20, 0x1db15: 0x6cbf0020, 0x1db16: 0x6c43cc20, 0x1db17: 0x6c9ff020, + 0x1db18: 0x6c85ae20, 0x1db19: 0x6cc65c20, 0x1db1a: 0x6d1b3c20, 0x1db1b: 0x6c44b020, + 0x1db1c: 0x6cba4420, 0x1db1d: 0x6c148e20, 0x1db1e: 0x6c18aa20, 0x1db1f: 0x6d22e820, + 0x1db20: 0x6c4fa220, 0x1db21: 0x6d3f3420, 0x1db22: 0x6c8adc20, 0x1db23: 0x6cf3bc20, + 0x1db24: 0x6c61b420, 0x1db25: 0x6c4a4020, 0x1db26: 0x6c22bc20, 0x1db27: 0x6c657620, + 0x1db28: 0x6c223420, 0x1db29: 0x6c469e20, 0x1db2a: 0x6c49e220, 0x1db2b: 0x6c984420, + 0x1db2c: 0x6c13ce20, 0x1db2d: 0x6c683620, 0x1db2e: 0x6c683820, 0x1db2f: 0x6c3e2420, + 0x1db30: 0x6d20ea20, 0x1db31: 0x6d398e20, 0x1db32: 0x6d3e1420, 0x1db33: 0x6c675220, + 0x1db34: 0x6c5b2820, 0x1db35: 0x6d19b620, 0x1db36: 0x6c13d020, 0x1db37: 0x6c380820, + 0x1db38: 0x6cc64e20, 0x1db39: 0x6cc79420, 0x1db3a: 0x6c1cb620, 0x1db3b: 0x6c989220, + 0x1db3c: 0x6ce72c20, 0x1db3d: 0x6d381c20, 0x1db3e: 0x6cb8ac20, 0x1db3f: 0x6d3a0220, + // Block 0x76d, offset 0x1db40 + 0x1db40: 0x6d09f220, 0x1db41: 0x6c586820, 0x1db42: 0x6c3d5420, 0x1db43: 0x6cc2c620, + 0x1db44: 0x6c40ea20, 0x1db45: 0x6c264620, 0x1db46: 0x6c6d9a20, 0x1db47: 0x6d041c20, + 0x1db48: 0x6c201c20, 0x1db49: 0x6c12ac20, 0x1db4a: 0x6c6d9c20, 0x1db4b: 0x6c374820, + 0x1db4c: 0x6c01a820, 0x1db4d: 0x6cbbd420, 0x1db4e: 0x6c1b1220, 0x1db4f: 0x6cc58c20, + 0x1db50: 0x6c666020, 0x1db51: 0x6ce31220, 0x1db52: 0x6c598420, 0x1db53: 0x6cb28e20, + 0x1db54: 0x6c85b020, 0x1db55: 0x6c6c3620, 0x1db56: 0x6c81aa20, 0x1db57: 0x6cd5b620, + 0x1db58: 0x6d3c0e20, 0x1db59: 0x6c268c20, 0x1db5a: 0x6c63a820, 0x1db5b: 0x6cc52220, + 0x1db5c: 0x6c095620, 0x1db5d: 0x6d2ab420, 0x1db5e: 0x6cbbd620, 0x1db5f: 0x6c5ba220, + 0x1db60: 0x6c61b620, 0x1db61: 0x6c295c20, 0x1db62: 0x6d24c020, 0x1db63: 0x6cc65e20, + 0x1db64: 0x6c5cb620, 0x1db65: 0x6d03d420, 0x1db66: 0x6c95ec20, 0x1db67: 0x6d1c5e20, + 0x1db68: 0x6d09f420, 0x1db69: 0x6c6ce420, 0x1db6a: 0x6cdcce20, 0x1db6b: 0x6d19b820, + 0x1db6c: 0x6c971220, 0x1db6d: 0x6c532020, 0x1db6e: 0x6d391420, 0x1db6f: 0x6d11f620, + 0x1db70: 0x6c324c20, 0x1db71: 0x6cefa420, 0x1db72: 0x6c83b020, 0x1db73: 0x6c310820, + 0x1db74: 0x6c3d6020, 0x1db75: 0x6cc59220, 0x1db76: 0x6d1a4c20, 0x1db77: 0x6c50fc20, + 0x1db78: 0x6c08a020, 0x1db79: 0x6c108820, 0x1db7a: 0x6d27e220, 0x1db7b: 0x6c2b6620, + 0x1db7c: 0x6ce89820, 0x1db7d: 0x6cdbba20, 0x1db7e: 0x6cdbbc20, 0x1db7f: 0x6c19d020, + // Block 0x76e, offset 0x1db80 + 0x1db80: 0x6c18b420, 0x1db81: 0x6cf3be20, 0x1db82: 0x6c0ce420, 0x1db83: 0x6cf5d020, + 0x1db84: 0x6c450420, 0x1db85: 0x6c85de20, 0x1db86: 0x6cb43420, 0x1db87: 0x6d3ae020, + 0x1db88: 0x6ca10020, 0x1db89: 0x6c85e020, 0x1db8a: 0x6d3c1420, 0x1db8b: 0x6d423420, + 0x1db8c: 0x6ceab820, 0x1db8d: 0x6cc03820, 0x1db8e: 0x6ccbe420, 0x1db8f: 0x6cdd1220, + 0x1db90: 0x6c18b620, 0x1db91: 0x6cae9620, 0x1db92: 0x6c71ae20, 0x1db93: 0x6c99e820, + 0x1db94: 0x6c9b1220, 0x1db95: 0x6d042420, 0x1db96: 0x6c6da220, 0x1db97: 0x6c17d820, + 0x1db98: 0x6ccfd420, 0x1db99: 0x6c756820, 0x1db9a: 0x6d0c7a20, 0x1db9b: 0x6ce66620, + 0x1db9c: 0x6d1f2020, 0x1db9d: 0x6c261e20, 0x1db9e: 0x6c494c20, 0x1db9f: 0x6c4ea020, + 0x1dba0: 0x6d1fbe20, 0x1dba1: 0x6c262020, 0x1dba2: 0x6c63b420, 0x1dba3: 0x6cede220, + 0x1dba4: 0x6cda9620, 0x1dba5: 0x6ca99220, 0x1dba6: 0x6cce6420, 0x1dba7: 0x6cfcac20, + 0x1dba8: 0x6c811a20, 0x1dba9: 0x6c3e4020, 0x1dbaa: 0x6c355a20, 0x1dbab: 0x6ca10220, + 0x1dbac: 0x6cf20420, 0x1dbad: 0x6c6aa820, 0x1dbae: 0x6ca3f420, 0x1dbaf: 0x6ca27c20, + 0x1dbb0: 0x6c76c820, 0x1dbb1: 0x6c7eee20, 0x1dbb2: 0x6c87f820, 0x1dbb3: 0x6cd26020, + 0x1dbb4: 0x6cf28220, 0x1dbb5: 0x6ce93020, 0x1dbb6: 0x6cfa9620, 0x1dbb7: 0x6c5db220, + 0x1dbb8: 0x6d1f2220, 0x1dbb9: 0x6d1c6020, 0x1dbba: 0x6d1ba820, 0x1dbbb: 0x6c461e20, + 0x1dbbc: 0x6c213e20, 0x1dbbd: 0x6c988a20, 0x1dbbe: 0x6c988c20, 0x1dbbf: 0x6c22c220, + // Block 0x76f, offset 0x1dbc0 + 0x1dbc0: 0x6ced1020, 0x1dbc1: 0x6c6db220, 0x1dbc2: 0x6c2c4e20, 0x1dbc3: 0x6cc18020, + 0x1dbc4: 0x6c2ffe20, 0x1dbc5: 0x6c648c20, 0x1dbc6: 0x6d405020, 0x1dbc7: 0x6c483a20, + 0x1dbc8: 0x6c7e4420, 0x1dbc9: 0x6c924820, 0x1dbca: 0x6c711c20, 0x1dbcb: 0x6cf08620, + 0x1dbcc: 0x6c757020, 0x1dbcd: 0x6ca82220, 0x1dbce: 0x6c7d5c20, 0x1dbcf: 0x6c511a20, + 0x1dbd0: 0x6cb43a20, 0x1dbd1: 0x6d290020, 0x1dbd2: 0x6c430420, 0x1dbd3: 0x6c4cbc20, + 0x1dbd4: 0x6c3e6c20, 0x1dbd5: 0x6c94f620, 0x1dbd6: 0x6c166a20, 0x1dbd7: 0x6c1daa20, + 0x1dbd8: 0x6cd91e20, 0x1dbd9: 0x6c20ca20, 0x1dbda: 0x6d2e5e20, 0x1dbdb: 0x6c9acc20, + 0x1dbdc: 0x6c114420, 0x1dbdd: 0x6c037820, 0x1dbde: 0x6c83c820, 0x1dbdf: 0x6ce8aa20, + 0x1dbe0: 0x6c0e7020, 0x1dbe1: 0x6c4eb620, 0x1dbe2: 0x6c064620, 0x1dbe3: 0x6cbe1220, + 0x1dbe4: 0x6c731e20, 0x1dbe5: 0x6cf60020, 0x1dbe6: 0x6cbd6a20, 0x1dbe7: 0x6c2bf220, + 0x1dbe8: 0x6c6a0420, 0x1dbe9: 0x6cb43820, 0x1dbea: 0x6c296220, 0x1dbeb: 0x6c6c9020, + 0x1dbec: 0x6cbbde20, 0x1dbed: 0x6cdf2220, 0x1dbee: 0x6c44c820, 0x1dbef: 0x6c573420, + 0x1dbf0: 0x6c470c20, 0x1dbf1: 0x6c8cfe20, 0x1dbf2: 0x6c39fe20, 0x1dbf3: 0x6cbd7020, + 0x1dbf4: 0x6c012a20, 0x1dbf5: 0x6cee1620, 0x1dbf6: 0x6c081c20, 0x1dbf7: 0x6d38e220, + 0x1dbf8: 0x6d0c0020, 0x1dbf9: 0x6c709020, 0x1dbfa: 0x6c648e20, 0x1dbfb: 0x6c8c1e20, + 0x1dbfc: 0x6ce05c20, 0x1dbfd: 0x6cd4d420, 0x1dbfe: 0x6ce49e20, 0x1dbff: 0x6c2a1420, + // Block 0x770, offset 0x1dc00 + 0x1dc00: 0x6c561c20, 0x1dc01: 0x6cb5d020, 0x1dc02: 0x6c511c20, 0x1dc03: 0x6c253820, + 0x1dc04: 0x6ce22420, 0x1dc05: 0x6c210420, 0x1dc06: 0x6c098a20, 0x1dc07: 0x6c16aa20, + 0x1dc08: 0x6c586e20, 0x1dc09: 0x6c3aa620, 0x1dc0a: 0x6c7f0020, 0x1dc0b: 0x6cb4ee20, + 0x1dc0c: 0x6c9b1420, 0x1dc0d: 0x6cb2a020, 0x1dc0e: 0x6cee7420, 0x1dc0f: 0x6c288220, + 0x1dc10: 0x6ccc4e20, 0x1dc11: 0x6c587020, 0x1dc12: 0x6d0d6e20, 0x1dc13: 0x6d14ee20, + 0x1dc14: 0x6ce58420, 0x1dc15: 0x6cb5d220, 0x1dc16: 0x6ced1220, 0x1dc17: 0x6c12e220, + 0x1dc18: 0x6ca3bc20, 0x1dc19: 0x6d327c20, 0x1dc1a: 0x6ceba420, 0x1dc1b: 0x6c6f6c20, + 0x1dc1c: 0x6ce5ee20, 0x1dc1d: 0x6c954220, 0x1dc1e: 0x6c0ae020, 0x1dc1f: 0x6d199220, + 0x1dc20: 0x6c9b1620, 0x1dc21: 0x6c100820, 0x1dc22: 0x6cada820, 0x1dc23: 0x6c2fc620, + 0x1dc24: 0x6d1c6420, 0x1dc25: 0x6d1c6620, 0x1dc26: 0x6d1c6820, 0x1dc27: 0x6cfebc20, + 0x1dc28: 0x6cc97420, 0x1dc29: 0x6cbfb020, 0x1dc2a: 0x6c77fc20, 0x1dc2b: 0x6cfe3620, + 0x1dc2c: 0x6ced8620, 0x1dc2d: 0x6d226020, 0x1dc2e: 0x6d213620, 0x1dc2f: 0x6c3ffa20, + 0x1dc30: 0x6c88fe20, 0x1dc31: 0x6d07a220, 0x1dc32: 0x6d07a420, 0x1dc33: 0x6ca42a20, + 0x1dc34: 0x6c12f620, 0x1dc35: 0x6cf28e20, 0x1dc36: 0x6c217a20, 0x1dc37: 0x6cfece20, + 0x1dc38: 0x6d210620, 0x1dc39: 0x6c0b4020, 0x1dc3a: 0x6c998420, 0x1dc3b: 0x6c013420, + 0x1dc3c: 0x6c364020, 0x1dc3d: 0x6c960a20, 0x1dc3e: 0x6d1c7820, 0x1dc3f: 0x6c7dfc20, + // Block 0x771, offset 0x1dc40 + 0x1dc40: 0x6c7dfe20, 0x1dc41: 0x6c676420, 0x1dc42: 0x6c9e2a20, 0x1dc43: 0x6d42a020, + 0x1dc44: 0x6d42a220, 0x1dc45: 0x6d409c20, 0x1dc46: 0x6c060020, 0x1dc47: 0x6cc74e20, + 0x1dc48: 0x6cf7ec20, 0x1dc49: 0x6d12f620, 0x1dc4a: 0x6c013620, 0x1dc4b: 0x6cc19420, + 0x1dc4c: 0x6c64a820, 0x1dc4d: 0x6c3e8e20, 0x1dc4e: 0x6c93e420, 0x1dc4f: 0x6c6dbe20, + 0x1dc50: 0x6cae4220, 0x1dc51: 0x6c3c5020, 0x1dc52: 0x6c535220, 0x1dc53: 0x6c535420, + 0x1dc54: 0x6c540820, 0x1dc55: 0x6d0e7a20, 0x1dc56: 0x6ce86420, 0x1dc57: 0x6d311420, + 0x1dc58: 0x6d3e4620, 0x1dc59: 0x6cfd7a20, 0x1dc5a: 0x6cc5f620, 0x1dc5b: 0x6c43f420, + 0x1dc5c: 0x6cb82c20, 0x1dc5d: 0x6cbe8020, 0x1dc5e: 0x6c9cf820, 0x1dc5f: 0x6c59c820, + 0x1dc60: 0x6ccff220, 0x1dc61: 0x6cb43c20, 0x1dc62: 0x6c413820, 0x1dc63: 0x6c303020, + 0x1dc64: 0x6d392a20, 0x1dc65: 0x6c669620, 0x1dc66: 0x6cefcc20, 0x1dc67: 0x6c0f0820, + 0x1dc68: 0x6cee9220, 0x1dc69: 0x6cabc620, 0x1dc6a: 0x6c620e20, 0x1dc6b: 0x6c556620, + 0x1dc6c: 0x6d2a0820, 0x1dc6d: 0x6c636220, 0x1dc6e: 0x6c32c620, 0x1dc6f: 0x6d120a20, + 0x1dc70: 0x6cdbc420, 0x1dc71: 0x6c231c20, 0x1dc72: 0x6cc2fa20, 0x1dc73: 0x6cee9420, + 0x1dc74: 0x6d315820, 0x1dc75: 0x6c7c7a20, 0x1dc76: 0x6ce67820, 0x1dc77: 0x6c5cd220, + 0x1dc78: 0x6cf7ee20, 0x1dc79: 0x6cd1c220, 0x1dc7a: 0x6cb79a20, 0x1dc7b: 0x6c7f9e20, + 0x1dc7c: 0x6d3f9420, 0x1dc7d: 0x6d10a820, 0x1dc7e: 0x6d24f020, 0x1dc7f: 0x6c9a0620, + // Block 0x772, offset 0x1dc80 + 0x1dc80: 0x6d275220, 0x1dc81: 0x6cd5c820, 0x1dc82: 0x6c2c6220, 0x1dc83: 0x6d3bc620, + 0x1dc84: 0x6c491820, 0x1dc85: 0x6cc4dc20, 0x1dc86: 0x6d08e020, 0x1dc87: 0x6c15b820, + 0x1dc88: 0x6c765a20, 0x1dc89: 0x6c7d0020, 0x1dc8a: 0x6c571620, 0x1dc8b: 0x6c67a820, + 0x1dc8c: 0x6c908e20, 0x1dc8d: 0x6cefce20, 0x1dc8e: 0x6cac2a20, 0x1dc8f: 0x6d206c20, + 0x1dc90: 0x6cd9b620, 0x1dc91: 0x6d1b6220, 0x1dc92: 0x6cd1d420, 0x1dc93: 0x6c215420, + 0x1dc94: 0x6cd27620, 0x1dc95: 0x6d275a20, 0x1dc96: 0x6d317220, 0x1dc97: 0x6c812220, + 0x1dc98: 0x6cc7b420, 0x1dc99: 0x6c9b2a20, 0x1dc9a: 0x6c863a20, 0x1dc9b: 0x6cc38e20, + 0x1dc9c: 0x6cdb9c20, 0x1dc9d: 0x6d258a20, 0x1dc9e: 0x6c863c20, 0x1dc9f: 0x6c71c420, + 0x1dca0: 0x6cf65620, 0x1dca1: 0x6c057e20, 0x1dca2: 0x6c1e8220, 0x1dca3: 0x6d062020, + 0x1dca4: 0x6ce8cc20, 0x1dca5: 0x6c8e7020, 0x1dca6: 0x6c5de020, 0x1dca7: 0x6c2d2220, + 0x1dca8: 0x6cba5e20, 0x1dca9: 0x6d409e20, 0x1dcaa: 0x6cb39820, 0x1dcab: 0x6c25e420, + 0x1dcac: 0x6d24fa20, 0x1dcad: 0x6c1e9020, 0x1dcae: 0x6d237a20, 0x1dcaf: 0x6c7afe20, + 0x1dcb0: 0x6cac6220, 0x1dcb1: 0x6cb43e20, 0x1dcb2: 0x6cb44020, 0x1dcb3: 0x6ca35820, + 0x1dcb4: 0x6cd78820, 0x1dcb5: 0x6cf78820, 0x1dcb6: 0x6c3b7c20, 0x1dcb7: 0x6d27b820, + 0x1dcb8: 0x6d32d220, 0x1dcb9: 0x6c64c020, 0x1dcba: 0x6c605e20, 0x1dcbb: 0x6cc92220, + 0x1dcbc: 0x6c123620, 0x1dcbd: 0x6c371820, 0x1dcbe: 0x6c9c5820, 0x1dcbf: 0x6c4fa820, + // Block 0x773, offset 0x1dcc0 + 0x1dcc0: 0x6cdcd820, 0x1dcc1: 0x6d317420, 0x1dcc2: 0x6ca00c20, 0x1dcc3: 0x6cd9b820, + 0x1dcc4: 0x6d06fe20, 0x1dcc5: 0x6c8e7220, 0x1dcc6: 0x6cf78a20, 0x1dcc7: 0x6c479220, + 0x1dcc8: 0x6c80c020, 0x1dcc9: 0x6cc68c20, 0x1dcca: 0x6cf25420, 0x1dccb: 0x6c414820, + 0x1dccc: 0x6c263020, 0x1dccd: 0x6cd1d620, 0x1dcce: 0x6ce10820, 0x1dccf: 0x6c95b620, + 0x1dcd0: 0x6cc82020, 0x1dcd1: 0x6cdd2820, 0x1dcd2: 0x6d07ae20, 0x1dcd3: 0x6c073620, + 0x1dcd4: 0x6d11ba20, 0x1dcd5: 0x6c4b5620, 0x1dcd6: 0x6c09da20, 0x1dcd7: 0x6d3ffc20, + 0x1dcd8: 0x6c4bd220, 0x1dcd9: 0x6d42ba20, 0x1dcda: 0x6ce58620, 0x1dcdb: 0x6c12fe20, + 0x1dcdc: 0x6cae2e20, 0x1dcdd: 0x6c7fa420, 0x1dcde: 0x6c28b620, 0x1dcdf: 0x6c622420, + 0x1dce0: 0x6c83f420, 0x1dce1: 0x6ccffa20, 0x1dce2: 0x6c810620, 0x1dce3: 0x6d237c20, + 0x1dce4: 0x6c8e2e20, 0x1dce5: 0x6d1c8420, 0x1dce6: 0x6ca13020, 0x1dce7: 0x6c2e3020, + 0x1dce8: 0x6ce58e20, 0x1dce9: 0x6c993c20, 0x1dcea: 0x6ce6fa20, 0x1dceb: 0x6c1f5a20, + 0x1dcec: 0x6caeae20, 0x1dced: 0x6c014020, 0x1dcee: 0x6c881820, 0x1dcef: 0x6c233220, + 0x1dcf0: 0x6cf80220, 0x1dcf1: 0x6cb2ae20, 0x1dcf2: 0x6cbfb820, 0x1dcf3: 0x6c6ca620, + 0x1dcf4: 0x6c215820, 0x1dcf5: 0x6c6b1420, 0x1dcf6: 0x6cef2420, 0x1dcf7: 0x6ce99620, + 0x1dcf8: 0x6c128220, 0x1dcf9: 0x6d23ca20, 0x1dcfa: 0x6d183620, 0x1dcfb: 0x6d3ed220, + 0x1dcfc: 0x6c8a7220, 0x1dcfd: 0x6c09dc20, 0x1dcfe: 0x6c91ce20, 0x1dcff: 0x6d077620, + // Block 0x774, offset 0x1dd00 + 0x1dd00: 0x6c10a820, 0x1dd01: 0x6d2ed020, 0x1dd02: 0x6c824a20, 0x1dd03: 0x6cbb1c20, + 0x1dd04: 0x6c97f220, 0x1dd05: 0x6d0cb820, 0x1dd06: 0x6c8d3e20, 0x1dd07: 0x6c621020, + 0x1dd08: 0x6c0c0e20, 0x1dd09: 0x6c4bde20, 0x1dd0a: 0x6c4e5c20, 0x1dd0b: 0x6c2b8220, + 0x1dd0c: 0x6cdaf020, 0x1dd0d: 0x6c929620, 0x1dd0e: 0x6ccf6c20, 0x1dd0f: 0x6cce1420, + 0x1dd10: 0x6c2b8420, 0x1dd11: 0x6c9ee420, 0x1dd12: 0x6d09a220, 0x1dd13: 0x6c97f420, + 0x1dd14: 0x6c0f3420, 0x1dd15: 0x6c2c8420, 0x1dd16: 0x6c25ea20, 0x1dd17: 0x6d311620, + 0x1dd18: 0x6cd00a20, 0x1dd19: 0x6d08a620, 0x1dd1a: 0x6cf0b220, 0x1dd1b: 0x6c558220, + 0x1dd1c: 0x6c025620, 0x1dd1d: 0x6c9cfc20, 0x1dd1e: 0x6c90aa20, 0x1dd1f: 0x6c244a20, + 0x1dd20: 0x6d37c220, 0x1dd21: 0x6c114820, 0x1dd22: 0x6cb33220, 0x1dd23: 0x6c67b220, + 0x1dd24: 0x6c9d6e20, 0x1dd25: 0x6c233420, 0x1dd26: 0x6ca7a220, 0x1dd27: 0x6c5c0220, + 0x1dd28: 0x6c738620, 0x1dd29: 0x6d1a8420, 0x1dd2a: 0x6c66ac20, 0x1dd2b: 0x6ca6f020, + 0x1dd2c: 0x6cd50220, 0x1dd2d: 0x6d19f020, 0x1dd2e: 0x6c4c7e20, 0x1dd2f: 0x6c18d620, + 0x1dd30: 0x6c56bc20, 0x1dd31: 0x6ccc0020, 0x1dd32: 0x6c79fc20, 0x1dd33: 0x6cba6e20, + 0x1dd34: 0x6c966e20, 0x1dd35: 0x6d29e420, 0x1dd36: 0x6d2b5a20, 0x1dd37: 0x6cbb1620, + 0x1dd38: 0x6c30ba20, 0x1dd39: 0x6c88c620, 0x1dd3a: 0x6c8c5a20, 0x1dd3b: 0x6c79fe20, + 0x1dd3c: 0x6c007020, 0x1dd3d: 0x6c0a0a20, 0x1dd3e: 0x6c843220, 0x1dd3f: 0x6cf00a20, + // Block 0x775, offset 0x1dd40 + 0x1dd40: 0x6c609620, 0x1dd41: 0x6cb9c420, 0x1dd42: 0x6cd17620, 0x1dd43: 0x6c385c20, + 0x1dd44: 0x6c9b3c20, 0x1dd45: 0x6cab9020, 0x1dd46: 0x6c15dc20, 0x1dd47: 0x6c2d2820, + 0x1dd48: 0x6d0aa420, 0x1dd49: 0x6c687020, 0x1dd4a: 0x6cc8ac20, 0x1dd4b: 0x6cc8ae20, + 0x1dd4c: 0x6c82d420, 0x1dd4d: 0x6d218e20, 0x1dd4e: 0x6cbbf220, 0x1dd4f: 0x6c1ea020, + 0x1dd50: 0x6c575220, 0x1dd51: 0x6c64e220, 0x1dd52: 0x6c971a20, 0x1dd53: 0x6d27c220, + 0x1dd54: 0x6c05b820, 0x1dd55: 0x6d1f6820, 0x1dd56: 0x6cc1aa20, 0x1dd57: 0x6c92da20, + 0x1dd58: 0x6cc52a20, 0x1dd59: 0x6c5c1e20, 0x1dd5a: 0x6c369020, 0x1dd5b: 0x6ce36a20, + 0x1dd5c: 0x6c3a6a20, 0x1dd5d: 0x6c749e20, 0x1dd5e: 0x6d41c820, 0x1dd5f: 0x6c384020, + 0x1dd60: 0x6cc7c020, 0x1dd61: 0x6c3b8e20, 0x1dd62: 0x6c7d1620, 0x1dd63: 0x6cd75820, + 0x1dd64: 0x6cc8a220, 0x1dd65: 0x6d0b5e20, 0x1dd66: 0x6d05dc20, 0x1dd67: 0x6c403c20, + 0x1dd68: 0x6c74a020, 0x1dd69: 0x6c298a20, 0x1dd6a: 0x6cf3e420, 0x1dd6b: 0x6c303a20, + 0x1dd6c: 0x6cd82420, 0x1dd6d: 0x6cff1820, 0x1dd6e: 0x6cf8d020, 0x1dd6f: 0x6c8fa020, + 0x1dd70: 0x6cf16420, 0x1dd71: 0x6ccee820, 0x1dd72: 0x6cb64220, 0x1dd73: 0x6c64e420, + 0x1dd74: 0x6d284e20, 0x1dd75: 0x6cdcde20, 0x1dd76: 0x6c8d5a20, 0x1dd77: 0x6d23f220, + 0x1dd78: 0x6cf9ec20, 0x1dd79: 0x6cf27220, 0x1dd7a: 0x6c609820, 0x1dd7b: 0x6c538820, + 0x1dd7c: 0x6cd8ee20, 0x1dd7d: 0x6ca9ca20, 0x1dd7e: 0x6c82da20, 0x1dd7f: 0x6d07ce20, + // Block 0x776, offset 0x1dd80 + 0x1dd80: 0x6d285620, 0x1dd81: 0x6d23cc20, 0x1dd82: 0x6cf7a420, 0x1dd83: 0x6c506e20, + 0x1dd84: 0x6c05d620, 0x1dd85: 0x6c4fae20, 0x1dd86: 0x6c00d220, 0x1dd87: 0x6ceeba20, + 0x1dd88: 0x6c5c3c20, 0x1dd89: 0x6c5c3e20, 0x1dd8a: 0x6c628220, 0x1dd8b: 0x6c226e20, + 0x1dd8c: 0x6cfd8420, 0x1dd8d: 0x6ced9a20, 0x1dd8e: 0x6c9ee820, 0x1dd8f: 0x6d18b420, + 0x1dd90: 0x6c838820, 0x1dd91: 0x6c677e20, 0x1dd92: 0x6c120820, 0x1dd93: 0x6cd01e20, + 0x1dd94: 0x6cbb2620, 0x1dd95: 0x6c885a20, 0x1dd96: 0x6c781c20, 0x1dd97: 0x6d25ae20, + 0x1dd98: 0x6c26c020, 0x1dd99: 0x6ce42220, 0x1dd9a: 0x6ce0d420, 0x1dd9b: 0x6d08e820, + 0x1dd9c: 0x6c0a5c20, 0x1dd9d: 0x6d2d9a20, 0x1dd9e: 0x6cdce020, 0x1dd9f: 0x6cfad820, + 0x1dda0: 0x6c38c420, 0x1dda1: 0x6c2f8220, 0x1dda2: 0x6d021c20, 0x1dda3: 0x6c47d220, + 0x1dda4: 0x6d021e20, 0x1dda5: 0x6cd56e20, 0x1dda6: 0x6c66d420, 0x1dda7: 0x6c4fb020, + 0x1dda8: 0x6c52ca20, 0x1dda9: 0x6cc99820, 0x1ddaa: 0x6d02f220, 0x1ddab: 0x6d09aa20, + 0x1ddac: 0x6d122420, 0x1ddad: 0x6c046a20, 0x1ddae: 0x6cda2c20, 0x1ddaf: 0x6cd57020, + 0x1ddb0: 0x6d09b420, 0x1ddb1: 0x6c336a20, 0x1ddb2: 0x6cb21a20, 0x1ddb3: 0x6cf01820, + 0x1ddb4: 0x6ca92820, 0x1ddb5: 0x6c1df020, 0x1ddb6: 0x6c970420, 0x1ddb7: 0x6cc7d420, + 0x1ddb8: 0x6cb18620, 0x1ddb9: 0x6cdf4c20, 0x1ddba: 0x6c62a020, 0x1ddbb: 0x6d2a5a20, + 0x1ddbc: 0x6c18f020, 0x1ddbd: 0x6d319a20, 0x1ddbe: 0x6c37a820, 0x1ddbf: 0x6ca65420, + // Block 0x777, offset 0x1ddc0 + 0x1ddc0: 0x6d1ca820, 0x1ddc1: 0x6c432620, 0x1ddc2: 0x6c23b820, 0x1ddc3: 0x6cff2420, + 0x1ddc4: 0x6cb66020, 0x1ddc5: 0x6c382820, 0x1ddc6: 0x6c65e420, 0x1ddc7: 0x6d073e20, + 0x1ddc8: 0x6c7ca620, 0x1ddc9: 0x6c60c620, 0x1ddca: 0x6c0b5820, 0x1ddcb: 0x6c2e4620, + 0x1ddcc: 0x6c9d9420, 0x1ddcd: 0x6c7fc420, 0x1ddce: 0x6c6d6420, 0x1ddcf: 0x6c124e20, + 0x1ddd0: 0x6c9ea020, 0x1ddd1: 0x6cbf6e20, 0x1ddd2: 0x6cbcec20, 0x1ddd3: 0x6cfc3420, + 0x1ddd4: 0x6c8a5420, 0x1ddd5: 0x6cab9820, 0x1ddd6: 0x6cfbb620, 0x1ddd7: 0x6cdb4020, + 0x1ddd8: 0x6c936a20, 0x1ddd9: 0x6d18f020, 0x1ddda: 0x6d075220, 0x1dddb: 0x6d014c20, + 0x1dddc: 0x6c847220, 0x1dddd: 0x6d18f220, 0x1ddde: 0x6c7e6620, 0x1dddf: 0x6c82f020, + 0x1dde0: 0x6c69ca20, 0x1dde1: 0x6c2b9a20, 0x1dde2: 0x6d355a20, 0x1dde3: 0x6c06bc20, + 0x1dde4: 0x6ce2c220, 0x1dde5: 0x6d123620, 0x1dde6: 0x6ca17c20, 0x1dde7: 0x6c595e20, + 0x1dde8: 0x6c0c3e20, 0x1dde9: 0x6c386820, 0x1ddea: 0x6cda3220, 0x1ddeb: 0x6ce02e20, + 0x1ddec: 0x6ce99a20, 0x1dded: 0x6cbf8020, 0x1ddee: 0x6cbc0820, 0x1ddef: 0x6cf0f620, + 0x1ddf0: 0x6c8ebc20, 0x1ddf1: 0x6c5c5c20, 0x1ddf2: 0x6cabac20, 0x1ddf3: 0x6c432c20, + 0x1ddf4: 0x6d286220, 0x1ddf5: 0x6c068a20, 0x1ddf6: 0x6c870a20, 0x1ddf7: 0x6cd57e20, + 0x1ddf8: 0x6c1ebe20, 0x1ddf9: 0x6c007e20, 0x1ddfa: 0x6c8c7a20, 0x1ddfb: 0x6d2a6020, + 0x1ddfc: 0x6d07e620, 0x1ddfd: 0x6cbe2820, 0x1ddfe: 0x6c7f7220, 0x1ddff: 0x6c5e3220, + // Block 0x778, offset 0x1de00 + 0x1de00: 0x6cebb620, 0x1de01: 0x6cf54420, 0x1de02: 0x6cc8b820, 0x1de03: 0x6cc8ba20, + 0x1de04: 0x6cb68420, 0x1de05: 0x6c528020, 0x1de06: 0x6c917820, 0x1de07: 0x6cda6420, + 0x1de08: 0x6ce9d020, 0x1de09: 0x6c9b8a20, 0x1de0a: 0x6d287020, 0x1de0b: 0x6cb2dc20, + 0x1de0c: 0x6d22b020, 0x1de0d: 0x6d09c220, 0x1de0e: 0x6c62be20, 0x1de0f: 0x6c6eec20, + 0x1de10: 0x6d07e820, 0x1de11: 0x6ca09020, 0x1de12: 0x6cc0c220, 0x1de13: 0x6cda6620, + 0x1de14: 0x6c6eee20, 0x1de15: 0x6c3d0420, 0x1de16: 0x6ca8a620, 0x1de17: 0x6c0ffe20, + 0x1de18: 0x6cc4ea20, 0x1de19: 0x6d193020, 0x1de1a: 0x6cfc4a20, 0x1de1b: 0x6d21e420, + 0x1de1c: 0x6c718820, 0x1de1d: 0x6c892e20, 0x1de1e: 0x6c88dc20, 0x1de1f: 0x6d1b1e20, + 0x1de20: 0x6cbb2e20, 0x1de21: 0x6d1c2420, 0x1de22: 0x6c8fcc20, 0x1de23: 0x6ce82220, + 0x1de24: 0x6cf05420, 0x1de25: 0x6d270c20, 0x1de26: 0x6c8d9420, 0x1de27: 0x6cc1f020, + 0x1de28: 0x6d117020, 0x1de29: 0x6c38e620, 0x1de2a: 0x6c9a3c20, 0x1de2b: 0x6c4f3020, + 0x1de2c: 0x6c7c5620, 0x1de2d: 0x6c7ff020, 0x1de2e: 0x6c62d220, 0x1de2f: 0x6c29a220, + 0x1de30: 0x6c981820, 0x1de31: 0x6c836220, 0x1de32: 0x6c828820, 0x1de33: 0x6c5b0a20, + 0x1de34: 0x6c3c8220, 0x1de35: 0x6d342820, 0x1de36: 0x6cf10e20, 0x1de37: 0x6c7cb620, + 0x1de38: 0x6d2ea220, 0x1de39: 0x6c580620, 0x1de3a: 0x6c84ac20, 0x1de3b: 0x6c62e220, + 0x1de3c: 0x6c9cb620, 0x1de3d: 0x6c830a20, 0x1de3e: 0x6c582220, 0x1de3f: 0x6c957a20, + // Block 0x779, offset 0x1de40 + 0x1de40: 0x6c5fa020, 0x1de41: 0x6c7cbe20, 0x1de42: 0x6c934020, 0x1de43: 0x6c655020, + 0x1de44: 0x6cc9ba20, 0x1de45: 0x6ce2e620, 0x1de46: 0x6c829e20, 0x1de47: 0x6cc36820, + 0x1de48: 0x6cff6020, 0x1de49: 0x6d197420, 0x1de4a: 0x6c947220, 0x1de4b: 0x6c9ae620, + 0x1de4c: 0x6c0cd420, 0x1de4d: 0x6c549420, 0x1de4e: 0x6c561220, 0x1de4f: 0x6c91b820, + 0x1de50: 0x6caaa220, 0x1de51: 0x6c93d420, 0x1de52: 0x6cd7da20, 0x1de53: 0x6cfeaa20, + 0x1de54: 0x6cb98220, 0x1de55: 0x6c1f3620, 0x1de56: 0x6c54c620, 0x1de57: 0x6d058a20, + 0x1de58: 0x6c25d820, 0x1de59: 0x6c3e6e20, 0x1de5a: 0x6d058c20, 0x1de5b: 0x6d05a820, + 0x1de5c: 0x6c91c420, 0x1de5d: 0x6c562420, 0x1de5e: 0x6d216620, 0x1de5f: 0x6c504a20, + 0x1de60: 0x6c686020, 0x1de61: 0x6c725820, 0x1de62: 0x6c4c8620, 0x1de63: 0x6c066820, + 0x1de64: 0x6d0cd220, 0x1de65: 0x6d2e8220, 0x1de66: 0x6d2e8420, 0x1de67: 0x6c7c4820, + 0x1de68: 0x6c0d5620, 0x1de69: 0x6cf90620, 0x1de6a: 0x6cd63220, 0x1de6b: 0x6c1d0820, + 0x1de6c: 0x6cc00220, 0x1de6d: 0x6c2db220, 0x1de6e: 0x6c612620, 0x1de6f: 0x6cc00c20, + 0x1de70: 0x6c2f5820, 0x1de71: 0x6cd19a20, 0x1de72: 0x6cf95020, 0x1de73: 0x6c740820, + 0x1de74: 0x6d302a20, 0x1de75: 0x6ccf0a20, 0x1de76: 0x6d208020, 0x1de77: 0x6c4dea20, + 0x1de78: 0x6d3efe20, 0x1de79: 0x6c532220, 0x1de7a: 0x6c5a9a20, 0x1de7b: 0x6c9b0c20, + 0x1de7c: 0x6c447e20, 0x1de7d: 0x6cdbb020, 0x1de7e: 0x6cf95a20, 0x1de7f: 0x6c149420, + // Block 0x77a, offset 0x1de80 + 0x1de80: 0x6cd25620, 0x1de81: 0x6d15d620, 0x1de82: 0x6c969620, 0x1de83: 0x6cfe2020, + 0x1de84: 0x6c399420, 0x1de85: 0x6c360220, 0x1de86: 0x6c034020, 0x1de87: 0x6c1b9620, + 0x1de88: 0x6cb8ca20, 0x1de89: 0x6cf18e20, 0x1de8a: 0x6cf19020, 0x1de8b: 0x6cc8c620, + 0x1de8c: 0x6c056620, 0x1de8d: 0x6cafd220, 0x1de8e: 0x6d269a20, 0x1de8f: 0x6d269c20, + 0x1de90: 0x6c756a20, 0x1de91: 0x6cb5ae20, 0x1de92: 0x6ce73c20, 0x1de93: 0x6d1ad620, + 0x1de94: 0x6cb5b020, 0x1de95: 0x6c119020, 0x1de96: 0x6d255420, 0x1de97: 0x6c741a20, + 0x1de98: 0x6c5b3020, 0x1de99: 0x6cbd6c20, 0x1de9a: 0x6cb5b220, 0x1de9b: 0x6d382220, + 0x1de9c: 0x6d0b2220, 0x1de9d: 0x6c4fc220, 0x1de9e: 0x6ca27e20, 0x1de9f: 0x6cede420, + 0x1dea0: 0x6c3b6820, 0x1dea1: 0x6c3b6a20, 0x1dea2: 0x6c4f6e20, 0x1dea3: 0x6c462e20, + 0x1dea4: 0x6d2a4620, 0x1dea5: 0x6c3fd420, 0x1dea6: 0x6cc47020, 0x1dea7: 0x6c6bda20, + 0x1dea8: 0x6c3e4220, 0x1dea9: 0x6c1aa420, 0x1deaa: 0x6c30ea20, 0x1deab: 0x6c064820, + 0x1deac: 0x6cfc0620, 0x1dead: 0x6ca5de20, 0x1deae: 0x6ce27820, 0x1deaf: 0x6cbfac20, + 0x1deb0: 0x6d1f2c20, 0x1deb1: 0x6d2cc220, 0x1deb2: 0x6cb2a220, 0x1deb3: 0x6c1b1e20, + 0x1deb4: 0x6d204220, 0x1deb5: 0x6c511e20, 0x1deb6: 0x6c4da020, 0x1deb7: 0x6c723420, + 0x1deb8: 0x6c85fe20, 0x1deb9: 0x6c3fe620, 0x1deba: 0x6cc47620, 0x1debb: 0x6d2c2a20, + 0x1debc: 0x6c468220, 0x1debd: 0x6cafe220, 0x1debe: 0x6cafe420, 0x1debf: 0x6cfb5220, + // Block 0x77b, offset 0x1dec0 + 0x1dec0: 0x6d3af020, 0x1dec1: 0x6c2dc820, 0x1dec2: 0x6c0ce820, 0x1dec3: 0x6c0de220, + 0x1dec4: 0x6c470e20, 0x1dec5: 0x6d2d7020, 0x1dec6: 0x6cc10620, 0x1dec7: 0x6ccf1220, + 0x1dec8: 0x6ce5fa20, 0x1dec9: 0x6c8d0020, 0x1deca: 0x6c478420, 0x1decb: 0x6c288420, + 0x1decc: 0x6c478620, 0x1decd: 0x6d1c6a20, 0x1dece: 0x6c860020, 0x1decf: 0x6c196a20, + 0x1ded0: 0x6cc11220, 0x1ded1: 0x6ca1d620, 0x1ded2: 0x6c43f620, 0x1ded3: 0x6c22ca20, + 0x1ded4: 0x6c5b3820, 0x1ded5: 0x6c5b3a20, 0x1ded6: 0x6c986a20, 0x1ded7: 0x6c3ffc20, + 0x1ded8: 0x6d0fbc20, 0x1ded9: 0x6cebde20, 0x1deda: 0x6c8b0e20, 0x1dedb: 0x6d39ac20, + 0x1dedc: 0x6d13f820, 0x1dedd: 0x6cfb6220, 0x1dede: 0x6c7e0020, 0x1dedf: 0x6c684e20, + 0x1dee0: 0x6c861a20, 0x1dee1: 0x6d17be20, 0x1dee2: 0x6cb2b020, 0x1dee3: 0x6cb4fc20, + 0x1dee4: 0x6c4cfe20, 0x1dee5: 0x6ccf1a20, 0x1dee6: 0x6d14fc20, 0x1dee7: 0x6cee2420, + 0x1dee8: 0x6ca11c20, 0x1dee9: 0x6cbf3220, 0x1deea: 0x6cbcc420, 0x1deeb: 0x6c4b0420, + 0x1deec: 0x6cbf3420, 0x1deed: 0x6d364020, 0x1deee: 0x6c976420, 0x1deef: 0x6c81f820, + 0x1def0: 0x6d305c20, 0x1def1: 0x6c63c220, 0x1def2: 0x6ca4ae20, 0x1def3: 0x6cd7ee20, + 0x1def4: 0x6cb5f020, 0x1def5: 0x6d038420, 0x1def6: 0x6c6bee20, 0x1def7: 0x6cc07c20, + 0x1def8: 0x6cce7a20, 0x1def9: 0x6d1e4c20, 0x1defa: 0x6c63ce20, 0x1defb: 0x6cea0220, + 0x1defc: 0x6c17de20, 0x1defd: 0x6c044e20, 0x1defe: 0x6c357620, 0x1deff: 0x6c4ed420, + // Block 0x77c, offset 0x1df00 + 0x1df00: 0x6cd56420, 0x1df01: 0x6d081620, 0x1df02: 0x6c3c5820, 0x1df03: 0x6cd0b820, + 0x1df04: 0x6cd0ba20, 0x1df05: 0x6c3f7020, 0x1df06: 0x6cfce020, 0x1df07: 0x6d2ffe20, + 0x1df08: 0x6cf3da20, 0x1df09: 0x6c3ea820, 0x1df0a: 0x6c83f820, 0x1df0b: 0x6c80d420, + 0x1df0c: 0x6c09de20, 0x1df0d: 0x6c1e9220, 0x1df0e: 0x6d24fc20, 0x1df0f: 0x6d1fd820, + 0x1df10: 0x6c6af820, 0x1df11: 0x6c288e20, 0x1df12: 0x6d0ca220, 0x1df13: 0x6ce67a20, + 0x1df14: 0x6c2d6820, 0x1df15: 0x6cea0420, 0x1df16: 0x6c5b3c20, 0x1df17: 0x6cf29820, + 0x1df18: 0x6d340420, 0x1df19: 0x6cd92c20, 0x1df1a: 0x6c3a1420, 0x1df1b: 0x6c70b620, + 0x1df1c: 0x6c9d7020, 0x1df1d: 0x6cb62c20, 0x1df1e: 0x6cb62e20, 0x1df1f: 0x6d23a820, + 0x1df20: 0x6c75da20, 0x1df21: 0x6c7e8a20, 0x1df22: 0x6c9be220, 0x1df23: 0x6cbac420, + 0x1df24: 0x6cd80820, 0x1df25: 0x6cf68020, 0x1df26: 0x6c950820, 0x1df27: 0x6c865420, + 0x1df28: 0x6c2ed620, 0x1df29: 0x6ce59a20, 0x1df2a: 0x6ce23220, 0x1df2b: 0x6c7d7a20, + 0x1df2c: 0x6c4e2620, 0x1df2d: 0x6c4eec20, 0x1df2e: 0x6d23aa20, 0x1df2f: 0x6c058420, + 0x1df30: 0x6c3a4020, 0x1df31: 0x6cb00c20, 0x1df32: 0x6ceea820, 0x1df33: 0x6c339e20, + 0x1df34: 0x6d183820, 0x1df35: 0x6d250c20, 0x1df36: 0x6cddd020, 0x1df37: 0x6cc30c20, + 0x1df38: 0x6cba1a20, 0x1df39: 0x6cc8d820, 0x1df3a: 0x6ca5fc20, 0x1df3b: 0x6cbe5220, + 0x1df3c: 0x6cf0b420, 0x1df3d: 0x6c899e20, 0x1df3e: 0x6c4cc820, 0x1df3f: 0x6cec9620, + // Block 0x77d, offset 0x1df40 + 0x1df40: 0x6c301020, 0x1df41: 0x6c367220, 0x1df42: 0x6c04d020, 0x1df43: 0x6c2c8620, + 0x1df44: 0x6cee3420, 0x1df45: 0x6c11a020, 0x1df46: 0x6d102820, 0x1df47: 0x6d1d6820, + 0x1df48: 0x6c4c3220, 0x1df49: 0x6c150e20, 0x1df4a: 0x6c2fb420, 0x1df4b: 0x6c7e8c20, + 0x1df4c: 0x6c782c20, 0x1df4d: 0x6c6afa20, 0x1df4e: 0x6d005020, 0x1df4f: 0x6ce68e20, + 0x1df50: 0x6c99b220, 0x1df51: 0x6d05de20, 0x1df52: 0x6c9dd020, 0x1df53: 0x6d219020, + 0x1df54: 0x6c6a3220, 0x1df55: 0x6cd28020, 0x1df56: 0x6d07c820, 0x1df57: 0x6c59f620, + 0x1df58: 0x6d0dce20, 0x1df59: 0x6c0b0420, 0x1df5a: 0x6cc75e20, 0x1df5b: 0x6ceeb220, + 0x1df5c: 0x6c403e20, 0x1df5d: 0x6d25a020, 0x1df5e: 0x6c9aaa20, 0x1df5f: 0x6cf14620, + 0x1df60: 0x6c3ee220, 0x1df61: 0x6cc7c220, 0x1df62: 0x6d00e220, 0x1df63: 0x6d1f6a20, + 0x1df64: 0x6cc09020, 0x1df65: 0x6c990020, 0x1df66: 0x6cf97820, 0x1df67: 0x6d1be020, + 0x1df68: 0x6cd1f020, 0x1df69: 0x6c1d2020, 0x1df6a: 0x6ce0ce20, 0x1df6b: 0x6d39be20, + 0x1df6c: 0x6d3fba20, 0x1df6d: 0x6ce36c20, 0x1df6e: 0x6c404020, 0x1df6f: 0x6d25a220, + 0x1df70: 0x6c7c9820, 0x1df71: 0x6c9b3e20, 0x1df72: 0x6c7e9620, 0x1df73: 0x6c31b220, + 0x1df74: 0x6c559620, 0x1df75: 0x6cbfc220, 0x1df76: 0x6c2ee020, 0x1df77: 0x6c866420, + 0x1df78: 0x6cf29c20, 0x1df79: 0x6d276220, 0x1df7a: 0x6cc24e20, 0x1df7b: 0x6ca43a20, + 0x1df7c: 0x6c90b620, 0x1df7d: 0x6c211220, 0x1df7e: 0x6cc6a820, 0x1df7f: 0x6d1c9220, + // Block 0x77e, offset 0x1df80 + 0x1df80: 0x6c677620, 0x1df81: 0x6c051420, 0x1df82: 0x6c80d820, 0x1df83: 0x6cad0e20, + 0x1df84: 0x6cd82c20, 0x1df85: 0x6cf6da20, 0x1df86: 0x6c22de20, 0x1df87: 0x6cf6dc20, + 0x1df88: 0x6d25b020, 0x1df89: 0x6cf23c20, 0x1df8a: 0x6c885c20, 0x1df8b: 0x6cd9dc20, + 0x1df8c: 0x6c04a020, 0x1df8d: 0x6cc6b220, 0x1df8e: 0x6cc6b420, 0x1df8f: 0x6c60b220, + 0x1df90: 0x6cf38220, 0x1df91: 0x6d055020, 0x1df92: 0x6c4f0e20, 0x1df93: 0x6cbdac20, + 0x1df94: 0x6d156020, 0x1df95: 0x6c089020, 0x1df96: 0x6c575420, 0x1df97: 0x6ce13c20, + 0x1df98: 0x6d161420, 0x1df99: 0x6c327c20, 0x1df9a: 0x6ca3d620, 0x1df9b: 0x6c517820, + 0x1df9c: 0x6c55c020, 0x1df9d: 0x6c4a8a20, 0x1df9e: 0x6c96a420, 0x1df9f: 0x6ca01a20, + 0x1dfa0: 0x6d18b620, 0x1dfa1: 0x6cf1b020, 0x1dfa2: 0x6d1ca020, 0x1dfa3: 0x6ce28420, + 0x1dfa4: 0x6d37ca20, 0x1dfa5: 0x6c123c20, 0x1dfa6: 0x6ccb1020, 0x1dfa7: 0x6cb81a20, + 0x1dfa8: 0x6c97c820, 0x1dfa9: 0x6ce5e620, 0x1dfaa: 0x6cce2020, 0x1dfab: 0x6cd3e620, + 0x1dfac: 0x6c129e20, 0x1dfad: 0x6c1ad620, 0x1dfae: 0x6c2ca620, 0x1dfaf: 0x6c027620, + 0x1dfb0: 0x6c92fa20, 0x1dfb1: 0x6cf0e820, 0x1dfb2: 0x6d371220, 0x1dfb3: 0x6ce14220, + 0x1dfb4: 0x6c18ea20, 0x1dfb5: 0x6cb16a20, 0x1dfb6: 0x6cc1c420, 0x1dfb7: 0x6cb02420, + 0x1dfb8: 0x6d21be20, 0x1dfb9: 0x6c66e420, 0x1dfba: 0x6c955820, 0x1dfbb: 0x6c90c220, + 0x1dfbc: 0x6cbdea20, 0x1dfbd: 0x6d37ce20, 0x1dfbe: 0x6d1b1420, 0x1dfbf: 0x6c678820, + // Block 0x77f, offset 0x1dfc0 + 0x1dfc0: 0x6cd67620, 0x1dfc1: 0x6cf1b820, 0x1dfc2: 0x6cff2620, 0x1dfc3: 0x6ceda020, + 0x1dfc4: 0x6d30a220, 0x1dfc5: 0x6d310820, 0x1dfc6: 0x6c96f820, 0x1dfc7: 0x6c967a20, + 0x1dfc8: 0x6c4c4820, 0x1dfc9: 0x6c8eaa20, 0x1dfca: 0x6c990a20, 0x1dfcb: 0x6cf6f220, + 0x1dfcc: 0x6c236a20, 0x1dfcd: 0x6c846220, 0x1dfce: 0x6c97d020, 0x1dfcf: 0x6cff2820, + 0x1dfd0: 0x6c173020, 0x1dfd1: 0x6d2ee220, 0x1dfd2: 0x6c98a020, 0x1dfd3: 0x6cfe5e20, + 0x1dfd4: 0x6ca17e20, 0x1dfd5: 0x6d418220, 0x1dfd6: 0x6cd83c20, 0x1dfd7: 0x6cbfd420, + 0x1dfd8: 0x6ce28820, 0x1dfd9: 0x6d34ac20, 0x1dfda: 0x6caed820, 0x1dfdb: 0x6caeda20, + 0x1dfdc: 0x6c695620, 0x1dfdd: 0x6cc1dc20, 0x1dfde: 0x6c0cc220, 0x1dfdf: 0x6c8a3c20, + 0x1dfe0: 0x6cac8220, 0x1dfe1: 0x6c4b2220, 0x1dfe2: 0x6cf81c20, 0x1dfe3: 0x6c615a20, + 0x1dfe4: 0x6d3b9620, 0x1dfe5: 0x6c5a0e20, 0x1dfe6: 0x6c3a4220, 0x1dfe7: 0x6c818420, + 0x1dfe8: 0x6c74de20, 0x1dfe9: 0x6c74e020, 0x1dfea: 0x6c5c7220, 0x1dfeb: 0x6d1aa220, + 0x1dfec: 0x6c153a20, 0x1dfed: 0x6c689c20, 0x1dfee: 0x6ccdcc20, 0x1dfef: 0x6ca4ca20, + 0x1dff0: 0x6cff3e20, 0x1dff1: 0x6cf40020, 0x1dff2: 0x6c1d2620, 0x1dff3: 0x6d0a5020, + 0x1dff4: 0x6cd83e20, 0x1dff5: 0x6c1f9c20, 0x1dff6: 0x6c19a020, 0x1dff7: 0x6c291e20, + 0x1dff8: 0x6c854420, 0x1dff9: 0x6d026620, 0x1dffa: 0x6ccdd420, 0x1dffb: 0x6d162420, + 0x1dffc: 0x6c6e3a20, 0x1dffd: 0x6c26c820, 0x1dffe: 0x6c154420, 0x1dfff: 0x6cb80020, + // Block 0x780, offset 0x1e000 + 0x1e000: 0x6c221820, 0x1e001: 0x6cfe0220, 0x1e002: 0x6ccf7e20, 0x1e003: 0x6c95c820, + 0x1e004: 0x6cbdb620, 0x1e005: 0x6d1d6e20, 0x1e006: 0x6c14a220, 0x1e007: 0x6c86da20, + 0x1e008: 0x6d2b6a20, 0x1e009: 0x6d07ea20, 0x1e00a: 0x6c888820, 0x1e00b: 0x6d3a3220, + 0x1e00c: 0x6d2b1e20, 0x1e00d: 0x6d005a20, 0x1e00e: 0x6c98a420, 0x1e00f: 0x6d026820, + 0x1e010: 0x6cb69a20, 0x1e011: 0x6cc6e220, 0x1e012: 0x6c661a20, 0x1e013: 0x6c9bf220, + 0x1e014: 0x6c500220, 0x1e015: 0x6cc7e420, 0x1e016: 0x6c5e3420, 0x1e017: 0x6d3dda20, + 0x1e018: 0x6c6b7820, 0x1e019: 0x6cb22420, 0x1e01a: 0x6c50aa20, 0x1e01b: 0x6c9f0e20, + 0x1e01c: 0x6c38ee20, 0x1e01d: 0x6c828a20, 0x1e01e: 0x6c6b7220, 0x1e01f: 0x6c7ec420, + 0x1e020: 0x6c9fda20, 0x1e021: 0x6c84ae20, 0x1e022: 0x6c219020, 0x1e023: 0x6c873220, + 0x1e024: 0x6cbfe620, 0x1e025: 0x6ca8bc20, 0x1e026: 0x6c919c20, 0x1e027: 0x6c328c20, + 0x1e028: 0x6cff5620, 0x1e029: 0x6d39ee20, 0x1e02a: 0x6c8ffc20, 0x1e02b: 0x6c875620, + 0x1e02c: 0x6c8ffe20, 0x1e02d: 0x6c3c8620, 0x1e02e: 0x6d127220, 0x1e02f: 0x6c086620, + 0x1e030: 0x6ca46020, 0x1e031: 0x6c47f220, 0x1e032: 0x6c730e20, 0x1e033: 0x6d1c4220, + 0x1e034: 0x6cd63820, 0x1e035: 0x6cf75820, 0x1e036: 0x6c11c820, 0x1e037: 0x6cc22420, + 0x1e038: 0x6cc33c20, 0x1e039: 0x6c329020, 0x1e03a: 0x6c11ca20, 0x1e03b: 0x6c97ae20, + 0x1e03c: 0x6cc22e20, 0x1e03d: 0x6c6b8e20, 0x1e03e: 0x6d3a4e20, 0x1e03f: 0x6d3d1820, + // Block 0x781, offset 0x1e040 + 0x1e040: 0x6d093820, 0x1e041: 0x6c598620, 0x1e042: 0x6ca9a420, 0x1e043: 0x6cadba20, + 0x1e044: 0x6caa8420, 0x1e045: 0x6d033020, 0x1e046: 0x6d383220, 0x1e047: 0x6c973420, + 0x1e048: 0x6c37ce20, 0x1e049: 0x6c761220, 0x1e04a: 0x6c9f1020, 0x1e04b: 0x6cf93c20, + 0x1e04c: 0x6d03ba20, 0x1e04d: 0x6d0d5c20, 0x1e04e: 0x6c770620, 0x1e04f: 0x6d260e20, + 0x1e050: 0x6cc28820, 0x1e051: 0x6c8d0220, 0x1e052: 0x6d089020, 0x1e053: 0x6cd5ca20, + 0x1e054: 0x6cfb5420, 0x1e055: 0x6ce7cc20, 0x1e056: 0x6cfe3820, 0x1e057: 0x6c6a1e20, + 0x1e058: 0x6cfb7020, 0x1e059: 0x6d0b3220, 0x1e05a: 0x6c559a20, 0x1e05b: 0x6cf0ca20, + 0x1e05c: 0x6c2a2c20, 0x1e05d: 0x6c1cdc20, 0x1e05e: 0x6cf0d420, 0x1e05f: 0x6c2a3620, + 0x1e060: 0x6d3cd820, 0x1e061: 0x6c527020, 0x1e062: 0x6cc22620, 0x1e063: 0x6d13be20, + 0x1e064: 0x6d198c20, 0x1e065: 0x6c103220, 0x1e066: 0x6c41ce20, 0x1e067: 0x6d20cc20, + 0x1e068: 0x6c0c7020, 0x1e069: 0x6c141820, 0x1e06a: 0x6d147a20, 0x1e06b: 0x6cccc820, + 0x1e06c: 0x6c191e20, 0x1e06d: 0x6c3d5620, 0x1e06e: 0x6c4bbc20, 0x1e06f: 0x6c3b1e20, + 0x1e070: 0x6cd65220, 0x1e071: 0x6c6a8820, 0x1e072: 0x6ca32020, 0x1e073: 0x6d37aa20, + 0x1e074: 0x6c282e20, 0x1e075: 0x6d170c20, 0x1e076: 0x6d381e20, 0x1e077: 0x6d37b220, + 0x1e078: 0x6c6bd220, 0x1e079: 0x6d350820, 0x1e07a: 0x6d009820, 0x1e07b: 0x6cc46820, + 0x1e07c: 0x6d33ba20, 0x1e07d: 0x6cc5da20, 0x1e07e: 0x6cbd2620, 0x1e07f: 0x6c6c3820, + // Block 0x782, offset 0x1e080 + 0x1e080: 0x6c756220, 0x1e081: 0x6d255820, 0x1e082: 0x6c9a8620, 0x1e083: 0x6c149620, + 0x1e084: 0x6c02a220, 0x1e085: 0x6ca79820, 0x1e086: 0x6c5a9e20, 0x1e087: 0x6cc46a20, + 0x1e088: 0x6c635620, 0x1e089: 0x6ceb1020, 0x1e08a: 0x6c8e0e20, 0x1e08b: 0x6c276620, + 0x1e08c: 0x6c064a20, 0x1e08d: 0x6cad5620, 0x1e08e: 0x6d120020, 0x1e08f: 0x6d429420, + 0x1e090: 0x6c097020, 0x1e091: 0x6cced220, 0x1e092: 0x6ce05820, 0x1e093: 0x6c723620, + 0x1e094: 0x6c51c220, 0x1e095: 0x6d090220, 0x1e096: 0x6d053820, 0x1e097: 0x6d31d220, + 0x1e098: 0x6d14da20, 0x1e099: 0x6cabea20, 0x1e09a: 0x6c0e6420, 0x1e09b: 0x6c2b2220, + 0x1e09c: 0x6cec2a20, 0x1e09d: 0x6c3fd620, 0x1e09e: 0x6c4bc420, 0x1e09f: 0x6d35ca20, + 0x1e0a0: 0x6d360a20, 0x1e0a1: 0x6cc47220, 0x1e0a2: 0x6cacb420, 0x1e0a3: 0x6d174620, + 0x1e0a4: 0x6c997420, 0x1e0a5: 0x6ceaba20, 0x1e0a6: 0x6ca32e20, 0x1e0a7: 0x6c464420, + 0x1e0a8: 0x6d088220, 0x1e0a9: 0x6d304220, 0x1e0aa: 0x6cc0f420, 0x1e0ab: 0x6c070420, + 0x1e0ac: 0x6c4bc620, 0x1e0ad: 0x6cf77c20, 0x1e0ae: 0x6ca6ea20, 0x1e0af: 0x6c0ee020, + 0x1e0b0: 0x6c0e7220, 0x1e0b1: 0x6c40ac20, 0x1e0b2: 0x6c1bac20, 0x1e0b3: 0x6c1ba220, + 0x1e0b4: 0x6c7a9420, 0x1e0b5: 0x6cc5ea20, 0x1e0b6: 0x6c67e220, 0x1e0b7: 0x6c63ba20, + 0x1e0b8: 0x6c667e20, 0x1e0b9: 0x6c0efa20, 0x1e0ba: 0x6c6aba20, 0x1e0bb: 0x6c375420, + 0x1e0bc: 0x6c438620, 0x1e0bd: 0x6cc7a620, 0x1e0be: 0x6d39a020, 0x1e0bf: 0x6c4a6020, + // Block 0x783, offset 0x1e0c0 + 0x1e0c0: 0x6d19d020, 0x1e0c1: 0x6c111020, 0x1e0c2: 0x6c8b1020, 0x1e0c3: 0x6c762220, + 0x1e0c4: 0x6d044420, 0x1e0c5: 0x6d3c1c20, 0x1e0c6: 0x6c28fc20, 0x1e0c7: 0x6d05aa20, + 0x1e0c8: 0x6c7d5e20, 0x1e0c9: 0x6c791a20, 0x1e0ca: 0x6ca79e20, 0x1e0cb: 0x6cd5dc20, + 0x1e0cc: 0x6c63c420, 0x1e0cd: 0x6c7db020, 0x1e0ce: 0x6c1a1220, 0x1e0cf: 0x6c852220, + 0x1e0d0: 0x6c72f620, 0x1e0d1: 0x6ccff420, 0x1e0d2: 0x6cb3da20, 0x1e0d3: 0x6c43fa20, + 0x1e0d4: 0x6d180820, 0x1e0d5: 0x6d235620, 0x1e0d6: 0x6d31da20, 0x1e0d7: 0x6c8e6020, + 0x1e0d8: 0x6cc07e20, 0x1e0d9: 0x6cc44820, 0x1e0da: 0x6c622620, 0x1e0db: 0x6d180a20, + 0x1e0dc: 0x6c103e20, 0x1e0dd: 0x6d3c1e20, 0x1e0de: 0x6cd72420, 0x1e0df: 0x6ccc0420, + 0x1e0e0: 0x6cc44e20, 0x1e0e1: 0x6c87e220, 0x1e0e2: 0x6c880620, 0x1e0e3: 0x6c88c020, + 0x1e0e4: 0x6c7a9e20, 0x1e0e5: 0x6c659e20, 0x1e0e6: 0x6c3d1820, 0x1e0e7: 0x6c14d020, + 0x1e0e8: 0x6c09e020, 0x1e0e9: 0x6c7d7020, 0x1e0ea: 0x6ce22e20, 0x1e0eb: 0x6d262a20, + 0x1e0ec: 0x6c8d2220, 0x1e0ed: 0x6c1bb420, 0x1e0ee: 0x6c167420, 0x1e0ef: 0x6c1dc420, + 0x1e0f0: 0x6c343220, 0x1e0f1: 0x6c0c7420, 0x1e0f2: 0x6c899620, 0x1e0f3: 0x6cce5c20, + 0x1e0f4: 0x6cade020, 0x1e0f5: 0x6cade220, 0x1e0f6: 0x6c3a0e20, 0x1e0f7: 0x6d24fe20, + 0x1e0f8: 0x6c95b820, 0x1e0f9: 0x6c4cca20, 0x1e0fa: 0x6d0daa20, 0x1e0fb: 0x6c31aa20, + 0x1e0fc: 0x6ce40420, 0x1e0fd: 0x6d369a20, 0x1e0fe: 0x6c70ae20, 0x1e0ff: 0x6d15fa20, + // Block 0x784, offset 0x1e100 + 0x1e100: 0x6c622820, 0x1e101: 0x6d346c20, 0x1e102: 0x6c48ba20, 0x1e103: 0x6c791c20, + 0x1e104: 0x6cb81620, 0x1e105: 0x6ce40a20, 0x1e106: 0x6ce35820, 0x1e107: 0x6c402420, + 0x1e108: 0x6c1d1a20, 0x1e109: 0x6d01f020, 0x1e10a: 0x6c0b4820, 0x1e10b: 0x6c2ed820, + 0x1e10c: 0x6c7d7c20, 0x1e10d: 0x6c32a020, 0x1e10e: 0x6d054a20, 0x1e10f: 0x6d054c20, + 0x1e110: 0x6c51d620, 0x1e111: 0x6d262c20, 0x1e112: 0x6c05ba20, 0x1e113: 0x6c060620, + 0x1e114: 0x6c402620, 0x1e115: 0x6d217c20, 0x1e116: 0x6ce98c20, 0x1e117: 0x6d0dc420, + 0x1e118: 0x6c5adc20, 0x1e119: 0x6c074420, 0x1e11a: 0x6c1ee220, 0x1e11b: 0x6c93aa20, + 0x1e11c: 0x6cadaa20, 0x1e11d: 0x6c27ee20, 0x1e11e: 0x6d27f420, 0x1e11f: 0x6cddf820, + 0x1e120: 0x6c465c20, 0x1e121: 0x6c265c20, 0x1e122: 0x6c57ee20, 0x1e123: 0x6cc6aa20, + 0x1e124: 0x6d262e20, 0x1e125: 0x6cc82620, 0x1e126: 0x6ca3d420, 0x1e127: 0x6c6f3220, + 0x1e128: 0x6cdd8620, 0x1e129: 0x6c04a220, 0x1e12a: 0x6cea0a20, 0x1e12b: 0x6c1bbe20, + 0x1e12c: 0x6cca8a20, 0x1e12d: 0x6ca7ae20, 0x1e12e: 0x6d1bec20, 0x1e12f: 0x6c6bfa20, + 0x1e130: 0x6cb91e20, 0x1e131: 0x6c57f420, 0x1e132: 0x6c7aa820, 0x1e133: 0x6c884220, + 0x1e134: 0x6c7fae20, 0x1e135: 0x6c843420, 0x1e136: 0x6d30de20, 0x1e137: 0x6cd1fc20, + 0x1e138: 0x6c93b620, 0x1e139: 0x6d18b820, 0x1e13a: 0x6c2e5e20, 0x1e13b: 0x6d023220, + 0x1e13c: 0x6cfae020, 0x1e13d: 0x6cf0ea20, 0x1e13e: 0x6c0c7e20, 0x1e13f: 0x6c129620, + // Block 0x785, offset 0x1e140 + 0x1e140: 0x6c5f4620, 0x1e141: 0x6cbb4c20, 0x1e142: 0x6ccbb020, 0x1e143: 0x6c05bc20, + 0x1e144: 0x6cfd8c20, 0x1e145: 0x6c0ae420, 0x1e146: 0x6c3f0c20, 0x1e147: 0x6c65e620, + 0x1e148: 0x6d3bea20, 0x1e149: 0x6c65e820, 0x1e14a: 0x6c257020, 0x1e14b: 0x6c60c820, + 0x1e14c: 0x6c280620, 0x1e14d: 0x6d28d020, 0x1e14e: 0x6c38cc20, 0x1e14f: 0x6c0f7e20, + 0x1e150: 0x6cfe5a20, 0x1e151: 0x6d030420, 0x1e152: 0x6c0cf820, 0x1e153: 0x6cc52e20, + 0x1e154: 0x6c97ca20, 0x1e155: 0x6c7fc620, 0x1e156: 0x6c02b220, 0x1e157: 0x6d2b1620, + 0x1e158: 0x6c4b8e20, 0x1e159: 0x6c12bc20, 0x1e15a: 0x6cdc9220, 0x1e15b: 0x6ca9d620, + 0x1e15c: 0x6c14dc20, 0x1e15d: 0x6c88d220, 0x1e15e: 0x6c0aac20, 0x1e15f: 0x6c6c6a20, + 0x1e160: 0x6c291620, 0x1e161: 0x6cd58220, 0x1e162: 0x6ce08020, 0x1e163: 0x6c0aae20, + 0x1e164: 0x6c7fd820, 0x1e165: 0x6cb46e20, 0x1e166: 0x6cc7e020, 0x1e167: 0x6d355e20, + 0x1e168: 0x6c32ec20, 0x1e169: 0x6cd58620, 0x1e16a: 0x6cec4220, 0x1e16b: 0x6cd40020, + 0x1e16c: 0x6c042c20, 0x1e16d: 0x6d012020, 0x1e16e: 0x6c0fbe20, 0x1e16f: 0x6c194220, + 0x1e170: 0x6c7f7c20, 0x1e171: 0x6c8fee20, 0x1e172: 0x6cf7c420, 0x1e173: 0x6cfb0c20, + 0x1e174: 0x6c800220, 0x1e175: 0x6d30e220, 0x1e176: 0x6c27aa20, 0x1e177: 0x6c72d820, + 0x1e178: 0x6d29c620, 0x1e179: 0x6cd21c20, 0x1e17a: 0x6c663820, 0x1e17b: 0x6cacc620, + 0x1e17c: 0x6d196820, 0x1e17d: 0x6c809c20, 0x1e17e: 0x6d0b7020, 0x1e17f: 0x6cf94020, + // Block 0x786, offset 0x1e180 + 0x1e180: 0x6cf57420, 0x1e181: 0x6d11f820, 0x1e182: 0x6c3cc820, 0x1e183: 0x6cdfe620, + 0x1e184: 0x6c40b420, 0x1e185: 0x6c3d0620, 0x1e186: 0x6c407e20, 0x1e187: 0x6c03c820, + 0x1e188: 0x6c519620, 0x1e189: 0x6c5fa420, 0x1e18a: 0x6c5fb420, 0x1e18b: 0x6c665220, + 0x1e18c: 0x6c490820, 0x1e18d: 0x6c0b9020, 0x1e18e: 0x6d0e5620, 0x1e18f: 0x6c4a6220, + 0x1e190: 0x6c743020, 0x1e191: 0x6cb13a20, 0x1e192: 0x6c997620, 0x1e193: 0x6c9d4020, + 0x1e194: 0x6c9d4220, 0x1e195: 0x6c9ed620, 0x1e196: 0x6cd36c20, 0x1e197: 0x6cd8c420, + 0x1e198: 0x6c14cc20, 0x1e199: 0x6c954a20, 0x1e19a: 0x6c745a20, 0x1e19b: 0x6c9d6020, + 0x1e19c: 0x6ce5da20, 0x1e19d: 0x6c882620, 0x1e19e: 0x6d121820, 0x1e19f: 0x6d369c20, + 0x1e1a0: 0x6c757a20, 0x1e1a1: 0x6cf79620, 0x1e1a2: 0x6ccd5a20, 0x1e1a3: 0x6ceeb620, + 0x1e1a4: 0x6cf8d220, 0x1e1a5: 0x6ce51220, 0x1e1a6: 0x6d21a620, 0x1e1a7: 0x6c803e20, + 0x1e1a8: 0x6c36aa20, 0x1e1a9: 0x6c322a20, 0x1e1aa: 0x6cbd3e20, 0x1e1ab: 0x6cad2220, + 0x1e1ac: 0x6c62a220, 0x1e1ad: 0x6ca01e20, 0x1e1ae: 0x6d1caa20, 0x1e1af: 0x6c46dc20, + 0x1e1b0: 0x6cc15020, 0x1e1b1: 0x6d2e8c20, 0x1e1b2: 0x6c6d6c20, 0x1e1b3: 0x6c492c20, + 0x1e1b4: 0x6c2abc20, 0x1e1b5: 0x6c670420, 0x1e1b6: 0x6c956420, 0x1e1b7: 0x6cc28220, + 0x1e1b8: 0x6c652620, 0x1e1b9: 0x6cef6220, 0x1e1ba: 0x6c750220, 0x1e1bb: 0x6cc15c20, + 0x1e1bc: 0x6c956a20, 0x1e1bd: 0x6c805420, 0x1e1be: 0x6cd08a20, 0x1e1bf: 0x6c2bba20, + // Block 0x787, offset 0x1e1c0 + 0x1e1c0: 0x6c494420, 0x1e1c1: 0x6c664e20, 0x1e1c2: 0x6c490220, 0x1e1c3: 0x6d0e3e20, + 0x1e1c4: 0x6c4a3a20, 0x1e1c5: 0x6c9d2a20, 0x1e1c6: 0x6cd32020, 0x1e1c7: 0x6c14be20, + 0x1e1c8: 0x6c802020, 0x1e1c9: 0x6c740a20, 0x1e1ca: 0x6c61d620, 0x1e1cb: 0x6cf77e20, + 0x1e1cc: 0x6c2b6e20, 0x1e1cd: 0x6ce4fc20, 0x1e1ce: 0x6d216820, 0x1e1cf: 0x6c46cc20, + 0x1e1d0: 0x6c6d4620, 0x1e1d1: 0x6cc27220, 0x1e1d2: 0x6c68c620, 0x1e1d3: 0x6cc01820, + 0x1e1d4: 0x6c6c3a20, 0x1e1d5: 0x6c241220, 0x1e1d6: 0x6c743220, 0x1e1d7: 0x6d360c20, + 0x1e1d8: 0x6c17bc20, 0x1e1d9: 0x6c600a20, 0x1e1da: 0x6c471220, 0x1e1db: 0x6c289020, + 0x1e1dc: 0x6d3e5820, 0x1e1dd: 0x6c2bf820, 0x1e1de: 0x6cce0420, 0x1e1df: 0x6c57a020, + 0x1e1e0: 0x6cc30220, 0x1e1e1: 0x6c440c20, 0x1e1e2: 0x6cd3a020, 0x1e1e3: 0x6c6b9820, + 0x1e1e4: 0x6c4b0a20, 0x1e1e5: 0x6c459820, 0x1e1e6: 0x6c1f5c20, 0x1e1e7: 0x6c6b9a20, + 0x1e1e8: 0x6c5d3a20, 0x1e1e9: 0x6cc08420, 0x1e1ea: 0x6d039020, 0x1e1eb: 0x6cdaf220, + 0x1e1ec: 0x6ca60220, 0x1e1ed: 0x6c5f1e20, 0x1e1ee: 0x6c92b420, 0x1e1ef: 0x6d36c020, + 0x1e1f0: 0x6d2bfa20, 0x1e1f1: 0x6c0a5e20, 0x1e1f2: 0x6d03a620, 0x1e1f3: 0x6c55cc20, + 0x1e1f4: 0x6cce2220, 0x1e1f5: 0x6c45be20, 0x1e1f6: 0x6d374820, 0x1e1f7: 0x6d092820, + 0x1e1f8: 0x6c1f8a20, 0x1e1f9: 0x6cf71a20, 0x1e1fa: 0x6d159420, 0x1e1fb: 0x6c877e20, + 0x1e1fc: 0x6c750e20, 0x1e1fd: 0x6cf75020, 0x1e1fe: 0x6d0f0c20, 0x1e1ff: 0x6cf75e20, + // Block 0x788, offset 0x1e200 + 0x1e200: 0x6d0c5c20, 0x1e201: 0x6d0f3620, 0x1e202: 0x6c2f9a20, 0x1e203: 0x6c3fc620, + 0x1e204: 0x6cc01a20, 0x1e205: 0x6cc01c20, 0x1e206: 0x6c698a20, 0x1e207: 0x6c529c20, + 0x1e208: 0x6c61b820, 0x1e209: 0x6c384c20, 0x1e20a: 0x6d0a7e20, 0x1e20b: 0x6c2e1420, + 0x1e20c: 0x6c53b820, 0x1e20d: 0x6c149820, 0x1e20e: 0x6ce25c20, 0x1e20f: 0x6d058620, + 0x1e210: 0x6c6aaa20, 0x1e211: 0x6d14dc20, 0x1e212: 0x6cc5e020, 0x1e213: 0x6d0ac020, + 0x1e214: 0x6d1a4e20, 0x1e215: 0x6ccd7e20, 0x1e216: 0x6cb77020, 0x1e217: 0x6ceabc20, + 0x1e218: 0x6c61d820, 0x1e219: 0x6d0a8020, 0x1e21a: 0x6d1a5020, 0x1e21b: 0x6c356020, + 0x1e21c: 0x6c3b2c20, 0x1e21d: 0x6d0ba420, 0x1e21e: 0x6d109e20, 0x1e21f: 0x6cd98c20, + 0x1e220: 0x6cd06020, 0x1e221: 0x6d1a5e20, 0x1e222: 0x6d02ce20, 0x1e223: 0x6c743420, + 0x1e224: 0x6cff8620, 0x1e225: 0x6ca54e20, 0x1e226: 0x6c18c020, 0x1e227: 0x6d1f2e20, + 0x1e228: 0x6d352220, 0x1e229: 0x6d046820, 0x1e22a: 0x6c39d620, 0x1e22b: 0x6d033220, + 0x1e22c: 0x6c174020, 0x1e22d: 0x6ccf4420, 0x1e22e: 0x6cfaa220, 0x1e22f: 0x6cc94e20, + 0x1e230: 0x6d3ce220, 0x1e231: 0x6d063c20, 0x1e232: 0x6d177820, 0x1e233: 0x6d177a20, + 0x1e234: 0x6cdb7a20, 0x1e235: 0x6c1ab220, 0x1e236: 0x6c509e20, 0x1e237: 0x6ccff620, + 0x1e238: 0x6c512c20, 0x1e239: 0x6d06e620, 0x1e23a: 0x6d31de20, 0x1e23b: 0x6d3afa20, + 0x1e23c: 0x6d334e20, 0x1e23d: 0x6c46a820, 0x1e23e: 0x6d3e5c20, 0x1e23f: 0x6d3f1c20, + // Block 0x789, offset 0x1e240 + 0x1e240: 0x6d2d7820, 0x1e241: 0x6c479420, 0x1e242: 0x6c3ffe20, 0x1e243: 0x6c65a020, + 0x1e244: 0x6c2eb420, 0x1e245: 0x6c8d0a20, 0x1e246: 0x6c2bfa20, 0x1e247: 0x6d104e20, + 0x1e248: 0x6c861c20, 0x1e249: 0x6ca4b020, 0x1e24a: 0x6cacb820, 0x1e24b: 0x6d392e20, + 0x1e24c: 0x6c422220, 0x1e24d: 0x6d17c420, 0x1e24e: 0x6c724420, 0x1e24f: 0x6d120c20, + 0x1e250: 0x6d2cc820, 0x1e251: 0x6d150020, 0x1e252: 0x6d150220, 0x1e253: 0x6cc24a20, + 0x1e254: 0x6d2fb620, 0x1e255: 0x6cb2b220, 0x1e256: 0x6c09ac20, 0x1e257: 0x6d049620, + 0x1e258: 0x6cc11620, 0x1e259: 0x6c037c20, 0x1e25a: 0x6c26aa20, 0x1e25b: 0x6d411e20, + 0x1e25c: 0x6ce1cc20, 0x1e25d: 0x6d3a7220, 0x1e25e: 0x6c224820, 0x1e25f: 0x6d305e20, + 0x1e260: 0x6d1e3e20, 0x1e261: 0x6d064620, 0x1e262: 0x6d0a2020, 0x1e263: 0x6d180c20, + 0x1e264: 0x6c5a5620, 0x1e265: 0x6c514420, 0x1e266: 0x6cd3a220, 0x1e267: 0x6c13f020, + 0x1e268: 0x6cfff820, 0x1e269: 0x6cd1d820, 0x1e26a: 0x6c523e20, 0x1e26b: 0x6c144420, + 0x1e26c: 0x6c46ba20, 0x1e26d: 0x6c4b0c20, 0x1e26e: 0x6cc30420, 0x1e26f: 0x6c5bea20, + 0x1e270: 0x6c6afc20, 0x1e271: 0x6c57a220, 0x1e272: 0x6c40fc20, 0x1e273: 0x6cfdca20, + 0x1e274: 0x6ceea420, 0x1e275: 0x6ccffc20, 0x1e276: 0x6d393420, 0x1e277: 0x6ce75c20, + 0x1e278: 0x6c9c6220, 0x1e279: 0x6d2d8420, 0x1e27a: 0x6ca04620, 0x1e27b: 0x6c366420, + 0x1e27c: 0x6c5ace20, 0x1e27d: 0x6d0cb220, 0x1e27e: 0x6d046e20, 0x1e27f: 0x6c48bc20, + // Block 0x78a, offset 0x1e280 + 0x1e280: 0x6c37d220, 0x1e281: 0x6c0e2420, 0x1e282: 0x6ce5c420, 0x1e283: 0x6d152020, + 0x1e284: 0x6c82ca20, 0x1e285: 0x6d39b420, 0x1e286: 0x6c7ba420, 0x1e287: 0x6c7ac620, + 0x1e288: 0x6cf3dc20, 0x1e289: 0x6d238220, 0x1e28a: 0x6ce2a420, 0x1e28b: 0x6c625220, + 0x1e28c: 0x6d36a020, 0x1e28d: 0x6cc60220, 0x1e28e: 0x6c244e20, 0x1e28f: 0x6c810c20, + 0x1e290: 0x6c357a20, 0x1e291: 0x6c7bc620, 0x1e292: 0x6c370c20, 0x1e293: 0x6cd3b820, + 0x1e294: 0x6ce6d820, 0x1e295: 0x6c289620, 0x1e296: 0x6c074620, 0x1e297: 0x6c151020, + 0x1e298: 0x6d205620, 0x1e299: 0x6c794a20, 0x1e29a: 0x6cbc4e20, 0x1e29b: 0x6cbd3820, + 0x1e29c: 0x6cd65020, 0x1e29d: 0x6c014220, 0x1e29e: 0x6d227c20, 0x1e29f: 0x6cfffe20, + 0x1e2a0: 0x6c1a2220, 0x1e2a1: 0x6c6bf420, 0x1e2a2: 0x6cfcee20, 0x1e2a3: 0x6cf37a20, + 0x1e2a4: 0x6cf51020, 0x1e2a5: 0x6c435620, 0x1e2a6: 0x6cd99a20, 0x1e2a7: 0x6c101a20, + 0x1e2a8: 0x6c5c0420, 0x1e2a9: 0x6c6e9820, 0x1e2aa: 0x6cd76a20, 0x1e2ab: 0x6d325220, + 0x1e2ac: 0x6cd76c20, 0x1e2ad: 0x6c31ae20, 0x1e2ae: 0x6c57e420, 0x1e2af: 0x6c172420, + 0x1e2b0: 0x6cd6fe20, 0x1e2b1: 0x6c6b2820, 0x1e2b2: 0x6c78d420, 0x1e2b3: 0x6cc13a20, + 0x1e2b4: 0x6c23ac20, 0x1e2b5: 0x6cff9820, 0x1e2b6: 0x6cdc6420, 0x1e2b7: 0x6cee3620, + 0x1e2b8: 0x6cfb8620, 0x1e2b9: 0x6c3a6c20, 0x1e2ba: 0x6c1ad220, 0x1e2bb: 0x6cde9220, + 0x1e2bc: 0x6d186620, 0x1e2bd: 0x6ca6c220, 0x1e2be: 0x6d1a9a20, 0x1e2bf: 0x6c2e3820, + // Block 0x78b, offset 0x1e2c0 + 0x1e2c0: 0x6cb06820, 0x1e2c1: 0x6d3d8c20, 0x1e2c2: 0x6c15de20, 0x1e2c3: 0x6c188420, + 0x1e2c4: 0x6d3cd620, 0x1e2c5: 0x6c626a20, 0x1e2c6: 0x6cb52820, 0x1e2c7: 0x6ce00820, + 0x1e2c8: 0x6d3ca420, 0x1e2c9: 0x6cf00c20, 0x1e2ca: 0x6c714c20, 0x1e2cb: 0x6cbeb220, + 0x1e2cc: 0x6c303c20, 0x1e2cd: 0x6d335420, 0x1e2ce: 0x6d2af220, 0x1e2cf: 0x6d406020, + 0x1e2d0: 0x6cb91620, 0x1e2d1: 0x6d3d8e20, 0x1e2d2: 0x6c89c820, 0x1e2d3: 0x6c66c020, + 0x1e2d4: 0x6c1f6e20, 0x1e2d5: 0x6c4fe420, 0x1e2d6: 0x6c952620, 0x1e2d7: 0x6cd06e20, + 0x1e2d8: 0x6c0c7820, 0x1e2d9: 0x6c581220, 0x1e2da: 0x6cb12620, 0x1e2db: 0x6d219420, + 0x1e2dc: 0x6c2eea20, 0x1e2dd: 0x6d05e820, 0x1e2de: 0x6cb14220, 0x1e2df: 0x6cd3de20, + 0x1e2e0: 0x6d07d220, 0x1e2e1: 0x6cd3e020, 0x1e2e2: 0x6c5d4220, 0x1e2e3: 0x6c57c020, + 0x1e2e4: 0x6c36ac20, 0x1e2e5: 0x6d384020, 0x1e2e6: 0x6c2c9c20, 0x1e2e7: 0x6d00f220, + 0x1e2e8: 0x6c3ef620, 0x1e2e9: 0x6cb49420, 0x1e2ea: 0x6ce69020, 0x1e2eb: 0x6c66d620, + 0x1e2ec: 0x6cb71e20, 0x1e2ed: 0x6d23f620, 0x1e2ee: 0x6d3e9020, 0x1e2ef: 0x6d3b9420, + 0x1e2f0: 0x6cf81420, 0x1e2f1: 0x6c5c4220, 0x1e2f2: 0x6d1a0220, 0x1e2f3: 0x6c015020, + 0x1e2f4: 0x6cfb9e20, 0x1e2f5: 0x6ca40e20, 0x1e2f6: 0x6c18ec20, 0x1e2f7: 0x6c3cce20, + 0x1e2f8: 0x6d39c620, 0x1e2f9: 0x6d0fd820, 0x1e2fa: 0x6d0ec420, 0x1e2fb: 0x6c5a0020, + 0x1e2fc: 0x6d07d420, 0x1e2fd: 0x6c443a20, 0x1e2fe: 0x6cab0e20, 0x1e2ff: 0x6cb53220, + // Block 0x78c, offset 0x1e300 + 0x1e300: 0x6ca1e820, 0x1e301: 0x6d134620, 0x1e302: 0x6cf0d620, 0x1e303: 0x6d044620, + 0x1e304: 0x6ce2ba20, 0x1e305: 0x6d38b620, 0x1e306: 0x6ccdc020, 0x1e307: 0x6c65ec20, + 0x1e308: 0x6cb33a20, 0x1e309: 0x6c7d2220, 0x1e30a: 0x6c5a6420, 0x1e30b: 0x6c5e0c20, + 0x1e30c: 0x6c43b620, 0x1e30d: 0x6d1cac20, 0x1e30e: 0x6c9c7420, 0x1e30f: 0x6cffc020, + 0x1e310: 0x6c9d9820, 0x1e311: 0x6cf81a20, 0x1e312: 0x6cbae220, 0x1e313: 0x6c188c20, + 0x1e314: 0x6d097220, 0x1e315: 0x6ce38820, 0x1e316: 0x6cdb4a20, 0x1e317: 0x6c059420, + 0x1e318: 0x6c1b5a20, 0x1e319: 0x6cb92820, 0x1e31a: 0x6cd3ea20, 0x1e31b: 0x6c67c820, + 0x1e31c: 0x6d25b620, 0x1e31d: 0x6d023620, 0x1e31e: 0x6c51f620, 0x1e31f: 0x6ce1f220, + 0x1e320: 0x6d115020, 0x1e321: 0x6d115220, 0x1e322: 0x6d378020, 0x1e323: 0x6d21c820, + 0x1e324: 0x6c0c4020, 0x1e325: 0x6c23e020, 0x1e326: 0x6cbee620, 0x1e327: 0x6c846420, + 0x1e328: 0x6ca08020, 0x1e329: 0x6ca17620, 0x1e32a: 0x6cce2420, 0x1e32b: 0x6d30b020, + 0x1e32c: 0x6ca05420, 0x1e32d: 0x6c660420, 0x1e32e: 0x6d2b1820, 0x1e32f: 0x6c6a3a20, + 0x1e330: 0x6c886e20, 0x1e331: 0x6c90c620, 0x1e332: 0x6c121020, 0x1e333: 0x6cab5e20, + 0x1e334: 0x6c4c0620, 0x1e335: 0x6cf7ae20, 0x1e336: 0x6d3dc020, 0x1e337: 0x6c027a20, + 0x1e338: 0x6c027c20, 0x1e339: 0x6c6cc220, 0x1e33a: 0x6d30b220, 0x1e33b: 0x6d158620, + 0x1e33c: 0x6c551220, 0x1e33d: 0x6c680e20, 0x1e33e: 0x6c978e20, 0x1e33f: 0x6c178a20, + // Block 0x78d, offset 0x1e340 + 0x1e340: 0x6c4f2620, 0x1e341: 0x6c576020, 0x1e342: 0x6c160020, 0x1e343: 0x6d060020, + 0x1e344: 0x6d2ba420, 0x1e345: 0x6ccb9220, 0x1e346: 0x6cf71c20, 0x1e347: 0x6d2c0420, + 0x1e348: 0x6c337a20, 0x1e349: 0x6d336c20, 0x1e34a: 0x6ca4ce20, 0x1e34b: 0x6c7fda20, + 0x1e34c: 0x6c359820, 0x1e34d: 0x6d1c2620, 0x1e34e: 0x6c74ee20, 0x1e34f: 0x6c5f8220, + 0x1e350: 0x6d421220, 0x1e351: 0x6c696020, 0x1e352: 0x6c0ffc20, 0x1e353: 0x6c5c8620, + 0x1e354: 0x6d3bf420, 0x1e355: 0x6cf40820, 0x1e356: 0x6d2b7a20, 0x1e357: 0x6d2c6220, + 0x1e358: 0x6cd42220, 0x1e359: 0x6cbc6c20, 0x1e35a: 0x6ce03620, 0x1e35b: 0x6d2b7c20, + 0x1e35c: 0x6cb4a020, 0x1e35d: 0x6cd12820, 0x1e35e: 0x6d07ee20, 0x1e35f: 0x6d2a9820, + 0x1e360: 0x6ce04020, 0x1e361: 0x6c293620, 0x1e362: 0x6cdcac20, 0x1e363: 0x6cfc4e20, + 0x1e364: 0x6c5f8c20, 0x1e365: 0x6c69d820, 0x1e366: 0x6c6e3c20, 0x1e367: 0x6d2e9820, + 0x1e368: 0x6ca45c20, 0x1e369: 0x6d143220, 0x1e36a: 0x6c010420, 0x1e36b: 0x6d2dbc20, + 0x1e36c: 0x6cb0d820, 0x1e36d: 0x6c5b7e20, 0x1e36e: 0x6c57d420, 0x1e36f: 0x6d193220, + 0x1e370: 0x6d193420, 0x1e371: 0x6ccdd620, 0x1e372: 0x6cc51c20, 0x1e373: 0x6caa3220, + 0x1e374: 0x6cba3220, 0x1e375: 0x6d3cbe20, 0x1e376: 0x6cdee420, 0x1e377: 0x6c56e020, + 0x1e378: 0x6d38c420, 0x1e379: 0x6c500420, 0x1e37a: 0x6c010620, 0x1e37b: 0x6d1c3420, + 0x1e37c: 0x6c671a20, 0x1e37d: 0x6d246620, 0x1e37e: 0x6c662c20, 0x1e37f: 0x6c5c9c20, + // Block 0x78e, offset 0x1e380 + 0x1e380: 0x6c31f020, 0x1e381: 0x6d30bc20, 0x1e382: 0x6d08d020, 0x1e383: 0x6d29bc20, + 0x1e384: 0x6c830c20, 0x1e385: 0x6cd08c20, 0x1e386: 0x6cf12220, 0x1e387: 0x6c161a20, + 0x1e388: 0x6c879020, 0x1e389: 0x6d159a20, 0x1e38a: 0x6c0bdc20, 0x1e38b: 0x6d30c820, + 0x1e38c: 0x6d0f0e20, 0x1e38d: 0x6c36f220, 0x1e38e: 0x6c1e0e20, 0x1e38f: 0x6cf12a20, + 0x1e390: 0x6c1e1020, 0x1e391: 0x6d125620, 0x1e392: 0x6c157c20, 0x1e393: 0x6cc51e20, + 0x1e394: 0x6d1b2c20, 0x1e395: 0x6c801020, 0x1e396: 0x6c194820, 0x1e397: 0x6d013820, + 0x1e398: 0x6ca8cc20, 0x1e399: 0x6c584c20, 0x1e39a: 0x6d29ca20, 0x1e39b: 0x6d197c20, + 0x1e39c: 0x6c294a20, 0x1e39d: 0x6d2dda20, 0x1e39e: 0x6d0f2a20, 0x1e39f: 0x6c321020, + 0x1e3a0: 0x6d0c5020, 0x1e3a1: 0x6c616e20, 0x1e3a2: 0x6c2f8c20, 0x1e3a3: 0x6c3fa220, + 0x1e3a4: 0x6cc5a420, 0x1e3a5: 0x6c5e6620, 0x1e3a6: 0x6c6a5c20, 0x1e3a7: 0x6c53b420, + 0x1e3a8: 0x6ce25820, 0x1e3a9: 0x6cc51820, 0x1e3aa: 0x6ccd6620, 0x1e3ab: 0x6cb72820, + 0x1e3ac: 0x6cea9420, 0x1e3ad: 0x6d0abe20, 0x1e3ae: 0x6d164e20, 0x1e3af: 0x6d0a6220, + 0x1e3b0: 0x6c617020, 0x1e3b1: 0x6cc5aa20, 0x1e3b2: 0x6c679c20, 0x1e3b3: 0x6c5b8c20, + 0x1e3b4: 0x6cab2c20, 0x1e3b5: 0x6c71f420, 0x1e3b6: 0x6d0b7220, 0x1e3b7: 0x6ca54220, + 0x1e3b8: 0x6d062420, 0x1e3b9: 0x6c354620, 0x1e3ba: 0x6c952020, 0x1e3bb: 0x6d045220, + 0x1e3bc: 0x6cd97c20, 0x1e3bd: 0x6c3cc420, 0x1e3be: 0x6ccf3220, 0x1e3bf: 0x6c39b820, + // Block 0x78f, offset 0x1e3c0 + 0x1e3c0: 0x6c73d620, 0x1e3c1: 0x6d333a20, 0x1e3c2: 0x6c475a20, 0x1e3c3: 0x6c508a20, + 0x1e3c4: 0x6cb27020, 0x1e3c5: 0x6d410820, 0x1e3c6: 0x6cd40e20, 0x1e3c7: 0x6d048620, + 0x1e3c8: 0x6d2caa20, 0x1e3c9: 0x6cdb7820, 0x1e3ca: 0x6d31b420, 0x1e3cb: 0x6c2bce20, + 0x1e3cc: 0x6d385420, 0x1e3cd: 0x6c221e20, 0x1e3ce: 0x6cc0d420, 0x1e3cf: 0x6d2f9820, + 0x1e3d0: 0x6c092020, 0x1e3d1: 0x6d169c20, 0x1e3d2: 0x6d146620, 0x1e3d3: 0x6c7b8620, + 0x1e3d4: 0x6c82b620, 0x1e3d5: 0x6cd32220, 0x1e3d6: 0x6c48aa20, 0x1e3d7: 0x6cd19c20, + 0x1e3d8: 0x6c5fe420, 0x1e3d9: 0x6c5a8c20, 0x1e3da: 0x6c19c020, 0x1e3db: 0x6d398420, + 0x1e3dc: 0x6ccfb420, 0x1e3dd: 0x6c578620, 0x1e3de: 0x6c286c20, 0x1e3df: 0x6c469620, + 0x1e3e0: 0x6cc2ba20, 0x1e3e1: 0x6c4aca20, 0x1e3e2: 0x6d09e020, 0x1e3e3: 0x6d16d220, + 0x1e3e4: 0x6d328e20, 0x1e3e5: 0x6c40de20, 0x1e3e6: 0x6cfdb020, 0x1e3e7: 0x6c143220, + 0x1e3e8: 0x6c5d1a20, 0x1e3e9: 0x6d062e20, 0x1e3ea: 0x6d386220, 0x1e3eb: 0x6c6bd420, + 0x1e3ec: 0x6cf35c20, 0x1e3ed: 0x6d223020, 0x1e3ee: 0x6cbc3220, 0x1e3ef: 0x6cf4ce20, + 0x1e3f0: 0x6c433c20, 0x1e3f1: 0x6d203220, 0x1e3f2: 0x6c5ba420, 0x1e3f3: 0x6c7bbc20, + 0x1e3f4: 0x6cd76620, 0x1e3f5: 0x6cd98220, 0x1e3f6: 0x6c370a20, 0x1e3f7: 0x6cbea220, + 0x1e3f8: 0x6d399620, 0x1e3f9: 0x6d404a20, 0x1e3fa: 0x6caae620, 0x1e3fb: 0x6c319420, + 0x1e3fc: 0x6d3d3e20, 0x1e3fd: 0x6c3a4e20, 0x1e3fe: 0x6c789c20, 0x1e3ff: 0x6cefa620, + // Block 0x790, offset 0x1e400 + 0x1e400: 0x6d20f820, 0x1e401: 0x6cd6fa20, 0x1e402: 0x6cd05420, 0x1e403: 0x6c2e1620, + 0x1e404: 0x6c15a220, 0x1e405: 0x6c89b020, 0x1e406: 0x6d3cd020, 0x1e407: 0x6cdc3220, + 0x1e408: 0x6cdfd620, 0x1e409: 0x6cd05620, 0x1e40a: 0x6d174820, 0x1e40b: 0x6ca1d020, + 0x1e40c: 0x6c18c220, 0x1e40d: 0x6c2e9620, 0x1e40e: 0x6c5a5220, 0x1e40f: 0x6c668220, + 0x1e410: 0x6d00a620, 0x1e411: 0x6d095a20, 0x1e412: 0x6d12ea20, 0x1e413: 0x6cf08820, + 0x1e414: 0x6c361a20, 0x1e415: 0x6d232420, 0x1e416: 0x6d078e20, 0x1e417: 0x6c14f020, + 0x1e418: 0x6d3e2c20, 0x1e419: 0x6c012c20, 0x1e41a: 0x6d0e6620, 0x1e41b: 0x6c2c5020, + 0x1e41c: 0x6c9c4e20, 0x1e41d: 0x6cb13c20, 0x1e41e: 0x6d059020, 0x1e41f: 0x6ca05820, + 0x1e420: 0x6c292e20, 0x1e421: 0x6cdab820, 0x1e422: 0x6d01b620, 0x1e423: 0x6d10fe20, + 0x1e424: 0x6c057420, 0x1e425: 0x6cd38c20, 0x1e426: 0x6cb8e420, 0x1e427: 0x6c9d4c20, + 0x1e428: 0x6c6c9820, 0x1e429: 0x6c976820, 0x1e42a: 0x6d306620, 0x1e42b: 0x6c65b620, + 0x1e42c: 0x6ca05220, 0x1e42d: 0x6cdff420, 0x1e42e: 0x6d2b7820, 0x1e42f: 0x6cbbe420, + 0x1e430: 0x6c7fa820, 0x1e431: 0x6cb49020, 0x1e432: 0x6c748620, 0x1e433: 0x6d0ea820, + 0x1e434: 0x6cba1e20, 0x1e435: 0x6d2d9020, 0x1e436: 0x6c193c20, 0x1e437: 0x6c475c20, + 0x1e438: 0x6cb8cc20, 0x1e439: 0x6c534020, 0x1e43a: 0x6cf96420, 0x1e43b: 0x6c602420, + 0x1e43c: 0x6c536820, 0x1e43d: 0x6c4db220, 0x1e43e: 0x6c52c020, 0x1e43f: 0x6cf6f420, + // Block 0x791, offset 0x1e440 + 0x1e440: 0x6cf6f620, 0x1e441: 0x6c5d6220, 0x1e442: 0x6c8a3e20, 0x1e443: 0x6c4e6a20, + 0x1e444: 0x6c31f220, 0x1e445: 0x6c900420, 0x1e446: 0x6c30fa20, 0x1e447: 0x6c675a20, + 0x1e448: 0x6cb6e820, 0x1e449: 0x6cd37220, 0x1e44a: 0x6c852420, 0x1e44b: 0x6c2a9e20, + 0x1e44c: 0x6cec9a20, 0x1e44d: 0x6c088a20, 0x1e44e: 0x6cd60820, 0x1e44f: 0x6cfd1c20, + 0x1e450: 0x6c3c7020, 0x1e451: 0x6d375a20, 0x1e452: 0x6d377620, 0x1e453: 0x6d0f2c20, + 0x1e454: 0x6d0f3020, 0x1e455: 0x6cd2b020, 0x1e456: 0x6c1f1620, 0x1e457: 0x6c5aae20, + 0x1e458: 0x6cea4e20, 0x1e459: 0x6d177c20, 0x1e45a: 0x6cea5020, 0x1e45b: 0x6d177e20, + 0x1e45c: 0x6c649020, 0x1e45d: 0x6c034a20, 0x1e45e: 0x6c547220, 0x1e45f: 0x6c364820, + 0x1e460: 0x6c1e8420, 0x1e461: 0x6cfe3020, 0x1e462: 0x6c593e20, 0x1e463: 0x6c64c220, + 0x1e464: 0x6c790420, 0x1e465: 0x6c40fe20, 0x1e466: 0x6c725a20, 0x1e467: 0x6c3d8a20, + 0x1e468: 0x6cf68420, 0x1e469: 0x6c0d4820, 0x1e46a: 0x6c4fd620, 0x1e46b: 0x6d23ce20, + 0x1e46c: 0x6d39c820, 0x1e46d: 0x6c638420, 0x1e46e: 0x6c3b9a20, 0x1e46f: 0x6cf6f820, + 0x1e470: 0x6c0f8020, 0x1e471: 0x6cf16620, 0x1e472: 0x6c58aa20, 0x1e473: 0x6c0d5820, + 0x1e474: 0x6c2ba620, 0x1e475: 0x6d3fce20, 0x1e476: 0x6c3ba620, 0x1e477: 0x6d191c20, + 0x1e478: 0x6d357c20, 0x1e479: 0x6c064020, 0x1e47a: 0x6c147820, 0x1e47b: 0x6c01b420, + 0x1e47c: 0x6cafe620, 0x1e47d: 0x6ca33c20, 0x1e47e: 0x6caf6620, 0x1e47f: 0x6c468a20, + // Block 0x792, offset 0x1e480 + 0x1e480: 0x6ca34620, 0x1e481: 0x6d204820, 0x1e482: 0x6c2dcc20, 0x1e483: 0x6ca11e20, + 0x1e484: 0x6cd8ce20, 0x1e485: 0x6d04dc20, 0x1e486: 0x6c588420, 0x1e487: 0x6c7d7220, + 0x1e488: 0x6c514820, 0x1e489: 0x6c4fce20, 0x1e48a: 0x6ca13220, 0x1e48b: 0x6c4ef020, + 0x1e48c: 0x6c99a420, 0x1e48d: 0x6c842220, 0x1e48e: 0x6ca60420, 0x1e48f: 0x6c08f420, + 0x1e490: 0x6d229620, 0x1e491: 0x6c638620, 0x1e492: 0x6ce93a20, 0x1e493: 0x6c98be20, + 0x1e494: 0x6cb02620, 0x1e495: 0x6cf6fa20, 0x1e496: 0x6c36b820, 0x1e497: 0x6c72ae20, + 0x1e498: 0x6ca17820, 0x1e499: 0x6c1e6a20, 0x1e49a: 0x6ce03820, 0x1e49b: 0x6c584e20, + 0x1e49c: 0x6c753620, 0x1e49d: 0x6c06dc20, 0x1e49e: 0x6d313220, 0x1e49f: 0x6d254a20, + 0x1e4a0: 0x6c3fc820, 0x1e4a1: 0x6c110e20, 0x1e4a2: 0x6c461420, 0x1e4a3: 0x6ce27220, + 0x1e4a4: 0x6d14de20, 0x1e4a5: 0x6c4f7820, 0x1e4a6: 0x6ced8020, 0x1e4a7: 0x6cb20a20, + 0x1e4a8: 0x6c5dc820, 0x1e4a9: 0x6c395020, 0x1e4aa: 0x6cdfa620, 0x1e4ab: 0x6c498620, + 0x1e4ac: 0x6d2ac820, 0x1e4ad: 0x6d345e20, 0x1e4ae: 0x6c37cc20, 0x1e4af: 0x6d3afe20, + 0x1e4b0: 0x6cd38e20, 0x1e4b1: 0x6c09ae20, 0x1e4b2: 0x6d3e5e20, 0x1e4b3: 0x6c37d020, + 0x1e4b4: 0x6c4b4e20, 0x1e4b5: 0x6cb14020, 0x1e4b6: 0x6c0b3a20, 0x1e4b7: 0x6c971420, + 0x1e4b8: 0x6c277220, 0x1e4b9: 0x6cd16820, 0x1e4ba: 0x6c7bf820, 0x1e4bb: 0x6c3ab220, + 0x1e4bc: 0x6ce5f420, 0x1e4bd: 0x6d150620, 0x1e4be: 0x6c1b2a20, 0x1e4bf: 0x6c998620, + // Block 0x793, offset 0x1e4c0 + 0x1e4c0: 0x6c51c820, 0x1e4c1: 0x6c09b020, 0x1e4c2: 0x6c927420, 0x1e4c3: 0x6c8c5420, + 0x1e4c4: 0x6c5bec20, 0x1e4c5: 0x6c410020, 0x1e4c6: 0x6cb11a20, 0x1e4c7: 0x6d3e6020, + 0x1e4c8: 0x6c642020, 0x1e4c9: 0x6d070420, 0x1e4ca: 0x6d2b6020, 0x1e4cb: 0x6c691020, + 0x1e4cc: 0x6c414a20, 0x1e4cd: 0x6d29dc20, 0x1e4ce: 0x6c669e20, 0x1e4cf: 0x6d1be220, + 0x1e4d0: 0x6d0a9c20, 0x1e4d1: 0x6d325420, 0x1e4d2: 0x6ccef820, 0x1e4d3: 0x6c0d4a20, + 0x1e4d4: 0x6c0d4c20, 0x1e4d5: 0x6cc08620, 0x1e4d6: 0x6ccefa20, 0x1e4d7: 0x6c203c20, + 0x1e4d8: 0x6d29e620, 0x1e4d9: 0x6d38a220, 0x1e4da: 0x6c7f5220, 0x1e4db: 0x6d299820, + 0x1e4dc: 0x6c22e020, 0x1e4dd: 0x6c188620, 0x1e4de: 0x6cce3a20, 0x1e4df: 0x6ce51620, + 0x1e4e0: 0x6cadee20, 0x1e4e1: 0x6c44de20, 0x1e4e2: 0x6cfb8820, 0x1e4e3: 0x6c974020, + 0x1e4e4: 0x6c66c220, 0x1e4e5: 0x6cdc6820, 0x1e4e6: 0x6c404420, 0x1e4e7: 0x6ce0aa20, + 0x1e4e8: 0x6c23ae20, 0x1e4e9: 0x6c23b020, 0x1e4ea: 0x6d36c620, 0x1e4eb: 0x6c5f2220, + 0x1e4ec: 0x6d2f3e20, 0x1e4ed: 0x6c322c20, 0x1e4ee: 0x6c6d5420, 0x1e4ef: 0x6d047420, + 0x1e4f0: 0x6c218820, 0x1e4f1: 0x6d280420, 0x1e4f2: 0x6c061420, 0x1e4f3: 0x6d290c20, + 0x1e4f4: 0x6c7f5820, 0x1e4f5: 0x6c3cf820, 0x1e4f6: 0x6c125c20, 0x1e4f7: 0x6c5f6020, + 0x1e4f8: 0x6cd17e20, 0x1e4f9: 0x6d18da20, 0x1e4fa: 0x6d3bec20, 0x1e4fb: 0x6c406820, + 0x1e4fc: 0x6c46de20, 0x1e4fd: 0x6cc9ea20, 0x1e4fe: 0x6d2b1a20, 0x1e4ff: 0x6c8a4020, + // Block 0x794, offset 0x1e500 + 0x1e500: 0x6d18f820, 0x1e501: 0x6c045e20, 0x1e502: 0x6c191620, 0x1e503: 0x6ceda620, + 0x1e504: 0x6d373220, 0x1e505: 0x6d3cb620, 0x1e506: 0x6c0c4620, 0x1e507: 0x6d276e20, + 0x1e508: 0x6d2bb620, 0x1e509: 0x6c28e020, 0x1e50a: 0x6d29ae20, 0x1e50b: 0x6d0eec20, + 0x1e50c: 0x6cb4c420, 0x1e50d: 0x6ccdd820, 0x1e50e: 0x6cedac20, 0x1e50f: 0x6d1cca20, + 0x1e510: 0x6c6d7220, 0x1e511: 0x6c423c20, 0x1e512: 0x6cfbd420, 0x1e513: 0x6d29f020, + 0x1e514: 0x6c0ac620, 0x1e515: 0x6c31f420, 0x1e516: 0x6cd54820, 0x1e517: 0x6d0f0620, + 0x1e518: 0x6cce4220, 0x1e519: 0x6d08d420, 0x1e51a: 0x6c907020, 0x1e51b: 0x6c424420, + 0x1e51c: 0x6d29f420, 0x1e51d: 0x6c06d220, 0x1e51e: 0x6d311c20, 0x1e51f: 0x6c3fa820, + 0x1e520: 0x6d253420, 0x1e521: 0x6c460c20, 0x1e522: 0x6c110c20, 0x1e523: 0x6d2aae20, + 0x1e524: 0x6cfb2e20, 0x1e525: 0x6c043820, 0x1e526: 0x6d2f2a20, 0x1e527: 0x6c5da220, + 0x1e528: 0x6d358e20, 0x1e529: 0x6c393420, 0x1e52a: 0x6cdf9220, 0x1e52b: 0x6cb20620, + 0x1e52c: 0x6c0b2a20, 0x1e52d: 0x6c469820, 0x1e52e: 0x6d3ab420, 0x1e52f: 0x6c497a20, + 0x1e530: 0x6c37c420, 0x1e531: 0x6c666220, 0x1e532: 0x6c078220, 0x1e533: 0x6cd34820, + 0x1e534: 0x6ce5ec20, 0x1e535: 0x6c4b3a20, 0x1e536: 0x6c7bec20, 0x1e537: 0x6c274e20, + 0x1e538: 0x6c995a20, 0x1e539: 0x6c3a9220, 0x1e53a: 0x6c51be20, 0x1e53b: 0x6d14b020, + 0x1e53c: 0x6d2b5c20, 0x1e53d: 0x6d35ce20, 0x1e53e: 0x6c640e20, 0x1e53f: 0x6c5bb020, + // Block 0x795, offset 0x1e540 + 0x1e540: 0x6d3e1e20, 0x1e541: 0x6c8c5020, 0x1e542: 0x6c922c20, 0x1e543: 0x6d29d820, + 0x1e544: 0x6d3e2020, 0x1e545: 0x6c40f020, 0x1e546: 0x6c6cfa20, 0x1e547: 0x6cc05220, + 0x1e548: 0x6d323c20, 0x1e549: 0x6c7f4620, 0x1e54a: 0x6ccef020, 0x1e54b: 0x6c400020, + 0x1e54c: 0x6c322020, 0x1e54d: 0x6c5edc20, 0x1e54e: 0x6cd52c20, 0x1e54f: 0x6cce3820, + 0x1e550: 0x6c22ce20, 0x1e551: 0x6c09b220, 0x1e552: 0x6d388c20, 0x1e553: 0x6c44d420, + 0x1e554: 0x6cadda20, 0x1e555: 0x6c283620, 0x1e556: 0x6c7f4c20, 0x1e557: 0x6c3ce820, + 0x1e558: 0x6d3c9e20, 0x1e559: 0x6c402820, 0x1e55a: 0x6d3bd620, 0x1e55b: 0x6cc9e620, + 0x1e55c: 0x6d2af420, 0x1e55d: 0x6d0ec820, 0x1e55e: 0x6d299a20, 0x1e55f: 0x6d276820, + 0x1e560: 0x6d2bb220, 0x1e561: 0x6ccdc220, 0x1e562: 0x6d1cae20, 0x1e563: 0x6c423e20, + 0x1e564: 0x6c1be820, 0x1e565: 0x6cf60220, 0x1e566: 0x6ccf4620, 0x1e567: 0x6ca42420, + 0x1e568: 0x6ce75e20, 0x1e569: 0x6cf8a820, 0x1e56a: 0x6c197620, 0x1e56b: 0x6c51dc20, + 0x1e56c: 0x6c199620, 0x1e56d: 0x6d30dc20, 0x1e56e: 0x6cf9f620, 0x1e56f: 0x6ce14620, + 0x1e570: 0x6d407e20, 0x1e571: 0x6d407c20, 0x1e572: 0x6c85b620, 0x1e573: 0x6c6f6020, + 0x1e574: 0x6c3fca20, 0x1e575: 0x6d2fa620, 0x1e576: 0x6c41d220, 0x1e577: 0x6cb6ea20, + 0x1e578: 0x6ccd8020, 0x1e579: 0x6cbf1c20, 0x1e57a: 0x6d1adc20, 0x1e57b: 0x6cfc0c20, + 0x1e57c: 0x6c21fe20, 0x1e57d: 0x6c743620, 0x1e57e: 0x6cbdd420, 0x1e57f: 0x6c1b2020, + // Block 0x796, offset 0x1e580 + 0x1e580: 0x6c220020, 0x1e581: 0x6c192820, 0x1e582: 0x6c192a20, 0x1e583: 0x6c2eb620, + 0x1e584: 0x6c70a020, 0x1e585: 0x6c174820, 0x1e586: 0x6c2b3020, 0x1e587: 0x6cf89620, + 0x1e588: 0x6d2d7a20, 0x1e589: 0x6c745c20, 0x1e58a: 0x6d26be20, 0x1e58b: 0x6cc11820, + 0x1e58c: 0x6c606220, 0x1e58d: 0x6c1b3e20, 0x1e58e: 0x6c1e9420, 0x1e58f: 0x6c486420, + 0x1e590: 0x6d096820, 0x1e591: 0x6d3e6220, 0x1e592: 0x6ce59420, 0x1e593: 0x6c349c20, + 0x1e594: 0x6c8b1c20, 0x1e595: 0x6c41e220, 0x1e596: 0x6cdd3220, 0x1e597: 0x6c245020, + 0x1e598: 0x6cf79820, 0x1e599: 0x6d2fd220, 0x1e59a: 0x6cdaf420, 0x1e59b: 0x6d1b0020, + 0x1e59c: 0x6c715020, 0x1e59d: 0x6c66c420, 0x1e59e: 0x6cc3f420, 0x1e59f: 0x6ce1a020, + 0x1e5a0: 0x6c21d020, 0x1e5a1: 0x6c250420, 0x1e5a2: 0x6c92b820, 0x1e5a3: 0x6cc27420, + 0x1e5a4: 0x6c298c20, 0x1e5a5: 0x6cbfc820, 0x1e5a6: 0x6d3e9220, 0x1e5a7: 0x6ce37e20, + 0x1e5a8: 0x6cc14a20, 0x1e5a9: 0x6c1c8820, 0x1e5aa: 0x6c5a1e20, 0x1e5ab: 0x6cbc0a20, + 0x1e5ac: 0x6cbbc220, 0x1e5ad: 0x6c69ce20, 0x1e5ae: 0x6d2a9a20, 0x1e5af: 0x6ce44220, + 0x1e5b0: 0x6c37b020, 0x1e5b1: 0x6d298420, 0x1e5b2: 0x6d298820, 0x1e5b3: 0x6d40a620, + 0x1e5b4: 0x6cabbc20, 0x1e5b5: 0x6c064220, 0x1e5b6: 0x6c7a8c20, 0x1e5b7: 0x6c77f220, + 0x1e5b8: 0x6c33cc20, 0x1e5b9: 0x6c743820, 0x1e5ba: 0x6c3d6c20, 0x1e5bb: 0x6c190020, + 0x1e5bc: 0x6c658c20, 0x1e5bd: 0x6c39e420, 0x1e5be: 0x6d352420, 0x1e5bf: 0x6cdde620, + // Block 0x797, offset 0x1e5c0 + 0x1e5c0: 0x6d26a820, 0x1e5c1: 0x6c03b620, 0x1e5c2: 0x6cb5d820, 0x1e5c3: 0x6d26aa20, + 0x1e5c4: 0x6cbab420, 0x1e5c5: 0x6ceba820, 0x1e5c6: 0x6cdf2420, 0x1e5c7: 0x6d17c820, + 0x1e5c8: 0x6ca72620, 0x1e5c9: 0x6c8d0e20, 0x1e5ca: 0x6c9a9420, 0x1e5cb: 0x6c038220, + 0x1e5cc: 0x6c2e5820, 0x1e5cd: 0x6c7a4420, 0x1e5ce: 0x6ceb2420, 0x1e5cf: 0x6c636620, + 0x1e5d0: 0x6c220620, 0x1e5d1: 0x6cad7820, 0x1e5d2: 0x6cb83820, 0x1e5d3: 0x6d3b0020, + 0x1e5d4: 0x6c70a220, 0x1e5d5: 0x6c2d1c20, 0x1e5d6: 0x6d346e20, 0x1e5d7: 0x6c3d7620, + 0x1e5d8: 0x6cac5a20, 0x1e5d9: 0x6c724e20, 0x1e5da: 0x6ccce620, 0x1e5db: 0x6c0fe420, + 0x1e5dc: 0x6ca5ec20, 0x1e5dd: 0x6c724620, 0x1e5de: 0x6c861e20, 0x1e5df: 0x6c449a20, + 0x1e5e0: 0x6d152420, 0x1e5e1: 0x6c5ef420, 0x1e5e2: 0x6c34fe20, 0x1e5e3: 0x6cfc1c20, + 0x1e5e4: 0x6c685420, 0x1e5e5: 0x6c350020, 0x1e5e6: 0x6d39b620, 0x1e5e7: 0x6cc30620, + 0x1e5e8: 0x6c7aec20, 0x1e5e9: 0x6d3b6820, 0x1e5ea: 0x6c4b5a20, 0x1e5eb: 0x6cbf4420, + 0x1e5ec: 0x6c7cd620, 0x1e5ed: 0x6cfdce20, 0x1e5ee: 0x6c1c3620, 0x1e5ef: 0x6c927620, + 0x1e5f0: 0x6cb11c20, 0x1e5f1: 0x6d367020, 0x1e5f2: 0x6c63d020, 0x1e5f3: 0x6ce5dc20, + 0x1e5f4: 0x6c113820, 0x1e5f5: 0x6c669820, 0x1e5f6: 0x6cde6a20, 0x1e5f7: 0x6cbb8020, + 0x1e5f8: 0x6c09e220, 0x1e5f9: 0x6cfab220, 0x1e5fa: 0x6c350220, 0x1e5fb: 0x6c5ef620, + 0x1e5fc: 0x6c714620, 0x1e5fd: 0x6c625420, 0x1e5fe: 0x6cd4fa20, 0x1e5ff: 0x6ce8e020, + // Block 0x798, offset 0x1e600 + 0x1e600: 0x6c1f6420, 0x1e601: 0x6c6e9a20, 0x1e602: 0x6ca85620, 0x1e603: 0x6cfef820, + 0x1e604: 0x6c10b020, 0x1e605: 0x6d091420, 0x1e606: 0x6c259a20, 0x1e607: 0x6ca25020, + 0x1e608: 0x6cd4fc20, 0x1e609: 0x6c896220, 0x1e60a: 0x6d1e5420, 0x1e60b: 0x6c691820, + 0x1e60c: 0x6c1dce20, 0x1e60d: 0x6cbb9220, 0x1e60e: 0x6ca1da20, 0x1e60f: 0x6cde9420, + 0x1e610: 0x6c66c620, 0x1e611: 0x6cb64620, 0x1e612: 0x6cf29e20, 0x1e613: 0x6cf00e20, + 0x1e614: 0x6c219820, 0x1e615: 0x6c6b2a20, 0x1e616: 0x6c609a20, 0x1e617: 0x6ca86420, + 0x1e618: 0x6c70be20, 0x1e619: 0x6c70c020, 0x1e61a: 0x6c950c20, 0x1e61b: 0x6c92bc20, + 0x1e61c: 0x6c839a20, 0x1e61d: 0x6c57f020, 0x1e61e: 0x6c728420, 0x1e61f: 0x6c1b4e20, + 0x1e620: 0x6ced4820, 0x1e621: 0x6cc31420, 0x1e622: 0x6ce2fa20, 0x1e623: 0x6c0f4c20, + 0x1e624: 0x6d40d220, 0x1e625: 0x6cbce220, 0x1e626: 0x6d160820, 0x1e627: 0x6c245e20, + 0x1e628: 0x6d3fbc20, 0x1e629: 0x6c113e20, 0x1e62a: 0x6d3fbe20, 0x1e62b: 0x6caf1620, + 0x1e62c: 0x6d36c820, 0x1e62d: 0x6d32d820, 0x1e62e: 0x6c2d2a20, 0x1e62f: 0x6d349420, + 0x1e630: 0x6d21aa20, 0x1e631: 0x6c346220, 0x1e632: 0x6c340c20, 0x1e633: 0x6c202820, + 0x1e634: 0x6d1e6020, 0x1e635: 0x6d380820, 0x1e636: 0x6c2c9e20, 0x1e637: 0x6d2c9220, + 0x1e638: 0x6c191020, 0x1e639: 0x6c1fce20, 0x1e63a: 0x6c66c820, 0x1e63b: 0x6c486e20, + 0x1e63c: 0x6ce13e20, 0x1e63d: 0x6c71d620, 0x1e63e: 0x6c3efa20, 0x1e63f: 0x6d40d820, + // Block 0x799, offset 0x1e640 + 0x1e640: 0x6c2eec20, 0x1e641: 0x6cb12e20, 0x1e642: 0x6cc76020, 0x1e643: 0x6cab1020, + 0x1e644: 0x6ce38020, 0x1e645: 0x6c142020, 0x1e646: 0x6ce9ec20, 0x1e647: 0x6c65ee20, + 0x1e648: 0x6c29f420, 0x1e649: 0x6c25ca20, 0x1e64a: 0x6cb53a20, 0x1e64b: 0x6cdeb020, + 0x1e64c: 0x6cbae420, 0x1e64d: 0x6ca74020, 0x1e64e: 0x6c2ce020, 0x1e64f: 0x6ce38a20, + 0x1e650: 0x6c60ce20, 0x1e651: 0x6ca87e20, 0x1e652: 0x6cac7820, 0x1e653: 0x6c8e3a20, + 0x1e654: 0x6d29aa20, 0x1e655: 0x6c0a7a20, 0x1e656: 0x6c1cf220, 0x1e657: 0x6c931020, + 0x1e658: 0x6c8a4220, 0x1e659: 0x6c246e20, 0x1e65a: 0x6ce0da20, 0x1e65b: 0x6c27a420, + 0x1e65c: 0x6cdb5420, 0x1e65d: 0x6cf81e20, 0x1e65e: 0x6c7ce220, 0x1e65f: 0x6c5f7820, + 0x1e660: 0x6d34ae20, 0x1e661: 0x6cbaee20, 0x1e662: 0x6c2ba820, 0x1e663: 0x6cac8420, + 0x1e664: 0x6d3fd020, 0x1e665: 0x6c887020, 0x1e666: 0x6c085c20, 0x1e667: 0x6d2a2a20, + 0x1e668: 0x6ca74820, 0x1e669: 0x6c0d0220, 0x1e66a: 0x6ce9d220, 0x1e66b: 0x6c717e20, + 0x1e66c: 0x6c2ac020, 0x1e66d: 0x6c137020, 0x1e66e: 0x6cfaf420, 0x1e66f: 0x6c38dc20, + 0x1e670: 0x6c1ec820, 0x1e671: 0x6d37d820, 0x1e672: 0x6c33be20, 0x1e673: 0x6c0e9a20, + 0x1e674: 0x6c247420, 0x1e675: 0x6c247620, 0x1e676: 0x6c74f220, 0x1e677: 0x6c74f420, + 0x1e678: 0x6c8c7e20, 0x1e679: 0x6cde0620, 0x1e67a: 0x6cbbc420, 0x1e67b: 0x6c73bc20, + 0x1e67c: 0x6cb4a220, 0x1e67d: 0x6c89d420, 0x1e67e: 0x6c33c020, 0x1e67f: 0x6c249620, + // Block 0x79a, offset 0x1e680 + 0x1e680: 0x6c7c1220, 0x1e681: 0x6d2a9c20, 0x1e682: 0x6c26d220, 0x1e683: 0x6c0abc20, + 0x1e684: 0x6c0abe20, 0x1e685: 0x6d3a3820, 0x1e686: 0x6c72be20, 0x1e687: 0x6c1ec020, + 0x1e688: 0x6cbc7020, 0x1e689: 0x6c33d020, 0x1e68a: 0x6c1e0820, 0x1e68b: 0x6c5f9620, + 0x1e68c: 0x6cf48e20, 0x1e68d: 0x6d271820, 0x1e68e: 0x6ca74c20, 0x1e68f: 0x6c8c8220, + 0x1e690: 0x6c8b7620, 0x1e691: 0x6d34c020, 0x1e692: 0x6c878220, 0x1e693: 0x6d376a20, + 0x1e694: 0x6c156e20, 0x1e695: 0x6c1ece20, 0x1e696: 0x6c32e820, 0x1e697: 0x6cf12420, + 0x1e698: 0x6c900620, 0x1e699: 0x6c8c8c20, 0x1e69a: 0x6cfb0e20, 0x1e69b: 0x6cf12e20, + 0x1e69c: 0x6d414020, 0x1e69d: 0x6c801220, 0x1e69e: 0x6d028e20, 0x1e69f: 0x6cc4fa20, + 0x1e6a0: 0x6cc95e20, 0x1e6a1: 0x6ca8ce20, 0x1e6a2: 0x6cdef620, 0x1e6a3: 0x6cc22c20, + 0x1e6a4: 0x6c6c1220, 0x1e6a5: 0x6c249a20, 0x1e6a6: 0x6c260620, 0x1e6a7: 0x6cf83020, + 0x1e6a8: 0x6c7cc620, 0x1e6a9: 0x6c753a20, 0x1e6aa: 0x6c8c9020, 0x1e6ab: 0x6ccfa420, + 0x1e6ac: 0x6c457e20, 0x1e6ad: 0x6c27d820, 0x1e6ae: 0x6c3c0a20, 0x1e6af: 0x6cc10820, + 0x1e6b0: 0x6ce3c220, 0x1e6b1: 0x6c349e20, 0x1e6b2: 0x6c34a020, 0x1e6b3: 0x6c459a20, + 0x1e6b4: 0x6c80da20, 0x1e6b5: 0x6cc60e20, 0x1e6b6: 0x6c95be20, 0x1e6b7: 0x6c007620, + 0x1e6b8: 0x6c5f2420, 0x1e6b9: 0x6c715220, 0x1e6ba: 0x6ce18020, 0x1e6bb: 0x6c79ae20, + 0x1e6bc: 0x6c81de20, 0x1e6bd: 0x6d0dd820, 0x1e6be: 0x6c9abc20, 0x1e6bf: 0x6c775c20, + // Block 0x79b, offset 0x1e6c0 + 0x1e6c0: 0x6cc15420, 0x1e6c1: 0x6c90ce20, 0x1e6c2: 0x6c81ea20, 0x1e6c3: 0x6c34c020, + 0x1e6c4: 0x6d34b420, 0x1e6c5: 0x6d0f3c20, 0x1e6c6: 0x6ce3cc20, 0x1e6c7: 0x6c2a4e20, + 0x1e6c8: 0x6d1d7420, 0x1e6c9: 0x6d249a20, 0x1e6ca: 0x6c17ce20, 0x1e6cb: 0x6d0b8220, + 0x1e6cc: 0x6c4ade20, 0x1e6cd: 0x6c756420, 0x1e6ce: 0x6cf08220, 0x1e6cf: 0x6d269e20, + 0x1e6d0: 0x6d032c20, 0x1e6d1: 0x6c275420, 0x1e6d2: 0x6d078a20, 0x1e6d3: 0x6c393e20, + 0x1e6d4: 0x6cc5e420, 0x1e6d5: 0x6cccde20, 0x1e6d6: 0x6c7bc020, 0x1e6d7: 0x6cd4d620, + 0x1e6d8: 0x6cea5220, 0x1e6d9: 0x6c18c420, 0x1e6da: 0x6c276820, 0x1e6db: 0x6c361c20, + 0x1e6dc: 0x6ca34020, 0x1e6dd: 0x6cb5dc20, 0x1e6de: 0x6c98de20, 0x1e6df: 0x6cc86020, + 0x1e6e0: 0x6cc5ec20, 0x1e6e1: 0x6cb98c20, 0x1e6e2: 0x6d3ba620, 0x1e6e3: 0x6c52a020, + 0x1e6e4: 0x6c54d220, 0x1e6e5: 0x6cc19c20, 0x1e6e6: 0x6c7bfa20, 0x1e6e7: 0x6c2bfc20, + 0x1e6e8: 0x6c8d1220, 0x1e6e9: 0x6c277420, 0x1e6ea: 0x6c022c20, 0x1e6eb: 0x6d31e220, + 0x1e6ec: 0x6c395620, 0x1e6ed: 0x6c7baa20, 0x1e6ee: 0x6d102220, 0x1e6ef: 0x6cae7420, + 0x1e6f0: 0x6c072820, 0x1e6f1: 0x6c471420, 0x1e6f2: 0x6c471620, 0x1e6f3: 0x6cad5e20, + 0x1e6f4: 0x6d3b0420, 0x1e6f5: 0x6cc71020, 0x1e6f6: 0x6c364a20, 0x1e6f7: 0x6c038420, + 0x1e6f8: 0x6d38d420, 0x1e6f9: 0x6d353020, 0x1e6fa: 0x6d110020, 0x1e6fb: 0x6c780020, + 0x1e6fc: 0x6d17ca20, 0x1e6fd: 0x6d364420, 0x1e6fe: 0x6cd3a820, 0x1e6ff: 0x6cb2b820, + // Block 0x79c, offset 0x1e700 + 0x1e700: 0x6c375e20, 0x1e701: 0x6c45f420, 0x1e702: 0x6c713a20, 0x1e703: 0x6c69a820, + 0x1e704: 0x6c49ee20, 0x1e705: 0x6c514c20, 0x1e706: 0x6c766420, 0x1e707: 0x6cc30820, + 0x1e708: 0x6d389420, 0x1e709: 0x6d293c20, 0x1e70a: 0x6d367220, 0x1e70b: 0x6ccef620, + 0x1e70c: 0x6c89c420, 0x1e70d: 0x6d23ae20, 0x1e70e: 0x6cce7c20, 0x1e70f: 0x6d1f5c20, + 0x1e710: 0x6ced9020, 0x1e711: 0x6d1af820, 0x1e712: 0x6d307420, 0x1e713: 0x6ced3e20, + 0x1e714: 0x6c3f7c20, 0x1e715: 0x6cbe5420, 0x1e716: 0x6d38a620, 0x1e717: 0x6ca60620, + 0x1e718: 0x6c838420, 0x1e719: 0x6d308420, 0x1e71a: 0x6d2e7a20, 0x1e71b: 0x6c89ca20, + 0x1e71c: 0x6d3e8220, 0x1e71d: 0x6c5aee20, 0x1e71e: 0x6cee3820, 0x1e71f: 0x6c21d220, + 0x1e720: 0x6c4ccc20, 0x1e721: 0x6c76e820, 0x1e722: 0x6d160a20, 0x1e723: 0x6caec220, + 0x1e724: 0x6cba7a20, 0x1e725: 0x6c4be620, 0x1e726: 0x6ca73a20, 0x1e727: 0x6cb2c820, + 0x1e728: 0x6c496020, 0x1e729: 0x6c075220, 0x1e72a: 0x6c950e20, 0x1e72b: 0x6cac0420, + 0x1e72c: 0x6c896c20, 0x1e72d: 0x6cc88020, 0x1e72e: 0x6cc76220, 0x1e72f: 0x6c631020, + 0x1e730: 0x6d0fda20, 0x1e731: 0x6cfba020, 0x1e732: 0x6c201020, 0x1e733: 0x6c23fe20, + 0x1e734: 0x6c211c20, 0x1e735: 0x6c443c20, 0x1e736: 0x6d1f7220, 0x1e737: 0x6c52cc20, + 0x1e738: 0x6cd50820, 0x1e739: 0x6c405820, 0x1e73a: 0x6d3e9420, 0x1e73b: 0x6c3efc20, + 0x1e73c: 0x6cf16820, 0x1e73d: 0x6c07cc20, 0x1e73e: 0x6d2e2020, 0x1e73f: 0x6d21c020, + // Block 0x79d, offset 0x1e740 + 0x1e740: 0x6cf16a20, 0x1e741: 0x6ce1f420, 0x1e742: 0x6c47dc20, 0x1e743: 0x6d319e20, + 0x1e744: 0x6cfa0220, 0x1e745: 0x6d25b820, 0x1e746: 0x6c931220, 0x1e747: 0x6c689e20, + 0x1e748: 0x6c178620, 0x1e749: 0x6d3bb420, 0x1e74a: 0x6cf0f820, 0x1e74b: 0x6c5d0420, + 0x1e74c: 0x6d098c20, 0x1e74d: 0x6d30b820, 0x1e74e: 0x6c69d020, 0x1e74f: 0x6d2e9020, + 0x1e750: 0x6c102620, 0x1e751: 0x6c81c620, 0x1e752: 0x6c3ba820, 0x1e753: 0x6c386a20, + 0x1e754: 0x6c8bfc20, 0x1e755: 0x6c445220, 0x1e756: 0x6ccb8e20, 0x1e757: 0x6c76fc20, + 0x1e758: 0x6c58be20, 0x1e759: 0x6d162820, 0x1e75a: 0x6c60f020, 0x1e75b: 0x6d3cc020, + 0x1e75c: 0x6c377820, 0x1e75d: 0x6d246820, 0x1e75e: 0x6c671c20, 0x1e75f: 0x6c52e020, + 0x1e760: 0x6c829220, 0x1e761: 0x6cae2c20, 0x1e762: 0x6c878420, 0x1e763: 0x6c879a20, + 0x1e764: 0x6c91a020, 0x1e765: 0x6c8c9220, 0x1e766: 0x6c17ca20, 0x1e767: 0x6d0b6a20, + 0x1e768: 0x6c4ac020, 0x1e769: 0x6d077a20, 0x1e76a: 0x6c272a20, 0x1e76b: 0x6cc5ca20, + 0x1e76c: 0x6d3ba020, 0x1e76d: 0x6c35e220, 0x1e76e: 0x6c94e020, 0x1e76f: 0x6cc85420, + 0x1e770: 0x6c529820, 0x1e771: 0x6c46fa20, 0x1e772: 0x6c77ec20, 0x1e773: 0x6c914820, + 0x1e774: 0x6d38d020, 0x1e775: 0x6d350a20, 0x1e776: 0x6d171020, 0x1e777: 0x6c54b220, + 0x1e778: 0x6d31c420, 0x1e779: 0x6c85ba20, 0x1e77a: 0x6d10dc20, 0x1e77b: 0x6cbe3620, + 0x1e77c: 0x6cd36220, 0x1e77d: 0x6d293420, 0x1e77e: 0x6d35d020, 0x1e77f: 0x6c699620, + // Block 0x79e, offset 0x1e780 + 0x1e780: 0x6d386c20, 0x1e781: 0x6cc2d020, 0x1e782: 0x6c922e20, 0x1e783: 0x6c699820, + 0x1e784: 0x6d305420, 0x1e785: 0x6c3f6020, 0x1e786: 0x6c89b220, 0x1e787: 0x6ca72a20, + 0x1e788: 0x6c072a20, 0x1e789: 0x6c5abc20, 0x1e78a: 0x6c4bcc20, 0x1e78b: 0x6cee2620, + 0x1e78c: 0x6c895820, 0x1e78d: 0x6c21c420, 0x1e78e: 0x6d3e4820, 0x1e78f: 0x6c23f420, + 0x1e790: 0x6c3eae20, 0x1e791: 0x6c630c20, 0x1e792: 0x6cf15e20, 0x1e793: 0x6cd4f020, + 0x1e794: 0x6cae2020, 0x1e795: 0x6d259a20, 0x1e796: 0x6cf9e220, 0x1e797: 0x6ca72e20, + 0x1e798: 0x6c92c420, 0x1e799: 0x6d309420, 0x1e79a: 0x6c8be220, 0x1e79b: 0x6d02ae20, + 0x1e79c: 0x6c471820, 0x1e79d: 0x6c224a20, 0x1e79e: 0x6c225220, 0x1e79f: 0x6cb0a820, + 0x1e7a0: 0x6d41ba20, 0x1e7a1: 0x6c0bb020, 0x1e7a2: 0x6c7e8e20, 0x1e7a3: 0x6c7e9020, + 0x1e7a4: 0x6c226020, 0x1e7a5: 0x6d08ea20, 0x1e7a6: 0x6c050620, 0x1e7a7: 0x6c0bc020, + 0x1e7a8: 0x6c0bc220, 0x1e7a9: 0x6c0bc420, 0x1e7aa: 0x6d08ec20, 0x1e7ab: 0x6c0bcc20, + 0x1e7ac: 0x6c04a820, 0x1e7ad: 0x6c227e20, 0x1e7ae: 0x6c0bd620, 0x1e7af: 0x6c0bda20, + 0x1e7b0: 0x6c18a020, 0x1e7b1: 0x6cc7fc20, 0x1e7b2: 0x6ca9bc20, 0x1e7b3: 0x6ca9c220, + 0x1e7b4: 0x6c160420, 0x1e7b5: 0x6c21a820, 0x1e7b6: 0x6c21a420, 0x1e7b7: 0x6d198820, + 0x1e7b8: 0x6cc61820, 0x1e7b9: 0x6c0ae820, 0x1e7ba: 0x6c0aea20, 0x1e7bb: 0x6cd22e20, + 0x1e7bc: 0x6cc83220, 0x1e7bd: 0x6c89d620, 0x1e7be: 0x6c267620, 0x1e7bf: 0x6c14b620, + // Block 0x79f, offset 0x1e7c0 + 0x1e7c0: 0x6c416420, 0x1e7c1: 0x6cb8a020, 0x1e7c2: 0x6d207620, 0x1e7c3: 0x6d207820, + 0x1e7c4: 0x6cb73420, 0x1e7c5: 0x6d0a6820, 0x1e7c6: 0x6d145820, 0x1e7c7: 0x6c4ce420, + 0x1e7c8: 0x6c972020, 0x1e7c9: 0x6cb4ca20, 0x1e7ca: 0x6d288620, 0x1e7cb: 0x6cee4a20, + 0x1e7cc: 0x6ce91e20, 0x1e7cd: 0x6d3cca20, 0x1e7ce: 0x6d1c5820, 0x1e7cf: 0x6ce3d620, + 0x1e7d0: 0x6d281620, 0x1e7d1: 0x6c6cd620, 0x1e7d2: 0x6c4f5c20, 0x1e7d3: 0x6d0b7a20, + 0x1e7d4: 0x6c390620, 0x1e7d5: 0x6cf4b020, 0x1e7d6: 0x6c267820, 0x1e7d7: 0x6c354c20, + 0x1e7d8: 0x6c4d1c20, 0x1e7d9: 0x6d30e420, 0x1e7da: 0x6d384c20, 0x1e7db: 0x6c6cd820, + 0x1e7dc: 0x6d25de20, 0x1e7dd: 0x6ceee420, 0x1e7de: 0x6c87ee20, 0x1e7df: 0x6c1b0220, + 0x1e7e0: 0x6c180420, 0x1e7e1: 0x6ca68020, 0x1e7e2: 0x6ce57420, 0x1e7e3: 0x6d359020, + 0x1e7e4: 0x6d147c20, 0x1e7e5: 0x6c6efc20, 0x1e7e6: 0x6c633220, 0x1e7e7: 0x6c18a620, + 0x1e7e8: 0x6c273a20, 0x1e7e9: 0x6c378820, 0x1e7ea: 0x6c2b5e20, 0x1e7eb: 0x6cb36a20, + 0x1e7ec: 0x6d3ab620, 0x1e7ed: 0x6c2e6420, 0x1e7ee: 0x6d2ab020, 0x1e7ef: 0x6ce20620, + 0x1e7f0: 0x6cd5a220, 0x1e7f1: 0x6ceaf620, 0x1e7f2: 0x6cc28620, 0x1e7f3: 0x6c6e5020, + 0x1e7f4: 0x6c5b2a20, 0x1e7f5: 0x6c306820, 0x1e7f6: 0x6d203420, 0x1e7f7: 0x6c9c4020, + 0x1e7f8: 0x6c083c20, 0x1e7f9: 0x6c5e9c20, 0x1e7fa: 0x6ca39c20, 0x1e7fb: 0x6d14b220, + 0x1e7fc: 0x6c6a9a20, 0x1e7fd: 0x6d3c5820, 0x1e7fe: 0x6c8ade20, 0x1e7ff: 0x6d0a7420, + // Block 0x7a0, offset 0x1e800 + 0x1e800: 0x6ce9f620, 0x1e801: 0x6cd98420, 0x1e802: 0x6cd34a20, 0x1e803: 0x6ce20e20, + 0x1e804: 0x6cacf820, 0x1e805: 0x6c546820, 0x1e806: 0x6ca68a20, 0x1e807: 0x6c33e420, + 0x1e808: 0x6c6f0420, 0x1e809: 0x6d084620, 0x1e80a: 0x6d0a7620, 0x1e80b: 0x6c101220, + 0x1e80c: 0x6d1e9c20, 0x1e80d: 0x6cfeac20, 0x1e80e: 0x6cc03a20, 0x1e80f: 0x6ce82420, + 0x1e810: 0x6d3a0a20, 0x1e811: 0x6cc03c20, 0x1e812: 0x6c2c3420, 0x1e813: 0x6c2c3620, + 0x1e814: 0x6ce89a20, 0x1e815: 0x6c6e6c20, 0x1e816: 0x6ce3e620, 0x1e817: 0x6c310a20, + 0x1e818: 0x6d15e020, 0x1e819: 0x6d30ee20, 0x1e81a: 0x6ce6f220, 0x1e81b: 0x6c4a2020, + 0x1e81c: 0x6cf4da20, 0x1e81d: 0x6cd36420, 0x1e81e: 0x6c1a6a20, 0x1e81f: 0x6cda9820, + 0x1e820: 0x6d2a7a20, 0x1e821: 0x6cc43620, 0x1e822: 0x6c3ca420, 0x1e823: 0x6c87fa20, + 0x1e824: 0x6cddc820, 0x1e825: 0x6c5b3220, 0x1e826: 0x6c850e20, 0x1e827: 0x6c483620, + 0x1e828: 0x6c7f0220, 0x1e829: 0x6c07b820, 0x1e82a: 0x6c262420, 0x1e82b: 0x6c743e20, + 0x1e82c: 0x6c083e20, 0x1e82d: 0x6c591820, 0x1e82e: 0x6c271620, 0x1e82f: 0x6c924a20, + 0x1e830: 0x6d1f3220, 0x1e831: 0x6d387c20, 0x1e832: 0x6c6d0820, 0x1e833: 0x6d232620, + 0x1e834: 0x6c219620, 0x1e835: 0x6c7c6820, 0x1e836: 0x6cee7620, 0x1e837: 0x6ce3f020, + 0x1e838: 0x6d178420, 0x1e839: 0x6c26a220, 0x1e83a: 0x6d25e620, 0x1e83b: 0x6c954420, + 0x1e83c: 0x6c087420, 0x1e83d: 0x6caaf220, 0x1e83e: 0x6d213a20, 0x1e83f: 0x6c296a20, + // Block 0x7a1, offset 0x1e840 + 0x1e840: 0x6cdbf620, 0x1e841: 0x6c33f420, 0x1e842: 0x6cdc4220, 0x1e843: 0x6d0d9820, + 0x1e844: 0x6c1ffc20, 0x1e845: 0x6c1b2c20, 0x1e846: 0x6ce33420, 0x1e847: 0x6d235c20, + 0x1e848: 0x6cd26c20, 0x1e849: 0x6d315a20, 0x1e84a: 0x6d1f4020, 0x1e84b: 0x6d283820, + 0x1e84c: 0x6c364c20, 0x1e84d: 0x6c0ba420, 0x1e84e: 0x6c4cec20, 0x1e84f: 0x6c364e20, + 0x1e850: 0x6cf9ca20, 0x1e851: 0x6c59ca20, 0x1e852: 0x6cc07020, 0x1e853: 0x6c2a1820, + 0x1e854: 0x6c26ac20, 0x1e855: 0x6cef1620, 0x1e856: 0x6ca45020, 0x1e857: 0x6d150820, + 0x1e858: 0x6c46be20, 0x1e859: 0x6d111620, 0x1e85a: 0x6c1e4620, 0x1e85b: 0x6c8e7420, + 0x1e85c: 0x6d0a9820, 0x1e85d: 0x6cde6c20, 0x1e85e: 0x6c2c7420, 0x1e85f: 0x6c1b4020, + 0x1e860: 0x6d25ec20, 0x1e861: 0x6cdada20, 0x1e862: 0x6cde6e20, 0x1e863: 0x6cba1420, + 0x1e864: 0x6c96f220, 0x1e865: 0x6d111820, 0x1e866: 0x6c499c20, 0x1e867: 0x6d2ed220, + 0x1e868: 0x6c025820, 0x1e869: 0x6cd3bc20, 0x1e86a: 0x6c10ea20, 0x1e86b: 0x6c1c4e20, + 0x1e86c: 0x6cdaf620, 0x1e86d: 0x6d2a1c20, 0x1e86e: 0x6d300420, 0x1e86f: 0x6c340220, + 0x1e870: 0x6c2c8820, 0x1e871: 0x6c90ac20, 0x1e872: 0x6c1b5020, 0x1e873: 0x6c25c220, + 0x1e874: 0x6c8bd620, 0x1e875: 0x6d41f020, 0x1e876: 0x6cc54820, 0x1e877: 0x6cb91820, + 0x1e878: 0x6d085820, 0x1e879: 0x6d23d620, 0x1e87a: 0x6d154e20, 0x1e87b: 0x6cf51c20, + 0x1e87c: 0x6c8a1620, 0x1e87d: 0x6c729820, 0x1e87e: 0x6cd3e220, 0x1e87f: 0x6c0a6020, + // Block 0x7a2, offset 0x1e880 + 0x1e880: 0x6d10bc20, 0x1e881: 0x6c974220, 0x1e882: 0x6d022220, 0x1e883: 0x6cdc9420, + 0x1e884: 0x6c4d2a20, 0x1e885: 0x6d2d9e20, 0x1e886: 0x6ce2b020, 0x1e887: 0x6c37aa20, + 0x1e888: 0x6c9ea220, 0x1e889: 0x6c0b0c20, 0x1e88a: 0x6c0b1420, 0x1e88b: 0x6c7e5220, + 0x1e88c: 0x6c847a20, 0x1e88d: 0x6d25c820, 0x1e88e: 0x6d117620, 0x1e88f: 0x6c957c20, + 0x1e890: 0x6c854c20, 0x1e891: 0x6d169e20, 0x1e892: 0x6ce65a20, 0x1e893: 0x6c2ad420, + 0x1e894: 0x6cb6c420, 0x1e895: 0x6d1d8220, 0x1e896: 0x6cccb420, 0x1e897: 0x6c4dc820, + 0x1e898: 0x6d20a420, 0x1e899: 0x6c982220, 0x1e89a: 0x6cc78820, 0x1e89b: 0x6cbef620, + 0x1e89c: 0x6cedb420, 0x1e89d: 0x6c7bd620, 0x1e89e: 0x6c3d3620, 0x1e89f: 0x6c777a20, + 0x1e8a0: 0x6c0d2020, 0x1e8a1: 0x6c398220, 0x1e8a2: 0x6d03bc20, 0x1e8a3: 0x6ca30220, + 0x1e8a4: 0x6d02a620, 0x1e8a5: 0x6cd04220, 0x1e8a6: 0x6c051620, 0x1e8a7: 0x6d253620, + 0x1e8a8: 0x6c259020, 0x1e8a9: 0x6c5d8a20, 0x1e8aa: 0x6d006a20, 0x1e8ab: 0x6c052c20, + 0x1e8ac: 0x6cf34e20, 0x1e8ad: 0x6c720220, 0x1e8ae: 0x6d1ef620, 0x1e8af: 0x6c4dd020, + 0x1e8b0: 0x6cdf1220, 0x1e8b1: 0x6cbf9820, 0x1e8b2: 0x6c092220, 0x1e8b3: 0x6caf2e20, + 0x1e8b4: 0x6c0dbe20, 0x1e8b5: 0x6ccec620, 0x1e8b6: 0x6c06de20, 0x1e8b7: 0x6cec1020, + 0x1e8b8: 0x6c2bd020, 0x1e8b9: 0x6d404620, 0x1e8ba: 0x6d12c820, 0x1e8bb: 0x6c8b9e20, + 0x1e8bc: 0x6c7b8820, 0x1e8bd: 0x6c4a3c20, 0x1e8be: 0x6d398620, 0x1e8bf: 0x6cd19e20, + // Block 0x7a3, offset 0x1e8c0 + 0x1e8c0: 0x6c7a2c20, 0x1e8c1: 0x6d22dc20, 0x1e8c2: 0x6c40e020, 0x1e8c3: 0x6c50ce20, + 0x1e8c4: 0x6cbc9a20, 0x1e8c5: 0x6d359420, 0x1e8c6: 0x6c5fe620, 0x1e8c7: 0x6c585c20, + 0x1e8c8: 0x6c545e20, 0x1e8c9: 0x6d03c820, 0x1e8ca: 0x6c682a20, 0x1e8cb: 0x6cf76a20, + 0x1e8cc: 0x6c4a7620, 0x1e8cd: 0x6caab420, 0x1e8ce: 0x6c80a220, 0x1e8cf: 0x6c63a620, + 0x1e8d0: 0x6c7b1420, 0x1e8d1: 0x6d333e20, 0x1e8d2: 0x6c813820, 0x1e8d3: 0x6d281e20, + 0x1e8d4: 0x6d0c6c20, 0x1e8d5: 0x6c19c220, 0x1e8d6: 0x6c30fc20, 0x1e8d7: 0x6cf5ae20, + 0x1e8d8: 0x6c935220, 0x1e8d9: 0x6c3f4e20, 0x1e8da: 0x6cf3aa20, 0x1e8db: 0x6c3e2620, + 0x1e8dc: 0x6c433e20, 0x1e8dd: 0x6c500a20, 0x1e8de: 0x6c80a420, 0x1e8df: 0x6c63aa20, + 0x1e8e0: 0x6c44f020, 0x1e8e1: 0x6c759a20, 0x1e8e2: 0x6d1ce220, 0x1e8e3: 0x6c0eca20, + 0x1e8e4: 0x6cf86820, 0x1e8e5: 0x6c06f420, 0x1e8e6: 0x6c85bc20, 0x1e8e7: 0x6d279220, + 0x1e8e8: 0x6c108c20, 0x1e8e9: 0x6cff7a20, 0x1e8ea: 0x6cb4e020, 0x1e8eb: 0x6cafd420, + 0x1e8ec: 0x6cbe3c20, 0x1e8ed: 0x6c4c1a20, 0x1e8ee: 0x6d386e20, 0x1e8ef: 0x6cdfd820, + 0x1e8f0: 0x6d404c20, 0x1e8f1: 0x6cb27e20, 0x1e8f2: 0x6c7ef020, 0x1e8f3: 0x6ca5d020, + 0x1e8f4: 0x6c186220, 0x1e8f5: 0x6d1f2420, 0x1e8f6: 0x6c10b420, 0x1e8f7: 0x6cfd6820, + 0x1e8f8: 0x6c27d020, 0x1e8f9: 0x6c711e20, 0x1e8fa: 0x6d1dba20, 0x1e8fb: 0x6cbb7420, + 0x1e8fc: 0x6d13ea20, 0x1e8fd: 0x6c30a620, 0x1e8fe: 0x6d0d7220, 0x1e8ff: 0x6c99f220, + // Block 0x7a4, offset 0x1e900 + 0x1e900: 0x6cc91a20, 0x1e901: 0x6c071820, 0x1e902: 0x6c361e20, 0x1e903: 0x6cd4d820, + 0x1e904: 0x6c735e20, 0x1e905: 0x6d225220, 0x1e906: 0x6d282820, 0x1e907: 0x6c53f420, + 0x1e908: 0x6c7c6a20, 0x1e909: 0x6cfd6e20, 0x1e90a: 0x6cfd7020, 0x1e90b: 0x6cd9a820, + 0x1e90c: 0x6ce0f820, 0x1e90d: 0x6ca00220, 0x1e90e: 0x6cf63220, 0x1e90f: 0x6cc7fe20, + 0x1e910: 0x6c1f4c20, 0x1e911: 0x6d3e4a20, 0x1e912: 0x6d405820, 0x1e913: 0x6d12f820, + 0x1e914: 0x6cf36c20, 0x1e915: 0x6cfd7c20, 0x1e916: 0x6d27a820, 0x1e917: 0x6c504220, + 0x1e918: 0x6d1d9220, 0x1e919: 0x6c08e620, 0x1e91a: 0x6c998820, 0x1e91b: 0x6c176420, + 0x1e91c: 0x6c3d8620, 0x1e91d: 0x6c8a6e20, 0x1e91e: 0x6d1a7820, 0x1e91f: 0x6d3b8020, + 0x1e920: 0x6c56a820, 0x1e921: 0x6cbb8220, 0x1e922: 0x6d0c1820, 0x1e923: 0x6d2ebc20, + 0x1e924: 0x6c97e020, 0x1e925: 0x6cbb8420, 0x1e926: 0x6d065020, 0x1e927: 0x6c2adc20, + 0x1e928: 0x6c0a9c20, 0x1e929: 0x6d0a2820, 0x1e92a: 0x6c0a0c20, 0x1e92b: 0x6d2b8420, + 0x1e92c: 0x6cef2620, 0x1e92d: 0x6d335820, 0x1e92e: 0x6c99a820, 0x1e92f: 0x6ccd9620, + 0x1e930: 0x6c8bc820, 0x1e931: 0x6cb33420, 0x1e932: 0x6c27f020, 0x1e933: 0x6c9b4020, + 0x1e934: 0x6d133220, 0x1e935: 0x6c12b820, 0x1e936: 0x6c7b3620, 0x1e937: 0x6c3c6420, + 0x1e938: 0x6c9b4220, 0x1e939: 0x6d406420, 0x1e93a: 0x6c7c0220, 0x1e93b: 0x6c88d020, + 0x1e93c: 0x6d29a220, 0x1e93d: 0x6c153020, 0x1e93e: 0x6d1eb820, 0x1e93f: 0x6c5f6420, + // Block 0x7a5, offset 0x1e940 + 0x1e940: 0x6d0ed820, 0x1e941: 0x6c154820, 0x1e942: 0x6c25f820, 0x1e943: 0x6c8d8820, + 0x1e944: 0x6c583a20, 0x1e945: 0x6cf74020, 0x1e946: 0x6c3c7820, 0x1e947: 0x6d29b620, + 0x1e948: 0x6c875820, 0x1e949: 0x6d1fa420, 0x1e94a: 0x6c2f5a20, 0x1e94b: 0x6cc02020, + 0x1e94c: 0x6d3d4020, 0x1e94d: 0x6cae1820, 0x1e94e: 0x6d391e20, 0x1e94f: 0x6d15e220, + 0x1e950: 0x6c418e20, 0x1e951: 0x6d20fe20, 0x1e952: 0x6c6fba20, 0x1e953: 0x6d0d7420, + 0x1e954: 0x6d41ae20, 0x1e955: 0x6c98e020, 0x1e956: 0x6d323e20, 0x1e957: 0x6d06c820, + 0x1e958: 0x6c311820, 0x1e959: 0x6d315420, 0x1e95a: 0x6c3b3020, 0x1e95b: 0x6d263e20, + 0x1e95c: 0x6c40ae20, 0x1e95d: 0x6d282a20, 0x1e95e: 0x6cdf7220, 0x1e95f: 0x6ce46a20, + 0x1e960: 0x6cb83a20, 0x1e961: 0x6ceb2c20, 0x1e962: 0x6c243e20, 0x1e963: 0x6c4da820, + 0x1e964: 0x6c471a20, 0x1e965: 0x6cda5020, 0x1e966: 0x6c37ee20, 0x1e967: 0x6c1dc620, + 0x1e968: 0x6d293e20, 0x1e969: 0x6ca03a20, 0x1e96a: 0x6c81d620, 0x1e96b: 0x6c21ca20, + 0x1e96c: 0x6c1e4e20, 0x1e96d: 0x6d205020, 0x1e96e: 0x6ce76020, 0x1e96f: 0x6d353c20, + 0x1e970: 0x6cfab420, 0x1e971: 0x6c67ec20, 0x1e972: 0x6c1a3020, 0x1e973: 0x6d1b6c20, + 0x1e974: 0x6ce8e220, 0x1e975: 0x6c69b220, 0x1e976: 0x6c9a1a20, 0x1e977: 0x6c7aa420, + 0x1e978: 0x6cdb8820, 0x1e979: 0x6c833c20, 0x1e97a: 0x6cb44420, 0x1e97b: 0x6d41c220, + 0x1e97c: 0x6c4d4420, 0x1e97d: 0x6d0e9c20, 0x1e97e: 0x6ccc8c20, 0x1e97f: 0x6ca77e20, + // Block 0x7a6, offset 0x1e980 + 0x1e980: 0x6cef3420, 0x1e981: 0x6c92c620, 0x1e982: 0x6c803620, 0x1e983: 0x6d0c2c20, + 0x1e984: 0x6ce23820, 0x1e985: 0x6cadc220, 0x1e986: 0x6d2e1220, 0x1e987: 0x6c215e20, + 0x1e988: 0x6ce00a20, 0x1e989: 0x6d41ca20, 0x1e98a: 0x6d3ca620, 0x1e98b: 0x6c246020, + 0x1e98c: 0x6c7d8220, 0x1e98d: 0x6ce38220, 0x1e98e: 0x6cfba220, 0x1e98f: 0x6c317620, + 0x1e990: 0x6c55c420, 0x1e991: 0x6d065c20, 0x1e992: 0x6d040820, 0x1e993: 0x6ce07c20, + 0x1e994: 0x6cc09a20, 0x1e995: 0x6c216420, 0x1e996: 0x6d285a20, 0x1e997: 0x6cb3a620, + 0x1e998: 0x6c783620, 0x1e999: 0x6cd9e620, 0x1e99a: 0x6c9c7620, 0x1e99b: 0x6cc31820, + 0x1e99c: 0x6c1e3220, 0x1e99d: 0x6c25cc20, 0x1e99e: 0x6d285e20, 0x1e99f: 0x6d1e7e20, + 0x1e9a0: 0x6c022220, 0x1e9a1: 0x6d2ce420, 0x1e9a2: 0x6c4d4a20, 0x1e9a3: 0x6ce14a20, + 0x1e9a4: 0x6c680020, 0x1e9a5: 0x6cb1a220, 0x1e9a6: 0x6c191820, 0x1e9a7: 0x6d244020, + 0x1e9a8: 0x6c846620, 0x1e9a9: 0x6d2a2c20, 0x1e9aa: 0x6c818620, 0x1e9ab: 0x6d142c20, + 0x1e9ac: 0x6c680a20, 0x1e9ad: 0x6c102820, 0x1e9ae: 0x6c69d420, 0x1e9af: 0x6cf71e20, + 0x1e9b0: 0x6ce03c20, 0x1e9b1: 0x6c37f220, 0x1e9b2: 0x6ca9dc20, 0x1e9b3: 0x6d193620, + 0x1e9b4: 0x6c854620, 0x1e9b5: 0x6c72c020, 0x1e9b6: 0x6d0efc20, 0x1e9b7: 0x6d193820, + 0x1e9b8: 0x6ca78020, 0x1e9b9: 0x6cc7ec20, 0x1e9ba: 0x6d09cc20, 0x1e9bb: 0x6c1e0a20, + 0x1e9bc: 0x6d0f1220, 0x1e9bd: 0x6c8db420, 0x1e9be: 0x6c9cc820, 0x1e9bf: 0x6c9cca20, + // Block 0x7a7, offset 0x1e9c0 + 0x1e9c0: 0x6ca78420, 0x1e9c1: 0x6d036020, 0x1e9c2: 0x6c69ea20, 0x1e9c3: 0x6ccc9620, + 0x1e9c4: 0x6c9cd420, 0x1e9c5: 0x6d0f2420, 0x1e9c6: 0x6c0b7820, 0x1e9c7: 0x6c111e20, + 0x1e9c8: 0x6cd37620, 0x1e9c9: 0x6d204a20, 0x1e9ca: 0x6cd39220, 0x1e9cb: 0x6cd40220, + 0x1e9cc: 0x6c84fc20, 0x1e9cd: 0x6d382020, 0x1e9ce: 0x6d12aa20, 0x1e9cf: 0x6c89c020, + 0x1e9d0: 0x6c847c20, 0x1e9d1: 0x6c6c2e20, 0x1e9d2: 0x6c6d7c20, 0x1e9d3: 0x6cc02220, + 0x1e9d4: 0x6d15d820, 0x1e9d5: 0x6c8a6c20, 0x1e9d6: 0x6c29c020, 0x1e9d7: 0x6d2f6220, + 0x1e9d8: 0x6c2f5c20, 0x1e9d9: 0x6cb38220, 0x1e9da: 0x6cc04220, 0x1e9db: 0x6c034220, + 0x1e9dc: 0x6c3f5620, 0x1e9dd: 0x6d314820, 0x1e9de: 0x6d344a20, 0x1e9df: 0x6c034420, + 0x1e9e0: 0x6c949820, 0x1e9e1: 0x6c3f5820, 0x1e9e2: 0x6ca3a020, 0x1e9e3: 0x6c2e2020, + 0x1e9e4: 0x6ccd8620, 0x1e9e5: 0x6cbc2220, 0x1e9e6: 0x6c79ea20, 0x1e9e7: 0x6c203420, + 0x1e9e8: 0x6d3f0e20, 0x1e9e9: 0x6c390e20, 0x1e9ea: 0x6c573620, 0x1e9eb: 0x6c573820, + 0x1e9ec: 0x6c4eb820, 0x1e9ed: 0x6c427c20, 0x1e9ee: 0x6cb5de20, 0x1e9ef: 0x6c985c20, + 0x1e9f0: 0x6cc64620, 0x1e9f1: 0x6c2c5220, 0x1e9f2: 0x6cd8be20, 0x1e9f3: 0x6cf87e20, + 0x1e9f4: 0x6d178620, 0x1e9f5: 0x6c146620, 0x1e9f6: 0x6cd1b620, 0x1e9f7: 0x6ce91a20, + 0x1e9f8: 0x6cf60620, 0x1e9f9: 0x6caa7420, 0x1e9fa: 0x6cb8dc20, 0x1e9fb: 0x6cc0c020, + 0x1e9fc: 0x6c668420, 0x1e9fd: 0x6cb09a20, 0x1e9fe: 0x6d128220, 0x1e9ff: 0x6c6c4820, + // Block 0x7a8, offset 0x1ea00 + 0x1ea00: 0x6c03a020, 0x1ea01: 0x6c399620, 0x1ea02: 0x6c18d020, 0x1ea03: 0x6d03ee20, + 0x1ea04: 0x6c30ee20, 0x1ea05: 0x6d26c220, 0x1ea06: 0x6cb8e620, 0x1ea07: 0x6c3d7820, + 0x1ea08: 0x6caf6820, 0x1ea09: 0x6ca34820, 0x1ea0a: 0x6d02d820, 0x1ea0b: 0x6c356e20, + 0x1ea0c: 0x6c746020, 0x1ea0d: 0x6c33f820, 0x1ea0e: 0x6c464c20, 0x1ea0f: 0x6d1ae620, + 0x1ea10: 0x6cb99a20, 0x1ea11: 0x6c04ce20, 0x1ea12: 0x6cc97620, 0x1ea13: 0x6cc57220, + 0x1ea14: 0x6c174a20, 0x1ea15: 0x6ca99620, 0x1ea16: 0x6c3b3220, 0x1ea17: 0x6d27ec20, + 0x1ea18: 0x6c614620, 0x1ea19: 0x6cbd7820, 0x1ea1a: 0x6caf6a20, 0x1ea1b: 0x6c4c2020, + 0x1ea1c: 0x6c535a20, 0x1ea1d: 0x6d1a6c20, 0x1ea1e: 0x6c757220, 0x1ea1f: 0x6cd1ca20, + 0x1ea20: 0x6d17ce20, 0x1ea21: 0x6d37ba20, 0x1ea22: 0x6cf7f020, 0x1ea23: 0x6c413a20, + 0x1ea24: 0x6cc64820, 0x1ea25: 0x6c5d8e20, 0x1ea26: 0x6cdf7620, 0x1ea27: 0x6c778820, + 0x1ea28: 0x6d264020, 0x1ea29: 0x6c934a20, 0x1ea2a: 0x6c365020, 0x1ea2b: 0x6cf21c20, + 0x1ea2c: 0x6c345420, 0x1ea2d: 0x6d3e7220, 0x1ea2e: 0x6ca64020, 0x1ea2f: 0x6ce8d020, + 0x1ea30: 0x6cd3aa20, 0x1ea31: 0x6c9f6820, 0x1ea32: 0x6c472220, 0x1ea33: 0x6c780e20, + 0x1ea34: 0x6c8d2420, 0x1ea35: 0x6c0dec20, 0x1ea36: 0x6cd8d020, 0x1ea37: 0x6c47a420, + 0x1ea38: 0x6c0f1c20, 0x1ea39: 0x6caf7820, 0x1ea3a: 0x6d238420, 0x1ea3b: 0x6cd8d220, + 0x1ea3c: 0x6d424820, 0x1ea3d: 0x6c101820, 0x1ea3e: 0x6d1f5020, 0x1ea3f: 0x6ce4b020, + // Block 0x7a9, offset 0x1ea40 + 0x1ea40: 0x6c642220, 0x1ea41: 0x6d317620, 0x1ea42: 0x6cd2d420, 0x1ea43: 0x6cd3ac20, + 0x1ea44: 0x6d347a20, 0x1ea45: 0x6c725220, 0x1ea46: 0x6c14d220, 0x1ea47: 0x6cd1da20, + 0x1ea48: 0x6cd1dc20, 0x1ea49: 0x6d089e20, 0x1ea4a: 0x6d2f6820, 0x1ea4b: 0x6c065420, + 0x1ea4c: 0x6c514e20, 0x1ea4d: 0x6c09e620, 0x1ea4e: 0x6cd10e20, 0x1ea4f: 0x6c1e9620, + 0x1ea50: 0x6cd27820, 0x1ea51: 0x6c0f1e20, 0x1ea52: 0x6d3b0e20, 0x1ea53: 0x6c1c3820, + 0x1ea54: 0x6d289220, 0x1ea55: 0x6cb31420, 0x1ea56: 0x6ce76220, 0x1ea57: 0x6cb9aa20, + 0x1ea58: 0x6c3eb020, 0x1ea59: 0x6d2d3020, 0x1ea5a: 0x6c8f0c20, 0x1ea5b: 0x6cb8f820, + 0x1ea5c: 0x6c3eb220, 0x1ea5d: 0x6c864020, 0x1ea5e: 0x6d26ca20, 0x1ea5f: 0x6caf7a20, + 0x1ea60: 0x6d0f5e20, 0x1ea61: 0x6c04fe20, 0x1ea62: 0x6c0e8020, 0x1ea63: 0x6c6b0020, + 0x1ea64: 0x6c465420, 0x1ea65: 0x6cd5ec20, 0x1ea66: 0x6d32da20, 0x1ea67: 0x6ca24c20, + 0x1ea68: 0x6cf7f220, 0x1ea69: 0x6cf7f420, 0x1ea6a: 0x6c2c7620, 0x1ea6b: 0x6c637420, + 0x1ea6c: 0x6ca29e20, 0x1ea6d: 0x6ce06420, 0x1ea6e: 0x6c588820, 0x1ea6f: 0x6d15f220, + 0x1ea70: 0x6cd7fa20, 0x1ea71: 0x6c7bfe20, 0x1ea72: 0x6c761e20, 0x1ea73: 0x6c06ce20, + 0x1ea74: 0x6c66a020, 0x1ea75: 0x6ce77020, 0x1ea76: 0x6d03f420, 0x1ea77: 0x6c537820, + 0x1ea78: 0x6c691c20, 0x1ea79: 0x6c1bbc20, 0x1ea7a: 0x6c37d820, 0x1ea7b: 0x6c961a20, + 0x1ea7c: 0x6c0dee20, 0x1ea7d: 0x6cd3be20, 0x1ea7e: 0x6ca1dc20, 0x1ea7f: 0x6c637820, + // Block 0x7aa, offset 0x1ea80 + 0x1ea80: 0x6d1a8620, 0x1ea81: 0x6c757c20, 0x1ea82: 0x6d389e20, 0x1ea83: 0x6c1d5620, + 0x1ea84: 0x6cfdf620, 0x1ea85: 0x6ce77220, 0x1ea86: 0x6ca14220, 0x1ea87: 0x6c833e20, + 0x1ea88: 0x6c5f0e20, 0x1ea89: 0x6d23b020, 0x1ea8a: 0x6d071e20, 0x1ea8b: 0x6cc57820, + 0x1ea8c: 0x6d421a20, 0x1ea8d: 0x6d36a220, 0x1ea8e: 0x6cbf4c20, 0x1ea8f: 0x6ccd8e20, + 0x1ea90: 0x6c1c5020, 0x1ea91: 0x6cfc2220, 0x1ea92: 0x6d03f620, 0x1ea93: 0x6cc30e20, + 0x1ea94: 0x6caf8020, 0x1ea95: 0x6ce5fe20, 0x1ea96: 0x6d39c020, 0x1ea97: 0x6cfe4820, + 0x1ea98: 0x6ca01220, 0x1ea99: 0x6c7ada20, 0x1ea9a: 0x6d112c20, 0x1ea9b: 0x6cfac220, + 0x1ea9c: 0x6cfb7620, 0x1ea9d: 0x6d04ea20, 0x1ea9e: 0x6c757e20, 0x1ea9f: 0x6c13aa20, + 0x1eaa0: 0x6c81b620, 0x1eaa1: 0x6c607820, 0x1eaa2: 0x6cb06620, 0x1eaa3: 0x6cc7ba20, + 0x1eaa4: 0x6c9cfe20, 0x1eaa5: 0x6d140820, 0x1eaa6: 0x6d19fa20, 0x1eaa7: 0x6c49f220, + 0x1eaa8: 0x6c019020, 0x1eaa9: 0x6c2fd420, 0x1eaaa: 0x6d1fe020, 0x1eaab: 0x6ccb3820, + 0x1eaac: 0x6c77c620, 0x1eaad: 0x6cb9b620, 0x1eaae: 0x6c944220, 0x1eaaf: 0x6cd90020, + 0x1eab0: 0x6c003020, 0x1eab1: 0x6c2e3220, 0x1eab2: 0x6c4efe20, 0x1eab3: 0x6cc8de20, + 0x1eab4: 0x6cd3cc20, 0x1eab5: 0x6c795020, 0x1eab6: 0x6cc09220, 0x1eab7: 0x6cff0c20, + 0x1eab8: 0x6d308620, 0x1eab9: 0x6d054e20, 0x1eaba: 0x6d2a0c20, 0x1eabb: 0x6ce37020, + 0x1eabc: 0x6c263820, 0x1eabd: 0x6c487020, 0x1eabe: 0x6c53d220, 0x1eabf: 0x6d37c820, + // Block 0x7ab, offset 0x1eac0 + 0x1eac0: 0x6ce7de20, 0x1eac1: 0x6c93ac20, 0x1eac2: 0x6c9a2220, 0x1eac3: 0x6c80e220, + 0x1eac4: 0x6ced4a20, 0x1eac5: 0x6d02e620, 0x1eac6: 0x6d27c420, 0x1eac7: 0x6c075420, + 0x1eac8: 0x6cf51e20, 0x1eac9: 0x6cdb0c20, 0x1eaca: 0x6d23dc20, 0x1eacb: 0x6c151420, + 0x1eacc: 0x6c2fb620, 0x1eacd: 0x6c0f4e20, 0x1eace: 0x6c4f0020, 0x1eacf: 0x6c63de20, + 0x1ead0: 0x6c538420, 0x1ead1: 0x6c249220, 0x1ead2: 0x6c3c6620, 0x1ead3: 0x6c14d620, + 0x1ead4: 0x6ced4c20, 0x1ead5: 0x6d36d020, 0x1ead6: 0x6cd82620, 0x1ead7: 0x6d07ca20, + 0x1ead8: 0x6c575620, 0x1ead9: 0x6d228220, 0x1eada: 0x6ce59e20, 0x1eadb: 0x6c45fa20, + 0x1eadc: 0x6d3d9420, 0x1eadd: 0x6c94bc20, 0x1eade: 0x6d03fc20, 0x1eadf: 0x6cbde620, + 0x1eae0: 0x6cd0c420, 0x1eae1: 0x6c4e2e20, 0x1eae2: 0x6c94be20, 0x1eae3: 0x6d128a20, + 0x1eae4: 0x6c1eac20, 0x1eae5: 0x6d2bae20, 0x1eae6: 0x6c70c420, 0x1eae7: 0x6cfd0220, + 0x1eae8: 0x6ce60020, 0x1eae9: 0x6c987020, 0x1eaea: 0x6cb4b420, 0x1eaeb: 0x6c843620, + 0x1eaec: 0x6cacc020, 0x1eaed: 0x6cc8e020, 0x1eaee: 0x6c1a3220, 0x1eaef: 0x6c435820, + 0x1eaf0: 0x6c852820, 0x1eaf1: 0x6ce28220, 0x1eaf2: 0x6c0e4420, 0x1eaf3: 0x6d3b2420, + 0x1eaf4: 0x6d327e20, 0x1eaf5: 0x6ce87a20, 0x1eaf6: 0x6c8f1820, 0x1eaf7: 0x6d41d420, + 0x1eaf8: 0x6c729a20, 0x1eaf9: 0x6c16fa20, 0x1eafa: 0x6d25f020, 0x1eafb: 0x6c66d820, + 0x1eafc: 0x6c429220, 0x1eafd: 0x6c2e4020, 0x1eafe: 0x6ce24020, 0x1eaff: 0x6c16c620, + // Block 0x7ac, offset 0x1eb00 + 0x1eb00: 0x6c951020, 0x1eb01: 0x6c4cd020, 0x1eb02: 0x6c8d5c20, 0x1eb03: 0x6c06ba20, + 0x1eb04: 0x6c92de20, 0x1eb05: 0x6c845020, 0x1eb06: 0x6cbade20, 0x1eb07: 0x6cb3e220, + 0x1eb08: 0x6c732e20, 0x1eb09: 0x6c9f7a20, 0x1eb0a: 0x6d41d620, 0x1eb0b: 0x6caeca20, + 0x1eb0c: 0x6c01d020, 0x1eb0d: 0x6caf9020, 0x1eb0e: 0x6cfd1420, 0x1eb0f: 0x6d0afa20, + 0x1eb10: 0x6d3c6820, 0x1eb11: 0x6c834620, 0x1eb12: 0x6c783220, 0x1eb13: 0x6c798a20, + 0x1eb14: 0x6cdea820, 0x1eb15: 0x6c7d8420, 0x1eb16: 0x6c31bc20, 0x1eb17: 0x6ca59020, + 0x1eb18: 0x6c20e220, 0x1eb19: 0x6d3e9820, 0x1eb1a: 0x6d32ec20, 0x1eb1b: 0x6c078c20, + 0x1eb1c: 0x6ca87620, 0x1eb1d: 0x6d403620, 0x1eb1e: 0x6c216620, 0x1eb1f: 0x6ce01420, + 0x1eb20: 0x6c2fba20, 0x1eb21: 0x6cb65420, 0x1eb22: 0x6cb9cc20, 0x1eb23: 0x6d3cac20, + 0x1eb24: 0x6c5f4820, 0x1eb25: 0x6d23fa20, 0x1eb26: 0x6c6cb620, 0x1eb27: 0x6c496620, + 0x1eb28: 0x6c990820, 0x1eb29: 0x6c167c20, 0x1eb2a: 0x6ce51c20, 0x1eb2b: 0x6cf6de20, + 0x1eb2c: 0x6c891e20, 0x1eb2d: 0x6ce24220, 0x1eb2e: 0x6c482820, 0x1eb2f: 0x6c263a20, + 0x1eb30: 0x6cd61420, 0x1eb31: 0x6d319c20, 0x1eb32: 0x6c92e020, 0x1eb33: 0x6c9be820, + 0x1eb34: 0x6c92e220, 0x1eb35: 0x6c571820, 0x1eb36: 0x6c0c8020, 0x1eb37: 0x6c40cc20, + 0x1eb38: 0x6c7f2c20, 0x1eb39: 0x6c790e20, 0x1eb3a: 0x6c39ec20, 0x1eb3b: 0x6cf55820, + 0x1eb3c: 0x6ca3d820, 0x1eb3d: 0x6ced9c20, 0x1eb3e: 0x6d299c20, 0x1eb3f: 0x6c570020, + // Block 0x7ad, offset 0x1eb40 + 0x1eb40: 0x6c2a8620, 0x1eb41: 0x6cfada20, 0x1eb42: 0x6cb10220, 0x1eb43: 0x6c5d6020, + 0x1eb44: 0x6c89cc20, 0x1eb45: 0x6c384820, 0x1eb46: 0x6c9ad820, 0x1eb47: 0x6c767220, + 0x1eb48: 0x6d1bf220, 0x1eb49: 0x6c2b4a20, 0x1eb4a: 0x6c892220, 0x1eb4b: 0x6c4c4020, + 0x1eb4c: 0x6cfc3620, 0x1eb4d: 0x6c328220, 0x1eb4e: 0x6ce8fc20, 0x1eb4f: 0x6cef4420, + 0x1eb50: 0x6d3fca20, 0x1eb51: 0x6c406a20, 0x1eb52: 0x6cc76620, 0x1eb53: 0x6c60d220, + 0x1eb54: 0x6c36ba20, 0x1eb55: 0x6c758620, 0x1eb56: 0x6c191420, 0x1eb57: 0x6ce38c20, + 0x1eb58: 0x6d2c5820, 0x1eb59: 0x6c56d420, 0x1eb5a: 0x6d0fe020, 0x1eb5b: 0x6c32de20, + 0x1eb5c: 0x6cfa0420, 0x1eb5d: 0x6d21c220, 0x1eb5e: 0x6c795a20, 0x1eb5f: 0x6d03aa20, + 0x1eb60: 0x6c5a1020, 0x1eb61: 0x6cf03220, 0x1eb62: 0x6c406c20, 0x1eb63: 0x6d2f7620, + 0x1eb64: 0x6c13b620, 0x1eb65: 0x6cbcee20, 0x1eb66: 0x6cd20620, 0x1eb67: 0x6c52d620, + 0x1eb68: 0x6c7ca820, 0x1eb69: 0x6ce51e20, 0x1eb6a: 0x6ca1ee20, 0x1eb6b: 0x6cbbbc20, + 0x1eb6c: 0x6cbbbe20, 0x1eb6d: 0x6c543820, 0x1eb6e: 0x6ce7e020, 0x1eb6f: 0x6c236c20, + 0x1eb70: 0x6c58ae20, 0x1eb71: 0x6d136620, 0x1eb72: 0x6c9f7e20, 0x1eb73: 0x6c66e620, + 0x1eb74: 0x6c32a420, 0x1eb75: 0x6c66da20, 0x1eb76: 0x6cd94220, 0x1eb77: 0x6c7caa20, + 0x1eb78: 0x6c55d220, 0x1eb79: 0x6d07d820, 0x1eb7a: 0x6c34b620, 0x1eb7b: 0x6c6b4a20, + 0x1eb7c: 0x6d31a020, 0x1eb7d: 0x6c0b0e20, 0x1eb7e: 0x6d37d020, 0x1eb7f: 0x6d3ea220, + // Block 0x7ae, offset 0x1eb80 + 0x1eb80: 0x6d04fe20, 0x1eb81: 0x6d129020, 0x1eb82: 0x6c9a6e20, 0x1eb83: 0x6cac3420, + 0x1eb84: 0x6c003620, 0x1eb85: 0x6c6c0c20, 0x1eb86: 0x6cba9420, 0x1eb87: 0x6c9a3220, + 0x1eb88: 0x6cdda220, 0x1eb89: 0x6c26ca20, 0x1eb8a: 0x6c059620, 0x1eb8b: 0x6cfa0a20, + 0x1eb8c: 0x6c887a20, 0x1eb8d: 0x6cddaa20, 0x1eb8e: 0x6c769a20, 0x1eb8f: 0x6c8ec020, + 0x1eb90: 0x6d116420, 0x1eb91: 0x6d137420, 0x1eb92: 0x6caa2e20, 0x1eb93: 0x6cf23e20, + 0x1eb94: 0x6cc6d420, 0x1eb95: 0x6ce15420, 0x1eb96: 0x6cddac20, 0x1eb97: 0x6cbaf220, + 0x1eb98: 0x6c86e020, 0x1eb99: 0x6cd7a620, 0x1eb9a: 0x6c20e420, 0x1eb9b: 0x6c0f9620, + 0x1eb9c: 0x6cac8620, 0x1eb9d: 0x6c266e20, 0x1eb9e: 0x6c089620, 0x1eb9f: 0x6cca9020, + 0x1eba0: 0x6c429420, 0x1eba1: 0x6d3ea620, 0x1eba2: 0x6cf38c20, 0x1eba3: 0x6d1cb420, + 0x1eba4: 0x6c5a7e20, 0x1eba5: 0x6ce5aa20, 0x1eba6: 0x6c8ec220, 0x1eba7: 0x6c767420, + 0x1eba8: 0x6cdd0220, 0x1eba9: 0x6ccc2220, 0x1ebaa: 0x6cd9f020, 0x1ebab: 0x6ceda820, + 0x1ebac: 0x6c507620, 0x1ebad: 0x6d327020, 0x1ebae: 0x6d327220, 0x1ebaf: 0x6c80e820, + 0x1ebb0: 0x6d18fc20, 0x1ebb1: 0x6d25c420, 0x1ebb2: 0x6ce18620, 0x1ebb3: 0x6ca88a20, + 0x1ebb4: 0x6cf7b020, 0x1ebb5: 0x6c638c20, 0x1ebb6: 0x6c43ba20, 0x1ebb7: 0x6c96a820, + 0x1ebb8: 0x6c730620, 0x1ebb9: 0x6cd9a220, 0x1ebba: 0x6d413420, 0x1ebbb: 0x6cddae20, + 0x1ebbc: 0x6cfa5620, 0x1ebbd: 0x6c3d0220, 0x1ebbe: 0x6cf21e20, 0x1ebbf: 0x6ca2ec20, + // Block 0x7af, offset 0x1ebc0 + 0x1ebc0: 0x6c91fa20, 0x1ebc1: 0x6cddb020, 0x1ebc2: 0x6cab6020, 0x1ebc3: 0x6d40f620, + 0x1ebc4: 0x6ce96e20, 0x1ebc5: 0x6d050820, 0x1ebc6: 0x6c49b220, 0x1ebc7: 0x6d08cc20, + 0x1ebc8: 0x6c892620, 0x1ebc9: 0x6cd48620, 0x1ebca: 0x6c02f820, 0x1ebcb: 0x6c97d420, + 0x1ebcc: 0x6ca18020, 0x1ebcd: 0x6c956620, 0x1ebce: 0x6c0a9e20, 0x1ebcf: 0x6cf0fe20, + 0x1ebd0: 0x6c8ed020, 0x1ebd1: 0x6c2bb220, 0x1ebd2: 0x6cca3620, 0x1ebd3: 0x6d401220, + 0x1ebd4: 0x6d158a20, 0x1ebd5: 0x6c932020, 0x1ebd6: 0x6c028220, 0x1ebd7: 0x6c796220, + 0x1ebd8: 0x6cbafa20, 0x1ebd9: 0x6c24f820, 0x1ebda: 0x6cb54e20, 0x1ebdb: 0x6c16d220, + 0x1ebdc: 0x6ce0dc20, 0x1ebdd: 0x6c981020, 0x1ebde: 0x6d1dd020, 0x1ebdf: 0x6c160620, + 0x1ebe0: 0x6c3c7220, 0x1ebe1: 0x6c6ebe20, 0x1ebe2: 0x6c0c4820, 0x1ebe3: 0x6cd62a20, + 0x1ebe4: 0x6c912420, 0x1ebe5: 0x6d055820, 0x1ebe6: 0x6c237420, 0x1ebe7: 0x6c8fce20, + 0x1ebe8: 0x6d29b020, 0x1ebe9: 0x6c670820, 0x1ebea: 0x6c12a220, 0x1ebeb: 0x6c849220, + 0x1ebec: 0x6cfa5c20, 0x1ebed: 0x6cf72020, 0x1ebee: 0x6c776020, 0x1ebef: 0x6cd6f820, + 0x1ebf0: 0x6c086220, 0x1ebf1: 0x6d2f4a20, 0x1ebf2: 0x6cba9620, 0x1ebf3: 0x6c19a620, + 0x1ebf4: 0x6c933420, 0x1ebf5: 0x6c576820, 0x1ebf6: 0x6c60f220, 0x1ebf7: 0x6cb47220, + 0x1ebf8: 0x6c5c8c20, 0x1ebf9: 0x6cbb5020, 0x1ebfa: 0x6cb32420, 0x1ebfb: 0x6c8c0220, + 0x1ebfc: 0x6ccb9020, 0x1ebfd: 0x6d055a20, 0x1ebfe: 0x6cca3c20, 0x1ebff: 0x6c19a820, + // Block 0x7b0, offset 0x1ec00 + 0x1ec00: 0x6c7d3a20, 0x1ec01: 0x6cd84820, 0x1ec02: 0x6c8f5420, 0x1ec03: 0x6ca4d220, + 0x1ec04: 0x6c5a2220, 0x1ec05: 0x6cb1e020, 0x1ec06: 0x6cdcb020, 0x1ec07: 0x6c38ea20, + 0x1ec08: 0x6cbc0e20, 0x1ec09: 0x6cc2aa20, 0x1ec0a: 0x6d0fee20, 0x1ec0b: 0x6ce0de20, + 0x1ec0c: 0x6cfe6620, 0x1ec0d: 0x6c750420, 0x1ec0e: 0x6c68a420, 0x1ec0f: 0x6d41fc20, + 0x1ec10: 0x6c8a4e20, 0x1ec11: 0x6cbd0420, 0x1ec12: 0x6c819020, 0x1ec13: 0x6c338020, + 0x1ec14: 0x6d030620, 0x1ec15: 0x6d295820, 0x1ec16: 0x6c5f8e20, 0x1ec17: 0x6c661e20, + 0x1ec18: 0x6d37da20, 0x1ec19: 0x6c2af620, 0x1ec1a: 0x6d0b0620, 0x1ec1b: 0x6d1d5c20, + 0x1ec1c: 0x6c331e20, 0x1ec1d: 0x6c750620, 0x1ec1e: 0x6caa3020, 0x1ec1f: 0x6d295a20, + 0x1ec20: 0x6cb4a420, 0x1ec21: 0x6ce60620, 0x1ec22: 0x6c38ec20, 0x1ec23: 0x6d2f4c20, + 0x1ec24: 0x6c2f8a20, 0x1ec25: 0x6ccdda20, 0x1ec26: 0x6c764220, 0x1ec27: 0x6c653820, + 0x1ec28: 0x6c3af020, 0x1ec29: 0x6cdcba20, 0x1ec2a: 0x6c920020, 0x1ec2b: 0x6c730c20, + 0x1ec2c: 0x6c5c9420, 0x1ec2d: 0x6d246a20, 0x1ec2e: 0x6c889c20, 0x1ec2f: 0x6d3dcc20, + 0x1ec30: 0x6cbbc820, 0x1ec31: 0x6c672220, 0x1ec32: 0x6d3dde20, 0x1ec33: 0x6c828c20, + 0x1ec34: 0x6c0ac820, 0x1ec35: 0x6ce60820, 0x1ec36: 0x6c58c220, 0x1ec37: 0x6d138c20, + 0x1ec38: 0x6c346c20, 0x1ec39: 0x6c4cd620, 0x1ec3a: 0x6c29ac20, 0x1ec3b: 0x6c72ce20, + 0x1ec3c: 0x6c3bac20, 0x1ec3d: 0x6c26d620, 0x1ec3e: 0x6c077220, 0x1ec3f: 0x6d194a20, + // Block 0x7b1, offset 0x1ec40 + 0x1ec40: 0x6c010820, 0x1ec41: 0x6d3fe220, 0x1ec42: 0x6d0aba20, 0x1ec43: 0x6c2e4e20, + 0x1ec44: 0x6d3b4e20, 0x1ec45: 0x6c528620, 0x1ec46: 0x6d3cc220, 0x1ec47: 0x6c5fa220, + 0x1ec48: 0x6ca8be20, 0x1ec49: 0x6c51a620, 0x1ec4a: 0x6c5e4c20, 0x1ec4b: 0x6cbe6020, + 0x1ec4c: 0x6c0d7020, 0x1ec4d: 0x6d1c3e20, 0x1ec4e: 0x6c7d4020, 0x1ec4f: 0x6ca93c20, + 0x1ec50: 0x6d060e20, 0x1ec51: 0x6c672620, 0x1ec52: 0x6c672820, 0x1ec53: 0x6cba9a20, + 0x1ec54: 0x6c142620, 0x1ec55: 0x6d377220, 0x1ec56: 0x6c9f1620, 0x1ec57: 0x6c84ce20, + 0x1ec58: 0x6c829820, 0x1ec59: 0x6c5fa620, 0x1ec5a: 0x6d416620, 0x1ec5b: 0x6c7c2220, + 0x1ec5c: 0x6cce4420, 0x1ec5d: 0x6caefc20, 0x1ec5e: 0x6c7ece20, 0x1ec5f: 0x6c320020, + 0x1ec60: 0x6cd7b020, 0x1ec61: 0x6c21ec20, 0x1ec62: 0x6c942820, 0x1ec63: 0x6c0c6220, + 0x1ec64: 0x6c068420, 0x1ec65: 0x6c920420, 0x1ec66: 0x6cfd5c20, 0x1ec67: 0x6c7b7e20, + 0x1ec68: 0x6c901020, 0x1ec69: 0x6c36fa20, 0x1ec6a: 0x6c91a220, 0x1ec6b: 0x6d02f820, + 0x1ec6c: 0x6c672c20, 0x1ec6d: 0x6c809420, 0x1ec6e: 0x6c0fd620, 0x1ec6f: 0x6c655620, + 0x1ec70: 0x6d125820, 0x1ec71: 0x6c157e20, 0x1ec72: 0x6cfda620, 0x1ec73: 0x6c673020, + 0x1ec74: 0x6cf76220, 0x1ec75: 0x6c49c820, 0x1ec76: 0x6c125620, 0x1ec77: 0x6ca8d220, + 0x1ec78: 0x6c831620, 0x1ec79: 0x6c249c20, 0x1ec7a: 0x6cc23020, 0x1ec7b: 0x6cacc820, + 0x1ec7c: 0x6c959420, 0x1ec7d: 0x6d414420, 0x1ec7e: 0x6c947a20, 0x1ec7f: 0x6d2a3820, + // Block 0x7b2, offset 0x1ec80 + 0x1ec80: 0x6ca8d820, 0x1ec81: 0x6c753e20, 0x1ec82: 0x6ce19820, 0x1ec83: 0x6cd58e20, + 0x1ec84: 0x6c801c20, 0x1ec85: 0x6c6c2220, 0x1ec86: 0x6c40c420, 0x1ec87: 0x6d15b420, + 0x1ec88: 0x6d312020, 0x1ec89: 0x6c2f5220, 0x1ec8a: 0x6d2f5220, 0x1ec8b: 0x6cb2f020, + 0x1ec8c: 0x6c8a6620, 0x1ec8d: 0x6ce91820, 0x1ec8e: 0x6cb8ba20, 0x1ec8f: 0x6c203220, + 0x1ec90: 0x6cccca20, 0x1ec91: 0x6c5fe820, 0x1ec92: 0x6c388e20, 0x1ec93: 0x6c2e0a20, + 0x1ec94: 0x6c9ac420, 0x1ec95: 0x6caa7020, 0x1ec96: 0x6d0f8c20, 0x1ec97: 0x6c146420, + 0x1ec98: 0x6d03d620, 0x1ec99: 0x6c413020, 0x1ec9a: 0x6c107a20, 0x1ec9b: 0x6cdf6620, + 0x1ec9c: 0x6c721c20, 0x1ec9d: 0x6c33e620, 0x1ec9e: 0x6c173e20, 0x1ec9f: 0x6d37ac20, + 0x1eca0: 0x6ca32220, 0x1eca1: 0x6c06f620, 0x1eca2: 0x6c426a20, 0x1eca3: 0x6c04c420, + 0x1eca4: 0x6cb97a20, 0x1eca5: 0x6d11fa20, 0x1eca6: 0x6cbd2220, 0x1eca7: 0x6c756620, + 0x1eca8: 0x6cf35e20, 0x1eca9: 0x6c463c20, 0x1ecaa: 0x6c778420, 0x1ecab: 0x6c398e20, + 0x1ecac: 0x6c5d8c20, 0x1ecad: 0x6ce80a20, 0x1ecae: 0x6ca98e20, 0x1ecaf: 0x6c039c20, + 0x1ecb0: 0x6d22fa20, 0x1ecb1: 0x6cb98420, 0x1ecb2: 0x6d32aa20, 0x1ecb3: 0x6cb98620, + 0x1ecb4: 0x6c477820, 0x1ecb5: 0x6c0e6820, 0x1ecb6: 0x6c353c20, 0x1ecb7: 0x6cb35220, + 0x1ecb8: 0x6c108e20, 0x1ecb9: 0x6c0ee220, 0x1ecba: 0x6d26a020, 0x1ecbb: 0x6d413820, + 0x1ecbc: 0x6ca28020, 0x1ecbd: 0x6ce05a20, 0x1ecbe: 0x6c641020, 0x1ecbf: 0x6c2d4a20, + // Block 0x7b3, offset 0x1ecc0 + 0x1ecc0: 0x6d1f2620, 0x1ecc1: 0x6ce5f820, 0x1ecc2: 0x6c0ee420, 0x1ecc3: 0x6c8cd620, + 0x1ecc4: 0x6cd77a20, 0x1ecc5: 0x6cb8d020, 0x1ecc6: 0x6c993620, 0x1ecc7: 0x6c064420, + 0x1ecc8: 0x6cd36620, 0x1ecc9: 0x6d088420, 0x1ecca: 0x6cdde820, 0x1eccb: 0x6c097220, + 0x1eccc: 0x6ca5d220, 0x1eccd: 0x6caf5e20, 0x1ecce: 0x6c344220, 0x1eccf: 0x6d03e420, + 0x1ecd0: 0x6c77bc20, 0x1ecd1: 0x6c81b020, 0x1ecd2: 0x6c379420, 0x1ecd3: 0x6c985e20, + 0x1ecd4: 0x6d0ba820, 0x1ecd5: 0x6d1fc620, 0x1ecd6: 0x6c19f620, 0x1ecd7: 0x6c63bc20, + 0x1ecd8: 0x6d127e20, 0x1ecd9: 0x6ca4a820, 0x1ecda: 0x6d361020, 0x1ecdb: 0x6c29aa20, + 0x1ecdc: 0x6ce74620, 0x1ecdd: 0x6c939820, 0x1ecde: 0x6c2e2220, 0x1ecdf: 0x6d19d220, + 0x1ece0: 0x6c765020, 0x1ece1: 0x6d2c2e20, 0x1ece2: 0x6d39a220, 0x1ece3: 0x6cf7e420, + 0x1ece4: 0x6c2fa220, 0x1ece5: 0x6c2fd220, 0x1ece6: 0x6cfaa420, 0x1ece7: 0x6c573a20, + 0x1ece8: 0x6cc2e820, 0x1ece9: 0x6ccbf020, 0x1ecea: 0x6c4cfa20, 0x1eceb: 0x6c2e2420, + 0x1ecec: 0x6c448620, 0x1eced: 0x6c9ffc20, 0x1ecee: 0x6d32be20, 0x1ecef: 0x6ccb2620, + 0x1ecf0: 0x6c68ec20, 0x1ecf1: 0x6d13ec20, 0x1ecf2: 0x6c15b220, 0x1ecf3: 0x6c1d4e20, + 0x1ecf4: 0x6ce0be20, 0x1ecf5: 0x6c018220, 0x1ecf6: 0x6d1a6220, 0x1ecf7: 0x6cc7a820, + 0x1ecf8: 0x6d3b0620, 0x1ecf9: 0x6c815c20, 0x1ecfa: 0x6cb4ac20, 0x1ecfb: 0x6cf3cc20, + 0x1ecfc: 0x6c7f1020, 0x1ecfd: 0x6ce27c20, 0x1ecfe: 0x6c890020, 0x1ecff: 0x6c794420, + // Block 0x7b4, offset 0x1ed00 + 0x1ed00: 0x6cfed020, 0x1ed01: 0x6cdd6820, 0x1ed02: 0x6c851a20, 0x1ed03: 0x6d2bac20, + 0x1ed04: 0x6c1e8620, 0x1ed05: 0x6c4c2220, 0x1ed06: 0x6c434a20, 0x1ed07: 0x6c357020, + 0x1ed08: 0x6d053e20, 0x1ed09: 0x6c262e20, 0x1ed0a: 0x6c94aa20, 0x1ed0b: 0x6c3c5220, + 0x1ed0c: 0x6d02da20, 0x1ed0d: 0x6c8f0a20, 0x1ed0e: 0x6c763220, 0x1ed0f: 0x6c65a220, + 0x1ed10: 0x6cc8d020, 0x1ed11: 0x6ce2f220, 0x1ed12: 0x6c80ce20, 0x1ed13: 0x6cbdda20, + 0x1ed14: 0x6c70a420, 0x1ed15: 0x6c000820, 0x1ed16: 0x6cbac620, 0x1ed17: 0x6d30da20, + 0x1ed18: 0x6cab0020, 0x1ed19: 0x6c263220, 0x1ed1a: 0x6c98ee20, 0x1ed1b: 0x6c078a20, + 0x1ed1c: 0x6cb60620, 0x1ed1d: 0x6c2a7820, 0x1ed1e: 0x6c78be20, 0x1ed1f: 0x6c7d7420, + 0x1ed20: 0x6c167620, 0x1ed21: 0x6cf65e20, 0x1ed22: 0x6c482020, 0x1ed23: 0x6c954c20, + 0x1ed24: 0x6c20da20, 0x1ed25: 0x6d3c6420, 0x1ed26: 0x6c6c9a20, 0x1ed27: 0x6d367420, + 0x1ed28: 0x6cfab620, 0x1ed29: 0x6c732220, 0x1ed2a: 0x6c5d5820, 0x1ed2b: 0x6caddc20, + 0x1ed2c: 0x6cdfee20, 0x1ed2d: 0x6c2fae20, 0x1ed2e: 0x6c66a220, 0x1ed2f: 0x6c725c20, + 0x1ed30: 0x6c9bdc20, 0x1ed31: 0x6d3e6620, 0x1ed32: 0x6cbcdc20, 0x1ed33: 0x6d1bc820, + 0x1ed34: 0x6c766a20, 0x1ed35: 0x6cbad420, 0x1ed36: 0x6cd80a20, 0x1ed37: 0x6c367820, + 0x1ed38: 0x6c13ac20, 0x1ed39: 0x6cbb9420, 0x1ed3a: 0x6d37c420, 0x1ed3b: 0x6c32d620, + 0x1ed3c: 0x6cd9d220, 0x1ed3d: 0x6c59e820, 0x1ed3e: 0x6c588c20, 0x1ed3f: 0x6c003220, + // Block 0x7b5, offset 0x1ed40 + 0x1ed40: 0x6c327020, 0x1ed41: 0x6c9a6420, 0x1ed42: 0x6c911420, 0x1ed43: 0x6d3e7420, + 0x1ed44: 0x6c3ac020, 0x1ed45: 0x6c9a1c20, 0x1ed46: 0x6ca15820, 0x1ed47: 0x6d325c20, + 0x1ed48: 0x6c0f5020, 0x1ed49: 0x6c442a20, 0x1ed4a: 0x6ca86620, 0x1ed4b: 0x6ce18220, + 0x1ed4c: 0x6c730220, 0x1ed4d: 0x6ca86820, 0x1ed4e: 0x6ca2e820, 0x1ed4f: 0x6c8e8e20, + 0x1ed50: 0x6c431e20, 0x1ed51: 0x6c058a20, 0x1ed52: 0x6d186c20, 0x1ed53: 0x6c638020, + 0x1ed54: 0x6c0d4e20, 0x1ed55: 0x6cc6ac20, 0x1ed56: 0x6c0c2420, 0x1ed57: 0x6ce0d620, + 0x1ed58: 0x6c980620, 0x1ed59: 0x6c955420, 0x1ed5a: 0x6c085420, 0x1ed5b: 0x6d1dbc20, + 0x1ed5c: 0x6c6eae20, 0x1ed5d: 0x6c2b4620, 0x1ed5e: 0x6d40dc20, 0x1ed5f: 0x6d08b420, + 0x1ed60: 0x6c8ea620, 0x1ed61: 0x6c153220, 0x1ed62: 0x6c74d020, 0x1ed63: 0x6c8aac20, + 0x1ed64: 0x6cb46420, 0x1ed65: 0x6c91e220, 0x1ed66: 0x6c336e20, 0x1ed67: 0x6c7fc820, + 0x1ed68: 0x6cb49e20, 0x1ed69: 0x6c249420, 0x1ed6a: 0x6cbae820, 0x1ed6b: 0x6c2aee20, + 0x1ed6c: 0x6c5e1e20, 0x1ed6d: 0x6c826e20, 0x1ed6e: 0x6c58b220, 0x1ed6f: 0x6d3dc420, + 0x1ed70: 0x6c887c20, 0x1ed71: 0x6d18fe20, 0x1ed72: 0x6c142420, 0x1ed73: 0x6c0c4e20, + 0x1ed74: 0x6c7eba20, 0x1ed75: 0x6c157020, 0x1ed76: 0x6cfda020, 0x1ed77: 0x6d2f0020, + 0x1ed78: 0x6c169c20, 0x1ed79: 0x6c6fbc20, 0x1ed7a: 0x6c02a420, 0x1ed7b: 0x6c2eb820, + 0x1ed7c: 0x6cc13c20, 0x1ed7d: 0x6c8a8420, 0x1ed7e: 0x6c9caa20, 0x1ed7f: 0x6d2efa20, + // Block 0x7b6, offset 0x1ed80 + 0x1ed80: 0x6c9ac620, 0x1ed81: 0x6c96b620, 0x1ed82: 0x6cd68220, 0x1ed83: 0x6ccd3c20, + 0x1ed84: 0x6c5db420, 0x1ed85: 0x6c9ac820, 0x1ed86: 0x6d0c8e20, 0x1ed87: 0x6c098e20, + 0x1ed88: 0x6c4eba20, 0x1ed89: 0x6c099020, 0x1ed8a: 0x6ccdfa20, 0x1ed8b: 0x6c763420, + 0x1ed8c: 0x6c778a20, 0x1ed8d: 0x6c07f220, 0x1ed8e: 0x6c535c20, 0x1ed8f: 0x6cc8fe20, + 0x1ed90: 0x6cca5820, 0x1ed91: 0x6cfb6420, 0x1ed92: 0x6cfb6620, 0x1ed93: 0x6c64ac20, + 0x1ed94: 0x6c9fb420, 0x1ed95: 0x6cf96820, 0x1ed96: 0x6cd74020, 0x1ed97: 0x6c312020, + 0x1ed98: 0x6d2c3c20, 0x1ed99: 0x6ca53420, 0x1ed9a: 0x6d2d8820, 0x1ed9b: 0x6cae7820, + 0x1ed9c: 0x6cfa2220, 0x1ed9d: 0x6c8d2820, 0x1ed9e: 0x6c0bae20, 0x1ed9f: 0x6c09e820, + 0x1eda0: 0x6cc90020, 0x1eda1: 0x6c00be20, 0x1eda2: 0x6c492020, 0x1eda3: 0x6c441620, + 0x1eda4: 0x6c441820, 0x1eda5: 0x6c382220, 0x1eda6: 0x6c1f6620, 0x1eda7: 0x6c53c820, + 0x1eda8: 0x6c4a7e20, 0x1eda9: 0x6c9fbe20, 0x1edaa: 0x6ccb1220, 0x1edab: 0x6c7dc020, + 0x1edac: 0x6c812c20, 0x1edad: 0x6c935a20, 0x1edae: 0x6ce68820, 0x1edaf: 0x6ccc7620, + 0x1edb0: 0x6c714820, 0x1edb1: 0x6d26e420, 0x1edb2: 0x6d26e620, 0x1edb3: 0x6c15e020, + 0x1edb4: 0x6cc27620, 0x1edb5: 0x6c8c6a20, 0x1edb6: 0x6c167e20, 0x1edb7: 0x6ccca420, + 0x1edb8: 0x6c7dc220, 0x1edb9: 0x6d0c3020, 0x1edba: 0x6cf1b220, 0x1edbb: 0x6d0cd420, + 0x1edbc: 0x6c36b020, 0x1edbd: 0x6c5cda20, 0x1edbe: 0x6d23fc20, 0x1edbf: 0x6cf1b420, + // Block 0x7b7, offset 0x1edc0 + 0x1edc0: 0x6cfe6020, 0x1edc1: 0x6c05be20, 0x1edc2: 0x6c53d620, 0x1edc3: 0x6cc28020, + 0x1edc4: 0x6d11dc20, 0x1edc5: 0x6cf1ba20, 0x1edc6: 0x6c04d820, 0x1edc7: 0x6c01d220, + 0x1edc8: 0x6cef4620, 0x1edc9: 0x6d1a1020, 0x1edca: 0x6c7e2020, 0x1edcb: 0x6cc40a20, + 0x1edcc: 0x6c7fca20, 0x1edcd: 0x6c317c20, 0x1edce: 0x6cc38620, 0x1edcf: 0x6c3c6e20, + 0x1edd0: 0x6ce4cc20, 0x1edd1: 0x6ca88c20, 0x1edd2: 0x6cdec420, 0x1edd3: 0x6c767620, + 0x1edd4: 0x6c518a20, 0x1edd5: 0x6cc40e20, 0x1edd6: 0x6c209c20, 0x1edd7: 0x6c493020, + 0x1edd8: 0x6c314620, 0x1edd9: 0x6cb72420, 0x1edda: 0x6c7c4e20, 0x1eddb: 0x6ce15c20, + 0x1eddc: 0x6c493420, 0x1eddd: 0x6cb18a20, 0x1edde: 0x6c771820, 0x1eddf: 0x6cf92420, + 0x1ede0: 0x6c5c8e20, 0x1ede1: 0x6c160e20, 0x1ede2: 0x6cb0dc20, 0x1ede3: 0x6c29a420, + 0x1ede4: 0x6c58c420, 0x1ede5: 0x6cdeda20, 0x1ede6: 0x6cf1c220, 0x1ede7: 0x6cde0220, + 0x1ede8: 0x6c9abe20, 0x1ede9: 0x6cd67e20, 0x1edea: 0x6ccd2820, 0x1edeb: 0x6d0e3820, + 0x1edec: 0x6c4e8820, 0x1eded: 0x6c090e20, 0x1edee: 0x6cf1f820, 0x1edef: 0x6c208c20, + 0x1edf0: 0x6cc8f820, 0x1edf1: 0x6ceee620, 0x1edf2: 0x6cfb2820, 0x1edf3: 0x6c52fe20, + 0x1edf4: 0x6c646620, 0x1edf5: 0x6c9f9220, 0x1edf6: 0x6c772620, 0x1edf7: 0x6c9aea20, + 0x1edf8: 0x6d2c2420, 0x1edf9: 0x6ca52a20, 0x1edfa: 0x6c4a4220, 0x1edfb: 0x6cf18820, + 0x1edfc: 0x6cde3e20, 0x1edfd: 0x6c9fa020, 0x1edfe: 0x6c935420, 0x1edff: 0x6c764e20, + // Block 0x7b8, offset 0x1ee00 + 0x1ee00: 0x6c380a20, 0x1ee01: 0x6c43ce20, 0x1ee02: 0x6c50e620, 0x1ee03: 0x6c7da420, + 0x1ee04: 0x6c6f6820, 0x1ee05: 0x6d26a220, 0x1ee06: 0x6c80b020, 0x1ee07: 0x6c316c20, + 0x1ee08: 0x6d232820, 0x1ee09: 0x6d0c0420, 0x1ee0a: 0x6c166c20, 0x1ee0b: 0x6cf88020, + 0x1ee0c: 0x6cf19420, 0x1ee0d: 0x6c5cc620, 0x1ee0e: 0x6d0c9020, 0x1ee0f: 0x6c362020, + 0x1ee10: 0x6c15b420, 0x1ee11: 0x6c7fa020, 0x1ee12: 0x6cc27020, 0x1ee13: 0x6c5bce20, + 0x1ee14: 0x6c7e0220, 0x1ee15: 0x6cc3c620, 0x1ee16: 0x6c515020, 0x1ee17: 0x6ce4b220, + 0x1ee18: 0x6c26b220, 0x1ee19: 0x6cc39020, 0x1ee1a: 0x6c4e5e20, 0x1ee1b: 0x6c58a220, + 0x1ee1c: 0x6c3fba20, 0x1ee1d: 0x6c3f9e20, 0x1ee1e: 0x6c820620, 0x1ee1f: 0x6c332a20, + 0x1ee20: 0x6d031020, 0x1ee21: 0x6cb89020, 0x1ee22: 0x6cf49a20, 0x1ee23: 0x6c412620, + 0x1ee24: 0x6d356a20, 0x1ee25: 0x6d19a020, 0x1ee26: 0x6d0f7820, 0x1ee27: 0x6c30d620, + 0x1ee28: 0x6c35ce20, 0x1ee29: 0x6cd0d620, 0x1ee2a: 0x6c04b220, 0x1ee2b: 0x6cadc620, + 0x1ee2c: 0x6c792220, 0x1ee2d: 0x6d27d420, 0x1ee2e: 0x6cc84c20, 0x1ee2f: 0x6d34da20, + 0x1ee30: 0x6cafac20, 0x1ee31: 0x6c6e0420, 0x1ee32: 0x6c39a020, 0x1ee33: 0x6d0f7a20, + 0x1ee34: 0x6d19a220, 0x1ee35: 0x6d321020, 0x1ee36: 0x6c69f420, 0x1ee37: 0x6c195020, + 0x1ee38: 0x6c35d620, 0x1ee39: 0x6cc0d620, 0x1ee3a: 0x6c2bd220, 0x1ee3b: 0x6d410a20, + 0x1ee3c: 0x6d427820, 0x1ee3d: 0x6c2d3820, 0x1ee3e: 0x6c8e0820, 0x1ee3f: 0x6c000220, + // Block 0x7b9, offset 0x1ee40 + 0x1ee40: 0x6ceae620, 0x1ee41: 0x6ceae820, 0x1ee42: 0x6c068c20, 0x1ee43: 0x6c0dc020, + 0x1ee44: 0x6c3fae20, 0x1ee45: 0x6c618e20, 0x1ee46: 0x6c921420, 0x1ee47: 0x6c902c20, + 0x1ee48: 0x6c18a220, 0x1ee49: 0x6d03c220, 0x1ee4a: 0x6c34ce20, 0x1ee4b: 0x6c910220, + 0x1ee4c: 0x6ca0da20, 0x1ee4d: 0x6c67d620, 0x1ee4e: 0x6cd4ae20, 0x1ee4f: 0x6c34d020, + 0x1ee50: 0x6cfc8620, 0x1ee51: 0x6c373820, 0x1ee52: 0x6c4acc20, 0x1ee53: 0x6d207c20, + 0x1ee54: 0x6c40e220, 0x1ee55: 0x6ccd2e20, 0x1ee56: 0x6c759e20, 0x1ee57: 0x6cbc3420, + 0x1ee58: 0x6d03d820, 0x1ee59: 0x6c213620, 0x1ee5a: 0x6c3fd820, 0x1ee5b: 0x6c095820, + 0x1ee5c: 0x6cf99e20, 0x1ee5d: 0x6ccd3820, 0x1ee5e: 0x6cd0f620, 0x1ee5f: 0x6d35aa20, + 0x1ee60: 0x6cb40420, 0x1ee61: 0x6c30e420, 0x1ee62: 0x6d260620, 0x1ee63: 0x6d322820, + 0x1ee64: 0x6c1e7620, 0x1ee65: 0x6cfc9820, 0x1ee66: 0x6c2a5620, 0x1ee67: 0x6ca7fe20, + 0x1ee68: 0x6d27e020, 0x1ee69: 0x6cfbf020, 0x1ee6a: 0x6cadce20, 0x1ee6b: 0x6c3aa020, + 0x1ee6c: 0x6d404e20, 0x1ee6d: 0x6d174c20, 0x1ee6e: 0x6c334820, 0x1ee6f: 0x6c94e620, + 0x1ee70: 0x6d19c420, 0x1ee71: 0x6c707820, 0x1ee72: 0x6c20c620, 0x1ee73: 0x6c18ba20, + 0x1ee74: 0x6cafd620, 0x1ee75: 0x6c8cd820, 0x1ee76: 0x6ce21420, 0x1ee77: 0x6cfcae20, + 0x1ee78: 0x6c923020, 0x1ee79: 0x6cd0fc20, 0x1ee7a: 0x6cfc0a20, 0x1ee7b: 0x6d19d420, + 0x1ee7c: 0x6d3a6220, 0x1ee7d: 0x6d0fb020, 0x1ee7e: 0x6cc62c20, 0x1ee7f: 0x6cf9bc20, + // Block 0x7ba, offset 0x1ee80 + 0x1ee80: 0x6c1d1420, 0x1ee81: 0x6d0e6820, 0x1ee82: 0x6d19d620, 0x1ee83: 0x6cd5ce20, + 0x1ee84: 0x6c2b2c20, 0x1ee85: 0x6d210c20, 0x1ee86: 0x6c8f9220, 0x1ee87: 0x6cee7820, + 0x1ee88: 0x6cee7a20, 0x1ee89: 0x6ca82420, 0x1ee8a: 0x6c334a20, 0x1ee8b: 0x6cdbf220, + 0x1ee8c: 0x6c018420, 0x1ee8d: 0x6c59b620, 0x1ee8e: 0x6c6a0620, 0x1ee8f: 0x6cdbf420, + 0x1ee90: 0x6d1ae220, 0x1ee91: 0x6c413c20, 0x1ee92: 0x6d0d9a20, 0x1ee93: 0x6c5abe20, + 0x1ee94: 0x6c43fc20, 0x1ee95: 0x6d27ee20, 0x1ee96: 0x6cf4f220, 0x1ee97: 0x6c7c6c20, + 0x1ee98: 0x6c009e20, 0x1ee99: 0x6cf89820, 0x1ee9a: 0x6ce10c20, 0x1ee9b: 0x6c623020, + 0x1ee9c: 0x6d2f3620, 0x1ee9d: 0x6c29de20, 0x1ee9e: 0x6c024820, 0x1ee9f: 0x6cf8aa20, + 0x1eea0: 0x6d1aee20, 0x1eea1: 0x6cc9be20, 0x1eea2: 0x6cc53a20, 0x1eea3: 0x6c8bca20, + 0x1eea4: 0x6ce9b220, 0x1eea5: 0x6c2ade20, 0x1eea6: 0x6c693820, 0x1eea7: 0x6cdc5820, + 0x1eea8: 0x6cdbfa20, 0x1eea9: 0x6c02e220, 0x1eeaa: 0x6cfc2620, 0x1eeab: 0x6c3b8220, + 0x1eeac: 0x6ca64c20, 0x1eead: 0x6c376820, 0x1eeae: 0x6c5f4a20, 0x1eeaf: 0x6c29ec20, + 0x1eeb0: 0x6cf7a620, 0x1eeb1: 0x6d1b0a20, 0x1eeb2: 0x6c358220, 0x1eeb3: 0x6c5af420, + 0x1eeb4: 0x6c903c20, 0x1eeb5: 0x6cf72220, 0x1eeb6: 0x6c859820, 0x1eeb7: 0x6c868820, + 0x1eeb8: 0x6c86b420, 0x1eeb9: 0x6d3c5620, 0x1eeba: 0x6c553a20, 0x1eebb: 0x6d33d220, + 0x1eebc: 0x6cdcea20, 0x1eebd: 0x6c735220, 0x1eebe: 0x6ca3f620, 0x1eebf: 0x6d178820, + // Block 0x7bb, offset 0x1eec0 + 0x1eec0: 0x6cc3ba20, 0x1eec1: 0x6d0e7e20, 0x1eec2: 0x6cbd7a20, 0x1eec3: 0x6cb8e820, + 0x1eec4: 0x6d047c20, 0x1eec5: 0x6d0b5420, 0x1eec6: 0x6c604620, 0x1eec7: 0x6c481820, + 0x1eec8: 0x6c587a20, 0x1eec9: 0x6d367620, 0x1eeca: 0x6c46c020, 0x1eecb: 0x6c736e20, + 0x1eecc: 0x6c225620, 0x1eecd: 0x6d1d9420, 0x1eece: 0x6c70b020, 0x1eecf: 0x6c1e9820, + 0x1eed0: 0x6c54f020, 0x1eed1: 0x6d28c420, 0x1eed2: 0x6c961c20, 0x1eed3: 0x6d219620, + 0x1eed4: 0x6c1dde20, 0x1eed5: 0x6c2de020, 0x1eed6: 0x6cdbe020, 0x1eed7: 0x6c4f2820, + 0x1eed8: 0x6cf32220, 0x1eed9: 0x6cd6a620, 0x1eeda: 0x6c49ae20, 0x1eedb: 0x6c1ec220, + 0x1eedc: 0x6d28d220, 0x1eedd: 0x6d1dcc20, 0x1eede: 0x6c5f7c20, 0x1eedf: 0x6cf70c20, + 0x1eee0: 0x6c1dfe20, 0x1eee1: 0x6c8f5220, 0x1eee2: 0x6c847e20, 0x1eee3: 0x6ca41420, + 0x1eee4: 0x6d092c20, 0x1eee5: 0x6d28e420, 0x1eee6: 0x6c610820, 0x1eee7: 0x6c610a20, + 0x1eee8: 0x6d222220, 0x1eee9: 0x6d211020, 0x1eeea: 0x6d093020, 0x1eeeb: 0x6ca2f820, + 0x1eeec: 0x6c3d2e20, 0x1eeed: 0x6ccb2820, 0x1eeee: 0x6ca28e20, 0x1eeef: 0x6cf19820, + 0x1eef0: 0x6c3b3620, 0x1eef1: 0x6cacda20, 0x1eef2: 0x6d27aa20, 0x1eef3: 0x6c862220, + 0x1eef4: 0x6c1c3a20, 0x1eef5: 0x6d0f6020, 0x1eef6: 0x6c8d2a20, 0x1eef7: 0x6c823e20, + 0x1eef8: 0x6c016e20, 0x1eef9: 0x6c05ce20, 0x1eefa: 0x6cf50420, 0x1eefb: 0x6c2d6a20, + 0x1eefc: 0x6c297420, 0x1eefd: 0x6c56ac20, 0x1eefe: 0x6cf50620, 0x1eeff: 0x6c2e3420, + // Block 0x7bc, offset 0x1ef00 + 0x1ef00: 0x6d05c220, 0x1ef01: 0x6c625820, 0x1ef02: 0x6ca2a820, 0x1ef03: 0x6c18e820, + 0x1ef04: 0x6cff1020, 0x1ef05: 0x6d2cde20, 0x1ef06: 0x6ce68a20, 0x1ef07: 0x6d325e20, + 0x1ef08: 0x6cae2820, 0x1ef09: 0x6c9a2420, 0x1ef0a: 0x6c8d4c20, 0x1ef0b: 0x6cb53420, + 0x1ef0c: 0x6d38b020, 0x1ef0d: 0x6c5e0220, 0x1ef0e: 0x6ccc7c20, 0x1ef0f: 0x6c3a1a20, + 0x1ef10: 0x6c538a20, 0x1ef11: 0x6d2da020, 0x1ef12: 0x6d1a0820, 0x1ef13: 0x6ca60820, + 0x1ef14: 0x6d3b2e20, 0x1ef15: 0x6cea6e20, 0x1ef16: 0x6c8be420, 0x1ef17: 0x6c8e3020, + 0x1ef18: 0x6c308e20, 0x1ef19: 0x6d1bf620, 0x1ef1a: 0x6cf53220, 0x1ef1b: 0x6c8d7420, + 0x1ef1c: 0x6cd6a420, 0x1ef1d: 0x6c8d7620, 0x1ef1e: 0x6cfa0620, 0x1ef1f: 0x6c539020, + 0x1ef20: 0x6d1a1220, 0x1ef21: 0x6c974420, 0x1ef22: 0x6c974620, 0x1ef23: 0x6d280620, + 0x1ef24: 0x6c8f4c20, 0x1ef25: 0x6c9c1620, 0x1ef26: 0x6c0d6a20, 0x1ef27: 0x6cf54020, + 0x1ef28: 0x6cf10020, 0x1ef29: 0x6c7e2a20, 0x1ef2a: 0x6d1aac20, 0x1ef2b: 0x6cf7b220, + 0x1ef2c: 0x6d191e20, 0x1ef2d: 0x6c008020, 0x1ef2e: 0x6c28e420, 0x1ef2f: 0x6ce2e420, + 0x1ef30: 0x6cca4020, 0x1ef31: 0x6d246c20, 0x1ef32: 0x6c933620, 0x1ef33: 0x6c8fd020, + 0x1ef34: 0x6c27a820, 0x1ef35: 0x6c60f420, 0x1ef36: 0x6cacec20, 0x1ef37: 0x6d0ff420, + 0x1ef38: 0x6c03d620, 0x1ef39: 0x6cafa420, 0x1ef3a: 0x6cef7020, 0x1ef3b: 0x6c3c8420, + 0x1ef3c: 0x6cf93420, 0x1ef3d: 0x6c62e420, 0x1ef3e: 0x6c970e20, 0x1ef3f: 0x6c9bac20, + // Block 0x7bd, offset 0x1ef40 + 0x1ef40: 0x6c9bae20, 0x1ef41: 0x6c829a20, 0x1ef42: 0x6c87ae20, 0x1ef43: 0x6c5e5820, + 0x1ef44: 0x6c008220, 0x1ef45: 0x6c3b0220, 0x1ef46: 0x6c27ae20, 0x1ef47: 0x6c901220, + 0x1ef48: 0x6c8db620, 0x1ef49: 0x6c010e20, 0x1ef4a: 0x6c3c8e20, 0x1ef4b: 0x6c87c820, + 0x1ef4c: 0x6c062620, 0x1ef4d: 0x6c521820, 0x1ef4e: 0x6c521020, 0x1ef4f: 0x6c521420, + 0x1ef50: 0x6c0e3e20, 0x1ef51: 0x6cbe3020, 0x1ef52: 0x6cbe3220, 0x1ef53: 0x6c6e8a20, + 0x1ef54: 0x6ce46c20, 0x1ef55: 0x6d317820, 0x1ef56: 0x6c6e9220, 0x1ef57: 0x6c198420, + 0x1ef58: 0x6cbed420, 0x1ef59: 0x6c6e9c20, 0x1ef5a: 0x6c6ea620, 0x1ef5b: 0x6c2d8620, + 0x1ef5c: 0x6c6eb020, 0x1ef5d: 0x6ce47a20, 0x1ef5e: 0x6c39f220, 0x1ef5f: 0x6c3a0a20, + 0x1ef60: 0x6c77c820, 0x1ef61: 0x6c9c9220, 0x1ef62: 0x6c9e5620, 0x1ef63: 0x6c9e5020, + 0x1ef64: 0x6c065a20, 0x1ef65: 0x6d133420, 0x1ef66: 0x6ce52020, 0x1ef67: 0x6c5c9820, + 0x1ef68: 0x6d139c20, 0x1ef69: 0x6c43d020, 0x1ef6a: 0x6c2f5e20, 0x1ef6b: 0x6c13ea20, + 0x1ef6c: 0x6cb9a020, 0x1ef6d: 0x6cc5f820, 0x1ef6e: 0x6c2b7020, 0x1ef6f: 0x6c326020, + 0x1ef70: 0x6cf4f420, 0x1ef71: 0x6cc5fa20, 0x1ef72: 0x6cbd8820, 0x1ef73: 0x6c6d2020, + 0x1ef74: 0x6d08e420, 0x1ef75: 0x6ca99e20, 0x1ef76: 0x6c03a220, 0x1ef77: 0x6d1af020, + 0x1ef78: 0x6cc95020, 0x1ef79: 0x6ca35e20, 0x1ef7a: 0x6ca14420, 0x1ef7b: 0x6d412220, + 0x1ef7c: 0x6c26b620, 0x1ef7d: 0x6c050020, 0x1ef7e: 0x6d183e20, 0x1ef7f: 0x6d121a20, + // Block 0x7be, offset 0x1ef80 + 0x1ef80: 0x6ce23420, 0x1ef81: 0x6c074c20, 0x1ef82: 0x6c63d820, 0x1ef83: 0x6c537a20, + 0x1ef84: 0x6cad6220, 0x1ef85: 0x6d0f6420, 0x1ef86: 0x6c0e4220, 0x1ef87: 0x6d1a0020, + 0x1ef88: 0x6c442c20, 0x1ef89: 0x6ce23c20, 0x1ef8a: 0x6c6b2e20, 0x1ef8b: 0x6d00e420, + 0x1ef8c: 0x6c014820, 0x1ef8d: 0x6c014a20, 0x1ef8e: 0x6c523620, 0x1ef8f: 0x6c45fc20, + 0x1ef90: 0x6cb88a20, 0x1ef91: 0x6c26c220, 0x1ef92: 0x6cbbf420, 0x1ef93: 0x6ce64a20, + 0x1ef94: 0x6c978620, 0x1ef95: 0x6d1d4e20, 0x1ef96: 0x6cdbde20, 0x1ef97: 0x6ce5a020, + 0x1ef98: 0x6cbc6220, 0x1ef99: 0x6d08b820, 0x1ef9a: 0x6c79ac20, 0x1ef9b: 0x6c083420, + 0x1ef9c: 0x6cdeb420, 0x1ef9d: 0x6cce5820, 0x1ef9e: 0x6c0dfa20, 0x1ef9f: 0x6c7e2220, + 0x1efa0: 0x6c70d420, 0x1efa1: 0x6c7eda20, 0x1efa2: 0x6d024a20, 0x1efa3: 0x6cc76820, + 0x1efa4: 0x6c054420, 0x1efa5: 0x6c372c20, 0x1efa6: 0x6cbfd620, 0x1efa7: 0x6cbfd820, + 0x1efa8: 0x6c518c20, 0x1efa9: 0x6d001620, 0x1efaa: 0x6ca2ba20, 0x1efab: 0x6c70da20, + 0x1efac: 0x6c650a20, 0x1efad: 0x6c0b1620, 0x1efae: 0x6c2b4c20, 0x1efaf: 0x6c651c20, + 0x1efb0: 0x6cf16e20, 0x1efb1: 0x6ce1fa20, 0x1efb2: 0x6c466620, 0x1efb3: 0x6cdec620, + 0x1efb4: 0x6c076c20, 0x1efb5: 0x6d011c20, 0x1efb6: 0x6cac8820, 0x1efb7: 0x6c445420, + 0x1efb8: 0x6c0ab020, 0x1efb9: 0x6c7e2e20, 0x1efba: 0x6ce0e020, 0x1efbb: 0x6c90d420, + 0x1efbc: 0x6c4ba420, 0x1efbd: 0x6cbc1220, 0x1efbe: 0x6d08ee20, 0x1efbf: 0x6c5f9820, + // Block 0x7bf, offset 0x1efc0 + 0x1efc0: 0x6c654820, 0x1efc1: 0x6c679820, 0x1efc2: 0x6c164c20, 0x1efc3: 0x6c26d820, + 0x1efc4: 0x6c56e820, 0x1efc5: 0x6cfc6420, 0x1efc6: 0x6cb96020, 0x1efc7: 0x6c320420, + 0x1efc8: 0x6cec4420, 0x1efc9: 0x6c655a20, 0x1efca: 0x6c801e20, 0x1efcb: 0x6ceeee20, + 0x1efcc: 0x6cc5fc20, 0x1efcd: 0x6c3ecc20, 0x1efce: 0x6c9aa220, 0x1efcf: 0x6cc37820, + 0x1efd0: 0x6c442e20, 0x1efd1: 0x6cf01020, 0x1efd2: 0x6cbc6420, 0x1efd3: 0x6c4e3e20, + 0x1efd4: 0x6c172820, 0x1efd5: 0x6c7e3420, 0x1efd6: 0x6cc77c20, 0x1efd7: 0x6d286620, + 0x1efd8: 0x6ccf8020, 0x1efd9: 0x6cf04620, 0x1efda: 0x6c444e20, 0x1efdb: 0x6c046220, + 0x1efdc: 0x6ce1fc20, 0x1efdd: 0x6c466820, 0x1efde: 0x6d286c20, 0x1efdf: 0x6c435e20, + 0x1efe0: 0x6c0ab220, 0x1efe1: 0x6cf05220, 0x1efe2: 0x6cdcc220, 0x1efe3: 0x6c31fa20, + 0x1efe4: 0x6cec4620, 0x1efe5: 0x6c320620, 0x1efe6: 0x6ceed820, 0x1efe7: 0x6cc5cc20, + 0x1efe8: 0x6c3e2820, 0x1efe9: 0x6c4e1a20, 0x1efea: 0x6cefea20, 0x1efeb: 0x6d283e20, + 0x1efec: 0x6ce1e020, 0x1efed: 0x6c6fb420, 0x1efee: 0x6c6fc420, 0x1efef: 0x6cfad220, + 0x1eff0: 0x6d022820, 0x1eff1: 0x6cfae220, 0x1eff2: 0x6c5f8820, 0x1eff3: 0x6d19ba20, + 0x1eff4: 0x6d28c220, 0x1eff5: 0x6d284020, 0x1eff6: 0x6ccea820, 0x1eff7: 0x6c822420, + 0x1eff8: 0x6caecc20, 0x1eff9: 0x6c5a2020, 0x1effa: 0x6d1c0420, 0x1effb: 0x6d287220, + 0x1effc: 0x6caef020, 0x1effd: 0x6c016020, 0x1effe: 0x6d1a1820, 0x1efff: 0x6cfe0a20, + // Block 0x7c0, offset 0x1f000 + 0x1f000: 0x6c56ea20, 0x1f001: 0x6d12dc20, 0x1f002: 0x6c2f6e20, 0x1f003: 0x6cbea820, + 0x1f004: 0x6c7c7020, 0x1f005: 0x6cfe3a20, 0x1f006: 0x6cd75420, 0x1f007: 0x6c4daa20, + 0x1f008: 0x6d05ae20, 0x1f009: 0x6d152a20, 0x1f00a: 0x6d05b620, 0x1f00b: 0x6c35b420, + 0x1f00c: 0x6cd99020, 0x1f00d: 0x6c7cd820, 0x1f00e: 0x6cb60c20, 0x1f00f: 0x6c4f8220, + 0x1f010: 0x6d238620, 0x1f011: 0x6cece020, 0x1f012: 0x6c048c20, 0x1f013: 0x6c33fe20, + 0x1f014: 0x6c2b8620, 0x1f015: 0x6c27f220, 0x1f016: 0x6cacbe20, 0x1f017: 0x6cb31820, + 0x1f018: 0x6c8e1220, 0x1f019: 0x6c182e20, 0x1f01a: 0x6c6e2620, 0x1f01b: 0x6c834020, + 0x1f01c: 0x6c516a20, 0x1f01d: 0x6cbb9e20, 0x1f01e: 0x6c36a020, 0x1f01f: 0x6c357c20, + 0x1f020: 0x6cf01220, 0x1f021: 0x6d00e620, 0x1f022: 0x6c7e1020, 0x1f023: 0x6cd07020, + 0x1f024: 0x6d156620, 0x1f025: 0x6cd07a20, 0x1f026: 0x6c4d2420, 0x1f027: 0x6c332820, + 0x1f028: 0x6d228420, 0x1f029: 0x6cb26620, 0x1f02a: 0x6c834220, 0x1f02b: 0x6c3f8420, + 0x1f02c: 0x6c63e020, 0x1f02d: 0x6ce7f820, 0x1f02e: 0x6c5c4a20, 0x1f02f: 0x6c7ca020, + 0x1f030: 0x6c63ec20, 0x1f031: 0x6c953220, 0x1f032: 0x6ce6e220, 0x1f033: 0x6c199820, + 0x1f034: 0x6d1d1020, 0x1f035: 0x6d276a20, 0x1f036: 0x6c55c620, 0x1f037: 0x6c4f1020, + 0x1f038: 0x6c6e3620, 0x1f039: 0x6ce9be20, 0x1f03a: 0x6ce9c020, 0x1f03b: 0x6cb21420, + 0x1f03c: 0x6c7f5a20, 0x1f03d: 0x6ce9c220, 0x1f03e: 0x6d3eb420, 0x1f03f: 0x6d3eb220, + // Block 0x7c1, offset 0x1f040 + 0x1f040: 0x6c20e620, 0x1f041: 0x6c2fc020, 0x1f042: 0x6c7f5c20, 0x1f043: 0x6ce02020, + 0x1f044: 0x6c4f2220, 0x1f045: 0x6cb93220, 0x1f046: 0x6c783820, 0x1f047: 0x6c257220, + 0x1f048: 0x6d085e20, 0x1f049: 0x6cbd4420, 0x1f04a: 0x6d157820, 0x1f04b: 0x6cc9d420, + 0x1f04c: 0x6ce39e20, 0x1f04d: 0x6c358a20, 0x1f04e: 0x6c36ca20, 0x1f04f: 0x6d0ce220, + 0x1f050: 0x6cf21420, 0x1f051: 0x6c76f820, 0x1f052: 0x6d1e0220, 0x1f053: 0x6d3b9820, + 0x1f054: 0x6d0ce420, 0x1f055: 0x6cfc3c20, 0x1f056: 0x6d035220, 0x1f057: 0x6d162620, + 0x1f058: 0x6d263820, 0x1f059: 0x6cca9620, 0x1f05a: 0x6c2ce620, 0x1f05b: 0x6c2ce820, + 0x1f05c: 0x6c67ca20, 0x1f05d: 0x6c7c4a20, 0x1f05e: 0x6c835420, 0x1f05f: 0x6c819220, + 0x1f060: 0x6cb1a820, 0x1f061: 0x6cec7820, 0x1f062: 0x6c979a20, 0x1f063: 0x6c247c20, + 0x1f064: 0x6d117820, 0x1f065: 0x6c507e20, 0x1f066: 0x6cbc1420, 0x1f067: 0x6c482e20, + 0x1f068: 0x6d0ab620, 0x1f069: 0x6d0e1a20, 0x1f06a: 0x6c5c9e20, 0x1f06b: 0x6c164e20, + 0x1f06c: 0x6cc7ee20, 0x1f06d: 0x6c9bb620, 0x1f06e: 0x6c0d7420, 0x1f06f: 0x6cfc6620, + 0x1f070: 0x6cb23220, 0x1f071: 0x6c91a620, 0x1f072: 0x6c806620, 0x1f073: 0x6ca8d620, + 0x1f074: 0x6cc34620, 0x1f075: 0x6d12be20, 0x1f076: 0x6c2f6a20, 0x1f077: 0x6cbe9e20, + 0x1f078: 0x6c4d9620, 0x1f079: 0x6cfe2420, 0x1f07a: 0x6cd74a20, 0x1f07b: 0x6d057e20, + 0x1f07c: 0x6d058820, 0x1f07d: 0x6cecd220, 0x1f07e: 0x6c480620, 0x1f07f: 0x6c33ec20, + // Block 0x7c2, offset 0x1f080 + 0x1f080: 0x6cb5b420, 0x1f081: 0x6c047c20, 0x1f082: 0x6cd98820, 0x1f083: 0x6c4f7220, + 0x1f084: 0x6d22fc20, 0x1f085: 0x6c915420, 0x1f086: 0x6c8e1020, 0x1f087: 0x6cb30c20, + 0x1f088: 0x6c6e1e20, 0x1f089: 0x6c6ada20, 0x1f08a: 0x6c63c820, 0x1f08b: 0x6ce6d420, + 0x1f08c: 0x6c513220, 0x1f08d: 0x6d1cf420, 0x1f08e: 0x6c6f1420, 0x1f08f: 0x6c780220, + 0x1f090: 0x6d152c20, 0x1f091: 0x6cb21220, 0x1f092: 0x6c5bee20, 0x1f093: 0x6ce9a820, + 0x1f094: 0x6c4ed620, 0x1f095: 0x6d1cf820, 0x1f096: 0x6d1cfa20, 0x1f097: 0x6c781e20, + 0x1f098: 0x6ce37420, 0x1f099: 0x6d1dfe20, 0x1f09a: 0x6c36a220, 0x1f09b: 0x6d3b9020, + 0x1f09c: 0x6d0ccc20, 0x1f09d: 0x6c357e20, 0x1f09e: 0x6ca87820, 0x1f09f: 0x6c975a20, + 0x1f0a0: 0x6c2cdc20, 0x1f0a1: 0x6cca8c20, 0x1f0a2: 0x6c507820, 0x1f0a3: 0x6c835020, + 0x1f0a4: 0x6c163c20, 0x1f0a5: 0x6cc7e620, 0x1f0a6: 0x6cb22620, 0x1f0a7: 0x6cc33e20, + 0x1f0a8: 0x6c3c2c20, 0x1f0a9: 0x6c0c0020, 0x1f0aa: 0x6c48be20, 0x1f0ab: 0x6c3eb820, + 0x1f0ac: 0x6cf96e20, 0x1f0ad: 0x6d2e0c20, 0x1f0ae: 0x6c0c1020, 0x1f0af: 0x6cc98020, + 0x1f0b0: 0x6c038820, 0x1f0b1: 0x6cdf3420, 0x1f0b2: 0x6c8b2a20, 0x1f0b3: 0x6c487420, + 0x1f0b4: 0x6d08ba20, 0x1f0b5: 0x6cce8820, 0x1f0b6: 0x6c72a820, 0x1f0b7: 0x6c0c3420, + 0x1f0b8: 0x6cd84020, 0x1f0b9: 0x6cf04820, 0x1f0ba: 0x6d0fec20, 0x1f0bb: 0x6d116a20, + 0x1f0bc: 0x6cd9f820, 0x1f0bd: 0x6c767820, 0x1f0be: 0x6cd9fa20, 0x1f0bf: 0x6c386c20, + // Block 0x7c3, offset 0x1f0c0 + 0x1f0c0: 0x6c8ed220, 0x1f0c1: 0x6cf7bc20, 0x1f0c2: 0x6c8f5620, 0x1f0c3: 0x6cb17020, + 0x1f0c4: 0x6cb17220, 0x1f0c5: 0x6c8ede20, 0x1f0c6: 0x6c0c5620, 0x1f0c7: 0x6c0c5820, + 0x1f0c8: 0x6c0c5a20, 0x1f0c9: 0x6c8a5620, 0x1f0ca: 0x6c0c9e20, 0x1f0cb: 0x6ccb9c20, + 0x1f0cc: 0x6c3c9020, 0x1f0cd: 0x6d051820, 0x1f0ce: 0x6c3c0e20, 0x1f0cf: 0x6d0f8220, + 0x1f0d0: 0x6d2dde20, 0x1f0d1: 0x6c0bee20, 0x1f0d2: 0x6cc97020, 0x1f0d3: 0x6c725420, + 0x1f0d4: 0x6cd7fc20, 0x1f0d5: 0x6cd9c620, 0x1f0d6: 0x6d112e20, 0x1f0d7: 0x6c8e7e20, + 0x1f0d8: 0x6cb16020, 0x1f0d9: 0x6c0c2620, 0x1f0da: 0x6c0c2820, 0x1f0db: 0x6c39f420, + 0x1f0dc: 0x6c387420, 0x1f0dd: 0x6c3a2e20, 0x1f0de: 0x6c39ee20, 0x1f0df: 0x6cd25820, + 0x1f0e0: 0x6cd24c20, 0x1f0e1: 0x6c116220, 0x1f0e2: 0x6c5eb020, 0x1f0e3: 0x6c2f9e20, + 0x1f0e4: 0x6cd8ae20, 0x1f0e5: 0x6ceac620, 0x1f0e6: 0x6d2d7220, 0x1f0e7: 0x6cdcd220, + 0x1f0e8: 0x6cfde820, 0x1f0e9: 0x6cea5a20, 0x1f0ea: 0x6cc5fe20, 0x1f0eb: 0x6d235e20, + 0x1f0ec: 0x6c737e20, 0x1f0ed: 0x6c1c2a20, 0x1f0ee: 0x6d1af220, 0x1f0ef: 0x6c395c20, + 0x1f0f0: 0x6c395e20, 0x1f0f1: 0x6cdcda20, 0x1f0f2: 0x6d1ae820, 0x1f0f3: 0x6ce81620, + 0x1f0f4: 0x6d152e20, 0x1f0f5: 0x6d42a620, 0x1f0f6: 0x6c09ec20, 0x1f0f7: 0x6c6b9c20, + 0x1f0f8: 0x6ce1e220, 0x1f0f9: 0x6c8f0e20, 0x1f0fa: 0x6c226220, 0x1f0fb: 0x6ce61420, + 0x1f0fc: 0x6cd8d420, 0x1f0fd: 0x6c060420, 0x1f0fe: 0x6cd3b020, 0x1f0ff: 0x6c350620, + // Block 0x7c4, offset 0x1f100 + 0x1f100: 0x6c4d7220, 0x1f101: 0x6cc60420, 0x1f102: 0x6ce51020, 0x1f103: 0x6c691e20, + 0x1f104: 0x6c63da20, 0x1f105: 0x6c0df020, 0x1f106: 0x6d113020, 0x1f107: 0x6ce77420, + 0x1f108: 0x6c226420, 0x1f109: 0x6cfdf820, 0x1f10a: 0x6d102a20, 0x1f10b: 0x6c738a20, + 0x1f10c: 0x6c37a220, 0x1f10d: 0x6d0eb220, 0x1f10e: 0x6c823a20, 0x1f10f: 0x6cf68c20, + 0x1f110: 0x6c117220, 0x1f111: 0x6c0e8e20, 0x1f112: 0x6ca57220, 0x1f113: 0x6c36a420, + 0x1f114: 0x6c10b620, 0x1f115: 0x6c75e620, 0x1f116: 0x6c313620, 0x1f117: 0x6cdb0e20, + 0x1f118: 0x6d219820, 0x1f119: 0x6cd3d020, 0x1f11a: 0x6d114a20, 0x1f11b: 0x6c5d0020, + 0x1f11c: 0x6c4cd220, 0x1f11d: 0x6cd3d220, 0x1f11e: 0x6c66dc20, 0x1f11f: 0x6d3cae20, + 0x1f120: 0x6c0df420, 0x1f121: 0x6cfd1620, 0x1f122: 0x6c10c020, 0x1f123: 0x6d135020, + 0x1f124: 0x6ce01620, 0x1f125: 0x6c3a1e20, 0x1f126: 0x6d2ede20, 0x1f127: 0x6cf0de20, + 0x1f128: 0x6c496820, 0x1f129: 0x6c36b220, 0x1f12a: 0x6caa9a20, 0x1f12b: 0x6d286020, + 0x1f12c: 0x6c55d620, 0x1f12d: 0x6c5a1420, 0x1f12e: 0x6ce61c20, 0x1f12f: 0x6c5c6220, + 0x1f130: 0x6c650c20, 0x1f131: 0x6c543c20, 0x1f132: 0x6c00e820, 0x1f133: 0x6ce14c20, + 0x1f134: 0x6c3b4820, 0x1f135: 0x6cf0ee20, 0x1f136: 0x6c47de20, 0x1f137: 0x6c13b820, + 0x1f138: 0x6cd99e20, 0x1f139: 0x6ce15820, 0x1f13a: 0x6c0f9820, 0x1f13b: 0x6c42e820, + 0x1f13c: 0x6cf90c20, 0x1f13d: 0x6c7d2620, 0x1f13e: 0x6c8f4e20, 0x1f13f: 0x6cd9f220, + // Block 0x7c5, offset 0x1f140 + 0x1f140: 0x6ce24a20, 0x1f141: 0x6d137c20, 0x1f142: 0x6d27cc20, 0x1f143: 0x6ca08a20, + 0x1f144: 0x6ce16020, 0x1f145: 0x6c979420, 0x1f146: 0x6c0aa020, 0x1f147: 0x6d245620, + 0x1f148: 0x6d050a20, 0x1f149: 0x6c6cc820, 0x1f14a: 0x6cca4420, 0x1f14b: 0x6c7d3c20, + 0x1f14c: 0x6d3bfc20, 0x1f14d: 0x6ccdde20, 0x1f14e: 0x6c1c9020, 0x1f14f: 0x6c28e620, + 0x1f150: 0x6d193c20, 0x1f151: 0x6c5f9020, 0x1f152: 0x6cc53220, 0x1f153: 0x6c19ac20, + 0x1f154: 0x6d1de420, 0x1f155: 0x6ce20220, 0x1f156: 0x6cf11c20, 0x1f157: 0x6cfe0e20, + 0x1f158: 0x6d2dc620, 0x1f159: 0x6c3b4a20, 0x1f15a: 0x6c4d8a20, 0x1f15b: 0x6c9bb020, + 0x1f15c: 0x6d0f1420, 0x1f15d: 0x6ca0a220, 0x1f15e: 0x6c158020, 0x1f15f: 0x6cfe1020, + 0x1f160: 0x6c959820, 0x1f161: 0x6d29cc20, 0x1f162: 0x6ca46c20, 0x1f163: 0x6cd22620, + 0x1f164: 0x6c2f9020, 0x1f165: 0x6c5e6e20, 0x1f166: 0x6cea9e20, 0x1f167: 0x6ce0e420, + 0x1f168: 0x6cea4420, 0x1f169: 0x6cf84020, 0x1f16a: 0x6cc5ce20, 0x1f16b: 0x6d22d220, + 0x1f16c: 0x6c1bea20, 0x1f16d: 0x6c392420, 0x1f16e: 0x6d1acc20, 0x1f16f: 0x6c665620, + 0x1f170: 0x6cd32620, 0x1f171: 0x6c05e820, 0x1f172: 0x6cd89420, 0x1f173: 0x6c34d220, + 0x1f174: 0x6d147e20, 0x1f175: 0x6c378c20, 0x1f176: 0x6cc52420, 0x1f177: 0x6cfdde20, + 0x1f178: 0x6c50e820, 0x1f179: 0x6c823820, 0x1f17a: 0x6c68d820, 0x1f17b: 0x6cf5b020, + 0x1f17c: 0x6c0dd420, 0x1f17d: 0x6c0e6a20, 0x1f17e: 0x6c310c20, 0x1f17f: 0x6c360420, + // Block 0x7c6, offset 0x1f180 + 0x1f180: 0x6d210020, 0x1f181: 0x6ca56a20, 0x1f182: 0x6c75a820, 0x1f183: 0x6c4cbe20, + 0x1f184: 0x6c5ce820, 0x1f185: 0x6cfcbe20, 0x1f186: 0x6c495020, 0x1f187: 0x6c13a020, + 0x1f188: 0x6c7d0220, 0x1f189: 0x6c479820, 0x1f18a: 0x6cd9ba20, 0x1f18b: 0x6c14fc20, + 0x1f18c: 0x6d130a20, 0x1f18d: 0x6ca06020, 0x1f18e: 0x6c0f2220, 0x1f18f: 0x6c8e7620, + 0x1f190: 0x6d04de20, 0x1f191: 0x6c6ca820, 0x1f192: 0x6c976e20, 0x1f193: 0x6cca2820, + 0x1f194: 0x6d3be020, 0x1f195: 0x6ca46420, 0x1f196: 0x6cd44220, 0x1f197: 0x6c7c7220, + 0x1f198: 0x6c4c9020, 0x1f199: 0x6cfd6620, 0x1f19a: 0x6c3b8020, 0x1f19b: 0x6c0f3c20, + 0x1f19c: 0x6ca64420, 0x1f19d: 0x6c0a1420, 0x1f19e: 0x6c0f6e20, 0x1f19f: 0x6ce8fa20, + 0x1f1a0: 0x6c4dbc20, 0x1f1a1: 0x6c3a2020, 0x1f1a2: 0x6c650e20, 0x1f1a3: 0x6c015420, + 0x1f1a4: 0x6c00fa20, 0x1f1a5: 0x6c408020, 0x1f1a6: 0x6cfaf620, 0x1f1a7: 0x6d276c20, + 0x1f1a8: 0x6d02f420, 0x1f1a9: 0x6c3bb020, 0x1f1aa: 0x6cb1fe20, 0x1f1ab: 0x6d02fa20, + 0x1f1ac: 0x6c969820, 0x1f1ad: 0x6d236020, 0x1f1ae: 0x6c3caa20, 0x1f1af: 0x6c4ed820, + 0x1f1b0: 0x6c2b7420, 0x1f1b1: 0x6ceb3220, 0x1f1b2: 0x6d306820, 0x1f1b3: 0x6c1b4220, + 0x1f1b4: 0x6d0a2420, 0x1f1b5: 0x6d3b1020, 0x1f1b6: 0x6d340c20, 0x1f1b7: 0x6cae2420, + 0x1f1b8: 0x6d034620, 0x1f1b9: 0x6cc64a20, 0x1f1ba: 0x6cc97a20, 0x1f1bb: 0x6d27f820, + 0x1f1bc: 0x6cf1a420, 0x1f1bd: 0x6d348a20, 0x1f1be: 0x6c28a020, 0x1f1bf: 0x6c935c20, + // Block 0x7c7, offset 0x1f1c0 + 0x1f1c0: 0x6d1f5e20, 0x1f1c1: 0x6c0f3e20, 0x1f1c2: 0x6c060a20, 0x1f1c3: 0x6c748a20, + 0x1f1c4: 0x6ceb4220, 0x1f1c5: 0x6d184020, 0x1f1c6: 0x6cc13020, 0x1f1c7: 0x6cb4c220, + 0x1f1c8: 0x6cc13e20, 0x1f1c9: 0x6c6ee620, 0x1f1ca: 0x6cb35c20, 0x1f1cb: 0x6d2f7020, + 0x1f1cc: 0x6d251220, 0x1f1cd: 0x6cadf020, 0x1f1ce: 0x6d394c20, 0x1f1cf: 0x6c727220, + 0x1f1d0: 0x6d3b2620, 0x1f1d1: 0x6caa4420, 0x1f1d2: 0x6c70c820, 0x1f1d3: 0x6caf8820, + 0x1f1d4: 0x6d29fa20, 0x1f1d5: 0x6c645020, 0x1f1d6: 0x6c8d4e20, 0x1f1d7: 0x6d31f620, + 0x1f1d8: 0x6cdf3a20, 0x1f1d9: 0x6c404820, 0x1f1da: 0x6d103020, 0x1f1db: 0x6cd2d820, + 0x1f1dc: 0x6c0a4020, 0x1f1dd: 0x6cebc220, 0x1f1de: 0x6ceb4620, 0x1f1df: 0x6cd8e420, + 0x1f1e0: 0x6c8e9020, 0x1f1e1: 0x6c96de20, 0x1f1e2: 0x6cb13220, 0x1f1e3: 0x6ce24620, + 0x1f1e4: 0x6d36f820, 0x1f1e5: 0x6cc6b820, 0x1f1e6: 0x6ce2b620, 0x1f1e7: 0x6c308a20, + 0x1f1e8: 0x6d09ac20, 0x1f1e9: 0x6cc2a420, 0x1f1ea: 0x6cd02220, 0x1f1eb: 0x6c6ee820, + 0x1f1ec: 0x6c37a620, 0x1f1ed: 0x6c4d7a20, 0x1f1ee: 0x6c0f7020, 0x1f1ef: 0x6d39ce20, + 0x1f1f0: 0x6d1a0c20, 0x1f1f1: 0x6c962a20, 0x1f1f2: 0x6d397a20, 0x1f1f3: 0x6c28bc20, + 0x1f1f4: 0x6d023820, 0x1f1f5: 0x6c8eb020, 0x1f1f6: 0x6c716a20, 0x1f1f7: 0x6cd97020, + 0x1f1f8: 0x6cbd4620, 0x1f1f9: 0x6c987a20, 0x1f1fa: 0x6c80ec20, 0x1f1fb: 0x6c4f2420, + 0x1f1fc: 0x6ce90020, 0x1f1fd: 0x6d07da20, 0x1f1fe: 0x6cea1420, 0x1f1ff: 0x6c75f220, + // Block 0x7c8, offset 0x1f200 + 0x1f200: 0x6c35be20, 0x1f201: 0x6c1a7a20, 0x1f202: 0x6d03ac20, 0x1f203: 0x6c005820, + 0x1f204: 0x6c931420, 0x1f205: 0x6d3c6c20, 0x1f206: 0x6d38be20, 0x1f207: 0x6ccf8220, + 0x1f208: 0x6cb13620, 0x1f209: 0x6c7d8c20, 0x1f20a: 0x6ce24c20, 0x1f20b: 0x6c7f2e20, + 0x1f20c: 0x6d3fd220, 0x1f20d: 0x6c78e220, 0x1f20e: 0x6cb67c20, 0x1f20f: 0x6cb67e20, + 0x1f210: 0x6d0ede20, 0x1f211: 0x6c3a2220, 0x1f212: 0x6ccacc20, 0x1f213: 0x6d0df020, + 0x1f214: 0x6c445820, 0x1f215: 0x6d11e220, 0x1f216: 0x6cf54820, 0x1f217: 0x6cb14e20, + 0x1f218: 0x6c237620, 0x1f219: 0x6cb15020, 0x1f21a: 0x6cb9da20, 0x1f21b: 0x6c3a2420, + 0x1f21c: 0x6c5a2420, 0x1f21d: 0x6cb9d420, 0x1f21e: 0x6c5d6820, 0x1f21f: 0x6d21de20, + 0x1f220: 0x6ce3a820, 0x1f221: 0x6cc32420, 0x1f222: 0x6cfa1620, 0x1f223: 0x6d3fd620, + 0x1f224: 0x6c7cae20, 0x1f225: 0x6cc76c20, 0x1f226: 0x6cd84620, 0x1f227: 0x6c488020, + 0x1f228: 0x6ceb5c20, 0x1f229: 0x6c4aa220, 0x1f22a: 0x6cda0020, 0x1f22b: 0x6cb94a20, + 0x1f22c: 0x6c1a5a20, 0x1f22d: 0x6d374e20, 0x1f22e: 0x6c8ed620, 0x1f22f: 0x6caef820, + 0x1f230: 0x6ce2c820, 0x1f231: 0x6cf7be20, 0x1f232: 0x6c12b420, 0x1f233: 0x6c31ea20, + 0x1f234: 0x6d0efe20, 0x1f235: 0x6d25cc20, 0x1f236: 0x6d407220, 0x1f237: 0x6ccad020, + 0x1f238: 0x6ccde020, 0x1f239: 0x6c84b020, 0x1f23a: 0x6d376220, 0x1f23b: 0x6cd6b020, + 0x1f23c: 0x6c933820, 0x1f23d: 0x6cf7c020, 0x1f23e: 0x6c956c20, 0x1f23f: 0x6d2eec20, + // Block 0x7c9, offset 0x1f240 + 0x1f240: 0x6ca19020, 0x1f241: 0x6c030020, 0x1f242: 0x6c118420, 0x1f243: 0x6c0c5c20, + 0x1f244: 0x6c237a20, 0x1f245: 0x6cc16220, 0x1f246: 0x6c0ac220, 0x1f247: 0x6d376420, + 0x1f248: 0x6d248020, 0x1f249: 0x6d060c20, 0x1f24a: 0x6c576c20, 0x1f24b: 0x6c0e9e20, + 0x1f24c: 0x6cdb7020, 0x1f24d: 0x6cff5820, 0x1f24e: 0x6c8c0a20, 0x1f24f: 0x6d2ea420, + 0x1f250: 0x6c33c620, 0x1f251: 0x6c8eea20, 0x1f252: 0x6ceb6220, 0x1f253: 0x6c136a20, + 0x1f254: 0x6c2d9e20, 0x1f255: 0x6c68b220, 0x1f256: 0x6ce60c20, 0x1f257: 0x6d0f1620, + 0x1f258: 0x6c958620, 0x1f259: 0x6d2dca20, 0x1f25a: 0x6c6df820, 0x1f25b: 0x6d196a20, + 0x1f25c: 0x6d139e20, 0x1f25d: 0x6ceadc20, 0x1f25e: 0x6cb20020, 0x1f25f: 0x6d397220, + 0x1f260: 0x6d0f2620, 0x1f261: 0x6c902020, 0x1f262: 0x6c937220, 0x1f263: 0x6ce2e020, + 0x1f264: 0x6cfda820, 0x1f265: 0x6c630220, 0x1f266: 0x6cd6ca20, 0x1f267: 0x6c719c20, + 0x1f268: 0x6cf7d020, 0x1f269: 0x6c585020, 0x1f26a: 0x6c84ee20, 0x1f26b: 0x6c0c6820, + 0x1f26c: 0x6c968c20, 0x1f26d: 0x6d22ba20, 0x1f26e: 0x6ceae220, 0x1f26f: 0x6d09da20, + 0x1f270: 0x6c1afa20, 0x1f271: 0x6cc0d820, 0x1f272: 0x6cc63e20, 0x1f273: 0x6c0eb220, + 0x1f274: 0x6c935020, 0x1f275: 0x6d29f820, 0x1f276: 0x6cd2ba20, 0x1f277: 0x6cd89620, + 0x1f278: 0x6c3fbc20, 0x1f279: 0x6c706420, 0x1f27a: 0x6d404820, 0x1f27b: 0x6d3ab820, + 0x1f27c: 0x6cebc020, 0x1f27d: 0x6caa4020, 0x1f27e: 0x6c643820, 0x1f27f: 0x6d16d420, + // Block 0x7ca, offset 0x1f280 + 0x1f280: 0x6c273c20, 0x1f281: 0x6cfe9020, 0x1f282: 0x6c96b820, 0x1f283: 0x6d19bc20, + 0x1f284: 0x6c683a20, 0x1f285: 0x6c572e20, 0x1f286: 0x6c95ee20, 0x1f287: 0x6c4d5c20, + 0x1f288: 0x6cb10820, 0x1f289: 0x6c0bf020, 0x1f28a: 0x6c83b420, 0x1f28b: 0x6c1a6c20, + 0x1f28c: 0x6d0e5820, 0x1f28d: 0x6d036e20, 0x1f28e: 0x6cbd2820, 0x1f28f: 0x6c75aa20, + 0x1f290: 0x6cb5e220, 0x1f291: 0x6cb5e420, 0x1f292: 0x6c78aa20, 0x1f293: 0x6d3c5c20, + 0x1f294: 0x6d3f7e20, 0x1f295: 0x6cdaae20, 0x1f296: 0x6c116420, 0x1f297: 0x6cb14a20, + 0x1f298: 0x6d364820, 0x1f299: 0x6c7c8220, 0x1f29a: 0x6ccab020, 0x1f29b: 0x6cf4f620, + 0x1f29c: 0x6c02da20, 0x1f29d: 0x6c8e7820, 0x1f29e: 0x6cb8fa20, 0x1f29f: 0x6ccd9020, + 0x1f2a0: 0x6c0c1220, 0x1f2a1: 0x6c955020, 0x1f2a2: 0x6c233620, 0x1f2a3: 0x6c15e220, + 0x1f2a4: 0x6d395c20, 0x1f2a5: 0x6c62c420, 0x1f2a6: 0x6cd6ac20, 0x1f2a7: 0x6cfd9420, + 0x1f2a8: 0x6c476e20, 0x1f2a9: 0x6cefb420, 0x1f2aa: 0x6cefd220, 0x1f2ab: 0x6cefd420, + 0x1f2ac: 0x6d214020, 0x1f2ad: 0x6c422420, 0x1f2ae: 0x6d17d620, 0x1f2af: 0x6c01ec20, + 0x1f2b0: 0x6ce7f220, 0x1f2b1: 0x6c6bf020, 0x1f2b2: 0x6c065e20, 0x1f2b3: 0x6c074e20, + 0x1f2b4: 0x6c220c20, 0x1f2b5: 0x6ce3c620, 0x1f2b6: 0x6c2c0020, 0x1f2b7: 0x6c7a5620, + 0x1f2b8: 0x6c4d2820, 0x1f2b9: 0x6cbba020, 0x1f2ba: 0x6c543020, 0x1f2bb: 0x6c7af020, + 0x1f2bc: 0x6c443220, 0x1f2bd: 0x6ce9ee20, 0x1f2be: 0x6c452020, 0x1f2bf: 0x6cb12a20, + // Block 0x7cb, offset 0x1f2c0 + 0x1f2c0: 0x6c0a8220, 0x1f2c1: 0x6c783c20, 0x1f2c2: 0x6cb87a20, 0x1f2c3: 0x6d21ce20, + 0x1f2c4: 0x6cdc1420, 0x1f2c5: 0x6c90d020, 0x1f2c6: 0x6c0fb220, 0x1f2c7: 0x6cff4620, + 0x1f2c8: 0x6c055a20, 0x1f2c9: 0x6c0fb420, 0x1f2ca: 0x6c221420, 0x1f2cb: 0x6c7b5e20, + 0x1f2cc: 0x6c0d9220, 0x1f2cd: 0x6ca09420, 0x1f2ce: 0x6c8a5220, 0x1f2cf: 0x6c90da20, + 0x1f2d0: 0x6cff5220, 0x1f2d1: 0x6c31fe20, 0x1f2d2: 0x6d29f220, 0x1f2d3: 0x6cdc1a20, + 0x1f2d4: 0x6ce3d020, 0x1f2d5: 0x6c0d9620, 0x1f2d6: 0x6c7b6020, 0x1f2d7: 0x6c91a820, + 0x1f2d8: 0x6c42bc20, 0x1f2d9: 0x6c42c420, 0x1f2da: 0x6cbc5020, 0x1f2db: 0x6c779420, + 0x1f2dc: 0x6cbc2c20, 0x1f2dd: 0x6c819420, 0x1f2de: 0x6ccb0c20, 0x1f2df: 0x6c0bf420, + 0x1f2e0: 0x6c7d6e20, 0x1f2e1: 0x6c7d7620, 0x1f2e2: 0x6c2b7620, 0x1f2e3: 0x6c39da20, + 0x1f2e4: 0x6d04ec20, 0x1f2e5: 0x6cc47e20, 0x1f2e6: 0x6c98f820, 0x1f2e7: 0x6c28a220, + 0x1f2e8: 0x6c7d7e20, 0x1f2e9: 0x6c0d8620, 0x1f2ea: 0x6c383e20, 0x1f2eb: 0x6ce5a220, + 0x1f2ec: 0x6caf8a20, 0x1f2ed: 0x6d3e9c20, 0x1f2ee: 0x6c384220, 0x1f2ef: 0x6cc48620, + 0x1f2f0: 0x6ce41a20, 0x1f2f1: 0x6c066420, 0x1f2f2: 0x6c0a4220, 0x1f2f3: 0x6c990420, + 0x1f2f4: 0x6c3eea20, 0x1f2f5: 0x6c376a20, 0x1f2f6: 0x6cc6ba20, 0x1f2f7: 0x6cc14420, + 0x1f2f8: 0x6c45b620, 0x1f2f9: 0x6d04f820, 0x1f2fa: 0x6c7e1620, 0x1f2fb: 0x6c628e20, + 0x1f2fc: 0x6caed220, 0x1f2fd: 0x6d3b6020, 0x1f2fe: 0x6cce8e20, 0x1f2ff: 0x6cdd4420, + // Block 0x7cc, offset 0x1f300 + 0x1f300: 0x6ce43620, 0x1f301: 0x6c86ba20, 0x1f302: 0x6c0d8a20, 0x1f303: 0x6d3fd420, + 0x1f304: 0x6c2baa20, 0x1f305: 0x6caee420, 0x1f306: 0x6cd94820, 0x1f307: 0x6d32f820, + 0x1f308: 0x6cc32220, 0x1f309: 0x6d3fd820, 0x1f30a: 0x6cd76220, 0x1f30b: 0x6c660e20, + 0x1f30c: 0x6ceb9620, 0x1f30d: 0x6c55f420, 0x1f30e: 0x6c7eae20, 0x1f30f: 0x6c6f8e20, + 0x1f310: 0x6cb6a020, 0x1f311: 0x6c889820, 0x1f312: 0x6d320420, 0x1f313: 0x6c0d9420, + 0x1f314: 0x6caefa20, 0x1f315: 0x6c96e620, 0x1f316: 0x6cca0e20, 0x1f317: 0x6c979e20, + 0x1f318: 0x6c97a020, 0x1f319: 0x6ccbbc20, 0x1f31a: 0x6d061020, 0x1f31b: 0x6c8b7a20, + 0x1f31c: 0x6cb95420, 0x1f31d: 0x6cb95220, 0x1f31e: 0x6ca46220, 0x1f31f: 0x6c58cc20, + 0x1f320: 0x6c7e3220, 0x1f321: 0x6ca94220, 0x1f322: 0x6c0d9820, 0x1f323: 0x6c8b8a20, + 0x1f324: 0x6cc4fe20, 0x1f325: 0x6c310e20, 0x1f326: 0x6c313420, 0x1f327: 0x6ca53620, + 0x1f328: 0x6c53dc20, 0x1f329: 0x6cf90e20, 0x1f32a: 0x6c314e20, 0x1f32b: 0x6c4e7220, + 0x1f32c: 0x6c315420, 0x1f32d: 0x6c315220, 0x1f32e: 0x6c6f9620, 0x1f32f: 0x6c170e20, + 0x1f330: 0x6d249c20, 0x1f331: 0x6d24a420, 0x1f332: 0x6c43e020, 0x1f333: 0x6d0ecc20, + 0x1f334: 0x6c3f8e20, 0x1f335: 0x6cbdb820, 0x1f336: 0x6c4a9e20, 0x1f337: 0x6d3fdc20, + 0x1f338: 0x6c8f5820, 0x1f339: 0x6c4aa620, 0x1f33a: 0x6cce2a20, 0x1f33b: 0x6d248220, + 0x1f33c: 0x6c4ae220, 0x1f33d: 0x6c9a9620, 0x1f33e: 0x6c623220, 0x1f33f: 0x6cb61220, + // Block 0x7cd, offset 0x1f340 + 0x1f340: 0x6c40da20, 0x1f341: 0x6c7c9020, 0x1f342: 0x6c5cf620, 0x1f343: 0x6c038c20, + 0x1f344: 0x6cb39c20, 0x1f345: 0x6c9aa620, 0x1f346: 0x6d05c820, 0x1f347: 0x6d0dd220, + 0x1f348: 0x6cff1a20, 0x1f349: 0x6c89a220, 0x1f34a: 0x6d242620, 0x1f34b: 0x6ce9ca20, + 0x1f34c: 0x6cb53e20, 0x1f34d: 0x6cee3e20, 0x1f34e: 0x6c89a820, 0x1f34f: 0x6cf0f020, + 0x1f350: 0x6c41bc20, 0x1f351: 0x6c1aea20, 0x1f352: 0x6cb17420, 0x1f353: 0x6c0ab620, + 0x1f354: 0x6ca09620, 0x1f355: 0x6c616220, 0x1f356: 0x6d060820, 0x1f357: 0x6c1e3e20, + 0x1f358: 0x6d0e2620, 0x1f359: 0x6d2dcc20, 0x1f35a: 0x6d211220, 0x1f35b: 0x6c29c420, + 0x1f35c: 0x6cc57620, 0x1f35d: 0x6c6b0220, 0x1f35e: 0x6c03f620, 0x1f35f: 0x6c537c20, + 0x1f360: 0x6ceacc20, 0x1f361: 0x6c2e3620, 0x1f362: 0x6c614e20, 0x1f363: 0x6d073620, + 0x1f364: 0x6c358020, 0x1f365: 0x6c367c20, 0x1f366: 0x6ccc1220, 0x1f367: 0x6c4f8620, + 0x1f368: 0x6cea6620, 0x1f369: 0x6ca15e20, 0x1f36a: 0x6c6c0020, 0x1f36b: 0x6cd07220, + 0x1f36c: 0x6c04d620, 0x1f36d: 0x6d25a420, 0x1f36e: 0x6cb01420, 0x1f36f: 0x6c91d420, + 0x1f370: 0x6cf1aa20, 0x1f371: 0x6c55a620, 0x1f372: 0x6c915a20, 0x1f373: 0x6d289a20, + 0x1f374: 0x6c39ae20, 0x1f375: 0x6c3b9020, 0x1f376: 0x6ca36820, 0x1f377: 0x6d1f6c20, + 0x1f378: 0x6cb15220, 0x1f379: 0x6ca1b620, 0x1f37a: 0x6c517e20, 0x1f37b: 0x6cf9fa20, + 0x1f37c: 0x6cc14620, 0x1f37d: 0x6c4e3820, 0x1f37e: 0x6caf9420, 0x1f37f: 0x6c8d6220, + // Block 0x7ce, offset 0x1f380 + 0x1f380: 0x6ceb5220, 0x1f381: 0x6c0e9820, 0x1f382: 0x6cc0a020, 0x1f383: 0x6cb2d220, + 0x1f384: 0x6c3f0620, 0x1f385: 0x6c0a6420, 0x1f386: 0x6c22a420, 0x1f387: 0x6cf0e020, + 0x1f388: 0x6c70ce20, 0x1f389: 0x6c2de220, 0x1f38a: 0x6c03c620, 0x1f38b: 0x6d1f7a20, + 0x1f38c: 0x6c4bf020, 0x1f38d: 0x6caf9620, 0x1f38e: 0x6ca70620, 0x1f38f: 0x6d03a020, + 0x1f390: 0x6cdf4020, 0x1f391: 0x6c066a20, 0x1f392: 0x6c406020, 0x1f393: 0x6d2c9820, + 0x1f394: 0x6c728620, 0x1f395: 0x6c473620, 0x1f396: 0x6cd41e20, 0x1f397: 0x6c309a20, + 0x1f398: 0x6c27b020, 0x1f399: 0x6cdeba20, 0x1f39a: 0x6c6b4c20, 0x1f39b: 0x6cd50e20, + 0x1f39c: 0x6c548220, 0x1f39d: 0x6cfe0420, 0x1f39e: 0x6c376e20, 0x1f39f: 0x6c01d620, + 0x1f3a0: 0x6cef4820, 0x1f3a1: 0x6d2fe620, 0x1f3a2: 0x6d39d020, 0x1f3a3: 0x6d1b8220, + 0x1f3a4: 0x6c8b4020, 0x1f3a5: 0x6c962e20, 0x1f3a6: 0x6ce79420, 0x1f3a7: 0x6ce3c820, + 0x1f3a8: 0x6d18e220, 0x1f3a9: 0x6c0e3020, 0x1f3aa: 0x6cf03420, 0x1f3ab: 0x6c688a20, + 0x1f3ac: 0x6c7a6820, 0x1f3ad: 0x6c4a9220, 0x1f3ae: 0x6cfae620, 0x1f3af: 0x6c444820, + 0x1f3b0: 0x6c5b4420, 0x1f3b1: 0x6c81fc20, 0x1f3b2: 0x6c40b820, 0x1f3b3: 0x6c77ca20, + 0x1f3b4: 0x6d055e20, 0x1f3b5: 0x6c346820, 0x1f3b6: 0x6c758820, 0x1f3b7: 0x6ce3a020, + 0x1f3b8: 0x6c9e4620, 0x1f3b9: 0x6cce9220, 0x1f3ba: 0x6d2c9a20, 0x1f3bb: 0x6cdd4620, + 0x1f3bc: 0x6cbd4820, 0x1f3bd: 0x6d21d020, 0x1f3be: 0x6ca57820, 0x1f3bf: 0x6d30b420, + // Block 0x7cf, offset 0x1f3c0 + 0x1f3c0: 0x6c4bf620, 0x1f3c1: 0x6c452420, 0x1f3c2: 0x6cdb7c20, 0x1f3c3: 0x6cf40220, + 0x1f3c4: 0x6cc0a620, 0x1f3c5: 0x6ccd1820, 0x1f3c6: 0x6cb42020, 0x1f3c7: 0x6c596220, + 0x1f3c8: 0x6ce5a820, 0x1f3c9: 0x6c854020, 0x1f3ca: 0x6ccc2420, 0x1f3cb: 0x6ccc2620, + 0x1f3cc: 0x6c77d020, 0x1f3cd: 0x6c9b7e20, 0x1f3ce: 0x6c1a8e20, 0x1f3cf: 0x6c87e620, + 0x1f3d0: 0x6d409820, 0x1f3d1: 0x6cf94c20, 0x1f3d2: 0x6d1e6420, 0x1f3d3: 0x6ca61020, + 0x1f3d4: 0x6d3eba20, 0x1f3d5: 0x6cb68820, 0x1f3d6: 0x6d330c20, 0x1f3d7: 0x6cfe0620, + 0x1f3d8: 0x6ca57a20, 0x1f3d9: 0x6c216e20, 0x1f3da: 0x6c62c620, 0x1f3db: 0x6c2dec20, + 0x1f3dc: 0x6cbd0020, 0x1f3dd: 0x6c482c20, 0x1f3de: 0x6d38f220, 0x1f3df: 0x6c302420, + 0x1f3e0: 0x6c7f3020, 0x1f3e1: 0x6c3aec20, 0x1f3e2: 0x6ca61420, 0x1f3e3: 0x6d192220, + 0x1f3e4: 0x6c7d8e20, 0x1f3e5: 0x6c932620, 0x1f3e6: 0x6c703820, 0x1f3e7: 0x6c168620, + 0x1f3e8: 0x6c6de620, 0x1f3e9: 0x6c951220, 0x1f3ea: 0x6c8d8a20, 0x1f3eb: 0x6d406e20, + 0x1f3ec: 0x6c849420, 0x1f3ed: 0x6c9bf420, 0x1f3ee: 0x6d3fde20, 0x1f3ef: 0x6d375220, + 0x1f3f0: 0x6ca70c20, 0x1f3f1: 0x6c570420, 0x1f3f2: 0x6d24c420, 0x1f3f3: 0x6c2cb620, + 0x1f3f4: 0x6cd20c20, 0x1f3f5: 0x6cd02c20, 0x1f3f6: 0x6c5d1620, 0x1f3f7: 0x6ce3ac20, + 0x1f3f8: 0x6c544020, 0x1f3f9: 0x6d03b220, 0x1f3fa: 0x6d39e420, 0x1f3fb: 0x6c7ebc20, + 0x1f3fc: 0x6d3fe020, 0x1f3fd: 0x6d2b6820, 0x1f3fe: 0x6c0b1820, 0x1f3ff: 0x6c0b1a20, + // Block 0x7d0, offset 0x1f400 + 0x1f400: 0x6c596420, 0x1f401: 0x6cc32a20, 0x1f402: 0x6d2b7020, 0x1f403: 0x6ceeca20, + 0x1f404: 0x6ceecc20, 0x1f405: 0x6d21e620, 0x1f406: 0x6c212420, 0x1f407: 0x6cc77020, + 0x1f408: 0x6c2f0a20, 0x1f409: 0x6c5a2e20, 0x1f40a: 0x6c893220, 0x1f40b: 0x6d0e0620, + 0x1f40c: 0x6cbfda20, 0x1f40d: 0x6cbfdc20, 0x1f40e: 0x6c661020, 0x1f40f: 0x6c089c20, + 0x1f410: 0x6c36dc20, 0x1f411: 0x6d0ff220, 0x1f412: 0x6c409020, 0x1f413: 0x6cc9d820, + 0x1f414: 0x6c41fa20, 0x1f415: 0x6cf98220, 0x1f416: 0x6ceb9820, 0x1f417: 0x6c55fa20, + 0x1f418: 0x6cd42420, 0x1f419: 0x6cc93420, 0x1f41a: 0x6d08d620, 0x1f41b: 0x6cf17220, + 0x1f41c: 0x6cba8820, 0x1f41d: 0x6c508020, 0x1f41e: 0x6cf39020, 0x1f41f: 0x6c39b420, + 0x1f420: 0x6ccad620, 0x1f421: 0x6c8ee420, 0x1f422: 0x6c96aa20, 0x1f423: 0x6cd29620, + 0x1f424: 0x6cd21420, 0x1f425: 0x6c493a20, 0x1f426: 0x6d3ec220, 0x1f427: 0x6ce2d020, + 0x1f428: 0x6cde2620, 0x1f429: 0x6d117a20, 0x1f42a: 0x6c35a820, 0x1f42b: 0x6d1e0820, + 0x1f42c: 0x6cb9e420, 0x1f42d: 0x6cb6a420, 0x1f42e: 0x6cf17420, 0x1f42f: 0x6cc93820, + 0x1f430: 0x6cd0ce20, 0x1f431: 0x6c889e20, 0x1f432: 0x6c028e20, 0x1f433: 0x6c823420, + 0x1f434: 0x6c5b0c20, 0x1f435: 0x6c9fdc20, 0x1f436: 0x6c62e620, 0x1f437: 0x6ce5b620, + 0x1f438: 0x6cc16820, 0x1f439: 0x6c654a20, 0x1f43a: 0x6cd03020, 0x1f43b: 0x6c97a820, + 0x1f43c: 0x6cf7c620, 0x1f43d: 0x6cc0aa20, 0x1f43e: 0x6c0c9c20, 0x1f43f: 0x6c62e820, + // Block 0x7d1, offset 0x1f440 + 0x1f440: 0x6c62d820, 0x1f441: 0x6d3a3c20, 0x1f442: 0x6c679a20, 0x1f443: 0x6d051420, + 0x1f444: 0x6d3b9c20, 0x1f445: 0x6d1de620, 0x1f446: 0x6d2eee20, 0x1f447: 0x6c776420, + 0x1f448: 0x6d093620, 0x1f449: 0x6c0cce20, 0x1f44a: 0x6d248a20, 0x1f44b: 0x6cc16a20, + 0x1f44c: 0x6cfe6e20, 0x1f44d: 0x6c0ea220, 0x1f44e: 0x6c697820, 0x1f44f: 0x6d0a5a20, + 0x1f450: 0x6cdb7220, 0x1f451: 0x6c5a3a20, 0x1f452: 0x6d420020, 0x1f453: 0x6ccdee20, + 0x1f454: 0x6ccdf020, 0x1f455: 0x6c387620, 0x1f456: 0x6c4bae20, 0x1f457: 0x6c8c0c20, + 0x1f458: 0x6d0a5c20, 0x1f459: 0x6c9e8620, 0x1f45a: 0x6cf82c20, 0x1f45b: 0x6d2bbe20, + 0x1f45c: 0x6cfe7820, 0x1f45d: 0x6c3c0620, 0x1f45e: 0x6c494620, 0x1f45f: 0x6c548a20, + 0x1f460: 0x6c7b4e20, 0x1f461: 0x6d2b7220, 0x1f462: 0x6ccada20, 0x1f463: 0x6d2dd020, + 0x1f464: 0x6c420420, 0x1f465: 0x6c4bb220, 0x1f466: 0x6d1d6020, 0x1f467: 0x6c855220, + 0x1f468: 0x6c16da20, 0x1f469: 0x6c836e20, 0x1f46a: 0x6cd63a20, 0x1f46b: 0x6c011020, + 0x1f46c: 0x6cc7f220, 0x1f46d: 0x6c62fe20, 0x1f46e: 0x6d076e20, 0x1f46f: 0x6c56f220, + 0x1f470: 0x6cd63c20, 0x1f471: 0x6c87bc20, 0x1f472: 0x6c8b8e20, 0x1f473: 0x6c87c620, + 0x1f474: 0x6c9f2020, 0x1f475: 0x6d31a620, 0x1f476: 0x6cfe1220, 0x1f477: 0x6c370220, + 0x1f478: 0x6c91ac20, 0x1f479: 0x6c49ca20, 0x1f47a: 0x6c84f020, 0x1f47b: 0x6cfb1c20, + 0x1f47c: 0x6d20ce20, 0x1f47d: 0x6c29c220, 0x1f47e: 0x6c613a20, 0x1f47f: 0x6d1f4220, + // Block 0x7d2, offset 0x1f480 + 0x1f480: 0x6cea5c20, 0x1f481: 0x6c91c020, 0x1f482: 0x6c39ac20, 0x1f483: 0x6c035420, + 0x1f484: 0x6c515220, 0x1f485: 0x6c03be20, 0x1f486: 0x6cb2ba20, 0x1f487: 0x6ca70020, + 0x1f488: 0x6c915620, 0x1f489: 0x6d1f5220, 0x1f48a: 0x6d2c8020, 0x1f48b: 0x6c401420, + 0x1f48c: 0x6c03c020, 0x1f48d: 0x6c065620, 0x1f48e: 0x6c547620, 0x1f48f: 0x6cb00220, + 0x1f490: 0x6cdf2c20, 0x1f491: 0x6c4a8220, 0x1f492: 0x6c6b1620, 0x1f493: 0x6c77b420, + 0x1f494: 0x6ceffa20, 0x1f495: 0x6c376420, 0x1f496: 0x6ce77620, 0x1f497: 0x6d2b6220, + 0x1f498: 0x6c547c20, 0x1f499: 0x6c7b2e20, 0x1f49a: 0x6c625a20, 0x1f49b: 0x6c686220, + 0x1f49c: 0x6cfac620, 0x1f49d: 0x6d2c8820, 0x1f49e: 0x6cfdfa20, 0x1f49f: 0x6d0a2c20, + 0x1f4a0: 0x6c451e20, 0x1f4a1: 0x6c843820, 0x1f4a2: 0x6c884620, 0x1f4a3: 0x6c64ea20, + 0x1f4a4: 0x6c852c20, 0x1f4a5: 0x6cd28820, 0x1f4a6: 0x6ce5a420, 0x1f4a7: 0x6c4be820, + 0x1f4a8: 0x6ccc1620, 0x1f4a9: 0x6c595020, 0x1f4aa: 0x6c758020, 0x1f4ab: 0x6c626e20, + 0x1f4ac: 0x6d1e5a20, 0x1f4ad: 0x6cbe5820, 0x1f4ae: 0x6c8d6420, 0x1f4af: 0x6cb65820, + 0x1f4b0: 0x6d406820, 0x1f4b1: 0x6c3a1c20, 0x1f4b2: 0x6c7d8620, 0x1f4b3: 0x6c168020, + 0x1f4b4: 0x6c482a20, 0x1f4b5: 0x6ca60a20, 0x1f4b6: 0x6ca70820, 0x1f4b7: 0x6c2de420, + 0x1f4b8: 0x6c6dd420, 0x1f4b9: 0x6cd02420, 0x1f4ba: 0x6cd20020, 0x1f4bb: 0x6d3e9e20, + 0x1f4bc: 0x6c3bf820, 0x1f4bd: 0x6c2ef620, 0x1f4be: 0x6c089420, 0x1f4bf: 0x6c16ce20, + // Block 0x7d3, offset 0x1f4c0 + 0x1f4c0: 0x6ce39020, 0x1f4c1: 0x6cf16c20, 0x1f4c2: 0x6ceec420, 0x1f4c3: 0x6cc9d220, + 0x1f4c4: 0x6c36c020, 0x1f4c5: 0x6cbfd220, 0x1f4c6: 0x6c407020, 0x1f4c7: 0x6c5a1620, + 0x1f4c8: 0x6cc31e20, 0x1f4c9: 0x6c678a20, 0x1f4ca: 0x6c0b1220, 0x1f4cb: 0x6ccac820, + 0x1f4cc: 0x6c028020, 0x1f4cd: 0x6cb68020, 0x1f4ce: 0x6cde1e20, 0x1f4cf: 0x6c493220, + 0x1f4d0: 0x6d116620, 0x1f4d1: 0x6cad1220, 0x1f4d2: 0x6c651e20, 0x1f4d3: 0x6c823020, + 0x1f4d4: 0x6c0c9a20, 0x1f4d5: 0x6d093420, 0x1f4d6: 0x6c0cc820, 0x1f4d7: 0x6c979820, + 0x1f4d8: 0x6c9fd820, 0x1f4d9: 0x6d1dd220, 0x1f4da: 0x6cf10420, 0x1f4db: 0x6cf7b620, + 0x1f4dc: 0x6c4ba020, 0x1f4dd: 0x6ccde220, 0x1f4de: 0x6c8c0620, 0x1f4df: 0x6d41fe20, + 0x1f4e0: 0x6c56e420, 0x1f4e1: 0x6c41fe20, 0x1f4e2: 0x6c854a20, 0x1f4e3: 0x6d2dc820, + 0x1f4e4: 0x6c496e20, 0x1f4e5: 0x6ca79a20, 0x1f4e6: 0x6d15f420, 0x1f4e7: 0x6c3ebc20, + 0x1f4e8: 0x6c864220, 0x1f4e9: 0x6c6f7e20, 0x1f4ea: 0x6c102220, 0x1f4eb: 0x6d0e8e20, + 0x1f4ec: 0x6c3f5020, 0x1f4ed: 0x6c2dd020, 0x1f4ee: 0x6c5efc20, 0x1f4ef: 0x6c3cea20, + 0x1f4f0: 0x6cc83620, 0x1f4f1: 0x6c41ac20, 0x1f4f2: 0x6cd1e820, 0x1f4f3: 0x6c3cee20, + 0x1f4f4: 0x6ca01420, 0x1f4f5: 0x6c060c20, 0x1f4f6: 0x6d250820, 0x1f4f7: 0x6d341420, + 0x1f4f8: 0x6c56c420, 0x1f4f9: 0x6cbd9a20, 0x1f4fa: 0x6c3d9820, 0x1f4fb: 0x6c049620, + 0x1f4fc: 0x6cf1ac20, 0x1f4fd: 0x6c64ec20, 0x1f4fe: 0x6cd1f620, 0x1f4ff: 0x6d23e420, + // Block 0x7d4, offset 0x1f500 + 0x1f500: 0x6c3d3220, 0x1f501: 0x6d10b620, 0x1f502: 0x6c74b020, 0x1f503: 0x6c74b220, + 0x1f504: 0x6cb06c20, 0x1f505: 0x6c583020, 0x1f506: 0x6d326820, 0x1f507: 0x6c061220, + 0x1f508: 0x6d0eb420, 0x1f509: 0x6d0af620, 0x1f50a: 0x6d336420, 0x1f50b: 0x6c399c20, + 0x1f50c: 0x6c3cf020, 0x1f50d: 0x6cf1ae20, 0x1f50e: 0x6cab5220, 0x1f50f: 0x6c279220, + 0x1f510: 0x6c43ac20, 0x1f511: 0x6cc7ca20, 0x1f512: 0x6c8d6620, 0x1f513: 0x6c9eea20, + 0x1f514: 0x6c3eec20, 0x1f515: 0x6ceb5420, 0x1f516: 0x6c9f7c20, 0x1f517: 0x6c869620, + 0x1f518: 0x6c0b5020, 0x1f519: 0x6d36fc20, 0x1f51a: 0x6c43ae20, 0x1f51b: 0x6d251420, + 0x1f51c: 0x6c227620, 0x1f51d: 0x6cc1cc20, 0x1f51e: 0x6cff1c20, 0x1f51f: 0x6c1adc20, + 0x1f520: 0x6c28c020, 0x1f521: 0x6c70d020, 0x1f522: 0x6d11d620, 0x1f523: 0x6c473820, + 0x1f524: 0x6c301820, 0x1f525: 0x6d240020, 0x1f526: 0x6d0f6e20, 0x1f527: 0x6cc73a20, + 0x1f528: 0x6d0afe20, 0x1f529: 0x6ce60420, 0x1f52a: 0x6d240220, 0x1f52b: 0x6ce54420, + 0x1f52c: 0x6d1bf820, 0x1f52d: 0x6c331620, 0x1f52e: 0x6cf38620, 0x1f52f: 0x6c377020, + 0x1f530: 0x6c487c20, 0x1f531: 0x6c00d420, 0x1f532: 0x6d341a20, 0x1f533: 0x6d0ed620, + 0x1f534: 0x6c527a20, 0x1f535: 0x6cff2c20, 0x1f536: 0x6c63f020, 0x1f537: 0x6c8b4220, + 0x1f538: 0x6d39d220, 0x1f539: 0x6d0fe220, 0x1f53a: 0x6ce39220, 0x1f53b: 0x6c539220, + 0x1f53c: 0x6c963020, 0x1f53d: 0x6cc7da20, 0x1f53e: 0x6ca1f220, 0x1f53f: 0x6c43b820, + // Block 0x7d5, offset 0x1f540 + 0x1f540: 0x6cc57e20, 0x1f541: 0x6c688c20, 0x1f542: 0x6d050220, 0x1f543: 0x6d38ba20, + 0x1f544: 0x6d341c20, 0x1f545: 0x6c963220, 0x1f546: 0x6c528c20, 0x1f547: 0x6ca77620, + 0x1f548: 0x6c370820, 0x1f549: 0x6c944620, 0x1f54a: 0x6c63f220, 0x1f54b: 0x6c62b420, + 0x1f54c: 0x6ce90420, 0x1f54d: 0x6c583820, 0x1f54e: 0x6ceb9220, 0x1f54f: 0x6c104a20, + 0x1f550: 0x6cf40420, 0x1f551: 0x6c730820, 0x1f552: 0x6d244820, 0x1f553: 0x6c0f9c20, + 0x1f554: 0x6c75f620, 0x1f555: 0x6d0aae20, 0x1f556: 0x6c089220, 0x1f557: 0x6cf71020, + 0x1f558: 0x6c75f820, 0x1f559: 0x6c717620, 0x1f55a: 0x6ce87e20, 0x1f55b: 0x6c6de420, + 0x1f55c: 0x6ce3a220, 0x1f55d: 0x6c359020, 0x1f55e: 0x6c359220, 0x1f55f: 0x6c7bcc20, + 0x1f560: 0x6c55e820, 0x1f561: 0x6cf48a20, 0x1f562: 0x6cd02a20, 0x1f563: 0x6c7f6620, + 0x1f564: 0x6c69ee20, 0x1f565: 0x6cacca20, 0x1f566: 0x6c932820, 0x1f567: 0x6cb02c20, + 0x1f568: 0x6cd51a20, 0x1f569: 0x6c3f2220, 0x1f56a: 0x6c015e20, 0x1f56b: 0x6d3dd020, + 0x1f56c: 0x6caef420, 0x1f56d: 0x6cbdba20, 0x1f56e: 0x6cb94220, 0x1f56f: 0x6c06be20, + 0x1f570: 0x6c2dee20, 0x1f571: 0x6c932a20, 0x1f572: 0x6cc42c20, 0x1f573: 0x6c652a20, + 0x1f574: 0x6c718420, 0x1f575: 0x6ce92a20, 0x1f576: 0x6d0b0420, 0x1f577: 0x6d252020, + 0x1f578: 0x6cb68e20, 0x1f579: 0x6c849620, 0x1f57a: 0x6d138620, 0x1f57b: 0x6d3c7020, + 0x1f57c: 0x6c798e20, 0x1f57d: 0x6c352020, 0x1f57e: 0x6c7d9020, 0x1f57f: 0x6cd11c20, + // Block 0x7d6, offset 0x1f580 + 0x1f580: 0x6cb69020, 0x1f581: 0x6c6de820, 0x1f582: 0x6d192420, 0x1f583: 0x6d192620, + 0x1f584: 0x6c6dea20, 0x1f585: 0x6d3ebc20, 0x1f586: 0x6c7f3220, 0x1f587: 0x6c302620, + 0x1f588: 0x6cb55020, 0x1f589: 0x6c219420, 0x1f58a: 0x6c44e620, 0x1f58b: 0x6c70e020, + 0x1f58c: 0x6c74f620, 0x1f58d: 0x6d199620, 0x1f58e: 0x6d422420, 0x1f58f: 0x6c5f8a20, + 0x1f590: 0x6cd62c20, 0x1f591: 0x6d1c1420, 0x1f592: 0x6c1c9220, 0x1f593: 0x6c9e8220, + 0x1f594: 0x6cc77220, 0x1f595: 0x6c016220, 0x1f596: 0x6cbfe020, 0x1f597: 0x6ce3ae20, + 0x1f598: 0x6c55fc20, 0x1f599: 0x6ce3b020, 0x1f59a: 0x6c36e020, 0x1f59b: 0x6c6a4420, + 0x1f59c: 0x6c991220, 0x1f59d: 0x6c3f2620, 0x1f59e: 0x6c212820, 0x1f59f: 0x6ce90820, + 0x1f5a0: 0x6d0e0820, 0x1f5a1: 0x6c51a020, 0x1f5a2: 0x6d25d020, 0x1f5a3: 0x6cb10620, + 0x1f5a4: 0x6c7d9620, 0x1f5a5: 0x6c9a3e20, 0x1f5a6: 0x6c55fe20, 0x1f5a7: 0x6d1c1620, + 0x1f5a8: 0x6c204820, 0x1f5a9: 0x6cf54c20, 0x1f5aa: 0x6c718a20, 0x1f5ab: 0x6c309c20, + 0x1f5ac: 0x6c124420, 0x1f5ad: 0x6c39e020, 0x1f5ae: 0x6c520a20, 0x1f5af: 0x6d1c3620, + 0x1f5b0: 0x6d25d220, 0x1f5b1: 0x6cfb0620, 0x1f5b2: 0x6cf24620, 0x1f5b3: 0x6cd21620, + 0x1f5b4: 0x6c520c20, 0x1f5b5: 0x6c1eca20, 0x1f5b6: 0x6ce16820, 0x1f5b7: 0x6cfa1a20, + 0x1f5b8: 0x6cc93a20, 0x1f5b9: 0x6c8ee620, 0x1f5ba: 0x6c60fe20, 0x1f5bb: 0x6c474c20, + 0x1f5bc: 0x6c654620, 0x1f5bd: 0x6cdd0420, 0x1f5be: 0x6c4f3a20, 0x1f5bf: 0x6c228020, + // Block 0x7d7, offset 0x1f5c0 + 0x1f5c0: 0x6c228220, 0x1f5c1: 0x6d195420, 0x1f5c2: 0x6d124820, 0x1f5c3: 0x6d0f0220, + 0x1f5c4: 0x6c5f9a20, 0x1f5c5: 0x6c875c20, 0x1f5c6: 0x6ce4d220, 0x1f5c7: 0x6c7a0e20, + 0x1f5c8: 0x6ce30620, 0x1f5c9: 0x6ce30820, 0x1f5ca: 0x6d195620, 0x1f5cb: 0x6ce90c20, + 0x1f5cc: 0x6c96ac20, 0x1f5cd: 0x6c68ae20, 0x1f5ce: 0x6c42f420, 0x1f5cf: 0x6ce4d420, + 0x1f5d0: 0x6c18fe20, 0x1f5d1: 0x6c610020, 0x1f5d2: 0x6ce97620, 0x1f5d3: 0x6d311020, + 0x1f5d4: 0x6c029020, 0x1f5d5: 0x6d11e620, 0x1f5d6: 0x6d143c20, 0x1f5d7: 0x6cab6620, + 0x1f5d8: 0x6c1c9820, 0x1f5d9: 0x6d376e20, 0x1f5da: 0x6c8f5c20, 0x1f5db: 0x6d1de820, + 0x1f5dc: 0x6c937020, 0x1f5dd: 0x6c0aca20, 0x1f5de: 0x6cd6b820, 0x1f5df: 0x6d3de420, + 0x1f5e0: 0x6d21fa20, 0x1f5e1: 0x6cf41020, 0x1f5e2: 0x6c752620, 0x1f5e3: 0x6d1ab620, + 0x1f5e4: 0x6ce3b820, 0x1f5e5: 0x6cd85620, 0x1f5e6: 0x6c68b420, 0x1f5e7: 0x6d196c20, + 0x1f5e8: 0x6c577020, 0x1f5e9: 0x6c0ad020, 0x1f5ea: 0x6d1c4620, 0x1f5eb: 0x6cdb7420, + 0x1f5ec: 0x6c5a3c20, 0x1f5ed: 0x6c38f820, 0x1f5ee: 0x6c68b620, 0x1f5ef: 0x6c8a5a20, + 0x1f5f0: 0x6d0f1820, 0x1f5f1: 0x6c42f820, 0x1f5f2: 0x6c704020, 0x1f5f3: 0x6cfbda20, + 0x1f5f4: 0x6cfbdc20, 0x1f5f5: 0x6ce90e20, 0x1f5f6: 0x6c971c20, 0x1f5f7: 0x6d420220, + 0x1f5f8: 0x6d248e20, 0x1f5f9: 0x6d1c4a20, 0x1f5fa: 0x6c934220, 0x1f5fb: 0x6ce97820, + 0x1f5fc: 0x6cfbde20, 0x1f5fd: 0x6d092e20, 0x1f5fe: 0x6d197820, 0x1f5ff: 0x6cb0e020, + // Block 0x7d8, offset 0x1f600 + 0x1f600: 0x6c1efc20, 0x1f601: 0x6c958c20, 0x1f602: 0x6cf75c20, 0x1f603: 0x6d15a220, + 0x1f604: 0x6c5fb220, 0x1f605: 0x6d2b2c20, 0x1f606: 0x6d220820, 0x1f607: 0x6d2dd220, + 0x1f608: 0x6d13a420, 0x1f609: 0x6d0ffa20, 0x1f60a: 0x6cb0e220, 0x1f60b: 0x6ca94420, + 0x1f60c: 0x6c56f420, 0x1f60d: 0x6c9cd220, 0x1f60e: 0x6d1c5020, 0x1f60f: 0x6c9bc420, + 0x1f610: 0x6c2bc220, 0x1f611: 0x6d273620, 0x1f612: 0x6d249020, 0x1f613: 0x6c831a20, + 0x1f614: 0x6c068620, 0x1f615: 0x6c91ae20, 0x1f616: 0x6c521220, 0x1f617: 0x6c902220, + 0x1f618: 0x6cd6cc20, 0x1f619: 0x6d274020, 0x1f61a: 0x6d1c5220, 0x1f61b: 0x6c49cc20, + 0x1f61c: 0x6cc23820, 0x1f61d: 0x6c84f220, 0x1f61e: 0x6c948820, 0x1f61f: 0x6ca78a20, + 0x1f620: 0x6c6f5a20, 0x1f621: 0x6c5e8820, 0x1f622: 0x6d24ca20, 0x1f623: 0x6c9fea20, + 0x1f624: 0x6cd1a020, 0x1f625: 0x6cab3620, 0x1f626: 0x6d0ada20, 0x1f627: 0x6c122620, + 0x1f628: 0x6c05ec20, 0x1f629: 0x6d322a20, 0x1f62a: 0x6c470420, 0x1f62b: 0x6c2fec20, + 0x1f62c: 0x6c914a20, 0x1f62d: 0x6d0ae420, 0x1f62e: 0x6cfeae20, 0x1f62f: 0x6d0f5820, + 0x1f630: 0x6c8cda20, 0x1f631: 0x6c1aa620, 0x1f632: 0x6cc18220, 0x1f633: 0x6d24d820, + 0x1f634: 0x6d090420, 0x1f635: 0x6ceb1220, 0x1f636: 0x6cd7de20, 0x1f637: 0x6d361220, + 0x1f638: 0x6c375620, 0x1f639: 0x6c485820, 0x1f63a: 0x6d04d220, 0x1f63b: 0x6c526620, + 0x1f63c: 0x6d388020, 0x1f63d: 0x6c438a20, 0x1f63e: 0x6c943820, 0x1f63f: 0x6c534820, + // Block 0x7d9, offset 0x1f640 + 0x1f640: 0x6cf3ce20, 0x1f641: 0x6c0f0c20, 0x1f642: 0x6c83dc20, 0x1f643: 0x6c72f820, + 0x1f644: 0x6c479a20, 0x1f645: 0x6c357220, 0x1f646: 0x6d236220, 0x1f647: 0x6cfb6820, + 0x1f648: 0x6ce33a20, 0x1f649: 0x6cf45420, 0x1f64a: 0x6cc42a20, 0x1f64b: 0x6c9e7a20, + 0x1f64c: 0x6c013e20, 0x1f64d: 0x6c7d7820, 0x1f64e: 0x6c06b420, 0x1f64f: 0x6caeb020, + 0x1f650: 0x6cb8fc20, 0x1f651: 0x6c219220, 0x1f652: 0x6c44d620, 0x1f653: 0x6d250220, + 0x1f654: 0x6cdadc20, 0x1f655: 0x6c558e20, 0x1f656: 0x6c516020, 0x1f657: 0x6c367e20, + 0x1f658: 0x6c47bc20, 0x1f659: 0x6cbfba20, 0x1f65a: 0x6c225a20, 0x1f65b: 0x6c9a1e20, + 0x1f65c: 0x6cf51220, 0x1f65d: 0x6d187820, 0x1f65e: 0x6d122020, 0x1f65f: 0x6cf23820, + 0x1f660: 0x6c8e9420, 0x1f661: 0x6c60a020, 0x1f662: 0x6d187a20, 0x1f663: 0x6c64ee20, + 0x1f664: 0x6c51e220, 0x1f665: 0x6d141c20, 0x1f666: 0x6d1bfa20, 0x1f667: 0x6d310420, + 0x1f668: 0x6c8f4420, 0x1f669: 0x6c8a2e20, 0x1f66a: 0x6c689220, 0x1f66b: 0x6c703020, + 0x1f66c: 0x6d242a20, 0x1f66d: 0x6c931820, 0x1f66e: 0x6c58b420, 0x1f66f: 0x6d2db020, + 0x1f670: 0x6d1c0c20, 0x1f671: 0x6c56da20, 0x1f672: 0x6c9b8020, 0x1f673: 0x6c49c020, + 0x1f674: 0x6cd6ba20, 0x1f675: 0x6c91bc20, 0x1f676: 0x6c6c5820, 0x1f677: 0x6c8d6820, + 0x1f678: 0x6c661220, 0x1f679: 0x6cfbd020, 0x1f67a: 0x6c25fe20, 0x1f67b: 0x6c662620, + 0x1f67c: 0x6c664020, 0x1f67d: 0x6d0d1a20, 0x1f67e: 0x6c25f420, 0x1f67f: 0x6c924c20, + // Block 0x7da, offset 0x1f680 + 0x1f680: 0x6d1eaa20, 0x1f681: 0x6c241620, 0x1f682: 0x6c614c20, 0x1f683: 0x6cad6820, + 0x1f684: 0x6c241820, 0x1f685: 0x6cad6c20, 0x1f686: 0x6d3b3220, 0x1f687: 0x6c758220, + 0x1f688: 0x6d3a8220, 0x1f689: 0x6c651020, 0x1f68a: 0x6c9c8420, 0x1f68b: 0x6c9c8620, + 0x1f68c: 0x6d22a820, 0x1f68d: 0x6c8ec820, 0x1f68e: 0x6c18f420, 0x1f68f: 0x6c758a20, + 0x1f690: 0x6c8bf620, 0x1f691: 0x6ca61a20, 0x1f692: 0x6cb69420, 0x1f693: 0x6c932c20, + 0x1f694: 0x6c703a20, 0x1f695: 0x6c758c20, 0x1f696: 0x6c6df020, 0x1f697: 0x6c871420, + 0x1f698: 0x6cfd9820, 0x1f699: 0x6cfbd220, 0x1f69a: 0x6c639020, 0x1f69b: 0x6c9ca620, + 0x1f69c: 0x6c875e20, 0x1f69d: 0x6ccf8e20, 0x1f69e: 0x6d2ef220, 0x1f69f: 0x6c8c1020, + 0x1f6a0: 0x6c6dfa20, 0x1f6a1: 0x6cb6b620, 0x1f6a2: 0x6c8de220, 0x1f6a3: 0x6d0d2820, + 0x1f6a4: 0x6c241a20, 0x1f6a5: 0x6c973220, 0x1f6a6: 0x6c972620, 0x1f6a7: 0x6c516220, + 0x1f6a8: 0x6c17a620, 0x1f6a9: 0x6c3d9c20, 0x1f6aa: 0x6c9e5e20, 0x1f6ab: 0x6c9e3e20, + 0x1f6ac: 0x6c3da820, 0x1f6ad: 0x6cad9c20, 0x1f6ae: 0x6cc27e20, 0x1f6af: 0x6cc14c20, + 0x1f6b0: 0x6ca1f420, 0x1f6b1: 0x6c3db020, 0x1f6b2: 0x6cfd2c20, 0x1f6b3: 0x6c7f3420, + 0x1f6b4: 0x6cc15820, 0x1f6b5: 0x6c9e6a20, 0x1f6b6: 0x6c1ca620, 0x1f6b7: 0x6c3c9420, + 0x1f6b8: 0x6c3d6e20, 0x1f6b9: 0x6cc14020, 0x1f6ba: 0x6c9e6420, 0x1f6bb: 0x6c966820, + 0x1f6bc: 0x6c99c420, 0x1f6bd: 0x6ca07020, 0x1f6be: 0x6c5af020, 0x1f6bf: 0x6ca1b820, + // Block 0x7db, offset 0x1f6c0 + 0x1f6c0: 0x6d407020, 0x1f6c1: 0x6caaae20, 0x1f6c2: 0x6c3bb420, 0x1f6c3: 0x6c59ce20, + 0x1f6c4: 0x6c59b820, 0x1f6c5: 0x6c6c5a20, 0x1f6c6: 0x6c49f620, 0x1f6c7: 0x6ce47420, + 0x1f6c8: 0x6ce81c20, 0x1f6c9: 0x6c538c20, 0x1f6ca: 0x6c57c820, 0x1f6cb: 0x6c7c0820, + 0x1f6cc: 0x6c539a20, 0x1f6cd: 0x6cd56020, 0x1f6ce: 0x6c843a20, 0x1f6cf: 0x6ca70a20, + 0x1f6d0: 0x6c1af220, 0x1f6d1: 0x6c521c20, 0x1f6d2: 0x6c521a20, 0x1f6d3: 0x6d187c20, + 0x1f6d4: 0x6cb9ce20, 0x1f6d5: 0x6c284820, 0x1f6d6: 0x6cf8ea20, 0x1f6d7: 0x6cea2e20, + 0x1f6d8: 0x6ca17020, 0x1f6d9: 0x6ca15020, 0x1f6da: 0x6cb9d220, 0x1f6db: 0x6c279e20, + 0x1f6dc: 0x6c1f8420, 0x1f6dd: 0x6d1ff620, 0x1f6de: 0x6c2d2e20, 0x1f6df: 0x6d143020, + 0x1f6e0: 0x6cfa1220, 0x1f6e1: 0x6d0df220, 0x1f6e2: 0x6cc15a20, 0x1f6e3: 0x6c9a7220, + 0x1f6e4: 0x6d0e0a20, 0x1f6e5: 0x6cbe9420, 0x1f6e6: 0x6d271220, 0x1f6e7: 0x6c84a220, + 0x1f6e8: 0x6c293820, 0x1f6e9: 0x6c31ec20, 0x1f6ea: 0x6c11e820, 0x1f6eb: 0x6d0c4820, + 0x1f6ec: 0x6d0d0820, 0x1f6ed: 0x6d0e1420, 0x1f6ee: 0x6c285820, 0x1f6ef: 0x6c01e420, + 0x1f6f0: 0x6d320a20, 0x1f6f1: 0x6c27ac20, 0x1f6f2: 0x6c11ea20, 0x1f6f3: 0x6d144020, + 0x1f6f4: 0x6c9a4620, 0x1f6f5: 0x6d2e4220, 0x1f6f6: 0x6d0e3420, 0x1f6f7: 0x6c320e20, + 0x1f6f8: 0x6c91b020, 0x1f6f9: 0x6d353420, 0x1f6fa: 0x6c3bc220, 0x1f6fb: 0x6c3f1020, + 0x1f6fc: 0x6c3f9820, 0x1f6fd: 0x6c9e3220, 0x1f6fe: 0x6c9e0a20, 0x1f6ff: 0x6d25bc20, + // Block 0x7dc, offset 0x1f700 + 0x1f700: 0x6c247220, 0x1f701: 0x6cc28420, 0x1f702: 0x6c178820, 0x1f703: 0x6cebfc20, + 0x1f704: 0x6d39e620, 0x1f705: 0x6d342a20, 0x1f706: 0x6c9bbe20, 0x1f707: 0x6c029420, + 0x1f708: 0x6c0cd020, 0x1f709: 0x6ceb6a20, 0x1f70a: 0x6c0ada20, 0x1f70b: 0x6d257220, + 0x1f70c: 0x6c176620, 0x1f70d: 0x6ceb5e20, 0x1f70e: 0x6c2f7420, 0x1f70f: 0x6c9d7420, + 0x1f710: 0x6ca3d020, 0x1f711: 0x6c2f7c20, 0x1f712: 0x6d3e8420, 0x1f713: 0x6c47a620, + 0x1f714: 0x6c47a820, 0x1f715: 0x6c302220, 0x1f716: 0x6c3ba420, 0x1f717: 0x6ce25020, + 0x1f718: 0x6d252820, 0x1f719: 0x6cb03a20, 0x1f71a: 0x6c168e20, 0x1f71b: 0x6c42f620, + 0x1f71c: 0x6cb80820, 0x1f71d: 0x6d252a20, 0x1f71e: 0x6ce0e220, 0x1f71f: 0x6ce29820, + 0x1f720: 0x6cd56620, 0x1f721: 0x6cd55220, 0x1f722: 0x6c3b9e20, 0x1f723: 0x6c3adc20, + 0x1f724: 0x6cf1be20, 0x1f725: 0x6c039620, 0x1f726: 0x6c2dea20, 0x1f727: 0x6ceb5a20, + 0x1f728: 0x6d37d420, 0x1f729: 0x6cc1ee20, 0x1f72a: 0x6cd11a20, 0x1f72b: 0x6cd28e20, + 0x1f72c: 0x6d205e20, 0x1f72d: 0x6cd29420, 0x1f72e: 0x6ce69e20, 0x1f72f: 0x6cf40c20, + 0x1f730: 0x6ca77220, 0x1f731: 0x6c6df620, 0x1f732: 0x6c5d1020, 0x1f733: 0x6c719820, + 0x1f734: 0x6d0e1e20, 0x1f735: 0x6ce88020, 0x1f736: 0x6cd85c20, 0x1f737: 0x6cf75420, + 0x1f738: 0x6cfd4e20, 0x1f739: 0x6d0e2820, 0x1f73a: 0x6c82ae20, 0x1f73b: 0x6c08a220, + 0x1f73c: 0x6d11da20, 0x1f73d: 0x6cc0a220, 0x1f73e: 0x6c4dc020, 0x1f73f: 0x6cf53a20, + // Block 0x7dd, offset 0x1f740 + 0x1f740: 0x6cf54220, 0x1f741: 0x6c53e620, 0x1f742: 0x6d028620, 0x1f743: 0x6c36f820, + 0x1f744: 0x6d2c1020, 0x1f745: 0x6d055c20, 0x1f746: 0x6cf27820, 0x1f747: 0x6d2c1220, + 0x1f748: 0x6ca9f820, 0x1f749: 0x6ca48c20, 0x1f74a: 0x6cb63420, 0x1f74b: 0x6d2d0020, + 0x1f74c: 0x6c62b620, 0x1f74d: 0x6d3ebe20, 0x1f74e: 0x6c5f9c20, 0x1f74f: 0x6c5fac20, + 0x1f750: 0x6cb56c20, 0x1f751: 0x6c5f2820, 0x1f752: 0x6c1bc220, 0x1f753: 0x6c193020, + 0x1f754: 0x6c193420, 0x1f755: 0x6c519220, 0x1f756: 0x6d0b3a20, 0x1f757: 0x6d1aae20, + 0x1f758: 0x6d026c20, 0x1f759: 0x6c05c020, 0x1f75a: 0x6d2b2620, 0x1f75b: 0x6d027620, + 0x1f75c: 0x6c148c20, 0x1f75d: 0x6c1aec20, 0x1f75e: 0x6d0e0c20, 0x1f75f: 0x6c71e020, + 0x1f760: 0x6ce5b220, 0x1f761: 0x6c8d9620, 0x1f762: 0x6c8d7820, 0x1f763: 0x6c1e6e20, + 0x1f764: 0x6cc33220, 0x1f765: 0x6d027e20, 0x1f766: 0x6c791420, 0x1f767: 0x6ca8ae20, + 0x1f768: 0x6c703e20, 0x1f769: 0x6d11e420, 0x1f76a: 0x6c21e820, 0x1f76b: 0x6c7dc820, + 0x1f76c: 0x6d22b220, 0x1f76d: 0x6c1efa20, 0x1f76e: 0x6d163020, 0x1f76f: 0x6ca61c20, + 0x1f770: 0x6d2b2a20, 0x1f771: 0x6d407820, 0x1f772: 0x6cc25820, 0x1f773: 0x6d281020, + 0x1f774: 0x6d0e3020, 0x1f775: 0x6cab6e20, 0x1f776: 0x6c36fe20, 0x1f777: 0x6cf33820, + 0x1f778: 0x6d198020, 0x1f779: 0x6c221a20, 0x1f77a: 0x6d407a20, 0x1f77b: 0x6c2d0020, + 0x1f77c: 0x6c1efe20, 0x1f77d: 0x6c6d7a20, 0x1f77e: 0x6d0bd420, 0x1f77f: 0x6c1b8020, + // Block 0x7de, offset 0x1f780 + 0x1f780: 0x6c192420, 0x1f781: 0x6c512220, 0x1f782: 0x6d1a6e20, 0x1f783: 0x6c71c620, + 0x1f784: 0x6c8d3220, 0x1f785: 0x6c05b620, 0x1f786: 0x6ce59620, 0x1f787: 0x6d3e7820, + 0x1f788: 0x6c790620, 0x1f789: 0x6d228620, 0x1f78a: 0x6c21d420, 0x1f78b: 0x6cc25220, + 0x1f78c: 0x6cf32620, 0x1f78d: 0x6c8fb020, 0x1f78e: 0x6cad1420, 0x1f78f: 0x6c45c020, + 0x1f790: 0x6cad1620, 0x1f791: 0x6d0e0e20, 0x1f792: 0x6c8ff220, 0x1f793: 0x6c904820, + 0x1f794: 0x6c45c820, 0x1f795: 0x6c76b820, 0x1f796: 0x6c26dc20, 0x1f797: 0x6c8e0020, + 0x1f798: 0x6c26de20, 0x1f799: 0x6c8f6620, 0x1f79a: 0x6c458620, 0x1f79b: 0x6c76a820, + 0x1f79c: 0x6c4a9620, 0x1f79d: 0x6cbfea20, 0x1f79e: 0x6c0cd620, 0x1f79f: 0x6c4a3820, + 0x1f7a0: 0x6d26f620, 0x1f7a1: 0x6c20f820, 0x1f7a2: 0x6c51aa20, 0x1f7a3: 0x6c753020, + 0x1f7a4: 0x6d013c20, 0x1f7a5: 0x6d249820, + // Block 0x7df, offset 0x1f7c0 + 0x1f7c3: 0x6ccd4220, + // Block 0x7e0, offset 0x1f800 + 0x1f800: 0x6cb6e820, 0x1f801: 0x6c452620, 0x1f802: 0x6c17ce20, 0x1f803: 0x6c642020, + 0x1f804: 0x6c573e20, 0x1f805: 0x6c202c20, 0x1f806: 0x6c71ea20, 0x1f807: 0x6c4a9620, + 0x1f808: 0x6c4a9620, 0x1f809: 0x6cb75220, 0x1f80a: 0x6c6c2e20, 0x1f80b: 0x6c7e6220, + 0x1f80c: 0x6ca3ac20, 0x1f80d: 0x6c804a20, 0x1f80e: 0x6c7f7820, 0x1f80f: 0x6c956220, + 0x1f810: 0x6c957a20, 0x1f811: 0x6c955820, 0x1f812: 0x6c95b820, 0x1f813: 0x6c957c20, + 0x1f814: 0x6c822620, 0x1f815: 0x6c95e820, 0x1f816: 0x6c81d020, 0x1f817: 0x6c95f620, + 0x1f818: 0x6c960a20, 0x1f819: 0x6c81d620, 0x1f81a: 0x6c962a20, 0x1f81b: 0x6c949a20, + 0x1f81c: 0x6c948c20, 0x1f81d: 0x6c7ff820, 0x1f81e: 0x6c808820, 0x1f81f: 0x6c7ff020, + 0x1f820: 0x6c948820, 0x1f821: 0x6c7f9a20, 0x1f822: 0x6c807c20, 0x1f823: 0x6c7fc420, + 0x1f824: 0x6c7fd820, 0x1f825: 0x6c7e3e20, 0x1f826: 0x6c7eaa20, 0x1f827: 0x6c7ec420, + 0x1f828: 0x6c80b420, 0x1f829: 0x6c80f820, 0x1f82a: 0x6c811820, 0x1f82b: 0x6c80ae20, + 0x1f82c: 0x6c80a220, 0x1f82d: 0x6c7ee220, 0x1f82e: 0x6c839020, 0x1f82f: 0x6c815620, + 0x1f830: 0x6c91da20, 0x1f831: 0x6c91f220, 0x1f832: 0x6c918420, 0x1f833: 0x6c915c20, + 0x1f834: 0x6c819a20, 0x1f835: 0x6c917820, 0x1f836: 0x6c91c420, 0x1f837: 0x6c927620, + 0x1f838: 0x6c933620, 0x1f839: 0x6c91d420, 0x1f83a: 0x6c934220, 0x1f83b: 0x6c926e20, + 0x1f83c: 0x6c925a20, 0x1f83d: 0x6c93ec20, 0x1f83e: 0x6c924820, 0x1f83f: 0x6c92de20, + // Block 0x7e1, offset 0x1f840 + 0x1f840: 0x6c924c20, 0x1f841: 0x6c952620, 0x1f842: 0x6c903e20, 0x1f843: 0x6ca9f020, + 0x1f844: 0x6c8ff420, 0x1f845: 0x6c8ff820, 0x1f846: 0x6c814220, 0x1f847: 0x6c82d220, + 0x1f848: 0x6c927420, 0x1f849: 0x6c823e20, 0x1f84a: 0x6c82e220, 0x1f84b: 0x6c93a620, + 0x1f84c: 0x6c90b020, 0x1f84d: 0x6c833020, 0x1f84e: 0x6c910e20, 0x1f84f: 0x6c833420, + 0x1f850: 0x6c93bc20, 0x1f851: 0x6c910220, 0x1f852: 0x6c823c20, 0x1f853: 0x6c81fe20, + 0x1f854: 0x6c8c2820, 0x1f855: 0x6c8cc420, 0x1f856: 0x6c837e20, 0x1f857: 0x6c8d3c20, + 0x1f858: 0x6c8cfe20, 0x1f859: 0x6c8cd820, 0x1f85a: 0x6c31f020, 0x1f85b: 0x6ca2d020, + 0x1f85c: 0x6c822620, 0x1f85d: 0x6cab0e20, 0x1f85e: 0x6c27b220, 0x1f85f: 0x6ca91020, + 0x1f860: 0x6caa5e20, 0x1f861: 0x6c93d620, 0x1f862: 0x6d176620, 0x1f863: 0x6c06c620, + 0x1f864: 0x6cac7620, 0x1f865: 0x6c0b8220, 0x1f866: 0x6c3ff020, 0x1f867: 0x6c105620, + 0x1f868: 0x6c9d2620, 0x1f869: 0x6cd60020, 0x1f86a: 0x6cdd5a20, 0x1f86b: 0x6c115e20, + 0x1f86c: 0x6cc9c620, 0x1f86d: 0x6cd12c20, 0x1f86e: 0x6d12f620, 0x1f86f: 0x6cd76a20, + 0x1f870: 0x6ccbda20, 0x1f871: 0x6c18a020, 0x1f872: 0x6c189c20, 0x1f873: 0x6cd41020, + 0x1f874: 0x6cc91420, 0x1f875: 0x6c361020, 0x1f876: 0x6c361220, 0x1f877: 0x6c89aa20, + 0x1f878: 0x6c898820, 0x1f879: 0x6c894a20, 0x1f87a: 0x6c894c20, 0x1f87b: 0x6c897420, + 0x1f87c: 0x6c894620, 0x1f87d: 0x6c89c820, 0x1f87e: 0x6c89c020, 0x1f87f: 0x6c867020, + // Block 0x7e2, offset 0x1f880 + 0x1f880: 0x6c937620, 0x1f881: 0x6caa6e20, 0x1f882: 0x6c916e20, 0x1f883: 0x6c938a20, + 0x1f884: 0x6c940e20, 0x1f885: 0x6c870420, 0x1f886: 0x6c935a20, 0x1f887: 0x6c84ee20, + 0x1f888: 0x6c871420, 0x1f889: 0x6c843a20, 0x1f88a: 0x6c855c20, 0x1f88b: 0x6c867820, + 0x1f88c: 0x6c867c20, 0x1f88d: 0x6c878420, 0x1f88e: 0x6ca6f220, 0x1f88f: 0x6c883620, + 0x1f890: 0x6c893820, 0x1f891: 0x6ca73420, 0x1f892: 0x6c881620, 0x1f893: 0x6c890620, + 0x1f894: 0x6c88c420, 0x1f895: 0x6ca6f620, 0x1f896: 0x6c891220, 0x1f897: 0x6c886820, + 0x1f898: 0x6ca73a20, 0x1f899: 0x6c881820, 0x1f89a: 0x6c87fa20, 0x1f89b: 0x6c892220, + 0x1f89c: 0x6c8abc20, 0x1f89d: 0x6c8abe20, 0x1f89e: 0x6d0e4220, 0x1f89f: 0x6c8af020, + 0x1f8a0: 0x6c8b1020, 0x1f8a1: 0x6cd76a20, 0x1f8a2: 0x6c881020, 0x1f8a3: 0x6ca75a20, + 0x1f8a4: 0x6ca72020, 0x1f8a5: 0x6c892020, 0x1f8a6: 0x6c888420, 0x1f8a7: 0x6c8b5420, + 0x1f8a8: 0x6c8e1820, 0x1f8a9: 0x6c8c9e20, 0x1f8aa: 0x6ca91020, 0x1f8ab: 0x6c8e1420, + 0x1f8ac: 0x6c87f420, 0x1f8ad: 0x6c8cbe20, 0x1f8ae: 0x6d1c8a20, 0x1f8af: 0x6c8cf620, + 0x1f8b0: 0x6c8cfa20, 0x1f8b1: 0x6c8d2420, 0x1f8b2: 0x6c8d2a20, 0x1f8b3: 0x6c8db620, + 0x1f8b4: 0x6c8e1220, 0x1f8b5: 0x6c858620, 0x1f8b6: 0x6c853820, 0x1f8b7: 0x6c854620, + 0x1f8b8: 0x6c86b420, 0x1f8b9: 0x6c363420, 0x1f8ba: 0x6c823620, 0x1f8bb: 0x6c89ec20, + 0x1f8bc: 0x6c8a0620, 0x1f8bd: 0x6ca7d020, 0x1f8be: 0x6c8a9420, 0x1f8bf: 0x6c822620, + // Block 0x7e3, offset 0x1f8c0 + 0x1f8c0: 0x6c8a1a20, 0x1f8c1: 0x6c8a2620, 0x1f8c2: 0x6c8a7220, 0x1f8c3: 0x6c8a1620, + 0x1f8c4: 0x6c8fb020, 0x1f8c5: 0x6d275420, 0x1f8c6: 0x6cc84c20, 0x1f8c7: 0x6c8e8020, + 0x1f8c8: 0x6c1e2020, 0x1f8c9: 0x6c8efa20, 0x1f8ca: 0x6c8e4a20, 0x1f8cb: 0x6c8e3620, + 0x1f8cc: 0x6c8e5020, 0x1f8cd: 0x6c8e4c20, 0x1f8ce: 0x6c8e5c20, 0x1f8cf: 0x6ca99020, + 0x1f8d0: 0x6c835420, 0x1f8d1: 0x6c8f2420, 0x1f8d2: 0x6c92a020, 0x1f8d3: 0x6c923020, + 0x1f8d4: 0x6c94e420, 0x1f8d5: 0x6c94f020, 0x1f8d6: 0x6c94f420, 0x1f8d7: 0x6c950e20, + 0x1f8d8: 0x6c93d020, 0x1f8d9: 0x6c862e20, 0x1f8da: 0x6c85ca20, 0x1f8db: 0x6c93d620, + 0x1f8dc: 0x6c8f9220, 0x1f8dd: 0x6c857620, 0x1f8de: 0x6c856e20, 0x1f8df: 0x6c93ae20, + 0x1f8e0: 0x6d16ba20, 0x1f8e1: 0x6c87d820, 0x1f8e2: 0x6c83bc20, 0x1f8e3: 0x6ca5c020, + 0x1f8e4: 0x6c851420, 0x1f8e5: 0x6c861220, 0x1f8e6: 0x6c844a20, 0x1f8e7: 0x6c852220, + 0x1f8e8: 0x6c87e220, 0x1f8e9: 0x6c84fc20, 0x1f8ea: 0x6c847e20, 0x1f8eb: 0x6ca68c20, + 0x1f8ec: 0x6ca6ac20, 0x1f8ed: 0x6c8c4420, 0x1f8ee: 0x6c8bde20, 0x1f8ef: 0x6c8be020, + 0x1f8f0: 0x6c8c7a20, 0x1f8f1: 0x6c8bca20, 0x1f8f2: 0x6c8c0c20, 0x1f8f3: 0x6c8c1020, + 0x1f8f4: 0x6c8ba020, 0x1f8f5: 0x6c8bb020, 0x1f8f6: 0x6c8bea20, 0x1f8f7: 0x6c856c20, + 0x1f8f8: 0x6c85f620, 0x1f8f9: 0x6c85f820, 0x1f8fa: 0x6d3c3420, 0x1f8fb: 0x6d358c20, + 0x1f8fc: 0x6cd42220, 0x1f8fd: 0x6cd03620, 0x1f8fe: 0x6c13d020, 0x1f8ff: 0x6c22b220, + // Block 0x7e4, offset 0x1f900 + 0x1f900: 0x6cbc9020, 0x1f901: 0x6c324420, 0x1f902: 0x6cde2e20, 0x1f903: 0x6ce13620, + 0x1f904: 0x6d2d1820, 0x1f905: 0x6c306420, 0x1f906: 0x6c066220, 0x1f907: 0x6c3efc20, + 0x1f908: 0x6d03ba20, 0x1f909: 0x6c67d620, 0x1f90a: 0x6c665220, 0x1f90b: 0x6c7e0420, + 0x1f90c: 0x6cf49020, 0x1f90d: 0x6c56a220, 0x1f90e: 0x43f41c20, 0x1f90f: 0x43f41e20, + 0x1f910: 0x6d37f420, 0x1f911: 0x43f42220, 0x1f912: 0x6cbe7a20, 0x1f913: 0x43f42620, + 0x1f914: 0x43f42820, 0x1f915: 0x6cf6b620, 0x1f916: 0x6d399820, 0x1f917: 0x6d173820, + 0x1f918: 0x6c84f420, 0x1f919: 0x6cd03a20, 0x1f91a: 0x6cfdbc20, 0x1f91b: 0x6c3e9c20, + 0x1f91c: 0x6c6e9220, 0x1f91d: 0x6c6dcc20, 0x1f91e: 0x6d221c20, 0x1f91f: 0x43f43e20, + 0x1f920: 0x6cc0c220, 0x1f921: 0x43f44220, 0x1f922: 0x6d39c620, 0x1f923: 0x43f44620, + 0x1f924: 0x43f44820, 0x1f925: 0x6d178420, 0x1f926: 0x6c30a620, 0x1f927: 0x43f44e20, + 0x1f928: 0x43f45020, 0x1f929: 0x43f45220, 0x1f92a: 0x6c395c20, 0x1f92b: 0x6cd8d420, + 0x1f92c: 0x6c496820, 0x1f92d: 0x6c520c20, 0x1f92e: 0x6c80a420, 0x1f92f: 0x6c868820, + 0x1f930: 0x6cf43220, 0x1f931: 0x6ccbb820, 0x1f932: 0x6c9dfe20, 0x1f933: 0x6c9e0c20, + 0x1f934: 0x6cbd7c20, 0x1f935: 0x6c068e20, 0x1f936: 0x6c509c20, 0x1f937: 0x6ce0a020, + 0x1f938: 0x6cb7ce20, 0x1f939: 0x6cb2ec20, 0x1f93a: 0x6ca16020, 0x1f93b: 0x6c135420, + 0x1f93c: 0x6c17fa20, 0x1f93d: 0x6c5b4c20, 0x1f93e: 0x6c765820, 0x1f93f: 0x6d2b8a20, + // Block 0x7e5, offset 0x1f940 + 0x1f940: 0x6c1a5420, 0x1f941: 0x6c9fa820, 0x1f942: 0x6c61a820, 0x1f943: 0x6cd55a20, + 0x1f944: 0x6c99ec20, 0x1f945: 0x6c4d3a20, 0x1f946: 0x6d3a6420, 0x1f947: 0x6c4ee620, + 0x1f948: 0x6d3a6e20, 0x1f949: 0x6d2ff420, 0x1f94a: 0x6d423c20, 0x1f94b: 0x6c06b020, + 0x1f94c: 0x6ccf3620, 0x1f94d: 0x6d34f820, 0x1f94e: 0x6cb58a20, 0x1f94f: 0x6d203020, + 0x1f950: 0x6d411420, 0x1f951: 0x6d3ac620, 0x1f952: 0x6c5dd420, 0x1f953: 0x6d316e20, + 0x1f954: 0x6c47c420, 0x1f955: 0x6ce84420, 0x1f956: 0x6c6af220, 0x1f957: 0x6c891220, + 0x1f958: 0x6c6d5220, 0x1f959: 0x6c38ca20, 0x1f95a: 0x6cd56220, 0x1f95b: 0x6d30d220, + 0x1f95c: 0x6c1e4020, 0x1f95d: 0x6c12c020, 0x1f95e: 0x6c12c020, 0x1f95f: 0x6d311420, + 0x1f960: 0x6c51d620, 0x1f961: 0x6cd36c20, 0x1f962: 0x6d134620, 0x1f963: 0x6c6cc220, + 0x1f964: 0x6c0d4a20, 0x1f965: 0x6d2bb620, 0x1f966: 0x6c21a420, 0x1f967: 0x6d178420, + 0x1f968: 0x6ca41420, 0x1f969: 0x6cfe0a20, 0x1f96a: 0x6cb21420, 0x1f96b: 0x6c5baa20, + 0x1f96c: 0x4885dc20, 0x1f96d: 0x6c496420, + 0x1f970: 0x6c0e0820, 0x1f971: 0x6c7bdc20, 0x1f972: 0x6cc2b220, 0x1f973: 0x6d03c620, + 0x1f974: 0x6c1ca820, 0x1f975: 0x6c627020, 0x1f976: 0x6d1e1820, 0x1f977: 0x6cce9420, + 0x1f978: 0x6c509c20, 0x1f979: 0x6ce21620, 0x1f97a: 0x6c5bbc20, 0x1f97b: 0x6cec3420, + 0x1f97c: 0x6d37f420, 0x1f97d: 0x6c3b8420, 0x1f97e: 0x6d0d4620, 0x1f97f: 0x6c077c20, + // Block 0x7e6, offset 0x1f980 + 0x1f980: 0x6c097420, 0x1f981: 0x6c226820, 0x1f982: 0x6c025020, 0x1f983: 0x6d182220, + 0x1f984: 0x6c112620, 0x1f985: 0x6d110c20, 0x1f986: 0x6cee0e20, 0x1f987: 0x6cd0ac20, + 0x1f988: 0x6d236a20, 0x1f989: 0x6d2b8a20, 0x1f98a: 0x6c02d820, 0x1f98b: 0x6c1a5420, + 0x1f98c: 0x6c279420, 0x1f98d: 0x6d212620, 0x1f98e: 0x6cd9b020, 0x1f98f: 0x6c0de620, + 0x1f990: 0x6c024020, 0x1f991: 0x6cbe7a20, 0x1f992: 0x6c80f820, 0x1f993: 0x6cee5220, + 0x1f994: 0x6d2f2220, 0x1f995: 0x6c271220, 0x1f996: 0x6ccbda20, 0x1f997: 0x6c8e4a20, + 0x1f998: 0x6d1a7020, 0x1f999: 0x6d3e4020, 0x1f99a: 0x6c4ee620, 0x1f99b: 0x6c6eb420, + 0x1f99c: 0x6d3a6e20, 0x1f99d: 0x6cbc0220, 0x1f99e: 0x6c74c820, 0x1f99f: 0x6c391620, + 0x1f9a0: 0x6d399820, 0x1f9a1: 0x6d325020, 0x1f9a2: 0x6c225020, 0x1f9a3: 0x6c578420, + 0x1f9a4: 0x6c492220, 0x1f9a5: 0x6cf16020, 0x1f9a6: 0x6d173820, 0x1f9a7: 0x6cd15e20, + 0x1f9a8: 0x6d344020, 0x1f9a9: 0x6c736420, 0x1f9aa: 0x6d311220, 0x1f9ab: 0x6ce4ba20, + 0x1f9ac: 0x6ce5cc20, 0x1f9ad: 0x6c6af220, 0x1f9ae: 0x6c832420, 0x1f9af: 0x6ce1c820, + 0x1f9b0: 0x6c891220, 0x1f9b1: 0x6cb2ac20, 0x1f9b2: 0x6d30d220, 0x1f9b3: 0x6c598420, + 0x1f9b4: 0x6c573420, 0x1f9b5: 0x6d276220, 0x1f9b6: 0x6cbb4c20, 0x1f9b7: 0x6c407e20, + 0x1f9b8: 0x6cd36c20, 0x1f9b9: 0x6c2e3820, 0x1f9ba: 0x6d39c620, 0x1f9bb: 0x6cbeb220, + 0x1f9bc: 0x6d134620, 0x1f9bd: 0x6cab0e20, 0x1f9be: 0x6d23f620, 0x1f9bf: 0x6c6cc220, + // Block 0x7e7, offset 0x1f9c0 + 0x1f9c0: 0x6c0bdc20, 0x1f9c1: 0x6d2bb620, 0x1f9c2: 0x6cd50820, 0x1f9c3: 0x6c1b5020, + 0x1f9c4: 0x6cd9e620, 0x1f9c5: 0x6d03f420, 0x1f9c6: 0x6d3a6220, 0x1f9c7: 0x6ca41420, + 0x1f9c8: 0x6c6e9220, 0x1f9c9: 0x6c046220, 0x1f9ca: 0x6cfe0a20, 0x1f9cb: 0x6c35b420, + 0x1f9cc: 0x6cb21420, 0x1f9cd: 0x6d320420, 0x1f9ce: 0x6c4a9620, 0x1f9cf: 0x48509420, + 0x1f9d0: 0x48508820, 0x1f9d1: 0x4867aa20, 0x1f9d2: 0x6c513820, 0x1f9d3: 0x6d008620, + 0x1f9d4: 0x6c6ad220, 0x1f9d5: 0x48a49220, 0x1f9d6: 0x6cba2c20, 0x1f9d7: 0x6c084620, + 0x1f9d8: 0x6c36f820, 0x1f9d9: 0x6cad1420, + // Block 0x7e8, offset 0x1fa00 + 0x1fa00: 0xf0001c1c, 0x1fa01: 0xf0001c1c, 0x1fa02: 0x00658c9c, + 0x1fa10: 0x2cd43683, 0x1fa11: 0x2d3f2883, 0x1fa12: 0x2cd6a083, 0x1fa13: 0xf0001c1c, + 0x1fa14: 0x2c37b483, 0x1fa15: 0x2c341683, 0x1fa16: 0x2c6b9883, 0x1fa17: 0x2ce45483, + 0x1fa18: 0x2c682283, 0x1fa19: 0x2d1d3483, 0x1fa1a: 0x2cf3c883, 0x1fa1b: 0x2c8a9483, + 0x1fa1c: 0x2cb97883, 0x1fa1d: 0x2c546483, 0x1fa1e: 0x2d292683, 0x1fa1f: 0x2d02dc83, + 0x1fa20: 0x2c1e5483, 0x1fa21: 0x2d37b683, 0x1fa22: 0x2cd0d283, 0x1fa23: 0x2c395083, + 0x1fa24: 0x2cd0dc83, 0x1fa25: 0x2c20b483, 0x1fa26: 0x2d0db483, 0x1fa27: 0x2ce7e683, + 0x1fa28: 0x2c103683, 0x1fa29: 0x2d13b683, 0x1fa2a: 0x2cc9f283, 0x1fa2b: 0x2d1f4083, + 0x1fa2c: 0x2d426083, 0x1fa2d: 0x2d378283, 0x1fa2e: 0x2d200883, 0x1fa2f: 0x2d350083, + 0x1fa30: 0x2d407e83, 0x1fa31: 0x2c26e083, 0x1fa32: 0x2c6d1a83, 0x1fa33: 0x2c796883, + 0x1fa34: 0x2c50b683, 0x1fa35: 0x2c97ba83, 0x1fa36: 0x2d1f9883, 0x1fa37: 0x2d266883, + 0x1fa38: 0x2ccf9a83, 0x1fa39: 0x2c438c83, 0x1fa3a: 0x2d1c6283, + // Block 0x7e9, offset 0x1fa40 + 0x1fa40: 0xe000b460, 0x1fa41: 0xe000b474, 0x1fa42: 0xe000b470, 0x1fa43: 0xe000b458, + 0x1fa44: 0xe000b46c, 0x1fa45: 0xe000b464, 0x1fa46: 0xe000b468, 0x1fa47: 0xe000b478, + 0x1fa48: 0xe000b45c, + 0x1fa50: 0x2c2a9083, 0x1fa51: 0x2c785283, + // Block 0x7ea, offset 0x1fa80 + 0x1fa80: 0x6c508820, 0x1fa81: 0x6cb4c820, 0x1fa83: 0x6cbc8c20, + 0x1fa85: 0x6c4d4c20, + 0x1fa89: 0x6cbf9020, 0x1fa8a: 0x6c126420, + 0x1fa8d: 0x6cd2ec20, + 0x1fa93: 0x6cd7ba20, + 0x1fa94: 0x6c73ca20, + 0x1fa9b: 0x6d22c020, + 0x1fa9d: 0x6c796620, + 0x1faa2: 0x6d3dfc20, + 0x1faa6: 0x6d03be20, + 0x1fab1: 0x6ca1fc20, + 0x1fab7: 0x6c5e9420, + 0x1fab8: 0x6d12d220, 0x1fab9: 0x6c755e20, + 0x1fabc: 0x6cb97c20, 0x1fabd: 0x6c922420, + // Block 0x7eb, offset 0x1fac0 + 0x1fac9: 0x6c1e5e20, + 0x1fad7: 0x6cd3d420, + 0x1fae0: 0x6cbd0220, + 0x1fae5: 0x6c40ce20, + 0x1faed: 0x6cb58e20, + 0x1faf7: 0x6c15c420, + // Block 0x7ec, offset 0x1fb00 + 0x1fb04: 0x6c582a20, 0x1fb06: 0x6d163620, 0x1fb07: 0x6d425e20, + 0x1fb08: 0x6c6a4a20, + 0x1fb11: 0x6d404420, + 0x1fb14: 0x6d3ed420, + 0x1fb1f: 0x6c6c2020, + 0x1fb22: 0x6cac1620, + 0x1fb24: 0x6c32ee20, 0x1fb25: 0x6c238220, 0x1fb27: 0x6cd08e20, + 0x1fb38: 0x6c59aa20, + // Block 0x7ed, offset 0x1fb40 + 0x1fb4a: 0x6d1abe20, + 0x1fb4c: 0x6c4bb820, + 0x1fb56: 0x6c6f3a20, + 0x1fb6b: 0x6ccfa220, + 0x1fb7a: 0x6c6fe220, + // Block 0x7ee, offset 0x1fb80 + 0x1fb85: 0x6d130c20, + 0x1fb89: 0x6c308c20, + 0x1fb8c: 0x6c73c020, 0x1fb8d: 0x6c6a4c20, 0x1fb8f: 0x6c2df020, + 0x1fb91: 0x6c73c220, 0x1fb92: 0x6c20ba20, + 0x1fb96: 0x6c8c9820, + 0x1fb9a: 0x6ce63e20, + 0x1fba3: 0x6c44aa20, + 0x1fbae: 0x6d0b7e20, + 0x1fbb1: 0x6d148020, + 0x1fbbf: 0x6cef1c20, + // Block 0x7ef, offset 0x1fbc0 + 0x1fbc2: 0x6c6a5820, + 0x1fbcc: 0x6d146a20, + 0x1fbd7: 0x6c2f3220, + 0x1fbda: 0x6cb59a20, + 0x1fbec: 0x6c05b020, + 0x1fbf1: 0x6d01a620, + 0x1fbf9: 0x6d2f3220, + // Block 0x7f0, offset 0x1fc00 + 0x1fc0c: 0x6d1daa20, + 0x1fc10: 0x6d073820, + 0x1fc19: 0x6c2f3820, 0x1fc1b: 0x6c280820, + 0x1fc1f: 0x6cf06220, + 0x1fc23: 0x6c488620, + 0x1fc29: 0x6c391220, + 0x1fc2e: 0x6ca0ba20, + 0x1fc31: 0x6cf56220, 0x1fc32: 0x6d0d3220, + 0x1fc35: 0x6ca5b820, 0x1fc36: 0x6c286020, + // Block 0x7f1, offset 0x1fc40 + 0x1fc4b: 0x6c281a20, + 0x1fc4f: 0x6ce1ac20, + 0x1fc52: 0x6c455620, + 0x1fc57: 0x6c7abc20, + 0x1fc58: 0x6c1f0420, + 0x1fc6f: 0x6cc25e20, + 0x1fc71: 0x6ca0be20, 0x1fc73: 0x6cd19220, + 0x1fc75: 0x6c41c620, 0x1fc77: 0x6cd0d820, + // Block 0x7f2, offset 0x1fc80 + 0x1fc81: 0x6ceaa020, + 0x1fc85: 0x6cd42c20, + 0x1fc8a: 0x6ca7e620, + 0x1fca4: 0x6d281a20, 0x1fca5: 0x6c489220, + 0x1fcac: 0x6cfe7e20, 0x1fcad: 0x6c814420, + 0x1fcb0: 0x6c286e20, 0x1fcb1: 0x6cdd0620, + 0x1fcb5: 0x6c988420, 0x1fcb6: 0x6d148220, + 0x1fcb8: 0x6ce26e20, 0x1fcba: 0x6c094020, + // Block 0x7f3, offset 0x1fcc0 + 0x1fcc2: 0x6cde3020, + 0x1fcd7: 0x6c95e420, + 0x1fce2: 0x6cf7d220, 0x1fce3: 0x6c5cb820, + 0x1fce4: 0x6c268e20, 0x1fce7: 0x6c722420, + 0x1fce9: 0x6c318c20, + 0x1fcec: 0x6c017c20, + // Block 0x7f4, offset 0x1fd00 + 0x1fd09: 0x6c9a8820, + 0x1fd0c: 0x6cc46c20, 0x1fd0e: 0x6c003820, 0x1fd0f: 0x6d22ec20, + 0x1fd12: 0x6c666620, + 0x1fd14: 0x6cb76620, + 0x1fd1f: 0x6c9fa220, + 0x1fd23: 0x6d391620, + 0x1fd24: 0x6d35ac20, 0x1fd25: 0x6d37ea20, 0x1fd26: 0x6ca4e220, 0x1fd27: 0x6c0e1a20, + 0x1fd29: 0x6d3bc020, 0x1fd2a: 0x6cd5be20, 0x1fd2b: 0x6d0a8420, + 0x1fd2c: 0x6c741e20, 0x1fd2d: 0x6cb9fe20, + 0x1fd30: 0x6c489a20, 0x1fd32: 0x6ce85220, + 0x1fd36: 0x6d1d3820, 0x1fd37: 0x6d35d620, + 0x1fd3e: 0x6c7c6620, + // Block 0x7f5, offset 0x1fd40 + 0x1fd46: 0x6c192620, + 0x1fd56: 0x6c88ec20, 0x1fd57: 0x6d0ae620, + 0x1fd5c: 0x6c4ce820, 0x1fd5d: 0x6c9e8e20, 0x1fd5e: 0x6ccf0e20, 0x1fd5f: 0x6d223620, + 0x1fd61: 0x6cd8b020, 0x1fd62: 0x6cda1220, + 0x1fd64: 0x6d35d820, 0x1fd67: 0x6cbc7c20, + 0x1fd69: 0x6c3fde20, + 0x1fd6c: 0x6c710a20, 0x1fd6d: 0x6c071e20, 0x1fd6f: 0x6c099220, + 0x1fd72: 0x6cdd6220, + 0x1fd75: 0x6cba0820, 0x1fd76: 0x6ca03220, 0x1fd77: 0x6c15b620, + 0x1fd7a: 0x6ccaa820, 0x1fd7b: 0x6c5ec020, + // Block 0x7f6, offset 0x1fd80 + 0x1fd95: 0x6c461620, 0x1fd96: 0x6cbf1e20, + 0x1fd9a: 0x6cc73820, + 0x1fd9e: 0x6cda1a20, 0x1fd9f: 0x6cda1e20, + 0x1fda0: 0x6d10f420, + 0x1fdaa: 0x6c1d6a20, + 0x1fdad: 0x6cd66620, 0x1fdae: 0x6d2ffa20, 0x1fdaf: 0x6c862420, + 0x1fdb0: 0x6c413e20, 0x1fdb1: 0x6cdbc620, 0x1fdb2: 0x6d2d7c20, + 0x1fdb4: 0x6d3c4220, + 0x1fdbd: 0x6c400820, + // Block 0x7f7, offset 0x1fdc0 + 0x1fdc3: 0x6c5ee020, + 0x1fdc4: 0x6c30b220, + 0x1fdd7: 0x6c5bd020, + 0x1fdda: 0x6c65a420, 0x1fddb: 0x6d0d9c20, + 0x1fddc: 0x6d364a20, + 0x1fde8: 0x6c9a5c20, 0x1fde9: 0x6d120e20, 0x1fdea: 0x6c2b3220, 0x1fdeb: 0x6d150e20, + 0x1fdef: 0x6c0cf220, + 0x1fdf2: 0x6cc1a220, 0x1fdf3: 0x6d181a20, + 0x1fdf5: 0x6d105420, + 0x1fdf9: 0x6d2c3e20, + 0x1fdfd: 0x6ccc6020, + // Block 0x7f8, offset 0x1fe00 + 0x1fe19: 0x6c7f1820, + 0x1fe2e: 0x6c746e20, + 0x1fe30: 0x6cb50620, 0x1fe33: 0x6d216a20, + 0x1fe36: 0x6d291820, 0x1fe37: 0x6cc98220, + 0x1fe38: 0x6ccb3a20, 0x1fe3b: 0x6c340420, + 0x1fe3f: 0x6c6b9e20, + // Block 0x7f9, offset 0x1fe40 + 0x1fe40: 0x6c782020, 0x1fe43: 0x6d265420, + 0x1fe47: 0x6c65ca20, + 0x1fe48: 0x6d113220, + 0x1fe53: 0x6cfaca20, + 0x1fe55: 0x6d000220, 0x1fe56: 0x6cbb9620, + 0x1fe5a: 0x6d23b820, 0x1fe5b: 0x6cc1ae20, + 0x1fe61: 0x6cfac820, 0x1fe62: 0x6c962020, + 0x1fe64: 0x6c4a0a20, 0x1fe67: 0x6c198620, + 0x1fe68: 0x6c209620, 0x1fe69: 0x6d155620, 0x1fe6b: 0x6d333020, + 0x1fe6d: 0x6d403020, 0x1fe6e: 0x6c335c20, + 0x1fe70: 0x6d2d3420, + 0x1fe7f: 0x6c3a6e20, + // Block 0x7fa, offset 0x1fe80 + 0x1fe80: 0x6d155820, 0x1fe81: 0x6c9b4420, + 0x1fe88: 0x6c0b0a20, 0x1fe89: 0x6c6b4020, 0x1fe8a: 0x6cd61820, 0x1fe8b: 0x6c8a2220, + 0x1fe8c: 0x6c08fa20, 0x1fe8d: 0x6cda7620, + 0x1fe91: 0x6c2ca220, + 0x1fea1: 0x6c076220, 0x1fea2: 0x6cf21220, + 0x1fea7: 0x6c9b6a20, + 0x1fea9: 0x6c15ea20, + 0x1feb5: 0x6c29f620, + 0x1feba: 0x6cb21c20, 0x1febb: 0x6c660820, + 0x1febc: 0x6c8c7420, 0x1febd: 0x6c4b9220, 0x1febe: 0x6cb54620, 0x1febf: 0x6c52dc20, + // Block 0x7fb, offset 0x1fec0 + 0x1fec3: 0x6c60e820, + 0x1fec4: 0x6d024e20, 0x1fec5: 0x6d330820, 0x1fec6: 0x6c15fa20, + 0x1fed0: 0x6d116c20, 0x1fed1: 0x6c160a20, + 0x1fed8: 0x6c2cee20, 0x1fed9: 0x6c1d6020, 0x1feda: 0x6ca56220, 0x1fedb: 0x6ca56420, + 0x1fede: 0x6d2d5420, 0x1fedf: 0x6c0b1e20, + 0x1fee1: 0x6c161020, + 0x1feea: 0x6cff5a20, + 0x1feef: 0x6c248620, + 0x1fef0: 0x6d02f620, 0x1fef1: 0x6c6e4420, 0x1fef2: 0x6cb96620, + 0x1fef4: 0x6cbe6820, + 0x1fef9: 0x6c475220, + // Block 0x7fc, offset 0x1ff00 + 0x1ff04: 0x6cf4b420, + 0x1ff1c: 0x6d25e420, 0x1ff1d: 0x6c0dde20, + 0x1ff22: 0x6cecde20, + 0x1ff30: 0x6ca7a620, + 0x1ff35: 0x6c891020, + 0x1ff38: 0x6cc53e20, + 0x1ff3e: 0x6c396e20, 0x1ff3f: 0x6c2b9420, + // Block 0x7fd, offset 0x1ff40 + 0x1ff4a: 0x6c5af820, 0x1ff4b: 0x6d190620, + 0x1ff4c: 0x6cfbbc20, + 0x1ff56: 0x6c800420, 0x1ff57: 0x6c40a020, + 0x1ff59: 0x6d04ae20, + 0x1ff5c: 0x6c897e20, 0x1ff5d: 0x6ce1a620, 0x1ff5e: 0x6c5fba20, + 0x1ff62: 0x6c6ba620, 0x1ff63: 0x6d2c1a20, + 0x1ff64: 0x6cd19420, + 0x1ff6a: 0x6cb59220, 0x1ff6b: 0x6c0b2c20, + 0x1ff6d: 0x6c802220, 0x1ff6e: 0x6c8c1a20, + 0x1ff76: 0x6d364c20, 0x1ff77: 0x6c09bc20, + 0x1ff78: 0x6cd17020, + 0x1ff7d: 0x6cd17a20, 0x1ff7f: 0x6cbdbc20, + // Block 0x7fe, offset 0x1ff80 + 0x1ff82: 0x6c0be620, 0x1ff83: 0x6cf55e20, + 0x1ff89: 0x6c733a20, 0x1ff8b: 0x6c5e8420, + 0x1ff8d: 0x6cf57620, 0x1ff8e: 0x6cbdc420, + 0x1ff91: 0x6c4d5620, + 0x1ff95: 0x6c94e220, + 0x1ffa0: 0x6d26b420, + 0x1ffa8: 0x6c880a20, + 0x1ffaf: 0x6c048e20, + 0x1ffb2: 0x6c526820, + 0x1ffb6: 0x6cb54020, + 0x1ffba: 0x6cb93820, 0x1ffbb: 0x6d337820, + 0x1ffbc: 0x6c991a20, + // Block 0x7ff, offset 0x1ffc0 + 0x1ffc1: 0x6c238020, + 0x1ffc4: 0x6ca30020, + 0x1ffca: 0x6ce6a820, + 0x1ffcc: 0x6d3f6e20, + 0x1ffd5: 0x6c6ed420, 0x1ffd6: 0x6d2f8620, + 0x1ffdf: 0x6ca71c20, + 0x1ffe0: 0x6c19e420, 0x1ffe3: 0x6cb86620, + 0x1ffe6: 0x6d236420, 0x1ffe7: 0x6c690020, + 0x1ffed: 0x6d2fda20, + 0x1fff3: 0x6c2b5020, + 0x1fff4: 0x6c6f3c20, + 0x1fff8: 0x6cdc0a20, 0x1fffb: 0x6d108220, + 0x1ffff: 0x6cedbe20, + // Block 0x800, offset 0x20000 + 0x20002: 0x6c89d820, + 0x20004: 0x6ce71220, 0x20006: 0x6c9bfc20, + 0x2000b: 0x6d1faa20, + 0x20013: 0x6cd7e020, + 0x2001b: 0x6c910820, + 0x2001f: 0x6d19f820, + 0x20025: 0x6c1d4420, + 0x2002b: 0x6c420020, + 0x2002c: 0x6c6f3820, + 0x20036: 0x6cbdf820, 0x20037: 0x6c6ef220, + 0x20039: 0x6d006e20, + // Block 0x801, offset 0x20040 + 0x20042: 0x6c51b820, + 0x20046: 0x6ce1ae20, + 0x20048: 0x6cc01220, 0x20049: 0x6d007420, 0x2004a: 0x6c6e5420, 0x2004b: 0x6ca71620, + 0x2004c: 0x6c6e5620, 0x2004f: 0x6c5fea20, + 0x20058: 0x6ce4de20, 0x2005a: 0x6c252220, 0x2005b: 0x6c2e7c20, + 0x2005d: 0x6cbea020, + 0x20065: 0x6cb2e620, 0x20066: 0x6cb29620, + 0x20068: 0x6c2e9020, 0x20069: 0x6c910420, + 0x20073: 0x6c88ba20, + 0x20074: 0x6c4e0a20, 0x20075: 0x6cacd620, 0x20076: 0x6ce0f020, + 0x2007a: 0x6d151020, 0x2007b: 0x6d081420, + 0x2007c: 0x6cddca20, 0x2007d: 0x6c8e6420, 0x2007e: 0x6cd6d220, 0x2007f: 0x6cd0a820, + // Block 0x802, offset 0x20080 + 0x20081: 0x6c10a020, 0x20082: 0x6cd9bc20, + 0x20085: 0x6cbd8c20, 0x20086: 0x6cd06620, + 0x2008a: 0x6ca9f420, 0x2008b: 0x6ce6de20, + 0x2008c: 0x6c677020, + 0x20095: 0x6cf6b820, 0x20096: 0x6d36fe20, + 0x2009d: 0x6c7f5e20, 0x2009e: 0x6c86be20, 0x2009f: 0x6c86c020, + 0x200a2: 0x6c519420, 0x200a3: 0x6c69cc20, + 0x200a5: 0x6d0d0a20, 0x200a7: 0x6cd49420, + 0x200aa: 0x6cd2a220, + 0x200b1: 0x6d31ae20, 0x200b3: 0x6d1e8620, + 0x200ba: 0x6cddc620, 0x200bb: 0x6cf39e20, + // Block 0x803, offset 0x200c0 + 0x200c1: 0x6c169620, 0x200c2: 0x6c238820, + 0x200c6: 0x6c720820, + 0x200ce: 0x6cd4a420, + 0x200d4: 0x6c6fe620, 0x200d5: 0x6ceef020, + 0x200de: 0x6c5db620, + 0x200e4: 0x6c6a2020, + 0x200ec: 0x6d2a4e20, + 0x200f6: 0x6cab7220, + 0x200fc: 0x6c488c20, + // Block 0x804, offset 0x20100 + 0x20103: 0x6c4fba20, + 0x20104: 0x6c84f620, 0x20105: 0x6d356c20, 0x20106: 0x6cfc7220, + 0x20109: 0x6c100c20, 0x2010a: 0x6c170020, + 0x20113: 0x6d274a20, + 0x20114: 0x6c510020, + 0x2011c: 0x6ce1e420, + 0x20120: 0x6c0c4a20, + 0x20125: 0x6c2da420, 0x20127: 0x6c37b620, + 0x20128: 0x6c6f3e20, + 0x2012d: 0x6c2c0a20, 0x2012e: 0x6d164420, 0x2012f: 0x6c7d4620, + 0x20131: 0x6d300a20, 0x20133: 0x6c7de420, + 0x20134: 0x6d384e20, 0x20135: 0x6c71ee20, + 0x20139: 0x6ccd6820, 0x2013a: 0x6ccc3820, 0x2013b: 0x6c2da820, + 0x2013c: 0x6c046c20, 0x2013d: 0x6c5e7420, + // Block 0x805, offset 0x20140 + 0x20140: 0x6d378620, 0x20143: 0x6d144e20, + 0x20145: 0x6c79b020, 0x20146: 0x6cf33e20, + 0x2014a: 0x6c436420, 0x2014b: 0x6c031220, + 0x2014e: 0x6c463620, + 0x20151: 0x6cfb2420, 0x20152: 0x6c484020, 0x20153: 0x6c8ef620, + 0x20154: 0x6c1b7620, 0x20155: 0x6c48c020, 0x20156: 0x6c1fdc20, + 0x20158: 0x6c83a020, 0x20159: 0x6c242a20, 0x2015a: 0x6cd63e20, + 0x20161: 0x6c08b620, + 0x20165: 0x6c0dbc20, 0x20166: 0x6c857820, + 0x20169: 0x6c6fae20, 0x2016a: 0x6ce54a20, 0x2016b: 0x6c347220, + 0x2016d: 0x6d0bde20, 0x2016e: 0x6cc28a20, + 0x20171: 0x6c8ac820, 0x20173: 0x6c787c20, + 0x20175: 0x6c449620, 0x20176: 0x6d312420, + 0x20178: 0x6c3b5820, + // Block 0x806, offset 0x20180 + 0x20181: 0x6d146e20, 0x20183: 0x6c6fd220, + 0x20184: 0x6d067c20, 0x20185: 0x6c68cc20, + 0x20188: 0x6c93cc20, 0x20189: 0x6c6fb020, 0x2018b: 0x6c1e1e20, + 0x2018e: 0x6cfc7e20, + 0x20190: 0x6c7b1620, 0x20191: 0x6c333e20, + 0x20196: 0x6c952e20, 0x20197: 0x6cf59a20, + 0x20198: 0x6cbe0820, 0x20199: 0x6c107420, + 0x201a4: 0x6cb84620, + 0x201b1: 0x6caf5020, 0x201b2: 0x6d0adc20, 0x201b3: 0x6c07da20, + 0x201b4: 0x6c4cb220, 0x201b5: 0x6c484c20, + 0x201b9: 0x6c710020, + 0x201bc: 0x6cb82420, 0x201be: 0x6c741020, + // Block 0x807, offset 0x201c0 + 0x201c4: 0x6c85c020, + 0x201d0: 0x6c570c20, 0x201d1: 0x6c683c20, + 0x201d8: 0x6cb84e20, 0x201da: 0x6d2c2620, 0x201db: 0x6cb82620, + 0x201dd: 0x6d304620, 0x201de: 0x6c139020, 0x201df: 0x6d1ce820, + 0x201e2: 0x6d0bee20, + 0x201e4: 0x6c1cc020, + 0x201e8: 0x6c1b9a20, 0x201ea: 0x6cec8620, + 0x201ec: 0x6cd9a620, + 0x201f2: 0x6c76cc20, 0x201f3: 0x6d255c20, + 0x201fd: 0x6c1d9c20, 0x201ff: 0x6cdd6420, + // Block 0x808, offset 0x20200 + 0x20200: 0x6ce85820, 0x20203: 0x6d305620, + 0x20204: 0x6ce2ee20, 0x20206: 0x6cf36820, + 0x20208: 0x6c264a20, 0x20209: 0x6c860820, 0x2020a: 0x6c139420, + 0x20215: 0x6cc66e20, 0x20216: 0x6c461820, 0x20217: 0x6cc3bc20, + 0x20219: 0x6c83ce20, + 0x2021e: 0x6ce1c620, + 0x20224: 0x6c860a20, 0x20227: 0x6c9c5c20, + 0x20229: 0x6c1c3020, + 0x2022c: 0x6c4bfa20, 0x2022d: 0x6c909420, 0x2022e: 0x6c209020, 0x2022f: 0x6cdd6e20, + 0x20230: 0x6c690420, 0x20231: 0x6c6d0c20, + 0x20235: 0x6c381620, 0x20236: 0x6d2cf620, + 0x2023e: 0x6c6d0e20, 0x2023f: 0x6c254220, + // Block 0x809, offset 0x20240 + 0x20242: 0x6c136c20, 0x20243: 0x6d420820, + 0x20245: 0x6d2fc420, + 0x20248: 0x6cb1c620, 0x20249: 0x6d2dfc20, 0x2024a: 0x6cf66420, 0x2024b: 0x6d121420, + 0x2024c: 0x6c3f7420, 0x2024d: 0x6c1cce20, + 0x20253: 0x6c254a20, + 0x20257: 0x6c486820, + 0x20263: 0x6c5f0020, + 0x20266: 0x6ccb3c20, 0x20267: 0x6d2d8e20, + 0x20268: 0x6c8e2420, 0x20269: 0x6ccb3e20, 0x2026a: 0x6d132220, + 0x20270: 0x6c70ba20, + 0x20276: 0x6ce87220, + 0x2027a: 0x6cc7c620, 0x2027b: 0x6d2af820, + 0x2027c: 0x6c589020, + // Block 0x80a, offset 0x20280 + 0x20281: 0x6cfc2820, 0x20283: 0x6cb91a20, + 0x20284: 0x6d2fdc20, + 0x2028b: 0x6c11b220, + 0x2028e: 0x6c7e1820, 0x2028f: 0x6c869a20, + 0x20290: 0x6cc76420, + 0x20294: 0x6c31c020, 0x20297: 0x6c8b3020, + 0x2029c: 0x6d1c0620, 0x2029d: 0x6c86c220, + 0x202a0: 0x6c31c620, 0x202a2: 0x6c8d8020, + 0x202aa: 0x6ceca220, + 0x202af: 0x6c2f1820, + 0x202b3: 0x6c6f4020, + 0x202b5: 0x6c855e20, 0x202b6: 0x6c7a1620, 0x202b7: 0x6c791e20, + 0x202b9: 0x6d31b220, + // Block 0x80b, offset 0x202c0 + 0x202c0: 0x6c51b420, 0x202c2: 0x6c091220, + 0x202c4: 0x6caf2820, + 0x202ca: 0x6c4f4820, + 0x202d1: 0x6d3d2820, 0x202d2: 0x6c332020, + 0x202d4: 0x6d16a420, + 0x202dc: 0x6c787e20, 0x202dd: 0x6d16a620, 0x202de: 0x6ca0dc20, + 0x202e1: 0x6c118a20, 0x202e3: 0x6c44ee20, + 0x202e4: 0x6c788820, 0x202e5: 0x6cd32a20, + 0x202ed: 0x6c8cc620, 0x202ee: 0x6c07dc20, + 0x202f1: 0x6c32b820, + 0x202f6: 0x6c72e020, 0x202f7: 0x6ca4e420, + 0x202f8: 0x6d3f0020, 0x202fb: 0x6d401e20, + // Block 0x80c, offset 0x20300 + 0x20303: 0x6ce0ea20, + 0x20306: 0x6cf9be20, 0x20307: 0x6c4ec020, + 0x2030c: 0x6c94a620, 0x2030d: 0x6cb99020, + 0x20313: 0x6ca12220, + 0x20314: 0x6cab3a20, 0x20315: 0x6c4fc820, + 0x20319: 0x6d2c3420, 0x2031a: 0x6c737020, 0x2031b: 0x6c23a020, + 0x20320: 0x6c864420, 0x20321: 0x6d2c4020, 0x20322: 0x6d1fdc20, 0x20323: 0x6c2d6c20, + 0x20324: 0x6c747820, 0x20325: 0x6c073a20, + 0x20329: 0x6d11bc20, 0x2032a: 0x6cb1c820, + 0x20331: 0x6c6d3620, 0x20332: 0x6c766c20, 0x20333: 0x6ccb4020, + 0x20334: 0x6d102c20, 0x20335: 0x6c6d3820, + 0x20339: 0x6c78dc20, + // Block 0x80d, offset 0x20340 + 0x20344: 0x6c14de20, 0x20347: 0x6ca74a20, + 0x20349: 0x6cedb020, 0x2034a: 0x6c942a20, + 0x20350: 0x6d277a20, 0x20351: 0x6d108420, 0x20352: 0x6c05a020, + 0x20355: 0x6c755220, 0x20356: 0x6d07fc20, + 0x20358: 0x6d385820, + 0x20360: 0x6c7ce820, 0x20361: 0x6c3cda20, + 0x2036a: 0x6cc17e20, 0x2036b: 0x6ccecc20, + 0x2036c: 0x6cdce420, + 0x20370: 0x6c316820, 0x20372: 0x6c7af820, 0x20373: 0x6cad8c20, + 0x2037a: 0x6c065020, + 0x2037e: 0x6c401620, 0x2037f: 0x6c700c20, + // Block 0x80e, offset 0x20380 + 0x20380: 0x6cc47c20, + 0x20384: 0x6c70ca20, + 0x2038a: 0x6cbf6a20, + 0x2038d: 0x6d38c220, 0x2038e: 0x6c577420, 0x2038f: 0x6c05e020, + 0x20395: 0x6d145c20, 0x20397: 0x6d148420, + 0x20398: 0x6d148620, + 0x2039d: 0x6c995020, + 0x203a6: 0x6cc86c20, + 0x203ab: 0x6c227c20, + 0x203ae: 0x6c4dca20, + 0x203b0: 0x6c238420, + 0x203b4: 0x6cf83a20, + 0x203b9: 0x6cc2b820, 0x203ba: 0x6ce56c20, + 0x203bc: 0x6c2e0c20, 0x203be: 0x6c4ddc20, + // Block 0x80f, offset 0x203c0 + 0x203c7: 0x6d12a620, + 0x203cd: 0x6c353420, 0x203ce: 0x6ceef820, + 0x203d0: 0x6c122e20, 0x203d1: 0x6c2e2620, + 0x203d5: 0x6c362620, 0x203d6: 0x6c2c6820, + 0x203d8: 0x6cdb9220, 0x203d9: 0x6cc30a20, + 0x203dc: 0x6c368020, 0x203dd: 0x6cab4420, 0x203de: 0x6d081c20, + 0x203e2: 0x6cf47820, + 0x203e6: 0x6d190820, + 0x203e8: 0x6ca1fa20, + 0x203f0: 0x6c549620, + 0x203f4: 0x6c4dde20, + 0x203ff: 0x6cd22820, + // Block 0x810, offset 0x20400 + 0x20403: 0x6cc96420, + 0x20408: 0x6c090820, 0x2040a: 0x6c4dcc20, 0x2040b: 0x6c6e4620, + 0x2040e: 0x6cbdfa20, 0x2040f: 0x6c25d420, + 0x20410: 0x6c22a620, 0x20412: 0x6c046e20, + 0x20417: 0x6c32f020, + 0x2041c: 0x6cf84220, + 0x20427: 0x6d33c020, + 0x20428: 0x6c949220, 0x2042a: 0x6c54b620, 0x2042b: 0x6c601420, + 0x2042c: 0x6c48c820, + 0x20432: 0x6cacd820, + // Block 0x811, offset 0x20440 + 0x20440: 0x6d39c220, + 0x20445: 0x6c08fc20, 0x20447: 0x6d21ae20, + 0x20452: 0x6cb6c220, + 0x20455: 0x6c50b420, 0x20456: 0x6c1ed420, + 0x20459: 0x6ccec220, 0x2045a: 0x6c1be020, 0x2045b: 0x6c0eac20, + 0x2045f: 0x6cc62420, + 0x20460: 0x6d1ef820, + 0x20464: 0x6ca39620, + 0x20469: 0x6c5b9420, 0x2046a: 0x6ce57620, 0x2046b: 0x6c04c220, + 0x20470: 0x6d057620, + 0x20474: 0x6d1f1020, 0x20475: 0x6c1c0620, + 0x2047f: 0x6c526220, + // Block 0x812, offset 0x20480 + 0x20483: 0x6cec7020, + 0x20486: 0x6d01ce20, + 0x2048a: 0x6c748c20, + 0x2048c: 0x6cdbec20, 0x2048d: 0x6cbe2c20, 0x2048e: 0x6d3bbc20, + 0x20495: 0x6c617620, + 0x20498: 0x6c091420, 0x2049a: 0x6cf59c20, + 0x204a0: 0x6c602820, 0x204a2: 0x6c75c620, + 0x204a5: 0x6c89ee20, 0x204a6: 0x6d1eb620, + 0x204ad: 0x6c70ea20, + 0x204b2: 0x6d266a20, + 0x204b5: 0x6c055e20, + 0x204b8: 0x6cafaa20, 0x204bb: 0x6d2b3820, + 0x204be: 0x6d165820, 0x204bf: 0x6c2bc820, + // Block 0x813, offset 0x204c0 + 0x204c2: 0x6cbc9220, + 0x204c4: 0x6cdd4c20, 0x204c6: 0x6c22ae20, + 0x204c8: 0x6d3aa220, 0x204c9: 0x6d267420, + 0x204cf: 0x6c682820, + 0x204d4: 0x6cd23e20, 0x204d7: 0x6d148820, + 0x204d8: 0x6cf99220, + 0x204e0: 0x6d254220, + 0x204e5: 0x6c4c6020, 0x204e7: 0x6c789020, + 0x204ea: 0x6c252420, 0x204eb: 0x6d171a20, + 0x204f5: 0x6c85c220, 0x204f7: 0x6c2d0c20, + 0x204fa: 0x6cf5d620, + 0x204ff: 0x6c09c020, + // Block 0x814, offset 0x20500 + 0x20502: 0x6c0b3420, 0x20503: 0x6c99ea20, + 0x20504: 0x6c85e420, 0x20507: 0x6cda1820, + 0x20510: 0x6c8e5620, 0x20511: 0x6c4b5420, 0x20512: 0x6c78b620, + 0x20517: 0x6d151220, + 0x20519: 0x6cf7f620, 0x2051a: 0x6d1a7c20, + 0x2051f: 0x6c78c020, + 0x20523: 0x6ccf6020, + 0x20527: 0x6cf2bc20, + 0x2052e: 0x6cb0b620, + 0x20536: 0x6d26dc20, 0x20537: 0x6c538020, + 0x2053a: 0x6c867220, 0x2053b: 0x6c405020, + // Block 0x815, offset 0x20540 + 0x20543: 0x6c74d620, + 0x20544: 0x6cfae820, + 0x20549: 0x6c2cf020, + 0x2054c: 0x6c878820, + 0x20553: 0x6ce83420, + 0x20558: 0x6c645820, 0x2055b: 0x6c041420, + 0x2055c: 0x6c2c0c20, 0x2055d: 0x6d2efc20, + 0x20563: 0x6d22bc20, + 0x20568: 0x6c333420, + 0x2056d: 0x6c115c20, 0x2056e: 0x6ce88620, + 0x20576: 0x6cdf9420, 0x20577: 0x6c5fee20, + 0x20578: 0x6cb59420, 0x20579: 0x6ccd7620, 0x2057a: 0x6ca6fa20, + // Block 0x816, offset 0x20580 + 0x20586: 0x6c498c20, + 0x20588: 0x6c08e420, 0x2058b: 0x6d037820, + 0x20593: 0x6d31fa20, + 0x20599: 0x6cc94a20, 0x2059b: 0x6ca0b820, + 0x2059d: 0x6c3dc420, + 0x205a2: 0x6ce1a820, 0x205a3: 0x6c055c20, + 0x205aa: 0x6c0c8a20, + 0x205ac: 0x6cf56620, 0x205ae: 0x6c6a5e20, + 0x205b6: 0x6c6cd220, + 0x205be: 0x6cb8b020, + // Block 0x817, offset 0x205c0 + 0x205c8: 0x6cd89820, 0x205c9: 0x6c6e1620, 0x205cb: 0x6c1b8820, + 0x205d7: 0x6c6e1c20, + 0x205e5: 0x6cdc3a20, + 0x205ef: 0x6d2bde20, + 0x205f0: 0x6c83e020, + 0x205f4: 0x6d3d0620, + 0x205f9: 0x6c0ba820, + 0x205ff: 0x6cea6220, + // Block 0x818, offset 0x20600 + 0x20603: 0x6c0a1820, + 0x20606: 0x6c3ac220, + 0x2060a: 0x6c2a8220, + 0x2060c: 0x6d3a2620, + 0x20611: 0x6c70dc20, + 0x20619: 0x6d15b020, + 0x2061c: 0x6d0b6420, 0x2061f: 0x6c1bd820, + 0x20620: 0x6c488e20, 0x20621: 0x6d34d020, + 0x20628: 0x6cc61620, 0x2062b: 0x6d1e8a20, + 0x2062d: 0x6c0ea820, 0x2062f: 0x6c611820, + 0x20630: 0x6cb23620, 0x20633: 0x6d1b9c20, + 0x20634: 0x6d0f4220, 0x20635: 0x6c98b420, + 0x2063d: 0x6c904e20, 0x2063e: 0x6ca2ca20, 0x2063f: 0x6cc9bc20, + // Block 0x819, offset 0x20640 + 0x20640: 0x6c1fda20, 0x20642: 0x6c221c20, 0x20643: 0x6cf41a20, + 0x20644: 0x6cc5ae20, + 0x20648: 0x6c272420, 0x20649: 0x6c5fc420, 0x2064b: 0x6d15b820, + 0x2064d: 0x6cc45e20, + 0x20650: 0x6c5d9820, 0x20651: 0x6c484220, 0x20653: 0x6d301020, + 0x20654: 0x6cb08220, 0x20657: 0x6d288220, + 0x20658: 0x6c04e020, 0x20659: 0x6c6a6a20, + 0x2065c: 0x6c53e220, 0x2065f: 0x6cfc7620, + 0x20660: 0x6c5a8820, + 0x20669: 0x6d2bc420, 0x2066a: 0x6c270820, 0x2066b: 0x6c436c20, + 0x2066d: 0x6cb08420, 0x2066f: 0x6cb14620, + 0x20670: 0x6cd23620, 0x20671: 0x6c898620, 0x20672: 0x6d267620, 0x20673: 0x6c565020, + 0x20674: 0x6c0b6a20, 0x20677: 0x6cc61e20, + 0x20679: 0x6cc62020, + // Block 0x81a, offset 0x20680 + 0x20684: 0x6d13c420, 0x20685: 0x6d338820, 0x20687: 0x6c6c2820, + 0x20688: 0x6cf22020, 0x20689: 0x6c173420, 0x2068b: 0x6cbf9a20, + 0x2068d: 0x6d3a5620, 0x2068f: 0x6d2c1c20, + 0x20690: 0x6cb34820, 0x20691: 0x6c019e20, 0x20693: 0x6c50c220, + 0x20695: 0x6c1e5620, 0x20696: 0x6d0c6020, + 0x2069a: 0x6cd31820, 0x2069b: 0x6c566020, + 0x2069c: 0x6c35dc20, + 0x206b4: 0x6cd24020, + 0x206b9: 0x6ceaaa20, 0x206ba: 0x6c272c20, 0x206bb: 0x6cec6a20, + 0x206bc: 0x6cb2f420, 0x206bd: 0x6cc6f420, 0x206be: 0x6c705220, + // Block 0x81b, offset 0x206c0 + 0x206c0: 0x6c0e4a20, + 0x206d0: 0x6d222820, 0x206d1: 0x6c30a220, 0x206d3: 0x6c4ace20, + 0x206d4: 0x6cd45420, 0x206d7: 0x6cdd0820, + 0x206d8: 0x6ca68220, 0x206d9: 0x6d385c20, 0x206da: 0x6c905220, 0x206db: 0x6c0dca20, + 0x206dc: 0x6d421420, 0x206dd: 0x6d12d620, 0x206de: 0x6cc4b420, + 0x206e0: 0x6c8cb220, 0x206e1: 0x6cc96c20, + 0x206e4: 0x6c82b820, 0x206e5: 0x6c35e820, 0x206e7: 0x6d381a20, + 0x206e8: 0x6c612820, 0x206eb: 0x6c35ea20, + 0x206ef: 0x6d428420, + 0x206f2: 0x6ca31820, 0x206f3: 0x6d27dc20, + // Block 0x81c, offset 0x20700 + 0x2070a: 0x6d016c20, 0x2070b: 0x6d418a20, + 0x2070c: 0x6cd5aa20, 0x2070d: 0x6c2fce20, 0x2070e: 0x6c384620, 0x2070f: 0x6cc58a20, + 0x20711: 0x6c051820, 0x20712: 0x6c4de020, 0x20713: 0x6c530a20, + 0x20714: 0x6d13d020, 0x20716: 0x6d13d220, + 0x20719: 0x6c77da20, 0x2071a: 0x6d16de20, 0x2071b: 0x6c5b1e20, + 0x2071c: 0x6d329020, + 0x2072e: 0x6c6e6220, + 0x20731: 0x6c43d220, + 0x20734: 0x6ca9fa20, 0x20735: 0x6cbca220, 0x20737: 0x6c2e7e20, + 0x20739: 0x6c61c420, 0x2073a: 0x6d171e20, 0x2073b: 0x6d14b620, + 0x2073d: 0x6c3e2c20, 0x2073e: 0x6cd77220, 0x2073f: 0x6cd77420, + // Block 0x81d, offset 0x20740 + 0x20740: 0x6d1e1e20, 0x20741: 0x6c78fe20, 0x20742: 0x6c573020, 0x20743: 0x6c53b620, + 0x20747: 0x6c50ec20, + 0x2074a: 0x6c509620, 0x2074b: 0x6cb9f820, + 0x2074c: 0x6cb85020, 0x2074e: 0x6cd8a620, + 0x20750: 0x6c051e20, + 0x2076c: 0x6c6d9e20, 0x2076d: 0x6c789220, + 0x20773: 0x6c001a20, + 0x20774: 0x6c908020, 0x20776: 0x6ce84820, + 0x20779: 0x6c207020, + 0x2077c: 0x6cd98620, 0x2077d: 0x6c19d620, 0x2077f: 0x6cee6a20, + // Block 0x81e, offset 0x20780 + 0x20782: 0x6caa5220, + 0x20784: 0x6c6fb620, 0x20787: 0x6c0d2c20, + 0x207a1: 0x6cffda20, 0x207a2: 0x6cd0f820, 0x207a3: 0x6c545020, + 0x207a6: 0x6d3ad020, + 0x207a8: 0x6c490e20, 0x207a9: 0x6c5eb220, 0x207ab: 0x6c61dc20, + 0x207ad: 0x6cf5da20, 0x207af: 0x6ccf3e20, + 0x207b0: 0x6cab7e20, 0x207b1: 0x6c553c20, 0x207b2: 0x6cde4220, 0x207b3: 0x6cff7c20, + 0x207b5: 0x6d2a7c20, + 0x207b8: 0x6c0fee20, 0x207b9: 0x6cb77820, 0x207ba: 0x6cebd620, 0x207bb: 0x6ceabe20, + 0x207bc: 0x6c2a0c20, 0x207be: 0x6ca33020, + // Block 0x81f, offset 0x207c0 + 0x207e0: 0x6d2cee20, 0x207e3: 0x6d0b9020, + 0x207e6: 0x6cf44020, 0x207e7: 0x6d31aa20, + 0x207e8: 0x6c2a8e20, 0x207e9: 0x6c509a20, 0x207eb: 0x6c01ea20, + 0x207ec: 0x6cafda20, 0x207ed: 0x6ccb2220, 0x207ee: 0x6c3bbc20, 0x207ef: 0x6c485420, + 0x207f3: 0x6cb35420, + 0x207f7: 0x6d088820, + 0x207f8: 0x6c4d9c20, 0x207f9: 0x6c427420, 0x207fa: 0x6c034620, 0x207fb: 0x6d3f7620, + 0x207fc: 0x6c9c0020, 0x207fe: 0x6c5dba20, + // Block 0x820, offset 0x20800 + 0x20827: 0x6c2cc220, + 0x20828: 0x6cf5dc20, 0x2082b: 0x6c26ee20, + 0x2082c: 0x6ca47a20, + 0x20830: 0x6c2dbe20, 0x20831: 0x6c95f820, 0x20832: 0x6c789e20, + 0x20837: 0x6d178e20, + 0x20838: 0x6c744420, 0x20839: 0x6c512420, 0x2083b: 0x6c602c20, + 0x2083e: 0x6c51c620, 0x2083f: 0x6ca82820, + // Block 0x821, offset 0x20840 + 0x20840: 0x6cc8f620, 0x20841: 0x6cb99220, 0x20842: 0x6c276c20, 0x20843: 0x6cce6c20, + 0x20844: 0x6c78ae20, 0x20845: 0x6d3a1220, 0x20847: 0x6cd1b820, + 0x20848: 0x6c93da20, 0x20849: 0x6c635c20, 0x2084a: 0x6cb10c20, 0x2084b: 0x6c546e20, + 0x2084c: 0x6c5ec420, 0x2084d: 0x6cde5420, 0x2084e: 0x6c1dac20, 0x2084f: 0x6cf29020, + 0x20850: 0x6c6e8020, 0x20851: 0x6cb30e20, 0x20852: 0x6d2cf220, 0x20853: 0x6d02d420, + 0x20856: 0x6c0b9420, + 0x20859: 0x6d06ce20, + 0x2085e: 0x6c471020, 0x2085f: 0x6c6be620, + 0x20862: 0x6cfb6a20, + 0x20878: 0x6c356420, 0x2087a: 0x6c0f0020, 0x2087b: 0x6cb15420, + 0x2087f: 0x6d28ea20, + // Block 0x822, offset 0x20880 + 0x20881: 0x6cac2420, 0x20882: 0x6ce85a20, + 0x20884: 0x6d1bb420, + 0x208ae: 0x6cfde220, + 0x208b1: 0x6caaf420, 0x208b2: 0x6c438e20, 0x208b3: 0x6c0f0220, + 0x208b4: 0x6d01a420, + 0x208b8: 0x6d315c20, 0x208b9: 0x6d214620, 0x208ba: 0x6ca6a420, + // Block 0x823, offset 0x208c0 + 0x208c0: 0x6d0a9220, 0x208c1: 0x6cec3620, 0x208c3: 0x6c021820, + 0x208c4: 0x6c4ece20, 0x208c5: 0x6c52b220, 0x208c6: 0x6c27e220, + 0x208c8: 0x6caac220, 0x208ca: 0x6c12b020, 0x208cb: 0x6c604820, + 0x208cc: 0x6ca5ae20, 0x208cd: 0x6d1e4020, 0x208ce: 0x6cfed220, + 0x208d0: 0x6c1faa20, 0x208d1: 0x6d121020, 0x208d3: 0x6c440220, + 0x208d4: 0x6ce0fc20, 0x208d5: 0x6c065220, 0x208d6: 0x6c15be20, + 0x208d8: 0x6d06ec20, 0x208db: 0x6c4d2020, + 0x208dd: 0x6c1db620, 0x208df: 0x6c65a620, + 0x208e0: 0x6d422620, + 0x208e4: 0x6cf0a420, 0x208e5: 0x6c265220, 0x208e6: 0x6caf6c20, + // Block 0x824, offset 0x20900 + 0x20910: 0x6c592c20, 0x20912: 0x6cf63a20, + 0x20914: 0x6cae4c20, 0x20915: 0x6c8e3420, 0x20916: 0x6ca24a20, 0x20917: 0x6c9ec620, + 0x20918: 0x6c812020, 0x20919: 0x6ce9fe20, 0x2091a: 0x6c048420, + 0x2091d: 0x6c439820, 0x2091f: 0x6c7aa020, + 0x20922: 0x6c636a20, 0x20923: 0x6c0e7c20, + // Block 0x825, offset 0x20940 + 0x2094d: 0x6c592e20, 0x2094f: 0x6d40c420, + 0x20950: 0x6c960e20, + 0x20957: 0x6c840a20, + 0x20959: 0x6c515620, 0x2095a: 0x6ca06220, + 0x2095c: 0x6cd72a20, 0x2095d: 0x6cd00420, 0x2095e: 0x6c777020, 0x2095f: 0x6c1c4020, + 0x20960: 0x6c8d3420, 0x20961: 0x6c95ba20, + 0x20964: 0x6d0dae20, 0x20965: 0x6d2fc620, 0x20966: 0x6c1fae20, 0x20967: 0x6c47ac20, + 0x20968: 0x6cbde020, 0x2096a: 0x6cdff220, 0x2096b: 0x6c3be220, + 0x2096c: 0x6ce8d220, + 0x20971: 0x6c8d3620, + 0x20974: 0x6c810820, + // Block 0x826, offset 0x20980 + 0x20996: 0x6c7fa620, 0x20997: 0x6d299220, + 0x20998: 0x6cf50820, + 0x2099d: 0x6c840c20, 0x2099e: 0x6c000a20, 0x2099f: 0x6c94b620, + 0x209a0: 0x6d353e20, 0x209a1: 0x6c1dc820, 0x209a2: 0x6c67f020, + 0x209a4: 0x6c64c620, + 0x209a9: 0x6c950020, 0x209aa: 0x6d153020, + 0x209ac: 0x6cce0820, + 0x209bb: 0x6c5f0220, + // Block 0x827, offset 0x209c0 + 0x209dc: 0x6d181e20, 0x209dd: 0x6ca8ea20, + 0x209e1: 0x6c5c0a20, 0x209e3: 0x6d2bf020, + 0x209e6: 0x6c4e6020, + 0x209e8: 0x6d1afa20, 0x209e9: 0x6c0a1a20, 0x209ea: 0x6c014620, 0x209eb: 0x6cf97220, + 0x209ec: 0x6ca60020, + 0x209f0: 0x6c2b3e20, 0x209f1: 0x6c65cc20, 0x209f2: 0x6cac6820, + 0x209f5: 0x6d23bc20, 0x209f6: 0x6c1fc620, 0x209f7: 0x6d289820, + 0x209f9: 0x6c13fc20, 0x209fb: 0x6d307620, + 0x209fc: 0x6ccb4220, 0x209fe: 0x6cae3620, 0x209ff: 0x6c472820, + // Block 0x828, offset 0x20a00 + 0x20a00: 0x6d307820, + 0x20a06: 0x6c842420, 0x20a07: 0x6c30be20, + 0x20a09: 0x6c1dd020, 0x20a0b: 0x6d419620, + 0x20a0c: 0x6cb39e20, 0x20a0f: 0x6ccefc20, + 0x20a10: 0x6c8fa220, + 0x20a22: 0x6cd5fe20, + 0x20a24: 0x6c6d3a20, 0x20a25: 0x6c8d4820, + 0x20a28: 0x6c774220, 0x20a29: 0x6c7e9220, 0x20a2b: 0x6d05cc20, + 0x20a2c: 0x6c6d3c20, 0x20a2e: 0x6c1fea20, + 0x20a32: 0x6d26de20, + // Block 0x829, offset 0x20a40 + 0x20a46: 0x6c971820, 0x20a47: 0x6d020820, + 0x20a48: 0x6c6f8620, 0x20a49: 0x6c627420, 0x20a4b: 0x6d26e820, + 0x20a4f: 0x6c64f220, + 0x20a51: 0x6c4e3020, 0x20a53: 0x6cc98a20, + 0x20a54: 0x6c5c2820, 0x20a55: 0x6cbc5a20, 0x20a57: 0x6ccb5220, + 0x20a58: 0x6d419a20, 0x20a5b: 0x6c91d620, + 0x20a5c: 0x6c57c420, 0x20a5d: 0x6c1e6820, 0x20a5e: 0x6ccd5c20, 0x20a5f: 0x6cf31220, + 0x20a60: 0x6c60a220, 0x20a61: 0x6d3d9620, 0x20a62: 0x6cfb8c20, 0x20a63: 0x6d141020, + 0x20a64: 0x6c4c8820, 0x20a65: 0x6c7d1c20, + // Block 0x82a, offset 0x20a80 + 0x20a91: 0x6d38a820, + 0x20a94: 0x6c929e20, 0x20a96: 0x6c0e9020, 0x20a97: 0x6cd28a20, + 0x20a98: 0x6d1d4a20, 0x20a99: 0x6c7a5c20, + 0x20ab9: 0x6d36d820, 0x20aba: 0x6d00e820, + 0x20abd: 0x6d135420, 0x20abe: 0x6c36b420, 0x20abf: 0x6c940420, + // Block 0x82b, offset 0x20ac0 + 0x20ac0: 0x6c4f1420, 0x20ac1: 0x6d135620, + 0x20ac6: 0x6c962c20, 0x20ac7: 0x6c21dc20, + 0x20ac8: 0x6c397020, 0x20ac9: 0x6d34a020, 0x20aca: 0x6d1d5020, 0x20acb: 0x6cf1f220, + 0x20acc: 0x6cebf220, 0x20acd: 0x6c00d620, 0x20ace: 0x6d21b020, + 0x20ad1: 0x6c571a20, 0x20ad3: 0x6c8b3220, + 0x20ad4: 0x6c6dd620, 0x20ad5: 0x6d28ca20, + 0x20ae7: 0x6d29e820, + 0x20ae8: 0x6c336420, 0x20aea: 0x6c629220, + 0x20aee: 0x6cf2a220, + 0x20af0: 0x6c60ba20, 0x20af1: 0x6cf6e420, 0x20af3: 0x6d2e8620, + 0x20af4: 0x6ce95c20, + // Block 0x82c, offset 0x20b00 + 0x20b0a: 0x6d21b220, + 0x20b0f: 0x6c8b4620, + 0x20b12: 0x6d372420, 0x20b13: 0x6cd20a20, + 0x20b15: 0x6c81c220, 0x20b16: 0x6c7f6020, 0x20b17: 0x6cf03620, + 0x20b18: 0x6cad7220, 0x20b19: 0x6c1b6220, 0x20b1a: 0x6d1d1420, 0x20b1b: 0x6c314020, + 0x20b1d: 0x6c314220, 0x20b1f: 0x6c067620, + 0x20b20: 0x6cbcf020, 0x20b21: 0x6cd62020, 0x20b23: 0x6d34a820, + 0x20b29: 0x6c8b4820, 0x20b2b: 0x6caed620, + 0x20b2d: 0x6d300620, + 0x20b3f: 0x6cab5a20, + // Block 0x82d, offset 0x20b40 + 0x20b42: 0x6d023c20, 0x20b43: 0x6c60d820, + 0x20b44: 0x6c7f6220, 0x20b45: 0x6d1cb020, 0x20b46: 0x6c134c20, + 0x20b56: 0x6c820020, + 0x20b5d: 0x6c952820, + 0x20b61: 0x6c8fbc20, 0x20b62: 0x6cf91020, + 0x20b66: 0x6c8c7620, + 0x20b69: 0x6c4aa020, + 0x20b73: 0x6d03b020, + 0x20b77: 0x6c848620, + 0x20b78: 0x6c221620, + // Block 0x82e, offset 0x20b80 + 0x20b87: 0x6cbebc20, + 0x20b91: 0x6c652e20, 0x20b92: 0x6c2a4420, 0x20b93: 0x6c661420, + 0x20b94: 0x6cbee820, 0x20b95: 0x6d026e20, 0x20b96: 0x6d1d5a20, + 0x20b9f: 0x6c4d0020, + 0x20ba1: 0x6d311820, 0x20ba2: 0x6ccf0420, 0x20ba3: 0x6c9c9a20, + 0x20ba4: 0x6c58ba20, + 0x20bb1: 0x6c248220, 0x20bb2: 0x6cc7e820, 0x20bb3: 0x6cc95a20, + 0x20bb4: 0x6c5e4620, 0x20bb5: 0x6d143420, 0x20bb7: 0x6c2b4e20, + 0x20bb9: 0x6c949e20, 0x20bbb: 0x6d193e20, + // Block 0x82f, offset 0x20bc0 + 0x20bc2: 0x6c100020, 0x20bc3: 0x6cad1820, + 0x20bc4: 0x6ce04220, 0x20bc5: 0x6c35a420, 0x20bc6: 0x6d29ee20, 0x20bc7: 0x6c23c420, + 0x20bd3: 0x6d2d0a20, + 0x20bd5: 0x6cf82620, 0x20bd6: 0x6c98b020, + 0x20bd8: 0x6c7eca20, 0x20bd9: 0x6d287820, + 0x20be1: 0x6c36e620, + 0x20be5: 0x6c2f0e20, + 0x20bed: 0x6c493c20, + 0x20bf1: 0x6c596620, + 0x20bf5: 0x6cd40620, 0x20bf6: 0x6c663220, + 0x20bf9: 0x6d2dce20, 0x20bfa: 0x6c610620, 0x20bfb: 0x6c596820, + // Block 0x830, offset 0x20c00 + 0x20c05: 0x6cedb220, 0x20c06: 0x6c95d820, + 0x20c0f: 0x6c315620, + 0x20c15: 0x6c893c20, + 0x20c23: 0x6ca7ea20, + 0x20c24: 0x6ca41c20, 0x20c25: 0x6c6fc820, 0x20c26: 0x6d266c20, + 0x20c29: 0x6d108820, 0x20c2a: 0x6c204c20, + 0x20c2e: 0x6c11cc20, 0x20c2f: 0x6c84f820, + 0x20c30: 0x6c33d420, 0x20c31: 0x6ca41e20, 0x20c32: 0x6ca42020, + 0x20c38: 0x6cc63820, + 0x20c3d: 0x6d267820, + // Block 0x831, offset 0x20c40 + 0x20c40: 0x6d1ee620, 0x20c42: 0x6d19a420, + 0x20c44: 0x6c4c5820, + 0x20c48: 0x6c295420, + 0x20c51: 0x6d312620, 0x20c52: 0x6c9c3c20, 0x20c53: 0x6c2e6820, + 0x20c56: 0x6d312820, + 0x20c5a: 0x6c7abe20, + 0x20c5c: 0x6c4de220, 0x20c5d: 0x6cd98020, 0x20c5e: 0x6c50d020, 0x20c5f: 0x6c5e9620, + 0x20c60: 0x6d302e20, + 0x20c64: 0x6c0dd620, 0x20c66: 0x6ceef220, 0x20c67: 0x6ce7d220, + 0x20c69: 0x6ce88c20, + 0x20c6c: 0x6c426e20, 0x20c6d: 0x6c908220, 0x20c6e: 0x6cc2c820, 0x20c6f: 0x6c5d2220, + 0x20c70: 0x6d3ba420, 0x20c71: 0x6cc3b220, 0x20c73: 0x6c533a20, + 0x20c75: 0x6c296020, 0x20c76: 0x6c510420, 0x20c77: 0x6cdf6e20, + 0x20c78: 0x6c48ca20, 0x20c7a: 0x6d230220, + 0x20c7c: 0x6d0baa20, 0x20c7f: 0x6cec8c20, + // Block 0x832, offset 0x20c80 + 0x20c80: 0x6cc43820, + 0x20c85: 0x6c744620, 0x20c86: 0x6cab3820, + 0x20c89: 0x6cc29c20, 0x20c8a: 0x6d347220, + 0x20c8d: 0x6c8d1820, 0x20c8e: 0x6cf37020, 0x20c8f: 0x6d033c20, + 0x20c90: 0x6c26ae20, 0x20c92: 0x6d24f220, 0x20c93: 0x6d261e20, + 0x20c97: 0x6ca13820, + 0x20c99: 0x6d1f5420, + 0x20c9e: 0x6cf45820, + 0x20ca0: 0x6d2ebe20, 0x20ca3: 0x6d07b820, + 0x20ca6: 0x6cc53c20, 0x20ca7: 0x6c4be220, + 0x20ca8: 0x6d23be20, + 0x20cae: 0x6cf9fc20, 0x20caf: 0x6c0b5220, + 0x20cb0: 0x6d1f7e20, 0x20cb2: 0x6d1a1420, + 0x20cb4: 0x6d083220, 0x20cb5: 0x6d1f8c20, 0x20cb6: 0x6c827a20, + 0x20cbc: 0x6ce6a620, 0x20cbf: 0x6d311a20, + // Block 0x833, offset 0x20cc0 + 0x20cc4: 0x6d292420, 0x20cc5: 0x6c40ba20, 0x20cc6: 0x6c7e5620, + 0x20cc9: 0x6cc39e20, + 0x20cce: 0x6c70ec20, + 0x20cd0: 0x6c20fa20, 0x20cd1: 0x6c263e20, 0x20cd2: 0x6cea3a20, 0x20cd3: 0x6c001220, + 0x20cd7: 0x6d3edc20, + 0x20cda: 0x6c59a620, 0x20cdb: 0x6d167c20, + 0x20ce9: 0x6c062e20, 0x20cea: 0x6c1afc20, + 0x20ced: 0x6cc63a20, + 0x20cf4: 0x6c913220, 0x20cf7: 0x6c6a6c20, + 0x20cf8: 0x6cd30a20, 0x20cfa: 0x6d413620, + // Block 0x834, offset 0x20d00 + 0x20d01: 0x6d167e20, + 0x20d04: 0x6c3bc820, 0x20d05: 0x6c3bca20, + 0x20d09: 0x6ca0c420, + 0x20d0d: 0x6cd59a20, + 0x20d1b: 0x6c023e20, + 0x20d1d: 0x6cb05620, 0x20d1e: 0x6cb27820, 0x20d1f: 0x6cb2f820, + 0x20d20: 0x6c639e20, 0x20d21: 0x6d38ca20, 0x20d23: 0x6cbf9e20, + 0x20d27: 0x6d1fa620, + 0x20d28: 0x6cdfd020, 0x20d2b: 0x6cc6f620, + 0x20d2d: 0x6c9d2020, + 0x20d36: 0x6d16ac20, + 0x20d38: 0x6cc6fc20, 0x20d3b: 0x6c8ace20, + 0x20d3c: 0x6cbf0220, + // Block 0x835, offset 0x20d40 + 0x20d59: 0x6c5b2020, 0x20d5a: 0x6c61a020, + 0x20d5f: 0x6c433a20, + 0x20d67: 0x6d1f0420, + 0x20d68: 0x6c138220, 0x20d69: 0x6c2a6020, 0x20d6a: 0x6d19ac20, + 0x20d6c: 0x6d22de20, 0x20d6d: 0x6c06fc20, 0x20d6f: 0x6c0ed020, + // Block 0x836, offset 0x20d80 + 0x20d94: 0x6cbb6820, + 0x20d9a: 0x6c141c20, + 0x20d9c: 0x6d02be20, 0x20d9e: 0x6c1b1420, + 0x20da3: 0x6d2a7220, + 0x20da4: 0x6c7c6020, 0x20da6: 0x6c3aa220, + 0x20da9: 0x6cddea20, 0x20daa: 0x6c48f420, + 0x20dad: 0x6c342620, + 0x20db2: 0x6c4a5420, + 0x20db4: 0x6d345020, + // Block 0x837, offset 0x20dc0 + 0x20dcc: 0x6c15a620, 0x20dcd: 0x6ca4ec20, + 0x20dd0: 0x6c553e20, 0x20dd2: 0x6ce21820, + 0x20de1: 0x6d175620, + 0x20de4: 0x6ca82a20, 0x20de5: 0x6d2d3e20, 0x20de6: 0x6c587220, + 0x20de8: 0x6c325620, 0x20dea: 0x6cb78620, 0x20deb: 0x6c12e420, + 0x20dee: 0x6c20cc20, + 0x20df2: 0x6c264e20, + 0x20df6: 0x6d361820, 0x20df7: 0x6c453020, + 0x20dfb: 0x6cf26e20, + // Block 0x838, offset 0x20e00 + 0x20e09: 0x6c325820, + 0x20e0d: 0x6c1b2420, + 0x20e11: 0x6c01be20, 0x20e12: 0x6c7df820, + 0x20e14: 0x6cf2e820, + 0x20e18: 0x6d1bb620, 0x20e1a: 0x6cb13e20, + 0x20e2b: 0x6d2c3020, + 0x20e2c: 0x6d3b6420, 0x20e2e: 0x6cdac420, + 0x20e33: 0x6ca6a620, + 0x20e3a: 0x6d3a1420, 0x20e3b: 0x6c14fe20, + 0x20e3e: 0x6c084020, 0x20e3f: 0x6ca5f220, + // Block 0x839, offset 0x20e40 + 0x20e40: 0x6d347420, 0x20e41: 0x6c5bd420, + 0x20e58: 0x6cfa3a20, 0x20e5a: 0x6d364e20, 0x20e5b: 0x6cf63c20, + 0x20e5e: 0x6c67aa20, + 0x20e69: 0x6c330220, 0x20e6a: 0x6c3d7c20, + 0x20e6d: 0x6c685c20, 0x20e6e: 0x6c176820, 0x20e6f: 0x6c045020, + 0x20e75: 0x6c8b1e20, + 0x20e7c: 0x6c025a20, + // Block 0x83a, offset 0x20e80 + 0x20e8b: 0x6d2a1620, + 0x20e8c: 0x6c1f6020, 0x20e8f: 0x6ceb8620, + 0x20e92: 0x6c4fd220, 0x20e93: 0x6c773620, + 0x20e94: 0x6d1a7e20, 0x20e96: 0x6cfcea20, + 0x20e9d: 0x6c401820, 0x20e9e: 0x6c0cb620, + 0x20ea0: 0x6c7c4020, + 0x20ea4: 0x6cbcde20, 0x20ea5: 0x6cc98420, + 0x20ebf: 0x6c266220, + // Block 0x83b, offset 0x20ec0 + 0x20ec0: 0x6d12b220, + 0x20ec4: 0x6d2f0820, 0x20ec6: 0x6c896420, + 0x20ec8: 0x6c332620, + 0x20ecd: 0x6c816620, 0x20ece: 0x6d09a620, + 0x20ed8: 0x6d36a420, 0x20eda: 0x6c7a5a20, + 0x20ede: 0x6cdc6a20, 0x20edf: 0x6cf2a020, + 0x20ee3: 0x6c7a5e20, + 0x20eef: 0x6c65d420, + 0x20ef6: 0x6c67ba20, + 0x20efb: 0x6d3caa20, + 0x20efd: 0x6cd6dc20, 0x20efe: 0x6d219c20, + // Block 0x83c, offset 0x20f00 + 0x20f01: 0x6cc98c20, 0x20f03: 0x6d23e620, + 0x20f04: 0x6c803a20, + 0x20f0a: 0x6d240620, + 0x20f0c: 0x6cba2820, 0x20f0d: 0x6c72a220, 0x20f0f: 0x6c8b3420, + 0x20f12: 0x6cd53e20, 0x20f13: 0x6cfd1a20, + 0x20f16: 0x6c415420, + 0x20f22: 0x6cdf4420, + 0x20f27: 0x6ce52220, + 0x20f2f: 0x6c9c1020, + 0x20f31: 0x6c2ba220, 0x20f33: 0x6c9ddc20, + 0x20f3e: 0x6c5afa20, + // Block 0x83d, offset 0x20f40 + 0x20f49: 0x6c351c20, + 0x20f4d: 0x6c8b4a20, + 0x20f52: 0x6c7f6820, 0x20f53: 0x6d1aa820, + 0x20f54: 0x6c804620, 0x20f56: 0x6c68a020, + 0x20f58: 0x6c5e2620, + 0x20f63: 0x6c4c4c20, + 0x20f66: 0x6d2e9420, + 0x20f6d: 0x6c9d0820, + 0x20f70: 0x6c7c5020, + 0x20f77: 0x6c352620, + 0x20f7f: 0x6d1ab020, + // Block 0x83e, offset 0x20f80 + 0x20f87: 0x6c836020, + 0x20f95: 0x6c462a20, + 0x20f9b: 0x6ce6ac20, + 0x20f9c: 0x6d10c820, 0x20f9e: 0x6cedf620, + 0x20fa3: 0x6c6aa020, + 0x20fa8: 0x6d04c220, 0x20faa: 0x6cd5c020, + 0x20fb1: 0x6cf08c20, + 0x20fb4: 0x6d236620, + // Block 0x83f, offset 0x20fc0 + 0x20fc1: 0x6d2da620, + 0x20fc9: 0x6c01ee20, + 0x20fcf: 0x6cca9a20, + 0x20fd0: 0x6c1e0c20, 0x20fd2: 0x6c7ae220, + 0x20fd6: 0x6c71a020, 0x20fd7: 0x6c4d5220, + 0x20fe2: 0x6c9e0420, + 0x20fe7: 0x6c4f9420, + 0x20fea: 0x6c1d9e20, + 0x20fee: 0x6c8d1a20, + 0x20ff0: 0x6d3f9620, + // Block 0x840, offset 0x21000 + 0x21009: 0x6c7d4820, + 0x2100c: 0x6d378c20, 0x2100e: 0x6d2f5420, + 0x21010: 0x6c2f2e20, 0x21011: 0x6c467420, 0x21012: 0x6d279620, 0x21013: 0x6c27c620, + 0x21014: 0x6caada20, + 0x2101b: 0x6c0dd820, + 0x2101d: 0x6cc47420, 0x2101e: 0x6c14c420, + 0x21022: 0x6cc70620, 0x21023: 0x6d19c820, + 0x21024: 0x6c14c620, 0x21027: 0x6d361a20, + 0x2102a: 0x6c48f820, 0x2102b: 0x6caabe20, + 0x2102c: 0x6ccfe420, 0x2102f: 0x6cdac620, + 0x21032: 0x6cf2b820, 0x21033: 0x6c1bb220, + 0x2103a: 0x6c9ee220, 0x2103b: 0x6d347e20, + 0x2103e: 0x6cb50a20, + // Block 0x841, offset 0x21040 + 0x21041: 0x6c465820, + 0x21046: 0x6c90fa20, + 0x21048: 0x6d3ea020, + 0x2104d: 0x6c293a20, 0x2104f: 0x6cfc6820, + 0x21051: 0x6cc77e20, + 0x21057: 0x6caefe20, + 0x2105e: 0x6cf56c20, + 0x21062: 0x6c7aba20, + 0x21064: 0x6c4b2620, 0x21065: 0x6c212e20, 0x21066: 0x6c6baa20, + 0x21072: 0x6c6bac20, 0x21073: 0x6cf57820, + 0x21075: 0x6c7a1a20, 0x21077: 0x6c46ec20, + 0x21078: 0x6d2cac20, 0x21079: 0x6c392620, + 0x2107c: 0x6d015a20, + // Block 0x842, offset 0x21080 + 0x2108d: 0x6c585e20, 0x2108f: 0x6ca79020, + 0x21090: 0x6cf85820, + 0x2109b: 0x6c240820, + 0x2109d: 0x6c4bba20, + 0x210a1: 0x6cf5b620, + 0x210a7: 0x6cb83620, + 0x210aa: 0x6c981c20, + 0x210ad: 0x6d303220, + 0x210b0: 0x6c734620, + 0x210b4: 0x6c0ca020, + // Block 0x843, offset 0x210c0 + 0x210c0: 0x6c0ca220, + 0x210c5: 0x6cc2d620, + 0x210cb: 0x6cf88620, + 0x210ce: 0x6c68f020, + 0x210d0: 0x6cc2ea20, 0x210d1: 0x6d352620, 0x210d2: 0x6ce46820, 0x210d3: 0x6c762a20, + 0x210d8: 0x6cca1a20, 0x210db: 0x6d3e4c20, + 0x210e3: 0x6c6adc20, + 0x210ea: 0x6c0cec20, + 0x210ec: 0x6c312c20, 0x210ed: 0x6d417620, + 0x210f6: 0x6d0db020, + // Block 0x844, offset 0x21100 + 0x21101: 0x6c0a1c20, + 0x21105: 0x6c7b0020, 0x21107: 0x6d0eb620, + 0x21108: 0x6cef3820, 0x2110a: 0x6c583420, + 0x2110c: 0x6c506420, + 0x21111: 0x6c45b820, + 0x21114: 0x6c9b5420, 0x21117: 0x6c82e420, + 0x21119: 0x6c2cae20, 0x2111b: 0x6c0e0220, + 0x2111c: 0x6c584420, 0x2111f: 0x6cebfe20, + 0x21120: 0x6c751420, + 0x21128: 0x6c1bda20, + 0x2112d: 0x6c030e20, 0x2112e: 0x6c6fa420, + 0x21137: 0x6c2c0e20, + 0x21139: 0x6d2f1c20, 0x2113b: 0x6c26e620, + 0x2113c: 0x6cd23820, 0x2113d: 0x6c501420, + // Block 0x845, offset 0x21140 + 0x2114c: 0x6d12c020, + 0x21157: 0x6c091a20, + 0x21158: 0x6cb05020, 0x21159: 0x6d118820, + 0x2115c: 0x6c2b1420, 0x2115d: 0x6c11ee20, 0x2115e: 0x6cb20220, 0x2115f: 0x6d268420, + 0x21160: 0x6cbc7820, 0x21161: 0x6caf3220, + 0x21175: 0x6ceb7020, 0x21176: 0x6d015c20, + 0x2117d: 0x6d12cc20, + // Block 0x846, offset 0x21180 + 0x21180: 0x6c392820, 0x21181: 0x6c484620, 0x21182: 0x6c566e20, 0x21183: 0x6cc7fa20, + 0x21189: 0x6cc4b620, 0x2118a: 0x6c3d2020, 0x2118b: 0x6c598020, + 0x2119a: 0x6cc79020, + 0x211a2: 0x6c993020, + 0x211a5: 0x6c32f620, 0x211a6: 0x6c5b9820, 0x211a7: 0x6cf85a20, + 0x211a8: 0x6d04bc20, 0x211ab: 0x6cc4b820, + 0x211ac: 0x6d13d620, 0x211af: 0x6d303420, + 0x211b1: 0x6c61c620, 0x211b2: 0x6c434020, 0x211b3: 0x6d203820, + 0x211b5: 0x6cb40620, + // Block 0x847, offset 0x211c0 + 0x211c8: 0x6c1f2220, 0x211c9: 0x6c240a20, 0x211ca: 0x6d303620, 0x211cb: 0x6ca79220, + 0x211cd: 0x6cbca620, + 0x211d0: 0x6c13d220, 0x211d2: 0x6ca79420, 0x211d3: 0x6cdbb620, + 0x211d9: 0x6c13d420, 0x211da: 0x6c19da20, 0x211db: 0x6d10e020, + 0x211dc: 0x6c324820, 0x211dd: 0x6cedc820, 0x211df: 0x6ca76220, + 0x211e0: 0x6c9c4420, + 0x211e6: 0x6caa1620, 0x211e7: 0x6cf87820, + 0x211e9: 0x6d109820, 0x211eb: 0x6c14c820, + // Block 0x848, offset 0x21200 + 0x21218: 0x6d018c20, 0x21219: 0x6c9ed420, 0x2121a: 0x6c796420, + 0x2121c: 0x6c243a20, 0x2121e: 0x6cd13620, 0x2121f: 0x6cacb620, + 0x21220: 0x6c569c20, 0x21222: 0x6c78b020, 0x21223: 0x6cfcc220, + 0x21225: 0x6c53fa20, 0x21226: 0x6cbf2020, 0x21227: 0x6d3f8220, + 0x2122a: 0x6c3e7420, 0x2122b: 0x6ca3be20, + 0x2122d: 0x6ca69e20, 0x2122f: 0x6c7a7a20, + 0x2123e: 0x6ca59820, + // Block 0x849, offset 0x21240 + 0x2124d: 0x6c439020, + 0x21251: 0x6c53fc20, 0x21253: 0x6c002620, + 0x21255: 0x6cd1ba20, + 0x2125e: 0x6d04d420, 0x2125f: 0x6c230e20, + 0x21260: 0x6c684420, 0x21262: 0x6d2c3220, 0x21263: 0x6cfebe20, + 0x21264: 0x6c88f820, 0x21265: 0x6cc24820, + 0x21268: 0x6ccd4420, 0x21269: 0x6d01c020, 0x2126b: 0x6c461c20, + 0x2126c: 0x6c9ed820, 0x2126d: 0x6c148020, 0x2126f: 0x6c371620, + 0x21273: 0x6c312220, + // Block 0x84a, offset 0x21280 + 0x21286: 0x6c79f020, + 0x2128a: 0x6ce58a20, 0x2128b: 0x6cd1cc20, + 0x2128f: 0x6cca7020, + 0x21292: 0x6c491a20, + 0x21296: 0x6c505620, 0x21297: 0x6d367c20, + 0x21298: 0x6d106620, 0x21299: 0x6ce70020, 0x2129a: 0x6c09ee20, + 0x2129c: 0x6ca06420, 0x2129e: 0x6c3ebe20, + 0x212a5: 0x6cbb1420, + 0x212b9: 0x6d367e20, + 0x212bc: 0x6cd9ca20, 0x212bf: 0x6ca7a020, + // Block 0x84b, offset 0x212c0 + 0x212c0: 0x6c738020, 0x212c2: 0x6d105620, + 0x212c4: 0x6c599e20, + 0x212c8: 0x6c080020, 0x212c9: 0x6ca06620, 0x212ca: 0x6c176a20, + 0x212ce: 0x6c93a420, 0x212cf: 0x6cce8220, + 0x212d0: 0x6c104220, 0x212d1: 0x6d2b8820, 0x212d2: 0x6cd81020, + 0x212d4: 0x6d41c420, 0x212d5: 0x6d265620, 0x212d6: 0x6d294c20, 0x212d7: 0x6c948e20, + 0x212e5: 0x6cc1b020, + 0x212fa: 0x6c9e9820, + // Block 0x84c, offset 0x21300 + 0x21300: 0x6d3bd820, + 0x21308: 0x6c297e20, 0x2130a: 0x6d250a20, + 0x21312: 0x6c71d220, + 0x21315: 0x6c5b6020, 0x21316: 0x6cb7d020, + 0x21318: 0x6d285220, 0x2131a: 0x6c97fe20, + 0x2131c: 0x6ca0aa20, + 0x21331: 0x6cb16220, 0x21333: 0x6c6d4a20, + 0x21339: 0x6d10b820, + // Block 0x84d, offset 0x21340 + 0x21340: 0x6c1c6820, 0x21341: 0x6ca6c620, 0x21342: 0x6cd9de20, + 0x21348: 0x6cd61a20, 0x2134b: 0x6cb16420, + 0x21354: 0x6c4f1620, + 0x21360: 0x6d10be20, 0x21362: 0x6ca56020, + 0x2136a: 0x6cd3f020, + 0x2136c: 0x6d251820, 0x2136e: 0x6c114c20, 0x2136f: 0x6c6b5220, + 0x21379: 0x6d023e20, + 0x2137d: 0x6d0cec20, 0x2137e: 0x6cff3620, + // Block 0x84e, offset 0x21380 + 0x2138b: 0x6d025020, + 0x2138c: 0x6c86ec20, 0x2138e: 0x6c397620, + 0x21397: 0x6d3b3c20, + 0x21399: 0x6ca37220, 0x2139b: 0x6d3bb620, + 0x2139e: 0x6c7c4c20, + 0x213a2: 0x6c957020, + 0x213ab: 0x6cb83220, + 0x213b6: 0x6ceca820, + 0x213bd: 0x6cd54c20, 0x213bf: 0x6c1a7c20, + // Block 0x84f, offset 0x213c0 + 0x213c1: 0x6d164620, + 0x213c6: 0x6c500820, + 0x213c8: 0x6c698220, 0x213cb: 0x6c5b8e20, + 0x213cd: 0x6cffce20, 0x213ce: 0x6c222020, + 0x213de: 0x6c61a220, + 0x213e6: 0x6ca62e20, + 0x213e8: 0x6ca63420, 0x213e9: 0x6ce3bc20, + 0x213f6: 0x6c724820, + 0x213f8: 0x6ca04220, + 0x213fd: 0x6c83d220, 0x213ff: 0x6d382c20, + // Block 0x850, offset 0x21400 + 0x21401: 0x6d06d420, 0x21403: 0x6cbf3820, + 0x21404: 0x6c3e9620, 0x21406: 0x6c0d7e20, + 0x2140a: 0x6c621620, + 0x2140d: 0x6cb5f420, 0x2140e: 0x6cf89c20, + 0x21414: 0x6c2ada20, 0x21415: 0x6c376020, + 0x2141b: 0x6cd53220, + 0x2141c: 0x6ce77820, 0x2141d: 0x6cff9620, 0x2141f: 0x6cb01c20, + 0x21428: 0x6c284020, 0x2142a: 0x6c60da20, + 0x21433: 0x6d002020, + 0x21437: 0x6c23ca20, + 0x2143b: 0x6c0d1c20, + 0x2143c: 0x6cc6f020, + // Block 0x851, offset 0x21440 + 0x2144d: 0x6c9e4a20, + 0x21452: 0x6c9e4c20, + 0x21454: 0x6cd49c20, 0x21455: 0x6cff6c20, 0x21456: 0x6c05e420, 0x21457: 0x6cec2220, + 0x21459: 0x6cad8020, + 0x21463: 0x6c410e20, + 0x21465: 0x6c549c20, 0x21466: 0x6c525420, + 0x21468: 0x6d39f220, 0x21469: 0x6c48c420, + 0x2146d: 0x6c4b3820, + 0x21479: 0x6c273e20, + 0x2147c: 0x6c0d2820, 0x2147d: 0x6c5a4420, + // Block 0x852, offset 0x21480 + 0x21480: 0x6c13d620, + 0x21484: 0x6cfa3420, 0x21485: 0x6c710220, 0x21487: 0x6d119a20, + 0x21496: 0x6c3bb620, 0x21497: 0x6d2a7420, + 0x2149b: 0x6c3c3020, + 0x214a2: 0x6c708020, 0x214a3: 0x6d230a20, + 0x214a9: 0x6c5cbe20, + 0x214b2: 0x6c6ab020, 0x214b3: 0x6d049020, + 0x214b5: 0x6ca3ba20, + 0x214bb: 0x6caa1820, + 0x214bd: 0x6cd13820, 0x214bf: 0x6d233420, + // Block 0x853, offset 0x214c0 + 0x214c2: 0x6c587620, 0x214c3: 0x6c450c20, + 0x214c4: 0x6ced1620, 0x214c6: 0x6ceb1e20, 0x214c7: 0x6cbb7820, + 0x214d8: 0x6d1b5220, 0x214da: 0x6c635e20, + 0x214e1: 0x6cdd7220, 0x214e3: 0x6c6ade20, + 0x214e4: 0x6cf64020, 0x214e5: 0x6cf25020, + 0x214e9: 0x6c986620, + 0x214f6: 0x6d0fbe20, + 0x214f8: 0x6d110820, + 0x214fd: 0x6c986c20, 0x214fe: 0x6cab3e20, + // Block 0x854, offset 0x21500 + 0x21501: 0x6c017020, + 0x21505: 0x6c910c20, + 0x21511: 0x6c366e20, 0x21512: 0x6d3f1e20, + 0x21517: 0x6c367020, + 0x21519: 0x6c01c820, + 0x2151e: 0x6c5de220, + 0x21520: 0x6c135220, + 0x21530: 0x6d049c20, 0x21531: 0x6c625e20, 0x21533: 0x6d424e20, + 0x21535: 0x6cb63620, + 0x2153a: 0x6d32ee20, + // Block 0x855, offset 0x21540 + 0x21540: 0x6c5f2e20, 0x21541: 0x6cb52e20, 0x21542: 0x6c732420, 0x21543: 0x6ca91c20, + 0x2155f: 0x6ccb7220, + 0x21565: 0x6c51fa20, 0x21566: 0x6cc72c20, 0x21567: 0x6cbdec20, + 0x2156c: 0x6c70de20, 0x2156f: 0x6c86ee20, + 0x21575: 0x6cd29020, + 0x21578: 0x6ca6da20, 0x21579: 0x6cfbc420, 0x2157a: 0x6c3dbc20, + 0x2157d: 0x6cc80820, + // Block 0x856, offset 0x21580 + 0x21581: 0x6d04ac20, 0x21582: 0x6c4ba220, + 0x21584: 0x6c62e020, 0x21586: 0x6c9bf820, 0x21587: 0x6c3dc020, + 0x21589: 0x6cc9ee20, 0x2158a: 0x6d247820, 0x2158b: 0x6c69de20, + 0x2158c: 0x6c9c2220, 0x2158d: 0x6c900e20, 0x2158e: 0x6cbb0020, + 0x21590: 0x6c9cc620, 0x21593: 0x6d15a420, + 0x21596: 0x6c4dc620, 0x21597: 0x6ca6e620, + 0x21598: 0x6c81ee20, 0x21599: 0x6ccbbe20, + 0x2159c: 0x6c8c4220, 0x2159e: 0x6d22c220, + 0x215a5: 0x6caab020, + 0x215ab: 0x6cf4c020, + 0x215af: 0x6c0b3620, + 0x215b2: 0x6c0b3820, 0x215b3: 0x6d079620, + 0x215b5: 0x6c649620, + 0x215b8: 0x6c0b3c20, + // Block 0x857, offset 0x215c0 + 0x215c2: 0x6c2a7a20, + 0x215c7: 0x6d3b8620, + 0x215cb: 0x6cc72020, + 0x215d0: 0x6cd69820, + 0x215d8: 0x6c631820, 0x215db: 0x6c5b4a20, + 0x215de: 0x6d2d5c20, + 0x215e2: 0x6c042e20, 0x215e3: 0x6c8ac420, + 0x215e5: 0x6d003820, + 0x215ed: 0x6c656c20, 0x215ee: 0x6cd44020, + 0x215f3: 0x6c77ba20, + 0x215f7: 0x6c490c20, + 0x215f8: 0x6c949420, + 0x215fe: 0x6caa1a20, 0x215ff: 0x6c16e820, + // Block 0x858, offset 0x21600 + 0x2160e: 0x6c895220, + 0x21619: 0x6ca3c620, 0x2161a: 0x6cc80020, + 0x2161e: 0x6d368020, + 0x21626: 0x6c128620, + 0x21630: 0x6c867420, + 0x2163b: 0x6c7fcc20, + 0x2163f: 0x6c14e220, + // Block 0x859, offset 0x21640 + 0x21641: 0x6cedba20, + 0x21644: 0x6c856620, 0x21647: 0x6cf49620, + 0x21648: 0x6cad4220, 0x21649: 0x6d200a20, 0x2164b: 0x6c415e20, + 0x2164f: 0x6c011420, + 0x21650: 0x6d04b420, 0x21651: 0x6cd70420, 0x21652: 0x6cc8aa20, + 0x21658: 0x6c04b620, 0x21659: 0x6d1eea20, + 0x21662: 0x6c5d6e20, + 0x21665: 0x6c5a9c20, + 0x21668: 0x6d428c20, 0x21669: 0x6cfe9820, 0x2166b: 0x6c9dba20, + 0x21670: 0x6c40d620, 0x21671: 0x6d25e220, 0x21673: 0x6c0ff020, + 0x21674: 0x6c17ba20, 0x21675: 0x6ce9e220, 0x21677: 0x6c0ff220, + 0x2167d: 0x6c40d820, 0x2167f: 0x6ce55820, + // Block 0x85a, offset 0x21680 + 0x21680: 0x6ca2dc20, + 0x21685: 0x6c556a20, 0x21686: 0x6ca83c20, + 0x2168b: 0x6c5b3e20, + 0x2168c: 0x6c90ea20, 0x2168e: 0x6ce35020, + 0x21690: 0x6cbc5420, 0x21691: 0x6cbbee20, 0x21692: 0x6d380620, + 0x21696: 0x6c2b4220, + 0x2169a: 0x6c8bd820, + 0x2169d: 0x6cc32c20, 0x2169e: 0x6d3b9a20, + 0x216a0: 0x6c828e20, 0x216a2: 0x6d013620, + 0x216a5: 0x6cc56220, + 0x216a8: 0x6c28f620, 0x216aa: 0x6c316020, 0x216ab: 0x6ca71420, + 0x216af: 0x6cd2ae20, + 0x216b2: 0x6cfb2020, + 0x216b9: 0x6d343820, + 0x216bd: 0x6c008820, 0x216be: 0x6c21f220, 0x216bf: 0x6cb42a20, + // Block 0x85b, offset 0x216c0 + 0x216c1: 0x6cd2b620, + 0x216c5: 0x6cc0de20, 0x216c6: 0x6cd55020, 0x216c7: 0x6c2cbe20, + 0x216c9: 0x6cffa420, 0x216ca: 0x6cd70a20, + 0x216cc: 0x6c586020, + 0x216d0: 0x6d149220, 0x216d1: 0x6c72dc20, + 0x216d4: 0x6d34fc20, + 0x216dc: 0x6d2f9e20, + 0x216e3: 0x6d06a220, + 0x216ef: 0x6c905a20, + 0x216f1: 0x6d3aca20, 0x216f3: 0x6cdd5620, + 0x216f7: 0x6c2e8020, + 0x216fa: 0x6cc18420, + 0x216fc: 0x6c78a220, 0x216fd: 0x6c54ba20, 0x216fe: 0x6c708220, + // Block 0x85c, offset 0x21700 + 0x21700: 0x6cbea420, + 0x2170d: 0x6c0dae20, + 0x21715: 0x6ce3f220, 0x21717: 0x6c744820, + 0x2171a: 0x6cc05a20, + 0x21723: 0x6c67e420, + 0x2172a: 0x6d282e20, + 0x2172d: 0x6c9a9a20, 0x2172e: 0x6caf6e20, + 0x21730: 0x6cc1a020, + 0x2173c: 0x6c9d5220, 0x2173f: 0x6ce3fe20, + // Block 0x85d, offset 0x21740 + 0x21742: 0x6c768c20, + 0x21744: 0x6c08e820, 0x21746: 0x6cc11c20, + 0x2174f: 0x6ce56620, + 0x21751: 0x6c1f6c20, + 0x21758: 0x6c714a20, 0x2175a: 0x6cf69620, + 0x2175e: 0x6c8c5e20, + 0x2176d: 0x6c1bca20, 0x2176e: 0x6c5f7e20, + 0x21774: 0x6c917a20, + 0x21778: 0x6c876220, + 0x2177e: 0x6c73c820, + // Block 0x85e, offset 0x21780 + 0x21785: 0x6d397c20, 0x21786: 0x6c921020, + 0x2178e: 0x6ca7f620, + 0x21794: 0x6cc2c020, + 0x217ad: 0x6d0b6820, 0x217af: 0x6c35c220, + 0x217b1: 0x6c564020, + // Block 0x85f, offset 0x217c0 + 0x217c0: 0x6c982620, + 0x217c9: 0x6cf4a020, + 0x217cc: 0x6c137620, + 0x217d1: 0x6cbd1820, 0x217d2: 0x6c6a6220, 0x217d3: 0x6c52f420, + 0x217d5: 0x6c27b620, 0x217d6: 0x6c371c20, 0x217d7: 0x6d2b3a20, + 0x217d8: 0x6c565220, 0x217d9: 0x6c020e20, 0x217da: 0x6c6bb220, 0x217db: 0x6c3faa20, + 0x217dc: 0x6d1e7020, 0x217de: 0x6c3c1a20, + 0x217ec: 0x6ca26620, + 0x217f6: 0x6ccb1620, 0x217f7: 0x6c238a20, + 0x217fb: 0x6c772220, + // Block 0x860, offset 0x21800 + 0x21802: 0x6d11ea20, 0x21803: 0x6c008c20, + 0x21804: 0x6c05a620, 0x21806: 0x6cb34c20, + 0x21808: 0x6cd2b820, 0x21809: 0x6c392a20, 0x2180b: 0x6c70f420, + 0x2180c: 0x6cafb420, 0x2180e: 0x6cf07420, 0x2180f: 0x6c7a2220, + 0x21810: 0x6cbc8620, 0x21811: 0x6c417220, + 0x21822: 0x6c7be220, 0x21823: 0x6cdc2420, + 0x21824: 0x6c07d620, 0x21825: 0x6c632820, 0x21826: 0x6d0b8020, + 0x2182a: 0x6c76fe20, 0x2182b: 0x6ca7f820, + 0x2182d: 0x6d03cc20, 0x2182f: 0x6cf85c20, + 0x21831: 0x6c8c4a20, 0x21832: 0x6c347e20, + 0x21834: 0x6c159a20, + // Block 0x861, offset 0x21840 + 0x21848: 0x6cd32e20, 0x2184b: 0x6c334020, + 0x2184d: 0x6c675020, 0x2184e: 0x6d222a20, 0x2184f: 0x6c922020, + 0x21850: 0x6c372020, 0x21853: 0x6c476420, + 0x21855: 0x6cefa020, 0x21856: 0x6c17d620, 0x21857: 0x6c590020, + 0x21858: 0x6c0ce220, 0x2185b: 0x6c4e9420, + 0x2185c: 0x6ce99e20, 0x2185d: 0x6ca32420, 0x2185e: 0x6cb6e620, + 0x21860: 0x6ce7e820, 0x21861: 0x6d24d220, 0x21862: 0x6cede020, + 0x21864: 0x6cf3b020, 0x21865: 0x6c434220, + 0x21868: 0x6c792e20, 0x2186a: 0x6d14ba20, + 0x21878: 0x6cfe9a20, 0x2187a: 0x6c4ae420, 0x2187b: 0x6d0b8c20, + 0x2187c: 0x6cdc2e20, 0x2187d: 0x6cd95420, 0x2187f: 0x6d3d3820, + // Block 0x862, offset 0x21880 + 0x21882: 0x6ce84a20, 0x21883: 0x6cfbf420, + 0x21888: 0x6d2b4420, 0x21889: 0x6c85c620, + 0x2188c: 0x6d3acc20, 0x2188e: 0x6c6aa220, + 0x21891: 0x6ce3e820, + 0x21894: 0x6d009c20, 0x21895: 0x6cbf1220, 0x21897: 0x6d0b9420, + 0x21898: 0x6c708620, 0x2189b: 0x6d1a5a20, + 0x2189c: 0x6d345220, 0x2189e: 0x6c76d020, 0x2189f: 0x6d3e2220, + 0x218a1: 0x6c77f420, 0x218a3: 0x6ca81220, + 0x218a4: 0x6cbb0620, 0x218a5: 0x6ced0220, 0x218a6: 0x6d2abc20, + 0x218a8: 0x6c708820, 0x218aa: 0x6d3f4220, + // Block 0x863, offset 0x218c0 + 0x218c4: 0x6d0b9620, 0x218c7: 0x6c8bae20, + 0x218c9: 0x6cb5c020, + 0x218ce: 0x6c5b3420, + 0x218d3: 0x6cb77a20, + 0x218d5: 0x6d0fa820, 0x218d6: 0x6cdc3620, + 0x218d8: 0x6cb6f220, 0x218d9: 0x6c4a5620, + 0x218e2: 0x6cbe1020, 0x218e3: 0x6c353e20, + 0x218e5: 0x6d429820, + 0x218e8: 0x6d2b4820, 0x218e9: 0x6cb77c20, 0x218ea: 0x6c602e20, + 0x218ec: 0x6ceb2020, 0x218ed: 0x6c2e9c20, 0x218ef: 0x6c5bbe20, + 0x218f0: 0x6c98e420, 0x218f2: 0x6d063e20, + 0x218f5: 0x6c53fe20, 0x218f6: 0x6d0d7c20, 0x218f7: 0x6cfdc220, + 0x218f8: 0x6c231020, 0x218f9: 0x6c555820, + 0x218fc: 0x6c01c020, 0x218fe: 0x6c0de420, + // Block 0x864, offset 0x21900 + 0x21907: 0x6c348e20, + 0x21910: 0x6d3a6a20, 0x21911: 0x6c2e9e20, 0x21912: 0x6d1ea220, 0x21913: 0x6cb6fa20, + 0x21914: 0x6cd26820, 0x21915: 0x6d099a20, 0x21916: 0x6d1ea420, 0x21917: 0x6c76ae20, + 0x21918: 0x6cbc2420, 0x2191b: 0x6cbab620, + 0x2191c: 0x6cae3e20, 0x2191f: 0x6cc2ee20, + 0x21921: 0x6d1c6e20, + 0x21927: 0x6ccbf220, + 0x2192b: 0x6ce1d020, + 0x2192d: 0x6c53c020, 0x2192e: 0x6cb06220, 0x2192f: 0x6d110a20, + 0x21934: 0x6ce8bc20, 0x21935: 0x6c148220, 0x21937: 0x6cfa3c20, + 0x21938: 0x6cb5f620, 0x2193a: 0x6cbf3a20, + 0x2193d: 0x6c6d1220, + // Block 0x865, offset 0x21940 + 0x21948: 0x6d316020, + 0x2194c: 0x6d39ae20, 0x2194e: 0x6cf64420, + 0x21950: 0x6cf22a20, 0x21951: 0x6d37f820, + 0x21955: 0x6cdc4420, + 0x21958: 0x6c781020, 0x21959: 0x6c7e0c20, 0x2195a: 0x6c777220, + 0x2195d: 0x6c176c20, 0x2195e: 0x6c09f020, 0x2195f: 0x6ca13a20, + 0x21960: 0x6d3b1220, 0x21961: 0x6c4edc20, 0x21962: 0x6d227820, 0x21963: 0x6d153220, + 0x21964: 0x6c966c20, 0x21967: 0x6cb7aa20, + 0x21968: 0x6c4c0020, 0x21969: 0x6c97e420, 0x2196a: 0x6c89f420, 0x2196b: 0x6c8bc020, + 0x2196c: 0x6d40c620, 0x2196d: 0x6c82cc20, 0x2196e: 0x6c56b220, 0x2196f: 0x6c209220, + 0x21970: 0x6cb7ac20, 0x21971: 0x6c824420, + // Block 0x866, offset 0x21980 + 0x21981: 0x6c1ac420, 0x21983: 0x6cb33020, + 0x21984: 0x6c2eca20, + 0x2198a: 0x6c82ce20, + 0x2198e: 0x6d160420, + 0x21993: 0x6c2d7620, + 0x21996: 0x6c33a420, 0x21997: 0x6c42d620, + 0x21998: 0x6c54f220, 0x2199a: 0x6cff0020, 0x2199b: 0x6c40ca20, + 0x2199c: 0x6cae8020, + 0x219ac: 0x6cd06a20, + 0x219b1: 0x6cef2a20, + 0x219bb: 0x6c335820, + 0x219bc: 0x6c177220, 0x219bd: 0x6d1b0420, 0x219be: 0x6c7b3a20, 0x219bf: 0x6c7a6020, + // Block 0x867, offset 0x219c0 + 0x219c1: 0x6d41ce20, 0x219c2: 0x6c47ca20, + 0x219c5: 0x6d285420, 0x219c6: 0x6d36da20, + 0x219c9: 0x6c629420, 0x219ca: 0x6c199020, + 0x219d6: 0x6d020e20, + 0x219db: 0x6d419e20, + 0x219dc: 0x6c017420, 0x219dd: 0x6c4fb220, + 0x219e0: 0x6cb36020, 0x219e2: 0x6c2b9820, 0x219e3: 0x6d135820, + 0x219e7: 0x6ca4c420, + 0x219f1: 0x6c6b4220, 0x219f2: 0x6c059220, 0x219f3: 0x6c804020, + 0x219f4: 0x6c124820, 0x219f6: 0x6c0a6620, + 0x219fb: 0x6d2e1a20, + 0x219fc: 0x6cb7e620, + // Block 0x868, offset 0x21a00 + 0x21a02: 0x6ca4c620, + 0x21a05: 0x6c940c20, 0x21a07: 0x6c7c0a20, + 0x21a09: 0x6ca08420, 0x21a0b: 0x6c82e620, + 0x21a0c: 0x6cad7420, + 0x21a12: 0x6c86c420, 0x21a13: 0x6c136420, + 0x21a15: 0x6c299820, 0x21a16: 0x6c82e820, + 0x21a19: 0x6c36cc20, 0x21a1b: 0x6c086020, + 0x21a1c: 0x6c74e820, + 0x21a25: 0x6d083420, 0x21a26: 0x6ca89420, + 0x21a28: 0x6c4d7c20, + 0x21a2e: 0x6cfc4220, + 0x21a30: 0x6c661620, 0x21a31: 0x6c9c9e20, 0x21a32: 0x6ca8a020, + 0x21a3b: 0x6c124a20, + 0x21a3c: 0x6cd97820, 0x21a3d: 0x6d2ba820, 0x21a3e: 0x6d194220, + // Block 0x869, offset 0x21a40 + 0x21a42: 0x6c1d3020, + 0x21a44: 0x6c125020, + 0x21a49: 0x6c830620, 0x21a4a: 0x6caad220, 0x21a4b: 0x6c876420, + 0x21a4e: 0x6c84ba20, 0x21a4f: 0x6c957220, + 0x21a53: 0x6ce18a20, + 0x21a56: 0x6ca8c420, 0x21a57: 0x6ca8c620, + 0x21a59: 0x6c5fae20, 0x21a5b: 0x6c831220, + 0x21a5d: 0x6ca48020, + 0x21a60: 0x6c8c1420, 0x21a61: 0x6c8dce20, + 0x21a64: 0x6cfbe220, 0x21a65: 0x6d24a820, 0x21a67: 0x6d28ec20, + 0x21a68: 0x6cc34a20, 0x21a69: 0x6c8ac020, + 0x21a6f: 0x6d22ce20, + 0x21a70: 0x6c597620, + 0x21a7a: 0x6ca4de20, + 0x21a7c: 0x6d0a7820, 0x21a7e: 0x6c711020, 0x21a7f: 0x6c5dbc20, + // Block 0x86a, offset 0x21a80 + 0x21a81: 0x6d179420, + 0x21a8a: 0x6cf71420, 0x21a8b: 0x6ccb8a20, + 0x21a8c: 0x6c697020, 0x21a8d: 0x6d1de020, + 0x21a95: 0x6cd18c20, 0x21a96: 0x6c6d8420, 0x21a97: 0x6ced6e20, + 0x21a98: 0x6d129e20, 0x21a99: 0x6c6f4420, + 0x21a9c: 0x6c45d020, + 0x21aa1: 0x6c5aa020, + 0x21aaa: 0x6c37a420, + 0x21ab5: 0x6c4e7a20, + 0x21abc: 0x6c3e3020, + // Block 0x86b, offset 0x21ac0 + 0x21ac0: 0x6c3e4a20, 0x21ac1: 0x6d3d4a20, 0x21ac2: 0x6c5eb620, + 0x21acf: 0x6c053a20, + 0x21ad2: 0x6cb56620, 0x21ad3: 0x6cd2a620, + 0x21ad5: 0x6c2df420, 0x21ad6: 0x6cadfa20, 0x21ad7: 0x6cfbe420, + 0x21ad8: 0x6cc9f620, + 0x21add: 0x6c169220, 0x21ade: 0x6d264620, + 0x21ae0: 0x6c455820, 0x21ae2: 0x6cf34220, + 0x21ae4: 0x6c3b0a20, 0x21ae7: 0x6c159020, + 0x21ae9: 0x6ca58420, 0x21aea: 0x6c73d820, + 0x21aec: 0x6d2f8220, 0x21aee: 0x6cb96c20, + 0x21af1: 0x6c029820, + 0x21af6: 0x6cedf820, 0x21af7: 0x6d379020, + 0x21af9: 0x6c597820, 0x21afb: 0x6c106620, + 0x21afc: 0x6d3a5a20, 0x21afd: 0x6c092e20, 0x21afe: 0x6c173620, 0x21aff: 0x6d328620, + // Block 0x86c, offset 0x21b00 + 0x21b00: 0x6c3de620, 0x21b01: 0x6c79b820, 0x21b03: 0x6d422c20, + 0x21b04: 0x6d086c20, 0x21b06: 0x6c3fb220, + 0x21b0a: 0x6d118a20, + 0x21b0d: 0x6c0e4e20, 0x21b0f: 0x6c06e220, + 0x21b10: 0x6d007c20, 0x21b11: 0x6cd33020, 0x21b12: 0x6d149620, + 0x21b14: 0x6c531020, 0x21b15: 0x6c251c20, 0x21b17: 0x6d16e620, + 0x21b18: 0x6d3b7620, + 0x21b1d: 0x6c1bf620, + 0x21b24: 0x6cb2fe20, + 0x21b28: 0x6d1a3a20, + 0x21b31: 0x6d260a20, + 0x21b36: 0x6c6edc20, + 0x21b39: 0x6c995c20, 0x21b3a: 0x6cba4820, + 0x21b3c: 0x6d172420, + // Block 0x86d, offset 0x21b40 + 0x21b40: 0x6cf3b220, + 0x21b4d: 0x6c069820, 0x21b4e: 0x6c5dbe20, 0x21b4f: 0x6c239420, + 0x21b50: 0x6c797220, + 0x21b55: 0x6cde4820, 0x21b57: 0x6c4ea620, + 0x21b58: 0x6cba4e20, + 0x21b5c: 0x6d345420, + 0x21b62: 0x6ccb2420, + 0x21b65: 0x6cb8d620, 0x21b66: 0x6c4cb420, + 0x21b69: 0x6c4bbe20, + 0x21b6c: 0x6c649820, 0x21b6d: 0x6d37b820, 0x21b6e: 0x6c9e2220, 0x21b6f: 0x6c4afa20, + 0x21b70: 0x6cd37e20, 0x21b71: 0x6ca1d220, 0x21b72: 0x6c363220, 0x21b73: 0x6c039e20, + 0x21b74: 0x6c7e7220, + 0x21b78: 0x6d392820, 0x21b7a: 0x6c603020, + // Block 0x86e, offset 0x21b80 + 0x21b80: 0x6d2a4a20, + 0x21b84: 0x6d2bd820, 0x21b85: 0x6d179820, 0x21b87: 0x6c468420, + 0x21b8a: 0x6c4a6e20, 0x21b8b: 0x6d1bc420, + 0x21b8c: 0x6ccc9820, 0x21b8d: 0x6c513420, 0x21b8e: 0x6c057820, 0x21b8f: 0x6ca12a20, + 0x21b90: 0x6c9b1e20, 0x21b93: 0x6cf4fe20, + 0x21b94: 0x6c277620, 0x21b97: 0x6c6f1620, + 0x21b9c: 0x6c4ed020, 0x21b9f: 0x6ce70220, + 0x21ba0: 0x6c79be20, 0x21ba1: 0x6c841220, 0x21ba2: 0x6d368220, 0x21ba3: 0x6c5bf420, + 0x21ba4: 0x6d296e20, 0x21ba6: 0x6c2dfc20, 0x21ba7: 0x6c244420, + 0x21bb1: 0x6d368420, 0x21bb3: 0x6c7adc20, + 0x21bb5: 0x6cfe4a20, 0x21bb6: 0x6c57ba20, 0x21bb7: 0x6c8a0c20, + 0x21bb8: 0x6c255620, 0x21bb9: 0x6cbb9a20, 0x21bba: 0x6c692420, + 0x21bbc: 0x6d05d020, 0x21bbd: 0x6c37da20, 0x21bbf: 0x6cead020, + // Block 0x86f, offset 0x21bc0 + 0x21bc0: 0x6ce00020, 0x21bc1: 0x6d36a820, + 0x21bc8: 0x6ca51020, 0x21bc9: 0x6c99ac20, 0x21bca: 0x6c2c8c20, 0x21bcb: 0x6c135820, + 0x21bce: 0x6c693a20, 0x21bcf: 0x6c884820, + 0x21bd1: 0x6ccc1820, 0x21bd2: 0x6c28aa20, + 0x21bd5: 0x6cdc6c20, 0x21bd6: 0x6c884a20, 0x21bd7: 0x6c4cf020, + 0x21bda: 0x6c0c7c20, + 0x21bdc: 0x6c22e220, 0x21bdd: 0x6c2d7e20, 0x21bde: 0x6c93fc20, 0x21bdf: 0x6ca64e20, + 0x21be0: 0x6d0dda20, 0x21be1: 0x6c7fbc20, + 0x21be4: 0x6c415620, 0x21be5: 0x6c1eb420, + 0x21be9: 0x6c0a8820, 0x21bea: 0x6d40ea20, 0x21beb: 0x6c5c6620, + 0x21bed: 0x6c7f4220, 0x21bee: 0x6cfbba20, 0x21bef: 0x6c3bfc20, + 0x21bf0: 0x6c520220, + 0x21bf9: 0x6d124020, 0x21bfa: 0x6d2e3220, + 0x21bfc: 0x6ca56620, 0x21bfe: 0x6c95d020, + // Block 0x870, offset 0x21c00 + 0x21c00: 0x6d25d620, 0x21c02: 0x6ca5ac20, + 0x21c09: 0x6cc58220, + 0x21c1c: 0x6c43e820, 0x21c1e: 0x6c65a820, 0x21c1f: 0x6cb2b420, + 0x21c23: 0x6c0d1620, + 0x21c26: 0x6c66d020, + 0x21c29: 0x6c0e2e20, + 0x21c2f: 0x6c9d1820, + 0x21c30: 0x6c563420, + 0x21c34: 0x6c2df220, 0x21c36: 0x6d1e8c20, 0x21c37: 0x6d108c20, + 0x21c38: 0x6c07d020, 0x21c3a: 0x6c189820, 0x21c3b: 0x6c5e8c20, + 0x21c3d: 0x6d108e20, + // Block 0x871, offset 0x21c40 + 0x21c47: 0x6c491020, + 0x21c48: 0x6d0e5e20, + 0x21c55: 0x6c1bc820, 0x21c57: 0x6ccc3a20, + 0x21c58: 0x6d0d3820, 0x21c59: 0x6d165e20, 0x21c5a: 0x6d166020, 0x21c5b: 0x6c17fc20, + 0x21c5e: 0x6c4e8220, 0x21c5f: 0x6c597420, + 0x21c64: 0x6cd71020, 0x21c65: 0x6cdc2220, 0x21c66: 0x6cc56820, 0x21c67: 0x6cdfcc20, + 0x21c68: 0x6d34e420, 0x21c6a: 0x6c391e20, 0x21c6b: 0x6c3cc620, + 0x21c70: 0x6cdfce20, 0x21c72: 0x6c9c3620, 0x21c73: 0x6cafb620, + 0x21c74: 0x6c106820, 0x21c75: 0x6ca30e20, 0x21c76: 0x6ce48220, 0x21c77: 0x6c036620, + 0x21c78: 0x6d16b020, + // Block 0x872, offset 0x21c80 + 0x21c82: 0x6d0d4820, + 0x21c84: 0x6ce54c20, 0x21c86: 0x6d10ce20, 0x21c87: 0x6cd04c20, + 0x21c88: 0x6c77dc20, 0x21c89: 0x6ce72420, 0x21c8b: 0x6d084420, + 0x21c93: 0x6d202820, + 0x21c95: 0x6c043a20, + 0x21c99: 0x6cf9a220, 0x21c9a: 0x6c938420, 0x21c9b: 0x6c7dce20, + 0x21c9c: 0x6d29d220, 0x21c9d: 0x6cc02c20, + 0x21ca0: 0x6c243020, 0x21ca1: 0x6d416a20, 0x21ca2: 0x6c90e020, + 0x21ca4: 0x6cf9a420, + 0x21caf: 0x6ccfca20, + 0x21cb2: 0x6cb43020, + 0x21cb4: 0x6c6da620, 0x21cb5: 0x6cbaae20, 0x21cb6: 0x6d175820, + 0x21cb8: 0x6ca81420, 0x21cb9: 0x6c32fc20, 0x21cbb: 0x6c6ab420, + 0x21cbc: 0x6cdc3820, 0x21cbd: 0x6d2e5820, 0x21cbe: 0x6c23e420, + // Block 0x873, offset 0x21cc0 + 0x21cc1: 0x6c07e420, 0x21cc2: 0x6c491220, 0x21cc3: 0x6ccf2a20, + 0x21cc5: 0x6c6cfe20, 0x21cc6: 0x6c2c3e20, + 0x21cd1: 0x6c27d220, 0x21cd3: 0x6ca3a220, + 0x21cd5: 0x6ca9fc20, 0x21cd7: 0x6c601820, + 0x21cd8: 0x6d0c8220, 0x21cda: 0x6caa2020, + 0x21cdc: 0x6c325a20, 0x21cdd: 0x6cf09020, 0x21cde: 0x6cb0f420, + 0x21ce2: 0x6c555a20, + 0x21ce4: 0x6c644020, 0x21ce5: 0x6d12ee20, 0x21ce6: 0x6c759220, 0x21ce7: 0x6c7f9c20, + 0x21ce8: 0x6c7e7420, 0x21ce9: 0x6d19de20, + 0x21ced: 0x6ce9a220, + 0x21cf5: 0x6ca4f620, + 0x21cfa: 0x6d411c20, + 0x21cff: 0x6c96c220, + // Block 0x874, offset 0x21d00 + 0x21d00: 0x6cd7f020, 0x21d01: 0x6d365420, + 0x21d04: 0x6c5ac020, 0x21d05: 0x6d3c8e20, 0x21d07: 0x6c5bd820, + 0x21d0d: 0x6c1e8c20, 0x21d0f: 0x6c182420, + 0x21d12: 0x6d04da20, 0x21d13: 0x6c7fa220, + 0x21d15: 0x6c232620, 0x21d16: 0x6cd0bc20, 0x21d17: 0x6ca13c20, + 0x21d18: 0x6d140220, 0x21d19: 0x6d111a20, 0x21d1a: 0x6cf7fa20, 0x21d1b: 0x6d419020, + 0x21d1c: 0x6c0e2820, + 0x21d27: 0x6d216c20, + 0x21d29: 0x6c927e20, + 0x21d2e: 0x6ce9b620, 0x21d2f: 0x6ceffe20, + 0x21d31: 0x6c3b8820, 0x21d32: 0x6cd06c20, + 0x21d3b: 0x6c8a0e20, + // Block 0x875, offset 0x21d40 + 0x21d42: 0x6cd56a20, 0x21d43: 0x6c284220, + 0x21d44: 0x6c732620, 0x21d45: 0x6d21a020, 0x21d46: 0x6d034a20, 0x21d47: 0x6d114220, + 0x21d48: 0x6cda5820, + 0x21d52: 0x6c5d8020, + 0x21d54: 0x6cb92220, + 0x21d5a: 0x6c967c20, + 0x21d5d: 0x6c767020, + 0x21d61: 0x6c91e620, 0x21d63: 0x6d1ebc20, + 0x21d6e: 0x6cfd2e20, + 0x21d79: 0x6cf40620, 0x21d7b: 0x6d1b2020, + 0x21d7c: 0x6cf72c20, 0x21d7f: 0x6d2d0820, + // Block 0x876, offset 0x21d80 + 0x21d80: 0x6d027020, + 0x21d84: 0x6cc1fa20, + 0x21d88: 0x6c84be20, + 0x21d8d: 0x6cb95820, + 0x21d94: 0x6c8dd020, 0x21d95: 0x6c947820, + 0x21d9a: 0x6c14b220, + 0x21da6: 0x6d334420, + 0x21da8: 0x6d0c8420, + 0x21db2: 0x6d1b3820, 0x21db3: 0x6c7c5c20, + 0x21db7: 0x6cc0d220, + 0x21db9: 0x6c3dd820, 0x21dbb: 0x6d22d420, + // Block 0x877, offset 0x21dc0 + 0x21dc1: 0x6cb57e20, + 0x21dc6: 0x6cb75620, 0x21dc7: 0x6c61a620, + 0x21dc8: 0x6d24ce20, + 0x21dce: 0x6c434420, 0x21dcf: 0x6c734820, + 0x21dd1: 0x6cb5a020, 0x21dd3: 0x6c411020, + 0x21dd5: 0x6cc37220, + 0x21dda: 0x6cf09220, + 0x21de7: 0x6d368620, + 0x21deb: 0x6c65ba20, + 0x21ded: 0x6cd8d620, + 0x21df0: 0x6d188c20, 0x21df1: 0x6cb91c20, + 0x21dfc: 0x6c856220, 0x21dff: 0x6d29ce20, + // Block 0x878, offset 0x21e00 + 0x21e00: 0x6d168020, 0x21e02: 0x6c110620, 0x21e03: 0x6d168220, + 0x21e04: 0x6c437220, 0x21e06: 0x6c2e6e20, + 0x21e08: 0x6d33a420, 0x21e09: 0x6d16ec20, 0x21e0b: 0x6d28fa20, + 0x21e0c: 0x6c275220, 0x21e0e: 0x6cdab220, + 0x21e14: 0x6c6b4420, 0x21e15: 0x6c193820, 0x21e16: 0x6cc1fc20, + 0x21e18: 0x6c4e7820, 0x21e19: 0x6cfb1e20, + 0x21e20: 0x6cc2ae20, 0x21e21: 0x6c6a5620, + 0x21e25: 0x6c733820, + 0x21e2a: 0x6c285c20, + 0x21e2d: 0x6c6c2420, + 0x21e34: 0x6c0da820, 0x21e35: 0x6c551a20, + 0x21e39: 0x6c73da20, 0x21e3b: 0x6d20b020, + // Block 0x879, offset 0x21e40 + 0x21e43: 0x6c84fa20, + 0x21e44: 0x6cbb0420, 0x21e45: 0x6cd70620, 0x21e46: 0x6c7a2420, + 0x21e48: 0x6d31b620, + 0x21e4d: 0x6c3de820, 0x21e4e: 0x6ccfac20, + 0x21e52: 0x6c20c020, + 0x21e55: 0x6ce72620, 0x21e57: 0x6d16ee20, + 0x21e59: 0x6d0f9220, + 0x21e5c: 0x6ceafa20, 0x21e5d: 0x6d385e20, 0x21e5e: 0x6c5ff220, + 0x21e64: 0x6d0a7a20, 0x21e66: 0x6cd05220, 0x21e67: 0x6d078820, + 0x21e6d: 0x6c8e4820, 0x21e6e: 0x6d24dc20, 0x21e6f: 0x6c554220, + 0x21e70: 0x6d334820, 0x21e73: 0x6cae6620, + 0x21e77: 0x6c742220, + // Block 0x87a, offset 0x21e80 + 0x21e82: 0x6d362020, 0x21e83: 0x6cb0f620, + 0x21e84: 0x6d261820, 0x21e86: 0x6c649a20, + 0x21e8a: 0x6cad0220, + 0x21e8e: 0x6d3bca20, + 0x21e90: 0x6cfb6e20, 0x21e92: 0x6c080220, + 0x21e94: 0x6c232820, 0x21e96: 0x6ca13e20, + 0x21e9a: 0x6c4c7420, + 0x21e9e: 0x6c1a3420, 0x21e9f: 0x6cbb9c20, + 0x21ea6: 0x6c0a4a20, + 0x21ea9: 0x6cbb4820, 0x21eab: 0x6d38aa20, + 0x21eb2: 0x6c38d020, 0x21eb3: 0x6c0cc420, + 0x21ebe: 0x6c0fa020, 0x21ebf: 0x6cc73220, + // Block 0x87b, offset 0x21ec0 + 0x21ec5: 0x6c2f8820, 0x21ec6: 0x6cc32e20, 0x21ec7: 0x6c703c20, + 0x21ec8: 0x6d117420, + 0x21ed3: 0x6cf98620, + 0x21ed6: 0x6d2a3e20, + 0x21edd: 0x6c27c820, 0x21edf: 0x6cf44420, + 0x21ee0: 0x6ceb1420, 0x21ee2: 0x6c54c820, + 0x21ee7: 0x6cf64620, + 0x21eec: 0x6c7f1a20, 0x21eee: 0x6c3a1620, + 0x21ef9: 0x6c55ec20, + // Block 0x87c, offset 0x21f00 + 0x21f06: 0x6cfa7220, + 0x21f09: 0x6ccd2c20, + 0x21f0d: 0x6c3a8420, + 0x21f10: 0x6c261820, 0x21f12: 0x6c3e3220, + 0x21f14: 0x6c1f3020, + 0x21f1d: 0x6c2fd020, 0x21f1e: 0x6c807020, + 0x21f29: 0x6cf7fc20, + 0x21f2f: 0x6c0c1420, + 0x21f30: 0x6d23e820, 0x21f31: 0x6cdc6e20, 0x21f32: 0x6cf80c20, + 0x21f37: 0x6cb3e620, + 0x21f3e: 0x6c697c20, + // Block 0x87d, offset 0x21f40 + 0x21f40: 0x6d166420, 0x21f43: 0x6cecb820, + 0x21f44: 0x6c611e20, 0x21f46: 0x6cecc620, 0x21f47: 0x6ce9f220, + 0x21f4b: 0x6c021020, + 0x21f4d: 0x6ce45820, 0x21f4e: 0x6c1b0020, + 0x21f52: 0x6cc46220, + 0x21f54: 0x6cc96820, 0x21f55: 0x6d1a2c20, 0x21f56: 0x6caf3420, 0x21f57: 0x6c228e20, + 0x21f58: 0x6ce71a20, 0x21f59: 0x6d1ace20, + 0x21f5c: 0x6c43c820, 0x21f5d: 0x6ce55020, 0x21f5e: 0x6d329620, 0x21f5f: 0x6d390c20, + 0x21f61: 0x6d149820, 0x21f62: 0x6c7ae420, 0x21f63: 0x6cd90c20, + 0x21f67: 0x6c2c2820, + 0x21f6c: 0x6d008820, 0x21f6e: 0x6cfe9e20, 0x21f6f: 0x6c4a1c20, + 0x21f70: 0x6ceb7420, 0x21f71: 0x6c3c3620, 0x21f72: 0x6cf3b420, + 0x21f75: 0x6d053220, + 0x21f7f: 0x6d1f1620, + // Block 0x87e, offset 0x21f80 + 0x21f81: 0x6c8ce020, 0x21f82: 0x6d0e6020, + 0x21f85: 0x6c2ff620, 0x21f86: 0x6cb77e20, 0x21f87: 0x6ce21a20, + 0x21f88: 0x6c4dfc20, 0x21f8a: 0x6c1b1c20, 0x21f8b: 0x6cd91820, + 0x21f91: 0x6cc35820, + 0x21f94: 0x6c4ea820, + 0x21f9f: 0x6cc77820, + 0x21fa0: 0x6cb78e20, 0x21fa1: 0x6c762c20, 0x21fa2: 0x6d211e20, 0x21fa3: 0x6c139a20, + 0x21fa4: 0x6c1a8220, 0x21fa5: 0x6d233a20, 0x21fa7: 0x6c0e2020, + 0x21fa9: 0x6c231220, 0x21faa: 0x6d39a420, + 0x21fac: 0x6d235420, + 0x21fb1: 0x6c744a20, 0x21fb2: 0x6c8f3620, 0x21fb3: 0x6ccab220, + 0x21fb4: 0x6d236820, + // Block 0x87f, offset 0x21fc0 + 0x21fc5: 0x6cd66820, + 0x21fcb: 0x6d262020, + 0x21fce: 0x6d2eba20, + 0x21fd1: 0x6cd66a20, 0x21fd3: 0x6c1ee420, + 0x21fd4: 0x6d2ec620, 0x21fd5: 0x6cca2020, 0x21fd6: 0x6cfabe20, + 0x21fd8: 0x6c24d820, 0x21fd9: 0x6c9bde20, 0x21fda: 0x6c2b7c20, + 0x21fde: 0x6d368820, 0x21fdf: 0x6c02de20, + 0x21fe6: 0x6d04e020, + 0x21fe8: 0x6cb11e20, 0x21fea: 0x6c69bc20, 0x21feb: 0x6c7b6c20, + 0x21fec: 0x6cc98620, 0x21fed: 0x6cfcf420, 0x21fee: 0x6d2cda20, 0x21fef: 0x6c2d7820, + 0x21ff7: 0x6d154420, + 0x21ffa: 0x6c5c2e20, 0x21ffb: 0x6ccda620, + // Block 0x880, offset 0x22000 + 0x22004: 0x6c1d2220, 0x22005: 0x6d156220, 0x22006: 0x6d021220, 0x22007: 0x6d36dc20, + 0x22008: 0x6ce5e020, 0x2200a: 0x6cb26c20, 0x2200b: 0x6cfbb020, + 0x2200e: 0x6cfadc20, 0x2200f: 0x6cdb4c20, + 0x22011: 0x6c24a020, + 0x22017: 0x6cd97220, + 0x2201b: 0x6c522820, + 0x2201d: 0x6cfd3a20, 0x2201f: 0x6d1f8e20, + 0x22021: 0x6d246420, + 0x22024: 0x6cdf5220, 0x22026: 0x6c751820, 0x22027: 0x6ca48220, + 0x22029: 0x6c2cba20, 0x2202b: 0x6d164820, + 0x2202c: 0x6c090620, + 0x22033: 0x6d056220, + 0x22034: 0x6d166820, 0x22035: 0x6cc81020, 0x22037: 0x6c455a20, + 0x2203a: 0x6d166a20, + 0x2203f: 0x6d356e20, + // Block 0x881, offset 0x22040 + 0x22040: 0x6d02a420, 0x22042: 0x6c617820, + 0x22044: 0x6cfa2c20, + 0x22048: 0x6d2f4e20, 0x22049: 0x6ca54620, 0x2204a: 0x6d015620, + 0x2204e: 0x6d168620, + 0x2206b: 0x6c3f3420, + 0x2206d: 0x6ccf3420, 0x2206f: 0x6d253c20, + 0x22070: 0x6c390420, 0x22072: 0x6c3d3c20, 0x22073: 0x6cf4a820, + 0x22074: 0x6cf57c20, 0x22075: 0x6c539c20, + 0x22079: 0x6c618220, 0x2207a: 0x6c170420, + 0x2207f: 0x6ca0ca20, + // Block 0x882, offset 0x22080 + 0x22080: 0x6cae0820, 0x22083: 0x6ca20e20, + 0x22084: 0x6cc00420, 0x22085: 0x6c994a20, 0x22087: 0x6c268020, + 0x22089: 0x6cf98c20, 0x2208a: 0x6ccfae20, 0x2208b: 0x6ce26c20, + 0x2208c: 0x6c530220, 0x2208d: 0x6c093620, + 0x2209d: 0x6ca62620, 0x2209f: 0x6cbbd220, + 0x220a7: 0x6cc84e20, + 0x220b8: 0x6c67d820, 0x220b9: 0x6c138420, 0x220ba: 0x6c9ce220, + 0x220bd: 0x6d16f020, 0x220bf: 0x6cdd0a20, + // Block 0x883, offset 0x220c0 + 0x220c1: 0x6cf4c220, 0x220c2: 0x6d078420, + 0x220c5: 0x6cf76c20, 0x220c7: 0x6d15d020, + 0x220d0: 0x6ca49a20, 0x220d3: 0x6cf07820, + 0x220ee: 0x6c770220, + 0x220f1: 0x6c906020, 0x220f2: 0x6c938620, 0x220f3: 0x6d3c2a20, + 0x220fa: 0x6d35b420, + 0x220fc: 0x6d042220, 0x220fe: 0x6c44f820, 0x220ff: 0x6c6ce620, + // Block 0x884, offset 0x22100 + 0x22100: 0x6cfca420, 0x22101: 0x6c61c820, 0x22102: 0x6c261a20, + 0x22104: 0x6c815020, 0x22105: 0x6c3bb820, 0x22106: 0x6c722a20, + 0x2210b: 0x6c9eb220, + 0x2210c: 0x6cf9a620, + 0x22111: 0x6cda8c20, + 0x22128: 0x6d35b620, 0x2212a: 0x6c567e20, 0x2212b: 0x6c79e220, + 0x2212d: 0x6cdd5820, 0x2212e: 0x6ca68e20, + 0x2213a: 0x6ce28c20, 0x2213b: 0x6d3ace20, + // Block 0x885, offset 0x22140 + 0x22141: 0x6c269820, 0x22143: 0x6cc04420, + 0x22144: 0x6d0b9820, 0x22146: 0x6cfb4820, + 0x22149: 0x6ca58820, + 0x2214d: 0x6d351420, 0x2214e: 0x6c0ce620, + 0x22152: 0x6c1d3a20, 0x22153: 0x6c7f9820, + 0x22154: 0x6c2ff820, 0x22155: 0x6cc43a20, 0x22156: 0x6cfe2e20, + 0x22158: 0x6cff8020, 0x22159: 0x6ced0620, 0x2215a: 0x6cc81420, 0x2215b: 0x6cee5020, + 0x2215c: 0x6ca69820, 0x2215e: 0x6c03fe20, 0x2215f: 0x6d0b9a20, + 0x22165: 0x6cd7e220, 0x22166: 0x6d1ad820, + 0x22168: 0x6d231220, + 0x2216e: 0x6c83b820, 0x2216f: 0x6c5dc020, + // Block 0x886, offset 0x22180 + 0x22197: 0x6c056820, + 0x221a3: 0x6cf5e620, + 0x221a5: 0x6c6f6a20, + 0x221a8: 0x6d01ac20, 0x221a9: 0x6cb8e020, 0x221aa: 0x6caaf820, 0x221ab: 0x6d040020, + 0x221ac: 0x6c344e20, 0x221ad: 0x6c614020, 0x221ae: 0x6cf44a20, 0x221af: 0x6ca21220, + 0x221b0: 0x6d0e6e20, 0x221b1: 0x6cb79020, 0x221b2: 0x6ca2de20, 0x221b3: 0x6c1c1e20, + 0x221b4: 0x6c540220, 0x221b6: 0x6ccaf220, + 0x221b8: 0x6ca4aa20, 0x221bb: 0x6c1a7020, + 0x221bc: 0x6c1a7220, 0x221bd: 0x6c7cd020, 0x221bf: 0x6c644220, + // Block 0x887, offset 0x221c0 + 0x221c0: 0x6ce8ac20, 0x221c2: 0x6c319a20, + 0x221c5: 0x6cf9c220, 0x221c6: 0x6d382e20, 0x221c7: 0x6c5dcc20, + 0x221c8: 0x6c1d1620, 0x221c9: 0x6c26a420, + 0x221cc: 0x6c997c20, 0x221cd: 0x6d120620, + 0x221d3: 0x6c72f220, + 0x221ec: 0x6cd38420, 0x221ef: 0x6d1a6420, + 0x221f3: 0x6c478a20, + 0x221f4: 0x6cf4ec20, + 0x221f8: 0x6c4cee20, 0x221f9: 0x6ce3f620, 0x221fb: 0x6c52a220, + // Block 0x888, offset 0x22200 + 0x22207: 0x6cc54e20, + 0x22209: 0x6d14f420, 0x2220b: 0x6cea7c20, + 0x2220f: 0x6cbf3c20, + 0x22210: 0x6c4d6e20, 0x22212: 0x6cb79e20, + 0x22215: 0x6c5dd820, 0x22216: 0x6ce40020, 0x22217: 0x6caf7020, + 0x2221a: 0x6c451020, + 0x2221c: 0x6d01c420, 0x2221e: 0x6c9d5620, 0x2221f: 0x6c434c20, + 0x22220: 0x6cddf020, 0x22221: 0x6cfdec20, 0x22223: 0x6cd4e620, + 0x22226: 0x6c3e9820, + 0x2222c: 0x6d3b7e20, 0x2222d: 0x6c8f3820, + // Block 0x889, offset 0x22240 + 0x22245: 0x6d1f4420, + 0x2224a: 0x6c1a7820, 0x2224b: 0x6c330620, + 0x22262: 0x6c841420, 0x22263: 0x6d105820, + 0x22264: 0x6c841620, 0x22267: 0x6c91c820, + 0x22268: 0x6ca24e20, 0x22269: 0x6cdc5220, 0x2226a: 0x6c00b620, + 0x2226d: 0x6c79f420, 0x2226f: 0x6d306a20, + 0x22270: 0x6c00b820, 0x22271: 0x6ce2a620, 0x22273: 0x6c93ea20, + 0x22274: 0x6ce9ac20, 0x22275: 0x6c088020, + 0x2227e: 0x6c5bf620, 0x2227f: 0x6c588a20, + // Block 0x88a, offset 0x22280 + 0x2229b: 0x6c7e0e20, + 0x2229d: 0x6d02e020, + 0x222a1: 0x6ccaf420, + 0x222ab: 0x6cd5f020, + 0x222ac: 0x6cc3da20, 0x222ad: 0x6c035620, 0x222ae: 0x6cea0620, + 0x222b2: 0x6c403220, 0x222b3: 0x6c0cba20, + 0x222b5: 0x6ce17e20, 0x222b7: 0x6cfe4c20, + 0x222b9: 0x6cd81420, 0x222ba: 0x6c0f4020, + 0x222bc: 0x6c970020, 0x222bd: 0x6c298020, 0x222bf: 0x6c4b6420, + // Block 0x88b, offset 0x222c0 + 0x222c0: 0x6c522020, 0x222c1: 0x6cf69a20, 0x222c2: 0x6c298220, 0x222c3: 0x6d184e20, + 0x222c5: 0x6c088420, 0x222c7: 0x6c472c20, + 0x222c8: 0x6c255820, 0x222c9: 0x6ccb4420, + 0x222cd: 0x6c441e20, 0x222ce: 0x6d23c220, 0x222cf: 0x6ca2fa20, + 0x222d1: 0x6c865620, 0x222d2: 0x6d36ac20, + 0x222f0: 0x6d2fd420, + 0x222f4: 0x6c5f1220, 0x222f5: 0x6cc87220, + 0x222f9: 0x6c1d5820, + // Block 0x88c, offset 0x22300 + 0x22302: 0x6c6b1820, + 0x2230c: 0x6c172020, 0x2230d: 0x6d307a20, + 0x22312: 0x6cdb1020, 0x22313: 0x6d1db020, + 0x22316: 0x6cb7d420, 0x22317: 0x6d3d9820, + 0x2231a: 0x6c769620, + 0x2231c: 0x6d133c20, 0x2231e: 0x6cb7d620, + 0x22339: 0x6d04a420, + // Block 0x88d, offset 0x22340 + 0x22349: 0x6d141420, 0x2234a: 0x6c1e3020, + 0x2234e: 0x6ce98020, 0x2234f: 0x6c00da20, + 0x22350: 0x6cb1f220, 0x22353: 0x6c8b3620, + 0x22354: 0x6c9dd820, 0x22355: 0x6c00dc20, 0x22357: 0x6ca0ae20, + 0x22358: 0x6cf0e220, 0x22359: 0x6d1d5220, 0x2235a: 0x6ca65020, + 0x2235e: 0x6c0f7420, + 0x22360: 0x6c8f4620, + 0x22373: 0x6cc8e620, + 0x2237b: 0x6c936620, + 0x2237c: 0x6c140c20, 0x2237f: 0x6c1f8620, + // Block 0x88e, offset 0x22380 + 0x22381: 0x6ccb0220, 0x22382: 0x6c847020, + 0x22384: 0x6cd94620, 0x22386: 0x6c86c620, + 0x2238b: 0x6cf90420, + 0x2238d: 0x6d0c3e20, 0x2238e: 0x6c25ce20, + 0x22390: 0x6c8eb620, + 0x22398: 0x6c9b6c20, 0x2239a: 0x6d2e8a20, + 0x223a4: 0x6d3c4c20, 0x223a7: 0x6c9ea620, + 0x223a9: 0x6c86f220, 0x223ab: 0x6c71da20, + 0x223af: 0x6d025220, + 0x223b0: 0x6d025420, 0x223b1: 0x6c904220, 0x223b2: 0x6c8fc220, + // Block 0x88f, offset 0x223c0 + 0x223c2: 0x6ce2c620, 0x223c3: 0x6d3b3820, + 0x223cb: 0x6c155220, + 0x223cc: 0x6cfc4420, 0x223cf: 0x6d1cc220, + 0x223d0: 0x6cae2a20, + 0x223d8: 0x6d012220, 0x223da: 0x6c69dc20, + 0x223de: 0x6c1cf820, + 0x223f3: 0x6c50ae20, + 0x223fd: 0x6cea8420, + // Block 0x890, offset 0x22400 + 0x22405: 0x6c53b220, + 0x22408: 0x6c97b020, 0x2240a: 0x6c6c7a20, + 0x2240c: 0x6cc17020, 0x2240d: 0x6c30d420, 0x2240e: 0x6cbff820, 0x2240f: 0x6d28ee20, + 0x22411: 0x6cd0d420, 0x22412: 0x6d28f020, + 0x22415: 0x6d15ba20, + 0x2241a: 0x6c578020, + 0x2241f: 0x6c76a220, + 0x22430: 0x6d268e20, 0x22431: 0x6ca68420, 0x22432: 0x6cd7d620, + 0x22434: 0x6cf2aa20, + 0x22438: 0x6c118e20, 0x2243a: 0x6c647c20, + 0x2243c: 0x6c9ecc20, 0x2243d: 0x6ccea020, 0x2243f: 0x6cc70820, + // Block 0x891, offset 0x22440 + 0x22440: 0x6c419220, + 0x22445: 0x6cbb0a20, 0x22447: 0x6cd52a20, + 0x22448: 0x6d3d5820, + 0x2244f: 0x6cd1bc20, + 0x22451: 0x6ce3f820, + 0x22456: 0x6d2c3620, 0x22457: 0x6d2d7e20, + 0x2245d: 0x6c3bdc20, 0x2245e: 0x6c9eda20, + 0x22460: 0x6d2b5220, + 0x22464: 0x6d368a20, 0x22465: 0x6cb90020, 0x22466: 0x6c4ede20, 0x22467: 0x6c440e20, + 0x2246e: 0x6c119e20, + 0x22470: 0x6c4c7820, 0x22471: 0x6c685e20, 0x22473: 0x6d1da220, + 0x22474: 0x6c026820, + 0x2247b: 0x6d2c4620, + 0x2247d: 0x6cf8c420, + // Block 0x892, offset 0x22480 + 0x22481: 0x6d05d220, 0x22482: 0x6cf46620, + 0x2248f: 0x6c74b820, + 0x22490: 0x6c5f2a20, 0x22492: 0x6c1c6a20, + 0x22494: 0x6ced5420, 0x22496: 0x6c9ef220, 0x22497: 0x6d2b6420, + 0x2249c: 0x6c6b6e20, 0x2249d: 0x6cd29220, 0x2249f: 0x6cf72e20, + 0x224a1: 0x6c36e220, + 0x224a5: 0x6c564220, 0x224a6: 0x6c564a20, + 0x224a8: 0x6c857020, 0x224ab: 0x6c1f0820, + 0x224ae: 0x6d13c820, 0x224af: 0x6c992c20, + 0x224b0: 0x6d056c20, 0x224b1: 0x6d379820, 0x224b3: 0x6d16b820, + 0x224ba: 0x6c89de20, + 0x224bf: 0x6c647820, + // Block 0x893, offset 0x224c0 + 0x224c0: 0x6c656e20, 0x224c1: 0x6c70fa20, + 0x224c4: 0x6d3abc20, + 0x224c8: 0x6cf43a20, + 0x224cf: 0x6c78a420, + 0x224d0: 0x6c786020, 0x224d1: 0x6c860e20, 0x224d2: 0x6c08dc20, 0x224d3: 0x6c43ec20, + 0x224d5: 0x6d059820, 0x224d6: 0x6ccbfa20, 0x224d7: 0x6c8d1c20, + 0x224d8: 0x6c781220, + 0x224de: 0x6c0f4220, 0x224df: 0x6c0b0820, + 0x224e0: 0x6cd68820, 0x224e1: 0x6cb66e20, 0x224e2: 0x6ccde420, + 0x224e6: 0x6c5e6420, + 0x224e8: 0x6cbc1c20, + 0x224ee: 0x6d166c20, 0x224ef: 0x6c73d020, + 0x224f0: 0x6d2efe20, 0x224f2: 0x6d031620, + 0x224f7: 0x6cea9a20, + 0x224f8: 0x6c4d5020, 0x224f9: 0x6cfa2e20, 0x224fb: 0x6ceae020, + 0x224fc: 0x6d145620, + // Block 0x894, offset 0x22500 + 0x22503: 0x6c242c20, + 0x22507: 0x6c674620, + 0x22508: 0x6ca3de20, 0x2250b: 0x6caf0020, + 0x2250d: 0x6c6a7020, 0x2250e: 0x6d08d820, 0x2250f: 0x6c552020, + 0x22525: 0x6d1f9e20, 0x22526: 0x6caa4c20, 0x22527: 0x6d12c220, + 0x2252a: 0x6d1b3a20, + 0x2252c: 0x6c799420, + 0x22536: 0x6cfe8420, 0x22537: 0x6cfd6220, + 0x2253c: 0x6ca49620, 0x2253e: 0x6d2f2420, + // Block 0x895, offset 0x22540 + 0x22550: 0x6c6a7c20, 0x22553: 0x6caa5020, + 0x22554: 0x6ccd7020, + 0x22562: 0x6c63a020, + 0x22567: 0x6d38dc20, + 0x22568: 0x6cc6fe20, 0x2256b: 0x6c922220, + 0x2256c: 0x6cc96e20, 0x2256d: 0x6caa6020, 0x2256f: 0x6c0ec420, + 0x22570: 0x6d302220, 0x22572: 0x6cbdca20, + 0x22574: 0x6c21f620, 0x22575: 0x6d40ac20, 0x22577: 0x6cf2ac20, + 0x22578: 0x6cf43620, 0x2257b: 0x6ca7e020, + 0x2257f: 0x6cfa8820, + // Block 0x896, offset 0x22580 + 0x22580: 0x6c531220, + 0x225ab: 0x6ce6e820, + 0x225ac: 0x6c6c8a20, + 0x225b1: 0x6c6aa420, 0x225b2: 0x6c51c020, 0x225b3: 0x6ce84c20, + 0x225b4: 0x6d303a20, 0x225b5: 0x6cb1ec20, 0x225b6: 0x6c6ce820, 0x225b7: 0x6ca44420, + 0x225bc: 0x6c33e820, 0x225be: 0x6cf5be20, 0x225bf: 0x6d018020, + // Block 0x897, offset 0x225c0 + 0x225c1: 0x6cf86c20, 0x225c2: 0x6c815220, 0x225c3: 0x6c32ac20, + 0x225c4: 0x6c61ca20, 0x225c5: 0x6c138a20, 0x225c6: 0x6c1d6620, + 0x225c8: 0x6c427020, + 0x225ce: 0x6cfdb820, 0x225cf: 0x6c29d620, + 0x225e5: 0x6c0b8e20, 0x225e6: 0x6cfea020, 0x225e7: 0x6d02c220, + // Block 0x898, offset 0x22600 + 0x22601: 0x6d224c20, 0x22602: 0x6cfb4a20, 0x22603: 0x6c83ba20, + 0x22604: 0x6cba0020, 0x22607: 0x6c9a5420, + 0x22609: 0x6cbb6c20, 0x2260a: 0x6d0b9e20, + 0x2260c: 0x6cb82a20, 0x2260d: 0x6cbf8a20, 0x2260f: 0x6c056a20, + 0x22610: 0x6d32b220, + 0x2261a: 0x6d2b4a20, 0x2261b: 0x6cd68e20, + 0x2261e: 0x6ccaf020, + // Block 0x899, offset 0x22640 + 0x22645: 0x6c923a20, + 0x22649: 0x6d009e20, 0x2264b: 0x6c3f5c20, + 0x2264c: 0x6d2d3a20, + 0x22669: 0x6d2b5020, 0x2266b: 0x6c32c220, + 0x2266d: 0x6c2ad620, 0x2266e: 0x6d233c20, + 0x22670: 0x6c93de20, 0x22672: 0x6ced8220, 0x22673: 0x6d090e20, + 0x22674: 0x6c68f420, 0x22675: 0x6d266420, 0x22676: 0x6d362420, 0x22677: 0x6cefc420, + 0x22679: 0x6c43ee20, 0x2267a: 0x6c71b420, + 0x2267c: 0x6d0d8420, 0x2267d: 0x6c262620, 0x2267e: 0x6c997e20, + // Block 0x89a, offset 0x22680 + 0x22686: 0x6c3e7820, 0x22687: 0x6c002820, + 0x2268a: 0x6d079e20, + 0x2268c: 0x6c427e20, 0x2268d: 0x6c013220, + 0x22692: 0x6c603620, + 0x22698: 0x6cafea20, 0x22699: 0x6d352820, + 0x2269c: 0x6caac020, + 0x226bf: 0x6cacbc20, + // Block 0x89b, offset 0x226c0 + 0x226c1: 0x6d14f620, + 0x226c4: 0x6c6ac820, 0x226c6: 0x6d3e3820, + 0x226c8: 0x6c644420, 0x226c9: 0x6cec6420, + 0x226cc: 0x6c644620, + 0x226df: 0x6c15c020, + 0x226e1: 0x6cdd7420, 0x226e2: 0x6cdd7620, 0x226e3: 0x6c605020, + 0x226e4: 0x6cd96420, 0x226e6: 0x6ce2f420, 0x226e7: 0x6caf7420, + 0x226e8: 0x6cb32c20, + 0x226ee: 0x6c9d5a20, + 0x226f4: 0x6d12fc20, 0x226f6: 0x6cbe1c20, 0x226f7: 0x6c6d1620, + 0x226fa: 0x6c73ae20, + 0x226fd: 0x6d24f420, 0x226fe: 0x6cc83e20, + // Block 0x89c, offset 0x22700 + 0x22714: 0x6c04fa20, + 0x22730: 0x6c0d3a20, + 0x22734: 0x6cf0ae20, 0x22735: 0x6d2a8820, 0x22736: 0x6cbcd020, 0x22737: 0x6cd9ce20, + 0x22738: 0x6c91ca20, + 0x2273c: 0x6c2ecc20, 0x2273d: 0x6c1fb820, 0x2273e: 0x6c09f620, 0x2273f: 0x6d3a1a20, + // Block 0x89d, offset 0x22740 + 0x22740: 0x6c966220, 0x22741: 0x6c3aba20, 0x22742: 0x6cb1cc20, 0x22743: 0x6d1b6620, + 0x22744: 0x6d08a220, 0x22746: 0x6c02e020, 0x22747: 0x6d3d7820, + 0x22748: 0x6d40c820, 0x2274b: 0x6c08ea20, + 0x22751: 0x6c812620, 0x22753: 0x6ce40820, + 0x22759: 0x6ce5c820, 0x2275a: 0x6c64c820, + 0x2275f: 0x6ce7c020, + 0x2277d: 0x6c343420, 0x2277e: 0x6c308420, + // Block 0x89e, offset 0x22780 + 0x22782: 0x6c0b4220, + 0x227a0: 0x6d36b020, 0x227a2: 0x6c3b8a20, + 0x227a6: 0x6c776a20, 0x227a7: 0x6d36b220, + 0x227a8: 0x6d2cfc20, 0x227a9: 0x6c0a1e20, 0x227aa: 0x6c7b6e20, + 0x227ac: 0x6c050220, 0x227ad: 0x6c73b820, 0x227ae: 0x6cc13420, + 0x227b0: 0x6cb51e20, 0x227b1: 0x6c824e20, 0x227b2: 0x6d00da20, 0x227b3: 0x6ce0ca20, + 0x227bc: 0x6cd9d420, 0x227be: 0x6c075020, + // Block 0x89f, offset 0x227c0 + 0x227c7: 0x6d106820, + 0x227c8: 0x6c65ce20, + 0x227e5: 0x6d2a8a20, + // Block 0x8a0, offset 0x22800 + 0x22800: 0x6d3b6a20, 0x22803: 0x6c38b820, + 0x22805: 0x6ccf2420, 0x22807: 0x6cbf5e20, + 0x22809: 0x6cb3a020, 0x2280b: 0x6ce60220, + 0x2280c: 0x6ccc1a20, 0x2280d: 0x6d28c820, + 0x22811: 0x6ca7ac20, 0x22812: 0x6c48fa20, 0x22813: 0x6c250a20, + 0x22821: 0x6cbc5e20, 0x22823: 0x6c2ee420, + 0x22833: 0x6cb1ee20, + 0x22834: 0x6c226a20, 0x22836: 0x6c058e20, + // Block 0x8a1, offset 0x22840 + 0x2284d: 0x6d1b8a20, + 0x22851: 0x6cfc3020, + 0x22854: 0x6d161820, 0x22855: 0x6c9e9e20, 0x22856: 0x6c32b220, 0x22857: 0x6d395620, + 0x22859: 0x6c798c20, + 0x22862: 0x6d2ee020, + 0x22876: 0x6c8eb820, + 0x22878: 0x6d355820, 0x22879: 0x6c15ee20, 0x2287a: 0x6c31ca20, 0x2287b: 0x6d25c020, + 0x2287e: 0x6cddd220, 0x2287f: 0x6c6b5820, + // Block 0x8a2, offset 0x22880 + 0x22880: 0x6c86c820, 0x22881: 0x6c460420, + 0x2288c: 0x6c054220, + 0x22897: 0x6c4c9220, + 0x22898: 0x6c8a3420, 0x22899: 0x6cd08220, + 0x228a3: 0x6ca7c020, + 0x228a5: 0x6c24bc20, 0x228a6: 0x6cf04c20, + 0x228a8: 0x6cead620, 0x228ab: 0x6cda6020, + 0x228ad: 0x6c8fc420, + 0x228b3: 0x6cff3820, + 0x228b4: 0x6d0df820, + // Block 0x8a3, offset 0x228c0 + 0x228c3: 0x6cbebe20, + 0x228cd: 0x6cf73020, 0x228cf: 0x6d21e220, + 0x228d1: 0x6d337220, 0x228d2: 0x6d027420, 0x228d3: 0x6c146e20, + 0x228d4: 0x6c3c0020, 0x228d6: 0x6c4c9c20, + 0x228d8: 0x6c6e3e20, 0x228d9: 0x6c808220, 0x228da: 0x6cfafe20, + 0x228dd: 0x6c8d8e20, + 0x228ee: 0x6c830020, + 0x228f2: 0x6c760220, 0x228f3: 0x6d002a20, + 0x228fc: 0x6d28d820, + // Block 0x8a4, offset 0x22900 + 0x22904: 0x6c493e20, 0x22905: 0x6cbd0820, 0x22906: 0x6c963e20, 0x22907: 0x6d124a20, + 0x22908: 0x6c945620, 0x22909: 0x6cdeee20, + 0x22911: 0x6c964020, + 0x2291e: 0x6c03a420, 0x2291f: 0x6c165420, + 0x22921: 0x6d3dec20, + 0x2292b: 0x6ce5d020, + 0x2292f: 0x6cecaa20, + 0x22930: 0x6c8dd420, + 0x22934: 0x6d24aa20, 0x22935: 0x6cb72c20, 0x22937: 0x6cb58020, + 0x2293c: 0x6c619420, 0x2293d: 0x6c0eb620, 0x2293f: 0x6cd1a420, + // Block 0x8a5, offset 0x22940 + 0x22940: 0x6c3f4a20, 0x22942: 0x6c4a4620, + 0x22945: 0x6c2d0e20, 0x22947: 0x6c4fa420, + 0x22949: 0x6c411220, 0x2294b: 0x6cb5c820, + 0x22953: 0x6c19fe20, + 0x22954: 0x6c5bc220, 0x22957: 0x6cf9cc20, + 0x22958: 0x6cd27020, 0x22959: 0x6d365820, 0x2295a: 0x6cb61420, + 0x2295c: 0x6c4d7420, 0x2295f: 0x6c692c20, + 0x22960: 0x6c867620, 0x22962: 0x6c8a7820, + 0x22964: 0x6cbba620, + 0x22968: 0x6cc99c20, 0x2296a: 0x6cb55220, 0x2296b: 0x6cd19620, + 0x2296e: 0x6c6a7220, + 0x22975: 0x6c06e420, 0x22976: 0x6c0aec20, 0x22977: 0x6c032420, + 0x22978: 0x6c755c20, 0x22979: 0x6caf3a20, + 0x2297c: 0x6c282220, 0x2297f: 0x6ce0e620, + // Block 0x8a6, offset 0x22980 + 0x22980: 0x6c7cca20, 0x22981: 0x6c7a2820, 0x22983: 0x6c79d020, + 0x22989: 0x6cd1a620, 0x2298a: 0x6cd1a820, 0x2298b: 0x6c5e9a20, + 0x2298c: 0x6c063620, + 0x22990: 0x6c785a20, 0x22991: 0x6c7b9020, + 0x22996: 0x6c9f9c20, + 0x22999: 0x6c89e020, 0x2299a: 0x6c35f220, 0x2299b: 0x6c43d820, + 0x2299f: 0x6cee0420, + 0x229a0: 0x6c344020, 0x229a3: 0x6cb85220, + 0x229a4: 0x6c573220, 0x229a6: 0x6c539e20, + 0x229a9: 0x6cae5e20, 0x229ab: 0x6c698c20, + 0x229b0: 0x6cc0f020, 0x229b1: 0x6d3f3c20, 0x229b2: 0x6d391820, 0x229b3: 0x6c7b9620, + 0x229b5: 0x6ccbd820, 0x229b7: 0x6c61cc20, + 0x229b8: 0x6cee6c20, 0x229b9: 0x6cb40820, 0x229ba: 0x6d090620, + 0x229bc: 0x6cce6620, + // Block 0x8a7, offset 0x229c0 + 0x229c2: 0x6c80b620, 0x229c3: 0x6d351620, + 0x229c4: 0x6ce6c620, 0x229c7: 0x6c26f020, + 0x229d5: 0x6d0faa20, 0x229d6: 0x6c6d0020, 0x229d7: 0x6d351820, + 0x229da: 0x6d3d5a20, + 0x229dc: 0x6d28b420, 0x229dd: 0x6c14f220, + 0x229e2: 0x6c998020, + 0x229e6: 0x6c797820, 0x229e7: 0x6d388420, + 0x229e8: 0x6c54ca20, 0x229e9: 0x6cae7220, + 0x229ed: 0x6c6ffc20, + 0x229f8: 0x6c21bc20, 0x229f9: 0x6c9fae20, + 0x229fe: 0x6cffec20, + // Block 0x8a8, offset 0x22a00 + 0x22a00: 0x6c322220, 0x22a01: 0x6cef1820, 0x22a03: 0x6c119a20, + 0x22a04: 0x6d214a20, 0x22a05: 0x6c326220, 0x22a06: 0x6c763620, 0x22a07: 0x6cb0a220, + 0x22a0a: 0x6c1a1a20, + 0x22a0e: 0x6c218020, + 0x22a10: 0x6cceb420, 0x22a11: 0x6d0d9e20, 0x22a12: 0x6c7b2820, + 0x22a14: 0x6d265020, + 0x22a26: 0x6cb61620, 0x22a27: 0x6d32e020, + 0x22a29: 0x6c78c220, 0x22a2a: 0x6cb61820, 0x22a2b: 0x6d354020, + 0x22a2c: 0x6c928420, + 0x22a31: 0x6caf7c20, 0x22a32: 0x6cab0420, 0x22a33: 0x6cad7c20, + 0x22a3a: 0x6c3a6020, + 0x22a3f: 0x6cf19c20, + // Block 0x8a9, offset 0x22a40 + 0x22a42: 0x6c9b2c20, + 0x22a48: 0x6ccd5620, + 0x22a4c: 0x6d04a020, 0x22a4e: 0x6c351020, 0x22a4f: 0x6c0c9220, + 0x22a5a: 0x6d1eb020, + 0x22a5c: 0x6c97f620, 0x22a5e: 0x6c8a7a20, + 0x22a61: 0x6d00ea20, 0x22a62: 0x6c949c20, 0x22a63: 0x6cbba820, + 0x22a64: 0x6c2ae620, 0x22a66: 0x6c1a3e20, 0x22a67: 0x6c1a4020, + 0x22a6d: 0x6c21d820, + 0x22a78: 0x6c131420, + // Block 0x8aa, offset 0x22a80 + 0x22a80: 0x6c825e20, 0x22a81: 0x6d2e1c20, 0x22a82: 0x6c853620, 0x22a83: 0x6c885e20, + 0x22a84: 0x6cc45820, + 0x22a8d: 0x6c18ee20, 0x22a8f: 0x6c1a4820, + 0x22a90: 0x6c473c20, 0x22a92: 0x6d403a20, 0x22a93: 0x6c1df420, + 0x22a94: 0x6c204420, + 0x22a9c: 0x6c835220, 0x22a9d: 0x6cd7a820, 0x22a9e: 0x6c941020, + 0x22aa3: 0x6c3f2420, + 0x22aa5: 0x6c871620, 0x22aa7: 0x6cca6020, + 0x22aab: 0x6cca0c20, + 0x22aaf: 0x6cc9b220, + 0x22ab3: 0x6ca8b020, + 0x22ab6: 0x6d413c20, 0x22ab7: 0x6c855020, + 0x22abb: 0x6cd58c20, + 0x22abe: 0x6c3f2a20, + // Block 0x8ab, offset 0x22ac0 + 0x22ac9: 0x6c094620, + 0x22acd: 0x6c2a0820, + 0x22ad2: 0x6cd1b220, + 0x22ad6: 0x6c422020, 0x22ad7: 0x6ce09e20, + 0x22adc: 0x6c97f820, 0x22adf: 0x6c842820, + 0x22ae2: 0x6c0a4c20, + 0x22ae6: 0x6cac7e20, + 0x22ae8: 0x6d1eca20, + 0x22aed: 0x6c6f5020, 0x22aef: 0x6c4c1220, + 0x22af0: 0x6c89dc20, 0x22af3: 0x6cf2de20, + 0x22af4: 0x6cb85420, 0x22af5: 0x6c30e820, 0x22af7: 0x6c8afa20, + 0x22af9: 0x6c68e020, 0x22afb: 0x6c8afc20, + // Block 0x8ac, offset 0x22b00 + 0x22b01: 0x6ce56020, + 0x22b04: 0x6c4c2620, 0x22b06: 0x6cacde20, 0x22b07: 0x6cbb8e20, + 0x22b09: 0x6c2b8a20, 0x22b0a: 0x6d284420, + 0x22b12: 0x6c821420, + 0x22b16: 0x6cd7cc20, 0x22b17: 0x6d02b020, + 0x22b1c: 0x6d02c420, 0x22b1d: 0x6cfe2620, 0x22b1e: 0x6c95ac20, + 0x22b24: 0x6c07e820, 0x22b25: 0x6ce55a20, + 0x22b2c: 0x6cffee20, 0x22b2e: 0x6c30b420, + 0x22b33: 0x6c296e20, + 0x22b34: 0x6ce67c20, 0x22b35: 0x6d3bcc20, + 0x22b3b: 0x6cab4620, + 0x22b3d: 0x6cf30e20, + // Block 0x8ad, offset 0x22b40 + 0x22b44: 0x6d02ee20, 0x22b45: 0x6cc87a20, + 0x22b48: 0x6d3dae20, 0x22b49: 0x6c299020, + 0x22b4d: 0x6c257420, + 0x22b51: 0x6d3dc820, + 0x22b57: 0x6c238620, + 0x22b58: 0x6c159220, + 0x22b5d: 0x6d100820, + 0x22b67: 0x6d0d5e20, + 0x22b73: 0x6d0d6820, + 0x22b75: 0x6d323620, + 0x22b7d: 0x6caade20, 0x22b7e: 0x6d0e7220, + // Block 0x8ae, offset 0x22b80 + 0x22b85: 0x6c39d820, + 0x22b89: 0x6d0da020, 0x22b8a: 0x6d214e20, + 0x22b8d: 0x6ce34020, 0x22b8e: 0x6c401a20, 0x22b8f: 0x6c07a020, + 0x22b91: 0x6d0db220, 0x22b93: 0x6c5ad220, + 0x22b99: 0x6c5a6220, + 0x22b9c: 0x6c4b7420, 0x22b9d: 0x6d0ece20, 0x22b9f: 0x6c55da20, + 0x22ba0: 0x6c0c3620, + 0x22ba7: 0x6cdcc420, + 0x22bae: 0x6d3f3020, 0x22baf: 0x6c618620, + 0x22bb0: 0x6c35ae20, 0x22bb1: 0x6c61ce20, 0x22bb2: 0x6c7ccc20, + 0x22bb4: 0x6c89b620, + 0x22bb8: 0x6c5dda20, 0x22bba: 0x6cef3a20, 0x22bbb: 0x6d3cea20, + 0x22bbf: 0x6ce6ae20, + // Block 0x8af, offset 0x22bc0 + 0x22bc3: 0x6d290e20, + 0x22bc4: 0x6d201020, + 0x22bc9: 0x6cc5c020, + 0x22bcd: 0x6c9e4e20, + 0x22bda: 0x6ca31020, + 0x22bdd: 0x6ce84220, 0x22bdf: 0x6c27be20, + 0x22be1: 0x6c73ec20, + 0x22be4: 0x6d056e20, 0x22be5: 0x6c2b1820, + 0x22bf0: 0x6cfe1a20, + 0x22bf7: 0x6d048a20, + 0x22bfa: 0x6d1fac20, 0x22bfb: 0x6c489620, + 0x22bfe: 0x6cf5a420, + // Block 0x8b0, offset 0x22c00 + 0x22c08: 0x6c51bc20, + 0x22c0d: 0x6c2f6c20, + 0x22c10: 0x6c914020, 0x22c12: 0x6d061a20, + 0x22c14: 0x6d391a20, 0x22c15: 0x6cfca820, 0x22c16: 0x6c598820, 0x22c17: 0x6c138c20, + 0x22c18: 0x6cd2c420, 0x22c19: 0x6c421820, 0x22c1a: 0x6caadc20, 0x22c1b: 0x6c01aa20, + 0x22c1f: 0x6d003c20, + 0x22c27: 0x6c502c20, + 0x22c32: 0x6cbd2a20, 0x22c33: 0x6c450620, + 0x22c34: 0x6ccce020, 0x22c35: 0x6c3e4c20, + 0x22c3d: 0x6d2b4c20, + // Block 0x8b1, offset 0x22c40 + 0x22c47: 0x6c287c20, + 0x22c56: 0x6c2d1420, 0x22c57: 0x6ccfdc20, + 0x22c59: 0x6d411820, + 0x22c62: 0x6c0ca620, + 0x22c66: 0x6c20d020, 0x22c67: 0x6d30f820, + 0x22c68: 0x6c276e20, 0x22c6b: 0x6cf2b620, + 0x22c6c: 0x6cbf2420, + 0x22c70: 0x6c8bb420, 0x22c72: 0x6c5cc820, 0x22c73: 0x6c5ed020, + // Block 0x8b2, offset 0x22c80 + 0x22c85: 0x6c127620, + 0x22c8a: 0x6ca28620, + 0x22c8d: 0x6c2ea820, 0x22c8e: 0x6cf09620, + 0x22ca0: 0x6c0b9a20, 0x22ca1: 0x6ce3c020, + 0x22ca5: 0x6ce8be20, + 0x22cb6: 0x6c453620, + // Block 0x8b3, offset 0x22cc0 + 0x22cc4: 0x6c1b3220, 0x22cc5: 0x6c23ee20, 0x22cc6: 0x6ce3c420, + 0x22cd2: 0x6c5de620, 0x22cd3: 0x6cb50e20, + 0x22cd4: 0x6ccab820, 0x22cd5: 0x6ccaa020, 0x22cd6: 0x6d085220, 0x22cd7: 0x6c021c20, + 0x22cd8: 0x6ca3ce20, 0x22cda: 0x6d0fd020, 0x22cdb: 0x6cd4f420, + 0x22cdc: 0x6ccc0620, + 0x22ce1: 0x6ce6d620, + 0x22ce9: 0x6d0bc420, 0x22cea: 0x6c5a5820, + 0x22cee: 0x6c0d4220, + 0x22cfe: 0x6caba020, 0x22cff: 0x6c128820, + // Block 0x8b4, offset 0x22d00 + 0x22d01: 0x6c026a20, 0x22d03: 0x6c99ae20, + 0x22d14: 0x6c9b3620, 0x22d16: 0x6ce47220, + 0x22d1d: 0x6ccaa220, 0x22d1e: 0x6d073a20, 0x22d1f: 0x6c771020, + 0x22d27: 0x6c811020, + 0x22d36: 0x6c0cc020, 0x22d37: 0x6c23b220, + 0x22d3a: 0x6cfb8e20, + // Block 0x8b5, offset 0x22d40 + 0x22d44: 0x6cea2a20, + 0x22d49: 0x6d240a20, 0x22d4a: 0x6c28c220, 0x22d4b: 0x6d1d5420, + 0x22d4d: 0x6d2f7820, 0x22d4f: 0x6cb4b620, + 0x22d58: 0x6c5c4e20, + 0x22d5e: 0x6c00ea20, 0x22d5f: 0x6ca0b220, + 0x22d62: 0x6c6dde20, 0x22d63: 0x6c7fce20, + 0x22d72: 0x6c8b5820, 0x22d73: 0x6cb1a420, + 0x22d75: 0x6c0fa420, 0x22d76: 0x6cbf8220, + 0x22d79: 0x6c0aa220, + 0x22d7f: 0x6d1dd420, + // Block 0x8b6, offset 0x22d80 + 0x22d85: 0x6c871820, + 0x22d8d: 0x6ca8b220, 0x22d8f: 0x6c2a8820, + 0x22d93: 0x6c584620, + 0x22d97: 0x6d272420, + 0x22d9a: 0x6c212c20, + 0x22d9c: 0x6c87b020, 0x22d9e: 0x6d2ef420, 0x22d9f: 0x6c8dd620, + 0x22da0: 0x6c217020, + 0x22da7: 0x6c12d220, + 0x22da8: 0x6d09ea20, + 0x22dac: 0x6c71ac20, 0x22dad: 0x6c5cac20, + 0x22dbe: 0x6ce6f820, + // Block 0x8b7, offset 0x22dc0 + 0x22dc6: 0x6ca91220, 0x22dc7: 0x6c727a20, + 0x22dcf: 0x6c144c20, + 0x22dd6: 0x6d2a2e20, + 0x22ddb: 0x6d24a020, + 0x22ddf: 0x6c78f420, + 0x22de6: 0x6c7bea20, 0x22de7: 0x6c3a4a20, + 0x22def: 0x6d282620, + 0x22df0: 0x6cb9fc20, + 0x22df4: 0x6cc2dc20, + 0x22df8: 0x6cb38a20, 0x22dfa: 0x6cadf620, + // Block 0x8b8, offset 0x22e00 + 0x22e04: 0x6c453820, 0x22e05: 0x6d17e420, 0x22e06: 0x6c961020, + 0x22e11: 0x6c7b5a20, 0x22e13: 0x6d085420, + 0x22e14: 0x6ca76e20, + 0x22e1a: 0x6c55ac20, 0x22e1b: 0x6c715820, + 0x22e29: 0x6d136a20, + 0x22e2e: 0x6cf73420, + 0x22e31: 0x6d271c20, 0x22e32: 0x6ce19020, 0x22e33: 0x6cb23e20, + 0x22e34: 0x6c33c820, 0x22e35: 0x6c06d420, + 0x22e38: 0x6c8a6020, + // Block 0x8b9, offset 0x22e40 + 0x22e40: 0x6d1e0e20, + 0x22e4e: 0x6d0acc20, + 0x22e51: 0x6c68bc20, + 0x22e54: 0x6c7dcc20, 0x22e56: 0x6d321820, 0x22e57: 0x6cd59c20, + 0x22e5a: 0x6cd24820, + 0x22e5e: 0x6d1efa20, 0x22e5f: 0x6cac1a20, + 0x22e60: 0x6cff6e20, 0x22e61: 0x6c5fe020, + 0x22e76: 0x6cb4d220, 0x22e77: 0x6c50c620, + 0x22e7a: 0x6c799620, + // Block 0x8ba, offset 0x22e80 + 0x22e82: 0x6d12d020, 0x22e83: 0x6c1bf020, + 0x22e8a: 0x6c77a220, 0x22e8b: 0x6d269020, + 0x22e8e: 0x6cec1a20, 0x22e8f: 0x6ca71820, + 0x22e91: 0x6c222e20, 0x22e93: 0x6d14a020, + 0x22ea4: 0x6c704620, + 0x22eab: 0x6d0f4e20, + 0x22eac: 0x6c83a620, 0x22eae: 0x6c270a20, 0x22eaf: 0x6c1d0c20, + 0x22eb5: 0x6d14c620, + 0x22eba: 0x6c4e9a20, + 0x22ebf: 0x6d13de20, + // Block 0x8bb, offset 0x22ec0 + 0x22ec1: 0x6c1d4a20, 0x22ec2: 0x6c568020, 0x22ec3: 0x6d3b6220, + 0x22ee6: 0x6cbf0a20, 0x22ee7: 0x6c34de20, + 0x22ef8: 0x6ce73220, 0x22ef9: 0x6cfa9020, + 0x22eff: 0x6c3e5020, + // Block 0x8bc, offset 0x22f00 + 0x22f02: 0x6c2d5020, 0x22f03: 0x6cf77820, + 0x22f04: 0x6d003e20, 0x22f05: 0x6d323820, 0x22f06: 0x6cbc3e20, 0x22f07: 0x6ce85620, + 0x22f37: 0x6c4eb020, + 0x22f38: 0x6c7bf220, 0x22f39: 0x6cdd1a20, 0x22f3b: 0x6cd46220, + 0x22f3c: 0x6ce58020, + // Block 0x8bd, offset 0x22f40 + 0x22f40: 0x6d315020, 0x22f43: 0x6ca58c20, + 0x22f45: 0x6cba0a20, 0x22f46: 0x6d1a6620, + 0x22f48: 0x6c899220, 0x22f49: 0x6ccc5420, 0x22f4a: 0x6d3f4c20, 0x22f4b: 0x6cafec20, + 0x22f4c: 0x6c42c620, 0x22f4f: 0x6c6d0a20, + 0x22f50: 0x6d1f3620, 0x22f52: 0x6ccd8c20, + 0x22f54: 0x6c9d4620, 0x22f55: 0x6cab9c20, 0x22f57: 0x6c54cc20, + 0x22f5b: 0x6d204620, + 0x22f5d: 0x6c9bd420, + // Block 0x8be, offset 0x22f80 + 0x22f90: 0x6d352a20, 0x22f93: 0x6c08e020, + 0x22f97: 0x6ccfe820, + 0x22f98: 0x6cb79420, 0x22f99: 0x6cfaa620, 0x22f9a: 0x6cac5820, 0x22f9b: 0x6c776e20, + 0x22fab: 0x6cd68620, + 0x22fac: 0x6cafee20, 0x22fae: 0x6d290220, 0x22faf: 0x6d3a6c20, + 0x22fb1: 0x6cd9c020, 0x22fb2: 0x6c6f1820, + 0x22fb5: 0x6c150020, 0x22fb6: 0x6c38a420, 0x22fb7: 0x6cff8e20, + 0x22fb8: 0x6d1aec20, 0x22fb9: 0x6c540e20, 0x22fba: 0x6c999220, 0x22fbb: 0x6ce8c020, + 0x22fbd: 0x6c621820, + // Block 0x8bf, offset 0x22fc0 + 0x22fc1: 0x6d151c20, 0x22fc3: 0x6d236c20, + 0x22fc4: 0x6c6ee020, 0x22fc5: 0x6cad9220, 0x22fc7: 0x6cfed820, + 0x22fc9: 0x6c468c20, + 0x22fcc: 0x6c465020, 0x22fcd: 0x6cdcf220, 0x22fce: 0x6cfc1620, 0x22fcf: 0x6d3baa20, + 0x22ffe: 0x6c1dba20, + // Block 0x8c0, offset 0x23000 + 0x23004: 0x6cbb7e20, 0x23005: 0x6ce34220, 0x23006: 0x6d27b020, + 0x23009: 0x6cccec20, 0x2300a: 0x6c8b1420, + 0x2300c: 0x6d353620, + 0x23010: 0x6cabf220, + 0x23023: 0x6c712e20, + 0x23024: 0x6c7f1220, + 0x23028: 0x6d3f1820, 0x2302a: 0x6cc1a420, 0x2302b: 0x6c47b020, + 0x2302c: 0x6c747a20, 0x2302d: 0x6d348220, 0x2302e: 0x6c021e20, 0x2302f: 0x6cbe2020, + 0x23030: 0x6cb00620, 0x23031: 0x6d417820, 0x23033: 0x6cb9b020, + 0x23035: 0x6c25e620, 0x23037: 0x6c606620, + 0x23038: 0x6ce35220, 0x23039: 0x6cc7b620, 0x2303b: 0x6c4d4220, + 0x2303c: 0x6d0a2620, 0x2303e: 0x6c073c20, 0x2303f: 0x6d348420, + // Block 0x8c1, offset 0x23040 + 0x23041: 0x6c340020, + 0x2304b: 0x6c293220, + 0x23050: 0x6cc62e20, + 0x23072: 0x6c41a820, + 0x23075: 0x6c42ae20, 0x23076: 0x6cde7220, + 0x23078: 0x6cebae20, 0x23079: 0x6d105e20, 0x2307a: 0x6c7a4e20, 0x2307b: 0x6d368c20, + // Block 0x8c2, offset 0x23080 + 0x23096: 0x6c64d020, 0x23097: 0x6ca6be20, + 0x23098: 0x6cd00e20, 0x23099: 0x6c058620, 0x2309a: 0x6cd66e20, 0x2309b: 0x6c30c020, + 0x2309d: 0x6cb91420, 0x2309e: 0x6c4e2820, 0x2309f: 0x6cb83020, + 0x230a0: 0x6c41e420, 0x230a3: 0x6c215a20, + 0x230a4: 0x6c13fe20, 0x230a5: 0x6c0a2620, 0x230a6: 0x6d140c20, 0x230a7: 0x6c3d9020, + 0x230a8: 0x6c35b820, 0x230aa: 0x6c816c20, 0x230ab: 0x6c4fe020, + 0x230ac: 0x6c842a20, + 0x230b1: 0x6ce28020, 0x230b2: 0x6cd01020, + 0x230b4: 0x6d1a9020, 0x230b7: 0x6c64d220, + 0x230bb: 0x6c140020, + // Block 0x8c3, offset 0x230c0 + 0x230d7: 0x6ca86020, + 0x230d8: 0x6c23f620, 0x230db: 0x6d154620, + 0x230df: 0x6ce12220, + 0x230e2: 0x6c738820, + 0x230f0: 0x6c1c5820, 0x230f1: 0x6c468e20, + 0x230f4: 0x6c6b1a20, 0x230f5: 0x6d307c20, 0x230f6: 0x6c559220, 0x230f7: 0x6c987220, + 0x230fb: 0x6d406220, + 0x230fc: 0x6cd8e820, 0x230ff: 0x6c3ad020, + // Block 0x8c4, offset 0x23100 + 0x23100: 0x6d3e8620, 0x23101: 0x6d3e8820, 0x23103: 0x6c6b3420, + 0x23104: 0x6cd82820, 0x23106: 0x6c211620, 0x23107: 0x6cad9820, + 0x2310b: 0x6d128e20, + 0x2310c: 0x6c2b4420, 0x2310e: 0x6c825820, 0x2310f: 0x6d05e420, + 0x23110: 0x6cc7c820, 0x23112: 0x6cabde20, 0x23113: 0x6c738e20, + 0x23114: 0x6cf8dc20, 0x23115: 0x6d133e20, 0x23116: 0x6c014c20, + 0x23118: 0x6d189420, 0x23119: 0x6c64f420, + 0x2311c: 0x6cd93820, 0x2311d: 0x6cf2c420, 0x2311f: 0x6ccb5820, + 0x23120: 0x6d355020, 0x23121: 0x6c088e20, 0x23122: 0x6d3be220, + 0x23126: 0x6c67fa20, 0x23127: 0x6c506820, + 0x23129: 0x6c1c6c20, 0x2312a: 0x6c340820, + // Block 0x8c5, offset 0x23140 + 0x23153: 0x6c0f5820, + 0x23154: 0x6c60a820, 0x23155: 0x6c1fb020, 0x23157: 0x6c962620, + 0x2315a: 0x6cc8b220, + 0x2316b: 0x6c55b020, + 0x23171: 0x6c28c420, + 0x23174: 0x6c4e6420, 0x23175: 0x6cc3fe20, 0x23176: 0x6ccc1e20, 0x23177: 0x6d2e1e20, + 0x23178: 0x6d2b0e20, 0x23179: 0x6c201220, 0x2317a: 0x6cb53620, 0x2317b: 0x6c2ef020, + 0x2317d: 0x6d2ce220, 0x2317e: 0x6ce83220, + // Block 0x8c6, offset 0x23180 + 0x23181: 0x6c221220, 0x23182: 0x6cc99e20, + 0x23184: 0x6c955620, 0x23187: 0x6c60be20, + 0x231a2: 0x6c95c220, 0x231a3: 0x6cbdb220, + 0x231a7: 0x6cbf6c20, + 0x231a8: 0x6c739420, + 0x231ac: 0x6c00e020, 0x231ad: 0x6c65e220, + 0x231b9: 0x6ce42a20, 0x231ba: 0x6cf1b620, + 0x231bd: 0x6cbbb620, + // Block 0x8c7, offset 0x231c0 + 0x231c1: 0x6cac0820, 0x231c2: 0x6c5d0620, + 0x231c5: 0x6c00ec20, 0x231c7: 0x6cd7a220, + 0x231c8: 0x6c887220, 0x231c9: 0x6c337420, 0x231cb: 0x6cdebc20, + 0x231cc: 0x6c6cbe20, 0x231cd: 0x6c0a8a20, 0x231ce: 0x6d0de820, 0x231cf: 0x6c435a20, + 0x231d0: 0x6cb18820, 0x231d1: 0x6d242c20, 0x231d2: 0x6ccf7c20, + 0x231d5: 0x6c651420, 0x231d7: 0x6c55dc20, + 0x231da: 0x6c8b4e20, + 0x231dc: 0x6c0bce20, 0x231dd: 0x6cdb4e20, 0x231de: 0x6c689420, + 0x231f8: 0x6d3cb820, + 0x231fd: 0x6c4dc220, + // Block 0x8c8, offset 0x23200 + 0x23207: 0x6c340e20, + 0x23210: 0x6d014e20, 0x23211: 0x6c9b8220, 0x23212: 0x6c3db420, 0x23213: 0x6c931a20, + 0x23214: 0x6ce0b220, 0x23217: 0x6c8ecc20, + 0x23218: 0x6cfaee20, 0x23219: 0x6cca9420, + 0x2321c: 0x6c240220, 0x2321d: 0x6d3c2620, 0x2321f: 0x6c188e20, + 0x23230: 0x6c892820, + 0x23234: 0x6c848c20, + // Block 0x8c9, offset 0x23240 + 0x23240: 0x6caf1a20, 0x23241: 0x6ceb9420, + 0x23244: 0x6cebb820, 0x23246: 0x6c8a4a20, 0x23247: 0x6d002620, + 0x23248: 0x6c20f620, 0x23249: 0x6c581a20, 0x2324a: 0x6ca7c220, 0x2324b: 0x6cb94820, + 0x2324c: 0x6c871c20, 0x2324f: 0x6cad3e20, + 0x23250: 0x6ce5b020, 0x23251: 0x6c8ece20, 0x23252: 0x6cf40a20, + 0x23264: 0x6d1d2620, 0x23266: 0x6d2c6820, + 0x23270: 0x6d21ee20, 0x23272: 0x6cfc5020, 0x23273: 0x6d083820, + 0x23274: 0x6cd68a20, 0x23275: 0x6cf74220, + 0x23278: 0x6c9a4220, 0x23279: 0x6ccbb420, 0x2327a: 0x6c893420, + 0x2327c: 0x6c6f9020, 0x2327d: 0x6c81ec20, + // Block 0x8ca, offset 0x23280 + 0x2328e: 0x6cff5020, 0x2328f: 0x6d407420, + 0x2329a: 0x6c8ee820, + 0x2329c: 0x6d2ff020, 0x2329e: 0x6d30c220, + 0x232a0: 0x6c830820, + 0x232ad: 0x6c32b420, + 0x232b7: 0x6c663420, + 0x232b8: 0x6cd68c20, 0x232b9: 0x6d425620, 0x232ba: 0x6cbd0c20, + 0x232bc: 0x6c81ca20, + // Block 0x8cb, offset 0x232c0 + 0x232c9: 0x6d248420, 0x232ca: 0x6d196620, 0x232cb: 0x6ca66e20, + 0x232ce: 0x6c134620, + 0x232d5: 0x6d0f1a20, 0x232d7: 0x6cc89020, + 0x232de: 0x6d0d1c20, 0x232df: 0x6c2f1e20, + 0x232e0: 0x6c9df620, + 0x232e7: 0x6c82a420, + 0x232e9: 0x6cecae20, + 0x232f0: 0x6ca2fe20, + 0x232f6: 0x6d0d2420, + 0x232fa: 0x6c831c20, + 0x232fd: 0x6ccc3020, 0x232fe: 0x6c551620, + // Block 0x8cc, offset 0x23300 + 0x23301: 0x6cf58020, 0x23302: 0x6cf58220, + 0x23304: 0x6d1fa020, 0x23305: 0x6c4d9220, 0x23307: 0x6c4d0820, + 0x23309: 0x6cebc820, 0x2330a: 0x6d068220, 0x2330b: 0x6caf3c20, + 0x2330c: 0x6cdf8e20, 0x2330d: 0x6cf58a20, 0x2330e: 0x6cf58c20, 0x2330f: 0x6c0d2420, + 0x23310: 0x6cbd1a20, 0x23311: 0x6cf58e20, 0x23312: 0x6d20c420, 0x23313: 0x6cf84a20, + 0x23315: 0x6c22b620, 0x23316: 0x6cba4020, 0x23317: 0x6cf95420, + 0x2331a: 0x6cec0620, 0x2331b: 0x6c35f420, + 0x2331c: 0x6d1fae20, 0x2331d: 0x6d041a20, 0x2331e: 0x6ca5c220, 0x2331f: 0x6c4de420, + 0x23320: 0x6c094a20, 0x23321: 0x6cd0ec20, + 0x23324: 0x6d2d6220, 0x23325: 0x6c2d4420, 0x23326: 0x6d222c20, + 0x23328: 0x6cab7a20, 0x2332a: 0x6c4ae820, 0x2332b: 0x6cee0620, + 0x2332c: 0x6cb8c620, 0x2332d: 0x6d14c820, + 0x23330: 0x6d40b020, 0x23332: 0x6cb8c820, 0x23333: 0x6c2f9c20, + 0x23334: 0x6c793420, 0x23336: 0x6c1f2620, 0x23337: 0x6d13e020, + 0x2333a: 0x6c4d9e20, 0x2333b: 0x6c7b6420, + // Block 0x8cd, offset 0x23340 + 0x23348: 0x6c2d5820, 0x23349: 0x6cf88a20, 0x2334a: 0x6d3e3c20, 0x2334b: 0x6c8d0420, + 0x2334c: 0x6d3f4e20, 0x2334e: 0x6d234420, 0x2334f: 0x6c5ccc20, + 0x23351: 0x6cd86e20, 0x23352: 0x6c76d620, + 0x2335a: 0x6c01c420, + 0x2335c: 0x6d1fca20, 0x2335d: 0x6c605420, 0x2335e: 0x6c5d2c20, 0x2335f: 0x6cb82e20, + 0x23360: 0x6c541020, 0x23361: 0x6c541220, 0x23363: 0x6c2d5c20, + 0x23369: 0x6d004c20, + 0x2336d: 0x6ccf5620, 0x2336e: 0x6ccc5c20, + 0x23372: 0x6d00ca20, 0x23373: 0x6d112220, + 0x23374: 0x6c26f420, 0x23376: 0x6d01d820, 0x23377: 0x6c1ac620, + 0x23378: 0x6d1fde20, 0x23379: 0x6c50a220, 0x2337a: 0x6ccc6220, + 0x2337f: 0x6cdf2e20, + // Block 0x8ce, offset 0x23380 + 0x23381: 0x6d3a1c20, 0x23383: 0x6c006c20, + 0x23387: 0x6cc3e020, + 0x23388: 0x6d2aea20, 0x2338a: 0x6c7e4a20, 0x2338b: 0x6c911620, + 0x2338c: 0x6c1fc820, 0x2338e: 0x6d1fe620, + 0x23396: 0x6ce41020, + 0x23398: 0x6cd1fa20, + 0x233a1: 0x6d000a20, 0x233a2: 0x6cf8ee20, + 0x233a8: 0x6c5e1220, 0x233a9: 0x6c1c8620, 0x233aa: 0x6d18e620, + 0x233af: 0x6cd54420, + 0x233b0: 0x6d270020, 0x233b1: 0x6c155420, 0x233b2: 0x6c36da20, 0x233b3: 0x6cf73620, + 0x233b4: 0x6cf74420, 0x233b5: 0x6d1d2a20, 0x233b6: 0x6d410020, 0x233b7: 0x6d28a220, + 0x233ba: 0x6d28a820, + // Block 0x8cf, offset 0x233c0 + 0x233c2: 0x6cde2c20, 0x233c3: 0x6ced7020, + 0x233c7: 0x6d031e20, + 0x233ca: 0x6cee4820, 0x233cb: 0x6c3f3820, + 0x233d0: 0x6c91b620, + 0x233de: 0x6c656820, + 0x233e1: 0x6d0c6620, 0x233e3: 0x6c094c20, + 0x233e4: 0x6c78fc20, 0x233e5: 0x6c497820, + 0x233e8: 0x6d3e1820, + 0x233ee: 0x6c7cce20, 0x233ef: 0x6d38e020, + 0x233f0: 0x6d35be20, 0x233f3: 0x6ce8a420, + 0x233f7: 0x6cde4c20, + 0x233f9: 0x6c1f3e20, 0x233fa: 0x6c196e20, 0x233fb: 0x6c1a7420, + 0x233fc: 0x6d3af420, 0x233fe: 0x6c26f220, + // Block 0x8d0, offset 0x23400 + 0x23407: 0x6c09c620, + 0x23409: 0x6c641c20, + 0x2340c: 0x6d17e620, 0x2340f: 0x6d26c420, + 0x23410: 0x6c428a20, + 0x23416: 0x6c41ae20, + 0x2341c: 0x6cbbac20, + 0x23420: 0x6c1eb020, 0x23421: 0x6c1eb620, 0x23422: 0x6c0a6a20, + 0x23426: 0x6c4b8a20, + 0x23429: 0x6c47e020, 0x2342a: 0x6c0e0020, 0x2342b: 0x6d1b9420, + 0x2342c: 0x6d3cbc20, 0x2342d: 0x6c47ec20, 0x2342f: 0x6c876820, + 0x23435: 0x6c35c420, 0x23436: 0x6c271420, + 0x2343c: 0x6c118620, + // Block 0x8d1, offset 0x23440 + 0x23442: 0x6ce3d420, 0x23443: 0x6c323620, + 0x23444: 0x6d168c20, + 0x23448: 0x6c2e6020, 0x2344a: 0x6ca97e20, + 0x2344c: 0x6d094420, 0x2344d: 0x6ca54a20, 0x2344e: 0x6c4b3220, 0x2344f: 0x6c779e20, + 0x23452: 0x6c201a20, + 0x23456: 0x6d2c2020, 0x23457: 0x6d1efc20, + 0x23459: 0x6c043420, 0x2345a: 0x6cd24a20, 0x2345b: 0x6c2d3e20, + 0x2345c: 0x6cabb420, 0x2345d: 0x6cc01620, + 0x23461: 0x6d094820, 0x23463: 0x6ca0e420, + 0x23464: 0x6c77e020, 0x23465: 0x6d1fb020, 0x23466: 0x6c68d220, 0x23467: 0x6c0ec620, + 0x2346c: 0x6d052020, + 0x23472: 0x6c9ce820, 0x23473: 0x6c95f220, + 0x23475: 0x6d094e20, 0x23477: 0x6c34e220, + 0x23479: 0x6c37c620, 0x2347a: 0x6cccd820, + 0x2347c: 0x6c7cee20, 0x2347d: 0x6ca52c20, 0x2347e: 0x6c9e1420, 0x2347f: 0x6c85ce20, + // Block 0x8d2, offset 0x23480 + 0x23480: 0x6c949620, 0x23482: 0x6c2e8420, + 0x23484: 0x6cb85620, 0x23485: 0x6c832a20, 0x23487: 0x6c997020, + 0x23489: 0x6c524c20, 0x2348a: 0x6c181620, 0x2348b: 0x6d35e620, + 0x2348d: 0x6c477c20, 0x2348e: 0x6c25b820, + 0x23493: 0x6cf4de20, + 0x23494: 0x6ce26420, 0x23497: 0x6cf61220, + 0x23498: 0x6d10a620, 0x23499: 0x6cefc620, 0x2349b: 0x6d40be20, + 0x2349c: 0x6c96be20, 0x2349d: 0x6d225a20, 0x2349e: 0x6caf0820, 0x2349f: 0x6d17a420, + 0x234a0: 0x6cbe1620, 0x234a1: 0x6d26b620, 0x234a2: 0x6c754c20, 0x234a3: 0x6c67e620, + 0x234a4: 0x6d06d820, 0x234a5: 0x6c07ea20, + 0x234aa: 0x6c95b020, 0x234ab: 0x6d3c6020, + 0x234b2: 0x6c326420, 0x234b3: 0x6cfe4020, + 0x234b6: 0x6c5be420, + 0x234ba: 0x6c479e20, 0x234bb: 0x6c77b020, + 0x234be: 0x6d037c20, 0x234bf: 0x6c5cf020, + // Block 0x8d3, offset 0x234c0 + 0x234c0: 0x6c0af820, + 0x234c4: 0x6c78c420, 0x234c5: 0x6c77b220, + 0x234c8: 0x6c25e820, + 0x234cf: 0x6c92a420, + 0x234d1: 0x6d41c620, 0x234d2: 0x6d2a2020, 0x234d3: 0x6c692e20, + 0x234d4: 0x6c49a020, + 0x234d9: 0x6d0c2220, 0x234da: 0x6c376620, + 0x234dc: 0x6cbe8820, 0x234df: 0x6c2ae820, + 0x234e0: 0x6cd8ea20, 0x234e1: 0x6cdc7220, 0x234e2: 0x6c8aa420, + 0x234e7: 0x6ccdb020, + 0x234e9: 0x6c0a6e20, 0x234ea: 0x6cf0e420, 0x234eb: 0x6d136020, + 0x234ed: 0x6d2d5020, 0x234ef: 0x6d129420, + 0x234f0: 0x6c2e4c20, 0x234f1: 0x6c00ee20, + 0x234f4: 0x6c680620, 0x234f7: 0x6cda6220, + 0x234f9: 0x6c581c20, 0x234fa: 0x6d246020, + 0x234fd: 0x6cc50a20, + // Block 0x8d4, offset 0x23500 + 0x23500: 0x6c2cfa20, 0x23501: 0x6d413e20, 0x23502: 0x6c047420, + 0x23504: 0x6cbd5a20, 0x23507: 0x6c633620, + 0x23509: 0x6cafcc20, + 0x2350c: 0x6ce7ec20, + 0x23510: 0x6c1da220, + 0x23515: 0x6c4af020, + 0x23520: 0x6c5ee620, + 0x23528: 0x6d096420, 0x2352a: 0x6c2d6020, + 0x2352d: 0x6c0bac20, 0x2352e: 0x6d291c20, 0x2352f: 0x6ce76820, + 0x23536: 0x6ccd5820, + 0x23538: 0x6c482620, 0x23539: 0x6cc3ec20, + // Block 0x8d5, offset 0x23540 + 0x23540: 0x6c47cc20, + 0x23548: 0x6c55b220, 0x23549: 0x6c7b0420, + 0x2354c: 0x6c46d820, 0x2354e: 0x6cdb3220, + 0x23550: 0x6c1df620, 0x23552: 0x6c795c20, + 0x23554: 0x6c317e20, + 0x23559: 0x6d190a20, + 0x2355c: 0x6c2a4220, 0x2355d: 0x6cbaf820, + 0x23563: 0x6c900220, + 0x23565: 0x6c84cc20, 0x23567: 0x6c87a020, + 0x23568: 0x6cbe6420, 0x2356a: 0x6ceed420, + 0x2356c: 0x6ca1bc20, + 0x23571: 0x6cb74420, 0x23573: 0x6c67a020, + 0x23574: 0x6d008c20, + 0x23579: 0x6c277820, 0x2357b: 0x6c90a420, + // Block 0x8d6, offset 0x23580 + 0x23582: 0x6c497620, + 0x23586: 0x6cadc820, + 0x23589: 0x6cafce20, 0x2358b: 0x6c735420, + 0x2358d: 0x6c06aa20, 0x2358e: 0x6c747c20, 0x2358f: 0x6c738420, + 0x23590: 0x6cd3b420, + 0x23595: 0x6d014a20, + 0x23598: 0x6cc8a820, 0x23599: 0x6c6ec220, 0x2359a: 0x6cb3be20, 0x2359b: 0x6cc9f420, + 0x235a0: 0x6c5e7a20, + 0x235a9: 0x6c3b1820, 0x235aa: 0x6c06e820, 0x235ab: 0x6c6bc220, + 0x235ac: 0x6cc94020, 0x235ae: 0x6caf3e20, + 0x235b4: 0x6c2c2220, 0x235b5: 0x6c98c820, 0x235b6: 0x6c03ec20, 0x235b7: 0x6c03ee20, + 0x235b8: 0x6ce57820, 0x235b9: 0x6c8cba20, 0x235ba: 0x6cd0f020, 0x235bb: 0x6d31c220, + 0x235bc: 0x6caf4620, 0x235bd: 0x6cf4c620, 0x235bf: 0x6d2b4220, + // Block 0x8d7, offset 0x235c0 + 0x235c0: 0x6c063a20, + 0x235c7: 0x6c938020, + 0x235d6: 0x6c4fa020, 0x235d7: 0x6c30e020, + 0x235d8: 0x6c3e0e20, 0x235d9: 0x6ca5c420, + 0x235dd: 0x6c43de20, + 0x235e0: 0x6cc79820, 0x235e1: 0x6cfbfc20, + 0x235e4: 0x6c096020, + 0x235ee: 0x6c98d220, + 0x235f2: 0x6cc70a20, 0x235f3: 0x6cc04c20, + 0x235f7: 0x6c0ee820, + 0x235f9: 0x6c4fa620, 0x235fa: 0x6ca4ee20, 0x235fb: 0x6d0c8620, + // Block 0x8d8, offset 0x23600 + 0x23603: 0x6cad5c20, + 0x23604: 0x6cdbc020, 0x23606: 0x6ceba220, + 0x23608: 0x6cc10a20, 0x23609: 0x6c83d620, 0x2360a: 0x6c2a7220, + 0x2360c: 0x6c6aca20, 0x2360d: 0x6c6acc20, 0x2360e: 0x6c4bc820, 0x2360f: 0x6c649c20, + 0x23610: 0x6c099e20, + 0x23620: 0x6cca5620, 0x23621: 0x6c053020, 0x23622: 0x6c214a20, + 0x23626: 0x6ca3c220, 0x23627: 0x6c054e20, + 0x2362a: 0x6cc68820, 0x2362b: 0x6c636c20, + 0x2362c: 0x6cd9c220, + 0x23630: 0x6c2a7420, + 0x2363e: 0x6cfaac20, 0x2363f: 0x6d2d8020, + // Block 0x8d9, offset 0x23640 + 0x23640: 0x6c999620, 0x23643: 0x6d3e5020, + 0x23645: 0x6c623c20, 0x23646: 0x6cb61c20, + 0x2364b: 0x6cc82420, + 0x2364c: 0x6cdd2c20, 0x2364d: 0x6cc71620, 0x2364e: 0x6cf50c20, 0x2364f: 0x6cc69620, + 0x23650: 0x6cc69820, + 0x2365a: 0x6cde7620, + 0x2365c: 0x6cd9d020, + 0x23664: 0x6c842c20, 0x23667: 0x6c24fc20, + 0x23668: 0x6d3fb020, 0x23669: 0x6c9ad220, 0x2366a: 0x6cf80820, + 0x2366c: 0x6c989e20, 0x2366d: 0x6ca86220, 0x2366f: 0x6cdbd220, + 0x23671: 0x6cadea20, + 0x23674: 0x6c0a2820, 0x23675: 0x6c2c9020, + 0x23678: 0x6cc1be20, 0x23679: 0x6cbbfa20, 0x2367b: 0x6c3b4420, + 0x2367c: 0x6cdb1620, + // Block 0x8da, offset 0x23680 + 0x23683: 0x6d05e620, + 0x23687: 0x6cc72420, + 0x23688: 0x6c5f3220, 0x2368b: 0x6cc1d620, + 0x2368c: 0x6c8b3820, + 0x23695: 0x6ccafe20, + 0x23698: 0x6c7dd620, 0x2369a: 0x6c257620, 0x2369b: 0x6d136c20, + 0x2369c: 0x6c0e3220, 0x2369e: 0x6c6b5c20, + 0x236a0: 0x6cc1e020, 0x236a1: 0x6cc1e220, + 0x236a5: 0x6c9b6e20, 0x236a6: 0x6cc49020, + 0x236a8: 0x6c0d5e20, 0x236a9: 0x6c178220, + 0x236ac: 0x6c31d420, + 0x236b6: 0x6cc4ec20, 0x236b7: 0x6cfb0220, + 0x236ba: 0x6ce25220, 0x236bb: 0x6cc20a20, + 0x236bc: 0x6ca8b420, 0x236bf: 0x6cd51c20, + // Block 0x8db, offset 0x236c0 + 0x236c0: 0x6c920220, 0x236c2: 0x6c7dda20, + 0x236c8: 0x6c9f3620, 0x236c9: 0x6c9f9e20, + 0x236cd: 0x6c287e20, + 0x236d0: 0x6d1b6820, 0x236d3: 0x6d001020, + 0x236d7: 0x6c618820, + 0x236dc: 0x6d19b220, + 0x236e6: 0x6c3b3820, 0x236e7: 0x6d383420, + 0x236eb: 0x6c47c020, + 0x236f1: 0x6c13c420, 0x236f3: 0x6c8e3c20, + 0x236f6: 0x6c102c20, + 0x236fa: 0x6cabae20, 0x236fb: 0x6cd87620, + 0x236fc: 0x6c29b820, 0x236fd: 0x6d31b020, + // Block 0x8dc, offset 0x23700 + 0x23700: 0x6cccb620, 0x23702: 0x6c1fbe20, + 0x23704: 0x6c6fa820, + 0x2370a: 0x6c787620, 0x2370b: 0x6c1af820, + 0x23711: 0x6c565c20, 0x23712: 0x6c858220, 0x23713: 0x6ccbc620, + 0x23716: 0x6cac1820, 0x23717: 0x6ceee220, + 0x23718: 0x6cf42620, + 0x2371c: 0x6d1c5420, + 0x23721: 0x6ccbc820, 0x23722: 0x6c2b1020, + 0x23725: 0x6c27b820, + 0x23731: 0x6ce83a20, 0x23732: 0x6c50ca20, 0x23733: 0x6cb34e20, + 0x23735: 0x6d34f620, 0x23736: 0x6ca98020, 0x23737: 0x6ca67e20, + 0x2373d: 0x6cc6f820, 0x2373e: 0x6c48ea20, + // Block 0x8dd, offset 0x23740 + 0x23740: 0x6d343e20, 0x23743: 0x6c5fe220, + 0x2375c: 0x6c392c20, 0x2375f: 0x6c6a8020, + 0x23760: 0x6c4d3820, + 0x23764: 0x6d2e4e20, 0x23766: 0x6cf86420, + 0x23769: 0x6d3e1220, + 0x2376c: 0x6cf76e20, 0x2376d: 0x6cb1ac20, + 0x23770: 0x6c078020, 0x23772: 0x6c657220, + // Block 0x8de, offset 0x23780 + 0x23793: 0x6c665c20, + 0x23796: 0x6d28ae20, + 0x2379e: 0x6c07ac20, 0x2379f: 0x6c995e20, + 0x237a2: 0x6d2a7620, 0x237a3: 0x6d3c3820, + 0x237a5: 0x6c7bbe20, + 0x237a8: 0x6c089e20, 0x237aa: 0x6cac2220, + 0x237bc: 0x6c996020, 0x237bd: 0x6ce09020, + // Block 0x8df, offset 0x237c0 + 0x237de: 0x6cea7a20, 0x237df: 0x6c95aa20, + 0x237e2: 0x6cdf9a20, + 0x237f1: 0x6c016a20, + 0x237f7: 0x6c4e0420, + 0x237f8: 0x6d3a0c20, 0x237fa: 0x6c34e820, 0x237fb: 0x6c34ea20, + 0x237fc: 0x6c421c20, + // Block 0x8e0, offset 0x23800 + 0x23806: 0x6cbf8c20, + 0x23808: 0x6cee1220, 0x2380a: 0x6ca10420, 0x2380b: 0x6d30f220, + 0x2380c: 0x6cf1d620, 0x2380d: 0x6d3c3a20, 0x2380f: 0x6c69fe20, + 0x23810: 0x6cad8e20, + 0x23818: 0x6cdaa820, + 0x2381d: 0x6c724020, + 0x23820: 0x6cb4ec20, 0x23821: 0x6c11f420, 0x23823: 0x6ce94a20, + 0x23824: 0x6ccbec20, 0x23826: 0x6ceb1620, + 0x23829: 0x6c579420, 0x2382b: 0x6d176220, + // Block 0x8e1, offset 0x23840 + 0x23860: 0x6c9f4820, 0x23861: 0x6d37b420, + 0x23865: 0x6cd77e20, + 0x23869: 0x6d176420, 0x2386a: 0x6cee1420, 0x2386b: 0x6c024220, + 0x23876: 0x6cda7820, + 0x2387e: 0x6c4b0020, 0x2387f: 0x6ceb8020, + // Block 0x8e2, offset 0x23880 + 0x23880: 0x6c5b5220, 0x23883: 0x6d06dc20, + 0x23884: 0x6d296c20, 0x23886: 0x6d3f1220, 0x23887: 0x6c0b9e20, + 0x23889: 0x6c26a620, 0x2388a: 0x6d19ca20, 0x2388b: 0x6cc35c20, + 0x2388e: 0x6c580e20, 0x2388f: 0x6ca2e020, + 0x23890: 0x6d28ba20, 0x23892: 0x6ce32620, + 0x23898: 0x6d14f820, 0x23899: 0x6cdfaa20, 0x2389a: 0x6ccf1820, 0x2389b: 0x6cd78220, + 0x2389d: 0x6d03e620, + 0x238a0: 0x6d1fce20, 0x238a3: 0x6c3b7620, + // Block 0x8e3, offset 0x238c0 + 0x238c7: 0x6c78b220, + 0x238cb: 0x6c3e7c20, + 0x238d2: 0x6c9fb220, + 0x238da: 0x6cb09820, + 0x238dc: 0x6c604220, 0x238dd: 0x6cbc4a20, 0x238de: 0x6d37fc20, 0x238df: 0x6c422820, + 0x238e0: 0x6d24f820, 0x238e1: 0x6c1b3620, + 0x238e5: 0x6cba5a20, 0x238e7: 0x6d424220, + 0x238e9: 0x6d00bc20, 0x238ea: 0x6c98ea20, + 0x238ec: 0x6c556e20, 0x238ee: 0x6cb0a420, 0x238ef: 0x6d0a9420, + 0x238f1: 0x6cf9d220, 0x238f2: 0x6ce34420, + 0x238f5: 0x6ca34e20, 0x238f6: 0x6c1fac20, + // Block 0x8e4, offset 0x23900 + 0x23900: 0x6cf45020, + 0x2392c: 0x6c599820, 0x2392d: 0x6d096620, 0x2392e: 0x6ce26620, + 0x23930: 0x6cbc4c20, 0x23933: 0x6c685020, + 0x2393c: 0x6c293020, 0x2393d: 0x6c044620, + // Block 0x8e5, offset 0x23940 + 0x2394d: 0x6c297620, 0x2394e: 0x6c79f820, + 0x23950: 0x6c70b220, 0x23951: 0x6ccc0a20, 0x23952: 0x6c6dc820, + 0x23955: 0x6ca06c20, 0x23956: 0x6caa0220, + 0x23958: 0x6cd78e20, 0x2395a: 0x6cd5f820, 0x2395b: 0x6d3c2020, + 0x2395c: 0x6c3ec220, 0x2395f: 0x6d29de20, + 0x23960: 0x6d00cc20, 0x23961: 0x6c812820, 0x23962: 0x6ce70420, + 0x23969: 0x6d306e20, + 0x2396c: 0x6c11fe20, 0x2396e: 0x6d26cc20, + 0x23971: 0x6d393620, + // Block 0x8e6, offset 0x23980 + 0x2399a: 0x6cdfb420, + 0x2399e: 0x6d0cb420, 0x2399f: 0x6c928820, + 0x239a0: 0x6d0db620, + 0x239a6: 0x6d2ae020, 0x239a7: 0x6cd66c20, + // Block 0x8e7, offset 0x239c0 + 0x239c5: 0x6c4c3620, 0x239c6: 0x6d3a2020, + 0x239c8: 0x6cc7bc20, 0x239c9: 0x6cc7be20, + 0x239cc: 0x6c76e620, 0x239cd: 0x6c626220, 0x239ce: 0x6c42da20, + 0x239d2: 0x6d01fa20, + 0x239d5: 0x6caba220, 0x239d6: 0x6c64d420, + 0x239da: 0x6d349220, 0x239db: 0x6d2c4820, + 0x239dd: 0x6c53a820, 0x239df: 0x6c7b7020, + 0x239e1: 0x6c0f4420, + 0x239e4: 0x6ccb4820, 0x239e5: 0x6c01cc20, 0x239e6: 0x6c66b820, + 0x239e8: 0x6ce2ac20, 0x239eb: 0x6cd93420, + 0x239ed: 0x6c9c0c20, 0x239ee: 0x6d1a9420, 0x239ef: 0x6cdfb620, + 0x239f0: 0x6c4c3820, 0x239f3: 0x6cc84620, + 0x239f4: 0x6cf0ba20, 0x239f7: 0x6cd8de20, + // Block 0x8e8, offset 0x23a00 + 0x23a24: 0x6cb7c220, 0x23a26: 0x6d2f0a20, + // Block 0x8e9, offset 0x23a40 + 0x23a45: 0x6c304020, 0x23a46: 0x6c3eee20, 0x23a47: 0x6cd07620, + 0x23a48: 0x6cdb1a20, 0x23a49: 0x6d18a020, 0x23a4a: 0x6c891820, + 0x23a4c: 0x6c516e20, 0x23a4e: 0x6d319420, + 0x23a50: 0x6d2afe20, 0x23a52: 0x6c250c20, 0x23a53: 0x6c250e20, + 0x23a5d: 0x6c3cf220, 0x23a5e: 0x6c853220, 0x23a5f: 0x6c7a0220, + 0x23a63: 0x6d000620, + 0x23a64: 0x6d1fee20, + // Block 0x8ea, offset 0x23a80 + 0x23a83: 0x6c4fea20, + 0x23a89: 0x6c4f0620, 0x23a8a: 0x6c790c20, + 0x23a9d: 0x6d23ec20, + 0x23aa3: 0x6c58e220, + 0x23aa4: 0x6cdd3e20, 0x23aa6: 0x6c7e9c20, + 0x23aa8: 0x6c313c20, 0x23aa9: 0x6c66de20, 0x23aaa: 0x6cb32020, 0x23aab: 0x6c0b5420, + 0x23ab0: 0x6d097420, 0x23ab2: 0x6c0bc820, + 0x23ab7: 0x6cf0e620, + // Block 0x8eb, offset 0x23ac0 + 0x23ae1: 0x6c28d620, 0x23ae2: 0x6c6b5e20, 0x23ae3: 0x6c046020, + 0x23ae5: 0x6ca74420, 0x23ae6: 0x6cfd2620, 0x23ae7: 0x6ccb7620, + 0x23aea: 0x6c576420, 0x23aeb: 0x6c1fa420, + 0x23aee: 0x6caba620, 0x23aef: 0x6c8b5020, + 0x23af0: 0x6c2ba420, 0x23af1: 0x6c114e20, 0x23af3: 0x6d2c5e20, + 0x23af5: 0x6c936820, + 0x23af9: 0x6c5e1420, + 0x23afc: 0x6c86ce20, 0x23afd: 0x6d1d1620, 0x23aff: 0x6cf03a20, + // Block 0x8ec, offset 0x23b00 + 0x23b00: 0x6c0a8c20, 0x23b01: 0x6c4c9620, 0x23b03: 0x6cb0ce20, + 0x23b06: 0x6c0c3a20, + 0x23b20: 0x6d0dea20, + 0x23b24: 0x6d3bee20, + 0x23b32: 0x6c539420, + 0x23b36: 0x6c8c7820, 0x23b37: 0x6c36ce20, + 0x23b39: 0x6d1b1820, 0x23b3a: 0x6c808020, + 0x23b3c: 0x6d123820, 0x23b3f: 0x6d08c820, + // Block 0x8ed, offset 0x23b40 + 0x23b40: 0x6c86fa20, + 0x23b68: 0x6c808420, 0x23b69: 0x6c8d9020, 0x23b6a: 0x6cf73820, 0x23b6b: 0x6c52de20, + 0x23b6d: 0x6c696a20, 0x23b6e: 0x6d3dd220, + 0x23b72: 0x6d34b620, + 0x23b75: 0x6c0fb820, 0x23b76: 0x6ce29620, 0x23b77: 0x6c019820, + 0x23b7a: 0x6d0a5220, 0x23b7b: 0x6c82fa20, + 0x23b7c: 0x6d29ec20, 0x23b7d: 0x6c5b7c20, + // Block 0x8ee, offset 0x23b80 + 0x23b8e: 0x6cf92620, 0x23b8f: 0x6c539820, + 0x23b91: 0x6c397820, 0x23b92: 0x6c662420, 0x23b93: 0x6c23c820, + 0x23b94: 0x6d28da20, 0x23b96: 0x6c10e020, + 0x23b98: 0x6d1ece20, 0x23b9b: 0x6c338820, + 0x23b9c: 0x6cac4e20, + 0x23ba5: 0x6cdede20, 0x23ba7: 0x6cacc420, + 0x23bab: 0x6c386e20, + 0x23bac: 0x6cf74620, + 0x23bb6: 0x6d124c20, 0x23bb7: 0x6c957620, + 0x23bba: 0x6c0b2220, + 0x23bbc: 0x6c6d7420, 0x23bbd: 0x6c876a20, + // Block 0x8ef, offset 0x23bc0 + 0x23bca: 0x6d0f0a20, 0x23bcb: 0x6c315020, + 0x23bce: 0x6c981620, + 0x23bd0: 0x6c45ca20, 0x23bd1: 0x6cc51420, 0x23bd2: 0x6c121220, + 0x23be3: 0x6c9ae420, + 0x23bf1: 0x6c47fc20, 0x23bf2: 0x6cd69e20, + 0x23bf8: 0x6d0d2020, 0x23bf9: 0x6c0adc20, + // Block 0x8f0, offset 0x23c00 + 0x23c00: 0x6c0c6a20, 0x23c01: 0x6c1a6220, 0x23c02: 0x6c7ce620, + 0x23c04: 0x6c5d8820, + 0x23c0d: 0x6c1be620, 0x23c0f: 0x6cf2d020, + 0x23c11: 0x6c23e820, 0x23c12: 0x6d357a20, + 0x23c19: 0x6cd70820, + 0x23c1c: 0x6c48a220, 0x23c1d: 0x6cb40020, 0x23c1e: 0x6d068620, 0x23c1f: 0x6cd7d020, + 0x23c21: 0x6cf42e20, + 0x23c2e: 0x6c3d4020, + 0x23c30: 0x6cd31e20, 0x23c33: 0x6c5b9220, + 0x23c34: 0x6c597c20, 0x23c35: 0x6cabb620, + 0x23c3c: 0x6d3a5e20, 0x23c3e: 0x6d14a220, + // Block 0x8f1, offset 0x23c40 + 0x23c43: 0x6c85a820, + 0x23c44: 0x6ccd3420, + 0x23c5c: 0x6c9f3820, 0x23c5e: 0x6c437c20, + 0x23c60: 0x6c54b020, + 0x23c6f: 0x6c371220, + 0x23c70: 0x6c380e20, 0x23c73: 0x6d06aa20, + 0x23c74: 0x6d14ca20, + 0x23c7e: 0x6d1d3620, + // Block 0x8f2, offset 0x23c80 + 0x23c94: 0x6c1b1820, + 0x23c99: 0x6d14cc20, + 0x23ca5: 0x6c2b6a20, 0x23ca6: 0x6c5b5020, 0x23ca7: 0x6c510c20, + 0x23ca9: 0x6d2c7a20, + 0x23cb6: 0x6d27a420, 0x23cb7: 0x6cfa9c20, + // Block 0x8f3, offset 0x23cc0 + 0x23ccc: 0x6cfb4c20, 0x23ccd: 0x6c81d220, 0x23cce: 0x6cced420, 0x23ccf: 0x6cd36820, + 0x23cd0: 0x6d3d5220, + 0x23ce4: 0x6c0ca820, 0x23ce5: 0x6c6fc020, 0x23ce6: 0x6cf29220, 0x23ce7: 0x6c68f820, + 0x23ce8: 0x6c3e7e20, 0x23cea: 0x6cfd7620, 0x23ceb: 0x6c768a20, + // Block 0x8f4, offset 0x23d00 + 0x23d32: 0x6ca4fe20, + 0x23d34: 0x6c5ddc20, 0x23d35: 0x6c605620, 0x23d36: 0x6c7e7e20, + 0x23d3b: 0x6c3d1220, + 0x23d3c: 0x6ccd4c20, 0x23d3d: 0x6c8a9c20, 0x23d3e: 0x6c9ee020, 0x23d3f: 0x6c182620, + // Block 0x8f5, offset 0x23d40 + 0x23d42: 0x6ca05e20, + 0x23d4f: 0x6c909820, + 0x23d68: 0x6c34f620, 0x23d6b: 0x6ca50020, + 0x23d6d: 0x6c5ee820, + 0x23d70: 0x6d3b0820, + // Block 0x8f6, offset 0x23d80 + 0x23d82: 0x6cdad220, 0x23d83: 0x6c34f820, + 0x23d87: 0x6c6f2820, + 0x23d8a: 0x6d291e20, 0x23d8b: 0x6c5b5c20, + 0x23d8c: 0x6d1cfe20, 0x23d8d: 0x6c557a20, 0x23d8e: 0x6c8c5820, 0x23d8f: 0x6cf25820, + 0x23d90: 0x6c4ee820, + 0x23d94: 0x6ca40620, + 0x23db7: 0x6cf8b020, + 0x23db9: 0x6c422c20, + 0x23dbe: 0x6c51d420, 0x23dbf: 0x6c5f0820, + // Block 0x8f7, offset 0x23dc0 + 0x23dc0: 0x6cfdf020, 0x23dc1: 0x6ccc0c20, + 0x23dd0: 0x6cea0c20, 0x23dd2: 0x6d2f6c20, 0x23dd3: 0x6cd60420, + 0x23dd5: 0x6d1fe820, 0x23dd6: 0x6c64d820, + 0x23ddc: 0x6d2a8c20, + 0x23de4: 0x6d2ed820, + 0x23dfd: 0x6cc92c20, + // Block 0x8f8, offset 0x23e00 + 0x23e04: 0x6d0c2420, + 0x23e0b: 0x6c255a20, + 0x23e17: 0x6c608a20, + 0x23e18: 0x6cce1a20, + 0x23e23: 0x6c36a820, + 0x23e24: 0x6c817420, 0x23e25: 0x6ce07820, 0x23e27: 0x6d3b2820, + 0x23e2d: 0x6c8c3620, 0x23e2f: 0x6d2b9220, + 0x23e31: 0x6c732a20, 0x23e32: 0x6c550220, + // Block 0x8f9, offset 0x23e40 + 0x23e57: 0x6cd07820, + 0x23e58: 0x6c5dfa20, + 0x23e5c: 0x6c7d2020, + 0x23e71: 0x6c1f7620, 0x23e72: 0x6d395020, + 0x23e76: 0x6c023020, + 0x23e78: 0x6d3db220, + 0x23e7d: 0x6d03a420, 0x23e7f: 0x6c9ef420, + // Block 0x8fa, offset 0x23e80 + 0x23e80: 0x6c550c20, + 0x23e94: 0x6ce01a20, + 0x23e99: 0x6c0a7220, + 0x23ea3: 0x6c2f8420, + 0x23ea9: 0x6c769820, 0x23eab: 0x6c0c3c20, + 0x23eb0: 0x6c5e1620, 0x23eb1: 0x6c8b5220, 0x23eb2: 0x6c24b820, + // Block 0x8fb, offset 0x23ec0 + 0x23ec3: 0x6cfd2820, + 0x23ec4: 0x6cc55620, + 0x23ed3: 0x6d270220, + 0x23ed5: 0x6d09be20, 0x23ed7: 0x6c8a8020, + 0x23ee3: 0x6ccc2a20, + 0x23ee6: 0x6cd3fc20, + 0x23eea: 0x6d025c20, + 0x23ef3: 0x6cff4a20, + 0x23ef7: 0x6d129620, + 0x23ef8: 0x6c805020, 0x23ef9: 0x6d192e20, + 0x23eff: 0x6c88da20, + // Block 0x8fc, offset 0x23f00 + 0x23f14: 0x6c0fba20, 0x23f15: 0x6c126e20, + 0x23f1d: 0x6d124220, + 0x23f26: 0x6c893620, + 0x23f3b: 0x6cdef020, + // Block 0x8fd, offset 0x23f40 + 0x23f51: 0x6c62ec20, + 0x23f54: 0x6cf75220, 0x23f55: 0x6d377020, + 0x23f5a: 0x6cf75620, + 0x23f5d: 0x6d273220, + 0x23f64: 0x6cfc6c20, 0x23f66: 0x6d3df820, + 0x23f6f: 0x6d2ef820, + 0x23f75: 0x6d410620, 0x23f77: 0x6ca2ce20, + 0x23f7e: 0x6c2a0420, 0x23f7f: 0x6c8ad620, + // Block 0x8fe, offset 0x23f80 + 0x23f80: 0x6ca2d220, + 0x23f89: 0x6cad5420, 0x23f8b: 0x6c721620, + 0x23f96: 0x6c95b220, + 0x23f99: 0x6cd64820, 0x23f9a: 0x6cce5420, + 0x23f9d: 0x6c95b420, 0x23f9f: 0x6c3b3a20, + 0x23fa3: 0x6c065820, + 0x23fa8: 0x6c865820, 0x23fab: 0x6d04a220, + 0x23fb6: 0x6c290820, + // Block 0x8ff, offset 0x23fc0 + 0x23fc0: 0x6c1a8c20, + 0x23fc4: 0x6d2f1420, 0x23fc7: 0x6cda3a20, + 0x23fca: 0x6cd03e20, + 0x23fd2: 0x6c447220, + 0x23fd8: 0x6d209020, 0x23fda: 0x6c5ad420, 0x23fdb: 0x6c183e20, + 0x23fdd: 0x6c698420, 0x23fde: 0x6d3ac420, 0x23fdf: 0x6cd4b220, + 0x23fe2: 0x6cff8420, + 0x23fe6: 0x6ca91420, + 0x23fed: 0x6c674420, 0x23fef: 0x6c674820, + 0x23ff7: 0x6c2e0e20, + 0x23ffd: 0x6cbb0c20, 0x23ffe: 0x6cc04e20, + // Block 0x900, offset 0x24000 + 0x24000: 0x6c3c4020, + 0x24006: 0x6d2e6620, 0x24007: 0x6c77fa20, + 0x24012: 0x6c2ece20, 0x24013: 0x6d2aec20, + 0x24016: 0x6c49f820, 0x24017: 0x6ccb5c20, + 0x24018: 0x6c3bea20, 0x2401b: 0x6c67bc20, + 0x2401d: 0x6d0cd820, 0x2401e: 0x6d370820, + 0x24022: 0x6c872220, + 0x24026: 0x6c8ddc20, + 0x2402a: 0x6d146420, + 0x2402c: 0x6cc23e20, 0x2402d: 0x6cac5220, 0x2402e: 0x6c463a20, + 0x24030: 0x6c640220, 0x24031: 0x6c50da20, 0x24033: 0x6caf0c20, + 0x24035: 0x6c721820, 0x24037: 0x6c180620, + 0x2403a: 0x6c8af220, 0x2403b: 0x6cd35220, + 0x2403c: 0x6cb37a20, 0x2403d: 0x6cfe2820, 0x2403f: 0x6cb08e20, + // Block 0x901, offset 0x24040 + 0x24040: 0x6c95ae20, 0x24041: 0x6c243420, 0x24043: 0x6d225020, + 0x24047: 0x6c79a820, + 0x24048: 0x6d01b020, + 0x2404d: 0x6ced1e20, 0x2404e: 0x6d0d8e20, 0x2404f: 0x6cadd820, + 0x24053: 0x6c1a0620, + 0x24058: 0x6ce34620, 0x24059: 0x6c182820, 0x2405a: 0x6c09ce20, 0x2405b: 0x6c890820, + 0x2405c: 0x6c641e20, 0x2405e: 0x6ce68220, + 0x24062: 0x6ce2f620, + 0x24068: 0x6c2edc20, 0x2406a: 0x6cd60620, 0x2406b: 0x6c842e20, + 0x2406c: 0x6c936020, 0x2406d: 0x6cf97420, 0x2406f: 0x6c24e420, + 0x24073: 0x6c0e9220, + 0x24074: 0x6ce9ba20, 0x24075: 0x6cb45020, 0x24077: 0x6c8c6220, + 0x24078: 0x6c3bec20, 0x2407a: 0x6c0f7620, 0x2407b: 0x6c163620, + 0x2407e: 0x6c290a20, 0x2407f: 0x6cdf5820, + // Block 0x902, offset 0x24080 + 0x24080: 0x6c2a3c20, 0x24083: 0x6c872420, + 0x24085: 0x6d0b1220, 0x24086: 0x6d0b1820, 0x24087: 0x6d2d6620, + 0x2408a: 0x6d14e220, + 0x2408c: 0x6cb4fa20, + 0x24094: 0x6c564420, 0x24096: 0x6ce62a20, + 0x24098: 0x6c79cc20, 0x2409b: 0x6c213220, + 0x2409c: 0x6d1f0020, 0x2409d: 0x6c3bd020, 0x2409f: 0x6caab220, + 0x240a0: 0x6ce53020, 0x240a1: 0x6c6cde20, 0x240a2: 0x6cafbc20, 0x240a3: 0x6c18a420, + 0x240a4: 0x6cb08820, 0x240a6: 0x6c6bc420, 0x240a7: 0x6c4ac820, + 0x240b2: 0x6d3c3220, + 0x240b5: 0x6c552420, 0x240b6: 0x6c1e2420, 0x240b7: 0x6cd5a020, + 0x240b8: 0x6ce1b420, 0x240b9: 0x6cafc620, 0x240ba: 0x6cc70020, 0x240bb: 0x6cc70220, + 0x240bd: 0x6c544e20, 0x240be: 0x6cae5a20, + // Block 0x903, offset 0x240c0 + 0x240c5: 0x6c043e20, 0x240c7: 0x6cf99a20, + 0x240cb: 0x6cbdcc20, + 0x240cc: 0x6ca63220, 0x240ce: 0x6ce1b620, 0x240cf: 0x6cc26a20, + 0x240d2: 0x6d008e20, + 0x240d4: 0x6d2fa820, 0x240d5: 0x6c570e20, 0x240d6: 0x6d02c820, + 0x240d8: 0x6cd42e20, 0x240db: 0x6ce8a620, + 0x240dd: 0x6c895020, 0x240de: 0x6c097c20, 0x240df: 0x6c1e5a20, + 0x240e1: 0x6d037020, 0x240e3: 0x6d02cc20, + 0x240e4: 0x6c3d6820, + 0x240e9: 0x6c6bde20, + 0x240ed: 0x6c3f5e20, + 0x240f0: 0x6ce27a20, 0x240f1: 0x6ccf4c20, + 0x240f4: 0x6c174620, 0x240f5: 0x6c20b820, + 0x240fc: 0x6cc47a20, 0x240fd: 0x6c545620, 0x240fe: 0x6c07ec20, + // Block 0x904, offset 0x24100 + 0x24100: 0x6c113020, + 0x24105: 0x6ca21420, + 0x24109: 0x6d059e20, 0x2410a: 0x6c2eaa20, + 0x2410d: 0x6c15c220, 0x2410e: 0x6d215c20, 0x2410f: 0x6d383620, + 0x24113: 0x6c83e620, + 0x24114: 0x6cd43420, + 0x2411a: 0x6c31a420, + 0x2411c: 0x6c98bc20, 0x2411d: 0x6c59d420, 0x2411f: 0x6ce22c20, + 0x24121: 0x6c326620, 0x24122: 0x6ce34820, 0x24123: 0x6cd10820, + 0x24124: 0x6c9a0e20, + 0x24128: 0x6d316820, 0x24129: 0x6cbd9020, 0x2412a: 0x6cb0ae20, 0x2412b: 0x6ce11620, + 0x2412c: 0x6c123820, 0x2412d: 0x6d112420, 0x2412f: 0x6d054620, + 0x24130: 0x6c053620, 0x24131: 0x6c47b220, + 0x24135: 0x6c10aa20, + 0x2413c: 0x6c46c620, 0x2413d: 0x6c0f2e20, + // Block 0x905, offset 0x24140 + 0x24141: 0x6cf21020, + 0x24144: 0x6c624420, + 0x2414a: 0x6c7e4c20, + 0x2414d: 0x6c24e620, 0x2414e: 0x6c9fc820, 0x2414f: 0x6c242820, + 0x24150: 0x6cab4e20, 0x24151: 0x6d1da620, + 0x24156: 0x6c98fe20, 0x24157: 0x6c78c820, + 0x24158: 0x6c981e20, 0x24159: 0x6c2f8020, 0x2415a: 0x6c582e20, 0x2415b: 0x6c34ac20, + 0x2415c: 0x6c677420, 0x2415d: 0x6cdb0220, + 0x24162: 0x6c135c20, 0x24163: 0x6cde9e20, + 0x24165: 0x6c59f820, 0x24166: 0x6c74be20, 0x24167: 0x6d0a4020, + 0x2416a: 0x6d04a620, + 0x2416c: 0x6c9d8820, 0x2416d: 0x6cc45620, 0x2416e: 0x6c817620, + 0x24171: 0x6d370a20, 0x24172: 0x6cf02820, + 0x24177: 0x6ccb6e20, + 0x2417b: 0x6d29ea20, + // Block 0x906, offset 0x24180 + 0x24181: 0x6c019620, 0x24182: 0x6cf10c20, + 0x24184: 0x6c581e20, 0x24187: 0x6d2e9e20, + 0x24189: 0x6d1c2c20, 0x2418a: 0x6c43bc20, 0x2418b: 0x6c5c9220, + 0x2418d: 0x6cc33420, + 0x24193: 0x6c8b7c20, + 0x24194: 0x6c719a20, 0x24195: 0x6c03de20, 0x24196: 0x6c82a620, + 0x24198: 0x6c97ac20, 0x24199: 0x6c8dde20, + 0x2419c: 0x6c856a20, 0x2419d: 0x6c611420, + 0x241a1: 0x6c5b1620, 0x241a2: 0x6d031820, 0x241a3: 0x6cd30020, + 0x241a4: 0x6d300e20, 0x241a7: 0x6c0e4820, + 0x241ab: 0x6c137a20, + 0x241af: 0x6c137e20, + 0x241b0: 0x6c6d8c20, 0x241b1: 0x6c031c20, 0x241b2: 0x6c06da20, + 0x241b5: 0x6d0e3c20, 0x241b7: 0x6c565e20, + 0x241b9: 0x6d20ba20, 0x241bb: 0x6c091e20, + 0x241bc: 0x6c1ff220, 0x241be: 0x6c612220, + // Block 0x907, offset 0x241c0 + 0x241c2: 0x6ca26c20, + 0x241c4: 0x6c98c420, 0x241c5: 0x6d379420, 0x241c7: 0x6d12c620, + 0x241c8: 0x6c30a020, 0x241c9: 0x6d12a420, + 0x241cd: 0x6cc63c20, 0x241ce: 0x6d19a620, + 0x241d0: 0x6c501e20, 0x241d2: 0x6ca31220, 0x241d3: 0x6ce61020, + 0x241d4: 0x6c3fb620, 0x241d5: 0x6ca22c20, 0x241d6: 0x6d291020, + 0x241d8: 0x6c552820, 0x241da: 0x6c185c20, 0x241db: 0x6ceaf420, + 0x241de: 0x6c1f1220, 0x241df: 0x6c3df820, + 0x241e7: 0x6c063420, + 0x241ec: 0x6c2bde20, 0x241ed: 0x6c111c20, 0x241ee: 0x6c921220, 0x241ef: 0x6cb35020, + 0x241f0: 0x6c268620, 0x241f1: 0x6d12da20, 0x241f3: 0x6d15d220, + 0x241f7: 0x6cfdb620, + 0x241f8: 0x6c086e20, 0x241f9: 0x6d398c20, 0x241fb: 0x6d14a620, + 0x241fd: 0x6c93d220, 0x241ff: 0x6c7b9420, + // Block 0x908, offset 0x24200 + 0x24202: 0x6d35a420, + 0x24207: 0x6cec0820, + 0x24208: 0x6c2b1c20, 0x24209: 0x6cd5b020, 0x2420a: 0x6c8ad820, 0x2420b: 0x6d2a4220, + 0x2420c: 0x6d35a620, 0x2420d: 0x6ca49e20, + 0x24217: 0x6c147220, + 0x2421a: 0x6cfea620, 0x2421b: 0x6d2a0220, + 0x2421e: 0x6d22f420, 0x2421f: 0x6c310620, + 0x24220: 0x6c143e20, 0x24221: 0x6d009020, 0x24222: 0x6d0fa220, + 0x24224: 0x6cfc0220, 0x24225: 0x6c05f220, + 0x2422e: 0x6d2cec20, + 0x24230: 0x6cc03420, 0x24232: 0x6c553420, 0x24233: 0x6d293220, + 0x24234: 0x6c741620, 0x24236: 0x6c4d9a20, + 0x2423f: 0x6c01ae20, + // Block 0x909, offset 0x24240 + 0x24240: 0x6d2a7820, 0x24243: 0x6ccc4c20, + 0x24245: 0x6cfcb220, 0x24246: 0x6c1b9e20, 0x24247: 0x6d0d6a20, + 0x24249: 0x6c01ba20, + 0x2424d: 0x6d305220, 0x2424e: 0x6c742c20, + 0x24251: 0x6c85ea20, 0x24253: 0x6c822020, + 0x24256: 0x6c112c20, + 0x24258: 0x6c924220, 0x2425a: 0x6c634c20, + 0x2425d: 0x6cfa3820, 0x2425e: 0x6cfff020, 0x2425f: 0x6d0c0c20, + 0x24260: 0x6d05a020, 0x24262: 0x6c33f020, 0x24263: 0x6d1c7620, + 0x24264: 0x6c5ab820, 0x24265: 0x6ce32820, 0x24266: 0x6caa0020, 0x24267: 0x6cf7e820, + 0x2426a: 0x6ce8b220, + 0x24277: 0x6cec5620, + 0x24278: 0x6c186620, + 0x2427c: 0x6c52aa20, 0x2427e: 0x6ce32a20, 0x2427f: 0x6d07a020, + // Block 0x90a, offset 0x24280 + 0x24280: 0x6d28bc20, + 0x24287: 0x6c43f020, + 0x2428b: 0x6c908c20, + 0x2428c: 0x6c147c20, 0x2428d: 0x6cac6020, 0x2428e: 0x6c605820, + 0x24290: 0x6cde5e20, 0x24293: 0x6cf64e20, + 0x24296: 0x6cfeda20, + 0x24298: 0x6ccab620, 0x24299: 0x6c637020, 0x2429a: 0x6cdad420, 0x2429b: 0x6c599a20, + 0x2429d: 0x6c25bc20, 0x2429f: 0x6cde6020, + 0x242a0: 0x6cd65420, + 0x242aa: 0x6c3e9a20, 0x242ab: 0x6c863620, + 0x242ad: 0x6ccf5a20, 0x242af: 0x6ce10620, + 0x242b6: 0x6c2cd020, + 0x242ba: 0x6c09fa20, + 0x242bc: 0x6c46c820, 0x242bd: 0x6c244620, 0x242bf: 0x6cb90820, + // Block 0x90b, offset 0x242c0 + 0x242c2: 0x6c824620, 0x242c3: 0x6cdaea20, + 0x242c6: 0x6d402420, 0x242c7: 0x6c4faa20, + 0x242cf: 0x6c1c4420, + 0x242d0: 0x6c128020, 0x242d3: 0x6cf30420, + 0x242d4: 0x6cfef220, 0x242d5: 0x6c8b2020, 0x242d6: 0x6d0c1e20, + 0x242dd: 0x6c09fc20, 0x242df: 0x6c594220, + 0x242e1: 0x6cf67820, 0x242e2: 0x6c1ac820, 0x242e3: 0x6d05d620, + 0x242e4: 0x6ca4bc20, 0x242e5: 0x6d0cc020, 0x242e7: 0x6d01fc20, + 0x242e8: 0x6d2c4a20, 0x242ea: 0x6cdc5e20, + 0x242ec: 0x6cf8ca20, 0x242ed: 0x6c080620, 0x242ee: 0x6cc48420, 0x242ef: 0x6cd79820, + 0x242f0: 0x6c049020, 0x242f1: 0x6c4b6a20, 0x242f2: 0x6c763c20, 0x242f3: 0x6c188020, + 0x242f6: 0x6d072820, + 0x242fe: 0x6c368620, 0x242ff: 0x6c865a20, + // Block 0x90c, offset 0x24300 + 0x24300: 0x6cf69e20, 0x24301: 0x6c594c20, 0x24302: 0x6cdb0420, + 0x24304: 0x6c16f620, + 0x2430a: 0x6c92a820, 0x2430b: 0x6d0cc220, + 0x2430e: 0x6c290620, 0x2430f: 0x6c284620, + 0x24310: 0x6d0f6a20, 0x24312: 0x6d2d3620, 0x24313: 0x6c729020, + 0x24315: 0x6c345e20, 0x24316: 0x6ccabe20, 0x24317: 0x6c7f2a20, + 0x24318: 0x6cdb1c20, + 0x2431f: 0x6d2b0020, + 0x24323: 0x6c0a5020, + 0x24326: 0x6d1b8c20, + 0x24328: 0x6c4fb420, 0x2432a: 0x6c8b3a20, + 0x2432d: 0x6c4ff620, 0x2432e: 0x6d0fdc20, + 0x24334: 0x6cd7a420, 0x24335: 0x6c00f020, 0x24336: 0x6cbf7420, + 0x24339: 0x6c82ec20, 0x2433a: 0x6d011220, + 0x2433c: 0x6cd3f220, + // Block 0x90d, offset 0x24340 + 0x24343: 0x6c91ec20, + 0x24345: 0x6cc41220, 0x24346: 0x6c888020, + 0x2434c: 0x6d001a20, 0x2434e: 0x6d1c2020, + 0x24351: 0x6d012620, + 0x24358: 0x6c8d9e20, 0x24359: 0x6d1ed620, + 0x2435e: 0x6c294020, 0x2435f: 0x6c806020, + 0x24360: 0x6cff5e20, + 0x24368: 0x6d182a20, + 0x2436c: 0x6cf34c20, 0x2436e: 0x6d168e20, 0x2436f: 0x6ceaa420, + 0x24370: 0x6c102e20, 0x24372: 0x6d032020, + 0x24375: 0x6cd7c420, 0x24376: 0x6c6c2a20, + 0x24378: 0x6c031e20, 0x24379: 0x6c383020, 0x2437b: 0x6ca0d420, + 0x2437c: 0x6cc91220, + // Block 0x90e, offset 0x24380 + 0x2438a: 0x6c26ea20, 0x2438b: 0x6c619820, + 0x24390: 0x6cda8820, 0x24391: 0x6cbf0620, 0x24392: 0x6c033020, + 0x243a6: 0x6ce48c20, 0x243a7: 0x6d1f0a20, + 0x243a9: 0x6ceb0020, 0x243ab: 0x6cec6c20, + 0x243ac: 0x6d202e20, 0x243ae: 0x6c2fe820, + 0x243b1: 0x6cf7d820, 0x243b2: 0x6c799820, + 0x243b6: 0x6cbf0c20, 0x243b7: 0x6c32f820, + 0x243b8: 0x6c34e420, 0x243ba: 0x6d173620, + // Block 0x90f, offset 0x243c0 + 0x243d2: 0x6cf5c820, 0x243d3: 0x6cbd2420, + 0x243d4: 0x6cda9220, 0x243d7: 0x6c8e5220, + 0x243d9: 0x6cecd820, + 0x243ed: 0x6c17da20, 0x243ee: 0x6d399a20, + 0x243f0: 0x6c997220, + 0x243f7: 0x6cc2de20, + 0x243fd: 0x6d208c20, 0x243ff: 0x6d17ac20, + // Block 0x910, offset 0x24400 + 0x24400: 0x6c9c5020, 0x24403: 0x6c7f0c20, + 0x24404: 0x6d362e20, + 0x24424: 0x6ca5e620, 0x24426: 0x6c048220, + 0x2442a: 0x6c300420, + 0x2442e: 0x6d363020, + // Block 0x911, offset 0x24440 + 0x24455: 0x6d17ec20, + 0x24458: 0x6c8d1e20, 0x24459: 0x6d216020, 0x2445a: 0x6c231e20, 0x2445b: 0x6c2c6a20, + 0x2445c: 0x6d365c20, + 0x24460: 0x6cc86820, 0x24463: 0x6c669a20, + 0x24469: 0x6ced8c20, 0x2446b: 0x6c6d2c20, + 0x2446d: 0x6cad0820, + // Block 0x912, offset 0x24480 + 0x2448d: 0x6c928a20, 0x2448e: 0x6cc1a620, + 0x24490: 0x6cf80020, 0x24491: 0x6c26b420, + 0x24496: 0x6c56c220, 0x24497: 0x6c95bc20, + 0x24499: 0x6c822820, + 0x244b6: 0x6c45f820, + 0x244bb: 0x6c8e2620, + // Block 0x913, offset 0x244c0 + 0x244c2: 0x6c817820, + 0x244c4: 0x6d3be420, + 0x244e8: 0x6d2a5220, 0x244e9: 0x6c506a20, 0x244ea: 0x6cfe5420, + 0x244ed: 0x6c507020, 0x244ee: 0x6c86a220, + 0x244f1: 0x6c2d8820, 0x244f2: 0x6c444020, + 0x244fd: 0x6c58a820, + // Block 0x914, offset 0x24500 + 0x24504: 0x6c36b620, 0x24506: 0x6cf9fe20, + 0x2450b: 0x6c651820, + 0x2450c: 0x6cb67420, 0x2450d: 0x6cfa0820, 0x2450e: 0x6d1ffa20, + 0x24521: 0x6d330420, + 0x2452a: 0x6d3bf220, + 0x2452e: 0x6c163a20, + // Block 0x915, offset 0x24540 + 0x24549: 0x6d027a20, + 0x24555: 0x6ca4d620, + 0x2455d: 0x6c62ee20, 0x2455e: 0x6ce4d620, + 0x24563: 0x6d0e3220, + 0x24567: 0x6c500c20, + 0x24568: 0x6d030820, 0x24569: 0x6c8de020, 0x2456b: 0x6c047620, + 0x2456c: 0x6c081220, + 0x24571: 0x6c463e20, 0x24572: 0x6c8cc820, + 0x24575: 0x6c7df420, 0x24576: 0x6cb85e20, 0x24577: 0x6c699e20, + 0x24579: 0x6c371420, 0x2457a: 0x6d10fa20, 0x2457b: 0x6c316e20, + // Block 0x916, offset 0x24580 + 0x24581: 0x6c5d9220, 0x24582: 0x6c322420, 0x24583: 0x6cadbe20, + 0x2458c: 0x6d259820, 0x2458f: 0x6c90b820, + 0x24590: 0x6d03f820, 0x24593: 0x6c883a20, + 0x24594: 0x6d113820, 0x24595: 0x6cf6a020, 0x24596: 0x6d114420, + 0x24598: 0x6cf70020, 0x2459b: 0x6c918a20, + 0x2459d: 0x6d0f0020, + 0x245a0: 0x6cc33820, + 0x245a5: 0x6cc50020, 0x245a6: 0x6cec2020, 0x245a7: 0x6d40a420, + 0x245a8: 0x6c392e20, 0x245a9: 0x6d16c620, 0x245aa: 0x6c323c20, 0x245ab: 0x6cdc2620, + 0x245ad: 0x6caf4820, 0x245af: 0x6c4de820, + 0x245b1: 0x6d069820, 0x245b3: 0x6c45e620, + 0x245b5: 0x6c2c2e20, 0x245b7: 0x6ca32620, + 0x245be: 0x6c34ec20, 0x245bf: 0x6cebda20, + // Block 0x917, offset 0x245c0 + 0x245c2: 0x6ca81820, + 0x245c8: 0x6c2e1a20, 0x245c9: 0x6c598e20, + 0x245cc: 0x6ce32c20, 0x245cd: 0x6c395420, + 0x245d1: 0x6cf3ca20, 0x245d2: 0x6c01fe20, + 0x245d4: 0x6cb2a820, + 0x245d9: 0x6c4e1420, 0x245db: 0x6c428820, + 0x245dc: 0x6c83e820, 0x245de: 0x6c339c20, 0x245df: 0x6c400e20, + 0x245e0: 0x6ca35020, 0x245e2: 0x6c132220, + 0x245e7: 0x6c6a2820, + 0x245e9: 0x6cbed020, 0x245eb: 0x6d1bd020, + 0x245ec: 0x6cfdd220, + 0x245f1: 0x6c557c20, + 0x245f4: 0x6cdaec20, + 0x245fb: 0x6c43a420, + 0x245fc: 0x6c368820, 0x245fd: 0x6d072a20, + // Block 0x918, offset 0x24600 + 0x24606: 0x6cf6cc20, + 0x2460a: 0x6c774c20, 0x2460b: 0x6c4c8a20, + 0x2460c: 0x6c6a3620, 0x2460d: 0x6c200c20, 0x2460e: 0x6c826220, 0x2460f: 0x6c527620, + 0x24610: 0x6d41f420, + 0x24615: 0x6cb1e620, + 0x24618: 0x6c2ab420, 0x24619: 0x6cf70220, 0x2461a: 0x6c826820, + 0x2461c: 0x6ccdc620, + 0x24627: 0x6c918c20, + 0x24629: 0x6c338a20, 0x2462a: 0x6c760420, + 0x2462d: 0x6c164820, 0x2462f: 0x6d012c20, + 0x24630: 0x6cec0220, 0x24631: 0x6d30c420, 0x24633: 0x6d3b9e20, + 0x24637: 0x6c8f6020, + 0x24638: 0x6c82aa20, + 0x2463c: 0x6c273620, 0x2463d: 0x6c417820, + // Block 0x919, offset 0x24640 + 0x24644: 0x6cd34020, 0x24647: 0x6d0da420, + 0x2464c: 0x6c41b420, + 0x24650: 0x6d0d0020, + 0x24656: 0x6cdbac20, + 0x2465a: 0x6d37a620, + 0x2465c: 0x6cd34220, + 0x24661: 0x6cd15c20, + 0x24665: 0x6c15ae20, + 0x24677: 0x6c5a0820, + 0x24678: 0x6d1b8e20, 0x2467b: 0x6c9bee20, + // Block 0x91a, offset 0x24680 + 0x24682: 0x6cc4f220, + 0x24685: 0x6cfdae20, + 0x24688: 0x6c071420, + 0x2468c: 0x6c200820, + 0x24691: 0x6cb47620, + 0x24699: 0x6c77d220, 0x2469a: 0x6c7e3820, + 0x2469d: 0x6cc35020, 0x2469f: 0x6c4f9220, + 0x246a0: 0x6c1bf220, 0x246a1: 0x6c983820, + 0x246a6: 0x6d2cb020, + 0x246aa: 0x6c3bd220, + 0x246ac: 0x6c17b420, + 0x246b3: 0x6c6e1820, + // Block 0x91b, offset 0x246c0 + 0x246c3: 0x6c8ada20, + 0x246c5: 0x6ca31c20, 0x246c6: 0x6ca31e20, 0x246c7: 0x6ce72a20, + 0x246cb: 0x6cc46620, + 0x246cc: 0x6d411620, 0x246cd: 0x6caf5420, 0x246ce: 0x6d1fba20, + 0x246d0: 0x6cd4be20, + 0x246db: 0x6c8af420, + 0x246dc: 0x6cd43020, 0x246dd: 0x6ce97e20, 0x246df: 0x6c430220, + 0x246e0: 0x6ccea220, 0x246e1: 0x6ceb0420, 0x246e3: 0x6ca3f220, + 0x246e7: 0x6ceb7a20, + 0x246e8: 0x6c458220, 0x246e9: 0x6c2e1c20, + 0x246f4: 0x6c9bd020, 0x246f5: 0x6c052820, 0x246f7: 0x6d00a420, + 0x246f8: 0x6cd8b420, 0x246f9: 0x6ce6c820, 0x246fa: 0x6c4b4220, + 0x246fd: 0x6c3e8020, 0x246fe: 0x6c4b4820, + // Block 0x91c, offset 0x24700 + 0x24709: 0x6c4b4a20, + 0x24711: 0x6d3a7420, 0x24713: 0x6c7f1420, + 0x24715: 0x6c951620, 0x24716: 0x6ce50020, 0x24717: 0x6cc4c620, + 0x2471a: 0x6c300820, + 0x24728: 0x6c737220, 0x24729: 0x6d0cac20, + 0x2472c: 0x6cc84020, 0x2472d: 0x6c283a20, + 0x24730: 0x6c999e20, + 0x24736: 0x6c944020, + 0x24738: 0x6d072c20, 0x2473a: 0x6cf6a220, + // Block 0x91d, offset 0x24740 + 0x24742: 0x6c967420, 0x24743: 0x6cb52220, + 0x24745: 0x6c144820, + 0x24748: 0x6cce1e20, 0x24749: 0x6c4f0820, 0x2474a: 0x6cb2ce20, + 0x2474e: 0x6c5f3820, + 0x24753: 0x6c86a620, + 0x24755: 0x6d240c20, 0x24756: 0x6c04a420, + 0x24758: 0x6ce29220, + 0x2475d: 0x6c1de820, + 0x24760: 0x6c1dea20, + 0x24764: 0x6cb54420, 0x24765: 0x6cf70420, 0x24766: 0x6c076820, + 0x2476a: 0x6d138020, + 0x2476d: 0x6c4a1020, 0x2476f: 0x6d3b3a20, + 0x24773: 0x6c827c20, + 0x24774: 0x6c827e20, 0x24775: 0x6c13be20, + // Block 0x91e, offset 0x24780 + 0x24780: 0x6c4a1420, + 0x2478d: 0x6c2f2420, + 0x24793: 0x6d0b4420, + 0x24798: 0x6ca7fc20, 0x24799: 0x6cd4de20, 0x2479b: 0x6d363220, + 0x2479f: 0x6d36e420, + 0x247a2: 0x6d36e620, 0x247a3: 0x6cb07620, + 0x247a5: 0x6c6f4e20, 0x247a6: 0x6c6f5220, 0x247a7: 0x6d169020, + 0x247a8: 0x6d201220, 0x247aa: 0x6c6f5420, + 0x247af: 0x6c58f220, + 0x247b1: 0x6c323e20, + 0x247bb: 0x6ce20c20, + 0x247bc: 0x6cbc9e20, 0x247bd: 0x6cbd5c20, 0x247be: 0x6d032420, 0x247bf: 0x6c14bc20, + // Block 0x91f, offset 0x247c0 + 0x247c0: 0x6c61ae20, 0x247c2: 0x6cbe0a20, + 0x247ca: 0x6c324620, 0x247cb: 0x6d33aa20, + 0x247ce: 0x6cab7820, + 0x247d0: 0x6cf4c820, 0x247d2: 0x6cf18620, + 0x247d8: 0x6c096620, 0x247db: 0x6c069420, + 0x247dd: 0x6ca23c20, 0x247de: 0x6c6cf420, 0x247df: 0x6ce21220, + 0x247e0: 0x6c89e220, + 0x247e5: 0x6c127220, 0x247e6: 0x6d2c2820, + 0x247ec: 0x6c1b8e20, 0x247ed: 0x6d0ae020, 0x247ee: 0x6c7c6420, 0x247ef: 0x6d1b4420, + 0x247f8: 0x6c8f8820, 0x247f9: 0x6cb86020, 0x247fb: 0x6c4f4c20, + 0x247fc: 0x6cce5020, 0x247fd: 0x6c4d6420, 0x247fe: 0x6c139220, + // Block 0x920, offset 0x24800 + 0x24800: 0x6c68e220, 0x24801: 0x6c81ae20, + 0x24808: 0x6cf5fa20, 0x2480b: 0x6c0ef220, + 0x24813: 0x6d351a20, + 0x24815: 0x6cea8a20, 0x24816: 0x6c3e8220, + 0x24818: 0x6c54ce20, 0x2481a: 0x6ca83220, 0x2481b: 0x6d17ae20, + 0x2481c: 0x6d3c4020, + 0x24820: 0x6c13e620, + 0x24824: 0x6cdb8220, 0x24827: 0x6d283620, + 0x2482e: 0x6c325e20, + 0x24830: 0x6cf61c20, 0x24831: 0x6c203620, 0x24832: 0x6d03e820, 0x24833: 0x6c68fa20, + 0x24834: 0x6ccfea20, + // Block 0x921, offset 0x24840 + 0x24840: 0x6cedca20, 0x24841: 0x6c06a220, 0x24842: 0x6c3a3a20, 0x24843: 0x6c669c20, + 0x24844: 0x6cc30020, 0x24845: 0x6d17f020, 0x24846: 0x6c300a20, 0x24847: 0x6d06f620, + 0x24848: 0x6ca35220, 0x24849: 0x6c605a20, + 0x2484c: 0x6d31e620, 0x2484d: 0x6cb5fa20, 0x2484e: 0x6c330a20, 0x2484f: 0x6d1a7220, + 0x24851: 0x6c700420, 0x24852: 0x6caffe20, 0x24853: 0x6d033e20, + 0x24854: 0x6c94fe20, 0x24855: 0x6c113420, 0x24856: 0x6c8e2020, 0x24857: 0x6c0cac20, + 0x24858: 0x6c2a1c20, 0x24859: 0x6c2a7620, + 0x2485f: 0x6c7ed820, + 0x24861: 0x6cf65020, 0x24862: 0x6c725620, + 0x24864: 0x6cff9020, 0x24866: 0x6c6dc020, + 0x24879: 0x6cec7220, 0x2487b: 0x6ca50a20, + 0x2487c: 0x6cfd8220, 0x2487d: 0x6cc3e220, 0x2487e: 0x6cbcd420, 0x2487f: 0x6ce86a20, + // Block 0x922, offset 0x24880 + 0x24880: 0x6d064a20, 0x24881: 0x6c5bfc20, + 0x24885: 0x6c9f6c20, 0x24886: 0x6ceff220, + 0x24888: 0x6d1f5620, 0x24889: 0x6ce9ae20, 0x2488a: 0x6c278020, + 0x2488e: 0x6c786c20, 0x2488f: 0x6ca36220, + 0x24891: 0x6c401c20, 0x24892: 0x6d239620, 0x24893: 0x6d354420, + 0x24895: 0x6c4dae20, 0x24896: 0x6c002e20, 0x24897: 0x6c401e20, + 0x248a1: 0x6d0f6220, + 0x248a4: 0x6cd27e20, 0x248a6: 0x6c150c20, + 0x248aa: 0x6c1c5c20, 0x248ab: 0x6d284820, + 0x248ac: 0x6cd65a20, 0x248ae: 0x6cdb0620, 0x248af: 0x6cca8620, + 0x248b1: 0x6c368a20, 0x248b2: 0x6d332e20, 0x248b3: 0x6c004e20, + 0x248b4: 0x6cdd8c20, 0x248b5: 0x6c10b220, 0x248b7: 0x6cc45220, + 0x248b8: 0x6d185e20, 0x248b9: 0x6d0dca20, 0x248bb: 0x6ca36620, + 0x248bc: 0x6cf46a20, + // Block 0x923, offset 0x248c0 + 0x248c7: 0x6c865c20, + 0x248c8: 0x6c865e20, 0x248ca: 0x6cf6a820, 0x248cb: 0x6c749c20, + 0x248cc: 0x6cd1ea20, 0x248ce: 0x6d0b5c20, + 0x248db: 0x6c18e420, + 0x248dc: 0x6d1c8c20, 0x248dd: 0x6c0a5220, 0x248de: 0x6c184020, + 0x248e1: 0x6d2bfc20, 0x248e2: 0x6ceb9020, 0x248e3: 0x6c56c620, + 0x248e4: 0x6ce2b220, 0x248e5: 0x6d1d4c20, 0x248e6: 0x6c08f820, 0x248e7: 0x6ca91e20, + 0x248e8: 0x6c891a20, 0x248e9: 0x6d034c20, 0x248ea: 0x6d229020, + 0x248f2: 0x6c075e20, + 0x248f4: 0x6ca07820, 0x248f5: 0x6c331420, 0x248f7: 0x6c29ea20, + 0x248f8: 0x6cb64c20, + // Block 0x924, offset 0x24900 + 0x24900: 0x6cd65c20, 0x24903: 0x6cff1e20, + 0x24904: 0x6d380a20, 0x24905: 0x6d3cb220, 0x24907: 0x6c0bca20, + 0x24909: 0x6cf02a20, 0x2490a: 0x6cf6ec20, + 0x2490c: 0x6c2aae20, 0x2490e: 0x6d005620, 0x2490f: 0x6cac4620, + 0x24910: 0x6ca87a20, 0x24913: 0x6c0cfa20, + 0x24914: 0x6ccf7a20, 0x24915: 0x6c3ad820, 0x24916: 0x6c9fcc20, 0x24917: 0x6cb7e820, + 0x2492a: 0x6ccdbc20, 0x2492b: 0x6cdd9c20, + 0x24937: 0x6c60c020, + 0x2493a: 0x6c285020, 0x2493b: 0x6c739c20, + 0x2493c: 0x6c930420, 0x2493e: 0x6c02f620, + // Block 0x925, offset 0x24940 + 0x24942: 0x6d18ea20, 0x24943: 0x6cd57a20, + 0x24944: 0x6cdc9c20, 0x24945: 0x6cf0f220, 0x24946: 0x6cecec20, 0x24947: 0x6c1ef420, + 0x2494c: 0x6cf32820, + 0x24956: 0x6c0aa420, + 0x24958: 0x6d1b1a20, 0x24959: 0x6c5d8220, + 0x2495c: 0x6c769c20, 0x2495d: 0x6ca93020, + 0x24962: 0x6c00fc20, + 0x24964: 0x6c870020, 0x24966: 0x6d2d0220, + 0x24971: 0x6c933020, + 0x24976: 0x6c0bd420, 0x24977: 0x6cac8a20, + 0x2497f: 0x6c4b9c20, + // Block 0x926, offset 0x24980 + 0x24980: 0x6cda6a20, 0x24981: 0x6c9ba020, 0x24982: 0x6cfc5220, 0x24983: 0x6c906e20, + 0x24985: 0x6cb80220, + 0x2498b: 0x6c164a20, + 0x2498c: 0x6d195c20, 0x2498d: 0x6c4f8e20, 0x2498f: 0x6c88e020, + 0x24990: 0x6c49c220, 0x24992: 0x6cf06020, + 0x24997: 0x6c752020, + 0x24998: 0x6c829c20, 0x24999: 0x6c946620, 0x2499a: 0x6c87a620, + 0x2499c: 0x6cb03e20, + 0x249a2: 0x6c58e820, + 0x249ae: 0x6c4a5820, + 0x249b3: 0x6c713420, + 0x249b6: 0x6c2aa220, + 0x249ba: 0x6c3ad220, + // Block 0x927, offset 0x249c0 + 0x249c1: 0x6d338e20, 0x249c3: 0x6c9a7a20, + 0x249c5: 0x6c58f420, + 0x249c9: 0x6cabba20, 0x249ca: 0x6c08c420, + 0x249cc: 0x6cb30020, + 0x249d3: 0x6c374220, + 0x249d5: 0x6c58fc20, + 0x249e3: 0x6c170c20, + 0x249e5: 0x6c95fc20, 0x249e6: 0x6c3d2820, + 0x249ef: 0x6c1db220, + 0x249f1: 0x6d40c020, 0x249f2: 0x6ca3fe20, 0x249f3: 0x6cffae20, + 0x249f9: 0x6c044820, 0x249fa: 0x6c926620, + 0x249fc: 0x6c961220, 0x249ff: 0x6ca76620, + // Block 0x928, offset 0x24a00 + 0x24a00: 0x6d2ad020, + 0x24a04: 0x6d3b0a20, 0x24a05: 0x6c557420, + 0x24a08: 0x6c5ad820, 0x24a09: 0x6ce17c20, 0x24a0a: 0x6c1dca20, + 0x24a11: 0x6c59e020, 0x24a12: 0x6c30b820, + 0x24a1b: 0x6c9eba20, + 0x24a1d: 0x6c0f5a20, + 0x24a20: 0x6c2ca420, 0x24a22: 0x6c2ad020, 0x24a23: 0x6cb41620, + 0x24a25: 0x6cd94020, 0x24a26: 0x6c1dec20, + 0x24a2b: 0x6d123c20, + 0x24a2c: 0x6c9bf020, 0x24a2d: 0x6c8fc820, + 0x24a32: 0x6c888220, + 0x24a35: 0x6c0d0620, + 0x24a3a: 0x6c93c220, + 0x24a3f: 0x6ccba020, + // Block 0x929, offset 0x24a40 + 0x24a40: 0x6d425820, + 0x24a44: 0x6c25aa20, 0x24a45: 0x6c8de420, 0x24a46: 0x6d331a20, 0x24a47: 0x6cb05220, + 0x24a48: 0x6c05c220, 0x24a4b: 0x6cc3a420, + 0x24a4e: 0x6caf4a20, 0x24a4f: 0x6ca44220, + 0x24a50: 0x6caf4c20, 0x24a51: 0x6c0fe220, 0x24a52: 0x6c06f020, 0x24a53: 0x6c37e820, + 0x24a55: 0x6c9fa620, 0x24a56: 0x6ca0f220, 0x24a57: 0x6cec2420, + 0x24a58: 0x6d2f6020, 0x24a59: 0x6d35c220, 0x24a5a: 0x6c240c20, + 0x24a5f: 0x6d0a0620, + 0x24a60: 0x6c602020, 0x24a61: 0x6c4b4420, 0x24a63: 0x6c19ea20, + 0x24a67: 0x6c4ec620, + 0x24a68: 0x6cfff220, 0x24a69: 0x6cc3c020, 0x24a6b: 0x6c21be20, + 0x24a6d: 0x6c3f6420, + 0x24a73: 0x6cbdde20, + 0x24a74: 0x6c926820, 0x24a75: 0x6cc3d020, 0x24a76: 0x6c2d1e20, 0x24a77: 0x6cb8f020, + 0x24a7c: 0x6c16ee20, 0x24a7d: 0x6cde6220, 0x24a7e: 0x6c06ae20, + // Block 0x92a, offset 0x24a80 + 0x24a81: 0x6c326c20, 0x24a82: 0x6c082620, 0x24a83: 0x6c547820, + 0x24a88: 0x6d2c8420, 0x24a89: 0x6d2c8620, + 0x24a8e: 0x6cc3ee20, 0x24a8f: 0x6c967620, + 0x24a90: 0x6c4e2c20, 0x24a93: 0x6c8e8620, + 0x24a94: 0x6c92d020, 0x24a96: 0x6d3e8c20, + 0x24a98: 0x6cb07020, 0x24a99: 0x6d395220, 0x24a9b: 0x6d2a2420, + 0x24a9d: 0x6ca9a020, + 0x24aa0: 0x6c5c5620, 0x24aa3: 0x6d092020, + 0x24aa5: 0x6c7ea020, + 0x24aab: 0x6caa0620, + 0x24aac: 0x6d0dfa20, 0x24aad: 0x6cc4d820, 0x24aae: 0x6ca52220, + 0x24ab0: 0x6c7eb420, 0x24ab1: 0x6c4a1220, 0x24ab2: 0x6c31e220, + 0x24ab5: 0x6c919020, + 0x24ab9: 0x6c663c20, 0x24aba: 0x6d028c20, 0x24abb: 0x6cb80e20, + 0x24abe: 0x6cfe7420, + // Block 0x92b, offset 0x24ac0 + 0x24ac1: 0x6c4cb020, 0x24ac2: 0x6c6a8420, 0x24ac3: 0x6c98b620, + 0x24ac6: 0x6cf95820, 0x24ac7: 0x6c7c3620, + 0x24ace: 0x6d1e7620, + 0x24ad0: 0x6c4d3c20, 0x24ad1: 0x6c9d3220, 0x24ad2: 0x6d11fc20, + 0x24ad5: 0x6cf14c20, + 0x24adf: 0x6c85f220, + 0x24ae0: 0x6c735820, 0x24ae1: 0x6cf36420, 0x24ae2: 0x6cbbda20, + 0x24aee: 0x6c2e2a20, 0x24aef: 0x6c1f4220, + 0x24af2: 0x6cdd1c20, + 0x24af5: 0x6c1cc420, + 0x24af8: 0x6cc2a020, 0x24af9: 0x6ccf5e20, + // Block 0x92c, offset 0x24b00 + 0x24b02: 0x6c9bd820, 0x24b03: 0x6c726820, + 0x24b0b: 0x6ce8e620, + 0x24b12: 0x6ca9c020, 0x24b13: 0x6ca07a20, + 0x24b19: 0x6c3bee20, + 0x24b22: 0x6c027020, 0x24b23: 0x6c4c3e20, + 0x24b24: 0x6c55b420, 0x24b25: 0x6c11b820, 0x24b26: 0x6c33b220, 0x24b27: 0x6c4d4820, + 0x24b28: 0x6c694e20, + 0x24b30: 0x6c473a20, + 0x24b35: 0x6c6c6020, + 0x24b38: 0x6d0fe420, + // Block 0x92d, offset 0x24b40 + 0x24b40: 0x6c145020, + 0x24b4c: 0x6c5b0820, + 0x24b54: 0x6cc20c20, 0x24b55: 0x6c784420, + 0x24b5f: 0x6cbe6620, + 0x24b60: 0x6d197a20, 0x24b63: 0x6c767a20, + 0x24b64: 0x6c68b820, 0x24b67: 0x6c1d6220, + 0x24b68: 0x6c103020, 0x24b69: 0x6c44ae20, 0x24b6a: 0x6c682620, 0x24b6b: 0x6d339020, + 0x24b6e: 0x6cf20020, + 0x24b70: 0x6c0d2220, + 0x24b74: 0x6d048820, 0x24b75: 0x6c393020, + 0x24b78: 0x6d147620, 0x24b79: 0x6c203020, 0x24b7a: 0x6d11ee20, + 0x24b7d: 0x6d0f4c20, 0x24b7e: 0x6c324020, 0x24b7f: 0x6d0d4a20, + // Block 0x92e, offset 0x24b80 + 0x24b81: 0x6c9b0a20, + 0x24b87: 0x6c1a9620, + 0x24b88: 0x6ca27420, 0x24b89: 0x6c683420, 0x24b8b: 0x6caa7a20, + 0x24b8d: 0x6c4c6420, 0x24b8e: 0x6d094a20, + 0x24b91: 0x6c3e1c20, 0x24b92: 0x6d08dc20, 0x24b93: 0x6c3d4c20, + 0x24b94: 0x6cae1020, 0x24b95: 0x6ca0ea20, 0x24b96: 0x6cf5a820, 0x24b97: 0x6cf2dc20, + 0x24b98: 0x6ccd3620, 0x24b9b: 0x6cf5aa20, + 0x24b9c: 0x6cb75a20, 0x24b9d: 0x6c9e5220, + 0x24ba6: 0x6c282820, + 0x24ba8: 0x6c1e2820, + 0x24bb1: 0x6c3a9c20, 0x24bb2: 0x6c9ec820, + 0x24bb4: 0x6d095020, 0x24bb5: 0x6d06ae20, 0x24bb6: 0x6cd7dc20, 0x24bb7: 0x6c71b220, + 0x24bb8: 0x6c993420, 0x24bb9: 0x6c063e20, 0x24bbb: 0x6d14d220, + 0x24bbc: 0x6c485020, 0x24bbd: 0x6ca69220, 0x24bbf: 0x6d14d420, + // Block 0x92f, offset 0x24bc0 + 0x24bc1: 0x6d429020, + 0x24bc4: 0x6caa5420, + 0x24bd1: 0x6c2d4820, 0x24bd2: 0x6c393c20, 0x24bd3: 0x6d173a20, + 0x24bd4: 0x6cd35a20, 0x24bd7: 0x6c240e20, + 0x24bd8: 0x6d31ce20, + 0x24bde: 0x6cd36a20, 0x24bdf: 0x6c68e620, + 0x24be0: 0x6c546a20, 0x24be1: 0x6c375020, + 0x24be6: 0x6c833220, 0x24be7: 0x6d095420, + 0x24be8: 0x6c452c20, 0x24bea: 0x6cd43220, + 0x24bec: 0x6c72ec20, + 0x24bf4: 0x6c6ab820, 0x24bf5: 0x6cef0020, 0x24bf7: 0x6cd44620, + 0x24bf8: 0x6c6e7620, 0x24bfa: 0x6d061c20, 0x24bfb: 0x6c1d4c20, + // Block 0x930, offset 0x24c00 + 0x24c05: 0x6c675e20, 0x24c06: 0x6ca20a20, + 0x24c09: 0x6d231a20, + 0x24c0c: 0x6c745220, + 0x24c11: 0x6ce6ea20, + 0x24c14: 0x6cfec420, 0x24c16: 0x6c30ac20, + 0x24c18: 0x6c4c6c20, 0x24c19: 0x6c986220, 0x24c1a: 0x6cedcc20, 0x24c1b: 0x6d06de20, + 0x24c1c: 0x6cee5420, 0x24c1d: 0x6cdd2020, 0x24c1e: 0x6c736620, 0x24c1f: 0x6d26b820, + 0x24c21: 0x6c4e1620, 0x24c23: 0x6ccfec20, + 0x24c25: 0x6d00ac20, 0x24c26: 0x6c8e5a20, 0x24c27: 0x6cc8f020, + 0x24c2f: 0x6c09a620, + 0x24c32: 0x6ca53220, + 0x24c36: 0x6ced8420, 0x24c37: 0x6c700020, + 0x24c38: 0x6cc38c20, + // Block 0x931, offset 0x24c40 + 0x24c44: 0x6ca6a220, 0x24c46: 0x6c9c5220, 0x24c47: 0x6cdd2220, + 0x24c49: 0x6cbb4020, + 0x24c4c: 0x6c4ed220, 0x24c4d: 0x6d3d6c20, 0x24c4e: 0x6c9c5e20, 0x24c4f: 0x6d06f820, + 0x24c51: 0x6c810420, 0x24c52: 0x6c6aee20, 0x24c53: 0x6c2faa20, + 0x24c54: 0x6c171820, 0x24c55: 0x6d365e20, 0x24c56: 0x6c3a0c20, 0x24c57: 0x6c63cc20, + 0x24c58: 0x6c75cc20, 0x24c59: 0x6c5dde20, 0x24c5a: 0x6cb4fe20, 0x24c5b: 0x6c70a620, + 0x24c5c: 0x6d3cd420, 0x24c5e: 0x6c2d6420, 0x24c5f: 0x6c690c20, + 0x24c60: 0x6d0af220, 0x24c62: 0x6d2dfa20, + 0x24c6d: 0x6d33f220, 0x24c6f: 0x6c973620, + 0x24c70: 0x6c54da20, 0x24c71: 0x6d01ca20, 0x24c72: 0x6cd27420, 0x24c73: 0x6c4a7220, + 0x24c7f: 0x6d06fa20, + // Block 0x932, offset 0x24c80 + 0x24c82: 0x6c606a20, + 0x24c84: 0x6c20b020, 0x24c86: 0x6c99a220, 0x24c87: 0x6cc84220, + 0x24c88: 0x6d05bc20, 0x24c89: 0x6c594620, 0x24c8a: 0x6ccc6420, 0x24c8b: 0x6c71c820, + 0x24c8f: 0x6c7c0020, + 0x24c91: 0x6c542020, 0x24c92: 0x6c491e20, 0x24c93: 0x6c486a20, + 0x24c95: 0x6c9c6420, 0x24c96: 0x6c2ed020, 0x24c97: 0x6c0a0020, + 0x24c98: 0x6c899820, 0x24c99: 0x6c7e8620, 0x24c9a: 0x6ccd5220, 0x24c9b: 0x6c928c20, + 0x24c9c: 0x6cf8b420, 0x24c9f: 0x6cda2220, + 0x24cac: 0x6cab4220, 0x24cae: 0x6c838020, + 0x24cb7: 0x6c7a5020, + 0x24cb8: 0x6c4a7c20, 0x24cbb: 0x6cf67a20, + 0x24cbc: 0x6cac6c20, 0x24cbd: 0x6ccb4c20, 0x24cbe: 0x6c754e20, 0x24cbf: 0x6c53d020, + // Block 0x933, offset 0x24cc0 + 0x24cc0: 0x6c49a220, 0x24cc1: 0x6c727c20, 0x24cc3: 0x6ca3d220, + 0x24cc4: 0x6c575020, 0x24cc5: 0x6c442220, 0x24cc6: 0x6c866020, 0x24cc7: 0x6c46d020, + 0x24cc8: 0x6ce41420, 0x24cca: 0x6c96d820, 0x24ccb: 0x6ce2ae20, + 0x24ccc: 0x6c26ba20, + 0x24cd0: 0x6cb52420, 0x24cd1: 0x6d23c620, 0x24cd2: 0x6c693020, 0x24cd3: 0x6c9ee620, + 0x24cd4: 0x6c451820, 0x24cd5: 0x6c9c0e20, 0x24cd6: 0x6cf0c020, + 0x24cd8: 0x6ce36620, 0x24cd9: 0x6cb63a20, + 0x24cdc: 0x6c18e620, 0x24cdd: 0x6c30c220, 0x24cdf: 0x6cac6e20, + 0x24cf0: 0x6c4efc20, + 0x24cf4: 0x6c9d8a20, 0x24cf5: 0x6c967820, 0x24cf6: 0x6c92d220, 0x24cf7: 0x6cb53020, + 0x24cf8: 0x6c795220, 0x24cfa: 0x6c2ee820, 0x24cfb: 0x6cb7d820, + 0x24cfc: 0x6c687c20, 0x24cfd: 0x6c774e20, 0x24cfe: 0x6cbbb020, 0x24cff: 0x6c9d8c20, + // Block 0x934, offset 0x24d00 + 0x24d00: 0x6ccd0c20, + 0x24d07: 0x6c64da20, + 0x24d08: 0x6c843c20, 0x24d09: 0x6c78d620, 0x24d0a: 0x6d073c20, + 0x24d11: 0x6c977a20, 0x24d12: 0x6c3cf420, 0x24d13: 0x6c163420, + 0x24d14: 0x6c5b6420, + 0x24d27: 0x6c7a0420, + 0x24d2a: 0x6cf02c20, 0x24d2b: 0x6c49a820, + 0x24d2c: 0x6c60c220, 0x24d2d: 0x6d421c20, 0x24d2e: 0x6c5e0a20, 0x24d2f: 0x6d00fe20, + 0x24d34: 0x6cdc8420, 0x24d36: 0x6cc88220, + 0x24d38: 0x6ce28620, + 0x24d3c: 0x6d336820, 0x24d3d: 0x6c7d8820, 0x24d3e: 0x6cfe0020, 0x24d3f: 0x6c9dda20, + // Block 0x935, offset 0x24d40 + 0x24d41: 0x6cf8f020, + 0x24d4c: 0x6cc94820, + 0x24d59: 0x6c36c620, 0x24d5a: 0x6c9efe20, 0x24d5b: 0x6d3a8820, + 0x24d5c: 0x6d406c20, 0x24d5d: 0x6c9bec20, 0x24d5f: 0x6cf70620, + 0x24d61: 0x6ce14e20, 0x24d63: 0x6c645220, + 0x24d64: 0x6c16d020, 0x24d65: 0x6c60dc20, + 0x24d6e: 0x6d3dbc20, + 0x24d7f: 0x6c520420, + // Block 0x936, offset 0x24d80 + 0x24d80: 0x6c141020, 0x24d81: 0x6cb7fc20, 0x24d82: 0x6c9dea20, 0x24d83: 0x6d320220, + 0x24d84: 0x6c7a6c20, 0x24d85: 0x6d138220, 0x24d86: 0x6d38c020, + 0x24d88: 0x6c652020, 0x24d8a: 0x6cacc220, + 0x24d8d: 0x6c5b0220, 0x24d8f: 0x6ca02220, + 0x24d90: 0x6c8f5020, + 0x24d98: 0x6cd73420, 0x24d9a: 0x6c974a20, 0x24d9b: 0x6c849c20, + 0x24d9e: 0x6cd7ae20, 0x24d9f: 0x6d159020, + 0x24da4: 0x6c872c20, + 0x24da8: 0x6d005e20, 0x24da9: 0x6ce28a20, 0x24daa: 0x6d051020, + 0x24dad: 0x6d08ce20, 0x24dae: 0x6c874820, 0x24daf: 0x6c9ba220, + 0x24db0: 0x6cef6a20, 0x24db1: 0x6c9ba420, + 0x24dba: 0x6d124e20, 0x24dbb: 0x6c7ffe20, + 0x24dbc: 0x6c8da020, 0x24dbd: 0x6d1c3820, 0x24dbe: 0x6d1c3a20, 0x24dbf: 0x6c876c20, + // Block 0x937, offset 0x24dc0 + 0x24dc0: 0x6c662820, 0x24dc1: 0x6c4aaa20, + 0x24dc5: 0x6c494020, 0x24dc6: 0x6d028220, + 0x24dc9: 0x6ccf9220, 0x24dcb: 0x6d418420, + 0x24dd3: 0x6c771e20, + 0x24dd4: 0x6c82a820, + 0x24dda: 0x6c0bde20, + 0x24ddd: 0x6cd54e20, 0x24dde: 0x6caa7820, 0x24ddf: 0x6d069a20, + 0x24de3: 0x6c503020, + 0x24de8: 0x6c4af220, 0x24dea: 0x6d2d4020, 0x24deb: 0x6c80c620, + 0x24dec: 0x6c248e20, 0x24ded: 0x6d363620, 0x24dee: 0x6c3ca820, 0x24def: 0x6cbd3220, + 0x24df1: 0x6d2acc20, 0x24df2: 0x6ca35420, 0x24df3: 0x6ca99a20, + 0x24df4: 0x6d17f420, 0x24df7: 0x6c232c20, + 0x24df8: 0x6cd1e020, 0x24df9: 0x6c65c220, 0x24dfa: 0x6d3fa420, 0x24dfb: 0x6d0db820, + 0x24dfc: 0x6d1bd620, + // Block 0x938, offset 0x24e00 + 0x24e00: 0x6cc86e20, 0x24e02: 0x6cc6a420, 0x24e03: 0x6cf8cc20, + 0x24e05: 0x6c492420, 0x24e06: 0x6c769420, + 0x24e08: 0x6cf51420, 0x24e0a: 0x6cbda820, 0x24e0b: 0x6c235820, + 0x24e0d: 0x6d2b0620, 0x24e0e: 0x6d024220, + 0x24e10: 0x6d241020, 0x24e11: 0x6d29a020, 0x24e12: 0x6c206620, 0x24e13: 0x6c853c20, + 0x24e14: 0x6c853e20, 0x24e15: 0x6d075020, 0x24e16: 0x6c9c9020, 0x24e17: 0x6d075420, + 0x24e18: 0x6cc88c20, 0x24e1b: 0x6c4b9420, + 0x24e1c: 0x6cc73020, 0x24e1f: 0x6c991420, + 0x24e21: 0x6cbdbe20, 0x24e22: 0x6c24be20, 0x24e23: 0x6c24c020, + 0x24e24: 0x6c24c620, + 0x24e2e: 0x6cf35a20, + 0x24e30: 0x6c383220, 0x24e31: 0x6c037620, + 0x24e38: 0x6cb85820, 0x24e39: 0x6d35ee20, 0x24e3a: 0x6ce5d420, + // Block 0x939, offset 0x24e40 + 0x24e44: 0x6d35f020, 0x24e45: 0x6d345a20, 0x24e47: 0x6c591420, + 0x24e48: 0x6c1da420, 0x24e4a: 0x6d35f220, + 0x24e4e: 0x6d1cf020, + 0x24e52: 0x6cf4f020, 0x24e53: 0x6c06a420, + 0x24e55: 0x6c534c20, 0x24e56: 0x6cd06420, + 0x24e58: 0x6c746620, 0x24e59: 0x6c7d0420, + 0x24e5c: 0x6d15f820, 0x24e5d: 0x6d0bbe20, + 0x24e60: 0x6c087c20, + 0x24e64: 0x6c7aea20, 0x24e65: 0x6cb8f220, + 0x24e68: 0x6d2f6620, 0x24e6a: 0x6c766820, 0x24e6b: 0x6cce1220, + 0x24e6e: 0x6c01ca20, 0x24e6f: 0x6d307020, + 0x24e70: 0x6d369420, + 0x24e77: 0x6d36b620, + 0x24e79: 0x6c693220, + // Block 0x93a, offset 0x24e80 + 0x24e80: 0x6cd83020, 0x24e81: 0x6cb45c20, 0x24e82: 0x6cab9420, + 0x24e8a: 0x6d3dbe20, + 0x24e91: 0x6d1c3c20, 0x24e93: 0x6c584a20, + 0x24e95: 0x6d0b6e20, + 0x24e98: 0x6cd23c20, 0x24e99: 0x6cabb220, 0x24e9a: 0x6cb48420, + 0x24e9e: 0x6c983c20, 0x24e9f: 0x6c146220, + 0x24ea9: 0x6d278e20, + 0x24eac: 0x6c476a20, + 0x24eb9: 0x6c282a20, 0x24ebb: 0x6ca4a020, + 0x24ebd: 0x6d302620, 0x24ebf: 0x6c552c20, + // Block 0x93b, offset 0x24ec0 + 0x24ec5: 0x6c792c20, 0x24ec7: 0x6c2e8c20, + 0x24ec8: 0x6ce63c20, 0x24ecb: 0x6c48ee20, + 0x24ece: 0x6cbef020, 0x24ecf: 0x6cd2ca20, + 0x24ed0: 0x6c640c20, 0x24ed1: 0x6c02ca20, 0x24ed2: 0x6ca2f620, 0x24ed3: 0x6cb23a20, + 0x24ed4: 0x6c63b220, + 0x24ee1: 0x6d30ec20, 0x24ee2: 0x6c108620, 0x24ee3: 0x6cf2b020, + 0x24ee5: 0x6c141e20, + 0x24eea: 0x6ca4a420, 0x24eeb: 0x6c76c620, + 0x24eef: 0x6c319220, + 0x24ef0: 0x6c48f020, 0x24ef1: 0x6cbf0e20, 0x24ef3: 0x6cc66a20, + 0x24ef4: 0x6d15e820, 0x24ef5: 0x6c32fe20, 0x24ef6: 0x6c82c020, + 0x24ef8: 0x6d387a20, 0x24ef9: 0x6c7ac220, 0x24efa: 0x6c354020, 0x24efb: 0x6cfa9e20, + 0x24efc: 0x6c2d5420, 0x24efd: 0x6caaf020, 0x24efe: 0x6c361620, 0x24eff: 0x6d1d8620, + // Block 0x93c, offset 0x24f00 + 0x24f00: 0x6cf4e220, 0x24f01: 0x6c793a20, + 0x24f13: 0x6d35f420, + 0x24f17: 0x6d351c20, + 0x24f18: 0x6d0a0820, 0x24f1b: 0x6d334a20, + 0x24f1e: 0x6d0fae20, + 0x24f20: 0x6c5dc420, 0x24f21: 0x6c602220, 0x24f22: 0x6ca4f020, + 0x24f27: 0x6d0ba020, + 0x24f28: 0x6c924620, 0x24f2b: 0x6c3d7220, + 0x24f2c: 0x6cca1c20, 0x24f2d: 0x6c1f4420, 0x24f2e: 0x6cefca20, + 0x24f30: 0x6c3f6820, 0x24f31: 0x6c794020, 0x24f32: 0x6cd8c020, 0x24f33: 0x6c778620, + 0x24f35: 0x6d17b020, 0x24f36: 0x6c579a20, + 0x24f3e: 0x6d225e20, + // Block 0x93d, offset 0x24f40 + 0x24f43: 0x6c861420, + 0x24f46: 0x6c8c2020, 0x24f47: 0x6c321e20, + 0x24f48: 0x6c363c20, + 0x24f4c: 0x6cbb4220, 0x24f4d: 0x6c31a620, + 0x24f50: 0x6c6af020, 0x24f51: 0x6c21c620, 0x24f52: 0x6cfcd420, + 0x24f56: 0x6c430a20, + 0x24f6c: 0x6c2a1e20, + 0x24f70: 0x6c52b420, + 0x24f7b: 0x6d3fa620, + 0x24f7e: 0x6cb7b620, 0x24f7f: 0x6ceb3820, + // Block 0x93e, offset 0x24f80 + 0x24f80: 0x6c52b820, 0x24f81: 0x6cb06420, 0x24f82: 0x6c453c20, + 0x24f84: 0x6ca85020, 0x24f87: 0x6c798420, + 0x24f8a: 0x6d354620, + 0x24f91: 0x6cffb420, + 0x24fa1: 0x6ccf6620, 0x24fa2: 0x6d217620, 0x24fa3: 0x6c676a20, + 0x24fa9: 0x6cb70a20, 0x24faa: 0x6c190a20, 0x24fab: 0x6cca8220, + 0x24fad: 0x6cdd8e20, 0x24fae: 0x6cb9bc20, 0x24faf: 0x6c5c1a20, + 0x24fb1: 0x6ccda020, 0x24fb2: 0x6c368c20, + 0x24fbb: 0x6cbfbc20, + 0x24fbd: 0x6c78ca20, + // Block 0x93f, offset 0x24fc0 + 0x24fc0: 0x6cf23420, 0x24fc1: 0x6d3e7c20, 0x24fc2: 0x6c608e20, + 0x24fc7: 0x6c26e220, + 0x24fc9: 0x6c263620, + 0x24fcd: 0x6c90f620, 0x24fce: 0x6c775020, 0x24fcf: 0x6c7e1220, + 0x24fd0: 0x6c2b8e20, 0x24fd1: 0x6cbc7e20, 0x24fd3: 0x6ca16420, + 0x24fd6: 0x6c4cce20, 0x24fd7: 0x6c52c620, + 0x24fd8: 0x6c177c20, 0x24fd9: 0x6c522620, + 0x24fe2: 0x6c129020, 0x24fe3: 0x6d308c20, + 0x24fe6: 0x6c4bea20, + 0x24ff0: 0x6d05ec20, 0x24ff1: 0x6caece20, 0x24ff2: 0x6c74ca20, + 0x24ff5: 0x6c41ee20, 0x24ff6: 0x6cd83220, + 0x24ff8: 0x6cdc8620, 0x24ff9: 0x6cc40420, 0x24ffb: 0x6cf3f220, + 0x24ffc: 0x6d0cda20, 0x24ffd: 0x6caf1820, 0x24ffe: 0x6cffc420, 0x24fff: 0x6cac4820, + // Block 0x940, offset 0x25000 + 0x2500d: 0x6c7e9e20, + 0x25017: 0x6c085a20, + 0x25018: 0x6d320020, 0x25019: 0x6c60de20, + 0x2501c: 0x6c6cc020, 0x2501d: 0x6c887420, 0x2501e: 0x6c791220, + 0x25020: 0x6d38d620, + 0x25028: 0x6d2a9620, 0x2502a: 0x6c822e20, 0x2502b: 0x6cb54820, + 0x2502c: 0x6c0e3820, + 0x25035: 0x6d1b1c20, 0x25036: 0x6cb1f620, + 0x2503b: 0x6cda3820, + 0x2503c: 0x6c941620, 0x2503e: 0x6c2bb420, 0x2503f: 0x6c31e420, + // Block 0x941, offset 0x25040 + 0x25040: 0x6c8a8820, 0x25041: 0x6d3dd620, + 0x2504a: 0x6c16fc20, + 0x25052: 0x6c194020, 0x25053: 0x6cdee020, + 0x25059: 0x6cc41e20, 0x2505a: 0x6c2a4c20, + 0x2505d: 0x6cc51020, 0x2505f: 0x6cb3ba20, + 0x25066: 0x6d37e020, 0x25067: 0x6d006020, + 0x2506a: 0x6c679620, 0x2506b: 0x6cc21820, + 0x2506c: 0x6c831020, 0x2506d: 0x6c10f020, 0x2506e: 0x6cc39a20, + 0x25075: 0x6cfe7220, 0x25076: 0x6c836820, + 0x2507a: 0x6c809620, + 0x2507f: 0x6c7e6820, + // Block 0x942, offset 0x25080 + 0x25081: 0x6c7e6a20, + 0x25084: 0x6d24b420, + 0x2508a: 0x6c697e20, 0x2508b: 0x6cbd4e20, + 0x2508c: 0x6c5e7e20, 0x2508f: 0x6c41c820, + 0x25092: 0x6d169220, + 0x250a0: 0x6d16c820, 0x250a1: 0x6d339e20, + 0x250a4: 0x6c0c6e20, 0x250a5: 0x6cd0e620, 0x250a6: 0x6c6fd820, + 0x250ab: 0x6c509420, + 0x250ac: 0x6c3e2020, 0x250ae: 0x6c706620, + // Block 0x943, offset 0x250c0 + 0x250c0: 0x6d426620, 0x250c1: 0x6d14ac20, + 0x250c6: 0x6cfc9420, 0x250c7: 0x6d14ae20, + 0x250c9: 0x6cd8a220, 0x250cb: 0x6c20f220, + 0x250ce: 0x6ca0fa20, + 0x250e1: 0x6d2d6c20, 0x250e3: 0x6d0a0020, + 0x250e6: 0x6cc79a20, + 0x250e8: 0x6c5db020, + 0x250ec: 0x6cce6a20, + 0x250f0: 0x6cd46620, + 0x250fe: 0x6d203e20, 0x250ff: 0x6d231c20, + // Block 0x944, offset 0x25100 + 0x25102: 0x6c75b420, + 0x25109: 0x6d3e4220, 0x2510a: 0x6c925c20, + 0x2511a: 0x6c1baa20, 0x2511b: 0x6c7d6620, + 0x25120: 0x6d3ce420, + 0x25126: 0x6c541420, + 0x25129: 0x6d064420, + 0x2513e: 0x6d3f9c20, 0x2513f: 0x6d1d4220, + // Block 0x945, offset 0x25140 + 0x25142: 0x6d39b020, + 0x25145: 0x6c8f3a20, + 0x25151: 0x6caa6820, + 0x25158: 0x6c0a3020, 0x2515a: 0x6c1c5e20, + 0x2515c: 0x6d412420, 0x2515d: 0x6c3cb820, 0x2515e: 0x6c92aa20, 0x2515f: 0x6cb49220, + 0x25165: 0x6d3bdc20, 0x25167: 0x6d308020, + 0x25168: 0x6cd1ec20, 0x25169: 0x6d227e20, 0x2516a: 0x6c92ac20, 0x2516b: 0x6c896820, + 0x2516f: 0x6c74c020, + 0x25170: 0x6c8aa620, 0x25171: 0x6c080820, + // Block 0x946, offset 0x25180 + 0x25183: 0x6d18ce20, + 0x25184: 0x6c492820, + 0x2518c: 0x6c02ae20, 0x2518f: 0x6c4b8220, + 0x25190: 0x6c9fce20, 0x25192: 0x6d0dec20, 0x25193: 0x6c7fd220, + 0x25196: 0x6c0f9220, + 0x25199: 0x6d29a620, 0x2519a: 0x6d1ffe20, + 0x251a5: 0x6d194420, 0x251a6: 0x6ca66020, + 0x251ac: 0x6ca66620, 0x251ad: 0x6c4ce020, 0x251ae: 0x6c760a20, + 0x251b0: 0x6cd21820, 0x251b2: 0x6cfc5c20, + 0x251b4: 0x6cb95e20, 0x251b5: 0x6cc42020, 0x251b6: 0x6c7cc420, + // Block 0x947, offset 0x251c0 + 0x251c0: 0x6ccf1620, 0x251c2: 0x6c5dd620, + 0x251c4: 0x6ced8e20, + 0x251ca: 0x6c3af220, 0x251cb: 0x6c3b0020, + 0x251cd: 0x6d22c420, + 0x251d1: 0x6d339220, 0x251d2: 0x6c48a420, + 0x251d4: 0x6c6a8620, 0x251d5: 0x6c983e20, 0x251d6: 0x6c50cc20, + 0x251d8: 0x6d1fa820, + 0x251df: 0x6c324220, + 0x251e0: 0x6cd7d220, 0x251e2: 0x6c859420, + 0x251e5: 0x6c6a9420, 0x251e6: 0x6ca98a20, 0x251e7: 0x6c03ac20, + 0x251e8: 0x6d20de20, + 0x251ee: 0x6d33b220, + 0x251f8: 0x6c50e020, 0x251f9: 0x6c77e820, + 0x251fe: 0x6c324a20, 0x251ff: 0x6c634820, + // Block 0x948, offset 0x25200 + 0x25201: 0x6c186020, 0x25203: 0x6c20f420, + 0x25204: 0x6c50f820, 0x25205: 0x6d2d2620, + 0x2520a: 0x6c9a8c20, + 0x2520d: 0x6c50fa20, 0x2520e: 0x6d3f0420, 0x2520f: 0x6d3a0620, + 0x25212: 0x6ceb0e20, + 0x25218: 0x6d421820, 0x2521a: 0x6cc7a220, 0x2521b: 0x6c34ee20, + 0x2521c: 0x6c67e020, + 0x25227: 0x6c526420, + 0x25229: 0x6c07e620, 0x2522a: 0x6ca10820, + 0x2522f: 0x6d40ba20, + 0x25232: 0x6c0caa20, + 0x25234: 0x6c7a9820, 0x25235: 0x6c63c020, + 0x2523a: 0x6d3d0420, + 0x2523c: 0x6d04d620, + // Block 0x949, offset 0x25240 + 0x25243: 0x6c512820, + 0x25245: 0x6cbb7220, + 0x2524d: 0x6c3a5c20, 0x2524e: 0x6cd10a20, + 0x25252: 0x6d3c9620, 0x25253: 0x6c7b6a20, + 0x25254: 0x6d2b5420, 0x25255: 0x6cfaae20, 0x25257: 0x6c09d620, + 0x25258: 0x6d17f620, 0x2525a: 0x6c171a20, + 0x2526a: 0x6c999a20, + 0x25276: 0x6ced3020, + 0x2527d: 0x6cf37620, 0x2527e: 0x6c7a5220, 0x2527f: 0x6cf2be20, + // Block 0x94a, offset 0x25280 + 0x25280: 0x6d038a20, 0x25281: 0x6c781620, 0x25283: 0x6c6f8220, + 0x25284: 0x6c329c20, 0x25285: 0x6c594820, + 0x25288: 0x6d369620, 0x25289: 0x6c130620, 0x2528a: 0x6cc75a20, 0x2528b: 0x6c606e20, + 0x2528d: 0x6d131a20, + 0x2529b: 0x6c6dca20, + 0x2529c: 0x6d106220, + 0x252a1: 0x6d400220, + 0x252a9: 0x6c11d620, + 0x252b1: 0x6cd81c20, 0x252b2: 0x6c866220, 0x252b3: 0x6c47c620, + 0x252b4: 0x6c172220, 0x252b6: 0x6c3a6820, 0x252b7: 0x6c8e8a20, + 0x252b9: 0x6c6b1e20, 0x252ba: 0x6d276020, + 0x252bd: 0x6d36ba20, + // Block 0x94b, offset 0x252c0 + 0x252c0: 0x6c1dd220, 0x252c1: 0x6c0cbc20, + 0x252d2: 0x6c5f1a20, + 0x252dc: 0x6c955220, 0x252dd: 0x6c64f820, 0x252df: 0x6c206020, + 0x252e0: 0x6cd6de20, 0x252e2: 0x6c93fe20, 0x252e3: 0x6c75ea20, + 0x252e4: 0x6c69c820, 0x252e6: 0x6ce42020, 0x252e7: 0x6d2c0020, + 0x252ea: 0x6d18a820, + 0x252ec: 0x6c235a20, 0x252ed: 0x6ca57420, 0x252ee: 0x6c638220, + 0x252f4: 0x6c627c20, + 0x252fd: 0x6c00ce20, + // Block 0x94c, offset 0x25300 + 0x25307: 0x6c65d820, + 0x2530a: 0x6c07ca20, + 0x2530c: 0x6c38c620, 0x2530d: 0x6cdc8a20, 0x2530e: 0x6d421e20, + 0x25310: 0x6c42e420, 0x25311: 0x6c432420, 0x25312: 0x6c817e20, + 0x25314: 0x6d3db620, + 0x2531f: 0x6c56ca20, + 0x25322: 0x6ce9c420, + 0x25326: 0x6c0a7420, 0x25327: 0x6c716420, + 0x2532e: 0x6c575a20, + 0x25332: 0x6c1a4a20, + 0x25336: 0x6c7b4220, 0x25337: 0x6c291420, + 0x25338: 0x6c444c20, 0x25339: 0x6d011420, 0x2533b: 0x6c6b6220, + 0x2533d: 0x6c117620, + // Block 0x94d, offset 0x25340 + 0x25346: 0x6d40ec20, + 0x25348: 0x6cb46820, 0x2534b: 0x6cd57c20, + 0x2534c: 0x6c104820, + 0x25357: 0x6ca93220, + 0x25358: 0x6d0dfc20, 0x25359: 0x6d396020, 0x2535b: 0x6c9b8420, + 0x2535d: 0x6c0b5e20, 0x2535f: 0x6cfe6420, + 0x25364: 0x6c931c20, 0x25365: 0x6c849020, + 0x25369: 0x6c62ca20, 0x2536b: 0x6c9f0a20, + 0x2536c: 0x6c835620, 0x2536e: 0x6d375820, 0x2536f: 0x6d1ecc20, + 0x25370: 0x6c0b6020, + 0x25378: 0x6ca2bc20, 0x25379: 0x6cc4da20, + // Block 0x94e, offset 0x25380 + 0x25382: 0x6ca7c620, + 0x2538a: 0x6cc33a20, 0x2538b: 0x6d30c620, + 0x25390: 0x6c836620, + 0x25397: 0x6c294820, + 0x25398: 0x6c752e20, + 0x2539c: 0x6c8dc420, 0x2539e: 0x6c8de820, 0x2539f: 0x6d0d2620, + 0x253a3: 0x6d118620, + 0x253a4: 0x6d321220, 0x253a5: 0x6cb4ce20, 0x253a6: 0x6c008a20, + 0x253a8: 0x6caa3e20, 0x253a9: 0x6c988220, + 0x253b1: 0x6c76c220, 0x253b3: 0x6c6f5c20, + 0x253b4: 0x6d0d5820, 0x253b5: 0x6c9e5420, 0x253b7: 0x6d1a3e20, + 0x253b8: 0x6ceccc20, 0x253b9: 0x6d11f420, 0x253ba: 0x6cebce20, 0x253bb: 0x6cafc820, + 0x253bc: 0x6cdc2c20, + // Block 0x94f, offset 0x253c0 + 0x253c5: 0x6c799a20, + 0x253c8: 0x6c532c20, 0x253ca: 0x6ca03020, 0x253cb: 0x6c8cd220, + 0x253cc: 0x6d173e20, 0x253cd: 0x6ccfd220, 0x253cf: 0x6d429220, + 0x253db: 0x6ce85020, + 0x253dd: 0x6d1e7820, 0x253df: 0x6cec2620, + 0x253e0: 0x6c4af420, 0x253e1: 0x6c53bc20, + 0x253e5: 0x6cd36e20, 0x253e7: 0x6d049220, + 0x253e9: 0x6c000620, + 0x253f1: 0x6c19ee20, 0x253f3: 0x6c793c20, + 0x253f4: 0x6d176c20, 0x253f5: 0x6d104820, 0x253f6: 0x6ce67420, 0x253f7: 0x6c311e20, + 0x253f8: 0x6c13e820, 0x253f9: 0x6c8f3020, + 0x253fd: 0x6cc06a20, 0x253fe: 0x6d084e20, 0x253ff: 0x6ccfee20, + // Block 0x950, offset 0x25400 + 0x25400: 0x6c7b5420, 0x25401: 0x6ce7ca20, 0x25403: 0x6cba0e20, + 0x25405: 0x6c1e4220, + 0x2540a: 0x6cf1de20, + 0x2540c: 0x6c906820, 0x2540d: 0x6c018820, + 0x25414: 0x6c76d820, 0x25416: 0x6d11b020, + 0x25418: 0x6c3e8420, + 0x2541c: 0x6c084220, 0x2541d: 0x6c803020, 0x2541e: 0x6cb86c20, 0x2541f: 0x6c2d6620, + 0x25422: 0x6c69a620, 0x25423: 0x6c4a7420, + 0x25425: 0x6d049820, + 0x25428: 0x6c78bc20, + 0x25436: 0x6cfcd620, 0x25437: 0x6cf33a20, + // Block 0x951, offset 0x25440 + 0x25442: 0x6c45f620, + 0x25446: 0x6cab8620, 0x25447: 0x6c781820, + 0x2544b: 0x6c7a5420, + 0x25451: 0x6ce4be20, 0x25452: 0x6c46d420, 0x25453: 0x6c96a220, + 0x25455: 0x6c8f3e20, + 0x25459: 0x6cf0c220, 0x2545a: 0x6cf1ec20, + 0x25461: 0x6c462020, 0x25463: 0x6ce8e820, + 0x25464: 0x6ca91620, 0x25467: 0x6c9d7c20, + 0x2546b: 0x6c80e020, + 0x2546c: 0x6cba2220, 0x2546d: 0x6c977e20, 0x2546e: 0x6d308e20, + 0x25470: 0x6c57c620, 0x25471: 0x6d1db620, 0x25472: 0x6c6d5020, + 0x25474: 0x6c9aae20, 0x25477: 0x6c3ef020, + 0x2547b: 0x6cc1c220, + // Block 0x952, offset 0x25480 + 0x2548c: 0x6c8f4820, 0x2548d: 0x6c406220, 0x2548e: 0x6c28c620, + 0x25490: 0x6c460020, 0x25492: 0x6c256e20, + 0x25495: 0x6d040c20, + 0x2549c: 0x6ce87c20, 0x2549d: 0x6cd48020, + 0x254aa: 0x6cbf8420, + 0x254b3: 0x6cc6e020, + 0x254bb: 0x6c874c20, + 0x254bf: 0x6c5f9220, + // Block 0x953, offset 0x254c0 + 0x254c0: 0x6cebbc20, + 0x254cc: 0x6ce7aa20, + 0x254d2: 0x6ce04c20, + 0x254d4: 0x6c8dea20, 0x254d6: 0x6d169420, 0x254d7: 0x6cc85220, + 0x254d9: 0x6cabe220, + 0x254dd: 0x6c10e820, + 0x254e1: 0x6d269820, 0x254e2: 0x6cc3b020, 0x254e3: 0x6d3ade20, + 0x254e4: 0x6c4d6220, + 0x254f1: 0x6c381220, 0x254f2: 0x6c4d6820, + // Block 0x954, offset 0x25500 + 0x25500: 0x6c101620, 0x25501: 0x6cb25620, 0x25502: 0x6c8b0c20, + 0x2550a: 0x6c7cd420, 0x2550b: 0x6c3e9e20, + 0x2550c: 0x6ce50620, 0x2550d: 0x6cf2fc20, 0x2550f: 0x6c70aa20, + 0x25518: 0x6d318620, 0x2551a: 0x6c3ec620, + 0x25522: 0x6c8f9e20, + 0x25526: 0x6cf8ce20, 0x25527: 0x6ce4c020, + 0x2552b: 0x6c626620, + 0x2552f: 0x6d122c20, + 0x25531: 0x6c246620, + 0x25534: 0x6cad3020, 0x25535: 0x6cbce820, + 0x2553b: 0x6c8fb420, + 0x2553c: 0x6c615820, + // Block 0x955, offset 0x25540 + 0x25542: 0x6ce79a20, 0x25543: 0x6d158420, + 0x25545: 0x6c168420, + 0x2554b: 0x6c45c220, + 0x2554e: 0x6c309620, + 0x25556: 0x6cfda420, + 0x25559: 0x6ce6b620, 0x2555b: 0x6d3b7020, + 0x2555c: 0x6d15c820, 0x2555d: 0x6d170020, 0x2555e: 0x6d3ef820, 0x2555f: 0x6cb6e020, + 0x25562: 0x6c141a20, + 0x2556c: 0x6c33e220, 0x2556f: 0x6c1cbc20, + 0x25570: 0x6c922a20, 0x25571: 0x6c33ea20, 0x25573: 0x6c399220, + 0x25574: 0x6cd35c20, 0x25575: 0x6ce3e420, 0x25576: 0x6c5eaa20, 0x25577: 0x6cbfaa20, + 0x25578: 0x6cd70e20, 0x25579: 0x6c18b020, + 0x2557c: 0x6c5a6820, 0x2557d: 0x6cd41220, + // Block 0x956, offset 0x25580 + 0x25580: 0x6d279c20, + 0x25586: 0x6c8f8420, + 0x25588: 0x6c97b620, 0x25589: 0x6c464220, + 0x2558d: 0x6cfaa020, 0x2558e: 0x6ca10a20, + 0x25590: 0x6cd05e20, 0x25592: 0x6cb30820, 0x25593: 0x6d120420, + 0x25594: 0x6cc0fa20, 0x25595: 0x6cc4c020, + 0x25599: 0x6c724220, + 0x2559c: 0x6d1ada20, 0x2559d: 0x6c041020, 0x2559e: 0x6ca81c20, + 0x255a0: 0x6c1d6c20, + 0x255aa: 0x6cc67820, 0x255ab: 0x6c202020, + 0x255ac: 0x6ca83420, 0x255ad: 0x6c861620, 0x255ae: 0x6c676220, 0x255af: 0x6c77ac20, + 0x255b0: 0x6c12f020, 0x255b1: 0x6c1d5220, 0x255b2: 0x6d3b5620, 0x255b3: 0x6d3f1420, + 0x255b4: 0x6d0fb820, + 0x255bc: 0x6cf1e020, + // Block 0x957, offset 0x255c0 + 0x255cb: 0x6c620420, + 0x255cc: 0x6c620620, + 0x255d0: 0x6c93e820, 0x255d1: 0x6cc07820, 0x255d2: 0x6c33fc20, 0x255d3: 0x6c05cc20, + 0x255d4: 0x6c14ce20, 0x255d6: 0x6c0f1620, + 0x255d8: 0x6c1abe20, 0x255d9: 0x6d30fa20, 0x255da: 0x6c98b820, + 0x255dc: 0x6c621c20, 0x255dd: 0x6c9eb620, 0x255de: 0x6d262620, + 0x255e0: 0x6cf3d220, 0x255e1: 0x6d366420, 0x255e2: 0x6cb25c20, + 0x255e5: 0x6c1ccc20, + 0x255eb: 0x6c9c6020, + 0x255ec: 0x6c3a3c20, 0x255ed: 0x6c25c020, 0x255ee: 0x6c9b2420, + // Block 0x958, offset 0x25600 + 0x2560d: 0x6d1a8220, 0x2560e: 0x6c989a20, 0x2560f: 0x6c2d2420, + 0x25610: 0x6c2dd620, 0x25612: 0x6cb9b420, + 0x25615: 0x6c4f9820, 0x25616: 0x6d348620, 0x25617: 0x6c713e20, + 0x25618: 0x6ca76820, + 0x2561c: 0x6c9c6620, 0x2561d: 0x6c47b620, + 0x25623: 0x6d3b5820, + 0x25624: 0x6ca85220, 0x25625: 0x6d3d8420, 0x25627: 0x6d131c20, + 0x25628: 0x6c23dc20, 0x2562a: 0x6d05be20, + 0x2562c: 0x6cf8b820, 0x2562f: 0x6c0e8420, + 0x2563e: 0x6c11d820, + // Block 0x959, offset 0x25640 + 0x25643: 0x6d0dba20, + 0x25651: 0x6c6cb220, + 0x25654: 0x6c71ce20, 0x25655: 0x6c298620, 0x25656: 0x6c327620, + 0x25658: 0x6d128c20, 0x25659: 0x6c6ea020, 0x2565a: 0x6c78cc20, 0x2565b: 0x6c962220, + 0x2565c: 0x6cf00220, 0x2565d: 0x6ce87620, 0x2565e: 0x6d1f6020, 0x2565f: 0x6cac3020, + 0x25661: 0x6cb01020, 0x25662: 0x6c2fb820, + 0x25664: 0x6cf00420, 0x25665: 0x6c183620, 0x25666: 0x6c66bc20, + 0x25668: 0x6cd81e20, 0x25669: 0x6d3d8a20, 0x2566a: 0x6cda4020, + 0x2566c: 0x6cc87420, 0x2566e: 0x6d218420, + 0x25673: 0x6c368e20, + 0x25676: 0x6c7a7e20, + 0x25678: 0x6d3b2220, + 0x2567e: 0x6cf9e820, + // Block 0x95a, offset 0x25680 + 0x2569b: 0x6c3ef220, + 0x2569c: 0x6ce23e20, 0x2569d: 0x6cf6d020, 0x2569e: 0x6c1d8020, 0x2569f: 0x6c41ec20, + 0x256a0: 0x6c936420, 0x256a1: 0x6c131620, 0x256a2: 0x6ccdb220, 0x256a3: 0x6c8e9c20, + 0x256a5: 0x6cf8e020, 0x256a6: 0x6c5f3e20, 0x256a7: 0x6d161220, + 0x256a8: 0x6ce01220, 0x256aa: 0x6c55b620, + 0x256ad: 0x6c25c820, 0x256ae: 0x6c447820, + 0x256b0: 0x6cd3dc20, 0x256b1: 0x6ccac020, 0x256b2: 0x6c53d420, 0x256b3: 0x6cfd0e20, + 0x256b6: 0x6cf9f020, + 0x256bb: 0x6ca2ae20, + 0x256bc: 0x6cdd9620, 0x256be: 0x6d2d4c20, + // Block 0x95b, offset 0x256c0 + 0x256c0: 0x6c3d9e20, 0x256c1: 0x6ccb6220, 0x256c2: 0x6caa4620, 0x256c3: 0x6d18ac20, + 0x256e7: 0x6cbdaa20, + 0x256e8: 0x6cbedc20, + 0x256f5: 0x6c5c5a20, 0x256f6: 0x6cd6e220, 0x256f7: 0x6c284a20, + 0x256f8: 0x6cab5420, 0x256f9: 0x6ca17420, 0x256fa: 0x6cb92420, 0x256fb: 0x6c1c8020, + 0x256fc: 0x6cac0620, 0x256fd: 0x6c739620, + // Block 0x95c, offset 0x25700 + 0x25700: 0x6c178020, 0x25701: 0x6c8b3c20, 0x25702: 0x6c0db420, 0x25703: 0x6c7a0a20, + 0x25704: 0x6c28c820, 0x25705: 0x6c1dee20, 0x25706: 0x6ce70620, 0x25707: 0x6c28ca20, + 0x25708: 0x6c97ce20, 0x25709: 0x6c56ce20, 0x2570a: 0x6c8a2820, 0x2570b: 0x6cfbae20, + 0x2570d: 0x6c129820, 0x2570e: 0x6c92ea20, 0x2570f: 0x6c204220, + 0x25710: 0x6cf3f420, 0x25711: 0x6c978820, + 0x25715: 0x6d3f2420, 0x25717: 0x6c328020, + 0x2571a: 0x6cd6f220, 0x2571b: 0x6c406420, + 0x2571c: 0x6c72a620, 0x2571d: 0x6d395820, 0x2571f: 0x6c2e4220, + 0x25720: 0x6cee5a20, 0x25721: 0x6c206820, 0x25722: 0x6cb92620, 0x25723: 0x6cea1220, + 0x25725: 0x6c886420, 0x25726: 0x6c0c2e20, 0x25727: 0x6c845420, + 0x2572a: 0x6c845620, + // Block 0x95d, offset 0x25740 + 0x25746: 0x6c0a9220, 0x25747: 0x6c407620, + 0x25748: 0x6c257820, 0x25749: 0x6c318020, 0x2574b: 0x6d29a820, + 0x2574c: 0x6c8fb620, 0x2574d: 0x6d0a4a20, 0x2574e: 0x6cbf7a20, 0x2574f: 0x6c5f6e20, + 0x25750: 0x6cba2c20, 0x25752: 0x6c65fa20, 0x25753: 0x6cce9020, + 0x25754: 0x6c351e20, 0x25755: 0x6cd51620, 0x25756: 0x6c10c820, 0x25757: 0x6d05f820, + 0x25758: 0x6c304420, 0x2575a: 0x6cc49220, + 0x2575c: 0x6d0fe620, 0x2575d: 0x6cc8b420, 0x2575e: 0x6c8c7020, 0x2575f: 0x6c65fc20, + 0x25760: 0x6c2ca820, 0x25761: 0x6c3ba020, 0x25762: 0x6c2d9020, 0x25763: 0x6d41dc20, + 0x25765: 0x6ca94820, + 0x2576a: 0x6cdba020, 0x2576b: 0x6ce52420, + 0x2576c: 0x6c01da20, 0x2576f: 0x6c131c20, + 0x25770: 0x6c2fc220, 0x25771: 0x6cd02820, 0x25772: 0x6c328420, 0x25773: 0x6ce39420, + 0x25774: 0x6c695420, 0x25775: 0x6d41de20, 0x25776: 0x6d2f1020, 0x25777: 0x6c65fe20, + 0x25778: 0x6c28da20, 0x25779: 0x6c285420, 0x2577a: 0x6cd97420, + // Block 0x95e, offset 0x25780 + 0x25790: 0x6d2e2620, 0x25791: 0x6ce69620, 0x25792: 0x6d372a20, + 0x25795: 0x6d1f8220, 0x25796: 0x6cac0e20, + 0x257a1: 0x6c854220, + 0x257a4: 0x6cb9d820, 0x257a6: 0x6cdca620, 0x257a7: 0x6c71dc20, + 0x257a8: 0x6c010020, 0x257a9: 0x6c445020, 0x257aa: 0x6c72b420, 0x257ab: 0x6cea7220, + 0x257ac: 0x6c0aa620, 0x257ad: 0x6cb87e20, 0x257ae: 0x6c0fa820, 0x257af: 0x6c5c7c20, + 0x257b1: 0x6c670020, + 0x257b4: 0x6c466420, 0x257b5: 0x6cdba420, + 0x257ba: 0x6c227a20, 0x257bb: 0x6cbb5c20, + 0x257bf: 0x6d0cf420, + // Block 0x95f, offset 0x257c0 + 0x257cf: 0x6c2d9420, + 0x257d2: 0x6c9f0420, + 0x257dc: 0x6cb3b620, 0x257dd: 0x6c8e1620, 0x257de: 0x6c6b7420, 0x257df: 0x6d3b3e20, + 0x257e0: 0x6c47ee20, 0x257e3: 0x6c32aa20, + 0x257e4: 0x6d2fee20, 0x257e6: 0x6ccebe20, 0x257e7: 0x6cbdf020, + 0x257e8: 0x6c9ca420, 0x257ea: 0x6cb2e220, 0x257eb: 0x6c23c020, + 0x257ec: 0x6c1d8820, 0x257ef: 0x6cc9ae20, + 0x257f6: 0x6ce52620, + // Block 0x960, offset 0x25800 + 0x25805: 0x6c8edc20, 0x25806: 0x6c936c20, 0x25807: 0x6c91fc20, + 0x25808: 0x6d407620, + 0x2580c: 0x6c941e20, 0x2580d: 0x6c58e620, 0x2580f: 0x6ce5b420, + 0x25810: 0x6ce9d820, 0x25811: 0x6cbb5220, 0x25812: 0x6c8c8020, 0x25813: 0x6c06c220, + 0x25814: 0x6cad7620, 0x25815: 0x6d2dc420, 0x25817: 0x6c874e20, + 0x2581b: 0x6ce3b220, + 0x2581c: 0x6c560020, + 0x25822: 0x6c8b6c20, + 0x25835: 0x6c5b8020, 0x25836: 0x6cc16420, 0x25837: 0x6d086820, + 0x25839: 0x6c6ec620, 0x2583a: 0x6c2f1220, 0x2583b: 0x6cdc0820, + 0x2583d: 0x6cf11e20, 0x2583f: 0x6d0d1420, + // Block 0x961, offset 0x25840 + 0x25840: 0x6d0c4a20, 0x25841: 0x6c050e20, 0x25843: 0x6c67ce20, + 0x25844: 0x6ca66820, 0x25845: 0x6c876e20, 0x25846: 0x6c560620, 0x25847: 0x6cb80420, + 0x25848: 0x6d37e220, + 0x25851: 0x6c0acc20, + 0x25854: 0x6d220020, 0x25855: 0x6c2f1420, 0x25856: 0x6c8c8a20, 0x25857: 0x6c878c20, + 0x25858: 0x6d3de620, 0x25859: 0x6c62f020, 0x2585a: 0x6c70e620, + 0x2585c: 0x6c3c8820, 0x2585e: 0x6d248820, + 0x25868: 0x6c8b7e20, 0x25869: 0x6d28e020, 0x2586a: 0x6cb9e820, 0x2586b: 0x6c6a4620, + 0x2586c: 0x6c494220, 0x2586e: 0x6d3dee20, + 0x25871: 0x6c40a220, + 0x25879: 0x6ccba220, + 0x2587c: 0x6c248a20, + // Block 0x962, offset 0x25880 + 0x25883: 0x6c5b8220, + 0x25888: 0x6c29a620, 0x25889: 0x6c901c20, 0x2588a: 0x6d198420, + 0x25897: 0x6cc96020, + 0x25898: 0x6d274220, 0x2589a: 0x6c2bc620, + 0x258a1: 0x6c420820, 0x258a2: 0x6d295c20, 0x258a3: 0x6ccdf420, + 0x258a4: 0x6d24b020, 0x258a5: 0x6c0fde20, 0x258a7: 0x6c2f9820, + 0x258a8: 0x6c388c20, 0x258aa: 0x6d22d820, + 0x258ac: 0x6ccfc420, + 0x258b2: 0x6c457020, + 0x258b4: 0x6c9ed020, 0x258b5: 0x6cea4a20, + 0x258b8: 0x6c8af620, + // Block 0x963, offset 0x258c0 + 0x258c1: 0x6d2bd420, 0x258c2: 0x6cadbc20, + 0x258c4: 0x6c9c4a20, 0x258c6: 0x6c9ffa20, 0x258c7: 0x6c394a20, + 0x258c9: 0x6ca33620, 0x258ca: 0x6cd8b820, 0x258cb: 0x6d14ea20, + 0x258cc: 0x6c635020, 0x258cd: 0x6d3ae620, + 0x258d3: 0x6c047e20, + 0x258d4: 0x6d231e20, 0x258d6: 0x6cb35820, + 0x258da: 0x6c582820, 0x258db: 0x6c11f820, + 0x258dc: 0x6c684a20, + 0x258e0: 0x6cdfe420, + 0x258e9: 0x6d363a20, 0x258eb: 0x6c9cf420, + 0x258ec: 0x6c77ae20, + 0x258f1: 0x6d109a20, 0x258f2: 0x6c335020, 0x258f3: 0x6cc36020, + 0x258f4: 0x6c10a420, 0x258f5: 0x6c1f5420, 0x258f6: 0x6cbc2820, 0x258f7: 0x6c8e6c20, + 0x258f8: 0x6c0f1820, 0x258fa: 0x6c772e20, 0x258fb: 0x6c3bde20, + // Block 0x964, offset 0x25900 + 0x25905: 0x6c2a2020, + 0x25909: 0x6c312820, 0x2590a: 0x6c440820, + 0x25919: 0x6c8d3a20, 0x2591a: 0x6cf79420, + 0x2591c: 0x6ca6ba20, 0x2591d: 0x6d389620, 0x2591e: 0x6d389820, + 0x25923: 0x6c1d7820, + 0x25934: 0x6ca6ee20, 0x25935: 0x6c5f0c20, 0x25937: 0x6cc12420, + // Block 0x965, offset 0x25940 + 0x25944: 0x6c763e20, 0x25947: 0x6cfcfc20, + 0x25949: 0x6c516820, 0x2594b: 0x6c8bd220, + 0x2594d: 0x6d3e7e20, + 0x25951: 0x6cab8c20, 0x25952: 0x6c245620, + 0x25957: 0x6c140420, + 0x2595d: 0x6d383820, 0x2595e: 0x6c102420, + 0x25964: 0x6c1d8220, 0x25965: 0x6cf8e220, 0x25966: 0x6cc99220, 0x25967: 0x6cfb9620, + 0x25968: 0x6ccb6420, 0x25969: 0x6c9e6020, 0x2596b: 0x6c38c020, + 0x2596c: 0x6d341620, 0x2596e: 0x6c256420, + 0x25974: 0x6cfa4620, + 0x2597e: 0x6cab1420, 0x2597f: 0x6c845820, + // Block 0x966, offset 0x25980 + 0x25980: 0x6d40de20, 0x25982: 0x6c24f220, 0x25983: 0x6d2b1220, + 0x25985: 0x6c845a20, + 0x25998: 0x6cb67620, 0x2599a: 0x6d3d1020, 0x2599b: 0x6c257a20, + 0x2599c: 0x6cb41e20, 0x2599e: 0x6c38d620, 0x2599f: 0x6ce02620, + 0x259a9: 0x6d3eac20, 0x259aa: 0x6d412a20, 0x259ab: 0x6d38bc20, + 0x259ac: 0x6cc6d020, 0x259ad: 0x6c8bee20, 0x259ae: 0x6ce02820, + 0x259b6: 0x6cd3fe20, + 0x259ba: 0x6c251420, 0x259bb: 0x6d3eb820, + 0x259bc: 0x6c3db620, + // Block 0x967, offset 0x259c0 + 0x259c1: 0x6d001c20, + 0x259c8: 0x6c3c7420, + 0x259cf: 0x6cfd4220, + 0x259d0: 0x6c670c20, 0x259d2: 0x6c3c0420, + 0x259d7: 0x6c875020, + 0x259d8: 0x6ca19820, + 0x259df: 0x6d1ed020, + 0x259e5: 0x6c5e5020, 0x259e7: 0x6cc16620, + 0x259ec: 0x6ca78220, + 0x259f0: 0x6c9cbe20, 0x259f3: 0x6cb80a20, + 0x259f6: 0x6c51ae20, + 0x259f8: 0x6c893a20, + 0x259ff: 0x6d42b420, + // Block 0x968, offset 0x25a00 + 0x25a02: 0x6c8df220, + 0x25a05: 0x6d39f820, 0x25a07: 0x6ca78c20, + 0x25a0a: 0x6c612420, 0x25a0b: 0x6cc62620, + 0x25a0c: 0x6c6a9620, 0x25a0d: 0x6c41d020, + 0x25a10: 0x6d170220, 0x25a13: 0x6d38ce20, + 0x25a15: 0x6cf4ca20, + 0x25a1a: 0x6c44fe20, 0x25a1b: 0x6c243220, + 0x25a1d: 0x6c9ed220, + 0x25a21: 0x6d0a0220, 0x25a23: 0x6d33cc20, + 0x25a24: 0x6cff7620, 0x25a27: 0x6c3e3a20, + 0x25a28: 0x6c553620, + 0x25a2c: 0x6c2b1e20, 0x25a2e: 0x6c741820, 0x25a2f: 0x6c2e1220, + 0x25a39: 0x6cd44420, + 0x25a3c: 0x6cee0a20, + // Block 0x969, offset 0x25a40 + 0x25a43: 0x6ca33820, + 0x25a44: 0x6c2b2620, 0x25a45: 0x6cd37020, 0x25a46: 0x6c224020, 0x25a47: 0x6cd4d220, + 0x25a49: 0x6cec2c20, 0x25a4a: 0x6c181820, 0x25a4b: 0x6c389820, + 0x25a4d: 0x6c470820, 0x25a4e: 0x6d24e620, + 0x25a51: 0x6c491420, + 0x25a5a: 0x6cbcbc20, + 0x25a5c: 0x6d2de820, 0x25a5d: 0x6c276020, 0x25a5e: 0x6cceee20, + 0x25a66: 0x6d388820, 0x25a67: 0x6cfde420, + 0x25a68: 0x6ca00020, 0x25a69: 0x6d3f5020, 0x25a6a: 0x6c599620, 0x25a6b: 0x6c9c5420, + 0x25a6d: 0x6cf88c20, 0x25a6e: 0x6d363c20, 0x25a6f: 0x6cac2820, + 0x25a70: 0x6c349420, + 0x25a74: 0x6c22c820, 0x25a75: 0x6ca1d420, 0x25a77: 0x6c17be20, + 0x25a79: 0x6d17b620, 0x25a7a: 0x6c464820, + // Block 0x96a, offset 0x25a80 + 0x25a87: 0x6c6dba20, + 0x25a93: 0x6d2b8020, + 0x25a94: 0x6cb25e20, 0x25a95: 0x6d130420, 0x25a96: 0x6c6af420, + 0x25a98: 0x6caf7620, 0x25a9b: 0x6ccbfe20, + 0x25a9c: 0x6d3c4420, 0x25a9d: 0x6c6f1e20, + 0x25aa0: 0x6c8e6e20, 0x25aa1: 0x6d227020, 0x25aa3: 0x6c70ac20, + 0x25aa8: 0x6caafe20, + 0x25ab8: 0x6c999c20, + // Block 0x96b, offset 0x25ac0 + 0x25ac4: 0x6c187420, 0x25ac6: 0x6d3bd420, 0x25ac7: 0x6ca76a20, + 0x25ac8: 0x6c79aa20, 0x25ac9: 0x6c6a2e20, 0x25aca: 0x6c57b020, + 0x25acd: 0x6d02e220, 0x25ace: 0x6d424a20, 0x25acf: 0x6d0e9620, + 0x25ad0: 0x6c748220, + 0x25ad5: 0x6c54ea20, 0x25ad6: 0x6d393a20, 0x25ad7: 0x6ccf6a20, + 0x25ad9: 0x6d0dbc20, 0x25adb: 0x6d01de20, + 0x25adc: 0x6c2ed420, 0x25adf: 0x6c187a20, + 0x25af2: 0x6c65c620, 0x25af3: 0x6c624c20, + 0x25af6: 0x6c21ce20, 0x25af7: 0x6c537420, + // Block 0x96c, offset 0x25b00 + 0x25b00: 0x6c26bc20, + 0x25b04: 0x6c764020, 0x25b05: 0x6d039820, 0x25b06: 0x6c5c1c20, 0x25b07: 0x6c65d020, + 0x25b08: 0x6d394820, 0x25b09: 0x6d2c8c20, 0x25b0a: 0x6c403820, 0x25b0b: 0x6c1c6020, + 0x25b0c: 0x6c082e20, 0x25b0d: 0x6cab0a20, + 0x25b11: 0x6c626820, 0x25b12: 0x6cb9c020, + 0x25b14: 0x6ced9620, 0x25b15: 0x6cab6a20, 0x25b16: 0x6c0a3220, 0x25b17: 0x6cd79c20, + 0x25b20: 0x6c6dd020, 0x25b21: 0x6d132e20, + // Block 0x96d, offset 0x25b40 + 0x25b44: 0x6c3a7220, 0x25b47: 0x6c844420, + 0x25b4a: 0x6c868020, 0x25b4b: 0x6cb01e20, + 0x25b52: 0x6cdc7a20, 0x25b53: 0x6c8e9e20, + 0x25b54: 0x6c517220, 0x25b55: 0x6c5d1420, 0x25b56: 0x6ce07a20, 0x25b57: 0x6cd79e20, + 0x25b58: 0x6d36ec20, 0x25b59: 0x6c0f5c20, + 0x25b5d: 0x6cf8e420, + 0x25b61: 0x6cb33620, 0x25b62: 0x6cc45c20, + 0x25b64: 0x6ca2b020, + 0x25b7d: 0x6d1db820, + // Block 0x96e, offset 0x25b80 + 0x25b82: 0x6c279620, + 0x25b8a: 0x6cb72220, 0x25b8b: 0x6c2e0220, + 0x25b8c: 0x6ca87c20, 0x25b8d: 0x6cd6e420, 0x25b8f: 0x6cce8c20, + 0x25b90: 0x6c7dc420, 0x25b91: 0x6cdc9020, 0x25b93: 0x6c30ca20, + 0x25b94: 0x6c2ef220, + 0x25b9c: 0x6c45ba20, + 0x25baf: 0x6d3bb020, + 0x25bb0: 0x6c4c8c20, + 0x25bbc: 0x6d05fa20, 0x25bbd: 0x6cc1e820, + // Block 0x96f, offset 0x25bc0 + 0x25bc0: 0x6d0a4c20, 0x25bc3: 0x6c689a20, + 0x25bc4: 0x6d30aa20, 0x25bc6: 0x6c2d9220, 0x25bc7: 0x6cca7620, + 0x25bc8: 0x6c080c20, 0x25bca: 0x6cdda620, 0x25bcb: 0x6cba2e20, + 0x25bcf: 0x6d05fc20, + 0x25bd1: 0x6d0a4e20, + 0x25bd4: 0x6ca17a20, + 0x25bf5: 0x6cdca820, 0x25bf6: 0x6c7ea820, 0x25bf7: 0x6d3a8a20, + 0x25bf8: 0x6d396420, 0x25bfa: 0x6c870820, + 0x25bfc: 0x6c280e20, 0x25bfd: 0x6c717820, 0x25bff: 0x6d286e20, + // Block 0x970, offset 0x25c00 + 0x25c00: 0x6c15fc20, 0x25c01: 0x6c956020, + 0x25c04: 0x6ccb8220, 0x25c06: 0x6c888620, + 0x25c08: 0x6d414e20, 0x25c0b: 0x6c7f7020, + 0x25c0c: 0x6cd6ec20, 0x25c0d: 0x6cbcfe20, + 0x25c18: 0x6c30ce20, + 0x25c1e: 0x6cf54a20, 0x25c1f: 0x6c9b9020, + 0x25c21: 0x6c62ce20, + 0x25c24: 0x6c1aee20, 0x25c26: 0x6ca65c20, + 0x25c38: 0x6d116e20, 0x25c3b: 0x6c7ec020, + 0x25c3e: 0x6c942020, + // Block 0x971, offset 0x25c40 + 0x25c40: 0x6cdcbe20, 0x25c41: 0x6c3dbe20, + 0x25c44: 0x6c830420, 0x25c45: 0x6cf05820, + 0x25c4e: 0x6c237820, + 0x25c54: 0x6c877020, 0x25c56: 0x6cb22820, + 0x25c58: 0x6c759020, 0x25c59: 0x6c71e420, 0x25c5b: 0x6c7ecc20, + 0x25c67: 0x6c62f220, + 0x25c6a: 0x6c9f1a20, + 0x25c6c: 0x6d125020, 0x25c6d: 0x6c0b2620, + 0x25c71: 0x6c23d420, 0x25c72: 0x6cd85e20, + 0x25c75: 0x6cd86020, + 0x25c78: 0x6c51b020, + // Block 0x972, offset 0x25c80 + 0x25c83: 0x6ca48820, + 0x25c85: 0x6c2f2620, + 0x25c88: 0x6c180220, 0x25c89: 0x6d282220, 0x25c8b: 0x6d052220, + 0x25c8c: 0x6cd4c220, 0x25c8e: 0x6c15b020, 0x25c8f: 0x6c9f4c20, + 0x25c90: 0x6c87fe20, 0x25c91: 0x6d19e620, 0x25c92: 0x6d037620, 0x25c93: 0x6cee9020, + 0x25c94: 0x6c479020, 0x25c95: 0x6ce7f020, 0x25c96: 0x6cddf620, 0x25c97: 0x6c3a5e20, + 0x25c98: 0x6c265420, 0x25c99: 0x6ca84620, 0x25c9a: 0x6c244820, 0x25c9b: 0x6d426e20, + 0x25c9c: 0x6c6b2020, 0x25c9d: 0x6d08b020, 0x25c9e: 0x6c0f5e20, 0x25c9f: 0x6c6c5e20, + 0x25ca0: 0x6d1b1220, 0x25ca1: 0x6d05f020, 0x25ca3: 0x6d20e420, + 0x25ca4: 0x6d048c20, 0x25ca6: 0x6cb76c20, 0x25ca7: 0x6c069620, + 0x25ca8: 0x6d03dc20, 0x25ca9: 0x6c45ec20, + 0x25cac: 0x6d418c20, + 0x25cb0: 0x6c6a1a20, 0x25cb2: 0x6c763020, + 0x25cb5: 0x6d03f020, 0x25cb6: 0x6c06b220, 0x25cb7: 0x6cd4ee20, + 0x25cb8: 0x6d23a020, 0x25cba: 0x6d38ee20, 0x25cbb: 0x6d2e0420, + // Block 0x973, offset 0x25cc0 + 0x25cc2: 0x6d37c620, + 0x25cc6: 0x6c140620, + 0x25cc8: 0x6c20e020, 0x25cc9: 0x6c8f4220, + 0x25cce: 0x6cdbdc20, + 0x25cd0: 0x6d3a8620, + 0x25cd9: 0x6c0bd220, + 0x25cdd: 0x6d035420, 0x25cdf: 0x6d0bce20, + 0x25ce2: 0x6c8daa20, + 0x25ce7: 0x6d0bd220, + 0x25cec: 0x6ce63020, + 0x25cf9: 0x6c2b5a20, + // Block 0x974, offset 0x25d00 + 0x25d01: 0x6cafca20, 0x25d02: 0x6c567620, 0x25d03: 0x6c132a20, + 0x25d0a: 0x6ce45e20, 0x25d0b: 0x6ca20220, + 0x25d0c: 0x6c731620, 0x25d0e: 0x6ca20420, + 0x25d10: 0x6c723020, 0x25d11: 0x6c8f0020, 0x25d13: 0x6c8e0c20, + 0x25d17: 0x6c8f0220, + 0x25d18: 0x6c568820, + 0x25d26: 0x6c3e3e20, 0x25d27: 0x6c553820, + 0x25d2a: 0x6c361820, 0x25d2b: 0x6c458420, + 0x25d2c: 0x6c470a20, + 0x25d31: 0x6c48b420, + 0x25d39: 0x6c94a420, 0x25d3b: 0x6c389a20, + 0x25d3c: 0x6c93e220, 0x25d3d: 0x6c9b1820, 0x25d3e: 0x6c3e8a20, 0x25d3f: 0x6c8e5e20, + // Block 0x975, offset 0x25d40 + 0x25d45: 0x6d00c220, 0x25d46: 0x6c471e20, + 0x25d48: 0x6cfcda20, 0x25d49: 0x6c0f1a20, 0x25d4b: 0x6c622220, + 0x25d53: 0x6cc2a220, + 0x25d54: 0x6c927220, + 0x25d5e: 0x6cd79420, + 0x25d61: 0x6ca20820, 0x25d62: 0x6d23a420, 0x25d63: 0x6c4eea20, + 0x25d69: 0x6d26d020, 0x25d6a: 0x6c289e20, + 0x25d6f: 0x6d218620, + 0x25d70: 0x6c64de20, 0x25d73: 0x6c429020, + 0x25d7f: 0x6c129420, + // Block 0x976, offset 0x25d80 + 0x25d80: 0x6cd0c820, 0x25d81: 0x6c8f1c20, + 0x25d86: 0x6c687e20, + 0x25d89: 0x6cdb2020, 0x25d8a: 0x6cdb2220, 0x25d8b: 0x6d383e20, + 0x25d92: 0x6c8aaa20, + 0x25d94: 0x6d085c20, 0x25d95: 0x6c92ee20, 0x25d97: 0x6c629e20, + 0x25d9a: 0x6d0cdc20, + 0x25d9f: 0x6c930820, + 0x25da1: 0x6c9fd220, 0x25da2: 0x6ce39620, + 0x25da6: 0x6c595c20, + 0x25da9: 0x6d18ec20, 0x25daa: 0x6ce08220, + 0x25dac: 0x6cf48820, + 0x25db0: 0x6c5f8020, + 0x25db7: 0x6c31e620, + 0x25db8: 0x6c7d9420, 0x25dba: 0x6c758e20, + 0x25dbf: 0x6cd21a20, + // Block 0x977, offset 0x25dc0 + 0x25dc0: 0x6ca44e20, 0x25dc1: 0x6cb3bc20, + 0x25dc4: 0x6cd52020, 0x25dc5: 0x6cc37e20, + 0x25dcc: 0x6cc5bc20, 0x25dcf: 0x6c3b6220, + 0x25dd2: 0x6cde3a20, 0x25dd3: 0x6cea4820, + 0x25dd5: 0x6d0f9c20, + 0x25de6: 0x6c342c20, 0x25de7: 0x6c21fc20, + 0x25de9: 0x6c478020, 0x25dea: 0x6c3b6e20, + 0x25ded: 0x6cc74620, + 0x25df1: 0x6c42c020, 0x25df2: 0x6cfdbe20, + 0x25df4: 0x6cfdc020, 0x25df5: 0x6c545420, 0x25df7: 0x6ce1c420, + 0x25df8: 0x6ccd8420, 0x25df9: 0x6d0fba20, 0x25dfa: 0x6d3f5220, + 0x25dfc: 0x6d256a20, + // Block 0x978, offset 0x25e00 + 0x25e04: 0x6cda7420, 0x25e07: 0x6c203820, + 0x25e08: 0x6cfdc820, 0x25e0a: 0x6c048a20, + 0x25e0c: 0x6c97c020, 0x25e0e: 0x6c3f6e20, 0x25e0f: 0x6c7e6420, + 0x25e10: 0x6c851e20, 0x25e12: 0x6c6af620, 0x25e13: 0x6d1ea820, + 0x25e18: 0x6d23a620, 0x25e1a: 0x6c1c4820, + 0x25e1c: 0x6c203a20, 0x25e1d: 0x6d182e20, 0x25e1e: 0x6ccd0020, + 0x25e22: 0x6c609220, 0x25e23: 0x6d0c2820, + 0x25e26: 0x6cf51820, 0x25e27: 0x6c215c20, + 0x25e28: 0x6c987420, + 0x25e2d: 0x6c3ede20, 0x25e2e: 0x6c637c20, 0x25e2f: 0x6c46d620, + 0x25e30: 0x6c474420, 0x25e31: 0x6c63e420, + 0x25e35: 0x6cfb9820, 0x25e37: 0x6c6d6020, + 0x25e38: 0x6d3f6420, 0x25e39: 0x6c90bc20, + 0x25e3c: 0x6c46da20, + // Block 0x979, offset 0x25e40 + 0x25e40: 0x6cc57c20, 0x25e42: 0x6ccd1420, + 0x25e45: 0x6c74da20, 0x25e46: 0x6ce79c20, 0x25e47: 0x6d1ffc20, + 0x25e54: 0x6c651a20, 0x25e55: 0x6c31dc20, 0x25e57: 0x6c55f020, + 0x25e5b: 0x6ccace20, + 0x25e5c: 0x6d246220, + 0x25e62: 0x6c974e20, + 0x25e64: 0x6d342620, 0x25e65: 0x6d0c4420, 0x25e66: 0x6c42f020, + 0x25e68: 0x6c582020, + 0x25e6e: 0x6cc34420, + 0x25e71: 0x6d103e20, 0x25e73: 0x6d418820, + 0x25e77: 0x6cfe8e20, + 0x25e78: 0x6d170620, 0x25e79: 0x6d0d5a20, 0x25e7a: 0x6c531e20, 0x25e7b: 0x6d20e620, + 0x25e7f: 0x6c1c0020, + // Block 0x97a, offset 0x25e80 + 0x25e81: 0x6c1b1020, + 0x25e84: 0x6c4f6a20, 0x25e85: 0x6ccb1e20, 0x25e86: 0x6cabbe20, 0x25e87: 0x6cde4020, + 0x25e88: 0x6c3b2620, 0x25e89: 0x6c1aa020, + 0x25e8c: 0x6c533220, 0x25e8d: 0x6d095220, + 0x25e96: 0x6d351e20, + 0x25e9b: 0x6cc19020, + 0x25ea0: 0x6cf5fe20, 0x25ea1: 0x6c3e6220, 0x25ea3: 0x6cd4e020, + 0x25ea4: 0x6c4d6a20, 0x25ea6: 0x6cb38c20, + 0x25ea8: 0x6c229a20, + 0x25eb0: 0x6c149a20, 0x25eb3: 0x6c52ae20, + 0x25eb8: 0x6cad7a20, 0x25eb9: 0x6ccff820, 0x25eba: 0x6cfede20, + 0x25ebd: 0x6d07ac20, 0x25ebe: 0x6c229e20, 0x25ebf: 0x6ce68420, + // Block 0x97b, offset 0x25ec0 + 0x25ec0: 0x6cb39620, + 0x25ec7: 0x6cde7e20, + 0x25ec8: 0x6c13a820, 0x25ecb: 0x6d40ce20, + 0x25ecc: 0x6c5de820, 0x25ecd: 0x6d071820, 0x25ece: 0x6d0e9820, 0x25ecf: 0x6c149e20, + 0x25ed1: 0x6ceb3420, + 0x25ed8: 0x6cfb8420, 0x25ed9: 0x6d07c620, 0x25eda: 0x6c542a20, 0x25edb: 0x6c58de20, + 0x25edc: 0x6c442620, 0x25edd: 0x6c1d3c20, 0x25ede: 0x6c0a3620, 0x25edf: 0x6c52bc20, + 0x25ee0: 0x6c52be20, 0x25ee1: 0x6c1b4a20, 0x25ee3: 0x6c140820, + 0x25eef: 0x6d2c8e20, + 0x25ef1: 0x6d2d1e20, 0x25ef2: 0x6cdea220, + 0x25ef5: 0x6cb3a220, 0x25ef6: 0x6cdea420, + 0x25ef8: 0x6d1f6e20, 0x25ef9: 0x6c3ef420, 0x25efa: 0x6c220e20, 0x25efb: 0x6c26be20, + 0x25efc: 0x6cde1a20, 0x25efe: 0x6c8ea020, + // Block 0x97c, offset 0x25f00 + 0x25f01: 0x6c221020, 0x25f03: 0x6c52d420, + 0x25f05: 0x6c4f1a20, 0x25f06: 0x6c7e5020, + 0x25f08: 0x6cd20420, + 0x25f0d: 0x6ce79e20, 0x25f0e: 0x6c5c7020, 0x25f0f: 0x6c518620, + 0x25f10: 0x6cb1d820, 0x25f11: 0x6d243a20, + 0x25f1c: 0x6cfaf020, 0x25f1d: 0x6c4e6c20, 0x25f1f: 0x6cb3ac20, + 0x25f26: 0x6c7ec220, 0x25f27: 0x6c5e5220, + 0x25f30: 0x6cdf8420, + 0x25f34: 0x6c819e20, 0x25f36: 0x6cd5b420, + 0x25f3a: 0x6c2a0a20, 0x25f3b: 0x6c2d1020, + // Block 0x97d, offset 0x25f40 + 0x25f48: 0x6d04a820, 0x25f4b: 0x6cee6020, + 0x25f4d: 0x6c17f820, 0x25f4e: 0x6ca3ae20, + 0x25f50: 0x6c73d420, 0x25f53: 0x6c375220, + 0x25f54: 0x6c375a20, 0x25f55: 0x6caa6c20, 0x25f56: 0x6caa8820, + 0x25f5d: 0x6d3bae20, + 0x25f62: 0x6cab2220, + 0x25f64: 0x6c8ac220, 0x25f65: 0x6c82b420, 0x25f67: 0x6c032a20, + 0x25f6c: 0x6c196820, 0x25f6f: 0x6c4a6a20, + 0x25f70: 0x6cc2f820, 0x25f71: 0x6c448820, 0x25f73: 0x6c45ee20, + 0x25f74: 0x6ccee020, + 0x25f79: 0x6c7f2020, 0x25f7a: 0x6d32e820, 0x25f7b: 0x6d183020, + 0x25f7c: 0x6c4bda20, 0x25f7d: 0x6ceea620, 0x25f7e: 0x6c951e20, + // Block 0x97e, offset 0x25f80 + 0x25f82: 0x6cd28620, 0x25f83: 0x6d1be820, + 0x25f84: 0x6cd14620, 0x25f85: 0x6ce8ea20, 0x25f86: 0x6c0a3820, + 0x25f88: 0x6d2aee20, 0x25f89: 0x6d383a20, 0x25f8b: 0x6cc72620, + 0x25f8c: 0x6cb64e20, 0x25f8d: 0x6c405620, 0x25f8e: 0x6c131820, + 0x25f93: 0x6c845c20, + 0x25f94: 0x6c978c20, 0x25f96: 0x6c886620, 0x25f97: 0x6c0c3020, + 0x25f9b: 0x6c207e20, + 0x25f9c: 0x6d18ee20, + 0x25fa0: 0x6cac3620, + 0x25fa5: 0x6d191420, 0x25fa6: 0x6c7b4820, + 0x25fa9: 0x6c0c5220, 0x25fab: 0x6c1c9e20, + 0x25fac: 0x6cc22020, 0x25fad: 0x6ca1ae20, 0x25fae: 0x6d301620, 0x25faf: 0x6ccc3c20, + 0x25fb0: 0x6ccc3e20, + 0x25fb7: 0x6d109620, + 0x25fb8: 0x6c457420, 0x25fb9: 0x6ca3b620, + 0x25fbc: 0x6d018420, 0x25fbf: 0x6ce53220, + // Block 0x97f, offset 0x25fc0 + 0x25fc6: 0x6d127820, + 0x25fc9: 0x6ccbe220, + 0x25fcf: 0x6ccaec20, + 0x25fd2: 0x6c2cc620, 0x25fd3: 0x6d06c220, + 0x25fd9: 0x6cc19220, + 0x25fe0: 0x6c52b020, 0x25fe1: 0x6cd16620, 0x25fe2: 0x6ce6ec20, + 0x25ff0: 0x6c352e20, + 0x25ff5: 0x6c89ea20, 0x25ff7: 0x6c53c220, + 0x25ff8: 0x6c852020, 0x25ffa: 0x6cfdee20, + 0x25ffd: 0x6cd0b620, + // Block 0x980, offset 0x26000 + 0x26000: 0x6c3d8220, + 0x26008: 0x6d0dc020, 0x26009: 0x6cee3220, 0x2600a: 0x6cb51620, 0x2600b: 0x6c34a620, + 0x2600d: 0x6c57b220, 0x2600e: 0x6cb90c20, + 0x26010: 0x6d01e020, + 0x2601d: 0x6c22d620, 0x2601e: 0x6cd11020, + 0x26022: 0x6c37dc20, + 0x26024: 0x6d039a20, 0x26026: 0x6cea0e20, 0x26027: 0x6d0ea220, + 0x26029: 0x6c8b2820, + 0x2602c: 0x6c9c6e20, + 0x26038: 0x6d402c20, 0x2603a: 0x6d3e8020, + 0x2603c: 0x6c55ba20, 0x2603d: 0x6d1c9e20, 0x2603e: 0x6c885620, 0x2603f: 0x6c266a20, + // Block 0x981, offset 0x26040 + 0x26040: 0x6ce4c420, 0x26041: 0x6ce53e20, + 0x2604b: 0x6cc6b020, + 0x2604d: 0x6c00d020, + 0x26050: 0x6c00e420, 0x26051: 0x6d309e20, 0x26052: 0x6c4c4620, 0x26053: 0x6c92f020, + 0x26054: 0x6d2f7a20, 0x26055: 0x6c9c8220, 0x26056: 0x6c8a2a20, 0x26057: 0x6d30a020, + 0x2605b: 0x6cc25020, + 0x2605c: 0x6c236820, 0x2605f: 0x6ce65020, + 0x26061: 0x6ce02c20, 0x26062: 0x6d2e2820, 0x26063: 0x6c55e020, + 0x26065: 0x6cb1da20, 0x26067: 0x6c267020, + 0x26068: 0x6cc6d220, + 0x2606e: 0x6ca52020, + 0x26073: 0x6ca45a20, + 0x26074: 0x6c291a20, 0x26075: 0x6c695c20, + 0x2607b: 0x6c72b620, + 0x2607c: 0x6c37ac20, + // Block 0x982, offset 0x26080 + 0x2608a: 0x6c877420, + 0x2608c: 0x6c4c4e20, 0x2608d: 0x6cec7e20, + 0x26092: 0x6ca7ee20, + 0x26094: 0x6c6c3420, + 0x260a9: 0x6cb04a20, 0x260aa: 0x6c1bde20, + 0x260b2: 0x6cb04c20, 0x260b3: 0x6d166e20, + 0x260b4: 0x6c316220, 0x260b5: 0x6cec1420, 0x260b6: 0x6d099020, + 0x260b8: 0x6cb73c20, 0x260b9: 0x6ccd6c20, + 0x260bc: 0x6d056a20, 0x260bf: 0x6c509020, + // Block 0x983, offset 0x260c0 + 0x260c0: 0x6caca620, 0x260c2: 0x6cadb420, + 0x260c4: 0x6d045a20, 0x260c6: 0x6c1b7e20, 0x260c7: 0x6cdf9020, + 0x260c8: 0x6d41a620, 0x260c9: 0x6d414820, 0x260ca: 0x6cb74c20, 0x260cb: 0x6c316420, + 0x260d9: 0x6cd70c20, + 0x260dc: 0x6ca2f220, 0x260dd: 0x6cf59620, + 0x260e7: 0x6c179420, + 0x260e8: 0x6d16d020, 0x260eb: 0x6d329e20, + 0x260ee: 0x6c70fe20, 0x260ef: 0x6c274c20, + 0x260f1: 0x6cc9fc20, + 0x260f4: 0x6d3ac820, 0x260f5: 0x6ced7620, + 0x260f8: 0x6cc9fe20, 0x260f9: 0x6c04f220, 0x260fa: 0x6c643c20, 0x260fb: 0x6c972c20, + // Block 0x984, offset 0x26100 + 0x26108: 0x6ceb9c20, 0x2610a: 0x6cb76020, + 0x2610f: 0x6d3c0c20, + 0x26110: 0x6ceb0220, 0x26113: 0x6cb28c20, + 0x2611d: 0x6cae6220, 0x2611e: 0x6c7b9a20, 0x2611f: 0x6d14d820, + 0x26121: 0x6d018620, 0x26122: 0x6d264c20, 0x26123: 0x6c523020, + 0x26125: 0x6c53f220, 0x26126: 0x6d32a420, 0x26127: 0x6c217420, + 0x26128: 0x6cd35e20, 0x26129: 0x6cec1c20, 0x2612b: 0x6d009620, + 0x26138: 0x6c452a20, + // Block 0x985, offset 0x26140 + 0x26145: 0x6c35fe20, + 0x2614f: 0x6c7a7220, + 0x26150: 0x6ca32c20, 0x26153: 0x6c707420, + 0x26154: 0x6d088e20, 0x26155: 0x6cc0fe20, 0x26156: 0x6c181c20, 0x26157: 0x6c939620, + 0x26158: 0x6c511420, 0x26159: 0x6cd16020, 0x2615a: 0x6ca44620, + 0x2615c: 0x6c511620, 0x2615d: 0x6c13de20, 0x2615e: 0x6d0bfe20, 0x2615f: 0x6c450a20, + 0x26160: 0x6ca81e20, 0x26162: 0x6c4c6a20, 0x26163: 0x6d0c8c20, + 0x26164: 0x6c494e20, 0x26167: 0x6d360420, + 0x26168: 0x6c81f420, + 0x2616f: 0x6c321820, + 0x26170: 0x6cb78220, 0x26171: 0x6cc10020, 0x26172: 0x6c742e20, + // Block 0x986, offset 0x26180 + 0x26181: 0x6c3c4220, 0x26183: 0x6d06c420, + 0x26184: 0x6ce9fc20, 0x26186: 0x6c4e1820, 0x26187: 0x6c7a4220, + 0x2618a: 0x6ccff020, 0x2618b: 0x6d363e20, + 0x2618d: 0x6cad2c20, 0x2618e: 0x6d32cc20, 0x2618f: 0x6c861820, + 0x26190: 0x6ced2620, 0x26192: 0x6c391020, 0x26193: 0x6d033a20, + 0x26196: 0x6d0bb620, + 0x2619b: 0x6c709820, + 0x2619c: 0x6cd0a620, + 0x261ad: 0x6c989020, 0x261af: 0x6cea7e20, + 0x261b0: 0x6d3d6620, 0x261b1: 0x6cf62820, 0x261b2: 0x6d1b5820, 0x261b3: 0x6c6db620, + 0x261b4: 0x6cea5420, 0x261b7: 0x6c453220, + 0x261b8: 0x6c620a20, + // Block 0x987, offset 0x261c0 + 0x261cf: 0x6d3ba820, + 0x261d2: 0x6ce5f220, + 0x261d4: 0x6d33e220, 0x261d6: 0x6c604420, + 0x261da: 0x6d1c8220, 0x261db: 0x6cf0aa20, + 0x261dd: 0x6c593c20, 0x261de: 0x6ce68620, 0x261df: 0x6c150620, + 0x261e2: 0x6c7c8e20, 0x261e3: 0x6cb86e20, + 0x261e4: 0x6c04fc20, 0x261e5: 0x6c13a420, 0x261e6: 0x6ceb8420, 0x261e7: 0x6ca43020, + 0x261e8: 0x6c6a2420, 0x261ea: 0x6d0c1620, + 0x261ec: 0x6ce8ca20, 0x261ee: 0x6cf1e620, + 0x261f0: 0x6c232020, 0x261f3: 0x6d06fc20, + 0x261f4: 0x6d1b6020, 0x261f7: 0x6c084420, + 0x261fc: 0x6c935820, + // Block 0x988, offset 0x26200 + 0x26201: 0x6d290620, 0x26202: 0x6c265820, + 0x26206: 0x6ca84820, 0x26207: 0x6c71c220, + 0x26208: 0x6c541620, + 0x2620c: 0x6c453a20, + 0x26215: 0x6c541820, 0x26216: 0x6c76b220, 0x26217: 0x6c459620, + 0x26219: 0x6c5b5e20, 0x2621a: 0x6d01e220, + 0x2621d: 0x6cf8ba20, 0x2621e: 0x6c4e2420, 0x2621f: 0x6c9c6820, + 0x26221: 0x6cf25c20, 0x26222: 0x6c5d3620, 0x26223: 0x6ccabc20, + 0x26224: 0x6d034220, 0x26225: 0x6d307220, 0x26226: 0x6c5dea20, + 0x26228: 0x6c45a020, 0x2622b: 0x6cc9e420, + 0x2622c: 0x6c6c4a20, 0x2622d: 0x6cebec20, + 0x26231: 0x6c332420, 0x26232: 0x6c1aca20, + 0x2623d: 0x6cf67e20, + // Block 0x989, offset 0x26240 + 0x26242: 0x6c9c6a20, 0x26243: 0x6d29e020, + 0x26244: 0x6cca8420, + 0x26253: 0x6cea5e20, + 0x26254: 0x6d366820, 0x26255: 0x6cf1ea20, + 0x26258: 0x6d1a9820, 0x26259: 0x6cea8220, 0x2625b: 0x6c1cda20, + 0x2625c: 0x6d2af020, 0x2625e: 0x6cff0a20, 0x2625f: 0x6ca07420, + 0x26260: 0x6c245820, 0x26263: 0x6c0b4e20, + 0x26264: 0x6d04f020, 0x26267: 0x6d154c20, + 0x2626e: 0x6c5a6020, + 0x26270: 0x6d2bf820, 0x26271: 0x6cdd3620, 0x26272: 0x6c5cfe20, 0x26273: 0x6c727e20, + // Block 0x98a, offset 0x26280 + 0x26281: 0x6c245a20, + 0x26284: 0x6c5f4020, 0x26285: 0x6d0a4420, 0x26286: 0x6cdcfe20, 0x26287: 0x6c135e20, + 0x26289: 0x6d18b020, + 0x2628e: 0x6c0c2220, + 0x26292: 0x6c74c220, 0x26293: 0x6c868220, + 0x26296: 0x6cad9a20, + 0x2629b: 0x6d289c20, + 0x2629c: 0x6d134220, 0x2629e: 0x6c0a5a20, 0x2629f: 0x6d310020, + 0x262a0: 0x6d310220, 0x262a2: 0x6c702420, 0x262a3: 0x6d309020, + 0x262a6: 0x6cd60e20, + 0x262aa: 0x6cf6d620, + 0x262b7: 0x6d065820, + 0x262b8: 0x6ca3a620, 0x262b9: 0x6cfb9a20, 0x262ba: 0x6c4bec20, 0x262bb: 0x6cf0d220, + 0x262be: 0x6c60c420, 0x262bf: 0x6cc9a220, + // Block 0x98b, offset 0x262c0 + 0x262c2: 0x6c304220, 0x262c3: 0x6caac820, + 0x262c4: 0x6c327a20, 0x262c5: 0x6d32fc20, 0x262c6: 0x6c7a6420, + 0x262c9: 0x6ca01c20, + 0x262d5: 0x6c05d820, 0x262d6: 0x6c5c5020, + 0x262d9: 0x6d3fc620, + 0x262e8: 0x6cca5c20, 0x262ea: 0x6ce29420, 0x262eb: 0x6d157220, + 0x262ed: 0x6d241620, + 0x262f1: 0x6d123220, 0x262f2: 0x6ca94a20, + 0x262f4: 0x6c1dfa20, 0x262f5: 0x6c5d4820, 0x262f7: 0x6c337620, + 0x262f9: 0x6cb7f220, 0x262fa: 0x6d1d1820, 0x262fb: 0x6c0e3420, + 0x262fc: 0x6ca92e20, 0x262fd: 0x6c5a1a20, + // Block 0x98c, offset 0x26300 + 0x26306: 0x6d1d1a20, + 0x2630a: 0x6c05da20, + 0x2630e: 0x6c4a2820, 0x2630f: 0x6c82f620, + 0x26310: 0x6d421020, + 0x26319: 0x6c15fe20, + 0x26323: 0x6c660a20, + 0x26327: 0x6c9b9220, + 0x26329: 0x6d002820, + 0x2632f: 0x6d035620, + 0x26331: 0x6c849e20, + 0x2633a: 0x6cbc2e20, + 0x2633f: 0x6cf05c20, + // Block 0x98d, offset 0x26340 + 0x26340: 0x6ca37620, 0x26342: 0x6cacee20, + 0x26344: 0x6c829020, 0x26347: 0x6c958220, + 0x2634b: 0x6c946220, + 0x2634d: 0x6c44ea20, 0x2634f: 0x6c946420, + 0x26352: 0x6cc22220, + 0x26356: 0x6c959020, + 0x26358: 0x6ca46820, 0x2635b: 0x6c959220, + 0x2635c: 0x6d273e20, + 0x26362: 0x6cd71a20, + 0x26365: 0x6c9d3e20, 0x26366: 0x6cede820, 0x26367: 0x6c12f420, + 0x26368: 0x6c64a620, 0x26369: 0x6cee2020, + 0x2636f: 0x6c637e20, + 0x26374: 0x6c58c020, + 0x26378: 0x6c894220, 0x26379: 0x6d3f2c20, 0x2637a: 0x6c040a20, 0x2637b: 0x6cd43c20, + 0x2637e: 0x6cecf220, + // Block 0x98e, offset 0x26380 + 0x26382: 0x6cd4c420, + 0x26387: 0x6c4a4e20, + 0x26388: 0x6cf5cc20, 0x2638a: 0x6cc79c20, 0x2638b: 0x6d11fe20, + 0x2638e: 0x6c42c220, + 0x26395: 0x6d26d220, + 0x26398: 0x6d1da820, 0x26399: 0x6cec3c20, 0x2639a: 0x6c0f4620, + 0x2639f: 0x6d034e20, + 0x263a2: 0x6cb0c620, 0x263a3: 0x6c0f7820, + 0x263a6: 0x6c4d7e20, 0x263a7: 0x6d2d5220, + 0x263a8: 0x6cf33020, 0x263aa: 0x6d138420, 0x263ab: 0x6c0ab820, + 0x263ac: 0x6c4d8620, + 0x263b8: 0x6c1c0220, 0x263bb: 0x6d360620, + 0x263bd: 0x6ca5dc20, + // Block 0x98f, offset 0x263c0 + 0x263c1: 0x6cf3d420, 0x263c2: 0x6c006e20, + 0x263c8: 0x6c006a20, 0x263c9: 0x6d229220, 0x263ca: 0x6c1c7020, + 0x263cd: 0x6c6eac20, 0x263ce: 0x6d371020, 0x263cf: 0x6d372c20, + 0x263d0: 0x6d372e20, 0x263d1: 0x6c70ee20, + 0x263d6: 0x6c4dd820, + 0x263da: 0x6cb24c20, + 0x263dd: 0x6d11a620, + 0x263e3: 0x6d1f1e20, + 0x263e4: 0x6cb25420, 0x263e6: 0x6ca11020, + 0x263ec: 0x6d429e20, 0x263ed: 0x6cb38e20, 0x263ef: 0x6d091220, + 0x263f0: 0x6c7bc420, 0x263f1: 0x6d17bc20, 0x263f2: 0x6cb39020, + 0x263fb: 0x6d3c9c20, + // Block 0x990, offset 0x26400 + 0x26403: 0x6ca5fa20, + 0x26404: 0x6cc0b020, 0x26405: 0x6c23f820, + 0x2640c: 0x6d11cc20, + 0x26411: 0x6c3b9820, + 0x26415: 0x6cf9f420, 0x26417: 0x6c677c20, + 0x26418: 0x6c13b220, 0x2641b: 0x6d000e20, + 0x2641c: 0x6c13b420, + 0x26422: 0x6c1a5020, 0x26423: 0x6c257e20, + 0x26427: 0x6cbf7c20, + 0x26429: 0x6d245220, 0x2642b: 0x6d21d820, + 0x2642f: 0x6cf21620, + 0x26431: 0x6c13c020, 0x26432: 0x6d22ae20, + 0x26439: 0x6d425420, 0x2643a: 0x6c29fc20, + 0x2643d: 0x6c73a820, 0x2643e: 0x6c29fe20, 0x2643f: 0x6d1c4c20, + // Block 0x991, offset 0x26440 + 0x26441: 0x6c3cd420, + 0x26445: 0x6cf27a20, + 0x26448: 0x6c6cf620, 0x26449: 0x6cb76e20, 0x2644b: 0x6cbe0e20, + 0x2644d: 0x6c7dee20, 0x2644f: 0x6cdf9e20, + 0x26450: 0x6cfa9420, 0x26452: 0x6ce46420, + 0x26454: 0x6c7df620, 0x26456: 0x6ce53a20, + 0x26458: 0x6c556420, 0x26459: 0x6d39aa20, 0x2645a: 0x6d2d7620, 0x2645b: 0x6cde5820, + 0x2645d: 0x6ce46e20, 0x2645e: 0x6cde6820, 0x2645f: 0x6cde8020, + 0x26460: 0x6c574820, 0x26461: 0x6d0dc220, 0x26462: 0x6ce61620, + 0x26464: 0x6ce61820, 0x26465: 0x6cde8220, + 0x2646c: 0x6c581020, 0x2646e: 0x6c63e620, 0x2646f: 0x6cb7e020, + 0x26471: 0x6cdeae20, + 0x26474: 0x6cdfc220, 0x26475: 0x6c57ce20, + 0x26478: 0x6d3bf620, 0x26479: 0x6c572220, + 0x2647c: 0x6c800c20, + // Block 0x992, offset 0x26480 + 0x26486: 0x6d420420, 0x26487: 0x6d169820, + 0x26488: 0x6c3dfe20, 0x26489: 0x6cf4bc20, 0x2648b: 0x6c3e0020, + 0x2648d: 0x6c2f5620, 0x2648e: 0x6cde3c20, + 0x26496: 0x6c17b820, + 0x26499: 0x6cc64220, 0x2649a: 0x6cc35620, + 0x2649c: 0x6c438420, + 0x264a1: 0x6c3e6620, 0x264a2: 0x6c2c4c20, 0x264a3: 0x6c2dc620, + 0x264a4: 0x6d1e3020, 0x264a6: 0x6c643e20, + 0x264a9: 0x6c8f8e20, + 0x264ac: 0x6d1e3220, 0x264ad: 0x6cafe020, 0x264af: 0x6c5d7820, + 0x264b0: 0x6cbf3020, 0x264b2: 0x6c38a020, 0x264b3: 0x6cf3d620, + 0x264b4: 0x6ce74e20, 0x264b5: 0x6c4f7e20, + 0x264b8: 0x6cdfac20, + 0x264be: 0x6c525020, + // Block 0x993, offset 0x264c0 + 0x264c4: 0x6ce56220, + 0x264c8: 0x6d388e20, 0x264cb: 0x6c045420, + 0x264cc: 0x6d01e420, 0x264cd: 0x6c29c620, 0x264cf: 0x6c6c4c20, + 0x264d5: 0x6c54ec20, 0x264d6: 0x6c06b620, + 0x264d8: 0x6c2fb220, + 0x264dc: 0x6caac420, 0x264dd: 0x6cf0c620, 0x264de: 0x6d218c20, + 0x264e0: 0x6d039c20, 0x264e1: 0x6c3ee020, 0x264e2: 0x6cfd0020, 0x264e3: 0x6cb7c420, + 0x264e4: 0x6ce87820, 0x264e7: 0x6c609420, + 0x264e9: 0x6d1d4620, 0x264eb: 0x6c2ae420, + 0x264ec: 0x6ceeb020, 0x264ed: 0x6cf6ae20, 0x264ef: 0x6cac0220, + 0x264f1: 0x6cd12020, 0x264f2: 0x6d1fec20, + 0x264f4: 0x6c005220, 0x264f5: 0x6c66d220, 0x264f7: 0x6c466020, + 0x264f8: 0x6cc93020, + 0x264fc: 0x6c462220, 0x264ff: 0x6ccc6e20, + // Block 0x994, offset 0x26500 + 0x26500: 0x6ce13a20, + 0x26507: 0x6c92f220, + 0x26508: 0x6c027820, 0x2650a: 0x6cb7ee20, 0x2650b: 0x6d04fc20, + 0x2650d: 0x6c271020, + 0x26511: 0x6c382a20, 0x26512: 0x6cf0f420, + 0x26514: 0x6c341020, 0x26515: 0x6c8a3a20, 0x26516: 0x6c386620, 0x26517: 0x6c5a1c20, + 0x26518: 0x6c74dc20, 0x26519: 0x6cdec020, 0x2651a: 0x6d422020, 0x2651b: 0x6cc53020, + 0x2651c: 0x6c117a20, 0x2651d: 0x6ce2c020, + 0x26520: 0x6c57d020, 0x26521: 0x6d05fe20, 0x26523: 0x6d2dae20, + 0x26527: 0x6c41f420, + 0x2652a: 0x6caeea20, 0x2652b: 0x6c118020, + 0x2652c: 0x6d005820, 0x2652d: 0x6c26d020, + 0x26531: 0x6c62d020, + 0x26536: 0x6c854820, + 0x26539: 0x6cac9020, + 0x2653d: 0x6c8ffa20, 0x2653e: 0x6c877620, 0x2653f: 0x6cf7c220, + // Block 0x995, offset 0x26540 + 0x26540: 0x6ce2d620, 0x26543: 0x6c8dac20, + 0x26548: 0x6c855820, 0x26549: 0x6cc4a220, 0x2654a: 0x6c8df420, + 0x2654e: 0x6c4bca20, + 0x26554: 0x6cb30a20, 0x26555: 0x6ca11220, 0x26556: 0x6cabf020, + 0x26559: 0x6c03b420, + 0x26561: 0x6cb62820, + 0x26564: 0x6d0cc420, + 0x2656a: 0x6cec3e20, 0x2656b: 0x6c020c20, + 0x2656d: 0x6ca04a20, 0x2656e: 0x6c9fca20, 0x2656f: 0x6d0ab220, + 0x26570: 0x6c9b9420, 0x26573: 0x6c48d620, + 0x26576: 0x6c682420, + 0x2657b: 0x6c410a20, + // Block 0x996, offset 0x26580 + 0x26581: 0x6c110a20, 0x26582: 0x6cf4ac20, 0x26583: 0x6d301820, + 0x26584: 0x6cc58820, 0x26585: 0x6c79b420, + 0x26594: 0x6d2f8a20, 0x26595: 0x6d37a220, 0x26596: 0x6cc00a20, 0x26597: 0x6c4c1420, + 0x26598: 0x6c456a20, 0x26599: 0x6cb40220, 0x2659a: 0x6c566c20, 0x2659b: 0x6c9e0820, + 0x2659e: 0x6ce45a20, + 0x265a3: 0x6cee0020, + 0x265b8: 0x6d3a0020, 0x265b9: 0x6c268a20, 0x265ba: 0x6d048e20, 0x265bb: 0x6ca2d420, + 0x265be: 0x6c72de20, + // Block 0x997, offset 0x265c0 + 0x265c1: 0x6ca71a20, + 0x265c8: 0x6c567820, 0x265c9: 0x6ccbd420, + 0x265dc: 0x6d33b820, 0x265df: 0x6cdde420, + 0x265e1: 0x6cd7d820, + 0x265e5: 0x6d170820, + 0x265ed: 0x6cbf1020, 0x265ee: 0x6d35c820, 0x265ef: 0x6c939220, + 0x265f0: 0x6cc79e20, 0x265f2: 0x6cb5ac20, 0x265f3: 0x6d224020, + 0x265f4: 0x6d386a20, 0x265f5: 0x6d0fa620, 0x265f6: 0x6cfc0420, 0x265f7: 0x6ca1cc20, + 0x265f8: 0x6c1d9a20, 0x265f9: 0x6c5aa820, 0x265fa: 0x6c6f6420, 0x265fb: 0x6c6fec20, + 0x265fc: 0x6cb19220, + // Block 0x998, offset 0x26600 + 0x26601: 0x6c699220, 0x26603: 0x6c48c620, + 0x26605: 0x6ca0fe20, + 0x26610: 0x6cf5ce20, 0x26611: 0x6cb43220, + 0x2662f: 0x6c61d420, + 0x26636: 0x6cf1da20, 0x26637: 0x6c071620, + 0x26638: 0x6d15ea20, 0x26639: 0x6c3e6a20, 0x2663a: 0x6cd7e420, 0x2663b: 0x6c72f020, + 0x2663c: 0x6c61f620, 0x2663e: 0x6ca69a20, + // Block 0x999, offset 0x26640 + 0x26640: 0x6c07b620, + 0x26645: 0x6d06c620, + 0x26648: 0x6cbdd220, 0x26649: 0x6c0ef820, + 0x2664c: 0x6cede620, 0x2664d: 0x6d30f620, 0x2664f: 0x6cf2e620, + 0x26650: 0x6ccea420, 0x26651: 0x6d2a8020, 0x26652: 0x6d101820, + 0x26655: 0x6cd98a20, 0x26656: 0x6ca82020, + 0x2665b: 0x6c098620, + 0x26663: 0x6c242420, + 0x26664: 0x6cbab220, + 0x2666a: 0x6cffe620, 0x2666b: 0x6d33d620, + 0x2666c: 0x6ccf1020, 0x2666f: 0x6d360820, + 0x26670: 0x6cae7020, + // Block 0x99a, offset 0x26680 + 0x2668f: 0x6c2e1e20, + 0x26696: 0x6cf2f820, + 0x26698: 0x6d352020, 0x26699: 0x6c098820, 0x2669b: 0x6c3b7020, + 0x266a5: 0x6c052a20, + 0x266aa: 0x6cc06c20, 0x266ab: 0x6ca63a20, + 0x266ac: 0x6c0f0620, 0x266ad: 0x6c33f220, 0x266af: 0x6cd2d020, + 0x266b0: 0x6d05a220, 0x266b1: 0x6c16ac20, 0x266b2: 0x6d05a420, 0x266b3: 0x6d128020, + 0x266b4: 0x6c9c5620, + 0x266b8: 0x6d02d620, 0x266b9: 0x6d3d6820, 0x266ba: 0x6c3ff620, + 0x266bd: 0x6cb06020, 0x266be: 0x6d095e20, + // Block 0x99b, offset 0x266c0 + 0x266c0: 0x6d235020, 0x266c1: 0x6cfb6020, 0x266c2: 0x6d235220, 0x266c3: 0x6d213420, + 0x266c5: 0x6c709a20, 0x266c6: 0x6cddec20, 0x266c7: 0x6c797c20, + 0x266ca: 0x6d32ce20, 0x266cb: 0x6c9b1a20, + 0x266cc: 0x6c428420, + 0x266d2: 0x6ca28a20, 0x266d3: 0x6cf7ea20, + 0x266d4: 0x6c09aa20, 0x266d6: 0x6c3ff820, + 0x266dc: 0x6cfff420, + 0x266e0: 0x6c6f7620, 0x266e3: 0x6c468820, + 0x266f0: 0x6c1b2820, 0x266f1: 0x6c6f7820, 0x266f2: 0x6c6f7a20, + 0x266f5: 0x6ccbf820, 0x266f7: 0x6c3a0820, + // Block 0x99c, offset 0x26700 + 0x2672b: 0x6c3e8c20, + 0x2672f: 0x6ced8a20, + 0x26730: 0x6d05a620, 0x26731: 0x6c0e7620, + // Block 0x99d, offset 0x26740 + 0x26741: 0x6c504820, 0x26743: 0x6d00c420, + 0x26744: 0x6cb11820, 0x26745: 0x6d227420, 0x26747: 0x6ce4ae20, + 0x26748: 0x6cb00020, 0x2674a: 0x6cd2d220, 0x2674b: 0x6c7afc20, + 0x2674c: 0x6c5ef020, 0x2674f: 0x6d2be420, + 0x26750: 0x6ca3cc20, 0x26751: 0x6ca20620, 0x26753: 0x6c3ea620, + 0x26754: 0x6c326820, 0x26757: 0x6cd13e20, + 0x26758: 0x6c13ee20, 0x2675a: 0x6c1b3820, 0x2675b: 0x6c4b0820, + 0x2675c: 0x6c9f6620, 0x2675d: 0x6ce0c220, 0x2675e: 0x6c044c20, 0x2675f: 0x6cbac220, + 0x26761: 0x6d3d7420, 0x26762: 0x6cf0ac20, 0x26763: 0x6d0a1e20, + 0x26765: 0x6c9e9620, 0x26766: 0x6d290820, 0x26767: 0x6d1f4a20, + 0x26769: 0x6d204c20, 0x2676b: 0x6cccee20, + 0x2676c: 0x6c514220, 0x2676d: 0x6c93a220, 0x2676e: 0x6d347820, + 0x26772: 0x6c6e9020, 0x26773: 0x6d317020, + 0x26776: 0x6c9b2620, 0x26777: 0x6d1f4c20, + 0x26779: 0x6cf30020, 0x2677a: 0x6c038620, + 0x2677d: 0x6c737820, 0x2677e: 0x6cc7b220, 0x2677f: 0x6c23f220, + // Block 0x99e, offset 0x26780 + 0x26780: 0x6d33fc20, + 0x26789: 0x6c557620, 0x2678a: 0x6d0f5c20, + 0x2678c: 0x6c75d020, 0x2678d: 0x6ccf1c20, 0x2678e: 0x6c79f220, + 0x26791: 0x6cb9a820, + 0x26794: 0x6c9b2820, + 0x2679a: 0x6ce58c20, + // Block 0x99f, offset 0x267c0 + 0x267d0: 0x6ca84a20, + 0x267df: 0x6c1b3a20, + 0x267e1: 0x6d047220, 0x267e3: 0x6c5d3820, + 0x267e6: 0x6c2b8020, 0x267e7: 0x6c80d620, + 0x267e9: 0x6d2a1a20, 0x267ea: 0x6c130a20, 0x267eb: 0x6cdd8420, + 0x267ec: 0x6d412c20, 0x267ed: 0x6cdbd020, 0x267ef: 0x6cf9e020, + 0x267f1: 0x6d01e620, + 0x267f4: 0x6c6b1220, 0x267f5: 0x6d1f5820, 0x267f7: 0x6c46ca20, + 0x267f8: 0x6c451620, + 0x267fc: 0x6c75d820, 0x267fd: 0x6c5a5e20, 0x267fe: 0x6c607420, 0x267ff: 0x6cb3ca20, + // Block 0x9a0, offset 0x26800 + 0x26800: 0x6cf37820, 0x26802: 0x6d183420, + 0x26805: 0x6ca3a420, 0x26807: 0x6cc71820, + 0x26808: 0x6ca40820, 0x2680a: 0x6cb2c020, 0x2680b: 0x6ccd9420, + 0x2680c: 0x6c2dd820, 0x2680d: 0x6c607620, 0x2680e: 0x6c571420, 0x2680f: 0x6c335620, + 0x26810: 0x6c79a020, 0x26811: 0x6cde8620, 0x26813: 0x6c53c620, + 0x26815: 0x6cd4f820, + 0x26819: 0x6c526a20, 0x2681a: 0x6c3bc020, + 0x26832: 0x6c79fa20, + // Block 0x9a1, offset 0x26840 + 0x26859: 0x6ca70220, + 0x2685d: 0x6c1e9e20, + 0x26866: 0x6cbb5a20, + 0x26872: 0x6cf8bc20, 0x26873: 0x6c558020, + 0x26874: 0x6cd99620, 0x26875: 0x6cf30a20, 0x26877: 0x6c4d7620, + 0x26878: 0x6cc7b820, 0x26879: 0x6c9b3020, 0x2687b: 0x6cca2420, + 0x2687d: 0x6cf3de20, 0x2687f: 0x6d1f6420, + // Block 0x9a2, offset 0x26880 + 0x26881: 0x6cdfba20, 0x26882: 0x6cd01220, + 0x26886: 0x6cb71220, + 0x26888: 0x6c4c8420, 0x26889: 0x6cb87420, 0x2688a: 0x6cfad020, + 0x2688f: 0x6cdbd620, + 0x26890: 0x6c92b020, 0x26893: 0x6cb52620, + 0x26894: 0x6c2ddc20, 0x26897: 0x6cb64020, + 0x26898: 0x6c63dc20, 0x26899: 0x6d1f6620, 0x2689a: 0x6cf79e20, 0x2689b: 0x6c177a20, + 0x268a1: 0x6c9d7e20, 0x268a2: 0x6c911820, 0x268a3: 0x6c08f220, + 0x268aa: 0x6cadec20, + 0x268ae: 0x6d318e20, 0x268af: 0x6cd01420, + 0x268b0: 0x6c15da20, 0x268b1: 0x6c403a20, + 0x268b6: 0x6cc13820, 0x268b7: 0x6cd82220, + 0x268ba: 0x6d417a20, + // Block 0x9a3, offset 0x268c0 + 0x268eb: 0x6d2fd620, + 0x268fd: 0x6cb01220, + // Block 0x9a4, offset 0x26900 + 0x26900: 0x6c23fa20, + 0x26906: 0x6c42e220, 0x26907: 0x6c31b620, + 0x26909: 0x6c3da420, 0x2690a: 0x6c492620, 0x2690b: 0x6ccae620, + 0x2690c: 0x6cda2a20, 0x2690d: 0x6c65da20, 0x2690e: 0x6cb3e020, + 0x26910: 0x6c11ac20, 0x26911: 0x6c085020, 0x26912: 0x6ca20c20, 0x26913: 0x6d2f7420, + 0x26914: 0x6cff9a20, 0x26916: 0x6c715c20, 0x26917: 0x6cd50620, + 0x26918: 0x6c65dc20, 0x26919: 0x6c844e20, 0x2691b: 0x6c203e20, + 0x2691c: 0x6c81e220, 0x2691e: 0x6c51ea20, 0x2691f: 0x6c55bc20, + 0x26920: 0x6c473220, 0x26921: 0x6d2f0c20, 0x26922: 0x6c6b3620, 0x26923: 0x6cfe5620, + 0x26925: 0x6c317820, 0x26926: 0x6c4e3220, 0x26927: 0x6c63e820, + 0x26928: 0x6cfe5820, 0x26929: 0x6c60ae20, 0x2692a: 0x6cd56c20, 0x2692b: 0x6c812e20, + 0x2692c: 0x6c5f4220, 0x2692d: 0x6ccd0e20, + 0x26930: 0x6ce1ee20, 0x26931: 0x6d3e8e20, 0x26932: 0x6cd69620, + 0x26934: 0x6c60b020, 0x26935: 0x6c1f7820, 0x26936: 0x6c628020, 0x26937: 0x6cd01c20, + 0x26938: 0x6c8c6820, 0x26939: 0x6c8a2020, 0x2693b: 0x6cca2a20, + 0x2693d: 0x6c019220, 0x2693e: 0x6cc87c20, + // Block 0x9a5, offset 0x26940 + 0x26940: 0x6ce37820, 0x26941: 0x6c28b820, 0x26943: 0x6c589c20, + 0x26945: 0x6cc99420, + // Block 0x9a6, offset 0x26980 + 0x26986: 0x6cc8a420, 0x26987: 0x6cf38020, + 0x26988: 0x6c729620, 0x26989: 0x6c589e20, 0x2698a: 0x6c838620, 0x2698b: 0x6c92dc20, + 0x2698e: 0x6cdfbe20, 0x2698f: 0x6d2b9620, + 0x26993: 0x6cb9ca20, + 0x26997: 0x6cf6d820, + 0x269a1: 0x6c22a220, 0x269a2: 0x6ccf2620, + 0x269a7: 0x6cc99620, + 0x269aa: 0x6c99bc20, 0x269ab: 0x6cc1da20, + 0x269ad: 0x6c0f7a20, 0x269ae: 0x6c41f020, + 0x269b0: 0x6cbcea20, 0x269b1: 0x6c739a20, 0x269b2: 0x6c290e20, 0x269b3: 0x6c16cc20, + 0x269b4: 0x6d0fde20, 0x269b5: 0x6c518020, 0x269b7: 0x6c5f5c20, + 0x269b9: 0x6c0df820, 0x269bb: 0x6c9a3020, + 0x269bf: 0x6c33b820, + // Block 0x9a7, offset 0x269c0 + 0x269c0: 0x6c02b020, 0x269c1: 0x6c6dd820, 0x269c2: 0x6c92f420, 0x269c3: 0x6c9e6620, + 0x269c4: 0x6c2d8a20, 0x269c5: 0x6c51f220, 0x269c7: 0x6c650420, + 0x269ca: 0x6c575e20, 0x269cb: 0x6c466220, + 0x269ce: 0x6c92f620, 0x269cf: 0x6c3f0a20, + 0x269d0: 0x6c5b7220, 0x269d2: 0x6d2b6620, + 0x269d4: 0x6c6d6220, 0x269d5: 0x6cd83420, 0x269d6: 0x6cc43e20, + 0x269dc: 0x6c28cc20, 0x269de: 0x6ced9e20, 0x269df: 0x6c0b5620, + 0x269e4: 0x6c63ee20, + 0x269eb: 0x6c284e20, + 0x269ec: 0x6c6f8a20, 0x269ed: 0x6cfb9c20, 0x269ee: 0x6c0f7c20, + // Block 0x9a8, offset 0x26a00 + 0x26a0f: 0x6cfa0020, + 0x26a11: 0x6c0c3220, + 0x26a15: 0x6cb3a820, + 0x26a18: 0x6ccae820, 0x26a19: 0x6c076620, 0x26a1a: 0x6ccc8020, 0x26a1b: 0x6cf02e20, + 0x26a1d: 0x6c123e20, 0x26a1e: 0x6c92f820, + 0x26a29: 0x6c28ce20, 0x26a2b: 0x6c47e820, + 0x26a2c: 0x6d289e20, 0x26a2d: 0x6c055820, 0x26a2e: 0x6c423820, + 0x26a31: 0x6c175420, 0x26a32: 0x6c62ae20, 0x26a33: 0x6c8ab620, + 0x26a35: 0x6cbf7e20, 0x26a36: 0x6c66f420, 0x26a37: 0x6c930a20, + 0x26a38: 0x6c32a620, 0x26a39: 0x6cdb8a20, 0x26a3a: 0x6d116020, 0x26a3b: 0x6d1b1620, + 0x26a3d: 0x6cdec220, 0x26a3e: 0x6d116220, 0x26a3f: 0x6c6de020, + // Block 0x9a9, offset 0x26a40 + 0x26a40: 0x6c1ebc20, 0x26a41: 0x6c3f1220, 0x26a42: 0x6d25c220, 0x26a43: 0x6ccebc20, + 0x26a45: 0x6c0e3620, 0x26a46: 0x6c299e20, 0x26a47: 0x6cd3f820, + 0x26a4a: 0x6c916420, 0x26a4b: 0x6cbcf220, + 0x26a4c: 0x6c955c20, 0x26a4d: 0x6cb3ae20, 0x26a4f: 0x6c9b7a20, + 0x26a50: 0x6c6b6620, 0x26a53: 0x6c5f7220, + 0x26a56: 0x6c930c20, + // Block 0x9aa, offset 0x26a80 + 0x26a84: 0x6c172a20, 0x26a85: 0x6c9f0020, 0x26a86: 0x6c9b7c20, 0x26a87: 0x6c660220, + 0x26a8a: 0x6c114020, + 0x26a8c: 0x6cdb5220, + 0x26a94: 0x6c51fe20, 0x26a95: 0x6cc9aa20, 0x26a97: 0x6d3eae20, + 0x26a98: 0x6c795e20, 0x26a99: 0x6c452220, 0x26a9a: 0x6cd83a20, + 0x26aa0: 0x6ce3a420, 0x26aa1: 0x6d2e8e20, 0x26aa2: 0x6d026420, 0x26aa3: 0x6cd70020, + 0x26aa4: 0x6c1bcc20, 0x26aa5: 0x6d1ec620, 0x26aa6: 0x6c91f820, 0x26aa7: 0x6c9c1a20, + 0x26aa8: 0x6c8b6020, 0x26aa9: 0x6cd8f620, + 0x26aac: 0x6cf71820, 0x26aad: 0x6c38da20, 0x26aae: 0x6c3db820, 0x26aaf: 0x6cd08820, + 0x26ab0: 0x6ce3a620, 0x26ab1: 0x6c14a420, 0x26ab2: 0x6d270620, + 0x26ab4: 0x6c3dba20, 0x26ab5: 0x6c670220, 0x26ab6: 0x6c2cb020, + 0x26aba: 0x6d011a20, 0x26abb: 0x6c281220, + 0x26abf: 0x6d34b020, + // Block 0x9ab, offset 0x26ac0 + 0x26ac3: 0x6d075620, + 0x26ac8: 0x6ca89820, 0x26ac9: 0x6c397420, 0x26aca: 0x6c9b8820, 0x26acb: 0x6c9fd420, + 0x26afe: 0x6c90d220, 0x26aff: 0x6c31e820, + // Block 0x9ac, offset 0x26b00 + 0x26b01: 0x6d2e9620, 0x26b02: 0x6c671020, 0x26b03: 0x6c4f2e20, + 0x26b04: 0x6c28e220, 0x26b05: 0x6ccbb220, 0x26b06: 0x6c671220, 0x26b07: 0x6ce03e20, + 0x26b08: 0x6c696c20, 0x26b09: 0x6cb34220, 0x26b0b: 0x6cb2e420, + 0x26b0d: 0x6d3bf820, 0x26b0f: 0x6c8a4c20, + 0x26b10: 0x6d3f6620, 0x26b12: 0x6d3dd820, + 0x26b14: 0x6c56de20, + 0x26b19: 0x6cf92020, 0x26b1b: 0x6c9b9620, + 0x26b1c: 0x6c72ba20, 0x26b1d: 0x6c9f0c20, 0x26b1e: 0x6cfbcc20, + 0x26b20: 0x6c7d3820, 0x26b21: 0x6c9b9820, 0x26b22: 0x6c653420, + 0x26b26: 0x6caa0a20, + 0x26b28: 0x6c2cb220, 0x26b29: 0x6ccad220, + // Block 0x9ad, offset 0x26b40 + 0x26b4f: 0x6c1f8c20, + 0x26b50: 0x6d34bc20, 0x26b51: 0x6cb9e220, 0x26b52: 0x6c93c420, + 0x26b54: 0x6d3ddc20, + 0x26b58: 0x6d42b020, 0x26b59: 0x6c4e4820, 0x26b5a: 0x6cdc1820, 0x26b5b: 0x6c46e220, + 0x26b5d: 0x6c1e3c20, 0x26b5e: 0x6c62da20, 0x26b5f: 0x6d194820, + 0x26b60: 0x6d21f020, + 0x26b68: 0x6caa0c20, 0x26b69: 0x6ca66420, 0x26b6a: 0x6cc93620, + 0x26b6e: 0x6c8c0820, + 0x26b71: 0x6ca93820, + // Block 0x9ae, offset 0x26b80 + 0x26b8d: 0x6cbc1620, 0x26b8e: 0x6d117c20, 0x26b8f: 0x6c409c20, + 0x26b90: 0x6cd6b620, 0x26b91: 0x6c7d3e20, 0x26b92: 0x6cc21220, 0x26b93: 0x6c304a20, + 0x26b94: 0x6cd58a20, + 0x26b9a: 0x6c84c020, 0x26b9b: 0x6c719220, + 0x26b9c: 0x6cc8bc20, + 0x26ba0: 0x6d2c6c20, + 0x26ba4: 0x6cff5420, + 0x26bb8: 0x6c9ae220, 0x26bb9: 0x6cd29820, 0x26bba: 0x6c2cfc20, 0x26bbb: 0x6c878e20, + 0x26bbc: 0x6c2b0420, 0x26bbd: 0x6d29c420, 0x26bbf: 0x6c958420, + // Block 0x9af, offset 0x26bc0 + 0x26bc0: 0x6c11c620, 0x26bc3: 0x6c023c20, + 0x26bc6: 0x6c663620, + 0x26bc8: 0x6c2e5020, 0x26bcb: 0x6d1cd820, + 0x26bd6: 0x6d197220, 0x26bd7: 0x6c294620, + 0x26bd8: 0x6caa1220, 0x26bda: 0x6d272620, + 0x26bee: 0x6c855620, 0x26bef: 0x6c84e220, + 0x26bf0: 0x6c56f620, 0x26bf2: 0x6d206420, + 0x26bfa: 0x6ca48420, + // Block 0x9b0, offset 0x26c00 + 0x26c02: 0x6c194a20, + 0x26c09: 0x6c3c9220, 0x26c0a: 0x6c0cd220, + 0x26c0f: 0x6c97d820, + 0x26c10: 0x6c424a20, 0x26c11: 0x6c5e6020, 0x26c13: 0x6c241c20, + 0x26c15: 0x6d200020, + 0x26c18: 0x6d206620, + 0x26c1c: 0x6d057c20, + 0x26c21: 0x6d06b020, 0x26c22: 0x6c561820, 0x26c23: 0x6c915020, + 0x26c25: 0x6cf9b820, 0x26c26: 0x6d177420, + 0x26c2e: 0x6c561e20, 0x26c2f: 0x6c569020, + 0x26c30: 0x6d3f0a20, + 0x26c37: 0x6c458c20, + 0x26c38: 0x6ce99220, 0x26c39: 0x6cf36a20, 0x26c3a: 0x6c8d2020, 0x26c3b: 0x6c472020, + 0x26c3c: 0x6d37be20, + // Block 0x9b1, offset 0x26c40 + 0x26c44: 0x6c915820, + 0x26c48: 0x6d412e20, + 0x26c4c: 0x6ce76a20, 0x26c4d: 0x6cf97020, 0x26c4e: 0x6c515c20, + 0x26c53: 0x6d26e220, + 0x26c59: 0x6ca40c20, 0x26c5a: 0x6c0f4820, 0x26c5b: 0x6c54fa20, + 0x26c5c: 0x6cb7e220, 0x26c5d: 0x6cd53a20, 0x26c5e: 0x6cbadc20, 0x26c5f: 0x6d38ae20, + 0x26c60: 0x6d122620, 0x26c61: 0x6c473420, + 0x26c65: 0x6c049e20, 0x26c66: 0x6c76ec20, + 0x26c6e: 0x6c517620, 0x26c6f: 0x6c628420, + 0x26c70: 0x6c55be20, 0x26c71: 0x6d0cde20, + 0x26c76: 0x6c212020, 0x26c77: 0x6c2f8620, + 0x26c78: 0x6cbfce20, 0x26c79: 0x6c543620, + 0x26c7c: 0x6c507420, 0x26c7f: 0x6d413220, + // Block 0x9b2, offset 0x26c80 + 0x26c81: 0x6cfbb820, + 0x26c84: 0x6cfa5220, 0x26c85: 0x6cf91820, + 0x26c88: 0x6ccb8420, + 0x26c8c: 0x6c445a20, 0x26c8d: 0x6cf92220, + 0x26c91: 0x6c445e20, + 0x26c94: 0x6c93c620, 0x26c96: 0x6c446020, 0x26c97: 0x6c78ea20, + 0x26c99: 0x6cd48a20, 0x26c9a: 0x6d3b5020, + 0x26c9c: 0x6ce2de20, 0x26c9d: 0x6d0b7820, 0x26c9e: 0x6ca67c20, + 0x26ca6: 0x6c95e220, 0x26ca7: 0x6cdbae20, + 0x26caa: 0x6c159e20, + 0x26cad: 0x6cf4cc20, 0x26caf: 0x6d208220, + 0x26cb9: 0x6d2a4420, 0x26cbb: 0x6d174420, + 0x26cbc: 0x6cf5d220, 0x26cbd: 0x6c533620, 0x26cbe: 0x6cc2ce20, 0x26cbf: 0x6cee0c20, + // Block 0x9b3, offset 0x26cc0 + 0x26cc0: 0x6c1b9820, 0x26cc1: 0x6cf87420, 0x26cc2: 0x6ce4e020, 0x26cc3: 0x6d27e420, + 0x26cc5: 0x6d13e220, 0x26cc6: 0x6c600620, 0x26cc7: 0x6c5aaa20, + 0x26cc8: 0x6c3d1620, 0x26cca: 0x6c3f5420, + 0x26ccd: 0x6c600820, 0x26cce: 0x6d080a20, + 0x26cd1: 0x6cdf6c20, 0x26cd3: 0x6c324e20, + 0x26cd7: 0x6d255620, + 0x26cdb: 0x6c2c3220, + 0x26cde: 0x6d3a6620, 0x26cdf: 0x6cdf0620, + 0x26ce1: 0x6cc70c20, 0x26ce2: 0x6d090a20, 0x26ce3: 0x6d232020, + 0x26ce4: 0x6c394e20, 0x26ce5: 0x6c06ca20, 0x26ce7: 0x6cc24420, + 0x26ce9: 0x6c109620, 0x26cea: 0x6c635420, 0x26ceb: 0x6d2c2c20, + 0x26ced: 0x6caa5a20, 0x26cee: 0x6ccf1420, + 0x26cf2: 0x6c860220, + // Block 0x9b4, offset 0x26d00 + 0x26d04: 0x6c4af620, 0x26d05: 0x6c48de20, 0x26d07: 0x6c276420, + 0x26d0f: 0x6c40fa20, + 0x26d12: 0x6c22cc20, + 0x26d14: 0x6d0d9220, 0x26d15: 0x6cd92220, 0x26d16: 0x6cd38820, + 0x26d18: 0x6c7a9c20, 0x26d19: 0x6d352e20, 0x26d1a: 0x6ce75020, 0x26d1b: 0x6cc19620, + 0x26d1c: 0x6c364220, 0x26d1e: 0x6d03ea20, 0x26d1f: 0x6cc7b020, + 0x26d20: 0x6d213820, 0x26d23: 0x6d17c020, + 0x26d24: 0x6d17c220, 0x26d25: 0x6d06e420, 0x26d26: 0x6c3d2c20, 0x26d27: 0x6c43f820, + 0x26d2c: 0x6c512a20, 0x26d2d: 0x6d19e820, 0x26d2f: 0x6c53be20, + 0x26d31: 0x6c349820, + 0x26d3d: 0x6d03ec20, 0x26d3e: 0x6c38a220, + // Block 0x9b5, offset 0x26d40 + 0x26d49: 0x6cb50020, 0x26d4a: 0x6ccc0220, + 0x26d4c: 0x6c326a20, 0x26d4d: 0x6c2c7220, 0x26d4e: 0x6c83fa20, 0x26d4f: 0x6d180620, + 0x26d50: 0x6cf78c20, 0x26d51: 0x6c451420, 0x26d52: 0x6ce75820, 0x26d53: 0x6c77c020, + 0x26d54: 0x6c53c420, 0x26d55: 0x6c7db820, 0x26d56: 0x6ca84c20, 0x26d57: 0x6c1b3c20, + 0x26d58: 0x6ce34e20, 0x26d5a: 0x6ce75a20, + 0x26d60: 0x6c83fc20, 0x26d61: 0x6ca35c20, + 0x26d71: 0x6d2d8220, 0x26d72: 0x6c06cc20, + // Block 0x9b6, offset 0x26d80 + 0x26d81: 0x6ce59220, 0x26d83: 0x6d289420, + 0x26d84: 0x6c367420, 0x26d85: 0x6cd47620, 0x26d86: 0x6c798820, 0x26d87: 0x6caeb820, + 0x26d88: 0x6c402020, 0x26d89: 0x6c929820, 0x26d8a: 0x6d01e820, 0x26d8b: 0x6d01ea20, + 0x26d8c: 0x6d04e820, 0x26d8d: 0x6c929a20, 0x26d8e: 0x6ce50a20, 0x26d8f: 0x6cde8820, + 0x26d90: 0x6c22da20, 0x26d91: 0x6cc12a20, 0x26d93: 0x6c402220, + 0x26d94: 0x6d340620, 0x26d96: 0x6d01ec20, 0x26d97: 0x6d408220, + 0x26d98: 0x6c3abe20, 0x26d99: 0x6c9f7420, 0x26d9a: 0x6d038c20, + 0x26d9d: 0x6ce76c20, 0x26d9e: 0x6cb60220, + 0x26da0: 0x6cb15c20, 0x26da2: 0x6cdc5620, 0x26da3: 0x6c37a020, + 0x26da7: 0x6c562c20, + 0x26dbb: 0x6cd92e20, + 0x26dbd: 0x6c0cb020, 0x26dbe: 0x6c2f6620, 0x26dbf: 0x6c04d220, + // Block 0x9b7, offset 0x26dc0 + 0x26dc0: 0x6cd1e220, 0x26dc1: 0x6d01ee20, 0x26dc2: 0x6cff9420, 0x26dc3: 0x6c3a6620, + 0x26dd2: 0x6c202620, 0x26dd3: 0x6cd67020, + 0x26dd4: 0x6d10b220, 0x26dd5: 0x6c74a220, 0x26dd6: 0x6cd14820, + 0x26dd8: 0x6d1eb220, 0x26dd9: 0x6c396c20, + 0x26ddc: 0x6c7c9a20, 0x26ddd: 0x6c2c9820, 0x26ddf: 0x6c990220, + 0x26de0: 0x6c6b2420, 0x26de2: 0x6d0cc820, + 0x26de5: 0x6ceeb420, + 0x26de8: 0x6cca7220, 0x26de9: 0x6c6b2620, 0x26dea: 0x6d219220, 0x26deb: 0x6cf0c820, + 0x26dec: 0x6c369220, 0x26ded: 0x6cc31220, 0x26dee: 0x6c6f2e20, 0x26def: 0x6c3cba20, + 0x26df0: 0x6c8fa620, 0x26df1: 0x6c2ee220, 0x26df2: 0x6cb12420, + 0x26df4: 0x6c891420, 0x26df5: 0x6c559820, 0x26df6: 0x6c93fa20, + 0x26dff: 0x6c2d7a20, + // Block 0x9b8, offset 0x26e00 + 0x26e03: 0x6c255e20, + 0x26e04: 0x6ca1e420, + 0x26e15: 0x6cedea20, 0x26e16: 0x6c72fe20, 0x26e17: 0x6c782e20, + 0x26e18: 0x6d0cca20, 0x26e19: 0x6c693420, + 0x26e21: 0x6c45b020, 0x26e23: 0x6cc6b620, + 0x26e24: 0x6cdce220, 0x26e25: 0x6ccdb620, + 0x26e28: 0x6c1b5420, 0x26e2a: 0x6cb65220, 0x26e2b: 0x6cdd9820, + 0x26e2d: 0x6d134420, 0x26e2e: 0x6d2a5420, 0x26e2f: 0x6cc39620, + 0x26e30: 0x6d2e1820, 0x26e31: 0x6c035a20, 0x26e32: 0x6d40d620, 0x26e33: 0x6cdd9a20, + 0x26e34: 0x6d309220, 0x26e35: 0x6cf8e820, 0x26e37: 0x6c1eec20, + 0x26e38: 0x6c694820, 0x26e39: 0x6d41d220, 0x26e3a: 0x6c43aa20, 0x26e3b: 0x6cf52420, + 0x26e3e: 0x6c94c020, 0x26e3f: 0x6c60b420, + // Block 0x9b9, offset 0x26e40 + 0x26e42: 0x6d00ec20, 0x26e43: 0x6d00ee20, + 0x26e46: 0x6c30f620, + 0x26e4b: 0x6cbfc620, + 0x26e51: 0x6cb2d020, 0x26e53: 0x6c8ea420, + 0x26e65: 0x6c6b3820, 0x26e67: 0x6c5c4020, + 0x26e6b: 0x6ccc7a20, + 0x26e78: 0x6d34a620, 0x26e79: 0x6c00e620, 0x26e7a: 0x6d074a20, 0x26e7b: 0x6c0a7820, + 0x26e7d: 0x6d126820, 0x26e7e: 0x6ca6d820, 0x26e7f: 0x6d3a2e20, + // Block 0x9ba, offset 0x26e80 + 0x26e81: 0x6cdb4220, 0x26e83: 0x6d010220, + 0x26e84: 0x6d241820, 0x26e85: 0x6cc14820, + 0x26e88: 0x6d40e020, 0x26e89: 0x6d341820, 0x26e8a: 0x6d2ee420, 0x26e8b: 0x6c94c420, + 0x26e8c: 0x6cf03020, 0x26e8d: 0x6c1ce820, 0x26e8e: 0x6c9d9620, + 0x26e90: 0x6c5f5e20, 0x26e92: 0x6cdb4420, 0x26e93: 0x6d12b620, + 0x26e94: 0x6cf7ac20, 0x26e95: 0x6ce96420, 0x26e96: 0x6c886c20, 0x26e97: 0x6d082e20, + 0x26e99: 0x6cf52c20, + 0x26e9f: 0x6c990c20, + 0x26eac: 0x6c538e20, 0x26eaf: 0x6c94c620, + 0x26eb0: 0x6c31ce20, 0x26eb1: 0x6c23ba20, 0x26eb2: 0x6c152e20, 0x26eb3: 0x6c92fc20, + 0x26eb4: 0x6cdb4620, + // Block 0x9bb, offset 0x26ec0 + 0x26ec0: 0x6c94c820, + 0x26ec6: 0x6d37d220, 0x26ec7: 0x6c847420, + 0x26ec8: 0x6c3ae220, 0x26eca: 0x6c6e3820, 0x26ecb: 0x6c7d2c20, + 0x26ecc: 0x6d18f420, 0x26ecd: 0x6c576620, 0x26ece: 0x6c258020, + 0x26ed0: 0x6d243c20, 0x26ed1: 0x6c083620, 0x26ed2: 0x6cea3020, 0x26ed3: 0x6cd58020, + 0x26ed4: 0x6c27a220, 0x26ed5: 0x6cf38a20, 0x26ed6: 0x6c22ea20, 0x26ed7: 0x6ca95e20, + 0x26ed8: 0x6c29a020, 0x26ed9: 0x6d40ee20, 0x26eda: 0x6c4e4220, + 0x26edc: 0x6cb02e20, 0x26edd: 0x6c204620, + 0x26ee0: 0x6c328620, 0x26ee1: 0x6cabe020, + 0x26ee4: 0x6d39d620, 0x26ee6: 0x6d011620, 0x26ee7: 0x6d30ac20, + 0x26ee8: 0x6cbcf420, 0x26ee9: 0x6d07dc20, 0x26eeb: 0x6ccb0820, + // Block 0x9bc, offset 0x26f00 + 0x26f00: 0x6c0a9620, 0x26f02: 0x6c407c20, + 0x26f08: 0x6c86d820, + 0x26f0e: 0x6c359620, + 0x26f10: 0x6d126e20, 0x26f11: 0x6cd58420, 0x26f13: 0x6ccb8620, + 0x26f15: 0x6cb54a20, 0x26f16: 0x6c4cf220, 0x26f17: 0x6ccb8820, + 0x26f19: 0x6c408620, 0x26f1a: 0x6c990e20, + 0x26f1c: 0x6c827620, 0x26f1d: 0x6d2db420, + 0x26f28: 0x6c14a620, + 0x26f2d: 0x6cf0fc20, + 0x26f3d: 0x6c827820, 0x26f3f: 0x6d2b6c20, + // Block 0x9bd, offset 0x26f40 + 0x26f40: 0x6d1c0e20, 0x26f41: 0x6c010220, 0x26f42: 0x6d005c20, + 0x26f44: 0x6c0aaa20, + 0x26f4b: 0x6c155a20, + 0x26f4e: 0x6cb03620, 0x26f4f: 0x6c23c220, + 0x26f50: 0x6c8b6620, 0x26f51: 0x6cb69c20, 0x26f53: 0x6c62d420, + 0x26f54: 0x6c6df220, 0x26f55: 0x6c302820, 0x26f56: 0x6c3a4620, 0x26f57: 0x6d159220, + 0x26f58: 0x6ce97220, + 0x26f68: 0x6c9bf620, 0x26f69: 0x6c11be20, 0x26f6a: 0x6d0b3c20, + 0x26f72: 0x6d103c20, + 0x26f74: 0x6ce6a220, + 0x26f78: 0x6d34be20, 0x26f7a: 0x6d027c20, 0x26f7b: 0x6c942220, + 0x26f7d: 0x6c875420, 0x26f7f: 0x6c991620, + // Block 0x9be, offset 0x26f80 + 0x26f82: 0x6cfa1820, + 0x26f85: 0x6cda4420, + 0x26f96: 0x6cda6c20, 0x26f97: 0x6d097e20, + 0x26f9d: 0x6c877a20, 0x26f9e: 0x6d25d820, + 0x26fa1: 0x6d2e4020, 0x26fa3: 0x6cdef220, + 0x26fa4: 0x6d083a20, 0x26fa5: 0x6cf12020, 0x26fa6: 0x6d139620, 0x26fa7: 0x6cad1a20, + 0x26fa8: 0x6c991820, 0x26fa9: 0x6ce3b620, 0x26faa: 0x6cb22a20, + 0x26fac: 0x6c328e20, 0x26fad: 0x6cc0a820, 0x26fae: 0x6d162c20, + 0x26fb3: 0x6ceb6020, + 0x26fb4: 0x6c14aa20, 0x26fb7: 0x6c6d7620, + 0x26fbc: 0x6c35aa20, + // Block 0x9bf, offset 0x26fc0 + 0x26fc3: 0x6c157420, + 0x26fc4: 0x6d1c4420, 0x26fc5: 0x6c8dae20, 0x26fc7: 0x6cfc5e20, + 0x26fc9: 0x6cb55a20, 0x26fcb: 0x6d272220, + 0x26fcc: 0x6c94ce20, 0x26fcd: 0x6d1cda20, 0x26fce: 0x6cc21a20, + 0x26fd2: 0x6c3a7820, 0x26fd3: 0x6d3eca20, + 0x26fd9: 0x6cbe6220, + 0x26fdd: 0x6ca94020, 0x26fde: 0x6cf13220, 0x26fdf: 0x6cd6c220, + 0x26fe1: 0x6c40a420, + 0x26fe4: 0x6ca1aa20, 0x26fe5: 0x6ca1ac20, 0x26fe6: 0x6ceb6820, 0x26fe7: 0x6c14ae20, + 0x26fe8: 0x6d2a1220, + 0x26fee: 0x6c84da20, 0x26fef: 0x6c84e420, + 0x26ff1: 0x6cfa2020, 0x26ff2: 0x6c733420, + 0x26ff4: 0x6ca41a20, 0x26ff5: 0x6c9db420, + 0x26ff8: 0x6c5a3e20, 0x26ffa: 0x6cd6f620, + 0x26ffc: 0x6d066420, 0x26fff: 0x6c3a7a20, + // Block 0x9c0, offset 0x27000 + 0x27001: 0x6d029420, + 0x27006: 0x6cdefa20, 0x27007: 0x6d1e6a20, + 0x27009: 0x6d2e4420, + 0x27011: 0x6cbb3420, 0x27012: 0x6ca46a20, + 0x27014: 0x6c8c9420, + 0x27018: 0x6c948220, 0x27019: 0x6cfc6e20, 0x2701a: 0x6c3f2c20, + 0x2701c: 0x6c8df820, + 0x27020: 0x6ccadc20, 0x27022: 0x6c5ca620, + 0x27028: 0x6ce66020, 0x2702a: 0x6cbe7020, + 0x2702c: 0x6c598a20, 0x2702e: 0x6c01b220, + 0x27035: 0x6c97c220, 0x27037: 0x6ca6b220, + 0x2703b: 0x6c4c8020, + 0x2703c: 0x6cab8820, 0x2703f: 0x6cfe4620, + // Block 0x9c1, offset 0x27040 + 0x27041: 0x6c6c5620, + 0x27046: 0x6d32f620, + 0x27048: 0x6ca2cc20, 0x2704b: 0x6cca5e20, + 0x2704c: 0x6c56d020, 0x2704e: 0x6d40f020, 0x2704f: 0x6c5b7620, + 0x27052: 0x6c5f7420, + 0x27056: 0x6d138a20, + 0x27066: 0x6d03de20, + 0x27069: 0x6c7e6c20, 0x2706a: 0x6d232220, 0x2706b: 0x6c745820, + 0x27071: 0x6cd5da20, 0x27072: 0x6d32d620, + 0x27074: 0x6d1e4e20, 0x27076: 0x6c439c20, + 0x27078: 0x6c66ae20, 0x27079: 0x6d034820, + 0x2707c: 0x6c5aec20, 0x2707f: 0x6cd67820, + // Block 0x9c2, offset 0x27080 + 0x27082: 0x6c1cf020, 0x27083: 0x6c4f8a20, + 0x27088: 0x6c8a6420, + 0x2708d: 0x6c674a20, 0x2708f: 0x6c456c20, + 0x27091: 0x6d3d3020, + 0x27097: 0x6cb6de20, + 0x2709c: 0x6cb8b820, 0x2709e: 0x6c30e220, 0x2709f: 0x6cb30220, + 0x270a2: 0x6c567a20, + 0x270a5: 0x6ca98c20, 0x270a7: 0x6cb76420, + 0x270a8: 0x6c2db420, 0x270a9: 0x6c2db620, 0x270ab: 0x6c85b220, + 0x270ae: 0x6d046220, + 0x270bd: 0x6ca2da20, 0x270bf: 0x6d32a620, + // Block 0x9c3, offset 0x270c0 + 0x270c0: 0x6c7e6e20, 0x270c1: 0x6d35cc20, 0x270c3: 0x6c35b220, + 0x270c4: 0x6c0e6620, 0x270c5: 0x6cb30620, 0x270c6: 0x6d058420, 0x270c7: 0x6d1e7a20, + 0x270c8: 0x6c223c20, 0x270c9: 0x6c85e220, + 0x270cc: 0x6cad5820, 0x270cf: 0x6d053a20, + 0x270db: 0x6cb4a820, + 0x270dd: 0x6c17e420, 0x270de: 0x6cb78420, + 0x270e1: 0x6d177620, 0x270e3: 0x6ce31c20, + 0x270e4: 0x6c348820, 0x270e5: 0x6c8f9020, 0x270e7: 0x6c668020, + 0x270ed: 0x6d2e6020, 0x270ee: 0x6d261220, + 0x270f6: 0x6d210820, + 0x270f8: 0x6c44ca20, 0x270fa: 0x6c546c20, + 0x270fe: 0x6cb6f820, + // Block 0x9c4, offset 0x27100 + 0x27100: 0x6ca28c20, 0x27101: 0x6c592a20, 0x27102: 0x6c906a20, 0x27103: 0x6cf89420, + 0x27104: 0x6c356c20, 0x27105: 0x6c80fe20, 0x27106: 0x6c3aae20, 0x27107: 0x6ced2820, + 0x27109: 0x6c259620, 0x2710b: 0x6caea420, + 0x2710f: 0x6c262c20, + 0x27110: 0x6cf22420, + 0x27121: 0x6c430620, + 0x27125: 0x6c254820, + 0x27128: 0x6cb7a620, 0x27129: 0x6c83fe20, 0x2712a: 0x6cbcc820, 0x2712b: 0x6cba6020, + 0x2712c: 0x6c798220, 0x2712d: 0x6c082220, 0x2712f: 0x6cd46c20, + 0x27137: 0x6ceea220, + // Block 0x9c5, offset 0x27140 + 0x27144: 0x6cccf220, + 0x2714f: 0x6d3e6e20, + 0x27152: 0x6ce40c20, 0x27153: 0x6cb90e20, + 0x27154: 0x6c31ac20, 0x27157: 0x6ce8dc20, + 0x2715a: 0x6ceeaa20, + 0x2715e: 0x6c558420, 0x2715f: 0x6d038e20, + 0x27161: 0x6ccd0220, 0x27162: 0x6d354a20, + 0x27167: 0x6c1bb820, + 0x27178: 0x6d394a20, 0x27179: 0x6cf23620, 0x2717a: 0x6c1b4c20, 0x2717b: 0x6cdd9420, + 0x2717c: 0x6d020220, 0x2717e: 0x6c78d220, + // Block 0x9c6, offset 0x27180 + 0x27181: 0x6ccca220, 0x27182: 0x6cd1f220, 0x27183: 0x6cd47820, + 0x27185: 0x6c6bfc20, + 0x27189: 0x6c431c20, 0x2718a: 0x6c93b220, + 0x27194: 0x6d020420, + 0x2719a: 0x6d354c20, + 0x2719e: 0x6c978220, + 0x271a0: 0x6cd67420, 0x271a1: 0x6c78da20, 0x271a3: 0x6c2dfe20, + 0x271a4: 0x6d141a20, 0x271a6: 0x6cdb2420, 0x271a7: 0x6c206420, + 0x271b1: 0x6c256820, 0x271b2: 0x6cebb220, + 0x271b5: 0x6d022020, + 0x271bd: 0x6d082620, + // Block 0x9c7, offset 0x271c0 + 0x271c2: 0x6c51f420, 0x271c3: 0x6c74ce20, + 0x271c6: 0x6ce43020, 0x271c7: 0x6c3ada20, + 0x271c9: 0x6d355620, 0x271ca: 0x6cd3e820, 0x271cb: 0x6ce9c620, + 0x271ce: 0x6c1cea20, + 0x271d0: 0x6ce43220, 0x271d1: 0x6d2e8820, 0x271d2: 0x6c527820, + 0x271d4: 0x6cc1de20, 0x271d5: 0x6cef4220, 0x271d7: 0x6c33ba20, + 0x271d8: 0x6c067220, + 0x271dc: 0x6c8a2c20, + 0x271e4: 0x6cd83620, + 0x271ea: 0x6c0c8420, 0x271eb: 0x6d023420, + 0x271ec: 0x6c0cfc20, 0x271ee: 0x6c23d820, + 0x271f2: 0x6c72ac20, 0x271f3: 0x6c518820, + 0x271f7: 0x6c7d3020, + 0x271f8: 0x6d1dc820, + // Block 0x9c8, offset 0x27200 + 0x27200: 0x6cd62220, + 0x2720d: 0x6ca89a20, 0x2720f: 0x6d21da20, + 0x27210: 0x6d3dca20, 0x27211: 0x6c9b8c20, 0x27212: 0x6c55f220, + 0x27215: 0x6c8b6220, + 0x2721d: 0x6c6a4020, 0x2721e: 0x6d048220, + 0x27223: 0x6d0e0020, + 0x27229: 0x6c6b7a20, 0x2722a: 0x6c7eb820, 0x2722b: 0x6cd62e20, + 0x2722c: 0x6c6b7c20, 0x2722d: 0x6c828220, + 0x27230: 0x6d40fc20, 0x27232: 0x6cd40420, + 0x27238: 0x6cef6c20, 0x27239: 0x6c318620, 0x2723a: 0x6cdb6420, + // Block 0x9c9, offset 0x27240 + 0x27243: 0x6d012e20, + 0x27244: 0x6cc4f620, + 0x2724c: 0x6c964e20, + 0x27251: 0x6cb96420, + 0x27258: 0x6ca48620, 0x27259: 0x6c8dec20, + 0x2725c: 0x6c630620, + 0x27260: 0x6ca03e20, 0x27263: 0x6c476220, + 0x27268: 0x6d080c20, + 0x2726c: 0x6d058e20, + 0x27271: 0x6c0f3620, + 0x2727c: 0x6ceebc20, + // Block 0x9ca, offset 0x27280 + 0x27282: 0x6c7a6e20, + 0x27286: 0x6cecf020, + 0x27288: 0x6c143c20, 0x2728a: 0x6c996820, 0x2728b: 0x6c789a20, + 0x2728e: 0x6c22c420, + 0x27292: 0x6cfcbc20, 0x27293: 0x6ca11620, + 0x2729a: 0x6c5cc420, 0x2729b: 0x6c162c20, + 0x2729c: 0x6cd1c620, 0x2729d: 0x6d31dc20, 0x2729e: 0x6c364420, 0x2729f: 0x6c9c5a20, + 0x272a1: 0x6cd1c820, 0x272a2: 0x6cc11420, 0x272a3: 0x6cd4e420, + 0x272a5: 0x6c220420, 0x272a6: 0x6d0d9420, + 0x272a9: 0x6c54dc20, 0x272aa: 0x6cb50220, 0x272ab: 0x6d366c20, + 0x272ac: 0x6c599c20, + 0x272b4: 0x6d353820, 0x272b6: 0x6d1fda20, + 0x272bc: 0x6c435420, 0x272bd: 0x6d11c420, 0x272be: 0x6cb3cc20, + // Block 0x9cb, offset 0x272c0 + 0x272c7: 0x6d153620, + 0x272c8: 0x6c1a8420, 0x272c9: 0x6c625020, 0x272cb: 0x6c007420, + 0x272cd: 0x6c308620, 0x272cf: 0x6cdc6220, + 0x272d1: 0x6c701c20, + 0x272d8: 0x6cb7c820, 0x272d9: 0x6c884420, 0x272da: 0x6d085620, + 0x272dc: 0x6c8a7620, + 0x272e1: 0x6d285820, 0x272e2: 0x6d085a20, 0x272e3: 0x6c23e620, + 0x272e4: 0x6cb10020, 0x272e6: 0x6c7c9c20, + 0x272e8: 0x6ce37a20, 0x272e9: 0x6c58e020, 0x272ea: 0x6c280020, 0x272eb: 0x6c4b7820, + 0x272ec: 0x6c188a20, 0x272ee: 0x6cce3c20, 0x272ef: 0x6c628620, + 0x272f4: 0x6c891c20, 0x272f5: 0x6c76b620, 0x272f6: 0x6cd17820, + 0x272f8: 0x6c30cc20, 0x272f9: 0x6d1f8020, 0x272fa: 0x6cb66220, + 0x272fc: 0x6cffc620, + // Block 0x9cc, offset 0x27300 + 0x27302: 0x6d18f620, 0x27303: 0x6c90c420, + 0x27306: 0x6c206a20, + 0x2730b: 0x6c81e620, + 0x2730c: 0x6c42ec20, + 0x27310: 0x6d2ba220, 0x27312: 0x6cef6420, + 0x27316: 0x6c653620, + 0x2731b: 0x6d1c3220, + 0x2731c: 0x6c38f420, 0x2731d: 0x6c877c20, 0x2731e: 0x6cb94e20, + 0x27322: 0x6d125420, + 0x27326: 0x6c7c5a20, 0x27327: 0x6cef7a20, + 0x27329: 0x6cc42620, + 0x2732c: 0x6cffca20, 0x2732d: 0x6cc42820, + 0x27330: 0x6c551820, + 0x27335: 0x6c342020, 0x27336: 0x6c1f1e20, + 0x27339: 0x6ccfd620, + 0x2733c: 0x6d3d5620, 0x2733d: 0x6c355e20, 0x2733e: 0x6c61f820, + // Block 0x9cd, offset 0x27340 + 0x27341: 0x6cdfde20, 0x27343: 0x6cabc420, + 0x2734b: 0x6c6be220, + 0x2734c: 0x6cbc4220, + 0x27351: 0x6cb99620, 0x27352: 0x6c724c20, + 0x27355: 0x6cc06e20, 0x27356: 0x6ceb2220, + 0x2735a: 0x6caafa20, 0x2735b: 0x6cd8c620, + 0x2735f: 0x6d14fe20, + 0x27361: 0x6c47a220, 0x27362: 0x6c5d3220, 0x27363: 0x6cabda20, + 0x27364: 0x6d3e5a20, 0x27366: 0x6c685220, + 0x27369: 0x6cf80420, 0x2736a: 0x6cceb820, + 0x2736c: 0x6d153820, 0x2736d: 0x6d369e20, + 0x27375: 0x6c952420, 0x27377: 0x6d38a020, + 0x27378: 0x6c74a420, 0x27379: 0x6ce00620, 0x2737a: 0x6cab0c20, 0x2737b: 0x6c728020, + 0x2737c: 0x6c559c20, 0x2737e: 0x6d36c220, + // Block 0x9ce, offset 0x27380 + 0x27383: 0x6c088820, + 0x2738d: 0x6c1c7220, 0x2738e: 0x6d07d020, 0x2738f: 0x6c60b620, + 0x27390: 0x6c48a020, 0x27391: 0x6c715e20, 0x27392: 0x6cf31620, 0x27393: 0x6ceb4a20, + 0x27395: 0x6cc09820, 0x27396: 0x6ceebe20, 0x27397: 0x6c32a220, + 0x27399: 0x6cd47c20, 0x2739b: 0x6d31fe20, + 0x2739c: 0x6ca55420, 0x2739f: 0x6cf8f620, + 0x273a0: 0x6d30a420, 0x273a1: 0x6d371620, 0x273a3: 0x6ca2ea20, + 0x273a8: 0x6c650620, + 0x273ae: 0x6d114e20, 0x273af: 0x6c4c9820, + 0x273b2: 0x6c2c0820, + 0x273b4: 0x6c5e1c20, 0x273b5: 0x6c6de220, + 0x273bc: 0x6c74ec20, 0x273bd: 0x6d270820, + // Block 0x9cf, offset 0x273c0 + 0x273c4: 0x6c60ee20, 0x273c6: 0x6cdb5c20, + 0x273c8: 0x6c654020, 0x273ca: 0x6c7d9820, 0x273cb: 0x6cf33220, + 0x273cc: 0x6c7c1e20, 0x273cd: 0x6c0c6020, 0x273ce: 0x6c751220, + 0x273d1: 0x6c0ad620, 0x273d3: 0x6c157a20, + 0x273d5: 0x6d3ecc20, 0x273d6: 0x6c87c220, + 0x273da: 0x6c3d0e20, 0x273db: 0x6cb9f020, + 0x273dc: 0x6d0d4020, 0x273de: 0x6ce08c20, 0x273df: 0x6ca0d820, + 0x273e3: 0x6c79e420, + 0x273e4: 0x6cf5d420, + 0x273ee: 0x6c569220, 0x273ef: 0x6c569420, + 0x273f1: 0x6c3e7020, + 0x273f4: 0x6d104c20, 0x273f5: 0x6c4cea20, 0x273f7: 0x6cc57020, + 0x273f8: 0x6d1b4c20, 0x273f9: 0x6c3c4420, 0x273fa: 0x6c75b620, + 0x273fc: 0x6d27a620, 0x273ff: 0x6d0a8820, + // Block 0x9d0, offset 0x27400 + 0x27401: 0x6cf87c20, + 0x2740e: 0x6cf96220, + 0x27411: 0x6c4f7620, + 0x2741a: 0x6c569620, + 0x2741d: 0x6c54d020, 0x2741e: 0x6cb4aa20, 0x2741f: 0x6c385020, + 0x27424: 0x6c636420, 0x27427: 0x6d150420, + 0x2742d: 0x6ceac820, 0x2742e: 0x6ca2e220, + 0x27438: 0x6d1a6a20, 0x27439: 0x6d1b5a20, + // Block 0x9d1, offset 0x27440 + 0x27443: 0x6c622a20, + 0x27444: 0x6cee5620, 0x27445: 0x6cd3a420, 0x27446: 0x6c330c20, 0x27447: 0x6c34fc20, + 0x27449: 0x6ceb3020, 0x2744a: 0x6cebe620, 0x2744b: 0x6c863e20, + 0x2744f: 0x6cc55220, + 0x27452: 0x6c22d020, 0x27453: 0x6d070220, + 0x27454: 0x6d389020, 0x27455: 0x6d3f5a20, + 0x2745c: 0x6cee2a20, 0x2745d: 0x6d0b5820, 0x2745f: 0x6c622c20, + 0x27460: 0x6c179e20, + 0x27469: 0x6c606020, + 0x27475: 0x6ccd5420, 0x27476: 0x6ce8de20, + 0x27478: 0x6c0cf620, 0x27479: 0x6cf8be20, 0x2747a: 0x6caf7e20, 0x2747b: 0x6d2cd420, + 0x2747e: 0x6c5c0620, + // Block 0x9d2, offset 0x27480 + 0x27480: 0x6cdd3020, 0x27482: 0x6c51da20, + 0x27484: 0x6d265220, 0x27486: 0x6cf37c20, + 0x27488: 0x6c8d4020, 0x2748a: 0x6d2cd620, 0x2748b: 0x6c574a20, + 0x27497: 0x6c151220, + 0x2749f: 0x6c367620, + 0x274a1: 0x6c18e020, + 0x274a7: 0x6cdc6620, + 0x274a9: 0x6ce51420, + 0x274b0: 0x6d36c420, 0x274b1: 0x6ce41620, 0x274b2: 0x6c022e20, 0x274b3: 0x6d3d9020, + 0x274b4: 0x6d3f6020, 0x274b5: 0x6c783020, 0x274b7: 0x6ccb4e20, + 0x274b8: 0x6ce4c220, 0x274b9: 0x6c92b620, + 0x274be: 0x6ccd2620, 0x274bf: 0x6d2c9020, + // Block 0x9d3, offset 0x274c0 + 0x274c3: 0x6c1cde20, + 0x274c5: 0x6d0ea620, + 0x274d2: 0x6ca25420, 0x274d3: 0x6c54fc20, + 0x274da: 0x6c1ad420, + 0x274dd: 0x6cdb0a20, + 0x274e3: 0x6ca51420, + 0x274e6: 0x6c60b820, 0x274e7: 0x6c346020, + 0x274e8: 0x6c547e20, 0x274ea: 0x6c23de20, 0x274eb: 0x6d2c0220, + 0x274ec: 0x6d1a9c20, 0x274ee: 0x6cffbe20, + 0x274f0: 0x6c0bbc20, 0x274f1: 0x6c085220, 0x274f2: 0x6c7e9a20, + 0x274f4: 0x6c1ad820, 0x274f6: 0x6cb87820, + 0x274f8: 0x6c015220, 0x274f9: 0x6cd1fe20, + 0x274fc: 0x6c1c7420, + // Block 0x9d4, offset 0x27500 + 0x27505: 0x6caa6a20, 0x27507: 0x6c628820, + 0x27513: 0x6cab9220, + 0x27515: 0x6cf97a20, + 0x27518: 0x6c14a020, 0x2751a: 0x6c005620, + 0x2751d: 0x6cd17c20, 0x2751e: 0x6c518220, + 0x27520: 0x6c60ca20, 0x27521: 0x6c1ade20, 0x27522: 0x6cf8fa20, 0x27523: 0x6d32fe20, + 0x27526: 0x6cde0020, + 0x27528: 0x6c96e220, 0x2752b: 0x6caf9a20, + 0x2752e: 0x6d05f220, 0x2752f: 0x6cba2a20, + 0x27539: 0x6cfa4e20, + // Block 0x9d5, offset 0x27540 + 0x2754a: 0x6d241a20, + 0x27551: 0x6c6b4620, 0x27552: 0x6cfa5420, 0x27553: 0x6c91ee20, + 0x27555: 0x6cbcf620, 0x27557: 0x6c145220, + 0x2755b: 0x6d107020, + 0x2755c: 0x6c62b020, 0x2755d: 0x6ccc3620, 0x2755e: 0x6c912020, + 0x27560: 0x6c5f7620, 0x27561: 0x6d373020, 0x27562: 0x6cee5c20, + 0x27564: 0x6c0a9820, 0x27565: 0x6c015820, 0x27566: 0x6d142a20, 0x27567: 0x6c015a20, + 0x2756c: 0x6c847620, + 0x27579: 0x6cfaec20, + 0x2757e: 0x6c703620, 0x2757f: 0x6ce08420, + // Block 0x9d6, offset 0x27580 + 0x27581: 0x6c507a20, 0x27582: 0x6c520620, + 0x27585: 0x6d2c0620, 0x27586: 0x6d2e2e20, 0x27587: 0x6d191a20, + 0x27588: 0x6cf91a20, 0x2758a: 0x6cf91c20, 0x2758b: 0x6c384420, + 0x2758c: 0x6d0cf620, 0x2758f: 0x6ca25620, + 0x27595: 0x6c474020, + 0x2759e: 0x6d27d020, + 0x275a4: 0x6d384820, 0x275a6: 0x6c160220, 0x275a7: 0x6c208620, + 0x275a8: 0x6c5c8a20, 0x275a9: 0x6d28d620, 0x275aa: 0x6c4c0820, 0x275ab: 0x6c661c20, + 0x275ac: 0x6d0b3e20, + 0x275b0: 0x6cfe6820, 0x275b1: 0x6c520820, + // Block 0x9d7, offset 0x275c0 + 0x275c3: 0x6c28e820, + 0x275c7: 0x6c9df020, + 0x275c8: 0x6ca93a20, 0x275ca: 0x6c9ba620, + 0x275cc: 0x6c8b6e20, 0x275cd: 0x6d396a20, 0x275ce: 0x6cb42220, 0x275cf: 0x6cdf0a20, + 0x275d3: 0x6d1cd020, + 0x275d4: 0x6ce2cc20, 0x275d5: 0x6c4ca220, + 0x275da: 0x6cbb3020, + 0x275dc: 0x6c942420, 0x275dd: 0x6cc9b820, 0x275de: 0x6c8b7020, 0x275df: 0x6c1b6c20, + 0x275e0: 0x6d015020, 0x275e3: 0x6c4ca820, + 0x275e4: 0x6c067e20, 0x275e5: 0x6c964220, 0x275e6: 0x6c73a420, + 0x275ea: 0x6c36e820, + 0x275f3: 0x6c51a820, + 0x275f5: 0x6c9aba20, + 0x275f8: 0x6d028820, 0x275f9: 0x6cb22c20, 0x275fb: 0x6c4dc420, + 0x275fc: 0x6c194420, 0x275fd: 0x6ccdec20, 0x275fe: 0x6c5ca020, + // Block 0x9d8, offset 0x27600 + 0x27606: 0x6d1c4820, + 0x27608: 0x6c663e20, + 0x2760d: 0x6c016620, + 0x27611: 0x6cdef420, 0x27612: 0x6d144220, 0x27613: 0x6ce9dc20, + 0x27617: 0x6c8ef220, + 0x27619: 0x6d425a20, 0x2761b: 0x6c84ec20, + 0x2761d: 0x6cb23420, 0x2761e: 0x6d098420, + 0x27620: 0x6ca5a220, 0x27621: 0x6c315820, + 0x27624: 0x6c806c20, + 0x2762a: 0x6d2d5e20, 0x2762b: 0x6c73e620, + 0x2762c: 0x6d314620, 0x2762d: 0x6c600c20, 0x2762e: 0x6cb8ce20, + 0x27630: 0x6c4da220, 0x27631: 0x6c3b7220, 0x27633: 0x6c4da420, + 0x27634: 0x6c535620, 0x27635: 0x6c514620, 0x27636: 0x6c541a20, + 0x2763a: 0x6d2e7820, 0x2763b: 0x6c1dd420, + 0x2763c: 0x6cdf7e20, 0x2763d: 0x6cba7820, 0x2763f: 0x6ccf7420, + // Block 0x9d9, offset 0x27640 + 0x27640: 0x6d1bee20, 0x27643: 0x6cbd4020, + 0x27646: 0x6c5e0e20, + 0x27648: 0x6cf8fc20, 0x27649: 0x6c51f820, 0x2764a: 0x6cf90820, 0x2764b: 0x6cf97e20, + 0x2764c: 0x6c4fb620, 0x2764d: 0x6c81e820, 0x2764f: 0x6c870c20, + 0x27652: 0x6c19a220, + 0x27656: 0x6c760620, 0x27657: 0x6cf76020, + 0x27658: 0x6c4e7620, + 0x2765e: 0x6c311620, + 0x27660: 0x6c30ae20, 0x27661: 0x6cec9220, + 0x27664: 0x6c30b020, 0x27665: 0x6d293820, 0x27666: 0x6c737a20, + 0x27668: 0x6c90e620, 0x27669: 0x6c1f6220, 0x2766b: 0x6d32ea20, + 0x2766f: 0x6cb64420, + 0x27670: 0x6c770e20, 0x27671: 0x6c5df420, 0x27672: 0x6c7f2420, + 0x2767a: 0x6c410620, + 0x2767c: 0x6cd48220, 0x2767e: 0x6c301a20, + // Block 0x9da, offset 0x27680 + 0x27683: 0x6c90c820, + 0x27684: 0x6ce93e20, 0x27687: 0x6d21ca20, + 0x27688: 0x6cf52e20, 0x2768a: 0x6ce4ce20, + 0x27692: 0x6c4c9e20, + 0x27698: 0x6ce04420, 0x27699: 0x6cb6ae20, + 0x276a0: 0x6c8b8020, 0x276a1: 0x6c87b420, 0x276a3: 0x6d09d020, + 0x276a8: 0x6c452820, 0x276a9: 0x6ce63820, 0x276aa: 0x6c4ea220, 0x276ab: 0x6c1f2a20, + 0x276ad: 0x6cea4c20, 0x276af: 0x6d047a20, + 0x276b0: 0x6d1f3020, 0x276b1: 0x6ca11820, 0x276b2: 0x6c1ba420, + 0x276b4: 0x6c562020, 0x276b5: 0x6c317020, 0x276b7: 0x6ca24420, + 0x276b9: 0x6ca34420, 0x276bb: 0x6c8d0c20, + 0x276bf: 0x6c00ae20, + // Block 0x9db, offset 0x276c0 + 0x276c0: 0x6cfab020, + 0x276c4: 0x6c76e020, 0x276c5: 0x6cd8cc20, 0x276c6: 0x6cca0420, + 0x276ca: 0x6d180e20, + 0x276cf: 0x6d183c20, + 0x276d0: 0x6d000020, 0x276d2: 0x6d340820, 0x276d3: 0x6c313020, + 0x276d8: 0x6c973e20, + 0x276dc: 0x6c950a20, 0x276dd: 0x6c74a820, + 0x276e1: 0x6cbad620, 0x276e2: 0x6c8d4a20, + 0x276e9: 0x6cb12c20, 0x276ea: 0x6c23fc20, 0x276eb: 0x6c351820, + 0x276ec: 0x6d229420, + 0x276f0: 0x6d3d0a20, 0x276f2: 0x6cf8fe20, 0x276f3: 0x6c581620, + 0x276f4: 0x6ca02020, 0x276f5: 0x6ce14420, + 0x276f9: 0x6cb41820, 0x276fb: 0x6c9da420, + 0x276fc: 0x6c979020, 0x276fe: 0x6c48d420, + // Block 0x9dc, offset 0x27700 + 0x27700: 0x6cb93620, 0x27702: 0x6c8bfa20, 0x27703: 0x6c9fd620, + 0x27704: 0x6cf04e20, 0x27705: 0x6c136820, 0x27707: 0x6c56e220, + 0x27708: 0x6cdc0420, 0x2770b: 0x6c72bc20, + 0x2770c: 0x6ccc8420, 0x2770d: 0x6c9ba820, + 0x27717: 0x6cef7620, + 0x27718: 0x6cf75a20, 0x27719: 0x6c8e2a20, + 0x2771c: 0x6c0ad820, 0x2771d: 0x6cf13820, + 0x27721: 0x6c85b420, 0x27722: 0x6d304420, + 0x27724: 0x6d1df220, 0x27725: 0x6c554e20, 0x27726: 0x6cecda20, 0x27727: 0x6c034c20, + 0x27728: 0x6c649220, + 0x2772d: 0x6d426a20, 0x2772e: 0x6d2df220, 0x2772f: 0x6c0e7a20, + 0x27730: 0x6cbfb220, 0x27731: 0x6d0f5a20, + 0x27734: 0x6c300620, 0x27735: 0x6cc19820, + 0x2773a: 0x6caff820, 0x2773b: 0x6d2d2c20, + 0x2773e: 0x6cccf420, 0x2773f: 0x6c46bc20, + // Block 0x9dd, offset 0x27740 + 0x27740: 0x6c0c9020, 0x27741: 0x6d152220, 0x27742: 0x6c3eaa20, + 0x27744: 0x6d034020, 0x27745: 0x6cd3a620, 0x27746: 0x6ce6fc20, + 0x27749: 0x6c2f6220, + 0x2774c: 0x6ce86e20, 0x2774d: 0x6cfef620, 0x2774e: 0x6cf3e020, 0x2774f: 0x6cade420, + 0x27750: 0x6c5ade20, + 0x27755: 0x6c7f2220, + 0x27759: 0x6cd8e220, 0x2775a: 0x6c250220, 0x2775b: 0x6ccc7220, + 0x2775c: 0x6d38f020, 0x2775d: 0x6d2fd820, 0x2775e: 0x6cef3220, 0x2775f: 0x6c7f2620, + 0x27760: 0x6c0a3a20, 0x27763: 0x6c303e20, + 0x27766: 0x6ca51620, 0x27767: 0x6d005420, + 0x27768: 0x6cc54020, 0x27769: 0x6ce98e20, 0x2776a: 0x6cf0d820, 0x2776b: 0x6d1f7020, + 0x2776c: 0x6c9a2820, 0x2776d: 0x6d25b220, 0x2776e: 0x6d384220, + 0x27776: 0x6cd9ea20, + 0x27778: 0x6c474820, 0x27779: 0x6ccee620, 0x2777b: 0x6d2f9220, + 0x2777c: 0x6cb02820, 0x2777f: 0x6ce70820, + // Block 0x9de, offset 0x27780 + 0x27781: 0x6c1ae220, 0x27782: 0x6caedc20, 0x27783: 0x6c153c20, + 0x27784: 0x6d1dca20, 0x27785: 0x6cd6ea20, 0x27787: 0x6cf48420, + 0x27789: 0x6cb03020, 0x2778a: 0x6c596020, + 0x2778c: 0x6c3f1e20, 0x2778e: 0x6c0c9620, + 0x27793: 0x6ca4d020, + 0x27795: 0x6c0c9820, 0x27796: 0x6cf11420, 0x27797: 0x6d1dd620, + 0x27799: 0x6ca52620, 0x2779a: 0x6c48fe20, + 0x277a0: 0x6c879220, 0x277a2: 0x6d035e20, 0x277a3: 0x6d0d2220, + 0x277a4: 0x6cb37420, 0x277a5: 0x6cadca20, + 0x277aa: 0x6cdd5c20, + 0x277ac: 0x6cc5e220, 0x277ad: 0x6ccd3a20, + 0x277b2: 0x6cdd5e20, + 0x277b8: 0x6c27d620, 0x277ba: 0x6c9af020, + // Block 0x9df, offset 0x277c0 + 0x277c3: 0x6cd44820, + 0x277c8: 0x6c46a620, 0x277ca: 0x6c4da620, 0x277cb: 0x6cd39020, + 0x277cc: 0x6d102020, 0x277ce: 0x6c479620, + 0x277db: 0x6c77fe20, + 0x277de: 0x6c709c20, + 0x277e0: 0x6cac2e20, 0x277e1: 0x6c12f820, 0x277e2: 0x6c05b220, 0x277e3: 0x6d047020, + 0x277e4: 0x6c111420, 0x277e7: 0x6c8c2420, + 0x277e8: 0x6c00b020, + 0x277ec: 0x6c9d6220, 0x277ed: 0x6c7f3e20, + 0x277f1: 0x6cfee020, 0x277f3: 0x6ccf1e20, + 0x277fb: 0x6c5d7c20, + 0x277fc: 0x6ca6b420, + // Block 0x9e0, offset 0x27800 + 0x27804: 0x6d335620, 0x27806: 0x6c8c5c20, 0x27807: 0x6d2c4420, + 0x2780a: 0x6d27be20, + 0x2780d: 0x6d071c20, + 0x27814: 0x6c1a2a20, 0x27815: 0x6cf2c020, 0x27816: 0x6cf68620, + 0x27819: 0x6c074820, + 0x2781c: 0x6cce1c20, + 0x27820: 0x6d23d020, 0x27821: 0x6c9d8020, + 0x27832: 0x6c32b020, + 0x27835: 0x6c144a20, 0x27837: 0x6d2b0820, + 0x27838: 0x6c1a8820, 0x2783a: 0x6ce69220, + // Block 0x9e1, offset 0x27840 + 0x27845: 0x6d157020, + 0x2784b: 0x6d10ba20, + 0x2784e: 0x6c7a6620, + 0x27850: 0x6c3b9c20, 0x27851: 0x6d010420, 0x27852: 0x6c1a8a20, + 0x2785b: 0x6c7d2420, + 0x2785f: 0x6c0d6220, + 0x27861: 0x6c90cc20, + 0x27865: 0x6d18fa20, 0x27866: 0x6c9da620, 0x27867: 0x6d024620, + 0x27871: 0x6c4a9c20, 0x27873: 0x6c955e20, + 0x27876: 0x6ccdce20, + 0x2787e: 0x6c717a20, 0x2787f: 0x6c318420, + // Block 0x9e2, offset 0x27880 + 0x27882: 0x6cfaf220, + 0x27885: 0x6d356020, + 0x27888: 0x6c0d9020, + 0x27895: 0x6d356220, 0x27896: 0x6d3bfa20, 0x27897: 0x6d092a20, + 0x27898: 0x6c893020, 0x27899: 0x6cdcb220, + 0x278a6: 0x6c808c20, 0x278a7: 0x6c72cc20, + 0x278a8: 0x6c9df220, 0x278a9: 0x6d0ab420, 0x278aa: 0x6d2ea020, 0x278ab: 0x6c4c0c20, + 0x278b2: 0x6d376820, + 0x278bd: 0x6cf12c20, 0x278be: 0x6cc36a20, 0x278bf: 0x6c14ac20, + // Block 0x9e3, offset 0x278c0 + 0x278c8: 0x6cc63020, 0x278ca: 0x6d272820, + 0x278cc: 0x6d3ece20, + 0x278d0: 0x6c965420, 0x278d1: 0x6c4b3620, 0x278d3: 0x6c19f420, + 0x278d5: 0x6c709e20, 0x278d6: 0x6ce4fe20, 0x278d7: 0x6ced9820, + 0x278db: 0x6d33d820, + 0x278de: 0x6ca42c20, + 0x278e3: 0x6c4db420, + 0x278e8: 0x6cf6b020, 0x278e9: 0x6c8bd420, + 0x278ec: 0x6d0c2e20, 0x278ed: 0x6d074220, + 0x278f2: 0x6c56d220, 0x278f3: 0x6c423620, + 0x278f4: 0x6d074c20, 0x278f6: 0x6cf90a20, + 0x278fa: 0x6c258420, + 0x278fd: 0x6cf92a20, 0x278fe: 0x6c560220, + // Block 0x9e4, offset 0x27900 + 0x27905: 0x6d0c4c20, + 0x2790e: 0x6d170e20, 0x2790f: 0x6c1b1a20, + 0x27910: 0x6c741c20, 0x27912: 0x6d40b220, + 0x2791c: 0x6c699420, 0x2791d: 0x6d178220, 0x2791f: 0x6ce05e20, + 0x27920: 0x6c1c1420, 0x27921: 0x6c037a20, 0x27922: 0x6ce82820, 0x27923: 0x6d3f7a20, + 0x27924: 0x6cc05420, 0x27927: 0x6c1c1620, + 0x27928: 0x6cf7e020, + 0x27930: 0x6ca69c20, 0x27932: 0x6c241420, + 0x27934: 0x6cf44820, 0x27936: 0x6c1f4820, 0x27937: 0x6cda4e20, + 0x27938: 0x6d1df820, 0x27939: 0x6c71bc20, 0x2793a: 0x6c037e20, + 0x2793c: 0x6c229c20, 0x2793d: 0x6c2c6420, 0x2793e: 0x6cac9820, 0x2793f: 0x6c1c2620, + // Block 0x9e5, offset 0x27940 + 0x27941: 0x6cc0ac20, 0x27943: 0x6d0ca420, + 0x2794d: 0x6d2d2e20, + 0x27952: 0x6cfce220, 0x27953: 0x6c084620, + 0x27954: 0x6c7ba620, 0x27955: 0x6cb7a820, 0x27956: 0x6d389220, 0x27957: 0x6c713820, + 0x27958: 0x6cbcca20, 0x27959: 0x6ca13420, 0x2795a: 0x6d258c20, + 0x2795c: 0x6c4b5820, 0x2795d: 0x6d417220, + 0x27967: 0x6cbccc20, + 0x27970: 0x6c558a20, 0x27971: 0x6cc08820, 0x27972: 0x6c4d2220, 0x27973: 0x6c402c20, + 0x27974: 0x6c812a20, 0x27975: 0x6ccc6c20, 0x27976: 0x6cf68820, 0x27977: 0x6c101c20, + 0x27978: 0x6cd3ba20, 0x27979: 0x6d1e5220, 0x2797a: 0x6c49f020, + 0x2797c: 0x6ca85420, 0x2797f: 0x6c545820, + // Block 0x9e6, offset 0x27980 + 0x2798a: 0x6c9d7220, + 0x2798e: 0x6c369420, 0x2798f: 0x6cfb8a20, + 0x27990: 0x6d280020, 0x27991: 0x6d073220, 0x27992: 0x6cbde420, 0x27993: 0x6c301220, + 0x27994: 0x6c838220, 0x27995: 0x6cb7ca20, 0x27996: 0x6c7fb020, 0x27997: 0x6c3ee420, + 0x27998: 0x6cb71420, 0x27999: 0x6c1d3e20, + 0x2799c: 0x6c245c20, 0x2799f: 0x6ca16620, + 0x279a0: 0x6c06b820, + 0x279a4: 0x6c2a2e20, + 0x279a8: 0x6c6b3a20, 0x279a9: 0x6c1d5c20, 0x279aa: 0x6c1c7620, 0x279ab: 0x6d23f820, + 0x279ac: 0x6c24ee20, 0x279ad: 0x6cdb2620, 0x279ae: 0x6ce42420, 0x279af: 0x6cd61020, + 0x279b0: 0x6d2c4c20, 0x279b1: 0x6c3ef820, 0x279b3: 0x6c184620, + 0x279b4: 0x6c3d0c20, 0x279b5: 0x6c543220, 0x279b6: 0x6d2c4e20, + // Block 0x9e7, offset 0x279c0 + 0x279c4: 0x6c6b3c20, 0x279c5: 0x6d2c5020, 0x279c6: 0x6d2d9c20, + 0x279c9: 0x6d0dde20, 0x279ca: 0x6c4d3020, 0x279cb: 0x6cf48220, + 0x279cc: 0x6c576220, 0x279cd: 0x6c2cde20, 0x279ce: 0x6d115420, 0x279cf: 0x6cd9ec20, + 0x279d0: 0x6cb92c20, 0x279d1: 0x6c60cc20, 0x279d2: 0x6d04aa20, 0x279d3: 0x6cb7f020, + 0x279d4: 0x6c758420, 0x279d6: 0x6c4d3220, + 0x279de: 0x6d0dee20, 0x279df: 0x6c6b6820, + 0x279e0: 0x6c24f420, 0x279e2: 0x6ce96a20, 0x279e3: 0x6d2ee620, + 0x279e4: 0x6cb16c20, 0x279e5: 0x6c930e20, 0x279e6: 0x6d342020, 0x279e7: 0x6c1f8820, + 0x279e8: 0x6c9da820, 0x279e9: 0x6cbaec20, 0x279eb: 0x6c892420, + 0x279f2: 0x6c86dc20, + 0x279f6: 0x6c359a20, 0x279f7: 0x6cdb5820, + 0x279f8: 0x6c74f020, 0x279fb: 0x6c717c20, + 0x279fc: 0x6ce03a20, 0x279fd: 0x6c8a4820, 0x279fe: 0x6cca0a20, 0x279ff: 0x6c309220, + // Block 0x9e8, offset 0x27a00 + 0x27a01: 0x6d28d420, 0x27a02: 0x6d34b220, + 0x27a06: 0x6d08ca20, 0x27a07: 0x6c8d8620, + 0x27a0a: 0x6c2abe20, + 0x27a0d: 0x6d2dbe20, 0x27a0e: 0x6d07f020, 0x27a0f: 0x6cbdf220, + 0x27a10: 0x6c69da20, 0x27a11: 0x6cb0da20, + 0x27a14: 0x6c4e6e20, + 0x27a1a: 0x6d21f220, 0x27a1b: 0x6c4ca420, + 0x27a1d: 0x6d0a5420, + 0x27a20: 0x6d0a5620, 0x27a21: 0x6c156c20, 0x27a22: 0x6c6b8020, 0x27a23: 0x6c719420, + 0x27a24: 0x6d0e1820, 0x27a25: 0x6c31f620, 0x27a27: 0x6c53e020, + 0x27a28: 0x6cfd4a20, 0x27a29: 0x6d0a5820, + 0x27a2e: 0x6c8db020, 0x27a2f: 0x6c6b8620, + 0x27a30: 0x6d197e20, 0x27a31: 0x6cc22a20, 0x27a32: 0x6c41c020, 0x27a33: 0x6c3c8c20, + 0x27a35: 0x6c753820, 0x27a36: 0x6cc16e20, + 0x27a3b: 0x6c6fe020, + 0x27a3d: 0x6c61ba20, 0x27a3e: 0x6c612c20, + // Block 0x9e9, offset 0x27a40 + 0x27a45: 0x6cf77420, 0x27a46: 0x6cacd220, + 0x27a48: 0x6c7bf020, 0x27a49: 0x6c7a8e20, 0x27a4b: 0x6c7a9020, + 0x27a4c: 0x6d2cbe20, 0x27a4f: 0x6c03b220, + 0x27a52: 0x6c190220, 0x27a53: 0x6c569820, + 0x27a54: 0x6caa6220, 0x27a55: 0x6c356220, 0x27a56: 0x6d046a20, 0x27a57: 0x6c33ce20, + 0x27a58: 0x6cd10020, 0x27a59: 0x6cecdc20, 0x27a5a: 0x6c3b2e20, + 0x27a5d: 0x6cf60420, 0x27a5e: 0x6d3e2e20, + 0x27a60: 0x6c569a20, + 0x27a65: 0x6c0cea20, 0x27a67: 0x6ceba620, + 0x27a68: 0x6c04cc20, 0x27a69: 0x6c43e420, 0x27a6b: 0x6c77f620, + 0x27a72: 0x6d3c8c20, 0x27a73: 0x6c3e9220, + 0x27a74: 0x6ca12020, 0x27a75: 0x6c63c620, 0x27a76: 0x6ceb2620, 0x27a77: 0x6d235a20, + 0x27a79: 0x6ca24620, 0x27a7a: 0x6c745e20, 0x27a7b: 0x6c712820, + 0x27a7c: 0x6c486220, 0x27a7d: 0x6cb35a20, + // Block 0x9ea, offset 0x27a80 + 0x27a80: 0x6ca63c20, + 0x27a84: 0x6cec1e20, 0x27a85: 0x6d0d9620, + 0x27a94: 0x6c1e2c20, 0x27a95: 0x6c7ba820, 0x27a96: 0x6c4d7020, + 0x27a98: 0x6cfdd020, 0x27a99: 0x6cf65c20, 0x27a9b: 0x6c25a820, + 0x27a9c: 0x6ce6fe20, 0x27a9d: 0x6cc92420, 0x27a9f: 0x6c345820, + 0x27aa0: 0x6c182a20, + 0x27aa4: 0x6c833820, 0x27aa5: 0x6d3e6420, 0x27aa7: 0x6d332420, + 0x27aa8: 0x6d426c20, 0x27aab: 0x6c773020, + 0x27aac: 0x6d293a20, 0x27aae: 0x6d250020, 0x27aaf: 0x6cbf4620, + 0x27ab3: 0x6c381820, + 0x27ab4: 0x6d0a2220, 0x27ab6: 0x6c622e20, + 0x27ab8: 0x6c13a620, + // Block 0x9eb, offset 0x27ac0 + 0x27ac0: 0x6cd4fe20, 0x27ac1: 0x6d08a820, 0x27ac2: 0x6d00d220, 0x27ac3: 0x6ce2f820, + 0x27ac4: 0x6c4ef220, 0x27ac5: 0x6cfac020, 0x27ac6: 0x6ccd0420, 0x27ac7: 0x6cea8c20, + 0x27ac8: 0x6c4f8420, 0x27ac9: 0x6c7dbc20, 0x27aca: 0x6c133620, 0x27acb: 0x6c30bc20, + 0x27acc: 0x6caac620, 0x27acd: 0x6d0e9a20, 0x27ace: 0x6c1a2c20, 0x27acf: 0x6cb40a20, + 0x27ad0: 0x6cb7ba20, 0x27ad1: 0x6d26d420, 0x27ad2: 0x6c3d8c20, + 0x27ad7: 0x6ce6dc20, + 0x27adf: 0x6cf2c220, + 0x27ae0: 0x6cd11220, 0x27ae1: 0x6ceb8c20, + 0x27af4: 0x6ce06a20, 0x27af6: 0x6d0b6020, 0x27af7: 0x6d36ca20, + 0x27af8: 0x6c92be20, 0x27af9: 0x6d0dd020, 0x27afa: 0x6c70c220, + 0x27afd: 0x6c2a8020, 0x27aff: 0x6c1f7020, + // Block 0x9ec, offset 0x27b00 + 0x27b00: 0x6d412620, 0x27b01: 0x6c369620, 0x27b02: 0x6d349620, 0x27b03: 0x6caec020, + 0x27b05: 0x6c0cbe20, 0x27b07: 0x6c2c0220, + 0x27b10: 0x6c7f2820, 0x27b12: 0x6d133020, + 0x27b1c: 0x6c4fe620, 0x27b1d: 0x6cac7420, 0x27b1e: 0x6ce0ae20, 0x27b1f: 0x6c774a20, + 0x27b20: 0x6d05ea20, 0x27b21: 0x6d408e20, 0x27b22: 0x6c628c20, 0x27b23: 0x6cf52620, + 0x27b26: 0x6c204020, + 0x27b29: 0x6cb3a420, 0x27b2a: 0x6d0dd620, 0x27b2b: 0x6cebb420, + 0x27b2d: 0x6c31b820, 0x27b2f: 0x6cb13020, + 0x27b30: 0x6c1c7820, 0x27b31: 0x6c5d4420, 0x27b32: 0x6cb26820, + 0x27b34: 0x6c235c20, 0x27b35: 0x6d2c9620, + 0x27b3a: 0x6cec9e20, + 0x27b3f: 0x6cec6620, + // Block 0x9ed, offset 0x27b40 + 0x27b43: 0x6c36ae20, + 0x27b44: 0x6cf0da20, 0x27b45: 0x6c040420, 0x27b47: 0x6c678020, + 0x27b53: 0x6c140a20, + 0x27b55: 0x6c1f8220, 0x27b56: 0x6c7af220, 0x27b57: 0x6ce2bc20, + 0x27b58: 0x6d406a20, 0x27b59: 0x6c86ac20, 0x27b5a: 0x6cdeb220, 0x27b5b: 0x6cc9a420, + 0x27b5e: 0x6cac7a20, 0x27b5f: 0x6cac7c20, + 0x27b63: 0x6ccb0020, + 0x27b64: 0x6cbbba20, + 0x27b6d: 0x6d40e220, 0x27b6f: 0x6d371820, + 0x27b70: 0x6d0de020, 0x27b72: 0x6c6b4820, 0x27b73: 0x6ca5aa20, + // Block 0x9ee, offset 0x27b80 + 0x27b84: 0x6c944420, 0x27b85: 0x6cc15220, 0x27b87: 0x6c2af220, + 0x27b88: 0x6c897620, 0x27b89: 0x6c15f220, 0x27b8a: 0x6cbcf820, 0x27b8b: 0x6c912220, + 0x27b8c: 0x6c2efe20, 0x27b8d: 0x6c24f620, + 0x27b90: 0x6c615c20, 0x27b93: 0x6c178420, + 0x27b94: 0x6cd69a20, 0x27b95: 0x6d40f220, 0x27b97: 0x6c775a20, + 0x27b9a: 0x6cbaf020, 0x27b9b: 0x6c847820, + 0x27bae: 0x6cd65e20, 0x27baf: 0x6d243e20, + 0x27bb0: 0x6d2ee820, 0x27bb1: 0x6c82f220, + // Block 0x9ef, offset 0x27bc0 + 0x27bc5: 0x6cb33e20, + 0x27bca: 0x6d30b620, 0x27bcb: 0x6d001e20, + 0x27bcd: 0x6ce08620, 0x27bce: 0x6c258620, 0x27bcf: 0x6c7fdc20, + 0x27bd1: 0x6d060220, 0x27bd2: 0x6cd62820, 0x27bd3: 0x6d2c9c20, + 0x27bd4: 0x6c11ba20, 0x27bd7: 0x6c08fe20, + 0x27bd8: 0x6caf1c20, + 0x27bdd: 0x6c1a5620, + 0x27be3: 0x6cbc0c20, + 0x27be4: 0x6c5f8620, + 0x27bea: 0x6d2d0420, + 0x27bec: 0x6c7fde20, + // Block 0x9f0, offset 0x27c00 + 0x27c01: 0x6ce52820, 0x27c02: 0x6cc9b020, 0x27c03: 0x6c6c6e20, + 0x27c04: 0x6d3b4020, 0x27c05: 0x6c352220, 0x27c07: 0x6c145620, + 0x27c08: 0x6c73a020, 0x27c09: 0x6ce16220, 0x27c0a: 0x6c086420, + 0x27c0c: 0x6c38e820, 0x27c0d: 0x6c8b6820, 0x27c0e: 0x6d2b6e20, 0x27c0f: 0x6cdcb420, + 0x27c19: 0x6ccb8c20, + 0x27c27: 0x6d375c20, + 0x27c28: 0x6ce9d420, 0x27c2a: 0x6cbe5e20, + 0x27c2c: 0x6c21e620, + 0x27c30: 0x6cdee620, 0x27c31: 0x6c0e3c20, 0x27c32: 0x6cf1f620, + 0x27c35: 0x6cb36220, + 0x27c3d: 0x6ca09a20, 0x27c3e: 0x6c10e420, + // Block 0x9f1, offset 0x27c40 + 0x27c41: 0x6c7c2020, 0x27c43: 0x6c260220, + 0x27c44: 0x6cc54420, 0x27c45: 0x6c068020, 0x27c46: 0x6c7f8020, + 0x27c4d: 0x6ca75220, 0x27c4e: 0x6c84c220, + 0x27c55: 0x6c697220, 0x27c56: 0x6c919e20, 0x27c57: 0x6c879620, + 0x27c58: 0x6c900820, 0x27c59: 0x6c4baa20, + 0x27c5d: 0x6c161c20, + 0x27c64: 0x6cfb1820, 0x27c66: 0x6c165620, + 0x27c68: 0x6d029020, 0x27c69: 0x6d2ea820, + 0x27c6f: 0x6cd6c620, + 0x27c7b: 0x6c9d1220, + 0x27c7c: 0x6c947420, 0x27c7d: 0x6c965620, + // Block 0x9f2, offset 0x27c80 + 0x27c80: 0x6c2d0220, + 0x27c88: 0x6c2f2820, 0x27c8a: 0x6cecb220, 0x27c8b: 0x6d274620, + 0x27c8c: 0x6c948620, 0x27c8e: 0x6c948a20, + 0x27c93: 0x6c837220, + 0x27c95: 0x6cec6020, 0x27c96: 0x6c2f3e20, 0x27c97: 0x6ca59620, + 0x27c98: 0x6cceb220, 0x27c99: 0x6d019e20, 0x27c9a: 0x6cafe820, + 0x27ca5: 0x6c98dc20, 0x27ca7: 0x6d1ade20, + 0x27ca9: 0x6c0f0a20, 0x27cab: 0x6d3b0220, + 0x27cae: 0x6c1cc820, + 0x27cb6: 0x6ca24820, 0x27cb7: 0x6ceb2820, + 0x27cb9: 0x6ce7be20, 0x27cba: 0x6d128820, + // Block 0x9f3, offset 0x27cc0 + 0x27cc1: 0x6c5a7220, 0x27cc3: 0x6cc60020, + 0x27cc5: 0x6d130620, + 0x27ccb: 0x6ceb3a20, + 0x27cd6: 0x6d413a20, 0x27cd7: 0x6d23d220, + 0x27cda: 0x6c000c20, + 0x27cdc: 0x6d38a420, 0x27cdd: 0x6cec9c20, + 0x27ce1: 0x6c34ae20, 0x27ce2: 0x6d384420, 0x27ce3: 0x6c4cfc20, + 0x27ce4: 0x6c5a0420, 0x27ce5: 0x6c9e6220, + 0x27ce9: 0x6c211a20, 0x27cea: 0x6cbce420, 0x27ceb: 0x6c45b220, + 0x27cec: 0x6ce69420, 0x27ced: 0x6c9a2a20, + 0x27cf1: 0x6ce1a420, + 0x27cf4: 0x6cc6c420, 0x27cf7: 0x6cc6c620, + 0x27cf8: 0x6cb66420, 0x27cf9: 0x6c4c9a20, + 0x27cfd: 0x6cfe6220, 0x27cfe: 0x6ce4ca20, + // Block 0x9f4, offset 0x27d00 + 0x27d05: 0x6cff4020, + 0x27d08: 0x6d2db620, 0x27d09: 0x6c258820, + 0x27d14: 0x6c7ffc20, + 0x27d18: 0x6cd02e20, 0x27d1a: 0x6c830e20, 0x27d1b: 0x6c879820, + 0x27d1d: 0x6c14e620, 0x27d1e: 0x6ca8d020, 0x27d1f: 0x6c947620, + 0x27d21: 0x6ce63a20, 0x27d22: 0x6c5ba620, + 0x27d27: 0x6c458020, + 0x27d30: 0x6cb77220, 0x27d31: 0x6d20fa20, 0x27d33: 0x6d02d220, + 0x27d38: 0x6d26ae20, 0x27d39: 0x6c034e20, 0x27d3a: 0x6c276a20, 0x27d3b: 0x6c5eba20, + 0x27d3c: 0x6d089220, 0x27d3f: 0x6c743c20, + // Block 0x9f5, offset 0x27d40 + 0x27d40: 0x6ca99420, + 0x27d48: 0x6c325220, 0x27d49: 0x6c602620, + 0x27d50: 0x6cabc820, 0x27d51: 0x6c45f020, 0x27d52: 0x6c07ba20, + 0x27d54: 0x6c794220, 0x27d55: 0x6d105020, 0x27d56: 0x6c8f0820, 0x27d57: 0x6ca5ee20, + 0x27d58: 0x6d2cca20, 0x27d59: 0x6d1b5c20, 0x27d5a: 0x6ca72820, 0x27d5b: 0x6cad9020, + 0x27d5d: 0x6c458e20, 0x27d5e: 0x6c109e20, 0x27d5f: 0x6c512e20, + 0x27d60: 0x6cc71220, 0x27d61: 0x6c4b5020, + 0x27d65: 0x6c09b620, 0x27d66: 0x6cf63020, 0x27d67: 0x6c712a20, + 0x27d68: 0x6c5cf420, 0x27d69: 0x6c09e420, 0x27d6b: 0x6ce56420, + 0x27d6c: 0x6d332820, 0x27d6f: 0x6d181020, + 0x27d70: 0x6c22d220, 0x27d72: 0x6c0e2620, + 0x27d77: 0x6c459c20, + 0x27d7a: 0x6c381a20, + 0x27d7d: 0x6d0fce20, 0x27d7e: 0x6d064820, + // Block 0x9f6, offset 0x27d80 + 0x27d81: 0x6c52b620, + 0x27d84: 0x6d2a0a20, 0x27d85: 0x6c148420, 0x27d86: 0x6c537620, + 0x27d88: 0x6ce4b820, + 0x27d8c: 0x6d340a20, 0x27d8d: 0x6d039220, 0x27d8e: 0x6d062220, + 0x27d91: 0x6d325820, + 0x27d94: 0x6ced4020, + 0x27d98: 0x6c75dc20, + 0x27d9d: 0x6cf30c20, + 0x27da0: 0x6c92c220, 0x27da2: 0x6d32f220, 0x27da3: 0x6cc71a20, + 0x27da4: 0x6c1a3c20, 0x27da5: 0x6c3ee620, 0x27da7: 0x6c369820, + 0x27da8: 0x6ce1e620, 0x27da9: 0x6ce12e20, 0x27dab: 0x6c730020, + 0x27dac: 0x6c17c020, 0x27dad: 0x6cde9620, 0x27dae: 0x6c2c0420, + 0x27db0: 0x6d3fc020, 0x27db3: 0x6c794c20, + 0x27db4: 0x6ce99820, 0x27db6: 0x6c794e20, + // Block 0x9f7, offset 0x27dc0 + 0x27dc5: 0x6cc71c20, 0x27dc6: 0x6d276420, 0x27dc7: 0x6c517a20, + 0x27dc8: 0x6d400820, 0x27dc9: 0x6c235e20, 0x27dca: 0x6cbfcc20, + 0x27dce: 0x6ca2b420, 0x27dcf: 0x6c346420, + 0x27dd0: 0x6d065a20, 0x27dd1: 0x6c795620, 0x27dd2: 0x6cfd1220, + 0x27ddb: 0x6c31ba20, + 0x27ddc: 0x6c76ee20, 0x27dde: 0x6d1bf020, + 0x27de2: 0x6d3e9620, + 0x27de7: 0x6c5a0620, + 0x27de9: 0x6caed020, 0x27deb: 0x6c86ae20, + 0x27ded: 0x6c0f8220, 0x27dee: 0x6c444420, 0x27def: 0x6c716620, + 0x27df0: 0x6c783420, 0x27df2: 0x6c55ce20, 0x27df3: 0x6d115820, + 0x27df4: 0x6ce14820, 0x27df6: 0x6cbf7020, 0x27df7: 0x6cc72820, + 0x27df8: 0x6c8f1e20, 0x27df9: 0x6c5c5e20, 0x27dfa: 0x6c5f6220, + // Block 0x9f8, offset 0x27e00 + 0x27e09: 0x6d371a20, 0x27e0b: 0x6ce15220, + 0x27e0c: 0x6d355c20, 0x27e0d: 0x6c775e20, + 0x27e14: 0x6d107220, 0x27e16: 0x6ce18420, 0x27e17: 0x6c52d820, + 0x27e1b: 0x6c897820, + 0x27e1d: 0x6c12a020, + 0x27e21: 0x6ca3aa20, 0x27e22: 0x6d400e20, + 0x27e24: 0x6c2af420, 0x27e26: 0x6c68a220, 0x27e27: 0x6caeec20, + 0x27e29: 0x6c49fa20, 0x27e2a: 0x6c377420, 0x27e2b: 0x6c670620, + 0x27e2c: 0x6c69d220, 0x27e2d: 0x6caaca20, 0x27e2e: 0x6d2a6220, + 0x27e33: 0x6caef620, + 0x27e34: 0x6c292020, 0x27e36: 0x6cc1f620, 0x27e37: 0x6c889620, + 0x27e38: 0x6ca2be20, 0x27e39: 0x6c805220, + 0x27e3e: 0x6c3baa20, + // Block 0x9f9, offset 0x27e40 + 0x27e42: 0x6c5d0e20, + 0x27e46: 0x6c7bb420, + 0x27e48: 0x6d1b2a20, 0x27e49: 0x6cd69c20, 0x27e4a: 0x6c671e20, + 0x27e52: 0x6c964420, + 0x27e54: 0x6c933c20, + 0x27e5a: 0x6c446a20, 0x27e5b: 0x6cc51220, + 0x27e5e: 0x6cb22e20, + 0x27e60: 0x6c900a20, + 0x27e64: 0x6d320c20, 0x27e65: 0x6cfd4c20, + 0x27e68: 0x6c8c8e20, 0x27e69: 0x6c88aa20, 0x27e6a: 0x6ccd2420, 0x27e6b: 0x6c0fd420, + 0x27e6c: 0x6c87a820, + 0x27e73: 0x6d013a20, + 0x27e74: 0x6c446e20, 0x27e75: 0x6c9fe020, 0x27e76: 0x6c88ae20, + 0x27e79: 0x6c753c20, 0x27e7a: 0x6d38c820, + 0x27e7f: 0x6c784820, + // Block 0x9fa, offset 0x27e80 + 0x27e81: 0x6c2f2a20, 0x27e83: 0x6d30ce20, + 0x27e85: 0x6cd4ac20, 0x27e86: 0x6c5e9020, 0x27e87: 0x6c8f7c20, + 0x27e88: 0x6c49ea20, 0x27e89: 0x6d2a5620, 0x27e8a: 0x6cfd4420, 0x27e8b: 0x6cb8ae20, + 0x27e8d: 0x6ccfd820, + 0x27e90: 0x6d1ae020, 0x27e91: 0x6c6be420, + 0x27e94: 0x6ccffe20, 0x27e95: 0x6cd00020, 0x27e96: 0x6cc95220, + 0x27e9b: 0x6cf8c020, + 0x27ea1: 0x6c7aac20, 0x27ea3: 0x6cc1c620, + 0x27ea5: 0x6c443e20, 0x27ea6: 0x6c050820, + 0x27ea8: 0x6c0a7c20, 0x27ea9: 0x6cb92e20, + 0x27eb0: 0x6c0d6420, 0x27eb1: 0x6c050a20, 0x27eb3: 0x6d42ae20, + 0x27eb4: 0x6cb0d020, 0x27eb6: 0x6c5e3620, + 0x27ebe: 0x6c051020, + // Block 0x9fb, offset 0x27ec0 + 0x27eca: 0x6ca9d820, + 0x27ecc: 0x6c18fc20, 0x27ece: 0x6cae4e20, + 0x27ed1: 0x6c3f2e20, 0x27ed2: 0x6ce88220, + 0x27edc: 0x6cb04e20, 0x27edd: 0x6cb36420, + 0x27ee0: 0x6c1b7420, 0x27ee3: 0x6d093e20, + 0x27ee4: 0x6cb74020, 0x27ee5: 0x6cf4b220, + 0x27ee8: 0x6d357e20, 0x27ee9: 0x6c2c1c20, 0x27eea: 0x6c22fe20, 0x27eeb: 0x6d1ef420, + 0x27ef9: 0x6c230020, + 0x27efc: 0x6c2c1e20, 0x27efd: 0x6d3d2620, 0x27eff: 0x6d408020, + // Block 0x9fc, offset 0x27f00 + 0x27f00: 0x6c238c20, 0x27f03: 0x6caca820, + 0x27f04: 0x6d0d4c20, 0x27f05: 0x6cb74e20, 0x27f06: 0x6cc6fa20, 0x27f07: 0x6c63a420, + 0x27f09: 0x6d359220, 0x27f0a: 0x6cc00e20, 0x27f0b: 0x6d268a20, + 0x27f0d: 0x6cd32420, + 0x27f11: 0x6c4fc020, + 0x27f19: 0x6ceab220, + 0x27f1c: 0x6c0cde20, 0x27f1e: 0x6c770020, + 0x27f22: 0x6c21aa20, + 0x27f24: 0x6c229020, 0x27f26: 0x6d1ad020, 0x27f27: 0x6cd34c20, + 0x27f28: 0x6ca3b820, 0x27f29: 0x6cc85820, 0x27f2b: 0x6d0f9e20, + 0x27f2c: 0x6c1a9820, 0x27f2e: 0x6c21f820, + 0x27f31: 0x6c457620, 0x27f32: 0x6c9c4220, + 0x27f34: 0x6c612e20, + 0x27f3c: 0x6c44b220, 0x27f3d: 0x6d2a6c20, + // Block 0x9fd, offset 0x27f40 + 0x27f41: 0x6c081420, + 0x27f47: 0x6d030c20, + 0x27f48: 0x6c7df020, 0x27f4a: 0x6c2e8e20, + 0x27f4d: 0x6ce66a20, + 0x27f5a: 0x6cd71c20, + 0x27f5e: 0x6c275620, + 0x27f66: 0x6c851020, + 0x27f68: 0x6d1e2820, 0x27f69: 0x6c684220, + 0x27f6c: 0x6cde0420, 0x27f6d: 0x6cc24620, 0x27f6e: 0x6d1a6020, 0x27f6f: 0x6d24e820, + 0x27f70: 0x6c6abc20, 0x27f72: 0x6cb8da20, 0x27f73: 0x6d10a020, + 0x27f74: 0x6d0ba620, 0x27f77: 0x6cbe4a20, + 0x27f7f: 0x6cadd420, + // Block 0x9fe, offset 0x27f80 + 0x27f97: 0x6c635820, + 0x27f99: 0x6ce82c20, 0x27f9b: 0x6ce2ec20, + 0x27fa1: 0x6c33f620, 0x27fa2: 0x6c15ba20, 0x27fa3: 0x6c636820, + 0x27fa4: 0x6c1c2820, 0x27fa5: 0x6c64aa20, 0x27fa6: 0x6cd5e020, + 0x27faf: 0x6cde5a20, + // Block 0x9ff, offset 0x27fc0 + 0x27fd5: 0x6d33ea20, 0x27fd7: 0x6d256e20, + 0x27fda: 0x6c54d420, + 0x27fdc: 0x6c8b1220, + 0x27fe0: 0x6d2ad420, 0x27fe2: 0x6c1f5e20, + 0x27fe6: 0x6cc0ba20, 0x27fe7: 0x6c07fa20, + 0x27ff9: 0x6c588620, 0x27ffa: 0x6c7aca20, 0x27ffb: 0x6cd10c20, + 0x27ffd: 0x6c6afe20, 0x27fff: 0x6cee2c20, + // Block 0xa00, offset 0x28000 + 0x28003: 0x6c54de20, + 0x2800a: 0x6d2ae620, 0x2800b: 0x6d297020, + 0x2800c: 0x6d106420, 0x2800e: 0x6c1bba20, 0x2800f: 0x6c701220, + 0x2801a: 0x6c89fe20, 0x2801b: 0x6d209620, + 0x28020: 0x6c0b4a20, 0x28022: 0x6c7bc820, + 0x2802c: 0x6c1e4a20, 0x2802d: 0x6d0b3620, 0x2802e: 0x6d3d8620, + 0x28030: 0x6cbcda20, 0x28031: 0x6cfcf020, 0x28033: 0x6d250620, + 0x28034: 0x6cf46e20, 0x28035: 0x6c693620, 0x28036: 0x6cfe5020, 0x28037: 0x6ccc7420, + 0x28039: 0x6d36cc20, + 0x2803c: 0x6c1d5a20, 0x2803e: 0x6c0b0620, 0x2803f: 0x6ceeb820, + // Block 0xa01, offset 0x28040 + 0x28053: 0x6c2a3220, + 0x2805d: 0x6d23d820, 0x2805e: 0x6ce9b820, + 0x28061: 0x6c17c220, + 0x28065: 0x6c5c4420, 0x28066: 0x6cba2620, + 0x28068: 0x6cf01a20, + 0x28070: 0x6d1f7420, + 0x2807c: 0x6c2ca020, 0x2807e: 0x6c26f620, + // Block 0xa02, offset 0x28080 + 0x28081: 0x6d1f7620, 0x28082: 0x6c702620, 0x28083: 0x6ce9bc20, + 0x28084: 0x6d297620, 0x28087: 0x6c5c6020, + 0x28089: 0x6ccc8220, + 0x2808c: 0x6c5e1020, + 0x28094: 0x6d115a20, + 0x28099: 0x6cfd1e20, + 0x2809e: 0x6cfd2020, + 0x280ac: 0x6c2caa20, 0x280ae: 0x6c703220, + 0x280b2: 0x6c5c7420, + 0x280b4: 0x6c77cc20, 0x280b5: 0x6d1f8420, + 0x280b8: 0x6c870e20, + 0x280bc: 0x6c201420, 0x280be: 0x6c1b6820, + // Block 0xa03, offset 0x280c0 + 0x280c0: 0x6c5e3820, 0x280c2: 0x6d1f9020, + 0x280c4: 0x6d270e20, + 0x280ce: 0x6cded820, 0x280cf: 0x6d29b420, + 0x280d3: 0x6ca8ac20, + 0x280d4: 0x6d3b4a20, + 0x280e1: 0x6cfc6220, + 0x280e9: 0x6cd22a20, 0x280eb: 0x6c79ca20, + 0x280ec: 0x6cb6c620, 0x280ed: 0x6ce91420, 0x280ee: 0x6c387e20, 0x280ef: 0x6c258e20, + 0x280f2: 0x6cea3820, 0x280f3: 0x6c137420, + 0x280f4: 0x6c110020, 0x280f5: 0x6cfe1420, 0x280f6: 0x6cadfc20, 0x280f7: 0x6c6e0220, + 0x280f8: 0x6cb56a20, 0x280f9: 0x6cceae20, 0x280fa: 0x6ca97420, 0x280fb: 0x6ca30420, + 0x280fd: 0x6cbd5020, + // Block 0xa04, offset 0x28100 + 0x2810d: 0x6c090c20, + 0x28113: 0x6c092420, + 0x28114: 0x6c05a220, 0x28115: 0x6c0b7620, 0x28116: 0x6d3e0220, 0x28117: 0x6ca30a20, + 0x28118: 0x6cf07020, 0x28119: 0x6c4fbe20, + 0x28121: 0x6c6c8220, 0x28123: 0x6d333c20, + 0x28127: 0x6cbc8220, + 0x2812e: 0x6c501620, 0x2812f: 0x6ce71e20, + 0x28130: 0x6d2a4020, 0x28131: 0x6cd15420, 0x28132: 0x6c25a420, 0x28133: 0x6c597e20, + 0x28134: 0x6cc78e20, 0x28135: 0x6d292e20, 0x28136: 0x6ca6f820, + 0x2813e: 0x6cfa8620, + // Block 0xa05, offset 0x28140 + 0x28148: 0x6cc2bc20, 0x28149: 0x6c619a20, 0x2814a: 0x6d1a3620, 0x2814b: 0x6c850620, + 0x2814c: 0x6c984620, 0x2814d: 0x6cceca20, 0x2814e: 0x6c4e8e20, 0x2814f: 0x6c260e20, + 0x28150: 0x6c759c20, 0x28151: 0x6c61bc20, 0x28152: 0x6c107820, 0x28153: 0x6c905420, + 0x28154: 0x6c3d2220, 0x28155: 0x6d1f0e20, 0x28156: 0x6c7b1c20, + 0x2815c: 0x6cfe2220, + 0x28161: 0x6d279420, 0x28163: 0x6cbd5e20, + 0x28164: 0x6c5b2c20, 0x28165: 0x6cb42e20, + 0x2816b: 0x6c83b220, + 0x2816c: 0x6cadcc20, 0x2816d: 0x6cd4c620, 0x2816e: 0x6c707620, 0x2816f: 0x6d14e020, + 0x28170: 0x6d32a820, 0x28171: 0x6c1d0e20, 0x28173: 0x6cf77620, + 0x28175: 0x6c561a20, 0x28176: 0x6cc74420, + // Block 0xa06, offset 0x28180 + 0x2818c: 0x6c590c20, 0x2818d: 0x6cbc3c20, 0x2818e: 0x6d33d020, 0x2818f: 0x6d1c6c20, + 0x28190: 0x6cf7e220, 0x28191: 0x6cbb7620, 0x28192: 0x6c61fa20, 0x28193: 0x6d32bc20, + 0x28194: 0x6c59b420, 0x28196: 0x6d210a20, 0x28197: 0x6d405a20, + 0x28198: 0x6c99f420, + 0x2819c: 0x6cd13220, + 0x281a9: 0x6cc2e620, + 0x281b0: 0x6c676020, 0x281b1: 0x6c512020, 0x281b3: 0x6ce75220, + 0x281b4: 0x6c513020, 0x281b5: 0x6cf15220, 0x281b6: 0x6d17cc20, 0x281b7: 0x6cacfe20, + 0x281ba: 0x6cf22620, 0x281bb: 0x6cb99820, + 0x281bc: 0x6c862020, 0x281bd: 0x6d150a20, 0x281be: 0x6c20ac20, 0x281bf: 0x6d06e820, + // Block 0xa07, offset 0x281c0 + 0x281c0: 0x6cefd020, + 0x281c6: 0x6c439420, + 0x281c8: 0x6d226220, 0x281cb: 0x6d2d4420, + 0x281cc: 0x6c41a220, 0x281cd: 0x6cb8f620, 0x281ce: 0x6c773220, 0x281cf: 0x6c840220, + 0x281d0: 0x6cd00220, 0x281d1: 0x6c499220, 0x281d3: 0x6cb17c20, + 0x281d6: 0x6c840420, + 0x281d8: 0x6c562620, 0x281db: 0x6ce8ce20, + 0x281dc: 0x6cd75620, 0x281de: 0x6c56aa20, 0x281df: 0x6c840620, + 0x281e2: 0x6c910a20, + 0x281e6: 0x6c297020, + 0x281e8: 0x6d42a420, 0x281e9: 0x6cccf620, 0x281eb: 0x6ccf6e20, + 0x281ed: 0x6c3cb620, 0x281ee: 0x6c726e20, 0x281ef: 0x6ce76e20, + 0x281f0: 0x6c691a20, 0x281f1: 0x6cbbe620, 0x281f2: 0x6c42d420, 0x281f3: 0x6d3e7020, + 0x281f4: 0x6c59e620, 0x281f5: 0x6ccd0620, + 0x281f8: 0x6cdff620, + // Block 0xa08, offset 0x28200 + 0x2820c: 0x6ceaca20, 0x2820e: 0x6c8e2220, + 0x28210: 0x6c1a2e20, 0x28211: 0x6cf27020, 0x28212: 0x6d425020, 0x28213: 0x6d23da20, + 0x28215: 0x6d3a2220, 0x28217: 0x6cc45420, + 0x28218: 0x6cf80a20, 0x28219: 0x6cc1b620, 0x2821b: 0x6c442820, + 0x28222: 0x6cb52a20, 0x28223: 0x6d05e020, + 0x28228: 0x6c415220, 0x28229: 0x6cc3f820, 0x2822a: 0x6c1ddc20, 0x2822b: 0x6c9b4e20, + 0x28232: 0x6cd02020, 0x28233: 0x6cc1c820, + 0x28236: 0x6cbbb420, 0x28237: 0x6c11b420, + 0x2823a: 0x6c86b020, + 0x2823c: 0x6ceda220, 0x2823d: 0x6c826620, 0x2823e: 0x6d03a820, 0x2823f: 0x6c80ea20, + // Block 0xa09, offset 0x28240 + 0x28242: 0x6cd3ec20, 0x28243: 0x6d330020, + 0x28244: 0x6c38ce20, + 0x2824a: 0x6d371c20, + 0x2824f: 0x6d1aa420, + 0x28251: 0x6c86de20, + 0x28256: 0x6ca08820, 0x28257: 0x6cf04020, + 0x28259: 0x6d1c1020, 0x2825a: 0x6cc4e420, + 0x28260: 0x6cc2a820, + 0x28265: 0x6c95ce20, + 0x28272: 0x6c275820, + 0x28274: 0x6d1b4e20, 0x28275: 0x6c08da20, 0x28276: 0x6c438820, + 0x28278: 0x6cf20a20, 0x28279: 0x6d0d7620, 0x2827a: 0x6c9e1e20, + 0x2827c: 0x6c42a020, 0x2827d: 0x6cc05620, 0x2827e: 0x6d33da20, + // Block 0xa0a, offset 0x28280 + 0x2828b: 0x6c471c20, + 0x2828c: 0x6ce75420, 0x2828e: 0x6c8d1420, 0x2828f: 0x6ce33620, + 0x28290: 0x6c224c20, 0x28291: 0x6d150c20, 0x28292: 0x6c395a20, 0x28293: 0x6cb31220, + 0x28294: 0x6c09b820, 0x28296: 0x6c064e20, + 0x2829f: 0x6cae7620, + 0x282a1: 0x6cdb8420, + 0x282a4: 0x6cd92820, 0x282a5: 0x6cef1a20, 0x282a6: 0x6cff9220, + 0x282ac: 0x6c504c20, 0x282ad: 0x6d0dac20, + 0x282b6: 0x6d152620, 0x282b7: 0x6d2a1e20, + 0x282b8: 0x6d1d0020, 0x282b9: 0x6ca43220, + 0x282bf: 0x6d289620, + // Block 0xa0b, offset 0x282c0 + 0x282c1: 0x6ce50c20, 0x282c2: 0x6cf68a20, 0x282c3: 0x6c69b420, + 0x282c4: 0x6d0cbc20, + 0x282cc: 0x6ca55e20, 0x282cd: 0x6ce07020, 0x282ce: 0x6d0eaa20, 0x282cf: 0x6ce51a20, + 0x282d0: 0x6d36ce20, 0x282d1: 0x6c1d7a20, 0x282d2: 0x6ce23a20, + 0x282d7: 0x6d2cdc20, + 0x282de: 0x6c9e3a20, + 0x282e1: 0x6cf47020, 0x282e2: 0x6d1b0220, 0x282e3: 0x6d0eac20, + 0x282e4: 0x6c81ba20, + 0x282e9: 0x6cb31e20, 0x282eb: 0x6c5d4620, + 0x282ec: 0x6c4d4620, 0x282ed: 0x6ca21a20, 0x282ee: 0x6c236020, + 0x282f1: 0x6c7aae20, 0x282f2: 0x6c1d8420, + 0x282f4: 0x6d1ff020, + 0x282f8: 0x6d3da020, 0x282fb: 0x6cd9e420, + // Block 0xa0c, offset 0x28300 + 0x28302: 0x6d1b7e20, + 0x28305: 0x6d41da20, 0x28306: 0x6cca7420, 0x28307: 0x6c8f4a20, + 0x28308: 0x6c4f2020, 0x28309: 0x6cf0ec20, 0x2830a: 0x6c9b6020, 0x2830b: 0x6c55d020, + 0x2830c: 0x6c86b220, 0x2830e: 0x6c9d9c20, + 0x28310: 0x6c054020, 0x28311: 0x6c65f020, + 0x2831c: 0x6cc40620, + 0x28320: 0x6c9b6220, 0x28322: 0x6ca21c20, 0x28323: 0x6c53ac20, + 0x28324: 0x6c56d820, 0x28325: 0x6c9c8e20, 0x28326: 0x6ccca820, + 0x28329: 0x6cce2620, 0x2832a: 0x6c17c620, + 0x2832c: 0x6d3dc220, 0x2832e: 0x6d342220, 0x2832f: 0x6ca77020, + 0x28335: 0x6c62b220, + 0x28338: 0x6c784020, 0x28339: 0x6d330620, + 0x2833f: 0x6c281420, + // Block 0xa0d, offset 0x28340 + 0x28340: 0x6c8a8220, 0x28341: 0x6d2e3020, 0x28342: 0x6c460620, 0x28343: 0x6c818c20, + 0x28344: 0x6c571e20, 0x28345: 0x6c1fd220, 0x28347: 0x6c660c20, + 0x28348: 0x6c7d3220, + 0x2834d: 0x6ccf0220, + 0x28354: 0x6c191c20, 0x28355: 0x6ce08820, 0x28357: 0x6c55f820, + 0x28358: 0x6c9b9e20, 0x28359: 0x6cada420, 0x2835a: 0x6d2e3820, 0x2835b: 0x6c16d620, + 0x2835d: 0x6c41f820, + 0x28360: 0x6d193a20, 0x28362: 0x6cdcb620, + 0x28366: 0x6d076420, 0x28367: 0x6c62de20, + 0x28368: 0x6c808e20, + 0x2836c: 0x6d159620, 0x2836f: 0x6c9dae20, + 0x28371: 0x6c9f1420, + 0x28375: 0x6c24a620, + 0x28378: 0x6c805a20, 0x2837b: 0x6d0c4e20, + 0x2837e: 0x6c9ccc20, + // Block 0xa0e, offset 0x28380 + 0x28382: 0x6d1e6820, 0x28383: 0x6c125420, + 0x28384: 0x6c664420, 0x28387: 0x6cda0a20, + 0x2838e: 0x6d0d2a20, + 0x28391: 0x6c736020, + 0x28395: 0x6c369c20, + 0x28398: 0x6c3bf220, 0x2839a: 0x6c3bf620, + 0x283a1: 0x6c4a2a20, 0x283a2: 0x6c96fc20, + 0x283a4: 0x6c8ab820, + 0x283a9: 0x6c1cca20, 0x283ab: 0x6c840820, + 0x283b1: 0x6d349c20, + 0x283b4: 0x6d024820, 0x283b7: 0x6c1dfc20, + 0x283b9: 0x6c60fc20, + 0x283bd: 0x6caf5c20, + // Block 0xa0f, offset 0x283c0 + 0x283c2: 0x6c6abe20, + 0x283c7: 0x6d38e420, + 0x283cd: 0x6d046c20, + 0x283d1: 0x6c7bfc20, + 0x283d9: 0x6c6e2220, 0x283db: 0x6c56a020, + 0x283de: 0x6cb99c20, + 0x283e3: 0x6c133220, + 0x283e6: 0x6cb60420, 0x283e7: 0x6ced3220, + 0x283e8: 0x6c98ec20, 0x283ea: 0x6c30f020, + 0x283f4: 0x6c79d220, 0x283f6: 0x6c277c20, + 0x283f8: 0x6ca4b420, 0x283fa: 0x6c536a20, + // Block 0xa10, offset 0x28400 + 0x28402: 0x6c7f4020, 0x28403: 0x6c34aa20, + 0x28404: 0x6cb91020, 0x28406: 0x6d1a8820, + 0x28416: 0x6c911220, 0x28417: 0x6c5ae020, + 0x2841b: 0x6c402e20, + 0x2841c: 0x6c98f420, 0x2841e: 0x6d389a20, + 0x28421: 0x6d1dfa20, + 0x2842d: 0x6c817020, 0x2842e: 0x6c609c20, 0x2842f: 0x6d186a20, + 0x28430: 0x6c8e8c20, 0x28431: 0x6c235220, 0x28433: 0x6ca43c20, + // Block 0xa11, offset 0x28440 + 0x28450: 0x6cea2620, 0x28451: 0x6cfe5220, + 0x28455: 0x6c0bba20, 0x28456: 0x6c207820, 0x28457: 0x6cf52020, + 0x28459: 0x6c70c620, + 0x28465: 0x6d005220, 0x28466: 0x6caf9220, 0x28467: 0x6d3da220, + 0x28468: 0x6cc8e420, 0x2846a: 0x6ccafa20, 0x2846b: 0x6d3f6220, + 0x2846d: 0x6d336220, + 0x28470: 0x6d40da20, 0x28471: 0x6cc14220, 0x28473: 0x6c1c7a20, + 0x28475: 0x6d36f020, + // Block 0xa12, offset 0x28480 + 0x28497: 0x6cc37a20, + 0x28498: 0x6cb92020, 0x28499: 0x6d0afc20, 0x2849a: 0x6c17c420, 0x2849b: 0x6c517c20, + 0x2849c: 0x6cc80420, + 0x284a0: 0x6c70cc20, 0x284a1: 0x6cf52820, + 0x284ac: 0x6c1c7c20, 0x284ad: 0x6c7c0420, 0x284af: 0x6c240020, + 0x284b0: 0x6cc89220, 0x284b1: 0x6c7e1e20, 0x284b2: 0x6c1b5e20, 0x284b3: 0x6d40e420, + 0x284b4: 0x6c688620, 0x284b6: 0x6d21c420, 0x284b7: 0x6ce8fe20, + 0x284b8: 0x6c9b6420, 0x284b9: 0x6c266c20, 0x284ba: 0x6cd7a020, + // Block 0xa13, offset 0x284c0 + 0x284e5: 0x6c3c6c20, 0x284e6: 0x6c469020, 0x284e7: 0x6c301c20, + 0x284e8: 0x6c142220, 0x284e9: 0x6c99be20, 0x284ea: 0x6c15e820, 0x284eb: 0x6c0b1020, + 0x284ec: 0x6d241e20, 0x284ef: 0x6cecea20, + 0x284f0: 0x6d40e620, 0x284f2: 0x6d3ea420, + 0x284f4: 0x6c1fec20, 0x284f5: 0x6ced5620, 0x284f6: 0x6cebf420, + 0x284f8: 0x6cc2a620, 0x284fb: 0x6ced5820, + 0x284fd: 0x6cfa5020, + // Block 0xa14, offset 0x28500 + 0x28504: 0x6d1d5620, 0x28505: 0x6c66e820, + 0x28508: 0x6cf04220, 0x28509: 0x6ce39a20, 0x2850a: 0x6ccaca20, + 0x2850c: 0x6cb67a20, 0x2850d: 0x6ccc2020, 0x2850e: 0x6d244220, 0x2850f: 0x6c60e220, + 0x28510: 0x6c314420, 0x28511: 0x6c15f620, 0x28512: 0x6ce96c20, + 0x28515: 0x6c8ec420, 0x28517: 0x6d3cba20, + 0x28533: 0x6cc89420, + 0x28536: 0x6d0eda20, 0x28537: 0x6c47ea20, + 0x28539: 0x6c86e220, 0x2853a: 0x6c13ba20, + 0x2853e: 0x6c2cac20, + // Block 0xa15, offset 0x28540 + 0x28540: 0x6d2e2a20, 0x28541: 0x6cb32220, + 0x28552: 0x6c912620, + 0x28554: 0x6d374c20, + // Block 0xa16, offset 0x28580 + 0x28581: 0x6c888a20, + 0x28585: 0x6c95ca20, + 0x2858d: 0x6c352420, + 0x28590: 0x6c750820, 0x28591: 0x6c873420, 0x28592: 0x6c7ff220, + 0x28594: 0x6cc89620, 0x28595: 0x6c474220, 0x28596: 0x6c155c20, 0x28597: 0x6d060620, + 0x2859a: 0x6d356420, + // Block 0xa17, offset 0x285c0 + 0x285c1: 0x6d097c20, 0x285c2: 0x6c0e9c20, 0x285c3: 0x6c19aa20, + 0x285c5: 0x6d3b4220, 0x285c6: 0x6c522a20, + 0x285c9: 0x6c04ac20, + 0x285d3: 0x6c2f0820, + 0x285d6: 0x6d2e3a20, 0x285d7: 0x6c4ca620, + 0x285da: 0x6c0c5420, 0x285db: 0x6c7ec620, + 0x285fa: 0x6c6c7620, + // Block 0xa18, offset 0x28600 + 0x28602: 0x6c411c20, + 0x28612: 0x6c9c1e20, + 0x28614: 0x6d247e20, + 0x2862a: 0x6cf82a20, + 0x2862c: 0x6cb17820, 0x2862d: 0x6cd85020, + 0x28634: 0x6c2b0020, + 0x28638: 0x6c219e20, 0x28639: 0x6c2bbe20, 0x2863a: 0x6c5fa820, 0x2863b: 0x6c157620, + 0x2863f: 0x6d3dea20, + // Block 0xa19, offset 0x28640 + 0x28653: 0x6c115220, + 0x2865e: 0x6c681620, + 0x28672: 0x6ce80220, + 0x2867d: 0x6c84e820, + // Block 0xa1a, offset 0x28680 + 0x28682: 0x6cba9020, + 0x28686: 0x6c21a020, + 0x2868f: 0x6cdef820, + 0x28691: 0x6c2e5220, 0x28693: 0x6c664820, + 0x2869b: 0x6d356820, + 0x2869c: 0x6c753220, 0x2869e: 0x6ca0a420, + 0x286a0: 0x6c959620, + 0x286a6: 0x6c062420, + 0x286ad: 0x6d415e20, + 0x286b5: 0x6d300820, + 0x286b8: 0x6d220c20, 0x286bb: 0x6c062a20, + 0x286be: 0x6c969420, 0x286bf: 0x6cf85020, + // Block 0xa1b, offset 0x286c0 + 0x286c0: 0x6c567c20, 0x286c1: 0x6d171220, 0x286c2: 0x6c355020, 0x286c3: 0x6c470220, + 0x286c4: 0x6ce89e20, 0x286c5: 0x6d314a20, 0x286c7: 0x6cc07220, + 0x286c8: 0x6cdaba20, 0x286c9: 0x6c89c620, 0x286ca: 0x6cc11a20, 0x286cb: 0x6c8d2620, + 0x286cc: 0x6c499420, 0x286cd: 0x6c80e420, 0x286ce: 0x6ce7dc20, 0x286cf: 0x6c266620, + 0x286d0: 0x6c911e20, 0x286d1: 0x6c5a1220, 0x286d2: 0x6cd47e20, 0x286d3: 0x6c688820, + 0x286d4: 0x6d41f620, 0x286d5: 0x6c411a20, 0x286d6: 0x6cef5220, + 0x286d9: 0x6c7d4e20, 0x286da: 0x6c32bc20, 0x286db: 0x6cd92020, + 0x286dc: 0x6cb5e020, 0x286dd: 0x6d101a20, + 0x286e1: 0x6cd37820, 0x286e3: 0x6c411420, + 0x286e6: 0x6c2a1a20, 0x286e7: 0x6d11b220, + 0x286eb: 0x6cb99e20, + 0x286ed: 0x6cce7220, 0x286ee: 0x6c16ae20, 0x286ef: 0x6ca05020, + 0x286f1: 0x6ca05a20, + 0x286f5: 0x6ca50620, + 0x286f8: 0x6c232220, 0x286fa: 0x6ca84e20, 0x286fb: 0x6d2f6a20, + 0x286fc: 0x6c133420, 0x286ff: 0x6cd92a20, + // Block 0xa1c, offset 0x28700 + 0x28700: 0x6ca85820, 0x28701: 0x6c22dc20, + 0x28704: 0x6c75de20, 0x28706: 0x6cce7e20, + 0x28708: 0x6d3a2420, 0x28709: 0x6c34b020, 0x2870a: 0x6c01ce20, 0x2870b: 0x6c088c20, + 0x2870e: 0x6ce41820, + 0x28710: 0x6cb06a20, 0x28711: 0x6cf9ee20, 0x28712: 0x6cc09420, 0x28713: 0x6cd14e20, + 0x28717: 0x6ce0d820, + 0x2871b: 0x6c978420, + 0x2871c: 0x6cb10420, 0x2871e: 0x6ce43420, 0x2871f: 0x6cc6cc20, + 0x28727: 0x6c237220, + 0x2872a: 0x6c5f7a20, 0x2872b: 0x6c3cc020, + 0x2872c: 0x6cf53c20, 0x2872d: 0x6c69d620, 0x2872e: 0x6c818e20, 0x2872f: 0x6d2ba620, + 0x28730: 0x6caeee20, 0x28731: 0x6c11e420, 0x28733: 0x6ca9de20, + 0x28735: 0x6c160c20, + 0x2873e: 0x6c97a420, 0x2873f: 0x6c4ba820, + // Block 0xa1d, offset 0x28740 + 0x28740: 0x6ca7d820, 0x28741: 0x6c1d0220, 0x28742: 0x6c165820, + 0x28746: 0x6ca48a20, + 0x28749: 0x6cf95c20, 0x2874a: 0x6c6f6620, 0x2874b: 0x6c613020, + 0x2874c: 0x6d323420, + 0x28751: 0x6ce6ca20, + 0x28754: 0x6c9ace20, 0x28755: 0x6d26b220, 0x28757: 0x6d37bc20, + 0x28758: 0x6cea5620, 0x28759: 0x6cc8d220, 0x2875a: 0x6d01ba20, 0x2875b: 0x6cf63420, + 0x2875d: 0x6ce6d220, 0x2875e: 0x6ca99820, + 0x28760: 0x6cee2820, 0x28761: 0x6c64ae20, 0x28763: 0x6c3b3420, + 0x28772: 0x6c0ba620, + 0x28777: 0x6d152820, + 0x2877a: 0x6c2ec420, 0x2877b: 0x6c5ef820, + 0x2877c: 0x6c41de20, 0x2877f: 0x6c64c420, + // Block 0xa1e, offset 0x28780 + 0x28780: 0x6c6ee220, + 0x28786: 0x6c763820, + 0x2878a: 0x6cc3d620, + 0x2878c: 0x6ca40420, 0x2878d: 0x6ca1de20, 0x2878e: 0x6d072220, 0x2878f: 0x6cd96a20, + 0x28790: 0x6cd0c020, 0x28791: 0x6c7bac20, 0x28792: 0x6cc3e620, 0x28793: 0x6cef2820, + 0x28797: 0x6c2eda20, + 0x28798: 0x6ca40a20, 0x2879a: 0x6cc92a20, 0x2879b: 0x6c45a220, + 0x2879c: 0x6c313220, 0x2879e: 0x6ca73020, + 0x287a1: 0x6c175020, 0x287a2: 0x6c515e20, 0x287a3: 0x6d0e9e20, + 0x287a9: 0x6ce8f020, 0x287aa: 0x6c104420, + 0x287ac: 0x6c559e20, 0x287ad: 0x6d1e5820, 0x287af: 0x6cd2d620, + 0x287b0: 0x6c1f7220, + 0x287b9: 0x6cff0e20, 0x287ba: 0x6c9ad620, 0x287bb: 0x6c852a20, + 0x287bc: 0x6ce37220, 0x287be: 0x6c64e620, + // Block 0xa1f, offset 0x287c0 + 0x287c2: 0x6d354e20, 0x287c3: 0x6c487220, + 0x287c4: 0x6c496220, 0x287c6: 0x6cb7cc20, + 0x287c8: 0x6c3a1820, 0x287c9: 0x6d229820, 0x287ca: 0x6d309620, 0x287cb: 0x6cf01c20, + 0x287cc: 0x6c35ba20, 0x287cd: 0x6c14da20, 0x287ce: 0x6cf6e020, + 0x287d0: 0x6c47d420, + 0x287d7: 0x6cc3fa20, + 0x287d8: 0x6c5c4620, 0x287da: 0x6d00f620, 0x287db: 0x6d1bf420, + 0x287dd: 0x6cdeaa20, 0x287de: 0x6cec5820, 0x287df: 0x6c3efe20, + 0x287e0: 0x6c6c0820, 0x287e1: 0x6cb0bc20, + 0x287e5: 0x6cd15020, 0x287e6: 0x6d21c620, 0x287e7: 0x6c7ace20, + 0x287e9: 0x6cb0ca20, 0x287ea: 0x6d010620, 0x287eb: 0x6caaac20, + 0x287ec: 0x6cfd2420, 0x287ed: 0x6c66ea20, 0x287ee: 0x6d074e20, + 0x287f0: 0x6c0a7e20, + 0x287f4: 0x6ca41220, 0x287f6: 0x6c897020, + 0x287f8: 0x6cb13420, + 0x287fc: 0x6c6eb820, + // Block 0xa20, offset 0x28800 + 0x28800: 0x6cde1c20, 0x28801: 0x6d0edc20, 0x28802: 0x6c00f820, + 0x28805: 0x6cff3020, 0x28806: 0x6cbaf420, 0x28807: 0x6cf48620, + 0x28808: 0x6ce15620, 0x2880a: 0x6c75f420, + 0x28810: 0x6c7e2820, + 0x28817: 0x6c813220, + 0x28819: 0x6ca5b020, + 0x2881c: 0x6c314a20, 0x2881d: 0x6cd54620, 0x2881f: 0x6c696220, + 0x28820: 0x6ca89c20, 0x28822: 0x6d21dc20, + 0x28828: 0x6c132020, 0x2882a: 0x6c696420, + 0x2882c: 0x6c57d620, 0x2882d: 0x6cf1c020, 0x2882e: 0x6d127020, 0x2882f: 0x6c35a020, + 0x28830: 0x6c49fe20, 0x28831: 0x6c572020, 0x28832: 0x6c68a620, + 0x2883a: 0x6c835820, + 0x2883c: 0x6cce2820, 0x2883d: 0x6d1e8020, 0x2883f: 0x6c2ac220, + // Block 0xa21, offset 0x28840 + 0x28840: 0x6c493820, 0x28841: 0x6ca97220, 0x28843: 0x6cdcc020, + 0x28844: 0x6cfe6c20, 0x28846: 0x6cc9b420, 0x28847: 0x6c168c20, + 0x2884e: 0x6cc90c20, + 0x28850: 0x6d277020, 0x28852: 0x6c3b4c20, 0x28853: 0x6c672420, + 0x28854: 0x6d076a20, + 0x28858: 0x6cf93020, 0x28859: 0x6cd54a20, + 0x28865: 0x6d013220, 0x28866: 0x6c87ac20, + 0x28869: 0x6ce80420, + 0x2886c: 0x6c9d1020, 0x2886d: 0x6c162020, 0x2886e: 0x6c5d6a20, + 0x28871: 0x6d3bb820, 0x28872: 0x6d273420, + 0x2887b: 0x6c801a20, + 0x2887d: 0x6d0d2c20, 0x2887e: 0x6c29a820, 0x2887f: 0x6cfe1820, + // Block 0xa22, offset 0x28880 + 0x28880: 0x6d267220, 0x28881: 0x6ce6b020, 0x28882: 0x6c07d220, 0x28883: 0x6cca4620, + 0x28884: 0x6cfc9620, 0x28885: 0x6c2e7a20, 0x28886: 0x6cb09c20, 0x28887: 0x6cb11220, + 0x28889: 0x6cde0c20, 0x2888b: 0x6c687220, + 0x2888c: 0x6d126620, 0x2888e: 0x6d271020, + 0x28890: 0x6cc61420, 0x28891: 0x6cbc1820, 0x28892: 0x6cb56220, 0x28893: 0x6c2da620, + 0x28894: 0x6cb56420, 0x28897: 0x6c4e7e20, + 0x28898: 0x6d253220, 0x28899: 0x6d1ee220, 0x2889a: 0x6c5fd020, 0x2889b: 0x6c412820, + 0x2889c: 0x6c4d0620, 0x2889d: 0x6cd30420, 0x2889f: 0x6cc0c820, + 0x288a9: 0x6cf1fa20, + 0x288ac: 0x6d321620, 0x288ad: 0x6cb2f220, 0x288ae: 0x6d0c5e20, 0x288af: 0x6c46e820, + 0x288b0: 0x6c720420, 0x288b1: 0x6ce52e20, + 0x288b7: 0x6c35d820, + 0x288ba: 0x6d0ace20, 0x288bb: 0x6c8c4620, + 0x288bc: 0x6c092620, + // Block 0xa23, offset 0x288c0 + 0x288c0: 0x6d3eea20, 0x288c1: 0x6c530820, 0x288c3: 0x6c347420, + 0x288c5: 0x6c333c20, 0x288c6: 0x6d087220, + 0x288c8: 0x6ccd3020, 0x288ca: 0x6ccd3220, 0x288cb: 0x6d10d220, + 0x288cc: 0x6cc4b020, + 0x288d4: 0x6ceaf820, 0x288d7: 0x6c0dac20, + 0x288d8: 0x6d069e20, 0x288d9: 0x6cea1a20, 0x288da: 0x6c19d220, + 0x288dc: 0x6c30fe20, 0x288dd: 0x6d171420, + 0x288e1: 0x6c180820, + 0x288f5: 0x6c731a20, 0x288f6: 0x6c5eae20, + 0x288f8: 0x6d2fae20, 0x288f9: 0x6c07de20, 0x288fb: 0x6ce4e220, + // Block 0xa24, offset 0x28900 + 0x28900: 0x6cae6420, + 0x28905: 0x6c3fda20, + 0x28916: 0x6ceb7620, + 0x28918: 0x6cfb3e20, 0x28919: 0x6ca69420, 0x2891a: 0x6c8f8620, + 0x2891d: 0x6d3d4220, 0x2891f: 0x6d32c020, + 0x28920: 0x6cd74820, 0x28921: 0x6d3f7c20, 0x28922: 0x6c3c4620, 0x28923: 0x6c32be20, + 0x28924: 0x6cb09420, 0x28925: 0x6d0d7820, 0x28926: 0x6cda1620, 0x28927: 0x6cc05820, + 0x28928: 0x6c362220, 0x28929: 0x6cb98e20, 0x2892b: 0x6cba0620, + 0x2892d: 0x6c10d420, 0x2892e: 0x6d0a8a20, + 0x28935: 0x6d3c8220, + 0x28938: 0x6c993a20, 0x28939: 0x6c68ee20, + 0x2893f: 0x6d2dea20, + // Block 0xa25, offset 0x28940 + 0x28940: 0x6caffa20, 0x28941: 0x6cf63620, 0x28942: 0x6d0e7c20, 0x28943: 0x6c3ab420, + 0x28944: 0x6ca83620, 0x28946: 0x6d364620, + 0x28948: 0x6cdd6a20, 0x2894a: 0x6d17d020, + 0x2894c: 0x6c82c620, 0x2894d: 0x6d06ea20, 0x2894f: 0x6d17d220, + 0x28952: 0x6cee9620, + 0x28955: 0x6c5ede20, 0x28956: 0x6c186e20, 0x28957: 0x6c2eba20, + 0x28963: 0x6d257020, + 0x28965: 0x6cf78020, 0x28967: 0x6c8e6220, + 0x28968: 0x6cdd6c20, + 0x28971: 0x6c07fc20, 0x28972: 0x6cfa4020, 0x28973: 0x6d0e8c20, + 0x28975: 0x6c24d020, 0x28977: 0x6c773420, + 0x2897a: 0x6cbe4e20, 0x2897b: 0x6c909a20, + 0x2897c: 0x6c087e20, + // Block 0xa26, offset 0x28980 + 0x28988: 0x6d2e6a20, 0x28989: 0x6c24ae20, 0x2898a: 0x6cf3e220, 0x2898b: 0x6d05c020, + 0x2898c: 0x6c187e20, 0x2898d: 0x6c4fd820, 0x2898e: 0x6c748820, + 0x28990: 0x6c192e20, 0x28991: 0x6c13fa20, 0x28992: 0x6c15ce20, 0x28993: 0x6d348820, + 0x28994: 0x6d0a2a20, + 0x289a3: 0x6c441a20, + 0x289a4: 0x6c18e220, 0x289a5: 0x6d132020, + 0x289aa: 0x6c1ee820, 0x289ab: 0x6cc1b820, + 0x289ac: 0x6d020620, 0x289ae: 0x6d2e7c20, 0x289af: 0x6c790820, + 0x289b1: 0x6c74ae20, + 0x289bd: 0x6cc1ba20, 0x289bf: 0x6c9b5020, + // Block 0xa27, offset 0x289c0 + 0x289c0: 0x6d134e20, 0x289c1: 0x6d406620, 0x289c2: 0x6cb45620, + 0x289c4: 0x6cd3e420, + 0x289c9: 0x6cd57220, 0x289ca: 0x6c152a20, + 0x289cd: 0x6c31c420, 0x289cf: 0x6c4c4a20, + 0x289d0: 0x6c92fe20, 0x289d1: 0x6d0c3820, + 0x289d6: 0x6ca7ba20, 0x289d7: 0x6c0d6620, + 0x289df: 0x6ce9cc20, + 0x289e6: 0x6ca6dc20, 0x289e7: 0x6c584220, + 0x289e8: 0x6cb9de20, + 0x289ef: 0x6cfa6020, + 0x289f2: 0x6c8dc620, + 0x289f7: 0x6c882820, + 0x289f9: 0x6d186e20, 0x289fb: 0x6c866620, + 0x289fc: 0x6cd8f020, 0x289ff: 0x6c279a20, + // Block 0xa28, offset 0x28a00 + 0x28a02: 0x6cf11620, + 0x28a05: 0x6c22c020, + 0x28a09: 0x6c6fbe20, 0x28a0a: 0x6c534420, + 0x28a0c: 0x6d210e20, 0x28a0e: 0x6c7c6e20, + 0x28a12: 0x6c4f8020, 0x28a13: 0x6c439620, + 0x28a14: 0x6c39e620, 0x28a17: 0x6c7c8020, + 0x28a1a: 0x6c4a6c20, 0x28a1b: 0x6c1bb020, + 0x28a1e: 0x6c6fc220, + 0x28a21: 0x6cdbce20, + 0x28a24: 0x6c2ec620, + 0x28a2c: 0x6cdc0c20, + 0x28a30: 0x6cbd8620, + 0x28a34: 0x6c4a8020, + 0x28a3b: 0x6d3c6620, + 0x28a3e: 0x6ce5de20, + // Block 0xa29, offset 0x28a40 + 0x28a41: 0x6d26d820, + 0x28a47: 0x6d419220, + 0x28a4f: 0x6cf3e820, + 0x28a50: 0x6c250820, + 0x28a5b: 0x6d36d220, + 0x28a60: 0x6cd72e20, 0x28a62: 0x6c301420, + 0x28a6d: 0x6cef3c20, + 0x28a7f: 0x6c1d4220, + // Block 0xa2a, offset 0x28a80 + 0x28a8b: 0x6cc8f420, + 0x28a96: 0x6c60d420, + 0x28a9c: 0x6c2de820, 0x28a9e: 0x6c124020, + 0x28aa0: 0x6c7a0c20, 0x28aa3: 0x6cef5420, + 0x28aa7: 0x6c11bc20, + 0x28aaa: 0x6c968020, 0x28aab: 0x6caba820, + 0x28ab2: 0x6cca3820, + 0x28ab6: 0x6cef6620, + 0x28abc: 0x6cca3e20, 0x28abf: 0x6c6c7020, + // Block 0xa2b, offset 0x28ac0 + 0x28acc: 0x6cef6e20, + 0x28ade: 0x6c115420, 0x28adf: 0x6c84d020, + 0x28aef: 0x6d273a20, + 0x28af4: 0x6d277220, 0x28af7: 0x6c196420, + 0x28afa: 0x6ccce420, + // Block 0xa2c, offset 0x28b00 + 0x28b02: 0x6c54d620, 0x28b03: 0x6ccc9e20, + 0x28b04: 0x6cea5820, 0x28b06: 0x6c3d3020, + 0x28b08: 0x6cbe1820, 0x28b09: 0x6d05ac20, + 0x28b0d: 0x6c1fe620, 0x28b0e: 0x6c400420, + 0x28b12: 0x6d181220, 0x28b13: 0x6c300c20, + 0x28b14: 0x6c3eb420, 0x28b15: 0x6c3eb620, 0x28b16: 0x6d2ad620, 0x28b17: 0x6cb4ae20, + 0x28b19: 0x6c8d2c20, + 0x28b1d: 0x6ccca020, 0x28b1e: 0x6cad9420, + 0x28b22: 0x6d1a8a20, 0x28b23: 0x6c961e20, + 0x28b24: 0x6c57b620, 0x28b25: 0x6d1b6e20, 0x28b26: 0x6c084a20, 0x28b27: 0x6d209820, + 0x28b28: 0x6ccf7020, 0x28b2a: 0x6d01f220, 0x28b2b: 0x6c1ee620, + 0x28b34: 0x6ccf7220, 0x28b35: 0x6c2d7220, + 0x28b39: 0x6d187020, 0x28b3b: 0x6c183a20, + 0x28b3c: 0x6c451c20, 0x28b3d: 0x6c8fa820, 0x28b3e: 0x6cb2ca20, 0x28b3f: 0x6d280220, + // Block 0xa2d, offset 0x28b40 + 0x28b40: 0x6d0eae20, 0x28b41: 0x6ca15a20, 0x28b43: 0x6cdbd820, + 0x28b4b: 0x6c6ea420, + 0x28b4d: 0x6cd99c20, 0x28b4e: 0x6cad0c20, + 0x28b50: 0x6d0b3820, 0x28b51: 0x6ccb5020, 0x28b52: 0x6c34b820, + 0x28b55: 0x6c207a20, 0x28b56: 0x6d022420, + 0x28b58: 0x6ce95a20, 0x28b59: 0x6c45b420, 0x28b5a: 0x6d08b620, + 0x28b5c: 0x6c7e4e20, 0x28b5e: 0x6c8d5e20, + 0x28b60: 0x6c279020, 0x28b61: 0x6d2c5220, + 0x28b6c: 0x6d1a0a20, 0x28b6d: 0x6cd93c20, 0x28b6f: 0x6d229a20, + 0x28b70: 0x6ceb4c20, 0x28b71: 0x6ceb4e20, + 0x28b74: 0x6c03c420, 0x28b75: 0x6cc4d620, 0x28b76: 0x6c0f8420, 0x28b77: 0x6c279c20, + 0x28b79: 0x6d2c5a20, 0x28b7a: 0x6c543a20, + 0x28b7e: 0x6c5b7820, + // Block 0xa2e, offset 0x28b80 + 0x28b85: 0x6c916020, + 0x28b8a: 0x6c8e2820, 0x28b8b: 0x6cc7d620, + 0x28b95: 0x6c28d220, 0x28b96: 0x6c9b6620, 0x28b97: 0x6cfa5820, + 0x28b98: 0x6cf26220, 0x28b99: 0x6c4e4620, 0x28b9a: 0x6d3eb020, 0x28b9b: 0x6d327420, + 0x28b9c: 0x6ccb7c20, 0x28b9d: 0x6c25fa20, 0x28b9e: 0x6c86e420, + 0x28ba0: 0x6c2ce220, 0x28ba1: 0x6c887e20, 0x28ba2: 0x6c46e020, + 0x28ba6: 0x6caee020, + 0x28baa: 0x6d1c0a20, + 0x28bac: 0x6c548420, 0x28bae: 0x6c336c20, 0x28baf: 0x6cf53e20, + 0x28bb7: 0x6cb1be20, + 0x28bb8: 0x6c520020, 0x28bba: 0x6c8fb820, 0x28bbb: 0x6ca18420, + 0x28bbc: 0x6c3a7620, 0x28bbd: 0x6c93be20, 0x28bbe: 0x6d2b2020, 0x28bbf: 0x6c0fae20, + // Block 0xa2f, offset 0x28bc0 + 0x28bc0: 0x6c2d9620, 0x28bc1: 0x6c98aa20, 0x28bc3: 0x6d3c4e20, + 0x28bc4: 0x6c932220, 0x28bc5: 0x6cace820, 0x28bc6: 0x6c337c20, 0x28bc7: 0x6c10ce20, + 0x28bcc: 0x6c189020, 0x28bcd: 0x6c981220, + 0x28bd6: 0x6cf72420, + 0x28bdd: 0x6c019a20, 0x28bde: 0x6d37dc20, + 0x28be0: 0x6ca44a20, 0x28be1: 0x6cebba20, 0x28be2: 0x6c519c20, + 0x28be5: 0x6c338220, 0x28be6: 0x6ceca020, 0x28be7: 0x6d37de20, + 0x28be8: 0x6c133e20, 0x28be9: 0x6c873620, 0x28bea: 0x6cd6aa20, + 0x28bee: 0x6c134020, + 0x28bf0: 0x6cd84a20, 0x28bf2: 0x6c338420, + 0x28bf4: 0x6c5cdc20, + 0x28bfc: 0x6c654220, 0x28bfd: 0x6ca9e220, 0x28bfe: 0x6c28ea20, 0x28bff: 0x6c409820, + // Block 0xa30, offset 0x28c00 + 0x28c00: 0x6c5e4e20, 0x28c01: 0x6c5c9620, 0x28c02: 0x6c228420, + 0x28c04: 0x6d1e6620, 0x28c05: 0x6cc9b620, 0x28c06: 0x6ce6a420, + 0x28c0e: 0x6c8f5a20, + 0x28c11: 0x6cdb8c20, 0x28c12: 0x6c8da220, 0x28c13: 0x6c97a620, + 0x28c14: 0x6c2d9c20, + 0x28c18: 0x6cad4020, 0x28c1a: 0x6c8da420, + 0x28c1d: 0x6c878620, 0x28c1f: 0x6caa1020, + 0x28c23: 0x6c8b7820, + 0x28c24: 0x6ccd6220, 0x28c26: 0x6c3afe20, + 0x28c2b: 0x6ccd6420, + 0x28c2e: 0x6c8db820, 0x28c2f: 0x6d2eaa20, + 0x28c31: 0x6c0d7820, 0x28c32: 0x6c84dc20, + 0x28c35: 0x6cd86420, 0x28c36: 0x6cc4fc20, 0x28c37: 0x6c655820, + 0x28c38: 0x6d3df020, 0x28c3b: 0x6c8dbe20, + 0x28c3c: 0x6c8dc020, 0x28c3d: 0x6c9c2420, 0x28c3f: 0x6cd6c820, + // Block 0xa31, offset 0x28c40 + 0x28c44: 0x6c8dc820, 0x28c47: 0x6c5d5020, + 0x28c4e: 0x6c8dee20, 0x28c4f: 0x6c655e20, + 0x28c50: 0x6cc23a20, + 0x28c54: 0x6ca9ea20, 0x28c55: 0x6c6e7c20, 0x28c56: 0x6c187020, + 0x28c5c: 0x6d318820, 0x28c5d: 0x6cbede20, 0x28c5f: 0x6cbee220, + 0x28c60: 0x6c36c820, 0x28c63: 0x6ccb9420, + 0x28c69: 0x6c071a20, 0x28c6b: 0x6c3a0020, + 0x28c6e: 0x6c3ab620, 0x28c6f: 0x6c3a3820, + 0x28c74: 0x6c399820, 0x28c75: 0x6c7a7c20, + 0x28c7a: 0x6d28c620, 0x28c7b: 0x6c5c2220, + 0x28c7d: 0x6c3a4420, + // Block 0xa32, offset 0x28c80 + 0x28c81: 0x6c338620, + 0x28c86: 0x6cabca20, 0x28c87: 0x6ca99c20, + 0x28c88: 0x6cad2e20, 0x28c89: 0x6c289820, 0x28c8a: 0x6c27e820, 0x28c8b: 0x6c00b220, + 0x28c8d: 0x6ce50e20, 0x28c8e: 0x6c17a420, 0x28c8f: 0x6c02ac20, + 0x28c90: 0x6c9aa020, 0x28c91: 0x6ca43420, + 0x28c94: 0x6c0ff420, 0x28c95: 0x6d23b420, 0x28c96: 0x6cfac420, 0x28c97: 0x6c973a20, + 0x28c9a: 0x6cb26420, + 0x28c9c: 0x6c331020, 0x28c9e: 0x6c2a3020, + 0x28ca1: 0x6d043a20, 0x28ca2: 0x6ca6ce20, 0x28ca3: 0x6c4dba20, + 0x28ca4: 0x6c1f7a20, 0x28ca5: 0x6cd64a20, 0x28ca6: 0x6c97cc20, + 0x28cac: 0x6ceda420, 0x28cad: 0x6d18dc20, 0x28cae: 0x6c2e4820, 0x28caf: 0x6d0c3a20, + 0x28cb1: 0x6cf32420, 0x28cb2: 0x6cdba220, + 0x28cb4: 0x6c019420, 0x28cb5: 0x6c7fd420, 0x28cb6: 0x6ca43e20, + 0x28cb8: 0x6cc0b620, 0x28cb9: 0x6c9e6820, 0x28cba: 0x6caae420, 0x28cbb: 0x6c11c020, + 0x28cbc: 0x6c11e620, + // Block 0xa33, offset 0x28cc0 + 0x28cc0: 0x6c808620, 0x28cc1: 0x6ce52a20, 0x28cc2: 0x6d139220, + 0x28cc4: 0x6ca74e20, 0x28cc6: 0x6cd64e20, + 0x28ccb: 0x6c228620, + 0x28ccd: 0x6c663a20, + 0x28cd0: 0x6c424020, + 0x28cd4: 0x6c673220, 0x28cd5: 0x6c4caa20, 0x28cd7: 0x6d2dd620, + 0x28cd9: 0x6c95dc20, + 0x28cdc: 0x6c5ebc20, 0x28cdd: 0x6c4b5220, + 0x28ce1: 0x6c63d220, 0x28ce2: 0x6c614a20, + 0x28ce5: 0x6d08a020, 0x28ce7: 0x6c3c5a20, + 0x28ceb: 0x6c09ea20, + 0x28cec: 0x6cb60a20, 0x28cef: 0x6d258e20, + 0x28cf0: 0x6c021a20, 0x28cf1: 0x6c2b3820, + 0x28cf4: 0x6c366820, 0x28cf5: 0x6c3b7e20, + 0x28cf8: 0x6c727020, 0x28cf9: 0x6ca64220, 0x28cfa: 0x6ceb3c20, + 0x28cfc: 0x6cd00c20, 0x28cfd: 0x6c3eca20, 0x28cfe: 0x6cf9e420, 0x28cff: 0x6cc1ac20, + // Block 0xa34, offset 0x28d00 + 0x28d00: 0x6cb39a20, 0x28d01: 0x6ced4220, 0x28d02: 0x6c8d4220, 0x28d03: 0x6c96d220, + 0x28d04: 0x6d394020, 0x28d05: 0x6c065c20, 0x28d07: 0x6d23b620, + 0x28d0c: 0x6c082a20, 0x28d0d: 0x6c973c20, 0x28d0f: 0x6c637a20, + 0x28d11: 0x6d102e20, 0x28d13: 0x6c7ade20, + 0x28d14: 0x6c69c020, 0x28d16: 0x6c0df220, + 0x28d1a: 0x6c962420, 0x28d1b: 0x6c4b1820, + 0x28d1c: 0x6c351420, 0x28d1d: 0x6d36d420, + 0x28d21: 0x6d326020, 0x28d22: 0x6c369e20, 0x28d23: 0x6d39ca20, + 0x28d24: 0x6c039020, + 0x28d28: 0x6d326220, 0x28d29: 0x6c3c6820, 0x28d2a: 0x6c313820, 0x28d2b: 0x6ca73c20, + 0x28d2c: 0x6c10bc20, 0x28d2d: 0x6c336020, 0x28d2e: 0x6ccc1c20, 0x28d2f: 0x6ccb6820, + 0x28d30: 0x6c0a6220, + 0x28d34: 0x6d36f420, 0x28d35: 0x6d309820, 0x28d36: 0x6c10be20, + 0x28d3a: 0x6c74c420, 0x28d3b: 0x6d0aa820, + 0x28d3f: 0x6cf90020, + // Block 0xa35, offset 0x28d40 + 0x28d41: 0x6d3db820, 0x28d42: 0x6c045a20, 0x28d43: 0x6d115c20, + 0x28d44: 0x6c1e3420, 0x28d45: 0x6cdeb620, 0x28d46: 0x6cb93020, + 0x28d48: 0x6ca53820, 0x28d49: 0x6d242020, 0x28d4a: 0x6c36bc20, 0x28d4b: 0x6c650820, + 0x28d4c: 0x6d18de20, 0x28d4d: 0x6cff2a20, 0x28d4f: 0x6ca88020, + 0x28d52: 0x6c0db620, + 0x28d57: 0x6c4cd420, + 0x28d58: 0x6d010820, 0x28d59: 0x6c2e4a20, + 0x28d5c: 0x6c70d620, 0x28d5d: 0x6cdda420, 0x28d5e: 0x6c2ef420, 0x28d5f: 0x6c3f1420, + 0x28d60: 0x6c9e4420, 0x28d61: 0x6cd3fa20, 0x28d62: 0x6d08c420, 0x28d63: 0x6ce39c20, + 0x28d64: 0x6d244420, 0x28d67: 0x6d011820, + 0x28d68: 0x6c3f1620, 0x28d69: 0x6d373420, 0x28d6a: 0x6ca65a20, 0x28d6b: 0x6d08c620, + 0x28d6c: 0x6d0fe820, 0x28d6e: 0x6c3cd020, 0x28d6f: 0x6d403c20, + 0x28d70: 0x6d395e20, 0x28d71: 0x6d07de20, + 0x28d75: 0x6d39d820, 0x28d77: 0x6c7edc20, + 0x28d79: 0x6d1d5820, 0x28d7a: 0x6c435c20, 0x28d7b: 0x6c7e2c20, + 0x28d7d: 0x6c358820, 0x28d7e: 0x6cef5620, 0x28d7f: 0x6c9a3620, + // Block 0xa36, offset 0x28d80 + 0x28d83: 0x6c57fe20, + 0x28d84: 0x6c1e3820, 0x28d86: 0x6cddb220, 0x28d87: 0x6cdec820, + 0x28d88: 0x6cddb420, 0x28d89: 0x6cdeca20, 0x28d8a: 0x6d097a20, + 0x28d8c: 0x6c460820, 0x28d8d: 0x6c643220, 0x28d8f: 0x6c0fb020, + 0x28d90: 0x6cdecc20, 0x28d91: 0x6d25f620, + 0x28d98: 0x6cdece20, + 0x28d9d: 0x6c20ec20, + 0x28da0: 0x6d047820, 0x28da1: 0x6c519820, 0x28da2: 0x6cdd4820, + 0x28da7: 0x6ca18a20, + 0x28da8: 0x6c1d2c20, 0x28da9: 0x6cdbe420, 0x28daa: 0x6d2b2220, 0x28dab: 0x6c933220, + 0x28dac: 0x6d2eea20, 0x28dad: 0x6c963c20, 0x28dae: 0x6d075820, 0x28daf: 0x6c653a20, + 0x28db0: 0x6ccd2220, 0x28db2: 0x6d075a20, + 0x28dbe: 0x6c67cc20, + // Block 0xa37, offset 0x28dc0 + 0x28dc2: 0x6c067c20, 0x28dc3: 0x6c970c20, + 0x28dc5: 0x6ce7a020, 0x28dc6: 0x6cf92c20, + 0x28dc9: 0x6cc6e620, 0x28dcb: 0x6cd12a20, + 0x28dcc: 0x6d396c20, 0x28dce: 0x6c654420, 0x28dcf: 0x6c409a20, + 0x28dd0: 0x6c2afa20, 0x28dd3: 0x6d1de220, + 0x28dd4: 0x6c70e420, 0x28dd6: 0x6d195e20, 0x28dd7: 0x6c054820, + 0x28dd9: 0x6ccb9620, 0x28dda: 0x6cdcc620, + 0x28ddc: 0x6c346e20, 0x28ddd: 0x6d028420, + 0x28de1: 0x6c58c820, + 0x28de5: 0x6cc80c20, 0x28de6: 0x6ca66c20, 0x28de7: 0x6d397020, + 0x28de8: 0x6c4bac20, 0x28dea: 0x6c964820, + 0x28df2: 0x6d342e20, 0x28df3: 0x6d076c20, + 0x28df5: 0x6d343020, 0x28df7: 0x6c752a20, + 0x28df8: 0x6c70e820, 0x28dfb: 0x6d25da20, + 0x28dfc: 0x6c91a420, 0x28dff: 0x6c0fda20, + // Block 0xa38, offset 0x28e00 + 0x28e02: 0x6cc6ea20, 0x28e03: 0x6d029620, + 0x28e09: 0x6cf83220, 0x28e0a: 0x6c959a20, + 0x28e0e: 0x6c447020, + 0x28e11: 0x6d414620, 0x28e12: 0x6c4eca20, + 0x28e14: 0x6c685620, 0x28e15: 0x6cc95420, 0x28e16: 0x6cbd8a20, 0x28e17: 0x6cc43c20, + 0x28e18: 0x6cad6420, 0x28e19: 0x6d26da20, 0x28e1a: 0x6c182c20, 0x28e1b: 0x6c3ece20, + 0x28e1c: 0x6cadc020, 0x28e1f: 0x6c9aa420, + 0x28e22: 0x6ce1de20, + 0x28e24: 0x6c78f020, 0x28e25: 0x6cf8d420, + 0x28e2b: 0x6c351620, + 0x28e2d: 0x6d187220, + 0x28e30: 0x6cdc7e20, 0x28e32: 0x6cf9f820, 0x28e33: 0x6c730420, + 0x28e35: 0x6cef3e20, 0x28e37: 0x6d18ba20, + 0x28e39: 0x6d242220, 0x28e3b: 0x6c045c20, + 0x28e3c: 0x6ceb5820, 0x28e3d: 0x6cdeb820, 0x28e3e: 0x6cad6e20, + // Block 0xa39, offset 0x28e40 + 0x28e42: 0x6c0dfc20, + 0x28e45: 0x6d286820, 0x28e46: 0x6d286a20, 0x28e47: 0x6c32e220, + 0x28e48: 0x6cc88620, 0x28e49: 0x6cef5820, + 0x28e4f: 0x6cf05020, + 0x28e50: 0x6c4b9820, 0x28e52: 0x6c26d420, 0x28e53: 0x6cfa1420, + 0x28e56: 0x6c5d4a20, 0x28e57: 0x6c733220, + 0x28e58: 0x6cdbe620, 0x28e5a: 0x6cdcbc20, + 0x28e5d: 0x6c90d620, 0x28e5e: 0x6c046420, 0x28e5f: 0x6d246e20, + 0x28e60: 0x6d337420, 0x28e61: 0x6c4ba620, 0x28e63: 0x6c7c5820, + 0x28e64: 0x6c42f220, 0x28e65: 0x6c281620, + 0x28e69: 0x6cfc5a20, 0x28e6a: 0x6d2d2420, 0x28e6b: 0x6ccb9820, + 0x28e6d: 0x6c784620, 0x28e6e: 0x6c105020, 0x28e6f: 0x6c0fce20, + 0x28e72: 0x6cdcc820, + 0x28e74: 0x6d249420, 0x28e75: 0x6c105220, 0x28e76: 0x6c6f9220, 0x28e77: 0x6c6f9420, + 0x28e79: 0x6c73aa20, 0x28e7a: 0x6c754220, + 0x28e7c: 0x6ca31620, 0x28e7d: 0x6d2d1c20, 0x28e7e: 0x6ce1ba20, 0x28e7f: 0x6cefec20, + // Block 0xa3a, offset 0x28e80 + 0x28e80: 0x6cf9dc20, 0x28e81: 0x6d01cc20, + 0x28e85: 0x6cc9a620, 0x28e86: 0x6c5f6620, + 0x28e89: 0x6d026a20, + 0x28e8c: 0x6c338c20, 0x28e8d: 0x6d3f2620, + 0x28e98: 0x6d25ee20, 0x28e99: 0x6cbe1e20, 0x28e9a: 0x6c3ed020, 0x28e9b: 0x6caeba20, + 0x28e9c: 0x6cad6620, 0x28e9e: 0x6d1b7620, + 0x28ea0: 0x6c52c220, 0x28ea1: 0x6d40d420, 0x28ea3: 0x6c45a820, + 0x28ea4: 0x6c308820, 0x28ea5: 0x6c50a820, 0x28ea6: 0x6cf31020, + 0x28ea8: 0x6cace220, 0x28eab: 0x6cdb2820, + 0x28eac: 0x6c76f020, 0x28ead: 0x6ca88220, 0x28eae: 0x6c4ffa20, 0x28eaf: 0x6c3cfa20, + 0x28eb0: 0x6c36be20, 0x28eb1: 0x6d137620, + 0x28eb4: 0x6ce69820, 0x28eb5: 0x6c309420, 0x28eb6: 0x6d30ba20, 0x28eb7: 0x6cca7820, + 0x28ebb: 0x6ca18c20, + 0x28ebc: 0x6cdb6020, 0x28ebe: 0x6c823220, + // Block 0xa3b, offset 0x28ec0 + 0x28ec0: 0x6cb4a620, 0x28ec1: 0x6c35a620, 0x28ec2: 0x6d3de220, 0x28ec3: 0x6d139820, + 0x28ec7: 0x6cfda220, + 0x28ec8: 0x6c4a2c20, 0x28ec9: 0x6cc59e20, 0x28eca: 0x6c8dfe20, + 0x28ecd: 0x6c02cc20, + 0x28ed0: 0x6c146820, 0x28ed2: 0x6c345620, 0x28ed3: 0x6cbf3620, + 0x28ed4: 0x6c7a4620, 0x28ed5: 0x6d05b020, 0x28ed6: 0x6c587c20, 0x28ed7: 0x6d10aa20, + 0x28ed8: 0x6d324620, 0x28ed9: 0x6ce6da20, 0x28eda: 0x6c082420, + 0x28edd: 0x6c020220, 0x28edf: 0x6c76b420, + 0x28ee1: 0x6c7a4c20, 0x28ee2: 0x6cadde20, 0x28ee3: 0x6d205220, + 0x28ee4: 0x6c02aa20, 0x28ee5: 0x6c9ad020, 0x28ee6: 0x6ca13620, + 0x28eec: 0x6c3f7220, 0x28eed: 0x6cbe5020, 0x28eee: 0x6c7e8220, 0x28eef: 0x6c30f220, + 0x28ef0: 0x6ce06c20, 0x28ef3: 0x6cba1c20, + 0x28ef4: 0x6d121c20, 0x28ef5: 0x6cf0b620, 0x28ef6: 0x6c558c20, 0x28ef7: 0x6ca14620, + 0x28ef8: 0x6c50a620, 0x28ef9: 0x6d08ac20, 0x28efb: 0x6c0a1220, + 0x28efc: 0x6cb31a20, 0x28efe: 0x6c2b3c20, + // Block 0xa3c, offset 0x28f00 + 0x28f00: 0x6d31f020, 0x28f02: 0x6cd1e420, 0x28f03: 0x6c76e420, + 0x28f04: 0x6c130c20, 0x28f07: 0x6d05c420, + 0x28f08: 0x6d31f220, 0x28f0a: 0x6d3a7820, + 0x28f0f: 0x6c5c2420, + 0x28f10: 0x6c1bc020, 0x28f13: 0x6c53aa20, + 0x28f14: 0x6caa0420, 0x28f15: 0x6ca86a20, 0x28f16: 0x6d0eb020, + 0x28f18: 0x6c1d4020, 0x28f19: 0x6c3f8620, 0x28f1a: 0x6c49f420, 0x28f1b: 0x6cb52c20, + 0x28f1d: 0x6c44a220, 0x28f1e: 0x6ce6e020, + 0x28f22: 0x6ce07220, 0x28f23: 0x6cba2020, + 0x28f26: 0x6c702020, 0x28f27: 0x6d05e220, + 0x28f28: 0x6cb71620, 0x28f2a: 0x6d326420, + 0x28f2e: 0x6cc09c20, + 0x28f30: 0x6c35bc20, 0x28f33: 0x6c5c4c20, + 0x28f34: 0x6c53d820, 0x28f35: 0x6cbeb420, 0x28f37: 0x6c17e020, + 0x28f3a: 0x6c405c20, + 0x28f3c: 0x6c52ce20, 0x28f3d: 0x6cf6e220, 0x28f3e: 0x6cf3ee20, 0x28f3f: 0x6c987820, + // Block 0xa3d, offset 0x28f40 + 0x28f42: 0x6ce2fc20, + 0x28f45: 0x6c52d020, + 0x28f50: 0x6c0f6a20, 0x28f52: 0x6cbde820, 0x28f53: 0x6c44a420, + 0x28f56: 0x6c3f0020, 0x28f57: 0x6c7cde20, + 0x28f5d: 0x6c0cfe20, 0x28f5e: 0x6c6eba20, 0x28f5f: 0x6c76f220, + 0x28f60: 0x6c4a9020, 0x28f62: 0x6c432820, 0x28f63: 0x6d05f420, + 0x28f64: 0x6c01d420, 0x28f65: 0x6d26f420, 0x28f66: 0x6cf53420, 0x28f67: 0x6d157a20, + 0x28f68: 0x6c6dda20, 0x28f6a: 0x6c930220, 0x28f6b: 0x6cc31c20, + 0x28f6c: 0x6ce9c820, 0x28f6e: 0x6c62a420, + 0x28f7a: 0x6c6f3420, 0x28f7b: 0x6c74d420, + 0x28f7c: 0x6cb1d620, 0x28f7d: 0x6c7d8a20, + // Block 0xa3e, offset 0x28f80 + 0x28f80: 0x6cec7420, 0x28f81: 0x6c5c7620, 0x28f82: 0x6c341220, 0x28f83: 0x6d25f420, + 0x28f84: 0x6c6b6a20, 0x28f86: 0x6c4b9020, 0x28f87: 0x6c432e20, + 0x28f88: 0x6cb3b220, 0x28f89: 0x6c9ade20, 0x28f8a: 0x6d3bf020, 0x28f8b: 0x6c4f9c20, + 0x28f94: 0x6d1e0420, 0x28f95: 0x6cc0a420, 0x28f97: 0x6c834e20, + 0x28f98: 0x6c020620, 0x28f99: 0x6cb08020, 0x28f9a: 0x6cf24220, + 0x28f9d: 0x6cbe2a20, 0x28f9f: 0x6cbdee20, + 0x28fa0: 0x6c9f0620, 0x28fa1: 0x6c30d020, 0x28fa2: 0x6c9c9420, 0x28fa3: 0x6d2db820, + 0x28fa5: 0x6cbec020, 0x28fa6: 0x6d158c20, + 0x28fae: 0x6c04aa20, + 0x28fb1: 0x6c730a20, 0x28fb3: 0x6d2b2420, + 0x28fb4: 0x6d075c20, 0x28fb5: 0x6c7ff420, 0x28fb6: 0x6c968220, 0x28fb7: 0x6c968420, + 0x28fb8: 0x6cab6220, 0x28fb9: 0x6c06c020, 0x28fbb: 0x6cb3e820, + 0x28fbc: 0x6d075e20, + // Block 0xa3f, offset 0x28fc0 + 0x28fc0: 0x6c02fe20, + 0x28fc6: 0x6c53ae20, + 0x28fc9: 0x6c53b020, 0x28fca: 0x6d2e3c20, + 0x28fcc: 0x6ccbb620, 0x28fcd: 0x6c433020, 0x28fcf: 0x6cb34420, + 0x28fd0: 0x6c8aae20, + 0x28fd5: 0x6cec7a20, 0x28fd6: 0x6d07f420, + 0x28fdc: 0x6c7cb820, 0x28fdf: 0x6c36ea20, + 0x28fe0: 0x6c4f3e20, 0x28fe1: 0x6ccb9a20, + 0x28fe4: 0x6c28ee20, + 0x28fea: 0x6d07f620, + 0x28fec: 0x6c36f420, 0x28fed: 0x6c415a20, 0x28fef: 0x6c29c820, + 0x28ff1: 0x6c9bfa20, 0x28ff2: 0x6d143e20, 0x28ff3: 0x6ca94e20, + 0x28ff5: 0x6cb23020, + 0x28ff9: 0x6c124620, + 0x28ffe: 0x6d263c20, + // Block 0xa40, offset 0x29000 + 0x29000: 0x6c36fc20, 0x29001: 0x6ca8ca20, + 0x29004: 0x6d1b2e20, 0x29007: 0x6cbbca20, + 0x29009: 0x6c52e220, 0x2900a: 0x6c8dca20, + 0x2900c: 0x6c14e820, 0x2900d: 0x6d1d3020, + 0x29012: 0x6c494820, + 0x29014: 0x6ca7ca20, 0x29015: 0x6d05c620, 0x29016: 0x6cdff820, 0x29017: 0x6c6d6e20, + 0x2901b: 0x6caea620, + 0x2901d: 0x6c89e820, + 0x29020: 0x6c072c20, 0x29023: 0x6d030020, + 0x29024: 0x6cea6020, 0x29025: 0x6c174e20, 0x29026: 0x6c41a420, + 0x29028: 0x6c54e020, 0x29029: 0x6cee2e20, + 0x2902c: 0x6c3eba20, 0x2902d: 0x6cae2220, 0x2902f: 0x6ca4b620, + 0x29030: 0x6d0a1820, 0x29031: 0x6d096c20, + 0x29034: 0x6c8f1220, 0x29035: 0x6c8d4420, 0x29036: 0x6d097020, 0x29037: 0x6cc12e20, + 0x29038: 0x6c4fda20, 0x29039: 0x6d153c20, 0x2903a: 0x6c4ef420, + 0x2903c: 0x6c3ed220, 0x2903d: 0x6c038a20, 0x2903e: 0x6d153e20, + // Block 0xa41, offset 0x29040 + 0x29040: 0x6c0f3820, + 0x29044: 0x6c52c420, 0x29045: 0x6c866a20, + 0x29049: 0x6cc98820, 0x2904a: 0x6cf6b220, + 0x2904e: 0x6cd3ce20, 0x2904f: 0x6cb15e20, + 0x29050: 0x6c57c220, 0x29051: 0x6d155220, 0x29052: 0x6c0f5220, 0x29053: 0x6c0f6c20, + 0x29054: 0x6ca57620, 0x29055: 0x6cc09e20, + 0x29058: 0x6cf01e20, 0x29059: 0x6c184a20, 0x2905a: 0x6d1f7820, + 0x2905c: 0x6cf0dc20, 0x2905d: 0x6c5b6820, 0x2905e: 0x6cc99a20, + 0x29062: 0x6c53da20, 0x29063: 0x6cd9e820, + 0x29064: 0x6c4f1220, 0x29065: 0x6cad6a20, 0x29067: 0x6c39b020, + 0x29069: 0x6c8eae20, 0x2906a: 0x6d395a20, 0x2906b: 0x6cb02a20, + 0x2906d: 0x6c86b620, + 0x29070: 0x6c20e820, 0x29071: 0x6cf6fc20, 0x29072: 0x6d330220, + 0x29074: 0x6c085620, 0x29075: 0x6d333420, 0x29076: 0x6cdc9620, 0x29077: 0x6d0de420, + 0x2907c: 0x6cbe5a20, 0x2907d: 0x6cf53620, 0x2907e: 0x6c89a620, + // Block 0xa42, offset 0x29080 + 0x29080: 0x6d2fe420, 0x29081: 0x6c897220, + 0x29085: 0x6c6a3c20, 0x29087: 0x6c52da20, + 0x29088: 0x6d1ec020, 0x2908a: 0x6c7ea220, 0x2908b: 0x6c548620, + 0x2908d: 0x6d263620, 0x2908e: 0x6c539620, 0x2908f: 0x6d137820, + 0x29091: 0x6d1d1c20, 0x29092: 0x6d086020, 0x29093: 0x6d1f8620, + 0x29098: 0x6cc32020, + 0x2909c: 0x6ce15e20, 0x2909d: 0x6cddb620, 0x2909f: 0x6c871020, + 0x290a0: 0x6cd9fc20, 0x290a1: 0x6c871220, + 0x290a4: 0x6d245420, 0x290a7: 0x6d192020, + 0x290ad: 0x6d051220, 0x290ae: 0x6c028620, 0x290af: 0x6ce97420, + 0x290b0: 0x6cdb6220, 0x290b1: 0x6cd67a20, 0x290b3: 0x6d247020, + 0x290b5: 0x6c3c7a20, + 0x290b9: 0x6cdb6620, 0x290ba: 0x6ce9da20, 0x290bb: 0x6d247220, + 0x290bc: 0x6d331020, 0x290bd: 0x6d331220, 0x290bf: 0x6ce25420, + // Block 0xa43, offset 0x290c0 + 0x290c4: 0x6c8ee020, 0x290c6: 0x6c1a5c20, 0x290c7: 0x6cdc0620, + 0x290c8: 0x6ccad820, + 0x290cf: 0x6c47f420, + 0x290d0: 0x6c3c8a20, 0x290d1: 0x6c8b8420, 0x290d2: 0x6cb17a20, + 0x290d6: 0x6c87b620, + 0x290d8: 0x6c901820, 0x290d9: 0x6c1e7020, 0x290da: 0x6cff6220, 0x290db: 0x6c52e420, + 0x290dc: 0x6d029820, 0x290dd: 0x6ccf9420, + 0x290e0: 0x6c902620, 0x290e1: 0x6c53ea20, 0x290e2: 0x6d083e20, 0x290e3: 0x6c3c9620, + 0x290e5: 0x6c037420, 0x290e6: 0x6c0ecc20, 0x290e7: 0x6ce22620, + 0x290e8: 0x6cdabc20, 0x290e9: 0x6d2fb820, 0x290ea: 0x6c0c0220, 0x290eb: 0x6cd9c420, + 0x290ec: 0x6ce9aa20, 0x290ed: 0x6cdd8820, 0x290ee: 0x6cfefa20, 0x290ef: 0x6c527220, + 0x290f0: 0x6ccac620, 0x290f2: 0x6c3a1020, + 0x290f7: 0x6ca9aa20, + 0x290f8: 0x6c98ac20, + 0x290fd: 0x6c58ca20, 0x290fe: 0x6d343420, + // Block 0xa44, offset 0x29100 + 0x29102: 0x6d171620, + 0x29104: 0x6d22fe20, 0x29107: 0x6d14f020, + 0x29108: 0x6d264e20, 0x29109: 0x6c1b2220, + 0x29115: 0x6d1aea20, 0x29116: 0x6ca9a620, 0x29117: 0x6cc71420, + 0x2911b: 0x6ca34a20, + 0x29123: 0x6ce4a620, + 0x29125: 0x6c035020, + 0x2912a: 0x6c379c20, 0x2912b: 0x6d32dc20, + 0x2912c: 0x6c366a20, 0x2912d: 0x6cb3dc20, 0x2912e: 0x6c5efa20, 0x2912f: 0x6ca5f620, + 0x29131: 0x6c6f2020, 0x29132: 0x6c63d420, + 0x29135: 0x6c41a620, + 0x29139: 0x6c8d2e20, 0x2913b: 0x6d41bc20, + 0x2913e: 0x6c073820, + // Block 0xa45, offset 0x29140 + 0x29145: 0x6cd4f220, 0x29146: 0x6d15fc20, 0x29147: 0x6cabf420, + 0x2914b: 0x6ca50e20, + 0x2914c: 0x6cd3c020, 0x2914e: 0x6c97c620, 0x2914f: 0x6cd3c220, + 0x29151: 0x6ce35e20, + 0x29158: 0x6c45a420, + 0x2915d: 0x6c834420, 0x2915e: 0x6c061020, 0x2915f: 0x6d251020, + 0x29160: 0x6d422820, 0x29161: 0x6c80e620, 0x29162: 0x6d04f220, + 0x29165: 0x6d294220, 0x29166: 0x6c1a8620, 0x29167: 0x6c64e820, + 0x29168: 0x6c99b420, 0x29169: 0x6c63e220, 0x2916a: 0x6d23de20, + 0x2916d: 0x6d23e020, 0x2916e: 0x6d155420, + 0x29172: 0x6c982020, 0x29173: 0x6d294420, + 0x29175: 0x6d3ca820, 0x29176: 0x6ce37620, + 0x29179: 0x6cf8d620, 0x2917a: 0x6c716020, 0x2917b: 0x6d299e20, + 0x2917c: 0x6c92e420, 0x2917d: 0x6ce24420, + // Block 0xa46, offset 0x29180 + 0x29180: 0x6d3cb020, 0x29181: 0x6c8d6020, 0x29183: 0x6c729c20, + 0x29186: 0x6c5f4c20, 0x29187: 0x6c733020, + 0x2918a: 0x6d3e9a20, + 0x2918c: 0x6d265a20, 0x2918d: 0x6c301620, + 0x29192: 0x6ca47020, + 0x29196: 0x6c1d2420, + 0x2919f: 0x6c022020, + 0x291a3: 0x6c44e020, + 0x291a5: 0x6c0e9420, 0x291a6: 0x6c2fbc20, 0x291a7: 0x6cf02220, + 0x291ac: 0x6cc31a20, 0x291ad: 0x6c783a20, + 0x291b0: 0x6cb0cc20, 0x291b1: 0x6c76f420, 0x291b2: 0x6c3f0e20, 0x291b3: 0x6d1e6220, + 0x291b5: 0x6ce96620, 0x291b6: 0x6ce81e20, 0x291b7: 0x6d205a20, + 0x291b8: 0x6d10c020, 0x291ba: 0x6d126c20, + 0x291bd: 0x6d0ed220, + // Block 0xa47, offset 0x291c0 + 0x291c8: 0x6cfbb220, 0x291ca: 0x6ce38e20, + 0x291cc: 0x6cdc9820, + 0x291d0: 0x6c227420, + 0x291d4: 0x6d066220, 0x291d5: 0x6cf53820, 0x291d6: 0x6c117420, 0x291d7: 0x6d242420, + 0x291da: 0x6c15f820, 0x291db: 0x6cfa1020, + 0x291dd: 0x6c77ce20, 0x291de: 0x6c124220, 0x291df: 0x6c13bc20, + 0x291e0: 0x6cc0b420, 0x291e3: 0x6c267220, + 0x291e5: 0x6cdb5620, + 0x291e8: 0x6c571c20, + 0x291f7: 0x6cf38e20, + 0x291f8: 0x6d251a20, + 0x291fd: 0x6c681220, 0x291fe: 0x6cfe0820, 0x291ff: 0x6d2d0620, + // Block 0xa48, offset 0x29200 + 0x29200: 0x6cca3a20, 0x29201: 0x6ca09220, 0x29203: 0x6cce3e20, + 0x29204: 0x6c12a420, 0x29205: 0x6cdbe220, 0x29206: 0x6c208420, 0x29207: 0x6c9c9620, + 0x29208: 0x6d3a3420, 0x29209: 0x6c1d2820, 0x2920a: 0x6c62c220, 0x2920b: 0x6c1d2a20, + 0x29219: 0x6c889020, + 0x2921e: 0x6c4d8020, + 0x29224: 0x6c33c220, 0x29225: 0x6cfe0c20, 0x29226: 0x6c19ae20, 0x29227: 0x6cce4020, + 0x29228: 0x6c873820, 0x29229: 0x6c5a2c20, + 0x2922c: 0x6c2af820, 0x2922f: 0x6c897a20, + 0x29236: 0x6d28a420, + 0x2923a: 0x6c5e4420, 0x2923b: 0x6c8c0420, + 0x2923e: 0x6c31ee20, 0x2923f: 0x6c4f3620, + // Block 0xa49, offset 0x29240 + 0x29240: 0x6d1ddc20, 0x29241: 0x6d263a20, 0x29242: 0x6c4cf420, 0x29243: 0x6c8d9c20, + 0x29245: 0x6c88de20, 0x29247: 0x6c030220, + 0x29248: 0x6c292220, 0x29249: 0x6d194e20, 0x2924a: 0x6ca9e420, 0x2924b: 0x6ccde620, + 0x2924d: 0x6d035c20, + 0x29250: 0x6c26da20, 0x29251: 0x6d247420, 0x29252: 0x6c118220, 0x29253: 0x6cf33420, + 0x29254: 0x6c141420, 0x29255: 0x6c0fca20, 0x29257: 0x6c663020, + 0x2925e: 0x6c9bb820, 0x2925f: 0x6cf05e20, + 0x29260: 0x6ca09e20, + 0x29265: 0x6cd73820, 0x29266: 0x6c6b8220, 0x29267: 0x6cd7b220, + 0x29268: 0x6c5e5420, 0x2926b: 0x6c21ee20, + 0x2926d: 0x6c901420, 0x2926e: 0x6c582420, + 0x29270: 0x6ceada20, 0x29273: 0x6d220620, + 0x29276: 0x6c165a20, 0x29277: 0x6d1dee20, + 0x29278: 0x6c5e5e20, 0x2927a: 0x6c806820, + 0x2927f: 0x6ca30c20, + // Block 0xa4a, offset 0x29280 + 0x29280: 0x6c032220, 0x29281: 0x6c418020, 0x29282: 0x6d15cc20, 0x29283: 0x6c63ac20, + 0x29285: 0x6c269220, 0x29286: 0x6c2fa420, 0x29287: 0x6d0a8220, + 0x29288: 0x6cc59620, 0x29289: 0x6c732020, 0x2928a: 0x6ce94c20, 0x2928b: 0x6d064020, + 0x2928c: 0x6cd99220, 0x2928e: 0x6c128420, 0x2928f: 0x6c198e20, + 0x29291: 0x6c2f7020, + 0x2929a: 0x6c4d2620, + 0x2929f: 0x6cf47220, + 0x292a6: 0x6cb72020, + 0x292a8: 0x6c5f6820, + 0x292ae: 0x6c7cac20, 0x292af: 0x6cef5e20, + 0x292b6: 0x6cd44e20, 0x292b7: 0x6c3f2820, + 0x292b9: 0x6ce97a20, 0x292bb: 0x6c0cf020, + 0x292bd: 0x6cdff020, 0x292be: 0x6c4f5220, 0x292bf: 0x6cb1ce20, + // Block 0xa4b, offset 0x292c0 + 0x292c3: 0x6d217e20, + 0x292c4: 0x6cdffa20, + 0x292cc: 0x6cfd9020, 0x292ce: 0x6d050c20, + 0x292d3: 0x6cf26820, + 0x292d4: 0x6c4d8220, 0x292d5: 0x6caef220, + 0x292dd: 0x6ce04620, 0x292df: 0x6c0d0a20, + 0x292e0: 0x6cfd9e20, 0x292e3: 0x6d162e20, + 0x292e6: 0x6cb19020, 0x292e7: 0x6c586c20, + 0x292e8: 0x6ca24020, 0x292e9: 0x6c035220, 0x292eb: 0x6c396020, + 0x292ef: 0x6c2f6020, + 0x292f7: 0x6c3b3c20, + 0x292fa: 0x6c6bf620, + 0x292fe: 0x6cdd4a20, + // Block 0xa4c, offset 0x29300 + 0x29304: 0x6ced9220, 0x29305: 0x6c43a220, + 0x29308: 0x6c3b3e20, 0x2930a: 0x6ceb4420, + 0x2930c: 0x6cf1a620, 0x2930d: 0x6c487620, 0x2930e: 0x6c343620, + 0x29310: 0x6d308820, 0x29311: 0x6c22a020, 0x29312: 0x6d11ce20, + 0x29314: 0x6c050420, 0x29315: 0x6c10b820, 0x29316: 0x6ca15c20, + 0x29318: 0x6cb35e20, 0x2931b: 0x6c443020, + 0x2931e: 0x6c8e9220, + 0x29321: 0x6cc4d020, + 0x29328: 0x6c41b020, 0x2932a: 0x6c55a220, 0x2932b: 0x6ca1e620, + 0x2932e: 0x6d04f620, 0x2932f: 0x6c59a220, + 0x29330: 0x6c3f0220, 0x29331: 0x6c5b4220, 0x29333: 0x6cc1ca20, + 0x29334: 0x6c6b3e20, 0x29335: 0x6cead220, 0x29336: 0x6d21ac20, 0x29337: 0x6ca16820, + 0x29338: 0x6d38b220, 0x29339: 0x6c702820, 0x2933b: 0x6cd53c20, + 0x2933c: 0x6c7bae20, 0x2933d: 0x6cbf6620, 0x2933e: 0x6c8b2c20, 0x2933f: 0x6c405e20, + // Block 0xa4d, offset 0x29340 + 0x2934a: 0x6d074420, + 0x29356: 0x6c8c6e20, + 0x29358: 0x6ca88420, 0x2935a: 0x6caf9c20, + 0x2935c: 0x6c406e20, 0x2935d: 0x6c10c620, 0x2935e: 0x6d18e020, + 0x29361: 0x6c0f8620, 0x29363: 0x6c358420, + 0x29369: 0x6d30a620, 0x2936b: 0x6c86b820, + 0x2936e: 0x6ce92620, 0x2936f: 0x6c26cc20, + 0x29371: 0x6c931620, 0x29372: 0x6d0c4020, 0x29373: 0x6c301e20, + 0x29374: 0x6cbcfc20, 0x29375: 0x6ced5c20, 0x29376: 0x6ca03c20, 0x29377: 0x6d418020, + 0x29378: 0x6c408420, 0x29379: 0x6cc15620, 0x2937a: 0x6c078e20, 0x2937b: 0x6c02b420, + 0x2937c: 0x6cbaf620, + // Block 0xa4e, offset 0x29380 + 0x29381: 0x6cc44020, + 0x29388: 0x6cc41020, 0x29389: 0x6c576a20, 0x2938a: 0x6cfd2a20, 0x2938b: 0x6c7dd820, + 0x2938f: 0x6c258220, + 0x29392: 0x6d158820, + 0x29396: 0x6c1ae420, 0x29397: 0x6d404020, + 0x29398: 0x6ca52420, 0x29399: 0x6c1a5820, 0x2939a: 0x6c32a820, 0x2939b: 0x6d1e0620, + 0x2939c: 0x6d30e020, 0x2939e: 0x6ce0b020, 0x2939f: 0x6d0ff020, + 0x293a0: 0x6d011e20, 0x293a1: 0x6d07ec20, 0x293a3: 0x6c32e420, + 0x293a4: 0x6cd64c20, 0x293a5: 0x6cfbbe20, 0x293a6: 0x6cfbc020, + 0x293a9: 0x6c359e20, + 0x293b2: 0x6c7e5420, + 0x293b8: 0x6cf10220, 0x293b9: 0x6d1ec820, 0x293ba: 0x6d21e020, + 0x293bd: 0x6ce30420, 0x293bf: 0x6c6c7220, + // Block 0xa4f, offset 0x293c0 + 0x293c1: 0x6ce16420, 0x293c2: 0x6cb69e20, + 0x293c4: 0x6c2cec20, 0x293c5: 0x6ce1fe20, 0x293c6: 0x6c941820, 0x293c7: 0x6d2e9a20, + 0x293c8: 0x6cf17020, 0x293c9: 0x6c62d620, 0x293ca: 0x6c023820, 0x293cb: 0x6cabaa20, + 0x293cc: 0x6cb88420, + 0x293d0: 0x6cd21220, 0x293d1: 0x6cde2420, + 0x293d4: 0x6ca18e20, + 0x293d8: 0x6d1f9220, + 0x293e0: 0x6d2c6a20, 0x293e3: 0x6d117220, + 0x293eb: 0x6c1cfa20, + 0x293ec: 0x6c84b220, 0x293ed: 0x6d21f420, 0x293ee: 0x6c161420, 0x293ef: 0x6d143620, + 0x293f2: 0x6c1c9420, + 0x293f4: 0x6c84b420, + 0x293fd: 0x6ce90a20, 0x293ff: 0x6d40fe20, + // Block 0xa50, offset 0x29400 + 0x29402: 0x6cfbd620, + 0x29407: 0x6cf93620, + 0x29409: 0x6c0d0c20, 0x2940a: 0x6c4e4a20, 0x2940b: 0x6cb6b020, + 0x2940c: 0x6cca7a20, 0x2940e: 0x6c3a2c20, + 0x29410: 0x6ccdea20, + 0x29418: 0x6c584820, + 0x29420: 0x6c059a20, 0x29421: 0x6d220220, 0x29422: 0x6d220420, + 0x29424: 0x6c610420, + 0x29431: 0x6c7b0620, 0x29432: 0x6d3fe420, + 0x29439: 0x6cfd5420, 0x2943a: 0x6c9bc020, + // Block 0xa51, offset 0x29440 + 0x29443: 0x6c87b820, + 0x29444: 0x6d377820, 0x29445: 0x6c38fc20, 0x29446: 0x6c8b8820, 0x29447: 0x6c115620, + 0x29448: 0x6c320a20, 0x29449: 0x6c4a0020, 0x2944a: 0x6d04b020, 0x2944b: 0x6c84ea20, + 0x2944c: 0x6cb80c20, 0x2944f: 0x6c753420, + 0x29450: 0x6ceade20, 0x29452: 0x6c72d220, 0x29453: 0x6cff6420, + 0x29458: 0x6cc23420, + 0x2945c: 0x6d3bba20, + 0x29461: 0x6c754420, + 0x29466: 0x6c6bbc20, + 0x29468: 0x6d390620, 0x29469: 0x6cfc8820, 0x2946a: 0x6c8f7020, 0x2946b: 0x6d100420, + 0x2946c: 0x6cc4b220, 0x2946d: 0x6d16d620, 0x2946e: 0x6c8ae020, 0x2946f: 0x6c0e5620, + 0x29470: 0x6c5ce220, 0x29471: 0x6c61be20, 0x29472: 0x6c306a20, 0x29473: 0x6d386420, + 0x29474: 0x6cc29220, 0x29475: 0x6c6a9c20, + 0x2947a: 0x6c710820, + 0x2947c: 0x6c078620, 0x2947f: 0x6c087620, + // Block 0xa52, offset 0x29480 + 0x29480: 0x6c43fe20, 0x29481: 0x6c217c20, 0x29483: 0x6cb9a220, + 0x29484: 0x6cd9c820, 0x29485: 0x6cf0a020, 0x29486: 0x6c1a1420, 0x29487: 0x6c909020, + 0x29488: 0x6d213e20, 0x29489: 0x6c7e4620, 0x2948a: 0x6cb9a420, 0x2948b: 0x6c2cd220, + 0x2948c: 0x6cde0e20, 0x2948d: 0x6d2e6c20, 0x2948f: 0x6c38b620, + 0x29490: 0x6c8b5620, 0x29491: 0x6ce64420, 0x29492: 0x6c5ebe20, 0x29493: 0x6cb8de20, + 0x29494: 0x6c556820, 0x29497: 0x6d214220, + 0x29498: 0x6cb79c20, 0x29499: 0x6d214420, 0x2949a: 0x6cebe020, + 0x2949c: 0x6c03bc20, 0x2949d: 0x6cb61020, 0x2949e: 0x6cc95620, 0x2949f: 0x6cbb8620, + 0x294a0: 0x6d0bc220, 0x294a1: 0x6cfc1e20, + 0x294a8: 0x6c220820, 0x294a9: 0x6c396220, 0x294ab: 0x6c7dba20, + 0x294ac: 0x6c4be020, 0x294ad: 0x6cc39220, 0x294ae: 0x6c367a20, 0x294af: 0x6cbf4e20, + 0x294b2: 0x6c96d420, 0x294b3: 0x6c7a5820, + 0x294b4: 0x6d11c620, 0x294b7: 0x6cc39420, + 0x294b8: 0x6c1e6420, 0x294b9: 0x6c642c20, 0x294bb: 0x6d3a7a20, + 0x294bd: 0x6c331220, 0x294be: 0x6cec0a20, + // Block 0xa53, offset 0x294c0 + 0x294c0: 0x6ca51220, + 0x294c4: 0x6d0cce20, 0x294c5: 0x6ce78020, + 0x294cb: 0x6d03fe20, + 0x294cc: 0x6c4bee20, 0x294cd: 0x6cb26a20, + 0x294d1: 0x6d229c20, 0x294d2: 0x6c51ec20, + 0x294d4: 0x6d3da420, 0x294d7: 0x6ccf0020, + 0x294d8: 0x6d22a220, 0x294db: 0x6c62a620, + 0x294dd: 0x6cbaea20, 0x294de: 0x6cd73220, 0x294df: 0x6c21de20, + 0x294e0: 0x6d40e820, 0x294e1: 0x6c838e20, 0x294e2: 0x6ca60e20, + 0x294e4: 0x6cebf820, 0x294e5: 0x6d2c5c20, 0x294e7: 0x6c28d420, + 0x294ee: 0x6c328820, 0x294ef: 0x6c0bd020, + 0x294f0: 0x6c6a3e20, 0x294f1: 0x6cb87c20, 0x294f2: 0x6c519020, 0x294f3: 0x6c1d5e20, + 0x294f4: 0x6d0ce620, 0x294f6: 0x6d0ee020, + 0x294fa: 0x6cd94e20, 0x294fb: 0x6ce2c420, + 0x294fc: 0x6d11e020, 0x294fe: 0x6c779620, + // Block 0xa54, offset 0x29500 + 0x29500: 0x6d3c6e20, 0x29501: 0x6c4b9a20, 0x29502: 0x6c005a20, 0x29503: 0x6c4d8420, + 0x29508: 0x6cddb820, 0x29509: 0x6d076020, 0x2950a: 0x6c0c5020, + 0x2950c: 0x6c3cfc20, 0x2950d: 0x6cc15e20, 0x2950e: 0x6c98ae20, + 0x29510: 0x6c4ca020, + 0x29516: 0x6c0ac420, 0x29517: 0x6c751020, + 0x29518: 0x6c208a20, 0x2951b: 0x6cb47420, + 0x2951f: 0x6d195020, + 0x29522: 0x6cb95020, 0x29523: 0x6d196220, + 0x29524: 0x6c36ec20, 0x29525: 0x6c8da620, 0x29527: 0x6c0ace20, + 0x2952d: 0x6c5e5620, 0x2952e: 0x6ca0b620, + 0x29531: 0x6d09ce20, + 0x29534: 0x6d0f1e20, + 0x29538: 0x6c87ba20, 0x2953a: 0x6ce04e20, + 0x2953e: 0x6c947e20, + // Block 0xa55, offset 0x29540 + 0x29540: 0x6c769020, 0x29541: 0x6c99aa20, 0x29542: 0x6cfefc20, + 0x29547: 0x6c007220, + 0x2954a: 0x6cde1420, + 0x2954d: 0x6c9aac20, 0x2954f: 0x6c4c4220, + 0x29553: 0x6c432220, + 0x29554: 0x6ca4c220, 0x29555: 0x6c4ffc20, + 0x29560: 0x6cc39820, + 0x29565: 0x6c12a620, 0x29566: 0x6ccb0a20, + 0x2956b: 0x6cb03c20, + 0x29572: 0x6d006220, 0x29573: 0x6cff6620, + 0x29574: 0x6c712c20, + 0x29579: 0x6c1a2420, 0x2957a: 0x6ca50820, + // Block 0xa56, offset 0x29580 + 0x29580: 0x6ca58e20, + 0x2958d: 0x6ca25220, 0x2958f: 0x6cce8020, + 0x29591: 0x6c2cda20, + 0x29594: 0x6c8d5220, 0x29596: 0x6d31f820, 0x29597: 0x6d11d020, + 0x29599: 0x6c404a20, 0x2959a: 0x6cb9c620, 0x2959b: 0x6cbf5820, + 0x2959c: 0x6c715620, 0x2959d: 0x6c0e2c20, 0x2959e: 0x6c990620, 0x2959f: 0x6d2ce020, + 0x295a0: 0x6cdf0820, + 0x295a4: 0x6c1ce020, + 0x295ab: 0x6d2d3220, + 0x295ad: 0x6cd1f420, 0x295ae: 0x6d1e7c20, + 0x295b0: 0x6cbf6820, 0x295b1: 0x6c2a3820, 0x295b2: 0x6ce42620, 0x295b3: 0x6d3c7820, + 0x295b5: 0x6d1b8020, 0x295b7: 0x6ca51820, + 0x295b8: 0x6c0e9620, 0x295b9: 0x6c7bb220, 0x295ba: 0x6d355220, 0x295bb: 0x6c34ba20, + 0x295bc: 0x6c236220, 0x295bd: 0x6c061620, + // Block 0xa57, offset 0x295c0 + 0x295c7: 0x6c846820, + 0x295ca: 0x6c716c20, 0x295cb: 0x6cf1bc20, + 0x295cc: 0x6c8b3e20, 0x295cf: 0x6cf2c620, + 0x295d0: 0x6cd2de20, 0x295d1: 0x6ca7b620, 0x295d2: 0x6c987c20, 0x295d3: 0x6c6f8c20, + 0x295d8: 0x6d050020, + 0x295dd: 0x6cf2a420, 0x295df: 0x6c2a4020, + 0x295e1: 0x6cf70e20, 0x295e2: 0x6c01e020, 0x295e3: 0x6c26ce20, + 0x295e4: 0x6d401020, 0x295e5: 0x6c4f2a20, 0x295e6: 0x6c20ea20, 0x295e7: 0x6c089820, + 0x295e9: 0x6c309020, 0x295eb: 0x6d2f1220, + 0x295ef: 0x6d0b0220, + 0x295f2: 0x6c2bac20, 0x295f3: 0x6c5d6420, + 0x295f7: 0x6c9f8020, + 0x295fa: 0x6c408820, + 0x295fc: 0x6c061e20, 0x295fd: 0x6c78e420, 0x295fe: 0x6c991020, 0x295ff: 0x6cc55820, + // Block 0xa58, offset 0x29600 + 0x29600: 0x6d3fda20, 0x29601: 0x6cb88020, 0x29602: 0x6cf98020, 0x29603: 0x6cda0220, + 0x29604: 0x6d050e20, 0x29605: 0x6ca36e20, + 0x29609: 0x6c979620, + 0x2960e: 0x6d2c0820, 0x2960f: 0x6c154a20, + 0x29610: 0x6ccf8420, 0x29611: 0x6cf2ca20, + 0x29616: 0x6c005c20, 0x29617: 0x6c059820, + 0x29618: 0x6c4fb820, 0x2961a: 0x6ccad420, 0x2961b: 0x6cddba20, + 0x2961c: 0x6ce44020, 0x2961d: 0x6d0bcc20, 0x2961f: 0x6c0e3a20, + 0x29620: 0x6cc6e420, + 0x2962b: 0x6ccc2c20, + 0x2962c: 0x6cf26a20, 0x2962f: 0x6c028a20, + 0x29631: 0x6d3c2820, 0x29633: 0x6cb1c020, + 0x29634: 0x6cdbe820, 0x29635: 0x6d143820, 0x29636: 0x6cda0420, 0x29637: 0x6c30d220, + 0x29638: 0x6cda0620, 0x29639: 0x6c956e20, + // Block 0xa59, offset 0x29640 + 0x29643: 0x6c3afc20, + 0x29644: 0x6d422220, 0x29646: 0x6ca53c20, 0x29647: 0x6c2ac420, + 0x29648: 0x6d34c220, 0x29649: 0x6c25d020, 0x2964a: 0x6c8a5820, 0x2964b: 0x6c616420, + 0x2964c: 0x6c0ea020, 0x2964d: 0x6c23d020, 0x2964e: 0x6c1a6020, 0x2964f: 0x6c104e20, + 0x29651: 0x6cca1020, 0x29652: 0x6d29be20, + 0x29658: 0x6c69e420, 0x2965b: 0x6d125220, + 0x2965c: 0x6c920620, 0x2965e: 0x6c121420, + 0x29668: 0x6ca67020, + 0x29670: 0x6c6b8820, 0x29671: 0x6cb47c20, 0x29672: 0x6d3c5020, 0x29673: 0x6d29c820, + 0x2967a: 0x6c87c420, + 0x2967d: 0x6c7ed020, + // Block 0xa5a, offset 0x29680 + 0x29680: 0x6c1d0620, 0x29683: 0x6d2eae20, + 0x2968d: 0x6c0bb420, 0x2968e: 0x6cf23220, + 0x29693: 0x6c53de20, + 0x29697: 0x6cb1fc20, + 0x29699: 0x6ccb9e20, + 0x2969e: 0x6ca67220, 0x2969f: 0x6c3b4e20, + 0x296a0: 0x6d065620, 0x296a2: 0x6cd2da20, + 0x296a4: 0x6c72c220, + 0x296a8: 0x6c752420, 0x296aa: 0x6d24a220, + 0x296ac: 0x6c4c2a20, 0x296ad: 0x6c4c3420, 0x296af: 0x6c55a420, + 0x296b2: 0x6c869020, 0x296b3: 0x6d00fa20, + 0x296b4: 0x6c376c20, 0x296b5: 0x6d25b420, 0x296b6: 0x6c4d2e20, + 0x296b9: 0x6c6ebc20, 0x296bb: 0x6c78de20, + 0x296bd: 0x6d3fcc20, 0x296be: 0x6c3ae620, + // Block 0xa5b, offset 0x296c0 + 0x296c0: 0x6cae8820, 0x296c1: 0x6c44e220, 0x296c3: 0x6c652820, + 0x296c4: 0x6ca61220, 0x296c6: 0x6cfbc220, 0x296c7: 0x6c873c20, + 0x296c8: 0x6c17a820, 0x296ca: 0x6c377620, 0x296cb: 0x6c44e820, + 0x296cc: 0x6d247620, 0x296cd: 0x6c560420, 0x296ce: 0x6c3af820, 0x296cf: 0x6c028c20, + 0x296d3: 0x6c37b220, + 0x296d8: 0x6c78ec20, 0x296d9: 0x6c7ab620, 0x296da: 0x6c0fd020, + 0x296dd: 0x6d13a020, 0x296de: 0x6c69e820, + 0x296e6: 0x6c17ae20, 0x296e7: 0x6c44ec20, + 0x296e8: 0x6cc82e20, 0x296ea: 0x6d273c20, + 0x296ec: 0x6c8c1620, + 0x296f1: 0x6d24a620, 0x296f2: 0x6d274820, 0x296f3: 0x6d2d1220, + 0x296f4: 0x6cff6820, 0x296f7: 0x6c9f2420, + 0x296fb: 0x6c4af820, + 0x296fc: 0x6c6f6e20, 0x296fe: 0x6cebaa20, + // Block 0xa5c, offset 0x29700 + 0x29701: 0x6cf78220, 0x29702: 0x6cefd620, 0x29703: 0x6d3d6a20, + 0x29704: 0x6cf0a220, 0x29705: 0x6c7c8420, + 0x29708: 0x6c9a9820, 0x2970a: 0x6c505020, 0x2970b: 0x6c4f5020, + 0x2970c: 0x6c399a20, 0x2970d: 0x6ca96e20, 0x2970e: 0x6d205420, 0x2970f: 0x6c57a420, + 0x29712: 0x6c812420, + 0x29720: 0x6d3a1820, 0x29721: 0x6c4b1620, 0x29722: 0x6c0a1620, 0x29723: 0x6c642e20, + 0x29724: 0x6ce59c20, 0x29726: 0x6c93f020, 0x29727: 0x6c79a220, + 0x29728: 0x6d419420, 0x29729: 0x6c8d4620, 0x2972a: 0x6cb63220, + 0x2972c: 0x6d3a1e20, + 0x29731: 0x6c47ba20, 0x29732: 0x6d413020, + 0x29734: 0x6d0f6620, 0x29735: 0x6cda5620, 0x29737: 0x6c7c9620, + 0x29739: 0x6c167a20, 0x2973b: 0x6d113e20, + 0x2973e: 0x6d23e220, + // Block 0xa5d, offset 0x29740 + 0x29745: 0x6cd50420, 0x29746: 0x6c7f5420, 0x29747: 0x6d187620, + 0x29748: 0x6c30c420, + 0x2974c: 0x6cf3f020, 0x2974d: 0x6d1d1220, 0x2974e: 0x6c3f0420, 0x2974f: 0x6d3be820, + 0x29750: 0x6c3f8a20, 0x29752: 0x6cdb2a20, 0x29753: 0x6c853420, + 0x29754: 0x6d122820, 0x29755: 0x6cea1020, + 0x2975d: 0x6c4b7a20, + 0x29761: 0x6c940020, 0x29762: 0x6d0ed420, 0x29763: 0x6cb66620, + 0x29764: 0x6c813020, 0x29765: 0x6d3a3020, 0x29767: 0x6c4b1e20, + 0x29768: 0x6c551020, + 0x2976f: 0x6c6ddc20, + 0x29772: 0x6c1bc620, + 0x29775: 0x6c717220, 0x29776: 0x6d2c6020, + 0x29778: 0x6c9e8020, + // Block 0xa5e, offset 0x29780 + 0x29780: 0x6d39da20, 0x29781: 0x6c41ba20, 0x29782: 0x6d047620, 0x29783: 0x6c60e620, + 0x29787: 0x6cccaa20, + 0x29788: 0x6c9ab620, 0x29789: 0x6d287420, + 0x2978d: 0x6cd48820, + 0x29790: 0x6c941a20, 0x29791: 0x6d206020, 0x29792: 0x6c681420, 0x29793: 0x6caacc20, + 0x29798: 0x6c72c420, 0x29799: 0x6d206220, + 0x2979c: 0x6d195220, 0x2979d: 0x6ce2ce20, 0x2979e: 0x6cef7220, 0x2979f: 0x6c17f620, + 0x297a0: 0x6c8c8620, 0x297a1: 0x6c483020, 0x297a3: 0x6c875a20, + 0x297a4: 0x6c8ab020, 0x297a7: 0x6c68ac20, + 0x297a8: 0x6d0ff620, 0x297a9: 0x6c0c5e20, 0x297aa: 0x6cb6a220, + 0x297ae: 0x6d196420, + 0x297b1: 0x6c0d7620, 0x297b2: 0x6c9bbc20, 0x297b3: 0x6c145a20, + 0x297b5: 0x6c41be20, + 0x297b9: 0x6cc21c20, 0x297ba: 0x6c2bc020, 0x297bb: 0x6c82a020, + // Block 0xa5f, offset 0x297c0 + 0x297c0: 0x6c8dcc20, + 0x297c4: 0x6c585220, 0x297c5: 0x6cc23220, 0x297c7: 0x6c959c20, + 0x297c9: 0x6c7cc820, + 0x297cd: 0x6cc08020, 0x297ce: 0x6d227620, 0x297cf: 0x6c57a620, + 0x297d3: 0x6c833a20, + 0x297d5: 0x6cc60620, 0x297d6: 0x6cffb620, 0x297d7: 0x6cd8da20, + 0x297da: 0x6c327220, 0x297db: 0x6c0cb420, + 0x297e0: 0x6ca97020, 0x297e2: 0x6c51e020, 0x297e3: 0x6cadc420, + 0x297e5: 0x6c3acc20, 0x297e6: 0x6ca2aa20, + 0x297e9: 0x6c3d9620, + 0x297ec: 0x6c55a820, 0x297ed: 0x6cedec20, 0x297ee: 0x6ccc1420, + 0x297f0: 0x6c687420, 0x297f1: 0x6cf47420, + 0x297f9: 0x6c404c20, + // Block 0xa60, offset 0x29800 + 0x29801: 0x6c0df620, 0x29802: 0x6d3b3020, + 0x29804: 0x6d3a2a20, 0x29805: 0x6c1ada20, 0x29807: 0x6cd07c20, + 0x29808: 0x6c550820, 0x29809: 0x6c101e20, + 0x2980e: 0x6cc4d420, + 0x29816: 0x6ca2b620, + 0x29818: 0x6c869220, 0x2981b: 0x6c638820, + 0x2981e: 0x6c96e020, + 0x29821: 0x6c9b6820, 0x29822: 0x6ca1f020, 0x29823: 0x6d38b820, + 0x29824: 0x6cfc3820, 0x29825: 0x6c5b7420, 0x29826: 0x6c48fc20, 0x29827: 0x6c702c20, + 0x29829: 0x6ca2b820, 0x2982b: 0x6cc82a20, + 0x2982d: 0x6cf3fc20, 0x2982f: 0x6cc7d820, + 0x29831: 0x6d2ce620, + // Block 0xa61, offset 0x29840 + 0x29841: 0x6caae220, 0x29842: 0x6d010a20, + 0x29844: 0x6c680220, + 0x2984b: 0x6c853a20, + 0x2984c: 0x6cd51020, 0x2984d: 0x6d190020, 0x2984e: 0x6c2bae20, 0x2984f: 0x6cbe9220, + 0x29850: 0x6c717420, 0x29853: 0x6d373620, + 0x29855: 0x6c80f020, 0x29856: 0x6c10ca20, 0x29857: 0x6c7bca20, + 0x29858: 0x6d190220, 0x2985a: 0x6c0f9a20, + 0x29867: 0x6c1c8c20, + 0x2986d: 0x6c680c20, 0x2986f: 0x6cf32a20, + 0x29870: 0x6d0aac20, + 0x29875: 0x6cea3220, 0x29876: 0x6c987e20, + 0x29878: 0x6c39b220, 0x29879: 0x6d3dce20, 0x2987b: 0x6cb88220, + 0x2987d: 0x6cde2220, 0x2987e: 0x6cb68a20, + // Block 0xa62, offset 0x29880 + 0x29880: 0x6caf1e20, 0x29881: 0x6c0cc620, 0x29882: 0x6c3bfe20, 0x29883: 0x6ce92820, + 0x29884: 0x6c57d220, 0x29887: 0x6c36d220, + 0x2988b: 0x6c36d420, + 0x2988e: 0x6c2fc420, + 0x29890: 0x6cc7e220, + 0x29896: 0x6c36d620, + 0x2989e: 0x6d0ef020, 0x2989f: 0x6cd8f820, + 0x298a5: 0x6d1cc020, 0x298a6: 0x6ca61620, 0x298a7: 0x6ca61820, + 0x298a8: 0x6d158e20, + 0x298b9: 0x6c9c9820, + 0x298be: 0x6d129820, 0x298bf: 0x6cb32620, + // Block 0xa63, offset 0x298c0 + 0x298c0: 0x6c240420, 0x298c2: 0x6cf11820, + 0x298c4: 0x6c4d8820, 0x298c5: 0x6d1c2820, 0x298c7: 0x6ce6a020, + 0x298c8: 0x6d375e20, 0x298c9: 0x6c3a2a20, 0x298ca: 0x6d1f9420, + 0x298cd: 0x6c7cb020, 0x298ce: 0x6c01e220, 0x298cf: 0x6c03d220, + 0x298d1: 0x6c4f3420, + 0x298de: 0x6ca41620, 0x298df: 0x6ca3da20, + 0x298e2: 0x6c6df420, + 0x298e5: 0x6ceece20, + 0x298f1: 0x6c1f8e20, 0x298f3: 0x6cddbe20, + 0x298f4: 0x6ce20020, 0x298f5: 0x6cb6a620, 0x298f6: 0x6ce16620, 0x298f7: 0x6cf05a20, + 0x298f8: 0x6c41fc20, 0x298fa: 0x6c446420, + 0x298fc: 0x6c4f3820, 0x298fe: 0x6ca37420, 0x298ff: 0x6c446620, + // Block 0xa64, offset 0x29900 + 0x29904: 0x6d331420, + 0x29917: 0x6cde2820, + 0x2991b: 0x6cd84c20, + 0x2991d: 0x6ca6de20, 0x2991e: 0x6cca9820, + 0x2992b: 0x6d012a20, + 0x2992f: 0x6d410220, + 0x29930: 0x6d21fc20, 0x29931: 0x6ca6e020, 0x29932: 0x6cb55420, + 0x29935: 0x6cd03220, + 0x2993c: 0x6c102020, + // Block 0xa65, offset 0x29940 + 0x2994b: 0x6c7d9a20, + 0x2994c: 0x6c84c420, 0x2994e: 0x6c488220, + 0x29956: 0x6d0e1c20, 0x29957: 0x6c10d220, + 0x29958: 0x6c672a20, 0x2995a: 0x6cf40e20, 0x2995b: 0x6c134420, + 0x2995c: 0x6c8c0e20, 0x2995d: 0x6d3c0420, 0x2995f: 0x6c5b0e20, + 0x29961: 0x6ce7a620, 0x29962: 0x6d2ca220, + 0x29964: 0x6c522c20, 0x29967: 0x6c4ce220, + 0x29971: 0x6c6e4220, + 0x29975: 0x6c2f1620, 0x29977: 0x6d1cdc20, + 0x2997c: 0x6d377420, + // Block 0xa66, offset 0x29980 + 0x29982: 0x6cf06620, + 0x29984: 0x6c62fa20, 0x29985: 0x6cc73620, + 0x29988: 0x6c030620, 0x29989: 0x6c292420, 0x2998a: 0x6c958a20, 0x2998b: 0x6d13a220, + 0x2998c: 0x6ceed220, + 0x29992: 0x6cbb3220, + 0x29999: 0x6c446c20, 0x2999a: 0x6c62fc20, + 0x299a6: 0x6d409620, + 0x299a8: 0x6d15a620, 0x299ab: 0x6d2ca420, + 0x299ad: 0x6c8b8c20, + 0x299b4: 0x6d13a820, + 0x299bc: 0x6d2dd420, + // Block 0xa67, offset 0x299c0 + 0x299c0: 0x6c1e1620, 0x299c1: 0x6c0c6620, + 0x299c6: 0x6d077020, 0x299c7: 0x6d1eda20, + 0x299cd: 0x6d029a20, 0x299ce: 0x6cef7c20, 0x299cf: 0x6c87ca20, + 0x299db: 0x6c0fdc20, + 0x299dc: 0x6c664c20, 0x299dd: 0x6c158220, 0x299de: 0x6c7d9e20, + 0x299e1: 0x6cbe9a20, + 0x299e7: 0x6cd6ce20, + 0x299e8: 0x6cf76420, 0x299e9: 0x6cc23620, + 0x299f0: 0x6c95a020, 0x299f3: 0x6c294c20, + 0x299f4: 0x6ca71020, 0x299f5: 0x6c855a20, 0x299f7: 0x6c03e420, + 0x299f9: 0x6c365220, 0x299fa: 0x6c3d7a20, 0x299fb: 0x6c400620, + 0x299fc: 0x6c5d1220, 0x299fd: 0x6d2cd820, 0x299fe: 0x6c014420, + // Block 0xa68, offset 0x29a00 + 0x29a01: 0x6cc09620, 0x29a02: 0x6c1dd620, 0x29a03: 0x6c9e3c20, + 0x29a04: 0x6d0aa620, 0x29a05: 0x6ce92420, 0x29a06: 0x6ca60c20, 0x29a07: 0x6c570220, + 0x29a08: 0x6cd50a20, 0x29a0a: 0x6d05f620, 0x29a0b: 0x6d384620, + 0x29a0c: 0x6c776220, + 0x29a12: 0x6cfee220, 0x29a13: 0x6cfee420, + 0x29a14: 0x6c22d420, 0x29a15: 0x6c1c3c20, 0x29a17: 0x6c2dd220, + 0x29a18: 0x6d181420, 0x29a1a: 0x6c2f6420, + 0x29a1d: 0x6c4ef620, 0x29a1e: 0x6cece420, + 0x29a20: 0x6d160220, 0x29a21: 0x6c066020, 0x29a22: 0x6d184220, + 0x29a27: 0x6d0a9e20, + 0x29a2c: 0x6cfdd420, + 0x29a33: 0x6c08a420, + 0x29a36: 0x6c6b3020, 0x29a37: 0x6c43a620, + 0x29a38: 0x6d2b5620, 0x29a3a: 0x6d326a20, 0x29a3b: 0x6c55aa20, + 0x29a3c: 0x6cf6b420, 0x29a3d: 0x6d02e820, 0x29a3e: 0x6cff1220, 0x29a3f: 0x6c404e20, + // Block 0xa69, offset 0x29a40 + 0x29a40: 0x6d383c20, 0x29a42: 0x6c99b620, 0x29a43: 0x6d02ea20, + 0x29a44: 0x6cbad820, + 0x29a48: 0x6c3b9220, 0x29a49: 0x6c049820, 0x29a4a: 0x6c583220, + 0x29a51: 0x6c687620, 0x29a53: 0x6c066620, + 0x29a54: 0x6d0af820, 0x29a55: 0x6d114020, + 0x29a5b: 0x6cf8d820, + 0x29a5d: 0x6c729e20, 0x29a5f: 0x6cc27c20, + 0x29a60: 0x6d26f020, 0x29a61: 0x6cdf4220, 0x29a62: 0x6ce81820, 0x29a63: 0x6ca16c20, + 0x29a64: 0x6d2c5420, 0x29a65: 0x6cc1ce20, 0x29a67: 0x6c3da620, + 0x29a69: 0x6cc1d020, 0x29a6a: 0x6c1c7e20, + 0x29a6c: 0x6d1f7c20, + 0x29a77: 0x6ce38620, + 0x29a7a: 0x6cebf020, + 0x29a7d: 0x6ceb5620, 0x29a7f: 0x6c1eb220, + // Block 0xa6a, offset 0x29a80 + 0x29a81: 0x6c43b020, + 0x29a88: 0x6d251620, 0x29a89: 0x6c43b220, 0x29a8a: 0x6cc1d220, + 0x29a8f: 0x6c72a020, + 0x29a92: 0x6c2ef820, 0x29a93: 0x6d157e20, + 0x29a94: 0x6cd20820, 0x29a95: 0x6d18e420, 0x29a97: 0x6c4b2020, + 0x29a98: 0x6c680420, 0x29a9a: 0x6cd94420, 0x29a9b: 0x6cbf7220, + 0x29a9d: 0x6c36c220, 0x29a9e: 0x6c59a420, 0x29a9f: 0x6c5b4620, + 0x29aa0: 0x6d0a4620, 0x29aa3: 0x6c717020, + 0x29aa5: 0x6d2d2220, 0x29aa6: 0x6c1c8220, 0x29aa7: 0x6c81c020, + 0x29aa9: 0x6cb66820, 0x29aaa: 0x6d050420, + 0x29aac: 0x6c5af620, 0x29aad: 0x6ce79820, + 0x29aba: 0x6c407220, + 0x29abd: 0x6d0a4820, 0x29abe: 0x6c6b4e20, 0x29abf: 0x6c9d0620, + // Block 0xa6b, offset 0x29ac0 + 0x29ac0: 0x6d242820, + 0x29ac8: 0x6d3c4a20, 0x29ac9: 0x6c688e20, 0x29aca: 0x6d373820, 0x29acb: 0x6c1a5220, + 0x29acd: 0x6c6b6c20, 0x29ace: 0x6cff3220, 0x29acf: 0x6c18f220, + 0x29ad0: 0x6c848220, 0x29ad1: 0x6d26fe20, 0x29ad3: 0x6d373a20, + 0x29ad4: 0x6c818820, 0x29ad5: 0x6cf32c20, 0x29ad6: 0x6cc1ea20, + 0x29ad8: 0x6cedce20, 0x29ada: 0x6d142e20, 0x29adb: 0x6d190420, + 0x29adc: 0x6c80f220, 0x29ade: 0x6ce7fa20, 0x29adf: 0x6c015c20, + 0x29ae0: 0x6c74e420, 0x29ae1: 0x6d0ee420, + 0x29ae5: 0x6c72b020, 0x29ae7: 0x6d327620, + 0x29ae9: 0x6d373c20, 0x29aea: 0x6c98a820, + 0x29aee: 0x6d055420, + 0x29af1: 0x6c208020, 0x29af2: 0x6c1e6c20, + 0x29af8: 0x6cbafc20, 0x29af9: 0x6c3a2620, 0x29afa: 0x6c16d420, + 0x29afc: 0x6c9dec20, 0x29afd: 0x6cdb5a20, 0x29afe: 0x6c02b820, + // Block 0xa6c, offset 0x29b00 + 0x29b00: 0x6c3f9620, + 0x29b04: 0x6cf10620, 0x29b05: 0x6d342420, 0x29b06: 0x6c9f8220, 0x29b07: 0x6c168820, + 0x29b08: 0x6d0cfa20, 0x29b09: 0x6d245820, 0x29b0b: 0x6c408a20, + 0x29b0c: 0x6cded020, 0x29b0d: 0x6c616020, 0x29b0f: 0x6c3aee20, + 0x29b12: 0x6c55f620, 0x29b13: 0x6c70e220, + 0x29b15: 0x6d22ac20, + 0x29b1b: 0x6cb69220, + 0x29b1c: 0x6c9a3820, 0x29b1f: 0x6c0ccc20, + 0x29b20: 0x6c4cd820, + 0x29b24: 0x6ca04c20, 0x29b26: 0x6ced5e20, 0x29b27: 0x6ced6020, + 0x29b34: 0x6c6dec20, 0x29b35: 0x6d245a20, 0x29b36: 0x6cfbce20, + 0x29b39: 0x6c212a20, 0x29b3a: 0x6c60f820, + 0x29b3c: 0x6cfd9620, 0x29b3d: 0x6cae4420, 0x29b3e: 0x6c409220, + // Block 0xa6d, offset 0x29b40 + 0x29b42: 0x6c8ed820, + 0x29b44: 0x6cc9da20, 0x29b45: 0x6d08f020, 0x29b46: 0x6d409220, + 0x29b48: 0x6c6b7e20, 0x29b4b: 0x6d2dc220, + 0x29b4d: 0x6d21e820, 0x29b4e: 0x6d21ea20, 0x29b4f: 0x6c9a4020, + 0x29b50: 0x6c9ea820, 0x29b51: 0x6c99c020, 0x29b52: 0x6c346a20, 0x29b53: 0x6c409420, + 0x29b5b: 0x6c671820, + 0x29b66: 0x6c9e8420, + 0x29b68: 0x6c023a20, + 0x29b6d: 0x6c78e620, + 0x29b76: 0x6c544420, + 0x29b7a: 0x6c46e420, + 0x29b7c: 0x6cf74c20, 0x29b7e: 0x6cc6e820, 0x29b7f: 0x6c43be20, + // Block 0xa6e, offset 0x29b80 + 0x29b80: 0x6cac9220, 0x29b81: 0x6d25d420, 0x29b82: 0x6cfa5e20, + 0x29b85: 0x6ccc2e20, 0x29b86: 0x6cafa620, + 0x29b88: 0x6cbe9620, 0x29b89: 0x6d1dde20, 0x29b8a: 0x6cc20220, + 0x29b8c: 0x6c462820, 0x29b8e: 0x6c446820, 0x29b8f: 0x6cfb0820, + 0x29b91: 0x6cdb6820, + 0x29b95: 0x6c04ae20, 0x29b96: 0x6cb6a820, 0x29b97: 0x6c548820, + 0x29b9b: 0x6cf74e20, + 0x29b9d: 0x6cf39220, + 0x29bad: 0x6cb55620, 0x29bae: 0x6c56ec20, 0x29baf: 0x6c4aae20, + 0x29bb1: 0x6c2bbc20, 0x29bb2: 0x6cce2c20, 0x29bb3: 0x6c975220, + 0x29bb4: 0x6c9fde20, 0x29bb5: 0x6c62ea20, 0x29bb6: 0x6cf7c820, 0x29bb7: 0x6cfb1020, + 0x29bb8: 0x6c610220, 0x29bb9: 0x6c16d820, 0x29bba: 0x6c7a1220, 0x29bbb: 0x6c1cfc20, + // Block 0xa6f, offset 0x29bc0 + 0x29bc2: 0x6d2ef020, 0x29bc3: 0x6cb1aa20, + 0x29bc4: 0x6cdb6c20, 0x29bc5: 0x6c94cc20, 0x29bc6: 0x6c84c620, 0x29bc7: 0x6c9c2020, + 0x29bc8: 0x6c1cfe20, 0x29bc9: 0x6ce47c20, 0x29bcb: 0x6c8da820, + 0x29bcd: 0x6c1c9a20, + 0x29bd6: 0x6c1d0020, + 0x29bd9: 0x6c1c9c20, + 0x29bdd: 0x6ca7c820, 0x29bdf: 0x6d1e0a20, + 0x29bee: 0x6c9db020, + 0x29bf0: 0x6cd51e20, 0x29bf2: 0x6cf93820, + 0x29bf4: 0x6c36f620, 0x29bf5: 0x6d3ec820, + 0x29bf8: 0x6c6b8420, 0x29bf9: 0x6c5faa20, 0x29bfa: 0x6c53e820, 0x29bfb: 0x6cd18220, + 0x29bfc: 0x6c879c20, 0x29bfe: 0x6cb55c20, + // Block 0xa70, offset 0x29c00 + 0x29c00: 0x6d38c620, 0x29c01: 0x6cd85820, 0x29c02: 0x6cc21e20, + 0x29c0b: 0x6d013420, + 0x29c17: 0x6cd85a20, + 0x29c1b: 0x6d061220, + 0x29c20: 0x6c409e20, + 0x29c2f: 0x6ca9e620, + 0x29c30: 0x6d0bd020, 0x29c31: 0x6c8ef020, 0x29c32: 0x6c643420, 0x29c33: 0x6c4ab020, + 0x29c34: 0x6c7cc020, 0x29c35: 0x6c1ca220, 0x29c36: 0x6c121620, 0x29c37: 0x6c1ed020, + 0x29c39: 0x6c4c5020, 0x29c3b: 0x6c285a20, + 0x29c3f: 0x6c672e20, + // Block 0xa71, offset 0x29c40 + 0x29c41: 0x6c292620, 0x29c42: 0x6c548c20, + 0x29c44: 0x6c7a1420, 0x29c46: 0x6c1f9220, 0x29c47: 0x6cb96220, + 0x29c48: 0x6c010c20, 0x29c4a: 0x6cb0e420, + 0x29c51: 0x6d0abc20, 0x29c52: 0x6c6dfc20, 0x29c53: 0x6c9c2620, + 0x29c55: 0x6c0d7a20, 0x29c56: 0x6c801620, 0x29c57: 0x6c47fa20, + 0x29c58: 0x6c1e1420, 0x29c5b: 0x6d1dec20, + 0x29c5c: 0x6c488420, 0x29c5d: 0x6d220a20, 0x29c5e: 0x6d397420, + 0x29c6d: 0x6c115820, 0x29c6f: 0x6c8ef420, + 0x29c70: 0x6c105420, 0x29c71: 0x6c965820, 0x29c72: 0x6c6b8c20, 0x29c73: 0x6d31a820, + 0x29c74: 0x6c9f2220, 0x29c75: 0x6c4a1620, 0x29c77: 0x6c63f820, + 0x29c79: 0x6c7ed220, + // Block 0xa72, offset 0x29c80 + 0x29c80: 0x6cd48c20, 0x29c83: 0x6c4c5220, + 0x29c86: 0x6c9c2820, 0x29c87: 0x6cb9ea20, + 0x29c88: 0x6c7f8420, 0x29c8a: 0x6c51b220, 0x29c8b: 0x6ce97c20, + 0x29c91: 0x6c5b1020, + 0x29c98: 0x6c52e620, + 0x29c9c: 0x6c93c820, 0x29c9f: 0x6c63fa20, + 0x29ca5: 0x6c4ab220, + 0x29ca8: 0x6d144420, 0x29ca9: 0x6c585420, + 0x29cb0: 0x6c95a220, + 0x29cb4: 0x6c754620, + 0x29cb8: 0x6c49ce20, 0x29cbb: 0x6cc34820, + 0x29cbc: 0x6ca7cc20, 0x29cbf: 0x6c97b220, + // Block 0xa73, offset 0x29cc0 + 0x29cc2: 0x6d282420, 0x29cc3: 0x6cf18a20, + 0x29cc4: 0x6c1c0c20, 0x29cc5: 0x6c1c1820, 0x29cc6: 0x6d33dc20, + 0x29cc8: 0x6c224420, 0x29cc9: 0x6d3c3e20, 0x29cca: 0x6c573c20, 0x29ccb: 0x6c6ac020, + 0x29ccc: 0x6cc19e20, 0x29ccd: 0x6ce86620, 0x29cce: 0x6c9f6a20, 0x29ccf: 0x6c9a2020, + 0x29cd0: 0x6d218020, 0x29cd1: 0x6c026e20, 0x29cd2: 0x6c049a20, + 0x29cd4: 0x6caf8c20, 0x29cd5: 0x6d31a420, 0x29cd6: 0x6c91d020, 0x29cd7: 0x6c1c5420, + 0x29cd8: 0x6ce7f620, 0x29cda: 0x6c6a3420, + 0x29cdc: 0x6d2da420, + 0x29ce2: 0x6c6c6820, 0x29ce3: 0x6c91f020, + 0x29ce6: 0x6c670a20, 0x29ce7: 0x6ce0b420, + 0x29ce8: 0x6c168a20, 0x29cea: 0x6c22ee20, + 0x29ced: 0x6cec5c20, 0x29cee: 0x6c240620, 0x29cef: 0x6c771a20, + 0x29cf1: 0x6c0bd820, + 0x29cf8: 0x6cf17620, 0x29cfb: 0x6cb95620, + 0x29cff: 0x6c424220, + // Block 0xa74, offset 0x29d00 + 0x29d02: 0x6c5ca220, + 0x29d04: 0x6c420620, 0x29d06: 0x6c630020, 0x29d07: 0x6c424620, + 0x29d09: 0x6c580820, + 0x29d0d: 0x6cd8dc20, + 0x29d10: 0x6c3d9a20, + 0x29d15: 0x6cb01620, 0x29d17: 0x6c10d620, + 0x29d1c: 0x6c07c620, + 0x29d22: 0x6cd2dc20, + 0x29d25: 0x6c58b020, 0x29d27: 0x6c4a9420, + 0x29d2a: 0x6cab9620, + 0x29d33: 0x6cad7020, + 0x29d35: 0x6d1d2020, 0x29d36: 0x6ce6e620, 0x29d37: 0x6d001820, + 0x29d39: 0x6d3b3620, 0x29d3b: 0x6d21d220, + // Block 0xa75, offset 0x29d40 + 0x29d41: 0x6c66fa20, + 0x29d44: 0x6cc25420, 0x29d45: 0x6ced6220, 0x29d46: 0x6c7d9220, 0x29d47: 0x6d3c7220, + 0x29d49: 0x6d245c20, 0x29d4a: 0x6c4cda20, 0x29d4b: 0x6cb2de20, + 0x29d4c: 0x6d41a420, 0x29d4d: 0x6d40fa20, 0x29d4f: 0x6d39e820, + 0x29d50: 0x6caa9c20, 0x29d51: 0x6d39ea20, + 0x29d56: 0x6cb17620, 0x29d57: 0x6c9cac20, + 0x29d5c: 0x6c0ad220, 0x29d5d: 0x6cdb6e20, + 0x29d61: 0x6cb47a20, 0x29d62: 0x6c9cc420, + 0x29d6b: 0x6d13a620, + 0x29d6c: 0x6d22b420, 0x29d6e: 0x6d249620, + 0x29d70: 0x6d3a9420, 0x29d73: 0x6c8dc220, + 0x29d7a: 0x6caa3620, + 0x29d7e: 0x6c8d3020, + // Block 0xa76, offset 0x29d80 + 0x29d80: 0x6c8a7020, 0x29d82: 0x6ceace20, + 0x29d84: 0x6c08f020, 0x29d85: 0x6ca36a20, 0x29d86: 0x6cc1bc20, + 0x29d88: 0x6cb01820, 0x29d89: 0x6c30f420, 0x29d8a: 0x6ca86e20, 0x29d8b: 0x6cea6820, + 0x29d8d: 0x6c5f2620, 0x29d8f: 0x6c8d5420, + 0x29d93: 0x6c7aaa20, + 0x29d94: 0x6cdb2c20, + 0x29d98: 0x6ce81a20, + 0x29d9e: 0x6ca38620, 0x29d9f: 0x6d2b0c20, + 0x29da2: 0x6ce7c420, 0x29da3: 0x6c444a20, + 0x29da4: 0x6c331820, 0x29da7: 0x6c6b5020, + 0x29da9: 0x6ce4c820, 0x29daa: 0x6ce5e220, 0x29dab: 0x6c1b6020, + 0x29dac: 0x6cc14e20, 0x29dae: 0x6ccc2820, + 0x29db0: 0x6c0f9e20, 0x29db1: 0x6c848420, 0x29db3: 0x6c963a20, + 0x29db5: 0x6c8a4420, 0x29db6: 0x6cd62620, 0x29db7: 0x6c2ad220, + 0x29db9: 0x6c1ae620, 0x29dba: 0x6c9f0220, + 0x29dbc: 0x6ce24e20, 0x29dbd: 0x6c5d0c20, 0x29dbf: 0x6ca7e220, + // Block 0xa77, offset 0x29dc0 + 0x29dc1: 0x6c75fe20, 0x29dc2: 0x6c56dc20, + 0x29dc4: 0x6c932e20, 0x29dc5: 0x6d138820, 0x29dc7: 0x6ca18620, + 0x29dc8: 0x6c17c820, + 0x29dcc: 0x6cddd420, 0x29dce: 0x6c784220, 0x29dcf: 0x6c409620, + 0x29dd1: 0x6c17aa20, + 0x29dd4: 0x6cddbc20, 0x29dd7: 0x6cbfe220, + 0x29ddb: 0x6cdb6a20, + 0x29ddd: 0x6d287620, 0x29ddf: 0x6cddc220, + 0x29de0: 0x6c7a7020, 0x29de1: 0x6c0fc420, 0x29de3: 0x6c90fe20, + 0x29de4: 0x6ca1a220, 0x29de6: 0x6c88e220, 0x29de7: 0x6d08d220, + 0x29de8: 0x6cddc420, 0x29de9: 0x6c97aa20, 0x29dea: 0x6c0ad420, + 0x29df2: 0x6ce44820, + 0x29df4: 0x6c88a620, 0x29df5: 0x6ce04a20, 0x29df6: 0x6ccdf220, + 0x29df8: 0x6cc22820, 0x29df9: 0x6c320820, 0x29dfa: 0x6c58d420, 0x29dfb: 0x6ccb0e20, + 0x29dff: 0x6c7c2620, + // Block 0xa78, offset 0x29e00 + 0x29e03: 0x6ca8dc20, + 0x29e05: 0x6ca8de20, 0x29e06: 0x6c95a420, 0x29e07: 0x6d425c20, + 0x29e08: 0x6d174e20, 0x29e09: 0x6cfcc020, 0x29e0a: 0x6c179820, 0x29e0b: 0x6ce61220, + 0x29e12: 0x6cd79620, + 0x29e14: 0x6c9d0020, 0x29e17: 0x6c9c7220, + 0x29e1b: 0x6ced5220, + 0x29e1d: 0x6c07c820, 0x29e1e: 0x6cbae020, + 0x29e20: 0x6ca0b020, 0x29e23: 0x6c8eca20, + 0x29e24: 0x6cf32e20, 0x29e26: 0x6c9a7020, + 0x29e28: 0x6ce7fe20, 0x29e2b: 0x6ca25a20, + 0x29e2d: 0x6c9a4420, + 0x29e32: 0x6d42b620, + 0x29e34: 0x6cea6420, 0x29e35: 0x6c778c20, 0x29e36: 0x6cea6a20, + 0x29e3a: 0x6c184c20, 0x29e3b: 0x6d336a20, + 0x29e3d: 0x6c1cec20, 0x29e3e: 0x6ce47820, + // Block 0xa79, offset 0x29e40 + 0x29e40: 0x6d372020, 0x29e41: 0x6c153420, 0x29e42: 0x6c153e20, + 0x29e45: 0x6cbe5c20, 0x29e46: 0x6cea3420, 0x29e47: 0x6c5b7a20, + 0x29e48: 0x6cc41420, 0x29e49: 0x6d2dba20, 0x29e4a: 0x6c652c20, 0x29e4b: 0x6c154c20, + 0x29e4d: 0x6c5a2620, 0x29e4f: 0x6c5b0620, + 0x29e50: 0x6c1b6a20, 0x29e52: 0x6c5a2820, 0x29e53: 0x6c528220, + 0x29e54: 0x6d280820, 0x29e56: 0x6ce94020, 0x29e57: 0x6c0b1c20, + 0x29e59: 0x6c5a3620, 0x29e5a: 0x6d280a20, + 0x29e5f: 0x6ca1a420, + 0x29e60: 0x6c45c420, 0x29e62: 0x6c45c620, + 0x29e64: 0x6c4bb020, 0x29e66: 0x6c157820, + 0x29e68: 0x6cc42220, 0x29e69: 0x6cc8ee20, 0x29e6a: 0x6c7c2820, 0x29e6b: 0x6cb1c220, + 0x29e6e: 0x6cc80220, + 0x29e72: 0x6ca9a220, 0x29e73: 0x6c56c820, + 0x29e74: 0x6c6cb820, 0x29e75: 0x6ca6d220, 0x29e76: 0x6c067420, + 0x29e78: 0x6ca65620, 0x29e7a: 0x6c0a8420, 0x29e7b: 0x6c55d820, + 0x29e7c: 0x6c846a20, 0x29e7f: 0x6d39dc20, + // Block 0xa7a, offset 0x29e80 + 0x29e80: 0x6ca2fc20, 0x29e82: 0x6cc36620, 0x29e83: 0x6c3cd220, + 0x29e84: 0x6c090020, 0x29e85: 0x6c84a020, 0x29e86: 0x6c0d0820, 0x29e87: 0x6ca70e20, + 0x29e88: 0x6c304820, 0x29e8b: 0x6c88a020, + 0x29e8c: 0x6ca6e420, 0x29e8d: 0x6c88a820, 0x29e8e: 0x6c968820, 0x29e8f: 0x6d30ca20, + 0x29e93: 0x6c639420, + 0x29e94: 0x6d15a820, 0x29e96: 0x6c904c20, + 0x29e98: 0x6d181820, + 0x29e9d: 0x6c278e20, 0x29e9e: 0x6c327820, + 0x29ea3: 0x6d160c20, + 0x29ea5: 0x6cdf8220, 0x29ea6: 0x6c4f5420, 0x29ea7: 0x6cd61620, + 0x29eac: 0x6cece820, 0x29eae: 0x6cdb2e20, 0x29eaf: 0x6d11d820, + 0x29eb0: 0x6c37e020, 0x29eb2: 0x6d326e20, + 0x29eba: 0x6c313e20, 0x29ebb: 0x6c651220, + 0x29ebf: 0x6cace620, + // Block 0xa7b, offset 0x29ec0 + 0x29ec0: 0x6c5afe20, 0x29ec2: 0x6c145420, 0x29ec3: 0x6ccd1c20, + 0x29ec4: 0x6c916620, 0x29ec6: 0x6d244c20, + 0x29ec8: 0x6d0ef420, 0x29ec9: 0x6ced6420, 0x29eca: 0x6cbc6e20, 0x29ecb: 0x6c953420, + 0x29ecc: 0x6d245e20, 0x29ecf: 0x6ce90620, + 0x29ed0: 0x6cf10820, 0x29ed2: 0x6cea8e20, + 0x29ed5: 0x6c5d1820, 0x29ed6: 0x6c079020, 0x29ed7: 0x6cbd0620, + 0x29ed9: 0x6c6c7420, 0x29eda: 0x6c7f3620, + 0x29edc: 0x6d356620, 0x29edd: 0x6d21ec20, 0x29edf: 0x6c22f020, + 0x29ee6: 0x6d139420, 0x29ee7: 0x6c2f0c20, + 0x29ee8: 0x6c145820, 0x29ee9: 0x6c2d9a20, 0x29eea: 0x6c97a220, + 0x29eec: 0x6c2afc20, 0x29eed: 0x6ceed020, 0x29eee: 0x6ca75020, 0x29eef: 0x6c835e20, + 0x29ef0: 0x6c0db820, 0x29ef1: 0x6cf39420, 0x29ef3: 0x6d320820, + 0x29ef6: 0x6cc77420, 0x29ef7: 0x6cec7c20, + 0x29ef8: 0x6c9dac20, 0x29ef9: 0x6c6c1020, 0x29efb: 0x6c544620, + 0x29efd: 0x6d2d5620, 0x29efe: 0x6cc80a20, 0x29eff: 0x6d3ec620, + // Block 0xa7c, offset 0x29f00 + 0x29f00: 0x6cac9420, 0x29f02: 0x6ca1a620, + 0x29f04: 0x6c9db220, 0x29f06: 0x6cb55820, 0x29f07: 0x6ca1a820, + 0x29f0a: 0x6d342c20, 0x29f0b: 0x6c04b020, + 0x29f0d: 0x6c9f1820, 0x29f0f: 0x6c933e20, + 0x29f11: 0x6cb55e20, 0x29f12: 0x6c1d0420, + 0x29f14: 0x6c84d220, 0x29f15: 0x6d196e20, + 0x29f18: 0x6c2b0620, 0x29f19: 0x6c25d220, 0x29f1b: 0x6c339020, + 0x29f1c: 0x6c96e820, 0x29f1d: 0x6d0e2c20, 0x29f1f: 0x6d2bba20, + 0x29f20: 0x6d0e2e20, 0x29f21: 0x6c339220, 0x29f22: 0x6cb42620, + 0x29f25: 0x6d273020, + 0x29f29: 0x6c5e5c20, 0x29f2a: 0x6c975420, 0x29f2b: 0x6c664620, + 0x29f2c: 0x6ca9e820, 0x29f2d: 0x6cbdc020, 0x29f2f: 0x6cbdc220, + 0x29f32: 0x6d13aa20, + 0x29f34: 0x6cdf5420, + 0x29f39: 0x6c655c20, + 0x29f3c: 0x6c141620, 0x29f3e: 0x6c28f220, 0x29f3f: 0x6ce2e220, + // Block 0xa7d, offset 0x29f40 + 0x29f40: 0x6c87ce20, 0x29f43: 0x6ca77c20, + 0x29f44: 0x6c158420, 0x29f45: 0x6d29f620, + 0x29f4a: 0x6d24b820, + 0x29f4c: 0x6d41e220, 0x29f4d: 0x6c0b2020, + 0x29f50: 0x6c1ef820, + 0x29f58: 0x6cc48c20, 0x29f5a: 0x6cc49820, 0x29f5b: 0x6d0f7020, + 0x29f5c: 0x6c0fe820, + 0x29f61: 0x6c247820, + 0x29f6c: 0x6c9cae20, 0x29f6e: 0x6c787420, + 0x29f70: 0x6c248420, + 0x29f77: 0x6cf7ce20, + 0x29f79: 0x6c968a20, 0x29f7b: 0x6cd22020, + 0x29f7c: 0x6c2d0420, 0x29f7f: 0x6cd22220, + // Block 0xa7e, offset 0x29f80 + 0x29f82: 0x6c2f7620, 0x29f83: 0x6c6ee420, + 0x29f85: 0x6d25a820, 0x29f86: 0x6c41b220, + 0x29f8a: 0x6c5ca420, 0x29f8b: 0x6c5f4e20, + 0x29f8d: 0x6caed420, 0x29f8f: 0x6c2ab220, + 0x29f91: 0x6c085e20, + 0x29f94: 0x6cacea20, 0x29f95: 0x6cded420, 0x29f97: 0x6d252220, + 0x29f98: 0x6c42ee20, 0x29f99: 0x6d252420, + 0x29f9f: 0x6c639220, + 0x29fa3: 0x6c799020, + 0x29fa6: 0x6c309820, + 0x29fa9: 0x6cfbd820, 0x29faa: 0x6cb80620, + 0x29fac: 0x6cca7c20, + 0x29fb0: 0x6d1b9820, 0x29fb3: 0x6c901a20, + 0x29fb6: 0x6ce29a20, 0x29fb7: 0x6c902420, + 0x29fba: 0x6cc60820, + 0x29fbd: 0x6d1b9020, 0x29fbe: 0x6cb2d820, 0x29fbf: 0x6cb41c20, + // Block 0xa7f, offset 0x29fc0 + 0x29fc0: 0x6d25be20, 0x29fc1: 0x6cc72a20, 0x29fc3: 0x6c399e20, + 0x29fc7: 0x6c4f5820, + 0x29fc8: 0x6c9c8820, 0x29fc9: 0x6c55ea20, 0x29fca: 0x6d3eb620, + 0x29fcc: 0x6c8d7e20, 0x29fcd: 0x6c6eea20, 0x29fce: 0x6cc72e20, + 0x29fd2: 0x6cb2e020, 0x29fd3: 0x6c49fc20, + 0x29fd4: 0x6c37ae20, + 0x29fdd: 0x6c247e20, 0x29fde: 0x6c760020, + 0x29fe6: 0x6d052a20, + 0x29fe8: 0x6c377a20, 0x29fe9: 0x6ce44420, 0x29feb: 0x6d0ff820, + 0x29fed: 0x6c010a20, 0x29fee: 0x6c560820, 0x29fef: 0x6cf7ca20, + 0x29ff1: 0x6c560a20, 0x29ff3: 0x6cd85220, + 0x29ff4: 0x6c854e20, 0x29ff6: 0x6d197020, 0x29ff7: 0x6c47f620, + 0x29ff9: 0x6ce16a20, + // Block 0xa80, offset 0x2a000 + 0x2a000: 0x6cc42420, 0x2a001: 0x6d3fe620, 0x2a002: 0x6c84de20, + 0x2a004: 0x6c69ec20, 0x2a007: 0x6c38fe20, + 0x2a008: 0x6cb47e20, 0x2a009: 0x6cd86620, 0x2a00b: 0x6c6b9020, + 0x2a00c: 0x6c91b220, 0x2a00d: 0x6c87d020, 0x2a00e: 0x6c158620, + 0x2a010: 0x6d122220, + 0x2a015: 0x6c5b0020, + 0x2a019: 0x6c53e420, 0x2a01a: 0x6c2cea20, 0x2a01b: 0x6cc0be20, + 0x2a01c: 0x6c74f820, 0x2a01e: 0x6cb0d420, + 0x2a022: 0x6c7c5220, + 0x2a025: 0x6cf82820, 0x2a026: 0x6ce30c20, + 0x2a029: 0x6d076820, + 0x2a02f: 0x6c0b6220, + 0x2a032: 0x6c50b020, 0x2a033: 0x6c88ac20, + 0x2a036: 0x6cdb7620, 0x2a037: 0x6c8ab220, + 0x2a03c: 0x6c6c7820, + // Block 0xa81, offset 0x2a040 + 0x2a041: 0x6c87d220, 0x2a042: 0x6c158820, + 0x2a045: 0x6cb65a20, 0x2a046: 0x6cb66c20, + 0x2a049: 0x6d3ec020, 0x2a04b: 0x6d3ec420, + 0x2a04d: 0x6cb6b220, 0x2a04f: 0x6cb6b820, + 0x2a050: 0x6d3ed020, 0x2a052: 0x6d2d1020, 0x2a053: 0x6d2d1420, + 0x2a054: 0x6cabec20, 0x2a056: 0x6c70d820, + 0x2a059: 0x6d0df420, + 0x2a05c: 0x6c4f8c20, 0x2a05d: 0x6ca37020, + 0x2a064: 0x6d0e0220, 0x2a066: 0x6d2e9c20, 0x2a067: 0x6cd2e020, + 0x2a068: 0x6d34ba20, + 0x2a06d: 0x6d2c0a20, + 0x2a074: 0x6cc73420, 0x2a075: 0x6d2c0c20, 0x2a077: 0x6d195820, + 0x2a078: 0x6ca02820, 0x2a079: 0x6d0b4020, 0x2a07b: 0x6d376620, + 0x2a07d: 0x6c7e3020, 0x2a07e: 0x6cfa1c20, + // Block 0xa82, offset 0x2a080 + 0x2a080: 0x6cb13820, 0x2a081: 0x6cdeec20, 0x2a083: 0x6d162a20, + 0x2a086: 0x6d051620, 0x2a087: 0x6d2d0c20, + 0x2a089: 0x6c34c420, 0x2a08a: 0x6c36e420, + 0x2a08e: 0x6d1ab420, + 0x2a090: 0x6c36ee20, 0x2a091: 0x6cdb8e20, 0x2a092: 0x6c016420, 0x2a093: 0x6c260420, + 0x2a095: 0x6ceb6420, 0x2a097: 0x6ceb6620, + 0x2a098: 0x6cfa1e20, 0x2a09b: 0x6c21ea20, + 0x2a09d: 0x6cdb9020, + 0x2a0a5: 0x6c62f420, 0x2a0a6: 0x6cba3620, 0x2a0a7: 0x6d410420, + 0x2a0a8: 0x6d2d0e20, 0x2a0a9: 0x6d280e20, 0x2a0aa: 0x6d2ea620, + 0x2a0ac: 0x6d159c20, + 0x2a0b2: 0x6d0b4220, 0x2a0b3: 0x6d266020, + 0x2a0b9: 0x6c51ac20, 0x2a0ba: 0x6cb88820, + 0x2a0be: 0x6c13c220, + // Block 0xa83, offset 0x2a0c0 + 0x2a0c3: 0x6cab7020, + 0x2a0c8: 0x6c560c20, 0x2a0ca: 0x6d0f2020, + 0x2a0cc: 0x6cbd0e20, 0x2a0cd: 0x6c0fd820, 0x2a0ce: 0x6cbafe20, 0x2a0cf: 0x6c6c1420, + 0x2a0db: 0x6ca6e820, + 0x2a0de: 0x6c162420, 0x2a0df: 0x6cbdf620, + 0x2a0e1: 0x6d2a3220, + 0x2a0e4: 0x6d1b3220, 0x2a0e5: 0x6d029c20, 0x2a0e7: 0x6cb6ba20, + 0x2a0e8: 0x6c673420, 0x2a0eb: 0x6d061420, + 0x2a0ed: 0x6d2bbc20, 0x2a0ef: 0x6c370420, + 0x2a0f3: 0x6d40a020, + 0x2a0f4: 0x6d163220, + 0x2a0f9: 0x6d34c820, 0x2a0fa: 0x6c87d420, + 0x2a0fd: 0x6c87d620, 0x2a0fe: 0x6d1aba20, + // Block 0xa84, offset 0x2a100 + 0x2a101: 0x6c88b220, 0x2a103: 0x6c158a20, + 0x2a105: 0x6c754820, 0x2a107: 0x6d28e620, + 0x2a10e: 0x6d2d1620, 0x2a10f: 0x6cb12220, + 0x2a111: 0x6c8fd220, 0x2a113: 0x6c8fd420, + 0x2a118: 0x6c8fe220, + 0x2a11d: 0x6c900020, + 0x2a120: 0x6c900c20, 0x2a122: 0x6c98b220, + 0x2a125: 0x6d30d020, + 0x2a12c: 0x6c423a20, 0x2a12d: 0x6c466a20, 0x2a12e: 0x6cc49a20, 0x2a12f: 0x6c248020, + 0x2a130: 0x6c68aa20, + 0x2a137: 0x6c0fec20, + 0x2a139: 0x6d3b4c20, 0x2a13a: 0x6cbfe820, 0x2a13b: 0x6d0f7220, + // Block 0xa85, offset 0x2a140 + 0x2a140: 0x6d003020, 0x2a142: 0x6c5b4820, 0x2a143: 0x6cc16c20, + 0x2a148: 0x6c8e0220, 0x2a14a: 0x6d1ab220, + 0x2a14e: 0x6cb0e820, + 0x2a152: 0x6c88b020, + // Block 0xa86, offset 0x2a180 + 0x2a19d: 0x6c343c20, + // Block 0xa87, offset 0x2a1c0 + 0x2a1c8: 0x6c040c20, + 0x2a1cf: 0x6d2d9220, + // Block 0xa88, offset 0x2a200 + 0x2a22e: 0x6c943c20, + // Block 0xa89, offset 0x2a240 + 0x2a24a: 0x6cd94a20, + 0x2a257: 0x6c73ac20, + // Block 0xa8a, offset 0x2a280 + 0x2a29d: 0x6d1d8e20, + // Block 0xa8b, offset 0x2a2c0 + 0x2a2f9: 0x6caa5c20, + // Block 0xa8c, offset 0x2a300 + 0x2a310: 0x6c230620, + // Block 0xa8d, offset 0x2a340 + 0x2a362: 0x6cfc9220, + // Block 0xa8e, offset 0x2a380 + 0x2a3a1: 0x6c85dc20, + // Block 0xa8f, offset 0x2a3c0 + 0x2a3c8: 0x6c3abc20, + 0x2a3d9: 0x6cdb3a20, + // Block 0xa90, offset 0x2a400 + 0x2a41c: 0x6c79dc20, + // Block 0xa91, offset 0x2a440 + 0x2a468: 0x6c1a9e20, + 0x2a478: 0x6d09b220, + // Block 0xa92, offset 0x2a480 + 0x2a4b0: 0x6cb86a20, + // Block 0xa93, offset 0x2a4c0 + 0x2a4d0: 0x6c45fe20, + // Block 0xa94, offset 0x2a500 + 0x2a500: 0x6c5ef220, + 0x2a528: 0x6c953a20, + // Block 0xa95, offset 0x2a540 + 0x2a559: 0x6d165020, + 0x2a55f: 0x6d146820, + 0x2a562: 0x6ca49820, + 0x2a570: 0x6cf7de20, 0x2a572: 0x6cffaa20, + // Block 0xa96, offset 0x2a580 + 0x2a58b: 0x6c73b020, + // Block 0xa97, offset 0x2a5c0 + 0x2a5c4: 0x6d268220, 0x2a5c6: 0x6c7b1020, + 0x2a5c9: 0x6c8cc220, + 0x2a5d0: 0x6ca5f020, 0x2a5d3: 0x6c108a20, + // Block 0xa98, offset 0x2a600 + 0x2a636: 0x6c4e3a20, + // Block 0xa99, offset 0x2a640 + 0x2a667: 0x6c3d5820, + 0x2a669: 0x6c230a20, + // Block 0xa9a, offset 0x2a680 + 0x2a68e: 0x6c74d220, + // Block 0xa9b, offset 0x2a6c0 + 0x2a6e0: 0x6d2eb220, + 0x2a6e6: 0x6c109020, 0x2a6e7: 0x6cda9a20, + 0x2a6ee: 0x6c59cc20, + 0x2a6f4: 0x6d2da220, + // Block 0xa9c, offset 0x2a700 + 0x2a71d: 0x6c73ea20, + 0x2a723: 0x6c4ea420, + 0x2a724: 0x6c003a20, + 0x2a728: 0x6ce33820, + // Block 0xa9d, offset 0x2a740 + 0x2a748: 0x6d06ca20, 0x2a749: 0x6c534620, + 0x2a752: 0x6c3e4620, + 0x2a754: 0x6c5b4020, 0x2a755: 0x6cd1e620, + 0x2a759: 0x6cb41220, + // Block 0xa9e, offset 0x2a780 + 0x2a79b: 0x6d33bc20, + 0x2a79e: 0x6c740c20, + 0x2a7a2: 0x6ca90020, + 0x2a7b6: 0x6c1c5220, + 0x2a7b8: 0x6ce36020, + // Block 0xa9f, offset 0x2a7c0 + 0x2a7c0: 0x6c857420, 0x2a7c1: 0x6cecb420, 0x2a7c2: 0x6d144620, 0x2a7c3: 0x48024420, + 0x2a7c4: 0x6ca62220, 0x2a7c5: 0x6cf43220, 0x2a7c6: 0x6ce9f420, 0x2a7c7: 0x6c0e1020, + 0x2a7c8: 0x6d28b220, 0x2a7c9: 0x6c071c20, 0x2a7ca: 0x6ccbb820, 0x2a7cb: 0x6cfe3c20, + 0x2a7cc: 0x6c75ee20, 0x2a7cd: 0x6cddc620, 0x2a7ce: 0x6c9dfe20, 0x2a7cf: 0x6ce92020, + 0x2a7d0: 0x6c5a2a20, 0x2a7d1: 0x6c720620, 0x2a7d2: 0x480a3820, 0x2a7d3: 0x44697220, + 0x2a7d4: 0x6ca57e20, 0x2a7d5: 0x6d292620, 0x2a7d6: 0x480a9620, 0x2a7d7: 0x6cc6ec20, + 0x2a7d8: 0x6d24d020, 0x2a7d9: 0x6c0da020, 0x2a7da: 0x6c2fd820, 0x2a7db: 0x6c7bdc20, + 0x2a7dc: 0x6cbee220, 0x2a7dd: 0x6cb9ec20, 0x2a7de: 0x6cc5a020, 0x2a7df: 0x6cafae20, + 0x2a7e0: 0x6c787a20, 0x2a7e1: 0x6c95a620, 0x2a7e2: 0x6c438c20, 0x2a7e3: 0x6c15bc20, + 0x2a7e4: 0x6c5fc020, 0x2a7e5: 0x6d1e1820, 0x2a7e6: 0x6c9e0c20, 0x2a7e7: 0x6cbd7c20, + 0x2a7e8: 0x6cce9420, 0x2a7e9: 0x6c059e20, 0x2a7ea: 0x6c22f420, 0x2a7eb: 0x6c06c620, + 0x2a7ec: 0x6c5b8420, 0x2a7ed: 0x6c068e20, 0x2a7ee: 0x6c0efe20, 0x2a7ef: 0x6c5fd220, + 0x2a7f0: 0x6c5fec20, 0x2a7f1: 0x6cbe3a20, 0x2a7f2: 0x6cbe3a20, 0x2a7f3: 0x6cbe3a20, + 0x2a7f4: 0x48145820, 0x2a7f5: 0x6c5a8620, 0x2a7f6: 0x6c5fb820, 0x2a7f7: 0x6cda0e20, + 0x2a7f8: 0x4816c620, 0x2a7f9: 0x6c697a20, 0x2a7fa: 0x6c1bd620, 0x2a7fb: 0x6d108620, + 0x2a7fc: 0x6cfc7820, 0x2a7fd: 0x6cf56a20, 0x2a7fe: 0x6c19b620, 0x2a7ff: 0x6d385a20, + // Block 0xaa0, offset 0x2a800 + 0x2a800: 0x6c35e420, 0x2a801: 0x6c9ec220, 0x2a802: 0x6ce0e820, 0x2a803: 0x6cb6ec20, + 0x2a804: 0x6cfb5820, 0x2a805: 0x6ccd8a20, 0x2a806: 0x6ccd8a20, 0x2a807: 0x6c5bbc20, + 0x2a808: 0x6c1aae20, 0x2a809: 0x6d2bd620, 0x2a80a: 0x6d110420, 0x2a80b: 0x6ce8d420, + 0x2a80c: 0x6ce0a020, 0x2a80d: 0x6ce8d620, 0x2a80e: 0x6c4fd020, 0x2a80f: 0x6cae3420, + 0x2a810: 0x6cbc9020, 0x2a811: 0x6d3c2c20, 0x2a812: 0x6c19c620, 0x2a813: 0x6d344c20, + 0x2a814: 0x6ce92220, 0x2a815: 0x6d03ca20, 0x2a816: 0x6c223620, 0x2a817: 0x6c064c20, + 0x2a818: 0x6c2c7c20, 0x2a819: 0x4829c820, 0x2a81a: 0x6c972420, 0x2a81b: 0x6c554020, + 0x2a81c: 0x6c3c9c20, 0x2a81d: 0x6c341620, 0x2a81e: 0x6c9c0420, 0x2a81f: 0x6cceea20, + 0x2a820: 0x6c1bda20, 0x2a821: 0x482dd420, 0x2a822: 0x6c5ea220, 0x2a823: 0x6d20ec20, + 0x2a824: 0x6ce9f820, 0x2a825: 0x6cb1e820, 0x2a826: 0x6c3fe420, 0x2a827: 0x6ccae220, + 0x2a828: 0x6c139820, 0x2a829: 0x6cc52820, 0x2a82a: 0x6c804820, 0x2a82b: 0x6c804820, + 0x2a82c: 0x48339020, 0x2a82d: 0x6d24da20, 0x2a82e: 0x6d365020, 0x2a82f: 0x6ca91020, + 0x2a830: 0x6c061c20, 0x2a831: 0x6c81ee20, 0x2a832: 0x6cd45020, 0x2a833: 0x6c674e20, + 0x2a834: 0x6c28f820, 0x2a835: 0x6d1edc20, 0x2a836: 0x6d11f020, 0x2a837: 0x6ce8a020, + 0x2a838: 0x6c17fa20, 0x2a839: 0x6d053020, 0x2a83a: 0x6cb8a420, 0x2a83b: 0x6cf3b020, + 0x2a83c: 0x6d0d7a20, 0x2a83d: 0x483bcc20, 0x2a83e: 0x6c2ccc20, 0x2a83f: 0x6d3e3620, + // Block 0xaa1, offset 0x2a840 + 0x2a840: 0x6c15c620, 0x2a841: 0x6d09d820, 0x2a842: 0x6c175e20, 0x2a843: 0x6d15b220, + 0x2a844: 0x6d0a8c20, 0x2a845: 0x6cd71420, 0x2a846: 0x6c997a20, 0x2a847: 0x6c3b8620, + 0x2a848: 0x6c980020, 0x2a849: 0x48430620, 0x2a84a: 0x6d16e820, 0x2a84b: 0x6c0e0e20, + 0x2a84c: 0x6c097620, 0x2a84d: 0x6cd5c220, 0x2a84e: 0x6c80b420, 0x2a84f: 0x6cd79620, + 0x2a850: 0x6c45cc20, 0x2a851: 0x48466220, 0x2a852: 0x48466220, 0x2a853: 0x6d20e820, + 0x2a854: 0x6ce1b020, 0x2a855: 0x6ce1b020, 0x2a856: 0x6d16b220, 0x2a857: 0x48657020, + 0x2a858: 0x48c3b420, 0x2a859: 0x6d03c020, 0x2a85a: 0x6c2dc420, 0x2a85b: 0x6ccd7820, + 0x2a85c: 0x6c300020, 0x2a85d: 0x6cc58620, 0x2a85e: 0x6d357420, 0x2a85f: 0x6c7bb620, + 0x2a860: 0x6d24d420, 0x2a861: 0x6c5a4620, 0x2a862: 0x6c73f820, 0x2a863: 0x6c5b4c20, + 0x2a864: 0x6c2ff820, 0x2a865: 0x6c339820, 0x2a866: 0x6c224e20, 0x2a867: 0x6c599420, + 0x2a868: 0x6cd0ac20, 0x2a869: 0x6c599420, 0x2a86a: 0x6c90a220, 0x2a86b: 0x6d2b8a20, + 0x2a86c: 0x6cfd0820, 0x2a86d: 0x6c3be420, 0x2a86e: 0x6c11da20, 0x2a86f: 0x6c9b4a20, + 0x2a870: 0x6c1a5420, 0x2a871: 0x6c804a20, 0x2a872: 0x6c19b220, 0x2a873: 0x6c63b620, + 0x2a874: 0x6c7a1820, 0x2a875: 0x6c063220, 0x2a876: 0x6c036820, 0x2a877: 0x6c72e420, + 0x2a878: 0x48561820, 0x2a879: 0x6cecf820, 0x2a87a: 0x6cb1ea20, 0x2a87b: 0x6ccf2c20, + 0x2a87c: 0x6ccae020, 0x2a87d: 0x6c600020, 0x2a87e: 0x4857e220, 0x2a87f: 0x6c6d1420, + // Block 0xaa2, offset 0x2a880 + 0x2a880: 0x6d0ca820, 0x2a881: 0x6d0d6620, 0x2a882: 0x6c30b620, 0x2a883: 0x6ca07220, + 0x2a884: 0x6c67f620, 0x2a885: 0x6c5ae420, 0x2a886: 0x6c691420, 0x2a887: 0x4474d820, + 0x2a888: 0x6c9fa820, 0x2a889: 0x6c6e8420, 0x2a88a: 0x48601420, 0x2a88b: 0x6c61ec20, + 0x2a88c: 0x6cd4b820, 0x2a88d: 0x6c6cea20, 0x2a88e: 0x6cf01620, 0x2a88f: 0x6cd55a20, + 0x2a890: 0x6cf15420, 0x2a891: 0x6c16e420, 0x2a892: 0x6c994e20, 0x2a893: 0x6c9e1820, + 0x2a894: 0x6d41b020, 0x2a895: 0x6c6d2820, 0x2a896: 0x6ca31420, 0x2a897: 0x6ce05420, + 0x2a898: 0x6c80f820, 0x2a899: 0x6cee5220, 0x2a89a: 0x6d3f9820, 0x2a89b: 0x6cb6d620, + 0x2a89c: 0x6c0bea20, 0x2a89d: 0x48678620, 0x2a89e: 0x6c572820, 0x2a89f: 0x6c48dc20, + 0x2a8a0: 0x6c5e8e20, 0x2a8a1: 0x6cca6a20, 0x2a8a2: 0x6c99ec20, 0x2a8a3: 0x4868da20, + 0x2a8a4: 0x6c022a20, 0x2a8a5: 0x6c078420, 0x2a8a6: 0x6d3e3a20, 0x2a8a7: 0x6c513820, + 0x2a8a8: 0x6d2be020, 0x2a8a9: 0x6d112020, 0x2a8aa: 0x6c415020, 0x2a8ab: 0x6ccefe20, + 0x2a8ac: 0x486d4620, 0x2a8ad: 0x6d370620, 0x2a8ae: 0x6d159820, 0x2a8af: 0x6c22aa20, + 0x2a8b0: 0x48714e20, 0x2a8b1: 0x6d05d420, 0x2a8b2: 0x6c7d9c20, 0x2a8b3: 0x6cdc4620, + 0x2a8b4: 0x6cf15820, 0x2a8b5: 0x6ccbda20, 0x2a8b6: 0x6cbc4020, 0x2a8b7: 0x48751a20, + 0x2a8b8: 0x483a1620, 0x2a8b9: 0x4875f420, 0x2a8ba: 0x6c391c20, 0x2a8bb: 0x48797820, + 0x2a8bc: 0x6d0c6820, 0x2a8bd: 0x6c077e20, 0x2a8be: 0x6cb8a820, 0x2a8bf: 0x6cf3b620, + // Block 0xaa3, offset 0x2a8c0 + 0x2a8c0: 0x6cac1e20, 0x2a8c1: 0x6c4d3a20, 0x2a8c2: 0x6c8e4a20, 0x2a8c3: 0x6c502e20, + 0x2a8c4: 0x6c6cee20, 0x2a8c5: 0x6ca80820, 0x2a8c6: 0x6c07ac20, 0x2a8c7: 0x6cb28620, + 0x2a8c8: 0x6c42a220, 0x2a8c9: 0x6d0c0820, 0x2a8ca: 0x6c903620, 0x2a8cb: 0x6d3e4020, + 0x2a8cc: 0x6c2cce20, 0x2a8cd: 0x6ccc0a20, 0x2a8ce: 0x6d0bf820, 0x2a8cf: 0x6c177620, + 0x2a8d0: 0x487ebc20, 0x2a8d1: 0x487f1c20, 0x2a8d2: 0x6c3b8c20, 0x2a8d3: 0x6d270a20, + 0x2a8d4: 0x6c6eb420, 0x2a8d5: 0x6d1cba20, 0x2a8d6: 0x6cd63020, 0x2a8d7: 0x6cb9e020, + 0x2a8d8: 0x6d28f220, 0x2a8d9: 0x6d3bbe20, 0x2a8da: 0x6ce08e20, 0x2a8db: 0x480a4a20, + 0x2a8dc: 0x6c32cc20, 0x2a8dd: 0x4884c620, 0x2a8de: 0x6c233e20, 0x2a8df: 0x48875620, + 0x2a8e0: 0x6c24c420, 0x2a8e1: 0x6c74c820, 0x2a8e2: 0x6d2c3a20, 0x2a8e3: 0x488c1020, + 0x2a8e4: 0x6cf61a20, 0x2a8e5: 0x6c074020, 0x2a8e6: 0x6d0e3c20, 0x2a8e7: 0x48902820, + 0x2a8e8: 0x6cde2020, 0x2a8e9: 0x6cedda20, 0x2a8ea: 0x6c45d620, 0x2a8eb: 0x6d268820, + 0x2a8ec: 0x6cb29020, 0x2a8ed: 0x6cb29020, 0x2a8ee: 0x6c277a20, 0x2a8ef: 0x6d215e20, + 0x2a8f0: 0x6d325020, 0x2a8f1: 0x6cdd8a20, 0x2a8f2: 0x6cbf7620, 0x2a8f3: 0x6d03d220, + 0x2a8f4: 0x6cc89c20, 0x2a8f5: 0x48986c20, 0x2a8f6: 0x6d28f620, 0x2a8f7: 0x48992420, + 0x2a8f8: 0x6d176620, 0x2a8f9: 0x6cb2b420, 0x2a8fa: 0x6d226e20, 0x2a8fb: 0x489f4220, + 0x2a8fc: 0x489f7020, 0x2a8fd: 0x48a08820, 0x2a8fe: 0x6d0c7620, 0x2a8ff: 0x6c627820, + // Block 0xaa4, offset 0x2a900 + 0x2a900: 0x6d344020, 0x2a901: 0x48a1e620, 0x2a902: 0x48a1e420, 0x2a903: 0x48a23220, + 0x2a904: 0x48a26620, 0x2a905: 0x6d313c20, 0x2a906: 0x6d313e20, 0x2a907: 0x6d313e20, + 0x2a908: 0x6c736420, 0x2a909: 0x6c6ad220, 0x2a90a: 0x6c188220, 0x2a90b: 0x6d130220, + 0x2a90c: 0x6cd23420, 0x2a90d: 0x48a83a20, 0x2a90e: 0x6d03e220, 0x2a90f: 0x6c926e20, + 0x2a910: 0x6ce4ba20, 0x2a911: 0x6c5b7020, 0x2a912: 0x6c6fd820, 0x2a913: 0x6d411420, + 0x2a914: 0x6c1baa20, 0x2a915: 0x6c8f3a20, 0x2a916: 0x6c3e9c20, 0x2a917: 0x6cd52420, + 0x2a918: 0x6c657420, 0x2a919: 0x6c47c420, 0x2a91a: 0x6c624a20, 0x2a91b: 0x6cf1f020, + 0x2a91c: 0x48b2f820, 0x2a91d: 0x6ce4c020, 0x2a91e: 0x6ce4c020, 0x2a91f: 0x6cb26020, + 0x2a920: 0x6cb2be20, 0x2a921: 0x48b75620, 0x2a922: 0x6d3bde20, 0x2a923: 0x6d3a2820, + 0x2a924: 0x6cf00020, 0x2a925: 0x6c178020, 0x2a926: 0x6c076020, 0x2a927: 0x6cf8f420, + 0x2a928: 0x6c680820, 0x2a929: 0x6cca3020, 0x2a92a: 0x6c61b020, 0x2a92b: 0x48bf0c20, + 0x2a92c: 0x6c07ee20, 0x2a92d: 0x6d10b020, 0x2a92e: 0x6d3e6a20, 0x2a92f: 0x6d400620, + 0x2a930: 0x6ccac220, 0x2a931: 0x6c965020, 0x2a932: 0x6d03dc20, 0x2a933: 0x48c48e20, + 0x2a934: 0x6c9a0420, 0x2a935: 0x48c5b220, 0x2a936: 0x6c177e20, 0x2a937: 0x48c67c20, + 0x2a938: 0x6d104a20, 0x2a939: 0x6c027e20, 0x2a93a: 0x6d30d220, 0x2a93b: 0x48c9b420, + 0x2a93c: 0x48ca4620, 0x2a93d: 0x6cb25820, 0x2a93e: 0x48cb5020, 0x2a93f: 0x6c236620, + // Block 0xaa5, offset 0x2a940 + 0x2a940: 0x6c78f420, 0x2a941: 0x6cc5d220, 0x2a942: 0x6d22da20, 0x2a943: 0x6c252c20, + 0x2a944: 0x6c231a20, 0x2a945: 0x6caff420, 0x2a946: 0x6d1d4020, 0x2a947: 0x48cf4e20, + 0x2a948: 0x48cf6a20, 0x2a949: 0x6d085420, 0x2a94a: 0x48673820, 0x2a94b: 0x6d20e820, + 0x2a94c: 0x6cf89220, 0x2a94d: 0x6c225220, 0x2a94e: 0x6c07f020, 0x2a94f: 0x6cb6ce20, + 0x2a950: 0x6d22c820, 0x2a951: 0x6d338420, 0x2a952: 0x6c813e20, 0x2a953: 0x6c570620, + 0x2a954: 0x6c398620, 0x2a955: 0x6d0b1420, 0x2a956: 0x6c7a7620, 0x2a957: 0x48d67820, + 0x2a958: 0x6cc91420, 0x2a959: 0x6c148e20, 0x2a95a: 0x6cc65e20, 0x2a95b: 0x6c6aa820, + 0x2a95c: 0x6cf3bc20, 0x2a95d: 0x6c988a20, 0x2a95e: 0x6c2bf220, 0x2a95f: 0x6d311420, + 0x2a960: 0x6cb28e20, 0x2a961: 0x6c711c20, 0x2a962: 0x6c757020, 0x2a963: 0x6c114420, + 0x2a964: 0x48d86c20, 0x2a965: 0x6cdd8420, 0x2a966: 0x48d9aa20, 0x2a967: 0x448a5620, + 0x2a968: 0x6cb2ae20, 0x2a969: 0x6c6ca620, 0x2a96a: 0x6c25ea20, 0x2a96b: 0x48e79420, + 0x2a96c: 0x6cc8a220, 0x2a96d: 0x48de5820, 0x2a96e: 0x6c19a420, 0x2a96f: 0x6c936e20, + 0x2a970: 0x6c175420, 0x2a971: 0x6c93c420, 0x2a972: 0x6c7cba20, 0x2a973: 0x6caaa220, + 0x2a974: 0x6c91c420, 0x2a975: 0x6c7c4820, 0x2a976: 0x6cf90620, 0x2a977: 0x6c1aa420, + 0x2a978: 0x6cb8ca20, 0x2a979: 0x6d24fc20, 0x2a97a: 0x6cb2b020, 0x2a97b: 0x6d276220, + 0x2a97c: 0x6c2ed620, 0x2a97d: 0x6d39be20, 0x2a97e: 0x6c22de20, 0x2a97f: 0x6c5f4420, + // Block 0xaa6, offset 0x2a980 + 0x2a980: 0x6c4b2220, 0x2a981: 0x6cfe0220, 0x2a982: 0x6c22ec20, 0x2a983: 0x6d3cd820, + 0x2a984: 0x6d13be20, 0x2a985: 0x6c668020, 0x2a986: 0x6c8e6020, 0x2a987: 0x6cd72420, + 0x2a988: 0x6c929c20, 0x2a989: 0x6d0daa20, 0x2a98a: 0x6c996a20, 0x2a98b: 0x48f15c20, + 0x2a98c: 0x48f2cc20, 0x2a98d: 0x6ca8e820, 0x2a98e: 0x6d25ea20, 0x2a98f: 0x6c1a2220, + 0x2a990: 0x6d23f620, 0x2a991: 0x6c0bdc20, 0x2a992: 0x6cd2b020, 0x2a993: 0x6c649220, + 0x2a994: 0x6c498620, 0x2a995: 0x6c09b020, 0x2a996: 0x6c424420, 0x2a997: 0x6cb6ea20, + 0x2a998: 0x6cd61020, 0x2a999: 0x6d2fdc20, 0x2a99a: 0x6c038220, 0x2a99b: 0x6c658c20, + 0x2a99c: 0x6cb11c20, 0x2a99d: 0x4811bc20, 0x2a99e: 0x6cc5e420, 0x2a99f: 0x6cd50820, + 0x2a9a0: 0x490ba420, 0x2a9a1: 0x490bda20, 0x2a9a2: 0x6cb6c420, 0x2a9a3: 0x6cb27e20, + 0x2a9a4: 0x6d3e4a20, 0x2a9a5: 0x490e5c20, 0x2a9a6: 0x6c176420, 0x2a9a7: 0x6c0f1c20, + 0x2a9a8: 0x6d07ca20, 0x2a9a9: 0x6c575620, 0x2a9aa: 0x6c0dee20, 0x2a9ab: 0x6cbb5020, + 0x2a9ac: 0x6d295820, 0x2a9ad: 0x4917f420, 0x2a9ae: 0x6c763420, 0x2a9af: 0x6cae7c20, + 0x2a9b0: 0x6ccca420, 0x2a9b1: 0x491aee20, 0x2a9b2: 0x6cef3620, 0x2a9b3: 0x6cb8e820, + 0x2a9b4: 0x6cf69820, 0x2a9b5: 0x6d280620, 0x2a9b6: 0x6cace820, 0x2a9b7: 0x6cb26420, + 0x2a9b8: 0x6c930020, 0x2a9b9: 0x6c160820, 0x2a9ba: 0x6c0ab220, 0x2a9bb: 0x49281420, + 0x2a9bc: 0x6c7d6c20, 0x2a9bd: 0x6d0eb020, 0x2a9be: 0x6c35b420, 0x2a9bf: 0x6c35b420, + // Block 0xaa7, offset 0x2a9c0 + 0x2a9c0: 0x6cb26620, 0x2a9c1: 0x6d097020, 0x2a9c2: 0x6c5eb020, 0x2a9c3: 0x6c04d420, + 0x2a9c4: 0x6c36b220, 0x2a9c5: 0x6d276c20, 0x2a9c6: 0x6c060a20, 0x2a9c7: 0x6cea1420, + 0x2a9c8: 0x6c423020, 0x2a9c9: 0x6cbf6820, 0x2a9ca: 0x6d320420, 0x2a9cb: 0x6c62d820, + 0x2a9cc: 0x6c64ec20, 0x2a9cd: 0x6c702e20, 0x2a9ce: 0x6c60f620, 0x2a9cf: 0x6cb02c20, + 0x2a9d0: 0x6d21ea20, 0x2a9d1: 0x6c968620, 0x2a9d2: 0x6ccc2e20, 0x2a9d3: 0x49441c20, + 0x2a9d4: 0x49452220, 0x2a9d5: 0x6c966820, 0x2a9d6: 0x6cba8620, 0x2a9d7: 0x6d353420, + 0x2a9d8: 0x6c9e0a20, 0x2a9d9: 0x6d342a20, 0x2a9da: 0x6c9d7420, 0x2a9db: 0x6c3ba420, + 0x2a9dc: 0x6c08a220, 0x2a9dd: 0x6cb13820, + // Block 0xaa8, offset 0x2aa00 + 0x2aa00: 0x6c00c220, 0x2aa01: 0xe0002416, 0x2aa02: 0x029cb684, 0x2aa03: 0x029cb484, + 0x2aa04: 0x6c000e20, 0x2aa05: 0x029d7684, 0x2aa06: 0x6c008a20, 0x2aa07: 0x6c009220, + 0x2aa08: 0x6c009e20, 0x2aa09: 0x02a40484, 0x2aa0a: 0x6c00b820, 0x2aa0b: 0xe0002413, + 0x2aa0c: 0x6c01a420, 0x2aa0d: 0x6c01a620, 0x2aa0e: 0xe000241f, 0x2aa0f: 0x02b84684, + 0x2aa10: 0x02b84484, 0x2aa11: 0xe0002422, 0x2aa12: 0x02bbe684, 0x2aa13: 0x02bcf484, + 0x2aa14: 0x02bea284, 0x2aa15: 0x6c01e620, 0x2aa16: 0x02bf8884, 0x2aa17: 0xe0002428, + 0x2aa18: 0x02c49884, 0x2aa19: 0x02ca6a84, 0x2aa1b: 0x02cbc284, + 0x2aa1c: 0x6c049420, 0x2aa1d: 0x6c049a20, 0x2aa1e: 0xe0002436, 0x2aa1f: 0x2c098083, + 0x2aa20: 0x02d82284, 0x2aa21: 0x02d86a84, 0x2aa22: 0x02d87484, 0x2aa23: 0x02e0d884, + 0x2aa24: 0x02e45684, 0x2aa25: 0x6c04d420, 0x2aa26: 0x029c5884, 0x2aa27: 0x6c04ee20, + 0x2aa28: 0x02e55a84, 0x2aa29: 0xe000243f, 0x2aa2a: 0x6c0a1820, 0x2aa2b: 0xe0002445, + 0x2aa2c: 0x6c0a3220, 0x2aa2d: 0x02f27684, 0x2aa2e: 0x6c13f420, 0x2aa2f: 0x02f9f284, + 0x2aa30: 0x02fd3e84, 0x2aa31: 0x02fea684, 0x2aa32: 0x02fea484, 0x2aa33: 0xe0002451, + 0x2aa34: 0xe0002454, 0x2aa35: 0xe000244e, 0x2aa36: 0x6c143820, 0x2aa37: 0xe000245a, + 0x2aa38: 0x02ff1684, 0x2aa39: 0x03000484, 0x2aa3a: 0x03010084, 0x2aa3b: 0xe000245d, + 0x2aa3c: 0x6c050a20, 0x2aa3d: 0xe0002463, 0x2aa3e: 0x6c020220, 0x2aa3f: 0xe0002466, + // Block 0xaa9, offset 0x2aa40 + 0x2aa40: 0xe0002469, 0x2aa41: 0x030c9c84, 0x2aa42: 0x0310c884, 0x2aa43: 0x03130084, + 0x2aa44: 0x0312fe84, 0x2aa45: 0x03138284, 0x2aa46: 0x6c26a420, 0x2aa47: 0xe000246c, + 0x2aa48: 0x03174084, 0x2aa49: 0x031a3a84, 0x2aa4a: 0x6c270020, 0x2aa4b: 0x031ecc84, + 0x2aa4c: 0x6c020620, 0x2aa4d: 0x6c051c20, 0x2aa4e: 0xe0002475, 0x2aa4f: 0x6c00cc20, + 0x2aa50: 0x03290a84, 0x2aa51: 0x032aee84, 0x2aa52: 0x032af084, 0x2aa53: 0x032afe84, + 0x2aa54: 0x032bd084, 0x2aa55: 0xe000247b, 0x2aa56: 0x6c00ce20, 0x2aa57: 0x6c427620, + 0x2aa58: 0x032ea484, 0x2aa59: 0x032fcc84, 0x2aa5a: 0x0330ea84, 0x2aa5b: 0x03319c84, + 0x2aa5c: 0x0331bc84, 0x2aa5d: 0x0331be84, 0x2aa5e: 0x6c636020, 0x2aa5f: 0x0331c084, + 0x2aa60: 0x0332c684, 0x2aa61: 0xe0002484, 0x2aa62: 0x0334d884, 0x2aa63: 0x6c63aa20, + 0x2aa64: 0xe000248a, 0x2aa65: 0x0338f884, 0x2aa66: 0x033c3e84, 0x2aa67: 0xe000248d, + 0x2aa68: 0x033d4c84, 0x2aa69: 0x033d8884, 0x2aa6a: 0x033dfc84, 0x2aa6b: 0xe0002490, + 0x2aa6c: 0x033ea084, 0x2aa6d: 0xe0002493, 0x2aa6e: 0x033efe84, 0x2aa6f: 0xe0002496, + 0x2aa70: 0x033f3284, 0x2aa71: 0xe0002499, 0x2aa72: 0xe000249c, 0x2aa73: 0x2c28ac83, + // Block 0xaaa, offset 0x2aa80 + 0x2aa80: 0x2c000286, 0x2aa81: 0x2c000483, 0x2aa82: 0x2c000683, 0x2aa83: 0x2c000883, + 0x2aa84: 0x2c001084, 0x2aa85: 0x2c002483, 0x2aa86: 0x2c007486, 0x2aa87: 0x2c007c83, + 0x2aa88: 0x2c007e84, 0x2aa89: 0x2c008483, 0x2aa8a: 0x2c008683, 0x2aa8b: 0x2c008884, + 0x2aa8c: 0x2c008c83, 0x2aa8d: 0x2c008e83, 0x2aa8e: 0x2c009083, 0x2aa8f: 0x2c009483, + 0x2aa90: 0x2c009a83, 0x2aa91: 0x2c00a083, 0x2aa92: 0x2c00a883, 0x2aa93: 0x2c00aa83, + 0x2aa94: 0x2c00ac83, 0x2aa95: 0x2c00b083, 0x2aa96: 0x2c00b483, 0x2aa97: 0x2c00b685, + 0x2aa98: 0x2c00ba83, 0x2aa99: 0x2c00bc83, 0x2aa9a: 0x2c00be83, 0x2aa9b: 0x2c00c083, + 0x2aa9c: 0x2c00c483, 0x2aa9d: 0x2c018083, 0x2aa9e: 0x2c018283, 0x2aa9f: 0x2c018484, + 0x2aaa0: 0x2c018683, 0x2aaa1: 0x2c018883, 0x2aaa2: 0x2c018c83, 0x2aaa3: 0x2c018e83, + 0x2aaa4: 0x2c019083, 0x2aaa5: 0x2c019484, 0x2aaa6: 0x2c019683, 0x2aaa7: 0x2c01a083, + 0x2aaa8: 0x2c01a283, 0x2aaa9: 0x2c01a883, 0x2aaaa: 0x2c01ac83, 0x2aaab: 0x2c01b283, + 0x2aaac: 0x2c01b683, 0x2aaad: 0x2c01ba83, 0x2aaae: 0x2c01bc83, 0x2aaaf: 0x2c01c483, + 0x2aab0: 0x2c01c683, 0x2aab1: 0x2c01cc83, 0x2aab2: 0x2c01ce83, 0x2aab3: 0x2c01d283, + 0x2aab4: 0x2c01d483, 0x2aab5: 0x2c01d683, 0x2aab6: 0x2c01d883, 0x2aab7: 0x2c01dc83, + 0x2aab8: 0x2c01e083, 0x2aab9: 0x2c01e883, 0x2aaba: 0x2c01ec83, 0x2aabb: 0x2c01ee83, + 0x2aabc: 0x2c046683, 0x2aabd: 0x2c046c83, 0x2aabe: 0x2c046e83, 0x2aabf: 0x2c047484, + // Block 0xaab, offset 0x2aac0 + 0x2aac0: 0x2c047e83, 0x2aac1: 0x2c048083, 0x2aac2: 0x2c048484, 0x2aac3: 0x2c048683, + 0x2aac4: 0x2c048a83, 0x2aac5: 0x2c048e83, 0x2aac6: 0x2c049083, 0x2aac7: 0x2c049684, + 0x2aac8: 0x2c049883, 0x2aac9: 0x2c049c85, 0x2aaca: 0x2c049e84, 0x2aacb: 0x2c04a683, + 0x2aacc: 0x2c04a883, 0x2aacd: 0x2c04ae83, 0x2aace: 0x2c04b483, 0x2aacf: 0x2c04b683, + 0x2aad0: 0x2c04bc83, 0x2aad1: 0x2c04be83, 0x2aad2: 0x2c04c283, 0x2aad3: 0x2c04c483, + 0x2aad4: 0x2c04c684, 0x2aad5: 0x2c04d084, 0x2aad6: 0x2c04d683, 0x2aad7: 0x2c04de83, + 0x2aad8: 0x2c04e083, 0x2aad9: 0x2c04e483, 0x2aada: 0x2c04e883, 0x2aadb: 0x2c04ec83, + 0x2aadc: 0x2c04f083, 0x2aadd: 0x2c04f483, 0x2aade: 0x2c09ee83, 0x2aadf: 0x2c09f283, + 0x2aae0: 0x2c09fa83, 0x2aae1: 0x2c09fc83, 0x2aae2: 0x2c09fe83, 0x2aae3: 0x2c0a0284, + 0x2aae4: 0x2c0a0683, 0x2aae5: 0x2c0a0a83, 0x2aae6: 0x2c0a1a83, 0x2aae7: 0x2c0a2083, + 0x2aae8: 0x2c0a2283, 0x2aae9: 0x2c0a2483, 0x2aaea: 0x2c0a2683, 0x2aaeb: 0x2c0a2883, + 0x2aaec: 0x2c0a2a83, 0x2aaed: 0x2c0a2c83, 0x2aaee: 0x2c0a2e83, 0x2aaef: 0x2c0a3083, + 0x2aaf0: 0x2c0a3483, 0x2aaf1: 0x2c0a3883, 0x2aaf2: 0x2c0a3c83, 0x2aaf3: 0x2c0a4083, + 0x2aaf4: 0x2c0a4483, 0x2aaf5: 0x2c141083, 0x2aaf6: 0x2c141483, 0x2aaf7: 0x2c141683, + 0x2aaf8: 0x2c143083, 0x2aaf9: 0x2c143483, 0x2aafa: 0x2c143a83, 0x2aafb: 0x2c144283, + 0x2aafc: 0x2c144483, 0x2aafd: 0x2c144883, 0x2aafe: 0x2c144c83, 0x2aaff: 0x2c145083, + // Block 0xaac, offset 0x2ab00 + 0x2ab00: 0x2c145283, 0x2ab01: 0x2c145683, 0x2ab02: 0x2c147a83, 0x2ab03: 0x2c147e83, + 0x2ab04: 0x2c148283, 0x2ab05: 0x2c148883, 0x2ab06: 0x2c149083, 0x2ab07: 0x2c149283, + 0x2ab08: 0x2c149483, 0x2ab09: 0x2c149883, 0x2ab0a: 0x2c149a83, 0x2ab0b: 0x2c149e83, + 0x2ab0c: 0x2c14ca83, 0x2ab0d: 0x2c14cc83, 0x2ab0e: 0x2c14ce83, 0x2ab0f: 0x2c14d083, + 0x2ab10: 0x2c14d283, 0x2ab11: 0x2c14d483, 0x2ab12: 0x2c26a083, 0x2ab13: 0x2c26a683, + 0x2ab14: 0x2c26aa83, 0x2ab15: 0x2c26e683, 0x2ab16: 0x2c26ea83, 0x2ab17: 0x2c26ec83, + 0x2ab18: 0x2c26f283, 0x2ab19: 0x2c26f483, 0x2ab1a: 0x2c26fa83, 0x2ab1b: 0x2c26fc84, + 0x2ab1c: 0x2c270283, 0x2ab1d: 0x2c270683, 0x2ab1e: 0x2c270e83, 0x2ab1f: 0x2c271c83, + 0x2ab20: 0x2c272083, 0x2ab21: 0x2c272683, 0x2ab22: 0x2c278a83, 0x2ab23: 0x2c27ec83, + 0x2ab24: 0x2c27ee83, 0x2ab25: 0x2c27f083, 0x2ab26: 0x2c41dc84, 0x2ab27: 0x2c41fe83, + 0x2ab28: 0x2c420283, 0x2ab29: 0x2c421083, 0x2ab2a: 0x2c427283, 0x2ab2b: 0x2c427483, + 0x2ab2c: 0x2c427883, 0x2ab2d: 0x2c427a83, 0x2ab2e: 0x2c427e83, 0x2ab2f: 0x2c632e83, + 0x2ab30: 0x2c633283, 0x2ab31: 0x2c633483, 0x2ab32: 0x2c633c83, 0x2ab33: 0x2c633e83, + 0x2ab34: 0x2c634083, 0x2ab35: 0x2c634e83, 0x2ab36: 0x2c635c83, 0x2ab37: 0x2c636283, + 0x2ab38: 0x2c637e83, 0x2ab39: 0x2c638283, 0x2ab3a: 0x2c8a8e83, 0x2ab3b: 0x2c8aae83, + 0x2ab3c: 0x2c8ab083, 0x2ab3d: 0x2c8ab283, 0x2ab3e: 0x2c8ab483, 0x2ab3f: 0x2c8aba83, + // Block 0xaad, offset 0x2ab40 + 0x2ab40: 0x2c8abc83, 0x2ab41: 0x2c8abe83, 0x2ab42: 0x2cb74483, 0x2ab43: 0x2cb75283, + 0x2ab44: 0x2cb78283, 0x2ab45: 0x2cb78683, 0x2ab46: 0x2cb78a83, 0x2ab47: 0x2cb79483, + 0x2ab48: 0x2ce8b483, 0x2ab49: 0x2ce8b883, 0x2ab4a: 0x2ce8ba83, 0x2ab4b: 0x2ce8be83, + 0x2ab4c: 0x2d187483, 0x2ab4d: 0x2d187883, 0x2ab4e: 0x2d187a83, 0x2ab4f: 0x2d188083, + 0x2ab50: 0x2d478083, 0x2ab51: 0x2d478283, 0x2ab52: 0x2d75b683, 0x2ab53: 0x2d9f9c83, + 0x2ab54: 0x2d9f9e83, 0x2ab55: 0x2dc24283, + 0x2ab70: 0x40273a20, 0x2ab71: 0x40273c20, 0x2ab72: 0x40273e20, 0x2ab73: 0x40274020, + 0x2ab74: 0x40274220, 0x2ab75: 0x40274420, 0x2ab76: 0x40274620, 0x2ab77: 0x40274820, + 0x2ab78: 0x40274a20, 0x2ab79: 0x40274c20, 0x2ab7a: 0x40274e20, 0x2ab7b: 0x40275020, + // Block 0xaae, offset 0x2ab80 + 0x2ab80: 0x00021283, 0x2ab81: 0x40025c20, 0x2ab82: 0x40030420, 0x2ab83: 0x40051220, + 0x2ab84: 0x40279a20, 0x2ab85: 0x6c021420, 0x2ab86: 0x6c002820, 0x2ab87: 0x6c002a20, + 0x2ab88: 0x40049c20, 0x2ab89: 0x40049e20, 0x2ab8a: 0x4004a020, 0x2ab8b: 0x4004a220, + 0x2ab8c: 0x4004a420, 0x2ab8d: 0x4004a620, 0x2ab8e: 0x4004a820, 0x2ab8f: 0x4004aa20, + 0x2ab90: 0x4004ac20, 0x2ab91: 0x4004ae20, 0x2ab92: 0x40279c20, 0x2ab93: 0x40279e20, + 0x2ab94: 0x4004b020, 0x2ab95: 0x4004b220, 0x2ab96: 0x4004b420, 0x2ab97: 0x4004b620, + 0x2ab98: 0x4004b820, 0x2ab99: 0x4004ba20, 0x2ab9a: 0x4004bc20, 0x2ab9b: 0x4004be20, + 0x2ab9c: 0x40023820, 0x2ab9d: 0x4003ea20, 0x2ab9e: 0x4003ec20, 0x2ab9f: 0x4003ee20, + 0x2aba0: 0x4027a020, 0x2aba1: 0x6c002c20, 0x2aba2: 0x6c00d220, 0x2aba3: 0x6c021620, + 0x2aba4: 0x6c00d420, 0x2aba5: 0x6c002e20, 0x2aba6: 0x6c00d620, 0x2aba7: 0x6c021820, + 0x2aba8: 0x6c053820, 0x2aba9: 0x6c053a20, 0x2abaa: 0xada12202, 0x2abab: 0xae412302, + 0x2abac: 0xae812402, 0x2abad: 0xade12502, 0x2abae: 0xae012602, 0x2abaf: 0xae012702, + 0x2abb0: 0x40023a20, 0x2abb1: 0x4027ce20, 0x2abb2: 0xe0000152, 0x2abb3: 0x4027d020, + 0x2abb4: 0xe0000155, 0x2abb5: 0x4027d220, 0x2abb6: 0x00279c84, 0x2abb7: 0x4027a220, + 0x2abb8: 0x2c00b684, 0x2abb9: 0x2c00e683, 0x2abba: 0x2c036883, 0x2abbb: 0x6c003020, + 0x2abbc: 0xe000231a, 0x2abbd: 0x40051420, 0x2abbe: 0x4027a420, 0x2abbf: 0x4027a620, + // Block 0xaaf, offset 0x2abc0 + 0x2abc0: 0x00633a84, 0x2abc1: 0x00634484, 0x2abc2: 0x0064f684, 0x2abc3: 0x0064f884, + 0x2abc4: 0x00635a84, 0x2abc5: 0x00635c84, 0x2abc6: 0x00635e84, 0x2abc7: 0x0063ee84, + 0x2abc8: 0x0063f084, 0x2abc9: 0x0063f684, 0x2abca: 0x00640884, 0x2abcb: 0x00640a84, + 0x2abcc: 0x00640e84, 0x2abcd: 0x00642284, 0x2abce: 0x00642884, + 0x2abd0: 0x4027a820, 0x2abd1: 0x4027aa20, 0x2abd2: 0x2c000285, 0x2abd3: 0x2c007485, + 0x2abd4: 0x2c00dc85, 0x2abd5: 0x2c079084, 0x2abd6: 0x2c00de84, 0x2abd7: 0x2c023685, + 0x2abd8: 0x2c00e084, 0x2abd9: 0x2c0a0e83, 0x2abda: 0x2c001083, 0x2abdb: 0x2c054883, + 0x2abdc: 0x2c003283, 0x2abdd: 0x2c03de84, 0x2abde: 0x2c0ed083, 0x2abdf: 0x2c007e83, + 0x2abe0: 0xe000237a, 0x2abe1: 0xe0002383, 0x2abe2: 0xe0002380, 0x2abe3: 0xe000237d, + 0x2abe4: 0x40661c20, 0x2abe5: 0xe000238c, 0x2abe6: 0x40661620, 0x2abe7: 0xe0002389, + 0x2abe8: 0xe000239e, 0x2abe9: 0xe0002386, 0x2abea: 0xe0002395, 0x2abeb: 0xe000239b, + 0x2abec: 0x40663420, 0x2abed: 0x4065f220, 0x2abee: 0xe000238f, 0x2abef: 0xe0002392, + 0x2abf0: 0x40663020, 0x2abf1: 0x40663220, 0x2abf2: 0x40662c20, 0x2abf3: 0xe0002398, + 0x2abf4: 0x0065dc99, 0x2abf5: 0x0065e699, 0x2abf6: 0x0065ee99, 0x2abf7: 0x0065f499, + 0x2abf8: 0x40660c20, 0x2abf9: 0x40660e20, 0x2abfa: 0x40661020, + // Block 0xab0, offset 0x2ac00 + 0x2ac00: 0xf0000404, 0x2ac01: 0xf0000404, 0x2ac02: 0xf0000404, 0x2ac03: 0xf0000404, + 0x2ac04: 0xf0000404, 0x2ac05: 0xf0000404, 0x2ac06: 0xf0000404, 0x2ac07: 0xf0000404, + 0x2ac08: 0xf0000404, 0x2ac09: 0xf0000404, 0x2ac0a: 0xf0000404, 0x2ac0b: 0xf0000404, + 0x2ac0c: 0xf0000404, 0x2ac0d: 0xf0000404, 0x2ac0e: 0xe000004c, 0x2ac0f: 0xe0000051, + 0x2ac10: 0xe0000056, 0x2ac11: 0xe000005b, 0x2ac12: 0xe0000060, 0x2ac13: 0xe0000065, + 0x2ac14: 0xe000006a, 0x2ac15: 0xe000006f, 0x2ac16: 0xe0000083, 0x2ac17: 0xe000008d, + 0x2ac18: 0xe0000092, 0x2ac19: 0xe0000097, 0x2ac1a: 0xe000009c, 0x2ac1b: 0xe00000a1, + 0x2ac1c: 0xe0000088, 0x2ac1d: 0xe0000074, 0x2ac1e: 0xe000007c, + 0x2ac20: 0xe000b5b7, 0x2ac21: 0xe000b5c3, 0x2ac22: 0xe000b5cf, 0x2ac23: 0xe000b5f7, + 0x2ac24: 0xe000b5d7, 0x2ac25: 0xe000b5db, 0x2ac26: 0xe000b5bb, 0x2ac27: 0xe000b5c7, + 0x2ac28: 0xe000b5bf, 0x2ac29: 0xe000b5cb, 0x2ac2a: 0xe000b5e3, 0x2ac2b: 0xe000b5ef, + 0x2ac2c: 0xe000b5eb, 0x2ac2d: 0xe000b5e7, 0x2ac2e: 0xe000b627, 0x2ac2f: 0xe000b5d3, + 0x2ac30: 0xe000b5df, 0x2ac31: 0xe000b62b, 0x2ac32: 0xe000b607, 0x2ac33: 0xe000b623, + 0x2ac34: 0xe000b603, 0x2ac35: 0xe000b62f, 0x2ac36: 0xe000b637, 0x2ac37: 0xe000b633, + 0x2ac38: 0xe000b613, 0x2ac39: 0xe000b5f3, 0x2ac3a: 0xe000b61b, 0x2ac3b: 0xe000b61f, + 0x2ac3c: 0xe000b643, 0x2ac3d: 0xe000b5fb, 0x2ac3e: 0xe000b63f, 0x2ac3f: 0xe000b617, + // Block 0xab1, offset 0x2ac40 + 0x2ac40: 0xe000b63b, 0x2ac41: 0xe000b5ff, 0x2ac42: 0xe000b60b, 0x2ac43: 0xe000b60f, + 0x2ac44: 0x2c8e8e83, 0x2ac45: 0x2c08be83, 0x2ac46: 0x2c048483, 0x2ac47: 0x2d326883, + 0x2ac48: 0xe00002e3, 0x2ac49: 0xe00003d8, 0x2ac4a: 0xe00004b3, 0x2ac4b: 0xe000057d, + 0x2ac4c: 0xe0000648, 0x2ac4d: 0xe00006f0, 0x2ac4e: 0xe000079c, 0x2ac4f: 0xe0000841, + 0x2ac50: 0xe0000ec0, 0x2ac51: 0xf0000606, 0x2ac52: 0xf0000606, 0x2ac53: 0xf0000606, + 0x2ac54: 0xf0000606, 0x2ac55: 0xf0000606, 0x2ac56: 0xf0000606, 0x2ac57: 0xf0000606, + 0x2ac58: 0xf0000606, 0x2ac59: 0xf0000606, 0x2ac5a: 0xf0000606, 0x2ac5b: 0xf0000606, + 0x2ac5c: 0xf0000606, 0x2ac5d: 0xf0000606, 0x2ac5e: 0xf0000606, 0x2ac5f: 0xf0000606, + 0x2ac60: 0x0062ac86, 0x2ac61: 0x0062b086, 0x2ac62: 0x0062b286, 0x2ac63: 0x0062b686, + 0x2ac64: 0x0062b886, 0x2ac65: 0x0062ba86, 0x2ac66: 0x0062be86, 0x2ac67: 0x0062c286, + 0x2ac68: 0x0062c486, 0x2ac69: 0x0062c886, 0x2ac6a: 0x0062ca86, 0x2ac6b: 0x0062cc86, + 0x2ac6c: 0x0062ce86, 0x2ac6d: 0x0062d086, 0x2ac6e: 0xf0000606, 0x2ac6f: 0xf0000606, + 0x2ac70: 0xf0000606, 0x2ac71: 0xf0000606, 0x2ac72: 0xf0000606, 0x2ac73: 0xf0000606, + 0x2ac74: 0xf0000606, 0x2ac75: 0xf0000606, 0x2ac76: 0xf0000606, 0x2ac77: 0xf0000606, + 0x2ac78: 0xf0000606, 0x2ac79: 0xf0000606, 0x2ac7a: 0xf0000606, 0x2ac7b: 0xf0000606, + 0x2ac7c: 0xe0002127, 0x2ac7d: 0xe0002122, 0x2ac7e: 0xf0000606, 0x2ac7f: 0x4027ac20, + // Block 0xab2, offset 0x2ac80 + 0x2ac80: 0x2c000284, 0x2ac81: 0x2c007484, 0x2ac82: 0x2c00dc84, 0x2ac83: 0x2c079083, + 0x2ac84: 0x2c028883, 0x2ac85: 0x2c02d883, 0x2ac86: 0x2c003683, 0x2ac87: 0x2c008883, + 0x2ac88: 0x2c006283, 0x2ac89: 0x2c00b683, 0x2ac8a: 0x2c049c84, 0x2ac8b: 0x2c04d083, + 0x2ac8c: 0x2c04c683, 0x2ac8d: 0x2c049e83, 0x2ac8e: 0x2c41dc83, 0x2ac8f: 0x2c018483, + 0x2ac90: 0x2c049683, 0x2ac91: 0x2c741683, 0x2ac92: 0x2c127484, 0x2ac93: 0x2c3cee83, + 0x2ac94: 0x2c0e3e83, 0x2ac95: 0x2c791683, 0x2ac96: 0x2c86f083, 0x2ac97: 0x2c7de083, + 0x2ac98: 0x2c185283, 0x2ac99: 0x2c7e3883, 0x2ac9a: 0x2c24b683, 0x2ac9b: 0x2c019483, + 0x2ac9c: 0x2d6c7483, 0x2ac9d: 0x2d9fc483, 0x2ac9e: 0x2c0db883, 0x2ac9f: 0x2c38fa83, + 0x2aca0: 0x2ce74883, 0x2aca1: 0x2c0bc083, 0x2aca2: 0x2c063e83, 0x2aca3: 0x2c097683, + 0x2aca4: 0x2c00de83, 0x2aca5: 0x2c023684, 0x2aca6: 0x2c00e083, 0x2aca7: 0x2c089284, + 0x2aca8: 0x2c075484, 0x2aca9: 0x2c18a683, 0x2acaa: 0x2c300483, 0x2acab: 0x2c2fd883, + 0x2acac: 0x2d2efa83, 0x2acad: 0x2c0ba083, 0x2acae: 0x2d0f3883, 0x2acaf: 0x2c2bb283, + 0x2acb0: 0x2c2e8e83, 0x2acb1: 0xf0000606, 0x2acb2: 0xf0000606, 0x2acb3: 0xf0000606, + 0x2acb4: 0xf0000606, 0x2acb5: 0xf0000606, 0x2acb6: 0xf0000606, 0x2acb7: 0xf0000606, + 0x2acb8: 0xf0000606, 0x2acb9: 0xf0000606, 0x2acba: 0xf0000606, 0x2acbb: 0xf0000606, + 0x2acbc: 0xf0000606, 0x2acbd: 0xf0000606, 0x2acbe: 0xf0000606, 0x2acbf: 0xf0000606, + // Block 0xab3, offset 0x2acc0 + 0x2acc0: 0xf0000203, 0x2acc1: 0xf0000203, 0x2acc2: 0xf0000203, 0x2acc3: 0xf0000203, + 0x2acc4: 0xf0000203, 0x2acc5: 0xf0000203, 0x2acc6: 0xf0000203, 0x2acc7: 0xf0000203, + 0x2acc8: 0xf0000203, 0x2acc9: 0xe000b66f, 0x2acca: 0xe000b67b, 0x2accb: 0xe000b687, + 0x2accc: 0xf0001c1d, 0x2accd: 0xe0000b85, 0x2acce: 0xf0001d1c, 0x2accf: 0xe0000d14, + 0x2acd0: 0x00657693, 0x2acd1: 0x00657893, 0x2acd2: 0x00657a93, 0x2acd3: 0x00657e93, + 0x2acd4: 0x00658093, 0x2acd5: 0x00658293, 0x2acd6: 0x00658493, 0x2acd7: 0x00658693, + 0x2acd8: 0x00658893, 0x2acd9: 0x00658a93, 0x2acda: 0x00658c93, 0x2acdb: 0x00658e93, + 0x2acdc: 0x00659093, 0x2acdd: 0x00659293, 0x2acde: 0x00659493, 0x2acdf: 0x00659693, + 0x2ace0: 0x00659893, 0x2ace1: 0x00659a93, 0x2ace2: 0x00659c93, 0x2ace3: 0x00659e93, + 0x2ace4: 0x0065a093, 0x2ace5: 0x0065a293, 0x2ace6: 0x0065a493, 0x2ace7: 0x0065a693, + 0x2ace8: 0x0065a893, 0x2ace9: 0x0065aa93, 0x2acea: 0x0065ac93, 0x2aceb: 0x0065ae93, + 0x2acec: 0x0065b093, 0x2aced: 0x0065b293, 0x2acee: 0x0065b493, 0x2acef: 0x0065b693, + 0x2acf0: 0x0065b893, 0x2acf1: 0x0065ba93, 0x2acf2: 0x0065bc93, 0x2acf3: 0x0065be93, + 0x2acf4: 0x0065c093, 0x2acf5: 0x0065c493, 0x2acf6: 0x0065c693, 0x2acf7: 0x0065c893, + 0x2acf8: 0x0065ca93, 0x2acf9: 0x0065cc93, 0x2acfa: 0x0065ce93, 0x2acfb: 0x0065d093, + 0x2acfc: 0x0065d293, 0x2acfd: 0x0065d493, 0x2acfe: 0x0065d693, + // Block 0xab4, offset 0x2ad00 + 0x2ad00: 0xe000230b, 0x2ad01: 0xe00022f8, 0x2ad02: 0xe00022fc, 0x2ad03: 0xe0002311, + 0x2ad04: 0xe0002316, 0x2ad05: 0xe000231d, 0x2ad06: 0xe0002321, 0x2ad07: 0xe0002325, + 0x2ad08: 0xe000232b, 0x2ad09: 0xf0001c1c, 0x2ad0a: 0xe0002330, 0x2ad0b: 0xe000233c, + 0x2ad0c: 0xe0002340, 0x2ad0d: 0xe0002337, 0x2ad0e: 0xe0002346, 0x2ad0f: 0xe000234b, + 0x2ad10: 0xe000234f, 0x2ad11: 0xe0002353, 0x2ad12: 0xf0001c1c, 0x2ad13: 0xe000235e, + 0x2ad14: 0xe0002358, 0x2ad15: 0xf0001c1c, 0x2ad16: 0xe0002363, 0x2ad17: 0xe000236d, + 0x2ad18: 0xf0000203, 0x2ad19: 0xf0000203, 0x2ad1a: 0xf0000203, 0x2ad1b: 0xf0000203, + 0x2ad1c: 0xf0000203, 0x2ad1d: 0xf0000203, 0x2ad1e: 0xf0000203, 0x2ad1f: 0xf0000203, + 0x2ad20: 0xf0000203, 0x2ad21: 0xf0000203, 0x2ad22: 0xe000b673, 0x2ad23: 0xe000b67f, + 0x2ad24: 0xe000b68b, 0x2ad25: 0xe000b693, 0x2ad26: 0xe000b69b, 0x2ad27: 0xe000b6a3, + 0x2ad28: 0xe000b6ab, 0x2ad29: 0xe000b6b3, 0x2ad2a: 0xe000b6bb, 0x2ad2b: 0xe000b6c3, + 0x2ad2c: 0xe000b6cb, 0x2ad2d: 0xe000b6d3, 0x2ad2e: 0xe000b6db, 0x2ad2f: 0xe000b6e3, + 0x2ad30: 0xe000b6eb, 0x2ad31: 0xe0000c1e, 0x2ad32: 0xf0001c1c, 0x2ad33: 0xf0001d1d, + 0x2ad34: 0xe0000a31, 0x2ad35: 0xf0001d1c, 0x2ad36: 0xf0001c1c, 0x2ad37: 0xf0001c1c, + 0x2ad38: 0xe0000ac2, 0x2ad39: 0xe0000ac6, 0x2ad3a: 0xf0001d1d, 0x2ad3b: 0xf0000203, + 0x2ad3c: 0xf0000203, 0x2ad3d: 0xf0000203, 0x2ad3e: 0xf0000203, 0x2ad3f: 0xe000b70b, + // Block 0xab5, offset 0x2ad40 + 0x2ad40: 0xf0001d1c, 0x2ad41: 0xf0001d1d, 0x2ad42: 0xe00009b7, 0x2ad43: 0xf0001c1d, + 0x2ad44: 0xf0001c1c, 0x2ad45: 0xf0001c1c, 0x2ad46: 0xe0000a66, 0x2ad47: 0xe0000a7a, + 0x2ad48: 0xf0001d1c, 0x2ad49: 0xf0001c1d, 0x2ad4a: 0xf0001c1c, 0x2ad4b: 0xf0001d1d, + 0x2ad4c: 0xf0001c1c, 0x2ad4d: 0xf0001d1d, 0x2ad4e: 0xf0001d1d, 0x2ad4f: 0xf0001c1c, + 0x2ad50: 0xf0001c1c, 0x2ad51: 0xf0001c1c, 0x2ad52: 0xe0000d0d, 0x2ad53: 0xf0001c1c, + 0x2ad54: 0xf0001c1c, 0x2ad55: 0xe0000d3a, 0x2ad56: 0xe0000d46, 0x2ad57: 0xf0001d1d, + 0x2ad58: 0xe0000eb0, 0x2ad59: 0xe0000eb8, 0x2ad5a: 0xf0001d1d, 0x2ad5b: 0xf0001c1c, + 0x2ad5c: 0xf0001c1d, 0x2ad5d: 0xf0001c1d, 0x2ad5e: 0xe00010b2, 0x2ad5f: 0xe00009c8, + 0x2ad60: 0xf0000203, 0x2ad61: 0xf0000203, 0x2ad62: 0xf0000203, 0x2ad63: 0xf0000203, + 0x2ad64: 0xf0000203, 0x2ad65: 0xf0000203, 0x2ad66: 0xf0000203, 0x2ad67: 0xf0000203, + 0x2ad68: 0xf0000203, 0x2ad69: 0xe000b66b, 0x2ad6a: 0xe000b677, 0x2ad6b: 0xe000b683, + 0x2ad6c: 0xe000b68f, 0x2ad6d: 0xe000b697, 0x2ad6e: 0xe000b69f, 0x2ad6f: 0xe000b6a7, + 0x2ad70: 0xe000b6af, 0x2ad71: 0xe000b6b7, 0x2ad72: 0xe000b6bf, 0x2ad73: 0xe000b6c7, + 0x2ad74: 0xe000b6cf, 0x2ad75: 0xe000b6d7, 0x2ad76: 0xe000b6df, 0x2ad77: 0xe000b6e7, + 0x2ad78: 0xe000b6ef, 0x2ad79: 0xe000b6f3, 0x2ad7a: 0xe000b6f7, 0x2ad7b: 0xe000b6fb, + 0x2ad7c: 0xe000b6ff, 0x2ad7d: 0xe000b703, 0x2ad7e: 0xe000b707, 0x2ad7f: 0xe0000bdf, + // Block 0xab6, offset 0x2ad80 + 0x2ad80: 0x6c053e20, 0x2ad81: 0x6c0acc20, 0x2ad82: 0x6c0ace20, 0x2ad83: 0x6c00f620, + 0x2ad84: 0x6c00f820, 0x2ad85: 0x6c004e20, 0x2ad86: 0x6c0aee20, 0x2ad87: 0x6c011a20, + 0x2ad88: 0x6c011c20, 0x2ad89: 0x6c011e20, 0x2ad8a: 0x6c025820, 0x2ad8b: 0x6c025a20, + 0x2ad8c: 0x6c059820, 0x2ad8d: 0x6c059a20, 0x2ad8e: 0x6c059c20, 0x2ad8f: 0x6c059e20, + 0x2ad90: 0x6c0b0e20, 0x2ad91: 0x6c0b1020, 0x2ad92: 0x6c0b1220, 0x2ad93: 0x6c0b1420, + 0x2ad94: 0x6c0b1620, 0x2ad95: 0x6c0b1820, 0x2ad96: 0x6c160a20, 0x2ad97: 0x6c160c20, + 0x2ad98: 0x6c160e20, 0x2ad99: 0x6c28d820, 0x2ad9a: 0x6c28da20, 0x2ad9b: 0x6c28dc20, + 0x2ad9c: 0x6c430a20, 0x2ad9d: 0x6c430c20, 0x2ad9e: 0x6c430e20, 0x2ad9f: 0x6c431020, + 0x2ada0: 0x6c431220, 0x2ada1: 0x6c8b0620, 0x2ada2: 0x6c8b0820, 0x2ada3: 0x6c8b0a20, + 0x2ada4: 0x6cb7b020, 0x2ada5: 0x6d75d620, 0x2ada6: 0x6de00620, 0x2ada7: 0x6c027820, + 0x2ada8: 0x6c28f220, 0x2ada9: 0x6c28fa20, 0x2adaa: 0x6c0b5020, 0x2adab: 0x6c0b5220, + 0x2adac: 0x6c163420, 0x2adad: 0x6c290c20, 0x2adae: 0x6ce8e420, 0x2adaf: 0x6d9fa820, + 0x2adb0: 0x6c05b820, 0x2adb1: 0x6c05ba20, 0x2adb2: 0x6c05bc20, 0x2adb3: 0x6c05be20, + 0x2adb4: 0x6c05c020, 0x2adb5: 0x6c05c220, 0x2adb6: 0x6c05c420, 0x2adb7: 0x6c05c620, + 0x2adb8: 0x6c0b6820, 0x2adb9: 0x6c0b6a20, 0x2adba: 0x6c0b6c20, 0x2adbb: 0x6c0b6e20, + 0x2adbc: 0x6c0b7020, 0x2adbd: 0x6c0b7220, 0x2adbe: 0x6c0b7420, 0x2adbf: 0x6c0b7620, + // Block 0xab7, offset 0x2adc0 + 0x2adc0: 0x6c0b7820, 0x2adc1: 0x6c164620, 0x2adc2: 0x6c164820, 0x2adc3: 0x6c164a20, + 0x2adc4: 0x6c164c20, 0x2adc5: 0x6c164e20, 0x2adc6: 0x6c165020, 0x2adc7: 0x6c165220, + 0x2adc8: 0x6c165420, 0x2adc9: 0x6c292220, 0x2adca: 0x6c292420, 0x2adcb: 0x6c292620, + 0x2adcc: 0x6c292820, 0x2adcd: 0x6c292a20, 0x2adce: 0x6c292c20, 0x2adcf: 0x6c292e20, + 0x2add0: 0x6c293020, 0x2add1: 0x6c293220, 0x2add2: 0x6c293420, 0x2add3: 0x6c293620, + 0x2add4: 0x6c293820, 0x2add5: 0x6c293a20, 0x2add6: 0x6c293c20, 0x2add7: 0x6c434620, + 0x2add8: 0x6c434820, 0x2add9: 0x6c434a20, 0x2adda: 0x6c434c20, 0x2addb: 0x6c434e20, + 0x2addc: 0x6c435020, 0x2addd: 0x6c435220, 0x2adde: 0x6c435420, 0x2addf: 0x6c435620, + 0x2ade0: 0x6c435820, 0x2ade1: 0x6c435a20, 0x2ade2: 0x6c435c20, 0x2ade3: 0x6c641a20, + 0x2ade4: 0x6c8b3e20, 0x2ade5: 0x6c641c20, 0x2ade6: 0x6c641e20, 0x2ade7: 0x6c642020, + 0x2ade8: 0x6c642220, 0x2ade9: 0x6c642420, 0x2adea: 0x6c642620, 0x2adeb: 0x6c642820, + 0x2adec: 0x6c642a20, 0x2aded: 0x6c642c20, 0x2adee: 0x6c8b4020, 0x2adef: 0x6c8b4220, + 0x2adf0: 0x6c8b4420, 0x2adf1: 0x6c8b4620, 0x2adf2: 0x6c8b4820, 0x2adf3: 0x6cb7da20, + 0x2adf4: 0x6cb7dc20, 0x2adf5: 0x6cb7de20, 0x2adf6: 0x6cb7e020, 0x2adf7: 0x6cb7e220, + 0x2adf8: 0x6cb7e420, 0x2adf9: 0x6cb7e620, 0x2adfa: 0x6cb7e820, 0x2adfb: 0x6ce8fe20, + 0x2adfc: 0x6ce90020, 0x2adfd: 0x6ce90220, 0x2adfe: 0x6ce90420, 0x2adff: 0x6ce90620, + // Block 0xab8, offset 0x2ae00 + 0x2ae00: 0x6ce90820, 0x2ae01: 0x6ce90a20, 0x2ae02: 0x6d18ae20, 0x2ae03: 0x6d18b020, + 0x2ae04: 0x6d18b220, 0x2ae05: 0x6d18b420, 0x2ae06: 0x6d18b620, 0x2ae07: 0x6d18b820, + 0x2ae08: 0x6d18ba20, 0x2ae09: 0x6d18bc20, 0x2ae0a: 0x6d18be20, 0x2ae0b: 0x6d18c020, + 0x2ae0c: 0x6d18c220, 0x2ae0d: 0x6d18c420, 0x2ae0e: 0x6d18c620, 0x2ae0f: 0x6d18c820, + 0x2ae10: 0x6d18ca20, 0x2ae11: 0x6d47b220, 0x2ae12: 0x6d47b420, 0x2ae13: 0x6d47b620, + 0x2ae14: 0x6d47b820, 0x2ae15: 0x6d47ba20, 0x2ae16: 0x6d47bc20, 0x2ae17: 0x6d47be20, + 0x2ae18: 0x6d47c020, 0x2ae19: 0x6d75f420, 0x2ae1a: 0x6d75f620, 0x2ae1b: 0x6d75f820, + 0x2ae1c: 0x6d75fa20, 0x2ae1d: 0x6d9faa20, 0x2ae1e: 0x6d9fac20, 0x2ae1f: 0x6dc24a20, + 0x2ae20: 0x6dc24c20, 0x2ae21: 0x6de00e20, 0x2ae22: 0x6de01020, 0x2ae23: 0x6de01220, + 0x2ae24: 0x6df86e20, 0x2ae25: 0x6df87020, 0x2ae26: 0x6df87220, 0x2ae27: 0x6e0c3e20, + 0x2ae28: 0x6e0c4020, 0x2ae29: 0x6e284a20, 0x2ae2a: 0x6e3ce220, 0x2ae2b: 0x6c0c4420, + 0x2ae2c: 0x6c2a2c20, 0x2ae2d: 0x6c657020, 0x2ae2e: 0x6c8c6620, 0x2ae2f: 0x6dc28c20, + 0x2ae30: 0x6c061620, 0x2ae31: 0x6c061820, 0x2ae32: 0x6c0c5820, 0x2ae33: 0x6c174e20, + 0x2ae34: 0x6c175020, 0x2ae35: 0x6c175c20, 0x2ae36: 0x6c175e20, 0x2ae37: 0x6c176020, + 0x2ae38: 0x6c447420, 0x2ae39: 0x6df89620, 0x2ae3a: 0x6c2a5c20, 0x2ae3b: 0x6c8c8420, + 0x2ae3c: 0x6c8c8620, 0x2ae3d: 0x6cb8f220, 0x2ae3e: 0x6cea0820, 0x2ae3f: 0x6e1c1c20, + // Block 0xab9, offset 0x2ae40 + 0x2ae40: 0x6c02fa20, 0x2ae41: 0x6c02fc20, 0x2ae42: 0x6c449020, 0x2ae43: 0x6cb8fc20, + 0x2ae44: 0x6d487620, 0x2ae45: 0x6c030620, 0x2ae46: 0x6c0c9820, 0x2ae47: 0x6c0c9a20, + 0x2ae48: 0x6c178e20, 0x2ae49: 0x6c2a7420, 0x2ae4a: 0x6c2a7620, 0x2ae4b: 0x6c2a7820, + 0x2ae4c: 0x6c2a7a20, 0x2ae4d: 0x6c2a7c20, 0x2ae4e: 0x6c44a020, 0x2ae4f: 0x6c44a220, + 0x2ae50: 0x6c65c220, 0x2ae51: 0x6c65c420, 0x2ae52: 0x6c65c620, 0x2ae53: 0x6c8c9620, + 0x2ae54: 0x6cb90c20, 0x2ae55: 0x6cb90e20, 0x2ae56: 0x6cea1220, 0x2ae57: 0x6d19ea20, + 0x2ae58: 0x6c8cbe20, 0x2ae59: 0x6c0cd220, 0x2ae5a: 0x6c067c20, 0x2ae5b: 0x6c067e20, + 0x2ae5c: 0x6c068020, 0x2ae5d: 0x6c0ce620, 0x2ae5e: 0x6c0ce820, 0x2ae5f: 0x6c17da20, + 0x2ae60: 0x6c17dc20, 0x2ae61: 0x6c2abc20, 0x2ae62: 0x6c2abe20, 0x2ae63: 0x6c2ac020, + 0x2ae64: 0x6c2ac220, 0x2ae65: 0x6c2ac420, 0x2ae66: 0x6c2ac620, 0x2ae67: 0x6c44e020, + 0x2ae68: 0x6c44e220, 0x2ae69: 0x6c44e420, 0x2ae6a: 0x6c44e620, 0x2ae6b: 0x6c44e820, + 0x2ae6c: 0x6c661220, 0x2ae6d: 0x6c661420, 0x2ae6e: 0x6c661620, 0x2ae6f: 0x6c661820, + 0x2ae70: 0x6c661a20, 0x2ae71: 0x6c8cd820, 0x2ae72: 0x6c8cda20, 0x2ae73: 0x6c8cdc20, + 0x2ae74: 0x6c8cde20, 0x2ae75: 0x6c8ce020, 0x2ae76: 0x6c8ce220, 0x2ae77: 0x6cb94620, + 0x2ae78: 0x6cb94820, 0x2ae79: 0x6cb94a20, 0x2ae7a: 0x6cb94c20, 0x2ae7b: 0x6cb94e20, + 0x2ae7c: 0x6cea3c20, 0x2ae7d: 0x6cea3e20, 0x2ae7e: 0x6d1a0e20, 0x2ae7f: 0x6d1a1020, + // Block 0xaba, offset 0x2ae80 + 0x2ae80: 0x6d1a1220, 0x2ae81: 0x6d1a1420, 0x2ae82: 0x6d1a1620, 0x2ae83: 0x6d1a1820, + 0x2ae84: 0x6d1a1a20, 0x2ae85: 0x6d1a1c20, 0x2ae86: 0x6d1a1e20, 0x2ae87: 0x6d1a2020, + 0x2ae88: 0x6d1a2220, 0x2ae89: 0x6d1a2420, 0x2ae8a: 0x6d489620, 0x2ae8b: 0x6d76a420, + 0x2ae8c: 0x6d76a620, 0x2ae8d: 0x6d76a820, 0x2ae8e: 0x6da03020, 0x2ae8f: 0x6da03220, + 0x2ae90: 0x6dc2b620, 0x2ae91: 0x6de05620, 0x2ae92: 0x6df8a620, 0x2ae93: 0x6c06a020, + 0x2ae94: 0x6c0d3a20, 0x2ae95: 0x6c0d3c20, 0x2ae96: 0x6c0d3e20, 0x2ae97: 0x6c183820, + 0x2ae98: 0x6c183a20, 0x2ae99: 0x6c2b4c20, 0x2ae9a: 0x6c2b4e20, 0x2ae9b: 0x6c2b5020, + 0x2ae9c: 0x6c454e20, 0x2ae9d: 0x6c66a620, 0x2ae9e: 0x6c66a820, 0x2ae9f: 0x6c66aa20, + 0x2aea0: 0x6c8d4220, 0x2aea1: 0x6cb9aa20, 0x2aea2: 0x6d1a7620, 0x2aea3: 0x6da05420, + 0x2aea4: 0x6da05620, 0x2aea5: 0x6da05820, 0x2aea6: 0x6da05a20, 0x2aea7: 0x6dc2c420, + 0x2aea8: 0x6c8d6a20, 0x2aea9: 0x6cb9d420, 0x2aeaa: 0x6ceac220, 0x2aeab: 0x6c035820, + 0x2aeac: 0x6c2b9a20, 0x2aead: 0x6c8d8020, 0x2aeae: 0x6e123e20, 0x2aeaf: 0x6c188c20, + 0x2aeb0: 0x6c188e20, 0x2aeb1: 0x6c8d8620, 0x2aeb2: 0x6cead220, 0x2aeb3: 0x6cead420, + 0x2aeb4: 0x6cead620, 0x2aeb5: 0x6d1aba20, 0x2aeb6: 0x6e3cf020, 0x2aeb7: 0x6c18a420, + 0x2aeb8: 0x6cb9f020, 0x2aeb9: 0x6c036620, 0x2aeba: 0x6c0d8020, 0x2aebb: 0x6c0d8220, + 0x2aebc: 0x6ceae020, 0x2aebd: 0x6c2bd420, 0x2aebe: 0x6c016e20, 0x2aebf: 0x6c017020, + // Block 0xabb, offset 0x2aec0 + 0x2aec0: 0x6c18d020, 0x2aec1: 0x6c2bf220, 0x2aec2: 0x6c0dc820, 0x2aec3: 0x6c0dca20, + 0x2aec4: 0x6c0dcc20, 0x2aec5: 0x6c18dc20, 0x2aec6: 0x6c18de20, 0x2aec7: 0x6c18e020, + 0x2aec8: 0x6c2c0020, 0x2aec9: 0x6c2c0220, 0x2aeca: 0x6c45f620, 0x2aecb: 0x6c673220, + 0x2aecc: 0x6c673420, 0x2aecd: 0x6c673620, 0x2aece: 0x6cba0a20, 0x2aecf: 0x6ceb0220, + 0x2aed0: 0x6d1adc20, 0x2aed1: 0x6d1ade20, 0x2aed2: 0x6d491820, 0x2aed3: 0x6da08620, + 0x2aed4: 0x6e319620, 0x2aed5: 0x6c039020, 0x2aed6: 0x6c677020, 0x2aed7: 0x6c8de220, + 0x2aed8: 0x6c8de420, 0x2aed9: 0x6d493a20, 0x2aeda: 0x6c039c20, 0x2aedb: 0x6c039e20, + 0x2aedc: 0x6c0e0620, 0x2aedd: 0x6c190c20, 0x2aede: 0x6c2c3a20, 0x2aedf: 0x6c463e20, + 0x2aee0: 0x6cba4220, 0x2aee1: 0x6d1b2020, 0x2aee2: 0x6d3d7420, 0x2aee3: 0x6c073020, + 0x2aee4: 0x6c073220, 0x2aee5: 0x6c073420, 0x2aee6: 0x6c0e1c20, 0x2aee7: 0x6c0e1e20, + 0x2aee8: 0x6c0e2020, 0x2aee9: 0x6c192220, 0x2aeea: 0x6c192420, 0x2aeeb: 0x6c192620, + 0x2aeec: 0x6c192820, 0x2aeed: 0x6c192a20, 0x2aeee: 0x6c192c20, 0x2aeef: 0x6c192e20, + 0x2aef0: 0x6c193020, 0x2aef1: 0x6c193220, 0x2aef2: 0x6c193420, 0x2aef3: 0x6c193620, + 0x2aef4: 0x6c193820, 0x2aef5: 0x6c193a20, 0x2aef6: 0x6c193c20, 0x2aef7: 0x6c2c5620, + 0x2aef8: 0x6c2c5820, 0x2aef9: 0x6c2c5a20, 0x2aefa: 0x6c2c5c20, 0x2aefb: 0x6c2c5e20, + 0x2aefc: 0x6c2c6020, 0x2aefd: 0x6c2c6220, 0x2aefe: 0x6c2c6420, 0x2aeff: 0x6c2c6620, + // Block 0xabc, offset 0x2af00 + 0x2af00: 0x6c466820, 0x2af01: 0x6c466a20, 0x2af02: 0x6c466c20, 0x2af03: 0x6c466e20, + 0x2af04: 0x6c467020, 0x2af05: 0x6c467220, 0x2af06: 0x6c467420, 0x2af07: 0x6c467620, + 0x2af08: 0x6c467820, 0x2af09: 0x6c467a20, 0x2af0a: 0x6c467c20, 0x2af0b: 0x6c467e20, + 0x2af0c: 0x6c468020, 0x2af0d: 0x6c468220, 0x2af0e: 0x6c468420, 0x2af0f: 0x6c679a20, + 0x2af10: 0x6c679c20, 0x2af11: 0x6c679e20, 0x2af12: 0x6c67a020, 0x2af13: 0x6c67a220, + 0x2af14: 0x6c67a420, 0x2af15: 0x6c67a620, 0x2af16: 0x6c67a820, 0x2af17: 0x6c67aa20, + 0x2af18: 0x6c67ac20, 0x2af19: 0x6c67ae20, 0x2af1a: 0x6c67b020, 0x2af1b: 0x6c67b220, + 0x2af1c: 0x6c67b420, 0x2af1d: 0x6c67b620, 0x2af1e: 0x6c67b820, 0x2af1f: 0x6c8e1220, + 0x2af20: 0x6c8e1420, 0x2af21: 0x6c8e1620, 0x2af22: 0x6c8e1820, 0x2af23: 0x6c8e1a20, + 0x2af24: 0x6c8e1c20, 0x2af25: 0x6c8e1e20, 0x2af26: 0x6c8e2020, 0x2af27: 0x6c8e2220, + 0x2af28: 0x6c8e2420, 0x2af29: 0x6c8e2620, 0x2af2a: 0x6c8e2820, 0x2af2b: 0x6c8e2a20, + 0x2af2c: 0x6c8e2c20, 0x2af2d: 0x6c8e2e20, 0x2af2e: 0x6c8e3020, 0x2af2f: 0x6c8e3220, + 0x2af30: 0x6c8e3420, 0x2af31: 0x6c8e3620, 0x2af32: 0x6c8e3820, 0x2af33: 0x6c8e3a20, + 0x2af34: 0x6c8e3c20, 0x2af35: 0x6c8e3e20, 0x2af36: 0x6cba5c20, 0x2af37: 0x6cba5e20, + 0x2af38: 0x6cba6020, 0x2af39: 0x6cba6220, 0x2af3a: 0x6cba6420, 0x2af3b: 0x6cba6620, + 0x2af3c: 0x6cba6820, 0x2af3d: 0x6cba6a20, 0x2af3e: 0x6cba6c20, 0x2af3f: 0x6cba6e20, + // Block 0xabd, offset 0x2af40 + 0x2af40: 0x6cba7020, 0x2af41: 0x6cba7220, 0x2af42: 0x6cba7420, 0x2af43: 0x6cba7620, + 0x2af44: 0x6cba7820, 0x2af45: 0x6cba7a20, 0x2af46: 0x6cba7c20, 0x2af47: 0x6cba7e20, + 0x2af48: 0x6cba8020, 0x2af49: 0x6cba8220, 0x2af4a: 0x6cba8420, 0x2af4b: 0x6cba8620, + 0x2af4c: 0x6cba8820, 0x2af4d: 0x6cba8a20, 0x2af4e: 0x6cba8c20, 0x2af4f: 0x6cba8e20, + 0x2af50: 0x6cba9020, 0x2af51: 0x6cba9220, 0x2af52: 0x6ceb4e20, 0x2af53: 0x6ceb5020, + 0x2af54: 0x6ceb5220, 0x2af55: 0x6ceb5420, 0x2af56: 0x6ceb5620, 0x2af57: 0x6ceb5820, + 0x2af58: 0x6ceb5a20, 0x2af59: 0x6ceb5c20, 0x2af5a: 0x6ceb5e20, 0x2af5b: 0x6ceb6020, + 0x2af5c: 0x6ceb6220, 0x2af5d: 0x6ceb6420, 0x2af5e: 0x6ceb6620, 0x2af5f: 0x6ceb6820, + 0x2af60: 0x6ceb6a20, 0x2af61: 0x6ceb6c20, 0x2af62: 0x6d1b3420, 0x2af63: 0x6d1b3620, + 0x2af64: 0x6d1b3820, 0x2af65: 0x6d1b3a20, 0x2af66: 0x6d1b3c20, 0x2af67: 0x6d1b3e20, + 0x2af68: 0x6d1b4020, 0x2af69: 0x6d1b4220, 0x2af6a: 0x6d1b4420, 0x2af6b: 0x6d1b4620, + 0x2af6c: 0x6d1b4820, 0x2af6d: 0x6d1b4a20, 0x2af6e: 0x6d1b4c20, 0x2af6f: 0x6d1b4e20, + 0x2af70: 0x6d1b5020, 0x2af71: 0x6d494e20, 0x2af72: 0x6d495020, 0x2af73: 0x6d495220, + 0x2af74: 0x6d495420, 0x2af75: 0x6d495620, 0x2af76: 0x6d495820, 0x2af77: 0x6d495a20, + 0x2af78: 0x6d495c20, 0x2af79: 0x6d495e20, 0x2af7a: 0x6d496020, 0x2af7b: 0x6d770e20, + 0x2af7c: 0x6d771020, 0x2af7d: 0x6d771220, 0x2af7e: 0x6d771420, 0x2af7f: 0x6d771620, + // Block 0xabe, offset 0x2af80 + 0x2af80: 0x6d771820, 0x2af81: 0x6d771a20, 0x2af82: 0x6d771c20, 0x2af83: 0x6d771e20, + 0x2af84: 0x6d772020, 0x2af85: 0x6da09a20, 0x2af86: 0x6da09c20, 0x2af87: 0x6da09e20, + 0x2af88: 0x6da0a020, 0x2af89: 0x6dc2fa20, 0x2af8a: 0x6dc2fc20, 0x2af8b: 0x6dc2fe20, + 0x2af8c: 0x6dc30020, 0x2af8d: 0x6dc30220, 0x2af8e: 0x6dc30420, 0x2af8f: 0x6dc30620, + 0x2af90: 0x6de07e20, 0x2af91: 0x6de08020, 0x2af92: 0x6de08220, 0x2af93: 0x6df8cc20, + 0x2af94: 0x6df8ce20, 0x2af95: 0x6e0c9220, 0x2af96: 0x6e0c9420, 0x2af97: 0x6e0c9620, + 0x2af98: 0x6e1c2e20, 0x2af99: 0x6e287220, 0x2af9a: 0x6e287420, 0x2af9b: 0x6e384620, + 0x2af9c: 0x6e3cf820, 0x2af9d: 0x6c078820, 0x2af9e: 0x6c06a220, 0x2af9f: 0x6c0e9620, + 0x2afa0: 0x6c2d7e20, 0x2afa1: 0x6c2d8020, 0x2afa2: 0x6c47dc20, 0x2afa3: 0x6c694e20, + 0x2afa4: 0x6d1cf020, 0x2afa5: 0x6df92a20, 0x2afa6: 0x6c07a020, 0x2afa7: 0x6c1a9820, + 0x2afa8: 0x6c1a9a20, 0x2afa9: 0x6c1a9c20, 0x2afaa: 0x6c1a9e20, 0x2afab: 0x6c1aa020, + 0x2afac: 0x6c1aa220, 0x2afad: 0x6c1aa420, 0x2afae: 0x6c1aa620, 0x2afaf: 0x6c1aa820, + 0x2afb0: 0x6c1aaa20, 0x2afb1: 0x6c2daa20, 0x2afb2: 0x6c2dac20, 0x2afb3: 0x6c2dae20, + 0x2afb4: 0x6c2db020, 0x2afb5: 0x6c2db220, 0x2afb6: 0x6c480020, 0x2afb7: 0x6c480220, + 0x2afb8: 0x6c480420, 0x2afb9: 0x6c480620, 0x2afba: 0x6c480820, 0x2afbb: 0x6c480a20, + 0x2afbc: 0x6c480c20, 0x2afbd: 0x6c480e20, 0x2afbe: 0x6c481020, 0x2afbf: 0x6c697e20, + // Block 0xabf, offset 0x2afc0 + 0x2afc0: 0x6c698020, 0x2afc1: 0x6c698220, 0x2afc2: 0x6c698420, 0x2afc3: 0x6c698620, + 0x2afc4: 0x6c698820, 0x2afc5: 0x6c698a20, 0x2afc6: 0x6c698c20, 0x2afc7: 0x6c904620, + 0x2afc8: 0x6c904820, 0x2afc9: 0x6c904a20, 0x2afca: 0x6c904c20, 0x2afcb: 0x6c904e20, + 0x2afcc: 0x6c905020, 0x2afcd: 0x6c905220, 0x2afce: 0x6cbc6420, 0x2afcf: 0x6cbc6620, + 0x2afd0: 0x6cbc6820, 0x2afd1: 0x6cbc6a20, 0x2afd2: 0x6cbc6c20, 0x2afd3: 0x6cbc6e20, + 0x2afd4: 0x6cbc7020, 0x2afd5: 0x6cbc7220, 0x2afd6: 0x6cbc7420, 0x2afd7: 0x6cbc7620, + 0x2afd8: 0x6cbc7820, 0x2afd9: 0x6ced4a20, 0x2afda: 0x6ced4c20, 0x2afdb: 0x6ced4e20, + 0x2afdc: 0x6ced5020, 0x2afdd: 0x6ced5220, 0x2afde: 0x6ced5420, 0x2afdf: 0x6ced5620, + 0x2afe0: 0x6d1d1620, 0x2afe1: 0x6d1d1820, 0x2afe2: 0x6d1d1a20, 0x2afe3: 0x6d1d1c20, + 0x2afe4: 0x6d1d1e20, 0x2afe5: 0x6d1d2020, 0x2afe6: 0x6d1d2220, 0x2afe7: 0x6d4ac820, + 0x2afe8: 0x6d4aca20, 0x2afe9: 0x6d4acc20, 0x2afea: 0x6d4ace20, 0x2afeb: 0x6d4ad020, + 0x2afec: 0x6d4ad220, 0x2afed: 0x6d4ad420, 0x2afee: 0x6d4ad620, 0x2afef: 0x6d4ad820, + 0x2aff0: 0x6d786620, 0x2aff1: 0x6d786820, 0x2aff2: 0x6d786a20, 0x2aff3: 0x6d786c20, + 0x2aff4: 0x6d786e20, 0x2aff5: 0x6d787020, 0x2aff6: 0x6d787220, 0x2aff7: 0x6da18820, + 0x2aff8: 0x6da18a20, 0x2aff9: 0x6da18c20, 0x2affa: 0x6da18e20, 0x2affb: 0x6dc3e020, + 0x2affc: 0x6dc3e220, 0x2affd: 0x6dc3e420, 0x2affe: 0x6de10220, 0x2afff: 0x6de10420, + // Block 0xac0, offset 0x2b000 + 0x2b000: 0x6df93220, 0x2b001: 0x6e31c220, 0x2b002: 0x6e385e20, 0x2b003: 0x6cbd8620, + 0x2b004: 0x6d4ba020, 0x2b005: 0x6c48f020, 0x2b006: 0x6c48f420, 0x2b007: 0x6c48f620, + 0x2b008: 0x6c07ce20, 0x2b009: 0x6c2e8c20, 0x2b00a: 0x6cbd9820, 0x2b00b: 0x6d1e0c20, + 0x2b00c: 0x6d1e0e20, 0x2b00d: 0x6dc44620, 0x2b00e: 0x6c07dc20, 0x2b00f: 0x6c0f2c20, + 0x2b010: 0x6c0f2e20, 0x2b011: 0x6c0f3020, 0x2b012: 0x6c1b8a20, 0x2b013: 0x6c1b8c20, + 0x2b014: 0x6c2e9a20, 0x2b015: 0x6c2e9c20, 0x2b016: 0x6c2e9e20, 0x2b017: 0x6c2ea020, + 0x2b018: 0x6c2ea220, 0x2b019: 0x6c2ea420, 0x2b01a: 0x6c490220, 0x2b01b: 0x6c490420, + 0x2b01c: 0x6c919820, 0x2b01d: 0x6c919a20, 0x2b01e: 0x6c919c20, 0x2b01f: 0x6cbdb620, + 0x2b020: 0x6cee7620, 0x2b021: 0x6d791c20, 0x2b022: 0x6c07fc20, 0x2b023: 0x6c0f5620, + 0x2b024: 0x6c0f5820, 0x2b025: 0x6c0f5a20, 0x2b026: 0x6c0f5c20, 0x2b027: 0x6c0f5e20, + 0x2b028: 0x6c0f6020, 0x2b029: 0x6c1bc420, 0x2b02a: 0x6c1bc620, 0x2b02b: 0x6c1bc820, + 0x2b02c: 0x6c1bca20, 0x2b02d: 0x6c1bcc20, 0x2b02e: 0x6c1bce20, 0x2b02f: 0x6c1bd020, + 0x2b030: 0x6c2ef420, 0x2b031: 0x6c2ef620, 0x2b032: 0x6c2ef820, 0x2b033: 0x6c2efa20, + 0x2b034: 0x6c2efc20, 0x2b035: 0x6c2efe20, 0x2b036: 0x6c2f0020, 0x2b037: 0x6c2f0220, + 0x2b038: 0x6c2f0420, 0x2b039: 0x6c2f0620, 0x2b03a: 0x6c2f0820, 0x2b03b: 0x6c2f0a20, + 0x2b03c: 0x6c2f0c20, 0x2b03d: 0x6c2f0e20, 0x2b03e: 0x6c2f1020, 0x2b03f: 0x6c2f1220, + // Block 0xac1, offset 0x2b040 + 0x2b040: 0x6c2f1420, 0x2b041: 0x6c2f1620, 0x2b042: 0x6c493e20, 0x2b043: 0x6c494020, + 0x2b044: 0x6c494220, 0x2b045: 0x6c494420, 0x2b046: 0x6c494620, 0x2b047: 0x6c494820, + 0x2b048: 0x6c494a20, 0x2b049: 0x6c494c20, 0x2b04a: 0x6c494e20, 0x2b04b: 0x6c495020, + 0x2b04c: 0x6c495220, 0x2b04d: 0x6c6aea20, 0x2b04e: 0x6c6aec20, 0x2b04f: 0x6c6aee20, + 0x2b050: 0x6c6af020, 0x2b051: 0x6c6af220, 0x2b052: 0x6c6af420, 0x2b053: 0x6c6af620, + 0x2b054: 0x6c6af820, 0x2b055: 0x6c6afa20, 0x2b056: 0x6c6afc20, 0x2b057: 0x6c6afe20, + 0x2b058: 0x6c6b0020, 0x2b059: 0x6c6b0220, 0x2b05a: 0x6c6b0420, 0x2b05b: 0x6c6b0620, + 0x2b05c: 0x6c6b0820, 0x2b05d: 0x6c6b0a20, 0x2b05e: 0x6c6b0c20, 0x2b05f: 0x6c6b0e20, + 0x2b060: 0x6c1bd220, 0x2b061: 0x6c6b1020, 0x2b062: 0x6c6b1220, 0x2b063: 0x6c6b1420, + 0x2b064: 0x6c6b1620, 0x2b065: 0x6c91da20, 0x2b066: 0x6c91dc20, 0x2b067: 0x6c91de20, + 0x2b068: 0x6c91e020, 0x2b069: 0x6c91e220, 0x2b06a: 0x6c91e420, 0x2b06b: 0x6c91e620, + 0x2b06c: 0x6c91e820, 0x2b06d: 0x6c91ea20, 0x2b06e: 0x6cbdf220, 0x2b06f: 0x6cbdf420, + 0x2b070: 0x6cbdf620, 0x2b071: 0x6cbdf820, 0x2b072: 0x6cbdfa20, 0x2b073: 0x6cbdfc20, + 0x2b074: 0x6cbdfe20, 0x2b075: 0x6cbe0020, 0x2b076: 0x6cbe0220, 0x2b077: 0x6cbe0420, + 0x2b078: 0x6cbe0620, 0x2b079: 0x6cbe0820, 0x2b07a: 0x6cbe0a20, 0x2b07b: 0x6cbe0c20, + 0x2b07c: 0x6cbe0e20, 0x2b07d: 0x6cbe1020, 0x2b07e: 0x6cbe1220, 0x2b07f: 0x6cbe1420, + // Block 0xac2, offset 0x2b080 + 0x2b080: 0x6cbe1620, 0x2b081: 0x6cbe1820, 0x2b082: 0x6cbe1a20, 0x2b083: 0x6cbe1c20, + 0x2b084: 0x6cbe1e20, 0x2b085: 0x6ceea620, 0x2b086: 0x6ceea820, 0x2b087: 0x6ceeaa20, + 0x2b088: 0x6ceeac20, 0x2b089: 0x6ceeae20, 0x2b08a: 0x6ceeb020, 0x2b08b: 0x6ceeb220, + 0x2b08c: 0x6ceeb420, 0x2b08d: 0x6ceeb620, 0x2b08e: 0x6ceeb820, 0x2b08f: 0x6ceeba20, + 0x2b090: 0x6ceebc20, 0x2b091: 0x6ceebe20, 0x2b092: 0x6ceec020, 0x2b093: 0x6ceec220, + 0x2b094: 0x6ceec420, 0x2b095: 0x6d1e5220, 0x2b096: 0x6d1e5420, 0x2b097: 0x6d1e5620, + 0x2b098: 0x6d1e5820, 0x2b099: 0x6d1e5a20, 0x2b09a: 0x6d1e5c20, 0x2b09b: 0x6d1e5e20, + 0x2b09c: 0x6d1e6020, 0x2b09d: 0x6d1e6220, 0x2b09e: 0x6d1e6420, 0x2b09f: 0x6d1e6620, + 0x2b0a0: 0x6d1e6820, 0x2b0a1: 0x6d1e6a20, 0x2b0a2: 0x6d1e6c20, 0x2b0a3: 0x6d4bde20, + 0x2b0a4: 0x6d4be020, 0x2b0a5: 0x6d4be220, 0x2b0a6: 0x6d4be420, 0x2b0a7: 0x6d4be620, + 0x2b0a8: 0x6d4be820, 0x2b0a9: 0x6d793820, 0x2b0aa: 0x6d793a20, 0x2b0ab: 0x6d793c20, + 0x2b0ac: 0x6d793e20, 0x2b0ad: 0x6d794020, 0x2b0ae: 0x6da22220, 0x2b0af: 0x6da22420, + 0x2b0b0: 0x6dc45420, 0x2b0b1: 0x6dc45620, 0x2b0b2: 0x6de15a20, 0x2b0b3: 0x6de15c20, + 0x2b0b4: 0x6de15e20, 0x2b0b5: 0x6de16020, 0x2b0b6: 0x6df95c20, 0x2b0b7: 0x6df95e20, + 0x2b0b8: 0x6df96020, 0x2b0b9: 0x6e0d2820, 0x2b0ba: 0x6e1c9820, 0x2b0bb: 0x6e3d1620, + 0x2b0bc: 0x6e3d1820, 0x2b0bd: 0x6c0fa620, 0x2b0be: 0x6c1c6220, 0x2b0bf: 0x6c1c6420, + // Block 0xac3, offset 0x2b0c0 + 0x2b0c0: 0x6c2fc820, 0x2b0c1: 0x6c4a1c20, 0x2b0c2: 0x6c6bdc20, 0x2b0c3: 0x6c6bde20, + 0x2b0c4: 0x6cbf4220, 0x2b0c5: 0x6cef7820, 0x2b0c6: 0x6d4cb620, 0x2b0c7: 0x6d79e020, + 0x2b0c8: 0x6e386820, 0x2b0c9: 0x6c03f620, 0x2b0ca: 0x6c081e20, 0x2b0cb: 0x6c082020, + 0x2b0cc: 0x6c0fb820, 0x2b0cd: 0x6c0fba20, 0x2b0ce: 0x6c1c8620, 0x2b0cf: 0x6c1c8820, + 0x2b0d0: 0x6c1c8a20, 0x2b0d1: 0x6c1c8c20, 0x2b0d2: 0x6c2ffa20, 0x2b0d3: 0x6c4a4020, + 0x2b0d4: 0x6c4a4220, 0x2b0d5: 0x6c4a4420, 0x2b0d6: 0x6c4a4620, 0x2b0d7: 0x6c6bf620, + 0x2b0d8: 0x6c6bf820, 0x2b0d9: 0x6c6bfa20, 0x2b0da: 0x6c6bfc20, 0x2b0db: 0x6c932220, + 0x2b0dc: 0x6c932420, 0x2b0dd: 0x6c932620, 0x2b0de: 0x6c932820, 0x2b0df: 0x6c932a20, + 0x2b0e0: 0x6c932c20, 0x2b0e1: 0x6c932e20, 0x2b0e2: 0x6cbf6420, 0x2b0e3: 0x6cbf6620, + 0x2b0e4: 0x6cef9a20, 0x2b0e5: 0x6cef9c20, 0x2b0e6: 0x6cef9e20, 0x2b0e7: 0x6cefa020, + 0x2b0e8: 0x6cefa220, 0x2b0e9: 0x6d1f3c20, 0x2b0ea: 0x6d1f3e20, 0x2b0eb: 0x6d1f4020, + 0x2b0ec: 0x6d1f4220, 0x2b0ed: 0x6d4cc820, 0x2b0ee: 0x6d4cca20, 0x2b0ef: 0x6d4ccc20, + 0x2b0f0: 0x6dc49420, 0x2b0f1: 0x6e0d4620, 0x2b0f2: 0x6e3d1a20, 0x2b0f3: 0x6c083020, + 0x2b0f4: 0x6c1cbc20, 0x2b0f5: 0x6c304420, 0x2b0f6: 0x6c6c7220, 0x2b0f7: 0x6cbfd420, + 0x2b0f8: 0x6c6c7c20, 0x2b0f9: 0x6cbfea20, 0x2b0fa: 0x6d1fba20, 0x2b0fb: 0x6d4d3820, + 0x2b0fc: 0x6c0ffa20, 0x2b0fd: 0x6c1cd620, 0x2b0fe: 0x6c306a20, 0x2b0ff: 0x6c306c20, + // Block 0xac4, offset 0x2b100 + 0x2b100: 0x6c4aba20, 0x2b101: 0x6c4abc20, 0x2b102: 0x6c6c9420, 0x2b103: 0x6c93b820, + 0x2b104: 0x6c93ba20, 0x2b105: 0x6c93bc20, 0x2b106: 0x6c93be20, 0x2b107: 0x6cc00220, + 0x2b108: 0x6cc00420, 0x2b109: 0x6cf01220, 0x2b10a: 0x6cf01420, 0x2b10b: 0x6c085020, + 0x2b10c: 0x6c100a20, 0x2b10d: 0x6c100c20, 0x2b10e: 0x6c1cf820, 0x2b10f: 0x6c308020, + 0x2b110: 0x6c308220, 0x2b111: 0x6c308420, 0x2b112: 0x6c4acc20, 0x2b113: 0x6c4ace20, + 0x2b114: 0x6c4ad020, 0x2b115: 0x6c4ad220, 0x2b116: 0x6c4ad420, 0x2b117: 0x6c6cac20, + 0x2b118: 0x6c93cc20, 0x2b119: 0x6c93ce20, 0x2b11a: 0x6cc02020, 0x2b11b: 0x6cc02220, + 0x2b11c: 0x6d1fda20, 0x2b11d: 0x6d1fdc20, 0x2b11e: 0x6d1fde20, 0x2b11f: 0x6d4d5e20, + 0x2b120: 0x6d4d6020, 0x2b121: 0x6de1be20, 0x2b122: 0x6c040c20, 0x2b123: 0x6c1d1e20, + 0x2b124: 0x6c086420, 0x2b125: 0x6c086620, 0x2b126: 0x6c086820, 0x2b127: 0x6c086a20, + 0x2b128: 0x6c103620, 0x2b129: 0x6c103820, 0x2b12a: 0x6c103a20, 0x2b12b: 0x6c103c20, + 0x2b12c: 0x6c103e20, 0x2b12d: 0x6c104020, 0x2b12e: 0x6c104220, 0x2b12f: 0x6c104420, + 0x2b130: 0x6c1d2c20, 0x2b131: 0x6c1d2e20, 0x2b132: 0x6c1d3020, 0x2b133: 0x6c1d3220, + 0x2b134: 0x6c1d3420, 0x2b135: 0x6c1d3620, 0x2b136: 0x6c1d3820, 0x2b137: 0x6c1d2020, + 0x2b138: 0x6c1d3a20, 0x2b139: 0x6c30b820, 0x2b13a: 0x6c30ba20, 0x2b13b: 0x6c30bc20, + 0x2b13c: 0x6c30be20, 0x2b13d: 0x6c30c020, 0x2b13e: 0x6c30c220, 0x2b13f: 0x6c30c420, + // Block 0xac5, offset 0x2b140 + 0x2b140: 0x6c30c620, 0x2b141: 0x6c30c820, 0x2b142: 0x6c30ca20, 0x2b143: 0x6c30cc20, + 0x2b144: 0x6c4b2020, 0x2b145: 0x6c4b2220, 0x2b146: 0x6c4b2420, 0x2b147: 0x6c6d0020, + 0x2b148: 0x6c6d0220, 0x2b149: 0x6c6d0420, 0x2b14a: 0x6c6d0620, 0x2b14b: 0x6c6d0820, + 0x2b14c: 0x6c6d0a20, 0x2b14d: 0x6c6d0c20, 0x2b14e: 0x6c6d0e20, 0x2b14f: 0x6c6d1020, + 0x2b150: 0x6c6d1220, 0x2b151: 0x6c6d1420, 0x2b152: 0x6c6d1620, 0x2b153: 0x6c6d1820, + 0x2b154: 0x6c6d1a20, 0x2b155: 0x6c6d1c20, 0x2b156: 0x6c6d1e20, 0x2b157: 0x6c941620, + 0x2b158: 0x6c941820, 0x2b159: 0x6c941a20, 0x2b15a: 0x6c941c20, 0x2b15b: 0x6c941e20, + 0x2b15c: 0x6c942020, 0x2b15d: 0x6c942220, 0x2b15e: 0x6c942420, 0x2b15f: 0x6c942620, + 0x2b160: 0x6c942820, 0x2b161: 0x6c942a20, 0x2b162: 0x6c942c20, 0x2b163: 0x6c942e20, + 0x2b164: 0x6c943020, 0x2b165: 0x6c943220, 0x2b166: 0x6cc07020, 0x2b167: 0x6cc07220, + 0x2b168: 0x6cc07420, 0x2b169: 0x6cc07620, 0x2b16a: 0x6cc07820, 0x2b16b: 0x6cc07a20, + 0x2b16c: 0x6cc07c20, 0x2b16d: 0x6cc07e20, 0x2b16e: 0x6cc08020, 0x2b16f: 0x6cc08220, + 0x2b170: 0x6cf06820, 0x2b171: 0x6cf06a20, 0x2b172: 0x6cf06c20, 0x2b173: 0x6cf06e20, + 0x2b174: 0x6cf07020, 0x2b175: 0x6cf07220, 0x2b176: 0x6cf07420, 0x2b177: 0x6cf07620, + 0x2b178: 0x6cf07820, 0x2b179: 0x6d200020, 0x2b17a: 0x6d200220, 0x2b17b: 0x6d200420, + 0x2b17c: 0x6d200620, 0x2b17d: 0x6d200820, 0x2b17e: 0x6d200a20, 0x2b17f: 0x6d200c20, + // Block 0xac6, offset 0x2b180 + 0x2b180: 0x6d200e20, 0x2b181: 0x6d201020, 0x2b182: 0x6d201220, 0x2b183: 0x6d201420, + 0x2b184: 0x6d201620, 0x2b185: 0x6d4d9420, 0x2b186: 0x6d4d9620, 0x2b187: 0x6d4d9820, + 0x2b188: 0x6d4d9a20, 0x2b189: 0x6d4d9c20, 0x2b18a: 0x6d4d9e20, 0x2b18b: 0x6d4da020, + 0x2b18c: 0x6d4da220, 0x2b18d: 0x6d4da420, 0x2b18e: 0x6d4da620, 0x2b18f: 0x6d4da820, + 0x2b190: 0x6d4daa20, 0x2b191: 0x6d7a6020, 0x2b192: 0x6d7a6220, 0x2b193: 0x6d7a6420, + 0x2b194: 0x6d7a6620, 0x2b195: 0x6d7a6820, 0x2b196: 0x6d7a6a20, 0x2b197: 0x6d7a6c20, + 0x2b198: 0x6da2e220, 0x2b199: 0x6da2e420, 0x2b19a: 0x6da2e620, 0x2b19b: 0x6da2e820, + 0x2b19c: 0x6da2ea20, 0x2b19d: 0x6dc4d020, 0x2b19e: 0x6dc4d220, 0x2b19f: 0x6dc4d420, + 0x2b1a0: 0x6de1d020, 0x2b1a1: 0x6de1d220, 0x2b1a2: 0x6de1d420, 0x2b1a3: 0x6de1d620, + 0x2b1a4: 0x6df9b020, 0x2b1a5: 0x6e0d7020, 0x2b1a6: 0x6e0d7220, 0x2b1a7: 0x6e1cd620, + 0x2b1a8: 0x6e429020, 0x2b1a9: 0x6c109220, 0x2b1aa: 0x6c041c20, 0x2b1ab: 0x6c6de820, + 0x2b1ac: 0x6c6dea20, 0x2b1ad: 0x6cc16e20, 0x2b1ae: 0x6d4e4c20, 0x2b1af: 0x6c08a020, + 0x2b1b0: 0x6c318820, 0x2b1b1: 0x6c955820, 0x2b1b2: 0x6c08a620, 0x2b1b3: 0x6c08a820, + 0x2b1b4: 0x6c10ae20, 0x2b1b5: 0x6c10b020, 0x2b1b6: 0x6c10b220, 0x2b1b7: 0x6c1dea20, + 0x2b1b8: 0x6c1dec20, 0x2b1b9: 0x6c1dee20, 0x2b1ba: 0x6c1df020, 0x2b1bb: 0x6c1df220, + 0x2b1bc: 0x6c1df420, 0x2b1bd: 0x6c319220, 0x2b1be: 0x6c319420, 0x2b1bf: 0x6c319620, + // Block 0xac7, offset 0x2b1c0 + 0x2b1c0: 0x6c319820, 0x2b1c1: 0x6c4bf020, 0x2b1c2: 0x6c4bf220, 0x2b1c3: 0x6c4bf420, + 0x2b1c4: 0x6c4bf620, 0x2b1c5: 0x6c4bf820, 0x2b1c6: 0x6c4bfa20, 0x2b1c7: 0x6c6dfc20, + 0x2b1c8: 0x6c6dfe20, 0x2b1c9: 0x6c956420, 0x2b1ca: 0x6c956620, 0x2b1cb: 0x6c956820, + 0x2b1cc: 0x6c956a20, 0x2b1cd: 0x6c956c20, 0x2b1ce: 0x6c956e20, 0x2b1cf: 0x6cc18820, + 0x2b1d0: 0x6cc18a20, 0x2b1d1: 0x6cc18c20, 0x2b1d2: 0x6cc18e20, 0x2b1d3: 0x6cc19020, + 0x2b1d4: 0x6cc19220, 0x2b1d5: 0x6cc19420, 0x2b1d6: 0x6cc19620, 0x2b1d7: 0x6cf11a20, + 0x2b1d8: 0x6cf11c20, 0x2b1d9: 0x6cf11e20, 0x2b1da: 0x6cf12020, 0x2b1db: 0x6cf12220, + 0x2b1dc: 0x6d20c020, 0x2b1dd: 0x6d20c220, 0x2b1de: 0x6d20c420, 0x2b1df: 0x6d20c620, + 0x2b1e0: 0x6d4e5a20, 0x2b1e1: 0x6d4e5c20, 0x2b1e2: 0x6d7ae820, 0x2b1e3: 0x6d7aea20, + 0x2b1e4: 0x6d7aec20, 0x2b1e5: 0x6da35c20, 0x2b1e6: 0x6da35e20, 0x2b1e7: 0x6df9dc20, + 0x2b1e8: 0x6df9de20, 0x2b1e9: 0x6e1d0420, 0x2b1ea: 0x6e1d0620, 0x2b1eb: 0x6cc1fc20, + 0x2b1ec: 0x6cc1fe20, 0x2b1ed: 0x6d210c20, 0x2b1ee: 0x6d7b2420, 0x2b1ef: 0x6c10e420, + 0x2b1f0: 0x6c10e620, 0x2b1f1: 0x6c10e820, 0x2b1f2: 0x6c1e4220, 0x2b1f3: 0x6c1e4420, + 0x2b1f4: 0x6c31f220, 0x2b1f5: 0x6c31f420, 0x2b1f6: 0x6c31f620, 0x2b1f7: 0x6c31f820, + 0x2b1f8: 0x6c31fa20, 0x2b1f9: 0x6c31fc20, 0x2b1fa: 0x6c31fe20, 0x2b1fb: 0x6c320020, + 0x2b1fc: 0x6c4c6820, 0x2b1fd: 0x6c4c6a20, 0x2b1fe: 0x6c4c6c20, 0x2b1ff: 0x6c4c6e20, + // Block 0xac8, offset 0x2b200 + 0x2b200: 0x6c4c7020, 0x2b201: 0x6c4c7220, 0x2b202: 0x6c4c7420, 0x2b203: 0x6c6e6020, + 0x2b204: 0x6c6e6220, 0x2b205: 0x6c6e6420, 0x2b206: 0x6c6e6620, 0x2b207: 0x6c6e6820, + 0x2b208: 0x6c95d820, 0x2b209: 0x6c95da20, 0x2b20a: 0x6c95dc20, 0x2b20b: 0x6c95de20, + 0x2b20c: 0x6c95e020, 0x2b20d: 0x6cc20420, 0x2b20e: 0x6cc20620, 0x2b20f: 0x6cc20820, + 0x2b210: 0x6cc20a20, 0x2b211: 0x6cf16a20, 0x2b212: 0x6d211620, 0x2b213: 0x6d211820, + 0x2b214: 0x6d211a20, 0x2b215: 0x6d211c20, 0x2b216: 0x6d4eb620, 0x2b217: 0x6d4eb820, + 0x2b218: 0x6d4eba20, 0x2b219: 0x6d7b2620, 0x2b21a: 0x6d7b2820, 0x2b21b: 0x6d7b2a20, + 0x2b21c: 0x6d7b2c20, 0x2b21d: 0x6de23020, 0x2b21e: 0x6df9ec20, 0x2b21f: 0x6c110820, + 0x2b220: 0x6c324420, 0x2b221: 0x6d217420, 0x2b222: 0x6d4f0020, 0x2b223: 0x6d7b5c20, + 0x2b224: 0x6c1ea620, 0x2b225: 0x6c4ce020, 0x2b226: 0x6cf1b820, 0x2b227: 0x6c044820, + 0x2b228: 0x6c112020, 0x2b229: 0x6c112220, 0x2b22a: 0x6c112420, 0x2b22b: 0x6c112620, + 0x2b22c: 0x6c1eb220, 0x2b22d: 0x6c1eb420, 0x2b22e: 0x6c326020, 0x2b22f: 0x6c326220, + 0x2b230: 0x6c326420, 0x2b231: 0x6c326620, 0x2b232: 0x6c4cec20, 0x2b233: 0x6c4cee20, + 0x2b234: 0x6c4cf020, 0x2b235: 0x6c4cf220, 0x2b236: 0x6c4cf420, 0x2b237: 0x6c4cf620, + 0x2b238: 0x6c6ed820, 0x2b239: 0x6c6eda20, 0x2b23a: 0x6c966820, 0x2b23b: 0x6c966a20, + 0x2b23c: 0x6c966c20, 0x2b23d: 0x6cc27e20, 0x2b23e: 0x6cc28020, 0x2b23f: 0x6cc28220, + // Block 0xac9, offset 0x2b240 + 0x2b240: 0x6cf1c220, 0x2b241: 0x6cf1c420, 0x2b242: 0x6cf1c620, 0x2b243: 0x6d218420, + 0x2b244: 0x6d4f0820, 0x2b245: 0x6d4f0a20, 0x2b246: 0x6e0dac20, 0x2b247: 0x6c329a20, + 0x2b248: 0x6d7b7820, 0x2b249: 0x6c115620, 0x2b24a: 0x6c1ede20, 0x2b24b: 0x6c32a420, + 0x2b24c: 0x6c32a620, 0x2b24d: 0x6c32a820, 0x2b24e: 0x6c96aa20, 0x2b24f: 0x6cc2ae20, + 0x2b250: 0x6cc2b020, 0x2b251: 0x6d21b220, 0x2b252: 0x6d4f2620, 0x2b253: 0x6d7b8220, + 0x2b254: 0x6c090020, 0x2b255: 0x6c116020, 0x2b256: 0x6c1eea20, 0x2b257: 0x6c1eec20, + 0x2b258: 0x6c32b420, 0x2b259: 0x6c32b620, 0x2b25a: 0x6c4d3c20, 0x2b25b: 0x6c4d3e20, + 0x2b25c: 0x6c4d4020, 0x2b25d: 0x6c4d4220, 0x2b25e: 0x6c4d4420, 0x2b25f: 0x6c4d4620, + 0x2b260: 0x6c4d4820, 0x2b261: 0x6c4d4a20, 0x2b262: 0x6c6f1220, 0x2b263: 0x6c6f1420, + 0x2b264: 0x6c96c620, 0x2b265: 0x6c96c820, 0x2b266: 0x6c96ca20, 0x2b267: 0x6c96cc20, + 0x2b268: 0x6c96ce20, 0x2b269: 0x6c96d020, 0x2b26a: 0x6cc2c020, 0x2b26b: 0x6cc2c220, + 0x2b26c: 0x6cc2c420, 0x2b26d: 0x6cc2c620, 0x2b26e: 0x6cc2c820, 0x2b26f: 0x6cf1f620, + 0x2b270: 0x6d21bc20, 0x2b271: 0x6d21be20, 0x2b272: 0x6d21c020, 0x2b273: 0x6d4f3620, + 0x2b274: 0x6d4f3820, 0x2b275: 0x6d7b8c20, 0x2b276: 0x6d7b8e20, 0x2b277: 0x6da3c020, + 0x2b278: 0x6de27220, 0x2b279: 0x6dfa1a20, 0x2b27a: 0x6c090620, 0x2b27b: 0x6c116e20, + 0x2b27c: 0x6c117220, 0x2b27d: 0x6c1f1c20, 0x2b27e: 0x6c117420, 0x2b27f: 0x6c117620, + // Block 0xaca, offset 0x2b280 + 0x2b280: 0x6c1f1e20, 0x2b281: 0x6c32e020, 0x2b282: 0x6c32e220, 0x2b283: 0x6c1f3220, + 0x2b284: 0x6c1f3420, 0x2b285: 0x6c32e420, 0x2b286: 0x6c1f3620, 0x2b287: 0x6c1f3820, + 0x2b288: 0x6c1f3a20, 0x2b289: 0x6c1f3c20, 0x2b28a: 0x6c1f3e20, 0x2b28b: 0x6c1f4020, + 0x2b28c: 0x6c32fc20, 0x2b28d: 0x6c4d7c20, 0x2b28e: 0x6c4d7e20, 0x2b28f: 0x6c32fe20, + 0x2b290: 0x6c330020, 0x2b291: 0x6c330220, 0x2b292: 0x6c330420, 0x2b293: 0x6c330620, + 0x2b294: 0x6c330820, 0x2b295: 0x6c330a20, 0x2b296: 0x6c330c20, 0x2b297: 0x6c4d8020, + 0x2b298: 0x6c330e20, 0x2b299: 0x6c4d8220, 0x2b29a: 0x6c4da220, 0x2b29b: 0x6c4da420, + 0x2b29c: 0x6c4da620, 0x2b29d: 0x6c4da820, 0x2b29e: 0x6c4daa20, 0x2b29f: 0x6c6f5620, + 0x2b2a0: 0x6c6f5820, 0x2b2a1: 0x6c4dac20, 0x2b2a2: 0x6c4dae20, 0x2b2a3: 0x6c6f5a20, + 0x2b2a4: 0x6c4db020, 0x2b2a5: 0x6c4db220, 0x2b2a6: 0x6c4db420, 0x2b2a7: 0x6c4db620, + 0x2b2a8: 0x6c4db820, 0x2b2a9: 0x6c6f5c20, 0x2b2aa: 0x6c6f5e20, 0x2b2ab: 0x6c6f6020, + 0x2b2ac: 0x6c4dba20, 0x2b2ad: 0x6c4dbc20, 0x2b2ae: 0x6c972e20, 0x2b2af: 0x6c6f8a20, + 0x2b2b0: 0x6c973020, 0x2b2b1: 0x6c6f8c20, 0x2b2b2: 0x6c973220, 0x2b2b3: 0x6c6f8e20, + 0x2b2b4: 0x6c6f9020, 0x2b2b5: 0x6c973420, 0x2b2b6: 0x6c6f9220, 0x2b2b7: 0x6c6f9420, + 0x2b2b8: 0x6c6f9620, 0x2b2b9: 0x6c6f9820, 0x2b2ba: 0x6c4dbe20, 0x2b2bb: 0x6c973620, + 0x2b2bc: 0x6c6f9a20, 0x2b2bd: 0x6c6f9c20, 0x2b2be: 0x6c975620, 0x2b2bf: 0x6c975820, + // Block 0xacb, offset 0x2b2c0 + 0x2b2c0: 0x6c975a20, 0x2b2c1: 0x6cc30420, 0x2b2c2: 0x6c975c20, 0x2b2c3: 0x6c975e20, + 0x2b2c4: 0x6c976020, 0x2b2c5: 0x6c976220, 0x2b2c6: 0x6c976420, 0x2b2c7: 0x6c976620, + 0x2b2c8: 0x6cc30620, 0x2b2c9: 0x6c976820, 0x2b2ca: 0x6c976a20, 0x2b2cb: 0x6cc30820, + 0x2b2cc: 0x6c976c20, 0x2b2cd: 0x6c976e20, 0x2b2ce: 0x6cc30a20, 0x2b2cf: 0x6c977020, + 0x2b2d0: 0x6cc30c20, 0x2b2d1: 0x6cc30e20, 0x2b2d2: 0x6c977220, 0x2b2d3: 0x6c977420, + 0x2b2d4: 0x6c977620, 0x2b2d5: 0x6cc31020, 0x2b2d6: 0x6cc31220, 0x2b2d7: 0x6c977820, + 0x2b2d8: 0x6c977a20, 0x2b2d9: 0x6c977c20, 0x2b2da: 0x6cc33c20, 0x2b2db: 0x6cc33e20, + 0x2b2dc: 0x6cc34020, 0x2b2dd: 0x6cc34220, 0x2b2de: 0x6cc34420, 0x2b2df: 0x6cc34620, + 0x2b2e0: 0x6cc34820, 0x2b2e1: 0x6cc34a20, 0x2b2e2: 0x6cc34c20, 0x2b2e3: 0x6cf24220, + 0x2b2e4: 0x6cf24420, 0x2b2e5: 0x6cc34e20, 0x2b2e6: 0x6cf24620, 0x2b2e7: 0x6cc35020, + 0x2b2e8: 0x6cf24820, 0x2b2e9: 0x6cc35220, 0x2b2ea: 0x6cc35420, 0x2b2eb: 0x6cc35620, + 0x2b2ec: 0x6cf26620, 0x2b2ed: 0x6cf26820, 0x2b2ee: 0x6cf26a20, 0x2b2ef: 0x6d220420, + 0x2b2f0: 0x6cf26c20, 0x2b2f1: 0x6cf26e20, 0x2b2f2: 0x6d220620, 0x2b2f3: 0x6cf27020, + 0x2b2f4: 0x6cf27220, 0x2b2f5: 0x6cf27420, 0x2b2f6: 0x6d220820, 0x2b2f7: 0x6d220a20, + 0x2b2f8: 0x6d220c20, 0x2b2f9: 0x6d220e20, 0x2b2fa: 0x6cf27620, 0x2b2fb: 0x6d221020, + 0x2b2fc: 0x6d222a20, 0x2b2fd: 0x6d222c20, 0x2b2fe: 0x6d222e20, 0x2b2ff: 0x6d4f6420, + // Block 0xacc, offset 0x2b300 + 0x2b300: 0x6d223020, 0x2b301: 0x6d4f6620, 0x2b302: 0x6d4f6820, 0x2b303: 0x6d223220, + 0x2b304: 0x6d4f6a20, 0x2b305: 0x6d223420, 0x2b306: 0x6d223620, 0x2b307: 0x6d223820, + 0x2b308: 0x6d223a20, 0x2b309: 0x6d4f9820, 0x2b30a: 0x6d4f9a20, 0x2b30b: 0x6d4f9c20, + 0x2b30c: 0x6d7bb220, 0x2b30d: 0x6d4f9e20, 0x2b30e: 0x6d4fa020, 0x2b30f: 0x6d4fa220, + 0x2b310: 0x6d4fa420, 0x2b311: 0x6d4fa620, 0x2b312: 0x6d4fa820, 0x2b313: 0x6d4faa20, + 0x2b314: 0x6d7bb420, 0x2b315: 0x6d4fac20, 0x2b316: 0x6d4fae20, 0x2b317: 0x6d7bce20, + 0x2b318: 0x6da3d420, 0x2b319: 0x6d7bd020, 0x2b31a: 0x6dc57420, 0x2b31b: 0x6dc57620, + 0x2b31c: 0x6da3e620, 0x2b31d: 0x6dc57820, 0x2b31e: 0x6dc57a20, 0x2b31f: 0x6dc57c20, + 0x2b320: 0x6da3e820, 0x2b321: 0x6dc58820, 0x2b322: 0x6dc58a20, 0x2b323: 0x6dfa2a20, + 0x2b324: 0x6dfa2c20, 0x2b325: 0x6de28420, 0x2b326: 0x6de28620, 0x2b327: 0x6de28820, + 0x2b328: 0x6dfa3020, 0x2b329: 0x6dfa3220, 0x2b32a: 0x6dfa3420, 0x2b32b: 0x6e1d3420, + 0x2b32c: 0x6e1d3620, 0x2b32d: 0x6e403c20, 0x2b32e: 0x6c1ffc20, 0x2b32f: 0x6c1ffe20, + 0x2b330: 0x6c33dc20, 0x2b331: 0x6c33de20, 0x2b332: 0x6c33e020, 0x2b333: 0x6c4e9e20, + 0x2b334: 0x6c709620, 0x2b335: 0x6c709820, 0x2b336: 0x6c709a20, 0x2b337: 0x6c98b620, + 0x2b338: 0x6cc48e20, 0x2b339: 0x6cf37620, 0x2b33a: 0x6d233220, 0x2b33b: 0x6d50be20, + 0x2b33c: 0x6d50c020, 0x2b33d: 0x6da46820, 0x2b33e: 0x6c201620, 0x2b33f: 0x6c340220, + // Block 0xacd, offset 0x2b340 + 0x2b340: 0x6c340420, 0x2b341: 0x6c4ec820, 0x2b342: 0x6c4eca20, 0x2b343: 0x6c093220, + 0x2b344: 0x6c093420, 0x2b345: 0x6c093620, 0x2b346: 0x6c11d620, 0x2b347: 0x6c11d820, + 0x2b348: 0x6c11da20, 0x2b349: 0x6c202820, 0x2b34a: 0x6c202a20, 0x2b34b: 0x6c202c20, + 0x2b34c: 0x6c202e20, 0x2b34d: 0x6c203020, 0x2b34e: 0x6c203220, 0x2b34f: 0x6c203420, + 0x2b350: 0x6c203620, 0x2b351: 0x6c203820, 0x2b352: 0x6c341e20, 0x2b353: 0x6c342020, + 0x2b354: 0x6c342220, 0x2b355: 0x6c342420, 0x2b356: 0x6c342620, 0x2b357: 0x6c342820, + 0x2b358: 0x6c4ef220, 0x2b359: 0x6c342a20, 0x2b35a: 0x6c342c20, 0x2b35b: 0x6c342e20, + 0x2b35c: 0x6c343020, 0x2b35d: 0x6c343220, 0x2b35e: 0x6c343420, 0x2b35f: 0x6c343620, + 0x2b360: 0x6c343820, 0x2b361: 0x6c4ef820, 0x2b362: 0x6c4efa20, 0x2b363: 0x6c4efc20, + 0x2b364: 0x6c4efe20, 0x2b365: 0x6c4f0020, 0x2b366: 0x6c4f0220, 0x2b367: 0x6c4f0420, + 0x2b368: 0x6c4f0620, 0x2b369: 0x6c4f0820, 0x2b36a: 0x6c4f0a20, 0x2b36b: 0x6c4f0c20, + 0x2b36c: 0x6c70ca20, 0x2b36d: 0x6c70cc20, 0x2b36e: 0x6c4f0e20, 0x2b36f: 0x6c4f1020, + 0x2b370: 0x6c4f1220, 0x2b371: 0x6c70ce20, 0x2b372: 0x6c70e020, 0x2b373: 0x6c98e220, + 0x2b374: 0x6c70e220, 0x2b375: 0x6c70e420, 0x2b376: 0x6c70e620, 0x2b377: 0x6c70e820, + 0x2b378: 0x6c70ea20, 0x2b379: 0x6c98e820, 0x2b37a: 0x6c98ea20, 0x2b37b: 0x6c98ec20, + 0x2b37c: 0x6c98ee20, 0x2b37d: 0x6c98f020, 0x2b37e: 0x6c98f220, 0x2b37f: 0x6c98f420, + // Block 0xace, offset 0x2b380 + 0x2b380: 0x6c98f620, 0x2b381: 0x6c98f820, 0x2b382: 0x6c98fa20, 0x2b383: 0x6c98fc20, + 0x2b384: 0x6c98fe20, 0x2b385: 0x6c990020, 0x2b386: 0x6c990220, 0x2b387: 0x6cc4bc20, + 0x2b388: 0x6c990420, 0x2b389: 0x6cc4c820, 0x2b38a: 0x6cc4ca20, 0x2b38b: 0x6cc4cc20, + 0x2b38c: 0x6cf3a820, 0x2b38d: 0x6cf3aa20, 0x2b38e: 0x6cc4ce20, 0x2b38f: 0x6cc4d020, + 0x2b390: 0x6cc4d220, 0x2b391: 0x6cc4d420, 0x2b392: 0x6cc4d620, 0x2b393: 0x6cc4d820, + 0x2b394: 0x6cc4da20, 0x2b395: 0x6cc4dc20, 0x2b396: 0x6cc66c20, 0x2b397: 0x6cc4de20, + 0x2b398: 0x6cc4e020, 0x2b399: 0x6cf3b220, 0x2b39a: 0x6cf3b420, 0x2b39b: 0x6cf3b620, + 0x2b39c: 0x6cf3b820, 0x2b39d: 0x6cf3ba20, 0x2b39e: 0x6cf3bc20, 0x2b39f: 0x6cf3be20, + 0x2b3a0: 0x6cf3c020, 0x2b3a1: 0x6cf3c220, 0x2b3a2: 0x6cf3c420, 0x2b3a3: 0x6cf3c620, + 0x2b3a4: 0x6cf3c820, 0x2b3a5: 0x6cf3ca20, 0x2b3a6: 0x6cf3cc20, 0x2b3a7: 0x6cf3ce20, + 0x2b3a8: 0x6cf3d020, 0x2b3a9: 0x6cf3d220, 0x2b3aa: 0x6cf3d420, 0x2b3ab: 0x6cf3d620, + 0x2b3ac: 0x6cf3d820, 0x2b3ad: 0x6d237220, 0x2b3ae: 0x6d237420, 0x2b3af: 0x6d237620, + 0x2b3b0: 0x6d237820, 0x2b3b1: 0x6d237a20, 0x2b3b2: 0x6d237c20, 0x2b3b3: 0x6d237e20, + 0x2b3b4: 0x6d238020, 0x2b3b5: 0x6d238220, 0x2b3b6: 0x6d238420, 0x2b3b7: 0x6d238620, + 0x2b3b8: 0x6d238820, 0x2b3b9: 0x6d238a20, 0x2b3ba: 0x6d238c20, 0x2b3bb: 0x6d50fc20, + 0x2b3bc: 0x6d50fe20, 0x2b3bd: 0x6d238e20, 0x2b3be: 0x6d239020, 0x2b3bf: 0x6d239220, + // Block 0xacf, offset 0x2b3c0 + 0x2b3c0: 0x6d239420, 0x2b3c1: 0x6d239620, 0x2b3c2: 0x6d239820, 0x2b3c3: 0x6d511020, + 0x2b3c4: 0x6d511220, 0x2b3c5: 0x6d511420, 0x2b3c6: 0x6d511620, 0x2b3c7: 0x6d511820, + 0x2b3c8: 0x6d511a20, 0x2b3c9: 0x6d511c20, 0x2b3ca: 0x6d511e20, 0x2b3cb: 0x6d512020, + 0x2b3cc: 0x6d512220, 0x2b3cd: 0x6d512420, 0x2b3ce: 0x6d512620, 0x2b3cf: 0x6d512820, + 0x2b3d0: 0x6d512a20, 0x2b3d1: 0x6d512c20, 0x2b3d2: 0x6d7cb420, 0x2b3d3: 0x6da47a20, + 0x2b3d4: 0x6d7cb620, 0x2b3d5: 0x6d7cb820, 0x2b3d6: 0x6d7cba20, 0x2b3d7: 0x6d7cbc20, + 0x2b3d8: 0x6d7cbe20, 0x2b3d9: 0x6d7cc020, 0x2b3da: 0x6da48220, 0x2b3db: 0x6da48420, + 0x2b3dc: 0x6da48620, 0x2b3dd: 0x6da48820, 0x2b3de: 0x6da48a20, 0x2b3df: 0x6da48c20, + 0x2b3e0: 0x6dc60e20, 0x2b3e1: 0x6dc61020, 0x2b3e2: 0x6dc61220, 0x2b3e3: 0x6dc61420, + 0x2b3e4: 0x6dc61620, 0x2b3e5: 0x6dc61820, 0x2b3e6: 0x6dc61a20, 0x2b3e7: 0x6dc61c20, + 0x2b3e8: 0x6dc61e20, 0x2b3e9: 0x6dc62020, 0x2b3ea: 0x6dc62220, 0x2b3eb: 0x6dc62420, + 0x2b3ec: 0x6de2ea20, 0x2b3ed: 0x6de2ec20, 0x2b3ee: 0x6dfa5c20, 0x2b3ef: 0x6dfa5e20, + 0x2b3f0: 0x6dfa6020, 0x2b3f1: 0x6e0df020, 0x2b3f2: 0x6e0df220, 0x2b3f3: 0x6e0df420, + 0x2b3f4: 0x6e0df620, 0x2b3f5: 0x6e28f820, 0x2b3f6: 0x6e28fa20, 0x2b3f7: 0x6e28fc20, + 0x2b3f8: 0x6e389020, 0x2b3f9: 0x6e389220, 0x2b3fa: 0x6c352e20, 0x2b3fb: 0x6c722220, + 0x2b3fc: 0x6c722420, 0x2b3fd: 0x6c9a9420, 0x2b3fe: 0x6cc67020, 0x2b3ff: 0x6c211c20, + // Block 0xad0, offset 0x2b400 + 0x2b400: 0x6c211e20, 0x2b401: 0x6c354020, 0x2b402: 0x6c354220, 0x2b403: 0x6c503420, + 0x2b404: 0x6c503620, 0x2b405: 0x6c503820, 0x2b406: 0x6c503a20, 0x2b407: 0x6c723620, + 0x2b408: 0x6c723820, 0x2b409: 0x6c723a20, 0x2b40a: 0x6c9aa020, 0x2b40b: 0x6c9aa220, + 0x2b40c: 0x6c9aa420, 0x2b40d: 0x6c9aa620, 0x2b40e: 0x6c9aa820, 0x2b40f: 0x6cc68220, + 0x2b410: 0x6cc68420, 0x2b411: 0x6cc68620, 0x2b412: 0x6cc68820, 0x2b413: 0x6cc68a20, + 0x2b414: 0x6cc68c20, 0x2b415: 0x6cc68e20, 0x2b416: 0x6cc69020, 0x2b417: 0x6cc69220, + 0x2b418: 0x6cc69420, 0x2b419: 0x6cc69620, 0x2b41a: 0x6cc69820, 0x2b41b: 0x6cf52c20, + 0x2b41c: 0x6cf52e20, 0x2b41d: 0x6cf53020, 0x2b41e: 0x6cf53220, 0x2b41f: 0x6cf53420, + 0x2b420: 0x6d24f020, 0x2b421: 0x6d24f220, 0x2b422: 0x6d24f420, 0x2b423: 0x6d24f620, + 0x2b424: 0x6d527220, 0x2b425: 0x6d527420, 0x2b426: 0x6d527620, 0x2b427: 0x6d7dae20, + 0x2b428: 0x6d7db020, 0x2b429: 0x6d7db220, 0x2b42a: 0x6d7db420, 0x2b42b: 0x6dc6b620, + 0x2b42c: 0x6dc6b820, 0x2b42d: 0x6dfab220, 0x2b42e: 0x6e0e2c20, 0x2b42f: 0x6c213a20, + 0x2b430: 0x6c728c20, 0x2b431: 0x6cf58c20, 0x2b432: 0x6c124020, 0x2b433: 0x6c124220, + 0x2b434: 0x6c358220, 0x2b435: 0x6c507a20, 0x2b436: 0x6c729a20, 0x2b437: 0x6c9b2820, + 0x2b438: 0x6cc71420, 0x2b439: 0x6d52cc20, 0x2b43a: 0x6da54220, 0x2b43b: 0x6e292a20, + 0x2b43c: 0x6c508220, 0x2b43d: 0x6c508420, 0x2b43e: 0x6c72aa20, 0x2b43f: 0x6c72ac20, + // Block 0xad1, offset 0x2b440 + 0x2b440: 0x6cc72420, 0x2b441: 0x6d255620, 0x2b442: 0x6d52d620, 0x2b443: 0x6c124620, + 0x2b444: 0x6c359e20, 0x2b445: 0x6c72b420, 0x2b446: 0x6c508e20, 0x2b447: 0x6c72b620, + 0x2b448: 0x6c72b820, 0x2b449: 0x6c72ba20, 0x2b44a: 0x6c9b4220, 0x2b44b: 0x6c9b4420, + 0x2b44c: 0x6c9b4620, 0x2b44d: 0x6cc74420, 0x2b44e: 0x6d52e420, 0x2b44f: 0x6d52e620, + 0x2b450: 0x6c124c20, 0x2b451: 0x6c124e20, 0x2b452: 0x6c215020, 0x2b453: 0x6c215220, + 0x2b454: 0x6c215420, 0x2b455: 0x6c215620, 0x2b456: 0x6c215820, 0x2b457: 0x6c215a20, + 0x2b458: 0x6c35b020, 0x2b459: 0x6c35b220, 0x2b45a: 0x6c35b420, 0x2b45b: 0x6c50b020, + 0x2b45c: 0x6c50b220, 0x2b45d: 0x6c50b420, 0x2b45e: 0x6c50b620, 0x2b45f: 0x6c50b820, + 0x2b460: 0x6c50ba20, 0x2b461: 0x6c50bc20, 0x2b462: 0x6c50be20, 0x2b463: 0x6c50c020, + 0x2b464: 0x6c50c220, 0x2b465: 0x6c72f020, 0x2b466: 0x6c72f220, 0x2b467: 0x6c72f420, + 0x2b468: 0x6c72f620, 0x2b469: 0x6c72f820, 0x2b46a: 0x6c72fa20, 0x2b46b: 0x6c72fc20, + 0x2b46c: 0x6c72fe20, 0x2b46d: 0x6c730020, 0x2b46e: 0x6c730220, 0x2b46f: 0x6c9b7020, + 0x2b470: 0x6c9b7220, 0x2b471: 0x6c9b7420, 0x2b472: 0x6c9b7620, 0x2b473: 0x6c9b7820, + 0x2b474: 0x6c9b7a20, 0x2b475: 0x6cc76e20, 0x2b476: 0x6cc77020, 0x2b477: 0x6cc77220, + 0x2b478: 0x6cc77420, 0x2b479: 0x6cc77620, 0x2b47a: 0x6cc77820, 0x2b47b: 0x6cc77a20, + 0x2b47c: 0x6cc77c20, 0x2b47d: 0x6cc77e20, 0x2b47e: 0x6cc78020, 0x2b47f: 0x6cc78220, + // Block 0xad2, offset 0x2b480 + 0x2b480: 0x6cc78420, 0x2b481: 0x6cf5d820, 0x2b482: 0x6cf5da20, 0x2b483: 0x6cf5dc20, + 0x2b484: 0x6cf5de20, 0x2b485: 0x6cf5e020, 0x2b486: 0x6cf5e220, 0x2b487: 0x6cf5e420, + 0x2b488: 0x6cf5e620, 0x2b489: 0x6cf5e820, 0x2b48a: 0x6cf5ea20, 0x2b48b: 0x6cf5ec20, + 0x2b48c: 0x6cf5ee20, 0x2b48d: 0x6d257620, 0x2b48e: 0x6d257820, 0x2b48f: 0x6d257a20, + 0x2b490: 0x6d257c20, 0x2b491: 0x6d52f420, 0x2b492: 0x6d52f620, 0x2b493: 0x6d52f820, + 0x2b494: 0x6d52fa20, 0x2b495: 0x6d52fc20, 0x2b496: 0x6d52fe20, 0x2b497: 0x6d7e3220, + 0x2b498: 0x6d7e3420, 0x2b499: 0x6d7e3620, 0x2b49a: 0x6d7e3820, 0x2b49b: 0x6d7e3a20, + 0x2b49c: 0x6d7e3c20, 0x2b49d: 0x6d7e3e20, 0x2b49e: 0x6d7e4020, 0x2b49f: 0x6d7e4220, + 0x2b4a0: 0x6da55e20, 0x2b4a1: 0x6da56020, 0x2b4a2: 0x6da56220, 0x2b4a3: 0x6dc6fa20, + 0x2b4a4: 0x6dc6fc20, 0x2b4a5: 0x6dc6fe20, 0x2b4a6: 0x6dc70020, 0x2b4a7: 0x6dc70220, + 0x2b4a8: 0x6dc70420, 0x2b4a9: 0x6de38420, 0x2b4aa: 0x6de38620, 0x2b4ab: 0x6dfade20, + 0x2b4ac: 0x6e1d9a20, 0x2b4ad: 0x6e1d9c20, 0x2b4ae: 0x6e292e20, 0x2b4af: 0x6e38a620, + 0x2b4b0: 0x6c126e20, 0x2b4b1: 0x6d7ed420, 0x2b4b2: 0x6da5aa20, 0x2b4b3: 0x6c364a20, + 0x2b4b4: 0x6c73aa20, 0x2b4b5: 0x6c73ac20, 0x2b4b6: 0x6c9c1620, 0x2b4b7: 0x6c9c1820, + 0x2b4b8: 0x6cc85820, 0x2b4b9: 0x6cd95a20, 0x2b4ba: 0x6d260220, 0x2b4bb: 0x6d260420, + 0x2b4bc: 0x6d538020, 0x2b4bd: 0x6d538220, 0x2b4be: 0x6d538420, 0x2b4bf: 0x6d7ee420, + // Block 0xad3, offset 0x2b4c0 + 0x2b4c0: 0x6da5b020, 0x2b4c1: 0x6c127a20, 0x2b4c2: 0x6c21b020, 0x2b4c3: 0x6c21b220, + 0x2b4c4: 0x6c21b420, 0x2b4c5: 0x6c21b620, 0x2b4c6: 0x6c21b820, 0x2b4c7: 0x6c365820, + 0x2b4c8: 0x6c365a20, 0x2b4c9: 0x6c365c20, 0x2b4ca: 0x6c365e20, 0x2b4cb: 0x6c366020, + 0x2b4cc: 0x6c366220, 0x2b4cd: 0x6c366420, 0x2b4ce: 0x6c366620, 0x2b4cf: 0x6c366820, + 0x2b4d0: 0x6c366a20, 0x2b4d1: 0x6c518620, 0x2b4d2: 0x6c518820, 0x2b4d3: 0x6c518a20, + 0x2b4d4: 0x6c518c20, 0x2b4d5: 0x6c518e20, 0x2b4d6: 0x6c519020, 0x2b4d7: 0x6c519220, + 0x2b4d8: 0x6c73c620, 0x2b4d9: 0x6c73c820, 0x2b4da: 0x6c73ca20, 0x2b4db: 0x6c73cc20, + 0x2b4dc: 0x6c73ce20, 0x2b4dd: 0x6c73d020, 0x2b4de: 0x6c73d220, 0x2b4df: 0x6c73d420, + 0x2b4e0: 0x6c73d620, 0x2b4e1: 0x6c73d820, 0x2b4e2: 0x6c73da20, 0x2b4e3: 0x6c73dc20, + 0x2b4e4: 0x6c73de20, 0x2b4e5: 0x6c73e020, 0x2b4e6: 0x6c73e220, 0x2b4e7: 0x6c73e420, + 0x2b4e8: 0x6c9c3620, 0x2b4e9: 0x6c9c3820, 0x2b4ea: 0x6c9c3a20, 0x2b4eb: 0x6c9c3c20, + 0x2b4ec: 0x6c9c3e20, 0x2b4ed: 0x6c9c4020, 0x2b4ee: 0x6c9c4220, 0x2b4ef: 0x6c9c4420, + 0x2b4f0: 0x6c9c4620, 0x2b4f1: 0x6c9c4820, 0x2b4f2: 0x6c9c4a20, 0x2b4f3: 0x6c9c4c20, + 0x2b4f4: 0x6c9c4e20, 0x2b4f5: 0x6c9c5020, 0x2b4f6: 0x6cc88620, 0x2b4f7: 0x6c9c5220, + 0x2b4f8: 0x6cc88820, 0x2b4f9: 0x6cc88a20, 0x2b4fa: 0x6cc88c20, 0x2b4fb: 0x6cc88e20, + 0x2b4fc: 0x6cc89020, 0x2b4fd: 0x6cc89220, 0x2b4fe: 0x6cc89420, 0x2b4ff: 0x6cc89620, + // Block 0xad4, offset 0x2b500 + 0x2b500: 0x6cc89820, 0x2b501: 0x6cc89a20, 0x2b502: 0x6cc89c20, 0x2b503: 0x6cc89e20, + 0x2b504: 0x6cc8a020, 0x2b505: 0x6cc8a220, 0x2b506: 0x6cc8a420, 0x2b507: 0x6cc8a620, + 0x2b508: 0x6cc8a820, 0x2b509: 0x6cc8aa20, 0x2b50a: 0x6cc8ac20, 0x2b50b: 0x6cf6b220, + 0x2b50c: 0x6cf6b420, 0x2b50d: 0x6cf6b620, 0x2b50e: 0x6cf6b820, 0x2b50f: 0x6cf6ba20, + 0x2b510: 0x6cf6bc20, 0x2b511: 0x6cf6be20, 0x2b512: 0x6cf6c020, 0x2b513: 0x6cf6c220, + 0x2b514: 0x6cf6c420, 0x2b515: 0x6cf6c620, 0x2b516: 0x6cf6c820, 0x2b517: 0x6cf6ca20, + 0x2b518: 0x6cf6cc20, 0x2b519: 0x6cf6ce20, 0x2b51a: 0x6cf6d020, 0x2b51b: 0x6cf6d220, + 0x2b51c: 0x6cf6d420, 0x2b51d: 0x6cf6d620, 0x2b51e: 0x6cf6d820, 0x2b51f: 0x6cf6da20, + 0x2b520: 0x6cf6dc20, 0x2b521: 0x6cfbd820, 0x2b522: 0x6cf6de20, 0x2b523: 0x6cf6e020, + 0x2b524: 0x6d261a20, 0x2b525: 0x6d261c20, 0x2b526: 0x6d261e20, 0x2b527: 0x6d262020, + 0x2b528: 0x6d262220, 0x2b529: 0x6d262420, 0x2b52a: 0x6d262620, 0x2b52b: 0x6d262820, + 0x2b52c: 0x6d262a20, 0x2b52d: 0x6d262c20, 0x2b52e: 0x6d262e20, 0x2b52f: 0x6d263020, + 0x2b530: 0x6d263220, 0x2b531: 0x6d263420, 0x2b532: 0x6d263620, 0x2b533: 0x6d263820, + 0x2b534: 0x6d263a20, 0x2b535: 0x6d263c20, 0x2b536: 0x6d263e20, 0x2b537: 0x6d264020, + 0x2b538: 0x6d264220, 0x2b539: 0x6d264420, 0x2b53a: 0x6d264620, 0x2b53b: 0x6d264820, + 0x2b53c: 0x6d264a20, 0x2b53d: 0x6d264c20, 0x2b53e: 0x6d539e20, 0x2b53f: 0x6d53a020, + // Block 0xad5, offset 0x2b540 + 0x2b540: 0x6d53a220, 0x2b541: 0x6d53a420, 0x2b542: 0x6d53a620, 0x2b543: 0x6d53a820, + 0x2b544: 0x6d53aa20, 0x2b545: 0x6d53ac20, 0x2b546: 0x6d53ae20, 0x2b547: 0x6d53b020, + 0x2b548: 0x6d53b220, 0x2b549: 0x6d53b420, 0x2b54a: 0x6d53b620, 0x2b54b: 0x6d53b820, + 0x2b54c: 0x6d53ba20, 0x2b54d: 0x6d53bc20, 0x2b54e: 0x6d53be20, 0x2b54f: 0x6d53c020, + 0x2b550: 0x6d7f0220, 0x2b551: 0x6d53c220, 0x2b552: 0x6d53c420, 0x2b553: 0x6d7f0420, + 0x2b554: 0x6d7f0620, 0x2b555: 0x6d7f0820, 0x2b556: 0x6d7f0a20, 0x2b557: 0x6d7f0c20, + 0x2b558: 0x6d7f0e20, 0x2b559: 0x6d7f1020, 0x2b55a: 0x6d7f1220, 0x2b55b: 0x6d7f1420, + 0x2b55c: 0x6d7f1620, 0x2b55d: 0x6d7f1820, 0x2b55e: 0x6d7f1a20, 0x2b55f: 0x6d7f1c20, + 0x2b560: 0x6d53c620, 0x2b561: 0x6d7f1e20, 0x2b562: 0x6d7f2020, 0x2b563: 0x6d7f2220, + 0x2b564: 0x6d7f2420, 0x2b565: 0x6d7f2620, 0x2b566: 0x6d7f2820, 0x2b567: 0x6d7f2a20, + 0x2b568: 0x6d7f2c20, 0x2b569: 0x6d7f2e20, 0x2b56a: 0x6da5c220, 0x2b56b: 0x6da5c420, + 0x2b56c: 0x6da5c620, 0x2b56d: 0x6da5c820, 0x2b56e: 0x6da5ca20, 0x2b56f: 0x6da5cc20, + 0x2b570: 0x6da5ce20, 0x2b571: 0x6da5d020, 0x2b572: 0x6da5d220, 0x2b573: 0x6da5d420, + 0x2b574: 0x6da5d620, 0x2b575: 0x6da5d820, 0x2b576: 0x6da5da20, 0x2b577: 0x6dc75420, + 0x2b578: 0x6dc75620, 0x2b579: 0x6dc75820, 0x2b57a: 0x6dc75a20, 0x2b57b: 0x6dc75c20, + 0x2b57c: 0x6dc75e20, 0x2b57d: 0x6dc76020, 0x2b57e: 0x6de3b420, 0x2b57f: 0x6de3b620, + // Block 0xad6, offset 0x2b580 + 0x2b580: 0x6de3b820, 0x2b581: 0x6de3ba20, 0x2b582: 0x6de3bc20, 0x2b583: 0x6de3be20, + 0x2b584: 0x6de3c020, 0x2b585: 0x6de3c220, 0x2b586: 0x6de3c420, 0x2b587: 0x6de3c620, + 0x2b588: 0x6de3c820, 0x2b589: 0x6dfb0820, 0x2b58a: 0x6dfb0a20, 0x2b58b: 0x6dfb0c20, + 0x2b58c: 0x6dfb0e20, 0x2b58d: 0x6dfb1020, 0x2b58e: 0x6dfb1220, 0x2b58f: 0x6dfb1420, + 0x2b590: 0x6dfb1620, 0x2b591: 0x6dfb1820, 0x2b592: 0x6dfb1a20, 0x2b593: 0x6dfb1c20, + 0x2b594: 0x6e0e5e20, 0x2b595: 0x6e0e6020, 0x2b596: 0x6dfb1e20, 0x2b597: 0x6e1db220, + 0x2b598: 0x6e1db420, 0x2b599: 0x6e293a20, 0x2b59a: 0x6e293c20, 0x2b59b: 0x6e293e20, + 0x2b59c: 0x6e294020, 0x2b59d: 0x6c223820, 0x2b59e: 0x6c223a20, 0x2b59f: 0x6c376620, + 0x2b5a0: 0x6c376820, 0x2b5a1: 0x6c376a20, 0x2b5a2: 0x6c376c20, 0x2b5a3: 0x6c52c220, + 0x2b5a4: 0x6c52c420, 0x2b5a5: 0x6c52c620, 0x2b5a6: 0x6c52c820, 0x2b5a7: 0x6c52ca20, + 0x2b5a8: 0x6c52cc20, 0x2b5a9: 0x6c754820, 0x2b5aa: 0x6c754a20, 0x2b5ab: 0x6c754c20, + 0x2b5ac: 0x6c754e20, 0x2b5ad: 0x6c755020, 0x2b5ae: 0x6c9da620, 0x2b5af: 0x6c9da820, + 0x2b5b0: 0x6c9daa20, 0x2b5b1: 0x6c9dac20, 0x2b5b2: 0x6cca8c20, 0x2b5b3: 0x6cca8e20, + 0x2b5b4: 0x6cca9020, 0x2b5b5: 0x6cca9220, 0x2b5b6: 0x6cca9420, 0x2b5b7: 0x6c75a620, + 0x2b5b8: 0x6cca9620, 0x2b5b9: 0x6cf8bc20, 0x2b5ba: 0x6cf8be20, 0x2b5bb: 0x6cf8c020, + 0x2b5bc: 0x6cf8c220, 0x2b5bd: 0x6cf8c420, 0x2b5be: 0x6cf8c620, 0x2b5bf: 0x6d280220, + // Block 0xad7, offset 0x2b5c0 + 0x2b5c0: 0x6d280420, 0x2b5c1: 0x6d280620, 0x2b5c2: 0x6d555220, 0x2b5c3: 0x6d555420, + 0x2b5c4: 0x6d80d020, 0x2b5c5: 0x6d80d220, 0x2b5c6: 0x6da6f420, 0x2b5c7: 0x6da6f620, + 0x2b5c8: 0x6da6f820, 0x2b5c9: 0x6da6fa20, 0x2b5ca: 0x6de47a20, 0x2b5cb: 0x6dfb9a20, + 0x2b5cc: 0x6e1e0c20, 0x2b5cd: 0x6e297620, 0x2b5ce: 0x6e38d620, 0x2b5cf: 0x6c12ba20, + 0x2b5d0: 0x6c224e20, 0x2b5d1: 0x6c225020, 0x2b5d2: 0x6c52f820, 0x2b5d3: 0x6c52fa20, + 0x2b5d4: 0x6c52fc20, 0x2b5d5: 0x6ccad220, 0x2b5d6: 0x6ccad420, 0x2b5d7: 0x6d284220, + 0x2b5d8: 0x6dc85c20, 0x2b5d9: 0x6c12c220, 0x2b5da: 0x6c37ca20, 0x2b5db: 0x6c37cc20, + 0x2b5dc: 0x6c37ce20, 0x2b5dd: 0x6c37d020, 0x2b5de: 0x6c530820, 0x2b5df: 0x6c530a20, + 0x2b5e0: 0x6c530c20, 0x2b5e1: 0x6c75a820, 0x2b5e2: 0x6c9de820, 0x2b5e3: 0x6c9dea20, + 0x2b5e4: 0x6ccaf820, 0x2b5e5: 0x6ccafa20, 0x2b5e6: 0x6ccafc20, 0x2b5e7: 0x6ccafe20, + 0x2b5e8: 0x6ccb0020, 0x2b5e9: 0x6ccb0220, 0x2b5ea: 0x6cf92220, 0x2b5eb: 0x6cf92420, + 0x2b5ec: 0x6cf92620, 0x2b5ed: 0x6cf92820, 0x2b5ee: 0x6cf92a20, 0x2b5ef: 0x6d285020, + 0x2b5f0: 0x6d285220, 0x2b5f1: 0x6d285420, 0x2b5f2: 0x6d285620, 0x2b5f3: 0x6d559a20, + 0x2b5f4: 0x6d559c20, 0x2b5f5: 0x6d810220, 0x2b5f6: 0x6d810420, 0x2b5f7: 0x6d810620, + 0x2b5f8: 0x6da71e20, 0x2b5f9: 0x6dfba420, 0x2b5fa: 0x6dfba620, 0x2b5fb: 0x6e297e20, + 0x2b5fc: 0x6c227420, 0x2b5fd: 0x6c380420, 0x2b5fe: 0x6c75dc20, 0x2b5ff: 0x6c75de20, + // Block 0xad8, offset 0x2b600 + 0x2b600: 0x6c9e2020, 0x2b601: 0x6ccb4a20, 0x2b602: 0x6ccb4c20, 0x2b603: 0x6ccb4e20, + 0x2b604: 0x6cf95620, 0x2b605: 0x6d287620, 0x2b606: 0x6d812820, 0x2b607: 0x6d812a20, + 0x2b608: 0x6d812c20, 0x2b609: 0x6da73620, 0x2b60a: 0x6dc87e20, 0x2b60b: 0x6c535620, + 0x2b60c: 0x6c12da20, 0x2b60d: 0x6c382020, 0x2b60e: 0x6c382220, 0x2b60f: 0x6c382420, + 0x2b610: 0x6c382620, 0x2b611: 0x6c382820, 0x2b612: 0x6c535e20, 0x2b613: 0x6c75f620, + 0x2b614: 0x6c9e5420, 0x2b615: 0x6c9e5620, 0x2b616: 0x6c9e5820, 0x2b617: 0x6c9e5a20, + 0x2b618: 0x6c9e5c20, 0x2b619: 0x6c9e5e20, 0x2b61a: 0x6c9e6020, 0x2b61b: 0x6ccb6a20, + 0x2b61c: 0x6ccb6c20, 0x2b61d: 0x6ccb6e20, 0x2b61e: 0x6ccb7020, 0x2b61f: 0x6cf98220, + 0x2b620: 0x6cf98420, 0x2b621: 0x6cf98620, 0x2b622: 0x6cf98820, 0x2b623: 0x6cf98a20, + 0x2b624: 0x6d289e20, 0x2b625: 0x6d28a020, 0x2b626: 0x6d28a220, 0x2b627: 0x6d28a420, + 0x2b628: 0x6d28a620, 0x2b629: 0x6d28a820, 0x2b62a: 0x6d815c20, 0x2b62b: 0x6d815e20, + 0x2b62c: 0x6d816020, 0x2b62d: 0x6d816220, 0x2b62e: 0x6d816420, 0x2b62f: 0x6dc89220, + 0x2b630: 0x6dc89420, 0x2b631: 0x6de4a220, 0x2b632: 0x6e3d4820, 0x2b633: 0x6c763820, + 0x2b634: 0x6c385620, 0x2b635: 0x6c9ea020, 0x2b636: 0x6d561220, 0x2b637: 0x6d819620, + 0x2b638: 0x6c04c820, 0x2b639: 0x6c099620, 0x2b63a: 0x6c099820, 0x2b63b: 0x6c12f420, + 0x2b63c: 0x6c099a20, 0x2b63d: 0x6c12fa20, 0x2b63e: 0x6c22a020, 0x2b63f: 0x6c12fc20, + // Block 0xad9, offset 0x2b640 + 0x2b640: 0x6c22a620, 0x2b641: 0x6c22a820, 0x2b642: 0x6c22aa20, 0x2b643: 0x6c22ac20, + 0x2b644: 0x6c22ae20, 0x2b645: 0x6c22b020, 0x2b646: 0x6c22b220, 0x2b647: 0x6c22b420, + 0x2b648: 0x6c22b620, 0x2b649: 0x6c22b820, 0x2b64a: 0x6c22ba20, 0x2b64b: 0x6c387020, + 0x2b64c: 0x6c387220, 0x2b64d: 0x6c387420, 0x2b64e: 0x6c387620, 0x2b64f: 0x6c387820, + 0x2b650: 0x6c387a20, 0x2b651: 0x6c387c20, 0x2b652: 0x6c387e20, 0x2b653: 0x6c388020, + 0x2b654: 0x6c388220, 0x2b655: 0x6c388420, 0x2b656: 0x6c53d820, 0x2b657: 0x6c53da20, + 0x2b658: 0x6c53dc20, 0x2b659: 0x6c53de20, 0x2b65a: 0x6c53e020, 0x2b65b: 0x6c53e220, + 0x2b65c: 0x6c53e420, 0x2b65d: 0x6c53e620, 0x2b65e: 0x6c53e820, 0x2b65f: 0x6c9eaa20, + 0x2b660: 0x6c53ea20, 0x2b661: 0x6c53ec20, 0x2b662: 0x6c53ee20, 0x2b663: 0x6c53f020, + 0x2b664: 0x6c765220, 0x2b665: 0x6c765420, 0x2b666: 0x6c765620, 0x2b667: 0x6c765820, + 0x2b668: 0x6c765a20, 0x2b669: 0x6c765c20, 0x2b66a: 0x6c765e20, 0x2b66b: 0x6c9eac20, + 0x2b66c: 0x6c766020, 0x2b66d: 0x6c766220, 0x2b66e: 0x6c766420, 0x2b66f: 0x6c766620, + 0x2b670: 0x6c766820, 0x2b671: 0x6c766a20, 0x2b672: 0x6c766c20, 0x2b673: 0x6c766e20, + 0x2b674: 0x6c9eb020, 0x2b675: 0x6c9eb220, 0x2b676: 0x6c9eb420, 0x2b677: 0x6c9eb620, + 0x2b678: 0x6c9eb820, 0x2b679: 0x6c9eba20, 0x2b67a: 0x6c9ebc20, 0x2b67b: 0x6c9ebe20, + 0x2b67c: 0x6ccbd620, 0x2b67d: 0x6c9ec020, 0x2b67e: 0x6c9ec220, 0x2b67f: 0x6c9ec420, + // Block 0xada, offset 0x2b680 + 0x2b680: 0x6c9ec620, 0x2b681: 0x6c9ec820, 0x2b682: 0x6c9eca20, 0x2b683: 0x6c9ecc20, + 0x2b684: 0x6c9ece20, 0x2b685: 0x6ccbd820, 0x2b686: 0x6c9ed020, 0x2b687: 0x6ccbda20, + 0x2b688: 0x6c9ed220, 0x2b689: 0x6c9ed420, 0x2b68a: 0x6c9ed620, 0x2b68b: 0x6c9ed820, + 0x2b68c: 0x6c9eda20, 0x2b68d: 0x6c9edc20, 0x2b68e: 0x6c9ede20, 0x2b68f: 0x6ccbe020, + 0x2b690: 0x6ccbe220, 0x2b691: 0x6ccbe420, 0x2b692: 0x6ccbe620, 0x2b693: 0x6ccbe820, + 0x2b694: 0x6ccbea20, 0x2b695: 0x6ccbec20, 0x2b696: 0x6ccbee20, 0x2b697: 0x6ccbf020, + 0x2b698: 0x6ccbf220, 0x2b699: 0x6ccbf420, 0x2b69a: 0x6ccbf620, 0x2b69b: 0x6ccbf820, + 0x2b69c: 0x6ccbfa20, 0x2b69d: 0x6ccbfc20, 0x2b69e: 0x6ccbfe20, 0x2b69f: 0x6ccc0020, + 0x2b6a0: 0x6ccc0220, 0x2b6a1: 0x6ccc0420, 0x2b6a2: 0x6ccc0620, 0x2b6a3: 0x6ccc0820, + 0x2b6a4: 0x6ccc0a20, 0x2b6a5: 0x6cf9e420, 0x2b6a6: 0x6cf9e620, 0x2b6a7: 0x6cf9e820, + 0x2b6a8: 0x6cf9ea20, 0x2b6a9: 0x6cf9ec20, 0x2b6aa: 0x6cf9ee20, 0x2b6ab: 0x6cf9f020, + 0x2b6ac: 0x6cf9f220, 0x2b6ad: 0x6cf9f420, 0x2b6ae: 0x6cf9f620, 0x2b6af: 0x6cf9f820, + 0x2b6b0: 0x6cf9fa20, 0x2b6b1: 0x6cf9fc20, 0x2b6b2: 0x6cf9fe20, 0x2b6b3: 0x6cfa0020, + 0x2b6b4: 0x6cfa0220, 0x2b6b5: 0x6cfa0420, 0x2b6b6: 0x6cfa0620, 0x2b6b7: 0x6cfa0820, + 0x2b6b8: 0x6cfa0a20, 0x2b6b9: 0x6cfa0c20, 0x2b6ba: 0x6cfa0e20, 0x2b6bb: 0x6cfa1020, + 0x2b6bc: 0x6d28f620, 0x2b6bd: 0x6d28f820, 0x2b6be: 0x6d28fa20, 0x2b6bf: 0x6d28fc20, + // Block 0xadb, offset 0x2b6c0 + 0x2b6c0: 0x6d28fe20, 0x2b6c1: 0x6d290020, 0x2b6c2: 0x6d290220, 0x2b6c3: 0x6d290420, + 0x2b6c4: 0x6d290620, 0x2b6c5: 0x6d290820, 0x2b6c6: 0x6d290a20, 0x2b6c7: 0x6d290c20, + 0x2b6c8: 0x6d290e20, 0x2b6c9: 0x6d291020, 0x2b6ca: 0x6d562420, 0x2b6cb: 0x6d562620, + 0x2b6cc: 0x6d562820, 0x2b6cd: 0x6d562a20, 0x2b6ce: 0x6d562c20, 0x2b6cf: 0x6d562e20, + 0x2b6d0: 0x6d563020, 0x2b6d1: 0x6d563220, 0x2b6d2: 0x6d563420, 0x2b6d3: 0x6d563620, + 0x2b6d4: 0x6d563820, 0x2b6d5: 0x6d563a20, 0x2b6d6: 0x6d563c20, 0x2b6d7: 0x6d563e20, + 0x2b6d8: 0x6d819820, 0x2b6d9: 0x6d564020, 0x2b6da: 0x6d564220, 0x2b6db: 0x6d564420, + 0x2b6dc: 0x6d564620, 0x2b6dd: 0x6d819e20, 0x2b6de: 0x6d81a020, 0x2b6df: 0x6d81a220, + 0x2b6e0: 0x6d81a420, 0x2b6e1: 0x6d81a620, 0x2b6e2: 0x6d81a820, 0x2b6e3: 0x6d81aa20, + 0x2b6e4: 0x6d81ac20, 0x2b6e5: 0x6d81ae20, 0x2b6e6: 0x6d81b020, 0x2b6e7: 0x6d81b220, + 0x2b6e8: 0x6da77620, 0x2b6e9: 0x6d81b420, 0x2b6ea: 0x6d81b620, 0x2b6eb: 0x6d81b820, + 0x2b6ec: 0x6d81ba20, 0x2b6ed: 0x6d81bc20, 0x2b6ee: 0x6d81be20, 0x2b6ef: 0x6da77c20, + 0x2b6f0: 0x6da77e20, 0x2b6f1: 0x6da78020, 0x2b6f2: 0x6da78220, 0x2b6f3: 0x6da78420, + 0x2b6f4: 0x6da78620, 0x2b6f5: 0x6da78820, 0x2b6f6: 0x6da78a20, 0x2b6f7: 0x6da78c20, + 0x2b6f8: 0x6da78e20, 0x2b6f9: 0x6da79020, 0x2b6fa: 0x6da79220, 0x2b6fb: 0x6da79420, + 0x2b6fc: 0x6da79620, 0x2b6fd: 0x6dc8c420, 0x2b6fe: 0x6dc8c620, 0x2b6ff: 0x6dc8c820, + // Block 0xadc, offset 0x2b700 + 0x2b700: 0x6dc8ca20, 0x2b701: 0x6dc8cc20, 0x2b702: 0x6dc8ce20, 0x2b703: 0x6dc8d020, + 0x2b704: 0x6de4b220, 0x2b705: 0x6de4b420, 0x2b706: 0x6de4b620, 0x2b707: 0x6de4b820, + 0x2b708: 0x6de4ba20, 0x2b709: 0x6de4bc20, 0x2b70a: 0x6de4be20, 0x2b70b: 0x6de4c020, + 0x2b70c: 0x6dfbc420, 0x2b70d: 0x6dfbc620, 0x2b70e: 0x6dfbc820, 0x2b70f: 0x6dfbca20, + 0x2b710: 0x6dfbcc20, 0x2b711: 0x6dfbce20, 0x2b712: 0x6e0efa20, 0x2b713: 0x6e0efc20, + 0x2b714: 0x6e0efe20, 0x2b715: 0x6e0f0020, 0x2b716: 0x6e0f0220, 0x2b717: 0x6e1e2e20, + 0x2b718: 0x6e0f0420, 0x2b719: 0x6e1e3020, 0x2b71a: 0x6e1e3220, 0x2b71b: 0x6e299820, + 0x2b71c: 0x6e299a20, 0x2b71d: 0x6e299c20, 0x2b71e: 0x6e329e20, 0x2b71f: 0x6e32a020, + 0x2b720: 0x6e3d5020, 0x2b721: 0x6c135620, 0x2b722: 0x6c135820, 0x2b723: 0x6c238a20, + 0x2b724: 0x6c238c20, 0x2b725: 0x6c238e20, 0x2b726: 0x6c399420, 0x2b727: 0x6c399620, + 0x2b728: 0x6c399820, 0x2b729: 0x6c399a20, 0x2b72a: 0x6c399c20, 0x2b72b: 0x6c551820, + 0x2b72c: 0x6c551a20, 0x2b72d: 0x6c551c20, 0x2b72e: 0x6c551e20, 0x2b72f: 0x6c552020, + 0x2b730: 0x6c552220, 0x2b731: 0x6c552420, 0x2b732: 0x6c552620, 0x2b733: 0x6c77ea20, + 0x2b734: 0x6c77ec20, 0x2b735: 0x6c77ee20, 0x2b736: 0x6c77f020, 0x2b737: 0x6c77f220, + 0x2b738: 0x6c77f420, 0x2b739: 0x6ca0de20, 0x2b73a: 0x6ca0e020, 0x2b73b: 0x6ca0e220, + 0x2b73c: 0x6ca0e420, 0x2b73d: 0x6ca0e620, 0x2b73e: 0x6ca0e820, 0x2b73f: 0x6ca0ea20, + // Block 0xadd, offset 0x2b740 + 0x2b740: 0x6ca0ec20, 0x2b741: 0x6ca0ee20, 0x2b742: 0x6ccdde20, 0x2b743: 0x6ccde020, + 0x2b744: 0x6ccde220, 0x2b745: 0x6ccde420, 0x2b746: 0x6ccde620, 0x2b747: 0x6ccde820, + 0x2b748: 0x6ccdea20, 0x2b749: 0x6ccdec20, 0x2b74a: 0x6ccdee20, 0x2b74b: 0x6ccdf020, + 0x2b74c: 0x6ccdf220, 0x2b74d: 0x6ccdf420, 0x2b74e: 0x6cfbda20, 0x2b74f: 0x6cfbdc20, + 0x2b750: 0x6cfbde20, 0x2b751: 0x6cfbe020, 0x2b752: 0x6cfbe220, 0x2b753: 0x6cfbe420, + 0x2b754: 0x6cfbe620, 0x2b755: 0x6cfbe820, 0x2b756: 0x6cfbea20, 0x2b757: 0x6cfbec20, + 0x2b758: 0x6cfbee20, 0x2b759: 0x6cfbf020, 0x2b75a: 0x6cfbf220, 0x2b75b: 0x6cfbf420, + 0x2b75c: 0x6cfbf620, 0x2b75d: 0x6cfbf820, 0x2b75e: 0x6cfbfa20, 0x2b75f: 0x6d2ad220, + 0x2b760: 0x6d2ad420, 0x2b761: 0x6d2ad620, 0x2b762: 0x6d2ad820, 0x2b763: 0x6d2ada20, + 0x2b764: 0x6d2adc20, 0x2b765: 0x6d2ade20, 0x2b766: 0x6d2ae020, 0x2b767: 0x6d2ae220, + 0x2b768: 0x6d2ae420, 0x2b769: 0x6d2ae620, 0x2b76a: 0x6d2ae820, 0x2b76b: 0x6d580e20, + 0x2b76c: 0x6d581020, 0x2b76d: 0x6d581220, 0x2b76e: 0x6d581420, 0x2b76f: 0x6d581620, + 0x2b770: 0x6d581820, 0x2b771: 0x6d581a20, 0x2b772: 0x6d581c20, 0x2b773: 0x6d82fe20, + 0x2b774: 0x6d830020, 0x2b775: 0x6d830220, 0x2b776: 0x6d830420, 0x2b777: 0x6d830620, + 0x2b778: 0x6d830820, 0x2b779: 0x6d830a20, 0x2b77a: 0x6d830c20, 0x2b77b: 0x6d830e20, + 0x2b77c: 0x6d831020, 0x2b77d: 0x6d831220, 0x2b77e: 0x6da87020, 0x2b77f: 0x6da87220, + // Block 0xade, offset 0x2b780 + 0x2b780: 0x6da87420, 0x2b781: 0x6da87620, 0x2b782: 0x6da87820, 0x2b783: 0x6da87a20, + 0x2b784: 0x6dc9ba20, 0x2b785: 0x6dc9bc20, 0x2b786: 0x6de57220, 0x2b787: 0x6de57420, + 0x2b788: 0x6dfc4a20, 0x2b789: 0x6de57620, 0x2b78a: 0x6dfc4c20, 0x2b78b: 0x6dfc4e20, + 0x2b78c: 0x6dfc5020, 0x2b78d: 0x6e0f7c20, 0x2b78e: 0x6e1e6e20, 0x2b78f: 0x6e29d620, + 0x2b790: 0x6e29d820, 0x2b791: 0x6e3d6620, 0x2b792: 0x6c3a2420, 0x2b793: 0x6c3a2620, + 0x2b794: 0x6ca1ce20, 0x2b795: 0x6d2bda20, 0x2b796: 0x6c561420, 0x2b797: 0x6c78d420, + 0x2b798: 0x6ca1da20, 0x2b799: 0x6cfd3e20, 0x2b79a: 0x6c3a4020, 0x2b79b: 0x6c561e20, + 0x2b79c: 0x6ccf2820, 0x2b79d: 0x6c3a4e20, 0x2b79e: 0x6c3a5020, 0x2b79f: 0x6c78ee20, + 0x2b7a0: 0x6c78f020, 0x2b7a1: 0x6c78f220, 0x2b7a2: 0x6d2bfa20, 0x2b7a3: 0x6da93c20, + 0x2b7a4: 0x6dca4420, 0x2b7a5: 0x6e0fb620, 0x2b7a6: 0x6c04ea20, 0x2b7a7: 0x6c790220, + 0x2b7a8: 0x6c137e20, 0x2b7a9: 0x6c23e820, 0x2b7aa: 0x6c23ea20, 0x2b7ab: 0x6c3a6220, + 0x2b7ac: 0x6c3a6420, 0x2b7ad: 0x6c3a6620, 0x2b7ae: 0x6c3a6820, 0x2b7af: 0x6c3a6a20, + 0x2b7b0: 0x6c564220, 0x2b7b1: 0x6c564420, 0x2b7b2: 0x6c564620, 0x2b7b3: 0x6c564820, + 0x2b7b4: 0x6c564a20, 0x2b7b5: 0x6c790820, 0x2b7b6: 0x6c790a20, 0x2b7b7: 0x6c790c20, + 0x2b7b8: 0x6c790e20, 0x2b7b9: 0x6ca20e20, 0x2b7ba: 0x6ca21020, 0x2b7bb: 0x6ca21220, + 0x2b7bc: 0x6ca21420, 0x2b7bd: 0x6ca21620, 0x2b7be: 0x6ca21820, 0x2b7bf: 0x6ca21a20, + // Block 0xadf, offset 0x2b7c0 + 0x2b7c0: 0x6ca21c20, 0x2b7c1: 0x6ccf7220, 0x2b7c2: 0x6ccf7420, 0x2b7c3: 0x6ccf7620, + 0x2b7c4: 0x6d2c0e20, 0x2b7c5: 0x6cfd7020, 0x2b7c6: 0x6cfd7220, 0x2b7c7: 0x6cfd7420, + 0x2b7c8: 0x6cfd7620, 0x2b7c9: 0x6d2c1020, 0x2b7ca: 0x6d2c1220, 0x2b7cb: 0x6d2c1420, + 0x2b7cc: 0x6d594620, 0x2b7cd: 0x6d594820, 0x2b7ce: 0x6d594a20, 0x2b7cf: 0x6d594c20, + 0x2b7d0: 0x6d594e20, 0x2b7d1: 0x6d845220, 0x2b7d2: 0x6d845420, 0x2b7d3: 0x6d845620, + 0x2b7d4: 0x6da94820, 0x2b7d5: 0x6da94a20, 0x2b7d6: 0x6da94c20, 0x2b7d7: 0x6dca5020, + 0x2b7d8: 0x6dca5220, 0x2b7d9: 0x6de5e420, 0x2b7da: 0x6e0fba20, 0x2b7db: 0x6e1e9a20, + 0x2b7dc: 0x6c3ab420, 0x2b7dd: 0x6c240220, 0x2b7de: 0x6c240420, 0x2b7df: 0x6c240620, + 0x2b7e0: 0x6c240820, 0x2b7e1: 0x6c3ab820, 0x2b7e2: 0x6c3aba20, 0x2b7e3: 0x6c3abc20, + 0x2b7e4: 0x6c3abe20, 0x2b7e5: 0x6c3ac020, 0x2b7e6: 0x6c3ac220, 0x2b7e7: 0x6c3ac420, + 0x2b7e8: 0x6c3ac620, 0x2b7e9: 0x6c3ac820, 0x2b7ea: 0x6c3aca20, 0x2b7eb: 0x6c569820, + 0x2b7ec: 0x6c569a20, 0x2b7ed: 0x6c569c20, 0x2b7ee: 0x6c569e20, 0x2b7ef: 0x6c56a020, + 0x2b7f0: 0x6c56a220, 0x2b7f1: 0x6c793420, 0x2b7f2: 0x6c793620, 0x2b7f3: 0x6c793820, + 0x2b7f4: 0x6c793a20, 0x2b7f5: 0x6c793c20, 0x2b7f6: 0x6c793e20, 0x2b7f7: 0x6c794020, + 0x2b7f8: 0x6c794220, 0x2b7f9: 0x6ca25420, 0x2b7fa: 0x6ca25620, 0x2b7fb: 0x6ca25820, + 0x2b7fc: 0x6ca25a20, 0x2b7fd: 0x6ca25c20, 0x2b7fe: 0x6ca25e20, 0x2b7ff: 0x6ca26020, + // Block 0xae0, offset 0x2b800 + 0x2b800: 0x6ca26220, 0x2b801: 0x6ccfd820, 0x2b802: 0x6ccfda20, 0x2b803: 0x6ccfdc20, + 0x2b804: 0x6ccfde20, 0x2b805: 0x6ccfe020, 0x2b806: 0x6ccfe220, 0x2b807: 0x6cfdc420, + 0x2b808: 0x6cfdc620, 0x2b809: 0x6cfdc820, 0x2b80a: 0x6cfdca20, 0x2b80b: 0x6cfdcc20, + 0x2b80c: 0x6cfdce20, 0x2b80d: 0x6cfdd020, 0x2b80e: 0x6d2c6c20, 0x2b80f: 0x6d2c6e20, + 0x2b810: 0x6d2c7020, 0x2b811: 0x6d2c7220, 0x2b812: 0x6d2c7420, 0x2b813: 0x6d2c7620, + 0x2b814: 0x6d598820, 0x2b815: 0x6d598a20, 0x2b816: 0x6d598c20, 0x2b817: 0x6d598e20, + 0x2b818: 0x6d599020, 0x2b819: 0x6d599220, 0x2b81a: 0x6d848020, 0x2b81b: 0x6d848220, + 0x2b81c: 0x6d848420, 0x2b81d: 0x6da96420, 0x2b81e: 0x6da96620, 0x2b81f: 0x6da96820, + 0x2b820: 0x6dca5820, 0x2b821: 0x6de60220, 0x2b822: 0x6de60420, 0x2b823: 0x6dfce820, + 0x2b824: 0x6dfcea20, 0x2b825: 0x6dfcec20, 0x2b826: 0x6dfcee20, 0x2b827: 0x6e32d420, + 0x2b828: 0x6c13b620, 0x2b829: 0x6c13b820, 0x2b82a: 0x6c13ba20, 0x2b82b: 0x6c13bc20, + 0x2b82c: 0x6c246c20, 0x2b82d: 0x6c246e20, 0x2b82e: 0x6c247020, 0x2b82f: 0x6c247220, + 0x2b830: 0x6c3b3820, 0x2b831: 0x6c572a20, 0x2b832: 0x6c3b3a20, 0x2b833: 0x6c3b3c20, + 0x2b834: 0x6c3b3e20, 0x2b835: 0x6c3b4020, 0x2b836: 0x6c3b4220, 0x2b837: 0x6c572c20, + 0x2b838: 0x6c79bc20, 0x2b839: 0x6c572e20, 0x2b83a: 0x6c573020, 0x2b83b: 0x6c573220, + 0x2b83c: 0x6c573420, 0x2b83d: 0x6c573620, 0x2b83e: 0x6c573820, 0x2b83f: 0x6c79c220, + // Block 0xae1, offset 0x2b840 + 0x2b840: 0x6c79c420, 0x2b841: 0x6c79c620, 0x2b842: 0x6c79c820, 0x2b843: 0x6c79ca20, + 0x2b844: 0x6c79cc20, 0x2b845: 0x6c79ce20, 0x2b846: 0x6c79d020, 0x2b847: 0x6c79d220, + 0x2b848: 0x6c79d420, 0x2b849: 0x6ca2da20, 0x2b84a: 0x6ca2dc20, 0x2b84b: 0x6ca2de20, + 0x2b84c: 0x6ca2e020, 0x2b84d: 0x6ca2e220, 0x2b84e: 0x6ca2e420, 0x2b84f: 0x6ca2e620, + 0x2b850: 0x6ca2e820, 0x2b851: 0x6cd07620, 0x2b852: 0x6cd07820, 0x2b853: 0x6cd07a20, + 0x2b854: 0x6cd07c20, 0x2b855: 0x6cd07e20, 0x2b856: 0x6cd08020, 0x2b857: 0x6cfe4a20, + 0x2b858: 0x6cd08220, 0x2b859: 0x6cd08420, 0x2b85a: 0x6cd08620, 0x2b85b: 0x6cd08820, + 0x2b85c: 0x6cd08a20, 0x2b85d: 0x6cfe4e20, 0x2b85e: 0x6cfe5020, 0x2b85f: 0x6cfe5220, + 0x2b860: 0x6cfe5420, 0x2b861: 0x6cfe5620, 0x2b862: 0x6cfe5820, 0x2b863: 0x6cfe5a20, + 0x2b864: 0x6cfe5c20, 0x2b865: 0x6cfe5e20, 0x2b866: 0x6cfe6020, 0x2b867: 0x6d2ce220, + 0x2b868: 0x6d2ce420, 0x2b869: 0x6d2ce620, 0x2b86a: 0x6d2ce820, 0x2b86b: 0x6d5a0a20, + 0x2b86c: 0x6d5a0c20, 0x2b86d: 0x6d5a0e20, 0x2b86e: 0x6d5a1020, 0x2b86f: 0x6d5a1220, + 0x2b870: 0x6d5a1420, 0x2b871: 0x6d5a1620, 0x2b872: 0x6d5a1820, 0x2b873: 0x6d5a1a20, + 0x2b874: 0x6d5a1c20, 0x2b875: 0x6d84ce20, 0x2b876: 0x6d84d020, 0x2b877: 0x6d84d220, + 0x2b878: 0x6d84d420, 0x2b879: 0x6da99620, 0x2b87a: 0x6da99820, 0x2b87b: 0x6d84d620, + 0x2b87c: 0x6d84d820, 0x2b87d: 0x6da99e20, 0x2b87e: 0x6dca8420, 0x2b87f: 0x6da9a020, + // Block 0xae2, offset 0x2b880 + 0x2b880: 0x6da9a220, 0x2b881: 0x6da9a420, 0x2b882: 0x6dca8620, 0x2b883: 0x6de62020, + 0x2b884: 0x6de62220, 0x2b885: 0x6de62420, 0x2b886: 0x6de62620, 0x2b887: 0x6dfcfe20, + 0x2b888: 0x6e2a1a20, 0x2b889: 0x6c57c620, 0x2b88a: 0x6c57c820, 0x2b88b: 0x6c7a7420, + 0x2b88c: 0x6c7a7620, 0x2b88d: 0x6ca37c20, 0x2b88e: 0x6ca37e20, 0x2b88f: 0x6cd16020, + 0x2b890: 0x6d2d8620, 0x2b891: 0x6d2d8820, 0x2b892: 0x6d2d8a20, 0x2b893: 0x6d5ab220, + 0x2b894: 0x6d5ab420, 0x2b895: 0x6dcae220, 0x2b896: 0x6e3d7020, 0x2b897: 0x6c24a020, + 0x2b898: 0x6c3bb220, 0x2b899: 0x6c3bb420, 0x2b89a: 0x6c57d620, 0x2b89b: 0x6c57d820, + 0x2b89c: 0x6c7a8620, 0x2b89d: 0x6c7a8820, 0x2b89e: 0x6c7a8a20, 0x2b89f: 0x6c7a8c20, + 0x2b8a0: 0x6c7a8e20, 0x2b8a1: 0x6ca38c20, 0x2b8a2: 0x6ca38e20, 0x2b8a3: 0x6ca39020, + 0x2b8a4: 0x6ca39220, 0x2b8a5: 0x6ca39420, 0x2b8a6: 0x6ca39620, 0x2b8a7: 0x6cd17020, + 0x2b8a8: 0x6cd17220, 0x2b8a9: 0x6cd17420, 0x2b8aa: 0x6cd17620, 0x2b8ab: 0x6cff5220, + 0x2b8ac: 0x6cff5420, 0x2b8ad: 0x6cff5620, 0x2b8ae: 0x6cff5820, 0x2b8af: 0x6cff5a20, + 0x2b8b0: 0x6cff5c20, 0x2b8b1: 0x6cff5e20, 0x2b8b2: 0x6d2d9820, 0x2b8b3: 0x6d2d9a20, + 0x2b8b4: 0x6d2d9c20, 0x2b8b5: 0x6d2d9e20, 0x2b8b6: 0x6d2da020, 0x2b8b7: 0x6d2da220, + 0x2b8b8: 0x6d5ac620, 0x2b8b9: 0x6d5ac820, 0x2b8ba: 0x6d5aca20, 0x2b8bb: 0x6d857220, + 0x2b8bc: 0x6d857420, 0x2b8bd: 0x6d857620, 0x2b8be: 0x6d857820, 0x2b8bf: 0x6daa1220, + // Block 0xae3, offset 0x2b8c0 + 0x2b8c0: 0x6daa1420, 0x2b8c1: 0x6daa1620, 0x2b8c2: 0x6daa1820, 0x2b8c3: 0x6daa1a20, + 0x2b8c4: 0x6daa1c20, 0x2b8c5: 0x6daa1e20, 0x2b8c6: 0x6dcaea20, 0x2b8c7: 0x6dcaec20, + 0x2b8c8: 0x6de66a20, 0x2b8c9: 0x6de66c20, 0x2b8ca: 0x6e1ecc20, 0x2b8cb: 0x6e32e820, + 0x2b8cc: 0x6e392220, 0x2b8cd: 0x6c7aae20, 0x2b8ce: 0x6cff8820, 0x2b8cf: 0x6d2dd220, + 0x2b8d0: 0x6d5af020, 0x2b8d1: 0x6daa3a20, 0x2b8d2: 0x6cd1a220, 0x2b8d3: 0x6d5af620, + 0x2b8d4: 0x6d859a20, 0x2b8d5: 0x6c24b020, 0x2b8d6: 0x6c24b220, 0x2b8d7: 0x6c24b420, + 0x2b8d8: 0x6c581e20, 0x2b8d9: 0x6c582020, 0x2b8da: 0x6c582220, 0x2b8db: 0x6c7aba20, + 0x2b8dc: 0x6c7abc20, 0x2b8dd: 0x6ca3d220, 0x2b8de: 0x6ca3d420, 0x2b8df: 0x6cd1ba20, + 0x2b8e0: 0x6cd1bc20, 0x2b8e1: 0x6cffa220, 0x2b8e2: 0x6cffa420, 0x2b8e3: 0x6cffa620, + 0x2b8e4: 0x6cffa820, 0x2b8e5: 0x6d2de020, 0x2b8e6: 0x6d5afe20, 0x2b8e7: 0x6d5b0020, + 0x2b8e8: 0x6d5b0220, 0x2b8e9: 0x6d859e20, 0x2b8ea: 0x6daa4420, 0x2b8eb: 0x6dcb0a20, + 0x2b8ec: 0x6dcb0c20, 0x2b8ed: 0x6de67e20, 0x2b8ee: 0x6dfd3420, 0x2b8ef: 0x6e2a4020, + 0x2b8f0: 0x6cfff020, 0x2b8f1: 0x6c24d420, 0x2b8f2: 0x6c24d620, 0x2b8f3: 0x6c3c1820, + 0x2b8f4: 0x6c3c1a20, 0x2b8f5: 0x6c3c1c20, 0x2b8f6: 0x6c3c1e20, 0x2b8f7: 0x6c589020, + 0x2b8f8: 0x6c589220, 0x2b8f9: 0x6c589420, 0x2b8fa: 0x6c589620, 0x2b8fb: 0x6c589820, + 0x2b8fc: 0x6c589a20, 0x2b8fd: 0x6c7b1220, 0x2b8fe: 0x6c7b1420, 0x2b8ff: 0x6c7b1620, + // Block 0xae4, offset 0x2b900 + 0x2b900: 0x6c7b1820, 0x2b901: 0x6c7b1a20, 0x2b902: 0x6c7b1c20, 0x2b903: 0x6c7b1e20, + 0x2b904: 0x6c7b2020, 0x2b905: 0x6c7b2220, 0x2b906: 0x6c7b2420, 0x2b907: 0x6c7b2620, + 0x2b908: 0x6c7b2820, 0x2b909: 0x6c7b2a20, 0x2b90a: 0x6ca41c20, 0x2b90b: 0x6ca41e20, + 0x2b90c: 0x6ca42020, 0x2b90d: 0x6ca42220, 0x2b90e: 0x6ca42420, 0x2b90f: 0x6ca42620, + 0x2b910: 0x6ca42820, 0x2b911: 0x6ca42a20, 0x2b912: 0x6ca42c20, 0x2b913: 0x6cd21220, + 0x2b914: 0x6cd21420, 0x2b915: 0x6cd21620, 0x2b916: 0x6cd21820, 0x2b917: 0x6cd21a20, + 0x2b918: 0x6cd21c20, 0x2b919: 0x6cd21e20, 0x2b91a: 0x6cd22020, 0x2b91b: 0x6cd22220, + 0x2b91c: 0x6cd22420, 0x2b91d: 0x6cd22620, 0x2b91e: 0x6cd22820, 0x2b91f: 0x6cd22a20, + 0x2b920: 0x6cd22c20, 0x2b921: 0x6cd22e20, 0x2b922: 0x6cfff620, 0x2b923: 0x6cfff820, + 0x2b924: 0x6cfffa20, 0x2b925: 0x6cfffc20, 0x2b926: 0x6cfffe20, 0x2b927: 0x6d000020, + 0x2b928: 0x6d000220, 0x2b929: 0x6d000420, 0x2b92a: 0x6d2e0820, 0x2b92b: 0x6d2e0a20, + 0x2b92c: 0x6d2e0c20, 0x2b92d: 0x6d2e0e20, 0x2b92e: 0x6d2e1020, 0x2b92f: 0x6d2e1220, + 0x2b930: 0x6d2e1420, 0x2b931: 0x6d2e1620, 0x2b932: 0x6d2e1820, 0x2b933: 0x6d2e1a20, + 0x2b934: 0x6d2e1c20, 0x2b935: 0x6d2e1e20, 0x2b936: 0x6d5b3220, 0x2b937: 0x6d5b3420, + 0x2b938: 0x6d5b3620, 0x2b939: 0x6d5b3820, 0x2b93a: 0x6d5b3a20, 0x2b93b: 0x6d5b3c20, + 0x2b93c: 0x6d5b3e20, 0x2b93d: 0x6d5b4020, 0x2b93e: 0x6d5b4220, 0x2b93f: 0x6d5b4420, + // Block 0xae5, offset 0x2b940 + 0x2b940: 0x6d5b4620, 0x2b941: 0x6d5b4820, 0x2b942: 0x6d85c620, 0x2b943: 0x6d85c820, + 0x2b944: 0x6d85ca20, 0x2b945: 0x6d85cc20, 0x2b946: 0x6d85ce20, 0x2b947: 0x6d85d020, + 0x2b948: 0x6d85d220, 0x2b949: 0x6daa7020, 0x2b94a: 0x6daa7220, 0x2b94b: 0x6dcb2020, + 0x2b94c: 0x6dcb2220, 0x2b94d: 0x6dcb2420, 0x2b94e: 0x6dcb2620, 0x2b94f: 0x6dcb2820, + 0x2b950: 0x6dcb2a20, 0x2b951: 0x6de69620, 0x2b952: 0x6de69820, 0x2b953: 0x6de69a20, + 0x2b954: 0x6dfd4a20, 0x2b955: 0x6e101e20, 0x2b956: 0x6e102020, 0x2b957: 0x6e102220, + 0x2b958: 0x6e1ee820, 0x2b959: 0x6e2a4820, 0x2b95a: 0x6e32ee20, 0x2b95b: 0x6e32f020, + 0x2b95c: 0x6e42c820, 0x2b95d: 0x6c24f820, 0x2b95e: 0x6c590c20, 0x2b95f: 0x6c7baa20, + 0x2b960: 0x6ca48e20, 0x2b961: 0x6ca49020, 0x2b962: 0x6d00ba20, 0x2b963: 0x6d2ea820, + 0x2b964: 0x6d2eaa20, 0x2b965: 0x6d5bdc20, 0x2b966: 0x6d865220, 0x2b967: 0x6de6dc20, + 0x2b968: 0x6e104420, 0x2b969: 0x6e393020, 0x2b96a: 0x6c3c5420, 0x2b96b: 0x6c593a20, + 0x2b96c: 0x6c593c20, 0x2b96d: 0x6c7bd420, 0x2b96e: 0x6c7bd620, 0x2b96f: 0x6ca4a820, + 0x2b970: 0x6ca4aa20, 0x2b971: 0x6cd2ee20, 0x2b972: 0x6d00e420, 0x2b973: 0x6d00e620, + 0x2b974: 0x6d2ec820, 0x2b975: 0x6d2eca20, 0x2b976: 0x6d5bf820, 0x2b977: 0x6d5bfa20, + 0x2b978: 0x6d866420, 0x2b979: 0x6dcb9220, 0x2b97a: 0x6dfd8020, 0x2b97b: 0x6c3c6620, + 0x2b97c: 0x6c594e20, 0x2b97d: 0x6c595020, 0x2b97e: 0x6c7bf020, 0x2b97f: 0x6c7bf220, + // Block 0xae6, offset 0x2b980 + 0x2b980: 0x6c7bf420, 0x2b981: 0x6ca4be20, 0x2b982: 0x6ca4c020, 0x2b983: 0x6cd30a20, + 0x2b984: 0x6d010820, 0x2b985: 0x6d010a20, 0x2b986: 0x6d2ef220, 0x2b987: 0x6d867e20, + 0x2b988: 0x6d868020, 0x2b989: 0x6dab1e20, 0x2b98a: 0x6de6fa20, 0x2b98b: 0x6e105420, + 0x2b98c: 0x6e1f0820, 0x2b98d: 0x6e443e20, 0x2b98e: 0x6c251420, 0x2b98f: 0x6c251620, + 0x2b990: 0x6c3c7620, 0x2b991: 0x6c3c7820, 0x2b992: 0x6c3c7a20, 0x2b993: 0x6c3c7c20, + 0x2b994: 0x6c3c7e20, 0x2b995: 0x6c597420, 0x2b996: 0x6c597620, 0x2b997: 0x6c597820, + 0x2b998: 0x6c597a20, 0x2b999: 0x6c597c20, 0x2b99a: 0x6c597e20, 0x2b99b: 0x6c598020, + 0x2b99c: 0x6c598220, 0x2b99d: 0x6c598420, 0x2b99e: 0x6c598620, 0x2b99f: 0x6c7c2e20, + 0x2b9a0: 0x6c7c3020, 0x2b9a1: 0x6c7c3220, 0x2b9a2: 0x6c7c3420, 0x2b9a3: 0x6c7c3620, + 0x2b9a4: 0x6c7c3820, 0x2b9a5: 0x6c7c3a20, 0x2b9a6: 0x6c7c3c20, 0x2b9a7: 0x6ca4f220, + 0x2b9a8: 0x6ca4f420, 0x2b9a9: 0x6ca4f620, 0x2b9aa: 0x6ca4f820, 0x2b9ab: 0x6ca4fa20, + 0x2b9ac: 0x6ca4fc20, 0x2b9ad: 0x6ca4fe20, 0x2b9ae: 0x6ca50020, 0x2b9af: 0x6cd32c20, + 0x2b9b0: 0x6cd32e20, 0x2b9b1: 0x6cd33020, 0x2b9b2: 0x6cd33220, 0x2b9b3: 0x6cd33420, + 0x2b9b4: 0x6cd33620, 0x2b9b5: 0x6cd33820, 0x2b9b6: 0x6cd33a20, 0x2b9b7: 0x6cd33c20, + 0x2b9b8: 0x6cd33e20, 0x2b9b9: 0x6cd34020, 0x2b9ba: 0x6cd34220, 0x2b9bb: 0x6cd34420, + 0x2b9bc: 0x6cd34620, 0x2b9bd: 0x6cd34820, 0x2b9be: 0x6cd34a20, 0x2b9bf: 0x6cd34c20, + // Block 0xae7, offset 0x2b9c0 + 0x2b9c0: 0x6cd34e20, 0x2b9c1: 0x6d013020, 0x2b9c2: 0x6d013220, 0x2b9c3: 0x6d013420, + 0x2b9c4: 0x6d013620, 0x2b9c5: 0x6d013820, 0x2b9c6: 0x6d013a20, 0x2b9c7: 0x6d013c20, + 0x2b9c8: 0x6d013e20, 0x2b9c9: 0x6d014020, 0x2b9ca: 0x6d2f0820, 0x2b9cb: 0x6d2f0a20, + 0x2b9cc: 0x6d2f0c20, 0x2b9cd: 0x6d2f0e20, 0x2b9ce: 0x6d2f1020, 0x2b9cf: 0x6d2f1220, + 0x2b9d0: 0x6d2f1420, 0x2b9d1: 0x6d2f1620, 0x2b9d2: 0x6d2f1820, 0x2b9d3: 0x6d2f1a20, + 0x2b9d4: 0x6d2f1c20, 0x2b9d5: 0x6d2f1e20, 0x2b9d6: 0x6d2f2020, 0x2b9d7: 0x6d5c2820, + 0x2b9d8: 0x6d5c2a20, 0x2b9d9: 0x6d5c2c20, 0x2b9da: 0x6d5c2e20, 0x2b9db: 0x6d5c3020, + 0x2b9dc: 0x6d5c3220, 0x2b9dd: 0x6d5c3420, 0x2b9de: 0x6d5c3620, 0x2b9df: 0x6d5c3820, + 0x2b9e0: 0x6d5c3a20, 0x2b9e1: 0x6d5c3c20, 0x2b9e2: 0x6d86ae20, 0x2b9e3: 0x6d86b020, + 0x2b9e4: 0x6d86b220, 0x2b9e5: 0x6d86b420, 0x2b9e6: 0x6d86b620, 0x2b9e7: 0x6d86b820, + 0x2b9e8: 0x6d86ba20, 0x2b9e9: 0x6d86bc20, 0x2b9ea: 0x6d86be20, 0x2b9eb: 0x6dab4e20, + 0x2b9ec: 0x6dab5020, 0x2b9ed: 0x6dab5220, 0x2b9ee: 0x6dab5420, 0x2b9ef: 0x6dab5620, + 0x2b9f0: 0x6dab5820, 0x2b9f1: 0x6dab5a20, 0x2b9f2: 0x6dab5c20, 0x2b9f3: 0x6dab5e20, + 0x2b9f4: 0x6dcbbe20, 0x2b9f5: 0x6dcbc020, 0x2b9f6: 0x6dcbc220, 0x2b9f7: 0x6dcbc420, + 0x2b9f8: 0x6dcbc620, 0x2b9f9: 0x6dcbc820, 0x2b9fa: 0x6dcbca20, 0x2b9fb: 0x6dfda620, + 0x2b9fc: 0x6dfda820, 0x2b9fd: 0x6dfdaa20, 0x2b9fe: 0x6dfdac20, 0x2b9ff: 0x6e105c20, + // Block 0xae8, offset 0x2ba00 + 0x2ba00: 0x6e105e20, 0x2ba01: 0x6e1f1620, 0x2ba02: 0x6e2a6820, 0x2ba03: 0x6e2a6a20, + 0x2ba04: 0x6e393820, 0x2ba05: 0x6e452e20, 0x2ba06: 0x6c3cb220, 0x2ba07: 0x6c5a1a20, + 0x2ba08: 0x6ca59420, 0x2ba09: 0x6d2fce20, 0x2ba0a: 0x6dabea20, 0x2ba0b: 0x6dabec20, + 0x2ba0c: 0x6dabee20, 0x2ba0d: 0x6dfde020, 0x2ba0e: 0x6e332220, 0x2ba0f: 0x6c7ce420, + 0x2ba10: 0x6c7ce620, 0x2ba11: 0x6c7cfc20, 0x2ba12: 0x6ca59c20, 0x2ba13: 0x6cd40a20, + 0x2ba14: 0x6d020620, 0x2ba15: 0x6d2fe820, 0x2ba16: 0x6c13ee20, 0x2ba17: 0x6c253820, + 0x2ba18: 0x6c3cbc20, 0x2ba19: 0x6c3cbe20, 0x2ba1a: 0x6c5a3c20, 0x2ba1b: 0x6c5a3e20, + 0x2ba1c: 0x6c5a4020, 0x2ba1d: 0x6c5a4220, 0x2ba1e: 0x6c5a4420, 0x2ba1f: 0x6c7cfe20, + 0x2ba20: 0x6c7d0020, 0x2ba21: 0x6c7d0220, 0x2ba22: 0x6c7d0420, 0x2ba23: 0x6c7d0620, + 0x2ba24: 0x6c7d0820, 0x2ba25: 0x6c7d0a20, 0x2ba26: 0x6c7d0c20, 0x2ba27: 0x6c7d0e20, + 0x2ba28: 0x6c7d1020, 0x2ba29: 0x6ca5d020, 0x2ba2a: 0x6ca5d220, 0x2ba2b: 0x6ca5d420, + 0x2ba2c: 0x6ca5d620, 0x2ba2d: 0x6ca5d820, 0x2ba2e: 0x6ca5da20, 0x2ba2f: 0x6ca5dc20, + 0x2ba30: 0x6cd42620, 0x2ba31: 0x6cd42820, 0x2ba32: 0x6cd42a20, 0x2ba33: 0x6cd42c20, + 0x2ba34: 0x6cd42e20, 0x2ba35: 0x6cd43020, 0x2ba36: 0x6cd43220, 0x2ba37: 0x6d023020, + 0x2ba38: 0x6d023220, 0x2ba39: 0x6d023420, 0x2ba3a: 0x6d023620, 0x2ba3b: 0x6d023820, + 0x2ba3c: 0x6d023a20, 0x2ba3d: 0x6d023c20, 0x2ba3e: 0x6d023e20, 0x2ba3f: 0x6d024020, + // Block 0xae9, offset 0x2ba40 + 0x2ba40: 0x6d024220, 0x2ba41: 0x6d024420, 0x2ba42: 0x6d024620, 0x2ba43: 0x6d024820, + 0x2ba44: 0x6d024a20, 0x2ba45: 0x6d024c20, 0x2ba46: 0x6d024e20, 0x2ba47: 0x6d025020, + 0x2ba48: 0x6d2ffc20, 0x2ba49: 0x6d2ffe20, 0x2ba4a: 0x6d300020, 0x2ba4b: 0x6d300220, + 0x2ba4c: 0x6d300420, 0x2ba4d: 0x6d300620, 0x2ba4e: 0x6d300820, 0x2ba4f: 0x6d300a20, + 0x2ba50: 0x6d300c20, 0x2ba51: 0x6d5cf820, 0x2ba52: 0x6d5cfa20, 0x2ba53: 0x6d5cfc20, + 0x2ba54: 0x6d5cfe20, 0x2ba55: 0x6d5d0020, 0x2ba56: 0x6d5d0220, 0x2ba57: 0x6d5d0420, + 0x2ba58: 0x6d876a20, 0x2ba59: 0x6d876c20, 0x2ba5a: 0x6d876e20, 0x2ba5b: 0x6d877020, + 0x2ba5c: 0x6d877220, 0x2ba5d: 0x6d877420, 0x2ba5e: 0x6d877620, 0x2ba5f: 0x6dac0a20, + 0x2ba60: 0x6d877820, 0x2ba61: 0x6dac0c20, 0x2ba62: 0x6dac0e20, 0x2ba63: 0x6dac1020, + 0x2ba64: 0x6dac1220, 0x2ba65: 0x6dac1420, 0x2ba66: 0x6dac1620, 0x2ba67: 0x6dac1820, + 0x2ba68: 0x6dac1a20, 0x2ba69: 0x6dcc4220, 0x2ba6a: 0x6dcc4420, 0x2ba6b: 0x6dcc4620, + 0x2ba6c: 0x6dcc4820, 0x2ba6d: 0x6dcc4a20, 0x2ba6e: 0x6dcc4c20, 0x2ba6f: 0x6dcc4e20, + 0x2ba70: 0x6de76a20, 0x2ba71: 0x6dfdec20, 0x2ba72: 0x6dfdee20, 0x2ba73: 0x6dfdf020, + 0x2ba74: 0x6e108c20, 0x2ba75: 0x6e108e20, 0x2ba76: 0x6e109020, 0x2ba77: 0x6e109220, + 0x2ba78: 0x6e1f3420, 0x2ba79: 0x6e1f3620, 0x2ba7a: 0x6e332420, 0x2ba7b: 0x6e3d9620, + 0x2ba7c: 0x6c254c20, 0x2ba7d: 0x6c5abe20, 0x2ba7e: 0x6c5ac020, 0x2ba7f: 0x6c5ac220, + // Block 0xaea, offset 0x2ba80 + 0x2ba80: 0x6c5ac420, 0x2ba81: 0x6c7dbe20, 0x2ba82: 0x6c7dc020, 0x2ba83: 0x6c7dc220, + 0x2ba84: 0x6ca68c20, 0x2ba85: 0x6ca68e20, 0x2ba86: 0x6ca69020, 0x2ba87: 0x6cd4b820, + 0x2ba88: 0x6cd4ba20, 0x2ba89: 0x6cd4bc20, 0x2ba8a: 0x6cd4be20, 0x2ba8b: 0x6d030820, + 0x2ba8c: 0x6d030a20, 0x2ba8d: 0x6d030c20, 0x2ba8e: 0x6d030e20, 0x2ba8f: 0x6d031020, + 0x2ba90: 0x6d031220, 0x2ba91: 0x6d031420, 0x2ba92: 0x6d031620, 0x2ba93: 0x6d30b420, + 0x2ba94: 0x6d30b620, 0x2ba95: 0x6d30b820, 0x2ba96: 0x6d30ba20, 0x2ba97: 0x6d30bc20, + 0x2ba98: 0x6d5d8820, 0x2ba99: 0x6d5d8a20, 0x2ba9a: 0x6d87f420, 0x2ba9b: 0x6d87f620, + 0x2ba9c: 0x6d87f820, 0x2ba9d: 0x6d87fa20, 0x2ba9e: 0x6d87fc20, 0x2ba9f: 0x6dac9e20, + 0x2baa0: 0x6dcca020, 0x2baa1: 0x6dcca220, 0x2baa2: 0x6de7aa20, 0x2baa3: 0x6dfe3820, + 0x2baa4: 0x6e10bc20, 0x2baa5: 0x6e444820, 0x2baa6: 0x6c256420, 0x2baa7: 0x6c256620, + 0x2baa8: 0x6c3d2e20, 0x2baa9: 0x6c3d3020, 0x2baaa: 0x6c3d3220, 0x2baab: 0x6c3d3420, + 0x2baac: 0x6c3d3620, 0x2baad: 0x6c3d3820, 0x2baae: 0x6c5b2e20, 0x2baaf: 0x6c5b3020, + 0x2bab0: 0x6c5b3220, 0x2bab1: 0x6c5b3420, 0x2bab2: 0x6c5b3620, 0x2bab3: 0x6c5b3820, + 0x2bab4: 0x6c5b3a20, 0x2bab5: 0x6c5b3c20, 0x2bab6: 0x6c7e3020, 0x2bab7: 0x6c7e3220, + 0x2bab8: 0x6c7e3420, 0x2bab9: 0x6c7e3620, 0x2baba: 0x6ca6f820, 0x2babb: 0x6ca6fa20, + 0x2babc: 0x6ca6fc20, 0x2babd: 0x6ca6fe20, 0x2babe: 0x6ca70020, 0x2babf: 0x6ca70220, + // Block 0xaeb, offset 0x2bac0 + 0x2bac0: 0x6ca70420, 0x2bac1: 0x6ca70620, 0x2bac2: 0x6ca70820, 0x2bac3: 0x6ca70a20, + 0x2bac4: 0x6ca70c20, 0x2bac5: 0x6ca70e20, 0x2bac6: 0x6ca71020, 0x2bac7: 0x6ca71220, + 0x2bac8: 0x6ca71420, 0x2bac9: 0x6ca71620, 0x2baca: 0x6ca71820, 0x2bacb: 0x6cd52e20, + 0x2bacc: 0x6cd53020, 0x2bacd: 0x6cd53220, 0x2bace: 0x6cd53420, 0x2bacf: 0x6cd53620, + 0x2bad0: 0x6cd53820, 0x2bad1: 0x6cd53a20, 0x2bad2: 0x6cd53c20, 0x2bad3: 0x6cd53e20, + 0x2bad4: 0x6d037c20, 0x2bad5: 0x6d037e20, 0x2bad6: 0x6d038020, 0x2bad7: 0x6d038220, + 0x2bad8: 0x6d038420, 0x2bad9: 0x6d038620, 0x2bada: 0x6d038820, 0x2badb: 0x6d038a20, + 0x2badc: 0x6d038c20, 0x2badd: 0x6d038e20, 0x2bade: 0x6d039020, 0x2badf: 0x6d039220, + 0x2bae0: 0x6d311a20, 0x2bae1: 0x6d311c20, 0x2bae2: 0x6d311e20, 0x2bae3: 0x6d312020, + 0x2bae4: 0x6d312220, 0x2bae5: 0x6d312420, 0x2bae6: 0x6d312620, 0x2bae7: 0x6d312820, + 0x2bae8: 0x6d312a20, 0x2bae9: 0x6d312c20, 0x2baea: 0x6d312e20, 0x2baeb: 0x6d313020, + 0x2baec: 0x6d5dd820, 0x2baed: 0x6d5dda20, 0x2baee: 0x6d5ddc20, 0x2baef: 0x6d5dde20, + 0x2baf0: 0x6d5de020, 0x2baf1: 0x6d5de220, 0x2baf2: 0x6d5de420, 0x2baf3: 0x6d5de620, + 0x2baf4: 0x6d5de820, 0x2baf5: 0x6d5dea20, 0x2baf6: 0x6d5dec20, 0x2baf7: 0x6d883420, + 0x2baf8: 0x6d883620, 0x2baf9: 0x6d883820, 0x2bafa: 0x6d883a20, 0x2bafb: 0x6d883c20, + 0x2bafc: 0x6d883e20, 0x2bafd: 0x6d884020, 0x2bafe: 0x6dacce20, 0x2baff: 0x6dacd020, + // Block 0xaec, offset 0x2bb00 + 0x2bb00: 0x6dacd220, 0x2bb01: 0x6dccc020, 0x2bb02: 0x6dccc220, 0x2bb03: 0x6dccc420, + 0x2bb04: 0x6dccc620, 0x2bb05: 0x6dccc820, 0x2bb06: 0x6dccca20, 0x2bb07: 0x6dcccc20, + 0x2bb08: 0x6dfe4620, 0x2bb09: 0x6dfe4820, 0x2bb0a: 0x6e10ca20, 0x2bb0b: 0x6e10cc20, + 0x2bb0c: 0x6e10ce20, 0x2bb0d: 0x6e10d020, 0x2bb0e: 0x6e1f6620, 0x2bb0f: 0x6e1f6820, + 0x2bb10: 0x6e453020, 0x2bb11: 0x6c257a20, 0x2bb12: 0x6c3d6820, 0x2bb13: 0x6c5b9220, + 0x2bb14: 0x6c5b9420, 0x2bb15: 0x6c5b9620, 0x2bb16: 0x6c5b9820, 0x2bb17: 0x6c7ea620, + 0x2bb18: 0x6c7ea820, 0x2bb19: 0x6c7eaa20, 0x2bb1a: 0x6ca77820, 0x2bb1b: 0x6ca77a20, + 0x2bb1c: 0x6ca77c20, 0x2bb1d: 0x6ca77e20, 0x2bb1e: 0x6ca78020, 0x2bb1f: 0x6ca78220, + 0x2bb20: 0x6ca78420, 0x2bb21: 0x6cd5a220, 0x2bb22: 0x6cd5a420, 0x2bb23: 0x6cd5a620, + 0x2bb24: 0x6cd5a820, 0x2bb25: 0x6cd5aa20, 0x2bb26: 0x6d042a20, 0x2bb27: 0x6d042c20, + 0x2bb28: 0x6d042e20, 0x2bb29: 0x6d043020, 0x2bb2a: 0x6d31c420, 0x2bb2b: 0x6d31c620, + 0x2bb2c: 0x6d5e6a20, 0x2bb2d: 0x6d5e6c20, 0x2bb2e: 0x6d5e6e20, 0x2bb2f: 0x6d88bc20, + 0x2bb30: 0x6d88be20, 0x2bb31: 0x6d88c020, 0x2bb32: 0x6d88c220, 0x2bb33: 0x6d88c420, + 0x2bb34: 0x6d88c620, 0x2bb35: 0x6dad4220, 0x2bb36: 0x6dad4420, 0x2bb37: 0x6dad4620, + 0x2bb38: 0x6dad4820, 0x2bb39: 0x6dad4a20, 0x2bb3a: 0x6dad4c20, 0x2bb3b: 0x6dad4e20, + 0x2bb3c: 0x6dcd1c20, 0x2bb3d: 0x6dcd1e20, 0x2bb3e: 0x6de7f220, 0x2bb3f: 0x6de7f420, + // Block 0xaed, offset 0x2bb40 + 0x2bb40: 0x6dfe8420, 0x2bb41: 0x6e1f7620, 0x2bb42: 0x6c140e20, 0x2bb43: 0x6c3d8c20, + 0x2bb44: 0x6c3d8e20, 0x2bb45: 0x6c5bd220, 0x2bb46: 0x6c5bd420, 0x2bb47: 0x6c7ef620, + 0x2bb48: 0x6c7ef820, 0x2bb49: 0x6c7efa20, 0x2bb4a: 0x6c7efc20, 0x2bb4b: 0x6ca7c620, + 0x2bb4c: 0x6cd60a20, 0x2bb4d: 0x6cd60c20, 0x2bb4e: 0x6d048620, 0x2bb4f: 0x6d048820, + 0x2bb50: 0x6d048a20, 0x2bb51: 0x6d048c20, 0x2bb52: 0x6d892020, 0x2bb53: 0x6dad8820, + 0x2bb54: 0x6dcd3820, 0x2bb55: 0x6de80620, 0x2bb56: 0x6c5bf620, 0x2bb57: 0x6c7f3220, + 0x2bb58: 0x6c7f3420, 0x2bb59: 0x6c7f3620, 0x2bb5a: 0x6c7f3820, 0x2bb5b: 0x6c7f3a20, + 0x2bb5c: 0x6c7f3c20, 0x2bb5d: 0x6c7f3e20, 0x2bb5e: 0x6ca7e820, 0x2bb5f: 0x6ca7ea20, + 0x2bb60: 0x6ca7ec20, 0x2bb61: 0x6ca7ee20, 0x2bb62: 0x6ca7f020, 0x2bb63: 0x6ca7f220, + 0x2bb64: 0x6ca7f420, 0x2bb65: 0x6ca7f620, 0x2bb66: 0x6ca7f820, 0x2bb67: 0x6cd63620, + 0x2bb68: 0x6cd63820, 0x2bb69: 0x6cd63a20, 0x2bb6a: 0x6cd63c20, 0x2bb6b: 0x6cd63e20, + 0x2bb6c: 0x6cd64020, 0x2bb6d: 0x6cd64220, 0x2bb6e: 0x6cd64420, 0x2bb6f: 0x6cd64620, + 0x2bb70: 0x6cd64820, 0x2bb71: 0x6cd64a20, 0x2bb72: 0x6cd64c20, 0x2bb73: 0x6cd64e20, + 0x2bb74: 0x6cd65020, 0x2bb75: 0x6d04b620, 0x2bb76: 0x6d04b820, 0x2bb77: 0x6d04ba20, + 0x2bb78: 0x6d04bc20, 0x2bb79: 0x6d04be20, 0x2bb7a: 0x6d04c020, 0x2bb7b: 0x6d04c220, + 0x2bb7c: 0x6d04c420, 0x2bb7d: 0x6d04c620, 0x2bb7e: 0x6d04c820, 0x2bb7f: 0x6d04ca20, + // Block 0xaee, offset 0x2bb80 + 0x2bb80: 0x6d04cc20, 0x2bb81: 0x6d323220, 0x2bb82: 0x6d323420, 0x2bb83: 0x6d323620, + 0x2bb84: 0x6d323820, 0x2bb85: 0x6d323a20, 0x2bb86: 0x6d323c20, 0x2bb87: 0x6d323e20, + 0x2bb88: 0x6d324020, 0x2bb89: 0x6d324220, 0x2bb8a: 0x6d324420, 0x2bb8b: 0x6d324620, + 0x2bb8c: 0x6d324820, 0x2bb8d: 0x6d324a20, 0x2bb8e: 0x6d5ecc20, 0x2bb8f: 0x6d5ece20, + 0x2bb90: 0x6d5ed020, 0x2bb91: 0x6d5ed220, 0x2bb92: 0x6d5ed420, 0x2bb93: 0x6d5ed620, + 0x2bb94: 0x6d5ed820, 0x2bb95: 0x6d5eda20, 0x2bb96: 0x6d5edc20, 0x2bb97: 0x6d5ede20, + 0x2bb98: 0x6d5ee020, 0x2bb99: 0x6d5ee220, 0x2bb9a: 0x6d5ee420, 0x2bb9b: 0x6d5ee620, + 0x2bb9c: 0x6d5ee820, 0x2bb9d: 0x6d5eea20, 0x2bb9e: 0x6d5eec20, 0x2bb9f: 0x6d5eee20, + 0x2bba0: 0x6d5ef020, 0x2bba1: 0x6d5ef220, 0x2bba2: 0x6d5ef420, 0x2bba3: 0x6d5ef620, + 0x2bba4: 0x6d5ef820, 0x2bba5: 0x6d5efa20, 0x2bba6: 0x6d5efc20, 0x2bba7: 0x6d5efe20, + 0x2bba8: 0x6d5f0020, 0x2bba9: 0x6d5f0220, 0x2bbaa: 0x6d892e20, 0x2bbab: 0x6d893020, + 0x2bbac: 0x6d893220, 0x2bbad: 0x6d893420, 0x2bbae: 0x6d893620, 0x2bbaf: 0x6d893820, + 0x2bbb0: 0x6d893a20, 0x2bbb1: 0x6d893c20, 0x2bbb2: 0x6d893e20, 0x2bbb3: 0x6d894020, + 0x2bbb4: 0x6d894220, 0x2bbb5: 0x6d894420, 0x2bbb6: 0x6d894620, 0x2bbb7: 0x6d894820, + 0x2bbb8: 0x6dada820, 0x2bbb9: 0x6dadaa20, 0x2bbba: 0x6dadac20, 0x2bbbb: 0x6dadae20, + 0x2bbbc: 0x6dadb020, 0x2bbbd: 0x6dadb220, 0x2bbbe: 0x6dadb420, 0x2bbbf: 0x6dadb620, + // Block 0xaef, offset 0x2bbc0 + 0x2bbc0: 0x6dadb820, 0x2bbc1: 0x6dadba20, 0x2bbc2: 0x6dadbc20, 0x2bbc3: 0x6dadbe20, + 0x2bbc4: 0x6dadc020, 0x2bbc5: 0x6dadc220, 0x2bbc6: 0x6dadc420, 0x2bbc7: 0x6dadc620, + 0x2bbc8: 0x6dcd4c20, 0x2bbc9: 0x6dcd4e20, 0x2bbca: 0x6dcd5020, 0x2bbcb: 0x6dcd5220, + 0x2bbcc: 0x6dcd5420, 0x2bbcd: 0x6dcd5620, 0x2bbce: 0x6dcd5820, 0x2bbcf: 0x6de81420, + 0x2bbd0: 0x6dcd5a20, 0x2bbd1: 0x6dcd5c20, 0x2bbd2: 0x6dcd5e20, 0x2bbd3: 0x6dcd6020, + 0x2bbd4: 0x6dcd6220, 0x2bbd5: 0x6dcd6420, 0x2bbd6: 0x6dcd6620, 0x2bbd7: 0x6dcd6820, + 0x2bbd8: 0x6dcd6a20, 0x2bbd9: 0x6dcd6c20, 0x2bbda: 0x6dcd6e20, 0x2bbdb: 0x6de81620, + 0x2bbdc: 0x6de81820, 0x2bbdd: 0x6de81a20, 0x2bbde: 0x6de81c20, 0x2bbdf: 0x6de81e20, + 0x2bbe0: 0x6de82020, 0x2bbe1: 0x6de82220, 0x2bbe2: 0x6de82420, 0x2bbe3: 0x6dcd7020, + 0x2bbe4: 0x6de82620, 0x2bbe5: 0x6dfeaa20, 0x2bbe6: 0x6e110820, 0x2bbe7: 0x6e110a20, + 0x2bbe8: 0x6e110c20, 0x2bbe9: 0x6e110e20, 0x2bbea: 0x6e111020, 0x2bbeb: 0x6e111220, + 0x2bbec: 0x6e111420, 0x2bbed: 0x6e111620, 0x2bbee: 0x6e1f8620, 0x2bbef: 0x6e1f8820, + 0x2bbf0: 0x6e1f8a20, 0x2bbf1: 0x6e1f8c20, 0x2bbf2: 0x6e2ac620, 0x2bbf3: 0x6e2ac820, + 0x2bbf4: 0x6e2aca20, 0x2bbf5: 0x6e2e7820, 0x2bbf6: 0x6e335220, 0x2bbf7: 0x6e3dac20, + 0x2bbf8: 0x6e408e20, 0x2bbf9: 0x6e453220, 0x2bbfa: 0x6c5c2e20, 0x2bbfb: 0x6c7faa20, + 0x2bbfc: 0x6c7fac20, 0x2bbfd: 0x6ca89220, 0x2bbfe: 0x6ca89420, 0x2bbff: 0x6ca89620, + // Block 0xaf0, offset 0x2bc00 + 0x2bc00: 0x6ca89820, 0x2bc01: 0x6cd6e020, 0x2bc02: 0x6cd6e220, 0x2bc03: 0x6cd6e420, + 0x2bc04: 0x6cd6e620, 0x2bc05: 0x6cd6e820, 0x2bc06: 0x6cd6ea20, 0x2bc07: 0x6d059820, + 0x2bc08: 0x6d059a20, 0x2bc09: 0x6d059c20, 0x2bc0a: 0x6d059e20, 0x2bc0b: 0x6d05a020, + 0x2bc0c: 0x6d05a220, 0x2bc0d: 0x6d333820, 0x2bc0e: 0x6d333a20, 0x2bc0f: 0x6d333c20, + 0x2bc10: 0x6d333e20, 0x2bc11: 0x6d334020, 0x2bc12: 0x6d334220, 0x2bc13: 0x6d5fee20, + 0x2bc14: 0x6d5ff020, 0x2bc15: 0x6d5ff220, 0x2bc16: 0x6d5ff420, 0x2bc17: 0x6d5ff620, + 0x2bc18: 0x6d5ff820, 0x2bc19: 0x6d5ffa20, 0x2bc1a: 0x6d8a5220, 0x2bc1b: 0x6d8a5420, + 0x2bc1c: 0x6daec620, 0x2bc1d: 0x6daec820, 0x2bc1e: 0x6daeca20, 0x2bc1f: 0x6daecc20, + 0x2bc20: 0x6daece20, 0x2bc21: 0x6daed020, 0x2bc22: 0x6daed220, 0x2bc23: 0x6dce6420, + 0x2bc24: 0x6dce6620, 0x2bc25: 0x6dce6820, 0x2bc26: 0x6dce6a20, 0x2bc27: 0x6dce6c20, + 0x2bc28: 0x6dce6e20, 0x2bc29: 0x6dce7020, 0x2bc2a: 0x6de8c220, 0x2bc2b: 0x6de8c420, + 0x2bc2c: 0x6de8c620, 0x2bc2d: 0x6dff1c20, 0x2bc2e: 0x6dff1e20, 0x2bc2f: 0x6e118a20, + 0x2bc30: 0x6e1fe220, 0x2bc31: 0x6e2b0420, 0x2bc32: 0x6e2b0620, 0x2bc33: 0x6e398420, + 0x2bc34: 0x6e398620, 0x2bc35: 0x6c3dba20, 0x2bc36: 0x6c5c5e20, 0x2bc37: 0x6c5c6020, + 0x2bc38: 0x6c5c6220, 0x2bc39: 0x6c5c6420, 0x2bc3a: 0x6c7fee20, 0x2bc3b: 0x6c7ff020, + 0x2bc3c: 0x6c7ff220, 0x2bc3d: 0x6c7ff420, 0x2bc3e: 0x6c7ff620, 0x2bc3f: 0x6c7ff820, + // Block 0xaf1, offset 0x2bc40 + 0x2bc40: 0x6c7ffa20, 0x2bc41: 0x6c7ffc20, 0x2bc42: 0x6c7ffe20, 0x2bc43: 0x6c800020, + 0x2bc44: 0x6c800220, 0x2bc45: 0x6c800420, 0x2bc46: 0x6c800620, 0x2bc47: 0x6c800820, + 0x2bc48: 0x6ca8f220, 0x2bc49: 0x6ca8f420, 0x2bc4a: 0x6ca8f620, 0x2bc4b: 0x6ca8f820, + 0x2bc4c: 0x6ca8fa20, 0x2bc4d: 0x6ca8fc20, 0x2bc4e: 0x6ca8fe20, 0x2bc4f: 0x6ca90020, + 0x2bc50: 0x6ca90220, 0x2bc51: 0x6ca90420, 0x2bc52: 0x6ca90620, 0x2bc53: 0x6ca90820, + 0x2bc54: 0x6ca90a20, 0x2bc55: 0x6cd74620, 0x2bc56: 0x6cd74820, 0x2bc57: 0x6cd74a20, + 0x2bc58: 0x6cd74c20, 0x2bc59: 0x6cd74e20, 0x2bc5a: 0x6cd75020, 0x2bc5b: 0x6cd75220, + 0x2bc5c: 0x6cd75420, 0x2bc5d: 0x6cd75620, 0x2bc5e: 0x6cd75820, 0x2bc5f: 0x6d060420, + 0x2bc60: 0x6d060620, 0x2bc61: 0x6d060820, 0x2bc62: 0x6d060a20, 0x2bc63: 0x6d060c20, + 0x2bc64: 0x6d060e20, 0x2bc65: 0x6d061020, 0x2bc66: 0x6d061220, 0x2bc67: 0x6d33b820, + 0x2bc68: 0x6d33ba20, 0x2bc69: 0x6d33bc20, 0x2bc6a: 0x6d33be20, 0x2bc6b: 0x6d33c020, + 0x2bc6c: 0x6d33c220, 0x2bc6d: 0x6d33c420, 0x2bc6e: 0x6d33c620, 0x2bc6f: 0x6d33c820, + 0x2bc70: 0x6d33ca20, 0x2bc71: 0x6d33cc20, 0x2bc72: 0x6d33ce20, 0x2bc73: 0x6d606420, + 0x2bc74: 0x6d606620, 0x2bc75: 0x6d606820, 0x2bc76: 0x6d606a20, 0x2bc77: 0x6d606c20, + 0x2bc78: 0x6d606e20, 0x2bc79: 0x6d607020, 0x2bc7a: 0x6d607220, 0x2bc7b: 0x6d607420, + 0x2bc7c: 0x6d607620, 0x2bc7d: 0x6d607820, 0x2bc7e: 0x6d607a20, 0x2bc7f: 0x6d607c20, + // Block 0xaf2, offset 0x2bc80 + 0x2bc80: 0x6d607e20, 0x2bc81: 0x6d608020, 0x2bc82: 0x6d608220, 0x2bc83: 0x6d608420, + 0x2bc84: 0x6d608620, 0x2bc85: 0x6d8aac20, 0x2bc86: 0x6d8aae20, 0x2bc87: 0x6d8ab020, + 0x2bc88: 0x6d8ab220, 0x2bc89: 0x6d8ab420, 0x2bc8a: 0x6d8ab620, 0x2bc8b: 0x6d8ab820, + 0x2bc8c: 0x6daf2020, 0x2bc8d: 0x6daf2220, 0x2bc8e: 0x6daf2420, 0x2bc8f: 0x6daf2620, + 0x2bc90: 0x6daf2820, 0x2bc91: 0x6daf2a20, 0x2bc92: 0x6daf2c20, 0x2bc93: 0x6daf2e20, + 0x2bc94: 0x6daf3020, 0x2bc95: 0x6daf3220, 0x2bc96: 0x6dcec020, 0x2bc97: 0x6dcec220, + 0x2bc98: 0x6dcec420, 0x2bc99: 0x6dcec620, 0x2bc9a: 0x6dcec820, 0x2bc9b: 0x6dceca20, + 0x2bc9c: 0x6de90c20, 0x2bc9d: 0x6de90e20, 0x2bc9e: 0x6de91020, 0x2bc9f: 0x6de91220, + 0x2bca0: 0x6de91420, 0x2bca1: 0x6de91620, 0x2bca2: 0x6de91820, 0x2bca3: 0x6dff3820, + 0x2bca4: 0x6dff3a20, 0x2bca5: 0x6dff3c20, 0x2bca6: 0x6dff3e20, 0x2bca7: 0x6dff4020, + 0x2bca8: 0x6e11a620, 0x2bca9: 0x6e11a820, 0x2bcaa: 0x6e200020, 0x2bcab: 0x6e200220, + 0x2bcac: 0x6e200420, 0x2bcad: 0x6e200620, 0x2bcae: 0x6e2b1420, 0x2bcaf: 0x6e338a20, + 0x2bcb0: 0x6e338c20, 0x2bcb1: 0x6e338e20, 0x2bcb2: 0x6e339020, 0x2bcb3: 0x6e399420, + 0x2bcb4: 0x6e399620, 0x2bcb5: 0x6e40a420, 0x2bcb6: 0x6c5c9820, 0x2bcb7: 0x6ca99e20, + 0x2bcb8: 0x6c809c20, 0x2bcb9: 0x6ca9a020, 0x2bcba: 0x6cd80e20, 0x2bcbb: 0x6cd81020, + 0x2bcbc: 0x6d06cc20, 0x2bcbd: 0x6d34c620, 0x2bcbe: 0x6d617c20, 0x2bcbf: 0x6d617e20, + // Block 0xaf3, offset 0x2bcc0 + 0x2bcc0: 0x6d8b9420, 0x2bcc1: 0x6de9a020, 0x2bcc2: 0x6c5cc420, 0x2bcc3: 0x6c80c420, + 0x2bcc4: 0x6ca9e220, 0x2bcc5: 0x6ca9e420, 0x2bcc6: 0x6ca9e620, 0x2bcc7: 0x6ca9e820, + 0x2bcc8: 0x6ca9ea20, 0x2bcc9: 0x6ca9ec20, 0x2bcca: 0x6cd85220, 0x2bccb: 0x6d34e020, + 0x2bccc: 0x6d34e220, 0x2bccd: 0x6d8ba620, 0x2bcce: 0x6e2b3220, 0x2bccf: 0x6c0a4820, + 0x2bcd0: 0x6c3e0220, 0x2bcd1: 0x6c5cce20, 0x2bcd2: 0x6c5cd020, 0x2bcd3: 0x6c5cd220, + 0x2bcd4: 0x6c5cd420, 0x2bcd5: 0x6c80d220, 0x2bcd6: 0x6c80d420, 0x2bcd7: 0x6c80d620, + 0x2bcd8: 0x6ca9fe20, 0x2bcd9: 0x6cd86420, 0x2bcda: 0x6cd86620, 0x2bcdb: 0x6d06fc20, + 0x2bcdc: 0x6d06fe20, 0x2bcdd: 0x6d070020, 0x2bcde: 0x6d34fc20, 0x2bcdf: 0x6d34fe20, + 0x2bce0: 0x6d8bba20, 0x2bce1: 0x6d8bbc20, 0x2bce2: 0x6db00620, 0x2bce3: 0x6dcf8c20, + 0x2bce4: 0x6de9b420, 0x2bce5: 0x6e120820, 0x2bce6: 0x6e33ae20, 0x2bce7: 0x6c812420, + 0x2bce8: 0x6c812620, 0x2bce9: 0x6c812820, 0x2bcea: 0x6caa2a20, 0x2bceb: 0x6caa2c20, + 0x2bcec: 0x6caa2e20, 0x2bced: 0x6caa3020, 0x2bcee: 0x6cd88220, 0x2bcef: 0x6cd88420, + 0x2bcf0: 0x6cd88620, 0x2bcf1: 0x6d074620, 0x2bcf2: 0x6d352e20, 0x2bcf3: 0x6d353020, + 0x2bcf4: 0x6d353220, 0x2bcf5: 0x6d353420, 0x2bcf6: 0x6d353620, 0x2bcf7: 0x6d61ca20, + 0x2bcf8: 0x6d8bf220, 0x2bcf9: 0x6d8bf420, 0x2bcfa: 0x6db02c20, 0x2bcfb: 0x6dcfa820, + 0x2bcfc: 0x6dcfaa20, 0x2bcfd: 0x6e204220, 0x2bcfe: 0x6c815620, 0x2bcff: 0x6c815820, + // Block 0xaf4, offset 0x2bd00 + 0x2bd00: 0x6caa6e20, 0x2bd01: 0x6caa7020, 0x2bd02: 0x6caa7220, 0x2bd03: 0x6caa7420, + 0x2bd04: 0x6caa7620, 0x2bd05: 0x6caa7820, 0x2bd06: 0x6caa7a20, 0x2bd07: 0x6cd8aa20, + 0x2bd08: 0x6cd8ac20, 0x2bd09: 0x6cd8ae20, 0x2bd0a: 0x6cd8b020, 0x2bd0b: 0x6d077c20, + 0x2bd0c: 0x6d077e20, 0x2bd0d: 0x6d078020, 0x2bd0e: 0x6d078220, 0x2bd0f: 0x6d355020, + 0x2bd10: 0x6d355220, 0x2bd11: 0x6d355420, 0x2bd12: 0x6d355620, 0x2bd13: 0x6d355820, + 0x2bd14: 0x6d8c0c20, 0x2bd15: 0x6d8c0e20, 0x2bd16: 0x6dcfd820, 0x2bd17: 0x6dcfda20, + 0x2bd18: 0x6dcfdc20, 0x2bd19: 0x6dffb220, 0x2bd1a: 0x6e122220, 0x2bd1b: 0x6c5d2e20, + 0x2bd1c: 0x6cd8f220, 0x2bd1d: 0x6cd8f420, 0x2bd1e: 0x6cd8f620, 0x2bd1f: 0x6c5d3a20, + 0x2bd20: 0x6c5d3c20, 0x2bd21: 0x6c81a620, 0x2bd22: 0x6c5d4820, 0x2bd23: 0x6caaba20, + 0x2bd24: 0x6d07b020, 0x2bd25: 0x6d07b220, 0x2bd26: 0x6d359420, 0x2bd27: 0x6d359620, + 0x2bd28: 0x6d359820, 0x2bd29: 0x6d359a20, 0x2bd2a: 0x6d359c20, 0x2bd2b: 0x6d624c20, + 0x2bd2c: 0x6d624e20, 0x2bd2d: 0x6db07e20, 0x2bd2e: 0x6db08020, 0x2bd2f: 0x6db08220, + 0x2bd30: 0x6dd01020, 0x2bd31: 0x6e122c20, 0x2bd32: 0x6c25e420, 0x2bd33: 0x6c81b620, + 0x2bd34: 0x6c81b820, 0x2bd35: 0x6caad020, 0x2bd36: 0x6caad220, 0x2bd37: 0x6cd90e20, + 0x2bd38: 0x6d07c020, 0x2bd39: 0x6d07c220, 0x2bd3a: 0x6d35ba20, 0x2bd3b: 0x6d35bc20, + 0x2bd3c: 0x6d35be20, 0x2bd3d: 0x6d35c020, 0x2bd3e: 0x6d35c220, 0x2bd3f: 0x6d626820, + // Block 0xaf5, offset 0x2bd40 + 0x2bd40: 0x6d626a20, 0x2bd41: 0x6d8c6220, 0x2bd42: 0x6d8c6420, 0x2bd43: 0x6d8c6620, + 0x2bd44: 0x6db09820, 0x2bd45: 0x6db09a20, 0x2bd46: 0x6db09c20, 0x2bd47: 0x6db09e20, + 0x2bd48: 0x6dd02a20, 0x2bd49: 0x6dffc620, 0x2bd4a: 0x6e205c20, 0x2bd4b: 0x6d07fc20, + 0x2bd4c: 0x6c145820, 0x2bd4d: 0x6c145a20, 0x2bd4e: 0x6c25ea20, 0x2bd4f: 0x6c25ec20, + 0x2bd50: 0x6c3e6220, 0x2bd51: 0x6c81fe20, 0x2bd52: 0x6c3e6420, 0x2bd53: 0x6c3e6620, + 0x2bd54: 0x6c3e6820, 0x2bd55: 0x6c3e6a20, 0x2bd56: 0x6c3e6c20, 0x2bd57: 0x6c3e6e20, + 0x2bd58: 0x6c3e7020, 0x2bd59: 0x6c3e7220, 0x2bd5a: 0x6c3e7420, 0x2bd5b: 0x6c3e7620, + 0x2bd5c: 0x6c3e7820, 0x2bd5d: 0x6c3e7a20, 0x2bd5e: 0x6c5d6220, 0x2bd5f: 0x6c5d6420, + 0x2bd60: 0x6c5d6620, 0x2bd61: 0x6c5d6820, 0x2bd62: 0x6c5d6a20, 0x2bd63: 0x6c5d6c20, + 0x2bd64: 0x6c5d6e20, 0x2bd65: 0x6c5d7020, 0x2bd66: 0x6c820020, 0x2bd67: 0x6c820220, + 0x2bd68: 0x6c820420, 0x2bd69: 0x6c820620, 0x2bd6a: 0x6c820820, 0x2bd6b: 0x6c820a20, + 0x2bd6c: 0x6c820c20, 0x2bd6d: 0x6c820e20, 0x2bd6e: 0x6c821020, 0x2bd6f: 0x6cab1220, + 0x2bd70: 0x6cab1420, 0x2bd71: 0x6cab1620, 0x2bd72: 0x6cab1820, 0x2bd73: 0x6cab1a20, + 0x2bd74: 0x6cab1c20, 0x2bd75: 0x6cab1e20, 0x2bd76: 0x6cab2020, 0x2bd77: 0x6cab2220, + 0x2bd78: 0x6cab2420, 0x2bd79: 0x6cab2620, 0x2bd7a: 0x6cab2820, 0x2bd7b: 0x6cab2a20, + 0x2bd7c: 0x6cd95c20, 0x2bd7d: 0x6cd95e20, 0x2bd7e: 0x6cd96020, 0x2bd7f: 0x6cd96220, + // Block 0xaf6, offset 0x2bd80 + 0x2bd80: 0x6cd96420, 0x2bd81: 0x6cd96620, 0x2bd82: 0x6cd96820, 0x2bd83: 0x6cd96a20, + 0x2bd84: 0x6cd96c20, 0x2bd85: 0x6cd96e20, 0x2bd86: 0x6cd97020, 0x2bd87: 0x6cd97220, + 0x2bd88: 0x6cd97420, 0x2bd89: 0x6cd97620, 0x2bd8a: 0x6cd97820, 0x2bd8b: 0x6cd97a20, + 0x2bd8c: 0x6cd97c20, 0x2bd8d: 0x6d080a20, 0x2bd8e: 0x6d080c20, 0x2bd8f: 0x6d080e20, + 0x2bd90: 0x6d081020, 0x2bd91: 0x6d081220, 0x2bd92: 0x6d081420, 0x2bd93: 0x6d081620, + 0x2bd94: 0x6d081820, 0x2bd95: 0x6d081a20, 0x2bd96: 0x6d081c20, 0x2bd97: 0x6d081e20, + 0x2bd98: 0x6d082020, 0x2bd99: 0x6d082220, 0x2bd9a: 0x6d082420, 0x2bd9b: 0x6d082620, + 0x2bd9c: 0x6d361c20, 0x2bd9d: 0x6d361e20, 0x2bd9e: 0x6d362020, 0x2bd9f: 0x6d362220, + 0x2bda0: 0x6d362420, 0x2bda1: 0x6d8c9e20, 0x2bda2: 0x6d362620, 0x2bda3: 0x6d362820, + 0x2bda4: 0x6d362a20, 0x2bda5: 0x6d362c20, 0x2bda6: 0x6d362e20, 0x2bda7: 0x6d363020, + 0x2bda8: 0x6d363220, 0x2bda9: 0x6d363420, 0x2bdaa: 0x6d363620, 0x2bdab: 0x6d62bc20, + 0x2bdac: 0x6d62be20, 0x2bdad: 0x6d62c020, 0x2bdae: 0x6d62c220, 0x2bdaf: 0x6d62c420, + 0x2bdb0: 0x6d62c620, 0x2bdb1: 0x6d62c820, 0x2bdb2: 0x6d62ca20, 0x2bdb3: 0x6d62cc20, + 0x2bdb4: 0x6d62ce20, 0x2bdb5: 0x6d8ca220, 0x2bdb6: 0x6d8ca420, 0x2bdb7: 0x6d8ca620, + 0x2bdb8: 0x6d8ca820, 0x2bdb9: 0x6d8caa20, 0x2bdba: 0x6d8cac20, 0x2bdbb: 0x6d8cae20, + 0x2bdbc: 0x6d8cb020, 0x2bdbd: 0x6d8cb220, 0x2bdbe: 0x6db0d620, 0x2bdbf: 0x6db0d820, + // Block 0xaf7, offset 0x2bdc0 + 0x2bdc0: 0x6db0da20, 0x2bdc1: 0x6db0dc20, 0x2bdc2: 0x6dd05e20, 0x2bdc3: 0x6dd06020, + 0x2bdc4: 0x6dd06220, 0x2bdc5: 0x6dd06420, 0x2bdc6: 0x6dea2020, 0x2bdc7: 0x6dea2220, + 0x2bdc8: 0x6dea2420, 0x2bdc9: 0x6dffe020, 0x2bdca: 0x6dffe220, 0x2bdcb: 0x6e124020, + 0x2bdcc: 0x6e124220, 0x2bdcd: 0x6e124420, 0x2bdce: 0x6e124620, 0x2bdcf: 0x6e206820, + 0x2bdd0: 0x6cabdc20, 0x2bdd1: 0x6dd0b020, 0x2bdd2: 0x6c5e4020, 0x2bdd3: 0x6d08fc20, + 0x2bdd4: 0x6c82fa20, 0x2bdd5: 0x6cabf220, 0x2bdd6: 0x6d370020, 0x2bdd7: 0x6d637020, + 0x2bdd8: 0x6d8d7420, 0x2bdd9: 0x6c831020, 0x2bdda: 0x6c831220, 0x2bddb: 0x6cac0420, + 0x2bddc: 0x6d638620, 0x2bddd: 0x6d372e20, 0x2bdde: 0x6d8d9620, 0x2bddf: 0x6e126a20, + 0x2bde0: 0x6c3f3420, 0x2bde1: 0x6c5e5a20, 0x2bde2: 0x6c5e5c20, 0x2bde3: 0x6c5e5e20, + 0x2bde4: 0x6c832820, 0x2bde5: 0x6c832a20, 0x2bde6: 0x6cac1020, 0x2bde7: 0x6cac1220, + 0x2bde8: 0x6cac1420, 0x2bde9: 0x6cac1620, 0x2bdea: 0x6cdac020, 0x2bdeb: 0x6cdac220, + 0x2bdec: 0x6cdac420, 0x2bded: 0x6cdac620, 0x2bdee: 0x6cdac820, 0x2bdef: 0x6d091e20, + 0x2bdf0: 0x6d092020, 0x2bdf1: 0x6d373220, 0x2bdf2: 0x6d373420, 0x2bdf3: 0x6d373620, + 0x2bdf4: 0x6d373820, 0x2bdf5: 0x6d373a20, 0x2bdf6: 0x6d373c20, 0x2bdf7: 0x6d373e20, + 0x2bdf8: 0x6d374020, 0x2bdf9: 0x6d639c20, 0x2bdfa: 0x6d639e20, 0x2bdfb: 0x6d63a020, + 0x2bdfc: 0x6d8d9820, 0x2bdfd: 0x6d8d9a20, 0x2bdfe: 0x6d8d9c20, 0x2bdff: 0x6db18e20, + // Block 0xaf8, offset 0x2be00 + 0x2be00: 0x6db19020, 0x2be01: 0x6db19220, 0x2be02: 0x6db19420, 0x2be03: 0x6db19620, + 0x2be04: 0x6db19820, 0x2be05: 0x6db19a20, 0x2be06: 0x6dd0dc20, 0x2be07: 0x6dd0de20, + 0x2be08: 0x6dd0e020, 0x2be09: 0x6e003420, 0x2be0a: 0x6c5e7a20, 0x2be0b: 0x6cac4c20, + 0x2be0c: 0x6d8dca20, 0x2be0d: 0x6d8dcc20, 0x2be0e: 0x6dd11820, 0x2be0f: 0x6dd11a20, + 0x2be10: 0x6e209c20, 0x2be11: 0x6c149c20, 0x2be12: 0x6c3f4620, 0x2be13: 0x6c3f4820, + 0x2be14: 0x6c3f4a20, 0x2be15: 0x6c5e7e20, 0x2be16: 0x6c5e8020, 0x2be17: 0x6c5e8220, + 0x2be18: 0x6c5e8420, 0x2be19: 0x6c5e8620, 0x2be1a: 0x6c836020, 0x2be1b: 0x6c836220, + 0x2be1c: 0x6c836420, 0x2be1d: 0x6c836620, 0x2be1e: 0x6c836820, 0x2be1f: 0x6c836a20, + 0x2be20: 0x6c836c20, 0x2be21: 0x6c836e20, 0x2be22: 0x6c837020, 0x2be23: 0x6c837220, + 0x2be24: 0x6c837420, 0x2be25: 0x6c837620, 0x2be26: 0x6cac5c20, 0x2be27: 0x6cac5e20, + 0x2be28: 0x6cac6020, 0x2be29: 0x6cac6220, 0x2be2a: 0x6cac6420, 0x2be2b: 0x6cac6620, + 0x2be2c: 0x6cac6820, 0x2be2d: 0x6cac6a20, 0x2be2e: 0x6cac6c20, 0x2be2f: 0x6cac6e20, + 0x2be30: 0x6cdaf220, 0x2be31: 0x6cdaf420, 0x2be32: 0x6cdaf620, 0x2be33: 0x6cdaf820, + 0x2be34: 0x6cdafa20, 0x2be35: 0x6cdafc20, 0x2be36: 0x6cdafe20, 0x2be37: 0x6cdb0020, + 0x2be38: 0x6cdb0220, 0x2be39: 0x6cdb0420, 0x2be3a: 0x6cdb0620, 0x2be3b: 0x6cdb0820, + 0x2be3c: 0x6cdb0a20, 0x2be3d: 0x6cdb0c20, 0x2be3e: 0x6cdb0e20, 0x2be3f: 0x6cdb1020, + // Block 0xaf9, offset 0x2be40 + 0x2be40: 0x6cdb1220, 0x2be41: 0x6cdb1420, 0x2be42: 0x6d095a20, 0x2be43: 0x6d095c20, + 0x2be44: 0x6d095e20, 0x2be45: 0x6d096020, 0x2be46: 0x6d096220, 0x2be47: 0x6d096420, + 0x2be48: 0x6d096620, 0x2be49: 0x6d096820, 0x2be4a: 0x6d096a20, 0x2be4b: 0x6d096c20, + 0x2be4c: 0x6d096e20, 0x2be4d: 0x6d097020, 0x2be4e: 0x6d097220, 0x2be4f: 0x6d097420, + 0x2be50: 0x6d097620, 0x2be51: 0x6d097820, 0x2be52: 0x6d097a20, 0x2be53: 0x6d097c20, + 0x2be54: 0x6d097e20, 0x2be55: 0x6d378020, 0x2be56: 0x6d098020, 0x2be57: 0x6d378220, + 0x2be58: 0x6d378420, 0x2be59: 0x6d378620, 0x2be5a: 0x6d378820, 0x2be5b: 0x6d378a20, + 0x2be5c: 0x6d378c20, 0x2be5d: 0x6d378e20, 0x2be5e: 0x6d379020, 0x2be5f: 0x6d379220, + 0x2be60: 0x6d379420, 0x2be61: 0x6d379620, 0x2be62: 0x6d379820, 0x2be63: 0x6d379a20, + 0x2be64: 0x6d379c20, 0x2be65: 0x6d379e20, 0x2be66: 0x6d37a020, 0x2be67: 0x6d37a220, + 0x2be68: 0x6d37a420, 0x2be69: 0x6d37a620, 0x2be6a: 0x6d37a820, 0x2be6b: 0x6d37aa20, + 0x2be6c: 0x6d37ac20, 0x2be6d: 0x6d37ae20, 0x2be6e: 0x6d63f220, 0x2be6f: 0x6d63f420, + 0x2be70: 0x6d63f620, 0x2be71: 0x6d63f820, 0x2be72: 0x6d63fa20, 0x2be73: 0x6d63fc20, + 0x2be74: 0x6d63fe20, 0x2be75: 0x6d640020, 0x2be76: 0x6d640220, 0x2be77: 0x6d640420, + 0x2be78: 0x6d640620, 0x2be79: 0x6d640820, 0x2be7a: 0x6d640a20, 0x2be7b: 0x6d640c20, + 0x2be7c: 0x6d8dda20, 0x2be7d: 0x6d8ddc20, 0x2be7e: 0x6d8dde20, 0x2be7f: 0x6d8de020, + // Block 0xafa, offset 0x2be80 + 0x2be80: 0x6d8de220, 0x2be81: 0x6d8de420, 0x2be82: 0x6d8de620, 0x2be83: 0x6d8de820, + 0x2be84: 0x6d8dea20, 0x2be85: 0x6d8dec20, 0x2be86: 0x6d8dee20, 0x2be87: 0x6d8df020, + 0x2be88: 0x6d8df220, 0x2be89: 0x6d8df420, 0x2be8a: 0x6d8df620, 0x2be8b: 0x6d8df820, + 0x2be8c: 0x6d8dfa20, 0x2be8d: 0x6d8dfc20, 0x2be8e: 0x6db1c020, 0x2be8f: 0x6db1c220, + 0x2be90: 0x6db1c420, 0x2be91: 0x6db1c620, 0x2be92: 0x6db1c820, 0x2be93: 0x6db1ca20, + 0x2be94: 0x6db1cc20, 0x2be95: 0x6db1ce20, 0x2be96: 0x6db1d020, 0x2be97: 0x6db1d220, + 0x2be98: 0x6db1d420, 0x2be99: 0x6db1d620, 0x2be9a: 0x6db1d820, 0x2be9b: 0x6db1da20, + 0x2be9c: 0x6db1dc20, 0x2be9d: 0x6db1de20, 0x2be9e: 0x6db1e020, 0x2be9f: 0x6db1e220, + 0x2bea0: 0x6db1e420, 0x2bea1: 0x6db1e620, 0x2bea2: 0x6db1e820, 0x2bea3: 0x6db1ea20, + 0x2bea4: 0x6db1ec20, 0x2bea5: 0x6db1ee20, 0x2bea6: 0x6db1f020, 0x2bea7: 0x6db1f220, + 0x2bea8: 0x6db1f420, 0x2bea9: 0x6db1f620, 0x2beaa: 0x6db1f820, 0x2beab: 0x6db1fa20, + 0x2beac: 0x6db1fc20, 0x2bead: 0x6dd11c20, 0x2beae: 0x6dd11e20, 0x2beaf: 0x6dd12020, + 0x2beb0: 0x6dd12220, 0x2beb1: 0x6dd12420, 0x2beb2: 0x6dd12620, 0x2beb3: 0x6dd12820, + 0x2beb4: 0x6dd12a20, 0x2beb5: 0x6dd12c20, 0x2beb6: 0x6dd12e20, 0x2beb7: 0x6dd13020, + 0x2beb8: 0x6dd13220, 0x2beb9: 0x6dd13420, 0x2beba: 0x6dd13620, 0x2bebb: 0x6dd13820, + 0x2bebc: 0x6dd13a20, 0x2bebd: 0x6dd13c20, 0x2bebe: 0x6dd13e20, 0x2bebf: 0x6dd14020, + // Block 0xafb, offset 0x2bec0 + 0x2bec0: 0x6dd14220, 0x2bec1: 0x6dd14420, 0x2bec2: 0x6dd14620, 0x2bec3: 0x6dd14820, + 0x2bec4: 0x6dd14a20, 0x2bec5: 0x6deaa420, 0x2bec6: 0x6deaa620, 0x2bec7: 0x6deaa820, + 0x2bec8: 0x6deaaa20, 0x2bec9: 0x6deaac20, 0x2beca: 0x6deaae20, 0x2becb: 0x6deab020, + 0x2becc: 0x6deab220, 0x2becd: 0x6deab420, 0x2bece: 0x6deab620, 0x2becf: 0x6deab820, + 0x2bed0: 0x6deaba20, 0x2bed1: 0x6deabc20, 0x2bed2: 0x6e005220, 0x2bed3: 0x6e005420, + 0x2bed4: 0x6e005620, 0x2bed5: 0x6e005820, 0x2bed6: 0x6e005a20, 0x2bed7: 0x6e005c20, + 0x2bed8: 0x6e005e20, 0x2bed9: 0x6e006020, 0x2beda: 0x6e006220, 0x2bedb: 0x6e006420, + 0x2bedc: 0x6e006620, 0x2bedd: 0x6e006820, 0x2bede: 0x6e127a20, 0x2bedf: 0x6e127c20, + 0x2bee0: 0x6e127e20, 0x2bee1: 0x6e128020, 0x2bee2: 0x6e128220, 0x2bee3: 0x6e128420, + 0x2bee4: 0x6e128620, 0x2bee5: 0x6e128820, 0x2bee6: 0x6e209e20, 0x2bee7: 0x6e20a020, + 0x2bee8: 0x6e20a220, 0x2bee9: 0x6e20a420, 0x2beea: 0x6e20a620, 0x2beeb: 0x6e20a820, + 0x2beec: 0x6e20aa20, 0x2beed: 0x6e20ac20, 0x2beee: 0x6e20ae20, 0x2beef: 0x6e20b020, + 0x2bef0: 0x6e20b220, 0x2bef1: 0x6e20b420, 0x2bef2: 0x6e20b620, 0x2bef3: 0x6e2b7420, + 0x2bef4: 0x6e2b7620, 0x2bef5: 0x6e2b7820, 0x2bef6: 0x6e2b7a20, 0x2bef7: 0x6e2b7c20, + 0x2bef8: 0x6e33e620, 0x2bef9: 0x6e33e820, 0x2befa: 0x6e33ea20, 0x2befb: 0x6e39c420, + 0x2befc: 0x6e39c620, 0x2befd: 0x6e39c820, 0x2befe: 0x6e3df220, 0x2beff: 0x6e40c820, + // Block 0xafc, offset 0x2bf00 + 0x2bf00: 0x6e40ca20, 0x2bf01: 0x6e42ee20, 0x2bf02: 0x6e446020, 0x2bf03: 0x6e446220, + 0x2bf04: 0x6e446420, 0x2bf05: 0x6e454820, 0x2bf06: 0x6e454a20, 0x2bf07: 0x6e46ce20, + 0x2bf08: 0x6c400e20, 0x2bf09: 0x6c5f9420, 0x2bf0a: 0x6c84c620, 0x2bf0b: 0x6c84c820, + 0x2bf0c: 0x6c84ca20, 0x2bf0d: 0x6c84cc20, 0x2bf0e: 0x6cae2220, 0x2bf0f: 0x6cae2420, + 0x2bf10: 0x6cdd4820, 0x2bf11: 0x6cdd4a20, 0x2bf12: 0x6d0bc220, 0x2bf13: 0x6d0bc420, + 0x2bf14: 0x6d0bc620, 0x2bf15: 0x6d0bc820, 0x2bf16: 0x6d0bca20, 0x2bf17: 0x6d65f420, + 0x2bf18: 0x6d8fc820, 0x2bf19: 0x6db39820, 0x2bf1a: 0x6dd29620, 0x2bf1b: 0x6dd29820, + 0x2bf1c: 0x6debd220, 0x2bf1d: 0x6c268820, 0x2bf1e: 0x6c5fa220, 0x2bf1f: 0x6c5fa420, + 0x2bf20: 0x6c5fa620, 0x2bf21: 0x6c84de20, 0x2bf22: 0x6c84e020, 0x2bf23: 0x6c84e220, + 0x2bf24: 0x6cae4e20, 0x2bf25: 0x6cae5020, 0x2bf26: 0x6cae5220, 0x2bf27: 0x6cae5420, + 0x2bf28: 0x6cae5620, 0x2bf29: 0x6cae5820, 0x2bf2a: 0x6cae5a20, 0x2bf2b: 0x6cae5c20, + 0x2bf2c: 0x6cae5e20, 0x2bf2d: 0x6cdd6620, 0x2bf2e: 0x6cdd6820, 0x2bf2f: 0x6cdd6a20, + 0x2bf30: 0x6cdd6c20, 0x2bf31: 0x6cdd6e20, 0x2bf32: 0x6cdd7020, 0x2bf33: 0x6cdd7220, + 0x2bf34: 0x6cdd7420, 0x2bf35: 0x6cdd7620, 0x2bf36: 0x6d0bde20, 0x2bf37: 0x6d0be020, + 0x2bf38: 0x6d0be220, 0x2bf39: 0x6d0be420, 0x2bf3a: 0x6d0be620, 0x2bf3b: 0x6d0be820, + 0x2bf3c: 0x6d0bea20, 0x2bf3d: 0x6d0bec20, 0x2bf3e: 0x6d0bee20, 0x2bf3f: 0x6d39e220, + // Block 0xafd, offset 0x2bf40 + 0x2bf40: 0x6d39e420, 0x2bf41: 0x6d39e620, 0x2bf42: 0x6d39e820, 0x2bf43: 0x6d39ea20, + 0x2bf44: 0x6d39ec20, 0x2bf45: 0x6d39ee20, 0x2bf46: 0x6d39f020, 0x2bf47: 0x6d39f220, + 0x2bf48: 0x6d39f420, 0x2bf49: 0x6d39f620, 0x2bf4a: 0x6d39f820, 0x2bf4b: 0x6d661220, + 0x2bf4c: 0x6d661420, 0x2bf4d: 0x6d661620, 0x2bf4e: 0x6d661820, 0x2bf4f: 0x6d661a20, + 0x2bf50: 0x6d661c20, 0x2bf51: 0x6d661e20, 0x2bf52: 0x6d662020, 0x2bf53: 0x6d662220, + 0x2bf54: 0x6d662420, 0x2bf55: 0x6d39fa20, 0x2bf56: 0x6d662620, 0x2bf57: 0x6d8ffa20, + 0x2bf58: 0x6d8ffc20, 0x2bf59: 0x6d8ffe20, 0x2bf5a: 0x6d900020, 0x2bf5b: 0x6d900220, + 0x2bf5c: 0x6d900420, 0x2bf5d: 0x6d900620, 0x2bf5e: 0x6d900820, 0x2bf5f: 0x6db3b420, + 0x2bf60: 0x6db3b620, 0x2bf61: 0x6db3b820, 0x2bf62: 0x6db3ba20, 0x2bf63: 0x6db3bc20, + 0x2bf64: 0x6db3be20, 0x2bf65: 0x6db3c020, 0x2bf66: 0x6db3c220, 0x2bf67: 0x6db3c420, + 0x2bf68: 0x6db3c620, 0x2bf69: 0x6db3c820, 0x2bf6a: 0x6db3ca20, 0x2bf6b: 0x6db3cc20, + 0x2bf6c: 0x6db3ce20, 0x2bf6d: 0x6db3d020, 0x2bf6e: 0x6db3d220, 0x2bf6f: 0x6dd2b020, + 0x2bf70: 0x6dd2b220, 0x2bf71: 0x6dd2b420, 0x2bf72: 0x6dd2b620, 0x2bf73: 0x6dd2b820, + 0x2bf74: 0x6debe620, 0x2bf75: 0x6debe820, 0x2bf76: 0x6debea20, 0x2bf77: 0x6debec20, + 0x2bf78: 0x6debee20, 0x2bf79: 0x6debf020, 0x2bf7a: 0x6debf220, 0x2bf7b: 0x6debf420, + 0x2bf7c: 0x6e016420, 0x2bf7d: 0x6e016620, 0x2bf7e: 0x6e016820, 0x2bf7f: 0x6e016a20, + // Block 0xafe, offset 0x2bf80 + 0x2bf80: 0x6e016c20, 0x2bf81: 0x6e016e20, 0x2bf82: 0x6e135020, 0x2bf83: 0x6e135220, + 0x2bf84: 0x6e135420, 0x2bf85: 0x6e212220, 0x2bf86: 0x6e212420, 0x2bf87: 0x6e212620, + 0x2bf88: 0x6e212820, 0x2bf89: 0x6e212a20, 0x2bf8a: 0x6e2bdc20, 0x2bf8b: 0x6e2bde20, + 0x2bf8c: 0x6e2be020, 0x2bf8d: 0x6e39ea20, 0x2bf8e: 0x6e42fc20, 0x2bf8f: 0x6c5ff620, + 0x2bf90: 0x6c858220, 0x2bf91: 0x6caf1a20, 0x2bf92: 0x6d0cbc20, 0x2bf93: 0x6d3b1020, + 0x2bf94: 0x6d673a20, 0x2bf95: 0x6c859420, 0x2bf96: 0x6cde5020, 0x2bf97: 0x6d912020, + 0x2bf98: 0x6d912220, 0x2bf99: 0x6e01e020, 0x2bf9a: 0x6c404420, 0x2bf9b: 0x6c404620, + 0x2bf9c: 0x6c600c20, 0x2bf9d: 0x6c600e20, 0x2bf9e: 0x6c601020, 0x2bf9f: 0x6c85a020, + 0x2bfa0: 0x6c85a220, 0x2bfa1: 0x6c85a420, 0x2bfa2: 0x6caf3420, 0x2bfa3: 0x6caf3620, + 0x2bfa4: 0x6caf3820, 0x2bfa5: 0x6caf3a20, 0x2bfa6: 0x6caf3c20, 0x2bfa7: 0x6caf3e20, + 0x2bfa8: 0x6cde6a20, 0x2bfa9: 0x6cde6c20, 0x2bfaa: 0x6cde6e20, 0x2bfab: 0x6cde7020, + 0x2bfac: 0x6cde7220, 0x2bfad: 0x6cde7420, 0x2bfae: 0x6cde7620, 0x2bfaf: 0x6d0cd820, + 0x2bfb0: 0x6d0cda20, 0x2bfb1: 0x6d0cdc20, 0x2bfb2: 0x6d0cde20, 0x2bfb3: 0x6d3b2820, + 0x2bfb4: 0x6d3b2a20, 0x2bfb5: 0x6d3b2c20, 0x2bfb6: 0x6d3b2e20, 0x2bfb7: 0x6d3b3020, + 0x2bfb8: 0x6d3b3220, 0x2bfb9: 0x6d3b3420, 0x2bfba: 0x6d3b3620, 0x2bfbb: 0x6d3b3820, + 0x2bfbc: 0x6d3b3a20, 0x2bfbd: 0x6d3b3c20, 0x2bfbe: 0x6d3b3e20, 0x2bfbf: 0x6d3b4020, + // Block 0xaff, offset 0x2bfc0 + 0x2bfc0: 0x6d3b4220, 0x2bfc1: 0x6d3b4420, 0x2bfc2: 0x6d3b4620, 0x2bfc3: 0x6d675820, + 0x2bfc4: 0x6d675a20, 0x2bfc5: 0x6d675c20, 0x2bfc6: 0x6d675e20, 0x2bfc7: 0x6d676020, + 0x2bfc8: 0x6d676220, 0x2bfc9: 0x6d676420, 0x2bfca: 0x6d676620, 0x2bfcb: 0x6d676820, + 0x2bfcc: 0x6d676a20, 0x2bfcd: 0x6d676c20, 0x2bfce: 0x6d913020, 0x2bfcf: 0x6d913220, + 0x2bfd0: 0x6d913420, 0x2bfd1: 0x6d913620, 0x2bfd2: 0x6d913820, 0x2bfd3: 0x6d913a20, + 0x2bfd4: 0x6db4da20, 0x2bfd5: 0x6db4dc20, 0x2bfd6: 0x6db4de20, 0x2bfd7: 0x6db4e020, + 0x2bfd8: 0x6db4e220, 0x2bfd9: 0x6db4e420, 0x2bfda: 0x6db4e620, 0x2bfdb: 0x6db4e820, + 0x2bfdc: 0x6db4ea20, 0x2bfdd: 0x6db4ec20, 0x2bfde: 0x6dd3aa20, 0x2bfdf: 0x6dd3ac20, + 0x2bfe0: 0x6dd3ae20, 0x2bfe1: 0x6dd3b020, 0x2bfe2: 0x6dd3b220, 0x2bfe3: 0x6dd3b420, + 0x2bfe4: 0x6decac20, 0x2bfe5: 0x6decae20, 0x2bfe6: 0x6e01e420, 0x2bfe7: 0x6e01e620, + 0x2bfe8: 0x6e01e820, 0x2bfe9: 0x6e01ea20, 0x2bfea: 0x6e13d020, 0x2bfeb: 0x6e218c20, + 0x2bfec: 0x6e2c2220, 0x2bfed: 0x6e2c2420, 0x2bfee: 0x6e346020, 0x2bfef: 0x6e346220, + 0x2bff0: 0x6e3a0a20, 0x2bff1: 0x6e40fe20, 0x2bff2: 0x6c606420, 0x2bff3: 0x6c862220, + 0x2bff4: 0x6cafe220, 0x2bff5: 0x6cdefa20, 0x2bff6: 0x6cdefc20, 0x2bff7: 0x6c862a20, + 0x2bff8: 0x6c862c20, 0x2bff9: 0x6cafee20, 0x2bffa: 0x6caff020, 0x2bffb: 0x6caff220, + 0x2bffc: 0x6cdf0a20, 0x2bffd: 0x6cdf0c20, 0x2bffe: 0x6cdf0e20, 0x2bfff: 0x6cdf1020, + // Block 0xb00, offset 0x2c000 + 0x2c000: 0x6d0d7c20, 0x2c001: 0x6d0d7e20, 0x2c002: 0x6d3bec20, 0x2c003: 0x6d3bee20, + 0x2c004: 0x6d67f820, 0x2c005: 0x6d67fa20, 0x2c006: 0x6d91c220, 0x2c007: 0x6d91c420, + 0x2c008: 0x6d91c620, 0x2c009: 0x6d91c820, 0x2c00a: 0x6db58020, 0x2c00b: 0x6db58220, + 0x2c00c: 0x6db58420, 0x2c00d: 0x6dd41420, 0x2c00e: 0x6dd41620, 0x2c00f: 0x6ded0420, + 0x2c010: 0x6ded0620, 0x2c011: 0x6ded0820, 0x2c012: 0x6ded0a20, 0x2c013: 0x6ded0c20, + 0x2c014: 0x6e13fc20, 0x2c015: 0x6e3e2e20, 0x2c016: 0x6e45d820, 0x2c017: 0x6cb01e20, + 0x2c018: 0x6d0db020, 0x2c019: 0x6d0db220, 0x2c01a: 0x6d0db420, 0x2c01b: 0x6d3c2020, + 0x2c01c: 0x6d683a20, 0x2c01d: 0x6d683c20, 0x2c01e: 0x6d683e20, 0x2c01f: 0x6d684020, + 0x2c020: 0x6d684220, 0x2c021: 0x6d920220, 0x2c022: 0x6d920420, 0x2c023: 0x6d920620, + 0x2c024: 0x6d920820, 0x2c025: 0x6db5a820, 0x2c026: 0x6db5aa20, 0x2c027: 0x6dd43620, + 0x2c028: 0x6ded2420, 0x2c029: 0x6ded2620, 0x2c02a: 0x6e022e20, 0x2c02b: 0x6e023020, + 0x2c02c: 0x6ded2820, 0x2c02d: 0x6e3a3620, 0x2c02e: 0x6c608620, 0x2c02f: 0x6c608820, + 0x2c030: 0x6c608a20, 0x2c031: 0x6c864a20, 0x2c032: 0x6c864c20, 0x2c033: 0x6cb05620, + 0x2c034: 0x6cb05820, 0x2c035: 0x6cb05a20, 0x2c036: 0x6cb05c20, 0x2c037: 0x6cb05e20, + 0x2c038: 0x6cb06020, 0x2c039: 0x6cb06220, 0x2c03a: 0x6cb06420, 0x2c03b: 0x6cb06620, + 0x2c03c: 0x6cb06820, 0x2c03d: 0x6cb06a20, 0x2c03e: 0x6cb06c20, 0x2c03f: 0x6cb06e20, + // Block 0xb01, offset 0x2c040 + 0x2c040: 0x6cb07020, 0x2c041: 0x6cb07220, 0x2c042: 0x6cb07420, 0x2c043: 0x6cb07620, + 0x2c044: 0x6cdf6020, 0x2c045: 0x6cdf6220, 0x2c046: 0x6cdf6420, 0x2c047: 0x6cdf6620, + 0x2c048: 0x6cdf6820, 0x2c049: 0x6cdf6a20, 0x2c04a: 0x6cdf6c20, 0x2c04b: 0x6cdf6e20, + 0x2c04c: 0x6cdf7020, 0x2c04d: 0x6cdf7220, 0x2c04e: 0x6cdf7420, 0x2c04f: 0x6cdf7620, + 0x2c050: 0x6cdf7820, 0x2c051: 0x6cdf7a20, 0x2c052: 0x6cdf7c20, 0x2c053: 0x6cdf7e20, + 0x2c054: 0x6d0de020, 0x2c055: 0x6d0de220, 0x2c056: 0x6d0de420, 0x2c057: 0x6d0de620, + 0x2c058: 0x6d0de820, 0x2c059: 0x6d0dea20, 0x2c05a: 0x6d0dec20, 0x2c05b: 0x6d0dee20, + 0x2c05c: 0x6d0df020, 0x2c05d: 0x6d3c4220, 0x2c05e: 0x6d3c4420, 0x2c05f: 0x6d3c4620, + 0x2c060: 0x6d3c4820, 0x2c061: 0x6d3c4a20, 0x2c062: 0x6d3c4c20, 0x2c063: 0x6d3c4e20, + 0x2c064: 0x6d3c5020, 0x2c065: 0x6d3c5220, 0x2c066: 0x6d3c5420, 0x2c067: 0x6d3c5620, + 0x2c068: 0x6d3c5820, 0x2c069: 0x6d687e20, 0x2c06a: 0x6d688020, 0x2c06b: 0x6d688220, + 0x2c06c: 0x6d688420, 0x2c06d: 0x6d688620, 0x2c06e: 0x6d688820, 0x2c06f: 0x6d688a20, + 0x2c070: 0x6d688c20, 0x2c071: 0x6d688e20, 0x2c072: 0x6d689020, 0x2c073: 0x6d689220, + 0x2c074: 0x6d689420, 0x2c075: 0x6d689620, 0x2c076: 0x6d689820, 0x2c077: 0x6d689a20, + 0x2c078: 0x6d689c20, 0x2c079: 0x6d923220, 0x2c07a: 0x6d923420, 0x2c07b: 0x6d923620, + 0x2c07c: 0x6d923820, 0x2c07d: 0x6d923a20, 0x2c07e: 0x6db5d620, 0x2c07f: 0x6db5d820, + // Block 0xb02, offset 0x2c080 + 0x2c080: 0x6db5da20, 0x2c081: 0x6db5dc20, 0x2c082: 0x6db5de20, 0x2c083: 0x6dd45220, + 0x2c084: 0x6dd45420, 0x2c085: 0x6dd45620, 0x2c086: 0x6dd45820, 0x2c087: 0x6dd45a20, + 0x2c088: 0x6dd45c20, 0x2c089: 0x6dd45e20, 0x2c08a: 0x6dd46020, 0x2c08b: 0x6ded4220, + 0x2c08c: 0x6ded4420, 0x2c08d: 0x6ded4620, 0x2c08e: 0x6ded4820, 0x2c08f: 0x6ded4a20, + 0x2c090: 0x6ded4c20, 0x2c091: 0x6ded4e20, 0x2c092: 0x6e024020, 0x2c093: 0x6e024220, + 0x2c094: 0x6e024420, 0x2c095: 0x6e024620, 0x2c096: 0x6e024820, 0x2c097: 0x6e024a20, + 0x2c098: 0x6e024c20, 0x2c099: 0x6e141620, 0x2c09a: 0x6e141820, 0x2c09b: 0x6e141a20, + 0x2c09c: 0x6e141c20, 0x2c09d: 0x6e141e20, 0x2c09e: 0x6e142020, 0x2c09f: 0x6e21c220, + 0x2c0a0: 0x6e21c420, 0x2c0a1: 0x6e21c620, 0x2c0a2: 0x6e2c4420, 0x2c0a3: 0x6cb10a20, + 0x2c0a4: 0x6d0eb220, 0x2c0a5: 0x6d697a20, 0x2c0a6: 0x6db69820, 0x2c0a7: 0x6db69a20, + 0x2c0a8: 0x6dd4fc20, 0x2c0a9: 0x6e2c7620, 0x2c0aa: 0x6c60be20, 0x2c0ab: 0x6c86c420, + 0x2c0ac: 0x6ce04820, 0x2c0ad: 0x6ce04a20, 0x2c0ae: 0x6d3d1620, 0x2c0af: 0x6d698420, + 0x2c0b0: 0x6db69e20, 0x2c0b1: 0x6dd4fe20, 0x2c0b2: 0x6e221620, 0x2c0b3: 0x6c40b620, + 0x2c0b4: 0x6cb15020, 0x2c0b5: 0x6ce05020, 0x2c0b6: 0x6d0eca20, 0x2c0b7: 0x6d3d1e20, + 0x2c0b8: 0x6d3d2020, 0x2c0b9: 0x6d3d2220, 0x2c0ba: 0x6d699620, 0x2c0bb: 0x6d930c20, + 0x2c0bc: 0x6d930e20, 0x2c0bd: 0x6d931020, 0x2c0be: 0x6d931220, 0x2c0bf: 0x6d931420, + // Block 0xb03, offset 0x2c0c0 + 0x2c0c0: 0x6db6ae20, 0x2c0c1: 0x6db6b020, 0x2c0c2: 0x6db6b220, 0x2c0c3: 0x6e147020, + 0x2c0c4: 0x6e3a5420, 0x2c0c5: 0x6c86d820, 0x2c0c6: 0x6cb15820, 0x2c0c7: 0x6cb15a20, + 0x2c0c8: 0x6ce05c20, 0x2c0c9: 0x6d0ed620, 0x2c0ca: 0x6d69b420, 0x2c0cb: 0x6d69b620, + 0x2c0cc: 0x6d69b820, 0x2c0cd: 0x6d932020, 0x2c0ce: 0x6d932220, 0x2c0cf: 0x6dd51420, + 0x2c0d0: 0x6dee0620, 0x2c0d1: 0x6dee0820, 0x2c0d2: 0x6e147620, 0x2c0d3: 0x6e222220, + 0x2c0d4: 0x6e3a5c20, 0x2c0d5: 0x6e3a5e20, 0x2c0d6: 0x6cb17820, 0x2c0d7: 0x6cb17a20, + 0x2c0d8: 0x6cb17c20, 0x2c0d9: 0x6cb17e20, 0x2c0da: 0x6ce07a20, 0x2c0db: 0x6ce07c20, + 0x2c0dc: 0x6d3d4e20, 0x2c0dd: 0x6d69dc20, 0x2c0de: 0x6d69de20, 0x2c0df: 0x6d934020, + 0x2c0e0: 0x6db6e220, 0x2c0e1: 0x6dd52820, 0x2c0e2: 0x6dd52a20, 0x2c0e3: 0x6dee1820, + 0x2c0e4: 0x6dee1a20, 0x2c0e5: 0x6dee1c20, 0x2c0e6: 0x6dee1e20, 0x2c0e7: 0x6cb19420, + 0x2c0e8: 0x6cb19620, 0x2c0e9: 0x6ce0ae20, 0x2c0ea: 0x6ce0b020, 0x2c0eb: 0x6ce0b220, + 0x2c0ec: 0x6ce0b420, 0x2c0ed: 0x6ce0b620, 0x2c0ee: 0x6ce0b820, 0x2c0ef: 0x6ce0ba20, + 0x2c0f0: 0x6d0f2820, 0x2c0f1: 0x6d0f2a20, 0x2c0f2: 0x6d0f2c20, 0x2c0f3: 0x6d3d7620, + 0x2c0f4: 0x6d3d7820, 0x2c0f5: 0x6d3d7a20, 0x2c0f6: 0x6d6a0020, 0x2c0f7: 0x6d6a0220, + 0x2c0f8: 0x6d6a0420, 0x2c0f9: 0x6d6a0620, 0x2c0fa: 0x6d6a0820, 0x2c0fb: 0x6d6a0a20, + 0x2c0fc: 0x6d6a0c20, 0x2c0fd: 0x6d6a0e20, 0x2c0fe: 0x6d6a1020, 0x2c0ff: 0x6d6a1220, + // Block 0xb04, offset 0x2c100 + 0x2c100: 0x6d936820, 0x2c101: 0x6d936a20, 0x2c102: 0x6d936c20, 0x2c103: 0x6d936e20, + 0x2c104: 0x6d937020, 0x2c105: 0x6db70420, 0x2c106: 0x6db70620, 0x2c107: 0x6dd54620, + 0x2c108: 0x6dee3620, 0x2c109: 0x6e02e220, 0x2c10a: 0x6e223020, 0x2c10b: 0x6e2c8a20, + 0x2c10c: 0x6d0f9020, 0x2c10d: 0x6d6a6e20, 0x2c10e: 0x6d6a7020, 0x2c10f: 0x6d93be20, + 0x2c110: 0x6d93c020, 0x2c111: 0x6c872620, 0x2c112: 0x6d0f9820, 0x2c113: 0x6d3dca20, + 0x2c114: 0x6d3dcc20, 0x2c115: 0x6e14a620, 0x2c116: 0x6c872820, 0x2c117: 0x6c872a20, + 0x2c118: 0x6c872c20, 0x2c119: 0x6cb1f220, 0x2c11a: 0x6cb1f420, 0x2c11b: 0x6cb1f620, + 0x2c11c: 0x6cb1f820, 0x2c11d: 0x6ce13e20, 0x2c11e: 0x6ce14020, 0x2c11f: 0x6ce14220, + 0x2c120: 0x6ce14420, 0x2c121: 0x6ce14620, 0x2c122: 0x6ce14820, 0x2c123: 0x6ce14a20, + 0x2c124: 0x6ce14c20, 0x2c125: 0x6d0fa820, 0x2c126: 0x6d0faa20, 0x2c127: 0x6d0fac20, + 0x2c128: 0x6d0fae20, 0x2c129: 0x6d0fb020, 0x2c12a: 0x6d0fb220, 0x2c12b: 0x6d3dd820, + 0x2c12c: 0x6d3dda20, 0x2c12d: 0x6d3ddc20, 0x2c12e: 0x6d3dde20, 0x2c12f: 0x6d3de020, + 0x2c130: 0x6d3de220, 0x2c131: 0x6d3de420, 0x2c132: 0x6d3de620, 0x2c133: 0x6d6a8420, + 0x2c134: 0x6d6a8620, 0x2c135: 0x6d6a8820, 0x2c136: 0x6d6a8a20, 0x2c137: 0x6d6a8c20, + 0x2c138: 0x6d6a8e20, 0x2c139: 0x6d93dc20, 0x2c13a: 0x6d93de20, 0x2c13b: 0x6d93e020, + 0x2c13c: 0x6d93e220, 0x2c13d: 0x6db74e20, 0x2c13e: 0x6db75020, 0x2c13f: 0x6db75220, + // Block 0xb05, offset 0x2c140 + 0x2c140: 0x6db75420, 0x2c141: 0x6dd59c20, 0x2c142: 0x6dd59e20, 0x2c143: 0x6dd5a020, + 0x2c144: 0x6dd5a220, 0x2c145: 0x6dd5a420, 0x2c146: 0x6dd5a620, 0x2c147: 0x6dee8620, + 0x2c148: 0x6e030a20, 0x2c149: 0x6e030c20, 0x2c14a: 0x6e030e20, 0x2c14b: 0x6e031020, + 0x2c14c: 0x6e14ae20, 0x2c14d: 0x6e225c20, 0x2c14e: 0x6e225e20, 0x2c14f: 0x6e226020, + 0x2c150: 0x6e2cae20, 0x2c151: 0x6e34ba20, 0x2c152: 0x6e3a6e20, 0x2c153: 0x6c611620, + 0x2c154: 0x6c611820, 0x2c155: 0x6c875020, 0x2c156: 0x6c875220, 0x2c157: 0x6cb23e20, + 0x2c158: 0x6cb24020, 0x2c159: 0x6cb24220, 0x2c15a: 0x6cb24420, 0x2c15b: 0x6cb24620, + 0x2c15c: 0x6cb24820, 0x2c15d: 0x6cb24a20, 0x2c15e: 0x6cb24c20, 0x2c15f: 0x6ce19c20, + 0x2c160: 0x6ce19e20, 0x2c161: 0x6ce1a020, 0x2c162: 0x6ce1a220, 0x2c163: 0x6ce1a420, + 0x2c164: 0x6ce1a620, 0x2c165: 0x6ce1a820, 0x2c166: 0x6ce1aa20, 0x2c167: 0x6ce1ac20, + 0x2c168: 0x6ce1ae20, 0x2c169: 0x6ce1b020, 0x2c16a: 0x6ce1b220, 0x2c16b: 0x6ce1b420, + 0x2c16c: 0x6ce1b620, 0x2c16d: 0x6ce1b820, 0x2c16e: 0x6d100a20, 0x2c16f: 0x6d100c20, + 0x2c170: 0x6d100e20, 0x2c171: 0x6d101020, 0x2c172: 0x6d101220, 0x2c173: 0x6d101420, + 0x2c174: 0x6d3e3a20, 0x2c175: 0x6d3e3c20, 0x2c176: 0x6d3e3e20, 0x2c177: 0x6d3e4020, + 0x2c178: 0x6d3e4220, 0x2c179: 0x6d3e4420, 0x2c17a: 0x6d3e4620, 0x2c17b: 0x6d3e4820, + 0x2c17c: 0x6d6ada20, 0x2c17d: 0x6d3e4a20, 0x2c17e: 0x6d6adc20, 0x2c17f: 0x6d6ade20, + // Block 0xb06, offset 0x2c180 + 0x2c180: 0x6d6ae020, 0x2c181: 0x6d6ae220, 0x2c182: 0x6d6ae420, 0x2c183: 0x6d6ae620, + 0x2c184: 0x6d6ae820, 0x2c185: 0x6d6aea20, 0x2c186: 0x6d6aec20, 0x2c187: 0x6d6aee20, + 0x2c188: 0x6d6af020, 0x2c189: 0x6d6af220, 0x2c18a: 0x6d6af420, 0x2c18b: 0x6d6af620, + 0x2c18c: 0x6d6af820, 0x2c18d: 0x6d943220, 0x2c18e: 0x6d943420, 0x2c18f: 0x6d943620, + 0x2c190: 0x6d943820, 0x2c191: 0x6d943a20, 0x2c192: 0x6d943c20, 0x2c193: 0x6d943e20, + 0x2c194: 0x6d944020, 0x2c195: 0x6d944220, 0x2c196: 0x6d944420, 0x2c197: 0x6db78420, + 0x2c198: 0x6db78620, 0x2c199: 0x6db78820, 0x2c19a: 0x6db78a20, 0x2c19b: 0x6db78c20, + 0x2c19c: 0x6db78e20, 0x2c19d: 0x6db79020, 0x2c19e: 0x6dd5de20, 0x2c19f: 0x6dd5e020, + 0x2c1a0: 0x6dd5e220, 0x2c1a1: 0x6dd5e420, 0x2c1a2: 0x6dd5e620, 0x2c1a3: 0x6deebe20, + 0x2c1a4: 0x6deec020, 0x2c1a5: 0x6deec220, 0x2c1a6: 0x6deec420, 0x2c1a7: 0x6deec620, + 0x2c1a8: 0x6e032c20, 0x2c1a9: 0x6e032e20, 0x2c1aa: 0x6e14c420, 0x2c1ab: 0x6e14c620, + 0x2c1ac: 0x6e227020, 0x2c1ad: 0x6e2cbe20, 0x2c1ae: 0x6e2cc020, 0x2c1af: 0x6e34c020, + 0x2c1b0: 0x6e3a7a20, 0x2c1b1: 0x6e432220, 0x2c1b2: 0x6ce23a20, 0x2c1b3: 0x6ce23c20, + 0x2c1b4: 0x6ce23e20, 0x2c1b5: 0x6ce24020, 0x2c1b6: 0x6ce24220, 0x2c1b7: 0x6d10b020, + 0x2c1b8: 0x6d10b220, 0x2c1b9: 0x6d10b420, 0x2c1ba: 0x6d10b620, 0x2c1bb: 0x6d6b9c20, + 0x2c1bc: 0x6d94e220, 0x2c1bd: 0x6db81620, 0x2c1be: 0x6db81820, 0x2c1bf: 0x6def6a20, + // Block 0xb07, offset 0x2c1c0 + 0x2c1c0: 0x6e039a20, 0x2c1c1: 0x6e2ce820, 0x2c1c2: 0x6c612c20, 0x2c1c3: 0x6c612e20, + 0x2c1c4: 0x6c613020, 0x2c1c5: 0x6c878c20, 0x2c1c6: 0x6cb2d220, 0x2c1c7: 0x6cb2d420, + 0x2c1c8: 0x6cb2d620, 0x2c1c9: 0x6cb2d820, 0x2c1ca: 0x6cb2da20, 0x2c1cb: 0x6cb2dc20, + 0x2c1cc: 0x6cb2de20, 0x2c1cd: 0x6cb2e020, 0x2c1ce: 0x6cb2e220, 0x2c1cf: 0x6ce26420, + 0x2c1d0: 0x6ce26620, 0x2c1d1: 0x6ce26820, 0x2c1d2: 0x6ce26a20, 0x2c1d3: 0x6d10e020, + 0x2c1d4: 0x6d10e220, 0x2c1d5: 0x6d10e420, 0x2c1d6: 0x6d10e620, 0x2c1d7: 0x6d10e820, + 0x2c1d8: 0x6d3f0220, 0x2c1d9: 0x6d3f0420, 0x2c1da: 0x6d3f0620, 0x2c1db: 0x6d3f0820, + 0x2c1dc: 0x6d6bc820, 0x2c1dd: 0x6d6bca20, 0x2c1de: 0x6d6bcc20, 0x2c1df: 0x6d6bce20, + 0x2c1e0: 0x6d94fe20, 0x2c1e1: 0x6d950020, 0x2c1e2: 0x6d950220, 0x2c1e3: 0x6d950420, + 0x2c1e4: 0x6d950620, 0x2c1e5: 0x6db83620, 0x2c1e6: 0x6db83820, 0x2c1e7: 0x6db83a20, + 0x2c1e8: 0x6db83c20, 0x2c1e9: 0x6db83e20, 0x2c1ea: 0x6db84020, 0x2c1eb: 0x6dd6c020, + 0x2c1ec: 0x6dd6c220, 0x2c1ed: 0x6dd6c420, 0x2c1ee: 0x6dd6c620, 0x2c1ef: 0x6dd6c820, + 0x2c1f0: 0x6dd6ca20, 0x2c1f1: 0x6dd6cc20, 0x2c1f2: 0x6def9220, 0x2c1f3: 0x6def9420, + 0x2c1f4: 0x6def9620, 0x2c1f5: 0x6def9820, 0x2c1f6: 0x6e03ac20, 0x2c1f7: 0x6e151220, + 0x2c1f8: 0x6e151420, 0x2c1f9: 0x6e151620, 0x2c1fa: 0x6e22b420, 0x2c1fb: 0x6e22b620, + 0x2c1fc: 0x6e34e020, 0x2c1fd: 0x6e3e5e20, 0x2c1fe: 0x6e412e20, 0x2c1ff: 0x6e45de20, + // Block 0xb08, offset 0x2c200 + 0x2c200: 0x6c87b820, 0x2c201: 0x6cb33820, 0x2c202: 0x6c614420, 0x2c203: 0x6d6c5420, + 0x2c204: 0x6e03ec20, 0x2c205: 0x6d115e20, 0x2c206: 0x6d3f7620, 0x2c207: 0x6d6c6020, + 0x2c208: 0x6e03f820, 0x2c209: 0x6e03fa20, 0x2c20a: 0x6c272820, 0x2c20b: 0x6c272a20, + 0x2c20c: 0x6c40f820, 0x2c20d: 0x6c40fa20, 0x2c20e: 0x6c40fc20, 0x2c20f: 0x6c40fe20, + 0x2c210: 0x6c616620, 0x2c211: 0x6c616820, 0x2c212: 0x6c87d820, 0x2c213: 0x6c87da20, + 0x2c214: 0x6c87dc20, 0x2c215: 0x6c87de20, 0x2c216: 0x6c87e020, 0x2c217: 0x6c87e220, + 0x2c218: 0x6c87e420, 0x2c219: 0x6cb34820, 0x2c21a: 0x6cb34a20, 0x2c21b: 0x6cb34c20, + 0x2c21c: 0x6ce2fa20, 0x2c21d: 0x6ce2fc20, 0x2c21e: 0x6ce2fe20, 0x2c21f: 0x6ce30020, + 0x2c220: 0x6ce30220, 0x2c221: 0x6d116820, 0x2c222: 0x6d3f7820, 0x2c223: 0x6d3f7a20, + 0x2c224: 0x6d3f7c20, 0x2c225: 0x6d3f7e20, 0x2c226: 0x6d6c6620, 0x2c227: 0x6d6c6820, + 0x2c228: 0x6d6c6a20, 0x2c229: 0x6d6c6c20, 0x2c22a: 0x6d959620, 0x2c22b: 0x6d959820, + 0x2c22c: 0x6d959a20, 0x2c22d: 0x6d959c20, 0x2c22e: 0x6db8b020, 0x2c22f: 0x6dd71e20, + 0x2c230: 0x6dd72020, 0x2c231: 0x6defda20, 0x2c232: 0x6e34f820, 0x2c233: 0x6c0a8c20, + 0x2c234: 0x6c153a20, 0x2c235: 0x6c278c20, 0x2c236: 0x6c278e20, 0x2c237: 0x6c279020, + 0x2c238: 0x6c417c20, 0x2c239: 0x6c417e20, 0x2c23a: 0x6c418020, 0x2c23b: 0x6c61d220, + 0x2c23c: 0x6c61d420, 0x2c23d: 0x6d11fc20, 0x2c23e: 0x6c61d620, 0x2c23f: 0x6c61d820, + // Block 0xb09, offset 0x2c240 + 0x2c240: 0x6c61da20, 0x2c241: 0x6c61dc20, 0x2c242: 0x6c61de20, 0x2c243: 0x6c886c20, + 0x2c244: 0x6c886e20, 0x2c245: 0x6c887020, 0x2c246: 0x6c887220, 0x2c247: 0x6c887420, + 0x2c248: 0x6d400420, 0x2c249: 0x6d400620, 0x2c24a: 0x6cb40020, 0x2c24b: 0x6cb40220, + 0x2c24c: 0x6cb40420, 0x2c24d: 0x6cb40620, 0x2c24e: 0x6cb40820, 0x2c24f: 0x6cb40a20, + 0x2c250: 0x6ce3c020, 0x2c251: 0x6ce3c220, 0x2c252: 0x6ce3c420, 0x2c253: 0x6d120020, + 0x2c254: 0x6d120220, 0x2c255: 0x6d120420, 0x2c256: 0x6db90420, 0x2c257: 0x6d120620, + 0x2c258: 0x6d400a20, 0x2c259: 0x6d400c20, 0x2c25a: 0x6d400e20, 0x2c25b: 0x6d401020, + 0x2c25c: 0x6d401220, 0x2c25d: 0x6d6cfa20, 0x2c25e: 0x6d6cfc20, 0x2c25f: 0x6d6cfe20, + 0x2c260: 0x6d6d0020, 0x2c261: 0x6d95fc20, 0x2c262: 0x6db90620, 0x2c263: 0x6e2d1620, + 0x2c264: 0x6e2d1820, 0x2c265: 0x6c625620, 0x2c266: 0x6c625820, 0x2c267: 0x6c88ea20, + 0x2c268: 0x6c88ec20, 0x2c269: 0x6cb47420, 0x2c26a: 0x6cb47620, 0x2c26b: 0x6cb47820, + 0x2c26c: 0x6cb47a20, 0x2c26d: 0x6cb47c20, 0x2c26e: 0x6ce42020, 0x2c26f: 0x6ce42220, + 0x2c270: 0x6ce42420, 0x2c271: 0x6d126a20, 0x2c272: 0x6ce42620, 0x2c273: 0x6ce42820, + 0x2c274: 0x6d126c20, 0x2c275: 0x6d126e20, 0x2c276: 0x6d127020, 0x2c277: 0x6d127220, + 0x2c278: 0x6d127420, 0x2c279: 0x6d127620, 0x2c27a: 0x6d407a20, 0x2c27b: 0x6d407c20, + 0x2c27c: 0x6d6d4820, 0x2c27d: 0x6d6d4a20, 0x2c27e: 0x6d6d4c20, 0x2c27f: 0x6d6d4e20, + // Block 0xb0a, offset 0x2c280 + 0x2c280: 0x6d963020, 0x2c281: 0x6d963220, 0x2c282: 0x6d963420, 0x2c283: 0x6d963620, + 0x2c284: 0x6d963820, 0x2c285: 0x6d963a20, 0x2c286: 0x6d963c20, 0x2c287: 0x6d963e20, + 0x2c288: 0x6d964020, 0x2c289: 0x6db93420, 0x2c28a: 0x6db93620, 0x2c28b: 0x6db93820, + 0x2c28c: 0x6db93a20, 0x2c28d: 0x6dd78020, 0x2c28e: 0x6df00a20, 0x2c28f: 0x6df00c20, + 0x2c290: 0x6df00e20, 0x2c291: 0x6df01020, 0x2c292: 0x6df01220, 0x2c293: 0x6e155c20, + 0x2c294: 0x6e155e20, 0x2c295: 0x6e22f020, 0x2c296: 0x6e22f220, 0x2c297: 0x6e34fe20, + 0x2c298: 0x6e350020, 0x2c299: 0x6e433820, 0x2c29a: 0x6cb4ca20, 0x2c29b: 0x6c890c20, + 0x2c29c: 0x6cb4d420, 0x2c29d: 0x6ce47c20, 0x2c29e: 0x6ce47e20, 0x2c29f: 0x6ce48020, + 0x2c2a0: 0x6ce48220, 0x2c2a1: 0x6d12c020, 0x2c2a2: 0x6d12c220, 0x2c2a3: 0x6d12c420, + 0x2c2a4: 0x6d40d620, 0x2c2a5: 0x6d40d820, 0x2c2a6: 0x6d40da20, 0x2c2a7: 0x6d40dc20, + 0x2c2a8: 0x6d40de20, 0x2c2a9: 0x6d40e020, 0x2c2aa: 0x6d40e220, 0x2c2ab: 0x6d6db220, + 0x2c2ac: 0x6d6db420, 0x2c2ad: 0x6d6db620, 0x2c2ae: 0x6d6db820, 0x2c2af: 0x6d6dba20, + 0x2c2b0: 0x6d6dbc20, 0x2c2b1: 0x6d6dbe20, 0x2c2b2: 0x6d6dc020, 0x2c2b3: 0x6d969a20, + 0x2c2b4: 0x6d969c20, 0x2c2b5: 0x6d969e20, 0x2c2b6: 0x6d96a020, 0x2c2b7: 0x6db9a020, + 0x2c2b8: 0x6db9a220, 0x2c2b9: 0x6db9a420, 0x2c2ba: 0x6db9a620, 0x2c2bb: 0x6db9a820, + 0x2c2bc: 0x6db9aa20, 0x2c2bd: 0x6dd7d820, 0x2c2be: 0x6dd7da20, 0x2c2bf: 0x6dd7dc20, + // Block 0xb0b, offset 0x2c2c0 + 0x2c2c0: 0x6dd7de20, 0x2c2c1: 0x6dd7e020, 0x2c2c2: 0x6dd7e220, 0x2c2c3: 0x6dd7e420, + 0x2c2c4: 0x6dd7e620, 0x2c2c5: 0x6dd7e820, 0x2c2c6: 0x6dd7ea20, 0x2c2c7: 0x6dd7ec20, + 0x2c2c8: 0x6df05620, 0x2c2c9: 0x6df05820, 0x2c2ca: 0x6df05a20, 0x2c2cb: 0x6df05c20, + 0x2c2cc: 0x6df05e20, 0x2c2cd: 0x6df06020, 0x2c2ce: 0x6df06220, 0x2c2cf: 0x6df06420, + 0x2c2d0: 0x6df06620, 0x2c2d1: 0x6df06820, 0x2c2d2: 0x6df06a20, 0x2c2d3: 0x6df06c20, + 0x2c2d4: 0x6e046a20, 0x2c2d5: 0x6e046c20, 0x2c2d6: 0x6e046e20, 0x2c2d7: 0x6e047020, + 0x2c2d8: 0x6e047220, 0x2c2d9: 0x6e047420, 0x2c2da: 0x6e047620, 0x2c2db: 0x6e047820, + 0x2c2dc: 0x6e047a20, 0x2c2dd: 0x6e158020, 0x2c2de: 0x6e158220, 0x2c2df: 0x6e158420, + 0x2c2e0: 0x6e158620, 0x2c2e1: 0x6e158820, 0x2c2e2: 0x6e158a20, 0x2c2e3: 0x6e158c20, + 0x2c2e4: 0x6e158e20, 0x2c2e5: 0x6e159020, 0x2c2e6: 0x6e159220, 0x2c2e7: 0x6e230620, + 0x2c2e8: 0x6e230820, 0x2c2e9: 0x6e230a20, 0x2c2ea: 0x6e230c20, 0x2c2eb: 0x6e230e20, + 0x2c2ec: 0x6e231020, 0x2c2ed: 0x6e231220, 0x2c2ee: 0x6e231420, 0x2c2ef: 0x6e2d3a20, + 0x2c2f0: 0x6e2d3c20, 0x2c2f1: 0x6e2d3e20, 0x2c2f2: 0x6e2d4020, 0x2c2f3: 0x6e2d4220, + 0x2c2f4: 0x6e2d4420, 0x2c2f5: 0x6e351620, 0x2c2f6: 0x6e351820, 0x2c2f7: 0x6e351a20, + 0x2c2f8: 0x6e3ab220, 0x2c2f9: 0x6e449220, 0x2c2fa: 0x6ce52420, 0x2c2fb: 0x6ce52620, + 0x2c2fc: 0x6ce52820, 0x2c2fd: 0x6d139e20, 0x2c2fe: 0x6d13a020, 0x2c2ff: 0x6d13a220, + // Block 0xb0c, offset 0x2c300 + 0x2c300: 0x6d41c220, 0x2c301: 0x6d6ed020, 0x2c302: 0x6dd8fa20, 0x2c303: 0x6e058c20, + 0x2c304: 0x6e058e20, 0x2c305: 0x6e059020, 0x2c306: 0x6e435820, 0x2c307: 0x6cb58820, + 0x2c308: 0x6d13f620, 0x2c309: 0x6d13f820, 0x2c30a: 0x6d41fc20, 0x2c30b: 0x6df16420, + 0x2c30c: 0x6cb5a620, 0x2c30d: 0x6cb5a820, 0x2c30e: 0x6ce58c20, 0x2c30f: 0x6ce58e20, + 0x2c310: 0x6ce59020, 0x2c311: 0x6ce59220, 0x2c312: 0x6d141820, 0x2c313: 0x6d141a20, + 0x2c314: 0x6d141c20, 0x2c315: 0x6d420c20, 0x2c316: 0x6d420e20, 0x2c317: 0x6d421020, + 0x2c318: 0x6d421220, 0x2c319: 0x6d421420, 0x2c31a: 0x6d421620, 0x2c31b: 0x6d421820, + 0x2c31c: 0x6d6f1c20, 0x2c31d: 0x6d6f1e20, 0x2c31e: 0x6d6f2020, 0x2c31f: 0x6d6f2220, + 0x2c320: 0x6d982420, 0x2c321: 0x6d982620, 0x2c322: 0x6d982820, 0x2c323: 0x6d982a20, + 0x2c324: 0x6d982c20, 0x2c325: 0x6d982e20, 0x2c326: 0x6d983020, 0x2c327: 0x6d983220, + 0x2c328: 0x6d983420, 0x2c329: 0x6dbb2620, 0x2c32a: 0x6dbb2820, 0x2c32b: 0x6dbb2a20, + 0x2c32c: 0x6dbb2c20, 0x2c32d: 0x6dbb2e20, 0x2c32e: 0x6dbb3020, 0x2c32f: 0x6dbb3220, + 0x2c330: 0x6df17420, 0x2c331: 0x6e05a020, 0x2c332: 0x6e165620, 0x2c333: 0x6e165820, + 0x2c334: 0x6e165a20, 0x2c335: 0x6e23a420, 0x2c336: 0x6d426220, 0x2c337: 0x6d6f8220, + 0x2c338: 0x6dbb8620, 0x2c339: 0x6c0ab020, 0x2c33a: 0x6c0ab220, 0x2c33b: 0x6c15a220, + 0x2c33c: 0x6c281e20, 0x2c33d: 0x6c282020, 0x2c33e: 0x6c89a220, 0x2c33f: 0x6c282220, + // Block 0xb0d, offset 0x2c340 + 0x2c340: 0x6c282420, 0x2c341: 0x6c421220, 0x2c342: 0x6c421420, 0x2c343: 0x6c421620, + 0x2c344: 0x6c62cc20, 0x2c345: 0x6c62ce20, 0x2c346: 0x6c62d020, 0x2c347: 0x6c62d220, + 0x2c348: 0x6c62d420, 0x2c349: 0x6c89a420, 0x2c34a: 0x6c89a620, 0x2c34b: 0x6c89a820, + 0x2c34c: 0x6c89aa20, 0x2c34d: 0x6c89ac20, 0x2c34e: 0x6c89ae20, 0x2c34f: 0x6c89b020, + 0x2c350: 0x6cb5da20, 0x2c351: 0x6cb5dc20, 0x2c352: 0x6cb5de20, 0x2c353: 0x6cb5e020, + 0x2c354: 0x6cb5e220, 0x2c355: 0x6cb5e420, 0x2c356: 0x6cb5e620, 0x2c357: 0x6ce5fc20, + 0x2c358: 0x6ce5fe20, 0x2c359: 0x6ce60020, 0x2c35a: 0x6d148020, 0x2c35b: 0x6d148220, + 0x2c35c: 0x6d148420, 0x2c35d: 0x6d148620, 0x2c35e: 0x6d148820, 0x2c35f: 0x6d148a20, + 0x2c360: 0x6d426c20, 0x2c361: 0x6d426e20, 0x2c362: 0x6d427020, 0x2c363: 0x6d427220, + 0x2c364: 0x6d6f8820, 0x2c365: 0x6d6f8a20, 0x2c366: 0x6d6f8c20, 0x2c367: 0x6d989220, + 0x2c368: 0x6d989420, 0x2c369: 0x6d6f8e20, 0x2c36a: 0x6d989620, 0x2c36b: 0x6dbb8c20, + 0x2c36c: 0x6dbb8e20, 0x2c36d: 0x6dbb9020, 0x2c36e: 0x6df1a220, 0x2c36f: 0x6e05da20, + 0x2c370: 0x6e169020, 0x2c371: 0x6c8a3020, 0x2c372: 0x6cb66020, 0x2c373: 0x6cb66220, + 0x2c374: 0x6ce68a20, 0x2c375: 0x6ce68c20, 0x2c376: 0x6ce68e20, 0x2c377: 0x6d14e020, + 0x2c378: 0x6d14e220, 0x2c379: 0x6d14e420, 0x2c37a: 0x6d14e620, 0x2c37b: 0x6d42d020, + 0x2c37c: 0x6d6fcc20, 0x2c37d: 0x6d6fce20, 0x2c37e: 0x6d98c820, 0x2c37f: 0x6d98ca20, + // Block 0xb0e, offset 0x2c380 + 0x2c380: 0x6d8a5620, 0x2c381: 0x6dbbb620, 0x2c382: 0x6dbbb820, 0x2c383: 0x6dd98a20, + 0x2c384: 0x6df1ae20, 0x2c385: 0x6e05ee20, 0x2c386: 0x6e05f020, 0x2c387: 0x6e05f220, + 0x2c388: 0x6e23be20, 0x2c389: 0x6e3afa20, 0x2c38a: 0x6e464620, 0x2c38b: 0x6cb67c20, + 0x2c38c: 0x6ce6be20, 0x2c38d: 0x6ce6c020, 0x2c38e: 0x6d151820, 0x2c38f: 0x6d430c20, + 0x2c390: 0x6d430e20, 0x2c391: 0x6d431020, 0x2c392: 0x6d431220, 0x2c393: 0x6d431420, + 0x2c394: 0x6d431620, 0x2c395: 0x6d431820, 0x2c396: 0x6d431a20, 0x2c397: 0x6d6ffc20, + 0x2c398: 0x6d6ffe20, 0x2c399: 0x6d700020, 0x2c39a: 0x6d990e20, 0x2c39b: 0x6d991020, + 0x2c39c: 0x6d991220, 0x2c39d: 0x6d991420, 0x2c39e: 0x6dbbec20, 0x2c39f: 0x6dbbee20, + 0x2c3a0: 0x6dbbf020, 0x2c3a1: 0x6dbbf220, 0x2c3a2: 0x6dbbf420, 0x2c3a3: 0x6dbbf620, + 0x2c3a4: 0x6dbbf820, 0x2c3a5: 0x6dd9be20, 0x2c3a6: 0x6dd9c020, 0x2c3a7: 0x6dd9c220, + 0x2c3a8: 0x6dd9c420, 0x2c3a9: 0x6dd9c620, 0x2c3aa: 0x6dd9c820, 0x2c3ab: 0x6df1d420, + 0x2c3ac: 0x6df1d620, 0x2c3ad: 0x6df1d820, 0x2c3ae: 0x6df1da20, 0x2c3af: 0x6df1dc20, + 0x2c3b0: 0x6e061a20, 0x2c3b1: 0x6e061c20, 0x2c3b2: 0x6e23d220, 0x2c3b3: 0x6e23d420, + 0x2c3b4: 0x6e23d620, 0x2c3b5: 0x6e2de620, 0x2c3b6: 0x6e2de820, 0x2c3b7: 0x6e358e20, + 0x2c3b8: 0x6e3b0220, 0x2c3b9: 0x6e416620, 0x2c3ba: 0x6e46f020, 0x2c3bb: 0x6e473e20, + 0x2c3bc: 0x6e240c20, 0x2c3bd: 0x6cb69c20, 0x2c3be: 0x6cb69e20, 0x2c3bf: 0x6ce6fe20, + // Block 0xb0f, offset 0x2c3c0 + 0x2c3c0: 0x6d705020, 0x2c3c1: 0x6e067220, 0x2c3c2: 0x6d156820, 0x2c3c3: 0x6d156a20, + 0x2c3c4: 0x6d156c20, 0x2c3c5: 0x6d435c20, 0x2c3c6: 0x6d435e20, 0x2c3c7: 0x6d436020, + 0x2c3c8: 0x6d998620, 0x2c3c9: 0x6d998820, 0x2c3ca: 0x6dbc5620, 0x2c3cb: 0x6e067c20, + 0x2c3cc: 0x6e16f020, 0x2c3cd: 0x6e16f220, 0x2c3ce: 0x6e240e20, 0x2c3cf: 0x6e35b420, + 0x2c3d0: 0x6ce71820, 0x2c3d1: 0x6ce71a20, 0x2c3d2: 0x6ce71c20, 0x2c3d3: 0x6d157c20, + 0x2c3d4: 0x6d157e20, 0x2c3d5: 0x6d158020, 0x2c3d6: 0x6d158220, 0x2c3d7: 0x6d158420, + 0x2c3d8: 0x6d158620, 0x2c3d9: 0x6d437e20, 0x2c3da: 0x6d438020, 0x2c3db: 0x6d438220, + 0x2c3dc: 0x6d438420, 0x2c3dd: 0x6d438620, 0x2c3de: 0x6d438820, 0x2c3df: 0x6d707220, + 0x2c3e0: 0x6d99a220, 0x2c3e1: 0x6d99a420, 0x2c3e2: 0x6d99a620, 0x2c3e3: 0x6d99a820, + 0x2c3e4: 0x6d99aa20, 0x2c3e5: 0x6d99ac20, 0x2c3e6: 0x6d99ae20, 0x2c3e7: 0x6d99b020, + 0x2c3e8: 0x6dbc6620, 0x2c3e9: 0x6dbc6820, 0x2c3ea: 0x6dbc6a20, 0x2c3eb: 0x6dbc6c20, + 0x2c3ec: 0x6dbc6e20, 0x2c3ed: 0x6dbc7020, 0x2c3ee: 0x6dbc7220, 0x2c3ef: 0x6dda3020, + 0x2c3f0: 0x6dda3220, 0x2c3f1: 0x6dda3420, 0x2c3f2: 0x6dda3620, 0x2c3f3: 0x6dda3820, + 0x2c3f4: 0x6dda3a20, 0x2c3f5: 0x6dda3c20, 0x2c3f6: 0x6df24220, 0x2c3f7: 0x6df24420, + 0x2c3f8: 0x6df24620, 0x2c3f9: 0x6df24820, 0x2c3fa: 0x6df24a20, 0x2c3fb: 0x6df24c20, + 0x2c3fc: 0x6e068a20, 0x2c3fd: 0x6e068c20, 0x2c3fe: 0x6e068e20, 0x2c3ff: 0x6e170a20, + // Block 0xb10, offset 0x2c400 + 0x2c400: 0x6e170c20, 0x2c401: 0x6e170e20, 0x2c402: 0x6e171020, 0x2c403: 0x6e171220, + 0x2c404: 0x6e171420, 0x2c405: 0x6e241420, 0x2c406: 0x6e241620, 0x2c407: 0x6e2e0a20, + 0x2c408: 0x6e2e0c20, 0x2c409: 0x6e35ba20, 0x2c40a: 0x6e3b2020, 0x2c40b: 0x6e3b2220, + 0x2c40c: 0x6e3edc20, 0x2c40d: 0x6e3ede20, 0x2c40e: 0x6e417620, 0x2c40f: 0x6d15c620, + 0x2c410: 0x6d43d820, 0x2c411: 0x6d43da20, 0x2c412: 0x6d43dc20, 0x2c413: 0x6d43de20, + 0x2c414: 0x6d99ec20, 0x2c415: 0x6dbcc420, 0x2c416: 0x6ddaa420, 0x2c417: 0x6ddaa620, + 0x2c418: 0x6ddaa820, 0x2c419: 0x6df2a420, 0x2c41a: 0x6df2a620, 0x2c41b: 0x6e174020, + 0x2c41c: 0x6e244620, 0x2c41d: 0x6e2e2c20, 0x2c41e: 0x6d15de20, 0x2c41f: 0x6d70e020, + 0x2c420: 0x6dbce820, 0x2c421: 0x6df2c220, 0x2c422: 0x6df2c420, 0x2c423: 0x6e06ea20, + 0x2c424: 0x6e175620, 0x2c425: 0x6e2e3620, 0x2c426: 0x6ce73c20, 0x2c427: 0x6ce73e20, + 0x2c428: 0x6ce74020, 0x2c429: 0x6d15e620, 0x2c42a: 0x6d440220, 0x2c42b: 0x6d9a0820, + 0x2c42c: 0x6d9a0a20, 0x2c42d: 0x6ddaca20, 0x2c42e: 0x6df2cc20, 0x2c42f: 0x6df2ce20, + 0x2c430: 0x6e245c20, 0x2c431: 0x6ce74420, 0x2c432: 0x6ce74620, 0x2c433: 0x6d15f420, + 0x2c434: 0x6d15f620, 0x2c435: 0x6d15f820, 0x2c436: 0x6d441420, 0x2c437: 0x6d441620, + 0x2c438: 0x6d441820, 0x2c439: 0x6d441a20, 0x2c43a: 0x6d441c20, 0x2c43b: 0x6d441e20, + 0x2c43c: 0x6d442020, 0x2c43d: 0x6d442220, 0x2c43e: 0x6d442420, 0x2c43f: 0x6d70f820, + // Block 0xb11, offset 0x2c440 + 0x2c440: 0x6d70fa20, 0x2c441: 0x6d70fc20, 0x2c442: 0x6d70fe20, 0x2c443: 0x6d9a1a20, + 0x2c444: 0x6d9a1c20, 0x2c445: 0x6d9a1e20, 0x2c446: 0x6d9a2020, 0x2c447: 0x6d9a2220, + 0x2c448: 0x6d9a2420, 0x2c449: 0x6d9a2620, 0x2c44a: 0x6d9a2820, 0x2c44b: 0x6dbcfa20, + 0x2c44c: 0x6dbcfc20, 0x2c44d: 0x6dbcfe20, 0x2c44e: 0x6dbd0020, 0x2c44f: 0x6dbd0220, + 0x2c450: 0x6dbd0420, 0x2c451: 0x6dbd0620, 0x2c452: 0x6dbd0820, 0x2c453: 0x6dbd0a20, + 0x2c454: 0x6ddadc20, 0x2c455: 0x6ddade20, 0x2c456: 0x6ddae020, 0x2c457: 0x6ddae220, + 0x2c458: 0x6ddae420, 0x2c459: 0x6ddae620, 0x2c45a: 0x6ddae820, 0x2c45b: 0x6ddaea20, + 0x2c45c: 0x6ddaec20, 0x2c45d: 0x6ddaee20, 0x2c45e: 0x6df2dc20, 0x2c45f: 0x6df2de20, + 0x2c460: 0x6df2e020, 0x2c461: 0x6df2e220, 0x2c462: 0x6df2e420, 0x2c463: 0x6df2e620, + 0x2c464: 0x6df2e820, 0x2c465: 0x6df2ea20, 0x2c466: 0x6df2ec20, 0x2c467: 0x6df2ee20, + 0x2c468: 0x6e070620, 0x2c469: 0x6e070820, 0x2c46a: 0x6e070a20, 0x2c46b: 0x6e070c20, + 0x2c46c: 0x6e176620, 0x2c46d: 0x6e176820, 0x2c46e: 0x6e176a20, 0x2c46f: 0x6e176c20, + 0x2c470: 0x6e176e20, 0x2c471: 0x6e177020, 0x2c472: 0x6e246820, 0x2c473: 0x6e246a20, + 0x2c474: 0x6e246c20, 0x2c475: 0x6e35da20, 0x2c476: 0x6e35dc20, 0x2c477: 0x6e3b3620, + 0x2c478: 0x6cb6cc20, 0x2c479: 0x6ce77820, 0x2c47a: 0x6d165020, 0x2c47b: 0x6d165220, + 0x2c47c: 0x6d165420, 0x2c47d: 0x6d165620, 0x2c47e: 0x6d447e20, 0x2c47f: 0x6d448020, + // Block 0xb12, offset 0x2c480 + 0x2c480: 0x6d448220, 0x2c481: 0x6d448420, 0x2c482: 0x6d448620, 0x2c483: 0x6d448820, + 0x2c484: 0x6d716c20, 0x2c485: 0x6d716e20, 0x2c486: 0x6d9abc20, 0x2c487: 0x6d9abe20, + 0x2c488: 0x6d9ac020, 0x2c489: 0x6d9ac220, 0x2c48a: 0x6d9ac420, 0x2c48b: 0x6dbd6c20, + 0x2c48c: 0x6dbd6e20, 0x2c48d: 0x6dbd7020, 0x2c48e: 0x6dbd7220, 0x2c48f: 0x6dbd7420, + 0x2c490: 0x6dbd7620, 0x2c491: 0x6ddb4220, 0x2c492: 0x6ddb4420, 0x2c493: 0x6ddb4620, + 0x2c494: 0x6ddb4820, 0x2c495: 0x6ddb4a20, 0x2c496: 0x6ddb4c20, 0x2c497: 0x6ddb4e20, + 0x2c498: 0x6df33c20, 0x2c499: 0x6df33e20, 0x2c49a: 0x6df34020, 0x2c49b: 0x6e074a20, + 0x2c49c: 0x6e074c20, 0x2c49d: 0x6e17ae20, 0x2c49e: 0x6e2e6e20, 0x2c49f: 0x6e35f220, + 0x2c4a0: 0x6dbdbc20, 0x2c4a1: 0x6ddb8620, 0x2c4a2: 0x6cb6d620, 0x2c4a3: 0x6ce79820, + 0x2c4a4: 0x6ce79a20, 0x2c4a5: 0x6ce79c20, 0x2c4a6: 0x6d168a20, 0x2c4a7: 0x6d168c20, + 0x2c4a8: 0x6d168e20, 0x2c4a9: 0x6d169020, 0x2c4aa: 0x6d169220, 0x2c4ab: 0x6d44c220, + 0x2c4ac: 0x6d44c420, 0x2c4ad: 0x6d44c620, 0x2c4ae: 0x6d44c820, 0x2c4af: 0x6d44ca20, + 0x2c4b0: 0x6d44cc20, 0x2c4b1: 0x6d44ce20, 0x2c4b2: 0x6d44d020, 0x2c4b3: 0x6d44d220, + 0x2c4b4: 0x6d44d420, 0x2c4b5: 0x6d719820, 0x2c4b6: 0x6d719a20, 0x2c4b7: 0x6d719c20, + 0x2c4b8: 0x6d719e20, 0x2c4b9: 0x6d71a020, 0x2c4ba: 0x6d71a220, 0x2c4bb: 0x6d71a420, + 0x2c4bc: 0x6d9afa20, 0x2c4bd: 0x6d9afc20, 0x2c4be: 0x6d9afe20, 0x2c4bf: 0x6d9b0020, + // Block 0xb13, offset 0x2c4c0 + 0x2c4c0: 0x6d9b0220, 0x2c4c1: 0x6d9b0420, 0x2c4c2: 0x6d9b0620, 0x2c4c3: 0x6dbdc020, + 0x2c4c4: 0x6dbdc220, 0x2c4c5: 0x6dbdc420, 0x2c4c6: 0x6dbdc620, 0x2c4c7: 0x6dbdc820, + 0x2c4c8: 0x6ddb8a20, 0x2c4c9: 0x6ddb8c20, 0x2c4ca: 0x6ddb8e20, 0x2c4cb: 0x6ddb9020, + 0x2c4cc: 0x6ddb9220, 0x2c4cd: 0x6ddb9420, 0x2c4ce: 0x6ddb9620, 0x2c4cf: 0x6ddb9820, + 0x2c4d0: 0x6df37e20, 0x2c4d1: 0x6df38020, 0x2c4d2: 0x6df38220, 0x2c4d3: 0x6df38420, + 0x2c4d4: 0x6df38620, 0x2c4d5: 0x6e076e20, 0x2c4d6: 0x6e077020, 0x2c4d7: 0x6e077220, + 0x2c4d8: 0x6e17e220, 0x2c4d9: 0x6e17e420, 0x2c4da: 0x6e17e620, 0x2c4db: 0x6e17e820, + 0x2c4dc: 0x6e17ea20, 0x2c4dd: 0x6e24a620, 0x2c4de: 0x6e24a820, 0x2c4df: 0x6e24aa20, + 0x2c4e0: 0x6e24ac20, 0x2c4e1: 0x6e2e7a20, 0x2c4e2: 0x6e2e7c20, 0x2c4e3: 0x6e2e7e20, + 0x2c4e4: 0x6e2e8020, 0x2c4e5: 0x6e360020, 0x2c4e6: 0x6e3f0420, 0x2c4e7: 0x6e3f0620, + 0x2c4e8: 0x6e419620, 0x2c4e9: 0x6e437420, 0x2c4ea: 0x6e182020, 0x2c4eb: 0x6d720820, + 0x2c4ec: 0x6d720a20, 0x2c4ed: 0x6ddbfa20, 0x2c4ee: 0x6df3e420, 0x2c4ef: 0x6d453420, + 0x2c4f0: 0x6dbe5020, 0x2c4f1: 0x6dbe5220, 0x2c4f2: 0x6dbe5420, 0x2c4f3: 0x6e419e20, + 0x2c4f4: 0x6ce7f020, 0x2c4f5: 0x6d171020, 0x2c4f6: 0x6d171220, 0x2c4f7: 0x6d454820, + 0x2c4f8: 0x6d454a20, 0x2c4f9: 0x6d454c20, 0x2c4fa: 0x6d454e20, 0x2c4fb: 0x6d455020, + 0x2c4fc: 0x6d455220, 0x2c4fd: 0x6d455420, 0x2c4fe: 0x6d455620, 0x2c4ff: 0x6d722420, + // Block 0xb14, offset 0x2c500 + 0x2c500: 0x6d722620, 0x2c501: 0x6d722820, 0x2c502: 0x6d722a20, 0x2c503: 0x6d722c20, + 0x2c504: 0x6d722e20, 0x2c505: 0x6d723020, 0x2c506: 0x6d9baa20, 0x2c507: 0x6d9bac20, + 0x2c508: 0x6d9bae20, 0x2c509: 0x6d9bb020, 0x2c50a: 0x6d9bb220, 0x2c50b: 0x6d9bb420, + 0x2c50c: 0x6d9bb620, 0x2c50d: 0x6d9bb820, 0x2c50e: 0x6dbe6620, 0x2c50f: 0x6dbe6820, + 0x2c510: 0x6dbe6a20, 0x2c511: 0x6dbe6c20, 0x2c512: 0x6dbe6e20, 0x2c513: 0x6ddc1620, + 0x2c514: 0x6ddc1820, 0x2c515: 0x6ddc1a20, 0x2c516: 0x6ddc1c20, 0x2c517: 0x6ddc1e20, + 0x2c518: 0x6ddc2020, 0x2c519: 0x6ddc2220, 0x2c51a: 0x6ddc2420, 0x2c51b: 0x6ddc2620, + 0x2c51c: 0x6df3fc20, 0x2c51d: 0x6df3fe20, 0x2c51e: 0x6df40020, 0x2c51f: 0x6df40220, + 0x2c520: 0x6df40420, 0x2c521: 0x6df40620, 0x2c522: 0x6df40820, 0x2c523: 0x6e07d820, + 0x2c524: 0x6e07da20, 0x2c525: 0x6e07dc20, 0x2c526: 0x6e07de20, 0x2c527: 0x6e07e020, + 0x2c528: 0x6e07e220, 0x2c529: 0x6e07e420, 0x2c52a: 0x6e183220, 0x2c52b: 0x6e183420, + 0x2c52c: 0x6e183620, 0x2c52d: 0x6e183820, 0x2c52e: 0x6e183a20, 0x2c52f: 0x6e183c20, + 0x2c530: 0x6e183e20, 0x2c531: 0x6e184020, 0x2c532: 0x6e24e420, 0x2c533: 0x6e24e620, + 0x2c534: 0x6e24e820, 0x2c535: 0x6e24ea20, 0x2c536: 0x6e24ec20, 0x2c537: 0x6e2e9e20, + 0x2c538: 0x6e2ea020, 0x2c539: 0x6e2ea220, 0x2c53a: 0x6e361c20, 0x2c53b: 0x6e361e20, + 0x2c53c: 0x6e362020, 0x2c53d: 0x6e3b5620, 0x2c53e: 0x6e3f1220, 0x2c53f: 0x6e41a220, + // Block 0xb15, offset 0x2c540 + 0x2c540: 0x6e437820, 0x2c541: 0x6e44c020, 0x2c542: 0x6e46b820, 0x2c543: 0x6d9c3020, + 0x2c544: 0x6dbec220, 0x2c545: 0x6e086c20, 0x2c546: 0x6cb72e20, 0x2c547: 0x6ce82a20, + 0x2c548: 0x6d45b820, 0x2c549: 0x6d45ba20, 0x2c54a: 0x6d72b220, 0x2c54b: 0x6d72b420, + 0x2c54c: 0x6d72b620, 0x2c54d: 0x6d72b820, 0x2c54e: 0x6d72ba20, 0x2c54f: 0x6d9c3620, + 0x2c550: 0x6d9c3820, 0x2c551: 0x6d9c3a20, 0x2c552: 0x6d9c3c20, 0x2c553: 0x6d9c3e20, + 0x2c554: 0x6d9c4020, 0x2c555: 0x6dbec620, 0x2c556: 0x6dbec820, 0x2c557: 0x6dbeca20, + 0x2c558: 0x6dbecc20, 0x2c559: 0x6dbece20, 0x2c55a: 0x6dbed020, 0x2c55b: 0x6ddca820, + 0x2c55c: 0x6ddcaa20, 0x2c55d: 0x6df48420, 0x2c55e: 0x6df48620, 0x2c55f: 0x6df48820, + 0x2c560: 0x6df48a20, 0x2c561: 0x6e087420, 0x2c562: 0x6e189220, 0x2c563: 0x6e254420, + 0x2c564: 0x6e2ee420, 0x2c565: 0x6e364220, 0x2c566: 0x6e3b7220, 0x2c567: 0x6ce83e20, + 0x2c568: 0x6d177220, 0x2c569: 0x6d45e420, 0x2c56a: 0x6df4a420, 0x2c56b: 0x6e256220, + 0x2c56c: 0x6e3b7e20, 0x2c56d: 0x6ce84220, 0x2c56e: 0x6ce84420, 0x2c56f: 0x6d45fa20, + 0x2c570: 0x6d45fc20, 0x2c571: 0x6d45fe20, 0x2c572: 0x6d460020, 0x2c573: 0x6d460220, + 0x2c574: 0x6d460420, 0x2c575: 0x6d72ee20, 0x2c576: 0x6d72f020, 0x2c577: 0x6d9c7c20, + 0x2c578: 0x6d9c7e20, 0x2c579: 0x6dbf0c20, 0x2c57a: 0x6dbf0e20, 0x2c57b: 0x6dbf1020, + 0x2c57c: 0x6dbf1220, 0x2c57d: 0x6ddce420, 0x2c57e: 0x6ddce620, 0x2c57f: 0x6ddce820, + // Block 0xb16, offset 0x2c580 + 0x2c580: 0x6ddcea20, 0x2c581: 0x6ddcec20, 0x2c582: 0x6ddcee20, 0x2c583: 0x6ddcf020, + 0x2c584: 0x6df4aa20, 0x2c585: 0x6df4ac20, 0x2c586: 0x6df4ae20, 0x2c587: 0x6df4b020, + 0x2c588: 0x6e08aa20, 0x2c589: 0x6e08ac20, 0x2c58a: 0x6e08ae20, 0x2c58b: 0x6e08b020, + 0x2c58c: 0x6e18b020, 0x2c58d: 0x6e18b220, 0x2c58e: 0x6e256a20, 0x2c58f: 0x6e365420, + 0x2c590: 0x6e365620, 0x2c591: 0x6e365820, 0x2c592: 0x6e365a20, 0x2c593: 0x6e3b8220, + 0x2c594: 0x6e3b8420, 0x2c595: 0x6e3f3020, 0x2c596: 0x6e44c820, 0x2c597: 0x6e08ec20, + 0x2c598: 0x6e18e820, 0x2c599: 0x6d464420, 0x2c59a: 0x6d464620, 0x2c59b: 0x6d734c20, + 0x2c59c: 0x6d9cc620, 0x2c59d: 0x6e25ac20, 0x2c59e: 0x6e3b9c20, 0x2c59f: 0x6d464e20, + 0x2c5a0: 0x6d735420, 0x2c5a1: 0x6d735620, 0x2c5a2: 0x6d9cda20, 0x2c5a3: 0x6d9cdc20, + 0x2c5a4: 0x6ddd4e20, 0x2c5a5: 0x6ddd5020, 0x2c5a6: 0x6ddd5220, 0x2c5a7: 0x6ddd5420, + 0x2c5a8: 0x6df50420, 0x2c5a9: 0x6df50620, 0x2c5aa: 0x6e090020, 0x2c5ab: 0x6e25b820, + 0x2c5ac: 0x6e25ba20, 0x2c5ad: 0x6e25bc20, 0x2c5ae: 0x6e2f3420, 0x2c5af: 0x6e368620, + 0x2c5b0: 0x6e368820, 0x2c5b1: 0x6e46ba20, 0x2c5b2: 0x6ce86c20, 0x2c5b3: 0x6d17c420, + 0x2c5b4: 0x6d468c20, 0x2c5b5: 0x6d468e20, 0x2c5b6: 0x6d469020, 0x2c5b7: 0x6d738620, + 0x2c5b8: 0x6d738820, 0x2c5b9: 0x6d738a20, 0x2c5ba: 0x6d738c20, 0x2c5bb: 0x6d738e20, + 0x2c5bc: 0x6d739020, 0x2c5bd: 0x6d739220, 0x2c5be: 0x6d739420, 0x2c5bf: 0x6d9d0e20, + // Block 0xb17, offset 0x2c5c0 + 0x2c5c0: 0x6d9d1020, 0x2c5c1: 0x6d9d1220, 0x2c5c2: 0x6d9d1420, 0x2c5c3: 0x6d9d1620, + 0x2c5c4: 0x6d9d1820, 0x2c5c5: 0x6d9d1a20, 0x2c5c6: 0x6d9d1c20, 0x2c5c7: 0x6d9d1e20, + 0x2c5c8: 0x6d9d2020, 0x2c5c9: 0x6d9d2220, 0x2c5ca: 0x6dbf9220, 0x2c5cb: 0x6dbf9420, + 0x2c5cc: 0x6dbf9620, 0x2c5cd: 0x6dbf9820, 0x2c5ce: 0x6dbf9a20, 0x2c5cf: 0x6ddd8420, + 0x2c5d0: 0x6ddd8620, 0x2c5d1: 0x6ddd8820, 0x2c5d2: 0x6ddd8a20, 0x2c5d3: 0x6ddd8c20, + 0x2c5d4: 0x6ddd8e20, 0x2c5d5: 0x6ddd9020, 0x2c5d6: 0x6ddd9220, 0x2c5d7: 0x6ddd9420, + 0x2c5d8: 0x6ddd9620, 0x2c5d9: 0x6df51e20, 0x2c5da: 0x6df52020, 0x2c5db: 0x6df52220, + 0x2c5dc: 0x6df52420, 0x2c5dd: 0x6df52620, 0x2c5de: 0x6df52820, 0x2c5df: 0x6df52a20, + 0x2c5e0: 0x6df52c20, 0x2c5e1: 0x6df52e20, 0x2c5e2: 0x6df53020, 0x2c5e3: 0x6df53220, + 0x2c5e4: 0x6df53420, 0x2c5e5: 0x6df53620, 0x2c5e6: 0x6df53820, 0x2c5e7: 0x6df53a20, + 0x2c5e8: 0x6df53c20, 0x2c5e9: 0x6df53e20, 0x2c5ea: 0x6df54020, 0x2c5eb: 0x6e091e20, + 0x2c5ec: 0x6e092020, 0x2c5ed: 0x6e092220, 0x2c5ee: 0x6e092420, 0x2c5ef: 0x6e092620, + 0x2c5f0: 0x6e092820, 0x2c5f1: 0x6e092a20, 0x2c5f2: 0x6e092c20, 0x2c5f3: 0x6e092e20, + 0x2c5f4: 0x6e093020, 0x2c5f5: 0x6e193420, 0x2c5f6: 0x6e193620, 0x2c5f7: 0x6e193820, + 0x2c5f8: 0x6e193a20, 0x2c5f9: 0x6e193c20, 0x2c5fa: 0x6e193e20, 0x2c5fb: 0x6e194020, + 0x2c5fc: 0x6e194220, 0x2c5fd: 0x6e194420, 0x2c5fe: 0x6e25c820, 0x2c5ff: 0x6e25ca20, + // Block 0xb18, offset 0x2c600 + 0x2c600: 0x6e25cc20, 0x2c601: 0x6e25ce20, 0x2c602: 0x6e25d020, 0x2c603: 0x6e25d220, + 0x2c604: 0x6e25d420, 0x2c605: 0x6e25d620, 0x2c606: 0x6e25d820, 0x2c607: 0x6e25da20, + 0x2c608: 0x6e25dc20, 0x2c609: 0x6e2f4820, 0x2c60a: 0x6e2f4a20, 0x2c60b: 0x6e2f4c20, + 0x2c60c: 0x6e2f4e20, 0x2c60d: 0x6e2f5020, 0x2c60e: 0x6e2f5220, 0x2c60f: 0x6e2f5420, + 0x2c610: 0x6e369a20, 0x2c611: 0x6e369c20, 0x2c612: 0x6e369e20, 0x2c613: 0x6e36a020, + 0x2c614: 0x6e36a220, 0x2c615: 0x6e36a420, 0x2c616: 0x6e3ba620, 0x2c617: 0x6e3ba820, + 0x2c618: 0x6e3baa20, 0x2c619: 0x6e3f5220, 0x2c61a: 0x6e41d620, 0x2c61b: 0x6e41d820, + 0x2c61c: 0x6e473220, 0x2c61d: 0x6d740a20, 0x2c61e: 0x6d9dac20, 0x2c61f: 0x6d9dae20, + 0x2c620: 0x6e09e820, 0x2c621: 0x6e09ea20, 0x2c622: 0x6e19f220, 0x2c623: 0x6e19f420, + 0x2c624: 0x6e19f620, 0x2c625: 0x6d180620, 0x2c626: 0x6d46e820, 0x2c627: 0x6d46ea20, + 0x2c628: 0x6d46ec20, 0x2c629: 0x6d46ee20, 0x2c62a: 0x6d46f020, 0x2c62b: 0x6d46f220, + 0x2c62c: 0x6d743620, 0x2c62d: 0x6d743820, 0x2c62e: 0x6d743a20, 0x2c62f: 0x6d743c20, + 0x2c630: 0x6d743e20, 0x2c631: 0x6d744020, 0x2c632: 0x6d744220, 0x2c633: 0x6d744420, + 0x2c634: 0x6d744620, 0x2c635: 0x6d744820, 0x2c636: 0x6d744a20, 0x2c637: 0x6d744c20, + 0x2c638: 0x6d744e20, 0x2c639: 0x6d9de220, 0x2c63a: 0x6d9de420, 0x2c63b: 0x6d9de620, + 0x2c63c: 0x6d9de820, 0x2c63d: 0x6d9dea20, 0x2c63e: 0x6d9dec20, 0x2c63f: 0x6d9dee20, + // Block 0xb19, offset 0x2c640 + 0x2c640: 0x6d9df020, 0x2c641: 0x6d9df220, 0x2c642: 0x6d9df420, 0x2c643: 0x6d9df620, + 0x2c644: 0x6d9df820, 0x2c645: 0x6d9dfa20, 0x2c646: 0x6d9dfc20, 0x2c647: 0x6d9dfe20, + 0x2c648: 0x6d9e0020, 0x2c649: 0x6d9e0220, 0x2c64a: 0x6d9e0420, 0x2c64b: 0x6dc06c20, + 0x2c64c: 0x6dc06e20, 0x2c64d: 0x6dc07020, 0x2c64e: 0x6dc07220, 0x2c64f: 0x6dc07420, + 0x2c650: 0x6dc07620, 0x2c651: 0x6dc07820, 0x2c652: 0x6dc07a20, 0x2c653: 0x6dc07c20, + 0x2c654: 0x6dc07e20, 0x2c655: 0x6dde3e20, 0x2c656: 0x6dde4020, 0x2c657: 0x6dde4220, + 0x2c658: 0x6dde4420, 0x2c659: 0x6dde4620, 0x2c65a: 0x6dde4820, 0x2c65b: 0x6dde4a20, + 0x2c65c: 0x6dde4c20, 0x2c65d: 0x6df63a20, 0x2c65e: 0x6df63c20, 0x2c65f: 0x6df63e20, + 0x2c660: 0x6df64020, 0x2c661: 0x6df64220, 0x2c662: 0x6df64420, 0x2c663: 0x6df64620, + 0x2c664: 0x6df64820, 0x2c665: 0x6df64a20, 0x2c666: 0x6e09f820, 0x2c667: 0x6e09fa20, + 0x2c668: 0x6e09fc20, 0x2c669: 0x6e09fe20, 0x2c66a: 0x6e0a0020, 0x2c66b: 0x6e0a0220, + 0x2c66c: 0x6e0a0420, 0x2c66d: 0x6e0a0620, 0x2c66e: 0x6e0a0820, 0x2c66f: 0x6e0a0a20, + 0x2c670: 0x6e0a0c20, 0x2c671: 0x6e1a0420, 0x2c672: 0x6e1a0620, 0x2c673: 0x6e1a0820, + 0x2c674: 0x6e1a0a20, 0x2c675: 0x6e1a0c20, 0x2c676: 0x6e1a0e20, 0x2c677: 0x6e267820, + 0x2c678: 0x6e267a20, 0x2c679: 0x6e267c20, 0x2c67a: 0x6e267e20, 0x2c67b: 0x6e268020, + 0x2c67c: 0x6e268220, 0x2c67d: 0x6e268420, 0x2c67e: 0x6e2fe020, 0x2c67f: 0x6e2fe220, + // Block 0xb1a, offset 0x2c680 + 0x2c680: 0x6e2fe420, 0x2c681: 0x6e2fe620, 0x2c682: 0x6e2fe820, 0x2c683: 0x6e2fea20, + 0x2c684: 0x6e2fec20, 0x2c685: 0x6e2fee20, 0x2c686: 0x6e2ff020, 0x2c687: 0x6e371820, + 0x2c688: 0x6e371a20, 0x2c689: 0x6e371c20, 0x2c68a: 0x6e371e20, 0x2c68b: 0x6e372020, + 0x2c68c: 0x6e3be620, 0x2c68d: 0x6e3be820, 0x2c68e: 0x6e3f8620, 0x2c68f: 0x6e41f820, + 0x2c690: 0x6e45fe20, 0x2c691: 0x6e46bc20, 0x2c692: 0x6e46d420, 0x2c693: 0x6d74de20, + 0x2c694: 0x6dc13420, 0x2c695: 0x6dc13620, 0x2c696: 0x6df72e20, 0x2c697: 0x6e0ad420, + 0x2c698: 0x6e1ac220, 0x2c699: 0x6e378a20, 0x2c69a: 0x6d74fe20, 0x2c69b: 0x6ddef020, + 0x2c69c: 0x6e1ac420, 0x2c69d: 0x6e30a820, 0x2c69e: 0x6e3c3220, 0x2c69f: 0x6d474a20, + 0x2c6a0: 0x6d750c20, 0x2c6a1: 0x6d750e20, 0x2c6a2: 0x6d751020, 0x2c6a3: 0x6d9edc20, + 0x2c6a4: 0x6d9ede20, 0x2c6a5: 0x6d9ee020, 0x2c6a6: 0x6ddefa20, 0x2c6a7: 0x6df74620, + 0x2c6a8: 0x6e1ad420, 0x2c6a9: 0x6e274220, 0x2c6aa: 0x6e379620, 0x2c6ab: 0x6e379820, + 0x2c6ac: 0x6d475020, 0x2c6ad: 0x6d475220, 0x2c6ae: 0x6d475420, 0x2c6af: 0x6d753020, + 0x2c6b0: 0x6d753220, 0x2c6b1: 0x6d9efe20, 0x2c6b2: 0x6d9f0020, 0x2c6b3: 0x6d9f0220, + 0x2c6b4: 0x6d9f0420, 0x2c6b5: 0x6dc16e20, 0x2c6b6: 0x6ddf2820, 0x2c6b7: 0x6ddf2a20, + 0x2c6b8: 0x6ddf2c20, 0x2c6b9: 0x6df76a20, 0x2c6ba: 0x6df76c20, 0x2c6bb: 0x6df76e20, + 0x2c6bc: 0x6df77020, 0x2c6bd: 0x6df77220, 0x2c6be: 0x6e1ae420, 0x2c6bf: 0x6e1ae620, + // Block 0xb1b, offset 0x2c6c0 + 0x2c6c0: 0x6e1ae820, 0x2c6c1: 0x6e275020, 0x2c6c2: 0x6e275220, 0x2c6c3: 0x6e30c820, + 0x2c6c4: 0x6e37a420, 0x2c6c5: 0x6e275420, 0x2c6c6: 0x6e3c4820, 0x2c6c7: 0x6d756220, + 0x2c6c8: 0x6e0b2620, 0x2c6c9: 0x6e0b2820, 0x2c6ca: 0x6d9f3220, 0x2c6cb: 0x6ddf5820, + 0x2c6cc: 0x6df7a420, 0x2c6cd: 0x6e0b3020, 0x2c6ce: 0x6e1afe20, 0x2c6cf: 0x6e30de20, + 0x2c6d0: 0x6e37b620, 0x2c6d1: 0x6d757e20, 0x2c6d2: 0x6d9f3a20, 0x2c6d3: 0x6d9f3c20, + 0x2c6d4: 0x6e0b3e20, 0x2c6d5: 0x6e0b4020, 0x2c6d6: 0x6e0b4220, 0x2c6d7: 0x6e1b0c20, + 0x2c6d8: 0x6e1b0e20, 0x2c6d9: 0x6e1b1020, 0x2c6da: 0x6e278220, 0x2c6db: 0x6e30e620, + 0x2c6dc: 0x6e3c4e20, 0x2c6dd: 0x6d187020, 0x2c6de: 0x6d477220, 0x2c6df: 0x6d758620, + 0x2c6e0: 0x6dc1bc20, 0x2c6e1: 0x6d9f4a20, 0x2c6e2: 0x6dc1be20, 0x2c6e3: 0x6dc1c020, + 0x2c6e4: 0x6ddf6a20, 0x2c6e5: 0x6ddf6c20, 0x2c6e6: 0x6ddf6e20, 0x2c6e7: 0x6ddf7020, + 0x2c6e8: 0x6df7c220, 0x2c6e9: 0x6df7c420, 0x2c6ea: 0x6e0b4e20, 0x2c6eb: 0x6e0b5020, + 0x2c6ec: 0x6e0b5220, 0x2c6ed: 0x6e1b1a20, 0x2c6ee: 0x6e1b1c20, 0x2c6ef: 0x6e1b1e20, + 0x2c6f0: 0x6e30f020, 0x2c6f1: 0x6e37c020, 0x2c6f2: 0x6e3c5220, 0x2c6f3: 0x6e3c5420, + 0x2c6f4: 0x6e3c5620, 0x2c6f5: 0x6e3fc620, 0x2c6f6: 0x6ddf8c20, 0x2c6f7: 0x6df7e220, + 0x2c6f8: 0x6e27ae20, 0x2c6f9: 0x6e37e420, 0x2c6fa: 0x6d9f7620, 0x2c6fb: 0x6e37e820, + 0x2c6fc: 0x6e37ea20, 0x2c6fd: 0x6ddfa420, 0x2c6fe: 0x6ddfa620, 0x2c6ff: 0x6ddfa820, + // Block 0xb1c, offset 0x2c700 + 0x2c700: 0x6df7f620, 0x2c701: 0x6e1b6c20, 0x2c702: 0x6d9f8020, 0x2c703: 0x6dc20020, + 0x2c704: 0x6ddfb620, 0x2c705: 0x6df80a20, 0x2c706: 0x6e1b7e20, 0x2c707: 0x6e27d620, + 0x2c708: 0x6e311820, 0x2c709: 0x6e311a20, 0x2c70a: 0x6ddfdc20, 0x2c70b: 0x6ddfde20, + 0x2c70c: 0x6df82020, 0x2c70d: 0x6e0bc420, 0x2c70e: 0x6e0bc620, 0x2c70f: 0x6e1b8820, + 0x2c710: 0x6e424c20, 0x2c711: 0x6e45a820, 0x2c712: 0x6dc22820, 0x2c713: 0x6dc22a20, + 0x2c714: 0x6ddff420, 0x2c715: 0x6df83a20, 0x2c716: 0x6df83c20, 0x2c717: 0x6e0bd420, + 0x2c718: 0x6e0bd620, 0x2c719: 0x6e0bd820, 0x2c71a: 0x6e1ba020, 0x2c71b: 0x6e1ba220, + 0x2c71c: 0x6e27fc20, 0x2c71d: 0x6e27fe20, 0x2c71e: 0x6e314620, 0x2c71f: 0x6e314820, + 0x2c720: 0x6e380c20, 0x2c721: 0x6e380e20, 0x2c722: 0x6e381020, 0x2c723: 0x6e3ca420, + 0x2c724: 0x6e3ca620, 0x2c725: 0x6e3fe620, 0x2c726: 0x6e3fe820, 0x2c727: 0x6e425620, + 0x2c728: 0x6e440420, 0x2c729: 0x6e450c20, 0x2c72a: 0x6e450e20, 0x2c72b: 0x6e46da20, + 0x2c72c: 0x6e283620, 0x2c72d: 0x6e0c2020, 0x2c72e: 0x6e0c2220, 0x2c72f: 0x6df86420, + 0x2c730: 0x6e0c2420, 0x2c731: 0x6e1be620, 0x2c732: 0x6e1be820, 0x2c733: 0x6e1bfe20, + 0x2c734: 0x6e3cd820, 0x2c735: 0x6e427e20, + // Block 0xb1d, offset 0x2c740 + 0x2c740: 0x6c000220, 0x2c741: 0x6c003220, 0x2c742: 0x6c003420, 0x2c743: 0x6c003620, + 0x2c744: 0x6c003820, 0x2c745: 0x6c003a20, 0x2c746: 0x6c003c20, 0x2c747: 0x6c00d820, + 0x2c748: 0x6c00da20, 0x2c749: 0x6c00dc20, 0x2c74a: 0x6c00de20, 0x2c74b: 0x6c00e020, + 0x2c74c: 0x6c00e220, 0x2c74d: 0x6c021a20, 0x2c74e: 0x6c021c20, 0x2c74f: 0x6c021e20, + 0x2c750: 0x6c022020, 0x2c751: 0x6c022220, 0x2c752: 0x6c022420, 0x2c753: 0x6c022620, + 0x2c754: 0x6c054020, 0x2c755: 0x6c054220, 0x2c756: 0x6c054420, 0x2c757: 0x6c053c20, + 0x2c758: 0x6c054620, 0x2c759: 0x6c054820, 0x2c75a: 0x6c054a20, 0x2c75b: 0x6c054c20, + 0x2c75c: 0x6c054e20, 0x2c75d: 0x6c055020, 0x2c75e: 0x6c0ad020, 0x2c75f: 0x6c0ad220, + 0x2c760: 0x6c0ad420, 0x2c761: 0x6c0ad620, 0x2c762: 0x6c0ad820, 0x2c763: 0x6c15e420, + 0x2c764: 0x6c15e620, 0x2c765: 0x6c15e820, 0x2c766: 0x6c28ae20, 0x2c767: 0x6c28b020, + 0x2c768: 0x6c000420, 0x2c769: 0x6c004420, 0x2c76a: 0x6c00fa20, 0x2c76b: 0x6c00fc20, + 0x2c76c: 0x6c04e220, 0x2c76d: 0x6c023620, 0x2c76e: 0x6c023820, 0x2c76f: 0x6c023a20, + 0x2c770: 0x6c023c20, 0x2c771: 0x6c056820, 0x2c772: 0x6c160020, 0x2c773: 0x6c28c420, + 0x2c774: 0x6c42f620, 0x2c775: 0x6c63d820, 0x2c776: 0x6c000620, 0x2c777: 0x6c004a20, + 0x2c778: 0x6c00fe20, 0x2c779: 0x6c024220, 0x2c77a: 0x6c024420, 0x2c77b: 0x6c056c20, + 0x2c77c: 0x6c056e20, 0x2c77d: 0x6c15ea20, 0x2c77e: 0x6c430020, 0x2c77f: 0x6c000820, + // Block 0xb1e, offset 0x2c780 + 0x2c780: 0x6c000a20, 0x2c781: 0x6c000c20, 0x2c782: 0x6c005020, 0x2c783: 0x6c005220, + 0x2c784: 0x6c005420, 0x2c785: 0x6c010620, 0x2c786: 0x6c010820, 0x2c787: 0x6c010a20, + 0x2c788: 0x6c010c20, 0x2c789: 0x6c010020, 0x2c78a: 0x6c010e20, 0x2c78b: 0x6c024820, + 0x2c78c: 0x6c024a20, 0x2c78d: 0x6c057420, 0x2c78e: 0x6c057620, 0x2c78f: 0x6c057820, + 0x2c790: 0x6c057a20, 0x2c791: 0x6c0af020, 0x2c792: 0x6c0af220, 0x2c793: 0x6c0af420, + 0x2c794: 0x6c0af620, 0x2c795: 0x6c160620, 0x2c796: 0x6c28d020, 0x2c797: 0x6c430220, + 0x2c798: 0x6c63e020, 0x2c799: 0x6c001020, 0x2c79a: 0x6c001220, 0x2c79b: 0x6c001420, + 0x2c79c: 0x6c006020, 0x2c79d: 0x6c006220, 0x2c79e: 0x6c012020, 0x2c79f: 0x6c012220, + 0x2c7a0: 0x6c012420, 0x2c7a1: 0x6c01d020, 0x2c7a2: 0x6c041020, 0x2c7a3: 0x6c025c20, + 0x2c7a4: 0x6c025e20, 0x2c7a5: 0x6c026020, 0x2c7a6: 0x6c026220, 0x2c7a7: 0x6c05a020, + 0x2c7a8: 0x6c0b1a20, 0x2c7a9: 0x6c0b1c20, 0x2c7aa: 0x6c0b1e20, 0x2c7ab: 0x6c0b2020, + 0x2c7ac: 0x6c0b2220, 0x2c7ad: 0x6c0b2420, 0x2c7ae: 0x6c0b2620, 0x2c7af: 0x6c0b2820, + 0x2c7b0: 0x6c0b2a20, 0x2c7b1: 0x6c161020, 0x2c7b2: 0x6c161220, 0x2c7b3: 0x6c28de20, + 0x2c7b4: 0x6c28e020, 0x2c7b5: 0x6c28e220, 0x2c7b6: 0x6c28e420, 0x2c7b7: 0x6c28e620, + 0x2c7b8: 0x6c28e820, 0x2c7b9: 0x6c431420, 0x2c7ba: 0x6c431620, 0x2c7bb: 0x6c431820, + 0x2c7bc: 0x6c431a20, 0x2c7bd: 0x6c63f220, 0x2c7be: 0x6c8b0c20, 0x2c7bf: 0x6c8b0e20, + // Block 0xb1f, offset 0x2c7c0 + 0x2c7c0: 0x6c8b1020, 0x2c7c1: 0x6cb7b220, 0x2c7c2: 0x6ce8d220, 0x2c7c3: 0x6ce8d420, + 0x2c7c4: 0x6ce8d620, 0x2c7c5: 0x6c002420, 0x2c7c6: 0x6c006a20, 0x2c7c7: 0x6c012c20, + 0x2c7c8: 0x6c027a20, 0x2c7c9: 0x6c0b3820, 0x2c7ca: 0x6c162020, 0x2c7cb: 0x6c28f420, + 0x2c7cc: 0x6c007420, 0x2c7cd: 0x6c013020, 0x2c7ce: 0x6c013220, 0x2c7cf: 0x6c013420, + 0x2c7d0: 0x6c00e420, 0x2c7d1: 0x6c028220, 0x2c7d2: 0x6c028420, 0x2c7d3: 0x6c028620, + 0x2c7d4: 0x6c028820, 0x2c7d5: 0x6c028a20, 0x2c7d6: 0x6c028c20, 0x2c7d7: 0x6c05b020, + 0x2c7d8: 0x6c0b3e20, 0x2c7d9: 0x6c0b4020, 0x2c7da: 0x6c0b4220, 0x2c7db: 0x6c28f820, + 0x2c7dc: 0x6c162a20, 0x2c7dd: 0x6c28fc20, 0x2c7de: 0x6c28fe20, 0x2c7df: 0x6c290020, + 0x2c7e0: 0x6c007c20, 0x2c7e1: 0x6c013620, 0x2c7e2: 0x6c029020, 0x2c7e3: 0x6c029220, + 0x2c7e4: 0x6c0b5420, 0x2c7e5: 0x6c0b5620, 0x2c7e6: 0x6c0b5820, 0x2c7e7: 0x6c0b5a20, + 0x2c7e8: 0x6c163620, 0x2c7e9: 0x6c163820, 0x2c7ea: 0x6c163a20, 0x2c7eb: 0x6c290e20, + 0x2c7ec: 0x6c291020, 0x2c7ed: 0x6c433420, 0x2c7ee: 0x6c433620, 0x2c7ef: 0x6c433820, + 0x2c7f0: 0x6c433a20, 0x2c7f1: 0x6c433c20, 0x2c7f2: 0x6c433e20, 0x2c7f3: 0x6c640a20, + 0x2c7f4: 0x6cb7c020, 0x2c7f5: 0x6cb7c220, 0x2c7f6: 0x6ce8e620, 0x2c7f7: 0x6ce8e820, + 0x2c7f8: 0x6d75da20, 0x2c7f9: 0x6e1c0620, 0x2c7fa: 0x6c007e20, 0x2c7fb: 0x6c008020, + 0x2c7fc: 0x6c013820, 0x2c7fd: 0x6c013a20, 0x2c7fe: 0x6c013c20, 0x2c7ff: 0x6c013e20, + // Block 0xb20, offset 0x2c800 + 0x2c800: 0x6c029620, 0x2c801: 0x6c029820, 0x2c802: 0x6c029a20, 0x2c803: 0x6c029c20, + 0x2c804: 0x6c029e20, 0x2c805: 0x6c02a020, 0x2c806: 0x6c02a220, 0x2c807: 0x6c02a420, + 0x2c808: 0x6c02a620, 0x2c809: 0x6c02a820, 0x2c80a: 0x6c02aa20, 0x2c80b: 0x6c02ac20, + 0x2c80c: 0x6c02ae20, 0x2c80d: 0x6c02b020, 0x2c80e: 0x6c02b220, 0x2c80f: 0x6c02b420, + 0x2c810: 0x6c02b620, 0x2c811: 0x6c02b820, 0x2c812: 0x6c02ba20, 0x2c813: 0x6c02bc20, + 0x2c814: 0x6c05c820, 0x2c815: 0x6c05ca20, 0x2c816: 0x6c05cc20, 0x2c817: 0x6c05ce20, + 0x2c818: 0x6c05d020, 0x2c819: 0x6c05d220, 0x2c81a: 0x6c05d420, 0x2c81b: 0x6c05d620, + 0x2c81c: 0x6c05d820, 0x2c81d: 0x6c05da20, 0x2c81e: 0x6c05dc20, 0x2c81f: 0x6c05de20, + 0x2c820: 0x6c05e020, 0x2c821: 0x6c05e220, 0x2c822: 0x6c05e420, 0x2c823: 0x6c05e620, + 0x2c824: 0x6c05e820, 0x2c825: 0x6c05ea20, 0x2c826: 0x6c05ec20, 0x2c827: 0x6c05ee20, + 0x2c828: 0x6c05f020, 0x2c829: 0x6c05f220, 0x2c82a: 0x6c05f420, 0x2c82b: 0x6c05f620, + 0x2c82c: 0x6c05f820, 0x2c82d: 0x6c05fa20, 0x2c82e: 0x6c0b7a20, 0x2c82f: 0x6c0b7c20, + 0x2c830: 0x6c0b7e20, 0x2c831: 0x6c0b8020, 0x2c832: 0x6c0b8220, 0x2c833: 0x6c0b8420, + 0x2c834: 0x6c0b8620, 0x2c835: 0x6c0b8820, 0x2c836: 0x6c0b8a20, 0x2c837: 0x6c0b8c20, + 0x2c838: 0x6c0b8e20, 0x2c839: 0x6c0b9020, 0x2c83a: 0x6c0b9220, 0x2c83b: 0x6c0b9420, + 0x2c83c: 0x6c0b9620, 0x2c83d: 0x6c0b9820, 0x2c83e: 0x6c0b9a20, 0x2c83f: 0x6c0b9c20, + // Block 0xb21, offset 0x2c840 + 0x2c840: 0x6c0b9e20, 0x2c841: 0x6c0ba020, 0x2c842: 0x6c0ba220, 0x2c843: 0x6c0ba420, + 0x2c844: 0x6c0ba620, 0x2c845: 0x6c0ba820, 0x2c846: 0x6c0baa20, 0x2c847: 0x6c0bac20, + 0x2c848: 0x6c0bae20, 0x2c849: 0x6c0bb020, 0x2c84a: 0x6c0bb220, 0x2c84b: 0x6c0bb420, + 0x2c84c: 0x6c0bb620, 0x2c84d: 0x6c0bb820, 0x2c84e: 0x6c0bba20, 0x2c84f: 0x6c0bbc20, + 0x2c850: 0x6c0bbe20, 0x2c851: 0x6c0bc020, 0x2c852: 0x6c0bc220, 0x2c853: 0x6c0bc420, + 0x2c854: 0x6c0bc620, 0x2c855: 0x6c0bc820, 0x2c856: 0x6c0bca20, 0x2c857: 0x6c0bcc20, + 0x2c858: 0x6c0bce20, 0x2c859: 0x6c0bd020, 0x2c85a: 0x6c0bd220, 0x2c85b: 0x6c0bd420, + 0x2c85c: 0x6c0bd620, 0x2c85d: 0x6c0bd820, 0x2c85e: 0x6c0bda20, 0x2c85f: 0x6c0bdc20, + 0x2c860: 0x6c0bde20, 0x2c861: 0x6c0be020, 0x2c862: 0x6c0be220, 0x2c863: 0x6c0be420, + 0x2c864: 0x6c0be620, 0x2c865: 0x6c0be820, 0x2c866: 0x6c0bea20, 0x2c867: 0x6c0bec20, + 0x2c868: 0x6c0bee20, 0x2c869: 0x6c0bf020, 0x2c86a: 0x6c0bf220, 0x2c86b: 0x6c0bf420, + 0x2c86c: 0x6c0bf620, 0x2c86d: 0x6c165620, 0x2c86e: 0x6c165820, 0x2c86f: 0x6c165a20, + 0x2c870: 0x6c165c20, 0x2c871: 0x6c165e20, 0x2c872: 0x6c166020, 0x2c873: 0x6c166220, + 0x2c874: 0x6c166420, 0x2c875: 0x6c166620, 0x2c876: 0x6c166820, 0x2c877: 0x6c166a20, + 0x2c878: 0x6c166c20, 0x2c879: 0x6c166e20, 0x2c87a: 0x6c167020, 0x2c87b: 0x6c167220, + 0x2c87c: 0x6c167420, 0x2c87d: 0x6c167620, 0x2c87e: 0x6c167820, 0x2c87f: 0x6c167a20, + // Block 0xb22, offset 0x2c880 + 0x2c880: 0x6c167c20, 0x2c881: 0x6c167e20, 0x2c882: 0x6c168020, 0x2c883: 0x6c168220, + 0x2c884: 0x6c168420, 0x2c885: 0x6c168620, 0x2c886: 0x6c168820, 0x2c887: 0x6c168a20, + 0x2c888: 0x6c168c20, 0x2c889: 0x6c168e20, 0x2c88a: 0x6c169020, 0x2c88b: 0x6c169220, + 0x2c88c: 0x6c292020, 0x2c88d: 0x6c169420, 0x2c88e: 0x6c169620, 0x2c88f: 0x6c169820, + 0x2c890: 0x6c169a20, 0x2c891: 0x6c169c20, 0x2c892: 0x6c169e20, 0x2c893: 0x6c16a020, + 0x2c894: 0x6c16a220, 0x2c895: 0x6c16a420, 0x2c896: 0x6c16a620, 0x2c897: 0x6c16a820, + 0x2c898: 0x6c16aa20, 0x2c899: 0x6c16ac20, 0x2c89a: 0x6c16ae20, 0x2c89b: 0x6c16b020, + 0x2c89c: 0x6c16b220, 0x2c89d: 0x6c16b420, 0x2c89e: 0x6c16b620, 0x2c89f: 0x6c16b820, + 0x2c8a0: 0x6c16ba20, 0x2c8a1: 0x6c16bc20, 0x2c8a2: 0x6c16be20, 0x2c8a3: 0x6c16c020, + 0x2c8a4: 0x6c0bf820, 0x2c8a5: 0x6c16c220, 0x2c8a6: 0x6c16c420, 0x2c8a7: 0x6c16c620, + 0x2c8a8: 0x6c16c820, 0x2c8a9: 0x6c293e20, 0x2c8aa: 0x6c294020, 0x2c8ab: 0x6c294220, + 0x2c8ac: 0x6c294420, 0x2c8ad: 0x6c294620, 0x2c8ae: 0x6c294820, 0x2c8af: 0x6c294a20, + 0x2c8b0: 0x6c294c20, 0x2c8b1: 0x6c294e20, 0x2c8b2: 0x6c295020, 0x2c8b3: 0x6c295220, + 0x2c8b4: 0x6c295420, 0x2c8b5: 0x6c295620, 0x2c8b6: 0x6c295820, 0x2c8b7: 0x6c295a20, + 0x2c8b8: 0x6c295c20, 0x2c8b9: 0x6c295e20, 0x2c8ba: 0x6c296020, 0x2c8bb: 0x6c296220, + 0x2c8bc: 0x6c296420, 0x2c8bd: 0x6c296620, 0x2c8be: 0x6c296820, 0x2c8bf: 0x6c296a20, + // Block 0xb23, offset 0x2c8c0 + 0x2c8c0: 0x6c296c20, 0x2c8c1: 0x6c296e20, 0x2c8c2: 0x6c297020, 0x2c8c3: 0x6c297220, + 0x2c8c4: 0x6c297420, 0x2c8c5: 0x6c297620, 0x2c8c6: 0x6c297820, 0x2c8c7: 0x6c297a20, + 0x2c8c8: 0x6c297c20, 0x2c8c9: 0x6c297e20, 0x2c8ca: 0x6c298020, 0x2c8cb: 0x6c298220, + 0x2c8cc: 0x6c298420, 0x2c8cd: 0x6c298620, 0x2c8ce: 0x6c298820, 0x2c8cf: 0x6c298a20, + 0x2c8d0: 0x6c298c20, 0x2c8d1: 0x6c298e20, 0x2c8d2: 0x6c299020, 0x2c8d3: 0x6c299220, + 0x2c8d4: 0x6c299420, 0x2c8d5: 0x6c299620, 0x2c8d6: 0x6c299820, 0x2c8d7: 0x6c299a20, + 0x2c8d8: 0x6c299c20, 0x2c8d9: 0x6c299e20, 0x2c8da: 0x6c29a020, 0x2c8db: 0x6c29a220, + 0x2c8dc: 0x6c29a420, 0x2c8dd: 0x6c29a620, 0x2c8de: 0x6c29a820, 0x2c8df: 0x6c29aa20, + 0x2c8e0: 0x6c29ac20, 0x2c8e1: 0x6c29ae20, 0x2c8e2: 0x6c29b020, 0x2c8e3: 0x6c29b220, + 0x2c8e4: 0x6c29b420, 0x2c8e5: 0x6c29b620, 0x2c8e6: 0x6c29b820, 0x2c8e7: 0x6c29ba20, + 0x2c8e8: 0x6c29bc20, 0x2c8e9: 0x6c29be20, 0x2c8ea: 0x6c29c020, 0x2c8eb: 0x6c29c220, + 0x2c8ec: 0x6c29c420, 0x2c8ed: 0x6c29c620, 0x2c8ee: 0x6c435e20, 0x2c8ef: 0x6c436020, + 0x2c8f0: 0x6c436220, 0x2c8f1: 0x6c436420, 0x2c8f2: 0x6c436620, 0x2c8f3: 0x6c436820, + 0x2c8f4: 0x6c436a20, 0x2c8f5: 0x6c436c20, 0x2c8f6: 0x6c436e20, 0x2c8f7: 0x6c437020, + 0x2c8f8: 0x6c437220, 0x2c8f9: 0x6c437420, 0x2c8fa: 0x6c437620, 0x2c8fb: 0x6c437820, + 0x2c8fc: 0x6c437a20, 0x2c8fd: 0x6c437c20, 0x2c8fe: 0x6c437e20, 0x2c8ff: 0x6c438020, + // Block 0xb24, offset 0x2c900 + 0x2c900: 0x6c438220, 0x2c901: 0x6c438420, 0x2c902: 0x6c438620, 0x2c903: 0x6c438820, + 0x2c904: 0x6c438a20, 0x2c905: 0x6c438c20, 0x2c906: 0x6c438e20, 0x2c907: 0x6c439020, + 0x2c908: 0x6c439220, 0x2c909: 0x6c439420, 0x2c90a: 0x6c439620, 0x2c90b: 0x6c439820, + 0x2c90c: 0x6c439a20, 0x2c90d: 0x6c439c20, 0x2c90e: 0x6c439e20, 0x2c90f: 0x6c43a020, + 0x2c910: 0x6c43a220, 0x2c911: 0x6c43a420, 0x2c912: 0x6c43a620, 0x2c913: 0x6c43a820, + 0x2c914: 0x6c43aa20, 0x2c915: 0x6c43ac20, 0x2c916: 0x6c43ae20, 0x2c917: 0x6c43b020, + 0x2c918: 0x6c43b220, 0x2c919: 0x6c43b420, 0x2c91a: 0x6c43b620, 0x2c91b: 0x6c43b820, + 0x2c91c: 0x6c43ba20, 0x2c91d: 0x6c43bc20, 0x2c91e: 0x6c43be20, 0x2c91f: 0x6c43c020, + 0x2c920: 0x6c43c220, 0x2c921: 0x6c43c420, 0x2c922: 0x6c43c620, 0x2c923: 0x6c43c820, + 0x2c924: 0x6c43ca20, 0x2c925: 0x6c43cc20, 0x2c926: 0x6c43ce20, 0x2c927: 0x6c43d020, + 0x2c928: 0x6c43d220, 0x2c929: 0x6c43d420, 0x2c92a: 0x6c43d620, 0x2c92b: 0x6c43d820, + 0x2c92c: 0x6c43da20, 0x2c92d: 0x6c43dc20, 0x2c92e: 0x6c642e20, 0x2c92f: 0x6c643020, + 0x2c930: 0x6c643220, 0x2c931: 0x6c643420, 0x2c932: 0x6c643620, 0x2c933: 0x6c643820, + 0x2c934: 0x6c643a20, 0x2c935: 0x6c643c20, 0x2c936: 0x6c643e20, 0x2c937: 0x6c644020, + 0x2c938: 0x6c644220, 0x2c939: 0x6c644420, 0x2c93a: 0x6c644620, 0x2c93b: 0x6c644820, + 0x2c93c: 0x6c644a20, 0x2c93d: 0x6c644c20, 0x2c93e: 0x6c644e20, 0x2c93f: 0x6c645020, + // Block 0xb25, offset 0x2c940 + 0x2c940: 0x6c645220, 0x2c941: 0x6c645420, 0x2c942: 0x6c645620, 0x2c943: 0x6c645820, + 0x2c944: 0x6c645a20, 0x2c945: 0x6c645c20, 0x2c946: 0x6c645e20, 0x2c947: 0x6c646020, + 0x2c948: 0x6c646220, 0x2c949: 0x6c646420, 0x2c94a: 0x6c646620, 0x2c94b: 0x6c646820, + 0x2c94c: 0x6c646a20, 0x2c94d: 0x6c646c20, 0x2c94e: 0x6c646e20, 0x2c94f: 0x6c647020, + 0x2c950: 0x6c647220, 0x2c951: 0x6c647420, 0x2c952: 0x6c647620, 0x2c953: 0x6c647820, + 0x2c954: 0x6c647a20, 0x2c955: 0x6c647c20, 0x2c956: 0x6c647e20, 0x2c957: 0x6c648020, + 0x2c958: 0x6c648220, 0x2c959: 0x6c648420, 0x2c95a: 0x6c648620, 0x2c95b: 0x6c648820, + 0x2c95c: 0x6c648a20, 0x2c95d: 0x6c648c20, 0x2c95e: 0x6c648e20, 0x2c95f: 0x6c649020, + 0x2c960: 0x6c649220, 0x2c961: 0x6c649420, 0x2c962: 0x6c649620, 0x2c963: 0x6c649820, + 0x2c964: 0x6c649a20, 0x2c965: 0x6c649c20, 0x2c966: 0x6c649e20, 0x2c967: 0x6c64a020, + 0x2c968: 0x6c64a220, 0x2c969: 0x6c64a420, 0x2c96a: 0x6c64a620, 0x2c96b: 0x6c64a820, + 0x2c96c: 0x6c64aa20, 0x2c96d: 0x6c64ac20, 0x2c96e: 0x6c64ae20, 0x2c96f: 0x6c64b020, + 0x2c970: 0x6c64b220, 0x2c971: 0x6c64b420, 0x2c972: 0x6c64b620, 0x2c973: 0x6c64b820, + 0x2c974: 0x6c64ba20, 0x2c975: 0x6c64bc20, 0x2c976: 0x6c64be20, 0x2c977: 0x6c64c020, + 0x2c978: 0x6c64c220, 0x2c979: 0x6c64c420, 0x2c97a: 0x6c64c620, 0x2c97b: 0x6c64c820, + 0x2c97c: 0x6c64ca20, 0x2c97d: 0x6c64cc20, 0x2c97e: 0x6c64ce20, 0x2c97f: 0x6c64d020, + // Block 0xb26, offset 0x2c980 + 0x2c980: 0x6c8b4a20, 0x2c981: 0x6c8b4c20, 0x2c982: 0x6c8b4e20, 0x2c983: 0x6c8b5020, + 0x2c984: 0x6c8b5220, 0x2c985: 0x6c8b5420, 0x2c986: 0x6c8b5620, 0x2c987: 0x6c8b5820, + 0x2c988: 0x6c8b5a20, 0x2c989: 0x6c8b5c20, 0x2c98a: 0x6c8b5e20, 0x2c98b: 0x6c8b6020, + 0x2c98c: 0x6c8b6220, 0x2c98d: 0x6c8b6420, 0x2c98e: 0x6c8b6620, 0x2c98f: 0x6c8b6820, + 0x2c990: 0x6c8b6a20, 0x2c991: 0x6c8b6c20, 0x2c992: 0x6c8b6e20, 0x2c993: 0x6c8b7020, + 0x2c994: 0x6c8b7220, 0x2c995: 0x6c8b7420, 0x2c996: 0x6c656e20, 0x2c997: 0x6c8b7620, + 0x2c998: 0x6c8b7820, 0x2c999: 0x6c8b7a20, 0x2c99a: 0x6c8b7c20, 0x2c99b: 0x6c8b7e20, + 0x2c99c: 0x6c8b8020, 0x2c99d: 0x6c8b8220, 0x2c99e: 0x6c8b8420, 0x2c99f: 0x6c8b8620, + 0x2c9a0: 0x6c8b8820, 0x2c9a1: 0x6c8b8a20, 0x2c9a2: 0x6c8b8c20, 0x2c9a3: 0x6c8b8e20, + 0x2c9a4: 0x6c8b9020, 0x2c9a5: 0x6c8b9220, 0x2c9a6: 0x6c8b9420, 0x2c9a7: 0x6c8b9620, + 0x2c9a8: 0x6cb7d820, 0x2c9a9: 0x6c8b9820, 0x2c9aa: 0x6c8b9a20, 0x2c9ab: 0x6c8b9c20, + 0x2c9ac: 0x6c8b9e20, 0x2c9ad: 0x6c8ba020, 0x2c9ae: 0x6c8ba220, 0x2c9af: 0x6c8ba420, + 0x2c9b0: 0x6c8ba620, 0x2c9b1: 0x6c8ba820, 0x2c9b2: 0x6c8baa20, 0x2c9b3: 0x6c8bac20, + 0x2c9b4: 0x6c8bae20, 0x2c9b5: 0x6c8bb020, 0x2c9b6: 0x6c8bb220, 0x2c9b7: 0x6c8bb420, + 0x2c9b8: 0x6c8bb620, 0x2c9b9: 0x6c8bb820, 0x2c9ba: 0x6c8bba20, 0x2c9bb: 0x6c8bbc20, + 0x2c9bc: 0x6c8bbe20, 0x2c9bd: 0x6c8bc020, 0x2c9be: 0x6c8bc220, 0x2c9bf: 0x6c8bc420, + // Block 0xb27, offset 0x2c9c0 + 0x2c9c0: 0x6cb7ea20, 0x2c9c1: 0x6cb7ec20, 0x2c9c2: 0x6cb7ee20, 0x2c9c3: 0x6cb7f020, + 0x2c9c4: 0x6cb7f220, 0x2c9c5: 0x6cb7f420, 0x2c9c6: 0x6cb7f620, 0x2c9c7: 0x6cb7f820, + 0x2c9c8: 0x6cb7fa20, 0x2c9c9: 0x6cb7fc20, 0x2c9ca: 0x6cb7fe20, 0x2c9cb: 0x6cb80020, + 0x2c9cc: 0x6cb80220, 0x2c9cd: 0x6cb80420, 0x2c9ce: 0x6cb80620, 0x2c9cf: 0x6cb80820, + 0x2c9d0: 0x6cb80a20, 0x2c9d1: 0x6cb80c20, 0x2c9d2: 0x6cb80e20, 0x2c9d3: 0x6cb81020, + 0x2c9d4: 0x6cb81220, 0x2c9d5: 0x6cb81420, 0x2c9d6: 0x6cb81620, 0x2c9d7: 0x6cb81820, + 0x2c9d8: 0x6cb81a20, 0x2c9d9: 0x6cb81c20, 0x2c9da: 0x6cb81e20, 0x2c9db: 0x6cb82020, + 0x2c9dc: 0x6cb82220, 0x2c9dd: 0x6cb82420, 0x2c9de: 0x6cb82620, 0x2c9df: 0x6cb82820, + 0x2c9e0: 0x6cb82a20, 0x2c9e1: 0x6cb82c20, 0x2c9e2: 0x6cb82e20, 0x2c9e3: 0x6cb83020, + 0x2c9e4: 0x6cb83220, 0x2c9e5: 0x6cb83420, 0x2c9e6: 0x6cb83620, 0x2c9e7: 0x6cb83820, + 0x2c9e8: 0x6cb83a20, 0x2c9e9: 0x6cb83c20, 0x2c9ea: 0x6ce90c20, 0x2c9eb: 0x6ce90e20, + 0x2c9ec: 0x6ce91020, 0x2c9ed: 0x6ce91220, 0x2c9ee: 0x6ce91420, 0x2c9ef: 0x6ce91620, + 0x2c9f0: 0x6ce91820, 0x2c9f1: 0x6ce91a20, 0x2c9f2: 0x6ce91c20, 0x2c9f3: 0x6ce91e20, + 0x2c9f4: 0x6ce92020, 0x2c9f5: 0x6ce92220, 0x2c9f6: 0x6ce92420, 0x2c9f7: 0x6ce92620, + 0x2c9f8: 0x6ce92820, 0x2c9f9: 0x6ce92a20, 0x2c9fa: 0x6ce92c20, 0x2c9fb: 0x6ce92e20, + 0x2c9fc: 0x6ce93020, 0x2c9fd: 0x6ce93220, 0x2c9fe: 0x6ce93420, 0x2c9ff: 0x6ce93620, + // Block 0xb28, offset 0x2ca00 + 0x2ca00: 0x6ce93820, 0x2ca01: 0x6ce93a20, 0x2ca02: 0x6ce93c20, 0x2ca03: 0x6ce93e20, + 0x2ca04: 0x6ce94020, 0x2ca05: 0x6ce94220, 0x2ca06: 0x6ce94420, 0x2ca07: 0x6ce94620, + 0x2ca08: 0x6ce94820, 0x2ca09: 0x6ce94a20, 0x2ca0a: 0x6ce94c20, 0x2ca0b: 0x6ce94e20, + 0x2ca0c: 0x6ce95020, 0x2ca0d: 0x6ce95220, 0x2ca0e: 0x6d18cc20, 0x2ca0f: 0x6d18ce20, + 0x2ca10: 0x6d18d020, 0x2ca11: 0x6d18d220, 0x2ca12: 0x6d18d420, 0x2ca13: 0x6d18d620, + 0x2ca14: 0x6d18d820, 0x2ca15: 0x6d18da20, 0x2ca16: 0x6d18dc20, 0x2ca17: 0x6d18de20, + 0x2ca18: 0x6d18e020, 0x2ca19: 0x6d18e220, 0x2ca1a: 0x6d18e420, 0x2ca1b: 0x6d18e620, + 0x2ca1c: 0x6d18e820, 0x2ca1d: 0x6d18ea20, 0x2ca1e: 0x6d18ec20, 0x2ca1f: 0x6d18ee20, + 0x2ca20: 0x6d18f020, 0x2ca21: 0x6d18f220, 0x2ca22: 0x6d18f420, 0x2ca23: 0x6d18f620, + 0x2ca24: 0x6d18f820, 0x2ca25: 0x6d18fa20, 0x2ca26: 0x6d18fc20, 0x2ca27: 0x6d18fe20, + 0x2ca28: 0x6d190020, 0x2ca29: 0x6d190220, 0x2ca2a: 0x6d190420, 0x2ca2b: 0x6d190620, + 0x2ca2c: 0x6d190820, 0x2ca2d: 0x6d190a20, 0x2ca2e: 0x6d190c20, 0x2ca2f: 0x6d190e20, + 0x2ca30: 0x6d191020, 0x2ca31: 0x6d191220, 0x2ca32: 0x6d19b420, 0x2ca33: 0x6d191420, + 0x2ca34: 0x6d191620, 0x2ca35: 0x6d47c220, 0x2ca36: 0x6d47c420, 0x2ca37: 0x6d191820, + 0x2ca38: 0x6d47c620, 0x2ca39: 0x6d47c820, 0x2ca3a: 0x6d47ca20, 0x2ca3b: 0x6d47cc20, + 0x2ca3c: 0x6d47ce20, 0x2ca3d: 0x6d47d020, 0x2ca3e: 0x6d47d220, 0x2ca3f: 0x6d47d420, + // Block 0xb29, offset 0x2ca40 + 0x2ca40: 0x6d47d620, 0x2ca41: 0x6d47d820, 0x2ca42: 0x6d47da20, 0x2ca43: 0x6d47dc20, + 0x2ca44: 0x6d47de20, 0x2ca45: 0x6d47e020, 0x2ca46: 0x6d47e220, 0x2ca47: 0x6d47e420, + 0x2ca48: 0x6d47e620, 0x2ca49: 0x6d47e820, 0x2ca4a: 0x6d47ea20, 0x2ca4b: 0x6d47ec20, + 0x2ca4c: 0x6d47ee20, 0x2ca4d: 0x6d47f020, 0x2ca4e: 0x6d47f220, 0x2ca4f: 0x6d47f420, + 0x2ca50: 0x6d75fc20, 0x2ca51: 0x6d75fe20, 0x2ca52: 0x6d760020, 0x2ca53: 0x6d760220, + 0x2ca54: 0x6d760420, 0x2ca55: 0x6d760620, 0x2ca56: 0x6d760820, 0x2ca57: 0x6d760a20, + 0x2ca58: 0x6d760c20, 0x2ca59: 0x6d760e20, 0x2ca5a: 0x6d761020, 0x2ca5b: 0x6d761220, + 0x2ca5c: 0x6d761420, 0x2ca5d: 0x6d761620, 0x2ca5e: 0x6d761820, 0x2ca5f: 0x6d9fae20, + 0x2ca60: 0x6d9fb020, 0x2ca61: 0x6d9fb220, 0x2ca62: 0x6d9fb420, 0x2ca63: 0x6d9fb620, + 0x2ca64: 0x6d9fb820, 0x2ca65: 0x6d9fba20, 0x2ca66: 0x6d9fbc20, 0x2ca67: 0x6d9fbe20, + 0x2ca68: 0x6d9fc020, 0x2ca69: 0x6d9fc220, 0x2ca6a: 0x6d9fc420, 0x2ca6b: 0x6d761a20, + 0x2ca6c: 0x6d9fc620, 0x2ca6d: 0x6dc24e20, 0x2ca6e: 0x6dc25020, 0x2ca6f: 0x6dc25220, + 0x2ca70: 0x6d485a20, 0x2ca71: 0x6dc25420, 0x2ca72: 0x6da00220, 0x2ca73: 0x6de01420, + 0x2ca74: 0x6de01620, 0x2ca75: 0x6de01820, 0x2ca76: 0x6df87420, 0x2ca77: 0x6e0c4220, + 0x2ca78: 0x6e0c4420, 0x2ca79: 0x6e0c4620, 0x2ca7a: 0x6e0c4820, 0x2ca7b: 0x6e1c0820, + 0x2ca7c: 0x6e1c0a20, 0x2ca7d: 0x6e284c20, 0x2ca7e: 0x6e318820, 0x2ca7f: 0x6c008420, + // Block 0xb2a, offset 0x2ca80 + 0x2ca80: 0x6c014620, 0x2ca81: 0x6c02c620, 0x2ca82: 0x6c02c820, 0x2ca83: 0x6c02ca20, + 0x2ca84: 0x6c060e20, 0x2ca85: 0x6c061420, 0x2ca86: 0x6c0c4620, 0x2ca87: 0x6c0c4820, + 0x2ca88: 0x6c0c4a20, 0x2ca89: 0x6c0c4c20, 0x2ca8a: 0x6c0c4e20, 0x2ca8b: 0x6c173420, + 0x2ca8c: 0x6c173620, 0x2ca8d: 0x6c173820, 0x2ca8e: 0x6c173a20, 0x2ca8f: 0x6c173c20, + 0x2ca90: 0x6c173e20, 0x2ca91: 0x6c174020, 0x2ca92: 0x6c2a2e20, 0x2ca93: 0x6c2a3020, + 0x2ca94: 0x6c2a3220, 0x2ca95: 0x6c2a3420, 0x2ca96: 0x6c2a3620, 0x2ca97: 0x6c445a20, + 0x2ca98: 0x6c445c20, 0x2ca99: 0x6c445e20, 0x2ca9a: 0x6c657220, 0x2ca9b: 0x6c657420, + 0x2ca9c: 0x6c8c6820, 0x2ca9d: 0x6c8c6a20, 0x2ca9e: 0x6c8c6c20, 0x2ca9f: 0x6cb8c620, + 0x2caa0: 0x6cb8c820, 0x2caa1: 0x6ce9e220, 0x2caa2: 0x6d19b620, 0x2caa3: 0x6d766620, + 0x2caa4: 0x6e0c6420, 0x2caa5: 0x6c008620, 0x2caa6: 0x6c014820, 0x2caa7: 0x6c02ce20, + 0x2caa8: 0x6c0c5a20, 0x2caa9: 0x6c2a4c20, 0x2caaa: 0x6c446c20, 0x2caab: 0x6c008820, + 0x2caac: 0x6c02d620, 0x2caad: 0x6c02d820, 0x2caae: 0x6c02da20, 0x2caaf: 0x6c02dc20, + 0x2cab0: 0x6c061c20, 0x2cab1: 0x6c0c6820, 0x2cab2: 0x6c0c6a20, 0x2cab3: 0x6c0c6c20, + 0x2cab4: 0x6c0c6e20, 0x2cab5: 0x6c176220, 0x2cab6: 0x6c2a5020, 0x2cab7: 0x6c2a5220, + 0x2cab8: 0x6c2a5420, 0x2cab9: 0x6c447620, 0x2caba: 0x6c659020, 0x2cabb: 0x6c447820, + 0x2cabc: 0x6c659220, 0x2cabd: 0x6c8c7e20, 0x2cabe: 0x6ce9f420, 0x2cabf: 0x6ce9f620, + // Block 0xb2b, offset 0x2cac0 + 0x2cac0: 0x6d767a20, 0x2cac1: 0x6dc29820, 0x2cac2: 0x6c008c20, 0x2cac3: 0x6c02e620, + 0x2cac4: 0x6c02e820, 0x2cac5: 0x6c02ea20, 0x2cac6: 0x6c02ec20, 0x2cac7: 0x6c02ee20, + 0x2cac8: 0x6c02f020, 0x2cac9: 0x6c062220, 0x2caca: 0x6c062420, 0x2cacb: 0x6c062620, + 0x2cacc: 0x6c062820, 0x2cacd: 0x6c0c7820, 0x2cace: 0x6c0c7a20, 0x2cacf: 0x6c177020, + 0x2cad0: 0x6c2a5e20, 0x2cad1: 0x6c448620, 0x2cad2: 0x6c448820, 0x2cad3: 0x6c659a20, + 0x2cad4: 0x6c659c20, 0x2cad5: 0x6c8c8820, 0x2cad6: 0x6c008e20, 0x2cad7: 0x6c02fe20, + 0x2cad8: 0x6c030020, 0x2cad9: 0x6c063e20, 0x2cada: 0x6c064020, 0x2cadb: 0x6c0c8620, + 0x2cadc: 0x6c0c8820, 0x2cadd: 0x6c178020, 0x2cade: 0x6c2a6a20, 0x2cadf: 0x6c449220, + 0x2cae0: 0x6c449420, 0x2cae1: 0x6c65a420, 0x2cae2: 0x6c65a620, 0x2cae3: 0x6c65a820, + 0x2cae4: 0x6c65aa20, 0x2cae5: 0x6c65ac20, 0x2cae6: 0x6c65ae20, 0x2cae7: 0x6c65b020, + 0x2cae8: 0x6c8c9020, 0x2cae9: 0x6d19e020, 0x2caea: 0x6d768820, 0x2caeb: 0x6c009020, + 0x2caec: 0x6c064a20, 0x2caed: 0x6c064c20, 0x2caee: 0x6c064e20, 0x2caef: 0x6c065020, + 0x2caf0: 0x6c0c9c20, 0x2caf1: 0x6c0c9e20, 0x2caf2: 0x6c0ca020, 0x2caf3: 0x6c0ca220, + 0x2caf4: 0x6c0ca420, 0x2caf5: 0x6c179020, 0x2caf6: 0x6c179220, 0x2caf7: 0x6c179420, + 0x2caf8: 0x6c179620, 0x2caf9: 0x6c179820, 0x2cafa: 0x6c179a20, 0x2cafb: 0x6c179c20, + 0x2cafc: 0x6c2a7e20, 0x2cafd: 0x6c2a8020, 0x2cafe: 0x6c2a8220, 0x2caff: 0x6c2a8420, + // Block 0xb2c, offset 0x2cb00 + 0x2cb00: 0x6c2a8620, 0x2cb01: 0x6c44a420, 0x2cb02: 0x6c44a620, 0x2cb03: 0x6c44a820, + 0x2cb04: 0x6c65c820, 0x2cb05: 0x6c65ca20, 0x2cb06: 0x6c65cc20, 0x2cb07: 0x6c65ce20, + 0x2cb08: 0x6c65d020, 0x2cb09: 0x6c65d220, 0x2cb0a: 0x6c65d420, 0x2cb0b: 0x6c65d620, + 0x2cb0c: 0x6c65d820, 0x2cb0d: 0x6c65da20, 0x2cb0e: 0x6c65dc20, 0x2cb0f: 0x6c8c9820, + 0x2cb10: 0x6c8c9a20, 0x2cb11: 0x6c8c9c20, 0x2cb12: 0x6cb91020, 0x2cb13: 0x6cb91220, + 0x2cb14: 0x6cb91420, 0x2cb15: 0x6cb91620, 0x2cb16: 0x6cb91820, 0x2cb17: 0x6cea1420, + 0x2cb18: 0x6d19ec20, 0x2cb19: 0x6d487820, 0x2cb1a: 0x6d487a20, 0x2cb1b: 0x6d487c20, + 0x2cb1c: 0x6d487e20, 0x2cb1d: 0x6d768e20, 0x2cb1e: 0x6d769020, 0x2cb1f: 0x6da01a20, + 0x2cb20: 0x6c009420, 0x2cb21: 0x6c015220, 0x2cb22: 0x6c015420, 0x2cb23: 0x6c015620, + 0x2cb24: 0x6c030a20, 0x2cb25: 0x6c065a20, 0x2cb26: 0x6c065c20, 0x2cb27: 0x6c065e20, + 0x2cb28: 0x6c0cba20, 0x2cb29: 0x6c0cbc20, 0x2cb2a: 0x6c0cbe20, 0x2cb2b: 0x6c0cc020, + 0x2cb2c: 0x6c17b820, 0x2cb2d: 0x6c2a9820, 0x2cb2e: 0x6c2a9a20, 0x2cb2f: 0x6c2a9c20, + 0x2cb30: 0x6c8cc020, 0x2cb31: 0x6cb93020, 0x2cb32: 0x6cb93220, 0x2cb33: 0x6d19fe20, + 0x2cb34: 0x6d1a0020, 0x2cb35: 0x6c009a20, 0x2cb36: 0x6c031c20, 0x2cb37: 0x6c066820, + 0x2cb38: 0x6c066a20, 0x2cb39: 0x6c066c20, 0x2cb3a: 0x6c066e20, 0x2cb3b: 0x6c067020, + 0x2cb3c: 0x6c0cd420, 0x2cb3d: 0x6c2ab220, 0x2cb3e: 0x6c44d820, 0x2cb3f: 0x6cb94020, + // Block 0xb2d, offset 0x2cb40 + 0x2cb40: 0x6c00a020, 0x2cb41: 0x6c00a220, 0x2cb42: 0x6c00a420, 0x2cb43: 0x6c015a20, + 0x2cb44: 0x6c015c20, 0x2cb45: 0x6c032420, 0x2cb46: 0x6c032620, 0x2cb47: 0x6c032820, + 0x2cb48: 0x6c032a20, 0x2cb49: 0x6c068220, 0x2cb4a: 0x6c068420, 0x2cb4b: 0x6c068620, + 0x2cb4c: 0x6c068820, 0x2cb4d: 0x6c068a20, 0x2cb4e: 0x6c0cea20, 0x2cb4f: 0x6c0cec20, + 0x2cb50: 0x6c0cee20, 0x2cb51: 0x6c0cf020, 0x2cb52: 0x6c0cf220, 0x2cb53: 0x6c0cf420, + 0x2cb54: 0x6c0cf620, 0x2cb55: 0x6c0cf820, 0x2cb56: 0x6c0cfa20, 0x2cb57: 0x6c0cfc20, + 0x2cb58: 0x6c0cfe20, 0x2cb59: 0x6c0d0020, 0x2cb5a: 0x6c0d0220, 0x2cb5b: 0x6c0d0420, + 0x2cb5c: 0x6c17de20, 0x2cb5d: 0x6c17e020, 0x2cb5e: 0x6c17e220, 0x2cb5f: 0x6c17e420, + 0x2cb60: 0x6c17e620, 0x2cb61: 0x6c17e820, 0x2cb62: 0x6c17ea20, 0x2cb63: 0x6c17ec20, + 0x2cb64: 0x6c17ee20, 0x2cb65: 0x6c17f020, 0x2cb66: 0x6c17f220, 0x2cb67: 0x6c17f420, + 0x2cb68: 0x6c17f620, 0x2cb69: 0x6c17f820, 0x2cb6a: 0x6c17fa20, 0x2cb6b: 0x6c17fc20, + 0x2cb6c: 0x6c17fe20, 0x2cb6d: 0x6c180020, 0x2cb6e: 0x6c2ac820, 0x2cb6f: 0x6c2aca20, + 0x2cb70: 0x6c2acc20, 0x2cb71: 0x6c2ace20, 0x2cb72: 0x6c2ad020, 0x2cb73: 0x6c2ad220, + 0x2cb74: 0x6c2ad420, 0x2cb75: 0x6c2ad620, 0x2cb76: 0x6c2ad820, 0x2cb77: 0x6c2ada20, + 0x2cb78: 0x6c2adc20, 0x2cb79: 0x6c2ade20, 0x2cb7a: 0x6c2ae020, 0x2cb7b: 0x6c2ae220, + 0x2cb7c: 0x6c2ae420, 0x2cb7d: 0x6c2ae620, 0x2cb7e: 0x6c2ae820, 0x2cb7f: 0x6c2aea20, + // Block 0xb2e, offset 0x2cb80 + 0x2cb80: 0x6c2aec20, 0x2cb81: 0x6c2aee20, 0x2cb82: 0x6c2af020, 0x2cb83: 0x6c44ea20, + 0x2cb84: 0x6c44ec20, 0x2cb85: 0x6c44ee20, 0x2cb86: 0x6c2b4a20, 0x2cb87: 0x6c44f020, + 0x2cb88: 0x6c44f220, 0x2cb89: 0x6c44f420, 0x2cb8a: 0x6c44f620, 0x2cb8b: 0x6c44f820, + 0x2cb8c: 0x6c44fa20, 0x2cb8d: 0x6c44fc20, 0x2cb8e: 0x6c44fe20, 0x2cb8f: 0x6c450020, + 0x2cb90: 0x6c450220, 0x2cb91: 0x6c450420, 0x2cb92: 0x6c661c20, 0x2cb93: 0x6c661e20, + 0x2cb94: 0x6c662020, 0x2cb95: 0x6c662220, 0x2cb96: 0x6c662420, 0x2cb97: 0x6c662620, + 0x2cb98: 0x6c662820, 0x2cb99: 0x6c662a20, 0x2cb9a: 0x6c662c20, 0x2cb9b: 0x6c662e20, + 0x2cb9c: 0x6c663020, 0x2cb9d: 0x6c663220, 0x2cb9e: 0x6c663420, 0x2cb9f: 0x6c663620, + 0x2cba0: 0x6c663820, 0x2cba1: 0x6c663a20, 0x2cba2: 0x6c663c20, 0x2cba3: 0x6c663e20, + 0x2cba4: 0x6c664020, 0x2cba5: 0x6c664220, 0x2cba6: 0x6c664420, 0x2cba7: 0x6c664620, + 0x2cba8: 0x6c8ce420, 0x2cba9: 0x6cb95020, 0x2cbaa: 0x6c8ce620, 0x2cbab: 0x6c8ce820, + 0x2cbac: 0x6c8cea20, 0x2cbad: 0x6c8cec20, 0x2cbae: 0x6c8cee20, 0x2cbaf: 0x6c8cf020, + 0x2cbb0: 0x6c8cf220, 0x2cbb1: 0x6c8cf420, 0x2cbb2: 0x6cb95220, 0x2cbb3: 0x6cb95420, + 0x2cbb4: 0x6cb95620, 0x2cbb5: 0x6cb95820, 0x2cbb6: 0x6c8cf620, 0x2cbb7: 0x6cea4020, + 0x2cbb8: 0x6cea4220, 0x2cbb9: 0x6cea4420, 0x2cbba: 0x6cea4620, 0x2cbbb: 0x6cea4820, + 0x2cbbc: 0x6cea4a20, 0x2cbbd: 0x6cea4c20, 0x2cbbe: 0x6cea4e20, 0x2cbbf: 0x6cea5020, + // Block 0xb2f, offset 0x2cbc0 + 0x2cbc0: 0x6d1a2620, 0x2cbc1: 0x6d1a2820, 0x2cbc2: 0x6d1a2a20, 0x2cbc3: 0x6d1a2c20, + 0x2cbc4: 0x6d1a2e20, 0x2cbc5: 0x6d489820, 0x2cbc6: 0x6d489a20, 0x2cbc7: 0x6d489c20, + 0x2cbc8: 0x6d489e20, 0x2cbc9: 0x6d48a020, 0x2cbca: 0x6d48a220, 0x2cbcb: 0x6d48a420, + 0x2cbcc: 0x6d48a620, 0x2cbcd: 0x6d48a820, 0x2cbce: 0x6d48aa20, 0x2cbcf: 0x6d48ac20, + 0x2cbd0: 0x6d76aa20, 0x2cbd1: 0x6d76ac20, 0x2cbd2: 0x6d76ae20, 0x2cbd3: 0x6d76b020, + 0x2cbd4: 0x6d76b220, 0x2cbd5: 0x6da03420, 0x2cbd6: 0x6de05820, 0x2cbd7: 0x6e0c7220, + 0x2cbd8: 0x6e0c7420, 0x2cbd9: 0x6e286020, 0x2cbda: 0x6e286220, 0x2cbdb: 0x6c00a820, + 0x2cbdc: 0x6c016020, 0x2cbdd: 0x6c033c20, 0x2cbde: 0x6c033e20, 0x2cbdf: 0x6c06a420, + 0x2cbe0: 0x6c06a620, 0x2cbe1: 0x6c06a820, 0x2cbe2: 0x6c06aa20, 0x2cbe3: 0x6c0d4020, + 0x2cbe4: 0x6c0d4220, 0x2cbe5: 0x6c0d4420, 0x2cbe6: 0x6c0d4620, 0x2cbe7: 0x6c0d4820, + 0x2cbe8: 0x6c0d4a20, 0x2cbe9: 0x6c183c20, 0x2cbea: 0x6c183e20, 0x2cbeb: 0x6c184020, + 0x2cbec: 0x6c184220, 0x2cbed: 0x6c184420, 0x2cbee: 0x6c184620, 0x2cbef: 0x6c184820, + 0x2cbf0: 0x6c184a20, 0x2cbf1: 0x6c184c20, 0x2cbf2: 0x6c184e20, 0x2cbf3: 0x6c185020, + 0x2cbf4: 0x6c185220, 0x2cbf5: 0x6c2b5220, 0x2cbf6: 0x6c2b5420, 0x2cbf7: 0x6c2b5620, + 0x2cbf8: 0x6c2b5820, 0x2cbf9: 0x6c2b5a20, 0x2cbfa: 0x6c2b5c20, 0x2cbfb: 0x6c2b5e20, + 0x2cbfc: 0x6c2b6020, 0x2cbfd: 0x6c2b6220, 0x2cbfe: 0x6c2b6420, 0x2cbff: 0x6c2b6620, + // Block 0xb30, offset 0x2cc00 + 0x2cc00: 0x6c455020, 0x2cc01: 0x6c455220, 0x2cc02: 0x6c455420, 0x2cc03: 0x6c455620, + 0x2cc04: 0x6c455820, 0x2cc05: 0x6c455a20, 0x2cc06: 0x6c2b8620, 0x2cc07: 0x6c455c20, + 0x2cc08: 0x6c455e20, 0x2cc09: 0x6c456020, 0x2cc0a: 0x6c456220, 0x2cc0b: 0x6c456420, + 0x2cc0c: 0x6c66ac20, 0x2cc0d: 0x6c66ae20, 0x2cc0e: 0x6c66b020, 0x2cc0f: 0x6c66b220, + 0x2cc10: 0x6c66b420, 0x2cc11: 0x6c66b620, 0x2cc12: 0x6c8d4420, 0x2cc13: 0x6c8d4620, + 0x2cc14: 0x6c8d4820, 0x2cc15: 0x6c8d4a20, 0x2cc16: 0x6c8d4c20, 0x2cc17: 0x6c9b7c20, + 0x2cc18: 0x6c8d4e20, 0x2cc19: 0x6c8d5020, 0x2cc1a: 0x6c8d5220, 0x2cc1b: 0x6cb9ac20, + 0x2cc1c: 0x6cb9ae20, 0x2cc1d: 0x6cb9b020, 0x2cc1e: 0x6cb9b220, 0x2cc1f: 0x6cea9220, + 0x2cc20: 0x6cea9420, 0x2cc21: 0x6cea9620, 0x2cc22: 0x6cea9820, 0x2cc23: 0x6cea9a20, + 0x2cc24: 0x6cea9c20, 0x2cc25: 0x6cea9e20, 0x2cc26: 0x6ceaa020, 0x2cc27: 0x6ceaa220, + 0x2cc28: 0x6d1a7820, 0x2cc29: 0x6d1a7a20, 0x2cc2a: 0x6d1a7c20, 0x2cc2b: 0x6d1a7e20, + 0x2cc2c: 0x6d1a8020, 0x2cc2d: 0x6d1a8220, 0x2cc2e: 0x6d48da20, 0x2cc2f: 0x6d48dc20, + 0x2cc30: 0x6d48de20, 0x2cc31: 0x6d48e020, 0x2cc32: 0x6d48e220, 0x2cc33: 0x6d76da20, + 0x2cc34: 0x6da05c20, 0x2cc35: 0x6da05e20, 0x2cc36: 0x6da06020, 0x2cc37: 0x6de06020, + 0x2cc38: 0x6de06620, 0x2cc39: 0x6c00aa20, 0x2cc3a: 0x6c016420, 0x2cc3b: 0x6c034620, + 0x2cc3c: 0x6c034820, 0x2cc3d: 0x6c034a20, 0x2cc3e: 0x6c034c20, 0x2cc3f: 0x6c034e20, + // Block 0xb31, offset 0x2cc40 + 0x2cc40: 0x6c035020, 0x2cc41: 0x6c035220, 0x2cc42: 0x6c035420, 0x2cc43: 0x6c06b420, + 0x2cc44: 0x6c06b620, 0x2cc45: 0x6c06b820, 0x2cc46: 0x6c06ba20, 0x2cc47: 0x6c06bc20, + 0x2cc48: 0x6c0d5e20, 0x2cc49: 0x6c187820, 0x2cc4a: 0x6c2b8820, 0x2cc4b: 0x6c2b8a20, + 0x2cc4c: 0x6c2b8c20, 0x2cc4d: 0x6c458220, 0x2cc4e: 0x6c66de20, 0x2cc4f: 0x6c8d6c20, + 0x2cc50: 0x6c8d6e20, 0x2cc51: 0x6cb9d620, 0x2cc52: 0x6cb9d820, 0x2cc53: 0x6c8d7e20, + 0x2cc54: 0x6d48f220, 0x2cc55: 0x6c00ac20, 0x2cc56: 0x6c035a20, 0x2cc57: 0x6c06c620, + 0x2cc58: 0x6c8d8220, 0x2cc59: 0x6c8d8420, 0x2cc5a: 0x6c00b020, 0x2cc5b: 0x6c06ca20, + 0x2cc5c: 0x6c06cc20, 0x2cc5d: 0x6c06ce20, 0x2cc5e: 0x6c06d020, 0x2cc5f: 0x6c0d6820, + 0x2cc60: 0x6c0d6a20, 0x2cc61: 0x6c0d6c20, 0x2cc62: 0x6c0d6e20, 0x2cc63: 0x6c189020, + 0x2cc64: 0x6c189220, 0x2cc65: 0x6c189420, 0x2cc66: 0x6c2b9e20, 0x2cc67: 0x6c45a020, + 0x2cc68: 0x6c45a220, 0x2cc69: 0x6c45a420, 0x2cc6a: 0x6c66fc20, 0x2cc6b: 0x6c66fe20, + 0x2cc6c: 0x6c8d8820, 0x2cc6d: 0x6c8d8a20, 0x2cc6e: 0x6c8d8c20, 0x2cc6f: 0x6cead820, + 0x2cc70: 0x6d1abc20, 0x2cc71: 0x6d1abe20, 0x2cc72: 0x6d1ac020, 0x2cc73: 0x6d48f620, + 0x2cc74: 0x6d76ea20, 0x2cc75: 0x6da07820, 0x2cc76: 0x6de06820, 0x2cc77: 0x6df8ba20, + 0x2cc78: 0x6c00b420, 0x2cc79: 0x6c036020, 0x2cc7a: 0x6c036220, 0x2cc7b: 0x6c18a620, + 0x2cc7c: 0x6c2ba820, 0x2cc7d: 0x6c45c020, 0x2cc7e: 0x6c8d9220, 0x2cc7f: 0x6c8d9420, + // Block 0xb32, offset 0x2cc80 + 0x2cc80: 0x6c8d9620, 0x2cc81: 0x6c00b620, 0x2cc82: 0x6c016820, 0x2cc83: 0x6c016a20, + 0x2cc84: 0x6c00e620, 0x2cc85: 0x6c036820, 0x2cc86: 0x6c036a20, 0x2cc87: 0x6c036c20, + 0x2cc88: 0x6c036e20, 0x2cc89: 0x6c06d220, 0x2cc8a: 0x6c06d420, 0x2cc8b: 0x6c0d8420, + 0x2cc8c: 0x6c06d620, 0x2cc8d: 0x6c0d8620, 0x2cc8e: 0x6c0d8820, 0x2cc8f: 0x6c0d8a20, + 0x2cc90: 0x6c0d8c20, 0x2cc91: 0x6c2bac20, 0x2cc92: 0x6c2bae20, 0x2cc93: 0x6c2bb020, + 0x2cc94: 0x6c2bb220, 0x2cc95: 0x6c2bb420, 0x2cc96: 0x6c2bb620, 0x2cc97: 0x6c45c820, + 0x2cc98: 0x6c45ca20, 0x2cc99: 0x6c8d9820, 0x2cc9a: 0x6cb9f220, 0x2cc9b: 0x6e0c8420, + 0x2cc9c: 0x6c00ba20, 0x2cc9d: 0x6c037620, 0x2cc9e: 0x6c037820, 0x2cc9f: 0x6c06e220, + 0x2cca0: 0x6c06e420, 0x2cca1: 0x6c06e620, 0x2cca2: 0x6c06e820, 0x2cca3: 0x6c18c020, + 0x2cca4: 0x6c18c220, 0x2cca5: 0x6c2bd620, 0x2cca6: 0x6c2bd820, 0x2cca7: 0x6c2bda20, + 0x2cca8: 0x6c8da820, 0x2cca9: 0x6c00bc20, 0x2ccaa: 0x6c017220, 0x2ccab: 0x6c017420, + 0x2ccac: 0x6c037c20, 0x2ccad: 0x6c06ec20, 0x2ccae: 0x6c06ee20, 0x2ccaf: 0x6c06f020, + 0x2ccb0: 0x6c0db820, 0x2ccb1: 0x6c0dba20, 0x2ccb2: 0x6c18d220, 0x2ccb3: 0x6c18d420, + 0x2ccb4: 0x6c18d620, 0x2ccb5: 0x6c18d820, 0x2ccb6: 0x6c2bf420, 0x2ccb7: 0x6c2bf620, + 0x2ccb8: 0x6c2bf820, 0x2ccb9: 0x6c2bfa20, 0x2ccba: 0x6c2bfc20, 0x2ccbb: 0x6c45e420, + 0x2ccbc: 0x6c45e620, 0x2ccbd: 0x6c45e820, 0x2ccbe: 0x6c8db620, 0x2ccbf: 0x6c673020, + // Block 0xb33, offset 0x2ccc0 + 0x2ccc0: 0x6ceaf820, 0x2ccc1: 0x6ceafa20, 0x2ccc2: 0x6c00be20, 0x2ccc3: 0x6c038620, + 0x2ccc4: 0x6c038820, 0x2ccc5: 0x6c038a20, 0x2ccc6: 0x6c038c20, 0x2ccc7: 0x6c06f420, + 0x2ccc8: 0x6c06f620, 0x2ccc9: 0x6c06f820, 0x2ccca: 0x6c0dce20, 0x2cccb: 0x6c0dd020, + 0x2cccc: 0x6c0dd220, 0x2cccd: 0x6c0dd420, 0x2ccce: 0x6c18e220, 0x2cccf: 0x6c18e420, + 0x2ccd0: 0x6c18e620, 0x2ccd1: 0x6c18e820, 0x2ccd2: 0x6c2c0420, 0x2ccd3: 0x6c2c0620, + 0x2ccd4: 0x6c2c0820, 0x2ccd5: 0x6c2c0a20, 0x2ccd6: 0x6c45f820, 0x2ccd7: 0x6c45fa20, + 0x2ccd8: 0x6c45fc20, 0x2ccd9: 0x6c45fe20, 0x2ccda: 0x6c460020, 0x2ccdb: 0x6c460220, + 0x2ccdc: 0x6c673820, 0x2ccdd: 0x6c673a20, 0x2ccde: 0x6c673c20, 0x2ccdf: 0x6c673e20, + 0x2cce0: 0x6c8db820, 0x2cce1: 0x6c8dba20, 0x2cce2: 0x6c8dbc20, 0x2cce3: 0x6c8dbe20, + 0x2cce4: 0x6cba0c20, 0x2cce5: 0x6cba0e20, 0x2cce6: 0x6cba1020, 0x2cce7: 0x6cba1220, + 0x2cce8: 0x6cba1420, 0x2cce9: 0x6c8dc020, 0x2ccea: 0x6ceb0420, 0x2cceb: 0x6ceb0620, + 0x2ccec: 0x6d1ae020, 0x2cced: 0x6d1ae220, 0x2ccee: 0x6d1ae420, 0x2ccef: 0x6ceb2020, + 0x2ccf0: 0x6d1ae620, 0x2ccf1: 0x6d491a20, 0x2ccf2: 0x6d491c20, 0x2ccf3: 0x6da08820, + 0x2ccf4: 0x6de07020, 0x2ccf5: 0x6e451620, 0x2ccf6: 0x6c00c020, 0x2ccf7: 0x6c039220, + 0x2ccf8: 0x6c039420, 0x2ccf9: 0x6c039620, 0x2ccfa: 0x6c070a20, 0x2ccfb: 0x6c070c20, + 0x2ccfc: 0x6c070e20, 0x2ccfd: 0x6c0df220, 0x2ccfe: 0x6c0df420, 0x2ccff: 0x6c190420, + // Block 0xb34, offset 0x2cd00 + 0x2cd00: 0x6c2c2820, 0x2cd01: 0x6c2c2a20, 0x2cd02: 0x6c2c2c20, 0x2cd03: 0x6c8de620, + 0x2cd04: 0x6c8de820, 0x2cd05: 0x6cba2e20, 0x2cd06: 0x6d1b1420, 0x2cd07: 0x6d493c20, + 0x2cd08: 0x6c00c420, 0x2cd09: 0x6c017e20, 0x2cd0a: 0x6c03a020, 0x2cd0b: 0x6c03a220, + 0x2cd0c: 0x6c03a420, 0x2cd0d: 0x6c03a620, 0x2cd0e: 0x6c03a820, 0x2cd0f: 0x6c071a20, + 0x2cd10: 0x6c071c20, 0x2cd11: 0x6c071e20, 0x2cd12: 0x6c0e0820, 0x2cd13: 0x6c190e20, + 0x2cd14: 0x6c2c3c20, 0x2cd15: 0x6c2c3e20, 0x2cd16: 0x6c2c4020, 0x2cd17: 0x6c2c4220, + 0x2cd18: 0x6c2c4420, 0x2cd19: 0x6c464020, 0x2cd1a: 0x6c464220, 0x2cd1b: 0x6c464420, + 0x2cd1c: 0x6c464620, 0x2cd1d: 0x6c464820, 0x2cd1e: 0x6c677c20, 0x2cd1f: 0x6c677e20, + 0x2cd20: 0x6ceb3220, 0x2cd21: 0x6d76fc20, 0x2cd22: 0x6dc2f620, 0x2cd23: 0x6c018020, + 0x2cd24: 0x6c073620, 0x2cd25: 0x6c073820, 0x2cd26: 0x6c073a20, 0x2cd27: 0x6c073c20, + 0x2cd28: 0x6c073e20, 0x2cd29: 0x6c074020, 0x2cd2a: 0x6c074220, 0x2cd2b: 0x6c074420, + 0x2cd2c: 0x6c074620, 0x2cd2d: 0x6c074820, 0x2cd2e: 0x6c074a20, 0x2cd2f: 0x6c074c20, + 0x2cd30: 0x6c074e20, 0x2cd31: 0x6c075020, 0x2cd32: 0x6c075220, 0x2cd33: 0x6c075420, + 0x2cd34: 0x6c075620, 0x2cd35: 0x6c075820, 0x2cd36: 0x6c075a20, 0x2cd37: 0x6c075c20, + 0x2cd38: 0x6c075e20, 0x2cd39: 0x6c076020, 0x2cd3a: 0x6c076220, 0x2cd3b: 0x6c076420, + 0x2cd3c: 0x6c076620, 0x2cd3d: 0x6c076820, 0x2cd3e: 0x6c076a20, 0x2cd3f: 0x6c0e2220, + // Block 0xb35, offset 0x2cd40 + 0x2cd40: 0x6c0e2420, 0x2cd41: 0x6c0e2620, 0x2cd42: 0x6c0e2820, 0x2cd43: 0x6c0e2a20, + 0x2cd44: 0x6c0e2c20, 0x2cd45: 0x6c0e2e20, 0x2cd46: 0x6c0e3020, 0x2cd47: 0x6c0e3220, + 0x2cd48: 0x6c0e3420, 0x2cd49: 0x6c0e3620, 0x2cd4a: 0x6c0e3820, 0x2cd4b: 0x6c0e3a20, + 0x2cd4c: 0x6c0e3c20, 0x2cd4d: 0x6c0e3e20, 0x2cd4e: 0x6c0e4020, 0x2cd4f: 0x6c0e4220, + 0x2cd50: 0x6c0e4420, 0x2cd51: 0x6c0e4620, 0x2cd52: 0x6c0e4820, 0x2cd53: 0x6c0e4a20, + 0x2cd54: 0x6c0e4c20, 0x2cd55: 0x6c0e4e20, 0x2cd56: 0x6c0e5020, 0x2cd57: 0x6c0e5220, + 0x2cd58: 0x6c193e20, 0x2cd59: 0x6c194020, 0x2cd5a: 0x6c194220, 0x2cd5b: 0x6c194420, + 0x2cd5c: 0x6c194620, 0x2cd5d: 0x6c194820, 0x2cd5e: 0x6c194a20, 0x2cd5f: 0x6c194c20, + 0x2cd60: 0x6c194e20, 0x2cd61: 0x6c195020, 0x2cd62: 0x6c195220, 0x2cd63: 0x6c195420, + 0x2cd64: 0x6c195620, 0x2cd65: 0x6c195820, 0x2cd66: 0x6c195a20, 0x2cd67: 0x6c195c20, + 0x2cd68: 0x6c195e20, 0x2cd69: 0x6c196020, 0x2cd6a: 0x6c196220, 0x2cd6b: 0x6c196420, + 0x2cd6c: 0x6c196620, 0x2cd6d: 0x6c196820, 0x2cd6e: 0x6c196a20, 0x2cd6f: 0x6c196c20, + 0x2cd70: 0x6c196e20, 0x2cd71: 0x6c197020, 0x2cd72: 0x6c197220, 0x2cd73: 0x6c197420, + 0x2cd74: 0x6c197620, 0x2cd75: 0x6c197820, 0x2cd76: 0x6c197a20, 0x2cd77: 0x6c197c20, + 0x2cd78: 0x6c197e20, 0x2cd79: 0x6c198020, 0x2cd7a: 0x6c198220, 0x2cd7b: 0x6c198420, + 0x2cd7c: 0x6c198620, 0x2cd7d: 0x6c198820, 0x2cd7e: 0x6c198a20, 0x2cd7f: 0x6c198c20, + // Block 0xb36, offset 0x2cd80 + 0x2cd80: 0x6c198e20, 0x2cd81: 0x6c199020, 0x2cd82: 0x6c199220, 0x2cd83: 0x6c199420, + 0x2cd84: 0x6c199620, 0x2cd85: 0x6c199820, 0x2cd86: 0x6c199a20, 0x2cd87: 0x6c199c20, + 0x2cd88: 0x6c199e20, 0x2cd89: 0x6c19a020, 0x2cd8a: 0x6c19a220, 0x2cd8b: 0x6c19a420, + 0x2cd8c: 0x6c19a620, 0x2cd8d: 0x6c19a820, 0x2cd8e: 0x6c19aa20, 0x2cd8f: 0x6c19ac20, + 0x2cd90: 0x6c19ae20, 0x2cd91: 0x6c19b020, 0x2cd92: 0x6c19b220, 0x2cd93: 0x6c19b420, + 0x2cd94: 0x6c19b620, 0x2cd95: 0x6c19b820, 0x2cd96: 0x6c19ba20, 0x2cd97: 0x6c19bc20, + 0x2cd98: 0x6c19be20, 0x2cd99: 0x6c19c020, 0x2cd9a: 0x6c19c220, 0x2cd9b: 0x6c19c420, + 0x2cd9c: 0x6c19c620, 0x2cd9d: 0x6c2c6820, 0x2cd9e: 0x6c2c6a20, 0x2cd9f: 0x6c2c6c20, + 0x2cda0: 0x6c2c6e20, 0x2cda1: 0x6c2c7020, 0x2cda2: 0x6c2c7220, 0x2cda3: 0x6c2c7420, + 0x2cda4: 0x6c2c7620, 0x2cda5: 0x6c2c7820, 0x2cda6: 0x6c2c7a20, 0x2cda7: 0x6c2c7c20, + 0x2cda8: 0x6c2c7e20, 0x2cda9: 0x6c2c8020, 0x2cdaa: 0x6c2c8220, 0x2cdab: 0x6c2c8420, + 0x2cdac: 0x6c2c8620, 0x2cdad: 0x6c2c8820, 0x2cdae: 0x6c2c8a20, 0x2cdaf: 0x6c2c8c20, + 0x2cdb0: 0x6c466420, 0x2cdb1: 0x6c2c8e20, 0x2cdb2: 0x6c466620, 0x2cdb3: 0x6c2c9020, + 0x2cdb4: 0x6c2c9220, 0x2cdb5: 0x6c2c9420, 0x2cdb6: 0x6c2c9620, 0x2cdb7: 0x6c2c9820, + 0x2cdb8: 0x6c2c9a20, 0x2cdb9: 0x6c2c9c20, 0x2cdba: 0x6c2c9e20, 0x2cdbb: 0x6c2ca020, + 0x2cdbc: 0x6c2ca220, 0x2cdbd: 0x6c2ca420, 0x2cdbe: 0x6c2ca620, 0x2cdbf: 0x6c2ca820, + // Block 0xb37, offset 0x2cdc0 + 0x2cdc0: 0x6c2caa20, 0x2cdc1: 0x6c2cac20, 0x2cdc2: 0x6c2cae20, 0x2cdc3: 0x6c2cb020, + 0x2cdc4: 0x6c2cb220, 0x2cdc5: 0x6c2cb420, 0x2cdc6: 0x6c2cb620, 0x2cdc7: 0x6c2cb820, + 0x2cdc8: 0x6c2cba20, 0x2cdc9: 0x6c2cbc20, 0x2cdca: 0x6c2cbe20, 0x2cdcb: 0x6c2cc020, + 0x2cdcc: 0x6c2cc220, 0x2cdcd: 0x6c2cc420, 0x2cdce: 0x6c2cc620, 0x2cdcf: 0x6c2cc820, + 0x2cdd0: 0x6c2cca20, 0x2cdd1: 0x6c2ccc20, 0x2cdd2: 0x6c2cce20, 0x2cdd3: 0x6c2cd020, + 0x2cdd4: 0x6c2cd220, 0x2cdd5: 0x6c2cd420, 0x2cdd6: 0x6c2cd620, 0x2cdd7: 0x6c2cd820, + 0x2cdd8: 0x6c2cda20, 0x2cdd9: 0x6c2cdc20, 0x2cdda: 0x6c2cde20, 0x2cddb: 0x6c2ce020, + 0x2cddc: 0x6c2ce220, 0x2cddd: 0x6c2ce420, 0x2cdde: 0x6c468620, 0x2cddf: 0x6c468820, + 0x2cde0: 0x6c468a20, 0x2cde1: 0x6c468c20, 0x2cde2: 0x6c468e20, 0x2cde3: 0x6c469020, + 0x2cde4: 0x6c469220, 0x2cde5: 0x6c469420, 0x2cde6: 0x6c469620, 0x2cde7: 0x6c469820, + 0x2cde8: 0x6c469a20, 0x2cde9: 0x6c469c20, 0x2cdea: 0x6c469e20, 0x2cdeb: 0x6c46a020, + 0x2cdec: 0x6c46a220, 0x2cded: 0x6c46a420, 0x2cdee: 0x6c46a620, 0x2cdef: 0x6c46a820, + 0x2cdf0: 0x6c46aa20, 0x2cdf1: 0x6c46ac20, 0x2cdf2: 0x6c46ae20, 0x2cdf3: 0x6c46b020, + 0x2cdf4: 0x6c46b220, 0x2cdf5: 0x6c46b420, 0x2cdf6: 0x6c46b620, 0x2cdf7: 0x6c46b820, + 0x2cdf8: 0x6c46ba20, 0x2cdf9: 0x6c46bc20, 0x2cdfa: 0x6c46be20, 0x2cdfb: 0x6c46c020, + 0x2cdfc: 0x6c46c220, 0x2cdfd: 0x6c46c420, 0x2cdfe: 0x6c46c620, 0x2cdff: 0x6c46c820, + // Block 0xb38, offset 0x2ce00 + 0x2ce00: 0x6c46ca20, 0x2ce01: 0x6c46cc20, 0x2ce02: 0x6c46ce20, 0x2ce03: 0x6c46d020, + 0x2ce04: 0x6c46d220, 0x2ce05: 0x6c46d420, 0x2ce06: 0x6c46d620, 0x2ce07: 0x6c46d820, + 0x2ce08: 0x6c46da20, 0x2ce09: 0x6c46dc20, 0x2ce0a: 0x6c46de20, 0x2ce0b: 0x6c46e020, + 0x2ce0c: 0x6c46e220, 0x2ce0d: 0x6c46e420, 0x2ce0e: 0x6c46e620, 0x2ce0f: 0x6c46e820, + 0x2ce10: 0x6c46ea20, 0x2ce11: 0x6c46ec20, 0x2ce12: 0x6c46ee20, 0x2ce13: 0x6c46f020, + 0x2ce14: 0x6c46f220, 0x2ce15: 0x6c46f420, 0x2ce16: 0x6c46f620, 0x2ce17: 0x6c46f820, + 0x2ce18: 0x6c46fa20, 0x2ce19: 0x6c46fc20, 0x2ce1a: 0x6c46fe20, 0x2ce1b: 0x6c470020, + 0x2ce1c: 0x6c470220, 0x2ce1d: 0x6c470420, 0x2ce1e: 0x6c470620, 0x2ce1f: 0x6c470820, + 0x2ce20: 0x6c67ba20, 0x2ce21: 0x6c67bc20, 0x2ce22: 0x6c67be20, 0x2ce23: 0x6c67c020, + 0x2ce24: 0x6c67c220, 0x2ce25: 0x6c67c420, 0x2ce26: 0x6c67c620, 0x2ce27: 0x6c67c820, + 0x2ce28: 0x6c67ca20, 0x2ce29: 0x6c67cc20, 0x2ce2a: 0x6c67ce20, 0x2ce2b: 0x6c67d020, + 0x2ce2c: 0x6c67d220, 0x2ce2d: 0x6c67d420, 0x2ce2e: 0x6c67d620, 0x2ce2f: 0x6c67d820, + 0x2ce30: 0x6c67da20, 0x2ce31: 0x6c67dc20, 0x2ce32: 0x6c67de20, 0x2ce33: 0x6c67e020, + 0x2ce34: 0x6c67e220, 0x2ce35: 0x6c67e420, 0x2ce36: 0x6c67e620, 0x2ce37: 0x6c67e820, + 0x2ce38: 0x6c67ea20, 0x2ce39: 0x6c67ec20, 0x2ce3a: 0x6c67ee20, 0x2ce3b: 0x6c67f020, + 0x2ce3c: 0x6c67f220, 0x2ce3d: 0x6c67f420, 0x2ce3e: 0x6c67f620, 0x2ce3f: 0x6c67f820, + // Block 0xb39, offset 0x2ce40 + 0x2ce40: 0x6c67fa20, 0x2ce41: 0x6c67fc20, 0x2ce42: 0x6c67fe20, 0x2ce43: 0x6c680020, + 0x2ce44: 0x6c680220, 0x2ce45: 0x6c680420, 0x2ce46: 0x6c680620, 0x2ce47: 0x6c680820, + 0x2ce48: 0x6c680a20, 0x2ce49: 0x6c680c20, 0x2ce4a: 0x6c680e20, 0x2ce4b: 0x6c681020, + 0x2ce4c: 0x6c8e1020, 0x2ce4d: 0x6c681220, 0x2ce4e: 0x6c681420, 0x2ce4f: 0x6c681620, + 0x2ce50: 0x6c681820, 0x2ce51: 0x6c681a20, 0x2ce52: 0x6c681c20, 0x2ce53: 0x6c681e20, + 0x2ce54: 0x6c682020, 0x2ce55: 0x6c682220, 0x2ce56: 0x6c682420, 0x2ce57: 0x6c682620, + 0x2ce58: 0x6c682820, 0x2ce59: 0x6c682a20, 0x2ce5a: 0x6c682c20, 0x2ce5b: 0x6c682e20, + 0x2ce5c: 0x6c683020, 0x2ce5d: 0x6c683220, 0x2ce5e: 0x6c683420, 0x2ce5f: 0x6c683620, + 0x2ce60: 0x6c683820, 0x2ce61: 0x6c683a20, 0x2ce62: 0x6c683c20, 0x2ce63: 0x6c683e20, + 0x2ce64: 0x6c684020, 0x2ce65: 0x6c684220, 0x2ce66: 0x6c684420, 0x2ce67: 0x6c684620, + 0x2ce68: 0x6c8e4020, 0x2ce69: 0x6c8e4220, 0x2ce6a: 0x6c8e4420, 0x2ce6b: 0x6c8e4620, + 0x2ce6c: 0x6c8e4820, 0x2ce6d: 0x6c8e4a20, 0x2ce6e: 0x6c8e4c20, 0x2ce6f: 0x6c8e4e20, + 0x2ce70: 0x6c8e5020, 0x2ce71: 0x6c8e5220, 0x2ce72: 0x6c8e5420, 0x2ce73: 0x6c8e5620, + 0x2ce74: 0x6c8e5820, 0x2ce75: 0x6c8e5a20, 0x2ce76: 0x6c8e5c20, 0x2ce77: 0x6c8e5e20, + 0x2ce78: 0x6c8e6020, 0x2ce79: 0x6c8e6220, 0x2ce7a: 0x6c8e6420, 0x2ce7b: 0x6c8e6620, + 0x2ce7c: 0x6c8e6820, 0x2ce7d: 0x6c8e6a20, 0x2ce7e: 0x6c8e6c20, 0x2ce7f: 0x6c8e6e20, + // Block 0xb3a, offset 0x2ce80 + 0x2ce80: 0x6c8e7020, 0x2ce81: 0x6c8e7220, 0x2ce82: 0x6c8e7420, 0x2ce83: 0x6c8e7620, + 0x2ce84: 0x6c8e7820, 0x2ce85: 0x6c8e7a20, 0x2ce86: 0x6c8e7c20, 0x2ce87: 0x6c8e7e20, + 0x2ce88: 0x6c8e8020, 0x2ce89: 0x6c8e8220, 0x2ce8a: 0x6c8e8420, 0x2ce8b: 0x6c8e8620, + 0x2ce8c: 0x6c8e8820, 0x2ce8d: 0x6c8e8a20, 0x2ce8e: 0x6c8e8c20, 0x2ce8f: 0x6c8e8e20, + 0x2ce90: 0x6c8e9020, 0x2ce91: 0x6c8e9220, 0x2ce92: 0x6c8e9420, 0x2ce93: 0x6c8e9620, + 0x2ce94: 0x6c8e9820, 0x2ce95: 0x6c8e9a20, 0x2ce96: 0x6c8e9c20, 0x2ce97: 0x6c8e9e20, + 0x2ce98: 0x6c8ea020, 0x2ce99: 0x6cba9420, 0x2ce9a: 0x6c8ea220, 0x2ce9b: 0x6c8ea420, + 0x2ce9c: 0x6c8ea620, 0x2ce9d: 0x6c8ea820, 0x2ce9e: 0x6c8eaa20, 0x2ce9f: 0x6c9aaa20, + 0x2cea0: 0x6c8eac20, 0x2cea1: 0x6c8eae20, 0x2cea2: 0x6c8eb020, 0x2cea3: 0x6c8eb220, + 0x2cea4: 0x6c8eb420, 0x2cea5: 0x6c8eb620, 0x2cea6: 0x6c8eb820, 0x2cea7: 0x6c8eba20, + 0x2cea8: 0x6c8ebc20, 0x2cea9: 0x6c8ebe20, 0x2ceaa: 0x6c8ec020, 0x2ceab: 0x6c901820, + 0x2ceac: 0x6c8ec220, 0x2cead: 0x6c8ec420, 0x2ceae: 0x6c8ec620, 0x2ceaf: 0x6c8ec820, + 0x2ceb0: 0x6c8eca20, 0x2ceb1: 0x6c8ecc20, 0x2ceb2: 0x6c8ece20, 0x2ceb3: 0x6c8ed020, + 0x2ceb4: 0x6c8ed220, 0x2ceb5: 0x6c8ed420, 0x2ceb6: 0x6c8ed620, 0x2ceb7: 0x6c8ed820, + 0x2ceb8: 0x6c8eda20, 0x2ceb9: 0x6c8edc20, 0x2ceba: 0x6cba9620, 0x2cebb: 0x6cba9820, + 0x2cebc: 0x6cba9a20, 0x2cebd: 0x6cba9c20, 0x2cebe: 0x6cba9e20, 0x2cebf: 0x6cbaa020, + // Block 0xb3b, offset 0x2cec0 + 0x2cec0: 0x6cbaa220, 0x2cec1: 0x6cbaa420, 0x2cec2: 0x6cbaa620, 0x2cec3: 0x6cbaa820, + 0x2cec4: 0x6cbaaa20, 0x2cec5: 0x6cbaac20, 0x2cec6: 0x6cbaae20, 0x2cec7: 0x6cbab020, + 0x2cec8: 0x6cbab220, 0x2cec9: 0x6cbab420, 0x2ceca: 0x6cbab620, 0x2cecb: 0x6cbab820, + 0x2cecc: 0x6cbaba20, 0x2cecd: 0x6ceb6e20, 0x2cece: 0x6cbabc20, 0x2cecf: 0x6cbabe20, + 0x2ced0: 0x6cbac020, 0x2ced1: 0x6cbac220, 0x2ced2: 0x6cbac420, 0x2ced3: 0x6cbac620, + 0x2ced4: 0x6cbac820, 0x2ced5: 0x6cbaca20, 0x2ced6: 0x6cbacc20, 0x2ced7: 0x6cbace20, + 0x2ced8: 0x6cbad020, 0x2ced9: 0x6cbad220, 0x2ceda: 0x6cbad420, 0x2cedb: 0x6cbad620, + 0x2cedc: 0x6cbad820, 0x2cedd: 0x6cbada20, 0x2cede: 0x6cbadc20, 0x2cedf: 0x6cbade20, + 0x2cee0: 0x6cbae020, 0x2cee1: 0x6cbae220, 0x2cee2: 0x6cbae420, 0x2cee3: 0x6cbae620, + 0x2cee4: 0x6cbae820, 0x2cee5: 0x6cbaea20, 0x2cee6: 0x6cbaec20, 0x2cee7: 0x6cbaee20, + 0x2cee8: 0x6cbaf020, 0x2cee9: 0x6cbaf220, 0x2ceea: 0x6cbaf420, 0x2ceeb: 0x6cbaf620, + 0x2ceec: 0x6cbaf820, 0x2ceed: 0x6cbafa20, 0x2ceee: 0x6cbafc20, 0x2ceef: 0x6cbafe20, + 0x2cef0: 0x6cbb0020, 0x2cef1: 0x6cbb0220, 0x2cef2: 0x6cbb0420, 0x2cef3: 0x6cbb0620, + 0x2cef4: 0x6cbb0820, 0x2cef5: 0x6cbb0a20, 0x2cef6: 0x6c901a20, 0x2cef7: 0x6cbb0c20, + 0x2cef8: 0x6cbb0e20, 0x2cef9: 0x6cbb1020, 0x2cefa: 0x6cbb1220, 0x2cefb: 0x6cbb1420, + 0x2cefc: 0x6cbb1620, 0x2cefd: 0x6cbb1820, 0x2cefe: 0x6cbb1a20, 0x2ceff: 0x6ceb7020, + // Block 0xb3c, offset 0x2cf00 + 0x2cf00: 0x6ceb7220, 0x2cf01: 0x6ceb7420, 0x2cf02: 0x6ceb7620, 0x2cf03: 0x6ceb7820, + 0x2cf04: 0x6ceb7a20, 0x2cf05: 0x6ceb7c20, 0x2cf06: 0x6ceb7e20, 0x2cf07: 0x6ceb8020, + 0x2cf08: 0x6ceb8220, 0x2cf09: 0x6ceb8420, 0x2cf0a: 0x6ceb8620, 0x2cf0b: 0x6ceb8820, + 0x2cf0c: 0x6ceb8a20, 0x2cf0d: 0x6ceb8c20, 0x2cf0e: 0x6ceb8e20, 0x2cf0f: 0x6ceb9020, + 0x2cf10: 0x6ceb9220, 0x2cf11: 0x6ceb9420, 0x2cf12: 0x6ceb9620, 0x2cf13: 0x6ceb9820, + 0x2cf14: 0x6ceb9a20, 0x2cf15: 0x6ceb9c20, 0x2cf16: 0x6ceb9e20, 0x2cf17: 0x6ceba020, + 0x2cf18: 0x6ceba220, 0x2cf19: 0x6ceba420, 0x2cf1a: 0x6ceba620, 0x2cf1b: 0x6ceba820, + 0x2cf1c: 0x6cebaa20, 0x2cf1d: 0x6cebac20, 0x2cf1e: 0x6cbc3e20, 0x2cf1f: 0x6cebae20, + 0x2cf20: 0x6cebb020, 0x2cf21: 0x6cebb220, 0x2cf22: 0x6cebb420, 0x2cf23: 0x6cebb620, + 0x2cf24: 0x6cebb820, 0x2cf25: 0x6cebba20, 0x2cf26: 0x6cebbc20, 0x2cf27: 0x6cebbe20, + 0x2cf28: 0x6cebc020, 0x2cf29: 0x6cebc220, 0x2cf2a: 0x6cebc420, 0x2cf2b: 0x6cebc620, + 0x2cf2c: 0x6cebc820, 0x2cf2d: 0x6cebca20, 0x2cf2e: 0x6cebcc20, 0x2cf2f: 0x6cebce20, + 0x2cf30: 0x6cebd020, 0x2cf31: 0x6cebd220, 0x2cf32: 0x6cebd420, 0x2cf33: 0x6cebd620, + 0x2cf34: 0x6cebd820, 0x2cf35: 0x6cebda20, 0x2cf36: 0x6d1b5220, 0x2cf37: 0x6d1b5420, + 0x2cf38: 0x6d1b5620, 0x2cf39: 0x6d1b5820, 0x2cf3a: 0x6d1b5a20, 0x2cf3b: 0x6d1b5c20, + 0x2cf3c: 0x6d1b5e20, 0x2cf3d: 0x6d1b6020, 0x2cf3e: 0x6d1b6220, 0x2cf3f: 0x6d1b6420, + // Block 0xb3d, offset 0x2cf40 + 0x2cf40: 0x6d1b6620, 0x2cf41: 0x6d1b6820, 0x2cf42: 0x6d1b6a20, 0x2cf43: 0x6d1b6c20, + 0x2cf44: 0x6d1b6e20, 0x2cf45: 0x6d1b7020, 0x2cf46: 0x6d1b7220, 0x2cf47: 0x6d1b7420, + 0x2cf48: 0x6d1b7620, 0x2cf49: 0x6d1b7820, 0x2cf4a: 0x6d1b7a20, 0x2cf4b: 0x6d1b7c20, + 0x2cf4c: 0x6d1b7e20, 0x2cf4d: 0x6d1b8020, 0x2cf4e: 0x6d1b8220, 0x2cf4f: 0x6d1b8420, + 0x2cf50: 0x6d1b8620, 0x2cf51: 0x6d1b8820, 0x2cf52: 0x6d1b8a20, 0x2cf53: 0x6d1b8c20, + 0x2cf54: 0x6d1b8e20, 0x2cf55: 0x6d1b9020, 0x2cf56: 0x6d1b9220, 0x2cf57: 0x6d1b9420, + 0x2cf58: 0x6d1b9620, 0x2cf59: 0x6d1b9820, 0x2cf5a: 0x6d1b9a20, 0x2cf5b: 0x6d1b9c20, + 0x2cf5c: 0x6d1b9e20, 0x2cf5d: 0x6d1ba020, 0x2cf5e: 0x6d1ba220, 0x2cf5f: 0x6d1cec20, + 0x2cf60: 0x6d496220, 0x2cf61: 0x6d1ba420, 0x2cf62: 0x6d1ba620, 0x2cf63: 0x6d1ba820, + 0x2cf64: 0x6d1baa20, 0x2cf65: 0x6d1bac20, 0x2cf66: 0x6d1bae20, 0x2cf67: 0x6d1bb020, + 0x2cf68: 0x6d1cee20, 0x2cf69: 0x6d496420, 0x2cf6a: 0x6d496620, 0x2cf6b: 0x6d496820, + 0x2cf6c: 0x6d496a20, 0x2cf6d: 0x6d496c20, 0x2cf6e: 0x6d496e20, 0x2cf6f: 0x6d497020, + 0x2cf70: 0x6d497220, 0x2cf71: 0x6d497420, 0x2cf72: 0x6d497620, 0x2cf73: 0x6d497820, + 0x2cf74: 0x6d497a20, 0x2cf75: 0x6d497c20, 0x2cf76: 0x6d497e20, 0x2cf77: 0x6d498020, + 0x2cf78: 0x6d498220, 0x2cf79: 0x6d498420, 0x2cf7a: 0x6d498620, 0x2cf7b: 0x6d498820, + 0x2cf7c: 0x6d498a20, 0x2cf7d: 0x6d498c20, 0x2cf7e: 0x6d498e20, 0x2cf7f: 0x6d499020, + // Block 0xb3e, offset 0x2cf80 + 0x2cf80: 0x6d499220, 0x2cf81: 0x6d499420, 0x2cf82: 0x6d499620, 0x2cf83: 0x6d499820, + 0x2cf84: 0x6d499a20, 0x2cf85: 0x6cbb1c20, 0x2cf86: 0x6d499c20, 0x2cf87: 0x6d499e20, + 0x2cf88: 0x6d49a020, 0x2cf89: 0x6d49a220, 0x2cf8a: 0x6d49a420, 0x2cf8b: 0x6d49a620, + 0x2cf8c: 0x6d49a820, 0x2cf8d: 0x6d49aa20, 0x2cf8e: 0x6d49ac20, 0x2cf8f: 0x6d49ae20, + 0x2cf90: 0x6d49b020, 0x2cf91: 0x6d1bb220, 0x2cf92: 0x6d49b220, 0x2cf93: 0x6d494c20, + 0x2cf94: 0x6d49b420, 0x2cf95: 0x6d590220, 0x2cf96: 0x6d49b620, 0x2cf97: 0x6d49b820, + 0x2cf98: 0x6d49ba20, 0x2cf99: 0x6d49bc20, 0x2cf9a: 0x6d49be20, 0x2cf9b: 0x6d49c020, + 0x2cf9c: 0x6d49c220, 0x2cf9d: 0x6d49c420, 0x2cf9e: 0x6d772220, 0x2cf9f: 0x6d772420, + 0x2cfa0: 0x6d772620, 0x2cfa1: 0x6d772820, 0x2cfa2: 0x6d772a20, 0x2cfa3: 0x6d772c20, + 0x2cfa4: 0x6d772e20, 0x2cfa5: 0x6d773020, 0x2cfa6: 0x6d773220, 0x2cfa7: 0x6d773420, + 0x2cfa8: 0x6d773620, 0x2cfa9: 0x6d773820, 0x2cfaa: 0x6d773a20, 0x2cfab: 0x6d773c20, + 0x2cfac: 0x6d773e20, 0x2cfad: 0x6d774020, 0x2cfae: 0x6d774220, 0x2cfaf: 0x6d774420, + 0x2cfb0: 0x6d774620, 0x2cfb1: 0x6d774820, 0x2cfb2: 0x6d774a20, 0x2cfb3: 0x6d774c20, + 0x2cfb4: 0x6d49c620, 0x2cfb5: 0x6d774e20, 0x2cfb6: 0x6d775020, 0x2cfb7: 0x6d775220, + 0x2cfb8: 0x6d775420, 0x2cfb9: 0x6d775620, 0x2cfba: 0x6d775820, 0x2cfbb: 0x6d775a20, + 0x2cfbc: 0x6d775c20, 0x2cfbd: 0x6da0a220, 0x2cfbe: 0x6da0a420, 0x2cfbf: 0x6da0a620, + // Block 0xb3f, offset 0x2cfc0 + 0x2cfc0: 0x6da0a820, 0x2cfc1: 0x6da0aa20, 0x2cfc2: 0x6da0ac20, 0x2cfc3: 0x6da0ae20, + 0x2cfc4: 0x6da0b020, 0x2cfc5: 0x6da0b220, 0x2cfc6: 0x6da0b420, 0x2cfc7: 0x6da0b620, + 0x2cfc8: 0x6da0b820, 0x2cfc9: 0x6da0ba20, 0x2cfca: 0x6da0bc20, 0x2cfcb: 0x6da0be20, + 0x2cfcc: 0x6da0c020, 0x2cfcd: 0x6da0c220, 0x2cfce: 0x6da0c420, 0x2cfcf: 0x6da0c620, + 0x2cfd0: 0x6da0c820, 0x2cfd1: 0x6da0ca20, 0x2cfd2: 0x6da0cc20, 0x2cfd3: 0x6da0ce20, + 0x2cfd4: 0x6dc30820, 0x2cfd5: 0x6dc30a20, 0x2cfd6: 0x6dc30c20, 0x2cfd7: 0x6dc30e20, + 0x2cfd8: 0x6dc31020, 0x2cfd9: 0x6dc31220, 0x2cfda: 0x6dc31420, 0x2cfdb: 0x6dc31620, + 0x2cfdc: 0x6dc31820, 0x2cfdd: 0x6dc31a20, 0x2cfde: 0x6dc31c20, 0x2cfdf: 0x6dc31e20, + 0x2cfe0: 0x6dc32020, 0x2cfe1: 0x6dc32220, 0x2cfe2: 0x6dc32420, 0x2cfe3: 0x6dc32620, + 0x2cfe4: 0x6dc32820, 0x2cfe5: 0x6de08420, 0x2cfe6: 0x6de08620, 0x2cfe7: 0x6de08820, + 0x2cfe8: 0x6de08a20, 0x2cfe9: 0x6de08c20, 0x2cfea: 0x6de08e20, 0x2cfeb: 0x6de09020, + 0x2cfec: 0x6de09220, 0x2cfed: 0x6de09420, 0x2cfee: 0x6dc3dc20, 0x2cfef: 0x6de09620, + 0x2cff0: 0x6de09820, 0x2cff1: 0x6df8d020, 0x2cff2: 0x6df8d220, 0x2cff3: 0x6df8d420, + 0x2cff4: 0x6df8d620, 0x2cff5: 0x6df8d820, 0x2cff6: 0x6df8da20, 0x2cff7: 0x6df8dc20, + 0x2cff8: 0x6df8de20, 0x2cff9: 0x6df8e020, 0x2cffa: 0x6e0c9020, 0x2cffb: 0x6e0c9820, + 0x2cffc: 0x6df92820, 0x2cffd: 0x6e0c9a20, 0x2cffe: 0x6e0c9c20, 0x2cfff: 0x6e0c9e20, + // Block 0xb40, offset 0x2d000 + 0x2d000: 0x6e0ca020, 0x2d001: 0x6e0ca220, 0x2d002: 0x6e0ca420, 0x2d003: 0x6e0ca620, + 0x2d004: 0x6e0ca820, 0x2d005: 0x6e1c3020, 0x2d006: 0x6e1c3220, 0x2d007: 0x6e1c3420, + 0x2d008: 0x6e1c3620, 0x2d009: 0x6e1c3820, 0x2d00a: 0x6e1c3a20, 0x2d00b: 0x6e1c3c20, + 0x2d00c: 0x6e287620, 0x2d00d: 0x6e0caa20, 0x2d00e: 0x6e1c3e20, 0x2d00f: 0x6e287820, + 0x2d010: 0x6e287a20, 0x2d011: 0x6e319e20, 0x2d012: 0x6e31a020, 0x2d013: 0x6e31a220, + 0x2d014: 0x6e384820, 0x2d015: 0x6e384a20, 0x2d016: 0x6e428420, 0x2d017: 0x6c018220, + 0x2d018: 0x6c078a20, 0x2d019: 0x6c078c20, 0x2d01a: 0x6c078e20, 0x2d01b: 0x6c079020, + 0x2d01c: 0x6c079220, 0x2d01d: 0x6c0e9820, 0x2d01e: 0x6c0e9a20, 0x2d01f: 0x6c0e9c20, + 0x2d020: 0x6c0e9e20, 0x2d021: 0x6c0ea020, 0x2d022: 0x6c0ea220, 0x2d023: 0x6c0ea420, + 0x2d024: 0x6c1a4a20, 0x2d025: 0x6c1a4c20, 0x2d026: 0x6c1a4e20, 0x2d027: 0x6c1a5020, + 0x2d028: 0x6c1a5220, 0x2d029: 0x6c1a5420, 0x2d02a: 0x6c1a5620, 0x2d02b: 0x6c1a5820, + 0x2d02c: 0x6c1a5a20, 0x2d02d: 0x6c1a5c20, 0x2d02e: 0x6c1a5e20, 0x2d02f: 0x6c1a6020, + 0x2d030: 0x6c1a6220, 0x2d031: 0x6c1a6420, 0x2d032: 0x6c1a6620, 0x2d033: 0x6c1a6820, + 0x2d034: 0x6c1a6a20, 0x2d035: 0x6c1a6c20, 0x2d036: 0x6c2d8220, 0x2d037: 0x6c2d8420, + 0x2d038: 0x6c2d8620, 0x2d039: 0x6c2d8820, 0x2d03a: 0x6c2d8a20, 0x2d03b: 0x6c2d8c20, + 0x2d03c: 0x6c2d8e20, 0x2d03d: 0x6c2d9020, 0x2d03e: 0x6c2d9220, 0x2d03f: 0x6c47de20, + // Block 0xb41, offset 0x2d040 + 0x2d040: 0x6c47e020, 0x2d041: 0x6c695020, 0x2d042: 0x6c695220, 0x2d043: 0x6c695420, + 0x2d044: 0x6c695620, 0x2d045: 0x6c695820, 0x2d046: 0x6c695a20, 0x2d047: 0x6c901c20, + 0x2d048: 0x6c901e20, 0x2d049: 0x6c902020, 0x2d04a: 0x6c902220, 0x2d04b: 0x6c902420, + 0x2d04c: 0x6cbc4020, 0x2d04d: 0x6cbc4220, 0x2d04e: 0x6cbc4420, 0x2d04f: 0x6c902620, + 0x2d050: 0x6cbc4620, 0x2d051: 0x6ced2820, 0x2d052: 0x6ced2a20, 0x2d053: 0x6ced2c20, + 0x2d054: 0x6ced2e20, 0x2d055: 0x6ced3020, 0x2d056: 0x6d1cf220, 0x2d057: 0x6d1cf420, + 0x2d058: 0x6d1cf620, 0x2d059: 0x6d1cf820, 0x2d05a: 0x6d4ab620, 0x2d05b: 0x6d785820, + 0x2d05c: 0x6d785a20, 0x2d05d: 0x6e1c7420, 0x2d05e: 0x6e3d0e20, 0x2d05f: 0x6c018420, + 0x2d060: 0x6c03ce20, 0x2d061: 0x6c03d020, 0x2d062: 0x6c07a220, 0x2d063: 0x6c07a420, + 0x2d064: 0x6c07a620, 0x2d065: 0x6c07a820, 0x2d066: 0x6c07aa20, 0x2d067: 0x6c07ac20, + 0x2d068: 0x6c0ec020, 0x2d069: 0x6c0ec220, 0x2d06a: 0x6c0ec420, 0x2d06b: 0x6c0ec620, + 0x2d06c: 0x6c0ec820, 0x2d06d: 0x6c0eca20, 0x2d06e: 0x6c0ecc20, 0x2d06f: 0x6c0ece20, + 0x2d070: 0x6c0ed020, 0x2d071: 0x6c0ed220, 0x2d072: 0x6c0ed420, 0x2d073: 0x6c0ed620, + 0x2d074: 0x6c0ed820, 0x2d075: 0x6c0eda20, 0x2d076: 0x6c0edc20, 0x2d077: 0x6c0ede20, + 0x2d078: 0x6c0ee020, 0x2d079: 0x6c0ee220, 0x2d07a: 0x6c0ee420, 0x2d07b: 0x6c1aac20, + 0x2d07c: 0x6c1aae20, 0x2d07d: 0x6c1ab020, 0x2d07e: 0x6c1ab220, 0x2d07f: 0x6c1ab420, + // Block 0xb42, offset 0x2d080 + 0x2d080: 0x6c1ab620, 0x2d081: 0x6c1ab820, 0x2d082: 0x6c1aba20, 0x2d083: 0x6c1abc20, + 0x2d084: 0x6c1abe20, 0x2d085: 0x6c1ac020, 0x2d086: 0x6c1ac220, 0x2d087: 0x6c1ac420, + 0x2d088: 0x6c1ac620, 0x2d089: 0x6c1ac820, 0x2d08a: 0x6c1aca20, 0x2d08b: 0x6c1acc20, + 0x2d08c: 0x6c1ace20, 0x2d08d: 0x6c1ad020, 0x2d08e: 0x6c1ad220, 0x2d08f: 0x6c1ad420, + 0x2d090: 0x6c1ad620, 0x2d091: 0x6c1ad820, 0x2d092: 0x6c1ada20, 0x2d093: 0x6c1adc20, + 0x2d094: 0x6c1ade20, 0x2d095: 0x6c1ae020, 0x2d096: 0x6c1ae220, 0x2d097: 0x6c1ae420, + 0x2d098: 0x6c1ae620, 0x2d099: 0x6c1ae820, 0x2d09a: 0x6c1aea20, 0x2d09b: 0x6c1aec20, + 0x2d09c: 0x6c1aee20, 0x2d09d: 0x6c1af020, 0x2d09e: 0x6c1af220, 0x2d09f: 0x6c1af420, + 0x2d0a0: 0x6c1af620, 0x2d0a1: 0x6c2db420, 0x2d0a2: 0x6c2db620, 0x2d0a3: 0x6c2db820, + 0x2d0a4: 0x6c2dba20, 0x2d0a5: 0x6c2dbc20, 0x2d0a6: 0x6c2dbe20, 0x2d0a7: 0x6c2dc020, + 0x2d0a8: 0x6c2dc220, 0x2d0a9: 0x6c2dc420, 0x2d0aa: 0x6c2dc620, 0x2d0ab: 0x6c2dc820, + 0x2d0ac: 0x6c2dca20, 0x2d0ad: 0x6c2dcc20, 0x2d0ae: 0x6c2dce20, 0x2d0af: 0x6c2dd020, + 0x2d0b0: 0x6c2dd220, 0x2d0b1: 0x6c2dd420, 0x2d0b2: 0x6c2dd620, 0x2d0b3: 0x6c2dd820, + 0x2d0b4: 0x6c2dda20, 0x2d0b5: 0x6c2ddc20, 0x2d0b6: 0x6c2dde20, 0x2d0b7: 0x6c2de020, + 0x2d0b8: 0x6c2de220, 0x2d0b9: 0x6c2de420, 0x2d0ba: 0x6c2de620, 0x2d0bb: 0x6c2de820, + 0x2d0bc: 0x6c2dea20, 0x2d0bd: 0x6c2dec20, 0x2d0be: 0x6c2dee20, 0x2d0bf: 0x6c2df020, + // Block 0xb43, offset 0x2d0c0 + 0x2d0c0: 0x6c2df220, 0x2d0c1: 0x6c2df420, 0x2d0c2: 0x6c2df620, 0x2d0c3: 0x6c2df820, + 0x2d0c4: 0x6c2dfa20, 0x2d0c5: 0x6c2dfc20, 0x2d0c6: 0x6c2dfe20, 0x2d0c7: 0x6c2e0020, + 0x2d0c8: 0x6c2e0220, 0x2d0c9: 0x6c2e0420, 0x2d0ca: 0x6c2e0620, 0x2d0cb: 0x6c481220, + 0x2d0cc: 0x6c481420, 0x2d0cd: 0x6c481620, 0x2d0ce: 0x6c481820, 0x2d0cf: 0x6c481a20, + 0x2d0d0: 0x6c481c20, 0x2d0d1: 0x6c481e20, 0x2d0d2: 0x6c482020, 0x2d0d3: 0x6c482220, + 0x2d0d4: 0x6c482420, 0x2d0d5: 0x6c482620, 0x2d0d6: 0x6c482820, 0x2d0d7: 0x6c482a20, + 0x2d0d8: 0x6c482c20, 0x2d0d9: 0x6c482e20, 0x2d0da: 0x6c483020, 0x2d0db: 0x6c483220, + 0x2d0dc: 0x6c483420, 0x2d0dd: 0x6c483620, 0x2d0de: 0x6c483820, 0x2d0df: 0x6c483a20, + 0x2d0e0: 0x6c483c20, 0x2d0e1: 0x6c483e20, 0x2d0e2: 0x6c484020, 0x2d0e3: 0x6c484220, + 0x2d0e4: 0x6c484420, 0x2d0e5: 0x6c484620, 0x2d0e6: 0x6c484820, 0x2d0e7: 0x6c484a20, + 0x2d0e8: 0x6c484c20, 0x2d0e9: 0x6c484e20, 0x2d0ea: 0x6c485020, 0x2d0eb: 0x6c485220, + 0x2d0ec: 0x6c485420, 0x2d0ed: 0x6c485620, 0x2d0ee: 0x6c485820, 0x2d0ef: 0x6c485a20, + 0x2d0f0: 0x6c485c20, 0x2d0f1: 0x6c485e20, 0x2d0f2: 0x6c486020, 0x2d0f3: 0x6c486220, + 0x2d0f4: 0x6c486420, 0x2d0f5: 0x6c486620, 0x2d0f6: 0x6c698e20, 0x2d0f7: 0x6c699020, + 0x2d0f8: 0x6c699220, 0x2d0f9: 0x6c699420, 0x2d0fa: 0x6c699620, 0x2d0fb: 0x6c699820, + 0x2d0fc: 0x6c699a20, 0x2d0fd: 0x6c699c20, 0x2d0fe: 0x6c699e20, 0x2d0ff: 0x6c69a020, + // Block 0xb44, offset 0x2d100 + 0x2d100: 0x6c69a220, 0x2d101: 0x6c69a420, 0x2d102: 0x6c69a620, 0x2d103: 0x6c69a820, + 0x2d104: 0x6c69aa20, 0x2d105: 0x6c69ac20, 0x2d106: 0x6c69ae20, 0x2d107: 0x6c69b020, + 0x2d108: 0x6c69b220, 0x2d109: 0x6c69b420, 0x2d10a: 0x6c69b620, 0x2d10b: 0x6c69b820, + 0x2d10c: 0x6c69ba20, 0x2d10d: 0x6c69bc20, 0x2d10e: 0x6c486820, 0x2d10f: 0x6c69be20, + 0x2d110: 0x6c69c020, 0x2d111: 0x6c69c220, 0x2d112: 0x6c69c420, 0x2d113: 0x6c69c620, + 0x2d114: 0x6c69c820, 0x2d115: 0x6c69ca20, 0x2d116: 0x6c69cc20, 0x2d117: 0x6c69ce20, + 0x2d118: 0x6c69d020, 0x2d119: 0x6c69d220, 0x2d11a: 0x6c69d420, 0x2d11b: 0x6c69d620, + 0x2d11c: 0x6c905420, 0x2d11d: 0x6c905620, 0x2d11e: 0x6c905820, 0x2d11f: 0x6c905a20, + 0x2d120: 0x6c905c20, 0x2d121: 0x6c905e20, 0x2d122: 0x6c906020, 0x2d123: 0x6c906220, + 0x2d124: 0x6c906420, 0x2d125: 0x6c906620, 0x2d126: 0x6c906820, 0x2d127: 0x6c906a20, + 0x2d128: 0x6c906c20, 0x2d129: 0x6c906e20, 0x2d12a: 0x6c915e20, 0x2d12b: 0x6c907020, + 0x2d12c: 0x6c907220, 0x2d12d: 0x6c907420, 0x2d12e: 0x6c907620, 0x2d12f: 0x6c907820, + 0x2d130: 0x6c907a20, 0x2d131: 0x6c907c20, 0x2d132: 0x6c907e20, 0x2d133: 0x6c908020, + 0x2d134: 0x6c908220, 0x2d135: 0x6c908420, 0x2d136: 0x6c908620, 0x2d137: 0x6c908820, + 0x2d138: 0x6c908a20, 0x2d139: 0x6c908c20, 0x2d13a: 0x6c908e20, 0x2d13b: 0x6c909020, + 0x2d13c: 0x6c909220, 0x2d13d: 0x6c909420, 0x2d13e: 0x6c909620, 0x2d13f: 0x6c909820, + // Block 0xb45, offset 0x2d140 + 0x2d140: 0x6c909a20, 0x2d141: 0x6c909c20, 0x2d142: 0x6c909e20, 0x2d143: 0x6c90a020, + 0x2d144: 0x6c90a220, 0x2d145: 0x6c90a420, 0x2d146: 0x6c90a620, 0x2d147: 0x6c90a820, + 0x2d148: 0x6c90aa20, 0x2d149: 0x6c90ac20, 0x2d14a: 0x6c90ae20, 0x2d14b: 0x6c90b020, + 0x2d14c: 0x6c90b220, 0x2d14d: 0x6c90b420, 0x2d14e: 0x6c90b620, 0x2d14f: 0x6c90b820, + 0x2d150: 0x6c90ba20, 0x2d151: 0x6c90bc20, 0x2d152: 0x6c90be20, 0x2d153: 0x6c90c020, + 0x2d154: 0x6c90c220, 0x2d155: 0x6c90c420, 0x2d156: 0x6cbc7a20, 0x2d157: 0x6cbc7c20, + 0x2d158: 0x6cbc7e20, 0x2d159: 0x6cbc8020, 0x2d15a: 0x6cbc8220, 0x2d15b: 0x6cbc8420, + 0x2d15c: 0x6cbc8620, 0x2d15d: 0x6cbc8820, 0x2d15e: 0x6cbc8a20, 0x2d15f: 0x6cbc8c20, + 0x2d160: 0x6cbc8e20, 0x2d161: 0x6cbc9020, 0x2d162: 0x6cbc9220, 0x2d163: 0x6cbc9420, + 0x2d164: 0x6cbc9620, 0x2d165: 0x6cbc9820, 0x2d166: 0x6cbc9a20, 0x2d167: 0x6cbc9c20, + 0x2d168: 0x6cbc9e20, 0x2d169: 0x6cbca020, 0x2d16a: 0x6cbca220, 0x2d16b: 0x6cbca420, + 0x2d16c: 0x6cbca620, 0x2d16d: 0x6cbca820, 0x2d16e: 0x6cbcaa20, 0x2d16f: 0x6cbcac20, + 0x2d170: 0x6cbcae20, 0x2d171: 0x6cbcb020, 0x2d172: 0x6c6a6e20, 0x2d173: 0x6cbcb220, + 0x2d174: 0x6cbcb420, 0x2d175: 0x6c916020, 0x2d176: 0x6cbcb620, 0x2d177: 0x6cbcb820, + 0x2d178: 0x6cbcba20, 0x2d179: 0x6cbcbc20, 0x2d17a: 0x6cbcbe20, 0x2d17b: 0x6cbcc020, + 0x2d17c: 0x6cbcc220, 0x2d17d: 0x6ced5820, 0x2d17e: 0x6cbcc420, 0x2d17f: 0x6cbcc620, + // Block 0xb46, offset 0x2d180 + 0x2d180: 0x6cbcc820, 0x2d181: 0x6cbcca20, 0x2d182: 0x6cbccc20, 0x2d183: 0x6ced5a20, + 0x2d184: 0x6cbcce20, 0x2d185: 0x6cbcd020, 0x2d186: 0x6cbcd220, 0x2d187: 0x6cbcd420, + 0x2d188: 0x6cbcd620, 0x2d189: 0x6ced5c20, 0x2d18a: 0x6ced5e20, 0x2d18b: 0x6ced6020, + 0x2d18c: 0x6ced6220, 0x2d18d: 0x6ced6420, 0x2d18e: 0x6ced6620, 0x2d18f: 0x6ced6820, + 0x2d190: 0x6ced6a20, 0x2d191: 0x6ced6c20, 0x2d192: 0x6ced6e20, 0x2d193: 0x6ced7020, + 0x2d194: 0x6ced7220, 0x2d195: 0x6ced7420, 0x2d196: 0x6ced7620, 0x2d197: 0x6ced7820, + 0x2d198: 0x6ced7a20, 0x2d199: 0x6ced7c20, 0x2d19a: 0x6ced7e20, 0x2d19b: 0x6ced8020, + 0x2d19c: 0x6ced8220, 0x2d19d: 0x6ced8420, 0x2d19e: 0x6ced8620, 0x2d19f: 0x6ced8820, + 0x2d1a0: 0x6ced8a20, 0x2d1a1: 0x6ced8c20, 0x2d1a2: 0x6ced8e20, 0x2d1a3: 0x6ced9020, + 0x2d1a4: 0x6ced9220, 0x2d1a5: 0x6ced9420, 0x2d1a6: 0x6ced9620, 0x2d1a7: 0x6ced9820, + 0x2d1a8: 0x6ced9a20, 0x2d1a9: 0x6ced9c20, 0x2d1aa: 0x6ced9e20, 0x2d1ab: 0x6ceda020, + 0x2d1ac: 0x6ceda220, 0x2d1ad: 0x6ceda420, 0x2d1ae: 0x6ceda620, 0x2d1af: 0x6ceda820, + 0x2d1b0: 0x6cedaa20, 0x2d1b1: 0x6cedac20, 0x2d1b2: 0x6d1d2420, 0x2d1b3: 0x6d1d2620, + 0x2d1b4: 0x6d1d2820, 0x2d1b5: 0x6d1d2a20, 0x2d1b6: 0x6d1d2c20, 0x2d1b7: 0x6d1d2e20, + 0x2d1b8: 0x6d1d3020, 0x2d1b9: 0x6d1d3220, 0x2d1ba: 0x6d1d3420, 0x2d1bb: 0x6d1d3620, + 0x2d1bc: 0x6d1d3820, 0x2d1bd: 0x6d1d3a20, 0x2d1be: 0x6d1d3c20, 0x2d1bf: 0x6d1d3e20, + // Block 0xb47, offset 0x2d1c0 + 0x2d1c0: 0x6d4ac620, 0x2d1c1: 0x6d1d4020, 0x2d1c2: 0x6d1d4220, 0x2d1c3: 0x6d1d4420, + 0x2d1c4: 0x6d1d4620, 0x2d1c5: 0x6d1d4820, 0x2d1c6: 0x6d1d4a20, 0x2d1c7: 0x6d1d4c20, + 0x2d1c8: 0x6d1d4e20, 0x2d1c9: 0x6d1d5020, 0x2d1ca: 0x6d1d5220, 0x2d1cb: 0x6d1d5420, + 0x2d1cc: 0x6d1d5620, 0x2d1cd: 0x6d1d5820, 0x2d1ce: 0x6d1d5a20, 0x2d1cf: 0x6d1d5c20, + 0x2d1d0: 0x6d1d5e20, 0x2d1d1: 0x6d1d6020, 0x2d1d2: 0x6d1d6220, 0x2d1d3: 0x6d1d6420, + 0x2d1d4: 0x6d1d6620, 0x2d1d5: 0x6d1d6820, 0x2d1d6: 0x6d1d6a20, 0x2d1d7: 0x6d1d6c20, + 0x2d1d8: 0x6d1d6e20, 0x2d1d9: 0x6d1d7020, 0x2d1da: 0x6d1d7220, 0x2d1db: 0x6d1d7420, + 0x2d1dc: 0x6d4ada20, 0x2d1dd: 0x6d4adc20, 0x2d1de: 0x6d4ade20, 0x2d1df: 0x6d4ae020, + 0x2d1e0: 0x6d4ae220, 0x2d1e1: 0x6d4ae420, 0x2d1e2: 0x6d4ae620, 0x2d1e3: 0x6d4ae820, + 0x2d1e4: 0x6d4aea20, 0x2d1e5: 0x6d4aec20, 0x2d1e6: 0x6d4aee20, 0x2d1e7: 0x6d4af020, + 0x2d1e8: 0x6d758820, 0x2d1e9: 0x6d4af220, 0x2d1ea: 0x6d4af420, 0x2d1eb: 0x6d4af620, + 0x2d1ec: 0x6d4af820, 0x2d1ed: 0x6d1df220, 0x2d1ee: 0x6d4afa20, 0x2d1ef: 0x6d4afc20, + 0x2d1f0: 0x6d4afe20, 0x2d1f1: 0x6d4b0020, 0x2d1f2: 0x6d4b0220, 0x2d1f3: 0x6d4b0420, + 0x2d1f4: 0x6d4b0620, 0x2d1f5: 0x6d4b0820, 0x2d1f6: 0x6d4b0a20, 0x2d1f7: 0x6d4b0c20, + 0x2d1f8: 0x6d4b0e20, 0x2d1f9: 0x6d4b1020, 0x2d1fa: 0x6d787420, 0x2d1fb: 0x6d787620, + 0x2d1fc: 0x6d787820, 0x2d1fd: 0x6d787a20, 0x2d1fe: 0x6d787c20, 0x2d1ff: 0x6d787e20, + // Block 0xb48, offset 0x2d200 + 0x2d200: 0x6d788020, 0x2d201: 0x6d788220, 0x2d202: 0x6d788420, 0x2d203: 0x6d788620, + 0x2d204: 0x6d788820, 0x2d205: 0x6d788a20, 0x2d206: 0x6d788c20, 0x2d207: 0x6d788e20, + 0x2d208: 0x6d789020, 0x2d209: 0x6d789220, 0x2d20a: 0x6d789420, 0x2d20b: 0x6d789620, + 0x2d20c: 0x6d789820, 0x2d20d: 0x6da19020, 0x2d20e: 0x6da19220, 0x2d20f: 0x6da19420, + 0x2d210: 0x6da19620, 0x2d211: 0x6da19820, 0x2d212: 0x6da19a20, 0x2d213: 0x6da19c20, + 0x2d214: 0x6da19e20, 0x2d215: 0x6da1a020, 0x2d216: 0x6da1a220, 0x2d217: 0x6da1a420, + 0x2d218: 0x6dc3e620, 0x2d219: 0x6dc3e820, 0x2d21a: 0x6de10620, 0x2d21b: 0x6de10820, + 0x2d21c: 0x6de10a20, 0x2d21d: 0x6de10c20, 0x2d21e: 0x6de10e20, 0x2d21f: 0x6de11020, + 0x2d220: 0x6de11220, 0x2d221: 0x6de07820, 0x2d222: 0x6de11420, 0x2d223: 0x6df93420, + 0x2d224: 0x6df93620, 0x2d225: 0x6df93820, 0x2d226: 0x6e0cfc20, 0x2d227: 0x6e288e20, + 0x2d228: 0x6e289020, 0x2d229: 0x6e31c420, 0x2d22a: 0x6e386020, 0x2d22b: 0x6c018620, + 0x2d22c: 0x6c03da20, 0x2d22d: 0x6c07c420, 0x2d22e: 0x6c0f0e20, 0x2d22f: 0x6c1b6620, + 0x2d230: 0x6c1b6820, 0x2d231: 0x6c1b6a20, 0x2d232: 0x6c1b6c20, 0x2d233: 0x6c1b6e20, + 0x2d234: 0x6c48e620, 0x2d235: 0x6c48e820, 0x2d236: 0x6c6a7020, 0x2d237: 0x6c916220, + 0x2d238: 0x6c916420, 0x2d239: 0x6cbd8820, 0x2d23a: 0x6cbd8a20, 0x2d23b: 0x6cbd8c20, + 0x2d23c: 0x6cee4e20, 0x2d23d: 0x6d1df420, 0x2d23e: 0x6d1df620, 0x2d23f: 0x6d4ba220, + // Block 0xb49, offset 0x2d240 + 0x2d240: 0x6d4ba420, 0x2d241: 0x6d790020, 0x2d242: 0x6c018820, 0x2d243: 0x6c03dc20, + 0x2d244: 0x6c07c820, 0x2d245: 0x6c0f1220, 0x2d246: 0x6c1b7420, 0x2d247: 0x6c2e8020, + 0x2d248: 0x6c48f220, 0x2d249: 0x6c48f820, 0x2d24a: 0x6c018c20, 0x2d24b: 0x6c1b7c20, + 0x2d24c: 0x6c2e8220, 0x2d24d: 0x6c48fa20, 0x2d24e: 0x6c6a8420, 0x2d24f: 0x6c6a8620, + 0x2d250: 0x6d1e0220, 0x2d251: 0x6dc43a20, 0x2d252: 0x6de14820, 0x2d253: 0x6dc43c20, + 0x2d254: 0x6e0d1e20, 0x2d255: 0x6c018e20, 0x2d256: 0x6c07d020, 0x2d257: 0x6c07d220, + 0x2d258: 0x6c07d420, 0x2d259: 0x6c0f1c20, 0x2d25a: 0x6c0f1e20, 0x2d25b: 0x6c0f2020, + 0x2d25c: 0x6c2e8e20, 0x2d25d: 0x6c2e9020, 0x2d25e: 0x6c6a8c20, 0x2d25f: 0x6c918020, + 0x2d260: 0x6c918220, 0x2d261: 0x6cbd9a20, 0x2d262: 0x6d1e1020, 0x2d263: 0x6d1e1220, + 0x2d264: 0x6d1e1420, 0x2d265: 0x6d1e1620, 0x2d266: 0x6d4bae20, 0x2d267: 0x6c019020, + 0x2d268: 0x6c019220, 0x2d269: 0x6c03de20, 0x2d26a: 0x6c03e020, 0x2d26b: 0x6c03e220, + 0x2d26c: 0x6c03e420, 0x2d26d: 0x6c03e620, 0x2d26e: 0x6c07de20, 0x2d26f: 0x6c07e020, + 0x2d270: 0x6c07e220, 0x2d271: 0x6c07e420, 0x2d272: 0x6c07e620, 0x2d273: 0x6c07e820, + 0x2d274: 0x6c07ea20, 0x2d275: 0x6c0f3220, 0x2d276: 0x6c0f3420, 0x2d277: 0x6c0f3620, + 0x2d278: 0x6c0f3820, 0x2d279: 0x6c0f3a20, 0x2d27a: 0x6c0f3c20, 0x2d27b: 0x6c0f3e20, + 0x2d27c: 0x6c0f4020, 0x2d27d: 0x6c1b8e20, 0x2d27e: 0x6c1b9020, 0x2d27f: 0x6c1b9220, + // Block 0xb4a, offset 0x2d280 + 0x2d280: 0x6c1b9420, 0x2d281: 0x6c1b9620, 0x2d282: 0x6c1b9820, 0x2d283: 0x6c2ea620, + 0x2d284: 0x6c2ea820, 0x2d285: 0x6c2eaa20, 0x2d286: 0x6c2eac20, 0x2d287: 0x6c2eae20, + 0x2d288: 0x6c2eb020, 0x2d289: 0x6c2eb220, 0x2d28a: 0x6c6aaa20, 0x2d28b: 0x6c2eb420, + 0x2d28c: 0x6c2eb620, 0x2d28d: 0x6c2eb820, 0x2d28e: 0x6c490620, 0x2d28f: 0x6c490820, + 0x2d290: 0x6c490a20, 0x2d291: 0x6c490c20, 0x2d292: 0x6c490e20, 0x2d293: 0x6c491020, + 0x2d294: 0x6c2ef220, 0x2d295: 0x6c491220, 0x2d296: 0x6c491420, 0x2d297: 0x6c6aac20, + 0x2d298: 0x6c6aae20, 0x2d299: 0x6c6ab020, 0x2d29a: 0x6c6ab220, 0x2d29b: 0x6c919e20, + 0x2d29c: 0x6c91a020, 0x2d29d: 0x6c91a220, 0x2d29e: 0x6c91a420, 0x2d29f: 0x6c91d220, + 0x2d2a0: 0x6cbdb820, 0x2d2a1: 0x6cbdba20, 0x2d2a2: 0x6c91d420, 0x2d2a3: 0x6cbdbc20, + 0x2d2a4: 0x6cbdbe20, 0x2d2a5: 0x6cbdc020, 0x2d2a6: 0x6cee7820, 0x2d2a7: 0x6cee7a20, + 0x2d2a8: 0x6cee7c20, 0x2d2a9: 0x6d1e2e20, 0x2d2aa: 0x6d1e3020, 0x2d2ab: 0x6d1e3220, + 0x2d2ac: 0x6d1e3420, 0x2d2ad: 0x6d4bb820, 0x2d2ae: 0x6d791e20, 0x2d2af: 0x6d792020, + 0x2d2b0: 0x6dc44c20, 0x2d2b1: 0x6e1c9220, 0x2d2b2: 0x6e28a420, 0x2d2b3: 0x6c019420, + 0x2d2b4: 0x6c07fe20, 0x2d2b5: 0x6c080020, 0x2d2b6: 0x6c080220, 0x2d2b7: 0x6c0f6220, + 0x2d2b8: 0x6c0f6420, 0x2d2b9: 0x6c0f6620, 0x2d2ba: 0x6c0f6820, 0x2d2bb: 0x6c0f6a20, + 0x2d2bc: 0x6c0f6c20, 0x2d2bd: 0x6c0f6e20, 0x2d2be: 0x6c0f7020, 0x2d2bf: 0x6c0f7220, + // Block 0xb4b, offset 0x2d2c0 + 0x2d2c0: 0x6c0f7420, 0x2d2c1: 0x6c0f7620, 0x2d2c2: 0x6c0f7820, 0x2d2c3: 0x6c0f7a20, + 0x2d2c4: 0x6c0f7c20, 0x2d2c5: 0x6c0f7e20, 0x2d2c6: 0x6c0f8020, 0x2d2c7: 0x6c0f8220, + 0x2d2c8: 0x6c0f8420, 0x2d2c9: 0x6c1bd420, 0x2d2ca: 0x6c1bd620, 0x2d2cb: 0x6c1bd820, + 0x2d2cc: 0x6c1bda20, 0x2d2cd: 0x6c495420, 0x2d2ce: 0x6c1bdc20, 0x2d2cf: 0x6c1bde20, + 0x2d2d0: 0x6c1be020, 0x2d2d1: 0x6c1be220, 0x2d2d2: 0x6c1be420, 0x2d2d3: 0x6c1be620, + 0x2d2d4: 0x6c1be820, 0x2d2d5: 0x6c1bea20, 0x2d2d6: 0x6c1bec20, 0x2d2d7: 0x6c1bee20, + 0x2d2d8: 0x6c1bf020, 0x2d2d9: 0x6c1bf220, 0x2d2da: 0x6c1bf420, 0x2d2db: 0x6c1bf620, + 0x2d2dc: 0x6c1bf820, 0x2d2dd: 0x6c1bfa20, 0x2d2de: 0x6c1bfc20, 0x2d2df: 0x6c1bfe20, + 0x2d2e0: 0x6c1c0020, 0x2d2e1: 0x6c1c0220, 0x2d2e2: 0x6c1c0420, 0x2d2e3: 0x6c1c0620, + 0x2d2e4: 0x6c1c0820, 0x2d2e5: 0x6c1c0a20, 0x2d2e6: 0x6c1c0c20, 0x2d2e7: 0x6c1c0e20, + 0x2d2e8: 0x6c1c1020, 0x2d2e9: 0x6c1c1220, 0x2d2ea: 0x6c1c1420, 0x2d2eb: 0x6c1c1620, + 0x2d2ec: 0x6c2f1820, 0x2d2ed: 0x6c2f1a20, 0x2d2ee: 0x6c2f1c20, 0x2d2ef: 0x6c2f1e20, + 0x2d2f0: 0x6c2f2020, 0x2d2f1: 0x6c2f2220, 0x2d2f2: 0x6c2f2420, 0x2d2f3: 0x6c2f2620, + 0x2d2f4: 0x6c2f2820, 0x2d2f5: 0x6c2f2a20, 0x2d2f6: 0x6c2f2c20, 0x2d2f7: 0x6c2f2e20, + 0x2d2f8: 0x6c2f3020, 0x2d2f9: 0x6c2f3220, 0x2d2fa: 0x6c2f3420, 0x2d2fb: 0x6c2f3620, + 0x2d2fc: 0x6c2f3820, 0x2d2fd: 0x6c2f3a20, 0x2d2fe: 0x6c2f3c20, 0x2d2ff: 0x6c2f3e20, + // Block 0xb4c, offset 0x2d300 + 0x2d300: 0x6c2f4020, 0x2d301: 0x6c2f4220, 0x2d302: 0x6c2f4420, 0x2d303: 0x6c2f4620, + 0x2d304: 0x6c2f4820, 0x2d305: 0x6c2f4a20, 0x2d306: 0x6c2f4c20, 0x2d307: 0x6c2f4e20, + 0x2d308: 0x6c2f5020, 0x2d309: 0x6c2f5220, 0x2d30a: 0x6c2f5420, 0x2d30b: 0x6c2f5620, + 0x2d30c: 0x6c2f5820, 0x2d30d: 0x6c2f5a20, 0x2d30e: 0x6c2f5c20, 0x2d30f: 0x6c2f5e20, + 0x2d310: 0x6c2f6020, 0x2d311: 0x6c2f6220, 0x2d312: 0x6c2f6420, 0x2d313: 0x6c2f6620, + 0x2d314: 0x6c2f6820, 0x2d315: 0x6c493c20, 0x2d316: 0x6c2f6a20, 0x2d317: 0x6c2f6c20, + 0x2d318: 0x6c495620, 0x2d319: 0x6c495820, 0x2d31a: 0x6c495a20, 0x2d31b: 0x6c495c20, + 0x2d31c: 0x6c495e20, 0x2d31d: 0x6c496020, 0x2d31e: 0x6c496220, 0x2d31f: 0x6c496420, + 0x2d320: 0x6c496620, 0x2d321: 0x6c496820, 0x2d322: 0x6c496a20, 0x2d323: 0x6c496c20, + 0x2d324: 0x6c496e20, 0x2d325: 0x6c497020, 0x2d326: 0x6c497220, 0x2d327: 0x6c497420, + 0x2d328: 0x6c497620, 0x2d329: 0x6c497820, 0x2d32a: 0x6c497a20, 0x2d32b: 0x6c497c20, + 0x2d32c: 0x6c6b1820, 0x2d32d: 0x6c497e20, 0x2d32e: 0x6c498020, 0x2d32f: 0x6c498220, + 0x2d330: 0x6c498420, 0x2d331: 0x6c498620, 0x2d332: 0x6c498820, 0x2d333: 0x6c498a20, + 0x2d334: 0x6c498c20, 0x2d335: 0x6c498e20, 0x2d336: 0x6c499020, 0x2d337: 0x6c499220, + 0x2d338: 0x6c499420, 0x2d339: 0x6c499620, 0x2d33a: 0x6c499820, 0x2d33b: 0x6c499a20, + 0x2d33c: 0x6c499c20, 0x2d33d: 0x6c499e20, 0x2d33e: 0x6c49a020, 0x2d33f: 0x6c49a220, + // Block 0xb4d, offset 0x2d340 + 0x2d340: 0x6c49a420, 0x2d341: 0x6c49a620, 0x2d342: 0x6c49a820, 0x2d343: 0x6c49aa20, + 0x2d344: 0x6c5c3020, 0x2d345: 0x6c49ac20, 0x2d346: 0x6c49ae20, 0x2d347: 0x6c49b020, + 0x2d348: 0x6c49b220, 0x2d349: 0x6c6b1a20, 0x2d34a: 0x6c6b1c20, 0x2d34b: 0x6c6b1e20, + 0x2d34c: 0x6c6b2020, 0x2d34d: 0x6c4a1a20, 0x2d34e: 0x6c6b2220, 0x2d34f: 0x6c6b2420, + 0x2d350: 0x6c6b2620, 0x2d351: 0x6c6b2820, 0x2d352: 0x6c6b2a20, 0x2d353: 0x6c6b2c20, + 0x2d354: 0x6c6b2e20, 0x2d355: 0x6c6b3020, 0x2d356: 0x6c6b3220, 0x2d357: 0x6c6b3420, + 0x2d358: 0x6c6b3620, 0x2d359: 0x6c6b3820, 0x2d35a: 0x6c6b3a20, 0x2d35b: 0x6c6b3c20, + 0x2d35c: 0x6c6b3e20, 0x2d35d: 0x6c6b4020, 0x2d35e: 0x6c6b4220, 0x2d35f: 0x6c6b4420, + 0x2d360: 0x6c6b4620, 0x2d361: 0x6c6b4820, 0x2d362: 0x6c6b4a20, 0x2d363: 0x6c6b4c20, + 0x2d364: 0x6c6b4e20, 0x2d365: 0x6c6b5020, 0x2d366: 0x6c6b5220, 0x2d367: 0x6c6b5420, + 0x2d368: 0x6c6b5620, 0x2d369: 0x6c6b5820, 0x2d36a: 0x6c6b5a20, 0x2d36b: 0x6c91d620, + 0x2d36c: 0x6c91ec20, 0x2d36d: 0x6c6b5c20, 0x2d36e: 0x6c6b5e20, 0x2d36f: 0x6c6b6020, + 0x2d370: 0x6c6b6220, 0x2d371: 0x6c6b6420, 0x2d372: 0x6c6b6620, 0x2d373: 0x6c6b6820, + 0x2d374: 0x6c6b6a20, 0x2d375: 0x6c91ee20, 0x2d376: 0x6c91f020, 0x2d377: 0x6c91f220, + 0x2d378: 0x6c91f420, 0x2d379: 0x6c91f620, 0x2d37a: 0x6c91f820, 0x2d37b: 0x6c91fa20, + 0x2d37c: 0x6c91fc20, 0x2d37d: 0x6c91d820, 0x2d37e: 0x6c91fe20, 0x2d37f: 0x6c920020, + // Block 0xb4e, offset 0x2d380 + 0x2d380: 0x6c920220, 0x2d381: 0x6c920420, 0x2d382: 0x6c920620, 0x2d383: 0x6c920820, + 0x2d384: 0x6c920a20, 0x2d385: 0x6c920c20, 0x2d386: 0x6c920e20, 0x2d387: 0x6c921020, + 0x2d388: 0x6c921220, 0x2d389: 0x6c921420, 0x2d38a: 0x6c921620, 0x2d38b: 0x6c921820, + 0x2d38c: 0x6c921a20, 0x2d38d: 0x6c921c20, 0x2d38e: 0x6c921e20, 0x2d38f: 0x6c922020, + 0x2d390: 0x6c922220, 0x2d391: 0x6c922420, 0x2d392: 0x6c922620, 0x2d393: 0x6c922820, + 0x2d394: 0x6c922a20, 0x2d395: 0x6c922c20, 0x2d396: 0x6c922e20, 0x2d397: 0x6c923020, + 0x2d398: 0x6c923220, 0x2d399: 0x6c923420, 0x2d39a: 0x6c923620, 0x2d39b: 0x6c923820, + 0x2d39c: 0x6c923a20, 0x2d39d: 0x6c923c20, 0x2d39e: 0x6c923e20, 0x2d39f: 0x6c924020, + 0x2d3a0: 0x6c924220, 0x2d3a1: 0x6c924420, 0x2d3a2: 0x6c924620, 0x2d3a3: 0x6c924820, + 0x2d3a4: 0x6c924a20, 0x2d3a5: 0x6c924c20, 0x2d3a6: 0x6c924e20, 0x2d3a7: 0x6c925020, + 0x2d3a8: 0x6c925220, 0x2d3a9: 0x6c925420, 0x2d3aa: 0x6c925620, 0x2d3ab: 0x6c925820, + 0x2d3ac: 0x6c925a20, 0x2d3ad: 0x6c925c20, 0x2d3ae: 0x6c925e20, 0x2d3af: 0x6c926020, + 0x2d3b0: 0x6c926220, 0x2d3b1: 0x6c926420, 0x2d3b2: 0x6c926620, 0x2d3b3: 0x6c926820, + 0x2d3b4: 0x6c926a20, 0x2d3b5: 0x6c926c20, 0x2d3b6: 0x6c926e20, 0x2d3b7: 0x6cbe2020, + 0x2d3b8: 0x6cbe2220, 0x2d3b9: 0x6cbe2420, 0x2d3ba: 0x6cbe2620, 0x2d3bb: 0x6cbe2820, + 0x2d3bc: 0x6cbe2a20, 0x2d3bd: 0x6cbe2c20, 0x2d3be: 0x6cbe2e20, 0x2d3bf: 0x6cbe3020, + // Block 0xb4f, offset 0x2d3c0 + 0x2d3c0: 0x6cbe3220, 0x2d3c1: 0x6cbe3420, 0x2d3c2: 0x6cbe3620, 0x2d3c3: 0x6cbe3820, + 0x2d3c4: 0x6cbe3a20, 0x2d3c5: 0x6cbe3c20, 0x2d3c6: 0x6cbe3e20, 0x2d3c7: 0x6cbe4020, + 0x2d3c8: 0x6cbe4220, 0x2d3c9: 0x6cbe4420, 0x2d3ca: 0x6cbe4620, 0x2d3cb: 0x6cbe4820, + 0x2d3cc: 0x6cbe4a20, 0x2d3cd: 0x6cbe4c20, 0x2d3ce: 0x6c930220, 0x2d3cf: 0x6cbe4e20, + 0x2d3d0: 0x6ceec620, 0x2d3d1: 0x6cbe5020, 0x2d3d2: 0x6cbe5220, 0x2d3d3: 0x6cbe5420, + 0x2d3d4: 0x6cbe5620, 0x2d3d5: 0x6cbe5820, 0x2d3d6: 0x6cbe5a20, 0x2d3d7: 0x6cbe5c20, + 0x2d3d8: 0x6cbe5e20, 0x2d3d9: 0x6cbe6020, 0x2d3da: 0x6cbe6220, 0x2d3db: 0x6cbe6420, + 0x2d3dc: 0x6cbe6620, 0x2d3dd: 0x6cbe6820, 0x2d3de: 0x6cbe6a20, 0x2d3df: 0x6cbe6c20, + 0x2d3e0: 0x6cbe6e20, 0x2d3e1: 0x6cbe7020, 0x2d3e2: 0x6cbe7220, 0x2d3e3: 0x6cbe7420, + 0x2d3e4: 0x6cbe7620, 0x2d3e5: 0x6cbe7820, 0x2d3e6: 0x6cbe7a20, 0x2d3e7: 0x6cbe7c20, + 0x2d3e8: 0x6cbe7e20, 0x2d3e9: 0x6cbe8020, 0x2d3ea: 0x6cbe8220, 0x2d3eb: 0x6cbe8420, + 0x2d3ec: 0x6cbe8620, 0x2d3ed: 0x6cbe8820, 0x2d3ee: 0x6cbe8a20, 0x2d3ef: 0x6cbe8c20, + 0x2d3f0: 0x6ceec820, 0x2d3f1: 0x6ceeca20, 0x2d3f2: 0x6ceecc20, 0x2d3f3: 0x6ceece20, + 0x2d3f4: 0x6ceed020, 0x2d3f5: 0x6ceed220, 0x2d3f6: 0x6ceed420, 0x2d3f7: 0x6ceed620, + 0x2d3f8: 0x6ceed820, 0x2d3f9: 0x6ceeda20, 0x2d3fa: 0x6ceedc20, 0x2d3fb: 0x6ceede20, + 0x2d3fc: 0x6ceee020, 0x2d3fd: 0x6ceee220, 0x2d3fe: 0x6ceee420, 0x2d3ff: 0x6ceee620, + // Block 0xb50, offset 0x2d400 + 0x2d400: 0x6ceee820, 0x2d401: 0x6ceeea20, 0x2d402: 0x6ceeec20, 0x2d403: 0x6ceeee20, + 0x2d404: 0x6ceef020, 0x2d405: 0x6ceef220, 0x2d406: 0x6ceef420, 0x2d407: 0x6ceef620, + 0x2d408: 0x6ceef820, 0x2d409: 0x6ceefa20, 0x2d40a: 0x6ceefc20, 0x2d40b: 0x6ceefe20, + 0x2d40c: 0x6cef0020, 0x2d40d: 0x6cef0220, 0x2d40e: 0x6cef0420, 0x2d40f: 0x6cbe8e20, + 0x2d410: 0x6cef0620, 0x2d411: 0x6cef0820, 0x2d412: 0x6cef0a20, 0x2d413: 0x6cef0c20, + 0x2d414: 0x6cef0e20, 0x2d415: 0x6d1e6e20, 0x2d416: 0x6d1e7020, 0x2d417: 0x6d1e7220, + 0x2d418: 0x6d1e7420, 0x2d419: 0x6d1e7620, 0x2d41a: 0x6d1e7820, 0x2d41b: 0x6d1e7a20, + 0x2d41c: 0x6d1e7c20, 0x2d41d: 0x6d1e7e20, 0x2d41e: 0x6d1e8020, 0x2d41f: 0x6d1e8220, + 0x2d420: 0x6d1e8420, 0x2d421: 0x6d1e8620, 0x2d422: 0x6d1e8820, 0x2d423: 0x6d1e8a20, + 0x2d424: 0x6d1e8c20, 0x2d425: 0x6d1e8e20, 0x2d426: 0x6d1e9020, 0x2d427: 0x6d1e9220, + 0x2d428: 0x6d1e9420, 0x2d429: 0x6d1e9620, 0x2d42a: 0x6d1e9820, 0x2d42b: 0x6d1e9a20, + 0x2d42c: 0x6d1e9c20, 0x2d42d: 0x6d1e9e20, 0x2d42e: 0x6d1ea020, 0x2d42f: 0x6d1ea220, + 0x2d430: 0x6d1ea420, 0x2d431: 0x6d1ea620, 0x2d432: 0x6d1ea820, 0x2d433: 0x6d1f2820, + 0x2d434: 0x6d4bea20, 0x2d435: 0x6d4bec20, 0x2d436: 0x6d4bee20, 0x2d437: 0x6d4bf020, + 0x2d438: 0x6d4bf220, 0x2d439: 0x6d4bf420, 0x2d43a: 0x6d4bf620, 0x2d43b: 0x6d4bf820, + 0x2d43c: 0x6d4bfa20, 0x2d43d: 0x6d4bfc20, 0x2d43e: 0x6d4bfe20, 0x2d43f: 0x6d4c0020, + // Block 0xb51, offset 0x2d440 + 0x2d440: 0x6d4c0220, 0x2d441: 0x6d4c0420, 0x2d442: 0x6d4c0620, 0x2d443: 0x6d4c0820, + 0x2d444: 0x6d4c0a20, 0x2d445: 0x6d4c0c20, 0x2d446: 0x6d4c0e20, 0x2d447: 0x6d4c1020, + 0x2d448: 0x6d4c1220, 0x2d449: 0x6d4c1420, 0x2d44a: 0x6d4c1620, 0x2d44b: 0x6d4c1820, + 0x2d44c: 0x6d4c1a20, 0x2d44d: 0x6d4c1c20, 0x2d44e: 0x6d4c1e20, 0x2d44f: 0x6d4c2020, + 0x2d450: 0x6d794220, 0x2d451: 0x6d794420, 0x2d452: 0x6d794620, 0x2d453: 0x6d794820, + 0x2d454: 0x6d794a20, 0x2d455: 0x6d794c20, 0x2d456: 0x6d794e20, 0x2d457: 0x6d795020, + 0x2d458: 0x6d795220, 0x2d459: 0x6d795420, 0x2d45a: 0x6d795620, 0x2d45b: 0x6d795820, + 0x2d45c: 0x6d795a20, 0x2d45d: 0x6d795c20, 0x2d45e: 0x6d795e20, 0x2d45f: 0x6d796020, + 0x2d460: 0x6d796220, 0x2d461: 0x6d796420, 0x2d462: 0x6d796620, 0x2d463: 0x6da22620, + 0x2d464: 0x6da22820, 0x2d465: 0x6da22a20, 0x2d466: 0x6da22c20, 0x2d467: 0x6da22e20, + 0x2d468: 0x6d79de20, 0x2d469: 0x6da23020, 0x2d46a: 0x6da23220, 0x2d46b: 0x6da23420, + 0x2d46c: 0x6da23620, 0x2d46d: 0x6da23820, 0x2d46e: 0x6da23a20, 0x2d46f: 0x6da23c20, + 0x2d470: 0x6da23e20, 0x2d471: 0x6da24020, 0x2d472: 0x6da24220, 0x2d473: 0x6da24420, + 0x2d474: 0x6d796820, 0x2d475: 0x6da24620, 0x2d476: 0x6da24820, 0x2d477: 0x6da24a20, + 0x2d478: 0x6dc45820, 0x2d479: 0x6de16220, 0x2d47a: 0x6dc45a20, 0x2d47b: 0x6dc45c20, + 0x2d47c: 0x6dc45e20, 0x2d47d: 0x6de15820, 0x2d47e: 0x6de16420, 0x2d47f: 0x6de16620, + // Block 0xb52, offset 0x2d480 + 0x2d480: 0x6df96220, 0x2d481: 0x6df96420, 0x2d482: 0x6df96620, 0x2d483: 0x6df96820, + 0x2d484: 0x6df96a20, 0x2d485: 0x6df96c20, 0x2d486: 0x6df96e20, 0x2d487: 0x6e0d2a20, + 0x2d488: 0x6e0d2c20, 0x2d489: 0x6e0d2e20, 0x2d48a: 0x6e1c9a20, 0x2d48b: 0x6e1c9c20, + 0x2d48c: 0x6e1c9e20, 0x2d48d: 0x6e28a620, 0x2d48e: 0x6e31d820, 0x2d48f: 0x6e31da20, + 0x2d490: 0x6c019620, 0x2d491: 0x6c019820, 0x2d492: 0x6c019a20, 0x2d493: 0x6c019c20, + 0x2d494: 0x6c03f220, 0x2d495: 0x6c081220, 0x2d496: 0x6c0fa820, 0x2d497: 0x6c0faa20, + 0x2d498: 0x6c0fac20, 0x2d499: 0x6c0fae20, 0x2d49a: 0x6c1c6620, 0x2d49b: 0x6c1c6820, + 0x2d49c: 0x6c1c6a20, 0x2d49d: 0x6c1c6c20, 0x2d49e: 0x6c1c6e20, 0x2d49f: 0x6c2fca20, + 0x2d4a0: 0x6c2fcc20, 0x2d4a1: 0x6c2fce20, 0x2d4a2: 0x6c2fd020, 0x2d4a3: 0x6c2fd220, + 0x2d4a4: 0x6c2fd420, 0x2d4a5: 0x6c2fd620, 0x2d4a6: 0x6c2fd820, 0x2d4a7: 0x6c2fda20, + 0x2d4a8: 0x6c4a1e20, 0x2d4a9: 0x6c4a2020, 0x2d4aa: 0x6c4a2220, 0x2d4ab: 0x6c6be020, + 0x2d4ac: 0x6c6be220, 0x2d4ad: 0x6c6be420, 0x2d4ae: 0x6c930420, 0x2d4af: 0x6c930620, + 0x2d4b0: 0x6c930820, 0x2d4b1: 0x6cbf4420, 0x2d4b2: 0x6c930a20, 0x2d4b3: 0x6cbf6220, + 0x2d4b4: 0x6cef7a20, 0x2d4b5: 0x6d1f2a20, 0x2d4b6: 0x6cef9820, 0x2d4b7: 0x6d1f2c20, + 0x2d4b8: 0x6d79e220, 0x2d4b9: 0x6d79e420, 0x2d4ba: 0x6da29620, 0x2d4bb: 0x6da29820, + 0x2d4bc: 0x6de19020, 0x2d4bd: 0x6df98620, 0x2d4be: 0x6df98820, 0x2d4bf: 0x6e1cb420, + // Block 0xb53, offset 0x2d4c0 + 0x2d4c0: 0x6c01a020, 0x2d4c1: 0x6c082220, 0x2d4c2: 0x6c082420, 0x2d4c3: 0x6c082620, + 0x2d4c4: 0x6c082820, 0x2d4c5: 0x6c0fbc20, 0x2d4c6: 0x6c0fbe20, 0x2d4c7: 0x6c0fc020, + 0x2d4c8: 0x6c0fc220, 0x2d4c9: 0x6c0fc420, 0x2d4ca: 0x6c1c8e20, 0x2d4cb: 0x6c1c9020, + 0x2d4cc: 0x6c1c9220, 0x2d4cd: 0x6c1c9420, 0x2d4ce: 0x6c1c9620, 0x2d4cf: 0x6c1c9820, + 0x2d4d0: 0x6c1c9a20, 0x2d4d1: 0x6c1c9c20, 0x2d4d2: 0x6c1c9e20, 0x2d4d3: 0x6c2ffc20, + 0x2d4d4: 0x6c2ffe20, 0x2d4d5: 0x6c300020, 0x2d4d6: 0x6c300220, 0x2d4d7: 0x6c300420, + 0x2d4d8: 0x6c300620, 0x2d4d9: 0x6c300820, 0x2d4da: 0x6c300a20, 0x2d4db: 0x6c300c20, + 0x2d4dc: 0x6c300e20, 0x2d4dd: 0x6c301020, 0x2d4de: 0x6c301220, 0x2d4df: 0x6c301420, + 0x2d4e0: 0x6c301620, 0x2d4e1: 0x6c301820, 0x2d4e2: 0x6c4a4820, 0x2d4e3: 0x6c4a4a20, + 0x2d4e4: 0x6c4a4c20, 0x2d4e5: 0x6c4a4e20, 0x2d4e6: 0x6c4a5020, 0x2d4e7: 0x6c6bfe20, + 0x2d4e8: 0x6c4a5220, 0x2d4e9: 0x6c4a5420, 0x2d4ea: 0x6c4a5620, 0x2d4eb: 0x6c4a5820, + 0x2d4ec: 0x6c6c0020, 0x2d4ed: 0x6c6c0220, 0x2d4ee: 0x6c6c0420, 0x2d4ef: 0x6c6c0620, + 0x2d4f0: 0x6c6c0820, 0x2d4f1: 0x6c6c0a20, 0x2d4f2: 0x6c6c0c20, 0x2d4f3: 0x6c6c0e20, + 0x2d4f4: 0x6c6c1020, 0x2d4f5: 0x6c6c1220, 0x2d4f6: 0x6c6c1420, 0x2d4f7: 0x6c6c1620, + 0x2d4f8: 0x6c6c1820, 0x2d4f9: 0x6c6c1a20, 0x2d4fa: 0x6c6c1c20, 0x2d4fb: 0x6c6c1e20, + 0x2d4fc: 0x6c6c2020, 0x2d4fd: 0x6c6c2220, 0x2d4fe: 0x6c6c2420, 0x2d4ff: 0x6c933020, + // Block 0xb54, offset 0x2d500 + 0x2d500: 0x6c933220, 0x2d501: 0x6c933420, 0x2d502: 0x6c933620, 0x2d503: 0x6c933820, + 0x2d504: 0x6c933a20, 0x2d505: 0x6c933c20, 0x2d506: 0x6c933e20, 0x2d507: 0x6c934020, + 0x2d508: 0x6c934220, 0x2d509: 0x6c934420, 0x2d50a: 0x6cbf6820, 0x2d50b: 0x6cbf6a20, + 0x2d50c: 0x6cbf6c20, 0x2d50d: 0x6cbf6e20, 0x2d50e: 0x6cbf7020, 0x2d50f: 0x6cbf7220, + 0x2d510: 0x6cbf7420, 0x2d511: 0x6cbf7620, 0x2d512: 0x6cbf7820, 0x2d513: 0x6cbf7a20, + 0x2d514: 0x6cbf7c20, 0x2d515: 0x6cbf7e20, 0x2d516: 0x6cefa420, 0x2d517: 0x6cefa620, + 0x2d518: 0x6cefa820, 0x2d519: 0x6cefaa20, 0x2d51a: 0x6cefac20, 0x2d51b: 0x6cefae20, + 0x2d51c: 0x6cefb020, 0x2d51d: 0x6cefb220, 0x2d51e: 0x6d1f4420, 0x2d51f: 0x6d1f4620, + 0x2d520: 0x6d1f4820, 0x2d521: 0x6d1f4a20, 0x2d522: 0x6d1f4c20, 0x2d523: 0x6d1f4e20, + 0x2d524: 0x6d1f5020, 0x2d525: 0x6d1f5220, 0x2d526: 0x6d1f5420, 0x2d527: 0x6d1f5620, + 0x2d528: 0x6d1f5820, 0x2d529: 0x6d4cce20, 0x2d52a: 0x6cbf8020, 0x2d52b: 0x6d4cd020, + 0x2d52c: 0x6d4cd220, 0x2d52d: 0x6d4cd420, 0x2d52e: 0x6d4cd620, 0x2d52f: 0x6d79fe20, + 0x2d530: 0x6d7a0020, 0x2d531: 0x6da2a020, 0x2d532: 0x6da2a220, 0x2d533: 0x6de19a20, + 0x2d534: 0x6de19c20, 0x2d535: 0x6de19e20, 0x2d536: 0x6df99620, 0x2d537: 0x6e0d4820, + 0x2d538: 0x6c01a220, 0x2d539: 0x6c083220, 0x2d53a: 0x6c0fe220, 0x2d53b: 0x6c0fe420, + 0x2d53c: 0x6c0fe620, 0x2d53d: 0x6c1cbe20, 0x2d53e: 0x6c1cc020, 0x2d53f: 0x6c1cc220, + // Block 0xb55, offset 0x2d540 + 0x2d540: 0x6c304620, 0x2d541: 0x6c4a8e20, 0x2d542: 0x6c4a9020, 0x2d543: 0x6c6c7420, + 0x2d544: 0x6c6c7620, 0x2d545: 0x6c6c7820, 0x2d546: 0x6c4a9220, 0x2d547: 0x6c938220, + 0x2d548: 0x6c938420, 0x2d549: 0x6c938620, 0x2d54a: 0x6cbfd620, 0x2d54b: 0x6cbfd820, + 0x2d54c: 0x6cbfda20, 0x2d54d: 0x6d1fac20, 0x2d54e: 0x6d4d2220, 0x2d54f: 0x6c01a820, + 0x2d550: 0x6c03fc20, 0x2d551: 0x6c03fe20, 0x2d552: 0x6c083420, 0x2d553: 0x6c083620, + 0x2d554: 0x6c083820, 0x2d555: 0x6c083a20, 0x2d556: 0x6c0fec20, 0x2d557: 0x6c0fee20, + 0x2d558: 0x6c0ff020, 0x2d559: 0x6c305820, 0x2d55a: 0x6c305a20, 0x2d55b: 0x6c4aa020, + 0x2d55c: 0x6c4aa220, 0x2d55d: 0x6c4aa420, 0x2d55e: 0x6cbfec20, 0x2d55f: 0x6cf00020, + 0x2d560: 0x6cf00220, 0x2d561: 0x6d1fbc20, 0x2d562: 0x6c01ac20, 0x2d563: 0x6c040420, + 0x2d564: 0x6c040620, 0x2d565: 0x6c0ffc20, 0x2d566: 0x6c0ffe20, 0x2d567: 0x6c100020, + 0x2d568: 0x6c1cd820, 0x2d569: 0x6c1cda20, 0x2d56a: 0x6c1cdc20, 0x2d56b: 0x6c1cde20, + 0x2d56c: 0x6c1ce020, 0x2d56d: 0x6c306e20, 0x2d56e: 0x6c4abe20, 0x2d56f: 0x6c4ac020, + 0x2d570: 0x6cc00620, 0x2d571: 0x6cc00820, 0x2d572: 0x6cf01620, 0x2d573: 0x6cf01820, + 0x2d574: 0x6cf01a20, 0x2d575: 0x6d4d5020, 0x2d576: 0x6da2d220, 0x2d577: 0x6da2d420, + 0x2d578: 0x6c01b220, 0x2d579: 0x6c024c20, 0x2d57a: 0x6c040a20, 0x2d57b: 0x6c085220, + 0x2d57c: 0x6c085420, 0x2d57d: 0x6c100e20, 0x2d57e: 0x6c1cfa20, 0x2d57f: 0x6c1cfc20, + // Block 0xb56, offset 0x2d580 + 0x2d580: 0x6c1cfe20, 0x2d581: 0x6c1d0020, 0x2d582: 0x6c1d0220, 0x2d583: 0x6c1d0420, + 0x2d584: 0x6c308620, 0x2d585: 0x6c308820, 0x2d586: 0x6c308a20, 0x2d587: 0x6c308c20, + 0x2d588: 0x6c308e20, 0x2d589: 0x6c309020, 0x2d58a: 0x6c309220, 0x2d58b: 0x6c4ad620, + 0x2d58c: 0x6c4ad820, 0x2d58d: 0x6c4ada20, 0x2d58e: 0x6c4adc20, 0x2d58f: 0x6c4ade20, + 0x2d590: 0x6c6cae20, 0x2d591: 0x6c6cb020, 0x2d592: 0x6c6cb220, 0x2d593: 0x6c6cb420, + 0x2d594: 0x6c6cb620, 0x2d595: 0x6c6cb820, 0x2d596: 0x6c6cba20, 0x2d597: 0x6c6cbc20, + 0x2d598: 0x6c6cbe20, 0x2d599: 0x6c93d020, 0x2d59a: 0x6c93d220, 0x2d59b: 0x6c93d420, + 0x2d59c: 0x6c93d620, 0x2d59d: 0x6c93d820, 0x2d59e: 0x6cc02420, 0x2d59f: 0x6cc02620, + 0x2d5a0: 0x6c941020, 0x2d5a1: 0x6cc02820, 0x2d5a2: 0x6d1fe020, 0x2d5a3: 0x6d1fe220, + 0x2d5a4: 0x6d4d6220, 0x2d5a5: 0x6d4d6420, 0x2d5a6: 0x6d4d6620, 0x2d5a7: 0x6d4d6820, + 0x2d5a8: 0x6da2da20, 0x2d5a9: 0x6dc4c620, 0x2d5aa: 0x6dc4c820, 0x2d5ab: 0x6de1c020, + 0x2d5ac: 0x6e0d6420, 0x2d5ad: 0x6e31f020, 0x2d5ae: 0x6c01b620, 0x2d5af: 0x6c040e20, + 0x2d5b0: 0x6c102820, 0x2d5b1: 0x6c01ba20, 0x2d5b2: 0x6c041220, 0x2d5b3: 0x6c086c20, + 0x2d5b4: 0x6c086e20, 0x2d5b5: 0x6c087020, 0x2d5b6: 0x6c087220, 0x2d5b7: 0x6c087420, + 0x2d5b8: 0x6c104620, 0x2d5b9: 0x6c104820, 0x2d5ba: 0x6c104a20, 0x2d5bb: 0x6c104c20, + 0x2d5bc: 0x6c104e20, 0x2d5bd: 0x6c105020, 0x2d5be: 0x6c105220, 0x2d5bf: 0x6c105420, + // Block 0xb57, offset 0x2d5c0 + 0x2d5c0: 0x6c105620, 0x2d5c1: 0x6c105820, 0x2d5c2: 0x6c105a20, 0x2d5c3: 0x6c105c20, + 0x2d5c4: 0x6c1d3c20, 0x2d5c5: 0x6c1d3e20, 0x2d5c6: 0x6c1d4020, 0x2d5c7: 0x6c1d4220, + 0x2d5c8: 0x6c1d4420, 0x2d5c9: 0x6c1d4620, 0x2d5ca: 0x6c1d4820, 0x2d5cb: 0x6c1d4a20, + 0x2d5cc: 0x6c1d4c20, 0x2d5cd: 0x6c1dd220, 0x2d5ce: 0x6c1d4e20, 0x2d5cf: 0x6c1d5020, + 0x2d5d0: 0x6c1d5220, 0x2d5d1: 0x6c1d5420, 0x2d5d2: 0x6c1d5620, 0x2d5d3: 0x6c1d5820, + 0x2d5d4: 0x6c1d5a20, 0x2d5d5: 0x6c1d5c20, 0x2d5d6: 0x6c1d5e20, 0x2d5d7: 0x6c1d6020, + 0x2d5d8: 0x6c1d6220, 0x2d5d9: 0x6c1d6420, 0x2d5da: 0x6c1d6620, 0x2d5db: 0x6c1d6820, + 0x2d5dc: 0x6c1d6a20, 0x2d5dd: 0x6c30ce20, 0x2d5de: 0x6c30d020, 0x2d5df: 0x6c30d220, + 0x2d5e0: 0x6c30d420, 0x2d5e1: 0x6c30d620, 0x2d5e2: 0x6c30d820, 0x2d5e3: 0x6c30da20, + 0x2d5e4: 0x6c30dc20, 0x2d5e5: 0x6c30de20, 0x2d5e6: 0x6c30e020, 0x2d5e7: 0x6c30e220, + 0x2d5e8: 0x6c30e420, 0x2d5e9: 0x6c30e620, 0x2d5ea: 0x6c30e820, 0x2d5eb: 0x6c30ea20, + 0x2d5ec: 0x6c30ec20, 0x2d5ed: 0x6c30ee20, 0x2d5ee: 0x6c30f020, 0x2d5ef: 0x6c30f220, + 0x2d5f0: 0x6c30f420, 0x2d5f1: 0x6c30f620, 0x2d5f2: 0x6c30f820, 0x2d5f3: 0x6c30fa20, + 0x2d5f4: 0x6c30fc20, 0x2d5f5: 0x6c30fe20, 0x2d5f6: 0x6c310020, 0x2d5f7: 0x6c310220, + 0x2d5f8: 0x6c310420, 0x2d5f9: 0x6c310620, 0x2d5fa: 0x6c310820, 0x2d5fb: 0x6c310a20, + 0x2d5fc: 0x6c310c20, 0x2d5fd: 0x6c310e20, 0x2d5fe: 0x6c311020, 0x2d5ff: 0x6c311220, + // Block 0xb58, offset 0x2d600 + 0x2d600: 0x6c311420, 0x2d601: 0x6c311620, 0x2d602: 0x6c311820, 0x2d603: 0x6c311a20, + 0x2d604: 0x6c311c20, 0x2d605: 0x6c311e20, 0x2d606: 0x6c4b2620, 0x2d607: 0x6c4b2820, + 0x2d608: 0x6c4b2a20, 0x2d609: 0x6c4b2c20, 0x2d60a: 0x6c4b2e20, 0x2d60b: 0x6c4b3020, + 0x2d60c: 0x6c4b3220, 0x2d60d: 0x6c4b3420, 0x2d60e: 0x6c4b3620, 0x2d60f: 0x6c4b3820, + 0x2d610: 0x6c4b3a20, 0x2d611: 0x6c4b3c20, 0x2d612: 0x6c4b3e20, 0x2d613: 0x6c4b4020, + 0x2d614: 0x6c4b4220, 0x2d615: 0x6c4b4420, 0x2d616: 0x6c4b4620, 0x2d617: 0x6c4b4820, + 0x2d618: 0x6c4b4a20, 0x2d619: 0x6c4b4c20, 0x2d61a: 0x6c4b4e20, 0x2d61b: 0x6c4b5020, + 0x2d61c: 0x6c4b5220, 0x2d61d: 0x6c4b5420, 0x2d61e: 0x6c4b5620, 0x2d61f: 0x6c4b5820, + 0x2d620: 0x6c4b5a20, 0x2d621: 0x6c4b5c20, 0x2d622: 0x6c4b5e20, 0x2d623: 0x6c4b6020, + 0x2d624: 0x6c4b6220, 0x2d625: 0x6c4b6420, 0x2d626: 0x6c4b6620, 0x2d627: 0x6c4b6820, + 0x2d628: 0x6c6d2020, 0x2d629: 0x6c6d2220, 0x2d62a: 0x6c6d2420, 0x2d62b: 0x6c6d2620, + 0x2d62c: 0x6c6d2820, 0x2d62d: 0x6c6d2a20, 0x2d62e: 0x6c6d2c20, 0x2d62f: 0x6c6d2e20, + 0x2d630: 0x6c6d3020, 0x2d631: 0x6c6d3220, 0x2d632: 0x6c6d3420, 0x2d633: 0x6c6d3620, + 0x2d634: 0x6c6d3820, 0x2d635: 0x6c6d3a20, 0x2d636: 0x6c6d3c20, 0x2d637: 0x6c6d3e20, + 0x2d638: 0x6c4bcc20, 0x2d639: 0x6c6d4020, 0x2d63a: 0x6c6d4220, 0x2d63b: 0x6c6d4420, + 0x2d63c: 0x6c6d4620, 0x2d63d: 0x6c6d4820, 0x2d63e: 0x6c6d4a20, 0x2d63f: 0x6c6d4c20, + // Block 0xb59, offset 0x2d640 + 0x2d640: 0x6c6d4e20, 0x2d641: 0x6c6d5020, 0x2d642: 0x6c6d5220, 0x2d643: 0x6c6d5420, + 0x2d644: 0x6c6d5620, 0x2d645: 0x6c6d5820, 0x2d646: 0x6c943420, 0x2d647: 0x6c943620, + 0x2d648: 0x6c943820, 0x2d649: 0x6c943a20, 0x2d64a: 0x6c943c20, 0x2d64b: 0x6c943e20, + 0x2d64c: 0x6c944020, 0x2d64d: 0x6c944220, 0x2d64e: 0x6c944420, 0x2d64f: 0x6c944620, + 0x2d650: 0x6c944820, 0x2d651: 0x6c944a20, 0x2d652: 0x6c944c20, 0x2d653: 0x6c944e20, + 0x2d654: 0x6c945020, 0x2d655: 0x6c945220, 0x2d656: 0x6c945420, 0x2d657: 0x6c945620, + 0x2d658: 0x6c945820, 0x2d659: 0x6c945a20, 0x2d65a: 0x6c945c20, 0x2d65b: 0x6c945e20, + 0x2d65c: 0x6c946020, 0x2d65d: 0x6c946220, 0x2d65e: 0x6c946420, 0x2d65f: 0x6c946620, + 0x2d660: 0x6c946820, 0x2d661: 0x6c946a20, 0x2d662: 0x6c946c20, 0x2d663: 0x6c946e20, + 0x2d664: 0x6c947020, 0x2d665: 0x6c947220, 0x2d666: 0x6c947420, 0x2d667: 0x6c947620, + 0x2d668: 0x6c947820, 0x2d669: 0x6c947a20, 0x2d66a: 0x6c947c20, 0x2d66b: 0x6c947e20, + 0x2d66c: 0x6c948020, 0x2d66d: 0x6c948220, 0x2d66e: 0x6c948420, 0x2d66f: 0x6c948620, + 0x2d670: 0x6c948820, 0x2d671: 0x6cc08420, 0x2d672: 0x6cc08620, 0x2d673: 0x6cc08820, + 0x2d674: 0x6cc08a20, 0x2d675: 0x6cc08c20, 0x2d676: 0x6cc08e20, 0x2d677: 0x6cc09020, + 0x2d678: 0x6cc09220, 0x2d679: 0x6cc09420, 0x2d67a: 0x6cc09620, 0x2d67b: 0x6cc09820, + 0x2d67c: 0x6cc09a20, 0x2d67d: 0x6cc09c20, 0x2d67e: 0x6cc09e20, 0x2d67f: 0x6cc0a020, + // Block 0xb5a, offset 0x2d680 + 0x2d680: 0x6cc0a220, 0x2d681: 0x6cc0a420, 0x2d682: 0x6cc0a620, 0x2d683: 0x6cc0a820, + 0x2d684: 0x6cc0aa20, 0x2d685: 0x6cc0ac20, 0x2d686: 0x6cc0ae20, 0x2d687: 0x6cc0b020, + 0x2d688: 0x6cc0b220, 0x2d689: 0x6cc0b420, 0x2d68a: 0x6cf07a20, 0x2d68b: 0x6cc0b620, + 0x2d68c: 0x6cc0b820, 0x2d68d: 0x6cc0ba20, 0x2d68e: 0x6cc0bc20, 0x2d68f: 0x6cc0be20, + 0x2d690: 0x6cc0c020, 0x2d691: 0x6cc0c220, 0x2d692: 0x6cc0c420, 0x2d693: 0x6cc0c620, + 0x2d694: 0x6cc0c820, 0x2d695: 0x6cc0ca20, 0x2d696: 0x6cc0cc20, 0x2d697: 0x6cc0ce20, + 0x2d698: 0x6cc0d020, 0x2d699: 0x6cc0d220, 0x2d69a: 0x6cc0d420, 0x2d69b: 0x6cc0d620, + 0x2d69c: 0x6cc0d820, 0x2d69d: 0x6cc0da20, 0x2d69e: 0x6cf07c20, 0x2d69f: 0x6cf07e20, + 0x2d6a0: 0x6cf08020, 0x2d6a1: 0x6cf08220, 0x2d6a2: 0x6cf08420, 0x2d6a3: 0x6cf08620, + 0x2d6a4: 0x6cf08820, 0x2d6a5: 0x6cf08a20, 0x2d6a6: 0x6cf08c20, 0x2d6a7: 0x6cf08e20, + 0x2d6a8: 0x6cf09020, 0x2d6a9: 0x6cf09220, 0x2d6aa: 0x6cf09420, 0x2d6ab: 0x6cc16a20, + 0x2d6ac: 0x6cf09620, 0x2d6ad: 0x6cf09820, 0x2d6ae: 0x6cf09a20, 0x2d6af: 0x6cf09c20, + 0x2d6b0: 0x6cf09e20, 0x2d6b1: 0x6cf0a020, 0x2d6b2: 0x6cf0a220, 0x2d6b3: 0x6cf0a420, + 0x2d6b4: 0x6cf0a620, 0x2d6b5: 0x6cf0a820, 0x2d6b6: 0x6cf0aa20, 0x2d6b7: 0x6d201820, + 0x2d6b8: 0x6d201a20, 0x2d6b9: 0x6d201c20, 0x2d6ba: 0x6d201e20, 0x2d6bb: 0x6d202020, + 0x2d6bc: 0x6d202220, 0x2d6bd: 0x6d202420, 0x2d6be: 0x6d202620, 0x2d6bf: 0x6d202820, + // Block 0xb5b, offset 0x2d6c0 + 0x2d6c0: 0x6d202a20, 0x2d6c1: 0x6d202c20, 0x2d6c2: 0x6d202e20, 0x2d6c3: 0x6d203020, + 0x2d6c4: 0x6d203220, 0x2d6c5: 0x6d203420, 0x2d6c6: 0x6d203620, 0x2d6c7: 0x6d203820, + 0x2d6c8: 0x6d203a20, 0x2d6c9: 0x6d203c20, 0x2d6ca: 0x6d203e20, 0x2d6cb: 0x6d204020, + 0x2d6cc: 0x6d204220, 0x2d6cd: 0x6d204420, 0x2d6ce: 0x6d204620, 0x2d6cf: 0x6d4dac20, + 0x2d6d0: 0x6d4dae20, 0x2d6d1: 0x6d4db020, 0x2d6d2: 0x6d4db220, 0x2d6d3: 0x6d4db420, + 0x2d6d4: 0x6d4db620, 0x2d6d5: 0x6d4db820, 0x2d6d6: 0x6d4dba20, 0x2d6d7: 0x6d4dbc20, + 0x2d6d8: 0x6d4dbe20, 0x2d6d9: 0x6d4dc020, 0x2d6da: 0x6d4dc220, 0x2d6db: 0x6d4dc420, + 0x2d6dc: 0x6d4dc620, 0x2d6dd: 0x6d4dc820, 0x2d6de: 0x6d4dca20, 0x2d6df: 0x6d4dcc20, + 0x2d6e0: 0x6d4dce20, 0x2d6e1: 0x6d4dd020, 0x2d6e2: 0x6d4dd220, 0x2d6e3: 0x6d4dd420, + 0x2d6e4: 0x6d4dd620, 0x2d6e5: 0x6d4dd820, 0x2d6e6: 0x6d7a6e20, 0x2d6e7: 0x6d7a7020, + 0x2d6e8: 0x6d7a7220, 0x2d6e9: 0x6d7a7420, 0x2d6ea: 0x6d7a7620, 0x2d6eb: 0x6d7a7820, + 0x2d6ec: 0x6d7a7a20, 0x2d6ed: 0x6d7a7c20, 0x2d6ee: 0x6d7a7e20, 0x2d6ef: 0x6d7a8020, + 0x2d6f0: 0x6d7a8220, 0x2d6f1: 0x6d7a8420, 0x2d6f2: 0x6d7a8620, 0x2d6f3: 0x6d7a8820, + 0x2d6f4: 0x6d7a8a20, 0x2d6f5: 0x6d7a8c20, 0x2d6f6: 0x6d7a8e20, 0x2d6f7: 0x6da2ec20, + 0x2d6f8: 0x6da2ee20, 0x2d6f9: 0x6da2f020, 0x2d6fa: 0x6da2f220, 0x2d6fb: 0x6da35220, + 0x2d6fc: 0x6da2f420, 0x2d6fd: 0x6da2f620, 0x2d6fe: 0x6da2f820, 0x2d6ff: 0x6da2fa20, + // Block 0xb5c, offset 0x2d700 + 0x2d700: 0x6dc4d620, 0x2d701: 0x6dc4d820, 0x2d702: 0x6dc4da20, 0x2d703: 0x6de1d820, + 0x2d704: 0x6de1da20, 0x2d705: 0x6de1dc20, 0x2d706: 0x6df9b220, 0x2d707: 0x6df9b420, + 0x2d708: 0x6df9b620, 0x2d709: 0x6df9b820, 0x2d70a: 0x6df9ba20, 0x2d70b: 0x6e0d6e20, + 0x2d70c: 0x6df9bc20, 0x2d70d: 0x6e0d7420, 0x2d70e: 0x6e1cd820, 0x2d70f: 0x6e0d7620, + 0x2d710: 0x6e0d7820, 0x2d711: 0x6e1cda20, 0x2d712: 0x6e1cdc20, 0x2d713: 0x6e1cde20, + 0x2d714: 0x6e1ce020, 0x2d715: 0x6e1ce220, 0x2d716: 0x6e28b220, 0x2d717: 0x6e1ce420, + 0x2d718: 0x6e28b420, 0x2d719: 0x6e31f420, 0x2d71a: 0x6e28b620, 0x2d71b: 0x6c01bc20, + 0x2d71c: 0x6c00c620, 0x2d71d: 0x6c01be20, 0x2d71e: 0x6c109420, 0x2d71f: 0x6c109620, + 0x2d720: 0x6c1dd420, 0x2d721: 0x6c272c20, 0x2d722: 0x6c954a20, 0x2d723: 0x6c954c20, + 0x2d724: 0x6d4e4820, 0x2d725: 0x6c01c420, 0x2d726: 0x6c089220, 0x2d727: 0x6c089420, + 0x2d728: 0x6c089620, 0x2d729: 0x6c10a220, 0x2d72a: 0x6c10a420, 0x2d72b: 0x6c1dde20, + 0x2d72c: 0x6c4bda20, 0x2d72d: 0x6c4bdc20, 0x2d72e: 0x6c6dec20, 0x2d72f: 0x6cc17020, + 0x2d730: 0x6cf11020, 0x2d731: 0x6c01c620, 0x2d732: 0x6c01c820, 0x2d733: 0x6c01ca20, + 0x2d734: 0x6c042820, 0x2d735: 0x6c1de620, 0x2d736: 0x6c318a20, 0x2d737: 0x6c4be020, + 0x2d738: 0x6c4be220, 0x2d739: 0x6c4be420, 0x2d73a: 0x6c4be620, 0x2d73b: 0x6c4be820, + 0x2d73c: 0x6c6df220, 0x2d73d: 0x6cc17820, 0x2d73e: 0x6c01cc20, 0x2d73f: 0x6c042c20, + // Block 0xb5d, offset 0x2d740 + 0x2d740: 0x6c042e20, 0x2d741: 0x6c043020, 0x2d742: 0x6c08aa20, 0x2d743: 0x6c08ac20, + 0x2d744: 0x6c08ae20, 0x2d745: 0x6c08b020, 0x2d746: 0x6c10b420, 0x2d747: 0x6c10b620, + 0x2d748: 0x6c10b820, 0x2d749: 0x6c1df620, 0x2d74a: 0x6c1df820, 0x2d74b: 0x6c1dfa20, + 0x2d74c: 0x6c1dfc20, 0x2d74d: 0x6c1dfe20, 0x2d74e: 0x6c1e0020, 0x2d74f: 0x6c1e0220, + 0x2d750: 0x6c1e0420, 0x2d751: 0x6c319a20, 0x2d752: 0x6c319c20, 0x2d753: 0x6c319e20, + 0x2d754: 0x6c31a020, 0x2d755: 0x6c31a220, 0x2d756: 0x6c31a420, 0x2d757: 0x6c31a620, + 0x2d758: 0x6c31a820, 0x2d759: 0x6c31aa20, 0x2d75a: 0x6c31ac20, 0x2d75b: 0x6c31ae20, + 0x2d75c: 0x6c31b020, 0x2d75d: 0x6c4bfc20, 0x2d75e: 0x6c4bfe20, 0x2d75f: 0x6c4c0020, + 0x2d760: 0x6c4c0220, 0x2d761: 0x6c4c0420, 0x2d762: 0x6c4c0620, 0x2d763: 0x6c4c0820, + 0x2d764: 0x6c4c0a20, 0x2d765: 0x6c4c0c20, 0x2d766: 0x6c4c0e20, 0x2d767: 0x6c4c1020, + 0x2d768: 0x6c6e0020, 0x2d769: 0x6c6e0220, 0x2d76a: 0x6c6e0420, 0x2d76b: 0x6c6e0620, + 0x2d76c: 0x6c6e0820, 0x2d76d: 0x6c6e0a20, 0x2d76e: 0x6c6e0c20, 0x2d76f: 0x6c6e0e20, + 0x2d770: 0x6c6e1020, 0x2d771: 0x6c6e1220, 0x2d772: 0x6c957020, 0x2d773: 0x6c957220, + 0x2d774: 0x6c957420, 0x2d775: 0x6c957620, 0x2d776: 0x6c957820, 0x2d777: 0x6c957a20, + 0x2d778: 0x6c957c20, 0x2d779: 0x6c957e20, 0x2d77a: 0x6c958020, 0x2d77b: 0x6c958220, + 0x2d77c: 0x6c958420, 0x2d77d: 0x6cc19820, 0x2d77e: 0x6c95ca20, 0x2d77f: 0x6cc19a20, + // Block 0xb5e, offset 0x2d780 + 0x2d780: 0x6cc19c20, 0x2d781: 0x6cc19e20, 0x2d782: 0x6cc1a020, 0x2d783: 0x6cc1a220, + 0x2d784: 0x6cc1a420, 0x2d785: 0x6cc1a620, 0x2d786: 0x6cc1a820, 0x2d787: 0x6cc1aa20, + 0x2d788: 0x6cc1f220, 0x2d789: 0x6cc1ac20, 0x2d78a: 0x6cf12420, 0x2d78b: 0x6cf12620, + 0x2d78c: 0x6cf12820, 0x2d78d: 0x6cf12a20, 0x2d78e: 0x6cf12c20, 0x2d78f: 0x6cf12e20, + 0x2d790: 0x6d082820, 0x2d791: 0x6d20c820, 0x2d792: 0x6d20ca20, 0x2d793: 0x6d20cc20, + 0x2d794: 0x6d20ce20, 0x2d795: 0x6d20d020, 0x2d796: 0x6d20d220, 0x2d797: 0x6d20d420, + 0x2d798: 0x6d20d620, 0x2d799: 0x6d20d820, 0x2d79a: 0x6d4e5e20, 0x2d79b: 0x6d20da20, + 0x2d79c: 0x6d4e6020, 0x2d79d: 0x6d4e6220, 0x2d79e: 0x6d4e6420, 0x2d79f: 0x6d4e6620, + 0x2d7a0: 0x6d4e6820, 0x2d7a1: 0x6d4e6a20, 0x2d7a2: 0x6d4e6c20, 0x2d7a3: 0x6d210620, + 0x2d7a4: 0x6d4e6e20, 0x2d7a5: 0x6d4e7020, 0x2d7a6: 0x6d7aee20, 0x2d7a7: 0x6d7af020, + 0x2d7a8: 0x6d7af220, 0x2d7a9: 0x6d4ea820, 0x2d7aa: 0x6da36020, 0x2d7ab: 0x6da36220, + 0x2d7ac: 0x6da36420, 0x2d7ad: 0x6dc51020, 0x2d7ae: 0x6dc51220, 0x2d7af: 0x6d7b1a20, + 0x2d7b0: 0x6de21220, 0x2d7b1: 0x6df9e020, 0x2d7b2: 0x6c01ce20, 0x2d7b3: 0x6c08ba20, + 0x2d7b4: 0x6c10da20, 0x2d7b5: 0x6c10dc20, 0x2d7b6: 0x6c10de20, 0x2d7b7: 0x6c31dc20, + 0x2d7b8: 0x6c31de20, 0x2d7b9: 0x6cf15a20, 0x2d7ba: 0x6c01d220, 0x2d7bb: 0x6c043220, + 0x2d7bc: 0x6c08be20, 0x2d7bd: 0x6c4c5e20, 0x2d7be: 0x6cc20020, 0x2d7bf: 0x6c01d420, + // Block 0xb5f, offset 0x2d7c0 + 0x2d7c0: 0x6c08c820, 0x2d7c1: 0x6c08ca20, 0x2d7c2: 0x6c08cc20, 0x2d7c3: 0x6c08ce20, + 0x2d7c4: 0x6c10ea20, 0x2d7c5: 0x6c10ec20, 0x2d7c6: 0x6c10ee20, 0x2d7c7: 0x6c1e4620, + 0x2d7c8: 0x6c1e4820, 0x2d7c9: 0x6c1e4a20, 0x2d7ca: 0x6c1e4c20, 0x2d7cb: 0x6c1e4e20, + 0x2d7cc: 0x6c1e5020, 0x2d7cd: 0x6c1e5220, 0x2d7ce: 0x6c1e5420, 0x2d7cf: 0x6c1e5620, + 0x2d7d0: 0x6c1e5820, 0x2d7d1: 0x6c1e5a20, 0x2d7d2: 0x6c1e5c20, 0x2d7d3: 0x6c1e5e20, + 0x2d7d4: 0x6c1e6020, 0x2d7d5: 0x6c320220, 0x2d7d6: 0x6c320420, 0x2d7d7: 0x6c320620, + 0x2d7d8: 0x6c31f020, 0x2d7d9: 0x6c320820, 0x2d7da: 0x6c320a20, 0x2d7db: 0x6c4c6620, + 0x2d7dc: 0x6c320c20, 0x2d7dd: 0x6c320e20, 0x2d7de: 0x6c321020, 0x2d7df: 0x6c321220, + 0x2d7e0: 0x6c4c7620, 0x2d7e1: 0x6c4c7820, 0x2d7e2: 0x6c4c7a20, 0x2d7e3: 0x6c4c7c20, + 0x2d7e4: 0x6c4c7e20, 0x2d7e5: 0x6c4c8020, 0x2d7e6: 0x6c4c8220, 0x2d7e7: 0x6c6e6a20, + 0x2d7e8: 0x6c6e6c20, 0x2d7e9: 0x6c6e6e20, 0x2d7ea: 0x6c6e7020, 0x2d7eb: 0x6c6e7220, + 0x2d7ec: 0x6c6e7420, 0x2d7ed: 0x6c6e7620, 0x2d7ee: 0x6c6e7820, 0x2d7ef: 0x6c6e7a20, + 0x2d7f0: 0x6c4cac20, 0x2d7f1: 0x6c95e220, 0x2d7f2: 0x6c95e420, 0x2d7f3: 0x6c95e620, + 0x2d7f4: 0x6c95e820, 0x2d7f5: 0x6c95ea20, 0x2d7f6: 0x6c95ec20, 0x2d7f7: 0x6c95ee20, + 0x2d7f8: 0x6c95f020, 0x2d7f9: 0x6c95f220, 0x2d7fa: 0x6c95f420, 0x2d7fb: 0x6c95f620, + 0x2d7fc: 0x6c95f820, 0x2d7fd: 0x6cc20c20, 0x2d7fe: 0x6c965020, 0x2d7ff: 0x6cc20e20, + // Block 0xb60, offset 0x2d800 + 0x2d800: 0x6cc21020, 0x2d801: 0x6cc21220, 0x2d802: 0x6cc21420, 0x2d803: 0x6cc21620, + 0x2d804: 0x6cc26420, 0x2d805: 0x6cf16c20, 0x2d806: 0x6cf16e20, 0x2d807: 0x6cf17020, + 0x2d808: 0x6cf17220, 0x2d809: 0x6cf17420, 0x2d80a: 0x6cc21820, 0x2d80b: 0x6cf17620, + 0x2d80c: 0x6cf17820, 0x2d80d: 0x6d211e20, 0x2d80e: 0x6d212020, 0x2d80f: 0x6d212220, + 0x2d810: 0x6d212420, 0x2d811: 0x6d212620, 0x2d812: 0x6d212820, 0x2d813: 0x6d212a20, + 0x2d814: 0x6d212c20, 0x2d815: 0x6d212e20, 0x2d816: 0x6d213020, 0x2d817: 0x6d213220, + 0x2d818: 0x6d213420, 0x2d819: 0x6d216c20, 0x2d81a: 0x6d4ebc20, 0x2d81b: 0x6d4ebe20, + 0x2d81c: 0x6d216e20, 0x2d81d: 0x6d4ec020, 0x2d81e: 0x6d4ec220, 0x2d81f: 0x6d4ec420, + 0x2d820: 0x6d4ec620, 0x2d821: 0x6d4ec820, 0x2d822: 0x6d4eca20, 0x2d823: 0x6d4ecc20, + 0x2d824: 0x6d4ece20, 0x2d825: 0x6d7b2e20, 0x2d826: 0x6d7b3020, 0x2d827: 0x6d7b3220, + 0x2d828: 0x6d7b3420, 0x2d829: 0x6d7b3620, 0x2d82a: 0x6d7b3820, 0x2d82b: 0x6dc52020, + 0x2d82c: 0x6de23220, 0x2d82d: 0x6de23420, 0x2d82e: 0x6df9ee20, 0x2d82f: 0x6df9f020, + 0x2d830: 0x6df9f220, 0x2d831: 0x6e0da020, 0x2d832: 0x6e1d1220, 0x2d833: 0x6e388020, + 0x2d834: 0x6c01d620, 0x2d835: 0x6c110a20, 0x2d836: 0x6c324220, 0x2d837: 0x6c1e8420, + 0x2d838: 0x6c324620, 0x2d839: 0x6c324820, 0x2d83a: 0x6c4cae20, 0x2d83b: 0x6c4cb020, + 0x2d83c: 0x6c4cb220, 0x2d83d: 0x6c6eba20, 0x2d83e: 0x6c01d820, 0x2d83f: 0x6c043c20, + // Block 0xb61, offset 0x2d840 + 0x2d840: 0x6c043e20, 0x2d841: 0x6c08da20, 0x2d842: 0x6c110e20, 0x2d843: 0x6c1e9020, + 0x2d844: 0x6c1e9220, 0x2d845: 0x6c1e9420, 0x2d846: 0x6c324c20, 0x2d847: 0x6c4cc220, + 0x2d848: 0x6c4cc420, 0x2d849: 0x6c6ec220, 0x2d84a: 0x6d218220, 0x2d84b: 0x6c01dc20, + 0x2d84c: 0x6c044220, 0x2d84d: 0x6c08e020, 0x2d84e: 0x6c111620, 0x2d84f: 0x6c111820, + 0x2d850: 0x6c111a20, 0x2d851: 0x6cc27a20, 0x2d852: 0x6cf1ba20, 0x2d853: 0x6c01e020, + 0x2d854: 0x6c044a20, 0x2d855: 0x6c044c20, 0x2d856: 0x6c044e20, 0x2d857: 0x6c08e220, + 0x2d858: 0x6c08e420, 0x2d859: 0x6c112820, 0x2d85a: 0x6c112a20, 0x2d85b: 0x6c112c20, + 0x2d85c: 0x6c112e20, 0x2d85d: 0x6c1eb620, 0x2d85e: 0x6c1eb820, 0x2d85f: 0x6c1eba20, + 0x2d860: 0x6c1ebc20, 0x2d861: 0x6c326820, 0x2d862: 0x6c326a20, 0x2d863: 0x6c326c20, + 0x2d864: 0x6c326e20, 0x2d865: 0x6c327020, 0x2d866: 0x6c327220, 0x2d867: 0x6c327420, + 0x2d868: 0x6c327620, 0x2d869: 0x6c327820, 0x2d86a: 0x6c327a20, 0x2d86b: 0x6c4cf820, + 0x2d86c: 0x6c4cfa20, 0x2d86d: 0x6c4cfc20, 0x2d86e: 0x6c4cfe20, 0x2d86f: 0x6c4d0020, + 0x2d870: 0x6c6edc20, 0x2d871: 0x6c6ede20, 0x2d872: 0x6c6ee020, 0x2d873: 0x6c6ee220, + 0x2d874: 0x6c966e20, 0x2d875: 0x6c967020, 0x2d876: 0x6c967220, 0x2d877: 0x6c967420, + 0x2d878: 0x6c967620, 0x2d879: 0x6c967820, 0x2d87a: 0x6cc28420, 0x2d87b: 0x6cc28620, + 0x2d87c: 0x6cc28820, 0x2d87d: 0x6cc28a20, 0x2d87e: 0x6cc28c20, 0x2d87f: 0x6cf1c820, + // Block 0xb62, offset 0x2d880 + 0x2d880: 0x6cf1ca20, 0x2d881: 0x6cf1cc20, 0x2d882: 0x6cf1ce20, 0x2d883: 0x6d218620, + 0x2d884: 0x6d218820, 0x2d885: 0x6d218a20, 0x2d886: 0x6d21a620, 0x2d887: 0x6d4f0c20, + 0x2d888: 0x6d4f0e20, 0x2d889: 0x6d4f1020, 0x2d88a: 0x6d7b6820, 0x2d88b: 0x6d7b6a20, + 0x2d88c: 0x6da3aa20, 0x2d88d: 0x6dc54020, 0x2d88e: 0x6e1d2220, 0x2d88f: 0x6e28ca20, + 0x2d890: 0x6c01e820, 0x2d891: 0x6c01ea20, 0x2d892: 0x6c08f820, 0x2d893: 0x6c114a20, + 0x2d894: 0x6c329c20, 0x2d895: 0x6c329e20, 0x2d896: 0x6c4d2a20, 0x2d897: 0x6c96a020, + 0x2d898: 0x6cc2a620, 0x2d899: 0x6cf1e020, 0x2d89a: 0x6cf1e220, 0x2d89b: 0x6d7b7a20, + 0x2d89c: 0x6d7b7c20, 0x2d89d: 0x6dc54e20, 0x2d89e: 0x6dc55020, 0x2d89f: 0x6de26820, + 0x2d8a0: 0x6e3d2420, 0x2d8a1: 0x6c01ec20, 0x2d8a2: 0x6c1ee020, 0x2d8a3: 0x6c1ee220, + 0x2d8a4: 0x6c1ee420, 0x2d8a5: 0x6c4d3420, 0x2d8a6: 0x6c4d3620, 0x2d8a7: 0x6c6f0020, + 0x2d8a8: 0x6c6f0220, 0x2d8a9: 0x6c96ac20, 0x2d8aa: 0x6cae2020, 0x2d8ab: 0x6c96ae20, + 0x2d8ac: 0x6c96b020, 0x2d8ad: 0x6cc2b220, 0x2d8ae: 0x6cf1ea20, 0x2d8af: 0x6d21b420, + 0x2d8b0: 0x6d21b620, 0x2d8b1: 0x6d4f2820, 0x2d8b2: 0x6e1d2820, 0x2d8b3: 0x6c01ee20, + 0x2d8b4: 0x6c116220, 0x2d8b5: 0x6c116420, 0x2d8b6: 0x6c1eee20, 0x2d8b7: 0x6c1ef020, + 0x2d8b8: 0x6c1ef220, 0x2d8b9: 0x6c1ef420, 0x2d8ba: 0x6c1ef620, 0x2d8bb: 0x6c1ef820, + 0x2d8bc: 0x6c32b820, 0x2d8bd: 0x6c32ba20, 0x2d8be: 0x6c32bc20, 0x2d8bf: 0x6c32be20, + // Block 0xb63, offset 0x2d8c0 + 0x2d8c0: 0x6c32c020, 0x2d8c1: 0x6c32c220, 0x2d8c2: 0x6c32c420, 0x2d8c3: 0x6c32c620, + 0x2d8c4: 0x6c32c820, 0x2d8c5: 0x6c4d4c20, 0x2d8c6: 0x6c4d4e20, 0x2d8c7: 0x6c4d5020, + 0x2d8c8: 0x6c4d5220, 0x2d8c9: 0x6c4d5420, 0x2d8ca: 0x6c4d5620, 0x2d8cb: 0x6c4d5820, + 0x2d8cc: 0x6c4d5a20, 0x2d8cd: 0x6c4d5c20, 0x2d8ce: 0x6c6f1620, 0x2d8cf: 0x6c6f1820, + 0x2d8d0: 0x6c6f1a20, 0x2d8d1: 0x6c6f1c20, 0x2d8d2: 0x6c6f1e20, 0x2d8d3: 0x6c6f2020, + 0x2d8d4: 0x6c4d5e20, 0x2d8d5: 0x6c6f2220, 0x2d8d6: 0x6c96d220, 0x2d8d7: 0x6c96d420, + 0x2d8d8: 0x6c96d620, 0x2d8d9: 0x6c96d820, 0x2d8da: 0x6cc2ca20, 0x2d8db: 0x6c96da20, + 0x2d8dc: 0x6c96dc20, 0x2d8dd: 0x6c96de20, 0x2d8de: 0x6c96e020, 0x2d8df: 0x6c96e220, + 0x2d8e0: 0x6c96e420, 0x2d8e1: 0x6c96e620, 0x2d8e2: 0x6c96e820, 0x2d8e3: 0x6c96ea20, + 0x2d8e4: 0x6c96ec20, 0x2d8e5: 0x6cc2cc20, 0x2d8e6: 0x6cc2ce20, 0x2d8e7: 0x6cc2d020, + 0x2d8e8: 0x6cc2d220, 0x2d8e9: 0x6cc2d420, 0x2d8ea: 0x6cc2d620, 0x2d8eb: 0x6cc2d820, + 0x2d8ec: 0x6cf1f820, 0x2d8ed: 0x6cf1fa20, 0x2d8ee: 0x6cf1fc20, 0x2d8ef: 0x6cf1fe20, + 0x2d8f0: 0x6cf20020, 0x2d8f1: 0x6d21c220, 0x2d8f2: 0x6d4f3a20, 0x2d8f3: 0x6d21c420, + 0x2d8f4: 0x6d21c620, 0x2d8f5: 0x6d4f3c20, 0x2d8f6: 0x6d220220, 0x2d8f7: 0x6d4f3e20, + 0x2d8f8: 0x6d4f4020, 0x2d8f9: 0x6d4f4220, 0x2d8fa: 0x6d4f4420, 0x2d8fb: 0x6d7b9020, + 0x2d8fc: 0x6d7b9220, 0x2d8fd: 0x6da3c220, 0x2d8fe: 0x6da3c420, 0x2d8ff: 0x6de27420, + // Block 0xb64, offset 0x2d900 + 0x2d900: 0x6dfa1c20, 0x2d901: 0x6dfa1e20, 0x2d902: 0x6e0dba20, 0x2d903: 0x6c046620, + 0x2d904: 0x6c01f020, 0x2d905: 0x6c090820, 0x2d906: 0x6c046820, 0x2d907: 0x6c090a20, + 0x2d908: 0x6c117020, 0x2d909: 0x6c090c20, 0x2d90a: 0x6c090e20, 0x2d90b: 0x6c117820, + 0x2d90c: 0x6c1f2020, 0x2d90d: 0x6c1f2220, 0x2d90e: 0x6c1f2420, 0x2d90f: 0x6c117a20, + 0x2d910: 0x6c1f2620, 0x2d911: 0x6c1f2820, 0x2d912: 0x6c1f2a20, 0x2d913: 0x6c117c20, + 0x2d914: 0x6c117e20, 0x2d915: 0x6c118020, 0x2d916: 0x6c118220, 0x2d917: 0x6c1f2c20, + 0x2d918: 0x6c1f2e20, 0x2d919: 0x6c118420, 0x2d91a: 0x6c118620, 0x2d91b: 0x6c118820, + 0x2d91c: 0x6c1f3020, 0x2d91d: 0x6c32e620, 0x2d91e: 0x6c32e820, 0x2d91f: 0x6c1f4220, + 0x2d920: 0x6c32ea20, 0x2d921: 0x6c1f4420, 0x2d922: 0x6c32ec20, 0x2d923: 0x6c1f4620, + 0x2d924: 0x6c1f4820, 0x2d925: 0x6c32ee20, 0x2d926: 0x6c1f4a20, 0x2d927: 0x6c1f4c20, + 0x2d928: 0x6c1f4e20, 0x2d929: 0x6c32f020, 0x2d92a: 0x6c1f5020, 0x2d92b: 0x6c1f5220, + 0x2d92c: 0x6c1f5420, 0x2d92d: 0x6c1f5620, 0x2d92e: 0x6c1f5820, 0x2d92f: 0x6c1f5a20, + 0x2d930: 0x6c1f5c20, 0x2d931: 0x6c1f5e20, 0x2d932: 0x6c1f6020, 0x2d933: 0x6c1f6220, + 0x2d934: 0x6c1f6420, 0x2d935: 0x6c32f220, 0x2d936: 0x6c1f6620, 0x2d937: 0x6c1f6820, + 0x2d938: 0x6c1f6a20, 0x2d939: 0x6c1f6c20, 0x2d93a: 0x6c1f6e20, 0x2d93b: 0x6c1f7020, + 0x2d93c: 0x6c1f7220, 0x2d93d: 0x6c32f420, 0x2d93e: 0x6c1f7420, 0x2d93f: 0x6c32f620, + // Block 0xb65, offset 0x2d940 + 0x2d940: 0x6c1f7620, 0x2d941: 0x6c32f820, 0x2d942: 0x6c32fa20, 0x2d943: 0x6c1f7820, + 0x2d944: 0x6c1f7a20, 0x2d945: 0x6c1f7c20, 0x2d946: 0x6c1f7e20, 0x2d947: 0x6c331020, + 0x2d948: 0x6c331220, 0x2d949: 0x6c331420, 0x2d94a: 0x6c331620, 0x2d94b: 0x6c331820, + 0x2d94c: 0x6c331a20, 0x2d94d: 0x6c331c20, 0x2d94e: 0x6c4d8420, 0x2d94f: 0x6c331e20, + 0x2d950: 0x6c332020, 0x2d951: 0x6c332220, 0x2d952: 0x6c4d8620, 0x2d953: 0x6c332420, + 0x2d954: 0x6c332620, 0x2d955: 0x6c332820, 0x2d956: 0x6c332a20, 0x2d957: 0x6c332c20, + 0x2d958: 0x6c4d8820, 0x2d959: 0x6c332e20, 0x2d95a: 0x6c333020, 0x2d95b: 0x6c333220, + 0x2d95c: 0x6c333420, 0x2d95d: 0x6c4d8a20, 0x2d95e: 0x6c333620, 0x2d95f: 0x6c333820, + 0x2d960: 0x6c4d8c20, 0x2d961: 0x6c333a20, 0x2d962: 0x6c333c20, 0x2d963: 0x6c4d8e20, + 0x2d964: 0x6c4d9020, 0x2d965: 0x6c4d9220, 0x2d966: 0x6c333e20, 0x2d967: 0x6c334020, + 0x2d968: 0x6c4d9420, 0x2d969: 0x6c334220, 0x2d96a: 0x6c334420, 0x2d96b: 0x6c334620, + 0x2d96c: 0x6c334820, 0x2d96d: 0x6c334a20, 0x2d96e: 0x6c334c20, 0x2d96f: 0x6c334e20, + 0x2d970: 0x6c335020, 0x2d971: 0x6c4d9620, 0x2d972: 0x6c335220, 0x2d973: 0x6c335420, + 0x2d974: 0x6c335620, 0x2d975: 0x6c335820, 0x2d976: 0x6c335a20, 0x2d977: 0x6c4d9820, + 0x2d978: 0x6c4d9a20, 0x2d979: 0x6c4d9c20, 0x2d97a: 0x6c335c20, 0x2d97b: 0x6c4d9e20, + 0x2d97c: 0x6c4da020, 0x2d97d: 0x6c335e20, 0x2d97e: 0x6c336020, 0x2d97f: 0x6c336220, + // Block 0xb66, offset 0x2d980 + 0x2d980: 0x6c4dc020, 0x2d981: 0x6c6f6220, 0x2d982: 0x6c4dc220, 0x2d983: 0x6c4dc420, + 0x2d984: 0x6c4dc620, 0x2d985: 0x6c4dc820, 0x2d986: 0x6c4dca20, 0x2d987: 0x6c4dcc20, + 0x2d988: 0x6c4dce20, 0x2d989: 0x6c4dd020, 0x2d98a: 0x6c4dd220, 0x2d98b: 0x6c6f6420, + 0x2d98c: 0x6c4dd420, 0x2d98d: 0x6c4dd620, 0x2d98e: 0x6c4dd820, 0x2d98f: 0x6c6f6620, + 0x2d990: 0x6c6f6820, 0x2d991: 0x6c4dda20, 0x2d992: 0x6c4ddc20, 0x2d993: 0x6c4dde20, + 0x2d994: 0x6c4de020, 0x2d995: 0x6c6f6a20, 0x2d996: 0x6c6f6c20, 0x2d997: 0x6c4de220, + 0x2d998: 0x6c4de420, 0x2d999: 0x6c6f6e20, 0x2d99a: 0x6c6f7020, 0x2d99b: 0x6c4de620, + 0x2d99c: 0x6c4de820, 0x2d99d: 0x6c6f7220, 0x2d99e: 0x6c4dea20, 0x2d99f: 0x6c4dec20, + 0x2d9a0: 0x6c4dee20, 0x2d9a1: 0x6c4df020, 0x2d9a2: 0x6c4df220, 0x2d9a3: 0x6c6f7420, + 0x2d9a4: 0x6c4df420, 0x2d9a5: 0x6c6f7620, 0x2d9a6: 0x6c4df620, 0x2d9a7: 0x6c6f7820, + 0x2d9a8: 0x6c4df820, 0x2d9a9: 0x6c6f7a20, 0x2d9aa: 0x6c4dfa20, 0x2d9ab: 0x6c4dfc20, + 0x2d9ac: 0x6c4dfe20, 0x2d9ad: 0x6c6f7c20, 0x2d9ae: 0x6c4e0020, 0x2d9af: 0x6c6f7e20, + 0x2d9b0: 0x6c4e0220, 0x2d9b1: 0x6c4e0420, 0x2d9b2: 0x6c4e0620, 0x2d9b3: 0x6c6f8020, + 0x2d9b4: 0x6c6f8220, 0x2d9b5: 0x6c6f8420, 0x2d9b6: 0x6c6f8620, 0x2d9b7: 0x6c6f8820, + 0x2d9b8: 0x6c4e0820, 0x2d9b9: 0x6c4e0a20, 0x2d9ba: 0x6c4e0c20, 0x2d9bb: 0x6c4e0e20, + 0x2d9bc: 0x6c4e1020, 0x2d9bd: 0x6c4e1220, 0x2d9be: 0x6c6f9e20, 0x2d9bf: 0x6c973820, + // Block 0xb67, offset 0x2d9c0 + 0x2d9c0: 0x6c6fa020, 0x2d9c1: 0x6c6fa220, 0x2d9c2: 0x6c6fa420, 0x2d9c3: 0x6c6fa620, + 0x2d9c4: 0x6c6fa820, 0x2d9c5: 0x6c6faa20, 0x2d9c6: 0x6c973a20, 0x2d9c7: 0x6c6fac20, + 0x2d9c8: 0x6c6fae20, 0x2d9c9: 0x6c973c20, 0x2d9ca: 0x6c973e20, 0x2d9cb: 0x6c6fb020, + 0x2d9cc: 0x6c6fb220, 0x2d9cd: 0x6c6fb420, 0x2d9ce: 0x6c6fb620, 0x2d9cf: 0x6c6fb820, + 0x2d9d0: 0x6c974020, 0x2d9d1: 0x6c6fba20, 0x2d9d2: 0x6c6fbc20, 0x2d9d3: 0x6c6fbe20, + 0x2d9d4: 0x6c6fc020, 0x2d9d5: 0x6c6fc220, 0x2d9d6: 0x6c6fc420, 0x2d9d7: 0x6c6fc620, + 0x2d9d8: 0x6c974220, 0x2d9d9: 0x6c6fc820, 0x2d9da: 0x6c6fca20, 0x2d9db: 0x6c6fcc20, + 0x2d9dc: 0x6c6fce20, 0x2d9dd: 0x6c6fd020, 0x2d9de: 0x6c6fd220, 0x2d9df: 0x6c6fd420, + 0x2d9e0: 0x6c974420, 0x2d9e1: 0x6c974620, 0x2d9e2: 0x6c6fd620, 0x2d9e3: 0x6c974820, + 0x2d9e4: 0x6c974a20, 0x2d9e5: 0x6c974c20, 0x2d9e6: 0x6c6fd820, 0x2d9e7: 0x6c6fda20, + 0x2d9e8: 0x6c974e20, 0x2d9e9: 0x6c6fdc20, 0x2d9ea: 0x6c975020, 0x2d9eb: 0x6c975220, + 0x2d9ec: 0x6c975420, 0x2d9ed: 0x6c6fde20, 0x2d9ee: 0x6c6fe020, 0x2d9ef: 0x6c6fe220, + 0x2d9f0: 0x6c977e20, 0x2d9f1: 0x6c978020, 0x2d9f2: 0x6cc31420, 0x2d9f3: 0x6cc31620, + 0x2d9f4: 0x6c978220, 0x2d9f5: 0x6c978420, 0x2d9f6: 0x6cc31820, 0x2d9f7: 0x6c978620, + 0x2d9f8: 0x6c978820, 0x2d9f9: 0x6cc31a20, 0x2d9fa: 0x6c978a20, 0x2d9fb: 0x6c978c20, + 0x2d9fc: 0x6c978e20, 0x2d9fd: 0x6c979020, 0x2d9fe: 0x6c979220, 0x2d9ff: 0x6c979420, + // Block 0xb68, offset 0x2da00 + 0x2da00: 0x6c979620, 0x2da01: 0x6cc31c20, 0x2da02: 0x6c979820, 0x2da03: 0x6c979a20, + 0x2da04: 0x6cc31e20, 0x2da05: 0x6c979c20, 0x2da06: 0x6c979e20, 0x2da07: 0x6c97a020, + 0x2da08: 0x6c97a220, 0x2da09: 0x6cc32020, 0x2da0a: 0x6c97a420, 0x2da0b: 0x6c97a620, + 0x2da0c: 0x6cc32220, 0x2da0d: 0x6c97a820, 0x2da0e: 0x6cc32420, 0x2da0f: 0x6c97aa20, + 0x2da10: 0x6c97ac20, 0x2da11: 0x6cc32620, 0x2da12: 0x6cc32820, 0x2da13: 0x6c97ae20, + 0x2da14: 0x6c97b020, 0x2da15: 0x6c97b220, 0x2da16: 0x6cc32a20, 0x2da17: 0x6c97b420, + 0x2da18: 0x6c97b620, 0x2da19: 0x6c97b820, 0x2da1a: 0x6c97ba20, 0x2da1b: 0x6c97bc20, + 0x2da1c: 0x6c97be20, 0x2da1d: 0x6c97c020, 0x2da1e: 0x6c97c220, 0x2da1f: 0x6c97c420, + 0x2da20: 0x6cc32c20, 0x2da21: 0x6cc32e20, 0x2da22: 0x6cc33020, 0x2da23: 0x6cc33220, + 0x2da24: 0x6c97c620, 0x2da25: 0x6cc33420, 0x2da26: 0x6c97c820, 0x2da27: 0x6c97ca20, + 0x2da28: 0x6c97cc20, 0x2da29: 0x6cc33620, 0x2da2a: 0x6cc33820, 0x2da2b: 0x6cc33a20, + 0x2da2c: 0x6c97ce20, 0x2da2d: 0x6c97d020, 0x2da2e: 0x6c97d220, 0x2da2f: 0x6c97d420, + 0x2da30: 0x6cc35820, 0x2da31: 0x6cc35a20, 0x2da32: 0x6cc35c20, 0x2da33: 0x6cf24a20, + 0x2da34: 0x6cc35e20, 0x2da35: 0x6cc36020, 0x2da36: 0x6cc36220, 0x2da37: 0x6cf24c20, + 0x2da38: 0x6cc36420, 0x2da39: 0x6cf24e20, 0x2da3a: 0x6cc36620, 0x2da3b: 0x6cc36820, + 0x2da3c: 0x6cc36a20, 0x2da3d: 0x6cc36c20, 0x2da3e: 0x6cc36e20, 0x2da3f: 0x6cc37020, + // Block 0xb69, offset 0x2da40 + 0x2da40: 0x6cc37220, 0x2da41: 0x6cf25020, 0x2da42: 0x6cf25220, 0x2da43: 0x6cc37420, + 0x2da44: 0x6cc37620, 0x2da45: 0x6cc37820, 0x2da46: 0x6cf25420, 0x2da47: 0x6cc37a20, + 0x2da48: 0x6cf25620, 0x2da49: 0x6cc37c20, 0x2da4a: 0x6cc37e20, 0x2da4b: 0x6cc38020, + 0x2da4c: 0x6cc38220, 0x2da4d: 0x6cf25820, 0x2da4e: 0x6cc38420, 0x2da4f: 0x6cf25a20, + 0x2da50: 0x6cc38620, 0x2da51: 0x6cc38820, 0x2da52: 0x6cc38a20, 0x2da53: 0x6cc38c20, + 0x2da54: 0x6cc38e20, 0x2da55: 0x6cc39020, 0x2da56: 0x6cc39220, 0x2da57: 0x6cf25c20, + 0x2da58: 0x6cc39420, 0x2da59: 0x6cf25e20, 0x2da5a: 0x6cf26020, 0x2da5b: 0x6cf26220, + 0x2da5c: 0x6cc39620, 0x2da5d: 0x6cc39820, 0x2da5e: 0x6cc39a20, 0x2da5f: 0x6cf26420, + 0x2da60: 0x6cc39c20, 0x2da61: 0x6cc39e20, 0x2da62: 0x6cc3a020, 0x2da63: 0x6cc3a220, + 0x2da64: 0x6cc3a420, 0x2da65: 0x6cc3a620, 0x2da66: 0x6cc3a820, 0x2da67: 0x6cf27820, + 0x2da68: 0x6d221220, 0x2da69: 0x6cf27a20, 0x2da6a: 0x6cf27c20, 0x2da6b: 0x6cf27e20, + 0x2da6c: 0x6d221420, 0x2da6d: 0x6cf28020, 0x2da6e: 0x6cf28220, 0x2da6f: 0x6cf28420, + 0x2da70: 0x6cf28620, 0x2da71: 0x6cf28820, 0x2da72: 0x6cf28a20, 0x2da73: 0x6d221620, + 0x2da74: 0x6cf28c20, 0x2da75: 0x6cf28e20, 0x2da76: 0x6cf29020, 0x2da77: 0x6cf29220, + 0x2da78: 0x6d221820, 0x2da79: 0x6cf29420, 0x2da7a: 0x6cf29620, 0x2da7b: 0x6d221a20, + 0x2da7c: 0x6cf29820, 0x2da7d: 0x6cf29a20, 0x2da7e: 0x6cf29c20, 0x2da7f: 0x6d221c20, + // Block 0xb6a, offset 0x2da80 + 0x2da80: 0x6cf29e20, 0x2da81: 0x6d221e20, 0x2da82: 0x6d222020, 0x2da83: 0x6cf2a020, + 0x2da84: 0x6cf2a220, 0x2da85: 0x6cf2a420, 0x2da86: 0x6cf2a620, 0x2da87: 0x6d222220, + 0x2da88: 0x6d222420, 0x2da89: 0x6cf2a820, 0x2da8a: 0x6cf2aa20, 0x2da8b: 0x6d222620, + 0x2da8c: 0x6cf2ac20, 0x2da8d: 0x6cf2ae20, 0x2da8e: 0x6cf2b020, 0x2da8f: 0x6cf2b220, + 0x2da90: 0x6d222820, 0x2da91: 0x6cf2b420, 0x2da92: 0x6d223c20, 0x2da93: 0x6d223e20, + 0x2da94: 0x6d224020, 0x2da95: 0x6d4f6c20, 0x2da96: 0x6d224220, 0x2da97: 0x6d4f6e20, + 0x2da98: 0x6d224420, 0x2da99: 0x6d4f7020, 0x2da9a: 0x6d224620, 0x2da9b: 0x6d224820, + 0x2da9c: 0x6d4f7220, 0x2da9d: 0x6d4f7420, 0x2da9e: 0x6d224a20, 0x2da9f: 0x6d224c20, + 0x2daa0: 0x6d224e20, 0x2daa1: 0x6d225020, 0x2daa2: 0x6d225220, 0x2daa3: 0x6d225420, + 0x2daa4: 0x6d4f7620, 0x2daa5: 0x6d225620, 0x2daa6: 0x6d4f7820, 0x2daa7: 0x6d4f7a20, + 0x2daa8: 0x6cc3aa20, 0x2daa9: 0x6d225820, 0x2daaa: 0x6d225a20, 0x2daab: 0x6d4f7c20, + 0x2daac: 0x6d225c20, 0x2daad: 0x6d4fb020, 0x2daae: 0x6d4f7e20, 0x2daaf: 0x6d225e20, + 0x2dab0: 0x6d4f8020, 0x2dab1: 0x6d226020, 0x2dab2: 0x6d226220, 0x2dab3: 0x6d226420, + 0x2dab4: 0x6d226620, 0x2dab5: 0x6d226820, 0x2dab6: 0x6d4f8220, 0x2dab7: 0x6d226a20, + 0x2dab8: 0x6d4f8420, 0x2dab9: 0x6d4f8620, 0x2daba: 0x6d226c20, 0x2dabb: 0x6d226e20, + 0x2dabc: 0x6d4f8820, 0x2dabd: 0x6d227020, 0x2dabe: 0x6d4f8a20, 0x2dabf: 0x6d4f8c20, + // Block 0xb6b, offset 0x2dac0 + 0x2dac0: 0x6d227220, 0x2dac1: 0x6d227420, 0x2dac2: 0x6d4f8e20, 0x2dac3: 0x6d4f9020, + 0x2dac4: 0x6d4f9220, 0x2dac5: 0x6d4f9420, 0x2dac6: 0x6d227620, 0x2dac7: 0x6d4f9620, + 0x2dac8: 0x6d227820, 0x2dac9: 0x6d4fb220, 0x2daca: 0x6d7bb620, 0x2dacb: 0x6d4fb420, + 0x2dacc: 0x6d7bb820, 0x2dacd: 0x6d4fb620, 0x2dace: 0x6d4fb820, 0x2dacf: 0x6d4fba20, + 0x2dad0: 0x6d4fbc20, 0x2dad1: 0x6d7bba20, 0x2dad2: 0x6d4fbe20, 0x2dad3: 0x6d4fc020, + 0x2dad4: 0x6d4fc220, 0x2dad5: 0x6d4fc420, 0x2dad6: 0x6d7bbc20, 0x2dad7: 0x6d7bbe20, + 0x2dad8: 0x6d4fc620, 0x2dad9: 0x6d7bc020, 0x2dada: 0x6d4fc820, 0x2dadb: 0x6d4fca20, + 0x2dadc: 0x6d4fcc20, 0x2dadd: 0x6d7bc220, 0x2dade: 0x6d4fce20, 0x2dadf: 0x6d4fd020, + 0x2dae0: 0x6d7bc420, 0x2dae1: 0x6d4fd220, 0x2dae2: 0x6d4fd420, 0x2dae3: 0x6d4fd620, + 0x2dae4: 0x6d4fd820, 0x2dae5: 0x6d7bc620, 0x2dae6: 0x6d4fda20, 0x2dae7: 0x6d4fdc20, + 0x2dae8: 0x6d7bc820, 0x2dae9: 0x6d7bca20, 0x2daea: 0x6d4fde20, 0x2daeb: 0x6d4fe020, + 0x2daec: 0x6d4fe220, 0x2daed: 0x6d4fe420, 0x2daee: 0x6d4fe620, 0x2daef: 0x6d4fe820, + 0x2daf0: 0x6d4fea20, 0x2daf1: 0x6d4fec20, 0x2daf2: 0x6d7bcc20, 0x2daf3: 0x6d4fee20, + 0x2daf4: 0x6d7bd220, 0x2daf5: 0x6da3d620, 0x2daf6: 0x6d7bd420, 0x2daf7: 0x6d7bd620, + 0x2daf8: 0x6d7bd820, 0x2daf9: 0x6d7bda20, 0x2dafa: 0x6d7bdc20, 0x2dafb: 0x6d7c8e20, + 0x2dafc: 0x6da3d820, 0x2dafd: 0x6d7bde20, 0x2dafe: 0x6d7be020, 0x2daff: 0x6d7be220, + // Block 0xb6c, offset 0x2db00 + 0x2db00: 0x6d7be420, 0x2db01: 0x6d7be620, 0x2db02: 0x6da3da20, 0x2db03: 0x6da3dc20, + 0x2db04: 0x6d7be820, 0x2db05: 0x6d7bea20, 0x2db06: 0x6d7bec20, 0x2db07: 0x6da3de20, + 0x2db08: 0x6d7bee20, 0x2db09: 0x6da3e020, 0x2db0a: 0x6d7bf020, 0x2db0b: 0x6da3e220, + 0x2db0c: 0x6d7bf220, 0x2db0d: 0x6d7bf420, 0x2db0e: 0x6d7bf620, 0x2db0f: 0x6d7bf820, + 0x2db10: 0x6d7bfa20, 0x2db11: 0x6da3e420, 0x2db12: 0x6d7bfc20, 0x2db13: 0x6d7bfe20, + 0x2db14: 0x6d7c0020, 0x2db15: 0x6dc57e20, 0x2db16: 0x6dc58020, 0x2db17: 0x6da3ea20, + 0x2db18: 0x6dc58220, 0x2db19: 0x6da3ec20, 0x2db1a: 0x6da3ee20, 0x2db1b: 0x6da3f020, + 0x2db1c: 0x6da3f220, 0x2db1d: 0x6da3f420, 0x2db1e: 0x6da3f620, 0x2db1f: 0x6dc58420, + 0x2db20: 0x6da3f820, 0x2db21: 0x6da3fa20, 0x2db22: 0x6da3fc20, 0x2db23: 0x6dc58620, + 0x2db24: 0x6da3fe20, 0x2db25: 0x6da40020, 0x2db26: 0x6da40220, 0x2db27: 0x6da40420, + 0x2db28: 0x6da40620, 0x2db29: 0x6dc58c20, 0x2db2a: 0x6dc58e20, 0x2db2b: 0x6dc59020, + 0x2db2c: 0x6de27e20, 0x2db2d: 0x6dc59220, 0x2db2e: 0x6dc59420, 0x2db2f: 0x6de28020, + 0x2db30: 0x6dc59620, 0x2db31: 0x6dc59820, 0x2db32: 0x6de28220, 0x2db33: 0x6dc59a20, + 0x2db34: 0x6dc59c20, 0x2db35: 0x6de28a20, 0x2db36: 0x6de28c20, 0x2db37: 0x6de28e20, + 0x2db38: 0x6dfa2e20, 0x2db39: 0x6dfa3620, 0x2db3a: 0x6dfa3820, 0x2db3b: 0x6de2de20, + 0x2db3c: 0x6e0dc020, 0x2db3d: 0x6e0dc220, 0x2db3e: 0x6e0dc420, 0x2db3f: 0x6e1d3220, + // Block 0xb6d, offset 0x2db40 + 0x2db40: 0x6e28d020, 0x2db41: 0x6e28d220, 0x2db42: 0x6e1d3820, 0x2db43: 0x6e28d420, + 0x2db44: 0x6e28d620, 0x2db45: 0x6e388a20, 0x2db46: 0x6e388c20, 0x2db47: 0x6e429820, + 0x2db48: 0x6c046c20, 0x2db49: 0x6c092020, 0x2db4a: 0x6c092220, 0x2db4b: 0x6c092420, + 0x2db4c: 0x6c11ba20, 0x2db4d: 0x6c11bc20, 0x2db4e: 0x6c11be20, 0x2db4f: 0x6c11c020, + 0x2db50: 0x6c11c220, 0x2db51: 0x6c200020, 0x2db52: 0x6c200220, 0x2db53: 0x6c200420, + 0x2db54: 0x6c33e220, 0x2db55: 0x6c33e420, 0x2db56: 0x6c33e620, 0x2db57: 0x6c33e820, + 0x2db58: 0x6c4ea020, 0x2db59: 0x6c709c20, 0x2db5a: 0x6c98b820, 0x2db5b: 0x6c98ba20, + 0x2db5c: 0x6c98bc20, 0x2db5d: 0x6c98be20, 0x2db5e: 0x6cc49020, 0x2db5f: 0x6cc49220, + 0x2db60: 0x6cf37820, 0x2db61: 0x6cf37a20, 0x2db62: 0x6cf37c20, 0x2db63: 0x6cf37e20, + 0x2db64: 0x6cf38020, 0x2db65: 0x6cf38220, 0x2db66: 0x6cf37420, 0x2db67: 0x6d233420, + 0x2db68: 0x6d233620, 0x2db69: 0x6d233820, 0x2db6a: 0x6d233a20, 0x2db6b: 0x6d233c20, + 0x2db6c: 0x6d233e20, 0x2db6d: 0x6d50c220, 0x2db6e: 0x6d50c420, 0x2db6f: 0x6d50c620, + 0x2db70: 0x6d7c9220, 0x2db71: 0x6d7c9020, 0x2db72: 0x6da46a20, 0x2db73: 0x6dc60020, + 0x2db74: 0x6da46c20, 0x2db75: 0x6e1d5220, 0x2db76: 0x6c046e20, 0x2db77: 0x6c047020, + 0x2db78: 0x6c047220, 0x2db79: 0x6c092c20, 0x2db7a: 0x6c201820, 0x2db7b: 0x6c201a20, + 0x2db7c: 0x6c201c20, 0x2db7d: 0x6c340620, 0x2db7e: 0x6c340820, 0x2db7f: 0x6c340a20, + // Block 0xb6e, offset 0x2db80 + 0x2db80: 0x6c340c20, 0x2db81: 0x6c4ecc20, 0x2db82: 0x6c4ece20, 0x2db83: 0x6c4ed020, + 0x2db84: 0x6c70b220, 0x2db85: 0x6c70b420, 0x2db86: 0x6c70b620, 0x2db87: 0x6c70b820, + 0x2db88: 0x6c98d620, 0x2db89: 0x6cc4ae20, 0x2db8a: 0x6cc4b020, 0x2db8b: 0x6c047420, + 0x2db8c: 0x6c01f420, 0x2db8d: 0x6c01f620, 0x2db8e: 0x6c047620, 0x2db8f: 0x6c095020, + 0x2db90: 0x6c093820, 0x2db91: 0x6c093a20, 0x2db92: 0x6c093c20, 0x2db93: 0x6c093e20, + 0x2db94: 0x6c094020, 0x2db95: 0x6c094220, 0x2db96: 0x6c094420, 0x2db97: 0x6c11dc20, + 0x2db98: 0x6c11de20, 0x2db99: 0x6c11e020, 0x2db9a: 0x6c11e220, 0x2db9b: 0x6c11e420, + 0x2db9c: 0x6c11e620, 0x2db9d: 0x6c11e820, 0x2db9e: 0x6c11ea20, 0x2db9f: 0x6c123420, + 0x2dba0: 0x6c11ec20, 0x2dba1: 0x6c11ee20, 0x2dba2: 0x6c11f020, 0x2dba3: 0x6c11f220, + 0x2dba4: 0x6c11f420, 0x2dba5: 0x6c11f620, 0x2dba6: 0x6c11f820, 0x2dba7: 0x6c11fa20, + 0x2dba8: 0x6c11fc20, 0x2dba9: 0x6c11fe20, 0x2dbaa: 0x6c120020, 0x2dbab: 0x6c120220, + 0x2dbac: 0x6c120420, 0x2dbad: 0x6c203a20, 0x2dbae: 0x6c203c20, 0x2dbaf: 0x6c203e20, + 0x2dbb0: 0x6c204020, 0x2dbb1: 0x6c204220, 0x2dbb2: 0x6c204420, 0x2dbb3: 0x6c204620, + 0x2dbb4: 0x6c204820, 0x2dbb5: 0x6c204a20, 0x2dbb6: 0x6c204c20, 0x2dbb7: 0x6c204e20, + 0x2dbb8: 0x6c211820, 0x2dbb9: 0x6c205020, 0x2dbba: 0x6c205220, 0x2dbbb: 0x6c205420, + 0x2dbbc: 0x6c205620, 0x2dbbd: 0x6c205820, 0x2dbbe: 0x6c205a20, 0x2dbbf: 0x6c341c20, + // Block 0xb6f, offset 0x2dbc0 + 0x2dbc0: 0x6c205c20, 0x2dbc1: 0x6c205e20, 0x2dbc2: 0x6c206020, 0x2dbc3: 0x6c206220, + 0x2dbc4: 0x6c206420, 0x2dbc5: 0x6c206620, 0x2dbc6: 0x6c206820, 0x2dbc7: 0x6c206a20, + 0x2dbc8: 0x6c206c20, 0x2dbc9: 0x6c206e20, 0x2dbca: 0x6c207020, 0x2dbcb: 0x6c207220, + 0x2dbcc: 0x6c207420, 0x2dbcd: 0x6c207620, 0x2dbce: 0x6c207820, 0x2dbcf: 0x6c207a20, + 0x2dbd0: 0x6c207c20, 0x2dbd1: 0x6c207e20, 0x2dbd2: 0x6c208020, 0x2dbd3: 0x6c208220, + 0x2dbd4: 0x6c208420, 0x2dbd5: 0x6c208620, 0x2dbd6: 0x6c208820, 0x2dbd7: 0x6c208a20, + 0x2dbd8: 0x6c208c20, 0x2dbd9: 0x6c208e20, 0x2dbda: 0x6c209020, 0x2dbdb: 0x6c209220, + 0x2dbdc: 0x6c209420, 0x2dbdd: 0x6c209620, 0x2dbde: 0x6c209820, 0x2dbdf: 0x6c209a20, + 0x2dbe0: 0x6c209c20, 0x2dbe1: 0x6c209e20, 0x2dbe2: 0x6c20a020, 0x2dbe3: 0x6c20a220, + 0x2dbe4: 0x6c20a420, 0x2dbe5: 0x6c20a620, 0x2dbe6: 0x6c343a20, 0x2dbe7: 0x6c343c20, + 0x2dbe8: 0x6c343e20, 0x2dbe9: 0x6c344020, 0x2dbea: 0x6c344220, 0x2dbeb: 0x6c344420, + 0x2dbec: 0x6c344620, 0x2dbed: 0x6c344820, 0x2dbee: 0x6c344a20, 0x2dbef: 0x6c344c20, + 0x2dbf0: 0x6c344e20, 0x2dbf1: 0x6c345020, 0x2dbf2: 0x6c345220, 0x2dbf3: 0x6c345420, + 0x2dbf4: 0x6c345620, 0x2dbf5: 0x6c345820, 0x2dbf6: 0x6c345a20, 0x2dbf7: 0x6c345c20, + 0x2dbf8: 0x6c345e20, 0x2dbf9: 0x6c346020, 0x2dbfa: 0x6c346220, 0x2dbfb: 0x6c346420, + 0x2dbfc: 0x6c346620, 0x2dbfd: 0x6c346820, 0x2dbfe: 0x6c346a20, 0x2dbff: 0x6c346c20, + // Block 0xb70, offset 0x2dc00 + 0x2dc00: 0x6c346e20, 0x2dc01: 0x6c347020, 0x2dc02: 0x6c347220, 0x2dc03: 0x6c347420, + 0x2dc04: 0x6c347620, 0x2dc05: 0x6c347820, 0x2dc06: 0x6c347a20, 0x2dc07: 0x6c347c20, + 0x2dc08: 0x6c347e20, 0x2dc09: 0x6c348020, 0x2dc0a: 0x6c348220, 0x2dc0b: 0x6c348420, + 0x2dc0c: 0x6c348620, 0x2dc0d: 0x6c348820, 0x2dc0e: 0x6c348a20, 0x2dc0f: 0x6c4ef420, + 0x2dc10: 0x6c348c20, 0x2dc11: 0x6c348e20, 0x2dc12: 0x6c349020, 0x2dc13: 0x6c349220, + 0x2dc14: 0x6c349420, 0x2dc15: 0x6c349620, 0x2dc16: 0x6c349820, 0x2dc17: 0x6c349a20, + 0x2dc18: 0x6c349c20, 0x2dc19: 0x6c349e20, 0x2dc1a: 0x6c34a020, 0x2dc1b: 0x6c34a220, + 0x2dc1c: 0x6c4ef620, 0x2dc1d: 0x6c34a420, 0x2dc1e: 0x6c34a620, 0x2dc1f: 0x6c34a820, + 0x2dc20: 0x6c34aa20, 0x2dc21: 0x6c34ac20, 0x2dc22: 0x6c34ae20, 0x2dc23: 0x6c34b020, + 0x2dc24: 0x6c34b220, 0x2dc25: 0x6c34b420, 0x2dc26: 0x6c34b620, 0x2dc27: 0x6c34b820, + 0x2dc28: 0x6c34ba20, 0x2dc29: 0x6c34bc20, 0x2dc2a: 0x6c4f1420, 0x2dc2b: 0x6c4f1620, + 0x2dc2c: 0x6c4f1820, 0x2dc2d: 0x6c4f1a20, 0x2dc2e: 0x6c4f1c20, 0x2dc2f: 0x6c4f1e20, + 0x2dc30: 0x6c4f2020, 0x2dc31: 0x6c4f2220, 0x2dc32: 0x6c70d020, 0x2dc33: 0x6c70d220, + 0x2dc34: 0x6c4f2420, 0x2dc35: 0x6c4f2620, 0x2dc36: 0x6c4f2820, 0x2dc37: 0x6c4f2a20, + 0x2dc38: 0x6c4f2c20, 0x2dc39: 0x6c4f2e20, 0x2dc3a: 0x6c4f3020, 0x2dc3b: 0x6c4f3220, + 0x2dc3c: 0x6c4f3420, 0x2dc3d: 0x6c4f3620, 0x2dc3e: 0x6c4f3820, 0x2dc3f: 0x6c70d420, + // Block 0xb71, offset 0x2dc40 + 0x2dc40: 0x6c4f3a20, 0x2dc41: 0x6c4f3c20, 0x2dc42: 0x6c4f3e20, 0x2dc43: 0x6c4f4020, + 0x2dc44: 0x6c4f4220, 0x2dc45: 0x6c4f4420, 0x2dc46: 0x6c4f4620, 0x2dc47: 0x6c4f4820, + 0x2dc48: 0x6c70d620, 0x2dc49: 0x6c4f4a20, 0x2dc4a: 0x6c4f4c20, 0x2dc4b: 0x6c4f4e20, + 0x2dc4c: 0x6c4f5020, 0x2dc4d: 0x6c4f5220, 0x2dc4e: 0x6c4f5420, 0x2dc4f: 0x6c4f5620, + 0x2dc50: 0x6c70d820, 0x2dc51: 0x6c4f5820, 0x2dc52: 0x6c4f5a20, 0x2dc53: 0x6c4f5c20, + 0x2dc54: 0x6c4f5e20, 0x2dc55: 0x6c4f6020, 0x2dc56: 0x6c4f6220, 0x2dc57: 0x6c4f6420, + 0x2dc58: 0x6c4f6620, 0x2dc59: 0x6c70da20, 0x2dc5a: 0x6c70dc20, 0x2dc5b: 0x6c70de20, + 0x2dc5c: 0x6c4f6820, 0x2dc5d: 0x6c4f6a20, 0x2dc5e: 0x6c4f6c20, 0x2dc5f: 0x6c4f6e20, + 0x2dc60: 0x6c4f7020, 0x2dc61: 0x6c4f7220, 0x2dc62: 0x6c4f7420, 0x2dc63: 0x6c4f7620, + 0x2dc64: 0x6c4f7820, 0x2dc65: 0x6c4f7a20, 0x2dc66: 0x6c4f7c20, 0x2dc67: 0x6c4f7e20, + 0x2dc68: 0x6c70ec20, 0x2dc69: 0x6c70ee20, 0x2dc6a: 0x6c70f020, 0x2dc6b: 0x6c70f220, + 0x2dc6c: 0x6c70f420, 0x2dc6d: 0x6c70f620, 0x2dc6e: 0x6c70f820, 0x2dc6f: 0x6c70fa20, + 0x2dc70: 0x6c70fc20, 0x2dc71: 0x6c70fe20, 0x2dc72: 0x6c98e420, 0x2dc73: 0x6c710020, + 0x2dc74: 0x6c710220, 0x2dc75: 0x6c710420, 0x2dc76: 0x6c710620, 0x2dc77: 0x6c710820, + 0x2dc78: 0x6c710a20, 0x2dc79: 0x6c710c20, 0x2dc7a: 0x6c710e20, 0x2dc7b: 0x6c98e620, + 0x2dc7c: 0x6c711020, 0x2dc7d: 0x6c711220, 0x2dc7e: 0x6c711420, 0x2dc7f: 0x6c711620, + // Block 0xb72, offset 0x2dc80 + 0x2dc80: 0x6c711820, 0x2dc81: 0x6c711a20, 0x2dc82: 0x6c711c20, 0x2dc83: 0x6c711e20, + 0x2dc84: 0x6c712020, 0x2dc85: 0x6c712220, 0x2dc86: 0x6c712420, 0x2dc87: 0x6c712620, + 0x2dc88: 0x6c712820, 0x2dc89: 0x6c712a20, 0x2dc8a: 0x6c712c20, 0x2dc8b: 0x6c712e20, + 0x2dc8c: 0x6c713020, 0x2dc8d: 0x6c713220, 0x2dc8e: 0x6c713420, 0x2dc8f: 0x6c713620, + 0x2dc90: 0x6c713820, 0x2dc91: 0x6c713a20, 0x2dc92: 0x6c713c20, 0x2dc93: 0x6c713e20, + 0x2dc94: 0x6c714020, 0x2dc95: 0x6c714220, 0x2dc96: 0x6c714420, 0x2dc97: 0x6c714620, + 0x2dc98: 0x6c714820, 0x2dc99: 0x6c714a20, 0x2dc9a: 0x6c714c20, 0x2dc9b: 0x6c714e20, + 0x2dc9c: 0x6c715020, 0x2dc9d: 0x6c715220, 0x2dc9e: 0x6c715420, 0x2dc9f: 0x6c715620, + 0x2dca0: 0x6c715820, 0x2dca1: 0x6c715a20, 0x2dca2: 0x6c715c20, 0x2dca3: 0x6c715e20, + 0x2dca4: 0x6c716020, 0x2dca5: 0x6c990620, 0x2dca6: 0x6c990820, 0x2dca7: 0x6c990a20, + 0x2dca8: 0x6c990c20, 0x2dca9: 0x6c990e20, 0x2dcaa: 0x6c991020, 0x2dcab: 0x6c991220, + 0x2dcac: 0x6c991420, 0x2dcad: 0x6c991620, 0x2dcae: 0x6c991820, 0x2dcaf: 0x6c991a20, + 0x2dcb0: 0x6c991c20, 0x2dcb1: 0x6c991e20, 0x2dcb2: 0x6c992020, 0x2dcb3: 0x6c992220, + 0x2dcb4: 0x6c992420, 0x2dcb5: 0x6c992620, 0x2dcb6: 0x6c992820, 0x2dcb7: 0x6c992a20, + 0x2dcb8: 0x6c992c20, 0x2dcb9: 0x6c992e20, 0x2dcba: 0x6c993020, 0x2dcbb: 0x6c993220, + 0x2dcbc: 0x6c993420, 0x2dcbd: 0x6c993620, 0x2dcbe: 0x6c993820, 0x2dcbf: 0x6c993a20, + // Block 0xb73, offset 0x2dcc0 + 0x2dcc0: 0x6c993c20, 0x2dcc1: 0x6c993e20, 0x2dcc2: 0x6c994020, 0x2dcc3: 0x6c994220, + 0x2dcc4: 0x6c994420, 0x2dcc5: 0x6c994620, 0x2dcc6: 0x6c994820, 0x2dcc7: 0x6c994a20, + 0x2dcc8: 0x6c994c20, 0x2dcc9: 0x6c994e20, 0x2dcca: 0x6c995020, 0x2dccb: 0x6c995220, + 0x2dccc: 0x6cc4be20, 0x2dccd: 0x6c995420, 0x2dcce: 0x6c995620, 0x2dccf: 0x6c995820, + 0x2dcd0: 0x6c995a20, 0x2dcd1: 0x6c995c20, 0x2dcd2: 0x6c995e20, 0x2dcd3: 0x6c996020, + 0x2dcd4: 0x6cc4c020, 0x2dcd5: 0x6c996220, 0x2dcd6: 0x6c996420, 0x2dcd7: 0x6c996620, + 0x2dcd8: 0x6c996820, 0x2dcd9: 0x6c996a20, 0x2dcda: 0x6c996c20, 0x2dcdb: 0x6c996e20, + 0x2dcdc: 0x6c997020, 0x2dcdd: 0x6c997220, 0x2dcde: 0x6c997420, 0x2dcdf: 0x6c997620, + 0x2dce0: 0x6c997820, 0x2dce1: 0x6c997a20, 0x2dce2: 0x6c997c20, 0x2dce3: 0x6cc4c220, + 0x2dce4: 0x6c997e20, 0x2dce5: 0x6c998020, 0x2dce6: 0x6c998220, 0x2dce7: 0x6c998420, + 0x2dce8: 0x6c998620, 0x2dce9: 0x6c998820, 0x2dcea: 0x6c998a20, 0x2dceb: 0x6c998c20, + 0x2dcec: 0x6c998e20, 0x2dced: 0x6c999020, 0x2dcee: 0x6c999220, 0x2dcef: 0x6c999420, + 0x2dcf0: 0x6cc4c420, 0x2dcf1: 0x6cc4c620, 0x2dcf2: 0x6c9a9220, 0x2dcf3: 0x6c999620, + 0x2dcf4: 0x6c999820, 0x2dcf5: 0x6c999a20, 0x2dcf6: 0x6c999c20, 0x2dcf7: 0x6c999e20, + 0x2dcf8: 0x6c99a020, 0x2dcf9: 0x6c99a220, 0x2dcfa: 0x6c99a420, 0x2dcfb: 0x6c99a620, + 0x2dcfc: 0x6c99a820, 0x2dcfd: 0x6c99aa20, 0x2dcfe: 0x6cc4e220, 0x2dcff: 0x6cc4e420, + // Block 0xb74, offset 0x2dd00 + 0x2dd00: 0x6cc4e620, 0x2dd01: 0x6cc4e820, 0x2dd02: 0x6cc4ea20, 0x2dd03: 0x6cc4ec20, + 0x2dd04: 0x6cc4ee20, 0x2dd05: 0x6cf51c20, 0x2dd06: 0x6cc4f020, 0x2dd07: 0x6cc4f220, + 0x2dd08: 0x6cc4f420, 0x2dd09: 0x6cc4f620, 0x2dd0a: 0x6cc4f820, 0x2dd0b: 0x6cc4fa20, + 0x2dd0c: 0x6cc4fc20, 0x2dd0d: 0x6cc4fe20, 0x2dd0e: 0x6cc50020, 0x2dd0f: 0x6cc50220, + 0x2dd10: 0x6cc50420, 0x2dd11: 0x6cc50620, 0x2dd12: 0x6cc50820, 0x2dd13: 0x6cc50a20, + 0x2dd14: 0x6cc50c20, 0x2dd15: 0x6cc50e20, 0x2dd16: 0x6cc51020, 0x2dd17: 0x6cc51220, + 0x2dd18: 0x6cc51420, 0x2dd19: 0x6cc51620, 0x2dd1a: 0x6cc51820, 0x2dd1b: 0x6cc51a20, + 0x2dd1c: 0x6cc51c20, 0x2dd1d: 0x6cc51e20, 0x2dd1e: 0x6cc52020, 0x2dd1f: 0x6cc52220, + 0x2dd20: 0x6cc52420, 0x2dd21: 0x6cc52620, 0x2dd22: 0x6cc52820, 0x2dd23: 0x6cc52a20, + 0x2dd24: 0x6c722020, 0x2dd25: 0x6cc52c20, 0x2dd26: 0x6cc52e20, 0x2dd27: 0x6cf3ac20, + 0x2dd28: 0x6cc53020, 0x2dd29: 0x6cc53220, 0x2dd2a: 0x6cc53420, 0x2dd2b: 0x6cf3ae20, + 0x2dd2c: 0x6cc53620, 0x2dd2d: 0x6cc53820, 0x2dd2e: 0x6cc53a20, 0x2dd2f: 0x6cc53c20, + 0x2dd30: 0x6cc53e20, 0x2dd31: 0x6cf3b020, 0x2dd32: 0x6cc54020, 0x2dd33: 0x6cc54220, + 0x2dd34: 0x6cc54420, 0x2dd35: 0x6cc54620, 0x2dd36: 0x6cc54820, 0x2dd37: 0x6cc54a20, + 0x2dd38: 0x6cc54c20, 0x2dd39: 0x6cc54e20, 0x2dd3a: 0x6cc55020, 0x2dd3b: 0x6cc55220, + 0x2dd3c: 0x6cc55420, 0x2dd3d: 0x6cc55620, 0x2dd3e: 0x6cc55820, 0x2dd3f: 0x6cc55a20, + // Block 0xb75, offset 0x2dd40 + 0x2dd40: 0x6cc55c20, 0x2dd41: 0x6cc55e20, 0x2dd42: 0x6cc56020, 0x2dd43: 0x6cc56220, + 0x2dd44: 0x6cc56420, 0x2dd45: 0x6cc56620, 0x2dd46: 0x6cf3da20, 0x2dd47: 0x6cf3dc20, + 0x2dd48: 0x6cf3de20, 0x2dd49: 0x6cf3e020, 0x2dd4a: 0x6cf3e220, 0x2dd4b: 0x6cf3e420, + 0x2dd4c: 0x6cf3e620, 0x2dd4d: 0x6cf3e820, 0x2dd4e: 0x6cf3ea20, 0x2dd4f: 0x6cf3ec20, + 0x2dd50: 0x6cf3ee20, 0x2dd51: 0x6cf3f020, 0x2dd52: 0x6cf3f220, 0x2dd53: 0x6cf3f420, + 0x2dd54: 0x6cf3f620, 0x2dd55: 0x6cf3f820, 0x2dd56: 0x6cf3fa20, 0x2dd57: 0x6cf3fc20, + 0x2dd58: 0x6cf3fe20, 0x2dd59: 0x6cf40020, 0x2dd5a: 0x6cf40220, 0x2dd5b: 0x6cf40420, + 0x2dd5c: 0x6cf40620, 0x2dd5d: 0x6cf40820, 0x2dd5e: 0x6cf40a20, 0x2dd5f: 0x6cf40c20, + 0x2dd60: 0x6cf40e20, 0x2dd61: 0x6cf41020, 0x2dd62: 0x6cf41220, 0x2dd63: 0x6cf41420, + 0x2dd64: 0x6cf41620, 0x2dd65: 0x6cf41820, 0x2dd66: 0x6cf41a20, 0x2dd67: 0x6cf41c20, + 0x2dd68: 0x6cf41e20, 0x2dd69: 0x6cf42020, 0x2dd6a: 0x6cf42220, 0x2dd6b: 0x6d236a20, + 0x2dd6c: 0x6cf42420, 0x2dd6d: 0x6cf42620, 0x2dd6e: 0x6cf42820, 0x2dd6f: 0x6cf42a20, + 0x2dd70: 0x6cf42c20, 0x2dd71: 0x6cf51e20, 0x2dd72: 0x6cf42e20, 0x2dd73: 0x6cf43020, + 0x2dd74: 0x6d236c20, 0x2dd75: 0x6cf43220, 0x2dd76: 0x6cf43420, 0x2dd77: 0x6cf43620, + 0x2dd78: 0x6cf43820, 0x2dd79: 0x6cf43a20, 0x2dd7a: 0x6cf43c20, 0x2dd7b: 0x6d236e20, + 0x2dd7c: 0x6cf43e20, 0x2dd7d: 0x6cf44020, 0x2dd7e: 0x6cf44220, 0x2dd7f: 0x6d237020, + // Block 0xb76, offset 0x2dd80 + 0x2dd80: 0x6cf44420, 0x2dd81: 0x6cf44620, 0x2dd82: 0x6cf44820, 0x2dd83: 0x6cf44a20, + 0x2dd84: 0x6cf44c20, 0x2dd85: 0x6cf44e20, 0x2dd86: 0x6cf45020, 0x2dd87: 0x6cf45220, + 0x2dd88: 0x6cf45420, 0x2dd89: 0x6cf45620, 0x2dd8a: 0x6cf45820, 0x2dd8b: 0x6d239a20, + 0x2dd8c: 0x6d239c20, 0x2dd8d: 0x6d239e20, 0x2dd8e: 0x6d23a020, 0x2dd8f: 0x6d23a220, + 0x2dd90: 0x6d23a420, 0x2dd91: 0x6d23a620, 0x2dd92: 0x6cc56820, 0x2dd93: 0x6d23a820, + 0x2dd94: 0x6d23aa20, 0x2dd95: 0x6d23ac20, 0x2dd96: 0x6d24e620, 0x2dd97: 0x6d23ae20, + 0x2dd98: 0x6d23b020, 0x2dd99: 0x6d23b220, 0x2dd9a: 0x6d23b420, 0x2dd9b: 0x6d23b620, + 0x2dd9c: 0x6d23b820, 0x2dd9d: 0x6d23ba20, 0x2dd9e: 0x6d23bc20, 0x2dd9f: 0x6d23be20, + 0x2dda0: 0x6d23c020, 0x2dda1: 0x6cc66e20, 0x2dda2: 0x6d23c220, 0x2dda3: 0x6d23c420, + 0x2dda4: 0x6d23c620, 0x2dda5: 0x6d23c820, 0x2dda6: 0x6d23ca20, 0x2dda7: 0x6d23cc20, + 0x2dda8: 0x6d510020, 0x2dda9: 0x6d510220, 0x2ddaa: 0x6d23ce20, 0x2ddab: 0x6d23d020, + 0x2ddac: 0x6d23d220, 0x2ddad: 0x6d23d420, 0x2ddae: 0x6d510420, 0x2ddaf: 0x6d510620, + 0x2ddb0: 0x6d510820, 0x2ddb1: 0x6d23d620, 0x2ddb2: 0x6d23d820, 0x2ddb3: 0x6d23da20, + 0x2ddb4: 0x6d23dc20, 0x2ddb5: 0x6d23de20, 0x2ddb6: 0x6d23e020, 0x2ddb7: 0x6d23e220, + 0x2ddb8: 0x6d23e420, 0x2ddb9: 0x6d510a20, 0x2ddba: 0x6d23e620, 0x2ddbb: 0x6d23e820, + 0x2ddbc: 0x6d23ea20, 0x2ddbd: 0x6d23ec20, 0x2ddbe: 0x6d23ee20, 0x2ddbf: 0x6d23f020, + // Block 0xb77, offset 0x2ddc0 + 0x2ddc0: 0x6d510c20, 0x2ddc1: 0x6d23f220, 0x2ddc2: 0x6d23f420, 0x2ddc3: 0x6d510e20, + 0x2ddc4: 0x6d23f620, 0x2ddc5: 0x6d512e20, 0x2ddc6: 0x6d513020, 0x2ddc7: 0x6d23f820, + 0x2ddc8: 0x6d513220, 0x2ddc9: 0x6d7cb220, 0x2ddca: 0x6d513420, 0x2ddcb: 0x6d513620, + 0x2ddcc: 0x6d513820, 0x2ddcd: 0x6d513a20, 0x2ddce: 0x6d513c20, 0x2ddcf: 0x6d513e20, + 0x2ddd0: 0x6d514020, 0x2ddd1: 0x6d514220, 0x2ddd2: 0x6d514420, 0x2ddd3: 0x6d514620, + 0x2ddd4: 0x6d514820, 0x2ddd5: 0x6d514a20, 0x2ddd6: 0x6d514c20, 0x2ddd7: 0x6d514e20, + 0x2ddd8: 0x6d515020, 0x2ddd9: 0x6d515220, 0x2ddda: 0x6d515420, 0x2dddb: 0x6d515620, + 0x2dddc: 0x6d515820, 0x2dddd: 0x6d515a20, 0x2ddde: 0x6d515c20, 0x2dddf: 0x6d515e20, + 0x2dde0: 0x6d516020, 0x2dde1: 0x6d516220, 0x2dde2: 0x6d516420, 0x2dde3: 0x6d516620, + 0x2dde4: 0x6d516820, 0x2dde5: 0x6d516a20, 0x2dde6: 0x6d24e820, 0x2dde7: 0x6d516c20, + 0x2dde8: 0x6d516e20, 0x2dde9: 0x6d517020, 0x2ddea: 0x6d517220, 0x2ddeb: 0x6d517420, + 0x2ddec: 0x6d517620, 0x2dded: 0x6d517820, 0x2ddee: 0x6d517a20, 0x2ddef: 0x6d517c20, + 0x2ddf0: 0x6d517e20, 0x2ddf1: 0x6d518020, 0x2ddf2: 0x6d518220, 0x2ddf3: 0x6d518420, + 0x2ddf4: 0x6d518620, 0x2ddf5: 0x6d518820, 0x2ddf6: 0x6d518a20, 0x2ddf7: 0x6d518c20, + 0x2ddf8: 0x6d518e20, 0x2ddf9: 0x6d519020, 0x2ddfa: 0x6d519220, 0x2ddfb: 0x6d7cc220, + 0x2ddfc: 0x6d7cc420, 0x2ddfd: 0x6d7cc620, 0x2ddfe: 0x6d7cc820, 0x2ddff: 0x6d7cca20, + // Block 0xb78, offset 0x2de00 + 0x2de00: 0x6d7ccc20, 0x2de01: 0x6d7cce20, 0x2de02: 0x6d7cd020, 0x2de03: 0x6d7cd220, + 0x2de04: 0x6d7cd420, 0x2de05: 0x6d7cd620, 0x2de06: 0x6d519420, 0x2de07: 0x6d7cd820, + 0x2de08: 0x6d7cda20, 0x2de09: 0x6d7cdc20, 0x2de0a: 0x6da47c20, 0x2de0b: 0x6d7cde20, + 0x2de0c: 0x6d7ce020, 0x2de0d: 0x6d7ce220, 0x2de0e: 0x6da47e20, 0x2de0f: 0x6d7ce420, + 0x2de10: 0x6d7ce620, 0x2de11: 0x6d7ce820, 0x2de12: 0x6d7cea20, 0x2de13: 0x6d7cec20, + 0x2de14: 0x6d7cee20, 0x2de15: 0x6d7cf020, 0x2de16: 0x6d7cf220, 0x2de17: 0x6d7cf420, + 0x2de18: 0x6da48020, 0x2de19: 0x6d7cf620, 0x2de1a: 0x6d7cf820, 0x2de1b: 0x6d7cfa20, + 0x2de1c: 0x6d7cfc20, 0x2de1d: 0x6d7cfe20, 0x2de1e: 0x6d7d0020, 0x2de1f: 0x6da48e20, + 0x2de20: 0x6da49020, 0x2de21: 0x6da49220, 0x2de22: 0x6da49420, 0x2de23: 0x6da49620, + 0x2de24: 0x6da49820, 0x2de25: 0x6dc62620, 0x2de26: 0x6da49a20, 0x2de27: 0x6dc60a20, + 0x2de28: 0x6da49c20, 0x2de29: 0x6da49e20, 0x2de2a: 0x6dc60c20, 0x2de2b: 0x6da4a020, + 0x2de2c: 0x6da4a220, 0x2de2d: 0x6da4a420, 0x2de2e: 0x6da4a620, 0x2de2f: 0x6da4a820, + 0x2de30: 0x6da4aa20, 0x2de31: 0x6da4ac20, 0x2de32: 0x6dc62820, 0x2de33: 0x6d7d9e20, + 0x2de34: 0x6dc62a20, 0x2de35: 0x6dc62c20, 0x2de36: 0x6dc62e20, 0x2de37: 0x6dc63020, + 0x2de38: 0x6dc63220, 0x2de39: 0x6dc63420, 0x2de3a: 0x6dc63620, 0x2de3b: 0x6dc63820, + 0x2de3c: 0x6dc63a20, 0x2de3d: 0x6dc63c20, 0x2de3e: 0x6dc63e20, 0x2de3f: 0x6dc64020, + // Block 0xb79, offset 0x2de40 + 0x2de40: 0x6de2e820, 0x2de41: 0x6dc64220, 0x2de42: 0x6dc64420, 0x2de43: 0x6dc64620, + 0x2de44: 0x6dc64820, 0x2de45: 0x6dc64a20, 0x2de46: 0x6dc64c20, 0x2de47: 0x6de2ee20, + 0x2de48: 0x6de2f020, 0x2de49: 0x6de2f220, 0x2de4a: 0x6de2f420, 0x2de4b: 0x6de2f620, + 0x2de4c: 0x6de2f820, 0x2de4d: 0x6de2fa20, 0x2de4e: 0x6de2fc20, 0x2de4f: 0x6de2fe20, + 0x2de50: 0x6de30020, 0x2de51: 0x6e0dee20, 0x2de52: 0x6de30220, 0x2de53: 0x6dfa6220, + 0x2de54: 0x6dfa6420, 0x2de55: 0x6dfa6620, 0x2de56: 0x6dfa6820, 0x2de57: 0x6dfa6a20, + 0x2de58: 0x6dfa6c20, 0x2de59: 0x6dfa6e20, 0x2de5a: 0x6dfa7020, 0x2de5b: 0x6e0df820, + 0x2de5c: 0x6e0dfa20, 0x2de5d: 0x6e0dfc20, 0x2de5e: 0x6e1d5620, 0x2de5f: 0x6e1d5820, + 0x2de60: 0x6e1d5a20, 0x2de61: 0x6e1d5c20, 0x2de62: 0x6e1d5e20, 0x2de63: 0x6e28f620, + 0x2de64: 0x6e1d6020, 0x2de65: 0x6e28fe20, 0x2de66: 0x6e1d6220, 0x2de67: 0x6e1d6420, + 0x2de68: 0x6e290020, 0x2de69: 0x6e290220, 0x2de6a: 0x6e290420, 0x2de6b: 0x6e290620, + 0x2de6c: 0x6e322620, 0x2de6d: 0x6e322820, 0x2de6e: 0x6e389420, 0x2de6f: 0x6c047e20, + 0x2de70: 0x6c123620, 0x2de71: 0x6c502a20, 0x2de72: 0x6cc67220, 0x2de73: 0x6d7da020, + 0x2de74: 0x6c048020, 0x2de75: 0x6c048220, 0x2de76: 0x6c123a20, 0x2de77: 0x6c123c20, + 0x2de78: 0x6c212020, 0x2de79: 0x6c212220, 0x2de7a: 0x6c212420, 0x2de7b: 0x6c212620, + 0x2de7c: 0x6c212820, 0x2de7d: 0x6c354420, 0x2de7e: 0x6c354620, 0x2de7f: 0x6c503220, + // Block 0xb7a, offset 0x2de80 + 0x2de80: 0x6c503c20, 0x2de81: 0x6c503e20, 0x2de82: 0x6c504020, 0x2de83: 0x6c504220, + 0x2de84: 0x6c504420, 0x2de85: 0x6c504620, 0x2de86: 0x6c723c20, 0x2de87: 0x6c723e20, + 0x2de88: 0x6c724020, 0x2de89: 0x6c724220, 0x2de8a: 0x6c724420, 0x2de8b: 0x6c724620, + 0x2de8c: 0x6c724820, 0x2de8d: 0x6c9aac20, 0x2de8e: 0x6c9aae20, 0x2de8f: 0x6c9ab020, + 0x2de90: 0x6c9ab220, 0x2de91: 0x6c9ab420, 0x2de92: 0x6c9ab620, 0x2de93: 0x6c9ab820, + 0x2de94: 0x6c9aba20, 0x2de95: 0x6c9abc20, 0x2de96: 0x6c9abe20, 0x2de97: 0x6c9ac020, + 0x2de98: 0x6c9ac220, 0x2de99: 0x6c9ac420, 0x2de9a: 0x6c9ac620, 0x2de9b: 0x6c9ac820, + 0x2de9c: 0x6cc69a20, 0x2de9d: 0x6c9b1420, 0x2de9e: 0x6cc69c20, 0x2de9f: 0x6cc69e20, + 0x2dea0: 0x6cc6a020, 0x2dea1: 0x6cc6a220, 0x2dea2: 0x6cc6a420, 0x2dea3: 0x6cc6a620, + 0x2dea4: 0x6cc6a820, 0x2dea5: 0x6cc6aa20, 0x2dea6: 0x6cc6ac20, 0x2dea7: 0x6cc6ae20, + 0x2dea8: 0x6cc6b020, 0x2dea9: 0x6cc6b220, 0x2deaa: 0x6cc6b420, 0x2deab: 0x6cf53620, + 0x2deac: 0x6cf53820, 0x2dead: 0x6cf52a20, 0x2deae: 0x6cf53a20, 0x2deaf: 0x6cf53c20, + 0x2deb0: 0x6cf53e20, 0x2deb1: 0x6d24f820, 0x2deb2: 0x6d24fa20, 0x2deb3: 0x6d24fc20, + 0x2deb4: 0x6d7dac20, 0x2deb5: 0x6d527820, 0x2deb6: 0x6d527a20, 0x2deb7: 0x6d527c20, + 0x2deb8: 0x6d527e20, 0x2deb9: 0x6d528020, 0x2deba: 0x6d528220, 0x2debb: 0x6d528420, + 0x2debc: 0x6d7db620, 0x2debd: 0x6d7db820, 0x2debe: 0x6d7dba20, 0x2debf: 0x6d7dbc20, + // Block 0xb7b, offset 0x2dec0 + 0x2dec0: 0x6da51420, 0x2dec1: 0x6da51620, 0x2dec2: 0x6da51820, 0x2dec3: 0x6da53e20, + 0x2dec4: 0x6de35a20, 0x2dec5: 0x6dfab420, 0x2dec6: 0x6dfab620, 0x2dec7: 0x6c048420, + 0x2dec8: 0x6c213c20, 0x2dec9: 0x6c357620, 0x2deca: 0x6c728e20, 0x2decb: 0x6c729020, + 0x2decc: 0x6cc70220, 0x2decd: 0x6c9b1620, 0x2dece: 0x6c9b1820, 0x2decf: 0x6c9b1a20, + 0x2ded0: 0x6cc70420, 0x2ded1: 0x6cc70620, 0x2ded2: 0x6cf58e20, 0x2ded3: 0x6d7e0420, + 0x2ded4: 0x6dc6dc20, 0x2ded5: 0x6e0e3c20, 0x2ded6: 0x6e292620, 0x2ded7: 0x6c048620, + 0x2ded8: 0x6c214220, 0x2ded9: 0x6c729c20, 0x2deda: 0x6c729e20, 0x2dedb: 0x6c9b2a20, + 0x2dedc: 0x6c9b2c20, 0x2dedd: 0x6cc71620, 0x2dede: 0x6cc72220, 0x2dedf: 0x6cf59820, + 0x2dee0: 0x6d254820, 0x2dee1: 0x6d254a20, 0x2dee2: 0x6d7e0a20, 0x2dee3: 0x6da54420, + 0x2dee4: 0x6c048a20, 0x2dee5: 0x6c095220, 0x2dee6: 0x6c358a20, 0x2dee7: 0x6c358c20, + 0x2dee8: 0x6c358e20, 0x2dee9: 0x6c359020, 0x2deea: 0x6c508620, 0x2deeb: 0x6c508820, + 0x2deec: 0x6c9b3820, 0x2deed: 0x6c9b3a20, 0x2deee: 0x6cc72620, 0x2deef: 0x6cc72820, + 0x2def0: 0x6cf5a220, 0x2def1: 0x6cc74220, 0x2def2: 0x6d255820, 0x2def3: 0x6d52d820, + 0x2def4: 0x6d7e0c20, 0x2def5: 0x6da54c20, 0x2def6: 0x6da54e20, 0x2def7: 0x6dc6e020, + 0x2def8: 0x6e38a220, 0x2def9: 0x6c048e20, 0x2defa: 0x6c35a020, 0x2defb: 0x6c35a220, + 0x2defc: 0x6c35a420, 0x2defd: 0x6c509020, 0x2defe: 0x6c509220, 0x2deff: 0x6c509420, + // Block 0xb7c, offset 0x2df00 + 0x2df00: 0x6c509620, 0x2df01: 0x6c72bc20, 0x2df02: 0x6c72be20, 0x2df03: 0x6c72c020, + 0x2df04: 0x6c72c220, 0x2df05: 0x6c72c420, 0x2df06: 0x6c72c620, 0x2df07: 0x6c9b4820, + 0x2df08: 0x6c9b4a20, 0x2df09: 0x6c9b4c20, 0x2df0a: 0x6c72c820, 0x2df0b: 0x6c9b4e20, + 0x2df0c: 0x6c9b5020, 0x2df0d: 0x6c9b5220, 0x2df0e: 0x6c9b5420, 0x2df0f: 0x6c9b5620, + 0x2df10: 0x6cc74620, 0x2df11: 0x6cc74820, 0x2df12: 0x6cf5b620, 0x2df13: 0x6cf5b820, + 0x2df14: 0x6cf5ba20, 0x2df15: 0x6cf5bc20, 0x2df16: 0x6d256420, 0x2df17: 0x6d256620, + 0x2df18: 0x6d7e1c20, 0x2df19: 0x6d7e1e20, 0x2df1a: 0x6da55a20, 0x2df1b: 0x6dc6ec20, + 0x2df1c: 0x6de37820, 0x2df1d: 0x6de37a20, 0x2df1e: 0x6de37c20, 0x2df1f: 0x6dfad820, + 0x2df20: 0x6c049020, 0x2df21: 0x6c049220, 0x2df22: 0x6c50ac20, 0x2df23: 0x6c9b6e20, + 0x2df24: 0x6cf5ce20, 0x2df25: 0x6c049620, 0x2df26: 0x6c095420, 0x2df27: 0x6c095620, + 0x2df28: 0x6c125020, 0x2df29: 0x6c125220, 0x2df2a: 0x6c125420, 0x2df2b: 0x6c125620, + 0x2df2c: 0x6c125820, 0x2df2d: 0x6c125a20, 0x2df2e: 0x6c125c20, 0x2df2f: 0x6c125e20, + 0x2df30: 0x6c215c20, 0x2df31: 0x6c215e20, 0x2df32: 0x6c216020, 0x2df33: 0x6c216220, + 0x2df34: 0x6c216420, 0x2df35: 0x6c216620, 0x2df36: 0x6c216820, 0x2df37: 0x6c216a20, + 0x2df38: 0x6c216c20, 0x2df39: 0x6c35b620, 0x2df3a: 0x6c35b820, 0x2df3b: 0x6c35ba20, + 0x2df3c: 0x6c35bc20, 0x2df3d: 0x6c35be20, 0x2df3e: 0x6c35c020, 0x2df3f: 0x6c35c220, + // Block 0xb7d, offset 0x2df40 + 0x2df40: 0x6c35c420, 0x2df41: 0x6c35c620, 0x2df42: 0x6c35c820, 0x2df43: 0x6c35ca20, + 0x2df44: 0x6c35cc20, 0x2df45: 0x6c35ce20, 0x2df46: 0x6c35d020, 0x2df47: 0x6c35d220, + 0x2df48: 0x6c35d420, 0x2df49: 0x6c35d620, 0x2df4a: 0x6c35d820, 0x2df4b: 0x6c35da20, + 0x2df4c: 0x6c35dc20, 0x2df4d: 0x6c35de20, 0x2df4e: 0x6c35e020, 0x2df4f: 0x6c35e220, + 0x2df50: 0x6c35e420, 0x2df51: 0x6c35e620, 0x2df52: 0x6c35e820, 0x2df53: 0x6c35ea20, + 0x2df54: 0x6c35ec20, 0x2df55: 0x6c35ee20, 0x2df56: 0x6c35f020, 0x2df57: 0x6c35f220, + 0x2df58: 0x6c35f420, 0x2df59: 0x6c35f620, 0x2df5a: 0x6c50c420, 0x2df5b: 0x6c50c620, + 0x2df5c: 0x6c50c820, 0x2df5d: 0x6c50ca20, 0x2df5e: 0x6c50cc20, 0x2df5f: 0x6c50ce20, + 0x2df60: 0x6c50d020, 0x2df61: 0x6c50d220, 0x2df62: 0x6c50d420, 0x2df63: 0x6c50d620, + 0x2df64: 0x6c50d820, 0x2df65: 0x6c50da20, 0x2df66: 0x6c50dc20, 0x2df67: 0x6c50de20, + 0x2df68: 0x6c50e020, 0x2df69: 0x6c50e220, 0x2df6a: 0x6c50e420, 0x2df6b: 0x6c50e620, + 0x2df6c: 0x6c50e820, 0x2df6d: 0x6c50ea20, 0x2df6e: 0x6c50ec20, 0x2df6f: 0x6c50ee20, + 0x2df70: 0x6c50f020, 0x2df71: 0x6c50f220, 0x2df72: 0x6c50f420, 0x2df73: 0x6c50f620, + 0x2df74: 0x6c50f820, 0x2df75: 0x6c50fa20, 0x2df76: 0x6c50fc20, 0x2df77: 0x6c50fe20, + 0x2df78: 0x6c510020, 0x2df79: 0x6c510220, 0x2df7a: 0x6c510420, 0x2df7b: 0x6c510620, + 0x2df7c: 0x6c510820, 0x2df7d: 0x6c510a20, 0x2df7e: 0x6c510c20, 0x2df7f: 0x6c510e20, + // Block 0xb7e, offset 0x2df80 + 0x2df80: 0x6c730420, 0x2df81: 0x6c730620, 0x2df82: 0x6c730820, 0x2df83: 0x6c730a20, + 0x2df84: 0x6c730c20, 0x2df85: 0x6c730e20, 0x2df86: 0x6c731020, 0x2df87: 0x6c731220, + 0x2df88: 0x6c731420, 0x2df89: 0x6c731620, 0x2df8a: 0x6c731820, 0x2df8b: 0x6c731a20, + 0x2df8c: 0x6c731c20, 0x2df8d: 0x6c731e20, 0x2df8e: 0x6c732020, 0x2df8f: 0x6c732220, + 0x2df90: 0x6c732420, 0x2df91: 0x6c732620, 0x2df92: 0x6c732820, 0x2df93: 0x6c732a20, + 0x2df94: 0x6c732c20, 0x2df95: 0x6c732e20, 0x2df96: 0x6c733020, 0x2df97: 0x6c9b7e20, + 0x2df98: 0x6c9b8020, 0x2df99: 0x6c9b8220, 0x2df9a: 0x6c9b8420, 0x2df9b: 0x6c9b8620, + 0x2df9c: 0x6c9b8820, 0x2df9d: 0x6c9b8a20, 0x2df9e: 0x6c9b8c20, 0x2df9f: 0x6c738c20, + 0x2dfa0: 0x6c738e20, 0x2dfa1: 0x6c9b8e20, 0x2dfa2: 0x6c9b9020, 0x2dfa3: 0x6c9b9220, + 0x2dfa4: 0x6c9b9420, 0x2dfa5: 0x6c9b9620, 0x2dfa6: 0x6c9b9820, 0x2dfa7: 0x6c9b9a20, + 0x2dfa8: 0x6c9b9c20, 0x2dfa9: 0x6c9b9e20, 0x2dfaa: 0x6cc78620, 0x2dfab: 0x6cc78820, + 0x2dfac: 0x6cc78a20, 0x2dfad: 0x6cc78c20, 0x2dfae: 0x6cc78e20, 0x2dfaf: 0x6cc79020, + 0x2dfb0: 0x6cc79220, 0x2dfb1: 0x6cc79420, 0x2dfb2: 0x6cc79620, 0x2dfb3: 0x6cc79820, + 0x2dfb4: 0x6cc79a20, 0x2dfb5: 0x6cc79c20, 0x2dfb6: 0x6cc79e20, 0x2dfb7: 0x6cc7a020, + 0x2dfb8: 0x6cf5d620, 0x2dfb9: 0x6cc7a220, 0x2dfba: 0x6cc7a420, 0x2dfbb: 0x6cc7a620, + 0x2dfbc: 0x6cc7a820, 0x2dfbd: 0x6cc7aa20, 0x2dfbe: 0x6cc7ac20, 0x2dfbf: 0x6cc7ae20, + // Block 0xb7f, offset 0x2dfc0 + 0x2dfc0: 0x6cc7b020, 0x2dfc1: 0x6cc7b220, 0x2dfc2: 0x6cc7b420, 0x2dfc3: 0x6cc7b620, + 0x2dfc4: 0x6cf5f020, 0x2dfc5: 0x6cf5f220, 0x2dfc6: 0x6cf5f420, 0x2dfc7: 0x6cf5f620, + 0x2dfc8: 0x6cf5f820, 0x2dfc9: 0x6cf5fa20, 0x2dfca: 0x6cf5fc20, 0x2dfcb: 0x6cf5fe20, + 0x2dfcc: 0x6cf60020, 0x2dfcd: 0x6cf60220, 0x2dfce: 0x6cf60420, 0x2dfcf: 0x6cf60620, + 0x2dfd0: 0x6cf60820, 0x2dfd1: 0x6cc7b820, 0x2dfd2: 0x6cf60a20, 0x2dfd3: 0x6cf60c20, + 0x2dfd4: 0x6cf60e20, 0x2dfd5: 0x6cf61020, 0x2dfd6: 0x6cf61220, 0x2dfd7: 0x6cf61420, + 0x2dfd8: 0x6cf61620, 0x2dfd9: 0x6cf61820, 0x2dfda: 0x6d257e20, 0x2dfdb: 0x6d258020, + 0x2dfdc: 0x6d258220, 0x2dfdd: 0x6d258420, 0x2dfde: 0x6d258620, 0x2dfdf: 0x6d258820, + 0x2dfe0: 0x6d258a20, 0x2dfe1: 0x6d258c20, 0x2dfe2: 0x6d258e20, 0x2dfe3: 0x6d259020, + 0x2dfe4: 0x6d259220, 0x2dfe5: 0x6d259420, 0x2dfe6: 0x6d259620, 0x2dfe7: 0x6d259820, + 0x2dfe8: 0x6d259a20, 0x2dfe9: 0x6d530020, 0x2dfea: 0x6d530220, 0x2dfeb: 0x6d530420, + 0x2dfec: 0x6d530620, 0x2dfed: 0x6d530820, 0x2dfee: 0x6d530a20, 0x2dfef: 0x6d530c20, + 0x2dff0: 0x6d530e20, 0x2dff1: 0x6d531020, 0x2dff2: 0x6d531220, 0x2dff3: 0x6d531420, + 0x2dff4: 0x6d531620, 0x2dff5: 0x6d531820, 0x2dff6: 0x6d531a20, 0x2dff7: 0x6d531c20, + 0x2dff8: 0x6d7e4420, 0x2dff9: 0x6d7e4620, 0x2dffa: 0x6d7e4820, 0x2dffb: 0x6d7e4a20, + 0x2dffc: 0x6d537220, 0x2dffd: 0x6d7e4c20, 0x2dffe: 0x6d7e4e20, 0x2dfff: 0x6d7e5020, + // Block 0xb80, offset 0x2e000 + 0x2e000: 0x6d7e5220, 0x2e001: 0x6d7e5420, 0x2e002: 0x6d7e5620, 0x2e003: 0x6d7e5820, + 0x2e004: 0x6d7e5a20, 0x2e005: 0x6d7e5c20, 0x2e006: 0x6d7e5e20, 0x2e007: 0x6d7e6020, + 0x2e008: 0x6d7e6220, 0x2e009: 0x6d7e6420, 0x2e00a: 0x6d7e6620, 0x2e00b: 0x6d7e6820, + 0x2e00c: 0x6d7e6a20, 0x2e00d: 0x6d7e6c20, 0x2e00e: 0x6da56420, 0x2e00f: 0x6d7ed220, + 0x2e010: 0x6da56620, 0x2e011: 0x6da56820, 0x2e012: 0x6da56a20, 0x2e013: 0x6da56c20, + 0x2e014: 0x6da56e20, 0x2e015: 0x6da57020, 0x2e016: 0x6da57220, 0x2e017: 0x6da57420, + 0x2e018: 0x6dc70620, 0x2e019: 0x6da5a820, 0x2e01a: 0x6da57620, 0x2e01b: 0x6dc70820, + 0x2e01c: 0x6dc70a20, 0x2e01d: 0x6de38820, 0x2e01e: 0x6de38a20, 0x2e01f: 0x6de38c20, + 0x2e020: 0x6de38e20, 0x2e021: 0x6de39020, 0x2e022: 0x6de39220, 0x2e023: 0x6dfae020, + 0x2e024: 0x6dfae220, 0x2e025: 0x6dfae420, 0x2e026: 0x6dfae620, 0x2e027: 0x6dfae820, + 0x2e028: 0x6dfaea20, 0x2e029: 0x6e0e4620, 0x2e02a: 0x6e293020, 0x2e02b: 0x6e293220, + 0x2e02c: 0x6e293420, 0x2e02d: 0x6e324a20, 0x2e02e: 0x6e324c20, 0x2e02f: 0x6e38a820, + 0x2e030: 0x6c049820, 0x2e031: 0x6c095e20, 0x2e032: 0x6c127020, 0x2e033: 0x6c127220, + 0x2e034: 0x6c219c20, 0x2e035: 0x6c219e20, 0x2e036: 0x6c364020, 0x2e037: 0x6c515c20, + 0x2e038: 0x6c739020, 0x2e039: 0x6c9c0a20, 0x2e03a: 0x6c739220, 0x2e03b: 0x6c73a820, + 0x2e03c: 0x6c9c0c20, 0x2e03d: 0x6c9ba020, 0x2e03e: 0x6cc84a20, 0x2e03f: 0x6cc84c20, + // Block 0xb81, offset 0x2e040 + 0x2e040: 0x6cb8f420, 0x2e041: 0x6cc84e20, 0x2e042: 0x6cc85020, 0x2e043: 0x6cf68820, + 0x2e044: 0x6d25f820, 0x2e045: 0x6d25fa20, 0x2e046: 0x6d7ed620, 0x2e047: 0x6e0e5820, + 0x2e048: 0x6c049c20, 0x2e049: 0x6c127420, 0x2e04a: 0x6c364c20, 0x2e04b: 0x6c364e20, + 0x2e04c: 0x6c365020, 0x2e04d: 0x6c365220, 0x2e04e: 0x6c516c20, 0x2e04f: 0x6c516e20, + 0x2e050: 0x6c517020, 0x2e051: 0x6c517220, 0x2e052: 0x6c73ae20, 0x2e053: 0x6c73b020, + 0x2e054: 0x6c73b220, 0x2e055: 0x6c73b420, 0x2e056: 0x6c9c1a20, 0x2e057: 0x6c73be20, + 0x2e058: 0x6c9c1c20, 0x2e059: 0x6c9c1e20, 0x2e05a: 0x6c9c2020, 0x2e05b: 0x6c9c2220, + 0x2e05c: 0x6cc85a20, 0x2e05d: 0x6cc85c20, 0x2e05e: 0x6cc85e20, 0x2e05f: 0x6cc86020, + 0x2e060: 0x6cf69420, 0x2e061: 0x6cf69620, 0x2e062: 0x6d260620, 0x2e063: 0x6d7ee620, + 0x2e064: 0x6d7ee820, 0x2e065: 0x6d7eea20, 0x2e066: 0x6dc74820, 0x2e067: 0x6dfb0220, + 0x2e068: 0x6c049e20, 0x2e069: 0x6c04a020, 0x2e06a: 0x6c096220, 0x2e06b: 0x6c096420, + 0x2e06c: 0x6c096620, 0x2e06d: 0x6c096820, 0x2e06e: 0x6c096a20, 0x2e06f: 0x6c096c20, + 0x2e070: 0x6c096e20, 0x2e071: 0x6c127c20, 0x2e072: 0x6c127e20, 0x2e073: 0x6c128020, + 0x2e074: 0x6c128220, 0x2e075: 0x6c128420, 0x2e076: 0x6c128620, 0x2e077: 0x6c128820, + 0x2e078: 0x6c128a20, 0x2e079: 0x6c128c20, 0x2e07a: 0x6c128e20, 0x2e07b: 0x6c129020, + 0x2e07c: 0x6c129220, 0x2e07d: 0x6c129420, 0x2e07e: 0x6c129620, 0x2e07f: 0x6c129820, + // Block 0xb82, offset 0x2e080 + 0x2e080: 0x6c129a20, 0x2e081: 0x6c129c20, 0x2e082: 0x6c129e20, 0x2e083: 0x6c12a020, + 0x2e084: 0x6c21ba20, 0x2e085: 0x6c21bc20, 0x2e086: 0x6c21be20, 0x2e087: 0x6c21c020, + 0x2e088: 0x6c21c220, 0x2e089: 0x6c21c420, 0x2e08a: 0x6c21c620, 0x2e08b: 0x6c21c820, + 0x2e08c: 0x6c21ca20, 0x2e08d: 0x6c21cc20, 0x2e08e: 0x6c21ce20, 0x2e08f: 0x6c21d020, + 0x2e090: 0x6c21d220, 0x2e091: 0x6c21d420, 0x2e092: 0x6c21d620, 0x2e093: 0x6c21d820, + 0x2e094: 0x6c21da20, 0x2e095: 0x6c21dc20, 0x2e096: 0x6c21de20, 0x2e097: 0x6c21e020, + 0x2e098: 0x6c21e220, 0x2e099: 0x6c21e420, 0x2e09a: 0x6c21e620, 0x2e09b: 0x6c21e820, + 0x2e09c: 0x6c21ea20, 0x2e09d: 0x6c21ec20, 0x2e09e: 0x6c21ee20, 0x2e09f: 0x6c21f020, + 0x2e0a0: 0x6c21f220, 0x2e0a1: 0x6c21f420, 0x2e0a2: 0x6c21f620, 0x2e0a3: 0x6c21f820, + 0x2e0a4: 0x6c21fa20, 0x2e0a5: 0x6c21fc20, 0x2e0a6: 0x6c21fe20, 0x2e0a7: 0x6c220020, + 0x2e0a8: 0x6c220220, 0x2e0a9: 0x6c220420, 0x2e0aa: 0x6c366c20, 0x2e0ab: 0x6c366e20, + 0x2e0ac: 0x6c367020, 0x2e0ad: 0x6c367220, 0x2e0ae: 0x6c367420, 0x2e0af: 0x6c367620, + 0x2e0b0: 0x6c367820, 0x2e0b1: 0x6c367a20, 0x2e0b2: 0x6c367c20, 0x2e0b3: 0x6c367e20, + 0x2e0b4: 0x6c368020, 0x2e0b5: 0x6c368220, 0x2e0b6: 0x6c368420, 0x2e0b7: 0x6c368620, + 0x2e0b8: 0x6c368820, 0x2e0b9: 0x6c368a20, 0x2e0ba: 0x6c368c20, 0x2e0bb: 0x6c368e20, + 0x2e0bc: 0x6c369020, 0x2e0bd: 0x6c369220, 0x2e0be: 0x6c369420, 0x2e0bf: 0x6c369620, + // Block 0xb83, offset 0x2e0c0 + 0x2e0c0: 0x6c369820, 0x2e0c1: 0x6c220620, 0x2e0c2: 0x6c369a20, 0x2e0c3: 0x6c369c20, + 0x2e0c4: 0x6c369e20, 0x2e0c5: 0x6c36a020, 0x2e0c6: 0x6c36a220, 0x2e0c7: 0x6c36a420, + 0x2e0c8: 0x6c36a620, 0x2e0c9: 0x6c36a820, 0x2e0ca: 0x6c36aa20, 0x2e0cb: 0x6c36ac20, + 0x2e0cc: 0x6c36ae20, 0x2e0cd: 0x6c36b020, 0x2e0ce: 0x6c36b220, 0x2e0cf: 0x6c36b420, + 0x2e0d0: 0x6c36b620, 0x2e0d1: 0x6c36b820, 0x2e0d2: 0x6c36ba20, 0x2e0d3: 0x6c36bc20, + 0x2e0d4: 0x6c36be20, 0x2e0d5: 0x6c36c020, 0x2e0d6: 0x6c36c220, 0x2e0d7: 0x6c36c420, + 0x2e0d8: 0x6c36c620, 0x2e0d9: 0x6c36c820, 0x2e0da: 0x6c36ca20, 0x2e0db: 0x6c36cc20, + 0x2e0dc: 0x6c36ce20, 0x2e0dd: 0x6c36d020, 0x2e0de: 0x6c36d220, 0x2e0df: 0x6c36d420, + 0x2e0e0: 0x6c36d620, 0x2e0e1: 0x6c36d820, 0x2e0e2: 0x6c36da20, 0x2e0e3: 0x6c36dc20, + 0x2e0e4: 0x6c36de20, 0x2e0e5: 0x6c36e020, 0x2e0e6: 0x6c36e220, 0x2e0e7: 0x6c36e420, + 0x2e0e8: 0x6c36e620, 0x2e0e9: 0x6c36e820, 0x2e0ea: 0x6c36ea20, 0x2e0eb: 0x6c36ec20, + 0x2e0ec: 0x6c36ee20, 0x2e0ed: 0x6c36f020, 0x2e0ee: 0x6c519420, 0x2e0ef: 0x6c519620, + 0x2e0f0: 0x6c519820, 0x2e0f1: 0x6c519a20, 0x2e0f2: 0x6c519c20, 0x2e0f3: 0x6c519e20, + 0x2e0f4: 0x6c51a020, 0x2e0f5: 0x6c51a220, 0x2e0f6: 0x6c51a420, 0x2e0f7: 0x6c51a620, + 0x2e0f8: 0x6c51a820, 0x2e0f9: 0x6c51aa20, 0x2e0fa: 0x6c51ac20, 0x2e0fb: 0x6c51ae20, + 0x2e0fc: 0x6c51b020, 0x2e0fd: 0x6c73c020, 0x2e0fe: 0x6c51b220, 0x2e0ff: 0x6c51b420, + // Block 0xb84, offset 0x2e100 + 0x2e100: 0x6c51b620, 0x2e101: 0x6c51b820, 0x2e102: 0x6c51ba20, 0x2e103: 0x6c51bc20, + 0x2e104: 0x6c51be20, 0x2e105: 0x6c51c020, 0x2e106: 0x6c51c220, 0x2e107: 0x6c51c420, + 0x2e108: 0x6c51c620, 0x2e109: 0x6c51c820, 0x2e10a: 0x6c51ca20, 0x2e10b: 0x6c51cc20, + 0x2e10c: 0x6c51ce20, 0x2e10d: 0x6c51d020, 0x2e10e: 0x6c51d220, 0x2e10f: 0x6c51d420, + 0x2e110: 0x6c51d620, 0x2e111: 0x6c51d820, 0x2e112: 0x6c51da20, 0x2e113: 0x6c51dc20, + 0x2e114: 0x6c51de20, 0x2e115: 0x6c51e020, 0x2e116: 0x6c51e220, 0x2e117: 0x6c51e420, + 0x2e118: 0x6c51e620, 0x2e119: 0x6c51e820, 0x2e11a: 0x6c51ea20, 0x2e11b: 0x6c51ec20, + 0x2e11c: 0x6c51ee20, 0x2e11d: 0x6c51f020, 0x2e11e: 0x6c51f220, 0x2e11f: 0x6c51f420, + 0x2e120: 0x6c51f620, 0x2e121: 0x6c73c220, 0x2e122: 0x6c51f820, 0x2e123: 0x6c51fa20, + 0x2e124: 0x6c51fc20, 0x2e125: 0x6c51fe20, 0x2e126: 0x6c520020, 0x2e127: 0x6c520220, + 0x2e128: 0x6c520420, 0x2e129: 0x6c520620, 0x2e12a: 0x6c520820, 0x2e12b: 0x6c520a20, + 0x2e12c: 0x6c520c20, 0x2e12d: 0x6c520e20, 0x2e12e: 0x6c521020, 0x2e12f: 0x6c521220, + 0x2e130: 0x6c521420, 0x2e131: 0x6c521620, 0x2e132: 0x6c521820, 0x2e133: 0x6c521a20, + 0x2e134: 0x6c73c420, 0x2e135: 0x6c521c20, 0x2e136: 0x6c521e20, 0x2e137: 0x6c522020, + 0x2e138: 0x6c522220, 0x2e139: 0x6c376420, 0x2e13a: 0x6c522420, 0x2e13b: 0x6c522620, + 0x2e13c: 0x6c522820, 0x2e13d: 0x6c522a20, 0x2e13e: 0x6c522c20, 0x2e13f: 0x6c522e20, + // Block 0xb85, offset 0x2e140 + 0x2e140: 0x6c523020, 0x2e141: 0x6c523220, 0x2e142: 0x6c523420, 0x2e143: 0x6c523620, + 0x2e144: 0x6c523820, 0x2e145: 0x6c523a20, 0x2e146: 0x6c523c20, 0x2e147: 0x6c523e20, + 0x2e148: 0x6c524020, 0x2e149: 0x6c524220, 0x2e14a: 0x6c524420, 0x2e14b: 0x6c524620, + 0x2e14c: 0x6c524820, 0x2e14d: 0x6c524a20, 0x2e14e: 0x6c524c20, 0x2e14f: 0x6c524e20, + 0x2e150: 0x6c525020, 0x2e151: 0x6c525220, 0x2e152: 0x6c73e620, 0x2e153: 0x6c73e820, + 0x2e154: 0x6c73ea20, 0x2e155: 0x6c73ec20, 0x2e156: 0x6c73ee20, 0x2e157: 0x6c73f020, + 0x2e158: 0x6c73f220, 0x2e159: 0x6c73f420, 0x2e15a: 0x6c73f620, 0x2e15b: 0x6c73f820, + 0x2e15c: 0x6c73fa20, 0x2e15d: 0x6c73fc20, 0x2e15e: 0x6c73fe20, 0x2e15f: 0x6c740020, + 0x2e160: 0x6c740220, 0x2e161: 0x6c740420, 0x2e162: 0x6c740620, 0x2e163: 0x6c740820, + 0x2e164: 0x6c740a20, 0x2e165: 0x6c740c20, 0x2e166: 0x6c740e20, 0x2e167: 0x6c741020, + 0x2e168: 0x6c741220, 0x2e169: 0x6c741420, 0x2e16a: 0x6c741620, 0x2e16b: 0x6c741820, + 0x2e16c: 0x6c741a20, 0x2e16d: 0x6c741c20, 0x2e16e: 0x6c741e20, 0x2e16f: 0x6c742020, + 0x2e170: 0x6c742220, 0x2e171: 0x6c742420, 0x2e172: 0x6c742620, 0x2e173: 0x6c742820, + 0x2e174: 0x6c742a20, 0x2e175: 0x6c742c20, 0x2e176: 0x6c742e20, 0x2e177: 0x6c743020, + 0x2e178: 0x6c743220, 0x2e179: 0x6c743420, 0x2e17a: 0x6c743620, 0x2e17b: 0x6c743820, + 0x2e17c: 0x6c743a20, 0x2e17d: 0x6c743c20, 0x2e17e: 0x6c743e20, 0x2e17f: 0x6c744020, + // Block 0xb86, offset 0x2e180 + 0x2e180: 0x6c744220, 0x2e181: 0x6c744420, 0x2e182: 0x6c744620, 0x2e183: 0x6c744820, + 0x2e184: 0x6c744a20, 0x2e185: 0x6c744c20, 0x2e186: 0x6c744e20, 0x2e187: 0x6c745020, + 0x2e188: 0x6c745220, 0x2e189: 0x6c745420, 0x2e18a: 0x6c745620, 0x2e18b: 0x6c745820, + 0x2e18c: 0x6c745a20, 0x2e18d: 0x6c745c20, 0x2e18e: 0x6c745e20, 0x2e18f: 0x6c746020, + 0x2e190: 0x6c746220, 0x2e191: 0x6c746420, 0x2e192: 0x6c52c020, 0x2e193: 0x6c746620, + 0x2e194: 0x6c746820, 0x2e195: 0x6c746a20, 0x2e196: 0x6c746c20, 0x2e197: 0x6c746e20, + 0x2e198: 0x6c747020, 0x2e199: 0x6c747220, 0x2e19a: 0x6c747420, 0x2e19b: 0x6c747620, + 0x2e19c: 0x6c747820, 0x2e19d: 0x6c747a20, 0x2e19e: 0x6c747c20, 0x2e19f: 0x6c747e20, + 0x2e1a0: 0x6c748020, 0x2e1a1: 0x6c748220, 0x2e1a2: 0x6c748420, 0x2e1a3: 0x6c748620, + 0x2e1a4: 0x6c748820, 0x2e1a5: 0x6c748a20, 0x2e1a6: 0x6c748c20, 0x2e1a7: 0x6c748e20, + 0x2e1a8: 0x6c749020, 0x2e1a9: 0x6c749220, 0x2e1aa: 0x6c749420, 0x2e1ab: 0x6c9c5420, + 0x2e1ac: 0x6c9c5620, 0x2e1ad: 0x6c9c5820, 0x2e1ae: 0x6c9c5a20, 0x2e1af: 0x6c9c5c20, + 0x2e1b0: 0x6c9c5e20, 0x2e1b1: 0x6c9c6020, 0x2e1b2: 0x6c9c6220, 0x2e1b3: 0x6c9c6420, + 0x2e1b4: 0x6c9c6620, 0x2e1b5: 0x6c9c6820, 0x2e1b6: 0x6c9c6a20, 0x2e1b7: 0x6c9c6c20, + 0x2e1b8: 0x6c9c6e20, 0x2e1b9: 0x6c9c7020, 0x2e1ba: 0x6c9c7220, 0x2e1bb: 0x6c9c7420, + 0x2e1bc: 0x6c9c7620, 0x2e1bd: 0x6c9c7820, 0x2e1be: 0x6c9c7a20, 0x2e1bf: 0x6c9c7c20, + // Block 0xb87, offset 0x2e1c0 + 0x2e1c0: 0x6c9c7e20, 0x2e1c1: 0x6c9c8020, 0x2e1c2: 0x6c9c8220, 0x2e1c3: 0x6c9c8420, + 0x2e1c4: 0x6c9c8620, 0x2e1c5: 0x6c9c8820, 0x2e1c6: 0x6c9c8a20, 0x2e1c7: 0x6c9c8c20, + 0x2e1c8: 0x6c9c8e20, 0x2e1c9: 0x6c9c9020, 0x2e1ca: 0x6c9c9220, 0x2e1cb: 0x6c9c9420, + 0x2e1cc: 0x6c9c9620, 0x2e1cd: 0x6c9c9820, 0x2e1ce: 0x6c9c9a20, 0x2e1cf: 0x6c9c9c20, + 0x2e1d0: 0x6c9c9e20, 0x2e1d1: 0x6c9ca020, 0x2e1d2: 0x6c9ca220, 0x2e1d3: 0x6c9ca420, + 0x2e1d4: 0x6c9ca620, 0x2e1d5: 0x6c9ca820, 0x2e1d6: 0x6c9caa20, 0x2e1d7: 0x6c9cac20, + 0x2e1d8: 0x6c9cae20, 0x2e1d9: 0x6c9cb020, 0x2e1da: 0x6c9cb220, 0x2e1db: 0x6c9cb420, + 0x2e1dc: 0x6c9cb620, 0x2e1dd: 0x6c9cb820, 0x2e1de: 0x6c9cba20, 0x2e1df: 0x6c9cbc20, + 0x2e1e0: 0x6c9cbe20, 0x2e1e1: 0x6c9cc020, 0x2e1e2: 0x6c9cc220, 0x2e1e3: 0x6c9cc420, + 0x2e1e4: 0x6c9cc620, 0x2e1e5: 0x6c9cc820, 0x2e1e6: 0x6c9cca20, 0x2e1e7: 0x6c9ccc20, + 0x2e1e8: 0x6c9cce20, 0x2e1e9: 0x6c9cd020, 0x2e1ea: 0x6c9cd220, 0x2e1eb: 0x6c9cd420, + 0x2e1ec: 0x6c9cd620, 0x2e1ed: 0x6c9cd820, 0x2e1ee: 0x6c9cda20, 0x2e1ef: 0x6c9cdc20, + 0x2e1f0: 0x6c9cde20, 0x2e1f1: 0x6c9ce020, 0x2e1f2: 0x6c9ce220, 0x2e1f3: 0x6c9ce420, + 0x2e1f4: 0x6cc88420, 0x2e1f5: 0x6c9ce620, 0x2e1f6: 0x6c9ce820, 0x2e1f7: 0x6c9cea20, + 0x2e1f8: 0x6c9cec20, 0x2e1f9: 0x6c9cee20, 0x2e1fa: 0x6c9cf020, 0x2e1fb: 0x6c9cf220, + 0x2e1fc: 0x6c9cf420, 0x2e1fd: 0x6c9cf620, 0x2e1fe: 0x6c9cf820, 0x2e1ff: 0x6c9cfa20, + // Block 0xb88, offset 0x2e200 + 0x2e200: 0x6c9cfc20, 0x2e201: 0x6c9cfe20, 0x2e202: 0x6c9d0020, 0x2e203: 0x6cc8ae20, + 0x2e204: 0x6cc8b020, 0x2e205: 0x6cc8b220, 0x2e206: 0x6cc8b420, 0x2e207: 0x6cc8b620, + 0x2e208: 0x6cc8b820, 0x2e209: 0x6cc8ba20, 0x2e20a: 0x6cc8bc20, 0x2e20b: 0x6cc8be20, + 0x2e20c: 0x6cc8c020, 0x2e20d: 0x6cc8c220, 0x2e20e: 0x6cc8c420, 0x2e20f: 0x6cc8c620, + 0x2e210: 0x6cc8c820, 0x2e211: 0x6cc8ca20, 0x2e212: 0x6cc8cc20, 0x2e213: 0x6cc8ce20, + 0x2e214: 0x6cc8d020, 0x2e215: 0x6cc8d220, 0x2e216: 0x6cc8d420, 0x2e217: 0x6cc8d620, + 0x2e218: 0x6cc8d820, 0x2e219: 0x6cc8da20, 0x2e21a: 0x6cc8dc20, 0x2e21b: 0x6cc8de20, + 0x2e21c: 0x6cc8e020, 0x2e21d: 0x6cc8e220, 0x2e21e: 0x6cc8e420, 0x2e21f: 0x6cc8e620, + 0x2e220: 0x6cc8e820, 0x2e221: 0x6cc8ea20, 0x2e222: 0x6cc8ec20, 0x2e223: 0x6cc8ee20, + 0x2e224: 0x6cc8f020, 0x2e225: 0x6cc8f220, 0x2e226: 0x6cc8f420, 0x2e227: 0x6cc8f620, + 0x2e228: 0x6cc8f820, 0x2e229: 0x6cc8fa20, 0x2e22a: 0x6cc8fc20, 0x2e22b: 0x6cc8fe20, + 0x2e22c: 0x6cc90020, 0x2e22d: 0x6cc90220, 0x2e22e: 0x6cc90420, 0x2e22f: 0x6cc90620, + 0x2e230: 0x6cc90820, 0x2e231: 0x6cc90a20, 0x2e232: 0x6cc90c20, 0x2e233: 0x6cc90e20, + 0x2e234: 0x6cc91020, 0x2e235: 0x6cc91220, 0x2e236: 0x6cc91420, 0x2e237: 0x6cc91620, + 0x2e238: 0x6cc91820, 0x2e239: 0x6cc91a20, 0x2e23a: 0x6cc91c20, 0x2e23b: 0x6cc91e20, + 0x2e23c: 0x6cc92020, 0x2e23d: 0x6cc92220, 0x2e23e: 0x6cc92420, 0x2e23f: 0x6cc92620, + // Block 0xb89, offset 0x2e240 + 0x2e240: 0x6cc92820, 0x2e241: 0x6cc92a20, 0x2e242: 0x6cc92c20, 0x2e243: 0x6cc92e20, + 0x2e244: 0x6cc93020, 0x2e245: 0x6cc93220, 0x2e246: 0x6cc93420, 0x2e247: 0x6cc93620, + 0x2e248: 0x6cc93820, 0x2e249: 0x6cc93a20, 0x2e24a: 0x6cc93c20, 0x2e24b: 0x6cc93e20, + 0x2e24c: 0x6cc94020, 0x2e24d: 0x6cc94220, 0x2e24e: 0x6cc94420, 0x2e24f: 0x6cc94620, + 0x2e250: 0x6cc94820, 0x2e251: 0x6cc94a20, 0x2e252: 0x6cc94c20, 0x2e253: 0x6cc94e20, + 0x2e254: 0x6cc95020, 0x2e255: 0x6cc95220, 0x2e256: 0x6cc95420, 0x2e257: 0x6cc95620, + 0x2e258: 0x6cc95820, 0x2e259: 0x6cc95a20, 0x2e25a: 0x6cc95c20, 0x2e25b: 0x6cc95e20, + 0x2e25c: 0x6cc96020, 0x2e25d: 0x6cc96220, 0x2e25e: 0x6cc96420, 0x2e25f: 0x6cc96620, + 0x2e260: 0x6cc96820, 0x2e261: 0x6cc96a20, 0x2e262: 0x6cc96c20, 0x2e263: 0x6cc96e20, + 0x2e264: 0x6cc97020, 0x2e265: 0x6cc97220, 0x2e266: 0x6cc97420, 0x2e267: 0x6cc97620, + 0x2e268: 0x6cc97820, 0x2e269: 0x6cc97a20, 0x2e26a: 0x6cc97c20, 0x2e26b: 0x6cc97e20, + 0x2e26c: 0x6cc98020, 0x2e26d: 0x6cc98220, 0x2e26e: 0x6cc98420, 0x2e26f: 0x6cf6e220, + 0x2e270: 0x6cf6e420, 0x2e271: 0x6cf6e620, 0x2e272: 0x6cf6e820, 0x2e273: 0x6cf6ea20, + 0x2e274: 0x6cf6ec20, 0x2e275: 0x6cf6ee20, 0x2e276: 0x6cf6f020, 0x2e277: 0x6cf6f220, + 0x2e278: 0x6cf6f420, 0x2e279: 0x6cf6f620, 0x2e27a: 0x6cf6f820, 0x2e27b: 0x6cf6fa20, + 0x2e27c: 0x6cf6fc20, 0x2e27d: 0x6cf6fe20, 0x2e27e: 0x6cf70020, 0x2e27f: 0x6cf70220, + // Block 0xb8a, offset 0x2e280 + 0x2e280: 0x6cf70420, 0x2e281: 0x6cf70620, 0x2e282: 0x6cf70820, 0x2e283: 0x6cf70a20, + 0x2e284: 0x6cf70c20, 0x2e285: 0x6cf70e20, 0x2e286: 0x6cf71020, 0x2e287: 0x6cf71220, + 0x2e288: 0x6cf71420, 0x2e289: 0x6cf71620, 0x2e28a: 0x6cf71820, 0x2e28b: 0x6cf71a20, + 0x2e28c: 0x6cf71c20, 0x2e28d: 0x6cf71e20, 0x2e28e: 0x6cf72020, 0x2e28f: 0x6cf72220, + 0x2e290: 0x6cf72420, 0x2e291: 0x6cf72620, 0x2e292: 0x6cf72820, 0x2e293: 0x6cf72a20, + 0x2e294: 0x6cf72c20, 0x2e295: 0x6cf72e20, 0x2e296: 0x6c9da420, 0x2e297: 0x6cf73020, + 0x2e298: 0x6cf73220, 0x2e299: 0x6cf73420, 0x2e29a: 0x6cf73620, 0x2e29b: 0x6cf73820, + 0x2e29c: 0x6cf73a20, 0x2e29d: 0x6cf73c20, 0x2e29e: 0x6cf73e20, 0x2e29f: 0x6cf74020, + 0x2e2a0: 0x6cf74220, 0x2e2a1: 0x6cf74420, 0x2e2a2: 0x6cf74620, 0x2e2a3: 0x6cf74820, + 0x2e2a4: 0x6cf74a20, 0x2e2a5: 0x6cf74c20, 0x2e2a6: 0x6cf74e20, 0x2e2a7: 0x6cf75020, + 0x2e2a8: 0x6cf75220, 0x2e2a9: 0x6cf75420, 0x2e2aa: 0x6cf75620, 0x2e2ab: 0x6cf75820, + 0x2e2ac: 0x6cf75a20, 0x2e2ad: 0x6cf75c20, 0x2e2ae: 0x6cca8820, 0x2e2af: 0x6cf75e20, + 0x2e2b0: 0x6cca8a20, 0x2e2b1: 0x6cf76020, 0x2e2b2: 0x6cf76220, 0x2e2b3: 0x6cf76420, + 0x2e2b4: 0x6cf76620, 0x2e2b5: 0x6cf76820, 0x2e2b6: 0x6cf76a20, 0x2e2b7: 0x6cf76c20, + 0x2e2b8: 0x6cf76e20, 0x2e2b9: 0x6cf77020, 0x2e2ba: 0x6cf77220, 0x2e2bb: 0x6cf77420, + 0x2e2bc: 0x6cf77620, 0x2e2bd: 0x6cf77820, 0x2e2be: 0x6cf77a20, 0x2e2bf: 0x6cf77c20, + // Block 0xb8b, offset 0x2e2c0 + 0x2e2c0: 0x6cf77e20, 0x2e2c1: 0x6cf78020, 0x2e2c2: 0x6cf78220, 0x2e2c3: 0x6cf78420, + 0x2e2c4: 0x6cf78620, 0x2e2c5: 0x6cf78820, 0x2e2c6: 0x6cf78a20, 0x2e2c7: 0x6cf78c20, + 0x2e2c8: 0x6cf78e20, 0x2e2c9: 0x6cf79020, 0x2e2ca: 0x6d264e20, 0x2e2cb: 0x6cf79220, + 0x2e2cc: 0x6cf79420, 0x2e2cd: 0x6d265020, 0x2e2ce: 0x6d265220, 0x2e2cf: 0x6d265420, + 0x2e2d0: 0x6d265620, 0x2e2d1: 0x6d265820, 0x2e2d2: 0x6d265a20, 0x2e2d3: 0x6d265c20, + 0x2e2d4: 0x6cf79620, 0x2e2d5: 0x6d265e20, 0x2e2d6: 0x6d266020, 0x2e2d7: 0x6d266220, + 0x2e2d8: 0x6cf79820, 0x2e2d9: 0x6d266420, 0x2e2da: 0x6d266620, 0x2e2db: 0x6d266820, + 0x2e2dc: 0x6d266a20, 0x2e2dd: 0x6d266c20, 0x2e2de: 0x6d266e20, 0x2e2df: 0x6d267020, + 0x2e2e0: 0x6d267220, 0x2e2e1: 0x6d267420, 0x2e2e2: 0x6d267620, 0x2e2e3: 0x6d267820, + 0x2e2e4: 0x6d267a20, 0x2e2e5: 0x6d267c20, 0x2e2e6: 0x6d267e20, 0x2e2e7: 0x6d268020, + 0x2e2e8: 0x6d268220, 0x2e2e9: 0x6d268420, 0x2e2ea: 0x6d268620, 0x2e2eb: 0x6d268820, + 0x2e2ec: 0x6d268a20, 0x2e2ed: 0x6d268c20, 0x2e2ee: 0x6d268e20, 0x2e2ef: 0x6d269020, + 0x2e2f0: 0x6d269220, 0x2e2f1: 0x6d269420, 0x2e2f2: 0x6d269620, 0x2e2f3: 0x6d269820, + 0x2e2f4: 0x6d269a20, 0x2e2f5: 0x6d269c20, 0x2e2f6: 0x6d269e20, 0x2e2f7: 0x6d26a020, + 0x2e2f8: 0x6d26a220, 0x2e2f9: 0x6d26a420, 0x2e2fa: 0x6d26a620, 0x2e2fb: 0x6d26a820, + 0x2e2fc: 0x6d26aa20, 0x2e2fd: 0x6d26ac20, 0x2e2fe: 0x6d26ae20, 0x2e2ff: 0x6d26b020, + // Block 0xb8c, offset 0x2e300 + 0x2e300: 0x6d26b220, 0x2e301: 0x6d26b420, 0x2e302: 0x6d26b620, 0x2e303: 0x6d26b820, + 0x2e304: 0x6d26ba20, 0x2e305: 0x6d26bc20, 0x2e306: 0x6d26be20, 0x2e307: 0x6d26c020, + 0x2e308: 0x6d26c220, 0x2e309: 0x6d26c420, 0x2e30a: 0x6d26c620, 0x2e30b: 0x6d26c820, + 0x2e30c: 0x6d26ca20, 0x2e30d: 0x6d26cc20, 0x2e30e: 0x6d26ce20, 0x2e30f: 0x6d26d020, + 0x2e310: 0x6d26d220, 0x2e311: 0x6d26d420, 0x2e312: 0x6d26d620, 0x2e313: 0x6d26d820, + 0x2e314: 0x6d26da20, 0x2e315: 0x6d26dc20, 0x2e316: 0x6d26de20, 0x2e317: 0x6d26e020, + 0x2e318: 0x6d26e220, 0x2e319: 0x6d26e420, 0x2e31a: 0x6d26e620, 0x2e31b: 0x6d26e820, + 0x2e31c: 0x6d26ea20, 0x2e31d: 0x6d26ec20, 0x2e31e: 0x6d26ee20, 0x2e31f: 0x6d26f020, + 0x2e320: 0x6d26f220, 0x2e321: 0x6d26f420, 0x2e322: 0x6d53c820, 0x2e323: 0x6d53ca20, + 0x2e324: 0x6d53cc20, 0x2e325: 0x6d53ce20, 0x2e326: 0x6d53d020, 0x2e327: 0x6d53d220, + 0x2e328: 0x6d53d420, 0x2e329: 0x6d539c20, 0x2e32a: 0x6d53d620, 0x2e32b: 0x6d53d820, + 0x2e32c: 0x6d53da20, 0x2e32d: 0x6d53dc20, 0x2e32e: 0x6d53de20, 0x2e32f: 0x6d53e020, + 0x2e330: 0x6d53e220, 0x2e331: 0x6d53e420, 0x2e332: 0x6d53e620, 0x2e333: 0x6d53e820, + 0x2e334: 0x6d53ea20, 0x2e335: 0x6d53ec20, 0x2e336: 0x6d53ee20, 0x2e337: 0x6d53f020, + 0x2e338: 0x6d53f220, 0x2e339: 0x6d53f420, 0x2e33a: 0x6d53f620, 0x2e33b: 0x6d53f820, + 0x2e33c: 0x6d53fa20, 0x2e33d: 0x6d53fc20, 0x2e33e: 0x6d53fe20, 0x2e33f: 0x6d540020, + // Block 0xb8d, offset 0x2e340 + 0x2e340: 0x6d540220, 0x2e341: 0x6d540420, 0x2e342: 0x6d540620, 0x2e343: 0x6d280020, + 0x2e344: 0x6d540820, 0x2e345: 0x6d540a20, 0x2e346: 0x6d540c20, 0x2e347: 0x6d540e20, + 0x2e348: 0x6d541020, 0x2e349: 0x6d541220, 0x2e34a: 0x6d541420, 0x2e34b: 0x6d541620, + 0x2e34c: 0x6d541820, 0x2e34d: 0x6d541a20, 0x2e34e: 0x6d541c20, 0x2e34f: 0x6d541e20, + 0x2e350: 0x6d542020, 0x2e351: 0x6d542220, 0x2e352: 0x6d542420, 0x2e353: 0x6d542620, + 0x2e354: 0x6d542820, 0x2e355: 0x6d542a20, 0x2e356: 0x6d542c20, 0x2e357: 0x6d542e20, + 0x2e358: 0x6d543020, 0x2e359: 0x6d543220, 0x2e35a: 0x6d543420, 0x2e35b: 0x6d543620, + 0x2e35c: 0x6d543820, 0x2e35d: 0x6d543a20, 0x2e35e: 0x6d543c20, 0x2e35f: 0x6d543e20, + 0x2e360: 0x6d544020, 0x2e361: 0x6d544220, 0x2e362: 0x6d544420, 0x2e363: 0x6d544620, + 0x2e364: 0x6d544820, 0x2e365: 0x6d544a20, 0x2e366: 0x6d544c20, 0x2e367: 0x6d544e20, + 0x2e368: 0x6d7efe20, 0x2e369: 0x6d545020, 0x2e36a: 0x6d545220, 0x2e36b: 0x6d545420, + 0x2e36c: 0x6d545620, 0x2e36d: 0x6d545820, 0x2e36e: 0x6d26f620, 0x2e36f: 0x6d545a20, + 0x2e370: 0x6d545c20, 0x2e371: 0x6d545e20, 0x2e372: 0x6d7f3020, 0x2e373: 0x6d7f3220, + 0x2e374: 0x6d7f3420, 0x2e375: 0x6d7f3620, 0x2e376: 0x6d7f3820, 0x2e377: 0x6d7f3a20, + 0x2e378: 0x6d7f3c20, 0x2e379: 0x6d7f3e20, 0x2e37a: 0x6d7f4020, 0x2e37b: 0x6d7f4220, + 0x2e37c: 0x6d7f4420, 0x2e37d: 0x6d7f4620, 0x2e37e: 0x6d7f4820, 0x2e37f: 0x6d7f4a20, + // Block 0xb8e, offset 0x2e380 + 0x2e380: 0x6d7f4c20, 0x2e381: 0x6d7f4e20, 0x2e382: 0x6d7f5020, 0x2e383: 0x6d7f5220, + 0x2e384: 0x6d7f5420, 0x2e385: 0x6d7f5620, 0x2e386: 0x6d7f5820, 0x2e387: 0x6d7f5a20, + 0x2e388: 0x6d7f5c20, 0x2e389: 0x6d7f5e20, 0x2e38a: 0x6d7f6020, 0x2e38b: 0x6d7f6220, + 0x2e38c: 0x6d7f6420, 0x2e38d: 0x6d7f6620, 0x2e38e: 0x6d7f6820, 0x2e38f: 0x6d7f6a20, + 0x2e390: 0x6d7f6c20, 0x2e391: 0x6d7f6e20, 0x2e392: 0x6d7f7020, 0x2e393: 0x6d7f7220, + 0x2e394: 0x6d7f7420, 0x2e395: 0x6d7f7620, 0x2e396: 0x6d7f7820, 0x2e397: 0x6d7f7a20, + 0x2e398: 0x6d7f7c20, 0x2e399: 0x6d7f7e20, 0x2e39a: 0x6d7f8020, 0x2e39b: 0x6d7f8220, + 0x2e39c: 0x6d7f8420, 0x2e39d: 0x6d7f8620, 0x2e39e: 0x6d7f8820, 0x2e39f: 0x6d7f8a20, + 0x2e3a0: 0x6d7f8c20, 0x2e3a1: 0x6d7f8e20, 0x2e3a2: 0x6d7f9020, 0x2e3a3: 0x6d7f9220, + 0x2e3a4: 0x6d7f9420, 0x2e3a5: 0x6d546020, 0x2e3a6: 0x6d7f9620, 0x2e3a7: 0x6d7f9820, + 0x2e3a8: 0x6d7f9a20, 0x2e3a9: 0x6d7f9c20, 0x2e3aa: 0x6d7f9e20, 0x2e3ab: 0x6d7fa020, + 0x2e3ac: 0x6d7fa220, 0x2e3ad: 0x6d7fa420, 0x2e3ae: 0x6d7fa620, 0x2e3af: 0x6d7fa820, + 0x2e3b0: 0x6d7faa20, 0x2e3b1: 0x6d7fac20, 0x2e3b2: 0x6d7fae20, 0x2e3b3: 0x6d7fb020, + 0x2e3b4: 0x6d7f0020, 0x2e3b5: 0x6d7fb220, 0x2e3b6: 0x6d7fb420, 0x2e3b7: 0x6d7fb620, + 0x2e3b8: 0x6d7fb820, 0x2e3b9: 0x6d7fba20, 0x2e3ba: 0x6d7fbc20, 0x2e3bb: 0x6d7fbe20, + 0x2e3bc: 0x6d7fc020, 0x2e3bd: 0x6da5dc20, 0x2e3be: 0x6da5de20, 0x2e3bf: 0x6da5e020, + // Block 0xb8f, offset 0x2e3c0 + 0x2e3c0: 0x6da5e220, 0x2e3c1: 0x6da5e420, 0x2e3c2: 0x6da5e620, 0x2e3c3: 0x6da5e820, + 0x2e3c4: 0x6da5ea20, 0x2e3c5: 0x6da5ec20, 0x2e3c6: 0x6da5ee20, 0x2e3c7: 0x6da5f020, + 0x2e3c8: 0x6da5f220, 0x2e3c9: 0x6da5f420, 0x2e3ca: 0x6da5f620, 0x2e3cb: 0x6da5f820, + 0x2e3cc: 0x6da5fa20, 0x2e3cd: 0x6da5fc20, 0x2e3ce: 0x6da5fe20, 0x2e3cf: 0x6da60020, + 0x2e3d0: 0x6da60220, 0x2e3d1: 0x6da60420, 0x2e3d2: 0x6da60620, 0x2e3d3: 0x6da60820, + 0x2e3d4: 0x6da60a20, 0x2e3d5: 0x6da60c20, 0x2e3d6: 0x6da60e20, 0x2e3d7: 0x6da61020, + 0x2e3d8: 0x6da61220, 0x2e3d9: 0x6da61420, 0x2e3da: 0x6da61620, 0x2e3db: 0x6da61820, + 0x2e3dc: 0x6da61a20, 0x2e3dd: 0x6da61c20, 0x2e3de: 0x6da61e20, 0x2e3df: 0x6da62020, + 0x2e3e0: 0x6da62220, 0x2e3e1: 0x6da62420, 0x2e3e2: 0x6da62620, 0x2e3e3: 0x6da62820, + 0x2e3e4: 0x6da62a20, 0x2e3e5: 0x6da62c20, 0x2e3e6: 0x6da62e20, 0x2e3e7: 0x6da63020, + 0x2e3e8: 0x6da63220, 0x2e3e9: 0x6da63420, 0x2e3ea: 0x6da63620, 0x2e3eb: 0x6dc76220, + 0x2e3ec: 0x6dc76420, 0x2e3ed: 0x6dc76620, 0x2e3ee: 0x6dc76820, 0x2e3ef: 0x6dc76a20, + 0x2e3f0: 0x6dc76c20, 0x2e3f1: 0x6dc76e20, 0x2e3f2: 0x6dc77020, 0x2e3f3: 0x6dc77220, + 0x2e3f4: 0x6dc77420, 0x2e3f5: 0x6dc77620, 0x2e3f6: 0x6dc77820, 0x2e3f7: 0x6dc77a20, + 0x2e3f8: 0x6dc77c20, 0x2e3f9: 0x6dc77e20, 0x2e3fa: 0x6dc78020, 0x2e3fb: 0x6dc78220, + 0x2e3fc: 0x6dc78420, 0x2e3fd: 0x6dc78620, 0x2e3fe: 0x6dc78820, 0x2e3ff: 0x6dc78a20, + // Block 0xb90, offset 0x2e400 + 0x2e400: 0x6dc78c20, 0x2e401: 0x6dc78e20, 0x2e402: 0x6dc79020, 0x2e403: 0x6dc79220, + 0x2e404: 0x6dc79420, 0x2e405: 0x6dc79620, 0x2e406: 0x6dc79820, 0x2e407: 0x6dc79a20, + 0x2e408: 0x6dc79c20, 0x2e409: 0x6dc79e20, 0x2e40a: 0x6dc7a020, 0x2e40b: 0x6de3ca20, + 0x2e40c: 0x6de3cc20, 0x2e40d: 0x6de3ce20, 0x2e40e: 0x6de3d020, 0x2e40f: 0x6de3d220, + 0x2e410: 0x6de3d420, 0x2e411: 0x6de3d620, 0x2e412: 0x6de3d820, 0x2e413: 0x6de3da20, + 0x2e414: 0x6de3dc20, 0x2e415: 0x6de3de20, 0x2e416: 0x6de3e020, 0x2e417: 0x6de3e220, + 0x2e418: 0x6de3e420, 0x2e419: 0x6de3e620, 0x2e41a: 0x6de3e820, 0x2e41b: 0x6da6f220, + 0x2e41c: 0x6de3ea20, 0x2e41d: 0x6de3ec20, 0x2e41e: 0x6de3ee20, 0x2e41f: 0x6de3f020, + 0x2e420: 0x6de3f220, 0x2e421: 0x6dc84c20, 0x2e422: 0x6de3f420, 0x2e423: 0x6de3f620, + 0x2e424: 0x6de3f820, 0x2e425: 0x6de3fa20, 0x2e426: 0x6de3fc20, 0x2e427: 0x6de47820, + 0x2e428: 0x6dfb2020, 0x2e429: 0x6dfb2220, 0x2e42a: 0x6dfb2420, 0x2e42b: 0x6de3fe20, + 0x2e42c: 0x6dfb2620, 0x2e42d: 0x6dc84e20, 0x2e42e: 0x6dfb2820, 0x2e42f: 0x6dfb2a20, + 0x2e430: 0x6dfb2c20, 0x2e431: 0x6dfb2e20, 0x2e432: 0x6dfb3020, 0x2e433: 0x6dfb3220, + 0x2e434: 0x6dfb3420, 0x2e435: 0x6dfb3620, 0x2e436: 0x6dfb3820, 0x2e437: 0x6e1db620, + 0x2e438: 0x6e0e6220, 0x2e439: 0x6dfb9820, 0x2e43a: 0x6e0e6420, 0x2e43b: 0x6e0e6620, + 0x2e43c: 0x6e0e6820, 0x2e43d: 0x6e0e6a20, 0x2e43e: 0x6e0e6c20, 0x2e43f: 0x6e0e6e20, + // Block 0xb91, offset 0x2e440 + 0x2e440: 0x6e0e7020, 0x2e441: 0x6e0e7220, 0x2e442: 0x6e0e7420, 0x2e443: 0x6e0e7620, + 0x2e444: 0x6e0e7820, 0x2e445: 0x6e0e7a20, 0x2e446: 0x6e1db820, 0x2e447: 0x6e1dba20, + 0x2e448: 0x6e1dbc20, 0x2e449: 0x6e1dbe20, 0x2e44a: 0x6e1dc020, 0x2e44b: 0x6e1dc220, + 0x2e44c: 0x6e0e7c20, 0x2e44d: 0x6e1dc420, 0x2e44e: 0x6e1dc620, 0x2e44f: 0x6e294220, + 0x2e450: 0x6e294420, 0x2e451: 0x6e294620, 0x2e452: 0x6e294820, 0x2e453: 0x6e325e20, + 0x2e454: 0x6e326020, 0x2e455: 0x6e326220, 0x2e456: 0x6e38b020, 0x2e457: 0x6e38b220, + 0x2e458: 0x6e38b420, 0x2e459: 0x6e38b620, 0x2e45a: 0x6e38b820, 0x2e45b: 0x6e38ba20, + 0x2e45c: 0x6e3d3020, 0x2e45d: 0x6e38d420, 0x2e45e: 0x6e42a620, 0x2e45f: 0x6e42a820, + 0x2e460: 0x6c04a620, 0x2e461: 0x6c12b420, 0x2e462: 0x6c12b620, 0x2e463: 0x6c376e20, + 0x2e464: 0x6c223c20, 0x2e465: 0x6c377020, 0x2e466: 0x6c377220, 0x2e467: 0x6c377420, + 0x2e468: 0x6c52ce20, 0x2e469: 0x6c52d020, 0x2e46a: 0x6c52d220, 0x2e46b: 0x6c755220, + 0x2e46c: 0x6c755420, 0x2e46d: 0x6c755620, 0x2e46e: 0x6c755820, 0x2e46f: 0x6c755a20, + 0x2e470: 0x6c755c20, 0x2e471: 0x6c755e20, 0x2e472: 0x6c9dae20, 0x2e473: 0x6c9db020, + 0x2e474: 0x6c758620, 0x2e475: 0x6c9db220, 0x2e476: 0x6c9db420, 0x2e477: 0x6c9db620, + 0x2e478: 0x6c9db820, 0x2e479: 0x6cca9820, 0x2e47a: 0x6cca9a20, 0x2e47b: 0x6cca9c20, + 0x2e47c: 0x6cca9e20, 0x2e47d: 0x6ccaa020, 0x2e47e: 0x6ccaa220, 0x2e47f: 0x6ccaa420, + // Block 0xb92, offset 0x2e480 + 0x2e480: 0x6cf8c820, 0x2e481: 0x6cf8ca20, 0x2e482: 0x6cf8cc20, 0x2e483: 0x6cf8ce20, + 0x2e484: 0x6cf8d020, 0x2e485: 0x6cf8d220, 0x2e486: 0x6cf8d420, 0x2e487: 0x6cf8d620, + 0x2e488: 0x6cf8d820, 0x2e489: 0x6d280820, 0x2e48a: 0x6d280a20, 0x2e48b: 0x6d280c20, + 0x2e48c: 0x6d280e20, 0x2e48d: 0x6d281020, 0x2e48e: 0x6d555620, 0x2e48f: 0x6d555820, + 0x2e490: 0x6d555a20, 0x2e491: 0x6d555c20, 0x2e492: 0x6d555e20, 0x2e493: 0x6d556020, + 0x2e494: 0x6d80d420, 0x2e495: 0x6d80d620, 0x2e496: 0x6d80d820, 0x2e497: 0x6d80da20, + 0x2e498: 0x6d80dc20, 0x2e499: 0x6d80de20, 0x2e49a: 0x6d80e020, 0x2e49b: 0x6da6fc20, + 0x2e49c: 0x6da6fe20, 0x2e49d: 0x6da70020, 0x2e49e: 0x6dc85020, 0x2e49f: 0x6dc85220, + 0x2e4a0: 0x6de47c20, 0x2e4a1: 0x6e1e0e20, 0x2e4a2: 0x6c04a820, 0x2e4a3: 0x6c097620, + 0x2e4a4: 0x6c12bc20, 0x2e4a5: 0x6c225220, 0x2e4a6: 0x6c379420, 0x2e4a7: 0x6c379620, + 0x2e4a8: 0x6c379820, 0x2e4a9: 0x6c379a20, 0x2e4aa: 0x6c52fe20, 0x2e4ab: 0x6c530020, + 0x2e4ac: 0x6c758820, 0x2e4ad: 0x6c758a20, 0x2e4ae: 0x6ccad620, 0x2e4af: 0x6ccad820, + 0x2e4b0: 0x6d284020, 0x2e4b1: 0x6cf90620, 0x2e4b2: 0x6cf90820, 0x2e4b3: 0x6cf90a20, + 0x2e4b4: 0x6d284420, 0x2e4b5: 0x6d558420, 0x2e4b6: 0x6d558620, 0x2e4b7: 0x6d80f220, + 0x2e4b8: 0x6dc85e20, 0x2e4b9: 0x6c04ae20, 0x2e4ba: 0x6c097c20, 0x2e4bb: 0x6c12c420, + 0x2e4bc: 0x6c225e20, 0x2e4bd: 0x6c37d220, 0x2e4be: 0x6c37d420, 0x2e4bf: 0x6c37d620, + // Block 0xb93, offset 0x2e4c0 + 0x2e4c0: 0x6c37d820, 0x2e4c1: 0x6c37da20, 0x2e4c2: 0x6c530e20, 0x2e4c3: 0x6c531020, + 0x2e4c4: 0x6c531220, 0x2e4c5: 0x6c531420, 0x2e4c6: 0x6c531620, 0x2e4c7: 0x6c531820, + 0x2e4c8: 0x6c75aa20, 0x2e4c9: 0x6c75ac20, 0x2e4ca: 0x6c75ae20, 0x2e4cb: 0x6c75b020, + 0x2e4cc: 0x6c9dec20, 0x2e4cd: 0x6c9dee20, 0x2e4ce: 0x6c9df020, 0x2e4cf: 0x6c9df220, + 0x2e4d0: 0x6c9df420, 0x2e4d1: 0x6c9df620, 0x2e4d2: 0x6c9df820, 0x2e4d3: 0x6c9dfa20, + 0x2e4d4: 0x6ccb0420, 0x2e4d5: 0x6ccb0620, 0x2e4d6: 0x6ccb0820, 0x2e4d7: 0x6ccb0a20, + 0x2e4d8: 0x6ccb0c20, 0x2e4d9: 0x6ccb0e20, 0x2e4da: 0x6ccb1020, 0x2e4db: 0x6cf92c20, + 0x2e4dc: 0x6cf92e20, 0x2e4dd: 0x6d285820, 0x2e4de: 0x6d285a20, 0x2e4df: 0x6d285c20, + 0x2e4e0: 0x6d285e20, 0x2e4e1: 0x6d286020, 0x2e4e2: 0x6d559e20, 0x2e4e3: 0x6d55a020, + 0x2e4e4: 0x6d55a220, 0x2e4e5: 0x6d55a420, 0x2e4e6: 0x6d55a620, 0x2e4e7: 0x6d810820, + 0x2e4e8: 0x6d810a20, 0x2e4e9: 0x6d810c20, 0x2e4ea: 0x6d810e20, 0x2e4eb: 0x6d811020, + 0x2e4ec: 0x6da72020, 0x2e4ed: 0x6da72220, 0x2e4ee: 0x6da72420, 0x2e4ef: 0x6dc86c20, + 0x2e4f0: 0x6de48a20, 0x2e4f1: 0x6de48c20, 0x2e4f2: 0x6e0ee220, 0x2e4f3: 0x6c04b420, + 0x2e4f4: 0x6c380620, 0x2e4f5: 0x6c534820, 0x2e4f6: 0x6c534a20, 0x2e4f7: 0x6c75e020, + 0x2e4f8: 0x6c9e2220, 0x2e4f9: 0x6c9e2420, 0x2e4fa: 0x6c9e2620, 0x2e4fb: 0x6c9e2820, + 0x2e4fc: 0x6ccb5020, 0x2e4fd: 0x6ccb5220, 0x2e4fe: 0x6ccb6820, 0x2e4ff: 0x6cf95820, + // Block 0xb94, offset 0x2e500 + 0x2e500: 0x6cf95a20, 0x2e501: 0x6cf95c20, 0x2e502: 0x6cf95e20, 0x2e503: 0x6d287820, + 0x2e504: 0x6d287a20, 0x2e505: 0x6d55ca20, 0x2e506: 0x6d55cc20, 0x2e507: 0x6d812e20, + 0x2e508: 0x6d813020, 0x2e509: 0x6dc89020, 0x2e50a: 0x6e298620, 0x2e50b: 0x6c04b620, + 0x2e50c: 0x6c04b820, 0x2e50d: 0x6c098020, 0x2e50e: 0x6c12d420, 0x2e50f: 0x6c227620, + 0x2e510: 0x6c227820, 0x2e511: 0x6c380e20, 0x2e512: 0x6c535220, 0x2e513: 0x6cf97c20, + 0x2e514: 0x6c04bc20, 0x2e515: 0x6c12d820, 0x2e516: 0x6c535820, 0x2e517: 0x6c535a20, + 0x2e518: 0x6c535c20, 0x2e519: 0x6c75ee20, 0x2e51a: 0x6da74620, 0x2e51b: 0x6c04be20, + 0x2e51c: 0x6c228220, 0x2e51d: 0x6c228420, 0x2e51e: 0x6c382a20, 0x2e51f: 0x6c382c20, + 0x2e520: 0x6c536020, 0x2e521: 0x6c536220, 0x2e522: 0x6c75f820, 0x2e523: 0x6c75fa20, + 0x2e524: 0x6c75fc20, 0x2e525: 0x6c75fe20, 0x2e526: 0x6c760020, 0x2e527: 0x6c760220, + 0x2e528: 0x6c760420, 0x2e529: 0x6c760620, 0x2e52a: 0x6c760820, 0x2e52b: 0x6c9e6220, + 0x2e52c: 0x6c9e6420, 0x2e52d: 0x6c9e6620, 0x2e52e: 0x6c9e6820, 0x2e52f: 0x6ccb7220, + 0x2e530: 0x6ccb7420, 0x2e531: 0x6ccb7620, 0x2e532: 0x6ccb7820, 0x2e533: 0x6ccb7a20, + 0x2e534: 0x6ccb7c20, 0x2e535: 0x6ccb7e20, 0x2e536: 0x6ccb8020, 0x2e537: 0x6cf98c20, + 0x2e538: 0x6cf98e20, 0x2e539: 0x6cf99020, 0x2e53a: 0x6cf99220, 0x2e53b: 0x6cf99420, + 0x2e53c: 0x6cf99620, 0x2e53d: 0x6cf99820, 0x2e53e: 0x6d28aa20, 0x2e53f: 0x6d55de20, + // Block 0xb95, offset 0x2e540 + 0x2e540: 0x6d55e020, 0x2e541: 0x6d55e220, 0x2e542: 0x6d55e420, 0x2e543: 0x6d816620, + 0x2e544: 0x6d816820, 0x2e545: 0x6d816a20, 0x2e546: 0x6d816c20, 0x2e547: 0x6d816e20, + 0x2e548: 0x6da74a20, 0x2e549: 0x6da74c20, 0x2e54a: 0x6da74e20, 0x2e54b: 0x6dc89620, + 0x2e54c: 0x6de4a420, 0x2e54d: 0x6e1e2420, 0x2e54e: 0x6e3d4a20, 0x2e54f: 0x6c04c220, + 0x2e550: 0x6c098420, 0x2e551: 0x6c098620, 0x2e552: 0x6c12e620, 0x2e553: 0x6c385020, + 0x2e554: 0x6c04c420, 0x2e555: 0x6c098a20, 0x2e556: 0x6c12ea20, 0x2e557: 0x6c12ec20, + 0x2e558: 0x6c12ee20, 0x2e559: 0x6c229620, 0x2e55a: 0x6c229820, 0x2e55b: 0x6c385820, + 0x2e55c: 0x6c385a20, 0x2e55d: 0x6c385c20, 0x2e55e: 0x6c53b820, 0x2e55f: 0x6c53ba20, + 0x2e560: 0x6c53bc20, 0x2e561: 0x6c53be20, 0x2e562: 0x6c53c020, 0x2e563: 0x6c763a20, + 0x2e564: 0x6c763c20, 0x2e565: 0x6c763e20, 0x2e566: 0x6c764020, 0x2e567: 0x6c764220, + 0x2e568: 0x6c764420, 0x2e569: 0x6c764620, 0x2e56a: 0x6c9ea220, 0x2e56b: 0x6c9ea420, + 0x2e56c: 0x6ccbc620, 0x2e56d: 0x6ccbc820, 0x2e56e: 0x6ccbca20, 0x2e56f: 0x6ccbcc20, + 0x2e570: 0x6ccbce20, 0x2e571: 0x6cf9d820, 0x2e572: 0x6d28ec20, 0x2e573: 0x6d28ee20, + 0x2e574: 0x6c04c620, 0x2e575: 0x6c01fa20, 0x2e576: 0x6c098e20, 0x2e577: 0x6c099020, + 0x2e578: 0x6c099220, 0x2e579: 0x6c099420, 0x2e57a: 0x6c098c20, 0x2e57b: 0x6c099c20, + 0x2e57c: 0x6c12f620, 0x2e57d: 0x6c0c5c20, 0x2e57e: 0x6c099e20, 0x2e57f: 0x6c09a020, + // Block 0xb96, offset 0x2e580 + 0x2e580: 0x6c09a220, 0x2e581: 0x6c09a420, 0x2e582: 0x6c229e20, 0x2e583: 0x6c09a620, + 0x2e584: 0x6c09a820, 0x2e585: 0x6c09aa20, 0x2e586: 0x6c12f820, 0x2e587: 0x6c09ac20, + 0x2e588: 0x6c09ae20, 0x2e589: 0x6c09b020, 0x2e58a: 0x6c12fe20, 0x2e58b: 0x6c130020, + 0x2e58c: 0x6c130220, 0x2e58d: 0x6c130420, 0x2e58e: 0x6c130620, 0x2e58f: 0x6c130820, + 0x2e590: 0x6c130a20, 0x2e591: 0x6c130c20, 0x2e592: 0x6c130e20, 0x2e593: 0x6c131020, + 0x2e594: 0x6c131220, 0x2e595: 0x6c131420, 0x2e596: 0x6c22a220, 0x2e597: 0x6c131620, + 0x2e598: 0x6c131820, 0x2e599: 0x6c131a20, 0x2e59a: 0x6c131c20, 0x2e59b: 0x6c131e20, + 0x2e59c: 0x6c132020, 0x2e59d: 0x6c132220, 0x2e59e: 0x6c22a420, 0x2e59f: 0x6c132420, + 0x2e5a0: 0x6c132620, 0x2e5a1: 0x6c132820, 0x2e5a2: 0x6c132a20, 0x2e5a3: 0x6c132c20, + 0x2e5a4: 0x6c132e20, 0x2e5a5: 0x6c22bc20, 0x2e5a6: 0x6c22be20, 0x2e5a7: 0x6c22c020, + 0x2e5a8: 0x6c22c220, 0x2e5a9: 0x6c22c420, 0x2e5aa: 0x6c22c620, 0x2e5ab: 0x6c22c820, + 0x2e5ac: 0x6c386620, 0x2e5ad: 0x6c22ca20, 0x2e5ae: 0x6c22cc20, 0x2e5af: 0x6c22ce20, + 0x2e5b0: 0x6c22d020, 0x2e5b1: 0x6c22d220, 0x2e5b2: 0x6c22d420, 0x2e5b3: 0x6c22d620, + 0x2e5b4: 0x6c22d820, 0x2e5b5: 0x6c22da20, 0x2e5b6: 0x6c22dc20, 0x2e5b7: 0x6c135420, + 0x2e5b8: 0x6c22de20, 0x2e5b9: 0x6c22e020, 0x2e5ba: 0x6c22e220, 0x2e5bb: 0x6c22e420, + 0x2e5bc: 0x6c22e620, 0x2e5bd: 0x6c22e820, 0x2e5be: 0x6c22ea20, 0x2e5bf: 0x6c22ec20, + // Block 0xb97, offset 0x2e5c0 + 0x2e5c0: 0x6c386820, 0x2e5c1: 0x6c22ee20, 0x2e5c2: 0x6c22f020, 0x2e5c3: 0x6c22f220, + 0x2e5c4: 0x6c22f420, 0x2e5c5: 0x6c22f620, 0x2e5c6: 0x6c22f820, 0x2e5c7: 0x6c22fa20, + 0x2e5c8: 0x6c22fc20, 0x2e5c9: 0x6c22fe20, 0x2e5ca: 0x6c386a20, 0x2e5cb: 0x6c230020, + 0x2e5cc: 0x6c230220, 0x2e5cd: 0x6c230420, 0x2e5ce: 0x6c230620, 0x2e5cf: 0x6c230820, + 0x2e5d0: 0x6c230a20, 0x2e5d1: 0x6c230c20, 0x2e5d2: 0x6c230e20, 0x2e5d3: 0x6c386c20, + 0x2e5d4: 0x6c231020, 0x2e5d5: 0x6c231220, 0x2e5d6: 0x6c231420, 0x2e5d7: 0x6c53ce20, + 0x2e5d8: 0x6c231620, 0x2e5d9: 0x6c231820, 0x2e5da: 0x6c231a20, 0x2e5db: 0x6c231c20, + 0x2e5dc: 0x6c231e20, 0x2e5dd: 0x6c386e20, 0x2e5de: 0x6c232020, 0x2e5df: 0x6c232220, + 0x2e5e0: 0x6c232420, 0x2e5e1: 0x6c232620, 0x2e5e2: 0x6c232820, 0x2e5e3: 0x6c232a20, + 0x2e5e4: 0x6c232c20, 0x2e5e5: 0x6c232e20, 0x2e5e6: 0x6c233020, 0x2e5e7: 0x6c233220, + 0x2e5e8: 0x6c233420, 0x2e5e9: 0x6c233620, 0x2e5ea: 0x6c233820, 0x2e5eb: 0x6c388620, + 0x2e5ec: 0x6c388820, 0x2e5ed: 0x6c388a20, 0x2e5ee: 0x6c388c20, 0x2e5ef: 0x6c53d020, + 0x2e5f0: 0x6c388e20, 0x2e5f1: 0x6c389020, 0x2e5f2: 0x6c389220, 0x2e5f3: 0x6c389420, + 0x2e5f4: 0x6c389620, 0x2e5f5: 0x6c389820, 0x2e5f6: 0x6c389a20, 0x2e5f7: 0x6c389c20, + 0x2e5f8: 0x6c389e20, 0x2e5f9: 0x6c38a020, 0x2e5fa: 0x6c38a220, 0x2e5fb: 0x6c38a420, + 0x2e5fc: 0x6c38a620, 0x2e5fd: 0x6c38a820, 0x2e5fe: 0x6c38aa20, 0x2e5ff: 0x6c38ac20, + // Block 0xb98, offset 0x2e600 + 0x2e600: 0x6c38ae20, 0x2e601: 0x6c38b020, 0x2e602: 0x6c38b220, 0x2e603: 0x6c38b420, + 0x2e604: 0x6c38b620, 0x2e605: 0x6c38b820, 0x2e606: 0x6c38ba20, 0x2e607: 0x6c38bc20, + 0x2e608: 0x6c38be20, 0x2e609: 0x6c53d220, 0x2e60a: 0x6c38c020, 0x2e60b: 0x6c38c220, + 0x2e60c: 0x6c38c420, 0x2e60d: 0x6c38c620, 0x2e60e: 0x6c38c820, 0x2e60f: 0x6c38ca20, + 0x2e610: 0x6c38cc20, 0x2e611: 0x6c38ce20, 0x2e612: 0x6c38d020, 0x2e613: 0x6c38d220, + 0x2e614: 0x6c38d420, 0x2e615: 0x6c38d620, 0x2e616: 0x6c38d820, 0x2e617: 0x6c38da20, + 0x2e618: 0x6c38dc20, 0x2e619: 0x6c38de20, 0x2e61a: 0x6c53f220, 0x2e61b: 0x6c38e020, + 0x2e61c: 0x6c38e220, 0x2e61d: 0x6c38e420, 0x2e61e: 0x6c38e620, 0x2e61f: 0x6c38e820, + 0x2e620: 0x6c38ea20, 0x2e621: 0x6c38ec20, 0x2e622: 0x6c38ee20, 0x2e623: 0x6c38f020, + 0x2e624: 0x6c38f220, 0x2e625: 0x6c38f420, 0x2e626: 0x6c38f620, 0x2e627: 0x6c38f820, + 0x2e628: 0x6c38fa20, 0x2e629: 0x6c38fc20, 0x2e62a: 0x6c38fe20, 0x2e62b: 0x6c390020, + 0x2e62c: 0x6c390220, 0x2e62d: 0x6c390420, 0x2e62e: 0x6c390620, 0x2e62f: 0x6c390820, + 0x2e630: 0x6c764a20, 0x2e631: 0x6c390a20, 0x2e632: 0x6c390c20, 0x2e633: 0x6c390e20, + 0x2e634: 0x6c53d420, 0x2e635: 0x6c5a4620, 0x2e636: 0x6c53d620, 0x2e637: 0x6c391020, + 0x2e638: 0x6c391220, 0x2e639: 0x6c391420, 0x2e63a: 0x6c391620, 0x2e63b: 0x6c391820, + 0x2e63c: 0x6c391a20, 0x2e63d: 0x6c391c20, 0x2e63e: 0x6c391e20, 0x2e63f: 0x6c53f420, + // Block 0xb99, offset 0x2e640 + 0x2e640: 0x6c53f620, 0x2e641: 0x6c53f820, 0x2e642: 0x6c53fa20, 0x2e643: 0x6c53fc20, + 0x2e644: 0x6c53fe20, 0x2e645: 0x6c540020, 0x2e646: 0x6c540220, 0x2e647: 0x6c540420, + 0x2e648: 0x6c540620, 0x2e649: 0x6c540820, 0x2e64a: 0x6c540a20, 0x2e64b: 0x6c540c20, + 0x2e64c: 0x6c540e20, 0x2e64d: 0x6c767020, 0x2e64e: 0x6c541020, 0x2e64f: 0x6c541220, + 0x2e650: 0x6c541420, 0x2e651: 0x6c541620, 0x2e652: 0x6c541820, 0x2e653: 0x6c541a20, + 0x2e654: 0x6c541c20, 0x2e655: 0x6c541e20, 0x2e656: 0x6c767220, 0x2e657: 0x6c542020, + 0x2e658: 0x6c542220, 0x2e659: 0x6c542420, 0x2e65a: 0x6c542620, 0x2e65b: 0x6c542820, + 0x2e65c: 0x6c764c20, 0x2e65d: 0x6c542a20, 0x2e65e: 0x6c542c20, 0x2e65f: 0x6c542e20, + 0x2e660: 0x6c543020, 0x2e661: 0x6c543220, 0x2e662: 0x6c543420, 0x2e663: 0x6c543620, + 0x2e664: 0x6c543820, 0x2e665: 0x6c543a20, 0x2e666: 0x6c543c20, 0x2e667: 0x6c543e20, + 0x2e668: 0x6c544020, 0x2e669: 0x6c544220, 0x2e66a: 0x6c544420, 0x2e66b: 0x6c544620, + 0x2e66c: 0x6c544820, 0x2e66d: 0x6c544a20, 0x2e66e: 0x6c544c20, 0x2e66f: 0x6c764e20, + 0x2e670: 0x6c399020, 0x2e671: 0x6c544e20, 0x2e672: 0x6c545020, 0x2e673: 0x6c545220, + 0x2e674: 0x6c545420, 0x2e675: 0x6c545620, 0x2e676: 0x6c545820, 0x2e677: 0x6c545a20, + 0x2e678: 0x6c545c20, 0x2e679: 0x6c545e20, 0x2e67a: 0x6c546020, 0x2e67b: 0x6c546220, + 0x2e67c: 0x6c546420, 0x2e67d: 0x6c546620, 0x2e67e: 0x6c546820, 0x2e67f: 0x6c546a20, + // Block 0xb9a, offset 0x2e680 + 0x2e680: 0x6c546c20, 0x2e681: 0x6c546e20, 0x2e682: 0x6c547020, 0x2e683: 0x6c547220, + 0x2e684: 0x6c547420, 0x2e685: 0x6c547620, 0x2e686: 0x6c765020, 0x2e687: 0x6c547820, + 0x2e688: 0x6c547a20, 0x2e689: 0x6c547c20, 0x2e68a: 0x6c547e20, 0x2e68b: 0x6c548020, + 0x2e68c: 0x6c548220, 0x2e68d: 0x6c548420, 0x2e68e: 0x6c548620, 0x2e68f: 0x6c548820, + 0x2e690: 0x6c548a20, 0x2e691: 0x6c548c20, 0x2e692: 0x6c548e20, 0x2e693: 0x6c549020, + 0x2e694: 0x6c549220, 0x2e695: 0x6c549420, 0x2e696: 0x6c767420, 0x2e697: 0x6c767620, + 0x2e698: 0x6c767820, 0x2e699: 0x6c767a20, 0x2e69a: 0x6c767c20, 0x2e69b: 0x6c767e20, + 0x2e69c: 0x6c768020, 0x2e69d: 0x6c768220, 0x2e69e: 0x6c768420, 0x2e69f: 0x6c768620, + 0x2e6a0: 0x6c768820, 0x2e6a1: 0x6c768a20, 0x2e6a2: 0x6c768c20, 0x2e6a3: 0x6c768e20, + 0x2e6a4: 0x6c769020, 0x2e6a5: 0x6c769220, 0x2e6a6: 0x6c769420, 0x2e6a7: 0x6c769620, + 0x2e6a8: 0x6c769820, 0x2e6a9: 0x6c769a20, 0x2e6aa: 0x6c769c20, 0x2e6ab: 0x6c769e20, + 0x2e6ac: 0x6c76a020, 0x2e6ad: 0x6c76a220, 0x2e6ae: 0x6c76a420, 0x2e6af: 0x6c76a620, + 0x2e6b0: 0x6c76a820, 0x2e6b1: 0x6c76aa20, 0x2e6b2: 0x6c76ac20, 0x2e6b3: 0x6c76ae20, + 0x2e6b4: 0x6c76b020, 0x2e6b5: 0x6c76b220, 0x2e6b6: 0x6c76b420, 0x2e6b7: 0x6c76b620, + 0x2e6b8: 0x6c76b820, 0x2e6b9: 0x6c76ba20, 0x2e6ba: 0x6c76bc20, 0x2e6bb: 0x6c76be20, + 0x2e6bc: 0x6c76c020, 0x2e6bd: 0x6c76c220, 0x2e6be: 0x6c76c420, 0x2e6bf: 0x6c76c620, + // Block 0xb9b, offset 0x2e6c0 + 0x2e6c0: 0x6c76c820, 0x2e6c1: 0x6c76ca20, 0x2e6c2: 0x6c76cc20, 0x2e6c3: 0x6c76ce20, + 0x2e6c4: 0x6c76d020, 0x2e6c5: 0x6c76d220, 0x2e6c6: 0x6c76d420, 0x2e6c7: 0x6c76d620, + 0x2e6c8: 0x6c76d820, 0x2e6c9: 0x6c76da20, 0x2e6ca: 0x6c76dc20, 0x2e6cb: 0x6c76de20, + 0x2e6cc: 0x6c76e020, 0x2e6cd: 0x6c76e220, 0x2e6ce: 0x6c9eae20, 0x2e6cf: 0x6c76e420, + 0x2e6d0: 0x6c76e620, 0x2e6d1: 0x6c76e820, 0x2e6d2: 0x6c76ea20, 0x2e6d3: 0x6c76ec20, + 0x2e6d4: 0x6c76ee20, 0x2e6d5: 0x6c76f020, 0x2e6d6: 0x6c76f220, 0x2e6d7: 0x6c76f420, + 0x2e6d8: 0x6c76f620, 0x2e6d9: 0x6c9ee020, 0x2e6da: 0x6c76f820, 0x2e6db: 0x6c76fa20, + 0x2e6dc: 0x6c76fc20, 0x2e6dd: 0x6c76fe20, 0x2e6de: 0x6c770020, 0x2e6df: 0x6c770220, + 0x2e6e0: 0x6c770420, 0x2e6e1: 0x6c770620, 0x2e6e2: 0x6c770820, 0x2e6e3: 0x6c770a20, + 0x2e6e4: 0x6c770c20, 0x2e6e5: 0x6c770e20, 0x2e6e6: 0x6c771020, 0x2e6e7: 0x6c771220, + 0x2e6e8: 0x6c771420, 0x2e6e9: 0x6c771620, 0x2e6ea: 0x6c9ee220, 0x2e6eb: 0x6c9ee420, + 0x2e6ec: 0x6c9ee620, 0x2e6ed: 0x6c9ee820, 0x2e6ee: 0x6c9eea20, 0x2e6ef: 0x6c9eec20, + 0x2e6f0: 0x6c9eee20, 0x2e6f1: 0x6c9ef020, 0x2e6f2: 0x6c9ef220, 0x2e6f3: 0x6c9ef420, + 0x2e6f4: 0x6c9ef620, 0x2e6f5: 0x6c9ef820, 0x2e6f6: 0x6c9efa20, 0x2e6f7: 0x6c9efc20, + 0x2e6f8: 0x6c9efe20, 0x2e6f9: 0x6c9f0020, 0x2e6fa: 0x6c9f0220, 0x2e6fb: 0x6c9f0420, + 0x2e6fc: 0x6c9f0620, 0x2e6fd: 0x6c9f0820, 0x2e6fe: 0x6c9f0a20, 0x2e6ff: 0x6c9f0c20, + // Block 0xb9c, offset 0x2e700 + 0x2e700: 0x6c9f0e20, 0x2e701: 0x6c9f1020, 0x2e702: 0x6c9f1220, 0x2e703: 0x6c9f1420, + 0x2e704: 0x6c9f1620, 0x2e705: 0x6c9f1820, 0x2e706: 0x6c9f1a20, 0x2e707: 0x6c9f1c20, + 0x2e708: 0x6c9f1e20, 0x2e709: 0x6c9f2020, 0x2e70a: 0x6c9f2220, 0x2e70b: 0x6c9f2420, + 0x2e70c: 0x6c9f2620, 0x2e70d: 0x6c9f2820, 0x2e70e: 0x6c9f2a20, 0x2e70f: 0x6c9f2c20, + 0x2e710: 0x6c9f2e20, 0x2e711: 0x6c9f3020, 0x2e712: 0x6c9f3220, 0x2e713: 0x6c9f3420, + 0x2e714: 0x6c9f3620, 0x2e715: 0x6c9f3820, 0x2e716: 0x6c9f3a20, 0x2e717: 0x6c9f3c20, + 0x2e718: 0x6c9f3e20, 0x2e719: 0x6c9f4020, 0x2e71a: 0x6c9f4220, 0x2e71b: 0x6c9f4420, + 0x2e71c: 0x6c9f4620, 0x2e71d: 0x6c9f4820, 0x2e71e: 0x6c9f4a20, 0x2e71f: 0x6c9f4c20, + 0x2e720: 0x6c9f4e20, 0x2e721: 0x6c9f5020, 0x2e722: 0x6c9f5220, 0x2e723: 0x6c9f5420, + 0x2e724: 0x6c9f5620, 0x2e725: 0x6c9f5820, 0x2e726: 0x6c9f5a20, 0x2e727: 0x6c9f5c20, + 0x2e728: 0x6c9f5e20, 0x2e729: 0x6c9f6020, 0x2e72a: 0x6c9f6220, 0x2e72b: 0x6c9f6420, + 0x2e72c: 0x6c9f6620, 0x2e72d: 0x6c9f6820, 0x2e72e: 0x6c9f6a20, 0x2e72f: 0x6c9f6c20, + 0x2e730: 0x6c9f6e20, 0x2e731: 0x6c9f7020, 0x2e732: 0x6c9f7220, 0x2e733: 0x6c9f7420, + 0x2e734: 0x6c9f7620, 0x2e735: 0x6c9f7820, 0x2e736: 0x6c9f7a20, 0x2e737: 0x6c9f7c20, + 0x2e738: 0x6c9f7e20, 0x2e739: 0x6c9f8020, 0x2e73a: 0x6c9f8220, 0x2e73b: 0x6c9f8420, + 0x2e73c: 0x6ccbdc20, 0x2e73d: 0x6c9f8620, 0x2e73e: 0x6ccbde20, 0x2e73f: 0x6c9f8820, + // Block 0xb9d, offset 0x2e740 + 0x2e740: 0x6c9f8a20, 0x2e741: 0x6c9f8c20, 0x2e742: 0x6c9f8e20, 0x2e743: 0x6ccc0c20, + 0x2e744: 0x6c9f9020, 0x2e745: 0x6c9f9220, 0x2e746: 0x6c9f9420, 0x2e747: 0x6c9f9620, + 0x2e748: 0x6c9f9820, 0x2e749: 0x6c9f9a20, 0x2e74a: 0x6c9f9c20, 0x2e74b: 0x6c9f9e20, + 0x2e74c: 0x6c9fa020, 0x2e74d: 0x6c9fa220, 0x2e74e: 0x6c9fa420, 0x2e74f: 0x6c9fa620, + 0x2e750: 0x6c9fa820, 0x2e751: 0x6c9faa20, 0x2e752: 0x6c9fac20, 0x2e753: 0x6c9fae20, + 0x2e754: 0x6c9fb020, 0x2e755: 0x6c9fb220, 0x2e756: 0x6c9fb420, 0x2e757: 0x6c9fb620, + 0x2e758: 0x6ccc0e20, 0x2e759: 0x6ccc1020, 0x2e75a: 0x6c9fb820, 0x2e75b: 0x6ccc1220, + 0x2e75c: 0x6ccc1420, 0x2e75d: 0x6ccc1620, 0x2e75e: 0x6ccc1820, 0x2e75f: 0x6ccc1a20, + 0x2e760: 0x6ccc1c20, 0x2e761: 0x6ccc1e20, 0x2e762: 0x6ccc2020, 0x2e763: 0x6ccc2220, + 0x2e764: 0x6ccc2420, 0x2e765: 0x6ccc2620, 0x2e766: 0x6ccc2820, 0x2e767: 0x6ccc2a20, + 0x2e768: 0x6ccc2c20, 0x2e769: 0x6ccc2e20, 0x2e76a: 0x6ccc3020, 0x2e76b: 0x6ccc3220, + 0x2e76c: 0x6ccc3420, 0x2e76d: 0x6ccc3620, 0x2e76e: 0x6ccc3820, 0x2e76f: 0x6ccc3a20, + 0x2e770: 0x6ccc3c20, 0x2e771: 0x6ccc3e20, 0x2e772: 0x6ccc4020, 0x2e773: 0x6ccc4220, + 0x2e774: 0x6ccc4420, 0x2e775: 0x6ccc4620, 0x2e776: 0x6ccc4820, 0x2e777: 0x6ccc4a20, + 0x2e778: 0x6ccc4c20, 0x2e779: 0x6ccc4e20, 0x2e77a: 0x6ccc5020, 0x2e77b: 0x6ccc5220, + 0x2e77c: 0x6ccc5420, 0x2e77d: 0x6ccc5620, 0x2e77e: 0x6ccc5820, 0x2e77f: 0x6ccc5a20, + // Block 0xb9e, offset 0x2e780 + 0x2e780: 0x6ccc5c20, 0x2e781: 0x6ccc5e20, 0x2e782: 0x6ccc6020, 0x2e783: 0x6ccc6220, + 0x2e784: 0x6ccc6420, 0x2e785: 0x6ccc6620, 0x2e786: 0x6ccc6820, 0x2e787: 0x6ccc6a20, + 0x2e788: 0x6ccc6c20, 0x2e789: 0x6ccc6e20, 0x2e78a: 0x6ccc7020, 0x2e78b: 0x6ccc7220, + 0x2e78c: 0x6ccc7420, 0x2e78d: 0x6ccc7620, 0x2e78e: 0x6ccc7820, 0x2e78f: 0x6ccc7a20, + 0x2e790: 0x6ccc7c20, 0x2e791: 0x6ccc7e20, 0x2e792: 0x6ccc8020, 0x2e793: 0x6ccc8220, + 0x2e794: 0x6ccc8420, 0x2e795: 0x6ccc8620, 0x2e796: 0x6ccc8820, 0x2e797: 0x6ccc8a20, + 0x2e798: 0x6ccc8c20, 0x2e799: 0x6ccc8e20, 0x2e79a: 0x6ccc9020, 0x2e79b: 0x6ccc9220, + 0x2e79c: 0x6ccc9420, 0x2e79d: 0x6ccc9620, 0x2e79e: 0x6ccc9820, 0x2e79f: 0x6ccc9a20, + 0x2e7a0: 0x6ccc9c20, 0x2e7a1: 0x6ccc9e20, 0x2e7a2: 0x6ccca020, 0x2e7a3: 0x6ccca220, + 0x2e7a4: 0x6ccca420, 0x2e7a5: 0x6ccca620, 0x2e7a6: 0x6ccca820, 0x2e7a7: 0x6cccaa20, + 0x2e7a8: 0x6cccac20, 0x2e7a9: 0x6cccae20, 0x2e7aa: 0x6cccb020, 0x2e7ab: 0x6cccb220, + 0x2e7ac: 0x6cf9e220, 0x2e7ad: 0x6cccb420, 0x2e7ae: 0x6cccb620, 0x2e7af: 0x6cccb820, + 0x2e7b0: 0x6cccba20, 0x2e7b1: 0x6cccbc20, 0x2e7b2: 0x6cccbe20, 0x2e7b3: 0x6cccc020, + 0x2e7b4: 0x6c9fba20, 0x2e7b5: 0x6cccc220, 0x2e7b6: 0x6cccc420, 0x2e7b7: 0x6cccc620, + 0x2e7b8: 0x6cccc820, 0x2e7b9: 0x6cccca20, 0x2e7ba: 0x6ccccc20, 0x2e7bb: 0x6cccce20, + 0x2e7bc: 0x6cccd020, 0x2e7bd: 0x6cccd220, 0x2e7be: 0x6cccd420, 0x2e7bf: 0x6cccd620, + // Block 0xb9f, offset 0x2e7c0 + 0x2e7c0: 0x6cccd820, 0x2e7c1: 0x6cccda20, 0x2e7c2: 0x6cccdc20, 0x2e7c3: 0x6cccde20, + 0x2e7c4: 0x6ccce020, 0x2e7c5: 0x6ccce220, 0x2e7c6: 0x6ccce420, 0x2e7c7: 0x6ccce620, + 0x2e7c8: 0x6ccce820, 0x2e7c9: 0x6cccea20, 0x2e7ca: 0x6cccec20, 0x2e7cb: 0x6cccee20, + 0x2e7cc: 0x6cccf020, 0x2e7cd: 0x6cfa1220, 0x2e7ce: 0x6cfa1420, 0x2e7cf: 0x6cfa1620, + 0x2e7d0: 0x6cfa1820, 0x2e7d1: 0x6cfa1a20, 0x2e7d2: 0x6cfa1c20, 0x2e7d3: 0x6cfa1e20, + 0x2e7d4: 0x6cfa2020, 0x2e7d5: 0x6cfa2220, 0x2e7d6: 0x6cfa2420, 0x2e7d7: 0x6cfa2620, + 0x2e7d8: 0x6cfa2820, 0x2e7d9: 0x6cfa2a20, 0x2e7da: 0x6cfa2c20, 0x2e7db: 0x6cfa2e20, + 0x2e7dc: 0x6cfa3020, 0x2e7dd: 0x6cfa3220, 0x2e7de: 0x6cfa3420, 0x2e7df: 0x6cfa3620, + 0x2e7e0: 0x6cfa3820, 0x2e7e1: 0x6cfa3a20, 0x2e7e2: 0x6cfa3c20, 0x2e7e3: 0x6cfa3e20, + 0x2e7e4: 0x6cfa4020, 0x2e7e5: 0x6cfa4220, 0x2e7e6: 0x6cfa4420, 0x2e7e7: 0x6cfa4620, + 0x2e7e8: 0x6cfa4820, 0x2e7e9: 0x6cfa4a20, 0x2e7ea: 0x6cfa4c20, 0x2e7eb: 0x6cfa4e20, + 0x2e7ec: 0x6cfa5020, 0x2e7ed: 0x6cfa5220, 0x2e7ee: 0x6cfa5420, 0x2e7ef: 0x6cfa5620, + 0x2e7f0: 0x6cfa5820, 0x2e7f1: 0x6cfa5a20, 0x2e7f2: 0x6cfa5c20, 0x2e7f3: 0x6cfa5e20, + 0x2e7f4: 0x6cfa6020, 0x2e7f5: 0x6cfa6220, 0x2e7f6: 0x6cfa6420, 0x2e7f7: 0x6cfa6620, + 0x2e7f8: 0x6cfa6820, 0x2e7f9: 0x6cfa6a20, 0x2e7fa: 0x6cfa6c20, 0x2e7fb: 0x6cfa6e20, + 0x2e7fc: 0x6cfa7020, 0x2e7fd: 0x6cfa7220, 0x2e7fe: 0x6cfa7420, 0x2e7ff: 0x6cfa7620, + // Block 0xba0, offset 0x2e800 + 0x2e800: 0x6cfa7820, 0x2e801: 0x6cfa7a20, 0x2e802: 0x6cfa7c20, 0x2e803: 0x6cfa7e20, + 0x2e804: 0x6cfa8020, 0x2e805: 0x6cfa8220, 0x2e806: 0x6cfa8420, 0x2e807: 0x6cfa8620, + 0x2e808: 0x6cfa8820, 0x2e809: 0x6cfa8a20, 0x2e80a: 0x6cfa8c20, 0x2e80b: 0x6cccf220, + 0x2e80c: 0x6d291220, 0x2e80d: 0x6cfa8e20, 0x2e80e: 0x6d28f420, 0x2e80f: 0x6cfa9020, + 0x2e810: 0x6cfa9220, 0x2e811: 0x6cfa9420, 0x2e812: 0x6cfa9620, 0x2e813: 0x6cfa9820, + 0x2e814: 0x6cfa9a20, 0x2e815: 0x6d561820, 0x2e816: 0x6cfa9c20, 0x2e817: 0x6cfa9e20, + 0x2e818: 0x6cfaa020, 0x2e819: 0x6cfaa220, 0x2e81a: 0x6cfbd620, 0x2e81b: 0x6cfaa420, + 0x2e81c: 0x6cfaa620, 0x2e81d: 0x6cfaa820, 0x2e81e: 0x6cccf420, 0x2e81f: 0x6cfaaa20, + 0x2e820: 0x6cfaac20, 0x2e821: 0x6cfaae20, 0x2e822: 0x6cfab020, 0x2e823: 0x6cfab220, + 0x2e824: 0x6cfab420, 0x2e825: 0x6cfab620, 0x2e826: 0x6cfab820, 0x2e827: 0x6cfaba20, + 0x2e828: 0x6cfabc20, 0x2e829: 0x6cfabe20, 0x2e82a: 0x6cfac020, 0x2e82b: 0x6d291420, + 0x2e82c: 0x6d291620, 0x2e82d: 0x6d291820, 0x2e82e: 0x6d291a20, 0x2e82f: 0x6d291c20, + 0x2e830: 0x6d291e20, 0x2e831: 0x6d292020, 0x2e832: 0x6d292220, 0x2e833: 0x6d292420, + 0x2e834: 0x6d292620, 0x2e835: 0x6d292820, 0x2e836: 0x6d292a20, 0x2e837: 0x6d292c20, + 0x2e838: 0x6d292e20, 0x2e839: 0x6d293020, 0x2e83a: 0x6d293220, 0x2e83b: 0x6d293420, + 0x2e83c: 0x6d293620, 0x2e83d: 0x6d293820, 0x2e83e: 0x6d293a20, 0x2e83f: 0x6d293c20, + // Block 0xba1, offset 0x2e840 + 0x2e840: 0x6d561a20, 0x2e841: 0x6d293e20, 0x2e842: 0x6d294020, 0x2e843: 0x6d294220, + 0x2e844: 0x6d294420, 0x2e845: 0x6d294620, 0x2e846: 0x6d294820, 0x2e847: 0x6d294a20, + 0x2e848: 0x6d294c20, 0x2e849: 0x6d294e20, 0x2e84a: 0x6d295020, 0x2e84b: 0x6d564820, + 0x2e84c: 0x6d295220, 0x2e84d: 0x6d295420, 0x2e84e: 0x6d295620, 0x2e84f: 0x6d295820, + 0x2e850: 0x6d561c20, 0x2e851: 0x6d295a20, 0x2e852: 0x6d295c20, 0x2e853: 0x6cfac220, + 0x2e854: 0x6d295e20, 0x2e855: 0x6d296020, 0x2e856: 0x6d296220, 0x2e857: 0x6d296420, + 0x2e858: 0x6d296620, 0x2e859: 0x6d296820, 0x2e85a: 0x6d296a20, 0x2e85b: 0x6d296c20, + 0x2e85c: 0x6d296e20, 0x2e85d: 0x6d297020, 0x2e85e: 0x6d297220, 0x2e85f: 0x6d297420, + 0x2e860: 0x6d297620, 0x2e861: 0x6d297820, 0x2e862: 0x6d297a20, 0x2e863: 0x6d297c20, + 0x2e864: 0x6d297e20, 0x2e865: 0x6d298020, 0x2e866: 0x6d561e20, 0x2e867: 0x6d298220, + 0x2e868: 0x6d298420, 0x2e869: 0x6d298620, 0x2e86a: 0x6d298820, 0x2e86b: 0x6d298a20, + 0x2e86c: 0x6d298c20, 0x2e86d: 0x6d298e20, 0x2e86e: 0x6d299020, 0x2e86f: 0x6d299220, + 0x2e870: 0x6d299420, 0x2e871: 0x6d299620, 0x2e872: 0x6d299820, 0x2e873: 0x6d299a20, + 0x2e874: 0x6d299c20, 0x2e875: 0x6d299e20, 0x2e876: 0x6d29a020, 0x2e877: 0x6d29a220, + 0x2e878: 0x6d29a420, 0x2e879: 0x6d29a620, 0x2e87a: 0x6d29a820, 0x2e87b: 0x6d29aa20, + 0x2e87c: 0x6d29ac20, 0x2e87d: 0x6d564a20, 0x2e87e: 0x6d29ae20, 0x2e87f: 0x6d562020, + // Block 0xba2, offset 0x2e880 + 0x2e880: 0x6d29b020, 0x2e881: 0x6d562220, 0x2e882: 0x6d29b220, 0x2e883: 0x6d29b420, + 0x2e884: 0x6d29b620, 0x2e885: 0x6d29b820, 0x2e886: 0x6d29ba20, 0x2e887: 0x6d29bc20, + 0x2e888: 0x6d29be20, 0x2e889: 0x6d29c020, 0x2e88a: 0x6d29c220, 0x2e88b: 0x6d29c420, + 0x2e88c: 0x6d29c620, 0x2e88d: 0x6d29c820, 0x2e88e: 0x6d2aca20, 0x2e88f: 0x6d564c20, + 0x2e890: 0x6d564e20, 0x2e891: 0x6d565020, 0x2e892: 0x6d565220, 0x2e893: 0x6d565420, + 0x2e894: 0x6d565620, 0x2e895: 0x6d565820, 0x2e896: 0x6d565a20, 0x2e897: 0x6d565c20, + 0x2e898: 0x6d565e20, 0x2e899: 0x6d566020, 0x2e89a: 0x6d566220, 0x2e89b: 0x6d566420, + 0x2e89c: 0x6d566620, 0x2e89d: 0x6d566820, 0x2e89e: 0x6d819a20, 0x2e89f: 0x6d566a20, + 0x2e8a0: 0x6d566c20, 0x2e8a1: 0x6d566e20, 0x2e8a2: 0x6d567020, 0x2e8a3: 0x6d567220, + 0x2e8a4: 0x6d567420, 0x2e8a5: 0x6d567620, 0x2e8a6: 0x6d567820, 0x2e8a7: 0x6d567a20, + 0x2e8a8: 0x6d567c20, 0x2e8a9: 0x6d567e20, 0x2e8aa: 0x6d568020, 0x2e8ab: 0x6d568220, + 0x2e8ac: 0x6d568420, 0x2e8ad: 0x6d568620, 0x2e8ae: 0x6d568820, 0x2e8af: 0x6d568a20, + 0x2e8b0: 0x6d568c20, 0x2e8b1: 0x6d568e20, 0x2e8b2: 0x6d569020, 0x2e8b3: 0x6d2acc20, + 0x2e8b4: 0x6d569220, 0x2e8b5: 0x6d569420, 0x2e8b6: 0x6d569620, 0x2e8b7: 0x6d569820, + 0x2e8b8: 0x6d569a20, 0x2e8b9: 0x6d569c20, 0x2e8ba: 0x6d569e20, 0x2e8bb: 0x6d56a020, + 0x2e8bc: 0x6d56a220, 0x2e8bd: 0x6d56a420, 0x2e8be: 0x6d56a620, 0x2e8bf: 0x6d56a820, + // Block 0xba3, offset 0x2e8c0 + 0x2e8c0: 0x6da79820, 0x2e8c1: 0x6d56aa20, 0x2e8c2: 0x6d56ac20, 0x2e8c3: 0x6d819c20, + 0x2e8c4: 0x6d56ae20, 0x2e8c5: 0x6d56b020, 0x2e8c6: 0x6d56b220, 0x2e8c7: 0x6d56b420, + 0x2e8c8: 0x6d56b620, 0x2e8c9: 0x6d56b820, 0x2e8ca: 0x6d56ba20, 0x2e8cb: 0x6d56bc20, + 0x2e8cc: 0x6d56be20, 0x2e8cd: 0x6d56c020, 0x2e8ce: 0x6d56c220, 0x2e8cf: 0x6d56c420, + 0x2e8d0: 0x6d56c620, 0x2e8d1: 0x6d56c820, 0x2e8d2: 0x6d56ca20, 0x2e8d3: 0x6d56cc20, + 0x2e8d4: 0x6d56ce20, 0x2e8d5: 0x6d56d020, 0x2e8d6: 0x6d56d220, 0x2e8d7: 0x6d56d420, + 0x2e8d8: 0x6d56d620, 0x2e8d9: 0x6d81c020, 0x2e8da: 0x6d56d820, 0x2e8db: 0x6d56da20, + 0x2e8dc: 0x6d56dc20, 0x2e8dd: 0x6d56de20, 0x2e8de: 0x6d81c220, 0x2e8df: 0x6d81c420, + 0x2e8e0: 0x6d81c620, 0x2e8e1: 0x6d81c820, 0x2e8e2: 0x6d81ca20, 0x2e8e3: 0x6d81cc20, + 0x2e8e4: 0x6d81ce20, 0x2e8e5: 0x6d81d020, 0x2e8e6: 0x6d81d220, 0x2e8e7: 0x6d81d420, + 0x2e8e8: 0x6d81d620, 0x2e8e9: 0x6da77820, 0x2e8ea: 0x6d81d820, 0x2e8eb: 0x6d81da20, + 0x2e8ec: 0x6d81dc20, 0x2e8ed: 0x6d81de20, 0x2e8ee: 0x6d81e020, 0x2e8ef: 0x6d81e220, + 0x2e8f0: 0x6d81e420, 0x2e8f1: 0x6d81e620, 0x2e8f2: 0x6d81e820, 0x2e8f3: 0x6d81ea20, + 0x2e8f4: 0x6d81ec20, 0x2e8f5: 0x6d81ee20, 0x2e8f6: 0x6d81f020, 0x2e8f7: 0x6d81f220, + 0x2e8f8: 0x6d81f420, 0x2e8f9: 0x6d81f620, 0x2e8fa: 0x6d81f820, 0x2e8fb: 0x6d81fa20, + 0x2e8fc: 0x6d81fc20, 0x2e8fd: 0x6d81fe20, 0x2e8fe: 0x6d820020, 0x2e8ff: 0x6d820220, + // Block 0xba4, offset 0x2e900 + 0x2e900: 0x6d820420, 0x2e901: 0x6d820620, 0x2e902: 0x6d820820, 0x2e903: 0x6d820a20, + 0x2e904: 0x6d820c20, 0x2e905: 0x6d820e20, 0x2e906: 0x6d580a20, 0x2e907: 0x6d821020, + 0x2e908: 0x6d821220, 0x2e909: 0x6d821420, 0x2e90a: 0x6d821620, 0x2e90b: 0x6d821820, + 0x2e90c: 0x6da77a20, 0x2e90d: 0x6d821a20, 0x2e90e: 0x6d821c20, 0x2e90f: 0x6d821e20, + 0x2e910: 0x6d56e020, 0x2e911: 0x6d822020, 0x2e912: 0x6d822220, 0x2e913: 0x6d822420, + 0x2e914: 0x6da79a20, 0x2e915: 0x6da79c20, 0x2e916: 0x6d822620, 0x2e917: 0x6da79e20, + 0x2e918: 0x6da7a020, 0x2e919: 0x6da7a220, 0x2e91a: 0x6da7a420, 0x2e91b: 0x6da7a620, + 0x2e91c: 0x6da7a820, 0x2e91d: 0x6da7aa20, 0x2e91e: 0x6da7ac20, 0x2e91f: 0x6da7ae20, + 0x2e920: 0x6da7b020, 0x2e921: 0x6da7b220, 0x2e922: 0x6da7b420, 0x2e923: 0x6da7b620, + 0x2e924: 0x6da7b820, 0x2e925: 0x6da7ba20, 0x2e926: 0x6da7bc20, 0x2e927: 0x6da7be20, + 0x2e928: 0x6da7c020, 0x2e929: 0x6da7c220, 0x2e92a: 0x6da7c420, 0x2e92b: 0x6da7c620, + 0x2e92c: 0x6da7c820, 0x2e92d: 0x6da7ca20, 0x2e92e: 0x6da7cc20, 0x2e92f: 0x6da7ce20, + 0x2e930: 0x6da7d020, 0x2e931: 0x6da7d220, 0x2e932: 0x6da7d420, 0x2e933: 0x6de4c220, + 0x2e934: 0x6da7d620, 0x2e935: 0x6da7d820, 0x2e936: 0x6da7da20, 0x2e937: 0x6dc8c220, + 0x2e938: 0x6da7dc20, 0x2e939: 0x6dc8d220, 0x2e93a: 0x6dc8d420, 0x2e93b: 0x6dc8d620, + 0x2e93c: 0x6dc8d820, 0x2e93d: 0x6dc8da20, 0x2e93e: 0x6dc8dc20, 0x2e93f: 0x6dc8de20, + // Block 0xba5, offset 0x2e940 + 0x2e940: 0x6dc8e020, 0x2e941: 0x6dc8e220, 0x2e942: 0x6dc8e420, 0x2e943: 0x6dc8e620, + 0x2e944: 0x6d82fc20, 0x2e945: 0x6dc8e820, 0x2e946: 0x6dc8ea20, 0x2e947: 0x6dc8ec20, + 0x2e948: 0x6dc8ee20, 0x2e949: 0x6dc8f020, 0x2e94a: 0x6dc8f220, 0x2e94b: 0x6dc8f420, + 0x2e94c: 0x6dc8f620, 0x2e94d: 0x6dc8f820, 0x2e94e: 0x6dc8fa20, 0x2e94f: 0x6dc8fc20, + 0x2e950: 0x6dc8fe20, 0x2e951: 0x6dc90020, 0x2e952: 0x6dc90220, 0x2e953: 0x6dc90420, + 0x2e954: 0x6dc90620, 0x2e955: 0x6de4c420, 0x2e956: 0x6de4c620, 0x2e957: 0x6de4c820, + 0x2e958: 0x6de4ca20, 0x2e959: 0x6de4cc20, 0x2e95a: 0x6de4ce20, 0x2e95b: 0x6de4d020, + 0x2e95c: 0x6de4d220, 0x2e95d: 0x6de4d420, 0x2e95e: 0x6de4d620, 0x2e95f: 0x6de4d820, + 0x2e960: 0x6de4da20, 0x2e961: 0x6de4dc20, 0x2e962: 0x6de4de20, 0x2e963: 0x6de4e020, + 0x2e964: 0x6de4e220, 0x2e965: 0x6de4e420, 0x2e966: 0x6dc9b820, 0x2e967: 0x6de4e620, + 0x2e968: 0x6de4e820, 0x2e969: 0x6de4ea20, 0x2e96a: 0x6dfbc220, 0x2e96b: 0x6de4ec20, + 0x2e96c: 0x6de4ee20, 0x2e96d: 0x6de4f020, 0x2e96e: 0x6de4f220, 0x2e96f: 0x6dfbd020, + 0x2e970: 0x6dfbd220, 0x2e971: 0x6dfbd420, 0x2e972: 0x6dfbd620, 0x2e973: 0x6dfbd820, + 0x2e974: 0x6dfbda20, 0x2e975: 0x6dfbdc20, 0x2e976: 0x6dfbde20, 0x2e977: 0x6dfbe020, + 0x2e978: 0x6dfbe220, 0x2e979: 0x6dfbe420, 0x2e97a: 0x6dfbe620, 0x2e97b: 0x6dfbe820, + 0x2e97c: 0x6dfbea20, 0x2e97d: 0x6dfbec20, 0x2e97e: 0x6dfbee20, 0x2e97f: 0x6dfbf020, + // Block 0xba6, offset 0x2e980 + 0x2e980: 0x6dfbf220, 0x2e981: 0x6dfbf420, 0x2e982: 0x6dfc4820, 0x2e983: 0x6e0f0620, + 0x2e984: 0x6e0f0820, 0x2e985: 0x6e0f0a20, 0x2e986: 0x6e0f0c20, 0x2e987: 0x6e0f0e20, + 0x2e988: 0x6e0f1020, 0x2e989: 0x6e0f1220, 0x2e98a: 0x6e0f1420, 0x2e98b: 0x6e0f1620, + 0x2e98c: 0x6e0f1820, 0x2e98d: 0x6e0f1a20, 0x2e98e: 0x6e3d5220, 0x2e98f: 0x6e0f1c20, + 0x2e990: 0x6e0f1e20, 0x2e991: 0x6e1e3420, 0x2e992: 0x6e1e3620, 0x2e993: 0x6e299620, + 0x2e994: 0x6e1e3820, 0x2e995: 0x6e1e3a20, 0x2e996: 0x6e1e3c20, 0x2e997: 0x6e1e3e20, + 0x2e998: 0x6e1e4020, 0x2e999: 0x6e299e20, 0x2e99a: 0x6e29a020, 0x2e99b: 0x6e29a220, + 0x2e99c: 0x6e29a420, 0x2e99d: 0x6e32a220, 0x2e99e: 0x6e32a420, 0x2e99f: 0x6e32a620, + 0x2e9a0: 0x6e32a820, 0x2e9a1: 0x6e32aa20, 0x2e9a2: 0x6e38e020, 0x2e9a3: 0x6e38e220, + 0x2e9a4: 0x6e3d5420, 0x2e9a5: 0x6e405c20, 0x2e9a6: 0x6e3d5620, 0x2e9a7: 0x6e405e20, + 0x2e9a8: 0x6e406020, 0x2e9a9: 0x6e45c420, 0x2e9aa: 0x6e463020, 0x2e9ab: 0x6c04d020, + 0x2e9ac: 0x6c04d220, 0x2e9ad: 0x6c09ca20, 0x2e9ae: 0x6c135a20, 0x2e9af: 0x6c135c20, + 0x2e9b0: 0x6c135e20, 0x2e9b1: 0x6c136020, 0x2e9b2: 0x6c136220, 0x2e9b3: 0x6c136420, + 0x2e9b4: 0x6c239020, 0x2e9b5: 0x6c239220, 0x2e9b6: 0x6c239420, 0x2e9b7: 0x6c239620, + 0x2e9b8: 0x6c239820, 0x2e9b9: 0x6c239a20, 0x2e9ba: 0x6c239c20, 0x2e9bb: 0x6c239e20, + 0x2e9bc: 0x6c23a020, 0x2e9bd: 0x6c23a220, 0x2e9be: 0x6c23a420, 0x2e9bf: 0x6c23a620, + // Block 0xba7, offset 0x2e9c0 + 0x2e9c0: 0x6c23a820, 0x2e9c1: 0x6c399e20, 0x2e9c2: 0x6c39a020, 0x2e9c3: 0x6c39a220, + 0x2e9c4: 0x6c39a420, 0x2e9c5: 0x6c39a620, 0x2e9c6: 0x6c39a820, 0x2e9c7: 0x6c399220, + 0x2e9c8: 0x6c39aa20, 0x2e9c9: 0x6c39ac20, 0x2e9ca: 0x6c39ae20, 0x2e9cb: 0x6c39b020, + 0x2e9cc: 0x6c39b220, 0x2e9cd: 0x6c39b420, 0x2e9ce: 0x6c39b620, 0x2e9cf: 0x6c39b820, + 0x2e9d0: 0x6c39ba20, 0x2e9d1: 0x6c39bc20, 0x2e9d2: 0x6c39be20, 0x2e9d3: 0x6c39c020, + 0x2e9d4: 0x6c39c220, 0x2e9d5: 0x6c39c420, 0x2e9d6: 0x6c39c620, 0x2e9d7: 0x6c39c820, + 0x2e9d8: 0x6c39ca20, 0x2e9d9: 0x6c39cc20, 0x2e9da: 0x6c39ce20, 0x2e9db: 0x6c39d020, + 0x2e9dc: 0x6c39d220, 0x2e9dd: 0x6c39d420, 0x2e9de: 0x6c39d620, 0x2e9df: 0x6c552820, + 0x2e9e0: 0x6c552a20, 0x2e9e1: 0x6c552c20, 0x2e9e2: 0x6c552e20, 0x2e9e3: 0x6c553020, + 0x2e9e4: 0x6c553220, 0x2e9e5: 0x6c553420, 0x2e9e6: 0x6c553620, 0x2e9e7: 0x6c553820, + 0x2e9e8: 0x6c553a20, 0x2e9e9: 0x6c553c20, 0x2e9ea: 0x6c553e20, 0x2e9eb: 0x6c554020, + 0x2e9ec: 0x6c554220, 0x2e9ed: 0x6c554420, 0x2e9ee: 0x6c554620, 0x2e9ef: 0x6c554820, + 0x2e9f0: 0x6c554a20, 0x2e9f1: 0x6c554c20, 0x2e9f2: 0x6c554e20, 0x2e9f3: 0x6c555020, + 0x2e9f4: 0x6c555220, 0x2e9f5: 0x6c555420, 0x2e9f6: 0x6c555620, 0x2e9f7: 0x6c555820, + 0x2e9f8: 0x6c555a20, 0x2e9f9: 0x6c555c20, 0x2e9fa: 0x6c555e20, 0x2e9fb: 0x6c556020, + 0x2e9fc: 0x6c556220, 0x2e9fd: 0x6c556420, 0x2e9fe: 0x6c556620, 0x2e9ff: 0x6c556820, + // Block 0xba8, offset 0x2ea00 + 0x2ea00: 0x6c556a20, 0x2ea01: 0x6c556c20, 0x2ea02: 0x6c556e20, 0x2ea03: 0x6c557020, + 0x2ea04: 0x6c77f620, 0x2ea05: 0x6c77f820, 0x2ea06: 0x6c77fa20, 0x2ea07: 0x6c77fc20, + 0x2ea08: 0x6c77fe20, 0x2ea09: 0x6c780020, 0x2ea0a: 0x6c780220, 0x2ea0b: 0x6c780420, + 0x2ea0c: 0x6c780620, 0x2ea0d: 0x6c780820, 0x2ea0e: 0x6c780a20, 0x2ea0f: 0x6c780c20, + 0x2ea10: 0x6c780e20, 0x2ea11: 0x6c781020, 0x2ea12: 0x6c781220, 0x2ea13: 0x6c781420, + 0x2ea14: 0x6c781620, 0x2ea15: 0x6c781820, 0x2ea16: 0x6c781a20, 0x2ea17: 0x6c781c20, + 0x2ea18: 0x6c781e20, 0x2ea19: 0x6c782020, 0x2ea1a: 0x6c782220, 0x2ea1b: 0x6c782420, + 0x2ea1c: 0x6c782620, 0x2ea1d: 0x6c782820, 0x2ea1e: 0x6c782a20, 0x2ea1f: 0x6c782c20, + 0x2ea20: 0x6c782e20, 0x2ea21: 0x6c783020, 0x2ea22: 0x6c783220, 0x2ea23: 0x6c783420, + 0x2ea24: 0x6c783620, 0x2ea25: 0x6c783820, 0x2ea26: 0x6c783a20, 0x2ea27: 0x6c783c20, + 0x2ea28: 0x6c783e20, 0x2ea29: 0x6c784020, 0x2ea2a: 0x6c784220, 0x2ea2b: 0x6c784420, + 0x2ea2c: 0x6c784620, 0x2ea2d: 0x6c784820, 0x2ea2e: 0x6c784a20, 0x2ea2f: 0x6ca0f020, + 0x2ea30: 0x6ca0f220, 0x2ea31: 0x6ca0f420, 0x2ea32: 0x6ca0f620, 0x2ea33: 0x6ca0f820, + 0x2ea34: 0x6ca0fa20, 0x2ea35: 0x6ca0fc20, 0x2ea36: 0x6ca0fe20, 0x2ea37: 0x6ca10020, + 0x2ea38: 0x6ca10220, 0x2ea39: 0x6ca10420, 0x2ea3a: 0x6ca10620, 0x2ea3b: 0x6ccddc20, + 0x2ea3c: 0x6ca10820, 0x2ea3d: 0x6ca10a20, 0x2ea3e: 0x6ca10c20, 0x2ea3f: 0x6ca10e20, + // Block 0xba9, offset 0x2ea40 + 0x2ea40: 0x6ca11020, 0x2ea41: 0x6ca11220, 0x2ea42: 0x6ca11420, 0x2ea43: 0x6ca11620, + 0x2ea44: 0x6ca11820, 0x2ea45: 0x6ca11a20, 0x2ea46: 0x6ca11c20, 0x2ea47: 0x6ca11e20, + 0x2ea48: 0x6ca12020, 0x2ea49: 0x6ca12220, 0x2ea4a: 0x6ca12420, 0x2ea4b: 0x6ca12620, + 0x2ea4c: 0x6ca12820, 0x2ea4d: 0x6ca12a20, 0x2ea4e: 0x6ca12c20, 0x2ea4f: 0x6ca12e20, + 0x2ea50: 0x6ca13020, 0x2ea51: 0x6ca13220, 0x2ea52: 0x6ca13420, 0x2ea53: 0x6ca13620, + 0x2ea54: 0x6ca1cc20, 0x2ea55: 0x6ca13820, 0x2ea56: 0x6ca13a20, 0x2ea57: 0x6ca13c20, + 0x2ea58: 0x6ca13e20, 0x2ea59: 0x6ccdf620, 0x2ea5a: 0x6ccdf820, 0x2ea5b: 0x6ccdfa20, + 0x2ea5c: 0x6ccdfc20, 0x2ea5d: 0x6ccdfe20, 0x2ea5e: 0x6cce0020, 0x2ea5f: 0x6cce0220, + 0x2ea60: 0x6cce0420, 0x2ea61: 0x6cce0620, 0x2ea62: 0x6cce0820, 0x2ea63: 0x6cce0a20, + 0x2ea64: 0x6cce0c20, 0x2ea65: 0x6cce0e20, 0x2ea66: 0x6cce1020, 0x2ea67: 0x6cce1220, + 0x2ea68: 0x6cce1420, 0x2ea69: 0x6cce1620, 0x2ea6a: 0x6cce1820, 0x2ea6b: 0x6cce1a20, + 0x2ea6c: 0x6cce1c20, 0x2ea6d: 0x6cce1e20, 0x2ea6e: 0x6cce2020, 0x2ea6f: 0x6cce2220, + 0x2ea70: 0x6cce2420, 0x2ea71: 0x6cce2620, 0x2ea72: 0x6cce2820, 0x2ea73: 0x6cce2a20, + 0x2ea74: 0x6cce2c20, 0x2ea75: 0x6cce2e20, 0x2ea76: 0x6cce3020, 0x2ea77: 0x6cce3220, + 0x2ea78: 0x6cce3420, 0x2ea79: 0x6cce3620, 0x2ea7a: 0x6cce3820, 0x2ea7b: 0x6cce3a20, + 0x2ea7c: 0x6cce3c20, 0x2ea7d: 0x6cce3e20, 0x2ea7e: 0x6cce4020, 0x2ea7f: 0x6cce4220, + // Block 0xbaa, offset 0x2ea80 + 0x2ea80: 0x6cce4420, 0x2ea81: 0x6cfbfc20, 0x2ea82: 0x6cfbfe20, 0x2ea83: 0x6cfc0020, + 0x2ea84: 0x6cfc0220, 0x2ea85: 0x6cfc0420, 0x2ea86: 0x6cfc0620, 0x2ea87: 0x6cfc0820, + 0x2ea88: 0x6cfc0a20, 0x2ea89: 0x6cfc0c20, 0x2ea8a: 0x6cfc0e20, 0x2ea8b: 0x6cfc1020, + 0x2ea8c: 0x6cfc1220, 0x2ea8d: 0x6cfc1420, 0x2ea8e: 0x6cfc1620, 0x2ea8f: 0x6cfc1820, + 0x2ea90: 0x6cfc1a20, 0x2ea91: 0x6cfc1c20, 0x2ea92: 0x6cfc1e20, 0x2ea93: 0x6cfc2020, + 0x2ea94: 0x6cfc2220, 0x2ea95: 0x6d2ace20, 0x2ea96: 0x6cfc2420, 0x2ea97: 0x6cfc2620, + 0x2ea98: 0x6cfc2820, 0x2ea99: 0x6cfc2a20, 0x2ea9a: 0x6cfc2c20, 0x2ea9b: 0x6d2ad020, + 0x2ea9c: 0x6cfc2e20, 0x2ea9d: 0x6cfc3020, 0x2ea9e: 0x6cfc3220, 0x2ea9f: 0x6cfc3420, + 0x2eaa0: 0x6cfc3620, 0x2eaa1: 0x6cfc3820, 0x2eaa2: 0x6cfc3a20, 0x2eaa3: 0x6cfc3c20, + 0x2eaa4: 0x6cfc3e20, 0x2eaa5: 0x6cfc4020, 0x2eaa6: 0x6cfc4220, 0x2eaa7: 0x6cfc4420, + 0x2eaa8: 0x6cfc4620, 0x2eaa9: 0x6cfc4820, 0x2eaaa: 0x6cfc4a20, 0x2eaab: 0x6cfc4c20, + 0x2eaac: 0x6cfc4e20, 0x2eaad: 0x6cfc5020, 0x2eaae: 0x6cce4620, 0x2eaaf: 0x6cfc5220, + 0x2eab0: 0x6cfc5420, 0x2eab1: 0x6cfc5620, 0x2eab2: 0x6cfc5820, 0x2eab3: 0x6cfc5a20, + 0x2eab4: 0x6cfc5c20, 0x2eab5: 0x6cfc5e20, 0x2eab6: 0x6cfc6020, 0x2eab7: 0x6cfc6220, + 0x2eab8: 0x6cfc6420, 0x2eab9: 0x6d2aea20, 0x2eaba: 0x6cfc6620, 0x2eabb: 0x6d2aec20, + 0x2eabc: 0x6d2aee20, 0x2eabd: 0x6d2af020, 0x2eabe: 0x6d2af220, 0x2eabf: 0x6d2af420, + // Block 0xbab, offset 0x2eac0 + 0x2eac0: 0x6d2af620, 0x2eac1: 0x6d2af820, 0x2eac2: 0x6d2afa20, 0x2eac3: 0x6d2afc20, + 0x2eac4: 0x6d2afe20, 0x2eac5: 0x6d2b0020, 0x2eac6: 0x6d2b0220, 0x2eac7: 0x6d2b0420, + 0x2eac8: 0x6d2b0620, 0x2eac9: 0x6d2b0820, 0x2eaca: 0x6d2b0a20, 0x2eacb: 0x6d2b0c20, + 0x2eacc: 0x6d2b0e20, 0x2eacd: 0x6d2b1020, 0x2eace: 0x6d2b1220, 0x2eacf: 0x6d2b1420, + 0x2ead0: 0x6d2b1620, 0x2ead1: 0x6d2b1820, 0x2ead2: 0x6d2b1a20, 0x2ead3: 0x6d2b1c20, + 0x2ead4: 0x6d2b1e20, 0x2ead5: 0x6d2b2020, 0x2ead6: 0x6d2b2220, 0x2ead7: 0x6d2b2420, + 0x2ead8: 0x6d2b2620, 0x2ead9: 0x6d2b2820, 0x2eada: 0x6d581e20, 0x2eadb: 0x6d582020, + 0x2eadc: 0x6d582220, 0x2eadd: 0x6d582420, 0x2eade: 0x6d582620, 0x2eadf: 0x6d582820, + 0x2eae0: 0x6d582a20, 0x2eae1: 0x6d582c20, 0x2eae2: 0x6d582e20, 0x2eae3: 0x6d583020, + 0x2eae4: 0x6d583220, 0x2eae5: 0x6d583420, 0x2eae6: 0x6d580c20, 0x2eae7: 0x6d583620, + 0x2eae8: 0x6d583820, 0x2eae9: 0x6d583a20, 0x2eaea: 0x6d583c20, 0x2eaeb: 0x6d583e20, + 0x2eaec: 0x6d584020, 0x2eaed: 0x6d584220, 0x2eaee: 0x6d584420, 0x2eaef: 0x6d584620, + 0x2eaf0: 0x6d584820, 0x2eaf1: 0x6d584a20, 0x2eaf2: 0x6d584c20, 0x2eaf3: 0x6d584e20, + 0x2eaf4: 0x6d585020, 0x2eaf5: 0x6d585220, 0x2eaf6: 0x6d831420, 0x2eaf7: 0x6d831620, + 0x2eaf8: 0x6d831820, 0x2eaf9: 0x6d831a20, 0x2eafa: 0x6d831c20, 0x2eafb: 0x6d831e20, + 0x2eafc: 0x6d832020, 0x2eafd: 0x6d832220, 0x2eafe: 0x6d832420, 0x2eaff: 0x6d832620, + // Block 0xbac, offset 0x2eb00 + 0x2eb00: 0x6d832820, 0x2eb01: 0x6d832a20, 0x2eb02: 0x6d832c20, 0x2eb03: 0x6d832e20, + 0x2eb04: 0x6d833020, 0x2eb05: 0x6d833220, 0x2eb06: 0x6d833420, 0x2eb07: 0x6d833620, + 0x2eb08: 0x6d833820, 0x2eb09: 0x6d833a20, 0x2eb0a: 0x6d833c20, 0x2eb0b: 0x6d833e20, + 0x2eb0c: 0x6d834020, 0x2eb0d: 0x6d834220, 0x2eb0e: 0x6d834420, 0x2eb0f: 0x6d834620, + 0x2eb10: 0x6d834820, 0x2eb11: 0x6d834a20, 0x2eb12: 0x6d834c20, 0x2eb13: 0x6d834e20, + 0x2eb14: 0x6d835020, 0x2eb15: 0x6d835220, 0x2eb16: 0x6d835420, 0x2eb17: 0x6d835620, + 0x2eb18: 0x6d835820, 0x2eb19: 0x6d835a20, 0x2eb1a: 0x6d835c20, 0x2eb1b: 0x6d835e20, + 0x2eb1c: 0x6d836020, 0x2eb1d: 0x6d836220, 0x2eb1e: 0x6d836420, 0x2eb1f: 0x6da87c20, + 0x2eb20: 0x6da87e20, 0x2eb21: 0x6da88020, 0x2eb22: 0x6da88220, 0x2eb23: 0x6da88420, + 0x2eb24: 0x6da88620, 0x2eb25: 0x6da88820, 0x2eb26: 0x6da88a20, 0x2eb27: 0x6da88c20, + 0x2eb28: 0x6da88e20, 0x2eb29: 0x6da89020, 0x2eb2a: 0x6da89220, 0x2eb2b: 0x6da89420, + 0x2eb2c: 0x6da89620, 0x2eb2d: 0x6da89820, 0x2eb2e: 0x6da89a20, 0x2eb2f: 0x6da89c20, + 0x2eb30: 0x6da89e20, 0x2eb31: 0x6da8a020, 0x2eb32: 0x6da8a220, 0x2eb33: 0x6da8a420, + 0x2eb34: 0x6da8a620, 0x2eb35: 0x6da8a820, 0x2eb36: 0x6da8aa20, 0x2eb37: 0x6da8ac20, + 0x2eb38: 0x6dc9be20, 0x2eb39: 0x6dc9c020, 0x2eb3a: 0x6dc9c220, 0x2eb3b: 0x6dc9c420, + 0x2eb3c: 0x6dc9c620, 0x2eb3d: 0x6dc9c820, 0x2eb3e: 0x6dc9ca20, 0x2eb3f: 0x6dc9cc20, + // Block 0xbad, offset 0x2eb40 + 0x2eb40: 0x6dc9ce20, 0x2eb41: 0x6dc9d020, 0x2eb42: 0x6de57020, 0x2eb43: 0x6dc9d220, + 0x2eb44: 0x6de57820, 0x2eb45: 0x6de57a20, 0x2eb46: 0x6de57c20, 0x2eb47: 0x6de57e20, + 0x2eb48: 0x6de58020, 0x2eb49: 0x6de58220, 0x2eb4a: 0x6de58420, 0x2eb4b: 0x6dfc5220, + 0x2eb4c: 0x6de58620, 0x2eb4d: 0x6de58820, 0x2eb4e: 0x6de58a20, 0x2eb4f: 0x6dfc5420, + 0x2eb50: 0x6dfc5620, 0x2eb51: 0x6dfc5820, 0x2eb52: 0x6dfc5a20, 0x2eb53: 0x6dfc5c20, + 0x2eb54: 0x6dfc5e20, 0x2eb55: 0x6de58c20, 0x2eb56: 0x6dfc6020, 0x2eb57: 0x6dfc6220, + 0x2eb58: 0x6dfc6420, 0x2eb59: 0x6e0f7e20, 0x2eb5a: 0x6e0f8020, 0x2eb5b: 0x6e0f8220, + 0x2eb5c: 0x6e1e7020, 0x2eb5d: 0x6e0fb220, 0x2eb5e: 0x6e1e7220, 0x2eb5f: 0x6e1e7420, + 0x2eb60: 0x6e1e7620, 0x2eb61: 0x6e29da20, 0x2eb62: 0x6e29dc20, 0x2eb63: 0x6e32c020, + 0x2eb64: 0x6e38f220, 0x2eb65: 0x6e38f420, 0x2eb66: 0x6e38f620, 0x2eb67: 0x6e42b620, + 0x2eb68: 0x6e443420, 0x2eb69: 0x6e468220, 0x2eb6a: 0x6c04d620, 0x2eb6b: 0x6c04d820, + 0x2eb6c: 0x6c3a2820, 0x2eb6d: 0x6c3a2a20, 0x2eb6e: 0x6c55ee20, 0x2eb6f: 0x6c55f020, + 0x2eb70: 0x6c55f220, 0x2eb71: 0x6c78ca20, 0x2eb72: 0x6ccf0a20, 0x2eb73: 0x6d2bdc20, + 0x2eb74: 0x6d590420, 0x2eb75: 0x6da93020, 0x2eb76: 0x6c04de20, 0x2eb77: 0x6c137a20, + 0x2eb78: 0x6c3a3a20, 0x2eb79: 0x6c78d620, 0x2eb7a: 0x6cfd4020, 0x2eb7b: 0x6c04e020, + 0x2eb7c: 0x6c561820, 0x2eb7d: 0x6ca1e020, 0x2eb7e: 0x6d2bec20, 0x2eb7f: 0x6c04e420, + // Block 0xbae, offset 0x2eb80 + 0x2eb80: 0x6c3a4620, 0x2eb81: 0x6c562020, 0x2eb82: 0x6c78e220, 0x2eb83: 0x6cfd4820, + 0x2eb84: 0x6d2bf020, 0x2eb85: 0x6d591e20, 0x2eb86: 0x6da93220, 0x2eb87: 0x6c04e820, + 0x2eb88: 0x6c3a5220, 0x2eb89: 0x6c562a20, 0x2eb8a: 0x6c562c20, 0x2eb8b: 0x6ccf3c20, + 0x2eb8c: 0x6ccf3e20, 0x2eb8d: 0x6ccf4020, 0x2eb8e: 0x6cfd5020, 0x2eb8f: 0x6cfd5220, + 0x2eb90: 0x6cfd5420, 0x2eb91: 0x6cfd5620, 0x2eb92: 0x6cfd5820, 0x2eb93: 0x6d2bfc20, + 0x2eb94: 0x6d2bfe20, 0x2eb95: 0x6d592820, 0x2eb96: 0x6d592a20, 0x2eb97: 0x6d592c20, + 0x2eb98: 0x6de5e220, 0x2eb99: 0x6c04ec20, 0x2eb9a: 0x6ccf6620, 0x2eb9b: 0x6c04f020, + 0x2eb9c: 0x6c04f220, 0x2eb9d: 0x6c138020, 0x2eb9e: 0x6c138220, 0x2eb9f: 0x6c138420, + 0x2eba0: 0x6c23ec20, 0x2eba1: 0x6c23ee20, 0x2eba2: 0x6c23f020, 0x2eba3: 0x6c23f220, + 0x2eba4: 0x6c23f420, 0x2eba5: 0x6c3a6c20, 0x2eba6: 0x6c3a6e20, 0x2eba7: 0x6c3a7020, + 0x2eba8: 0x6c3a7220, 0x2eba9: 0x6c3a7420, 0x2ebaa: 0x6c3a7620, 0x2ebab: 0x6c3a7820, + 0x2ebac: 0x6c3a7a20, 0x2ebad: 0x6c564c20, 0x2ebae: 0x6c564e20, 0x2ebaf: 0x6c565020, + 0x2ebb0: 0x6c565220, 0x2ebb1: 0x6c565420, 0x2ebb2: 0x6c565620, 0x2ebb3: 0x6c565820, + 0x2ebb4: 0x6c565a20, 0x2ebb5: 0x6c565c20, 0x2ebb6: 0x6c791020, 0x2ebb7: 0x6c791220, + 0x2ebb8: 0x6c791420, 0x2ebb9: 0x6c791620, 0x2ebba: 0x6c791820, 0x2ebbb: 0x6ca21e20, + 0x2ebbc: 0x6ca22020, 0x2ebbd: 0x6ca22220, 0x2ebbe: 0x6ca22420, 0x2ebbf: 0x6ca22620, + // Block 0xbaf, offset 0x2ebc0 + 0x2ebc0: 0x6ccf7820, 0x2ebc1: 0x6ca22820, 0x2ebc2: 0x6ccf7a20, 0x2ebc3: 0x6ccf7c20, + 0x2ebc4: 0x6ccf7e20, 0x2ebc5: 0x6ccf8020, 0x2ebc6: 0x6ccf8220, 0x2ebc7: 0x6ccf8420, + 0x2ebc8: 0x6ccf8620, 0x2ebc9: 0x6ccf8820, 0x2ebca: 0x6ccf8a20, 0x2ebcb: 0x6ccf8c20, + 0x2ebcc: 0x6cfd7820, 0x2ebcd: 0x6cfd7a20, 0x2ebce: 0x6cfd7c20, 0x2ebcf: 0x6cfd7e20, + 0x2ebd0: 0x6cfd8020, 0x2ebd1: 0x6cfd8220, 0x2ebd2: 0x6d2c1620, 0x2ebd3: 0x6d2c1820, + 0x2ebd4: 0x6d2c1a20, 0x2ebd5: 0x6d2c1c20, 0x2ebd6: 0x6d2c1e20, 0x2ebd7: 0x6d2c2020, + 0x2ebd8: 0x6d595020, 0x2ebd9: 0x6d595220, 0x2ebda: 0x6d595420, 0x2ebdb: 0x6d595620, + 0x2ebdc: 0x6d845820, 0x2ebdd: 0x6d845a20, 0x2ebde: 0x6d845c20, 0x2ebdf: 0x6d845e20, + 0x2ebe0: 0x6da94e20, 0x2ebe1: 0x6de5e620, 0x2ebe2: 0x6de5e820, 0x2ebe3: 0x6de5ea20, + 0x2ebe4: 0x6de5ec20, 0x2ebe5: 0x6de5ee20, 0x2ebe6: 0x6de5f020, 0x2ebe7: 0x6dfcd820, + 0x2ebe8: 0x6dfcda20, 0x2ebe9: 0x6e1e9c20, 0x2ebea: 0x6e390e20, 0x2ebeb: 0x6e407820, + 0x2ebec: 0x6c04f420, 0x2ebed: 0x6c01fe20, 0x2ebee: 0x6c09dc20, 0x2ebef: 0x6c09de20, + 0x2ebf0: 0x6c09e020, 0x2ebf1: 0x6c138c20, 0x2ebf2: 0x6c138e20, 0x2ebf3: 0x6c139020, + 0x2ebf4: 0x6c139220, 0x2ebf5: 0x6c139420, 0x2ebf6: 0x6c240020, 0x2ebf7: 0x6c139620, + 0x2ebf8: 0x6c139820, 0x2ebf9: 0x6c240a20, 0x2ebfa: 0x6c240c20, 0x2ebfb: 0x6c240e20, + 0x2ebfc: 0x6c241020, 0x2ebfd: 0x6c241220, 0x2ebfe: 0x6c241420, 0x2ebff: 0x6c241620, + // Block 0xbb0, offset 0x2ec00 + 0x2ec00: 0x6c3ab620, 0x2ec01: 0x6c241820, 0x2ec02: 0x6c241a20, 0x2ec03: 0x6c241c20, + 0x2ec04: 0x6c241e20, 0x2ec05: 0x6c242020, 0x2ec06: 0x6c242220, 0x2ec07: 0x6c242420, + 0x2ec08: 0x6c242620, 0x2ec09: 0x6c3acc20, 0x2ec0a: 0x6c569620, 0x2ec0b: 0x6c3ace20, + 0x2ec0c: 0x6c3ad020, 0x2ec0d: 0x6c3ad220, 0x2ec0e: 0x6c3ad420, 0x2ec0f: 0x6c3ad620, + 0x2ec10: 0x6c3ad820, 0x2ec11: 0x6c3ada20, 0x2ec12: 0x6c3adc20, 0x2ec13: 0x6c3ade20, + 0x2ec14: 0x6c3ae020, 0x2ec15: 0x6c3ae220, 0x2ec16: 0x6c3ae420, 0x2ec17: 0x6c3ae620, + 0x2ec18: 0x6c3ae820, 0x2ec19: 0x6c3aea20, 0x2ec1a: 0x6c3aec20, 0x2ec1b: 0x6c3aee20, + 0x2ec1c: 0x6c3af020, 0x2ec1d: 0x6c3af220, 0x2ec1e: 0x6c3af420, 0x2ec1f: 0x6c56a420, + 0x2ec20: 0x6c56a620, 0x2ec21: 0x6c56a820, 0x2ec22: 0x6c56aa20, 0x2ec23: 0x6c56ac20, + 0x2ec24: 0x6c56ae20, 0x2ec25: 0x6c56b020, 0x2ec26: 0x6c56b220, 0x2ec27: 0x6c56b420, + 0x2ec28: 0x6c56b620, 0x2ec29: 0x6c56b820, 0x2ec2a: 0x6c56ba20, 0x2ec2b: 0x6c56bc20, + 0x2ec2c: 0x6c56be20, 0x2ec2d: 0x6c56c020, 0x2ec2e: 0x6c56c220, 0x2ec2f: 0x6c56c420, + 0x2ec30: 0x6c56c620, 0x2ec31: 0x6c56c820, 0x2ec32: 0x6c56ca20, 0x2ec33: 0x6c794420, + 0x2ec34: 0x6c794620, 0x2ec35: 0x6c794820, 0x2ec36: 0x6c794a20, 0x2ec37: 0x6c794c20, + 0x2ec38: 0x6c794e20, 0x2ec39: 0x6c795020, 0x2ec3a: 0x6c795220, 0x2ec3b: 0x6c795420, + 0x2ec3c: 0x6c795620, 0x2ec3d: 0x6c795820, 0x2ec3e: 0x6c795a20, 0x2ec3f: 0x6ca25220, + // Block 0xbb1, offset 0x2ec40 + 0x2ec40: 0x6c795c20, 0x2ec41: 0x6c795e20, 0x2ec42: 0x6c796020, 0x2ec43: 0x6c796220, + 0x2ec44: 0x6ca26420, 0x2ec45: 0x6ca26620, 0x2ec46: 0x6ccfce20, 0x2ec47: 0x6ca26820, + 0x2ec48: 0x6ca26a20, 0x2ec49: 0x6ca26c20, 0x2ec4a: 0x6ca26e20, 0x2ec4b: 0x6ccfd020, + 0x2ec4c: 0x6ccfd220, 0x2ec4d: 0x6ca27020, 0x2ec4e: 0x6ca27220, 0x2ec4f: 0x6ca27420, + 0x2ec50: 0x6ca27620, 0x2ec51: 0x6ca27820, 0x2ec52: 0x6ccfd420, 0x2ec53: 0x6ca27a20, + 0x2ec54: 0x6ca27c20, 0x2ec55: 0x6ca27e20, 0x2ec56: 0x6ca28020, 0x2ec57: 0x6ca28220, + 0x2ec58: 0x6ca28420, 0x2ec59: 0x6ca28620, 0x2ec5a: 0x6ca28820, 0x2ec5b: 0x6ca28a20, + 0x2ec5c: 0x6ca28c20, 0x2ec5d: 0x6ca28e20, 0x2ec5e: 0x6ca29020, 0x2ec5f: 0x6ca29220, + 0x2ec60: 0x6ca29420, 0x2ec61: 0x6ca29620, 0x2ec62: 0x6ccfe420, 0x2ec63: 0x6ccfe620, + 0x2ec64: 0x6ccfe820, 0x2ec65: 0x6ccfea20, 0x2ec66: 0x6ccfec20, 0x2ec67: 0x6ccfee20, + 0x2ec68: 0x6ccff020, 0x2ec69: 0x6ccff220, 0x2ec6a: 0x6ca29820, 0x2ec6b: 0x6ccfd620, + 0x2ec6c: 0x6ccff420, 0x2ec6d: 0x6ccff620, 0x2ec6e: 0x6cfdbe20, 0x2ec6f: 0x6ccff820, + 0x2ec70: 0x6ccffa20, 0x2ec71: 0x6ccffc20, 0x2ec72: 0x6ccffe20, 0x2ec73: 0x6cd00020, + 0x2ec74: 0x6cd00220, 0x2ec75: 0x6cd00420, 0x2ec76: 0x6cd00620, 0x2ec77: 0x6cfdc020, + 0x2ec78: 0x6cd00820, 0x2ec79: 0x6cd00a20, 0x2ec7a: 0x6cfdd220, 0x2ec7b: 0x6cfdd420, + 0x2ec7c: 0x6cfdd620, 0x2ec7d: 0x6cfdd820, 0x2ec7e: 0x6cfdda20, 0x2ec7f: 0x6cfddc20, + // Block 0xbb2, offset 0x2ec80 + 0x2ec80: 0x6cfdde20, 0x2ec81: 0x6cfdc220, 0x2ec82: 0x6cfde020, 0x2ec83: 0x6d2c6a20, + 0x2ec84: 0x6d2c7820, 0x2ec85: 0x6cfde220, 0x2ec86: 0x6cfde420, 0x2ec87: 0x6cfde620, + 0x2ec88: 0x6cfde820, 0x2ec89: 0x6cfdea20, 0x2ec8a: 0x6cfdec20, 0x2ec8b: 0x6d599420, + 0x2ec8c: 0x6d2c7a20, 0x2ec8d: 0x6d2c7c20, 0x2ec8e: 0x6d598620, 0x2ec8f: 0x6d2c7e20, + 0x2ec90: 0x6d2c8020, 0x2ec91: 0x6d2c8220, 0x2ec92: 0x6d2c8420, 0x2ec93: 0x6d2c6820, + 0x2ec94: 0x6d2c8620, 0x2ec95: 0x6d2c8820, 0x2ec96: 0x6d599620, 0x2ec97: 0x6d599820, + 0x2ec98: 0x6d599a20, 0x2ec99: 0x6d599c20, 0x2ec9a: 0x6d599e20, 0x2ec9b: 0x6d59a020, + 0x2ec9c: 0x6d59a220, 0x2ec9d: 0x6d59a420, 0x2ec9e: 0x6d59a620, 0x2ec9f: 0x6d59a820, + 0x2eca0: 0x6d59aa20, 0x2eca1: 0x6d59ac20, 0x2eca2: 0x6d59ae20, 0x2eca3: 0x6d847e20, + 0x2eca4: 0x6d59b020, 0x2eca5: 0x6d848620, 0x2eca6: 0x6d848820, 0x2eca7: 0x6d848a20, + 0x2eca8: 0x6d848c20, 0x2eca9: 0x6d848e20, 0x2ecaa: 0x6d849020, 0x2ecab: 0x6d849220, + 0x2ecac: 0x6d849420, 0x2ecad: 0x6d849620, 0x2ecae: 0x6da96a20, 0x2ecaf: 0x6da96c20, + 0x2ecb0: 0x6da96e20, 0x2ecb1: 0x6da97020, 0x2ecb2: 0x6da97220, 0x2ecb3: 0x6da97420, + 0x2ecb4: 0x6da97620, 0x2ecb5: 0x6dca5a20, 0x2ecb6: 0x6dca5c20, 0x2ecb7: 0x6dca5e20, + 0x2ecb8: 0x6de60020, 0x2ecb9: 0x6de60620, 0x2ecba: 0x6de60820, 0x2ecbb: 0x6dfce620, + 0x2ecbc: 0x6dfcf020, 0x2ecbd: 0x6dfcf220, 0x2ecbe: 0x6e0fc820, 0x2ecbf: 0x6e1ea820, + // Block 0xbb3, offset 0x2ecc0 + 0x2ecc0: 0x6e1eaa20, 0x2ecc1: 0x6e2a0c20, 0x2ecc2: 0x6e2a0e20, 0x2ecc3: 0x6e2a1020, + 0x2ecc4: 0x6c09ee20, 0x2ecc5: 0x6c572620, 0x2ecc6: 0x6c79ba20, 0x2ecc7: 0x6ca2d620, + 0x2ecc8: 0x6ca2d820, 0x2ecc9: 0x6c09f220, 0x2ecca: 0x6c09f420, 0x2eccb: 0x6c04fa20, + 0x2eccc: 0x6c09f620, 0x2eccd: 0x6c09f820, 0x2ecce: 0x6c13be20, 0x2eccf: 0x6c13c020, + 0x2ecd0: 0x6c13c220, 0x2ecd1: 0x6c13c420, 0x2ecd2: 0x6c247420, 0x2ecd3: 0x6c247620, + 0x2ecd4: 0x6c247820, 0x2ecd5: 0x6c247a20, 0x2ecd6: 0x6c247c20, 0x2ecd7: 0x6c247e20, + 0x2ecd8: 0x6c248020, 0x2ecd9: 0x6c248220, 0x2ecda: 0x6c248420, 0x2ecdb: 0x6c248620, + 0x2ecdc: 0x6c3b4420, 0x2ecdd: 0x6c3b4620, 0x2ecde: 0x6c3b4820, 0x2ecdf: 0x6c3b4a20, + 0x2ece0: 0x6c3b4c20, 0x2ece1: 0x6c3b4e20, 0x2ece2: 0x6c3b5020, 0x2ece3: 0x6c3b5220, + 0x2ece4: 0x6c3b5420, 0x2ece5: 0x6c3b5620, 0x2ece6: 0x6c3b5820, 0x2ece7: 0x6c3b5a20, + 0x2ece8: 0x6c3b5c20, 0x2ece9: 0x6c3b5e20, 0x2ecea: 0x6c3b6020, 0x2eceb: 0x6c3b6220, + 0x2ecec: 0x6c3b6420, 0x2eced: 0x6c3b6620, 0x2ecee: 0x6c3b6820, 0x2ecef: 0x6c3b6a20, + 0x2ecf0: 0x6c3b6c20, 0x2ecf1: 0x6c3b6e20, 0x2ecf2: 0x6c573a20, 0x2ecf3: 0x6c573c20, + 0x2ecf4: 0x6c573e20, 0x2ecf5: 0x6c574020, 0x2ecf6: 0x6c574220, 0x2ecf7: 0x6c574420, + 0x2ecf8: 0x6c574620, 0x2ecf9: 0x6c574820, 0x2ecfa: 0x6c79be20, 0x2ecfb: 0x6c574a20, + 0x2ecfc: 0x6c79c020, 0x2ecfd: 0x6c574c20, 0x2ecfe: 0x6c574e20, 0x2ecff: 0x6c575020, + // Block 0xbb4, offset 0x2ed00 + 0x2ed00: 0x6c575220, 0x2ed01: 0x6c575420, 0x2ed02: 0x6c575620, 0x2ed03: 0x6c575820, + 0x2ed04: 0x6c575a20, 0x2ed05: 0x6c575c20, 0x2ed06: 0x6c575e20, 0x2ed07: 0x6c576020, + 0x2ed08: 0x6c576220, 0x2ed09: 0x6c576420, 0x2ed0a: 0x6c576620, 0x2ed0b: 0x6c576820, + 0x2ed0c: 0x6c576a20, 0x2ed0d: 0x6c576c20, 0x2ed0e: 0x6c576e20, 0x2ed0f: 0x6c577020, + 0x2ed10: 0x6c577220, 0x2ed11: 0x6c577420, 0x2ed12: 0x6c79d620, 0x2ed13: 0x6c79d820, + 0x2ed14: 0x6c79da20, 0x2ed15: 0x6c79dc20, 0x2ed16: 0x6c79de20, 0x2ed17: 0x6c79e020, + 0x2ed18: 0x6c79e220, 0x2ed19: 0x6c79e420, 0x2ed1a: 0x6c79e620, 0x2ed1b: 0x6c79e820, + 0x2ed1c: 0x6c79ea20, 0x2ed1d: 0x6c79ec20, 0x2ed1e: 0x6c79ee20, 0x2ed1f: 0x6c79f020, + 0x2ed20: 0x6c79f220, 0x2ed21: 0x6c79f420, 0x2ed22: 0x6c79f620, 0x2ed23: 0x6c79f820, + 0x2ed24: 0x6c79fa20, 0x2ed25: 0x6c79fc20, 0x2ed26: 0x6c79fe20, 0x2ed27: 0x6c7a0020, + 0x2ed28: 0x6c7a0220, 0x2ed29: 0x6c7a0420, 0x2ed2a: 0x6c7a0620, 0x2ed2b: 0x6c7a0820, + 0x2ed2c: 0x6c7a0a20, 0x2ed2d: 0x6c7a0c20, 0x2ed2e: 0x6c7a0e20, 0x2ed2f: 0x6c7a1020, + 0x2ed30: 0x6c7a1220, 0x2ed31: 0x6c7a1420, 0x2ed32: 0x6c7a1620, 0x2ed33: 0x6ca2ea20, + 0x2ed34: 0x6ca2ec20, 0x2ed35: 0x6ca2ee20, 0x2ed36: 0x6ca2f020, 0x2ed37: 0x6cd08c20, + 0x2ed38: 0x6ca2f220, 0x2ed39: 0x6c7a7220, 0x2ed3a: 0x6ca2f420, 0x2ed3b: 0x6ca2f620, + 0x2ed3c: 0x6ca2f820, 0x2ed3d: 0x6ca2fa20, 0x2ed3e: 0x6ca2fc20, 0x2ed3f: 0x6ca2fe20, + // Block 0xbb5, offset 0x2ed40 + 0x2ed40: 0x6ca30020, 0x2ed41: 0x6ca30220, 0x2ed42: 0x6ca30420, 0x2ed43: 0x6ca30620, + 0x2ed44: 0x6ca30820, 0x2ed45: 0x6ca30a20, 0x2ed46: 0x6ca30c20, 0x2ed47: 0x6ca30e20, + 0x2ed48: 0x6ca31020, 0x2ed49: 0x6c7a1820, 0x2ed4a: 0x6ca31220, 0x2ed4b: 0x6ca31420, + 0x2ed4c: 0x6ca31620, 0x2ed4d: 0x6ca31820, 0x2ed4e: 0x6ca31a20, 0x2ed4f: 0x6ca31c20, + 0x2ed50: 0x6ca31e20, 0x2ed51: 0x6ca32020, 0x2ed52: 0x6ca32220, 0x2ed53: 0x6ca32420, + 0x2ed54: 0x6cd08e20, 0x2ed55: 0x6cd09020, 0x2ed56: 0x6cd09220, 0x2ed57: 0x6cd09420, + 0x2ed58: 0x6cd09620, 0x2ed59: 0x6cd09820, 0x2ed5a: 0x6cd09a20, 0x2ed5b: 0x6cd09c20, + 0x2ed5c: 0x6cd09e20, 0x2ed5d: 0x6cd0a020, 0x2ed5e: 0x6cfe6220, 0x2ed5f: 0x6cd0a220, + 0x2ed60: 0x6cd0a420, 0x2ed61: 0x6cd0a620, 0x2ed62: 0x6cd0a820, 0x2ed63: 0x6cd0aa20, + 0x2ed64: 0x6cd0ac20, 0x2ed65: 0x6cd0ae20, 0x2ed66: 0x6cd0b020, 0x2ed67: 0x6cfe4c20, + 0x2ed68: 0x6cd0b220, 0x2ed69: 0x6cd0b420, 0x2ed6a: 0x6cd0b620, 0x2ed6b: 0x6cd0b820, + 0x2ed6c: 0x6cd0ba20, 0x2ed6d: 0x6cd0bc20, 0x2ed6e: 0x6cd0be20, 0x2ed6f: 0x6cd0c020, + 0x2ed70: 0x6cd0c220, 0x2ed71: 0x6cd0c420, 0x2ed72: 0x6cd0c620, 0x2ed73: 0x6cd0c820, + 0x2ed74: 0x6cd0ca20, 0x2ed75: 0x6cd0cc20, 0x2ed76: 0x6cd0ce20, 0x2ed77: 0x6cd0d020, + 0x2ed78: 0x6cd0d220, 0x2ed79: 0x6cd0d420, 0x2ed7a: 0x6cd0d620, 0x2ed7b: 0x6cd0d820, + 0x2ed7c: 0x6cd0da20, 0x2ed7d: 0x6cfe6420, 0x2ed7e: 0x6cfe6620, 0x2ed7f: 0x6cfe6820, + // Block 0xbb6, offset 0x2ed80 + 0x2ed80: 0x6cfe6a20, 0x2ed81: 0x6cfe6c20, 0x2ed82: 0x6cfe6e20, 0x2ed83: 0x6cfe7020, + 0x2ed84: 0x6cfe7220, 0x2ed85: 0x6cfe7420, 0x2ed86: 0x6cfe7620, 0x2ed87: 0x6cfe7820, + 0x2ed88: 0x6cfe7a20, 0x2ed89: 0x6cfe7c20, 0x2ed8a: 0x6cfe7e20, 0x2ed8b: 0x6cfe8020, + 0x2ed8c: 0x6cfe8220, 0x2ed8d: 0x6cfe8420, 0x2ed8e: 0x6cfe8620, 0x2ed8f: 0x6cfe8820, + 0x2ed90: 0x6cfe8a20, 0x2ed91: 0x6cfe8c20, 0x2ed92: 0x6cfe8e20, 0x2ed93: 0x6cfe9020, + 0x2ed94: 0x6cfe9220, 0x2ed95: 0x6cfe9420, 0x2ed96: 0x6cfe9620, 0x2ed97: 0x6cfe9820, + 0x2ed98: 0x6cfe9a20, 0x2ed99: 0x6cfe9c20, 0x2ed9a: 0x6cfe9e20, 0x2ed9b: 0x6cfea020, + 0x2ed9c: 0x6cfea220, 0x2ed9d: 0x6cfea420, 0x2ed9e: 0x6cfea620, 0x2ed9f: 0x6cfea820, + 0x2eda0: 0x6d2cea20, 0x2eda1: 0x6d2cec20, 0x2eda2: 0x6d2cee20, 0x2eda3: 0x6d2cf020, + 0x2eda4: 0x6d2cf220, 0x2eda5: 0x6d2cf420, 0x2eda6: 0x6d2cf620, 0x2eda7: 0x6d2cf820, + 0x2eda8: 0x6d2cfa20, 0x2eda9: 0x6d5a0620, 0x2edaa: 0x6d2cfc20, 0x2edab: 0x6d2cfe20, + 0x2edac: 0x6d5a0820, 0x2edad: 0x6d2d0020, 0x2edae: 0x6d2d0220, 0x2edaf: 0x6cff4020, + 0x2edb0: 0x6d2d0420, 0x2edb1: 0x6d2d0620, 0x2edb2: 0x6d2d0820, 0x2edb3: 0x6d2d0a20, + 0x2edb4: 0x6d2d0c20, 0x2edb5: 0x6d2d0e20, 0x2edb6: 0x6d2d1020, 0x2edb7: 0x6d2d1220, + 0x2edb8: 0x6d2d1420, 0x2edb9: 0x6d5a1e20, 0x2edba: 0x6d5a2020, 0x2edbb: 0x6d5a2220, + 0x2edbc: 0x6d5a2420, 0x2edbd: 0x6d5a2620, 0x2edbe: 0x6d5a2820, 0x2edbf: 0x6d84cc20, + // Block 0xbb7, offset 0x2edc0 + 0x2edc0: 0x6d5a2a20, 0x2edc1: 0x6d5a2c20, 0x2edc2: 0x6d5a2e20, 0x2edc3: 0x6d5a3020, + 0x2edc4: 0x6d5a3220, 0x2edc5: 0x6d5a3420, 0x2edc6: 0x6d5a3620, 0x2edc7: 0x6d5a3820, + 0x2edc8: 0x6d5a3a20, 0x2edc9: 0x6d5a3c20, 0x2edca: 0x6d5a3e20, 0x2edcb: 0x6d5a4020, + 0x2edcc: 0x6d5a4220, 0x2edcd: 0x6d84da20, 0x2edce: 0x6d5a4420, 0x2edcf: 0x6d84dc20, + 0x2edd0: 0x6da99a20, 0x2edd1: 0x6d84de20, 0x2edd2: 0x6d84e020, 0x2edd3: 0x6d5a4620, + 0x2edd4: 0x6d84e220, 0x2edd5: 0x6d84e420, 0x2edd6: 0x6d84e620, 0x2edd7: 0x6da99c20, + 0x2edd8: 0x6d84e820, 0x2edd9: 0x6d84ea20, 0x2edda: 0x6d84ec20, 0x2eddb: 0x6d84ee20, + 0x2eddc: 0x6d84f020, 0x2eddd: 0x6d84f220, 0x2edde: 0x6d84f420, 0x2eddf: 0x6d84f620, + 0x2ede0: 0x6d84f820, 0x2ede1: 0x6d84fa20, 0x2ede2: 0x6d856820, 0x2ede3: 0x6d84fc20, + 0x2ede4: 0x6d84fe20, 0x2ede5: 0x6da9a620, 0x2ede6: 0x6da9a820, 0x2ede7: 0x6dca8820, + 0x2ede8: 0x6da9aa20, 0x2ede9: 0x6da9ac20, 0x2edea: 0x6da9ae20, 0x2edeb: 0x6da9b020, + 0x2edec: 0x6da9b220, 0x2eded: 0x6da9b420, 0x2edee: 0x6da9b620, 0x2edef: 0x6da9b820, + 0x2edf0: 0x6da9ba20, 0x2edf1: 0x6da9bc20, 0x2edf2: 0x6da9be20, 0x2edf3: 0x6da9c020, + 0x2edf4: 0x6da9c220, 0x2edf5: 0x6dca8a20, 0x2edf6: 0x6dca8c20, 0x2edf7: 0x6de61c20, + 0x2edf8: 0x6dca8e20, 0x2edf9: 0x6dca9020, 0x2edfa: 0x6dfcfc20, 0x2edfb: 0x6dca9220, + 0x2edfc: 0x6dca9420, 0x2edfd: 0x6de61e20, 0x2edfe: 0x6dca9620, 0x2edff: 0x6dca9820, + // Block 0xbb8, offset 0x2ee00 + 0x2ee00: 0x6dca9a20, 0x2ee01: 0x6dca9c20, 0x2ee02: 0x6dca9e20, 0x2ee03: 0x6de62820, + 0x2ee04: 0x6de62a20, 0x2ee05: 0x6de62c20, 0x2ee06: 0x6de62e20, 0x2ee07: 0x6de63020, + 0x2ee08: 0x6de63220, 0x2ee09: 0x6de63420, 0x2ee0a: 0x6de63620, 0x2ee0b: 0x6de63820, + 0x2ee0c: 0x6dfd0020, 0x2ee0d: 0x6dfd0220, 0x2ee0e: 0x6dfd0420, 0x2ee0f: 0x6dfd0620, + 0x2ee10: 0x6dfd0820, 0x2ee11: 0x6dfd0a20, 0x2ee12: 0x6dfd0c20, 0x2ee13: 0x6e0fd620, + 0x2ee14: 0x6e0fd820, 0x2ee15: 0x6e1eb420, 0x2ee16: 0x6e0fda20, 0x2ee17: 0x6e1eb620, + 0x2ee18: 0x6e1eb820, 0x2ee19: 0x6e1eba20, 0x2ee1a: 0x6e2a1c20, 0x2ee1b: 0x6e32de20, + 0x2ee1c: 0x6c09fa20, 0x2ee1d: 0x6c3bac20, 0x2ee1e: 0x6c7a7820, 0x2ee1f: 0x6c7a7a20, + 0x2ee20: 0x6ca38020, 0x2ee21: 0x6cff4220, 0x2ee22: 0x6d856a20, 0x2ee23: 0x6de66820, + 0x2ee24: 0x6e1ec620, 0x2ee25: 0x6e32e420, 0x2ee26: 0x6c09fc20, 0x2ee27: 0x6c24a220, + 0x2ee28: 0x6c3bb620, 0x2ee29: 0x6c3bb820, 0x2ee2a: 0x6c57da20, 0x2ee2b: 0x6c57dc20, + 0x2ee2c: 0x6c57de20, 0x2ee2d: 0x6c57e020, 0x2ee2e: 0x6c57e220, 0x2ee2f: 0x6c57e420, + 0x2ee30: 0x6c57e620, 0x2ee31: 0x6c57e820, 0x2ee32: 0x6c57ea20, 0x2ee33: 0x6c7a9020, + 0x2ee34: 0x6c7a9220, 0x2ee35: 0x6c7a9420, 0x2ee36: 0x6ca39820, 0x2ee37: 0x6ca39a20, + 0x2ee38: 0x6ca39c20, 0x2ee39: 0x6cd17820, 0x2ee3a: 0x6cd17a20, 0x2ee3b: 0x6cd17c20, + 0x2ee3c: 0x6cd17e20, 0x2ee3d: 0x6cff6020, 0x2ee3e: 0x6cff6220, 0x2ee3f: 0x6cff6420, + // Block 0xbb9, offset 0x2ee40 + 0x2ee40: 0x6d2d9620, 0x2ee41: 0x6cff6620, 0x2ee42: 0x6d2da420, 0x2ee43: 0x6d2da620, + 0x2ee44: 0x6d2da820, 0x2ee45: 0x6d2daa20, 0x2ee46: 0x6d2dac20, 0x2ee47: 0x6d5acc20, + 0x2ee48: 0x6d5ace20, 0x2ee49: 0x6d5ad020, 0x2ee4a: 0x6d857a20, 0x2ee4b: 0x6d857c20, + 0x2ee4c: 0x6d857e20, 0x2ee4d: 0x6d858020, 0x2ee4e: 0x6d858220, 0x2ee4f: 0x6daa2020, + 0x2ee50: 0x6daa2220, 0x2ee51: 0x6daa2420, 0x2ee52: 0x6daa2620, 0x2ee53: 0x6dcaee20, + 0x2ee54: 0x6dcaf020, 0x2ee55: 0x6dcaf220, 0x2ee56: 0x6de66e20, 0x2ee57: 0x6e0ffa20, + 0x2ee58: 0x6c09fe20, 0x2ee59: 0x6c3bc420, 0x2ee5a: 0x6c57fe20, 0x2ee5b: 0x6ca3ba20, + 0x2ee5c: 0x6ca3bc20, 0x2ee5d: 0x6cff8a20, 0x2ee5e: 0x6cff8c20, 0x2ee5f: 0x6c0a0220, + 0x2ee60: 0x6c580a20, 0x2ee61: 0x6c7ab220, 0x2ee62: 0x6ca3be20, 0x2ee63: 0x6ca3c020, + 0x2ee64: 0x6cd1a420, 0x2ee65: 0x6cd1a620, 0x2ee66: 0x6cd1a820, 0x2ee67: 0x6d2dd620, + 0x2ee68: 0x6c0a0620, 0x2ee69: 0x6c0a0820, 0x2ee6a: 0x6c13d020, 0x2ee6b: 0x6c24aa20, + 0x2ee6c: 0x6c24ac20, 0x2ee6d: 0x6c581a20, 0x2ee6e: 0x6c581c20, 0x2ee6f: 0x6cd1b620, + 0x2ee70: 0x6c0a0a20, 0x2ee71: 0x6c0a0c20, 0x2ee72: 0x6c0a0e20, 0x2ee73: 0x6c0a1020, + 0x2ee74: 0x6c0a1220, 0x2ee75: 0x6c0a1420, 0x2ee76: 0x6c13d620, 0x2ee77: 0x6c24b620, + 0x2ee78: 0x6c24b820, 0x2ee79: 0x6c24ba20, 0x2ee7a: 0x6c24bc20, 0x2ee7b: 0x6c3be220, + 0x2ee7c: 0x6c24be20, 0x2ee7d: 0x6c3be420, 0x2ee7e: 0x6c3be620, 0x2ee7f: 0x6c3be820, + // Block 0xbba, offset 0x2ee80 + 0x2ee80: 0x6c3bea20, 0x2ee81: 0x6c3bec20, 0x2ee82: 0x6c3bee20, 0x2ee83: 0x6c3bf020, + 0x2ee84: 0x6c3bf220, 0x2ee85: 0x6c3bf420, 0x2ee86: 0x6c582420, 0x2ee87: 0x6c582620, + 0x2ee88: 0x6c582820, 0x2ee89: 0x6c582a20, 0x2ee8a: 0x6c582c20, 0x2ee8b: 0x6c582e20, + 0x2ee8c: 0x6c583020, 0x2ee8d: 0x6c583220, 0x2ee8e: 0x6c583420, 0x2ee8f: 0x6c583620, + 0x2ee90: 0x6c583820, 0x2ee91: 0x6c583a20, 0x2ee92: 0x6c583c20, 0x2ee93: 0x6c583e20, + 0x2ee94: 0x6c7abe20, 0x2ee95: 0x6c7ac020, 0x2ee96: 0x6c7ac220, 0x2ee97: 0x6c7ac420, + 0x2ee98: 0x6c7ac620, 0x2ee99: 0x6c7ac820, 0x2ee9a: 0x6c7aca20, 0x2ee9b: 0x6c7acc20, + 0x2ee9c: 0x6c7ace20, 0x2ee9d: 0x6c7ad020, 0x2ee9e: 0x6c7ad220, 0x2ee9f: 0x6c7ad420, + 0x2eea0: 0x6c7bac20, 0x2eea1: 0x6ca3d620, 0x2eea2: 0x6ca3d820, 0x2eea3: 0x6ca3da20, + 0x2eea4: 0x6ca3dc20, 0x2eea5: 0x6ca3de20, 0x2eea6: 0x6ca3e020, 0x2eea7: 0x6ca3e220, + 0x2eea8: 0x6ca89a20, 0x2eea9: 0x6ca3e420, 0x2eeaa: 0x6cd1be20, 0x2eeab: 0x6cd1c020, + 0x2eeac: 0x6cd1c220, 0x2eead: 0x6cd1c420, 0x2eeae: 0x6cd1c620, 0x2eeaf: 0x6cd1c820, + 0x2eeb0: 0x6ca3e620, 0x2eeb1: 0x6cd20620, 0x2eeb2: 0x6cd1ca20, 0x2eeb3: 0x6cd1cc20, + 0x2eeb4: 0x6cd1ce20, 0x2eeb5: 0x6cffaa20, 0x2eeb6: 0x6cffac20, 0x2eeb7: 0x6cffae20, + 0x2eeb8: 0x6cffb020, 0x2eeb9: 0x6cffb220, 0x2eeba: 0x6cffb420, 0x2eebb: 0x6d2de220, + 0x2eebc: 0x6d2de420, 0x2eebd: 0x6d2de620, 0x2eebe: 0x6d5b0420, 0x2eebf: 0x6d5b0620, + // Block 0xbbb, offset 0x2eec0 + 0x2eec0: 0x6d85a020, 0x2eec1: 0x6d85a220, 0x2eec2: 0x6d85a420, 0x2eec3: 0x6daa4620, + 0x2eec4: 0x6daa4820, 0x2eec5: 0x6dcb0e20, 0x2eec6: 0x6de68020, 0x2eec7: 0x6de68220, + 0x2eec8: 0x6dfd3620, 0x2eec9: 0x6dfd4820, 0x2eeca: 0x6e1ede20, 0x2eecb: 0x6c0a1a20, + 0x2eecc: 0x6c3c1420, 0x2eecd: 0x6c7b0e20, 0x2eece: 0x6cd20820, 0x2eecf: 0x6cd20a20, + 0x2eed0: 0x6d2e0420, 0x2eed1: 0x6d2e0620, 0x2eed2: 0x6c0a2020, 0x2eed3: 0x6c24d820, + 0x2eed4: 0x6c24da20, 0x2eed5: 0x6c24dc20, 0x2eed6: 0x6c24de20, 0x2eed7: 0x6c24e020, + 0x2eed8: 0x6c3c2020, 0x2eed9: 0x6c3c2220, 0x2eeda: 0x6c3c2420, 0x2eedb: 0x6c3c2620, + 0x2eedc: 0x6c3c2820, 0x2eedd: 0x6c3c2a20, 0x2eede: 0x6c3c2c20, 0x2eedf: 0x6c3c2e20, + 0x2eee0: 0x6c3c3020, 0x2eee1: 0x6c3c4220, 0x2eee2: 0x6c589c20, 0x2eee3: 0x6c589e20, + 0x2eee4: 0x6c58a020, 0x2eee5: 0x6c58a220, 0x2eee6: 0x6c58a420, 0x2eee7: 0x6c58a620, + 0x2eee8: 0x6c58a820, 0x2eee9: 0x6c58aa20, 0x2eeea: 0x6c58ac20, 0x2eeeb: 0x6c58ae20, + 0x2eeec: 0x6c58b020, 0x2eeed: 0x6c58b220, 0x2eeee: 0x6c58b420, 0x2eeef: 0x6c58b620, + 0x2eef0: 0x6c7b2c20, 0x2eef1: 0x6c7b2e20, 0x2eef2: 0x6c7b3020, 0x2eef3: 0x6c7b3220, + 0x2eef4: 0x6c7b3420, 0x2eef5: 0x6ca41a20, 0x2eef6: 0x6c7b3620, 0x2eef7: 0x6c7b3820, + 0x2eef8: 0x6c7b3a20, 0x2eef9: 0x6c7b3c20, 0x2eefa: 0x6c58b820, 0x2eefb: 0x6c7b3e20, + 0x2eefc: 0x6c7b4020, 0x2eefd: 0x6c7b4220, 0x2eefe: 0x6c7b4420, 0x2eeff: 0x6c7b4620, + // Block 0xbbc, offset 0x2ef00 + 0x2ef00: 0x6c7b4820, 0x2ef01: 0x6c7b4a20, 0x2ef02: 0x6c7b4c20, 0x2ef03: 0x6c7b4e20, + 0x2ef04: 0x6c7b5020, 0x2ef05: 0x6c7b5220, 0x2ef06: 0x6c7b5420, 0x2ef07: 0x6c7b5620, + 0x2ef08: 0x6c7b5820, 0x2ef09: 0x6c7b5a20, 0x2ef0a: 0x6ca42e20, 0x2ef0b: 0x6ca43020, + 0x2ef0c: 0x6ca43220, 0x2ef0d: 0x6ca43420, 0x2ef0e: 0x6ca43620, 0x2ef0f: 0x6ca43820, + 0x2ef10: 0x6ca43a20, 0x2ef11: 0x6ca43c20, 0x2ef12: 0x6ca43e20, 0x2ef13: 0x6ca44020, + 0x2ef14: 0x6ca44220, 0x2ef15: 0x6ca44420, 0x2ef16: 0x6ca44620, 0x2ef17: 0x6cd23020, + 0x2ef18: 0x6cd23220, 0x2ef19: 0x6cd23420, 0x2ef1a: 0x6cd23620, 0x2ef1b: 0x6cd23820, + 0x2ef1c: 0x6cd23a20, 0x2ef1d: 0x6cd23c20, 0x2ef1e: 0x6cd23e20, 0x2ef1f: 0x6cd24020, + 0x2ef20: 0x6cd24220, 0x2ef21: 0x6cd24420, 0x2ef22: 0x6cd24620, 0x2ef23: 0x6cd24820, + 0x2ef24: 0x6cd24a20, 0x2ef25: 0x6cd24c20, 0x2ef26: 0x6cd24e20, 0x2ef27: 0x6cd25020, + 0x2ef28: 0x6cd25220, 0x2ef29: 0x6cd25420, 0x2ef2a: 0x6cd25620, 0x2ef2b: 0x6cd25820, + 0x2ef2c: 0x6d000620, 0x2ef2d: 0x6d000820, 0x2ef2e: 0x6d000a20, 0x2ef2f: 0x6d000c20, + 0x2ef30: 0x6d000e20, 0x2ef31: 0x6d001020, 0x2ef32: 0x6d001220, 0x2ef33: 0x6d001420, + 0x2ef34: 0x6d001620, 0x2ef35: 0x6d001820, 0x2ef36: 0x6d001a20, 0x2ef37: 0x6d001c20, + 0x2ef38: 0x6d001e20, 0x2ef39: 0x6d002020, 0x2ef3a: 0x6d002220, 0x2ef3b: 0x6d002420, + 0x2ef3c: 0x6d002620, 0x2ef3d: 0x6d002820, 0x2ef3e: 0x6d002a20, 0x2ef3f: 0x6d002c20, + // Block 0xbbd, offset 0x2ef40 + 0x2ef40: 0x6d002e20, 0x2ef41: 0x6d003020, 0x2ef42: 0x6d003220, 0x2ef43: 0x6d003420, + 0x2ef44: 0x6d003620, 0x2ef45: 0x6d003820, 0x2ef46: 0x6d003a20, 0x2ef47: 0x6d2e2020, + 0x2ef48: 0x6d2e2220, 0x2ef49: 0x6d2e2420, 0x2ef4a: 0x6d2e2620, 0x2ef4b: 0x6d2e2820, + 0x2ef4c: 0x6d2e2a20, 0x2ef4d: 0x6d2e2c20, 0x2ef4e: 0x6d2e2e20, 0x2ef4f: 0x6d00b020, + 0x2ef50: 0x6d00b220, 0x2ef51: 0x6d2e3020, 0x2ef52: 0x6d2e3220, 0x2ef53: 0x6d2e3420, + 0x2ef54: 0x6d2e3620, 0x2ef55: 0x6d2e3820, 0x2ef56: 0x6d2e3a20, 0x2ef57: 0x6d2e3c20, + 0x2ef58: 0x6d2e3e20, 0x2ef59: 0x6d5b4a20, 0x2ef5a: 0x6d5b4c20, 0x2ef5b: 0x6d5b4e20, + 0x2ef5c: 0x6d5b5020, 0x2ef5d: 0x6d5b5220, 0x2ef5e: 0x6d5b5420, 0x2ef5f: 0x6d5b3020, + 0x2ef60: 0x6d5b5620, 0x2ef61: 0x6d5b5820, 0x2ef62: 0x6d5b5a20, 0x2ef63: 0x6d5b5c20, + 0x2ef64: 0x6d5b5e20, 0x2ef65: 0x6d5b6020, 0x2ef66: 0x6d5b6220, 0x2ef67: 0x6d2e4020, + 0x2ef68: 0x6d5b6420, 0x2ef69: 0x6d5b6620, 0x2ef6a: 0x6d5b6820, 0x2ef6b: 0x6d5b6a20, + 0x2ef6c: 0x6d85d420, 0x2ef6d: 0x6d85d620, 0x2ef6e: 0x6d85d820, 0x2ef6f: 0x6d85da20, + 0x2ef70: 0x6d85dc20, 0x2ef71: 0x6d85de20, 0x2ef72: 0x6d85e020, 0x2ef73: 0x6d85e220, + 0x2ef74: 0x6d85e420, 0x2ef75: 0x6d85e620, 0x2ef76: 0x6d85e820, 0x2ef77: 0x6d85ea20, + 0x2ef78: 0x6d85ec20, 0x2ef79: 0x6d85ee20, 0x2ef7a: 0x6d85f020, 0x2ef7b: 0x6d85f220, + 0x2ef7c: 0x6d85f420, 0x2ef7d: 0x6d85f620, 0x2ef7e: 0x6d85f820, 0x2ef7f: 0x6d85fa20, + // Block 0xbbe, offset 0x2ef80 + 0x2ef80: 0x6daa7420, 0x2ef81: 0x6daa7620, 0x2ef82: 0x6daa7820, 0x2ef83: 0x6daa7a20, + 0x2ef84: 0x6daa7c20, 0x2ef85: 0x6daa7e20, 0x2ef86: 0x6daa8020, 0x2ef87: 0x6daa8220, + 0x2ef88: 0x6daa8420, 0x2ef89: 0x6daa8620, 0x2ef8a: 0x6d85fc20, 0x2ef8b: 0x6daa8820, + 0x2ef8c: 0x6daa8a20, 0x2ef8d: 0x6daa8c20, 0x2ef8e: 0x6daa8e20, 0x2ef8f: 0x6dcb2c20, + 0x2ef90: 0x6dcb2e20, 0x2ef91: 0x6dcb3020, 0x2ef92: 0x6dcb3220, 0x2ef93: 0x6dcb3420, + 0x2ef94: 0x6dcb3620, 0x2ef95: 0x6dcb3820, 0x2ef96: 0x6dcb3a20, 0x2ef97: 0x6dcb3c20, + 0x2ef98: 0x6dcb3e20, 0x2ef99: 0x6dcb4020, 0x2ef9a: 0x6dcb4220, 0x2ef9b: 0x6dcb4420, + 0x2ef9c: 0x6dcb4620, 0x2ef9d: 0x6dcb4820, 0x2ef9e: 0x6dcb4a20, 0x2ef9f: 0x6de69c20, + 0x2efa0: 0x6de69e20, 0x2efa1: 0x6de6a020, 0x2efa2: 0x6dfd4c20, 0x2efa3: 0x6de6a220, + 0x2efa4: 0x6dcb8220, 0x2efa5: 0x6dfd4e20, 0x2efa6: 0x6dfd5020, 0x2efa7: 0x6e102420, + 0x2efa8: 0x6e102620, 0x2efa9: 0x6e102820, 0x2efaa: 0x6e102a20, 0x2efab: 0x6e102c20, + 0x2efac: 0x6e1eea20, 0x2efad: 0x6e1eec20, 0x2efae: 0x6e1eee20, 0x2efaf: 0x6e2a4a20, + 0x2efb0: 0x6e2a4c20, 0x2efb1: 0x6e32f220, 0x2efb2: 0x6e32f420, 0x2efb3: 0x6e3d8020, + 0x2efb4: 0x6e42ca20, 0x2efb5: 0x6e452a20, 0x2efb6: 0x6c0a2220, 0x2efb7: 0x6c3c4420, + 0x2efb8: 0x6c590220, 0x2efb9: 0x6c590420, 0x2efba: 0x6c590620, 0x2efbb: 0x6cd2b820, + 0x2efbc: 0x6cd2ba20, 0x2efbd: 0x6c0a2420, 0x2efbe: 0x6c13e020, 0x2efbf: 0x6c13e220, + // Block 0xbbf, offset 0x2efc0 + 0x2efc0: 0x6c24fa20, 0x2efc1: 0x6c24fc20, 0x2efc2: 0x6c24fe20, 0x2efc3: 0x6c250020, + 0x2efc4: 0x6c3c4620, 0x2efc5: 0x6c590e20, 0x2efc6: 0x6c591020, 0x2efc7: 0x6c591220, + 0x2efc8: 0x6c591420, 0x2efc9: 0x6ca48c20, 0x2efca: 0x6c7bae20, 0x2efcb: 0x6c7bb020, + 0x2efcc: 0x6c7bb220, 0x2efcd: 0x6c7bb420, 0x2efce: 0x6ca49220, 0x2efcf: 0x6ca49420, + 0x2efd0: 0x6ca49620, 0x2efd1: 0x6ca49820, 0x2efd2: 0x6cd2c420, 0x2efd3: 0x6cd2c620, + 0x2efd4: 0x6cd2c820, 0x2efd5: 0x6cd2ca20, 0x2efd6: 0x6cd2cc20, 0x2efd7: 0x6d00bc20, + 0x2efd8: 0x6d00be20, 0x2efd9: 0x6d00c020, 0x2efda: 0x6d5bde20, 0x2efdb: 0x6d5be020, + 0x2efdc: 0x6d5be220, 0x2efdd: 0x6d5be420, 0x2efde: 0x6d5be620, 0x2efdf: 0x6d865420, + 0x2efe0: 0x6d865620, 0x2efe1: 0x6d865820, 0x2efe2: 0x6dab0020, 0x2efe3: 0x6dab0220, + 0x2efe4: 0x6dab0420, 0x2efe5: 0x6dab0620, 0x2efe6: 0x6dcb8420, 0x2efe7: 0x6dcb8620, + 0x2efe8: 0x6dcb8820, 0x2efe9: 0x6de6de20, 0x2efea: 0x6dfd7420, 0x2efeb: 0x6dfd7620, + 0x2efec: 0x6e104620, 0x2efed: 0x6e1f0020, 0x2efee: 0x6c0a2620, 0x2efef: 0x6c3c5620, + 0x2eff0: 0x6c7bd820, 0x2eff1: 0x6c7bda20, 0x2eff2: 0x6ca4ac20, 0x2eff3: 0x6cd2f020, + 0x2eff4: 0x6cd2f220, 0x2eff5: 0x6d00e820, 0x2eff6: 0x6d2ecc20, 0x2eff7: 0x6d2ece20, + 0x2eff8: 0x6d2ed020, 0x2eff9: 0x6d2ed220, 0x2effa: 0x6d5bfc20, 0x2effb: 0x6d866620, + 0x2effc: 0x6dab1620, 0x2effd: 0x6dcb9420, 0x2effe: 0x6dfd8220, 0x2efff: 0x6c0a2820, + // Block 0xbc0, offset 0x2f000 + 0x2f000: 0x6c250c20, 0x2f001: 0x6c250e20, 0x2f002: 0x6c3c6820, 0x2f003: 0x6c595220, + 0x2f004: 0x6c595420, 0x2f005: 0x6c595620, 0x2f006: 0x6c595820, 0x2f007: 0x6c595a20, + 0x2f008: 0x6c595c20, 0x2f009: 0x6c7bf620, 0x2f00a: 0x6c7bf820, 0x2f00b: 0x6c7bfa20, + 0x2f00c: 0x6c7bfc20, 0x2f00d: 0x6c7bfe20, 0x2f00e: 0x6c7c0020, 0x2f00f: 0x6c7c0220, + 0x2f010: 0x6c7c0420, 0x2f011: 0x6c7c0620, 0x2f012: 0x6ca4c220, 0x2f013: 0x6ca4c420, + 0x2f014: 0x6ca4c620, 0x2f015: 0x6ca4c820, 0x2f016: 0x6ca4ca20, 0x2f017: 0x6ca4cc20, + 0x2f018: 0x6ca4ce20, 0x2f019: 0x6cd30c20, 0x2f01a: 0x6cd30e20, 0x2f01b: 0x6ca4d020, + 0x2f01c: 0x6cd31020, 0x2f01d: 0x6d010c20, 0x2f01e: 0x6d010e20, 0x2f01f: 0x6d011020, + 0x2f020: 0x6d2ef420, 0x2f021: 0x6d2ef620, 0x2f022: 0x6d2ef820, 0x2f023: 0x6d2efa20, + 0x2f024: 0x6d5c0c20, 0x2f025: 0x6d868220, 0x2f026: 0x6d868420, 0x2f027: 0x6d868620, + 0x2f028: 0x6dab2020, 0x2f029: 0x6dab2220, 0x2f02a: 0x6dab2420, 0x2f02b: 0x6dcba820, + 0x2f02c: 0x6dcbaa20, 0x2f02d: 0x6dfd8e20, 0x2f02e: 0x6c0a2a20, 0x2f02f: 0x6c251820, + 0x2f030: 0x6c3c8020, 0x2f031: 0x6c3c8220, 0x2f032: 0x6c3c8420, 0x2f033: 0x6c3c8620, + 0x2f034: 0x6c3c8820, 0x2f035: 0x6c3c8a20, 0x2f036: 0x6c598820, 0x2f037: 0x6c598a20, + 0x2f038: 0x6c598c20, 0x2f039: 0x6c598e20, 0x2f03a: 0x6c599020, 0x2f03b: 0x6c599220, + 0x2f03c: 0x6c599420, 0x2f03d: 0x6c599620, 0x2f03e: 0x6c599820, 0x2f03f: 0x6c599a20, + // Block 0xbc1, offset 0x2f040 + 0x2f040: 0x6c599c20, 0x2f041: 0x6c599e20, 0x2f042: 0x6c59a020, 0x2f043: 0x6c59a220, + 0x2f044: 0x6c59a420, 0x2f045: 0x6c59a620, 0x2f046: 0x6c59a820, 0x2f047: 0x6c59aa20, + 0x2f048: 0x6c59ac20, 0x2f049: 0x6c59ae20, 0x2f04a: 0x6c59b020, 0x2f04b: 0x6c59b220, + 0x2f04c: 0x6c59b420, 0x2f04d: 0x6c59b620, 0x2f04e: 0x6c7c3e20, 0x2f04f: 0x6c7c4020, + 0x2f050: 0x6c7c4220, 0x2f051: 0x6c7c4420, 0x2f052: 0x6c7c4620, 0x2f053: 0x6c7c4820, + 0x2f054: 0x6c7c4a20, 0x2f055: 0x6c7c4c20, 0x2f056: 0x6c7c4e20, 0x2f057: 0x6c7c5020, + 0x2f058: 0x6c7c5220, 0x2f059: 0x6c7c5420, 0x2f05a: 0x6c7c5620, 0x2f05b: 0x6c7c5820, + 0x2f05c: 0x6c7c5a20, 0x2f05d: 0x6c7c5c20, 0x2f05e: 0x6c7c5e20, 0x2f05f: 0x6c7c6020, + 0x2f060: 0x6c7c6220, 0x2f061: 0x6c7c6420, 0x2f062: 0x6c7c6620, 0x2f063: 0x6c7c6820, + 0x2f064: 0x6c7c6a20, 0x2f065: 0x6ca4ee20, 0x2f066: 0x6ca4f020, 0x2f067: 0x6c7c6c20, + 0x2f068: 0x6c7c6e20, 0x2f069: 0x6c7c7020, 0x2f06a: 0x6c7c7220, 0x2f06b: 0x6c7c7420, + 0x2f06c: 0x6c7c7620, 0x2f06d: 0x6ca50220, 0x2f06e: 0x6ca50420, 0x2f06f: 0x6ca50620, + 0x2f070: 0x6ca50820, 0x2f071: 0x6ca50a20, 0x2f072: 0x6ca50c20, 0x2f073: 0x6ca50e20, + 0x2f074: 0x6ca51020, 0x2f075: 0x6ca51220, 0x2f076: 0x6ca51420, 0x2f077: 0x6ca51620, + 0x2f078: 0x6ca51820, 0x2f079: 0x6ca51a20, 0x2f07a: 0x6ca51c20, 0x2f07b: 0x6ca51e20, + 0x2f07c: 0x6ca52020, 0x2f07d: 0x6ca52220, 0x2f07e: 0x6ca52420, 0x2f07f: 0x6c7c7820, + // Block 0xbc2, offset 0x2f080 + 0x2f080: 0x6ca59220, 0x2f081: 0x6ca52620, 0x2f082: 0x6cd35020, 0x2f083: 0x6cd35220, + 0x2f084: 0x6cd35420, 0x2f085: 0x6cd35620, 0x2f086: 0x6cd35820, 0x2f087: 0x6cd35a20, + 0x2f088: 0x6cd35c20, 0x2f089: 0x6cd35e20, 0x2f08a: 0x6cd36020, 0x2f08b: 0x6cd36220, + 0x2f08c: 0x6cd36420, 0x2f08d: 0x6cd36620, 0x2f08e: 0x6cd36820, 0x2f08f: 0x6cd36a20, + 0x2f090: 0x6cd36c20, 0x2f091: 0x6cd36e20, 0x2f092: 0x6d014220, 0x2f093: 0x6d014420, + 0x2f094: 0x6d014620, 0x2f095: 0x6d014820, 0x2f096: 0x6d014a20, 0x2f097: 0x6d014c20, + 0x2f098: 0x6d014e20, 0x2f099: 0x6d015020, 0x2f09a: 0x6d015220, 0x2f09b: 0x6d015420, + 0x2f09c: 0x6d015620, 0x2f09d: 0x6d015820, 0x2f09e: 0x6d015a20, 0x2f09f: 0x6d015c20, + 0x2f0a0: 0x6d015e20, 0x2f0a1: 0x6d01f620, 0x2f0a2: 0x6d016020, 0x2f0a3: 0x6d016220, + 0x2f0a4: 0x6d016420, 0x2f0a5: 0x6d016620, 0x2f0a6: 0x6d016820, 0x2f0a7: 0x6d016a20, + 0x2f0a8: 0x6d016c20, 0x2f0a9: 0x6d016e20, 0x2f0aa: 0x6d017020, 0x2f0ab: 0x6d017220, + 0x2f0ac: 0x6d017420, 0x2f0ad: 0x6d017620, 0x2f0ae: 0x6d2f2220, 0x2f0af: 0x6d2f2420, + 0x2f0b0: 0x6d2f2620, 0x2f0b1: 0x6d2f2820, 0x2f0b2: 0x6d2f2a20, 0x2f0b3: 0x6d2f2c20, + 0x2f0b4: 0x6d2f2e20, 0x2f0b5: 0x6d2f3020, 0x2f0b6: 0x6d2f3220, 0x2f0b7: 0x6d2f3420, + 0x2f0b8: 0x6d2f3620, 0x2f0b9: 0x6d01f820, 0x2f0ba: 0x6d2f3820, 0x2f0bb: 0x6d2f3a20, + 0x2f0bc: 0x6d2f3c20, 0x2f0bd: 0x6d2f3e20, 0x2f0be: 0x6d2f4020, 0x2f0bf: 0x6d2f4220, + // Block 0xbc3, offset 0x2f0c0 + 0x2f0c0: 0x6d2f4420, 0x2f0c1: 0x6d2f4620, 0x2f0c2: 0x6d2f4820, 0x2f0c3: 0x6d2f4a20, + 0x2f0c4: 0x6d2f4c20, 0x2f0c5: 0x6d2f4e20, 0x2f0c6: 0x6d2f5020, 0x2f0c7: 0x6d5c3e20, + 0x2f0c8: 0x6d5c4020, 0x2f0c9: 0x6d5c4220, 0x2f0ca: 0x6d5c4420, 0x2f0cb: 0x6d5c4620, + 0x2f0cc: 0x6d5c4820, 0x2f0cd: 0x6d5c4a20, 0x2f0ce: 0x6d5c4c20, 0x2f0cf: 0x6d5c4e20, + 0x2f0d0: 0x6d5c5020, 0x2f0d1: 0x6d5c5220, 0x2f0d2: 0x6d5c5420, 0x2f0d3: 0x6d5c5620, + 0x2f0d4: 0x6d86c020, 0x2f0d5: 0x6d86c220, 0x2f0d6: 0x6d86c420, 0x2f0d7: 0x6d86c620, + 0x2f0d8: 0x6d86c820, 0x2f0d9: 0x6d86ca20, 0x2f0da: 0x6d86cc20, 0x2f0db: 0x6d86ce20, + 0x2f0dc: 0x6d86d020, 0x2f0dd: 0x6d86d220, 0x2f0de: 0x6d86d420, 0x2f0df: 0x6d86d620, + 0x2f0e0: 0x6d86d820, 0x2f0e1: 0x6d86da20, 0x2f0e2: 0x6d86dc20, 0x2f0e3: 0x6d86de20, + 0x2f0e4: 0x6dab6020, 0x2f0e5: 0x6d875220, 0x2f0e6: 0x6dab6220, 0x2f0e7: 0x6dab6420, + 0x2f0e8: 0x6dab6620, 0x2f0e9: 0x6dab6820, 0x2f0ea: 0x6dab6a20, 0x2f0eb: 0x6dab6c20, + 0x2f0ec: 0x6dab6e20, 0x2f0ed: 0x6dab7020, 0x2f0ee: 0x6dab7220, 0x2f0ef: 0x6dab7420, + 0x2f0f0: 0x6dab7620, 0x2f0f1: 0x6dab7820, 0x2f0f2: 0x6dab7a20, 0x2f0f3: 0x6dab7c20, + 0x2f0f4: 0x6dab7e20, 0x2f0f5: 0x6dab8020, 0x2f0f6: 0x6dab8220, 0x2f0f7: 0x6dab8420, + 0x2f0f8: 0x6dcbcc20, 0x2f0f9: 0x6dcbce20, 0x2f0fa: 0x6dcbd020, 0x2f0fb: 0x6dcbd220, + 0x2f0fc: 0x6dcbd420, 0x2f0fd: 0x6dcbd620, 0x2f0fe: 0x6dcbd820, 0x2f0ff: 0x6dcbda20, + // Block 0xbc4, offset 0x2f100 + 0x2f100: 0x6dcbdc20, 0x2f101: 0x6dcbde20, 0x2f102: 0x6dcbe020, 0x2f103: 0x6de70c20, + 0x2f104: 0x6de70e20, 0x2f105: 0x6de71020, 0x2f106: 0x6de71220, 0x2f107: 0x6de71420, + 0x2f108: 0x6de71620, 0x2f109: 0x6de71820, 0x2f10a: 0x6de71a20, 0x2f10b: 0x6dfdae20, + 0x2f10c: 0x6dfdb020, 0x2f10d: 0x6dfdb220, 0x2f10e: 0x6dfdb420, 0x2f10f: 0x6dfdb620, + 0x2f110: 0x6e106020, 0x2f111: 0x6e106220, 0x2f112: 0x6e106420, 0x2f113: 0x6e106620, + 0x2f114: 0x6e2a6c20, 0x2f115: 0x6e331420, 0x2f116: 0x6e332020, 0x2f117: 0x6e331620, + 0x2f118: 0x6e393a20, 0x2f119: 0x6e393c20, 0x2f11a: 0x6e3d8a20, 0x2f11b: 0x6c0a2c20, + 0x2f11c: 0x6c5a1c20, 0x2f11d: 0x6c7cd620, 0x2f11e: 0x6cd3f420, 0x2f11f: 0x6cd3f620, + 0x2f120: 0x6d01fa20, 0x2f121: 0x6e394020, 0x2f122: 0x6c0a2e20, 0x2f123: 0x6c253220, + 0x2f124: 0x6c3cb620, 0x2f125: 0x6c3cb820, 0x2f126: 0x6c5a2420, 0x2f127: 0x6c5a2620, + 0x2f128: 0x6c5a2820, 0x2f129: 0x6c7ce820, 0x2f12a: 0x6ca59e20, 0x2f12b: 0x6ca5a020, + 0x2f12c: 0x6cd40c20, 0x2f12d: 0x6cd40e20, 0x2f12e: 0x6d020820, 0x2f12f: 0x6dabf820, + 0x2f130: 0x6dabfa20, 0x2f131: 0x6de76020, 0x2f132: 0x6dfde820, 0x2f133: 0x6c0a3020, + 0x2f134: 0x6c253a20, 0x2f135: 0x6c253c20, 0x2f136: 0x6c253e20, 0x2f137: 0x6c3cc020, + 0x2f138: 0x6c3cc220, 0x2f139: 0x6c3cc420, 0x2f13a: 0x6c3cc620, 0x2f13b: 0x6c3cc820, + 0x2f13c: 0x6c3cca20, 0x2f13d: 0x6c3ccc20, 0x2f13e: 0x6c3cce20, 0x2f13f: 0x6c3cd020, + // Block 0xbc5, offset 0x2f140 + 0x2f140: 0x6c3cd220, 0x2f141: 0x6c3cd420, 0x2f142: 0x6c5a4820, 0x2f143: 0x6c5a4a20, + 0x2f144: 0x6c5a4c20, 0x2f145: 0x6c5a4e20, 0x2f146: 0x6c5a5020, 0x2f147: 0x6c5a5220, + 0x2f148: 0x6c5a5420, 0x2f149: 0x6c5a5620, 0x2f14a: 0x6c5a5820, 0x2f14b: 0x6c5a5a20, + 0x2f14c: 0x6c5a5c20, 0x2f14d: 0x6c5a5e20, 0x2f14e: 0x6c5a6020, 0x2f14f: 0x6c5a6220, + 0x2f150: 0x6c5a6420, 0x2f151: 0x6c5a6620, 0x2f152: 0x6c5a6820, 0x2f153: 0x6c5a6a20, + 0x2f154: 0x6c5a6c20, 0x2f155: 0x6c5a6e20, 0x2f156: 0x6c5a7020, 0x2f157: 0x6c5a7220, + 0x2f158: 0x6c5a7420, 0x2f159: 0x6c5a7620, 0x2f15a: 0x6c5a7820, 0x2f15b: 0x6c5a7a20, + 0x2f15c: 0x6c5a7c20, 0x2f15d: 0x6c7d1220, 0x2f15e: 0x6c7d1420, 0x2f15f: 0x6c7d1620, + 0x2f160: 0x6c7d1820, 0x2f161: 0x6c7d1a20, 0x2f162: 0x6c7d1c20, 0x2f163: 0x6c7d1e20, + 0x2f164: 0x6c7d2020, 0x2f165: 0x6c7d2220, 0x2f166: 0x6ca5ce20, 0x2f167: 0x6c7d2420, + 0x2f168: 0x6c7d2620, 0x2f169: 0x6c7d2820, 0x2f16a: 0x6c7d2a20, 0x2f16b: 0x6c7d2c20, + 0x2f16c: 0x6c7d2e20, 0x2f16d: 0x6c7d3020, 0x2f16e: 0x6c7d3220, 0x2f16f: 0x6c7d3420, + 0x2f170: 0x6c7d3620, 0x2f171: 0x6c7d3820, 0x2f172: 0x6c7d3a20, 0x2f173: 0x6c7d3c20, + 0x2f174: 0x6c7d3e20, 0x2f175: 0x6c7d4020, 0x2f176: 0x6c7d4220, 0x2f177: 0x6c7d4420, + 0x2f178: 0x6c7d4620, 0x2f179: 0x6c7d4820, 0x2f17a: 0x6c7d4a20, 0x2f17b: 0x6c7d4c20, + 0x2f17c: 0x6c7d4e20, 0x2f17d: 0x6c7d5020, 0x2f17e: 0x6c7d5220, 0x2f17f: 0x6c7d5420, + // Block 0xbc6, offset 0x2f180 + 0x2f180: 0x6c7d5620, 0x2f181: 0x6c7d5820, 0x2f182: 0x6ca5de20, 0x2f183: 0x6ca5e020, + 0x2f184: 0x6ca5e220, 0x2f185: 0x6ca5e420, 0x2f186: 0x6ca5e620, 0x2f187: 0x6ca5e820, + 0x2f188: 0x6ca5ea20, 0x2f189: 0x6ca5ec20, 0x2f18a: 0x6ca5ee20, 0x2f18b: 0x6ca5f020, + 0x2f18c: 0x6ca5f220, 0x2f18d: 0x6ca5f420, 0x2f18e: 0x6ca5f620, 0x2f18f: 0x6ca5f820, + 0x2f190: 0x6ca5fa20, 0x2f191: 0x6ca5fc20, 0x2f192: 0x6ca5fe20, 0x2f193: 0x6ca60020, + 0x2f194: 0x6ca60220, 0x2f195: 0x6ca60420, 0x2f196: 0x6ca60620, 0x2f197: 0x6ca60820, + 0x2f198: 0x6ca60a20, 0x2f199: 0x6ca60c20, 0x2f19a: 0x6ca60e20, 0x2f19b: 0x6ca61020, + 0x2f19c: 0x6cd43420, 0x2f19d: 0x6cd43620, 0x2f19e: 0x6cd43820, 0x2f19f: 0x6cd43a20, + 0x2f1a0: 0x6cd43c20, 0x2f1a1: 0x6cd43e20, 0x2f1a2: 0x6cd44020, 0x2f1a3: 0x6cd44220, + 0x2f1a4: 0x6cd44420, 0x2f1a5: 0x6cd44620, 0x2f1a6: 0x6cd44820, 0x2f1a7: 0x6cd44a20, + 0x2f1a8: 0x6cd44c20, 0x2f1a9: 0x6cd44e20, 0x2f1aa: 0x6cd45020, 0x2f1ab: 0x6cd45220, + 0x2f1ac: 0x6cd45420, 0x2f1ad: 0x6cd45620, 0x2f1ae: 0x6cd45820, 0x2f1af: 0x6cd45a20, + 0x2f1b0: 0x6cd45c20, 0x2f1b1: 0x6cd45e20, 0x2f1b2: 0x6cd46020, 0x2f1b3: 0x6cd46220, + 0x2f1b4: 0x6cd46420, 0x2f1b5: 0x6cd46620, 0x2f1b6: 0x6cd46820, 0x2f1b7: 0x6cd46a20, + 0x2f1b8: 0x6d025220, 0x2f1b9: 0x6d025420, 0x2f1ba: 0x6d025620, 0x2f1bb: 0x6d025820, + 0x2f1bc: 0x6d025a20, 0x2f1bd: 0x6d025c20, 0x2f1be: 0x6d300e20, 0x2f1bf: 0x6d025e20, + // Block 0xbc7, offset 0x2f1c0 + 0x2f1c0: 0x6d026020, 0x2f1c1: 0x6d026220, 0x2f1c2: 0x6d026420, 0x2f1c3: 0x6d026620, + 0x2f1c4: 0x6d026820, 0x2f1c5: 0x6d026a20, 0x2f1c6: 0x6d026c20, 0x2f1c7: 0x6d026e20, + 0x2f1c8: 0x6d027020, 0x2f1c9: 0x6d027220, 0x2f1ca: 0x6d027420, 0x2f1cb: 0x6d027620, + 0x2f1cc: 0x6d027820, 0x2f1cd: 0x6d027a20, 0x2f1ce: 0x6d027c20, 0x2f1cf: 0x6d027e20, + 0x2f1d0: 0x6d028020, 0x2f1d1: 0x6d028220, 0x2f1d2: 0x6d028420, 0x2f1d3: 0x6d028620, + 0x2f1d4: 0x6d028820, 0x2f1d5: 0x6d028a20, 0x2f1d6: 0x6d028c20, 0x2f1d7: 0x6d028e20, + 0x2f1d8: 0x6d029020, 0x2f1d9: 0x6d029220, 0x2f1da: 0x6d029420, 0x2f1db: 0x6d029620, + 0x2f1dc: 0x6d029820, 0x2f1dd: 0x6d301020, 0x2f1de: 0x6d301220, 0x2f1df: 0x6d301420, + 0x2f1e0: 0x6d301620, 0x2f1e1: 0x6d301820, 0x2f1e2: 0x6d301a20, 0x2f1e3: 0x6d301c20, + 0x2f1e4: 0x6d301e20, 0x2f1e5: 0x6d302020, 0x2f1e6: 0x6d302220, 0x2f1e7: 0x6d302420, + 0x2f1e8: 0x6d302620, 0x2f1e9: 0x6d302820, 0x2f1ea: 0x6d302a20, 0x2f1eb: 0x6d302c20, + 0x2f1ec: 0x6d302e20, 0x2f1ed: 0x6d303020, 0x2f1ee: 0x6d303220, 0x2f1ef: 0x6d303420, + 0x2f1f0: 0x6d029a20, 0x2f1f1: 0x6d303620, 0x2f1f2: 0x6d303820, 0x2f1f3: 0x6d303a20, + 0x2f1f4: 0x6d303c20, 0x2f1f5: 0x6d303e20, 0x2f1f6: 0x6d304020, 0x2f1f7: 0x6d304220, + 0x2f1f8: 0x6d304420, 0x2f1f9: 0x6d304620, 0x2f1fa: 0x6d5d0620, 0x2f1fb: 0x6d5d0820, + 0x2f1fc: 0x6d5d0a20, 0x2f1fd: 0x6d5d0c20, 0x2f1fe: 0x6d5d0e20, 0x2f1ff: 0x6d5d1020, + // Block 0xbc8, offset 0x2f200 + 0x2f200: 0x6d5d1220, 0x2f201: 0x6d304820, 0x2f202: 0x6d5d1420, 0x2f203: 0x6d5d1620, + 0x2f204: 0x6d5d1820, 0x2f205: 0x6d5d1a20, 0x2f206: 0x6d5d1c20, 0x2f207: 0x6d5d1e20, + 0x2f208: 0x6d5d2020, 0x2f209: 0x6d5d2220, 0x2f20a: 0x6d5d2420, 0x2f20b: 0x6d5d2620, + 0x2f20c: 0x6d5d2820, 0x2f20d: 0x6d5d2a20, 0x2f20e: 0x6d5d2c20, 0x2f20f: 0x6d5d2e20, + 0x2f210: 0x6d5d3020, 0x2f211: 0x6d5d3220, 0x2f212: 0x6d5d3420, 0x2f213: 0x6d5d3620, + 0x2f214: 0x6d5d3820, 0x2f215: 0x6d5d3a20, 0x2f216: 0x6d876620, 0x2f217: 0x6d5d3c20, + 0x2f218: 0x6d5d3e20, 0x2f219: 0x6d5d4020, 0x2f21a: 0x6d877a20, 0x2f21b: 0x6d877c20, + 0x2f21c: 0x6d876820, 0x2f21d: 0x6d877e20, 0x2f21e: 0x6d878020, 0x2f21f: 0x6d878220, + 0x2f220: 0x6d878420, 0x2f221: 0x6d878620, 0x2f222: 0x6d878820, 0x2f223: 0x6d878a20, + 0x2f224: 0x6d5d4220, 0x2f225: 0x6d878c20, 0x2f226: 0x6d878e20, 0x2f227: 0x6d879020, + 0x2f228: 0x6d879220, 0x2f229: 0x6d879420, 0x2f22a: 0x6d879620, 0x2f22b: 0x6d879820, + 0x2f22c: 0x6d879a20, 0x2f22d: 0x6d879c20, 0x2f22e: 0x6d879e20, 0x2f22f: 0x6dac1c20, + 0x2f230: 0x6dac1e20, 0x2f231: 0x6dac2020, 0x2f232: 0x6dac2220, 0x2f233: 0x6dac2420, + 0x2f234: 0x6dac2620, 0x2f235: 0x6dac2820, 0x2f236: 0x6dac2a20, 0x2f237: 0x6dac2c20, + 0x2f238: 0x6dac2e20, 0x2f239: 0x6dac3020, 0x2f23a: 0x6dac3220, 0x2f23b: 0x6dac3420, + 0x2f23c: 0x6dac3620, 0x2f23d: 0x6dac3820, 0x2f23e: 0x6dac3a20, 0x2f23f: 0x6dac3c20, + // Block 0xbc9, offset 0x2f240 + 0x2f240: 0x6dac3e20, 0x2f241: 0x6dac4020, 0x2f242: 0x6dac4220, 0x2f243: 0x6dac4420, + 0x2f244: 0x6dac4620, 0x2f245: 0x6dac4820, 0x2f246: 0x6dcc5020, 0x2f247: 0x6dcc5220, + 0x2f248: 0x6dcc5420, 0x2f249: 0x6dcc5620, 0x2f24a: 0x6dcc5820, 0x2f24b: 0x6dcc5a20, + 0x2f24c: 0x6dcc5c20, 0x2f24d: 0x6dcc5e20, 0x2f24e: 0x6dcc6020, 0x2f24f: 0x6dcc6220, + 0x2f250: 0x6dcc6420, 0x2f251: 0x6dcc6620, 0x2f252: 0x6dcc6820, 0x2f253: 0x6dcc6a20, + 0x2f254: 0x6dcc6c20, 0x2f255: 0x6dcc6e20, 0x2f256: 0x6dcc7020, 0x2f257: 0x6de76c20, + 0x2f258: 0x6de76e20, 0x2f259: 0x6de77020, 0x2f25a: 0x6de77220, 0x2f25b: 0x6de77420, + 0x2f25c: 0x6de77620, 0x2f25d: 0x6de77820, 0x2f25e: 0x6de77a20, 0x2f25f: 0x6de77c20, + 0x2f260: 0x6de77e20, 0x2f261: 0x6de78020, 0x2f262: 0x6dfdf220, 0x2f263: 0x6dfdf420, + 0x2f264: 0x6dfdf620, 0x2f265: 0x6dfdf820, 0x2f266: 0x6dfdfa20, 0x2f267: 0x6dfdfc20, + 0x2f268: 0x6dfdfe20, 0x2f269: 0x6dfe0020, 0x2f26a: 0x6dfe0220, 0x2f26b: 0x6dfe0420, + 0x2f26c: 0x6dfe0620, 0x2f26d: 0x6e109420, 0x2f26e: 0x6e109620, 0x2f26f: 0x6e109820, + 0x2f270: 0x6e109a20, 0x2f271: 0x6e109c20, 0x2f272: 0x6e109e20, 0x2f273: 0x6e10a020, + 0x2f274: 0x6e10a220, 0x2f275: 0x6e1f3820, 0x2f276: 0x6e2a8820, 0x2f277: 0x6e2a8a20, + 0x2f278: 0x6e332620, 0x2f279: 0x6e394220, 0x2f27a: 0x6c0a3420, 0x2f27b: 0x6c04fe20, + 0x2f27c: 0x6c13f620, 0x2f27d: 0x6c254e20, 0x2f27e: 0x6c3cee20, 0x2f27f: 0x6c3cf020, + // Block 0xbca, offset 0x2f280 + 0x2f280: 0x6c3cf220, 0x2f281: 0x6c3cf420, 0x2f282: 0x6c3cf620, 0x2f283: 0x6c3cf820, + 0x2f284: 0x6c5ac620, 0x2f285: 0x6c5ac820, 0x2f286: 0x6c5aca20, 0x2f287: 0x6c5acc20, + 0x2f288: 0x6c5ace20, 0x2f289: 0x6c5ad020, 0x2f28a: 0x6c5ad220, 0x2f28b: 0x6c5ad420, + 0x2f28c: 0x6c5ad620, 0x2f28d: 0x6c5ad820, 0x2f28e: 0x6c5ada20, 0x2f28f: 0x6c7dc420, + 0x2f290: 0x6c7dc620, 0x2f291: 0x6c7dc820, 0x2f292: 0x6c7dca20, 0x2f293: 0x6c7dcc20, + 0x2f294: 0x6c7dce20, 0x2f295: 0x6c7dd020, 0x2f296: 0x6c7dd220, 0x2f297: 0x6c7dd420, + 0x2f298: 0x6c7dd620, 0x2f299: 0x6c7dd820, 0x2f29a: 0x6c7dda20, 0x2f29b: 0x6c7ddc20, + 0x2f29c: 0x6c7dde20, 0x2f29d: 0x6c7de020, 0x2f29e: 0x6c7de220, 0x2f29f: 0x6c7de420, + 0x2f2a0: 0x6c7de620, 0x2f2a1: 0x6ca68a20, 0x2f2a2: 0x6c7de820, 0x2f2a3: 0x6ca69220, + 0x2f2a4: 0x6ca69420, 0x2f2a5: 0x6ca69620, 0x2f2a6: 0x6cd4c020, 0x2f2a7: 0x6ca69820, + 0x2f2a8: 0x6ca69a20, 0x2f2a9: 0x6ca69c20, 0x2f2aa: 0x6ca69e20, 0x2f2ab: 0x6ca6a020, + 0x2f2ac: 0x6ca6a220, 0x2f2ad: 0x6ca6a420, 0x2f2ae: 0x6ca6a620, 0x2f2af: 0x6ca6a820, + 0x2f2b0: 0x6cd4c220, 0x2f2b1: 0x6cd4c420, 0x2f2b2: 0x6cd4c620, 0x2f2b3: 0x6cd4c820, + 0x2f2b4: 0x6cd4ca20, 0x2f2b5: 0x6cd4cc20, 0x2f2b6: 0x6cd4ce20, 0x2f2b7: 0x6cd4d020, + 0x2f2b8: 0x6cd4d220, 0x2f2b9: 0x6d031820, 0x2f2ba: 0x6d031a20, 0x2f2bb: 0x6d031c20, + 0x2f2bc: 0x6d031e20, 0x2f2bd: 0x6d032020, 0x2f2be: 0x6d032220, 0x2f2bf: 0x6d032420, + // Block 0xbcb, offset 0x2f2c0 + 0x2f2c0: 0x6d032620, 0x2f2c1: 0x6d032820, 0x2f2c2: 0x6d032a20, 0x2f2c3: 0x6d032c20, + 0x2f2c4: 0x6cd4d420, 0x2f2c5: 0x6d032e20, 0x2f2c6: 0x6d033020, 0x2f2c7: 0x6d30be20, + 0x2f2c8: 0x6d30c020, 0x2f2c9: 0x6d30c220, 0x2f2ca: 0x6d30c420, 0x2f2cb: 0x6d30c620, + 0x2f2cc: 0x6d30c820, 0x2f2cd: 0x6d30ca20, 0x2f2ce: 0x6d30cc20, 0x2f2cf: 0x6d30ce20, + 0x2f2d0: 0x6d30d020, 0x2f2d1: 0x6d30d220, 0x2f2d2: 0x6d30d420, 0x2f2d3: 0x6d30d620, + 0x2f2d4: 0x6d30d820, 0x2f2d5: 0x6d30da20, 0x2f2d6: 0x6d30dc20, 0x2f2d7: 0x6d30de20, + 0x2f2d8: 0x6d30e020, 0x2f2d9: 0x6d30e220, 0x2f2da: 0x6d5d8c20, 0x2f2db: 0x6d5d8e20, + 0x2f2dc: 0x6d5d9020, 0x2f2dd: 0x6d5d9220, 0x2f2de: 0x6d5d9420, 0x2f2df: 0x6d5d9620, + 0x2f2e0: 0x6d5d9820, 0x2f2e1: 0x6d5d9a20, 0x2f2e2: 0x6d5d9c20, 0x2f2e3: 0x6d5d9e20, + 0x2f2e4: 0x6d87fe20, 0x2f2e5: 0x6d880020, 0x2f2e6: 0x6d880220, 0x2f2e7: 0x6daca020, + 0x2f2e8: 0x6daca220, 0x2f2e9: 0x6d880420, 0x2f2ea: 0x6daca420, 0x2f2eb: 0x6daca620, + 0x2f2ec: 0x6dcca420, 0x2f2ed: 0x6dcca620, 0x2f2ee: 0x6dcca820, 0x2f2ef: 0x6dccaa20, + 0x2f2f0: 0x6de7ac20, 0x2f2f1: 0x6de7ae20, 0x2f2f2: 0x6dfe3a20, 0x2f2f3: 0x6e1f5620, + 0x2f2f4: 0x6e1f5820, 0x2f2f5: 0x6e2aa020, 0x2f2f6: 0x6e333020, 0x2f2f7: 0x6e333220, + 0x2f2f8: 0x6c0a3820, 0x2f2f9: 0x6c5b2a20, 0x2f2fa: 0x6c5b2c20, 0x2f2fb: 0x6ca6f420, + 0x2f2fc: 0x6cd52620, 0x2f2fd: 0x6d037620, 0x2f2fe: 0x6c0a3c20, 0x2f2ff: 0x6c256820, + // Block 0xbcc, offset 0x2f300 + 0x2f300: 0x6c256a20, 0x2f301: 0x6c256c20, 0x2f302: 0x6c256e20, 0x2f303: 0x6c257020, + 0x2f304: 0x6c3d3a20, 0x2f305: 0x6c3d3c20, 0x2f306: 0x6c3d3e20, 0x2f307: 0x6c3d4020, + 0x2f308: 0x6c3d4220, 0x2f309: 0x6c3d4420, 0x2f30a: 0x6c3d4620, 0x2f30b: 0x6c5b3e20, + 0x2f30c: 0x6c5b4020, 0x2f30d: 0x6c5b4220, 0x2f30e: 0x6c5b4420, 0x2f30f: 0x6c5b4620, + 0x2f310: 0x6c5b4820, 0x2f311: 0x6c5b4a20, 0x2f312: 0x6c5b4c20, 0x2f313: 0x6c5b4e20, + 0x2f314: 0x6c5b5020, 0x2f315: 0x6c5b5220, 0x2f316: 0x6c5b5420, 0x2f317: 0x6c5b5620, + 0x2f318: 0x6c7e3820, 0x2f319: 0x6c7e3a20, 0x2f31a: 0x6c7e3c20, 0x2f31b: 0x6c7e3e20, + 0x2f31c: 0x6c7e4020, 0x2f31d: 0x6c7e4220, 0x2f31e: 0x6c7e4420, 0x2f31f: 0x6c7e4620, + 0x2f320: 0x6c7e4820, 0x2f321: 0x6c7e4a20, 0x2f322: 0x6c7e4c20, 0x2f323: 0x6c7e4e20, + 0x2f324: 0x6c7e5020, 0x2f325: 0x6c7e5220, 0x2f326: 0x6c7e5420, 0x2f327: 0x6c7e5620, + 0x2f328: 0x6c7e5820, 0x2f329: 0x6c7e5a20, 0x2f32a: 0x6c7e5c20, 0x2f32b: 0x6c7e5e20, + 0x2f32c: 0x6c7e6020, 0x2f32d: 0x6c7e6220, 0x2f32e: 0x6c7e6420, 0x2f32f: 0x6c7e6620, + 0x2f330: 0x6c7e6820, 0x2f331: 0x6ca71a20, 0x2f332: 0x6ca71c20, 0x2f333: 0x6ca71e20, + 0x2f334: 0x6ca72020, 0x2f335: 0x6ca72220, 0x2f336: 0x6ca72420, 0x2f337: 0x6ca72620, + 0x2f338: 0x6ca72820, 0x2f339: 0x6ca72a20, 0x2f33a: 0x6ca72c20, 0x2f33b: 0x6ca72e20, + 0x2f33c: 0x6ca73020, 0x2f33d: 0x6ca73220, 0x2f33e: 0x6ca73420, 0x2f33f: 0x6cd54020, + // Block 0xbcd, offset 0x2f340 + 0x2f340: 0x6cd54220, 0x2f341: 0x6cd54420, 0x2f342: 0x6cd54620, 0x2f343: 0x6cd54820, + 0x2f344: 0x6cd54a20, 0x2f345: 0x6cd54c20, 0x2f346: 0x6ca73620, 0x2f347: 0x6cd54e20, + 0x2f348: 0x6cd55020, 0x2f349: 0x6cd55220, 0x2f34a: 0x6cd55420, 0x2f34b: 0x6cd55620, + 0x2f34c: 0x6cd55820, 0x2f34d: 0x6cd55a20, 0x2f34e: 0x6cd55c20, 0x2f34f: 0x6d039420, + 0x2f350: 0x6d039620, 0x2f351: 0x6d039820, 0x2f352: 0x6d039a20, 0x2f353: 0x6d039c20, + 0x2f354: 0x6d039e20, 0x2f355: 0x6d03a020, 0x2f356: 0x6d03a220, 0x2f357: 0x6d03a420, + 0x2f358: 0x6d03a620, 0x2f359: 0x6d03a820, 0x2f35a: 0x6d03aa20, 0x2f35b: 0x6d03ac20, + 0x2f35c: 0x6d03ae20, 0x2f35d: 0x6d03b020, 0x2f35e: 0x6d03b220, 0x2f35f: 0x6d03b420, + 0x2f360: 0x6d03b620, 0x2f361: 0x6d03b820, 0x2f362: 0x6d03ba20, 0x2f363: 0x6d03bc20, + 0x2f364: 0x6d03be20, 0x2f365: 0x6d03c020, 0x2f366: 0x6d313220, 0x2f367: 0x6d313420, + 0x2f368: 0x6d313620, 0x2f369: 0x6d313820, 0x2f36a: 0x6d313a20, 0x2f36b: 0x6d313c20, + 0x2f36c: 0x6d313e20, 0x2f36d: 0x6d314020, 0x2f36e: 0x6d314220, 0x2f36f: 0x6d314420, + 0x2f370: 0x6d314620, 0x2f371: 0x6d314820, 0x2f372: 0x6d314a20, 0x2f373: 0x6d314c20, + 0x2f374: 0x6d5dee20, 0x2f375: 0x6d31c220, 0x2f376: 0x6d5df020, 0x2f377: 0x6d5df220, + 0x2f378: 0x6d5df420, 0x2f379: 0x6d5df620, 0x2f37a: 0x6d5df820, 0x2f37b: 0x6d5dfa20, + 0x2f37c: 0x6d5dfc20, 0x2f37d: 0x6d5dfe20, 0x2f37e: 0x6d5e0020, 0x2f37f: 0x6d5e0220, + // Block 0xbce, offset 0x2f380 + 0x2f380: 0x6d5e0420, 0x2f381: 0x6d5e0620, 0x2f382: 0x6d5e0820, 0x2f383: 0x6d5e0a20, + 0x2f384: 0x6d884220, 0x2f385: 0x6d884420, 0x2f386: 0x6d884620, 0x2f387: 0x6d884820, + 0x2f388: 0x6d884a20, 0x2f389: 0x6dacd420, 0x2f38a: 0x6d314e20, 0x2f38b: 0x6d884c20, + 0x2f38c: 0x6d884e20, 0x2f38d: 0x6d885020, 0x2f38e: 0x6d885220, 0x2f38f: 0x6d885420, + 0x2f390: 0x6d885620, 0x2f391: 0x6d885820, 0x2f392: 0x6d885a20, 0x2f393: 0x6d88ba20, + 0x2f394: 0x6dacd620, 0x2f395: 0x6dacd820, 0x2f396: 0x6dacda20, 0x2f397: 0x6dacdc20, + 0x2f398: 0x6dacde20, 0x2f399: 0x6dace020, 0x2f39a: 0x6dace220, 0x2f39b: 0x6dace420, + 0x2f39c: 0x6dace620, 0x2f39d: 0x6dace820, 0x2f39e: 0x6dacea20, 0x2f39f: 0x6dccce20, + 0x2f3a0: 0x6dccd020, 0x2f3a1: 0x6dccd220, 0x2f3a2: 0x6dccd420, 0x2f3a3: 0x6dccd620, + 0x2f3a4: 0x6de7bc20, 0x2f3a5: 0x6de7be20, 0x2f3a6: 0x6de7c020, 0x2f3a7: 0x6de7c220, + 0x2f3a8: 0x6de7c420, 0x2f3a9: 0x6de7c620, 0x2f3aa: 0x6de7c820, 0x2f3ab: 0x6de7ca20, + 0x2f3ac: 0x6dfe4a20, 0x2f3ad: 0x6dfe4c20, 0x2f3ae: 0x6dfe4e20, 0x2f3af: 0x6dfe5020, + 0x2f3b0: 0x6e1f6a20, 0x2f3b1: 0x6e1f7420, 0x2f3b2: 0x6e333e20, 0x2f3b3: 0x6e333c20, + 0x2f3b4: 0x6c0a4020, 0x2f3b5: 0x6c140c20, 0x2f3b6: 0x6c257c20, 0x2f3b7: 0x6c257e20, + 0x2f3b8: 0x6c3d6a20, 0x2f3b9: 0x6c3d6c20, 0x2f3ba: 0x6c3d6e20, 0x2f3bb: 0x6c3d7020, + 0x2f3bc: 0x6c5b9a20, 0x2f3bd: 0x6c5b9c20, 0x2f3be: 0x6c5b9e20, 0x2f3bf: 0x6c5ba020, + // Block 0xbcf, offset 0x2f3c0 + 0x2f3c0: 0x6c5ba220, 0x2f3c1: 0x6c5ba420, 0x2f3c2: 0x6c5ba620, 0x2f3c3: 0x6c5ba820, + 0x2f3c4: 0x6c7eac20, 0x2f3c5: 0x6c7eae20, 0x2f3c6: 0x6c7eb020, 0x2f3c7: 0x6c7eb220, + 0x2f3c8: 0x6c7eb420, 0x2f3c9: 0x6c7eb620, 0x2f3ca: 0x6c7eb820, 0x2f3cb: 0x6c7eba20, + 0x2f3cc: 0x6c7ebc20, 0x2f3cd: 0x6c7ebe20, 0x2f3ce: 0x6c7ec020, 0x2f3cf: 0x6ca78620, + 0x2f3d0: 0x6ca78820, 0x2f3d1: 0x6ca78a20, 0x2f3d2: 0x6ca78c20, 0x2f3d3: 0x6ca78e20, + 0x2f3d4: 0x6ca79020, 0x2f3d5: 0x6ca79220, 0x2f3d6: 0x6cd5ac20, 0x2f3d7: 0x6cd5ae20, + 0x2f3d8: 0x6cd5b020, 0x2f3d9: 0x6cd5b220, 0x2f3da: 0x6ca7c420, 0x2f3db: 0x6cd5b420, + 0x2f3dc: 0x6cd5b620, 0x2f3dd: 0x6cd5b820, 0x2f3de: 0x6d043220, 0x2f3df: 0x6d043420, + 0x2f3e0: 0x6d043620, 0x2f3e1: 0x6d043820, 0x2f3e2: 0x6d043a20, 0x2f3e3: 0x6d043c20, + 0x2f3e4: 0x6d043e20, 0x2f3e5: 0x6d044020, 0x2f3e6: 0x6d044220, 0x2f3e7: 0x6d044420, + 0x2f3e8: 0x6d31c820, 0x2f3e9: 0x6d31ca20, 0x2f3ea: 0x6d31cc20, 0x2f3eb: 0x6d31ce20, + 0x2f3ec: 0x6d31d020, 0x2f3ed: 0x6d31d220, 0x2f3ee: 0x6d5e7020, 0x2f3ef: 0x6d5e7220, + 0x2f3f0: 0x6d5e7420, 0x2f3f1: 0x6d5e7620, 0x2f3f2: 0x6d5e7820, 0x2f3f3: 0x6d5e7a20, + 0x2f3f4: 0x6d5e7c20, 0x2f3f5: 0x6d88c820, 0x2f3f6: 0x6d88ca20, 0x2f3f7: 0x6d88cc20, + 0x2f3f8: 0x6d88ce20, 0x2f3f9: 0x6d88d020, 0x2f3fa: 0x6d88d220, 0x2f3fb: 0x6d88d420, + 0x2f3fc: 0x6d88d620, 0x2f3fd: 0x6d88d820, 0x2f3fe: 0x6dad5020, 0x2f3ff: 0x6dad5220, + // Block 0xbd0, offset 0x2f400 + 0x2f400: 0x6dad5420, 0x2f401: 0x6dad5620, 0x2f402: 0x6dad5820, 0x2f403: 0x6e10de20, + 0x2f404: 0x6dcd2020, 0x2f405: 0x6dcd2220, 0x2f406: 0x6de7f620, 0x2f407: 0x6dfe8620, + 0x2f408: 0x6e10e020, 0x2f409: 0x6e10e220, 0x2f40a: 0x6e1f7820, 0x2f40b: 0x6c0a4420, + 0x2f40c: 0x6c258a20, 0x2f40d: 0x6c258c20, 0x2f40e: 0x6c3d9020, 0x2f40f: 0x6c3d9220, + 0x2f410: 0x6c5bd620, 0x2f411: 0x6c5bd820, 0x2f412: 0x6c5bda20, 0x2f413: 0x6c5bdc20, + 0x2f414: 0x6c5bde20, 0x2f415: 0x6c5be020, 0x2f416: 0x6c5be220, 0x2f417: 0x6c5be420, + 0x2f418: 0x6c7efe20, 0x2f419: 0x6c7f0020, 0x2f41a: 0x6c7f0220, 0x2f41b: 0x6c7f0420, + 0x2f41c: 0x6c7f0620, 0x2f41d: 0x6c7f0820, 0x2f41e: 0x6c7f0a20, 0x2f41f: 0x6cb6ae20, + 0x2f420: 0x6cb6b020, 0x2f421: 0x6ca7c820, 0x2f422: 0x6cd60e20, 0x2f423: 0x6cd61020, + 0x2f424: 0x6cd61220, 0x2f425: 0x6cd61420, 0x2f426: 0x6cd61620, 0x2f427: 0x6cd61820, + 0x2f428: 0x6d048e20, 0x2f429: 0x6d049020, 0x2f42a: 0x6d049220, 0x2f42b: 0x6d049420, + 0x2f42c: 0x6d320820, 0x2f42d: 0x6d320a20, 0x2f42e: 0x6d322e20, 0x2f42f: 0x6d320c20, + 0x2f430: 0x6d320e20, 0x2f431: 0x6d892220, 0x2f432: 0x6dad8a20, 0x2f433: 0x6dad8c20, + 0x2f434: 0x6dad8e20, 0x2f435: 0x6dcd3a20, 0x2f436: 0x6dfe9a20, 0x2f437: 0x6dfe9c20, + 0x2f438: 0x6e1f7e20, 0x2f439: 0x6c141020, 0x2f43a: 0x6c3d9a20, 0x2f43b: 0x6c3d9c20, + 0x2f43c: 0x6c5bf820, 0x2f43d: 0x6c5bfa20, 0x2f43e: 0x6c5bfc20, 0x2f43f: 0x6c5bfe20, + // Block 0xbd1, offset 0x2f440 + 0x2f440: 0x6c5c0020, 0x2f441: 0x6c5c0220, 0x2f442: 0x6c5c0420, 0x2f443: 0x6c5c0620, + 0x2f444: 0x6c7fa820, 0x2f445: 0x6c7f4020, 0x2f446: 0x6c7f4220, 0x2f447: 0x6c7f4420, + 0x2f448: 0x6c7f4620, 0x2f449: 0x6c7f4820, 0x2f44a: 0x6c7f4a20, 0x2f44b: 0x6c7f4c20, + 0x2f44c: 0x6c7f4e20, 0x2f44d: 0x6c7f5020, 0x2f44e: 0x6c7f5220, 0x2f44f: 0x6c7f5420, + 0x2f450: 0x6c7f5620, 0x2f451: 0x6c7f5820, 0x2f452: 0x6c7f5a20, 0x2f453: 0x6c7f5c20, + 0x2f454: 0x6c7f5e20, 0x2f455: 0x6c7f6020, 0x2f456: 0x6ca7fa20, 0x2f457: 0x6ca7fc20, + 0x2f458: 0x6ca7fe20, 0x2f459: 0x6ca80020, 0x2f45a: 0x6ca80220, 0x2f45b: 0x6ca80420, + 0x2f45c: 0x6ca80620, 0x2f45d: 0x6ca80820, 0x2f45e: 0x6ca80a20, 0x2f45f: 0x6ca80c20, + 0x2f460: 0x6ca80e20, 0x2f461: 0x6ca81020, 0x2f462: 0x6ca81220, 0x2f463: 0x6ca81420, + 0x2f464: 0x6ca81620, 0x2f465: 0x6ca81820, 0x2f466: 0x6ca81a20, 0x2f467: 0x6ca81c20, + 0x2f468: 0x6ca81e20, 0x2f469: 0x6ca82020, 0x2f46a: 0x6ca82220, 0x2f46b: 0x6ca82420, + 0x2f46c: 0x6ca82620, 0x2f46d: 0x6ca82820, 0x2f46e: 0x6ca82a20, 0x2f46f: 0x6ca82c20, + 0x2f470: 0x6ca82e20, 0x2f471: 0x6ca83020, 0x2f472: 0x6ca83220, 0x2f473: 0x6ca83420, + 0x2f474: 0x6ca83620, 0x2f475: 0x6ca83820, 0x2f476: 0x6ca83a20, 0x2f477: 0x6ca83c20, + 0x2f478: 0x6ca83e20, 0x2f479: 0x6ca84020, 0x2f47a: 0x6ca84220, 0x2f47b: 0x6ca84420, + 0x2f47c: 0x6ca84620, 0x2f47d: 0x6ca84820, 0x2f47e: 0x6ca84a20, 0x2f47f: 0x6cd65220, + // Block 0xbd2, offset 0x2f480 + 0x2f480: 0x6cd65420, 0x2f481: 0x6cd65620, 0x2f482: 0x6cd65820, 0x2f483: 0x6cd65a20, + 0x2f484: 0x6cd65c20, 0x2f485: 0x6cd65e20, 0x2f486: 0x6cd66020, 0x2f487: 0x6cd66220, + 0x2f488: 0x6cd66420, 0x2f489: 0x6cd66620, 0x2f48a: 0x6cd66820, 0x2f48b: 0x6cd66a20, + 0x2f48c: 0x6cd66c20, 0x2f48d: 0x6cd66e20, 0x2f48e: 0x6cd67020, 0x2f48f: 0x6cd67220, + 0x2f490: 0x6cd67420, 0x2f491: 0x6cd67620, 0x2f492: 0x6cd67820, 0x2f493: 0x6cd67a20, + 0x2f494: 0x6cd67c20, 0x2f495: 0x6cd67e20, 0x2f496: 0x6cd68020, 0x2f497: 0x6cd68220, + 0x2f498: 0x6cd68420, 0x2f499: 0x6cd68620, 0x2f49a: 0x6cd68820, 0x2f49b: 0x6cd68a20, + 0x2f49c: 0x6cd68c20, 0x2f49d: 0x6cd68e20, 0x2f49e: 0x6d04ce20, 0x2f49f: 0x6d04d020, + 0x2f4a0: 0x6d04d220, 0x2f4a1: 0x6d04d420, 0x2f4a2: 0x6d04d620, 0x2f4a3: 0x6d04d820, + 0x2f4a4: 0x6d04da20, 0x2f4a5: 0x6d04dc20, 0x2f4a6: 0x6d04de20, 0x2f4a7: 0x6d04e020, + 0x2f4a8: 0x6d04e220, 0x2f4a9: 0x6d04e420, 0x2f4aa: 0x6d04e620, 0x2f4ab: 0x6d04e820, + 0x2f4ac: 0x6cd6de20, 0x2f4ad: 0x6d04ea20, 0x2f4ae: 0x6d04ec20, 0x2f4af: 0x6d04ee20, + 0x2f4b0: 0x6d04f020, 0x2f4b1: 0x6d04f220, 0x2f4b2: 0x6d04f420, 0x2f4b3: 0x6d04f620, + 0x2f4b4: 0x6d04f820, 0x2f4b5: 0x6d323020, 0x2f4b6: 0x6d04fa20, 0x2f4b7: 0x6d04fc20, + 0x2f4b8: 0x6d04fe20, 0x2f4b9: 0x6d050020, 0x2f4ba: 0x6d050220, 0x2f4bb: 0x6d050420, + 0x2f4bc: 0x6d050620, 0x2f4bd: 0x6d050820, 0x2f4be: 0x6d050a20, 0x2f4bf: 0x6d050c20, + // Block 0xbd3, offset 0x2f4c0 + 0x2f4c0: 0x6d050e20, 0x2f4c1: 0x6d324c20, 0x2f4c2: 0x6d324e20, 0x2f4c3: 0x6d325020, + 0x2f4c4: 0x6d325220, 0x2f4c5: 0x6d325420, 0x2f4c6: 0x6d325620, 0x2f4c7: 0x6d325820, + 0x2f4c8: 0x6d325a20, 0x2f4c9: 0x6d325c20, 0x2f4ca: 0x6d325e20, 0x2f4cb: 0x6d326020, + 0x2f4cc: 0x6d326220, 0x2f4cd: 0x6d326420, 0x2f4ce: 0x6d326620, 0x2f4cf: 0x6d326820, + 0x2f4d0: 0x6d326a20, 0x2f4d1: 0x6d326c20, 0x2f4d2: 0x6d326e20, 0x2f4d3: 0x6d327020, + 0x2f4d4: 0x6d327220, 0x2f4d5: 0x6d327420, 0x2f4d6: 0x6d327620, 0x2f4d7: 0x6d327820, + 0x2f4d8: 0x6d327a20, 0x2f4d9: 0x6d327c20, 0x2f4da: 0x6d327e20, 0x2f4db: 0x6d328020, + 0x2f4dc: 0x6d328220, 0x2f4dd: 0x6d328420, 0x2f4de: 0x6d328620, 0x2f4df: 0x6d328820, + 0x2f4e0: 0x6d328a20, 0x2f4e1: 0x6d328c20, 0x2f4e2: 0x6d328e20, 0x2f4e3: 0x6d329020, + 0x2f4e4: 0x6d329220, 0x2f4e5: 0x6d329420, 0x2f4e6: 0x6d329620, 0x2f4e7: 0x6d329820, + 0x2f4e8: 0x6d329a20, 0x2f4e9: 0x6d329c20, 0x2f4ea: 0x6d329e20, 0x2f4eb: 0x6d32a020, + 0x2f4ec: 0x6d5f0420, 0x2f4ed: 0x6d5f0620, 0x2f4ee: 0x6d5f0820, 0x2f4ef: 0x6d5f0a20, + 0x2f4f0: 0x6d5f0c20, 0x2f4f1: 0x6d5f0e20, 0x2f4f2: 0x6d5f1020, 0x2f4f3: 0x6d5f1220, + 0x2f4f4: 0x6d5f1420, 0x2f4f5: 0x6d5f1620, 0x2f4f6: 0x6d5f1820, 0x2f4f7: 0x6d5f1a20, + 0x2f4f8: 0x6d333620, 0x2f4f9: 0x6d5f1c20, 0x2f4fa: 0x6d5f1e20, 0x2f4fb: 0x6d5f2020, + 0x2f4fc: 0x6d5f2220, 0x2f4fd: 0x6d5f2420, 0x2f4fe: 0x6d5f2620, 0x2f4ff: 0x6d5f2820, + // Block 0xbd4, offset 0x2f500 + 0x2f500: 0x6d051020, 0x2f501: 0x6d5f2a20, 0x2f502: 0x6d5f2c20, 0x2f503: 0x6d5f2e20, + 0x2f504: 0x6d5f3020, 0x2f505: 0x6d5f3220, 0x2f506: 0x6d5f3420, 0x2f507: 0x6d5f3620, + 0x2f508: 0x6d5f3820, 0x2f509: 0x6d894a20, 0x2f50a: 0x6d5f3a20, 0x2f50b: 0x6d5f3c20, + 0x2f50c: 0x6d5f3e20, 0x2f50d: 0x6d5f4020, 0x2f50e: 0x6d5f4220, 0x2f50f: 0x6d5f4420, + 0x2f510: 0x6d5f4620, 0x2f511: 0x6d5f4820, 0x2f512: 0x6d5f4a20, 0x2f513: 0x6d5f4c20, + 0x2f514: 0x6d894c20, 0x2f515: 0x6d894e20, 0x2f516: 0x6d895020, 0x2f517: 0x6d895220, + 0x2f518: 0x6d895420, 0x2f519: 0x6d895620, 0x2f51a: 0x6d895820, 0x2f51b: 0x6d895a20, + 0x2f51c: 0x6d895c20, 0x2f51d: 0x6d895e20, 0x2f51e: 0x6d896020, 0x2f51f: 0x6d896220, + 0x2f520: 0x6d896420, 0x2f521: 0x6d896620, 0x2f522: 0x6d896820, 0x2f523: 0x6d896a20, + 0x2f524: 0x6d896c20, 0x2f525: 0x6d896e20, 0x2f526: 0x6d897020, 0x2f527: 0x6d897220, + 0x2f528: 0x6d897420, 0x2f529: 0x6d897620, 0x2f52a: 0x6d897820, 0x2f52b: 0x6d897a20, + 0x2f52c: 0x6d897c20, 0x2f52d: 0x6d897e20, 0x2f52e: 0x6d898020, 0x2f52f: 0x6d898220, + 0x2f530: 0x6dadc820, 0x2f531: 0x6dadca20, 0x2f532: 0x6dadcc20, 0x2f533: 0x6dadce20, + 0x2f534: 0x6dadd020, 0x2f535: 0x6dadd220, 0x2f536: 0x6dadd420, 0x2f537: 0x6dadd620, + 0x2f538: 0x6dadd820, 0x2f539: 0x6d8a5020, 0x2f53a: 0x6dadda20, 0x2f53b: 0x6daddc20, + 0x2f53c: 0x6dadde20, 0x2f53d: 0x6dade020, 0x2f53e: 0x6dade220, 0x2f53f: 0x6dade420, + // Block 0xbd5, offset 0x2f540 + 0x2f540: 0x6dade620, 0x2f541: 0x6dade820, 0x2f542: 0x6dadea20, 0x2f543: 0x6dadec20, + 0x2f544: 0x6dadee20, 0x2f545: 0x6dadf020, 0x2f546: 0x6dadf220, 0x2f547: 0x6dadf420, + 0x2f548: 0x6dadf620, 0x2f549: 0x6dadf820, 0x2f54a: 0x6dadfa20, 0x2f54b: 0x6dadfc20, + 0x2f54c: 0x6dadfe20, 0x2f54d: 0x6dae0020, 0x2f54e: 0x6dae0220, 0x2f54f: 0x6dae0420, + 0x2f550: 0x6dae0620, 0x2f551: 0x6d898420, 0x2f552: 0x6dae0820, 0x2f553: 0x6dae0a20, + 0x2f554: 0x6dae0c20, 0x2f555: 0x6dada620, 0x2f556: 0x6dae0e20, 0x2f557: 0x6dae1020, + 0x2f558: 0x6daec420, 0x2f559: 0x6dcd7220, 0x2f55a: 0x6dcd7420, 0x2f55b: 0x6dcd7620, + 0x2f55c: 0x6dcd7820, 0x2f55d: 0x6dcd7a20, 0x2f55e: 0x6dcd7c20, 0x2f55f: 0x6dcd7e20, + 0x2f560: 0x6dcd8020, 0x2f561: 0x6dcd8220, 0x2f562: 0x6dcd8420, 0x2f563: 0x6dcd8620, + 0x2f564: 0x6dcd8820, 0x2f565: 0x6dcd8a20, 0x2f566: 0x6dcd8c20, 0x2f567: 0x6dcd8e20, + 0x2f568: 0x6dcd9020, 0x2f569: 0x6dcd9220, 0x2f56a: 0x6dcd9420, 0x2f56b: 0x6dcd9620, + 0x2f56c: 0x6de81220, 0x2f56d: 0x6dcd9820, 0x2f56e: 0x6dcd9a20, 0x2f56f: 0x6dcd9c20, + 0x2f570: 0x6dcd9e20, 0x2f571: 0x6dcda020, 0x2f572: 0x6dcda220, 0x2f573: 0x6de82820, + 0x2f574: 0x6de82a20, 0x2f575: 0x6de82c20, 0x2f576: 0x6de82e20, 0x2f577: 0x6de83020, + 0x2f578: 0x6de83220, 0x2f579: 0x6de83420, 0x2f57a: 0x6de83620, 0x2f57b: 0x6de83820, + 0x2f57c: 0x6de83a20, 0x2f57d: 0x6de83c20, 0x2f57e: 0x6de83e20, 0x2f57f: 0x6de84020, + // Block 0xbd6, offset 0x2f580 + 0x2f580: 0x6de84220, 0x2f581: 0x6de84420, 0x2f582: 0x6de84620, 0x2f583: 0x6dfeac20, + 0x2f584: 0x6dfeae20, 0x2f585: 0x6dfeb020, 0x2f586: 0x6dfeb220, 0x2f587: 0x6dfeb420, + 0x2f588: 0x6dfeb620, 0x2f589: 0x6dfeb820, 0x2f58a: 0x6dfeba20, 0x2f58b: 0x6dfebc20, + 0x2f58c: 0x6dfebe20, 0x2f58d: 0x6dfec020, 0x2f58e: 0x6dfec220, 0x2f58f: 0x6dfec420, + 0x2f590: 0x6e111820, 0x2f591: 0x6e111a20, 0x2f592: 0x6e111c20, 0x2f593: 0x6e111e20, + 0x2f594: 0x6e112020, 0x2f595: 0x6dfec620, 0x2f596: 0x6e110620, 0x2f597: 0x6e1f8e20, + 0x2f598: 0x6e1f9020, 0x2f599: 0x6e1f9220, 0x2f59a: 0x6e1f9420, 0x2f59b: 0x6e1f9620, + 0x2f59c: 0x6e1f9820, 0x2f59d: 0x6e1f9a20, 0x2f59e: 0x6e2ac420, 0x2f59f: 0x6e1f9c20, + 0x2f5a0: 0x6e1f9e20, 0x2f5a1: 0x6e1fa020, 0x2f5a2: 0x6e2acc20, 0x2f5a3: 0x6e2ace20, + 0x2f5a4: 0x6e2ad020, 0x2f5a5: 0x6e2ad220, 0x2f5a6: 0x6e2ad420, 0x2f5a7: 0x6e2ad620, + 0x2f5a8: 0x6e2ad820, 0x2f5a9: 0x6e396020, 0x2f5aa: 0x6e335420, 0x2f5ab: 0x6e396220, + 0x2f5ac: 0x6e396420, 0x2f5ad: 0x6e396620, 0x2f5ae: 0x6e396820, 0x2f5af: 0x6e3dae20, + 0x2f5b0: 0x6e3db020, 0x2f5b1: 0x6e453420, 0x2f5b2: 0x6e463620, 0x2f5b3: 0x6c141420, + 0x2f5b4: 0x6c3da820, 0x2f5b5: 0x6c3daa20, 0x2f5b6: 0x6c3dac20, 0x2f5b7: 0x6c5c3220, + 0x2f5b8: 0x6c5c3420, 0x2f5b9: 0x6c5c3620, 0x2f5ba: 0x6c5c3820, 0x2f5bb: 0x6c5c3a20, + 0x2f5bc: 0x6c5c3c20, 0x2f5bd: 0x6c5c3e20, 0x2f5be: 0x6c5c4020, 0x2f5bf: 0x6c5c4220, + // Block 0xbd7, offset 0x2f5c0 + 0x2f5c0: 0x6c5c4420, 0x2f5c1: 0x6c5c4620, 0x2f5c2: 0x6c5c4820, 0x2f5c3: 0x6c7fae20, + 0x2f5c4: 0x6c7fb020, 0x2f5c5: 0x6c7fb220, 0x2f5c6: 0x6c7fb420, 0x2f5c7: 0x6c7fb620, + 0x2f5c8: 0x6c7fb820, 0x2f5c9: 0x6c7fba20, 0x2f5ca: 0x6c7fbc20, 0x2f5cb: 0x6c7fbe20, + 0x2f5cc: 0x6c7fc020, 0x2f5cd: 0x6c7fc220, 0x2f5ce: 0x6c7fc420, 0x2f5cf: 0x6c7fc620, + 0x2f5d0: 0x6c7fc820, 0x2f5d1: 0x6c7fca20, 0x2f5d2: 0x6ca89c20, 0x2f5d3: 0x6ca89e20, + 0x2f5d4: 0x6ca8a020, 0x2f5d5: 0x6ca8a220, 0x2f5d6: 0x6ca8a420, 0x2f5d7: 0x6ca8a620, + 0x2f5d8: 0x6ca8a820, 0x2f5d9: 0x6ca8aa20, 0x2f5da: 0x6ca8ac20, 0x2f5db: 0x6ca8ae20, + 0x2f5dc: 0x6ca8b020, 0x2f5dd: 0x6ca8b220, 0x2f5de: 0x6cd6ec20, 0x2f5df: 0x6cd6ee20, + 0x2f5e0: 0x6cd6f020, 0x2f5e1: 0x6cd6f220, 0x2f5e2: 0x6cd6f420, 0x2f5e3: 0x6ca8b420, + 0x2f5e4: 0x6cd6f620, 0x2f5e5: 0x6cd6f820, 0x2f5e6: 0x6cd6fa20, 0x2f5e7: 0x6cd6fc20, + 0x2f5e8: 0x6cd6fe20, 0x2f5e9: 0x6cd70020, 0x2f5ea: 0x6cd70220, 0x2f5eb: 0x6cd70420, + 0x2f5ec: 0x6cd70620, 0x2f5ed: 0x6cd70820, 0x2f5ee: 0x6d05a420, 0x2f5ef: 0x6d05a620, + 0x2f5f0: 0x6d05a820, 0x2f5f1: 0x6d05aa20, 0x2f5f2: 0x6d05ac20, 0x2f5f3: 0x6d05ae20, + 0x2f5f4: 0x6d05b020, 0x2f5f5: 0x6d05b220, 0x2f5f6: 0x6d334420, 0x2f5f7: 0x6d334620, + 0x2f5f8: 0x6d334820, 0x2f5f9: 0x6d334a20, 0x2f5fa: 0x6d334c20, 0x2f5fb: 0x6d334e20, + 0x2f5fc: 0x6d335020, 0x2f5fd: 0x6d335220, 0x2f5fe: 0x6d335420, 0x2f5ff: 0x6d335620, + // Block 0xbd8, offset 0x2f600 + 0x2f600: 0x6d05b420, 0x2f601: 0x6d335820, 0x2f602: 0x6d5ffc20, 0x2f603: 0x6d5ffe20, + 0x2f604: 0x6d600020, 0x2f605: 0x6d600220, 0x2f606: 0x6d600420, 0x2f607: 0x6d600620, + 0x2f608: 0x6d600820, 0x2f609: 0x6d600a20, 0x2f60a: 0x6d600c20, 0x2f60b: 0x6d600e20, + 0x2f60c: 0x6d601020, 0x2f60d: 0x6d601220, 0x2f60e: 0x6d601420, 0x2f60f: 0x6d8a5820, + 0x2f610: 0x6d8a5a20, 0x2f611: 0x6d8a5c20, 0x2f612: 0x6d8a5e20, 0x2f613: 0x6d8a6020, + 0x2f614: 0x6d8a6220, 0x2f615: 0x6d8a6420, 0x2f616: 0x6d8a6620, 0x2f617: 0x6d8a6820, + 0x2f618: 0x6d8a6a20, 0x2f619: 0x6daed420, 0x2f61a: 0x6daed620, 0x2f61b: 0x6daed820, + 0x2f61c: 0x6daeda20, 0x2f61d: 0x6daedc20, 0x2f61e: 0x6daede20, 0x2f61f: 0x6daee020, + 0x2f620: 0x6daee220, 0x2f621: 0x6daee420, 0x2f622: 0x6daee620, 0x2f623: 0x6dce7220, + 0x2f624: 0x6dce7420, 0x2f625: 0x6dce7620, 0x2f626: 0x6dce7820, 0x2f627: 0x6dce7a20, + 0x2f628: 0x6daee820, 0x2f629: 0x6de8c820, 0x2f62a: 0x6de8ca20, 0x2f62b: 0x6de8cc20, + 0x2f62c: 0x6de8ce20, 0x2f62d: 0x6de8d020, 0x2f62e: 0x6dff2020, 0x2f62f: 0x6dff2220, + 0x2f630: 0x6dff2420, 0x2f631: 0x6e1fe420, 0x2f632: 0x6e118c20, 0x2f633: 0x6e3dc220, + 0x2f634: 0x6e1fe620, 0x2f635: 0x6e2b0820, 0x2f636: 0x6e398820, 0x2f637: 0x6e409e20, + 0x2f638: 0x6c141620, 0x2f639: 0x6c141820, 0x2f63a: 0x6c259a20, 0x2f63b: 0x6c259c20, + 0x2f63c: 0x6c3dbc20, 0x2f63d: 0x6c3dbe20, 0x2f63e: 0x6c3dc020, 0x2f63f: 0x6c3dc220, + // Block 0xbd9, offset 0x2f640 + 0x2f640: 0x6c5c6620, 0x2f641: 0x6c5c6820, 0x2f642: 0x6c5c6a20, 0x2f643: 0x6c5c6c20, + 0x2f644: 0x6c5c6e20, 0x2f645: 0x6c5c7020, 0x2f646: 0x6c5c7220, 0x2f647: 0x6c5c7420, + 0x2f648: 0x6c5c7620, 0x2f649: 0x6c5c7820, 0x2f64a: 0x6c800a20, 0x2f64b: 0x6c800c20, + 0x2f64c: 0x6c800e20, 0x2f64d: 0x6c801020, 0x2f64e: 0x6c801220, 0x2f64f: 0x6c801420, + 0x2f650: 0x6c801620, 0x2f651: 0x6c801820, 0x2f652: 0x6c801a20, 0x2f653: 0x6c801c20, + 0x2f654: 0x6c801e20, 0x2f655: 0x6c802020, 0x2f656: 0x6c802220, 0x2f657: 0x6c802420, + 0x2f658: 0x6c802620, 0x2f659: 0x6c802820, 0x2f65a: 0x6c802a20, 0x2f65b: 0x6c802c20, + 0x2f65c: 0x6c802e20, 0x2f65d: 0x6c803020, 0x2f65e: 0x6c803220, 0x2f65f: 0x6c803420, + 0x2f660: 0x6c803620, 0x2f661: 0x6c803820, 0x2f662: 0x6c803a20, 0x2f663: 0x6c803c20, + 0x2f664: 0x6c803e20, 0x2f665: 0x6c804020, 0x2f666: 0x6c804220, 0x2f667: 0x6c804420, + 0x2f668: 0x6ca90c20, 0x2f669: 0x6ca90e20, 0x2f66a: 0x6cd74220, 0x2f66b: 0x6cd74420, + 0x2f66c: 0x6ca91020, 0x2f66d: 0x6ca91220, 0x2f66e: 0x6ca91420, 0x2f66f: 0x6ca91620, + 0x2f670: 0x6ca91820, 0x2f671: 0x6ca91a20, 0x2f672: 0x6ca91c20, 0x2f673: 0x6ca91e20, + 0x2f674: 0x6ca92020, 0x2f675: 0x6ca92220, 0x2f676: 0x6ca92420, 0x2f677: 0x6ca92620, + 0x2f678: 0x6ca92820, 0x2f679: 0x6ca92a20, 0x2f67a: 0x6ca92c20, 0x2f67b: 0x6ca92e20, + 0x2f67c: 0x6ca93020, 0x2f67d: 0x6ca93220, 0x2f67e: 0x6ca93420, 0x2f67f: 0x6ca93620, + // Block 0xbda, offset 0x2f680 + 0x2f680: 0x6ca93820, 0x2f681: 0x6ca93a20, 0x2f682: 0x6ca93c20, 0x2f683: 0x6ca93e20, + 0x2f684: 0x6ca94020, 0x2f685: 0x6ca94220, 0x2f686: 0x6ca94420, 0x2f687: 0x6ca94620, + 0x2f688: 0x6ca94820, 0x2f689: 0x6ca94a20, 0x2f68a: 0x6ca94c20, 0x2f68b: 0x6ca94e20, + 0x2f68c: 0x6ca95020, 0x2f68d: 0x6cd75a20, 0x2f68e: 0x6cd75c20, 0x2f68f: 0x6cd75e20, + 0x2f690: 0x6cd76020, 0x2f691: 0x6cd76220, 0x2f692: 0x6cd76420, 0x2f693: 0x6cd76620, + 0x2f694: 0x6cd76820, 0x2f695: 0x6cd76a20, 0x2f696: 0x6cd76c20, 0x2f697: 0x6cd76e20, + 0x2f698: 0x6cd77020, 0x2f699: 0x6cd77220, 0x2f69a: 0x6cd77420, 0x2f69b: 0x6d061420, + 0x2f69c: 0x6cd77620, 0x2f69d: 0x6cd77820, 0x2f69e: 0x6cd77a20, 0x2f69f: 0x6cd77c20, + 0x2f6a0: 0x6cd77e20, 0x2f6a1: 0x6cd78020, 0x2f6a2: 0x6cd78220, 0x2f6a3: 0x6cd78420, + 0x2f6a4: 0x6cd78620, 0x2f6a5: 0x6cd78820, 0x2f6a6: 0x6cd78a20, 0x2f6a7: 0x6cd78c20, + 0x2f6a8: 0x6cd78e20, 0x2f6a9: 0x6cd79020, 0x2f6aa: 0x6cd79220, 0x2f6ab: 0x6cd79420, + 0x2f6ac: 0x6cd79620, 0x2f6ad: 0x6cd79820, 0x2f6ae: 0x6cd79a20, 0x2f6af: 0x6cd79c20, + 0x2f6b0: 0x6cd79e20, 0x2f6b1: 0x6cd7a020, 0x2f6b2: 0x6cd7a220, 0x2f6b3: 0x6cd7a420, + 0x2f6b4: 0x6cd7a620, 0x2f6b5: 0x6cd7a820, 0x2f6b6: 0x6cd7aa20, 0x2f6b7: 0x6cd7ac20, + 0x2f6b8: 0x6d061620, 0x2f6b9: 0x6d061820, 0x2f6ba: 0x6d061a20, 0x2f6bb: 0x6d061c20, + 0x2f6bc: 0x6d061e20, 0x2f6bd: 0x6d062020, 0x2f6be: 0x6cd80c20, 0x2f6bf: 0x6d062220, + // Block 0xbdb, offset 0x2f6c0 + 0x2f6c0: 0x6d062420, 0x2f6c1: 0x6d062620, 0x2f6c2: 0x6d062820, 0x2f6c3: 0x6d062a20, + 0x2f6c4: 0x6d062c20, 0x2f6c5: 0x6d062e20, 0x2f6c6: 0x6d063020, 0x2f6c7: 0x6d063220, + 0x2f6c8: 0x6d063420, 0x2f6c9: 0x6d063620, 0x2f6ca: 0x6d063820, 0x2f6cb: 0x6d063a20, + 0x2f6cc: 0x6d063c20, 0x2f6cd: 0x6d063e20, 0x2f6ce: 0x6d064020, 0x2f6cf: 0x6d064220, + 0x2f6d0: 0x6d064420, 0x2f6d1: 0x6d064620, 0x2f6d2: 0x6d064820, 0x2f6d3: 0x6d064a20, + 0x2f6d4: 0x6d064c20, 0x2f6d5: 0x6d064e20, 0x2f6d6: 0x6d33b420, 0x2f6d7: 0x6d065020, + 0x2f6d8: 0x6d065220, 0x2f6d9: 0x6d065420, 0x2f6da: 0x6d065620, 0x2f6db: 0x6d065820, + 0x2f6dc: 0x6d33d020, 0x2f6dd: 0x6d33d220, 0x2f6de: 0x6d33d420, 0x2f6df: 0x6d33d620, + 0x2f6e0: 0x6d33d820, 0x2f6e1: 0x6d33da20, 0x2f6e2: 0x6d33dc20, 0x2f6e3: 0x6d33de20, + 0x2f6e4: 0x6d33e020, 0x2f6e5: 0x6d33e220, 0x2f6e6: 0x6d33e420, 0x2f6e7: 0x6d33e620, + 0x2f6e8: 0x6d33e820, 0x2f6e9: 0x6d33ea20, 0x2f6ea: 0x6d33ec20, 0x2f6eb: 0x6d33ee20, + 0x2f6ec: 0x6d33f020, 0x2f6ed: 0x6d33f220, 0x2f6ee: 0x6d33f420, 0x2f6ef: 0x6d33f620, + 0x2f6f0: 0x6d33f820, 0x2f6f1: 0x6d33fa20, 0x2f6f2: 0x6d33fc20, 0x2f6f3: 0x6d33fe20, + 0x2f6f4: 0x6d340020, 0x2f6f5: 0x6d340220, 0x2f6f6: 0x6d340420, 0x2f6f7: 0x6d340620, + 0x2f6f8: 0x6d340820, 0x2f6f9: 0x6d340a20, 0x2f6fa: 0x6d340c20, 0x2f6fb: 0x6d340e20, + 0x2f6fc: 0x6d341020, 0x2f6fd: 0x6d341220, 0x2f6fe: 0x6d341420, 0x2f6ff: 0x6d341620, + // Block 0xbdc, offset 0x2f700 + 0x2f700: 0x6d341820, 0x2f701: 0x6d341a20, 0x2f702: 0x6d341c20, 0x2f703: 0x6d341e20, + 0x2f704: 0x6d342020, 0x2f705: 0x6d342220, 0x2f706: 0x6d342420, 0x2f707: 0x6d342620, + 0x2f708: 0x6d342820, 0x2f709: 0x6d342a20, 0x2f70a: 0x6d342c20, 0x2f70b: 0x6d342e20, + 0x2f70c: 0x6d343020, 0x2f70d: 0x6d343220, 0x2f70e: 0x6d343420, 0x2f70f: 0x6d343620, + 0x2f710: 0x6d33b620, 0x2f711: 0x6d343820, 0x2f712: 0x6d343a20, 0x2f713: 0x6d608820, + 0x2f714: 0x6d343c20, 0x2f715: 0x6d343e20, 0x2f716: 0x6d608a20, 0x2f717: 0x6d608c20, + 0x2f718: 0x6d608e20, 0x2f719: 0x6d609020, 0x2f71a: 0x6d609220, 0x2f71b: 0x6d609420, + 0x2f71c: 0x6d609620, 0x2f71d: 0x6d609820, 0x2f71e: 0x6d609a20, 0x2f71f: 0x6d609c20, + 0x2f720: 0x6d609e20, 0x2f721: 0x6d60a020, 0x2f722: 0x6d60a220, 0x2f723: 0x6d60a420, + 0x2f724: 0x6d60a620, 0x2f725: 0x6d60a820, 0x2f726: 0x6d60aa20, 0x2f727: 0x6d60ac20, + 0x2f728: 0x6d60ae20, 0x2f729: 0x6d60b020, 0x2f72a: 0x6d60b220, 0x2f72b: 0x6d60b420, + 0x2f72c: 0x6d60b620, 0x2f72d: 0x6d60b820, 0x2f72e: 0x6d60ba20, 0x2f72f: 0x6d60bc20, + 0x2f730: 0x6d60be20, 0x2f731: 0x6d60c020, 0x2f732: 0x6d60c220, 0x2f733: 0x6d60c420, + 0x2f734: 0x6d60c620, 0x2f735: 0x6d60c820, 0x2f736: 0x6d60ca20, 0x2f737: 0x6d60cc20, + 0x2f738: 0x6d60ce20, 0x2f739: 0x6d60d020, 0x2f73a: 0x6d60d220, 0x2f73b: 0x6d60d420, + 0x2f73c: 0x6d60d620, 0x2f73d: 0x6d60d820, 0x2f73e: 0x6d60da20, 0x2f73f: 0x6d60dc20, + // Block 0xbdd, offset 0x2f740 + 0x2f740: 0x6d60de20, 0x2f741: 0x6d60e020, 0x2f742: 0x6d60e220, 0x2f743: 0x6d60e420, + 0x2f744: 0x6d60e620, 0x2f745: 0x6d60e820, 0x2f746: 0x6d60ea20, 0x2f747: 0x6d60ec20, + 0x2f748: 0x6d8aba20, 0x2f749: 0x6d8abc20, 0x2f74a: 0x6d8abe20, 0x2f74b: 0x6d8ac020, + 0x2f74c: 0x6d8ac220, 0x2f74d: 0x6d8ac420, 0x2f74e: 0x6d8ac620, 0x2f74f: 0x6d8ac820, + 0x2f750: 0x6d8aca20, 0x2f751: 0x6d8acc20, 0x2f752: 0x6d8ace20, 0x2f753: 0x6d8ad020, + 0x2f754: 0x6d8ad220, 0x2f755: 0x6d8ad420, 0x2f756: 0x6d8ad620, 0x2f757: 0x6d8ad820, + 0x2f758: 0x6d8ada20, 0x2f759: 0x6d8adc20, 0x2f75a: 0x6d8ade20, 0x2f75b: 0x6d8ae020, + 0x2f75c: 0x6d8ae220, 0x2f75d: 0x6d8ae420, 0x2f75e: 0x6d8ae620, 0x2f75f: 0x6d8ae820, + 0x2f760: 0x6d8aea20, 0x2f761: 0x6d8aec20, 0x2f762: 0x6d8aee20, 0x2f763: 0x6d8af020, + 0x2f764: 0x6d8af220, 0x2f765: 0x6d8af420, 0x2f766: 0x6d8af620, 0x2f767: 0x6d8af820, + 0x2f768: 0x6d8afa20, 0x2f769: 0x6daf3420, 0x2f76a: 0x6daf3620, 0x2f76b: 0x6daf3820, + 0x2f76c: 0x6daf3a20, 0x2f76d: 0x6daf3c20, 0x2f76e: 0x6daf3e20, 0x2f76f: 0x6daf4020, + 0x2f770: 0x6daf4220, 0x2f771: 0x6daf4420, 0x2f772: 0x6daf4620, 0x2f773: 0x6daf4820, + 0x2f774: 0x6daf4a20, 0x2f775: 0x6daf4c20, 0x2f776: 0x6daf4e20, 0x2f777: 0x6daf5020, + 0x2f778: 0x6daf5220, 0x2f779: 0x6daf5420, 0x2f77a: 0x6daf5620, 0x2f77b: 0x6daf5820, + 0x2f77c: 0x6daf5a20, 0x2f77d: 0x6daf5c20, 0x2f77e: 0x6daf5e20, 0x2f77f: 0x6daf6020, + // Block 0xbde, offset 0x2f780 + 0x2f780: 0x6daf6220, 0x2f781: 0x6daf6420, 0x2f782: 0x6daf6620, 0x2f783: 0x6daf6820, + 0x2f784: 0x6daf6a20, 0x2f785: 0x6daf6c20, 0x2f786: 0x6daf6e20, 0x2f787: 0x6daf7020, + 0x2f788: 0x6dafea20, 0x2f789: 0x6daf7220, 0x2f78a: 0x6daf7420, 0x2f78b: 0x6de91a20, + 0x2f78c: 0x6daf7620, 0x2f78d: 0x6daf7820, 0x2f78e: 0x6dcecc20, 0x2f78f: 0x6dcece20, + 0x2f790: 0x6dced020, 0x2f791: 0x6dced220, 0x2f792: 0x6dced420, 0x2f793: 0x6dced620, + 0x2f794: 0x6dced820, 0x2f795: 0x6dceda20, 0x2f796: 0x6dcedc20, 0x2f797: 0x6dcede20, + 0x2f798: 0x6dcee020, 0x2f799: 0x6dcee220, 0x2f79a: 0x6dcee420, 0x2f79b: 0x6dcee620, + 0x2f79c: 0x6dcee820, 0x2f79d: 0x6dceea20, 0x2f79e: 0x6dceec20, 0x2f79f: 0x6dceee20, + 0x2f7a0: 0x6dcef020, 0x2f7a1: 0x6dcef220, 0x2f7a2: 0x6dcef420, 0x2f7a3: 0x6dcef620, + 0x2f7a4: 0x6dcef820, 0x2f7a5: 0x6dcefa20, 0x2f7a6: 0x6de91c20, 0x2f7a7: 0x6dcefc20, + 0x2f7a8: 0x6de91e20, 0x2f7a9: 0x6de92020, 0x2f7aa: 0x6de92220, 0x2f7ab: 0x6de92420, + 0x2f7ac: 0x6de92620, 0x2f7ad: 0x6de92820, 0x2f7ae: 0x6de92a20, 0x2f7af: 0x6de92c20, + 0x2f7b0: 0x6de92e20, 0x2f7b1: 0x6dcefe20, 0x2f7b2: 0x6de93020, 0x2f7b3: 0x6de93220, + 0x2f7b4: 0x6de93420, 0x2f7b5: 0x6de93620, 0x2f7b6: 0x6de93820, 0x2f7b7: 0x6de93a20, + 0x2f7b8: 0x6de93c20, 0x2f7b9: 0x6de93e20, 0x2f7ba: 0x6de94020, 0x2f7bb: 0x6dff4220, + 0x2f7bc: 0x6dff4420, 0x2f7bd: 0x6dff4620, 0x2f7be: 0x6dff4820, 0x2f7bf: 0x6dff4a20, + // Block 0xbdf, offset 0x2f7c0 + 0x2f7c0: 0x6dff4c20, 0x2f7c1: 0x6dff4e20, 0x2f7c2: 0x6dff5020, 0x2f7c3: 0x6dff5220, + 0x2f7c4: 0x6e11aa20, 0x2f7c5: 0x6e11ac20, 0x2f7c6: 0x6e11ae20, 0x2f7c7: 0x6e11b020, + 0x2f7c8: 0x6e11b220, 0x2f7c9: 0x6e11b420, 0x2f7ca: 0x6e11b620, 0x2f7cb: 0x6e11b820, + 0x2f7cc: 0x6e11ba20, 0x2f7cd: 0x6e11bc20, 0x2f7ce: 0x6e11be20, 0x2f7cf: 0x6e11c020, + 0x2f7d0: 0x6e11c220, 0x2f7d1: 0x6e200820, 0x2f7d2: 0x6e200a20, 0x2f7d3: 0x6e2b1620, + 0x2f7d4: 0x6e2b1820, 0x2f7d5: 0x6e2b1a20, 0x2f7d6: 0x6e2b1c20, 0x2f7d7: 0x6e339220, + 0x2f7d8: 0x6e399820, 0x2f7d9: 0x6e399a20, 0x2f7da: 0x6e399c20, 0x2f7db: 0x6e399e20, + 0x2f7dc: 0x6e40a620, 0x2f7dd: 0x6e40a820, 0x2f7de: 0x6e445a20, 0x2f7df: 0x6c020020, + 0x2f7e0: 0x6c0a4620, 0x2f7e1: 0x6c141a20, 0x2f7e2: 0x6c141c20, 0x2f7e3: 0x6c141e20, + 0x2f7e4: 0x6c142020, 0x2f7e5: 0x6c142220, 0x2f7e6: 0x6c142420, 0x2f7e7: 0x6c142620, + 0x2f7e8: 0x6c142820, 0x2f7e9: 0x6c142a20, 0x2f7ea: 0x6c142c20, 0x2f7eb: 0x6c142e20, + 0x2f7ec: 0x6c25a020, 0x2f7ed: 0x6c25a220, 0x2f7ee: 0x6c25a420, 0x2f7ef: 0x6c25a620, + 0x2f7f0: 0x6c25a820, 0x2f7f1: 0x6c25aa20, 0x2f7f2: 0x6c25ac20, 0x2f7f3: 0x6c25ae20, + 0x2f7f4: 0x6c25b020, 0x2f7f5: 0x6c25b220, 0x2f7f6: 0x6c259e20, 0x2f7f7: 0x6c25b420, + 0x2f7f8: 0x6c25b620, 0x2f7f9: 0x6c25b820, 0x2f7fa: 0x6c25ba20, 0x2f7fb: 0x6c25bc20, + 0x2f7fc: 0x6c25be20, 0x2f7fd: 0x6c25c020, 0x2f7fe: 0x6c25c220, 0x2f7ff: 0x6c3dd620, + // Block 0xbe0, offset 0x2f800 + 0x2f800: 0x6c3dd820, 0x2f801: 0x6c3dda20, 0x2f802: 0x6c3ddc20, 0x2f803: 0x6c3dde20, + 0x2f804: 0x6c3de020, 0x2f805: 0x6c3de220, 0x2f806: 0x6c3de420, 0x2f807: 0x6c3de620, + 0x2f808: 0x6c3de820, 0x2f809: 0x6c3dea20, 0x2f80a: 0x6c3dec20, 0x2f80b: 0x6c3dee20, + 0x2f80c: 0x6c3df020, 0x2f80d: 0x6c3df220, 0x2f80e: 0x6c3df420, 0x2f80f: 0x6c3df620, + 0x2f810: 0x6c3df820, 0x2f811: 0x6c5c9a20, 0x2f812: 0x6c5c9c20, 0x2f813: 0x6c5c9e20, + 0x2f814: 0x6c5ca020, 0x2f815: 0x6c5ca220, 0x2f816: 0x6c5ca420, 0x2f817: 0x6c5ca620, + 0x2f818: 0x6c5ca820, 0x2f819: 0x6c5caa20, 0x2f81a: 0x6c5cac20, 0x2f81b: 0x6c5cae20, + 0x2f81c: 0x6c5cb020, 0x2f81d: 0x6c5cb220, 0x2f81e: 0x6c5cb420, 0x2f81f: 0x6c5cb620, + 0x2f820: 0x6c809e20, 0x2f821: 0x6c80a020, 0x2f822: 0x6c80a220, 0x2f823: 0x6c80a420, + 0x2f824: 0x6c80a620, 0x2f825: 0x6c80a820, 0x2f826: 0x6c80aa20, 0x2f827: 0x6c80ac20, + 0x2f828: 0x6c80ae20, 0x2f829: 0x6ca9a220, 0x2f82a: 0x6ca9a420, 0x2f82b: 0x6ca9a620, + 0x2f82c: 0x6ca9a820, 0x2f82d: 0x6ca9aa20, 0x2f82e: 0x6ca9ac20, 0x2f82f: 0x6ca9ae20, + 0x2f830: 0x6ca9b020, 0x2f831: 0x6ca9b220, 0x2f832: 0x6ca9b420, 0x2f833: 0x6ca9b620, + 0x2f834: 0x6ca9b820, 0x2f835: 0x6ca9ba20, 0x2f836: 0x6ca9bc20, 0x2f837: 0x6ca9be20, + 0x2f838: 0x6ca9c020, 0x2f839: 0x6ca9c220, 0x2f83a: 0x6ca9c420, 0x2f83b: 0x6ca9c620, + 0x2f83c: 0x6ca9c820, 0x2f83d: 0x6ca9ca20, 0x2f83e: 0x6ca9cc20, 0x2f83f: 0x6ca9ce20, + // Block 0xbe1, offset 0x2f840 + 0x2f840: 0x6ca9d020, 0x2f841: 0x6ca9d220, 0x2f842: 0x6cd81220, 0x2f843: 0x6cd81420, + 0x2f844: 0x6cd81620, 0x2f845: 0x6cd81820, 0x2f846: 0x6cd81a20, 0x2f847: 0x6cd81c20, + 0x2f848: 0x6cd81e20, 0x2f849: 0x6cd82020, 0x2f84a: 0x6cd82220, 0x2f84b: 0x6cd82420, + 0x2f84c: 0x6cd82620, 0x2f84d: 0x6cd82820, 0x2f84e: 0x6cd82a20, 0x2f84f: 0x6cd82c20, + 0x2f850: 0x6cd82e20, 0x2f851: 0x6cd83020, 0x2f852: 0x6cd83220, 0x2f853: 0x6cd83420, + 0x2f854: 0x6cd83620, 0x2f855: 0x6cd83820, 0x2f856: 0x6cd83a20, 0x2f857: 0x6cd83c20, + 0x2f858: 0x6cd83e20, 0x2f859: 0x6d06ce20, 0x2f85a: 0x6d06d020, 0x2f85b: 0x6d06d220, + 0x2f85c: 0x6d06d420, 0x2f85d: 0x6d06d620, 0x2f85e: 0x6d06d820, 0x2f85f: 0x6d06da20, + 0x2f860: 0x6d06dc20, 0x2f861: 0x6d06de20, 0x2f862: 0x6d06e020, 0x2f863: 0x6d06e220, + 0x2f864: 0x6d06e420, 0x2f865: 0x6d34c820, 0x2f866: 0x6d34ca20, 0x2f867: 0x6d34cc20, + 0x2f868: 0x6d34ce20, 0x2f869: 0x6d34d020, 0x2f86a: 0x6d34d220, 0x2f86b: 0x6d34d420, + 0x2f86c: 0x6d618020, 0x2f86d: 0x6d618220, 0x2f86e: 0x6d618420, 0x2f86f: 0x6d618620, + 0x2f870: 0x6d8b9620, 0x2f871: 0x6d8b9820, 0x2f872: 0x6d8b9a20, 0x2f873: 0x6d8b9c20, + 0x2f874: 0x6d8b9e20, 0x2f875: 0x6de9a220, 0x2f876: 0x6c143020, 0x2f877: 0x6c3e0020, + 0x2f878: 0x6c5cc620, 0x2f879: 0x6c80c620, 0x2f87a: 0x6c80c820, 0x2f87b: 0x6ca9ee20, + 0x2f87c: 0x6c80ca20, 0x2f87d: 0x6ca9f020, 0x2f87e: 0x6cd85420, 0x2f87f: 0x6cd85620, + // Block 0xbe2, offset 0x2f880 + 0x2f880: 0x6cd85820, 0x2f881: 0x6d34e420, 0x2f882: 0x6d34e620, 0x2f883: 0x6d8ba820, + 0x2f884: 0x6daff420, 0x2f885: 0x6daff620, 0x2f886: 0x6daff820, 0x2f887: 0x6dcf7c20, + 0x2f888: 0x6dcf7e20, 0x2f889: 0x6dcf8020, 0x2f88a: 0x6de9a420, 0x2f88b: 0x6de9a620, + 0x2f88c: 0x6dff9020, 0x2f88d: 0x6e120220, 0x2f88e: 0x6e203a20, 0x2f88f: 0x6e203c20, + 0x2f890: 0x6e33a620, 0x2f891: 0x6c143420, 0x2f892: 0x6c0a4a20, 0x2f893: 0x6c050420, + 0x2f894: 0x6c3e0420, 0x2f895: 0x6c25dc20, 0x2f896: 0x6c3e0620, 0x2f897: 0x6c3e0820, + 0x2f898: 0x6c5cd620, 0x2f899: 0x6c3e2020, 0x2f89a: 0x6c5cd820, 0x2f89b: 0x6c80d820, + 0x2f89c: 0x6c80da20, 0x2f89d: 0x6c80dc20, 0x2f89e: 0x6c80de20, 0x2f89f: 0x6c80e020, + 0x2f8a0: 0x6c80e220, 0x2f8a1: 0x6c80e420, 0x2f8a2: 0x6c80e620, 0x2f8a3: 0x6caa0020, + 0x2f8a4: 0x6cd86820, 0x2f8a5: 0x6cd86a20, 0x2f8a6: 0x6cd86c20, 0x2f8a7: 0x6d070220, + 0x2f8a8: 0x6d070420, 0x2f8a9: 0x6d070620, 0x2f8aa: 0x6d070820, 0x2f8ab: 0x6d070a20, + 0x2f8ac: 0x6d070c20, 0x2f8ad: 0x6d070e20, 0x2f8ae: 0x6d071020, 0x2f8af: 0x6d350020, + 0x2f8b0: 0x6d350220, 0x2f8b1: 0x6d350420, 0x2f8b2: 0x6d071220, 0x2f8b3: 0x6d350620, + 0x2f8b4: 0x6d350820, 0x2f8b5: 0x6d61a420, 0x2f8b6: 0x6d61a620, 0x2f8b7: 0x6d61a820, + 0x2f8b8: 0x6d61aa20, 0x2f8b9: 0x6d8bbe20, 0x2f8ba: 0x6d8bc020, 0x2f8bb: 0x6d8bc220, + 0x2f8bc: 0x6d8bc420, 0x2f8bd: 0x6db00820, 0x2f8be: 0x6db00a20, 0x2f8bf: 0x6db00c20, + // Block 0xbe3, offset 0x2f8c0 + 0x2f8c0: 0x6dcf8a20, 0x2f8c1: 0x6db00e20, 0x2f8c2: 0x6dcf8e20, 0x2f8c3: 0x6de9b620, + 0x2f8c4: 0x6de9b820, 0x2f8c5: 0x6de9ba20, 0x2f8c6: 0x6de9bc20, 0x2f8c7: 0x6e204020, + 0x2f8c8: 0x6e33b020, 0x2f8c9: 0x6e33b220, 0x2f8ca: 0x6c143a20, 0x2f8cb: 0x6c3e2220, + 0x2f8cc: 0x6c3e2420, 0x2f8cd: 0x6c5cf620, 0x2f8ce: 0x6c5cf820, 0x2f8cf: 0x6c5cfa20, + 0x2f8d0: 0x6c812220, 0x2f8d1: 0x6c5cfc20, 0x2f8d2: 0x6c812a20, 0x2f8d3: 0x6c812c20, + 0x2f8d4: 0x6c812e20, 0x2f8d5: 0x6caa3220, 0x2f8d6: 0x6c813020, 0x2f8d7: 0x6c813220, + 0x2f8d8: 0x6c813420, 0x2f8d9: 0x6c813620, 0x2f8da: 0x6caa3420, 0x2f8db: 0x6caa3620, + 0x2f8dc: 0x6caa3820, 0x2f8dd: 0x6caa3a20, 0x2f8de: 0x6caa3c20, 0x2f8df: 0x6caa3e20, + 0x2f8e0: 0x6cd88820, 0x2f8e1: 0x6cd88a20, 0x2f8e2: 0x6cd88c20, 0x2f8e3: 0x6d074820, + 0x2f8e4: 0x6d074a20, 0x2f8e5: 0x6d074c20, 0x2f8e6: 0x6d074e20, 0x2f8e7: 0x6d075020, + 0x2f8e8: 0x6d075220, 0x2f8e9: 0x6d075420, 0x2f8ea: 0x6d075620, 0x2f8eb: 0x6d353820, + 0x2f8ec: 0x6d61cc20, 0x2f8ed: 0x6d61ce20, 0x2f8ee: 0x6d61d020, 0x2f8ef: 0x6d61d220, + 0x2f8f0: 0x6d61d420, 0x2f8f1: 0x6d8bf620, 0x2f8f2: 0x6d8bf820, 0x2f8f3: 0x6dcfac20, + 0x2f8f4: 0x6dcfae20, 0x2f8f5: 0x6dcfb020, 0x2f8f6: 0x6de9d620, 0x2f8f7: 0x6de9d820, + 0x2f8f8: 0x6de9da20, 0x2f8f9: 0x6de9dc20, 0x2f8fa: 0x6dffa220, 0x2f8fb: 0x6e121020, + 0x2f8fc: 0x6e121220, 0x2f8fd: 0x6c144220, 0x2f8fe: 0x6c5d0c20, 0x2f8ff: 0x6c5d0e20, + // Block 0xbe4, offset 0x2f900 + 0x2f900: 0x6c815a20, 0x2f901: 0x6c815c20, 0x2f902: 0x6c815e20, 0x2f903: 0x6c816020, + 0x2f904: 0x6c816220, 0x2f905: 0x6c816420, 0x2f906: 0x6c816620, 0x2f907: 0x6caa7c20, + 0x2f908: 0x6caa7e20, 0x2f909: 0x6caa8020, 0x2f90a: 0x6caa8220, 0x2f90b: 0x6caa8420, + 0x2f90c: 0x6caa8620, 0x2f90d: 0x6caa8820, 0x2f90e: 0x6caa8a20, 0x2f90f: 0x6caa8c20, + 0x2f910: 0x6caa8e20, 0x2f911: 0x6caa9020, 0x2f912: 0x6caa9220, 0x2f913: 0x6cd8b220, + 0x2f914: 0x6cd8b420, 0x2f915: 0x6cd8b620, 0x2f916: 0x6cd8b820, 0x2f917: 0x6cd8ba20, + 0x2f918: 0x6cd8bc20, 0x2f919: 0x6cd8be20, 0x2f91a: 0x6cd8c020, 0x2f91b: 0x6d078420, + 0x2f91c: 0x6d078620, 0x2f91d: 0x6d078820, 0x2f91e: 0x6d355a20, 0x2f91f: 0x6d355c20, + 0x2f920: 0x6d355e20, 0x2f921: 0x6d356020, 0x2f922: 0x6d356220, 0x2f923: 0x6d356420, + 0x2f924: 0x6d356620, 0x2f925: 0x6d358c20, 0x2f926: 0x6d61f620, 0x2f927: 0x6d61f820, + 0x2f928: 0x6d61fa20, 0x2f929: 0x6d61fc20, 0x2f92a: 0x6d61fe20, 0x2f92b: 0x6d620020, + 0x2f92c: 0x6d620220, 0x2f92d: 0x6d620420, 0x2f92e: 0x6d8c1020, 0x2f92f: 0x6d8c1220, + 0x2f930: 0x6d8c1420, 0x2f931: 0x6d8c1620, 0x2f932: 0x6db05020, 0x2f933: 0x6db05220, + 0x2f934: 0x6db05420, 0x2f935: 0x6db05620, 0x2f936: 0x6db05820, 0x2f937: 0x6dcfde20, + 0x2f938: 0x6dcfe020, 0x2f939: 0x6dcfe220, 0x2f93a: 0x6dcfe420, 0x2f93b: 0x6dcfe620, + 0x2f93c: 0x6db05a20, 0x2f93d: 0x6de9ec20, 0x2f93e: 0x6de9ee20, 0x2f93f: 0x6dffb420, + // Block 0xbe5, offset 0x2f940 + 0x2f940: 0x6dffb620, 0x2f941: 0x6c144420, 0x2f942: 0x6c050620, 0x2f943: 0x6c144620, + 0x2f944: 0x6c819020, 0x2f945: 0x6c3e3620, 0x2f946: 0x6c819220, 0x2f947: 0x6c5d3820, + 0x2f948: 0x6caab220, 0x2f949: 0x6caab420, 0x2f94a: 0x6c81a420, 0x2f94b: 0x6cd8f820, + 0x2f94c: 0x6c144820, 0x2f94d: 0x6c5d3e20, 0x2f94e: 0x6c5d4020, 0x2f94f: 0x6c5d4220, + 0x2f950: 0x6c5d4420, 0x2f951: 0x6c5d4620, 0x2f952: 0x6c144c20, 0x2f953: 0x6c3e3e20, + 0x2f954: 0x6c5d4a20, 0x2f955: 0x6c81aa20, 0x2f956: 0x6c81ac20, 0x2f957: 0x6c81ae20, + 0x2f958: 0x6c81b020, 0x2f959: 0x6c81b220, 0x2f95a: 0x6caabc20, 0x2f95b: 0x6caabe20, + 0x2f95c: 0x6caac020, 0x2f95d: 0x6caac220, 0x2f95e: 0x6caac420, 0x2f95f: 0x6caac620, + 0x2f960: 0x6cd8fe20, 0x2f961: 0x6d07b420, 0x2f962: 0x6d07b620, 0x2f963: 0x6d359e20, + 0x2f964: 0x6d35a020, 0x2f965: 0x6d35a220, 0x2f966: 0x6d625020, 0x2f967: 0x6d625220, + 0x2f968: 0x6d8c4a20, 0x2f969: 0x6d8c4c20, 0x2f96a: 0x6d8c4e20, 0x2f96b: 0x6db08420, + 0x2f96c: 0x6db08620, 0x2f96d: 0x6dd01220, 0x2f96e: 0x6dd01420, 0x2f96f: 0x6dffc420, + 0x2f970: 0x6e122e20, 0x2f971: 0x6e205820, 0x2f972: 0x6e205a20, 0x2f973: 0x6c145020, + 0x2f974: 0x6c25e620, 0x2f975: 0x6c3e4620, 0x2f976: 0x6c5d5220, 0x2f977: 0x6c5d5420, + 0x2f978: 0x6c81ba20, 0x2f979: 0x6c81bc20, 0x2f97a: 0x6c81be20, 0x2f97b: 0x6c81c020, + 0x2f97c: 0x6c81c220, 0x2f97d: 0x6c81c420, 0x2f97e: 0x6c81c620, 0x2f97f: 0x6c81c820, + // Block 0xbe6, offset 0x2f980 + 0x2f980: 0x6c81ca20, 0x2f981: 0x6c81cc20, 0x2f982: 0x6c81ce20, 0x2f983: 0x6caad420, + 0x2f984: 0x6caad620, 0x2f985: 0x6caad820, 0x2f986: 0x6caada20, 0x2f987: 0x6caadc20, + 0x2f988: 0x6caade20, 0x2f989: 0x6caae020, 0x2f98a: 0x6caae220, 0x2f98b: 0x6caae420, + 0x2f98c: 0x6caae620, 0x2f98d: 0x6caae820, 0x2f98e: 0x6cd91020, 0x2f98f: 0x6cd91220, + 0x2f990: 0x6cd91420, 0x2f991: 0x6cd91620, 0x2f992: 0x6cd91820, 0x2f993: 0x6cd91a20, + 0x2f994: 0x6cd91c20, 0x2f995: 0x6d07c420, 0x2f996: 0x6d07c620, 0x2f997: 0x6d07c820, + 0x2f998: 0x6d07ca20, 0x2f999: 0x6d35c420, 0x2f99a: 0x6d35c620, 0x2f99b: 0x6d35c820, + 0x2f99c: 0x6d35ca20, 0x2f99d: 0x6d35cc20, 0x2f99e: 0x6d35ce20, 0x2f99f: 0x6d35d020, + 0x2f9a0: 0x6cd91e20, 0x2f9a1: 0x6d35d220, 0x2f9a2: 0x6d35d420, 0x2f9a3: 0x6d35d620, + 0x2f9a4: 0x6d626c20, 0x2f9a5: 0x6d626e20, 0x2f9a6: 0x6d627020, 0x2f9a7: 0x6d627220, + 0x2f9a8: 0x6d627420, 0x2f9a9: 0x6d627620, 0x2f9aa: 0x6d627820, 0x2f9ab: 0x6d627a20, + 0x2f9ac: 0x6d8c6820, 0x2f9ad: 0x6d8c6a20, 0x2f9ae: 0x6d8c9a20, 0x2f9af: 0x6db0a020, + 0x2f9b0: 0x6db0a220, 0x2f9b1: 0x6db0a420, 0x2f9b2: 0x6db0a620, 0x2f9b3: 0x6db0a820, + 0x2f9b4: 0x6db0cc20, 0x2f9b5: 0x6dd02c20, 0x2f9b6: 0x6dd02e20, 0x2f9b7: 0x6dd03020, + 0x2f9b8: 0x6dea0220, 0x2f9b9: 0x6dffc820, 0x2f9ba: 0x6dffca20, 0x2f9bb: 0x6dffcc20, + 0x2f9bc: 0x6dffce20, 0x2f9bd: 0x6e205e20, 0x2f9be: 0x6e206020, 0x2f9bf: 0x6c145220, + // Block 0xbe7, offset 0x2f9c0 + 0x2f9c0: 0x6c050820, 0x2f9c1: 0x6c81fa20, 0x2f9c2: 0x6c81fc20, 0x2f9c3: 0x6c3e5e20, + 0x2f9c4: 0x6d07fe20, 0x2f9c5: 0x6d080020, 0x2f9c6: 0x6d080220, 0x2f9c7: 0x6d360e20, + 0x2f9c8: 0x6d361020, 0x2f9c9: 0x6c145620, 0x2f9ca: 0x6c0a5420, 0x2f9cb: 0x6c145c20, + 0x2f9cc: 0x6c145e20, 0x2f9cd: 0x6c146020, 0x2f9ce: 0x6c146220, 0x2f9cf: 0x6c3e6020, + 0x2f9d0: 0x6c25ee20, 0x2f9d1: 0x6c25f020, 0x2f9d2: 0x6c25f220, 0x2f9d3: 0x6c25f420, + 0x2f9d4: 0x6c25f620, 0x2f9d5: 0x6c25f820, 0x2f9d6: 0x6c25fa20, 0x2f9d7: 0x6c25fc20, + 0x2f9d8: 0x6c25fe20, 0x2f9d9: 0x6c260020, 0x2f9da: 0x6c260220, 0x2f9db: 0x6c260420, + 0x2f9dc: 0x6c260620, 0x2f9dd: 0x6c260820, 0x2f9de: 0x6c260a20, 0x2f9df: 0x6c260c20, + 0x2f9e0: 0x6c260e20, 0x2f9e1: 0x6c3e7c20, 0x2f9e2: 0x6c3e7e20, 0x2f9e3: 0x6c3e8020, + 0x2f9e4: 0x6c3e8220, 0x2f9e5: 0x6c3e8420, 0x2f9e6: 0x6c3e8620, 0x2f9e7: 0x6c3e8820, + 0x2f9e8: 0x6c3e8a20, 0x2f9e9: 0x6c3e8c20, 0x2f9ea: 0x6c3e8e20, 0x2f9eb: 0x6c3e9020, + 0x2f9ec: 0x6c3e9220, 0x2f9ed: 0x6c3e9420, 0x2f9ee: 0x6c3e9620, 0x2f9ef: 0x6c3e9820, + 0x2f9f0: 0x6c3e9a20, 0x2f9f1: 0x6c3e9c20, 0x2f9f2: 0x6c3e9e20, 0x2f9f3: 0x6c3ea020, + 0x2f9f4: 0x6c3ea220, 0x2f9f5: 0x6c3ea420, 0x2f9f6: 0x6c3ea620, 0x2f9f7: 0x6c3ea820, + 0x2f9f8: 0x6c3eaa20, 0x2f9f9: 0x6c3eac20, 0x2f9fa: 0x6c3eae20, 0x2f9fb: 0x6c3eb020, + 0x2f9fc: 0x6c3eb220, 0x2f9fd: 0x6c3eb420, 0x2f9fe: 0x6c3eb620, 0x2f9ff: 0x6c3eb820, + // Block 0xbe8, offset 0x2fa00 + 0x2fa00: 0x6c3eba20, 0x2fa01: 0x6c3ebc20, 0x2fa02: 0x6c5d7220, 0x2fa03: 0x6c5d7420, + 0x2fa04: 0x6c5d7620, 0x2fa05: 0x6c5d7820, 0x2fa06: 0x6c5d7a20, 0x2fa07: 0x6c5d7c20, + 0x2fa08: 0x6c5d7e20, 0x2fa09: 0x6c5d8020, 0x2fa0a: 0x6c5d8220, 0x2fa0b: 0x6c5d8420, + 0x2fa0c: 0x6c5d8620, 0x2fa0d: 0x6c5d8820, 0x2fa0e: 0x6c5d8a20, 0x2fa0f: 0x6c5d8c20, + 0x2fa10: 0x6c5d8e20, 0x2fa11: 0x6c5d9020, 0x2fa12: 0x6c5d9220, 0x2fa13: 0x6c5d9420, + 0x2fa14: 0x6cd95220, 0x2fa15: 0x6c5d9620, 0x2fa16: 0x6c5d9820, 0x2fa17: 0x6c5d9a20, + 0x2fa18: 0x6c5d9c20, 0x2fa19: 0x6c5d9e20, 0x2fa1a: 0x6c5da020, 0x2fa1b: 0x6c5da220, + 0x2fa1c: 0x6c5da420, 0x2fa1d: 0x6c5da620, 0x2fa1e: 0x6c5da820, 0x2fa1f: 0x6c5daa20, + 0x2fa20: 0x6c5dac20, 0x2fa21: 0x6c5dae20, 0x2fa22: 0x6c5db020, 0x2fa23: 0x6c5db220, + 0x2fa24: 0x6c5db420, 0x2fa25: 0x6c5db620, 0x2fa26: 0x6c5db820, 0x2fa27: 0x6c5dba20, + 0x2fa28: 0x6c5dbc20, 0x2fa29: 0x6c5dbe20, 0x2fa2a: 0x6c5dc020, 0x2fa2b: 0x6c5dc220, + 0x2fa2c: 0x6cab1020, 0x2fa2d: 0x6c821220, 0x2fa2e: 0x6c821420, 0x2fa2f: 0x6c821620, + 0x2fa30: 0x6c821820, 0x2fa31: 0x6c821a20, 0x2fa32: 0x6c821c20, 0x2fa33: 0x6c821e20, + 0x2fa34: 0x6c822020, 0x2fa35: 0x6c822220, 0x2fa36: 0x6c822420, 0x2fa37: 0x6c822620, + 0x2fa38: 0x6c822820, 0x2fa39: 0x6c822a20, 0x2fa3a: 0x6c822c20, 0x2fa3b: 0x6c822e20, + 0x2fa3c: 0x6c823020, 0x2fa3d: 0x6c823220, 0x2fa3e: 0x6cd95420, 0x2fa3f: 0x6c823420, + // Block 0xbe9, offset 0x2fa40 + 0x2fa40: 0x6c823620, 0x2fa41: 0x6c823820, 0x2fa42: 0x6c823a20, 0x2fa43: 0x6c823c20, + 0x2fa44: 0x6c823e20, 0x2fa45: 0x6c824020, 0x2fa46: 0x6c824220, 0x2fa47: 0x6c824420, + 0x2fa48: 0x6c824620, 0x2fa49: 0x6c5dc420, 0x2fa4a: 0x6c824820, 0x2fa4b: 0x6c824a20, + 0x2fa4c: 0x6c824c20, 0x2fa4d: 0x6c824e20, 0x2fa4e: 0x6c825020, 0x2fa4f: 0x6c825220, + 0x2fa50: 0x6c825420, 0x2fa51: 0x6c825620, 0x2fa52: 0x6c825820, 0x2fa53: 0x6c825a20, + 0x2fa54: 0x6cd95620, 0x2fa55: 0x6cab2c20, 0x2fa56: 0x6cab2e20, 0x2fa57: 0x6cab3020, + 0x2fa58: 0x6cab3220, 0x2fa59: 0x6cab3420, 0x2fa5a: 0x6cab3620, 0x2fa5b: 0x6cab3820, + 0x2fa5c: 0x6cab3a20, 0x2fa5d: 0x6cab3c20, 0x2fa5e: 0x6cab3e20, 0x2fa5f: 0x6cab4020, + 0x2fa60: 0x6cd95820, 0x2fa61: 0x6cab4220, 0x2fa62: 0x6cab4420, 0x2fa63: 0x6cab4620, + 0x2fa64: 0x6cab4820, 0x2fa65: 0x6cab4a20, 0x2fa66: 0x6cab4c20, 0x2fa67: 0x6cab4e20, + 0x2fa68: 0x6cab5020, 0x2fa69: 0x6cab5220, 0x2fa6a: 0x6cab5420, 0x2fa6b: 0x6cab5620, + 0x2fa6c: 0x6cab5820, 0x2fa6d: 0x6cab5a20, 0x2fa6e: 0x6cab5c20, 0x2fa6f: 0x6cab5e20, + 0x2fa70: 0x6cab6020, 0x2fa71: 0x6cab6220, 0x2fa72: 0x6cab6420, 0x2fa73: 0x6cab6620, + 0x2fa74: 0x6cab6820, 0x2fa75: 0x6cab6a20, 0x2fa76: 0x6cab6c20, 0x2fa77: 0x6cab6e20, + 0x2fa78: 0x6cab7020, 0x2fa79: 0x6cd97e20, 0x2fa7a: 0x6cd98020, 0x2fa7b: 0x6cd98220, + 0x2fa7c: 0x6cd98420, 0x2fa7d: 0x6cd98620, 0x2fa7e: 0x6cd98820, 0x2fa7f: 0x6cd98a20, + // Block 0xbea, offset 0x2fa80 + 0x2fa80: 0x6cd98c20, 0x2fa81: 0x6cd98e20, 0x2fa82: 0x6cd99020, 0x2fa83: 0x6cd99220, + 0x2fa84: 0x6cd99420, 0x2fa85: 0x6cd99620, 0x2fa86: 0x6cd99820, 0x2fa87: 0x6cd99a20, + 0x2fa88: 0x6cd99c20, 0x2fa89: 0x6cd99e20, 0x2fa8a: 0x6cd9a020, 0x2fa8b: 0x6cd9a220, + 0x2fa8c: 0x6cd9a420, 0x2fa8d: 0x6cd9a620, 0x2fa8e: 0x6cd9a820, 0x2fa8f: 0x6cd9aa20, + 0x2fa90: 0x6d361a20, 0x2fa91: 0x6cd9ac20, 0x2fa92: 0x6cd9ae20, 0x2fa93: 0x6cd9b020, + 0x2fa94: 0x6cd9b220, 0x2fa95: 0x6cd9b420, 0x2fa96: 0x6cd9b620, 0x2fa97: 0x6cd9b820, + 0x2fa98: 0x6cd9ba20, 0x2fa99: 0x6cd9bc20, 0x2fa9a: 0x6cd9be20, 0x2fa9b: 0x6d082a20, + 0x2fa9c: 0x6d082c20, 0x2fa9d: 0x6d082e20, 0x2fa9e: 0x6d083020, 0x2fa9f: 0x6d083220, + 0x2faa0: 0x6d083420, 0x2faa1: 0x6d083620, 0x2faa2: 0x6d083820, 0x2faa3: 0x6d083a20, + 0x2faa4: 0x6d083c20, 0x2faa5: 0x6d083e20, 0x2faa6: 0x6d084020, 0x2faa7: 0x6d084220, + 0x2faa8: 0x6d084420, 0x2faa9: 0x6d084620, 0x2faaa: 0x6d084820, 0x2faab: 0x6d084a20, + 0x2faac: 0x6d084c20, 0x2faad: 0x6d084e20, 0x2faae: 0x6d085020, 0x2faaf: 0x6d085220, + 0x2fab0: 0x6d085420, 0x2fab1: 0x6d085620, 0x2fab2: 0x6d085820, 0x2fab3: 0x6d085a20, + 0x2fab4: 0x6cda6e20, 0x2fab5: 0x6d085c20, 0x2fab6: 0x6d085e20, 0x2fab7: 0x6d086020, + 0x2fab8: 0x6d086220, 0x2fab9: 0x6d086420, 0x2faba: 0x6d086620, 0x2fabb: 0x6d086820, + 0x2fabc: 0x6d086a20, 0x2fabd: 0x6d086c20, 0x2fabe: 0x6d086e20, 0x2fabf: 0x6d363820, + // Block 0xbeb, offset 0x2fac0 + 0x2fac0: 0x6d363a20, 0x2fac1: 0x6d363c20, 0x2fac2: 0x6d363e20, 0x2fac3: 0x6d364020, + 0x2fac4: 0x6d364220, 0x2fac5: 0x6d364420, 0x2fac6: 0x6d364620, 0x2fac7: 0x6d364820, + 0x2fac8: 0x6d364a20, 0x2fac9: 0x6d364c20, 0x2faca: 0x6d364e20, 0x2facb: 0x6d365020, + 0x2facc: 0x6d365220, 0x2facd: 0x6d365420, 0x2face: 0x6d365620, 0x2facf: 0x6d365820, + 0x2fad0: 0x6d8ca020, 0x2fad1: 0x6d365a20, 0x2fad2: 0x6d62d020, 0x2fad3: 0x6d62d220, + 0x2fad4: 0x6d62d420, 0x2fad5: 0x6d62d620, 0x2fad6: 0x6d62d820, 0x2fad7: 0x6d62da20, + 0x2fad8: 0x6d62dc20, 0x2fad9: 0x6d62de20, 0x2fada: 0x6d62e020, 0x2fadb: 0x6d62e220, + 0x2fadc: 0x6d62e420, 0x2fadd: 0x6d62e620, 0x2fade: 0x6d62e820, 0x2fadf: 0x6d62ea20, + 0x2fae0: 0x6d62ec20, 0x2fae1: 0x6d62ee20, 0x2fae2: 0x6d62f020, 0x2fae3: 0x6d62f220, + 0x2fae4: 0x6d538620, 0x2fae5: 0x6db0d420, 0x2fae6: 0x6d8cb420, 0x2fae7: 0x6d8cb620, + 0x2fae8: 0x6d8cb820, 0x2fae9: 0x6d8cba20, 0x2faea: 0x6d8cbc20, 0x2faeb: 0x6d8cbe20, + 0x2faec: 0x6d8cc020, 0x2faed: 0x6d8cc220, 0x2faee: 0x6d8cc420, 0x2faef: 0x6d8cc620, + 0x2faf0: 0x6d8cc820, 0x2faf1: 0x6d8cca20, 0x2faf2: 0x6d8ccc20, 0x2faf3: 0x6d8cce20, + 0x2faf4: 0x6d8cd020, 0x2faf5: 0x6d8cd220, 0x2faf6: 0x6d8cd420, 0x2faf7: 0x6d8d5820, + 0x2faf8: 0x6db0de20, 0x2faf9: 0x6d8d5a20, 0x2fafa: 0x6db0e020, 0x2fafb: 0x6db0e220, + 0x2fafc: 0x6db0e420, 0x2fafd: 0x6db0e620, 0x2fafe: 0x6db0e820, 0x2faff: 0x6db0ea20, + // Block 0xbec, offset 0x2fb00 + 0x2fb00: 0x6db0ec20, 0x2fb01: 0x6db0ee20, 0x2fb02: 0x6db0f020, 0x2fb03: 0x6db0f220, + 0x2fb04: 0x6db0f420, 0x2fb05: 0x6db0f620, 0x2fb06: 0x6db0f820, 0x2fb07: 0x6db0fa20, + 0x2fb08: 0x6db0fc20, 0x2fb09: 0x6db0fe20, 0x2fb0a: 0x6db10020, 0x2fb0b: 0x6dea1e20, + 0x2fb0c: 0x6db10220, 0x2fb0d: 0x6dd06620, 0x2fb0e: 0x6dd06820, 0x2fb0f: 0x6dd06a20, + 0x2fb10: 0x6dd06c20, 0x2fb11: 0x6dd06e20, 0x2fb12: 0x6dd07020, 0x2fb13: 0x6dd07220, + 0x2fb14: 0x6dea2620, 0x2fb15: 0x6dea2820, 0x2fb16: 0x6dffe420, 0x2fb17: 0x6dea2a20, + 0x2fb18: 0x6dea2c20, 0x2fb19: 0x6dffe620, 0x2fb1a: 0x6dffe820, 0x2fb1b: 0x6dffea20, + 0x2fb1c: 0x6dffec20, 0x2fb1d: 0x6e124820, 0x2fb1e: 0x6e206a20, 0x2fb1f: 0x6e206c20, + 0x2fb20: 0x6e39ae20, 0x2fb21: 0x6e39b020, 0x2fb22: 0x6e2b4820, 0x2fb23: 0x6c147a20, + 0x2fb24: 0x6c3f1a20, 0x2fb25: 0x6c3f1c20, 0x2fb26: 0x6cda7020, 0x2fb27: 0x6d36e420, + 0x2fb28: 0x6db16420, 0x2fb29: 0x6db16620, 0x2fb2a: 0x6c147e20, 0x2fb2b: 0x6c262820, + 0x2fb2c: 0x6c82dc20, 0x2fb2d: 0x6c82de20, 0x2fb2e: 0x6cda7c20, 0x2fb2f: 0x6cda7e20, + 0x2fb30: 0x6cda8020, 0x2fb31: 0x6d635a20, 0x2fb32: 0x6d8d5e20, 0x2fb33: 0x6c148220, + 0x2fb34: 0x6c5e4220, 0x2fb35: 0x6cda8c20, 0x2fb36: 0x6cda8e20, 0x2fb37: 0x6cda9020, + 0x2fb38: 0x6cda9220, 0x2fb39: 0x6cda9820, 0x2fb3a: 0x6d36f420, 0x2fb3b: 0x6d8d6620, + 0x2fb3c: 0x6c148820, 0x2fb3d: 0x6c3f2220, 0x2fb3e: 0x6c3f2420, 0x2fb3f: 0x6c5e4a20, + // Block 0xbed, offset 0x2fb40 + 0x2fb40: 0x6c82fc20, 0x2fb41: 0x6c82fe20, 0x2fb42: 0x6cabf420, 0x2fb43: 0x6cda9a20, + 0x2fb44: 0x6cda9c20, 0x2fb45: 0x6d090220, 0x2fb46: 0x6d8d7620, 0x2fb47: 0x6d370220, + 0x2fb48: 0x6d8d7220, 0x2fb49: 0x6d8d7820, 0x2fb4a: 0x6dd0c020, 0x2fb4b: 0x6dea7220, + 0x2fb4c: 0x6c149020, 0x2fb4d: 0x6c3f2c20, 0x2fb4e: 0x6c3f2e20, 0x2fb4f: 0x6c3f3020, + 0x2fb50: 0x6c831420, 0x2fb51: 0x6cac0620, 0x2fb52: 0x6cdaac20, 0x2fb53: 0x6d371820, + 0x2fb54: 0x6d371a20, 0x2fb55: 0x6d371c20, 0x2fb56: 0x6d638820, 0x2fb57: 0x6d638a20, + 0x2fb58: 0x6d8d8a20, 0x2fb59: 0x6dd0d220, 0x2fb5a: 0x6dea8020, 0x2fb5b: 0x6c149220, + 0x2fb5c: 0x6cdabe20, 0x2fb5d: 0x6d091c20, 0x2fb5e: 0x6d373020, 0x2fb5f: 0x6c149420, + 0x2fb60: 0x6c3f3620, 0x2fb61: 0x6c5e6020, 0x2fb62: 0x6c5e6220, 0x2fb63: 0x6c5e6420, + 0x2fb64: 0x6c5e6620, 0x2fb65: 0x6c832c20, 0x2fb66: 0x6c832e20, 0x2fb67: 0x6c833020, + 0x2fb68: 0x6c833220, 0x2fb69: 0x6c833420, 0x2fb6a: 0x6c833620, 0x2fb6b: 0x6c833820, + 0x2fb6c: 0x6c833a20, 0x2fb6d: 0x6c833c20, 0x2fb6e: 0x6c833e20, 0x2fb6f: 0x6c834020, + 0x2fb70: 0x6c834220, 0x2fb71: 0x6c834420, 0x2fb72: 0x6cac1820, 0x2fb73: 0x6cac1a20, + 0x2fb74: 0x6cac1c20, 0x2fb75: 0x6cac1e20, 0x2fb76: 0x6cac2020, 0x2fb77: 0x6cac2220, + 0x2fb78: 0x6cac2420, 0x2fb79: 0x6cac2620, 0x2fb7a: 0x6cac2820, 0x2fb7b: 0x6cac2a20, + 0x2fb7c: 0x6cdaca20, 0x2fb7d: 0x6cdacc20, 0x2fb7e: 0x6cdace20, 0x2fb7f: 0x6cdad020, + // Block 0xbee, offset 0x2fb80 + 0x2fb80: 0x6d092220, 0x2fb81: 0x6d092420, 0x2fb82: 0x6d092620, 0x2fb83: 0x6d092820, + 0x2fb84: 0x6d092a20, 0x2fb85: 0x6d092c20, 0x2fb86: 0x6d092e20, 0x2fb87: 0x6d093020, + 0x2fb88: 0x6d093220, 0x2fb89: 0x6d093420, 0x2fb8a: 0x6d374220, 0x2fb8b: 0x6d374420, + 0x2fb8c: 0x6d374620, 0x2fb8d: 0x6d374820, 0x2fb8e: 0x6d63a220, 0x2fb8f: 0x6d63a420, + 0x2fb90: 0x6d63a620, 0x2fb91: 0x6d63a820, 0x2fb92: 0x6d63aa20, 0x2fb93: 0x6d63ac20, + 0x2fb94: 0x6d63ae20, 0x2fb95: 0x6d8d9e20, 0x2fb96: 0x6d8da020, 0x2fb97: 0x6d8da220, + 0x2fb98: 0x6d8da420, 0x2fb99: 0x6d8da620, 0x2fb9a: 0x6db19c20, 0x2fb9b: 0x6db19e20, + 0x2fb9c: 0x6db1a020, 0x2fb9d: 0x6db1a220, 0x2fb9e: 0x6dd0e220, 0x2fb9f: 0x6dd0e420, + 0x2fba0: 0x6dd0e620, 0x2fba1: 0x6dea8620, 0x2fba2: 0x6dea8820, 0x2fba3: 0x6dea8a20, + 0x2fba4: 0x6dea8c20, 0x2fba5: 0x6dea8e20, 0x2fba6: 0x6e003620, 0x2fba7: 0x6e003820, + 0x2fba8: 0x6e003a20, 0x2fba9: 0x6e003c20, 0x2fbaa: 0x6e126c20, 0x2fbab: 0x6e208820, + 0x2fbac: 0x6e2b6e20, 0x2fbad: 0x6e33e220, 0x2fbae: 0x6c149820, 0x2fbaf: 0x6c263620, + 0x2fbb0: 0x6c3f4420, 0x2fbb1: 0x6db1bc20, 0x2fbb2: 0x6c149a20, 0x2fbb3: 0x6c835e20, + 0x2fbb4: 0x6cac4e20, 0x2fbb5: 0x6cdaf020, 0x2fbb6: 0x6deaa220, 0x2fbb7: 0x6e33e420, + 0x2fbb8: 0x6c149e20, 0x2fbb9: 0x6c020420, 0x2fbba: 0x6c0a5620, 0x2fbbb: 0x6c14a020, + 0x2fbbc: 0x6c14a220, 0x2fbbd: 0x6c14a420, 0x2fbbe: 0x6c14a620, 0x2fbbf: 0x6c14a820, + // Block 0xbef, offset 0x2fbc0 + 0x2fbc0: 0x6c14aa20, 0x2fbc1: 0x6c14ac20, 0x2fbc2: 0x6c14ae20, 0x2fbc3: 0x6c263820, + 0x2fbc4: 0x6c263a20, 0x2fbc5: 0x6c263c20, 0x2fbc6: 0x6c263e20, 0x2fbc7: 0x6c264020, + 0x2fbc8: 0x6c264220, 0x2fbc9: 0x6c264420, 0x2fbca: 0x6c264620, 0x2fbcb: 0x6c264820, + 0x2fbcc: 0x6c264a20, 0x2fbcd: 0x6c264c20, 0x2fbce: 0x6c264e20, 0x2fbcf: 0x6c265020, + 0x2fbd0: 0x6c265220, 0x2fbd1: 0x6c265420, 0x2fbd2: 0x6c265620, 0x2fbd3: 0x6c265820, + 0x2fbd4: 0x6c5e8820, 0x2fbd5: 0x6c265a20, 0x2fbd6: 0x6c265c20, 0x2fbd7: 0x6c265e20, + 0x2fbd8: 0x6c3f4c20, 0x2fbd9: 0x6c3f4e20, 0x2fbda: 0x6c3f5020, 0x2fbdb: 0x6c3f5220, + 0x2fbdc: 0x6c3f5420, 0x2fbdd: 0x6c3f5620, 0x2fbde: 0x6c3f5820, 0x2fbdf: 0x6c3f5a20, + 0x2fbe0: 0x6c3f5c20, 0x2fbe1: 0x6c3f5e20, 0x2fbe2: 0x6c3f6020, 0x2fbe3: 0x6c3f6220, + 0x2fbe4: 0x6c3f6420, 0x2fbe5: 0x6c3f6620, 0x2fbe6: 0x6c3f6820, 0x2fbe7: 0x6c3f6a20, + 0x2fbe8: 0x6c3f6c20, 0x2fbe9: 0x6c3f6e20, 0x2fbea: 0x6c3f7020, 0x2fbeb: 0x6c3f7220, + 0x2fbec: 0x6c3f7420, 0x2fbed: 0x6c3f7620, 0x2fbee: 0x6c3f7820, 0x2fbef: 0x6c3f7a20, + 0x2fbf0: 0x6c3f7c20, 0x2fbf1: 0x6c3f7e20, 0x2fbf2: 0x6c3f8020, 0x2fbf3: 0x6c3f8220, + 0x2fbf4: 0x6c3f8420, 0x2fbf5: 0x6c3f8620, 0x2fbf6: 0x6c3f8820, 0x2fbf7: 0x6c3f8a20, + 0x2fbf8: 0x6c3f8c20, 0x2fbf9: 0x6c3f8e20, 0x2fbfa: 0x6c3f9020, 0x2fbfb: 0x6c837820, + 0x2fbfc: 0x6c3f9220, 0x2fbfd: 0x6c3f9420, 0x2fbfe: 0x6c3f9620, 0x2fbff: 0x6c400c20, + // Block 0xbf0, offset 0x2fc00 + 0x2fc00: 0x6c3f9820, 0x2fc01: 0x6c3f9a20, 0x2fc02: 0x6c3f9c20, 0x2fc03: 0x6c3f9e20, + 0x2fc04: 0x6c3fa020, 0x2fc05: 0x6c3fa220, 0x2fc06: 0x6c3fa420, 0x2fc07: 0x6c3fa620, + 0x2fc08: 0x6c3fa820, 0x2fc09: 0x6c3faa20, 0x2fc0a: 0x6c3fac20, 0x2fc0b: 0x6c3fae20, + 0x2fc0c: 0x6c3fb020, 0x2fc0d: 0x6c3fb220, 0x2fc0e: 0x6c3fb420, 0x2fc0f: 0x6c3fb620, + 0x2fc10: 0x6c5e8a20, 0x2fc11: 0x6c5e8c20, 0x2fc12: 0x6c5e8e20, 0x2fc13: 0x6c5e9020, + 0x2fc14: 0x6c5e9220, 0x2fc15: 0x6c5e9420, 0x2fc16: 0x6c5e9620, 0x2fc17: 0x6c5e9820, + 0x2fc18: 0x6c5e9a20, 0x2fc19: 0x6c5e9c20, 0x2fc1a: 0x6c5e9e20, 0x2fc1b: 0x6c5ea020, + 0x2fc1c: 0x6c5ea220, 0x2fc1d: 0x6c5ea420, 0x2fc1e: 0x6c5ea620, 0x2fc1f: 0x6c5ea820, + 0x2fc20: 0x6c5eaa20, 0x2fc21: 0x6c5eac20, 0x2fc22: 0x6c5eae20, 0x2fc23: 0x6c5eb020, + 0x2fc24: 0x6c5eb220, 0x2fc25: 0x6c5eb420, 0x2fc26: 0x6c5eb620, 0x2fc27: 0x6c5eb820, + 0x2fc28: 0x6c5eba20, 0x2fc29: 0x6c5ebc20, 0x2fc2a: 0x6c5ebe20, 0x2fc2b: 0x6c5ec020, + 0x2fc2c: 0x6c5ec220, 0x2fc2d: 0x6c5ec420, 0x2fc2e: 0x6c5ec620, 0x2fc2f: 0x6c5ec820, + 0x2fc30: 0x6c5eca20, 0x2fc31: 0x6c5ecc20, 0x2fc32: 0x6c5ece20, 0x2fc33: 0x6c5ed020, + 0x2fc34: 0x6c5ed220, 0x2fc35: 0x6c5ed420, 0x2fc36: 0x6c5ed620, 0x2fc37: 0x6c5ed820, + 0x2fc38: 0x6c5eda20, 0x2fc39: 0x6c5edc20, 0x2fc3a: 0x6c5ede20, 0x2fc3b: 0x6c5ee020, + 0x2fc3c: 0x6c5ee220, 0x2fc3d: 0x6c5ee420, 0x2fc3e: 0x6c5ee620, 0x2fc3f: 0x6c5ee820, + // Block 0xbf1, offset 0x2fc40 + 0x2fc40: 0x6c5eea20, 0x2fc41: 0x6c5eec20, 0x2fc42: 0x6c5eee20, 0x2fc43: 0x6c5ef020, + 0x2fc44: 0x6c5ef220, 0x2fc45: 0x6c5ef420, 0x2fc46: 0x6c5ef620, 0x2fc47: 0x6c5ef820, + 0x2fc48: 0x6c837a20, 0x2fc49: 0x6c5efa20, 0x2fc4a: 0x6c5efc20, 0x2fc4b: 0x6c5efe20, + 0x2fc4c: 0x6c5f0020, 0x2fc4d: 0x6c5f0220, 0x2fc4e: 0x6c5f0420, 0x2fc4f: 0x6c5f0620, + 0x2fc50: 0x6c5f0820, 0x2fc51: 0x6c5f0a20, 0x2fc52: 0x6cdb1620, 0x2fc53: 0x6c5f0c20, + 0x2fc54: 0x6c5f0e20, 0x2fc55: 0x6c5f1020, 0x2fc56: 0x6c837c20, 0x2fc57: 0x6c837e20, + 0x2fc58: 0x6c838020, 0x2fc59: 0x6c838220, 0x2fc5a: 0x6c838420, 0x2fc5b: 0x6c838620, + 0x2fc5c: 0x6c838820, 0x2fc5d: 0x6cac7420, 0x2fc5e: 0x6c838a20, 0x2fc5f: 0x6c838c20, + 0x2fc60: 0x6c838e20, 0x2fc61: 0x6c839020, 0x2fc62: 0x6c839220, 0x2fc63: 0x6cac7620, + 0x2fc64: 0x6c839420, 0x2fc65: 0x6c839620, 0x2fc66: 0x6c839820, 0x2fc67: 0x6c839a20, + 0x2fc68: 0x6c839c20, 0x2fc69: 0x6c839e20, 0x2fc6a: 0x6c83a020, 0x2fc6b: 0x6c83a220, + 0x2fc6c: 0x6c83a420, 0x2fc6d: 0x6c83a620, 0x2fc6e: 0x6c83a820, 0x2fc6f: 0x6c83aa20, + 0x2fc70: 0x6c83ac20, 0x2fc71: 0x6c83ae20, 0x2fc72: 0x6c83b020, 0x2fc73: 0x6c83b220, + 0x2fc74: 0x6c83b420, 0x2fc75: 0x6c83b620, 0x2fc76: 0x6c83b820, 0x2fc77: 0x6c83ba20, + 0x2fc78: 0x6c83bc20, 0x2fc79: 0x6c83be20, 0x2fc7a: 0x6c5f9220, 0x2fc7b: 0x6cdb1820, + 0x2fc7c: 0x6c83c020, 0x2fc7d: 0x6c83c220, 0x2fc7e: 0x6c3fb820, 0x2fc7f: 0x6c83c420, + // Block 0xbf2, offset 0x2fc80 + 0x2fc80: 0x6c83c620, 0x2fc81: 0x6c83c820, 0x2fc82: 0x6c83ca20, 0x2fc83: 0x6c83cc20, + 0x2fc84: 0x6c83ce20, 0x2fc85: 0x6c83d020, 0x2fc86: 0x6cdb1a20, 0x2fc87: 0x6c83d220, + 0x2fc88: 0x6c83d420, 0x2fc89: 0x6c83d620, 0x2fc8a: 0x6c83d820, 0x2fc8b: 0x6c83da20, + 0x2fc8c: 0x6c83dc20, 0x2fc8d: 0x6c83de20, 0x2fc8e: 0x6c83e020, 0x2fc8f: 0x6c83e220, + 0x2fc90: 0x6c83e420, 0x2fc91: 0x6c83e620, 0x2fc92: 0x6c83e820, 0x2fc93: 0x6c84c420, + 0x2fc94: 0x6c83ea20, 0x2fc95: 0x6c83ec20, 0x2fc96: 0x6c83ee20, 0x2fc97: 0x6c83f020, + 0x2fc98: 0x6c83f220, 0x2fc99: 0x6cac7020, 0x2fc9a: 0x6c83f420, 0x2fc9b: 0x6c83f620, + 0x2fc9c: 0x6c83f820, 0x2fc9d: 0x6c83fa20, 0x2fc9e: 0x6c83fc20, 0x2fc9f: 0x6c83fe20, + 0x2fca0: 0x6c840020, 0x2fca1: 0x6c840220, 0x2fca2: 0x6c840420, 0x2fca3: 0x6c840620, + 0x2fca4: 0x6c840820, 0x2fca5: 0x6c840a20, 0x2fca6: 0x6c840c20, 0x2fca7: 0x6c840e20, + 0x2fca8: 0x6c841020, 0x2fca9: 0x6c841220, 0x2fcaa: 0x6c841420, 0x2fcab: 0x6cac7220, + 0x2fcac: 0x6c841620, 0x2fcad: 0x6c841820, 0x2fcae: 0x6c841a20, 0x2fcaf: 0x6c841c20, + 0x2fcb0: 0x6cac7820, 0x2fcb1: 0x6cac7a20, 0x2fcb2: 0x6cac7c20, 0x2fcb3: 0x6cac7e20, + 0x2fcb4: 0x6cac8020, 0x2fcb5: 0x6cac8220, 0x2fcb6: 0x6cac8420, 0x2fcb7: 0x6cac8620, + 0x2fcb8: 0x6cac8820, 0x2fcb9: 0x6cac8a20, 0x2fcba: 0x6cac8c20, 0x2fcbb: 0x6cac8e20, + 0x2fcbc: 0x6cac9020, 0x2fcbd: 0x6cac9220, 0x2fcbe: 0x6cac9420, 0x2fcbf: 0x6cac9620, + // Block 0xbf3, offset 0x2fcc0 + 0x2fcc0: 0x6cac9820, 0x2fcc1: 0x6cac9a20, 0x2fcc2: 0x6cac9c20, 0x2fcc3: 0x6cac9e20, + 0x2fcc4: 0x6caca020, 0x2fcc5: 0x6caca220, 0x2fcc6: 0x6caca420, 0x2fcc7: 0x6caca620, + 0x2fcc8: 0x6caca820, 0x2fcc9: 0x6cacaa20, 0x2fcca: 0x6cacac20, 0x2fccb: 0x6cacae20, + 0x2fccc: 0x6cacb020, 0x2fccd: 0x6cacb220, 0x2fcce: 0x6cacb420, 0x2fccf: 0x6cacb620, + 0x2fcd0: 0x6cacb820, 0x2fcd1: 0x6cacba20, 0x2fcd2: 0x6cacbc20, 0x2fcd3: 0x6cacbe20, + 0x2fcd4: 0x6cacc020, 0x2fcd5: 0x6cacc220, 0x2fcd6: 0x6cacc420, 0x2fcd7: 0x6cacc620, + 0x2fcd8: 0x6cacc820, 0x2fcd9: 0x6cacca20, 0x2fcda: 0x6cdb1c20, 0x2fcdb: 0x6caccc20, + 0x2fcdc: 0x6cacce20, 0x2fcdd: 0x6cacd020, 0x2fcde: 0x6cacd220, 0x2fcdf: 0x6cacd420, + 0x2fce0: 0x6cacd620, 0x2fce1: 0x6cacd820, 0x2fce2: 0x6cacda20, 0x2fce3: 0x6cacdc20, + 0x2fce4: 0x6cacde20, 0x2fce5: 0x6cace020, 0x2fce6: 0x6cace220, 0x2fce7: 0x6cace420, + 0x2fce8: 0x6cace620, 0x2fce9: 0x6cace820, 0x2fcea: 0x6cacea20, 0x2fceb: 0x6cacec20, + 0x2fcec: 0x6cacee20, 0x2fced: 0x6cae1e20, 0x2fcee: 0x6cacf020, 0x2fcef: 0x6cacf220, + 0x2fcf0: 0x6cacf420, 0x2fcf1: 0x6cacf620, 0x2fcf2: 0x6cacf820, 0x2fcf3: 0x6cacfa20, + 0x2fcf4: 0x6cacfc20, 0x2fcf5: 0x6cacfe20, 0x2fcf6: 0x6cad0020, 0x2fcf7: 0x6cad0220, + 0x2fcf8: 0x6cad0420, 0x2fcf9: 0x6cad0620, 0x2fcfa: 0x6cad0820, 0x2fcfb: 0x6d098220, + 0x2fcfc: 0x6cad0a20, 0x2fcfd: 0x6cad0c20, 0x2fcfe: 0x6cdb1e20, 0x2fcff: 0x6cdb2020, + // Block 0xbf4, offset 0x2fd00 + 0x2fd00: 0x6cdb2220, 0x2fd01: 0x6cdb2420, 0x2fd02: 0x6cdb2620, 0x2fd03: 0x6cdb2820, + 0x2fd04: 0x6cdb2a20, 0x2fd05: 0x6cdb2c20, 0x2fd06: 0x6cdb2e20, 0x2fd07: 0x6cdb3020, + 0x2fd08: 0x6cdb3220, 0x2fd09: 0x6cdb3420, 0x2fd0a: 0x6cdb3620, 0x2fd0b: 0x6cdb3820, + 0x2fd0c: 0x6cdb3a20, 0x2fd0d: 0x6cdb3c20, 0x2fd0e: 0x6cdb3e20, 0x2fd0f: 0x6cdb4020, + 0x2fd10: 0x6cdb4220, 0x2fd11: 0x6cdb4420, 0x2fd12: 0x6cdb4620, 0x2fd13: 0x6cdb4820, + 0x2fd14: 0x6cdb4a20, 0x2fd15: 0x6cdb4c20, 0x2fd16: 0x6cdb4e20, 0x2fd17: 0x6cdb5020, + 0x2fd18: 0x6cdb5220, 0x2fd19: 0x6d098420, 0x2fd1a: 0x6cdb5420, 0x2fd1b: 0x6cdb5620, + 0x2fd1c: 0x6cdb5820, 0x2fd1d: 0x6cdb5a20, 0x2fd1e: 0x6cdb5c20, 0x2fd1f: 0x6cdb5e20, + 0x2fd20: 0x6cdb6020, 0x2fd21: 0x6cdb6220, 0x2fd22: 0x6cdb6420, 0x2fd23: 0x6cdb6620, + 0x2fd24: 0x6cdb6820, 0x2fd25: 0x6cdb6a20, 0x2fd26: 0x6cdb6c20, 0x2fd27: 0x6cdb6e20, + 0x2fd28: 0x6cdb7020, 0x2fd29: 0x6cdb7220, 0x2fd2a: 0x6cdb7420, 0x2fd2b: 0x6cdb7620, + 0x2fd2c: 0x6cdb7820, 0x2fd2d: 0x6cdb7a20, 0x2fd2e: 0x6cdb7c20, 0x2fd2f: 0x6cdb7e20, + 0x2fd30: 0x6cdb8020, 0x2fd31: 0x6cdb8220, 0x2fd32: 0x6cdb8420, 0x2fd33: 0x6cdb8620, + 0x2fd34: 0x6cdb8820, 0x2fd35: 0x6cdb8a20, 0x2fd36: 0x6cdb8c20, 0x2fd37: 0x6cdb8e20, + 0x2fd38: 0x6cdb9020, 0x2fd39: 0x6cdb9220, 0x2fd3a: 0x6cdb9420, 0x2fd3b: 0x6cdb9620, + 0x2fd3c: 0x6cdb9820, 0x2fd3d: 0x6cdb9a20, 0x2fd3e: 0x6cdb9c20, 0x2fd3f: 0x6cdb9e20, + // Block 0xbf5, offset 0x2fd40 + 0x2fd40: 0x6cdba020, 0x2fd41: 0x6cdba220, 0x2fd42: 0x6cdba420, 0x2fd43: 0x6cdba620, + 0x2fd44: 0x6cdba820, 0x2fd45: 0x6cdbaa20, 0x2fd46: 0x6cdbac20, 0x2fd47: 0x6cdbae20, + 0x2fd48: 0x6cdbb020, 0x2fd49: 0x6cdbb220, 0x2fd4a: 0x6cdbb420, 0x2fd4b: 0x6cdbb620, + 0x2fd4c: 0x6cdbb820, 0x2fd4d: 0x6cdbba20, 0x2fd4e: 0x6cdbbc20, 0x2fd4f: 0x6cdbbe20, + 0x2fd50: 0x6cdbc020, 0x2fd51: 0x6cdbc220, 0x2fd52: 0x6cdbc420, 0x2fd53: 0x6cdbc620, + 0x2fd54: 0x6cdbc820, 0x2fd55: 0x6cdbca20, 0x2fd56: 0x6cdbcc20, 0x2fd57: 0x6cdbce20, + 0x2fd58: 0x6cdbd020, 0x2fd59: 0x6cdbd220, 0x2fd5a: 0x6cdbd420, 0x2fd5b: 0x6cdbd620, + 0x2fd5c: 0x6cdbd820, 0x2fd5d: 0x6cdbda20, 0x2fd5e: 0x6cdbdc20, 0x2fd5f: 0x6cdbde20, + 0x2fd60: 0x6cdbe020, 0x2fd61: 0x6cdbe220, 0x2fd62: 0x6cdbe420, 0x2fd63: 0x6cdbe620, + 0x2fd64: 0x6cdbe820, 0x2fd65: 0x6d098620, 0x2fd66: 0x6cdbea20, 0x2fd67: 0x6cdbec20, + 0x2fd68: 0x6d098820, 0x2fd69: 0x6d098a20, 0x2fd6a: 0x6d098c20, 0x2fd6b: 0x6d098e20, + 0x2fd6c: 0x6d037820, 0x2fd6d: 0x6d099020, 0x2fd6e: 0x6d099220, 0x2fd6f: 0x6d099420, + 0x2fd70: 0x6d099620, 0x2fd71: 0x6d099820, 0x2fd72: 0x6d099a20, 0x2fd73: 0x6d099c20, + 0x2fd74: 0x6d099e20, 0x2fd75: 0x6d09a020, 0x2fd76: 0x6d09a220, 0x2fd77: 0x6d09a420, + 0x2fd78: 0x6cdd4420, 0x2fd79: 0x6d09a620, 0x2fd7a: 0x6d09a820, 0x2fd7b: 0x6d09aa20, + 0x2fd7c: 0x6d09ac20, 0x2fd7d: 0x6d09ae20, 0x2fd7e: 0x6d09b020, 0x2fd7f: 0x6d09b220, + // Block 0xbf6, offset 0x2fd80 + 0x2fd80: 0x6d09b420, 0x2fd81: 0x6d09b620, 0x2fd82: 0x6d09b820, 0x2fd83: 0x6d09ba20, + 0x2fd84: 0x6d09bc20, 0x2fd85: 0x6d09be20, 0x2fd86: 0x6d09c020, 0x2fd87: 0x6d09c220, + 0x2fd88: 0x6d09c420, 0x2fd89: 0x6d09c620, 0x2fd8a: 0x6d09c820, 0x2fd8b: 0x6d09ca20, + 0x2fd8c: 0x6d09cc20, 0x2fd8d: 0x6d09ce20, 0x2fd8e: 0x6d09d020, 0x2fd8f: 0x6d09d220, + 0x2fd90: 0x6d09d420, 0x2fd91: 0x6d09d620, 0x2fd92: 0x6d09d820, 0x2fd93: 0x6d09da20, + 0x2fd94: 0x6d09dc20, 0x2fd95: 0x6d09de20, 0x2fd96: 0x6d09e020, 0x2fd97: 0x6cdbee20, + 0x2fd98: 0x6d09e220, 0x2fd99: 0x6d09e420, 0x2fd9a: 0x6d09e620, 0x2fd9b: 0x6d09e820, + 0x2fd9c: 0x6d09ea20, 0x2fd9d: 0x6d09ec20, 0x2fd9e: 0x6d09ee20, 0x2fd9f: 0x6d09f020, + 0x2fda0: 0x6d09f220, 0x2fda1: 0x6d09f420, 0x2fda2: 0x6d09f620, 0x2fda3: 0x6d09f820, + 0x2fda4: 0x6d09fa20, 0x2fda5: 0x6d09fc20, 0x2fda6: 0x6d09fe20, 0x2fda7: 0x6d0a0020, + 0x2fda8: 0x6d0a0220, 0x2fda9: 0x6d0a0420, 0x2fdaa: 0x6d0a0620, 0x2fdab: 0x6d0a0820, + 0x2fdac: 0x6d0a0a20, 0x2fdad: 0x6d0a0c20, 0x2fdae: 0x6d0a0e20, 0x2fdaf: 0x6d0a1020, + 0x2fdb0: 0x6d0a1220, 0x2fdb1: 0x6d0a1420, 0x2fdb2: 0x6d0a1620, 0x2fdb3: 0x6d0a1820, + 0x2fdb4: 0x6d0a1a20, 0x2fdb5: 0x6d0a1c20, 0x2fdb6: 0x6d0a1e20, 0x2fdb7: 0x6d0a2020, + 0x2fdb8: 0x6d0a2220, 0x2fdb9: 0x6d0a2420, 0x2fdba: 0x6d0a2620, 0x2fdbb: 0x6d0a2820, + 0x2fdbc: 0x6d0a2a20, 0x2fdbd: 0x6d0a2c20, 0x2fdbe: 0x6d0a2e20, 0x2fdbf: 0x6d0a3020, + // Block 0xbf7, offset 0x2fdc0 + 0x2fdc0: 0x6d0a3220, 0x2fdc1: 0x6d0a3420, 0x2fdc2: 0x6d0a3620, 0x2fdc3: 0x6d0a3820, + 0x2fdc4: 0x6d0a3a20, 0x2fdc5: 0x6d0a3c20, 0x2fdc6: 0x6d0a3e20, 0x2fdc7: 0x6d0a4020, + 0x2fdc8: 0x6d0a4220, 0x2fdc9: 0x6d0a4420, 0x2fdca: 0x6d640e20, 0x2fdcb: 0x6d0a4620, + 0x2fdcc: 0x6d0a4820, 0x2fdcd: 0x6d0a4a20, 0x2fdce: 0x6d0a4c20, 0x2fdcf: 0x6d0a4e20, + 0x2fdd0: 0x6d37b020, 0x2fdd1: 0x6d37b220, 0x2fdd2: 0x6d37b420, 0x2fdd3: 0x6d37b620, + 0x2fdd4: 0x6d37b820, 0x2fdd5: 0x6d37ba20, 0x2fdd6: 0x6d37bc20, 0x2fdd7: 0x6d37be20, + 0x2fdd8: 0x6d37c020, 0x2fdd9: 0x6d37c220, 0x2fdda: 0x6d37c420, 0x2fddb: 0x6d37c620, + 0x2fddc: 0x6d37c820, 0x2fddd: 0x6d37ca20, 0x2fdde: 0x6d37cc20, 0x2fddf: 0x6d37ce20, + 0x2fde0: 0x6d37d020, 0x2fde1: 0x6d37d220, 0x2fde2: 0x6d37d420, 0x2fde3: 0x6d37d620, + 0x2fde4: 0x6d37d820, 0x2fde5: 0x6d37da20, 0x2fde6: 0x6d37dc20, 0x2fde7: 0x6d37de20, + 0x2fde8: 0x6d37e020, 0x2fde9: 0x6d37e220, 0x2fdea: 0x6d37e420, 0x2fdeb: 0x6d37e620, + 0x2fdec: 0x6d37e820, 0x2fded: 0x6d37ea20, 0x2fdee: 0x6d37ec20, 0x2fdef: 0x6d37ee20, + 0x2fdf0: 0x6d37f020, 0x2fdf1: 0x6d37f220, 0x2fdf2: 0x6d37f420, 0x2fdf3: 0x6d37f620, + 0x2fdf4: 0x6d37f820, 0x2fdf5: 0x6d37fa20, 0x2fdf6: 0x6d37fc20, 0x2fdf7: 0x6d37fe20, + 0x2fdf8: 0x6d2b2a20, 0x2fdf9: 0x6d380020, 0x2fdfa: 0x6d380220, 0x2fdfb: 0x6d380420, + 0x2fdfc: 0x6d380620, 0x2fdfd: 0x6d380820, 0x2fdfe: 0x6d380a20, 0x2fdff: 0x6d380c20, + // Block 0xbf8, offset 0x2fe00 + 0x2fe00: 0x6d380e20, 0x2fe01: 0x6d381020, 0x2fe02: 0x6d381220, 0x2fe03: 0x6d381420, + 0x2fe04: 0x6d381620, 0x2fe05: 0x6d0bb820, 0x2fe06: 0x6d381820, 0x2fe07: 0x6d381a20, + 0x2fe08: 0x6d0bba20, 0x2fe09: 0x6d381c20, 0x2fe0a: 0x6d381e20, 0x2fe0b: 0x6d382020, + 0x2fe0c: 0x6d382220, 0x2fe0d: 0x6d382420, 0x2fe0e: 0x6d382620, 0x2fe0f: 0x6d382820, + 0x2fe10: 0x6d382a20, 0x2fe11: 0x6d382c20, 0x2fe12: 0x6d382e20, 0x2fe13: 0x6d383020, + 0x2fe14: 0x6d383220, 0x2fe15: 0x6d383420, 0x2fe16: 0x6d383620, 0x2fe17: 0x6d383820, + 0x2fe18: 0x6d383a20, 0x2fe19: 0x6d383c20, 0x2fe1a: 0x6d383e20, 0x2fe1b: 0x6d384020, + 0x2fe1c: 0x6d384220, 0x2fe1d: 0x6d384420, 0x2fe1e: 0x6d8dfe20, 0x2fe1f: 0x6d384620, + 0x2fe20: 0x6d641020, 0x2fe21: 0x6d384820, 0x2fe22: 0x6d384a20, 0x2fe23: 0x6d384c20, + 0x2fe24: 0x6d384e20, 0x2fe25: 0x6d39b820, 0x2fe26: 0x6d385020, 0x2fe27: 0x6d641220, + 0x2fe28: 0x6d641420, 0x2fe29: 0x6d641620, 0x2fe2a: 0x6d641820, 0x2fe2b: 0x6d641a20, + 0x2fe2c: 0x6d641c20, 0x2fe2d: 0x6d641e20, 0x2fe2e: 0x6d642020, 0x2fe2f: 0x6d642220, + 0x2fe30: 0x6d642420, 0x2fe31: 0x6d0bbc20, 0x2fe32: 0x6d642620, 0x2fe33: 0x6d642820, + 0x2fe34: 0x6d642a20, 0x2fe35: 0x6d642c20, 0x2fe36: 0x6d642e20, 0x2fe37: 0x6d643020, + 0x2fe38: 0x6d643220, 0x2fe39: 0x6d643420, 0x2fe3a: 0x6d643620, 0x2fe3b: 0x6d643820, + 0x2fe3c: 0x6d643a20, 0x2fe3d: 0x6d643c20, 0x2fe3e: 0x6d643e20, 0x2fe3f: 0x6d644020, + // Block 0xbf9, offset 0x2fe40 + 0x2fe40: 0x6d644220, 0x2fe41: 0x6d644420, 0x2fe42: 0x6d644620, 0x2fe43: 0x6d644820, + 0x2fe44: 0x6d644a20, 0x2fe45: 0x6d644c20, 0x2fe46: 0x6d644e20, 0x2fe47: 0x6d0bbe20, + 0x2fe48: 0x6d645020, 0x2fe49: 0x6d645220, 0x2fe4a: 0x6d645420, 0x2fe4b: 0x6d645620, + 0x2fe4c: 0x6d645820, 0x2fe4d: 0x6d645a20, 0x2fe4e: 0x6d645c20, 0x2fe4f: 0x6d645e20, + 0x2fe50: 0x6d646020, 0x2fe51: 0x6d646220, 0x2fe52: 0x6d646420, 0x2fe53: 0x6d646620, + 0x2fe54: 0x6d646820, 0x2fe55: 0x6d646a20, 0x2fe56: 0x6d646c20, 0x2fe57: 0x6d646e20, + 0x2fe58: 0x6d647020, 0x2fe59: 0x6d647220, 0x2fe5a: 0x6d647420, 0x2fe5b: 0x6d647620, + 0x2fe5c: 0x6d647820, 0x2fe5d: 0x6d647a20, 0x2fe5e: 0x6d647c20, 0x2fe5f: 0x6d647e20, + 0x2fe60: 0x6d648020, 0x2fe61: 0x6d648220, 0x2fe62: 0x6d648420, 0x2fe63: 0x6d648620, + 0x2fe64: 0x6d648820, 0x2fe65: 0x6d648a20, 0x2fe66: 0x6d648c20, 0x2fe67: 0x6d648e20, + 0x2fe68: 0x6d649020, 0x2fe69: 0x6d649220, 0x2fe6a: 0x6d649420, 0x2fe6b: 0x6d649620, + 0x2fe6c: 0x6d649820, 0x2fe6d: 0x6d649a20, 0x2fe6e: 0x6d649c20, 0x2fe6f: 0x6d649e20, + 0x2fe70: 0x6d64a020, 0x2fe71: 0x6d64a220, 0x2fe72: 0x6d64a420, 0x2fe73: 0x6d64a620, + 0x2fe74: 0x6d64a820, 0x2fe75: 0x6d64aa20, 0x2fe76: 0x6d64ac20, 0x2fe77: 0x6d64ae20, + 0x2fe78: 0x6d64b020, 0x2fe79: 0x6d64b220, 0x2fe7a: 0x6d64b420, 0x2fe7b: 0x6d64b620, + 0x2fe7c: 0x6d64b820, 0x2fe7d: 0x6d65f020, 0x2fe7e: 0x6d8e0020, 0x2fe7f: 0x6d8e0220, + // Block 0xbfa, offset 0x2fe80 + 0x2fe80: 0x6d8e0420, 0x2fe81: 0x6d8e0620, 0x2fe82: 0x6d8e0820, 0x2fe83: 0x6d8e0a20, + 0x2fe84: 0x6d8e0c20, 0x2fe85: 0x6d8e0e20, 0x2fe86: 0x6d8e1020, 0x2fe87: 0x6d8e1220, + 0x2fe88: 0x6d8e1420, 0x2fe89: 0x6d8e1620, 0x2fe8a: 0x6d8e1820, 0x2fe8b: 0x6d8e1a20, + 0x2fe8c: 0x6d8e1c20, 0x2fe8d: 0x6d8e1e20, 0x2fe8e: 0x6d8e2020, 0x2fe8f: 0x6d65f220, + 0x2fe90: 0x6d8e2220, 0x2fe91: 0x6d8e2420, 0x2fe92: 0x6d8e2620, 0x2fe93: 0x6d8e2820, + 0x2fe94: 0x6d8e2a20, 0x2fe95: 0x6d8e2c20, 0x2fe96: 0x6d8e2e20, 0x2fe97: 0x6db1fe20, + 0x2fe98: 0x6d8e3020, 0x2fe99: 0x6d8e3220, 0x2fe9a: 0x6d8e3420, 0x2fe9b: 0x6d8e3620, + 0x2fe9c: 0x6d8e3820, 0x2fe9d: 0x6d8e3a20, 0x2fe9e: 0x6d8e3c20, 0x2fe9f: 0x6d8e3e20, + 0x2fea0: 0x6d8e4020, 0x2fea1: 0x6d8e4220, 0x2fea2: 0x6d8e4420, 0x2fea3: 0x6d8e4620, + 0x2fea4: 0x6d8e4820, 0x2fea5: 0x6d8e4a20, 0x2fea6: 0x6d8e4c20, 0x2fea7: 0x6d8e4e20, + 0x2fea8: 0x6d8e5020, 0x2fea9: 0x6d8e5220, 0x2feaa: 0x6d8e5420, 0x2feab: 0x6d8e5620, + 0x2feac: 0x6d8e5820, 0x2fead: 0x6d8e5a20, 0x2feae: 0x6d8e5c20, 0x2feaf: 0x6d8e5e20, + 0x2feb0: 0x6d8e6020, 0x2feb1: 0x6d8e6220, 0x2feb2: 0x6d8e6420, 0x2feb3: 0x6d8e6620, + 0x2feb4: 0x6d8e6820, 0x2feb5: 0x6d8e6a20, 0x2feb6: 0x6db20020, 0x2feb7: 0x6db20220, + 0x2feb8: 0x6db20420, 0x2feb9: 0x6db20620, 0x2feba: 0x6db20820, 0x2febb: 0x6db20a20, + 0x2febc: 0x6db20c20, 0x2febd: 0x6db20e20, 0x2febe: 0x6db21020, 0x2febf: 0x6db21220, + // Block 0xbfb, offset 0x2fec0 + 0x2fec0: 0x6db21420, 0x2fec1: 0x6db21620, 0x2fec2: 0x6db21820, 0x2fec3: 0x6db21a20, + 0x2fec4: 0x6db21c20, 0x2fec5: 0x6db21e20, 0x2fec6: 0x6db22020, 0x2fec7: 0x6db22220, + 0x2fec8: 0x6db22420, 0x2fec9: 0x6db22620, 0x2feca: 0x6db22820, 0x2fecb: 0x6db22a20, + 0x2fecc: 0x6d8fc420, 0x2fecd: 0x6db22c20, 0x2fece: 0x6db22e20, 0x2fecf: 0x6db23020, + 0x2fed0: 0x6db23220, 0x2fed1: 0x6db23420, 0x2fed2: 0x6db23620, 0x2fed3: 0x6db23820, + 0x2fed4: 0x6db23a20, 0x2fed5: 0x6db23c20, 0x2fed6: 0x6db23e20, 0x2fed7: 0x6db24020, + 0x2fed8: 0x6db24220, 0x2fed9: 0x6db24420, 0x2feda: 0x6db24620, 0x2fedb: 0x6db24820, + 0x2fedc: 0x6db24a20, 0x2fedd: 0x6db24c20, 0x2fede: 0x6db24e20, 0x2fedf: 0x6db25020, + 0x2fee0: 0x6db25220, 0x2fee1: 0x6db25420, 0x2fee2: 0x6db25620, 0x2fee3: 0x6db25820, + 0x2fee4: 0x6db25a20, 0x2fee5: 0x6db25c20, 0x2fee6: 0x6db25e20, 0x2fee7: 0x6db26020, + 0x2fee8: 0x6db26220, 0x2fee9: 0x6dd14c20, 0x2feea: 0x6db26420, 0x2feeb: 0x6db26620, + 0x2feec: 0x6db26820, 0x2feed: 0x6db39420, 0x2feee: 0x6db26a20, 0x2feef: 0x6db39620, + 0x2fef0: 0x6dd14e20, 0x2fef1: 0x6dd15020, 0x2fef2: 0x6dd15220, 0x2fef3: 0x6dd15420, + 0x2fef4: 0x6dd15620, 0x2fef5: 0x6dd15820, 0x2fef6: 0x6dd15a20, 0x2fef7: 0x6dd15c20, + 0x2fef8: 0x6dd15e20, 0x2fef9: 0x6dd16020, 0x2fefa: 0x6dd16220, 0x2fefb: 0x6dd16420, + 0x2fefc: 0x6dd16620, 0x2fefd: 0x6dd16820, 0x2fefe: 0x6dd16a20, 0x2feff: 0x6dd16c20, + // Block 0xbfc, offset 0x2ff00 + 0x2ff00: 0x6dd16e20, 0x2ff01: 0x6dd17020, 0x2ff02: 0x6dd17220, 0x2ff03: 0x6dd17420, + 0x2ff04: 0x6dd17620, 0x2ff05: 0x6dd17820, 0x2ff06: 0x6dd17a20, 0x2ff07: 0x6dd17c20, + 0x2ff08: 0x6dd17e20, 0x2ff09: 0x6dd18020, 0x2ff0a: 0x6dd18220, 0x2ff0b: 0x6dd18420, + 0x2ff0c: 0x6dd18620, 0x2ff0d: 0x6dd18820, 0x2ff0e: 0x6dd18a20, 0x2ff0f: 0x6dd18c20, + 0x2ff10: 0x6dd18e20, 0x2ff11: 0x6deac020, 0x2ff12: 0x6dd19020, 0x2ff13: 0x6dd19220, + 0x2ff14: 0x6e128a20, 0x2ff15: 0x6deac220, 0x2ff16: 0x6deac420, 0x2ff17: 0x6deac620, + 0x2ff18: 0x6deac820, 0x2ff19: 0x6deaca20, 0x2ff1a: 0x6deacc20, 0x2ff1b: 0x6deace20, + 0x2ff1c: 0x6dead020, 0x2ff1d: 0x6dead220, 0x2ff1e: 0x6dead420, 0x2ff1f: 0x6dead620, + 0x2ff20: 0x6dead820, 0x2ff21: 0x6deada20, 0x2ff22: 0x6deadc20, 0x2ff23: 0x6deade20, + 0x2ff24: 0x6deae020, 0x2ff25: 0x6deae220, 0x2ff26: 0x6deae420, 0x2ff27: 0x6deae620, + 0x2ff28: 0x6deae820, 0x2ff29: 0x6deaea20, 0x2ff2a: 0x6deaec20, 0x2ff2b: 0x6deaee20, + 0x2ff2c: 0x6deaf020, 0x2ff2d: 0x6deaf220, 0x2ff2e: 0x6e006c20, 0x2ff2f: 0x6deaf420, + 0x2ff30: 0x6deaf620, 0x2ff31: 0x6deaf820, 0x2ff32: 0x6deafa20, 0x2ff33: 0x6deafc20, + 0x2ff34: 0x6deafe20, 0x2ff35: 0x6deb0020, 0x2ff36: 0x6e006e20, 0x2ff37: 0x6debce20, + 0x2ff38: 0x6debd020, 0x2ff39: 0x6e007020, 0x2ff3a: 0x6e007220, 0x2ff3b: 0x6e007420, + 0x2ff3c: 0x6e007620, 0x2ff3d: 0x6e007820, 0x2ff3e: 0x6e007a20, 0x2ff3f: 0x6e007c20, + // Block 0xbfd, offset 0x2ff40 + 0x2ff40: 0x6e007e20, 0x2ff41: 0x6e008020, 0x2ff42: 0x6e008220, 0x2ff43: 0x6e008420, + 0x2ff44: 0x6e008620, 0x2ff45: 0x6e008820, 0x2ff46: 0x6e008a20, 0x2ff47: 0x6e008c20, + 0x2ff48: 0x6e008e20, 0x2ff49: 0x6e009020, 0x2ff4a: 0x6e009220, 0x2ff4b: 0x6e009420, + 0x2ff4c: 0x6e009620, 0x2ff4d: 0x6e009820, 0x2ff4e: 0x6e009a20, 0x2ff4f: 0x6e009c20, + 0x2ff50: 0x6e009e20, 0x2ff51: 0x6e00a020, 0x2ff52: 0x6e015420, 0x2ff53: 0x6e00a220, + 0x2ff54: 0x6e00a420, 0x2ff55: 0x6e128c20, 0x2ff56: 0x6e128e20, 0x2ff57: 0x6e129020, + 0x2ff58: 0x6e129220, 0x2ff59: 0x6e129420, 0x2ff5a: 0x6e129620, 0x2ff5b: 0x6e015620, + 0x2ff5c: 0x6e129820, 0x2ff5d: 0x6e129a20, 0x2ff5e: 0x6e129c20, 0x2ff5f: 0x6e129e20, + 0x2ff60: 0x6e12a020, 0x2ff61: 0x6e12a220, 0x2ff62: 0x6e00a620, 0x2ff63: 0x6e12a420, + 0x2ff64: 0x6e006a20, 0x2ff65: 0x6e12a620, 0x2ff66: 0x6e12a820, 0x2ff67: 0x6e12aa20, + 0x2ff68: 0x6e12ac20, 0x2ff69: 0x6e12ae20, 0x2ff6a: 0x6e12b020, 0x2ff6b: 0x6e12b220, + 0x2ff6c: 0x6e20b820, 0x2ff6d: 0x6e12b420, 0x2ff6e: 0x6e12b620, 0x2ff6f: 0x6e12b820, + 0x2ff70: 0x6e015820, 0x2ff71: 0x6e2b7e20, 0x2ff72: 0x6e20ba20, 0x2ff73: 0x6e20bc20, + 0x2ff74: 0x6e20be20, 0x2ff75: 0x6e20c020, 0x2ff76: 0x6e20c220, 0x2ff77: 0x6e20c420, + 0x2ff78: 0x6e2b8020, 0x2ff79: 0x6e2b8220, 0x2ff7a: 0x6e2b8420, 0x2ff7b: 0x6e2b8620, + 0x2ff7c: 0x6e2b8820, 0x2ff7d: 0x6e2b8a20, 0x2ff7e: 0x6e2b8c20, 0x2ff7f: 0x6e2b8e20, + // Block 0xbfe, offset 0x2ff80 + 0x2ff80: 0x6e2b9020, 0x2ff81: 0x6e2b9220, 0x2ff82: 0x6e39ca20, 0x2ff83: 0x6e33ec20, + 0x2ff84: 0x6e3df420, 0x2ff85: 0x6e33ee20, 0x2ff86: 0x6e39cc20, 0x2ff87: 0x6e39ce20, + 0x2ff88: 0x6e39d020, 0x2ff89: 0x6e39d220, 0x2ff8a: 0x6e40cc20, 0x2ff8b: 0x6e446620, + 0x2ff8c: 0x6e42fa20, 0x2ff8d: 0x6c14ca20, 0x2ff8e: 0x6c401020, 0x2ff8f: 0x6c401220, + 0x2ff90: 0x6c5f9620, 0x2ff91: 0x6c84ce20, 0x2ff92: 0x6c674020, 0x2ff93: 0x6c84d020, + 0x2ff94: 0x6c84d220, 0x2ff95: 0x6cae2620, 0x2ff96: 0x6cae2820, 0x2ff97: 0x6cae2a20, + 0x2ff98: 0x6cae2c20, 0x2ff99: 0x6cae2e20, 0x2ff9a: 0x6cae3020, 0x2ff9b: 0x6cdd4c20, + 0x2ff9c: 0x6d0bc020, 0x2ff9d: 0x6cdd4e20, 0x2ff9e: 0x6d0bcc20, 0x2ff9f: 0x6d0bce20, + 0x2ffa0: 0x6d39ba20, 0x2ffa1: 0x6d39bc20, 0x2ffa2: 0x6d65f620, 0x2ffa3: 0x6d8fc620, + 0x2ffa4: 0x6d8fca20, 0x2ffa5: 0x6d8fcc20, 0x2ffa6: 0x6d8fce20, 0x2ffa7: 0x6db39a20, + 0x2ffa8: 0x6db39c20, 0x2ffa9: 0x6dd29a20, 0x2ffaa: 0x6e3e1220, 0x2ffab: 0x6c14cc20, + 0x2ffac: 0x6c268a20, 0x2ffad: 0x6c401620, 0x2ffae: 0x6c401820, 0x2ffaf: 0x6c401a20, + 0x2ffb0: 0x6c401c20, 0x2ffb1: 0x6c401e20, 0x2ffb2: 0x6c402020, 0x2ffb3: 0x6c5fa820, + 0x2ffb4: 0x6c5faa20, 0x2ffb5: 0x6c5fac20, 0x2ffb6: 0x6c5fae20, 0x2ffb7: 0x6c5fb020, + 0x2ffb8: 0x6c5fb220, 0x2ffb9: 0x6c5fb420, 0x2ffba: 0x6c5fb620, 0x2ffbb: 0x6c5fb820, + 0x2ffbc: 0x6c5fba20, 0x2ffbd: 0x6c5fbc20, 0x2ffbe: 0x6c5fbe20, 0x2ffbf: 0x6c5fc020, + // Block 0xbff, offset 0x2ffc0 + 0x2ffc0: 0x6c5fc220, 0x2ffc1: 0x6c5fc420, 0x2ffc2: 0x6c5fc620, 0x2ffc3: 0x6c5fc820, + 0x2ffc4: 0x6c84e420, 0x2ffc5: 0x6c84e620, 0x2ffc6: 0x6c84e820, 0x2ffc7: 0x6c84ea20, + 0x2ffc8: 0x6cdd7820, 0x2ffc9: 0x6c84ec20, 0x2ffca: 0x6c84ee20, 0x2ffcb: 0x6c84f020, + 0x2ffcc: 0x6c84f220, 0x2ffcd: 0x6c84f420, 0x2ffce: 0x6c84f620, 0x2ffcf: 0x6c84f820, + 0x2ffd0: 0x6c84fa20, 0x2ffd1: 0x6c84fc20, 0x2ffd2: 0x6c84fe20, 0x2ffd3: 0x6c850020, + 0x2ffd4: 0x6c850220, 0x2ffd5: 0x6c850420, 0x2ffd6: 0x6c850620, 0x2ffd7: 0x6c850820, + 0x2ffd8: 0x6c850a20, 0x2ffd9: 0x6c850c20, 0x2ffda: 0x6c850e20, 0x2ffdb: 0x6c851020, + 0x2ffdc: 0x6c851220, 0x2ffdd: 0x6c851420, 0x2ffde: 0x6c851620, 0x2ffdf: 0x6c851820, + 0x2ffe0: 0x6c851a20, 0x2ffe1: 0x6c851c20, 0x2ffe2: 0x6c851e20, 0x2ffe3: 0x6c852020, + 0x2ffe4: 0x6c852220, 0x2ffe5: 0x6c852420, 0x2ffe6: 0x6c852620, 0x2ffe7: 0x6c852820, + 0x2ffe8: 0x6c852a20, 0x2ffe9: 0x6c852c20, 0x2ffea: 0x6c852e20, 0x2ffeb: 0x6cae6020, + 0x2ffec: 0x6c853020, 0x2ffed: 0x6cae6220, 0x2ffee: 0x6cae6420, 0x2ffef: 0x6cae6620, + 0x2fff0: 0x6cae6820, 0x2fff1: 0x6cae6a20, 0x2fff2: 0x6cae6c20, 0x2fff3: 0x6cae6e20, + 0x2fff4: 0x6cae7020, 0x2fff5: 0x6cae7220, 0x2fff6: 0x6cae7420, 0x2fff7: 0x6cae7620, + 0x2fff8: 0x6cae7820, 0x2fff9: 0x6cae7a20, 0x2fffa: 0x6cae7c20, 0x2fffb: 0x6cae7e20, + 0x2fffc: 0x6cae8020, 0x2fffd: 0x6cae8220, 0x2fffe: 0x6cae8420, 0x2ffff: 0x6cae8620, + // Block 0xc00, offset 0x30000 + 0x30000: 0x6cae8820, 0x30001: 0x6cae8a20, 0x30002: 0x6cae8c20, 0x30003: 0x6cae8e20, + 0x30004: 0x6cae9020, 0x30005: 0x6cae9220, 0x30006: 0x6cae9420, 0x30007: 0x6cae9620, + 0x30008: 0x6cae9820, 0x30009: 0x6cae9a20, 0x3000a: 0x6cae9c20, 0x3000b: 0x6cae9e20, + 0x3000c: 0x6caea020, 0x3000d: 0x6caea220, 0x3000e: 0x6caea420, 0x3000f: 0x6caea620, + 0x30010: 0x6cdd7a20, 0x30011: 0x6cdd7c20, 0x30012: 0x6cdd7e20, 0x30013: 0x6cdd8020, + 0x30014: 0x6cdd8220, 0x30015: 0x6cdd8420, 0x30016: 0x6d0bf020, 0x30017: 0x6cdd8620, + 0x30018: 0x6cdd8820, 0x30019: 0x6cdd8a20, 0x3001a: 0x6cdd8c20, 0x3001b: 0x6cdd8e20, + 0x3001c: 0x6cdd9020, 0x3001d: 0x6cdd9220, 0x3001e: 0x6cdd9420, 0x3001f: 0x6cdd9620, + 0x30020: 0x6cdd9820, 0x30021: 0x6cdd9a20, 0x30022: 0x6cdd9c20, 0x30023: 0x6cdd9e20, + 0x30024: 0x6cdda020, 0x30025: 0x6cdda220, 0x30026: 0x6cdda420, 0x30027: 0x6cdda620, + 0x30028: 0x6cdda820, 0x30029: 0x6cddaa20, 0x3002a: 0x6cddac20, 0x3002b: 0x6cddae20, + 0x3002c: 0x6cddb020, 0x3002d: 0x6cddb220, 0x3002e: 0x6cddb420, 0x3002f: 0x6cddb620, + 0x30030: 0x6cddb820, 0x30031: 0x6cddba20, 0x30032: 0x6cddbc20, 0x30033: 0x6cddbe20, + 0x30034: 0x6cddc020, 0x30035: 0x6d0bf220, 0x30036: 0x6d0bf420, 0x30037: 0x6d0bf620, + 0x30038: 0x6d0bf820, 0x30039: 0x6d0bfa20, 0x3003a: 0x6d0bfc20, 0x3003b: 0x6d0bfe20, + 0x3003c: 0x6d0c0020, 0x3003d: 0x6d0c0220, 0x3003e: 0x6d0c0420, 0x3003f: 0x6d0c0620, + // Block 0xc01, offset 0x30040 + 0x30040: 0x6d0c0820, 0x30041: 0x6d0c0a20, 0x30042: 0x6d0c0c20, 0x30043: 0x6d0c0e20, + 0x30044: 0x6d0c1020, 0x30045: 0x6d0c1220, 0x30046: 0x6d0c1420, 0x30047: 0x6d0c1620, + 0x30048: 0x6d0c1820, 0x30049: 0x6d0c1a20, 0x3004a: 0x6d0c1c20, 0x3004b: 0x6d0c1e20, + 0x3004c: 0x6d0c2020, 0x3004d: 0x6d0c2220, 0x3004e: 0x6d0c2420, 0x3004f: 0x6d0c2620, + 0x30050: 0x6d0c2820, 0x30051: 0x6d39dc20, 0x30052: 0x6d39de20, 0x30053: 0x6d0c2a20, + 0x30054: 0x6d0c2c20, 0x30055: 0x6d0c2e20, 0x30056: 0x6d0c3020, 0x30057: 0x6d0c3220, + 0x30058: 0x6d39fc20, 0x30059: 0x6d39fe20, 0x3005a: 0x6d3a0020, 0x3005b: 0x6d3a0220, + 0x3005c: 0x6d3a0420, 0x3005d: 0x6d3a0620, 0x3005e: 0x6d3a0820, 0x3005f: 0x6d3a0a20, + 0x30060: 0x6d3a0c20, 0x30061: 0x6d3a0e20, 0x30062: 0x6d3a1020, 0x30063: 0x6d3a1220, + 0x30064: 0x6d3a1420, 0x30065: 0x6d3a1620, 0x30066: 0x6d3a1820, 0x30067: 0x6d3a1a20, + 0x30068: 0x6d3a1c20, 0x30069: 0x6d3a1e20, 0x3006a: 0x6d3a2020, 0x3006b: 0x6d39e020, + 0x3006c: 0x6d3a2220, 0x3006d: 0x6d3a2420, 0x3006e: 0x6d3a2620, 0x3006f: 0x6d3a2820, + 0x30070: 0x6d3a2a20, 0x30071: 0x6d3a2c20, 0x30072: 0x6d3a2e20, 0x30073: 0x6d3a3020, + 0x30074: 0x6d3a3220, 0x30075: 0x6d3a3420, 0x30076: 0x6d3a3620, 0x30077: 0x6d3a3820, + 0x30078: 0x6d3a3a20, 0x30079: 0x6d3a3c20, 0x3007a: 0x6d3a3e20, 0x3007b: 0x6d3a4020, + 0x3007c: 0x6d3a4220, 0x3007d: 0x6d3a4420, 0x3007e: 0x6d3a4620, 0x3007f: 0x6d3a4820, + // Block 0xc02, offset 0x30080 + 0x30080: 0x6d3a4a20, 0x30081: 0x6d3a4c20, 0x30082: 0x6d3a4e20, 0x30083: 0x6d3a5020, + 0x30084: 0x6d3a5220, 0x30085: 0x6d3a5420, 0x30086: 0x6d0c3420, 0x30087: 0x6d3a5620, + 0x30088: 0x6d3a5820, 0x30089: 0x6d3a5a20, 0x3008a: 0x6d3a5c20, 0x3008b: 0x6d3a5e20, + 0x3008c: 0x6d662820, 0x3008d: 0x6d0cba20, 0x3008e: 0x6d662a20, 0x3008f: 0x6d662c20, + 0x30090: 0x6d662e20, 0x30091: 0x6d663020, 0x30092: 0x6d663220, 0x30093: 0x6d663420, + 0x30094: 0x6d663620, 0x30095: 0x6d3b0c20, 0x30096: 0x6d663820, 0x30097: 0x6d663a20, + 0x30098: 0x6d663c20, 0x30099: 0x6d663e20, 0x3009a: 0x6d664020, 0x3009b: 0x6d664220, + 0x3009c: 0x6d664420, 0x3009d: 0x6d664620, 0x3009e: 0x6d664820, 0x3009f: 0x6d664a20, + 0x300a0: 0x6d664c20, 0x300a1: 0x6d664e20, 0x300a2: 0x6d665020, 0x300a3: 0x6d665220, + 0x300a4: 0x6d665420, 0x300a5: 0x6d665620, 0x300a6: 0x6d665820, 0x300a7: 0x6d665a20, + 0x300a8: 0x6d665c20, 0x300a9: 0x6d665e20, 0x300aa: 0x6d666020, 0x300ab: 0x6d3b0e20, + 0x300ac: 0x6d666220, 0x300ad: 0x6d666420, 0x300ae: 0x6d666620, 0x300af: 0x6d666820, + 0x300b0: 0x6d666a20, 0x300b1: 0x6d666c20, 0x300b2: 0x6d666e20, 0x300b3: 0x6d667020, + 0x300b4: 0x6d667220, 0x300b5: 0x6d667420, 0x300b6: 0x6d667620, 0x300b7: 0x6d667820, + 0x300b8: 0x6d667a20, 0x300b9: 0x6d900a20, 0x300ba: 0x6d667c20, 0x300bb: 0x6d667e20, + 0x300bc: 0x6d668020, 0x300bd: 0x6d668220, 0x300be: 0x6d668420, 0x300bf: 0x6d668620, + // Block 0xc03, offset 0x300c0 + 0x300c0: 0x6d668820, 0x300c1: 0x6d900c20, 0x300c2: 0x6d673820, 0x300c3: 0x6d900e20, + 0x300c4: 0x6d901020, 0x300c5: 0x6d901220, 0x300c6: 0x6d901420, 0x300c7: 0x6d901620, + 0x300c8: 0x6d901820, 0x300c9: 0x6d901a20, 0x300ca: 0x6d901c20, 0x300cb: 0x6d901e20, + 0x300cc: 0x6d902020, 0x300cd: 0x6d902220, 0x300ce: 0x6d902420, 0x300cf: 0x6d902620, + 0x300d0: 0x6d902820, 0x300d1: 0x6d902a20, 0x300d2: 0x6d902c20, 0x300d3: 0x6d902e20, + 0x300d4: 0x6d903020, 0x300d5: 0x6d903220, 0x300d6: 0x6d903420, 0x300d7: 0x6d903620, + 0x300d8: 0x6d903820, 0x300d9: 0x6d903a20, 0x300da: 0x6d903c20, 0x300db: 0x6d903e20, + 0x300dc: 0x6d904020, 0x300dd: 0x6d904220, 0x300de: 0x6d904420, 0x300df: 0x6d904620, + 0x300e0: 0x6d904820, 0x300e1: 0x6d904a20, 0x300e2: 0x6d904c20, 0x300e3: 0x6d904e20, + 0x300e4: 0x6d905020, 0x300e5: 0x6d905220, 0x300e6: 0x6d905420, 0x300e7: 0x6d905620, + 0x300e8: 0x6d905820, 0x300e9: 0x6d905a20, 0x300ea: 0x6db3d420, 0x300eb: 0x6db3d620, + 0x300ec: 0x6db3d820, 0x300ed: 0x6db3da20, 0x300ee: 0x6db3dc20, 0x300ef: 0x6db3de20, + 0x300f0: 0x6db3e020, 0x300f1: 0x6db3e220, 0x300f2: 0x6db3e420, 0x300f3: 0x6db3e620, + 0x300f4: 0x6db3e820, 0x300f5: 0x6db3ea20, 0x300f6: 0x6db3ec20, 0x300f7: 0x6db3ee20, + 0x300f8: 0x6db3f020, 0x300f9: 0x6db3f220, 0x300fa: 0x6db3f420, 0x300fb: 0x6db3f620, + 0x300fc: 0x6db3f820, 0x300fd: 0x6db3fa20, 0x300fe: 0x6db3fc20, 0x300ff: 0x6db3fe20, + // Block 0xc04, offset 0x30100 + 0x30100: 0x6db40020, 0x30101: 0x6db40220, 0x30102: 0x6db40420, 0x30103: 0x6db40620, + 0x30104: 0x6db40820, 0x30105: 0x6db40a20, 0x30106: 0x6db40c20, 0x30107: 0x6db40e20, + 0x30108: 0x6db41020, 0x30109: 0x6db41220, 0x3010a: 0x6db41420, 0x3010b: 0x6db41620, + 0x3010c: 0x6db41820, 0x3010d: 0x6db41a20, 0x3010e: 0x6db41c20, 0x3010f: 0x6db41e20, + 0x30110: 0x6db42020, 0x30111: 0x6db42220, 0x30112: 0x6db42420, 0x30113: 0x6dd2ba20, + 0x30114: 0x6dd2bc20, 0x30115: 0x6debe420, 0x30116: 0x6dd2be20, 0x30117: 0x6dd2ae20, + 0x30118: 0x6dd2c020, 0x30119: 0x6dd2c220, 0x3011a: 0x6dd2c420, 0x3011b: 0x6dd2c620, + 0x3011c: 0x6dd2c820, 0x3011d: 0x6dd2ca20, 0x3011e: 0x6db4c620, 0x3011f: 0x6dd2cc20, + 0x30120: 0x6dd2ce20, 0x30121: 0x6d668a20, 0x30122: 0x6dd2d020, 0x30123: 0x6dd2d220, + 0x30124: 0x6dd2d420, 0x30125: 0x6dd2d620, 0x30126: 0x6dd2d820, 0x30127: 0x6dd2da20, + 0x30128: 0x6dd2dc20, 0x30129: 0x6dd2de20, 0x3012a: 0x6dd2e020, 0x3012b: 0x6dd2e220, + 0x3012c: 0x6dd2e420, 0x3012d: 0x6dd2e620, 0x3012e: 0x6dd2e820, 0x3012f: 0x6dd2ea20, + 0x30130: 0x6dd2ec20, 0x30131: 0x6dd2ee20, 0x30132: 0x6dd2f020, 0x30133: 0x6dd2f220, + 0x30134: 0x6dd2f420, 0x30135: 0x6dd2f620, 0x30136: 0x6debf620, 0x30137: 0x6debf820, + 0x30138: 0x6debfa20, 0x30139: 0x6debfc20, 0x3013a: 0x6debfe20, 0x3013b: 0x6dec0020, + 0x3013c: 0x6dec0220, 0x3013d: 0x6dec0420, 0x3013e: 0x6dec0620, 0x3013f: 0x6dec0820, + // Block 0xc05, offset 0x30140 + 0x30140: 0x6dec0a20, 0x30141: 0x6debe220, 0x30142: 0x6dec0c20, 0x30143: 0x6dec0e20, + 0x30144: 0x6dec1020, 0x30145: 0x6dec1220, 0x30146: 0x6dec1420, 0x30147: 0x6dec1620, + 0x30148: 0x6dec1820, 0x30149: 0x6dec1a20, 0x3014a: 0x6dec1c20, 0x3014b: 0x6dec1e20, + 0x3014c: 0x6dec2020, 0x3014d: 0x6dec2220, 0x3014e: 0x6dd2f820, 0x3014f: 0x6dec2420, + 0x30150: 0x6e017020, 0x30151: 0x6e017220, 0x30152: 0x6e017420, 0x30153: 0x6e017620, + 0x30154: 0x6e017820, 0x30155: 0x6e017a20, 0x30156: 0x6e017c20, 0x30157: 0x6e017e20, + 0x30158: 0x6e018020, 0x30159: 0x6e018220, 0x3015a: 0x6e135620, 0x3015b: 0x6e135820, + 0x3015c: 0x6e135a20, 0x3015d: 0x6e135c20, 0x3015e: 0x6deca420, 0x3015f: 0x6e135e20, + 0x30160: 0x6e136020, 0x30161: 0x6e136220, 0x30162: 0x6e136420, 0x30163: 0x6e136620, + 0x30164: 0x6e136820, 0x30165: 0x6e212c20, 0x30166: 0x6e212e20, 0x30167: 0x6e213020, + 0x30168: 0x6e213220, 0x30169: 0x6e13c620, 0x3016a: 0x6e213420, 0x3016b: 0x6e13c820, + 0x3016c: 0x6e213620, 0x3016d: 0x6e2be220, 0x3016e: 0x6e2be420, 0x3016f: 0x6e2be620, + 0x30170: 0x6e2be820, 0x30171: 0x6e2bea20, 0x30172: 0x6e2bec20, 0x30173: 0x6e2bee20, + 0x30174: 0x6e2bda20, 0x30175: 0x6e342620, 0x30176: 0x6e342820, 0x30177: 0x6e342a20, + 0x30178: 0x6e342c20, 0x30179: 0x6e342e20, 0x3017a: 0x6e343020, 0x3017b: 0x6e39ec20, + 0x3017c: 0x6e3e1620, 0x3017d: 0x6e40de20, 0x3017e: 0x6e40e020, 0x3017f: 0x6e40fa20, + // Block 0xc06, offset 0x30180 + 0x30180: 0x6c14ce20, 0x30181: 0x6c5ff820, 0x30182: 0x6c5ffa20, 0x30183: 0x6c858420, + 0x30184: 0x6c858620, 0x30185: 0x6caf1c20, 0x30186: 0x6cde4420, 0x30187: 0x6cde4620, + 0x30188: 0x6cde4820, 0x30189: 0x6cde4a20, 0x3018a: 0x6e13ca20, 0x3018b: 0x6e345c20, + 0x3018c: 0x6c14d020, 0x3018d: 0x6c5ffe20, 0x3018e: 0x6c600020, 0x3018f: 0x6c859620, + 0x30190: 0x6caf2620, 0x30191: 0x6caf2820, 0x30192: 0x6caf2a20, 0x30193: 0x6caf2c20, + 0x30194: 0x6caf2e20, 0x30195: 0x6cde5220, 0x30196: 0x6cde5420, 0x30197: 0x6cde5620, + 0x30198: 0x6d0cc820, 0x30199: 0x6d0cca20, 0x3019a: 0x6d674620, 0x3019b: 0x6d674820, + 0x3019c: 0x6d674a20, 0x3019d: 0x6d674c20, 0x3019e: 0x6d912420, 0x3019f: 0x6d912620, + 0x301a0: 0x6d912820, 0x301a1: 0x6d912a20, 0x301a2: 0x6e345e20, 0x301a3: 0x6c14d220, + 0x301a4: 0x6c0a6020, 0x301a5: 0x6c404820, 0x301a6: 0x6c601220, 0x301a7: 0x6c601420, + 0x301a8: 0x6c404a20, 0x301a9: 0x6c601620, 0x301aa: 0x6c601820, 0x301ab: 0x6c601a20, + 0x301ac: 0x6c601c20, 0x301ad: 0x6c85a620, 0x301ae: 0x6c85a820, 0x301af: 0x6c85aa20, + 0x301b0: 0x6c85ac20, 0x301b1: 0x6c85ae20, 0x301b2: 0x6c85b020, 0x301b3: 0x6c85b220, + 0x301b4: 0x6c85b420, 0x301b5: 0x6c85b620, 0x301b6: 0x6c85b820, 0x301b7: 0x6c85ba20, + 0x301b8: 0x6c85bc20, 0x301b9: 0x6c85be20, 0x301ba: 0x6c85c020, 0x301bb: 0x6c85c220, + 0x301bc: 0x6c85c420, 0x301bd: 0x6c85c620, 0x301be: 0x6c85c820, 0x301bf: 0x6c85ca20, + // Block 0xc07, offset 0x301c0 + 0x301c0: 0x6c85cc20, 0x301c1: 0x6c85ce20, 0x301c2: 0x6c85d020, 0x301c3: 0x6c85d220, + 0x301c4: 0x6c85d420, 0x301c5: 0x6c85d620, 0x301c6: 0x6c85d820, 0x301c7: 0x6c85da20, + 0x301c8: 0x6caf4020, 0x301c9: 0x6caf4220, 0x301ca: 0x6caf4420, 0x301cb: 0x6caf4620, + 0x301cc: 0x6caf4820, 0x301cd: 0x6caf4a20, 0x301ce: 0x6caf4c20, 0x301cf: 0x6caf4e20, + 0x301d0: 0x6caf5020, 0x301d1: 0x6caf5220, 0x301d2: 0x6caf5420, 0x301d3: 0x6caf5620, + 0x301d4: 0x6caf5820, 0x301d5: 0x6caf5a20, 0x301d6: 0x6caf5c20, 0x301d7: 0x6caf5e20, + 0x301d8: 0x6caf6020, 0x301d9: 0x6caf6220, 0x301da: 0x6caf6420, 0x301db: 0x6caf6620, + 0x301dc: 0x6caf6820, 0x301dd: 0x6caf6a20, 0x301de: 0x6caf6c20, 0x301df: 0x6caf6e20, + 0x301e0: 0x6caf7020, 0x301e1: 0x6caf7220, 0x301e2: 0x6caf7420, 0x301e3: 0x6caf7620, + 0x301e4: 0x6caf7820, 0x301e5: 0x6caf7a20, 0x301e6: 0x6caf7c20, 0x301e7: 0x6caf7e20, + 0x301e8: 0x6caf8020, 0x301e9: 0x6caf8220, 0x301ea: 0x6caf8420, 0x301eb: 0x6caf8620, + 0x301ec: 0x6caf8820, 0x301ed: 0x6caf8a20, 0x301ee: 0x6caf8c20, 0x301ef: 0x6caf9020, + 0x301f0: 0x6caf8e20, 0x301f1: 0x6cde7820, 0x301f2: 0x6cde7a20, 0x301f3: 0x6cde7c20, + 0x301f4: 0x6cde7e20, 0x301f5: 0x6cde8020, 0x301f6: 0x6cde8220, 0x301f7: 0x6cde8420, + 0x301f8: 0x6cde8620, 0x301f9: 0x6cde8820, 0x301fa: 0x6cde8a20, 0x301fb: 0x6cde8c20, + 0x301fc: 0x6cde8e20, 0x301fd: 0x6cde9020, 0x301fe: 0x6cde9220, 0x301ff: 0x6cde9420, + // Block 0xc08, offset 0x30200 + 0x30200: 0x6cde9620, 0x30201: 0x6cde9820, 0x30202: 0x6cde9a20, 0x30203: 0x6cde9c20, + 0x30204: 0x6cde9e20, 0x30205: 0x6cdea020, 0x30206: 0x6cdea220, 0x30207: 0x6cdea420, + 0x30208: 0x6cdea620, 0x30209: 0x6cdea820, 0x3020a: 0x6d0ce020, 0x3020b: 0x6d0ce220, + 0x3020c: 0x6d0ce420, 0x3020d: 0x6d0ce620, 0x3020e: 0x6d0ce820, 0x3020f: 0x6d0cea20, + 0x30210: 0x6d0cec20, 0x30211: 0x6d0cee20, 0x30212: 0x6d0cf020, 0x30213: 0x6d0cf220, + 0x30214: 0x6d0cf420, 0x30215: 0x6d0cf620, 0x30216: 0x6d0cf820, 0x30217: 0x6cdeaa20, + 0x30218: 0x6d0cfa20, 0x30219: 0x6d0cfc20, 0x3021a: 0x6d0cfe20, 0x3021b: 0x6d0d0020, + 0x3021c: 0x6d0d0220, 0x3021d: 0x6d0d0420, 0x3021e: 0x6d0d0620, 0x3021f: 0x6d0d0820, + 0x30220: 0x6d0d0a20, 0x30221: 0x6d0d0c20, 0x30222: 0x6d3b2620, 0x30223: 0x6d0d0e20, + 0x30224: 0x6d0d1020, 0x30225: 0x6d0d1220, 0x30226: 0x6d676e20, 0x30227: 0x6d3b4820, + 0x30228: 0x6d3b4a20, 0x30229: 0x6d3b4c20, 0x3022a: 0x6d3b4e20, 0x3022b: 0x6d3b5020, + 0x3022c: 0x6d3b5220, 0x3022d: 0x6d3b5420, 0x3022e: 0x6d3b5620, 0x3022f: 0x6d3b5820, + 0x30230: 0x6d3b5a20, 0x30231: 0x6d3b5c20, 0x30232: 0x6d3b5e20, 0x30233: 0x6d3b6020, + 0x30234: 0x6d3b6220, 0x30235: 0x6d3b6420, 0x30236: 0x6d3b6620, 0x30237: 0x6d3b6820, + 0x30238: 0x6d3b6a20, 0x30239: 0x6d3b6c20, 0x3023a: 0x6d3b6e20, 0x3023b: 0x6d3b7020, + 0x3023c: 0x6d3b7220, 0x3023d: 0x6d3b7420, 0x3023e: 0x6d3b7620, 0x3023f: 0x6d3b7820, + // Block 0xc09, offset 0x30240 + 0x30240: 0x6d3b7a20, 0x30241: 0x6cdef820, 0x30242: 0x6d3b7c20, 0x30243: 0x6d3b7e20, + 0x30244: 0x6d3b8020, 0x30245: 0x6d677020, 0x30246: 0x6d677220, 0x30247: 0x6d677420, + 0x30248: 0x6d677620, 0x30249: 0x6d677820, 0x3024a: 0x6d677a20, 0x3024b: 0x6d677c20, + 0x3024c: 0x6d677e20, 0x3024d: 0x6d678020, 0x3024e: 0x6d678220, 0x3024f: 0x6d678420, + 0x30250: 0x6d678620, 0x30251: 0x6d678820, 0x30252: 0x6d678a20, 0x30253: 0x6d678c20, + 0x30254: 0x6d678e20, 0x30255: 0x6d679020, 0x30256: 0x6d679220, 0x30257: 0x6d679420, + 0x30258: 0x6d679620, 0x30259: 0x6d679820, 0x3025a: 0x6d3b8220, 0x3025b: 0x6d679a20, + 0x3025c: 0x6d679c20, 0x3025d: 0x6d679e20, 0x3025e: 0x6d913c20, 0x3025f: 0x6d913e20, + 0x30260: 0x6d914020, 0x30261: 0x6d914220, 0x30262: 0x6d914420, 0x30263: 0x6d914620, + 0x30264: 0x6d914820, 0x30265: 0x6d914a20, 0x30266: 0x6d914c20, 0x30267: 0x6d914e20, + 0x30268: 0x6d915020, 0x30269: 0x6d915220, 0x3026a: 0x6d915420, 0x3026b: 0x6d915620, + 0x3026c: 0x6d915820, 0x3026d: 0x6d915a20, 0x3026e: 0x6d915c20, 0x3026f: 0x6d915e20, + 0x30270: 0x6d916020, 0x30271: 0x6d916220, 0x30272: 0x6d916420, 0x30273: 0x6db4ee20, + 0x30274: 0x6d916620, 0x30275: 0x6db4f020, 0x30276: 0x6db4f220, 0x30277: 0x6db4f420, + 0x30278: 0x6db4f620, 0x30279: 0x6db4f820, 0x3027a: 0x6db4fa20, 0x3027b: 0x6db4fc20, + 0x3027c: 0x6db4fe20, 0x3027d: 0x6db50020, 0x3027e: 0x6db50220, 0x3027f: 0x6db50420, + // Block 0xc0a, offset 0x30280 + 0x30280: 0x6db50620, 0x30281: 0x6db50820, 0x30282: 0x6db50a20, 0x30283: 0x6db50c20, + 0x30284: 0x6db50e20, 0x30285: 0x6db51020, 0x30286: 0x6dd3b620, 0x30287: 0x6dd3b820, + 0x30288: 0x6dd3ba20, 0x30289: 0x6dd3bc20, 0x3028a: 0x6dd3be20, 0x3028b: 0x6dd3c020, + 0x3028c: 0x6dd3c220, 0x3028d: 0x6dd3c420, 0x3028e: 0x6dd3c620, 0x3028f: 0x6dd3c820, + 0x30290: 0x6dd3ca20, 0x30291: 0x6dd3cc20, 0x30292: 0x6db51420, 0x30293: 0x6dd3ce20, + 0x30294: 0x6db51220, 0x30295: 0x6dd3d020, 0x30296: 0x6decb020, 0x30297: 0x6decb220, + 0x30298: 0x6decb420, 0x30299: 0x6decb620, 0x3029a: 0x6decb820, 0x3029b: 0x6decba20, + 0x3029c: 0x6decbc20, 0x3029d: 0x6decbe20, 0x3029e: 0x6decc020, 0x3029f: 0x6decc220, + 0x302a0: 0x6decc420, 0x302a1: 0x6decc620, 0x302a2: 0x6decc820, 0x302a3: 0x6e01ec20, + 0x302a4: 0x6e01ee20, 0x302a5: 0x6e01f020, 0x302a6: 0x6e01f220, 0x302a7: 0x6e01f420, + 0x302a8: 0x6e01f620, 0x302a9: 0x6e13d220, 0x302aa: 0x6e13d420, 0x302ab: 0x6e13d620, + 0x302ac: 0x6e13d820, 0x302ad: 0x6e13da20, 0x302ae: 0x6e13dc20, 0x302af: 0x6e218e20, + 0x302b0: 0x6e219020, 0x302b1: 0x6e219220, 0x302b2: 0x6e219420, 0x302b3: 0x6e2c2620, + 0x302b4: 0x6e2c2820, 0x302b5: 0x6e346420, 0x302b6: 0x6e2c2a20, 0x302b7: 0x6e346620, + 0x302b8: 0x6e3a0c20, 0x302b9: 0x6e3a0e20, 0x302ba: 0x6e3a1020, 0x302bb: 0x6e3a1220, + 0x302bc: 0x6e3a1420, 0x302bd: 0x6e40fc20, 0x302be: 0x6c14d420, 0x302bf: 0x6c14d620, + // Block 0xc0b, offset 0x302c0 + 0x302c0: 0x6c14d820, 0x302c1: 0x6c606620, 0x302c2: 0x6cafe420, 0x302c3: 0x6cdefe20, + 0x302c4: 0x6cdf0020, 0x302c5: 0x6d0d7620, 0x302c6: 0x6dd40e20, 0x302c7: 0x6decfe20, + 0x302c8: 0x6ded0020, 0x302c9: 0x6e2c3820, 0x302ca: 0x6e3a2020, 0x302cb: 0x6c26a020, + 0x302cc: 0x6c606e20, 0x302cd: 0x6c862e20, 0x302ce: 0x6c863020, 0x302cf: 0x6caff420, + 0x302d0: 0x6caff620, 0x302d1: 0x6caff820, 0x302d2: 0x6caffa20, 0x302d3: 0x6caffc20, + 0x302d4: 0x6caffe20, 0x302d5: 0x6cdf1220, 0x302d6: 0x6ca6aa20, 0x302d7: 0x6cdf1420, + 0x302d8: 0x6cdf1620, 0x302d9: 0x6cdf0820, 0x302da: 0x6cdf1820, 0x302db: 0x6d0d8020, + 0x302dc: 0x6d0d8220, 0x302dd: 0x6d3bf020, 0x302de: 0x6d3bf220, 0x302df: 0x6d3bf420, + 0x302e0: 0x6d3bf620, 0x302e1: 0x6d3bf820, 0x302e2: 0x6d67fc20, 0x302e3: 0x6d67fe20, + 0x302e4: 0x6d680020, 0x302e5: 0x6d680220, 0x302e6: 0x6d91ca20, 0x302e7: 0x6d91cc20, + 0x302e8: 0x6d91ce20, 0x302e9: 0x6d683220, 0x302ea: 0x6d91d020, 0x302eb: 0x6db58620, + 0x302ec: 0x6db58820, 0x302ed: 0x6db58a20, 0x302ee: 0x6db58c20, 0x302ef: 0x6db58e20, + 0x302f0: 0x6dd41820, 0x302f1: 0x6dd41a20, 0x302f2: 0x6dd41c20, 0x302f3: 0x6dd41e20, + 0x302f4: 0x6ded0e20, 0x302f5: 0x6ded1020, 0x302f6: 0x6ded1220, 0x302f7: 0x6ded1420, + 0x302f8: 0x6ded1620, 0x302f9: 0x6e021a20, 0x302fa: 0x6e021c20, 0x302fb: 0x6e021e20, + 0x302fc: 0x6e13fe20, 0x302fd: 0x6e140020, 0x302fe: 0x6e21a220, 0x302ff: 0x6e21a420, + // Block 0xc0c, offset 0x30300 + 0x30300: 0x6e3a2420, 0x30301: 0x6c050c20, 0x30302: 0x6c14da20, 0x30303: 0x6c26a220, + 0x30304: 0x6c407220, 0x30305: 0x6c407420, 0x30306: 0x6c5adc20, 0x30307: 0x6c607220, + 0x30308: 0x6c607420, 0x30309: 0x6c607620, 0x3030a: 0x6c863e20, 0x3030b: 0x6cb01c20, + 0x3030c: 0x6cdf3420, 0x3030d: 0x6cdf3620, 0x3030e: 0x6d0dac20, 0x3030f: 0x6d3c1e20, + 0x30310: 0x6d683420, 0x30311: 0x6d683620, 0x30312: 0x6c26a620, 0x30313: 0x6c607c20, + 0x30314: 0x6c607e20, 0x30315: 0x6cb02020, 0x30316: 0x6cb02220, 0x30317: 0x6cb02420, + 0x30318: 0x6cb02620, 0x30319: 0x6cb02820, 0x3031a: 0x6cdf3820, 0x3031b: 0x6cdf3a20, + 0x3031c: 0x6d0db620, 0x3031d: 0x6cdf3c20, 0x3031e: 0x6cdf3e20, 0x3031f: 0x6d0db820, + 0x30320: 0x6d0dba20, 0x30321: 0x6d0dbc20, 0x30322: 0x6d0dbe20, 0x30323: 0x6d0dc020, + 0x30324: 0x6d0dc220, 0x30325: 0x6d0dc420, 0x30326: 0x6d0dc620, 0x30327: 0x6d0dc820, + 0x30328: 0x6d3c2220, 0x30329: 0x6d3c2420, 0x3032a: 0x6d3c2620, 0x3032b: 0x6d3c2820, + 0x3032c: 0x6d684420, 0x3032d: 0x6d684620, 0x3032e: 0x6d684820, 0x3032f: 0x6d684a20, + 0x30330: 0x6d687a20, 0x30331: 0x6d920a20, 0x30332: 0x6db5ac20, 0x30333: 0x6db5ae20, + 0x30334: 0x6dd43820, 0x30335: 0x6ded2a20, 0x30336: 0x6ded2c20, 0x30337: 0x6e023220, + 0x30338: 0x6e023420, 0x30339: 0x6e023620, 0x3033a: 0x6e140a20, 0x3033b: 0x6e21b420, + 0x3033c: 0x6e21b620, 0x3033d: 0x6e2c3c20, 0x3033e: 0x6e2c3e20, 0x3033f: 0x6e3a3820, + // Block 0xc0d, offset 0x30340 + 0x30340: 0x6c26aa20, 0x30341: 0x6c26ac20, 0x30342: 0x6c608c20, 0x30343: 0x6c608e20, + 0x30344: 0x6c609020, 0x30345: 0x6c609220, 0x30346: 0x6c609420, 0x30347: 0x6c609620, + 0x30348: 0x6c609820, 0x30349: 0x6c864e20, 0x3034a: 0x6c865020, 0x3034b: 0x6c865220, + 0x3034c: 0x6c865420, 0x3034d: 0x6c865620, 0x3034e: 0x6c865820, 0x3034f: 0x6c865a20, + 0x30350: 0x6c865c20, 0x30351: 0x6c865e20, 0x30352: 0x6c866020, 0x30353: 0x6c866220, + 0x30354: 0x6c866420, 0x30355: 0x6c866620, 0x30356: 0x6c866820, 0x30357: 0x6c866a20, + 0x30358: 0x6c866c20, 0x30359: 0x6c866e20, 0x3035a: 0x6c867020, 0x3035b: 0x6cb07820, + 0x3035c: 0x6cb07a20, 0x3035d: 0x6cb07c20, 0x3035e: 0x6cb07e20, 0x3035f: 0x6cb08020, + 0x30360: 0x6cb08220, 0x30361: 0x6cb08420, 0x30362: 0x6cb08620, 0x30363: 0x6cb08820, + 0x30364: 0x6cb08a20, 0x30365: 0x6cb08c20, 0x30366: 0x6cb08e20, 0x30367: 0x6cb09020, + 0x30368: 0x6cb09220, 0x30369: 0x6cb09420, 0x3036a: 0x6cb09620, 0x3036b: 0x6cb09820, + 0x3036c: 0x6cb09a20, 0x3036d: 0x6cb09c20, 0x3036e: 0x6cb09e20, 0x3036f: 0x6cb0a020, + 0x30370: 0x6cb0a220, 0x30371: 0x6cb0a420, 0x30372: 0x6cb0a620, 0x30373: 0x6cb0a820, + 0x30374: 0x6cdf8020, 0x30375: 0x6cdf8220, 0x30376: 0x6cdf8420, 0x30377: 0x6cdf8620, + 0x30378: 0x6cdf8820, 0x30379: 0x6cdf8a20, 0x3037a: 0x6cdf8c20, 0x3037b: 0x6cdf8e20, + 0x3037c: 0x6cdf9020, 0x3037d: 0x6cdf9220, 0x3037e: 0x6d0ddc20, 0x3037f: 0x6d0dde20, + // Block 0xc0e, offset 0x30380 + 0x30380: 0x6cdf9420, 0x30381: 0x6cdf9620, 0x30382: 0x6cdf9820, 0x30383: 0x6cdf9a20, + 0x30384: 0x6cdf9c20, 0x30385: 0x6cdf9e20, 0x30386: 0x6cdfa020, 0x30387: 0x6cdfa220, + 0x30388: 0x6cdfa420, 0x30389: 0x6cdfa620, 0x3038a: 0x6cdfa820, 0x3038b: 0x6cdfaa20, + 0x3038c: 0x6cdfac20, 0x3038d: 0x6cdfae20, 0x3038e: 0x6cdfb020, 0x3038f: 0x6cdfb220, + 0x30390: 0x6cdfb420, 0x30391: 0x6cdfb620, 0x30392: 0x6cdfb820, 0x30393: 0x6cdfba20, + 0x30394: 0x6cdfbc20, 0x30395: 0x6cdfbe20, 0x30396: 0x6cdfc020, 0x30397: 0x6cdfc220, + 0x30398: 0x6cdfc420, 0x30399: 0x6cdfc620, 0x3039a: 0x6cdfc820, 0x3039b: 0x6cdfca20, + 0x3039c: 0x6cdfcc20, 0x3039d: 0x6cdfce20, 0x3039e: 0x6cdfd020, 0x3039f: 0x6cdfd220, + 0x303a0: 0x6cdfd420, 0x303a1: 0x6d0df220, 0x303a2: 0x6d0df420, 0x303a3: 0x6d0df620, + 0x303a4: 0x6d0df820, 0x303a5: 0x6d0dfa20, 0x303a6: 0x6d0dfc20, 0x303a7: 0x6d0dfe20, + 0x303a8: 0x6d0e0020, 0x303a9: 0x6d0e0220, 0x303aa: 0x6d0e0420, 0x303ab: 0x6d0e0620, + 0x303ac: 0x6d0e0820, 0x303ad: 0x6d0e0a20, 0x303ae: 0x6d0e0c20, 0x303af: 0x6d0e0e20, + 0x303b0: 0x6d0e1020, 0x303b1: 0x6d0e1220, 0x303b2: 0x6d0e1420, 0x303b3: 0x6d0e1620, + 0x303b4: 0x6d0e1820, 0x303b5: 0x6d0e1a20, 0x303b6: 0x6d0e1c20, 0x303b7: 0x6d0e1e20, + 0x303b8: 0x6d0e2020, 0x303b9: 0x6d0e2220, 0x303ba: 0x6d0e2420, 0x303bb: 0x6d0e2620, + 0x303bc: 0x6d0e2820, 0x303bd: 0x6d0e2a20, 0x303be: 0x6d0e2c20, 0x303bf: 0x6d0e2e20, + // Block 0xc0f, offset 0x303c0 + 0x303c0: 0x6d0e3020, 0x303c1: 0x6d0e3220, 0x303c2: 0x6d0e3420, 0x303c3: 0x6d0e3620, + 0x303c4: 0x6d0e3820, 0x303c5: 0x6d0e3a20, 0x303c6: 0x6d0e3c20, 0x303c7: 0x6d0e3e20, + 0x303c8: 0x6d0e4020, 0x303c9: 0x6d0e4220, 0x303ca: 0x6d0e4420, 0x303cb: 0x6d3c5a20, + 0x303cc: 0x6d3c5c20, 0x303cd: 0x6d3c5e20, 0x303ce: 0x6d3c6020, 0x303cf: 0x6d3c6220, + 0x303d0: 0x6d3c6420, 0x303d1: 0x6d3c6620, 0x303d2: 0x6d3c6820, 0x303d3: 0x6d3c6a20, + 0x303d4: 0x6d3c6c20, 0x303d5: 0x6d687c20, 0x303d6: 0x6d3c6e20, 0x303d7: 0x6d3c7020, + 0x303d8: 0x6d3c7220, 0x303d9: 0x6d3c7420, 0x303da: 0x6d3c7620, 0x303db: 0x6d3c7820, + 0x303dc: 0x6d3c7a20, 0x303dd: 0x6d3c7c20, 0x303de: 0x6d3c7e20, 0x303df: 0x6d3c8020, + 0x303e0: 0x6d0e4620, 0x303e1: 0x6d3c8220, 0x303e2: 0x6d3c8420, 0x303e3: 0x6d3c8620, + 0x303e4: 0x6d3c8820, 0x303e5: 0x6d3c8a20, 0x303e6: 0x6d3c8c20, 0x303e7: 0x6d3c8e20, + 0x303e8: 0x6d3c9020, 0x303e9: 0x6d3c9220, 0x303ea: 0x6d3c9420, 0x303eb: 0x6d3c9620, + 0x303ec: 0x6d3c9820, 0x303ed: 0x6d3c9a20, 0x303ee: 0x6d3c9c20, 0x303ef: 0x6d689e20, + 0x303f0: 0x6d68a020, 0x303f1: 0x6d68a220, 0x303f2: 0x6d68a420, 0x303f3: 0x6d68a620, + 0x303f4: 0x6d68a820, 0x303f5: 0x6d68aa20, 0x303f6: 0x6d68ac20, 0x303f7: 0x6d68ae20, + 0x303f8: 0x6d68b020, 0x303f9: 0x6d68b220, 0x303fa: 0x6d68b420, 0x303fb: 0x6d68b620, + 0x303fc: 0x6d68b820, 0x303fd: 0x6d68ba20, 0x303fe: 0x6d68bc20, 0x303ff: 0x6d68be20, + // Block 0xc10, offset 0x30400 + 0x30400: 0x6d68c020, 0x30401: 0x6d68c220, 0x30402: 0x6d68c420, 0x30403: 0x6d68c620, + 0x30404: 0x6d68c820, 0x30405: 0x6d68ca20, 0x30406: 0x6d68cc20, 0x30407: 0x6d68ce20, + 0x30408: 0x6d68d020, 0x30409: 0x6d68d220, 0x3040a: 0x6d68d420, 0x3040b: 0x6d68d620, + 0x3040c: 0x6d68d820, 0x3040d: 0x6d68da20, 0x3040e: 0x6d68dc20, 0x3040f: 0x6d68de20, + 0x30410: 0x6d68e020, 0x30411: 0x6d68e220, 0x30412: 0x6d68e420, 0x30413: 0x6d68e620, + 0x30414: 0x6d68e820, 0x30415: 0x6d68ea20, 0x30416: 0x6d68ec20, 0x30417: 0x6d68ee20, + 0x30418: 0x6d68f020, 0x30419: 0x6d68f220, 0x3041a: 0x6d68f420, 0x3041b: 0x6d697620, + 0x3041c: 0x6d923c20, 0x3041d: 0x6d923e20, 0x3041e: 0x6d924020, 0x3041f: 0x6d924220, + 0x30420: 0x6d924420, 0x30421: 0x6d924620, 0x30422: 0x6d924820, 0x30423: 0x6d924a20, + 0x30424: 0x6d924c20, 0x30425: 0x6d924e20, 0x30426: 0x6d925020, 0x30427: 0x6d925220, + 0x30428: 0x6d925420, 0x30429: 0x6d68f620, 0x3042a: 0x6d925620, 0x3042b: 0x6d925820, + 0x3042c: 0x6d925a20, 0x3042d: 0x6d925c20, 0x3042e: 0x6d925e20, 0x3042f: 0x6d926020, + 0x30430: 0x6d926220, 0x30431: 0x6d926420, 0x30432: 0x6d926620, 0x30433: 0x6d926820, + 0x30434: 0x6d926a20, 0x30435: 0x6d926c20, 0x30436: 0x6d926e20, 0x30437: 0x6d927020, + 0x30438: 0x6d697820, 0x30439: 0x6d927220, 0x3043a: 0x6d927420, 0x3043b: 0x6d927620, + 0x3043c: 0x6d927820, 0x3043d: 0x6d927a20, 0x3043e: 0x6d927c20, 0x3043f: 0x6d927e20, + // Block 0xc11, offset 0x30440 + 0x30440: 0x6d928020, 0x30441: 0x6d928220, 0x30442: 0x6d928420, 0x30443: 0x6d928620, + 0x30444: 0x6db5e020, 0x30445: 0x6db5e220, 0x30446: 0x6db5e420, 0x30447: 0x6db5e620, + 0x30448: 0x6db5e820, 0x30449: 0x6db5ea20, 0x3044a: 0x6db5ec20, 0x3044b: 0x6db5ee20, + 0x3044c: 0x6db5f020, 0x3044d: 0x6db5f220, 0x3044e: 0x6db5f420, 0x3044f: 0x6db5f620, + 0x30450: 0x6db5f820, 0x30451: 0x6db5fa20, 0x30452: 0x6db5fc20, 0x30453: 0x6db5fe20, + 0x30454: 0x6d92fc20, 0x30455: 0x6db60020, 0x30456: 0x6db60220, 0x30457: 0x6db60420, + 0x30458: 0x6db60620, 0x30459: 0x6db60820, 0x3045a: 0x6db60a20, 0x3045b: 0x6db60c20, + 0x3045c: 0x6db60e20, 0x3045d: 0x6db61020, 0x3045e: 0x6db61220, 0x3045f: 0x6db61420, + 0x30460: 0x6db61620, 0x30461: 0x6db61820, 0x30462: 0x6db61a20, 0x30463: 0x6dd46220, + 0x30464: 0x6dd46420, 0x30465: 0x6dd46620, 0x30466: 0x6dd46820, 0x30467: 0x6dd46a20, + 0x30468: 0x6dd46c20, 0x30469: 0x6dd46e20, 0x3046a: 0x6dd47020, 0x3046b: 0x6dd47220, + 0x3046c: 0x6dd47420, 0x3046d: 0x6dd47620, 0x3046e: 0x6dd47820, 0x3046f: 0x6dd47a20, + 0x30470: 0x6dd47c20, 0x30471: 0x6dd47e20, 0x30472: 0x6dd48020, 0x30473: 0x6dd48220, + 0x30474: 0x6dd48420, 0x30475: 0x6dd48620, 0x30476: 0x6dd48820, 0x30477: 0x6dd48a20, + 0x30478: 0x6dd48c20, 0x30479: 0x6dd48e20, 0x3047a: 0x6dd49020, 0x3047b: 0x6dd49220, + 0x3047c: 0x6dd49420, 0x3047d: 0x6dd49620, 0x3047e: 0x6dd49820, 0x3047f: 0x6ded5020, + // Block 0xc12, offset 0x30480 + 0x30480: 0x6ded5220, 0x30481: 0x6ded5420, 0x30482: 0x6ded5620, 0x30483: 0x6ded5820, + 0x30484: 0x6ded5a20, 0x30485: 0x6e141420, 0x30486: 0x6ded5c20, 0x30487: 0x6dd4fa20, + 0x30488: 0x6ded5e20, 0x30489: 0x6ded6020, 0x3048a: 0x6ded6220, 0x3048b: 0x6ded6420, + 0x3048c: 0x6ded6620, 0x3048d: 0x6e024e20, 0x3048e: 0x6ded6820, 0x3048f: 0x6ded6a20, + 0x30490: 0x6ded6c20, 0x30491: 0x6ded6e20, 0x30492: 0x6ded7020, 0x30493: 0x6ded7220, + 0x30494: 0x6ded7420, 0x30495: 0x6ded7620, 0x30496: 0x6ded7820, 0x30497: 0x6ded7a20, + 0x30498: 0x6ded7c20, 0x30499: 0x6ded7e20, 0x3049a: 0x6ded8020, 0x3049b: 0x6ded8220, + 0x3049c: 0x6ded8420, 0x3049d: 0x6e025020, 0x3049e: 0x6e025220, 0x3049f: 0x6e025420, + 0x304a0: 0x6e025620, 0x304a1: 0x6e025820, 0x304a2: 0x6e025a20, 0x304a3: 0x6e025c20, + 0x304a4: 0x6e025e20, 0x304a5: 0x6e026020, 0x304a6: 0x6e026220, 0x304a7: 0x6e026420, + 0x304a8: 0x6e026620, 0x304a9: 0x6e026820, 0x304aa: 0x6e026a20, 0x304ab: 0x6e026c20, + 0x304ac: 0x6e026e20, 0x304ad: 0x6e027020, 0x304ae: 0x6e027220, 0x304af: 0x6e027420, + 0x304b0: 0x6e027620, 0x304b1: 0x6e027820, 0x304b2: 0x6e027a20, 0x304b3: 0x6e142220, + 0x304b4: 0x6e142420, 0x304b5: 0x6e142620, 0x304b6: 0x6e142820, 0x304b7: 0x6e142a20, + 0x304b8: 0x6e142c20, 0x304b9: 0x6e142e20, 0x304ba: 0x6e143020, 0x304bb: 0x6e143220, + 0x304bc: 0x6e143420, 0x304bd: 0x6e143620, 0x304be: 0x6e21c820, 0x304bf: 0x6e21ca20, + // Block 0xc13, offset 0x304c0 + 0x304c0: 0x6e21cc20, 0x304c1: 0x6e21ce20, 0x304c2: 0x6e21d020, 0x304c3: 0x6e21d220, + 0x304c4: 0x6e21d420, 0x304c5: 0x6e21d620, 0x304c6: 0x6e221420, 0x304c7: 0x6e2c4620, + 0x304c8: 0x6e2c4820, 0x304c9: 0x6e2c4a20, 0x304ca: 0x6e2c4c20, 0x304cb: 0x6e2c4e20, + 0x304cc: 0x6e2c5020, 0x304cd: 0x6e2c5220, 0x304ce: 0x6e2c5420, 0x304cf: 0x6e2c5620, + 0x304d0: 0x6e2c5820, 0x304d1: 0x6e347c20, 0x304d2: 0x6e347e20, 0x304d3: 0x6e348020, + 0x304d4: 0x6e348220, 0x304d5: 0x6e348420, 0x304d6: 0x6e348620, 0x304d7: 0x6e3a3c20, + 0x304d8: 0x6e3a3e20, 0x304d9: 0x6e3a4020, 0x304da: 0x6e3e3420, 0x304db: 0x6e3e3620, + 0x304dc: 0x6e410420, 0x304dd: 0x6e410620, 0x304de: 0x6e410820, 0x304df: 0x6e448020, + 0x304e0: 0x6c00c820, 0x304e1: 0x6c050e20, 0x304e2: 0x6c051020, 0x304e3: 0x6c051220, + 0x304e4: 0x6c051420, 0x304e5: 0x6c051620, 0x304e6: 0x6c0a6420, 0x304e7: 0x6c0a6620, + 0x304e8: 0x6c0a6820, 0x304e9: 0x6c0a6a20, 0x304ea: 0x6c0a6c20, 0x304eb: 0x6c0a6e20, + 0x304ec: 0x6c0a7020, 0x304ed: 0x6c0a7220, 0x304ee: 0x6c0a7420, 0x304ef: 0x6c0a7620, + 0x304f0: 0x6c0a7820, 0x304f1: 0x6c0a7a20, 0x304f2: 0x6c14dc20, 0x304f3: 0x6c14de20, + 0x304f4: 0x6c14e020, 0x304f5: 0x6c14e220, 0x304f6: 0x6c14e420, 0x304f7: 0x6c14e620, + 0x304f8: 0x6c14e820, 0x304f9: 0x6c14ea20, 0x304fa: 0x6c14ec20, 0x304fb: 0x6c14ee20, + 0x304fc: 0x6c14f020, 0x304fd: 0x6c14f220, 0x304fe: 0x6c14f420, 0x304ff: 0x6c14f620, + // Block 0xc14, offset 0x30500 + 0x30500: 0x6c14f820, 0x30501: 0x6c26b220, 0x30502: 0x6c26b420, 0x30503: 0x6c26b620, + 0x30504: 0x6c26b820, 0x30505: 0x6c26ba20, 0x30506: 0x6c26bc20, 0x30507: 0x6c26be20, + 0x30508: 0x6c26c020, 0x30509: 0x6c26c220, 0x3050a: 0x6c26c420, 0x3050b: 0x6c26c620, + 0x3050c: 0x6c26c820, 0x3050d: 0x6c26ca20, 0x3050e: 0x6c26cc20, 0x3050f: 0x6c26ce20, + 0x30510: 0x6c26d020, 0x30511: 0x6c26d220, 0x30512: 0x6c26d420, 0x30513: 0x6c407e20, + 0x30514: 0x6c408020, 0x30515: 0x6c408220, 0x30516: 0x6c408420, 0x30517: 0x6c408620, + 0x30518: 0x6c408820, 0x30519: 0x6c408a20, 0x3051a: 0x6c408c20, 0x3051b: 0x6c408e20, + 0x3051c: 0x6c409020, 0x3051d: 0x6c409220, 0x3051e: 0x6c409420, 0x3051f: 0x6c409620, + 0x30520: 0x6c409820, 0x30521: 0x6c409a20, 0x30522: 0x6c409c20, 0x30523: 0x6c409e20, + 0x30524: 0x6c40a020, 0x30525: 0x6c40a220, 0x30526: 0x6c40a420, 0x30527: 0x6c40a620, + 0x30528: 0x6c40a820, 0x30529: 0x6c40aa20, 0x3052a: 0x6c609c20, 0x3052b: 0x6c609e20, + 0x3052c: 0x6c60a020, 0x3052d: 0x6c60a220, 0x3052e: 0x6c60a420, 0x3052f: 0x6c60a620, + 0x30530: 0x6c60a820, 0x30531: 0x6c60aa20, 0x30532: 0x6c60ac20, 0x30533: 0x6c60ae20, + 0x30534: 0x6c60b020, 0x30535: 0x6c60b220, 0x30536: 0x6c60b420, 0x30537: 0x6c869020, + 0x30538: 0x6c869220, 0x30539: 0x6c869420, 0x3053a: 0x6c869620, 0x3053b: 0x6c869820, + 0x3053c: 0x6c869a20, 0x3053d: 0x6c869c20, 0x3053e: 0x6c869e20, 0x3053f: 0x6c86a020, + // Block 0xc15, offset 0x30540 + 0x30540: 0x6c86a220, 0x30541: 0x6c86a420, 0x30542: 0x6c86a620, 0x30543: 0x6c86a820, + 0x30544: 0x6c86aa20, 0x30545: 0x6c86ac20, 0x30546: 0x6c86ae20, 0x30547: 0x6c86b020, + 0x30548: 0x6c86b220, 0x30549: 0x6c86b420, 0x3054a: 0x6c86b620, 0x3054b: 0x6cb10c20, + 0x3054c: 0x6cb10e20, 0x3054d: 0x6cb11020, 0x3054e: 0x6cb11220, 0x3054f: 0x6cb11420, + 0x30550: 0x6cb11620, 0x30551: 0x6cb11820, 0x30552: 0x6cb11a20, 0x30553: 0x6cb11c20, + 0x30554: 0x6cb11e20, 0x30555: 0x6cb12020, 0x30556: 0x6cb12220, 0x30557: 0x6cb12420, + 0x30558: 0x6cb12620, 0x30559: 0x6cb12820, 0x3055a: 0x6cb12a20, 0x3055b: 0x6cb12c20, + 0x3055c: 0x6cb12e20, 0x3055d: 0x6cb13020, 0x3055e: 0x6cb13220, 0x3055f: 0x6ce02c20, + 0x30560: 0x6ce02e20, 0x30561: 0x6ce03020, 0x30562: 0x6ce03220, 0x30563: 0x6ce03420, + 0x30564: 0x6ce03620, 0x30565: 0x6ce03820, 0x30566: 0x6ce03a20, 0x30567: 0x6ce03c20, + 0x30568: 0x6d0eb420, 0x30569: 0x6d0eb620, 0x3056a: 0x6d0eb820, 0x3056b: 0x6d0eba20, + 0x3056c: 0x6d0ebc20, 0x3056d: 0x6d3d0620, 0x3056e: 0x6d3d0820, 0x3056f: 0x6d3d0a20, + 0x30570: 0x6d3d0c20, 0x30571: 0x6d3d0e20, 0x30572: 0x6d3d1020, 0x30573: 0x6d697c20, + 0x30574: 0x6d697e20, 0x30575: 0x6d698020, 0x30576: 0x6dede020, 0x30577: 0x6c26e620, + 0x30578: 0x6c86c620, 0x30579: 0x6cb14020, 0x3057a: 0x6cb14220, 0x3057b: 0x6cb14420, + 0x3057c: 0x6d0ec220, 0x3057d: 0x6d3d1820, 0x3057e: 0x6d698620, 0x3057f: 0x6db6a020, + // Block 0xc16, offset 0x30580 + 0x30580: 0x6db6a220, 0x30581: 0x6db6a420, 0x30582: 0x6dd50020, 0x30583: 0x6dede220, + 0x30584: 0x6e221820, 0x30585: 0x6e2c7820, 0x30586: 0x6c26ea20, 0x30587: 0x6c86ce20, + 0x30588: 0x6c86d020, 0x30589: 0x6cb15220, 0x3058a: 0x6d0ecc20, 0x3058b: 0x6d0ece20, + 0x3058c: 0x6d699820, 0x3058d: 0x6d699a20, 0x3058e: 0x6d699c20, 0x3058f: 0x6db6b420, + 0x30590: 0x6dd50420, 0x30591: 0x6e02ba20, 0x30592: 0x6e3a5620, 0x30593: 0x6e411420, + 0x30594: 0x6e431e20, 0x30595: 0x6c26ec20, 0x30596: 0x6c40b820, 0x30597: 0x6c86da20, + 0x30598: 0x6cb15c20, 0x30599: 0x6cb15e20, 0x3059a: 0x6cb16020, 0x3059b: 0x6cb16220, + 0x3059c: 0x6cb16420, 0x3059d: 0x6cb16620, 0x3059e: 0x6ce05e20, 0x3059f: 0x6ce06020, + 0x305a0: 0x6ce06220, 0x305a1: 0x6ce06420, 0x305a2: 0x6d0ed820, 0x305a3: 0x6d0eda20, + 0x305a4: 0x6d0edc20, 0x305a5: 0x6d0ede20, 0x305a6: 0x6d0ee020, 0x305a7: 0x6d3d2c20, + 0x305a8: 0x6d3d2e20, 0x305a9: 0x6d3d3020, 0x305aa: 0x6d3d3220, 0x305ab: 0x6d932420, + 0x305ac: 0x6d69da20, 0x305ad: 0x6d932620, 0x305ae: 0x6d932820, 0x305af: 0x6db6c620, + 0x305b0: 0x6db6c820, 0x305b1: 0x6db6ca20, 0x305b2: 0x6db6cc20, 0x305b3: 0x6db6ce20, + 0x305b4: 0x6dd51620, 0x305b5: 0x6dd51820, 0x305b6: 0x6dee1620, 0x305b7: 0x6dee0a20, + 0x305b8: 0x6c26f220, 0x305b9: 0x6c86e420, 0x305ba: 0x6c86e620, 0x305bb: 0x6c86e820, + 0x305bc: 0x6cb18020, 0x305bd: 0x6cb18220, 0x305be: 0x6ce07e20, 0x305bf: 0x6ce08020, + // Block 0xc17, offset 0x305c0 + 0x305c0: 0x6ce08220, 0x305c1: 0x6ce08420, 0x305c2: 0x6ce08620, 0x305c3: 0x6ce08820, + 0x305c4: 0x6d0efe20, 0x305c5: 0x6d0f0020, 0x305c6: 0x6d0f0220, 0x305c7: 0x6d0f0420, + 0x305c8: 0x6d0f0620, 0x305c9: 0x6d0f0820, 0x305ca: 0x6d0f0a20, 0x305cb: 0x6d3d5020, + 0x305cc: 0x6d3d5220, 0x305cd: 0x6d3d5420, 0x305ce: 0x6d69e020, 0x305cf: 0x6d69e220, + 0x305d0: 0x6d934220, 0x305d1: 0x6d934420, 0x305d2: 0x6d934620, 0x305d3: 0x6d934820, + 0x305d4: 0x6db6e420, 0x305d5: 0x6db6e620, 0x305d6: 0x6db6e820, 0x305d7: 0x6dd52c20, + 0x305d8: 0x6dd52e20, 0x305d9: 0x6dd53020, 0x305da: 0x6dee2020, 0x305db: 0x6e3a6620, + 0x305dc: 0x6e411c20, 0x305dd: 0x6c26f420, 0x305de: 0x6c60c820, 0x305df: 0x6c60ca20, + 0x305e0: 0x6c60cc20, 0x305e1: 0x6c86f020, 0x305e2: 0x6c86f220, 0x305e3: 0x6c86f420, + 0x305e4: 0x6c86f620, 0x305e5: 0x6cb19820, 0x305e6: 0x6cb19a20, 0x305e7: 0x6cb19c20, + 0x305e8: 0x6cb19e20, 0x305e9: 0x6cb1a020, 0x305ea: 0x6cb1a220, 0x305eb: 0x6cb1a420, + 0x305ec: 0x6cb1a620, 0x305ed: 0x6cb1a820, 0x305ee: 0x6cb1aa20, 0x305ef: 0x6ce0bc20, + 0x305f0: 0x6ce0be20, 0x305f1: 0x6ce0c020, 0x305f2: 0x6d0f2620, 0x305f3: 0x6ce0c220, + 0x305f4: 0x6ce0c420, 0x305f5: 0x6ce0c620, 0x305f6: 0x6ce0c820, 0x305f7: 0x6ce0ca20, + 0x305f8: 0x6ce0cc20, 0x305f9: 0x6ce0ce20, 0x305fa: 0x6ce0d020, 0x305fb: 0x6ce0d220, + 0x305fc: 0x6ce0d420, 0x305fd: 0x6ce0d620, 0x305fe: 0x6ce0d820, 0x305ff: 0x6ce0da20, + // Block 0xc18, offset 0x30600 + 0x30600: 0x6ce0dc20, 0x30601: 0x6ce0de20, 0x30602: 0x6d0f2e20, 0x30603: 0x6d0f3020, + 0x30604: 0x6d0f3220, 0x30605: 0x6d0f3420, 0x30606: 0x6d0f3620, 0x30607: 0x6d0f3820, + 0x30608: 0x6d0f3a20, 0x30609: 0x6d0f3c20, 0x3060a: 0x6d0f3e20, 0x3060b: 0x6d0f4020, + 0x3060c: 0x6d0f4220, 0x3060d: 0x6d0f4420, 0x3060e: 0x6d0f4620, 0x3060f: 0x6d3d7c20, + 0x30610: 0x6d3d7e20, 0x30611: 0x6d3d8020, 0x30612: 0x6d3d8220, 0x30613: 0x6d3d8420, + 0x30614: 0x6d3d8620, 0x30615: 0x6d3d8820, 0x30616: 0x6d3d8a20, 0x30617: 0x6d3d8c20, + 0x30618: 0x6d3d8e20, 0x30619: 0x6d6a1420, 0x3061a: 0x6d6a1620, 0x3061b: 0x6d6a1820, + 0x3061c: 0x6d6a1a20, 0x3061d: 0x6d6a1c20, 0x3061e: 0x6d6a1e20, 0x3061f: 0x6d6a2020, + 0x30620: 0x6d6a2220, 0x30621: 0x6d6a2420, 0x30622: 0x6d6a2620, 0x30623: 0x6d6a2820, + 0x30624: 0x6d6a2a20, 0x30625: 0x6d6a2c20, 0x30626: 0x6d6a2e20, 0x30627: 0x6d6a3020, + 0x30628: 0x6d6a3220, 0x30629: 0x6d6a3420, 0x3062a: 0x6d6a3620, 0x3062b: 0x6d6a3820, + 0x3062c: 0x6d6a3a20, 0x3062d: 0x6d6a6c20, 0x3062e: 0x6d937220, 0x3062f: 0x6d937420, + 0x30630: 0x6d937620, 0x30631: 0x6d937820, 0x30632: 0x6d937a20, 0x30633: 0x6d937c20, + 0x30634: 0x6d937e20, 0x30635: 0x6d938020, 0x30636: 0x6db70820, 0x30637: 0x6db70a20, + 0x30638: 0x6db70c20, 0x30639: 0x6db70e20, 0x3063a: 0x6db71020, 0x3063b: 0x6db71220, + 0x3063c: 0x6db71420, 0x3063d: 0x6db71620, 0x3063e: 0x6dd54820, 0x3063f: 0x6dd54a20, + // Block 0xc19, offset 0x30640 + 0x30640: 0x6dd54c20, 0x30641: 0x6dc6ba20, 0x30642: 0x6dd54e20, 0x30643: 0x6dd55020, + 0x30644: 0x6dd55220, 0x30645: 0x6dd55420, 0x30646: 0x6dee3820, 0x30647: 0x6dee3a20, + 0x30648: 0x6dee3c20, 0x30649: 0x6dee3e20, 0x3064a: 0x6dee4020, 0x3064b: 0x6dee4220, + 0x3064c: 0x6dee4420, 0x3064d: 0x6e02e420, 0x3064e: 0x6e02e620, 0x3064f: 0x6e02e820, + 0x30650: 0x6e148420, 0x30651: 0x6e148620, 0x30652: 0x6e148820, 0x30653: 0x6e148a20, + 0x30654: 0x6e148c20, 0x30655: 0x6e223220, 0x30656: 0x6e223420, 0x30657: 0x6e223620, + 0x30658: 0x6e223820, 0x30659: 0x6e2c8c20, 0x3065a: 0x6e2c8e20, 0x3065b: 0x6e34b020, + 0x3065c: 0x6e3a6820, 0x3065d: 0x6c051820, 0x3065e: 0x6c150020, 0x3065f: 0x6c150220, + 0x30660: 0x6c150420, 0x30661: 0x6c26f620, 0x30662: 0x6c26f820, 0x30663: 0x6c40c020, + 0x30664: 0x6c40c220, 0x30665: 0x6c40c420, 0x30666: 0x6c40c620, 0x30667: 0x6c40c820, + 0x30668: 0x6c40ca20, 0x30669: 0x6c40cc20, 0x3066a: 0x6c40ce20, 0x3066b: 0x6c40d020, + 0x3066c: 0x6c40d220, 0x3066d: 0x6c40d420, 0x3066e: 0x6c40d620, 0x3066f: 0x6c40d820, + 0x30670: 0x6c60dc20, 0x30671: 0x6c60de20, 0x30672: 0x6c60e020, 0x30673: 0x6c60e220, + 0x30674: 0x6c60e420, 0x30675: 0x6c60e620, 0x30676: 0x6c60e820, 0x30677: 0x6c60ea20, + 0x30678: 0x6c60ec20, 0x30679: 0x6c60ee20, 0x3067a: 0x6c60f020, 0x3067b: 0x6c60f220, + 0x3067c: 0x6c871020, 0x3067d: 0x6c871220, 0x3067e: 0x6c871420, 0x3067f: 0x6c871620, + // Block 0xc1a, offset 0x30680 + 0x30680: 0x6c871820, 0x30681: 0x6c871a20, 0x30682: 0x6c871c20, 0x30683: 0x6c871e20, + 0x30684: 0x6c872020, 0x30685: 0x6c872220, 0x30686: 0x6c872420, 0x30687: 0x6cb1dc20, + 0x30688: 0x6cb1de20, 0x30689: 0x6cb1e020, 0x3068a: 0x6cb1e220, 0x3068b: 0x6ce11820, + 0x3068c: 0x6ce11a20, 0x3068d: 0x6ce11c20, 0x3068e: 0x6ce11e20, 0x3068f: 0x6ce12020, + 0x30690: 0x6ce12220, 0x30691: 0x6ce12420, 0x30692: 0x6ce12620, 0x30693: 0x6ce12820, + 0x30694: 0x6ce12a20, 0x30695: 0x6ce12c20, 0x30696: 0x6d0f9220, 0x30697: 0x6d0f9420, + 0x30698: 0x6d3dc220, 0x30699: 0x6d3dc420, 0x3069a: 0x6d3dc620, 0x3069b: 0x6d3dc820, + 0x3069c: 0x6d6a7220, 0x3069d: 0x6d93c220, 0x3069e: 0x6d93c420, 0x3069f: 0x6d93c620, + 0x306a0: 0x6d93c820, 0x306a1: 0x6db74020, 0x306a2: 0x6db74220, 0x306a3: 0x6e14a420, + 0x306a4: 0x6c26fa20, 0x306a5: 0x6cb1e820, 0x306a6: 0x6cb1ea20, 0x306a7: 0x6cb1ec20, + 0x306a8: 0x6d0f9a20, 0x306a9: 0x6d0f9c20, 0x306aa: 0x6d0f9e20, 0x306ab: 0x6d3dce20, + 0x306ac: 0x6d93cc20, 0x306ad: 0x6d6a8220, 0x306ae: 0x6d93ce20, 0x306af: 0x6db74420, + 0x306b0: 0x6c26fc20, 0x306b1: 0x6c150620, 0x306b2: 0x6c60fe20, 0x306b3: 0x6c610020, + 0x306b4: 0x6c610220, 0x306b5: 0x6c610420, 0x306b6: 0x6c872e20, 0x306b7: 0x6c873020, + 0x306b8: 0x6c873220, 0x306b9: 0x6cb1fa20, 0x306ba: 0x6cb1fc20, 0x306bb: 0x6cb1fe20, + 0x306bc: 0x6cb20020, 0x306bd: 0x6cb20220, 0x306be: 0x6cb20420, 0x306bf: 0x6cb20620, + // Block 0xc1b, offset 0x306c0 + 0x306c0: 0x6ce14e20, 0x306c1: 0x6ce15020, 0x306c2: 0x6ce15220, 0x306c3: 0x6ce15420, + 0x306c4: 0x6ce15620, 0x306c5: 0x6ce15820, 0x306c6: 0x6ce15a20, 0x306c7: 0x6ce15c20, + 0x306c8: 0x6ce15e20, 0x306c9: 0x6ce16020, 0x306ca: 0x6ce16220, 0x306cb: 0x6ce16420, + 0x306cc: 0x6d0fb420, 0x306cd: 0x6d0fb620, 0x306ce: 0x6d0fb820, 0x306cf: 0x6d0fba20, + 0x306d0: 0x6d0fbc20, 0x306d1: 0x6d0fbe20, 0x306d2: 0x6d0fc020, 0x306d3: 0x6d0fc220, + 0x306d4: 0x6d0fc420, 0x306d5: 0x6d3de820, 0x306d6: 0x6d3dea20, 0x306d7: 0x6d3dec20, + 0x306d8: 0x6d3dee20, 0x306d9: 0x6d3df020, 0x306da: 0x6d3df220, 0x306db: 0x6d6a9020, + 0x306dc: 0x6d6a9220, 0x306dd: 0x6d6a9420, 0x306de: 0x6d6a9620, 0x306df: 0x6d6a9820, + 0x306e0: 0x6d6a9a20, 0x306e1: 0x6d6a9c20, 0x306e2: 0x6d6a9e20, 0x306e3: 0x6d6aa020, + 0x306e4: 0x6d6aa220, 0x306e5: 0x6d93e420, 0x306e6: 0x6d93e620, 0x306e7: 0x6d93e820, + 0x306e8: 0x6db75620, 0x306e9: 0x6dd5dc20, 0x306ea: 0x6dee8820, 0x306eb: 0x6dee8a20, + 0x306ec: 0x6dee8c20, 0x306ed: 0x6dee8e20, 0x306ee: 0x6e031220, 0x306ef: 0x6e14b020, + 0x306f0: 0x6e14b220, 0x306f1: 0x6e2cb020, 0x306f2: 0x6e3e4a20, 0x306f3: 0x6c270220, + 0x306f4: 0x6c611a20, 0x306f5: 0x6c875420, 0x306f6: 0x6c875620, 0x306f7: 0x6c875820, + 0x306f8: 0x6c875a20, 0x306f9: 0x6cb24e20, 0x306fa: 0x6cb25020, 0x306fb: 0x6cb25220, + 0x306fc: 0x6d101620, 0x306fd: 0x6cb25420, 0x306fe: 0x6cb25620, 0x306ff: 0x6cb25820, + // Block 0xc1c, offset 0x30700 + 0x30700: 0x6cb25a20, 0x30701: 0x6cb25c20, 0x30702: 0x6cb25e20, 0x30703: 0x6cb26020, + 0x30704: 0x6cb26220, 0x30705: 0x6ce1ba20, 0x30706: 0x6ce1bc20, 0x30707: 0x6ce1be20, + 0x30708: 0x6ce1c020, 0x30709: 0x6ce1c220, 0x3070a: 0x6ce1c420, 0x3070b: 0x6ce1c620, + 0x3070c: 0x6ce1c820, 0x3070d: 0x6ce1ca20, 0x3070e: 0x6ce1cc20, 0x3070f: 0x6ce1ce20, + 0x30710: 0x6d100820, 0x30711: 0x6ce1d020, 0x30712: 0x6ce1d220, 0x30713: 0x6ce1d420, + 0x30714: 0x6ce1d620, 0x30715: 0x6ce1d820, 0x30716: 0x6ce1da20, 0x30717: 0x6ce1dc20, + 0x30718: 0x6ce1de20, 0x30719: 0x6ce1e020, 0x3071a: 0x6ce1e220, 0x3071b: 0x6ce1e420, + 0x3071c: 0x6ce1e620, 0x3071d: 0x6ce1e820, 0x3071e: 0x6ce1ea20, 0x3071f: 0x6d101820, + 0x30720: 0x6d101a20, 0x30721: 0x6d101c20, 0x30722: 0x6d101e20, 0x30723: 0x6d102020, + 0x30724: 0x6d102220, 0x30725: 0x6d102420, 0x30726: 0x6d102620, 0x30727: 0x6d102820, + 0x30728: 0x6d102a20, 0x30729: 0x6d102c20, 0x3072a: 0x6d102e20, 0x3072b: 0x6d103020, + 0x3072c: 0x6d103220, 0x3072d: 0x6d103420, 0x3072e: 0x6d103620, 0x3072f: 0x6d103820, + 0x30730: 0x6d103a20, 0x30731: 0x6d103c20, 0x30732: 0x6d103e20, 0x30733: 0x6d104020, + 0x30734: 0x6d104220, 0x30735: 0x6ce1ec20, 0x30736: 0x6d104420, 0x30737: 0x6d104620, + 0x30738: 0x6d104820, 0x30739: 0x6d104a20, 0x3073a: 0x6d104c20, 0x3073b: 0x6d104e20, + 0x3073c: 0x6d3e4c20, 0x3073d: 0x6d3e4e20, 0x3073e: 0x6d3e5020, 0x3073f: 0x6d3e5220, + // Block 0xc1d, offset 0x30740 + 0x30740: 0x6d3e5420, 0x30741: 0x6d3e5620, 0x30742: 0x6d3e5820, 0x30743: 0x6d3e5a20, + 0x30744: 0x6d3e5c20, 0x30745: 0x6d3e5e20, 0x30746: 0x6d3e6020, 0x30747: 0x6d3e6220, + 0x30748: 0x6d3e6420, 0x30749: 0x6d3e6620, 0x3074a: 0x6d3e6820, 0x3074b: 0x6d3e6a20, + 0x3074c: 0x6d3e6c20, 0x3074d: 0x6d3e6e20, 0x3074e: 0x6d3e7020, 0x3074f: 0x6d6afa20, + 0x30750: 0x6d6afc20, 0x30751: 0x6d6afe20, 0x30752: 0x6d6b0020, 0x30753: 0x6d6b0220, + 0x30754: 0x6d6b0420, 0x30755: 0x6d6b0620, 0x30756: 0x6d6b0820, 0x30757: 0x6d6b0a20, + 0x30758: 0x6d6b0c20, 0x30759: 0x6d6b0e20, 0x3075a: 0x6d6b1020, 0x3075b: 0x6d6b1220, + 0x3075c: 0x6d6b1420, 0x3075d: 0x6d6b1620, 0x3075e: 0x6d6b1820, 0x3075f: 0x6d6b1a20, + 0x30760: 0x6d6b1c20, 0x30761: 0x6d6b1e20, 0x30762: 0x6d6b2020, 0x30763: 0x6d6b2220, + 0x30764: 0x6d6b2420, 0x30765: 0x6d6b2620, 0x30766: 0x6d6b2820, 0x30767: 0x6d6b2a20, + 0x30768: 0x6d6b2c20, 0x30769: 0x6d6b2e20, 0x3076a: 0x6d6b3020, 0x3076b: 0x6d6b9820, + 0x3076c: 0x6d6b3220, 0x3076d: 0x6d6b3420, 0x3076e: 0x6d6b3620, 0x3076f: 0x6d6b3820, + 0x30770: 0x6d944620, 0x30771: 0x6d944820, 0x30772: 0x6d944a20, 0x30773: 0x6d944c20, + 0x30774: 0x6d944e20, 0x30775: 0x6d945020, 0x30776: 0x6d945220, 0x30777: 0x6d6b9a20, + 0x30778: 0x6d945420, 0x30779: 0x6d945620, 0x3077a: 0x6d6b3a20, 0x3077b: 0x6d945820, + 0x3077c: 0x6d945a20, 0x3077d: 0x6d945c20, 0x3077e: 0x6d945e20, 0x3077f: 0x6d946020, + // Block 0xc1e, offset 0x30780 + 0x30780: 0x6d946220, 0x30781: 0x6d946420, 0x30782: 0x6d946620, 0x30783: 0x6d946820, + 0x30784: 0x6d946a20, 0x30785: 0x6d946c20, 0x30786: 0x6db79220, 0x30787: 0x6db79420, + 0x30788: 0x6db79620, 0x30789: 0x6db79820, 0x3078a: 0x6db79a20, 0x3078b: 0x6db79c20, + 0x3078c: 0x6db79e20, 0x3078d: 0x6db7a020, 0x3078e: 0x6db7a220, 0x3078f: 0x6db7a420, + 0x30790: 0x6db7a620, 0x30791: 0x6db7a820, 0x30792: 0x6db7aa20, 0x30793: 0x6db7ac20, + 0x30794: 0x6dd5e820, 0x30795: 0x6dd5ea20, 0x30796: 0x6dd5ec20, 0x30797: 0x6dd5ee20, + 0x30798: 0x6dd5f020, 0x30799: 0x6dd5f220, 0x3079a: 0x6dd5f420, 0x3079b: 0x6dd5f620, + 0x3079c: 0x6dd5f820, 0x3079d: 0x6dd5fa20, 0x3079e: 0x6dd5fc20, 0x3079f: 0x6dd5fe20, + 0x307a0: 0x6dd60020, 0x307a1: 0x6dd60220, 0x307a2: 0x6dd60420, 0x307a3: 0x6dd60620, + 0x307a4: 0x6dd60820, 0x307a5: 0x6dd60a20, 0x307a6: 0x6dd60c20, 0x307a7: 0x6dd60e20, + 0x307a8: 0x6deec820, 0x307a9: 0x6dd6aa20, 0x307aa: 0x6deeca20, 0x307ab: 0x6deecc20, + 0x307ac: 0x6deece20, 0x307ad: 0x6deed020, 0x307ae: 0x6dd61020, 0x307af: 0x6deed220, + 0x307b0: 0x6deed420, 0x307b1: 0x6deed620, 0x307b2: 0x6deed820, 0x307b3: 0x6deeda20, + 0x307b4: 0x6deedc20, 0x307b5: 0x6deede20, 0x307b6: 0x6deee020, 0x307b7: 0x6deee220, + 0x307b8: 0x6deee420, 0x307b9: 0x6deee620, 0x307ba: 0x6deee820, 0x307bb: 0x6deeea20, + 0x307bc: 0x6deeec20, 0x307bd: 0x6deeee20, 0x307be: 0x6deef020, 0x307bf: 0x6deef220, + // Block 0xc1f, offset 0x307c0 + 0x307c0: 0x6dd61220, 0x307c1: 0x6e033020, 0x307c2: 0x6e033220, 0x307c3: 0x6e033420, + 0x307c4: 0x6e033620, 0x307c5: 0x6e033820, 0x307c6: 0x6e033a20, 0x307c7: 0x6def6820, + 0x307c8: 0x6e033c20, 0x307c9: 0x6e033e20, 0x307ca: 0x6e14c820, 0x307cb: 0x6e14ca20, + 0x307cc: 0x6e14cc20, 0x307cd: 0x6e14ce20, 0x307ce: 0x6e14d020, 0x307cf: 0x6e14d220, + 0x307d0: 0x6e227220, 0x307d1: 0x6e227420, 0x307d2: 0x6e227620, 0x307d3: 0x6e227820, + 0x307d4: 0x6e227a20, 0x307d5: 0x6e227c20, 0x307d6: 0x6e227e20, 0x307d7: 0x6e22aa20, + 0x307d8: 0x6e2cc220, 0x307d9: 0x6e2cc420, 0x307da: 0x6e22ac20, 0x307db: 0x6e2cc620, + 0x307dc: 0x6e2cc820, 0x307dd: 0x6e34c220, 0x307de: 0x6e34c420, 0x307df: 0x6e34c620, + 0x307e0: 0x6e34c820, 0x307e1: 0x6e3a7c20, 0x307e2: 0x6e3a7e20, 0x307e3: 0x6e3a8020, + 0x307e4: 0x6e3a8220, 0x307e5: 0x6e3a8420, 0x307e6: 0x6e3e4c20, 0x307e7: 0x6e3e4e20, + 0x307e8: 0x6e432420, 0x307e9: 0x6e412220, 0x307ea: 0x6e412420, 0x307eb: 0x6c270620, + 0x307ec: 0x6c878020, 0x307ed: 0x6cb2aa20, 0x307ee: 0x6cb2ac20, 0x307ef: 0x6cb2ae20, + 0x307f0: 0x6ce24420, 0x307f1: 0x6d10b820, 0x307f2: 0x6d10ba20, 0x307f3: 0x6d3ee220, + 0x307f4: 0x6d3ee420, 0x307f5: 0x6d3ee620, 0x307f6: 0x6d6b9e20, 0x307f7: 0x6d6ba020, + 0x307f8: 0x6d6ba220, 0x307f9: 0x6d6ba420, 0x307fa: 0x6d6ba620, 0x307fb: 0x6d6ba820, + 0x307fc: 0x6d6baa20, 0x307fd: 0x6d94e420, 0x307fe: 0x6d94e620, 0x307ff: 0x6dd6ac20, + // Block 0xc20, offset 0x30800 + 0x30800: 0x6dd6ae20, 0x30801: 0x6dd6b020, 0x30802: 0x6def6c20, 0x30803: 0x6def6e20, + 0x30804: 0x6def7020, 0x30805: 0x6def7220, 0x30806: 0x6e039c20, 0x30807: 0x6e150620, + 0x30808: 0x6e34de20, 0x30809: 0x6e412c20, 0x3080a: 0x6c270e20, 0x3080b: 0x6c40e420, + 0x3080c: 0x6c613220, 0x3080d: 0x6c613420, 0x3080e: 0x6c878e20, 0x3080f: 0x6c879020, + 0x30810: 0x6c879220, 0x30811: 0x6c879420, 0x30812: 0x6c879620, 0x30813: 0x6c879820, + 0x30814: 0x6c879a20, 0x30815: 0x6c879c20, 0x30816: 0x6cb2e420, 0x30817: 0x6cb2e620, + 0x30818: 0x6cb2e820, 0x30819: 0x6cb2ea20, 0x3081a: 0x6cb2ec20, 0x3081b: 0x6cb2ee20, + 0x3081c: 0x6cb2f020, 0x3081d: 0x6cb2f220, 0x3081e: 0x6cb2f420, 0x3081f: 0x6cb2f620, + 0x30820: 0x6cb2f820, 0x30821: 0x6cb2fa20, 0x30822: 0x6cb2fc20, 0x30823: 0x6cb2fe20, + 0x30824: 0x6ce26c20, 0x30825: 0x6ce26e20, 0x30826: 0x6ce27020, 0x30827: 0x6ce27220, + 0x30828: 0x6ce27420, 0x30829: 0x6ce27620, 0x3082a: 0x6ce27820, 0x3082b: 0x6ce27a20, + 0x3082c: 0x6ce27c20, 0x3082d: 0x6d10ea20, 0x3082e: 0x6ce27e20, 0x3082f: 0x6ce28020, + 0x30830: 0x6ce28220, 0x30831: 0x6ce28420, 0x30832: 0x6ce28620, 0x30833: 0x6ce28820, + 0x30834: 0x6ce28a20, 0x30835: 0x6ce28c20, 0x30836: 0x6ce28e20, 0x30837: 0x6ce29020, + 0x30838: 0x6ce29220, 0x30839: 0x6ce29420, 0x3083a: 0x6ce29620, 0x3083b: 0x6ce29820, + 0x3083c: 0x6ce29a20, 0x3083d: 0x6ce29c20, 0x3083e: 0x6d10ec20, 0x3083f: 0x6d10ee20, + // Block 0xc21, offset 0x30840 + 0x30840: 0x6d10f020, 0x30841: 0x6d10f220, 0x30842: 0x6d10f420, 0x30843: 0x6d10f620, + 0x30844: 0x6d10f820, 0x30845: 0x6d10fa20, 0x30846: 0x6d10fc20, 0x30847: 0x6d10fe20, + 0x30848: 0x6d110020, 0x30849: 0x6d110220, 0x3084a: 0x6d110420, 0x3084b: 0x6d110620, + 0x3084c: 0x6d110820, 0x3084d: 0x6d3f0a20, 0x3084e: 0x6d3f0c20, 0x3084f: 0x6d3f0e20, + 0x30850: 0x6d3f1020, 0x30851: 0x6d3f1220, 0x30852: 0x6d3f1420, 0x30853: 0x6d3f1620, + 0x30854: 0x6d3f1820, 0x30855: 0x6d3f1a20, 0x30856: 0x6d6bd020, 0x30857: 0x6d6bd220, + 0x30858: 0x6d6bd420, 0x30859: 0x6d6bd620, 0x3085a: 0x6d6bd820, 0x3085b: 0x6d6bda20, + 0x3085c: 0x6d6bdc20, 0x3085d: 0x6d6bde20, 0x3085e: 0x6d6be020, 0x3085f: 0x6d6be220, + 0x30860: 0x6d6be420, 0x30861: 0x6d6be620, 0x30862: 0x6d6be820, 0x30863: 0x6d6bea20, + 0x30864: 0x6d6bec20, 0x30865: 0x6d6bee20, 0x30866: 0x6d6bf020, 0x30867: 0x6d6bf220, + 0x30868: 0x6d6bf420, 0x30869: 0x6d6bf620, 0x3086a: 0x6d6bf820, 0x3086b: 0x6d6bfa20, + 0x3086c: 0x6d6bfc20, 0x3086d: 0x6d950820, 0x3086e: 0x6d950a20, 0x3086f: 0x6d950c20, + 0x30870: 0x6d950e20, 0x30871: 0x6d951020, 0x30872: 0x6d951220, 0x30873: 0x6d951420, + 0x30874: 0x6d951620, 0x30875: 0x6d951820, 0x30876: 0x6d951a20, 0x30877: 0x6d951c20, + 0x30878: 0x6d951e20, 0x30879: 0x6d952020, 0x3087a: 0x6d952220, 0x3087b: 0x6d952420, + 0x3087c: 0x6d952620, 0x3087d: 0x6db84220, 0x3087e: 0x6db84420, 0x3087f: 0x6db84620, + // Block 0xc22, offset 0x30880 + 0x30880: 0x6db84820, 0x30881: 0x6db84a20, 0x30882: 0x6db84c20, 0x30883: 0x6db84e20, + 0x30884: 0x6db85020, 0x30885: 0x6db85220, 0x30886: 0x6dd6ce20, 0x30887: 0x6dd6d020, + 0x30888: 0x6dd6d220, 0x30889: 0x6dd6d420, 0x3088a: 0x6dd6d620, 0x3088b: 0x6dd6d820, + 0x3088c: 0x6dd6da20, 0x3088d: 0x6def9a20, 0x3088e: 0x6def9c20, 0x3088f: 0x6def9e20, + 0x30890: 0x6defa020, 0x30891: 0x6defa220, 0x30892: 0x6defa420, 0x30893: 0x6defa620, + 0x30894: 0x6defa820, 0x30895: 0x6e03ae20, 0x30896: 0x6e03b020, 0x30897: 0x6e03b220, + 0x30898: 0x6e03b420, 0x30899: 0x6e03b620, 0x3089a: 0x6e03b820, 0x3089b: 0x6e151820, + 0x3089c: 0x6e151a20, 0x3089d: 0x6e151c20, 0x3089e: 0x6e151e20, 0x3089f: 0x6e152020, + 0x308a0: 0x6e22b820, 0x308a1: 0x6e22ba20, 0x308a2: 0x6e22bc20, 0x308a3: 0x6e2cee20, + 0x308a4: 0x6e2cf020, 0x308a5: 0x6e413020, 0x308a6: 0x6c051a20, 0x308a7: 0x6c0a7e20, + 0x308a8: 0x6c150820, 0x308a9: 0x6c271020, 0x308aa: 0x6c271220, 0x308ab: 0x6c271420, + 0x308ac: 0x6c40e620, 0x308ad: 0x6c40e820, 0x308ae: 0x6c40ea20, 0x308af: 0x6c40ec20, + 0x308b0: 0x6c40ee20, 0x308b1: 0x6c614620, 0x308b2: 0x6c614820, 0x308b3: 0x6c614a20, + 0x308b4: 0x6c614c20, 0x308b5: 0x6c614e20, 0x308b6: 0x6c615020, 0x308b7: 0x6c615220, + 0x308b8: 0x6c615420, 0x308b9: 0x6c615620, 0x308ba: 0x6c615820, 0x308bb: 0x6c615a20, + 0x308bc: 0x6c87ba20, 0x308bd: 0x6c87bc20, 0x308be: 0x6c87be20, 0x308bf: 0x6c87c020, + // Block 0xc23, offset 0x308c0 + 0x308c0: 0x6c87c220, 0x308c1: 0x6c87c420, 0x308c2: 0x6c87c620, 0x308c3: 0x6c87c820, + 0x308c4: 0x6cb33a20, 0x308c5: 0x6cb33c20, 0x308c6: 0x6cb33e20, 0x308c7: 0x6ce2d820, + 0x308c8: 0x6ce2da20, 0x308c9: 0x6ce2dc20, 0x308ca: 0x6ce2de20, 0x308cb: 0x6ce2e020, + 0x308cc: 0x6ce2e220, 0x308cd: 0x6ce2e420, 0x308ce: 0x6ce2e620, 0x308cf: 0x6d113e20, + 0x308d0: 0x6d114020, 0x308d1: 0x6d114220, 0x308d2: 0x6d114420, 0x308d3: 0x6d114620, + 0x308d4: 0x6d114820, 0x308d5: 0x6d3f5e20, 0x308d6: 0x6d3f6020, 0x308d7: 0x6d3f6220, + 0x308d8: 0x6d6c4e20, 0x308d9: 0x6d957020, 0x308da: 0x6d957220, 0x308db: 0x6c271c20, + 0x308dc: 0x6ce2f020, 0x308dd: 0x6ce2f220, 0x308de: 0x6d114c20, 0x308df: 0x6d114e20, + 0x308e0: 0x6d115020, 0x308e1: 0x6d3f6820, 0x308e2: 0x6d3f6a20, 0x308e3: 0x6d3f6c20, + 0x308e4: 0x6d6c5620, 0x308e5: 0x6d957820, 0x308e6: 0x6d957a20, 0x308e7: 0x6d957c20, + 0x308e8: 0x6d957e20, 0x308e9: 0x6d958020, 0x308ea: 0x6d958220, 0x308eb: 0x6db89e20, + 0x308ec: 0x6dd71620, 0x308ed: 0x6defca20, 0x308ee: 0x6e03ee20, 0x308ef: 0x6e153620, + 0x308f0: 0x6c272020, 0x308f1: 0x6c87d620, 0x308f2: 0x6d116020, 0x308f3: 0x6d6c6220, + 0x308f4: 0x6defd620, 0x308f5: 0x6c272620, 0x308f6: 0x6c051e20, 0x308f7: 0x6c0a8020, + 0x308f8: 0x6c150a20, 0x308f9: 0x6c150c20, 0x308fa: 0x6c150e20, 0x308fb: 0x6c151020, + 0x308fc: 0x6c151220, 0x308fd: 0x6c151420, 0x308fe: 0x6c272e20, 0x308ff: 0x6c273020, + // Block 0xc24, offset 0x30900 + 0x30900: 0x6c273220, 0x30901: 0x6c273420, 0x30902: 0x6c273620, 0x30903: 0x6c273820, + 0x30904: 0x6c273a20, 0x30905: 0x6c273c20, 0x30906: 0x6c273e20, 0x30907: 0x6c274020, + 0x30908: 0x6c274220, 0x30909: 0x6c274420, 0x3090a: 0x6c410020, 0x3090b: 0x6c410220, + 0x3090c: 0x6c410420, 0x3090d: 0x6c410620, 0x3090e: 0x6c410820, 0x3090f: 0x6c410a20, + 0x30910: 0x6c410c20, 0x30911: 0x6c410e20, 0x30912: 0x6c411020, 0x30913: 0x6c411220, + 0x30914: 0x6c411420, 0x30915: 0x6c411620, 0x30916: 0x6c411820, 0x30917: 0x6c411a20, + 0x30918: 0x6c411c20, 0x30919: 0x6c411e20, 0x3091a: 0x6c412020, 0x3091b: 0x6c412220, + 0x3091c: 0x6c412420, 0x3091d: 0x6c412620, 0x3091e: 0x6c412820, 0x3091f: 0x6c412a20, + 0x30920: 0x6c616a20, 0x30921: 0x6c616c20, 0x30922: 0x6c616e20, 0x30923: 0x6c617020, + 0x30924: 0x6c617220, 0x30925: 0x6c617420, 0x30926: 0x6c617620, 0x30927: 0x6c617820, + 0x30928: 0x6c617a20, 0x30929: 0x6c617c20, 0x3092a: 0x6c617e20, 0x3092b: 0x6c618020, + 0x3092c: 0x6c412c20, 0x3092d: 0x6c618220, 0x3092e: 0x6c618420, 0x3092f: 0x6c618620, + 0x30930: 0x6c618820, 0x30931: 0x6c618a20, 0x30932: 0x6c618c20, 0x30933: 0x6c618e20, + 0x30934: 0x6c87e620, 0x30935: 0x6c87e820, 0x30936: 0x6c87ea20, 0x30937: 0x6c87ec20, + 0x30938: 0x6c87ee20, 0x30939: 0x6c87f020, 0x3093a: 0x6c87f220, 0x3093b: 0x6c87f420, + 0x3093c: 0x6c87f620, 0x3093d: 0x6c87f820, 0x3093e: 0x6c87fa20, 0x3093f: 0x6c87fc20, + // Block 0xc25, offset 0x30940 + 0x30940: 0x6c87fe20, 0x30941: 0x6c880020, 0x30942: 0x6c880220, 0x30943: 0x6c880420, + 0x30944: 0x6c880620, 0x30945: 0x6c880820, 0x30946: 0x6c880a20, 0x30947: 0x6c880c20, + 0x30948: 0x6c880e20, 0x30949: 0x6c881020, 0x3094a: 0x6c881220, 0x3094b: 0x6cb34e20, + 0x3094c: 0x6cb35020, 0x3094d: 0x6cb35220, 0x3094e: 0x6cb35420, 0x3094f: 0x6cb35620, + 0x30950: 0x6cb35820, 0x30951: 0x6cb35a20, 0x30952: 0x6cb35c20, 0x30953: 0x6cb35e20, + 0x30954: 0x6cb36020, 0x30955: 0x6cb36220, 0x30956: 0x6cb36420, 0x30957: 0x6cb36620, + 0x30958: 0x6cb36820, 0x30959: 0x6cb36a20, 0x3095a: 0x6cb36c20, 0x3095b: 0x6cb36e20, + 0x3095c: 0x6cb37020, 0x3095d: 0x6cb37220, 0x3095e: 0x6cb37420, 0x3095f: 0x6cb37620, + 0x30960: 0x6cb37820, 0x30961: 0x6cb37a20, 0x30962: 0x6cb37c20, 0x30963: 0x6cb37e20, + 0x30964: 0x6cb38020, 0x30965: 0x6cb38220, 0x30966: 0x6cb38420, 0x30967: 0x6cb38620, + 0x30968: 0x6ce30420, 0x30969: 0x6ce30620, 0x3096a: 0x6ce30820, 0x3096b: 0x6ce30a20, + 0x3096c: 0x6ce30c20, 0x3096d: 0x6ce30e20, 0x3096e: 0x6ce31020, 0x3096f: 0x6ce31220, + 0x30970: 0x6ce31420, 0x30971: 0x6ce31620, 0x30972: 0x6ce31820, 0x30973: 0x6ce31a20, + 0x30974: 0x6ce31c20, 0x30975: 0x6ce31e20, 0x30976: 0x6ce32020, 0x30977: 0x6ce32220, + 0x30978: 0x6ce32420, 0x30979: 0x6ce32620, 0x3097a: 0x6ce32820, 0x3097b: 0x6ce32a20, + 0x3097c: 0x6d116a20, 0x3097d: 0x6d116c20, 0x3097e: 0x6d116e20, 0x3097f: 0x6d117020, + // Block 0xc26, offset 0x30980 + 0x30980: 0x6d117220, 0x30981: 0x6d117420, 0x30982: 0x6d117620, 0x30983: 0x6d117820, + 0x30984: 0x6d117a20, 0x30985: 0x6d117c20, 0x30986: 0x6d117e20, 0x30987: 0x6d118020, + 0x30988: 0x6d118220, 0x30989: 0x6d118420, 0x3098a: 0x6d118620, 0x3098b: 0x6d118820, + 0x3098c: 0x6d118a20, 0x3098d: 0x6d118c20, 0x3098e: 0x6d118e20, 0x3098f: 0x6d119020, + 0x30990: 0x6d119220, 0x30991: 0x6d119420, 0x30992: 0x6d119620, 0x30993: 0x6d119820, + 0x30994: 0x6d119a20, 0x30995: 0x6d119c20, 0x30996: 0x6d119e20, 0x30997: 0x6d11a020, + 0x30998: 0x6d3f8020, 0x30999: 0x6d3f8220, 0x3099a: 0x6d3f8420, 0x3099b: 0x6d3f8620, + 0x3099c: 0x6d3f8820, 0x3099d: 0x6d3f8a20, 0x3099e: 0x6d3f8c20, 0x3099f: 0x6d3f8e20, + 0x309a0: 0x6d3f9020, 0x309a1: 0x6d3f9220, 0x309a2: 0x6d3f9420, 0x309a3: 0x6d3f9620, + 0x309a4: 0x6d3f9820, 0x309a5: 0x6d3f9a20, 0x309a6: 0x6d6c6e20, 0x309a7: 0x6d6c7020, + 0x309a8: 0x6d6c7220, 0x309a9: 0x6d6c7420, 0x309aa: 0x6d6c7620, 0x309ab: 0x6d6c7820, + 0x309ac: 0x6d6c7a20, 0x309ad: 0x6d6c7c20, 0x309ae: 0x6d6c7e20, 0x309af: 0x6d6c8020, + 0x309b0: 0x6d6c8220, 0x309b1: 0x6d6c8420, 0x309b2: 0x6d959e20, 0x309b3: 0x6d6c8620, + 0x309b4: 0x6d95a020, 0x309b5: 0x6d95a220, 0x309b6: 0x6d95a420, 0x309b7: 0x6d6c8820, + 0x309b8: 0x6d95a620, 0x309b9: 0x6d95a820, 0x309ba: 0x6d95aa20, 0x309bb: 0x6d95ac20, + 0x309bc: 0x6d95ae20, 0x309bd: 0x6db8b220, 0x309be: 0x6db8b420, 0x309bf: 0x6db8b620, + // Block 0xc27, offset 0x309c0 + 0x309c0: 0x6db8b820, 0x309c1: 0x6db8ba20, 0x309c2: 0x6db8bc20, 0x309c3: 0x6db8be20, + 0x309c4: 0x6db8c020, 0x309c5: 0x6db8c220, 0x309c6: 0x6d95b020, 0x309c7: 0x6dd72220, + 0x309c8: 0x6dd72420, 0x309c9: 0x6db8c420, 0x309ca: 0x6defdc20, 0x309cb: 0x6defde20, + 0x309cc: 0x6defe020, 0x309cd: 0x6e03fc20, 0x309ce: 0x6e153c20, 0x309cf: 0x6e2d0820, + 0x309d0: 0x6e2d0a20, 0x309d1: 0x6c278a20, 0x309d2: 0x6c0a8e20, 0x309d3: 0x6c0a9020, + 0x309d4: 0x6c153c20, 0x309d5: 0x6c886a20, 0x309d6: 0x6c153e20, 0x309d7: 0x6c154020, + 0x309d8: 0x6c154220, 0x309d9: 0x6c154420, 0x309da: 0x6c154620, 0x309db: 0x6c154820, + 0x309dc: 0x6c154a20, 0x309dd: 0x6c154c20, 0x309de: 0x6c279220, 0x309df: 0x6c279420, + 0x309e0: 0x6c279620, 0x309e1: 0x6c279820, 0x309e2: 0x6c279a20, 0x309e3: 0x6c279c20, + 0x309e4: 0x6c279e20, 0x309e5: 0x6c27a020, 0x309e6: 0x6c27a220, 0x309e7: 0x6c27a420, + 0x309e8: 0x6c27a620, 0x309e9: 0x6c27a820, 0x309ea: 0x6c27aa20, 0x309eb: 0x6cb3fc20, + 0x309ec: 0x6c27ac20, 0x309ed: 0x6c418220, 0x309ee: 0x6c418420, 0x309ef: 0x6c418620, + 0x309f0: 0x6c418820, 0x309f1: 0x6c418a20, 0x309f2: 0x6c418c20, 0x309f3: 0x6c418e20, + 0x309f4: 0x6c419020, 0x309f5: 0x6c419220, 0x309f6: 0x6c419420, 0x309f7: 0x6c419620, + 0x309f8: 0x6c419820, 0x309f9: 0x6c419a20, 0x309fa: 0x6c419c20, 0x309fb: 0x6c419e20, + 0x309fc: 0x6c61e020, 0x309fd: 0x6c61e220, 0x309fe: 0x6c61e420, 0x309ff: 0x6c61e620, + // Block 0xc28, offset 0x30a00 + 0x30a00: 0x6c61e820, 0x30a01: 0x6c61ea20, 0x30a02: 0x6c61ec20, 0x30a03: 0x6c61ee20, + 0x30a04: 0x6c61f020, 0x30a05: 0x6c61f220, 0x30a06: 0x6c61f420, 0x30a07: 0x6c61f620, + 0x30a08: 0x6c61f820, 0x30a09: 0x6c61fa20, 0x30a0a: 0x6c61fc20, 0x30a0b: 0x6c61fe20, + 0x30a0c: 0x6d11fe20, 0x30a0d: 0x6c620020, 0x30a0e: 0x6c620220, 0x30a0f: 0x6c620420, + 0x30a10: 0x6c620620, 0x30a11: 0x6c620820, 0x30a12: 0x6d400820, 0x30a13: 0x6c620a20, + 0x30a14: 0x6cb3fe20, 0x30a15: 0x6c620c20, 0x30a16: 0x6c887620, 0x30a17: 0x6c887820, + 0x30a18: 0x6c887a20, 0x30a19: 0x6c887c20, 0x30a1a: 0x6c887e20, 0x30a1b: 0x6c888020, + 0x30a1c: 0x6c888220, 0x30a1d: 0x6c888420, 0x30a1e: 0x6c888620, 0x30a1f: 0x6c888820, + 0x30a20: 0x6c888a20, 0x30a21: 0x6c888c20, 0x30a22: 0x6c888e20, 0x30a23: 0x6c889020, + 0x30a24: 0x6c889220, 0x30a25: 0x6c889420, 0x30a26: 0x6c889620, 0x30a27: 0x6c889820, + 0x30a28: 0x6cb40c20, 0x30a29: 0x6cb40e20, 0x30a2a: 0x6cb41020, 0x30a2b: 0x6cb41220, + 0x30a2c: 0x6cb41420, 0x30a2d: 0x6cb41620, 0x30a2e: 0x6cb41820, 0x30a2f: 0x6cb41a20, + 0x30a30: 0x6cb41c20, 0x30a31: 0x6c625420, 0x30a32: 0x6cb41e20, 0x30a33: 0x6cb42020, + 0x30a34: 0x6cb42220, 0x30a35: 0x6ce3be20, 0x30a36: 0x6d6cf820, 0x30a37: 0x6cb42420, + 0x30a38: 0x6cb42620, 0x30a39: 0x6ce3c620, 0x30a3a: 0x6d95fa20, 0x30a3b: 0x6ce3c820, + 0x30a3c: 0x6ce3ca20, 0x30a3d: 0x6cb42820, 0x30a3e: 0x6ce3cc20, 0x30a3f: 0x6ce3ce20, + // Block 0xc29, offset 0x30a40 + 0x30a40: 0x6ce3d020, 0x30a41: 0x6ce3d220, 0x30a42: 0x6ce3d420, 0x30a43: 0x6ce3d620, + 0x30a44: 0x6ce3d820, 0x30a45: 0x6ce3da20, 0x30a46: 0x6ce3dc20, 0x30a47: 0x6ce3de20, + 0x30a48: 0x6ce3e020, 0x30a49: 0x6ce3e220, 0x30a4a: 0x6ce3e420, 0x30a4b: 0x6d120820, + 0x30a4c: 0x6d120a20, 0x30a4d: 0x6d120c20, 0x30a4e: 0x6d120e20, 0x30a4f: 0x6d121020, + 0x30a50: 0x6d121220, 0x30a51: 0x6d121420, 0x30a52: 0x6d121620, 0x30a53: 0x6d121820, + 0x30a54: 0x6d121a20, 0x30a55: 0x6d121c20, 0x30a56: 0x6d121e20, 0x30a57: 0x6d122020, + 0x30a58: 0x6d401420, 0x30a59: 0x6d401620, 0x30a5a: 0x6d401820, 0x30a5b: 0x6d401a20, + 0x30a5c: 0x6d401c20, 0x30a5d: 0x6d401e20, 0x30a5e: 0x6d402020, 0x30a5f: 0x6d402220, + 0x30a60: 0x6d402420, 0x30a61: 0x6d402620, 0x30a62: 0x6d402820, 0x30a63: 0x6d402a20, + 0x30a64: 0x6d402c20, 0x30a65: 0x6d402e20, 0x30a66: 0x6d6d0220, 0x30a67: 0x6d6d0420, + 0x30a68: 0x6dd75620, 0x30a69: 0x6d6d0620, 0x30a6a: 0x6d6d0820, 0x30a6b: 0x6d6d0a20, + 0x30a6c: 0x6ce41e20, 0x30a6d: 0x6d6d0c20, 0x30a6e: 0x6d6d0e20, 0x30a6f: 0x6d6d1020, + 0x30a70: 0x6d6d1220, 0x30a71: 0x6d6d1420, 0x30a72: 0x6d6d1620, 0x30a73: 0x6d95fe20, + 0x30a74: 0x6d960020, 0x30a75: 0x6d960220, 0x30a76: 0x6d960420, 0x30a77: 0x6d960620, + 0x30a78: 0x6db90820, 0x30a79: 0x6db90a20, 0x30a7a: 0x6dd75820, 0x30a7b: 0x6dd75a20, + 0x30a7c: 0x6dd75c20, 0x30a7d: 0x6dd75e20, 0x30a7e: 0x6dd76020, 0x30a7f: 0x6deff620, + // Block 0xc2a, offset 0x30a80 + 0x30a80: 0x6deff820, 0x30a81: 0x6e042620, 0x30a82: 0x6deffa20, 0x30a83: 0x6e042820, + 0x30a84: 0x6e154e20, 0x30a85: 0x6e155020, 0x30a86: 0x6e155220, 0x30a87: 0x6e22ea20, + 0x30a88: 0x6e22ec20, 0x30a89: 0x6c27ec20, 0x30a8a: 0x6c625a20, 0x30a8b: 0x6c625c20, + 0x30a8c: 0x6c88ee20, 0x30a8d: 0x6c88f020, 0x30a8e: 0x6c88f220, 0x30a8f: 0x6c88f420, + 0x30a90: 0x6c88f620, 0x30a91: 0x6c88f820, 0x30a92: 0x6c88fa20, 0x30a93: 0x6cb47e20, + 0x30a94: 0x6cb48020, 0x30a95: 0x6cb48220, 0x30a96: 0x6cb48420, 0x30a97: 0x6cb48620, + 0x30a98: 0x6cb48820, 0x30a99: 0x6cb48a20, 0x30a9a: 0x6cb48c20, 0x30a9b: 0x6cb48e20, + 0x30a9c: 0x6cb49020, 0x30a9d: 0x6cb49220, 0x30a9e: 0x6cb49420, 0x30a9f: 0x6ce42a20, + 0x30aa0: 0x6ce42c20, 0x30aa1: 0x6ce42e20, 0x30aa2: 0x6ce43020, 0x30aa3: 0x6ce43220, + 0x30aa4: 0x6ce43420, 0x30aa5: 0x6ce43620, 0x30aa6: 0x6d127820, 0x30aa7: 0x6d127a20, + 0x30aa8: 0x6d127c20, 0x30aa9: 0x6d127e20, 0x30aaa: 0x6d128020, 0x30aab: 0x6d128220, + 0x30aac: 0x6d128420, 0x30aad: 0x6d128620, 0x30aae: 0x6d128820, 0x30aaf: 0x6d128a20, + 0x30ab0: 0x6d128c20, 0x30ab1: 0x6d128e20, 0x30ab2: 0x6d407e20, 0x30ab3: 0x6d408020, + 0x30ab4: 0x6d408220, 0x30ab5: 0x6d408420, 0x30ab6: 0x6d408620, 0x30ab7: 0x6d408820, + 0x30ab8: 0x6d408a20, 0x30ab9: 0x6d408c20, 0x30aba: 0x6d408e20, 0x30abb: 0x6d409020, + 0x30abc: 0x6d409220, 0x30abd: 0x6d409420, 0x30abe: 0x6d409620, 0x30abf: 0x6d409820, + // Block 0xc2b, offset 0x30ac0 + 0x30ac0: 0x6d6d5020, 0x30ac1: 0x6d6d5220, 0x30ac2: 0x6d6d5420, 0x30ac3: 0x6d6d5620, + 0x30ac4: 0x6d6d5820, 0x30ac5: 0x6d6d5a20, 0x30ac6: 0x6d6d5c20, 0x30ac7: 0x6d6d5e20, + 0x30ac8: 0x6d6d6020, 0x30ac9: 0x6d6d6220, 0x30aca: 0x6d6d6420, 0x30acb: 0x6d6d6620, + 0x30acc: 0x6d6d6820, 0x30acd: 0x6d964220, 0x30ace: 0x6d964420, 0x30acf: 0x6d964620, + 0x30ad0: 0x6d964820, 0x30ad1: 0x6d964a20, 0x30ad2: 0x6d964c20, 0x30ad3: 0x6d964e20, + 0x30ad4: 0x6d965020, 0x30ad5: 0x6d965220, 0x30ad6: 0x6d965420, 0x30ad7: 0x6d965620, + 0x30ad8: 0x6db93c20, 0x30ad9: 0x6db93e20, 0x30ada: 0x6db94020, 0x30adb: 0x6db94220, + 0x30adc: 0x6db94420, 0x30add: 0x6db94620, 0x30ade: 0x6db94820, 0x30adf: 0x6db94a20, + 0x30ae0: 0x6db94c20, 0x30ae1: 0x6db94e20, 0x30ae2: 0x6db95020, 0x30ae3: 0x6db95220, + 0x30ae4: 0x6db95420, 0x30ae5: 0x6dd78220, 0x30ae6: 0x6dd78420, 0x30ae7: 0x6dd78620, + 0x30ae8: 0x6dd78820, 0x30ae9: 0x6dd78a20, 0x30aea: 0x6dd78c20, 0x30aeb: 0x6dd78e20, + 0x30aec: 0x6dd79020, 0x30aed: 0x6df01420, 0x30aee: 0x6df01620, 0x30aef: 0x6df01820, + 0x30af0: 0x6df01a20, 0x30af1: 0x6df01c20, 0x30af2: 0x6e043420, 0x30af3: 0x6e043620, + 0x30af4: 0x6e043820, 0x30af5: 0x6e043a20, 0x30af6: 0x6e043c20, 0x30af7: 0x6e043e20, + 0x30af8: 0x6e044020, 0x30af9: 0x6e156020, 0x30afa: 0x6e156220, 0x30afb: 0x6e156420, + 0x30afc: 0x6e2d2620, 0x30afd: 0x6e350220, 0x30afe: 0x6e350420, 0x30aff: 0x6e350620, + // Block 0xc2c, offset 0x30b00 + 0x30b00: 0x6e350820, 0x30b01: 0x6e3aaa20, 0x30b02: 0x6e351420, 0x30b03: 0x6e3e6e20, + 0x30b04: 0x6e3e7020, 0x30b05: 0x6e413820, 0x30b06: 0x6c27ee20, 0x30b07: 0x6c41da20, + 0x30b08: 0x6cb4c420, 0x30b09: 0x6ce46a20, 0x30b0a: 0x6ce46c20, 0x30b0b: 0x6e046220, + 0x30b0c: 0x6c27f020, 0x30b0d: 0x6c625e20, 0x30b0e: 0x6cb4cc20, 0x30b0f: 0x6ce47020, + 0x30b10: 0x6dd7ce20, 0x30b11: 0x6c41dc20, 0x30b12: 0x6c41de20, 0x30b13: 0x6c626220, + 0x30b14: 0x6c626420, 0x30b15: 0x6c890e20, 0x30b16: 0x6c891020, 0x30b17: 0x6c891220, + 0x30b18: 0x6c891420, 0x30b19: 0x6c891620, 0x30b1a: 0x6c891820, 0x30b1b: 0x6c891a20, + 0x30b1c: 0x6c891c20, 0x30b1d: 0x6c891e20, 0x30b1e: 0x6c892020, 0x30b1f: 0x6c892220, + 0x30b20: 0x6c892420, 0x30b21: 0x6c892620, 0x30b22: 0x6c892820, 0x30b23: 0x6cb4d620, + 0x30b24: 0x6cb4d820, 0x30b25: 0x6cb4da20, 0x30b26: 0x6cb4dc20, 0x30b27: 0x6cb4de20, + 0x30b28: 0x6cb4e020, 0x30b29: 0x6cb4e220, 0x30b2a: 0x6cb4e420, 0x30b2b: 0x6cb4e620, + 0x30b2c: 0x6cb4e820, 0x30b2d: 0x6cb4ea20, 0x30b2e: 0x6cb4ec20, 0x30b2f: 0x6cb4ee20, + 0x30b30: 0x6cb4f020, 0x30b31: 0x6cb4f220, 0x30b32: 0x6cb4f420, 0x30b33: 0x6cb4f620, + 0x30b34: 0x6cb4f820, 0x30b35: 0x6cb4fa20, 0x30b36: 0x6cb4fc20, 0x30b37: 0x6cb4fe20, + 0x30b38: 0x6cb50020, 0x30b39: 0x6cb50220, 0x30b3a: 0x6cb50420, 0x30b3b: 0x6cb50620, + 0x30b3c: 0x6cb50820, 0x30b3d: 0x6ce48420, 0x30b3e: 0x6ce48620, 0x30b3f: 0x6ce48820, + // Block 0xc2d, offset 0x30b40 + 0x30b40: 0x6ce48a20, 0x30b41: 0x6ce48c20, 0x30b42: 0x6ce48e20, 0x30b43: 0x6ce49020, + 0x30b44: 0x6ce49220, 0x30b45: 0x6ce49420, 0x30b46: 0x6ce49620, 0x30b47: 0x6ce49820, + 0x30b48: 0x6ce49a20, 0x30b49: 0x6ce49c20, 0x30b4a: 0x6ce49e20, 0x30b4b: 0x6ce4a020, + 0x30b4c: 0x6ce4a220, 0x30b4d: 0x6ce4a420, 0x30b4e: 0x6ce4a620, 0x30b4f: 0x6ce4a820, + 0x30b50: 0x6ce4aa20, 0x30b51: 0x6ce4ac20, 0x30b52: 0x6ce4ae20, 0x30b53: 0x6ce4b020, + 0x30b54: 0x6ce4b220, 0x30b55: 0x6ce4b420, 0x30b56: 0x6ce4b620, 0x30b57: 0x6ce4b820, + 0x30b58: 0x6ce4ba20, 0x30b59: 0x6ce4bc20, 0x30b5a: 0x6ce4be20, 0x30b5b: 0x6ce4c020, + 0x30b5c: 0x6ce4c220, 0x30b5d: 0x6ce4c420, 0x30b5e: 0x6ce4c620, 0x30b5f: 0x6ce4c820, + 0x30b60: 0x6ce4ca20, 0x30b61: 0x6ce4cc20, 0x30b62: 0x6ce4ce20, 0x30b63: 0x6ce4d020, + 0x30b64: 0x6ce4d220, 0x30b65: 0x6ce4d420, 0x30b66: 0x6ce4d620, 0x30b67: 0x6ce4d820, + 0x30b68: 0x6ce4da20, 0x30b69: 0x6ce4dc20, 0x30b6a: 0x6ce4de20, 0x30b6b: 0x6ce4e020, + 0x30b6c: 0x6ce4e220, 0x30b6d: 0x6d40d420, 0x30b6e: 0x6d12c620, 0x30b6f: 0x6d12c820, + 0x30b70: 0x6d12ca20, 0x30b71: 0x6d12cc20, 0x30b72: 0x6d12ce20, 0x30b73: 0x6d12d020, + 0x30b74: 0x6d12d220, 0x30b75: 0x6d12d420, 0x30b76: 0x6d12d620, 0x30b77: 0x6d12d820, + 0x30b78: 0x6d12da20, 0x30b79: 0x6d12dc20, 0x30b7a: 0x6d12de20, 0x30b7b: 0x6d12e020, + 0x30b7c: 0x6d12e220, 0x30b7d: 0x6d12e420, 0x30b7e: 0x6d12e620, 0x30b7f: 0x6d12e820, + // Block 0xc2e, offset 0x30b80 + 0x30b80: 0x6d12ea20, 0x30b81: 0x6d12ec20, 0x30b82: 0x6d12ee20, 0x30b83: 0x6d12f020, + 0x30b84: 0x6d12f220, 0x30b85: 0x6d12f420, 0x30b86: 0x6d12f620, 0x30b87: 0x6d12f820, + 0x30b88: 0x6d12fa20, 0x30b89: 0x6d12fc20, 0x30b8a: 0x6d12fe20, 0x30b8b: 0x6d130020, + 0x30b8c: 0x6d130220, 0x30b8d: 0x6d130420, 0x30b8e: 0x6d130620, 0x30b8f: 0x6d130820, + 0x30b90: 0x6d130a20, 0x30b91: 0x6d130c20, 0x30b92: 0x6d130e20, 0x30b93: 0x6d131020, + 0x30b94: 0x6d131220, 0x30b95: 0x6d131420, 0x30b96: 0x6d131620, 0x30b97: 0x6d131820, + 0x30b98: 0x6d131a20, 0x30b99: 0x6d131c20, 0x30b9a: 0x6d131e20, 0x30b9b: 0x6d132020, + 0x30b9c: 0x6d132220, 0x30b9d: 0x6d132420, 0x30b9e: 0x6d132620, 0x30b9f: 0x6d132820, + 0x30ba0: 0x6d132a20, 0x30ba1: 0x6d132c20, 0x30ba2: 0x6d132e20, 0x30ba3: 0x6d133020, + 0x30ba4: 0x6d133220, 0x30ba5: 0x6d133420, 0x30ba6: 0x6d133620, 0x30ba7: 0x6d133820, + 0x30ba8: 0x6d133a20, 0x30ba9: 0x6d133c20, 0x30baa: 0x6d133e20, 0x30bab: 0x6d134020, + 0x30bac: 0x6d134220, 0x30bad: 0x6d134420, 0x30bae: 0x6d134620, 0x30baf: 0x6d134820, + 0x30bb0: 0x6d134a20, 0x30bb1: 0x6d134c20, 0x30bb2: 0x6d134e20, 0x30bb3: 0x6d135020, + 0x30bb4: 0x6d135220, 0x30bb5: 0x6d40e420, 0x30bb6: 0x6d40e620, 0x30bb7: 0x6d40e820, + 0x30bb8: 0x6d40ea20, 0x30bb9: 0x6d40ec20, 0x30bba: 0x6d40ee20, 0x30bbb: 0x6d40f020, + 0x30bbc: 0x6d41c020, 0x30bbd: 0x6d40f220, 0x30bbe: 0x6d40f420, 0x30bbf: 0x6d40f620, + // Block 0xc2f, offset 0x30bc0 + 0x30bc0: 0x6d40f820, 0x30bc1: 0x6d40fa20, 0x30bc2: 0x6d40fc20, 0x30bc3: 0x6d40fe20, + 0x30bc4: 0x6d410020, 0x30bc5: 0x6d410220, 0x30bc6: 0x6d410420, 0x30bc7: 0x6d410620, + 0x30bc8: 0x6d410820, 0x30bc9: 0x6d410a20, 0x30bca: 0x6d410c20, 0x30bcb: 0x6d410e20, + 0x30bcc: 0x6d411020, 0x30bcd: 0x6d411220, 0x30bce: 0x6d411420, 0x30bcf: 0x6d135420, + 0x30bd0: 0x6d411620, 0x30bd1: 0x6d411820, 0x30bd2: 0x6d411a20, 0x30bd3: 0x6d411c20, + 0x30bd4: 0x6d411e20, 0x30bd5: 0x6d412020, 0x30bd6: 0x6d412220, 0x30bd7: 0x6d412420, + 0x30bd8: 0x6d412620, 0x30bd9: 0x6d412820, 0x30bda: 0x6d412a20, 0x30bdb: 0x6d412c20, + 0x30bdc: 0x6d412e20, 0x30bdd: 0x6d413020, 0x30bde: 0x6d413220, 0x30bdf: 0x6d413420, + 0x30be0: 0x6d413620, 0x30be1: 0x6d413820, 0x30be2: 0x6d413a20, 0x30be3: 0x6d413c20, + 0x30be4: 0x6d413e20, 0x30be5: 0x6d414020, 0x30be6: 0x6d414220, 0x30be7: 0x6d414420, + 0x30be8: 0x6d414620, 0x30be9: 0x6d414820, 0x30bea: 0x6d414a20, 0x30beb: 0x6d414c20, + 0x30bec: 0x6d414e20, 0x30bed: 0x6d415020, 0x30bee: 0x6d415220, 0x30bef: 0x6d415420, + 0x30bf0: 0x6d415620, 0x30bf1: 0x6d415820, 0x30bf2: 0x6d6dc220, 0x30bf3: 0x6d6dc420, + 0x30bf4: 0x6d6dc620, 0x30bf5: 0x6d6dc820, 0x30bf6: 0x6d6dca20, 0x30bf7: 0x6d6dcc20, + 0x30bf8: 0x6d6dce20, 0x30bf9: 0x6d6dd020, 0x30bfa: 0x6d6dd220, 0x30bfb: 0x6d6dd420, + 0x30bfc: 0x6d6dd620, 0x30bfd: 0x6d6dd820, 0x30bfe: 0x6d6dda20, 0x30bff: 0x6d6ddc20, + // Block 0xc30, offset 0x30c00 + 0x30c00: 0x6d6dde20, 0x30c01: 0x6d6de020, 0x30c02: 0x6d6de220, 0x30c03: 0x6d6de420, + 0x30c04: 0x6d6de620, 0x30c05: 0x6d6de820, 0x30c06: 0x6d6dea20, 0x30c07: 0x6d6dec20, + 0x30c08: 0x6d6dee20, 0x30c09: 0x6d6df020, 0x30c0a: 0x6d6df220, 0x30c0b: 0x6d969820, + 0x30c0c: 0x6d6df420, 0x30c0d: 0x6d6df620, 0x30c0e: 0x6d6df820, 0x30c0f: 0x6d6dfa20, + 0x30c10: 0x6d6dfc20, 0x30c11: 0x6d6dfe20, 0x30c12: 0x6d6e0020, 0x30c13: 0x6d6e0220, + 0x30c14: 0x6d6e0420, 0x30c15: 0x6d6e0620, 0x30c16: 0x6d6e0820, 0x30c17: 0x6d6e0a20, + 0x30c18: 0x6d6e0c20, 0x30c19: 0x6d6e0e20, 0x30c1a: 0x6d6e1020, 0x30c1b: 0x6d6e1220, + 0x30c1c: 0x6d6e1420, 0x30c1d: 0x6d6e1620, 0x30c1e: 0x6d6e1820, 0x30c1f: 0x6d6e1a20, + 0x30c20: 0x6d6e1c20, 0x30c21: 0x6d6e1e20, 0x30c22: 0x6d6e2020, 0x30c23: 0x6d6e2220, + 0x30c24: 0x6d6e2420, 0x30c25: 0x6d6e2620, 0x30c26: 0x6d6e2820, 0x30c27: 0x6d6e2a20, + 0x30c28: 0x6d6e2c20, 0x30c29: 0x6d6e2e20, 0x30c2a: 0x6d6e3020, 0x30c2b: 0x6d6e3220, + 0x30c2c: 0x6d6e3420, 0x30c2d: 0x6d6e3620, 0x30c2e: 0x6d41be20, 0x30c2f: 0x6d6e3820, + 0x30c30: 0x6d6e3a20, 0x30c31: 0x6d6e3c20, 0x30c32: 0x6d6e3e20, 0x30c33: 0x6d6e4020, + 0x30c34: 0x6d6e4220, 0x30c35: 0x6d6e4420, 0x30c36: 0x6d6e4620, 0x30c37: 0x6d96a220, + 0x30c38: 0x6d96a420, 0x30c39: 0x6d96a620, 0x30c3a: 0x6d96a820, 0x30c3b: 0x6d96aa20, + 0x30c3c: 0x6d96ac20, 0x30c3d: 0x6d96ae20, 0x30c3e: 0x6d96b020, 0x30c3f: 0x6d96b220, + // Block 0xc31, offset 0x30c40 + 0x30c40: 0x6d96b420, 0x30c41: 0x6d96b620, 0x30c42: 0x6d96b820, 0x30c43: 0x6d96ba20, + 0x30c44: 0x6d96bc20, 0x30c45: 0x6d96be20, 0x30c46: 0x6d96c020, 0x30c47: 0x6d96c220, + 0x30c48: 0x6d96c420, 0x30c49: 0x6d96c620, 0x30c4a: 0x6d96c820, 0x30c4b: 0x6d96ca20, + 0x30c4c: 0x6d96cc20, 0x30c4d: 0x6d96ce20, 0x30c4e: 0x6d96d020, 0x30c4f: 0x6d96d220, + 0x30c50: 0x6d96d420, 0x30c51: 0x6d96d620, 0x30c52: 0x6d96d820, 0x30c53: 0x6d96da20, + 0x30c54: 0x6d96dc20, 0x30c55: 0x6d96de20, 0x30c56: 0x6d96e020, 0x30c57: 0x6d96e220, + 0x30c58: 0x6d96e420, 0x30c59: 0x6d96e620, 0x30c5a: 0x6d96e820, 0x30c5b: 0x6d96ea20, + 0x30c5c: 0x6d96ec20, 0x30c5d: 0x6d96ee20, 0x30c5e: 0x6d96f020, 0x30c5f: 0x6d96f220, + 0x30c60: 0x6d96f420, 0x30c61: 0x6d96f620, 0x30c62: 0x6d96f820, 0x30c63: 0x6d96fa20, + 0x30c64: 0x6d96fc20, 0x30c65: 0x6d96fe20, 0x30c66: 0x6d970020, 0x30c67: 0x6d970220, + 0x30c68: 0x6db9ac20, 0x30c69: 0x6d970420, 0x30c6a: 0x6d970620, 0x30c6b: 0x6d970820, + 0x30c6c: 0x6d970a20, 0x30c6d: 0x6d970c20, 0x30c6e: 0x6d970e20, 0x30c6f: 0x6d971020, + 0x30c70: 0x6d971220, 0x30c71: 0x6d971420, 0x30c72: 0x6d971620, 0x30c73: 0x6d971820, + 0x30c74: 0x6d971a20, 0x30c75: 0x6d971c20, 0x30c76: 0x6d971e20, 0x30c77: 0x6d972020, + 0x30c78: 0x6d972220, 0x30c79: 0x6d972420, 0x30c7a: 0x6d972620, 0x30c7b: 0x6d972820, + 0x30c7c: 0x6d972a20, 0x30c7d: 0x6d972c20, 0x30c7e: 0x6d972e20, 0x30c7f: 0x6d973020, + // Block 0xc32, offset 0x30c80 + 0x30c80: 0x6d973220, 0x30c81: 0x6d973420, 0x30c82: 0x6d973620, 0x30c83: 0x6d973820, + 0x30c84: 0x6d973a20, 0x30c85: 0x6d973c20, 0x30c86: 0x6d973e20, 0x30c87: 0x6db9ae20, + 0x30c88: 0x6d974020, 0x30c89: 0x6db9b020, 0x30c8a: 0x6db9b220, 0x30c8b: 0x6db9b420, + 0x30c8c: 0x6db9b620, 0x30c8d: 0x6db9b820, 0x30c8e: 0x6db9ba20, 0x30c8f: 0x6db9bc20, + 0x30c90: 0x6db9be20, 0x30c91: 0x6db9c020, 0x30c92: 0x6db9c220, 0x30c93: 0x6db9c420, + 0x30c94: 0x6db9c620, 0x30c95: 0x6db9c820, 0x30c96: 0x6db9ca20, 0x30c97: 0x6db9cc20, + 0x30c98: 0x6db9ce20, 0x30c99: 0x6db9d020, 0x30c9a: 0x6db9d220, 0x30c9b: 0x6db9d420, + 0x30c9c: 0x6db9d620, 0x30c9d: 0x6db9d820, 0x30c9e: 0x6db9da20, 0x30c9f: 0x6db9dc20, + 0x30ca0: 0x6db9de20, 0x30ca1: 0x6db9e020, 0x30ca2: 0x6db9e220, 0x30ca3: 0x6db9e420, + 0x30ca4: 0x6db9e620, 0x30ca5: 0x6db9e820, 0x30ca6: 0x6db9ea20, 0x30ca7: 0x6db9ec20, + 0x30ca8: 0x6db9ee20, 0x30ca9: 0x6db9f020, 0x30caa: 0x6db9f220, 0x30cab: 0x6db9f420, + 0x30cac: 0x6db9f620, 0x30cad: 0x6db9f820, 0x30cae: 0x6db9fa20, 0x30caf: 0x6db9fc20, + 0x30cb0: 0x6db9fe20, 0x30cb1: 0x6dba0020, 0x30cb2: 0x6dba0220, 0x30cb3: 0x6dba0420, + 0x30cb4: 0x6dba0620, 0x30cb5: 0x6dba0820, 0x30cb6: 0x6dba0a20, 0x30cb7: 0x6dba0c20, + 0x30cb8: 0x6dba0e20, 0x30cb9: 0x6dba1020, 0x30cba: 0x6d97ec20, 0x30cbb: 0x6dba1220, + 0x30cbc: 0x6dba1420, 0x30cbd: 0x6dba1620, 0x30cbe: 0x6dba1820, 0x30cbf: 0x6dba1a20, + // Block 0xc33, offset 0x30cc0 + 0x30cc0: 0x6dba1c20, 0x30cc1: 0x6dba1e20, 0x30cc2: 0x6dba2020, 0x30cc3: 0x6dba2220, + 0x30cc4: 0x6dba2420, 0x30cc5: 0x6dba2620, 0x30cc6: 0x6dba2820, 0x30cc7: 0x6dba2a20, + 0x30cc8: 0x6dd7ee20, 0x30cc9: 0x6dd7f020, 0x30cca: 0x6dd7f220, 0x30ccb: 0x6dd7f420, + 0x30ccc: 0x6dd7f620, 0x30ccd: 0x6dd7f820, 0x30cce: 0x6dd7fa20, 0x30ccf: 0x6dd7fc20, + 0x30cd0: 0x6dd7fe20, 0x30cd1: 0x6dd80020, 0x30cd2: 0x6dd80220, 0x30cd3: 0x6dd80420, + 0x30cd4: 0x6dd80620, 0x30cd5: 0x6dd80820, 0x30cd6: 0x6dd80a20, 0x30cd7: 0x6dd80c20, + 0x30cd8: 0x6dd80e20, 0x30cd9: 0x6dd81020, 0x30cda: 0x6dd81220, 0x30cdb: 0x6dd81420, + 0x30cdc: 0x6dd81620, 0x30cdd: 0x6dd81820, 0x30cde: 0x6dd81a20, 0x30cdf: 0x6dd81c20, + 0x30ce0: 0x6dd81e20, 0x30ce1: 0x6dbaec20, 0x30ce2: 0x6dd82020, 0x30ce3: 0x6dd82220, + 0x30ce4: 0x6dd82420, 0x30ce5: 0x6dd82620, 0x30ce6: 0x6dd82820, 0x30ce7: 0x6dd82a20, + 0x30ce8: 0x6dd82c20, 0x30ce9: 0x6df06e20, 0x30cea: 0x6dd82e20, 0x30ceb: 0x6dd83020, + 0x30cec: 0x6dd83220, 0x30ced: 0x6dd83420, 0x30cee: 0x6dd83620, 0x30cef: 0x6dbaee20, + 0x30cf0: 0x6dd83820, 0x30cf1: 0x6dd83a20, 0x30cf2: 0x6dd83c20, 0x30cf3: 0x6dd83e20, + 0x30cf4: 0x6dd84020, 0x30cf5: 0x6dd84220, 0x30cf6: 0x6dd84420, 0x30cf7: 0x6dd84620, + 0x30cf8: 0x6dd84820, 0x30cf9: 0x6dd84a20, 0x30cfa: 0x6dd84c20, 0x30cfb: 0x6dd84e20, + 0x30cfc: 0x6dd85020, 0x30cfd: 0x6dd85220, 0x30cfe: 0x6dd85420, 0x30cff: 0x6dd85620, + // Block 0xc34, offset 0x30d00 + 0x30d00: 0x6df07020, 0x30d01: 0x6df07220, 0x30d02: 0x6df07420, 0x30d03: 0x6df07620, + 0x30d04: 0x6df07820, 0x30d05: 0x6df07a20, 0x30d06: 0x6df07c20, 0x30d07: 0x6df07e20, + 0x30d08: 0x6df08020, 0x30d09: 0x6df08220, 0x30d0a: 0x6df08420, 0x30d0b: 0x6df08620, + 0x30d0c: 0x6df08820, 0x30d0d: 0x6df08a20, 0x30d0e: 0x6df08c20, 0x30d0f: 0x6df08e20, + 0x30d10: 0x6df09020, 0x30d11: 0x6df09220, 0x30d12: 0x6df09420, 0x30d13: 0x6df09620, + 0x30d14: 0x6df09820, 0x30d15: 0x6df09a20, 0x30d16: 0x6df09c20, 0x30d17: 0x6df09e20, + 0x30d18: 0x6df0a020, 0x30d19: 0x6df0a220, 0x30d1a: 0x6df0a420, 0x30d1b: 0x6df0a620, + 0x30d1c: 0x6df0a820, 0x30d1d: 0x6df0aa20, 0x30d1e: 0x6df0ac20, 0x30d1f: 0x6df0ae20, + 0x30d20: 0x6df0b020, 0x30d21: 0x6df0b220, 0x30d22: 0x6df0b420, 0x30d23: 0x6df0b620, + 0x30d24: 0x6df0b820, 0x30d25: 0x6df0ba20, 0x30d26: 0x6df0bc20, 0x30d27: 0x6df0be20, + 0x30d28: 0x6df0c020, 0x30d29: 0x6df0c220, 0x30d2a: 0x6df0c420, 0x30d2b: 0x6df0c620, + 0x30d2c: 0x6df0c820, 0x30d2d: 0x6df0ca20, 0x30d2e: 0x6df0cc20, 0x30d2f: 0x6df0ce20, + 0x30d30: 0x6df0d020, 0x30d31: 0x6df0d220, 0x30d32: 0x6df0d420, 0x30d33: 0x6e047c20, + 0x30d34: 0x6e159420, 0x30d35: 0x6e047e20, 0x30d36: 0x6e048020, 0x30d37: 0x6e048220, + 0x30d38: 0x6e048420, 0x30d39: 0x6df0d620, 0x30d3a: 0x6e048620, 0x30d3b: 0x6e048820, + 0x30d3c: 0x6e048a20, 0x30d3d: 0x6e048c20, 0x30d3e: 0x6e048e20, 0x30d3f: 0x6e049020, + // Block 0xc35, offset 0x30d40 + 0x30d40: 0x6e049220, 0x30d41: 0x6e049420, 0x30d42: 0x6e049620, 0x30d43: 0x6e049820, + 0x30d44: 0x6e049a20, 0x30d45: 0x6e049c20, 0x30d46: 0x6e049e20, 0x30d47: 0x6e04a020, + 0x30d48: 0x6e04a220, 0x30d49: 0x6e04a420, 0x30d4a: 0x6e04a620, 0x30d4b: 0x6e04a820, + 0x30d4c: 0x6e04aa20, 0x30d4d: 0x6e04ac20, 0x30d4e: 0x6e04ae20, 0x30d4f: 0x6e04b020, + 0x30d50: 0x6e04b220, 0x30d51: 0x6e04b420, 0x30d52: 0x6e04b620, 0x30d53: 0x6e04b820, + 0x30d54: 0x6e04ba20, 0x30d55: 0x6e04bc20, 0x30d56: 0x6e04be20, 0x30d57: 0x6e04c020, + 0x30d58: 0x6e04c220, 0x30d59: 0x6e04c420, 0x30d5a: 0x6e04c620, 0x30d5b: 0x6e04c820, + 0x30d5c: 0x6e04ca20, 0x30d5d: 0x6e04cc20, 0x30d5e: 0x6e04ce20, 0x30d5f: 0x6e04d020, + 0x30d60: 0x6e04d220, 0x30d61: 0x6e04d420, 0x30d62: 0x6e04d620, 0x30d63: 0x6e04d820, + 0x30d64: 0x6e04da20, 0x30d65: 0x6e04dc20, 0x30d66: 0x6e04de20, 0x30d67: 0x6e04e020, + 0x30d68: 0x6e04e220, 0x30d69: 0x6e159620, 0x30d6a: 0x6e159820, 0x30d6b: 0x6e159a20, + 0x30d6c: 0x6e159c20, 0x30d6d: 0x6e159e20, 0x30d6e: 0x6e15a020, 0x30d6f: 0x6e058820, + 0x30d70: 0x6e15a220, 0x30d71: 0x6e15a420, 0x30d72: 0x6e15a620, 0x30d73: 0x6e15a820, + 0x30d74: 0x6e15aa20, 0x30d75: 0x6e15ac20, 0x30d76: 0x6e15ae20, 0x30d77: 0x6e15b020, + 0x30d78: 0x6e15b220, 0x30d79: 0x6e15b420, 0x30d7a: 0x6e15b620, 0x30d7b: 0x6e15b820, + 0x30d7c: 0x6e058a20, 0x30d7d: 0x6e15ba20, 0x30d7e: 0x6e15bc20, 0x30d7f: 0x6e15be20, + // Block 0xc36, offset 0x30d80 + 0x30d80: 0x6e15c020, 0x30d81: 0x6e15c220, 0x30d82: 0x6e231620, 0x30d83: 0x6e231820, + 0x30d84: 0x6e231a20, 0x30d85: 0x6e231c20, 0x30d86: 0x6e231e20, 0x30d87: 0x6e232020, + 0x30d88: 0x6e232220, 0x30d89: 0x6e232420, 0x30d8a: 0x6e232620, 0x30d8b: 0x6e232820, + 0x30d8c: 0x6e232a20, 0x30d8d: 0x6e232c20, 0x30d8e: 0x6e232e20, 0x30d8f: 0x6e233020, + 0x30d90: 0x6e233220, 0x30d91: 0x6e233420, 0x30d92: 0x6e233620, 0x30d93: 0x6e233820, + 0x30d94: 0x6e233a20, 0x30d95: 0x6e2d4620, 0x30d96: 0x6e2d4820, 0x30d97: 0x6e2d4a20, + 0x30d98: 0x6e2d4c20, 0x30d99: 0x6e2d4e20, 0x30d9a: 0x6e2d5020, 0x30d9b: 0x6e2d5220, + 0x30d9c: 0x6e2d5420, 0x30d9d: 0x6e2d5620, 0x30d9e: 0x6e2d5820, 0x30d9f: 0x6e2d5a20, + 0x30da0: 0x6e2d5c20, 0x30da1: 0x6e2d5e20, 0x30da2: 0x6e2d6020, 0x30da3: 0x6e2d6220, + 0x30da4: 0x6e2d6420, 0x30da5: 0x6e2d6620, 0x30da6: 0x6e2d6820, 0x30da7: 0x6e233c20, + 0x30da8: 0x6e351c20, 0x30da9: 0x6e351e20, 0x30daa: 0x6e352020, 0x30dab: 0x6e352220, + 0x30dac: 0x6e352420, 0x30dad: 0x6e3ab420, 0x30dae: 0x6e3ab620, 0x30daf: 0x6e3ab820, + 0x30db0: 0x6e3aba20, 0x30db1: 0x6e3abc20, 0x30db2: 0x6e3abe20, 0x30db3: 0x6e3ac020, + 0x30db4: 0x6e3e7620, 0x30db5: 0x6e3e7820, 0x30db6: 0x6e3e7a20, 0x30db7: 0x6e3e7c20, + 0x30db8: 0x6e3e7e20, 0x30db9: 0x6e3e8020, 0x30dba: 0x6e3e8220, 0x30dbb: 0x6e414020, + 0x30dbc: 0x6e414220, 0x30dbd: 0x6e414420, 0x30dbe: 0x6e414620, 0x30dbf: 0x6e434020, + // Block 0xc37, offset 0x30dc0 + 0x30dc0: 0x6e434220, 0x30dc1: 0x6e434420, 0x30dc2: 0x6e434620, 0x30dc3: 0x6e449420, + 0x30dc4: 0x6e449620, 0x30dc5: 0x6c0aaa20, 0x30dc6: 0x6c158c20, 0x30dc7: 0x6c158e20, + 0x30dc8: 0x6c27f220, 0x30dc9: 0x6c27f420, 0x30dca: 0x6c27f620, 0x30dcb: 0x6c27f820, + 0x30dcc: 0x6c27fa20, 0x30dcd: 0x6c41e020, 0x30dce: 0x6c41e220, 0x30dcf: 0x6c41e420, + 0x30dd0: 0x6c41e620, 0x30dd1: 0x6c41e820, 0x30dd2: 0x6c41ea20, 0x30dd3: 0x6c41ec20, + 0x30dd4: 0x6c41ee20, 0x30dd5: 0x6c41f020, 0x30dd6: 0x6c41f220, 0x30dd7: 0x6c41f420, + 0x30dd8: 0x6c626620, 0x30dd9: 0x6c626820, 0x30dda: 0x6c626a20, 0x30ddb: 0x6c626c20, + 0x30ddc: 0x6c626e20, 0x30ddd: 0x6c627020, 0x30dde: 0x6c627220, 0x30ddf: 0x6c627420, + 0x30de0: 0x6c627620, 0x30de1: 0x6c627820, 0x30de2: 0x6c627a20, 0x30de3: 0x6c627c20, + 0x30de4: 0x6c627e20, 0x30de5: 0x6c628020, 0x30de6: 0x6c628220, 0x30de7: 0x6c628420, + 0x30de8: 0x6c628620, 0x30de9: 0x6c628820, 0x30dea: 0x6c628a20, 0x30deb: 0x6c628c20, + 0x30dec: 0x6c628e20, 0x30ded: 0x6c629020, 0x30dee: 0x6c629220, 0x30def: 0x6c629420, + 0x30df0: 0x6c893420, 0x30df1: 0x6c893620, 0x30df2: 0x6c893820, 0x30df3: 0x6c893a20, + 0x30df4: 0x6c893c20, 0x30df5: 0x6c893e20, 0x30df6: 0x6c894020, 0x30df7: 0x6c894220, + 0x30df8: 0x6c894420, 0x30df9: 0x6c894620, 0x30dfa: 0x6c894820, 0x30dfb: 0x6c894a20, + 0x30dfc: 0x6c894c20, 0x30dfd: 0x6c894e20, 0x30dfe: 0x6c895020, 0x30dff: 0x6c895220, + // Block 0xc38, offset 0x30e00 + 0x30e00: 0x6c895420, 0x30e01: 0x6c895620, 0x30e02: 0x6c895820, 0x30e03: 0x6c895a20, + 0x30e04: 0x6c895c20, 0x30e05: 0x6c895e20, 0x30e06: 0x6c896020, 0x30e07: 0x6c896220, + 0x30e08: 0x6c896420, 0x30e09: 0x6c896620, 0x30e0a: 0x6c896820, 0x30e0b: 0x6c896a20, + 0x30e0c: 0x6c896c20, 0x30e0d: 0x6c896e20, 0x30e0e: 0x6c897020, 0x30e0f: 0x6cb52220, + 0x30e10: 0x6cb52420, 0x30e11: 0x6cb52620, 0x30e12: 0x6cb52820, 0x30e13: 0x6cb52a20, + 0x30e14: 0x6cb52c20, 0x30e15: 0x6cb52e20, 0x30e16: 0x6cb53020, 0x30e17: 0x6cb53220, + 0x30e18: 0x6cb53420, 0x30e19: 0x6cb53620, 0x30e1a: 0x6cb53820, 0x30e1b: 0x6cb53a20, + 0x30e1c: 0x6cb53c20, 0x30e1d: 0x6cb53e20, 0x30e1e: 0x6cb54020, 0x30e1f: 0x6cb54220, + 0x30e20: 0x6cb54420, 0x30e21: 0x6cb54620, 0x30e22: 0x6cb54820, 0x30e23: 0x6cb54a20, + 0x30e24: 0x6cb54c20, 0x30e25: 0x6cb54e20, 0x30e26: 0x6cb55020, 0x30e27: 0x6cb55220, + 0x30e28: 0x6cb55420, 0x30e29: 0x6cb55620, 0x30e2a: 0x6cb55820, 0x30e2b: 0x6cb55a20, + 0x30e2c: 0x6cb55c20, 0x30e2d: 0x6cb55e20, 0x30e2e: 0x6cb56020, 0x30e2f: 0x6cb56220, + 0x30e30: 0x6cb56420, 0x30e31: 0x6cb56620, 0x30e32: 0x6cb56820, 0x30e33: 0x6cb56a20, + 0x30e34: 0x6cb56c20, 0x30e35: 0x6cb56e20, 0x30e36: 0x6cb57020, 0x30e37: 0x6cb57220, + 0x30e38: 0x6ce52a20, 0x30e39: 0x6ce52c20, 0x30e3a: 0x6ce52e20, 0x30e3b: 0x6ce53020, + 0x30e3c: 0x6ce53220, 0x30e3d: 0x6ce53420, 0x30e3e: 0x6ce53620, 0x30e3f: 0x6ce53820, + // Block 0xc39, offset 0x30e40 + 0x30e40: 0x6ce53a20, 0x30e41: 0x6ce53c20, 0x30e42: 0x6ce53e20, 0x30e43: 0x6ce54020, + 0x30e44: 0x6ce54220, 0x30e45: 0x6ce54420, 0x30e46: 0x6ce54620, 0x30e47: 0x6ce54820, + 0x30e48: 0x6ce54a20, 0x30e49: 0x6ce54c20, 0x30e4a: 0x6ce54e20, 0x30e4b: 0x6ce55020, + 0x30e4c: 0x6ce55220, 0x30e4d: 0x6ce55420, 0x30e4e: 0x6ce55620, 0x30e4f: 0x6ce55820, + 0x30e50: 0x6ce55a20, 0x30e51: 0x6ce55c20, 0x30e52: 0x6ce55e20, 0x30e53: 0x6ce56020, + 0x30e54: 0x6ce56220, 0x30e55: 0x6ce56420, 0x30e56: 0x6d13a420, 0x30e57: 0x6d13a620, + 0x30e58: 0x6d13a820, 0x30e59: 0x6d13aa20, 0x30e5a: 0x6d13ac20, 0x30e5b: 0x6d13ae20, + 0x30e5c: 0x6d13b020, 0x30e5d: 0x6d13b220, 0x30e5e: 0x6d13b420, 0x30e5f: 0x6d13b620, + 0x30e60: 0x6d13b820, 0x30e61: 0x6d13ba20, 0x30e62: 0x6d13bc20, 0x30e63: 0x6d13be20, + 0x30e64: 0x6d13c020, 0x30e65: 0x6d13c220, 0x30e66: 0x6d13c420, 0x30e67: 0x6d13c620, + 0x30e68: 0x6d13c820, 0x30e69: 0x6d13ca20, 0x30e6a: 0x6d13cc20, 0x30e6b: 0x6d13ce20, + 0x30e6c: 0x6d13d020, 0x30e6d: 0x6d13d220, 0x30e6e: 0x6d13d420, 0x30e6f: 0x6d13d620, + 0x30e70: 0x6d13d820, 0x30e71: 0x6d13da20, 0x30e72: 0x6d41c420, 0x30e73: 0x6d41c620, + 0x30e74: 0x6d41c820, 0x30e75: 0x6d41ca20, 0x30e76: 0x6d41cc20, 0x30e77: 0x6d41ce20, + 0x30e78: 0x6d41d020, 0x30e79: 0x6d41d220, 0x30e7a: 0x6d41d420, 0x30e7b: 0x6d41d620, + 0x30e7c: 0x6d41d820, 0x30e7d: 0x6d41da20, 0x30e7e: 0x6d41dc20, 0x30e7f: 0x6d41de20, + // Block 0xc3a, offset 0x30e80 + 0x30e80: 0x6d41e020, 0x30e81: 0x6d41e220, 0x30e82: 0x6d41e420, 0x30e83: 0x6d41e620, + 0x30e84: 0x6d41e820, 0x30e85: 0x6d41ea20, 0x30e86: 0x6d6ed220, 0x30e87: 0x6d6ed420, + 0x30e88: 0x6d6ed620, 0x30e89: 0x6d6ed820, 0x30e8a: 0x6d6eda20, 0x30e8b: 0x6d6edc20, + 0x30e8c: 0x6d6ede20, 0x30e8d: 0x6d6ee020, 0x30e8e: 0x6d6ee220, 0x30e8f: 0x6d6ee420, + 0x30e90: 0x6d6ee620, 0x30e91: 0x6d6ee820, 0x30e92: 0x6d6eea20, 0x30e93: 0x6d6eec20, + 0x30e94: 0x6d6eee20, 0x30e95: 0x6d6ef020, 0x30e96: 0x6d97ee20, 0x30e97: 0x6d97f020, + 0x30e98: 0x6d97f220, 0x30e99: 0x6d97f420, 0x30e9a: 0x6d97f620, 0x30e9b: 0x6d97f820, + 0x30e9c: 0x6d97fa20, 0x30e9d: 0x6d97fc20, 0x30e9e: 0x6d97fe20, 0x30e9f: 0x6d980020, + 0x30ea0: 0x6d980220, 0x30ea1: 0x6dbaf020, 0x30ea2: 0x6dbaf220, 0x30ea3: 0x6dbaf420, + 0x30ea4: 0x6dbaf620, 0x30ea5: 0x6dbaf820, 0x30ea6: 0x6dbafa20, 0x30ea7: 0x6dbafc20, + 0x30ea8: 0x6dbafe20, 0x30ea9: 0x6dbb0020, 0x30eaa: 0x6dbb0220, 0x30eab: 0x6dbb0420, + 0x30eac: 0x6dd8fc20, 0x30ead: 0x6dd8fe20, 0x30eae: 0x6dd90020, 0x30eaf: 0x6dd90220, + 0x30eb0: 0x6dd90420, 0x30eb1: 0x6dd90620, 0x30eb2: 0x6df15e20, 0x30eb3: 0x6e059220, + 0x30eb4: 0x6e059420, 0x30eb5: 0x6e239420, 0x30eb6: 0x6e239620, 0x30eb7: 0x6c41fe20, + 0x30eb8: 0x6c420020, 0x30eb9: 0x6cb58a20, 0x30eba: 0x6cb58c20, 0x30ebb: 0x6ce57220, + 0x30ebc: 0x6d6f0020, 0x30ebd: 0x6df16620, 0x30ebe: 0x6e239820, 0x30ebf: 0x6c0aac20, + // Block 0xc3b, offset 0x30ec0 + 0x30ec0: 0x6c420220, 0x30ec1: 0x6c62ac20, 0x30ec2: 0x6c62ae20, 0x30ec3: 0x6c898420, + 0x30ec4: 0x6c898620, 0x30ec5: 0x6c898820, 0x30ec6: 0x6cb5aa20, 0x30ec7: 0x6cb5ac20, + 0x30ec8: 0x6cb5ae20, 0x30ec9: 0x6cb5b020, 0x30eca: 0x6cb5b220, 0x30ecb: 0x6ce59420, + 0x30ecc: 0x6ce59620, 0x30ecd: 0x6ce59820, 0x30ece: 0x6ce59a20, 0x30ecf: 0x6ce59c20, + 0x30ed0: 0x6ce59e20, 0x30ed1: 0x6ce5a020, 0x30ed2: 0x6ce5a220, 0x30ed3: 0x6ce5a420, + 0x30ed4: 0x6ce5a620, 0x30ed5: 0x6ce5a820, 0x30ed6: 0x6ce5aa20, 0x30ed7: 0x6ce5ac20, + 0x30ed8: 0x6d141e20, 0x30ed9: 0x6d142020, 0x30eda: 0x6d142220, 0x30edb: 0x6d142420, + 0x30edc: 0x6d142620, 0x30edd: 0x6d142820, 0x30ede: 0x6d142a20, 0x30edf: 0x6d142c20, + 0x30ee0: 0x6d142e20, 0x30ee1: 0x6d421a20, 0x30ee2: 0x6d421c20, 0x30ee3: 0x6d421e20, + 0x30ee4: 0x6d422020, 0x30ee5: 0x6d422220, 0x30ee6: 0x6d422420, 0x30ee7: 0x6d422620, + 0x30ee8: 0x6d422820, 0x30ee9: 0x6d422a20, 0x30eea: 0x6d422c20, 0x30eeb: 0x6d6f2420, + 0x30eec: 0x6d6f2620, 0x30eed: 0x6d6f2820, 0x30eee: 0x6d6f2a20, 0x30eef: 0x6d6f2c20, + 0x30ef0: 0x6d6f2e20, 0x30ef1: 0x6d6f3020, 0x30ef2: 0x6d6f3220, 0x30ef3: 0x6d6f3420, + 0x30ef4: 0x6d6f3620, 0x30ef5: 0x6d983620, 0x30ef6: 0x6d983820, 0x30ef7: 0x6dbb3420, + 0x30ef8: 0x6d983a20, 0x30ef9: 0x6d983c20, 0x30efa: 0x6d983e20, 0x30efb: 0x6d984020, + 0x30efc: 0x6d984220, 0x30efd: 0x6d984420, 0x30efe: 0x6d984620, 0x30eff: 0x6d984820, + // Block 0xc3c, offset 0x30f00 + 0x30f00: 0x6dbb2420, 0x30f01: 0x6d984a20, 0x30f02: 0x6d984c20, 0x30f03: 0x6dbb3620, + 0x30f04: 0x6dbb3820, 0x30f05: 0x6dbb3a20, 0x30f06: 0x6dbb3c20, 0x30f07: 0x6dbb3e20, + 0x30f08: 0x6dbb4020, 0x30f09: 0x6dbb4220, 0x30f0a: 0x6dbb4420, 0x30f0b: 0x6dbb4620, + 0x30f0c: 0x6dbb4820, 0x30f0d: 0x6d988e20, 0x30f0e: 0x6dbb4a20, 0x30f0f: 0x6dbb4c20, + 0x30f10: 0x6dd92020, 0x30f11: 0x6dd92220, 0x30f12: 0x6dd92420, 0x30f13: 0x6dd92620, + 0x30f14: 0x6dd92820, 0x30f15: 0x6dd92a20, 0x30f16: 0x6dd92c20, 0x30f17: 0x6dd92e20, + 0x30f18: 0x6dd93020, 0x30f19: 0x6df17620, 0x30f1a: 0x6df17820, 0x30f1b: 0x6df17a20, + 0x30f1c: 0x6df17c20, 0x30f1d: 0x6df17e20, 0x30f1e: 0x6e05a220, 0x30f1f: 0x6e05a420, + 0x30f20: 0x6e05a620, 0x30f21: 0x6e05a820, 0x30f22: 0x6e165c20, 0x30f23: 0x6e165e20, + 0x30f24: 0x6e166020, 0x30f25: 0x6e166220, 0x30f26: 0x6e166420, 0x30f27: 0x6e23a620, + 0x30f28: 0x6c020a20, 0x30f29: 0x6c052620, 0x30f2a: 0x6c0aae20, 0x30f2b: 0x6c159020, + 0x30f2c: 0x6c159220, 0x30f2d: 0x6c159420, 0x30f2e: 0x6c159620, 0x30f2f: 0x6c159820, + 0x30f30: 0x6c280420, 0x30f31: 0x6c280620, 0x30f32: 0x6c280820, 0x30f33: 0x6c280a20, + 0x30f34: 0x6c280c20, 0x30f35: 0x6c280e20, 0x30f36: 0x6c281020, 0x30f37: 0x6c281220, + 0x30f38: 0x6c420820, 0x30f39: 0x6c420a20, 0x30f3a: 0x6c62b420, 0x30f3b: 0x6c62b620, + 0x30f3c: 0x6c62b820, 0x30f3d: 0x6c62ba20, 0x30f3e: 0x6c62bc20, 0x30f3f: 0x6c62be20, + // Block 0xc3d, offset 0x30f40 + 0x30f40: 0x6c62c020, 0x30f41: 0x6c62c220, 0x30f42: 0x6c62c420, 0x30f43: 0x6c899620, + 0x30f44: 0x6c899820, 0x30f45: 0x6c899a20, 0x30f46: 0x6c899c20, 0x30f47: 0x6cb5c420, + 0x30f48: 0x6cb5c620, 0x30f49: 0x6cb5c820, 0x30f4a: 0x6cb5ca20, 0x30f4b: 0x6cb5cc20, + 0x30f4c: 0x6cb5ce20, 0x30f4d: 0x6cb5d020, 0x30f4e: 0x6cb5d220, 0x30f4f: 0x6cb5d420, + 0x30f50: 0x6cb5d620, 0x30f51: 0x6ce5ea20, 0x30f52: 0x6ce5ec20, 0x30f53: 0x6ce5ee20, + 0x30f54: 0x6ce5f020, 0x30f55: 0x6ce5f220, 0x30f56: 0x6d146e20, 0x30f57: 0x6d147020, + 0x30f58: 0x6d147220, 0x30f59: 0x6d147420, 0x30f5a: 0x6d426420, 0x30f5b: 0x6d989020, + 0x30f5c: 0x6c421020, 0x30f5d: 0x6c020c20, 0x30f5e: 0x6c0ab420, 0x30f5f: 0x6c0ab620, + 0x30f60: 0x6c15a420, 0x30f61: 0x6c15a620, 0x30f62: 0x6c15a820, 0x30f63: 0x6c15aa20, + 0x30f64: 0x6c15ac20, 0x30f65: 0x6c282620, 0x30f66: 0x6c282820, 0x30f67: 0x6c282a20, + 0x30f68: 0x6c282c20, 0x30f69: 0x6c282e20, 0x30f6a: 0x6c283020, 0x30f6b: 0x6c283220, + 0x30f6c: 0x6c283420, 0x30f6d: 0x6c283620, 0x30f6e: 0x6c283820, 0x30f6f: 0x6c283a20, + 0x30f70: 0x6c283c20, 0x30f71: 0x6c283e20, 0x30f72: 0x6c284020, 0x30f73: 0x6c284220, + 0x30f74: 0x6c284420, 0x30f75: 0x6c284620, 0x30f76: 0x6c284820, 0x30f77: 0x6c421820, + 0x30f78: 0x6c421a20, 0x30f79: 0x6c421c20, 0x30f7a: 0x6c421e20, 0x30f7b: 0x6c422020, + 0x30f7c: 0x6c422220, 0x30f7d: 0x6c422420, 0x30f7e: 0x6c422620, 0x30f7f: 0x6c422820, + // Block 0xc3e, offset 0x30f80 + 0x30f80: 0x6c422a20, 0x30f81: 0x6c422c20, 0x30f82: 0x6c422e20, 0x30f83: 0x6c423020, + 0x30f84: 0x6c423220, 0x30f85: 0x6c423420, 0x30f86: 0x6c423620, 0x30f87: 0x6c423820, + 0x30f88: 0x6c423a20, 0x30f89: 0x6c423c20, 0x30f8a: 0x6c62d620, 0x30f8b: 0x6c62d820, + 0x30f8c: 0x6c62da20, 0x30f8d: 0x6c62dc20, 0x30f8e: 0x6c62de20, 0x30f8f: 0x6c62e020, + 0x30f90: 0x6c62e220, 0x30f91: 0x6c62e420, 0x30f92: 0x6c62e620, 0x30f93: 0x6c62e820, + 0x30f94: 0x6c62ea20, 0x30f95: 0x6c62ec20, 0x30f96: 0x6c89b220, 0x30f97: 0x6c89b420, + 0x30f98: 0x6c89b620, 0x30f99: 0x6c89b820, 0x30f9a: 0x6c89d820, 0x30f9b: 0x6c89ba20, + 0x30f9c: 0x6c89bc20, 0x30f9d: 0x6c89be20, 0x30f9e: 0x6c89c020, 0x30f9f: 0x6c89c220, + 0x30fa0: 0x6c89c420, 0x30fa1: 0x6c89c620, 0x30fa2: 0x6c89c820, 0x30fa3: 0x6c89ca20, + 0x30fa4: 0x6c89cc20, 0x30fa5: 0x6c89ce20, 0x30fa6: 0x6c89d020, 0x30fa7: 0x6c89d220, + 0x30fa8: 0x6c89d420, 0x30fa9: 0x6c89d620, 0x30faa: 0x6cb5e820, 0x30fab: 0x6cb5ea20, + 0x30fac: 0x6cb5ec20, 0x30fad: 0x6cb5ee20, 0x30fae: 0x6cb5f020, 0x30faf: 0x6cb5f220, + 0x30fb0: 0x6cb5f420, 0x30fb1: 0x6cb5f620, 0x30fb2: 0x6ce5fa20, 0x30fb3: 0x6cb5f820, + 0x30fb4: 0x6cb5fa20, 0x30fb5: 0x6cb5fc20, 0x30fb6: 0x6cb5fe20, 0x30fb7: 0x6cb60020, + 0x30fb8: 0x6cb60220, 0x30fb9: 0x6cb60420, 0x30fba: 0x6cb60620, 0x30fbb: 0x6ce60220, + 0x30fbc: 0x6cb60820, 0x30fbd: 0x6ce60420, 0x30fbe: 0x6ce60620, 0x30fbf: 0x6ce60820, + // Block 0xc3f, offset 0x30fc0 + 0x30fc0: 0x6ce60a20, 0x30fc1: 0x6ce60c20, 0x30fc2: 0x6ce60e20, 0x30fc3: 0x6ce61020, + 0x30fc4: 0x6ce61220, 0x30fc5: 0x6ce61420, 0x30fc6: 0x6ce61620, 0x30fc7: 0x6ce61820, + 0x30fc8: 0x6ce61a20, 0x30fc9: 0x6ce61c20, 0x30fca: 0x6ce61e20, 0x30fcb: 0x6ce62020, + 0x30fcc: 0x6ce62220, 0x30fcd: 0x6ce62420, 0x30fce: 0x6ce62620, 0x30fcf: 0x6d147e20, + 0x30fd0: 0x6ce62820, 0x30fd1: 0x6d148c20, 0x30fd2: 0x6d148e20, 0x30fd3: 0x6d149020, + 0x30fd4: 0x6d149220, 0x30fd5: 0x6d149420, 0x30fd6: 0x6d149620, 0x30fd7: 0x6d149820, + 0x30fd8: 0x6d149a20, 0x30fd9: 0x6d426a20, 0x30fda: 0x6d427420, 0x30fdb: 0x6d427620, + 0x30fdc: 0x6d427820, 0x30fdd: 0x6d427a20, 0x30fde: 0x6d427c20, 0x30fdf: 0x6d427e20, + 0x30fe0: 0x6d428020, 0x30fe1: 0x6d428220, 0x30fe2: 0x6d6f9020, 0x30fe3: 0x6d6f9220, + 0x30fe4: 0x6d6f9420, 0x30fe5: 0x6d6f9620, 0x30fe6: 0x6d989820, 0x30fe7: 0x6d989a20, + 0x30fe8: 0x6d989c20, 0x30fe9: 0x6d989e20, 0x30fea: 0x6d98a020, 0x30feb: 0x6d98a220, + 0x30fec: 0x6dbb9220, 0x30fed: 0x6dbb9420, 0x30fee: 0x6dbb9620, 0x30fef: 0x6dbb9820, + 0x30ff0: 0x6dbb9a20, 0x30ff1: 0x6dbb9c20, 0x30ff2: 0x6dbb9e20, 0x30ff3: 0x6dd96a20, + 0x30ff4: 0x6df1a420, 0x30ff5: 0x6e05dc20, 0x30ff6: 0x6c427220, 0x30ff7: 0x6d98c020, + 0x30ff8: 0x6dbbb220, 0x30ff9: 0x6c427420, 0x30ffa: 0x6c8a3220, 0x30ffb: 0x6c8a3420, + 0x30ffc: 0x6c8a3620, 0x30ffd: 0x6c8a3820, 0x30ffe: 0x6c8a3a20, 0x30fff: 0x6cb66420, + // Block 0xc40, offset 0x31000 + 0x31000: 0x6cb66620, 0x31001: 0x6ce69020, 0x31002: 0x6ce69220, 0x31003: 0x6ce69420, + 0x31004: 0x6ce69620, 0x31005: 0x6ce69820, 0x31006: 0x6ce69a20, 0x31007: 0x6ce69c20, + 0x31008: 0x6ce69e20, 0x31009: 0x6d14e820, 0x3100a: 0x6d14ea20, 0x3100b: 0x6d14ec20, + 0x3100c: 0x6d42ce20, 0x3100d: 0x6d14ee20, 0x3100e: 0x6d14f020, 0x3100f: 0x6d14f220, + 0x31010: 0x6d42d220, 0x31011: 0x6d42d420, 0x31012: 0x6d42d620, 0x31013: 0x6d6fd020, + 0x31014: 0x6d98cc20, 0x31015: 0x6d98ce20, 0x31016: 0x6dbbba20, 0x31017: 0x6dd98c20, + 0x31018: 0x6dd98e20, 0x31019: 0x6dd99020, 0x3101a: 0x6dd99220, 0x3101b: 0x6dd99420, + 0x3101c: 0x6dd99620, 0x3101d: 0x6dd99820, 0x3101e: 0x6dd99a20, 0x3101f: 0x6dd99c20, + 0x31020: 0x6dd99e20, 0x31021: 0x6df1b020, 0x31022: 0x6dd9bc20, 0x31023: 0x6df1b220, + 0x31024: 0x6e169620, 0x31025: 0x6e358020, 0x31026: 0x6e358220, 0x31027: 0x6e435c20, + 0x31028: 0x6c427820, 0x31029: 0x6cb67e20, 0x3102a: 0x6cb68020, 0x3102b: 0x6cb68220, + 0x3102c: 0x6ce6c220, 0x3102d: 0x6ce6c420, 0x3102e: 0x6ce6c620, 0x3102f: 0x6ce6c820, + 0x31030: 0x6ce6ca20, 0x31031: 0x6ce6cc20, 0x31032: 0x6ce6ce20, 0x31033: 0x6ce6d020, + 0x31034: 0x6d151a20, 0x31035: 0x6d151c20, 0x31036: 0x6d151e20, 0x31037: 0x6d152020, + 0x31038: 0x6d152220, 0x31039: 0x6d152420, 0x3103a: 0x6d152620, 0x3103b: 0x6d152820, + 0x3103c: 0x6d152a20, 0x3103d: 0x6d152c20, 0x3103e: 0x6d152e20, 0x3103f: 0x6d431c20, + // Block 0xc41, offset 0x31040 + 0x31040: 0x6d431e20, 0x31041: 0x6d432020, 0x31042: 0x6d700220, 0x31043: 0x6d700420, + 0x31044: 0x6d700620, 0x31045: 0x6d700820, 0x31046: 0x6d700a20, 0x31047: 0x6d700c20, + 0x31048: 0x6d700e20, 0x31049: 0x6d701020, 0x3104a: 0x6d701220, 0x3104b: 0x6d991620, + 0x3104c: 0x6d991820, 0x3104d: 0x6d991a20, 0x3104e: 0x6d991c20, 0x3104f: 0x6d991e20, + 0x31050: 0x6d992020, 0x31051: 0x6d992220, 0x31052: 0x6d992420, 0x31053: 0x6d992620, + 0x31054: 0x6d992820, 0x31055: 0x6d992a20, 0x31056: 0x6d992c20, 0x31057: 0x6d992e20, + 0x31058: 0x6dbbfa20, 0x31059: 0x6dbbfc20, 0x3105a: 0x6dbbfe20, 0x3105b: 0x6dbc0020, + 0x3105c: 0x6dbc0220, 0x3105d: 0x6dbc0420, 0x3105e: 0x6dbc0620, 0x3105f: 0x6dbc0820, + 0x31060: 0x6dbc0a20, 0x31061: 0x6dbc5220, 0x31062: 0x6dd9ca20, 0x31063: 0x6dd9cc20, + 0x31064: 0x6dd9ce20, 0x31065: 0x6dd9d020, 0x31066: 0x6df1de20, 0x31067: 0x6df1e020, + 0x31068: 0x6df1e220, 0x31069: 0x6df1e420, 0x3106a: 0x6df1e620, 0x3106b: 0x6df1e820, + 0x3106c: 0x6df1ea20, 0x3106d: 0x6df1ec20, 0x3106e: 0x6e061e20, 0x3106f: 0x6e062020, + 0x31070: 0x6e062220, 0x31071: 0x6e062420, 0x31072: 0x6e16b020, 0x31073: 0x6e062620, + 0x31074: 0x6e062820, 0x31075: 0x6e16b220, 0x31076: 0x6e16b420, 0x31077: 0x6e16b620, + 0x31078: 0x6e16b820, 0x31079: 0x6e16ba20, 0x3107a: 0x6e16bc20, 0x3107b: 0x6e16be20, + 0x3107c: 0x6e23d820, 0x3107d: 0x6e23da20, 0x3107e: 0x6e23dc20, 0x3107f: 0x6e23de20, + // Block 0xc42, offset 0x31080 + 0x31080: 0x6e23e020, 0x31081: 0x6e2dea20, 0x31082: 0x6e359020, 0x31083: 0x6e359220, + 0x31084: 0x6e359420, 0x31085: 0x6e359620, 0x31086: 0x6e359820, 0x31087: 0x6e359a20, + 0x31088: 0x6e359c20, 0x31089: 0x6e3b0420, 0x3108a: 0x6e3ec220, 0x3108b: 0x6e416820, + 0x3108c: 0x6e416a20, 0x3108d: 0x6e416c20, 0x3108e: 0x6e416e20, 0x3108f: 0x6e44a620, + 0x31090: 0x6e472220, 0x31091: 0x6c427a20, 0x31092: 0x6c427c20, 0x31093: 0x6ce6f620, + 0x31094: 0x6ce6f820, 0x31095: 0x6d155420, 0x31096: 0x6d155620, 0x31097: 0x6d435020, + 0x31098: 0x6d435220, 0x31099: 0x6d435420, 0x3109a: 0x6d704e20, 0x3109b: 0x6d997a20, + 0x3109c: 0x6d997c20, 0x3109d: 0x6dda1c20, 0x3109e: 0x6c427e20, 0x3109f: 0x6ce70020, + 0x310a0: 0x6d705220, 0x310a1: 0x6df23a20, 0x310a2: 0x6c632e20, 0x310a3: 0x6c428020, + 0x310a4: 0x6d436220, 0x310a5: 0x6d705c20, 0x310a6: 0x6d998a20, 0x310a7: 0x6e16f420, + 0x310a8: 0x6e2dfe20, 0x310a9: 0x6c633220, 0x310aa: 0x6cb6a820, 0x310ab: 0x6ce71e20, + 0x310ac: 0x6ce72020, 0x310ad: 0x6ce72220, 0x310ae: 0x6ce72420, 0x310af: 0x6ce72620, + 0x310b0: 0x6ce72820, 0x310b1: 0x6ce72a20, 0x310b2: 0x6d158820, 0x310b3: 0x6d158a20, + 0x310b4: 0x6d158c20, 0x310b5: 0x6d158e20, 0x310b6: 0x6d159020, 0x310b7: 0x6d159220, + 0x310b8: 0x6d159420, 0x310b9: 0x6d159620, 0x310ba: 0x6d438a20, 0x310bb: 0x6d438c20, + 0x310bc: 0x6d438e20, 0x310bd: 0x6d439020, 0x310be: 0x6d439220, 0x310bf: 0x6d439420, + // Block 0xc43, offset 0x310c0 + 0x310c0: 0x6d439620, 0x310c1: 0x6d439820, 0x310c2: 0x6d439a20, 0x310c3: 0x6d439c20, + 0x310c4: 0x6d439e20, 0x310c5: 0x6d43a020, 0x310c6: 0x6d43a220, 0x310c7: 0x6d707420, + 0x310c8: 0x6d707620, 0x310c9: 0x6d707820, 0x310ca: 0x6d707a20, 0x310cb: 0x6d707c20, + 0x310cc: 0x6d707e20, 0x310cd: 0x6d708020, 0x310ce: 0x6d708220, 0x310cf: 0x6d708420, + 0x310d0: 0x6d708620, 0x310d1: 0x6d708820, 0x310d2: 0x6d708a20, 0x310d3: 0x6d99b220, + 0x310d4: 0x6d99b420, 0x310d5: 0x6d99b620, 0x310d6: 0x6d99b820, 0x310d7: 0x6d99ba20, + 0x310d8: 0x6d99bc20, 0x310d9: 0x6d99be20, 0x310da: 0x6dbc7420, 0x310db: 0x6dbc7620, + 0x310dc: 0x6dbc7820, 0x310dd: 0x6dbc7a20, 0x310de: 0x6dbc7c20, 0x310df: 0x6dbc7e20, + 0x310e0: 0x6dbc8020, 0x310e1: 0x6dbc8220, 0x310e2: 0x6dda3e20, 0x310e3: 0x6dda4020, + 0x310e4: 0x6dda4220, 0x310e5: 0x6dda4420, 0x310e6: 0x6dda4620, 0x310e7: 0x6dda4820, + 0x310e8: 0x6dda4a20, 0x310e9: 0x6dda4c20, 0x310ea: 0x6dda4e20, 0x310eb: 0x6dda5020, + 0x310ec: 0x6dda5220, 0x310ed: 0x6dda5420, 0x310ee: 0x6dda5620, 0x310ef: 0x6dda5820, + 0x310f0: 0x6dda5a20, 0x310f1: 0x6df24e20, 0x310f2: 0x6df25020, 0x310f3: 0x6df25220, + 0x310f4: 0x6df25420, 0x310f5: 0x6df25620, 0x310f6: 0x6df25820, 0x310f7: 0x6df25a20, + 0x310f8: 0x6e069020, 0x310f9: 0x6e069220, 0x310fa: 0x6e069420, 0x310fb: 0x6e069620, + 0x310fc: 0x6e171620, 0x310fd: 0x6e171820, 0x310fe: 0x6e171a20, 0x310ff: 0x6e171c20, + // Block 0xc44, offset 0x31100 + 0x31100: 0x6e241820, 0x31101: 0x6e241a20, 0x31102: 0x6e241c20, 0x31103: 0x6e241e20, + 0x31104: 0x6e2e0e20, 0x31105: 0x6e2e1020, 0x31106: 0x6e35bc20, 0x31107: 0x6e35be20, + 0x31108: 0x6e35c020, 0x31109: 0x6e3ee020, 0x3110a: 0x6e456e20, 0x3110b: 0x6c633420, + 0x3110c: 0x6ce73420, 0x3110d: 0x6d43e020, 0x3110e: 0x6d43e220, 0x3110f: 0x6d70c220, + 0x31110: 0x6d70c420, 0x31111: 0x6d70c620, 0x31112: 0x6d99ee20, 0x31113: 0x6dbcc620, + 0x31114: 0x6dbcc820, 0x31115: 0x6dbcca20, 0x31116: 0x6ddaaa20, 0x31117: 0x6ddaac20, + 0x31118: 0x6ddaae20, 0x31119: 0x6ddab020, 0x3111a: 0x6ddab220, 0x3111b: 0x6e06d420, + 0x3111c: 0x6df2a820, 0x3111d: 0x6df2aa20, 0x3111e: 0x6df2ac20, 0x3111f: 0x6df2ae20, + 0x31120: 0x6e06d620, 0x31121: 0x6e174220, 0x31122: 0x6e174420, 0x31123: 0x6e244820, + 0x31124: 0x6e35ce20, 0x31125: 0x6e35d020, 0x31126: 0x6c053420, 0x31127: 0x6c287c20, + 0x31128: 0x6c633620, 0x31129: 0x6ce73820, 0x3112a: 0x6d15d420, 0x3112b: 0x6d15d620, + 0x3112c: 0x6d43fc20, 0x3112d: 0x6c633c20, 0x3112e: 0x6d15e020, 0x3112f: 0x6d70e220, + 0x31130: 0x6d9a0420, 0x31131: 0x6dbcea20, 0x31132: 0x6df2c620, 0x31133: 0x6c633e20, + 0x31134: 0x6d15e820, 0x31135: 0x6d15ea20, 0x31136: 0x6d440420, 0x31137: 0x6d440620, + 0x31138: 0x6d9a0c20, 0x31139: 0x6ddacc20, 0x3113a: 0x6ddace20, 0x3113b: 0x6df2d020, + 0x3113c: 0x6df2d220, 0x3113d: 0x6e06f220, 0x3113e: 0x6e06f420, 0x3113f: 0x6e06f620, + // Block 0xc45, offset 0x31140 + 0x31140: 0x6e2e3c20, 0x31141: 0x6c634020, 0x31142: 0x6cb6b220, 0x31143: 0x6cb6b420, + 0x31144: 0x6cb6b620, 0x31145: 0x6ce74820, 0x31146: 0x6ce74a20, 0x31147: 0x6ce74c20, + 0x31148: 0x6ce74e20, 0x31149: 0x6d15f220, 0x3114a: 0x6d15fa20, 0x3114b: 0x6d15fc20, + 0x3114c: 0x6d15fe20, 0x3114d: 0x6d160020, 0x3114e: 0x6d160220, 0x3114f: 0x6d160420, + 0x31150: 0x6d160620, 0x31151: 0x6d160820, 0x31152: 0x6d160a20, 0x31153: 0x6d160c20, + 0x31154: 0x6d442620, 0x31155: 0x6d442820, 0x31156: 0x6d442a20, 0x31157: 0x6d442c20, + 0x31158: 0x6d442e20, 0x31159: 0x6d441220, 0x3115a: 0x6d443020, 0x3115b: 0x6d710020, + 0x3115c: 0x6d710220, 0x3115d: 0x6d710420, 0x3115e: 0x6d710620, 0x3115f: 0x6d710820, + 0x31160: 0x6d710a20, 0x31161: 0x6d710c20, 0x31162: 0x6d710e20, 0x31163: 0x6d711020, + 0x31164: 0x6d9a2a20, 0x31165: 0x6d9a2c20, 0x31166: 0x6d711220, 0x31167: 0x6d711420, + 0x31168: 0x6d711620, 0x31169: 0x6d711820, 0x3116a: 0x6d711a20, 0x3116b: 0x6d711c20, + 0x3116c: 0x6d711e20, 0x3116d: 0x6d9a2e20, 0x3116e: 0x6d9a3020, 0x3116f: 0x6d9a3220, + 0x31170: 0x6d9a3420, 0x31171: 0x6d9a3620, 0x31172: 0x6d9a3820, 0x31173: 0x6d9a3a20, + 0x31174: 0x6d9a3c20, 0x31175: 0x6d9a3e20, 0x31176: 0x6d9a4020, 0x31177: 0x6d9a4220, + 0x31178: 0x6d9a4420, 0x31179: 0x6d9a4620, 0x3117a: 0x6d9a4820, 0x3117b: 0x6d9a4a20, + 0x3117c: 0x6d9a4c20, 0x3117d: 0x6d9a4e20, 0x3117e: 0x6ddaf020, 0x3117f: 0x6ddada20, + // Block 0xc46, offset 0x31180 + 0x31180: 0x6dbd0c20, 0x31181: 0x6dbd0e20, 0x31182: 0x6dbd1020, 0x31183: 0x6dbd1220, + 0x31184: 0x6dbd1420, 0x31185: 0x6dbd1620, 0x31186: 0x6dbd1820, 0x31187: 0x6dbd1a20, + 0x31188: 0x6dbd1c20, 0x31189: 0x6dbd1e20, 0x3118a: 0x6dbd2020, 0x3118b: 0x6ddaf220, + 0x3118c: 0x6ddaf420, 0x3118d: 0x6ddaf620, 0x3118e: 0x6ddaf820, 0x3118f: 0x6ddafa20, + 0x31190: 0x6ddafc20, 0x31191: 0x6ddafe20, 0x31192: 0x6ddb0020, 0x31193: 0x6ddb0220, + 0x31194: 0x6ddb0420, 0x31195: 0x6ddb0620, 0x31196: 0x6df2f020, 0x31197: 0x6df2f220, + 0x31198: 0x6df2f420, 0x31199: 0x6df2f620, 0x3119a: 0x6df2f820, 0x3119b: 0x6df2fa20, + 0x3119c: 0x6df2fc20, 0x3119d: 0x6df2fe20, 0x3119e: 0x6df30020, 0x3119f: 0x6e070e20, + 0x311a0: 0x6e071020, 0x311a1: 0x6e071220, 0x311a2: 0x6e071420, 0x311a3: 0x6e071620, + 0x311a4: 0x6e177220, 0x311a5: 0x6e177420, 0x311a6: 0x6e177620, 0x311a7: 0x6e177820, + 0x311a8: 0x6e177a20, 0x311a9: 0x6e246e20, 0x311aa: 0x6e247020, 0x311ab: 0x6e247220, + 0x311ac: 0x6e2e4020, 0x311ad: 0x6e2e4220, 0x311ae: 0x6e2e4420, 0x311af: 0x6e2e4620, + 0x311b0: 0x6e35de20, 0x311b1: 0x6e3b3820, 0x311b2: 0x6e3b3a20, 0x311b3: 0x6e418220, + 0x311b4: 0x6e418420, 0x311b5: 0x6c15d220, 0x311b6: 0x6c428620, 0x311b7: 0x6c428820, + 0x311b8: 0x6c634420, 0x311b9: 0x6c634620, 0x311ba: 0x6c634820, 0x311bb: 0x6c634a20, + 0x311bc: 0x6c8a5220, 0x311bd: 0x6c8a5420, 0x311be: 0x6c8a5620, 0x311bf: 0x6c8a5820, + // Block 0xc47, offset 0x311c0 + 0x311c0: 0x6c8a5a20, 0x311c1: 0x6c8a5c20, 0x311c2: 0x6c8a5e20, 0x311c3: 0x6c8a6020, + 0x311c4: 0x6c8a6220, 0x311c5: 0x6cb6c020, 0x311c6: 0x6cb6c220, 0x311c7: 0x6cb6c420, + 0x311c8: 0x6cb6c620, 0x311c9: 0x6ce76220, 0x311ca: 0x6ce76420, 0x311cb: 0x6ce76620, + 0x311cc: 0x6ce76820, 0x311cd: 0x6ce76a20, 0x311ce: 0x6ce76c20, 0x311cf: 0x6ce76e20, + 0x311d0: 0x6d163e20, 0x311d1: 0x6d164020, 0x311d2: 0x6d164220, 0x311d3: 0x6d164420, + 0x311d4: 0x6d164620, 0x311d5: 0x6d164820, 0x311d6: 0x6d164a20, 0x311d7: 0x6d447220, + 0x311d8: 0x6d715e20, 0x311d9: 0x6d716020, 0x311da: 0x6d716220, 0x311db: 0x6d716420, + 0x311dc: 0x6d716620, 0x311dd: 0x6d716820, 0x311de: 0x6d9ab220, 0x311df: 0x6d9ab420, + 0x311e0: 0x6d9ab620, 0x311e1: 0x6d9ab820, 0x311e2: 0x6ddb3e20, 0x311e3: 0x6ddb4020, + 0x311e4: 0x6df33820, 0x311e5: 0x6e074820, 0x311e6: 0x6e17aa20, 0x311e7: 0x6e2e6c20, + 0x311e8: 0x6c634e20, 0x311e9: 0x6ce77a20, 0x311ea: 0x6ce77c20, 0x311eb: 0x6d165820, + 0x311ec: 0x6d165a20, 0x311ed: 0x6d448a20, 0x311ee: 0x6d448c20, 0x311ef: 0x6d448e20, + 0x311f0: 0x6d449020, 0x311f1: 0x6d449220, 0x311f2: 0x6d717020, 0x311f3: 0x6d717220, + 0x311f4: 0x6d9ac620, 0x311f5: 0x6d9ac820, 0x311f6: 0x6dbd7820, 0x311f7: 0x6dbd7a20, + 0x311f8: 0x6ddb5020, 0x311f9: 0x6ddb5220, 0x311fa: 0x6ddb5420, 0x311fb: 0x6df34220, + 0x311fc: 0x6df34420, 0x311fd: 0x6df34620, 0x311fe: 0x6df34820, 0x311ff: 0x6df34a20, + // Block 0xc48, offset 0x31200 + 0x31200: 0x6df34c20, 0x31201: 0x6e074e20, 0x31202: 0x6e075020, 0x31203: 0x6e075220, + 0x31204: 0x6e075420, 0x31205: 0x6e17b020, 0x31206: 0x6e17b220, 0x31207: 0x6e17b420, + 0x31208: 0x6e17b620, 0x31209: 0x6e17b820, 0x3120a: 0x6e17ba20, 0x3120b: 0x6e249020, + 0x3120c: 0x6e418c20, 0x3120d: 0x6e418e20, 0x3120e: 0x6c053620, 0x3120f: 0x6c287e20, + 0x31210: 0x6c635020, 0x31211: 0x6c635220, 0x31212: 0x6c635420, 0x31213: 0x6ce78e20, + 0x31214: 0x6d168020, 0x31215: 0x6d44b820, 0x31216: 0x6d44b620, 0x31217: 0x6d44ba20, + 0x31218: 0x6d719420, 0x31219: 0x6d9af420, 0x3121a: 0x6d9af620, 0x3121b: 0x6c635c20, + 0x3121c: 0x6e17dc20, 0x3121d: 0x6e419420, 0x3121e: 0x6c020e20, 0x3121f: 0x6c636220, + 0x31220: 0x6c636420, 0x31221: 0x6cb6d820, 0x31222: 0x6c8a6820, 0x31223: 0x6c8a6a20, + 0x31224: 0x6c8a6c20, 0x31225: 0x6cb6da20, 0x31226: 0x6cb6dc20, 0x31227: 0x6ce79e20, + 0x31228: 0x6ce7a020, 0x31229: 0x6ce7a220, 0x3122a: 0x6ce7a420, 0x3122b: 0x6ce7a620, + 0x3122c: 0x6d169420, 0x3122d: 0x6ce7a820, 0x3122e: 0x6d169620, 0x3122f: 0x6ce7aa20, + 0x31230: 0x6ce7ac20, 0x31231: 0x6d169820, 0x31232: 0x6ce7ae20, 0x31233: 0x6d169a20, + 0x31234: 0x6d169c20, 0x31235: 0x6d169e20, 0x31236: 0x6d16a020, 0x31237: 0x6d16a220, + 0x31238: 0x6d44d620, 0x31239: 0x6d16a420, 0x3123a: 0x6d71a620, 0x3123b: 0x6d16a620, + 0x3123c: 0x6d16a820, 0x3123d: 0x6d16aa20, 0x3123e: 0x6d16ac20, 0x3123f: 0x6d16ae20, + // Block 0xc49, offset 0x31240 + 0x31240: 0x6d44d820, 0x31241: 0x6d44da20, 0x31242: 0x6d44dc20, 0x31243: 0x6d44de20, + 0x31244: 0x6d44e020, 0x31245: 0x6d44e220, 0x31246: 0x6d44e420, 0x31247: 0x6d44e620, + 0x31248: 0x6d71a820, 0x31249: 0x6d44e820, 0x3124a: 0x6d71aa20, 0x3124b: 0x6d71ac20, + 0x3124c: 0x6d44ea20, 0x3124d: 0x6d71ae20, 0x3124e: 0x6d44ec20, 0x3124f: 0x6d44ee20, + 0x31250: 0x6d9b0820, 0x31251: 0x6d71b020, 0x31252: 0x6d71b220, 0x31253: 0x6d71b420, + 0x31254: 0x6d71b620, 0x31255: 0x6d71b820, 0x31256: 0x6d71ba20, 0x31257: 0x6d71bc20, + 0x31258: 0x6d71be20, 0x31259: 0x6d71c020, 0x3125a: 0x6d9b0c20, 0x3125b: 0x6d9b0e20, + 0x3125c: 0x6d9b1020, 0x3125d: 0x6d9b0a20, 0x3125e: 0x6d9b1220, 0x3125f: 0x6d9b1420, + 0x31260: 0x6d9b1620, 0x31261: 0x6d9b1820, 0x31262: 0x6d9b1a20, 0x31263: 0x6d9b1c20, + 0x31264: 0x6d9b1e20, 0x31265: 0x6dbdca20, 0x31266: 0x6d9b2020, 0x31267: 0x6d9b2220, + 0x31268: 0x6d9b2420, 0x31269: 0x6d9b2620, 0x3126a: 0x6dbdcc20, 0x3126b: 0x6dbdce20, + 0x3126c: 0x6dbdd020, 0x3126d: 0x6dbdd220, 0x3126e: 0x6ddb9a20, 0x3126f: 0x6dbdd420, + 0x31270: 0x6dbdd620, 0x31271: 0x6dbdd820, 0x31272: 0x6dbdda20, 0x31273: 0x6dbddc20, + 0x31274: 0x6d9b8c20, 0x31275: 0x6dbdde20, 0x31276: 0x6ddb9c20, 0x31277: 0x6dbde020, + 0x31278: 0x6ddb9e20, 0x31279: 0x6ddba020, 0x3127a: 0x6ddba220, 0x3127b: 0x6ddba420, + 0x3127c: 0x6ddba620, 0x3127d: 0x6ddba820, 0x3127e: 0x6ddbaa20, 0x3127f: 0x6ddbac20, + // Block 0xc4a, offset 0x31280 + 0x31280: 0x6ddbae20, 0x31281: 0x6ddbb020, 0x31282: 0x6dbe4420, 0x31283: 0x6df38820, + 0x31284: 0x6df38a20, 0x31285: 0x6df38c20, 0x31286: 0x6dbe4620, 0x31287: 0x6df38e20, + 0x31288: 0x6df39020, 0x31289: 0x6df39220, 0x3128a: 0x6e077420, 0x3128b: 0x6e077620, + 0x3128c: 0x6e077820, 0x3128d: 0x6e077a20, 0x3128e: 0x6e077c20, 0x3128f: 0x6e17ec20, + 0x31290: 0x6e077e20, 0x31291: 0x6e078020, 0x31292: 0x6e078220, 0x31293: 0x6e078420, + 0x31294: 0x6e24ae20, 0x31295: 0x6e24b020, 0x31296: 0x6e17ee20, 0x31297: 0x6e17f020, + 0x31298: 0x6e17f220, 0x31299: 0x6e07c220, 0x3129a: 0x6e24b220, 0x3129b: 0x6e24b420, + 0x3129c: 0x6e2e8220, 0x3129d: 0x6e360220, 0x3129e: 0x6e3b4c20, 0x3129f: 0x6e3b4e20, + 0x312a0: 0x6e419820, 0x312a1: 0x6e419a20, 0x312a2: 0x6e457220, 0x312a3: 0x6c021020, + 0x312a4: 0x6c0ac220, 0x312a5: 0x6c0ac420, 0x312a6: 0x6c15d420, 0x312a7: 0x6c15d620, + 0x312a8: 0x6c288020, 0x312a9: 0x6c288220, 0x312aa: 0x6c288420, 0x312ab: 0x6c288620, + 0x312ac: 0x6c288820, 0x312ad: 0x6c288a20, 0x312ae: 0x6c288c20, 0x312af: 0x6c429820, + 0x312b0: 0x6c429a20, 0x312b1: 0x6c429c20, 0x312b2: 0x6c429e20, 0x312b3: 0x6c42a020, + 0x312b4: 0x6c42a220, 0x312b5: 0x6c636820, 0x312b6: 0x6c636a20, 0x312b7: 0x6c636c20, + 0x312b8: 0x6c636e20, 0x312b9: 0x6c637020, 0x312ba: 0x6c637220, 0x312bb: 0x6c637420, + 0x312bc: 0x6c637620, 0x312bd: 0x6c8a7420, 0x312be: 0x6c8a7620, 0x312bf: 0x6c8a7820, + // Block 0xc4b, offset 0x312c0 + 0x312c0: 0x6c8a7a20, 0x312c1: 0x6c8a7c20, 0x312c2: 0x6c8a7e20, 0x312c3: 0x6cb6fa20, + 0x312c4: 0x6cb6fc20, 0x312c5: 0x6cb6fe20, 0x312c6: 0x6cb70020, 0x312c7: 0x6ce7d820, + 0x312c8: 0x6ce7da20, 0x312c9: 0x6d16f420, 0x312ca: 0x6ce7dc20, 0x312cb: 0x6ce7de20, + 0x312cc: 0x6d16f620, 0x312cd: 0x6d16f820, 0x312ce: 0x6d16fa20, 0x312cf: 0x6d16fc20, + 0x312d0: 0x6d16fe20, 0x312d1: 0x6d452020, 0x312d2: 0x6d452220, 0x312d3: 0x6d71fe20, + 0x312d4: 0x6d720020, 0x312d5: 0x6e3b5220, 0x312d6: 0x6c637e20, 0x312d7: 0x6cb70c20, + 0x312d8: 0x6dbe4820, 0x312d9: 0x6c638220, 0x312da: 0x6d170820, 0x312db: 0x6d453620, + 0x312dc: 0x6d453820, 0x312dd: 0x6d453a20, 0x312de: 0x6d9ba020, 0x312df: 0x6d9ba220, + 0x312e0: 0x6d9ba420, 0x312e1: 0x6dbe5620, 0x312e2: 0x6dbe5820, 0x312e3: 0x6dbe5a20, + 0x312e4: 0x6ddc0420, 0x312e5: 0x6ddc0620, 0x312e6: 0x6df3ec20, 0x312e7: 0x6df3ee20, + 0x312e8: 0x6e07ca20, 0x312e9: 0x6e182420, 0x312ea: 0x6e2e9a20, 0x312eb: 0x6e41a020, + 0x312ec: 0x6c8a8e20, 0x312ed: 0x6ce7f220, 0x312ee: 0x6ce7f420, 0x312ef: 0x6d171420, + 0x312f0: 0x6d171620, 0x312f1: 0x6d171820, 0x312f2: 0x6d171a20, 0x312f3: 0x6d171c20, + 0x312f4: 0x6d171e20, 0x312f5: 0x6d172020, 0x312f6: 0x6d455820, 0x312f7: 0x6d455a20, + 0x312f8: 0x6d455c20, 0x312f9: 0x6d455e20, 0x312fa: 0x6d456020, 0x312fb: 0x6d456220, + 0x312fc: 0x6d456420, 0x312fd: 0x6d456620, 0x312fe: 0x6d456820, 0x312ff: 0x6d456a20, + // Block 0xc4c, offset 0x31300 + 0x31300: 0x6d456c20, 0x31301: 0x6d456e20, 0x31302: 0x6d457020, 0x31303: 0x6d457220, + 0x31304: 0x6d457420, 0x31305: 0x6d457620, 0x31306: 0x6d457820, 0x31307: 0x6d457a20, + 0x31308: 0x6d723220, 0x31309: 0x6d723420, 0x3130a: 0x6d723620, 0x3130b: 0x6d723820, + 0x3130c: 0x6d723a20, 0x3130d: 0x6d723c20, 0x3130e: 0x6d723e20, 0x3130f: 0x6d724020, + 0x31310: 0x6d724220, 0x31311: 0x6d724420, 0x31312: 0x6d724620, 0x31313: 0x6d724820, + 0x31314: 0x6d724a20, 0x31315: 0x6d724c20, 0x31316: 0x6d724e20, 0x31317: 0x6d725020, + 0x31318: 0x6d725220, 0x31319: 0x6d725420, 0x3131a: 0x6d725620, 0x3131b: 0x6d725820, + 0x3131c: 0x6d725a20, 0x3131d: 0x6d725c20, 0x3131e: 0x6d725e20, 0x3131f: 0x6d726020, + 0x31320: 0x6d726220, 0x31321: 0x6d9bba20, 0x31322: 0x6d9bbc20, 0x31323: 0x6d9bbe20, + 0x31324: 0x6d9bc020, 0x31325: 0x6d9bc220, 0x31326: 0x6d9bc420, 0x31327: 0x6d9bc620, + 0x31328: 0x6d9bc820, 0x31329: 0x6d9bca20, 0x3132a: 0x6d9bcc20, 0x3132b: 0x6d9bce20, + 0x3132c: 0x6d9bd020, 0x3132d: 0x6d9bd220, 0x3132e: 0x6d9bd420, 0x3132f: 0x6d9bd620, + 0x31330: 0x6d9bd820, 0x31331: 0x6d9bda20, 0x31332: 0x6d9bdc20, 0x31333: 0x6dbec020, + 0x31334: 0x6dbe7020, 0x31335: 0x6dbe7220, 0x31336: 0x6dbe7420, 0x31337: 0x6dbe7620, + 0x31338: 0x6dbe7820, 0x31339: 0x6dbe7a20, 0x3133a: 0x6dbe7c20, 0x3133b: 0x6dbe7e20, + 0x3133c: 0x6dbe8020, 0x3133d: 0x6dbe8220, 0x3133e: 0x6dbe8420, 0x3133f: 0x6dbe8620, + // Block 0xc4d, offset 0x31340 + 0x31340: 0x6dbe8820, 0x31341: 0x6dbe8a20, 0x31342: 0x6dbe8c20, 0x31343: 0x6dbe8e20, + 0x31344: 0x6ddc2820, 0x31345: 0x6ddc2a20, 0x31346: 0x6ddc2c20, 0x31347: 0x6ddc2e20, + 0x31348: 0x6ddc3020, 0x31349: 0x6ddc3220, 0x3134a: 0x6ddc3420, 0x3134b: 0x6ddc3620, + 0x3134c: 0x6ddc3820, 0x3134d: 0x6ddc3a20, 0x3134e: 0x6ddc3c20, 0x3134f: 0x6ddc3e20, + 0x31350: 0x6ddc4020, 0x31351: 0x6ddc4220, 0x31352: 0x6ddc4420, 0x31353: 0x6ddc4620, + 0x31354: 0x6df40a20, 0x31355: 0x6df40c20, 0x31356: 0x6df40e20, 0x31357: 0x6df41020, + 0x31358: 0x6df41220, 0x31359: 0x6df41420, 0x3135a: 0x6df41620, 0x3135b: 0x6df41820, + 0x3135c: 0x6df41a20, 0x3135d: 0x6df41c20, 0x3135e: 0x6df41e20, 0x3135f: 0x6df42020, + 0x31360: 0x6df42220, 0x31361: 0x6df42420, 0x31362: 0x6df42620, 0x31363: 0x6df42820, + 0x31364: 0x6df42a20, 0x31365: 0x6df42c20, 0x31366: 0x6df42e20, 0x31367: 0x6df43020, + 0x31368: 0x6df43220, 0x31369: 0x6e07e620, 0x3136a: 0x6e07e820, 0x3136b: 0x6e07ea20, + 0x3136c: 0x6e07ec20, 0x3136d: 0x6e07ee20, 0x3136e: 0x6e07f020, 0x3136f: 0x6e07f220, + 0x31370: 0x6e07f420, 0x31371: 0x6e07f620, 0x31372: 0x6e07f820, 0x31373: 0x6e07fa20, + 0x31374: 0x6e07fc20, 0x31375: 0x6e07fe20, 0x31376: 0x6e080020, 0x31377: 0x6e080220, + 0x31378: 0x6e080420, 0x31379: 0x6e184220, 0x3137a: 0x6e184420, 0x3137b: 0x6e184620, + 0x3137c: 0x6e184820, 0x3137d: 0x6e184a20, 0x3137e: 0x6e184c20, 0x3137f: 0x6e184e20, + // Block 0xc4e, offset 0x31380 + 0x31380: 0x6e185020, 0x31381: 0x6e185220, 0x31382: 0x6e185420, 0x31383: 0x6e185620, + 0x31384: 0x6e185820, 0x31385: 0x6e185a20, 0x31386: 0x6e185c20, 0x31387: 0x6e185e20, + 0x31388: 0x6e24ee20, 0x31389: 0x6e24f020, 0x3138a: 0x6e24f220, 0x3138b: 0x6e24f420, + 0x3138c: 0x6e24f620, 0x3138d: 0x6e24f820, 0x3138e: 0x6e24fa20, 0x3138f: 0x6e24fc20, + 0x31390: 0x6e24fe20, 0x31391: 0x6e250020, 0x31392: 0x6e250220, 0x31393: 0x6e250420, + 0x31394: 0x6e250620, 0x31395: 0x6e250820, 0x31396: 0x6e2ea420, 0x31397: 0x6e2ea620, + 0x31398: 0x6e2ea820, 0x31399: 0x6e2eaa20, 0x3139a: 0x6e2eac20, 0x3139b: 0x6e2eae20, + 0x3139c: 0x6e2eb020, 0x3139d: 0x6e362220, 0x3139e: 0x6e362420, 0x3139f: 0x6e362620, + 0x313a0: 0x6e3f1420, 0x313a1: 0x6e3f1620, 0x313a2: 0x6e3f1820, 0x313a3: 0x6e3f1a20, + 0x313a4: 0x6e41a420, 0x313a5: 0x6e3f2620, 0x313a6: 0x6e41a620, 0x313a7: 0x6e41a820, + 0x313a8: 0x6e437a20, 0x313a9: 0x6e437c20, 0x313aa: 0x6e44c220, 0x313ab: 0x6e457620, + 0x313ac: 0x6c021220, 0x313ad: 0x6c0ac620, 0x313ae: 0x6c15da20, 0x313af: 0x6c15dc20, + 0x313b0: 0x6c15de20, 0x313b1: 0x6c289820, 0x313b2: 0x6c289a20, 0x313b3: 0x6c289c20, + 0x313b4: 0x6c289e20, 0x313b5: 0x6c42ae20, 0x313b6: 0x6c42b020, 0x313b7: 0x6c42b220, + 0x313b8: 0x6c42b420, 0x313b9: 0x6c42b620, 0x313ba: 0x6c42b820, 0x313bb: 0x6c42ba20, + 0x313bc: 0x6c42bc20, 0x313bd: 0x6c42be20, 0x313be: 0x6c42c020, 0x313bf: 0x6c42c220, + // Block 0xc4f, offset 0x313c0 + 0x313c0: 0x6c42c420, 0x313c1: 0x6c638420, 0x313c2: 0x6c638620, 0x313c3: 0x6c638820, + 0x313c4: 0x6c638a20, 0x313c5: 0x6c638c20, 0x313c6: 0x6c638e20, 0x313c7: 0x6c639020, + 0x313c8: 0x6c639220, 0x313c9: 0x6c639420, 0x313ca: 0x6c8a9420, 0x313cb: 0x6c8a9620, + 0x313cc: 0x6c8a9820, 0x313cd: 0x6c8a9a20, 0x313ce: 0x6c8a9c20, 0x313cf: 0x6c8a9e20, + 0x313d0: 0x6cb71420, 0x313d1: 0x6cb71620, 0x313d2: 0x6cb71820, 0x313d3: 0x6cb71a20, + 0x313d4: 0x6cb71c20, 0x313d5: 0x6cb71e20, 0x313d6: 0x6cb72020, 0x313d7: 0x6ce80420, + 0x313d8: 0x6ce80620, 0x313d9: 0x6ce80820, 0x313da: 0x6ce80a20, 0x313db: 0x6ce80c20, + 0x313dc: 0x6d173220, 0x313dd: 0x6d173420, 0x313de: 0x6d173620, 0x313df: 0x6d173820, + 0x313e0: 0x6d45ac20, 0x313e1: 0x6d45ae20, 0x313e2: 0x6d45b020, 0x313e3: 0x6d72aa20, + 0x313e4: 0x6dbec420, 0x313e5: 0x6df48220, 0x313e6: 0x6e086e20, 0x313e7: 0x6e087020, + 0x313e8: 0x6c8aae20, 0x313e9: 0x6ce82c20, 0x313ea: 0x6d174820, 0x313eb: 0x6d174a20, + 0x313ec: 0x6d174c20, 0x313ed: 0x6d174e20, 0x313ee: 0x6d175020, 0x313ef: 0x6d45bc20, + 0x313f0: 0x6d45be20, 0x313f1: 0x6d45c020, 0x313f2: 0x6d72bc20, 0x313f3: 0x6d72be20, + 0x313f4: 0x6d72c020, 0x313f5: 0x6d72c220, 0x313f6: 0x6d72c420, 0x313f7: 0x6d72c620, + 0x313f8: 0x6d9c4220, 0x313f9: 0x6d9c4420, 0x313fa: 0x6d9c4620, 0x313fb: 0x6d9c4820, + 0x313fc: 0x6d9c4a20, 0x313fd: 0x6dbed220, 0x313fe: 0x6dbed420, 0x313ff: 0x6d9c6820, + // Block 0xc50, offset 0x31400 + 0x31400: 0x6ddcac20, 0x31401: 0x6ddcae20, 0x31402: 0x6df48c20, 0x31403: 0x6df48e20, + 0x31404: 0x6e087220, 0x31405: 0x6df49020, 0x31406: 0x6e087620, 0x31407: 0x6e087820, + 0x31408: 0x6e087a20, 0x31409: 0x6e087c20, 0x3140a: 0x6e087e20, 0x3140b: 0x6e088020, + 0x3140c: 0x6e088220, 0x3140d: 0x6e189420, 0x3140e: 0x6e189620, 0x3140f: 0x6e189820, + 0x31410: 0x6e254620, 0x31411: 0x6e2ee620, 0x31412: 0x6e254820, 0x31413: 0x6e2ee820, + 0x31414: 0x6e2eea20, 0x31415: 0x6e364420, 0x31416: 0x6e3b7420, 0x31417: 0x6e3f2820, + 0x31418: 0x6c8ab020, 0x31419: 0x6cb73620, 0x3141a: 0x6d45e620, 0x3141b: 0x6d72e220, + 0x3141c: 0x6ddcda20, 0x3141d: 0x6e256420, 0x3141e: 0x6e2ef820, 0x3141f: 0x6c8ab220, + 0x31420: 0x6ce84620, 0x31421: 0x6d177820, 0x31422: 0x6d177a20, 0x31423: 0x6d460620, + 0x31424: 0x6d460820, 0x31425: 0x6d460a20, 0x31426: 0x6d460c20, 0x31427: 0x6d460e20, + 0x31428: 0x6d461020, 0x31429: 0x6d461220, 0x3142a: 0x6d461420, 0x3142b: 0x6d72f220, + 0x3142c: 0x6d72f420, 0x3142d: 0x6d9c7a20, 0x3142e: 0x6d72f620, 0x3142f: 0x6d72f820, + 0x31430: 0x6d72fa20, 0x31431: 0x6d72fc20, 0x31432: 0x6d72fe20, 0x31433: 0x6d730020, + 0x31434: 0x6d730220, 0x31435: 0x6d9c8020, 0x31436: 0x6d9c8220, 0x31437: 0x6d9c8420, + 0x31438: 0x6d9c8620, 0x31439: 0x6d9c8820, 0x3143a: 0x6d9c8a20, 0x3143b: 0x6d9c8c20, + 0x3143c: 0x6dbf1420, 0x3143d: 0x6dbf1620, 0x3143e: 0x6dbf1820, 0x3143f: 0x6dbf1a20, + // Block 0xc51, offset 0x31440 + 0x31440: 0x6dbf1c20, 0x31441: 0x6dbf1e20, 0x31442: 0x6dbf2020, 0x31443: 0x6ddcf220, + 0x31444: 0x6ddcf420, 0x31445: 0x6ddcf620, 0x31446: 0x6ddcf820, 0x31447: 0x6d9c8e20, + 0x31448: 0x6ddcfa20, 0x31449: 0x6df4b220, 0x3144a: 0x6df4b420, 0x3144b: 0x6df4b620, + 0x3144c: 0x6df4b820, 0x3144d: 0x6df4ba20, 0x3144e: 0x6df4bc20, 0x3144f: 0x6df4be20, + 0x31450: 0x6e08b220, 0x31451: 0x6e08b420, 0x31452: 0x6e08b620, 0x31453: 0x6e08b820, + 0x31454: 0x6e18b420, 0x31455: 0x6e18b620, 0x31456: 0x6e18b820, 0x31457: 0x6e18ba20, + 0x31458: 0x6e18bc20, 0x31459: 0x6e256c20, 0x3145a: 0x6e256e20, 0x3145b: 0x6e257020, + 0x3145c: 0x6e257220, 0x3145d: 0x6e256820, 0x3145e: 0x6e2f0020, 0x3145f: 0x6e2f0220, + 0x31460: 0x6e2f0420, 0x31461: 0x6e365c20, 0x31462: 0x6e365e20, 0x31463: 0x6e3b8620, + 0x31464: 0x6e41be20, 0x31465: 0x6c8ab420, 0x31466: 0x6d463c20, 0x31467: 0x6d734420, + 0x31468: 0x6d9cc020, 0x31469: 0x6ddd3820, 0x3146a: 0x6e08ee20, 0x3146b: 0x6e25a420, + 0x3146c: 0x6e367420, 0x3146d: 0x6e367620, 0x3146e: 0x6e41c820, 0x3146f: 0x6c8aba20, + 0x31470: 0x6e41ca20, 0x31471: 0x6e44ca20, 0x31472: 0x6c8abc20, 0x31473: 0x6d9cc820, + 0x31474: 0x6dbf5620, 0x31475: 0x6ddd4020, 0x31476: 0x6ddd4220, 0x31477: 0x6df4fa20, + 0x31478: 0x6e08f420, 0x31479: 0x6e18f420, 0x3147a: 0x6e18f620, 0x3147b: 0x6e25ae20, + 0x3147c: 0x6c8abe20, 0x3147d: 0x6d179220, 0x3147e: 0x6d465020, 0x3147f: 0x6d465220, + // Block 0xc52, offset 0x31480 + 0x31480: 0x6d465420, 0x31481: 0x6d465620, 0x31482: 0x6d465820, 0x31483: 0x6d735820, + 0x31484: 0x6d735a20, 0x31485: 0x6d735c20, 0x31486: 0x6d735e20, 0x31487: 0x6d9cde20, + 0x31488: 0x6dbf6220, 0x31489: 0x6dbf6420, 0x3148a: 0x6ddd5620, 0x3148b: 0x6ddd5820, + 0x3148c: 0x6ddd5a20, 0x3148d: 0x6ddd5c20, 0x3148e: 0x6ddd5e20, 0x3148f: 0x6ddd6020, + 0x31490: 0x6e090220, 0x31491: 0x6e190620, 0x31492: 0x6e190820, 0x31493: 0x6e190a20, + 0x31494: 0x6e190c20, 0x31495: 0x6e25be20, 0x31496: 0x6e25c020, 0x31497: 0x6e368a20, + 0x31498: 0x6e368c20, 0x31499: 0x6e368e20, 0x3149a: 0x6cb74420, 0x3149b: 0x6d17c620, + 0x3149c: 0x6d17c820, 0x3149d: 0x6d17ca20, 0x3149e: 0x6d17cc20, 0x3149f: 0x6d469220, + 0x314a0: 0x6d469420, 0x314a1: 0x6d469620, 0x314a2: 0x6d469820, 0x314a3: 0x6d739620, + 0x314a4: 0x6d739820, 0x314a5: 0x6d739a20, 0x314a6: 0x6d739c20, 0x314a7: 0x6d739e20, + 0x314a8: 0x6d73a020, 0x314a9: 0x6d73a220, 0x314aa: 0x6d73a420, 0x314ab: 0x6d73a620, + 0x314ac: 0x6d73a820, 0x314ad: 0x6d73aa20, 0x314ae: 0x6d73ac20, 0x314af: 0x6d73ae20, + 0x314b0: 0x6d73b020, 0x314b1: 0x6d73b220, 0x314b2: 0x6d73b420, 0x314b3: 0x6d73b620, + 0x314b4: 0x6d73b820, 0x314b5: 0x6d73ba20, 0x314b6: 0x6d73bc20, 0x314b7: 0x6d73be20, + 0x314b8: 0x6d73c020, 0x314b9: 0x6d73c220, 0x314ba: 0x6d9d2420, 0x314bb: 0x6d9d2620, + 0x314bc: 0x6d9d2820, 0x314bd: 0x6d9d2a20, 0x314be: 0x6d9d2c20, 0x314bf: 0x6d9d2e20, + // Block 0xc53, offset 0x314c0 + 0x314c0: 0x6d9d3020, 0x314c1: 0x6d9d3220, 0x314c2: 0x6d9d3420, 0x314c3: 0x6d9d3620, + 0x314c4: 0x6d9d3820, 0x314c5: 0x6d9d3a20, 0x314c6: 0x6dbf9020, 0x314c7: 0x6d9d3c20, + 0x314c8: 0x6d9d3e20, 0x314c9: 0x6d9d4020, 0x314ca: 0x6d9d4220, 0x314cb: 0x6d9d4420, + 0x314cc: 0x6d9d4620, 0x314cd: 0x6d9d4820, 0x314ce: 0x6d9d4a20, 0x314cf: 0x6d9d4c20, + 0x314d0: 0x6d9d4e20, 0x314d1: 0x6d9d5020, 0x314d2: 0x6d9d5220, 0x314d3: 0x6d9d5420, + 0x314d4: 0x6d9d5620, 0x314d5: 0x6d9d5820, 0x314d6: 0x6d9d5a20, 0x314d7: 0x6d9d5c20, + 0x314d8: 0x6d9d5e20, 0x314d9: 0x6dbf9c20, 0x314da: 0x6dbf9e20, 0x314db: 0x6dbfa020, + 0x314dc: 0x6dbfa220, 0x314dd: 0x6dbfa420, 0x314de: 0x6dbfa620, 0x314df: 0x6dbfa820, + 0x314e0: 0x6dbfaa20, 0x314e1: 0x6dbfac20, 0x314e2: 0x6dbfae20, 0x314e3: 0x6d9d6020, + 0x314e4: 0x6dbfb020, 0x314e5: 0x6dbfb220, 0x314e6: 0x6dbfb420, 0x314e7: 0x6dbfb620, + 0x314e8: 0x6dbfb820, 0x314e9: 0x6dbfba20, 0x314ea: 0x6dbfbc20, 0x314eb: 0x6dbfbe20, + 0x314ec: 0x6dbfc020, 0x314ed: 0x6dbfc220, 0x314ee: 0x6dbfc420, 0x314ef: 0x6dbfc620, + 0x314f0: 0x6dbfc820, 0x314f1: 0x6dbfca20, 0x314f2: 0x6dbfcc20, 0x314f3: 0x6dbfce20, + 0x314f4: 0x6dbfd020, 0x314f5: 0x6ddd9820, 0x314f6: 0x6ddd9a20, 0x314f7: 0x6ddd9c20, + 0x314f8: 0x6ddd9e20, 0x314f9: 0x6ddda020, 0x314fa: 0x6dbfd220, 0x314fb: 0x6ddda220, + 0x314fc: 0x6ddda420, 0x314fd: 0x6ddda620, 0x314fe: 0x6ddda820, 0x314ff: 0x6dddaa20, + // Block 0xc54, offset 0x31500 + 0x31500: 0x6dddac20, 0x31501: 0x6dddae20, 0x31502: 0x6dddb020, 0x31503: 0x6dddb220, + 0x31504: 0x6dddb420, 0x31505: 0x6df51c20, 0x31506: 0x6dddb620, 0x31507: 0x6dddb820, + 0x31508: 0x6dddba20, 0x31509: 0x6dddbc20, 0x3150a: 0x6dddbe20, 0x3150b: 0x6dddc020, + 0x3150c: 0x6dddc220, 0x3150d: 0x6dddc420, 0x3150e: 0x6dc03a20, 0x3150f: 0x6dddc620, + 0x31510: 0x6dddc820, 0x31511: 0x6dddca20, 0x31512: 0x6dddcc20, 0x31513: 0x6dddce20, + 0x31514: 0x6df54220, 0x31515: 0x6df54420, 0x31516: 0x6df54620, 0x31517: 0x6df54820, + 0x31518: 0x6df54a20, 0x31519: 0x6df54c20, 0x3151a: 0x6df54e20, 0x3151b: 0x6df55020, + 0x3151c: 0x6df55220, 0x3151d: 0x6df55420, 0x3151e: 0x6df55620, 0x3151f: 0x6df55820, + 0x31520: 0x6df55a20, 0x31521: 0x6df55c20, 0x31522: 0x6df55e20, 0x31523: 0x6df56020, + 0x31524: 0x6df56220, 0x31525: 0x6df56420, 0x31526: 0x6df56620, 0x31527: 0x6df56820, + 0x31528: 0x6df56a20, 0x31529: 0x6df56c20, 0x3152a: 0x6df56e20, 0x3152b: 0x6df57020, + 0x3152c: 0x6df57220, 0x3152d: 0x6df57420, 0x3152e: 0x6df57620, 0x3152f: 0x6df57820, + 0x31530: 0x6df57a20, 0x31531: 0x6df57c20, 0x31532: 0x6df57e20, 0x31533: 0x6df58020, + 0x31534: 0x6df58220, 0x31535: 0x6df58420, 0x31536: 0x6e093220, 0x31537: 0x6e093420, + 0x31538: 0x6e093620, 0x31539: 0x6e093820, 0x3153a: 0x6df61c20, 0x3153b: 0x6e091c20, + 0x3153c: 0x6e093a20, 0x3153d: 0x6dddd020, 0x3153e: 0x6e093c20, 0x3153f: 0x6e093e20, + // Block 0xc55, offset 0x31540 + 0x31540: 0x6e094020, 0x31541: 0x6e094220, 0x31542: 0x6e094420, 0x31543: 0x6e094620, + 0x31544: 0x6e094820, 0x31545: 0x6e094a20, 0x31546: 0x6e094c20, 0x31547: 0x6e094e20, + 0x31548: 0x6e095020, 0x31549: 0x6e095220, 0x3154a: 0x6e095420, 0x3154b: 0x6e095620, + 0x3154c: 0x6e095820, 0x3154d: 0x6e095a20, 0x3154e: 0x6e095c20, 0x3154f: 0x6e095e20, + 0x31550: 0x6e096020, 0x31551: 0x6e096220, 0x31552: 0x6e096420, 0x31553: 0x6e096620, + 0x31554: 0x6e096820, 0x31555: 0x6e096a20, 0x31556: 0x6e096c20, 0x31557: 0x6e096e20, + 0x31558: 0x6e097020, 0x31559: 0x6e097220, 0x3155a: 0x6e097420, 0x3155b: 0x6e097620, + 0x3155c: 0x6e194620, 0x3155d: 0x6e194820, 0x3155e: 0x6e194a20, 0x3155f: 0x6e194c20, + 0x31560: 0x6e097820, 0x31561: 0x6e194e20, 0x31562: 0x6e195020, 0x31563: 0x6e195220, + 0x31564: 0x6e195420, 0x31565: 0x6e195620, 0x31566: 0x6e195820, 0x31567: 0x6e195a20, + 0x31568: 0x6e195c20, 0x31569: 0x6e195e20, 0x3156a: 0x6e196020, 0x3156b: 0x6e196220, + 0x3156c: 0x6e196420, 0x3156d: 0x6e196620, 0x3156e: 0x6e196820, 0x3156f: 0x6e196a20, + 0x31570: 0x6e196c20, 0x31571: 0x6e25de20, 0x31572: 0x6e25e020, 0x31573: 0x6e25e220, + 0x31574: 0x6e25e420, 0x31575: 0x6e25e620, 0x31576: 0x6e25e820, 0x31577: 0x6e25ea20, + 0x31578: 0x6e25ec20, 0x31579: 0x6e25ee20, 0x3157a: 0x6e25f020, 0x3157b: 0x6e25f220, + 0x3157c: 0x6e25f420, 0x3157d: 0x6e25f620, 0x3157e: 0x6e25f820, 0x3157f: 0x6e25fa20, + // Block 0xc56, offset 0x31580 + 0x31580: 0x6e09e620, 0x31581: 0x6e25fc20, 0x31582: 0x6e25fe20, 0x31583: 0x6e260020, + 0x31584: 0x6e260220, 0x31585: 0x6e260420, 0x31586: 0x6e260620, 0x31587: 0x6e260820, + 0x31588: 0x6e260a20, 0x31589: 0x6e267220, 0x3158a: 0x6e2f5620, 0x3158b: 0x6e2f5820, + 0x3158c: 0x6e2f5a20, 0x3158d: 0x6e2f5c20, 0x3158e: 0x6e2f5e20, 0x3158f: 0x6e2f6020, + 0x31590: 0x6e2f6220, 0x31591: 0x6e2f6420, 0x31592: 0x6e2f6620, 0x31593: 0x6e2f6820, + 0x31594: 0x6e2f6a20, 0x31595: 0x6e2f6c20, 0x31596: 0x6e2f6e20, 0x31597: 0x6e2f7020, + 0x31598: 0x6e2f7220, 0x31599: 0x6e2f7420, 0x3159a: 0x6e2f7620, 0x3159b: 0x6e2f7820, + 0x3159c: 0x6e36a620, 0x3159d: 0x6e36a820, 0x3159e: 0x6e36aa20, 0x3159f: 0x6e36ac20, + 0x315a0: 0x6e36ae20, 0x315a1: 0x6e36b020, 0x315a2: 0x6e36b220, 0x315a3: 0x6e36b420, + 0x315a4: 0x6e36b620, 0x315a5: 0x6e36b820, 0x315a6: 0x6e36ba20, 0x315a7: 0x6e36bc20, + 0x315a8: 0x6e3bac20, 0x315a9: 0x6e36be20, 0x315aa: 0x6e2fda20, 0x315ab: 0x6e36c020, + 0x315ac: 0x6e3bae20, 0x315ad: 0x6e3bb020, 0x315ae: 0x6e3bb220, 0x315af: 0x6e3bb420, + 0x315b0: 0x6e371420, 0x315b1: 0x6e3f5420, 0x315b2: 0x6e3f5620, 0x315b3: 0x6e3f5820, + 0x315b4: 0x6e3f5a20, 0x315b5: 0x6e3f5c20, 0x315b6: 0x6e3f5e20, 0x315b7: 0x6e41da20, + 0x315b8: 0x6e41dc20, 0x315b9: 0x6e44d220, 0x315ba: 0x6e458220, 0x315bb: 0x6e469a20, + 0x315bc: 0x6c42dc20, 0x315bd: 0x6c8ac020, 0x315be: 0x6cb74a20, 0x315bf: 0x6ce86e20, + // Block 0xc57, offset 0x315c0 + 0x315c0: 0x6ce87020, 0x315c1: 0x6ce87220, 0x315c2: 0x6ce87420, 0x315c3: 0x6ce87620, + 0x315c4: 0x6d17e020, 0x315c5: 0x6d17e220, 0x315c6: 0x6d17e420, 0x315c7: 0x6d17e620, + 0x315c8: 0x6d17e820, 0x315c9: 0x6d17ea20, 0x315ca: 0x6d17ec20, 0x315cb: 0x6d17ee20, + 0x315cc: 0x6d17f020, 0x315cd: 0x6d17f220, 0x315ce: 0x6d17f420, 0x315cf: 0x6d17f620, + 0x315d0: 0x6d17f820, 0x315d1: 0x6d46b620, 0x315d2: 0x6d46b820, 0x315d3: 0x6d46ba20, + 0x315d4: 0x6d46bc20, 0x315d5: 0x6d46be20, 0x315d6: 0x6d46c020, 0x315d7: 0x6d46c220, + 0x315d8: 0x6d46c420, 0x315d9: 0x6d46c620, 0x315da: 0x6d46c820, 0x315db: 0x6d46ca20, + 0x315dc: 0x6d46cc20, 0x315dd: 0x6d46ce20, 0x315de: 0x6d46d020, 0x315df: 0x6d46d220, + 0x315e0: 0x6d740c20, 0x315e1: 0x6d740e20, 0x315e2: 0x6d741020, 0x315e3: 0x6d741220, + 0x315e4: 0x6d741420, 0x315e5: 0x6d741620, 0x315e6: 0x6d741820, 0x315e7: 0x6d741a20, + 0x315e8: 0x6d741c20, 0x315e9: 0x6d741e20, 0x315ea: 0x6d742020, 0x315eb: 0x6d742220, + 0x315ec: 0x6d742420, 0x315ed: 0x6d9db020, 0x315ee: 0x6d9db220, 0x315ef: 0x6d9db420, + 0x315f0: 0x6d9db620, 0x315f1: 0x6d9db820, 0x315f2: 0x6d9dba20, 0x315f3: 0x6d9dbc20, + 0x315f4: 0x6d9dbe20, 0x315f5: 0x6d9dc020, 0x315f6: 0x6d9dc220, 0x315f7: 0x6d9dc420, + 0x315f8: 0x6d9dc620, 0x315f9: 0x6d9dc820, 0x315fa: 0x6d9dca20, 0x315fb: 0x6d9dcc20, + 0x315fc: 0x6dc03c20, 0x315fd: 0x6dc03e20, 0x315fe: 0x6dc06820, 0x315ff: 0x6dc04020, + // Block 0xc58, offset 0x31600 + 0x31600: 0x6dc04220, 0x31601: 0x6dc04420, 0x31602: 0x6dc04620, 0x31603: 0x6dc04820, + 0x31604: 0x6dc04a20, 0x31605: 0x6dc04c20, 0x31606: 0x6dc04e20, 0x31607: 0x6dc05020, + 0x31608: 0x6dc05220, 0x31609: 0x6dc05420, 0x3160a: 0x6dc05620, 0x3160b: 0x6dc05820, + 0x3160c: 0x6dde2e20, 0x3160d: 0x6dde3020, 0x3160e: 0x6dde3220, 0x3160f: 0x6dde3420, + 0x31610: 0x6dde3620, 0x31611: 0x6dde3820, 0x31612: 0x6dde3a20, 0x31613: 0x6df61e20, + 0x31614: 0x6df62020, 0x31615: 0x6df62220, 0x31616: 0x6df62420, 0x31617: 0x6df62620, + 0x31618: 0x6df62820, 0x31619: 0x6df62a20, 0x3161a: 0x6df62c20, 0x3161b: 0x6df62e20, + 0x3161c: 0x6e09ec20, 0x3161d: 0x6e09ee20, 0x3161e: 0x6e09f020, 0x3161f: 0x6e09f220, + 0x31620: 0x6e19f820, 0x31621: 0x6e19fa20, 0x31622: 0x6e19fc20, 0x31623: 0x6e19fe20, + 0x31624: 0x6e267420, 0x31625: 0x6cb75220, 0x31626: 0x6ce88620, 0x31627: 0x6d180820, + 0x31628: 0x6d180a20, 0x31629: 0x6d180c20, 0x3162a: 0x6d180e20, 0x3162b: 0x6d181020, + 0x3162c: 0x6c63ac20, 0x3162d: 0x6d181220, 0x3162e: 0x6d181420, 0x3162f: 0x6d181620, + 0x31630: 0x6d181820, 0x31631: 0x6d46f420, 0x31632: 0x6d46f620, 0x31633: 0x6d46f820, + 0x31634: 0x6d46fa20, 0x31635: 0x6d46fc20, 0x31636: 0x6d46fe20, 0x31637: 0x6d745020, + 0x31638: 0x6d745220, 0x31639: 0x6d745420, 0x3163a: 0x6d745620, 0x3163b: 0x6d745820, + 0x3163c: 0x6d745a20, 0x3163d: 0x6d745c20, 0x3163e: 0x6d745e20, 0x3163f: 0x6d746020, + // Block 0xc59, offset 0x31640 + 0x31640: 0x6d746220, 0x31641: 0x6d746420, 0x31642: 0x6d746620, 0x31643: 0x6d746820, + 0x31644: 0x6d746a20, 0x31645: 0x6d746c20, 0x31646: 0x6d746e20, 0x31647: 0x6d747020, + 0x31648: 0x6d747220, 0x31649: 0x6d747420, 0x3164a: 0x6d9e0620, 0x3164b: 0x6d747620, + 0x3164c: 0x6d747820, 0x3164d: 0x6d747a20, 0x3164e: 0x6d747c20, 0x3164f: 0x6d9e0820, + 0x31650: 0x6d9e0a20, 0x31651: 0x6d9e0c20, 0x31652: 0x6d9e0e20, 0x31653: 0x6d9e1020, + 0x31654: 0x6d9e1220, 0x31655: 0x6d9e1420, 0x31656: 0x6d9e1620, 0x31657: 0x6d9e1820, + 0x31658: 0x6d9e1a20, 0x31659: 0x6d9e1c20, 0x3165a: 0x6d9e1e20, 0x3165b: 0x6d9e2020, + 0x3165c: 0x6dc06a20, 0x3165d: 0x6d9e2220, 0x3165e: 0x6d9e2420, 0x3165f: 0x6d9e2620, + 0x31660: 0x6d9e2820, 0x31661: 0x6d9e2a20, 0x31662: 0x6d9e2c20, 0x31663: 0x6d9e2e20, + 0x31664: 0x6d9e3020, 0x31665: 0x6d9e3220, 0x31666: 0x6d9e3420, 0x31667: 0x6d9e3620, + 0x31668: 0x6d9e3820, 0x31669: 0x6d9e3a20, 0x3166a: 0x6d9e3c20, 0x3166b: 0x6d9e3e20, + 0x3166c: 0x6d9e4020, 0x3166d: 0x6dc08020, 0x3166e: 0x6dc08220, 0x3166f: 0x6dc08420, + 0x31670: 0x6dc08620, 0x31671: 0x6dc08820, 0x31672: 0x6dc08a20, 0x31673: 0x6dc08c20, + 0x31674: 0x6dc08e20, 0x31675: 0x6dc09020, 0x31676: 0x6dc09220, 0x31677: 0x6dc09420, + 0x31678: 0x6dc09620, 0x31679: 0x6dc09820, 0x3167a: 0x6dc09a20, 0x3167b: 0x6dc09c20, + 0x3167c: 0x6dc09e20, 0x3167d: 0x6dc0a020, 0x3167e: 0x6dc0a220, 0x3167f: 0x6dc0a420, + // Block 0xc5a, offset 0x31680 + 0x31680: 0x6dc0a620, 0x31681: 0x6dc0a820, 0x31682: 0x6dc0aa20, 0x31683: 0x6dc0ac20, + 0x31684: 0x6dc0ae20, 0x31685: 0x6dc0b020, 0x31686: 0x6dc0b220, 0x31687: 0x6dc0b420, + 0x31688: 0x6dc0b620, 0x31689: 0x6dc0b820, 0x3168a: 0x6dde4e20, 0x3168b: 0x6dde5020, + 0x3168c: 0x6dde5220, 0x3168d: 0x6dde5420, 0x3168e: 0x6dde5620, 0x3168f: 0x6dde5820, + 0x31690: 0x6dde5a20, 0x31691: 0x6dde5c20, 0x31692: 0x6dde5e20, 0x31693: 0x6dde6020, + 0x31694: 0x6dde6220, 0x31695: 0x6dde6420, 0x31696: 0x6dde6620, 0x31697: 0x6dde6820, + 0x31698: 0x6dde6a20, 0x31699: 0x6dde6c20, 0x3169a: 0x6dde6e20, 0x3169b: 0x6dde7020, + 0x3169c: 0x6dde7220, 0x3169d: 0x6dde7420, 0x3169e: 0x6dde7620, 0x3169f: 0x6dde7820, + 0x316a0: 0x6dde7a20, 0x316a1: 0x6df63820, 0x316a2: 0x6dde7c20, 0x316a3: 0x6dde7e20, + 0x316a4: 0x6dd43a20, 0x316a5: 0x6dde8020, 0x316a6: 0x6df64c20, 0x316a7: 0x6dc13220, + 0x316a8: 0x6df64e20, 0x316a9: 0x6df65020, 0x316aa: 0x6df65220, 0x316ab: 0x6df65420, + 0x316ac: 0x6df65620, 0x316ad: 0x6df65820, 0x316ae: 0x6df65a20, 0x316af: 0x6df65c20, + 0x316b0: 0x6df65e20, 0x316b1: 0x6df66020, 0x316b2: 0x6df66220, 0x316b3: 0x6df66420, + 0x316b4: 0x6df66620, 0x316b5: 0x6df66820, 0x316b6: 0x6df66a20, 0x316b7: 0x6df66c20, + 0x316b8: 0x6df66e20, 0x316b9: 0x6df67020, 0x316ba: 0x6df67220, 0x316bb: 0x6df67420, + 0x316bc: 0x6df67620, 0x316bd: 0x6df67820, 0x316be: 0x6df67a20, 0x316bf: 0x6df67c20, + // Block 0xc5b, offset 0x316c0 + 0x316c0: 0x6df67e20, 0x316c1: 0x6df68020, 0x316c2: 0x6df68220, 0x316c3: 0x6df68420, + 0x316c4: 0x6df68620, 0x316c5: 0x6df68820, 0x316c6: 0x6df68a20, 0x316c7: 0x6df68c20, + 0x316c8: 0x6df68e20, 0x316c9: 0x6df69020, 0x316ca: 0x6df69220, 0x316cb: 0x6df69420, + 0x316cc: 0x6df69620, 0x316cd: 0x6df69820, 0x316ce: 0x6df69a20, 0x316cf: 0x6df69c20, + 0x316d0: 0x6e0a0e20, 0x316d1: 0x6df69e20, 0x316d2: 0x6e0a1020, 0x316d3: 0x6e0a1220, + 0x316d4: 0x6e0a1420, 0x316d5: 0x6e0a1620, 0x316d6: 0x6e0a1820, 0x316d7: 0x6e0a1a20, + 0x316d8: 0x6e0a1c20, 0x316d9: 0x6e0a1e20, 0x316da: 0x6e0a2020, 0x316db: 0x6e0a2220, + 0x316dc: 0x6e0a2420, 0x316dd: 0x6e0a2620, 0x316de: 0x6e0a2820, 0x316df: 0x6e0a2a20, + 0x316e0: 0x6e0a2c20, 0x316e1: 0x6e0a2e20, 0x316e2: 0x6e0a3020, 0x316e3: 0x6e0a3220, + 0x316e4: 0x6e0a3420, 0x316e5: 0x6e0a3620, 0x316e6: 0x6e0a3820, 0x316e7: 0x6e0a3a20, + 0x316e8: 0x6e0a3c20, 0x316e9: 0x6e0a3e20, 0x316ea: 0x6e0a4020, 0x316eb: 0x6e0a4220, + 0x316ec: 0x6e1a1020, 0x316ed: 0x6e1a1220, 0x316ee: 0x6e1a1420, 0x316ef: 0x6e1a1620, + 0x316f0: 0x6e1a1820, 0x316f1: 0x6e1a1a20, 0x316f2: 0x6e1a1c20, 0x316f3: 0x6e1a1e20, + 0x316f4: 0x6e1a2020, 0x316f5: 0x6e1a2220, 0x316f6: 0x6e1a2420, 0x316f7: 0x6e1a2620, + 0x316f8: 0x6e1a2820, 0x316f9: 0x6e1a2a20, 0x316fa: 0x6e1a2c20, 0x316fb: 0x6e1a2e20, + 0x316fc: 0x6e1a3020, 0x316fd: 0x6e1a3220, 0x316fe: 0x6e1a3420, 0x316ff: 0x6e0ad220, + // Block 0xc5c, offset 0x31700 + 0x31700: 0x6e1a3620, 0x31701: 0x6e1a3820, 0x31702: 0x6e1a3a20, 0x31703: 0x6e1a3c20, + 0x31704: 0x6e1a3e20, 0x31705: 0x6e1a4020, 0x31706: 0x6e1a4220, 0x31707: 0x6e1a4420, + 0x31708: 0x6e1a4620, 0x31709: 0x6e1a4820, 0x3170a: 0x6e1a4a20, 0x3170b: 0x6e268620, + 0x3170c: 0x6e1a4c20, 0x3170d: 0x6e1a4e20, 0x3170e: 0x6e1a5020, 0x3170f: 0x6e1a5220, + 0x31710: 0x6e268820, 0x31711: 0x6e268a20, 0x31712: 0x6e268c20, 0x31713: 0x6e268e20, + 0x31714: 0x6e269020, 0x31715: 0x6e269220, 0x31716: 0x6e269420, 0x31717: 0x6e269620, + 0x31718: 0x6e269820, 0x31719: 0x6e269a20, 0x3171a: 0x6e269c20, 0x3171b: 0x6e269e20, + 0x3171c: 0x6e26a020, 0x3171d: 0x6e26a220, 0x3171e: 0x6e26a420, 0x3171f: 0x6e26a620, + 0x31720: 0x6e260c20, 0x31721: 0x6e2ff220, 0x31722: 0x6e2ff420, 0x31723: 0x6e2ff620, + 0x31724: 0x6e2ff820, 0x31725: 0x6e2ffa20, 0x31726: 0x6e2ffc20, 0x31727: 0x6e2ffe20, + 0x31728: 0x6e300020, 0x31729: 0x6e273020, 0x3172a: 0x6e300220, 0x3172b: 0x6e300420, + 0x3172c: 0x6e300620, 0x3172d: 0x6e300820, 0x3172e: 0x6e300a20, 0x3172f: 0x6e300c20, + 0x31730: 0x6e300e20, 0x31731: 0x6e301020, 0x31732: 0x6e301220, 0x31733: 0x6e301420, + 0x31734: 0x6e301620, 0x31735: 0x6e273220, 0x31736: 0x6e301820, 0x31737: 0x6e301a20, + 0x31738: 0x6e301c20, 0x31739: 0x6e372220, 0x3173a: 0x6e371620, 0x3173b: 0x6e301e20, + 0x3173c: 0x6e302020, 0x3173d: 0x6e372420, 0x3173e: 0x6e372620, 0x3173f: 0x6e372820, + // Block 0xc5d, offset 0x31740 + 0x31740: 0x6e372a20, 0x31741: 0x6e372c20, 0x31742: 0x6e372e20, 0x31743: 0x6e373020, + 0x31744: 0x6e373220, 0x31745: 0x6e373420, 0x31746: 0x6e373620, 0x31747: 0x6e373820, + 0x31748: 0x6e373a20, 0x31749: 0x6e373c20, 0x3174a: 0x6e373e20, 0x3174b: 0x6e3bea20, + 0x3174c: 0x6e3bec20, 0x3174d: 0x6e3bee20, 0x3174e: 0x6e3bf020, 0x3174f: 0x6e3bf220, + 0x31750: 0x6e3bf420, 0x31751: 0x6e3bf620, 0x31752: 0x6e3bf820, 0x31753: 0x6e3f8820, + 0x31754: 0x6e3f8a20, 0x31755: 0x6e41fa20, 0x31756: 0x6e41fc20, 0x31757: 0x6e41fe20, + 0x31758: 0x6e43c020, 0x31759: 0x6e43c220, 0x3175a: 0x6e43c420, 0x3175b: 0x6e44e620, + 0x3175c: 0x6e44e820, 0x3175d: 0x6e458c20, 0x3175e: 0x6e458e20, 0x3175f: 0x6c0ac820, + 0x31760: 0x6c28a620, 0x31761: 0x6c28a820, 0x31762: 0x6c42de20, 0x31763: 0x6c42e020, + 0x31764: 0x6c42e220, 0x31765: 0x6c63ae20, 0x31766: 0x6c63b020, 0x31767: 0x6c63b220, + 0x31768: 0x6c63b420, 0x31769: 0x6c63b620, 0x3176a: 0x6c8ac420, 0x3176b: 0x6c8ac620, + 0x3176c: 0x6c8ac820, 0x3176d: 0x6c8aca20, 0x3176e: 0x6c8acc20, 0x3176f: 0x6c8ace20, + 0x31770: 0x6c8ad020, 0x31771: 0x6c8ad220, 0x31772: 0x6c8ad420, 0x31773: 0x6c8ad620, + 0x31774: 0x6c8ad820, 0x31775: 0x6c8ada20, 0x31776: 0x6c8adc20, 0x31777: 0x6cb75620, + 0x31778: 0x6cb75820, 0x31779: 0x6cb75a20, 0x3177a: 0x6cb75c20, 0x3177b: 0x6cb75e20, + 0x3177c: 0x6cb76020, 0x3177d: 0x6cb76220, 0x3177e: 0x6cb76420, 0x3177f: 0x6cb76620, + // Block 0xc5e, offset 0x31780 + 0x31780: 0x6ce89020, 0x31781: 0x6ce89220, 0x31782: 0x6ce89420, 0x31783: 0x6ce89620, + 0x31784: 0x6ce89820, 0x31785: 0x6ce89a20, 0x31786: 0x6ce89c20, 0x31787: 0x6ce89e20, + 0x31788: 0x6ce8a020, 0x31789: 0x6d183020, 0x3178a: 0x6d183220, 0x3178b: 0x6d183420, + 0x3178c: 0x6d183620, 0x3178d: 0x6d183820, 0x3178e: 0x6d183a20, 0x3178f: 0x6d183c20, + 0x31790: 0x6d183e20, 0x31791: 0x6d184020, 0x31792: 0x6d184220, 0x31793: 0x6d184420, + 0x31794: 0x6d184620, 0x31795: 0x6d472620, 0x31796: 0x6d472820, 0x31797: 0x6d472a20, + 0x31798: 0x6d74e020, 0x31799: 0x6d472c20, 0x3179a: 0x6d472e20, 0x3179b: 0x6d473020, + 0x3179c: 0x6d473220, 0x3179d: 0x6d74e220, 0x3179e: 0x6d74e420, 0x3179f: 0x6d74e620, + 0x317a0: 0x6d74e820, 0x317a1: 0x6d74ea20, 0x317a2: 0x6d74ec20, 0x317a3: 0x6d74ee20, + 0x317a4: 0x6d74f020, 0x317a5: 0x6d9eba20, 0x317a6: 0x6d9ebc20, 0x317a7: 0x6d9ebe20, + 0x317a8: 0x6d9ec020, 0x317a9: 0x6dc13820, 0x317aa: 0x6dc13a20, 0x317ab: 0x6dc13c20, + 0x317ac: 0x6dc13e20, 0x317ad: 0x6ddee620, 0x317ae: 0x6ddee820, 0x317af: 0x6ddeea20, + 0x317b0: 0x6ddeec20, 0x317b1: 0x6df73020, 0x317b2: 0x6df73220, 0x317b3: 0x6e273420, + 0x317b4: 0x6e273620, 0x317b5: 0x6cb78220, 0x317b6: 0x6d750020, 0x317b7: 0x6d9eca20, + 0x317b8: 0x6df73620, 0x317b9: 0x6e0ad820, 0x317ba: 0x6e1ac620, 0x317bb: 0x6e1ac820, + 0x317bc: 0x6e378c20, 0x317bd: 0x6e378e20, 0x317be: 0x6d9ed820, 0x317bf: 0x6cb78620, + // Block 0xc5f, offset 0x317c0 + 0x317c0: 0x6d185620, 0x317c1: 0x6d185820, 0x317c2: 0x6d185a20, 0x317c3: 0x6d751220, + 0x317c4: 0x6d751420, 0x317c5: 0x6d9ee220, 0x317c6: 0x6d9ee420, 0x317c7: 0x6d9ee620, + 0x317c8: 0x6d9ee820, 0x317c9: 0x6dc14820, 0x317ca: 0x6dc14a20, 0x317cb: 0x6dc14c20, + 0x317cc: 0x6ddefc20, 0x317cd: 0x6ddefe20, 0x317ce: 0x6ddf0020, 0x317cf: 0x6ddf0220, + 0x317d0: 0x6ddf0420, 0x317d1: 0x6df74820, 0x317d2: 0x6df74a20, 0x317d3: 0x6df74c20, + 0x317d4: 0x6df74e20, 0x317d5: 0x6df75020, 0x317d6: 0x6df75220, 0x317d7: 0x6df75420, + 0x317d8: 0x6e0aec20, 0x317d9: 0x6e0aee20, 0x317da: 0x6e0af020, 0x317db: 0x6e0af220, + 0x317dc: 0x6e1ad620, 0x317dd: 0x6e1ad820, 0x317de: 0x6e274420, 0x317df: 0x6e30b220, + 0x317e0: 0x6e379a20, 0x317e1: 0x6e3c3820, 0x317e2: 0x6e43e220, 0x317e3: 0x6e460a20, + 0x317e4: 0x6e46a220, 0x317e5: 0x6cb78a20, 0x317e6: 0x6c28aa20, 0x317e7: 0x6d475620, + 0x317e8: 0x6d753420, 0x317e9: 0x6d753620, 0x317ea: 0x6d753820, 0x317eb: 0x6d753a20, + 0x317ec: 0x6d9f0620, 0x317ed: 0x6d9f0820, 0x317ee: 0x6d9f0a20, 0x317ef: 0x6dc17020, + 0x317f0: 0x6dc17220, 0x317f1: 0x6ddf2e20, 0x317f2: 0x6ddf3020, 0x317f3: 0x6df77420, + 0x317f4: 0x6df77620, 0x317f5: 0x6e0b0620, 0x317f6: 0x6e275620, 0x317f7: 0x6e44fe20, + 0x317f8: 0x6cb78c20, 0x317f9: 0x6d755a20, 0x317fa: 0x6d9f2620, 0x317fb: 0x6cb79420, + 0x317fc: 0x6d476420, 0x317fd: 0x6d476620, 0x317fe: 0x6d756420, 0x317ff: 0x6ddf5220, + // Block 0xc60, offset 0x31800 + 0x31800: 0x6df79a20, 0x31801: 0x6e0b2a20, 0x31802: 0x6e30dc20, 0x31803: 0x6ce8b420, + 0x31804: 0x6ce8b620, 0x31805: 0x6d9f3420, 0x31806: 0x6d9f3620, 0x31807: 0x6dc19420, + 0x31808: 0x6dc19620, 0x31809: 0x6dc19820, 0x3180a: 0x6ddf5a20, 0x3180b: 0x6ddf5c20, + 0x3180c: 0x6e3c4c20, 0x3180d: 0x6ce8b820, 0x3180e: 0x6d758020, 0x3180f: 0x6dc1a820, + 0x31810: 0x6e278420, 0x31811: 0x6ce8ba20, 0x31812: 0x6cb79620, 0x31813: 0x6d758a20, + 0x31814: 0x6d9f4c20, 0x31815: 0x6d9f4e20, 0x31816: 0x6d9f5020, 0x31817: 0x6d9f5220, + 0x31818: 0x6d9f5420, 0x31819: 0x6d585420, 0x3181a: 0x6dc1c220, 0x3181b: 0x6dc1c420, + 0x3181c: 0x6dc1c620, 0x3181d: 0x6dc1c820, 0x3181e: 0x6dc1ca20, 0x3181f: 0x6ddf7220, + 0x31820: 0x6ddf7420, 0x31821: 0x6ddf7620, 0x31822: 0x6df7c620, 0x31823: 0x6df7c820, + 0x31824: 0x6e0b5420, 0x31825: 0x6e0b5620, 0x31826: 0x6e0b5820, 0x31827: 0x6e0b5a20, + 0x31828: 0x6e0b5c20, 0x31829: 0x6e0b5e20, 0x3182a: 0x6e0b6020, 0x3182b: 0x6e1b2020, + 0x3182c: 0x6e1b2220, 0x3182d: 0x6e1b2420, 0x3182e: 0x6e1b2620, 0x3182f: 0x6e1b2820, + 0x31830: 0x6e278820, 0x31831: 0x6e278a20, 0x31832: 0x6e30f220, 0x31833: 0x6e30f420, + 0x31834: 0x6e30f620, 0x31835: 0x6e3c5820, 0x31836: 0x6e3fc820, 0x31837: 0x6e423420, + 0x31838: 0x6e43f420, 0x31839: 0x6ce8be20, 0x3183a: 0x6d9f7220, 0x3183b: 0x6dc1e620, + 0x3183c: 0x6df7e020, 0x3183d: 0x6d187420, 0x3183e: 0x6c42e420, 0x3183f: 0x6dc1e820, + // Block 0xc61, offset 0x31840 + 0x31840: 0x6ddf8e20, 0x31841: 0x6ddf9020, 0x31842: 0x6ddf9220, 0x31843: 0x6df7e420, + 0x31844: 0x6df7e620, 0x31845: 0x6e1b6620, 0x31846: 0x6e310c20, 0x31847: 0x6e310e20, + 0x31848: 0x6e3c7020, 0x31849: 0x6e3c7220, 0x3184a: 0x6e3fd420, 0x3184b: 0x6ce8c020, + 0x3184c: 0x6d187620, 0x3184d: 0x6e0b9620, 0x3184e: 0x6d187820, 0x3184f: 0x6d75a020, + 0x31850: 0x6d75a220, 0x31851: 0x6d75a420, 0x31852: 0x6d9f7820, 0x31853: 0x6d187a20, + 0x31854: 0x6d187c20, 0x31855: 0x6ddfaa20, 0x31856: 0x6ddfac20, 0x31857: 0x6df7f820, + 0x31858: 0x6e1b6e20, 0x31859: 0x6e1b7020, 0x3185a: 0x6e1b7220, 0x3185b: 0x6e1b7420, + 0x3185c: 0x6e311420, 0x3185d: 0x6e3c7a20, 0x3185e: 0x6e37ec20, 0x3185f: 0x6e3c7c20, + 0x31860: 0x6d188020, 0x31861: 0x6c42e620, 0x31862: 0x6dc20220, 0x31863: 0x6dc20420, + 0x31864: 0x6dc20620, 0x31865: 0x6ddfb820, 0x31866: 0x6ddfba20, 0x31867: 0x6ddfbc20, + 0x31868: 0x6ddfbe20, 0x31869: 0x6ddfc020, 0x3186a: 0x6ddfc220, 0x3186b: 0x6ddfc420, + 0x3186c: 0x6ddfc620, 0x3186d: 0x6df80c20, 0x3186e: 0x6e0ba420, 0x3186f: 0x6e0ba620, + 0x31870: 0x6e0ba820, 0x31871: 0x6e1b8020, 0x31872: 0x6e27d820, 0x31873: 0x6e27da20, + 0x31874: 0x6e27dc20, 0x31875: 0x6e27de20, 0x31876: 0x6e311c20, 0x31877: 0x6e311e20, + 0x31878: 0x6e312020, 0x31879: 0x6e312220, 0x3187a: 0x6e440020, 0x3187b: 0x6d478020, + 0x3187c: 0x6d9f8820, 0x3187d: 0x6d9f8a20, 0x3187e: 0x6dc22020, 0x3187f: 0x6dc22220, + // Block 0xc62, offset 0x31880 + 0x31880: 0x6df82220, 0x31881: 0x6df82420, 0x31882: 0x6e27f420, 0x31883: 0x6e313820, + 0x31884: 0x6e313a20, 0x31885: 0x6e380020, 0x31886: 0x6e380220, 0x31887: 0x6e3c9220, + 0x31888: 0x6e424e20, 0x31889: 0x6e46fc20, 0x3188a: 0x6d478220, 0x3188b: 0x6dc22c20, + 0x3188c: 0x6ddfec20, 0x3188d: 0x6df83420, 0x3188e: 0x6e1b9a20, 0x3188f: 0x6e314420, + 0x31890: 0x6c15e220, 0x31891: 0x6d75b420, 0x31892: 0x6d75b620, 0x31893: 0x6d9f9220, + 0x31894: 0x6dc23020, 0x31895: 0x6ddff620, 0x31896: 0x6df83e20, 0x31897: 0x6df84020, + 0x31898: 0x6df84220, 0x31899: 0x6e0bda20, 0x3189a: 0x6e0bdc20, 0x3189b: 0x6e0bde20, + 0x3189c: 0x6e1b9e20, 0x3189d: 0x6e0be020, 0x3189e: 0x6e0be220, 0x3189f: 0x6e0be420, + 0x318a0: 0x6e0be620, 0x318a1: 0x6e0be820, 0x318a2: 0x6dc23a20, 0x318a3: 0x6e0bea20, + 0x318a4: 0x6e1ba420, 0x318a5: 0x6e1ba620, 0x318a6: 0x6e1ba820, 0x318a7: 0x6e1baa20, + 0x318a8: 0x6e1bac20, 0x318a9: 0x6e1bae20, 0x318aa: 0x6e280020, 0x318ab: 0x6e280220, + 0x318ac: 0x6e280420, 0x318ad: 0x6e314a20, 0x318ae: 0x6e314c20, 0x318af: 0x6e314e20, + 0x318b0: 0x6e315020, 0x318b1: 0x6e315220, 0x318b2: 0x6e381220, 0x318b3: 0x6e381420, + 0x318b4: 0x6e381620, 0x318b5: 0x6e381820, 0x318b6: 0x6e381a20, 0x318b7: 0x6e381c20, + 0x318b8: 0x6e3ca820, 0x318b9: 0x6e3caa20, 0x318ba: 0x6e3cac20, 0x318bb: 0x6e3cae20, + 0x318bc: 0x6e440620, 0x318bd: 0x6e440820, 0x318be: 0x6e46dc20, 0x318bf: 0x6c42e820, + // Block 0xc63, offset 0x318c0 + 0x318c0: 0x6c8aee20, 0x318c1: 0x6cb79820, 0x318c2: 0x6ce8c420, 0x318c3: 0x6d188220, + 0x318c4: 0x6d188420, 0x318c5: 0x6d188620, 0x318c6: 0x6d188820, 0x318c7: 0x6d478620, + 0x318c8: 0x6d478820, 0x318c9: 0x6d75ba20, 0x318ca: 0x6d75bc20, 0x318cb: 0x6dc23c20, + 0x318cc: 0x6dc23e20, 0x318cd: 0x6d9f9c20, 0x318ce: 0x6de00020, 0x318cf: 0x6df85a20, + 0x318d0: 0x6de23620, 0x318d1: 0x6e0c1220, 0x318d2: 0x6e1be220, 0x318d3: 0x6e283820, + 0x318d4: 0x6e283a20, 0x318d5: 0x6e283c20, 0x318d6: 0x6e467820, 0x318d7: 0x6e46a820, + 0x318d8: 0x6e473c20, 0x318d9: 0x6c0aca20, 0x318da: 0x6cb79a20, 0x318db: 0x6cb79c20, + 0x318dc: 0x6d9f9e20, 0x318dd: 0x6e1bea20, 0x318de: 0x6e441620, 0x318df: 0x6c28ac20, + 0x318e0: 0x6dc24220, 0x318e1: 0x6e1c0020, 0x318e2: 0x6e284620, 0x318e3: 0x6e3cda20, + 0x318e4: 0x6e3ffc20, 0x318e5: 0x6e3ffe20, 0x318e6: 0x6d585620, 0x318e7: 0x6d7e6e20, + 0x318e8: 0x6c670020, 0x318e9: 0x6db26c20, 0x318ea: 0x6c610620, 0x318eb: 0x6ce29e20, + 0x318ec: 0x6d974220, 0x318ed: 0x6e186020, 0x318ee: 0x6e41aa20, 0x318ef: 0x6d135620, + 0x318f0: 0x6c04aa20, 0x318f1: 0x6c079420, 0x318f2: 0x6dd85820, 0x318f3: 0x6d789a20, + 0x318f4: 0x6c006420, 0x318f5: 0x6c01f820, 0x318f6: 0x6c03d220, 0x318f7: 0x6c0a5820, + 0x318f8: 0x6c083c20, 0x318f9: 0x6c0c7020, 0x318fa: 0x6c2bb820, 0x318fb: 0x6ded8620, + 0x318fc: 0x6da1a620, 0x318fd: 0x6d585820, 0x318fe: 0x6d00ea20, 0x318ff: 0x6cae1c20, + // Block 0xc64, offset 0x31900 + 0x31900: 0x6e134020, 0x31901: 0x6d0e4820, 0x31902: 0x6dd6dc20, 0x31903: 0x6cd37020, + 0x31904: 0x6c749620, 0x31905: 0x6daca820, 0x31906: 0x6c3cfa20, 0x31907: 0x6c29c820, + 0x31908: 0x6c1efa20, 0x31909: 0x6c1efc20, 0x3190a: 0x6cad0e20, 0x3190b: 0x6db51620, + // Block 0xc65, offset 0x31940 + 0x31940: 0x6c86d020, 0x31941: 0x6c219c20, 0x31942: 0x6c270e20, 0x31943: 0x6d0f3a20, + 0x31944: 0x6cfa9420, 0x31945: 0x6c160020, 0x31946: 0x6c073820, 0x31947: 0x6d9f9e20, + 0x31948: 0x6d9f9e20, 0x31949: 0x6c490c20, 0x3194a: 0x6c41dc20, 0x3194b: 0x6cbab020, + 0x3194c: 0x6c2eb020, 0x3194d: 0x6de28c20, 0x3194e: 0x6e102820, 0x3194f: 0x6de9ba20, + 0x31950: 0x6e2b8e20, 0x31951: 0x6db3f420, 0x31952: 0x6d3b6a20, 0x31953: 0x6e2d0820, + 0x31954: 0x6d540620, 0x31955: 0x6c542820, 0x31956: 0x6c782020, 0x31957: 0x6c79ee20, + 0x31958: 0x6d09ae20, 0x31959: 0x6d128020, 0x3195a: 0x6d9bda20, 0x3195b: 0x6ce8d220, + 0x3195c: 0x6c18d820, 0x3195d: 0x6e0e7820, 0x3195e: 0x6e0f8220, 0x3195f: 0x6e12b420, + 0x31960: 0x6e458e20, 0x31961: 0x6cc0c020, 0x31962: 0x6da7c620, 0x31963: 0x6dd18820, + 0x31964: 0x6e01ee20, 0x31965: 0x6c348020, 0x31966: 0x6dea2c20, 0x31967: 0x6e135e20, + 0x31968: 0x6cc21820, 0x31969: 0x6c73be20, 0x3196a: 0x6c769c20, 0x3196b: 0x6c795620, + 0x3196c: 0x6c620220, 0x3196d: 0x6c297820, 0x3196e: 0x6c179420, 0x3196f: 0x6cb9b220, + 0x31970: 0x6d7cd420, 0x31971: 0x6de3da20, 0x31972: 0x6dfc5620, 0x31973: 0x6d868620, + 0x31974: 0x6c144420, 0x31975: 0x6e008a20, 0x31976: 0x6d0bc020, 0x31977: 0x6d103820, + 0x31978: 0x6e16b020, 0x31979: 0x6d73ae20, 0x3197a: 0x6e371620, 0x3197b: 0x6d027820, + 0x3197c: 0x6d032420, 0x3197d: 0x6d33d820, 0x3197e: 0x6cdb3420, 0x3197f: 0x6d96bc20, + // Block 0xc66, offset 0x31980 + 0x31980: 0x6cb78620, 0x31981: 0x6d68ec20, 0x31982: 0x6de11020, 0x31983: 0x6c1e9220, + 0x31984: 0x6e1f9e20, 0x31985: 0x6e206020, 0x31986: 0x6c23f020, 0x31987: 0x6d5d2420, + 0x31988: 0x6d0f2e20, 0x31989: 0x6d152020, 0x3198a: 0x6dc3e620, 0x3198b: 0x6d1fe020, + 0x3198c: 0x6d542620, 0x3198d: 0x6c9f4220, 0x3198e: 0x6d295820, 0x3198f: 0x6ca91620, + 0x31990: 0x6daf5020, 0x31991: 0x6c62d820, 0x31992: 0x6c8d4420, 0x31993: 0x6c145c20, + 0x31994: 0x6d487e20, 0x31995: 0x6c65d820, 0x31996: 0x6d03ae20, 0x31997: 0x6d341420, + 0x31998: 0x6cdb8220, 0x31999: 0x6cb5fc20, 0x3199a: 0x6e21cc20, 0x3199b: 0x6c4ef420, + 0x3199c: 0x6d540620, 0x3199d: 0x6d927c20, 0x3199e: 0x6c024220, 0x3199f: 0x6d1f5620, + 0x319a0: 0x6c4d8620, 0x319a1: 0x6ca2d620, 0x319a2: 0x6ca3e620, 0x319a3: 0x6c06c620, + 0x319a4: 0x6dac3420, 0x319a5: 0x6c438020, 0x319a6: 0x6cc2d420, 0x319a7: 0x6c021a20, + 0x319a8: 0x6c38c420, 0x319a9: 0x6d527e20, 0x319aa: 0x6c803a20, 0x319ab: 0x6c8de620, + 0x319ac: 0x6ced8620, 0x319ad: 0x6c599e20, 0x319ae: 0x6d09c620, 0x319af: 0x6d3c9420, + 0x319b0: 0x6c9e2620, 0x319b1: 0x6c272020, 0x319b2: 0x6c22fc20, 0x319b3: 0x6c4f3820, + 0x319b4: 0x6c5eb420, 0x319b5: 0x6c997820, 0x319b6: 0x6ca3de20, 0x319b7: 0x6c433620, + 0x319b8: 0x6c2a4c20, 0x319b9: 0x6c65d220, 0x319ba: 0x6c9c8020, 0x319bb: 0x6dce7a20, + 0x319bc: 0x6c263620, 0x319bd: 0x6d68e420, 0x319be: 0x6ce47020, 0x319bf: 0x6da05e20, + // Block 0xc67, offset 0x319c0 + 0x319c0: 0x6c199220, 0x319c1: 0x6c019420, 0x319c2: 0x6de23220, 0x319c3: 0x6c72c420, + 0x319c4: 0x6dc8dc20, 0x319c5: 0x6dfe0220, 0x319c6: 0x6d6f2820, 0x319c7: 0x6e44c220, + 0x319c8: 0x6df75420, 0x319c9: 0x6d758020, 0x319ca: 0x6c00a820, 0x319cb: 0x6d7e5e20, + 0x319cc: 0x6d80f220, 0x319cd: 0x6e22bc20, 0x319ce: 0x6c10da20, 0x319cf: 0x6d4fbc20, + 0x319d0: 0x6e28d020, 0x319d1: 0x6d515420, 0x319d2: 0x6d297c20, 0x319d3: 0x6cfc0c20, + 0x319d4: 0x6d5a3c20, 0x319d5: 0x6c3d4620, 0x319d6: 0x6d60c620, 0x319d7: 0x6db0a020, + 0x319d8: 0x6d6bf020, 0x319d9: 0x6d642020, 0x319da: 0x6cb37e20, 0x319db: 0x6db9b220, + 0x319dc: 0x6c0cfc20, 0x319dd: 0x6c0d4020, 0x319de: 0x6c46c420, 0x319df: 0x6c77fe20, + 0x319e0: 0x6cde9a20, 0x319e1: 0x6d3c9420, 0x319e2: 0x6cf17420, 0x319e3: 0x6c32f220, + 0x319e4: 0x6c993220, 0x319e5: 0x6da72420, 0x319e6: 0x6de83e20, 0x319e7: 0x6dca5a20, + 0x319e8: 0x6c05e820, 0x319e9: 0x6c2d8820, 0x319ea: 0x6d1f5620, 0x319eb: 0x6da2f220, + 0x319ec: 0x6c333420, 0x319ed: 0x6c573a20, 0x319ee: 0x6d5a0620, 0x319ef: 0x6caa3420, + 0x319f0: 0x6caada20, 0x319f1: 0x6d12d220, 0x319f2: 0x6d151e20, 0x319f3: 0x6e359c20, + 0x319f4: 0x6d442e20, 0x319f5: 0x6c298220, 0x319f6: 0x6dcca820, 0x319f7: 0x6e043820, + 0x319f8: 0x6dbbb220, 0x319f9: 0x6cc32e20, 0x319fa: 0x6c006a20, 0x319fb: 0x6d18e420, + 0x319fc: 0x6d4cd620, 0x319fd: 0x6c1cfc20, 0x319fe: 0x6c729c20, 0x319ff: 0x6d540620, + // Block 0xc68, offset 0x31a00 + 0x31a00: 0x6d834420, 0x31a01: 0x6daa7820, 0x31a02: 0x6d643a20, 0x31a03: 0x6d95ae20, + 0x31a04: 0x6d9f9c20, 0x31a05: 0x6cf5f820, 0x31a06: 0x6c283820, 0x31a07: 0x6d48a020, + 0x31a08: 0x6c368e20, 0x31a09: 0x6c521a20, 0x31a0a: 0x6c546e20, 0x31a0b: 0x6cfa3020, + 0x31a0c: 0x6c7a1820, 0x31a0d: 0x6c7ac820, 0x31a0e: 0x6cd45220, 0x31a0f: 0x6c801620, + 0x31a10: 0x6df30020, 0x31a11: 0x6c02d820, 0x31a12: 0x6d50c420, 0x31a13: 0x6cb60220, + 0x31a14: 0x6c64a820, 0x31a15: 0x6c945a20, 0x31a16: 0x6c9f6220, 0x31a17: 0x6d6bf820, + 0x31a18: 0x6c4d5820, 0x31a19: 0x6cf2a220, 0x31a1a: 0x6c73f020, 0x31a1b: 0x6ca2d620, + 0x31a1c: 0x6ce61620, 0x31a1d: 0x6c17f820, 0x31a1e: 0x6c0e4220, 0x31a1f: 0x6d4d6420, + 0x31a20: 0x6c35ea20, 0x31a21: 0x6c21ce20, 0x31a22: 0x6c9cce20, 0x31a23: 0x6c38f420, + 0x31a24: 0x6ca30c20, 0x31a25: 0x6cd24620, 0x31a26: 0x6d8bbe20, 0x31a27: 0x6d0cea20, + 0x31a28: 0x6d0d0c20, 0x31a29: 0x6c27f020, 0x31a2a: 0x6dd9bc20, 0x31a2b: 0x6c8d9420, + 0x31a2c: 0x6cfa6c20, 0x31a2d: 0x6c194820, 0x31a2e: 0x6d834820, 0x31a2f: 0x6d84e820, + 0x31a30: 0x6e007220, 0x31a31: 0x6d6f9220, 0x31a32: 0x6e2f7020, 0x31a33: 0x6e30b220, + 0x31a34: 0x6c36c420, 0x31a35: 0x6c9f2420, 0x31a36: 0x6db16420, 0x31a37: 0x6c0a4420, + 0x31a38: 0x6ca80e20, 0x31a39: 0x6ca89c20, 0x31a3a: 0x6c3ab620, 0x31a3b: 0x6c39cc20, + 0x31a3c: 0x6ded7c20, 0x31a3d: 0x6c029620, 0x31a3e: 0x6c83b820, 0x31a3f: 0x6c2ae020, + // Block 0xc69, offset 0x31a40 + 0x31a40: 0x6c032820, 0x31a41: 0x6c4c8220, 0x31a42: 0x6c349220, 0x31a43: 0x6d8a6620, + 0x31a44: 0x6c0fbc20, 0x31a45: 0x6c542c20, 0x31a46: 0x6d531620, 0x31a47: 0x6d952420, + 0x31a48: 0x6c14d020, 0x31a49: 0x6c62dc20, 0x31a4a: 0x6c26a020, 0x31a4b: 0x6d212a20, + 0x31a4c: 0x6c014620, 0x31a4d: 0x6ceb7220, 0x31a4e: 0x6ceb3420, 0x31a4f: 0x6c69d820, + 0x31a50: 0x6ced7e20, 0x31a51: 0x6cc0dc20, 0x31a52: 0x6cc79a20, 0x31a53: 0x6cf79a20, + 0x31a54: 0x6d26f820, 0x31a55: 0x6d769020, 0x31a56: 0x6ca29820, 0x31a57: 0x6c7bf820, + 0x31a58: 0x6c13f620, 0x31a59: 0x6c7de220, 0x31a5a: 0x6ca69620, 0x31a5b: 0x6d30ce20, + 0x31a5c: 0x6d155620, 0x31a5d: 0x6d335420, 0x31a5e: 0x6c144220, 0x31a5f: 0x6deabe20, + 0x31a60: 0x6e015420, 0x31a61: 0x6caea820, 0x31a62: 0x6d697820, 0x31a63: 0x6cb20820, + 0x31a64: 0x6c412e20, 0x31a65: 0x6ce32420, 0x31a66: 0x6cb42820, 0x31a67: 0x6d6e4820, + 0x31a68: 0x6d974420, 0x31a69: 0x6d149c20, 0x31a6a: 0x6ce7aa20, 0x31a6b: 0x6d16a820, + 0x31a6c: 0x6d9b2420, 0x31a6d: 0x6e1a2020, 0x31a6e: 0x6c888620, 0x31a6f: 0x6d98c020, + 0x31a70: 0x6c435e20, 0x31a71: 0x6d18fe20, 0x31a72: 0x6c173820, 0x31a73: 0x6c456020, + 0x31a74: 0x6cea9c20, 0x31a75: 0x6c2bac20, 0x31a76: 0x6cbada20, 0x31a77: 0x6d1b7220, + 0x31a78: 0x6d773620, 0x31a79: 0x6cbcc820, 0x31a7a: 0x6d758820, 0x31a7b: 0x6d4d6220, + 0x31a7c: 0x6c01b620, 0x31a7d: 0x6c6fc020, 0x31a7e: 0x6cc3aa20, 0x31a7f: 0x6d4fb820, + // Block 0xc6a, offset 0x31a80 + 0x31a80: 0x6de28220, 0x31a81: 0x6c9ab020, 0x31a82: 0x6c50ac20, 0x31a83: 0x6cc7b820, + 0x31a84: 0x6c9c8820, 0x31a85: 0x6c76b620, 0x31a86: 0x6c9fb820, 0x31a87: 0x6d297a20, + 0x31a88: 0x6cce4620, 0x31a89: 0x6c04d820, 0x31a8a: 0x6cd0a820, 0x31a8b: 0x6d028220, + 0x31a8c: 0x6c3cee20, 0x31a8d: 0x6c5ad020, 0x31a8e: 0x6c5ace20, 0x31a8f: 0x6c7dc620, + 0x31a90: 0x6c7dd220, 0x31a91: 0x6c7de020, 0x31a92: 0x6d30ca20, 0x31a93: 0x6d30cc20, + 0x31a94: 0x6d5e0420, 0x31a95: 0x6c5ba420, 0x31a96: 0x6d051020, 0x31a97: 0x6d60c620, + 0x31a98: 0x6d8abc20, 0x31a99: 0x6daf6420, 0x31a9a: 0x6d071220, 0x31a9b: 0x6c3e3620, + 0x31a9c: 0x6c82de20, 0x31a9d: 0x6c020420, 0x31a9e: 0x6c020420, 0x31a9f: 0x6cdbee20, + 0x31aa0: 0x6d678620, 0x31aa1: 0x6ca6aa20, 0x31aa2: 0x6d928220, 0x31aa3: 0x6dd48e20, + 0x31aa4: 0x6d3d8420, 0x31aa5: 0x6dee3c20, 0x31aa6: 0x6c051e20, 0x31aa7: 0x6ce32420, + 0x31aa8: 0x6df1b220, 0x31aa9: 0x6e06f620, 0x31aaa: 0x6d9a4a20, 0x31aab: 0x6c6f8420, + 0x31aac: 0x6cfce020, 0x31aad: 0x6d8d8a20, + 0x31ab0: 0x6c28ae20, 0x31ab1: 0x6c179020, 0x31ab2: 0x6c0c5a20, 0x31ab3: 0x6c296c20, + 0x31ab4: 0x6c061420, 0x31ab5: 0x6d767a20, 0x31ab6: 0x6c455c20, 0x31ab7: 0x6c016420, + 0x31ab8: 0x6cbada20, 0x31ab9: 0x6c8e9a20, 0x31aba: 0x6cbad220, 0x31abb: 0x6cebb420, + 0x31abc: 0x6ced7e20, 0x31abd: 0x6d4b0420, 0x31abe: 0x6c2ea820, 0x31abf: 0x6c2ef220, + // Block 0xc6b, offset 0x31ac0 + 0x31ac0: 0x6c924620, 0x31ac1: 0x6d79de20, 0x31ac2: 0x6d212820, 0x31ac3: 0x6d216c20, + 0x31ac4: 0x6c96ac20, 0x31ac5: 0x6cf1fa20, 0x31ac6: 0x6c97b620, 0x31ac7: 0x6cf2b020, + 0x31ac8: 0x6cf25620, 0x31ac9: 0x6d4fb820, 0x31aca: 0x6d224e20, 0x31acb: 0x6de28220, + 0x31acc: 0x6da46c20, 0x31acd: 0x6cc4ee20, 0x31ace: 0x6cf40620, 0x31acf: 0x6cc56820, + 0x31ad0: 0x6c9abe20, 0x31ad1: 0x6cc79a20, 0x31ad2: 0x6c73be20, 0x31ad3: 0x6c9c2220, + 0x31ad4: 0x6c21de20, 0x31ad5: 0x6c04ae20, 0x31ad6: 0x6c9e2620, 0x31ad7: 0x6c546e20, + 0x31ad8: 0x6cfaa420, 0x31ad9: 0x6cccf220, 0x31ada: 0x6d297a20, 0x31adb: 0x6de4d620, + 0x31adc: 0x6cce4620, 0x31add: 0x6dab6420, 0x31ade: 0x6da93020, 0x31adf: 0x6c09de20, + 0x31ae0: 0x6ca29820, 0x31ae1: 0x6d2d0620, 0x31ae2: 0x6d2dac20, 0x31ae3: 0x6c3be220, + 0x31ae4: 0x6d5b5220, 0x31ae5: 0x6d5b3020, 0x31ae6: 0x6c7bf820, 0x31ae7: 0x6ca4d020, + 0x31ae8: 0x6c3c8820, 0x31ae9: 0x6cd36020, 0x31aea: 0x6ca59220, 0x31aeb: 0x6d5d2820, + 0x31aec: 0x6d5e7620, 0x31aed: 0x6d051020, 0x31aee: 0x6c5c3a20, 0x31aef: 0x6d061420, + 0x31af0: 0x6d60c620, 0x31af1: 0x6cd85420, 0x31af2: 0x6c3e3620, 0x31af3: 0x6c83e820, + 0x31af4: 0x6cdb7e20, 0x31af5: 0x6d900a20, 0x31af6: 0x6db50820, 0x31af7: 0x6dd40e20, + 0x31af8: 0x6ca6aa20, 0x31af9: 0x6d68be20, 0x31afa: 0x6d697820, 0x31afb: 0x6d68d620, + 0x31afc: 0x6d928220, 0x31afd: 0x6d927c20, 0x31afe: 0x6d925c20, 0x31aff: 0x6dd48e20, + // Block 0xc6c, offset 0x31b00 + 0x31b00: 0x6e2c4c20, 0x31b01: 0x6dee3c20, 0x31b02: 0x6d951e20, 0x31b03: 0x6d959e20, + 0x31b04: 0x6db93e20, 0x31b05: 0x6d40e620, 0x31b06: 0x6cb60820, 0x31b07: 0x6df1b220, + 0x31b08: 0x6d155620, 0x31b09: 0x6e06d420, 0x31b0a: 0x6e06f620, 0x31b0b: 0x6d15fc20, + 0x31b0c: 0x6d9a4a20, 0x31b0d: 0x6e08b620, 0x31b0e: 0x6d9f9e20, 0x31b0f: 0x6d502220, + 0x31b10: 0x6d501620, 0x31b11: 0x6c36f420, 0x31b12: 0x6cf6d620, 0x31b13: 0x6c597a20, + 0x31b14: 0x6cd34020, 0x31b15: 0x6d5c7220, 0x31b16: 0x6dcdba20, 0x31b17: 0x6d0fcc20, + 0x31b18: 0x6e313820, 0x31b19: 0x6de00020, + // Block 0xc6d, offset 0x31b40 + 0x31b40: 0xf0001c1c, 0x31b41: 0xf0001c1c, 0x31b42: 0x00658c9c, + 0x31b50: 0x2c047483, 0x31b51: 0x2c0faa83, 0x31b52: 0x2c03a483, 0x31b53: 0xf0001c1c, + 0x31b54: 0x2c007483, 0x31b55: 0x2c0f1e83, 0x31b56: 0x2d0dc083, 0x31b57: 0x2c03de83, + 0x31b58: 0x2c0b5483, 0x31b59: 0x2c50d083, 0x31b5a: 0x2cce0683, 0x31b5b: 0x2c729c83, + 0x31b5c: 0x2c44fc83, 0x31b5d: 0x2c4d5a83, 0x31b5e: 0x2c0c7883, 0x31b5f: 0x2cf5a283, + 0x31b60: 0x2c17e083, 0x31b61: 0x2ca93c83, 0x31b62: 0x2c0a0283, 0x31b63: 0x2cb1a083, + 0x31b64: 0x2c1b6883, 0x31b65: 0x2c198083, 0x31b66: 0x2d295e83, 0x31b67: 0x2c208683, + 0x31b68: 0x2c714283, 0x31b69: 0x2c000283, 0x31b6a: 0x2c00dc83, 0x31b6b: 0x2d118683, + 0x31b6c: 0x2c089283, 0x31b6d: 0x2c023683, 0x31b6e: 0x2c075483, 0x31b6f: 0x2c4f4883, + 0x31b70: 0x2c26fc83, 0x31b71: 0x2c093e83, 0x31b72: 0x2d032883, 0x31b73: 0x2c3d6e83, + 0x31b74: 0x2c0e3483, 0x31b75: 0x2cccd883, 0x31b76: 0x2c127483, 0x31b77: 0x2c049c83, + 0x31b78: 0x2c0a1083, 0x31b79: 0x2cb95283, 0x31b7a: 0x2c901a83, + // Block 0xc6e, offset 0x31b80 + 0x31b80: 0xe000b653, 0x31b81: 0xe000b64b, 0x31b82: 0xe000b647, 0x31b83: 0xe000b657, + 0x31b84: 0xe000b65b, 0x31b85: 0xe000b64f, 0x31b86: 0xe000b663, 0x31b87: 0xe000b667, + 0x31b88: 0xe000b65f, + 0x31b90: 0x2c96d483, 0x31b91: 0x2c074c83, + // Block 0xc6f, offset 0x31bc0 + 0x31bc0: 0x6c003e20, 0x31bc1: 0x6c004020, 0x31bc2: 0x6c004220, 0x31bc3: 0x6c00e820, + 0x31bc4: 0x6c00ea20, 0x31bc5: 0x6c00ec20, 0x31bc6: 0x6c00ee20, 0x31bc7: 0x6c022820, + 0x31bc8: 0x6c022a20, 0x31bc9: 0x6c022c20, 0x31bca: 0x6c022e20, 0x31bcb: 0x6c023020, + 0x31bcc: 0x6c023220, 0x31bcd: 0x6c055220, 0x31bce: 0x6c055420, 0x31bcf: 0x6c055620, + 0x31bd0: 0x6c055820, 0x31bd1: 0x6c055a20, 0x31bd2: 0x6c055c20, 0x31bd3: 0x6c055e20, + 0x31bd4: 0x6c056020, 0x31bd5: 0x6c056220, 0x31bd6: 0x6c056420, 0x31bd7: 0x6c056620, + 0x31bd8: 0x6c0ada20, 0x31bd9: 0x6c0adc20, 0x31bda: 0x6c0ade20, 0x31bdb: 0x6c0f4220, + 0x31bdc: 0x6c0ae020, 0x31bdd: 0x6c0dac20, 0x31bde: 0x6c0ae220, 0x31bdf: 0x6c0ae420, + 0x31be0: 0x6c0ae620, 0x31be1: 0x6c15ec20, 0x31be2: 0x6c15ee20, 0x31be3: 0x6c15f020, + 0x31be4: 0x6c15f220, 0x31be5: 0x6c162c20, 0x31be6: 0x6c15f420, 0x31be7: 0x6c15f620, + 0x31be8: 0x6c15f820, 0x31be9: 0x6c0b3a20, 0x31bea: 0x6c15fa20, 0x31beb: 0x6c15fc20, + 0x31bec: 0x6c28b220, 0x31bed: 0x6c28b420, 0x31bee: 0x6c28b620, 0x31bef: 0x6c2d9420, + 0x31bf0: 0x6c28b820, 0x31bf1: 0x6c28ba20, 0x31bf2: 0x6c28bc20, 0x31bf3: 0x6c28be20, + 0x31bf4: 0x6c28c020, 0x31bf5: 0x6c42ea20, 0x31bf6: 0x6c42ec20, 0x31bf7: 0x6c470a20, + 0x31bf8: 0x6c42ee20, 0x31bf9: 0x6c470c20, 0x31bfa: 0x6c42f020, 0x31bfb: 0x6c42f220, + 0x31bfc: 0x6c6a8820, 0x31bfd: 0x6c63cc20, 0x31bfe: 0x6c63ce20, 0x31bff: 0x6c63d020, + // Block 0xc70, offset 0x31c00 + 0x31c00: 0x6c63d220, 0x31c01: 0x6c8af020, 0x31c02: 0x6c8af220, 0x31c03: 0x6c8af420, + 0x31c04: 0x6c8af620, 0x31c05: 0x6c8af820, 0x31c06: 0x6cb79e20, 0x31c07: 0x6cb7a020, + 0x31c08: 0x6cb7a220, 0x31c09: 0x6cb93420, 0x31c0a: 0x6cb7a420, 0x31c0b: 0x6cb7a620, + 0x31c0c: 0x6ce8ca20, 0x31c0d: 0x6ce8cc20, 0x31c0e: 0x6d188c20, 0x31c0f: 0x6d188e20, + 0x31c10: 0x6d189020, 0x31c11: 0x6d189220, 0x31c12: 0x6d189420, 0x31c13: 0x6d479020, + 0x31c14: 0x6d479220, 0x31c15: 0x6d75c220, 0x31c16: 0x6d9fa420, 0x31c17: 0x6d75c420, + 0x31c18: 0x6d75c620, 0x31c19: 0x6d75c820, 0x31c1a: 0x6d75ca20, 0x31c1b: 0x6d75cc20, + 0x31c1c: 0x6da01620, 0x31c1d: 0x6d75ce20, 0x31c1e: 0x6da57820, 0x31c1f: 0x6dc24420, + 0x31c20: 0x6df86a20, 0x31c21: 0x6c004620, 0x31c22: 0x6c004820, 0x31c23: 0x6c023e20, + 0x31c24: 0x6c079620, 0x31c25: 0x6c056a20, 0x31c26: 0x6c0aea20, 0x31c27: 0x6c160220, + 0x31c28: 0x6c160420, 0x31c29: 0x6c28c620, 0x31c2a: 0x6c28c820, 0x31c2b: 0x6c28ca20, + 0x31c2c: 0x6c28cc20, 0x31c2d: 0x6c42f820, 0x31c2e: 0x6c42fa20, 0x31c2f: 0x6c42fc20, + 0x31c30: 0x6c63da20, 0x31c31: 0x6c63dc20, 0x31c32: 0x6c15ae20, 0x31c33: 0x6c8afc20, + 0x31c34: 0x6cb7a820, 0x31c35: 0x6cb7aa20, 0x31c36: 0x6d189820, 0x31c37: 0x6d1bb420, + 0x31c38: 0x6d479420, 0x31c39: 0x6dc24620, 0x31c3a: 0x6de00420, 0x31c3b: 0x6e1c0420, + 0x31c3c: 0x6c010220, 0x31c3d: 0x6c010420, 0x31c3e: 0x6c026420, 0x31c3f: 0x6c024620, + // Block 0xc71, offset 0x31c40 + 0x31c40: 0x6c057020, 0x31c41: 0x6c057220, 0x31c42: 0x6c0aec20, 0x31c43: 0x6c63de20, + 0x31c44: 0x6ce8ce20, 0x31c45: 0x6d75d420, 0x31c46: 0x6c005620, 0x31c47: 0x6c005820, + 0x31c48: 0x6c005a20, 0x31c49: 0x6c005c20, 0x31c4a: 0x6c005e20, 0x31c4b: 0x6c011020, + 0x31c4c: 0x6c011220, 0x31c4d: 0x6c011420, 0x31c4e: 0x6c011620, 0x31c4f: 0x6c024e20, + 0x31c50: 0x6c025020, 0x31c51: 0x6c025220, 0x31c52: 0x6c025420, 0x31c53: 0x6c025620, + 0x31c54: 0x6c057c20, 0x31c55: 0x6c057e20, 0x31c56: 0x6c058020, 0x31c57: 0x6c058220, + 0x31c58: 0x6c058420, 0x31c59: 0x6c058620, 0x31c5a: 0x6c058820, 0x31c5b: 0x6c058a20, + 0x31c5c: 0x6c058c20, 0x31c5d: 0x6c058e20, 0x31c5e: 0x6c059020, 0x31c5f: 0x6c059220, + 0x31c60: 0x6c059420, 0x31c61: 0x6c059620, 0x31c62: 0x6c0af820, 0x31c63: 0x6c0afa20, + 0x31c64: 0x6c0afc20, 0x31c65: 0x6c0afe20, 0x31c66: 0x6c0b0020, 0x31c67: 0x6c0b0220, + 0x31c68: 0x6c149620, 0x31c69: 0x6c0b0420, 0x31c6a: 0x6c0b0620, 0x31c6b: 0x6c0b0820, + 0x31c6c: 0x6c0dd620, 0x31c6d: 0x6c0b0a20, 0x31c6e: 0x6c0dd820, 0x31c6f: 0x6c160820, + 0x31c70: 0x6c18ea20, 0x31c71: 0x6c227c20, 0x31c72: 0x6c28d220, 0x31c73: 0x6c28d420, + 0x31c74: 0x6c430420, 0x31c75: 0x6c3bd820, 0x31c76: 0x6c28d620, 0x31c77: 0x6c430620, + 0x31c78: 0x6c431c20, 0x31c79: 0x6c63e220, 0x31c7a: 0x6c63e420, 0x31c7b: 0x6c63e620, + 0x31c7c: 0x6c63e820, 0x31c7d: 0x6c63ea20, 0x31c7e: 0x6c63ec20, 0x31c7f: 0x6c8afe20, + // Block 0xc72, offset 0x31c80 + 0x31c80: 0x6c8b0020, 0x31c81: 0x6c8b0220, 0x31c82: 0x6c8b0420, 0x31c83: 0x6cb7ac20, + 0x31c84: 0x6cb7ae20, 0x31c85: 0x6d189a20, 0x31c86: 0x6ce8d020, 0x31c87: 0x6d479620, + 0x31c88: 0x6e284820, 0x31c89: 0x6c001620, 0x31c8a: 0x6c001820, 0x31c8b: 0x6c001a20, + 0x31c8c: 0x6c001c20, 0x31c8d: 0x6c001e20, 0x31c8e: 0x6c002020, 0x31c8f: 0x6c006620, + 0x31c90: 0x6c006820, 0x31c91: 0x6c002220, 0x31c92: 0x6c012620, 0x31c93: 0x6c012820, + 0x31c94: 0x6c012a20, 0x31c95: 0x6c026620, 0x31c96: 0x6c026820, 0x31c97: 0x6c026a20, + 0x31c98: 0x6c026c20, 0x31c99: 0x6c026e20, 0x31c9a: 0x6c027020, 0x31c9b: 0x6c027220, + 0x31c9c: 0x6c027420, 0x31c9d: 0x6c027620, 0x31c9e: 0x6c05a220, 0x31c9f: 0x6c05a420, + 0x31ca0: 0x6c05a620, 0x31ca1: 0x6c05a820, 0x31ca2: 0x6c05aa20, 0x31ca3: 0x6c05ac20, + 0x31ca4: 0x6c0b2c20, 0x31ca5: 0x6c0b2e20, 0x31ca6: 0x6c0b3020, 0x31ca7: 0x6c0b3220, + 0x31ca8: 0x6c0b3420, 0x31ca9: 0x6c161420, 0x31caa: 0x6c161620, 0x31cab: 0x6c24c020, + 0x31cac: 0x6c161820, 0x31cad: 0x6c28ea20, 0x31cae: 0x6c28ec20, 0x31caf: 0x6c28ee20, + 0x31cb0: 0x6c3bda20, 0x31cb1: 0x6c2fdc20, 0x31cb2: 0x6c431e20, 0x31cb3: 0x6c432020, + 0x31cb4: 0x6c432220, 0x31cb5: 0x6c432420, 0x31cb6: 0x6c432620, 0x31cb7: 0x6c432820, + 0x31cb8: 0x6c63f420, 0x31cb9: 0x6c63f620, 0x31cba: 0x6c63f820, 0x31cbb: 0x6c63fa20, + 0x31cbc: 0x6c8b1220, 0x31cbd: 0x6c8b1420, 0x31cbe: 0x6c8b1620, 0x31cbf: 0x6c8b1820, + // Block 0xc73, offset 0x31cc0 + 0x31cc0: 0x6c8b1a20, 0x31cc1: 0x6c8b1c20, 0x31cc2: 0x6c8b1e20, 0x31cc3: 0x6ce8d820, + 0x31cc4: 0x6ce8da20, 0x31cc5: 0x6d189c20, 0x31cc6: 0x6d189e20, 0x31cc7: 0x6d18a020, + 0x31cc8: 0x6d18a220, 0x31cc9: 0x6d9fa620, 0x31cca: 0x6de00820, 0x31ccb: 0x6df86c20, + 0x31ccc: 0x6c002620, 0x31ccd: 0x6c006c20, 0x31cce: 0x6c006e20, 0x31ccf: 0x6c007020, + 0x31cd0: 0x6c007220, 0x31cd1: 0x6c012e20, 0x31cd2: 0x6c027c20, 0x31cd3: 0x6c027e20, + 0x31cd4: 0x6c028020, 0x31cd5: 0x6c0b3c20, 0x31cd6: 0x6c162220, 0x31cd7: 0x6c162420, + 0x31cd8: 0x6c162620, 0x31cd9: 0x6c28f620, 0x31cda: 0x6c8b2220, 0x31cdb: 0x6cb7ba20, + 0x31cdc: 0x6d479820, 0x31cdd: 0x6d75d820, 0x31cde: 0x6c007620, 0x31cdf: 0x6c007820, + 0x31ce0: 0x6c007a20, 0x31ce1: 0x6c028e20, 0x31ce2: 0x6c0b4420, 0x31ce3: 0x6c0b4620, + 0x31ce4: 0x6c0b4820, 0x31ce5: 0x6c0b4a20, 0x31ce6: 0x6c0b4c20, 0x31ce7: 0x6c0b4e20, + 0x31ce8: 0x6c162e20, 0x31ce9: 0x6c163020, 0x31cea: 0x6c163220, 0x31ceb: 0x6c290220, + 0x31cec: 0x6c290420, 0x31ced: 0x6c290620, 0x31cee: 0x6c290820, 0x31cef: 0x6c290a20, + 0x31cf0: 0x6c432c20, 0x31cf1: 0x6c432e20, 0x31cf2: 0x6c433020, 0x31cf3: 0x6c433220, + 0x31cf4: 0x6c4d0220, 0x31cf5: 0x6c640220, 0x31cf6: 0x6c640420, 0x31cf7: 0x6c640620, + 0x31cf8: 0x6c640820, 0x31cf9: 0x6c8b2420, 0x31cfa: 0x6c8b2620, 0x31cfb: 0x6cb7be20, + 0x31cfc: 0x6ce8de20, 0x31cfd: 0x6ce8e020, 0x31cfe: 0x6ce8e220, 0x31cff: 0x6d18a620, + // Block 0xc74, offset 0x31d00 + 0x31d00: 0x6d479a20, 0x31d01: 0x6c029420, 0x31d02: 0x6c05b220, 0x31d03: 0x6c0b5c20, + 0x31d04: 0x6c0b5e20, 0x31d05: 0x6c0b6020, 0x31d06: 0x6c0b6220, 0x31d07: 0x6c0b6420, + 0x31d08: 0x6c163c20, 0x31d09: 0x6c163e20, 0x31d0a: 0x6c164020, 0x31d0b: 0x6c164220, + 0x31d0c: 0x6c291220, 0x31d0d: 0x6c291420, 0x31d0e: 0x6c291620, 0x31d0f: 0x6c291820, + 0x31d10: 0x6c291a20, 0x31d11: 0x6c291c20, 0x31d12: 0x6c291e20, 0x31d13: 0x6c434020, + 0x31d14: 0x6c434220, 0x31d15: 0x6c434420, 0x31d16: 0x6c640c20, 0x31d17: 0x6c6a8e20, + 0x31d18: 0x6c640e20, 0x31d19: 0x6c641020, 0x31d1a: 0x6c641220, 0x31d1b: 0x6c641420, + 0x31d1c: 0x6c641620, 0x31d1d: 0x6c641820, 0x31d1e: 0x6c8b2820, 0x31d1f: 0x6c8b2a20, + 0x31d20: 0x6c8b2c20, 0x31d21: 0x6c8b2e20, 0x31d22: 0x6c8b3020, 0x31d23: 0x6c8b3220, + 0x31d24: 0x6c8b3420, 0x31d25: 0x6c8b3620, 0x31d26: 0x6c8b3820, 0x31d27: 0x6c8b3a20, + 0x31d28: 0x6cb7c420, 0x31d29: 0x6cb7c620, 0x31d2a: 0x6cb7c820, 0x31d2b: 0x6cb7ca20, + 0x31d2c: 0x6cb7cc20, 0x31d2d: 0x6cb7ce20, 0x31d2e: 0x6cb7d020, 0x31d2f: 0x6cb7d220, + 0x31d30: 0x6cd41020, 0x31d31: 0x6cbd9c20, 0x31d32: 0x6cb7d420, 0x31d33: 0x6ce8ea20, + 0x31d34: 0x6ce8ec20, 0x31d35: 0x6ce8ee20, 0x31d36: 0x6ce8f020, 0x31d37: 0x6ce8f220, + 0x31d38: 0x6ce8f420, 0x31d39: 0x6cf16620, 0x31d3a: 0x6ce8f620, 0x31d3b: 0x6ce8f820, + 0x31d3c: 0x6ce8fa20, 0x31d3d: 0x6cf00420, 0x31d3e: 0x6d18aa20, 0x31d3f: 0x6d18ac20, + // Block 0xc75, offset 0x31d40 + 0x31d40: 0x6ce8fc20, 0x31d41: 0x6d479e20, 0x31d42: 0x6d47a020, 0x31d43: 0x6d47a220, + 0x31d44: 0x6d47a420, 0x31d45: 0x6d47a620, 0x31d46: 0x6d47a820, 0x31d47: 0x6d47aa20, + 0x31d48: 0x6d47ac20, 0x31d49: 0x6d47ae20, 0x31d4a: 0x6d49c820, 0x31d4b: 0x6d75dc20, + 0x31d4c: 0x6d75de20, 0x31d4d: 0x6d75e020, 0x31d4e: 0x6d75e220, 0x31d4f: 0x6d75e420, + 0x31d50: 0x6d75e620, 0x31d51: 0x6d75e820, 0x31d52: 0x6d75ea20, 0x31d53: 0x6d790e20, + 0x31d54: 0x6d75ec20, 0x31d55: 0x6d791020, 0x31d56: 0x6d75ee20, 0x31d57: 0x6d75f020, + 0x31d58: 0x6d75f220, 0x31d59: 0x6da20a20, 0x31d5a: 0x6dc24820, 0x31d5b: 0x6dc70c20, + 0x31d5c: 0x6ddfee20, 0x31d5d: 0x6de00a20, 0x31d5e: 0x6e0c3c20, 0x31d5f: 0x6e318620, + 0x31d60: 0x6e428220, 0x31d61: 0x6e442020, 0x31d62: 0x6c008220, 0x31d63: 0x6c014020, + 0x31d64: 0x6c014220, 0x31d65: 0x6c014420, 0x31d66: 0x6c02be20, 0x31d67: 0x6c02c020, + 0x31d68: 0x6c02c220, 0x31d69: 0x6c05fc20, 0x31d6a: 0x6c05fe20, 0x31d6b: 0x6c060020, + 0x31d6c: 0x6c060220, 0x31d6d: 0x6c060420, 0x31d6e: 0x6c06ac20, 0x31d6f: 0x6c060620, + 0x31d70: 0x6c060820, 0x31d71: 0x6c06d820, 0x31d72: 0x6c08d020, 0x31d73: 0x6c060a20, + 0x31d74: 0x6c0bfa20, 0x31d75: 0x6c0bfc20, 0x31d76: 0x6c0bfe20, 0x31d77: 0x6c0c0020, + 0x31d78: 0x6c0c0220, 0x31d79: 0x6c0c0420, 0x31d7a: 0x6c0c0620, 0x31d7b: 0x6c0c0820, + 0x31d7c: 0x6c0c0a20, 0x31d7d: 0x6c0c0c20, 0x31d7e: 0x6c0c0e20, 0x31d7f: 0x6c0c1020, + // Block 0xc76, offset 0x31d80 + 0x31d80: 0x6c0c1220, 0x31d81: 0x6c0c1420, 0x31d82: 0x6c0c1620, 0x31d83: 0x6c0c1820, + 0x31d84: 0x6c0c1a20, 0x31d85: 0x6c0c1c20, 0x31d86: 0x6c0c1e20, 0x31d87: 0x6c0c2020, + 0x31d88: 0x6c0c2220, 0x31d89: 0x6c0c2420, 0x31d8a: 0x6c0c2620, 0x31d8b: 0x6c0c2820, + 0x31d8c: 0x6c0c2a20, 0x31d8d: 0x6c0c2c20, 0x31d8e: 0x6c0c2e20, 0x31d8f: 0x6c0c3020, + 0x31d90: 0x6c0c3220, 0x31d91: 0x6c0c3420, 0x31d92: 0x6c0c5e20, 0x31d93: 0x6c0c3620, + 0x31d94: 0x6c0c3820, 0x31d95: 0x6c0c3a20, 0x31d96: 0x6c16ca20, 0x31d97: 0x6c16cc20, + 0x31d98: 0x6c16ce20, 0x31d99: 0x6c16d020, 0x31d9a: 0x6c16d220, 0x31d9b: 0x6c16d420, + 0x31d9c: 0x6c16d620, 0x31d9d: 0x6c16d820, 0x31d9e: 0x6c16da20, 0x31d9f: 0x6c16dc20, + 0x31da0: 0x6c16de20, 0x31da1: 0x6c16e020, 0x31da2: 0x6c16e220, 0x31da3: 0x6c16e420, + 0x31da4: 0x6c16e620, 0x31da5: 0x6c16e820, 0x31da6: 0x6c16ea20, 0x31da7: 0x6c16ec20, + 0x31da8: 0x6c16ee20, 0x31da9: 0x6c16f020, 0x31daa: 0x6c16f220, 0x31dab: 0x6c16f420, + 0x31dac: 0x6c16f620, 0x31dad: 0x6c16f820, 0x31dae: 0x6c16fa20, 0x31daf: 0x6c16fc20, + 0x31db0: 0x6c16fe20, 0x31db1: 0x6c170020, 0x31db2: 0x6c170220, 0x31db3: 0x6c170420, + 0x31db4: 0x6c170620, 0x31db5: 0x6c170820, 0x31db6: 0x6c170a20, 0x31db7: 0x6c170c20, + 0x31db8: 0x6c170e20, 0x31db9: 0x6c171020, 0x31dba: 0x6c171220, 0x31dbb: 0x6c171420, + 0x31dbc: 0x6c171620, 0x31dbd: 0x6c171820, 0x31dbe: 0x6c171a20, 0x31dbf: 0x6c171c20, + // Block 0xc77, offset 0x31dc0 + 0x31dc0: 0x6c171e20, 0x31dc1: 0x6c172020, 0x31dc2: 0x6c19c820, 0x31dc3: 0x6c29ca20, + 0x31dc4: 0x6c29cc20, 0x31dc5: 0x6c29ce20, 0x31dc6: 0x6c29d020, 0x31dc7: 0x6c29d220, + 0x31dc8: 0x6c29d420, 0x31dc9: 0x6c29d620, 0x31dca: 0x6c29d820, 0x31dcb: 0x6c29da20, + 0x31dcc: 0x6c29dc20, 0x31dcd: 0x6c29de20, 0x31dce: 0x6c29e020, 0x31dcf: 0x6c29e220, + 0x31dd0: 0x6c29e420, 0x31dd1: 0x6c29e620, 0x31dd2: 0x6c29e820, 0x31dd3: 0x6c29ea20, + 0x31dd4: 0x6c29ec20, 0x31dd5: 0x6c29ee20, 0x31dd6: 0x6c29f020, 0x31dd7: 0x6c29f220, + 0x31dd8: 0x6c29f420, 0x31dd9: 0x6c29f620, 0x31dda: 0x6c29f820, 0x31ddb: 0x6c29fa20, + 0x31ddc: 0x6c29fc20, 0x31ddd: 0x6c29fe20, 0x31dde: 0x6c2a0020, 0x31ddf: 0x6c2a0220, + 0x31de0: 0x6c2a0420, 0x31de1: 0x6c2a0620, 0x31de2: 0x6c2a0820, 0x31de3: 0x6c2a0a20, + 0x31de4: 0x6c305c20, 0x31de5: 0x6c2a0c20, 0x31de6: 0x6c2a0e20, 0x31de7: 0x6c2a1020, + 0x31de8: 0x6c2a1220, 0x31de9: 0x6c2a1420, 0x31dea: 0x6c2a1620, 0x31deb: 0x6c2a1820, + 0x31dec: 0x6c2a1a20, 0x31ded: 0x6c43de20, 0x31dee: 0x6c43e020, 0x31def: 0x6c43e220, + 0x31df0: 0x6c43e420, 0x31df1: 0x6c43e620, 0x31df2: 0x6c43e820, 0x31df3: 0x6c43ea20, + 0x31df4: 0x6c43ec20, 0x31df5: 0x6c43ee20, 0x31df6: 0x6c43f020, 0x31df7: 0x6c43f220, + 0x31df8: 0x6c43f420, 0x31df9: 0x6c43f620, 0x31dfa: 0x6c43f820, 0x31dfb: 0x6c43fa20, + 0x31dfc: 0x6c43fc20, 0x31dfd: 0x6c43fe20, 0x31dfe: 0x6c440020, 0x31dff: 0x6c440220, + // Block 0xc78, offset 0x31e00 + 0x31e00: 0x6c440420, 0x31e01: 0x6c440620, 0x31e02: 0x6c440820, 0x31e03: 0x6c440a20, + 0x31e04: 0x6c440c20, 0x31e05: 0x6c440e20, 0x31e06: 0x6c441020, 0x31e07: 0x6c441220, + 0x31e08: 0x6c441420, 0x31e09: 0x6c441620, 0x31e0a: 0x6c441820, 0x31e0b: 0x6c441a20, + 0x31e0c: 0x6c441c20, 0x31e0d: 0x6c441e20, 0x31e0e: 0x6c442020, 0x31e0f: 0x6c442220, + 0x31e10: 0x6c442420, 0x31e11: 0x6c442620, 0x31e12: 0x6c442820, 0x31e13: 0x6c442a20, + 0x31e14: 0x6c442c20, 0x31e15: 0x6c442e20, 0x31e16: 0x6c443020, 0x31e17: 0x6c443220, + 0x31e18: 0x6c443420, 0x31e19: 0x6c443620, 0x31e1a: 0x6c443820, 0x31e1b: 0x6c443a20, + 0x31e1c: 0x6c443c20, 0x31e1d: 0x6c443e20, 0x31e1e: 0x6c444020, 0x31e1f: 0x6c444220, + 0x31e20: 0x6c444420, 0x31e21: 0x6c444620, 0x31e22: 0x6c444820, 0x31e23: 0x6c64d220, + 0x31e24: 0x6c64d420, 0x31e25: 0x6c64d620, 0x31e26: 0x6c64d820, 0x31e27: 0x6c64da20, + 0x31e28: 0x6c64dc20, 0x31e29: 0x6c64de20, 0x31e2a: 0x6c64e020, 0x31e2b: 0x6c64e220, + 0x31e2c: 0x6c64e420, 0x31e2d: 0x6c64e620, 0x31e2e: 0x6c64e820, 0x31e2f: 0x6c64ea20, + 0x31e30: 0x6c64ec20, 0x31e31: 0x6c64ee20, 0x31e32: 0x6c64f020, 0x31e33: 0x6c64f220, + 0x31e34: 0x6c64f420, 0x31e35: 0x6c64f620, 0x31e36: 0x6c64f820, 0x31e37: 0x6c64fa20, + 0x31e38: 0x6c64fc20, 0x31e39: 0x6c64fe20, 0x31e3a: 0x6c650020, 0x31e3b: 0x6c650220, + 0x31e3c: 0x6c650420, 0x31e3d: 0x6c650620, 0x31e3e: 0x6c650820, 0x31e3f: 0x6c650a20, + // Block 0xc79, offset 0x31e40 + 0x31e40: 0x6c650c20, 0x31e41: 0x6c650e20, 0x31e42: 0x6c651020, 0x31e43: 0x6c651220, + 0x31e44: 0x6c651420, 0x31e45: 0x6c651620, 0x31e46: 0x6c651820, 0x31e47: 0x6c651a20, + 0x31e48: 0x6c651c20, 0x31e49: 0x6c651e20, 0x31e4a: 0x6c652020, 0x31e4b: 0x6c652220, + 0x31e4c: 0x6c652420, 0x31e4d: 0x6c652620, 0x31e4e: 0x6c652820, 0x31e4f: 0x6c652a20, + 0x31e50: 0x6c652c20, 0x31e51: 0x6c652e20, 0x31e52: 0x6c653020, 0x31e53: 0x6c653220, + 0x31e54: 0x6c653420, 0x31e55: 0x6c653620, 0x31e56: 0x6c653820, 0x31e57: 0x6c653a20, + 0x31e58: 0x6c653c20, 0x31e59: 0x6c653e20, 0x31e5a: 0x6c654020, 0x31e5b: 0x6c654220, + 0x31e5c: 0x6c654420, 0x31e5d: 0x6c654620, 0x31e5e: 0x6c654820, 0x31e5f: 0x6c654a20, + 0x31e60: 0x6c654c20, 0x31e61: 0x6c654e20, 0x31e62: 0x6c655020, 0x31e63: 0x6c655220, + 0x31e64: 0x6c655420, 0x31e65: 0x6c655620, 0x31e66: 0x6c655820, 0x31e67: 0x6c8bc620, + 0x31e68: 0x6c8bc820, 0x31e69: 0x6c8bca20, 0x31e6a: 0x6c8bcc20, 0x31e6b: 0x6c8bce20, + 0x31e6c: 0x6c8bd020, 0x31e6d: 0x6c8bd220, 0x31e6e: 0x6c8bd420, 0x31e6f: 0x6c8bd620, + 0x31e70: 0x6c8bd820, 0x31e71: 0x6c8bda20, 0x31e72: 0x6c8bdc20, 0x31e73: 0x6c8bde20, + 0x31e74: 0x6c8be020, 0x31e75: 0x6c8be220, 0x31e76: 0x6c8be420, 0x31e77: 0x6c8be620, + 0x31e78: 0x6c8be820, 0x31e79: 0x6c8bea20, 0x31e7a: 0x6c8bec20, 0x31e7b: 0x6c8bee20, + 0x31e7c: 0x6c8bf020, 0x31e7d: 0x6c8bf220, 0x31e7e: 0x6c8bf420, 0x31e7f: 0x6c8bf620, + // Block 0xc7a, offset 0x31e80 + 0x31e80: 0x6c8bf820, 0x31e81: 0x6c8bfa20, 0x31e82: 0x6c8bfc20, 0x31e83: 0x6c8bfe20, + 0x31e84: 0x6c8c0020, 0x31e85: 0x6c8c0220, 0x31e86: 0x6c8c0420, 0x31e87: 0x6c8c0620, + 0x31e88: 0x6c8c0820, 0x31e89: 0x6c8c0a20, 0x31e8a: 0x6c8c0c20, 0x31e8b: 0x6c8c0e20, + 0x31e8c: 0x6c8c1020, 0x31e8d: 0x6c8c1220, 0x31e8e: 0x6c8c1420, 0x31e8f: 0x6c8c1620, + 0x31e90: 0x6c8c1820, 0x31e91: 0x6c428e20, 0x31e92: 0x6c8c1a20, 0x31e93: 0x6c8c1c20, + 0x31e94: 0x6c8c1e20, 0x31e95: 0x6c8c2020, 0x31e96: 0x6c8c2220, 0x31e97: 0x6c8c2420, + 0x31e98: 0x6c8c2620, 0x31e99: 0x6c8c2820, 0x31e9a: 0x6c8c2a20, 0x31e9b: 0x6c8c2c20, + 0x31e9c: 0x6c8c2e20, 0x31e9d: 0x6c8c3020, 0x31e9e: 0x6c8c3220, 0x31e9f: 0x6c655a20, + 0x31ea0: 0x6c8c3420, 0x31ea1: 0x6c8c3620, 0x31ea2: 0x6c8c3820, 0x31ea3: 0x6c8c3a20, + 0x31ea4: 0x6c8c3c20, 0x31ea5: 0x6c8c3e20, 0x31ea6: 0x6c8c4020, 0x31ea7: 0x6c8c4220, + 0x31ea8: 0x6c8c4420, 0x31ea9: 0x6c8c4620, 0x31eaa: 0x6c8c4820, 0x31eab: 0x6c8c4a20, + 0x31eac: 0x6c8c4c20, 0x31ead: 0x6cb83e20, 0x31eae: 0x6cb84020, 0x31eaf: 0x6cb84220, + 0x31eb0: 0x6cb84420, 0x31eb1: 0x6cb84620, 0x31eb2: 0x6cb84820, 0x31eb3: 0x6cb84a20, + 0x31eb4: 0x6cb84c20, 0x31eb5: 0x6cb84e20, 0x31eb6: 0x6cb85020, 0x31eb7: 0x6cb85220, + 0x31eb8: 0x6cb85420, 0x31eb9: 0x6cb85620, 0x31eba: 0x6cb85820, 0x31ebb: 0x6cb85a20, + 0x31ebc: 0x6cb85c20, 0x31ebd: 0x6cb85e20, 0x31ebe: 0x6cb86020, 0x31ebf: 0x6cb86220, + // Block 0xc7b, offset 0x31ec0 + 0x31ec0: 0x6cb86420, 0x31ec1: 0x6cb86620, 0x31ec2: 0x6cb86820, 0x31ec3: 0x6cb86a20, + 0x31ec4: 0x6cb86c20, 0x31ec5: 0x6cb86e20, 0x31ec6: 0x6cb8d620, 0x31ec7: 0x6cb87020, + 0x31ec8: 0x6cb87220, 0x31ec9: 0x6cb87420, 0x31eca: 0x6cb87620, 0x31ecb: 0x6cb87820, + 0x31ecc: 0x6cb87a20, 0x31ecd: 0x6cb87c20, 0x31ece: 0x6cb87e20, 0x31ecf: 0x6cb88020, + 0x31ed0: 0x6cb88220, 0x31ed1: 0x6cb88420, 0x31ed2: 0x6cb88620, 0x31ed3: 0x6cb88820, + 0x31ed4: 0x6cb88a20, 0x31ed5: 0x6cb88c20, 0x31ed6: 0x6cb88e20, 0x31ed7: 0x6cb89020, + 0x31ed8: 0x6cb89220, 0x31ed9: 0x6cb89420, 0x31eda: 0x6cb89620, 0x31edb: 0x6cb89820, + 0x31edc: 0x6cb89a20, 0x31edd: 0x6cb89c20, 0x31ede: 0x6cbd9420, 0x31edf: 0x6cd2ce20, + 0x31ee0: 0x6cb89e20, 0x31ee1: 0x6cb8a020, 0x31ee2: 0x6cb8a220, 0x31ee3: 0x6cb8a420, + 0x31ee4: 0x6cb8a620, 0x31ee5: 0x6cb8a820, 0x31ee6: 0x6cb8aa20, 0x31ee7: 0x6cb8ac20, + 0x31ee8: 0x6cb8ae20, 0x31ee9: 0x6cb8b020, 0x31eea: 0x6ca52820, 0x31eeb: 0x6ce95420, + 0x31eec: 0x6ce95620, 0x31eed: 0x6ce95820, 0x31eee: 0x6ce95a20, 0x31eef: 0x6ce95c20, + 0x31ef0: 0x6ce95e20, 0x31ef1: 0x6ce96020, 0x31ef2: 0x6ce96220, 0x31ef3: 0x6ce96420, + 0x31ef4: 0x6ce96620, 0x31ef5: 0x6ce96820, 0x31ef6: 0x6ce96a20, 0x31ef7: 0x6ce96c20, + 0x31ef8: 0x6ce96e20, 0x31ef9: 0x6ce97020, 0x31efa: 0x6ce97220, 0x31efb: 0x6ce97420, + 0x31efc: 0x6ce97620, 0x31efd: 0x6ce97820, 0x31efe: 0x6ce97a20, 0x31eff: 0x6ce97c20, + // Block 0xc7c, offset 0x31f00 + 0x31f00: 0x6ce97e20, 0x31f01: 0x6ce98020, 0x31f02: 0x6ce98220, 0x31f03: 0x6ce98420, + 0x31f04: 0x6ce98620, 0x31f05: 0x6ce98820, 0x31f06: 0x6ce98a20, 0x31f07: 0x6ce98c20, + 0x31f08: 0x6ce98e20, 0x31f09: 0x6ce99020, 0x31f0a: 0x6ce99220, 0x31f0b: 0x6ce99420, + 0x31f0c: 0x6ce99620, 0x31f0d: 0x6ce99820, 0x31f0e: 0x6ce99a20, 0x31f0f: 0x6ce99c20, + 0x31f10: 0x6ce99e20, 0x31f11: 0x6ce9a020, 0x31f12: 0x6ce9a220, 0x31f13: 0x6ce9a420, + 0x31f14: 0x6ce9a620, 0x31f15: 0x6ce9a820, 0x31f16: 0x6ce9aa20, 0x31f17: 0x6ce9ac20, + 0x31f18: 0x6ce9ae20, 0x31f19: 0x6ce9b020, 0x31f1a: 0x6ce9b220, 0x31f1b: 0x6ce9b420, + 0x31f1c: 0x6ce9b620, 0x31f1d: 0x6ce9b820, 0x31f1e: 0x6ce9ba20, 0x31f1f: 0x6ce9bc20, + 0x31f20: 0x6ce9be20, 0x31f21: 0x6ce9c020, 0x31f22: 0x6d01fc20, 0x31f23: 0x6ce9c220, + 0x31f24: 0x6ce9c420, 0x31f25: 0x6d191a20, 0x31f26: 0x6ce9c620, 0x31f27: 0x6ce9c820, + 0x31f28: 0x6ce9ca20, 0x31f29: 0x6ce9cc20, 0x31f2a: 0x6ce9ce20, 0x31f2b: 0x6ce9d020, + 0x31f2c: 0x6ce9d220, 0x31f2d: 0x6d191c20, 0x31f2e: 0x6d191e20, 0x31f2f: 0x6d192020, + 0x31f30: 0x6d192220, 0x31f31: 0x6d192420, 0x31f32: 0x6d192620, 0x31f33: 0x6d192820, + 0x31f34: 0x6d192a20, 0x31f35: 0x6d192c20, 0x31f36: 0x6d192e20, 0x31f37: 0x6d193020, + 0x31f38: 0x6d193220, 0x31f39: 0x6d193420, 0x31f3a: 0x6d193620, 0x31f3b: 0x6d193820, + 0x31f3c: 0x6d193a20, 0x31f3d: 0x6d193c20, 0x31f3e: 0x6d193e20, 0x31f3f: 0x6d194020, + // Block 0xc7d, offset 0x31f40 + 0x31f40: 0x6d194220, 0x31f41: 0x6d194420, 0x31f42: 0x6d194620, 0x31f43: 0x6d194820, + 0x31f44: 0x6d194a20, 0x31f45: 0x6d194c20, 0x31f46: 0x6d194e20, 0x31f47: 0x6d195020, + 0x31f48: 0x6d195220, 0x31f49: 0x6d195420, 0x31f4a: 0x6d195620, 0x31f4b: 0x6d195820, + 0x31f4c: 0x6d195a20, 0x31f4d: 0x6d195c20, 0x31f4e: 0x6d195e20, 0x31f4f: 0x6d196020, + 0x31f50: 0x6d196220, 0x31f51: 0x6d196420, 0x31f52: 0x6d196620, 0x31f53: 0x6d196820, + 0x31f54: 0x6d196a20, 0x31f55: 0x6d196c20, 0x31f56: 0x6d196e20, 0x31f57: 0x6d197020, + 0x31f58: 0x6d311420, 0x31f59: 0x6d197220, 0x31f5a: 0x6d197420, 0x31f5b: 0x6d2bee20, + 0x31f5c: 0x6e0bec20, 0x31f5d: 0x6d197620, 0x31f5e: 0x6d197820, 0x31f5f: 0x6d197a20, + 0x31f60: 0x6d197c20, 0x31f61: 0x6d197e20, 0x31f62: 0x6d198020, 0x31f63: 0x6d198220, + 0x31f64: 0x6d198420, 0x31f65: 0x6d198620, 0x31f66: 0x6d198820, 0x31f67: 0x6d198a20, + 0x31f68: 0x6d198c20, 0x31f69: 0x6d198e20, 0x31f6a: 0x6d199020, 0x31f6b: 0x6d199220, + 0x31f6c: 0x6d199420, 0x31f6d: 0x6d199620, 0x31f6e: 0x6d199820, 0x31f6f: 0x6d199a20, + 0x31f70: 0x6d199c20, 0x31f71: 0x6d199e20, 0x31f72: 0x6d19a020, 0x31f73: 0x6d19a220, + 0x31f74: 0x6d19a420, 0x31f75: 0x6ce9d420, 0x31f76: 0x6d234020, 0x31f77: 0x6d47f620, + 0x31f78: 0x6d47f820, 0x31f79: 0x6d47fa20, 0x31f7a: 0x6d47fc20, 0x31f7b: 0x6d47fe20, + 0x31f7c: 0x6d480020, 0x31f7d: 0x6d480220, 0x31f7e: 0x6d480420, 0x31f7f: 0x6d480620, + // Block 0xc7e, offset 0x31f80 + 0x31f80: 0x6d480820, 0x31f81: 0x6d480a20, 0x31f82: 0x6d480c20, 0x31f83: 0x6d480e20, + 0x31f84: 0x6d481020, 0x31f85: 0x6d481220, 0x31f86: 0x6d481420, 0x31f87: 0x6d481620, + 0x31f88: 0x6d481820, 0x31f89: 0x6d481a20, 0x31f8a: 0x6d481c20, 0x31f8b: 0x6d481e20, + 0x31f8c: 0x6d482020, 0x31f8d: 0x6d482220, 0x31f8e: 0x6d482420, 0x31f8f: 0x6d482620, + 0x31f90: 0x6d19a620, 0x31f91: 0x6d482820, 0x31f92: 0x6d761c20, 0x31f93: 0x6d49ca20, + 0x31f94: 0x6d482a20, 0x31f95: 0x6d482c20, 0x31f96: 0x6d482e20, 0x31f97: 0x6d483020, + 0x31f98: 0x6d483220, 0x31f99: 0x6d483420, 0x31f9a: 0x6d483620, 0x31f9b: 0x6d483820, + 0x31f9c: 0x6d483a20, 0x31f9d: 0x6d483c20, 0x31f9e: 0x6d483e20, 0x31f9f: 0x6d484020, + 0x31fa0: 0x6d484220, 0x31fa1: 0x6d484420, 0x31fa2: 0x6d484620, 0x31fa3: 0x6d484820, + 0x31fa4: 0x6d484a20, 0x31fa5: 0x6d484c20, 0x31fa6: 0x6d484e20, 0x31fa7: 0x6d49cc20, + 0x31fa8: 0x6d761e20, 0x31fa9: 0x6d762020, 0x31faa: 0x6d762220, 0x31fab: 0x6d762420, + 0x31fac: 0x6d762620, 0x31fad: 0x6d762820, 0x31fae: 0x6d762a20, 0x31faf: 0x6d762c20, + 0x31fb0: 0x6d762e20, 0x31fb1: 0x6d763020, 0x31fb2: 0x6d763220, 0x31fb3: 0x6d763420, + 0x31fb4: 0x6d763620, 0x31fb5: 0x6d763820, 0x31fb6: 0x6d763a20, 0x31fb7: 0x6d763c20, + 0x31fb8: 0x6d763e20, 0x31fb9: 0x6d764020, 0x31fba: 0x6d764220, 0x31fbb: 0x6d764420, + 0x31fbc: 0x6d764620, 0x31fbd: 0x6d764820, 0x31fbe: 0x6d764a20, 0x31fbf: 0x6d764c20, + // Block 0xc7f, offset 0x31fc0 + 0x31fc0: 0x6d764e20, 0x31fc1: 0x6d765020, 0x31fc2: 0x6d765220, 0x31fc3: 0x6d765420, + 0x31fc4: 0x6d765620, 0x31fc5: 0x6d765820, 0x31fc6: 0x6d765a20, 0x31fc7: 0x6d765c20, + 0x31fc8: 0x6d9fc820, 0x31fc9: 0x6d9fca20, 0x31fca: 0x6d9fcc20, 0x31fcb: 0x6d9fce20, + 0x31fcc: 0x6d9fd020, 0x31fcd: 0x6d9fd220, 0x31fce: 0x6d9fd420, 0x31fcf: 0x6d9fd620, + 0x31fd0: 0x6d9fd820, 0x31fd1: 0x6d9fda20, 0x31fd2: 0x6d9fdc20, 0x31fd3: 0x6d9fde20, + 0x31fd4: 0x6d9fe020, 0x31fd5: 0x6d9fe220, 0x31fd6: 0x6d9fe420, 0x31fd7: 0x6d9fe620, + 0x31fd8: 0x6d9fe820, 0x31fd9: 0x6d9fea20, 0x31fda: 0x6d9fec20, 0x31fdb: 0x6d9fee20, + 0x31fdc: 0x6db61c20, 0x31fdd: 0x6d9ff020, 0x31fde: 0x6d9ff220, 0x31fdf: 0x6d9ff420, + 0x31fe0: 0x6d9ff620, 0x31fe1: 0x6d9ff820, 0x31fe2: 0x6d9ffa20, 0x31fe3: 0x6dc25620, + 0x31fe4: 0x6dc25820, 0x31fe5: 0x6dc25a20, 0x31fe6: 0x6dc25c20, 0x31fe7: 0x6dc25e20, + 0x31fe8: 0x6dc26020, 0x31fe9: 0x6dc26220, 0x31fea: 0x6dc26420, 0x31feb: 0x6dc26620, + 0x31fec: 0x6dc26820, 0x31fed: 0x6dc26a20, 0x31fee: 0x6dc26c20, 0x31fef: 0x6dc26e20, + 0x31ff0: 0x6dc27020, 0x31ff1: 0x6dc27220, 0x31ff2: 0x6dc27420, 0x31ff3: 0x6dc27620, + 0x31ff4: 0x6dc27820, 0x31ff5: 0x6dc27a20, 0x31ff6: 0x6dc27c20, 0x31ff7: 0x6dc27e20, + 0x31ff8: 0x6dc28020, 0x31ff9: 0x6dc28220, 0x31ffa: 0x6dc28420, 0x31ffb: 0x6de01a20, + 0x31ffc: 0x6de01c20, 0x31ffd: 0x6de01e20, 0x31ffe: 0x6de02020, 0x31fff: 0x6de02220, + // Block 0xc80, offset 0x32000 + 0x32000: 0x6de02420, 0x32001: 0x6de02620, 0x32002: 0x6de5da20, 0x32003: 0x6de02820, + 0x32004: 0x6de02a20, 0x32005: 0x6de02c20, 0x32006: 0x6de02e20, 0x32007: 0x6de03020, + 0x32008: 0x6de03220, 0x32009: 0x6de03420, 0x3200a: 0x6de03620, 0x3200b: 0x6de03820, + 0x3200c: 0x6de03a20, 0x3200d: 0x6df87620, 0x3200e: 0x6df87820, 0x3200f: 0x6df87a20, + 0x32010: 0x6df87c20, 0x32011: 0x6df87e20, 0x32012: 0x6df88020, 0x32013: 0x6df88220, + 0x32014: 0x6df88420, 0x32015: 0x6df88620, 0x32016: 0x6df88820, 0x32017: 0x6e0c4a20, + 0x32018: 0x6e0c4c20, 0x32019: 0x6e0c4e20, 0x3201a: 0x6e0c5020, 0x3201b: 0x6e0c5220, + 0x3201c: 0x6e0c5420, 0x3201d: 0x6e0c5620, 0x3201e: 0x6df88a20, 0x3201f: 0x6e0c5820, + 0x32020: 0x6e0c5a20, 0x32021: 0x6e0c5c20, 0x32022: 0x6e0c5e20, 0x32023: 0x6e0c6020, + 0x32024: 0x6e1c0c20, 0x32025: 0x6e1c0e20, 0x32026: 0x6e1c1020, 0x32027: 0x6e1c1220, + 0x32028: 0x6e1c1420, 0x32029: 0x6e1c1620, 0x3202a: 0x6e284e20, 0x3202b: 0x6e285020, + 0x3202c: 0x6e285220, 0x3202d: 0x6e285420, 0x3202e: 0x6e285620, 0x3202f: 0x6e285820, + 0x32030: 0x6e318a20, 0x32031: 0x6e38ae20, 0x32032: 0x6e3ce420, 0x32033: 0x6e3ce620, + 0x32034: 0x6e446c20, 0x32035: 0x6e442220, 0x32036: 0x6c02cc20, 0x32037: 0x6c061020, + 0x32038: 0x6c061220, 0x32039: 0x6c0c5020, 0x3203a: 0x6c0c5220, 0x3203b: 0x6c0c5420, + 0x3203c: 0x6c0c5620, 0x3203d: 0x6c174220, 0x3203e: 0x6c174420, 0x3203f: 0x6c174620, + // Block 0xc81, offset 0x32040 + 0x32040: 0x6c174820, 0x32041: 0x6c174a20, 0x32042: 0x6c174c20, 0x32043: 0x6c2a3820, + 0x32044: 0x6c2a3a20, 0x32045: 0x6c2a3c20, 0x32046: 0x6c2a3e20, 0x32047: 0x6c2a4020, + 0x32048: 0x6c2a4220, 0x32049: 0x6c2a4420, 0x3204a: 0x6c2a4620, 0x3204b: 0x6c2a4820, + 0x3204c: 0x6c446020, 0x3204d: 0x6c446220, 0x3204e: 0x6c446420, 0x3204f: 0x6c446620, + 0x32050: 0x6c657620, 0x32051: 0x6c657820, 0x32052: 0x6c657a20, 0x32053: 0x6c657c20, + 0x32054: 0x6c657e20, 0x32055: 0x6c658020, 0x32056: 0x6c658220, 0x32057: 0x6c8c6e20, + 0x32058: 0x6c8c7020, 0x32059: 0x6c8c7220, 0x3205a: 0x6c8c7420, 0x3205b: 0x6c8c7620, + 0x3205c: 0x6c8c7820, 0x3205d: 0x6c8c7a20, 0x3205e: 0x6cb8ca20, 0x3205f: 0x6cb8cc20, + 0x32060: 0x6cb8ce20, 0x32061: 0x6cb8d020, 0x32062: 0x6cb8d220, 0x32063: 0x6cb8d420, + 0x32064: 0x6ce9e420, 0x32065: 0x6ce9e620, 0x32066: 0x6ce9e820, 0x32067: 0x6d19b820, + 0x32068: 0x6d19ba20, 0x32069: 0x6d19bc20, 0x3206a: 0x6d19be20, 0x3206b: 0x6d19c020, + 0x3206c: 0x6d19c220, 0x3206d: 0x6d19c420, 0x3206e: 0x6d19c620, 0x3206f: 0x6d19c820, + 0x32070: 0x6d485c20, 0x32071: 0x6d485e20, 0x32072: 0x6d486020, 0x32073: 0x6d766820, + 0x32074: 0x6d486220, 0x32075: 0x6d486420, 0x32076: 0x6d486620, 0x32077: 0x6d486820, + 0x32078: 0x6d766a20, 0x32079: 0x6d766c20, 0x3207a: 0x6d766e20, 0x3207b: 0x6d767020, + 0x3207c: 0x6d767220, 0x3207d: 0x6d767420, 0x3207e: 0x6d767620, 0x3207f: 0x6da00420, + // Block 0xc82, offset 0x32080 + 0x32080: 0x6da00620, 0x32081: 0x6da00820, 0x32082: 0x6da00a20, 0x32083: 0x6da00c20, + 0x32084: 0x6da00e20, 0x32085: 0x6da01020, 0x32086: 0x6dc28e20, 0x32087: 0x6da01220, + 0x32088: 0x6dc29020, 0x32089: 0x6dc29220, 0x3208a: 0x6dc29420, 0x3208b: 0x6de04220, + 0x3208c: 0x6de23820, 0x3208d: 0x6df88e20, 0x3208e: 0x6de04420, 0x3208f: 0x6df89020, + 0x32090: 0x6df89220, 0x32091: 0x6e0c6620, 0x32092: 0x6e0c6820, 0x32093: 0x6e1c1820, + 0x32094: 0x6e1c1a20, 0x32095: 0x6e285a20, 0x32096: 0x6e285c20, 0x32097: 0x6e318c20, + 0x32098: 0x6e318e20, 0x32099: 0x6e319020, 0x3209a: 0x6e3ce820, 0x3209b: 0x6c014a20, + 0x3209c: 0x6c02d020, 0x3209d: 0x6c02d220, 0x3209e: 0x6c02d420, 0x3209f: 0x6c061a20, + 0x320a0: 0x6c0c6020, 0x320a1: 0x6c0c6220, 0x320a2: 0x6c0c6420, 0x320a3: 0x6c0c6620, + 0x320a4: 0x6c175220, 0x320a5: 0x6c175420, 0x320a6: 0x6c175620, 0x320a7: 0x6c175820, + 0x320a8: 0x6c175a20, 0x320a9: 0x6c2a4e20, 0x320aa: 0x6c446e20, 0x320ab: 0x6c447020, + 0x320ac: 0x6c447220, 0x320ad: 0x6c658620, 0x320ae: 0x6c658820, 0x320af: 0x6c658a20, + 0x320b0: 0x6c658c20, 0x320b1: 0x6c8c7c20, 0x320b2: 0x6cb8d820, 0x320b3: 0x6cb8da20, + 0x320b4: 0x6ce9ec20, 0x320b5: 0x6ce9ee20, 0x320b6: 0x6ce9f020, 0x320b7: 0x6ce9f220, + 0x320b8: 0x6d19ca20, 0x320b9: 0x6d19cc20, 0x320ba: 0x6d19ce20, 0x320bb: 0x6d19d020, + 0x320bc: 0x6d767820, 0x320bd: 0x6da01420, 0x320be: 0x6dc29620, 0x320bf: 0x6df89420, + // Block 0xc83, offset 0x320c0 + 0x320c0: 0x6c014c20, 0x320c1: 0x6c02de20, 0x320c2: 0x6c02e020, 0x320c3: 0x6c02e220, + 0x320c4: 0x6c02e420, 0x320c5: 0x6c061e20, 0x320c6: 0x6c062020, 0x320c7: 0x6c020820, + 0x320c8: 0x6c0c7220, 0x320c9: 0x6c0c7420, 0x320ca: 0x6c176420, 0x320cb: 0x6c176620, + 0x320cc: 0x6c176820, 0x320cd: 0x6c176a20, 0x320ce: 0x6c176c20, 0x320cf: 0x6c176e20, + 0x320d0: 0x6c2a5620, 0x320d1: 0x6c2a5820, 0x320d2: 0x6c447a20, 0x320d3: 0x6c447c20, + 0x320d4: 0x6c447e20, 0x320d5: 0x6c448020, 0x320d6: 0x6c448220, 0x320d7: 0x6c448420, + 0x320d8: 0x6c4d0420, 0x320d9: 0x6c659420, 0x320da: 0x6c659620, 0x320db: 0x6c659820, + 0x320dc: 0x6c8c8020, 0x320dd: 0x6c8c8220, 0x320de: 0x6cb8dc20, 0x320df: 0x6cb8de20, + 0x320e0: 0x6cb8e020, 0x320e1: 0x6cb8e220, 0x320e2: 0x6cb8e420, 0x320e3: 0x6cb8e620, + 0x320e4: 0x6cb8e820, 0x320e5: 0x6cb8ea20, 0x320e6: 0x6cb8ec20, 0x320e7: 0x6cb8ee20, + 0x320e8: 0x6ce9f820, 0x320e9: 0x6ce9fa20, 0x320ea: 0x6ce9fc20, 0x320eb: 0x6ce9fe20, + 0x320ec: 0x6cea0020, 0x320ed: 0x6cea0220, 0x320ee: 0x6cea0420, 0x320ef: 0x6d19d220, + 0x320f0: 0x6d19d420, 0x320f1: 0x6d19d620, 0x320f2: 0x6d1b1620, 0x320f3: 0x6d767c20, + 0x320f4: 0x6d767e20, 0x320f5: 0x6d768020, 0x320f6: 0x6dc29a20, 0x320f7: 0x6dc29c20, + 0x320f8: 0x6de04820, 0x320f9: 0x6de04a20, 0x320fa: 0x6de04c20, 0x320fb: 0x6e474020, + 0x320fc: 0x6c014e20, 0x320fd: 0x6c02f220, 0x320fe: 0x6c02f420, 0x320ff: 0x6c02f620, + // Block 0xc84, offset 0x32100 + 0x32100: 0x6c02f820, 0x32101: 0x6c062a20, 0x32102: 0x6c062c20, 0x32103: 0x6c062e20, + 0x32104: 0x6c063020, 0x32105: 0x6c063220, 0x32106: 0x6c063420, 0x32107: 0x6c063620, + 0x32108: 0x6c063820, 0x32109: 0x6c063a20, 0x3210a: 0x6c063c20, 0x3210b: 0x6c0c7c20, + 0x3210c: 0x6c0c7e20, 0x3210d: 0x6c0c8020, 0x3210e: 0x6c0c8220, 0x3210f: 0x6c0c8420, + 0x32110: 0x6c177220, 0x32111: 0x6c177420, 0x32112: 0x6c177620, 0x32113: 0x6c177820, + 0x32114: 0x6c177a20, 0x32115: 0x6c177c20, 0x32116: 0x6c2a6020, 0x32117: 0x6c2a6220, + 0x32118: 0x6c2a6420, 0x32119: 0x6c2a6620, 0x3211a: 0x6c2a6820, 0x3211b: 0x6c448a20, + 0x3211c: 0x6c448c20, 0x3211d: 0x6c659e20, 0x3211e: 0x6c65a020, 0x3211f: 0x6c65a220, + 0x32120: 0x6c8c8a20, 0x32121: 0x6c8c8c20, 0x32122: 0x6c8c8e20, 0x32123: 0x6cb8f620, + 0x32124: 0x6cb8f820, 0x32125: 0x6cb8fa20, 0x32126: 0x6cea0a20, 0x32127: 0x6cea0c20, + 0x32128: 0x6d19dc20, 0x32129: 0x6d19de20, 0x3212a: 0x6d487220, 0x3212b: 0x6d227a20, + 0x3212c: 0x6d487420, 0x3212d: 0x6d768420, 0x3212e: 0x6d768620, 0x3212f: 0x6dc29e20, + 0x32130: 0x6dc2a020, 0x32131: 0x6df89820, 0x32132: 0x6e1c1e20, 0x32133: 0x6c030220, + 0x32134: 0x6c030420, 0x32135: 0x6c064220, 0x32136: 0x6c064420, 0x32137: 0x6c064620, + 0x32138: 0x6c064820, 0x32139: 0x6c0c8a20, 0x3213a: 0x6c0c8c20, 0x3213b: 0x6c0c8e20, + 0x3213c: 0x6c0c9020, 0x3213d: 0x6c0c9220, 0x3213e: 0x6c0c9420, 0x3213f: 0x6c0c9620, + // Block 0xc85, offset 0x32140 + 0x32140: 0x6c178220, 0x32141: 0x6c178420, 0x32142: 0x6c178620, 0x32143: 0x6c178820, + 0x32144: 0x6c2a6c20, 0x32145: 0x6c2a6e20, 0x32146: 0x6c2a7020, 0x32147: 0x6c449620, + 0x32148: 0x6c449820, 0x32149: 0x6c449a20, 0x3214a: 0x6c449c20, 0x3214b: 0x6c449e20, + 0x3214c: 0x6c65b220, 0x3214d: 0x6c65b420, 0x3214e: 0x6c65b620, 0x3214f: 0x6c65b820, + 0x32150: 0x6c65ba20, 0x32151: 0x6c65bc20, 0x32152: 0x6c65be20, 0x32153: 0x6c8c9220, + 0x32154: 0x6cb8fe20, 0x32155: 0x6cb90020, 0x32156: 0x6cb90220, 0x32157: 0x6cb90420, + 0x32158: 0x6cb90620, 0x32159: 0x6cb90820, 0x3215a: 0x6cea0e20, 0x3215b: 0x6cea1020, + 0x3215c: 0x6d19e220, 0x3215d: 0x6d19e420, 0x3215e: 0x6d19e620, 0x3215f: 0x6d30e420, + 0x32160: 0x6d768a20, 0x32161: 0x6d768c20, 0x32162: 0x6da01820, 0x32163: 0x6dc2a220, + 0x32164: 0x6dc2a420, 0x32165: 0x6dc2a620, 0x32166: 0x6df89a20, 0x32167: 0x6df89c20, + 0x32168: 0x6df89e20, 0x32169: 0x6e0c6a20, 0x3216a: 0x6e1c2020, 0x3216b: 0x6e285e20, + 0x3216c: 0x6c015020, 0x3216d: 0x6c030820, 0x3216e: 0x6c065220, 0x3216f: 0x6c065420, + 0x32170: 0x6c065620, 0x32171: 0x6c0ca620, 0x32172: 0x6c0ca820, 0x32173: 0x6c0caa20, + 0x32174: 0x6c0cac20, 0x32175: 0x6c0cae20, 0x32176: 0x6c0cb020, 0x32177: 0x6c179e20, + 0x32178: 0x6c17a020, 0x32179: 0x6c17a220, 0x3217a: 0x6c17a420, 0x3217b: 0x6c17a620, + 0x3217c: 0x6c17a820, 0x3217d: 0x6c17aa20, 0x3217e: 0x6c17ac20, 0x3217f: 0x6c17ae20, + // Block 0xc86, offset 0x32180 + 0x32180: 0x6c2a8820, 0x32181: 0x6c17b020, 0x32182: 0x6c2a8a20, 0x32183: 0x6c2a8c20, + 0x32184: 0x6c2a8e20, 0x32185: 0x6c2a9020, 0x32186: 0x6c2a9220, 0x32187: 0x6c2a9420, + 0x32188: 0x6c44aa20, 0x32189: 0x6c44ac20, 0x3218a: 0x6c44ae20, 0x3218b: 0x6c44b020, + 0x3218c: 0x6c44b220, 0x3218d: 0x6c44b420, 0x3218e: 0x6c44b620, 0x3218f: 0x6c44b820, + 0x32190: 0x6c44ba20, 0x32191: 0x6c44bc20, 0x32192: 0x6c44be20, 0x32193: 0x6c44c020, + 0x32194: 0x6c44c220, 0x32195: 0x6c44c420, 0x32196: 0x6c44c620, 0x32197: 0x6c44c820, + 0x32198: 0x6c65de20, 0x32199: 0x6c65e020, 0x3219a: 0x6c65e220, 0x3219b: 0x6c65e420, + 0x3219c: 0x6c65e620, 0x3219d: 0x6c65e820, 0x3219e: 0x6c65ea20, 0x3219f: 0x6c65ec20, + 0x321a0: 0x6c65ee20, 0x321a1: 0x6c65f020, 0x321a2: 0x6c65f220, 0x321a3: 0x6c65f420, + 0x321a4: 0x6c65f620, 0x321a5: 0x6c8c9e20, 0x321a6: 0x6c8ca020, 0x321a7: 0x6c8ca220, + 0x321a8: 0x6c8ca420, 0x321a9: 0x6c8ca620, 0x321aa: 0x6c8ca820, 0x321ab: 0x6c8caa20, + 0x321ac: 0x6c8cac20, 0x321ad: 0x6c8cae20, 0x321ae: 0x6c8cb020, 0x321af: 0x6c8cb220, + 0x321b0: 0x6c8cb420, 0x321b1: 0x6cb91a20, 0x321b2: 0x6cb91c20, 0x321b3: 0x6cb91e20, + 0x321b4: 0x6cb92020, 0x321b5: 0x6cb92220, 0x321b6: 0x6cb92420, 0x321b7: 0x6cb92620, + 0x321b8: 0x6cb92820, 0x321b9: 0x6cb92a20, 0x321ba: 0x6cea1620, 0x321bb: 0x6cea1820, + 0x321bc: 0x6cea1a20, 0x321bd: 0x6cea1c20, 0x321be: 0x6cea1e20, 0x321bf: 0x6cea2020, + // Block 0xc87, offset 0x321c0 + 0x321c0: 0x6cea2220, 0x321c1: 0x6cea2420, 0x321c2: 0x6cea2620, 0x321c3: 0x6cea2820, + 0x321c4: 0x6d19ee20, 0x321c5: 0x6d19f020, 0x321c6: 0x6d19f220, 0x321c7: 0x6d19f420, + 0x321c8: 0x6d19f620, 0x321c9: 0x6d19f820, 0x321ca: 0x6d488020, 0x321cb: 0x6d488220, + 0x321cc: 0x6d488420, 0x321cd: 0x6d488620, 0x321ce: 0x6d488820, 0x321cf: 0x6d488a20, + 0x321d0: 0x6d488c20, 0x321d1: 0x6d488e20, 0x321d2: 0x6d769220, 0x321d3: 0x6d19fa20, + 0x321d4: 0x6d769420, 0x321d5: 0x6d769620, 0x321d6: 0x6da01c20, 0x321d7: 0x6da01e20, + 0x321d8: 0x6da02020, 0x321d9: 0x6da02220, 0x321da: 0x6da02420, 0x321db: 0x6da02620, + 0x321dc: 0x6da02820, 0x321dd: 0x6dc2a820, 0x321de: 0x6dc2aa20, 0x321df: 0x6dc2ac20, + 0x321e0: 0x6dc2ae20, 0x321e1: 0x6dc2b020, 0x321e2: 0x6de04e20, 0x321e3: 0x6de05020, + 0x321e4: 0x6e0c6c20, 0x321e5: 0x6e1c2220, 0x321e6: 0x6e3cea20, 0x321e7: 0x6c009620, + 0x321e8: 0x6c009820, 0x321e9: 0x6c030c20, 0x321ea: 0x6c030e20, 0x321eb: 0x6c031020, + 0x321ec: 0x6c031220, 0x321ed: 0x6c031420, 0x321ee: 0x6c031620, 0x321ef: 0x6c031820, + 0x321f0: 0x6c031a20, 0x321f1: 0x6c066020, 0x321f2: 0x6c066220, 0x321f3: 0x6c066420, + 0x321f4: 0x6c066620, 0x321f5: 0x6c0cc220, 0x321f6: 0x6c0cc420, 0x321f7: 0x6c0cc620, + 0x321f8: 0x6c0cc820, 0x321f9: 0x6c0cca20, 0x321fa: 0x6c0ccc20, 0x321fb: 0x6c0cce20, + 0x321fc: 0x6c17ba20, 0x321fd: 0x6c17bc20, 0x321fe: 0x6c17be20, 0x321ff: 0x6c17c020, + // Block 0xc88, offset 0x32200 + 0x32200: 0x6c17c220, 0x32201: 0x6c17c420, 0x32202: 0x6c17c620, 0x32203: 0x6c17c820, + 0x32204: 0x6c17ca20, 0x32205: 0x6c17cc20, 0x32206: 0x6c2a9e20, 0x32207: 0x6c2aa020, + 0x32208: 0x6c2aa220, 0x32209: 0x6c2aa420, 0x3220a: 0x6c2aa620, 0x3220b: 0x6c2aa820, + 0x3220c: 0x6c2aaa20, 0x3220d: 0x6c2aac20, 0x3220e: 0x6c2aae20, 0x3220f: 0x6c44d220, + 0x32210: 0x6c44d420, 0x32211: 0x6c44d620, 0x32212: 0x6c660020, 0x32213: 0x6c660220, + 0x32214: 0x6c660420, 0x32215: 0x6c660620, 0x32216: 0x6c660820, 0x32217: 0x6c6de220, + 0x32218: 0x6c8cc220, 0x32219: 0x6c8cc420, 0x3221a: 0x6c916e20, 0x3221b: 0x6c8cc620, + 0x3221c: 0x6c8cc820, 0x3221d: 0x6c8cca20, 0x3221e: 0x6c8ccc20, 0x3221f: 0x6cb93620, + 0x32220: 0x6cb93820, 0x32221: 0x6cb93a20, 0x32222: 0x6cb93c20, 0x32223: 0x6cb93e20, + 0x32224: 0x6cea2e20, 0x32225: 0x6cea3020, 0x32226: 0x6cea3220, 0x32227: 0x6cea3420, + 0x32228: 0x6d1a0220, 0x32229: 0x6d1a0420, 0x3222a: 0x6d1a0620, 0x3222b: 0x6d489220, + 0x3222c: 0x6d717420, 0x3222d: 0x6d769a20, 0x3222e: 0x6d769c20, 0x3222f: 0x6d769e20, + 0x32230: 0x6d76a020, 0x32231: 0x6da02c20, 0x32232: 0x6df8a220, 0x32233: 0x6e0c6e20, + 0x32234: 0x6c009c20, 0x32235: 0x6c015820, 0x32236: 0x6c031e20, 0x32237: 0x6c032020, + 0x32238: 0x6c032220, 0x32239: 0x6c067220, 0x3223a: 0x6c067420, 0x3223b: 0x6c067620, + 0x3223c: 0x6c076c20, 0x3223d: 0x6c067820, 0x3223e: 0x6c0cd620, 0x3223f: 0x6c0cd820, + // Block 0xc89, offset 0x32240 + 0x32240: 0x6c0cda20, 0x32241: 0x6c0cdc20, 0x32242: 0x6c0cde20, 0x32243: 0x6c0ce020, + 0x32244: 0x6c0ce220, 0x32245: 0x6c0ce420, 0x32246: 0x6c17d020, 0x32247: 0x6c17d220, + 0x32248: 0x6c17d420, 0x32249: 0x6c17d620, 0x3224a: 0x6c17d820, 0x3224b: 0x6c2ab420, + 0x3224c: 0x6c2ab620, 0x3224d: 0x6c2ab820, 0x3224e: 0x6c44da20, 0x3224f: 0x6c44dc20, + 0x32250: 0x6c44de20, 0x32251: 0x6c633020, 0x32252: 0x6c660c20, 0x32253: 0x6c660e20, + 0x32254: 0x6c8cd020, 0x32255: 0x6c8cd220, 0x32256: 0x6c8cd420, 0x32257: 0x6c8cd620, + 0x32258: 0x6cb94220, 0x32259: 0x6d1a0820, 0x3225a: 0x6d1a0a20, 0x3225b: 0x6d4b1220, + 0x3225c: 0x6d489420, 0x3225d: 0x6d76a220, 0x3225e: 0x6da02e20, 0x3225f: 0x6de05220, + 0x32260: 0x6df8a420, 0x32261: 0x6e0c7020, 0x32262: 0x6e319220, 0x32263: 0x6c00a620, + 0x32264: 0x6c015e20, 0x32265: 0x6c032c20, 0x32266: 0x6c032e20, 0x32267: 0x6c033020, + 0x32268: 0x6c033220, 0x32269: 0x6c033420, 0x3226a: 0x6c033620, 0x3226b: 0x6c033820, + 0x3226c: 0x6c033a20, 0x3226d: 0x6c068c20, 0x3226e: 0x6c068e20, 0x3226f: 0x6c069020, + 0x32270: 0x6c069220, 0x32271: 0x6c069420, 0x32272: 0x6c069620, 0x32273: 0x6c069820, + 0x32274: 0x6c069a20, 0x32275: 0x6c0d0620, 0x32276: 0x6c069c20, 0x32277: 0x6c0d0820, + 0x32278: 0x6c0d0a20, 0x32279: 0x6c0d0c20, 0x3227a: 0x6c0d0e20, 0x3227b: 0x6c069e20, + 0x3227c: 0x6c0d1020, 0x3227d: 0x6c0d1220, 0x3227e: 0x6c0d1420, 0x3227f: 0x6c0d1620, + // Block 0xc8a, offset 0x32280 + 0x32280: 0x6c0d1820, 0x32281: 0x6c0d1a20, 0x32282: 0x6c0d1c20, 0x32283: 0x6c0d1e20, + 0x32284: 0x6c0d2020, 0x32285: 0x6c0d2220, 0x32286: 0x6c0d2420, 0x32287: 0x6c0d2620, + 0x32288: 0x6c0d2820, 0x32289: 0x6c0d2a20, 0x3228a: 0x6c0d2c20, 0x3228b: 0x6c0d2e20, + 0x3228c: 0x6c0d3020, 0x3228d: 0x6c0d3220, 0x3228e: 0x6c180220, 0x3228f: 0x6c180420, + 0x32290: 0x6c180620, 0x32291: 0x6c180820, 0x32292: 0x6c180a20, 0x32293: 0x6c180c20, + 0x32294: 0x6c180e20, 0x32295: 0x6c181020, 0x32296: 0x6c181220, 0x32297: 0x6c181420, + 0x32298: 0x6c181620, 0x32299: 0x6c181820, 0x3229a: 0x6c181a20, 0x3229b: 0x6c181c20, + 0x3229c: 0x6c181e20, 0x3229d: 0x6c182020, 0x3229e: 0x6c182220, 0x3229f: 0x6c182420, + 0x322a0: 0x6c182620, 0x322a1: 0x6c182820, 0x322a2: 0x6c182a20, 0x322a3: 0x6c182c20, + 0x322a4: 0x6c182e20, 0x322a5: 0x6c183020, 0x322a6: 0x6c183220, 0x322a7: 0x6c2af220, + 0x322a8: 0x6c2af420, 0x322a9: 0x6c2af620, 0x322aa: 0x6c2af820, 0x322ab: 0x6c2afa20, + 0x322ac: 0x6c2afc20, 0x322ad: 0x6c2afe20, 0x322ae: 0x6c2b0020, 0x322af: 0x6c2b0220, + 0x322b0: 0x6c2b0420, 0x322b1: 0x6c2b0620, 0x322b2: 0x6c2b0820, 0x322b3: 0x6c2b0a20, + 0x322b4: 0x6c2b0c20, 0x322b5: 0x6c2b0e20, 0x322b6: 0x6c2b1020, 0x322b7: 0x6c2b1220, + 0x322b8: 0x6c2b1420, 0x322b9: 0x6c2b1620, 0x322ba: 0x6c2b1820, 0x322bb: 0x6c2b1a20, + 0x322bc: 0x6c2b1c20, 0x322bd: 0x6c2b1e20, 0x322be: 0x6c2b2020, 0x322bf: 0x6c2b2220, + // Block 0xc8b, offset 0x322c0 + 0x322c0: 0x6c2b2420, 0x322c1: 0x6c2b2620, 0x322c2: 0x6c2b2820, 0x322c3: 0x6c2b2a20, + 0x322c4: 0x6c2b2c20, 0x322c5: 0x6c2b2e20, 0x322c6: 0x6c2b3020, 0x322c7: 0x6c2b3220, + 0x322c8: 0x6c2b3420, 0x322c9: 0x6c2b3620, 0x322ca: 0x6c2b3820, 0x322cb: 0x6c2b3a20, + 0x322cc: 0x6c2b3c20, 0x322cd: 0x6c2b3e20, 0x322ce: 0x6c2b4020, 0x322cf: 0x6c2b4220, + 0x322d0: 0x6c450620, 0x322d1: 0x6c450820, 0x322d2: 0x6c450a20, 0x322d3: 0x6c450c20, + 0x322d4: 0x6c450e20, 0x322d5: 0x6c451020, 0x322d6: 0x6c451220, 0x322d7: 0x6c451420, + 0x322d8: 0x6c451620, 0x322d9: 0x6c451820, 0x322da: 0x6c451a20, 0x322db: 0x6c451c20, + 0x322dc: 0x6c451e20, 0x322dd: 0x6c452020, 0x322de: 0x6c452220, 0x322df: 0x6c452420, + 0x322e0: 0x6c452620, 0x322e1: 0x6c452820, 0x322e2: 0x6c452a20, 0x322e3: 0x6c452c20, + 0x322e4: 0x6c452e20, 0x322e5: 0x6c453020, 0x322e6: 0x6c453220, 0x322e7: 0x6c453420, + 0x322e8: 0x6c453620, 0x322e9: 0x6c453820, 0x322ea: 0x6c453a20, 0x322eb: 0x6c453c20, + 0x322ec: 0x6c453e20, 0x322ed: 0x6c454020, 0x322ee: 0x6c454220, 0x322ef: 0x6c454420, + 0x322f0: 0x6c454620, 0x322f1: 0x6c664820, 0x322f2: 0x6c664a20, 0x322f3: 0x6c664c20, + 0x322f4: 0x6c664e20, 0x322f5: 0x6c665020, 0x322f6: 0x6c665220, 0x322f7: 0x6c665420, + 0x322f8: 0x6c665620, 0x322f9: 0x6c665820, 0x322fa: 0x6c665a20, 0x322fb: 0x6c665c20, + 0x322fc: 0x6c665e20, 0x322fd: 0x6c666020, 0x322fe: 0x6c666220, 0x322ff: 0x6c666420, + // Block 0xc8c, offset 0x32300 + 0x32300: 0x6c666620, 0x32301: 0x6c666820, 0x32302: 0x6c666a20, 0x32303: 0x6c666c20, + 0x32304: 0x6c666e20, 0x32305: 0x6c667020, 0x32306: 0x6c667220, 0x32307: 0x6c667420, + 0x32308: 0x6c667620, 0x32309: 0x6c667820, 0x3230a: 0x6c667a20, 0x3230b: 0x6c667c20, + 0x3230c: 0x6c667e20, 0x3230d: 0x6c668020, 0x3230e: 0x6c668220, 0x3230f: 0x6c668420, + 0x32310: 0x6c668620, 0x32311: 0x6c668820, 0x32312: 0x6c668a20, 0x32313: 0x6c668c20, + 0x32314: 0x6c668e20, 0x32315: 0x6c669020, 0x32316: 0x6c669220, 0x32317: 0x6c669420, + 0x32318: 0x6c669620, 0x32319: 0x6c669820, 0x3231a: 0x6c669a20, 0x3231b: 0x6c669c20, + 0x3231c: 0x6c669e20, 0x3231d: 0x6c8cf820, 0x3231e: 0x6c8cfa20, 0x3231f: 0x6c8cfc20, + 0x32320: 0x6c8cfe20, 0x32321: 0x6c8d0020, 0x32322: 0x6c8d0220, 0x32323: 0x6c8d0420, + 0x32324: 0x6c8d0620, 0x32325: 0x6c8d0820, 0x32326: 0x6c8d0a20, 0x32327: 0x6c8d0c20, + 0x32328: 0x6c8d0e20, 0x32329: 0x6c8d1020, 0x3232a: 0x6c8d1220, 0x3232b: 0x6c8d1420, + 0x3232c: 0x6c8d1620, 0x3232d: 0x6c8d1820, 0x3232e: 0x6c8d1a20, 0x3232f: 0x6c8d1c20, + 0x32330: 0x6c8d1e20, 0x32331: 0x6c8d2020, 0x32332: 0x6c8d2220, 0x32333: 0x6c8d2420, + 0x32334: 0x6c8d2620, 0x32335: 0x6c8d2820, 0x32336: 0x6c66a020, 0x32337: 0x6c8d2a20, + 0x32338: 0x6c8d2c20, 0x32339: 0x6c8d2e20, 0x3233a: 0x6c8d3020, 0x3233b: 0x6c8d3220, + 0x3233c: 0x6c8d3420, 0x3233d: 0x6c8d3620, 0x3233e: 0x6c8d3820, 0x3233f: 0x6cb95a20, + // Block 0xc8d, offset 0x32340 + 0x32340: 0x6cb95c20, 0x32341: 0x6cb95e20, 0x32342: 0x6cb96020, 0x32343: 0x6cb96220, + 0x32344: 0x6cb96420, 0x32345: 0x6cb96620, 0x32346: 0x6cb96820, 0x32347: 0x6cb96a20, + 0x32348: 0x6cb96c20, 0x32349: 0x6cb96e20, 0x3234a: 0x6cb97020, 0x3234b: 0x6cb97220, + 0x3234c: 0x6cb97420, 0x3234d: 0x6cb97620, 0x3234e: 0x6cb97820, 0x3234f: 0x6cb97a20, + 0x32350: 0x6cb97c20, 0x32351: 0x6cb97e20, 0x32352: 0x6cb98020, 0x32353: 0x6cb98220, + 0x32354: 0x6cb98420, 0x32355: 0x6cb98620, 0x32356: 0x6cb98820, 0x32357: 0x6cb98a20, + 0x32358: 0x6cb98c20, 0x32359: 0x6cb98e20, 0x3235a: 0x6cb99020, 0x3235b: 0x6cb99220, + 0x3235c: 0x6cd55e20, 0x3235d: 0x6cb99420, 0x3235e: 0x6cb99620, 0x3235f: 0x6cb99820, + 0x32360: 0x6cb99a20, 0x32361: 0x6cb99c20, 0x32362: 0x6cb99e20, 0x32363: 0x6cb9a020, + 0x32364: 0x6cb9a220, 0x32365: 0x6cea5220, 0x32366: 0x6cea5420, 0x32367: 0x6cea5620, + 0x32368: 0x6cea5820, 0x32369: 0x6cea5a20, 0x3236a: 0x6cea5c20, 0x3236b: 0x6cea5e20, + 0x3236c: 0x6cea6020, 0x3236d: 0x6cea6220, 0x3236e: 0x6cea6420, 0x3236f: 0x6cea6620, + 0x32370: 0x6cea6820, 0x32371: 0x6cea6a20, 0x32372: 0x6cea6c20, 0x32373: 0x6cea6e20, + 0x32374: 0x6cea7020, 0x32375: 0x6cea7220, 0x32376: 0x6cea7420, 0x32377: 0x6cea7620, + 0x32378: 0x6cea7820, 0x32379: 0x6cea7a20, 0x3237a: 0x6cea7c20, 0x3237b: 0x6cea7e20, + 0x3237c: 0x6cea8020, 0x3237d: 0x6cea8220, 0x3237e: 0x6cea8420, 0x3237f: 0x6cea8620, + // Block 0xc8e, offset 0x32380 + 0x32380: 0x6cea8820, 0x32381: 0x6cea8a20, 0x32382: 0x6d1a3020, 0x32383: 0x6d1a3220, + 0x32384: 0x6d1a3420, 0x32385: 0x6d1a3620, 0x32386: 0x6d1a3820, 0x32387: 0x6d1a3a20, + 0x32388: 0x6d1a3c20, 0x32389: 0x6d1a3e20, 0x3238a: 0x6d1a4020, 0x3238b: 0x6d1a4220, + 0x3238c: 0x6d1a4420, 0x3238d: 0x6d1a4620, 0x3238e: 0x6d1a4820, 0x3238f: 0x6d1a4a20, + 0x32390: 0x6d1a4c20, 0x32391: 0x6d1a4e20, 0x32392: 0x6d1a5020, 0x32393: 0x6d1a5220, + 0x32394: 0x6d1a5420, 0x32395: 0x6d1a5620, 0x32396: 0x6d1a5820, 0x32397: 0x6d1a5a20, + 0x32398: 0x6d1a5c20, 0x32399: 0x6d1a5e20, 0x3239a: 0x6d1a6020, 0x3239b: 0x6d1a6220, + 0x3239c: 0x6d1a6420, 0x3239d: 0x6d1a6620, 0x3239e: 0x6d1a6820, 0x3239f: 0x6d1a6a20, + 0x323a0: 0x6d48ae20, 0x323a1: 0x6d1a6c20, 0x323a2: 0x6d1a6e20, 0x323a3: 0x6d1a7020, + 0x323a4: 0x6d1a7220, 0x323a5: 0x6d1a7420, 0x323a6: 0x6d48b020, 0x323a7: 0x6d48b220, + 0x323a8: 0x6d48b420, 0x323a9: 0x6d48b620, 0x323aa: 0x6d48b820, 0x323ab: 0x6d48ba20, + 0x323ac: 0x6d48bc20, 0x323ad: 0x6d48be20, 0x323ae: 0x6d48c020, 0x323af: 0x6d48c220, + 0x323b0: 0x6d48c420, 0x323b1: 0x6d48c620, 0x323b2: 0x6d48c820, 0x323b3: 0x6d48ca20, + 0x323b4: 0x6d48cc20, 0x323b5: 0x6d48ce20, 0x323b6: 0x6d48d020, 0x323b7: 0x6d48d220, + 0x323b8: 0x6d48d420, 0x323b9: 0x6d48d620, 0x323ba: 0x6d76b420, 0x323bb: 0x6d76b620, + 0x323bc: 0x6d76b820, 0x323bd: 0x6d76ba20, 0x323be: 0x6d76bc20, 0x323bf: 0x6d76be20, + // Block 0xc8f, offset 0x323c0 + 0x323c0: 0x6d76c020, 0x323c1: 0x6d76c220, 0x323c2: 0x6d76c420, 0x323c3: 0x6d76c620, + 0x323c4: 0x6d76c820, 0x323c5: 0x6d76ca20, 0x323c6: 0x6d76cc20, 0x323c7: 0x6d76ce20, + 0x323c8: 0x6d76d020, 0x323c9: 0x6d76d220, 0x323ca: 0x6d76d420, 0x323cb: 0x6d938220, + 0x323cc: 0x6da03620, 0x323cd: 0x6da03820, 0x323ce: 0x6da03a20, 0x323cf: 0x6da03c20, + 0x323d0: 0x6da03e20, 0x323d1: 0x6da04020, 0x323d2: 0x6da04220, 0x323d3: 0x6da04420, + 0x323d4: 0x6da04620, 0x323d5: 0x6da04820, 0x323d6: 0x6da04a20, 0x323d7: 0x6da04c20, + 0x323d8: 0x6da04e20, 0x323d9: 0x6da05020, 0x323da: 0x6da05220, 0x323db: 0x6dc2b820, + 0x323dc: 0x6dc2ba20, 0x323dd: 0x6dc2bc20, 0x323de: 0x6dc2be20, 0x323df: 0x6dc2c020, + 0x323e0: 0x6dc2c220, 0x323e1: 0x6de05a20, 0x323e2: 0x6de05c20, 0x323e3: 0x6de05e20, + 0x323e4: 0x6df8a820, 0x323e5: 0x6e0c7620, 0x323e6: 0x6df8aa20, 0x323e7: 0x6df8ac20, + 0x323e8: 0x6df8ae20, 0x323e9: 0x6df8b020, 0x323ea: 0x6e0c7820, 0x323eb: 0x6e0c7a20, + 0x323ec: 0x6e0c7c20, 0x323ed: 0x6e0c7e20, 0x323ee: 0x6e286420, 0x323ef: 0x6e319420, + 0x323f0: 0x6e3cec20, 0x323f1: 0x6e3cee20, 0x323f2: 0x6c016220, 0x323f3: 0x6c034020, + 0x323f4: 0x6c034220, 0x323f5: 0x6c034420, 0x323f6: 0x6c06ae20, 0x323f7: 0x6c06b020, + 0x323f8: 0x6c06b220, 0x323f9: 0x6c0d4c20, 0x323fa: 0x6c0d4e20, 0x323fb: 0x6c0d5020, + 0x323fc: 0x6c0d5220, 0x323fd: 0x6c0d5420, 0x323fe: 0x6c0d5620, 0x323ff: 0x6c0d5820, + // Block 0xc90, offset 0x32400 + 0x32400: 0x6c0d5a20, 0x32401: 0x6c0d5c20, 0x32402: 0x6c185420, 0x32403: 0x6c185620, + 0x32404: 0x6c185820, 0x32405: 0x6c185a20, 0x32406: 0x6c185c20, 0x32407: 0x6c185e20, + 0x32408: 0x6c186020, 0x32409: 0x6c186220, 0x3240a: 0x6c186420, 0x3240b: 0x6c186620, + 0x3240c: 0x6c186820, 0x3240d: 0x6c186a20, 0x3240e: 0x6c186c20, 0x3240f: 0x6c186e20, + 0x32410: 0x6c187020, 0x32411: 0x6c2b6820, 0x32412: 0x6c2b6a20, 0x32413: 0x6c2b6c20, + 0x32414: 0x6c2b6e20, 0x32415: 0x6c2b7020, 0x32416: 0x6c2b7220, 0x32417: 0x6c2b7420, + 0x32418: 0x6c2b7620, 0x32419: 0x6c2b7820, 0x3241a: 0x6c2b7a20, 0x3241b: 0x6c2b7c20, + 0x3241c: 0x6c2b7e20, 0x3241d: 0x6c2b8020, 0x3241e: 0x6c456620, 0x3241f: 0x6c456820, + 0x32420: 0x6c456a20, 0x32421: 0x6c456c20, 0x32422: 0x6c456e20, 0x32423: 0x6c457020, + 0x32424: 0x6c457220, 0x32425: 0x6c457420, 0x32426: 0x6c457620, 0x32427: 0x6c457820, + 0x32428: 0x6c457a20, 0x32429: 0x6c457c20, 0x3242a: 0x6c457e20, 0x3242b: 0x6c66b820, + 0x3242c: 0x6c66ba20, 0x3242d: 0x6c66bc20, 0x3242e: 0x6c66be20, 0x3242f: 0x6c66c020, + 0x32430: 0x6c66c220, 0x32431: 0x6c66c420, 0x32432: 0x6c66c620, 0x32433: 0x6c66c820, + 0x32434: 0x6c66ca20, 0x32435: 0x6c66cc20, 0x32436: 0x6c66ce20, 0x32437: 0x6c66d020, + 0x32438: 0x6c66d220, 0x32439: 0x6c66d420, 0x3243a: 0x6c66d620, 0x3243b: 0x6c8d5420, + 0x3243c: 0x6c8d5620, 0x3243d: 0x6c8d5820, 0x3243e: 0x6c8d5a20, 0x3243f: 0x6c8d5c20, + // Block 0xc91, offset 0x32440 + 0x32440: 0x6c8d5e20, 0x32441: 0x6c8d6020, 0x32442: 0x6c8d6220, 0x32443: 0x6c8d6420, + 0x32444: 0x6c8d6620, 0x32445: 0x6cb9b420, 0x32446: 0x6cb9b620, 0x32447: 0x6cb9b820, + 0x32448: 0x6cb9ba20, 0x32449: 0x6cb9bc20, 0x3244a: 0x6cb9be20, 0x3244b: 0x6cb9c020, + 0x3244c: 0x6cb9c220, 0x3244d: 0x6cb9c420, 0x3244e: 0x6cb9c620, 0x3244f: 0x6cb9c820, + 0x32450: 0x6cb9ca20, 0x32451: 0x6cb9cc20, 0x32452: 0x6cb9ce20, 0x32453: 0x6ceaa420, + 0x32454: 0x6ceaa620, 0x32455: 0x6ceaa820, 0x32456: 0x6ceaaa20, 0x32457: 0x6ceaac20, + 0x32458: 0x6ceaae20, 0x32459: 0x6ceab020, 0x3245a: 0x6ceab220, 0x3245b: 0x6ceab420, + 0x3245c: 0x6ceab620, 0x3245d: 0x6ceab820, 0x3245e: 0x6ceaba20, 0x3245f: 0x6ceabc20, + 0x32460: 0x6d1a8420, 0x32461: 0x6d1a8620, 0x32462: 0x6d1a8820, 0x32463: 0x6d1a8a20, + 0x32464: 0x6d1a8c20, 0x32465: 0x6d1a8e20, 0x32466: 0x6d1a9020, 0x32467: 0x6d1a9220, + 0x32468: 0x6d1a9420, 0x32469: 0x6d1a9620, 0x3246a: 0x6d1a9820, 0x3246b: 0x6d1a9a20, + 0x3246c: 0x6d1a9c20, 0x3246d: 0x6d1a9e20, 0x3246e: 0x6d1aa020, 0x3246f: 0x6d1aa220, + 0x32470: 0x6d48e420, 0x32471: 0x6d48e620, 0x32472: 0x6d48e820, 0x32473: 0x6d48ea20, + 0x32474: 0x6d48ec20, 0x32475: 0x6d48ee20, 0x32476: 0x6d76dc20, 0x32477: 0x6d76de20, + 0x32478: 0x6d76e020, 0x32479: 0x6da06220, 0x3247a: 0x6da06420, 0x3247b: 0x6da06620, + 0x3247c: 0x6da06820, 0x3247d: 0x6da06a20, 0x3247e: 0x6da06c20, 0x3247f: 0x6da06e20, + // Block 0xc92, offset 0x32480 + 0x32480: 0x6dc2c620, 0x32481: 0x6dc2c820, 0x32482: 0x6dc2ca20, 0x32483: 0x6dc2cc20, + 0x32484: 0x6de06220, 0x32485: 0x6de06420, 0x32486: 0x6df8b220, 0x32487: 0x6e0c8020, + 0x32488: 0x6e286620, 0x32489: 0x6e286820, 0x3248a: 0x6e384220, 0x3248b: 0x6e46ae20, + 0x3248c: 0x6c035620, 0x3248d: 0x6c06be20, 0x3248e: 0x6c06c020, 0x3248f: 0x6c06c220, + 0x32490: 0x6c06c420, 0x32491: 0x6c0d6020, 0x32492: 0x6c0d6220, 0x32493: 0x6c0d6420, + 0x32494: 0x6c187a20, 0x32495: 0x6c187c20, 0x32496: 0x6c187e20, 0x32497: 0x6c188020, + 0x32498: 0x6c2b8e20, 0x32499: 0x6c2b9020, 0x3249a: 0x6c2b9220, 0x3249b: 0x6c2b9420, + 0x3249c: 0x6c2b9620, 0x3249d: 0x6c2b9820, 0x3249e: 0x6c458420, 0x3249f: 0x6c458620, + 0x324a0: 0x6c458820, 0x324a1: 0x6c458a20, 0x324a2: 0x6c458c20, 0x324a3: 0x6c458e20, + 0x324a4: 0x6c66e020, 0x324a5: 0x6c66e220, 0x324a6: 0x6c66e420, 0x324a7: 0x6c66e620, + 0x324a8: 0x6c66e820, 0x324a9: 0x6c66ea20, 0x324aa: 0x6c66ec20, 0x324ab: 0x6c66ee20, + 0x324ac: 0x6c66f020, 0x324ad: 0x6c66f220, 0x324ae: 0x6c8d7020, 0x324af: 0x6c8d7220, + 0x324b0: 0x6c8d7420, 0x324b1: 0x6c8d7620, 0x324b2: 0x6c8d7820, 0x324b3: 0x6c8d7a20, + 0x324b4: 0x6c8d7c20, 0x324b5: 0x6cb9da20, 0x324b6: 0x6cb9dc20, 0x324b7: 0x6cb9de20, + 0x324b8: 0x6ceac420, 0x324b9: 0x6ceac620, 0x324ba: 0x6ceac820, 0x324bb: 0x6ceaca20, + 0x324bc: 0x6ceacc20, 0x324bd: 0x6d1aa820, 0x324be: 0x6d1aaa20, 0x324bf: 0x6d1aac20, + // Block 0xc93, offset 0x324c0 + 0x324c0: 0x6d1aae20, 0x324c1: 0x6d1ab020, 0x324c2: 0x6d1ab220, 0x324c3: 0x6d48f420, + 0x324c4: 0x6d76e220, 0x324c5: 0x6d76e420, 0x324c6: 0x6d76e620, 0x324c7: 0x6d76e820, + 0x324c8: 0x6da07020, 0x324c9: 0x6da07220, 0x324ca: 0x6da07420, 0x324cb: 0x6df8b420, + 0x324cc: 0x6df8b620, 0x324cd: 0x6df8b820, 0x324ce: 0x6c00ae20, 0x324cf: 0x6c035c20, + 0x324d0: 0x6c06c820, 0x324d1: 0x6c188220, 0x324d2: 0x6c188420, 0x324d3: 0x6c188620, + 0x324d4: 0x6c188820, 0x324d5: 0x6c188a20, 0x324d6: 0x6c2b9c20, 0x324d7: 0x6c459020, + 0x324d8: 0x6c459220, 0x324d9: 0x6c459420, 0x324da: 0x6c459620, 0x324db: 0x6c459820, + 0x324dc: 0x6c459a20, 0x324dd: 0x6c459c20, 0x324de: 0x6c66f420, 0x324df: 0x6c66f620, + 0x324e0: 0x6c66f820, 0x324e1: 0x6c66fa20, 0x324e2: 0x6c63d420, 0x324e3: 0x6cb9e020, + 0x324e4: 0x6cb9e220, 0x324e5: 0x6ceace20, 0x324e6: 0x6d1ab420, 0x324e7: 0x6d1ab620, + 0x324e8: 0x6d1ab820, 0x324e9: 0x6da07620, 0x324ea: 0x6dc2ce20, 0x324eb: 0x6dea7420, + 0x324ec: 0x6c00b220, 0x324ed: 0x6c035e20, 0x324ee: 0x6c0d7020, 0x324ef: 0x6c0d7220, + 0x324f0: 0x6c0d7420, 0x324f1: 0x6c0d7620, 0x324f2: 0x6c0d7a20, 0x324f3: 0x6c189620, + 0x324f4: 0x6c189820, 0x324f5: 0x6c189a20, 0x324f6: 0x6c189c20, 0x324f7: 0x6c189e20, + 0x324f8: 0x6c2ba020, 0x324f9: 0x6c2ba220, 0x324fa: 0x6c2ba420, 0x324fb: 0x6c2ba620, + 0x324fc: 0x6c45a620, 0x324fd: 0x6c45a820, 0x324fe: 0x6c45aa20, 0x324ff: 0x6c45ac20, + // Block 0xc94, offset 0x32500 + 0x32500: 0x6c45ae20, 0x32501: 0x6c45b020, 0x32502: 0x6c45b220, 0x32503: 0x6c45c220, + 0x32504: 0x6c45b420, 0x32505: 0x6c45b620, 0x32506: 0x6c45b820, 0x32507: 0x6c45ba20, + 0x32508: 0x6c45bc20, 0x32509: 0x6c670220, 0x3250a: 0x6c670420, 0x3250b: 0x6c670620, + 0x3250c: 0x6c670820, 0x3250d: 0x6c670a20, 0x3250e: 0x6c8d8e20, 0x3250f: 0x6c8d9020, + 0x32510: 0x6cb9e420, 0x32511: 0x6cb9e620, 0x32512: 0x6cb9e820, 0x32513: 0x6cb9ea20, + 0x32514: 0x6cb9ec20, 0x32515: 0x6cb9ee20, 0x32516: 0x6ceada20, 0x32517: 0x6ceadc20, + 0x32518: 0x6ceade20, 0x32519: 0x6d1ac220, 0x3251a: 0x6d1ac420, 0x3251b: 0x6d1ac620, + 0x3251c: 0x6d48f820, 0x3251d: 0x6d48fa20, 0x3251e: 0x6d48fc20, 0x3251f: 0x6d48fe20, + 0x32520: 0x6d490020, 0x32521: 0x6d490220, 0x32522: 0x6d76ec20, 0x32523: 0x6d76ee20, + 0x32524: 0x6dc2d020, 0x32525: 0x6dc2d220, 0x32526: 0x6de06a20, 0x32527: 0x6de06c20, + 0x32528: 0x6df8bc20, 0x32529: 0x6df8be20, 0x3252a: 0x6e1c2420, 0x3252b: 0x6e3cf220, + 0x3252c: 0x6e451420, 0x3252d: 0x6c036420, 0x3252e: 0x6c0d7c20, 0x3252f: 0x6c0d7e20, + 0x32530: 0x6c18a820, 0x32531: 0x6c18aa20, 0x32532: 0x6c18ac20, 0x32533: 0x6c2baa20, + 0x32534: 0x6c45c420, 0x32535: 0x6c45c620, 0x32536: 0x6c670e20, 0x32537: 0x6d1aca20, + 0x32538: 0x6df8c220, 0x32539: 0x6e1c2620, 0x3253a: 0x6e1c2820, 0x3253b: 0x6c037020, + 0x3253c: 0x6c037220, 0x3253d: 0x6c06da20, 0x3253e: 0x6c06dc20, 0x3253f: 0x6c037420, + // Block 0xc95, offset 0x32540 + 0x32540: 0x6c06de20, 0x32541: 0x6c06e020, 0x32542: 0x6c0d8e20, 0x32543: 0x6c0d9020, + 0x32544: 0x6c0d9220, 0x32545: 0x6c0d9420, 0x32546: 0x6c0d9620, 0x32547: 0x6c0d9820, + 0x32548: 0x6c0d9a20, 0x32549: 0x6c0d9c20, 0x3254a: 0x6c0d9e20, 0x3254b: 0x6c0da020, + 0x3254c: 0x6c0da220, 0x3254d: 0x6c0da420, 0x3254e: 0x6c0da620, 0x3254f: 0x6c0da820, + 0x32550: 0x6c0daa20, 0x32551: 0x6c18ae20, 0x32552: 0x6c18b020, 0x32553: 0x6c18b220, + 0x32554: 0x6c18b420, 0x32555: 0x6c18b620, 0x32556: 0x6c18b820, 0x32557: 0x6c18ba20, + 0x32558: 0x6c2bba20, 0x32559: 0x6c2bbc20, 0x3255a: 0x6c2bbe20, 0x3255b: 0x6c2bc020, + 0x3255c: 0x6c2bc220, 0x3255d: 0x6c2bc420, 0x3255e: 0x6c2bc620, 0x3255f: 0x6c2bc820, + 0x32560: 0x6c2bca20, 0x32561: 0x6c2bcc20, 0x32562: 0x6c2bce20, 0x32563: 0x6c671020, + 0x32564: 0x6c671220, 0x32565: 0x6c671420, 0x32566: 0x6c671620, 0x32567: 0x6c671820, + 0x32568: 0x6c671a20, 0x32569: 0x6c671c20, 0x3256a: 0x6c8d9a20, 0x3256b: 0x6c8d9c20, + 0x3256c: 0x6c8d9e20, 0x3256d: 0x6c8da020, 0x3256e: 0x6c8da220, 0x3256f: 0x6c8da420, + 0x32570: 0x6cb9f420, 0x32571: 0x6cb9f620, 0x32572: 0x6cb9f820, 0x32573: 0x6cb9fa20, + 0x32574: 0x6ceae220, 0x32575: 0x6ceae420, 0x32576: 0x6ceae620, 0x32577: 0x6ceae820, + 0x32578: 0x6ceaea20, 0x32579: 0x6ceaec20, 0x3257a: 0x6ceaee20, 0x3257b: 0x6ceaf020, + 0x3257c: 0x6ceaf220, 0x3257d: 0x6d1acc20, 0x3257e: 0x6d1ace20, 0x3257f: 0x6d1ad020, + // Block 0xc96, offset 0x32580 + 0x32580: 0x6d490420, 0x32581: 0x6d490620, 0x32582: 0x6d490820, 0x32583: 0x6d490a20, + 0x32584: 0x6d490c20, 0x32585: 0x6da07a20, 0x32586: 0x6da07c20, 0x32587: 0x6da07e20, + 0x32588: 0x6da08020, 0x32589: 0x6dc2d420, 0x3258a: 0x6dc2d620, 0x3258b: 0x6dc2d820, + 0x3258c: 0x6dc2da20, 0x3258d: 0x6dc2dc20, 0x3258e: 0x6de06e20, 0x3258f: 0x6e0c8620, + 0x32590: 0x6e384420, 0x32591: 0x6e3cf420, 0x32592: 0x6c016c20, 0x32593: 0x6c06ea20, + 0x32594: 0x6c0dae20, 0x32595: 0x6c0db020, 0x32596: 0x6c0db220, 0x32597: 0x6c0db420, + 0x32598: 0x6c0db620, 0x32599: 0x6c18c420, 0x3259a: 0x6c18c620, 0x3259b: 0x6c18c820, + 0x3259c: 0x6c18ca20, 0x3259d: 0x6c161a20, 0x3259e: 0x6c2bdc20, 0x3259f: 0x6c2bde20, + 0x325a0: 0x6c2be020, 0x325a1: 0x6c2be220, 0x325a2: 0x6c2be420, 0x325a3: 0x6c2be620, + 0x325a4: 0x6c2be820, 0x325a5: 0x6c2bea20, 0x325a6: 0x6c2bec20, 0x325a7: 0x6c2bee20, + 0x325a8: 0x6c2bf020, 0x325a9: 0x6c45ce20, 0x325aa: 0x6c45d020, 0x325ab: 0x6c45d220, + 0x325ac: 0x6c45d420, 0x325ad: 0x6c45d620, 0x325ae: 0x6c45d820, 0x325af: 0x6c45da20, + 0x325b0: 0x6c45dc20, 0x325b1: 0x6c45de20, 0x325b2: 0x6c45e020, 0x325b3: 0x6c672020, + 0x325b4: 0x6c672220, 0x325b5: 0x6c672420, 0x325b6: 0x6c672620, 0x325b7: 0x6c672820, + 0x325b8: 0x6cb78420, 0x325b9: 0x6c672a20, 0x325ba: 0x6c8daa20, 0x325bb: 0x6c8dac20, + 0x325bc: 0x6c8dae20, 0x325bd: 0x6c8db020, 0x325be: 0x6c8db220, 0x325bf: 0x6c8db420, + // Block 0xc97, offset 0x325c0 + 0x325c0: 0x6cb9fc20, 0x325c1: 0x6cb9fe20, 0x325c2: 0x6cba0020, 0x325c3: 0x6cbd9e20, + 0x325c4: 0x6cba0220, 0x325c5: 0x6ceaf620, 0x325c6: 0x6d1ad420, 0x325c7: 0x6d1ad620, + 0x325c8: 0x6d491220, 0x325c9: 0x6d491420, 0x325ca: 0x6d491620, 0x325cb: 0x6e400820, + 0x325cc: 0x6e467a20, 0x325cd: 0x6c037e20, 0x325ce: 0x6c038020, 0x325cf: 0x6c038220, + 0x325d0: 0x6c038420, 0x325d1: 0x6c06f220, 0x325d2: 0x6c0dbc20, 0x325d3: 0x6c0dbe20, + 0x325d4: 0x6c0dc020, 0x325d5: 0x6c0dc220, 0x325d6: 0x6c0dc420, 0x325d7: 0x6c0dc620, + 0x325d8: 0x6c18da20, 0x325d9: 0x6c45ea20, 0x325da: 0x6c45ec20, 0x325db: 0x6c45ee20, + 0x325dc: 0x6c45f020, 0x325dd: 0x6c45f220, 0x325de: 0x6c672e20, 0x325df: 0x6cba0420, + 0x325e0: 0x6cba0620, 0x325e1: 0x6cba0820, 0x325e2: 0x6ceafc20, 0x325e3: 0x6ceafe20, + 0x325e4: 0x6ceb0020, 0x325e5: 0x6d1ada20, 0x325e6: 0x6da08420, 0x325e7: 0x6dc2e020, + 0x325e8: 0x6dc2e220, 0x325e9: 0x6dc2e420, 0x325ea: 0x6dc2e620, 0x325eb: 0x6e3cf620, + 0x325ec: 0x6c038e20, 0x325ed: 0x6c06fa20, 0x325ee: 0x6c06fc20, 0x325ef: 0x6c06fe20, + 0x325f0: 0x6c070020, 0x325f1: 0x6c070220, 0x325f2: 0x6c070420, 0x325f3: 0x6c070620, + 0x325f4: 0x6c0dda20, 0x325f5: 0x6c0ddc20, 0x325f6: 0x6c0dde20, 0x325f7: 0x6c0de020, + 0x325f8: 0x6c0de220, 0x325f9: 0x6c0de420, 0x325fa: 0x6c0de620, 0x325fb: 0x6c0de820, + 0x325fc: 0x6c0dea20, 0x325fd: 0x6c0dec20, 0x325fe: 0x6c0dee20, 0x325ff: 0x6c0df020, + // Block 0xc98, offset 0x32600 + 0x32600: 0x6c18ec20, 0x32601: 0x6c18ee20, 0x32602: 0x6c18f020, 0x32603: 0x6c18f220, + 0x32604: 0x6c18f420, 0x32605: 0x6c18f620, 0x32606: 0x6c18f820, 0x32607: 0x6c18fa20, + 0x32608: 0x6c18fc20, 0x32609: 0x6c18fe20, 0x3260a: 0x6c2c0c20, 0x3260b: 0x6c2c0e20, + 0x3260c: 0x6c2c1020, 0x3260d: 0x6c2c1220, 0x3260e: 0x6c2c1420, 0x3260f: 0x6c2c1620, + 0x32610: 0x6c2c1820, 0x32611: 0x6c2c1a20, 0x32612: 0x6c2c1c20, 0x32613: 0x6c2c1e20, + 0x32614: 0x6c2c2020, 0x32615: 0x6c2c2220, 0x32616: 0x6c2a5a20, 0x32617: 0x6c460420, + 0x32618: 0x6c460620, 0x32619: 0x6c460820, 0x3261a: 0x6c460a20, 0x3261b: 0x6c460c20, + 0x3261c: 0x6c460e20, 0x3261d: 0x6c461020, 0x3261e: 0x6c461220, 0x3261f: 0x6c461420, + 0x32620: 0x6c461620, 0x32621: 0x6c461820, 0x32622: 0x6c461a20, 0x32623: 0x6c461c20, + 0x32624: 0x6c461e20, 0x32625: 0x6c462020, 0x32626: 0x6c462220, 0x32627: 0x6c674220, + 0x32628: 0x6c674420, 0x32629: 0x6c674620, 0x3262a: 0x6c674820, 0x3262b: 0x6c674a20, + 0x3262c: 0x6c674c20, 0x3262d: 0x6c674e20, 0x3262e: 0x6c675020, 0x3262f: 0x6c675220, + 0x32630: 0x6c675420, 0x32631: 0x6c675620, 0x32632: 0x6c675820, 0x32633: 0x6c675a20, + 0x32634: 0x6c675c20, 0x32635: 0x6c675e20, 0x32636: 0x6c676020, 0x32637: 0x6c676220, + 0x32638: 0x6c8dc220, 0x32639: 0x6c8dc420, 0x3263a: 0x6c8dc620, 0x3263b: 0x6c8dc820, + 0x3263c: 0x6c8dca20, 0x3263d: 0x6c8dcc20, 0x3263e: 0x6c8dce20, 0x3263f: 0x6ceb0820, + // Block 0xc99, offset 0x32640 + 0x32640: 0x6c8dd020, 0x32641: 0x6c8dd220, 0x32642: 0x6c8dd420, 0x32643: 0x6c8dd620, + 0x32644: 0x6c8dd820, 0x32645: 0x6c8dda20, 0x32646: 0x6c8ddc20, 0x32647: 0x6cba1620, + 0x32648: 0x6cba1820, 0x32649: 0x6cba1a20, 0x3264a: 0x6cba1c20, 0x3264b: 0x6cba1e20, + 0x3264c: 0x6cba2020, 0x3264d: 0x6cba2220, 0x3264e: 0x6cba2420, 0x3264f: 0x6cba2620, + 0x32650: 0x6cba2820, 0x32651: 0x6ceb0a20, 0x32652: 0x6ceb0c20, 0x32653: 0x6ceb0e20, + 0x32654: 0x6ceb1020, 0x32655: 0x6ceb1220, 0x32656: 0x6ceb1420, 0x32657: 0x6ceb1620, + 0x32658: 0x6ceb1820, 0x32659: 0x6d1ae820, 0x3265a: 0x6d1aea20, 0x3265b: 0x6d1aec20, + 0x3265c: 0x6d1aee20, 0x3265d: 0x6d1af020, 0x3265e: 0x6d1af220, 0x3265f: 0x6d1af420, + 0x32660: 0x6d1af620, 0x32661: 0x6d1af820, 0x32662: 0x6d1afa20, 0x32663: 0x6d1afc20, + 0x32664: 0x6d1afe20, 0x32665: 0x6d1b0020, 0x32666: 0x6d1b0220, 0x32667: 0x6d1b0420, + 0x32668: 0x6d1b0620, 0x32669: 0x6d1b0820, 0x3266a: 0x6d1b0a20, 0x3266b: 0x6d1b0c20, + 0x3266c: 0x6d1b0e20, 0x3266d: 0x6d491e20, 0x3266e: 0x6d492020, 0x3266f: 0x6d492220, + 0x32670: 0x6d492420, 0x32671: 0x6d492620, 0x32672: 0x6d492820, 0x32673: 0x6d492a20, + 0x32674: 0x6d492c20, 0x32675: 0x6d492e20, 0x32676: 0x6d493020, 0x32677: 0x6d493220, + 0x32678: 0x6d493420, 0x32679: 0x6d5ad220, 0x3267a: 0x6d76f020, 0x3267b: 0x6d76f220, + 0x3267c: 0x6d76f420, 0x3267d: 0x6d76f620, 0x3267e: 0x6d76f820, 0x3267f: 0x6da08a20, + // Block 0xc9a, offset 0x32680 + 0x32680: 0x6dc2e820, 0x32681: 0x6dc2ea20, 0x32682: 0x6dc2ec20, 0x32683: 0x6dc2ee20, + 0x32684: 0x6dc2f020, 0x32685: 0x6dc2f220, 0x32686: 0x6dc2f420, 0x32687: 0x6df8c620, + 0x32688: 0x6dfbb620, 0x32689: 0x6e0c8820, 0x3268a: 0x6e0c8a20, 0x3268b: 0x6e1c2a20, + 0x3268c: 0x6e286a20, 0x3268d: 0x6e286c20, 0x3268e: 0x6e286e20, 0x3268f: 0x6e319820, + 0x32690: 0x6e442420, 0x32691: 0x6e462220, 0x32692: 0x6e467c20, 0x32693: 0x6c017620, + 0x32694: 0x6c017820, 0x32695: 0x6c017a20, 0x32696: 0x6c017c20, 0x32697: 0x6c039820, + 0x32698: 0x6c039a20, 0x32699: 0x6c071020, 0x3269a: 0x6c071220, 0x3269b: 0x6c071420, + 0x3269c: 0x6c071620, 0x3269d: 0x6c071820, 0x3269e: 0x6c0df620, 0x3269f: 0x6c0df820, + 0x326a0: 0x6c0dfa20, 0x326a1: 0x6c0dfc20, 0x326a2: 0x6c0dfe20, 0x326a3: 0x6c0e0020, + 0x326a4: 0x6c0e0220, 0x326a5: 0x6c0e0420, 0x326a6: 0x6c190620, 0x326a7: 0x6c190820, + 0x326a8: 0x6c190a20, 0x326a9: 0x6c2c2e20, 0x326aa: 0x6c2c3020, 0x326ab: 0x6c2c3220, + 0x326ac: 0x6c2c3420, 0x326ad: 0x6c2c3620, 0x326ae: 0x6c2ab020, 0x326af: 0x6c2c3820, + 0x326b0: 0x6c462c20, 0x326b1: 0x6c462e20, 0x326b2: 0x6c463020, 0x326b3: 0x6c464a20, + 0x326b4: 0x6c463220, 0x326b5: 0x6c463420, 0x326b6: 0x6c463620, 0x326b7: 0x6c463820, + 0x326b8: 0x6c463a20, 0x326b9: 0x6c677220, 0x326ba: 0x6c677420, 0x326bb: 0x6c677620, + 0x326bc: 0x6c677820, 0x326bd: 0x6c8dea20, 0x326be: 0x6c8dec20, 0x326bf: 0x6cba3020, + // Block 0xc9b, offset 0x326c0 + 0x326c0: 0x6cba3220, 0x326c1: 0x6cba3420, 0x326c2: 0x6cba3620, 0x326c3: 0x6cba3820, + 0x326c4: 0x6cba3a20, 0x326c5: 0x6cba3c20, 0x326c6: 0x6ceb2220, 0x326c7: 0x6ceb2420, + 0x326c8: 0x6ceb2620, 0x326c9: 0x6ceb2820, 0x326ca: 0x6ceb2a20, 0x326cb: 0x6ceb2c20, + 0x326cc: 0x6ceb2e20, 0x326cd: 0x6d1b1820, 0x326ce: 0x6d1b1a20, 0x326cf: 0x6d1b1c20, + 0x326d0: 0x6d1b1e20, 0x326d1: 0x6d493e20, 0x326d2: 0x6d494020, 0x326d3: 0x6d76fa20, + 0x326d4: 0x6de07220, 0x326d5: 0x6da08e20, 0x326d6: 0x6da09020, 0x326d7: 0x6da09220, + 0x326d8: 0x6de07420, 0x326d9: 0x6de07620, 0x326da: 0x6c03aa20, 0x326db: 0x6c03ac20, + 0x326dc: 0x6c03ae20, 0x326dd: 0x6c03b020, 0x326de: 0x6c03b220, 0x326df: 0x6c03b420, + 0x326e0: 0x6c03b620, 0x326e1: 0x6c072020, 0x326e2: 0x6c072220, 0x326e3: 0x6c072420, + 0x326e4: 0x6c072620, 0x326e5: 0x6c072820, 0x326e6: 0x6c072a20, 0x326e7: 0x6c072c20, + 0x326e8: 0x6c072e20, 0x326e9: 0x6c0e0a20, 0x326ea: 0x6c0e0c20, 0x326eb: 0x6c0e0e20, + 0x326ec: 0x6c0e1020, 0x326ed: 0x6c0e1220, 0x326ee: 0x6c0e1420, 0x326ef: 0x6c0e1620, + 0x326f0: 0x6c0e1820, 0x326f1: 0x6c191020, 0x326f2: 0x6c191220, 0x326f3: 0x6c191420, + 0x326f4: 0x6c191620, 0x326f5: 0x6c191820, 0x326f6: 0x6c191a20, 0x326f7: 0x6c191c20, + 0x326f8: 0x6c191e20, 0x326f9: 0x6c2c4620, 0x326fa: 0x6c2c4820, 0x326fb: 0x6c2c4a20, + 0x326fc: 0x6c2c4c20, 0x326fd: 0x6c2c4e20, 0x326fe: 0x6c2c5020, 0x326ff: 0x6c464c20, + // Block 0xc9c, offset 0x32700 + 0x32700: 0x6c464e20, 0x32701: 0x6c465020, 0x32702: 0x6c465220, 0x32703: 0x6c465420, + 0x32704: 0x6c465620, 0x32705: 0x6c465820, 0x32706: 0x6c465a20, 0x32707: 0x6c465c20, + 0x32708: 0x6c465e20, 0x32709: 0x6c45e220, 0x3270a: 0x6c678020, 0x3270b: 0x6c678220, + 0x3270c: 0x6c678420, 0x3270d: 0x6c678620, 0x3270e: 0x6c678820, 0x3270f: 0x6c678a20, + 0x32710: 0x6c678c20, 0x32711: 0x6c678e20, 0x32712: 0x6c679020, 0x32713: 0x6c679220, + 0x32714: 0x6c679420, 0x32715: 0x6c8df020, 0x32716: 0x6c8df220, 0x32717: 0x6c8df420, + 0x32718: 0x6c8df620, 0x32719: 0x6c8df820, 0x3271a: 0x6c8dfa20, 0x3271b: 0x6c8dfc20, + 0x3271c: 0x6c8dfe20, 0x3271d: 0x6c8e0020, 0x3271e: 0x6c8e0220, 0x3271f: 0x6c8e0420, + 0x32720: 0x6c8e0620, 0x32721: 0x6c8e0820, 0x32722: 0x6c8e0a20, 0x32723: 0x6c8e0c20, + 0x32724: 0x6c8e0e20, 0x32725: 0x6cba4420, 0x32726: 0x6cba4620, 0x32727: 0x6cba4820, + 0x32728: 0x6cba4a20, 0x32729: 0x6cba4c20, 0x3272a: 0x6cba4e20, 0x3272b: 0x6cba5020, + 0x3272c: 0x6cba5220, 0x3272d: 0x6cba5420, 0x3272e: 0x6cba5620, 0x3272f: 0x6ceb3620, + 0x32730: 0x6ceb3820, 0x32731: 0x6ceb3a20, 0x32732: 0x6ceb3c20, 0x32733: 0x6ceb3e20, + 0x32734: 0x6ceb4020, 0x32735: 0x6ceb4220, 0x32736: 0x6cee5e20, 0x32737: 0x6ceb4420, + 0x32738: 0x6ceb4620, 0x32739: 0x6ceb4820, 0x3273a: 0x6ceb4a20, 0x3273b: 0x6d19d820, + 0x3273c: 0x6d1b2220, 0x3273d: 0x6d1b2420, 0x3273e: 0x6d1b2620, 0x3273f: 0x6d1b2820, + // Block 0xc9d, offset 0x32740 + 0x32740: 0x6d1b2a20, 0x32741: 0x6d1b2c20, 0x32742: 0x6d1b2e20, 0x32743: 0x6d494420, + 0x32744: 0x6d494620, 0x32745: 0x6d494820, 0x32746: 0x6d494a20, 0x32747: 0x6d76fe20, + 0x32748: 0x6d770020, 0x32749: 0x6d770220, 0x3274a: 0x6d770420, 0x3274b: 0x6d770620, + 0x3274c: 0x6d770820, 0x3274d: 0x6da09420, 0x3274e: 0x6da09620, 0x3274f: 0x6da09820, + 0x32750: 0x6dc2f820, 0x32751: 0x6de07a20, 0x32752: 0x6de07c20, 0x32753: 0x6e0c8c20, + 0x32754: 0x6e0c8e20, 0x32755: 0x6e1c2c20, 0x32756: 0x6e287020, 0x32757: 0x6e319a20, + 0x32758: 0x6e319c20, 0x32759: 0x6c03bc20, 0x3275a: 0x6c03be20, 0x3275b: 0x6c03c020, + 0x3275c: 0x6c03c220, 0x3275d: 0x6c03c420, 0x3275e: 0x6c03c620, 0x3275f: 0x6c076e20, + 0x32760: 0x6c077020, 0x32761: 0x6c077220, 0x32762: 0x6c077420, 0x32763: 0x6c077620, + 0x32764: 0x6c077820, 0x32765: 0x6c077a20, 0x32766: 0x6c077c20, 0x32767: 0x6c077e20, + 0x32768: 0x6c078020, 0x32769: 0x6c078220, 0x3276a: 0x6c078420, 0x3276b: 0x6c0e5420, + 0x3276c: 0x6c0e5620, 0x3276d: 0x6c0e5820, 0x3276e: 0x6c0e5a20, 0x3276f: 0x6c0e5c20, + 0x32770: 0x6c0e5e20, 0x32771: 0x6c0e6020, 0x32772: 0x6c0e6220, 0x32773: 0x6c0e6420, + 0x32774: 0x6c0e6620, 0x32775: 0x6c0e6820, 0x32776: 0x6c0e6a20, 0x32777: 0x6c0e6c20, + 0x32778: 0x6c0e6e20, 0x32779: 0x6c0e7020, 0x3277a: 0x6c0e7220, 0x3277b: 0x6c0e7420, + 0x3277c: 0x6c0e7620, 0x3277d: 0x6c0e7820, 0x3277e: 0x6c0e7a20, 0x3277f: 0x6c0e7c20, + // Block 0xc9e, offset 0x32780 + 0x32780: 0x6c0e7e20, 0x32781: 0x6c0e8020, 0x32782: 0x6c0e8220, 0x32783: 0x6c0e8420, + 0x32784: 0x6c0e8620, 0x32785: 0x6c0e8820, 0x32786: 0x6c0e8a20, 0x32787: 0x6c0e8c20, + 0x32788: 0x6c0e8e20, 0x32789: 0x6c0e9020, 0x3278a: 0x6c0e9220, 0x3278b: 0x6c19ca20, + 0x3278c: 0x6c19cc20, 0x3278d: 0x6c19ce20, 0x3278e: 0x6c19d020, 0x3278f: 0x6c19d220, + 0x32790: 0x6c19d420, 0x32791: 0x6c19d620, 0x32792: 0x6c19d820, 0x32793: 0x6c19da20, + 0x32794: 0x6c19dc20, 0x32795: 0x6c19de20, 0x32796: 0x6c19e020, 0x32797: 0x6c19e220, + 0x32798: 0x6c19e420, 0x32799: 0x6c19e620, 0x3279a: 0x6c19e820, 0x3279b: 0x6c19ea20, + 0x3279c: 0x6c19ec20, 0x3279d: 0x6c19ee20, 0x3279e: 0x6c19f020, 0x3279f: 0x6c19f220, + 0x327a0: 0x6c19f420, 0x327a1: 0x6c19f620, 0x327a2: 0x6c19f820, 0x327a3: 0x6c19fa20, + 0x327a4: 0x6c19fc20, 0x327a5: 0x6c19fe20, 0x327a6: 0x6c1a0020, 0x327a7: 0x6c1a0220, + 0x327a8: 0x6c1a0420, 0x327a9: 0x6c1a0620, 0x327aa: 0x6c1a0820, 0x327ab: 0x6c1a0a20, + 0x327ac: 0x6c1a0c20, 0x327ad: 0x6c1a0e20, 0x327ae: 0x6c1a1020, 0x327af: 0x6c1a1220, + 0x327b0: 0x6c1a1420, 0x327b1: 0x6c1a1620, 0x327b2: 0x6c1a1820, 0x327b3: 0x6c1a1a20, + 0x327b4: 0x6c1a1c20, 0x327b5: 0x6c1a1e20, 0x327b6: 0x6c1a2020, 0x327b7: 0x6c1a2220, + 0x327b8: 0x6c1a2420, 0x327b9: 0x6c1a2620, 0x327ba: 0x6c1a2820, 0x327bb: 0x6c1a2a20, + 0x327bc: 0x6c1a2c20, 0x327bd: 0x6c1a2e20, 0x327be: 0x6c1a3020, 0x327bf: 0x6c1a3220, + // Block 0xc9f, offset 0x327c0 + 0x327c0: 0x6c1a3420, 0x327c1: 0x6c1a3620, 0x327c2: 0x6c1a3820, 0x327c3: 0x6c1a3a20, + 0x327c4: 0x6c1a3c20, 0x327c5: 0x6c1a3e20, 0x327c6: 0x6c1a4020, 0x327c7: 0x6c1a4220, + 0x327c8: 0x6c2ce620, 0x327c9: 0x6c2ce820, 0x327ca: 0x6c2cea20, 0x327cb: 0x6c2cec20, + 0x327cc: 0x6c2cee20, 0x327cd: 0x6c2cf020, 0x327ce: 0x6c2cf220, 0x327cf: 0x6c2cf420, + 0x327d0: 0x6c2cf620, 0x327d1: 0x6c2cf820, 0x327d2: 0x6c2cfa20, 0x327d3: 0x6c2cfc20, + 0x327d4: 0x6c2cfe20, 0x327d5: 0x6c2d0020, 0x327d6: 0x6c2d0220, 0x327d7: 0x6c2d0420, + 0x327d8: 0x6c2d0620, 0x327d9: 0x6c2d0820, 0x327da: 0x6c2d0a20, 0x327db: 0x6c2d0c20, + 0x327dc: 0x6c2d0e20, 0x327dd: 0x6c2d1020, 0x327de: 0x6c2d1220, 0x327df: 0x6c2d1420, + 0x327e0: 0x6c2d1620, 0x327e1: 0x6c2d1820, 0x327e2: 0x6c2d1a20, 0x327e3: 0x6c2d1c20, + 0x327e4: 0x6c2d1e20, 0x327e5: 0x6c2d2020, 0x327e6: 0x6c2d2220, 0x327e7: 0x6c2d2420, + 0x327e8: 0x6c2d2620, 0x327e9: 0x6c2d2820, 0x327ea: 0x6c2d2a20, 0x327eb: 0x6c2d2c20, + 0x327ec: 0x6c2d2e20, 0x327ed: 0x6c2d3020, 0x327ee: 0x6c2d3220, 0x327ef: 0x6c2d3420, + 0x327f0: 0x6c2d3620, 0x327f1: 0x6c2d3820, 0x327f2: 0x6c2d3a20, 0x327f3: 0x6c2d3c20, + 0x327f4: 0x6c2d3e20, 0x327f5: 0x6c2d4020, 0x327f6: 0x6c2d4220, 0x327f7: 0x6c2d4420, + 0x327f8: 0x6c2d4620, 0x327f9: 0x6c2d4820, 0x327fa: 0x6c2d4a20, 0x327fb: 0x6c2d4c20, + 0x327fc: 0x6c2d4e20, 0x327fd: 0x6c2d5020, 0x327fe: 0x6c2d5220, 0x327ff: 0x6c2d5420, + // Block 0xca0, offset 0x32800 + 0x32800: 0x6c2d5620, 0x32801: 0x6c2d5820, 0x32802: 0x6c2d5a20, 0x32803: 0x6c2d5c20, + 0x32804: 0x6c2d5e20, 0x32805: 0x6c2d6020, 0x32806: 0x6c2d6220, 0x32807: 0x6c2d6420, + 0x32808: 0x6c2d6620, 0x32809: 0x6c2d6820, 0x3280a: 0x6c2d6a20, 0x3280b: 0x6c2d6c20, + 0x3280c: 0x6c2d6e20, 0x3280d: 0x6c2d7020, 0x3280e: 0x6c2d7220, 0x3280f: 0x6c2d7420, + 0x32810: 0x6c470e20, 0x32811: 0x6c471020, 0x32812: 0x6c471220, 0x32813: 0x6c471420, + 0x32814: 0x6c471620, 0x32815: 0x6c471820, 0x32816: 0x6c471a20, 0x32817: 0x6c471c20, + 0x32818: 0x6c471e20, 0x32819: 0x6c472020, 0x3281a: 0x6c472220, 0x3281b: 0x6c472420, + 0x3281c: 0x6c472620, 0x3281d: 0x6c472820, 0x3281e: 0x6c472a20, 0x3281f: 0x6c472c20, + 0x32820: 0x6c472e20, 0x32821: 0x6c473020, 0x32822: 0x6c473220, 0x32823: 0x6c473420, + 0x32824: 0x6c473620, 0x32825: 0x6c473820, 0x32826: 0x6c473a20, 0x32827: 0x6c473c20, + 0x32828: 0x6c473e20, 0x32829: 0x6c474020, 0x3282a: 0x6c474220, 0x3282b: 0x6c474420, + 0x3282c: 0x6c474620, 0x3282d: 0x6c474820, 0x3282e: 0x6c474a20, 0x3282f: 0x6c474c20, + 0x32830: 0x6c474e20, 0x32831: 0x6c475020, 0x32832: 0x6c475220, 0x32833: 0x6c475420, + 0x32834: 0x6c475620, 0x32835: 0x6c475820, 0x32836: 0x6c475a20, 0x32837: 0x6c475c20, + 0x32838: 0x6c475e20, 0x32839: 0x6c476020, 0x3283a: 0x6c476220, 0x3283b: 0x6c476420, + 0x3283c: 0x6c476620, 0x3283d: 0x6c476820, 0x3283e: 0x6c476a20, 0x3283f: 0x6c476c20, + // Block 0xca1, offset 0x32840 + 0x32840: 0x6c476e20, 0x32841: 0x6c477020, 0x32842: 0x6c477220, 0x32843: 0x6c477420, + 0x32844: 0x6c477620, 0x32845: 0x6c477820, 0x32846: 0x6c477a20, 0x32847: 0x6c477c20, + 0x32848: 0x6c477e20, 0x32849: 0x6c478020, 0x3284a: 0x6c478220, 0x3284b: 0x6c478420, + 0x3284c: 0x6c478620, 0x3284d: 0x6c478820, 0x3284e: 0x6c478a20, 0x3284f: 0x6c478c20, + 0x32850: 0x6c478e20, 0x32851: 0x6c479020, 0x32852: 0x6c479220, 0x32853: 0x6c479420, + 0x32854: 0x6c479620, 0x32855: 0x6c479820, 0x32856: 0x6c479a20, 0x32857: 0x6c479c20, + 0x32858: 0x6c479e20, 0x32859: 0x6c47a020, 0x3285a: 0x6c47a220, 0x3285b: 0x6c47a420, + 0x3285c: 0x6c47a620, 0x3285d: 0x6c47a820, 0x3285e: 0x6c47aa20, 0x3285f: 0x6c47ac20, + 0x32860: 0x6c47ae20, 0x32861: 0x6c47b020, 0x32862: 0x6c47b220, 0x32863: 0x6c47b420, + 0x32864: 0x6c47b620, 0x32865: 0x6c47b820, 0x32866: 0x6c47ba20, 0x32867: 0x6c47bc20, + 0x32868: 0x6c47be20, 0x32869: 0x6c47c020, 0x3286a: 0x6c47c220, 0x3286b: 0x6c47c420, + 0x3286c: 0x6c684820, 0x3286d: 0x6c684a20, 0x3286e: 0x6c684c20, 0x3286f: 0x6c684e20, + 0x32870: 0x6c685020, 0x32871: 0x6c685220, 0x32872: 0x6c685420, 0x32873: 0x6c685620, + 0x32874: 0x6c685820, 0x32875: 0x6c685a20, 0x32876: 0x6c685c20, 0x32877: 0x6c685e20, + 0x32878: 0x6c686020, 0x32879: 0x6c686220, 0x3287a: 0x6c686420, 0x3287b: 0x6c686620, + 0x3287c: 0x6c686820, 0x3287d: 0x6c686a20, 0x3287e: 0x6c686c20, 0x3287f: 0x6c686e20, + // Block 0xca2, offset 0x32880 + 0x32880: 0x6c687020, 0x32881: 0x6c687220, 0x32882: 0x6c687420, 0x32883: 0x6c687620, + 0x32884: 0x6c687820, 0x32885: 0x6c687a20, 0x32886: 0x6c687c20, 0x32887: 0x6c687e20, + 0x32888: 0x6c688020, 0x32889: 0x6c688220, 0x3288a: 0x6c688420, 0x3288b: 0x6c688620, + 0x3288c: 0x6c688820, 0x3288d: 0x6c688a20, 0x3288e: 0x6c688c20, 0x3288f: 0x6c688e20, + 0x32890: 0x6c689020, 0x32891: 0x6c689220, 0x32892: 0x6c689420, 0x32893: 0x6c689620, + 0x32894: 0x6c689820, 0x32895: 0x6c689a20, 0x32896: 0x6c689c20, 0x32897: 0x6c689e20, + 0x32898: 0x6c68a020, 0x32899: 0x6c68a220, 0x3289a: 0x6c68a420, 0x3289b: 0x6c68a620, + 0x3289c: 0x6c68a820, 0x3289d: 0x6c68aa20, 0x3289e: 0x6c68ac20, 0x3289f: 0x6c68ae20, + 0x328a0: 0x6c68b020, 0x328a1: 0x6c68b220, 0x328a2: 0x6c68b420, 0x328a3: 0x6c68b620, + 0x328a4: 0x6c68b820, 0x328a5: 0x6c8ede20, 0x328a6: 0x6c68ba20, 0x328a7: 0x6c68bc20, + 0x328a8: 0x6c68be20, 0x328a9: 0x6c68c020, 0x328aa: 0x6c68c220, 0x328ab: 0x6c7ab620, + 0x328ac: 0x6c68c420, 0x328ad: 0x6c68c620, 0x328ae: 0x6c68c820, 0x328af: 0x6c68ca20, + 0x328b0: 0x6c68cc20, 0x328b1: 0x6c68ce20, 0x328b2: 0x6c68d020, 0x328b3: 0x6c68d220, + 0x328b4: 0x6c68d420, 0x328b5: 0x6c68d620, 0x328b6: 0x6c68d820, 0x328b7: 0x6c68da20, + 0x328b8: 0x6c68dc20, 0x328b9: 0x6c68de20, 0x328ba: 0x6c68e020, 0x328bb: 0x6c68e220, + 0x328bc: 0x6c68e420, 0x328bd: 0x6c68e620, 0x328be: 0x6c68e820, 0x328bf: 0x6c68ea20, + // Block 0xca3, offset 0x328c0 + 0x328c0: 0x6c68ec20, 0x328c1: 0x6c68ee20, 0x328c2: 0x6c68f020, 0x328c3: 0x6c68f220, + 0x328c4: 0x6c68f420, 0x328c5: 0x6c68f620, 0x328c6: 0x6c68f820, 0x328c7: 0x6c68fa20, + 0x328c8: 0x6c68fc20, 0x328c9: 0x6c68fe20, 0x328ca: 0x6c690020, 0x328cb: 0x6c690220, + 0x328cc: 0x6c690420, 0x328cd: 0x6c690620, 0x328ce: 0x6c690820, 0x328cf: 0x6c690a20, + 0x328d0: 0x6c690c20, 0x328d1: 0x6c690e20, 0x328d2: 0x6c691020, 0x328d3: 0x6c691220, + 0x328d4: 0x6c691420, 0x328d5: 0x6c691620, 0x328d6: 0x6c691820, 0x328d7: 0x6c691a20, + 0x328d8: 0x6c691c20, 0x328d9: 0x6c691e20, 0x328da: 0x6c692020, 0x328db: 0x6c692220, + 0x328dc: 0x6c692420, 0x328dd: 0x6c692620, 0x328de: 0x6c692820, 0x328df: 0x6c692a20, + 0x328e0: 0x6c692c20, 0x328e1: 0x6c692e20, 0x328e2: 0x6c693020, 0x328e3: 0x6c693220, + 0x328e4: 0x6c693420, 0x328e5: 0x6c693620, 0x328e6: 0x6c7a1a20, 0x328e7: 0x6c8ee020, + 0x328e8: 0x6c8ee220, 0x328e9: 0x6c8ee420, 0x328ea: 0x6c8ee620, 0x328eb: 0x6c8ee820, + 0x328ec: 0x6c8eea20, 0x328ed: 0x6c8eec20, 0x328ee: 0x6c8eee20, 0x328ef: 0x6c8ef020, + 0x328f0: 0x6c8ef220, 0x328f1: 0x6c8ef420, 0x328f2: 0x6c8ef620, 0x328f3: 0x6c8ef820, + 0x328f4: 0x6c8efa20, 0x328f5: 0x6c8efc20, 0x328f6: 0x6c8efe20, 0x328f7: 0x6c8f0020, + 0x328f8: 0x6c8f0220, 0x328f9: 0x6c8f0420, 0x328fa: 0x6c8f0620, 0x328fb: 0x6c8f0820, + 0x328fc: 0x6c8f0a20, 0x328fd: 0x6c8f0c20, 0x328fe: 0x6c8f0e20, 0x328ff: 0x6c8f1020, + // Block 0xca4, offset 0x32900 + 0x32900: 0x6c8f1220, 0x32901: 0x6c8f1420, 0x32902: 0x6c8f1620, 0x32903: 0x6c8f1820, + 0x32904: 0x6c8f1a20, 0x32905: 0x6c8f1c20, 0x32906: 0x6c8f1e20, 0x32907: 0x6c8f2020, + 0x32908: 0x6c8f2220, 0x32909: 0x6c8f2420, 0x3290a: 0x6c8f2620, 0x3290b: 0x6c8f2820, + 0x3290c: 0x6c8f2a20, 0x3290d: 0x6c8f2c20, 0x3290e: 0x6c8f2e20, 0x3290f: 0x6c8f3020, + 0x32910: 0x6c8f3220, 0x32911: 0x6c8f3420, 0x32912: 0x6c8f3620, 0x32913: 0x6c8f3820, + 0x32914: 0x6c8f3a20, 0x32915: 0x6c8f3c20, 0x32916: 0x6c8f3e20, 0x32917: 0x6c8f4020, + 0x32918: 0x6c8f4220, 0x32919: 0x6c8f4420, 0x3291a: 0x6c8f4620, 0x3291b: 0x6c8f4820, + 0x3291c: 0x6c8f4a20, 0x3291d: 0x6c8f4c20, 0x3291e: 0x6c8f4e20, 0x3291f: 0x6c8f5020, + 0x32920: 0x6c8f5220, 0x32921: 0x6c8f5420, 0x32922: 0x6c8f5620, 0x32923: 0x6c8f5820, + 0x32924: 0x6c8f5a20, 0x32925: 0x6c8f5c20, 0x32926: 0x6c8f5e20, 0x32927: 0x6c8f6020, + 0x32928: 0x6c8f6220, 0x32929: 0x6c8f6420, 0x3292a: 0x6c8f6620, 0x3292b: 0x6c8f6820, + 0x3292c: 0x6c8f6a20, 0x3292d: 0x6c8f6c20, 0x3292e: 0x6c8f6e20, 0x3292f: 0x6c8f7020, + 0x32930: 0x6c8f7220, 0x32931: 0x6c8f7420, 0x32932: 0x6c8f7620, 0x32933: 0x6c8f7820, + 0x32934: 0x6c8f7a20, 0x32935: 0x6c8f7c20, 0x32936: 0x6c8f7e20, 0x32937: 0x6c8f8020, + 0x32938: 0x6c8f8220, 0x32939: 0x6c8f8420, 0x3293a: 0x6c8f8620, 0x3293b: 0x6c8f8820, + 0x3293c: 0x6c8f8a20, 0x3293d: 0x6c8f8c20, 0x3293e: 0x6c8f8e20, 0x3293f: 0x6c8f9020, + // Block 0xca5, offset 0x32940 + 0x32940: 0x6c8f9220, 0x32941: 0x6c8f9420, 0x32942: 0x6c8f9620, 0x32943: 0x6c8f9820, + 0x32944: 0x6c8f9a20, 0x32945: 0x6c8f9c20, 0x32946: 0x6c8f9e20, 0x32947: 0x6c8fa020, + 0x32948: 0x6c8fa220, 0x32949: 0x6c8fa420, 0x3294a: 0x6c8fa620, 0x3294b: 0x6c8fa820, + 0x3294c: 0x6c8faa20, 0x3294d: 0x6c8fac20, 0x3294e: 0x6c8fae20, 0x3294f: 0x6c8fb020, + 0x32950: 0x6c8fb220, 0x32951: 0x6c8fb420, 0x32952: 0x6c8fb620, 0x32953: 0x6c8fb820, + 0x32954: 0x6c8fba20, 0x32955: 0x6c8fbc20, 0x32956: 0x6c8fbe20, 0x32957: 0x6c8fc020, + 0x32958: 0x6c8fc220, 0x32959: 0x6c8fc420, 0x3295a: 0x6c8fc620, 0x3295b: 0x6c8fc820, + 0x3295c: 0x6c8fca20, 0x3295d: 0x6c8fcc20, 0x3295e: 0x6c8fce20, 0x3295f: 0x6c8fd020, + 0x32960: 0x6c8fd220, 0x32961: 0x6c8fd420, 0x32962: 0x6c8fd620, 0x32963: 0x6c8fd820, + 0x32964: 0x6c8fda20, 0x32965: 0x6c8fdc20, 0x32966: 0x6c8fde20, 0x32967: 0x6c8fe020, + 0x32968: 0x6c8fe220, 0x32969: 0x6c8fe420, 0x3296a: 0x6c8fe620, 0x3296b: 0x6c8fe820, + 0x3296c: 0x6c8fea20, 0x3296d: 0x6c8fec20, 0x3296e: 0x6c8fee20, 0x3296f: 0x6c8ff020, + 0x32970: 0x6c8ff220, 0x32971: 0x6c8ff420, 0x32972: 0x6c8ff620, 0x32973: 0x6c8ff820, + 0x32974: 0x6c8ffa20, 0x32975: 0x6c8ffc20, 0x32976: 0x6c8ffe20, 0x32977: 0x6cbb1e20, + 0x32978: 0x6cbb2020, 0x32979: 0x6cbb2220, 0x3297a: 0x6cbb2420, 0x3297b: 0x6cbb2620, + 0x3297c: 0x6cbb2820, 0x3297d: 0x6cbb2a20, 0x3297e: 0x6cbb2c20, 0x3297f: 0x6cbb2e20, + // Block 0xca6, offset 0x32980 + 0x32980: 0x6cbb3020, 0x32981: 0x6cbb3220, 0x32982: 0x6cbb3420, 0x32983: 0x6cbb3620, + 0x32984: 0x6cbb3820, 0x32985: 0x6cbb3a20, 0x32986: 0x6cbb3c20, 0x32987: 0x6cbb3e20, + 0x32988: 0x6cbb4020, 0x32989: 0x6cbb4220, 0x3298a: 0x6cbb4420, 0x3298b: 0x6cbb4620, + 0x3298c: 0x6cbb4820, 0x3298d: 0x6cbb4a20, 0x3298e: 0x6cbb4c20, 0x3298f: 0x6cbb4e20, + 0x32990: 0x6cbb5020, 0x32991: 0x6cbb5220, 0x32992: 0x6cbb5420, 0x32993: 0x6cbb5620, + 0x32994: 0x6cbb5820, 0x32995: 0x6cbb5a20, 0x32996: 0x6cbb5c20, 0x32997: 0x6cbb5e20, + 0x32998: 0x6cbb6020, 0x32999: 0x6cbb6220, 0x3299a: 0x6cbb6420, 0x3299b: 0x6cbb6620, + 0x3299c: 0x6cbb6820, 0x3299d: 0x6cbb6a20, 0x3299e: 0x6cbb6c20, 0x3299f: 0x6cbb6e20, + 0x329a0: 0x6cbb7020, 0x329a1: 0x6cbb7220, 0x329a2: 0x6cebdc20, 0x329a3: 0x6cbb7420, + 0x329a4: 0x6cbb7620, 0x329a5: 0x6cbb7820, 0x329a6: 0x6cbb7a20, 0x329a7: 0x6cbb7c20, + 0x329a8: 0x6cbb7e20, 0x329a9: 0x6cbb8020, 0x329aa: 0x6cbb8220, 0x329ab: 0x6cbb8420, + 0x329ac: 0x6cbb8620, 0x329ad: 0x6cbb8820, 0x329ae: 0x6cbb8a20, 0x329af: 0x6cbb8c20, + 0x329b0: 0x6cbb8e20, 0x329b1: 0x6cbb9020, 0x329b2: 0x6cbb9220, 0x329b3: 0x6cbb9420, + 0x329b4: 0x6cbb9620, 0x329b5: 0x6cbb9820, 0x329b6: 0x6cbb9a20, 0x329b7: 0x6cbb9c20, + 0x329b8: 0x6cbb9e20, 0x329b9: 0x6cbba020, 0x329ba: 0x6cbba220, 0x329bb: 0x6cbba420, + 0x329bc: 0x6cbba620, 0x329bd: 0x6cbba820, 0x329be: 0x6cbbaa20, 0x329bf: 0x6cbbac20, + // Block 0xca7, offset 0x329c0 + 0x329c0: 0x6cbbae20, 0x329c1: 0x6cbbb020, 0x329c2: 0x6cbbb220, 0x329c3: 0x6cbbb420, + 0x329c4: 0x6cbbb620, 0x329c5: 0x6cbbb820, 0x329c6: 0x6cbbba20, 0x329c7: 0x6cbbbc20, + 0x329c8: 0x6cbbbe20, 0x329c9: 0x6cbbc020, 0x329ca: 0x6cbbc220, 0x329cb: 0x6cbbc420, + 0x329cc: 0x6cbbc620, 0x329cd: 0x6cbbc820, 0x329ce: 0x6cbbca20, 0x329cf: 0x6cbbcc20, + 0x329d0: 0x6cbbce20, 0x329d1: 0x6cbbd020, 0x329d2: 0x6cbbd220, 0x329d3: 0x6cbbd420, + 0x329d4: 0x6cbbd620, 0x329d5: 0x6cbbd820, 0x329d6: 0x6cbbda20, 0x329d7: 0x6cbbdc20, + 0x329d8: 0x6cbbde20, 0x329d9: 0x6cbbe020, 0x329da: 0x6cbbe220, 0x329db: 0x6cbbe420, + 0x329dc: 0x6cbbe620, 0x329dd: 0x6cbbe820, 0x329de: 0x6cbbea20, 0x329df: 0x6cbbec20, + 0x329e0: 0x6cbbee20, 0x329e1: 0x6cbbf020, 0x329e2: 0x6cbbf220, 0x329e3: 0x6cbbf420, + 0x329e4: 0x6cbbf620, 0x329e5: 0x6cbbf820, 0x329e6: 0x6cbbfa20, 0x329e7: 0x6cbbfc20, + 0x329e8: 0x6cbbfe20, 0x329e9: 0x6cbc0020, 0x329ea: 0x6cbc0220, 0x329eb: 0x6cbc0420, + 0x329ec: 0x6cbc0620, 0x329ed: 0x6cbc0820, 0x329ee: 0x6cbc0a20, 0x329ef: 0x6cbc0c20, + 0x329f0: 0x6cbc0e20, 0x329f1: 0x6cbc1020, 0x329f2: 0x6cbc1220, 0x329f3: 0x6cbc1420, + 0x329f4: 0x6cbc1620, 0x329f5: 0x6cbc1820, 0x329f6: 0x6cebde20, 0x329f7: 0x6cebe020, + 0x329f8: 0x6cebe220, 0x329f9: 0x6cebe420, 0x329fa: 0x6cebe620, 0x329fb: 0x6cbc1a20, + 0x329fc: 0x6cbc1c20, 0x329fd: 0x6cbc1e20, 0x329fe: 0x6cbc2020, 0x329ff: 0x6cebe820, + // Block 0xca8, offset 0x32a00 + 0x32a00: 0x6cebea20, 0x32a01: 0x6cebec20, 0x32a02: 0x6cebee20, 0x32a03: 0x6cebf020, + 0x32a04: 0x6cebf220, 0x32a05: 0x6cebf420, 0x32a06: 0x6cebf620, 0x32a07: 0x6cebf820, + 0x32a08: 0x6cebfa20, 0x32a09: 0x6cebfc20, 0x32a0a: 0x6cebfe20, 0x32a0b: 0x6cec0020, + 0x32a0c: 0x6cec0220, 0x32a0d: 0x6cec0420, 0x32a0e: 0x6cec0620, 0x32a0f: 0x6cec0820, + 0x32a10: 0x6cec0a20, 0x32a11: 0x6cec0c20, 0x32a12: 0x6cec0e20, 0x32a13: 0x6cec1020, + 0x32a14: 0x6cec1220, 0x32a15: 0x6cec1420, 0x32a16: 0x6cec1620, 0x32a17: 0x6cec1820, + 0x32a18: 0x6cec1a20, 0x32a19: 0x6cec1c20, 0x32a1a: 0x6cec1e20, 0x32a1b: 0x6cec2020, + 0x32a1c: 0x6cec2220, 0x32a1d: 0x6cec2420, 0x32a1e: 0x6cec2620, 0x32a1f: 0x6cec2820, + 0x32a20: 0x6cec2a20, 0x32a21: 0x6cec2c20, 0x32a22: 0x6cec2e20, 0x32a23: 0x6cec3020, + 0x32a24: 0x6cec3220, 0x32a25: 0x6cec3420, 0x32a26: 0x6cec3620, 0x32a27: 0x6cec3820, + 0x32a28: 0x6cec3a20, 0x32a29: 0x6cec3c20, 0x32a2a: 0x6cec3e20, 0x32a2b: 0x6cec4020, + 0x32a2c: 0x6cec4220, 0x32a2d: 0x6cec4420, 0x32a2e: 0x6cec4620, 0x32a2f: 0x6cec4820, + 0x32a30: 0x6d49ce20, 0x32a31: 0x6d49d020, 0x32a32: 0x6d49d220, 0x32a33: 0x6cec4a20, + 0x32a34: 0x6cec4c20, 0x32a35: 0x6cec4e20, 0x32a36: 0x6cec5020, 0x32a37: 0x6cec5220, + 0x32a38: 0x6cec5420, 0x32a39: 0x6cec5620, 0x32a3a: 0x6cec5820, 0x32a3b: 0x6cec5a20, + 0x32a3c: 0x6cec5c20, 0x32a3d: 0x6cec5e20, 0x32a3e: 0x6cec6020, 0x32a3f: 0x6cec6220, + // Block 0xca9, offset 0x32a40 + 0x32a40: 0x6cec6420, 0x32a41: 0x6cec6620, 0x32a42: 0x6cec6820, 0x32a43: 0x6cec6a20, + 0x32a44: 0x6cec6c20, 0x32a45: 0x6cec6e20, 0x32a46: 0x6cec7020, 0x32a47: 0x6cec7220, + 0x32a48: 0x6cec7420, 0x32a49: 0x6cec7620, 0x32a4a: 0x6cec7820, 0x32a4b: 0x6cec7a20, + 0x32a4c: 0x6cec7c20, 0x32a4d: 0x6cec7e20, 0x32a4e: 0x6cec8020, 0x32a4f: 0x6cec8220, + 0x32a50: 0x6cec8420, 0x32a51: 0x6cec8620, 0x32a52: 0x6cec8820, 0x32a53: 0x6cec8a20, + 0x32a54: 0x6cec8c20, 0x32a55: 0x6cec8e20, 0x32a56: 0x6cec9020, 0x32a57: 0x6cec9220, + 0x32a58: 0x6cec9420, 0x32a59: 0x6cec9620, 0x32a5a: 0x6cec9820, 0x32a5b: 0x6cec9a20, + 0x32a5c: 0x6cec9c20, 0x32a5d: 0x6cec9e20, 0x32a5e: 0x6ceca020, 0x32a5f: 0x6ceca220, + 0x32a60: 0x6ceca420, 0x32a61: 0x6ceca620, 0x32a62: 0x6ceca820, 0x32a63: 0x6cecaa20, + 0x32a64: 0x6cecac20, 0x32a65: 0x6cecae20, 0x32a66: 0x6cecb020, 0x32a67: 0x6cecb220, + 0x32a68: 0x6cecb420, 0x32a69: 0x6cecb620, 0x32a6a: 0x6cecb820, 0x32a6b: 0x6cecba20, + 0x32a6c: 0x6cecbc20, 0x32a6d: 0x6cecbe20, 0x32a6e: 0x6cecc020, 0x32a6f: 0x6cecc220, + 0x32a70: 0x6cecc420, 0x32a71: 0x6cecc620, 0x32a72: 0x6cecc820, 0x32a73: 0x6cecca20, + 0x32a74: 0x6ceccc20, 0x32a75: 0x6cecce20, 0x32a76: 0x6cecd020, 0x32a77: 0x6cecd220, + 0x32a78: 0x6cecd420, 0x32a79: 0x6cecd620, 0x32a7a: 0x6cecd820, 0x32a7b: 0x6cecda20, + 0x32a7c: 0x6cecdc20, 0x32a7d: 0x6cecde20, 0x32a7e: 0x6cece020, 0x32a7f: 0x6cece220, + // Block 0xcaa, offset 0x32a80 + 0x32a80: 0x6cece420, 0x32a81: 0x6cece620, 0x32a82: 0x6cece820, 0x32a83: 0x6cecea20, + 0x32a84: 0x6cecec20, 0x32a85: 0x6cecee20, 0x32a86: 0x6cecf020, 0x32a87: 0x6cecf220, + 0x32a88: 0x6cecf420, 0x32a89: 0x6cecf620, 0x32a8a: 0x6cecf820, 0x32a8b: 0x6cecfa20, + 0x32a8c: 0x6cecfc20, 0x32a8d: 0x6cecfe20, 0x32a8e: 0x6ced0020, 0x32a8f: 0x6ced0220, + 0x32a90: 0x6ced0420, 0x32a91: 0x6ced0620, 0x32a92: 0x6ced0820, 0x32a93: 0x6ced0a20, + 0x32a94: 0x6d1bb620, 0x32a95: 0x6d1bb820, 0x32a96: 0x6d1bba20, 0x32a97: 0x6d1bbc20, + 0x32a98: 0x6d1bbe20, 0x32a99: 0x6d1bc020, 0x32a9a: 0x6d1bc220, 0x32a9b: 0x6d1bc420, + 0x32a9c: 0x6d1bc620, 0x32a9d: 0x6d1bc820, 0x32a9e: 0x6d1bca20, 0x32a9f: 0x6d1bcc20, + 0x32aa0: 0x6d1bce20, 0x32aa1: 0x6d1bd020, 0x32aa2: 0x6d1bd220, 0x32aa3: 0x6d1bd420, + 0x32aa4: 0x6d1bd620, 0x32aa5: 0x6d1bd820, 0x32aa6: 0x6d1bda20, 0x32aa7: 0x6d1bdc20, + 0x32aa8: 0x6d1bde20, 0x32aa9: 0x6d1be020, 0x32aaa: 0x6d1be220, 0x32aab: 0x6d1be420, + 0x32aac: 0x6d1be620, 0x32aad: 0x6d1be820, 0x32aae: 0x6d1bea20, 0x32aaf: 0x6d1bec20, + 0x32ab0: 0x6d1bee20, 0x32ab1: 0x6d1bf020, 0x32ab2: 0x6d1bf220, 0x32ab3: 0x6d1bf420, + 0x32ab4: 0x6d1bf620, 0x32ab5: 0x6d1bf820, 0x32ab6: 0x6d1bfa20, 0x32ab7: 0x6d1bfc20, + 0x32ab8: 0x6d1bfe20, 0x32ab9: 0x6d1c0020, 0x32aba: 0x6d1c0220, 0x32abb: 0x6d1c0420, + 0x32abc: 0x6d1c0620, 0x32abd: 0x6d1c0820, 0x32abe: 0x6d1c0a20, 0x32abf: 0x6d1c0c20, + // Block 0xcab, offset 0x32ac0 + 0x32ac0: 0x6d1c0e20, 0x32ac1: 0x6d1c1020, 0x32ac2: 0x6d1c1220, 0x32ac3: 0x6d1c1420, + 0x32ac4: 0x6d1c1620, 0x32ac5: 0x6d1c1820, 0x32ac6: 0x6d1c1a20, 0x32ac7: 0x6d1c1c20, + 0x32ac8: 0x6d1c1e20, 0x32ac9: 0x6d1c2020, 0x32aca: 0x6d1c2220, 0x32acb: 0x6d1c2420, + 0x32acc: 0x6d1c2620, 0x32acd: 0x6d1c2820, 0x32ace: 0x6d1c2a20, 0x32acf: 0x6d1c2c20, + 0x32ad0: 0x6d1c2e20, 0x32ad1: 0x6d1c3020, 0x32ad2: 0x6d1c3220, 0x32ad3: 0x6d1c3420, + 0x32ad4: 0x6d1c3620, 0x32ad5: 0x6d1c3820, 0x32ad6: 0x6d1c3a20, 0x32ad7: 0x6d1c3c20, + 0x32ad8: 0x6d1c3e20, 0x32ad9: 0x6d1c4020, 0x32ada: 0x6d1c4220, 0x32adb: 0x6d1c4420, + 0x32adc: 0x6d1c4620, 0x32add: 0x6d1c4820, 0x32ade: 0x6d1c4a20, 0x32adf: 0x6d1c4c20, + 0x32ae0: 0x6d1c4e20, 0x32ae1: 0x6d1c5020, 0x32ae2: 0x6d1c5220, 0x32ae3: 0x6d1c5420, + 0x32ae4: 0x6d1c5620, 0x32ae5: 0x6d1c5820, 0x32ae6: 0x6d1c5a20, 0x32ae7: 0x6d1c5c20, + 0x32ae8: 0x6d1c5e20, 0x32ae9: 0x6d1c6020, 0x32aea: 0x6d1c6220, 0x32aeb: 0x6d1c6420, + 0x32aec: 0x6d1c6620, 0x32aed: 0x6d1c6820, 0x32aee: 0x6d1c6a20, 0x32aef: 0x6d1c6c20, + 0x32af0: 0x6d1c6e20, 0x32af1: 0x6d1c7020, 0x32af2: 0x6d1c7220, 0x32af3: 0x6d1c7420, + 0x32af4: 0x6d1c7620, 0x32af5: 0x6d1c7820, 0x32af6: 0x6d1c7a20, 0x32af7: 0x6d1c7c20, + 0x32af8: 0x6d1c7e20, 0x32af9: 0x6d1c8020, 0x32afa: 0x6d1c8220, 0x32afb: 0x6d1c8420, + 0x32afc: 0x6d1c8620, 0x32afd: 0x6d1c8820, 0x32afe: 0x6d1c8a20, 0x32aff: 0x6d1c8c20, + // Block 0xcac, offset 0x32b00 + 0x32b00: 0x6d1c8e20, 0x32b01: 0x6d1c9020, 0x32b02: 0x6d1c9220, 0x32b03: 0x6d1c9420, + 0x32b04: 0x6d1c9620, 0x32b05: 0x6d1c9820, 0x32b06: 0x6d1c9a20, 0x32b07: 0x6d1c9c20, + 0x32b08: 0x6d1c9e20, 0x32b09: 0x6d1ca020, 0x32b0a: 0x6d1ca220, 0x32b0b: 0x6d1ca420, + 0x32b0c: 0x6d1ca620, 0x32b0d: 0x6d1ca820, 0x32b0e: 0x6d1caa20, 0x32b0f: 0x6d1cac20, + 0x32b10: 0x6d1cae20, 0x32b11: 0x6d1cb020, 0x32b12: 0x6d1cb220, 0x32b13: 0x6d1cb420, + 0x32b14: 0x6d1cb620, 0x32b15: 0x6d1cb820, 0x32b16: 0x6d1cba20, 0x32b17: 0x6d1cbc20, + 0x32b18: 0x6d1cbe20, 0x32b19: 0x6d1cc020, 0x32b1a: 0x6d1cc220, 0x32b1b: 0x6d1cc420, + 0x32b1c: 0x6d1cc620, 0x32b1d: 0x6d1cc820, 0x32b1e: 0x6d1cca20, 0x32b1f: 0x6d1ccc20, + 0x32b20: 0x6d1cce20, 0x32b21: 0x6d49d420, 0x32b22: 0x6d49d620, 0x32b23: 0x6d49d820, + 0x32b24: 0x6d49da20, 0x32b25: 0x6d49dc20, 0x32b26: 0x6d49de20, 0x32b27: 0x6d49e020, + 0x32b28: 0x6d49e220, 0x32b29: 0x6d49e420, 0x32b2a: 0x6d49e620, 0x32b2b: 0x6d49e820, + 0x32b2c: 0x6d49ea20, 0x32b2d: 0x6d49ec20, 0x32b2e: 0x6d49ee20, 0x32b2f: 0x6d49f020, + 0x32b30: 0x6d49f220, 0x32b31: 0x6d49f420, 0x32b32: 0x6d49f620, 0x32b33: 0x6d49f820, + 0x32b34: 0x6d49fa20, 0x32b35: 0x6d49fc20, 0x32b36: 0x6d49fe20, 0x32b37: 0x6d4a0020, + 0x32b38: 0x6d4a0220, 0x32b39: 0x6d4a0420, 0x32b3a: 0x6d4a0620, 0x32b3b: 0x6d4a0820, + 0x32b3c: 0x6d4a0a20, 0x32b3d: 0x6d4a0c20, 0x32b3e: 0x6d4a0e20, 0x32b3f: 0x6d4a1020, + // Block 0xcad, offset 0x32b40 + 0x32b40: 0x6d4a1220, 0x32b41: 0x6d4a1420, 0x32b42: 0x6d4a1620, 0x32b43: 0x6d4a1820, + 0x32b44: 0x6d4a1a20, 0x32b45: 0x6d4a1c20, 0x32b46: 0x6d4a1e20, 0x32b47: 0x6d4a2020, + 0x32b48: 0x6d4a2220, 0x32b49: 0x6d4a2420, 0x32b4a: 0x6d4a2620, 0x32b4b: 0x6d4a2820, + 0x32b4c: 0x6d4a2a20, 0x32b4d: 0x6d4a2c20, 0x32b4e: 0x6d4a2e20, 0x32b4f: 0x6d4a3020, + 0x32b50: 0x6d4a3220, 0x32b51: 0x6d4a3420, 0x32b52: 0x6d4a3620, 0x32b53: 0x6d4a3820, + 0x32b54: 0x6d4a3a20, 0x32b55: 0x6d4a3c20, 0x32b56: 0x6d4a3e20, 0x32b57: 0x6d4a4020, + 0x32b58: 0x6d4a4220, 0x32b59: 0x6d4a4420, 0x32b5a: 0x6d4a4620, 0x32b5b: 0x6d4a4820, + 0x32b5c: 0x6d4a4a20, 0x32b5d: 0x6d4a4c20, 0x32b5e: 0x6d4a4e20, 0x32b5f: 0x6d4a5020, + 0x32b60: 0x6d4a5220, 0x32b61: 0x6d4a5420, 0x32b62: 0x6d4a5620, 0x32b63: 0x6d4a5820, + 0x32b64: 0x6d4a5a20, 0x32b65: 0x6d4a5c20, 0x32b66: 0x6d4a5e20, 0x32b67: 0x6d311620, + 0x32b68: 0x6d4a6020, 0x32b69: 0x6d4a6220, 0x32b6a: 0x6d4a6420, 0x32b6b: 0x6d4a6620, + 0x32b6c: 0x6d4a6820, 0x32b6d: 0x6d4a6a20, 0x32b6e: 0x6d4a6c20, 0x32b6f: 0x6d4a6e20, + 0x32b70: 0x6d4a7020, 0x32b71: 0x6d4a7220, 0x32b72: 0x6d4a7420, 0x32b73: 0x6d4a7620, + 0x32b74: 0x6d4a7820, 0x32b75: 0x6d4a7a20, 0x32b76: 0x6d4a7c20, 0x32b77: 0x6d4a7e20, + 0x32b78: 0x6d4a8020, 0x32b79: 0x6d4a8220, 0x32b7a: 0x6d4a8420, 0x32b7b: 0x6d4a8620, + 0x32b7c: 0x6d4a8820, 0x32b7d: 0x6d4a8a20, 0x32b7e: 0x6d4a8c20, 0x32b7f: 0x6d4a8e20, + // Block 0xcae, offset 0x32b80 + 0x32b80: 0x6d4a9020, 0x32b81: 0x6d4a9220, 0x32b82: 0x6d4a9420, 0x32b83: 0x6d4a9620, + 0x32b84: 0x6d4a9820, 0x32b85: 0x6d4a9a20, 0x32b86: 0x6d4a9c20, 0x32b87: 0x6d775e20, + 0x32b88: 0x6d776020, 0x32b89: 0x6d776220, 0x32b8a: 0x6d776420, 0x32b8b: 0x6d776620, + 0x32b8c: 0x6d776820, 0x32b8d: 0x6d776a20, 0x32b8e: 0x6d776c20, 0x32b8f: 0x6d776e20, + 0x32b90: 0x6d777020, 0x32b91: 0x6d777220, 0x32b92: 0x6d777420, 0x32b93: 0x6d777620, + 0x32b94: 0x6d777820, 0x32b95: 0x6d777a20, 0x32b96: 0x6d777c20, 0x32b97: 0x6d777e20, + 0x32b98: 0x6d778020, 0x32b99: 0x6d778220, 0x32b9a: 0x6d778420, 0x32b9b: 0x6d778620, + 0x32b9c: 0x6d778820, 0x32b9d: 0x6d778a20, 0x32b9e: 0x6d778c20, 0x32b9f: 0x6d778e20, + 0x32ba0: 0x6d779020, 0x32ba1: 0x6d779220, 0x32ba2: 0x6d779420, 0x32ba3: 0x6d779620, + 0x32ba4: 0x6d779820, 0x32ba5: 0x6d779a20, 0x32ba6: 0x6d779c20, 0x32ba7: 0x6d779e20, + 0x32ba8: 0x6d77a020, 0x32ba9: 0x6d77a220, 0x32baa: 0x6d77a420, 0x32bab: 0x6d77a620, + 0x32bac: 0x6d77a820, 0x32bad: 0x6d77aa20, 0x32bae: 0x6d77ac20, 0x32baf: 0x6d77ae20, + 0x32bb0: 0x6d77b020, 0x32bb1: 0x6d77b220, 0x32bb2: 0x6d77b420, 0x32bb3: 0x6d77b620, + 0x32bb4: 0x6d77b820, 0x32bb5: 0x6d77ba20, 0x32bb6: 0x6d77bc20, 0x32bb7: 0x6d77be20, + 0x32bb8: 0x6d77c020, 0x32bb9: 0x6d77c220, 0x32bba: 0x6d77c420, 0x32bbb: 0x6d77c620, + 0x32bbc: 0x6d77c820, 0x32bbd: 0x6d77ca20, 0x32bbe: 0x6d77cc20, 0x32bbf: 0x6d77ce20, + // Block 0xcaf, offset 0x32bc0 + 0x32bc0: 0x6d77d020, 0x32bc1: 0x6d77d220, 0x32bc2: 0x6d77d420, 0x32bc3: 0x6d77d620, + 0x32bc4: 0x6d77d820, 0x32bc5: 0x6d77da20, 0x32bc6: 0x6d77dc20, 0x32bc7: 0x6d77de20, + 0x32bc8: 0x6d77e020, 0x32bc9: 0x6d77e220, 0x32bca: 0x6d77e420, 0x32bcb: 0x6d77e620, + 0x32bcc: 0x6d77e820, 0x32bcd: 0x6d77ea20, 0x32bce: 0x6d77ec20, 0x32bcf: 0x6d77ee20, + 0x32bd0: 0x6d77f020, 0x32bd1: 0x6d77f220, 0x32bd2: 0x6d77f420, 0x32bd3: 0x6d77f620, + 0x32bd4: 0x6d4a9e20, 0x32bd5: 0x6d77f820, 0x32bd6: 0x6d77fa20, 0x32bd7: 0x6d77fc20, + 0x32bd8: 0x6d77fe20, 0x32bd9: 0x6d780020, 0x32bda: 0x6d780220, 0x32bdb: 0x6d780420, + 0x32bdc: 0x6d780620, 0x32bdd: 0x6d780820, 0x32bde: 0x6d780a20, 0x32bdf: 0x6d780c20, + 0x32be0: 0x6d780e20, 0x32be1: 0x6d781020, 0x32be2: 0x6d781220, 0x32be3: 0x6d781420, + 0x32be4: 0x6d781620, 0x32be5: 0x6d781820, 0x32be6: 0x6d4aa020, 0x32be7: 0x6d781a20, + 0x32be8: 0x6d781c20, 0x32be9: 0x6d781e20, 0x32bea: 0x6d782020, 0x32beb: 0x6d782220, + 0x32bec: 0x6d782420, 0x32bed: 0x6d782620, 0x32bee: 0x6d782820, 0x32bef: 0x6d782a20, + 0x32bf0: 0x6d782c20, 0x32bf1: 0x6d782e20, 0x32bf2: 0x6d783020, 0x32bf3: 0x6d783220, + 0x32bf4: 0x6d783420, 0x32bf5: 0x6d783620, 0x32bf6: 0x6d783820, 0x32bf7: 0x6d783a20, + 0x32bf8: 0x6d783c20, 0x32bf9: 0x6d783e20, 0x32bfa: 0x6d784020, 0x32bfb: 0x6d784220, + 0x32bfc: 0x6d784420, 0x32bfd: 0x6da0d020, 0x32bfe: 0x6da0d220, 0x32bff: 0x6da0d420, + // Block 0xcb0, offset 0x32c00 + 0x32c00: 0x6da0d620, 0x32c01: 0x6da0d820, 0x32c02: 0x6da0da20, 0x32c03: 0x6da0dc20, + 0x32c04: 0x6da0de20, 0x32c05: 0x6da0e020, 0x32c06: 0x6da0e220, 0x32c07: 0x6da0e420, + 0x32c08: 0x6da0e620, 0x32c09: 0x6da0e820, 0x32c0a: 0x6da0ea20, 0x32c0b: 0x6da0ec20, + 0x32c0c: 0x6da0ee20, 0x32c0d: 0x6da0f020, 0x32c0e: 0x6da0f220, 0x32c0f: 0x6da0f420, + 0x32c10: 0x6da0f620, 0x32c11: 0x6da0f820, 0x32c12: 0x6da0fa20, 0x32c13: 0x6da0fc20, + 0x32c14: 0x6da0fe20, 0x32c15: 0x6da10020, 0x32c16: 0x6da10220, 0x32c17: 0x6da10420, + 0x32c18: 0x6da10620, 0x32c19: 0x6da10820, 0x32c1a: 0x6da10a20, 0x32c1b: 0x6da10c20, + 0x32c1c: 0x6da10e20, 0x32c1d: 0x6da11020, 0x32c1e: 0x6da11220, 0x32c1f: 0x6da11420, + 0x32c20: 0x6da11620, 0x32c21: 0x6da11820, 0x32c22: 0x6da11a20, 0x32c23: 0x6da11c20, + 0x32c24: 0x6da11e20, 0x32c25: 0x6da12020, 0x32c26: 0x6da12220, 0x32c27: 0x6da12420, + 0x32c28: 0x6da12620, 0x32c29: 0x6da12820, 0x32c2a: 0x6da12a20, 0x32c2b: 0x6da12c20, + 0x32c2c: 0x6da12e20, 0x32c2d: 0x6da13020, 0x32c2e: 0x6da13220, 0x32c2f: 0x6da13420, + 0x32c30: 0x6da13620, 0x32c31: 0x6da13820, 0x32c32: 0x6da13a20, 0x32c33: 0x6da13c20, + 0x32c34: 0x6da13e20, 0x32c35: 0x6da14020, 0x32c36: 0x6da14220, 0x32c37: 0x6da14420, + 0x32c38: 0x6da14620, 0x32c39: 0x6da14820, 0x32c3a: 0x6da14a20, 0x32c3b: 0x6da14c20, + 0x32c3c: 0x6da14e20, 0x32c3d: 0x6da15020, 0x32c3e: 0x6da15220, 0x32c3f: 0x6da15420, + // Block 0xcb1, offset 0x32c40 + 0x32c40: 0x6da15620, 0x32c41: 0x6da15820, 0x32c42: 0x6da15a20, 0x32c43: 0x6da15c20, + 0x32c44: 0x6da15e20, 0x32c45: 0x6da16020, 0x32c46: 0x6da16220, 0x32c47: 0x6da16420, + 0x32c48: 0x6da16620, 0x32c49: 0x6da16820, 0x32c4a: 0x6da16a20, 0x32c4b: 0x6da16c20, + 0x32c4c: 0x6da16e20, 0x32c4d: 0x6da17020, 0x32c4e: 0x6da17220, 0x32c4f: 0x6dc32a20, + 0x32c50: 0x6dc32c20, 0x32c51: 0x6dc32e20, 0x32c52: 0x6dc33020, 0x32c53: 0x6dc33220, + 0x32c54: 0x6dc33420, 0x32c55: 0x6dc33620, 0x32c56: 0x6dc33820, 0x32c57: 0x6dc33a20, + 0x32c58: 0x6dc33c20, 0x32c59: 0x6dc33e20, 0x32c5a: 0x6dc34020, 0x32c5b: 0x6dc34220, + 0x32c5c: 0x6dc34420, 0x32c5d: 0x6dc34620, 0x32c5e: 0x6dc34820, 0x32c5f: 0x6dc34a20, + 0x32c60: 0x6dc34c20, 0x32c61: 0x6dc34e20, 0x32c62: 0x6dc35020, 0x32c63: 0x6dc35220, + 0x32c64: 0x6dc35420, 0x32c65: 0x6dc35620, 0x32c66: 0x6dc35820, 0x32c67: 0x6dc35a20, + 0x32c68: 0x6dc35c20, 0x32c69: 0x6dc35e20, 0x32c6a: 0x6dc36020, 0x32c6b: 0x6dc36220, + 0x32c6c: 0x6dc36420, 0x32c6d: 0x6dc36620, 0x32c6e: 0x6dc36820, 0x32c6f: 0x6dc36a20, + 0x32c70: 0x6dc36c20, 0x32c71: 0x6dc36e20, 0x32c72: 0x6dc37020, 0x32c73: 0x6dc37220, + 0x32c74: 0x6dc37420, 0x32c75: 0x6dc37620, 0x32c76: 0x6dc37820, 0x32c77: 0x6dc37a20, + 0x32c78: 0x6dc37c20, 0x32c79: 0x6dc37e20, 0x32c7a: 0x6dc38020, 0x32c7b: 0x6dc38220, + 0x32c7c: 0x6dc38420, 0x32c7d: 0x6dc38620, 0x32c7e: 0x6dc38820, 0x32c7f: 0x6dc38a20, + // Block 0xcb2, offset 0x32c80 + 0x32c80: 0x6dc38c20, 0x32c81: 0x6dc38e20, 0x32c82: 0x6dc39020, 0x32c83: 0x6dc39220, + 0x32c84: 0x6dc39420, 0x32c85: 0x6dc39620, 0x32c86: 0x6dc39820, 0x32c87: 0x6dc39a20, + 0x32c88: 0x6dc39c20, 0x32c89: 0x6dc39e20, 0x32c8a: 0x6dc3a020, 0x32c8b: 0x6dc3a220, + 0x32c8c: 0x6dc3a420, 0x32c8d: 0x6dc3a620, 0x32c8e: 0x6dc3a820, 0x32c8f: 0x6dc3aa20, + 0x32c90: 0x6dc3ac20, 0x32c91: 0x6dc3ae20, 0x32c92: 0x6dc3b020, 0x32c93: 0x6dc3b220, + 0x32c94: 0x6dc3b420, 0x32c95: 0x6dc3b620, 0x32c96: 0x6dc3b820, 0x32c97: 0x6dc3ba20, + 0x32c98: 0x6dc3bc20, 0x32c99: 0x6dc3be20, 0x32c9a: 0x6dc3c020, 0x32c9b: 0x6dc3c220, + 0x32c9c: 0x6dc3c420, 0x32c9d: 0x6dc3c620, 0x32c9e: 0x6dc3c820, 0x32c9f: 0x6dc3ca20, + 0x32ca0: 0x6de09a20, 0x32ca1: 0x6de09c20, 0x32ca2: 0x6de09e20, 0x32ca3: 0x6de0a020, + 0x32ca4: 0x6de0a220, 0x32ca5: 0x6de0a420, 0x32ca6: 0x6de0a620, 0x32ca7: 0x6de0a820, + 0x32ca8: 0x6de0aa20, 0x32ca9: 0x6de0ac20, 0x32caa: 0x6de0ae20, 0x32cab: 0x6de0b020, + 0x32cac: 0x6de0b220, 0x32cad: 0x6de0b420, 0x32cae: 0x6de0b620, 0x32caf: 0x6de0b820, + 0x32cb0: 0x6dc3cc20, 0x32cb1: 0x6de0ba20, 0x32cb2: 0x6de0bc20, 0x32cb3: 0x6de0be20, + 0x32cb4: 0x6de0c020, 0x32cb5: 0x6de0c220, 0x32cb6: 0x6de0c420, 0x32cb7: 0x6de0c620, + 0x32cb8: 0x6de0c820, 0x32cb9: 0x6de0ca20, 0x32cba: 0x6de0cc20, 0x32cbb: 0x6de0ce20, + 0x32cbc: 0x6de0d020, 0x32cbd: 0x6de0d220, 0x32cbe: 0x6de0d420, 0x32cbf: 0x6de0d620, + // Block 0xcb3, offset 0x32cc0 + 0x32cc0: 0x6de0d820, 0x32cc1: 0x6de0da20, 0x32cc2: 0x6de0dc20, 0x32cc3: 0x6de0de20, + 0x32cc4: 0x6de0e020, 0x32cc5: 0x6de0e220, 0x32cc6: 0x6de0e420, 0x32cc7: 0x6de0e620, + 0x32cc8: 0x6de0e820, 0x32cc9: 0x6de5dc20, 0x32cca: 0x6de0ea20, 0x32ccb: 0x6de0ec20, + 0x32ccc: 0x6de0ee20, 0x32ccd: 0x6de0f020, 0x32cce: 0x6de0f220, 0x32ccf: 0x6de0f420, + 0x32cd0: 0x6de0f620, 0x32cd1: 0x6df8e220, 0x32cd2: 0x6df8e420, 0x32cd3: 0x6df8e620, + 0x32cd4: 0x6df8e820, 0x32cd5: 0x6df8ea20, 0x32cd6: 0x6df8ec20, 0x32cd7: 0x6df8ee20, + 0x32cd8: 0x6df8f020, 0x32cd9: 0x6df8f220, 0x32cda: 0x6df8f420, 0x32cdb: 0x6df8f620, + 0x32cdc: 0x6df8f820, 0x32cdd: 0x6df8fa20, 0x32cde: 0x6df8fc20, 0x32cdf: 0x6df8fe20, + 0x32ce0: 0x6df90020, 0x32ce1: 0x6df90220, 0x32ce2: 0x6df90420, 0x32ce3: 0x6df90620, + 0x32ce4: 0x6df90820, 0x32ce5: 0x6df90a20, 0x32ce6: 0x6df90c20, 0x32ce7: 0x6df90e20, + 0x32ce8: 0x6df91020, 0x32ce9: 0x6df91220, 0x32cea: 0x6df91420, 0x32ceb: 0x6df91620, + 0x32cec: 0x6df91820, 0x32ced: 0x6df91a20, 0x32cee: 0x6df91c20, 0x32cef: 0x6df91e20, + 0x32cf0: 0x6df92020, 0x32cf1: 0x6e0cac20, 0x32cf2: 0x6e0cae20, 0x32cf3: 0x6e0cb020, + 0x32cf4: 0x6e0cb220, 0x32cf5: 0x6e0cb420, 0x32cf6: 0x6e0cb620, 0x32cf7: 0x6e0cb820, + 0x32cf8: 0x6e0cba20, 0x32cf9: 0x6e0cbc20, 0x32cfa: 0x6e0cbe20, 0x32cfb: 0x6e0cc020, + 0x32cfc: 0x6e0cc220, 0x32cfd: 0x6e0cc420, 0x32cfe: 0x6e0cc620, 0x32cff: 0x6e0cc820, + // Block 0xcb4, offset 0x32d00 + 0x32d00: 0x6e0cca20, 0x32d01: 0x6e0ccc20, 0x32d02: 0x6e0cce20, 0x32d03: 0x6e0cd020, + 0x32d04: 0x6e0cd220, 0x32d05: 0x6e0cd420, 0x32d06: 0x6e0cd620, 0x32d07: 0x6e0cd820, + 0x32d08: 0x6e0cda20, 0x32d09: 0x6e0cdc20, 0x32d0a: 0x6e0cde20, 0x32d0b: 0x6e0ce020, + 0x32d0c: 0x6e0ce220, 0x32d0d: 0x6e0ce420, 0x32d0e: 0x6e0ce620, 0x32d0f: 0x6e0ce820, + 0x32d10: 0x6e0cea20, 0x32d11: 0x6e0cec20, 0x32d12: 0x6e0cee20, 0x32d13: 0x6e0cf020, + 0x32d14: 0x6e0cf220, 0x32d15: 0x6e0d1c20, 0x32d16: 0x6e121420, 0x32d17: 0x6e1c4020, + 0x32d18: 0x6e1c4220, 0x32d19: 0x6e1c4420, 0x32d1a: 0x6e1c4620, 0x32d1b: 0x6e1c4820, + 0x32d1c: 0x6e1c4a20, 0x32d1d: 0x6e1c4c20, 0x32d1e: 0x6e1c4e20, 0x32d1f: 0x6e1c5020, + 0x32d20: 0x6e1c5220, 0x32d21: 0x6e1c5420, 0x32d22: 0x6e1c5620, 0x32d23: 0x6e0cf420, + 0x32d24: 0x6e1c5820, 0x32d25: 0x6e1c5a20, 0x32d26: 0x6e1c5c20, 0x32d27: 0x6e1c5e20, + 0x32d28: 0x6e1c6020, 0x32d29: 0x6e1c6220, 0x32d2a: 0x6e1c6420, 0x32d2b: 0x6e1c6620, + 0x32d2c: 0x6e1c6820, 0x32d2d: 0x6e1c6a20, 0x32d2e: 0x6e1c6c20, 0x32d2f: 0x6e1c6e20, + 0x32d30: 0x6e287c20, 0x32d31: 0x6e287e20, 0x32d32: 0x6e288020, 0x32d33: 0x6e288220, + 0x32d34: 0x6e288420, 0x32d35: 0x6e288620, 0x32d36: 0x6e288820, 0x32d37: 0x6e288a20, + 0x32d38: 0x6e288c20, 0x32d39: 0x6e31a420, 0x32d3a: 0x6e31a620, 0x32d3b: 0x6e31a820, + 0x32d3c: 0x6e31aa20, 0x32d3d: 0x6e31ac20, 0x32d3e: 0x6e31ae20, 0x32d3f: 0x6e31b020, + // Block 0xcb5, offset 0x32d40 + 0x32d40: 0x6e31b220, 0x32d41: 0x6e31b420, 0x32d42: 0x6e31b620, 0x32d43: 0x6e31b820, + 0x32d44: 0x6e31ba20, 0x32d45: 0x6e31bc20, 0x32d46: 0x6e384c20, 0x32d47: 0x6e384e20, + 0x32d48: 0x6e385020, 0x32d49: 0x6e385220, 0x32d4a: 0x6e385420, 0x32d4b: 0x6e385620, + 0x32d4c: 0x6e385820, 0x32d4d: 0x6e385a20, 0x32d4e: 0x6e385c20, 0x32d4f: 0x6e3cfa20, + 0x32d50: 0x6e3cfc20, 0x32d51: 0x6e3cfe20, 0x32d52: 0x6e3d0020, 0x32d53: 0x6e3d0220, + 0x32d54: 0x6e3d0420, 0x32d55: 0x6e3d0620, 0x32d56: 0x6e3d0820, 0x32d57: 0x6e3d0a20, + 0x32d58: 0x6e3d0c20, 0x32d59: 0x6e400a20, 0x32d5a: 0x6e400c20, 0x32d5b: 0x6e428620, + 0x32d5c: 0x6e428820, 0x32d5d: 0x6e428a20, 0x32d5e: 0x6e400e20, 0x32d5f: 0x6e45bc20, + 0x32d60: 0x6c03c820, 0x32d61: 0x6c03ca20, 0x32d62: 0x6c03cc20, 0x32d63: 0x6c079820, + 0x32d64: 0x6c079a20, 0x32d65: 0x6c079c20, 0x32d66: 0x6c079e20, 0x32d67: 0x6c0ea620, + 0x32d68: 0x6c0ea820, 0x32d69: 0x6c0eaa20, 0x32d6a: 0x6c0eac20, 0x32d6b: 0x6c0eae20, + 0x32d6c: 0x6c0eb020, 0x32d6d: 0x6c0eb220, 0x32d6e: 0x6c0eb420, 0x32d6f: 0x6c0eb620, + 0x32d70: 0x6c0eb820, 0x32d71: 0x6c0eba20, 0x32d72: 0x6c0ebc20, 0x32d73: 0x6c0ebe20, + 0x32d74: 0x6c1a6e20, 0x32d75: 0x6c1a7020, 0x32d76: 0x6c1a7220, 0x32d77: 0x6c1a7420, + 0x32d78: 0x6c1a7620, 0x32d79: 0x6c1a7820, 0x32d7a: 0x6c1a7a20, 0x32d7b: 0x6c1a7c20, + 0x32d7c: 0x6c1a7e20, 0x32d7d: 0x6c1a8020, 0x32d7e: 0x6c1a8220, 0x32d7f: 0x6c1a8420, + // Block 0xcb6, offset 0x32d80 + 0x32d80: 0x6c1a8620, 0x32d81: 0x6c1a8820, 0x32d82: 0x6c1a8a20, 0x32d83: 0x6c1a8c20, + 0x32d84: 0x6c1a8e20, 0x32d85: 0x6c1a9020, 0x32d86: 0x6c1a9220, 0x32d87: 0x6c1a9420, + 0x32d88: 0x6c2d9620, 0x32d89: 0x6c2d9820, 0x32d8a: 0x6c2d9a20, 0x32d8b: 0x6c2d9c20, + 0x32d8c: 0x6c2d9e20, 0x32d8d: 0x6c3bf620, 0x32d8e: 0x6c2da020, 0x32d8f: 0x6c2da220, + 0x32d90: 0x6c2da420, 0x32d91: 0x6c2da620, 0x32d92: 0x6c47e220, 0x32d93: 0x6c47e420, + 0x32d94: 0x6c47e620, 0x32d95: 0x6c47e820, 0x32d96: 0x6c47ea20, 0x32d97: 0x6c47ec20, + 0x32d98: 0x6c47ee20, 0x32d99: 0x6c47f020, 0x32d9a: 0x6c47f220, 0x32d9b: 0x6c47f420, + 0x32d9c: 0x6c47f620, 0x32d9d: 0x6c47f820, 0x32d9e: 0x6c47fa20, 0x32d9f: 0x6c47fc20, + 0x32da0: 0x6c695c20, 0x32da1: 0x6c695e20, 0x32da2: 0x6c696020, 0x32da3: 0x6c696220, + 0x32da4: 0x6c696420, 0x32da5: 0x6c696620, 0x32da6: 0x6c696820, 0x32da7: 0x6c696a20, + 0x32da8: 0x6c696c20, 0x32da9: 0x6c696e20, 0x32daa: 0x6c697020, 0x32dab: 0x6c697220, + 0x32dac: 0x6c697420, 0x32dad: 0x6c697620, 0x32dae: 0x6c697820, 0x32daf: 0x6c697a20, + 0x32db0: 0x6c902820, 0x32db1: 0x6c902a20, 0x32db2: 0x6c902c20, 0x32db3: 0x6c902e20, + 0x32db4: 0x6c903020, 0x32db5: 0x6c903220, 0x32db6: 0x6c903420, 0x32db7: 0x6c903620, + 0x32db8: 0x6c903820, 0x32db9: 0x6c903a20, 0x32dba: 0x6c903c20, 0x32dbb: 0x6c903e20, + 0x32dbc: 0x6cbc4820, 0x32dbd: 0x6cbc4a20, 0x32dbe: 0x6cbc4c20, 0x32dbf: 0x6cbc4e20, + // Block 0xcb7, offset 0x32dc0 + 0x32dc0: 0x6c904020, 0x32dc1: 0x6cbc5020, 0x32dc2: 0x6cbc5220, 0x32dc3: 0x6cbc5420, + 0x32dc4: 0x6cbc5620, 0x32dc5: 0x6cbc5820, 0x32dc6: 0x6cbc5a20, 0x32dc7: 0x6cbc5c20, + 0x32dc8: 0x6cbc5e20, 0x32dc9: 0x6cbc6020, 0x32dca: 0x6ced3220, 0x32dcb: 0x6ced3420, + 0x32dcc: 0x6ced3620, 0x32dcd: 0x6ced3820, 0x32dce: 0x6ced3a20, 0x32dcf: 0x6ced3c20, + 0x32dd0: 0x6ced3e20, 0x32dd1: 0x6ced4020, 0x32dd2: 0x6ced4220, 0x32dd3: 0x6ced4420, + 0x32dd4: 0x6ced4620, 0x32dd5: 0x6d1cfa20, 0x32dd6: 0x6d1cfc20, 0x32dd7: 0x6d1cfe20, + 0x32dd8: 0x6d1d0020, 0x32dd9: 0x6d1d0220, 0x32dda: 0x6d1d0420, 0x32ddb: 0x6d1d0620, + 0x32ddc: 0x6d1d0820, 0x32ddd: 0x6d1d0a20, 0x32dde: 0x6d1d0c20, 0x32ddf: 0x6d1d0e20, + 0x32de0: 0x6d1d1020, 0x32de1: 0x6d1d1220, 0x32de2: 0x6d4ab820, 0x32de3: 0x6d4aba20, + 0x32de4: 0x6d4abc20, 0x32de5: 0x6d785c20, 0x32de6: 0x6d4abe20, 0x32de7: 0x6d4ac020, + 0x32de8: 0x6d4ac220, 0x32de9: 0x6d4ac420, 0x32dea: 0x6d785e20, 0x32deb: 0x6d786020, + 0x32dec: 0x6d786220, 0x32ded: 0x6da17e20, 0x32dee: 0x6da18020, 0x32def: 0x6da18220, + 0x32df0: 0x6da18420, 0x32df1: 0x6da18620, 0x32df2: 0x6dc3de20, 0x32df3: 0x6de0fe20, + 0x32df4: 0x6de10020, 0x32df5: 0x6df92c20, 0x32df6: 0x6df92e20, 0x32df7: 0x6df93020, + 0x32df8: 0x6e0cf620, 0x32df9: 0x6e0cf820, 0x32dfa: 0x6e0cfa20, 0x32dfb: 0x6e3d1020, + 0x32dfc: 0x6c03d420, 0x32dfd: 0x6c03d620, 0x32dfe: 0x6c03d820, 0x32dff: 0x6c07ae20, + // Block 0xcb8, offset 0x32e00 + 0x32e00: 0x6c07b020, 0x32e01: 0x6c07b220, 0x32e02: 0x6c07b420, 0x32e03: 0x6c07b620, + 0x32e04: 0x6c07b820, 0x32e05: 0x6c07ba20, 0x32e06: 0x6c07bc20, 0x32e07: 0x6c07be20, + 0x32e08: 0x6c0ee620, 0x32e09: 0x6c0ee820, 0x32e0a: 0x6c0eea20, 0x32e0b: 0x6c0eec20, + 0x32e0c: 0x6c0eee20, 0x32e0d: 0x6c0ef020, 0x32e0e: 0x6c0ef220, 0x32e0f: 0x6c0ef420, + 0x32e10: 0x6c0ef620, 0x32e11: 0x6c0ef820, 0x32e12: 0x6c0efa20, 0x32e13: 0x6c0efc20, + 0x32e14: 0x6c0efe20, 0x32e15: 0x6c0f0020, 0x32e16: 0x6c0f0220, 0x32e17: 0x6c0fb020, + 0x32e18: 0x6c1af820, 0x32e19: 0x6c1afa20, 0x32e1a: 0x6c1afc20, 0x32e1b: 0x6c1afe20, + 0x32e1c: 0x6c1b0020, 0x32e1d: 0x6c1b0220, 0x32e1e: 0x6c1b0420, 0x32e1f: 0x6c1b0620, + 0x32e20: 0x6c1b0820, 0x32e21: 0x6c1b0a20, 0x32e22: 0x6c1b0c20, 0x32e23: 0x6c1b0e20, + 0x32e24: 0x6c1b1020, 0x32e25: 0x6c1b1220, 0x32e26: 0x6c1b1420, 0x32e27: 0x6c1b1620, + 0x32e28: 0x6c1b1820, 0x32e29: 0x6c1b1a20, 0x32e2a: 0x6c1b1c20, 0x32e2b: 0x6c1b1e20, + 0x32e2c: 0x6c1b2020, 0x32e2d: 0x6c1b2220, 0x32e2e: 0x6c1b2420, 0x32e2f: 0x6c1b2620, + 0x32e30: 0x6c1b2820, 0x32e31: 0x6c1b2a20, 0x32e32: 0x6c1b2c20, 0x32e33: 0x6c1b2e20, + 0x32e34: 0x6c1b3020, 0x32e35: 0x6c1b3220, 0x32e36: 0x6c1b3420, 0x32e37: 0x6c1b3620, + 0x32e38: 0x6c1b3820, 0x32e39: 0x6c1b3a20, 0x32e3a: 0x6c1b3c20, 0x32e3b: 0x6c1b3e20, + 0x32e3c: 0x6c1b4020, 0x32e3d: 0x6c1b4220, 0x32e3e: 0x6c1b4420, 0x32e3f: 0x6c1b4620, + // Block 0xcb9, offset 0x32e40 + 0x32e40: 0x6c1b4820, 0x32e41: 0x6c1b4a20, 0x32e42: 0x6c1b4c20, 0x32e43: 0x6c1b4e20, + 0x32e44: 0x6c2e0820, 0x32e45: 0x6c2e0a20, 0x32e46: 0x6c2e0c20, 0x32e47: 0x6c2e0e20, + 0x32e48: 0x6c2e1020, 0x32e49: 0x6c2e1220, 0x32e4a: 0x6c2e1420, 0x32e4b: 0x6c2e1620, + 0x32e4c: 0x6c2e1820, 0x32e4d: 0x6c2e1a20, 0x32e4e: 0x6c2e1c20, 0x32e4f: 0x6c2e1e20, + 0x32e50: 0x6c2e2020, 0x32e51: 0x6c2e2220, 0x32e52: 0x6c2e2420, 0x32e53: 0x6c2e2620, + 0x32e54: 0x6c2e2820, 0x32e55: 0x6c2e2a20, 0x32e56: 0x6c2e2c20, 0x32e57: 0x6c2e2e20, + 0x32e58: 0x6c2e3020, 0x32e59: 0x6c2e3220, 0x32e5a: 0x6c2e3420, 0x32e5b: 0x6c2e3620, + 0x32e5c: 0x6c2e3820, 0x32e5d: 0x6c2e3a20, 0x32e5e: 0x6c2e3c20, 0x32e5f: 0x6c2e3e20, + 0x32e60: 0x6c2e4020, 0x32e61: 0x6c2e4220, 0x32e62: 0x6c2e4420, 0x32e63: 0x6c2e4620, + 0x32e64: 0x6c2e4820, 0x32e65: 0x6c2e4a20, 0x32e66: 0x6c2e4c20, 0x32e67: 0x6c2e4e20, + 0x32e68: 0x6c2e5020, 0x32e69: 0x6c2e5220, 0x32e6a: 0x6c2e5420, 0x32e6b: 0x6c2e5620, + 0x32e6c: 0x6c2e5820, 0x32e6d: 0x6c2e5a20, 0x32e6e: 0x6c2e5c20, 0x32e6f: 0x6c2e5e20, + 0x32e70: 0x6c2e6020, 0x32e71: 0x6c2e6220, 0x32e72: 0x6c2e6420, 0x32e73: 0x6c2e6620, + 0x32e74: 0x6c2e6820, 0x32e75: 0x6c2e6a20, 0x32e76: 0x6c2e6c20, 0x32e77: 0x6c486a20, + 0x32e78: 0x6c486c20, 0x32e79: 0x6c486e20, 0x32e7a: 0x6c487020, 0x32e7b: 0x6c487220, + 0x32e7c: 0x6c487420, 0x32e7d: 0x6c487620, 0x32e7e: 0x6c487820, 0x32e7f: 0x6c487a20, + // Block 0xcba, offset 0x32e80 + 0x32e80: 0x6c487c20, 0x32e81: 0x6c487e20, 0x32e82: 0x6c488020, 0x32e83: 0x6c488220, + 0x32e84: 0x6c488420, 0x32e85: 0x6c488620, 0x32e86: 0x6c488820, 0x32e87: 0x6c488a20, + 0x32e88: 0x6c488c20, 0x32e89: 0x6c488e20, 0x32e8a: 0x6c489020, 0x32e8b: 0x6c489220, + 0x32e8c: 0x6c489420, 0x32e8d: 0x6c489620, 0x32e8e: 0x6c489820, 0x32e8f: 0x6c489a20, + 0x32e90: 0x6c489c20, 0x32e91: 0x6c489e20, 0x32e92: 0x6c48a020, 0x32e93: 0x6c48a220, + 0x32e94: 0x6c48a420, 0x32e95: 0x6c48a620, 0x32e96: 0x6c48a820, 0x32e97: 0x6c48aa20, + 0x32e98: 0x6c48ac20, 0x32e99: 0x6c48ae20, 0x32e9a: 0x6c48b020, 0x32e9b: 0x6c48b220, + 0x32e9c: 0x6c5dc620, 0x32e9d: 0x6c48b420, 0x32e9e: 0x6c48b620, 0x32e9f: 0x6c48b820, + 0x32ea0: 0x6c48ba20, 0x32ea1: 0x6c48bc20, 0x32ea2: 0x6c48be20, 0x32ea3: 0x6c48c020, + 0x32ea4: 0x6c48c220, 0x32ea5: 0x6c48c420, 0x32ea6: 0x6c48c620, 0x32ea7: 0x6c48c820, + 0x32ea8: 0x6c48ca20, 0x32ea9: 0x6c48cc20, 0x32eaa: 0x6c48ce20, 0x32eab: 0x6c48d020, + 0x32eac: 0x6c48d220, 0x32ead: 0x6c69da20, 0x32eae: 0x6c69dc20, 0x32eaf: 0x6c69de20, + 0x32eb0: 0x6c69e020, 0x32eb1: 0x6c69e220, 0x32eb2: 0x6c69e420, 0x32eb3: 0x6c69e620, + 0x32eb4: 0x6c69e820, 0x32eb5: 0x6c69ea20, 0x32eb6: 0x6c69ec20, 0x32eb7: 0x6c69ee20, + 0x32eb8: 0x6c69f020, 0x32eb9: 0x6c69f220, 0x32eba: 0x6c69f420, 0x32ebb: 0x6c69f620, + 0x32ebc: 0x6c69f820, 0x32ebd: 0x6c69fa20, 0x32ebe: 0x6c69fc20, 0x32ebf: 0x6c69fe20, + // Block 0xcbb, offset 0x32ec0 + 0x32ec0: 0x6c6a0020, 0x32ec1: 0x6c6a0220, 0x32ec2: 0x6c6a0420, 0x32ec3: 0x6c6a0620, + 0x32ec4: 0x6c6a0820, 0x32ec5: 0x6c6a0a20, 0x32ec6: 0x6c6a0c20, 0x32ec7: 0x6c6a0e20, + 0x32ec8: 0x6c6a1020, 0x32ec9: 0x6c6a1220, 0x32eca: 0x6c6a1420, 0x32ecb: 0x6c6a1620, + 0x32ecc: 0x6c6a1820, 0x32ecd: 0x6c6a1a20, 0x32ece: 0x6c6a1c20, 0x32ecf: 0x6c6a1e20, + 0x32ed0: 0x6c6a2020, 0x32ed1: 0x6c6a2220, 0x32ed2: 0x6c6a2420, 0x32ed3: 0x6c6a2620, + 0x32ed4: 0x6c6a2820, 0x32ed5: 0x6c6a2a20, 0x32ed6: 0x6c6a2c20, 0x32ed7: 0x6c6a2e20, + 0x32ed8: 0x6c6a3020, 0x32ed9: 0x6c6a3220, 0x32eda: 0x6c6a3420, 0x32edb: 0x6c6a3620, + 0x32edc: 0x6c6a3820, 0x32edd: 0x6c6a3a20, 0x32ede: 0x6c6a3c20, 0x32edf: 0x6c6a3e20, + 0x32ee0: 0x6c6a4020, 0x32ee1: 0x6c6a4220, 0x32ee2: 0x6c6a4420, 0x32ee3: 0x6c6a4620, + 0x32ee4: 0x6c6a4820, 0x32ee5: 0x6c6a4a20, 0x32ee6: 0x6c90c620, 0x32ee7: 0x6c90c820, + 0x32ee8: 0x6c90ca20, 0x32ee9: 0x6c90cc20, 0x32eea: 0x6c90ce20, 0x32eeb: 0x6c90d020, + 0x32eec: 0x6c90d220, 0x32eed: 0x6c90d420, 0x32eee: 0x6c90d620, 0x32eef: 0x6c90d820, + 0x32ef0: 0x6c90da20, 0x32ef1: 0x6c90dc20, 0x32ef2: 0x6c90de20, 0x32ef3: 0x6c90e020, + 0x32ef4: 0x6c90e220, 0x32ef5: 0x6c90e420, 0x32ef6: 0x6c90e620, 0x32ef7: 0x6c90e820, + 0x32ef8: 0x6c90ea20, 0x32ef9: 0x6c90ec20, 0x32efa: 0x6c90ee20, 0x32efb: 0x6c90f020, + 0x32efc: 0x6c90f220, 0x32efd: 0x6c90f420, 0x32efe: 0x6c90f620, 0x32eff: 0x6c90f820, + // Block 0xcbc, offset 0x32f00 + 0x32f00: 0x6c90fa20, 0x32f01: 0x6c90fc20, 0x32f02: 0x6c90fe20, 0x32f03: 0x6c910020, + 0x32f04: 0x6c910220, 0x32f05: 0x6c910420, 0x32f06: 0x6c910620, 0x32f07: 0x6c910820, + 0x32f08: 0x6c910a20, 0x32f09: 0x6c910c20, 0x32f0a: 0x6c910e20, 0x32f0b: 0x6c911020, + 0x32f0c: 0x6c911220, 0x32f0d: 0x6c911420, 0x32f0e: 0x6c911620, 0x32f0f: 0x6c911820, + 0x32f10: 0x6c911a20, 0x32f11: 0x6c911c20, 0x32f12: 0x6c911e20, 0x32f13: 0x6c912020, + 0x32f14: 0x6c912220, 0x32f15: 0x6c912420, 0x32f16: 0x6c912620, 0x32f17: 0x6c912820, + 0x32f18: 0x6c912a20, 0x32f19: 0x6c912c20, 0x32f1a: 0x6c912e20, 0x32f1b: 0x6c913020, + 0x32f1c: 0x6c913220, 0x32f1d: 0x6c913420, 0x32f1e: 0x6c913620, 0x32f1f: 0x6c913820, + 0x32f20: 0x6c913a20, 0x32f21: 0x6c913c20, 0x32f22: 0x6c913e20, 0x32f23: 0x6c914020, + 0x32f24: 0x6cbcd820, 0x32f25: 0x6cbcda20, 0x32f26: 0x6cbcdc20, 0x32f27: 0x6cbcde20, + 0x32f28: 0x6cbce020, 0x32f29: 0x6cbce220, 0x32f2a: 0x6cbce420, 0x32f2b: 0x6cbce620, + 0x32f2c: 0x6cbce820, 0x32f2d: 0x6cbcea20, 0x32f2e: 0x6cbcec20, 0x32f2f: 0x6cbcee20, + 0x32f30: 0x6cbcf020, 0x32f31: 0x6cbcf220, 0x32f32: 0x6cbcf420, 0x32f33: 0x6cbcf620, + 0x32f34: 0x6cbcf820, 0x32f35: 0x6cbcfa20, 0x32f36: 0x6cbcfc20, 0x32f37: 0x6cbcfe20, + 0x32f38: 0x6cbd0020, 0x32f39: 0x6cbd0220, 0x32f3a: 0x6cbd0420, 0x32f3b: 0x6cbd0620, + 0x32f3c: 0x6cbd0820, 0x32f3d: 0x6cbd0a20, 0x32f3e: 0x6cbd0c20, 0x32f3f: 0x6cbd0e20, + // Block 0xcbd, offset 0x32f40 + 0x32f40: 0x6cbd1020, 0x32f41: 0x6cbd1220, 0x32f42: 0x6cbd1420, 0x32f43: 0x6cbd1620, + 0x32f44: 0x6cbd1820, 0x32f45: 0x6cbd1a20, 0x32f46: 0x6cbd1c20, 0x32f47: 0x6cbd1e20, + 0x32f48: 0x6cbd2020, 0x32f49: 0x6cbd2220, 0x32f4a: 0x6cbd2420, 0x32f4b: 0x6cbd2620, + 0x32f4c: 0x6cbd2820, 0x32f4d: 0x6cbd2a20, 0x32f4e: 0x6cbd2c20, 0x32f4f: 0x6cbd2e20, + 0x32f50: 0x6cbd3020, 0x32f51: 0x6cbd3220, 0x32f52: 0x6cbd3420, 0x32f53: 0x6cbd3620, + 0x32f54: 0x6cbd3820, 0x32f55: 0x6cbd3a20, 0x32f56: 0x6cbd3c20, 0x32f57: 0x6cbd3e20, + 0x32f58: 0x6cbd4020, 0x32f59: 0x6cbd4220, 0x32f5a: 0x6cbd4420, 0x32f5b: 0x6cbd4620, + 0x32f5c: 0x6cbd4820, 0x32f5d: 0x6cbd4a20, 0x32f5e: 0x6cbd4c20, 0x32f5f: 0x6cbd4e20, + 0x32f60: 0x6cbd5020, 0x32f61: 0x6cbd5220, 0x32f62: 0x6cbd5420, 0x32f63: 0x6cbd5620, + 0x32f64: 0x6cbd5820, 0x32f65: 0x6cbd5a20, 0x32f66: 0x6cbd5c20, 0x32f67: 0x6cbd5e20, + 0x32f68: 0x6cbd6020, 0x32f69: 0x6cbd6220, 0x32f6a: 0x6cbd6420, 0x32f6b: 0x6cbd6620, + 0x32f6c: 0x6cbd6820, 0x32f6d: 0x6cbd6a20, 0x32f6e: 0x6cedae20, 0x32f6f: 0x6cedb020, + 0x32f70: 0x6cedb220, 0x32f71: 0x6cedb420, 0x32f72: 0x6cedb620, 0x32f73: 0x6cedb820, + 0x32f74: 0x6cedba20, 0x32f75: 0x6cedbc20, 0x32f76: 0x6cedbe20, 0x32f77: 0x6cedc020, + 0x32f78: 0x6cedc220, 0x32f79: 0x6cedc420, 0x32f7a: 0x6cedc620, 0x32f7b: 0x6cedc820, + 0x32f7c: 0x6cedca20, 0x32f7d: 0x6cedcc20, 0x32f7e: 0x6cedce20, 0x32f7f: 0x6cedd020, + // Block 0xcbe, offset 0x32f80 + 0x32f80: 0x6cedd220, 0x32f81: 0x6cedd420, 0x32f82: 0x6cedd620, 0x32f83: 0x6cedd820, + 0x32f84: 0x6cedda20, 0x32f85: 0x6ceddc20, 0x32f86: 0x6cedde20, 0x32f87: 0x6cede020, + 0x32f88: 0x6cede220, 0x32f89: 0x6cede420, 0x32f8a: 0x6cede620, 0x32f8b: 0x6cede820, + 0x32f8c: 0x6cedea20, 0x32f8d: 0x6cedec20, 0x32f8e: 0x6cedee20, 0x32f8f: 0x6cedf020, + 0x32f90: 0x6cedf220, 0x32f91: 0x6cedf420, 0x32f92: 0x6cedf620, 0x32f93: 0x6cedf820, + 0x32f94: 0x6cedfa20, 0x32f95: 0x6cedfc20, 0x32f96: 0x6cedfe20, 0x32f97: 0x6cee0020, + 0x32f98: 0x6cee0220, 0x32f99: 0x6cee0420, 0x32f9a: 0x6cee0620, 0x32f9b: 0x6cee0820, + 0x32f9c: 0x6cee0a20, 0x32f9d: 0x6cee0c20, 0x32f9e: 0x6cee0e20, 0x32f9f: 0x6cee1020, + 0x32fa0: 0x6cee1220, 0x32fa1: 0x6cee1420, 0x32fa2: 0x6cee1620, 0x32fa3: 0x6cee1820, + 0x32fa4: 0x6cee1a20, 0x32fa5: 0x6cee1c20, 0x32fa6: 0x6cee1e20, 0x32fa7: 0x6cee2020, + 0x32fa8: 0x6cee2220, 0x32fa9: 0x6cee2420, 0x32faa: 0x6cee2620, 0x32fab: 0x6cee2820, + 0x32fac: 0x6cee2a20, 0x32fad: 0x6d1d7620, 0x32fae: 0x6d1d7820, 0x32faf: 0x6d1d7a20, + 0x32fb0: 0x6d1d7c20, 0x32fb1: 0x6d1d7e20, 0x32fb2: 0x6d1d8020, 0x32fb3: 0x6d1d8220, + 0x32fb4: 0x6d1d8420, 0x32fb5: 0x6d1d8620, 0x32fb6: 0x6d1d8820, 0x32fb7: 0x6d1d8a20, + 0x32fb8: 0x6d1d8c20, 0x32fb9: 0x6d1d8e20, 0x32fba: 0x6d1d9020, 0x32fbb: 0x6d1d9220, + 0x32fbc: 0x6d1d9420, 0x32fbd: 0x6d1d9620, 0x32fbe: 0x6d1d9820, 0x32fbf: 0x6d1d9a20, + // Block 0xcbf, offset 0x32fc0 + 0x32fc0: 0x6d1d9c20, 0x32fc1: 0x6d1d9e20, 0x32fc2: 0x6d1da020, 0x32fc3: 0x6d1da220, + 0x32fc4: 0x6d1da420, 0x32fc5: 0x6d1da620, 0x32fc6: 0x6d1da820, 0x32fc7: 0x6d1daa20, + 0x32fc8: 0x6d1dac20, 0x32fc9: 0x6d1dae20, 0x32fca: 0x6d1db020, 0x32fcb: 0x6d1db220, + 0x32fcc: 0x6d1db420, 0x32fcd: 0x6d1db620, 0x32fce: 0x6d1db820, 0x32fcf: 0x6d1dba20, + 0x32fd0: 0x6d1dbc20, 0x32fd1: 0x6d1dbe20, 0x32fd2: 0x6d1dc020, 0x32fd3: 0x6d1dc220, + 0x32fd4: 0x6d1dc420, 0x32fd5: 0x6d1dc620, 0x32fd6: 0x6d1dc820, 0x32fd7: 0x6d1dca20, + 0x32fd8: 0x6d1dcc20, 0x32fd9: 0x6d1dce20, 0x32fda: 0x6d1dd020, 0x32fdb: 0x6d1dd220, + 0x32fdc: 0x6d1dd420, 0x32fdd: 0x6d1dd620, 0x32fde: 0x6d4b1420, 0x32fdf: 0x6d4b1620, + 0x32fe0: 0x6d4b1820, 0x32fe1: 0x6d4b1a20, 0x32fe2: 0x6d4b1c20, 0x32fe3: 0x6d4b1e20, + 0x32fe4: 0x6d4b2020, 0x32fe5: 0x6d4b2220, 0x32fe6: 0x6d4b2420, 0x32fe7: 0x6d4b2620, + 0x32fe8: 0x6d4b2820, 0x32fe9: 0x6d4b2a20, 0x32fea: 0x6d4b2c20, 0x32feb: 0x6d4b2e20, + 0x32fec: 0x6d4b3020, 0x32fed: 0x6d4b3220, 0x32fee: 0x6d4b3420, 0x32fef: 0x6d4b3620, + 0x32ff0: 0x6d4b3820, 0x32ff1: 0x6d4b3a20, 0x32ff2: 0x6d4b3c20, 0x32ff3: 0x6d4b3e20, + 0x32ff4: 0x6d4b4020, 0x32ff5: 0x6d4b4220, 0x32ff6: 0x6d4b4420, 0x32ff7: 0x6d4b4620, + 0x32ff8: 0x6d4b4820, 0x32ff9: 0x6d4b4a20, 0x32ffa: 0x6d4b4c20, 0x32ffb: 0x6d4b4e20, + 0x32ffc: 0x6d4b5020, 0x32ffd: 0x6d4b5220, 0x32ffe: 0x6d4b5420, 0x32fff: 0x6d4b5620, + // Block 0xcc0, offset 0x33000 + 0x33000: 0x6d4b5820, 0x33001: 0x6d4b5a20, 0x33002: 0x6d4b5c20, 0x33003: 0x6d4b5e20, + 0x33004: 0x6d4b6020, 0x33005: 0x6d4b6220, 0x33006: 0x6d4b6420, 0x33007: 0x6d4b6620, + 0x33008: 0x6d4b6820, 0x33009: 0x6d4b6a20, 0x3300a: 0x6d4b6c20, 0x3300b: 0x6d4b6e20, + 0x3300c: 0x6d4b7020, 0x3300d: 0x6d4b7220, 0x3300e: 0x6d4b7420, 0x3300f: 0x6d4b7620, + 0x33010: 0x6d4b7820, 0x33011: 0x6d4b7a20, 0x33012: 0x6d4b7c20, 0x33013: 0x6d4b7e20, + 0x33014: 0x6d4b8020, 0x33015: 0x6d4b8220, 0x33016: 0x6d4b8420, 0x33017: 0x6d4b8620, + 0x33018: 0x6d4b8820, 0x33019: 0x6d4b8a20, 0x3301a: 0x6d4b8c20, 0x3301b: 0x6d4b8e20, + 0x3301c: 0x6d4b9020, 0x3301d: 0x6d4b9220, 0x3301e: 0x6d789c20, 0x3301f: 0x6d789e20, + 0x33020: 0x6d78a020, 0x33021: 0x6d78a220, 0x33022: 0x6d78a420, 0x33023: 0x6d78a620, + 0x33024: 0x6d78a820, 0x33025: 0x6d78aa20, 0x33026: 0x6d78ac20, 0x33027: 0x6d78ae20, + 0x33028: 0x6d78b020, 0x33029: 0x6d78b220, 0x3302a: 0x6d78b420, 0x3302b: 0x6d78b620, + 0x3302c: 0x6d78b820, 0x3302d: 0x6d78ba20, 0x3302e: 0x6d78bc20, 0x3302f: 0x6d78be20, + 0x33030: 0x6d78c020, 0x33031: 0x6d78c220, 0x33032: 0x6d78c420, 0x33033: 0x6d78c620, + 0x33034: 0x6d78c820, 0x33035: 0x6d78ca20, 0x33036: 0x6d78cc20, 0x33037: 0x6d78ce20, + 0x33038: 0x6d78d020, 0x33039: 0x6d78d220, 0x3303a: 0x6d980c20, 0x3303b: 0x6d78d420, + 0x3303c: 0x6d78d620, 0x3303d: 0x6d78d820, 0x3303e: 0x6d78da20, 0x3303f: 0x6d78dc20, + // Block 0xcc1, offset 0x33040 + 0x33040: 0x6d78de20, 0x33041: 0x6d78e020, 0x33042: 0x6d78e220, 0x33043: 0x6d78e420, + 0x33044: 0x6d78e620, 0x33045: 0x6d78e820, 0x33046: 0x6d78ea20, 0x33047: 0x6d78ec20, + 0x33048: 0x6d78ee20, 0x33049: 0x6da1a820, 0x3304a: 0x6da1aa20, 0x3304b: 0x6da1ac20, + 0x3304c: 0x6da1ae20, 0x3304d: 0x6da1b020, 0x3304e: 0x6da1b220, 0x3304f: 0x6da1b420, + 0x33050: 0x6da1b620, 0x33051: 0x6da1b820, 0x33052: 0x6da1ba20, 0x33053: 0x6da1bc20, + 0x33054: 0x6da1be20, 0x33055: 0x6da1c020, 0x33056: 0x6da1c220, 0x33057: 0x6da1c420, + 0x33058: 0x6da1c620, 0x33059: 0x6da1c820, 0x3305a: 0x6da1ca20, 0x3305b: 0x6da1cc20, + 0x3305c: 0x6da1ce20, 0x3305d: 0x6da1d020, 0x3305e: 0x6da1d220, 0x3305f: 0x6da1d420, + 0x33060: 0x6da1d620, 0x33061: 0x6dc1f820, 0x33062: 0x6da1d820, 0x33063: 0x6da1da20, + 0x33064: 0x6da1dc20, 0x33065: 0x6da1de20, 0x33066: 0x6da1e020, 0x33067: 0x6da1e220, + 0x33068: 0x6da1e420, 0x33069: 0x6da1e620, 0x3306a: 0x6da1e820, 0x3306b: 0x6da1ea20, + 0x3306c: 0x6da1ec20, 0x3306d: 0x6da1ee20, 0x3306e: 0x6da1f020, 0x3306f: 0x6da1f220, + 0x33070: 0x6dc3ea20, 0x33071: 0x6dc3ec20, 0x33072: 0x6dc3ee20, 0x33073: 0x6dc3f020, + 0x33074: 0x6dc3f220, 0x33075: 0x6dc3f420, 0x33076: 0x6dc3f620, 0x33077: 0x6dc3f820, + 0x33078: 0x6dc3fa20, 0x33079: 0x6dc3fc20, 0x3307a: 0x6dc3fe20, 0x3307b: 0x6dc40020, + 0x3307c: 0x6dc40220, 0x3307d: 0x6dc40420, 0x3307e: 0x6dc40620, 0x3307f: 0x6dc40820, + // Block 0xcc2, offset 0x33080 + 0x33080: 0x6de11620, 0x33081: 0x6dc40a20, 0x33082: 0x6dc40c20, 0x33083: 0x6dc40e20, + 0x33084: 0x6dc41020, 0x33085: 0x6dc41220, 0x33086: 0x6dc41420, 0x33087: 0x6dc41620, + 0x33088: 0x6dc41820, 0x33089: 0x6dc41a20, 0x3308a: 0x6dc41c20, 0x3308b: 0x6dc41e20, + 0x3308c: 0x6dc42020, 0x3308d: 0x6dc42220, 0x3308e: 0x6dc42420, 0x3308f: 0x6dc42620, + 0x33090: 0x6de11820, 0x33091: 0x6de11a20, 0x33092: 0x6de11c20, 0x33093: 0x6de11e20, + 0x33094: 0x6de12020, 0x33095: 0x6de12220, 0x33096: 0x6de12420, 0x33097: 0x6de12620, + 0x33098: 0x6de12820, 0x33099: 0x6de12a20, 0x3309a: 0x6de12c20, 0x3309b: 0x6dede420, + 0x3309c: 0x6de12e20, 0x3309d: 0x6de13020, 0x3309e: 0x6de13220, 0x3309f: 0x6de13420, + 0x330a0: 0x6de13620, 0x330a1: 0x6de13820, 0x330a2: 0x6de13a20, 0x330a3: 0x6de13c20, + 0x330a4: 0x6de13e20, 0x330a5: 0x6de14020, 0x330a6: 0x6df93a20, 0x330a7: 0x6df93c20, + 0x330a8: 0x6df93e20, 0x330a9: 0x6df94020, 0x330aa: 0x6df94220, 0x330ab: 0x6df94420, + 0x330ac: 0x6df94620, 0x330ad: 0x6df94820, 0x330ae: 0x6df94a20, 0x330af: 0x6df94c20, + 0x330b0: 0x6df94e20, 0x330b1: 0x6e0cfe20, 0x330b2: 0x6e0d0020, 0x330b3: 0x6e0d0220, + 0x330b4: 0x6e0d0420, 0x330b5: 0x6e0d0620, 0x330b6: 0x6e0d0820, 0x330b7: 0x6e078620, + 0x330b8: 0x6e0d0a20, 0x330b9: 0x6e0d0c20, 0x330ba: 0x6e1c7620, 0x330bb: 0x6e0d0e20, + 0x330bc: 0x6e0d1020, 0x330bd: 0x6e0d1220, 0x330be: 0x6e0d1420, 0x330bf: 0x6e0d1620, + // Block 0xcc3, offset 0x330c0 + 0x330c0: 0x6e0d1820, 0x330c1: 0x6e0d1a20, 0x330c2: 0x6e1c7820, 0x330c3: 0x6e1c7a20, + 0x330c4: 0x6e1c7c20, 0x330c5: 0x6e1c7e20, 0x330c6: 0x6e1c8020, 0x330c7: 0x6e1c8220, + 0x330c8: 0x6e1c8420, 0x330c9: 0x6e1c8620, 0x330ca: 0x6e289220, 0x330cb: 0x6e289420, + 0x330cc: 0x6e289620, 0x330cd: 0x6e289820, 0x330ce: 0x6e289a20, 0x330cf: 0x6e31c620, + 0x330d0: 0x6e31c820, 0x330d1: 0x6e31ca20, 0x330d2: 0x6e31cc20, 0x330d3: 0x6e31ce20, + 0x330d4: 0x6e31d020, 0x330d5: 0x6e31d220, 0x330d6: 0x6e3d1220, 0x330d7: 0x6e442620, + 0x330d8: 0x6e451820, 0x330d9: 0x6e46e220, 0x330da: 0x6e471e20, 0x330db: 0x6c07c620, + 0x330dc: 0x6c0f1020, 0x330dd: 0x6c1b7020, 0x330de: 0x6c1b7220, 0x330df: 0x6c2e7e20, + 0x330e0: 0x6c48ea20, 0x330e1: 0x6c48ec20, 0x330e2: 0x6c48ee20, 0x330e3: 0x6c6a7220, + 0x330e4: 0x6c6a7420, 0x330e5: 0x6c6a7620, 0x330e6: 0x6c6a7820, 0x330e7: 0x6c6a7a20, + 0x330e8: 0x6c6a7c20, 0x330e9: 0x6c6a7e20, 0x330ea: 0x6c916620, 0x330eb: 0x6c916820, + 0x330ec: 0x6c916a20, 0x330ed: 0x6c916c20, 0x330ee: 0x6cbd8e20, 0x330ef: 0x6cbd9020, + 0x330f0: 0x6cee5020, 0x330f1: 0x6cbdc220, 0x330f2: 0x6cee5220, 0x330f3: 0x6cee5420, + 0x330f4: 0x6cee5620, 0x330f5: 0x6cee5820, 0x330f6: 0x6d1df820, 0x330f7: 0x6d187e20, + 0x330f8: 0x6d1dfa20, 0x330f9: 0x6d1dfc20, 0x330fa: 0x6d1dfe20, 0x330fb: 0x6d1e0020, + 0x330fc: 0x6d4ba620, 0x330fd: 0x6d4ba820, 0x330fe: 0x6d790220, 0x330ff: 0x6d790420, + // Block 0xcc4, offset 0x33100 + 0x33100: 0x6d790620, 0x33101: 0x6da20020, 0x33102: 0x6da20220, 0x33103: 0x6da20420, + 0x33104: 0x6da20620, 0x33105: 0x6dc43020, 0x33106: 0x6dd50620, 0x33107: 0x6dc43220, + 0x33108: 0x6dc43420, 0x33109: 0x6dc43620, 0x3310a: 0x6dc43820, 0x3310b: 0x6de14420, + 0x3310c: 0x6de14620, 0x3310d: 0x6df95220, 0x3310e: 0x6dfe0820, 0x3310f: 0x6e1c8820, + 0x33110: 0x6e1c8a20, 0x33111: 0x6e1c8c20, 0x33112: 0x6c018a20, 0x33113: 0x6c07ca20, + 0x33114: 0x6c07cc20, 0x33115: 0x6c0f1420, 0x33116: 0x6c0f1620, 0x33117: 0x6c1b7620, + 0x33118: 0x6c1b7820, 0x33119: 0x6c1b7a20, 0x3311a: 0x6c6a8220, 0x3311b: 0x6c917020, + 0x3311c: 0x6c917220, 0x3311d: 0x6cee5c20, 0x3311e: 0x6c0f1820, 0x3311f: 0x6c0f1a20, + 0x33120: 0x6c1b7e20, 0x33121: 0x6c1b8020, 0x33122: 0x6c2e8420, 0x33123: 0x6c2e8620, + 0x33124: 0x6c2e8820, 0x33125: 0x6c2e8a20, 0x33126: 0x6c6a8a20, 0x33127: 0x6c917420, + 0x33128: 0x6c917620, 0x33129: 0x6c917820, 0x3312a: 0x6c917a20, 0x3312b: 0x6c917c20, + 0x3312c: 0x6c917e20, 0x3312d: 0x6cbd9620, 0x3312e: 0x6cee6020, 0x3312f: 0x6cee6220, + 0x33130: 0x6cee6420, 0x33131: 0x6cee6620, 0x33132: 0x6d1e0420, 0x33133: 0x6d1e0620, + 0x33134: 0x6d1e0820, 0x33135: 0x6d1e0a20, 0x33136: 0x6d4baa20, 0x33137: 0x6d4bac20, + 0x33138: 0x6d790820, 0x33139: 0x6d790a20, 0x3313a: 0x6d790c20, 0x3313b: 0x6da20820, + 0x3313c: 0x6dc43e20, 0x3313d: 0x6dc44020, 0x3313e: 0x6dc44220, 0x3313f: 0x6dc44420, + // Block 0xcc5, offset 0x33140 + 0x33140: 0x6de14a20, 0x33141: 0x6df95620, 0x33142: 0x6e289c20, 0x33143: 0x6e451a20, + 0x33144: 0x6c07d620, 0x33145: 0x6c07d820, 0x33146: 0x6c07da20, 0x33147: 0x6c0f2220, + 0x33148: 0x6c0f2420, 0x33149: 0x6c0f2620, 0x3314a: 0x6c1b8220, 0x3314b: 0x6c1b8420, + 0x3314c: 0x6c1b8620, 0x3314d: 0x6c2e9220, 0x3314e: 0x6c2e9420, 0x3314f: 0x6c2e9620, + 0x33150: 0x6c48fc20, 0x33151: 0x6c48fe20, 0x33152: 0x6c6a9020, 0x33153: 0x6c6a9220, + 0x33154: 0x6c6a9420, 0x33155: 0x6c6a9620, 0x33156: 0x6c6a9820, 0x33157: 0x6c6a9a20, + 0x33158: 0x6c6a9c20, 0x33159: 0x6c6a9e20, 0x3315a: 0x6c6aa020, 0x3315b: 0x6c6aa220, + 0x3315c: 0x6c6aa420, 0x3315d: 0x6c918420, 0x3315e: 0x6c918620, 0x3315f: 0x6c918820, + 0x33160: 0x6c918a20, 0x33161: 0x6c918c20, 0x33162: 0x6c918e20, 0x33163: 0x6c919020, + 0x33164: 0x6c919220, 0x33165: 0x6c919420, 0x33166: 0x6cbda020, 0x33167: 0x6cbda220, + 0x33168: 0x6cbda420, 0x33169: 0x6cbda620, 0x3316a: 0x6cbda820, 0x3316b: 0x6cbdaa20, + 0x3316c: 0x6cbdac20, 0x3316d: 0x6cbdae20, 0x3316e: 0x6cbdb020, 0x3316f: 0x6cee6a20, + 0x33170: 0x6cbdb220, 0x33171: 0x6cee6c20, 0x33172: 0x6cee6e20, 0x33173: 0x6cee7020, + 0x33174: 0x6cee7220, 0x33175: 0x6cee7420, 0x33176: 0x6d1e1820, 0x33177: 0x6d1e1a20, + 0x33178: 0x6d1e1c20, 0x33179: 0x6d1e1e20, 0x3317a: 0x6d1e2020, 0x3317b: 0x6d1e2220, + 0x3317c: 0x6d1e2420, 0x3317d: 0x6d1e2620, 0x3317e: 0x6d1e2820, 0x3317f: 0x6d4bb020, + // Block 0xcc6, offset 0x33180 + 0x33180: 0x6d4bb220, 0x33181: 0x6d4bb420, 0x33182: 0x6d791220, 0x33183: 0x6d791420, + 0x33184: 0x6d791620, 0x33185: 0x6d791820, 0x33186: 0x6da20c20, 0x33187: 0x6da20e20, + 0x33188: 0x6da21020, 0x33189: 0x6dc44820, 0x3318a: 0x6dc44a20, 0x3318b: 0x6de14c20, + 0x3318c: 0x6de14e20, 0x3318d: 0x6e0d2020, 0x3318e: 0x6e0d2220, 0x3318f: 0x6e3d1420, + 0x33190: 0x6de15020, 0x33191: 0x6e45be20, 0x33192: 0x6c03e820, 0x33193: 0x6c03ea20, + 0x33194: 0x6c03ec20, 0x33195: 0x6c07ec20, 0x33196: 0x6c07ee20, 0x33197: 0x6c07f020, + 0x33198: 0x6c07f220, 0x33199: 0x6c07f420, 0x3319a: 0x6c07f620, 0x3319b: 0x6c07f820, + 0x3319c: 0x6c04f620, 0x3319d: 0x6c0f4420, 0x3319e: 0x6c0f4620, 0x3319f: 0x6c0f4820, + 0x331a0: 0x6c0f4a20, 0x331a1: 0x6c0f4c20, 0x331a2: 0x6c0f4e20, 0x331a3: 0x6c0f5020, + 0x331a4: 0x6c0f5220, 0x331a5: 0x6c1b9a20, 0x331a6: 0x6c1b9c20, 0x331a7: 0x6c1b9e20, + 0x331a8: 0x6c1ba020, 0x331a9: 0x6c1ba220, 0x331aa: 0x6c1ba420, 0x331ab: 0x6c1ba620, + 0x331ac: 0x6c1ba820, 0x331ad: 0x6c1baa20, 0x331ae: 0x6c1bac20, 0x331af: 0x6c1bae20, + 0x331b0: 0x6c1bb020, 0x331b1: 0x6c1bb220, 0x331b2: 0x6c1bb420, 0x331b3: 0x6c1bb620, + 0x331b4: 0x6c1bb820, 0x331b5: 0x6c1bba20, 0x331b6: 0x6c1bbc20, 0x331b7: 0x6c2eba20, + 0x331b8: 0x6c2ebc20, 0x331b9: 0x6c2ebe20, 0x331ba: 0x6c2ec020, 0x331bb: 0x6c2ec220, + 0x331bc: 0x6c2ec420, 0x331bd: 0x6c2ec620, 0x331be: 0x6c2ec820, 0x331bf: 0x6c2eca20, + // Block 0xcc7, offset 0x331c0 + 0x331c0: 0x6c2ecc20, 0x331c1: 0x6c2ece20, 0x331c2: 0x6c2ed020, 0x331c3: 0x6c2ed220, + 0x331c4: 0x6c2ed420, 0x331c5: 0x6c2ed620, 0x331c6: 0x6c2ed820, 0x331c7: 0x6c2eda20, + 0x331c8: 0x6c2edc20, 0x331c9: 0x6c2ede20, 0x331ca: 0x6c2ee020, 0x331cb: 0x6c2ee220, + 0x331cc: 0x6c2ee420, 0x331cd: 0x6c491620, 0x331ce: 0x6c491820, 0x331cf: 0x6c491a20, + 0x331d0: 0x6c491c20, 0x331d1: 0x6c491e20, 0x331d2: 0x6c492020, 0x331d3: 0x6c492220, + 0x331d4: 0x6c492420, 0x331d5: 0x6c492620, 0x331d6: 0x6c492820, 0x331d7: 0x6c492a20, + 0x331d8: 0x6c492c20, 0x331d9: 0x6c492e20, 0x331da: 0x6c493020, 0x331db: 0x6c493220, + 0x331dc: 0x6c493420, 0x331dd: 0x6c6ab420, 0x331de: 0x6c6ab620, 0x331df: 0x6c6ab820, + 0x331e0: 0x6c6aba20, 0x331e1: 0x6c6abc20, 0x331e2: 0x6c6abe20, 0x331e3: 0x6c6ac020, + 0x331e4: 0x6c6ac220, 0x331e5: 0x6c6ac420, 0x331e6: 0x6c6ac620, 0x331e7: 0x6c6ac820, + 0x331e8: 0x6c6aca20, 0x331e9: 0x6c6acc20, 0x331ea: 0x6c6ace20, 0x331eb: 0x6c6ad020, + 0x331ec: 0x6c6ad220, 0x331ed: 0x6c6ad420, 0x331ee: 0x6c6ad620, 0x331ef: 0x6c6ad820, + 0x331f0: 0x6c6ada20, 0x331f1: 0x6c6adc20, 0x331f2: 0x6c6ade20, 0x331f3: 0x6c6ae020, + 0x331f4: 0x6c91a620, 0x331f5: 0x6c91a820, 0x331f6: 0x6c91aa20, 0x331f7: 0x6c91ac20, + 0x331f8: 0x6c91ae20, 0x331f9: 0x6c91b020, 0x331fa: 0x6c91b220, 0x331fb: 0x6c91b420, + 0x331fc: 0x6c91b620, 0x331fd: 0x6c91b820, 0x331fe: 0x6c91ba20, 0x331ff: 0x6c91bc20, + // Block 0xcc8, offset 0x33200 + 0x33200: 0x6c91be20, 0x33201: 0x6c91c020, 0x33202: 0x6c91c220, 0x33203: 0x6c91c420, + 0x33204: 0x6c91c620, 0x33205: 0x6c91c820, 0x33206: 0x6c91ca20, 0x33207: 0x6cbdc420, + 0x33208: 0x6cbdc620, 0x33209: 0x6cbdc820, 0x3320a: 0x6cbdca20, 0x3320b: 0x6cbdcc20, + 0x3320c: 0x6cbdce20, 0x3320d: 0x6cbdd020, 0x3320e: 0x6cbdd220, 0x3320f: 0x6cbdd420, + 0x33210: 0x6cbdd620, 0x33211: 0x6cbdd820, 0x33212: 0x6cbdda20, 0x33213: 0x6cbddc20, + 0x33214: 0x6cbdde20, 0x33215: 0x6cbde020, 0x33216: 0x6cbde220, 0x33217: 0x6cbde420, + 0x33218: 0x6cbde620, 0x33219: 0x6cbde820, 0x3321a: 0x6cbdea20, 0x3321b: 0x6cee7e20, + 0x3321c: 0x6cee8020, 0x3321d: 0x6cee8220, 0x3321e: 0x6cee8420, 0x3321f: 0x6cee8620, + 0x33220: 0x6cee8820, 0x33221: 0x6cee8a20, 0x33222: 0x6cee8c20, 0x33223: 0x6cee8e20, + 0x33224: 0x6cee9020, 0x33225: 0x6cee9220, 0x33226: 0x6cee9420, 0x33227: 0x6cee9620, + 0x33228: 0x6cee9820, 0x33229: 0x6cee9a20, 0x3322a: 0x6cee9c20, 0x3322b: 0x6cee9e20, + 0x3322c: 0x6d1e3620, 0x3322d: 0x6d1e3820, 0x3322e: 0x6d1e3a20, 0x3322f: 0x6d1e3c20, + 0x33230: 0x6d1e3e20, 0x33231: 0x6d1e4020, 0x33232: 0x6d1e4220, 0x33233: 0x6d1e4420, + 0x33234: 0x6d1e4620, 0x33235: 0x6d1e4820, 0x33236: 0x6d1e4a20, 0x33237: 0x6d4bba20, + 0x33238: 0x6d4bbc20, 0x33239: 0x6d4bbe20, 0x3323a: 0x6d4bc020, 0x3323b: 0x6d4bc220, + 0x3323c: 0x6d4bc420, 0x3323d: 0x6d4bc620, 0x3323e: 0x6d4bc820, 0x3323f: 0x6d4bca20, + // Block 0xcc9, offset 0x33240 + 0x33240: 0x6d4bcc20, 0x33241: 0x6d4bce20, 0x33242: 0x6d4bd020, 0x33243: 0x6d4bd220, + 0x33244: 0x6d4bd420, 0x33245: 0x6d4bd620, 0x33246: 0x6d792220, 0x33247: 0x6d792420, + 0x33248: 0x6d792620, 0x33249: 0x6d792820, 0x3324a: 0x6d792a20, 0x3324b: 0x6d792c20, + 0x3324c: 0x6d792e20, 0x3324d: 0x6d793020, 0x3324e: 0x6d793220, 0x3324f: 0x6da21220, + 0x33250: 0x6da21420, 0x33251: 0x6da21620, 0x33252: 0x6da21820, 0x33253: 0x6da21a20, + 0x33254: 0x6da21c20, 0x33255: 0x6da21e20, 0x33256: 0x6da22020, 0x33257: 0x6dc44e20, + 0x33258: 0x6de15220, 0x33259: 0x6de15420, 0x3325a: 0x6de15620, 0x3325b: 0x6df95820, + 0x3325c: 0x6e0d2420, 0x3325d: 0x6e0d2620, 0x3325e: 0x6e1c9420, 0x3325f: 0x6e1c9620, + 0x33260: 0x6e289e20, 0x33261: 0x6e28a020, 0x33262: 0x6e28a220, 0x33263: 0x6e31d420, + 0x33264: 0x6e31d620, 0x33265: 0x6e401220, 0x33266: 0x6c03f020, 0x33267: 0x6c080420, + 0x33268: 0x6c080620, 0x33269: 0x6c080820, 0x3326a: 0x6c080a20, 0x3326b: 0x6c080c20, + 0x3326c: 0x6c080e20, 0x3326d: 0x6c081020, 0x3326e: 0x6c0f8620, 0x3326f: 0x6c0f8820, + 0x33270: 0x6c0f8a20, 0x33271: 0x6c0f8c20, 0x33272: 0x6c0f8e20, 0x33273: 0x6c0f9020, + 0x33274: 0x6c0f9220, 0x33275: 0x6c0f9420, 0x33276: 0x6c0f9620, 0x33277: 0x6c0f9820, + 0x33278: 0x6c0f9a20, 0x33279: 0x6c0f9c20, 0x3327a: 0x6c0f9e20, 0x3327b: 0x6c0fa020, + 0x3327c: 0x6c1c1820, 0x3327d: 0x6c1c1a20, 0x3327e: 0x6c1c1c20, 0x3327f: 0x6c1c1e20, + // Block 0xcca, offset 0x33280 + 0x33280: 0x6c1c2020, 0x33281: 0x6c1c2220, 0x33282: 0x6c1c2420, 0x33283: 0x6c1c2620, + 0x33284: 0x6c1c2820, 0x33285: 0x6c1c2a20, 0x33286: 0x6c1c2c20, 0x33287: 0x6c1c2e20, + 0x33288: 0x6c1c3020, 0x33289: 0x6c1c3220, 0x3328a: 0x6c1c3420, 0x3328b: 0x6c1c3620, + 0x3328c: 0x6c1c3820, 0x3328d: 0x6c1c3a20, 0x3328e: 0x6c1c3c20, 0x3328f: 0x6c1c3e20, + 0x33290: 0x6c1c4020, 0x33291: 0x6c1c4220, 0x33292: 0x6c1c4420, 0x33293: 0x6c1c4620, + 0x33294: 0x6c1c4820, 0x33295: 0x6c1c4a20, 0x33296: 0x6c1c4c20, 0x33297: 0x6c1c4e20, + 0x33298: 0x6c1c5020, 0x33299: 0x6c2f6e20, 0x3329a: 0x6c2f7020, 0x3329b: 0x6c2f7220, + 0x3329c: 0x6c2f7420, 0x3329d: 0x6c2f7620, 0x3329e: 0x6c2f7820, 0x3329f: 0x6c2f7a20, + 0x332a0: 0x6c2f7c20, 0x332a1: 0x6c2f7e20, 0x332a2: 0x6c2f8020, 0x332a3: 0x6c2f8220, + 0x332a4: 0x6c2f8420, 0x332a5: 0x6c2f8620, 0x332a6: 0x6c2f8820, 0x332a7: 0x6c2f8a20, + 0x332a8: 0x6c2f8c20, 0x332a9: 0x6c2f8e20, 0x332aa: 0x6c2f9020, 0x332ab: 0x6c2f9220, + 0x332ac: 0x6c2f9420, 0x332ad: 0x6c2f9620, 0x332ae: 0x6c2f9820, 0x332af: 0x6c2f9a20, + 0x332b0: 0x6c2f9c20, 0x332b1: 0x6c2f9e20, 0x332b2: 0x6c2fa020, 0x332b3: 0x6c2fa220, + 0x332b4: 0x6c2fa420, 0x332b5: 0x6c2fa620, 0x332b6: 0x6c2fa820, 0x332b7: 0x6c2faa20, + 0x332b8: 0x6c2fac20, 0x332b9: 0x6c2fae20, 0x332ba: 0x6c2fb020, 0x332bb: 0x6c2fb220, + 0x332bc: 0x6c2fb420, 0x332bd: 0x6c2fb620, 0x332be: 0x6c2fb820, 0x332bf: 0x6c2fba20, + // Block 0xccb, offset 0x332c0 + 0x332c0: 0x6c2fbc20, 0x332c1: 0x6c2fbe20, 0x332c2: 0x6c49b420, 0x332c3: 0x6c49b620, + 0x332c4: 0x6c49b820, 0x332c5: 0x6c49ba20, 0x332c6: 0x6c49bc20, 0x332c7: 0x6c49be20, + 0x332c8: 0x6c49c020, 0x332c9: 0x6c49c220, 0x332ca: 0x6c49c420, 0x332cb: 0x6c49c620, + 0x332cc: 0x6c49c820, 0x332cd: 0x6c49ca20, 0x332ce: 0x6c49cc20, 0x332cf: 0x6c49ce20, + 0x332d0: 0x6c49d020, 0x332d1: 0x6c49d220, 0x332d2: 0x6c49d420, 0x332d3: 0x6c49d620, + 0x332d4: 0x6c49d820, 0x332d5: 0x6c49da20, 0x332d6: 0x6c49dc20, 0x332d7: 0x6c49de20, + 0x332d8: 0x6c49e020, 0x332d9: 0x6c49e220, 0x332da: 0x6c49e420, 0x332db: 0x6c49e620, + 0x332dc: 0x6c49e820, 0x332dd: 0x6c49ea20, 0x332de: 0x6c49ec20, 0x332df: 0x6c49ee20, + 0x332e0: 0x6c49f020, 0x332e1: 0x6c49f220, 0x332e2: 0x6c49f420, 0x332e3: 0x6c49f620, + 0x332e4: 0x6c49f820, 0x332e5: 0x6c49fa20, 0x332e6: 0x6c49fc20, 0x332e7: 0x6c49fe20, + 0x332e8: 0x6c4a0020, 0x332e9: 0x6c4a0220, 0x332ea: 0x6c4a0420, 0x332eb: 0x6c4a0620, + 0x332ec: 0x6c4a0820, 0x332ed: 0x6c4a0a20, 0x332ee: 0x6c6b6c20, 0x332ef: 0x6c6b6e20, + 0x332f0: 0x6c6b7020, 0x332f1: 0x6c6b7220, 0x332f2: 0x6c6b7420, 0x332f3: 0x6c6b7620, + 0x332f4: 0x6c6b7820, 0x332f5: 0x6c6b7a20, 0x332f6: 0x6c6b7c20, 0x332f7: 0x6c6b7e20, + 0x332f8: 0x6c6b8020, 0x332f9: 0x6c6b8220, 0x332fa: 0x6c6b8420, 0x332fb: 0x6c6b8620, + 0x332fc: 0x6c6b8820, 0x332fd: 0x6c6b8a20, 0x332fe: 0x6c6b8c20, 0x332ff: 0x6c6b8e20, + // Block 0xccc, offset 0x33300 + 0x33300: 0x6c6b9020, 0x33301: 0x6c6b9220, 0x33302: 0x6c6b9420, 0x33303: 0x6c6b9620, + 0x33304: 0x6c6b9820, 0x33305: 0x6c6b9a20, 0x33306: 0x6c6b9c20, 0x33307: 0x6c6b9e20, + 0x33308: 0x6c6ba020, 0x33309: 0x6c6ba220, 0x3330a: 0x6c6ba420, 0x3330b: 0x6c6ba620, + 0x3330c: 0x6c6ba820, 0x3330d: 0x6c6baa20, 0x3330e: 0x6c6bac20, 0x3330f: 0x6c6bae20, + 0x33310: 0x6c6bb020, 0x33311: 0x6c6bb220, 0x33312: 0x6c6bb420, 0x33313: 0x6c6bb620, + 0x33314: 0x6c6bb820, 0x33315: 0x6c6bba20, 0x33316: 0x6c6bbc20, 0x33317: 0x6c6bbe20, + 0x33318: 0x6c6bc020, 0x33319: 0x6c6bc220, 0x3331a: 0x6c6bc420, 0x3331b: 0x6c6bc620, + 0x3331c: 0x6c6bc820, 0x3331d: 0x6c6bca20, 0x3331e: 0x6c927020, 0x3331f: 0x6c927220, + 0x33320: 0x6c927420, 0x33321: 0x6c927620, 0x33322: 0x6c927820, 0x33323: 0x6c927a20, + 0x33324: 0x6c927c20, 0x33325: 0x6c927e20, 0x33326: 0x6c928020, 0x33327: 0x6c928220, + 0x33328: 0x6c928420, 0x33329: 0x6c928620, 0x3332a: 0x6c928820, 0x3332b: 0x6c928a20, + 0x3332c: 0x6c928c20, 0x3332d: 0x6c928e20, 0x3332e: 0x6c929020, 0x3332f: 0x6c929220, + 0x33330: 0x6c929420, 0x33331: 0x6c929620, 0x33332: 0x6c929820, 0x33333: 0x6c929a20, + 0x33334: 0x6c929c20, 0x33335: 0x6c929e20, 0x33336: 0x6c92a020, 0x33337: 0x6c92a220, + 0x33338: 0x6c92a420, 0x33339: 0x6c92a620, 0x3333a: 0x6c92a820, 0x3333b: 0x6c92aa20, + 0x3333c: 0x6c92ac20, 0x3333d: 0x6c92ae20, 0x3333e: 0x6c92b020, 0x3333f: 0x6c92b220, + // Block 0xccd, offset 0x33340 + 0x33340: 0x6c92b420, 0x33341: 0x6c92b620, 0x33342: 0x6c92b820, 0x33343: 0x6c92ba20, + 0x33344: 0x6c92bc20, 0x33345: 0x6c92be20, 0x33346: 0x6c92c020, 0x33347: 0x6c92c220, + 0x33348: 0x6c92c420, 0x33349: 0x6c92c620, 0x3334a: 0x6c92c820, 0x3334b: 0x6c92ca20, + 0x3334c: 0x6c92cc20, 0x3334d: 0x6c92ce20, 0x3334e: 0x6c92d020, 0x3334f: 0x6c92d220, + 0x33350: 0x6c92d420, 0x33351: 0x6c92d620, 0x33352: 0x6c92d820, 0x33353: 0x6c92da20, + 0x33354: 0x6c92dc20, 0x33355: 0x6c92de20, 0x33356: 0x6c92e020, 0x33357: 0x6c92e220, + 0x33358: 0x6c92e420, 0x33359: 0x6c92e620, 0x3335a: 0x6c92e820, 0x3335b: 0x6c92ea20, + 0x3335c: 0x6cbe9020, 0x3335d: 0x6cbe9220, 0x3335e: 0x6cbe9420, 0x3335f: 0x6cbe9620, + 0x33360: 0x6cbe9820, 0x33361: 0x6cbe9a20, 0x33362: 0x6cbe9c20, 0x33363: 0x6cbe9e20, + 0x33364: 0x6cbea020, 0x33365: 0x6cbea220, 0x33366: 0x6cbea420, 0x33367: 0x6cbea620, + 0x33368: 0x6cbea820, 0x33369: 0x6cbeaa20, 0x3336a: 0x6cbeac20, 0x3336b: 0x6cbeae20, + 0x3336c: 0x6cbeb020, 0x3336d: 0x6cbeb220, 0x3336e: 0x6cbeb420, 0x3336f: 0x6cbeb620, + 0x33370: 0x6cbeb820, 0x33371: 0x6cbeba20, 0x33372: 0x6cbebc20, 0x33373: 0x6cbebe20, + 0x33374: 0x6cbec020, 0x33375: 0x6cbec220, 0x33376: 0x6cbec420, 0x33377: 0x6cbec620, + 0x33378: 0x6cbec820, 0x33379: 0x6cbeca20, 0x3337a: 0x6cbecc20, 0x3337b: 0x6cbece20, + 0x3337c: 0x6cbed020, 0x3337d: 0x6cbed220, 0x3337e: 0x6cbed420, 0x3337f: 0x6cbed620, + // Block 0xcce, offset 0x33380 + 0x33380: 0x6cbed820, 0x33381: 0x6cbeda20, 0x33382: 0x6cbedc20, 0x33383: 0x6cbede20, + 0x33384: 0x6cbee020, 0x33385: 0x6cbee220, 0x33386: 0x6cbee420, 0x33387: 0x6cbee620, + 0x33388: 0x6cbee820, 0x33389: 0x6cbeea20, 0x3338a: 0x6cbeec20, 0x3338b: 0x6cbeee20, + 0x3338c: 0x6cbef020, 0x3338d: 0x6cbef220, 0x3338e: 0x6cbef420, 0x3338f: 0x6cbef620, + 0x33390: 0x6cbef820, 0x33391: 0x6cbefa20, 0x33392: 0x6cbefc20, 0x33393: 0x6cbefe20, + 0x33394: 0x6cbf0020, 0x33395: 0x6cbf0220, 0x33396: 0x6cbf0420, 0x33397: 0x6cbf0620, + 0x33398: 0x6cbf0820, 0x33399: 0x6cbf0a20, 0x3339a: 0x6cbf0c20, 0x3339b: 0x6cbf0e20, + 0x3339c: 0x6cbf1020, 0x3339d: 0x6cbf1220, 0x3339e: 0x6cbf1420, 0x3339f: 0x6cbf1620, + 0x333a0: 0x6cbf1820, 0x333a1: 0x6cbf1a20, 0x333a2: 0x6cbf1c20, 0x333a3: 0x6cbf1e20, + 0x333a4: 0x6cbf2020, 0x333a5: 0x6cbf2220, 0x333a6: 0x6cbf2420, 0x333a7: 0x6cbf2620, + 0x333a8: 0x6cef1020, 0x333a9: 0x6cef1220, 0x333aa: 0x6cef1420, 0x333ab: 0x6cef1620, + 0x333ac: 0x6cef1820, 0x333ad: 0x6cef1a20, 0x333ae: 0x6cef1c20, 0x333af: 0x6cef1e20, + 0x333b0: 0x6cef2020, 0x333b1: 0x6cef2220, 0x333b2: 0x6cef2420, 0x333b3: 0x6cef2620, + 0x333b4: 0x6cef2820, 0x333b5: 0x6cef2a20, 0x333b6: 0x6cef2c20, 0x333b7: 0x6cef2e20, + 0x333b8: 0x6cef3020, 0x333b9: 0x6cef3220, 0x333ba: 0x6cef3420, 0x333bb: 0x6cef3620, + 0x333bc: 0x6cef3820, 0x333bd: 0x6cef3a20, 0x333be: 0x6cef3c20, 0x333bf: 0x6cef3e20, + // Block 0xccf, offset 0x333c0 + 0x333c0: 0x6cef4020, 0x333c1: 0x6cef4220, 0x333c2: 0x6cef4420, 0x333c3: 0x6cef4620, + 0x333c4: 0x6cef4820, 0x333c5: 0x6cef4a20, 0x333c6: 0x6cef4c20, 0x333c7: 0x6cef4e20, + 0x333c8: 0x6cef5020, 0x333c9: 0x6cef5220, 0x333ca: 0x6cef5420, 0x333cb: 0x6cef5620, + 0x333cc: 0x6cef5820, 0x333cd: 0x6cef5a20, 0x333ce: 0x6cef5c20, 0x333cf: 0x6cef5e20, + 0x333d0: 0x6cef6020, 0x333d1: 0x6cef6220, 0x333d2: 0x6cef6420, 0x333d3: 0x6cef6620, + 0x333d4: 0x6cef6820, 0x333d5: 0x6cef6a20, 0x333d6: 0x6d4c2220, 0x333d7: 0x6d1eaa20, + 0x333d8: 0x6d4c2420, 0x333d9: 0x6d1eac20, 0x333da: 0x6d1eae20, 0x333db: 0x6d1eb020, + 0x333dc: 0x6d1eb220, 0x333dd: 0x6d1eb420, 0x333de: 0x6d1eb620, 0x333df: 0x6d1eb820, + 0x333e0: 0x6d1eba20, 0x333e1: 0x6d1ebc20, 0x333e2: 0x6d1ebe20, 0x333e3: 0x6cbf2820, + 0x333e4: 0x6d1ec020, 0x333e5: 0x6d1ec220, 0x333e6: 0x6d1ec420, 0x333e7: 0x6d1ec620, + 0x333e8: 0x6d1ec820, 0x333e9: 0x6d1eca20, 0x333ea: 0x6d1ecc20, 0x333eb: 0x6d1ece20, + 0x333ec: 0x6d1ed020, 0x333ed: 0x6d1ed220, 0x333ee: 0x6d1ed420, 0x333ef: 0x6d1ed620, + 0x333f0: 0x6d1ed820, 0x333f1: 0x6d1eda20, 0x333f2: 0x6d4c2620, 0x333f3: 0x6d1edc20, + 0x333f4: 0x6d1ede20, 0x333f5: 0x6d1ee020, 0x333f6: 0x6d1ee220, 0x333f7: 0x6d1ee420, + 0x333f8: 0x6d1ee620, 0x333f9: 0x6d1ee820, 0x333fa: 0x6d1eea20, 0x333fb: 0x6d1eec20, + 0x333fc: 0x6d1eee20, 0x333fd: 0x6d1ef020, 0x333fe: 0x6d1ef220, 0x333ff: 0x6d1ef420, + // Block 0xcd0, offset 0x33400 + 0x33400: 0x6d1ef620, 0x33401: 0x6d1ef820, 0x33402: 0x6d1efa20, 0x33403: 0x6d1efc20, + 0x33404: 0x6d1efe20, 0x33405: 0x6d1f0020, 0x33406: 0x6d1f0220, 0x33407: 0x6d1f0420, + 0x33408: 0x6d1f0620, 0x33409: 0x6d1f0820, 0x3340a: 0x6d1f0a20, 0x3340b: 0x6d1f0c20, + 0x3340c: 0x6d1f0e20, 0x3340d: 0x6d1f1020, 0x3340e: 0x6d1f1220, 0x3340f: 0x6d4c2820, + 0x33410: 0x6d4c2a20, 0x33411: 0x6d4c2c20, 0x33412: 0x6d4c2e20, 0x33413: 0x6d4c3020, + 0x33414: 0x6d4c3220, 0x33415: 0x6d4c3420, 0x33416: 0x6d4c3620, 0x33417: 0x6d4c3820, + 0x33418: 0x6d4c3a20, 0x33419: 0x6d4c3c20, 0x3341a: 0x6d4c3e20, 0x3341b: 0x6d4c4020, + 0x3341c: 0x6d4c4220, 0x3341d: 0x6d4c4420, 0x3341e: 0x6d4c4620, 0x3341f: 0x6d4c4820, + 0x33420: 0x6d4c4a20, 0x33421: 0x6d4c4c20, 0x33422: 0x6d4c4e20, 0x33423: 0x6d4c5020, + 0x33424: 0x6d4c5220, 0x33425: 0x6d4c5420, 0x33426: 0x6d4c5620, 0x33427: 0x6d4c5820, + 0x33428: 0x6d4c5a20, 0x33429: 0x6d4c5c20, 0x3342a: 0x6d4c5e20, 0x3342b: 0x6d4c6020, + 0x3342c: 0x6d4c6220, 0x3342d: 0x6d4c6420, 0x3342e: 0x6d4c6620, 0x3342f: 0x6d4c6820, + 0x33430: 0x6d4c6a20, 0x33431: 0x6d4c6c20, 0x33432: 0x6d4c6e20, 0x33433: 0x6d4c7020, + 0x33434: 0x6d4c7220, 0x33435: 0x6d4c7420, 0x33436: 0x6d4c7620, 0x33437: 0x6d4c7820, + 0x33438: 0x6d4c7a20, 0x33439: 0x6d4c7c20, 0x3343a: 0x6d4c7e20, 0x3343b: 0x6d4c8020, + 0x3343c: 0x6d4c8220, 0x3343d: 0x6d4c8420, 0x3343e: 0x6d4c8620, 0x3343f: 0x6d4c8820, + // Block 0xcd1, offset 0x33440 + 0x33440: 0x6d4c8a20, 0x33441: 0x6d4c8c20, 0x33442: 0x6d4c8e20, 0x33443: 0x6d4c9020, + 0x33444: 0x6d4c9220, 0x33445: 0x6d4c9420, 0x33446: 0x6d4c9620, 0x33447: 0x6d4c9820, + 0x33448: 0x6d4c9a20, 0x33449: 0x6d4c9c20, 0x3344a: 0x6d4c9e20, 0x3344b: 0x6d4ca020, + 0x3344c: 0x6d4ca220, 0x3344d: 0x6d4ca420, 0x3344e: 0x6d796a20, 0x3344f: 0x6d601620, + 0x33450: 0x6d4ca620, 0x33451: 0x6d796c20, 0x33452: 0x6d796e20, 0x33453: 0x6d797020, + 0x33454: 0x6d797220, 0x33455: 0x6d797420, 0x33456: 0x6d797620, 0x33457: 0x6d797820, + 0x33458: 0x6d797a20, 0x33459: 0x6d797c20, 0x3345a: 0x6d797e20, 0x3345b: 0x6d798020, + 0x3345c: 0x6d798220, 0x3345d: 0x6d798420, 0x3345e: 0x6d798620, 0x3345f: 0x6d798820, + 0x33460: 0x6d798a20, 0x33461: 0x6d798c20, 0x33462: 0x6d798e20, 0x33463: 0x6d799020, + 0x33464: 0x6d799220, 0x33465: 0x6d799420, 0x33466: 0x6d799620, 0x33467: 0x6d799820, + 0x33468: 0x6d799a20, 0x33469: 0x6d799c20, 0x3346a: 0x6d799e20, 0x3346b: 0x6d79a020, + 0x3346c: 0x6d79a220, 0x3346d: 0x6d79a420, 0x3346e: 0x6d79a620, 0x3346f: 0x6d79a820, + 0x33470: 0x6d79aa20, 0x33471: 0x6d79ac20, 0x33472: 0x6d79ae20, 0x33473: 0x6d79b020, + 0x33474: 0x6d79b220, 0x33475: 0x6d79b420, 0x33476: 0x6d79b620, 0x33477: 0x6d79b820, + 0x33478: 0x6d79ba20, 0x33479: 0x6d79bc20, 0x3347a: 0x6d79be20, 0x3347b: 0x6d79c020, + 0x3347c: 0x6d79c220, 0x3347d: 0x6d79c420, 0x3347e: 0x6d79c620, 0x3347f: 0x6d79c820, + // Block 0xcd2, offset 0x33480 + 0x33480: 0x6d79ca20, 0x33481: 0x6d79cc20, 0x33482: 0x6d79ce20, 0x33483: 0x6d79d020, + 0x33484: 0x6d79d220, 0x33485: 0x6da24c20, 0x33486: 0x6da24e20, 0x33487: 0x6da25020, + 0x33488: 0x6da25220, 0x33489: 0x6da25420, 0x3348a: 0x6da25620, 0x3348b: 0x6da25820, + 0x3348c: 0x6da25a20, 0x3348d: 0x6da25c20, 0x3348e: 0x6da25e20, 0x3348f: 0x6da26020, + 0x33490: 0x6da26220, 0x33491: 0x6da26420, 0x33492: 0x6da26620, 0x33493: 0x6da26820, + 0x33494: 0x6da26a20, 0x33495: 0x6da26c20, 0x33496: 0x6da26e20, 0x33497: 0x6da27020, + 0x33498: 0x6da27220, 0x33499: 0x6da27420, 0x3349a: 0x6da27620, 0x3349b: 0x6da27820, + 0x3349c: 0x6da27a20, 0x3349d: 0x6da27c20, 0x3349e: 0x6da27e20, 0x3349f: 0x6da28020, + 0x334a0: 0x6da28220, 0x334a1: 0x6da28420, 0x334a2: 0x6db99820, 0x334a3: 0x6da28620, + 0x334a4: 0x6da28820, 0x334a5: 0x6da28a20, 0x334a6: 0x6da28c20, 0x334a7: 0x6da28e20, + 0x334a8: 0x6da29020, 0x334a9: 0x6da29220, 0x334aa: 0x6dc46020, 0x334ab: 0x6dc46220, + 0x334ac: 0x6dc46420, 0x334ad: 0x6dc46620, 0x334ae: 0x6dc46820, 0x334af: 0x6dc46a20, + 0x334b0: 0x6dc46c20, 0x334b1: 0x6dc46e20, 0x334b2: 0x6dc47020, 0x334b3: 0x6dc47220, + 0x334b4: 0x6dc47420, 0x334b5: 0x6dc47620, 0x334b6: 0x6dc47820, 0x334b7: 0x6dc47a20, + 0x334b8: 0x6dc47c20, 0x334b9: 0x6dc47e20, 0x334ba: 0x6dc48020, 0x334bb: 0x6dc48220, + 0x334bc: 0x6dc48420, 0x334bd: 0x6de16820, 0x334be: 0x6de16a20, 0x334bf: 0x6de16c20, + // Block 0xcd3, offset 0x334c0 + 0x334c0: 0x6de16e20, 0x334c1: 0x6de17020, 0x334c2: 0x6de17220, 0x334c3: 0x6de17420, + 0x334c4: 0x6de17620, 0x334c5: 0x6de17820, 0x334c6: 0x6de17a20, 0x334c7: 0x6de17c20, + 0x334c8: 0x6de17e20, 0x334c9: 0x6de18020, 0x334ca: 0x6de18220, 0x334cb: 0x6de18420, + 0x334cc: 0x6de18620, 0x334cd: 0x6de18820, 0x334ce: 0x6df97020, 0x334cf: 0x6df97220, + 0x334d0: 0x6df97420, 0x334d1: 0x6df97620, 0x334d2: 0x6df97820, 0x334d3: 0x6df97a20, + 0x334d4: 0x6df97c20, 0x334d5: 0x6df97e20, 0x334d6: 0x6df98020, 0x334d7: 0x6df98220, + 0x334d8: 0x6e0d3020, 0x334d9: 0x6e0d3220, 0x334da: 0x6e0d3420, 0x334db: 0x6e0d3620, + 0x334dc: 0x6e0d3820, 0x334dd: 0x6e0d3a20, 0x334de: 0x6de18a20, 0x334df: 0x6e0d3c20, + 0x334e0: 0x6e0d3e20, 0x334e1: 0x6e1ca020, 0x334e2: 0x6e1ca220, 0x334e3: 0x6e1ca420, + 0x334e4: 0x6e1ca620, 0x334e5: 0x6e1ca820, 0x334e6: 0x6e1caa20, 0x334e7: 0x6e1cac20, + 0x334e8: 0x6e1cae20, 0x334e9: 0x6e1cb020, 0x334ea: 0x6e1cb220, 0x334eb: 0x6e28a820, + 0x334ec: 0x6e28aa20, 0x334ed: 0x6e28ac20, 0x334ee: 0x6e31dc20, 0x334ef: 0x6e31de20, + 0x334f0: 0x6e31e020, 0x334f1: 0x6e31e220, 0x334f2: 0x6e31e420, 0x334f3: 0x6e31e620, + 0x334f4: 0x6e386220, 0x334f5: 0x6e386420, 0x334f6: 0x6e386620, 0x334f7: 0x6e401420, + 0x334f8: 0x6e401620, 0x334f9: 0x6e401820, 0x334fa: 0x6e401a20, 0x334fb: 0x6e467e20, + 0x334fc: 0x6c019e20, 0x334fd: 0x6c03f420, 0x334fe: 0x6c081420, 0x334ff: 0x6c081620, + // Block 0xcd4, offset 0x33500 + 0x33500: 0x6c081820, 0x33501: 0x6c081a20, 0x33502: 0x6c081c20, 0x33503: 0x6c0fb220, + 0x33504: 0x6c0fb420, 0x33505: 0x6c0fb620, 0x33506: 0x6c1c7020, 0x33507: 0x6c1c7220, + 0x33508: 0x6c1c7420, 0x33509: 0x6c1c7620, 0x3350a: 0x6c1c7820, 0x3350b: 0x6c18cc20, + 0x3350c: 0x6c1c7a20, 0x3350d: 0x6c1c7c20, 0x3350e: 0x6c2fde20, 0x3350f: 0x6c2fe020, + 0x33510: 0x6c2fe220, 0x33511: 0x6c2fe420, 0x33512: 0x6c2fe620, 0x33513: 0x6c2fe820, + 0x33514: 0x6c2fea20, 0x33515: 0x6c2fec20, 0x33516: 0x6c2fee20, 0x33517: 0x6c2ff020, + 0x33518: 0x6c2ff220, 0x33519: 0x6c2ff420, 0x3351a: 0x6c2ff620, 0x3351b: 0x6c4a2420, + 0x3351c: 0x6c4a2620, 0x3351d: 0x6c4a2820, 0x3351e: 0x6c4a2a20, 0x3351f: 0x6c4a2c20, + 0x33520: 0x6c4a2e20, 0x33521: 0x6c4a3020, 0x33522: 0x6c4a3220, 0x33523: 0x6c4a3420, + 0x33524: 0x6c4a3620, 0x33525: 0x6c4a3820, 0x33526: 0x6c4a3a20, 0x33527: 0x6c4a3c20, + 0x33528: 0x6c6be620, 0x33529: 0x6c6be820, 0x3352a: 0x6c6bea20, 0x3352b: 0x6c6bec20, + 0x3352c: 0x6c6bee20, 0x3352d: 0x6c6bf020, 0x3352e: 0x6c930c20, 0x3352f: 0x6c930e20, + 0x33530: 0x6c931020, 0x33531: 0x6c931220, 0x33532: 0x6c931420, 0x33533: 0x6c931620, + 0x33534: 0x6c931820, 0x33535: 0x6c931a20, 0x33536: 0x6cbf4620, 0x33537: 0x6cbf4820, + 0x33538: 0x6cbf4a20, 0x33539: 0x6cbf4c20, 0x3353a: 0x6cbf4e20, 0x3353b: 0x6cbf5020, + 0x3353c: 0x6cbf5220, 0x3353d: 0x6cbf5420, 0x3353e: 0x6cbf5620, 0x3353f: 0x6cbf5820, + // Block 0xcd5, offset 0x33540 + 0x33540: 0x6cbf5a20, 0x33541: 0x6cbf5c20, 0x33542: 0x6cbf5e20, 0x33543: 0x6cef7c20, + 0x33544: 0x6cef7e20, 0x33545: 0x6cef8020, 0x33546: 0x6cef8220, 0x33547: 0x6cef8420, + 0x33548: 0x6cef8620, 0x33549: 0x6cef8820, 0x3354a: 0x6cef8a20, 0x3354b: 0x6cef8c20, + 0x3354c: 0x6cef8e20, 0x3354d: 0x6cef9020, 0x3354e: 0x6cef9220, 0x3354f: 0x6cef9420, + 0x33550: 0x6cef9620, 0x33551: 0x6d1f2e20, 0x33552: 0x6d1f3020, 0x33553: 0x6d1f3220, + 0x33554: 0x6d1f3420, 0x33555: 0x6d1f3620, 0x33556: 0x6d1f3820, 0x33557: 0x6d4cb820, + 0x33558: 0x6d4cba20, 0x33559: 0x6d4cbc20, 0x3355a: 0x6d4cbe20, 0x3355b: 0x6d4cc020, + 0x3355c: 0x6d4cc220, 0x3355d: 0x6d4cc420, 0x3355e: 0x6d79e620, 0x3355f: 0x6d79e820, + 0x33560: 0x6d79ea20, 0x33561: 0x6d79ec20, 0x33562: 0x6d79ee20, 0x33563: 0x6d79f020, + 0x33564: 0x6d79f220, 0x33565: 0x6d79f420, 0x33566: 0x6d79f620, 0x33567: 0x6d79f820, + 0x33568: 0x6d79fa20, 0x33569: 0x6da29a20, 0x3356a: 0x6dc48e20, 0x3356b: 0x6dc49020, + 0x3356c: 0x6dc49220, 0x3356d: 0x6de19220, 0x3356e: 0x6de19420, 0x3356f: 0x6de19620, + 0x33570: 0x6de19820, 0x33571: 0x6df98a20, 0x33572: 0x6df98c20, 0x33573: 0x6df98e20, + 0x33574: 0x6df99020, 0x33575: 0x6df99220, 0x33576: 0x6df99420, 0x33577: 0x6e1cb620, + 0x33578: 0x6e401c20, 0x33579: 0x6c03f820, 0x3357a: 0x6c082a20, 0x3357b: 0x6c082c20, + 0x3357c: 0x6c082e20, 0x3357d: 0x6c0fc620, 0x3357e: 0x6c0fc820, 0x3357f: 0x6c0fca20, + // Block 0xcd6, offset 0x33580 + 0x33580: 0x6c0fcc20, 0x33581: 0x6c0fce20, 0x33582: 0x6c0fd020, 0x33583: 0x6c0fd220, + 0x33584: 0x6c0fd420, 0x33585: 0x6c0fd620, 0x33586: 0x6c0fd820, 0x33587: 0x6c0fda20, + 0x33588: 0x6c0fdc20, 0x33589: 0x6c0fde20, 0x3358a: 0x6c0fe020, 0x3358b: 0x6c1ca020, + 0x3358c: 0x6c1ca220, 0x3358d: 0x6c1ca420, 0x3358e: 0x6c1ca620, 0x3358f: 0x6c1ca820, + 0x33590: 0x6c1caa20, 0x33591: 0x6c1cac20, 0x33592: 0x6c1cae20, 0x33593: 0x6c1cb020, + 0x33594: 0x6c1cb220, 0x33595: 0x6c1cb420, 0x33596: 0x6c301a20, 0x33597: 0x6c301c20, + 0x33598: 0x6c301e20, 0x33599: 0x6c302020, 0x3359a: 0x6c302220, 0x3359b: 0x6c302420, + 0x3359c: 0x6c302620, 0x3359d: 0x6c302820, 0x3359e: 0x6c302a20, 0x3359f: 0x6c302c20, + 0x335a0: 0x6c302e20, 0x335a1: 0x6c303020, 0x335a2: 0x6c303220, 0x335a3: 0x6c303420, + 0x335a4: 0x6c303620, 0x335a5: 0x6c303820, 0x335a6: 0x6c303a20, 0x335a7: 0x6c303c20, + 0x335a8: 0x6c303e20, 0x335a9: 0x6c4a5a20, 0x335aa: 0x6c4a5c20, 0x335ab: 0x6c4a5e20, + 0x335ac: 0x6c4a6020, 0x335ad: 0x6c4a6220, 0x335ae: 0x6c4a6420, 0x335af: 0x6c4a6620, + 0x335b0: 0x6c4a6820, 0x335b1: 0x6c4a6a20, 0x335b2: 0x6c4a6c20, 0x335b3: 0x6c4a6e20, + 0x335b4: 0x6c4a7020, 0x335b5: 0x6c4a7220, 0x335b6: 0x6c4a7420, 0x335b7: 0x6c4a7620, + 0x335b8: 0x6c4a7820, 0x335b9: 0x6c4a7a20, 0x335ba: 0x6c4a7c20, 0x335bb: 0x6c4a7e20, + 0x335bc: 0x6c4a8020, 0x335bd: 0x6c4a8220, 0x335be: 0x6c4a8420, 0x335bf: 0x6c4a8620, + // Block 0xcd7, offset 0x335c0 + 0x335c0: 0x6c6c2620, 0x335c1: 0x6c6c2820, 0x335c2: 0x6c6c2a20, 0x335c3: 0x6c6c2c20, + 0x335c4: 0x6c6c2e20, 0x335c5: 0x6c6c3020, 0x335c6: 0x6c6c3220, 0x335c7: 0x6c6c3420, + 0x335c8: 0x6c6c3620, 0x335c9: 0x6c6c3820, 0x335ca: 0x6c6c3a20, 0x335cb: 0x6c6c3c20, + 0x335cc: 0x6c6c3e20, 0x335cd: 0x6c6c4020, 0x335ce: 0x6c6c4220, 0x335cf: 0x6c6c4420, + 0x335d0: 0x6c6c4620, 0x335d1: 0x6c6c4820, 0x335d2: 0x6c6c4a20, 0x335d3: 0x6c6c4c20, + 0x335d4: 0x6c6c4e20, 0x335d5: 0x6c6c5020, 0x335d6: 0x6c6c5220, 0x335d7: 0x6c6c5420, + 0x335d8: 0x6c6c5620, 0x335d9: 0x6c6c5820, 0x335da: 0x6c6c5a20, 0x335db: 0x6c6c5c20, + 0x335dc: 0x6c6c5e20, 0x335dd: 0x6c6c6020, 0x335de: 0x6c6c6220, 0x335df: 0x6c6c6420, + 0x335e0: 0x6c6c6620, 0x335e1: 0x6c6c6820, 0x335e2: 0x6c934620, 0x335e3: 0x6c934820, + 0x335e4: 0x6c934a20, 0x335e5: 0x6c934c20, 0x335e6: 0x6c934e20, 0x335e7: 0x6c935020, + 0x335e8: 0x6c935220, 0x335e9: 0x6c935420, 0x335ea: 0x6c935620, 0x335eb: 0x6c935820, + 0x335ec: 0x6c935a20, 0x335ed: 0x6c935c20, 0x335ee: 0x6c935e20, 0x335ef: 0x6c936020, + 0x335f0: 0x6c936220, 0x335f1: 0x6c936420, 0x335f2: 0x6c936620, 0x335f3: 0x6c936820, + 0x335f4: 0x6c936a20, 0x335f5: 0x6c936c20, 0x335f6: 0x6c936e20, 0x335f7: 0x6c937020, + 0x335f8: 0x6c937220, 0x335f9: 0x6c937420, 0x335fa: 0x6c937620, 0x335fb: 0x6c937820, + 0x335fc: 0x6c937a20, 0x335fd: 0x6cbf8220, 0x335fe: 0x6cbf8420, 0x335ff: 0x6cbf8620, + // Block 0xcd8, offset 0x33600 + 0x33600: 0x6cbf8820, 0x33601: 0x6cbf8a20, 0x33602: 0x6cbf8c20, 0x33603: 0x6cbf8e20, + 0x33604: 0x6cbf9020, 0x33605: 0x6cbf9220, 0x33606: 0x6cbf9420, 0x33607: 0x6cbf9620, + 0x33608: 0x6cbf9820, 0x33609: 0x6cbf9a20, 0x3360a: 0x6cbf9c20, 0x3360b: 0x6cbf9e20, + 0x3360c: 0x6cbfa020, 0x3360d: 0x6cbfa220, 0x3360e: 0x6cbfa420, 0x3360f: 0x6cbfa620, + 0x33610: 0x6cbfa820, 0x33611: 0x6cbfaa20, 0x33612: 0x6cbfac20, 0x33613: 0x6cbfae20, + 0x33614: 0x6cbfb020, 0x33615: 0x6cbfb220, 0x33616: 0x6cbfb420, 0x33617: 0x6cbfb620, + 0x33618: 0x6cbfb820, 0x33619: 0x6cbfba20, 0x3361a: 0x6cbfbc20, 0x3361b: 0x6cbfbe20, + 0x3361c: 0x6cbfc020, 0x3361d: 0x6cbfc220, 0x3361e: 0x6cbfc420, 0x3361f: 0x6cefb420, + 0x33620: 0x6cefb620, 0x33621: 0x6cefb820, 0x33622: 0x6cefba20, 0x33623: 0x6cefbc20, + 0x33624: 0x6cefbe20, 0x33625: 0x6cefc020, 0x33626: 0x6cefc220, 0x33627: 0x6cefc420, + 0x33628: 0x6cefc620, 0x33629: 0x6cefc820, 0x3362a: 0x6cefca20, 0x3362b: 0x6cefcc20, + 0x3362c: 0x6cefce20, 0x3362d: 0x6cefd020, 0x3362e: 0x6cefd220, 0x3362f: 0x6cefd420, + 0x33630: 0x6cefd620, 0x33631: 0x6cefd820, 0x33632: 0x6cefda20, 0x33633: 0x6cefdc20, + 0x33634: 0x6cefde20, 0x33635: 0x6cefe020, 0x33636: 0x6cefe220, 0x33637: 0x6cefe420, + 0x33638: 0x6cefe620, 0x33639: 0x6cefe820, 0x3363a: 0x6cefea20, 0x3363b: 0x6d1f5a20, + 0x3363c: 0x6d1f5c20, 0x3363d: 0x6d1f5e20, 0x3363e: 0x6d1f6020, 0x3363f: 0x6d1f6220, + // Block 0xcd9, offset 0x33640 + 0x33640: 0x6d1f6420, 0x33641: 0x6d1f6620, 0x33642: 0x6d1f6820, 0x33643: 0x6d1f6a20, + 0x33644: 0x6d1f6c20, 0x33645: 0x6d1f6e20, 0x33646: 0x6d1f7020, 0x33647: 0x6d1f7220, + 0x33648: 0x6d1f7420, 0x33649: 0x6d1f7620, 0x3364a: 0x6d1f7820, 0x3364b: 0x6d1f7a20, + 0x3364c: 0x6d1f7c20, 0x3364d: 0x6d1f7e20, 0x3364e: 0x6d1f8020, 0x3364f: 0x6d1f8220, + 0x33650: 0x6d1f8420, 0x33651: 0x6d1f8620, 0x33652: 0x6d1f8820, 0x33653: 0x6d1f8a20, + 0x33654: 0x6d1f8c20, 0x33655: 0x6d1f8e20, 0x33656: 0x6d1f9020, 0x33657: 0x6d1f9220, + 0x33658: 0x6d1f9420, 0x33659: 0x6d1f9620, 0x3365a: 0x6d1f9820, 0x3365b: 0x6d1f9a20, + 0x3365c: 0x6d1f9c20, 0x3365d: 0x6d1f9e20, 0x3365e: 0x6d1b3020, 0x3365f: 0x6d4cd820, + 0x33660: 0x6d4cda20, 0x33661: 0x6d4cdc20, 0x33662: 0x6d4cde20, 0x33663: 0x6d4ce020, + 0x33664: 0x6d4ce220, 0x33665: 0x6d4ce420, 0x33666: 0x6d4ce620, 0x33667: 0x6d4ce820, + 0x33668: 0x6d4cea20, 0x33669: 0x6d4cec20, 0x3366a: 0x6d4cee20, 0x3366b: 0x6d4cf020, + 0x3366c: 0x6d4cf220, 0x3366d: 0x6d4cf420, 0x3366e: 0x6d4cf620, 0x3366f: 0x6d4cf820, + 0x33670: 0x6d4cfa20, 0x33671: 0x6d4cfc20, 0x33672: 0x6d4cfe20, 0x33673: 0x6d4d0020, + 0x33674: 0x6d4d0220, 0x33675: 0x6d4d0420, 0x33676: 0x6d4d0620, 0x33677: 0x6d4d0820, + 0x33678: 0x6d4d0a20, 0x33679: 0x6d4d0c20, 0x3367a: 0x6d4d0e20, 0x3367b: 0x6d4d1020, + 0x3367c: 0x6d4d1220, 0x3367d: 0x6d4d1420, 0x3367e: 0x6d7a0220, 0x3367f: 0x6d7a0420, + // Block 0xcda, offset 0x33680 + 0x33680: 0x6d7a0620, 0x33681: 0x6d7a0820, 0x33682: 0x6d7a0a20, 0x33683: 0x6d7a0c20, + 0x33684: 0x6d7a0e20, 0x33685: 0x6d7a1020, 0x33686: 0x6d7a1220, 0x33687: 0x6d7a1420, + 0x33688: 0x6d7a1620, 0x33689: 0x6d7a1820, 0x3368a: 0x6d7a1a20, 0x3368b: 0x6d7a1c20, + 0x3368c: 0x6d7a1e20, 0x3368d: 0x6d7a2020, 0x3368e: 0x6d7a2220, 0x3368f: 0x6d7a2420, + 0x33690: 0x6d7a2620, 0x33691: 0x6da2a420, 0x33692: 0x6da2a620, 0x33693: 0x6da2a820, + 0x33694: 0x6da2aa20, 0x33695: 0x6da2ac20, 0x33696: 0x6da2ae20, 0x33697: 0x6da2b020, + 0x33698: 0x6da2b220, 0x33699: 0x6da2b420, 0x3369a: 0x6da2b620, 0x3369b: 0x6da2b820, + 0x3369c: 0x6da2ba20, 0x3369d: 0x6da2bc20, 0x3369e: 0x6dc49620, 0x3369f: 0x6dc49820, + 0x336a0: 0x6dc49a20, 0x336a1: 0x6dc49c20, 0x336a2: 0x6dc49e20, 0x336a3: 0x6dc4a020, + 0x336a4: 0x6dc4a220, 0x336a5: 0x6dc4a420, 0x336a6: 0x6dc4a620, 0x336a7: 0x6dc4a820, + 0x336a8: 0x6dc4aa20, 0x336a9: 0x6dc4ac20, 0x336aa: 0x6dc4ae20, 0x336ab: 0x6dc4b020, + 0x336ac: 0x6de1a020, 0x336ad: 0x6de1a220, 0x336ae: 0x6de1a420, 0x336af: 0x6de1a620, + 0x336b0: 0x6de1a820, 0x336b1: 0x6de1aa20, 0x336b2: 0x6de1ac20, 0x336b3: 0x6de1ae20, + 0x336b4: 0x6de1b020, 0x336b5: 0x6de1b220, 0x336b6: 0x6de1b420, 0x336b7: 0x6df99820, + 0x336b8: 0x6df99a20, 0x336b9: 0x6df99c20, 0x336ba: 0x6df99e20, 0x336bb: 0x6df9a020, + 0x336bc: 0x6e0d4a20, 0x336bd: 0x6e0d4c20, 0x336be: 0x6e0d4e20, 0x336bf: 0x6e0d5020, + // Block 0xcdb, offset 0x336c0 + 0x336c0: 0x6e0d5220, 0x336c1: 0x6e0d5420, 0x336c2: 0x6e0d5620, 0x336c3: 0x6e0d5820, + 0x336c4: 0x6e1cb820, 0x336c5: 0x6e1cba20, 0x336c6: 0x6e1cbc20, 0x336c7: 0x6e1cbe20, + 0x336c8: 0x6e1cc020, 0x336c9: 0x6e1cc220, 0x336ca: 0x6e1cc420, 0x336cb: 0x6e1cc620, + 0x336cc: 0x6e28b020, 0x336cd: 0x6e31e820, 0x336ce: 0x6e401e20, 0x336cf: 0x6e31ea20, + 0x336d0: 0x6e31ec20, 0x336d1: 0x6e386a20, 0x336d2: 0x6e428e20, 0x336d3: 0x6e386c20, + 0x336d4: 0x6e386e20, 0x336d5: 0x6e387020, 0x336d6: 0x6e3d1c20, 0x336d7: 0x6e3d1e20, + 0x336d8: 0x6e3d2020, 0x336d9: 0x6e402020, 0x336da: 0x6e402220, 0x336db: 0x6e442820, + 0x336dc: 0x6e46e420, 0x336dd: 0x6c03fa20, 0x336de: 0x6c0fe820, 0x336df: 0x6c304820, + 0x336e0: 0x6c304a20, 0x336e1: 0x6c304c20, 0x336e2: 0x6c304e20, 0x336e3: 0x6c305020, + 0x336e4: 0x6c305220, 0x336e5: 0x6c305420, 0x336e6: 0x6c305620, 0x336e7: 0x6c4a9420, + 0x336e8: 0x6c4a9620, 0x336e9: 0x6c4a9820, 0x336ea: 0x6c4a9a20, 0x336eb: 0x6c4a9c20, + 0x336ec: 0x6c4a9e20, 0x336ed: 0x6c6c7a20, 0x336ee: 0x6c938820, 0x336ef: 0x6c938a20, + 0x336f0: 0x6c938c20, 0x336f1: 0x6c938e20, 0x336f2: 0x6c939020, 0x336f3: 0x6cbfdc20, + 0x336f4: 0x6cbfde20, 0x336f5: 0x6cbfe020, 0x336f6: 0x6cbfe220, 0x336f7: 0x6cbfe420, + 0x336f8: 0x6cbfe620, 0x336f9: 0x6ceff820, 0x336fa: 0x6ceffa20, 0x336fb: 0x6ceffc20, + 0x336fc: 0x6ceffe20, 0x336fd: 0x6d1fae20, 0x336fe: 0x6d1fb020, 0x336ff: 0x6d1fb220, + // Block 0xcdc, offset 0x33700 + 0x33700: 0x6d1fb420, 0x33701: 0x6d1fb620, 0x33702: 0x6d1fb820, 0x33703: 0x6d4d2420, + 0x33704: 0x6d4d2620, 0x33705: 0x6d4d2820, 0x33706: 0x6d4d2a20, 0x33707: 0x6d4d2c20, + 0x33708: 0x6d4d2e20, 0x33709: 0x6d4d3020, 0x3370a: 0x6d7a3020, 0x3370b: 0x6d7a3220, + 0x3370c: 0x6d7a3420, 0x3370d: 0x6da2c020, 0x3370e: 0x6da2c220, 0x3370f: 0x6da2c420, + 0x33710: 0x6dc4b820, 0x33711: 0x6de1b620, 0x33712: 0x6df9a620, 0x33713: 0x6e0d5c20, + 0x33714: 0x6c01aa20, 0x33715: 0x6c040020, 0x33716: 0x6c040220, 0x33717: 0x6c083e20, + 0x33718: 0x6c084020, 0x33719: 0x6c0ff220, 0x3371a: 0x6c0ff420, 0x3371b: 0x6c0ff620, + 0x3371c: 0x6c0ff820, 0x3371d: 0x6c1cc420, 0x3371e: 0x6c1cc620, 0x3371f: 0x6c1cc820, + 0x33720: 0x6c1cca20, 0x33721: 0x6c1ccc20, 0x33722: 0x6c1cce20, 0x33723: 0x6c1cd020, + 0x33724: 0x6c1cd220, 0x33725: 0x6c305e20, 0x33726: 0x6c306020, 0x33727: 0x6c306220, + 0x33728: 0x6c306420, 0x33729: 0x6c306620, 0x3372a: 0x6c4aa620, 0x3372b: 0x6c4aa820, + 0x3372c: 0x6c4aaa20, 0x3372d: 0x6c4aac20, 0x3372e: 0x6c4aae20, 0x3372f: 0x6c4ab020, + 0x33730: 0x6c4ab220, 0x33731: 0x6c4ab420, 0x33732: 0x6c4ab620, 0x33733: 0x6c4ab820, + 0x33734: 0x6c6c7e20, 0x33735: 0x6c6c8020, 0x33736: 0x6c6c8220, 0x33737: 0x6c6c8420, + 0x33738: 0x6c6c8620, 0x33739: 0x6c6c8820, 0x3373a: 0x6c6c8a20, 0x3373b: 0x6c6c8c20, + 0x3373c: 0x6c6c8e20, 0x3373d: 0x6c939620, 0x3373e: 0x6c939820, 0x3373f: 0x6c939a20, + // Block 0xcdd, offset 0x33740 + 0x33740: 0x6c939c20, 0x33741: 0x6c939e20, 0x33742: 0x6c93a020, 0x33743: 0x6c93a220, + 0x33744: 0x6c93a420, 0x33745: 0x6c93a620, 0x33746: 0x6c93a820, 0x33747: 0x6c93aa20, + 0x33748: 0x6c93ac20, 0x33749: 0x6c93ae20, 0x3374a: 0x6c93b020, 0x3374b: 0x6c93b220, + 0x3374c: 0x6c93b420, 0x3374d: 0x6c93b620, 0x3374e: 0x6cbfee20, 0x3374f: 0x6cbff020, + 0x33750: 0x6cbff220, 0x33751: 0x6cbff420, 0x33752: 0x6cbff620, 0x33753: 0x6cbff820, + 0x33754: 0x6cbffa20, 0x33755: 0x6cbffc20, 0x33756: 0x6cbffe20, 0x33757: 0x6cc00020, + 0x33758: 0x6cf00620, 0x33759: 0x6cf00820, 0x3375a: 0x6cf00a20, 0x3375b: 0x6cf00c20, + 0x3375c: 0x6cf00e20, 0x3375d: 0x6cf01020, 0x3375e: 0x6d1fbe20, 0x3375f: 0x6d1fc020, + 0x33760: 0x6d1fc220, 0x33761: 0x6d1fc420, 0x33762: 0x6d1fc620, 0x33763: 0x6d1fc820, + 0x33764: 0x6d1fca20, 0x33765: 0x6d1fcc20, 0x33766: 0x6d4d3a20, 0x33767: 0x6d4d3c20, + 0x33768: 0x6d4d3e20, 0x33769: 0x6d4d4020, 0x3376a: 0x6d4d4220, 0x3376b: 0x6d4d4420, + 0x3376c: 0x6d4d4620, 0x3376d: 0x6d4d4820, 0x3376e: 0x6d4d4a20, 0x3376f: 0x6d4d4c20, + 0x33770: 0x6d7a3820, 0x33771: 0x6d7a3a20, 0x33772: 0x6d7a3c20, 0x33773: 0x6d7a3e20, + 0x33774: 0x6da2c820, 0x33775: 0x6da2ca20, 0x33776: 0x6da2cc20, 0x33777: 0x6dc4ba20, + 0x33778: 0x6dc4bc20, 0x33779: 0x6dc4be20, 0x3377a: 0x6dc4c020, 0x3377b: 0x6dc4c220, + 0x3377c: 0x6de1b820, 0x3377d: 0x6de1ba20, 0x3377e: 0x6de1bc20, 0x3377f: 0x6e0d5e20, + // Block 0xcde, offset 0x33780 + 0x33780: 0x6e462420, 0x33781: 0x6c01ae20, 0x33782: 0x6c01b020, 0x33783: 0x6c040820, + 0x33784: 0x6c084220, 0x33785: 0x6c084420, 0x33786: 0x6c084620, 0x33787: 0x6c084820, + 0x33788: 0x6c084a20, 0x33789: 0x6c084c20, 0x3378a: 0x6c084e20, 0x3378b: 0x6c100220, + 0x3378c: 0x6c100420, 0x3378d: 0x6c100620, 0x3378e: 0x6c100820, 0x3378f: 0x6c1ce220, + 0x33790: 0x6c1ce420, 0x33791: 0x6c1ce620, 0x33792: 0x6c1ce820, 0x33793: 0x6c1cea20, + 0x33794: 0x6c1cec20, 0x33795: 0x6c1cee20, 0x33796: 0x6c1cf020, 0x33797: 0x6c1cf220, + 0x33798: 0x6c1cf420, 0x33799: 0x6c1cf620, 0x3379a: 0x6c307020, 0x3379b: 0x6c307220, + 0x3379c: 0x6c307420, 0x3379d: 0x6c307620, 0x3379e: 0x6c307820, 0x3379f: 0x6c307a20, + 0x337a0: 0x6c307c20, 0x337a1: 0x6c307e20, 0x337a2: 0x6c4ac220, 0x337a3: 0x6c4ac420, + 0x337a4: 0x6c4ac620, 0x337a5: 0x6c5fca20, 0x337a6: 0x6c4ac820, 0x337a7: 0x6c4aca20, + 0x337a8: 0x6c6c9620, 0x337a9: 0x6c6c9820, 0x337aa: 0x6c6c9a20, 0x337ab: 0x6c6c9c20, + 0x337ac: 0x6c6c9e20, 0x337ad: 0x6c6ca020, 0x337ae: 0x6c6ca220, 0x337af: 0x6c6ca420, + 0x337b0: 0x6c6ca620, 0x337b1: 0x6c6ca820, 0x337b2: 0x6c6caa20, 0x337b3: 0x6c93c020, + 0x337b4: 0x6c93c220, 0x337b5: 0x6c93c420, 0x337b6: 0x6c93c620, 0x337b7: 0x6c93c820, + 0x337b8: 0x6c93ca20, 0x337b9: 0x6cc00a20, 0x337ba: 0x6cc00c20, 0x337bb: 0x6cc00e20, + 0x337bc: 0x6cc01020, 0x337bd: 0x6cc01220, 0x337be: 0x6cc01420, 0x337bf: 0x6cc01620, + // Block 0xcdf, offset 0x337c0 + 0x337c0: 0x6cc01820, 0x337c1: 0x6cc01a20, 0x337c2: 0x6cc01c20, 0x337c3: 0x6cf01c20, + 0x337c4: 0x6cf01e20, 0x337c5: 0x6cf02020, 0x337c6: 0x6cf02220, 0x337c7: 0x6cf02420, + 0x337c8: 0x6cf02620, 0x337c9: 0x6cf02820, 0x337ca: 0x6cf02a20, 0x337cb: 0x6d1fd020, + 0x337cc: 0x6d1fd220, 0x337cd: 0x6d1fd420, 0x337ce: 0x6d1fd620, 0x337cf: 0x6d1fd820, + 0x337d0: 0x6d4d5220, 0x337d1: 0x6d4d5420, 0x337d2: 0x6d4d5620, 0x337d3: 0x6d4d5820, + 0x337d4: 0x6d4d5a20, 0x337d5: 0x6d4d5c20, 0x337d6: 0x6d7a4220, 0x337d7: 0x6d7a4420, + 0x337d8: 0x6d7a4620, 0x337d9: 0x6d7a4820, 0x337da: 0x6d7a4a20, 0x337db: 0x6da2d620, + 0x337dc: 0x6da2d820, 0x337dd: 0x6e0d6020, 0x337de: 0x6e0d6220, 0x337df: 0x6e1cc820, + 0x337e0: 0x6e1cca20, 0x337e1: 0x6e387220, 0x337e2: 0x6e387420, 0x337e3: 0x6c01b420, + 0x337e4: 0x6c085620, 0x337e5: 0x6c085820, 0x337e6: 0x6c085a20, 0x337e7: 0x6c085c20, + 0x337e8: 0x6c085e20, 0x337e9: 0x6c101020, 0x337ea: 0x6c101220, 0x337eb: 0x6c101420, + 0x337ec: 0x6c101620, 0x337ed: 0x6c101820, 0x337ee: 0x6c101a20, 0x337ef: 0x6c101c20, + 0x337f0: 0x6c101e20, 0x337f1: 0x6c102020, 0x337f2: 0x6c102220, 0x337f3: 0x6c102420, + 0x337f4: 0x6c086020, 0x337f5: 0x6c1d0620, 0x337f6: 0x6c1d0820, 0x337f7: 0x6c1d0a20, + 0x337f8: 0x6c1d0c20, 0x337f9: 0x6c1d0e20, 0x337fa: 0x6c1d1020, 0x337fb: 0x6c1d1220, + 0x337fc: 0x6c1d1420, 0x337fd: 0x6c1d1620, 0x337fe: 0x6c309420, 0x337ff: 0x6c309620, + // Block 0xce0, offset 0x33800 + 0x33800: 0x6c309820, 0x33801: 0x6c309a20, 0x33802: 0x6c309c20, 0x33803: 0x6c309e20, + 0x33804: 0x6c30a020, 0x33805: 0x6c30a220, 0x33806: 0x6c30a420, 0x33807: 0x6c30a620, + 0x33808: 0x6c30a820, 0x33809: 0x6c30aa20, 0x3380a: 0x6c30ac20, 0x3380b: 0x6c30ae20, + 0x3380c: 0x6c4ae020, 0x3380d: 0x6c4ae220, 0x3380e: 0x6c4ae420, 0x3380f: 0x6c4ae620, + 0x33810: 0x6c4ae820, 0x33811: 0x6c4aea20, 0x33812: 0x6c4aec20, 0x33813: 0x6c4aee20, + 0x33814: 0x6c4af020, 0x33815: 0x6c4af220, 0x33816: 0x6c4af420, 0x33817: 0x6c4af620, + 0x33818: 0x6c4af820, 0x33819: 0x6c4afa20, 0x3381a: 0x6c4afc20, 0x3381b: 0x6c4afe20, + 0x3381c: 0x6c4b0020, 0x3381d: 0x6c4b0220, 0x3381e: 0x6c4b0420, 0x3381f: 0x6c4b0620, + 0x33820: 0x6c4b0820, 0x33821: 0x6c4b0a20, 0x33822: 0x6c6cc020, 0x33823: 0x6c6cc220, + 0x33824: 0x6c6cc420, 0x33825: 0x6c6cc620, 0x33826: 0x6c6cc820, 0x33827: 0x6c6cca20, + 0x33828: 0x6c6ccc20, 0x33829: 0x6c6cce20, 0x3382a: 0x6c6cd020, 0x3382b: 0x6c6cd220, + 0x3382c: 0x6c6cd420, 0x3382d: 0x6c6cd620, 0x3382e: 0x6c6cd820, 0x3382f: 0x6c6cda20, + 0x33830: 0x6c6cdc20, 0x33831: 0x6c6cde20, 0x33832: 0x6c6ce020, 0x33833: 0x6c6ce220, + 0x33834: 0x6c6ce420, 0x33835: 0x6c6ce620, 0x33836: 0x6c6ce820, 0x33837: 0x6c6cea20, + 0x33838: 0x6c6cec20, 0x33839: 0x6c6cee20, 0x3383a: 0x6c93da20, 0x3383b: 0x6c93dc20, + 0x3383c: 0x6c93de20, 0x3383d: 0x6c93e020, 0x3383e: 0x6c93e220, 0x3383f: 0x6c93e420, + // Block 0xce1, offset 0x33840 + 0x33840: 0x6c93e620, 0x33841: 0x6c93e820, 0x33842: 0x6c93ea20, 0x33843: 0x6c93ec20, + 0x33844: 0x6c93ee20, 0x33845: 0x6c93f020, 0x33846: 0x6c93f220, 0x33847: 0x6c93f420, + 0x33848: 0x6c93f620, 0x33849: 0x6c93f820, 0x3384a: 0x6c93fa20, 0x3384b: 0x6c93fc20, + 0x3384c: 0x6c93fe20, 0x3384d: 0x6c940020, 0x3384e: 0x6c940220, 0x3384f: 0x6c940420, + 0x33850: 0x6c940620, 0x33851: 0x6c940820, 0x33852: 0x6c940a20, 0x33853: 0x6c940c20, + 0x33854: 0x6cc02a20, 0x33855: 0x6cc02c20, 0x33856: 0x6cc02e20, 0x33857: 0x6cc03020, + 0x33858: 0x6cc03220, 0x33859: 0x6cc03420, 0x3385a: 0x6cc03620, 0x3385b: 0x6cc03820, + 0x3385c: 0x6cc03a20, 0x3385d: 0x6cc03c20, 0x3385e: 0x6cc03e20, 0x3385f: 0x6cc04020, + 0x33860: 0x6cc04220, 0x33861: 0x6cc04420, 0x33862: 0x6cc04620, 0x33863: 0x6cc04820, + 0x33864: 0x6cc04a20, 0x33865: 0x6cc04c20, 0x33866: 0x6cc04e20, 0x33867: 0x6cc05020, + 0x33868: 0x6cc05220, 0x33869: 0x6cc05420, 0x3386a: 0x6cc05620, 0x3386b: 0x6cc05820, + 0x3386c: 0x6cf02e20, 0x3386d: 0x6cf03020, 0x3386e: 0x6cf03220, 0x3386f: 0x6cf03420, + 0x33870: 0x6cf03620, 0x33871: 0x6cf03820, 0x33872: 0x6cf03a20, 0x33873: 0x6cf03c20, + 0x33874: 0x6cf03e20, 0x33875: 0x6cf04020, 0x33876: 0x6cf04220, 0x33877: 0x6cf04420, + 0x33878: 0x6cf04620, 0x33879: 0x6cf04820, 0x3387a: 0x6cf04a20, 0x3387b: 0x6cf04c20, + 0x3387c: 0x6cf04e20, 0x3387d: 0x6cf05020, 0x3387e: 0x6cf05220, 0x3387f: 0x6cf05420, + // Block 0xce2, offset 0x33880 + 0x33880: 0x6cf05620, 0x33881: 0x6cf05820, 0x33882: 0x6cf05a20, 0x33883: 0x6cf05c20, + 0x33884: 0x6d1fe420, 0x33885: 0x6d1fe620, 0x33886: 0x6d1fe820, 0x33887: 0x6d1fea20, + 0x33888: 0x6d1fec20, 0x33889: 0x6d1fee20, 0x3388a: 0x6d1ff020, 0x3388b: 0x6d1ff220, + 0x3388c: 0x6d1ff420, 0x3388d: 0x6d1ff620, 0x3388e: 0x6d1ff820, 0x3388f: 0x6d1ffa20, + 0x33890: 0x6d4d6a20, 0x33891: 0x6d4d6c20, 0x33892: 0x6d4d6e20, 0x33893: 0x6d4d7020, + 0x33894: 0x6d4d7220, 0x33895: 0x6d4d7420, 0x33896: 0x6d4d7620, 0x33897: 0x6d4d7820, + 0x33898: 0x6d4d7a20, 0x33899: 0x6d4d7c20, 0x3389a: 0x6d4d7e20, 0x3389b: 0x6d4d8020, + 0x3389c: 0x6d4d8220, 0x3389d: 0x6d4d8420, 0x3389e: 0x6d4d8620, 0x3389f: 0x6d7a4c20, + 0x338a0: 0x6d7a4e20, 0x338a1: 0x6d7a5020, 0x338a2: 0x6d7a5220, 0x338a3: 0x6d7a5420, + 0x338a4: 0x6d7a5620, 0x338a5: 0x6d7a5820, 0x338a6: 0x6d7a5a20, 0x338a7: 0x6d7a5c20, + 0x338a8: 0x6da2dc20, 0x338a9: 0x6da2de20, 0x338aa: 0x6dc4ca20, 0x338ab: 0x6dc4cc20, + 0x338ac: 0x6de1c220, 0x338ad: 0x6de1c420, 0x338ae: 0x6de1c620, 0x338af: 0x6de1c820, + 0x338b0: 0x6de1ca20, 0x338b1: 0x6df9a820, 0x338b2: 0x6df9aa20, 0x338b3: 0x6df9ac20, + 0x338b4: 0x6df9ae20, 0x338b5: 0x6e0d6620, 0x338b6: 0x6e0d6820, 0x338b7: 0x6e0d6a20, + 0x338b8: 0x6e1ccc20, 0x338b9: 0x6e1cce20, 0x338ba: 0x6e1cd020, 0x338bb: 0x6e31f220, + 0x338bc: 0x6e387620, 0x338bd: 0x6e387820, 0x338be: 0x6c01b820, 0x338bf: 0x6c086220, + // Block 0xce3, offset 0x338c0 + 0x338c0: 0x6c102a20, 0x338c1: 0x6c102c20, 0x338c2: 0x6c102e20, 0x338c3: 0x6c103020, + 0x338c4: 0x6c103220, 0x338c5: 0x6c103420, 0x338c6: 0x6c1d2220, 0x338c7: 0x6c1d2420, + 0x338c8: 0x6c1d2620, 0x338c9: 0x6c1d2820, 0x338ca: 0x6c1d2a20, 0x338cb: 0x6c30b220, + 0x338cc: 0x6c30b420, 0x338cd: 0x6c30b620, 0x338ce: 0x6c4b1220, 0x338cf: 0x6c4b1420, + 0x338d0: 0x6c4b1620, 0x338d1: 0x6c4b1820, 0x338d2: 0x6c4b1a20, 0x338d3: 0x6c4b1c20, + 0x338d4: 0x6c4b1e20, 0x338d5: 0x6c6cf420, 0x338d6: 0x6c6cf620, 0x338d7: 0x6c6cf820, + 0x338d8: 0x6c6cfa20, 0x338d9: 0x6c6cfc20, 0x338da: 0x6c6cfe20, 0x338db: 0x6c941220, + 0x338dc: 0x6c941420, 0x338dd: 0x6cc06220, 0x338de: 0x6cc06420, 0x338df: 0x6cc06620, + 0x338e0: 0x6cc06820, 0x338e1: 0x6cc06a20, 0x338e2: 0x6cc06c20, 0x338e3: 0x6cc06e20, + 0x338e4: 0x6cf06420, 0x338e5: 0x6cf06620, 0x338e6: 0x6d4d8c20, 0x338e7: 0x6d4d8e20, + 0x338e8: 0x6d4d9020, 0x338e9: 0x6d4d9220, 0x338ea: 0x6dc4ce20, 0x338eb: 0x6e0d6c20, + 0x338ec: 0x6e1cd420, 0x338ed: 0x6c041420, 0x338ee: 0x6c041620, 0x338ef: 0x6c041820, + 0x338f0: 0x6c087620, 0x338f1: 0x6c087820, 0x338f2: 0x6c087a20, 0x338f3: 0x6c087c20, + 0x338f4: 0x6c087e20, 0x338f5: 0x6c088020, 0x338f6: 0x6c088220, 0x338f7: 0x6c088420, + 0x338f8: 0x6c088620, 0x338f9: 0x6c088820, 0x338fa: 0x6c088a20, 0x338fb: 0x6c088c20, + 0x338fc: 0x6c088e20, 0x338fd: 0x6c089020, 0x338fe: 0x6c105e20, 0x338ff: 0x6c106020, + // Block 0xce4, offset 0x33900 + 0x33900: 0x6c106220, 0x33901: 0x6c106420, 0x33902: 0x6c106620, 0x33903: 0x6c106820, + 0x33904: 0x6c106a20, 0x33905: 0x6c106c20, 0x33906: 0x6c106e20, 0x33907: 0x6c107020, + 0x33908: 0x6c107220, 0x33909: 0x6c107420, 0x3390a: 0x6c107620, 0x3390b: 0x6c107820, + 0x3390c: 0x6c107a20, 0x3390d: 0x6c107c20, 0x3390e: 0x6c107e20, 0x3390f: 0x6c108020, + 0x33910: 0x6c108220, 0x33911: 0x6c108420, 0x33912: 0x6c108620, 0x33913: 0x6c1d6c20, + 0x33914: 0x6c1d6e20, 0x33915: 0x6c1d7020, 0x33916: 0x6c1d7220, 0x33917: 0x6c1d7420, + 0x33918: 0x6c1d7620, 0x33919: 0x6c1d7820, 0x3391a: 0x6c1d7a20, 0x3391b: 0x6c1d7c20, + 0x3391c: 0x6c1d7e20, 0x3391d: 0x6c1d8020, 0x3391e: 0x6c1d8220, 0x3391f: 0x6c1d8420, + 0x33920: 0x6c1d8620, 0x33921: 0x6c1d8820, 0x33922: 0x6c1d8a20, 0x33923: 0x6c1d8c20, + 0x33924: 0x6c1d8e20, 0x33925: 0x6c1d9020, 0x33926: 0x6c1d9220, 0x33927: 0x6c1d9420, + 0x33928: 0x6c1d9620, 0x33929: 0x6c1d9820, 0x3392a: 0x6c1d9a20, 0x3392b: 0x6c1d9c20, + 0x3392c: 0x6c1d9e20, 0x3392d: 0x6c1da020, 0x3392e: 0x6c1da220, 0x3392f: 0x6c1da420, + 0x33930: 0x6c1da620, 0x33931: 0x6c1da820, 0x33932: 0x6c1daa20, 0x33933: 0x6c1dac20, + 0x33934: 0x6c1dae20, 0x33935: 0x6c1db020, 0x33936: 0x6c1db220, 0x33937: 0x6c1db420, + 0x33938: 0x6c1db620, 0x33939: 0x6c1db820, 0x3393a: 0x6c1dba20, 0x3393b: 0x6c1dbc20, + 0x3393c: 0x6c1dbe20, 0x3393d: 0x6c1dc020, 0x3393e: 0x6c1dc220, 0x3393f: 0x6c1dc420, + // Block 0xce5, offset 0x33940 + 0x33940: 0x6c1dc620, 0x33941: 0x6c1dc820, 0x33942: 0x6c1dca20, 0x33943: 0x6c312020, + 0x33944: 0x6c312220, 0x33945: 0x6c312420, 0x33946: 0x6c312620, 0x33947: 0x6c312820, + 0x33948: 0x6c312a20, 0x33949: 0x6c312c20, 0x3394a: 0x6c312e20, 0x3394b: 0x6c313020, + 0x3394c: 0x6c313220, 0x3394d: 0x6c313420, 0x3394e: 0x6c313620, 0x3394f: 0x6c313820, + 0x33950: 0x6c313a20, 0x33951: 0x6c313c20, 0x33952: 0x6c313e20, 0x33953: 0x6c314020, + 0x33954: 0x6c314220, 0x33955: 0x6c314420, 0x33956: 0x6c314620, 0x33957: 0x6c314820, + 0x33958: 0x6c314a20, 0x33959: 0x6c314c20, 0x3395a: 0x6c314e20, 0x3395b: 0x6c315020, + 0x3395c: 0x6c315220, 0x3395d: 0x6c315420, 0x3395e: 0x6c315620, 0x3395f: 0x6c315820, + 0x33960: 0x6c315a20, 0x33961: 0x6c315c20, 0x33962: 0x6c315e20, 0x33963: 0x6c316020, + 0x33964: 0x6c3bdc20, 0x33965: 0x6c316220, 0x33966: 0x6c316420, 0x33967: 0x6c316620, + 0x33968: 0x6c316820, 0x33969: 0x6c316a20, 0x3396a: 0x6c316c20, 0x3396b: 0x6c4b6a20, + 0x3396c: 0x6c4b6c20, 0x3396d: 0x6c4b6e20, 0x3396e: 0x6c4b7020, 0x3396f: 0x6c4b7220, + 0x33970: 0x6c4b7420, 0x33971: 0x6c4b7620, 0x33972: 0x6c4b7820, 0x33973: 0x6c4b7a20, + 0x33974: 0x6c4b7c20, 0x33975: 0x6c4b7e20, 0x33976: 0x6c4b8020, 0x33977: 0x6c4b8220, + 0x33978: 0x6c4b8420, 0x33979: 0x6c4b8620, 0x3397a: 0x6c4b8820, 0x3397b: 0x6c4b8a20, + 0x3397c: 0x6c4b8c20, 0x3397d: 0x6c4b8e20, 0x3397e: 0x6c4b9020, 0x3397f: 0x6c4b9220, + // Block 0xce6, offset 0x33980 + 0x33980: 0x6c4b9420, 0x33981: 0x6c4b9620, 0x33982: 0x6c4b9820, 0x33983: 0x6c4b9a20, + 0x33984: 0x6c4b9c20, 0x33985: 0x6c4b9e20, 0x33986: 0x6c4ba020, 0x33987: 0x6c4ba220, + 0x33988: 0x6c4ba420, 0x33989: 0x6c4ba620, 0x3398a: 0x6c4ba820, 0x3398b: 0x6c4baa20, + 0x3398c: 0x6c4bac20, 0x3398d: 0x6c4bae20, 0x3398e: 0x6c4bb020, 0x3398f: 0x6c4bb220, + 0x33990: 0x6c4bb420, 0x33991: 0x6c4bb620, 0x33992: 0x6c4bb820, 0x33993: 0x6c4bba20, + 0x33994: 0x6c4bbc20, 0x33995: 0x6c6d5a20, 0x33996: 0x6c6d5c20, 0x33997: 0x6c6d5e20, + 0x33998: 0x6c6d6020, 0x33999: 0x6c6d6220, 0x3399a: 0x6c6d6420, 0x3399b: 0x6c6d6620, + 0x3399c: 0x6c6d6820, 0x3399d: 0x6c6d6a20, 0x3399e: 0x6c6d6c20, 0x3399f: 0x6c6d6e20, + 0x339a0: 0x6c6d7020, 0x339a1: 0x6c6d7220, 0x339a2: 0x6c6d7420, 0x339a3: 0x6c6d7620, + 0x339a4: 0x6c6d7820, 0x339a5: 0x6c6d7a20, 0x339a6: 0x6c6d7c20, 0x339a7: 0x6c6d7e20, + 0x339a8: 0x6c6d8020, 0x339a9: 0x6c6d8220, 0x339aa: 0x6c6d8420, 0x339ab: 0x6c6d8620, + 0x339ac: 0x6c6d8820, 0x339ad: 0x6c6d8a20, 0x339ae: 0x6c6d8c20, 0x339af: 0x6c6d8e20, + 0x339b0: 0x6c6d9020, 0x339b1: 0x6c6d9220, 0x339b2: 0x6c6d9420, 0x339b3: 0x6c6d9620, + 0x339b4: 0x6c6d9820, 0x339b5: 0x6c6d9a20, 0x339b6: 0x6c6d9c20, 0x339b7: 0x6c6d9e20, + 0x339b8: 0x6c6da020, 0x339b9: 0x6c6da220, 0x339ba: 0x6c6da420, 0x339bb: 0x6c6da620, + 0x339bc: 0x6c6da820, 0x339bd: 0x6c6daa20, 0x339be: 0x6c6dac20, 0x339bf: 0x6c6dae20, + // Block 0xce7, offset 0x339c0 + 0x339c0: 0x6c6db020, 0x339c1: 0x6c6db220, 0x339c2: 0x6c6db420, 0x339c3: 0x6c6db620, + 0x339c4: 0x6c6db820, 0x339c5: 0x6c6dba20, 0x339c6: 0x6c6dbc20, 0x339c7: 0x6c6dbe20, + 0x339c8: 0x6c6dc020, 0x339c9: 0x6c6dc220, 0x339ca: 0x6c6dc420, 0x339cb: 0x6c6dc620, + 0x339cc: 0x6c6dc820, 0x339cd: 0x6c6dca20, 0x339ce: 0x6c6dcc20, 0x339cf: 0x6c6dce20, + 0x339d0: 0x6c6dd020, 0x339d1: 0x6c948a20, 0x339d2: 0x6c948c20, 0x339d3: 0x6c948e20, + 0x339d4: 0x6c949020, 0x339d5: 0x6c949220, 0x339d6: 0x6c949420, 0x339d7: 0x6c949620, + 0x339d8: 0x6c949820, 0x339d9: 0x6c949a20, 0x339da: 0x6c949c20, 0x339db: 0x6c949e20, + 0x339dc: 0x6c94a020, 0x339dd: 0x6c94a220, 0x339de: 0x6c94a420, 0x339df: 0x6c94a620, + 0x339e0: 0x6c94a820, 0x339e1: 0x6c94aa20, 0x339e2: 0x6c94ac20, 0x339e3: 0x6c94ae20, + 0x339e4: 0x6c94b020, 0x339e5: 0x6c94b220, 0x339e6: 0x6c94b420, 0x339e7: 0x6c94b620, + 0x339e8: 0x6c94b820, 0x339e9: 0x6c94ba20, 0x339ea: 0x6c94bc20, 0x339eb: 0x6c94be20, + 0x339ec: 0x6c94c020, 0x339ed: 0x6c94c220, 0x339ee: 0x6c94c420, 0x339ef: 0x6c94c620, + 0x339f0: 0x6c94c820, 0x339f1: 0x6c94ca20, 0x339f2: 0x6c94cc20, 0x339f3: 0x6c94ce20, + 0x339f4: 0x6c94d020, 0x339f5: 0x6c94d220, 0x339f6: 0x6c94d420, 0x339f7: 0x6c94d620, + 0x339f8: 0x6c94d820, 0x339f9: 0x6c94da20, 0x339fa: 0x6c94dc20, 0x339fb: 0x6c94de20, + 0x339fc: 0x6c94e020, 0x339fd: 0x6c94e220, 0x339fe: 0x6c94e420, 0x339ff: 0x6c94e620, + // Block 0xce8, offset 0x33a00 + 0x33a00: 0x6c94e820, 0x33a01: 0x6c94ea20, 0x33a02: 0x6c94ec20, 0x33a03: 0x6c94ee20, + 0x33a04: 0x6c94f020, 0x33a05: 0x6c94f220, 0x33a06: 0x6c94f420, 0x33a07: 0x6c94f620, + 0x33a08: 0x6c94f820, 0x33a09: 0x6c94fa20, 0x33a0a: 0x6c94fc20, 0x33a0b: 0x6c94fe20, + 0x33a0c: 0x6c950020, 0x33a0d: 0x6c950220, 0x33a0e: 0x6c950420, 0x33a0f: 0x6c950620, + 0x33a10: 0x6c950820, 0x33a11: 0x6c950a20, 0x33a12: 0x6c950c20, 0x33a13: 0x6c950e20, + 0x33a14: 0x6c951020, 0x33a15: 0x6c951220, 0x33a16: 0x6c951420, 0x33a17: 0x6c951620, + 0x33a18: 0x6c951820, 0x33a19: 0x6c951a20, 0x33a1a: 0x6c951c20, 0x33a1b: 0x6c951e20, + 0x33a1c: 0x6c952020, 0x33a1d: 0x6c952220, 0x33a1e: 0x6c952420, 0x33a1f: 0x6c952620, + 0x33a20: 0x6c952820, 0x33a21: 0x6c952a20, 0x33a22: 0x6c952c20, 0x33a23: 0x6c952e20, + 0x33a24: 0x6c953020, 0x33a25: 0x6c953220, 0x33a26: 0x6c953420, 0x33a27: 0x6c953620, + 0x33a28: 0x6c953820, 0x33a29: 0x6c953a20, 0x33a2a: 0x6cc0de20, 0x33a2b: 0x6cc0e020, + 0x33a2c: 0x6cc0e220, 0x33a2d: 0x6cc0e420, 0x33a2e: 0x6cc0e620, 0x33a2f: 0x6cc0e820, + 0x33a30: 0x6cc0ea20, 0x33a31: 0x6cc0ec20, 0x33a32: 0x6cc0ee20, 0x33a33: 0x6cc0f020, + 0x33a34: 0x6cc0f220, 0x33a35: 0x6cc0f420, 0x33a36: 0x6cc0f620, 0x33a37: 0x6cc0f820, + 0x33a38: 0x6cc0fa20, 0x33a39: 0x6cc0fc20, 0x33a3a: 0x6cc0fe20, 0x33a3b: 0x6cc10020, + 0x33a3c: 0x6cc10220, 0x33a3d: 0x6cc10420, 0x33a3e: 0x6cc10620, 0x33a3f: 0x6cc10820, + // Block 0xce9, offset 0x33a40 + 0x33a40: 0x6cc10a20, 0x33a41: 0x6cc10c20, 0x33a42: 0x6cc10e20, 0x33a43: 0x6cc11020, + 0x33a44: 0x6cc11220, 0x33a45: 0x6cc11420, 0x33a46: 0x6cc11620, 0x33a47: 0x6cc11820, + 0x33a48: 0x6cc11a20, 0x33a49: 0x6cc11c20, 0x33a4a: 0x6cc11e20, 0x33a4b: 0x6cc12020, + 0x33a4c: 0x6cc12220, 0x33a4d: 0x6cc12420, 0x33a4e: 0x6cc12620, 0x33a4f: 0x6cc12820, + 0x33a50: 0x6cc12a20, 0x33a51: 0x6cc12c20, 0x33a52: 0x6cc12e20, 0x33a53: 0x6cc13020, + 0x33a54: 0x6cc13220, 0x33a55: 0x6cc13420, 0x33a56: 0x6cc13620, 0x33a57: 0x6cc13820, + 0x33a58: 0x6cc13a20, 0x33a59: 0x6cc13c20, 0x33a5a: 0x6cc13e20, 0x33a5b: 0x6cc14020, + 0x33a5c: 0x6cc14220, 0x33a5d: 0x6cc14420, 0x33a5e: 0x6cc14620, 0x33a5f: 0x6cc14820, + 0x33a60: 0x6cc14a20, 0x33a61: 0x6cc14c20, 0x33a62: 0x6cc14e20, 0x33a63: 0x6cc15020, + 0x33a64: 0x6cc15220, 0x33a65: 0x6cc15420, 0x33a66: 0x6cc15620, 0x33a67: 0x6cc15820, + 0x33a68: 0x6cc15a20, 0x33a69: 0x6cc15c20, 0x33a6a: 0x6cf0ac20, 0x33a6b: 0x6cf0ae20, + 0x33a6c: 0x6cf0b020, 0x33a6d: 0x6cf0b220, 0x33a6e: 0x6cf0b420, 0x33a6f: 0x6cf0b620, + 0x33a70: 0x6cf0b820, 0x33a71: 0x6cf0ba20, 0x33a72: 0x6cf0bc20, 0x33a73: 0x6cf0be20, + 0x33a74: 0x6cf0c020, 0x33a75: 0x6cf0c220, 0x33a76: 0x6cf0c420, 0x33a77: 0x6cf0c620, + 0x33a78: 0x6cf0c820, 0x33a79: 0x6cf0ca20, 0x33a7a: 0x6cf0cc20, 0x33a7b: 0x6cf0ce20, + 0x33a7c: 0x6cf0d020, 0x33a7d: 0x6cf0d220, 0x33a7e: 0x6cf0d420, 0x33a7f: 0x6cf0d620, + // Block 0xcea, offset 0x33a80 + 0x33a80: 0x6cf0d820, 0x33a81: 0x6cf0da20, 0x33a82: 0x6cf0dc20, 0x33a83: 0x6cf0de20, + 0x33a84: 0x6cf0e020, 0x33a85: 0x6cf0e220, 0x33a86: 0x6cf0e420, 0x33a87: 0x6cf0e620, + 0x33a88: 0x6cf0e820, 0x33a89: 0x6cf0ea20, 0x33a8a: 0x6cf0ec20, 0x33a8b: 0x6cf0ee20, + 0x33a8c: 0x6cf0f020, 0x33a8d: 0x6cf0f220, 0x33a8e: 0x6cf0f420, 0x33a8f: 0x6cf0f620, + 0x33a90: 0x6cf0f820, 0x33a91: 0x6cf0fa20, 0x33a92: 0x6cf0fc20, 0x33a93: 0x6cf0fe20, + 0x33a94: 0x6cf10020, 0x33a95: 0x6cf10220, 0x33a96: 0x6cf10420, 0x33a97: 0x6cf10620, + 0x33a98: 0x6d204820, 0x33a99: 0x6d204a20, 0x33a9a: 0x6d204c20, 0x33a9b: 0x6d204e20, + 0x33a9c: 0x6d205020, 0x33a9d: 0x6d205220, 0x33a9e: 0x6d205420, 0x33a9f: 0x6d205620, + 0x33aa0: 0x6d205820, 0x33aa1: 0x6d205a20, 0x33aa2: 0x6d205c20, 0x33aa3: 0x6d205e20, + 0x33aa4: 0x6d206020, 0x33aa5: 0x6d206220, 0x33aa6: 0x6d206420, 0x33aa7: 0x6d206620, + 0x33aa8: 0x6d206820, 0x33aa9: 0x6d206a20, 0x33aaa: 0x6d206c20, 0x33aab: 0x6d206e20, + 0x33aac: 0x6d207020, 0x33aad: 0x6d207220, 0x33aae: 0x6d207420, 0x33aaf: 0x6d207620, + 0x33ab0: 0x6d207820, 0x33ab1: 0x6d207a20, 0x33ab2: 0x6d207c20, 0x33ab3: 0x6d207e20, + 0x33ab4: 0x6d208020, 0x33ab5: 0x6d208220, 0x33ab6: 0x6d208420, 0x33ab7: 0x6d208620, + 0x33ab8: 0x6d208820, 0x33ab9: 0x6d208a20, 0x33aba: 0x6d208c20, 0x33abb: 0x6d208e20, + 0x33abc: 0x6d209020, 0x33abd: 0x6d209220, 0x33abe: 0x6d209420, 0x33abf: 0x6d209620, + // Block 0xceb, offset 0x33ac0 + 0x33ac0: 0x6d209820, 0x33ac1: 0x6d209a20, 0x33ac2: 0x6d209c20, 0x33ac3: 0x6d209e20, + 0x33ac4: 0x6d20a020, 0x33ac5: 0x6d20a220, 0x33ac6: 0x6d20a420, 0x33ac7: 0x6d20a620, + 0x33ac8: 0x6d20a820, 0x33ac9: 0x6d20aa20, 0x33aca: 0x6d4dda20, 0x33acb: 0x6d4ddc20, + 0x33acc: 0x6d4dde20, 0x33acd: 0x6d4de020, 0x33ace: 0x6d4de220, 0x33acf: 0x6d4de420, + 0x33ad0: 0x6d4de620, 0x33ad1: 0x6d4de820, 0x33ad2: 0x6d4dea20, 0x33ad3: 0x6d4dec20, + 0x33ad4: 0x6d4dee20, 0x33ad5: 0x6d4df020, 0x33ad6: 0x6d4df220, 0x33ad7: 0x6d4df420, + 0x33ad8: 0x6d4df620, 0x33ad9: 0x6d4df820, 0x33ada: 0x6d4dfa20, 0x33adb: 0x6d4dfc20, + 0x33adc: 0x6d4dfe20, 0x33add: 0x6d4e0020, 0x33ade: 0x6d4e0220, 0x33adf: 0x6d4e0420, + 0x33ae0: 0x6d4e0620, 0x33ae1: 0x6d4e0820, 0x33ae2: 0x6d4e0a20, 0x33ae3: 0x6d4e0c20, + 0x33ae4: 0x6d4e0e20, 0x33ae5: 0x6d4e1020, 0x33ae6: 0x6d4e1220, 0x33ae7: 0x6d4e1420, + 0x33ae8: 0x6d4e1620, 0x33ae9: 0x6d4e1820, 0x33aea: 0x6d4e1a20, 0x33aeb: 0x6d4e1c20, + 0x33aec: 0x6d4e1e20, 0x33aed: 0x6d4e2020, 0x33aee: 0x6d4e2220, 0x33aef: 0x6d4e2420, + 0x33af0: 0x6d4e2620, 0x33af1: 0x6d4e2820, 0x33af2: 0x6d4e2a20, 0x33af3: 0x6d4e2c20, + 0x33af4: 0x6d4e2e20, 0x33af5: 0x6d4e3020, 0x33af6: 0x6d4e3220, 0x33af7: 0x6d4e3420, + 0x33af8: 0x6d4e3620, 0x33af9: 0x6d4e3820, 0x33afa: 0x6d4e3a20, 0x33afb: 0x6d4e3c20, + 0x33afc: 0x6d4e3e20, 0x33afd: 0x6d7a9020, 0x33afe: 0x6d7a9220, 0x33aff: 0x6d7a9420, + // Block 0xcec, offset 0x33b00 + 0x33b00: 0x6d7a9620, 0x33b01: 0x6d7a9820, 0x33b02: 0x6d7a9a20, 0x33b03: 0x6d7a9c20, + 0x33b04: 0x6d7a9e20, 0x33b05: 0x6d7aa020, 0x33b06: 0x6d7aa220, 0x33b07: 0x6d7aa420, + 0x33b08: 0x6d7aa620, 0x33b09: 0x6da2fc20, 0x33b0a: 0x6d7aa820, 0x33b0b: 0x6d7aaa20, + 0x33b0c: 0x6d7aac20, 0x33b0d: 0x6d7aae20, 0x33b0e: 0x6d7ab020, 0x33b0f: 0x6d7ab220, + 0x33b10: 0x6d7ab420, 0x33b11: 0x6d7ab620, 0x33b12: 0x6d7ab820, 0x33b13: 0x6d7aba20, + 0x33b14: 0x6d7abc20, 0x33b15: 0x6d7abe20, 0x33b16: 0x6d7ac020, 0x33b17: 0x6d7ac220, + 0x33b18: 0x6d7ac420, 0x33b19: 0x6d7ac620, 0x33b1a: 0x6d7ac820, 0x33b1b: 0x6d7aca20, + 0x33b1c: 0x6da2fe20, 0x33b1d: 0x6da30020, 0x33b1e: 0x6da30220, 0x33b1f: 0x6da30420, + 0x33b20: 0x6da30620, 0x33b21: 0x6da30820, 0x33b22: 0x6da30a20, 0x33b23: 0x6da30c20, + 0x33b24: 0x6da30e20, 0x33b25: 0x6da31020, 0x33b26: 0x6da31220, 0x33b27: 0x6da31420, + 0x33b28: 0x6da31620, 0x33b29: 0x6da31820, 0x33b2a: 0x6da31a20, 0x33b2b: 0x6da31c20, + 0x33b2c: 0x6da31e20, 0x33b2d: 0x6da32020, 0x33b2e: 0x6da32220, 0x33b2f: 0x6da32420, + 0x33b30: 0x6da32620, 0x33b31: 0x6da32820, 0x33b32: 0x6da32a20, 0x33b33: 0x6da32c20, + 0x33b34: 0x6da32e20, 0x33b35: 0x6da33020, 0x33b36: 0x6da33220, 0x33b37: 0x6da33420, + 0x33b38: 0x6da33620, 0x33b39: 0x6da33820, 0x33b3a: 0x6da33a20, 0x33b3b: 0x6da33c20, + 0x33b3c: 0x6da33e20, 0x33b3d: 0x6da34020, 0x33b3e: 0x6da34220, 0x33b3f: 0x6da34420, + // Block 0xced, offset 0x33b40 + 0x33b40: 0x6da34620, 0x33b41: 0x6da34820, 0x33b42: 0x6dc4dc20, 0x33b43: 0x6dc4de20, + 0x33b44: 0x6dc4e020, 0x33b45: 0x6dc4e220, 0x33b46: 0x6dc4e420, 0x33b47: 0x6dc4e620, + 0x33b48: 0x6dc4e820, 0x33b49: 0x6dc4ea20, 0x33b4a: 0x6dc4ec20, 0x33b4b: 0x6dc4ee20, + 0x33b4c: 0x6dc4f020, 0x33b4d: 0x6dc4f220, 0x33b4e: 0x6dc4f420, 0x33b4f: 0x6dc4f620, + 0x33b50: 0x6dc4f820, 0x33b51: 0x6dc4fa20, 0x33b52: 0x6dc4fc20, 0x33b53: 0x6dc4fe20, + 0x33b54: 0x6dc50020, 0x33b55: 0x6dc50220, 0x33b56: 0x6dc50420, 0x33b57: 0x6dc45020, + 0x33b58: 0x6de1de20, 0x33b59: 0x6de1e020, 0x33b5a: 0x6de1e220, 0x33b5b: 0x6de1e420, + 0x33b5c: 0x6de1e620, 0x33b5d: 0x6de1e820, 0x33b5e: 0x6de1ea20, 0x33b5f: 0x6de1ec20, + 0x33b60: 0x6dc50620, 0x33b61: 0x6de1ee20, 0x33b62: 0x6de1f020, 0x33b63: 0x6de1f220, + 0x33b64: 0x6de1f420, 0x33b65: 0x6de1f620, 0x33b66: 0x6de1f820, 0x33b67: 0x6de1fa20, + 0x33b68: 0x6de1fc20, 0x33b69: 0x6de1fe20, 0x33b6a: 0x6de20020, 0x33b6b: 0x6de20220, + 0x33b6c: 0x6de20420, 0x33b6d: 0x6de20620, 0x33b6e: 0x6df9be20, 0x33b6f: 0x6df9c020, + 0x33b70: 0x6df9c220, 0x33b71: 0x6df9c420, 0x33b72: 0x6df9c620, 0x33b73: 0x6df9c820, + 0x33b74: 0x6df9ca20, 0x33b75: 0x6df9cc20, 0x33b76: 0x6df9ce20, 0x33b77: 0x6df9d020, + 0x33b78: 0x6df9d220, 0x33b79: 0x6df9d420, 0x33b7a: 0x6df9d620, 0x33b7b: 0x6da34a20, + 0x33b7c: 0x6e0d7a20, 0x33b7d: 0x6e0d7c20, 0x33b7e: 0x6e0d7e20, 0x33b7f: 0x6e0d8020, + // Block 0xcee, offset 0x33b80 + 0x33b80: 0x6e0d8220, 0x33b81: 0x6e0d8420, 0x33b82: 0x6e0d8620, 0x33b83: 0x6e0d8820, + 0x33b84: 0x6e0d8a20, 0x33b85: 0x6e0d8c20, 0x33b86: 0x6e0d8e20, 0x33b87: 0x6e1ce620, + 0x33b88: 0x6e1ce820, 0x33b89: 0x6e1cea20, 0x33b8a: 0x6e1cec20, 0x33b8b: 0x6e1cee20, + 0x33b8c: 0x6e1cf020, 0x33b8d: 0x6e1cf220, 0x33b8e: 0x6e1cf420, 0x33b8f: 0x6e1cf620, + 0x33b90: 0x6e1cf820, 0x33b91: 0x6e1cfa20, 0x33b92: 0x6e28b820, 0x33b93: 0x6e28ba20, + 0x33b94: 0x6e31f620, 0x33b95: 0x6e31f820, 0x33b96: 0x6e31fa20, 0x33b97: 0x6e31fc20, + 0x33b98: 0x6e31fe20, 0x33b99: 0x6e320020, 0x33b9a: 0x6e320220, 0x33b9b: 0x6e320420, + 0x33b9c: 0x6e320620, 0x33b9d: 0x6e387a20, 0x33b9e: 0x6e387c20, 0x33b9f: 0x6e387e20, + 0x33ba0: 0x6e402420, 0x33ba1: 0x6e402620, 0x33ba2: 0x6e429220, 0x33ba3: 0x6e402820, + 0x33ba4: 0x6e402a20, 0x33ba5: 0x6e462620, 0x33ba6: 0x6c01c020, 0x33ba7: 0x6c041a20, + 0x33ba8: 0x6c01c220, 0x33ba9: 0x6c109820, 0x33baa: 0x6c109a20, 0x33bab: 0x6c109c20, + 0x33bac: 0x6c109e20, 0x33bad: 0x6c10a020, 0x33bae: 0x6c1dd620, 0x33baf: 0x6c1dd820, + 0x33bb0: 0x6c1dda20, 0x33bb1: 0x6c317a20, 0x33bb2: 0x6c317c20, 0x33bb3: 0x6c317e20, + 0x33bb4: 0x6c318020, 0x33bb5: 0x6c318220, 0x33bb6: 0x6c318420, 0x33bb7: 0x6c4bce20, + 0x33bb8: 0x6c4bd020, 0x33bb9: 0x6c4bd220, 0x33bba: 0x6c4bd420, 0x33bbb: 0x6c4bd620, + 0x33bbc: 0x6c6de420, 0x33bbd: 0x6c6de620, 0x33bbe: 0x6c954e20, 0x33bbf: 0x6c955020, + // Block 0xcef, offset 0x33bc0 + 0x33bc0: 0x6c955220, 0x33bc1: 0x6cc16c20, 0x33bc2: 0x6d20ba20, 0x33bc3: 0x6d4e4a20, + 0x33bc4: 0x6d7ad420, 0x33bc5: 0x6d7ad620, 0x33bc6: 0x6d7ad820, 0x33bc7: 0x6da35420, + 0x33bc8: 0x6dc50820, 0x33bc9: 0x6de20c20, 0x33bca: 0x6de20e20, 0x33bcb: 0x6df9d820, + 0x33bcc: 0x6e1cfe20, 0x33bcd: 0x6e1d0020, 0x33bce: 0x6e320820, 0x33bcf: 0x6e402c20, + 0x33bd0: 0x6e442a20, 0x33bd1: 0x6c041e20, 0x33bd2: 0x6c042020, 0x33bd3: 0x6c042220, + 0x33bd4: 0x6c042420, 0x33bd5: 0x6c042620, 0x33bd6: 0x6c089820, 0x33bd7: 0x6c089a20, + 0x33bd8: 0x6c089c20, 0x33bd9: 0x6c089e20, 0x33bda: 0x6c10a620, 0x33bdb: 0x6c10a820, + 0x33bdc: 0x6c1de020, 0x33bdd: 0x6c1de220, 0x33bde: 0x6c1de420, 0x33bdf: 0x6c318620, + 0x33be0: 0x6c4bde20, 0x33be1: 0x6c6dee20, 0x33be2: 0x6c6df020, 0x33be3: 0x6c955420, + 0x33be4: 0x6cc17220, 0x33be5: 0x6cc17420, 0x33be6: 0x6cf11220, 0x33be7: 0x6cf11420, + 0x33be8: 0x6d4e4e20, 0x33be9: 0x6d4e5020, 0x33bea: 0x6d4e5220, 0x33beb: 0x6d4e5420, + 0x33bec: 0x6d7ada20, 0x33bed: 0x6da35620, 0x33bee: 0x6dc50a20, 0x33bef: 0x6de21020, + 0x33bf0: 0x6e0d9220, 0x33bf1: 0x6e0d9420, 0x33bf2: 0x6e0d9620, 0x33bf3: 0x6c042a20, + 0x33bf4: 0x6c08a220, 0x33bf5: 0x6c08a420, 0x33bf6: 0x6c10ac20, 0x33bf7: 0x6c318c20, + 0x33bf8: 0x6c318e20, 0x33bf9: 0x6c4bea20, 0x33bfa: 0x6c4bec20, 0x33bfb: 0x6c4bee20, + 0x33bfc: 0x6c6df420, 0x33bfd: 0x6c6df620, 0x33bfe: 0x6c6df820, 0x33bff: 0x6c6dfa20, + // Block 0xcf0, offset 0x33c00 + 0x33c00: 0x6c955a20, 0x33c01: 0x6c955c20, 0x33c02: 0x6c955e20, 0x33c03: 0x6c956020, + 0x33c04: 0x6c956220, 0x33c05: 0x6cc17a20, 0x33c06: 0x6cc17c20, 0x33c07: 0x6cc17e20, + 0x33c08: 0x6cc18020, 0x33c09: 0x6cc18220, 0x33c0a: 0x6cf11820, 0x33c0b: 0x6d4e5620, + 0x33c0c: 0x6d4e5820, 0x33c0d: 0x6d7ae020, 0x33c0e: 0x6da35a20, 0x33c0f: 0x6d7ae220, + 0x33c10: 0x6dc50e20, 0x33c11: 0x6df9da20, 0x33c12: 0x6c08b220, 0x33c13: 0x6c08b420, + 0x33c14: 0x6c08b620, 0x33c15: 0x6c10ba20, 0x33c16: 0x6c10bc20, 0x33c17: 0x6c10be20, + 0x33c18: 0x6c10c020, 0x33c19: 0x6c10c220, 0x33c1a: 0x6c10c420, 0x33c1b: 0x6c10c620, + 0x33c1c: 0x6c10c820, 0x33c1d: 0x6c10ca20, 0x33c1e: 0x6c10cc20, 0x33c1f: 0x6c10ce20, + 0x33c20: 0x6c10d020, 0x33c21: 0x6c10d220, 0x33c22: 0x6c10d420, 0x33c23: 0x6c10d620, + 0x33c24: 0x6c10d820, 0x33c25: 0x6c1e0620, 0x33c26: 0x6c1e0820, 0x33c27: 0x6c1e0a20, + 0x33c28: 0x6c1e0c20, 0x33c29: 0x6c1e0e20, 0x33c2a: 0x6c1e1020, 0x33c2b: 0x6c1e1220, + 0x33c2c: 0x6c1e1420, 0x33c2d: 0x6c1e1620, 0x33c2e: 0x6c1e1820, 0x33c2f: 0x6c1e1a20, + 0x33c30: 0x6c1e1c20, 0x33c31: 0x6c1e1e20, 0x33c32: 0x6c1e2020, 0x33c33: 0x6c1e2220, + 0x33c34: 0x6c1e2420, 0x33c35: 0x6c1e2620, 0x33c36: 0x6c1e2820, 0x33c37: 0x6c1e2a20, + 0x33c38: 0x6c1e2c20, 0x33c39: 0x6c1e2e20, 0x33c3a: 0x6c1e3020, 0x33c3b: 0x6c31b220, + 0x33c3c: 0x6c31b420, 0x33c3d: 0x6c31b620, 0x33c3e: 0x6c31b820, 0x33c3f: 0x6c31ba20, + // Block 0xcf1, offset 0x33c40 + 0x33c40: 0x6c31bc20, 0x33c41: 0x6c31be20, 0x33c42: 0x6c31c020, 0x33c43: 0x6c31c220, + 0x33c44: 0x6c31c420, 0x33c45: 0x6c31c620, 0x33c46: 0x6c31c820, 0x33c47: 0x6c31ca20, + 0x33c48: 0x6c31cc20, 0x33c49: 0x6c31ce20, 0x33c4a: 0x6c31d020, 0x33c4b: 0x6c31d220, + 0x33c4c: 0x6c31d420, 0x33c4d: 0x6c31d620, 0x33c4e: 0x6c31d820, 0x33c4f: 0x6c31da20, + 0x33c50: 0x6c4c1220, 0x33c51: 0x6c4c1420, 0x33c52: 0x6c4c1620, 0x33c53: 0x6c4c1820, + 0x33c54: 0x6c4c1a20, 0x33c55: 0x6c4c1c20, 0x33c56: 0x6c4c1e20, 0x33c57: 0x6c4c2020, + 0x33c58: 0x6c4c2220, 0x33c59: 0x6c4c2420, 0x33c5a: 0x6c4c2620, 0x33c5b: 0x6c4c2820, + 0x33c5c: 0x6c4c2a20, 0x33c5d: 0x6c4c2c20, 0x33c5e: 0x6c4c2e20, 0x33c5f: 0x6c4c3020, + 0x33c60: 0x6c4c3220, 0x33c61: 0x6c4c3420, 0x33c62: 0x6c4c3620, 0x33c63: 0x6c4c3820, + 0x33c64: 0x6c4c3a20, 0x33c65: 0x6c4c3c20, 0x33c66: 0x6c4c3e20, 0x33c67: 0x6c4c4020, + 0x33c68: 0x6c4c4220, 0x33c69: 0x6c4c4420, 0x33c6a: 0x6c4c4620, 0x33c6b: 0x6c4c4820, + 0x33c6c: 0x6c4c4a20, 0x33c6d: 0x6c4c4c20, 0x33c6e: 0x6c4c4e20, 0x33c6f: 0x6c4c5020, + 0x33c70: 0x6c4c5220, 0x33c71: 0x6c6e1420, 0x33c72: 0x6c6e1620, 0x33c73: 0x6c6e1820, + 0x33c74: 0x6c6e1a20, 0x33c75: 0x6c6e1c20, 0x33c76: 0x6c6e1e20, 0x33c77: 0x6c6e2020, + 0x33c78: 0x6c6e2220, 0x33c79: 0x6c6e2420, 0x33c7a: 0x6c6e2620, 0x33c7b: 0x6c6e2820, + 0x33c7c: 0x6c6e2a20, 0x33c7d: 0x6c6e2c20, 0x33c7e: 0x6c6e2e20, 0x33c7f: 0x6c6e3020, + // Block 0xcf2, offset 0x33c80 + 0x33c80: 0x6c6e3220, 0x33c81: 0x6c6e3420, 0x33c82: 0x6c6e3620, 0x33c83: 0x6c6e3820, + 0x33c84: 0x6c6e3a20, 0x33c85: 0x6c6e3c20, 0x33c86: 0x6c6e3e20, 0x33c87: 0x6c6e4020, + 0x33c88: 0x6c6e4220, 0x33c89: 0x6c6e4420, 0x33c8a: 0x6c6e4620, 0x33c8b: 0x6c6e4820, + 0x33c8c: 0x6c6e4a20, 0x33c8d: 0x6c958620, 0x33c8e: 0x6c958820, 0x33c8f: 0x6c958a20, + 0x33c90: 0x6c958c20, 0x33c91: 0x6c958e20, 0x33c92: 0x6c959020, 0x33c93: 0x6c959220, + 0x33c94: 0x6c959420, 0x33c95: 0x6c959620, 0x33c96: 0x6c959820, 0x33c97: 0x6c959a20, + 0x33c98: 0x6c959c20, 0x33c99: 0x6c959e20, 0x33c9a: 0x6c95a020, 0x33c9b: 0x6c95a220, + 0x33c9c: 0x6c95a420, 0x33c9d: 0x6c95a620, 0x33c9e: 0x6c95a820, 0x33c9f: 0x6c95aa20, + 0x33ca0: 0x6c95ac20, 0x33ca1: 0x6c95ae20, 0x33ca2: 0x6c95b020, 0x33ca3: 0x6c95b220, + 0x33ca4: 0x6c95b420, 0x33ca5: 0x6c95b620, 0x33ca6: 0x6c95b820, 0x33ca7: 0x6c95ba20, + 0x33ca8: 0x6c95bc20, 0x33ca9: 0x6c95be20, 0x33caa: 0x6c95c020, 0x33cab: 0x6cc1ae20, + 0x33cac: 0x6cc1b020, 0x33cad: 0x6cc1b220, 0x33cae: 0x6cc1b420, 0x33caf: 0x6cc1b620, + 0x33cb0: 0x6cc1b820, 0x33cb1: 0x6cc1ba20, 0x33cb2: 0x6cc1bc20, 0x33cb3: 0x6cc1be20, + 0x33cb4: 0x6cc1c020, 0x33cb5: 0x6cc1c220, 0x33cb6: 0x6cc1c420, 0x33cb7: 0x6cc1c620, + 0x33cb8: 0x6cc1c820, 0x33cb9: 0x6cc1ca20, 0x33cba: 0x6cc1cc20, 0x33cbb: 0x6cc1ce20, + 0x33cbc: 0x6cc1d020, 0x33cbd: 0x6cc1d220, 0x33cbe: 0x6cc1d420, 0x33cbf: 0x6cc1d620, + // Block 0xcf3, offset 0x33cc0 + 0x33cc0: 0x6cc1d820, 0x33cc1: 0x6cc1da20, 0x33cc2: 0x6cc1dc20, 0x33cc3: 0x6cc1de20, + 0x33cc4: 0x6cc1e020, 0x33cc5: 0x6cc1e220, 0x33cc6: 0x6cc1e420, 0x33cc7: 0x6cc1e620, + 0x33cc8: 0x6cc1e820, 0x33cc9: 0x6cc1ea20, 0x33cca: 0x6cf13020, 0x33ccb: 0x6cf13220, + 0x33ccc: 0x6cf13420, 0x33ccd: 0x6cf13620, 0x33cce: 0x6cf13820, 0x33ccf: 0x6cf13a20, + 0x33cd0: 0x6cf13c20, 0x33cd1: 0x6cf13e20, 0x33cd2: 0x6cf14020, 0x33cd3: 0x6cf14220, + 0x33cd4: 0x6cf14420, 0x33cd5: 0x6cf14620, 0x33cd6: 0x6cf14820, 0x33cd7: 0x6cf14a20, + 0x33cd8: 0x6cf14c20, 0x33cd9: 0x6cf14e20, 0x33cda: 0x6cf15020, 0x33cdb: 0x6cf15220, + 0x33cdc: 0x6cf15420, 0x33cdd: 0x6cf15620, 0x33cde: 0x6cf15820, 0x33cdf: 0x6d20dc20, + 0x33ce0: 0x6d20de20, 0x33ce1: 0x6d20e020, 0x33ce2: 0x6d20e220, 0x33ce3: 0x6d20e420, + 0x33ce4: 0x6d20e620, 0x33ce5: 0x6d20e820, 0x33ce6: 0x6d20ea20, 0x33ce7: 0x6d20ec20, + 0x33ce8: 0x6d20ee20, 0x33ce9: 0x6d20f020, 0x33cea: 0x6d20f220, 0x33ceb: 0x6d20f420, + 0x33cec: 0x6d20f620, 0x33ced: 0x6d20f820, 0x33cee: 0x6d20fa20, 0x33cef: 0x6d20fc20, + 0x33cf0: 0x6d20fe20, 0x33cf1: 0x6d210020, 0x33cf2: 0x6d210220, 0x33cf3: 0x6d4e7220, + 0x33cf4: 0x6d4e7420, 0x33cf5: 0x6d4e7620, 0x33cf6: 0x6d4e7820, 0x33cf7: 0x6d4e7a20, + 0x33cf8: 0x6d4e7c20, 0x33cf9: 0x6d4e7e20, 0x33cfa: 0x6d4e8020, 0x33cfb: 0x6d4e8220, + 0x33cfc: 0x6d4e8420, 0x33cfd: 0x6d4e8620, 0x33cfe: 0x6d4e8820, 0x33cff: 0x6d4e8a20, + // Block 0xcf4, offset 0x33d00 + 0x33d00: 0x6d4e8c20, 0x33d01: 0x6d4e8e20, 0x33d02: 0x6d4e9020, 0x33d03: 0x6d4e9220, + 0x33d04: 0x6d4e9420, 0x33d05: 0x6d4e9620, 0x33d06: 0x6d4e9820, 0x33d07: 0x6d4e9a20, + 0x33d08: 0x6d4e9c20, 0x33d09: 0x6d4e9e20, 0x33d0a: 0x6d4ea020, 0x33d0b: 0x6d4ea220, + 0x33d0c: 0x6d4ea420, 0x33d0d: 0x6d7af420, 0x33d0e: 0x6d7af620, 0x33d0f: 0x6d7af820, + 0x33d10: 0x6d7afa20, 0x33d11: 0x6d7afc20, 0x33d12: 0x6d7afe20, 0x33d13: 0x6d7b0020, + 0x33d14: 0x6d7b0220, 0x33d15: 0x6d7b0420, 0x33d16: 0x6d7b0620, 0x33d17: 0x6d7b0820, + 0x33d18: 0x6d7b0a20, 0x33d19: 0x6d7b0c20, 0x33d1a: 0x6d7b0e20, 0x33d1b: 0x6d7b1020, + 0x33d1c: 0x6d7b1220, 0x33d1d: 0x6d7b1420, 0x33d1e: 0x6d7b1620, 0x33d1f: 0x6da36620, + 0x33d20: 0x6da36820, 0x33d21: 0x6da36a20, 0x33d22: 0x6da36c20, 0x33d23: 0x6da36e20, + 0x33d24: 0x6da37020, 0x33d25: 0x6da37220, 0x33d26: 0x6da37420, 0x33d27: 0x6da37620, + 0x33d28: 0x6da37820, 0x33d29: 0x6dc51420, 0x33d2a: 0x6dc51620, 0x33d2b: 0x6dc51820, + 0x33d2c: 0x6dc51a20, 0x33d2d: 0x6de21420, 0x33d2e: 0x6de21620, 0x33d2f: 0x6de21820, + 0x33d30: 0x6de21a20, 0x33d31: 0x6de21c20, 0x33d32: 0x6de21e20, 0x33d33: 0x6de22020, + 0x33d34: 0x6de22220, 0x33d35: 0x6de22420, 0x33d36: 0x6de22620, 0x33d37: 0x6de22820, + 0x33d38: 0x6df9e220, 0x33d39: 0x6df9e420, 0x33d3a: 0x6df9e620, 0x33d3b: 0x6e0d9820, + 0x33d3c: 0x6e0d9a20, 0x33d3d: 0x6e0d9c20, 0x33d3e: 0x6e1d0820, 0x33d3f: 0x6e1d0a20, + // Block 0xcf5, offset 0x33d40 + 0x33d40: 0x6e1d0c20, 0x33d41: 0x6e1d0e20, 0x33d42: 0x6e28bc20, 0x33d43: 0x6e320a20, + 0x33d44: 0x6e320c20, 0x33d45: 0x6e320e20, 0x33d46: 0x6e321020, 0x33d47: 0x6e402e20, + 0x33d48: 0x6e403020, 0x33d49: 0x6c08bc20, 0x33d4a: 0x6c1e3220, 0x33d4b: 0x6c1e3420, + 0x33d4c: 0x6c1e3620, 0x33d4d: 0x6c31e020, 0x33d4e: 0x6c31e220, 0x33d4f: 0x6c31e420, + 0x33d50: 0x6c31e620, 0x33d51: 0x6c4c5420, 0x33d52: 0x6c4c5620, 0x33d53: 0x6c4c5820, + 0x33d54: 0x6c4c5a20, 0x33d55: 0x6c4c5c20, 0x33d56: 0x6c6e4e20, 0x33d57: 0x6c6e5020, + 0x33d58: 0x6c6e5220, 0x33d59: 0x6c6e5420, 0x33d5a: 0x6c95cc20, 0x33d5b: 0x6cc1f420, + 0x33d5c: 0x6cc1f620, 0x33d5d: 0x6cc1f820, 0x33d5e: 0x6cf15c20, 0x33d5f: 0x6cf15e20, + 0x33d60: 0x6cf16020, 0x33d61: 0x6d18a420, 0x33d62: 0x6d210820, 0x33d63: 0x6d1e2a20, + 0x33d64: 0x6d210a20, 0x33d65: 0x6d4eaa20, 0x33d66: 0x6d7b1c20, 0x33d67: 0x6d7b1e20, + 0x33d68: 0x6d7b2020, 0x33d69: 0x6d7b2220, 0x33d6a: 0x6dc51c20, 0x33d6b: 0x6de22c20, + 0x33d6c: 0x6df9ea20, 0x33d6d: 0x6e0d9e20, 0x33d6e: 0x6e28be20, 0x33d6f: 0x6c043420, + 0x33d70: 0x6c043620, 0x33d71: 0x6c043820, 0x33d72: 0x6c08c020, 0x33d73: 0x6c08c220, + 0x33d74: 0x6c08c420, 0x33d75: 0x6c08c620, 0x33d76: 0x6c10e020, 0x33d77: 0x6c1e3a20, + 0x33d78: 0x6c1e3c20, 0x33d79: 0x6c1e3e20, 0x33d7a: 0x6c1e4020, 0x33d7b: 0x6c31e820, + 0x33d7c: 0x6c31ea20, 0x33d7d: 0x6c31ec20, 0x33d7e: 0x6c31ee20, 0x33d7f: 0x6c4c6020, + // Block 0xcf6, offset 0x33d80 + 0x33d80: 0x6c4b0c20, 0x33d81: 0x6c6e5620, 0x33d82: 0x6c4c6220, 0x33d83: 0x6c6e5820, + 0x33d84: 0x6c6e5a20, 0x33d85: 0x6c6e5c20, 0x33d86: 0x6c6e5e20, 0x33d87: 0x6c95d220, + 0x33d88: 0x6c95d420, 0x33d89: 0x6c95d620, 0x33d8a: 0x6cc20220, 0x33d8b: 0x6cf16820, + 0x33d8c: 0x6d210e20, 0x33d8d: 0x6d211020, 0x33d8e: 0x6d211220, 0x33d8f: 0x6d211420, + 0x33d90: 0x6d4eae20, 0x33d91: 0x6d4eb020, 0x33d92: 0x6d4eb220, 0x33d93: 0x6d4eb420, + 0x33d94: 0x6da2ce20, 0x33d95: 0x6dc2b220, 0x33d96: 0x6e1d1020, 0x33d97: 0x6c10f020, + 0x33d98: 0x6c10f220, 0x33d99: 0x6c10f420, 0x33d9a: 0x6c10f620, 0x33d9b: 0x6c10f820, + 0x33d9c: 0x6c10fa20, 0x33d9d: 0x6c10fc20, 0x33d9e: 0x6c10fe20, 0x33d9f: 0x6c110020, + 0x33da0: 0x6c110220, 0x33da1: 0x6c110420, 0x33da2: 0x6c110620, 0x33da3: 0x6c1e6220, + 0x33da4: 0x6c1e6420, 0x33da5: 0x6c1e6620, 0x33da6: 0x6c1e6820, 0x33da7: 0x6c1e6a20, + 0x33da8: 0x6c1e6c20, 0x33da9: 0x6c1e6e20, 0x33daa: 0x6c1e7020, 0x33dab: 0x6c1e7220, + 0x33dac: 0x6c1e7420, 0x33dad: 0x6c1e7620, 0x33dae: 0x6c1e7820, 0x33daf: 0x6c1e7a20, + 0x33db0: 0x6c1e7c20, 0x33db1: 0x6c1e7e20, 0x33db2: 0x6c321420, 0x33db3: 0x6c321620, + 0x33db4: 0x6c321820, 0x33db5: 0x6c321a20, 0x33db6: 0x6c321c20, 0x33db7: 0x6c321e20, + 0x33db8: 0x6c322020, 0x33db9: 0x6c322220, 0x33dba: 0x6c322420, 0x33dbb: 0x6c322620, + 0x33dbc: 0x6c322820, 0x33dbd: 0x6c322a20, 0x33dbe: 0x6c322c20, 0x33dbf: 0x6c322e20, + // Block 0xcf7, offset 0x33dc0 + 0x33dc0: 0x6c323020, 0x33dc1: 0x6c323220, 0x33dc2: 0x6c323420, 0x33dc3: 0x6c323620, + 0x33dc4: 0x6c323820, 0x33dc5: 0x6c323a20, 0x33dc6: 0x6c323c20, 0x33dc7: 0x6c4c8420, + 0x33dc8: 0x6c4c8620, 0x33dc9: 0x6c4c8820, 0x33dca: 0x6c4c8a20, 0x33dcb: 0x6c4c8c20, + 0x33dcc: 0x6c4c8e20, 0x33dcd: 0x6c4c9020, 0x33dce: 0x6c4c9220, 0x33dcf: 0x6c4c9420, + 0x33dd0: 0x6c4c9620, 0x33dd1: 0x6c4c9820, 0x33dd2: 0x6c4c9a20, 0x33dd3: 0x6c4c9c20, + 0x33dd4: 0x6c4c9e20, 0x33dd5: 0x6c4ca020, 0x33dd6: 0x6c4ca220, 0x33dd7: 0x6c4ca420, + 0x33dd8: 0x6c4ca620, 0x33dd9: 0x6c6e7c20, 0x33dda: 0x6c6e7e20, 0x33ddb: 0x6c6e8020, + 0x33ddc: 0x6c6e8220, 0x33ddd: 0x6c6e8420, 0x33dde: 0x6c6e8620, 0x33ddf: 0x6c6e8820, + 0x33de0: 0x6c6e8a20, 0x33de1: 0x6c6e8c20, 0x33de2: 0x6c6e8e20, 0x33de3: 0x6c6e9020, + 0x33de4: 0x6c6e9220, 0x33de5: 0x6c6e9420, 0x33de6: 0x6c6e9620, 0x33de7: 0x6c6e9820, + 0x33de8: 0x6c6e9a20, 0x33de9: 0x6c6e9c20, 0x33dea: 0x6c6e9e20, 0x33deb: 0x6c6ea020, + 0x33dec: 0x6c6ea220, 0x33ded: 0x6c6ea420, 0x33dee: 0x6c6ea620, 0x33def: 0x6c6ea820, + 0x33df0: 0x6c6eaa20, 0x33df1: 0x6c6eac20, 0x33df2: 0x6c6bf220, 0x33df3: 0x6c95fa20, + 0x33df4: 0x6c95fc20, 0x33df5: 0x6c95fe20, 0x33df6: 0x6c960020, 0x33df7: 0x6c960220, + 0x33df8: 0x6c960420, 0x33df9: 0x6c960620, 0x33dfa: 0x6c960820, 0x33dfb: 0x6c960a20, + 0x33dfc: 0x6c960c20, 0x33dfd: 0x6c960e20, 0x33dfe: 0x6c961020, 0x33dff: 0x6c961220, + // Block 0xcf8, offset 0x33e00 + 0x33e00: 0x6c961420, 0x33e01: 0x6c961620, 0x33e02: 0x6c961820, 0x33e03: 0x6c961a20, + 0x33e04: 0x6c961c20, 0x33e05: 0x6c961e20, 0x33e06: 0x6c962020, 0x33e07: 0x6c962220, + 0x33e08: 0x6c962420, 0x33e09: 0x6c962620, 0x33e0a: 0x6c962820, 0x33e0b: 0x6c962a20, + 0x33e0c: 0x6c962c20, 0x33e0d: 0x6c962e20, 0x33e0e: 0x6c963020, 0x33e0f: 0x6c963220, + 0x33e10: 0x6c963420, 0x33e11: 0x6c963620, 0x33e12: 0x6c963820, 0x33e13: 0x6c963a20, + 0x33e14: 0x6c963c20, 0x33e15: 0x6c963e20, 0x33e16: 0x6cb78820, 0x33e17: 0x6c964020, + 0x33e18: 0x6c964220, 0x33e19: 0x6c964420, 0x33e1a: 0x6c964620, 0x33e1b: 0x6cc21a20, + 0x33e1c: 0x6cc21c20, 0x33e1d: 0x6cc21e20, 0x33e1e: 0x6cc22020, 0x33e1f: 0x6cc22220, + 0x33e20: 0x6cc22420, 0x33e21: 0x6cc22620, 0x33e22: 0x6cc22820, 0x33e23: 0x6cc22a20, + 0x33e24: 0x6cc22c20, 0x33e25: 0x6cc22e20, 0x33e26: 0x6cc23020, 0x33e27: 0x6cc23220, + 0x33e28: 0x6cc23420, 0x33e29: 0x6cc23620, 0x33e2a: 0x6cc23820, 0x33e2b: 0x6cc23a20, + 0x33e2c: 0x6cc23c20, 0x33e2d: 0x6cc23e20, 0x33e2e: 0x6cc24020, 0x33e2f: 0x6cc24220, + 0x33e30: 0x6cc24420, 0x33e31: 0x6cc24620, 0x33e32: 0x6cc24820, 0x33e33: 0x6cc24a20, + 0x33e34: 0x6cc24c20, 0x33e35: 0x6cc24e20, 0x33e36: 0x6cc25020, 0x33e37: 0x6cc25220, + 0x33e38: 0x6cc25420, 0x33e39: 0x6cc25620, 0x33e3a: 0x6cc25820, 0x33e3b: 0x6cc25a20, + 0x33e3c: 0x6cf17a20, 0x33e3d: 0x6cc25c20, 0x33e3e: 0x6cc25e20, 0x33e3f: 0x6cf17c20, + // Block 0xcf9, offset 0x33e40 + 0x33e40: 0x6cf17e20, 0x33e41: 0x6cf18020, 0x33e42: 0x6cf18220, 0x33e43: 0x6cf18420, + 0x33e44: 0x6cf18620, 0x33e45: 0x6cf18820, 0x33e46: 0x6cf18a20, 0x33e47: 0x6cf18c20, + 0x33e48: 0x6cf18e20, 0x33e49: 0x6cf19020, 0x33e4a: 0x6cf19220, 0x33e4b: 0x6cf19420, + 0x33e4c: 0x6cf19620, 0x33e4d: 0x6cf19820, 0x33e4e: 0x6cf19a20, 0x33e4f: 0x6cf19c20, + 0x33e50: 0x6cf19e20, 0x33e51: 0x6cf1a020, 0x33e52: 0x6cf1a220, 0x33e53: 0x6cf1a420, + 0x33e54: 0x6cf1a620, 0x33e55: 0x6d213620, 0x33e56: 0x6d213820, 0x33e57: 0x6d213a20, + 0x33e58: 0x6d213c20, 0x33e59: 0x6d213e20, 0x33e5a: 0x6d214020, 0x33e5b: 0x6d214220, + 0x33e5c: 0x6d214420, 0x33e5d: 0x6d214620, 0x33e5e: 0x6d214820, 0x33e5f: 0x6d214a20, + 0x33e60: 0x6d214c20, 0x33e61: 0x6d214e20, 0x33e62: 0x6d215020, 0x33e63: 0x6d215220, + 0x33e64: 0x6d215420, 0x33e65: 0x6d215620, 0x33e66: 0x6d215820, 0x33e67: 0x6d215a20, + 0x33e68: 0x6d215c20, 0x33e69: 0x6d215e20, 0x33e6a: 0x6d216020, 0x33e6b: 0x6d216220, + 0x33e6c: 0x6d216420, 0x33e6d: 0x6d4ed020, 0x33e6e: 0x6d4ed220, 0x33e6f: 0x6d4ed420, + 0x33e70: 0x6d4ed620, 0x33e71: 0x6d4ed820, 0x33e72: 0x6d4eda20, 0x33e73: 0x6d4edc20, + 0x33e74: 0x6d4ede20, 0x33e75: 0x6d4ee020, 0x33e76: 0x6d4ee220, 0x33e77: 0x6d4ee420, + 0x33e78: 0x6d4ee620, 0x33e79: 0x6d4ee820, 0x33e7a: 0x6d4eea20, 0x33e7b: 0x6d4eec20, + 0x33e7c: 0x6d4eee20, 0x33e7d: 0x6d4ef020, 0x33e7e: 0x6d4ef220, 0x33e7f: 0x6d4ef420, + // Block 0xcfa, offset 0x33e80 + 0x33e80: 0x6d4ef620, 0x33e81: 0x6d4ef820, 0x33e82: 0x6d7b3a20, 0x33e83: 0x6d7b3c20, + 0x33e84: 0x6d7b3e20, 0x33e85: 0x6d7b4020, 0x33e86: 0x6d7b4220, 0x33e87: 0x6d7b4420, + 0x33e88: 0x6d7b4620, 0x33e89: 0x6d7b4820, 0x33e8a: 0x6d7b4a20, 0x33e8b: 0x6d7b4c20, + 0x33e8c: 0x6d7b4e20, 0x33e8d: 0x6d7b5020, 0x33e8e: 0x6d7b5220, 0x33e8f: 0x6d7b5420, + 0x33e90: 0x6d7b5620, 0x33e91: 0x6da37c20, 0x33e92: 0x6da37e20, 0x33e93: 0x6da38020, + 0x33e94: 0x6da38220, 0x33e95: 0x6da38420, 0x33e96: 0x6da38620, 0x33e97: 0x6da38820, + 0x33e98: 0x6da38a20, 0x33e99: 0x6da38c20, 0x33e9a: 0x6da38e20, 0x33e9b: 0x6da39020, + 0x33e9c: 0x6db42620, 0x33e9d: 0x6da39220, 0x33e9e: 0x6da39420, 0x33e9f: 0x6da39620, + 0x33ea0: 0x6da39820, 0x33ea1: 0x6dc52220, 0x33ea2: 0x6dc52420, 0x33ea3: 0x6dc52620, + 0x33ea4: 0x6dc52820, 0x33ea5: 0x6dc52a20, 0x33ea6: 0x6dc52c20, 0x33ea7: 0x6dc52e20, + 0x33ea8: 0x6dc53020, 0x33ea9: 0x6dc53220, 0x33eaa: 0x6dc53420, 0x33eab: 0x6dc53620, + 0x33eac: 0x6dc53820, 0x33ead: 0x6dc53a20, 0x33eae: 0x6de23a20, 0x33eaf: 0x6de23c20, + 0x33eb0: 0x6de23e20, 0x33eb1: 0x6de24020, 0x33eb2: 0x6de24220, 0x33eb3: 0x6de24420, + 0x33eb4: 0x6de24620, 0x33eb5: 0x6de24820, 0x33eb6: 0x6de24a20, 0x33eb7: 0x6de24c20, + 0x33eb8: 0x6de24e20, 0x33eb9: 0x6de25020, 0x33eba: 0x6de25220, 0x33ebb: 0x6df9f420, + 0x33ebc: 0x6df9f620, 0x33ebd: 0x6df9f820, 0x33ebe: 0x6df9fa20, 0x33ebf: 0x6df9fc20, + // Block 0xcfb, offset 0x33ec0 + 0x33ec0: 0x6df9fe20, 0x33ec1: 0x6dfa0020, 0x33ec2: 0x6dfa0220, 0x33ec3: 0x6dfa0420, + 0x33ec4: 0x6e0da220, 0x33ec5: 0x6e0da420, 0x33ec6: 0x6e0da620, 0x33ec7: 0x6e0f2020, + 0x33ec8: 0x6e1d1420, 0x33ec9: 0x6e1d1620, 0x33eca: 0x6e1d1820, 0x33ecb: 0x6e1d1a20, + 0x33ecc: 0x6e1d1c20, 0x33ecd: 0x6e28c020, 0x33ece: 0x6e28c220, 0x33ecf: 0x6e28c420, + 0x33ed0: 0x6e28c620, 0x33ed1: 0x6e28c820, 0x33ed2: 0x6e321220, 0x33ed3: 0x6e3d2220, + 0x33ed4: 0x6e403220, 0x33ed5: 0x6e403420, 0x33ed6: 0x6e429420, 0x33ed7: 0x6c043a20, + 0x33ed8: 0x6c08d220, 0x33ed9: 0x6c08d420, 0x33eda: 0x6c08d620, 0x33edb: 0x6c1e8620, + 0x33edc: 0x6c110c20, 0x33edd: 0x6c1e8820, 0x33ede: 0x6c1e8a20, 0x33edf: 0x6c324a20, + 0x33ee0: 0x6c4cb420, 0x33ee1: 0x6c4cb620, 0x33ee2: 0x6c4cb820, 0x33ee3: 0x6c4cba20, + 0x33ee4: 0x6c4cbc20, 0x33ee5: 0x6c4cbe20, 0x33ee6: 0x6c6ebc20, 0x33ee7: 0x6c6ebe20, + 0x33ee8: 0x6c965220, 0x33ee9: 0x6c965420, 0x33eea: 0x6c965620, 0x33eeb: 0x6cc26620, + 0x33eec: 0x6c01da20, 0x33eed: 0x6c044020, 0x33eee: 0x6c08dc20, 0x33eef: 0x6c08de20, + 0x33ef0: 0x6c111020, 0x33ef1: 0x6c111220, 0x33ef2: 0x6c111420, 0x33ef3: 0x6c1e9620, + 0x33ef4: 0x6c4cc620, 0x33ef5: 0x6c1e9820, 0x33ef6: 0x6c1e9a20, 0x33ef7: 0x6c1e9c20, + 0x33ef8: 0x6c1e9e20, 0x33ef9: 0x6c1ea020, 0x33efa: 0x6c1ea220, 0x33efb: 0x6c324e20, + 0x33efc: 0x6c4cc820, 0x33efd: 0x6c325020, 0x33efe: 0x6c325220, 0x33eff: 0x6c325420, + // Block 0xcfc, offset 0x33f00 + 0x33f00: 0x6c325620, 0x33f01: 0x6c325820, 0x33f02: 0x6c4cca20, 0x33f03: 0x6c4ccc20, + 0x33f04: 0x6c4cce20, 0x33f05: 0x6c4cd020, 0x33f06: 0x6c4cd220, 0x33f07: 0x6c4cd420, + 0x33f08: 0x6c4cd620, 0x33f09: 0x6c4cd820, 0x33f0a: 0x6c4cda20, 0x33f0b: 0x6c4cdc20, + 0x33f0c: 0x6c4cde20, 0x33f0d: 0x6c6ec420, 0x33f0e: 0x6c6ec620, 0x33f0f: 0x6c6ec820, + 0x33f10: 0x6c6eca20, 0x33f11: 0x6c6ecc20, 0x33f12: 0x6c6ece20, 0x33f13: 0x6c6ed020, + 0x33f14: 0x6c965a20, 0x33f15: 0x6c965c20, 0x33f16: 0x6c965e20, 0x33f17: 0x6c966020, + 0x33f18: 0x6c966220, 0x33f19: 0x6c966420, 0x33f1a: 0x6cc26820, 0x33f1b: 0x6cc26a20, + 0x33f1c: 0x6cc26c20, 0x33f1d: 0x6cc26e20, 0x33f1e: 0x6cc27020, 0x33f1f: 0x6cc27220, + 0x33f20: 0x6cc27420, 0x33f21: 0x6cc27620, 0x33f22: 0x6cf1ae20, 0x33f23: 0x6cf1b020, + 0x33f24: 0x6cf1b220, 0x33f25: 0x6cf1b420, 0x33f26: 0x6d217620, 0x33f27: 0x6d217820, + 0x33f28: 0x6d217a20, 0x33f29: 0x6d217c20, 0x33f2a: 0x6d217e20, 0x33f2b: 0x6d218020, + 0x33f2c: 0x6d4f0220, 0x33f2d: 0x6d1a0c20, 0x33f2e: 0x6d7b5e20, 0x33f2f: 0x6d7b6020, + 0x33f30: 0x6d7b6220, 0x33f31: 0x6d7b6420, 0x33f32: 0x6da3a020, 0x33f33: 0x6da3a220, + 0x33f34: 0x6da3a420, 0x33f35: 0x6de25620, 0x33f36: 0x6e1d1e20, 0x33f37: 0x6e403620, + 0x33f38: 0x6e403820, 0x33f39: 0x6e442c20, 0x33f3a: 0x6c01de20, 0x33f3b: 0x6c044420, + 0x33f3c: 0x6c044620, 0x33f3d: 0x6c111c20, 0x33f3e: 0x6c111e20, 0x33f3f: 0x6c1ea820, + // Block 0xcfd, offset 0x33f40 + 0x33f40: 0x6c1eaa20, 0x33f41: 0x6c1eac20, 0x33f42: 0x6c1eae20, 0x33f43: 0x6c1eb020, + 0x33f44: 0x6c325c20, 0x33f45: 0x6c325e20, 0x33f46: 0x6c4ce220, 0x33f47: 0x6c4ce420, + 0x33f48: 0x6c4ce620, 0x33f49: 0x6c4ce820, 0x33f4a: 0x6c4cea20, 0x33f4b: 0x6c6ed420, + 0x33f4c: 0x6c6ed620, 0x33f4d: 0x6c966620, 0x33f4e: 0x6cc27c20, 0x33f4f: 0x6cf1bc20, + 0x33f50: 0x6cf1be20, 0x33f51: 0x6d4f0420, 0x33f52: 0x6d4f0620, 0x33f53: 0x6d7b6620, + 0x33f54: 0x6da3a820, 0x33f55: 0x6dc53e20, 0x33f56: 0x6e0daa20, 0x33f57: 0x6c01e220, + 0x33f58: 0x6c01e420, 0x33f59: 0x6c045020, 0x33f5a: 0x6c045220, 0x33f5b: 0x6c045420, + 0x33f5c: 0x6c045620, 0x33f5d: 0x6c045820, 0x33f5e: 0x6c045a20, 0x33f5f: 0x6c045c20, + 0x33f60: 0x6c045e20, 0x33f61: 0x6c046020, 0x33f62: 0x6c08e620, 0x33f63: 0x6c08e820, + 0x33f64: 0x6c08ea20, 0x33f65: 0x6c08ec20, 0x33f66: 0x6c08ee20, 0x33f67: 0x6c08f020, + 0x33f68: 0x6c08f220, 0x33f69: 0x6c08f420, 0x33f6a: 0x6c08f620, 0x33f6b: 0x6c113020, + 0x33f6c: 0x6c113220, 0x33f6d: 0x6c113420, 0x33f6e: 0x6c113620, 0x33f6f: 0x6c113820, + 0x33f70: 0x6c113a20, 0x33f71: 0x6c113c20, 0x33f72: 0x6c113e20, 0x33f73: 0x6c114020, + 0x33f74: 0x6c114220, 0x33f75: 0x6c114420, 0x33f76: 0x6c114620, 0x33f77: 0x6c1ebe20, + 0x33f78: 0x6c1ec020, 0x33f79: 0x6c1ec220, 0x33f7a: 0x6c1ec420, 0x33f7b: 0x6c1ec620, + 0x33f7c: 0x6c1ec820, 0x33f7d: 0x6c1eca20, 0x33f7e: 0x6c1ecc20, 0x33f7f: 0x6c1ece20, + // Block 0xcfe, offset 0x33f80 + 0x33f80: 0x6c1ed020, 0x33f81: 0x6c1ed220, 0x33f82: 0x6c1ed420, 0x33f83: 0x6c1ed620, + 0x33f84: 0x6c1ed820, 0x33f85: 0x6c1eda20, 0x33f86: 0x6c327c20, 0x33f87: 0x6c327e20, + 0x33f88: 0x6c328020, 0x33f89: 0x6c328220, 0x33f8a: 0x6c328420, 0x33f8b: 0x6c328620, + 0x33f8c: 0x6c328820, 0x33f8d: 0x6c328a20, 0x33f8e: 0x6c328c20, 0x33f8f: 0x6c328e20, + 0x33f90: 0x6c329020, 0x33f91: 0x6c329220, 0x33f92: 0x6c329420, 0x33f93: 0x6c329620, + 0x33f94: 0x6c4d0620, 0x33f95: 0x6c4d0820, 0x33f96: 0x6c4d0a20, 0x33f97: 0x6c4d0c20, + 0x33f98: 0x6c4d0e20, 0x33f99: 0x6c4d1020, 0x33f9a: 0x6c4d1220, 0x33f9b: 0x6c4d1420, + 0x33f9c: 0x6c4d1620, 0x33f9d: 0x6c4d1820, 0x33f9e: 0x6c4d1a20, 0x33f9f: 0x6c4d1c20, + 0x33fa0: 0x6c4d1e20, 0x33fa1: 0x6c4d2020, 0x33fa2: 0x6c4d2220, 0x33fa3: 0x6c4d2420, + 0x33fa4: 0x6c6ee420, 0x33fa5: 0x6c6ee620, 0x33fa6: 0x6c6ee820, 0x33fa7: 0x6c6eea20, + 0x33fa8: 0x6c6eec20, 0x33fa9: 0x6c6eee20, 0x33faa: 0x6c6ef020, 0x33fab: 0x6c6ef220, + 0x33fac: 0x6c6ef420, 0x33fad: 0x6c6ef620, 0x33fae: 0x6c967a20, 0x33faf: 0x6c967c20, + 0x33fb0: 0x6c967e20, 0x33fb1: 0x6c968020, 0x33fb2: 0x6c968220, 0x33fb3: 0x6c968420, + 0x33fb4: 0x6c968620, 0x33fb5: 0x6c968820, 0x33fb6: 0x6c968a20, 0x33fb7: 0x6c968c20, + 0x33fb8: 0x6c968e20, 0x33fb9: 0x6c969020, 0x33fba: 0x6c969220, 0x33fbb: 0x6c969420, + 0x33fbc: 0x6c969620, 0x33fbd: 0x6c969820, 0x33fbe: 0x6c969a20, 0x33fbf: 0x6c969c20, + // Block 0xcff, offset 0x33fc0 + 0x33fc0: 0x6cc28e20, 0x33fc1: 0x6cc29020, 0x33fc2: 0x6cc29220, 0x33fc3: 0x6cc29420, + 0x33fc4: 0x6cc29620, 0x33fc5: 0x6cc29820, 0x33fc6: 0x6cc29a20, 0x33fc7: 0x6cc29c20, + 0x33fc8: 0x6cc29e20, 0x33fc9: 0x6cc2a020, 0x33fca: 0x6cf1d020, 0x33fcb: 0x6cf1d220, + 0x33fcc: 0x6cf1d420, 0x33fcd: 0x6cf1d620, 0x33fce: 0x6cf1d820, 0x33fcf: 0x6cf1da20, + 0x33fd0: 0x6cf1dc20, 0x33fd1: 0x6cf1de20, 0x33fd2: 0x6d218c20, 0x33fd3: 0x6d218e20, + 0x33fd4: 0x6d219020, 0x33fd5: 0x6d219220, 0x33fd6: 0x6d219420, 0x33fd7: 0x6d219620, + 0x33fd8: 0x6d219820, 0x33fd9: 0x6d219a20, 0x33fda: 0x6d219c20, 0x33fdb: 0x6d219e20, + 0x33fdc: 0x6d21a020, 0x33fdd: 0x6d21a220, 0x33fde: 0x6d4f1220, 0x33fdf: 0x6d4f1420, + 0x33fe0: 0x6d4f1620, 0x33fe1: 0x6d4f1820, 0x33fe2: 0x6d4f1a20, 0x33fe3: 0x6d4f1c20, + 0x33fe4: 0x6d4f1e20, 0x33fe5: 0x6d7b6c20, 0x33fe6: 0x6d7b6e20, 0x33fe7: 0x6d7b7020, + 0x33fe8: 0x6d7b7220, 0x33fe9: 0x6d7b7420, 0x33fea: 0x6d7b7620, 0x33feb: 0x6d8a6c20, + 0x33fec: 0x6da3ac20, 0x33fed: 0x6da3ae20, 0x33fee: 0x6da3b020, 0x33fef: 0x6da3b220, + 0x33ff0: 0x6da3b420, 0x33ff1: 0x6da3b620, 0x33ff2: 0x6dc54220, 0x33ff3: 0x6dc54420, + 0x33ff4: 0x6dc54620, 0x33ff5: 0x6dc54820, 0x33ff6: 0x6dc54a20, 0x33ff7: 0x6dc54c20, + 0x33ff8: 0x6de25820, 0x33ff9: 0x6de25a20, 0x33ffa: 0x6de25c20, 0x33ffb: 0x6de25e20, + 0x33ffc: 0x6de26020, 0x33ffd: 0x6de26220, 0x33ffe: 0x6de26420, 0x33fff: 0x6dfa0620, + // Block 0xd00, offset 0x34000 + 0x34000: 0x6dfa0820, 0x34001: 0x6dfa0a20, 0x34002: 0x6dfa0c20, 0x34003: 0x6dfa0e20, + 0x34004: 0x6dfa1020, 0x34005: 0x6dfa1220, 0x34006: 0x6e0dae20, 0x34007: 0x6e0db020, + 0x34008: 0x6e0db220, 0x34009: 0x6e0db420, 0x3400a: 0x6e1d2420, 0x3400b: 0x6e321420, + 0x3400c: 0x6e388220, 0x3400d: 0x6e429620, 0x3400e: 0x6e462820, 0x3400f: 0x6c114c20, + 0x34010: 0x6c114e20, 0x34011: 0x6c115020, 0x34012: 0x6c115220, 0x34013: 0x6c1edc20, + 0x34014: 0x6c32a020, 0x34015: 0x6c32a220, 0x34016: 0x6c3bf820, 0x34017: 0x6c4d2c20, + 0x34018: 0x6c4d2e20, 0x34019: 0x6c4d3020, 0x3401a: 0x6c4d3220, 0x3401b: 0x6c6efa20, + 0x3401c: 0x6c6efc20, 0x3401d: 0x6c6efe20, 0x3401e: 0x6c96a220, 0x3401f: 0x6c96a420, + 0x34020: 0x6c96a620, 0x34021: 0x6c96a820, 0x34022: 0x6cc2a820, 0x34023: 0x6cc2aa20, + 0x34024: 0x6cc2ac20, 0x34025: 0x6cf1e420, 0x34026: 0x6cf1e620, 0x34027: 0x6cf1e820, + 0x34028: 0x6d21a820, 0x34029: 0x6d21aa20, 0x3402a: 0x6d21ac20, 0x3402b: 0x6d21ae20, + 0x3402c: 0x6d21b020, 0x3402d: 0x6d4f2020, 0x3402e: 0x6d4f2220, 0x3402f: 0x6d7b7e20, + 0x34030: 0x6d7adc20, 0x34031: 0x6d7b8020, 0x34032: 0x6da3ba20, 0x34033: 0x6dc55220, + 0x34034: 0x6dc55420, 0x34035: 0x6dc55620, 0x34036: 0x6dc55820, 0x34037: 0x6de26a20, + 0x34038: 0x6de26c20, 0x34039: 0x6de26e20, 0x3403a: 0x6de27020, 0x3403b: 0x6dfa1420, + 0x3403c: 0x6dfa1620, 0x3403d: 0x6e1d2620, 0x3403e: 0x6e28cc20, 0x3403f: 0x6e3d2620, + // Block 0xd01, offset 0x34040 + 0x34040: 0x6c08fa20, 0x34041: 0x6c08fc20, 0x34042: 0x6c08fe20, 0x34043: 0x6c115820, + 0x34044: 0x6c115a20, 0x34045: 0x6c115c20, 0x34046: 0x6c115e20, 0x34047: 0x6c1ee620, + 0x34048: 0x6c1ee820, 0x34049: 0x6c32aa20, 0x3404a: 0x6c32ac20, 0x3404b: 0x6c32ae20, + 0x3404c: 0x6c32b020, 0x3404d: 0x6c32b220, 0x3404e: 0x6c4d3820, 0x3404f: 0x6c6f0420, + 0x34050: 0x6c6f0620, 0x34051: 0x6c6f0820, 0x34052: 0x6c6f0a20, 0x34053: 0x6c6f0c20, + 0x34054: 0x6c96b220, 0x34055: 0x6c96b420, 0x34056: 0x6c96b620, 0x34057: 0x6c96b820, + 0x34058: 0x6c96ba20, 0x34059: 0x6c96bc20, 0x3405a: 0x6c96be20, 0x3405b: 0x6c96c020, + 0x3405c: 0x6c96c220, 0x3405d: 0x6c96c420, 0x3405e: 0x6cc2b420, 0x3405f: 0x6cc2b620, + 0x34060: 0x6cc2b820, 0x34061: 0x6cc2ba20, 0x34062: 0x6cc2bc20, 0x34063: 0x6cc2be20, + 0x34064: 0x6cf1ec20, 0x34065: 0x6cf1ee20, 0x34066: 0x6cf1f020, 0x34067: 0x6cf1f220, + 0x34068: 0x6cf1f420, 0x34069: 0x6d21b820, 0x3406a: 0x6d21ba20, 0x3406b: 0x6d4f2a20, + 0x3406c: 0x6d4f2c20, 0x3406d: 0x6d4f2e20, 0x3406e: 0x6d4f3020, 0x3406f: 0x6d4f3220, + 0x34070: 0x6d7b8420, 0x34071: 0x6d7b8620, 0x34072: 0x6d7b8820, 0x34073: 0x6d7b8a20, + 0x34074: 0x6da3bc20, 0x34075: 0x6dc55c20, 0x34076: 0x6e0db820, 0x34077: 0x6dfa1820, + 0x34078: 0x6e1d2a20, 0x34079: 0x6e1d2c20, 0x3407a: 0x6e1d2e20, 0x3407b: 0x6e388620, + 0x3407c: 0x6c046220, 0x3407d: 0x6c046420, 0x3407e: 0x6c090220, 0x3407f: 0x6c090420, + // Block 0xd02, offset 0x34080 + 0x34080: 0x6c116620, 0x34081: 0x6c116820, 0x34082: 0x6c116a20, 0x34083: 0x6c116c20, + 0x34084: 0x6c1efe20, 0x34085: 0x6c1f0020, 0x34086: 0x6c1f0220, 0x34087: 0x6c1f0420, + 0x34088: 0x6c1f0620, 0x34089: 0x6c1f0820, 0x3408a: 0x6c1f0a20, 0x3408b: 0x6c1f0c20, + 0x3408c: 0x6c1f0e20, 0x3408d: 0x6c1f1020, 0x3408e: 0x6c1f1220, 0x3408f: 0x6c1f1420, + 0x34090: 0x6c1f1620, 0x34091: 0x6c1f1820, 0x34092: 0x6c32ca20, 0x34093: 0x6c32cc20, + 0x34094: 0x6c32ce20, 0x34095: 0x6c32d020, 0x34096: 0x6c32d220, 0x34097: 0x6c32d420, + 0x34098: 0x6c32d620, 0x34099: 0x6c32d820, 0x3409a: 0x6c32da20, 0x3409b: 0x6c32dc20, + 0x3409c: 0x6c4d6020, 0x3409d: 0x6c4d6220, 0x3409e: 0x6c4d6420, 0x3409f: 0x6c4d6620, + 0x340a0: 0x6c4d6820, 0x340a1: 0x6c4d6a20, 0x340a2: 0x6c4d6c20, 0x340a3: 0x6c4d6e20, + 0x340a4: 0x6c4d7020, 0x340a5: 0x6c4d7220, 0x340a6: 0x6c4d7420, 0x340a7: 0x6c4d7620, + 0x340a8: 0x6c4d7820, 0x340a9: 0x6c4d7a20, 0x340aa: 0x6c6f2420, 0x340ab: 0x6c6f2620, + 0x340ac: 0x6c6f2820, 0x340ad: 0x6c6f2a20, 0x340ae: 0x6c6f2c20, 0x340af: 0x6c6f2e20, + 0x340b0: 0x6c6f3020, 0x340b1: 0x6c6f3220, 0x340b2: 0x6c6f3420, 0x340b3: 0x6c6f3620, + 0x340b4: 0x6c6f3820, 0x340b5: 0x6c6f3a20, 0x340b6: 0x6c6f3c20, 0x340b7: 0x6c6f3e20, + 0x340b8: 0x6c6f4020, 0x340b9: 0x6c6f4220, 0x340ba: 0x6c6f4420, 0x340bb: 0x6c6f4620, + 0x340bc: 0x6c6f4820, 0x340bd: 0x6c6f4a20, 0x340be: 0x6c6f4c20, 0x340bf: 0x6c6f4e20, + // Block 0xd03, offset 0x340c0 + 0x340c0: 0x6c6f5020, 0x340c1: 0x6c96ee20, 0x340c2: 0x6c96f020, 0x340c3: 0x6c96f220, + 0x340c4: 0x6c96f420, 0x340c5: 0x6c96f620, 0x340c6: 0x6c96f820, 0x340c7: 0x6c96fa20, + 0x340c8: 0x6c96fc20, 0x340c9: 0x6c96fe20, 0x340ca: 0x6c970020, 0x340cb: 0x6c970220, + 0x340cc: 0x6c970420, 0x340cd: 0x6c970620, 0x340ce: 0x6c970820, 0x340cf: 0x6c970a20, + 0x340d0: 0x6c970c20, 0x340d1: 0x6c970e20, 0x340d2: 0x6c971020, 0x340d3: 0x6c971220, + 0x340d4: 0x6c971420, 0x340d5: 0x6c971620, 0x340d6: 0x6c971820, 0x340d7: 0x6c971a20, + 0x340d8: 0x6c971c20, 0x340d9: 0x6c971e20, 0x340da: 0x6c972020, 0x340db: 0x6c972220, + 0x340dc: 0x6c972420, 0x340dd: 0x6c972620, 0x340de: 0x6c972820, 0x340df: 0x6cc2da20, + 0x340e0: 0x6cc2dc20, 0x340e1: 0x6cc2de20, 0x340e2: 0x6cc2e020, 0x340e3: 0x6cc2e220, + 0x340e4: 0x6cc2e420, 0x340e5: 0x6cc2e620, 0x340e6: 0x6cc2e820, 0x340e7: 0x6cc2ea20, + 0x340e8: 0x6cc2ec20, 0x340e9: 0x6cc2ee20, 0x340ea: 0x6cc2f020, 0x340eb: 0x6cc2f220, + 0x340ec: 0x6cde5820, 0x340ed: 0x6cc2f420, 0x340ee: 0x6cc2f620, 0x340ef: 0x6cc2f820, + 0x340f0: 0x6cc2fa20, 0x340f1: 0x6cc2fc20, 0x340f2: 0x6cf20220, 0x340f3: 0x6cf20420, + 0x340f4: 0x6cf20620, 0x340f5: 0x6cf20820, 0x340f6: 0x6cf20a20, 0x340f7: 0x6cf20c20, + 0x340f8: 0x6cf20e20, 0x340f9: 0x6cf21020, 0x340fa: 0x6cf21220, 0x340fb: 0x6cf21420, + 0x340fc: 0x6cf21620, 0x340fd: 0x6cf21820, 0x340fe: 0x6cf21a20, 0x340ff: 0x6cf21c20, + // Block 0xd04, offset 0x34100 + 0x34100: 0x6cf21e20, 0x34101: 0x6cf22020, 0x34102: 0x6cf22220, 0x34103: 0x6cf22420, + 0x34104: 0x6cf22620, 0x34105: 0x6cf22820, 0x34106: 0x6cf22a20, 0x34107: 0x6cf22c20, + 0x34108: 0x6cf22e20, 0x34109: 0x6cf23020, 0x3410a: 0x6cf23220, 0x3410b: 0x6cf23420, + 0x3410c: 0x6cf23620, 0x3410d: 0x6cf23820, 0x3410e: 0x6cf23a20, 0x3410f: 0x6d21c820, + 0x34110: 0x6d21ca20, 0x34111: 0x6d21cc20, 0x34112: 0x6d21ce20, 0x34113: 0x6d21d020, + 0x34114: 0x6d21d220, 0x34115: 0x6d21d420, 0x34116: 0x6d21d620, 0x34117: 0x6d21d820, + 0x34118: 0x6d21da20, 0x34119: 0x6d21dc20, 0x3411a: 0x6d21de20, 0x3411b: 0x6d21e020, + 0x3411c: 0x6d21e220, 0x3411d: 0x6d21e420, 0x3411e: 0x6d21e620, 0x3411f: 0x6d21e820, + 0x34120: 0x6d21ea20, 0x34121: 0x6d21ec20, 0x34122: 0x6d21ee20, 0x34123: 0x6d21f020, + 0x34124: 0x6d21f220, 0x34125: 0x6d21f420, 0x34126: 0x6d21f620, 0x34127: 0x6cf23c20, + 0x34128: 0x6d21f820, 0x34129: 0x6d21fa20, 0x3412a: 0x6d4f4620, 0x3412b: 0x6d4f4820, + 0x3412c: 0x6d4f4a20, 0x3412d: 0x6d4f4c20, 0x3412e: 0x6d4f4e20, 0x3412f: 0x6d4f5020, + 0x34130: 0x6d4f5220, 0x34131: 0x6d4f5420, 0x34132: 0x6d4f5620, 0x34133: 0x6d4f5820, + 0x34134: 0x6d4f5a20, 0x34135: 0x6d4f5c20, 0x34136: 0x6d4f5e20, 0x34137: 0x6d4f6020, + 0x34138: 0x6d4f6220, 0x34139: 0x6d7b9420, 0x3413a: 0x6d7b9620, 0x3413b: 0x6d7b9820, + 0x3413c: 0x6d7b9a20, 0x3413d: 0x6d7b9c20, 0x3413e: 0x6d7b9e20, 0x3413f: 0x6d7ba020, + // Block 0xd05, offset 0x34140 + 0x34140: 0x6d7ba220, 0x34141: 0x6d7ba420, 0x34142: 0x6d7ba620, 0x34143: 0x6d7ba820, + 0x34144: 0x6d7baa20, 0x34145: 0x6d912c20, 0x34146: 0x6d7bac20, 0x34147: 0x6d7bae20, + 0x34148: 0x6da3c620, 0x34149: 0x6da3c820, 0x3414a: 0x6da3ca20, 0x3414b: 0x6db4d020, + 0x3414c: 0x6da3cc20, 0x3414d: 0x6da3ce20, 0x3414e: 0x6da3d020, 0x3414f: 0x6dc55e20, + 0x34150: 0x6dc56020, 0x34151: 0x6dc56220, 0x34152: 0x6dc56420, 0x34153: 0x6dc56620, + 0x34154: 0x6dc56820, 0x34155: 0x6dc56a20, 0x34156: 0x6dc56c20, 0x34157: 0x6dc56e20, + 0x34158: 0x6de27620, 0x34159: 0x6de27820, 0x3415a: 0x6de27a20, 0x3415b: 0x6df7ca20, + 0x3415c: 0x6de27c20, 0x3415d: 0x6dfa2020, 0x3415e: 0x6dfa2220, 0x3415f: 0x6dfa2420, + 0x34160: 0x6dfa2620, 0x34161: 0x6e01e220, 0x34162: 0x6dfa2820, 0x34163: 0x6e0dbc20, + 0x34164: 0x6e0dbe20, 0x34165: 0x6e1d3020, 0x34166: 0x6e28ce20, 0x34167: 0x6e388820, + 0x34168: 0x6e403a20, 0x34169: 0x6c01f220, 0x3416a: 0x6c046a20, 0x3416b: 0x6c091020, + 0x3416c: 0x6c091220, 0x3416d: 0x6c091420, 0x3416e: 0x6c091620, 0x3416f: 0x6c091820, + 0x34170: 0x6c091a20, 0x34171: 0x6c091c20, 0x34172: 0x6c118a20, 0x34173: 0x6c118c20, + 0x34174: 0x6c118e20, 0x34175: 0x6c119020, 0x34176: 0x6c119220, 0x34177: 0x6c119420, + 0x34178: 0x6c119620, 0x34179: 0x6c119820, 0x3417a: 0x6c119a20, 0x3417b: 0x6c119c20, + 0x3417c: 0x6c119e20, 0x3417d: 0x6c11a020, 0x3417e: 0x6c11a220, 0x3417f: 0x6c11a420, + // Block 0xd06, offset 0x34180 + 0x34180: 0x6c11a620, 0x34181: 0x6c11a820, 0x34182: 0x6c11aa20, 0x34183: 0x6c11ac20, + 0x34184: 0x6c11ae20, 0x34185: 0x6c11b020, 0x34186: 0x6c11b220, 0x34187: 0x6c11b420, + 0x34188: 0x6c11b620, 0x34189: 0x6c1f8020, 0x3418a: 0x6c1f8220, 0x3418b: 0x6c1f8420, + 0x3418c: 0x6c1f8620, 0x3418d: 0x6c1f8820, 0x3418e: 0x6c1f8a20, 0x3418f: 0x6c1f8c20, + 0x34190: 0x6c1f8e20, 0x34191: 0x6c1f9020, 0x34192: 0x6c1f9220, 0x34193: 0x6c1f9420, + 0x34194: 0x6c1f9620, 0x34195: 0x6c1f9820, 0x34196: 0x6c1f9a20, 0x34197: 0x6c1f9c20, + 0x34198: 0x6c1f9e20, 0x34199: 0x6c1fa020, 0x3419a: 0x6c1fa220, 0x3419b: 0x6c1fa420, + 0x3419c: 0x6c1fa620, 0x3419d: 0x6c1fa820, 0x3419e: 0x6c1faa20, 0x3419f: 0x6c1fac20, + 0x341a0: 0x6c1fae20, 0x341a1: 0x6c1fb020, 0x341a2: 0x6c1fb220, 0x341a3: 0x6c1fb420, + 0x341a4: 0x6c1fb620, 0x341a5: 0x6c1fb820, 0x341a6: 0x6c1fba20, 0x341a7: 0x6c1fbc20, + 0x341a8: 0x6c1fbe20, 0x341a9: 0x6c1fc020, 0x341aa: 0x6c1fc220, 0x341ab: 0x6c1fc420, + 0x341ac: 0x6c1fc620, 0x341ad: 0x6c1fc820, 0x341ae: 0x6c1fca20, 0x341af: 0x6c1fcc20, + 0x341b0: 0x6c1fce20, 0x341b1: 0x6c1fd020, 0x341b2: 0x6c1fd220, 0x341b3: 0x6c1fd420, + 0x341b4: 0x6c1fd620, 0x341b5: 0x6c1fd820, 0x341b6: 0x6c1fda20, 0x341b7: 0x6c1fdc20, + 0x341b8: 0x6c1fde20, 0x341b9: 0x6c1fe020, 0x341ba: 0x6c1fe220, 0x341bb: 0x6c1fe420, + 0x341bc: 0x6c1fe620, 0x341bd: 0x6c1fe820, 0x341be: 0x6c1fea20, 0x341bf: 0x6c336420, + // Block 0xd07, offset 0x341c0 + 0x341c0: 0x6c336620, 0x341c1: 0x6c336820, 0x341c2: 0x6c336a20, 0x341c3: 0x6c336c20, + 0x341c4: 0x6c336e20, 0x341c5: 0x6c337020, 0x341c6: 0x6c337220, 0x341c7: 0x6c337420, + 0x341c8: 0x6c337620, 0x341c9: 0x6c337820, 0x341ca: 0x6c337a20, 0x341cb: 0x6c337c20, + 0x341cc: 0x6c337e20, 0x341cd: 0x6c338020, 0x341ce: 0x6c338220, 0x341cf: 0x6c338420, + 0x341d0: 0x6c338620, 0x341d1: 0x6c338820, 0x341d2: 0x6c338a20, 0x341d3: 0x6c338c20, + 0x341d4: 0x6c338e20, 0x341d5: 0x6c339020, 0x341d6: 0x6c339220, 0x341d7: 0x6c339420, + 0x341d8: 0x6c339620, 0x341d9: 0x6c339820, 0x341da: 0x6c339a20, 0x341db: 0x6c339c20, + 0x341dc: 0x6c339e20, 0x341dd: 0x6c33a020, 0x341de: 0x6c33a220, 0x341df: 0x6c33a420, + 0x341e0: 0x6c33a620, 0x341e1: 0x6c33a820, 0x341e2: 0x6c33aa20, 0x341e3: 0x6c33ac20, + 0x341e4: 0x6c33ae20, 0x341e5: 0x6c33b020, 0x341e6: 0x6c33b220, 0x341e7: 0x6c33b420, + 0x341e8: 0x6c33b620, 0x341e9: 0x6c33b820, 0x341ea: 0x6c33ba20, 0x341eb: 0x6c33bc20, + 0x341ec: 0x6c33be20, 0x341ed: 0x6c33c020, 0x341ee: 0x6c33c220, 0x341ef: 0x6c33c420, + 0x341f0: 0x6c33c620, 0x341f1: 0x6c33c820, 0x341f2: 0x6c33ca20, 0x341f3: 0x6c33cc20, + 0x341f4: 0x6c4e1420, 0x341f5: 0x6c4e1620, 0x341f6: 0x6c4e1820, 0x341f7: 0x6c4e1a20, + 0x341f8: 0x6c4e1c20, 0x341f9: 0x6c4e1e20, 0x341fa: 0x6c4e2020, 0x341fb: 0x6c4e2220, + 0x341fc: 0x6c4e2420, 0x341fd: 0x6c4e2620, 0x341fe: 0x6c4e2820, 0x341ff: 0x6c4e2a20, + // Block 0xd08, offset 0x34200 + 0x34200: 0x6c4e2c20, 0x34201: 0x6c4e2e20, 0x34202: 0x6c4e3020, 0x34203: 0x6c4e3220, + 0x34204: 0x6c4e3420, 0x34205: 0x6c4e3620, 0x34206: 0x6c4e3820, 0x34207: 0x6c4e3a20, + 0x34208: 0x6c4e3c20, 0x34209: 0x6c4e3e20, 0x3420a: 0x6c4e4020, 0x3420b: 0x6c4e4220, + 0x3420c: 0x6c4e4420, 0x3420d: 0x6c4e4620, 0x3420e: 0x6c4e4820, 0x3420f: 0x6c4e4a20, + 0x34210: 0x6c4e4c20, 0x34211: 0x6c4e4e20, 0x34212: 0x6c4e5020, 0x34213: 0x6c4e5220, + 0x34214: 0x6c4e5420, 0x34215: 0x6c4e5620, 0x34216: 0x6c4e5820, 0x34217: 0x6c4e5a20, + 0x34218: 0x6c4e5c20, 0x34219: 0x6c4e5e20, 0x3421a: 0x6c4e6020, 0x3421b: 0x6c4e6220, + 0x3421c: 0x6c4e6420, 0x3421d: 0x6c4e6620, 0x3421e: 0x6c4e6820, 0x3421f: 0x6c4e6a20, + 0x34220: 0x6c4e6c20, 0x34221: 0x6c4e6e20, 0x34222: 0x6c4e7020, 0x34223: 0x6c4e7220, + 0x34224: 0x6c4e7420, 0x34225: 0x6c4e7620, 0x34226: 0x6c4e7820, 0x34227: 0x6c4e7a20, + 0x34228: 0x6c4e7c20, 0x34229: 0x6c4e7e20, 0x3422a: 0x6c4e8020, 0x3422b: 0x6c4e8220, + 0x3422c: 0x6c4e8420, 0x3422d: 0x6c4e8620, 0x3422e: 0x6c4e8820, 0x3422f: 0x6c4e8a20, + 0x34230: 0x6c4e8c20, 0x34231: 0x6c6fe420, 0x34232: 0x6c6fe620, 0x34233: 0x6c6fe820, + 0x34234: 0x6c6fea20, 0x34235: 0x6c6fec20, 0x34236: 0x6c6fee20, 0x34237: 0x6c6ff020, + 0x34238: 0x6c6ff220, 0x34239: 0x6c6ff420, 0x3423a: 0x6c6ff620, 0x3423b: 0x6c6ff820, + 0x3423c: 0x6c6ffa20, 0x3423d: 0x6c6ffc20, 0x3423e: 0x6c6ffe20, 0x3423f: 0x6c700020, + // Block 0xd09, offset 0x34240 + 0x34240: 0x6c700220, 0x34241: 0x6c700420, 0x34242: 0x6c700620, 0x34243: 0x6c700820, + 0x34244: 0x6c700a20, 0x34245: 0x6c700c20, 0x34246: 0x6c700e20, 0x34247: 0x6c701020, + 0x34248: 0x6c701220, 0x34249: 0x6c701420, 0x3424a: 0x6c701620, 0x3424b: 0x6c701820, + 0x3424c: 0x6c701a20, 0x3424d: 0x6c701c20, 0x3424e: 0x6c701e20, 0x3424f: 0x6c702020, + 0x34250: 0x6c702220, 0x34251: 0x6c702420, 0x34252: 0x6c702620, 0x34253: 0x6c702820, + 0x34254: 0x6c702a20, 0x34255: 0x6c702c20, 0x34256: 0x6c702e20, 0x34257: 0x6c703020, + 0x34258: 0x6c703220, 0x34259: 0x6c703420, 0x3425a: 0x6c703620, 0x3425b: 0x6c703820, + 0x3425c: 0x6c703a20, 0x3425d: 0x6c703c20, 0x3425e: 0x6c703e20, 0x3425f: 0x6c704020, + 0x34260: 0x6c704220, 0x34261: 0x6c704420, 0x34262: 0x6c704620, 0x34263: 0x6c704820, + 0x34264: 0x6c704a20, 0x34265: 0x6c704c20, 0x34266: 0x6c704e20, 0x34267: 0x6c705020, + 0x34268: 0x6c705220, 0x34269: 0x6c705420, 0x3426a: 0x6c705620, 0x3426b: 0x6c705820, + 0x3426c: 0x6c705a20, 0x3426d: 0x6c705c20, 0x3426e: 0x6c705e20, 0x3426f: 0x6c706020, + 0x34270: 0x6c706220, 0x34271: 0x6c706420, 0x34272: 0x6c706620, 0x34273: 0x6c706820, + 0x34274: 0x6c706a20, 0x34275: 0x6c706c20, 0x34276: 0x6c706e20, 0x34277: 0x6c707020, + 0x34278: 0x6c707220, 0x34279: 0x6c707420, 0x3427a: 0x6c707620, 0x3427b: 0x6c707820, + 0x3427c: 0x6c707a20, 0x3427d: 0x6c707c20, 0x3427e: 0x6c707e20, 0x3427f: 0x6c708020, + // Block 0xd0a, offset 0x34280 + 0x34280: 0x6c97d620, 0x34281: 0x6c97d820, 0x34282: 0x6c97da20, 0x34283: 0x6c97dc20, + 0x34284: 0x6c97de20, 0x34285: 0x6c97e020, 0x34286: 0x6c97e220, 0x34287: 0x6c97e420, + 0x34288: 0x6c97e620, 0x34289: 0x6c97e820, 0x3428a: 0x6c97ea20, 0x3428b: 0x6c97ec20, + 0x3428c: 0x6c97ee20, 0x3428d: 0x6c97f020, 0x3428e: 0x6c97f220, 0x3428f: 0x6c97f420, + 0x34290: 0x6c97f620, 0x34291: 0x6c97f820, 0x34292: 0x6c97fa20, 0x34293: 0x6c97fc20, + 0x34294: 0x6c97fe20, 0x34295: 0x6c980020, 0x34296: 0x6c980220, 0x34297: 0x6c980420, + 0x34298: 0x6c980620, 0x34299: 0x6c980820, 0x3429a: 0x6c980a20, 0x3429b: 0x6c980c20, + 0x3429c: 0x6c980e20, 0x3429d: 0x6c981020, 0x3429e: 0x6c981220, 0x3429f: 0x6c981420, + 0x342a0: 0x6c981620, 0x342a1: 0x6c981820, 0x342a2: 0x6c981a20, 0x342a3: 0x6c981c20, + 0x342a4: 0x6c981e20, 0x342a5: 0x6c982020, 0x342a6: 0x6c982220, 0x342a7: 0x6c982420, + 0x342a8: 0x6c982620, 0x342a9: 0x6c982820, 0x342aa: 0x6c982a20, 0x342ab: 0x6c982c20, + 0x342ac: 0x6c982e20, 0x342ad: 0x6c983020, 0x342ae: 0x6c983220, 0x342af: 0x6c983420, + 0x342b0: 0x6c983620, 0x342b1: 0x6c983820, 0x342b2: 0x6c983a20, 0x342b3: 0x6c983c20, + 0x342b4: 0x6c983e20, 0x342b5: 0x6c984020, 0x342b6: 0x6c984220, 0x342b7: 0x6c984420, + 0x342b8: 0x6c984620, 0x342b9: 0x6c984820, 0x342ba: 0x6c984a20, 0x342bb: 0x6c984c20, + 0x342bc: 0x6c984e20, 0x342bd: 0x6c985020, 0x342be: 0x6c985220, 0x342bf: 0x6c985420, + // Block 0xd0b, offset 0x342c0 + 0x342c0: 0x6c985620, 0x342c1: 0x6c985820, 0x342c2: 0x6c985a20, 0x342c3: 0x6c985c20, + 0x342c4: 0x6c985e20, 0x342c5: 0x6c986020, 0x342c6: 0x6c986220, 0x342c7: 0x6c986420, + 0x342c8: 0x6c986620, 0x342c9: 0x6c986820, 0x342ca: 0x6c986a20, 0x342cb: 0x6c986c20, + 0x342cc: 0x6c986e20, 0x342cd: 0x6c987020, 0x342ce: 0x6c987220, 0x342cf: 0x6c987420, + 0x342d0: 0x6c987620, 0x342d1: 0x6c987820, 0x342d2: 0x6c987a20, 0x342d3: 0x6c987c20, + 0x342d4: 0x6c987e20, 0x342d5: 0x6c988020, 0x342d6: 0x6c988220, 0x342d7: 0x6c988420, + 0x342d8: 0x6c988620, 0x342d9: 0x6c988820, 0x342da: 0x6c988a20, 0x342db: 0x6c988c20, + 0x342dc: 0x6c988e20, 0x342dd: 0x6c989020, 0x342de: 0x6c989220, 0x342df: 0x6c989420, + 0x342e0: 0x6c989620, 0x342e1: 0x6c989820, 0x342e2: 0x6c989a20, 0x342e3: 0x6c989c20, + 0x342e4: 0x6c989e20, 0x342e5: 0x6c98a020, 0x342e6: 0x6c98a220, 0x342e7: 0x6c98a420, + 0x342e8: 0x6cc3ac20, 0x342e9: 0x6cc3ae20, 0x342ea: 0x6cc3b020, 0x342eb: 0x6cc3b220, + 0x342ec: 0x6cc3b420, 0x342ed: 0x6cc3b620, 0x342ee: 0x6cc3b820, 0x342ef: 0x6cc3ba20, + 0x342f0: 0x6cc3bc20, 0x342f1: 0x6cc3be20, 0x342f2: 0x6cc3c020, 0x342f3: 0x6cc3c220, + 0x342f4: 0x6cc3c420, 0x342f5: 0x6cc3c620, 0x342f6: 0x6cc3c820, 0x342f7: 0x6cc3ca20, + 0x342f8: 0x6cc3cc20, 0x342f9: 0x6cc3ce20, 0x342fa: 0x6cc3d020, 0x342fb: 0x6cc3d220, + 0x342fc: 0x6cc3d420, 0x342fd: 0x6cc3d620, 0x342fe: 0x6cc3d820, 0x342ff: 0x6cc3da20, + // Block 0xd0c, offset 0x34300 + 0x34300: 0x6cc3dc20, 0x34301: 0x6cc3de20, 0x34302: 0x6cc3e020, 0x34303: 0x6cc3e220, + 0x34304: 0x6cc3e420, 0x34305: 0x6cc3e620, 0x34306: 0x6cc3e820, 0x34307: 0x6cc3ea20, + 0x34308: 0x6cc3ec20, 0x34309: 0x6cc3ee20, 0x3430a: 0x6cc3f020, 0x3430b: 0x6cc3f220, + 0x3430c: 0x6cc3f420, 0x3430d: 0x6cc3f620, 0x3430e: 0x6cc3f820, 0x3430f: 0x6cc3fa20, + 0x34310: 0x6cc3fc20, 0x34311: 0x6cc3fe20, 0x34312: 0x6cc40020, 0x34313: 0x6cc40220, + 0x34314: 0x6cc40420, 0x34315: 0x6cc40620, 0x34316: 0x6cc40820, 0x34317: 0x6cc40a20, + 0x34318: 0x6cc40c20, 0x34319: 0x6cc40e20, 0x3431a: 0x6cc41020, 0x3431b: 0x6cc41220, + 0x3431c: 0x6cc41420, 0x3431d: 0x6cc41620, 0x3431e: 0x6cc41820, 0x3431f: 0x6cc41a20, + 0x34320: 0x6cc41c20, 0x34321: 0x6cc41e20, 0x34322: 0x6cc42020, 0x34323: 0x6cc42220, + 0x34324: 0x6cc42420, 0x34325: 0x6cc42620, 0x34326: 0x6cc42820, 0x34327: 0x6cc42a20, + 0x34328: 0x6cc42c20, 0x34329: 0x6cc42e20, 0x3432a: 0x6cc43020, 0x3432b: 0x6cc43220, + 0x3432c: 0x6cc43420, 0x3432d: 0x6cc43620, 0x3432e: 0x6cc43820, 0x3432f: 0x6cc43a20, + 0x34330: 0x6cc43c20, 0x34331: 0x6cc43e20, 0x34332: 0x6cc44020, 0x34333: 0x6cc44220, + 0x34334: 0x6cc44420, 0x34335: 0x6cc44620, 0x34336: 0x6cc44820, 0x34337: 0x6cc44a20, + 0x34338: 0x6cc44c20, 0x34339: 0x6cc44e20, 0x3433a: 0x6cc45020, 0x3433b: 0x6cc45220, + 0x3433c: 0x6cc45420, 0x3433d: 0x6cc45620, 0x3433e: 0x6cc45820, 0x3433f: 0x6cc45a20, + // Block 0xd0d, offset 0x34340 + 0x34340: 0x6cc45c20, 0x34341: 0x6cc45e20, 0x34342: 0x6cc46020, 0x34343: 0x6cc46220, + 0x34344: 0x6cc46420, 0x34345: 0x6cc46620, 0x34346: 0x6cc46820, 0x34347: 0x6cc46a20, + 0x34348: 0x6cc46c20, 0x34349: 0x6cc46e20, 0x3434a: 0x6cc47020, 0x3434b: 0x6cc47220, + 0x3434c: 0x6cc47420, 0x3434d: 0x6cf2b620, 0x3434e: 0x6cf2b820, 0x3434f: 0x6cf2ba20, + 0x34350: 0x6cf2bc20, 0x34351: 0x6cf2be20, 0x34352: 0x6cf2c020, 0x34353: 0x6cf2c220, + 0x34354: 0x6cf2c420, 0x34355: 0x6cf2c620, 0x34356: 0x6cf2c820, 0x34357: 0x6cf2ca20, + 0x34358: 0x6cf2cc20, 0x34359: 0x6cf2ce20, 0x3435a: 0x6cf2d020, 0x3435b: 0x6cf2d220, + 0x3435c: 0x6cf2d420, 0x3435d: 0x6cf2d620, 0x3435e: 0x6cf2d820, 0x3435f: 0x6cf2da20, + 0x34360: 0x6cf2dc20, 0x34361: 0x6cf2de20, 0x34362: 0x6cf2e020, 0x34363: 0x6cf2e220, + 0x34364: 0x6cf2e420, 0x34365: 0x6cf2e620, 0x34366: 0x6cf2e820, 0x34367: 0x6cf2ea20, + 0x34368: 0x6cf2ec20, 0x34369: 0x6cf2ee20, 0x3436a: 0x6cf2f020, 0x3436b: 0x6cf2f220, + 0x3436c: 0x6cf2f420, 0x3436d: 0x6cf2f620, 0x3436e: 0x6cf2f820, 0x3436f: 0x6cf2fa20, + 0x34370: 0x6cf2fc20, 0x34371: 0x6cf2fe20, 0x34372: 0x6cf30020, 0x34373: 0x6cf30220, + 0x34374: 0x6cf30420, 0x34375: 0x6cf30620, 0x34376: 0x6cf30820, 0x34377: 0x6cf30a20, + 0x34378: 0x6cf30c20, 0x34379: 0x6cf30e20, 0x3437a: 0x6cf31020, 0x3437b: 0x6cf31220, + 0x3437c: 0x6cf31420, 0x3437d: 0x6cf31620, 0x3437e: 0x6cf31820, 0x3437f: 0x6cf31a20, + // Block 0xd0e, offset 0x34380 + 0x34380: 0x6cf31c20, 0x34381: 0x6cf31e20, 0x34382: 0x6cf32020, 0x34383: 0x6cf32220, + 0x34384: 0x6cf32420, 0x34385: 0x6cf32620, 0x34386: 0x6cf32820, 0x34387: 0x6cf32a20, + 0x34388: 0x6cf32c20, 0x34389: 0x6cf32e20, 0x3438a: 0x6cf33020, 0x3438b: 0x6cf33220, + 0x3438c: 0x6cf33420, 0x3438d: 0x6cf33620, 0x3438e: 0x6cf33820, 0x3438f: 0x6cf33a20, + 0x34390: 0x6cf33c20, 0x34391: 0x6cf33e20, 0x34392: 0x6cf34020, 0x34393: 0x6cf34220, + 0x34394: 0x6cf34420, 0x34395: 0x6cf34620, 0x34396: 0x6cf34820, 0x34397: 0x6cf34a20, + 0x34398: 0x6cf34c20, 0x34399: 0x6cf34e20, 0x3439a: 0x6cf35020, 0x3439b: 0x6cf35220, + 0x3439c: 0x6cf35420, 0x3439d: 0x6cf35620, 0x3439e: 0x6cf35820, 0x3439f: 0x6cf35a20, + 0x343a0: 0x6d227c20, 0x343a1: 0x6d227e20, 0x343a2: 0x6d228020, 0x343a3: 0x6d228220, + 0x343a4: 0x6d228420, 0x343a5: 0x6d228620, 0x343a6: 0x6d228820, 0x343a7: 0x6d228a20, + 0x343a8: 0x6d228c20, 0x343a9: 0x6d228e20, 0x343aa: 0x6d229020, 0x343ab: 0x6d229220, + 0x343ac: 0x6d229420, 0x343ad: 0x6d229620, 0x343ae: 0x6d229820, 0x343af: 0x6d229a20, + 0x343b0: 0x6d229c20, 0x343b1: 0x6d229e20, 0x343b2: 0x6d22a020, 0x343b3: 0x6d22a220, + 0x343b4: 0x6d22a420, 0x343b5: 0x6d22a620, 0x343b6: 0x6d22a820, 0x343b7: 0x6d22aa20, + 0x343b8: 0x6d22ac20, 0x343b9: 0x6d22ae20, 0x343ba: 0x6d22b020, 0x343bb: 0x6d22b220, + 0x343bc: 0x6d22b420, 0x343bd: 0x6d22b620, 0x343be: 0x6d22b820, 0x343bf: 0x6d22ba20, + // Block 0xd0f, offset 0x343c0 + 0x343c0: 0x6d22bc20, 0x343c1: 0x6d22be20, 0x343c2: 0x6d22c020, 0x343c3: 0x6d22c220, + 0x343c4: 0x6d22c420, 0x343c5: 0x6d22c620, 0x343c6: 0x6d22c820, 0x343c7: 0x6d22ca20, + 0x343c8: 0x6d22cc20, 0x343c9: 0x6d22ce20, 0x343ca: 0x6d22d020, 0x343cb: 0x6d22d220, + 0x343cc: 0x6d22d420, 0x343cd: 0x6d22d620, 0x343ce: 0x6d22d820, 0x343cf: 0x6d22da20, + 0x343d0: 0x6d22dc20, 0x343d1: 0x6d22de20, 0x343d2: 0x6d22e020, 0x343d3: 0x6d22e220, + 0x343d4: 0x6d22e420, 0x343d5: 0x6d22e620, 0x343d6: 0x6d22e820, 0x343d7: 0x6d22ea20, + 0x343d8: 0x6d22ec20, 0x343d9: 0x6d22ee20, 0x343da: 0x6d22f020, 0x343db: 0x6d22f220, + 0x343dc: 0x6d22f420, 0x343dd: 0x6d22f620, 0x343de: 0x6d22f820, 0x343df: 0x6d22fa20, + 0x343e0: 0x6d22fc20, 0x343e1: 0x6d22fe20, 0x343e2: 0x6d230020, 0x343e3: 0x6d230220, + 0x343e4: 0x6d230420, 0x343e5: 0x6d230620, 0x343e6: 0x6d230820, 0x343e7: 0x6d230a20, + 0x343e8: 0x6d230c20, 0x343e9: 0x6d230e20, 0x343ea: 0x6d231020, 0x343eb: 0x6d231220, + 0x343ec: 0x6d231420, 0x343ed: 0x6d231620, 0x343ee: 0x6d231820, 0x343ef: 0x6d231a20, + 0x343f0: 0x6d231c20, 0x343f1: 0x6d4ff020, 0x343f2: 0x6d4ff220, 0x343f3: 0x6d4ff420, + 0x343f4: 0x6d4ff620, 0x343f5: 0x6d4ff820, 0x343f6: 0x6d4ffa20, 0x343f7: 0x6d4ffc20, + 0x343f8: 0x6d4ffe20, 0x343f9: 0x6d500020, 0x343fa: 0x6d500220, 0x343fb: 0x6d500420, + 0x343fc: 0x6d500620, 0x343fd: 0x6d500820, 0x343fe: 0x6d500a20, 0x343ff: 0x6d500c20, + // Block 0xd10, offset 0x34400 + 0x34400: 0x6d500e20, 0x34401: 0x6d501020, 0x34402: 0x6d501220, 0x34403: 0x6d501420, + 0x34404: 0x6d501620, 0x34405: 0x6d501820, 0x34406: 0x6d501a20, 0x34407: 0x6d501c20, + 0x34408: 0x6d501e20, 0x34409: 0x6d502020, 0x3440a: 0x6d502220, 0x3440b: 0x6d502420, + 0x3440c: 0x6d502620, 0x3440d: 0x6d502820, 0x3440e: 0x6d502a20, 0x3440f: 0x6d502c20, + 0x34410: 0x6d502e20, 0x34411: 0x6d503020, 0x34412: 0x6d503220, 0x34413: 0x6d503420, + 0x34414: 0x6d503620, 0x34415: 0x6d503820, 0x34416: 0x6d503a20, 0x34417: 0x6d503c20, + 0x34418: 0x6d503e20, 0x34419: 0x6d504020, 0x3441a: 0x6d504220, 0x3441b: 0x6d504420, + 0x3441c: 0x6d504620, 0x3441d: 0x6d504820, 0x3441e: 0x6d504a20, 0x3441f: 0x6d504c20, + 0x34420: 0x6d504e20, 0x34421: 0x6d505020, 0x34422: 0x6d505220, 0x34423: 0x6d505420, + 0x34424: 0x6d505620, 0x34425: 0x6d505820, 0x34426: 0x6d505a20, 0x34427: 0x6d505c20, + 0x34428: 0x6d505e20, 0x34429: 0x6d506020, 0x3442a: 0x6d506220, 0x3442b: 0x6d506420, + 0x3442c: 0x6d506620, 0x3442d: 0x6d506820, 0x3442e: 0x6d506a20, 0x3442f: 0x6d506c20, + 0x34430: 0x6d506e20, 0x34431: 0x6d507020, 0x34432: 0x6d507220, 0x34433: 0x6d507420, + 0x34434: 0x6d507620, 0x34435: 0x6d507820, 0x34436: 0x6d507a20, 0x34437: 0x6d507c20, + 0x34438: 0x6d507e20, 0x34439: 0x6d508020, 0x3443a: 0x6d508220, 0x3443b: 0x6d508420, + 0x3443c: 0x6d508620, 0x3443d: 0x6d508820, 0x3443e: 0x6d508a20, 0x3443f: 0x6d508c20, + // Block 0xd11, offset 0x34440 + 0x34440: 0x6d508e20, 0x34441: 0x6d509020, 0x34442: 0x6d509220, 0x34443: 0x6d509420, + 0x34444: 0x6d509620, 0x34445: 0x6d509820, 0x34446: 0x6d509a20, 0x34447: 0x6d509c20, + 0x34448: 0x6d509e20, 0x34449: 0x6d50a020, 0x3444a: 0x6d50a220, 0x3444b: 0x6d50a420, + 0x3444c: 0x6d50a620, 0x3444d: 0x6d50a820, 0x3444e: 0x6d50aa20, 0x3444f: 0x6d50ac20, + 0x34450: 0x6d50ae20, 0x34451: 0x6d50b020, 0x34452: 0x6d7c0220, 0x34453: 0x6d7c0420, + 0x34454: 0x6d7c0620, 0x34455: 0x6d7c0820, 0x34456: 0x6d7c0a20, 0x34457: 0x6d7c0c20, + 0x34458: 0x6d7c0e20, 0x34459: 0x6d7c1020, 0x3445a: 0x6d7c1220, 0x3445b: 0x6d7c1420, + 0x3445c: 0x6d7c1620, 0x3445d: 0x6d7c1820, 0x3445e: 0x6d7c1a20, 0x3445f: 0x6d7c1c20, + 0x34460: 0x6d7c1e20, 0x34461: 0x6d7c2020, 0x34462: 0x6d7c2220, 0x34463: 0x6d7c2420, + 0x34464: 0x6d7c2620, 0x34465: 0x6d7c2820, 0x34466: 0x6d7c2a20, 0x34467: 0x6d7c2c20, + 0x34468: 0x6d7c2e20, 0x34469: 0x6d7c3020, 0x3446a: 0x6d7c3220, 0x3446b: 0x6d7c3420, + 0x3446c: 0x6d7c3620, 0x3446d: 0x6d7c3820, 0x3446e: 0x6d7c3a20, 0x3446f: 0x6d7c3c20, + 0x34470: 0x6d7c3e20, 0x34471: 0x6d7c4020, 0x34472: 0x6d7c4220, 0x34473: 0x6d7c4420, + 0x34474: 0x6d7c4620, 0x34475: 0x6d7c4820, 0x34476: 0x6d7c4a20, 0x34477: 0x6d7c4c20, + 0x34478: 0x6d7c4e20, 0x34479: 0x6d7c5020, 0x3447a: 0x6d7c5220, 0x3447b: 0x6d7c5420, + 0x3447c: 0x6d7c5620, 0x3447d: 0x6d7c5820, 0x3447e: 0x6d7c5a20, 0x3447f: 0x6d7c5c20, + // Block 0xd12, offset 0x34480 + 0x34480: 0x6d7c5e20, 0x34481: 0x6d7c6020, 0x34482: 0x6d7c6220, 0x34483: 0x6d7c6420, + 0x34484: 0x6d7c6620, 0x34485: 0x6d7c6820, 0x34486: 0x6d7c6a20, 0x34487: 0x6d7c6c20, + 0x34488: 0x6d7c6e20, 0x34489: 0x6d7c7020, 0x3448a: 0x6d7c7220, 0x3448b: 0x6d7c7420, + 0x3448c: 0x6d7c7620, 0x3448d: 0x6d7c7820, 0x3448e: 0x6da40820, 0x3448f: 0x6da40a20, + 0x34490: 0x6da40c20, 0x34491: 0x6da40e20, 0x34492: 0x6da41020, 0x34493: 0x6da41220, + 0x34494: 0x6da41420, 0x34495: 0x6da41620, 0x34496: 0x6da41820, 0x34497: 0x6da41a20, + 0x34498: 0x6da41c20, 0x34499: 0x6da41e20, 0x3449a: 0x6da42020, 0x3449b: 0x6da42220, + 0x3449c: 0x6da42420, 0x3449d: 0x6da42620, 0x3449e: 0x6da42820, 0x3449f: 0x6da42a20, + 0x344a0: 0x6da42c20, 0x344a1: 0x6da42e20, 0x344a2: 0x6da43020, 0x344a3: 0x6da43220, + 0x344a4: 0x6da43420, 0x344a5: 0x6da43620, 0x344a6: 0x6da43820, 0x344a7: 0x6da43a20, + 0x344a8: 0x6da43c20, 0x344a9: 0x6da43e20, 0x344aa: 0x6da44020, 0x344ab: 0x6da44220, + 0x344ac: 0x6da44420, 0x344ad: 0x6da44620, 0x344ae: 0x6da44820, 0x344af: 0x6da44a20, + 0x344b0: 0x6da44c20, 0x344b1: 0x6da44e20, 0x344b2: 0x6da45020, 0x344b3: 0x6da45220, + 0x344b4: 0x6da45420, 0x344b5: 0x6da45620, 0x344b6: 0x6da45820, 0x344b7: 0x6da45a20, + 0x344b8: 0x6da45c20, 0x344b9: 0x6da45e20, 0x344ba: 0x6da46020, 0x344bb: 0x6dc59e20, + 0x344bc: 0x6dc5a020, 0x344bd: 0x6dc5a220, 0x344be: 0x6dc5a420, 0x344bf: 0x6dc5a620, + // Block 0xd13, offset 0x344c0 + 0x344c0: 0x6dc5a820, 0x344c1: 0x6dc5aa20, 0x344c2: 0x6dc5ac20, 0x344c3: 0x6dc5ae20, + 0x344c4: 0x6dc5b020, 0x344c5: 0x6dc5b220, 0x344c6: 0x6dc5b420, 0x344c7: 0x6dc5b620, + 0x344c8: 0x6dc5b820, 0x344c9: 0x6dc5ba20, 0x344ca: 0x6dc5bc20, 0x344cb: 0x6dc5be20, + 0x344cc: 0x6dc5c020, 0x344cd: 0x6dc5c220, 0x344ce: 0x6dc5c420, 0x344cf: 0x6dc5c620, + 0x344d0: 0x6dc5c820, 0x344d1: 0x6dc5ca20, 0x344d2: 0x6dc5cc20, 0x344d3: 0x6dc5ce20, + 0x344d4: 0x6dc5d020, 0x344d5: 0x6dc5d220, 0x344d6: 0x6dc5d420, 0x344d7: 0x6dc5d620, + 0x344d8: 0x6dc5d820, 0x344d9: 0x6dc5da20, 0x344da: 0x6dc5dc20, 0x344db: 0x6dc5de20, + 0x344dc: 0x6dc5e020, 0x344dd: 0x6dc5e220, 0x344de: 0x6dc5e420, 0x344df: 0x6dc5e620, + 0x344e0: 0x6dc5e820, 0x344e1: 0x6dc5ea20, 0x344e2: 0x6dc5ec20, 0x344e3: 0x6dc5ee20, + 0x344e4: 0x6dc5f020, 0x344e5: 0x6dc5f220, 0x344e6: 0x6de29020, 0x344e7: 0x6de29220, + 0x344e8: 0x6de29420, 0x344e9: 0x6de29620, 0x344ea: 0x6de29820, 0x344eb: 0x6de29a20, + 0x344ec: 0x6de29c20, 0x344ed: 0x6de29e20, 0x344ee: 0x6de2a020, 0x344ef: 0x6de2a220, + 0x344f0: 0x6de2a420, 0x344f1: 0x6de2a620, 0x344f2: 0x6de2a820, 0x344f3: 0x6de2aa20, + 0x344f4: 0x6de2ac20, 0x344f5: 0x6de2ae20, 0x344f6: 0x6de2b020, 0x344f7: 0x6de2b220, + 0x344f8: 0x6de2b420, 0x344f9: 0x6de2b620, 0x344fa: 0x6de2b820, 0x344fb: 0x6de2ba20, + 0x344fc: 0x6de2bc20, 0x344fd: 0x6de2be20, 0x344fe: 0x6de2c020, 0x344ff: 0x6de2c220, + // Block 0xd14, offset 0x34500 + 0x34500: 0x6de2c420, 0x34501: 0x6de2c620, 0x34502: 0x6de2c820, 0x34503: 0x6de2ca20, + 0x34504: 0x6de2cc20, 0x34505: 0x6de2ce20, 0x34506: 0x6de2d020, 0x34507: 0x6de2d220, + 0x34508: 0x6de2d420, 0x34509: 0x6de2d620, 0x3450a: 0x6de2d820, 0x3450b: 0x6dfa3a20, + 0x3450c: 0x6dfa3c20, 0x3450d: 0x6dfa3e20, 0x3450e: 0x6dfa4020, 0x3450f: 0x6dfa4220, + 0x34510: 0x6dfa4420, 0x34511: 0x6dfa4620, 0x34512: 0x6dfa4820, 0x34513: 0x6dfa4a20, + 0x34514: 0x6dfa4c20, 0x34515: 0x6dfa4e20, 0x34516: 0x6dfa5020, 0x34517: 0x6e0dc620, + 0x34518: 0x6e0dc820, 0x34519: 0x6e0dca20, 0x3451a: 0x6e0dcc20, 0x3451b: 0x6e0dce20, + 0x3451c: 0x6e0dd020, 0x3451d: 0x6e0dd220, 0x3451e: 0x6e0dd420, 0x3451f: 0x6e0dd620, + 0x34520: 0x6e0dd820, 0x34521: 0x6e0dda20, 0x34522: 0x6e0ddc20, 0x34523: 0x6e0dde20, + 0x34524: 0x6e0de020, 0x34525: 0x6e1d3a20, 0x34526: 0x6e1d3c20, 0x34527: 0x6e1d3e20, + 0x34528: 0x6e1d4020, 0x34529: 0x6e1d4220, 0x3452a: 0x6e1d4420, 0x3452b: 0x6e1d4620, + 0x3452c: 0x6e1d4820, 0x3452d: 0x6e1d4a20, 0x3452e: 0x6e1d4c20, 0x3452f: 0x6e28d820, + 0x34530: 0x6e28da20, 0x34531: 0x6e28dc20, 0x34532: 0x6e28de20, 0x34533: 0x6e28e020, + 0x34534: 0x6e28e220, 0x34535: 0x6e28e420, 0x34536: 0x6e28e620, 0x34537: 0x6e28e820, + 0x34538: 0x6e28ea20, 0x34539: 0x6e28ec20, 0x3453a: 0x6e28ee20, 0x3453b: 0x6e321620, + 0x3453c: 0x6e321820, 0x3453d: 0x6e321a20, 0x3453e: 0x6e321c20, 0x3453f: 0x6e321e20, + // Block 0xd15, offset 0x34540 + 0x34540: 0x6e322020, 0x34541: 0x6e322220, 0x34542: 0x6e322420, 0x34543: 0x6e3d2820, + 0x34544: 0x6e3d2a20, 0x34545: 0x6e403e20, 0x34546: 0x6e404020, 0x34547: 0x6e404220, + 0x34548: 0x6e429a20, 0x34549: 0x6e429c20, 0x3454a: 0x6e451c20, 0x3454b: 0x6e45c020, + 0x3454c: 0x6c092620, 0x3454d: 0x6c092820, 0x3454e: 0x6c11c420, 0x3454f: 0x6c11c620, + 0x34550: 0x6c11c820, 0x34551: 0x6c11ca20, 0x34552: 0x6c200620, 0x34553: 0x6c200820, + 0x34554: 0x6c200a20, 0x34555: 0x6c200c20, 0x34556: 0x6c200e20, 0x34557: 0x6c201020, + 0x34558: 0x6c201220, 0x34559: 0x6c201420, 0x3455a: 0x6c33ea20, 0x3455b: 0x6c33ec20, + 0x3455c: 0x6c33ee20, 0x3455d: 0x6c33f020, 0x3455e: 0x6c33f220, 0x3455f: 0x6c33f420, + 0x34560: 0x6c33f620, 0x34561: 0x6c33f820, 0x34562: 0x6c33fa20, 0x34563: 0x6c33fc20, + 0x34564: 0x6c33fe20, 0x34565: 0x6c340020, 0x34566: 0x6c4ea220, 0x34567: 0x6c4ea420, + 0x34568: 0x6c4ea620, 0x34569: 0x6c4ea820, 0x3456a: 0x6c4eaa20, 0x3456b: 0x6c4eac20, + 0x3456c: 0x6c4eae20, 0x3456d: 0x6c4eb020, 0x3456e: 0x6c4eb220, 0x3456f: 0x6c4eb420, + 0x34570: 0x6c4eb620, 0x34571: 0x6c4eb820, 0x34572: 0x6c4eba20, 0x34573: 0x6c4ebc20, + 0x34574: 0x6c4ebe20, 0x34575: 0x6c4ec020, 0x34576: 0x6c4ec220, 0x34577: 0x6c709e20, + 0x34578: 0x6c70a020, 0x34579: 0x6c70a220, 0x3457a: 0x6c70a420, 0x3457b: 0x6c70a620, + 0x3457c: 0x6c70a820, 0x3457d: 0x6c70aa20, 0x3457e: 0x6c70ac20, 0x3457f: 0x6c98c020, + // Block 0xd16, offset 0x34580 + 0x34580: 0x6c98c220, 0x34581: 0x6c98c420, 0x34582: 0x6c98c620, 0x34583: 0x6c98c820, + 0x34584: 0x6c98ca20, 0x34585: 0x6c98cc20, 0x34586: 0x6c98ce20, 0x34587: 0x6c98d020, + 0x34588: 0x6cc49420, 0x34589: 0x6cc49620, 0x3458a: 0x6cc49820, 0x3458b: 0x6cc49a20, + 0x3458c: 0x6cc49c20, 0x3458d: 0x6cc49e20, 0x3458e: 0x6cc4a020, 0x3458f: 0x6cc4a220, + 0x34590: 0x6cc4a420, 0x34591: 0x6cc4a620, 0x34592: 0x6cc4a820, 0x34593: 0x6cc4aa20, + 0x34594: 0x6cf38420, 0x34595: 0x6cf38620, 0x34596: 0x6cf38820, 0x34597: 0x6cf38a20, + 0x34598: 0x6cf38c20, 0x34599: 0x6cf38e20, 0x3459a: 0x6cf39020, 0x3459b: 0x6cf39220, + 0x3459c: 0x6cf39420, 0x3459d: 0x6cf39620, 0x3459e: 0x6cf39820, 0x3459f: 0x6cf39a20, + 0x345a0: 0x6cf39c20, 0x345a1: 0x6cf39e20, 0x345a2: 0x6d234220, 0x345a3: 0x6d234420, + 0x345a4: 0x6d234620, 0x345a5: 0x6d234820, 0x345a6: 0x6d234a20, 0x345a7: 0x6d234c20, + 0x345a8: 0x6d50c820, 0x345a9: 0x6d234e20, 0x345aa: 0x6d235020, 0x345ab: 0x6d235220, + 0x345ac: 0x6d235420, 0x345ad: 0x6d235620, 0x345ae: 0x6d235820, 0x345af: 0x6d235a20, + 0x345b0: 0x6d235c20, 0x345b1: 0x6d235e20, 0x345b2: 0x6d50ca20, 0x345b3: 0x6d50cc20, + 0x345b4: 0x6d50ce20, 0x345b5: 0x6d50d020, 0x345b6: 0x6d50d220, 0x345b7: 0x6d50d420, + 0x345b8: 0x6d50d620, 0x345b9: 0x6d50d820, 0x345ba: 0x6d50da20, 0x345bb: 0x6d50dc20, + 0x345bc: 0x6d50de20, 0x345bd: 0x6d50e020, 0x345be: 0x6d50e220, 0x345bf: 0x6d50e420, + // Block 0xd17, offset 0x345c0 + 0x345c0: 0x6d50e620, 0x345c1: 0x6d50e820, 0x345c2: 0x6d50ea20, 0x345c3: 0x6d50ec20, + 0x345c4: 0x6d50ee20, 0x345c5: 0x6d50f020, 0x345c6: 0x6d50f220, 0x345c7: 0x6d7c9420, + 0x345c8: 0x6d7c9620, 0x345c9: 0x6d7c9820, 0x345ca: 0x6d7c9a20, 0x345cb: 0x6d7c9c20, + 0x345cc: 0x6d7c9e20, 0x345cd: 0x6d7ca020, 0x345ce: 0x6d7ca220, 0x345cf: 0x6d7ca420, + 0x345d0: 0x6d784620, 0x345d1: 0x6d7ca620, 0x345d2: 0x6d7ca820, 0x345d3: 0x6da46e20, + 0x345d4: 0x6da47020, 0x345d5: 0x6da47220, 0x345d6: 0x6da47420, 0x345d7: 0x6da47620, + 0x345d8: 0x6dc60220, 0x345d9: 0x6dc60420, 0x345da: 0x6de2e020, 0x345db: 0x6de2e220, + 0x345dc: 0x6de2e420, 0x345dd: 0x6de2e620, 0x345de: 0x6dfa5620, 0x345df: 0x6dfa5820, + 0x345e0: 0x6dfa5a20, 0x345e1: 0x6e0de620, 0x345e2: 0x6e0de820, 0x345e3: 0x6e0dea20, + 0x345e4: 0x6c092e20, 0x345e5: 0x6c093020, 0x345e6: 0x6c11ce20, 0x345e7: 0x6c11d020, + 0x345e8: 0x6c11d220, 0x345e9: 0x6c11d420, 0x345ea: 0x6c201e20, 0x345eb: 0x6c202020, + 0x345ec: 0x6c202220, 0x345ed: 0x6c202420, 0x345ee: 0x6c202620, 0x345ef: 0x6c340e20, + 0x345f0: 0x6c341020, 0x345f1: 0x6c341220, 0x345f2: 0x6c341420, 0x345f3: 0x6c341620, + 0x345f4: 0x6c341820, 0x345f5: 0x6c341a20, 0x345f6: 0x6c4ed220, 0x345f7: 0x6c4ed420, + 0x345f8: 0x6c4ed620, 0x345f9: 0x6c4ed820, 0x345fa: 0x6c4eda20, 0x345fb: 0x6c4edc20, + 0x345fc: 0x6c4ede20, 0x345fd: 0x6c4ee020, 0x345fe: 0x6c4ee220, 0x345ff: 0x6c4ee420, + // Block 0xd18, offset 0x34600 + 0x34600: 0x6c4ee620, 0x34601: 0x6c4ee820, 0x34602: 0x6c4eea20, 0x34603: 0x6c4eec20, + 0x34604: 0x6c4eee20, 0x34605: 0x6c70ba20, 0x34606: 0x6c70bc20, 0x34607: 0x6c70be20, + 0x34608: 0x6c70c020, 0x34609: 0x6c70c220, 0x3460a: 0x6c70c420, 0x3460b: 0x6c70c620, + 0x3460c: 0x6c70c820, 0x3460d: 0x6c98d820, 0x3460e: 0x6c98da20, 0x3460f: 0x6c98dc20, + 0x34610: 0x6c98de20, 0x34611: 0x6cc4b220, 0x34612: 0x6cc4b420, 0x34613: 0x6cc4b620, + 0x34614: 0x6cc4b820, 0x34615: 0x6cc4ba20, 0x34616: 0x6cf3a220, 0x34617: 0x6cf3a420, + 0x34618: 0x6d236220, 0x34619: 0x6d236420, 0x3461a: 0x6d236620, 0x3461b: 0x6d236820, + 0x3461c: 0x6d50f420, 0x3461d: 0x6d50f620, 0x3461e: 0x6d50f820, 0x3461f: 0x6d7cb020, + 0x34620: 0x6da47820, 0x34621: 0x6dc60620, 0x34622: 0x6e0dec20, 0x34623: 0x6e28f220, + 0x34624: 0x6e28f420, 0x34625: 0x6c047820, 0x34626: 0x6c047a20, 0x34627: 0x6c047c20, + 0x34628: 0x6c094620, 0x34629: 0x6c094820, 0x3462a: 0x6c094a20, 0x3462b: 0x6c094c20, + 0x3462c: 0x6c094e20, 0x3462d: 0x6c120620, 0x3462e: 0x6c120820, 0x3462f: 0x6c120a20, + 0x34630: 0x6c120c20, 0x34631: 0x6c120e20, 0x34632: 0x6c121020, 0x34633: 0x6c121220, + 0x34634: 0x6c121420, 0x34635: 0x6c121620, 0x34636: 0x6c121820, 0x34637: 0x6c121a20, + 0x34638: 0x6c121c20, 0x34639: 0x6c121e20, 0x3463a: 0x6c122020, 0x3463b: 0x6c122220, + 0x3463c: 0x6c122420, 0x3463d: 0x6c122620, 0x3463e: 0x6c122820, 0x3463f: 0x6c122a20, + // Block 0xd19, offset 0x34640 + 0x34640: 0x6c122c20, 0x34641: 0x6c122e20, 0x34642: 0x6c123020, 0x34643: 0x6c20a820, + 0x34644: 0x6c20aa20, 0x34645: 0x6c20ac20, 0x34646: 0x6c20ae20, 0x34647: 0x6c20b020, + 0x34648: 0x6c20b220, 0x34649: 0x6c20b420, 0x3464a: 0x6c20b620, 0x3464b: 0x6c20b820, + 0x3464c: 0x6c20ba20, 0x3464d: 0x6c20bc20, 0x3464e: 0x6c20be20, 0x3464f: 0x6c20c020, + 0x34650: 0x6c20c220, 0x34651: 0x6c20c420, 0x34652: 0x6c20c620, 0x34653: 0x6c20c820, + 0x34654: 0x6c20ca20, 0x34655: 0x6c20cc20, 0x34656: 0x6c20ce20, 0x34657: 0x6c20d020, + 0x34658: 0x6c20d220, 0x34659: 0x6c20d420, 0x3465a: 0x6c20d620, 0x3465b: 0x6c20d820, + 0x3465c: 0x6c20da20, 0x3465d: 0x6c20dc20, 0x3465e: 0x6c20de20, 0x3465f: 0x6c20e020, + 0x34660: 0x6c20e220, 0x34661: 0x6c20e420, 0x34662: 0x6c20e620, 0x34663: 0x6c20e820, + 0x34664: 0x6c20ea20, 0x34665: 0x6c20ec20, 0x34666: 0x6c20ee20, 0x34667: 0x6c20f020, + 0x34668: 0x6c20f220, 0x34669: 0x6c20f420, 0x3466a: 0x6c20f620, 0x3466b: 0x6c20f820, + 0x3466c: 0x6c20fa20, 0x3466d: 0x6c20fc20, 0x3466e: 0x6c20fe20, 0x3466f: 0x6c210020, + 0x34670: 0x6c210220, 0x34671: 0x6c210420, 0x34672: 0x6c210620, 0x34673: 0x6c210820, + 0x34674: 0x6c34be20, 0x34675: 0x6c34c020, 0x34676: 0x6c34c220, 0x34677: 0x6c34c420, + 0x34678: 0x6c34c620, 0x34679: 0x6c34c820, 0x3467a: 0x6c34ca20, 0x3467b: 0x6c34cc20, + 0x3467c: 0x6c34ce20, 0x3467d: 0x6c34d020, 0x3467e: 0x6c34d220, 0x3467f: 0x6c34d420, + // Block 0xd1a, offset 0x34680 + 0x34680: 0x6c34d620, 0x34681: 0x6c34d820, 0x34682: 0x6c34da20, 0x34683: 0x6c34dc20, + 0x34684: 0x6c34de20, 0x34685: 0x6c34e020, 0x34686: 0x6c34e220, 0x34687: 0x6c34e420, + 0x34688: 0x6c34e620, 0x34689: 0x6c34e820, 0x3468a: 0x6c34ea20, 0x3468b: 0x6c34ec20, + 0x3468c: 0x6c34ee20, 0x3468d: 0x6c34f020, 0x3468e: 0x6c34f220, 0x3468f: 0x6c34f420, + 0x34690: 0x6c34f620, 0x34691: 0x6c34f820, 0x34692: 0x6c34fa20, 0x34693: 0x6c34fc20, + 0x34694: 0x6c34fe20, 0x34695: 0x6c350020, 0x34696: 0x6c350220, 0x34697: 0x6c350420, + 0x34698: 0x6c350620, 0x34699: 0x6c350820, 0x3469a: 0x6c350a20, 0x3469b: 0x6c350c20, + 0x3469c: 0x6c350e20, 0x3469d: 0x6c351020, 0x3469e: 0x6c351220, 0x3469f: 0x6c351420, + 0x346a0: 0x6c351620, 0x346a1: 0x6c351820, 0x346a2: 0x6c351a20, 0x346a3: 0x6c351c20, + 0x346a4: 0x6c4f8020, 0x346a5: 0x6c4f8220, 0x346a6: 0x6c4f8420, 0x346a7: 0x6c4f8620, + 0x346a8: 0x6c4f8820, 0x346a9: 0x6c4f8a20, 0x346aa: 0x6c4f8c20, 0x346ab: 0x6c4f8e20, + 0x346ac: 0x6c4f9020, 0x346ad: 0x6c4f9220, 0x346ae: 0x6c4f9420, 0x346af: 0x6c4f9620, + 0x346b0: 0x6c4f9820, 0x346b1: 0x6c4f9a20, 0x346b2: 0x6c4f9c20, 0x346b3: 0x6c4f9e20, + 0x346b4: 0x6c4fa020, 0x346b5: 0x6c4fa220, 0x346b6: 0x6c4fa420, 0x346b7: 0x6c4fa620, + 0x346b8: 0x6c4fa820, 0x346b9: 0x6c4faa20, 0x346ba: 0x6c4fac20, 0x346bb: 0x6c4fae20, + 0x346bc: 0x6c4fb020, 0x346bd: 0x6c4fb220, 0x346be: 0x6c4fb420, 0x346bf: 0x6c4fb620, + // Block 0xd1b, offset 0x346c0 + 0x346c0: 0x6c4fb820, 0x346c1: 0x6c4fba20, 0x346c2: 0x6c4fbc20, 0x346c3: 0x6c4fbe20, + 0x346c4: 0x6c4fc020, 0x346c5: 0x6c4fc220, 0x346c6: 0x6c4fc420, 0x346c7: 0x6c4fc620, + 0x346c8: 0x6c4fc820, 0x346c9: 0x6c4fca20, 0x346ca: 0x6c4fcc20, 0x346cb: 0x6c4fce20, + 0x346cc: 0x6c4fd020, 0x346cd: 0x6c4fd220, 0x346ce: 0x6c4fd420, 0x346cf: 0x6c4fd620, + 0x346d0: 0x6c4fd820, 0x346d1: 0x6c4fda20, 0x346d2: 0x6c4fdc20, 0x346d3: 0x6c4fde20, + 0x346d4: 0x6c4fe020, 0x346d5: 0x6c4fe220, 0x346d6: 0x6c4fe420, 0x346d7: 0x6c4fe620, + 0x346d8: 0x6c4fe820, 0x346d9: 0x6c4fea20, 0x346da: 0x6c4fec20, 0x346db: 0x6c4fee20, + 0x346dc: 0x6c4ff020, 0x346dd: 0x6c4ff220, 0x346de: 0x6c4ff420, 0x346df: 0x6c4ff620, + 0x346e0: 0x6c4ff820, 0x346e1: 0x6c4ffa20, 0x346e2: 0x6c4ffc20, 0x346e3: 0x6c4ffe20, + 0x346e4: 0x6c500020, 0x346e5: 0x6c500220, 0x346e6: 0x6c500420, 0x346e7: 0x6c500620, + 0x346e8: 0x6c500820, 0x346e9: 0x6c500a20, 0x346ea: 0x6c500c20, 0x346eb: 0x6c500e20, + 0x346ec: 0x6c501020, 0x346ed: 0x6c501220, 0x346ee: 0x6c501420, 0x346ef: 0x6c716220, + 0x346f0: 0x6c716420, 0x346f1: 0x6c716620, 0x346f2: 0x6c716820, 0x346f3: 0x6c716a20, + 0x346f4: 0x6c716c20, 0x346f5: 0x6c716e20, 0x346f6: 0x6c717020, 0x346f7: 0x6c717220, + 0x346f8: 0x6c717420, 0x346f9: 0x6c717620, 0x346fa: 0x6c717820, 0x346fb: 0x6c717a20, + 0x346fc: 0x6c717c20, 0x346fd: 0x6c717e20, 0x346fe: 0x6c718020, 0x346ff: 0x6c718220, + // Block 0xd1c, offset 0x34700 + 0x34700: 0x6c718420, 0x34701: 0x6c718620, 0x34702: 0x6c718820, 0x34703: 0x6c718a20, + 0x34704: 0x6c718c20, 0x34705: 0x6c718e20, 0x34706: 0x6c719020, 0x34707: 0x6c719220, + 0x34708: 0x6c719420, 0x34709: 0x6c719620, 0x3470a: 0x6c719820, 0x3470b: 0x6c719a20, + 0x3470c: 0x6c719c20, 0x3470d: 0x6c719e20, 0x3470e: 0x6c71a020, 0x3470f: 0x6c71a220, + 0x34710: 0x6c71a420, 0x34711: 0x6c71a620, 0x34712: 0x6c71a820, 0x34713: 0x6c71aa20, + 0x34714: 0x6c71ac20, 0x34715: 0x6c71ae20, 0x34716: 0x6c71b020, 0x34717: 0x6c71b220, + 0x34718: 0x6c71b420, 0x34719: 0x6c71b620, 0x3471a: 0x6c71b820, 0x3471b: 0x6c71ba20, + 0x3471c: 0x6c71bc20, 0x3471d: 0x6c71be20, 0x3471e: 0x6c71c020, 0x3471f: 0x6c71c220, + 0x34720: 0x6c71c420, 0x34721: 0x6c71c620, 0x34722: 0x6c71c820, 0x34723: 0x6c71ca20, + 0x34724: 0x6c71cc20, 0x34725: 0x6c71ce20, 0x34726: 0x6c71d020, 0x34727: 0x6c71d220, + 0x34728: 0x6c71d420, 0x34729: 0x6c71d620, 0x3472a: 0x6c71d820, 0x3472b: 0x6c71da20, + 0x3472c: 0x6c71dc20, 0x3472d: 0x6c71de20, 0x3472e: 0x6c71e020, 0x3472f: 0x6c71e220, + 0x34730: 0x6c71e420, 0x34731: 0x6c71e620, 0x34732: 0x6c71e820, 0x34733: 0x6c71ea20, + 0x34734: 0x6c71ec20, 0x34735: 0x6c71ee20, 0x34736: 0x6c71f020, 0x34737: 0x6c71f220, + 0x34738: 0x6c71f420, 0x34739: 0x6c71f620, 0x3473a: 0x6c71f820, 0x3473b: 0x6c71fa20, + 0x3473c: 0x6c71fc20, 0x3473d: 0x6c71fe20, 0x3473e: 0x6c720020, 0x3473f: 0x6c720220, + // Block 0xd1d, offset 0x34740 + 0x34740: 0x6c720420, 0x34741: 0x6c99ac20, 0x34742: 0x6c99ae20, 0x34743: 0x6c99b020, + 0x34744: 0x6c99b220, 0x34745: 0x6c99b420, 0x34746: 0x6c99b620, 0x34747: 0x6c99b820, + 0x34748: 0x6c99ba20, 0x34749: 0x6c99bc20, 0x3474a: 0x6c99be20, 0x3474b: 0x6c99c020, + 0x3474c: 0x6c99c220, 0x3474d: 0x6c99c420, 0x3474e: 0x6c99c620, 0x3474f: 0x6c99c820, + 0x34750: 0x6c99ca20, 0x34751: 0x6c99cc20, 0x34752: 0x6c99ce20, 0x34753: 0x6c99d020, + 0x34754: 0x6c99d220, 0x34755: 0x6c99d420, 0x34756: 0x6c99d620, 0x34757: 0x6c99d820, + 0x34758: 0x6c99da20, 0x34759: 0x6c99dc20, 0x3475a: 0x6c99de20, 0x3475b: 0x6c99e020, + 0x3475c: 0x6c99e220, 0x3475d: 0x6c99e420, 0x3475e: 0x6c99e620, 0x3475f: 0x6c99e820, + 0x34760: 0x6c99ea20, 0x34761: 0x6c99ec20, 0x34762: 0x6c99ee20, 0x34763: 0x6c99f020, + 0x34764: 0x6c99f220, 0x34765: 0x6c99f420, 0x34766: 0x6c99f620, 0x34767: 0x6c99f820, + 0x34768: 0x6c99fa20, 0x34769: 0x6c99fc20, 0x3476a: 0x6c99fe20, 0x3476b: 0x6c9a0020, + 0x3476c: 0x6c9a0220, 0x3476d: 0x6c9a0420, 0x3476e: 0x6c9a0620, 0x3476f: 0x6c9a0820, + 0x34770: 0x6c9a0a20, 0x34771: 0x6c9a0c20, 0x34772: 0x6c9a0e20, 0x34773: 0x6c9a1020, + 0x34774: 0x6c9a1220, 0x34775: 0x6c9a1420, 0x34776: 0x6c9a1620, 0x34777: 0x6c9a1820, + 0x34778: 0x6c9a1a20, 0x34779: 0x6c9a1c20, 0x3477a: 0x6c9a1e20, 0x3477b: 0x6c9a2020, + 0x3477c: 0x6c9a2220, 0x3477d: 0x6c9a2420, 0x3477e: 0x6c9a2620, 0x3477f: 0x6c9a2820, + // Block 0xd1e, offset 0x34780 + 0x34780: 0x6c9a2a20, 0x34781: 0x6c9a2c20, 0x34782: 0x6c9a2e20, 0x34783: 0x6c9a3020, + 0x34784: 0x6c9a3220, 0x34785: 0x6c9a3420, 0x34786: 0x6c9a3620, 0x34787: 0x6c9a3820, + 0x34788: 0x6c9a3a20, 0x34789: 0x6c9a3c20, 0x3478a: 0x6c9a3e20, 0x3478b: 0x6c9a4020, + 0x3478c: 0x6c9a4220, 0x3478d: 0x6c9a4420, 0x3478e: 0x6c9a4620, 0x3478f: 0x6c9a4820, + 0x34790: 0x6c9a4a20, 0x34791: 0x6c9a4c20, 0x34792: 0x6c9a4e20, 0x34793: 0x6c9a5020, + 0x34794: 0x6c9a5220, 0x34795: 0x6c9a5420, 0x34796: 0x6c9a5620, 0x34797: 0x6c9a5820, + 0x34798: 0x6c9a5a20, 0x34799: 0x6c9a5c20, 0x3479a: 0x6c9a5e20, 0x3479b: 0x6c9a6020, + 0x3479c: 0x6c9a6220, 0x3479d: 0x6c9a6420, 0x3479e: 0x6c9a6620, 0x3479f: 0x6c9a6820, + 0x347a0: 0x6c9a6a20, 0x347a1: 0x6c9a6c20, 0x347a2: 0x6c9a6e20, 0x347a3: 0x6c9a7020, + 0x347a4: 0x6c9a7220, 0x347a5: 0x6c9a7420, 0x347a6: 0x6c9a7620, 0x347a7: 0x6c9a7820, + 0x347a8: 0x6c9a7a20, 0x347a9: 0x6cc56a20, 0x347aa: 0x6cc56c20, 0x347ab: 0x6cc56e20, + 0x347ac: 0x6cc57020, 0x347ad: 0x6cc57220, 0x347ae: 0x6cc57420, 0x347af: 0x6cc57620, + 0x347b0: 0x6cc57820, 0x347b1: 0x6cc57a20, 0x347b2: 0x6cc57c20, 0x347b3: 0x6cc57e20, + 0x347b4: 0x6cc58020, 0x347b5: 0x6cc58220, 0x347b6: 0x6cc58420, 0x347b7: 0x6cc58620, + 0x347b8: 0x6cc58820, 0x347b9: 0x6cc58a20, 0x347ba: 0x6cc58c20, 0x347bb: 0x6cc58e20, + 0x347bc: 0x6cc59020, 0x347bd: 0x6cc59220, 0x347be: 0x6cc59420, 0x347bf: 0x6cc59620, + // Block 0xd1f, offset 0x347c0 + 0x347c0: 0x6cc59820, 0x347c1: 0x6cc59a20, 0x347c2: 0x6cc59c20, 0x347c3: 0x6cc59e20, + 0x347c4: 0x6cc5a020, 0x347c5: 0x6cc5a220, 0x347c6: 0x6cc5a420, 0x347c7: 0x6cc5a620, + 0x347c8: 0x6cc5a820, 0x347c9: 0x6cc5aa20, 0x347ca: 0x6cc5ac20, 0x347cb: 0x6cc5ae20, + 0x347cc: 0x6cc5b020, 0x347cd: 0x6cc5b220, 0x347ce: 0x6cc5b420, 0x347cf: 0x6cc5b620, + 0x347d0: 0x6cc5b820, 0x347d1: 0x6cc5ba20, 0x347d2: 0x6cc5bc20, 0x347d3: 0x6cc5be20, + 0x347d4: 0x6cc5c020, 0x347d5: 0x6cc5c220, 0x347d6: 0x6cc5c420, 0x347d7: 0x6cc5c620, + 0x347d8: 0x6cc5c820, 0x347d9: 0x6cc5ca20, 0x347da: 0x6cc5cc20, 0x347db: 0x6cc5ce20, + 0x347dc: 0x6cc5d020, 0x347dd: 0x6cc5d220, 0x347de: 0x6cc5d420, 0x347df: 0x6cc5d620, + 0x347e0: 0x6cc5d820, 0x347e1: 0x6cc5da20, 0x347e2: 0x6cc5dc20, 0x347e3: 0x6cc5de20, + 0x347e4: 0x6cc5e020, 0x347e5: 0x6cc5e220, 0x347e6: 0x6cc5e420, 0x347e7: 0x6cc5e620, + 0x347e8: 0x6cc5e820, 0x347e9: 0x6cc5ea20, 0x347ea: 0x6cc5ec20, 0x347eb: 0x6cc5ee20, + 0x347ec: 0x6cc5f020, 0x347ed: 0x6cc5f220, 0x347ee: 0x6cc5f420, 0x347ef: 0x6cc5f620, + 0x347f0: 0x6cc5f820, 0x347f1: 0x6cc5fa20, 0x347f2: 0x6cc5fc20, 0x347f3: 0x6cc5fe20, + 0x347f4: 0x6cc60020, 0x347f5: 0x6cc60220, 0x347f6: 0x6cc60420, 0x347f7: 0x6cc60620, + 0x347f8: 0x6cc60820, 0x347f9: 0x6cc60a20, 0x347fa: 0x6cc60c20, 0x347fb: 0x6cc60e20, + 0x347fc: 0x6cc61020, 0x347fd: 0x6cc61220, 0x347fe: 0x6cc61420, 0x347ff: 0x6d017820, + // Block 0xd20, offset 0x34800 + 0x34800: 0x6cc61620, 0x34801: 0x6cc61820, 0x34802: 0x6cc61a20, 0x34803: 0x6cc61c20, + 0x34804: 0x6cc61e20, 0x34805: 0x6cc62020, 0x34806: 0x6cc62220, 0x34807: 0x6cc62420, + 0x34808: 0x6cc62620, 0x34809: 0x6cc62820, 0x3480a: 0x6cc62a20, 0x3480b: 0x6cc62c20, + 0x3480c: 0x6cc62e20, 0x3480d: 0x6cc63020, 0x3480e: 0x6cc63220, 0x3480f: 0x6cc63420, + 0x34810: 0x6cc63620, 0x34811: 0x6cc63820, 0x34812: 0x6cc63a20, 0x34813: 0x6cc63c20, + 0x34814: 0x6cc63e20, 0x34815: 0x6cc64020, 0x34816: 0x6cc64220, 0x34817: 0x6cc64420, + 0x34818: 0x6cc64620, 0x34819: 0x6cc64820, 0x3481a: 0x6cc64a20, 0x3481b: 0x6cc64c20, + 0x3481c: 0x6cc64e20, 0x3481d: 0x6cc65020, 0x3481e: 0x6cc65220, 0x3481f: 0x6cf45a20, + 0x34820: 0x6cf45c20, 0x34821: 0x6cf45e20, 0x34822: 0x6cf46020, 0x34823: 0x6cf46220, + 0x34824: 0x6cf46420, 0x34825: 0x6cf46620, 0x34826: 0x6cf46820, 0x34827: 0x6cf46a20, + 0x34828: 0x6cf46c20, 0x34829: 0x6cf46e20, 0x3482a: 0x6cf47020, 0x3482b: 0x6cf47220, + 0x3482c: 0x6cf47420, 0x3482d: 0x6cf47620, 0x3482e: 0x6cf47820, 0x3482f: 0x6cf47a20, + 0x34830: 0x6cf47c20, 0x34831: 0x6cf47e20, 0x34832: 0x6cf48020, 0x34833: 0x6cf48220, + 0x34834: 0x6cf48420, 0x34835: 0x6cf48620, 0x34836: 0x6cf48820, 0x34837: 0x6cf48a20, + 0x34838: 0x6cf48c20, 0x34839: 0x6cf48e20, 0x3483a: 0x6cf49020, 0x3483b: 0x6cf49220, + 0x3483c: 0x6cf49420, 0x3483d: 0x6cf49620, 0x3483e: 0x6cf49820, 0x3483f: 0x6cf49a20, + // Block 0xd21, offset 0x34840 + 0x34840: 0x6cf49c20, 0x34841: 0x6cf49e20, 0x34842: 0x6cf4a020, 0x34843: 0x6cf4a220, + 0x34844: 0x6cf4a420, 0x34845: 0x6cf4a620, 0x34846: 0x6cf4a820, 0x34847: 0x6cf4aa20, + 0x34848: 0x6cf4ac20, 0x34849: 0x6cf4ae20, 0x3484a: 0x6cf4b020, 0x3484b: 0x6cf4b220, + 0x3484c: 0x6cf4b420, 0x3484d: 0x6cf4b620, 0x3484e: 0x6cf4b820, 0x3484f: 0x6cf4ba20, + 0x34850: 0x6cf4bc20, 0x34851: 0x6cf4be20, 0x34852: 0x6cf4c020, 0x34853: 0x6cf4c220, + 0x34854: 0x6cf4c420, 0x34855: 0x6cf4c620, 0x34856: 0x6cf4c820, 0x34857: 0x6cf4ca20, + 0x34858: 0x6cf4cc20, 0x34859: 0x6cf4ce20, 0x3485a: 0x6cf4d020, 0x3485b: 0x6cf4d220, + 0x3485c: 0x6cf4d420, 0x3485d: 0x6cf4d620, 0x3485e: 0x6cf4d820, 0x3485f: 0x6cf4da20, + 0x34860: 0x6cf4dc20, 0x34861: 0x6cf4de20, 0x34862: 0x6cf4e020, 0x34863: 0x6cf4e220, + 0x34864: 0x6cf4e420, 0x34865: 0x6cf4e620, 0x34866: 0x6cf4e820, 0x34867: 0x6cf4ea20, + 0x34868: 0x6cf4ec20, 0x34869: 0x6cf4ee20, 0x3486a: 0x6cf4f020, 0x3486b: 0x6cf4f220, + 0x3486c: 0x6cf4f420, 0x3486d: 0x6cf4f620, 0x3486e: 0x6cf4f820, 0x3486f: 0x6cf4fa20, + 0x34870: 0x6cf4fc20, 0x34871: 0x6cf4fe20, 0x34872: 0x6cf50020, 0x34873: 0x6d23fa20, + 0x34874: 0x6d23fc20, 0x34875: 0x6d23fe20, 0x34876: 0x6d240020, 0x34877: 0x6d240220, + 0x34878: 0x6d240420, 0x34879: 0x6d240620, 0x3487a: 0x6d240820, 0x3487b: 0x6d240a20, + 0x3487c: 0x6d240c20, 0x3487d: 0x6d240e20, 0x3487e: 0x6d241020, 0x3487f: 0x6d241220, + // Block 0xd22, offset 0x34880 + 0x34880: 0x6d241420, 0x34881: 0x6d241620, 0x34882: 0x6d241820, 0x34883: 0x6d241a20, + 0x34884: 0x6d241c20, 0x34885: 0x6d241e20, 0x34886: 0x6d242020, 0x34887: 0x6d242220, + 0x34888: 0x6d242420, 0x34889: 0x6d242620, 0x3488a: 0x6d242820, 0x3488b: 0x6d242a20, + 0x3488c: 0x6d242c20, 0x3488d: 0x6d242e20, 0x3488e: 0x6d243020, 0x3488f: 0x6d243220, + 0x34890: 0x6d243420, 0x34891: 0x6d243620, 0x34892: 0x6d243820, 0x34893: 0x6d243a20, + 0x34894: 0x6d243c20, 0x34895: 0x6d243e20, 0x34896: 0x6d244020, 0x34897: 0x6d244220, + 0x34898: 0x6d244420, 0x34899: 0x6d244620, 0x3489a: 0x6d244820, 0x3489b: 0x6d244a20, + 0x3489c: 0x6d244c20, 0x3489d: 0x6d244e20, 0x3489e: 0x6d245020, 0x3489f: 0x6d245220, + 0x348a0: 0x6d245420, 0x348a1: 0x6d245620, 0x348a2: 0x6d245820, 0x348a3: 0x6d245a20, + 0x348a4: 0x6d245c20, 0x348a5: 0x6d245e20, 0x348a6: 0x6d246020, 0x348a7: 0x6d246220, + 0x348a8: 0x6d246420, 0x348a9: 0x6d246620, 0x348aa: 0x6d246820, 0x348ab: 0x6d246a20, + 0x348ac: 0x6d246c20, 0x348ad: 0x6d246e20, 0x348ae: 0x6d247020, 0x348af: 0x6d247220, + 0x348b0: 0x6d247420, 0x348b1: 0x6d247620, 0x348b2: 0x6d247820, 0x348b3: 0x6d247a20, + 0x348b4: 0x6d247c20, 0x348b5: 0x6d247e20, 0x348b6: 0x6d248020, 0x348b7: 0x6d248220, + 0x348b8: 0x6d248420, 0x348b9: 0x6d248620, 0x348ba: 0x6d248820, 0x348bb: 0x6d248a20, + 0x348bc: 0x6d248c20, 0x348bd: 0x6d248e20, 0x348be: 0x6d249020, 0x348bf: 0x6d249220, + // Block 0xd23, offset 0x348c0 + 0x348c0: 0x6d249420, 0x348c1: 0x6d249620, 0x348c2: 0x6d249820, 0x348c3: 0x6d249a20, + 0x348c4: 0x6d249c20, 0x348c5: 0x6d249e20, 0x348c6: 0x6d24a020, 0x348c7: 0x6d24a220, + 0x348c8: 0x6d24a420, 0x348c9: 0x6d24a620, 0x348ca: 0x6d24a820, 0x348cb: 0x6d24aa20, + 0x348cc: 0x6d24ac20, 0x348cd: 0x6d24ae20, 0x348ce: 0x6d24b020, 0x348cf: 0x6d24b220, + 0x348d0: 0x6d24b420, 0x348d1: 0x6d24b620, 0x348d2: 0x6d24b820, 0x348d3: 0x6d24ba20, + 0x348d4: 0x6d24bc20, 0x348d5: 0x6d24be20, 0x348d6: 0x6d24c020, 0x348d7: 0x6d24c220, + 0x348d8: 0x6d24c420, 0x348d9: 0x6d24c620, 0x348da: 0x6d24c820, 0x348db: 0x6d24ca20, + 0x348dc: 0x6d24cc20, 0x348dd: 0x6d24ce20, 0x348de: 0x6d24d020, 0x348df: 0x6d24d220, + 0x348e0: 0x6d519620, 0x348e1: 0x6d519820, 0x348e2: 0x6d519a20, 0x348e3: 0x6d519c20, + 0x348e4: 0x6d519e20, 0x348e5: 0x6d51a020, 0x348e6: 0x6d51a220, 0x348e7: 0x6d51a420, + 0x348e8: 0x6d51a620, 0x348e9: 0x6d51a820, 0x348ea: 0x6d51aa20, 0x348eb: 0x6d51ac20, + 0x348ec: 0x6d51ae20, 0x348ed: 0x6d51b020, 0x348ee: 0x6d51b220, 0x348ef: 0x6d51b420, + 0x348f0: 0x6d51b620, 0x348f1: 0x6d51b820, 0x348f2: 0x6d51ba20, 0x348f3: 0x6d51bc20, + 0x348f4: 0x6d51be20, 0x348f5: 0x6d51c020, 0x348f6: 0x6d51c220, 0x348f7: 0x6d51c420, + 0x348f8: 0x6d51c620, 0x348f9: 0x6d51c820, 0x348fa: 0x6d51ca20, 0x348fb: 0x6d51cc20, + 0x348fc: 0x6d51ce20, 0x348fd: 0x6d51d020, 0x348fe: 0x6d51d220, 0x348ff: 0x6d51d420, + // Block 0xd24, offset 0x34900 + 0x34900: 0x6d51d620, 0x34901: 0x6d51d820, 0x34902: 0x6d51da20, 0x34903: 0x6d51dc20, + 0x34904: 0x6d51de20, 0x34905: 0x6d51e020, 0x34906: 0x6d51e220, 0x34907: 0x6d51e420, + 0x34908: 0x6d51e620, 0x34909: 0x6d51e820, 0x3490a: 0x6d51ea20, 0x3490b: 0x6d51ec20, + 0x3490c: 0x6d51ee20, 0x3490d: 0x6d51f020, 0x3490e: 0x6d51f220, 0x3490f: 0x6d51f420, + 0x34910: 0x6d51f620, 0x34911: 0x6d51f820, 0x34912: 0x6d51fa20, 0x34913: 0x6d51fc20, + 0x34914: 0x6d51fe20, 0x34915: 0x6d520020, 0x34916: 0x6d520220, 0x34917: 0x6d520420, + 0x34918: 0x6d520620, 0x34919: 0x6d520820, 0x3491a: 0x6d520a20, 0x3491b: 0x6d520c20, + 0x3491c: 0x6d520e20, 0x3491d: 0x6d521020, 0x3491e: 0x6d521220, 0x3491f: 0x6d521420, + 0x34920: 0x6d521620, 0x34921: 0x6d521820, 0x34922: 0x6d521a20, 0x34923: 0x6d521c20, + 0x34924: 0x6d521e20, 0x34925: 0x6d522020, 0x34926: 0x6d522220, 0x34927: 0x6d522420, + 0x34928: 0x6d522620, 0x34929: 0x6d522820, 0x3492a: 0x6d522a20, 0x3492b: 0x6d522c20, + 0x3492c: 0x6d522e20, 0x3492d: 0x6d523020, 0x3492e: 0x6d523220, 0x3492f: 0x6d523420, + 0x34930: 0x6d523620, 0x34931: 0x6d523820, 0x34932: 0x6d523a20, 0x34933: 0x6d523c20, + 0x34934: 0x6d523e20, 0x34935: 0x6d524020, 0x34936: 0x6d524220, 0x34937: 0x6d524420, + 0x34938: 0x6d524620, 0x34939: 0x6d524820, 0x3493a: 0x6d524a20, 0x3493b: 0x6d524c20, + 0x3493c: 0x6d524e20, 0x3493d: 0x6d525020, 0x3493e: 0x6d525220, 0x3493f: 0x6d7d0220, + // Block 0xd25, offset 0x34940 + 0x34940: 0x6d7d0420, 0x34941: 0x6d7d0620, 0x34942: 0x6d7d0820, 0x34943: 0x6d7d0a20, + 0x34944: 0x6d7d0c20, 0x34945: 0x6d7d0e20, 0x34946: 0x6d7d1020, 0x34947: 0x6d7d1220, + 0x34948: 0x6d7d1420, 0x34949: 0x6d7d1620, 0x3494a: 0x6d7d1820, 0x3494b: 0x6d7d1a20, + 0x3494c: 0x6d7d1c20, 0x3494d: 0x6d7d1e20, 0x3494e: 0x6d7d2020, 0x3494f: 0x6d7d2220, + 0x34950: 0x6d7d2420, 0x34951: 0x6d7d2620, 0x34952: 0x6d7d2820, 0x34953: 0x6d7d2a20, + 0x34954: 0x6d7d2c20, 0x34955: 0x6d7d2e20, 0x34956: 0x6d7d3020, 0x34957: 0x6d7d3220, + 0x34958: 0x6d7d3420, 0x34959: 0x6d7d3620, 0x3495a: 0x6d7d3820, 0x3495b: 0x6d7d3a20, + 0x3495c: 0x6d7d3c20, 0x3495d: 0x6d7d3e20, 0x3495e: 0x6d7d4020, 0x3495f: 0x6d7d4220, + 0x34960: 0x6d7d4420, 0x34961: 0x6d7d4620, 0x34962: 0x6d7d4820, 0x34963: 0x6d7d4a20, + 0x34964: 0x6d7d4c20, 0x34965: 0x6d7d4e20, 0x34966: 0x6d7d5020, 0x34967: 0x6d7d5220, + 0x34968: 0x6d7d5420, 0x34969: 0x6d7d5620, 0x3496a: 0x6d7d5820, 0x3496b: 0x6d7d5a20, + 0x3496c: 0x6d7d5c20, 0x3496d: 0x6d7d5e20, 0x3496e: 0x6d7d6020, 0x3496f: 0x6d7d6220, + 0x34970: 0x6d7d6420, 0x34971: 0x6d7d6620, 0x34972: 0x6d7d6820, 0x34973: 0x6d7d6a20, + 0x34974: 0x6d7d6c20, 0x34975: 0x6d7d6e20, 0x34976: 0x6d7d7020, 0x34977: 0x6d7d7220, + 0x34978: 0x6d7d7420, 0x34979: 0x6d7d7620, 0x3497a: 0x6d7d7820, 0x3497b: 0x6d7d7a20, + 0x3497c: 0x6d7d7c20, 0x3497d: 0x6d7d7e20, 0x3497e: 0x6d7d8020, 0x3497f: 0x6d7d8220, + // Block 0xd26, offset 0x34980 + 0x34980: 0x6d7d8420, 0x34981: 0x6d7d8620, 0x34982: 0x6d7d8820, 0x34983: 0x6d7d8a20, + 0x34984: 0x6d7d8c20, 0x34985: 0x6d525420, 0x34986: 0x6d7d8e20, 0x34987: 0x6d7d9020, + 0x34988: 0x6d7d9220, 0x34989: 0x6d7d9420, 0x3498a: 0x6d7d9620, 0x3498b: 0x6da4ae20, + 0x3498c: 0x6da4b020, 0x3498d: 0x6da4b220, 0x3498e: 0x6da4b420, 0x3498f: 0x6da4b620, + 0x34990: 0x6da4b820, 0x34991: 0x6da4ba20, 0x34992: 0x6da4bc20, 0x34993: 0x6da4be20, + 0x34994: 0x6da4c020, 0x34995: 0x6da4c220, 0x34996: 0x6da4c420, 0x34997: 0x6da4c620, + 0x34998: 0x6da4c820, 0x34999: 0x6da4ca20, 0x3499a: 0x6da4cc20, 0x3499b: 0x6da4ce20, + 0x3499c: 0x6da4d020, 0x3499d: 0x6da4d220, 0x3499e: 0x6da4d420, 0x3499f: 0x6da4d620, + 0x349a0: 0x6da4d820, 0x349a1: 0x6da4da20, 0x349a2: 0x6da4dc20, 0x349a3: 0x6da4de20, + 0x349a4: 0x6da4e020, 0x349a5: 0x6da4e220, 0x349a6: 0x6da4e420, 0x349a7: 0x6da4e620, + 0x349a8: 0x6da4e820, 0x349a9: 0x6da4ea20, 0x349aa: 0x6da4ec20, 0x349ab: 0x6da4ee20, + 0x349ac: 0x6da4f020, 0x349ad: 0x6da4f220, 0x349ae: 0x6da4f420, 0x349af: 0x6da4f620, + 0x349b0: 0x6da4f820, 0x349b1: 0x6da4fa20, 0x349b2: 0x6da4fc20, 0x349b3: 0x6da4fe20, + 0x349b4: 0x6da50020, 0x349b5: 0x6da50220, 0x349b6: 0x6dc64e20, 0x349b7: 0x6dc65020, + 0x349b8: 0x6dc65220, 0x349b9: 0x6dc65420, 0x349ba: 0x6dc65620, 0x349bb: 0x6dc65820, + 0x349bc: 0x6dc65a20, 0x349bd: 0x6dc65c20, 0x349be: 0x6dc65e20, 0x349bf: 0x6dc66020, + // Block 0xd27, offset 0x349c0 + 0x349c0: 0x6dc66220, 0x349c1: 0x6dc66420, 0x349c2: 0x6dc66620, 0x349c3: 0x6dc66820, + 0x349c4: 0x6dc66a20, 0x349c5: 0x6dc66c20, 0x349c6: 0x6dc66e20, 0x349c7: 0x6dc67020, + 0x349c8: 0x6dc67220, 0x349c9: 0x6dc67420, 0x349ca: 0x6dc67620, 0x349cb: 0x6dc67820, + 0x349cc: 0x6dc67a20, 0x349cd: 0x6dc67c20, 0x349ce: 0x6dc67e20, 0x349cf: 0x6dc68020, + 0x349d0: 0x6dc68220, 0x349d1: 0x6dc68420, 0x349d2: 0x6dc68620, 0x349d3: 0x6dc68820, + 0x349d4: 0x6dc68a20, 0x349d5: 0x6dc68c20, 0x349d6: 0x6dc68e20, 0x349d7: 0x6dc69020, + 0x349d8: 0x6dc69220, 0x349d9: 0x6dc69420, 0x349da: 0x6dc69620, 0x349db: 0x6dc69820, + 0x349dc: 0x6dc69a20, 0x349dd: 0x6dc69c20, 0x349de: 0x6dc69e20, 0x349df: 0x6dc6a020, + 0x349e0: 0x6dc6a220, 0x349e1: 0x6dc6a420, 0x349e2: 0x6dc6a620, 0x349e3: 0x6de30420, + 0x349e4: 0x6de30620, 0x349e5: 0x6de30820, 0x349e6: 0x6de30a20, 0x349e7: 0x6de30c20, + 0x349e8: 0x6de30e20, 0x349e9: 0x6de31020, 0x349ea: 0x6de31220, 0x349eb: 0x6de31420, + 0x349ec: 0x6de31620, 0x349ed: 0x6de31820, 0x349ee: 0x6de31a20, 0x349ef: 0x6de31c20, + 0x349f0: 0x6de31e20, 0x349f1: 0x6de32020, 0x349f2: 0x6de32220, 0x349f3: 0x6de32420, + 0x349f4: 0x6de32620, 0x349f5: 0x6de32820, 0x349f6: 0x6de32a20, 0x349f7: 0x6de32c20, + 0x349f8: 0x6de32e20, 0x349f9: 0x6de33020, 0x349fa: 0x6de33220, 0x349fb: 0x6de33420, + 0x349fc: 0x6de33620, 0x349fd: 0x6de33820, 0x349fe: 0x6de33a20, 0x349ff: 0x6de33c20, + // Block 0xd28, offset 0x34a00 + 0x34a00: 0x6de33e20, 0x34a01: 0x6de34020, 0x34a02: 0x6de34220, 0x34a03: 0x6de34420, + 0x34a04: 0x6de34620, 0x34a05: 0x6de34820, 0x34a06: 0x6de34a20, 0x34a07: 0x6de34c20, + 0x34a08: 0x6de34e20, 0x34a09: 0x6de35020, 0x34a0a: 0x6de35220, 0x34a0b: 0x6de35420, + 0x34a0c: 0x6de35620, 0x34a0d: 0x6dfa7220, 0x34a0e: 0x6dfa7420, 0x34a0f: 0x6dfa7620, + 0x34a10: 0x6dfa7820, 0x34a11: 0x6dfa7a20, 0x34a12: 0x6dfa7c20, 0x34a13: 0x6dfa7e20, + 0x34a14: 0x6dfa8020, 0x34a15: 0x6dfa8220, 0x34a16: 0x6dfa8420, 0x34a17: 0x6dfa8620, + 0x34a18: 0x6dfa8820, 0x34a19: 0x6dfa8a20, 0x34a1a: 0x6dfa8c20, 0x34a1b: 0x6dfa8e20, + 0x34a1c: 0x6dfa9020, 0x34a1d: 0x6dfa9220, 0x34a1e: 0x6dfa9420, 0x34a1f: 0x6dfa9620, + 0x34a20: 0x6dfa9820, 0x34a21: 0x6dfa9a20, 0x34a22: 0x6e0dfe20, 0x34a23: 0x6dfa9c20, + 0x34a24: 0x6dfa9e20, 0x34a25: 0x6dfaa020, 0x34a26: 0x6dfaa220, 0x34a27: 0x6dfaa420, + 0x34a28: 0x6dfaa620, 0x34a29: 0x6dfaa820, 0x34a2a: 0x6dfaaa20, 0x34a2b: 0x6dfaac20, + 0x34a2c: 0x6e0e0020, 0x34a2d: 0x6e0e0220, 0x34a2e: 0x6e0e0420, 0x34a2f: 0x6e0e0620, + 0x34a30: 0x6e0e0820, 0x34a31: 0x6e0e0a20, 0x34a32: 0x6e0e0c20, 0x34a33: 0x6e0e0e20, + 0x34a34: 0x6e0e1020, 0x34a35: 0x6e0e1220, 0x34a36: 0x6e0e1420, 0x34a37: 0x6e0e1620, + 0x34a38: 0x6e0e1820, 0x34a39: 0x6e0e1a20, 0x34a3a: 0x6e0e1c20, 0x34a3b: 0x6e0e1e20, + 0x34a3c: 0x6e0e2020, 0x34a3d: 0x6e0e2220, 0x34a3e: 0x6e0e2420, 0x34a3f: 0x6e0e2620, + // Block 0xd29, offset 0x34a40 + 0x34a40: 0x6e0e2820, 0x34a41: 0x6e0e2a20, 0x34a42: 0x6e1d6620, 0x34a43: 0x6e1d6820, + 0x34a44: 0x6e1d6a20, 0x34a45: 0x6e1d6c20, 0x34a46: 0x6e1d6e20, 0x34a47: 0x6e1d7020, + 0x34a48: 0x6e1d7220, 0x34a49: 0x6e1d7420, 0x34a4a: 0x6e1d7620, 0x34a4b: 0x6e1d7820, + 0x34a4c: 0x6e1d7a20, 0x34a4d: 0x6e1d7c20, 0x34a4e: 0x6e1d7e20, 0x34a4f: 0x6e1d8020, + 0x34a50: 0x6e1d8220, 0x34a51: 0x6e1d8420, 0x34a52: 0x6e1d8620, 0x34a53: 0x6e1d8820, + 0x34a54: 0x6e1d8a20, 0x34a55: 0x6e1d8c20, 0x34a56: 0x6e290820, 0x34a57: 0x6e290a20, + 0x34a58: 0x6e290c20, 0x34a59: 0x6e290e20, 0x34a5a: 0x6e291020, 0x34a5b: 0x6e291220, + 0x34a5c: 0x6e291420, 0x34a5d: 0x6e291620, 0x34a5e: 0x6e322a20, 0x34a5f: 0x6e322c20, + 0x34a60: 0x6e322e20, 0x34a61: 0x6e323020, 0x34a62: 0x6e323220, 0x34a63: 0x6e323420, + 0x34a64: 0x6e323620, 0x34a65: 0x6e323820, 0x34a66: 0x6e323a20, 0x34a67: 0x6e323c20, + 0x34a68: 0x6e323e20, 0x34a69: 0x6e324020, 0x34a6a: 0x6e324220, 0x34a6b: 0x6e324420, + 0x34a6c: 0x6e389620, 0x34a6d: 0x6e389820, 0x34a6e: 0x6e389a20, 0x34a6f: 0x6e389c20, + 0x34a70: 0x6e404420, 0x34a71: 0x6e404620, 0x34a72: 0x6e404820, 0x34a73: 0x6e429e20, + 0x34a74: 0x6e462a20, 0x34a75: 0x6c123820, 0x34a76: 0x6c211a20, 0x34a77: 0x6c353020, + 0x34a78: 0x6c353220, 0x34a79: 0x6c353420, 0x34a7a: 0x6c353620, 0x34a7b: 0x6c353820, + 0x34a7c: 0x6c353a20, 0x34a7d: 0x6c353c20, 0x34a7e: 0x6c502c20, 0x34a7f: 0x6c502e20, + // Block 0xd2a, offset 0x34a80 + 0x34a80: 0x6c503020, 0x34a81: 0x6c722620, 0x34a82: 0x6c722820, 0x34a83: 0x6c722a20, + 0x34a84: 0x6c722c20, 0x34a85: 0x6c722e20, 0x34a86: 0x6c723020, 0x34a87: 0x6c723220, + 0x34a88: 0x6c6aa620, 0x34a89: 0x6c723420, 0x34a8a: 0x6c9a9620, 0x34a8b: 0x6c9a9820, + 0x34a8c: 0x6c9a9a20, 0x34a8d: 0x6c9a9c20, 0x34a8e: 0x6cc67420, 0x34a8f: 0x6cc67620, + 0x34a90: 0x6cc67820, 0x34a91: 0x6cc67a20, 0x34a92: 0x6cc67c20, 0x34a93: 0x6cc67e20, + 0x34a94: 0x6cc68020, 0x34a95: 0x6cf52020, 0x34a96: 0x6cf52220, 0x34a97: 0x6cf52420, + 0x34a98: 0x6cf52620, 0x34a99: 0x6cf52820, 0x34a9a: 0x6d24ea20, 0x34a9b: 0x6d24ec20, + 0x34a9c: 0x6d24ee20, 0x34a9d: 0x6d526a20, 0x34a9e: 0x6d526c20, 0x34a9f: 0x6d526e20, + 0x34aa0: 0x6d7da220, 0x34aa1: 0x6d7da420, 0x34aa2: 0x6d7da620, 0x34aa3: 0x6d7da820, + 0x34aa4: 0x6d7daa20, 0x34aa5: 0x6da50a20, 0x34aa6: 0x6da50c20, 0x34aa7: 0x6da50e20, + 0x34aa8: 0x6da51020, 0x34aa9: 0x6da51220, 0x34aaa: 0x6dfab020, 0x34aab: 0x6c212a20, + 0x34aac: 0x6c212c20, 0x34aad: 0x6c212e20, 0x34aae: 0x6c213020, 0x34aaf: 0x6c213220, + 0x34ab0: 0x6c213420, 0x34ab1: 0x6c213620, 0x34ab2: 0x6c213820, 0x34ab3: 0x6c354820, + 0x34ab4: 0x6c354a20, 0x34ab5: 0x6c354c20, 0x34ab6: 0x6c354e20, 0x34ab7: 0x6c355020, + 0x34ab8: 0x6c355220, 0x34ab9: 0x6c355420, 0x34aba: 0x6c355620, 0x34abb: 0x6c355820, + 0x34abc: 0x6c355a20, 0x34abd: 0x6c355c20, 0x34abe: 0x6c355e20, 0x34abf: 0x6c356020, + // Block 0xd2b, offset 0x34ac0 + 0x34ac0: 0x6c356220, 0x34ac1: 0x6c356420, 0x34ac2: 0x6c356620, 0x34ac3: 0x6c356820, + 0x34ac4: 0x6c356a20, 0x34ac5: 0x6c356c20, 0x34ac6: 0x6c356e20, 0x34ac7: 0x6c357020, + 0x34ac8: 0x6c357220, 0x34ac9: 0x6c504820, 0x34aca: 0x6c504a20, 0x34acb: 0x6c504c20, + 0x34acc: 0x6c504e20, 0x34acd: 0x6c505020, 0x34ace: 0x6c505220, 0x34acf: 0x6c505420, + 0x34ad0: 0x6c505620, 0x34ad1: 0x6c505820, 0x34ad2: 0x6c505a20, 0x34ad3: 0x6c505c20, + 0x34ad4: 0x6c505e20, 0x34ad5: 0x6c506020, 0x34ad6: 0x6c506220, 0x34ad7: 0x6c506420, + 0x34ad8: 0x6c506620, 0x34ad9: 0x6c506820, 0x34ada: 0x6c506a20, 0x34adb: 0x6c724a20, + 0x34adc: 0x6c724c20, 0x34add: 0x6c724e20, 0x34ade: 0x6c725020, 0x34adf: 0x6c725220, + 0x34ae0: 0x6c725420, 0x34ae1: 0x6c725620, 0x34ae2: 0x6c725820, 0x34ae3: 0x6c725a20, + 0x34ae4: 0x6c725c20, 0x34ae5: 0x6c725e20, 0x34ae6: 0x6c726020, 0x34ae7: 0x6c726220, + 0x34ae8: 0x6c726420, 0x34ae9: 0x6c726620, 0x34aea: 0x6c726820, 0x34aeb: 0x6c726a20, + 0x34aec: 0x6c726c20, 0x34aed: 0x6c726e20, 0x34aee: 0x6c727020, 0x34aef: 0x6c727220, + 0x34af0: 0x6c727420, 0x34af1: 0x6c727620, 0x34af2: 0x6c727820, 0x34af3: 0x6c727a20, + 0x34af4: 0x6c727c20, 0x34af5: 0x6c727e20, 0x34af6: 0x6c728020, 0x34af7: 0x6c728220, + 0x34af8: 0x6c728420, 0x34af9: 0x6c9aca20, 0x34afa: 0x6c9acc20, 0x34afb: 0x6c9ace20, + 0x34afc: 0x6c9ad020, 0x34afd: 0x6c9ad220, 0x34afe: 0x6c9ad420, 0x34aff: 0x6c9ad620, + // Block 0xd2c, offset 0x34b00 + 0x34b00: 0x6c9ad820, 0x34b01: 0x6c9ada20, 0x34b02: 0x6c9adc20, 0x34b03: 0x6c9ade20, + 0x34b04: 0x6c9ae020, 0x34b05: 0x6c9ae220, 0x34b06: 0x6c9ae420, 0x34b07: 0x6c9ae620, + 0x34b08: 0x6c9ae820, 0x34b09: 0x6c9aea20, 0x34b0a: 0x6c9aec20, 0x34b0b: 0x6c9aee20, + 0x34b0c: 0x6c9af020, 0x34b0d: 0x6c9af220, 0x34b0e: 0x6c9af420, 0x34b0f: 0x6c9af620, + 0x34b10: 0x6c9af820, 0x34b11: 0x6c9afa20, 0x34b12: 0x6c9afc20, 0x34b13: 0x6c9afe20, + 0x34b14: 0x6c9b0020, 0x34b15: 0x6c9b0220, 0x34b16: 0x6c9b0420, 0x34b17: 0x6c9b0620, + 0x34b18: 0x6c9b0820, 0x34b19: 0x6c9b0a20, 0x34b1a: 0x6cc6b620, 0x34b1b: 0x6cc6b820, + 0x34b1c: 0x6c9b0c20, 0x34b1d: 0x6cc6ba20, 0x34b1e: 0x6cc6bc20, 0x34b1f: 0x6cc6be20, + 0x34b20: 0x6cc6c020, 0x34b21: 0x6cc6c220, 0x34b22: 0x6cc6c420, 0x34b23: 0x6cc6c620, + 0x34b24: 0x6cc6c820, 0x34b25: 0x6cc6ca20, 0x34b26: 0x6cc6cc20, 0x34b27: 0x6cc6ce20, + 0x34b28: 0x6cc6d020, 0x34b29: 0x6cc6d220, 0x34b2a: 0x6cc6d420, 0x34b2b: 0x6cc6d620, + 0x34b2c: 0x6cc6d820, 0x34b2d: 0x6cc6da20, 0x34b2e: 0x6cc6dc20, 0x34b2f: 0x6cc6de20, + 0x34b30: 0x6cc6e020, 0x34b31: 0x6cc6e220, 0x34b32: 0x6cc6e420, 0x34b33: 0x6cc6e620, + 0x34b34: 0x6cc6e820, 0x34b35: 0x6cc6ea20, 0x34b36: 0x6cc6ec20, 0x34b37: 0x6c9b0e20, + 0x34b38: 0x6cc6ee20, 0x34b39: 0x6cc6f020, 0x34b3a: 0x6cc6f220, 0x34b3b: 0x6cc6f420, + 0x34b3c: 0x6cc6f620, 0x34b3d: 0x6cc6f820, 0x34b3e: 0x6cc6fa20, 0x34b3f: 0x6cf54020, + // Block 0xd2d, offset 0x34b40 + 0x34b40: 0x6cf54220, 0x34b41: 0x6cf54420, 0x34b42: 0x6cf54620, 0x34b43: 0x6cf54820, + 0x34b44: 0x6cf54a20, 0x34b45: 0x6cf54c20, 0x34b46: 0x6cf54e20, 0x34b47: 0x6cf55020, + 0x34b48: 0x6cf55220, 0x34b49: 0x6cf55420, 0x34b4a: 0x6cf55620, 0x34b4b: 0x6cf55820, + 0x34b4c: 0x6cf55a20, 0x34b4d: 0x6cf55c20, 0x34b4e: 0x6cf55e20, 0x34b4f: 0x6cf56020, + 0x34b50: 0x6cf56220, 0x34b51: 0x6cf56420, 0x34b52: 0x6cf56620, 0x34b53: 0x6cf56820, + 0x34b54: 0x6cf56a20, 0x34b55: 0x6cf56c20, 0x34b56: 0x6cf56e20, 0x34b57: 0x6cf57020, + 0x34b58: 0x6cf57220, 0x34b59: 0x6cf57420, 0x34b5a: 0x6cf57620, 0x34b5b: 0x6cf57820, + 0x34b5c: 0x6cf57a20, 0x34b5d: 0x6cf57c20, 0x34b5e: 0x6cf57e20, 0x34b5f: 0x6cf58020, + 0x34b60: 0x6cf58220, 0x34b61: 0x6cf58420, 0x34b62: 0x6cf58620, 0x34b63: 0x6cc6fc20, + 0x34b64: 0x6cf58820, 0x34b65: 0x6d017a20, 0x34b66: 0x6d24fe20, 0x34b67: 0x6d250020, + 0x34b68: 0x6d250220, 0x34b69: 0x6d250420, 0x34b6a: 0x6d250620, 0x34b6b: 0x6d250820, + 0x34b6c: 0x6d250a20, 0x34b6d: 0x6d250c20, 0x34b6e: 0x6d250e20, 0x34b6f: 0x6d251020, + 0x34b70: 0x6d251220, 0x34b71: 0x6d251420, 0x34b72: 0x6d251620, 0x34b73: 0x6d251820, + 0x34b74: 0x6d251a20, 0x34b75: 0x6d251c20, 0x34b76: 0x6d251e20, 0x34b77: 0x6d252020, + 0x34b78: 0x6d252220, 0x34b79: 0x6d252420, 0x34b7a: 0x6d252620, 0x34b7b: 0x6d252820, + 0x34b7c: 0x6d252a20, 0x34b7d: 0x6d252c20, 0x34b7e: 0x6d252e20, 0x34b7f: 0x6d253020, + // Block 0xd2e, offset 0x34b80 + 0x34b80: 0x6d253220, 0x34b81: 0x6d253420, 0x34b82: 0x6d253620, 0x34b83: 0x6d253820, + 0x34b84: 0x6d253a20, 0x34b85: 0x6d253c20, 0x34b86: 0x6d033220, 0x34b87: 0x6d528620, + 0x34b88: 0x6d528820, 0x34b89: 0x6d528a20, 0x34b8a: 0x6d528c20, 0x34b8b: 0x6d528e20, + 0x34b8c: 0x6d529020, 0x34b8d: 0x6d529220, 0x34b8e: 0x6d529420, 0x34b8f: 0x6d529620, + 0x34b90: 0x6d529820, 0x34b91: 0x6d529a20, 0x34b92: 0x6d529c20, 0x34b93: 0x6d529e20, + 0x34b94: 0x6d52a020, 0x34b95: 0x6d52a220, 0x34b96: 0x6d52a420, 0x34b97: 0x6d52a620, + 0x34b98: 0x6d52a820, 0x34b99: 0x6d52aa20, 0x34b9a: 0x6d52ac20, 0x34b9b: 0x6d52ae20, + 0x34b9c: 0x6d52b020, 0x34b9d: 0x6d52b220, 0x34b9e: 0x6d7dbe20, 0x34b9f: 0x6d7dc020, + 0x34ba0: 0x6d7dc220, 0x34ba1: 0x6d7dc420, 0x34ba2: 0x6d7dc620, 0x34ba3: 0x6d7dc820, + 0x34ba4: 0x6d7dca20, 0x34ba5: 0x6d7dcc20, 0x34ba6: 0x6d7dce20, 0x34ba7: 0x6d7dd020, + 0x34ba8: 0x6d7dd220, 0x34ba9: 0x6d7dd420, 0x34baa: 0x6d7dd620, 0x34bab: 0x6d7dd820, + 0x34bac: 0x6d7dda20, 0x34bad: 0x6d7ddc20, 0x34bae: 0x6d7dde20, 0x34baf: 0x6d7de020, + 0x34bb0: 0x6d7de220, 0x34bb1: 0x6d7de420, 0x34bb2: 0x6d7de620, 0x34bb3: 0x6d7de820, + 0x34bb4: 0x6d7dea20, 0x34bb5: 0x6d7dec20, 0x34bb6: 0x6d7dee20, 0x34bb7: 0x6d7df020, + 0x34bb8: 0x6d7df220, 0x34bb9: 0x6d7df420, 0x34bba: 0x6d7df620, 0x34bbb: 0x6d7df820, + 0x34bbc: 0x6d7dfa20, 0x34bbd: 0x6d7dfc20, 0x34bbe: 0x6da51a20, 0x34bbf: 0x6da51c20, + // Block 0xd2f, offset 0x34bc0 + 0x34bc0: 0x6da51e20, 0x34bc1: 0x6da52020, 0x34bc2: 0x6da52220, 0x34bc3: 0x6da52420, + 0x34bc4: 0x6dc6bc20, 0x34bc5: 0x6da52620, 0x34bc6: 0x6da52820, 0x34bc7: 0x6da52a20, + 0x34bc8: 0x6da52c20, 0x34bc9: 0x6da52e20, 0x34bca: 0x6da53020, 0x34bcb: 0x6da53220, + 0x34bcc: 0x6da53420, 0x34bcd: 0x6da53620, 0x34bce: 0x6da53820, 0x34bcf: 0x6da53a20, + 0x34bd0: 0x6dc6be20, 0x34bd1: 0x6dc6c020, 0x34bd2: 0x6dc6c220, 0x34bd3: 0x6dc6c420, + 0x34bd4: 0x6dc6c620, 0x34bd5: 0x6dc6c820, 0x34bd6: 0x6dc6ca20, 0x34bd7: 0x6dc6cc20, + 0x34bd8: 0x6dc6ce20, 0x34bd9: 0x6dc6d020, 0x34bda: 0x6dc6d220, 0x34bdb: 0x6de35c20, + 0x34bdc: 0x6de35e20, 0x34bdd: 0x6de36020, 0x34bde: 0x6de36220, 0x34bdf: 0x6de36420, + 0x34be0: 0x6de36620, 0x34be1: 0x6de36820, 0x34be2: 0x6de36a20, 0x34be3: 0x6dfab820, + 0x34be4: 0x6dfaba20, 0x34be5: 0x6dfabc20, 0x34be6: 0x6dfabe20, 0x34be7: 0x6dfac020, + 0x34be8: 0x6dfac220, 0x34be9: 0x6dfac420, 0x34bea: 0x6dfac620, 0x34beb: 0x6dfac820, + 0x34bec: 0x6dfaca20, 0x34bed: 0x6dfacc20, 0x34bee: 0x6e0e2e20, 0x34bef: 0x6e0e3020, + 0x34bf0: 0x6e0e3220, 0x34bf1: 0x6e0e3420, 0x34bf2: 0x6e0e3620, 0x34bf3: 0x6e1d9020, + 0x34bf4: 0x6e1d9220, 0x34bf5: 0x6e291a20, 0x34bf6: 0x6e291c20, 0x34bf7: 0x6e291e20, + 0x34bf8: 0x6e292020, 0x34bf9: 0x6e292220, 0x34bfa: 0x6e292420, 0x34bfb: 0x6e389e20, + 0x34bfc: 0x6e38a020, 0x34bfd: 0x6e404a20, 0x34bfe: 0x6e404c20, 0x34bff: 0x6e42a020, + // Block 0xd30, offset 0x34c00 + 0x34c00: 0x6e442e20, 0x34c01: 0x6c123e20, 0x34c02: 0x6c213e20, 0x34c03: 0x6c357820, + 0x34c04: 0x6c357a20, 0x34c05: 0x6c357c20, 0x34c06: 0x6c507020, 0x34c07: 0x6c507220, + 0x34c08: 0x6c507420, 0x34c09: 0x6c507620, 0x34c0a: 0x6c729220, 0x34c0b: 0x6c728620, + 0x34c0c: 0x6c729420, 0x34c0d: 0x6c729620, 0x34c0e: 0x6c9b1c20, 0x34c0f: 0x6c9b1e20, + 0x34c10: 0x6c9b2020, 0x34c11: 0x6c9b2220, 0x34c12: 0x6c9b2420, 0x34c13: 0x6c9b2620, + 0x34c14: 0x6cc70820, 0x34c15: 0x6cc70a20, 0x34c16: 0x6cc70c20, 0x34c17: 0x6cf59020, + 0x34c18: 0x6cf59220, 0x34c19: 0x6cf59420, 0x34c1a: 0x6d52b420, 0x34c1b: 0x6d52be20, + 0x34c1c: 0x6d52c020, 0x34c1d: 0x6d52c220, 0x34c1e: 0x6d52c420, 0x34c1f: 0x6d52c620, + 0x34c20: 0x6d52c820, 0x34c21: 0x6d52ca20, 0x34c22: 0x6d7e0620, 0x34c23: 0x6d7e0820, + 0x34c24: 0x6da54020, 0x34c25: 0x6dc6d820, 0x34c26: 0x6dc6da20, 0x34c27: 0x6de36e20, + 0x34c28: 0x6dfad020, 0x34c29: 0x6e0e3e20, 0x34c2a: 0x6e0e4020, 0x34c2b: 0x6e292820, + 0x34c2c: 0x6c048820, 0x34c2d: 0x6c214420, 0x34c2e: 0x6c358420, 0x34c2f: 0x6c358620, + 0x34c30: 0x6c358820, 0x34c31: 0x6c507c20, 0x34c32: 0x6c507e20, 0x34c33: 0x6c72a020, + 0x34c34: 0x6c72a220, 0x34c35: 0x6c72a420, 0x34c36: 0x6c72a620, 0x34c37: 0x6c9b2e20, + 0x34c38: 0x6c9b3020, 0x34c39: 0x6c9b3220, 0x34c3a: 0x6c9b3420, 0x34c3b: 0x6c9b3620, + 0x34c3c: 0x6cc71820, 0x34c3d: 0x6cc71a20, 0x34c3e: 0x6cc71c20, 0x34c3f: 0x6cc71e20, + // Block 0xd31, offset 0x34c40 + 0x34c40: 0x6cc72020, 0x34c41: 0x6cf59a20, 0x34c42: 0x6d254c20, 0x34c43: 0x6cf59c20, + 0x34c44: 0x6cf59e20, 0x34c45: 0x6cf5a020, 0x34c46: 0x6d254e20, 0x34c47: 0x6d255020, + 0x34c48: 0x6d255220, 0x34c49: 0x6d52ce20, 0x34c4a: 0x6d52d020, 0x34c4b: 0x6d52d220, + 0x34c4c: 0x6da54620, 0x34c4d: 0x6da54820, 0x34c4e: 0x6dc6de20, 0x34c4f: 0x6de37020, + 0x34c50: 0x6dfad220, 0x34c51: 0x6c048c20, 0x34c52: 0x6c124420, 0x34c53: 0x6c214620, + 0x34c54: 0x6c359220, 0x34c55: 0x6c359420, 0x34c56: 0x6c359620, 0x34c57: 0x6c359820, + 0x34c58: 0x6c359a20, 0x34c59: 0x6c508a20, 0x34c5a: 0x6c508c20, 0x34c5b: 0x6c72ae20, + 0x34c5c: 0x6c72b020, 0x34c5d: 0x6c72b220, 0x34c5e: 0x6c9b3c20, 0x34c5f: 0x6c9b3e20, + 0x34c60: 0x6c9b4020, 0x34c61: 0x6cc72a20, 0x34c62: 0x6cc72c20, 0x34c63: 0x6cc72e20, + 0x34c64: 0x6cc73020, 0x34c65: 0x6cc73220, 0x34c66: 0x6cc73420, 0x34c67: 0x6cc73620, + 0x34c68: 0x6cc73820, 0x34c69: 0x6cc73a20, 0x34c6a: 0x6cc73c20, 0x34c6b: 0x6ca6ac20, + 0x34c6c: 0x6cc73e20, 0x34c6d: 0x6cc74020, 0x34c6e: 0x6cf5a420, 0x34c6f: 0x6cf5a620, + 0x34c70: 0x6cf5a820, 0x34c71: 0x6cf5aa20, 0x34c72: 0x6cf5ac20, 0x34c73: 0x6cf5ae20, + 0x34c74: 0x6cf5b020, 0x34c75: 0x6cf5b220, 0x34c76: 0x6d255a20, 0x34c77: 0x6d255c20, + 0x34c78: 0x6d255e20, 0x34c79: 0x6d256020, 0x34c7a: 0x6d256220, 0x34c7b: 0x6d52da20, + 0x34c7c: 0x6d52dc20, 0x34c7d: 0x6d52de20, 0x34c7e: 0x6d52e020, 0x34c7f: 0x6d52e220, + // Block 0xd32, offset 0x34c80 + 0x34c80: 0x6d7e0e20, 0x34c81: 0x6d7e1020, 0x34c82: 0x6d7e1220, 0x34c83: 0x6d7e1420, + 0x34c84: 0x6d7e1620, 0x34c85: 0x6d7e1820, 0x34c86: 0x6d7e1a20, 0x34c87: 0x6da55020, + 0x34c88: 0x6da55220, 0x34c89: 0x6da55420, 0x34c8a: 0x6da55620, 0x34c8b: 0x6da55820, + 0x34c8c: 0x6dc6e220, 0x34c8d: 0x6dc6e420, 0x34c8e: 0x6dc6e620, 0x34c8f: 0x6dc6e820, + 0x34c90: 0x6dc6ea20, 0x34c91: 0x6de37220, 0x34c92: 0x6de37420, 0x34c93: 0x6de37620, + 0x34c94: 0x6dfad420, 0x34c95: 0x6dfad620, 0x34c96: 0x6e1d9420, 0x34c97: 0x6c124820, + 0x34c98: 0x6c214820, 0x34c99: 0x6c214a20, 0x34c9a: 0x6c35a620, 0x34c9b: 0x6c35a820, + 0x34c9c: 0x6c35aa20, 0x34c9d: 0x6c509820, 0x34c9e: 0x6c509a20, 0x34c9f: 0x6c509c20, + 0x34ca0: 0x6c509e20, 0x34ca1: 0x6c50a020, 0x34ca2: 0x6c50a220, 0x34ca3: 0x6c50a420, + 0x34ca4: 0x6c50a620, 0x34ca5: 0x6c50a820, 0x34ca6: 0x6c72ca20, 0x34ca7: 0x6c72cc20, + 0x34ca8: 0x6c72ce20, 0x34ca9: 0x6c72d020, 0x34caa: 0x6c72d220, 0x34cab: 0x6c72d420, + 0x34cac: 0x6c72d620, 0x34cad: 0x6c72d820, 0x34cae: 0x6c72da20, 0x34caf: 0x6c72dc20, + 0x34cb0: 0x6c72de20, 0x34cb1: 0x6c72e020, 0x34cb2: 0x6c72e220, 0x34cb3: 0x6c9b5820, + 0x34cb4: 0x6c9b5a20, 0x34cb5: 0x6c9b5c20, 0x34cb6: 0x6c9b5e20, 0x34cb7: 0x6c9b6020, + 0x34cb8: 0x6c9b6220, 0x34cb9: 0x6c9b6420, 0x34cba: 0x6c9b6620, 0x34cbb: 0x6c9b6820, + 0x34cbc: 0x6cc74a20, 0x34cbd: 0x6cc74c20, 0x34cbe: 0x6cc74e20, 0x34cbf: 0x6cc75020, + // Block 0xd33, offset 0x34cc0 + 0x34cc0: 0x6cc75220, 0x34cc1: 0x6cc75420, 0x34cc2: 0x6cc75620, 0x34cc3: 0x6cc75820, + 0x34cc4: 0x6cc75a20, 0x34cc5: 0x6cc75c20, 0x34cc6: 0x6cc75e20, 0x34cc7: 0x6cc76020, + 0x34cc8: 0x6cf5be20, 0x34cc9: 0x6cf5c020, 0x34cca: 0x6cf5c220, 0x34ccb: 0x6cf5c420, + 0x34ccc: 0x6cf5c620, 0x34ccd: 0x6cf5c820, 0x34cce: 0x6d256820, 0x34ccf: 0x6d256a20, + 0x34cd0: 0x6d256c20, 0x34cd1: 0x6d256e20, 0x34cd2: 0x6d257020, 0x34cd3: 0x6d257220, + 0x34cd4: 0x6d52e820, 0x34cd5: 0x6d52ea20, 0x34cd6: 0x6d52ec20, 0x34cd7: 0x6d7e2020, + 0x34cd8: 0x6d7e2220, 0x34cd9: 0x6d7e2420, 0x34cda: 0x6d7e2620, 0x34cdb: 0x6d7e2820, + 0x34cdc: 0x6d7e2a20, 0x34cdd: 0x6da55c20, 0x34cde: 0x6dc6ee20, 0x34cdf: 0x6dc6f020, + 0x34ce0: 0x6dc6f220, 0x34ce1: 0x6dc6f420, 0x34ce2: 0x6dc6f620, 0x34ce3: 0x6dc6f820, + 0x34ce4: 0x6de37e20, 0x34ce5: 0x6dfada20, 0x34ce6: 0x6e0e4420, 0x34ce7: 0x6e1d9620, + 0x34ce8: 0x6e1d9820, 0x34ce9: 0x6e292c20, 0x34cea: 0x6e324820, 0x34ceb: 0x6e38a420, + 0x34cec: 0x6e3d2e20, 0x34ced: 0x6c124a20, 0x34cee: 0x6c214c20, 0x34cef: 0x6c214e20, + 0x34cf0: 0x6c50ae20, 0x34cf1: 0x6c72ea20, 0x34cf2: 0x6c72ec20, 0x34cf3: 0x6c72ee20, + 0x34cf4: 0x6cc76a20, 0x34cf5: 0x6cc76c20, 0x34cf6: 0x6cf5d020, 0x34cf7: 0x6cf5d220, + 0x34cf8: 0x6cf5d420, 0x34cf9: 0x6d52f220, 0x34cfa: 0x6d7e3020, 0x34cfb: 0x6c095820, + 0x34cfc: 0x6c095a20, 0x34cfd: 0x6c095c20, 0x34cfe: 0x6c126020, 0x34cff: 0x6c126220, + // Block 0xd34, offset 0x34d00 + 0x34d00: 0x6c126420, 0x34d01: 0x6c126620, 0x34d02: 0x6c126820, 0x34d03: 0x6c126a20, + 0x34d04: 0x6c216e20, 0x34d05: 0x6c126c20, 0x34d06: 0x6c217020, 0x34d07: 0x6c217220, + 0x34d08: 0x6c217420, 0x34d09: 0x6c217620, 0x34d0a: 0x6c217820, 0x34d0b: 0x6c217a20, + 0x34d0c: 0x6c217c20, 0x34d0d: 0x6c217e20, 0x34d0e: 0x6c218020, 0x34d0f: 0x6c218220, + 0x34d10: 0x6c218420, 0x34d11: 0x6c218620, 0x34d12: 0x6c218820, 0x34d13: 0x6c218a20, + 0x34d14: 0x6c218c20, 0x34d15: 0x6c218e20, 0x34d16: 0x6c219020, 0x34d17: 0x6c219220, + 0x34d18: 0x6c219420, 0x34d19: 0x6c219620, 0x34d1a: 0x6c35f820, 0x34d1b: 0x6c35fa20, + 0x34d1c: 0x6c35fc20, 0x34d1d: 0x6c35fe20, 0x34d1e: 0x6c360020, 0x34d1f: 0x6c360220, + 0x34d20: 0x6c360420, 0x34d21: 0x6c360620, 0x34d22: 0x6c360820, 0x34d23: 0x6c360a20, + 0x34d24: 0x6c360c20, 0x34d25: 0x6c360e20, 0x34d26: 0x6c361020, 0x34d27: 0x6c361220, + 0x34d28: 0x6c361420, 0x34d29: 0x6c361620, 0x34d2a: 0x6c361820, 0x34d2b: 0x6c361a20, + 0x34d2c: 0x6c361c20, 0x34d2d: 0x6c361e20, 0x34d2e: 0x6c362020, 0x34d2f: 0x6c362220, + 0x34d30: 0x6c362420, 0x34d31: 0x6c362620, 0x34d32: 0x6c362820, 0x34d33: 0x6c362a20, + 0x34d34: 0x6c362c20, 0x34d35: 0x6c362e20, 0x34d36: 0x6c363020, 0x34d37: 0x6c511020, + 0x34d38: 0x6c511220, 0x34d39: 0x6c511420, 0x34d3a: 0x6c511620, 0x34d3b: 0x6c511820, + 0x34d3c: 0x6c511a20, 0x34d3d: 0x6c511c20, 0x34d3e: 0x6c511e20, 0x34d3f: 0x6c512020, + // Block 0xd35, offset 0x34d40 + 0x34d40: 0x6c512220, 0x34d41: 0x6c512420, 0x34d42: 0x6c512620, 0x34d43: 0x6c512820, + 0x34d44: 0x6c512a20, 0x34d45: 0x6c512c20, 0x34d46: 0x6c512e20, 0x34d47: 0x6c513020, + 0x34d48: 0x6c513220, 0x34d49: 0x6c515e20, 0x34d4a: 0x6c513420, 0x34d4b: 0x6c513620, + 0x34d4c: 0x6c513820, 0x34d4d: 0x6c513a20, 0x34d4e: 0x6c513c20, 0x34d4f: 0x6c513e20, + 0x34d50: 0x6c514020, 0x34d51: 0x6c514220, 0x34d52: 0x6c733220, 0x34d53: 0x6c733420, + 0x34d54: 0x6c733620, 0x34d55: 0x6c733820, 0x34d56: 0x6c733a20, 0x34d57: 0x6c733c20, + 0x34d58: 0x6c733e20, 0x34d59: 0x6c734020, 0x34d5a: 0x6c734220, 0x34d5b: 0x6c734420, + 0x34d5c: 0x6c734620, 0x34d5d: 0x6c734820, 0x34d5e: 0x6c734a20, 0x34d5f: 0x6c734c20, + 0x34d60: 0x6c734e20, 0x34d61: 0x6c735020, 0x34d62: 0x6c735220, 0x34d63: 0x6c735420, + 0x34d64: 0x6c735620, 0x34d65: 0x6c735820, 0x34d66: 0x6c735a20, 0x34d67: 0x6c735c20, + 0x34d68: 0x6c735e20, 0x34d69: 0x6c736020, 0x34d6a: 0x6c736220, 0x34d6b: 0x6c736420, + 0x34d6c: 0x6c736620, 0x34d6d: 0x6c736820, 0x34d6e: 0x6c736a20, 0x34d6f: 0x6c736c20, + 0x34d70: 0x6c736e20, 0x34d71: 0x6c737020, 0x34d72: 0x6c9ba220, 0x34d73: 0x6c9ba420, + 0x34d74: 0x6c9ba620, 0x34d75: 0x6c9ba820, 0x34d76: 0x6c9baa20, 0x34d77: 0x6c9bac20, + 0x34d78: 0x6c9bae20, 0x34d79: 0x6c9bb020, 0x34d7a: 0x6c9bb220, 0x34d7b: 0x6c9bb420, + 0x34d7c: 0x6c9bb620, 0x34d7d: 0x6c9bb820, 0x34d7e: 0x6c9bba20, 0x34d7f: 0x6c9bbc20, + // Block 0xd36, offset 0x34d80 + 0x34d80: 0x6c9bbe20, 0x34d81: 0x6c9bc020, 0x34d82: 0x6c9bc220, 0x34d83: 0x6c9bc420, + 0x34d84: 0x6c9bc620, 0x34d85: 0x6c9bc820, 0x34d86: 0x6c9bca20, 0x34d87: 0x6c9bcc20, + 0x34d88: 0x6c9bce20, 0x34d89: 0x6c9bd020, 0x34d8a: 0x6c9bd220, 0x34d8b: 0x6c9bd420, + 0x34d8c: 0x6c9bd620, 0x34d8d: 0x6c9bd820, 0x34d8e: 0x6c9bda20, 0x34d8f: 0x6c9bdc20, + 0x34d90: 0x6c9bde20, 0x34d91: 0x6c9be020, 0x34d92: 0x6c9be220, 0x34d93: 0x6c9be420, + 0x34d94: 0x6c9be620, 0x34d95: 0x6c9be820, 0x34d96: 0x6c9bea20, 0x34d97: 0x6c9bec20, + 0x34d98: 0x6c9bee20, 0x34d99: 0x6c9bf020, 0x34d9a: 0x6c9bf220, 0x34d9b: 0x6c9bf420, + 0x34d9c: 0x6c9bf620, 0x34d9d: 0x6c9bf820, 0x34d9e: 0x6c9bfa20, 0x34d9f: 0x6c9bfc20, + 0x34da0: 0x6c9bfe20, 0x34da1: 0x6c9c0020, 0x34da2: 0x6cc7ba20, 0x34da3: 0x6cc7bc20, + 0x34da4: 0x6cc7be20, 0x34da5: 0x6cc7c020, 0x34da6: 0x6cc7c220, 0x34da7: 0x6cc7c420, + 0x34da8: 0x6cc7c620, 0x34da9: 0x6cc7c820, 0x34daa: 0x6cc7ca20, 0x34dab: 0x6cc7cc20, + 0x34dac: 0x6cc7ce20, 0x34dad: 0x6cc7d020, 0x34dae: 0x6cc7d220, 0x34daf: 0x6cc7d420, + 0x34db0: 0x6cc7d620, 0x34db1: 0x6cc7d820, 0x34db2: 0x6cc7da20, 0x34db3: 0x6cc7dc20, + 0x34db4: 0x6cc7de20, 0x34db5: 0x6cc7e020, 0x34db6: 0x6cc7e220, 0x34db7: 0x6cc7e420, + 0x34db8: 0x6cc7e620, 0x34db9: 0x6cc7e820, 0x34dba: 0x6cc7ea20, 0x34dbb: 0x6cc7ec20, + 0x34dbc: 0x6cc7ee20, 0x34dbd: 0x6cc7f020, 0x34dbe: 0x6cc7f220, 0x34dbf: 0x6cc7f420, + // Block 0xd37, offset 0x34dc0 + 0x34dc0: 0x6cc7f620, 0x34dc1: 0x6cc7f820, 0x34dc2: 0x6cc7fa20, 0x34dc3: 0x6cc7fc20, + 0x34dc4: 0x6cc7fe20, 0x34dc5: 0x6cc80020, 0x34dc6: 0x6cc80220, 0x34dc7: 0x6cc80420, + 0x34dc8: 0x6cc80620, 0x34dc9: 0x6cc80820, 0x34dca: 0x6cc80a20, 0x34dcb: 0x6cc80c20, + 0x34dcc: 0x6cc80e20, 0x34dcd: 0x6cc81020, 0x34dce: 0x6cc81220, 0x34dcf: 0x6cc81420, + 0x34dd0: 0x6cc81620, 0x34dd1: 0x6cc81820, 0x34dd2: 0x6cc81a20, 0x34dd3: 0x6cc81c20, + 0x34dd4: 0x6cc81e20, 0x34dd5: 0x6cc82020, 0x34dd6: 0x6cc82220, 0x34dd7: 0x6cc82420, + 0x34dd8: 0x6cc82620, 0x34dd9: 0x6cc82820, 0x34dda: 0x6cc82a20, 0x34ddb: 0x6cc82c20, + 0x34ddc: 0x6cc82e20, 0x34ddd: 0x6cc83020, 0x34dde: 0x6cc83220, 0x34ddf: 0x6cc83420, + 0x34de0: 0x6cc83620, 0x34de1: 0x6cc83820, 0x34de2: 0x6cc83a20, 0x34de3: 0x6cc83c20, + 0x34de4: 0x6cf61a20, 0x34de5: 0x6cf61c20, 0x34de6: 0x6cf61e20, 0x34de7: 0x6cf62020, + 0x34de8: 0x6cf62220, 0x34de9: 0x6cf62420, 0x34dea: 0x6cf62620, 0x34deb: 0x6cf62820, + 0x34dec: 0x6cf62a20, 0x34ded: 0x6cf62c20, 0x34dee: 0x6cf62e20, 0x34def: 0x6cf63020, + 0x34df0: 0x6cf63220, 0x34df1: 0x6cf63420, 0x34df2: 0x6cf63620, 0x34df3: 0x6cf63820, + 0x34df4: 0x6cf63a20, 0x34df5: 0x6cf63c20, 0x34df6: 0x6cf63e20, 0x34df7: 0x6cf64020, + 0x34df8: 0x6cf64220, 0x34df9: 0x6cf64420, 0x34dfa: 0x6cf64620, 0x34dfb: 0x6cf64820, + 0x34dfc: 0x6cf64a20, 0x34dfd: 0x6cf64c20, 0x34dfe: 0x6cf64e20, 0x34dff: 0x6cf65020, + // Block 0xd38, offset 0x34e00 + 0x34e00: 0x6cf65220, 0x34e01: 0x6cf65420, 0x34e02: 0x6cf65620, 0x34e03: 0x6cf65820, + 0x34e04: 0x6cf65a20, 0x34e05: 0x6cf65c20, 0x34e06: 0x6cf65e20, 0x34e07: 0x6cf66020, + 0x34e08: 0x6cf66220, 0x34e09: 0x6cf66420, 0x34e0a: 0x6cf66620, 0x34e0b: 0x6cf66820, + 0x34e0c: 0x6cf66a20, 0x34e0d: 0x6cf66c20, 0x34e0e: 0x6cf66e20, 0x34e0f: 0x6cf67020, + 0x34e10: 0x6cf67220, 0x34e11: 0x6cf67420, 0x34e12: 0x6d259c20, 0x34e13: 0x6d259e20, + 0x34e14: 0x6d25a020, 0x34e15: 0x6d25a220, 0x34e16: 0x6d25a420, 0x34e17: 0x6d25a620, + 0x34e18: 0x6d25a820, 0x34e19: 0x6d25aa20, 0x34e1a: 0x6d25ac20, 0x34e1b: 0x6d25ae20, + 0x34e1c: 0x6d25b020, 0x34e1d: 0x6d25b220, 0x34e1e: 0x6d25b420, 0x34e1f: 0x6d25b620, + 0x34e20: 0x6d25b820, 0x34e21: 0x6cf1ac20, 0x34e22: 0x6d25ba20, 0x34e23: 0x6d25bc20, + 0x34e24: 0x6d25be20, 0x34e25: 0x6d25c020, 0x34e26: 0x6d25c220, 0x34e27: 0x6d25c420, + 0x34e28: 0x6d25c620, 0x34e29: 0x6d25c820, 0x34e2a: 0x6d25ca20, 0x34e2b: 0x6d25cc20, + 0x34e2c: 0x6d25ce20, 0x34e2d: 0x6d25d020, 0x34e2e: 0x6d25d220, 0x34e2f: 0x6d25d420, + 0x34e30: 0x6d25d620, 0x34e31: 0x6d25d820, 0x34e32: 0x6d25da20, 0x34e33: 0x6d25dc20, + 0x34e34: 0x6d25de20, 0x34e35: 0x6d25e020, 0x34e36: 0x6d25e220, 0x34e37: 0x6d25e420, + 0x34e38: 0x6d25e620, 0x34e39: 0x6d25e820, 0x34e3a: 0x6d25ea20, 0x34e3b: 0x6d531e20, + 0x34e3c: 0x6d532020, 0x34e3d: 0x6d532220, 0x34e3e: 0x6d532420, 0x34e3f: 0x6d532620, + // Block 0xd39, offset 0x34e40 + 0x34e40: 0x6d532820, 0x34e41: 0x6d532a20, 0x34e42: 0x6d532c20, 0x34e43: 0x6d532e20, + 0x34e44: 0x6d533020, 0x34e45: 0x6d533220, 0x34e46: 0x6d533420, 0x34e47: 0x6d533620, + 0x34e48: 0x6d533820, 0x34e49: 0x6d7e7020, 0x34e4a: 0x6d533a20, 0x34e4b: 0x6d533c20, + 0x34e4c: 0x6d533e20, 0x34e4d: 0x6d534020, 0x34e4e: 0x6d534220, 0x34e4f: 0x6d534420, + 0x34e50: 0x6d534620, 0x34e51: 0x6d534820, 0x34e52: 0x6d4d3220, 0x34e53: 0x6d534a20, + 0x34e54: 0x6d534c20, 0x34e55: 0x6d534e20, 0x34e56: 0x6d535020, 0x34e57: 0x6d535220, + 0x34e58: 0x6d535420, 0x34e59: 0x6d535620, 0x34e5a: 0x6d535820, 0x34e5b: 0x6d535a20, + 0x34e5c: 0x6d535c20, 0x34e5d: 0x6d535e20, 0x34e5e: 0x6d7e7220, 0x34e5f: 0x6d7e7420, + 0x34e60: 0x6d7e7620, 0x34e61: 0x6d7e7820, 0x34e62: 0x6d7e7a20, 0x34e63: 0x6d7e7c20, + 0x34e64: 0x6d7e7e20, 0x34e65: 0x6d7e8020, 0x34e66: 0x6d7e8220, 0x34e67: 0x6d7e8420, + 0x34e68: 0x6d7e8620, 0x34e69: 0x6d7e8820, 0x34e6a: 0x6d7e8a20, 0x34e6b: 0x6d7e8c20, + 0x34e6c: 0x6d7e8e20, 0x34e6d: 0x6d7e9020, 0x34e6e: 0x6d7e9220, 0x34e6f: 0x6d7e9420, + 0x34e70: 0x6d7e9620, 0x34e71: 0x6d7e9820, 0x34e72: 0x6d7e9a20, 0x34e73: 0x6d7e9c20, + 0x34e74: 0x6d7e9e20, 0x34e75: 0x6d7ea020, 0x34e76: 0x6d7ea220, 0x34e77: 0x6d7ea420, + 0x34e78: 0x6d7ea620, 0x34e79: 0x6d7ea820, 0x34e7a: 0x6d7eaa20, 0x34e7b: 0x6d7eac20, + 0x34e7c: 0x6d7eae20, 0x34e7d: 0x6d7eb020, 0x34e7e: 0x6d7eb220, 0x34e7f: 0x6d7eb420, + // Block 0xd3a, offset 0x34e80 + 0x34e80: 0x6d7eb620, 0x34e81: 0x6d7eb820, 0x34e82: 0x6d7eba20, 0x34e83: 0x6d7ebc20, + 0x34e84: 0x6d7ebe20, 0x34e85: 0x6d7ec020, 0x34e86: 0x6d7ec220, 0x34e87: 0x6d536020, + 0x34e88: 0x6d7ec420, 0x34e89: 0x6da57a20, 0x34e8a: 0x6da57c20, 0x34e8b: 0x6da57e20, + 0x34e8c: 0x6da58020, 0x34e8d: 0x6da58220, 0x34e8e: 0x6da58420, 0x34e8f: 0x6da58620, + 0x34e90: 0x6da58820, 0x34e91: 0x6da58a20, 0x34e92: 0x6da58c20, 0x34e93: 0x6da58e20, + 0x34e94: 0x6da59020, 0x34e95: 0x6da59220, 0x34e96: 0x6da59420, 0x34e97: 0x6da59620, + 0x34e98: 0x6da59820, 0x34e99: 0x6da59a20, 0x34e9a: 0x6da59c20, 0x34e9b: 0x6da59e20, + 0x34e9c: 0x6da5a020, 0x34e9d: 0x6da5a220, 0x34e9e: 0x6dc70e20, 0x34e9f: 0x6dc71020, + 0x34ea0: 0x6dc71220, 0x34ea1: 0x6dc71420, 0x34ea2: 0x6dc71620, 0x34ea3: 0x6dc71820, + 0x34ea4: 0x6dc71a20, 0x34ea5: 0x6dc71c20, 0x34ea6: 0x6dc71e20, 0x34ea7: 0x6dc72020, + 0x34ea8: 0x6dc72220, 0x34ea9: 0x6dc72420, 0x34eaa: 0x6dc72620, 0x34eab: 0x6dc72820, + 0x34eac: 0x6dc72a20, 0x34ead: 0x6dc72c20, 0x34eae: 0x6dc72e20, 0x34eaf: 0x6dc73020, + 0x34eb0: 0x6dc73220, 0x34eb1: 0x6dc73420, 0x34eb2: 0x6de39420, 0x34eb3: 0x6de39620, + 0x34eb4: 0x6de39820, 0x34eb5: 0x6de39a20, 0x34eb6: 0x6de39c20, 0x34eb7: 0x6de39e20, + 0x34eb8: 0x6de3a020, 0x34eb9: 0x6de3a220, 0x34eba: 0x6de3a420, 0x34ebb: 0x6de3a620, + 0x34ebc: 0x6de3a820, 0x34ebd: 0x6de3aa20, 0x34ebe: 0x6de3ac20, 0x34ebf: 0x6dfaec20, + // Block 0xd3b, offset 0x34ec0 + 0x34ec0: 0x6dfaee20, 0x34ec1: 0x6dfaf020, 0x34ec2: 0x6dfaf220, 0x34ec3: 0x6dfaf420, + 0x34ec4: 0x6dfaf620, 0x34ec5: 0x6dfaf820, 0x34ec6: 0x6dfafa20, 0x34ec7: 0x6dfafc20, + 0x34ec8: 0x6e0e4820, 0x34ec9: 0x6e0e4a20, 0x34eca: 0x6e0e4c20, 0x34ecb: 0x6e0e4e20, + 0x34ecc: 0x6e0e5020, 0x34ecd: 0x6e1d9e20, 0x34ece: 0x6e1da020, 0x34ecf: 0x6e1da220, + 0x34ed0: 0x6e1da420, 0x34ed1: 0x6e1da620, 0x34ed2: 0x6e1da820, 0x34ed3: 0x6e1daa20, + 0x34ed4: 0x6e1dac20, 0x34ed5: 0x6e1dae20, 0x34ed6: 0x6e293620, 0x34ed7: 0x6e324e20, + 0x34ed8: 0x6e325020, 0x34ed9: 0x6e325220, 0x34eda: 0x6e348820, 0x34edb: 0x6e325420, + 0x34edc: 0x6e38aa20, 0x34edd: 0x6e38ac20, 0x34ede: 0x6e40ba20, 0x34edf: 0x6e42a220, + 0x34ee0: 0x6e46e620, 0x34ee1: 0x6c21a020, 0x34ee2: 0x6c21a220, 0x34ee3: 0x6c364220, + 0x34ee4: 0x6c364420, 0x34ee5: 0x6c364620, 0x34ee6: 0x6c364820, 0x34ee7: 0x6c516020, + 0x34ee8: 0x6c516220, 0x34ee9: 0x6c516420, 0x34eea: 0x6c516620, 0x34eeb: 0x6c516820, + 0x34eec: 0x6c516a20, 0x34eed: 0x6c739420, 0x34eee: 0x6c739620, 0x34eef: 0x6c739820, + 0x34ef0: 0x6c739a20, 0x34ef1: 0x6c739c20, 0x34ef2: 0x6c739e20, 0x34ef3: 0x6c73a020, + 0x34ef4: 0x6c73a220, 0x34ef5: 0x6c73a420, 0x34ef6: 0x6c73a620, 0x34ef7: 0x6c9c0e20, + 0x34ef8: 0x6c9c1020, 0x34ef9: 0x6c9c1220, 0x34efa: 0x6c9c1420, 0x34efb: 0x6cc85220, + 0x34efc: 0x6cc85420, 0x34efd: 0x6cc85620, 0x34efe: 0x6cf68a20, 0x34eff: 0x6cf68c20, + // Block 0xd3c, offset 0x34f00 + 0x34f00: 0x6cf68e20, 0x34f01: 0x6cf69020, 0x34f02: 0x6cf69220, 0x34f03: 0x6d25fc20, + 0x34f04: 0x6d25fe20, 0x34f05: 0x6d260020, 0x34f06: 0x6d537420, 0x34f07: 0x6d537620, + 0x34f08: 0x6d537820, 0x34f09: 0x6d537a20, 0x34f0a: 0x6d537c20, 0x34f0b: 0x6d7ed820, + 0x34f0c: 0x6d7eda20, 0x34f0d: 0x6d7edc20, 0x34f0e: 0x6d7ede20, 0x34f0f: 0x6da5ac20, + 0x34f10: 0x6da5ae20, 0x34f11: 0x6dc73e20, 0x34f12: 0x6dc74020, 0x34f13: 0x6dc74220, + 0x34f14: 0x6dc74420, 0x34f15: 0x6dc74620, 0x34f16: 0x6de3ae20, 0x34f17: 0x6de3b020, + 0x34f18: 0x6dfafe20, 0x34f19: 0x6dfb0020, 0x34f1a: 0x6e325820, 0x34f1b: 0x6e42a420, + 0x34f1c: 0x6e46c620, 0x34f1d: 0x6c096020, 0x34f1e: 0x6c127620, 0x34f1f: 0x6c21a420, + 0x34f20: 0x6c21a620, 0x34f21: 0x6c21a820, 0x34f22: 0x6c21aa20, 0x34f23: 0x6c21ac20, + 0x34f24: 0x6c365420, 0x34f25: 0x6c517420, 0x34f26: 0x6c517620, 0x34f27: 0x6c517820, + 0x34f28: 0x6c5dc820, 0x34f29: 0x6c517a20, 0x34f2a: 0x6c517c20, 0x34f2b: 0x6c517e20, + 0x34f2c: 0x6c518020, 0x34f2d: 0x6c73b620, 0x34f2e: 0x6c73b820, 0x34f2f: 0x6c825c20, + 0x34f30: 0x6c825e20, 0x34f31: 0x6c9c2420, 0x34f32: 0x6c9c2620, 0x34f33: 0x6c9c2820, + 0x34f34: 0x6c9c2a20, 0x34f35: 0x6c9c2c20, 0x34f36: 0x6c9c2e20, 0x34f37: 0x6cc86220, + 0x34f38: 0x6cc86420, 0x34f39: 0x6cc86620, 0x34f3a: 0x6cc86820, 0x34f3b: 0x6cc86a20, + 0x34f3c: 0x6cc86c20, 0x34f3d: 0x6cc86e20, 0x34f3e: 0x6cc87020, 0x34f3f: 0x6cc87220, + // Block 0xd3d, offset 0x34f40 + 0x34f40: 0x6cc87420, 0x34f41: 0x6cc87620, 0x34f42: 0x6cc87820, 0x34f43: 0x6cc87a20, + 0x34f44: 0x6cf69820, 0x34f45: 0x6cf69a20, 0x34f46: 0x6cf69c20, 0x34f47: 0x6cf69e20, + 0x34f48: 0x6cf6a020, 0x34f49: 0x6cf6a220, 0x34f4a: 0x6cf6a420, 0x34f4b: 0x6cf6a620, + 0x34f4c: 0x6cf6a820, 0x34f4d: 0x6d260820, 0x34f4e: 0x6d260a20, 0x34f4f: 0x6d260c20, + 0x34f50: 0x6d260e20, 0x34f51: 0x6d261020, 0x34f52: 0x6d538820, 0x34f53: 0x6d538a20, + 0x34f54: 0x6d538c20, 0x34f55: 0x6d538e20, 0x34f56: 0x6d539020, 0x34f57: 0x6d539220, + 0x34f58: 0x6d539420, 0x34f59: 0x6d539620, 0x34f5a: 0x6d7eec20, 0x34f5b: 0x6d7eee20, + 0x34f5c: 0x6da5b220, 0x34f5d: 0x6d7ef020, 0x34f5e: 0x6d7ef220, 0x34f5f: 0x6d7ef420, + 0x34f60: 0x6d7ef620, 0x34f61: 0x6d7ef820, 0x34f62: 0x6d7efa20, 0x34f63: 0x6da5b420, + 0x34f64: 0x6da5b620, 0x34f65: 0x6da5b820, 0x34f66: 0x6da5ba20, 0x34f67: 0x6da5bc20, + 0x34f68: 0x6da5be20, 0x34f69: 0x6dc74a20, 0x34f6a: 0x6dc74c20, 0x34f6b: 0x6dc74e20, + 0x34f6c: 0x6dc75020, 0x34f6d: 0x6dc75220, 0x34f6e: 0x6dfb0420, 0x34f6f: 0x6dfb0620, + 0x34f70: 0x6e1db020, 0x34f71: 0x6e293820, 0x34f72: 0x6e325a20, 0x34f73: 0x6c04a220, + 0x34f74: 0x6c04a420, 0x34f75: 0x6c097020, 0x34f76: 0x6c097220, 0x34f77: 0x6c097420, + 0x34f78: 0x6c12a220, 0x34f79: 0x6c12a420, 0x34f7a: 0x6c12a620, 0x34f7b: 0x6c12a820, + 0x34f7c: 0x6c12aa20, 0x34f7d: 0x6c12ac20, 0x34f7e: 0x6c12ae20, 0x34f7f: 0x6c12b020, + // Block 0xd3e, offset 0x34f80 + 0x34f80: 0x6c12b220, 0x34f81: 0x6c220820, 0x34f82: 0x6c220a20, 0x34f83: 0x6c220c20, + 0x34f84: 0x6c220e20, 0x34f85: 0x6c221020, 0x34f86: 0x6c221220, 0x34f87: 0x6c221420, + 0x34f88: 0x6c221620, 0x34f89: 0x6c221820, 0x34f8a: 0x6c221a20, 0x34f8b: 0x6c221c20, + 0x34f8c: 0x6c221e20, 0x34f8d: 0x6c222020, 0x34f8e: 0x6c222220, 0x34f8f: 0x6c222420, + 0x34f90: 0x6c222620, 0x34f91: 0x6c222820, 0x34f92: 0x6c222a20, 0x34f93: 0x6c222c20, + 0x34f94: 0x6c36f220, 0x34f95: 0x6c36f420, 0x34f96: 0x6c36f620, 0x34f97: 0x6c36f820, + 0x34f98: 0x6c36fa20, 0x34f99: 0x6c36fc20, 0x34f9a: 0x6c36fe20, 0x34f9b: 0x6c370020, + 0x34f9c: 0x6c370220, 0x34f9d: 0x6c370420, 0x34f9e: 0x6c370620, 0x34f9f: 0x6c370820, + 0x34fa0: 0x6c370a20, 0x34fa1: 0x6c370c20, 0x34fa2: 0x6c370e20, 0x34fa3: 0x6c371020, + 0x34fa4: 0x6c371220, 0x34fa5: 0x6c371420, 0x34fa6: 0x6c371620, 0x34fa7: 0x6c371820, + 0x34fa8: 0x6c371a20, 0x34fa9: 0x6c371c20, 0x34faa: 0x6c371e20, 0x34fab: 0x6c372020, + 0x34fac: 0x6c372220, 0x34fad: 0x6c372420, 0x34fae: 0x6c372620, 0x34faf: 0x6c372820, + 0x34fb0: 0x6c372a20, 0x34fb1: 0x6c372c20, 0x34fb2: 0x6c372e20, 0x34fb3: 0x6c373020, + 0x34fb4: 0x6c373220, 0x34fb5: 0x6c373420, 0x34fb6: 0x6c373620, 0x34fb7: 0x6c373820, + 0x34fb8: 0x6c373a20, 0x34fb9: 0x6c373c20, 0x34fba: 0x6c373e20, 0x34fbb: 0x6c374020, + 0x34fbc: 0x6c374220, 0x34fbd: 0x6c374420, 0x34fbe: 0x6c374620, 0x34fbf: 0x6c374820, + // Block 0xd3f, offset 0x34fc0 + 0x34fc0: 0x6c374a20, 0x34fc1: 0x6c374c20, 0x34fc2: 0x6c374e20, 0x34fc3: 0x6c375020, + 0x34fc4: 0x6c375220, 0x34fc5: 0x6c375420, 0x34fc6: 0x6c375620, 0x34fc7: 0x6c375820, + 0x34fc8: 0x6c525420, 0x34fc9: 0x6c525620, 0x34fca: 0x6c525820, 0x34fcb: 0x6c525a20, + 0x34fcc: 0x6c525c20, 0x34fcd: 0x6c525e20, 0x34fce: 0x6c526020, 0x34fcf: 0x6c526220, + 0x34fd0: 0x6c526420, 0x34fd1: 0x6c526620, 0x34fd2: 0x6c526820, 0x34fd3: 0x6c526a20, + 0x34fd4: 0x6c526c20, 0x34fd5: 0x6c526e20, 0x34fd6: 0x6c527020, 0x34fd7: 0x6c527220, + 0x34fd8: 0x6c527420, 0x34fd9: 0x6c527620, 0x34fda: 0x6c527820, 0x34fdb: 0x6c527a20, + 0x34fdc: 0x6c527c20, 0x34fdd: 0x6c527e20, 0x34fde: 0x6c528020, 0x34fdf: 0x6c528220, + 0x34fe0: 0x6c528420, 0x34fe1: 0x6c528620, 0x34fe2: 0x6c528820, 0x34fe3: 0x6c528a20, + 0x34fe4: 0x6c528c20, 0x34fe5: 0x6c528e20, 0x34fe6: 0x6c529020, 0x34fe7: 0x6c529220, + 0x34fe8: 0x6c529420, 0x34fe9: 0x6c529620, 0x34fea: 0x6c529820, 0x34feb: 0x6c529a20, + 0x34fec: 0x6c529c20, 0x34fed: 0x6c529e20, 0x34fee: 0x6c52a020, 0x34fef: 0x6c52a220, + 0x34ff0: 0x6c52a420, 0x34ff1: 0x6c52a620, 0x34ff2: 0x6c52a820, 0x34ff3: 0x6c52aa20, + 0x34ff4: 0x6c52ac20, 0x34ff5: 0x6c749820, 0x34ff6: 0x6c749a20, 0x34ff7: 0x6c749c20, + 0x34ff8: 0x6c749e20, 0x34ff9: 0x6c74a020, 0x34ffa: 0x6c74a220, 0x34ffb: 0x6c74a420, + 0x34ffc: 0x6c74a620, 0x34ffd: 0x6c74a820, 0x34ffe: 0x6c74aa20, 0x34fff: 0x6c74ac20, + // Block 0xd40, offset 0x35000 + 0x35000: 0x6c74ae20, 0x35001: 0x6c74b020, 0x35002: 0x6c74b220, 0x35003: 0x6c74b420, + 0x35004: 0x6c74b620, 0x35005: 0x6c74b820, 0x35006: 0x6c74ba20, 0x35007: 0x6c74bc20, + 0x35008: 0x6c74be20, 0x35009: 0x6c74c020, 0x3500a: 0x6c74c220, 0x3500b: 0x6c74c420, + 0x3500c: 0x6c74c620, 0x3500d: 0x6c74c820, 0x3500e: 0x6c74ca20, 0x3500f: 0x6c74cc20, + 0x35010: 0x6c74ce20, 0x35011: 0x6c74d020, 0x35012: 0x6c74d220, 0x35013: 0x6c74d420, + 0x35014: 0x6c74d620, 0x35015: 0x6c74d820, 0x35016: 0x6c74da20, 0x35017: 0x6c74dc20, + 0x35018: 0x6c74de20, 0x35019: 0x6c74e020, 0x3501a: 0x6c74e220, 0x3501b: 0x6c74e420, + 0x3501c: 0x6c74e620, 0x3501d: 0x6c74e820, 0x3501e: 0x6c74ea20, 0x3501f: 0x6c74ec20, + 0x35020: 0x6c74ee20, 0x35021: 0x6c74f020, 0x35022: 0x6c74f220, 0x35023: 0x6c74f420, + 0x35024: 0x6c74f620, 0x35025: 0x6c74f820, 0x35026: 0x6c74fa20, 0x35027: 0x6c6a4c20, + 0x35028: 0x6c74fc20, 0x35029: 0x6c74fe20, 0x3502a: 0x6c750020, 0x3502b: 0x6c750220, + 0x3502c: 0x6c750420, 0x3502d: 0x6c750620, 0x3502e: 0x6c750820, 0x3502f: 0x6c750a20, + 0x35030: 0x6c750c20, 0x35031: 0x6c750e20, 0x35032: 0x6c751020, 0x35033: 0x6c751220, + 0x35034: 0x6c751420, 0x35035: 0x6c751620, 0x35036: 0x6c751820, 0x35037: 0x6c751a20, + 0x35038: 0x6c751c20, 0x35039: 0x6c751e20, 0x3503a: 0x6c752020, 0x3503b: 0x6c752220, + 0x3503c: 0x6c752420, 0x3503d: 0x6c752620, 0x3503e: 0x6c752820, 0x3503f: 0x6c9d0220, + // Block 0xd41, offset 0x35040 + 0x35040: 0x6c9d0420, 0x35041: 0x6c9d0620, 0x35042: 0x6c9d0820, 0x35043: 0x6c9d0a20, + 0x35044: 0x6c9d0c20, 0x35045: 0x6c9d0e20, 0x35046: 0x6c9d1020, 0x35047: 0x6c9d1220, + 0x35048: 0x6c9d1420, 0x35049: 0x6c9d1620, 0x3504a: 0x6c9d1820, 0x3504b: 0x6c9d1a20, + 0x3504c: 0x6c9d1c20, 0x3504d: 0x6c9d1e20, 0x3504e: 0x6c9d2020, 0x3504f: 0x6c9d2220, + 0x35050: 0x6c9d2420, 0x35051: 0x6c9d2620, 0x35052: 0x6c9d2820, 0x35053: 0x6c9d2a20, + 0x35054: 0x6c9d2c20, 0x35055: 0x6c9d2e20, 0x35056: 0x6c9d3020, 0x35057: 0x6c9d3220, + 0x35058: 0x6c9d3420, 0x35059: 0x6c9d3620, 0x3505a: 0x6c9d3820, 0x3505b: 0x6c9d3a20, + 0x3505c: 0x6c9d3c20, 0x3505d: 0x6c9d3e20, 0x3505e: 0x6c9d4020, 0x3505f: 0x6c9d4220, + 0x35060: 0x6c9d4420, 0x35061: 0x6c9d4620, 0x35062: 0x6c9d4820, 0x35063: 0x6c9d4a20, + 0x35064: 0x6c9d4c20, 0x35065: 0x6c9d4e20, 0x35066: 0x6c9d5020, 0x35067: 0x6c9d5220, + 0x35068: 0x6c9d5420, 0x35069: 0x6c9d5620, 0x3506a: 0x6c9d5820, 0x3506b: 0x6c9d5a20, + 0x3506c: 0x6c9d5c20, 0x3506d: 0x6c9d5e20, 0x3506e: 0x6c9d6020, 0x3506f: 0x6c9d6220, + 0x35070: 0x6c9d6420, 0x35071: 0x6c9d6620, 0x35072: 0x6c9d6820, 0x35073: 0x6c9d6a20, + 0x35074: 0x6c9d6c20, 0x35075: 0x6c9d6e20, 0x35076: 0x6c9d7020, 0x35077: 0x6c9d7220, + 0x35078: 0x6c9d7420, 0x35079: 0x6c9d7620, 0x3507a: 0x6c9d7820, 0x3507b: 0x6c9d7a20, + 0x3507c: 0x6c9d7c20, 0x3507d: 0x6c9d7e20, 0x3507e: 0x6c9d8020, 0x3507f: 0x6c9d8220, + // Block 0xd42, offset 0x35080 + 0x35080: 0x6c9d8420, 0x35081: 0x6cc98620, 0x35082: 0x6cc98820, 0x35083: 0x6cc98a20, + 0x35084: 0x6cc98c20, 0x35085: 0x6cc98e20, 0x35086: 0x6cc99020, 0x35087: 0x6cc99220, + 0x35088: 0x6cc99420, 0x35089: 0x6cc99620, 0x3508a: 0x6cc99820, 0x3508b: 0x6cc99a20, + 0x3508c: 0x6cc99c20, 0x3508d: 0x6cc99e20, 0x3508e: 0x6cc9a020, 0x3508f: 0x6cc9a220, + 0x35090: 0x6cc9a420, 0x35091: 0x6cc9a620, 0x35092: 0x6cc9a820, 0x35093: 0x6cc9aa20, + 0x35094: 0x6cc9ac20, 0x35095: 0x6cc9ae20, 0x35096: 0x6cc9b020, 0x35097: 0x6cc9b220, + 0x35098: 0x6cc9b420, 0x35099: 0x6cc9b620, 0x3509a: 0x6cc9b820, 0x3509b: 0x6cc9ba20, + 0x3509c: 0x6cc9bc20, 0x3509d: 0x6cc9be20, 0x3509e: 0x6cc9c020, 0x3509f: 0x6cc9c220, + 0x350a0: 0x6cc9c420, 0x350a1: 0x6cc9c620, 0x350a2: 0x6cc9c820, 0x350a3: 0x6cc9ca20, + 0x350a4: 0x6cc9cc20, 0x350a5: 0x6cc9ce20, 0x350a6: 0x6cc9d020, 0x350a7: 0x6cc9d220, + 0x350a8: 0x6cc9d420, 0x350a9: 0x6cc9d620, 0x350aa: 0x6cc9d820, 0x350ab: 0x6cc9da20, + 0x350ac: 0x6cc9dc20, 0x350ad: 0x6cc9de20, 0x350ae: 0x6cc9e020, 0x350af: 0x6cc9e220, + 0x350b0: 0x6cc9e420, 0x350b1: 0x6cc9e620, 0x350b2: 0x6cc9e820, 0x350b3: 0x6cc9ea20, + 0x350b4: 0x6cc9ec20, 0x350b5: 0x6cc9ee20, 0x350b6: 0x6cc9f020, 0x350b7: 0x6cc9f220, + 0x350b8: 0x6cc9f420, 0x350b9: 0x6cc9f620, 0x350ba: 0x6cc9f820, 0x350bb: 0x6cc9fa20, + 0x350bc: 0x6cc9fc20, 0x350bd: 0x6cc9fe20, 0x350be: 0x6cca0020, 0x350bf: 0x6cca0220, + // Block 0xd43, offset 0x350c0 + 0x350c0: 0x6cca0420, 0x350c1: 0x6cca0620, 0x350c2: 0x6cca0820, 0x350c3: 0x6cca0a20, + 0x350c4: 0x6cca0c20, 0x350c5: 0x6cca0e20, 0x350c6: 0x6cca1020, 0x350c7: 0x6cca1220, + 0x350c8: 0x6cca1420, 0x350c9: 0x6cca1620, 0x350ca: 0x6cca1820, 0x350cb: 0x6cca1a20, + 0x350cc: 0x6cca1c20, 0x350cd: 0x6cca1e20, 0x350ce: 0x6cca2020, 0x350cf: 0x6cca2220, + 0x350d0: 0x6cca2420, 0x350d1: 0x6cca2620, 0x350d2: 0x6cca2820, 0x350d3: 0x6cca2a20, + 0x350d4: 0x6cca2c20, 0x350d5: 0x6cca2e20, 0x350d6: 0x6cca3020, 0x350d7: 0x6cca3220, + 0x350d8: 0x6cca3420, 0x350d9: 0x6cca3620, 0x350da: 0x6cca3820, 0x350db: 0x6cca3a20, + 0x350dc: 0x6cca3c20, 0x350dd: 0x6cca3e20, 0x350de: 0x6cca4020, 0x350df: 0x6cca4220, + 0x350e0: 0x6cca4420, 0x350e1: 0x6cca4620, 0x350e2: 0x6cca4820, 0x350e3: 0x6cca4a20, + 0x350e4: 0x6cca4c20, 0x350e5: 0x6cca4e20, 0x350e6: 0x6cca5020, 0x350e7: 0x6cca5220, + 0x350e8: 0x6cca5420, 0x350e9: 0x6cca5620, 0x350ea: 0x6cca5820, 0x350eb: 0x6cca5a20, + 0x350ec: 0x6cca5c20, 0x350ed: 0x6cca5e20, 0x350ee: 0x6cca6020, 0x350ef: 0x6cca6220, + 0x350f0: 0x6cca6420, 0x350f1: 0x6cf79c20, 0x350f2: 0x6cf79e20, 0x350f3: 0x6cf7a020, + 0x350f4: 0x6cf7a220, 0x350f5: 0x6cf7a420, 0x350f6: 0x6cf7a620, 0x350f7: 0x6cf7a820, + 0x350f8: 0x6cf7aa20, 0x350f9: 0x6cf7ac20, 0x350fa: 0x6cf7ae20, 0x350fb: 0x6cf7b020, + 0x350fc: 0x6cf7b220, 0x350fd: 0x6cf7b420, 0x350fe: 0x6cf7b620, 0x350ff: 0x6cf7b820, + // Block 0xd44, offset 0x35100 + 0x35100: 0x6cf7ba20, 0x35101: 0x6cf7bc20, 0x35102: 0x6cf7be20, 0x35103: 0x6cf7c020, + 0x35104: 0x6cf7c220, 0x35105: 0x6cf7c420, 0x35106: 0x6cf7c620, 0x35107: 0x6cf7c820, + 0x35108: 0x6cf7ca20, 0x35109: 0x6cf7cc20, 0x3510a: 0x6cf7ce20, 0x3510b: 0x6cf7d020, + 0x3510c: 0x6cf7d220, 0x3510d: 0x6cf7d420, 0x3510e: 0x6cf7d620, 0x3510f: 0x6cf7d820, + 0x35110: 0x6cf7da20, 0x35111: 0x6cf7dc20, 0x35112: 0x6cf7de20, 0x35113: 0x6cf7e020, + 0x35114: 0x6cf7e220, 0x35115: 0x6cf7e420, 0x35116: 0x6cf7e620, 0x35117: 0x6cf7e820, + 0x35118: 0x6cf7ea20, 0x35119: 0x6cf7ec20, 0x3511a: 0x6cf7ee20, 0x3511b: 0x6cf7f020, + 0x3511c: 0x6cf7f220, 0x3511d: 0x6cf7f420, 0x3511e: 0x6cf7f620, 0x3511f: 0x6cf7f820, + 0x35120: 0x6cf7fa20, 0x35121: 0x6cf7fc20, 0x35122: 0x6cf7fe20, 0x35123: 0x6cf80020, + 0x35124: 0x6d26fa20, 0x35125: 0x6cf80220, 0x35126: 0x6cf80420, 0x35127: 0x6cf80620, + 0x35128: 0x6cf80820, 0x35129: 0x6cf80a20, 0x3512a: 0x6cf80c20, 0x3512b: 0x6cf80e20, + 0x3512c: 0x6cf81020, 0x3512d: 0x6cf81220, 0x3512e: 0x6cf81420, 0x3512f: 0x6cf81620, + 0x35130: 0x6cf81820, 0x35131: 0x6cf81a20, 0x35132: 0x6cf81c20, 0x35133: 0x6cf81e20, + 0x35134: 0x6cf82020, 0x35135: 0x6cf82220, 0x35136: 0x6cf82420, 0x35137: 0x6cf82620, + 0x35138: 0x6cf82820, 0x35139: 0x6cf82a20, 0x3513a: 0x6cf82c20, 0x3513b: 0x6cf82e20, + 0x3513c: 0x6cf83020, 0x3513d: 0x6cf83220, 0x3513e: 0x6cf83420, 0x3513f: 0x6cf83620, + // Block 0xd45, offset 0x35140 + 0x35140: 0x6cf83820, 0x35141: 0x6cf83a20, 0x35142: 0x6cf83c20, 0x35143: 0x6cf83e20, + 0x35144: 0x6cf84020, 0x35145: 0x6cf84220, 0x35146: 0x6cf84420, 0x35147: 0x6cf84620, + 0x35148: 0x6cf84820, 0x35149: 0x6cf84a20, 0x3514a: 0x6cf84c20, 0x3514b: 0x6cf84e20, + 0x3514c: 0x6cf85020, 0x3514d: 0x6cf85220, 0x3514e: 0x6cf85420, 0x3514f: 0x6cf85620, + 0x35150: 0x6cf85820, 0x35151: 0x6cf85a20, 0x35152: 0x6cf85c20, 0x35153: 0x6cf85e20, + 0x35154: 0x6cf86020, 0x35155: 0x6cf86220, 0x35156: 0x6cf86420, 0x35157: 0x6cf86620, + 0x35158: 0x6cf86820, 0x35159: 0x6cf86a20, 0x3515a: 0x6cf86c20, 0x3515b: 0x6cf86e20, + 0x3515c: 0x6cf87020, 0x3515d: 0x6cf87220, 0x3515e: 0x6cf87420, 0x3515f: 0x6cf87620, + 0x35160: 0x6cf87820, 0x35161: 0x6cf87a20, 0x35162: 0x6cf87c20, 0x35163: 0x6cf87e20, + 0x35164: 0x6cf88020, 0x35165: 0x6cf88220, 0x35166: 0x6cf88420, 0x35167: 0x6cf88620, + 0x35168: 0x6cf88820, 0x35169: 0x6cf88a20, 0x3516a: 0x6d26fc20, 0x3516b: 0x6d26fe20, + 0x3516c: 0x6d270020, 0x3516d: 0x6d270220, 0x3516e: 0x6d270420, 0x3516f: 0x6d270620, + 0x35170: 0x6d270820, 0x35171: 0x6d270a20, 0x35172: 0x6d270c20, 0x35173: 0x6d270e20, + 0x35174: 0x6d271020, 0x35175: 0x6d271220, 0x35176: 0x6d271420, 0x35177: 0x6d271620, + 0x35178: 0x6d271820, 0x35179: 0x6d271a20, 0x3517a: 0x6d271c20, 0x3517b: 0x6d271e20, + 0x3517c: 0x6d272020, 0x3517d: 0x6d272220, 0x3517e: 0x6d272420, 0x3517f: 0x6d272620, + // Block 0xd46, offset 0x35180 + 0x35180: 0x6d272820, 0x35181: 0x6d272a20, 0x35182: 0x6d272c20, 0x35183: 0x6d272e20, + 0x35184: 0x6d273020, 0x35185: 0x6d273220, 0x35186: 0x6d273420, 0x35187: 0x6d273620, + 0x35188: 0x6d273820, 0x35189: 0x6d273a20, 0x3518a: 0x6d273c20, 0x3518b: 0x6d273e20, + 0x3518c: 0x6d274020, 0x3518d: 0x6d274220, 0x3518e: 0x6d274420, 0x3518f: 0x6d274620, + 0x35190: 0x6d274820, 0x35191: 0x6d274a20, 0x35192: 0x6d274c20, 0x35193: 0x6d274e20, + 0x35194: 0x6d275020, 0x35195: 0x6d275220, 0x35196: 0x6d275420, 0x35197: 0x6d275620, + 0x35198: 0x6d275820, 0x35199: 0x6d275a20, 0x3519a: 0x6d275c20, 0x3519b: 0x6d275e20, + 0x3519c: 0x6d276020, 0x3519d: 0x6d276220, 0x3519e: 0x6d276420, 0x3519f: 0x6d276620, + 0x351a0: 0x6d276820, 0x351a1: 0x6d276a20, 0x351a2: 0x6d276c20, 0x351a3: 0x6d276e20, + 0x351a4: 0x6d277020, 0x351a5: 0x6d277220, 0x351a6: 0x6d277420, 0x351a7: 0x6d277620, + 0x351a8: 0x6d277820, 0x351a9: 0x6d277a20, 0x351aa: 0x6d277c20, 0x351ab: 0x6d277e20, + 0x351ac: 0x6d278020, 0x351ad: 0x6d278220, 0x351ae: 0x6d278420, 0x351af: 0x6d278620, + 0x351b0: 0x6d278820, 0x351b1: 0x6d278a20, 0x351b2: 0x6d278c20, 0x351b3: 0x6d278e20, + 0x351b4: 0x6d279020, 0x351b5: 0x6d279220, 0x351b6: 0x6d279420, 0x351b7: 0x6d279620, + 0x351b8: 0x6d279820, 0x351b9: 0x6d279a20, 0x351ba: 0x6d279c20, 0x351bb: 0x6d279e20, + 0x351bc: 0x6d27a020, 0x351bd: 0x6d27a220, 0x351be: 0x6d27a420, 0x351bf: 0x6d27a620, + // Block 0xd47, offset 0x351c0 + 0x351c0: 0x6d27a820, 0x351c1: 0x6d27aa20, 0x351c2: 0x6d27ac20, 0x351c3: 0x6d27ae20, + 0x351c4: 0x6d27b020, 0x351c5: 0x6d27b220, 0x351c6: 0x6d27b420, 0x351c7: 0x6d27b620, + 0x351c8: 0x6d27b820, 0x351c9: 0x6d27ba20, 0x351ca: 0x6d27bc20, 0x351cb: 0x6d27be20, + 0x351cc: 0x6d27c020, 0x351cd: 0x6d27c220, 0x351ce: 0x6d27c420, 0x351cf: 0x6d27c620, + 0x351d0: 0x6d27c820, 0x351d1: 0x6d27ca20, 0x351d2: 0x6d27cc20, 0x351d3: 0x6d27ce20, + 0x351d4: 0x6d27d020, 0x351d5: 0x6d546220, 0x351d6: 0x6d546420, 0x351d7: 0x6d546620, + 0x351d8: 0x6d546820, 0x351d9: 0x6d546a20, 0x351da: 0x6d546c20, 0x351db: 0x6d546e20, + 0x351dc: 0x6d547020, 0x351dd: 0x6d547220, 0x351de: 0x6d547420, 0x351df: 0x6d547620, + 0x351e0: 0x6d547820, 0x351e1: 0x6d547a20, 0x351e2: 0x6d547c20, 0x351e3: 0x6d547e20, + 0x351e4: 0x6d548020, 0x351e5: 0x6d548220, 0x351e6: 0x6d548420, 0x351e7: 0x6d548620, + 0x351e8: 0x6d548820, 0x351e9: 0x6d548a20, 0x351ea: 0x6d548c20, 0x351eb: 0x6d548e20, + 0x351ec: 0x6d549020, 0x351ed: 0x6d549220, 0x351ee: 0x6d549420, 0x351ef: 0x6d549620, + 0x351f0: 0x6d549820, 0x351f1: 0x6d549a20, 0x351f2: 0x6d549c20, 0x351f3: 0x6d549e20, + 0x351f4: 0x6d54a020, 0x351f5: 0x6d54a220, 0x351f6: 0x6d54a420, 0x351f7: 0x6d54a620, + 0x351f8: 0x6d54a820, 0x351f9: 0x6d54aa20, 0x351fa: 0x6d54ac20, 0x351fb: 0x6d54ae20, + 0x351fc: 0x6d54b020, 0x351fd: 0x6d54b220, 0x351fe: 0x6d54b420, 0x351ff: 0x6d54b620, + // Block 0xd48, offset 0x35200 + 0x35200: 0x6d54b820, 0x35201: 0x6d54ba20, 0x35202: 0x6d54bc20, 0x35203: 0x6d54be20, + 0x35204: 0x6d54c020, 0x35205: 0x6d54c220, 0x35206: 0x6d54c420, 0x35207: 0x6d54c620, + 0x35208: 0x6d54c820, 0x35209: 0x6d54ca20, 0x3520a: 0x6d54cc20, 0x3520b: 0x6d54ce20, + 0x3520c: 0x6d54d020, 0x3520d: 0x6d54d220, 0x3520e: 0x6d54d420, 0x3520f: 0x6d54d620, + 0x35210: 0x6d54d820, 0x35211: 0x6d54da20, 0x35212: 0x6d7fc220, 0x35213: 0x6d54dc20, + 0x35214: 0x6d54de20, 0x35215: 0x6d54e020, 0x35216: 0x6d54e220, 0x35217: 0x6d54e420, + 0x35218: 0x6d54e620, 0x35219: 0x6d54e820, 0x3521a: 0x6d54ea20, 0x3521b: 0x6d54ec20, + 0x3521c: 0x6d54ee20, 0x3521d: 0x6d54f020, 0x3521e: 0x6d54f220, 0x3521f: 0x6d54f420, + 0x35220: 0x6d54f620, 0x35221: 0x6d54f820, 0x35222: 0x6d54fa20, 0x35223: 0x6d54fc20, + 0x35224: 0x6d54fe20, 0x35225: 0x6d550020, 0x35226: 0x6d550220, 0x35227: 0x6d550420, + 0x35228: 0x6d550620, 0x35229: 0x6d550820, 0x3522a: 0x6d550a20, 0x3522b: 0x6d550c20, + 0x3522c: 0x6d550e20, 0x3522d: 0x6d551020, 0x3522e: 0x6d551220, 0x3522f: 0x6d551420, + 0x35230: 0x6d551620, 0x35231: 0x6d551820, 0x35232: 0x6d551a20, 0x35233: 0x6d551c20, + 0x35234: 0x6d551e20, 0x35235: 0x6d552020, 0x35236: 0x6d552220, 0x35237: 0x6d552420, + 0x35238: 0x6d552620, 0x35239: 0x6d552820, 0x3523a: 0x6d552a20, 0x3523b: 0x6d7fc420, + 0x3523c: 0x6d7fc620, 0x3523d: 0x6d7fc820, 0x3523e: 0x6d7fca20, 0x3523f: 0x6d7fcc20, + // Block 0xd49, offset 0x35240 + 0x35240: 0x6d7fce20, 0x35241: 0x6d7fd020, 0x35242: 0x6d7fd220, 0x35243: 0x6d7fd420, + 0x35244: 0x6d7fd620, 0x35245: 0x6d7fd820, 0x35246: 0x6d7fda20, 0x35247: 0x6d7fdc20, + 0x35248: 0x6d7fde20, 0x35249: 0x6d7fe020, 0x3524a: 0x6d7fe220, 0x3524b: 0x6d7fe420, + 0x3524c: 0x6d7fe620, 0x3524d: 0x6d7fe820, 0x3524e: 0x6d7fea20, 0x3524f: 0x6d7fec20, + 0x35250: 0x6d7fee20, 0x35251: 0x6d7ff020, 0x35252: 0x6d7ff220, 0x35253: 0x6d7ff420, + 0x35254: 0x6d7ff620, 0x35255: 0x6d7ff820, 0x35256: 0x6d7ffa20, 0x35257: 0x6d7ffc20, + 0x35258: 0x6d7ffe20, 0x35259: 0x6d800020, 0x3525a: 0x6d800220, 0x3525b: 0x6d800420, + 0x3525c: 0x6d800620, 0x3525d: 0x6d800820, 0x3525e: 0x6d800a20, 0x3525f: 0x6d800c20, + 0x35260: 0x6d800e20, 0x35261: 0x6d801020, 0x35262: 0x6d801220, 0x35263: 0x6d801420, + 0x35264: 0x6d801620, 0x35265: 0x6d801820, 0x35266: 0x6d801a20, 0x35267: 0x6d801c20, + 0x35268: 0x6d801e20, 0x35269: 0x6d802020, 0x3526a: 0x6d802220, 0x3526b: 0x6d802420, + 0x3526c: 0x6d802620, 0x3526d: 0x6d802820, 0x3526e: 0x6d802a20, 0x3526f: 0x6d802c20, + 0x35270: 0x6d802e20, 0x35271: 0x6d803020, 0x35272: 0x6d803220, 0x35273: 0x6d803420, + 0x35274: 0x6d803620, 0x35275: 0x6d803820, 0x35276: 0x6d803a20, 0x35277: 0x6d803c20, + 0x35278: 0x6d803e20, 0x35279: 0x6d804020, 0x3527a: 0x6d804220, 0x3527b: 0x6d804420, + 0x3527c: 0x6d804620, 0x3527d: 0x6d804820, 0x3527e: 0x6d804a20, 0x3527f: 0x6d804c20, + // Block 0xd4a, offset 0x35280 + 0x35280: 0x6d804e20, 0x35281: 0x6d805020, 0x35282: 0x6d805220, 0x35283: 0x6d805420, + 0x35284: 0x6d805620, 0x35285: 0x6d805820, 0x35286: 0x6d805a20, 0x35287: 0x6d805c20, + 0x35288: 0x6d805e20, 0x35289: 0x6d806020, 0x3528a: 0x6d806220, 0x3528b: 0x6d806420, + 0x3528c: 0x6d806620, 0x3528d: 0x6d806820, 0x3528e: 0x6d806a20, 0x3528f: 0x6d806c20, + 0x35290: 0x6d806e20, 0x35291: 0x6d807020, 0x35292: 0x6d807220, 0x35293: 0x6d807420, + 0x35294: 0x6d807620, 0x35295: 0x6d807820, 0x35296: 0x6d807a20, 0x35297: 0x6d807c20, + 0x35298: 0x6d807e20, 0x35299: 0x6d808020, 0x3529a: 0x6d808220, 0x3529b: 0x6d808420, + 0x3529c: 0x6d808620, 0x3529d: 0x6d808820, 0x3529e: 0x6d808a20, 0x3529f: 0x6d808c20, + 0x352a0: 0x6d808e20, 0x352a1: 0x6d809020, 0x352a2: 0x6d809220, 0x352a3: 0x6d809420, + 0x352a4: 0x6d809620, 0x352a5: 0x6d809820, 0x352a6: 0x6d809a20, 0x352a7: 0x6d809c20, + 0x352a8: 0x6d809e20, 0x352a9: 0x6d80a020, 0x352aa: 0x6d80a220, 0x352ab: 0x6d80a420, + 0x352ac: 0x6d80a620, 0x352ad: 0x6d80a820, 0x352ae: 0x6d80aa20, 0x352af: 0x6d80ac20, + 0x352b0: 0x6da63820, 0x352b1: 0x6da63a20, 0x352b2: 0x6da63c20, 0x352b3: 0x6da63e20, + 0x352b4: 0x6da64020, 0x352b5: 0x6da64220, 0x352b6: 0x6da64420, 0x352b7: 0x6da64620, + 0x352b8: 0x6da64820, 0x352b9: 0x6da64a20, 0x352ba: 0x6da64c20, 0x352bb: 0x6da64e20, + 0x352bc: 0x6da65020, 0x352bd: 0x6da65220, 0x352be: 0x6da65420, 0x352bf: 0x6da65620, + // Block 0xd4b, offset 0x352c0 + 0x352c0: 0x6da65820, 0x352c1: 0x6da65a20, 0x352c2: 0x6da65c20, 0x352c3: 0x6da65e20, + 0x352c4: 0x6da66020, 0x352c5: 0x6da66220, 0x352c6: 0x6da66420, 0x352c7: 0x6da66620, + 0x352c8: 0x6da66820, 0x352c9: 0x6da66a20, 0x352ca: 0x6da66c20, 0x352cb: 0x6da66e20, + 0x352cc: 0x6da67020, 0x352cd: 0x6da67220, 0x352ce: 0x6da67420, 0x352cf: 0x6da67620, + 0x352d0: 0x6da67820, 0x352d1: 0x6da67a20, 0x352d2: 0x6da67c20, 0x352d3: 0x6da67e20, + 0x352d4: 0x6da68020, 0x352d5: 0x6da68220, 0x352d6: 0x6da68420, 0x352d7: 0x6da68620, + 0x352d8: 0x6da68820, 0x352d9: 0x6da68a20, 0x352da: 0x6da68c20, 0x352db: 0x6da68e20, + 0x352dc: 0x6da69020, 0x352dd: 0x6da69220, 0x352de: 0x6da69420, 0x352df: 0x6da69620, + 0x352e0: 0x6da69820, 0x352e1: 0x6da69a20, 0x352e2: 0x6d883220, 0x352e3: 0x6da69c20, + 0x352e4: 0x6da69e20, 0x352e5: 0x6da6a020, 0x352e6: 0x6da6a220, 0x352e7: 0x6da6a420, + 0x352e8: 0x6da6a620, 0x352e9: 0x6da6a820, 0x352ea: 0x6da6aa20, 0x352eb: 0x6da6ac20, + 0x352ec: 0x6da6ae20, 0x352ed: 0x6da6b020, 0x352ee: 0x6da6b220, 0x352ef: 0x6da6b420, + 0x352f0: 0x6da6b620, 0x352f1: 0x6da6b820, 0x352f2: 0x6da6ba20, 0x352f3: 0x6da6bc20, + 0x352f4: 0x6da6be20, 0x352f5: 0x6da6c020, 0x352f6: 0x6da6c220, 0x352f7: 0x6da6c420, + 0x352f8: 0x6da6c620, 0x352f9: 0x6da6c820, 0x352fa: 0x6da6ca20, 0x352fb: 0x6da6cc20, + 0x352fc: 0x6da6ce20, 0x352fd: 0x6da6d020, 0x352fe: 0x6da6d220, 0x352ff: 0x6da6d420, + // Block 0xd4c, offset 0x35300 + 0x35300: 0x6da6d620, 0x35301: 0x6dc7a220, 0x35302: 0x6dc7a420, 0x35303: 0x6dc7a620, + 0x35304: 0x6dc7a820, 0x35305: 0x6dc7aa20, 0x35306: 0x6dc7ac20, 0x35307: 0x6dc7ae20, + 0x35308: 0x6dc7b020, 0x35309: 0x6dc7b220, 0x3530a: 0x6dc7b420, 0x3530b: 0x6dc7b620, + 0x3530c: 0x6dc7b820, 0x3530d: 0x6dc7ba20, 0x3530e: 0x6dc7bc20, 0x3530f: 0x6dc7be20, + 0x35310: 0x6dc7c020, 0x35311: 0x6dc7c220, 0x35312: 0x6dc7c420, 0x35313: 0x6dc7c620, + 0x35314: 0x6dc7c820, 0x35315: 0x6dc7ca20, 0x35316: 0x6dc7cc20, 0x35317: 0x6dc7ce20, + 0x35318: 0x6dc7d020, 0x35319: 0x6de40020, 0x3531a: 0x6dc7d220, 0x3531b: 0x6dc7d420, + 0x3531c: 0x6dc7d620, 0x3531d: 0x6dc7d820, 0x3531e: 0x6dc7da20, 0x3531f: 0x6dc7dc20, + 0x35320: 0x6dc7de20, 0x35321: 0x6dc7e020, 0x35322: 0x6dc7e220, 0x35323: 0x6dc7e420, + 0x35324: 0x6dc7e620, 0x35325: 0x6dc7e820, 0x35326: 0x6dc7ea20, 0x35327: 0x6dc7ec20, + 0x35328: 0x6dc7ee20, 0x35329: 0x6dc7f020, 0x3532a: 0x6dc7f220, 0x3532b: 0x6dc7f420, + 0x3532c: 0x6dc7f620, 0x3532d: 0x6dc7f820, 0x3532e: 0x6dc7fa20, 0x3532f: 0x6dc7fc20, + 0x35330: 0x6dc7fe20, 0x35331: 0x6dc80020, 0x35332: 0x6dc80220, 0x35333: 0x6dc80420, + 0x35334: 0x6dc80620, 0x35335: 0x6dc80820, 0x35336: 0x6dc80a20, 0x35337: 0x6dc80c20, + 0x35338: 0x6dc80e20, 0x35339: 0x6dc81020, 0x3533a: 0x6dc81220, 0x3533b: 0x6dc81420, + 0x3533c: 0x6dc81620, 0x3533d: 0x6dc81820, 0x3533e: 0x6dc81a20, 0x3533f: 0x6dc81c20, + // Block 0xd4d, offset 0x35340 + 0x35340: 0x6dc81e20, 0x35341: 0x6dc82020, 0x35342: 0x6dc82220, 0x35343: 0x6dc82420, + 0x35344: 0x6dc82620, 0x35345: 0x6dc82820, 0x35346: 0x6dc82a20, 0x35347: 0x6dc82c20, + 0x35348: 0x6dc82e20, 0x35349: 0x6dc83020, 0x3534a: 0x6dc83220, 0x3534b: 0x6dc83420, + 0x3534c: 0x6dc83620, 0x3534d: 0x6dc83820, 0x3534e: 0x6dc83a20, 0x3534f: 0x6dcc7220, + 0x35350: 0x6de40220, 0x35351: 0x6de40420, 0x35352: 0x6de40620, 0x35353: 0x6de40820, + 0x35354: 0x6de40a20, 0x35355: 0x6de40c20, 0x35356: 0x6de40e20, 0x35357: 0x6de41020, + 0x35358: 0x6de41220, 0x35359: 0x6de41420, 0x3535a: 0x6de41620, 0x3535b: 0x6de41820, + 0x3535c: 0x6de41a20, 0x3535d: 0x6de41c20, 0x3535e: 0x6de41e20, 0x3535f: 0x6de42020, + 0x35360: 0x6de42220, 0x35361: 0x6de42420, 0x35362: 0x6de42620, 0x35363: 0x6de42820, + 0x35364: 0x6de42a20, 0x35365: 0x6de42c20, 0x35366: 0x6de42e20, 0x35367: 0x6de43020, + 0x35368: 0x6de43220, 0x35369: 0x6de43420, 0x3536a: 0x6de43620, 0x3536b: 0x6de43820, + 0x3536c: 0x6de43a20, 0x3536d: 0x6de43c20, 0x3536e: 0x6de43e20, 0x3536f: 0x6de44020, + 0x35370: 0x6de44220, 0x35371: 0x6de44420, 0x35372: 0x6de44620, 0x35373: 0x6de44820, + 0x35374: 0x6de44a20, 0x35375: 0x6de44c20, 0x35376: 0x6de44e20, 0x35377: 0x6de45020, + 0x35378: 0x6de45220, 0x35379: 0x6de45420, 0x3537a: 0x6de45620, 0x3537b: 0x6de45820, + 0x3537c: 0x6de45a20, 0x3537d: 0x6de45c20, 0x3537e: 0x6de45e20, 0x3537f: 0x6de46020, + // Block 0xd4e, offset 0x35380 + 0x35380: 0x6de46220, 0x35381: 0x6de46420, 0x35382: 0x6de46620, 0x35383: 0x6de46820, + 0x35384: 0x6dfb3a20, 0x35385: 0x6dfb3c20, 0x35386: 0x6dfb3e20, 0x35387: 0x6dfb4020, + 0x35388: 0x6dfb4220, 0x35389: 0x6dfb4420, 0x3538a: 0x6dfb4620, 0x3538b: 0x6dfb4820, + 0x3538c: 0x6dfb4a20, 0x3538d: 0x6dfb4c20, 0x3538e: 0x6dfb4e20, 0x3538f: 0x6dfb5020, + 0x35390: 0x6dfb5220, 0x35391: 0x6de46a20, 0x35392: 0x6dfb5420, 0x35393: 0x6dfb5620, + 0x35394: 0x6dfb5820, 0x35395: 0x6dfb5a20, 0x35396: 0x6dfb5c20, 0x35397: 0x6dfb5e20, + 0x35398: 0x6dfb6020, 0x35399: 0x6dfb6220, 0x3539a: 0x6dfb6420, 0x3539b: 0x6dfb6620, + 0x3539c: 0x6dfb6820, 0x3539d: 0x6dfb6a20, 0x3539e: 0x6dfb6c20, 0x3539f: 0x6dfb6e20, + 0x353a0: 0x6dfb7020, 0x353a1: 0x6dfb7220, 0x353a2: 0x6dfb7420, 0x353a3: 0x6dfb7620, + 0x353a4: 0x6dfb7820, 0x353a5: 0x6dfb7a20, 0x353a6: 0x6dfb7c20, 0x353a7: 0x6dfb7e20, + 0x353a8: 0x6dfb8020, 0x353a9: 0x6dfb8220, 0x353aa: 0x6dfb8420, 0x353ab: 0x6dfb8620, + 0x353ac: 0x6dfb8820, 0x353ad: 0x6dfb8a20, 0x353ae: 0x6dfb8c20, 0x353af: 0x6e0e7e20, + 0x353b0: 0x6e0e8020, 0x353b1: 0x6e0e8220, 0x353b2: 0x6e0e8420, 0x353b3: 0x6e0e8620, + 0x353b4: 0x6e0e8820, 0x353b5: 0x6e0e8a20, 0x353b6: 0x6e0e8c20, 0x353b7: 0x6e0e8e20, + 0x353b8: 0x6e0e9020, 0x353b9: 0x6e0e9220, 0x353ba: 0x6e0e9420, 0x353bb: 0x6e0e9620, + 0x353bc: 0x6e0e9820, 0x353bd: 0x6e0e9a20, 0x353be: 0x6e0e9c20, 0x353bf: 0x6e0e9e20, + // Block 0xd4f, offset 0x353c0 + 0x353c0: 0x6e0ea020, 0x353c1: 0x6e0ea220, 0x353c2: 0x6e1dc820, 0x353c3: 0x6e0ea420, + 0x353c4: 0x6e0ea620, 0x353c5: 0x6e0ea820, 0x353c6: 0x6e0eaa20, 0x353c7: 0x6e0eac20, + 0x353c8: 0x6e0eae20, 0x353c9: 0x6e0eb020, 0x353ca: 0x6e0eb220, 0x353cb: 0x6e0eb420, + 0x353cc: 0x6e0eb620, 0x353cd: 0x6e0eb820, 0x353ce: 0x6e0eba20, 0x353cf: 0x6e0ebc20, + 0x353d0: 0x6e0ebe20, 0x353d1: 0x6e0ec020, 0x353d2: 0x6e0ec220, 0x353d3: 0x6e0ec420, + 0x353d4: 0x6e0ec620, 0x353d5: 0x6e0ec820, 0x353d6: 0x6e0eca20, 0x353d7: 0x6e0ecc20, + 0x353d8: 0x6e0ece20, 0x353d9: 0x6e1dca20, 0x353da: 0x6e1dcc20, 0x353db: 0x6e1dce20, + 0x353dc: 0x6e1dd020, 0x353dd: 0x6e1dd220, 0x353de: 0x6e1dd420, 0x353df: 0x6e1dd620, + 0x353e0: 0x6e1dd820, 0x353e1: 0x6e1dda20, 0x353e2: 0x6e1ddc20, 0x353e3: 0x6e1dde20, + 0x353e4: 0x6e1de020, 0x353e5: 0x6e1de220, 0x353e6: 0x6e1de420, 0x353e7: 0x6e1de620, + 0x353e8: 0x6e1de820, 0x353e9: 0x6e1dea20, 0x353ea: 0x6e1dec20, 0x353eb: 0x6e1dee20, + 0x353ec: 0x6e1df020, 0x353ed: 0x6e1df220, 0x353ee: 0x6e1df420, 0x353ef: 0x6e1df620, + 0x353f0: 0x6e1df820, 0x353f1: 0x6e1dfa20, 0x353f2: 0x6e1dfc20, 0x353f3: 0x6e1dfe20, + 0x353f4: 0x6e1e0020, 0x353f5: 0x6e1e0220, 0x353f6: 0x6e1e0420, 0x353f7: 0x6e294a20, + 0x353f8: 0x6e294c20, 0x353f9: 0x6e294e20, 0x353fa: 0x6e295020, 0x353fb: 0x6e295220, + 0x353fc: 0x6e295420, 0x353fd: 0x6e295620, 0x353fe: 0x6e295820, 0x353ff: 0x6e295a20, + // Block 0xd50, offset 0x35400 + 0x35400: 0x6e295c20, 0x35401: 0x6e295e20, 0x35402: 0x6e296020, 0x35403: 0x6e296220, + 0x35404: 0x6e296420, 0x35405: 0x6e296620, 0x35406: 0x6e296820, 0x35407: 0x6e296a20, + 0x35408: 0x6e296c20, 0x35409: 0x6e296e20, 0x3540a: 0x6e297020, 0x3540b: 0x6e326420, + 0x3540c: 0x6e326620, 0x3540d: 0x6e326820, 0x3540e: 0x6e326a20, 0x3540f: 0x6e326c20, + 0x35410: 0x6e326e20, 0x35411: 0x6e327020, 0x35412: 0x6e327220, 0x35413: 0x6e327420, + 0x35414: 0x6e327620, 0x35415: 0x6e327820, 0x35416: 0x6e327a20, 0x35417: 0x6e327c20, + 0x35418: 0x6e327e20, 0x35419: 0x6e328020, 0x3541a: 0x6e328220, 0x3541b: 0x6e328420, + 0x3541c: 0x6e328620, 0x3541d: 0x6e328820, 0x3541e: 0x6e38bc20, 0x3541f: 0x6e38be20, + 0x35420: 0x6e38c020, 0x35421: 0x6e38c220, 0x35422: 0x6e38c420, 0x35423: 0x6e38c620, + 0x35424: 0x6e38c820, 0x35425: 0x6e38ca20, 0x35426: 0x6e38cc20, 0x35427: 0x6e38ce20, + 0x35428: 0x6e38d020, 0x35429: 0x6e3d3220, 0x3542a: 0x6e3d3420, 0x3542b: 0x6e3d3620, + 0x3542c: 0x6e3d3820, 0x3542d: 0x6e3d3a20, 0x3542e: 0x6e3d3c20, 0x3542f: 0x6e3d3e20, + 0x35430: 0x6e3d4020, 0x35431: 0x6e3d4220, 0x35432: 0x6e404e20, 0x35433: 0x6e401020, + 0x35434: 0x6e405020, 0x35435: 0x6e405220, 0x35436: 0x6e42aa20, 0x35437: 0x6e42ac20, + 0x35438: 0x6e42ae20, 0x35439: 0x6e443020, 0x3543a: 0x6e451e20, 0x3543b: 0x6e452020, + 0x3543c: 0x6e45c220, 0x3543d: 0x6e462c20, 0x3543e: 0x6e462e20, 0x3543f: 0x6e46b020, + // Block 0xd51, offset 0x35440 + 0x35440: 0x6c12b820, 0x35441: 0x6c223e20, 0x35442: 0x6c224020, 0x35443: 0x6c224220, + 0x35444: 0x6c224420, 0x35445: 0x6c224620, 0x35446: 0x6c224820, 0x35447: 0x6c224a20, + 0x35448: 0x6c224c20, 0x35449: 0x6c377620, 0x3544a: 0x6c377820, 0x3544b: 0x6c377a20, + 0x3544c: 0x6c377c20, 0x3544d: 0x6c377e20, 0x3544e: 0x6c378020, 0x3544f: 0x6c378220, + 0x35450: 0x6c378420, 0x35451: 0x6c378620, 0x35452: 0x6c378820, 0x35453: 0x6c378a20, + 0x35454: 0x6c378c20, 0x35455: 0x6c378e20, 0x35456: 0x6c379020, 0x35457: 0x6c52d420, + 0x35458: 0x6c52d620, 0x35459: 0x6c52d820, 0x3545a: 0x6c52da20, 0x3545b: 0x6c52dc20, + 0x3545c: 0x6c52de20, 0x3545d: 0x6c52e020, 0x3545e: 0x6c52e220, 0x3545f: 0x6c52e420, + 0x35460: 0x6c52e620, 0x35461: 0x6c52e820, 0x35462: 0x6c52ea20, 0x35463: 0x6c52ec20, + 0x35464: 0x6c52ee20, 0x35465: 0x6c52f020, 0x35466: 0x6c52f220, 0x35467: 0x6c756020, + 0x35468: 0x6c756220, 0x35469: 0x6c756420, 0x3546a: 0x6c756620, 0x3546b: 0x6c756820, + 0x3546c: 0x6c756a20, 0x3546d: 0x6c756c20, 0x3546e: 0x6c756e20, 0x3546f: 0x6c757020, + 0x35470: 0x6c757220, 0x35471: 0x6c757420, 0x35472: 0x6c757620, 0x35473: 0x6c757820, + 0x35474: 0x6c757a20, 0x35475: 0x6c757c20, 0x35476: 0x6c757e20, 0x35477: 0x6c758020, + 0x35478: 0x6c758220, 0x35479: 0x6c758420, 0x3547a: 0x6c9dba20, 0x3547b: 0x6c9dbc20, + 0x3547c: 0x6c9dbe20, 0x3547d: 0x6c9dc020, 0x3547e: 0x6c9dc220, 0x3547f: 0x6c9dc420, + // Block 0xd52, offset 0x35480 + 0x35480: 0x6c9dc620, 0x35481: 0x6c9dc820, 0x35482: 0x6c9dca20, 0x35483: 0x6c9dcc20, + 0x35484: 0x6c9dce20, 0x35485: 0x6c9dd020, 0x35486: 0x6c9dd220, 0x35487: 0x6c9dd420, + 0x35488: 0x6ccaa620, 0x35489: 0x6ccaa820, 0x3548a: 0x6ccaaa20, 0x3548b: 0x6ccaac20, + 0x3548c: 0x6ccaae20, 0x3548d: 0x6ccab020, 0x3548e: 0x6ccab220, 0x3548f: 0x6ccab420, + 0x35490: 0x6ccab620, 0x35491: 0x6ccab820, 0x35492: 0x6ccaba20, 0x35493: 0x6ccabc20, + 0x35494: 0x6ccabe20, 0x35495: 0x6ccac020, 0x35496: 0x6ccac220, 0x35497: 0x6ccac420, + 0x35498: 0x6ccac620, 0x35499: 0x6ccac820, 0x3549a: 0x6ccaca20, 0x3549b: 0x6ccacc20, + 0x3549c: 0x6ccace20, 0x3549d: 0x6cf8da20, 0x3549e: 0x6cf8dc20, 0x3549f: 0x6cf8de20, + 0x354a0: 0x6cf8e020, 0x354a1: 0x6cf8e220, 0x354a2: 0x6cf8e420, 0x354a3: 0x6cf8e620, + 0x354a4: 0x6cf8e820, 0x354a5: 0x6cf8ea20, 0x354a6: 0x6cf8ec20, 0x354a7: 0x6cf8ee20, + 0x354a8: 0x6cf8f020, 0x354a9: 0x6cf8f220, 0x354aa: 0x6cf8f420, 0x354ab: 0x6cf8f620, + 0x354ac: 0x6d0f4820, 0x354ad: 0x6cf8f820, 0x354ae: 0x6cf8fa20, 0x354af: 0x6cf8fc20, + 0x354b0: 0x6cf8fe20, 0x354b1: 0x6cf90020, 0x354b2: 0x6d281220, 0x354b3: 0x6d281420, + 0x354b4: 0x6d281620, 0x354b5: 0x6d281820, 0x354b6: 0x6d281a20, 0x354b7: 0x6d281c20, + 0x354b8: 0x6d281e20, 0x354b9: 0x6d282020, 0x354ba: 0x6d282220, 0x354bb: 0x6d282420, + 0x354bc: 0x6d282620, 0x354bd: 0x6d282820, 0x354be: 0x6d282a20, 0x354bf: 0x6d282c20, + // Block 0xd53, offset 0x354c0 + 0x354c0: 0x6d282e20, 0x354c1: 0x6d283020, 0x354c2: 0x6d283220, 0x354c3: 0x6d283420, + 0x354c4: 0x6d283620, 0x354c5: 0x6d283820, 0x354c6: 0x6d283a20, 0x354c7: 0x6d283c20, + 0x354c8: 0x6d556220, 0x354c9: 0x6d556420, 0x354ca: 0x6d556620, 0x354cb: 0x6d556820, + 0x354cc: 0x6d556a20, 0x354cd: 0x6d556c20, 0x354ce: 0x6d556e20, 0x354cf: 0x6d557020, + 0x354d0: 0x6d557220, 0x354d1: 0x6d557420, 0x354d2: 0x6d557620, 0x354d3: 0x6d557820, + 0x354d4: 0x6d557a20, 0x354d5: 0x6d557c20, 0x354d6: 0x6d557e20, 0x354d7: 0x6d558020, + 0x354d8: 0x6d80e220, 0x354d9: 0x6d80e420, 0x354da: 0x6d80e620, 0x354db: 0x6d80e820, + 0x354dc: 0x6d80ea20, 0x354dd: 0x6d80ec20, 0x354de: 0x6d80ee20, 0x354df: 0x6d80f020, + 0x354e0: 0x6da70220, 0x354e1: 0x6da70420, 0x354e2: 0x6da70620, 0x354e3: 0x6da70820, + 0x354e4: 0x6da70a20, 0x354e5: 0x6da70c20, 0x354e6: 0x6da70e20, 0x354e7: 0x6da71020, + 0x354e8: 0x6dc85420, 0x354e9: 0x6dc85620, 0x354ea: 0x6dc85820, 0x354eb: 0x6dc85a20, + 0x354ec: 0x6de47e20, 0x354ed: 0x6de48020, 0x354ee: 0x6de48220, 0x354ef: 0x6de48420, + 0x354f0: 0x6de48620, 0x354f1: 0x6dfb9c20, 0x354f2: 0x6dfb9e20, 0x354f3: 0x6dfba020, + 0x354f4: 0x6e0ed820, 0x354f5: 0x6e0eda20, 0x354f6: 0x6e1e1020, 0x354f7: 0x6e0edc20, + 0x354f8: 0x6e0ede20, 0x354f9: 0x6e1e1220, 0x354fa: 0x6e1e1420, 0x354fb: 0x6e1e1620, + 0x354fc: 0x6e1e1820, 0x354fd: 0x6e297820, 0x354fe: 0x6e329020, 0x354ff: 0x6e38d820, + // Block 0xd54, offset 0x35500 + 0x35500: 0x6e38da20, 0x35501: 0x6e3d4620, 0x35502: 0x6c04ac20, 0x35503: 0x6c097820, + 0x35504: 0x6c097a20, 0x35505: 0x6c12be20, 0x35506: 0x6c12c020, 0x35507: 0x6c225420, + 0x35508: 0x6c225620, 0x35509: 0x6c379c20, 0x3550a: 0x6c225820, 0x3550b: 0x6c225a20, + 0x3550c: 0x6c225c20, 0x3550d: 0x6c379e20, 0x3550e: 0x6c37a020, 0x3550f: 0x6c37a220, + 0x35510: 0x6c37a420, 0x35511: 0x6c37a620, 0x35512: 0x6c37a820, 0x35513: 0x6c37aa20, + 0x35514: 0x6c37ac20, 0x35515: 0x6c37ae20, 0x35516: 0x6c37b020, 0x35517: 0x6c37b220, + 0x35518: 0x6c37b420, 0x35519: 0x6c37b620, 0x3551a: 0x6c37b820, 0x3551b: 0x6c37ba20, + 0x3551c: 0x6c37bc20, 0x3551d: 0x6c37be20, 0x3551e: 0x6c37c020, 0x3551f: 0x6c37c220, + 0x35520: 0x6c37c420, 0x35521: 0x6c37c620, 0x35522: 0x6c530220, 0x35523: 0x6c530420, + 0x35524: 0x6c530620, 0x35525: 0x6c2bd020, 0x35526: 0x6c758c20, 0x35527: 0x6c758e20, + 0x35528: 0x6c759020, 0x35529: 0x6c759220, 0x3552a: 0x6c759420, 0x3552b: 0x6c759620, + 0x3552c: 0x6c759820, 0x3552d: 0x6c759a20, 0x3552e: 0x6c759c20, 0x3552f: 0x6c759e20, + 0x35530: 0x6c75a020, 0x35531: 0x6c75a220, 0x35532: 0x6c6f0e20, 0x35533: 0x6c9dda20, + 0x35534: 0x6c9ddc20, 0x35535: 0x6c9dde20, 0x35536: 0x6c9de020, 0x35537: 0x6c9de220, + 0x35538: 0x6c9de420, 0x35539: 0x6ccada20, 0x3553a: 0x6ccadc20, 0x3553b: 0x6ccade20, + 0x3553c: 0x6ccae020, 0x3553d: 0x6ccae220, 0x3553e: 0x6ccae420, 0x3553f: 0x6ccae620, + // Block 0xd55, offset 0x35540 + 0x35540: 0x6ccae820, 0x35541: 0x6ccaea20, 0x35542: 0x6ccaec20, 0x35543: 0x6ccaee20, + 0x35544: 0x6ccaf020, 0x35545: 0x6ccaf220, 0x35546: 0x6ccaf420, 0x35547: 0x6cf90c20, + 0x35548: 0x6cf90e20, 0x35549: 0x6cf91020, 0x3554a: 0x6cf91220, 0x3554b: 0x6d75b820, + 0x3554c: 0x6cf91420, 0x3554d: 0x6cf91620, 0x3554e: 0x6cf91820, 0x3554f: 0x6cf1c020, + 0x35550: 0x6d284620, 0x35551: 0x6d284820, 0x35552: 0x6d284a20, 0x35553: 0x6d284c20, + 0x35554: 0x6d558820, 0x35555: 0x6d558a20, 0x35556: 0x6d558c20, 0x35557: 0x6d558e20, + 0x35558: 0x6d559020, 0x35559: 0x6d559220, 0x3555a: 0x6d559420, 0x3555b: 0x6d559620, + 0x3555c: 0x6d80f420, 0x3555d: 0x6d80f620, 0x3555e: 0x6d80f820, 0x3555f: 0x6d80fa20, + 0x35560: 0x6d80fc20, 0x35561: 0x6da71220, 0x35562: 0x6da71420, 0x35563: 0x6da71620, + 0x35564: 0x6da71820, 0x35565: 0x6da71a20, 0x35566: 0x6dc86020, 0x35567: 0x6dc86220, + 0x35568: 0x6dc86420, 0x35569: 0x6dc86620, 0x3556a: 0x6dc86820, 0x3556b: 0x6dc86a20, + 0x3556c: 0x6de48820, 0x3556d: 0x6de20820, 0x3556e: 0x6e0ee020, 0x3556f: 0x6e1e1a20, + 0x35570: 0x6e1e1c20, 0x35571: 0x6e297a20, 0x35572: 0x6e297c20, 0x35573: 0x6e329420, + 0x35574: 0x6e329620, 0x35575: 0x6c04b020, 0x35576: 0x6c04b220, 0x35577: 0x6c097e20, + 0x35578: 0x6c12c620, 0x35579: 0x6c12c820, 0x3557a: 0x6c12ca20, 0x3557b: 0x6c12cc20, + 0x3557c: 0x6c12ce20, 0x3557d: 0x6c12d020, 0x3557e: 0x6c12d220, 0x3557f: 0x6c226020, + // Block 0xd56, offset 0x35580 + 0x35580: 0x6c226220, 0x35581: 0x6c226420, 0x35582: 0x6c226620, 0x35583: 0x6c226820, + 0x35584: 0x6c226a20, 0x35585: 0x6c226c20, 0x35586: 0x6c226e20, 0x35587: 0x6c227020, + 0x35588: 0x6c227220, 0x35589: 0x6c37dc20, 0x3558a: 0x6c37de20, 0x3558b: 0x6c37e020, + 0x3558c: 0x6c37e220, 0x3558d: 0x6c37e420, 0x3558e: 0x6c37e620, 0x3558f: 0x6c37e820, + 0x35590: 0x6c37ea20, 0x35591: 0x6c37ec20, 0x35592: 0x6c37ee20, 0x35593: 0x6c37f020, + 0x35594: 0x6c37f220, 0x35595: 0x6c37f420, 0x35596: 0x6c37f620, 0x35597: 0x6c37f820, + 0x35598: 0x6c37fa20, 0x35599: 0x6c37fc20, 0x3559a: 0x6c37fe20, 0x3559b: 0x6c380020, + 0x3559c: 0x6c380220, 0x3559d: 0x6c531a20, 0x3559e: 0x6c531c20, 0x3559f: 0x6c531e20, + 0x355a0: 0x6c532020, 0x355a1: 0x6c532220, 0x355a2: 0x6c532420, 0x355a3: 0x6c532620, + 0x355a4: 0x6c532820, 0x355a5: 0x6c532a20, 0x355a6: 0x6c532c20, 0x355a7: 0x6c532e20, + 0x355a8: 0x6c533020, 0x355a9: 0x6c533220, 0x355aa: 0x6c533420, 0x355ab: 0x6c533620, + 0x355ac: 0x6c533820, 0x355ad: 0x6c533a20, 0x355ae: 0x6c533c20, 0x355af: 0x6c533e20, + 0x355b0: 0x6c534020, 0x355b1: 0x6c534220, 0x355b2: 0x6c75b220, 0x355b3: 0x6c75b420, + 0x355b4: 0x6c75b620, 0x355b5: 0x6c75b820, 0x355b6: 0x6c75ba20, 0x355b7: 0x6c75bc20, + 0x355b8: 0x6c75be20, 0x355b9: 0x6c75c020, 0x355ba: 0x6c75c220, 0x355bb: 0x6c75c420, + 0x355bc: 0x6c75c620, 0x355bd: 0x6c75c820, 0x355be: 0x6c75ca20, 0x355bf: 0x6c75cc20, + // Block 0xd57, offset 0x355c0 + 0x355c0: 0x6c75ce20, 0x355c1: 0x6c75d020, 0x355c2: 0x6c75d220, 0x355c3: 0x6c75d420, + 0x355c4: 0x6c75d620, 0x355c5: 0x6c9dfc20, 0x355c6: 0x6c9dfe20, 0x355c7: 0x6c9e0020, + 0x355c8: 0x6c9e0220, 0x355c9: 0x6c9e0420, 0x355ca: 0x6c9e0620, 0x355cb: 0x6c9e0820, + 0x355cc: 0x6c9e0a20, 0x355cd: 0x6c9e0c20, 0x355ce: 0x6c9e0e20, 0x355cf: 0x6c9e1020, + 0x355d0: 0x6c9e1220, 0x355d1: 0x6c9e1420, 0x355d2: 0x6c9e1620, 0x355d3: 0x6c9e1820, + 0x355d4: 0x6c9e1a20, 0x355d5: 0x6c9e1c20, 0x355d6: 0x6ccb1220, 0x355d7: 0x6ccb1420, + 0x355d8: 0x6ccb1620, 0x355d9: 0x6ccb1820, 0x355da: 0x6ccb1a20, 0x355db: 0x6ccb1c20, + 0x355dc: 0x6ccb1e20, 0x355dd: 0x6ccb2020, 0x355de: 0x6ccb2220, 0x355df: 0x6ccb2420, + 0x355e0: 0x6ccb2620, 0x355e1: 0x6ccb2820, 0x355e2: 0x6ccb2a20, 0x355e3: 0x6ccb2c20, + 0x355e4: 0x6ccb2e20, 0x355e5: 0x6ccb3020, 0x355e6: 0x6ccb3220, 0x355e7: 0x6ccb3420, + 0x355e8: 0x6ccb3620, 0x355e9: 0x6ccb3820, 0x355ea: 0x6ccb3a20, 0x355eb: 0x6ccb3c20, + 0x355ec: 0x6ccb3e20, 0x355ed: 0x6ccb4020, 0x355ee: 0x6ccb4220, 0x355ef: 0x6ccb4420, + 0x355f0: 0x6ccb4620, 0x355f1: 0x6cf93020, 0x355f2: 0x6cf93220, 0x355f3: 0x6cf93420, + 0x355f4: 0x6cf93620, 0x355f5: 0x6cf93820, 0x355f6: 0x6cf93a20, 0x355f7: 0x6cf93c20, + 0x355f8: 0x6cf93e20, 0x355f9: 0x6cf94020, 0x355fa: 0x6cf94220, 0x355fb: 0x6cf94420, + 0x355fc: 0x6cf94620, 0x355fd: 0x6cf94820, 0x355fe: 0x6cf94a20, 0x355ff: 0x6cf94c20, + // Block 0xd58, offset 0x35600 + 0x35600: 0x6cf94e20, 0x35601: 0x6cf95020, 0x35602: 0x6cf95220, 0x35603: 0x6cf95420, + 0x35604: 0x6d286220, 0x35605: 0x6d286420, 0x35606: 0x6d286620, 0x35607: 0x6d286820, + 0x35608: 0x6d286a20, 0x35609: 0x6d286c20, 0x3560a: 0x6d286e20, 0x3560b: 0x6d287020, + 0x3560c: 0x6d287220, 0x3560d: 0x6d55a820, 0x3560e: 0x6d55aa20, 0x3560f: 0x6d55ac20, + 0x35610: 0x6d55ae20, 0x35611: 0x6d55b020, 0x35612: 0x6d55b220, 0x35613: 0x6d55b420, + 0x35614: 0x6d55b620, 0x35615: 0x6d55b820, 0x35616: 0x6d55ba20, 0x35617: 0x6d55bc20, + 0x35618: 0x6d55be20, 0x35619: 0x6d55c020, 0x3561a: 0x6d55c220, 0x3561b: 0x6d55c420, + 0x3561c: 0x6d55c620, 0x3561d: 0x6d811220, 0x3561e: 0x6d811420, 0x3561f: 0x6d811620, + 0x35620: 0x6d811820, 0x35621: 0x6d811a20, 0x35622: 0x6d811c20, 0x35623: 0x6d811e20, + 0x35624: 0x6d812020, 0x35625: 0x6d812220, 0x35626: 0x6d812420, 0x35627: 0x6d812620, + 0x35628: 0x6da72620, 0x35629: 0x6da72820, 0x3562a: 0x6da72a20, 0x3562b: 0x6da72c20, + 0x3562c: 0x6da72e20, 0x3562d: 0x6da73020, 0x3562e: 0x6da73220, 0x3562f: 0x6dc86e20, + 0x35630: 0x6dc87020, 0x35631: 0x6dc87220, 0x35632: 0x6dc87420, 0x35633: 0x6dc87620, + 0x35634: 0x6dc87820, 0x35635: 0x6dc87a20, 0x35636: 0x6dc87c20, 0x35637: 0x6de48e20, + 0x35638: 0x6de49020, 0x35639: 0x6dfba820, 0x3563a: 0x6dfbaa20, 0x3563b: 0x6dfbac20, + 0x3563c: 0x6e0ee420, 0x3563d: 0x6e0ee620, 0x3563e: 0x6e1e1e20, 0x3563f: 0x6e298020, + // Block 0xd59, offset 0x35640 + 0x35640: 0x6e298220, 0x35641: 0x6e298420, 0x35642: 0x6c380820, 0x35643: 0x6c380a20, + 0x35644: 0x6c380c20, 0x35645: 0x6c534c20, 0x35646: 0x6c534e20, 0x35647: 0x6c535020, + 0x35648: 0x6c75e220, 0x35649: 0x6c75e420, 0x3564a: 0x6c75e620, 0x3564b: 0x6c9e2a20, + 0x3564c: 0x6c9e2c20, 0x3564d: 0x6c9e2e20, 0x3564e: 0x6c9e3020, 0x3564f: 0x6c9e3220, + 0x35650: 0x6c9e3420, 0x35651: 0x6c9e3620, 0x35652: 0x6c9e3820, 0x35653: 0x6c9e3a20, + 0x35654: 0x6c9e3c20, 0x35655: 0x6c9e3e20, 0x35656: 0x6c9e4020, 0x35657: 0x6c9e4220, + 0x35658: 0x6c9e4420, 0x35659: 0x6ccb5420, 0x3565a: 0x6ccb5620, 0x3565b: 0x6ccb5820, + 0x3565c: 0x6ccb5a20, 0x3565d: 0x6ccb5c20, 0x3565e: 0x6ccb5e20, 0x3565f: 0x6ccb6020, + 0x35660: 0x6cf96020, 0x35661: 0x6cf96220, 0x35662: 0x6cf96420, 0x35663: 0x6cf96620, + 0x35664: 0x6cf96820, 0x35665: 0x6cf96a20, 0x35666: 0x6cf96c20, 0x35667: 0x6cf96e20, + 0x35668: 0x6cf97020, 0x35669: 0x6cf97220, 0x3566a: 0x6cf97420, 0x3566b: 0x6cf97620, + 0x3566c: 0x6cf97820, 0x3566d: 0x6d017c20, 0x3566e: 0x6d287c20, 0x3566f: 0x6d287e20, + 0x35670: 0x6d288020, 0x35671: 0x6d288220, 0x35672: 0x6d288420, 0x35673: 0x6d288620, + 0x35674: 0x6d288820, 0x35675: 0x6d288a20, 0x35676: 0x6d55ce20, 0x35677: 0x6d55d020, + 0x35678: 0x6d55d220, 0x35679: 0x6d55d420, 0x3567a: 0x6d55d620, 0x3567b: 0x6d813220, + 0x3567c: 0x6d813420, 0x3567d: 0x6d813620, 0x3567e: 0x6d813820, 0x3567f: 0x6d813a20, + // Block 0xd5a, offset 0x35680 + 0x35680: 0x6d813c20, 0x35681: 0x6d813e20, 0x35682: 0x6d814020, 0x35683: 0x6d814220, + 0x35684: 0x6d814420, 0x35685: 0x6d814620, 0x35686: 0x6d814820, 0x35687: 0x6d814a20, + 0x35688: 0x6d814c20, 0x35689: 0x6d814e20, 0x3568a: 0x6d815020, 0x3568b: 0x6d815220, + 0x3568c: 0x6da73820, 0x3568d: 0x6da73a20, 0x3568e: 0x6da73c20, 0x3568f: 0x6da73e20, + 0x35690: 0x6dc88020, 0x35691: 0x6dc88220, 0x35692: 0x6dc88420, 0x35693: 0x6dc88620, + 0x35694: 0x6dc88820, 0x35695: 0x6dc88a20, 0x35696: 0x6dc88c20, 0x35697: 0x6dc88e20, + 0x35698: 0x6de49220, 0x35699: 0x6de49420, 0x3569a: 0x6de49620, 0x3569b: 0x6de49820, + 0x3569c: 0x6de49a20, 0x3569d: 0x6de49c20, 0x3569e: 0x6dfbae20, 0x3569f: 0x6dfbb020, + 0x356a0: 0x6e0ee820, 0x356a1: 0x6e0eea20, 0x356a2: 0x6e298820, 0x356a3: 0x6e298a20, + 0x356a4: 0x6e298c20, 0x356a5: 0x6e298e20, 0x356a6: 0x6e329820, 0x356a7: 0x6e329a20, + 0x356a8: 0x6e329c20, 0x356a9: 0x6e38dc20, 0x356aa: 0x6e405620, 0x356ab: 0x6e405820, + 0x356ac: 0x6c04ba20, 0x356ad: 0x6c12d620, 0x356ae: 0x6c227a20, 0x356af: 0x6c381020, + 0x356b0: 0x6c381220, 0x356b1: 0x6c381420, 0x356b2: 0x6c381620, 0x356b3: 0x6c535420, + 0x356b4: 0x6c75ec20, 0x356b5: 0x6c9e4820, 0x356b6: 0x6c9e4a20, 0x356b7: 0x6c9e4c20, + 0x356b8: 0x6c9e4e20, 0x356b9: 0x6cf97e20, 0x356ba: 0x6d288c20, 0x356bb: 0x6d288e20, + 0x356bc: 0x6d289020, 0x356bd: 0x6d815420, 0x356be: 0x6d815620, 0x356bf: 0x6da74420, + // Block 0xd5b, offset 0x356c0 + 0x356c0: 0x6de49e20, 0x356c1: 0x6e1e2020, 0x356c2: 0x6c227e20, 0x356c3: 0x6c228020, + 0x356c4: 0x6c381820, 0x356c5: 0x6c381a20, 0x356c6: 0x6c381c20, 0x356c7: 0x6c381e20, + 0x356c8: 0x6c75f020, 0x356c9: 0x6c75f220, 0x356ca: 0x6c75f420, 0x356cb: 0x6c9e5020, + 0x356cc: 0x6c9e5220, 0x356cd: 0x6cf98020, 0x356ce: 0x6d289420, 0x356cf: 0x6d289620, + 0x356d0: 0x6d289820, 0x356d1: 0x6d289a20, 0x356d2: 0x6d55dc20, 0x356d3: 0x6d815820, + 0x356d4: 0x6d815a20, 0x356d5: 0x6da74820, 0x356d6: 0x6de4a020, 0x356d7: 0x6dfbb220, + 0x356d8: 0x6dfbb420, 0x356d9: 0x6e1e2220, 0x356da: 0x6e405a20, 0x356db: 0x6c04c020, + 0x356dc: 0x6c12dc20, 0x356dd: 0x6c12de20, 0x356de: 0x6c12e020, 0x356df: 0x6c12e220, + 0x356e0: 0x6c12e420, 0x356e1: 0x6c228620, 0x356e2: 0x6c228820, 0x356e3: 0x6c228a20, + 0x356e4: 0x6c228c20, 0x356e5: 0x6c228e20, 0x356e6: 0x6c229020, 0x356e7: 0x6c229220, + 0x356e8: 0x6c229420, 0x356e9: 0x6c382e20, 0x356ea: 0x6c383020, 0x356eb: 0x6c383220, + 0x356ec: 0x6c383420, 0x356ed: 0x6c383620, 0x356ee: 0x6c383820, 0x356ef: 0x6c383a20, + 0x356f0: 0x6c383c20, 0x356f1: 0x6c383e20, 0x356f2: 0x6c384020, 0x356f3: 0x6c384220, + 0x356f4: 0x6c384420, 0x356f5: 0x6c384620, 0x356f6: 0x6c384820, 0x356f7: 0x6c384a20, + 0x356f8: 0x6c536420, 0x356f9: 0x6c536620, 0x356fa: 0x6c536820, 0x356fb: 0x6c536a20, + 0x356fc: 0x6c536c20, 0x356fd: 0x6c536e20, 0x356fe: 0x6c537020, 0x356ff: 0x6c537220, + // Block 0xd5c, offset 0x35700 + 0x35700: 0x6c537420, 0x35701: 0x6c537620, 0x35702: 0x6c537820, 0x35703: 0x6c537a20, + 0x35704: 0x6c537c20, 0x35705: 0x6c537e20, 0x35706: 0x6c538020, 0x35707: 0x6c538220, + 0x35708: 0x6c538420, 0x35709: 0x6c538620, 0x3570a: 0x6c538820, 0x3570b: 0x6c538a20, + 0x3570c: 0x6c538c20, 0x3570d: 0x6c538e20, 0x3570e: 0x6c539020, 0x3570f: 0x6c539220, + 0x35710: 0x6c539420, 0x35711: 0x6c539620, 0x35712: 0x6c539820, 0x35713: 0x6c539a20, + 0x35714: 0x6c539c20, 0x35715: 0x6c539e20, 0x35716: 0x6c53a020, 0x35717: 0x6c53a220, + 0x35718: 0x6c53a420, 0x35719: 0x6c53a620, 0x3571a: 0x6c53a820, 0x3571b: 0x6c53aa20, + 0x3571c: 0x6c760a20, 0x3571d: 0x6c760c20, 0x3571e: 0x6c760e20, 0x3571f: 0x6c761020, + 0x35720: 0x6c761220, 0x35721: 0x6c761420, 0x35722: 0x6c761620, 0x35723: 0x6c761820, + 0x35724: 0x6c761a20, 0x35725: 0x6c761c20, 0x35726: 0x6c761e20, 0x35727: 0x6c762020, + 0x35728: 0x6c762220, 0x35729: 0x6c762420, 0x3572a: 0x6c762620, 0x3572b: 0x6c762820, + 0x3572c: 0x6c762a20, 0x3572d: 0x6c762c20, 0x3572e: 0x6c762e20, 0x3572f: 0x6c763020, + 0x35730: 0x6c763220, 0x35731: 0x6c9e6a20, 0x35732: 0x6c9e6c20, 0x35733: 0x6c9e6e20, + 0x35734: 0x6c9e7020, 0x35735: 0x6c9e7220, 0x35736: 0x6c9e7420, 0x35737: 0x6c9e7620, + 0x35738: 0x6c9e7820, 0x35739: 0x6c9e7a20, 0x3573a: 0x6c9e7c20, 0x3573b: 0x6c9e7e20, + 0x3573c: 0x6c9e8020, 0x3573d: 0x6c9e8220, 0x3573e: 0x6c9e8420, 0x3573f: 0x6c9e8620, + // Block 0xd5d, offset 0x35740 + 0x35740: 0x6c9e8820, 0x35741: 0x6c9e8a20, 0x35742: 0x6c9e8c20, 0x35743: 0x6c9e8e20, + 0x35744: 0x6c9e9020, 0x35745: 0x6c9e9220, 0x35746: 0x6c9e9420, 0x35747: 0x6c9e9620, + 0x35748: 0x6ccb8220, 0x35749: 0x6ccb8420, 0x3574a: 0x6ccb8620, 0x3574b: 0x6ccb8820, + 0x3574c: 0x6ccb8a20, 0x3574d: 0x6ccb8c20, 0x3574e: 0x6ccb8e20, 0x3574f: 0x6ccb9020, + 0x35750: 0x6ccb9220, 0x35751: 0x6ccb9420, 0x35752: 0x6ccb9620, 0x35753: 0x6ccb9820, + 0x35754: 0x6ccb9a20, 0x35755: 0x6ccb9c20, 0x35756: 0x6ccb9e20, 0x35757: 0x6ccba020, + 0x35758: 0x6ccba220, 0x35759: 0x6ccba420, 0x3575a: 0x6ccba620, 0x3575b: 0x6ccba820, + 0x3575c: 0x6ccbaa20, 0x3575d: 0x6ccbac20, 0x3575e: 0x6ccbae20, 0x3575f: 0x6ccbb020, + 0x35760: 0x6ccbb220, 0x35761: 0x6ccbb420, 0x35762: 0x6ccbb620, 0x35763: 0x6ccbb820, + 0x35764: 0x6ccbba20, 0x35765: 0x6ccbbc20, 0x35766: 0x6ccbbe20, 0x35767: 0x6ccbc020, + 0x35768: 0x6cf99a20, 0x35769: 0x6cf99c20, 0x3576a: 0x6cf99e20, 0x3576b: 0x6cf9a020, + 0x3576c: 0x6cf9a220, 0x3576d: 0x6cf9a420, 0x3576e: 0x6cf9a620, 0x3576f: 0x6cf9a820, + 0x35770: 0x6cf9aa20, 0x35771: 0x6cf9ac20, 0x35772: 0x6cf9ae20, 0x35773: 0x6cf9b020, + 0x35774: 0x6cf9b220, 0x35775: 0x6cf9b420, 0x35776: 0x6cf9b620, 0x35777: 0x6cf9b820, + 0x35778: 0x6cf9ba20, 0x35779: 0x6cf9bc20, 0x3577a: 0x6cf9be20, 0x3577b: 0x6cf9c020, + 0x3577c: 0x6cf9c220, 0x3577d: 0x6cf9c420, 0x3577e: 0x6cf9c620, 0x3577f: 0x6cf9c820, + // Block 0xd5e, offset 0x35780 + 0x35780: 0x6cf9ca20, 0x35781: 0x6cf9cc20, 0x35782: 0x6cf9ce20, 0x35783: 0x6cf9d020, + 0x35784: 0x6cf9d220, 0x35785: 0x6d28ac20, 0x35786: 0x6d28ae20, 0x35787: 0x6d28b020, + 0x35788: 0x6d28b220, 0x35789: 0x6d28b420, 0x3578a: 0x6d28b620, 0x3578b: 0x6d28b820, + 0x3578c: 0x6d28ba20, 0x3578d: 0x6d28bc20, 0x3578e: 0x6d28be20, 0x3578f: 0x6d28c020, + 0x35790: 0x6d28c220, 0x35791: 0x6d28c420, 0x35792: 0x6d28c620, 0x35793: 0x6d28c820, + 0x35794: 0x6d28ca20, 0x35795: 0x6d28cc20, 0x35796: 0x6d28ce20, 0x35797: 0x6d28d020, + 0x35798: 0x6d28d220, 0x35799: 0x6d28d420, 0x3579a: 0x6d28d620, 0x3579b: 0x6d28d820, + 0x3579c: 0x6d28da20, 0x3579d: 0x6d28dc20, 0x3579e: 0x6d28de20, 0x3579f: 0x6d28e020, + 0x357a0: 0x6d28e220, 0x357a1: 0x6d28e420, 0x357a2: 0x6d28e620, 0x357a3: 0x6d55e620, + 0x357a4: 0x6d55e820, 0x357a5: 0x6d55ea20, 0x357a6: 0x6d55ec20, 0x357a7: 0x6d55ee20, + 0x357a8: 0x6d55f020, 0x357a9: 0x6d55f220, 0x357aa: 0x6d55f420, 0x357ab: 0x6d55f620, + 0x357ac: 0x6d55f820, 0x357ad: 0x6d55fa20, 0x357ae: 0x6d55fc20, 0x357af: 0x6d55fe20, + 0x357b0: 0x6d560020, 0x357b1: 0x6d560220, 0x357b2: 0x6d560420, 0x357b3: 0x6d560620, + 0x357b4: 0x6d560820, 0x357b5: 0x6d560a20, 0x357b6: 0x6d560c20, 0x357b7: 0x6d560e20, + 0x357b8: 0x6d817020, 0x357b9: 0x6d817220, 0x357ba: 0x6d817420, 0x357bb: 0x6d817620, + 0x357bc: 0x6d817820, 0x357bd: 0x6d817a20, 0x357be: 0x6d817c20, 0x357bf: 0x6d817e20, + // Block 0xd5f, offset 0x357c0 + 0x357c0: 0x6d818020, 0x357c1: 0x6d818220, 0x357c2: 0x6d818420, 0x357c3: 0x6d818620, + 0x357c4: 0x6d818820, 0x357c5: 0x6d818a20, 0x357c6: 0x6d818c20, 0x357c7: 0x6d818e20, + 0x357c8: 0x6d819020, 0x357c9: 0x6d819220, 0x357ca: 0x6da75020, 0x357cb: 0x6da75220, + 0x357cc: 0x6da75420, 0x357cd: 0x6da75620, 0x357ce: 0x6da75820, 0x357cf: 0x6da75a20, + 0x357d0: 0x6da75c20, 0x357d1: 0x6da75e20, 0x357d2: 0x6da76020, 0x357d3: 0x6da76220, + 0x357d4: 0x6da76420, 0x357d5: 0x6da76620, 0x357d6: 0x6da76820, 0x357d7: 0x6da76a20, + 0x357d8: 0x6da76c20, 0x357d9: 0x6da76e20, 0x357da: 0x6dc89820, 0x357db: 0x6dc89a20, + 0x357dc: 0x6dc89c20, 0x357dd: 0x6dc89e20, 0x357de: 0x6dc8a020, 0x357df: 0x6dc8a220, + 0x357e0: 0x6dc8a420, 0x357e1: 0x6dc8a620, 0x357e2: 0x6dc8a820, 0x357e3: 0x6dc8aa20, + 0x357e4: 0x6dc8ac20, 0x357e5: 0x6dc8ae20, 0x357e6: 0x6dc8b020, 0x357e7: 0x6dc8b220, + 0x357e8: 0x6dc8b420, 0x357e9: 0x6dc8b620, 0x357ea: 0x6dc8b820, 0x357eb: 0x6de4a620, + 0x357ec: 0x6de4a820, 0x357ed: 0x6de4aa20, 0x357ee: 0x6de4ac20, 0x357ef: 0x6de4ae20, + 0x357f0: 0x6de4b020, 0x357f1: 0x6dfbb820, 0x357f2: 0x6dfbba20, 0x357f3: 0x6dfbbc20, + 0x357f4: 0x6dfbbe20, 0x357f5: 0x6dfbc020, 0x357f6: 0x6e0eec20, 0x357f7: 0x6e0eee20, + 0x357f8: 0x6e0ef020, 0x357f9: 0x6e0ef220, 0x357fa: 0x6e0ef420, 0x357fb: 0x6e1e2620, + 0x357fc: 0x6e1e2820, 0x357fd: 0x6e1e2a20, 0x357fe: 0x6e1e2c20, 0x357ff: 0x6e299020, + // Block 0xd60, offset 0x35800 + 0x35800: 0x6e299220, 0x35801: 0x6e299420, 0x35802: 0x6e3d4c20, 0x35803: 0x6e3d4e20, + 0x35804: 0x6e42b020, 0x35805: 0x6c385220, 0x35806: 0x6c385420, 0x35807: 0x6c53b020, + 0x35808: 0x6c53b220, 0x35809: 0x6c53b420, 0x3580a: 0x6c53b620, 0x3580b: 0x6c9e9820, + 0x3580c: 0x6c9e9a20, 0x3580d: 0x6c9e9c20, 0x3580e: 0x6c9e9e20, 0x3580f: 0x6cf9d620, + 0x35810: 0x6d28ea20, 0x35811: 0x6d819420, 0x35812: 0x6da77020, 0x35813: 0x6dc8bc20, + 0x35814: 0x6dc8be20, 0x35815: 0x6c12f020, 0x35816: 0x6c12f220, 0x35817: 0x6c229a20, + 0x35818: 0x6c229c20, 0x35819: 0x6c385e20, 0x3581a: 0x6c386020, 0x3581b: 0x6c386220, + 0x3581c: 0x6c53c220, 0x3581d: 0x6c53c420, 0x3581e: 0x6c53c620, 0x3581f: 0x6c53c820, + 0x35820: 0x6c53ca20, 0x35821: 0x6c764820, 0x35822: 0x6ccbd020, 0x35823: 0x6c9ea620, + 0x35824: 0x6ccbd220, 0x35825: 0x6ccbd420, 0x35826: 0x6cf9da20, 0x35827: 0x6cf9dc20, + 0x35828: 0x6cf9de20, 0x35829: 0x6d28f020, 0x3582a: 0x6d561420, 0x3582b: 0x6d561620, + 0x3582c: 0x6da77220, 0x3582d: 0x6da77420, 0x3582e: 0x6dc8c020, 0x3582f: 0x6e0ef620, + 0x35830: 0x6e0ef820, 0x35831: 0x6c01fc20, 0x35832: 0x6c04ca20, 0x35833: 0x6c04cc20, + 0x35834: 0x6c04ce20, 0x35835: 0x6c09b220, 0x35836: 0x6c09b420, 0x35837: 0x6c09b620, + 0x35838: 0x6c09b820, 0x35839: 0x6c09ba20, 0x3583a: 0x6c09bc20, 0x3583b: 0x6c09be20, + 0x3583c: 0x6c09c020, 0x3583d: 0x6c09c220, 0x3583e: 0x6c09c420, 0x3583f: 0x6c09c620, + // Block 0xd61, offset 0x35840 + 0x35840: 0x6c133020, 0x35841: 0x6c133220, 0x35842: 0x6c133420, 0x35843: 0x6c133620, + 0x35844: 0x6c133820, 0x35845: 0x6c133a20, 0x35846: 0x6c133c20, 0x35847: 0x6c133e20, + 0x35848: 0x6c134020, 0x35849: 0x6c134220, 0x3584a: 0x6c134420, 0x3584b: 0x6c134620, + 0x3584c: 0x6c134820, 0x3584d: 0x6c134a20, 0x3584e: 0x6c233a20, 0x3584f: 0x6c233c20, + 0x35850: 0x6c233e20, 0x35851: 0x6c234020, 0x35852: 0x6c234220, 0x35853: 0x6c234420, + 0x35854: 0x6c234620, 0x35855: 0x6c234820, 0x35856: 0x6c234a20, 0x35857: 0x6c234c20, + 0x35858: 0x6c234e20, 0x35859: 0x6c235020, 0x3585a: 0x6c235220, 0x3585b: 0x6c235420, + 0x3585c: 0x6c235620, 0x3585d: 0x6c235820, 0x3585e: 0x6c235a20, 0x3585f: 0x6c235c20, + 0x35860: 0x6c235e20, 0x35861: 0x6c236020, 0x35862: 0x6c236220, 0x35863: 0x6c236420, + 0x35864: 0x6c236620, 0x35865: 0x6c236820, 0x35866: 0x6c236a20, 0x35867: 0x6c236c20, + 0x35868: 0x6c236e20, 0x35869: 0x6c237020, 0x3586a: 0x6c237220, 0x3586b: 0x6c237420, + 0x3586c: 0x6c237620, 0x3586d: 0x6c237820, 0x3586e: 0x6c237a20, 0x3586f: 0x6c237c20, + 0x35870: 0x6c237e20, 0x35871: 0x6c238020, 0x35872: 0x6c392020, 0x35873: 0x6c392220, + 0x35874: 0x6c392420, 0x35875: 0x6c392620, 0x35876: 0x6c392820, 0x35877: 0x6c392a20, + 0x35878: 0x6c392c20, 0x35879: 0x6c392e20, 0x3587a: 0x6c393020, 0x3587b: 0x6c393220, + 0x3587c: 0x6c393420, 0x3587d: 0x6c393620, 0x3587e: 0x6c393820, 0x3587f: 0x6c393a20, + // Block 0xd62, offset 0x35880 + 0x35880: 0x6c393c20, 0x35881: 0x6c393e20, 0x35882: 0x6c394020, 0x35883: 0x6c394220, + 0x35884: 0x6c394420, 0x35885: 0x6c394620, 0x35886: 0x6c394820, 0x35887: 0x6c394a20, + 0x35888: 0x6c394c20, 0x35889: 0x6c394e20, 0x3588a: 0x6c395020, 0x3588b: 0x6c395220, + 0x3588c: 0x6c395420, 0x3588d: 0x6c395620, 0x3588e: 0x6c395820, 0x3588f: 0x6c395a20, + 0x35890: 0x6c395c20, 0x35891: 0x6c395e20, 0x35892: 0x6c396020, 0x35893: 0x6c396220, + 0x35894: 0x6c396420, 0x35895: 0x6c396620, 0x35896: 0x6c396820, 0x35897: 0x6c396a20, + 0x35898: 0x6c396c20, 0x35899: 0x6c396e20, 0x3589a: 0x6c397020, 0x3589b: 0x6c397220, + 0x3589c: 0x6c397420, 0x3589d: 0x6c397620, 0x3589e: 0x6c397820, 0x3589f: 0x6c397a20, + 0x358a0: 0x6c397c20, 0x358a1: 0x6c397e20, 0x358a2: 0x6c398020, 0x358a3: 0x6c398220, + 0x358a4: 0x6c549620, 0x358a5: 0x6c549820, 0x358a6: 0x6c549a20, 0x358a7: 0x6c549c20, + 0x358a8: 0x6c549e20, 0x358a9: 0x6c54a020, 0x358aa: 0x6c54a220, 0x358ab: 0x6c54a420, + 0x358ac: 0x6c54a620, 0x358ad: 0x6c54a820, 0x358ae: 0x6c54aa20, 0x358af: 0x6c54ac20, + 0x358b0: 0x6c54ae20, 0x358b1: 0x6c54b020, 0x358b2: 0x6c54b220, 0x358b3: 0x6c54b420, + 0x358b4: 0x6c54b620, 0x358b5: 0x6c54b820, 0x358b6: 0x6c54ba20, 0x358b7: 0x6c54bc20, + 0x358b8: 0x6c54be20, 0x358b9: 0x6c54c020, 0x358ba: 0x6c54c220, 0x358bb: 0x6c54c420, + 0x358bc: 0x6c54c620, 0x358bd: 0x6c54c820, 0x358be: 0x6c54ca20, 0x358bf: 0x6c54cc20, + // Block 0xd63, offset 0x358c0 + 0x358c0: 0x6c54ce20, 0x358c1: 0x6c54d020, 0x358c2: 0x6c54d220, 0x358c3: 0x6c54d420, + 0x358c4: 0x6c54d620, 0x358c5: 0x6c54d820, 0x358c6: 0x6c54da20, 0x358c7: 0x6c54dc20, + 0x358c8: 0x6c54de20, 0x358c9: 0x6c54e020, 0x358ca: 0x6c54e220, 0x358cb: 0x6c54e420, + 0x358cc: 0x6c54e620, 0x358cd: 0x6c54e820, 0x358ce: 0x6c54ea20, 0x358cf: 0x6c54ec20, + 0x358d0: 0x6c54ee20, 0x358d1: 0x6c54f020, 0x358d2: 0x6c54f220, 0x358d3: 0x6c54f420, + 0x358d4: 0x6c54f620, 0x358d5: 0x6c54f820, 0x358d6: 0x6c54fa20, 0x358d7: 0x6c54fc20, + 0x358d8: 0x6c54fe20, 0x358d9: 0x6c550020, 0x358da: 0x6c550220, 0x358db: 0x6c550420, + 0x358dc: 0x6c550620, 0x358dd: 0x6c550820, 0x358de: 0x6c771820, 0x358df: 0x6c771a20, + 0x358e0: 0x6c771c20, 0x358e1: 0x6c771e20, 0x358e2: 0x6c772020, 0x358e3: 0x6c772220, + 0x358e4: 0x6c772420, 0x358e5: 0x6c772620, 0x358e6: 0x6c772820, 0x358e7: 0x6c772a20, + 0x358e8: 0x6c772c20, 0x358e9: 0x6c772e20, 0x358ea: 0x6c773020, 0x358eb: 0x6c773220, + 0x358ec: 0x6c773420, 0x358ed: 0x6c773620, 0x358ee: 0x6c773820, 0x358ef: 0x6c773a20, + 0x358f0: 0x6c773c20, 0x358f1: 0x6c773e20, 0x358f2: 0x6c774020, 0x358f3: 0x6c774220, + 0x358f4: 0x6c774420, 0x358f5: 0x6c774620, 0x358f6: 0x6c774820, 0x358f7: 0x6c774a20, + 0x358f8: 0x6c774c20, 0x358f9: 0x6c774e20, 0x358fa: 0x6c775020, 0x358fb: 0x6c775220, + 0x358fc: 0x6c775420, 0x358fd: 0x6c775620, 0x358fe: 0x6c775820, 0x358ff: 0x6c775a20, + // Block 0xd64, offset 0x35900 + 0x35900: 0x6c775c20, 0x35901: 0x6c775e20, 0x35902: 0x6c776020, 0x35903: 0x6c776220, + 0x35904: 0x6c776420, 0x35905: 0x6c776620, 0x35906: 0x6c776820, 0x35907: 0x6c776a20, + 0x35908: 0x6c776c20, 0x35909: 0x6c776e20, 0x3590a: 0x6c777020, 0x3590b: 0x6c777220, + 0x3590c: 0x6c777420, 0x3590d: 0x6c777620, 0x3590e: 0x6c777820, 0x3590f: 0x6c777a20, + 0x35910: 0x6c777c20, 0x35911: 0x6c777e20, 0x35912: 0x6c778020, 0x35913: 0x6c778220, + 0x35914: 0x6c778420, 0x35915: 0x6c778620, 0x35916: 0x6c778820, 0x35917: 0x6c778a20, + 0x35918: 0x6c778c20, 0x35919: 0x6c778e20, 0x3591a: 0x6c779020, 0x3591b: 0x6c779220, + 0x3591c: 0x6c779420, 0x3591d: 0x6c779620, 0x3591e: 0x6c779820, 0x3591f: 0x6c779a20, + 0x35920: 0x6c779c20, 0x35921: 0x6c779e20, 0x35922: 0x6c77a020, 0x35923: 0x6c77a220, + 0x35924: 0x6c77a420, 0x35925: 0x6c77a620, 0x35926: 0x6c77a820, 0x35927: 0x6c77aa20, + 0x35928: 0x6c77ac20, 0x35929: 0x6c77ae20, 0x3592a: 0x6c77b020, 0x3592b: 0x6c77b220, + 0x3592c: 0x6c77b420, 0x3592d: 0x6c77b620, 0x3592e: 0x6c77b820, 0x3592f: 0x6c77ba20, + 0x35930: 0x6c77bc20, 0x35931: 0x6c77be20, 0x35932: 0x6c77c020, 0x35933: 0x6c77c220, + 0x35934: 0x6c77c420, 0x35935: 0x6c77c620, 0x35936: 0x6c77c820, 0x35937: 0x6c9fbc20, + 0x35938: 0x6c9fbe20, 0x35939: 0x6c9fc020, 0x3593a: 0x6c9fc220, 0x3593b: 0x6c9fc420, + 0x3593c: 0x6c9fc620, 0x3593d: 0x6c9fc820, 0x3593e: 0x6c9fca20, 0x3593f: 0x6c9fcc20, + // Block 0xd65, offset 0x35940 + 0x35940: 0x6c9fce20, 0x35941: 0x6c9fd020, 0x35942: 0x6c9fd220, 0x35943: 0x6c9fd420, + 0x35944: 0x6c9fd620, 0x35945: 0x6c9fd820, 0x35946: 0x6c9fda20, 0x35947: 0x6c9fdc20, + 0x35948: 0x6c9fde20, 0x35949: 0x6c9fe020, 0x3594a: 0x6c9fe220, 0x3594b: 0x6c9fe420, + 0x3594c: 0x6c9fe620, 0x3594d: 0x6c9fe820, 0x3594e: 0x6c9fea20, 0x3594f: 0x6c9fec20, + 0x35950: 0x6c9fee20, 0x35951: 0x6c9ff020, 0x35952: 0x6c9ff220, 0x35953: 0x6c9ff420, + 0x35954: 0x6c9ff620, 0x35955: 0x6c9ff820, 0x35956: 0x6c9ffa20, 0x35957: 0x6c9ffc20, + 0x35958: 0x6c9ffe20, 0x35959: 0x6ca00020, 0x3595a: 0x6ca00220, 0x3595b: 0x6ca00420, + 0x3595c: 0x6ca00620, 0x3595d: 0x6ca00820, 0x3595e: 0x6ca00a20, 0x3595f: 0x6ca00c20, + 0x35960: 0x6ca00e20, 0x35961: 0x6ca01020, 0x35962: 0x6ca01220, 0x35963: 0x6ca01420, + 0x35964: 0x6ca01620, 0x35965: 0x6ca01820, 0x35966: 0x6ca01a20, 0x35967: 0x6ca01c20, + 0x35968: 0x6ca01e20, 0x35969: 0x6ca02020, 0x3596a: 0x6ca02220, 0x3596b: 0x6ca02420, + 0x3596c: 0x6ca02620, 0x3596d: 0x6ca02820, 0x3596e: 0x6ca02a20, 0x3596f: 0x6ca02c20, + 0x35970: 0x6ca02e20, 0x35971: 0x6ca03020, 0x35972: 0x6ca03220, 0x35973: 0x6ca03420, + 0x35974: 0x6ca03620, 0x35975: 0x6ca03820, 0x35976: 0x6ca03a20, 0x35977: 0x6ca03c20, + 0x35978: 0x6ca03e20, 0x35979: 0x6ca04020, 0x3597a: 0x6ca04220, 0x3597b: 0x6ca04420, + 0x3597c: 0x6ca04620, 0x3597d: 0x6ca04820, 0x3597e: 0x6ca04a20, 0x3597f: 0x6ca04c20, + // Block 0xd66, offset 0x35980 + 0x35980: 0x6ca04e20, 0x35981: 0x6ca05020, 0x35982: 0x6ca05220, 0x35983: 0x6ca05420, + 0x35984: 0x6ca05620, 0x35985: 0x6ca05820, 0x35986: 0x6ca05a20, 0x35987: 0x6ca05c20, + 0x35988: 0x6ca05e20, 0x35989: 0x6ca06020, 0x3598a: 0x6ca06220, 0x3598b: 0x6ca06420, + 0x3598c: 0x6ca06620, 0x3598d: 0x6ca06820, 0x3598e: 0x6ca06a20, 0x3598f: 0x6ca06c20, + 0x35990: 0x6ca06e20, 0x35991: 0x6ca07020, 0x35992: 0x6ca07220, 0x35993: 0x6ca07420, + 0x35994: 0x6ca07620, 0x35995: 0x6ca07820, 0x35996: 0x6ca07a20, 0x35997: 0x6ca07c20, + 0x35998: 0x6ca07e20, 0x35999: 0x6ca08020, 0x3599a: 0x6c77ca20, 0x3599b: 0x6ca08220, + 0x3599c: 0x6ca08420, 0x3599d: 0x6ca08620, 0x3599e: 0x6ca08820, 0x3599f: 0x6ca08a20, + 0x359a0: 0x6ca08c20, 0x359a1: 0x6ca08e20, 0x359a2: 0x6ca09020, 0x359a3: 0x6ca09220, + 0x359a4: 0x6ca09420, 0x359a5: 0x6ca09620, 0x359a6: 0x6ca09820, 0x359a7: 0x6ca09a20, + 0x359a8: 0x6ca09c20, 0x359a9: 0x6ca09e20, 0x359aa: 0x6ca0a020, 0x359ab: 0x6ca0a220, + 0x359ac: 0x6ca0a420, 0x359ad: 0x6ca0a620, 0x359ae: 0x6ca0a820, 0x359af: 0x6ca0aa20, + 0x359b0: 0x6ca0ac20, 0x359b1: 0x6ca0ae20, 0x359b2: 0x6ca0b020, 0x359b3: 0x6ca0b220, + 0x359b4: 0x6ca0b420, 0x359b5: 0x6ca0b620, 0x359b6: 0x6ca0b820, 0x359b7: 0x6ca0ba20, + 0x359b8: 0x6ca0bc20, 0x359b9: 0x6ca0be20, 0x359ba: 0x6ca0c020, 0x359bb: 0x6ca0c220, + 0x359bc: 0x6cccf620, 0x359bd: 0x6cccf820, 0x359be: 0x6cccfa20, 0x359bf: 0x6cccfc20, + // Block 0xd67, offset 0x359c0 + 0x359c0: 0x6cccfe20, 0x359c1: 0x6ccd0020, 0x359c2: 0x6ccd0220, 0x359c3: 0x6ccd0420, + 0x359c4: 0x6ccd0620, 0x359c5: 0x6ccd0820, 0x359c6: 0x6ccd0a20, 0x359c7: 0x6ccd0c20, + 0x359c8: 0x6ccd0e20, 0x359c9: 0x6ccd1020, 0x359ca: 0x6ca0c420, 0x359cb: 0x6ccd1220, + 0x359cc: 0x6ccd1420, 0x359cd: 0x6ccd1620, 0x359ce: 0x6ccd1820, 0x359cf: 0x6ccd1a20, + 0x359d0: 0x6ccd1c20, 0x359d1: 0x6ccd1e20, 0x359d2: 0x6ccd2020, 0x359d3: 0x6ccd2220, + 0x359d4: 0x6ccd2420, 0x359d5: 0x6ccd2620, 0x359d6: 0x6ccd2820, 0x359d7: 0x6ccd2a20, + 0x359d8: 0x6ccd2c20, 0x359d9: 0x6ccd2e20, 0x359da: 0x6ccd3020, 0x359db: 0x6ccd3220, + 0x359dc: 0x6ccd3420, 0x359dd: 0x6ccd3620, 0x359de: 0x6ccd3820, 0x359df: 0x6ccd3a20, + 0x359e0: 0x6ccd3c20, 0x359e1: 0x6ccd3e20, 0x359e2: 0x6ccd4020, 0x359e3: 0x6ccd4220, + 0x359e4: 0x6ccd4420, 0x359e5: 0x6ccd4620, 0x359e6: 0x6ccd4820, 0x359e7: 0x6ccd4a20, + 0x359e8: 0x6ccd4c20, 0x359e9: 0x6ccd4e20, 0x359ea: 0x6ccd5020, 0x359eb: 0x6ccd5220, + 0x359ec: 0x6ccd5420, 0x359ed: 0x6ccd5620, 0x359ee: 0x6ccd5820, 0x359ef: 0x6ccd5a20, + 0x359f0: 0x6ccd5c20, 0x359f1: 0x6ccd5e20, 0x359f2: 0x6ccd6020, 0x359f3: 0x6ccd6220, + 0x359f4: 0x6ccd6420, 0x359f5: 0x6ccd6620, 0x359f6: 0x6ccd6820, 0x359f7: 0x6ccd6a20, + 0x359f8: 0x6ccd6c20, 0x359f9: 0x6ccd6e20, 0x359fa: 0x6ccd7020, 0x359fb: 0x6ccd7220, + 0x359fc: 0x6ccd7420, 0x359fd: 0x6ccd7620, 0x359fe: 0x6ccd7820, 0x359ff: 0x6ccd7a20, + // Block 0xd68, offset 0x35a00 + 0x35a00: 0x6ccd7c20, 0x35a01: 0x6ccd7e20, 0x35a02: 0x6ccd8020, 0x35a03: 0x6ccd8220, + 0x35a04: 0x6ccd8420, 0x35a05: 0x6ccd8620, 0x35a06: 0x6ccd8820, 0x35a07: 0x6ccd8a20, + 0x35a08: 0x6ccd8c20, 0x35a09: 0x6ccd8e20, 0x35a0a: 0x6ccd9020, 0x35a0b: 0x6ccd9220, + 0x35a0c: 0x6ccd9420, 0x35a0d: 0x6ccd9620, 0x35a0e: 0x6ccd9820, 0x35a0f: 0x6ccd9a20, + 0x35a10: 0x6ccd9c20, 0x35a11: 0x6ccd9e20, 0x35a12: 0x6ccda020, 0x35a13: 0x6ccda220, + 0x35a14: 0x6ccda420, 0x35a15: 0x6ccda620, 0x35a16: 0x6ccda820, 0x35a17: 0x6ccdaa20, + 0x35a18: 0x6ccdac20, 0x35a19: 0x6ccdae20, 0x35a1a: 0x6ccdb020, 0x35a1b: 0x6ccdb220, + 0x35a1c: 0x6ccdb420, 0x35a1d: 0x6cfac420, 0x35a1e: 0x6cfac620, 0x35a1f: 0x6cfac820, + 0x35a20: 0x6cfaca20, 0x35a21: 0x6cfacc20, 0x35a22: 0x6cface20, 0x35a23: 0x6cfad020, + 0x35a24: 0x6cfad220, 0x35a25: 0x6cfad420, 0x35a26: 0x6cfad620, 0x35a27: 0x6cfad820, + 0x35a28: 0x6cfada20, 0x35a29: 0x6cfadc20, 0x35a2a: 0x6cfade20, 0x35a2b: 0x6cfae020, + 0x35a2c: 0x6cfae220, 0x35a2d: 0x6cfae420, 0x35a2e: 0x6cfae620, 0x35a2f: 0x6cfae820, + 0x35a30: 0x6cfaea20, 0x35a31: 0x6cfaec20, 0x35a32: 0x6cfaee20, 0x35a33: 0x6cfaf020, + 0x35a34: 0x6cfaf220, 0x35a35: 0x6cfaf420, 0x35a36: 0x6cfaf620, 0x35a37: 0x6cfaf820, + 0x35a38: 0x6cfafa20, 0x35a39: 0x6cfafc20, 0x35a3a: 0x6cfafe20, 0x35a3b: 0x6cfb0020, + 0x35a3c: 0x6cfb0220, 0x35a3d: 0x6cfb0420, 0x35a3e: 0x6cfb0620, 0x35a3f: 0x6cfb0820, + // Block 0xd69, offset 0x35a40 + 0x35a40: 0x6cfb0a20, 0x35a41: 0x6cfb0c20, 0x35a42: 0x6cfb0e20, 0x35a43: 0x6cfb1020, + 0x35a44: 0x6cfb1220, 0x35a45: 0x6cfb1420, 0x35a46: 0x6cfb1620, 0x35a47: 0x6cfb1820, + 0x35a48: 0x6cfb1a20, 0x35a49: 0x6cfb1c20, 0x35a4a: 0x6cfb1e20, 0x35a4b: 0x6cfb2020, + 0x35a4c: 0x6cfb2220, 0x35a4d: 0x6cfb2420, 0x35a4e: 0x6cfb2620, 0x35a4f: 0x6cfb2820, + 0x35a50: 0x6cfb2a20, 0x35a51: 0x6cfb2c20, 0x35a52: 0x6cfb2e20, 0x35a53: 0x6cfb3020, + 0x35a54: 0x6cfb3220, 0x35a55: 0x6cfb3420, 0x35a56: 0x6cfb3620, 0x35a57: 0x6cfb3820, + 0x35a58: 0x6cfb3a20, 0x35a59: 0x6cfb3c20, 0x35a5a: 0x6cfb3e20, 0x35a5b: 0x6cfb4020, + 0x35a5c: 0x6cfb4220, 0x35a5d: 0x6cfb4420, 0x35a5e: 0x6cfb4620, 0x35a5f: 0x6cfb4820, + 0x35a60: 0x6cfb4a20, 0x35a61: 0x6cfb4c20, 0x35a62: 0x6cfb4e20, 0x35a63: 0x6cfb5020, + 0x35a64: 0x6cfb5220, 0x35a65: 0x6cfb5420, 0x35a66: 0x6cfb5620, 0x35a67: 0x6cfb5820, + 0x35a68: 0x6cfb5a20, 0x35a69: 0x6cfb5c20, 0x35a6a: 0x6cfb5e20, 0x35a6b: 0x6cfb6020, + 0x35a6c: 0x6cfb6220, 0x35a6d: 0x6cfb6420, 0x35a6e: 0x6cfb6620, 0x35a6f: 0x6cfb6820, + 0x35a70: 0x6cfb6a20, 0x35a71: 0x6cfb6c20, 0x35a72: 0x6cfb6e20, 0x35a73: 0x6cfb7020, + 0x35a74: 0x6cfb7220, 0x35a75: 0x6cfb7420, 0x35a76: 0x6cfb7620, 0x35a77: 0x6cfb7820, + 0x35a78: 0x6cfb7a20, 0x35a79: 0x6cfb7c20, 0x35a7a: 0x6cfb7e20, 0x35a7b: 0x6cfb8020, + 0x35a7c: 0x6cfb8220, 0x35a7d: 0x6cfb8420, 0x35a7e: 0x6cfb8620, 0x35a7f: 0x6cfb8820, + // Block 0xd6a, offset 0x35a80 + 0x35a80: 0x6cfb8a20, 0x35a81: 0x6cfb8c20, 0x35a82: 0x6cfb8e20, 0x35a83: 0x6cfb9020, + 0x35a84: 0x6cfb9220, 0x35a85: 0x6cfb9420, 0x35a86: 0x6cfb9620, 0x35a87: 0x6cfb9820, + 0x35a88: 0x6cfb9a20, 0x35a89: 0x6cfb9c20, 0x35a8a: 0x6cfb9e20, 0x35a8b: 0x6cfba020, + 0x35a8c: 0x6cfba220, 0x35a8d: 0x6d29ca20, 0x35a8e: 0x6d29cc20, 0x35a8f: 0x6d29ce20, + 0x35a90: 0x6d29d020, 0x35a91: 0x6d29d220, 0x35a92: 0x6d29d420, 0x35a93: 0x6d29d620, + 0x35a94: 0x6d29d820, 0x35a95: 0x6d29da20, 0x35a96: 0x6d29dc20, 0x35a97: 0x6d29de20, + 0x35a98: 0x6d29e020, 0x35a99: 0x6d29e220, 0x35a9a: 0x6d29e420, 0x35a9b: 0x6d29e620, + 0x35a9c: 0x6d29e820, 0x35a9d: 0x6d29ea20, 0x35a9e: 0x6d29ec20, 0x35a9f: 0x6d29ee20, + 0x35aa0: 0x6d29f020, 0x35aa1: 0x6d29f220, 0x35aa2: 0x6d29f420, 0x35aa3: 0x6d29f620, + 0x35aa4: 0x6d29f820, 0x35aa5: 0x6d29fa20, 0x35aa6: 0x6d29fc20, 0x35aa7: 0x6d29fe20, + 0x35aa8: 0x6d2a0020, 0x35aa9: 0x6d2a0220, 0x35aaa: 0x6d2a0420, 0x35aab: 0x6d2a0620, + 0x35aac: 0x6d2a0820, 0x35aad: 0x6d2a0a20, 0x35aae: 0x6d2a0c20, 0x35aaf: 0x6d2a0e20, + 0x35ab0: 0x6d2a1020, 0x35ab1: 0x6d2a1220, 0x35ab2: 0x6d2a1420, 0x35ab3: 0x6d2a1620, + 0x35ab4: 0x6d56e220, 0x35ab5: 0x6d2a1820, 0x35ab6: 0x6d2a1a20, 0x35ab7: 0x6d2a1c20, + 0x35ab8: 0x6d2a1e20, 0x35ab9: 0x6d2a2020, 0x35aba: 0x6d2a2220, 0x35abb: 0x6d2a2420, + 0x35abc: 0x6d2a2620, 0x35abd: 0x6d2a2820, 0x35abe: 0x6d2a2a20, 0x35abf: 0x6d2a2c20, + // Block 0xd6b, offset 0x35ac0 + 0x35ac0: 0x6d2a2e20, 0x35ac1: 0x6d2a3020, 0x35ac2: 0x6d2a3220, 0x35ac3: 0x6d2a3420, + 0x35ac4: 0x6d2a3620, 0x35ac5: 0x6d2a3820, 0x35ac6: 0x6d2a3a20, 0x35ac7: 0x6d2a3c20, + 0x35ac8: 0x6d2a3e20, 0x35ac9: 0x6d2a4020, 0x35aca: 0x6d2a4220, 0x35acb: 0x6d2a4420, + 0x35acc: 0x6d2a4620, 0x35acd: 0x6d2a4820, 0x35ace: 0x6d2a4a20, 0x35acf: 0x6d2a4c20, + 0x35ad0: 0x6d2a4e20, 0x35ad1: 0x6d2a5020, 0x35ad2: 0x6d2a5220, 0x35ad3: 0x6d2a5420, + 0x35ad4: 0x6d2a5620, 0x35ad5: 0x6d2a5820, 0x35ad6: 0x6d2a5a20, 0x35ad7: 0x6d2a5c20, + 0x35ad8: 0x6d2a5e20, 0x35ad9: 0x6d4f2420, 0x35ada: 0x6d2a6020, 0x35adb: 0x6d2a6220, + 0x35adc: 0x6d2a6420, 0x35add: 0x6d2a6620, 0x35ade: 0x6d2a6820, 0x35adf: 0x6d2a6a20, + 0x35ae0: 0x6d2a6c20, 0x35ae1: 0x6d2a6e20, 0x35ae2: 0x6d2a7020, 0x35ae3: 0x6d2a7220, + 0x35ae4: 0x6d2a7420, 0x35ae5: 0x6d2a7620, 0x35ae6: 0x6d2a7820, 0x35ae7: 0x6d2a7a20, + 0x35ae8: 0x6d2a7c20, 0x35ae9: 0x6d2a7e20, 0x35aea: 0x6d2a8020, 0x35aeb: 0x6d2a8220, + 0x35aec: 0x6d2a8420, 0x35aed: 0x6d2a8620, 0x35aee: 0x6d2a8820, 0x35aef: 0x6d2a8a20, + 0x35af0: 0x6d2a8c20, 0x35af1: 0x6d2a8e20, 0x35af2: 0x6d2a9020, 0x35af3: 0x6d2a9220, + 0x35af4: 0x6d2a9420, 0x35af5: 0x6d2a9620, 0x35af6: 0x6d2a9820, 0x35af7: 0x6d2a9a20, + 0x35af8: 0x6d2a9c20, 0x35af9: 0x6d2a9e20, 0x35afa: 0x6d2aa020, 0x35afb: 0x6d2aa220, + 0x35afc: 0x6d2aa420, 0x35afd: 0x6d2aa620, 0x35afe: 0x6d2aa820, 0x35aff: 0x6d2aaa20, + // Block 0xd6c, offset 0x35b00 + 0x35b00: 0x6d2aac20, 0x35b01: 0x6d2aae20, 0x35b02: 0x6d2ab020, 0x35b03: 0x6d56e420, + 0x35b04: 0x6d56e620, 0x35b05: 0x6d56e820, 0x35b06: 0x6d56ea20, 0x35b07: 0x6d56ec20, + 0x35b08: 0x6d56ee20, 0x35b09: 0x6d56f020, 0x35b0a: 0x6d56f220, 0x35b0b: 0x6d56f420, + 0x35b0c: 0x6d56f620, 0x35b0d: 0x6d56f820, 0x35b0e: 0x6d56fa20, 0x35b0f: 0x6d56fc20, + 0x35b10: 0x6d56fe20, 0x35b11: 0x6d570020, 0x35b12: 0x6d570220, 0x35b13: 0x6d570420, + 0x35b14: 0x6d570620, 0x35b15: 0x6d570820, 0x35b16: 0x6d570a20, 0x35b17: 0x6d570c20, + 0x35b18: 0x6d570e20, 0x35b19: 0x6d571020, 0x35b1a: 0x6d571220, 0x35b1b: 0x6d571420, + 0x35b1c: 0x6d571620, 0x35b1d: 0x6d571820, 0x35b1e: 0x6d571a20, 0x35b1f: 0x6d571c20, + 0x35b20: 0x6d571e20, 0x35b21: 0x6d572020, 0x35b22: 0x6d572220, 0x35b23: 0x6d572420, + 0x35b24: 0x6d572620, 0x35b25: 0x6d572820, 0x35b26: 0x6d572a20, 0x35b27: 0x6d572c20, + 0x35b28: 0x6d572e20, 0x35b29: 0x6d573020, 0x35b2a: 0x6d573220, 0x35b2b: 0x6d573420, + 0x35b2c: 0x6d573620, 0x35b2d: 0x6d573820, 0x35b2e: 0x6d573a20, 0x35b2f: 0x6d573c20, + 0x35b30: 0x6d573e20, 0x35b31: 0x6d574020, 0x35b32: 0x6d574220, 0x35b33: 0x6d574420, + 0x35b34: 0x6d574620, 0x35b35: 0x6d574820, 0x35b36: 0x6d574a20, 0x35b37: 0x6d574c20, + 0x35b38: 0x6d574e20, 0x35b39: 0x6d575020, 0x35b3a: 0x6d575220, 0x35b3b: 0x6d575420, + 0x35b3c: 0x6d575620, 0x35b3d: 0x6d575820, 0x35b3e: 0x6d575a20, 0x35b3f: 0x6d575c20, + // Block 0xd6d, offset 0x35b40 + 0x35b40: 0x6d575e20, 0x35b41: 0x6d576020, 0x35b42: 0x6d576220, 0x35b43: 0x6d576420, + 0x35b44: 0x6d576620, 0x35b45: 0x6d576820, 0x35b46: 0x6d576a20, 0x35b47: 0x6d576c20, + 0x35b48: 0x6d576e20, 0x35b49: 0x6d577020, 0x35b4a: 0x6d577220, 0x35b4b: 0x6d577420, + 0x35b4c: 0x6d577620, 0x35b4d: 0x6d577820, 0x35b4e: 0x6d577a20, 0x35b4f: 0x6d577c20, + 0x35b50: 0x6d577e20, 0x35b51: 0x6d578020, 0x35b52: 0x6d578220, 0x35b53: 0x6d578420, + 0x35b54: 0x6d578620, 0x35b55: 0x6d578820, 0x35b56: 0x6d578a20, 0x35b57: 0x6d578c20, + 0x35b58: 0x6d578e20, 0x35b59: 0x6d579020, 0x35b5a: 0x6d579220, 0x35b5b: 0x6d579420, + 0x35b5c: 0x6d579620, 0x35b5d: 0x6d579820, 0x35b5e: 0x6d579a20, 0x35b5f: 0x6d579c20, + 0x35b60: 0x6d579e20, 0x35b61: 0x6d57a020, 0x35b62: 0x6d57a220, 0x35b63: 0x6d57a420, + 0x35b64: 0x6d57a620, 0x35b65: 0x6d57a820, 0x35b66: 0x6d57aa20, 0x35b67: 0x6d57ac20, + 0x35b68: 0x6d57ae20, 0x35b69: 0x6d822820, 0x35b6a: 0x6d57b020, 0x35b6b: 0x6d57b220, + 0x35b6c: 0x6d57b420, 0x35b6d: 0x6d57b620, 0x35b6e: 0x6d57b820, 0x35b6f: 0x6d57ba20, + 0x35b70: 0x6d57bc20, 0x35b71: 0x6d57be20, 0x35b72: 0x6d57c020, 0x35b73: 0x6d57c220, + 0x35b74: 0x6d57c420, 0x35b75: 0x6d57c620, 0x35b76: 0x6d57c820, 0x35b77: 0x6d57ca20, + 0x35b78: 0x6d57cc20, 0x35b79: 0x6d57ce20, 0x35b7a: 0x6d57d020, 0x35b7b: 0x6d57d220, + 0x35b7c: 0x6d57d420, 0x35b7d: 0x6d57d620, 0x35b7e: 0x6d57d820, 0x35b7f: 0x6d57da20, + // Block 0xd6e, offset 0x35b80 + 0x35b80: 0x6da7de20, 0x35b81: 0x6d57dc20, 0x35b82: 0x6d57de20, 0x35b83: 0x6d57e020, + 0x35b84: 0x6d57e220, 0x35b85: 0x6d822a20, 0x35b86: 0x6d822c20, 0x35b87: 0x6d822e20, + 0x35b88: 0x6d823020, 0x35b89: 0x6d823220, 0x35b8a: 0x6d823420, 0x35b8b: 0x6d823620, + 0x35b8c: 0x6d823820, 0x35b8d: 0x6d823a20, 0x35b8e: 0x6d823c20, 0x35b8f: 0x6d823e20, + 0x35b90: 0x6d824020, 0x35b91: 0x6d824220, 0x35b92: 0x6d824420, 0x35b93: 0x6d824620, + 0x35b94: 0x6d824820, 0x35b95: 0x6d824a20, 0x35b96: 0x6d824c20, 0x35b97: 0x6d824e20, + 0x35b98: 0x6d825020, 0x35b99: 0x6d825220, 0x35b9a: 0x6d825420, 0x35b9b: 0x6d825620, + 0x35b9c: 0x6d825820, 0x35b9d: 0x6d825a20, 0x35b9e: 0x6d825c20, 0x35b9f: 0x6d825e20, + 0x35ba0: 0x6d826020, 0x35ba1: 0x6d826220, 0x35ba2: 0x6d826420, 0x35ba3: 0x6d826620, + 0x35ba4: 0x6d826820, 0x35ba5: 0x6d826a20, 0x35ba6: 0x6d826c20, 0x35ba7: 0x6d826e20, + 0x35ba8: 0x6d827020, 0x35ba9: 0x6d827220, 0x35baa: 0x6d827420, 0x35bab: 0x6d827620, + 0x35bac: 0x6d827820, 0x35bad: 0x6d827a20, 0x35bae: 0x6d827c20, 0x35baf: 0x6d827e20, + 0x35bb0: 0x6d828020, 0x35bb1: 0x6d828220, 0x35bb2: 0x6d828420, 0x35bb3: 0x6d828620, + 0x35bb4: 0x6d828820, 0x35bb5: 0x6d828a20, 0x35bb6: 0x6d828c20, 0x35bb7: 0x6d828e20, + 0x35bb8: 0x6d829020, 0x35bb9: 0x6d829220, 0x35bba: 0x6d829420, 0x35bbb: 0x6d829620, + 0x35bbc: 0x6d829820, 0x35bbd: 0x6d829a20, 0x35bbe: 0x6d829c20, 0x35bbf: 0x6d829e20, + // Block 0xd6f, offset 0x35bc0 + 0x35bc0: 0x6d82a020, 0x35bc1: 0x6d82a220, 0x35bc2: 0x6d82a420, 0x35bc3: 0x6d82a620, + 0x35bc4: 0x6d82a820, 0x35bc5: 0x6d82aa20, 0x35bc6: 0x6d82ac20, 0x35bc7: 0x6d82ae20, + 0x35bc8: 0x6d82b020, 0x35bc9: 0x6d82b220, 0x35bca: 0x6d82b420, 0x35bcb: 0x6d82b620, + 0x35bcc: 0x6d82b820, 0x35bcd: 0x6d82ba20, 0x35bce: 0x6d82bc20, 0x35bcf: 0x6d82be20, + 0x35bd0: 0x6d82c020, 0x35bd1: 0x6d82c220, 0x35bd2: 0x6d82c420, 0x35bd3: 0x6d82c620, + 0x35bd4: 0x6d82c820, 0x35bd5: 0x6d82ca20, 0x35bd6: 0x6d82cc20, 0x35bd7: 0x6d82ce20, + 0x35bd8: 0x6d82d020, 0x35bd9: 0x6d82d220, 0x35bda: 0x6d82d420, 0x35bdb: 0x6d82d620, + 0x35bdc: 0x6d82d820, 0x35bdd: 0x6d82da20, 0x35bde: 0x6d82dc20, 0x35bdf: 0x6d82de20, + 0x35be0: 0x6d82e020, 0x35be1: 0x6d82e220, 0x35be2: 0x6d7ade20, 0x35be3: 0x6da7e020, + 0x35be4: 0x6da7e220, 0x35be5: 0x6da7e420, 0x35be6: 0x6da7e620, 0x35be7: 0x6da7e820, + 0x35be8: 0x6da7ea20, 0x35be9: 0x6da7ec20, 0x35bea: 0x6da7ee20, 0x35beb: 0x6da7f020, + 0x35bec: 0x6da7f220, 0x35bed: 0x6da7f420, 0x35bee: 0x6da7f620, 0x35bef: 0x6da7f820, + 0x35bf0: 0x6da7fa20, 0x35bf1: 0x6da7fc20, 0x35bf2: 0x6da7fe20, 0x35bf3: 0x6da80020, + 0x35bf4: 0x6da80220, 0x35bf5: 0x6da80420, 0x35bf6: 0x6da80620, 0x35bf7: 0x6da80820, + 0x35bf8: 0x6da80a20, 0x35bf9: 0x6da80c20, 0x35bfa: 0x6da80e20, 0x35bfb: 0x6da81020, + 0x35bfc: 0x6da81220, 0x35bfd: 0x6da81420, 0x35bfe: 0x6da81620, 0x35bff: 0x6da81820, + // Block 0xd70, offset 0x35c00 + 0x35c00: 0x6da81a20, 0x35c01: 0x6da81c20, 0x35c02: 0x6da81e20, 0x35c03: 0x6da82020, + 0x35c04: 0x6da82220, 0x35c05: 0x6da82420, 0x35c06: 0x6da82620, 0x35c07: 0x6da82820, + 0x35c08: 0x6da82a20, 0x35c09: 0x6da82c20, 0x35c0a: 0x6da82e20, 0x35c0b: 0x6da83020, + 0x35c0c: 0x6da83220, 0x35c0d: 0x6da83420, 0x35c0e: 0x6da83620, 0x35c0f: 0x6da83820, + 0x35c10: 0x6da83a20, 0x35c11: 0x6da83c20, 0x35c12: 0x6da83e20, 0x35c13: 0x6da84020, + 0x35c14: 0x6da84220, 0x35c15: 0x6da84420, 0x35c16: 0x6da84620, 0x35c17: 0x6da84820, + 0x35c18: 0x6da84a20, 0x35c19: 0x6da84c20, 0x35c1a: 0x6da84e20, 0x35c1b: 0x6da85020, + 0x35c1c: 0x6da85220, 0x35c1d: 0x6da85420, 0x35c1e: 0x6dc90820, 0x35c1f: 0x6da85620, + 0x35c20: 0x6da85820, 0x35c21: 0x6dc90a20, 0x35c22: 0x6dc90c20, 0x35c23: 0x6dc90e20, + 0x35c24: 0x6dc91020, 0x35c25: 0x6dc91220, 0x35c26: 0x6dc91420, 0x35c27: 0x6dc91620, + 0x35c28: 0x6dc91820, 0x35c29: 0x6dc91a20, 0x35c2a: 0x6dc91c20, 0x35c2b: 0x6dc91e20, + 0x35c2c: 0x6dc92020, 0x35c2d: 0x6dc92220, 0x35c2e: 0x6dc92420, 0x35c2f: 0x6dc92620, + 0x35c30: 0x6dc92820, 0x35c31: 0x6dc92a20, 0x35c32: 0x6dc92c20, 0x35c33: 0x6dc92e20, + 0x35c34: 0x6dc93020, 0x35c35: 0x6dc93220, 0x35c36: 0x6dc93420, 0x35c37: 0x6dc93620, + 0x35c38: 0x6dc93820, 0x35c39: 0x6dc93a20, 0x35c3a: 0x6dc93c20, 0x35c3b: 0x6dc93e20, + 0x35c3c: 0x6dc94020, 0x35c3d: 0x6dc94220, 0x35c3e: 0x6dc94420, 0x35c3f: 0x6dc94620, + // Block 0xd71, offset 0x35c40 + 0x35c40: 0x6dc94820, 0x35c41: 0x6dc94a20, 0x35c42: 0x6dc94c20, 0x35c43: 0x6dc94e20, + 0x35c44: 0x6dc95020, 0x35c45: 0x6dc95220, 0x35c46: 0x6dc95420, 0x35c47: 0x6dc95620, + 0x35c48: 0x6dc95820, 0x35c49: 0x6dc95a20, 0x35c4a: 0x6dc95c20, 0x35c4b: 0x6dc95e20, + 0x35c4c: 0x6dc96020, 0x35c4d: 0x6dc96220, 0x35c4e: 0x6dc96420, 0x35c4f: 0x6dc96620, + 0x35c50: 0x6dc96820, 0x35c51: 0x6dc96a20, 0x35c52: 0x6dc96c20, 0x35c53: 0x6dc96e20, + 0x35c54: 0x6dc97020, 0x35c55: 0x6dc97220, 0x35c56: 0x6dc97420, 0x35c57: 0x6dc97620, + 0x35c58: 0x6dc97820, 0x35c59: 0x6dc97a20, 0x35c5a: 0x6dc97c20, 0x35c5b: 0x6dc97e20, + 0x35c5c: 0x6dc98020, 0x35c5d: 0x6de4f420, 0x35c5e: 0x6dc98220, 0x35c5f: 0x6dc98420, + 0x35c60: 0x6dc98620, 0x35c61: 0x6de4f620, 0x35c62: 0x6dc98820, 0x35c63: 0x6dc98a20, + 0x35c64: 0x6dc98c20, 0x35c65: 0x6dc98e20, 0x35c66: 0x6dc99020, 0x35c67: 0x6dc99220, + 0x35c68: 0x6dc99420, 0x35c69: 0x6dc99620, 0x35c6a: 0x6dc99820, 0x35c6b: 0x6dc99a20, + 0x35c6c: 0x6dc99c20, 0x35c6d: 0x6dc99e20, 0x35c6e: 0x6dc9a020, 0x35c6f: 0x6dc9a220, + 0x35c70: 0x6dc9a420, 0x35c71: 0x6dc9a620, 0x35c72: 0x6dc9a820, 0x35c73: 0x6de4f820, + 0x35c74: 0x6de4fa20, 0x35c75: 0x6de4fc20, 0x35c76: 0x6de4fe20, 0x35c77: 0x6de50020, + 0x35c78: 0x6de50220, 0x35c79: 0x6de50420, 0x35c7a: 0x6de50620, 0x35c7b: 0x6de50820, + 0x35c7c: 0x6de50a20, 0x35c7d: 0x6de50c20, 0x35c7e: 0x6de50e20, 0x35c7f: 0x6de51020, + // Block 0xd72, offset 0x35c80 + 0x35c80: 0x6de51220, 0x35c81: 0x6de51420, 0x35c82: 0x6de51620, 0x35c83: 0x6de51820, + 0x35c84: 0x6de51a20, 0x35c85: 0x6de51c20, 0x35c86: 0x6de51e20, 0x35c87: 0x6de52020, + 0x35c88: 0x6de52220, 0x35c89: 0x6de52420, 0x35c8a: 0x6de52620, 0x35c8b: 0x6de52820, + 0x35c8c: 0x6de52a20, 0x35c8d: 0x6de52c20, 0x35c8e: 0x6de52e20, 0x35c8f: 0x6de53020, + 0x35c90: 0x6de53220, 0x35c91: 0x6de53420, 0x35c92: 0x6de53620, 0x35c93: 0x6de53820, + 0x35c94: 0x6de53a20, 0x35c95: 0x6de53c20, 0x35c96: 0x6de53e20, 0x35c97: 0x6de54020, + 0x35c98: 0x6de54220, 0x35c99: 0x6de54420, 0x35c9a: 0x6de54620, 0x35c9b: 0x6de54820, + 0x35c9c: 0x6de54a20, 0x35c9d: 0x6de54c20, 0x35c9e: 0x6de54e20, 0x35c9f: 0x6de55020, + 0x35ca0: 0x6de55220, 0x35ca1: 0x6de55420, 0x35ca2: 0x6de55620, 0x35ca3: 0x6de55820, + 0x35ca4: 0x6de55a20, 0x35ca5: 0x6de55c20, 0x35ca6: 0x6de55e20, 0x35ca7: 0x6de56020, + 0x35ca8: 0x6dfbf620, 0x35ca9: 0x6dfbf820, 0x35caa: 0x6dfbfa20, 0x35cab: 0x6dfbfc20, + 0x35cac: 0x6dfbfe20, 0x35cad: 0x6dfc0020, 0x35cae: 0x6dfc0220, 0x35caf: 0x6dfc0420, + 0x35cb0: 0x6dfc0620, 0x35cb1: 0x6dfc0820, 0x35cb2: 0x6dfc0a20, 0x35cb3: 0x6dfc0c20, + 0x35cb4: 0x6dfc0e20, 0x35cb5: 0x6dfc1020, 0x35cb6: 0x6dfc1220, 0x35cb7: 0x6dfc1420, + 0x35cb8: 0x6dfc1620, 0x35cb9: 0x6dfc1820, 0x35cba: 0x6dfc1a20, 0x35cbb: 0x6dfc1c20, + 0x35cbc: 0x6dfc1e20, 0x35cbd: 0x6dfc2020, 0x35cbe: 0x6dfc2220, 0x35cbf: 0x6dfc2420, + // Block 0xd73, offset 0x35cc0 + 0x35cc0: 0x6dfc2620, 0x35cc1: 0x6dfc2820, 0x35cc2: 0x6dfc2a20, 0x35cc3: 0x6dfc2c20, + 0x35cc4: 0x6dfc2e20, 0x35cc5: 0x6dfc3020, 0x35cc6: 0x6dfc3220, 0x35cc7: 0x6dfc3420, + 0x35cc8: 0x6dfc3620, 0x35cc9: 0x6dfc3820, 0x35cca: 0x6dfc3a20, 0x35ccb: 0x6dfc3c20, + 0x35ccc: 0x6dfc3e20, 0x35ccd: 0x6dfc4020, 0x35cce: 0x6e0f2220, 0x35ccf: 0x6e0f2420, + 0x35cd0: 0x6e0f2620, 0x35cd1: 0x6e0f2820, 0x35cd2: 0x6e0f2a20, 0x35cd3: 0x6e0f2c20, + 0x35cd4: 0x6e0f2e20, 0x35cd5: 0x6e0f3020, 0x35cd6: 0x6e0f3220, 0x35cd7: 0x6e0f3420, + 0x35cd8: 0x6e0f3620, 0x35cd9: 0x6e0f3820, 0x35cda: 0x6e0f3a20, 0x35cdb: 0x6e0f3c20, + 0x35cdc: 0x6e0f3e20, 0x35cdd: 0x6e0f4020, 0x35cde: 0x6e0f4220, 0x35cdf: 0x6e0f4420, + 0x35ce0: 0x6e0f4620, 0x35ce1: 0x6e0f4820, 0x35ce2: 0x6e0f4a20, 0x35ce3: 0x6e0f4c20, + 0x35ce4: 0x6e0f4e20, 0x35ce5: 0x6e0f5020, 0x35ce6: 0x6e0f5220, 0x35ce7: 0x6e0f5420, + 0x35ce8: 0x6e0f5620, 0x35ce9: 0x6e0f5820, 0x35cea: 0x6e0f5a20, 0x35ceb: 0x6e0f5c20, + 0x35cec: 0x6e0f5e20, 0x35ced: 0x6e0f6020, 0x35cee: 0x6e0f6220, 0x35cef: 0x6e0f6420, + 0x35cf0: 0x6e0f6620, 0x35cf1: 0x6e0f6820, 0x35cf2: 0x6e0f6a20, 0x35cf3: 0x6e0f6c20, + 0x35cf4: 0x6e0f6e20, 0x35cf5: 0x6e0f7020, 0x35cf6: 0x6e1e4220, 0x35cf7: 0x6e1e4420, + 0x35cf8: 0x6e1e4620, 0x35cf9: 0x6e1e4820, 0x35cfa: 0x6e1e4a20, 0x35cfb: 0x6e1e4c20, + 0x35cfc: 0x6e1e4e20, 0x35cfd: 0x6e1e5020, 0x35cfe: 0x6e1e5220, 0x35cff: 0x6e1e5420, + // Block 0xd74, offset 0x35d00 + 0x35d00: 0x6e1e5620, 0x35d01: 0x6e1e5820, 0x35d02: 0x6e1e5a20, 0x35d03: 0x6e1e5c20, + 0x35d04: 0x6e1e5e20, 0x35d05: 0x6e1e6020, 0x35d06: 0x6e1e6220, 0x35d07: 0x6e1e6420, + 0x35d08: 0x6e1e6620, 0x35d09: 0x6e1e6820, 0x35d0a: 0x6e29a620, 0x35d0b: 0x6e29a820, + 0x35d0c: 0x6e29aa20, 0x35d0d: 0x6e29ac20, 0x35d0e: 0x6e29ae20, 0x35d0f: 0x6e29b020, + 0x35d10: 0x6e29b220, 0x35d11: 0x6e29b420, 0x35d12: 0x6e29b620, 0x35d13: 0x6e29b820, + 0x35d14: 0x6e29ba20, 0x35d15: 0x6e29bc20, 0x35d16: 0x6e29be20, 0x35d17: 0x6e29c020, + 0x35d18: 0x6e29c220, 0x35d19: 0x6e29c420, 0x35d1a: 0x6e29c620, 0x35d1b: 0x6e29c820, + 0x35d1c: 0x6e29ca20, 0x35d1d: 0x6e29cc20, 0x35d1e: 0x6e29ce20, 0x35d1f: 0x6e29d020, + 0x35d20: 0x6e32ac20, 0x35d21: 0x6e32ae20, 0x35d22: 0x6e32b020, 0x35d23: 0x6e32b220, + 0x35d24: 0x6e32b420, 0x35d25: 0x6e32b620, 0x35d26: 0x6e32b820, 0x35d27: 0x6e32ba20, + 0x35d28: 0x6e32bc20, 0x35d29: 0x6e38e420, 0x35d2a: 0x6e38e620, 0x35d2b: 0x6e38e820, + 0x35d2c: 0x6e38ea20, 0x35d2d: 0x6e38ec20, 0x35d2e: 0x6e38ee20, 0x35d2f: 0x6e38f020, + 0x35d30: 0x6e3d5820, 0x35d31: 0x6e3d5a20, 0x35d32: 0x6e3d5c20, 0x35d33: 0x6e3d5e20, + 0x35d34: 0x6e3d6020, 0x35d35: 0x6e3d6220, 0x35d36: 0x6e3d6420, 0x35d37: 0x6e406220, + 0x35d38: 0x6e406420, 0x35d39: 0x6e406620, 0x35d3a: 0x6e406820, 0x35d3b: 0x6e406a20, + 0x35d3c: 0x6e42b220, 0x35d3d: 0x6e42b420, 0x35d3e: 0x6e443220, 0x35d3f: 0x6e452220, + // Block 0xd75, offset 0x35d40 + 0x35d40: 0x6e468020, 0x35d41: 0x6e46c820, 0x35d42: 0x6c09cc20, 0x35d43: 0x6c136620, + 0x35d44: 0x6c136820, 0x35d45: 0x6c136a20, 0x35d46: 0x6c136c20, 0x35d47: 0x6c136e20, + 0x35d48: 0x6c137020, 0x35d49: 0x6c137220, 0x35d4a: 0x6c137420, 0x35d4b: 0x6c137620, + 0x35d4c: 0x6c137820, 0x35d4d: 0x6c23aa20, 0x35d4e: 0x6c23ac20, 0x35d4f: 0x6c23ae20, + 0x35d50: 0x6c23b020, 0x35d51: 0x6c23b220, 0x35d52: 0x6c23b420, 0x35d53: 0x6c23b620, + 0x35d54: 0x6c23b820, 0x35d55: 0x6c23ba20, 0x35d56: 0x6c23bc20, 0x35d57: 0x6c23be20, + 0x35d58: 0x6c23c020, 0x35d59: 0x6c23c220, 0x35d5a: 0x6c23c420, 0x35d5b: 0x6c23c620, + 0x35d5c: 0x6c23c820, 0x35d5d: 0x6c39d820, 0x35d5e: 0x6c39da20, 0x35d5f: 0x6c39dc20, + 0x35d60: 0x6c39de20, 0x35d61: 0x6c39e020, 0x35d62: 0x6c39e220, 0x35d63: 0x6c39e420, + 0x35d64: 0x6c39e620, 0x35d65: 0x6c39e820, 0x35d66: 0x6c39ea20, 0x35d67: 0x6c39ec20, + 0x35d68: 0x6c39ee20, 0x35d69: 0x6c39f020, 0x35d6a: 0x6c39f220, 0x35d6b: 0x6c39f420, + 0x35d6c: 0x6c39f620, 0x35d6d: 0x6c39f820, 0x35d6e: 0x6c39fa20, 0x35d6f: 0x6c39fc20, + 0x35d70: 0x6c39fe20, 0x35d71: 0x6c3a0020, 0x35d72: 0x6c3a0220, 0x35d73: 0x6c3a0420, + 0x35d74: 0x6c3a0620, 0x35d75: 0x6c3a0820, 0x35d76: 0x6c3a0a20, 0x35d77: 0x6c3a0c20, + 0x35d78: 0x6c3a0e20, 0x35d79: 0x6c3a1020, 0x35d7a: 0x6c3a1220, 0x35d7b: 0x6c3a1420, + 0x35d7c: 0x6c557220, 0x35d7d: 0x6c557420, 0x35d7e: 0x6c557620, 0x35d7f: 0x6c557820, + // Block 0xd76, offset 0x35d80 + 0x35d80: 0x6c557a20, 0x35d81: 0x6c557c20, 0x35d82: 0x6c557e20, 0x35d83: 0x6c558020, + 0x35d84: 0x6c558220, 0x35d85: 0x6c558420, 0x35d86: 0x6c558620, 0x35d87: 0x6c558820, + 0x35d88: 0x6c558a20, 0x35d89: 0x6c558c20, 0x35d8a: 0x6c558e20, 0x35d8b: 0x6c559020, + 0x35d8c: 0x6c559220, 0x35d8d: 0x6c559420, 0x35d8e: 0x6c559620, 0x35d8f: 0x6c559820, + 0x35d90: 0x6c559a20, 0x35d91: 0x6c559c20, 0x35d92: 0x6c559e20, 0x35d93: 0x6c55a020, + 0x35d94: 0x6c55a220, 0x35d95: 0x6c55a420, 0x35d96: 0x6c55a620, 0x35d97: 0x6c55a820, + 0x35d98: 0x6c55aa20, 0x35d99: 0x6c55ac20, 0x35d9a: 0x6c55ae20, 0x35d9b: 0x6c55b020, + 0x35d9c: 0x6c55b220, 0x35d9d: 0x6c55b420, 0x35d9e: 0x6c55b620, 0x35d9f: 0x6c55b820, + 0x35da0: 0x6c55ba20, 0x35da1: 0x6c55bc20, 0x35da2: 0x6c55be20, 0x35da3: 0x6c55c020, + 0x35da4: 0x6c55c220, 0x35da5: 0x6c55c420, 0x35da6: 0x6c55c620, 0x35da7: 0x6c55c820, + 0x35da8: 0x6c55ca20, 0x35da9: 0x6c55cc20, 0x35daa: 0x6c55ce20, 0x35dab: 0x6c55d020, + 0x35dac: 0x6c55d220, 0x35dad: 0x6c55d420, 0x35dae: 0x6c55d620, 0x35daf: 0x6c784c20, + 0x35db0: 0x6c784e20, 0x35db1: 0x6c785020, 0x35db2: 0x6c785220, 0x35db3: 0x6c785420, + 0x35db4: 0x6c785620, 0x35db5: 0x6c785820, 0x35db6: 0x6c785a20, 0x35db7: 0x6c785c20, + 0x35db8: 0x6c785e20, 0x35db9: 0x6c786020, 0x35dba: 0x6c786220, 0x35dbb: 0x6c786420, + 0x35dbc: 0x6c786620, 0x35dbd: 0x6c786820, 0x35dbe: 0x6c786a20, 0x35dbf: 0x6c786c20, + // Block 0xd77, offset 0x35dc0 + 0x35dc0: 0x6c786e20, 0x35dc1: 0x6c787020, 0x35dc2: 0x6c787220, 0x35dc3: 0x6c787420, + 0x35dc4: 0x6c787620, 0x35dc5: 0x6c787820, 0x35dc6: 0x6c787a20, 0x35dc7: 0x6c787c20, + 0x35dc8: 0x6c787e20, 0x35dc9: 0x6c788020, 0x35dca: 0x6c788220, 0x35dcb: 0x6c788420, + 0x35dcc: 0x6c788620, 0x35dcd: 0x6c788820, 0x35dce: 0x6c788a20, 0x35dcf: 0x6c788c20, + 0x35dd0: 0x6c788e20, 0x35dd1: 0x6c789020, 0x35dd2: 0x6c789220, 0x35dd3: 0x6c789420, + 0x35dd4: 0x6c789620, 0x35dd5: 0x6c789820, 0x35dd6: 0x6c789a20, 0x35dd7: 0x6c789c20, + 0x35dd8: 0x6c789e20, 0x35dd9: 0x6c78a020, 0x35dda: 0x6c78a220, 0x35ddb: 0x6c78a420, + 0x35ddc: 0x6c78a620, 0x35ddd: 0x6c78a820, 0x35dde: 0x6c78aa20, 0x35ddf: 0x6c78ac20, + 0x35de0: 0x6c78ae20, 0x35de1: 0x6c78b020, 0x35de2: 0x6c78b220, 0x35de3: 0x6c78b420, + 0x35de4: 0x6c78b620, 0x35de5: 0x6ca14020, 0x35de6: 0x6ca14220, 0x35de7: 0x6ca14420, + 0x35de8: 0x6ca14620, 0x35de9: 0x6ca14820, 0x35dea: 0x6ca14a20, 0x35deb: 0x6ca14c20, + 0x35dec: 0x6ca14e20, 0x35ded: 0x6ca15020, 0x35dee: 0x6ca15220, 0x35def: 0x6ca15420, + 0x35df0: 0x6ca15620, 0x35df1: 0x6ca15820, 0x35df2: 0x6ca15a20, 0x35df3: 0x6ca15c20, + 0x35df4: 0x6ca15e20, 0x35df5: 0x6ca16020, 0x35df6: 0x6ca16220, 0x35df7: 0x6ca16420, + 0x35df8: 0x6ca16620, 0x35df9: 0x6ca16820, 0x35dfa: 0x6ca16a20, 0x35dfb: 0x6ca16c20, + 0x35dfc: 0x6ca16e20, 0x35dfd: 0x6ca17020, 0x35dfe: 0x6ca17220, 0x35dff: 0x6ca17420, + // Block 0xd78, offset 0x35e00 + 0x35e00: 0x6ca17620, 0x35e01: 0x6ca17820, 0x35e02: 0x6ca17a20, 0x35e03: 0x6ca17c20, + 0x35e04: 0x6ca17e20, 0x35e05: 0x6ca18020, 0x35e06: 0x6ca18220, 0x35e07: 0x6ca18420, + 0x35e08: 0x6ca18620, 0x35e09: 0x6ca18820, 0x35e0a: 0x6ca18a20, 0x35e0b: 0x6ca18c20, + 0x35e0c: 0x6ca18e20, 0x35e0d: 0x6ca19020, 0x35e0e: 0x6ca19220, 0x35e0f: 0x6ca19420, + 0x35e10: 0x6ca19620, 0x35e11: 0x6ca19820, 0x35e12: 0x6ca19a20, 0x35e13: 0x6ca19c20, + 0x35e14: 0x6ca19e20, 0x35e15: 0x6ca1a020, 0x35e16: 0x6ca1a220, 0x35e17: 0x6ca1a420, + 0x35e18: 0x6ca1a620, 0x35e19: 0x6ca1a820, 0x35e1a: 0x6ca1aa20, 0x35e1b: 0x6ca1ac20, + 0x35e1c: 0x6ca1ae20, 0x35e1d: 0x6ca1b020, 0x35e1e: 0x6ca1b220, 0x35e1f: 0x6ca1b420, + 0x35e20: 0x6ca1b620, 0x35e21: 0x6ca1b820, 0x35e22: 0x6cce4820, 0x35e23: 0x6cce4a20, + 0x35e24: 0x6cce4c20, 0x35e25: 0x6cce4e20, 0x35e26: 0x6cce5020, 0x35e27: 0x6cce5220, + 0x35e28: 0x6cce5420, 0x35e29: 0x6cce5620, 0x35e2a: 0x6cce5820, 0x35e2b: 0x6cce5a20, + 0x35e2c: 0x6cce5c20, 0x35e2d: 0x6cce5e20, 0x35e2e: 0x6cce6020, 0x35e2f: 0x6cce6220, + 0x35e30: 0x6cce6420, 0x35e31: 0x6cce6620, 0x35e32: 0x6cce6820, 0x35e33: 0x6cce6a20, + 0x35e34: 0x6cce6c20, 0x35e35: 0x6cce6e20, 0x35e36: 0x6cce7020, 0x35e37: 0x6cce7220, + 0x35e38: 0x6cce7420, 0x35e39: 0x6cce7620, 0x35e3a: 0x6cce7820, 0x35e3b: 0x6cce7a20, + 0x35e3c: 0x6cce7c20, 0x35e3d: 0x6cce7e20, 0x35e3e: 0x6cce8020, 0x35e3f: 0x6cce8220, + // Block 0xd79, offset 0x35e40 + 0x35e40: 0x6cce8420, 0x35e41: 0x6cce8620, 0x35e42: 0x6cce8820, 0x35e43: 0x6cce8a20, + 0x35e44: 0x6cce8c20, 0x35e45: 0x6cce8e20, 0x35e46: 0x6cce9020, 0x35e47: 0x6cce9220, + 0x35e48: 0x6cce9420, 0x35e49: 0x6cce9620, 0x35e4a: 0x6cce9820, 0x35e4b: 0x6cce9a20, + 0x35e4c: 0x6cce9c20, 0x35e4d: 0x6cce9e20, 0x35e4e: 0x6ccea020, 0x35e4f: 0x6ccea220, + 0x35e50: 0x6ccea420, 0x35e51: 0x6ccea620, 0x35e52: 0x6ccea820, 0x35e53: 0x6cceaa20, + 0x35e54: 0x6cceac20, 0x35e55: 0x6cceae20, 0x35e56: 0x6cceb020, 0x35e57: 0x6cceb220, + 0x35e58: 0x6cceb420, 0x35e59: 0x6cceb620, 0x35e5a: 0x6cceb820, 0x35e5b: 0x6cceba20, + 0x35e5c: 0x6ccebc20, 0x35e5d: 0x6ccebe20, 0x35e5e: 0x6ccec020, 0x35e5f: 0x6ccec220, + 0x35e60: 0x6ccec420, 0x35e61: 0x6ccec620, 0x35e62: 0x6ccec820, 0x35e63: 0x6cceca20, + 0x35e64: 0x6ccecc20, 0x35e65: 0x6ccece20, 0x35e66: 0x6cced020, 0x35e67: 0x6cced220, + 0x35e68: 0x6cced420, 0x35e69: 0x6cced620, 0x35e6a: 0x6cced820, 0x35e6b: 0x6cceda20, + 0x35e6c: 0x6ccedc20, 0x35e6d: 0x6ccede20, 0x35e6e: 0x6ccee020, 0x35e6f: 0x6ccee220, + 0x35e70: 0x6ccee420, 0x35e71: 0x6ccee620, 0x35e72: 0x6cfc6820, 0x35e73: 0x6cfc6a20, + 0x35e74: 0x6cfc6c20, 0x35e75: 0x6cfc6e20, 0x35e76: 0x6cfc7020, 0x35e77: 0x6cfc7220, + 0x35e78: 0x6cfc7420, 0x35e79: 0x6cfc7620, 0x35e7a: 0x6cfc7820, 0x35e7b: 0x6cfc7a20, + 0x35e7c: 0x6cfc7c20, 0x35e7d: 0x6cfc7e20, 0x35e7e: 0x6cfc8020, 0x35e7f: 0x6cfc8220, + // Block 0xd7a, offset 0x35e80 + 0x35e80: 0x6cfc8420, 0x35e81: 0x6cfc8620, 0x35e82: 0x6cfc8820, 0x35e83: 0x6cfc8a20, + 0x35e84: 0x6cfc8c20, 0x35e85: 0x6cfc8e20, 0x35e86: 0x6cfc9020, 0x35e87: 0x6cfc9220, + 0x35e88: 0x6cfc9420, 0x35e89: 0x6cfc9620, 0x35e8a: 0x6cfc9820, 0x35e8b: 0x6cfc9a20, + 0x35e8c: 0x6cfc9c20, 0x35e8d: 0x6cfc9e20, 0x35e8e: 0x6cfca020, 0x35e8f: 0x6cfca220, + 0x35e90: 0x6cfca420, 0x35e91: 0x6cfca620, 0x35e92: 0x6cfca820, 0x35e93: 0x6cfcaa20, + 0x35e94: 0x6cfcac20, 0x35e95: 0x6cfcae20, 0x35e96: 0x6cfcb020, 0x35e97: 0x6cfcb220, + 0x35e98: 0x6cfcb420, 0x35e99: 0x6cfcb620, 0x35e9a: 0x6cfcb820, 0x35e9b: 0x6cfcba20, + 0x35e9c: 0x6cfcbc20, 0x35e9d: 0x6cfcbe20, 0x35e9e: 0x6cfcc020, 0x35e9f: 0x6cfcc220, + 0x35ea0: 0x6cfcc420, 0x35ea1: 0x6cfcc620, 0x35ea2: 0x6cfcc820, 0x35ea3: 0x6cfcca20, + 0x35ea4: 0x6cfccc20, 0x35ea5: 0x6cfcce20, 0x35ea6: 0x6cfcd020, 0x35ea7: 0x6cfcd220, + 0x35ea8: 0x6cfcd420, 0x35ea9: 0x6cfcd620, 0x35eaa: 0x6cfcd820, 0x35eab: 0x6cfcda20, + 0x35eac: 0x6cfcdc20, 0x35ead: 0x6cfcde20, 0x35eae: 0x6cfce020, 0x35eaf: 0x6cfce220, + 0x35eb0: 0x6cfce420, 0x35eb1: 0x6cfce620, 0x35eb2: 0x6cfce820, 0x35eb3: 0x6cb74620, + 0x35eb4: 0x6cfcea20, 0x35eb5: 0x6cfcec20, 0x35eb6: 0x6cfcee20, 0x35eb7: 0x6cfcf020, + 0x35eb8: 0x6cfcf220, 0x35eb9: 0x6cfcf420, 0x35eba: 0x6cfcf620, 0x35ebb: 0x6cfcf820, + 0x35ebc: 0x6cfcfa20, 0x35ebd: 0x6cfcfc20, 0x35ebe: 0x6cfcfe20, 0x35ebf: 0x6cfd0020, + // Block 0xd7b, offset 0x35ec0 + 0x35ec0: 0x6cfd0220, 0x35ec1: 0x6cfd0420, 0x35ec2: 0x6cfd0620, 0x35ec3: 0x6cfd0820, + 0x35ec4: 0x6cfd0a20, 0x35ec5: 0x6cfd0c20, 0x35ec6: 0x6cfd0e20, 0x35ec7: 0x6d2b2c20, + 0x35ec8: 0x6d2b2e20, 0x35ec9: 0x6d2b3020, 0x35eca: 0x6d2b3220, 0x35ecb: 0x6d2b3420, + 0x35ecc: 0x6d2b3620, 0x35ecd: 0x6d2b3820, 0x35ece: 0x6d2b3a20, 0x35ecf: 0x6d2b3c20, + 0x35ed0: 0x6d2b3e20, 0x35ed1: 0x6d2b4020, 0x35ed2: 0x6d2b4220, 0x35ed3: 0x6d2b4420, + 0x35ed4: 0x6d2b4620, 0x35ed5: 0x6d2b4820, 0x35ed6: 0x6d2b4a20, 0x35ed7: 0x6d2b4c20, + 0x35ed8: 0x6d2b4e20, 0x35ed9: 0x6d2b5020, 0x35eda: 0x6d2b5220, 0x35edb: 0x6d2b5420, + 0x35edc: 0x6d2b5620, 0x35edd: 0x6d2b5820, 0x35ede: 0x6d2b5a20, 0x35edf: 0x6d2b5c20, + 0x35ee0: 0x6d2b5e20, 0x35ee1: 0x6d2b6020, 0x35ee2: 0x6d2b6220, 0x35ee3: 0x6d2b6420, + 0x35ee4: 0x6d2b6620, 0x35ee5: 0x6d2b6820, 0x35ee6: 0x6d2b6a20, 0x35ee7: 0x6d2b6c20, + 0x35ee8: 0x6d2b6e20, 0x35ee9: 0x6d2b7020, 0x35eea: 0x6d2b7220, 0x35eeb: 0x6d2b7420, + 0x35eec: 0x6d2b7620, 0x35eed: 0x6d2b7820, 0x35eee: 0x6d2b7a20, 0x35eef: 0x6d2b7c20, + 0x35ef0: 0x6d2b7e20, 0x35ef1: 0x6d2b8020, 0x35ef2: 0x6d585a20, 0x35ef3: 0x6d2b8220, + 0x35ef4: 0x6d2b8420, 0x35ef5: 0x6d2b8620, 0x35ef6: 0x6d2b8820, 0x35ef7: 0x6d2b8a20, + 0x35ef8: 0x6d2b8c20, 0x35ef9: 0x6d2b8e20, 0x35efa: 0x6d2b9020, 0x35efb: 0x6d2b9220, + 0x35efc: 0x6d2b9420, 0x35efd: 0x6d2b9620, 0x35efe: 0x6d2b9820, 0x35eff: 0x6d2b9a20, + // Block 0xd7c, offset 0x35f00 + 0x35f00: 0x6d2b9c20, 0x35f01: 0x6d2b9e20, 0x35f02: 0x6d2ba020, 0x35f03: 0x6d2ba220, + 0x35f04: 0x6d2ba420, 0x35f05: 0x6d2ba620, 0x35f06: 0x6d2ba820, 0x35f07: 0x6d2baa20, + 0x35f08: 0x6d2bac20, 0x35f09: 0x6d2bae20, 0x35f0a: 0x6d2bb020, 0x35f0b: 0x6d2bb220, + 0x35f0c: 0x6d2bb420, 0x35f0d: 0x6d2bb620, 0x35f0e: 0x6d2bb820, 0x35f0f: 0x6cfd1020, + 0x35f10: 0x6d585c20, 0x35f11: 0x6d585e20, 0x35f12: 0x6d586020, 0x35f13: 0x6d586220, + 0x35f14: 0x6d586420, 0x35f15: 0x6d586620, 0x35f16: 0x6d586820, 0x35f17: 0x6d586a20, + 0x35f18: 0x6d586c20, 0x35f19: 0x6d586e20, 0x35f1a: 0x6d587020, 0x35f1b: 0x6d587220, + 0x35f1c: 0x6d587420, 0x35f1d: 0x6d587620, 0x35f1e: 0x6d587820, 0x35f1f: 0x6d587a20, + 0x35f20: 0x6d587c20, 0x35f21: 0x6d587e20, 0x35f22: 0x6d588020, 0x35f23: 0x6d588220, + 0x35f24: 0x6d588420, 0x35f25: 0x6d588620, 0x35f26: 0x6d588820, 0x35f27: 0x6d588a20, + 0x35f28: 0x6d588c20, 0x35f29: 0x6d836620, 0x35f2a: 0x6d588e20, 0x35f2b: 0x6d589020, + 0x35f2c: 0x6d589220, 0x35f2d: 0x6d589420, 0x35f2e: 0x6d589620, 0x35f2f: 0x6d589820, + 0x35f30: 0x6d589a20, 0x35f31: 0x6d589c20, 0x35f32: 0x6d589e20, 0x35f33: 0x6d58a020, + 0x35f34: 0x6d58a220, 0x35f35: 0x6d58a420, 0x35f36: 0x6d58a620, 0x35f37: 0x6d58a820, + 0x35f38: 0x6d58aa20, 0x35f39: 0x6d58ac20, 0x35f3a: 0x6d58ae20, 0x35f3b: 0x6d58b020, + 0x35f3c: 0x6d58b220, 0x35f3d: 0x6d58b420, 0x35f3e: 0x6d58b620, 0x35f3f: 0x6d58b820, + // Block 0xd7d, offset 0x35f40 + 0x35f40: 0x6d385220, 0x35f41: 0x6d58ba20, 0x35f42: 0x6d705e20, 0x35f43: 0x6d58bc20, + 0x35f44: 0x6d58be20, 0x35f45: 0x6d58c020, 0x35f46: 0x6d58c220, 0x35f47: 0x6d58c420, + 0x35f48: 0x6d58c620, 0x35f49: 0x6d58c820, 0x35f4a: 0x6d58ca20, 0x35f4b: 0x6d58cc20, + 0x35f4c: 0x6d58ce20, 0x35f4d: 0x6d58d020, 0x35f4e: 0x6d58d220, 0x35f4f: 0x6d58d420, + 0x35f50: 0x6d58d620, 0x35f51: 0x6d58d820, 0x35f52: 0x6d58da20, 0x35f53: 0x6d58dc20, + 0x35f54: 0x6d58de20, 0x35f55: 0x6d58e020, 0x35f56: 0x6d58e220, 0x35f57: 0x6d58e420, + 0x35f58: 0x6d58e620, 0x35f59: 0x6d58e820, 0x35f5a: 0x6d58ea20, 0x35f5b: 0x6d58ec20, + 0x35f5c: 0x6d58ee20, 0x35f5d: 0x6d836820, 0x35f5e: 0x6d836a20, 0x35f5f: 0x6d836c20, + 0x35f60: 0x6d836e20, 0x35f61: 0x6d837020, 0x35f62: 0x6d837220, 0x35f63: 0x6d837420, + 0x35f64: 0x6d837620, 0x35f65: 0x6d837820, 0x35f66: 0x6d837a20, 0x35f67: 0x6d837c20, + 0x35f68: 0x6d837e20, 0x35f69: 0x6d838020, 0x35f6a: 0x6d838220, 0x35f6b: 0x6d838420, + 0x35f6c: 0x6d838620, 0x35f6d: 0x6d838820, 0x35f6e: 0x6d838a20, 0x35f6f: 0x6d838c20, + 0x35f70: 0x6d838e20, 0x35f71: 0x6d839020, 0x35f72: 0x6d839220, 0x35f73: 0x6d839420, + 0x35f74: 0x6d839620, 0x35f75: 0x6d839820, 0x35f76: 0x6d839a20, 0x35f77: 0x6d839c20, + 0x35f78: 0x6d839e20, 0x35f79: 0x6d83a020, 0x35f7a: 0x6d83a220, 0x35f7b: 0x6d83a420, + 0x35f7c: 0x6d83a620, 0x35f7d: 0x6d83a820, 0x35f7e: 0x6d83aa20, 0x35f7f: 0x6d83ac20, + // Block 0xd7e, offset 0x35f80 + 0x35f80: 0x6d83ae20, 0x35f81: 0x6d83b020, 0x35f82: 0x6d83b220, 0x35f83: 0x6d83b420, + 0x35f84: 0x6d83b620, 0x35f85: 0x6d83b820, 0x35f86: 0x6d83ba20, 0x35f87: 0x6d83bc20, + 0x35f88: 0x6d83be20, 0x35f89: 0x6d83c020, 0x35f8a: 0x6d83c220, 0x35f8b: 0x6d83c420, + 0x35f8c: 0x6d83c620, 0x35f8d: 0x6d83c820, 0x35f8e: 0x6d83ca20, 0x35f8f: 0x6d83cc20, + 0x35f90: 0x6d83ce20, 0x35f91: 0x6d83d020, 0x35f92: 0x6d83d220, 0x35f93: 0x6d83d420, + 0x35f94: 0x6d83d620, 0x35f95: 0x6d83d820, 0x35f96: 0x6d83da20, 0x35f97: 0x6d83dc20, + 0x35f98: 0x6d83de20, 0x35f99: 0x6d83e020, 0x35f9a: 0x6d83e220, 0x35f9b: 0x6d83e420, + 0x35f9c: 0x6d83e620, 0x35f9d: 0x6d83e820, 0x35f9e: 0x6d83ea20, 0x35f9f: 0x6d83ec20, + 0x35fa0: 0x6d793420, 0x35fa1: 0x6d83ee20, 0x35fa2: 0x6d83f020, 0x35fa3: 0x6d83f220, + 0x35fa4: 0x6d83f420, 0x35fa5: 0x6d83f620, 0x35fa6: 0x6d83f820, 0x35fa7: 0x6d83fa20, + 0x35fa8: 0x6d83fc20, 0x35fa9: 0x6d83fe20, 0x35faa: 0x6d840020, 0x35fab: 0x6d840220, + 0x35fac: 0x6d840420, 0x35fad: 0x6d840620, 0x35fae: 0x6d840820, 0x35faf: 0x6d840a20, + 0x35fb0: 0x6d840c20, 0x35fb1: 0x6d840e20, 0x35fb2: 0x6d841020, 0x35fb3: 0x6d841220, + 0x35fb4: 0x6d841420, 0x35fb5: 0x6da8ae20, 0x35fb6: 0x6da8b020, 0x35fb7: 0x6da8b220, + 0x35fb8: 0x6da8b420, 0x35fb9: 0x6da8b620, 0x35fba: 0x6da8b820, 0x35fbb: 0x6da8ba20, + 0x35fbc: 0x6da8bc20, 0x35fbd: 0x6da8be20, 0x35fbe: 0x6da8c020, 0x35fbf: 0x6da8c220, + // Block 0xd7f, offset 0x35fc0 + 0x35fc0: 0x6da8c420, 0x35fc1: 0x6da8c620, 0x35fc2: 0x6da8c820, 0x35fc3: 0x6da8ca20, + 0x35fc4: 0x6da8cc20, 0x35fc5: 0x6da8ce20, 0x35fc6: 0x6da8d020, 0x35fc7: 0x6da8d220, + 0x35fc8: 0x6da8d420, 0x35fc9: 0x6da8d620, 0x35fca: 0x6da8d820, 0x35fcb: 0x6da8da20, + 0x35fcc: 0x6da8dc20, 0x35fcd: 0x6da8de20, 0x35fce: 0x6da8e020, 0x35fcf: 0x6da8e220, + 0x35fd0: 0x6da8e420, 0x35fd1: 0x6da8e620, 0x35fd2: 0x6da8e820, 0x35fd3: 0x6da8ea20, + 0x35fd4: 0x6da8ec20, 0x35fd5: 0x6da8ee20, 0x35fd6: 0x6da8f020, 0x35fd7: 0x6da8f220, + 0x35fd8: 0x6da8f420, 0x35fd9: 0x6da8f620, 0x35fda: 0x6da8f820, 0x35fdb: 0x6da8fa20, + 0x35fdc: 0x6da8fc20, 0x35fdd: 0x6da8fe20, 0x35fde: 0x6da90020, 0x35fdf: 0x6da90220, + 0x35fe0: 0x6da90420, 0x35fe1: 0x6da90620, 0x35fe2: 0x6da90820, 0x35fe3: 0x6da90a20, + 0x35fe4: 0x6dc9d420, 0x35fe5: 0x6dc9d620, 0x35fe6: 0x6dc9d820, 0x35fe7: 0x6dc9da20, + 0x35fe8: 0x6dc9dc20, 0x35fe9: 0x6dc9de20, 0x35fea: 0x6dc9e020, 0x35feb: 0x6dc9e220, + 0x35fec: 0x6dc9e420, 0x35fed: 0x6dc9e620, 0x35fee: 0x6dc9e820, 0x35fef: 0x6dc9ea20, + 0x35ff0: 0x6dc9ec20, 0x35ff1: 0x6dc9ee20, 0x35ff2: 0x6dc9f020, 0x35ff3: 0x6dc9f220, + 0x35ff4: 0x6dc9f420, 0x35ff5: 0x6dc9f620, 0x35ff6: 0x6dc9f820, 0x35ff7: 0x6dc9fa20, + 0x35ff8: 0x6dc9fc20, 0x35ff9: 0x6dc9fe20, 0x35ffa: 0x6dca0020, 0x35ffb: 0x6dca0220, + 0x35ffc: 0x6dca0420, 0x35ffd: 0x6dca0620, 0x35ffe: 0x6dca0820, 0x35fff: 0x6dca0a20, + // Block 0xd80, offset 0x36000 + 0x36000: 0x6dca0c20, 0x36001: 0x6dca0e20, 0x36002: 0x6dca1020, 0x36003: 0x6dd07420, + 0x36004: 0x6dca1220, 0x36005: 0x6dca1420, 0x36006: 0x6dca1620, 0x36007: 0x6dca1820, + 0x36008: 0x6dca1a20, 0x36009: 0x6dca1c20, 0x3600a: 0x6dca1e20, 0x3600b: 0x6dca2020, + 0x3600c: 0x6dca2220, 0x3600d: 0x6dca2420, 0x3600e: 0x6dca2620, 0x3600f: 0x6dca2820, + 0x36010: 0x6dca2a20, 0x36011: 0x6dca2c20, 0x36012: 0x6de58e20, 0x36013: 0x6de59020, + 0x36014: 0x6de59220, 0x36015: 0x6de59420, 0x36016: 0x6de59620, 0x36017: 0x6de59820, + 0x36018: 0x6de59a20, 0x36019: 0x6de59c20, 0x3601a: 0x6de59e20, 0x3601b: 0x6de5a020, + 0x3601c: 0x6de5a220, 0x3601d: 0x6de5a420, 0x3601e: 0x6de5a620, 0x3601f: 0x6de5a820, + 0x36020: 0x6de5aa20, 0x36021: 0x6de5ac20, 0x36022: 0x6de5ae20, 0x36023: 0x6de5b020, + 0x36024: 0x6de5b220, 0x36025: 0x6de5b420, 0x36026: 0x6de5b620, 0x36027: 0x6de5b820, + 0x36028: 0x6de5ba20, 0x36029: 0x6de5bc20, 0x3602a: 0x6de5be20, 0x3602b: 0x6de5c020, + 0x3602c: 0x6de5c220, 0x3602d: 0x6de5c420, 0x3602e: 0x6de5c620, 0x3602f: 0x6de5c820, + 0x36030: 0x6de5ca20, 0x36031: 0x6de5cc20, 0x36032: 0x6de5ce20, 0x36033: 0x6dfc6620, + 0x36034: 0x6dfc6820, 0x36035: 0x6dfc6a20, 0x36036: 0x6dfc6c20, 0x36037: 0x6dfc6e20, + 0x36038: 0x6dfc7020, 0x36039: 0x6dfc7220, 0x3603a: 0x6dfc7420, 0x3603b: 0x6dfc7620, + 0x3603c: 0x6dfc7820, 0x3603d: 0x6dfc7a20, 0x3603e: 0x6dfc7c20, 0x3603f: 0x6dfc7e20, + // Block 0xd81, offset 0x36040 + 0x36040: 0x6dfc8020, 0x36041: 0x6dfc8220, 0x36042: 0x6dfc8420, 0x36043: 0x6dfc8620, + 0x36044: 0x6dfc8820, 0x36045: 0x6dfc8a20, 0x36046: 0x6dfc8c20, 0x36047: 0x6dfc8e20, + 0x36048: 0x6dfc9020, 0x36049: 0x6dfc9220, 0x3604a: 0x6dfc9420, 0x3604b: 0x6dfc9620, + 0x3604c: 0x6dfc9820, 0x3604d: 0x6dfc9a20, 0x3604e: 0x6dfc9c20, 0x3604f: 0x6dfc9e20, + 0x36050: 0x6dfca020, 0x36051: 0x6dfca220, 0x36052: 0x6dfca420, 0x36053: 0x6dfca620, + 0x36054: 0x6dfca820, 0x36055: 0x6dfcaa20, 0x36056: 0x6dfcac20, 0x36057: 0x6dfcae20, + 0x36058: 0x6dfcb020, 0x36059: 0x6dfcb220, 0x3605a: 0x6dfcb420, 0x3605b: 0x6dfcb620, + 0x3605c: 0x6dfcb820, 0x3605d: 0x6dfcba20, 0x3605e: 0x6dfcbc20, 0x3605f: 0x6dfcbe20, + 0x36060: 0x6dfcc020, 0x36061: 0x6e0f8420, 0x36062: 0x6e0f8620, 0x36063: 0x6e0f8820, + 0x36064: 0x6e0f8a20, 0x36065: 0x6e0f8c20, 0x36066: 0x6e0f8e20, 0x36067: 0x6e0f9020, + 0x36068: 0x6dfcc220, 0x36069: 0x6e1e7820, 0x3606a: 0x6e0f9220, 0x3606b: 0x6e0f9420, + 0x3606c: 0x6e0f9620, 0x3606d: 0x6e0f9820, 0x3606e: 0x6e0f9a20, 0x3606f: 0x6e0f9c20, + 0x36070: 0x6e0f9e20, 0x36071: 0x6e0fa020, 0x36072: 0x6e0fa220, 0x36073: 0x6e0fa420, + 0x36074: 0x6e0fa620, 0x36075: 0x6e0fa820, 0x36076: 0x6e0faa20, 0x36077: 0x6e0fac20, + 0x36078: 0x6e0fae20, 0x36079: 0x6e0fb020, 0x3607a: 0x6e1e7a20, 0x3607b: 0x6e1e7c20, + 0x3607c: 0x6e29de20, 0x3607d: 0x6e1e7e20, 0x3607e: 0x6e1e8020, 0x3607f: 0x6e1e8220, + // Block 0xd82, offset 0x36080 + 0x36080: 0x6e1e8420, 0x36081: 0x6e1e8620, 0x36082: 0x6e1e8820, 0x36083: 0x6e1e8a20, + 0x36084: 0x6e1e8c20, 0x36085: 0x6e1e8e20, 0x36086: 0x6e1e9020, 0x36087: 0x6e1e9220, + 0x36088: 0x6e29e020, 0x36089: 0x6e29e220, 0x3608a: 0x6e29e420, 0x3608b: 0x6e29e620, + 0x3608c: 0x6e29e820, 0x3608d: 0x6e29ea20, 0x3608e: 0x6e29ec20, 0x3608f: 0x6e2b4a20, + 0x36090: 0x6e29ee20, 0x36091: 0x6e29f020, 0x36092: 0x6e29f220, 0x36093: 0x6e29f420, + 0x36094: 0x6e29f620, 0x36095: 0x6e29f820, 0x36096: 0x6e29fa20, 0x36097: 0x6e32c220, + 0x36098: 0x6e32c420, 0x36099: 0x6e32c620, 0x3609a: 0x6e32c820, 0x3609b: 0x6e32ca20, + 0x3609c: 0x6e38f820, 0x3609d: 0x6e38fa20, 0x3609e: 0x6e38fc20, 0x3609f: 0x6e33dc20, + 0x360a0: 0x6e38fe20, 0x360a1: 0x6e390020, 0x360a2: 0x6e390220, 0x360a3: 0x6e390420, + 0x360a4: 0x6e3d6820, 0x360a5: 0x6e3d6a20, 0x360a6: 0x6e406c20, 0x360a7: 0x6e406e20, + 0x360a8: 0x6e407020, 0x360a9: 0x6e407220, 0x360aa: 0x6e42b820, 0x360ab: 0x6e443620, + 0x360ac: 0x6e42ba20, 0x360ad: 0x6e452420, 0x360ae: 0x6e468420, 0x360af: 0x6c04da20, + 0x360b0: 0x6c04dc20, 0x360b1: 0x6c09d020, 0x360b2: 0x6c23d020, 0x360b3: 0x6c23d220, + 0x360b4: 0x6c23d420, 0x360b5: 0x6c23d620, 0x360b6: 0x6c3a2c20, 0x360b7: 0x6c3a2e20, + 0x360b8: 0x6c3a3020, 0x360b9: 0x6c3a3220, 0x360ba: 0x6c3a3420, 0x360bb: 0x6c3a3620, + 0x360bc: 0x6c3a3820, 0x360bd: 0x6c55f420, 0x360be: 0x6c55f620, 0x360bf: 0x6c55f820, + // Block 0xd83, offset 0x360c0 + 0x360c0: 0x6c55fa20, 0x360c1: 0x6c55fc20, 0x360c2: 0x6c55fe20, 0x360c3: 0x6c560020, + 0x360c4: 0x6c560220, 0x360c5: 0x6c560420, 0x360c6: 0x6c560620, 0x360c7: 0x6c560820, + 0x360c8: 0x6c560a20, 0x360c9: 0x6c560c20, 0x360ca: 0x6c560e20, 0x360cb: 0x6c561020, + 0x360cc: 0x6c78cc20, 0x360cd: 0x6c78ce20, 0x360ce: 0x6c78d020, 0x360cf: 0x6c78d220, + 0x360d0: 0x6ca1d020, 0x360d1: 0x6ca1d220, 0x360d2: 0x6ca1d420, 0x360d3: 0x6ca1d620, + 0x360d4: 0x6ccf0c20, 0x360d5: 0x6ccf0e20, 0x360d6: 0x6ccf1020, 0x360d7: 0x6cbc6220, + 0x360d8: 0x6ccf1220, 0x360d9: 0x6ccf1420, 0x360da: 0x6ccf1620, 0x360db: 0x6ccf1820, + 0x360dc: 0x6cfd2e20, 0x360dd: 0x6cfd3020, 0x360de: 0x6cfd3220, 0x360df: 0x6cfd3420, + 0x360e0: 0x6cfd3620, 0x360e1: 0x6cfd3820, 0x360e2: 0x6d2bde20, 0x360e3: 0x6d2be020, + 0x360e4: 0x6d2be220, 0x360e5: 0x6d2be420, 0x360e6: 0x6d2be620, 0x360e7: 0x6d590620, + 0x360e8: 0x6d590820, 0x360e9: 0x6d590a20, 0x360ea: 0x6d590c20, 0x360eb: 0x6d590e20, + 0x360ec: 0x6d591020, 0x360ed: 0x6d591220, 0x360ee: 0x6d842a20, 0x360ef: 0x6d842c20, + 0x360f0: 0x6d842e20, 0x360f1: 0x6d843020, 0x360f2: 0x6da91c20, 0x360f3: 0x6da91e20, + 0x360f4: 0x6da92020, 0x360f5: 0x6da92220, 0x360f6: 0x6da92420, 0x360f7: 0x6da92620, + 0x360f8: 0x6da92820, 0x360f9: 0x6dca3a20, 0x360fa: 0x6de5d420, 0x360fb: 0x6dca3c20, + 0x360fc: 0x6da92a20, 0x360fd: 0x6dca3e20, 0x360fe: 0x6dca4020, 0x360ff: 0x6de5d620, + // Block 0xd84, offset 0x36100 + 0x36100: 0x6de5d820, 0x36101: 0x6de9a820, 0x36102: 0x6dfcca20, 0x36103: 0x6dfccc20, + 0x36104: 0x6dfcce20, 0x36105: 0x6dfcd020, 0x36106: 0x6dfcd220, 0x36107: 0x6e0fb420, + 0x36108: 0x6e29fe20, 0x36109: 0x6e2a0020, 0x3610a: 0x6e2a0220, 0x3610b: 0x6e32ce20, + 0x3610c: 0x6e390a20, 0x3610d: 0x6e390c20, 0x3610e: 0x6c23da20, 0x3610f: 0x6c23dc20, + 0x36110: 0x6c3a3c20, 0x36111: 0x6c3a3e20, 0x36112: 0x6c561620, 0x36113: 0x6c78d820, + 0x36114: 0x6c78da20, 0x36115: 0x6ca1dc20, 0x36116: 0x6ccf2220, 0x36117: 0x6ccf2420, + 0x36118: 0x6cfd4220, 0x36119: 0x6d2be820, 0x3611a: 0x6d2bea20, 0x3611b: 0x6d843220, + 0x3611c: 0x6c09d220, 0x3611d: 0x6c3a4220, 0x3611e: 0x6c561a20, 0x3611f: 0x6c561c20, + 0x36120: 0x6c78de20, 0x36121: 0x6c78e020, 0x36122: 0x6ca1e220, 0x36123: 0x6ccf2620, + 0x36124: 0x6cfd4420, 0x36125: 0x6cfd4620, 0x36126: 0x6d591820, 0x36127: 0x6d591a20, + 0x36128: 0x6d591c20, 0x36129: 0x6d843420, 0x3612a: 0x6c04e620, 0x3612b: 0x6c09d420, + 0x3612c: 0x6c09d620, 0x3612d: 0x6c137c20, 0x3612e: 0x6c23de20, 0x3612f: 0x6c3a4820, + 0x36130: 0x6c3a4a20, 0x36131: 0x6c3a4c20, 0x36132: 0x6c562220, 0x36133: 0x6c562420, + 0x36134: 0x6c562620, 0x36135: 0x6c562820, 0x36136: 0x6c78e420, 0x36137: 0x6c78e620, + 0x36138: 0x6c78e820, 0x36139: 0x6c78ea20, 0x3613a: 0x6c78ec20, 0x3613b: 0x6ca1e420, + 0x3613c: 0x6ca1e620, 0x3613d: 0x6ca1e820, 0x3613e: 0x6ca1ea20, 0x3613f: 0x6ca1ec20, + // Block 0xd85, offset 0x36140 + 0x36140: 0x6ca1ee20, 0x36141: 0x6ca1f020, 0x36142: 0x6ca1f220, 0x36143: 0x6ca1f420, + 0x36144: 0x6ccf2a20, 0x36145: 0x6ccf2c20, 0x36146: 0x6ccf2e20, 0x36147: 0x6ccf3020, + 0x36148: 0x6ccf3220, 0x36149: 0x6ccf3420, 0x3614a: 0x6ccf3620, 0x3614b: 0x6ccf3820, + 0x3614c: 0x6cfd4a20, 0x3614d: 0x6cfd4c20, 0x3614e: 0x6cfd4e20, 0x3614f: 0x6d2bf220, + 0x36150: 0x6d2bf420, 0x36151: 0x6d2bf620, 0x36152: 0x6d2bf820, 0x36153: 0x6d592020, + 0x36154: 0x6d592220, 0x36155: 0x6d592420, 0x36156: 0x6d843620, 0x36157: 0x6d843820, + 0x36158: 0x6d843a20, 0x36159: 0x6d843c20, 0x3615a: 0x6d843e20, 0x3615b: 0x6d844020, + 0x3615c: 0x6da93420, 0x3615d: 0x6da93620, 0x3615e: 0x6da93820, 0x3615f: 0x6da93a20, + 0x36160: 0x6de5de20, 0x36161: 0x6de5e020, 0x36162: 0x6dfcd420, 0x36163: 0x6e1e9820, + 0x36164: 0x6e2a0420, 0x36165: 0x6e407620, 0x36166: 0x6e42bc20, 0x36167: 0x6e42be20, + 0x36168: 0x6c09d820, 0x36169: 0x6c23e020, 0x3616a: 0x6c23e220, 0x3616b: 0x6c23e420, + 0x3616c: 0x6c3a5420, 0x3616d: 0x6c3a5620, 0x3616e: 0x6c3a5820, 0x3616f: 0x6c3a5a20, + 0x36170: 0x6c3a5c20, 0x36171: 0x6c562e20, 0x36172: 0x6c563020, 0x36173: 0x6c563220, + 0x36174: 0x6c563420, 0x36175: 0x6c563620, 0x36176: 0x6c563820, 0x36177: 0x6c563a20, + 0x36178: 0x6c563c20, 0x36179: 0x6c563e20, 0x3617a: 0x6c78f420, 0x3617b: 0x6c78f620, + 0x3617c: 0x6c78f820, 0x3617d: 0x6c78fa20, 0x3617e: 0x6c78fc20, 0x3617f: 0x6c78fe20, + // Block 0xd86, offset 0x36180 + 0x36180: 0x6ca1f820, 0x36181: 0x6ca1fa20, 0x36182: 0x6ca1fc20, 0x36183: 0x6ca1fe20, + 0x36184: 0x6ca20020, 0x36185: 0x6ca20220, 0x36186: 0x6ca20420, 0x36187: 0x6ccf4220, + 0x36188: 0x6ccf4420, 0x36189: 0x6ccf4620, 0x3618a: 0x6ccf4820, 0x3618b: 0x6ccf4a20, + 0x3618c: 0x6ccf4c20, 0x3618d: 0x6ccf4e20, 0x3618e: 0x6ccf5020, 0x3618f: 0x6ccf5220, + 0x36190: 0x6ccf5420, 0x36191: 0x6ccf5620, 0x36192: 0x6ccf5820, 0x36193: 0x6ccf5a20, + 0x36194: 0x6ccf5c20, 0x36195: 0x6ccf5e20, 0x36196: 0x6ccf6020, 0x36197: 0x6ccf6220, + 0x36198: 0x6cfd5a20, 0x36199: 0x6cfd5c20, 0x3619a: 0x6cfd5e20, 0x3619b: 0x6cfd6020, + 0x3619c: 0x6cfd6220, 0x3619d: 0x6cfd6420, 0x3619e: 0x6cfd6620, 0x3619f: 0x6cfd6820, + 0x361a0: 0x6cfd6a20, 0x361a1: 0x6cfd6c20, 0x361a2: 0x6d2c0020, 0x361a3: 0x6d2c0220, + 0x361a4: 0x6d2c0420, 0x361a5: 0x6d2c0620, 0x361a6: 0x6d2c0820, 0x361a7: 0x6d2c0a20, + 0x361a8: 0x6d592e20, 0x361a9: 0x6d593020, 0x361aa: 0x6d593220, 0x361ab: 0x6d593420, + 0x361ac: 0x6d593620, 0x361ad: 0x6d593820, 0x361ae: 0x6d593a20, 0x361af: 0x6d593c20, + 0x361b0: 0x6d593e20, 0x361b1: 0x6d594020, 0x361b2: 0x6d594220, 0x361b3: 0x6d844220, + 0x361b4: 0x6d844420, 0x361b5: 0x6d844620, 0x361b6: 0x6d844820, 0x361b7: 0x6d844a20, + 0x361b8: 0x6d844c20, 0x361b9: 0x6d844e20, 0x361ba: 0x6da93e20, 0x361bb: 0x6da94020, + 0x361bc: 0x6da94220, 0x361bd: 0x6da94420, 0x361be: 0x6da94620, 0x361bf: 0x6dca4620, + // Block 0xd87, offset 0x361c0 + 0x361c0: 0x6dca4820, 0x361c1: 0x6dca4a20, 0x361c2: 0x6dca4c20, 0x361c3: 0x6dfcd620, + 0x361c4: 0x6e0fb820, 0x361c5: 0x6c23e620, 0x361c6: 0x6c3a5e20, 0x361c7: 0x6c564020, + 0x361c8: 0x6c790420, 0x361c9: 0x6c790620, 0x361ca: 0x6ca20a20, 0x361cb: 0x6ca20c20, + 0x361cc: 0x6ccf6820, 0x361cd: 0x6ccf6a20, 0x361ce: 0x6ccf6c20, 0x361cf: 0x6ccf6e20, + 0x361d0: 0x6cfd6e20, 0x361d1: 0x6d2c0c20, 0x361d2: 0x6d594420, 0x361d3: 0x6dca4e20, + 0x361d4: 0x6c09da20, 0x361d5: 0x6c138620, 0x361d6: 0x6c138820, 0x361d7: 0x6c138a20, + 0x361d8: 0x6c23f620, 0x361d9: 0x6c23f820, 0x361da: 0x6c23fa20, 0x361db: 0x6c23fc20, + 0x361dc: 0x6c3a7c20, 0x361dd: 0x6c3a7e20, 0x361de: 0x6c3a8020, 0x361df: 0x6c3a8220, + 0x361e0: 0x6c3a8420, 0x361e1: 0x6c3a8620, 0x361e2: 0x6c3a8820, 0x361e3: 0x6c3a8a20, + 0x361e4: 0x6c3a8c20, 0x361e5: 0x6c3a8e20, 0x361e6: 0x6c3a9020, 0x361e7: 0x6c3a9220, + 0x361e8: 0x6c3a9420, 0x361e9: 0x6c3a9620, 0x361ea: 0x6c3a9820, 0x361eb: 0x6c3a9a20, + 0x361ec: 0x6c3a9c20, 0x361ed: 0x6c3a9e20, 0x361ee: 0x6c3aa020, 0x361ef: 0x6c3aa220, + 0x361f0: 0x6c3aa420, 0x361f1: 0x6c3aa620, 0x361f2: 0x6c3aa820, 0x361f3: 0x6c3aaa20, + 0x361f4: 0x6c3aac20, 0x361f5: 0x6c3aae20, 0x361f6: 0x6c3ab020, 0x361f7: 0x6c3ab220, + 0x361f8: 0x6c565e20, 0x361f9: 0x6c566020, 0x361fa: 0x6c566220, 0x361fb: 0x6c566420, + 0x361fc: 0x6c566620, 0x361fd: 0x6c566820, 0x361fe: 0x6c566a20, 0x361ff: 0x6c566c20, + // Block 0xd88, offset 0x36200 + 0x36200: 0x6c566e20, 0x36201: 0x6c567020, 0x36202: 0x6c567220, 0x36203: 0x6c567420, + 0x36204: 0x6c567620, 0x36205: 0x6c567820, 0x36206: 0x6c567a20, 0x36207: 0x6c567c20, + 0x36208: 0x6c567e20, 0x36209: 0x6c568020, 0x3620a: 0x6c568220, 0x3620b: 0x6c568420, + 0x3620c: 0x6c568620, 0x3620d: 0x6c568820, 0x3620e: 0x6c568a20, 0x3620f: 0x6c568c20, + 0x36210: 0x6c568e20, 0x36211: 0x6c791a20, 0x36212: 0x6c791c20, 0x36213: 0x6c791e20, + 0x36214: 0x6c792020, 0x36215: 0x6c792220, 0x36216: 0x6c792420, 0x36217: 0x6c792620, + 0x36218: 0x6c792820, 0x36219: 0x6c792a20, 0x3621a: 0x6c792c20, 0x3621b: 0x6ca22a20, + 0x3621c: 0x6ca22c20, 0x3621d: 0x6ca22e20, 0x3621e: 0x6ca23020, 0x3621f: 0x6ca23220, + 0x36220: 0x6ca23420, 0x36221: 0x6ca23620, 0x36222: 0x6ca23820, 0x36223: 0x6ca23a20, + 0x36224: 0x6ca23c20, 0x36225: 0x6ca23e20, 0x36226: 0x6ca24020, 0x36227: 0x6ca24220, + 0x36228: 0x6ca24420, 0x36229: 0x6ca24620, 0x3622a: 0x6ca24820, 0x3622b: 0x6ca24a20, + 0x3622c: 0x6ca24c20, 0x3622d: 0x6ca24e20, 0x3622e: 0x6ca25020, 0x3622f: 0x6ccf8e20, + 0x36230: 0x6ccf9020, 0x36231: 0x6ccf9220, 0x36232: 0x6ccf9420, 0x36233: 0x6ccf9620, + 0x36234: 0x6ccf9820, 0x36235: 0x6ccf9a20, 0x36236: 0x6ccf9c20, 0x36237: 0x6ccf9e20, + 0x36238: 0x6ccfa020, 0x36239: 0x6ccfa220, 0x3623a: 0x6ccfa420, 0x3623b: 0x6ccfa620, + 0x3623c: 0x6ccfa820, 0x3623d: 0x6ccfaa20, 0x3623e: 0x6ccfac20, 0x3623f: 0x6ccfae20, + // Block 0xd89, offset 0x36240 + 0x36240: 0x6ccfb020, 0x36241: 0x6ccfb220, 0x36242: 0x6ccfb420, 0x36243: 0x6ccfb620, + 0x36244: 0x6ccfb820, 0x36245: 0x6ccfba20, 0x36246: 0x6ccfbc20, 0x36247: 0x6ccfbe20, + 0x36248: 0x6ccfc020, 0x36249: 0x6ccfc220, 0x3624a: 0x6ccfc420, 0x3624b: 0x6ccfc620, + 0x3624c: 0x6ccfc820, 0x3624d: 0x6cfd8420, 0x3624e: 0x6cfd8620, 0x3624f: 0x6cfd8820, + 0x36250: 0x6cfd8a20, 0x36251: 0x6cfd8c20, 0x36252: 0x6cfd8e20, 0x36253: 0x6cfd9020, + 0x36254: 0x6cfd9220, 0x36255: 0x6cfd9420, 0x36256: 0x6cfd9620, 0x36257: 0x6cfd9820, + 0x36258: 0x6cfd9a20, 0x36259: 0x6cfd9c20, 0x3625a: 0x6cfd9e20, 0x3625b: 0x6cfda020, + 0x3625c: 0x6cf91a20, 0x3625d: 0x6cfda220, 0x3625e: 0x6cfda420, 0x3625f: 0x6cfda620, + 0x36260: 0x6cfda820, 0x36261: 0x6cfdaa20, 0x36262: 0x6cfdac20, 0x36263: 0x6cfdae20, + 0x36264: 0x6cfdb020, 0x36265: 0x6cfdb220, 0x36266: 0x6cfdb420, 0x36267: 0x6cfdb620, + 0x36268: 0x6cfdb820, 0x36269: 0x6d2c2220, 0x3626a: 0x6d2c2420, 0x3626b: 0x6d2c2620, + 0x3626c: 0x6d2c2820, 0x3626d: 0x6d2c2a20, 0x3626e: 0x6d2c2c20, 0x3626f: 0x6d2c2e20, + 0x36270: 0x6d2c3020, 0x36271: 0x6d2c3220, 0x36272: 0x6d2c3420, 0x36273: 0x6d2c3620, + 0x36274: 0x6d2c3820, 0x36275: 0x6d2c3a20, 0x36276: 0x6d2c3c20, 0x36277: 0x6d2c3e20, + 0x36278: 0x6d2c4020, 0x36279: 0x6d2c4220, 0x3627a: 0x6d2c4420, 0x3627b: 0x6d2c4620, + 0x3627c: 0x6d2c4820, 0x3627d: 0x6d2c4a20, 0x3627e: 0x6d2c4c20, 0x3627f: 0x6cfdba20, + // Block 0xd8a, offset 0x36280 + 0x36280: 0x6d2c4e20, 0x36281: 0x6d2c5020, 0x36282: 0x6d2c5220, 0x36283: 0x6d2c5420, + 0x36284: 0x6d2c5620, 0x36285: 0x6d2c5820, 0x36286: 0x6d2c5a20, 0x36287: 0x6d2c5c20, + 0x36288: 0x6d2c5e20, 0x36289: 0x6d2c6020, 0x3628a: 0x6d595820, 0x3628b: 0x6d595a20, + 0x3628c: 0x6d595c20, 0x3628d: 0x6d595e20, 0x3628e: 0x6d596020, 0x3628f: 0x6d596220, + 0x36290: 0x6d596420, 0x36291: 0x6d596620, 0x36292: 0x6d596820, 0x36293: 0x6d596a20, + 0x36294: 0x6d596c20, 0x36295: 0x6d596e20, 0x36296: 0x6d597020, 0x36297: 0x6d55d820, + 0x36298: 0x6d597220, 0x36299: 0x6d597420, 0x3629a: 0x6d597620, 0x3629b: 0x6d597820, + 0x3629c: 0x6d597a20, 0x3629d: 0x6d597c20, 0x3629e: 0x6d597e20, 0x3629f: 0x6d598020, + 0x362a0: 0x6d598220, 0x362a1: 0x6d846020, 0x362a2: 0x6d846220, 0x362a3: 0x6d846420, + 0x362a4: 0x6d846620, 0x362a5: 0x6d846820, 0x362a6: 0x6d846a20, 0x362a7: 0x6d846c20, + 0x362a8: 0x6d846e20, 0x362a9: 0x6d847020, 0x362aa: 0x6d847220, 0x362ab: 0x6d847420, + 0x362ac: 0x6d847620, 0x362ad: 0x6d847820, 0x362ae: 0x6d847a20, 0x362af: 0x6da95020, + 0x362b0: 0x6da95220, 0x362b1: 0x6da95420, 0x362b2: 0x6da95620, 0x362b3: 0x6da95820, + 0x362b4: 0x6da95a20, 0x362b5: 0x6da95c20, 0x362b6: 0x6da95e20, 0x362b7: 0x6da96020, + 0x362b8: 0x6da96220, 0x362b9: 0x6dca5420, 0x362ba: 0x6dca5620, 0x362bb: 0x6de5f220, + 0x362bc: 0x6de5f420, 0x362bd: 0x6de5f620, 0x362be: 0x6de5f820, 0x362bf: 0x6de5fa20, + // Block 0xd8b, offset 0x362c0 + 0x362c0: 0x6de5fc20, 0x362c1: 0x6de5fe20, 0x362c2: 0x6dfcdc20, 0x362c3: 0x6dfcde20, + 0x362c4: 0x6dfce020, 0x362c5: 0x6dfce220, 0x362c6: 0x6dfce420, 0x362c7: 0x6e0fbc20, + 0x362c8: 0x6e0fbe20, 0x362c9: 0x6e0fc020, 0x362ca: 0x6e0fc220, 0x362cb: 0x6e0fc420, + 0x362cc: 0x6e1e9e20, 0x362cd: 0x6e1ea020, 0x362ce: 0x6e1ea220, 0x362cf: 0x6e1ea420, + 0x362d0: 0x6e1ea620, 0x362d1: 0x6e2a0620, 0x362d2: 0x6e2a0820, 0x362d3: 0x6e2a0a20, + 0x362d4: 0x6e32d020, 0x362d5: 0x6e32d220, 0x362d6: 0x6e391020, 0x362d7: 0x6e391220, + 0x362d8: 0x6e391420, 0x362d9: 0x6e42c020, 0x362da: 0x6c04f820, 0x362db: 0x6c09e220, + 0x362dc: 0x6c09e420, 0x362dd: 0x6c09e620, 0x362de: 0x6c09e820, 0x362df: 0x6c09ea20, + 0x362e0: 0x6c09ec20, 0x362e1: 0x6c139a20, 0x362e2: 0x6c139c20, 0x362e3: 0x6c139e20, + 0x362e4: 0x6c13a020, 0x362e5: 0x6c13a220, 0x362e6: 0x6c13a420, 0x362e7: 0x6c13a620, + 0x362e8: 0x6c13a820, 0x362e9: 0x6c13aa20, 0x362ea: 0x6c13ac20, 0x362eb: 0x6c13ae20, + 0x362ec: 0x6c13b020, 0x362ed: 0x6c13b220, 0x362ee: 0x6c13b420, 0x362ef: 0x6c242820, + 0x362f0: 0x6c242a20, 0x362f1: 0x6c242c20, 0x362f2: 0x6c242e20, 0x362f3: 0x6c243020, + 0x362f4: 0x6c243220, 0x362f5: 0x6c243420, 0x362f6: 0x6c243620, 0x362f7: 0x6c243820, + 0x362f8: 0x6c243a20, 0x362f9: 0x6c243c20, 0x362fa: 0x6c243e20, 0x362fb: 0x6c244020, + 0x362fc: 0x6c244220, 0x362fd: 0x6c244420, 0x362fe: 0x6c244620, 0x362ff: 0x6c244820, + // Block 0xd8c, offset 0x36300 + 0x36300: 0x6c244a20, 0x36301: 0x6c244c20, 0x36302: 0x6c244e20, 0x36303: 0x6c245020, + 0x36304: 0x6c245220, 0x36305: 0x6c245420, 0x36306: 0x6c245620, 0x36307: 0x6c245820, + 0x36308: 0x6c245a20, 0x36309: 0x6c245c20, 0x3630a: 0x6c245e20, 0x3630b: 0x6c246020, + 0x3630c: 0x6c246220, 0x3630d: 0x6c246420, 0x3630e: 0x6c246620, 0x3630f: 0x6c3af620, + 0x36310: 0x6c3af820, 0x36311: 0x6c3afa20, 0x36312: 0x6c3afc20, 0x36313: 0x6c3afe20, + 0x36314: 0x6c3b0020, 0x36315: 0x6c3b0220, 0x36316: 0x6c3b0420, 0x36317: 0x6c3b0620, + 0x36318: 0x6c3b0820, 0x36319: 0x6c3b0a20, 0x3631a: 0x6c3b0c20, 0x3631b: 0x6c3b0e20, + 0x3631c: 0x6c3b1020, 0x3631d: 0x6c3b1220, 0x3631e: 0x6c3b1420, 0x3631f: 0x6c3b1620, + 0x36320: 0x6c3b1820, 0x36321: 0x6c3b1a20, 0x36322: 0x6c3b1c20, 0x36323: 0x6c3b1e20, + 0x36324: 0x6c3b2020, 0x36325: 0x6c3b2220, 0x36326: 0x6c3b2420, 0x36327: 0x6c3b2620, + 0x36328: 0x6c3b2820, 0x36329: 0x6c3b2a20, 0x3632a: 0x6c3b2c20, 0x3632b: 0x6c3b2e20, + 0x3632c: 0x6c3b3020, 0x3632d: 0x6c3b3220, 0x3632e: 0x6c246820, 0x3632f: 0x6c56cc20, + 0x36330: 0x6c56ce20, 0x36331: 0x6c56d020, 0x36332: 0x6c56d220, 0x36333: 0x6c56d420, + 0x36334: 0x6c56d620, 0x36335: 0x6c56d820, 0x36336: 0x6c56da20, 0x36337: 0x6c56dc20, + 0x36338: 0x6c56de20, 0x36339: 0x6c56e020, 0x3633a: 0x6c56e220, 0x3633b: 0x6c56e420, + 0x3633c: 0x6c56e620, 0x3633d: 0x6c56e820, 0x3633e: 0x6c56ea20, 0x3633f: 0x6c56ec20, + // Block 0xd8d, offset 0x36340 + 0x36340: 0x6c56ee20, 0x36341: 0x6c56f020, 0x36342: 0x6c56f220, 0x36343: 0x6c56f420, + 0x36344: 0x6c56f620, 0x36345: 0x6c56f820, 0x36346: 0x6c56fa20, 0x36347: 0x6c56fc20, + 0x36348: 0x6c56fe20, 0x36349: 0x6c570020, 0x3634a: 0x6c570220, 0x3634b: 0x6c570420, + 0x3634c: 0x6c570620, 0x3634d: 0x6c570820, 0x3634e: 0x6c570a20, 0x3634f: 0x6c570c20, + 0x36350: 0x6c570e20, 0x36351: 0x6c571020, 0x36352: 0x6c571220, 0x36353: 0x6c571420, + 0x36354: 0x6c571620, 0x36355: 0x6c571820, 0x36356: 0x6c571a20, 0x36357: 0x6c571c20, + 0x36358: 0x6c571e20, 0x36359: 0x6c796420, 0x3635a: 0x6c796620, 0x3635b: 0x6c796820, + 0x3635c: 0x6c796a20, 0x3635d: 0x6c796c20, 0x3635e: 0x6c796e20, 0x3635f: 0x6c797020, + 0x36360: 0x6c797220, 0x36361: 0x6c797420, 0x36362: 0x6c797620, 0x36363: 0x6c572020, + 0x36364: 0x6c797820, 0x36365: 0x6c797a20, 0x36366: 0x6c797c20, 0x36367: 0x6c797e20, + 0x36368: 0x6c798020, 0x36369: 0x6c798220, 0x3636a: 0x6c798420, 0x3636b: 0x6c798620, + 0x3636c: 0x6c798820, 0x3636d: 0x6c798a20, 0x3636e: 0x6c798c20, 0x3636f: 0x6c798e20, + 0x36370: 0x6c799020, 0x36371: 0x6c799220, 0x36372: 0x6c799420, 0x36373: 0x6c799620, + 0x36374: 0x6c799820, 0x36375: 0x6c799a20, 0x36376: 0x6c799c20, 0x36377: 0x6c799e20, + 0x36378: 0x6c79a020, 0x36379: 0x6c79a220, 0x3637a: 0x6c79a420, 0x3637b: 0x6c79a620, + 0x3637c: 0x6c79a820, 0x3637d: 0x6c79aa20, 0x3637e: 0x6c79ac20, 0x3637f: 0x6c79ae20, + // Block 0xd8e, offset 0x36380 + 0x36380: 0x6c79b020, 0x36381: 0x6c79b220, 0x36382: 0x6c79b420, 0x36383: 0x6ca29a20, + 0x36384: 0x6ca29c20, 0x36385: 0x6ca29e20, 0x36386: 0x6ca2a020, 0x36387: 0x6ca2a220, + 0x36388: 0x6ca2a420, 0x36389: 0x6ca2a620, 0x3638a: 0x6ca2a820, 0x3638b: 0x6ca2aa20, + 0x3638c: 0x6ca2ac20, 0x3638d: 0x6ca2ae20, 0x3638e: 0x6ca2b020, 0x3638f: 0x6ca2b220, + 0x36390: 0x6ca2b420, 0x36391: 0x6ca2b620, 0x36392: 0x6ca2b820, 0x36393: 0x6ca2ba20, + 0x36394: 0x6ca2bc20, 0x36395: 0x6ca2be20, 0x36396: 0x6ca2c020, 0x36397: 0x6ca2c220, + 0x36398: 0x6ca2c420, 0x36399: 0x6ca2c620, 0x3639a: 0x6ca2c820, 0x3639b: 0x6ca2ca20, + 0x3639c: 0x6cd00c20, 0x3639d: 0x6cd00e20, 0x3639e: 0x6cd01020, 0x3639f: 0x6cd01220, + 0x363a0: 0x6cd01420, 0x363a1: 0x6cd01620, 0x363a2: 0x6cd01820, 0x363a3: 0x6cd01a20, + 0x363a4: 0x6cd01c20, 0x363a5: 0x6cd01e20, 0x363a6: 0x6cd02020, 0x363a7: 0x6cd02220, + 0x363a8: 0x6cd02420, 0x363a9: 0x6cd02620, 0x363aa: 0x6cd02820, 0x363ab: 0x6cd02a20, + 0x363ac: 0x6cd02c20, 0x363ad: 0x6cd02e20, 0x363ae: 0x6cd03020, 0x363af: 0x6cd03220, + 0x363b0: 0x6cd03420, 0x363b1: 0x6cd03620, 0x363b2: 0x6cd03820, 0x363b3: 0x6cd03a20, + 0x363b4: 0x6cd03c20, 0x363b5: 0x6cf3a620, 0x363b6: 0x6cd03e20, 0x363b7: 0x6cd04020, + 0x363b8: 0x6cd04220, 0x363b9: 0x6cd04420, 0x363ba: 0x6cd04620, 0x363bb: 0x6cd04820, + 0x363bc: 0x6cd04a20, 0x363bd: 0x6cd04c20, 0x363be: 0x6cd04e20, 0x363bf: 0x6cd05020, + // Block 0xd8f, offset 0x363c0 + 0x363c0: 0x6cd05220, 0x363c1: 0x6cd05420, 0x363c2: 0x6cd05620, 0x363c3: 0x6cd05820, + 0x363c4: 0x6cd05a20, 0x363c5: 0x6cd05c20, 0x363c6: 0x6cd05e20, 0x363c7: 0x6cd06020, + 0x363c8: 0x6cd06220, 0x363c9: 0x6cd06420, 0x363ca: 0x6cd06620, 0x363cb: 0x6cd06820, + 0x363cc: 0x6cd06a20, 0x363cd: 0x6cfdee20, 0x363ce: 0x6cfdf020, 0x363cf: 0x6cfdf220, + 0x363d0: 0x6cfdf420, 0x363d1: 0x6cfdf620, 0x363d2: 0x6cfdf820, 0x363d3: 0x6cfdfa20, + 0x363d4: 0x6cfdfc20, 0x363d5: 0x6cfdfe20, 0x363d6: 0x6cfe0020, 0x363d7: 0x6cfe0220, + 0x363d8: 0x6cfe0420, 0x363d9: 0x6cfe0620, 0x363da: 0x6cfe0820, 0x363db: 0x6cfe0a20, + 0x363dc: 0x6cfe0c20, 0x363dd: 0x6cfe0e20, 0x363de: 0x6cfe1020, 0x363df: 0x6cfe1220, + 0x363e0: 0x6cfe1420, 0x363e1: 0x6cfe1620, 0x363e2: 0x6cfe1820, 0x363e3: 0x6cfe1a20, + 0x363e4: 0x6cfe1c20, 0x363e5: 0x6cfe1e20, 0x363e6: 0x6cfe2020, 0x363e7: 0x6cfe2220, + 0x363e8: 0x6cfe2420, 0x363e9: 0x6cfe2620, 0x363ea: 0x6cfe2820, 0x363eb: 0x6cfe2a20, + 0x363ec: 0x6cfe2c20, 0x363ed: 0x6cfe2e20, 0x363ee: 0x6cfe3020, 0x363ef: 0x6cfe3220, + 0x363f0: 0x6cfe3420, 0x363f1: 0x6cfe3620, 0x363f2: 0x6cfe3820, 0x363f3: 0x6cfe3a20, + 0x363f4: 0x6cfe3c20, 0x363f5: 0x6cfe3e20, 0x363f6: 0x6cfe4020, 0x363f7: 0x6cfe4220, + 0x363f8: 0x6cfe4420, 0x363f9: 0x6d2c8a20, 0x363fa: 0x6d2c8c20, 0x363fb: 0x6d2c8e20, + 0x363fc: 0x6d2c9020, 0x363fd: 0x6d2c9220, 0x363fe: 0x6d2c9420, 0x363ff: 0x6d2c9620, + // Block 0xd90, offset 0x36400 + 0x36400: 0x6d2c9820, 0x36401: 0x6d2c9a20, 0x36402: 0x6d2c9c20, 0x36403: 0x6d2c9e20, + 0x36404: 0x6d2ca020, 0x36405: 0x6d2ca220, 0x36406: 0x6d2ca420, 0x36407: 0x6d2ca620, + 0x36408: 0x6d2ca820, 0x36409: 0x6d2caa20, 0x3640a: 0x6d2cac20, 0x3640b: 0x6d2cae20, + 0x3640c: 0x6d2cb020, 0x3640d: 0x6d2cb220, 0x3640e: 0x6d2cb420, 0x3640f: 0x6d2cb620, + 0x36410: 0x6d2cb820, 0x36411: 0x6d2cba20, 0x36412: 0x6d2cbc20, 0x36413: 0x6d2cbe20, + 0x36414: 0x6d2cc020, 0x36415: 0x6d2cc220, 0x36416: 0x6d2cc420, 0x36417: 0x6d2cc620, + 0x36418: 0x6d2cc820, 0x36419: 0x6d2cca20, 0x3641a: 0x6d2ccc20, 0x3641b: 0x6d2cce20, + 0x3641c: 0x6d2cd020, 0x3641d: 0x6d2cd220, 0x3641e: 0x6d2cd420, 0x3641f: 0x6d2cd620, + 0x36420: 0x6d2cd820, 0x36421: 0x6d2cda20, 0x36422: 0x6d2cdc20, 0x36423: 0x6d59b220, + 0x36424: 0x6d59b420, 0x36425: 0x6d59b620, 0x36426: 0x6d59b820, 0x36427: 0x6d59ba20, + 0x36428: 0x6d59bc20, 0x36429: 0x6d59be20, 0x3642a: 0x6d59c020, 0x3642b: 0x6d59c220, + 0x3642c: 0x6d59c420, 0x3642d: 0x6d59c620, 0x3642e: 0x6d59c820, 0x3642f: 0x6d59ca20, + 0x36430: 0x6d59cc20, 0x36431: 0x6d59ce20, 0x36432: 0x6d59d020, 0x36433: 0x6d59d220, + 0x36434: 0x6d59d420, 0x36435: 0x6d59d620, 0x36436: 0x6d59d820, 0x36437: 0x6d59da20, + 0x36438: 0x6d59dc20, 0x36439: 0x6d59de20, 0x3643a: 0x6d59e020, 0x3643b: 0x6d59e220, + 0x3643c: 0x6d59e420, 0x3643d: 0x6d59e620, 0x3643e: 0x6d59e820, 0x3643f: 0x6d59ea20, + // Block 0xd91, offset 0x36440 + 0x36440: 0x6d59ec20, 0x36441: 0x6d59ee20, 0x36442: 0x6d59f020, 0x36443: 0x6d59f220, + 0x36444: 0x6d59f420, 0x36445: 0x6d59f620, 0x36446: 0x6d59f820, 0x36447: 0x6d59fa20, + 0x36448: 0x6d59fc20, 0x36449: 0x6d59fe20, 0x3644a: 0x6d5a0020, 0x3644b: 0x6d5a0220, + 0x3644c: 0x6d849820, 0x3644d: 0x6d849a20, 0x3644e: 0x6d849c20, 0x3644f: 0x6d849e20, + 0x36450: 0x6d84a020, 0x36451: 0x6d84a220, 0x36452: 0x6d84a420, 0x36453: 0x6d84a620, + 0x36454: 0x6d84a820, 0x36455: 0x6d84aa20, 0x36456: 0x6d84ac20, 0x36457: 0x6d84ae20, + 0x36458: 0x6d84b020, 0x36459: 0x6d84b220, 0x3645a: 0x6d84b420, 0x3645b: 0x6d84b620, + 0x3645c: 0x6d84b820, 0x3645d: 0x6d84ba20, 0x3645e: 0x6d84bc20, 0x3645f: 0x6d84be20, + 0x36460: 0x6d84c020, 0x36461: 0x6d84c220, 0x36462: 0x6d84c420, 0x36463: 0x6d84c620, + 0x36464: 0x6d84c820, 0x36465: 0x6d84ca20, 0x36466: 0x6da97820, 0x36467: 0x6da97a20, + 0x36468: 0x6da97c20, 0x36469: 0x6da97e20, 0x3646a: 0x6da98020, 0x3646b: 0x6da98220, + 0x3646c: 0x6da98420, 0x3646d: 0x6da98620, 0x3646e: 0x6da98820, 0x3646f: 0x6da98a20, + 0x36470: 0x6da98c20, 0x36471: 0x6da98e20, 0x36472: 0x6da99020, 0x36473: 0x6da99220, + 0x36474: 0x6dca6020, 0x36475: 0x6dca6220, 0x36476: 0x6dca6420, 0x36477: 0x6dca6620, + 0x36478: 0x6dca6820, 0x36479: 0x6dca6a20, 0x3647a: 0x6dca6c20, 0x3647b: 0x6dca6e20, + 0x3647c: 0x6dca7020, 0x3647d: 0x6dca7220, 0x3647e: 0x6dca7420, 0x3647f: 0x6dca7620, + // Block 0xd92, offset 0x36480 + 0x36480: 0x6dca7820, 0x36481: 0x6dca7a20, 0x36482: 0x6dca7c20, 0x36483: 0x6dca7e20, + 0x36484: 0x6dca8020, 0x36485: 0x6de60a20, 0x36486: 0x6de60c20, 0x36487: 0x6de60e20, + 0x36488: 0x6de61020, 0x36489: 0x6de61220, 0x3648a: 0x6de61420, 0x3648b: 0x6de61620, + 0x3648c: 0x6de61820, 0x3648d: 0x6dfcf420, 0x3648e: 0x6dfcf620, 0x3648f: 0x6dfcf820, + 0x36490: 0x6dfcfa20, 0x36491: 0x6e0fca20, 0x36492: 0x6e0fcc20, 0x36493: 0x6e0fce20, + 0x36494: 0x6e0fd020, 0x36495: 0x6e0fd220, 0x36496: 0x6e0fd420, 0x36497: 0x6e1eac20, + 0x36498: 0x6e1eae20, 0x36499: 0x6e1eb020, 0x3649a: 0x6e1eb220, 0x3649b: 0x6e2a1220, + 0x3649c: 0x6e2a1420, 0x3649d: 0x6e2a1620, 0x3649e: 0x6e2a1820, 0x3649f: 0x6e32d620, + 0x364a0: 0x6e32d820, 0x364a1: 0x6e32da20, 0x364a2: 0x6e32dc20, 0x364a3: 0x6e391620, + 0x364a4: 0x6e407a20, 0x364a5: 0x6c09f020, 0x364a6: 0x6c572820, 0x364a7: 0x6cd07420, + 0x364a8: 0x6d2ce020, 0x364a9: 0x6c04fc20, 0x364aa: 0x6c13c620, 0x364ab: 0x6c13c820, + 0x364ac: 0x6c13ca20, 0x364ad: 0x6c248820, 0x364ae: 0x6c248a20, 0x364af: 0x6c248c20, + 0x364b0: 0x6c248e20, 0x364b1: 0x6c249020, 0x364b2: 0x6c249220, 0x364b3: 0x6c249420, + 0x364b4: 0x6c249620, 0x364b5: 0x6c249820, 0x364b6: 0x6c249a20, 0x364b7: 0x6c249c20, + 0x364b8: 0x6c249e20, 0x364b9: 0x6c3b7020, 0x364ba: 0x6c3b7220, 0x364bb: 0x6c3b7420, + 0x364bc: 0x6c3b7620, 0x364bd: 0x6c3b7820, 0x364be: 0x6c3b7a20, 0x364bf: 0x6c3b7c20, + // Block 0xd93, offset 0x364c0 + 0x364c0: 0x6c3b7e20, 0x364c1: 0x6c3b8020, 0x364c2: 0x6c3b8220, 0x364c3: 0x6c3b8420, + 0x364c4: 0x6c3b8620, 0x364c5: 0x6c3b8820, 0x364c6: 0x6c3b8a20, 0x364c7: 0x6c3b8c20, + 0x364c8: 0x6c3b8e20, 0x364c9: 0x6c3b9020, 0x364ca: 0x6c3b9220, 0x364cb: 0x6c3b9420, + 0x364cc: 0x6c3b9620, 0x364cd: 0x6c3b9820, 0x364ce: 0x6c3b9a20, 0x364cf: 0x6c577620, + 0x364d0: 0x6c577820, 0x364d1: 0x6c577a20, 0x364d2: 0x6c577c20, 0x364d3: 0x6c577e20, + 0x364d4: 0x6c578020, 0x364d5: 0x6c578220, 0x364d6: 0x6c578420, 0x364d7: 0x6c578620, + 0x364d8: 0x6c578820, 0x364d9: 0x6c578a20, 0x364da: 0x6c578c20, 0x364db: 0x6c578e20, + 0x364dc: 0x6c579020, 0x364dd: 0x6c579220, 0x364de: 0x6c579420, 0x364df: 0x6c579620, + 0x364e0: 0x6c579820, 0x364e1: 0x6c579a20, 0x364e2: 0x6c579c20, 0x364e3: 0x6c579e20, + 0x364e4: 0x6c57a020, 0x364e5: 0x6c57a220, 0x364e6: 0x6c57a420, 0x364e7: 0x6c57a620, + 0x364e8: 0x6c57a820, 0x364e9: 0x6c57aa20, 0x364ea: 0x6c57ac20, 0x364eb: 0x6c57ae20, + 0x364ec: 0x6c57b020, 0x364ed: 0x6c57b220, 0x364ee: 0x6c57b420, 0x364ef: 0x6c57b620, + 0x364f0: 0x6c57b820, 0x364f1: 0x6c57ba20, 0x364f2: 0x6c57bc20, 0x364f3: 0x6c57be20, + 0x364f4: 0x6c57c020, 0x364f5: 0x6c7a1c20, 0x364f6: 0x6c7a1e20, 0x364f7: 0x6c7a2020, + 0x364f8: 0x6c7a2220, 0x364f9: 0x6c7a2420, 0x364fa: 0x6c7a2620, 0x364fb: 0x6c7a2820, + 0x364fc: 0x6c7a2a20, 0x364fd: 0x6c7a2c20, 0x364fe: 0x6c7a2e20, 0x364ff: 0x6c7a3020, + // Block 0xd94, offset 0x36500 + 0x36500: 0x6c7a3220, 0x36501: 0x6c7a3420, 0x36502: 0x6c7a3620, 0x36503: 0x6c7a3820, + 0x36504: 0x6c7a3a20, 0x36505: 0x6c7a3c20, 0x36506: 0x6c7a3e20, 0x36507: 0x6c7a4020, + 0x36508: 0x6c7a4220, 0x36509: 0x6c7a4420, 0x3650a: 0x6c7a4620, 0x3650b: 0x6c7a4820, + 0x3650c: 0x6c7a4a20, 0x3650d: 0x6c7a4c20, 0x3650e: 0x6c7a4e20, 0x3650f: 0x6c7a5020, + 0x36510: 0x6c7a5220, 0x36511: 0x6c7a5420, 0x36512: 0x6c7a5620, 0x36513: 0x6c7a5820, + 0x36514: 0x6c7a5a20, 0x36515: 0x6c7a5c20, 0x36516: 0x6ca32620, 0x36517: 0x6ca32820, + 0x36518: 0x6ca32a20, 0x36519: 0x6ca32c20, 0x3651a: 0x6ca32e20, 0x3651b: 0x6ca33020, + 0x3651c: 0x6ca33220, 0x3651d: 0x6ca33420, 0x3651e: 0x6ca33620, 0x3651f: 0x6ca33820, + 0x36520: 0x6ca33a20, 0x36521: 0x6ca33c20, 0x36522: 0x6ca33e20, 0x36523: 0x6ca34020, + 0x36524: 0x6ca34220, 0x36525: 0x6ca34420, 0x36526: 0x6ca34620, 0x36527: 0x6ca34820, + 0x36528: 0x6ca34a20, 0x36529: 0x6ca34c20, 0x3652a: 0x6ca34e20, 0x3652b: 0x6ca35020, + 0x3652c: 0x6ca35220, 0x3652d: 0x6ca35420, 0x3652e: 0x6ca35620, 0x3652f: 0x6ca35820, + 0x36530: 0x6ca35a20, 0x36531: 0x6ca35c20, 0x36532: 0x6ca35e20, 0x36533: 0x6ca36020, + 0x36534: 0x6ca36220, 0x36535: 0x6ca36420, 0x36536: 0x6ca36620, 0x36537: 0x6ca36820, + 0x36538: 0x6ca36a20, 0x36539: 0x6ca36c20, 0x3653a: 0x6ca36e20, 0x3653b: 0x6cd0dc20, + 0x3653c: 0x6cd0de20, 0x3653d: 0x6cd0e020, 0x3653e: 0x6cd0e220, 0x3653f: 0x6cd0e420, + // Block 0xd95, offset 0x36540 + 0x36540: 0x6cd0e620, 0x36541: 0x6cd0e820, 0x36542: 0x6cd0ea20, 0x36543: 0x6cd0ec20, + 0x36544: 0x6cd0ee20, 0x36545: 0x6cd0f020, 0x36546: 0x6cd0f220, 0x36547: 0x6cd0f420, + 0x36548: 0x6cd0f620, 0x36549: 0x6cd0f820, 0x3654a: 0x6cd0fa20, 0x3654b: 0x6cd0fc20, + 0x3654c: 0x6cd0fe20, 0x3654d: 0x6cd10020, 0x3654e: 0x6cd10220, 0x3654f: 0x6cd10420, + 0x36550: 0x6cd10620, 0x36551: 0x6cd10820, 0x36552: 0x6cd10a20, 0x36553: 0x6cd10c20, + 0x36554: 0x6cd10e20, 0x36555: 0x6cd11020, 0x36556: 0x6cd11220, 0x36557: 0x6cd11420, + 0x36558: 0x6cd11620, 0x36559: 0x6cd11820, 0x3655a: 0x6cd11a20, 0x3655b: 0x6cd11c20, + 0x3655c: 0x6cd11e20, 0x3655d: 0x6cd12020, 0x3655e: 0x6cd12220, 0x3655f: 0x6cd12420, + 0x36560: 0x6cd12620, 0x36561: 0x6cd12820, 0x36562: 0x6cd12a20, 0x36563: 0x6cd12c20, + 0x36564: 0x6cd12e20, 0x36565: 0x6cd13020, 0x36566: 0x6cd13220, 0x36567: 0x6cd13420, + 0x36568: 0x6cd13620, 0x36569: 0x6cd13820, 0x3656a: 0x6cd13a20, 0x3656b: 0x6cd13c20, + 0x3656c: 0x6cd13e20, 0x3656d: 0x6cd14020, 0x3656e: 0x6cd14220, 0x3656f: 0x6cfeaa20, + 0x36570: 0x6cfeac20, 0x36571: 0x6cfeae20, 0x36572: 0x6cfeb020, 0x36573: 0x6cfeb220, + 0x36574: 0x6cfeb420, 0x36575: 0x6cfeb620, 0x36576: 0x6cfeb820, 0x36577: 0x6cfeba20, + 0x36578: 0x6cfebc20, 0x36579: 0x6cfebe20, 0x3657a: 0x6cfec020, 0x3657b: 0x6cfec220, + 0x3657c: 0x6cfec420, 0x3657d: 0x6cfec620, 0x3657e: 0x6cfec820, 0x3657f: 0x6cfeca20, + // Block 0xd96, offset 0x36580 + 0x36580: 0x6cfecc20, 0x36581: 0x6cfece20, 0x36582: 0x6cfed020, 0x36583: 0x6cfed220, + 0x36584: 0x6cfed420, 0x36585: 0x6cfed620, 0x36586: 0x6cfed820, 0x36587: 0x6cfeda20, + 0x36588: 0x6cfedc20, 0x36589: 0x6cfede20, 0x3658a: 0x6cfee020, 0x3658b: 0x6cfee220, + 0x3658c: 0x6cfee420, 0x3658d: 0x6cfee620, 0x3658e: 0x6cfee820, 0x3658f: 0x6cfeea20, + 0x36590: 0x6cfeec20, 0x36591: 0x6cfeee20, 0x36592: 0x6cfef020, 0x36593: 0x6cfef220, + 0x36594: 0x6cfef420, 0x36595: 0x6cfef620, 0x36596: 0x6cfef820, 0x36597: 0x6cfefa20, + 0x36598: 0x6cfefc20, 0x36599: 0x6cfefe20, 0x3659a: 0x6cff0020, 0x3659b: 0x6cff0220, + 0x3659c: 0x6cff0420, 0x3659d: 0x6cff0620, 0x3659e: 0x6cff0820, 0x3659f: 0x6cff0a20, + 0x365a0: 0x6cff0c20, 0x365a1: 0x6cff0e20, 0x365a2: 0x6cff1020, 0x365a3: 0x6cff1220, + 0x365a4: 0x6cff1420, 0x365a5: 0x6cff1620, 0x365a6: 0x6cff1820, 0x365a7: 0x6cff1a20, + 0x365a8: 0x6cff1c20, 0x365a9: 0x6cff1e20, 0x365aa: 0x6d2d1620, 0x365ab: 0x6d2d1820, + 0x365ac: 0x6d2d1a20, 0x365ad: 0x6d2d1c20, 0x365ae: 0x6d2d1e20, 0x365af: 0x6d2d2020, + 0x365b0: 0x6d2d2220, 0x365b1: 0x6d2d2420, 0x365b2: 0x6d2d2620, 0x365b3: 0x6d2d2820, + 0x365b4: 0x6d2d2a20, 0x365b5: 0x6d2d2c20, 0x365b6: 0x6d2d2e20, 0x365b7: 0x6d2d3020, + 0x365b8: 0x6d2d3220, 0x365b9: 0x6d2d3420, 0x365ba: 0x6d2d3620, 0x365bb: 0x6d2d3820, + 0x365bc: 0x6d2d3a20, 0x365bd: 0x6d2d3c20, 0x365be: 0x6d2d3e20, 0x365bf: 0x6d2d4020, + // Block 0xd97, offset 0x365c0 + 0x365c0: 0x6d2d4220, 0x365c1: 0x6d2d4420, 0x365c2: 0x6d2d4620, 0x365c3: 0x6d2d4820, + 0x365c4: 0x6d2d4a20, 0x365c5: 0x6d2d4c20, 0x365c6: 0x6d2d4e20, 0x365c7: 0x6d2d5020, + 0x365c8: 0x6d2d5220, 0x365c9: 0x6d2d5420, 0x365ca: 0x6d2d5620, 0x365cb: 0x6d2d5820, + 0x365cc: 0x6d2d5a20, 0x365cd: 0x6d2d5c20, 0x365ce: 0x6d2d5e20, 0x365cf: 0x6d2d6020, + 0x365d0: 0x6d2d6220, 0x365d1: 0x6d2d6420, 0x365d2: 0x6d2d6620, 0x365d3: 0x6d2d6820, + 0x365d4: 0x6d5a4820, 0x365d5: 0x6d5a4a20, 0x365d6: 0x6d5a4c20, 0x365d7: 0x6d5a4e20, + 0x365d8: 0x6d5a5020, 0x365d9: 0x6d5a5220, 0x365da: 0x6d5a5420, 0x365db: 0x6d5a5620, + 0x365dc: 0x6d5a5820, 0x365dd: 0x6d5a5a20, 0x365de: 0x6d5a5c20, 0x365df: 0x6d5a5e20, + 0x365e0: 0x6d5a6020, 0x365e1: 0x6d5a6220, 0x365e2: 0x6d5a6420, 0x365e3: 0x6d5a6620, + 0x365e4: 0x6d5a6820, 0x365e5: 0x6d5a6a20, 0x365e6: 0x6d5a6c20, 0x365e7: 0x6d5a6e20, + 0x365e8: 0x6d5a7020, 0x365e9: 0x6d5a7220, 0x365ea: 0x6d5a7420, 0x365eb: 0x6d5a7620, + 0x365ec: 0x6d5a7820, 0x365ed: 0x6d5a7a20, 0x365ee: 0x6d5a7c20, 0x365ef: 0x6d5a7e20, + 0x365f0: 0x6d5a8020, 0x365f1: 0x6d5a8220, 0x365f2: 0x6d5a8420, 0x365f3: 0x6d5a8620, + 0x365f4: 0x6d5a8820, 0x365f5: 0x6d5a8a20, 0x365f6: 0x6d5a8c20, 0x365f7: 0x6d5a8e20, + 0x365f8: 0x6d5a9020, 0x365f9: 0x6d5a9220, 0x365fa: 0x6d5a9420, 0x365fb: 0x6d5a9620, + 0x365fc: 0x6d5a9820, 0x365fd: 0x6d5a9a20, 0x365fe: 0x6d5a9c20, 0x365ff: 0x6d5a9e20, + // Block 0xd98, offset 0x36600 + 0x36600: 0x6d850020, 0x36601: 0x6d5aa020, 0x36602: 0x6d850220, 0x36603: 0x6d850420, + 0x36604: 0x6d850620, 0x36605: 0x6d850820, 0x36606: 0x6d850a20, 0x36607: 0x6d850c20, + 0x36608: 0x6d850e20, 0x36609: 0x6d851020, 0x3660a: 0x6d851220, 0x3660b: 0x6d851420, + 0x3660c: 0x6d851620, 0x3660d: 0x6d851820, 0x3660e: 0x6d851a20, 0x3660f: 0x6d851c20, + 0x36610: 0x6d851e20, 0x36611: 0x6d852020, 0x36612: 0x6d852220, 0x36613: 0x6d852420, + 0x36614: 0x6d852620, 0x36615: 0x6d852820, 0x36616: 0x6d852a20, 0x36617: 0x6d852c20, + 0x36618: 0x6d852e20, 0x36619: 0x6d853020, 0x3661a: 0x6d853220, 0x3661b: 0x6d853420, + 0x3661c: 0x6d853620, 0x3661d: 0x6d853820, 0x3661e: 0x6d853a20, 0x3661f: 0x6d853c20, + 0x36620: 0x6d853e20, 0x36621: 0x6d854020, 0x36622: 0x6d854220, 0x36623: 0x6d854420, + 0x36624: 0x6d854620, 0x36625: 0x6d854820, 0x36626: 0x6d854a20, 0x36627: 0x6d854c20, + 0x36628: 0x6d854e20, 0x36629: 0x6d855020, 0x3662a: 0x6d855220, 0x3662b: 0x6da9c420, + 0x3662c: 0x6da9c620, 0x3662d: 0x6da9c820, 0x3662e: 0x6da9ca20, 0x3662f: 0x6da9cc20, + 0x36630: 0x6da9ce20, 0x36631: 0x6da9d020, 0x36632: 0x6da9d220, 0x36633: 0x6da9d420, + 0x36634: 0x6da9d620, 0x36635: 0x6da9d820, 0x36636: 0x6da9da20, 0x36637: 0x6da9dc20, + 0x36638: 0x6da9de20, 0x36639: 0x6da9e020, 0x3663a: 0x6da9e220, 0x3663b: 0x6da9e420, + 0x3663c: 0x6da9e620, 0x3663d: 0x6da9e820, 0x3663e: 0x6da9ea20, 0x3663f: 0x6da9ec20, + // Block 0xd99, offset 0x36640 + 0x36640: 0x6da9ee20, 0x36641: 0x6da9f020, 0x36642: 0x6da9f220, 0x36643: 0x6da9f420, + 0x36644: 0x6da9f620, 0x36645: 0x6da9f820, 0x36646: 0x6da9fa20, 0x36647: 0x6da9fc20, + 0x36648: 0x6da9fe20, 0x36649: 0x6daa0020, 0x3664a: 0x6daa0220, 0x3664b: 0x6dcaa020, + 0x3664c: 0x6dcaa220, 0x3664d: 0x6dcaa420, 0x3664e: 0x6dcaa620, 0x3664f: 0x6dcaa820, + 0x36650: 0x6dcaaa20, 0x36651: 0x6dcaac20, 0x36652: 0x6dcaae20, 0x36653: 0x6dcab020, + 0x36654: 0x6dcab220, 0x36655: 0x6dcab420, 0x36656: 0x6dcab620, 0x36657: 0x6dcab820, + 0x36658: 0x6dcaba20, 0x36659: 0x6dcabc20, 0x3665a: 0x6dcabe20, 0x3665b: 0x6dcac020, + 0x3665c: 0x6dcac220, 0x3665d: 0x6dcac420, 0x3665e: 0x6dcac620, 0x3665f: 0x6dcac820, + 0x36660: 0x6dcaca20, 0x36661: 0x6dcacc20, 0x36662: 0x6dcace20, 0x36663: 0x6dcad020, + 0x36664: 0x6dcad220, 0x36665: 0x6dcad420, 0x36666: 0x6dcad620, 0x36667: 0x6dcad820, + 0x36668: 0x6dcada20, 0x36669: 0x6de63a20, 0x3666a: 0x6de63c20, 0x3666b: 0x6de63e20, + 0x3666c: 0x6de64020, 0x3666d: 0x6de64220, 0x3666e: 0x6de64420, 0x3666f: 0x6de64620, + 0x36670: 0x6de64820, 0x36671: 0x6de64a20, 0x36672: 0x6de64c20, 0x36673: 0x6de64e20, + 0x36674: 0x6dcadc20, 0x36675: 0x6de65020, 0x36676: 0x6de65220, 0x36677: 0x6de65420, + 0x36678: 0x6de65620, 0x36679: 0x6de65820, 0x3667a: 0x6de65a20, 0x3667b: 0x6de65c20, + 0x3667c: 0x6de65e20, 0x3667d: 0x6de66020, 0x3667e: 0x6dfd0e20, 0x3667f: 0x6dfd1020, + // Block 0xd9a, offset 0x36680 + 0x36680: 0x6dfd1220, 0x36681: 0x6dfd1420, 0x36682: 0x6dfd1620, 0x36683: 0x6dfd1820, + 0x36684: 0x6dfd1a20, 0x36685: 0x6dfd1c20, 0x36686: 0x6dfd1e20, 0x36687: 0x6dfd2020, + 0x36688: 0x6dfd2220, 0x36689: 0x6e0fdc20, 0x3668a: 0x6e0fde20, 0x3668b: 0x6e0fe020, + 0x3668c: 0x6e0fe220, 0x3668d: 0x6e0fe420, 0x3668e: 0x6e0fe620, 0x3668f: 0x6e0fe820, + 0x36690: 0x6e0fea20, 0x36691: 0x6e0fec20, 0x36692: 0x6e0fee20, 0x36693: 0x6e0ff020, + 0x36694: 0x6e1ebc20, 0x36695: 0x6e1ebe20, 0x36696: 0x6e1ec020, 0x36697: 0x6e1ec220, + 0x36698: 0x6e1ec420, 0x36699: 0x6e2a1e20, 0x3669a: 0x6e2a2020, 0x3669b: 0x6e2a2220, + 0x3669c: 0x6e2a2420, 0x3669d: 0x6e2a2620, 0x3669e: 0x6e2a2820, 0x3669f: 0x6e2a2a20, + 0x366a0: 0x6e32e020, 0x366a1: 0x6e33a820, 0x366a2: 0x6e3d6c20, 0x366a3: 0x6e391820, + 0x366a4: 0x6e391a20, 0x366a5: 0x6e391c20, 0x366a6: 0x6e391e20, 0x366a7: 0x6e392020, + 0x366a8: 0x6e3d6e20, 0x366a9: 0x6e42c220, 0x366aa: 0x6c3bae20, 0x366ab: 0x6c57ca20, + 0x366ac: 0x6c57cc20, 0x366ad: 0x6c57ce20, 0x366ae: 0x6c57d020, 0x366af: 0x6c57d220, + 0x366b0: 0x6c7a7c20, 0x366b1: 0x6c7a7e20, 0x366b2: 0x6c7a8020, 0x366b3: 0x6c7a8220, + 0x366b4: 0x6c7a8420, 0x366b5: 0x6ca38220, 0x366b6: 0x6ca38420, 0x366b7: 0x6ca38620, + 0x366b8: 0x6ca38820, 0x366b9: 0x6ca38a20, 0x366ba: 0x6cd16220, 0x366bb: 0x6cd16420, + 0x366bc: 0x6cd16620, 0x366bd: 0x6cd16820, 0x366be: 0x6cd16a20, 0x366bf: 0x6cd16c20, + // Block 0xd9b, offset 0x366c0 + 0x366c0: 0x6cd16e20, 0x366c1: 0x6cff4420, 0x366c2: 0x6cff4620, 0x366c3: 0x6cff4820, + 0x366c4: 0x6cff4a20, 0x366c5: 0x6cff4c20, 0x366c6: 0x6cff4e20, 0x366c7: 0x6d5ab620, + 0x366c8: 0x6d2d8c20, 0x366c9: 0x6d2d8e20, 0x366ca: 0x6d2d9020, 0x366cb: 0x6d2d9220, + 0x366cc: 0x6d2d9420, 0x366cd: 0x6d5ab820, 0x366ce: 0x6d856c20, 0x366cf: 0x6d856e20, + 0x366d0: 0x6d5aba20, 0x366d1: 0x6d5abc20, 0x366d2: 0x6d5abe20, 0x366d3: 0x6d5ac020, + 0x366d4: 0x6d5ac220, 0x366d5: 0x6d5ac420, 0x366d6: 0x6d857020, 0x366d7: 0x6daa1020, + 0x366d8: 0x6dcae420, 0x366d9: 0x6dcae620, 0x366da: 0x6dcae820, 0x366db: 0x6e0ff420, + 0x366dc: 0x6e0ff620, 0x366dd: 0x6e0ff820, 0x366de: 0x6e1ec820, 0x366df: 0x6e1eca20, + 0x366e0: 0x6e2a2e20, 0x366e1: 0x6e2a3020, 0x366e2: 0x6e32e620, 0x366e3: 0x6e3d7220, + 0x366e4: 0x6e3d7420, 0x366e5: 0x6e452620, 0x366e6: 0x6c24a420, 0x366e7: 0x6c24a620, + 0x366e8: 0x6c3bba20, 0x366e9: 0x6c3bbc20, 0x366ea: 0x6c3bbe20, 0x366eb: 0x6c3bc020, + 0x366ec: 0x6c57ec20, 0x366ed: 0x6c57ee20, 0x366ee: 0x6c57f020, 0x366ef: 0x6c57f220, + 0x366f0: 0x6c57f420, 0x366f1: 0x6c57f620, 0x366f2: 0x6c57f820, 0x366f3: 0x6c7a9620, + 0x366f4: 0x6c7a9820, 0x366f5: 0x6c7a9a20, 0x366f6: 0x6c7a9c20, 0x366f7: 0x6c7a9e20, + 0x366f8: 0x6c7aa020, 0x366f9: 0x6c7aa220, 0x366fa: 0x6c7aa420, 0x366fb: 0x6c7aa620, + 0x366fc: 0x6c7aa820, 0x366fd: 0x6c7aaa20, 0x366fe: 0x6ca39e20, 0x366ff: 0x6ca3a020, + // Block 0xd9c, offset 0x36700 + 0x36700: 0x6ca3a220, 0x36701: 0x6ca3a420, 0x36702: 0x6ca3a620, 0x36703: 0x6ca3a820, + 0x36704: 0x6ca3aa20, 0x36705: 0x6ca3ac20, 0x36706: 0x6ca3ae20, 0x36707: 0x6ca3b020, + 0x36708: 0x6ca3b220, 0x36709: 0x6ca3b420, 0x3670a: 0x6ca3b620, 0x3670b: 0x6ca3b820, + 0x3670c: 0x6cd18020, 0x3670d: 0x6cd18220, 0x3670e: 0x6cd18420, 0x3670f: 0x6cd18620, + 0x36710: 0x6cd18820, 0x36711: 0x6cd18a20, 0x36712: 0x6cd18c20, 0x36713: 0x6cd18e20, + 0x36714: 0x6cd19020, 0x36715: 0x6cd19220, 0x36716: 0x6cd19420, 0x36717: 0x6cd19620, + 0x36718: 0x6cd19820, 0x36719: 0x6cd19a20, 0x3671a: 0x6cd19c20, 0x3671b: 0x6cff6820, + 0x3671c: 0x6cff6a20, 0x3671d: 0x6cff6c20, 0x3671e: 0x6cff6e20, 0x3671f: 0x6cff7020, + 0x36720: 0x6cff7220, 0x36721: 0x6cff7420, 0x36722: 0x6cff7620, 0x36723: 0x6cff7820, + 0x36724: 0x6cff7a20, 0x36725: 0x6cff7c20, 0x36726: 0x6cff7e20, 0x36727: 0x6d2dae20, + 0x36728: 0x6d2db020, 0x36729: 0x6d2db220, 0x3672a: 0x6d2db420, 0x3672b: 0x6d2db620, + 0x3672c: 0x6d2db820, 0x3672d: 0x6d2dba20, 0x3672e: 0x6d2dbc20, 0x3672f: 0x6d2dbe20, + 0x36730: 0x6d2dc020, 0x36731: 0x6d2dc220, 0x36732: 0x6cff8020, 0x36733: 0x6d2dc420, + 0x36734: 0x6d2dc620, 0x36735: 0x6d2dc820, 0x36736: 0x6d2dca20, 0x36737: 0x6d2dcc20, + 0x36738: 0x6d2dce20, 0x36739: 0x6d5ad420, 0x3673a: 0x6d5ad620, 0x3673b: 0x6d5ad820, + 0x3673c: 0x6d5ada20, 0x3673d: 0x6d5adc20, 0x3673e: 0x6d5ade20, 0x3673f: 0x6d5ae020, + // Block 0xd9d, offset 0x36740 + 0x36740: 0x6d5ae220, 0x36741: 0x6d5ae420, 0x36742: 0x6d5ae620, 0x36743: 0x6d5ae820, + 0x36744: 0x6d5aea20, 0x36745: 0x6d858420, 0x36746: 0x6d858620, 0x36747: 0x6d858820, + 0x36748: 0x6d858a20, 0x36749: 0x6d858c20, 0x3674a: 0x6d858e20, 0x3674b: 0x6d859020, + 0x3674c: 0x6d859220, 0x3674d: 0x6d859420, 0x3674e: 0x6daa2820, 0x3674f: 0x6daa2a20, + 0x36750: 0x6daa2c20, 0x36751: 0x6daa2e20, 0x36752: 0x6daa3020, 0x36753: 0x6daa3220, + 0x36754: 0x6daa3420, 0x36755: 0x6daa3620, 0x36756: 0x6cff8220, 0x36757: 0x6daa3820, + 0x36758: 0x6dcaf420, 0x36759: 0x6dcaf620, 0x3675a: 0x6dcaf820, 0x3675b: 0x6dcafa20, + 0x3675c: 0x6dcafc20, 0x3675d: 0x6dcafe20, 0x3675e: 0x6dcb0020, 0x3675f: 0x6dcb0220, + 0x36760: 0x6de67020, 0x36761: 0x6de67220, 0x36762: 0x6dfd2c20, 0x36763: 0x6dfd2e20, + 0x36764: 0x6dfd3020, 0x36765: 0x6dfd3220, 0x36766: 0x6e0ffc20, 0x36767: 0x6e0ffe20, + 0x36768: 0x6e100020, 0x36769: 0x6e100220, 0x3676a: 0x6e100420, 0x3676b: 0x6e100620, + 0x3676c: 0x6e100820, 0x3676d: 0x6e1ece20, 0x3676e: 0x6e1ed020, 0x3676f: 0x6e1ed220, + 0x36770: 0x6e2a3220, 0x36771: 0x6e2a3420, 0x36772: 0x6e2a3620, 0x36773: 0x6e2a3820, + 0x36774: 0x6e2a3a20, 0x36775: 0x6e2a3c20, 0x36776: 0x6e32ea20, 0x36777: 0x6e392420, + 0x36778: 0x6e407c20, 0x36779: 0x6e443820, 0x3677a: 0x6c0a0020, 0x3677b: 0x6c3bc620, + 0x3677c: 0x6c3bc820, 0x3677d: 0x6c3bca20, 0x3677e: 0x6c3bcc20, 0x3677f: 0x6c3bce20, + // Block 0xd9e, offset 0x36780 + 0x36780: 0x6c3bd020, 0x36781: 0x6c580020, 0x36782: 0x6c580220, 0x36783: 0x6c580420, + 0x36784: 0x6c580620, 0x36785: 0x6c7ab020, 0x36786: 0x6cd19e20, 0x36787: 0x6cff8e20, + 0x36788: 0x6d2dd420, 0x36789: 0x6d5af220, 0x3678a: 0x6d5af420, 0x3678b: 0x6d859620, + 0x3678c: 0x6d859820, 0x3678d: 0x6daa3c20, 0x3678e: 0x6dcb0420, 0x3678f: 0x6dc4c420, + 0x36790: 0x6e100a20, 0x36791: 0x6e1ed620, 0x36792: 0x6e42c420, 0x36793: 0x6c0a0420, + 0x36794: 0x6c13ce20, 0x36795: 0x6c3bd220, 0x36796: 0x6c3bd420, 0x36797: 0x6c3bd620, + 0x36798: 0x6c580c20, 0x36799: 0x6c580e20, 0x3679a: 0x6c581020, 0x3679b: 0x6c581220, + 0x3679c: 0x6c581420, 0x3679d: 0x6c581620, 0x3679e: 0x6c581820, 0x3679f: 0x6c7ab420, + 0x367a0: 0x6ca3c220, 0x367a1: 0x6ca3c420, 0x367a2: 0x6ca3c620, 0x367a3: 0x6ca3c820, + 0x367a4: 0x6ca3ca20, 0x367a5: 0x6ca3cc20, 0x367a6: 0x6cd1aa20, 0x367a7: 0x6cd1ac20, + 0x367a8: 0x6cd1ae20, 0x367a9: 0x6cd1b020, 0x367aa: 0x6cd1b220, 0x367ab: 0x6cd1b420, + 0x367ac: 0x6cff9020, 0x367ad: 0x6cff9220, 0x367ae: 0x6cff9420, 0x367af: 0x6cff9620, + 0x367b0: 0x6cff9820, 0x367b1: 0x6cff9a20, 0x367b2: 0x6d2dd820, 0x367b3: 0x6d2dda20, + 0x367b4: 0x6d2ddc20, 0x367b5: 0x6d5af820, 0x367b6: 0x6d859c20, 0x367b7: 0x6daa3e20, + 0x367b8: 0x6daa4020, 0x367b9: 0x6daa4220, 0x367ba: 0x6dcb0620, 0x367bb: 0x6de67420, + 0x367bc: 0x6de67620, 0x367bd: 0x6de26620, 0x367be: 0x6de67820, 0x367bf: 0x6de67a20, + // Block 0xd9f, offset 0x367c0 + 0x367c0: 0x6e100c20, 0x367c1: 0x6e1ed820, 0x367c2: 0x6e1eda20, 0x367c3: 0x6c13d220, + 0x367c4: 0x6c24ae20, 0x367c5: 0x6c3bde20, 0x367c6: 0x6c3be020, 0x367c7: 0x6c7ab820, + 0x367c8: 0x6ca3d020, 0x367c9: 0x6cd1b820, 0x367ca: 0x6d2dde20, 0x367cb: 0x6d5afa20, + 0x367cc: 0x6d5afc20, 0x367cd: 0x6dcb0820, 0x367ce: 0x6de67c20, 0x367cf: 0x6e1edc20, + 0x367d0: 0x6e392620, 0x367d1: 0x6e2a3e20, 0x367d2: 0x6c0a1620, 0x367d3: 0x6c13d820, + 0x367d4: 0x6c13da20, 0x367d5: 0x6c24c220, 0x367d6: 0x6c24c420, 0x367d7: 0x6c24c620, + 0x367d8: 0x6c24c820, 0x367d9: 0x6c24ca20, 0x367da: 0x6c24cc20, 0x367db: 0x6c24ce20, + 0x367dc: 0x6c24d020, 0x367dd: 0x6c3bfa20, 0x367de: 0x6c3bfc20, 0x367df: 0x6c3bfe20, + 0x367e0: 0x6c3c0020, 0x367e1: 0x6c3c0220, 0x367e2: 0x6c3c0420, 0x367e3: 0x6c3c0620, + 0x367e4: 0x6c3c0820, 0x367e5: 0x6c3c0a20, 0x367e6: 0x6c3c0c20, 0x367e7: 0x6c3c0e20, + 0x367e8: 0x6c3c1020, 0x367e9: 0x6c584020, 0x367ea: 0x6c584220, 0x367eb: 0x6c584420, + 0x367ec: 0x6c584620, 0x367ed: 0x6c584820, 0x367ee: 0x6c584a20, 0x367ef: 0x6c584c20, + 0x367f0: 0x6c584e20, 0x367f1: 0x6c585020, 0x367f2: 0x6c585220, 0x367f3: 0x6c585420, + 0x367f4: 0x6c585620, 0x367f5: 0x6c585820, 0x367f6: 0x6c585a20, 0x367f7: 0x6c585c20, + 0x367f8: 0x6c585e20, 0x367f9: 0x6c586020, 0x367fa: 0x6c586220, 0x367fb: 0x6c586420, + 0x367fc: 0x6c586620, 0x367fd: 0x6c586820, 0x367fe: 0x6c586a20, 0x367ff: 0x6c586c20, + // Block 0xda0, offset 0x36800 + 0x36800: 0x6c586e20, 0x36801: 0x6c587020, 0x36802: 0x6c587220, 0x36803: 0x6c587420, + 0x36804: 0x6c587620, 0x36805: 0x6c587820, 0x36806: 0x6c587a20, 0x36807: 0x6c587c20, + 0x36808: 0x6c587e20, 0x36809: 0x6c588020, 0x3680a: 0x6c588220, 0x3680b: 0x6c588420, + 0x3680c: 0x6c7ad620, 0x3680d: 0x6c7ad820, 0x3680e: 0x6c7ada20, 0x3680f: 0x6c7adc20, + 0x36810: 0x6c7ade20, 0x36811: 0x6c7ae020, 0x36812: 0x6c7ae220, 0x36813: 0x6c7ae420, + 0x36814: 0x6c7ae620, 0x36815: 0x6c7ae820, 0x36816: 0x6c7aea20, 0x36817: 0x6c7aec20, + 0x36818: 0x6c7aee20, 0x36819: 0x6c7af020, 0x3681a: 0x6c7af220, 0x3681b: 0x6c7af420, + 0x3681c: 0x6c7af620, 0x3681d: 0x6c7af820, 0x3681e: 0x6c7afa20, 0x3681f: 0x6c7afc20, + 0x36820: 0x6c7afe20, 0x36821: 0x6c63fc20, 0x36822: 0x6c7b0020, 0x36823: 0x6c7b0220, + 0x36824: 0x6c7b0420, 0x36825: 0x6ca3e820, 0x36826: 0x6ca3ea20, 0x36827: 0x6ca3ec20, + 0x36828: 0x6ca3ee20, 0x36829: 0x6ca3f020, 0x3682a: 0x6ca3f220, 0x3682b: 0x6ca3f420, + 0x3682c: 0x6ca3f620, 0x3682d: 0x6ca3f820, 0x3682e: 0x6ca3fa20, 0x3682f: 0x6ca3fc20, + 0x36830: 0x6ca3fe20, 0x36831: 0x6ca40020, 0x36832: 0x6ca40220, 0x36833: 0x6ca40420, + 0x36834: 0x6ca40620, 0x36835: 0x6ca40820, 0x36836: 0x6ca40a20, 0x36837: 0x6ca40c20, + 0x36838: 0x6ca40e20, 0x36839: 0x6ca41020, 0x3683a: 0x6ca41220, 0x3683b: 0x6cd1d020, + 0x3683c: 0x6cd1d220, 0x3683d: 0x6cd1d420, 0x3683e: 0x6cd1d620, 0x3683f: 0x6cd1d820, + // Block 0xda1, offset 0x36840 + 0x36840: 0x6cd1da20, 0x36841: 0x6cd1dc20, 0x36842: 0x6cd1de20, 0x36843: 0x6cd1e020, + 0x36844: 0x6cd1e220, 0x36845: 0x6cd1e420, 0x36846: 0x6cd1e620, 0x36847: 0x6cd1e820, + 0x36848: 0x6cd1ea20, 0x36849: 0x6cd1ec20, 0x3684a: 0x6cd1ee20, 0x3684b: 0x6cd1f020, + 0x3684c: 0x6cd1f220, 0x3684d: 0x6cd1f420, 0x3684e: 0x6cd1f620, 0x3684f: 0x6cd1f820, + 0x36850: 0x6cd1fa20, 0x36851: 0x6cffb620, 0x36852: 0x6cffb820, 0x36853: 0x6cffba20, + 0x36854: 0x6cffbc20, 0x36855: 0x6cffbe20, 0x36856: 0x6cffc020, 0x36857: 0x6cffc220, + 0x36858: 0x6cffc420, 0x36859: 0x6cffc620, 0x3685a: 0x6cffc820, 0x3685b: 0x6cffca20, + 0x3685c: 0x6cffcc20, 0x3685d: 0x6cffce20, 0x3685e: 0x6cffd020, 0x3685f: 0x6cffd220, + 0x36860: 0x6cffd420, 0x36861: 0x6cffd620, 0x36862: 0x6cffd820, 0x36863: 0x6cffda20, + 0x36864: 0x6cffdc20, 0x36865: 0x6cffde20, 0x36866: 0x6cffe020, 0x36867: 0x6cffe220, + 0x36868: 0x6cffe420, 0x36869: 0x6cffe620, 0x3686a: 0x6cffe820, 0x3686b: 0x6d2de820, + 0x3686c: 0x6d2dea20, 0x3686d: 0x6d2dec20, 0x3686e: 0x6d2dee20, 0x3686f: 0x6d2df020, + 0x36870: 0x6d2df220, 0x36871: 0x6d2df420, 0x36872: 0x6d2df620, 0x36873: 0x6d2df820, + 0x36874: 0x6d2dfa20, 0x36875: 0x6d2dfc20, 0x36876: 0x6d2dfe20, 0x36877: 0x6d5b0820, + 0x36878: 0x6d5b0a20, 0x36879: 0x6d5b0c20, 0x3687a: 0x6d5b0e20, 0x3687b: 0x6d5b1020, + 0x3687c: 0x6d5b1220, 0x3687d: 0x6d5b1420, 0x3687e: 0x6d5b1620, 0x3687f: 0x6d5b1820, + // Block 0xda2, offset 0x36880 + 0x36880: 0x6d5b1a20, 0x36881: 0x6d5b1c20, 0x36882: 0x6d5b1e20, 0x36883: 0x6d5b2020, + 0x36884: 0x6d5b2220, 0x36885: 0x6d5b2420, 0x36886: 0x6d5b2620, 0x36887: 0x6d5b2820, + 0x36888: 0x6d85a620, 0x36889: 0x6d85a820, 0x3688a: 0x6d85aa20, 0x3688b: 0x6d85ac20, + 0x3688c: 0x6d85ae20, 0x3688d: 0x6d85b020, 0x3688e: 0x6d85b220, 0x3688f: 0x6d75d020, + 0x36890: 0x6d85b420, 0x36891: 0x6d85b620, 0x36892: 0x6daa4a20, 0x36893: 0x6daa4c20, + 0x36894: 0x6daa4e20, 0x36895: 0x6daa5020, 0x36896: 0x6daa5220, 0x36897: 0x6daa5420, + 0x36898: 0x6daa5620, 0x36899: 0x6daa5820, 0x3689a: 0x6daa5a20, 0x3689b: 0x6db99020, + 0x3689c: 0x6daa5c20, 0x3689d: 0x6daa5e20, 0x3689e: 0x6daa6020, 0x3689f: 0x6daa6220, + 0x368a0: 0x6daa6420, 0x368a1: 0x6daa6620, 0x368a2: 0x6daa6820, 0x368a3: 0x6daa6a20, + 0x368a4: 0x6dcb1020, 0x368a5: 0x6dcb1220, 0x368a6: 0x6dcb1420, 0x368a7: 0x6dcb1620, + 0x368a8: 0x6dcb1820, 0x368a9: 0x6de68420, 0x368aa: 0x6de68620, 0x368ab: 0x6de68820, + 0x368ac: 0x6de68a20, 0x368ad: 0x6de68c20, 0x368ae: 0x6de68e20, 0x368af: 0x6de69020, + 0x368b0: 0x6de69220, 0x368b1: 0x6dfd3820, 0x368b2: 0x6de69420, 0x368b3: 0x6dfd3a20, + 0x368b4: 0x6dfd3c20, 0x368b5: 0x6dfd3e20, 0x368b6: 0x6dfd4020, 0x368b7: 0x6dfd4220, + 0x368b8: 0x6dfd4420, 0x368b9: 0x6e100e20, 0x368ba: 0x6e101020, 0x368bb: 0x6e101220, + 0x368bc: 0x6e101420, 0x368bd: 0x6e101620, 0x368be: 0x6e101820, 0x368bf: 0x6e1ee020, + // Block 0xda3, offset 0x368c0 + 0x368c0: 0x6e1ee220, 0x368c1: 0x6e1ee420, 0x368c2: 0x6e2a4220, 0x368c3: 0x6e2a4420, + 0x368c4: 0x6e2a4620, 0x368c5: 0x6e32ec20, 0x368c6: 0x6e392820, 0x368c7: 0x6e3d7620, + 0x368c8: 0x6e3d7820, 0x368c9: 0x6e3d7a20, 0x368ca: 0x6e3d7c20, 0x368cb: 0x6e3d7e20, + 0x368cc: 0x6e407e20, 0x368cd: 0x6e408020, 0x368ce: 0x6e42c620, 0x368cf: 0x6e452820, + 0x368d0: 0x6e463220, 0x368d1: 0x6e468620, 0x368d2: 0x6e46e820, 0x368d3: 0x6c0a1c20, + 0x368d4: 0x6c0a1e20, 0x368d5: 0x6c13dc20, 0x368d6: 0x6c3c1620, 0x368d7: 0x6c7b1020, + 0x368d8: 0x6c588e20, 0x368d9: 0x6cd20c20, 0x368da: 0x6cd20e20, 0x368db: 0x6cd21020, + 0x368dc: 0x6cfff220, 0x368dd: 0x6cfff420, 0x368de: 0x6d5b2e20, 0x368df: 0x6d85be20, + 0x368e0: 0x6d85c020, 0x368e1: 0x6d85c220, 0x368e2: 0x6d85c420, 0x368e3: 0x6dcb1e20, + 0x368e4: 0x6e1ee620, 0x368e5: 0x6c13de20, 0x368e6: 0x6c24e220, 0x368e7: 0x6c24e420, + 0x368e8: 0x6c24e620, 0x368e9: 0x6c24e820, 0x368ea: 0x6c24ea20, 0x368eb: 0x6c24ec20, + 0x368ec: 0x6c24ee20, 0x368ed: 0x6c24f020, 0x368ee: 0x6c24f220, 0x368ef: 0x6c3c3220, + 0x368f0: 0x6c3c3420, 0x368f1: 0x6c3c3620, 0x368f2: 0x6c3c3820, 0x368f3: 0x6c3c3a20, + 0x368f4: 0x6c3c3c20, 0x368f5: 0x6c3c3e20, 0x368f6: 0x6c3c4020, 0x368f7: 0x6c58ba20, + 0x368f8: 0x6c58bc20, 0x368f9: 0x6c58be20, 0x368fa: 0x6c58c020, 0x368fb: 0x6c58c220, + 0x368fc: 0x6c58c420, 0x368fd: 0x6c58c620, 0x368fe: 0x6c58c820, 0x368ff: 0x6c58ca20, + // Block 0xda4, offset 0x36900 + 0x36900: 0x6c58cc20, 0x36901: 0x6c58ce20, 0x36902: 0x6c58d020, 0x36903: 0x6c58d220, + 0x36904: 0x6c58d420, 0x36905: 0x6c58d620, 0x36906: 0x6c58d820, 0x36907: 0x6c58da20, + 0x36908: 0x6c58dc20, 0x36909: 0x6c58de20, 0x3690a: 0x6c58e020, 0x3690b: 0x6c58e220, + 0x3690c: 0x6c58e420, 0x3690d: 0x6c58e620, 0x3690e: 0x6c58e820, 0x3690f: 0x6c58ea20, + 0x36910: 0x6c58ec20, 0x36911: 0x6c58ee20, 0x36912: 0x6c58f020, 0x36913: 0x6c58f220, + 0x36914: 0x6c58f420, 0x36915: 0x6c58f620, 0x36916: 0x6c58f820, 0x36917: 0x6c7b5c20, + 0x36918: 0x6c7b5e20, 0x36919: 0x6c7b6020, 0x3691a: 0x6c7b6220, 0x3691b: 0x6c7b6420, + 0x3691c: 0x6c7b6620, 0x3691d: 0x6c7b6820, 0x3691e: 0x6c7b6a20, 0x3691f: 0x6c7b6c20, + 0x36920: 0x6c7b6e20, 0x36921: 0x6c7b7020, 0x36922: 0x6c7b7220, 0x36923: 0x6c7b7420, + 0x36924: 0x6c7b7620, 0x36925: 0x6c7b7820, 0x36926: 0x6c7b7a20, 0x36927: 0x6c7b7c20, + 0x36928: 0x6c7b7e20, 0x36929: 0x6c7b8020, 0x3692a: 0x6c7b8220, 0x3692b: 0x6c7b8420, + 0x3692c: 0x6c7b8620, 0x3692d: 0x6c7b8820, 0x3692e: 0x6c7b8a20, 0x3692f: 0x6c7b8c20, + 0x36930: 0x6c7b8e20, 0x36931: 0x6c7b9020, 0x36932: 0x6c7b9220, 0x36933: 0x6c7b9420, + 0x36934: 0x6c7b9620, 0x36935: 0x6c7b9820, 0x36936: 0x6c7b9a20, 0x36937: 0x6ca44820, + 0x36938: 0x6ca44a20, 0x36939: 0x6ca44c20, 0x3693a: 0x6ca44e20, 0x3693b: 0x6ca45020, + 0x3693c: 0x6ca45220, 0x3693d: 0x6ca45420, 0x3693e: 0x6ca45620, 0x3693f: 0x6ca45820, + // Block 0xda5, offset 0x36940 + 0x36940: 0x6ca45a20, 0x36941: 0x6ca45c20, 0x36942: 0x6ca45e20, 0x36943: 0x6ca46020, + 0x36944: 0x6ca46220, 0x36945: 0x6ca46420, 0x36946: 0x6ca46620, 0x36947: 0x6ca46820, + 0x36948: 0x6ca46a20, 0x36949: 0x6ca46c20, 0x3694a: 0x6ca46e20, 0x3694b: 0x6ca47020, + 0x3694c: 0x6ca47220, 0x3694d: 0x6ca47420, 0x3694e: 0x6ca47620, 0x3694f: 0x6ca47820, + 0x36950: 0x6ca47a20, 0x36951: 0x6ca47c20, 0x36952: 0x6ca47e20, 0x36953: 0x6ca48020, + 0x36954: 0x6ca48220, 0x36955: 0x6cd25a20, 0x36956: 0x6cd25c20, 0x36957: 0x6cd25e20, + 0x36958: 0x6cd26020, 0x36959: 0x6cd26220, 0x3695a: 0x6cd26420, 0x3695b: 0x6cd26620, + 0x3695c: 0x6cd26820, 0x3695d: 0x6cd26a20, 0x3695e: 0x6cd26c20, 0x3695f: 0x6cd26e20, + 0x36960: 0x6cd27020, 0x36961: 0x6cd27220, 0x36962: 0x6cd27420, 0x36963: 0x6cd27620, + 0x36964: 0x6cd27820, 0x36965: 0x6cd27a20, 0x36966: 0x6cd27c20, 0x36967: 0x6cd27e20, + 0x36968: 0x6cd28020, 0x36969: 0x6cd28220, 0x3696a: 0x6cd28420, 0x3696b: 0x6cd28620, + 0x3696c: 0x6cd28820, 0x3696d: 0x6cd28a20, 0x3696e: 0x6cd28c20, 0x3696f: 0x6cd28e20, + 0x36970: 0x6cd29020, 0x36971: 0x6cd29220, 0x36972: 0x6cd29420, 0x36973: 0x6cd29620, + 0x36974: 0x6cd29820, 0x36975: 0x6cd29a20, 0x36976: 0x6cd29c20, 0x36977: 0x6cd29e20, + 0x36978: 0x6cd2a020, 0x36979: 0x6cd2a220, 0x3697a: 0x6cd2a420, 0x3697b: 0x6cd2a620, + 0x3697c: 0x6cd2a820, 0x3697d: 0x6cd2aa20, 0x3697e: 0x6cd2ac20, 0x3697f: 0x6cd2ae20, + // Block 0xda6, offset 0x36980 + 0x36980: 0x6cd2b020, 0x36981: 0x6cd2b220, 0x36982: 0x6d003c20, 0x36983: 0x6d003e20, + 0x36984: 0x6d004020, 0x36985: 0x6d004220, 0x36986: 0x6d004420, 0x36987: 0x6d004620, + 0x36988: 0x6d004820, 0x36989: 0x6d004a20, 0x3698a: 0x6d004c20, 0x3698b: 0x6d004e20, + 0x3698c: 0x6d005020, 0x3698d: 0x6d005220, 0x3698e: 0x6d005420, 0x3698f: 0x6d005620, + 0x36990: 0x6d005820, 0x36991: 0x6d005a20, 0x36992: 0x6d005c20, 0x36993: 0x6d005e20, + 0x36994: 0x6d006020, 0x36995: 0x6d006220, 0x36996: 0x6d006420, 0x36997: 0x6d006620, + 0x36998: 0x6d006820, 0x36999: 0x6d006a20, 0x3699a: 0x6d006c20, 0x3699b: 0x6d006e20, + 0x3699c: 0x6d007020, 0x3699d: 0x6d007220, 0x3699e: 0x6d007420, 0x3699f: 0x6d007620, + 0x369a0: 0x6d007820, 0x369a1: 0x6d007a20, 0x369a2: 0x6d007c20, 0x369a3: 0x6d007e20, + 0x369a4: 0x6d008020, 0x369a5: 0x6d008220, 0x369a6: 0x6d008420, 0x369a7: 0x6d008620, + 0x369a8: 0x6d008820, 0x369a9: 0x6d008a20, 0x369aa: 0x6d008c20, 0x369ab: 0x6d008e20, + 0x369ac: 0x6d009020, 0x369ad: 0x6d009220, 0x369ae: 0x6d009420, 0x369af: 0x6d009620, + 0x369b0: 0x6d009820, 0x369b1: 0x6d009a20, 0x369b2: 0x6d009c20, 0x369b3: 0x6d009e20, + 0x369b4: 0x6d00a020, 0x369b5: 0x6d00a220, 0x369b6: 0x6d00a420, 0x369b7: 0x6d00a620, + 0x369b8: 0x6d00a820, 0x369b9: 0x6d00aa20, 0x369ba: 0x6d00ac20, 0x369bb: 0x6d2e4220, + 0x369bc: 0x6d2e4420, 0x369bd: 0x6d2e4620, 0x369be: 0x6d2e4820, 0x369bf: 0x6d2e4a20, + // Block 0xda7, offset 0x369c0 + 0x369c0: 0x6d2e4c20, 0x369c1: 0x6d2e4e20, 0x369c2: 0x6d2e5020, 0x369c3: 0x6d2e5220, + 0x369c4: 0x6d2e5420, 0x369c5: 0x6d2e5620, 0x369c6: 0x6d2e5820, 0x369c7: 0x6d2e5a20, + 0x369c8: 0x6d2e5c20, 0x369c9: 0x6d2e5e20, 0x369ca: 0x6d2e6020, 0x369cb: 0x6d2e6220, + 0x369cc: 0x6d2e6420, 0x369cd: 0x6d2e6620, 0x369ce: 0x6d2e6820, 0x369cf: 0x6d2e6a20, + 0x369d0: 0x6d2e6c20, 0x369d1: 0x6d2e6e20, 0x369d2: 0x6d2e7020, 0x369d3: 0x6d2e7220, + 0x369d4: 0x6d2e7420, 0x369d5: 0x6d2e7620, 0x369d6: 0x6d2e7820, 0x369d7: 0x6d2e7a20, + 0x369d8: 0x6d2e7c20, 0x369d9: 0x6d2e7e20, 0x369da: 0x6d2e8020, 0x369db: 0x6d2e8220, + 0x369dc: 0x6d2e8420, 0x369dd: 0x6d2e8620, 0x369de: 0x6d2e8820, 0x369df: 0x6d2e8a20, + 0x369e0: 0x6d2e8c20, 0x369e1: 0x6d2e8e20, 0x369e2: 0x6d2e9020, 0x369e3: 0x6d2e9220, + 0x369e4: 0x6d2e9420, 0x369e5: 0x6d2e9620, 0x369e6: 0x6d2e9820, 0x369e7: 0x6d2e9a20, + 0x369e8: 0x6d2e9c20, 0x369e9: 0x6d2e9e20, 0x369ea: 0x6d5b6c20, 0x369eb: 0x6d5b6e20, + 0x369ec: 0x6d5b7020, 0x369ed: 0x6d5b7220, 0x369ee: 0x6d5b7420, 0x369ef: 0x6d5b7620, + 0x369f0: 0x6d5b7820, 0x369f1: 0x6d5b7a20, 0x369f2: 0x6d5b7c20, 0x369f3: 0x6d5b7e20, + 0x369f4: 0x6d5b8020, 0x369f5: 0x6d5b8220, 0x369f6: 0x6d5b8420, 0x369f7: 0x6d5b8620, + 0x369f8: 0x6d5b8820, 0x369f9: 0x6d5b8a20, 0x369fa: 0x6d5b8c20, 0x369fb: 0x6d5b8e20, + 0x369fc: 0x6d5b9020, 0x369fd: 0x6d5b9220, 0x369fe: 0x6d5b9420, 0x369ff: 0x6d5b9620, + // Block 0xda8, offset 0x36a00 + 0x36a00: 0x6d5b9820, 0x36a01: 0x6d5b9a20, 0x36a02: 0x6d5b9c20, 0x36a03: 0x6d5b9e20, + 0x36a04: 0x6d5ba020, 0x36a05: 0x6d5ba220, 0x36a06: 0x6d5ba420, 0x36a07: 0x6d5ba620, + 0x36a08: 0x6d5ba820, 0x36a09: 0x6d5baa20, 0x36a0a: 0x6d5bac20, 0x36a0b: 0x6d5bae20, + 0x36a0c: 0x6d5bb020, 0x36a0d: 0x6d5bb220, 0x36a0e: 0x6d5bb420, 0x36a0f: 0x6d5bb620, + 0x36a10: 0x6d5bb820, 0x36a11: 0x6d5bba20, 0x36a12: 0x6d5bbc20, 0x36a13: 0x6d5bbe20, + 0x36a14: 0x6d5bc020, 0x36a15: 0x6d5bc220, 0x36a16: 0x6d5bc420, 0x36a17: 0x6d5bc620, + 0x36a18: 0x6d5bc820, 0x36a19: 0x6d5bca20, 0x36a1a: 0x6d5bcc20, 0x36a1b: 0x6d5bce20, + 0x36a1c: 0x6d5bd020, 0x36a1d: 0x6d85fe20, 0x36a1e: 0x6d860020, 0x36a1f: 0x6d860220, + 0x36a20: 0x6d860420, 0x36a21: 0x6d860620, 0x36a22: 0x6d860820, 0x36a23: 0x6d860a20, + 0x36a24: 0x6d860c20, 0x36a25: 0x6d860e20, 0x36a26: 0x6d861020, 0x36a27: 0x6d861220, + 0x36a28: 0x6d861420, 0x36a29: 0x6d861620, 0x36a2a: 0x6d861820, 0x36a2b: 0x6d861a20, + 0x36a2c: 0x6d861c20, 0x36a2d: 0x6d861e20, 0x36a2e: 0x6d862020, 0x36a2f: 0x6d862220, + 0x36a30: 0x6d862420, 0x36a31: 0x6d862620, 0x36a32: 0x6d862820, 0x36a33: 0x6d862a20, + 0x36a34: 0x6d862c20, 0x36a35: 0x6d862e20, 0x36a36: 0x6d863020, 0x36a37: 0x6d863220, + 0x36a38: 0x6d863420, 0x36a39: 0x6d863620, 0x36a3a: 0x6d863820, 0x36a3b: 0x6d863a20, + 0x36a3c: 0x6d863c20, 0x36a3d: 0x6d863e20, 0x36a3e: 0x6d864020, 0x36a3f: 0x6d864220, + // Block 0xda9, offset 0x36a40 + 0x36a40: 0x6d864420, 0x36a41: 0x6d864620, 0x36a42: 0x6d864820, 0x36a43: 0x6daa9020, + 0x36a44: 0x6daa9220, 0x36a45: 0x6daa9420, 0x36a46: 0x6daa9620, 0x36a47: 0x6daa9820, + 0x36a48: 0x6daa9a20, 0x36a49: 0x6daa9c20, 0x36a4a: 0x6daa9e20, 0x36a4b: 0x6daaa020, + 0x36a4c: 0x6daaa220, 0x36a4d: 0x6daaa420, 0x36a4e: 0x6daaa620, 0x36a4f: 0x6daaa820, + 0x36a50: 0x6daaaa20, 0x36a51: 0x6daaac20, 0x36a52: 0x6daaae20, 0x36a53: 0x6daab020, + 0x36a54: 0x6daab220, 0x36a55: 0x6daab420, 0x36a56: 0x6daab620, 0x36a57: 0x6daab820, + 0x36a58: 0x6daaba20, 0x36a59: 0x6daabc20, 0x36a5a: 0x6daabe20, 0x36a5b: 0x6daac020, + 0x36a5c: 0x6daac220, 0x36a5d: 0x6daac420, 0x36a5e: 0x6d864a20, 0x36a5f: 0x6daac620, + 0x36a60: 0x6daac820, 0x36a61: 0x6daaca20, 0x36a62: 0x6daacc20, 0x36a63: 0x6daace20, + 0x36a64: 0x6daad020, 0x36a65: 0x6daad220, 0x36a66: 0x6daad420, 0x36a67: 0x6daad620, + 0x36a68: 0x6daad820, 0x36a69: 0x6daada20, 0x36a6a: 0x6daadc20, 0x36a6b: 0x6daade20, + 0x36a6c: 0x6daae020, 0x36a6d: 0x6daae220, 0x36a6e: 0x6daae420, 0x36a6f: 0x6daae620, + 0x36a70: 0x6daae820, 0x36a71: 0x6daaea20, 0x36a72: 0x6daaec20, 0x36a73: 0x6daaee20, + 0x36a74: 0x6daaf020, 0x36a75: 0x6daaf220, 0x36a76: 0x6daaf420, 0x36a77: 0x6daaf620, + 0x36a78: 0x6daaf820, 0x36a79: 0x6daafa20, 0x36a7a: 0x6dcb4c20, 0x36a7b: 0x6dcb4e20, + 0x36a7c: 0x6dcb5020, 0x36a7d: 0x6dcb5220, 0x36a7e: 0x6dcb5420, 0x36a7f: 0x6dcb5620, + // Block 0xdaa, offset 0x36a80 + 0x36a80: 0x6dcb5820, 0x36a81: 0x6dcb5a20, 0x36a82: 0x6dcb5c20, 0x36a83: 0x6dcb5e20, + 0x36a84: 0x6dcb6020, 0x36a85: 0x6dcb6220, 0x36a86: 0x6dcb6420, 0x36a87: 0x6dcb6620, + 0x36a88: 0x6dcb6820, 0x36a89: 0x6dcb6a20, 0x36a8a: 0x6dcb6c20, 0x36a8b: 0x6dcb6e20, + 0x36a8c: 0x6dcb7020, 0x36a8d: 0x6dcb7220, 0x36a8e: 0x6dcb7420, 0x36a8f: 0x6dcb7620, + 0x36a90: 0x6dcb7820, 0x36a91: 0x6dcb7a20, 0x36a92: 0x6dcb7c20, 0x36a93: 0x6dcb7e20, + 0x36a94: 0x6dcb8020, 0x36a95: 0x6de6a420, 0x36a96: 0x6de6a620, 0x36a97: 0x6de6a820, + 0x36a98: 0x6de6aa20, 0x36a99: 0x6de6ac20, 0x36a9a: 0x6de6ae20, 0x36a9b: 0x6de6b020, + 0x36a9c: 0x6de6b220, 0x36a9d: 0x6de6b420, 0x36a9e: 0x6de6b620, 0x36a9f: 0x6de6b820, + 0x36aa0: 0x6de6ba20, 0x36aa1: 0x6de6bc20, 0x36aa2: 0x6de6be20, 0x36aa3: 0x6de6c020, + 0x36aa4: 0x6de6c220, 0x36aa5: 0x6de6c420, 0x36aa6: 0x6de6c620, 0x36aa7: 0x6de6c820, + 0x36aa8: 0x6de6ca20, 0x36aa9: 0x6de6cc20, 0x36aaa: 0x6de6ce20, 0x36aab: 0x6de6d020, + 0x36aac: 0x6de6d220, 0x36aad: 0x6de6d420, 0x36aae: 0x6de6d620, 0x36aaf: 0x6de6d820, + 0x36ab0: 0x6dfd5220, 0x36ab1: 0x6dfd5420, 0x36ab2: 0x6dfd5620, 0x36ab3: 0x6dfd5820, + 0x36ab4: 0x6dfd5a20, 0x36ab5: 0x6dfd5c20, 0x36ab6: 0x6dfd5e20, 0x36ab7: 0x6dfd6020, + 0x36ab8: 0x6dfd6220, 0x36ab9: 0x6dfd6420, 0x36aba: 0x6dfd6620, 0x36abb: 0x6dfd6820, + 0x36abc: 0x6dfd6a20, 0x36abd: 0x6dfd6c20, 0x36abe: 0x6dfd6e20, 0x36abf: 0x6dfd7020, + // Block 0xdab, offset 0x36ac0 + 0x36ac0: 0x6e102e20, 0x36ac1: 0x6e103020, 0x36ac2: 0x6e103220, 0x36ac3: 0x6e103420, + 0x36ac4: 0x6e103620, 0x36ac5: 0x6e103820, 0x36ac6: 0x6e103a20, 0x36ac7: 0x6e103c20, + 0x36ac8: 0x6e103e20, 0x36ac9: 0x6e104020, 0x36aca: 0x6e104220, 0x36acb: 0x6e1ef020, + 0x36acc: 0x6e1ef220, 0x36acd: 0x6e1ef420, 0x36ace: 0x6e1ef620, 0x36acf: 0x6e1ef820, + 0x36ad0: 0x6e2a4e20, 0x36ad1: 0x6e2a5020, 0x36ad2: 0x6e2a5220, 0x36ad3: 0x6e2a5420, + 0x36ad4: 0x6e2a5620, 0x36ad5: 0x6e2a5820, 0x36ad6: 0x6e2a5a20, 0x36ad7: 0x6e2a5c20, + 0x36ad8: 0x6e32f620, 0x36ad9: 0x6e32f820, 0x36ada: 0x6e32fa20, 0x36adb: 0x6e32fc20, + 0x36adc: 0x6e392a20, 0x36add: 0x6e392c20, 0x36ade: 0x6e392e20, 0x36adf: 0x6e3d8220, + 0x36ae0: 0x6e3d8420, 0x36ae1: 0x6e3d8620, 0x36ae2: 0x6e408220, 0x36ae3: 0x6e42cc20, + 0x36ae4: 0x6e443a20, 0x36ae5: 0x6c24f420, 0x36ae6: 0x6c24f620, 0x36ae7: 0x6c590820, + 0x36ae8: 0x6c590a20, 0x36ae9: 0x6c7ba420, 0x36aea: 0x6c7ba620, 0x36aeb: 0x6c7ba820, + 0x36aec: 0x6ca48620, 0x36aed: 0x6ca48820, 0x36aee: 0x6ca48a20, 0x36aef: 0x6cd2bc20, + 0x36af0: 0x6cd2be20, 0x36af1: 0x6cd2c020, 0x36af2: 0x6cd2c220, 0x36af3: 0x6d00b420, + 0x36af4: 0x6d00b620, 0x36af5: 0x6d00b820, 0x36af6: 0x6d2ea620, 0x36af7: 0x6d5bd820, + 0x36af8: 0x6d5bda20, 0x36af9: 0x6d864c20, 0x36afa: 0x6d864e20, 0x36afb: 0x6dfd7220, + 0x36afc: 0x6d865020, 0x36afd: 0x6c13e420, 0x36afe: 0x6c13e620, 0x36aff: 0x6c250220, + // Block 0xdac, offset 0x36b00 + 0x36b00: 0x6c250420, 0x36b01: 0x6c250620, 0x36b02: 0x6c3c4820, 0x36b03: 0x6c3c4a20, + 0x36b04: 0x6c3c4c20, 0x36b05: 0x6c3c4e20, 0x36b06: 0x6c3c5020, 0x36b07: 0x6c3c5220, + 0x36b08: 0x6c591620, 0x36b09: 0x6c591820, 0x36b0a: 0x6c591a20, 0x36b0b: 0x6c591c20, + 0x36b0c: 0x6c591e20, 0x36b0d: 0x6c592020, 0x36b0e: 0x6c592220, 0x36b0f: 0x6c592420, + 0x36b10: 0x6c592620, 0x36b11: 0x6c592820, 0x36b12: 0x6c592a20, 0x36b13: 0x6c592c20, + 0x36b14: 0x6c592e20, 0x36b15: 0x6c593020, 0x36b16: 0x6c593220, 0x36b17: 0x6c593420, + 0x36b18: 0x6c7bb620, 0x36b19: 0x6c7bb820, 0x36b1a: 0x6c7bba20, 0x36b1b: 0x6c7bbc20, + 0x36b1c: 0x6c7bbe20, 0x36b1d: 0x6c7bc020, 0x36b1e: 0x6c7bc220, 0x36b1f: 0x6c7bc420, + 0x36b20: 0x6c7bc620, 0x36b21: 0x6c7bc820, 0x36b22: 0x6c7bca20, 0x36b23: 0x6c7bcc20, + 0x36b24: 0x6c7bce20, 0x36b25: 0x6ca49a20, 0x36b26: 0x6ca49c20, 0x36b27: 0x6ca49e20, + 0x36b28: 0x6ca4a020, 0x36b29: 0x6ca4a220, 0x36b2a: 0x6ca4a420, 0x36b2b: 0x6ca4a620, + 0x36b2c: 0x6cd2d020, 0x36b2d: 0x6cd2d220, 0x36b2e: 0x6cd2d420, 0x36b2f: 0x6cd2d620, + 0x36b30: 0x6cd2d820, 0x36b31: 0x6cd2da20, 0x36b32: 0x6cd2dc20, 0x36b33: 0x6cd2de20, + 0x36b34: 0x6cd2e020, 0x36b35: 0x6cd2e220, 0x36b36: 0x6cd2e420, 0x36b37: 0x6cd2e620, + 0x36b38: 0x6cd2e820, 0x36b39: 0x6d00c220, 0x36b3a: 0x6d00c420, 0x36b3b: 0x6d00c620, + 0x36b3c: 0x6d00c820, 0x36b3d: 0x6d00ca20, 0x36b3e: 0x6d00cc20, 0x36b3f: 0x6d00ce20, + // Block 0xdad, offset 0x36b40 + 0x36b40: 0x6d00d020, 0x36b41: 0x6d00d220, 0x36b42: 0x6d00d420, 0x36b43: 0x6d00d620, + 0x36b44: 0x6d00d820, 0x36b45: 0x6d00da20, 0x36b46: 0x6d00dc20, 0x36b47: 0x6d00de20, + 0x36b48: 0x6d2eac20, 0x36b49: 0x6d2eae20, 0x36b4a: 0x6d2eb020, 0x36b4b: 0x6d2eb220, + 0x36b4c: 0x6d2eb420, 0x36b4d: 0x6d2eb620, 0x36b4e: 0x6d2eb820, 0x36b4f: 0x6d2eba20, + 0x36b50: 0x6d2ebc20, 0x36b51: 0x6d2ebe20, 0x36b52: 0x6d2ec020, 0x36b53: 0x6d2ec220, + 0x36b54: 0x6d5be820, 0x36b55: 0x6d5bea20, 0x36b56: 0x6d5bec20, 0x36b57: 0x6d5bee20, + 0x36b58: 0x6d5bf020, 0x36b59: 0x6d5bf220, 0x36b5a: 0x6d5bf420, 0x36b5b: 0x6d865a20, + 0x36b5c: 0x6d865c20, 0x36b5d: 0x6d865e20, 0x36b5e: 0x6d866020, 0x36b5f: 0x6d866220, + 0x36b60: 0x6dab0820, 0x36b61: 0x6dab0a20, 0x36b62: 0x6dab0c20, 0x36b63: 0x6dab0e20, + 0x36b64: 0x6dab1020, 0x36b65: 0x6dab1220, 0x36b66: 0x6dab1420, 0x36b67: 0x6dcb8a20, + 0x36b68: 0x6dcb8c20, 0x36b69: 0x6dcb8e20, 0x36b6a: 0x6dcb9020, 0x36b6b: 0x6de6e020, + 0x36b6c: 0x6de6e220, 0x36b6d: 0x6de6e420, 0x36b6e: 0x6de6e620, 0x36b6f: 0x6de6e820, + 0x36b70: 0x6de6ea20, 0x36b71: 0x6de6ec20, 0x36b72: 0x6de6ee20, 0x36b73: 0x6de6f020, + 0x36b74: 0x6dfd7820, 0x36b75: 0x6dfd7a20, 0x36b76: 0x6dfd7c20, 0x36b77: 0x6dfd7e20, + 0x36b78: 0x6e104820, 0x36b79: 0x6e104a20, 0x36b7a: 0x6e104c20, 0x36b7b: 0x6e1efa20, + 0x36b7c: 0x6e1efc20, 0x36b7d: 0x6e1efe20, 0x36b7e: 0x6e2a5e20, 0x36b7f: 0x6e2a6020, + // Block 0xdae, offset 0x36b80 + 0x36b80: 0x6e32fe20, 0x36b81: 0x6e330020, 0x36b82: 0x6e330220, 0x36b83: 0x6e330420, + 0x36b84: 0x6e393220, 0x36b85: 0x6e443c20, 0x36b86: 0x6c250820, 0x36b87: 0x6c250a20, + 0x36b88: 0x6c3c5820, 0x36b89: 0x6c3c5a20, 0x36b8a: 0x6c3c5c20, 0x36b8b: 0x6c3c5e20, + 0x36b8c: 0x6c3c6020, 0x36b8d: 0x6c3c6220, 0x36b8e: 0x6c593e20, 0x36b8f: 0x6c594020, + 0x36b90: 0x6c594220, 0x36b91: 0x6c594420, 0x36b92: 0x6c594620, 0x36b93: 0x6c594820, + 0x36b94: 0x6c594a20, 0x36b95: 0x6c7bdc20, 0x36b96: 0x6c7bde20, 0x36b97: 0x6c7be020, + 0x36b98: 0x6c7be220, 0x36b99: 0x6c7be420, 0x36b9a: 0x6c7be620, 0x36b9b: 0x6c7be820, + 0x36b9c: 0x6c7bea20, 0x36b9d: 0x6c7bec20, 0x36b9e: 0x6c7bee20, 0x36b9f: 0x6ca4ae20, + 0x36ba0: 0x6ca4b020, 0x36ba1: 0x6ca4b220, 0x36ba2: 0x6ca4b420, 0x36ba3: 0x6ca4b620, + 0x36ba4: 0x6ca4b820, 0x36ba5: 0x6ca4ba20, 0x36ba6: 0x6ca4bc20, 0x36ba7: 0x6cd2f420, + 0x36ba8: 0x6cd2f620, 0x36ba9: 0x6cd2f820, 0x36baa: 0x6cd2fa20, 0x36bab: 0x6cd2fc20, + 0x36bac: 0x6cd2fe20, 0x36bad: 0x6cd30020, 0x36bae: 0x6cd30220, 0x36baf: 0x6d00ec20, + 0x36bb0: 0x6cd30420, 0x36bb1: 0x6cd30620, 0x36bb2: 0x6cd30820, 0x36bb3: 0x6d00ee20, + 0x36bb4: 0x6d00f020, 0x36bb5: 0x6d00f220, 0x36bb6: 0x6d00f420, 0x36bb7: 0x6d00f620, + 0x36bb8: 0x6d00f820, 0x36bb9: 0x6d00fa20, 0x36bba: 0x6d00fc20, 0x36bbb: 0x6d00fe20, + 0x36bbc: 0x6d010020, 0x36bbd: 0x6d010220, 0x36bbe: 0x6d010420, 0x36bbf: 0x6d010620, + // Block 0xdaf, offset 0x36bc0 + 0x36bc0: 0x6d2ed420, 0x36bc1: 0x6d2ed620, 0x36bc2: 0x6d2ed820, 0x36bc3: 0x6d2eda20, + 0x36bc4: 0x6d2edc20, 0x36bc5: 0x6d2ede20, 0x36bc6: 0x6d2ee020, 0x36bc7: 0x6d2ee220, + 0x36bc8: 0x6d2ee420, 0x36bc9: 0x6d2ee620, 0x36bca: 0x6d2ee820, 0x36bcb: 0x6d2eea20, + 0x36bcc: 0x6d2eec20, 0x36bcd: 0x6d5bfe20, 0x36bce: 0x6d5c0020, 0x36bcf: 0x6d5c0220, + 0x36bd0: 0x6d5c0420, 0x36bd1: 0x6d5c0620, 0x36bd2: 0x6d5c0820, 0x36bd3: 0x6d5c0a20, + 0x36bd4: 0x6d866820, 0x36bd5: 0x6d866a20, 0x36bd6: 0x6d866c20, 0x36bd7: 0x6d866e20, + 0x36bd8: 0x6d867020, 0x36bd9: 0x6d867220, 0x36bda: 0x6d867420, 0x36bdb: 0x6d867620, + 0x36bdc: 0x6d867820, 0x36bdd: 0x6d867a20, 0x36bde: 0x6d867c20, 0x36bdf: 0x6dab1820, + 0x36be0: 0x6dab1a20, 0x36be1: 0x6dab1c20, 0x36be2: 0x6dcb9620, 0x36be3: 0x6dcb9820, + 0x36be4: 0x6dcb9a20, 0x36be5: 0x6dcb9c20, 0x36be6: 0x6dcb9e20, 0x36be7: 0x6dcba020, + 0x36be8: 0x6dcba220, 0x36be9: 0x6dcba420, 0x36bea: 0x6dcba620, 0x36beb: 0x6de6f220, + 0x36bec: 0x6de6f420, 0x36bed: 0x6de6f620, 0x36bee: 0x6de6f820, 0x36bef: 0x6dfd8420, + 0x36bf0: 0x6dfd8620, 0x36bf1: 0x6dfd8820, 0x36bf2: 0x6dfd8a20, 0x36bf3: 0x6dfd8c20, + 0x36bf4: 0x6e105020, 0x36bf5: 0x6e105220, 0x36bf6: 0x6e1f0220, 0x36bf7: 0x6e1f0420, + 0x36bf8: 0x6e1f0620, 0x36bf9: 0x6e330620, 0x36bfa: 0x6e330820, 0x36bfb: 0x6e3c7e20, + 0x36bfc: 0x6e3fda20, 0x36bfd: 0x6e450420, 0x36bfe: 0x6e46a420, 0x36bff: 0x6c251020, + // Block 0xdb0, offset 0x36c00 + 0x36c00: 0x6c251220, 0x36c01: 0x6c3c6a20, 0x36c02: 0x6c3c6c20, 0x36c03: 0x6c3c6e20, + 0x36c04: 0x6c3c7020, 0x36c05: 0x6c3c7220, 0x36c06: 0x6c595e20, 0x36c07: 0x6c596020, + 0x36c08: 0x6c596220, 0x36c09: 0x6c596420, 0x36c0a: 0x6c596620, 0x36c0b: 0x6c596820, + 0x36c0c: 0x6c596a20, 0x36c0d: 0x6c596c20, 0x36c0e: 0x6c7c0820, 0x36c0f: 0x6c7c0a20, + 0x36c10: 0x6c7c0c20, 0x36c11: 0x6c7c0e20, 0x36c12: 0x6c7c1020, 0x36c13: 0x6c7c1220, + 0x36c14: 0x6c7c1420, 0x36c15: 0x6c7c1620, 0x36c16: 0x6c7c1820, 0x36c17: 0x6c7c1a20, + 0x36c18: 0x6c7c1c20, 0x36c19: 0x6c7c1e20, 0x36c1a: 0x6c7c2020, 0x36c1b: 0x6c7c2220, + 0x36c1c: 0x6c7c2420, 0x36c1d: 0x6c7c2620, 0x36c1e: 0x6ca4d220, 0x36c1f: 0x6ca4d420, + 0x36c20: 0x6ca4d620, 0x36c21: 0x6ca4d820, 0x36c22: 0x6ca4da20, 0x36c23: 0x6ca4dc20, + 0x36c24: 0x6ca4de20, 0x36c25: 0x6ca4e020, 0x36c26: 0x6ca4e220, 0x36c27: 0x6ca4e420, + 0x36c28: 0x6ca4e620, 0x36c29: 0x6ca4e820, 0x36c2a: 0x6ca4ea20, 0x36c2b: 0x6c7c2820, + 0x36c2c: 0x6cd31220, 0x36c2d: 0x6cd31420, 0x36c2e: 0x6cd31620, 0x36c2f: 0x6cd31820, + 0x36c30: 0x6cd31a20, 0x36c31: 0x6cd31c20, 0x36c32: 0x6cd31e20, 0x36c33: 0x6cd32020, + 0x36c34: 0x6cd32220, 0x36c35: 0x6cd32420, 0x36c36: 0x6cd32620, 0x36c37: 0x6d011220, + 0x36c38: 0x6d011420, 0x36c39: 0x6d011620, 0x36c3a: 0x6d011820, 0x36c3b: 0x6d011a20, + 0x36c3c: 0x6d011c20, 0x36c3d: 0x6d011e20, 0x36c3e: 0x6d012020, 0x36c3f: 0x6d012220, + // Block 0xdb1, offset 0x36c40 + 0x36c40: 0x6d012420, 0x36c41: 0x6d012620, 0x36c42: 0x6d012820, 0x36c43: 0x6d2efc20, + 0x36c44: 0x6d2efe20, 0x36c45: 0x6d2f0020, 0x36c46: 0x6d2f0220, 0x36c47: 0x6d5c0e20, + 0x36c48: 0x6d5c1020, 0x36c49: 0x6d5c1220, 0x36c4a: 0x6d5c1420, 0x36c4b: 0x6d5c1620, + 0x36c4c: 0x6d5c1820, 0x36c4d: 0x6d5c1a20, 0x36c4e: 0x6d5c1c20, 0x36c4f: 0x6d5c1e20, + 0x36c50: 0x6d5c2020, 0x36c51: 0x6d5c2220, 0x36c52: 0x6d5c2420, 0x36c53: 0x6d868820, + 0x36c54: 0x6d868a20, 0x36c55: 0x6d868c20, 0x36c56: 0x6d868e20, 0x36c57: 0x6d869020, + 0x36c58: 0x6d869220, 0x36c59: 0x6d869420, 0x36c5a: 0x6d869620, 0x36c5b: 0x6d869820, + 0x36c5c: 0x6d869a20, 0x36c5d: 0x6d869c20, 0x36c5e: 0x6d869e20, 0x36c5f: 0x6d86a020, + 0x36c60: 0x6d86a220, 0x36c61: 0x6d86a420, 0x36c62: 0x6d86a620, 0x36c63: 0x6d86a820, + 0x36c64: 0x6d86aa20, 0x36c65: 0x6dab2620, 0x36c66: 0x6dab2820, 0x36c67: 0x6dab2a20, + 0x36c68: 0x6dab2c20, 0x36c69: 0x6dab2e20, 0x36c6a: 0x6dab3020, 0x36c6b: 0x6dab3220, + 0x36c6c: 0x6dab3420, 0x36c6d: 0x6dab3620, 0x36c6e: 0x6dab3820, 0x36c6f: 0x6dab3a20, + 0x36c70: 0x6dab3c20, 0x36c71: 0x6dab3e20, 0x36c72: 0x6dab4020, 0x36c73: 0x6da02a20, + 0x36c74: 0x6dab4220, 0x36c75: 0x6dab4420, 0x36c76: 0x6dab4620, 0x36c77: 0x6dab4820, + 0x36c78: 0x6dcbac20, 0x36c79: 0x6dcbae20, 0x36c7a: 0x6dcbb020, 0x36c7b: 0x6de6fc20, + 0x36c7c: 0x6dcbb220, 0x36c7d: 0x6dcbb420, 0x36c7e: 0x6dcbb620, 0x36c7f: 0x6dcbb820, + // Block 0xdb2, offset 0x36c80 + 0x36c80: 0x6dcbba20, 0x36c81: 0x6de6fe20, 0x36c82: 0x6de70020, 0x36c83: 0x6de70220, + 0x36c84: 0x6de70420, 0x36c85: 0x6de70620, 0x36c86: 0x6de70820, 0x36c87: 0x6dfd9020, + 0x36c88: 0x6dfd9220, 0x36c89: 0x6dfd9420, 0x36c8a: 0x6dfd9620, 0x36c8b: 0x6dfd9820, + 0x36c8c: 0x6dfd9a20, 0x36c8d: 0x6dfd9c20, 0x36c8e: 0x6dfd9e20, 0x36c8f: 0x6dfda020, + 0x36c90: 0x6dfda220, 0x36c91: 0x6dfda420, 0x36c92: 0x6e105620, 0x36c93: 0x6e1f0a20, + 0x36c94: 0x6e1f0c20, 0x36c95: 0x6e1f0e20, 0x36c96: 0x6e1f1020, 0x36c97: 0x6e1f1220, + 0x36c98: 0x6e2a6220, 0x36c99: 0x6e2a6420, 0x36c9a: 0x6e330a20, 0x36c9b: 0x6e330c20, + 0x36c9c: 0x6e330e20, 0x36c9d: 0x6e331020, 0x36c9e: 0x6e2a6620, 0x36c9f: 0x6e393420, + 0x36ca0: 0x6e393620, 0x36ca1: 0x6e3d8820, 0x36ca2: 0x6e452c20, 0x36ca3: 0x6e468820, + 0x36ca4: 0x6c13e820, 0x36ca5: 0x6c13ea20, 0x36ca6: 0x6c251a20, 0x36ca7: 0x6c251c20, + 0x36ca8: 0x6c251e20, 0x36ca9: 0x6c252020, 0x36caa: 0x6c252220, 0x36cab: 0x6c252420, + 0x36cac: 0x6c252620, 0x36cad: 0x6c252820, 0x36cae: 0x6c252a20, 0x36caf: 0x6c252c20, + 0x36cb0: 0x6c252e20, 0x36cb1: 0x6c253020, 0x36cb2: 0x6c3c8c20, 0x36cb3: 0x6c3c8e20, + 0x36cb4: 0x6c3c9020, 0x36cb5: 0x6c3c9220, 0x36cb6: 0x6c3c9420, 0x36cb7: 0x6c3c9620, + 0x36cb8: 0x6c3c9820, 0x36cb9: 0x6c3c9a20, 0x36cba: 0x6c3c9c20, 0x36cbb: 0x6c3c9e20, + 0x36cbc: 0x6c3ca020, 0x36cbd: 0x6c3ca220, 0x36cbe: 0x6c3ca420, 0x36cbf: 0x6c3ca620, + // Block 0xdb3, offset 0x36cc0 + 0x36cc0: 0x6c3ca820, 0x36cc1: 0x6c3caa20, 0x36cc2: 0x6c3cac20, 0x36cc3: 0x6c59b820, + 0x36cc4: 0x6c59ba20, 0x36cc5: 0x6c59bc20, 0x36cc6: 0x6c59be20, 0x36cc7: 0x6c59c020, + 0x36cc8: 0x6c59c220, 0x36cc9: 0x6c59c420, 0x36cca: 0x6c59c620, 0x36ccb: 0x6c59c820, + 0x36ccc: 0x6c59ca20, 0x36ccd: 0x6c59cc20, 0x36cce: 0x6c59ce20, 0x36ccf: 0x6c59d020, + 0x36cd0: 0x6c59d220, 0x36cd1: 0x6c59d420, 0x36cd2: 0x6c59d620, 0x36cd3: 0x6c59d820, + 0x36cd4: 0x6c59da20, 0x36cd5: 0x6c59dc20, 0x36cd6: 0x6c59de20, 0x36cd7: 0x6c59e020, + 0x36cd8: 0x6c59e220, 0x36cd9: 0x6c59e420, 0x36cda: 0x6c59e620, 0x36cdb: 0x6c59e820, + 0x36cdc: 0x6c59ea20, 0x36cdd: 0x6c59ec20, 0x36cde: 0x6c59ee20, 0x36cdf: 0x6c59f020, + 0x36ce0: 0x6c59f220, 0x36ce1: 0x6c59f420, 0x36ce2: 0x6c59f620, 0x36ce3: 0x6c59f820, + 0x36ce4: 0x6c59fa20, 0x36ce5: 0x6c59fc20, 0x36ce6: 0x6c59fe20, 0x36ce7: 0x6c5a0020, + 0x36ce8: 0x6c5a0220, 0x36ce9: 0x6c5a0420, 0x36cea: 0x6c5a0620, 0x36ceb: 0x6c5a0820, + 0x36cec: 0x6c5a0a20, 0x36ced: 0x6c5a0c20, 0x36cee: 0x6c5a0e20, 0x36cef: 0x6c5a1020, + 0x36cf0: 0x6c5a1220, 0x36cf1: 0x6c7c7a20, 0x36cf2: 0x6c7c7c20, 0x36cf3: 0x6c7c7e20, + 0x36cf4: 0x6c7c8020, 0x36cf5: 0x6c7c8220, 0x36cf6: 0x6c7c8420, 0x36cf7: 0x6c7c8620, + 0x36cf8: 0x6c7c8820, 0x36cf9: 0x6c7c8a20, 0x36cfa: 0x6c7c8c20, 0x36cfb: 0x6c7c8e20, + 0x36cfc: 0x6c7c9020, 0x36cfd: 0x6c7c9220, 0x36cfe: 0x6c7c9420, 0x36cff: 0x6c7c9620, + // Block 0xdb4, offset 0x36d00 + 0x36d00: 0x6c7c9820, 0x36d01: 0x6c7c9a20, 0x36d02: 0x6c7c9c20, 0x36d03: 0x6c7c9e20, + 0x36d04: 0x6c7ca020, 0x36d05: 0x6c7ca220, 0x36d06: 0x6c7ca420, 0x36d07: 0x6c7ca620, + 0x36d08: 0x6c7ca820, 0x36d09: 0x6c7caa20, 0x36d0a: 0x6c7cac20, 0x36d0b: 0x6c7cae20, + 0x36d0c: 0x6c7cb020, 0x36d0d: 0x6c7cb220, 0x36d0e: 0x6c7cb420, 0x36d0f: 0x6c7cb620, + 0x36d10: 0x6c7cb820, 0x36d11: 0x6c7cba20, 0x36d12: 0x6c7cbc20, 0x36d13: 0x6c7cbe20, + 0x36d14: 0x6c7cc020, 0x36d15: 0x6c7cc220, 0x36d16: 0x6c7cc420, 0x36d17: 0x6c7cc620, + 0x36d18: 0x6c7cc820, 0x36d19: 0x6c7cca20, 0x36d1a: 0x6ca52a20, 0x36d1b: 0x6ca52c20, + 0x36d1c: 0x6ca52e20, 0x36d1d: 0x6ca53020, 0x36d1e: 0x6ca53220, 0x36d1f: 0x6ca53420, + 0x36d20: 0x6ca53620, 0x36d21: 0x6ca53820, 0x36d22: 0x6ca53a20, 0x36d23: 0x6ca53c20, + 0x36d24: 0x6ca53e20, 0x36d25: 0x6ca54020, 0x36d26: 0x6ca54220, 0x36d27: 0x6ca54420, + 0x36d28: 0x6ca54620, 0x36d29: 0x6ca54820, 0x36d2a: 0x6ca54a20, 0x36d2b: 0x6ca54c20, + 0x36d2c: 0x6ca54e20, 0x36d2d: 0x6ca55020, 0x36d2e: 0x6ca55220, 0x36d2f: 0x6ca55420, + 0x36d30: 0x6ca55620, 0x36d31: 0x6ca55820, 0x36d32: 0x6ca55a20, 0x36d33: 0x6ca55c20, + 0x36d34: 0x6ca55e20, 0x36d35: 0x6ca56020, 0x36d36: 0x6ca56220, 0x36d37: 0x6ca56420, + 0x36d38: 0x6ca56620, 0x36d39: 0x6ca56820, 0x36d3a: 0x6ca56a20, 0x36d3b: 0x6ca56c20, + 0x36d3c: 0x6ca56e20, 0x36d3d: 0x6ca57020, 0x36d3e: 0x6ca57220, 0x36d3f: 0x6ca57420, + // Block 0xdb5, offset 0x36d40 + 0x36d40: 0x6ca57620, 0x36d41: 0x6ca57820, 0x36d42: 0x6ca57a20, 0x36d43: 0x6ca57c20, + 0x36d44: 0x6ca57e20, 0x36d45: 0x6ca58020, 0x36d46: 0x6ca58220, 0x36d47: 0x6ca58420, + 0x36d48: 0x6ca58620, 0x36d49: 0x6ca58820, 0x36d4a: 0x6cd37220, 0x36d4b: 0x6cd37420, + 0x36d4c: 0x6cd37620, 0x36d4d: 0x6cd37820, 0x36d4e: 0x6cd37a20, 0x36d4f: 0x6cd37c20, + 0x36d50: 0x6cd37e20, 0x36d51: 0x6cd38020, 0x36d52: 0x6cd38220, 0x36d53: 0x6cd38420, + 0x36d54: 0x6cd38620, 0x36d55: 0x6cd38820, 0x36d56: 0x6cd38a20, 0x36d57: 0x6cd38c20, + 0x36d58: 0x6cd38e20, 0x36d59: 0x6cd39020, 0x36d5a: 0x6cd39220, 0x36d5b: 0x6cd39420, + 0x36d5c: 0x6cd39620, 0x36d5d: 0x6cd39820, 0x36d5e: 0x6cd39a20, 0x36d5f: 0x6cd39c20, + 0x36d60: 0x6cd39e20, 0x36d61: 0x6cd3a020, 0x36d62: 0x6cd3a220, 0x36d63: 0x6cd3a420, + 0x36d64: 0x6cd3a620, 0x36d65: 0x6cd3a820, 0x36d66: 0x6cd3aa20, 0x36d67: 0x6cd3ac20, + 0x36d68: 0x6cd3ae20, 0x36d69: 0x6cd3b020, 0x36d6a: 0x6cd3b220, 0x36d6b: 0x6cd3b420, + 0x36d6c: 0x6cd3b620, 0x36d6d: 0x6cd3b820, 0x36d6e: 0x6cd3ba20, 0x36d6f: 0x6cd3bc20, + 0x36d70: 0x6cd3be20, 0x36d71: 0x6cd3c020, 0x36d72: 0x6cd3c220, 0x36d73: 0x6cd3c420, + 0x36d74: 0x6cd3c620, 0x36d75: 0x6cd3c820, 0x36d76: 0x6cd3ca20, 0x36d77: 0x6cd3cc20, + 0x36d78: 0x6cd3ce20, 0x36d79: 0x6cd3d020, 0x36d7a: 0x6cd3d220, 0x36d7b: 0x6cd3d420, + 0x36d7c: 0x6cd3d620, 0x36d7d: 0x6cd3d820, 0x36d7e: 0x6cd3da20, 0x36d7f: 0x6cd3dc20, + // Block 0xdb6, offset 0x36d80 + 0x36d80: 0x6cd3de20, 0x36d81: 0x6cd3e020, 0x36d82: 0x6cd3e220, 0x36d83: 0x6cd3e420, + 0x36d84: 0x6cd3e620, 0x36d85: 0x6d017e20, 0x36d86: 0x6cd3e820, 0x36d87: 0x6cd3ea20, + 0x36d88: 0x6cd3ec20, 0x36d89: 0x6d018020, 0x36d8a: 0x6d018220, 0x36d8b: 0x6d018420, + 0x36d8c: 0x6d018620, 0x36d8d: 0x6d018820, 0x36d8e: 0x6d018a20, 0x36d8f: 0x6d018c20, + 0x36d90: 0x6d018e20, 0x36d91: 0x6d019020, 0x36d92: 0x6d019220, 0x36d93: 0x6d019420, + 0x36d94: 0x6d019620, 0x36d95: 0x6d019820, 0x36d96: 0x6d019a20, 0x36d97: 0x6d019c20, + 0x36d98: 0x6d019e20, 0x36d99: 0x6d01a020, 0x36d9a: 0x6d01a220, 0x36d9b: 0x6d01a420, + 0x36d9c: 0x6d01a620, 0x36d9d: 0x6d01a820, 0x36d9e: 0x6d01aa20, 0x36d9f: 0x6d01ac20, + 0x36da0: 0x6d01ae20, 0x36da1: 0x6d01b020, 0x36da2: 0x6d01b220, 0x36da3: 0x6d01b420, + 0x36da4: 0x6d01b620, 0x36da5: 0x6d01b820, 0x36da6: 0x6d01ba20, 0x36da7: 0x6d01bc20, + 0x36da8: 0x6d01be20, 0x36da9: 0x6d01c020, 0x36daa: 0x6d01c220, 0x36dab: 0x6cd3ee20, + 0x36dac: 0x6d01c420, 0x36dad: 0x6d01c620, 0x36dae: 0x6d01c820, 0x36daf: 0x6d01ca20, + 0x36db0: 0x6d01cc20, 0x36db1: 0x6d01ce20, 0x36db2: 0x6d01d020, 0x36db3: 0x6d01d220, + 0x36db4: 0x6cf5b420, 0x36db5: 0x6d01d420, 0x36db6: 0x6d01d620, 0x36db7: 0x6d01d820, + 0x36db8: 0x6d01da20, 0x36db9: 0x6d01dc20, 0x36dba: 0x6d01de20, 0x36dbb: 0x6d01e020, + 0x36dbc: 0x6d01e220, 0x36dbd: 0x6d01e420, 0x36dbe: 0x6d01e620, 0x36dbf: 0x6d01e820, + // Block 0xdb7, offset 0x36dc0 + 0x36dc0: 0x6d01ea20, 0x36dc1: 0x6d01ec20, 0x36dc2: 0x6d2f5220, 0x36dc3: 0x6d2f5420, + 0x36dc4: 0x6d2f5620, 0x36dc5: 0x6d2f5820, 0x36dc6: 0x6d2f5a20, 0x36dc7: 0x6d2f5c20, + 0x36dc8: 0x6d2f5e20, 0x36dc9: 0x6d2f6020, 0x36dca: 0x6d2f6220, 0x36dcb: 0x6d2f6420, + 0x36dcc: 0x6d2f6620, 0x36dcd: 0x6d2f6820, 0x36dce: 0x6d2f6a20, 0x36dcf: 0x6d2f6c20, + 0x36dd0: 0x6d2f6e20, 0x36dd1: 0x6d2f7020, 0x36dd2: 0x6d2f7220, 0x36dd3: 0x6d2f7420, + 0x36dd4: 0x6d2f7620, 0x36dd5: 0x6d2f7820, 0x36dd6: 0x6d2f7a20, 0x36dd7: 0x6d2f7c20, + 0x36dd8: 0x6d2f7e20, 0x36dd9: 0x6d2f8020, 0x36dda: 0x6d2f8220, 0x36ddb: 0x6d2f8420, + 0x36ddc: 0x6d2f8620, 0x36ddd: 0x6d2f8820, 0x36dde: 0x6d2f8a20, 0x36ddf: 0x6d2f8c20, + 0x36de0: 0x6d2f8e20, 0x36de1: 0x6d2f9020, 0x36de2: 0x6d2f9220, 0x36de3: 0x6d2f9420, + 0x36de4: 0x6d2f9620, 0x36de5: 0x6d2f9820, 0x36de6: 0x6d2f9a20, 0x36de7: 0x6d2f9c20, + 0x36de8: 0x6d2f9e20, 0x36de9: 0x6d2fa020, 0x36dea: 0x6d2fa220, 0x36deb: 0x6d2fa420, + 0x36dec: 0x6d2fa620, 0x36ded: 0x6d2fa820, 0x36dee: 0x6d2faa20, 0x36def: 0x6d2fac20, + 0x36df0: 0x6d2fae20, 0x36df1: 0x6d2fb020, 0x36df2: 0x6d2fb220, 0x36df3: 0x6d2fb420, + 0x36df4: 0x6d2fb620, 0x36df5: 0x6d2fb820, 0x36df6: 0x6d2fba20, 0x36df7: 0x6d2fbc20, + 0x36df8: 0x6d2fbe20, 0x36df9: 0x6d2fc020, 0x36dfa: 0x6d2fc220, 0x36dfb: 0x6d2fc420, + 0x36dfc: 0x6d5c5820, 0x36dfd: 0x6d5c5a20, 0x36dfe: 0x6d5c5c20, 0x36dff: 0x6d5c5e20, + // Block 0xdb8, offset 0x36e00 + 0x36e00: 0x6d5c6020, 0x36e01: 0x6d5c6220, 0x36e02: 0x6d5c6420, 0x36e03: 0x6d5c6620, + 0x36e04: 0x6d5c6820, 0x36e05: 0x6d5c6a20, 0x36e06: 0x6d5c6c20, 0x36e07: 0x6d5c6e20, + 0x36e08: 0x6d5c7020, 0x36e09: 0x6d5c7220, 0x36e0a: 0x6d5c7420, 0x36e0b: 0x6d5c7620, + 0x36e0c: 0x6d5c7820, 0x36e0d: 0x6d5c7a20, 0x36e0e: 0x6d5c7c20, 0x36e0f: 0x6d5c7e20, + 0x36e10: 0x6d5c8020, 0x36e11: 0x6d5c8220, 0x36e12: 0x6d5c8420, 0x36e13: 0x6d5c8620, + 0x36e14: 0x6d5c8820, 0x36e15: 0x6d5c8a20, 0x36e16: 0x6d5c8c20, 0x36e17: 0x6d5c8e20, + 0x36e18: 0x6d5c9020, 0x36e19: 0x6d5c9220, 0x36e1a: 0x6d5c9420, 0x36e1b: 0x6d5c9620, + 0x36e1c: 0x6d5c9820, 0x36e1d: 0x6d5c9a20, 0x36e1e: 0x6d5c9c20, 0x36e1f: 0x6d5c9e20, + 0x36e20: 0x6d5ca020, 0x36e21: 0x6d5ca220, 0x36e22: 0x6d5ca420, 0x36e23: 0x6d5ca620, + 0x36e24: 0x6d5ca820, 0x36e25: 0x6d5caa20, 0x36e26: 0x6d5cac20, 0x36e27: 0x6d5cae20, + 0x36e28: 0x6d5cb020, 0x36e29: 0x6d5cb220, 0x36e2a: 0x6d5cb420, 0x36e2b: 0x6d5cb620, + 0x36e2c: 0x6d5cb820, 0x36e2d: 0x6d5cba20, 0x36e2e: 0x6d5cbc20, 0x36e2f: 0x6d5cbe20, + 0x36e30: 0x6d5cc020, 0x36e31: 0x6d5cc220, 0x36e32: 0x6d5cc420, 0x36e33: 0x6d5cc620, + 0x36e34: 0x6d86e020, 0x36e35: 0x6d86e220, 0x36e36: 0x6d86e420, 0x36e37: 0x6d86e620, + 0x36e38: 0x6d86e820, 0x36e39: 0x6d86ea20, 0x36e3a: 0x6d86ec20, 0x36e3b: 0x6d86ee20, + 0x36e3c: 0x6d86f020, 0x36e3d: 0x6d86f220, 0x36e3e: 0x6d86f420, 0x36e3f: 0x6d86f620, + // Block 0xdb9, offset 0x36e40 + 0x36e40: 0x6d86f820, 0x36e41: 0x6d86fa20, 0x36e42: 0x6d86fc20, 0x36e43: 0x6d86fe20, + 0x36e44: 0x6d870020, 0x36e45: 0x6d870220, 0x36e46: 0x6d870420, 0x36e47: 0x6d5cc820, + 0x36e48: 0x6d870620, 0x36e49: 0x6d870820, 0x36e4a: 0x6d870a20, 0x36e4b: 0x6d870c20, + 0x36e4c: 0x6d870e20, 0x36e4d: 0x6d871020, 0x36e4e: 0x6d871220, 0x36e4f: 0x6d871420, + 0x36e50: 0x6d871620, 0x36e51: 0x6d871820, 0x36e52: 0x6d871a20, 0x36e53: 0x6d871c20, + 0x36e54: 0x6d871e20, 0x36e55: 0x6d872020, 0x36e56: 0x6d872220, 0x36e57: 0x6d872420, + 0x36e58: 0x6d872620, 0x36e59: 0x6d872820, 0x36e5a: 0x6d872a20, 0x36e5b: 0x6d872c20, + 0x36e5c: 0x6d872e20, 0x36e5d: 0x6d873020, 0x36e5e: 0x6d873220, 0x36e5f: 0x6d873420, + 0x36e60: 0x6d873620, 0x36e61: 0x6d873820, 0x36e62: 0x6d873a20, 0x36e63: 0x6d873c20, + 0x36e64: 0x6d873e20, 0x36e65: 0x6d874020, 0x36e66: 0x6d874220, 0x36e67: 0x6d874420, + 0x36e68: 0x6d874620, 0x36e69: 0x6d874820, 0x36e6a: 0x6dab8620, 0x36e6b: 0x6dab8820, + 0x36e6c: 0x6dab8a20, 0x36e6d: 0x6dab8c20, 0x36e6e: 0x6dab8e20, 0x36e6f: 0x6dab9020, + 0x36e70: 0x6dab9220, 0x36e71: 0x6dab9420, 0x36e72: 0x6dab9620, 0x36e73: 0x6dab9820, + 0x36e74: 0x6dab9a20, 0x36e75: 0x6dab9c20, 0x36e76: 0x6dab9e20, 0x36e77: 0x6daba020, + 0x36e78: 0x6daba220, 0x36e79: 0x6daba420, 0x36e7a: 0x6daba620, 0x36e7b: 0x6daba820, + 0x36e7c: 0x6dabaa20, 0x36e7d: 0x6dabac20, 0x36e7e: 0x6dabae20, 0x36e7f: 0x6dabb020, + // Block 0xdba, offset 0x36e80 + 0x36e80: 0x6dabb220, 0x36e81: 0x6dabb420, 0x36e82: 0x6dabb620, 0x36e83: 0x6dabb820, + 0x36e84: 0x6dabba20, 0x36e85: 0x6dabbc20, 0x36e86: 0x6dabbe20, 0x36e87: 0x6dabc020, + 0x36e88: 0x6dabc220, 0x36e89: 0x6dabc420, 0x36e8a: 0x6dabc620, 0x36e8b: 0x6dabc820, + 0x36e8c: 0x6dabca20, 0x36e8d: 0x6dabcc20, 0x36e8e: 0x6dabce20, 0x36e8f: 0x6dabd020, + 0x36e90: 0x6dabd220, 0x36e91: 0x6dabd420, 0x36e92: 0x6dabd620, 0x36e93: 0x6dabd820, + 0x36e94: 0x6dabda20, 0x36e95: 0x6dabdc20, 0x36e96: 0x6d874a20, 0x36e97: 0x6dabde20, + 0x36e98: 0x6dcbe220, 0x36e99: 0x6dcbe420, 0x36e9a: 0x6dcbe620, 0x36e9b: 0x6dcbe820, + 0x36e9c: 0x6dcbea20, 0x36e9d: 0x6dcbec20, 0x36e9e: 0x6dcbee20, 0x36e9f: 0x6dcbf020, + 0x36ea0: 0x6dcbf220, 0x36ea1: 0x6dcbf420, 0x36ea2: 0x6dcbf620, 0x36ea3: 0x6dcbf820, + 0x36ea4: 0x6dcbfa20, 0x36ea5: 0x6dcbfc20, 0x36ea6: 0x6dcbfe20, 0x36ea7: 0x6dcc0020, + 0x36ea8: 0x6dcc0220, 0x36ea9: 0x6dcc0420, 0x36eaa: 0x6dcc0620, 0x36eab: 0x6dcc0820, + 0x36eac: 0x6dcc0a20, 0x36ead: 0x6dcc0c20, 0x36eae: 0x6dcc0e20, 0x36eaf: 0x6dcc1020, + 0x36eb0: 0x6dcc1220, 0x36eb1: 0x6dcc1420, 0x36eb2: 0x6dcc1620, 0x36eb3: 0x6dcc1820, + 0x36eb4: 0x6dcc1a20, 0x36eb5: 0x6dcc1c20, 0x36eb6: 0x6dcc1e20, 0x36eb7: 0x6dcc2020, + 0x36eb8: 0x6dcc2220, 0x36eb9: 0x6dcc2420, 0x36eba: 0x6dcc2620, 0x36ebb: 0x6dcc2820, + 0x36ebc: 0x6dcc2a20, 0x36ebd: 0x6dcc2c20, 0x36ebe: 0x6dcc2e20, 0x36ebf: 0x6de71c20, + // Block 0xdbb, offset 0x36ec0 + 0x36ec0: 0x6de71e20, 0x36ec1: 0x6de72020, 0x36ec2: 0x6de72220, 0x36ec3: 0x6de72420, + 0x36ec4: 0x6de72620, 0x36ec5: 0x6de72820, 0x36ec6: 0x6de72a20, 0x36ec7: 0x6de72c20, + 0x36ec8: 0x6de72e20, 0x36ec9: 0x6de73020, 0x36eca: 0x6de73220, 0x36ecb: 0x6de73420, + 0x36ecc: 0x6de73620, 0x36ecd: 0x6de73820, 0x36ece: 0x6de73a20, 0x36ecf: 0x6de73c20, + 0x36ed0: 0x6de73e20, 0x36ed1: 0x6de74020, 0x36ed2: 0x6de74220, 0x36ed3: 0x6de74420, + 0x36ed4: 0x6de74620, 0x36ed5: 0x6df25c20, 0x36ed6: 0x6de74820, 0x36ed7: 0x6de74a20, + 0x36ed8: 0x6de74c20, 0x36ed9: 0x6de74e20, 0x36eda: 0x6dfdb820, 0x36edb: 0x6dfdba20, + 0x36edc: 0x6dfdbc20, 0x36edd: 0x6dfdbe20, 0x36ede: 0x6dfdc020, 0x36edf: 0x6dfdc220, + 0x36ee0: 0x6dfdc420, 0x36ee1: 0x6dfdc620, 0x36ee2: 0x6dfdc820, 0x36ee3: 0x6dfdca20, + 0x36ee4: 0x6dfdcc20, 0x36ee5: 0x6dfdce20, 0x36ee6: 0x6dfdd020, 0x36ee7: 0x6dfdd220, + 0x36ee8: 0x6dfdd420, 0x36ee9: 0x6dfdd620, 0x36eea: 0x6dfdd820, 0x36eeb: 0x6dfdda20, + 0x36eec: 0x6dfddc20, 0x36eed: 0x6e106820, 0x36eee: 0x6e106a20, 0x36eef: 0x6e106c20, + 0x36ef0: 0x6e106e20, 0x36ef1: 0x6e107020, 0x36ef2: 0x6e107220, 0x36ef3: 0x6e107420, + 0x36ef4: 0x6e107620, 0x36ef5: 0x6e107820, 0x36ef6: 0x6e107a20, 0x36ef7: 0x6e107c20, + 0x36ef8: 0x6e107e20, 0x36ef9: 0x6e108020, 0x36efa: 0x6e1f1820, 0x36efb: 0x6e1f1a20, + 0x36efc: 0x6e1f1c20, 0x36efd: 0x6e1f1e20, 0x36efe: 0x6e1f2020, 0x36eff: 0x6e1f2220, + // Block 0xdbc, offset 0x36f00 + 0x36f00: 0x6e1f2420, 0x36f01: 0x6e1f2620, 0x36f02: 0x6e108220, 0x36f03: 0x6e1f2820, + 0x36f04: 0x6e21a620, 0x36f05: 0x6e1f2a20, 0x36f06: 0x6e1f2c20, 0x36f07: 0x6e1f2e20, + 0x36f08: 0x6e2a6e20, 0x36f09: 0x6e2a7020, 0x36f0a: 0x6e2a7220, 0x36f0b: 0x6e2a7420, + 0x36f0c: 0x6e2a7620, 0x36f0d: 0x6e2a7820, 0x36f0e: 0x6e2a7a20, 0x36f0f: 0x6e331820, + 0x36f10: 0x6e331a20, 0x36f11: 0x6e331c20, 0x36f12: 0x6e331e20, 0x36f13: 0x6e393e20, + 0x36f14: 0x6e3d8c20, 0x36f15: 0x6e3d8e20, 0x36f16: 0x6e3d9020, 0x36f17: 0x6e3d9220, + 0x36f18: 0x6e3d9420, 0x36f19: 0x6e408420, 0x36f1a: 0x6e408620, 0x36f1b: 0x6e42ce20, + 0x36f1c: 0x6e444220, 0x36f1d: 0x6c13ec20, 0x36f1e: 0x6c3cb420, 0x36f1f: 0x6c5a1e20, + 0x36f20: 0x6c5a2020, 0x36f21: 0x6c7cd820, 0x36f22: 0x6c7cda20, 0x36f23: 0x6c7cdc20, + 0x36f24: 0x6c7cde20, 0x36f25: 0x6c7ce020, 0x36f26: 0x6c7ce220, 0x36f27: 0x6ca59620, + 0x36f28: 0x6ca59820, 0x36f29: 0x6ca59a20, 0x36f2a: 0x6cd3f820, 0x36f2b: 0x6cd3fa20, + 0x36f2c: 0x6cd3fc20, 0x36f2d: 0x6cd3fe20, 0x36f2e: 0x6cd40020, 0x36f2f: 0x6cd40220, + 0x36f30: 0x6cd40420, 0x36f31: 0x6cd40620, 0x36f32: 0x6d01fe20, 0x36f33: 0x6d020020, + 0x36f34: 0x6d020220, 0x36f35: 0x6d020420, 0x36f36: 0x6d2fd020, 0x36f37: 0x6d2fd220, + 0x36f38: 0x6d2fd420, 0x36f39: 0x6d2fd620, 0x36f3a: 0x6d2fd820, 0x36f3b: 0x6d2fda20, + 0x36f3c: 0x6d2fdc20, 0x36f3d: 0x6d2fde20, 0x36f3e: 0x6d2fe020, 0x36f3f: 0x6d2fe220, + // Block 0xdbd, offset 0x36f40 + 0x36f40: 0x6d2fe420, 0x36f41: 0x6d2fe620, 0x36f42: 0x6d5cd220, 0x36f43: 0x6d5cd420, + 0x36f44: 0x6d5cd620, 0x36f45: 0x6d5cd820, 0x36f46: 0x6d5cda20, 0x36f47: 0x6d5cdc20, + 0x36f48: 0x6d5cde20, 0x36f49: 0x6d5ce020, 0x36f4a: 0x6d875420, 0x36f4b: 0x6d875620, + 0x36f4c: 0x6d875820, 0x36f4d: 0x6d875a20, 0x36f4e: 0x6dcc3020, 0x36f4f: 0x6dabf020, + 0x36f50: 0x6dabf220, 0x36f51: 0x6dabf420, 0x36f52: 0x6dabf620, 0x36f53: 0x6dcc3220, + 0x36f54: 0x6dcc3420, 0x36f55: 0x6dcc3620, 0x36f56: 0x6de75220, 0x36f57: 0x6de75420, + 0x36f58: 0x6de75620, 0x36f59: 0x6de75820, 0x36f5a: 0x6de75a20, 0x36f5b: 0x6de75c20, + 0x36f5c: 0x6de75e20, 0x36f5d: 0x6e108820, 0x36f5e: 0x6dfde220, 0x36f5f: 0x6dfde420, + 0x36f60: 0x6dfde620, 0x36f61: 0x6e2a7c20, 0x36f62: 0x6e2a7e20, 0x36f63: 0x6e2a8020, + 0x36f64: 0x6e46ca20, 0x36f65: 0x6e46ea20, 0x36f66: 0x6c253420, 0x36f67: 0x6c253620, + 0x36f68: 0x6c3cba20, 0x36f69: 0x6c5a2a20, 0x36f6a: 0x6c5a2c20, 0x36f6b: 0x6c5a2e20, + 0x36f6c: 0x6c5a3020, 0x36f6d: 0x6c5a3220, 0x36f6e: 0x6c5a3420, 0x36f6f: 0x6c5a3620, + 0x36f70: 0x6c7cea20, 0x36f71: 0x6c7cec20, 0x36f72: 0x6c7cee20, 0x36f73: 0x6c7cf020, + 0x36f74: 0x6c7cf220, 0x36f75: 0x6c7cf420, 0x36f76: 0x6c7cf620, 0x36f77: 0x6c7cf820, + 0x36f78: 0x6c7cfa20, 0x36f79: 0x6ca5a220, 0x36f7a: 0x6ca5a420, 0x36f7b: 0x6ca5a620, + 0x36f7c: 0x6ca5a820, 0x36f7d: 0x6ca5aa20, 0x36f7e: 0x6ca5ac20, 0x36f7f: 0x6ca5ae20, + // Block 0xdbe, offset 0x36f80 + 0x36f80: 0x6ca5b020, 0x36f81: 0x6ca5b220, 0x36f82: 0x6ca5b420, 0x36f83: 0x6ca5b620, + 0x36f84: 0x6ca5b820, 0x36f85: 0x6ca5ba20, 0x36f86: 0x6ca5bc20, 0x36f87: 0x6ca5be20, + 0x36f88: 0x6ca5c020, 0x36f89: 0x6ca5c220, 0x36f8a: 0x6ca5c420, 0x36f8b: 0x6ca5c620, + 0x36f8c: 0x6ca5c820, 0x36f8d: 0x6ca5ca20, 0x36f8e: 0x6cd41220, 0x36f8f: 0x6cd41420, + 0x36f90: 0x6cd41620, 0x36f91: 0x6cd41820, 0x36f92: 0x6cd41a20, 0x36f93: 0x6cd41c20, + 0x36f94: 0x6cd41e20, 0x36f95: 0x6cd42020, 0x36f96: 0x6cd42220, 0x36f97: 0x6cd42420, + 0x36f98: 0x6d020a20, 0x36f99: 0x6d020c20, 0x36f9a: 0x6d020e20, 0x36f9b: 0x6d021020, + 0x36f9c: 0x6d021220, 0x36f9d: 0x6d021420, 0x36f9e: 0x6d021620, 0x36f9f: 0x6d021820, + 0x36fa0: 0x6d021a20, 0x36fa1: 0x6d021c20, 0x36fa2: 0x6d021e20, 0x36fa3: 0x6d022020, + 0x36fa4: 0x6d022220, 0x36fa5: 0x6d022420, 0x36fa6: 0x6d022620, 0x36fa7: 0x6d022820, + 0x36fa8: 0x6d022a20, 0x36fa9: 0x6d022c20, 0x36faa: 0x6d2fea20, 0x36fab: 0x6d2fec20, + 0x36fac: 0x6d2fee20, 0x36fad: 0x6d2ff020, 0x36fae: 0x6d2ff220, 0x36faf: 0x6d2ff420, + 0x36fb0: 0x6d2ff620, 0x36fb1: 0x6d2ff820, 0x36fb2: 0x6d5ce220, 0x36fb3: 0x6d5ce420, + 0x36fb4: 0x6d5ce620, 0x36fb5: 0x6d5ce820, 0x36fb6: 0x6d5cea20, 0x36fb7: 0x6d5cec20, + 0x36fb8: 0x6d5cee20, 0x36fb9: 0x6d5cf020, 0x36fba: 0x6d5cf220, 0x36fbb: 0x6d875c20, + 0x36fbc: 0x6d875e20, 0x36fbd: 0x6d876020, 0x36fbe: 0x6d876220, 0x36fbf: 0x6d876420, + // Block 0xdbf, offset 0x36fc0 + 0x36fc0: 0x6dabfc20, 0x36fc1: 0x6dabfe20, 0x36fc2: 0x6dac0020, 0x36fc3: 0x6dac0220, + 0x36fc4: 0x6dac0420, 0x36fc5: 0x6dac0620, 0x36fc6: 0x6dac0820, 0x36fc7: 0x6dcc3820, + 0x36fc8: 0x6dcc3a20, 0x36fc9: 0x6dcc3c20, 0x36fca: 0x6dcc3e20, 0x36fcb: 0x6dcc4020, + 0x36fcc: 0x6de76220, 0x36fcd: 0x6de76420, 0x36fce: 0x6de76620, 0x36fcf: 0x6de76820, + 0x36fd0: 0x6e2a8220, 0x36fd1: 0x6e1f3020, 0x36fd2: 0x6e1f3220, 0x36fd3: 0x6e2a8420, + 0x36fd4: 0x6e2a8620, 0x36fd5: 0x6c13f020, 0x36fd6: 0x6c13f220, 0x36fd7: 0x6c254020, + 0x36fd8: 0x6c254220, 0x36fd9: 0x6c254420, 0x36fda: 0x6c254620, 0x36fdb: 0x6c254820, + 0x36fdc: 0x6c254a20, 0x36fdd: 0x6c3cd620, 0x36fde: 0x6c3cd820, 0x36fdf: 0x6c3cda20, + 0x36fe0: 0x6c3cdc20, 0x36fe1: 0x6c3cde20, 0x36fe2: 0x6c3ce020, 0x36fe3: 0x6c3ce220, + 0x36fe4: 0x6c3ce420, 0x36fe5: 0x6c3ce620, 0x36fe6: 0x6c3ce820, 0x36fe7: 0x6c3cea20, + 0x36fe8: 0x6c3cec20, 0x36fe9: 0x6c5a7e20, 0x36fea: 0x6c5a8020, 0x36feb: 0x6c5a8220, + 0x36fec: 0x6c5a8420, 0x36fed: 0x6c5a8620, 0x36fee: 0x6c5a8820, 0x36fef: 0x6c5a8a20, + 0x36ff0: 0x6c5a8c20, 0x36ff1: 0x6c5a8e20, 0x36ff2: 0x6c5a9020, 0x36ff3: 0x6c5a9220, + 0x36ff4: 0x6c5a9420, 0x36ff5: 0x6c5a9620, 0x36ff6: 0x6c5a9820, 0x36ff7: 0x6c5a9a20, + 0x36ff8: 0x6c5a9c20, 0x36ff9: 0x6c5a9e20, 0x36ffa: 0x6c5aa020, 0x36ffb: 0x6c5aa220, + 0x36ffc: 0x6c5aa420, 0x36ffd: 0x6c5aa620, 0x36ffe: 0x6c5aa820, 0x36fff: 0x6c5aaa20, + // Block 0xdc0, offset 0x37000 + 0x37000: 0x6c5aac20, 0x37001: 0x6c5aae20, 0x37002: 0x6c5ab020, 0x37003: 0x6c5ab220, + 0x37004: 0x6c5ab420, 0x37005: 0x6c5ab620, 0x37006: 0x6c7d5a20, 0x37007: 0x6c7d5c20, + 0x37008: 0x6c7d5e20, 0x37009: 0x6c7d6020, 0x3700a: 0x6c7d6220, 0x3700b: 0x6c7d6420, + 0x3700c: 0x6c7d6620, 0x3700d: 0x6c7d6820, 0x3700e: 0x6c7d6a20, 0x3700f: 0x6c7d6c20, + 0x37010: 0x6c7d6e20, 0x37011: 0x6c7d7020, 0x37012: 0x6c7d7220, 0x37013: 0x6c7d7420, + 0x37014: 0x6c7d7620, 0x37015: 0x6c7d7820, 0x37016: 0x6c7d7a20, 0x37017: 0x6c7d7c20, + 0x37018: 0x6c7d7e20, 0x37019: 0x6c7d8020, 0x3701a: 0x6c7d8220, 0x3701b: 0x6c7d8420, + 0x3701c: 0x6c7d8620, 0x3701d: 0x6c7d8820, 0x3701e: 0x6c7d8a20, 0x3701f: 0x6c7d8c20, + 0x37020: 0x6c7d8e20, 0x37021: 0x6c7d9020, 0x37022: 0x6c7d9220, 0x37023: 0x6c7d9420, + 0x37024: 0x6c7d9620, 0x37025: 0x6c7d9820, 0x37026: 0x6c7d9a20, 0x37027: 0x6c7d9c20, + 0x37028: 0x6c7d9e20, 0x37029: 0x6c7da020, 0x3702a: 0x6c7da220, 0x3702b: 0x6c7da420, + 0x3702c: 0x6c7da620, 0x3702d: 0x6c7da820, 0x3702e: 0x6c7daa20, 0x3702f: 0x6c7dac20, + 0x37030: 0x6c7dae20, 0x37031: 0x6c7db020, 0x37032: 0x6c7db220, 0x37033: 0x6ca61220, + 0x37034: 0x6ca61420, 0x37035: 0x6ca61620, 0x37036: 0x6ca61820, 0x37037: 0x6ca61a20, + 0x37038: 0x6ca61c20, 0x37039: 0x6ca61e20, 0x3703a: 0x6ca62020, 0x3703b: 0x6ca62220, + 0x3703c: 0x6ca62420, 0x3703d: 0x6ca62620, 0x3703e: 0x6ca62820, 0x3703f: 0x6ca62a20, + // Block 0xdc1, offset 0x37040 + 0x37040: 0x6ca62c20, 0x37041: 0x6ca62e20, 0x37042: 0x6ca63020, 0x37043: 0x6ca63220, + 0x37044: 0x6ca63420, 0x37045: 0x6ca63620, 0x37046: 0x6ca63820, 0x37047: 0x6ca63a20, + 0x37048: 0x6ca63c20, 0x37049: 0x6ca63e20, 0x3704a: 0x6ca64020, 0x3704b: 0x6ca64220, + 0x3704c: 0x6ca64420, 0x3704d: 0x6ca64620, 0x3704e: 0x6ca64820, 0x3704f: 0x6ca64a20, + 0x37050: 0x6ca64c20, 0x37051: 0x6ca64e20, 0x37052: 0x6ca65020, 0x37053: 0x6ca65220, + 0x37054: 0x6ca65420, 0x37055: 0x6ca65620, 0x37056: 0x6ca65820, 0x37057: 0x6ca65a20, + 0x37058: 0x6ca65c20, 0x37059: 0x6ca65e20, 0x3705a: 0x6ca66020, 0x3705b: 0x6ca66220, + 0x3705c: 0x6ca66420, 0x3705d: 0x6ca66620, 0x3705e: 0x6ca66820, 0x3705f: 0x6ca66a20, + 0x37060: 0x6ca66c20, 0x37061: 0x6ca66e20, 0x37062: 0x6ca67020, 0x37063: 0x6ca67220, + 0x37064: 0x6ca67420, 0x37065: 0x6ca67620, 0x37066: 0x6ca67820, 0x37067: 0x6ca67a20, + 0x37068: 0x6ca67c20, 0x37069: 0x6ca67e20, 0x3706a: 0x6cd46c20, 0x3706b: 0x6cd46e20, + 0x3706c: 0x6cd47020, 0x3706d: 0x6cd47220, 0x3706e: 0x6cd47420, 0x3706f: 0x6cd47620, + 0x37070: 0x6cd47820, 0x37071: 0x6cd47a20, 0x37072: 0x6cd47c20, 0x37073: 0x6cd47e20, + 0x37074: 0x6cd48020, 0x37075: 0x6cd48220, 0x37076: 0x6cd48420, 0x37077: 0x6cd48620, + 0x37078: 0x6cd48820, 0x37079: 0x6cd48a20, 0x3707a: 0x6cd48c20, 0x3707b: 0x6cd48e20, + 0x3707c: 0x6cd49020, 0x3707d: 0x6cd49220, 0x3707e: 0x6cd49420, 0x3707f: 0x6cd49620, + // Block 0xdc2, offset 0x37080 + 0x37080: 0x6cd49820, 0x37081: 0x6cd49a20, 0x37082: 0x6cd49c20, 0x37083: 0x6cd49e20, + 0x37084: 0x6cd4a020, 0x37085: 0x6cd4a220, 0x37086: 0x6cd4a420, 0x37087: 0x6cd4a620, + 0x37088: 0x6cd4a820, 0x37089: 0x6cd4aa20, 0x3708a: 0x6d029c20, 0x3708b: 0x6d029e20, + 0x3708c: 0x6d02a020, 0x3708d: 0x6d02a220, 0x3708e: 0x6d02a420, 0x3708f: 0x6d02a620, + 0x37090: 0x6d02a820, 0x37091: 0x6d02aa20, 0x37092: 0x6d02ac20, 0x37093: 0x6d02ae20, + 0x37094: 0x6d02b020, 0x37095: 0x6d02b220, 0x37096: 0x6d02b420, 0x37097: 0x6d02b620, + 0x37098: 0x6d02b820, 0x37099: 0x6d02ba20, 0x3709a: 0x6d02bc20, 0x3709b: 0x6d02be20, + 0x3709c: 0x6d02c020, 0x3709d: 0x6d02c220, 0x3709e: 0x6d02c420, 0x3709f: 0x6d02c620, + 0x370a0: 0x6d02c820, 0x370a1: 0x6d02ca20, 0x370a2: 0x6d02cc20, 0x370a3: 0x6d02ce20, + 0x370a4: 0x6d02d020, 0x370a5: 0x6d02d220, 0x370a6: 0x6d02d420, 0x370a7: 0x6d02d620, + 0x370a8: 0x6d02d820, 0x370a9: 0x6d02da20, 0x370aa: 0x6d02dc20, 0x370ab: 0x6d02de20, + 0x370ac: 0x6d02e020, 0x370ad: 0x6d02e220, 0x370ae: 0x6d02e420, 0x370af: 0x6d02e620, + 0x370b0: 0x6d02e820, 0x370b1: 0x6d02ea20, 0x370b2: 0x6d02ec20, 0x370b3: 0x6d02ee20, + 0x370b4: 0x6d02f020, 0x370b5: 0x6d02f220, 0x370b6: 0x6d02f420, 0x370b7: 0x6d02f620, + 0x370b8: 0x6d02f820, 0x370b9: 0x6d02fa20, 0x370ba: 0x6d304a20, 0x370bb: 0x6d304c20, + 0x370bc: 0x6d304e20, 0x370bd: 0x6d305020, 0x370be: 0x6d305220, 0x370bf: 0x6d305420, + // Block 0xdc3, offset 0x370c0 + 0x370c0: 0x6d305620, 0x370c1: 0x6d305820, 0x370c2: 0x6d305a20, 0x370c3: 0x6d305c20, + 0x370c4: 0x6d305e20, 0x370c5: 0x6d306020, 0x370c6: 0x6d306220, 0x370c7: 0x6d306420, + 0x370c8: 0x6d306620, 0x370c9: 0x6d306820, 0x370ca: 0x6d306a20, 0x370cb: 0x6d306c20, + 0x370cc: 0x6d306e20, 0x370cd: 0x6d307020, 0x370ce: 0x6d307220, 0x370cf: 0x6d307420, + 0x370d0: 0x6d307620, 0x370d1: 0x6d307820, 0x370d2: 0x6d307a20, 0x370d3: 0x6d307c20, + 0x370d4: 0x6d307e20, 0x370d5: 0x6d308020, 0x370d6: 0x6d308220, 0x370d7: 0x6d308420, + 0x370d8: 0x6d308620, 0x370d9: 0x6d308820, 0x370da: 0x6d308a20, 0x370db: 0x6d308c20, + 0x370dc: 0x6d308e20, 0x370dd: 0x6d309020, 0x370de: 0x6d309220, 0x370df: 0x6d309420, + 0x370e0: 0x6d309620, 0x370e1: 0x6d309820, 0x370e2: 0x6d309a20, 0x370e3: 0x6d309c20, + 0x370e4: 0x6d309e20, 0x370e5: 0x6d30a020, 0x370e6: 0x6d30a220, 0x370e7: 0x6d30a420, + 0x370e8: 0x6d30a620, 0x370e9: 0x6d30a820, 0x370ea: 0x6d30aa20, 0x370eb: 0x6d30ac20, + 0x370ec: 0x6d30ae20, 0x370ed: 0x6d5d4420, 0x370ee: 0x6d5d4620, 0x370ef: 0x6d5d4820, + 0x370f0: 0x6d5d4a20, 0x370f1: 0x6d5d4c20, 0x370f2: 0x6d5d4e20, 0x370f3: 0x6d5d5020, + 0x370f4: 0x6d5d5220, 0x370f5: 0x6d5d5420, 0x370f6: 0x6d5d5620, 0x370f7: 0x6d5d5820, + 0x370f8: 0x6d5d5a20, 0x370f9: 0x6d5d5c20, 0x370fa: 0x6d5d5e20, 0x370fb: 0x6d5d6020, + 0x370fc: 0x6d5d6220, 0x370fd: 0x6d5d6420, 0x370fe: 0x6d5d6620, 0x370ff: 0x6d5d6820, + // Block 0xdc4, offset 0x37100 + 0x37100: 0x6d5d6a20, 0x37101: 0x6d5d6c20, 0x37102: 0x6d5d6e20, 0x37103: 0x6d5d7020, + 0x37104: 0x6d5d7220, 0x37105: 0x6d5d7420, 0x37106: 0x6d5d7620, 0x37107: 0x6d5d7820, + 0x37108: 0x6d5d7a20, 0x37109: 0x6d5d7c20, 0x3710a: 0x6d5d7e20, 0x3710b: 0x6d5d8020, + 0x3710c: 0x6d87a020, 0x3710d: 0x6d87a220, 0x3710e: 0x6d87a420, 0x3710f: 0x6d87a620, + 0x37110: 0x6d87a820, 0x37111: 0x6d87aa20, 0x37112: 0x6d87ac20, 0x37113: 0x6d87ae20, + 0x37114: 0x6d87b020, 0x37115: 0x6d87b220, 0x37116: 0x6d87b420, 0x37117: 0x6d87b620, + 0x37118: 0x6d87b820, 0x37119: 0x6d87ba20, 0x3711a: 0x6d87bc20, 0x3711b: 0x6d87be20, + 0x3711c: 0x6d87c020, 0x3711d: 0x6d87c220, 0x3711e: 0x6d87c420, 0x3711f: 0x6d87c620, + 0x37120: 0x6d87c820, 0x37121: 0x6d87ca20, 0x37122: 0x6d87cc20, 0x37123: 0x6d87ce20, + 0x37124: 0x6d87d020, 0x37125: 0x6d87d220, 0x37126: 0x6d87d420, 0x37127: 0x6d87d620, + 0x37128: 0x6d87d820, 0x37129: 0x6d87da20, 0x3712a: 0x6d87dc20, 0x3712b: 0x6d87de20, + 0x3712c: 0x6d87e020, 0x3712d: 0x6d87e220, 0x3712e: 0x6d87e420, 0x3712f: 0x6d87e620, + 0x37130: 0x6dac4a20, 0x37131: 0x6dac4c20, 0x37132: 0x6dac4e20, 0x37133: 0x6dac5020, + 0x37134: 0x6dac5220, 0x37135: 0x6dac5420, 0x37136: 0x6dac5620, 0x37137: 0x6dac5820, + 0x37138: 0x6dac5a20, 0x37139: 0x6dac5c20, 0x3713a: 0x6dac5e20, 0x3713b: 0x6dac6020, + 0x3713c: 0x6dac6220, 0x3713d: 0x6dac6420, 0x3713e: 0x6dac6620, 0x3713f: 0x6dac6820, + // Block 0xdc5, offset 0x37140 + 0x37140: 0x6dac6a20, 0x37141: 0x6dac6c20, 0x37142: 0x6dac6e20, 0x37143: 0x6dac7020, + 0x37144: 0x6dac7220, 0x37145: 0x6dac7420, 0x37146: 0x6dac7620, 0x37147: 0x6dac7820, + 0x37148: 0x6dac7a20, 0x37149: 0x6dac7c20, 0x3714a: 0x6dac7e20, 0x3714b: 0x6dac8020, + 0x3714c: 0x6dac8220, 0x3714d: 0x6dac8420, 0x3714e: 0x6dac8620, 0x3714f: 0x6dac8820, + 0x37150: 0x6dac8a20, 0x37151: 0x6dac8c20, 0x37152: 0x6dac8e20, 0x37153: 0x6dac9020, + 0x37154: 0x6dac9220, 0x37155: 0x6dac9420, 0x37156: 0x6dac9620, 0x37157: 0x6dcc7420, + 0x37158: 0x6dcc7620, 0x37159: 0x6dcc7820, 0x3715a: 0x6dcc7a20, 0x3715b: 0x6dcc7c20, + 0x3715c: 0x6dcc7e20, 0x3715d: 0x6dcc8020, 0x3715e: 0x6dcc8220, 0x3715f: 0x6dcc8420, + 0x37160: 0x6dcc8620, 0x37161: 0x6dcc8820, 0x37162: 0x6dcc8a20, 0x37163: 0x6dcc8c20, + 0x37164: 0x6dcc8e20, 0x37165: 0x6dcc9020, 0x37166: 0x6dcc9220, 0x37167: 0x6dcc9420, + 0x37168: 0x6dcc9620, 0x37169: 0x6dcc9820, 0x3716a: 0x6de78220, 0x3716b: 0x6de78420, + 0x3716c: 0x6de78620, 0x3716d: 0x6de78820, 0x3716e: 0x6de78a20, 0x3716f: 0x6de78c20, + 0x37170: 0x6de78e20, 0x37171: 0x6de79020, 0x37172: 0x6de79220, 0x37173: 0x6de79420, + 0x37174: 0x6de79620, 0x37175: 0x6de79820, 0x37176: 0x6de79a20, 0x37177: 0x6de79c20, + 0x37178: 0x6de79e20, 0x37179: 0x6de7a020, 0x3717a: 0x6de7a220, 0x3717b: 0x6dfe0a20, + 0x3717c: 0x6dfe0c20, 0x3717d: 0x6dfe0e20, 0x3717e: 0x6dfe1020, 0x3717f: 0x6dfe1220, + // Block 0xdc6, offset 0x37180 + 0x37180: 0x6dfe1420, 0x37181: 0x6dfe1620, 0x37182: 0x6dfe1820, 0x37183: 0x6dfe1a20, + 0x37184: 0x6dfe1c20, 0x37185: 0x6dfe1e20, 0x37186: 0x6dfe2020, 0x37187: 0x6dfe2220, + 0x37188: 0x6dfe2420, 0x37189: 0x6dfe2620, 0x3718a: 0x6dfe2820, 0x3718b: 0x6dfe2a20, + 0x3718c: 0x6dfe2c20, 0x3718d: 0x6dfe2e20, 0x3718e: 0x6dfe3020, 0x3718f: 0x6dfe3220, + 0x37190: 0x6dfe3420, 0x37191: 0x6dfe3620, 0x37192: 0x6e10a420, 0x37193: 0x6e10a620, + 0x37194: 0x6e10a820, 0x37195: 0x6e10aa20, 0x37196: 0x6e10ac20, 0x37197: 0x6e10ae20, + 0x37198: 0x6e10b020, 0x37199: 0x6e10b220, 0x3719a: 0x6e10b420, 0x3719b: 0x6e10b620, + 0x3719c: 0x6e10b820, 0x3719d: 0x6e1f3a20, 0x3719e: 0x6e1f3c20, 0x3719f: 0x6e1f3e20, + 0x371a0: 0x6e1f4020, 0x371a1: 0x6e1f4220, 0x371a2: 0x6e1f4420, 0x371a3: 0x6e1f4620, + 0x371a4: 0x6e1f4820, 0x371a5: 0x6e1f4a20, 0x371a6: 0x6e1f4c20, 0x371a7: 0x6e1f4e20, + 0x371a8: 0x6e1f5020, 0x371a9: 0x6e1f5220, 0x371aa: 0x6e1f5420, 0x371ab: 0x6e2a8c20, + 0x371ac: 0x6e2a8e20, 0x371ad: 0x6e2a9020, 0x371ae: 0x6e2a9220, 0x371af: 0x6e2a9420, + 0x371b0: 0x6e2a9620, 0x371b1: 0x6e2a9820, 0x371b2: 0x6e2a9a20, 0x371b3: 0x6e2a9c20, + 0x371b4: 0x6e332820, 0x371b5: 0x6e332a20, 0x371b6: 0x6e361a20, 0x371b7: 0x6e332c20, + 0x371b8: 0x6e332e20, 0x371b9: 0x6e394420, 0x371ba: 0x6e3d9820, 0x371bb: 0x6e3d9a20, + 0x371bc: 0x6e3d9c20, 0x371bd: 0x6e3d9e20, 0x371be: 0x6e408820, 0x371bf: 0x6e408a20, + // Block 0xdc7, offset 0x371c0 + 0x371c0: 0x6e408c20, 0x371c1: 0x6e42d020, 0x371c2: 0x6e42d220, 0x371c3: 0x6e444620, + 0x371c4: 0x6e46b220, 0x371c5: 0x6c050020, 0x371c6: 0x6c0a3620, 0x371c7: 0x6c13f820, + 0x371c8: 0x6c13fa20, 0x371c9: 0x6c13fc20, 0x371ca: 0x6c13fe20, 0x371cb: 0x6c140020, + 0x371cc: 0x6c140220, 0x371cd: 0x6c255020, 0x371ce: 0x6c255220, 0x371cf: 0x6c255420, + 0x371d0: 0x6c255620, 0x371d1: 0x6c255820, 0x371d2: 0x6c255a20, 0x371d3: 0x6c255c20, + 0x371d4: 0x6c255e20, 0x371d5: 0x6c3cfc20, 0x371d6: 0x6c3cfe20, 0x371d7: 0x6c3d0020, + 0x371d8: 0x6c3d0220, 0x371d9: 0x6c3d0420, 0x371da: 0x6c3d0620, 0x371db: 0x6c3d0820, + 0x371dc: 0x6c3d0a20, 0x371dd: 0x6c3d0c20, 0x371de: 0x6c3d0e20, 0x371df: 0x6c3d1020, + 0x371e0: 0x6c3d1220, 0x371e1: 0x6c3d1420, 0x371e2: 0x6c3d1620, 0x371e3: 0x6c3d1820, + 0x371e4: 0x6c3d1a20, 0x371e5: 0x6c3d1c20, 0x371e6: 0x6c3d1e20, 0x371e7: 0x6c3d2020, + 0x371e8: 0x6c3d2220, 0x371e9: 0x6c3d2420, 0x371ea: 0x6c3d2620, 0x371eb: 0x6c5ade20, + 0x371ec: 0x6c5ae020, 0x371ed: 0x6c5ae220, 0x371ee: 0x6c5ae420, 0x371ef: 0x6c5ae620, + 0x371f0: 0x6c5ae820, 0x371f1: 0x6c5aea20, 0x371f2: 0x6c5aec20, 0x371f3: 0x6c5aee20, + 0x371f4: 0x6c5af020, 0x371f5: 0x6c5af220, 0x371f6: 0x6c5af420, 0x371f7: 0x6c5af620, + 0x371f8: 0x6c5af820, 0x371f9: 0x6c5afa20, 0x371fa: 0x6c5afc20, 0x371fb: 0x6c5afe20, + 0x371fc: 0x6c5b0020, 0x371fd: 0x6c5b0220, 0x371fe: 0x6c5b0420, 0x371ff: 0x6c5b0620, + // Block 0xdc8, offset 0x37200 + 0x37200: 0x6c5b0820, 0x37201: 0x6c5b0a20, 0x37202: 0x6c5b0c20, 0x37203: 0x6c5b0e20, + 0x37204: 0x6c5b1020, 0x37205: 0x6c5b1220, 0x37206: 0x6c5b1420, 0x37207: 0x6c5b1620, + 0x37208: 0x6c5b1820, 0x37209: 0x6c5b1a20, 0x3720a: 0x6c5b1c20, 0x3720b: 0x6c5b1e20, + 0x3720c: 0x6c5b2020, 0x3720d: 0x6c5b2220, 0x3720e: 0x6c7dea20, 0x3720f: 0x6c7dec20, + 0x37210: 0x6c7dee20, 0x37211: 0x6c7df020, 0x37212: 0x6c7df220, 0x37213: 0x6c7df420, + 0x37214: 0x6c7df620, 0x37215: 0x6c7df820, 0x37216: 0x6c7dfa20, 0x37217: 0x6c7dfc20, + 0x37218: 0x6c7dfe20, 0x37219: 0x6c7e0020, 0x3721a: 0x6c7e0220, 0x3721b: 0x6c7e0420, + 0x3721c: 0x6c7e0620, 0x3721d: 0x6c7e0820, 0x3721e: 0x6c7e0a20, 0x3721f: 0x6c7e0c20, + 0x37220: 0x6c7e0e20, 0x37221: 0x6c7e1020, 0x37222: 0x6c7e1220, 0x37223: 0x6c7e1420, + 0x37224: 0x6c7e1620, 0x37225: 0x6c7e1820, 0x37226: 0x6c7e1a20, 0x37227: 0x6c7e1c20, + 0x37228: 0x6c7e1e20, 0x37229: 0x6c7e2020, 0x3722a: 0x6c7e2220, 0x3722b: 0x6ca6ae20, + 0x3722c: 0x6ca6b020, 0x3722d: 0x6ca6b220, 0x3722e: 0x6ca6b420, 0x3722f: 0x6ca6b620, + 0x37230: 0x6ca6b820, 0x37231: 0x6ca6ba20, 0x37232: 0x6ca6bc20, 0x37233: 0x6ca6be20, + 0x37234: 0x6ca6c020, 0x37235: 0x6ca6c220, 0x37236: 0x6ca6c420, 0x37237: 0x6ca6c620, + 0x37238: 0x6ca6c820, 0x37239: 0x6ca6ca20, 0x3723a: 0x6ca6cc20, 0x3723b: 0x6ca6ce20, + 0x3723c: 0x6ca6d020, 0x3723d: 0x6ca6d220, 0x3723e: 0x6ca6d420, 0x3723f: 0x6ca6d620, + // Block 0xdc9, offset 0x37240 + 0x37240: 0x6ca6d820, 0x37241: 0x6ca6da20, 0x37242: 0x6ca6dc20, 0x37243: 0x6ca6de20, + 0x37244: 0x6ca6e020, 0x37245: 0x6ca6e220, 0x37246: 0x6ca6e420, 0x37247: 0x6ca6e620, + 0x37248: 0x6cd4d620, 0x37249: 0x6cd4d820, 0x3724a: 0x6cd4da20, 0x3724b: 0x6cd4dc20, + 0x3724c: 0x6cd4de20, 0x3724d: 0x6cd4e020, 0x3724e: 0x6cd4e220, 0x3724f: 0x6cd4e420, + 0x37250: 0x6cd4e620, 0x37251: 0x6cd4e820, 0x37252: 0x6cd4ea20, 0x37253: 0x6cd4ec20, + 0x37254: 0x6cd4ee20, 0x37255: 0x6cd4f020, 0x37256: 0x6cd4f220, 0x37257: 0x6cd4f420, + 0x37258: 0x6cd4f620, 0x37259: 0x6cd4f820, 0x3725a: 0x6cd4fa20, 0x3725b: 0x6cd4fc20, + 0x3725c: 0x6cd4fe20, 0x3725d: 0x6cd50020, 0x3725e: 0x6cd50220, 0x3725f: 0x6cd50420, + 0x37260: 0x6cd50620, 0x37261: 0x6cd50820, 0x37262: 0x6cd50a20, 0x37263: 0x6cd50c20, + 0x37264: 0x6cd50e20, 0x37265: 0x6cd51020, 0x37266: 0x6d033420, 0x37267: 0x6d033620, + 0x37268: 0x6d033820, 0x37269: 0x6d033a20, 0x3726a: 0x6d033c20, 0x3726b: 0x6d033e20, + 0x3726c: 0x6d034020, 0x3726d: 0x6d034220, 0x3726e: 0x6d034420, 0x3726f: 0x6d034620, + 0x37270: 0x6d034820, 0x37271: 0x6d034a20, 0x37272: 0x6d034c20, 0x37273: 0x6d034e20, + 0x37274: 0x6d035020, 0x37275: 0x6d035220, 0x37276: 0x6d035420, 0x37277: 0x6d035620, + 0x37278: 0x6d035820, 0x37279: 0x6d035a20, 0x3727a: 0x6d035c20, 0x3727b: 0x6d035e20, + 0x3727c: 0x6d036020, 0x3727d: 0x6d036220, 0x3727e: 0x6d036420, 0x3727f: 0x6d036620, + // Block 0xdca, offset 0x37280 + 0x37280: 0x6d036820, 0x37281: 0x6d036a20, 0x37282: 0x6d036c20, 0x37283: 0x6d036e20, + 0x37284: 0x6d037020, 0x37285: 0x6d30e620, 0x37286: 0x6d30e820, 0x37287: 0x6d30ea20, + 0x37288: 0x6d30ec20, 0x37289: 0x6d30ee20, 0x3728a: 0x6d30f020, 0x3728b: 0x6d30f220, + 0x3728c: 0x6d30f420, 0x3728d: 0x6d30f620, 0x3728e: 0x6d30f820, 0x3728f: 0x6d30fa20, + 0x37290: 0x6d30fc20, 0x37291: 0x6d30fe20, 0x37292: 0x6d310020, 0x37293: 0x6d310220, + 0x37294: 0x6d310420, 0x37295: 0x6d310620, 0x37296: 0x6d310820, 0x37297: 0x6d310a20, + 0x37298: 0x6d5da020, 0x37299: 0x6d5da220, 0x3729a: 0x6d5da420, 0x3729b: 0x6d5da620, + 0x3729c: 0x6d5da820, 0x3729d: 0x6d5daa20, 0x3729e: 0x6d5dac20, 0x3729f: 0x6d5dae20, + 0x372a0: 0x6d5db020, 0x372a1: 0x6d5db220, 0x372a2: 0x6d5db420, 0x372a3: 0x6d5db620, + 0x372a4: 0x6d5db820, 0x372a5: 0x6d5dba20, 0x372a6: 0x6d5dbc20, 0x372a7: 0x6d5dbe20, + 0x372a8: 0x6d5dc020, 0x372a9: 0x6d5dc220, 0x372aa: 0x6d5dc420, 0x372ab: 0x6d5dc620, + 0x372ac: 0x6d5dc820, 0x372ad: 0x6d5dca20, 0x372ae: 0x6d880620, 0x372af: 0x6d880820, + 0x372b0: 0x6d880a20, 0x372b1: 0x6d880c20, 0x372b2: 0x6d880e20, 0x372b3: 0x6d881020, + 0x372b4: 0x6d881220, 0x372b5: 0x6d881420, 0x372b6: 0x6d881620, 0x372b7: 0x6d881820, + 0x372b8: 0x6d881a20, 0x372b9: 0x6d881c20, 0x372ba: 0x6d881e20, 0x372bb: 0x6d882020, + 0x372bc: 0x6d882220, 0x372bd: 0x6d882420, 0x372be: 0x6d882620, 0x372bf: 0x6d882820, + // Block 0xdcb, offset 0x372c0 + 0x372c0: 0x6d882a20, 0x372c1: 0x6d882c20, 0x372c2: 0x6d882e20, 0x372c3: 0x6dacaa20, + 0x372c4: 0x6dacac20, 0x372c5: 0x6dacae20, 0x372c6: 0x6dacb020, 0x372c7: 0x6dacb220, + 0x372c8: 0x6dacb420, 0x372c9: 0x6dacb620, 0x372ca: 0x6dacb820, 0x372cb: 0x6dacba20, + 0x372cc: 0x6dacbc20, 0x372cd: 0x6dacbe20, 0x372ce: 0x6dacc020, 0x372cf: 0x6dacc220, + 0x372d0: 0x6dacc420, 0x372d1: 0x6dacc620, 0x372d2: 0x6dccac20, 0x372d3: 0x6dccae20, + 0x372d4: 0x6dccb020, 0x372d5: 0x6dccb220, 0x372d6: 0x6dccb420, 0x372d7: 0x6dccb620, + 0x372d8: 0x6dccb820, 0x372d9: 0x6dccba20, 0x372da: 0x6de7b020, 0x372db: 0x6de7b220, + 0x372dc: 0x6de7b420, 0x372dd: 0x6de7b620, 0x372de: 0x6de7b820, 0x372df: 0x6de7ba20, + 0x372e0: 0x6dfe3c20, 0x372e1: 0x6dfe3e20, 0x372e2: 0x6dfe4020, 0x372e3: 0x6dfe4220, + 0x372e4: 0x6dfe4420, 0x372e5: 0x6e10be20, 0x372e6: 0x6e10c020, 0x372e7: 0x6e10c220, + 0x372e8: 0x6e10c420, 0x372e9: 0x6e10c620, 0x372ea: 0x6e1f5a20, 0x372eb: 0x6e1f5c20, + 0x372ec: 0x6e1f5e20, 0x372ed: 0x6e1f6020, 0x372ee: 0x6e1f6220, 0x372ef: 0x6e1f6420, + 0x372f0: 0x6e2aa220, 0x372f1: 0x6e2aa420, 0x372f2: 0x6e2aa620, 0x372f3: 0x6e2aa820, + 0x372f4: 0x6e333420, 0x372f5: 0x6e333620, 0x372f6: 0x6e394620, 0x372f7: 0x6e394820, + 0x372f8: 0x6e394a20, 0x372f9: 0x6e3da020, 0x372fa: 0x6e3da220, 0x372fb: 0x6c0a3a20, + 0x372fc: 0x6c3d2c20, 0x372fd: 0x6c7e2e20, 0x372fe: 0x6ca6f620, 0x372ff: 0x6cd52820, + // Block 0xdcc, offset 0x37300 + 0x37300: 0x6cb7b420, 0x37301: 0x6cd52a20, 0x37302: 0x6cd52c20, 0x37303: 0x6d037a20, + 0x37304: 0x6d311820, 0x37305: 0x6d5dd020, 0x37306: 0x6d5dd220, 0x37307: 0x6d5dd420, + 0x37308: 0x6dacca20, 0x37309: 0x6daccc20, 0x3730a: 0x6e10c820, 0x3730b: 0x6e333a20, + 0x3730c: 0x6c0a3e20, 0x3730d: 0x6c140420, 0x3730e: 0x6c140620, 0x3730f: 0x6c140820, + 0x37310: 0x6c257220, 0x37311: 0x6c257420, 0x37312: 0x6c257620, 0x37313: 0x6c257820, + 0x37314: 0x6c3d4820, 0x37315: 0x6c3d4a20, 0x37316: 0x6c3d4c20, 0x37317: 0x6c3d4e20, + 0x37318: 0x6c3d5020, 0x37319: 0x6c3d5220, 0x3731a: 0x6c3d5420, 0x3731b: 0x6c3d5620, + 0x3731c: 0x6c3d5820, 0x3731d: 0x6c3d5a20, 0x3731e: 0x6c3d5c20, 0x3731f: 0x6c3d5e20, + 0x37320: 0x6c3d6020, 0x37321: 0x6c3d6220, 0x37322: 0x6c3d6420, 0x37323: 0x6c5b5820, + 0x37324: 0x6c5b5a20, 0x37325: 0x6c5b5c20, 0x37326: 0x6c5b5e20, 0x37327: 0x6c5b6020, + 0x37328: 0x6c5b6220, 0x37329: 0x6c5b6420, 0x3732a: 0x6c5b6620, 0x3732b: 0x6c5b6820, + 0x3732c: 0x6c5b6a20, 0x3732d: 0x6c5b6c20, 0x3732e: 0x6c5b6e20, 0x3732f: 0x6c5b7020, + 0x37330: 0x6c5b7220, 0x37331: 0x6c5b7420, 0x37332: 0x6c5b7620, 0x37333: 0x6c5b7820, + 0x37334: 0x6c5b7a20, 0x37335: 0x6c5b7c20, 0x37336: 0x6c5b7e20, 0x37337: 0x6c5b8020, + 0x37338: 0x6c5b8220, 0x37339: 0x6c5b8420, 0x3733a: 0x6c5b8620, 0x3733b: 0x6c5b8820, + 0x3733c: 0x6c5b8a20, 0x3733d: 0x6c5b8c20, 0x3733e: 0x6c7e6a20, 0x3733f: 0x6c7e6c20, + // Block 0xdcd, offset 0x37340 + 0x37340: 0x6c7e6e20, 0x37341: 0x6c7e7020, 0x37342: 0x6c7e7220, 0x37343: 0x6c7e7420, + 0x37344: 0x6c7e7620, 0x37345: 0x6c7e7820, 0x37346: 0x6c7e7a20, 0x37347: 0x6c7e7c20, + 0x37348: 0x6c7e7e20, 0x37349: 0x6c7e8020, 0x3734a: 0x6c7e8220, 0x3734b: 0x6c7e8420, + 0x3734c: 0x6c7e8620, 0x3734d: 0x6c7e8820, 0x3734e: 0x6c7e8a20, 0x3734f: 0x6c7e8c20, + 0x37350: 0x6c7e8e20, 0x37351: 0x6c7e9020, 0x37352: 0x6c7e9220, 0x37353: 0x6c7e9420, + 0x37354: 0x6c7e9620, 0x37355: 0x6c7e9820, 0x37356: 0x6c7e9a20, 0x37357: 0x6c7e9c20, + 0x37358: 0x6ca73820, 0x37359: 0x6ca73a20, 0x3735a: 0x6ca73c20, 0x3735b: 0x6ca73e20, + 0x3735c: 0x6ca74020, 0x3735d: 0x6ca74220, 0x3735e: 0x6ca74420, 0x3735f: 0x6ca74620, + 0x37360: 0x6ca74820, 0x37361: 0x6ca74a20, 0x37362: 0x6ca74c20, 0x37363: 0x6ca74e20, + 0x37364: 0x6ca75020, 0x37365: 0x6ca75220, 0x37366: 0x6ca75420, 0x37367: 0x6ca75620, + 0x37368: 0x6ca75820, 0x37369: 0x6ca75a20, 0x3736a: 0x6ca75c20, 0x3736b: 0x6ca75e20, + 0x3736c: 0x6ca76020, 0x3736d: 0x6ca76220, 0x3736e: 0x6ca76420, 0x3736f: 0x6ca76620, + 0x37370: 0x6ca76820, 0x37371: 0x6ca76a20, 0x37372: 0x6cd56020, 0x37373: 0x6cd56220, + 0x37374: 0x6cd56420, 0x37375: 0x6cd56620, 0x37376: 0x6cd56820, 0x37377: 0x6cd56a20, + 0x37378: 0x6cd56c20, 0x37379: 0x6cd56e20, 0x3737a: 0x6cd57020, 0x3737b: 0x6cd57220, + 0x3737c: 0x6cd57420, 0x3737d: 0x6cd57620, 0x3737e: 0x6cd57820, 0x3737f: 0x6cd57a20, + // Block 0xdce, offset 0x37380 + 0x37380: 0x6cd57c20, 0x37381: 0x6cd57e20, 0x37382: 0x6cd58020, 0x37383: 0x6cd58220, + 0x37384: 0x6cd58420, 0x37385: 0x6ca76c20, 0x37386: 0x6cd58620, 0x37387: 0x6cd58820, + 0x37388: 0x6cd58a20, 0x37389: 0x6cd58c20, 0x3738a: 0x6cd58e20, 0x3738b: 0x6cd59020, + 0x3738c: 0x6cd59220, 0x3738d: 0x6d03c220, 0x3738e: 0x6d03c420, 0x3738f: 0x6d03c620, + 0x37390: 0x6d03c820, 0x37391: 0x6d03ca20, 0x37392: 0x6d03cc20, 0x37393: 0x6d03ce20, + 0x37394: 0x6d03d020, 0x37395: 0x6d03d220, 0x37396: 0x6d03d420, 0x37397: 0x6d03d620, + 0x37398: 0x6d03d820, 0x37399: 0x6d03da20, 0x3739a: 0x6d03dc20, 0x3739b: 0x6d03de20, + 0x3739c: 0x6d03e020, 0x3739d: 0x6d03e220, 0x3739e: 0x6d03e420, 0x3739f: 0x6d03e620, + 0x373a0: 0x6d03e820, 0x373a1: 0x6d03ea20, 0x373a2: 0x6d03ec20, 0x373a3: 0x6d03ee20, + 0x373a4: 0x6d03f020, 0x373a5: 0x6d03f220, 0x373a6: 0x6d03f420, 0x373a7: 0x6d03f620, + 0x373a8: 0x6d03f820, 0x373a9: 0x6d03fa20, 0x373aa: 0x6d03fc20, 0x373ab: 0x6d03fe20, + 0x373ac: 0x6d040020, 0x373ad: 0x6d040220, 0x373ae: 0x6d040420, 0x373af: 0x6d040620, + 0x373b0: 0x6d040820, 0x373b1: 0x6d040a20, 0x373b2: 0x6d040c20, 0x373b3: 0x6d040e20, + 0x373b4: 0x6d041020, 0x373b5: 0x6d041220, 0x373b6: 0x6d041420, 0x373b7: 0x6d041620, + 0x373b8: 0x6d041820, 0x373b9: 0x6d041a20, 0x373ba: 0x6d041c20, 0x373bb: 0x6d041e20, + 0x373bc: 0x6d042020, 0x373bd: 0x6d315020, 0x373be: 0x6d315220, 0x373bf: 0x6d315420, + // Block 0xdcf, offset 0x373c0 + 0x373c0: 0x6d315620, 0x373c1: 0x6d315820, 0x373c2: 0x6d315a20, 0x373c3: 0x6d315c20, + 0x373c4: 0x6d315e20, 0x373c5: 0x6d316020, 0x373c6: 0x6d316220, 0x373c7: 0x6d316420, + 0x373c8: 0x6d316620, 0x373c9: 0x6d316820, 0x373ca: 0x6d316a20, 0x373cb: 0x6d316c20, + 0x373cc: 0x6d316e20, 0x373cd: 0x6d317020, 0x373ce: 0x6d317220, 0x373cf: 0x6d317420, + 0x373d0: 0x6d317620, 0x373d1: 0x6d317820, 0x373d2: 0x6d317a20, 0x373d3: 0x6d317c20, + 0x373d4: 0x6d317e20, 0x373d5: 0x6d318020, 0x373d6: 0x6d318220, 0x373d7: 0x6d318420, + 0x373d8: 0x6d318620, 0x373d9: 0x6d318820, 0x373da: 0x6d318a20, 0x373db: 0x6d318c20, + 0x373dc: 0x6d318e20, 0x373dd: 0x6d319020, 0x373de: 0x6d319220, 0x373df: 0x6d319420, + 0x373e0: 0x6d319620, 0x373e1: 0x6d319820, 0x373e2: 0x6d319a20, 0x373e3: 0x6d319c20, + 0x373e4: 0x6d319e20, 0x373e5: 0x6d31a020, 0x373e6: 0x6d31a220, 0x373e7: 0x6d31a420, + 0x373e8: 0x6d31a620, 0x373e9: 0x6d31a820, 0x373ea: 0x6d31aa20, 0x373eb: 0x6d31ac20, + 0x373ec: 0x6d31ae20, 0x373ed: 0x6d31b020, 0x373ee: 0x6d31b220, 0x373ef: 0x6d31b420, + 0x373f0: 0x6d31b620, 0x373f1: 0x6d5e0c20, 0x373f2: 0x6d5e0e20, 0x373f3: 0x6d5e1020, + 0x373f4: 0x6d5e1220, 0x373f5: 0x6d5e1420, 0x373f6: 0x6d5e1620, 0x373f7: 0x6d5e1820, + 0x373f8: 0x6d5e1a20, 0x373f9: 0x6d5e1c20, 0x373fa: 0x6d5e1e20, 0x373fb: 0x6d5e2020, + 0x373fc: 0x6d5e2220, 0x373fd: 0x6d5e2420, 0x373fe: 0x6d5e2620, 0x373ff: 0x6d5e2820, + // Block 0xdd0, offset 0x37400 + 0x37400: 0x6d5e2a20, 0x37401: 0x6d5e2c20, 0x37402: 0x6d5e2e20, 0x37403: 0x6d5e3020, + 0x37404: 0x6d5e3220, 0x37405: 0x6d5e3420, 0x37406: 0x6d5e3620, 0x37407: 0x6d5e3820, + 0x37408: 0x6d5e3a20, 0x37409: 0x6d5e3c20, 0x3740a: 0x6d5e3e20, 0x3740b: 0x6d5e4020, + 0x3740c: 0x6d5e4220, 0x3740d: 0x6d5e4420, 0x3740e: 0x6d5e4620, 0x3740f: 0x6d5e4820, + 0x37410: 0x6d5e4a20, 0x37411: 0x6d5e4c20, 0x37412: 0x6d5e4e20, 0x37413: 0x6d5e5020, + 0x37414: 0x6d5e5220, 0x37415: 0x6d5e5420, 0x37416: 0x6d5e5620, 0x37417: 0x6d5e5820, + 0x37418: 0x6d5e5a20, 0x37419: 0x6d5e5c20, 0x3741a: 0x6d5e5e20, 0x3741b: 0x6d5e6020, + 0x3741c: 0x6d885c20, 0x3741d: 0x6d885e20, 0x3741e: 0x6d886020, 0x3741f: 0x6d886220, + 0x37420: 0x6d886420, 0x37421: 0x6d886620, 0x37422: 0x6d886820, 0x37423: 0x6d886a20, + 0x37424: 0x6d886c20, 0x37425: 0x6d886e20, 0x37426: 0x6d887020, 0x37427: 0x6d887220, + 0x37428: 0x6d887420, 0x37429: 0x6d887620, 0x3742a: 0x6d887820, 0x3742b: 0x6d887a20, + 0x3742c: 0x6d887c20, 0x3742d: 0x6d887e20, 0x3742e: 0x6d888020, 0x3742f: 0x6d888220, + 0x37430: 0x6d888420, 0x37431: 0x6d888620, 0x37432: 0x6d888820, 0x37433: 0x6d888a20, + 0x37434: 0x6d888c20, 0x37435: 0x6d888e20, 0x37436: 0x6d889020, 0x37437: 0x6d889220, + 0x37438: 0x6d889420, 0x37439: 0x6d889620, 0x3743a: 0x6d889820, 0x3743b: 0x6d889a20, + 0x3743c: 0x6d889c20, 0x3743d: 0x6d889e20, 0x3743e: 0x6d88a020, 0x3743f: 0x6d88a220, + // Block 0xdd1, offset 0x37440 + 0x37440: 0x6d88a420, 0x37441: 0x6d88a620, 0x37442: 0x6d88a820, 0x37443: 0x6d88aa20, + 0x37444: 0x6d88ac20, 0x37445: 0x6d88ae20, 0x37446: 0x6d88b020, 0x37447: 0x6d88b220, + 0x37448: 0x6d88b420, 0x37449: 0x6d88b620, 0x3744a: 0x6dacec20, 0x3744b: 0x6dacee20, + 0x3744c: 0x6dacf020, 0x3744d: 0x6dacf220, 0x3744e: 0x6dacf420, 0x3744f: 0x6dacf620, + 0x37450: 0x6dacf820, 0x37451: 0x6dacfa20, 0x37452: 0x6dacfc20, 0x37453: 0x6dacfe20, + 0x37454: 0x6dad0020, 0x37455: 0x6dad0220, 0x37456: 0x6dad0420, 0x37457: 0x6dad0620, + 0x37458: 0x6dad0820, 0x37459: 0x6dad0a20, 0x3745a: 0x6dad0c20, 0x3745b: 0x6dad0e20, + 0x3745c: 0x6dad1020, 0x3745d: 0x6dad1220, 0x3745e: 0x6dad1420, 0x3745f: 0x6dad1620, + 0x37460: 0x6dad1820, 0x37461: 0x6dad1a20, 0x37462: 0x6dad1c20, 0x37463: 0x6dad1e20, + 0x37464: 0x6dad2020, 0x37465: 0x6dad2220, 0x37466: 0x6dad2420, 0x37467: 0x6dad2620, + 0x37468: 0x6dad2820, 0x37469: 0x6dad2a20, 0x3746a: 0x6dad2c20, 0x3746b: 0x6dad2e20, + 0x3746c: 0x6dad3020, 0x3746d: 0x6dad3220, 0x3746e: 0x6dad3420, 0x3746f: 0x6dad3620, + 0x37470: 0x6dad3820, 0x37471: 0x6dad3a20, 0x37472: 0x6dad3c20, 0x37473: 0x6dad3e20, + 0x37474: 0x6dccd820, 0x37475: 0x6dccda20, 0x37476: 0x6dccdc20, 0x37477: 0x6dccde20, + 0x37478: 0x6dcce020, 0x37479: 0x6dcce220, 0x3747a: 0x6dcce420, 0x3747b: 0x6dcce620, + 0x3747c: 0x6dcce820, 0x3747d: 0x6dccea20, 0x3747e: 0x6dccec20, 0x3747f: 0x6dccee20, + // Block 0xdd2, offset 0x37480 + 0x37480: 0x6dccf020, 0x37481: 0x6dccf220, 0x37482: 0x6dccf420, 0x37483: 0x6dccf620, + 0x37484: 0x6dccf820, 0x37485: 0x6dccfa20, 0x37486: 0x6dccfc20, 0x37487: 0x6dccfe20, + 0x37488: 0x6dcd0020, 0x37489: 0x6dcd0220, 0x3748a: 0x6de7cc20, 0x3748b: 0x6dcd0420, + 0x3748c: 0x6dcd0620, 0x3748d: 0x6dcd0820, 0x3748e: 0x6dcd0a20, 0x3748f: 0x6dcd0c20, + 0x37490: 0x6dcd0e20, 0x37491: 0x6dcd1020, 0x37492: 0x6dcd1220, 0x37493: 0x6dcd1420, + 0x37494: 0x6dcd1620, 0x37495: 0x6de7ce20, 0x37496: 0x6de7d020, 0x37497: 0x6de7d220, + 0x37498: 0x6de7d420, 0x37499: 0x6de7d620, 0x3749a: 0x6de7d820, 0x3749b: 0x6de7da20, + 0x3749c: 0x6de7dc20, 0x3749d: 0x6de7de20, 0x3749e: 0x6de7e020, 0x3749f: 0x6de7e220, + 0x374a0: 0x6de7e420, 0x374a1: 0x6de7e620, 0x374a2: 0x6dfe5220, 0x374a3: 0x6de7e820, + 0x374a4: 0x6de7ea20, 0x374a5: 0x6de7ec20, 0x374a6: 0x6de7ee20, 0x374a7: 0x6de7f020, + 0x374a8: 0x6dfe5420, 0x374a9: 0x6dfe5620, 0x374aa: 0x6dfe5820, 0x374ab: 0x6dfe5a20, + 0x374ac: 0x6dfe5c20, 0x374ad: 0x6dfe5e20, 0x374ae: 0x6dfe6020, 0x374af: 0x6dfe6220, + 0x374b0: 0x6dfe6420, 0x374b1: 0x6dfe6620, 0x374b2: 0x6dfe6820, 0x374b3: 0x6dfe6a20, + 0x374b4: 0x6dfe6c20, 0x374b5: 0x6dfe6e20, 0x374b6: 0x6dfe7020, 0x374b7: 0x6e046620, + 0x374b8: 0x6dfe7220, 0x374b9: 0x6dfe7420, 0x374ba: 0x6dfe7620, 0x374bb: 0x6dfe7820, + 0x374bc: 0x6dfe7a20, 0x374bd: 0x6dfe7c20, 0x374be: 0x6dfe7e20, 0x374bf: 0x6dfe8020, + // Block 0xdd3, offset 0x374c0 + 0x374c0: 0x6e10d220, 0x374c1: 0x6e10d420, 0x374c2: 0x6e10d620, 0x374c3: 0x6e10d820, + 0x374c4: 0x6e10da20, 0x374c5: 0x6e10dc20, 0x374c6: 0x6e1f6c20, 0x374c7: 0x6e1f6e20, + 0x374c8: 0x6e1f7020, 0x374c9: 0x6e1f7220, 0x374ca: 0x6e2aaa20, 0x374cb: 0x6e2aac20, + 0x374cc: 0x6e2aae20, 0x374cd: 0x6e2ab020, 0x374ce: 0x6e2ab220, 0x374cf: 0x6e2ab420, + 0x374d0: 0x6e2ab620, 0x374d1: 0x6e2ab820, 0x374d2: 0x6e2aba20, 0x374d3: 0x6e334020, + 0x374d4: 0x6e328a20, 0x374d5: 0x6e334220, 0x374d6: 0x6e334420, 0x374d7: 0x6e394e20, + 0x374d8: 0x6e395020, 0x374d9: 0x6e395220, 0x374da: 0x6e395420, 0x374db: 0x6e3da420, + 0x374dc: 0x6e3da620, 0x374dd: 0x6e3da820, 0x374de: 0x6e444a20, 0x374df: 0x6e444c20, + 0x374e0: 0x6e463420, 0x374e1: 0x6e46cc20, 0x374e2: 0x6c0a4220, 0x374e3: 0x6c258020, + 0x374e4: 0x6c258220, 0x374e5: 0x6c258420, 0x374e6: 0x6c258620, 0x374e7: 0x6c3d7220, + 0x374e8: 0x6c3d7420, 0x374e9: 0x6c3d7620, 0x374ea: 0x6c3d7820, 0x374eb: 0x6c3d7a20, + 0x374ec: 0x6c3d7c20, 0x374ed: 0x6c3d7e20, 0x374ee: 0x6c3d8020, 0x374ef: 0x6c3d8220, + 0x374f0: 0x6c3d8420, 0x374f1: 0x6c3d8620, 0x374f2: 0x6c3d8820, 0x374f3: 0x6c3d8a20, + 0x374f4: 0x6c5baa20, 0x374f5: 0x6c5bac20, 0x374f6: 0x6c5bae20, 0x374f7: 0x6c5bb020, + 0x374f8: 0x6c5bb220, 0x374f9: 0x6c5bb420, 0x374fa: 0x6c5bb620, 0x374fb: 0x6c5bb820, + 0x374fc: 0x6c5bba20, 0x374fd: 0x6c5bbc20, 0x374fe: 0x6c5bbe20, 0x374ff: 0x6c5bc020, + // Block 0xdd4, offset 0x37500 + 0x37500: 0x6c5bc220, 0x37501: 0x6c5bc420, 0x37502: 0x6c5bc620, 0x37503: 0x6c5bc820, + 0x37504: 0x6c5bca20, 0x37505: 0x6c5bcc20, 0x37506: 0x6c5bce20, 0x37507: 0x6c7ec220, + 0x37508: 0x6c7ec420, 0x37509: 0x6c7ec620, 0x3750a: 0x6c7ec820, 0x3750b: 0x6c7eca20, + 0x3750c: 0x6c7ecc20, 0x3750d: 0x6c7ece20, 0x3750e: 0x6c7ed020, 0x3750f: 0x6c7ed220, + 0x37510: 0x6c7ed420, 0x37511: 0x6c7ed620, 0x37512: 0x6c7ed820, 0x37513: 0x6c7eda20, + 0x37514: 0x6c7edc20, 0x37515: 0x6c7ede20, 0x37516: 0x6c7ee020, 0x37517: 0x6c7ee220, + 0x37518: 0x6c7ee420, 0x37519: 0x6c7ee620, 0x3751a: 0x6c7ee820, 0x3751b: 0x6c7eea20, + 0x3751c: 0x6c7eec20, 0x3751d: 0x6c7eee20, 0x3751e: 0x6c7ef020, 0x3751f: 0x6c7ef220, + 0x37520: 0x6ca79420, 0x37521: 0x6ca79620, 0x37522: 0x6ca79820, 0x37523: 0x6ca79a20, + 0x37524: 0x6ca79c20, 0x37525: 0x6ca79e20, 0x37526: 0x6ca7a020, 0x37527: 0x6ca7a220, + 0x37528: 0x6ca7a420, 0x37529: 0x6ca7a620, 0x3752a: 0x6ca7a820, 0x3752b: 0x6ca7aa20, + 0x3752c: 0x6ca7ac20, 0x3752d: 0x6ca7ae20, 0x3752e: 0x6ca7b020, 0x3752f: 0x6ca7b220, + 0x37530: 0x6ca7b420, 0x37531: 0x6ca7b620, 0x37532: 0x6ca7b820, 0x37533: 0x6ca7ba20, + 0x37534: 0x6ca7bc20, 0x37535: 0x6ca7be20, 0x37536: 0x6cd5ba20, 0x37537: 0x6cd5bc20, + 0x37538: 0x6cd5be20, 0x37539: 0x6cd5c020, 0x3753a: 0x6cd5c220, 0x3753b: 0x6cd5c420, + 0x3753c: 0x6cd5c620, 0x3753d: 0x6cd5c820, 0x3753e: 0x6cd5ca20, 0x3753f: 0x6cd5cc20, + // Block 0xdd5, offset 0x37540 + 0x37540: 0x6cd5ce20, 0x37541: 0x6cd5d020, 0x37542: 0x6cd5d220, 0x37543: 0x6cd5d420, + 0x37544: 0x6cd5d620, 0x37545: 0x6cd5d820, 0x37546: 0x6cd5da20, 0x37547: 0x6cd5dc20, + 0x37548: 0x6cd5de20, 0x37549: 0x6cd5e020, 0x3754a: 0x6cd5e220, 0x3754b: 0x6cd5e420, + 0x3754c: 0x6cd5e620, 0x3754d: 0x6cd5e820, 0x3754e: 0x6cd5ea20, 0x3754f: 0x6cd5ec20, + 0x37550: 0x6cd5ee20, 0x37551: 0x6cd5f020, 0x37552: 0x6cd5f220, 0x37553: 0x6cd5f420, + 0x37554: 0x6cd5f620, 0x37555: 0x6cd5f820, 0x37556: 0x6cd5fa20, 0x37557: 0x6cd5fc20, + 0x37558: 0x6cd5fe20, 0x37559: 0x6cd60020, 0x3755a: 0x6cd60220, 0x3755b: 0x6d044620, + 0x3755c: 0x6d044820, 0x3755d: 0x6d044a20, 0x3755e: 0x6d044c20, 0x3755f: 0x6d044e20, + 0x37560: 0x6d045020, 0x37561: 0x6d045220, 0x37562: 0x6d045420, 0x37563: 0x6d045620, + 0x37564: 0x6d045820, 0x37565: 0x6d045a20, 0x37566: 0x6d045c20, 0x37567: 0x6d045e20, + 0x37568: 0x6d046020, 0x37569: 0x6d046220, 0x3756a: 0x6d046420, 0x3756b: 0x6d046620, + 0x3756c: 0x6d046820, 0x3756d: 0x6d046a20, 0x3756e: 0x6d046c20, 0x3756f: 0x6d046e20, + 0x37570: 0x6d047020, 0x37571: 0x6d047220, 0x37572: 0x6d047420, 0x37573: 0x6d047620, + 0x37574: 0x6d047820, 0x37575: 0x6d047a20, 0x37576: 0x6d047c20, 0x37577: 0x6d047e20, + 0x37578: 0x6d31d420, 0x37579: 0x6d31d620, 0x3757a: 0x6d31d820, 0x3757b: 0x6d31da20, + 0x3757c: 0x6d31dc20, 0x3757d: 0x6d31de20, 0x3757e: 0x6d31e020, 0x3757f: 0x6d31e220, + // Block 0xdd6, offset 0x37580 + 0x37580: 0x6d31e420, 0x37581: 0x6d31e620, 0x37582: 0x6d31e820, 0x37583: 0x6d31ea20, + 0x37584: 0x6d31ec20, 0x37585: 0x6d31ee20, 0x37586: 0x6d31f020, 0x37587: 0x6d31f220, + 0x37588: 0x6d31f420, 0x37589: 0x6d31f620, 0x3758a: 0x6d31f820, 0x3758b: 0x6d31fa20, + 0x3758c: 0x6d31fc20, 0x3758d: 0x6d31fe20, 0x3758e: 0x6d320020, 0x3758f: 0x6d320220, + 0x37590: 0x6d5e7e20, 0x37591: 0x6d5e8020, 0x37592: 0x6d5e8220, 0x37593: 0x6d5e8420, + 0x37594: 0x6d5e8620, 0x37595: 0x6d5e8820, 0x37596: 0x6d5e8a20, 0x37597: 0x6d5e8c20, + 0x37598: 0x6d5e8e20, 0x37599: 0x6d5e9020, 0x3759a: 0x6d5e9220, 0x3759b: 0x6d5e9420, + 0x3759c: 0x6d5e9620, 0x3759d: 0x6d5e9820, 0x3759e: 0x6d5e9a20, 0x3759f: 0x6d5e9c20, + 0x375a0: 0x6d5e9e20, 0x375a1: 0x6d5ea020, 0x375a2: 0x6d627c20, 0x375a3: 0x6d5ea220, + 0x375a4: 0x6d5ea420, 0x375a5: 0x6d5ea620, 0x375a6: 0x6d5ea820, 0x375a7: 0x6d5eaa20, + 0x375a8: 0x6d5eac20, 0x375a9: 0x6d5eae20, 0x375aa: 0x6d5eb020, 0x375ab: 0x6d5eb220, + 0x375ac: 0x6d88da20, 0x375ad: 0x6d88dc20, 0x375ae: 0x6d88de20, 0x375af: 0x6d88e020, + 0x375b0: 0x6d88e220, 0x375b1: 0x6d88e420, 0x375b2: 0x6d88e620, 0x375b3: 0x6d88e820, + 0x375b4: 0x6d88ea20, 0x375b5: 0x6d88ec20, 0x375b6: 0x6d88ee20, 0x375b7: 0x6d88f020, + 0x375b8: 0x6d88f220, 0x375b9: 0x6d88f420, 0x375ba: 0x6d88f620, 0x375bb: 0x6d88f820, + 0x375bc: 0x6dad5a20, 0x375bd: 0x6d88fa20, 0x375be: 0x6d88fc20, 0x375bf: 0x6d88fe20, + // Block 0xdd7, offset 0x375c0 + 0x375c0: 0x6d890020, 0x375c1: 0x6d890220, 0x375c2: 0x6d890420, 0x375c3: 0x6d890620, + 0x375c4: 0x6d890820, 0x375c5: 0x6d890a20, 0x375c6: 0x6d890c20, 0x375c7: 0x6d890e20, + 0x375c8: 0x6d891020, 0x375c9: 0x6d891220, 0x375ca: 0x6d891420, 0x375cb: 0x6d891620, + 0x375cc: 0x6dad5c20, 0x375cd: 0x6dad5e20, 0x375ce: 0x6dad6020, 0x375cf: 0x6dad6220, + 0x375d0: 0x6dad6420, 0x375d1: 0x6dad6620, 0x375d2: 0x6dad6820, 0x375d3: 0x6dad6a20, + 0x375d4: 0x6dad6c20, 0x375d5: 0x6dad6e20, 0x375d6: 0x6dad7020, 0x375d7: 0x6dad7220, + 0x375d8: 0x6dad7420, 0x375d9: 0x6dad7620, 0x375da: 0x6dad7820, 0x375db: 0x6dad7a20, + 0x375dc: 0x6dad7c20, 0x375dd: 0x6dad7e20, 0x375de: 0x6dad8020, 0x375df: 0x6dad8220, + 0x375e0: 0x6dcd2420, 0x375e1: 0x6dcd2620, 0x375e2: 0x6dcd2820, 0x375e3: 0x6dcd2a20, + 0x375e4: 0x6dcd2c20, 0x375e5: 0x6dcd2e20, 0x375e6: 0x6dcd3020, 0x375e7: 0x6dcd3220, + 0x375e8: 0x6dcd3420, 0x375e9: 0x6dad8420, 0x375ea: 0x6de7f820, 0x375eb: 0x6de7fa20, + 0x375ec: 0x6de7fc20, 0x375ed: 0x6de7fe20, 0x375ee: 0x6de80020, 0x375ef: 0x6de80220, + 0x375f0: 0x6dfe8820, 0x375f1: 0x6dfe8a20, 0x375f2: 0x6de80420, 0x375f3: 0x6dfe8c20, + 0x375f4: 0x6dfe8e20, 0x375f5: 0x6e10e420, 0x375f6: 0x6dfe9020, 0x375f7: 0x6dfe9220, + 0x375f8: 0x6dfe9420, 0x375f9: 0x6dfe9620, 0x375fa: 0x6dfe9820, 0x375fb: 0x6e10e620, + 0x375fc: 0x6e10e820, 0x375fd: 0x6e10ea20, 0x375fe: 0x6e10ec20, 0x375ff: 0x6e10ee20, + // Block 0xdd8, offset 0x37600 + 0x37600: 0x6e10f020, 0x37601: 0x6e10f220, 0x37602: 0x6e10f420, 0x37603: 0x6e10f620, + 0x37604: 0x6e10f820, 0x37605: 0x6e10fa20, 0x37606: 0x6e10fc20, 0x37607: 0x6e10fe20, + 0x37608: 0x6e110020, 0x37609: 0x6e1f7a20, 0x3760a: 0x6e2abc20, 0x3760b: 0x6e2abe20, + 0x3760c: 0x6e334620, 0x3760d: 0x6e334820, 0x3760e: 0x6e395620, 0x3760f: 0x6e334a20, + 0x37610: 0x6e334c20, 0x37611: 0x6e334e20, 0x37612: 0x6e395820, 0x37613: 0x6e3daa20, + 0x37614: 0x6e444e20, 0x37615: 0x6c258e20, 0x37616: 0x6c259020, 0x37617: 0x6c3d9420, + 0x37618: 0x6c3d9620, 0x37619: 0x6c5be620, 0x3761a: 0x6c5be820, 0x3761b: 0x6c5bea20, + 0x3761c: 0x6c5bec20, 0x3761d: 0x6c5bee20, 0x3761e: 0x6c5bf020, 0x3761f: 0x6c5bf220, + 0x37620: 0x6c7f0c20, 0x37621: 0x6c7f0e20, 0x37622: 0x6c7f1020, 0x37623: 0x6c7f1220, + 0x37624: 0x6c7f1420, 0x37625: 0x6c7f1620, 0x37626: 0x6c7f1820, 0x37627: 0x6c7f1a20, + 0x37628: 0x6c7f1c20, 0x37629: 0x6c7f1e20, 0x3762a: 0x6c7f2020, 0x3762b: 0x6c7f2220, + 0x3762c: 0x6c7f2420, 0x3762d: 0x6c7f2620, 0x3762e: 0x6c7f2820, 0x3762f: 0x6c7f2a20, + 0x37630: 0x6c7f2c20, 0x37631: 0x6ca7ca20, 0x37632: 0x6ca7cc20, 0x37633: 0x6ca7ce20, + 0x37634: 0x6ca7d020, 0x37635: 0x6ca7d220, 0x37636: 0x6ca7d420, 0x37637: 0x6ca7d620, + 0x37638: 0x6ca7d820, 0x37639: 0x6ca7da20, 0x3763a: 0x6ca7dc20, 0x3763b: 0x6ca7de20, + 0x3763c: 0x6ca7e020, 0x3763d: 0x6ca7e220, 0x3763e: 0x6cd61a20, 0x3763f: 0x6cd61c20, + // Block 0xdd9, offset 0x37640 + 0x37640: 0x6cd61e20, 0x37641: 0x6cd62020, 0x37642: 0x6cd62220, 0x37643: 0x6cd62420, + 0x37644: 0x6cd62620, 0x37645: 0x6cd62820, 0x37646: 0x6cd62a20, 0x37647: 0x6cd62c20, + 0x37648: 0x6cd62e20, 0x37649: 0x6cd63020, 0x3764a: 0x6d049620, 0x3764b: 0x6d049820, + 0x3764c: 0x6d049a20, 0x3764d: 0x6d049c20, 0x3764e: 0x6d049e20, 0x3764f: 0x6d04a020, + 0x37650: 0x6d04a220, 0x37651: 0x6d04a420, 0x37652: 0x6d04a620, 0x37653: 0x6d04a820, + 0x37654: 0x6d04aa20, 0x37655: 0x6d04ac20, 0x37656: 0x6d04ae20, 0x37657: 0x6d04b020, + 0x37658: 0x6d321020, 0x37659: 0x6d321220, 0x3765a: 0x6d321420, 0x3765b: 0x6d321620, + 0x3765c: 0x6d321820, 0x3765d: 0x6d321a20, 0x3765e: 0x6d321c20, 0x3765f: 0x6d321e20, + 0x37660: 0x6d322020, 0x37661: 0x6d322220, 0x37662: 0x6d322420, 0x37663: 0x6d322620, + 0x37664: 0x6d322820, 0x37665: 0x6d5eb620, 0x37666: 0x6d5eb820, 0x37667: 0x6d5eba20, + 0x37668: 0x6d5ebc20, 0x37669: 0x6d5ebe20, 0x3766a: 0x6d5ec020, 0x3766b: 0x6d5ec220, + 0x3766c: 0x6d5ec420, 0x3766d: 0x6d892420, 0x3766e: 0x6d892620, 0x3766f: 0x6dad9020, + 0x37670: 0x6d892820, 0x37671: 0x6d892a20, 0x37672: 0x6dad9220, 0x37673: 0x6dad9420, + 0x37674: 0x6dad9620, 0x37675: 0x6dad9820, 0x37676: 0x6dad9a20, 0x37677: 0x6dad9c20, + 0x37678: 0x6dad9e20, 0x37679: 0x6dada020, 0x3767a: 0x6de80820, 0x3767b: 0x6dada220, + 0x3767c: 0x6dcd3c20, 0x3767d: 0x6dcd3e20, 0x3767e: 0x6dcd4020, 0x3767f: 0x6dcd4220, + // Block 0xdda, offset 0x37680 + 0x37680: 0x6dcd4420, 0x37681: 0x6dcd4620, 0x37682: 0x6dc73620, 0x37683: 0x6dcd4820, + 0x37684: 0x6dcd4a20, 0x37685: 0x6de80a20, 0x37686: 0x6de80c20, 0x37687: 0x6de80e20, + 0x37688: 0x6dfe9e20, 0x37689: 0x6dfea020, 0x3768a: 0x6dfea220, 0x3768b: 0x6dfea420, + 0x3768c: 0x6dfea620, 0x3768d: 0x6dfea820, 0x3768e: 0x6e110220, 0x3768f: 0x6e110420, + 0x37690: 0x6e1f8020, 0x37691: 0x6e1f8220, 0x37692: 0x6e395a20, 0x37693: 0x6e2ac220, + 0x37694: 0x6e335020, 0x37695: 0x6e395c20, 0x37696: 0x6e395e20, 0x37697: 0x6c141220, + 0x37698: 0x6c259420, 0x37699: 0x6c3d9e20, 0x3769a: 0x6c3da020, 0x3769b: 0x6c3da220, + 0x3769c: 0x6c3da420, 0x3769d: 0x6c5c0820, 0x3769e: 0x6c5c0a20, 0x3769f: 0x6c5c0c20, + 0x376a0: 0x6c5c0e20, 0x376a1: 0x6c5c1020, 0x376a2: 0x6c5c1220, 0x376a3: 0x6c5c1420, + 0x376a4: 0x6c5c1620, 0x376a5: 0x6c5c1820, 0x376a6: 0x6c5c1a20, 0x376a7: 0x6c5c1c20, + 0x376a8: 0x6c5c1e20, 0x376a9: 0x6c5c2020, 0x376aa: 0x6c5c2220, 0x376ab: 0x6c5c2420, + 0x376ac: 0x6c5c2620, 0x376ad: 0x6c5c2820, 0x376ae: 0x6c5c2a20, 0x376af: 0x6c7f6220, + 0x376b0: 0x6c7f6420, 0x376b1: 0x6c7f6620, 0x376b2: 0x6c7f6820, 0x376b3: 0x6c7f6a20, + 0x376b4: 0x6c7f6c20, 0x376b5: 0x6c7f6e20, 0x376b6: 0x6c7f7020, 0x376b7: 0x6c7f7220, + 0x376b8: 0x6c7f7420, 0x376b9: 0x6c7f7620, 0x376ba: 0x6c7f7820, 0x376bb: 0x6c7f7a20, + 0x376bc: 0x6c7f7c20, 0x376bd: 0x6c7f7e20, 0x376be: 0x6c7f8020, 0x376bf: 0x6c7f8220, + // Block 0xddb, offset 0x376c0 + 0x376c0: 0x6c7f8420, 0x376c1: 0x6c7f8620, 0x376c2: 0x6c7f8820, 0x376c3: 0x6c7f8a20, + 0x376c4: 0x6c7f8c20, 0x376c5: 0x6c7f8e20, 0x376c6: 0x6c7f9020, 0x376c7: 0x6c7f9220, + 0x376c8: 0x6c7f9420, 0x376c9: 0x6c7f9620, 0x376ca: 0x6c7f9820, 0x376cb: 0x6c7f9a20, + 0x376cc: 0x6ca84c20, 0x376cd: 0x6ca84e20, 0x376ce: 0x6ca85020, 0x376cf: 0x6ca85220, + 0x376d0: 0x6ca85420, 0x376d1: 0x6ca85620, 0x376d2: 0x6ca85820, 0x376d3: 0x6ca85a20, + 0x376d4: 0x6ca85c20, 0x376d5: 0x6ca85e20, 0x376d6: 0x6ca86020, 0x376d7: 0x6ca86220, + 0x376d8: 0x6ca86420, 0x376d9: 0x6ca86620, 0x376da: 0x6ca86820, 0x376db: 0x6ca86a20, + 0x376dc: 0x6ca86c20, 0x376dd: 0x6ca86e20, 0x376de: 0x6ca87020, 0x376df: 0x6ca87220, + 0x376e0: 0x6ca87420, 0x376e1: 0x6ca87620, 0x376e2: 0x6ca87820, 0x376e3: 0x6ca87a20, + 0x376e4: 0x6ca87c20, 0x376e5: 0x6ca87e20, 0x376e6: 0x6ca88020, 0x376e7: 0x6ca88220, + 0x376e8: 0x6ca88420, 0x376e9: 0x6ca88620, 0x376ea: 0x6cd69020, 0x376eb: 0x6cd69220, + 0x376ec: 0x6cd69420, 0x376ed: 0x6cd69620, 0x376ee: 0x6cd69820, 0x376ef: 0x6cd69a20, + 0x376f0: 0x6cd69c20, 0x376f1: 0x6cd69e20, 0x376f2: 0x6cd6a020, 0x376f3: 0x6cd6a220, + 0x376f4: 0x6cd6a420, 0x376f5: 0x6cd6a620, 0x376f6: 0x6cd6a820, 0x376f7: 0x6cd6aa20, + 0x376f8: 0x6cd6ac20, 0x376f9: 0x6cd6ae20, 0x376fa: 0x6cd6b020, 0x376fb: 0x6cd6b220, + 0x376fc: 0x6cd6b420, 0x376fd: 0x6cd6b620, 0x376fe: 0x6cd6b820, 0x376ff: 0x6ca88820, + // Block 0xddc, offset 0x37700 + 0x37700: 0x6cd6ba20, 0x37701: 0x6cd6bc20, 0x37702: 0x6cd6be20, 0x37703: 0x6cd6c020, + 0x37704: 0x6cd6c220, 0x37705: 0x6cd6c420, 0x37706: 0x6cd6c620, 0x37707: 0x6cd6c820, + 0x37708: 0x6cd6ca20, 0x37709: 0x6cd6cc20, 0x3770a: 0x6cd6ce20, 0x3770b: 0x6cd6d020, + 0x3770c: 0x6cd6d220, 0x3770d: 0x6cd6d420, 0x3770e: 0x6cd6d620, 0x3770f: 0x6cd6d820, + 0x37710: 0x6d051220, 0x37711: 0x6d051420, 0x37712: 0x6d051620, 0x37713: 0x6d051820, + 0x37714: 0x6d051a20, 0x37715: 0x6d051c20, 0x37716: 0x6d051e20, 0x37717: 0x6d052020, + 0x37718: 0x6d052220, 0x37719: 0x6d052420, 0x3771a: 0x6d052620, 0x3771b: 0x6d052820, + 0x3771c: 0x6d052a20, 0x3771d: 0x6d052c20, 0x3771e: 0x6d052e20, 0x3771f: 0x6d053020, + 0x37720: 0x6d053220, 0x37721: 0x6d053420, 0x37722: 0x6d053620, 0x37723: 0x6d053820, + 0x37724: 0x6d053a20, 0x37725: 0x6d053c20, 0x37726: 0x6d053e20, 0x37727: 0x6d054020, + 0x37728: 0x6d054220, 0x37729: 0x6d054420, 0x3772a: 0x6d054620, 0x3772b: 0x6d054820, + 0x3772c: 0x6d054a20, 0x3772d: 0x6d054c20, 0x3772e: 0x6d054e20, 0x3772f: 0x6d055020, + 0x37730: 0x6d055220, 0x37731: 0x6d055420, 0x37732: 0x6d055620, 0x37733: 0x6d055820, + 0x37734: 0x6d055a20, 0x37735: 0x6d055c20, 0x37736: 0x6d055e20, 0x37737: 0x6d056020, + 0x37738: 0x6d056220, 0x37739: 0x6d056420, 0x3773a: 0x6d056620, 0x3773b: 0x6d056820, + 0x3773c: 0x6d056a20, 0x3773d: 0x6d056c20, 0x3773e: 0x6d056e20, 0x3773f: 0x6d057020, + // Block 0xddd, offset 0x37740 + 0x37740: 0x6d057220, 0x37741: 0x6d057420, 0x37742: 0x6d057620, 0x37743: 0x6d057820, + 0x37744: 0x6d057a20, 0x37745: 0x6d057c20, 0x37746: 0x6d057e20, 0x37747: 0x6d058020, + 0x37748: 0x6d058220, 0x37749: 0x6d058420, 0x3774a: 0x6d058620, 0x3774b: 0x6d058820, + 0x3774c: 0x6d058a20, 0x3774d: 0x6d32a220, 0x3774e: 0x6d32a420, 0x3774f: 0x6d32a620, + 0x37750: 0x6d32a820, 0x37751: 0x6d32aa20, 0x37752: 0x6d32ac20, 0x37753: 0x6d32ae20, + 0x37754: 0x6d32b020, 0x37755: 0x6d32b220, 0x37756: 0x6d32b420, 0x37757: 0x6d32b620, + 0x37758: 0x6d32b820, 0x37759: 0x6d32ba20, 0x3775a: 0x6d32bc20, 0x3775b: 0x6d32be20, + 0x3775c: 0x6d32c020, 0x3775d: 0x6d32c220, 0x3775e: 0x6d32c420, 0x3775f: 0x6d32c620, + 0x37760: 0x6d32c820, 0x37761: 0x6d32ca20, 0x37762: 0x6d32cc20, 0x37763: 0x6d32ce20, + 0x37764: 0x6d32d020, 0x37765: 0x6d32d220, 0x37766: 0x6d32d420, 0x37767: 0x6d32d620, + 0x37768: 0x6d32d820, 0x37769: 0x6d32da20, 0x3776a: 0x6d32dc20, 0x3776b: 0x6d32de20, + 0x3776c: 0x6d32e020, 0x3776d: 0x6d32e220, 0x3776e: 0x6d32e420, 0x3776f: 0x6d32e620, + 0x37770: 0x6d32e820, 0x37771: 0x6d32ea20, 0x37772: 0x6d32ec20, 0x37773: 0x6d32ee20, + 0x37774: 0x6d32f020, 0x37775: 0x6d32f220, 0x37776: 0x6d32f420, 0x37777: 0x6d32f620, + 0x37778: 0x6d32f820, 0x37779: 0x6d32fa20, 0x3777a: 0x6d32fc20, 0x3777b: 0x6d32fe20, + 0x3777c: 0x6d330020, 0x3777d: 0x6d330220, 0x3777e: 0x6d330420, 0x3777f: 0x6d330620, + // Block 0xdde, offset 0x37780 + 0x37780: 0x6d330820, 0x37781: 0x6d330a20, 0x37782: 0x6d330c20, 0x37783: 0x6d330e20, + 0x37784: 0x6d331020, 0x37785: 0x6d331220, 0x37786: 0x6d331420, 0x37787: 0x6d331620, + 0x37788: 0x6d331820, 0x37789: 0x6d331a20, 0x3778a: 0x6d331c20, 0x3778b: 0x6d331e20, + 0x3778c: 0x6d332020, 0x3778d: 0x6d332220, 0x3778e: 0x6d332420, 0x3778f: 0x6d332620, + 0x37790: 0x6d332820, 0x37791: 0x6d5f4e20, 0x37792: 0x6d5f5020, 0x37793: 0x6d5f5220, + 0x37794: 0x6d5f5420, 0x37795: 0x6d5f5620, 0x37796: 0x6d5f5820, 0x37797: 0x6d5f5a20, + 0x37798: 0x6d5f5c20, 0x37799: 0x6d5f5e20, 0x3779a: 0x6d5f6020, 0x3779b: 0x6d5f6220, + 0x3779c: 0x6d5f6420, 0x3779d: 0x6d5f6620, 0x3779e: 0x6d5f6820, 0x3779f: 0x6d5f6a20, + 0x377a0: 0x6d5f6c20, 0x377a1: 0x6d5f6e20, 0x377a2: 0x6d5f7020, 0x377a3: 0x6d5f7220, + 0x377a4: 0x6d5f7420, 0x377a5: 0x6d5f7620, 0x377a6: 0x6d5f7820, 0x377a7: 0x6d5f7a20, + 0x377a8: 0x6d5f7c20, 0x377a9: 0x6d5f7e20, 0x377aa: 0x6d5f8020, 0x377ab: 0x6d5f8220, + 0x377ac: 0x6d5f8420, 0x377ad: 0x6d5f8620, 0x377ae: 0x6d5f8820, 0x377af: 0x6d5f8a20, + 0x377b0: 0x6d5f8c20, 0x377b1: 0x6d5f8e20, 0x377b2: 0x6d5f9020, 0x377b3: 0x6d5f9220, + 0x377b4: 0x6d5f9420, 0x377b5: 0x6d5f9620, 0x377b6: 0x6d5f9820, 0x377b7: 0x6d5f9a20, + 0x377b8: 0x6d5f9c20, 0x377b9: 0x6d5f9e20, 0x377ba: 0x6d5fa020, 0x377bb: 0x6d5fa220, + 0x377bc: 0x6d5fa420, 0x377bd: 0x6d5fa620, 0x377be: 0x6d5fa820, 0x377bf: 0x6d5faa20, + // Block 0xddf, offset 0x377c0 + 0x377c0: 0x6d5fac20, 0x377c1: 0x6d5fae20, 0x377c2: 0x6d5fb020, 0x377c3: 0x6d5fb220, + 0x377c4: 0x6d5fb420, 0x377c5: 0x6d5fb620, 0x377c6: 0x6d5fb820, 0x377c7: 0x6d5fba20, + 0x377c8: 0x6d5fbc20, 0x377c9: 0x6d5fbe20, 0x377ca: 0x6d5fc020, 0x377cb: 0x6d5fc220, + 0x377cc: 0x6d5fc420, 0x377cd: 0x6d5fc620, 0x377ce: 0x6d5fc820, 0x377cf: 0x6d5fca20, + 0x377d0: 0x6d5fcc20, 0x377d1: 0x6d5fce20, 0x377d2: 0x6d5fd020, 0x377d3: 0x6d5fd220, + 0x377d4: 0x6d5fd420, 0x377d5: 0x6d5fd620, 0x377d6: 0x6d5fd820, 0x377d7: 0x6d5fda20, + 0x377d8: 0x6d898620, 0x377d9: 0x6d898820, 0x377da: 0x6d898a20, 0x377db: 0x6d898c20, + 0x377dc: 0x6d898e20, 0x377dd: 0x6d899020, 0x377de: 0x6d899220, 0x377df: 0x6d899420, + 0x377e0: 0x6d899620, 0x377e1: 0x6d899820, 0x377e2: 0x6d899a20, 0x377e3: 0x6d899c20, + 0x377e4: 0x6d899e20, 0x377e5: 0x6d89a020, 0x377e6: 0x6d89a220, 0x377e7: 0x6d89a420, + 0x377e8: 0x6d89a620, 0x377e9: 0x6d89a820, 0x377ea: 0x6d89aa20, 0x377eb: 0x6d89ac20, + 0x377ec: 0x6d89ae20, 0x377ed: 0x6d89b020, 0x377ee: 0x6d89b220, 0x377ef: 0x6d89b420, + 0x377f0: 0x6d89b620, 0x377f1: 0x6d89b820, 0x377f2: 0x6d89ba20, 0x377f3: 0x6d89bc20, + 0x377f4: 0x6d89be20, 0x377f5: 0x6d89c020, 0x377f6: 0x6d89c220, 0x377f7: 0x6d89c420, + 0x377f8: 0x6d89c620, 0x377f9: 0x6d89c820, 0x377fa: 0x6d89ca20, 0x377fb: 0x6d89cc20, + 0x377fc: 0x6d89ce20, 0x377fd: 0x6d89d020, 0x377fe: 0x6d89d220, 0x377ff: 0x6d89d420, + // Block 0xde0, offset 0x37800 + 0x37800: 0x6d89d620, 0x37801: 0x6d89d820, 0x37802: 0x6d89da20, 0x37803: 0x6d89dc20, + 0x37804: 0x6d89de20, 0x37805: 0x6d89e020, 0x37806: 0x6d89e220, 0x37807: 0x6d89e420, + 0x37808: 0x6d89e620, 0x37809: 0x6d89e820, 0x3780a: 0x6d89ea20, 0x3780b: 0x6d89ec20, + 0x3780c: 0x6d89ee20, 0x3780d: 0x6d89f020, 0x3780e: 0x6d89f220, 0x3780f: 0x6d89f420, + 0x37810: 0x6d89f620, 0x37811: 0x6d89f820, 0x37812: 0x6d89fa20, 0x37813: 0x6d89fc20, + 0x37814: 0x6d89fe20, 0x37815: 0x6d8a0020, 0x37816: 0x6d8a0220, 0x37817: 0x6d8a0420, + 0x37818: 0x6d8a0620, 0x37819: 0x6d8a0820, 0x3781a: 0x6d8a0a20, 0x3781b: 0x6d8a0c20, + 0x3781c: 0x6d8a0e20, 0x3781d: 0x6d8a1020, 0x3781e: 0x6d8a1220, 0x3781f: 0x6d8a1420, + 0x37820: 0x6d8a1620, 0x37821: 0x6d8a1820, 0x37822: 0x6d8a1a20, 0x37823: 0x6d8a1c20, + 0x37824: 0x6d8a1e20, 0x37825: 0x6d8a2020, 0x37826: 0x6d8a2220, 0x37827: 0x6d8a2420, + 0x37828: 0x6d8a2620, 0x37829: 0x6d8a2820, 0x3782a: 0x6d8a2a20, 0x3782b: 0x6d8a2c20, + 0x3782c: 0x6d8a2e20, 0x3782d: 0x6d8a3020, 0x3782e: 0x6d8a3220, 0x3782f: 0x6d8a3420, + 0x37830: 0x6d8a3620, 0x37831: 0x6d8a3820, 0x37832: 0x6d8a3a20, 0x37833: 0x6d8a3c20, + 0x37834: 0x6d8a3e20, 0x37835: 0x6dae1220, 0x37836: 0x6dae1420, 0x37837: 0x6dae1620, + 0x37838: 0x6dae1820, 0x37839: 0x6dae1a20, 0x3783a: 0x6dae1c20, 0x3783b: 0x6dae1e20, + 0x3783c: 0x6dae2020, 0x3783d: 0x6dae2220, 0x3783e: 0x6dae2420, 0x3783f: 0x6dae2620, + // Block 0xde1, offset 0x37840 + 0x37840: 0x6dae2820, 0x37841: 0x6dae2a20, 0x37842: 0x6dae2c20, 0x37843: 0x6dae2e20, + 0x37844: 0x6dae3020, 0x37845: 0x6dae3220, 0x37846: 0x6dae3420, 0x37847: 0x6dae3620, + 0x37848: 0x6dae3820, 0x37849: 0x6dae3a20, 0x3784a: 0x6dae3c20, 0x3784b: 0x6dae3e20, + 0x3784c: 0x6dae4020, 0x3784d: 0x6dae4220, 0x3784e: 0x6dae4420, 0x3784f: 0x6dae4620, + 0x37850: 0x6dae4820, 0x37851: 0x6dae4a20, 0x37852: 0x6dae4c20, 0x37853: 0x6dae4e20, + 0x37854: 0x6dae5020, 0x37855: 0x6dae5220, 0x37856: 0x6dae5420, 0x37857: 0x6dae5620, + 0x37858: 0x6dae5820, 0x37859: 0x6dae5a20, 0x3785a: 0x6dae5c20, 0x3785b: 0x6dae5e20, + 0x3785c: 0x6dae6020, 0x3785d: 0x6dae6220, 0x3785e: 0x6dae6420, 0x3785f: 0x6dae6620, + 0x37860: 0x6dae6820, 0x37861: 0x6dae6a20, 0x37862: 0x6dae6c20, 0x37863: 0x6dae6e20, + 0x37864: 0x6dae7020, 0x37865: 0x6dae7220, 0x37866: 0x6dae7420, 0x37867: 0x6dae7620, + 0x37868: 0x6dae7820, 0x37869: 0x6dae7a20, 0x3786a: 0x6dae7c20, 0x3786b: 0x6dae7e20, + 0x3786c: 0x6dae8020, 0x3786d: 0x6dae8220, 0x3786e: 0x6dae8420, 0x3786f: 0x6dae8620, + 0x37870: 0x6dae8820, 0x37871: 0x6dae8a20, 0x37872: 0x6dae8c20, 0x37873: 0x6dae8e20, + 0x37874: 0x6dae9020, 0x37875: 0x6dae9220, 0x37876: 0x6dae9420, 0x37877: 0x6dae9620, + 0x37878: 0x6dae9820, 0x37879: 0x6dae9a20, 0x3787a: 0x6dae9c20, 0x3787b: 0x6dae9e20, + 0x3787c: 0x6daea020, 0x3787d: 0x6daea220, 0x3787e: 0x6daea420, 0x3787f: 0x6daea620, + // Block 0xde2, offset 0x37880 + 0x37880: 0x6daea820, 0x37881: 0x6dcda420, 0x37882: 0x6daeaa20, 0x37883: 0x6daeac20, + 0x37884: 0x6daeae20, 0x37885: 0x6daeb020, 0x37886: 0x6dcda620, 0x37887: 0x6dcda820, + 0x37888: 0x6dcdaa20, 0x37889: 0x6dcdac20, 0x3788a: 0x6dcdae20, 0x3788b: 0x6dcdb020, + 0x3788c: 0x6dcdb220, 0x3788d: 0x6dcdb420, 0x3788e: 0x6dcdb620, 0x3788f: 0x6dcdb820, + 0x37890: 0x6dcdba20, 0x37891: 0x6dcdbc20, 0x37892: 0x6dcdbe20, 0x37893: 0x6dcdc020, + 0x37894: 0x6dcdc220, 0x37895: 0x6dcdc420, 0x37896: 0x6dcdc620, 0x37897: 0x6dcdc820, + 0x37898: 0x6dcdca20, 0x37899: 0x6dcdcc20, 0x3789a: 0x6dcdce20, 0x3789b: 0x6dcdd020, + 0x3789c: 0x6dcdd220, 0x3789d: 0x6dcdd420, 0x3789e: 0x6dcdd620, 0x3789f: 0x6dcdd820, + 0x378a0: 0x6dcdda20, 0x378a1: 0x6dcddc20, 0x378a2: 0x6dcdde20, 0x378a3: 0x6dcde020, + 0x378a4: 0x6dcde220, 0x378a5: 0x6dcde420, 0x378a6: 0x6dcde620, 0x378a7: 0x6dcde820, + 0x378a8: 0x6dcdea20, 0x378a9: 0x6dcdec20, 0x378aa: 0x6dcdee20, 0x378ab: 0x6dcdf020, + 0x378ac: 0x6dcdf220, 0x378ad: 0x6dcdf420, 0x378ae: 0x6dcdf620, 0x378af: 0x6dcdf820, + 0x378b0: 0x6dcdfa20, 0x378b1: 0x6dcdfc20, 0x378b2: 0x6dcdfe20, 0x378b3: 0x6dce0020, + 0x378b4: 0x6dce0220, 0x378b5: 0x6dce0420, 0x378b6: 0x6dce0620, 0x378b7: 0x6dce0820, + 0x378b8: 0x6dce0a20, 0x378b9: 0x6dce0c20, 0x378ba: 0x6dce0e20, 0x378bb: 0x6dce1020, + 0x378bc: 0x6dce1220, 0x378bd: 0x6dce1420, 0x378be: 0x6dce1620, 0x378bf: 0x6dce1820, + // Block 0xde3, offset 0x378c0 + 0x378c0: 0x6dce1a20, 0x378c1: 0x6dce1c20, 0x378c2: 0x6dce1e20, 0x378c3: 0x6dce2020, + 0x378c4: 0x6dce2220, 0x378c5: 0x6dce2420, 0x378c6: 0x6dce2620, 0x378c7: 0x6dce2820, + 0x378c8: 0x6dce2a20, 0x378c9: 0x6dce2c20, 0x378ca: 0x6dce2e20, 0x378cb: 0x6dce3020, + 0x378cc: 0x6dce3220, 0x378cd: 0x6dce3420, 0x378ce: 0x6daeb220, 0x378cf: 0x6dce3620, + 0x378d0: 0x6dce3820, 0x378d1: 0x6dce3a20, 0x378d2: 0x6dce3c20, 0x378d3: 0x6dce3e20, + 0x378d4: 0x6dce4020, 0x378d5: 0x6dce4220, 0x378d6: 0x6dce4420, 0x378d7: 0x6dce4620, + 0x378d8: 0x6dce4820, 0x378d9: 0x6dce4a20, 0x378da: 0x6dce4c20, 0x378db: 0x6dce4e20, + 0x378dc: 0x6dce5020, 0x378dd: 0x6dce5220, 0x378de: 0x6dce5420, 0x378df: 0x6dce5620, + 0x378e0: 0x6dce5820, 0x378e1: 0x6de84820, 0x378e2: 0x6de84a20, 0x378e3: 0x6de84c20, + 0x378e4: 0x6de84e20, 0x378e5: 0x6de85020, 0x378e6: 0x6de85220, 0x378e7: 0x6de85420, + 0x378e8: 0x6de85620, 0x378e9: 0x6de85820, 0x378ea: 0x6de85a20, 0x378eb: 0x6de85c20, + 0x378ec: 0x6de85e20, 0x378ed: 0x6de86020, 0x378ee: 0x6de86220, 0x378ef: 0x6de86420, + 0x378f0: 0x6de86620, 0x378f1: 0x6de86820, 0x378f2: 0x6de86a20, 0x378f3: 0x6de86c20, + 0x378f4: 0x6de86e20, 0x378f5: 0x6de87020, 0x378f6: 0x6de87220, 0x378f7: 0x6de87420, + 0x378f8: 0x6de87620, 0x378f9: 0x6de87820, 0x378fa: 0x6de87a20, 0x378fb: 0x6de87c20, + 0x378fc: 0x6de87e20, 0x378fd: 0x6de88020, 0x378fe: 0x6de88220, 0x378ff: 0x6de88420, + // Block 0xde4, offset 0x37900 + 0x37900: 0x6de88620, 0x37901: 0x6de88820, 0x37902: 0x6de88a20, 0x37903: 0x6de88c20, + 0x37904: 0x6de88e20, 0x37905: 0x6de89020, 0x37906: 0x6de89220, 0x37907: 0x6de89420, + 0x37908: 0x6de89620, 0x37909: 0x6de89820, 0x3790a: 0x6de89a20, 0x3790b: 0x6de89c20, + 0x3790c: 0x6de89e20, 0x3790d: 0x6de8a020, 0x3790e: 0x6de8a220, 0x3790f: 0x6de8a420, + 0x37910: 0x6de8a620, 0x37911: 0x6de8a820, 0x37912: 0x6de8aa20, 0x37913: 0x6de8ac20, + 0x37914: 0x6de8ae20, 0x37915: 0x6de8b020, 0x37916: 0x6de8b220, 0x37917: 0x6de8b420, + 0x37918: 0x6de8b620, 0x37919: 0x6de8b820, 0x3791a: 0x6de8ba20, 0x3791b: 0x6de8bc20, + 0x3791c: 0x6dfec820, 0x3791d: 0x6dfeca20, 0x3791e: 0x6dfecc20, 0x3791f: 0x6dfece20, + 0x37920: 0x6dfed020, 0x37921: 0x6dfed220, 0x37922: 0x6dfed420, 0x37923: 0x6dfed620, + 0x37924: 0x6dfed820, 0x37925: 0x6dfeda20, 0x37926: 0x6dfedc20, 0x37927: 0x6dfede20, + 0x37928: 0x6dfee020, 0x37929: 0x6dfee220, 0x3792a: 0x6dfee420, 0x3792b: 0x6dfee620, + 0x3792c: 0x6dfee820, 0x3792d: 0x6dfeea20, 0x3792e: 0x6dfeec20, 0x3792f: 0x6dfeee20, + 0x37930: 0x6dfef020, 0x37931: 0x6dfef220, 0x37932: 0x6dfef420, 0x37933: 0x6dfef620, + 0x37934: 0x6dfef820, 0x37935: 0x6dfefa20, 0x37936: 0x6dfefc20, 0x37937: 0x6dfefe20, + 0x37938: 0x6dff0020, 0x37939: 0x6dff0220, 0x3793a: 0x6dff0420, 0x3793b: 0x6dff0620, + 0x3793c: 0x6dff0820, 0x3793d: 0x6dff0a20, 0x3793e: 0x6dff0c20, 0x3793f: 0x6dff0e20, + // Block 0xde5, offset 0x37940 + 0x37940: 0x6dff1020, 0x37941: 0x6dff1220, 0x37942: 0x6dff1420, 0x37943: 0x6dff1620, + 0x37944: 0x6dff1820, 0x37945: 0x6e112220, 0x37946: 0x6e112420, 0x37947: 0x6e112620, + 0x37948: 0x6e112820, 0x37949: 0x6e112a20, 0x3794a: 0x6e112c20, 0x3794b: 0x6e112e20, + 0x3794c: 0x6e113020, 0x3794d: 0x6e113220, 0x3794e: 0x6e113420, 0x3794f: 0x6e113620, + 0x37950: 0x6e113820, 0x37951: 0x6e113a20, 0x37952: 0x6e113c20, 0x37953: 0x6e113e20, + 0x37954: 0x6e114020, 0x37955: 0x6e114220, 0x37956: 0x6e114420, 0x37957: 0x6e114620, + 0x37958: 0x6e114820, 0x37959: 0x6e114a20, 0x3795a: 0x6e114c20, 0x3795b: 0x6e114e20, + 0x3795c: 0x6e115020, 0x3795d: 0x6e115220, 0x3795e: 0x6e115420, 0x3795f: 0x6e115620, + 0x37960: 0x6e115820, 0x37961: 0x6e115a20, 0x37962: 0x6e115c20, 0x37963: 0x6e115e20, + 0x37964: 0x6e116020, 0x37965: 0x6e116220, 0x37966: 0x6e116420, 0x37967: 0x6e116620, + 0x37968: 0x6e116820, 0x37969: 0x6e116a20, 0x3796a: 0x6e116c20, 0x3796b: 0x6e116e20, + 0x3796c: 0x6e117020, 0x3796d: 0x6e117220, 0x3796e: 0x6e117420, 0x3796f: 0x6e117620, + 0x37970: 0x6e117820, 0x37971: 0x6e117a20, 0x37972: 0x6e117c20, 0x37973: 0x6e117e20, + 0x37974: 0x6e118020, 0x37975: 0x6e1fa220, 0x37976: 0x6e1fa420, 0x37977: 0x6e1fa620, + 0x37978: 0x6e1fa820, 0x37979: 0x6e1faa20, 0x3797a: 0x6e1fac20, 0x3797b: 0x6e1fae20, + 0x3797c: 0x6e1fb020, 0x3797d: 0x6e1fb220, 0x3797e: 0x6e1fb420, 0x3797f: 0x6e1fb620, + // Block 0xde6, offset 0x37980 + 0x37980: 0x6e1fb820, 0x37981: 0x6e1fba20, 0x37982: 0x6e1fbc20, 0x37983: 0x6e1fbe20, + 0x37984: 0x6e1fc020, 0x37985: 0x6e1fc220, 0x37986: 0x6e1fc420, 0x37987: 0x6e1fc620, + 0x37988: 0x6e1fc820, 0x37989: 0x6e1fca20, 0x3798a: 0x6e1fcc20, 0x3798b: 0x6e1fce20, + 0x3798c: 0x6e1fd020, 0x3798d: 0x6e1fd220, 0x3798e: 0x6e1fd420, 0x3798f: 0x6e1fd620, + 0x37990: 0x6e1fd820, 0x37991: 0x6e1fda20, 0x37992: 0x6e1fdc20, 0x37993: 0x6e1fde20, + 0x37994: 0x6e2ada20, 0x37995: 0x6e2adc20, 0x37996: 0x6e2ade20, 0x37997: 0x6e2ae020, + 0x37998: 0x6e2ae220, 0x37999: 0x6e2ae420, 0x3799a: 0x6e2ae620, 0x3799b: 0x6e2ae820, + 0x3799c: 0x6e2aea20, 0x3799d: 0x6e2aec20, 0x3799e: 0x6e2aee20, 0x3799f: 0x6e2af020, + 0x379a0: 0x6e2af220, 0x379a1: 0x6e2af420, 0x379a2: 0x6e2af620, 0x379a3: 0x6e2af820, + 0x379a4: 0x6e2afa20, 0x379a5: 0x6e2afc20, 0x379a6: 0x6e2afe20, 0x379a7: 0x6e2b0020, + 0x379a8: 0x6e335620, 0x379a9: 0x6e335820, 0x379aa: 0x6e335a20, 0x379ab: 0x6e335c20, + 0x379ac: 0x6e335e20, 0x379ad: 0x6e336020, 0x379ae: 0x6e336220, 0x379af: 0x6e336420, + 0x379b0: 0x6e336620, 0x379b1: 0x6e336820, 0x379b2: 0x6e336a20, 0x379b3: 0x6e336c20, + 0x379b4: 0x6e336e20, 0x379b5: 0x6e337020, 0x379b6: 0x6e337220, 0x379b7: 0x6e337420, + 0x379b8: 0x6e337620, 0x379b9: 0x6e337820, 0x379ba: 0x6e337a20, 0x379bb: 0x6e337c20, + 0x379bc: 0x6e396a20, 0x379bd: 0x6e396c20, 0x379be: 0x6e396e20, 0x379bf: 0x6e397020, + // Block 0xde7, offset 0x379c0 + 0x379c0: 0x6e397220, 0x379c1: 0x6e397420, 0x379c2: 0x6e397620, 0x379c3: 0x6e397820, + 0x379c4: 0x6e397a20, 0x379c5: 0x6e397c20, 0x379c6: 0x6e397e20, 0x379c7: 0x6e398020, + 0x379c8: 0x6e3db220, 0x379c9: 0x6e3db420, 0x379ca: 0x6e3db620, 0x379cb: 0x6e3db820, + 0x379cc: 0x6e3dba20, 0x379cd: 0x6e3dbc20, 0x379ce: 0x6e3dbe20, 0x379cf: 0x6e3dc020, + 0x379d0: 0x6e409020, 0x379d1: 0x6e409220, 0x379d2: 0x6e409420, 0x379d3: 0x6e409620, + 0x379d4: 0x6e409820, 0x379d5: 0x6e409a20, 0x379d6: 0x6e409c20, 0x379d7: 0x6e42d420, + 0x379d8: 0x6e445020, 0x379d9: 0x6e445220, 0x379da: 0x6e42d620, 0x379db: 0x6e42d820, + 0x379dc: 0x6e42da20, 0x379dd: 0x6e42dc20, 0x379de: 0x6e445420, 0x379df: 0x6e445620, + 0x379e0: 0x6e445820, 0x379e1: 0x6e453620, 0x379e2: 0x6e453820, 0x379e3: 0x6e45c620, + 0x379e4: 0x6e463820, 0x379e5: 0x6c259620, 0x379e6: 0x6c259820, 0x379e7: 0x6c3dae20, + 0x379e8: 0x6c3db020, 0x379e9: 0x6c3db220, 0x379ea: 0x6c3db420, 0x379eb: 0x6c5c4a20, + 0x379ec: 0x6c5c4c20, 0x379ed: 0x6c5c4e20, 0x379ee: 0x6c5c5020, 0x379ef: 0x6c5c5220, + 0x379f0: 0x6c5c5420, 0x379f1: 0x6c5c5620, 0x379f2: 0x6c5c5820, 0x379f3: 0x6c7fcc20, + 0x379f4: 0x6c7fce20, 0x379f5: 0x6c7fd020, 0x379f6: 0x6c7fd220, 0x379f7: 0x6c7fd420, + 0x379f8: 0x6c7fd620, 0x379f9: 0x6c7fd820, 0x379fa: 0x6c7fda20, 0x379fb: 0x6c7fdc20, + 0x379fc: 0x6c7fde20, 0x379fd: 0x6c7fe020, 0x379fe: 0x6c7fe220, 0x379ff: 0x6c7fe420, + // Block 0xde8, offset 0x37a00 + 0x37a00: 0x6c7fe620, 0x37a01: 0x6ca8b620, 0x37a02: 0x6ca8b820, 0x37a03: 0x6ca8ba20, + 0x37a04: 0x6ca8bc20, 0x37a05: 0x6ca8be20, 0x37a06: 0x6ca8c020, 0x37a07: 0x6ca8c220, + 0x37a08: 0x6ca8c420, 0x37a09: 0x6ca8c620, 0x37a0a: 0x6ca8c820, 0x37a0b: 0x6ca8ca20, + 0x37a0c: 0x6ca8cc20, 0x37a0d: 0x6ca8ce20, 0x37a0e: 0x6ca8d020, 0x37a0f: 0x6ca8d220, + 0x37a10: 0x6ca8d420, 0x37a11: 0x6ca8d620, 0x37a12: 0x6ca8d820, 0x37a13: 0x6ca8da20, + 0x37a14: 0x6ca8dc20, 0x37a15: 0x6ca8de20, 0x37a16: 0x6ca8e020, 0x37a17: 0x6cd70a20, + 0x37a18: 0x6ca8e220, 0x37a19: 0x6ca8e420, 0x37a1a: 0x6cd70c20, 0x37a1b: 0x6cd70e20, + 0x37a1c: 0x6cd71020, 0x37a1d: 0x6cd71220, 0x37a1e: 0x6cd71420, 0x37a1f: 0x6cd71620, + 0x37a20: 0x6cd71820, 0x37a21: 0x6cd71a20, 0x37a22: 0x6cd71c20, 0x37a23: 0x6cd71e20, + 0x37a24: 0x6cd72020, 0x37a25: 0x6cd72220, 0x37a26: 0x6cd72420, 0x37a27: 0x6cd72620, + 0x37a28: 0x6cd72820, 0x37a29: 0x6cd72a20, 0x37a2a: 0x6cd72c20, 0x37a2b: 0x6cd72e20, + 0x37a2c: 0x6cd73020, 0x37a2d: 0x6cd73220, 0x37a2e: 0x6cd73420, 0x37a2f: 0x6cd73620, + 0x37a30: 0x6cd73820, 0x37a31: 0x6ca8e620, 0x37a32: 0x6d05b620, 0x37a33: 0x6d05b820, + 0x37a34: 0x6d05ba20, 0x37a35: 0x6d05bc20, 0x37a36: 0x6d05be20, 0x37a37: 0x6d05c020, + 0x37a38: 0x6d05c220, 0x37a39: 0x6d05c420, 0x37a3a: 0x6d05c620, 0x37a3b: 0x6d05c820, + 0x37a3c: 0x6d05ca20, 0x37a3d: 0x6d05cc20, 0x37a3e: 0x6d05ce20, 0x37a3f: 0x6d05d020, + // Block 0xde9, offset 0x37a40 + 0x37a40: 0x6d05d220, 0x37a41: 0x6d05d420, 0x37a42: 0x6d05d620, 0x37a43: 0x6d05d820, + 0x37a44: 0x6d05da20, 0x37a45: 0x6d05dc20, 0x37a46: 0x6d05de20, 0x37a47: 0x6d05e020, + 0x37a48: 0x6d05e220, 0x37a49: 0x6d05e420, 0x37a4a: 0x6d05e620, 0x37a4b: 0x6d05e820, + 0x37a4c: 0x6d05ea20, 0x37a4d: 0x6d05ec20, 0x37a4e: 0x6d05ee20, 0x37a4f: 0x6d05f020, + 0x37a50: 0x6d05f220, 0x37a51: 0x6d05f420, 0x37a52: 0x6d05f620, 0x37a53: 0x6d05f820, + 0x37a54: 0x6d05fa20, 0x37a55: 0x6d05fc20, 0x37a56: 0x6d05fe20, 0x37a57: 0x6d060020, + 0x37a58: 0x6d335a20, 0x37a59: 0x6d335c20, 0x37a5a: 0x6d335e20, 0x37a5b: 0x6d336020, + 0x37a5c: 0x6d336220, 0x37a5d: 0x6d336420, 0x37a5e: 0x6d336620, 0x37a5f: 0x6d336820, + 0x37a60: 0x6d336a20, 0x37a61: 0x6d336c20, 0x37a62: 0x6d336e20, 0x37a63: 0x6d337020, + 0x37a64: 0x6d337220, 0x37a65: 0x6d337420, 0x37a66: 0x6d337620, 0x37a67: 0x6d337820, + 0x37a68: 0x6d337a20, 0x37a69: 0x6d337c20, 0x37a6a: 0x6d337e20, 0x37a6b: 0x6d338020, + 0x37a6c: 0x6d338220, 0x37a6d: 0x6d338420, 0x37a6e: 0x6d338620, 0x37a6f: 0x6d338820, + 0x37a70: 0x6d338a20, 0x37a71: 0x6d338c20, 0x37a72: 0x6d338e20, 0x37a73: 0x6d339020, + 0x37a74: 0x6d339220, 0x37a75: 0x6d339420, 0x37a76: 0x6d339620, 0x37a77: 0x6d339820, + 0x37a78: 0x6d339a20, 0x37a79: 0x6d339c20, 0x37a7a: 0x6d339e20, 0x37a7b: 0x6d33a020, + 0x37a7c: 0x6d33a220, 0x37a7d: 0x6d33a420, 0x37a7e: 0x6d33a620, 0x37a7f: 0x6d33a820, + // Block 0xdea, offset 0x37a80 + 0x37a80: 0x6d33aa20, 0x37a81: 0x6d601820, 0x37a82: 0x6d601a20, 0x37a83: 0x6d601c20, + 0x37a84: 0x6d601e20, 0x37a85: 0x6d602020, 0x37a86: 0x6d602220, 0x37a87: 0x6d602420, + 0x37a88: 0x6d602620, 0x37a89: 0x6d602820, 0x37a8a: 0x6d602a20, 0x37a8b: 0x6d602c20, + 0x37a8c: 0x6d602e20, 0x37a8d: 0x6d603020, 0x37a8e: 0x6d603220, 0x37a8f: 0x6d603420, + 0x37a90: 0x6d603620, 0x37a91: 0x6d603820, 0x37a92: 0x6d603a20, 0x37a93: 0x6d603c20, + 0x37a94: 0x6d603e20, 0x37a95: 0x6d604020, 0x37a96: 0x6d604220, 0x37a97: 0x6d604420, + 0x37a98: 0x6d604620, 0x37a99: 0x6d604820, 0x37a9a: 0x6d604a20, 0x37a9b: 0x6d604c20, + 0x37a9c: 0x6d604e20, 0x37a9d: 0x6d605020, 0x37a9e: 0x6d605220, 0x37a9f: 0x6d605420, + 0x37aa0: 0x6d605620, 0x37aa1: 0x6d605820, 0x37aa2: 0x6d605a20, 0x37aa3: 0x6d605c20, + 0x37aa4: 0x6d8a6e20, 0x37aa5: 0x6d8a7020, 0x37aa6: 0x6d8a7220, 0x37aa7: 0x6d8a7420, + 0x37aa8: 0x6d8a7620, 0x37aa9: 0x6d8a7820, 0x37aaa: 0x6d8a7a20, 0x37aab: 0x6d8a7c20, + 0x37aac: 0x6d8a7e20, 0x37aad: 0x6d8a8020, 0x37aae: 0x6d8a8220, 0x37aaf: 0x6d8a8420, + 0x37ab0: 0x6d8a8620, 0x37ab1: 0x6d8a8820, 0x37ab2: 0x6d8a8a20, 0x37ab3: 0x6d8a8c20, + 0x37ab4: 0x6d8a8e20, 0x37ab5: 0x6d8a9020, 0x37ab6: 0x6d8a9220, 0x37ab7: 0x6d8a9420, + 0x37ab8: 0x6d8a9620, 0x37ab9: 0x6d8a9820, 0x37aba: 0x6d8a9a20, 0x37abb: 0x6d8a9c20, + 0x37abc: 0x6d8a9e20, 0x37abd: 0x6d8aa020, 0x37abe: 0x6d8aa220, 0x37abf: 0x6daeea20, + // Block 0xdeb, offset 0x37ac0 + 0x37ac0: 0x6daeec20, 0x37ac1: 0x6daeee20, 0x37ac2: 0x6daef020, 0x37ac3: 0x6daef220, + 0x37ac4: 0x6daef420, 0x37ac5: 0x6daef620, 0x37ac6: 0x6daef820, 0x37ac7: 0x6daefa20, + 0x37ac8: 0x6daefc20, 0x37ac9: 0x6daefe20, 0x37aca: 0x6daf0020, 0x37acb: 0x6daf0220, + 0x37acc: 0x6daf0420, 0x37acd: 0x6daf0620, 0x37ace: 0x6daf0820, 0x37acf: 0x6daf0a20, + 0x37ad0: 0x6daf0c20, 0x37ad1: 0x6daf0e20, 0x37ad2: 0x6daf1020, 0x37ad3: 0x6daf1220, + 0x37ad4: 0x6daf1420, 0x37ad5: 0x6daf1620, 0x37ad6: 0x6daf1820, 0x37ad7: 0x6dce7c20, + 0x37ad8: 0x6dce7e20, 0x37ad9: 0x6dce8020, 0x37ada: 0x6dce8220, 0x37adb: 0x6dce8420, + 0x37adc: 0x6dce8620, 0x37add: 0x6dce8820, 0x37ade: 0x6dce8a20, 0x37adf: 0x6dce8c20, + 0x37ae0: 0x6dce8e20, 0x37ae1: 0x6dce9020, 0x37ae2: 0x6dce9220, 0x37ae3: 0x6dce9420, + 0x37ae4: 0x6dce9620, 0x37ae5: 0x6dce9820, 0x37ae6: 0x6dce9a20, 0x37ae7: 0x6dce9c20, + 0x37ae8: 0x6dce9e20, 0x37ae9: 0x6dcea020, 0x37aea: 0x6dcea220, 0x37aeb: 0x6dcea420, + 0x37aec: 0x6dcea620, 0x37aed: 0x6dcea820, 0x37aee: 0x6dceaa20, 0x37aef: 0x6dceac20, + 0x37af0: 0x6dceae20, 0x37af1: 0x6dceb020, 0x37af2: 0x6dceb220, 0x37af3: 0x6dceb420, + 0x37af4: 0x6dceb620, 0x37af5: 0x6dceb820, 0x37af6: 0x6de8d220, 0x37af7: 0x6de8d420, + 0x37af8: 0x6de8d620, 0x37af9: 0x6de8d820, 0x37afa: 0x6de8da20, 0x37afb: 0x6de8dc20, + 0x37afc: 0x6de8de20, 0x37afd: 0x6de8e020, 0x37afe: 0x6de8e220, 0x37aff: 0x6de8e420, + // Block 0xdec, offset 0x37b00 + 0x37b00: 0x6de8e620, 0x37b01: 0x6de8e820, 0x37b02: 0x6de8ea20, 0x37b03: 0x6de8ec20, + 0x37b04: 0x6de8ee20, 0x37b05: 0x6de8f020, 0x37b06: 0x6de8f220, 0x37b07: 0x6de8f420, + 0x37b08: 0x6de8f620, 0x37b09: 0x6de8f820, 0x37b0a: 0x6de8fa20, 0x37b0b: 0x6de8fc20, + 0x37b0c: 0x6de8fe20, 0x37b0d: 0x6de90020, 0x37b0e: 0x6de90220, 0x37b0f: 0x6dff2620, + 0x37b10: 0x6dff2820, 0x37b11: 0x6dff2a20, 0x37b12: 0x6dff2c20, 0x37b13: 0x6dff2e20, + 0x37b14: 0x6dff3020, 0x37b15: 0x6dff3220, 0x37b16: 0x6dff3420, 0x37b17: 0x6e118e20, + 0x37b18: 0x6e119020, 0x37b19: 0x6e119220, 0x37b1a: 0x6e119420, 0x37b1b: 0x6e119620, + 0x37b1c: 0x6e119820, 0x37b1d: 0x6e119a20, 0x37b1e: 0x6e119c20, 0x37b1f: 0x6e119e20, + 0x37b20: 0x6e11a020, 0x37b21: 0x6e1fe820, 0x37b22: 0x6e11a220, 0x37b23: 0x6e11a420, + 0x37b24: 0x6e1fea20, 0x37b25: 0x6e1fec20, 0x37b26: 0x6e1fee20, 0x37b27: 0x6e1ff020, + 0x37b28: 0x6e1ff220, 0x37b29: 0x6e1ff420, 0x37b2a: 0x6e1ff620, 0x37b2b: 0x6e1ff820, + 0x37b2c: 0x6e2b0a20, 0x37b2d: 0x6e2b0c20, 0x37b2e: 0x6e2b0e20, 0x37b2f: 0x6e2b1020, + 0x37b30: 0x6e2b1220, 0x37b31: 0x6e338020, 0x37b32: 0x6e338220, 0x37b33: 0x6e338420, + 0x37b34: 0x6e338620, 0x37b35: 0x6e338820, 0x37b36: 0x6e398a20, 0x37b37: 0x6e398c20, + 0x37b38: 0x6e398e20, 0x37b39: 0x6e399020, 0x37b3a: 0x6e399220, 0x37b3b: 0x6e3dc420, + 0x37b3c: 0x6e3dc620, 0x37b3d: 0x6e3dc820, 0x37b3e: 0x6e3dca20, 0x37b3f: 0x6e3dcc20, + // Block 0xded, offset 0x37b40 + 0x37b40: 0x6e40a020, 0x37b41: 0x6e40a220, 0x37b42: 0x6e453a20, 0x37b43: 0x6e45c820, + 0x37b44: 0x6e468a20, 0x37b45: 0x6c3dc420, 0x37b46: 0x6c3dc620, 0x37b47: 0x6c3dc820, + 0x37b48: 0x6c3dca20, 0x37b49: 0x6c3dcc20, 0x37b4a: 0x6c3dce20, 0x37b4b: 0x6c3dd020, + 0x37b4c: 0x6c5c7a20, 0x37b4d: 0x6c5c7c20, 0x37b4e: 0x6c5c7e20, 0x37b4f: 0x6c5c8020, + 0x37b50: 0x6c5c8220, 0x37b51: 0x6c5c8420, 0x37b52: 0x6c5c8620, 0x37b53: 0x6c5c8820, + 0x37b54: 0x6c5c8a20, 0x37b55: 0x6c5c8c20, 0x37b56: 0x6c5c8e20, 0x37b57: 0x6c5c9020, + 0x37b58: 0x6c5c9220, 0x37b59: 0x6c804620, 0x37b5a: 0x6c804820, 0x37b5b: 0x6c804a20, + 0x37b5c: 0x6c804c20, 0x37b5d: 0x6c804e20, 0x37b5e: 0x6c805020, 0x37b5f: 0x6c805220, + 0x37b60: 0x6c805420, 0x37b61: 0x6c805620, 0x37b62: 0x6c805820, 0x37b63: 0x6c805a20, + 0x37b64: 0x6c805c20, 0x37b65: 0x6c805e20, 0x37b66: 0x6c806020, 0x37b67: 0x6c806220, + 0x37b68: 0x6c806420, 0x37b69: 0x6c806620, 0x37b6a: 0x6c806820, 0x37b6b: 0x6c806a20, + 0x37b6c: 0x6c806c20, 0x37b6d: 0x6c806e20, 0x37b6e: 0x6c807020, 0x37b6f: 0x6c807220, + 0x37b70: 0x6c807420, 0x37b71: 0x6c807620, 0x37b72: 0x6c807820, 0x37b73: 0x6c807a20, + 0x37b74: 0x6c807c20, 0x37b75: 0x6c807e20, 0x37b76: 0x6c808020, 0x37b77: 0x6c808220, + 0x37b78: 0x6c808420, 0x37b79: 0x6c808620, 0x37b7a: 0x6c808820, 0x37b7b: 0x6c808a20, + 0x37b7c: 0x6c808c20, 0x37b7d: 0x6c808e20, 0x37b7e: 0x6c809020, 0x37b7f: 0x6c809220, + // Block 0xdee, offset 0x37b80 + 0x37b80: 0x6c809420, 0x37b81: 0x6c809620, 0x37b82: 0x6c809820, 0x37b83: 0x6ca95220, + 0x37b84: 0x6ca95420, 0x37b85: 0x6ca95620, 0x37b86: 0x6ca95820, 0x37b87: 0x6ca95a20, + 0x37b88: 0x6ca95c20, 0x37b89: 0x6ca95e20, 0x37b8a: 0x6ca96020, 0x37b8b: 0x6ca96220, + 0x37b8c: 0x6ca96420, 0x37b8d: 0x6ca96620, 0x37b8e: 0x6ca96820, 0x37b8f: 0x6ca96a20, + 0x37b90: 0x6ca96c20, 0x37b91: 0x6ca96e20, 0x37b92: 0x6ca97020, 0x37b93: 0x6ca97220, + 0x37b94: 0x6ca97420, 0x37b95: 0x6ca97620, 0x37b96: 0x6ca97820, 0x37b97: 0x6ca97a20, + 0x37b98: 0x6ca97c20, 0x37b99: 0x6ca97e20, 0x37b9a: 0x6ca98020, 0x37b9b: 0x6ca98220, + 0x37b9c: 0x6ca98420, 0x37b9d: 0x6ca98620, 0x37b9e: 0x6ca98820, 0x37b9f: 0x6ca98a20, + 0x37ba0: 0x6ca98c20, 0x37ba1: 0x6ca98e20, 0x37ba2: 0x6ca99020, 0x37ba3: 0x6ca99220, + 0x37ba4: 0x6ca99420, 0x37ba5: 0x6ca99620, 0x37ba6: 0x6cd7ae20, 0x37ba7: 0x6cd7b020, + 0x37ba8: 0x6cd7b220, 0x37ba9: 0x6cd7b420, 0x37baa: 0x6cd7b620, 0x37bab: 0x6cd7b820, + 0x37bac: 0x6cd7ba20, 0x37bad: 0x6cd7bc20, 0x37bae: 0x6cd7be20, 0x37baf: 0x6cd7c020, + 0x37bb0: 0x6cd7c220, 0x37bb1: 0x6cd7c420, 0x37bb2: 0x6cd7c620, 0x37bb3: 0x6cd7c820, + 0x37bb4: 0x6cd7ca20, 0x37bb5: 0x6cd7cc20, 0x37bb6: 0x6cd7ce20, 0x37bb7: 0x6cd7d020, + 0x37bb8: 0x6cd7d220, 0x37bb9: 0x6cd7d420, 0x37bba: 0x6cd7d620, 0x37bbb: 0x6cd7d820, + 0x37bbc: 0x6cd7da20, 0x37bbd: 0x6cd7dc20, 0x37bbe: 0x6cd7de20, 0x37bbf: 0x6cd7e020, + // Block 0xdef, offset 0x37bc0 + 0x37bc0: 0x6cd7e220, 0x37bc1: 0x6cd7e420, 0x37bc2: 0x6cd7e620, 0x37bc3: 0x6cd7e820, + 0x37bc4: 0x6cd7ea20, 0x37bc5: 0x6cd7ec20, 0x37bc6: 0x6cd7ee20, 0x37bc7: 0x6cd7f020, + 0x37bc8: 0x6cd7f220, 0x37bc9: 0x6cd7f420, 0x37bca: 0x6cd7f620, 0x37bcb: 0x6cd7f820, + 0x37bcc: 0x6cd7fa20, 0x37bcd: 0x6cd7fc20, 0x37bce: 0x6cd7fe20, 0x37bcf: 0x6cd80020, + 0x37bd0: 0x6cd80220, 0x37bd1: 0x6cd80420, 0x37bd2: 0x6d065a20, 0x37bd3: 0x6d065c20, + 0x37bd4: 0x6d065e20, 0x37bd5: 0x6d066020, 0x37bd6: 0x6d066220, 0x37bd7: 0x6d066420, + 0x37bd8: 0x6d066620, 0x37bd9: 0x6d066820, 0x37bda: 0x6d066a20, 0x37bdb: 0x6d066c20, + 0x37bdc: 0x6d066e20, 0x37bdd: 0x6d067020, 0x37bde: 0x6d067220, 0x37bdf: 0x6d067420, + 0x37be0: 0x6d067620, 0x37be1: 0x6d067820, 0x37be2: 0x6d067a20, 0x37be3: 0x6d067c20, + 0x37be4: 0x6d067e20, 0x37be5: 0x6d068020, 0x37be6: 0x6d068220, 0x37be7: 0x6d068420, + 0x37be8: 0x6d068620, 0x37be9: 0x6d068820, 0x37bea: 0x6d068a20, 0x37beb: 0x6d068c20, + 0x37bec: 0x6d068e20, 0x37bed: 0x6d069020, 0x37bee: 0x6d069220, 0x37bef: 0x6d069420, + 0x37bf0: 0x6d069620, 0x37bf1: 0x6d069820, 0x37bf2: 0x6d069a20, 0x37bf3: 0x6d069c20, + 0x37bf4: 0x6d069e20, 0x37bf5: 0x6d06a020, 0x37bf6: 0x6d06a220, 0x37bf7: 0x6d06a420, + 0x37bf8: 0x6d06a620, 0x37bf9: 0x6d06a820, 0x37bfa: 0x6d06aa20, 0x37bfb: 0x6d06ac20, + 0x37bfc: 0x6d06ae20, 0x37bfd: 0x6d06b020, 0x37bfe: 0x6d06b220, 0x37bff: 0x6d06b420, + // Block 0xdf0, offset 0x37c00 + 0x37c00: 0x6d06b620, 0x37c01: 0x6d06b820, 0x37c02: 0x6d06ba20, 0x37c03: 0x6d06bc20, + 0x37c04: 0x6d06be20, 0x37c05: 0x6d06c020, 0x37c06: 0x6d344020, 0x37c07: 0x6d344220, + 0x37c08: 0x6d344420, 0x37c09: 0x6d344620, 0x37c0a: 0x6d344820, 0x37c0b: 0x6d344a20, + 0x37c0c: 0x6d344c20, 0x37c0d: 0x6d344e20, 0x37c0e: 0x6d345020, 0x37c0f: 0x6d345220, + 0x37c10: 0x6d345420, 0x37c11: 0x6d345620, 0x37c12: 0x6d345820, 0x37c13: 0x6d345a20, + 0x37c14: 0x6d345c20, 0x37c15: 0x6d345e20, 0x37c16: 0x6d346020, 0x37c17: 0x6d346220, + 0x37c18: 0x6d346420, 0x37c19: 0x6d346620, 0x37c1a: 0x6d346820, 0x37c1b: 0x6d346a20, + 0x37c1c: 0x6d346c20, 0x37c1d: 0x6d346e20, 0x37c1e: 0x6d347020, 0x37c1f: 0x6d347220, + 0x37c20: 0x6d347420, 0x37c21: 0x6d347620, 0x37c22: 0x6d347820, 0x37c23: 0x6d347a20, + 0x37c24: 0x6d347c20, 0x37c25: 0x6d347e20, 0x37c26: 0x6d348020, 0x37c27: 0x6d348220, + 0x37c28: 0x6d348420, 0x37c29: 0x6d348620, 0x37c2a: 0x6d348820, 0x37c2b: 0x6d348a20, + 0x37c2c: 0x6d348c20, 0x37c2d: 0x6d348e20, 0x37c2e: 0x6d349020, 0x37c2f: 0x6d349220, + 0x37c30: 0x6d349420, 0x37c31: 0x6d349620, 0x37c32: 0x6d349820, 0x37c33: 0x6d349a20, + 0x37c34: 0x6d349c20, 0x37c35: 0x6d349e20, 0x37c36: 0x6d34a020, 0x37c37: 0x6d34a220, + 0x37c38: 0x6d34a420, 0x37c39: 0x6d34a620, 0x37c3a: 0x6d34a820, 0x37c3b: 0x6d34aa20, + 0x37c3c: 0x6d34ac20, 0x37c3d: 0x6d34ae20, 0x37c3e: 0x6d34b020, 0x37c3f: 0x6d34b220, + // Block 0xdf1, offset 0x37c40 + 0x37c40: 0x6d60ee20, 0x37c41: 0x6d60f020, 0x37c42: 0x6d60f220, 0x37c43: 0x6d60f420, + 0x37c44: 0x6d60f620, 0x37c45: 0x6d60f820, 0x37c46: 0x6d60fa20, 0x37c47: 0x6d60fc20, + 0x37c48: 0x6d60fe20, 0x37c49: 0x6d610020, 0x37c4a: 0x6d610220, 0x37c4b: 0x6d610420, + 0x37c4c: 0x6d610620, 0x37c4d: 0x6d610820, 0x37c4e: 0x6d610a20, 0x37c4f: 0x6d610c20, + 0x37c50: 0x6d610e20, 0x37c51: 0x6d611020, 0x37c52: 0x6d611220, 0x37c53: 0x6d611420, + 0x37c54: 0x6d611620, 0x37c55: 0x6d611820, 0x37c56: 0x6d611a20, 0x37c57: 0x6d611c20, + 0x37c58: 0x6d611e20, 0x37c59: 0x6d612020, 0x37c5a: 0x6d612220, 0x37c5b: 0x6d612420, + 0x37c5c: 0x6d612620, 0x37c5d: 0x6d612820, 0x37c5e: 0x6d612a20, 0x37c5f: 0x6d612c20, + 0x37c60: 0x6d612e20, 0x37c61: 0x6d613020, 0x37c62: 0x6d613220, 0x37c63: 0x6d613420, + 0x37c64: 0x6d613620, 0x37c65: 0x6d613820, 0x37c66: 0x6d613a20, 0x37c67: 0x6d8afc20, + 0x37c68: 0x6d613c20, 0x37c69: 0x6d613e20, 0x37c6a: 0x6d614020, 0x37c6b: 0x6d614220, + 0x37c6c: 0x6d614420, 0x37c6d: 0x6d614620, 0x37c6e: 0x6d614820, 0x37c6f: 0x6d614a20, + 0x37c70: 0x6d614c20, 0x37c71: 0x6d614e20, 0x37c72: 0x6d615020, 0x37c73: 0x6d615220, + 0x37c74: 0x6d615420, 0x37c75: 0x6d615620, 0x37c76: 0x6d615820, 0x37c77: 0x6d615a20, + 0x37c78: 0x6d615c20, 0x37c79: 0x6d615e20, 0x37c7a: 0x6d616020, 0x37c7b: 0x6d616220, + 0x37c7c: 0x6d616420, 0x37c7d: 0x6d616620, 0x37c7e: 0x6d616820, 0x37c7f: 0x6d616a20, + // Block 0xdf2, offset 0x37c80 + 0x37c80: 0x6d616c20, 0x37c81: 0x6d616e20, 0x37c82: 0x6d8afe20, 0x37c83: 0x6d8b0020, + 0x37c84: 0x6d8b0220, 0x37c85: 0x6d8b0420, 0x37c86: 0x6d8b0620, 0x37c87: 0x6d8b0820, + 0x37c88: 0x6d8b0a20, 0x37c89: 0x6d8b0c20, 0x37c8a: 0x6d8b0e20, 0x37c8b: 0x6d8b1020, + 0x37c8c: 0x6d8b1220, 0x37c8d: 0x6d8b1420, 0x37c8e: 0x6d8b1620, 0x37c8f: 0x6d8b1820, + 0x37c90: 0x6d8b1a20, 0x37c91: 0x6d8b1c20, 0x37c92: 0x6d8b1e20, 0x37c93: 0x6d8b2020, + 0x37c94: 0x6d8b2220, 0x37c95: 0x6d8b2420, 0x37c96: 0x6d8b2620, 0x37c97: 0x6d8b2820, + 0x37c98: 0x6d8b2a20, 0x37c99: 0x6d8b2c20, 0x37c9a: 0x6d8b2e20, 0x37c9b: 0x6d8b3020, + 0x37c9c: 0x6d8b3220, 0x37c9d: 0x6d8b3420, 0x37c9e: 0x6d8b3620, 0x37c9f: 0x6d8b3820, + 0x37ca0: 0x6d8b3a20, 0x37ca1: 0x6d8b3c20, 0x37ca2: 0x6d8b3e20, 0x37ca3: 0x6d8b4020, + 0x37ca4: 0x6d8b4220, 0x37ca5: 0x6d8b4420, 0x37ca6: 0x6d8b4620, 0x37ca7: 0x6d8b4820, + 0x37ca8: 0x6d8b4a20, 0x37ca9: 0x6d8b4c20, 0x37caa: 0x6d8b4e20, 0x37cab: 0x6d8b5020, + 0x37cac: 0x6d8b5220, 0x37cad: 0x6d8b5420, 0x37cae: 0x6d8b5620, 0x37caf: 0x6d8b5820, + 0x37cb0: 0x6d8b5a20, 0x37cb1: 0x6d8b5c20, 0x37cb2: 0x6d8b5e20, 0x37cb3: 0x6d8b6020, + 0x37cb4: 0x6d8b6220, 0x37cb5: 0x6d8b6420, 0x37cb6: 0x6d8b6620, 0x37cb7: 0x6d8b6820, + 0x37cb8: 0x6d8b6a20, 0x37cb9: 0x6d8b6c20, 0x37cba: 0x6d8b6e20, 0x37cbb: 0x6d8b7020, + 0x37cbc: 0x6d8b7220, 0x37cbd: 0x6d8b7420, 0x37cbe: 0x6d8b7620, 0x37cbf: 0x6d8b7820, + // Block 0xdf3, offset 0x37cc0 + 0x37cc0: 0x6d8b7a20, 0x37cc1: 0x6d8b7c20, 0x37cc2: 0x6daf7a20, 0x37cc3: 0x6d8b7e20, + 0x37cc4: 0x6d8b8020, 0x37cc5: 0x6d8b8220, 0x37cc6: 0x6d8b8420, 0x37cc7: 0x6d8b8620, + 0x37cc8: 0x6d8b8820, 0x37cc9: 0x6daf7c20, 0x37cca: 0x6daf7e20, 0x37ccb: 0x6daf8020, + 0x37ccc: 0x6daf8220, 0x37ccd: 0x6daf8420, 0x37cce: 0x6daf8620, 0x37ccf: 0x6daf8820, + 0x37cd0: 0x6daf8a20, 0x37cd1: 0x6daf8c20, 0x37cd2: 0x6daf8e20, 0x37cd3: 0x6daf9020, + 0x37cd4: 0x6daf9220, 0x37cd5: 0x6daf9420, 0x37cd6: 0x6daf9620, 0x37cd7: 0x6daf9820, + 0x37cd8: 0x6daf9a20, 0x37cd9: 0x6daf9c20, 0x37cda: 0x6daf9e20, 0x37cdb: 0x6dafa020, + 0x37cdc: 0x6dafa220, 0x37cdd: 0x6dafa420, 0x37cde: 0x6dafa620, 0x37cdf: 0x6dafa820, + 0x37ce0: 0x6dafaa20, 0x37ce1: 0x6dafac20, 0x37ce2: 0x6dafae20, 0x37ce3: 0x6dafb020, + 0x37ce4: 0x6dafb220, 0x37ce5: 0x6dafb420, 0x37ce6: 0x6dafb620, 0x37ce7: 0x6dafb820, + 0x37ce8: 0x6dafba20, 0x37ce9: 0x6dafbc20, 0x37cea: 0x6dafbe20, 0x37ceb: 0x6dafc020, + 0x37cec: 0x6dafc220, 0x37ced: 0x6dafc420, 0x37cee: 0x6dafc620, 0x37cef: 0x6dafc820, + 0x37cf0: 0x6dafca20, 0x37cf1: 0x6dafcc20, 0x37cf2: 0x6dafce20, 0x37cf3: 0x6dafd020, + 0x37cf4: 0x6dafd220, 0x37cf5: 0x6dafd420, 0x37cf6: 0x6dafd620, 0x37cf7: 0x6dafd820, + 0x37cf8: 0x6dafda20, 0x37cf9: 0x6dafdc20, 0x37cfa: 0x6dafde20, 0x37cfb: 0x6dafe020, + 0x37cfc: 0x6dcf0020, 0x37cfd: 0x6dcf0220, 0x37cfe: 0x6dcf0420, 0x37cff: 0x6dcf0620, + // Block 0xdf4, offset 0x37d00 + 0x37d00: 0x6dcf0820, 0x37d01: 0x6dcf0a20, 0x37d02: 0x6dcf0c20, 0x37d03: 0x6dcf0e20, + 0x37d04: 0x6dcf1020, 0x37d05: 0x6dcf1220, 0x37d06: 0x6dcf1420, 0x37d07: 0x6dcf1620, + 0x37d08: 0x6dcf1820, 0x37d09: 0x6dcf1a20, 0x37d0a: 0x6dcf1c20, 0x37d0b: 0x6dcf1e20, + 0x37d0c: 0x6dcf2020, 0x37d0d: 0x6dcf2220, 0x37d0e: 0x6dcf2420, 0x37d0f: 0x6dcf2620, + 0x37d10: 0x6dcf2820, 0x37d11: 0x6dcf2a20, 0x37d12: 0x6dcf2c20, 0x37d13: 0x6dcf2e20, + 0x37d14: 0x6dcf3020, 0x37d15: 0x6dcf3220, 0x37d16: 0x6dcf3420, 0x37d17: 0x6dcf3620, + 0x37d18: 0x6dcf3820, 0x37d19: 0x6dcf3a20, 0x37d1a: 0x6dcf3c20, 0x37d1b: 0x6dcf3e20, + 0x37d1c: 0x6dcf4020, 0x37d1d: 0x6dcf4220, 0x37d1e: 0x6dcf4420, 0x37d1f: 0x6dcf4620, + 0x37d20: 0x6dcf4820, 0x37d21: 0x6dcf4a20, 0x37d22: 0x6dcf4c20, 0x37d23: 0x6dcf4e20, + 0x37d24: 0x6dcf5020, 0x37d25: 0x6dcf5220, 0x37d26: 0x6dcf5420, 0x37d27: 0x6dcf5620, + 0x37d28: 0x6dcf5820, 0x37d29: 0x6dcf5a20, 0x37d2a: 0x6dcf5c20, 0x37d2b: 0x6dcf5e20, + 0x37d2c: 0x6dcf6020, 0x37d2d: 0x6dcf6220, 0x37d2e: 0x6dcf6420, 0x37d2f: 0x6dcf6620, + 0x37d30: 0x6dcf6820, 0x37d31: 0x6dcf6a20, 0x37d32: 0x6dcf6c20, 0x37d33: 0x6dcf6e20, + 0x37d34: 0x6dcf7020, 0x37d35: 0x6de94220, 0x37d36: 0x6de94420, 0x37d37: 0x6de94620, + 0x37d38: 0x6de94820, 0x37d39: 0x6de94a20, 0x37d3a: 0x6de94c20, 0x37d3b: 0x6de94e20, + 0x37d3c: 0x6de95020, 0x37d3d: 0x6de95220, 0x37d3e: 0x6de95420, 0x37d3f: 0x6de95620, + // Block 0xdf5, offset 0x37d40 + 0x37d40: 0x6de95820, 0x37d41: 0x6de95a20, 0x37d42: 0x6de95c20, 0x37d43: 0x6de95e20, + 0x37d44: 0x6de96020, 0x37d45: 0x6de96220, 0x37d46: 0x6de96420, 0x37d47: 0x6de96620, + 0x37d48: 0x6de96820, 0x37d49: 0x6de96a20, 0x37d4a: 0x6de96c20, 0x37d4b: 0x6de96e20, + 0x37d4c: 0x6de97020, 0x37d4d: 0x6de97220, 0x37d4e: 0x6de97420, 0x37d4f: 0x6de97620, + 0x37d50: 0x6de97820, 0x37d51: 0x6de97a20, 0x37d52: 0x6de97c20, 0x37d53: 0x6de97e20, + 0x37d54: 0x6de98020, 0x37d55: 0x6de98220, 0x37d56: 0x6de98420, 0x37d57: 0x6de98620, + 0x37d58: 0x6de98820, 0x37d59: 0x6de98a20, 0x37d5a: 0x6de98c20, 0x37d5b: 0x6de98e20, + 0x37d5c: 0x6dff5420, 0x37d5d: 0x6dff5620, 0x37d5e: 0x6dff5820, 0x37d5f: 0x6dff5a20, + 0x37d60: 0x6dff5c20, 0x37d61: 0x6dff5e20, 0x37d62: 0x6dff6020, 0x37d63: 0x6dff6220, + 0x37d64: 0x6e11c420, 0x37d65: 0x6de99020, 0x37d66: 0x6dff6420, 0x37d67: 0x6dff6620, + 0x37d68: 0x6e11c620, 0x37d69: 0x6dff6820, 0x37d6a: 0x6dff6a20, 0x37d6b: 0x6e11c820, + 0x37d6c: 0x6dff6c20, 0x37d6d: 0x6dff6e20, 0x37d6e: 0x6dff7020, 0x37d6f: 0x6dff7220, + 0x37d70: 0x6dff7420, 0x37d71: 0x6dff7620, 0x37d72: 0x6dff7820, 0x37d73: 0x6dff7a20, + 0x37d74: 0x6dff7c20, 0x37d75: 0x6dff7e20, 0x37d76: 0x6dff8020, 0x37d77: 0x6dff8220, + 0x37d78: 0x6dff8420, 0x37d79: 0x6dff8620, 0x37d7a: 0x6dff8820, 0x37d7b: 0x6e11ca20, + 0x37d7c: 0x6e11cc20, 0x37d7d: 0x6e11ce20, 0x37d7e: 0x6e11d020, 0x37d7f: 0x6e11d220, + // Block 0xdf6, offset 0x37d80 + 0x37d80: 0x6e11d420, 0x37d81: 0x6e11d620, 0x37d82: 0x6e200c20, 0x37d83: 0x6e11d820, + 0x37d84: 0x6e11da20, 0x37d85: 0x6e11dc20, 0x37d86: 0x6e11de20, 0x37d87: 0x6e11e020, + 0x37d88: 0x6e11e220, 0x37d89: 0x6e11e420, 0x37d8a: 0x6e11e620, 0x37d8b: 0x6e11e820, + 0x37d8c: 0x6e11ea20, 0x37d8d: 0x6e11ec20, 0x37d8e: 0x6e11ee20, 0x37d8f: 0x6e11f020, + 0x37d90: 0x6e11f220, 0x37d91: 0x6e11f420, 0x37d92: 0x6e11f620, 0x37d93: 0x6e11f820, + 0x37d94: 0x6e200e20, 0x37d95: 0x6e201020, 0x37d96: 0x6e201220, 0x37d97: 0x6e201420, + 0x37d98: 0x6e201620, 0x37d99: 0x6e201820, 0x37d9a: 0x6e201a20, 0x37d9b: 0x6e201c20, + 0x37d9c: 0x6e201e20, 0x37d9d: 0x6e202020, 0x37d9e: 0x6e202220, 0x37d9f: 0x6e202420, + 0x37da0: 0x6e202620, 0x37da1: 0x6e202820, 0x37da2: 0x6e202a20, 0x37da3: 0x6e202c20, + 0x37da4: 0x6e202e20, 0x37da5: 0x6e203020, 0x37da6: 0x6e203220, 0x37da7: 0x6e2b1e20, + 0x37da8: 0x6e2b2020, 0x37da9: 0x6e2b2220, 0x37daa: 0x6e2b2420, 0x37dab: 0x6e2b2620, + 0x37dac: 0x6e2b2820, 0x37dad: 0x6e2b2a20, 0x37dae: 0x6e2b2c20, 0x37daf: 0x6e2b2e20, + 0x37db0: 0x6e339420, 0x37db1: 0x6e339620, 0x37db2: 0x6e339820, 0x37db3: 0x6e339a20, + 0x37db4: 0x6e339c20, 0x37db5: 0x6e339e20, 0x37db6: 0x6e33a020, 0x37db7: 0x6e33a220, + 0x37db8: 0x6e39a020, 0x37db9: 0x6e33a420, 0x37dba: 0x6e39a220, 0x37dbb: 0x6e39a420, + 0x37dbc: 0x6e3dce20, 0x37dbd: 0x6e3dd020, 0x37dbe: 0x6e40aa20, 0x37dbf: 0x6e40ac20, + // Block 0xdf7, offset 0x37dc0 + 0x37dc0: 0x6e40ae20, 0x37dc1: 0x6e40b020, 0x37dc2: 0x6e40b220, 0x37dc3: 0x6e42e020, + 0x37dc4: 0x6e42e220, 0x37dc5: 0x6e445c20, 0x37dc6: 0x6e453c20, 0x37dc7: 0x6e45ca20, + 0x37dc8: 0x6c3dfa20, 0x37dc9: 0x6c5cb820, 0x37dca: 0x6c80b020, 0x37dcb: 0x6c80b220, + 0x37dcc: 0x6c80b420, 0x37dcd: 0x6ca9d420, 0x37dce: 0x6ca9d620, 0x37dcf: 0x6ca9d820, + 0x37dd0: 0x6ca9da20, 0x37dd1: 0x6cd84020, 0x37dd2: 0x6cd84220, 0x37dd3: 0x6cd84420, + 0x37dd4: 0x6cd84620, 0x37dd5: 0x6cd84820, 0x37dd6: 0x6d06e620, 0x37dd7: 0x6d06e820, + 0x37dd8: 0x6d06ea20, 0x37dd9: 0x6d06ec20, 0x37dda: 0x6d34d620, 0x37ddb: 0x6d618820, + 0x37ddc: 0x6d618a20, 0x37ddd: 0x6d618c20, 0x37dde: 0x6d8ba020, 0x37ddf: 0x6d8ba220, + 0x37de0: 0x6dafec20, 0x37de1: 0x6dafee20, 0x37de2: 0x6c143220, 0x37de3: 0x6c5cc820, + 0x37de4: 0x6c5cca20, 0x37de5: 0x6c5ccc20, 0x37de6: 0x6c80cc20, 0x37de7: 0x6c80ce20, + 0x37de8: 0x6c80d020, 0x37de9: 0x6ca9f220, 0x37dea: 0x6ca9f420, 0x37deb: 0x6ca9f620, + 0x37dec: 0x6ca9f820, 0x37ded: 0x6ca9fa20, 0x37dee: 0x6ca9fc20, 0x37def: 0x6cd85a20, + 0x37df0: 0x6cd85c20, 0x37df1: 0x6cd85e20, 0x37df2: 0x6cd86020, 0x37df3: 0x6cd86220, + 0x37df4: 0x6d06f220, 0x37df5: 0x6d06f420, 0x37df6: 0x6d06f620, 0x37df7: 0x6d06f820, + 0x37df8: 0x6d34e820, 0x37df9: 0x6d34ea20, 0x37dfa: 0x6d34ec20, 0x37dfb: 0x6d34ee20, + 0x37dfc: 0x6d34f020, 0x37dfd: 0x6d34f220, 0x37dfe: 0x6d34f420, 0x37dff: 0x6d34f620, + // Block 0xdf8, offset 0x37e00 + 0x37e00: 0x6d34f820, 0x37e01: 0x6d619220, 0x37e02: 0x6d619420, 0x37e03: 0x6d619620, + 0x37e04: 0x6d619820, 0x37e05: 0x6d619a20, 0x37e06: 0x6d619c20, 0x37e07: 0x6d619e20, + 0x37e08: 0x6d8baa20, 0x37e09: 0x6d8bac20, 0x37e0a: 0x6d8bae20, 0x37e0b: 0x6d8bb020, + 0x37e0c: 0x6d8bb220, 0x37e0d: 0x6d8bb420, 0x37e0e: 0x6d8bb620, 0x37e0f: 0x6daffa20, + 0x37e10: 0x6daffc20, 0x37e11: 0x6daffe20, 0x37e12: 0x6db00020, 0x37e13: 0x6db00220, + 0x37e14: 0x6db00420, 0x37e15: 0x6dcf8220, 0x37e16: 0x6dcf8420, 0x37e17: 0x6dcf8620, + 0x37e18: 0x6dcf8820, 0x37e19: 0x6de9aa20, 0x37e1a: 0x6de9ac20, 0x37e1b: 0x6de9ae20, + 0x37e1c: 0x6de9b020, 0x37e1d: 0x6dff9220, 0x37e1e: 0x6dff9420, 0x37e1f: 0x6e120420, + 0x37e20: 0x6e120620, 0x37e21: 0x6e203e20, 0x37e22: 0x6e2b3420, 0x37e23: 0x6e2b3620, + 0x37e24: 0x6e2b3820, 0x37e25: 0x6e33aa20, 0x37e26: 0x6e33ac20, 0x37e27: 0x6e3dd420, + 0x37e28: 0x6e40b620, 0x37e29: 0x6e45cc20, 0x37e2a: 0x6c0a4c20, 0x37e2b: 0x6c0a4e20, + 0x37e2c: 0x6c25cc20, 0x37e2d: 0x6c0a5020, 0x37e2e: 0x6c25ce20, 0x37e2f: 0x6c143620, + 0x37e30: 0x6c0a5220, 0x37e31: 0x6c25d020, 0x37e32: 0x6c25d220, 0x37e33: 0x6c25d420, + 0x37e34: 0x6c25d620, 0x37e35: 0x6c25d820, 0x37e36: 0x6c25da20, 0x37e37: 0x6c3e0a20, + 0x37e38: 0x6c3e0c20, 0x37e39: 0x6c3e0e20, 0x37e3a: 0x6c3e1020, 0x37e3b: 0x6c3e1220, + 0x37e3c: 0x6c3e1420, 0x37e3d: 0x6c3e1620, 0x37e3e: 0x6c3e1820, 0x37e3f: 0x6c3e1a20, + // Block 0xdf9, offset 0x37e40 + 0x37e40: 0x6c3e1c20, 0x37e41: 0x6c5cda20, 0x37e42: 0x6c5cdc20, 0x37e43: 0x6c5cde20, + 0x37e44: 0x6c5ce020, 0x37e45: 0x6c5ce220, 0x37e46: 0x6c5ce420, 0x37e47: 0x6c5ce620, + 0x37e48: 0x6c5ce820, 0x37e49: 0x6c5cea20, 0x37e4a: 0x6c5cec20, 0x37e4b: 0x6c5cee20, + 0x37e4c: 0x6c5cf020, 0x37e4d: 0x6c5cf220, 0x37e4e: 0x6c80e820, 0x37e4f: 0x6c80ea20, + 0x37e50: 0x6c80ec20, 0x37e51: 0x6c80ee20, 0x37e52: 0x6c80f020, 0x37e53: 0x6c80f220, + 0x37e54: 0x6c80f420, 0x37e55: 0x6c80f620, 0x37e56: 0x6c80f820, 0x37e57: 0x6c80fa20, + 0x37e58: 0x6c80fc20, 0x37e59: 0x6c80fe20, 0x37e5a: 0x6c810020, 0x37e5b: 0x6c810220, + 0x37e5c: 0x6c810420, 0x37e5d: 0x6c810620, 0x37e5e: 0x6c810820, 0x37e5f: 0x6c810a20, + 0x37e60: 0x6c810c20, 0x37e61: 0x6c810e20, 0x37e62: 0x6c811020, 0x37e63: 0x6c811220, + 0x37e64: 0x6c6dd220, 0x37e65: 0x6c811420, 0x37e66: 0x6c811620, 0x37e67: 0x6c811820, + 0x37e68: 0x6c811a20, 0x37e69: 0x6c811c20, 0x37e6a: 0x6caa0220, 0x37e6b: 0x6caa0420, + 0x37e6c: 0x6caa0620, 0x37e6d: 0x6caa0820, 0x37e6e: 0x6caa0a20, 0x37e6f: 0x6caa0c20, + 0x37e70: 0x6caa0e20, 0x37e71: 0x6caa1020, 0x37e72: 0x6caa1220, 0x37e73: 0x6c811e20, + 0x37e74: 0x6caa1420, 0x37e75: 0x6caa1620, 0x37e76: 0x6caa1820, 0x37e77: 0x6caa1a20, + 0x37e78: 0x6caa1c20, 0x37e79: 0x6caa1e20, 0x37e7a: 0x6caa2020, 0x37e7b: 0x6caa2220, + 0x37e7c: 0x6cd86e20, 0x37e7d: 0x6cd87020, 0x37e7e: 0x6cd87220, 0x37e7f: 0x6cd87420, + // Block 0xdfa, offset 0x37e80 + 0x37e80: 0x6cd87620, 0x37e81: 0x6cd87820, 0x37e82: 0x6cd87a20, 0x37e83: 0x6cd87c20, + 0x37e84: 0x6cd87e20, 0x37e85: 0x6d071420, 0x37e86: 0x6d071620, 0x37e87: 0x6d071820, + 0x37e88: 0x6d071a20, 0x37e89: 0x6d071c20, 0x37e8a: 0x6d071e20, 0x37e8b: 0x6d072020, + 0x37e8c: 0x6d072220, 0x37e8d: 0x6d072420, 0x37e8e: 0x6d072620, 0x37e8f: 0x6d072820, + 0x37e90: 0x6d072a20, 0x37e91: 0x6cd88020, 0x37e92: 0x6d072c20, 0x37e93: 0x6d072e20, + 0x37e94: 0x6d073020, 0x37e95: 0x6d073220, 0x37e96: 0x6d073420, 0x37e97: 0x6d073620, + 0x37e98: 0x6d073820, 0x37e99: 0x6d073a20, 0x37e9a: 0x6d073c20, 0x37e9b: 0x6d073e20, + 0x37e9c: 0x6d074020, 0x37e9d: 0x6d350a20, 0x37e9e: 0x6d350c20, 0x37e9f: 0x6d350e20, + 0x37ea0: 0x6d351020, 0x37ea1: 0x6d351220, 0x37ea2: 0x6d351420, 0x37ea3: 0x6d351620, + 0x37ea4: 0x6d351820, 0x37ea5: 0x6d351a20, 0x37ea6: 0x6d351c20, 0x37ea7: 0x6d351e20, + 0x37ea8: 0x6d352020, 0x37ea9: 0x6d352220, 0x37eaa: 0x6d217020, 0x37eab: 0x6d352420, + 0x37eac: 0x6d352620, 0x37ead: 0x6d352820, 0x37eae: 0x6d352a20, 0x37eaf: 0x6d61ac20, + 0x37eb0: 0x6d61ae20, 0x37eb1: 0x6d61b020, 0x37eb2: 0x6d61b220, 0x37eb3: 0x6d61b420, + 0x37eb4: 0x6d61b620, 0x37eb5: 0x6d61b820, 0x37eb6: 0x6d61ba20, 0x37eb7: 0x6d61bc20, + 0x37eb8: 0x6d61be20, 0x37eb9: 0x6d61c020, 0x37eba: 0x6d61c220, 0x37ebb: 0x6d61c420, + 0x37ebc: 0x6d61c620, 0x37ebd: 0x6d8bc620, 0x37ebe: 0x6d8bc820, 0x37ebf: 0x6d8bca20, + // Block 0xdfb, offset 0x37ec0 + 0x37ec0: 0x6d8bcc20, 0x37ec1: 0x6d8bce20, 0x37ec2: 0x6d8bd020, 0x37ec3: 0x6d8bd220, + 0x37ec4: 0x6d8bd420, 0x37ec5: 0x6d8bd620, 0x37ec6: 0x6d8bd820, 0x37ec7: 0x6d8bda20, + 0x37ec8: 0x6d8bdc20, 0x37ec9: 0x6d8bde20, 0x37eca: 0x6d8be020, 0x37ecb: 0x6d8be220, + 0x37ecc: 0x6d8be420, 0x37ecd: 0x6d8be620, 0x37ece: 0x6d8be820, 0x37ecf: 0x6d8bea20, + 0x37ed0: 0x6d8bec20, 0x37ed1: 0x6d8bee20, 0x37ed2: 0x6db01020, 0x37ed3: 0x6db01220, + 0x37ed4: 0x6db01420, 0x37ed5: 0x6db01620, 0x37ed6: 0x6db01820, 0x37ed7: 0x6db01a20, + 0x37ed8: 0x6db01c20, 0x37ed9: 0x6db01e20, 0x37eda: 0x6db02020, 0x37edb: 0x6db02220, + 0x37edc: 0x6db02420, 0x37edd: 0x6db02620, 0x37ede: 0x6db02820, 0x37edf: 0x6dcf9020, + 0x37ee0: 0x6dcf9220, 0x37ee1: 0x6dcf9420, 0x37ee2: 0x6dcf9620, 0x37ee3: 0x6dcf9820, + 0x37ee4: 0x6dcf9a20, 0x37ee5: 0x6dcf9c20, 0x37ee6: 0x6dcf9e20, 0x37ee7: 0x6dcfa020, + 0x37ee8: 0x6dcfa220, 0x37ee9: 0x6dcfb220, 0x37eea: 0x6de9be20, 0x37eeb: 0x6de9c020, + 0x37eec: 0x6de9c220, 0x37eed: 0x6de9c420, 0x37eee: 0x6de9c620, 0x37eef: 0x6de9c820, + 0x37ef0: 0x6de9ca20, 0x37ef1: 0x6de9cc20, 0x37ef2: 0x6de9ce20, 0x37ef3: 0x6de9d020, + 0x37ef4: 0x6de9d220, 0x37ef5: 0x6dff9620, 0x37ef6: 0x6dff9820, 0x37ef7: 0x6dff9a20, + 0x37ef8: 0x6dff9c20, 0x37ef9: 0x6dff9e20, 0x37efa: 0x6dffa020, 0x37efb: 0x6e120a20, + 0x37efc: 0x6e120c20, 0x37efd: 0x6e2b3a20, 0x37efe: 0x6e33b420, 0x37eff: 0x6e33b620, + // Block 0xdfc, offset 0x37f00 + 0x37f00: 0x6e33b820, 0x37f01: 0x6e33ba20, 0x37f02: 0x6e33bc20, 0x37f03: 0x6e33be20, + 0x37f04: 0x6e33c020, 0x37f05: 0x6e33c220, 0x37f06: 0x6e3dd620, 0x37f07: 0x6e40b820, + 0x37f08: 0x6e42e420, 0x37f09: 0x6e42e620, 0x37f0a: 0x6e42e820, 0x37f0b: 0x6c143c20, + 0x37f0c: 0x6c143e20, 0x37f0d: 0x6c144020, 0x37f0e: 0x6c3e2620, 0x37f0f: 0x6c3e2820, + 0x37f10: 0x6c3e2a20, 0x37f11: 0x6c5cfe20, 0x37f12: 0x6c5d0020, 0x37f13: 0x6c5d0220, + 0x37f14: 0x6c5d0420, 0x37f15: 0x6c5d0620, 0x37f16: 0x6c5d0820, 0x37f17: 0x6c813820, + 0x37f18: 0x6c813a20, 0x37f19: 0x6c813c20, 0x37f1a: 0x6c813e20, 0x37f1b: 0x6c814020, + 0x37f1c: 0x6c814220, 0x37f1d: 0x6c814420, 0x37f1e: 0x6c814620, 0x37f1f: 0x6c814820, + 0x37f20: 0x6c814a20, 0x37f21: 0x6c814c20, 0x37f22: 0x6c814e20, 0x37f23: 0x6c815020, + 0x37f24: 0x6c815220, 0x37f25: 0x6caa4020, 0x37f26: 0x6caa4220, 0x37f27: 0x6caa4420, + 0x37f28: 0x6caa4620, 0x37f29: 0x6caa4820, 0x37f2a: 0x6caa4a20, 0x37f2b: 0x6caa4c20, + 0x37f2c: 0x6caa4e20, 0x37f2d: 0x6caa5020, 0x37f2e: 0x6c815420, 0x37f2f: 0x6caa5220, + 0x37f30: 0x6caa5420, 0x37f31: 0x6caa5620, 0x37f32: 0x6caa5820, 0x37f33: 0x6caa5a20, + 0x37f34: 0x6caa5c20, 0x37f35: 0x6caa5e20, 0x37f36: 0x6caa6020, 0x37f37: 0x6caa6220, + 0x37f38: 0x6caa6420, 0x37f39: 0x6cd88e20, 0x37f3a: 0x6cd89020, 0x37f3b: 0x6cd89220, + 0x37f3c: 0x6cd89420, 0x37f3d: 0x6cd89620, 0x37f3e: 0x6cd89820, 0x37f3f: 0x6cd89a20, + // Block 0xdfd, offset 0x37f40 + 0x37f40: 0x6cd89c20, 0x37f41: 0x6cd89e20, 0x37f42: 0x6cd8a020, 0x37f43: 0x6cd8a220, + 0x37f44: 0x6cd8a420, 0x37f45: 0x6cba3e20, 0x37f46: 0x6d075820, 0x37f47: 0x6d075a20, + 0x37f48: 0x6d075c20, 0x37f49: 0x6d075e20, 0x37f4a: 0x6d076020, 0x37f4b: 0x6d076220, + 0x37f4c: 0x6d076420, 0x37f4d: 0x6d076620, 0x37f4e: 0x6d076820, 0x37f4f: 0x6d076a20, + 0x37f50: 0x6d076c20, 0x37f51: 0x6d076e20, 0x37f52: 0x6d077020, 0x37f53: 0x6d077220, + 0x37f54: 0x6d077420, 0x37f55: 0x6d077620, 0x37f56: 0x6d077820, 0x37f57: 0x6d353a20, + 0x37f58: 0x6d353c20, 0x37f59: 0x6d353e20, 0x37f5a: 0x6d354020, 0x37f5b: 0x6d354220, + 0x37f5c: 0x6d354420, 0x37f5d: 0x6d354620, 0x37f5e: 0x6d354820, 0x37f5f: 0x6d354a20, + 0x37f60: 0x6d354c20, 0x37f61: 0x6d354e20, 0x37f62: 0x6d61d620, 0x37f63: 0x6d61d820, + 0x37f64: 0x6d61da20, 0x37f65: 0x6d61dc20, 0x37f66: 0x6d61de20, 0x37f67: 0x6d61e020, + 0x37f68: 0x6d61e220, 0x37f69: 0x6d61e420, 0x37f6a: 0x6d61e620, 0x37f6b: 0x6d61e820, + 0x37f6c: 0x6d61ea20, 0x37f6d: 0x6d61ec20, 0x37f6e: 0x6d61ee20, 0x37f6f: 0x6d8bfa20, + 0x37f70: 0x6d8bfc20, 0x37f71: 0x6d8bfe20, 0x37f72: 0x6d8c0020, 0x37f73: 0x6d8c0220, + 0x37f74: 0x6d8c0420, 0x37f75: 0x6d8c0620, 0x37f76: 0x6d8c0820, 0x37f77: 0x6db02e20, + 0x37f78: 0x6db03020, 0x37f79: 0x6db03220, 0x37f7a: 0x6db03420, 0x37f7b: 0x6db03620, + 0x37f7c: 0x6db03820, 0x37f7d: 0x6db03a20, 0x37f7e: 0x6db03c20, 0x37f7f: 0x6db03e20, + // Block 0xdfe, offset 0x37f80 + 0x37f80: 0x6db04020, 0x37f81: 0x6db04220, 0x37f82: 0x6db04420, 0x37f83: 0x6db04620, + 0x37f84: 0x6db04820, 0x37f85: 0x6dcfb420, 0x37f86: 0x6dcfb620, 0x37f87: 0x6dcfb820, + 0x37f88: 0x6dcfba20, 0x37f89: 0x6dcfbc20, 0x37f8a: 0x6dcfbe20, 0x37f8b: 0x6dcfc020, + 0x37f8c: 0x6dcfc220, 0x37f8d: 0x6dcfc420, 0x37f8e: 0x6dcfc620, 0x37f8f: 0x6dcfc820, + 0x37f90: 0x6dcfca20, 0x37f91: 0x6dcfcc20, 0x37f92: 0x6dcfce20, 0x37f93: 0x6dcfd020, + 0x37f94: 0x6dcfd220, 0x37f95: 0x6de9de20, 0x37f96: 0x6de9e020, 0x37f97: 0x6de9e220, + 0x37f98: 0x6de9e420, 0x37f99: 0x6de9e620, 0x37f9a: 0x6de9e820, 0x37f9b: 0x6de9ea20, + 0x37f9c: 0x6dffa420, 0x37f9d: 0x6dffa620, 0x37f9e: 0x6dffa820, 0x37f9f: 0x6dffaa20, + 0x37fa0: 0x6dffac20, 0x37fa1: 0x6dffae20, 0x37fa2: 0x6e121620, 0x37fa3: 0x6e121820, + 0x37fa4: 0x6e121a20, 0x37fa5: 0x6e121c20, 0x37fa6: 0x6e121e20, 0x37fa7: 0x6e122020, + 0x37fa8: 0x6e204420, 0x37fa9: 0x6e204620, 0x37faa: 0x6e2b3c20, 0x37fab: 0x6e2b3e20, + 0x37fac: 0x6e33c420, 0x37fad: 0x6e39a820, 0x37fae: 0x6e3dd820, 0x37faf: 0x6e40bc20, + 0x37fb0: 0x6e453e20, 0x37fb1: 0x6e454020, 0x37fb2: 0x6c3e2e20, 0x37fb3: 0x6c25de20, + 0x37fb4: 0x6c5d1020, 0x37fb5: 0x6c5d1220, 0x37fb6: 0x6c5d1420, 0x37fb7: 0x6c5d1620, + 0x37fb8: 0x6c5d1820, 0x37fb9: 0x6c5d1a20, 0x37fba: 0x6c5d1c20, 0x37fbb: 0x6c5d1e20, + 0x37fbc: 0x6c5d2020, 0x37fbd: 0x6c5d2220, 0x37fbe: 0x6c5d2420, 0x37fbf: 0x6c5d2620, + // Block 0xdff, offset 0x37fc0 + 0x37fc0: 0x6c5d2820, 0x37fc1: 0x6c5d2a20, 0x37fc2: 0x6c816820, 0x37fc3: 0x6c816a20, + 0x37fc4: 0x6c816c20, 0x37fc5: 0x6c816e20, 0x37fc6: 0x6c817020, 0x37fc7: 0x6c817220, + 0x37fc8: 0x6c817420, 0x37fc9: 0x6c817620, 0x37fca: 0x6c817820, 0x37fcb: 0x6c817a20, + 0x37fcc: 0x6c817c20, 0x37fcd: 0x6c817e20, 0x37fce: 0x6c818020, 0x37fcf: 0x6c818220, + 0x37fd0: 0x6c818420, 0x37fd1: 0x6c818620, 0x37fd2: 0x6c818820, 0x37fd3: 0x6c818a20, + 0x37fd4: 0x6c818c20, 0x37fd5: 0x6caa9420, 0x37fd6: 0x6caa9620, 0x37fd7: 0x6caa9820, + 0x37fd8: 0x6caa9a20, 0x37fd9: 0x6caa9c20, 0x37fda: 0x6caa9e20, 0x37fdb: 0x6caaa020, + 0x37fdc: 0x6caaa220, 0x37fdd: 0x6caaa420, 0x37fde: 0x6caaa620, 0x37fdf: 0x6caaa820, + 0x37fe0: 0x6caaaa20, 0x37fe1: 0x6caaac20, 0x37fe2: 0x6caaae20, 0x37fe3: 0x6cd8c220, + 0x37fe4: 0x6cd8c420, 0x37fe5: 0x6cd8c620, 0x37fe6: 0x6cd8c820, 0x37fe7: 0x6cd8ca20, + 0x37fe8: 0x6cd8cc20, 0x37fe9: 0x6cd8ce20, 0x37fea: 0x6cd8d020, 0x37feb: 0x6cd8d220, + 0x37fec: 0x6cd8d420, 0x37fed: 0x6cd8d620, 0x37fee: 0x6cd8d820, 0x37fef: 0x6cd8da20, + 0x37ff0: 0x6cd8dc20, 0x37ff1: 0x6cd8de20, 0x37ff2: 0x6cd8e020, 0x37ff3: 0x6cd8e220, + 0x37ff4: 0x6cd8e420, 0x37ff5: 0x6cd8e620, 0x37ff6: 0x6cd8e820, 0x37ff7: 0x6cd8ea20, + 0x37ff8: 0x6d078a20, 0x37ff9: 0x6d078c20, 0x37ffa: 0x6d078e20, 0x37ffb: 0x6d079020, + 0x37ffc: 0x6d079220, 0x37ffd: 0x6d079420, 0x37ffe: 0x6d079620, 0x37fff: 0x6d079820, + // Block 0xe00, offset 0x38000 + 0x38000: 0x6d079a20, 0x38001: 0x6d079c20, 0x38002: 0x6d079e20, 0x38003: 0x6d07a020, + 0x38004: 0x6d07a220, 0x38005: 0x6d356820, 0x38006: 0x6d07a420, 0x38007: 0x6d356a20, + 0x38008: 0x6d356c20, 0x38009: 0x6d356e20, 0x3800a: 0x6d357020, 0x3800b: 0x6d357220, + 0x3800c: 0x6d357420, 0x3800d: 0x6d357620, 0x3800e: 0x6d357820, 0x3800f: 0x6d357a20, + 0x38010: 0x6d357c20, 0x38011: 0x6d231e20, 0x38012: 0x6d357e20, 0x38013: 0x6d358020, + 0x38014: 0x6d358220, 0x38015: 0x6d358420, 0x38016: 0x6d358620, 0x38017: 0x6d358820, + 0x38018: 0x6d620620, 0x38019: 0x6d620820, 0x3801a: 0x6d620a20, 0x3801b: 0x6d620c20, + 0x3801c: 0x6d620e20, 0x3801d: 0x6d621020, 0x3801e: 0x6d621220, 0x3801f: 0x6d621420, + 0x38020: 0x6d621620, 0x38021: 0x6d621820, 0x38022: 0x6d621a20, 0x38023: 0x6d621c20, + 0x38024: 0x6d621e20, 0x38025: 0x6d622020, 0x38026: 0x6d622220, 0x38027: 0x6d622420, + 0x38028: 0x6d622620, 0x38029: 0x6d622820, 0x3802a: 0x6d622a20, 0x3802b: 0x6d622c20, + 0x3802c: 0x6d622e20, 0x3802d: 0x6d623020, 0x3802e: 0x6d623220, 0x3802f: 0x6d623420, + 0x38030: 0x6d8c1820, 0x38031: 0x6d8c1a20, 0x38032: 0x6d8c1c20, 0x38033: 0x6d8c1e20, + 0x38034: 0x6d8c2020, 0x38035: 0x6d8c2220, 0x38036: 0x6d8c2420, 0x38037: 0x6d8c2620, + 0x38038: 0x6d8c2820, 0x38039: 0x6d8c2a20, 0x3803a: 0x6d8c2c20, 0x3803b: 0x6d623620, + 0x3803c: 0x6d8c2e20, 0x3803d: 0x6d8c3020, 0x3803e: 0x6d8c3220, 0x3803f: 0x6d8c3420, + // Block 0xe01, offset 0x38040 + 0x38040: 0x6d8c3620, 0x38041: 0x6d8c3820, 0x38042: 0x6d8c3a20, 0x38043: 0x6db05c20, + 0x38044: 0x6db05e20, 0x38045: 0x6db06020, 0x38046: 0x6db06220, 0x38047: 0x6db06420, + 0x38048: 0x6db06620, 0x38049: 0x6db06820, 0x3804a: 0x6db06a20, 0x3804b: 0x6db06c20, + 0x3804c: 0x6db06e20, 0x3804d: 0x6dcfe820, 0x3804e: 0x6dcfea20, 0x3804f: 0x6dcfec20, + 0x38050: 0x6dcfee20, 0x38051: 0x6dcff020, 0x38052: 0x6dcff220, 0x38053: 0x6dcff420, + 0x38054: 0x6dcff620, 0x38055: 0x6dcff820, 0x38056: 0x6dcffa20, 0x38057: 0x6dcffc20, + 0x38058: 0x6dcffe20, 0x38059: 0x6dd00020, 0x3805a: 0x6dd00220, 0x3805b: 0x6dd00420, + 0x3805c: 0x6de9f020, 0x3805d: 0x6de9f220, 0x3805e: 0x6d8c3c20, 0x3805f: 0x6dd00620, + 0x38060: 0x6de9f420, 0x38061: 0x6de9f620, 0x38062: 0x6dffb820, 0x38063: 0x6dffba20, + 0x38064: 0x6dffbc20, 0x38065: 0x6dffbe20, 0x38066: 0x6e122420, 0x38067: 0x6e204c20, + 0x38068: 0x6e122620, 0x38069: 0x6e122820, 0x3806a: 0x6dffc020, 0x3806b: 0x6dffc220, + 0x3806c: 0x6e122a20, 0x3806d: 0x6e204e20, 0x3806e: 0x6e205020, 0x3806f: 0x6e205220, + 0x38070: 0x6e33c620, 0x38071: 0x6c25e020, 0x38072: 0x6c25e220, 0x38073: 0x6c3e3020, + 0x38074: 0x6c3e3220, 0x38075: 0x6c3e3420, 0x38076: 0x6c5d3020, 0x38077: 0x6c5d3220, + 0x38078: 0x6c5d3420, 0x38079: 0x6c5d3620, 0x3807a: 0x6c819420, 0x3807b: 0x6c819620, + 0x3807c: 0x6c819820, 0x3807d: 0x6c819a20, 0x3807e: 0x6c819c20, 0x3807f: 0x6c819e20, + // Block 0xe02, offset 0x38080 + 0x38080: 0x6caab620, 0x38081: 0x6d07aa20, 0x38082: 0x6d358e20, 0x38083: 0x6db07220, + 0x38084: 0x6d623c20, 0x38085: 0x6d623e20, 0x38086: 0x6d8c4220, 0x38087: 0x6d8c4420, + 0x38088: 0x6db07420, 0x38089: 0x6db07620, 0x3808a: 0x6dd00c20, 0x3808b: 0x6e2b4020, + 0x3808c: 0x6e2b4220, 0x3808d: 0x6e3dda20, 0x3808e: 0x6c3e3820, 0x3808f: 0x6c3e3a20, + 0x38090: 0x6c144a20, 0x38091: 0x6c3e3c20, 0x38092: 0x6c81a820, 0x38093: 0x6caab820, + 0x38094: 0x6cd8fa20, 0x38095: 0x6cd8fc20, 0x38096: 0x6d07ae20, 0x38097: 0x6d359220, + 0x38098: 0x6d624220, 0x38099: 0x6d624420, 0x3809a: 0x6d624620, 0x3809b: 0x6d624820, + 0x3809c: 0x6d624a20, 0x3809d: 0x6d8c4620, 0x3809e: 0x6d8c4820, 0x3809f: 0x6db07820, + 0x380a0: 0x6db07a20, 0x380a1: 0x6db07c20, 0x380a2: 0x6e205620, 0x380a3: 0x6e33c820, + 0x380a4: 0x6c144e20, 0x380a5: 0x6c3e4020, 0x380a6: 0x6c3e4220, 0x380a7: 0x6c3e4420, + 0x380a8: 0x6c5d4c20, 0x380a9: 0x6c5d4e20, 0x380aa: 0x6c5d5020, 0x380ab: 0x6c81b420, + 0x380ac: 0x6caac820, 0x380ad: 0x6caaca20, 0x380ae: 0x6caacc20, 0x380af: 0x6cd90020, + 0x380b0: 0x6cd90220, 0x380b1: 0x6cd90420, 0x380b2: 0x6cd90620, 0x380b3: 0x6cd90820, + 0x380b4: 0x6d07b820, 0x380b5: 0x6d07ba20, 0x380b6: 0x6d07bc20, 0x380b7: 0x6d35a420, + 0x380b8: 0x6d35a620, 0x380b9: 0x6d35a820, 0x380ba: 0x6d35aa20, 0x380bb: 0x6d35ac20, + 0x380bc: 0x6d35ae20, 0x380bd: 0x6d35b020, 0x380be: 0x6d35b220, 0x380bf: 0x6d35b420, + // Block 0xe03, offset 0x380c0 + 0x380c0: 0x6d35b620, 0x380c1: 0x6d35b820, 0x380c2: 0x6d625420, 0x380c3: 0x6d625620, + 0x380c4: 0x6d625820, 0x380c5: 0x6d625a20, 0x380c6: 0x6d625c20, 0x380c7: 0x6d625e20, + 0x380c8: 0x6d626020, 0x380c9: 0x6d626220, 0x380ca: 0x6d626420, 0x380cb: 0x6d8c5020, + 0x380cc: 0x6d8c5220, 0x380cd: 0x6d8c5420, 0x380ce: 0x6d8c5620, 0x380cf: 0x6d8c5820, + 0x380d0: 0x6d8c5a20, 0x380d1: 0x6d8c5c20, 0x380d2: 0x6d8c5e20, 0x380d3: 0x6db08820, + 0x380d4: 0x6db08a20, 0x380d5: 0x6db08c20, 0x380d6: 0x6db08e20, 0x380d7: 0x6db09020, + 0x380d8: 0x6db09220, 0x380d9: 0x6db09420, 0x380da: 0x6db09620, 0x380db: 0x6dd01620, + 0x380dc: 0x6dd01820, 0x380dd: 0x6dd01a20, 0x380de: 0x6dd01c20, 0x380df: 0x6de9f820, + 0x380e0: 0x6dd01e20, 0x380e1: 0x6dd02020, 0x380e2: 0x6dd02220, 0x380e3: 0x6dd02420, + 0x380e4: 0x6dd02620, 0x380e5: 0x6de9fa20, 0x380e6: 0x6de9fc20, 0x380e7: 0x6de9fe20, + 0x380e8: 0x6dea0020, 0x380e9: 0x6e123020, 0x380ea: 0x6e123220, 0x380eb: 0x6e33ca20, + 0x380ec: 0x6e33cc20, 0x380ed: 0x6e39aa20, 0x380ee: 0x6c25e820, 0x380ef: 0x6c3e4820, + 0x380f0: 0x6c3e4a20, 0x380f1: 0x6c3e4c20, 0x380f2: 0x6c3e4e20, 0x380f3: 0x6c3e5020, + 0x380f4: 0x6c3e5220, 0x380f5: 0x6c3e5420, 0x380f6: 0x6c3e5620, 0x380f7: 0x6c5d5620, + 0x380f8: 0x6c5d5820, 0x380f9: 0x6c5d5a20, 0x380fa: 0x6c5d5c20, 0x380fb: 0x6c5d5e20, + 0x380fc: 0x6c81d020, 0x380fd: 0x6c81d220, 0x380fe: 0x6c81d420, 0x380ff: 0x6c81d620, + // Block 0xe04, offset 0x38100 + 0x38100: 0x6c81d820, 0x38101: 0x6c81da20, 0x38102: 0x6c81dc20, 0x38103: 0x6c81de20, + 0x38104: 0x6c81e020, 0x38105: 0x6c81e220, 0x38106: 0x6c81e420, 0x38107: 0x6c81e620, + 0x38108: 0x6c81e820, 0x38109: 0x6c81ea20, 0x3810a: 0x6c81ec20, 0x3810b: 0x6c81ee20, + 0x3810c: 0x6c81f020, 0x3810d: 0x6c81f220, 0x3810e: 0x6c81f420, 0x3810f: 0x6c81f620, + 0x38110: 0x6caaea20, 0x38111: 0x6caaec20, 0x38112: 0x6caaee20, 0x38113: 0x6caaf020, + 0x38114: 0x6caaf220, 0x38115: 0x6caaf420, 0x38116: 0x6caaf620, 0x38117: 0x6caaf820, + 0x38118: 0x6caafa20, 0x38119: 0x6caafc20, 0x3811a: 0x6caafe20, 0x3811b: 0x6cab0020, + 0x3811c: 0x6cab0220, 0x3811d: 0x6cab0420, 0x3811e: 0x6cab0620, 0x3811f: 0x6cab0820, + 0x38120: 0x6cd92020, 0x38121: 0x6cd92220, 0x38122: 0x6cd92420, 0x38123: 0x6d07cc20, + 0x38124: 0x6cd92620, 0x38125: 0x6cd92820, 0x38126: 0x6cd92a20, 0x38127: 0x6cd92c20, + 0x38128: 0x6cd92e20, 0x38129: 0x6cd93020, 0x3812a: 0x6cd93220, 0x3812b: 0x6cd93420, + 0x3812c: 0x6cd93620, 0x3812d: 0x6cd93820, 0x3812e: 0x6cd93a20, 0x3812f: 0x6cd93c20, + 0x38130: 0x6cd93e20, 0x38131: 0x6cd94020, 0x38132: 0x6cd94220, 0x38133: 0x6cd94420, + 0x38134: 0x6cd94620, 0x38135: 0x6d07ce20, 0x38136: 0x6d07d020, 0x38137: 0x6d07d220, + 0x38138: 0x6d07d420, 0x38139: 0x6d07d620, 0x3813a: 0x6d07d820, 0x3813b: 0x6d07da20, + 0x3813c: 0x6d07dc20, 0x3813d: 0x6d07de20, 0x3813e: 0x6d07e020, 0x3813f: 0x6d07e220, + // Block 0xe05, offset 0x38140 + 0x38140: 0x6d07e420, 0x38141: 0x6d07e620, 0x38142: 0x6d07e820, 0x38143: 0x6d07ea20, + 0x38144: 0x6d07ec20, 0x38145: 0x6d07ee20, 0x38146: 0x6d07f020, 0x38147: 0x6d07f220, + 0x38148: 0x6d35d820, 0x38149: 0x6d35da20, 0x3814a: 0x6d35dc20, 0x3814b: 0x6d35de20, + 0x3814c: 0x6d35e020, 0x3814d: 0x6d35e220, 0x3814e: 0x6d35e420, 0x3814f: 0x6d35e620, + 0x38150: 0x6d35e820, 0x38151: 0x6d35ea20, 0x38152: 0x6d35ec20, 0x38153: 0x6d35ee20, + 0x38154: 0x6d35f020, 0x38155: 0x6d35f220, 0x38156: 0x6d35f420, 0x38157: 0x6d07f420, + 0x38158: 0x6d35f620, 0x38159: 0x6d35f820, 0x3815a: 0x6d35fa20, 0x3815b: 0x6d35fc20, + 0x3815c: 0x6d35fe20, 0x3815d: 0x6d360020, 0x3815e: 0x6d360220, 0x3815f: 0x6d360420, + 0x38160: 0x6d360620, 0x38161: 0x6d360820, 0x38162: 0x6d627e20, 0x38163: 0x6d628020, + 0x38164: 0x6d628220, 0x38165: 0x6d628420, 0x38166: 0x6d628620, 0x38167: 0x6d628820, + 0x38168: 0x6d628a20, 0x38169: 0x6d628c20, 0x3816a: 0x6d628e20, 0x3816b: 0x6d629020, + 0x3816c: 0x6d629220, 0x3816d: 0x6d629420, 0x3816e: 0x6d629620, 0x3816f: 0x6d629820, + 0x38170: 0x6d629a20, 0x38171: 0x6d629c20, 0x38172: 0x6d629e20, 0x38173: 0x6d62a020, + 0x38174: 0x6d62a220, 0x38175: 0x6d62a420, 0x38176: 0x6d62a620, 0x38177: 0x6d62a820, + 0x38178: 0x6d62aa20, 0x38179: 0x6d62ac20, 0x3817a: 0x6d62ae20, 0x3817b: 0x6d62b020, + 0x3817c: 0x6d8c6c20, 0x3817d: 0x6d8c6e20, 0x3817e: 0x6d8c7020, 0x3817f: 0x6d8c7220, + // Block 0xe06, offset 0x38180 + 0x38180: 0x6d8c7420, 0x38181: 0x6d8c7620, 0x38182: 0x6d8c7820, 0x38183: 0x6d8c7a20, + 0x38184: 0x6d8c7c20, 0x38185: 0x6d8c7e20, 0x38186: 0x6d8c8020, 0x38187: 0x6d62b220, + 0x38188: 0x6d8c8220, 0x38189: 0x6d8c8420, 0x3818a: 0x6d8c8620, 0x3818b: 0x6d8c8820, + 0x3818c: 0x6d8c8a20, 0x3818d: 0x6d8c8c20, 0x3818e: 0x6d8c8e20, 0x3818f: 0x6d8c9020, + 0x38190: 0x6db0aa20, 0x38191: 0x6db0ac20, 0x38192: 0x6db0ae20, 0x38193: 0x6db0b020, + 0x38194: 0x6db0b220, 0x38195: 0x6db0b420, 0x38196: 0x6db0b620, 0x38197: 0x6db0b820, + 0x38198: 0x6db0ba20, 0x38199: 0x6db0bc20, 0x3819a: 0x6db0be20, 0x3819b: 0x6db0c020, + 0x3819c: 0x6db0c220, 0x3819d: 0x6db0c420, 0x3819e: 0x6db0c620, 0x3819f: 0x6dd03220, + 0x381a0: 0x6dd03420, 0x381a1: 0x6dd03620, 0x381a2: 0x6dd03820, 0x381a3: 0x6dd03a20, + 0x381a4: 0x6dd03c20, 0x381a5: 0x6dd03e20, 0x381a6: 0x6dd04020, 0x381a7: 0x6dd04220, + 0x381a8: 0x6dd04420, 0x381a9: 0x6dd04620, 0x381aa: 0x6dd04820, 0x381ab: 0x6dd04a20, + 0x381ac: 0x6dd04c20, 0x381ad: 0x6dd04e20, 0x381ae: 0x6dd05020, 0x381af: 0x6dd05220, + 0x381b0: 0x6dd05420, 0x381b1: 0x6dd05620, 0x381b2: 0x6dd05820, 0x381b3: 0x6dea0420, + 0x381b4: 0x6dea0620, 0x381b5: 0x6dea0820, 0x381b6: 0x6dea0a20, 0x381b7: 0x6dea0c20, + 0x381b8: 0x6dea0e20, 0x381b9: 0x6dea1020, 0x381ba: 0x6dea1220, 0x381bb: 0x6dea1420, + 0x381bc: 0x6dea1620, 0x381bd: 0x6dea1820, 0x381be: 0x6dffd020, 0x381bf: 0x6dffd220, + // Block 0xe07, offset 0x381c0 + 0x381c0: 0x6dffd420, 0x381c1: 0x6dffd620, 0x381c2: 0x6dffd820, 0x381c3: 0x6dffda20, + 0x381c4: 0x6dffdc20, 0x381c5: 0x6e123420, 0x381c6: 0x6e123620, 0x381c7: 0x6e123820, + 0x381c8: 0x6e123a20, 0x381c9: 0x6e123c20, 0x381ca: 0x6e206220, 0x381cb: 0x6e206420, + 0x381cc: 0x6e206620, 0x381cd: 0x6e2b4420, 0x381ce: 0x6e2b4620, 0x381cf: 0x6e33ce20, + 0x381d0: 0x6e39ac20, 0x381d1: 0x6e3ddc20, 0x381d2: 0x6c145420, 0x381d3: 0x6c3e5c20, + 0x381d4: 0x6c5d6020, 0x381d5: 0x6cab0a20, 0x381d6: 0x6cab0c20, 0x381d7: 0x6cab0e20, + 0x381d8: 0x6cd94c20, 0x381d9: 0x6cd94e20, 0x381da: 0x6cd95020, 0x381db: 0x6d080420, + 0x381dc: 0x6d080620, 0x381dd: 0x6d361220, 0x381de: 0x6d361420, 0x381df: 0x6d361620, + 0x381e0: 0x6d62b620, 0x381e1: 0x6d62b820, 0x381e2: 0x6d62ba20, 0x381e3: 0x6d8c9c20, + 0x381e4: 0x6db0ce20, 0x381e5: 0x6db0d020, 0x381e6: 0x6db0d220, 0x381e7: 0x6dea1c20, + 0x381e8: 0x6dffde20, 0x381e9: 0x6c146420, 0x381ea: 0x6c146620, 0x381eb: 0x6c146820, + 0x381ec: 0x6c146a20, 0x381ed: 0x6c146c20, 0x381ee: 0x6c146e20, 0x381ef: 0x6c147020, + 0x381f0: 0x6c147220, 0x381f1: 0x6c147420, 0x381f2: 0x6c147620, 0x381f3: 0x6c147820, + 0x381f4: 0x6c261020, 0x381f5: 0x6c261220, 0x381f6: 0x6c261420, 0x381f7: 0x6c261620, + 0x381f8: 0x6c261820, 0x381f9: 0x6c261a20, 0x381fa: 0x6c261c20, 0x381fb: 0x6c261e20, + 0x381fc: 0x6c262020, 0x381fd: 0x6c262220, 0x381fe: 0x6c262420, 0x381ff: 0x6c3ebe20, + // Block 0xe08, offset 0x38200 + 0x38200: 0x6c3ec020, 0x38201: 0x6c3ec220, 0x38202: 0x6c3ec420, 0x38203: 0x6c3ec620, + 0x38204: 0x6c3ec820, 0x38205: 0x6c3eca20, 0x38206: 0x6c3ecc20, 0x38207: 0x6c3ece20, + 0x38208: 0x6c3ed020, 0x38209: 0x6c3ed220, 0x3820a: 0x6c3ed420, 0x3820b: 0x6c3ed620, + 0x3820c: 0x6c3ed820, 0x3820d: 0x6c3eda20, 0x3820e: 0x6c3edc20, 0x3820f: 0x6c3ede20, + 0x38210: 0x6c3ee020, 0x38211: 0x6c3ee220, 0x38212: 0x6c3ee420, 0x38213: 0x6c3ee620, + 0x38214: 0x6c3ee820, 0x38215: 0x6c3eea20, 0x38216: 0x6c3eec20, 0x38217: 0x6c3eee20, + 0x38218: 0x6c3ef020, 0x38219: 0x6c3ef220, 0x3821a: 0x6c3ef420, 0x3821b: 0x6c3ef620, + 0x3821c: 0x6c3ef820, 0x3821d: 0x6c3efa20, 0x3821e: 0x6c3efc20, 0x3821f: 0x6c3efe20, + 0x38220: 0x6c3f0020, 0x38221: 0x6c3f0220, 0x38222: 0x6c3f0420, 0x38223: 0x6c3f0620, + 0x38224: 0x6c3f0820, 0x38225: 0x6c3f0a20, 0x38226: 0x6c3f0c20, 0x38227: 0x6c3f0e20, + 0x38228: 0x6c3f1020, 0x38229: 0x6c3f1220, 0x3822a: 0x6c5dca20, 0x3822b: 0x6c5dcc20, + 0x3822c: 0x6c5dce20, 0x3822d: 0x6c5dd020, 0x3822e: 0x6c5dd220, 0x3822f: 0x6c5dd420, + 0x38230: 0x6c5dd620, 0x38231: 0x6c5dd820, 0x38232: 0x6c5dda20, 0x38233: 0x6c5ddc20, + 0x38234: 0x6c5dde20, 0x38235: 0x6c5de020, 0x38236: 0x6c5de220, 0x38237: 0x6c5de420, + 0x38238: 0x6c5de620, 0x38239: 0x6c5de820, 0x3823a: 0x6c5dea20, 0x3823b: 0x6c5dec20, + 0x3823c: 0x6c5dee20, 0x3823d: 0x6c5df020, 0x3823e: 0x6c5df220, 0x3823f: 0x6c5df420, + // Block 0xe09, offset 0x38240 + 0x38240: 0x6c5df620, 0x38241: 0x6c5df820, 0x38242: 0x6c5dfa20, 0x38243: 0x6c5dfc20, + 0x38244: 0x6c5dfe20, 0x38245: 0x6c5e0020, 0x38246: 0x6c5e0220, 0x38247: 0x6c5e0420, + 0x38248: 0x6c5e0620, 0x38249: 0x6c5e0820, 0x3824a: 0x6c5e0a20, 0x3824b: 0x6c5e0c20, + 0x3824c: 0x6c5e0e20, 0x3824d: 0x6c5e1020, 0x3824e: 0x6c5e1220, 0x3824f: 0x6c5e1420, + 0x38250: 0x6c5e1620, 0x38251: 0x6c5e1820, 0x38252: 0x6c5e1a20, 0x38253: 0x6c5e1c20, + 0x38254: 0x6c5e1e20, 0x38255: 0x6c5e2020, 0x38256: 0x6c5e2220, 0x38257: 0x6c5e2420, + 0x38258: 0x6c5e2620, 0x38259: 0x6c5e2820, 0x3825a: 0x6c5e2a20, 0x3825b: 0x6c5e2c20, + 0x3825c: 0x6c5e2e20, 0x3825d: 0x6c826020, 0x3825e: 0x6c826220, 0x3825f: 0x6c826420, + 0x38260: 0x6c826620, 0x38261: 0x6c826820, 0x38262: 0x6c826a20, 0x38263: 0x6c826c20, + 0x38264: 0x6c826e20, 0x38265: 0x6c827020, 0x38266: 0x6c827220, 0x38267: 0x6c827420, + 0x38268: 0x6c827620, 0x38269: 0x6c827820, 0x3826a: 0x6c827a20, 0x3826b: 0x6c827c20, + 0x3826c: 0x6c827e20, 0x3826d: 0x6c828020, 0x3826e: 0x6c828220, 0x3826f: 0x6c828420, + 0x38270: 0x6c828620, 0x38271: 0x6c828820, 0x38272: 0x6c828a20, 0x38273: 0x6c828c20, + 0x38274: 0x6c828e20, 0x38275: 0x6c829020, 0x38276: 0x6c829220, 0x38277: 0x6c829420, + 0x38278: 0x6c829620, 0x38279: 0x6c829820, 0x3827a: 0x6c829a20, 0x3827b: 0x6c829c20, + 0x3827c: 0x6c829e20, 0x3827d: 0x6c82a020, 0x3827e: 0x6c82a220, 0x3827f: 0x6c82a420, + // Block 0xe0a, offset 0x38280 + 0x38280: 0x6c82a620, 0x38281: 0x6c82a820, 0x38282: 0x6c82aa20, 0x38283: 0x6c82ac20, + 0x38284: 0x6c82ae20, 0x38285: 0x6c82b020, 0x38286: 0x6c82b220, 0x38287: 0x6c82b420, + 0x38288: 0x6c82b620, 0x38289: 0x6c82b820, 0x3828a: 0x6c82ba20, 0x3828b: 0x6c82bc20, + 0x3828c: 0x6c82be20, 0x3828d: 0x6c82c020, 0x3828e: 0x6c82c220, 0x3828f: 0x6c82c420, + 0x38290: 0x6c82c620, 0x38291: 0x6c82c820, 0x38292: 0x6c82ca20, 0x38293: 0x6c82cc20, + 0x38294: 0x6cab7220, 0x38295: 0x6cab7420, 0x38296: 0x6cab7620, 0x38297: 0x6cab7820, + 0x38298: 0x6cab7a20, 0x38299: 0x6cab7c20, 0x3829a: 0x6cab7e20, 0x3829b: 0x6cab8020, + 0x3829c: 0x6cab8220, 0x3829d: 0x6cab8420, 0x3829e: 0x6cab8620, 0x3829f: 0x6cab8820, + 0x382a0: 0x6cab8a20, 0x382a1: 0x6cab8c20, 0x382a2: 0x6cab8e20, 0x382a3: 0x6cab9020, + 0x382a4: 0x6cab9220, 0x382a5: 0x6cab9420, 0x382a6: 0x6cab9620, 0x382a7: 0x6cab9820, + 0x382a8: 0x6cab9a20, 0x382a9: 0x6cab9c20, 0x382aa: 0x6cab9e20, 0x382ab: 0x6caba020, + 0x382ac: 0x6caba220, 0x382ad: 0x6caba420, 0x382ae: 0x6caba620, 0x382af: 0x6caba820, + 0x382b0: 0x6cabaa20, 0x382b1: 0x6cabac20, 0x382b2: 0x6cabae20, 0x382b3: 0x6cabb020, + 0x382b4: 0x6cabb220, 0x382b5: 0x6cabb420, 0x382b6: 0x6cabb620, 0x382b7: 0x6cabb820, + 0x382b8: 0x6cabba20, 0x382b9: 0x6cabbc20, 0x382ba: 0x6cabbe20, 0x382bb: 0x6cabc020, + 0x382bc: 0x6cabc220, 0x382bd: 0x6cabc420, 0x382be: 0x6cabc620, 0x382bf: 0x6cabc820, + // Block 0xe0b, offset 0x382c0 + 0x382c0: 0x6cabca20, 0x382c1: 0x6cabcc20, 0x382c2: 0x6cabce20, 0x382c3: 0x6cabd020, + 0x382c4: 0x6cabd220, 0x382c5: 0x6cabd420, 0x382c6: 0x6cd9c020, 0x382c7: 0x6cd9c220, + 0x382c8: 0x6cd9c420, 0x382c9: 0x6cd9c620, 0x382ca: 0x6cd9c820, 0x382cb: 0x6cd9ca20, + 0x382cc: 0x6cd9cc20, 0x382cd: 0x6cd9ce20, 0x382ce: 0x6cd9d020, 0x382cf: 0x6cd9d220, + 0x382d0: 0x6cd9d420, 0x382d1: 0x6cd9d620, 0x382d2: 0x6cd9d820, 0x382d3: 0x6cd9da20, + 0x382d4: 0x6cd9dc20, 0x382d5: 0x6cd9de20, 0x382d6: 0x6cd9e020, 0x382d7: 0x6cd9e220, + 0x382d8: 0x6cd9e420, 0x382d9: 0x6cd9e620, 0x382da: 0x6cd9e820, 0x382db: 0x6cd9ea20, + 0x382dc: 0x6cd9ec20, 0x382dd: 0x6cd9ee20, 0x382de: 0x6cd9f020, 0x382df: 0x6cd9f220, + 0x382e0: 0x6cd9f420, 0x382e1: 0x6cd9f620, 0x382e2: 0x6cd9f820, 0x382e3: 0x6cd9fa20, + 0x382e4: 0x6cd9fc20, 0x382e5: 0x6cd9fe20, 0x382e6: 0x6cda0020, 0x382e7: 0x6cda0220, + 0x382e8: 0x6cda0420, 0x382e9: 0x6cda0620, 0x382ea: 0x6cda0820, 0x382eb: 0x6cda0a20, + 0x382ec: 0x6cda0c20, 0x382ed: 0x6cda0e20, 0x382ee: 0x6cda1020, 0x382ef: 0x6cda1220, + 0x382f0: 0x6cda1420, 0x382f1: 0x6cda1620, 0x382f2: 0x6cda1820, 0x382f3: 0x6cc87c20, + 0x382f4: 0x6cda1a20, 0x382f5: 0x6cda1c20, 0x382f6: 0x6cda1e20, 0x382f7: 0x6cda2020, + 0x382f8: 0x6cda2220, 0x382f9: 0x6cda2420, 0x382fa: 0x6cda2620, 0x382fb: 0x6cda2820, + 0x382fc: 0x6cda2a20, 0x382fd: 0x6cda2c20, 0x382fe: 0x6cda2e20, 0x382ff: 0x6cda3020, + // Block 0xe0c, offset 0x38300 + 0x38300: 0x6cda3220, 0x38301: 0x6cda3420, 0x38302: 0x6cda3620, 0x38303: 0x6cda3820, + 0x38304: 0x6cda3a20, 0x38305: 0x6cda3c20, 0x38306: 0x6cda3e20, 0x38307: 0x6cda4020, + 0x38308: 0x6cda4220, 0x38309: 0x6cda4420, 0x3830a: 0x6cda4620, 0x3830b: 0x6cda4820, + 0x3830c: 0x6cda4a20, 0x3830d: 0x6cda4c20, 0x3830e: 0x6cda4e20, 0x3830f: 0x6cda5020, + 0x38310: 0x6cda5220, 0x38311: 0x6cda5420, 0x38312: 0x6cda5620, 0x38313: 0x6cda5820, + 0x38314: 0x6cda5a20, 0x38315: 0x6cda5c20, 0x38316: 0x6cda5e20, 0x38317: 0x6cda6020, + 0x38318: 0x6cda6220, 0x38319: 0x6cda6420, 0x3831a: 0x6d087020, 0x3831b: 0x6d087220, + 0x3831c: 0x6d087420, 0x3831d: 0x6d087620, 0x3831e: 0x6d087820, 0x3831f: 0x6d087a20, + 0x38320: 0x6d087c20, 0x38321: 0x6d087e20, 0x38322: 0x6d088020, 0x38323: 0x6d088220, + 0x38324: 0x6d088420, 0x38325: 0x6d088620, 0x38326: 0x6d088820, 0x38327: 0x6d088a20, + 0x38328: 0x6d088c20, 0x38329: 0x6d088e20, 0x3832a: 0x6d089020, 0x3832b: 0x6d089220, + 0x3832c: 0x6d089420, 0x3832d: 0x6d089620, 0x3832e: 0x6d089820, 0x3832f: 0x6d089a20, + 0x38330: 0x6d089c20, 0x38331: 0x6d089e20, 0x38332: 0x6d08a020, 0x38333: 0x6d08a220, + 0x38334: 0x6d08a420, 0x38335: 0x6d08a620, 0x38336: 0x6d08a820, 0x38337: 0x6d08aa20, + 0x38338: 0x6d08ac20, 0x38339: 0x6d08ae20, 0x3833a: 0x6d08b020, 0x3833b: 0x6d08b220, + 0x3833c: 0x6d08b420, 0x3833d: 0x6d08b620, 0x3833e: 0x6d08b820, 0x3833f: 0x6d08ba20, + // Block 0xe0d, offset 0x38340 + 0x38340: 0x6d08bc20, 0x38341: 0x6d08be20, 0x38342: 0x6d08c020, 0x38343: 0x6d08c220, + 0x38344: 0x6d08c420, 0x38345: 0x6d08c620, 0x38346: 0x6d08c820, 0x38347: 0x6d08ca20, + 0x38348: 0x6d08cc20, 0x38349: 0x6d08ce20, 0x3834a: 0x6d08d020, 0x3834b: 0x6d08d220, + 0x3834c: 0x6d08d420, 0x3834d: 0x6d08d620, 0x3834e: 0x6d08d820, 0x3834f: 0x6d08da20, + 0x38350: 0x6d08dc20, 0x38351: 0x6d08de20, 0x38352: 0x6d08e020, 0x38353: 0x6d08e220, + 0x38354: 0x6d08e420, 0x38355: 0x6d08e620, 0x38356: 0x6d08e820, 0x38357: 0x6d08ea20, + 0x38358: 0x6d08ec20, 0x38359: 0x6d365c20, 0x3835a: 0x6d365e20, 0x3835b: 0x6d366020, + 0x3835c: 0x6d366220, 0x3835d: 0x6d366420, 0x3835e: 0x6d366620, 0x3835f: 0x6d366820, + 0x38360: 0x6d366a20, 0x38361: 0x6d366c20, 0x38362: 0x6d366e20, 0x38363: 0x6d367020, + 0x38364: 0x6d367220, 0x38365: 0x6d367420, 0x38366: 0x6d367620, 0x38367: 0x6d367820, + 0x38368: 0x6d367a20, 0x38369: 0x6d367c20, 0x3836a: 0x6d367e20, 0x3836b: 0x6d368020, + 0x3836c: 0x6d368220, 0x3836d: 0x6d368420, 0x3836e: 0x6d368620, 0x3836f: 0x6d368820, + 0x38370: 0x6d368a20, 0x38371: 0x6d368c20, 0x38372: 0x6d368e20, 0x38373: 0x6d369020, + 0x38374: 0x6d369220, 0x38375: 0x6d369420, 0x38376: 0x6d369620, 0x38377: 0x6d369820, + 0x38378: 0x6d369a20, 0x38379: 0x6d369c20, 0x3837a: 0x6d369e20, 0x3837b: 0x6d36a020, + 0x3837c: 0x6d36a220, 0x3837d: 0x6d36a420, 0x3837e: 0x6d36a620, 0x3837f: 0x6d36a820, + // Block 0xe0e, offset 0x38380 + 0x38380: 0x6d36aa20, 0x38381: 0x6d36ac20, 0x38382: 0x6d36ae20, 0x38383: 0x6d36b020, + 0x38384: 0x6d36b220, 0x38385: 0x6d36b420, 0x38386: 0x6d36b620, 0x38387: 0x6d36b820, + 0x38388: 0x6d36ba20, 0x38389: 0x6d36bc20, 0x3838a: 0x6d36be20, 0x3838b: 0x6d36c020, + 0x3838c: 0x6d36c220, 0x3838d: 0x6d36c420, 0x3838e: 0x6d36c620, 0x3838f: 0x6d36c820, + 0x38390: 0x6d36ca20, 0x38391: 0x6d36cc20, 0x38392: 0x6d36ce20, 0x38393: 0x6d08ee20, + 0x38394: 0x6d08f020, 0x38395: 0x6d36d020, 0x38396: 0x6d36d220, 0x38397: 0x6d36d420, + 0x38398: 0x6d62f420, 0x38399: 0x6d62f620, 0x3839a: 0x6d62f820, 0x3839b: 0x6d62fa20, + 0x3839c: 0x6d62fc20, 0x3839d: 0x6d62fe20, 0x3839e: 0x6d630020, 0x3839f: 0x6d630220, + 0x383a0: 0x6d630420, 0x383a1: 0x6d630620, 0x383a2: 0x6d630820, 0x383a3: 0x6d630a20, + 0x383a4: 0x6d630c20, 0x383a5: 0x6d630e20, 0x383a6: 0x6d631020, 0x383a7: 0x6d631220, + 0x383a8: 0x6d631420, 0x383a9: 0x6d631620, 0x383aa: 0x6d631820, 0x383ab: 0x6d631a20, + 0x383ac: 0x6d631c20, 0x383ad: 0x6d631e20, 0x383ae: 0x6d632020, 0x383af: 0x6d632220, + 0x383b0: 0x6d632420, 0x383b1: 0x6d632620, 0x383b2: 0x6d632820, 0x383b3: 0x6d632a20, + 0x383b4: 0x6d632c20, 0x383b5: 0x6d632e20, 0x383b6: 0x6d633020, 0x383b7: 0x6d633220, + 0x383b8: 0x6d633420, 0x383b9: 0x6d633620, 0x383ba: 0x6d633820, 0x383bb: 0x6d633a20, + 0x383bc: 0x6d633c20, 0x383bd: 0x6d633e20, 0x383be: 0x6d634020, 0x383bf: 0x6d634220, + // Block 0xe0f, offset 0x383c0 + 0x383c0: 0x6d634420, 0x383c1: 0x6d634620, 0x383c2: 0x6d634820, 0x383c3: 0x6d8cd620, + 0x383c4: 0x6d8cd820, 0x383c5: 0x6d8cda20, 0x383c6: 0x6d8cdc20, 0x383c7: 0x6d8cde20, + 0x383c8: 0x6d8ce020, 0x383c9: 0x6d8ce220, 0x383ca: 0x6d8ce420, 0x383cb: 0x6d8ce620, + 0x383cc: 0x6d8ce820, 0x383cd: 0x6d8cea20, 0x383ce: 0x6d8cec20, 0x383cf: 0x6d8cee20, + 0x383d0: 0x6d8cf020, 0x383d1: 0x6d8cf220, 0x383d2: 0x6d8cf420, 0x383d3: 0x6d8cf620, + 0x383d4: 0x6d8cf820, 0x383d5: 0x6d8cfa20, 0x383d6: 0x6d8cfc20, 0x383d7: 0x6d8cfe20, + 0x383d8: 0x6d8d0020, 0x383d9: 0x6d8d0220, 0x383da: 0x6d8d0420, 0x383db: 0x6d8d0620, + 0x383dc: 0x6d8d0820, 0x383dd: 0x6d8d0a20, 0x383de: 0x6d8d0c20, 0x383df: 0x6d8d0e20, + 0x383e0: 0x6d8d1020, 0x383e1: 0x6d8d1220, 0x383e2: 0x6d8d1420, 0x383e3: 0x6d8d1620, + 0x383e4: 0x6d8d1820, 0x383e5: 0x6d8d1a20, 0x383e6: 0x6d8d1c20, 0x383e7: 0x6d8d1e20, + 0x383e8: 0x6d8d2020, 0x383e9: 0x6d8d2220, 0x383ea: 0x6d8d2420, 0x383eb: 0x6d8d2620, + 0x383ec: 0x6d8d2820, 0x383ed: 0x6d8d2a20, 0x383ee: 0x6d8d2c20, 0x383ef: 0x6d8d2e20, + 0x383f0: 0x6d8d3020, 0x383f1: 0x6d8d3220, 0x383f2: 0x6d8d3420, 0x383f3: 0x6d8d3620, + 0x383f4: 0x6d8d3820, 0x383f5: 0x6d8d3a20, 0x383f6: 0x6d8d3c20, 0x383f7: 0x6d8d3e20, + 0x383f8: 0x6d8d4020, 0x383f9: 0x6d8d4220, 0x383fa: 0x6d8d4420, 0x383fb: 0x6d8d4620, + 0x383fc: 0x6d8d4820, 0x383fd: 0x6d8d4a20, 0x383fe: 0x6db10420, 0x383ff: 0x6db10620, + // Block 0xe10, offset 0x38400 + 0x38400: 0x6db10820, 0x38401: 0x6db10a20, 0x38402: 0x6db10c20, 0x38403: 0x6db10e20, + 0x38404: 0x6d8d4c20, 0x38405: 0x6db11020, 0x38406: 0x6db11220, 0x38407: 0x6db11420, + 0x38408: 0x6db11620, 0x38409: 0x6db11820, 0x3840a: 0x6db11a20, 0x3840b: 0x6db11c20, + 0x3840c: 0x6db11e20, 0x3840d: 0x6db12020, 0x3840e: 0x6dd07620, 0x3840f: 0x6db12220, + 0x38410: 0x6db12420, 0x38411: 0x6db12620, 0x38412: 0x6db12820, 0x38413: 0x6db12a20, + 0x38414: 0x6db12c20, 0x38415: 0x6db12e20, 0x38416: 0x6da5c020, 0x38417: 0x6d7c7a20, + 0x38418: 0x6db13020, 0x38419: 0x6db13220, 0x3841a: 0x6db13420, 0x3841b: 0x6db13620, + 0x3841c: 0x6db13820, 0x3841d: 0x6db13a20, 0x3841e: 0x6db13c20, 0x3841f: 0x6db13e20, + 0x38420: 0x6db14020, 0x38421: 0x6db14220, 0x38422: 0x6db14420, 0x38423: 0x6db14620, + 0x38424: 0x6db14820, 0x38425: 0x6db14a20, 0x38426: 0x6db14c20, 0x38427: 0x6db14e20, + 0x38428: 0x6db15020, 0x38429: 0x6db15220, 0x3842a: 0x6db15420, 0x3842b: 0x6db15620, + 0x3842c: 0x6db15820, 0x3842d: 0x6db15a20, 0x3842e: 0x6d8d4e20, 0x3842f: 0x6db15c20, + 0x38430: 0x6dd07820, 0x38431: 0x6dd07a20, 0x38432: 0x6dd07c20, 0x38433: 0x6dd07e20, + 0x38434: 0x6dd08020, 0x38435: 0x6dd08220, 0x38436: 0x6dd08420, 0x38437: 0x6dd08620, + 0x38438: 0x6dd08820, 0x38439: 0x6dd08a20, 0x3843a: 0x6dd08c20, 0x3843b: 0x6dd08e20, + 0x3843c: 0x6dd09020, 0x3843d: 0x6dd09220, 0x3843e: 0x6dd09420, 0x3843f: 0x6dd09620, + // Block 0xe11, offset 0x38440 + 0x38440: 0x6dd09820, 0x38441: 0x6dd09a20, 0x38442: 0x6dd09c20, 0x38443: 0x6dd09e20, + 0x38444: 0x6dd0a020, 0x38445: 0x6dd0a220, 0x38446: 0x6dd0a420, 0x38447: 0x6dd0a620, + 0x38448: 0x6dd0a820, 0x38449: 0x6dd0aa20, 0x3844a: 0x6dea2e20, 0x3844b: 0x6dea3020, + 0x3844c: 0x6dea3220, 0x3844d: 0x6dea3420, 0x3844e: 0x6dea3620, 0x3844f: 0x6dea3820, + 0x38450: 0x6dea3a20, 0x38451: 0x6dea3c20, 0x38452: 0x6dea3e20, 0x38453: 0x6dea4020, + 0x38454: 0x6dea4220, 0x38455: 0x6dea4420, 0x38456: 0x6dea4620, 0x38457: 0x6dea4820, + 0x38458: 0x6dea4a20, 0x38459: 0x6dea4c20, 0x3845a: 0x6dea4e20, 0x3845b: 0x6dea5020, + 0x3845c: 0x6dea5220, 0x3845d: 0x6dea5420, 0x3845e: 0x6dea5620, 0x3845f: 0x6dea5820, + 0x38460: 0x6dea5a20, 0x38461: 0x6dea5c20, 0x38462: 0x6dea5e20, 0x38463: 0x6dea6020, + 0x38464: 0x6dea6220, 0x38465: 0x6dffee20, 0x38466: 0x6dfff020, 0x38467: 0x6dfff220, + 0x38468: 0x6dfff420, 0x38469: 0x6dfff620, 0x3846a: 0x6dfff820, 0x3846b: 0x6dfffa20, + 0x3846c: 0x6dfffc20, 0x3846d: 0x6dfffe20, 0x3846e: 0x6e000020, 0x3846f: 0x6e000220, + 0x38470: 0x6e000420, 0x38471: 0x6e000620, 0x38472: 0x6e000820, 0x38473: 0x6e000a20, + 0x38474: 0x6e000c20, 0x38475: 0x6e000e20, 0x38476: 0x6e001020, 0x38477: 0x6e001220, + 0x38478: 0x6e124a20, 0x38479: 0x6e124c20, 0x3847a: 0x6e124e20, 0x3847b: 0x6e125020, + 0x3847c: 0x6e125220, 0x3847d: 0x6e125420, 0x3847e: 0x6e125620, 0x3847f: 0x6e206e20, + // Block 0xe12, offset 0x38480 + 0x38480: 0x6e207020, 0x38481: 0x6e207220, 0x38482: 0x6e207420, 0x38483: 0x6e207620, + 0x38484: 0x6e207820, 0x38485: 0x6e207a20, 0x38486: 0x6e2b4c20, 0x38487: 0x6e2b4e20, + 0x38488: 0x6e2b5020, 0x38489: 0x6e2b5220, 0x3848a: 0x6e2b5420, 0x3848b: 0x6e2b5620, + 0x3848c: 0x6e2b5820, 0x3848d: 0x6e2b5a20, 0x3848e: 0x6e2b5c20, 0x3848f: 0x6e2b5e20, + 0x38490: 0x6e2b6020, 0x38491: 0x6e33d020, 0x38492: 0x6e33d220, 0x38493: 0x6e33d420, + 0x38494: 0x6e33d620, 0x38495: 0x6e33d820, 0x38496: 0x6e39b220, 0x38497: 0x6e39b420, + 0x38498: 0x6e3dde20, 0x38499: 0x6e3de020, 0x3849a: 0x6e3de220, 0x3849b: 0x6e40be20, + 0x3849c: 0x6e42ec20, 0x3849d: 0x6c262620, 0x3849e: 0x6c147c20, 0x3849f: 0x6c5e3820, + 0x384a0: 0x6c82d220, 0x384a1: 0x6c82d420, 0x384a2: 0x6c82d620, 0x384a3: 0x6c82d820, + 0x384a4: 0x6cabde20, 0x384a5: 0x6cabe020, 0x384a6: 0x6cda7220, 0x384a7: 0x6cda7420, + 0x384a8: 0x6cda7620, 0x384a9: 0x6cda7820, 0x384aa: 0x6d8d5c20, 0x384ab: 0x6d36e620, + 0x384ac: 0x6d36e820, 0x384ad: 0x6d635620, 0x384ae: 0x6d36ea20, 0x384af: 0x6d635820, + 0x384b0: 0x6db16820, 0x384b1: 0x6db16a20, 0x384b2: 0x6dd0b220, 0x384b3: 0x6dd0b420, + 0x384b4: 0x6e125a20, 0x384b5: 0x6e125c20, 0x384b6: 0x6e207e20, 0x384b7: 0x6e445e20, + 0x384b8: 0x6e45ce20, 0x384b9: 0x6c148020, 0x384ba: 0x6c262a20, 0x384bb: 0x6c262c20, + 0x384bc: 0x6c262e20, 0x384bd: 0x6c3f1e20, 0x384be: 0x6c5e3a20, 0x384bf: 0x6c5e3c20, + // Block 0xe13, offset 0x384c0 + 0x384c0: 0x6c5e3e20, 0x384c1: 0x6c82e020, 0x384c2: 0x6c82e220, 0x384c3: 0x6c82e420, + 0x384c4: 0x6c82e620, 0x384c5: 0x6c82e820, 0x384c6: 0x6c82ea20, 0x384c7: 0x6c82ec20, + 0x384c8: 0x6c82ee20, 0x384c9: 0x6c82f020, 0x384ca: 0x6c82f220, 0x384cb: 0x6c82f420, + 0x384cc: 0x6cabe220, 0x384cd: 0x6cabe420, 0x384ce: 0x6cabe620, 0x384cf: 0x6cabe820, + 0x384d0: 0x6cda8220, 0x384d1: 0x6cda8420, 0x384d2: 0x6cda8620, 0x384d3: 0x6cda8820, + 0x384d4: 0x6d08fa20, 0x384d5: 0x6d36ee20, 0x384d6: 0x6d36f020, 0x384d7: 0x6d36f220, + 0x384d8: 0x6d635c20, 0x384d9: 0x6d635e20, 0x384da: 0x6d636020, 0x384db: 0x6d636220, + 0x384dc: 0x6d636420, 0x384dd: 0x6d636620, 0x384de: 0x6d8d6020, 0x384df: 0x6d8d6220, + 0x384e0: 0x6d8d6420, 0x384e1: 0x6db16c20, 0x384e2: 0x6db16e20, 0x384e3: 0x6db17020, + 0x384e4: 0x6db17220, 0x384e5: 0x6dd0b820, 0x384e6: 0x6dea6820, 0x384e7: 0x6dea6a20, + 0x384e8: 0x6dea6c20, 0x384e9: 0x6dea6e20, 0x384ea: 0x6dea7020, 0x384eb: 0x6e001620, + 0x384ec: 0x6e001820, 0x384ed: 0x6e001a20, 0x384ee: 0x6e001c20, 0x384ef: 0x6e125e20, + 0x384f0: 0x6e126020, 0x384f1: 0x6e33da20, 0x384f2: 0x6e3de420, 0x384f3: 0x6c148420, + 0x384f4: 0x6c148620, 0x384f5: 0x6c3f2020, 0x384f6: 0x6c5e4420, 0x384f7: 0x6c5e4620, + 0x384f8: 0x6c5e4820, 0x384f9: 0x6c82f620, 0x384fa: 0x6c82f820, 0x384fb: 0x6cabea20, + 0x384fc: 0x6cabec20, 0x384fd: 0x6cabee20, 0x384fe: 0x6cabf020, 0x384ff: 0x6cda9420, + // Block 0xe14, offset 0x38500 + 0x38500: 0x6cda9620, 0x38501: 0x6d08fe20, 0x38502: 0x6d36f620, 0x38503: 0x6d36f820, + 0x38504: 0x6d36fa20, 0x38505: 0x6d636a20, 0x38506: 0x6d636c20, 0x38507: 0x6d636e20, + 0x38508: 0x6d1dd820, 0x38509: 0x6d8d6820, 0x3850a: 0x6d8d6a20, 0x3850b: 0x6d8d6c20, + 0x3850c: 0x6d8d6e20, 0x3850d: 0x6d8d7020, 0x3850e: 0x6db17420, 0x3850f: 0x6dd0bc20, + 0x38510: 0x6dd0be20, 0x38511: 0x6c148a20, 0x38512: 0x6c148c20, 0x38513: 0x6c148e20, + 0x38514: 0x6c263020, 0x38515: 0x6c3f2620, 0x38516: 0x6c3f2820, 0x38517: 0x6c5e4c20, + 0x38518: 0x6c5e4e20, 0x38519: 0x6c3f2a20, 0x3851a: 0x6c5e5020, 0x3851b: 0x6c5e5220, + 0x3851c: 0x6c5e5420, 0x3851d: 0x6c830020, 0x3851e: 0x6c830220, 0x3851f: 0x6c830420, + 0x38520: 0x6c830620, 0x38521: 0x6c830820, 0x38522: 0x6c830a20, 0x38523: 0x6c830c20, + 0x38524: 0x6c830e20, 0x38525: 0x6cabf620, 0x38526: 0x6cabf820, 0x38527: 0x6c5e5620, + 0x38528: 0x6cabfa20, 0x38529: 0x6cabfc20, 0x3852a: 0x6cabfe20, 0x3852b: 0x6cac0020, + 0x3852c: 0x6cac0220, 0x3852d: 0x6cda9e20, 0x3852e: 0x6cdaa020, 0x3852f: 0x6cdaa220, + 0x38530: 0x6cdaa420, 0x38531: 0x6cdaa620, 0x38532: 0x6cdaa820, 0x38533: 0x6d090420, + 0x38534: 0x6d090620, 0x38535: 0x6d090820, 0x38536: 0x6d090a20, 0x38537: 0x6d090c20, + 0x38538: 0x6d090e20, 0x38539: 0x6d091020, 0x3853a: 0x6d091220, 0x3853b: 0x6d370420, + 0x3853c: 0x6d370620, 0x3853d: 0x6d370820, 0x3853e: 0x6d370a20, 0x3853f: 0x6d370c20, + // Block 0xe15, offset 0x38540 + 0x38540: 0x6d370e20, 0x38541: 0x6d371020, 0x38542: 0x6d371220, 0x38543: 0x6d371420, + 0x38544: 0x6d371620, 0x38545: 0x6d637220, 0x38546: 0x6d637420, 0x38547: 0x6d637620, + 0x38548: 0x6d637820, 0x38549: 0x6d637a20, 0x3854a: 0x6d637c20, 0x3854b: 0x6d637e20, + 0x3854c: 0x6d638020, 0x3854d: 0x6d638220, 0x3854e: 0x6d638420, 0x3854f: 0x6d8d7a20, + 0x38550: 0x6d8d7c20, 0x38551: 0x6d8d7e20, 0x38552: 0x6d8d8020, 0x38553: 0x6d8d8220, + 0x38554: 0x6d5dd620, 0x38555: 0x6d8d8420, 0x38556: 0x6d8d8620, 0x38557: 0x6d8d8820, + 0x38558: 0x6db17620, 0x38559: 0x6db17820, 0x3855a: 0x6db17a20, 0x3855b: 0x6db17c20, + 0x3855c: 0x6db17e20, 0x3855d: 0x6db18020, 0x3855e: 0x6db18220, 0x3855f: 0x6db18420, + 0x38560: 0x6db18620, 0x38561: 0x6dd0c220, 0x38562: 0x6dd0c420, 0x38563: 0x6dd0c620, + 0x38564: 0x6dd0c820, 0x38565: 0x6dd0ca20, 0x38566: 0x6dd0cc20, 0x38567: 0x6dd0ce20, + 0x38568: 0x6dca2e20, 0x38569: 0x6dea7620, 0x3856a: 0x6dea7820, 0x3856b: 0x6dea7a20, + 0x3856c: 0x6dea7c20, 0x3856d: 0x6e002020, 0x3856e: 0x6e002220, 0x3856f: 0x6dea7e20, + 0x38570: 0x6e002420, 0x38571: 0x6e002620, 0x38572: 0x6e002820, 0x38573: 0x6e002a20, + 0x38574: 0x6e002c20, 0x38575: 0x6e002e20, 0x38576: 0x6e126220, 0x38577: 0x6e126420, + 0x38578: 0x6e126620, 0x38579: 0x6e208020, 0x3857a: 0x6e2b6420, 0x3857b: 0x6e2b6620, + 0x3857c: 0x6e33de20, 0x3857d: 0x6e39b620, 0x3857e: 0x6e39b820, 0x3857f: 0x6e39ba20, + // Block 0xe16, offset 0x38580 + 0x38580: 0x6e3de820, 0x38581: 0x6e40c020, 0x38582: 0x6e40c220, 0x38583: 0x6e454420, + 0x38584: 0x6e472c20, 0x38585: 0x6e473620, 0x38586: 0x6c263220, 0x38587: 0x6c5e5820, + 0x38588: 0x6c831620, 0x38589: 0x6c831820, 0x3858a: 0x6c831a20, 0x3858b: 0x6c831c20, + 0x3858c: 0x6c831e20, 0x3858d: 0x6c832020, 0x3858e: 0x6c832220, 0x3858f: 0x6c832420, + 0x38590: 0x6c832620, 0x38591: 0x6cac0820, 0x38592: 0x6cac0a20, 0x38593: 0x6cac0c20, + 0x38594: 0x6cac0e20, 0x38595: 0x6cdaae20, 0x38596: 0x6cdab020, 0x38597: 0x6cdab220, + 0x38598: 0x6cdab420, 0x38599: 0x6cdab620, 0x3859a: 0x6cdab820, 0x3859b: 0x6cdaba20, + 0x3859c: 0x6cdabc20, 0x3859d: 0x6d091420, 0x3859e: 0x6d091620, 0x3859f: 0x6d371e20, + 0x385a0: 0x6d372020, 0x385a1: 0x6d372220, 0x385a2: 0x6d372420, 0x385a3: 0x6d372620, + 0x385a4: 0x6d372820, 0x385a5: 0x6d372a20, 0x385a6: 0x6d372c20, 0x385a7: 0x6d638c20, + 0x385a8: 0x6d638e20, 0x385a9: 0x6d639020, 0x385aa: 0x6d639220, 0x385ab: 0x6d639420, + 0x385ac: 0x6d639620, 0x385ad: 0x6d8d8c20, 0x385ae: 0x6d8d8e20, 0x385af: 0x6d8d9020, + 0x385b0: 0x6d8d9220, 0x385b1: 0x6db18820, 0x385b2: 0x6db18a20, 0x385b3: 0x6db18c20, + 0x385b4: 0x6dd0d420, 0x385b5: 0x6dd0d620, 0x385b6: 0x6dd0d820, 0x385b7: 0x6dea8220, + 0x385b8: 0x6e003020, 0x385b9: 0x6e126820, 0x385ba: 0x6e208220, 0x385bb: 0x6e2b6820, + 0x385bc: 0x6e2b6a20, 0x385bd: 0x6e3dec20, 0x385be: 0x6d639820, 0x385bf: 0x6d639a20, + // Block 0xe17, offset 0x385c0 + 0x385c0: 0x6dd0da20, 0x385c1: 0x6e003220, 0x385c2: 0x6e2b6c20, 0x385c3: 0x6e208620, + 0x385c4: 0x6e33e020, 0x385c5: 0x6e39bc20, 0x385c6: 0x6e40c420, 0x385c7: 0x6c263420, + 0x385c8: 0x6c3f3820, 0x385c9: 0x6c3f3a20, 0x385ca: 0x6c3f3c20, 0x385cb: 0x6c3f3e20, + 0x385cc: 0x6c3f4020, 0x385cd: 0x6c3f4220, 0x385ce: 0x6c5e6820, 0x385cf: 0x6c5e6a20, + 0x385d0: 0x6c5e6c20, 0x385d1: 0x6c5e6e20, 0x385d2: 0x6c5e7020, 0x385d3: 0x6c5e7220, + 0x385d4: 0x6c5e7420, 0x385d5: 0x6c834620, 0x385d6: 0x6c834820, 0x385d7: 0x6c834a20, + 0x385d8: 0x6c834c20, 0x385d9: 0x6c834e20, 0x385da: 0x6c835020, 0x385db: 0x6c835220, + 0x385dc: 0x6c835420, 0x385dd: 0x6c835620, 0x385de: 0x6c835820, 0x385df: 0x6c835a20, + 0x385e0: 0x6c835c20, 0x385e1: 0x6cac2c20, 0x385e2: 0x6cac2e20, 0x385e3: 0x6cac3020, + 0x385e4: 0x6cac3220, 0x385e5: 0x6cac3420, 0x385e6: 0x6cac3620, 0x385e7: 0x6cac3820, + 0x385e8: 0x6cac3a20, 0x385e9: 0x6cac3c20, 0x385ea: 0x6cac3e20, 0x385eb: 0x6cac4020, + 0x385ec: 0x6cac4220, 0x385ed: 0x6cac4420, 0x385ee: 0x6cac4620, 0x385ef: 0x6cdad220, + 0x385f0: 0x6cdad420, 0x385f1: 0x6cdad620, 0x385f2: 0x6cdad820, 0x385f3: 0x6d093620, + 0x385f4: 0x6cdada20, 0x385f5: 0x6cdadc20, 0x385f6: 0x6cdade20, 0x385f7: 0x6cdae020, + 0x385f8: 0x6cdae220, 0x385f9: 0x6cdae420, 0x385fa: 0x6cdae620, 0x385fb: 0x6cdae820, + 0x385fc: 0x6cdaea20, 0x385fd: 0x6d093820, 0x385fe: 0x6d093a20, 0x385ff: 0x6d093c20, + // Block 0xe18, offset 0x38600 + 0x38600: 0x6d093e20, 0x38601: 0x6d094020, 0x38602: 0x6d094220, 0x38603: 0x6d094420, + 0x38604: 0x6d094620, 0x38605: 0x6d094820, 0x38606: 0x6d094a20, 0x38607: 0x6d094c20, + 0x38608: 0x6d094e20, 0x38609: 0x6d095020, 0x3860a: 0x6d374a20, 0x3860b: 0x6d374c20, + 0x3860c: 0x6d374e20, 0x3860d: 0x6d375020, 0x3860e: 0x6d375220, 0x3860f: 0x6d375420, + 0x38610: 0x6d375620, 0x38611: 0x6d375820, 0x38612: 0x6d375a20, 0x38613: 0x6d375c20, + 0x38614: 0x6d375e20, 0x38615: 0x6d376020, 0x38616: 0x6d376220, 0x38617: 0x6d376420, + 0x38618: 0x6d376620, 0x38619: 0x6d376820, 0x3861a: 0x6d376a20, 0x3861b: 0x6d376c20, + 0x3861c: 0x6d376e20, 0x3861d: 0x6d63b020, 0x3861e: 0x6d63b220, 0x3861f: 0x6d63b420, + 0x38620: 0x6d63b620, 0x38621: 0x6d63b820, 0x38622: 0x6d63ba20, 0x38623: 0x6d63bc20, + 0x38624: 0x6d63be20, 0x38625: 0x6d63c020, 0x38626: 0x6d63c220, 0x38627: 0x6d63c420, + 0x38628: 0x6d63c620, 0x38629: 0x6d63c820, 0x3862a: 0x6d63ca20, 0x3862b: 0x6d63cc20, + 0x3862c: 0x6d63ce20, 0x3862d: 0x6d63d020, 0x3862e: 0x6d63d220, 0x3862f: 0x6d63d420, + 0x38630: 0x6d63d620, 0x38631: 0x6d63d820, 0x38632: 0x6d63da20, 0x38633: 0x6d63dc20, + 0x38634: 0x6d8da820, 0x38635: 0x6d8daa20, 0x38636: 0x6d8dac20, 0x38637: 0x6d8dae20, + 0x38638: 0x6d8db020, 0x38639: 0x6d8db220, 0x3863a: 0x6d8db420, 0x3863b: 0x6d8db620, + 0x3863c: 0x6d8db820, 0x3863d: 0x6d8dba20, 0x3863e: 0x6d8dbc20, 0x3863f: 0x6d63de20, + // Block 0xe19, offset 0x38640 + 0x38640: 0x6d8dbe20, 0x38641: 0x6d8dc020, 0x38642: 0x6d8dc220, 0x38643: 0x6d8dc420, + 0x38644: 0x6d8dc620, 0x38645: 0x6d8dc820, 0x38646: 0x6db1a420, 0x38647: 0x6db1a620, + 0x38648: 0x6db1a820, 0x38649: 0x6db1aa20, 0x3864a: 0x6db1ac20, 0x3864b: 0x6db1ae20, + 0x3864c: 0x6db1b020, 0x3864d: 0x6db1b220, 0x3864e: 0x6db1b420, 0x3864f: 0x6db1b620, + 0x38650: 0x6db1b820, 0x38651: 0x6dd0e820, 0x38652: 0x6dd0ea20, 0x38653: 0x6dd0ec20, + 0x38654: 0x6dd0ee20, 0x38655: 0x6dd0f020, 0x38656: 0x6dd0f220, 0x38657: 0x6dd0f420, + 0x38658: 0x6dd0f620, 0x38659: 0x6dd0f820, 0x3865a: 0x6dd0fa20, 0x3865b: 0x6dd0fc20, + 0x3865c: 0x6dd0fe20, 0x3865d: 0x6dd10020, 0x3865e: 0x6dd10220, 0x3865f: 0x6dd10420, + 0x38660: 0x6dd10620, 0x38661: 0x6dd10820, 0x38662: 0x6dd10a20, 0x38663: 0x6dd10c20, + 0x38664: 0x6dd10e20, 0x38665: 0x6dd11020, 0x38666: 0x6dd11220, 0x38667: 0x6dd11420, + 0x38668: 0x6dea9020, 0x38669: 0x6dea9220, 0x3866a: 0x6dea9420, 0x3866b: 0x6dea9620, + 0x3866c: 0x6dea9820, 0x3866d: 0x6dea9a20, 0x3866e: 0x6dea9c20, 0x3866f: 0x6dea9e20, + 0x38670: 0x6deaa020, 0x38671: 0x6e003e20, 0x38672: 0x6e004020, 0x38673: 0x6e004220, + 0x38674: 0x6e004420, 0x38675: 0x6e004620, 0x38676: 0x6e126e20, 0x38677: 0x6e127020, + 0x38678: 0x6e127220, 0x38679: 0x6e105820, 0x3867a: 0x6e127420, 0x3867b: 0x6e127620, + 0x3867c: 0x6e127820, 0x3867d: 0x6e208a20, 0x3867e: 0x6e208c20, 0x3867f: 0x6e208e20, + // Block 0xe1a, offset 0x38680 + 0x38680: 0x6e209020, 0x38681: 0x6e209220, 0x38682: 0x6e209420, 0x38683: 0x6e2b7020, + 0x38684: 0x6e2b7220, 0x38685: 0x6e39be20, 0x38686: 0x6e39c020, 0x38687: 0x6e3dee20, + 0x38688: 0x6e40c620, 0x38689: 0x6e3df020, 0x3868a: 0x6e454620, 0x3868b: 0x6c5e7820, + 0x3868c: 0x6cac4820, 0x3868d: 0x6cac4a20, 0x3868e: 0x6cdaec20, 0x3868f: 0x6d095220, + 0x38690: 0x6d63e420, 0x38691: 0x6db1be20, 0x38692: 0x6e004a20, 0x38693: 0x6c5e7c20, + 0x38694: 0x6cac5020, 0x38695: 0x6cac5220, 0x38696: 0x6cac5420, 0x38697: 0x6cac5620, + 0x38698: 0x6cac5820, 0x38699: 0x6cac5a20, 0x3869a: 0x6cdaee20, 0x3869b: 0x6d095420, + 0x3869c: 0x6d095620, 0x3869d: 0x6d095820, 0x3869e: 0x6d377420, 0x3869f: 0x6d377620, + 0x386a0: 0x6d377820, 0x386a1: 0x6d377a20, 0x386a2: 0x6d377c20, 0x386a3: 0x6d377e20, + 0x386a4: 0x6d63e620, 0x386a5: 0x6d63e820, 0x386a6: 0x6d63ea20, 0x386a7: 0x6d63ec20, + 0x386a8: 0x6d63ee20, 0x386a9: 0x6d63f020, 0x386aa: 0x6d8dce20, 0x386ab: 0x6d8dd020, + 0x386ac: 0x6d8dd220, 0x386ad: 0x6d8dd420, 0x386ae: 0x6d8dd620, 0x386af: 0x6e004c20, + 0x386b0: 0x6e004e20, 0x386b1: 0x6e005020, 0x386b2: 0x6e39c220, 0x386b3: 0x6c0a5a20, + 0x386b4: 0x6c0a5c20, 0x386b5: 0x6c0a5e20, 0x386b6: 0x6c14b020, 0x386b7: 0x6c14b220, + 0x386b8: 0x6c14b420, 0x386b9: 0x6c14b620, 0x386ba: 0x6c14b820, 0x386bb: 0x6c14ba20, + 0x386bc: 0x6c14bc20, 0x386bd: 0x6c14be20, 0x386be: 0x6c14c020, 0x386bf: 0x6c14c220, + // Block 0xe1b, offset 0x386c0 + 0x386c0: 0x6c14c420, 0x386c1: 0x6c266020, 0x386c2: 0x6c266220, 0x386c3: 0x6c266420, + 0x386c4: 0x6c266620, 0x386c5: 0x6c266820, 0x386c6: 0x6c266a20, 0x386c7: 0x6c266c20, + 0x386c8: 0x6c266e20, 0x386c9: 0x6c267020, 0x386ca: 0x6c267220, 0x386cb: 0x6c267420, + 0x386cc: 0x6c267620, 0x386cd: 0x6c267820, 0x386ce: 0x6c267a20, 0x386cf: 0x6c267c20, + 0x386d0: 0x6c267e20, 0x386d1: 0x6c268020, 0x386d2: 0x6c268220, 0x386d3: 0x6c3fba20, + 0x386d4: 0x6c3fbc20, 0x386d5: 0x6c3fbe20, 0x386d6: 0x6c3fc020, 0x386d7: 0x6c3fc220, + 0x386d8: 0x6c3fc420, 0x386d9: 0x6c3fc620, 0x386da: 0x6c3fc820, 0x386db: 0x6c3fca20, + 0x386dc: 0x6c3fcc20, 0x386dd: 0x6c3fce20, 0x386de: 0x6c3fd020, 0x386df: 0x6c3fd220, + 0x386e0: 0x6c3fd420, 0x386e1: 0x6c3fd620, 0x386e2: 0x6c3fd820, 0x386e3: 0x6c3fda20, + 0x386e4: 0x6c3fdc20, 0x386e5: 0x6c3fde20, 0x386e6: 0x6c3fe020, 0x386e7: 0x6c3fe220, + 0x386e8: 0x6c3fe420, 0x386e9: 0x6c3fe620, 0x386ea: 0x6c3fe820, 0x386eb: 0x6c3fea20, + 0x386ec: 0x6c3fec20, 0x386ed: 0x6c3fee20, 0x386ee: 0x6c3ff020, 0x386ef: 0x6c3ff220, + 0x386f0: 0x6c3ff420, 0x386f1: 0x6c3ff620, 0x386f2: 0x6c3ff820, 0x386f3: 0x6c3ffa20, + 0x386f4: 0x6c3ffc20, 0x386f5: 0x6c3ffe20, 0x386f6: 0x6c400020, 0x386f7: 0x6c5f1220, + 0x386f8: 0x6c5f1420, 0x386f9: 0x6c5f1620, 0x386fa: 0x6c5f1820, 0x386fb: 0x6c5f1a20, + 0x386fc: 0x6c5f1c20, 0x386fd: 0x6c5f1e20, 0x386fe: 0x6c5f2020, 0x386ff: 0x6c5f2220, + // Block 0xe1c, offset 0x38700 + 0x38700: 0x6c5f2420, 0x38701: 0x6c5f2620, 0x38702: 0x6c5f2820, 0x38703: 0x6c5f2a20, + 0x38704: 0x6c5f2c20, 0x38705: 0x6c5f2e20, 0x38706: 0x6c5f3020, 0x38707: 0x6c5f3220, + 0x38708: 0x6c5f3420, 0x38709: 0x6c5f3620, 0x3870a: 0x6c5f3820, 0x3870b: 0x6c5f3a20, + 0x3870c: 0x6c5f3c20, 0x3870d: 0x6c5f3e20, 0x3870e: 0x6c5f4020, 0x3870f: 0x6c5f4220, + 0x38710: 0x6c5f4420, 0x38711: 0x6c5f4620, 0x38712: 0x6c5f4820, 0x38713: 0x6c5f4a20, + 0x38714: 0x6c5f4c20, 0x38715: 0x6c5f4e20, 0x38716: 0x6c5f5020, 0x38717: 0x6c5f5220, + 0x38718: 0x6c5f5420, 0x38719: 0x6c5f5620, 0x3871a: 0x6c5f5820, 0x3871b: 0x6c5f5a20, + 0x3871c: 0x6c5f5c20, 0x3871d: 0x6c5f5e20, 0x3871e: 0x6c5f6020, 0x3871f: 0x6c5f6220, + 0x38720: 0x6c5f6420, 0x38721: 0x6c5f6620, 0x38722: 0x6c5f6820, 0x38723: 0x6c5f6a20, + 0x38724: 0x6c5f6c20, 0x38725: 0x6c5f6e20, 0x38726: 0x6c5f7020, 0x38727: 0x6c5f7220, + 0x38728: 0x6c5f7420, 0x38729: 0x6c5f7620, 0x3872a: 0x6c5f7820, 0x3872b: 0x6c5f7a20, + 0x3872c: 0x6c5f7c20, 0x3872d: 0x6c841e20, 0x3872e: 0x6c842020, 0x3872f: 0x6c842220, + 0x38730: 0x6c842420, 0x38731: 0x6c842620, 0x38732: 0x6c842820, 0x38733: 0x6c842a20, + 0x38734: 0x6c842c20, 0x38735: 0x6c842e20, 0x38736: 0x6c843020, 0x38737: 0x6c843220, + 0x38738: 0x6c843420, 0x38739: 0x6c843620, 0x3873a: 0x6c843820, 0x3873b: 0x6c843a20, + 0x3873c: 0x6c843c20, 0x3873d: 0x6c843e20, 0x3873e: 0x6c844020, 0x3873f: 0x6c844220, + // Block 0xe1d, offset 0x38740 + 0x38740: 0x6c844420, 0x38741: 0x6c844620, 0x38742: 0x6c844820, 0x38743: 0x6c844a20, + 0x38744: 0x6c844c20, 0x38745: 0x6c844e20, 0x38746: 0x6c845020, 0x38747: 0x6c845220, + 0x38748: 0x6c845420, 0x38749: 0x6c845620, 0x3874a: 0x6c845820, 0x3874b: 0x6c845a20, + 0x3874c: 0x6c845c20, 0x3874d: 0x6c845e20, 0x3874e: 0x6c846020, 0x3874f: 0x6c846220, + 0x38750: 0x6c846420, 0x38751: 0x6c846620, 0x38752: 0x6c846820, 0x38753: 0x6c846a20, + 0x38754: 0x6c846c20, 0x38755: 0x6c846e20, 0x38756: 0x6c847020, 0x38757: 0x6c847220, + 0x38758: 0x6c847420, 0x38759: 0x6c847620, 0x3875a: 0x6c847820, 0x3875b: 0x6c847a20, + 0x3875c: 0x6c847c20, 0x3875d: 0x6c847e20, 0x3875e: 0x6c848020, 0x3875f: 0x6c848220, + 0x38760: 0x6c848420, 0x38761: 0x6c848620, 0x38762: 0x6c848820, 0x38763: 0x6c848a20, + 0x38764: 0x6c848c20, 0x38765: 0x6c848e20, 0x38766: 0x6c849020, 0x38767: 0x6c849220, + 0x38768: 0x6c849420, 0x38769: 0x6c849620, 0x3876a: 0x6c849820, 0x3876b: 0x6c849a20, + 0x3876c: 0x6c849c20, 0x3876d: 0x6c849e20, 0x3876e: 0x6c84a020, 0x3876f: 0x6c84a220, + 0x38770: 0x6c84a420, 0x38771: 0x6c84a620, 0x38772: 0x6c84a820, 0x38773: 0x6c84aa20, + 0x38774: 0x6c84ac20, 0x38775: 0x6c84ae20, 0x38776: 0x6cad1020, 0x38777: 0x6cad1220, + 0x38778: 0x6cad1420, 0x38779: 0x6cad1620, 0x3877a: 0x6cad1820, 0x3877b: 0x6cad1a20, + 0x3877c: 0x6cad1c20, 0x3877d: 0x6cad1e20, 0x3877e: 0x6cad2020, 0x3877f: 0x6cad2220, + // Block 0xe1e, offset 0x38780 + 0x38780: 0x6cad2420, 0x38781: 0x6cad2620, 0x38782: 0x6cad2820, 0x38783: 0x6cad2a20, + 0x38784: 0x6cad2c20, 0x38785: 0x6cad2e20, 0x38786: 0x6cad3020, 0x38787: 0x6cad3220, + 0x38788: 0x6cad3420, 0x38789: 0x6cad3620, 0x3878a: 0x6cad3820, 0x3878b: 0x6cad3a20, + 0x3878c: 0x6cad3c20, 0x3878d: 0x6cad3e20, 0x3878e: 0x6cad4020, 0x3878f: 0x6cad4220, + 0x38790: 0x6cad4420, 0x38791: 0x6cad4620, 0x38792: 0x6cad4820, 0x38793: 0x6cad4a20, + 0x38794: 0x6cad4c20, 0x38795: 0x6cad4e20, 0x38796: 0x6cad5020, 0x38797: 0x6cad5220, + 0x38798: 0x6cad5420, 0x38799: 0x6cad5620, 0x3879a: 0x6cad5820, 0x3879b: 0x6cad5a20, + 0x3879c: 0x6cad5c20, 0x3879d: 0x6cad5e20, 0x3879e: 0x6cad6020, 0x3879f: 0x6cad6220, + 0x387a0: 0x6cad6420, 0x387a1: 0x6cad6620, 0x387a2: 0x6cad6820, 0x387a3: 0x6cad6a20, + 0x387a4: 0x6cad6c20, 0x387a5: 0x6cad6e20, 0x387a6: 0x6cad7020, 0x387a7: 0x6cad7220, + 0x387a8: 0x6cad7420, 0x387a9: 0x6cad7620, 0x387aa: 0x6cad7820, 0x387ab: 0x6cad7a20, + 0x387ac: 0x6cad7c20, 0x387ad: 0x6cad7e20, 0x387ae: 0x6cad8020, 0x387af: 0x6cad8220, + 0x387b0: 0x6cad8420, 0x387b1: 0x6cdbf020, 0x387b2: 0x6cad8620, 0x387b3: 0x6cad8820, + 0x387b4: 0x6cad8a20, 0x387b5: 0x6cad8c20, 0x387b6: 0x6cad8e20, 0x387b7: 0x6cad9020, + 0x387b8: 0x6cad9220, 0x387b9: 0x6cad9420, 0x387ba: 0x6cad9620, 0x387bb: 0x6cad9820, + 0x387bc: 0x6cad9a20, 0x387bd: 0x6cad9c20, 0x387be: 0x6cad9e20, 0x387bf: 0x6cada020, + // Block 0xe1f, offset 0x387c0 + 0x387c0: 0x6cada220, 0x387c1: 0x6cada420, 0x387c2: 0x6cada620, 0x387c3: 0x6cada820, + 0x387c4: 0x6cadaa20, 0x387c5: 0x6cadac20, 0x387c6: 0x6cadae20, 0x387c7: 0x6cadb020, + 0x387c8: 0x6cadb220, 0x387c9: 0x6cadb420, 0x387ca: 0x6cadb620, 0x387cb: 0x6cadb820, + 0x387cc: 0x6cadba20, 0x387cd: 0x6cadbc20, 0x387ce: 0x6cadbe20, 0x387cf: 0x6cadc020, + 0x387d0: 0x6cadc220, 0x387d1: 0x6cadc420, 0x387d2: 0x6cadc620, 0x387d3: 0x6cadc820, + 0x387d4: 0x6cadca20, 0x387d5: 0x6cadcc20, 0x387d6: 0x6cdbf220, 0x387d7: 0x6cadce20, + 0x387d8: 0x6cadd020, 0x387d9: 0x6cadd220, 0x387da: 0x6cadd420, 0x387db: 0x6cadd620, + 0x387dc: 0x6cadd820, 0x387dd: 0x6cadda20, 0x387de: 0x6caddc20, 0x387df: 0x6cadde20, + 0x387e0: 0x6cade020, 0x387e1: 0x6cade220, 0x387e2: 0x6cade420, 0x387e3: 0x6cade620, + 0x387e4: 0x6cade820, 0x387e5: 0x6cadea20, 0x387e6: 0x6cadec20, 0x387e7: 0x6cadee20, + 0x387e8: 0x6cadf020, 0x387e9: 0x6cadf220, 0x387ea: 0x6cdbf420, 0x387eb: 0x6cdbf620, + 0x387ec: 0x6cdbf820, 0x387ed: 0x6cdbfa20, 0x387ee: 0x6cdbfc20, 0x387ef: 0x6cdbfe20, + 0x387f0: 0x6cdc0020, 0x387f1: 0x6cdc0220, 0x387f2: 0x6cdc0420, 0x387f3: 0x6cdc0620, + 0x387f4: 0x6cdc0820, 0x387f5: 0x6cdc0a20, 0x387f6: 0x6cdc0c20, 0x387f7: 0x6cdc0e20, + 0x387f8: 0x6cdc1020, 0x387f9: 0x6cdc1220, 0x387fa: 0x6cdc1420, 0x387fb: 0x6cdc1620, + 0x387fc: 0x6cdc1820, 0x387fd: 0x6cdc1a20, 0x387fe: 0x6cdc1c20, 0x387ff: 0x6cdc1e20, + // Block 0xe20, offset 0x38800 + 0x38800: 0x6cdc2020, 0x38801: 0x6cdc2220, 0x38802: 0x6cdc2420, 0x38803: 0x6cdc2620, + 0x38804: 0x6cdc2820, 0x38805: 0x6cdc2a20, 0x38806: 0x6cdc2c20, 0x38807: 0x6cdc2e20, + 0x38808: 0x6cdc3020, 0x38809: 0x6cdc3220, 0x3880a: 0x6cdc3420, 0x3880b: 0x6cdc3620, + 0x3880c: 0x6cdc3820, 0x3880d: 0x6cdc3a20, 0x3880e: 0x6cdc3c20, 0x3880f: 0x6cdc3e20, + 0x38810: 0x6cdc4020, 0x38811: 0x6cdc4220, 0x38812: 0x6cdc4420, 0x38813: 0x6cdc4620, + 0x38814: 0x6cdc4820, 0x38815: 0x6cdc4a20, 0x38816: 0x6cdc4c20, 0x38817: 0x6cdc4e20, + 0x38818: 0x6cdc5020, 0x38819: 0x6cdc5220, 0x3881a: 0x6cdc5420, 0x3881b: 0x6cdc5620, + 0x3881c: 0x6cdc5820, 0x3881d: 0x6cdc5a20, 0x3881e: 0x6cdc5c20, 0x3881f: 0x6cdc5e20, + 0x38820: 0x6cdc6020, 0x38821: 0x6cdc6220, 0x38822: 0x6cdc6420, 0x38823: 0x6cdc6620, + 0x38824: 0x6cdc6820, 0x38825: 0x6cdc6a20, 0x38826: 0x6cdc6c20, 0x38827: 0x6cdc6e20, + 0x38828: 0x6cdc7020, 0x38829: 0x6cdc7220, 0x3882a: 0x6cdc7420, 0x3882b: 0x6cdc7620, + 0x3882c: 0x6cdc7820, 0x3882d: 0x6cdc7a20, 0x3882e: 0x6cdc7c20, 0x3882f: 0x6cdc7e20, + 0x38830: 0x6cdc8020, 0x38831: 0x6cdc8220, 0x38832: 0x6cdc8420, 0x38833: 0x6cdc8620, + 0x38834: 0x6cdc8820, 0x38835: 0x6cdc8a20, 0x38836: 0x6cdc8c20, 0x38837: 0x6cdc8e20, + 0x38838: 0x6cdc9020, 0x38839: 0x6cdc9220, 0x3883a: 0x6cdc9420, 0x3883b: 0x6cdc9620, + 0x3883c: 0x6cdc9820, 0x3883d: 0x6cdc9a20, 0x3883e: 0x6cdc9c20, 0x3883f: 0x6cdc9e20, + // Block 0xe21, offset 0x38840 + 0x38840: 0x6cdca020, 0x38841: 0x6cdca220, 0x38842: 0x6cdca420, 0x38843: 0x6cdca620, + 0x38844: 0x6cdca820, 0x38845: 0x6cdcaa20, 0x38846: 0x6cdcac20, 0x38847: 0x6cdcae20, + 0x38848: 0x6cdcb020, 0x38849: 0x6cdcb220, 0x3884a: 0x6cdcb420, 0x3884b: 0x6cdcb620, + 0x3884c: 0x6cdcb820, 0x3884d: 0x6cdcba20, 0x3884e: 0x6cdcbc20, 0x3884f: 0x6cdcbe20, + 0x38850: 0x6cdcc020, 0x38851: 0x6cdcc220, 0x38852: 0x6cdcc420, 0x38853: 0x6cdcc620, + 0x38854: 0x6cdcc820, 0x38855: 0x6cdcca20, 0x38856: 0x6cdccc20, 0x38857: 0x6cdcce20, + 0x38858: 0x6cdcd020, 0x38859: 0x6cdcd220, 0x3885a: 0x6cdcd420, 0x3885b: 0x6cdcd620, + 0x3885c: 0x6cdcd820, 0x3885d: 0x6cdcda20, 0x3885e: 0x6cdcdc20, 0x3885f: 0x6cdcde20, + 0x38860: 0x6cdce020, 0x38861: 0x6cdce220, 0x38862: 0x6cdce420, 0x38863: 0x6cdce620, + 0x38864: 0x6cdce820, 0x38865: 0x6cdcea20, 0x38866: 0x6cdcec20, 0x38867: 0x6cdcee20, + 0x38868: 0x6cdcf020, 0x38869: 0x6cdcf220, 0x3886a: 0x6cdcf420, 0x3886b: 0x6cdcf620, + 0x3886c: 0x6cdcf820, 0x3886d: 0x6cdcfa20, 0x3886e: 0x6cdcfc20, 0x3886f: 0x6cdcfe20, + 0x38870: 0x6cdd0020, 0x38871: 0x6cdd0220, 0x38872: 0x6cdd0420, 0x38873: 0x6cdd0620, + 0x38874: 0x6cdd0820, 0x38875: 0x6cdd0a20, 0x38876: 0x6cdd0c20, 0x38877: 0x6cdd0e20, + 0x38878: 0x6cdd1020, 0x38879: 0x6cdd1220, 0x3887a: 0x6cdd1420, 0x3887b: 0x6cdd1620, + 0x3887c: 0x6cdd1820, 0x3887d: 0x6cdd1a20, 0x3887e: 0x6cdd1c20, 0x3887f: 0x6cdd1e20, + // Block 0xe22, offset 0x38880 + 0x38880: 0x6cdd2020, 0x38881: 0x6d0a5020, 0x38882: 0x6d0a5220, 0x38883: 0x6d0a5420, + 0x38884: 0x6d0a5620, 0x38885: 0x6d0a5820, 0x38886: 0x6d0a5a20, 0x38887: 0x6d0a5c20, + 0x38888: 0x6d0a5e20, 0x38889: 0x6d0a6020, 0x3888a: 0x6d0a6220, 0x3888b: 0x6d0a6420, + 0x3888c: 0x6d0a6620, 0x3888d: 0x6d0a6820, 0x3888e: 0x6d0a6a20, 0x3888f: 0x6d0a6c20, + 0x38890: 0x6d0a6e20, 0x38891: 0x6d0a7020, 0x38892: 0x6d0a7220, 0x38893: 0x6d0a7420, + 0x38894: 0x6d0a7620, 0x38895: 0x6d0a7820, 0x38896: 0x6d0a7a20, 0x38897: 0x6d0a7c20, + 0x38898: 0x6d0a7e20, 0x38899: 0x6d0a8020, 0x3889a: 0x6d0a8220, 0x3889b: 0x6d0a8420, + 0x3889c: 0x6d0a8620, 0x3889d: 0x6d0a8820, 0x3889e: 0x6d0a8a20, 0x3889f: 0x6d0a8c20, + 0x388a0: 0x6d0a8e20, 0x388a1: 0x6d0a9020, 0x388a2: 0x6d0a9220, 0x388a3: 0x6d0a9420, + 0x388a4: 0x6d0a9620, 0x388a5: 0x6d0a9820, 0x388a6: 0x6d0a9a20, 0x388a7: 0x6d0a9c20, + 0x388a8: 0x6d0a9e20, 0x388a9: 0x6d0aa020, 0x388aa: 0x6d0aa220, 0x388ab: 0x6d0aa420, + 0x388ac: 0x6d0aa620, 0x388ad: 0x6d0aa820, 0x388ae: 0x6d0aaa20, 0x388af: 0x6d0aac20, + 0x388b0: 0x6d0aae20, 0x388b1: 0x6d0ab020, 0x388b2: 0x6d0ab220, 0x388b3: 0x6d0ab420, + 0x388b4: 0x6d0ab620, 0x388b5: 0x6d0ab820, 0x388b6: 0x6d0aba20, 0x388b7: 0x6d0abc20, + 0x388b8: 0x6d0abe20, 0x388b9: 0x6d0ac020, 0x388ba: 0x6d0ac220, 0x388bb: 0x6d0ac420, + 0x388bc: 0x6d0ac620, 0x388bd: 0x6d0ac820, 0x388be: 0x6d0aca20, 0x388bf: 0x6d0acc20, + // Block 0xe23, offset 0x388c0 + 0x388c0: 0x6d0ace20, 0x388c1: 0x6d0ad020, 0x388c2: 0x6d0ad220, 0x388c3: 0x6d0ad420, + 0x388c4: 0x6d0ad620, 0x388c5: 0x6d0ad820, 0x388c6: 0x6d0ada20, 0x388c7: 0x6d0adc20, + 0x388c8: 0x6d0ade20, 0x388c9: 0x6d0ae020, 0x388ca: 0x6d0ae220, 0x388cb: 0x6d0ae420, + 0x388cc: 0x6d0ae620, 0x388cd: 0x6d0ae820, 0x388ce: 0x6d0aea20, 0x388cf: 0x6d0aec20, + 0x388d0: 0x6d0aee20, 0x388d1: 0x6d0af020, 0x388d2: 0x6d0af220, 0x388d3: 0x6d0af420, + 0x388d4: 0x6d0af620, 0x388d5: 0x6d0af820, 0x388d6: 0x6d0afa20, 0x388d7: 0x6d0afc20, + 0x388d8: 0x6d0afe20, 0x388d9: 0x6d0b0020, 0x388da: 0x6d0b0220, 0x388db: 0x6d0b0420, + 0x388dc: 0x6d0b0620, 0x388dd: 0x6d0b0820, 0x388de: 0x6d0b0a20, 0x388df: 0x6d0b0c20, + 0x388e0: 0x6d0b0e20, 0x388e1: 0x6d0b1020, 0x388e2: 0x6d0b1220, 0x388e3: 0x6d0b1420, + 0x388e4: 0x6d0b1620, 0x388e5: 0x6d0b1820, 0x388e6: 0x6d0b1a20, 0x388e7: 0x6d0b1c20, + 0x388e8: 0x6d0b1e20, 0x388e9: 0x6d0b2020, 0x388ea: 0x6d0b2220, 0x388eb: 0x6d0b2420, + 0x388ec: 0x6d0b2620, 0x388ed: 0x6d0b2820, 0x388ee: 0x6d0b2a20, 0x388ef: 0x6d0b2c20, + 0x388f0: 0x6d0b2e20, 0x388f1: 0x6d0b3020, 0x388f2: 0x6d0b3220, 0x388f3: 0x6d0b3420, + 0x388f4: 0x6d0b3620, 0x388f5: 0x6d0b3820, 0x388f6: 0x6cfba420, 0x388f7: 0x6d0b3a20, + 0x388f8: 0x6d0b3c20, 0x388f9: 0x6d0b3e20, 0x388fa: 0x6d0b4020, 0x388fb: 0x6d0b4220, + 0x388fc: 0x6d0b4420, 0x388fd: 0x6d0b4620, 0x388fe: 0x6d0b4820, 0x388ff: 0x6d0b4a20, + // Block 0xe24, offset 0x38900 + 0x38900: 0x6d0b4c20, 0x38901: 0x6d0b4e20, 0x38902: 0x6d0b5020, 0x38903: 0x6d0b5220, + 0x38904: 0x6d0b5420, 0x38905: 0x6d0b5620, 0x38906: 0x6d0b5820, 0x38907: 0x6d385420, + 0x38908: 0x6d0b5a20, 0x38909: 0x6d0b5c20, 0x3890a: 0x6d0b5e20, 0x3890b: 0x6d0b6020, + 0x3890c: 0x6d0b6220, 0x3890d: 0x6d0b6420, 0x3890e: 0x6d0b6620, 0x3890f: 0x6d0b6820, + 0x38910: 0x6d0b6a20, 0x38911: 0x6d0b6c20, 0x38912: 0x6d0b6e20, 0x38913: 0x6d0b7020, + 0x38914: 0x6d0b7220, 0x38915: 0x6d0b7420, 0x38916: 0x6d0b7620, 0x38917: 0x6d0b7820, + 0x38918: 0x6d0b7a20, 0x38919: 0x6d0b7c20, 0x3891a: 0x6d0b7e20, 0x3891b: 0x6d0b8020, + 0x3891c: 0x6d0b8220, 0x3891d: 0x6d0b8420, 0x3891e: 0x6d0b8620, 0x3891f: 0x6d0b8820, + 0x38920: 0x6d0b8a20, 0x38921: 0x6d385620, 0x38922: 0x6d385820, 0x38923: 0x6d385a20, + 0x38924: 0x6d385c20, 0x38925: 0x6d385e20, 0x38926: 0x6d386020, 0x38927: 0x6d386220, + 0x38928: 0x6d386420, 0x38929: 0x6d386620, 0x3892a: 0x6d386820, 0x3892b: 0x6d386a20, + 0x3892c: 0x6d386c20, 0x3892d: 0x6d386e20, 0x3892e: 0x6d387020, 0x3892f: 0x6d387220, + 0x38930: 0x6d387420, 0x38931: 0x6d387620, 0x38932: 0x6d387820, 0x38933: 0x6d387a20, + 0x38934: 0x6d387c20, 0x38935: 0x6d387e20, 0x38936: 0x6d388020, 0x38937: 0x6d388220, + 0x38938: 0x6d388420, 0x38939: 0x6d388620, 0x3893a: 0x6d388820, 0x3893b: 0x6d388a20, + 0x3893c: 0x6d388c20, 0x3893d: 0x6d388e20, 0x3893e: 0x6d389020, 0x3893f: 0x6d389220, + // Block 0xe25, offset 0x38940 + 0x38940: 0x6d389420, 0x38941: 0x6d389620, 0x38942: 0x6d389820, 0x38943: 0x6d389a20, + 0x38944: 0x6d389c20, 0x38945: 0x6d389e20, 0x38946: 0x6d38a020, 0x38947: 0x6d38a220, + 0x38948: 0x6d38a420, 0x38949: 0x6d38a620, 0x3894a: 0x6d38a820, 0x3894b: 0x6d38aa20, + 0x3894c: 0x6d38ac20, 0x3894d: 0x6d38ae20, 0x3894e: 0x6d38b020, 0x3894f: 0x6d38b220, + 0x38950: 0x6d38b420, 0x38951: 0x6d38b620, 0x38952: 0x6d38b820, 0x38953: 0x6d38ba20, + 0x38954: 0x6d38bc20, 0x38955: 0x6d38be20, 0x38956: 0x6d38c020, 0x38957: 0x6d38c220, + 0x38958: 0x6d38c420, 0x38959: 0x6d38c620, 0x3895a: 0x6d38c820, 0x3895b: 0x6d38ca20, + 0x3895c: 0x6d38cc20, 0x3895d: 0x6d38ce20, 0x3895e: 0x6d38d020, 0x3895f: 0x6d38d220, + 0x38960: 0x6d38d420, 0x38961: 0x6d38d620, 0x38962: 0x6d38d820, 0x38963: 0x6d38da20, + 0x38964: 0x6d38dc20, 0x38965: 0x6d38de20, 0x38966: 0x6d38e020, 0x38967: 0x6d38e220, + 0x38968: 0x6d38e420, 0x38969: 0x6d38e620, 0x3896a: 0x6d38e820, 0x3896b: 0x6d38ea20, + 0x3896c: 0x6d38ec20, 0x3896d: 0x6d38ee20, 0x3896e: 0x6d38f020, 0x3896f: 0x6d38f220, + 0x38970: 0x6d38f420, 0x38971: 0x6d38f620, 0x38972: 0x6d38f820, 0x38973: 0x6d38fa20, + 0x38974: 0x6d38fc20, 0x38975: 0x6d38fe20, 0x38976: 0x6d390020, 0x38977: 0x6d390220, + 0x38978: 0x6d390420, 0x38979: 0x6d390620, 0x3897a: 0x6d390820, 0x3897b: 0x6d390a20, + 0x3897c: 0x6d390c20, 0x3897d: 0x6d390e20, 0x3897e: 0x6d391020, 0x3897f: 0x6d391220, + // Block 0xe26, offset 0x38980 + 0x38980: 0x6d391420, 0x38981: 0x6d391620, 0x38982: 0x6d391820, 0x38983: 0x6d391a20, + 0x38984: 0x6d391c20, 0x38985: 0x6d391e20, 0x38986: 0x6d392020, 0x38987: 0x6d392220, + 0x38988: 0x6d392420, 0x38989: 0x6d392620, 0x3898a: 0x6d392820, 0x3898b: 0x6d392a20, + 0x3898c: 0x6d392c20, 0x3898d: 0x6d392e20, 0x3898e: 0x6d393020, 0x3898f: 0x6d393220, + 0x38990: 0x6d393420, 0x38991: 0x6d393620, 0x38992: 0x6d393820, 0x38993: 0x6d393a20, + 0x38994: 0x6d393c20, 0x38995: 0x6d393e20, 0x38996: 0x6d394020, 0x38997: 0x6d394220, + 0x38998: 0x6d394420, 0x38999: 0x6d394620, 0x3899a: 0x6d394820, 0x3899b: 0x6d394a20, + 0x3899c: 0x6d394c20, 0x3899d: 0x6d394e20, 0x3899e: 0x6d395020, 0x3899f: 0x6d395220, + 0x389a0: 0x6d395420, 0x389a1: 0x6d395620, 0x389a2: 0x6d395820, 0x389a3: 0x6d395a20, + 0x389a4: 0x6d395c20, 0x389a5: 0x6d395e20, 0x389a6: 0x6d396020, 0x389a7: 0x6d396220, + 0x389a8: 0x6d396420, 0x389a9: 0x6d396620, 0x389aa: 0x6d396820, 0x389ab: 0x6d396a20, + 0x389ac: 0x6d396c20, 0x389ad: 0x6d396e20, 0x389ae: 0x6d397020, 0x389af: 0x6d397220, + 0x389b0: 0x6d397420, 0x389b1: 0x6d397620, 0x389b2: 0x6d397820, 0x389b3: 0x6d397a20, + 0x389b4: 0x6d397c20, 0x389b5: 0x6d397e20, 0x389b6: 0x6d398020, 0x389b7: 0x6d398220, + 0x389b8: 0x6d398420, 0x389b9: 0x6d398620, 0x389ba: 0x6d398820, 0x389bb: 0x6d398a20, + 0x389bc: 0x6d398c20, 0x389bd: 0x6d398e20, 0x389be: 0x6d399020, 0x389bf: 0x6d64ba20, + // Block 0xe27, offset 0x389c0 + 0x389c0: 0x6d64bc20, 0x389c1: 0x6d64be20, 0x389c2: 0x6d64c020, 0x389c3: 0x6d64c220, + 0x389c4: 0x6d64c420, 0x389c5: 0x6d64c620, 0x389c6: 0x6d64c820, 0x389c7: 0x6d64ca20, + 0x389c8: 0x6d64cc20, 0x389c9: 0x6d64ce20, 0x389ca: 0x6d64d020, 0x389cb: 0x6d64d220, + 0x389cc: 0x6d64d420, 0x389cd: 0x6d64d620, 0x389ce: 0x6d64d820, 0x389cf: 0x6d64da20, + 0x389d0: 0x6d64dc20, 0x389d1: 0x6d64de20, 0x389d2: 0x6d64e020, 0x389d3: 0x6d64e220, + 0x389d4: 0x6d64e420, 0x389d5: 0x6d64e620, 0x389d6: 0x6d64e820, 0x389d7: 0x6d64ea20, + 0x389d8: 0x6d64ec20, 0x389d9: 0x6d64ee20, 0x389da: 0x6d64f020, 0x389db: 0x6d64f220, + 0x389dc: 0x6d64f420, 0x389dd: 0x6d64f620, 0x389de: 0x6d64f820, 0x389df: 0x6d64fa20, + 0x389e0: 0x6d64fc20, 0x389e1: 0x6d64fe20, 0x389e2: 0x6d650020, 0x389e3: 0x6d650220, + 0x389e4: 0x6d650420, 0x389e5: 0x6d650620, 0x389e6: 0x6d650820, 0x389e7: 0x6d650a20, + 0x389e8: 0x6d650c20, 0x389e9: 0x6d650e20, 0x389ea: 0x6d651020, 0x389eb: 0x6d651220, + 0x389ec: 0x6d651420, 0x389ed: 0x6d651620, 0x389ee: 0x6d651820, 0x389ef: 0x6d651a20, + 0x389f0: 0x6d651c20, 0x389f1: 0x6d651e20, 0x389f2: 0x6d652020, 0x389f3: 0x6d652220, + 0x389f4: 0x6d652420, 0x389f5: 0x6d652620, 0x389f6: 0x6d652820, 0x389f7: 0x6d652a20, + 0x389f8: 0x6d652c20, 0x389f9: 0x6d652e20, 0x389fa: 0x6d653020, 0x389fb: 0x6d653220, + 0x389fc: 0x6d653420, 0x389fd: 0x6d8e6c20, 0x389fe: 0x6d653620, 0x389ff: 0x6d653820, + // Block 0xe28, offset 0x38a00 + 0x38a00: 0x6d653a20, 0x38a01: 0x6d653c20, 0x38a02: 0x6d653e20, 0x38a03: 0x6d654020, + 0x38a04: 0x6d654220, 0x38a05: 0x6d654420, 0x38a06: 0x6d654620, 0x38a07: 0x6d654820, + 0x38a08: 0x6d654a20, 0x38a09: 0x6d654c20, 0x38a0a: 0x6d654e20, 0x38a0b: 0x6d655020, + 0x38a0c: 0x6d655220, 0x38a0d: 0x6d655420, 0x38a0e: 0x6d655620, 0x38a0f: 0x6d655820, + 0x38a10: 0x6d655a20, 0x38a11: 0x6d655c20, 0x38a12: 0x6d655e20, 0x38a13: 0x6d656020, + 0x38a14: 0x6d656220, 0x38a15: 0x6d656420, 0x38a16: 0x6d656620, 0x38a17: 0x6d656820, + 0x38a18: 0x6d656a20, 0x38a19: 0x6d656c20, 0x38a1a: 0x6d656e20, 0x38a1b: 0x6d657020, + 0x38a1c: 0x6d657220, 0x38a1d: 0x6d657420, 0x38a1e: 0x6d657620, 0x38a1f: 0x6d657820, + 0x38a20: 0x6d657a20, 0x38a21: 0x6d657c20, 0x38a22: 0x6d657e20, 0x38a23: 0x6d658020, + 0x38a24: 0x6d658220, 0x38a25: 0x6d658420, 0x38a26: 0x6d658620, 0x38a27: 0x6d658820, + 0x38a28: 0x6d658a20, 0x38a29: 0x6d658c20, 0x38a2a: 0x6d658e20, 0x38a2b: 0x6d659020, + 0x38a2c: 0x6d659220, 0x38a2d: 0x6d659420, 0x38a2e: 0x6d659620, 0x38a2f: 0x6d659820, + 0x38a30: 0x6d659a20, 0x38a31: 0x6d659c20, 0x38a32: 0x6d659e20, 0x38a33: 0x6d65a020, + 0x38a34: 0x6d65a220, 0x38a35: 0x6d65a420, 0x38a36: 0x6d65a620, 0x38a37: 0x6d65a820, + 0x38a38: 0x6d65aa20, 0x38a39: 0x6d65ac20, 0x38a3a: 0x6d65ae20, 0x38a3b: 0x6d65b020, + 0x38a3c: 0x6d65b220, 0x38a3d: 0x6d65b420, 0x38a3e: 0x6d65b620, 0x38a3f: 0x6d65b820, + // Block 0xe29, offset 0x38a40 + 0x38a40: 0x6d65ba20, 0x38a41: 0x6d65bc20, 0x38a42: 0x6d65be20, 0x38a43: 0x6d65c020, + 0x38a44: 0x6d65c220, 0x38a45: 0x6e454c20, 0x38a46: 0x6d8e6e20, 0x38a47: 0x6d8e7020, + 0x38a48: 0x6d8e7220, 0x38a49: 0x6d8e7420, 0x38a4a: 0x6d8e7620, 0x38a4b: 0x6d8e7820, + 0x38a4c: 0x6d8e7a20, 0x38a4d: 0x6d8e7c20, 0x38a4e: 0x6d8e7e20, 0x38a4f: 0x6d8e8020, + 0x38a50: 0x6d8e8220, 0x38a51: 0x6d8e8420, 0x38a52: 0x6d8e8620, 0x38a53: 0x6d8e8820, + 0x38a54: 0x6d8e8a20, 0x38a55: 0x6d8e8c20, 0x38a56: 0x6d8e8e20, 0x38a57: 0x6d8e9020, + 0x38a58: 0x6d8e9220, 0x38a59: 0x6d8e9420, 0x38a5a: 0x6d8e9620, 0x38a5b: 0x6d8e9820, + 0x38a5c: 0x6d8e9a20, 0x38a5d: 0x6d8e9c20, 0x38a5e: 0x6d8e9e20, 0x38a5f: 0x6d8ea020, + 0x38a60: 0x6d8ea220, 0x38a61: 0x6d8ea420, 0x38a62: 0x6d8ea620, 0x38a63: 0x6d8ea820, + 0x38a64: 0x6d8eaa20, 0x38a65: 0x6d8eac20, 0x38a66: 0x6d8eae20, 0x38a67: 0x6d8eb020, + 0x38a68: 0x6d8eb220, 0x38a69: 0x6d8eb420, 0x38a6a: 0x6d8eb620, 0x38a6b: 0x6d8eb820, + 0x38a6c: 0x6d8eba20, 0x38a6d: 0x6d8ebc20, 0x38a6e: 0x6d8ebe20, 0x38a6f: 0x6d8ec020, + 0x38a70: 0x6d8ec220, 0x38a71: 0x6d8ec420, 0x38a72: 0x6d8ec620, 0x38a73: 0x6d8ec820, + 0x38a74: 0x6d8eca20, 0x38a75: 0x6d8ecc20, 0x38a76: 0x6d8ece20, 0x38a77: 0x6d8ed020, + 0x38a78: 0x6d8ed220, 0x38a79: 0x6d8ed420, 0x38a7a: 0x6d8ed620, 0x38a7b: 0x6d8ed820, + 0x38a7c: 0x6d8eda20, 0x38a7d: 0x6d8edc20, 0x38a7e: 0x6d8ede20, 0x38a7f: 0x6d8ee020, + // Block 0xe2a, offset 0x38a80 + 0x38a80: 0x6d8ee220, 0x38a81: 0x6d8ee420, 0x38a82: 0x6d8ee620, 0x38a83: 0x6d8ee820, + 0x38a84: 0x6d8eea20, 0x38a85: 0x6d8eec20, 0x38a86: 0x6d8eee20, 0x38a87: 0x6dc5f420, + 0x38a88: 0x6d8ef020, 0x38a89: 0x6d8ef220, 0x38a8a: 0x6d8ef420, 0x38a8b: 0x6d8ef620, + 0x38a8c: 0x6d8ef820, 0x38a8d: 0x6d8efa20, 0x38a8e: 0x6d8efc20, 0x38a8f: 0x6d8efe20, + 0x38a90: 0x6d8f0020, 0x38a91: 0x6d8f0220, 0x38a92: 0x6d8f0420, 0x38a93: 0x6d8f0620, + 0x38a94: 0x6d8f0820, 0x38a95: 0x6d8f0a20, 0x38a96: 0x6d8f0c20, 0x38a97: 0x6d8f0e20, + 0x38a98: 0x6d8f1020, 0x38a99: 0x6d8f1220, 0x38a9a: 0x6d8f1420, 0x38a9b: 0x6d8f1620, + 0x38a9c: 0x6d8f1820, 0x38a9d: 0x6d8f1a20, 0x38a9e: 0x6d8f1c20, 0x38a9f: 0x6d8f1e20, + 0x38aa0: 0x6d8f2020, 0x38aa1: 0x6d8f2220, 0x38aa2: 0x6d8f2420, 0x38aa3: 0x6d8f2620, + 0x38aa4: 0x6d8f2820, 0x38aa5: 0x6d8f2a20, 0x38aa6: 0x6d8f2c20, 0x38aa7: 0x6d8f2e20, + 0x38aa8: 0x6d8f3020, 0x38aa9: 0x6d8f3220, 0x38aaa: 0x6d8f3420, 0x38aab: 0x6d8f3620, + 0x38aac: 0x6d8f3820, 0x38aad: 0x6d8f3a20, 0x38aae: 0x6d8f3c20, 0x38aaf: 0x6d8f3e20, + 0x38ab0: 0x6d8f4020, 0x38ab1: 0x6d8f4220, 0x38ab2: 0x6d8f4420, 0x38ab3: 0x6d8f4620, + 0x38ab4: 0x6d8f4820, 0x38ab5: 0x6d8f4a20, 0x38ab6: 0x6d8f4c20, 0x38ab7: 0x6d8f4e20, + 0x38ab8: 0x6d8f5020, 0x38ab9: 0x6d8f5220, 0x38aba: 0x6d8f5420, 0x38abb: 0x6d8f5620, + 0x38abc: 0x6d8f5820, 0x38abd: 0x6d8f5a20, 0x38abe: 0x6db26e20, 0x38abf: 0x6d8f5c20, + // Block 0xe2b, offset 0x38ac0 + 0x38ac0: 0x6d8f5e20, 0x38ac1: 0x6d8f6020, 0x38ac2: 0x6d8f6220, 0x38ac3: 0x6d8f6420, + 0x38ac4: 0x6d8f6620, 0x38ac5: 0x6d8f6820, 0x38ac6: 0x6d8f6a20, 0x38ac7: 0x6d8f6c20, + 0x38ac8: 0x6d8f6e20, 0x38ac9: 0x6d8f7020, 0x38aca: 0x6d8f7220, 0x38acb: 0x6d8f7420, + 0x38acc: 0x6d8f7620, 0x38acd: 0x6d8f7820, 0x38ace: 0x6d8f7a20, 0x38acf: 0x6d8f7c20, + 0x38ad0: 0x6d8f7e20, 0x38ad1: 0x6d8f8020, 0x38ad2: 0x6d8f8220, 0x38ad3: 0x6d8f8420, + 0x38ad4: 0x6d8f8620, 0x38ad5: 0x6d8f8820, 0x38ad6: 0x6d8f8a20, 0x38ad7: 0x6d8f8c20, + 0x38ad8: 0x6d8f8e20, 0x38ad9: 0x6d8f9020, 0x38ada: 0x6d8f9220, 0x38adb: 0x6d8f9420, + 0x38adc: 0x6d8f9620, 0x38add: 0x6d8f9820, 0x38ade: 0x6d8f9a20, 0x38adf: 0x6d8f9c20, + 0x38ae0: 0x6d8f9e20, 0x38ae1: 0x6d8fa020, 0x38ae2: 0x6d8fa220, 0x38ae3: 0x6d8fa420, + 0x38ae4: 0x6d8fa620, 0x38ae5: 0x6d8fa820, 0x38ae6: 0x6d8faa20, 0x38ae7: 0x6d8fac20, + 0x38ae8: 0x6d8fae20, 0x38ae9: 0x6db27020, 0x38aea: 0x6db27220, 0x38aeb: 0x6db27420, + 0x38aec: 0x6db27620, 0x38aed: 0x6db27820, 0x38aee: 0x6db27a20, 0x38aef: 0x6db27c20, + 0x38af0: 0x6db27e20, 0x38af1: 0x6db28020, 0x38af2: 0x6db28220, 0x38af3: 0x6db28420, + 0x38af4: 0x6db28620, 0x38af5: 0x6db28820, 0x38af6: 0x6db28a20, 0x38af7: 0x6db28c20, + 0x38af8: 0x6db28e20, 0x38af9: 0x6db29020, 0x38afa: 0x6db29220, 0x38afb: 0x6db29420, + 0x38afc: 0x6db29620, 0x38afd: 0x6db29820, 0x38afe: 0x6db29a20, 0x38aff: 0x6db29c20, + // Block 0xe2c, offset 0x38b00 + 0x38b00: 0x6db29e20, 0x38b01: 0x6db2a020, 0x38b02: 0x6db2a220, 0x38b03: 0x6db2a420, + 0x38b04: 0x6db2a620, 0x38b05: 0x6db2a820, 0x38b06: 0x6db2aa20, 0x38b07: 0x6db2ac20, + 0x38b08: 0x6db2ae20, 0x38b09: 0x6db2b020, 0x38b0a: 0x6db2b220, 0x38b0b: 0x6db2b420, + 0x38b0c: 0x6db2b620, 0x38b0d: 0x6db2b820, 0x38b0e: 0x6db2ba20, 0x38b0f: 0x6db2bc20, + 0x38b10: 0x6db2be20, 0x38b11: 0x6db2c020, 0x38b12: 0x6db2c220, 0x38b13: 0x6db2c420, + 0x38b14: 0x6db2c620, 0x38b15: 0x6db2c820, 0x38b16: 0x6db2ca20, 0x38b17: 0x6db2cc20, + 0x38b18: 0x6db2ce20, 0x38b19: 0x6db2d020, 0x38b1a: 0x6db2d220, 0x38b1b: 0x6db2d420, + 0x38b1c: 0x6db2d620, 0x38b1d: 0x6db2d820, 0x38b1e: 0x6db2da20, 0x38b1f: 0x6db2dc20, + 0x38b20: 0x6db2de20, 0x38b21: 0x6db2e020, 0x38b22: 0x6db2e220, 0x38b23: 0x6db2e420, + 0x38b24: 0x6db2e620, 0x38b25: 0x6db2e820, 0x38b26: 0x6db2ea20, 0x38b27: 0x6db2ec20, + 0x38b28: 0x6db2ee20, 0x38b29: 0x6db2f020, 0x38b2a: 0x6db2f220, 0x38b2b: 0x6db2f420, + 0x38b2c: 0x6db2f620, 0x38b2d: 0x6d8fb020, 0x38b2e: 0x6db2f820, 0x38b2f: 0x6db2fa20, + 0x38b30: 0x6db2fc20, 0x38b31: 0x6db2fe20, 0x38b32: 0x6db30020, 0x38b33: 0x6db30220, + 0x38b34: 0x6db30420, 0x38b35: 0x6db30620, 0x38b36: 0x6db30820, 0x38b37: 0x6db30a20, + 0x38b38: 0x6db30c20, 0x38b39: 0x6db30e20, 0x38b3a: 0x6db31020, 0x38b3b: 0x6db31220, + 0x38b3c: 0x6db31420, 0x38b3d: 0x6db31620, 0x38b3e: 0x6db31820, 0x38b3f: 0x6db31a20, + // Block 0xe2d, offset 0x38b40 + 0x38b40: 0x6db31c20, 0x38b41: 0x6db31e20, 0x38b42: 0x6db32020, 0x38b43: 0x6db32220, + 0x38b44: 0x6db32420, 0x38b45: 0x6db32620, 0x38b46: 0x6db32820, 0x38b47: 0x6db32a20, + 0x38b48: 0x6db32c20, 0x38b49: 0x6db32e20, 0x38b4a: 0x6db33020, 0x38b4b: 0x6db33220, + 0x38b4c: 0x6db33420, 0x38b4d: 0x6db33620, 0x38b4e: 0x6db33820, 0x38b4f: 0x6db33a20, + 0x38b50: 0x6db33c20, 0x38b51: 0x6db33e20, 0x38b52: 0x6db34020, 0x38b53: 0x6db34220, + 0x38b54: 0x6db34420, 0x38b55: 0x6db34620, 0x38b56: 0x6db34820, 0x38b57: 0x6db34a20, + 0x38b58: 0x6db34c20, 0x38b59: 0x6db34e20, 0x38b5a: 0x6db35020, 0x38b5b: 0x6db35220, + 0x38b5c: 0x6db35420, 0x38b5d: 0x6db35620, 0x38b5e: 0x6db35820, 0x38b5f: 0x6db35a20, + 0x38b60: 0x6db35c20, 0x38b61: 0x6db35e20, 0x38b62: 0x6db36020, 0x38b63: 0x6db36220, + 0x38b64: 0x6db36420, 0x38b65: 0x6db36620, 0x38b66: 0x6db36820, 0x38b67: 0x6db36a20, + 0x38b68: 0x6db36c20, 0x38b69: 0x6db36e20, 0x38b6a: 0x6dd19420, 0x38b6b: 0x6dd19620, + 0x38b6c: 0x6dd19820, 0x38b6d: 0x6dd19a20, 0x38b6e: 0x6dd19c20, 0x38b6f: 0x6dd19e20, + 0x38b70: 0x6dd1a020, 0x38b71: 0x6dd1a220, 0x38b72: 0x6dd1a420, 0x38b73: 0x6dd1a620, + 0x38b74: 0x6dd1a820, 0x38b75: 0x6dd1aa20, 0x38b76: 0x6dd1ac20, 0x38b77: 0x6dd1ae20, + 0x38b78: 0x6dd1b020, 0x38b79: 0x6dd1b220, 0x38b7a: 0x6dd1b420, 0x38b7b: 0x6dd1b620, + 0x38b7c: 0x6dd1b820, 0x38b7d: 0x6dd1ba20, 0x38b7e: 0x6dd1bc20, 0x38b7f: 0x6dd1be20, + // Block 0xe2e, offset 0x38b80 + 0x38b80: 0x6dd1c020, 0x38b81: 0x6dd1c220, 0x38b82: 0x6dd1c420, 0x38b83: 0x6dd1c620, + 0x38b84: 0x6dd1c820, 0x38b85: 0x6dd1ca20, 0x38b86: 0x6dd1cc20, 0x38b87: 0x6dd1ce20, + 0x38b88: 0x6dd1d020, 0x38b89: 0x6dd1d220, 0x38b8a: 0x6dd1d420, 0x38b8b: 0x6dd1d620, + 0x38b8c: 0x6dd1d820, 0x38b8d: 0x6dd1da20, 0x38b8e: 0x6dd1dc20, 0x38b8f: 0x6dd1de20, + 0x38b90: 0x6dd1e020, 0x38b91: 0x6dd1e220, 0x38b92: 0x6dd1e420, 0x38b93: 0x6dd1e620, + 0x38b94: 0x6deb0220, 0x38b95: 0x6deb0420, 0x38b96: 0x6dd1e820, 0x38b97: 0x6dd1ea20, + 0x38b98: 0x6dd1ec20, 0x38b99: 0x6dd1ee20, 0x38b9a: 0x6dd1f020, 0x38b9b: 0x6dd1f220, + 0x38b9c: 0x6dd1f420, 0x38b9d: 0x6deb0620, 0x38b9e: 0x6dd1f620, 0x38b9f: 0x6dd1f820, + 0x38ba0: 0x6dd1fa20, 0x38ba1: 0x6db37020, 0x38ba2: 0x6dd1fc20, 0x38ba3: 0x6dd1fe20, + 0x38ba4: 0x6dd20020, 0x38ba5: 0x6dd20220, 0x38ba6: 0x6dd20420, 0x38ba7: 0x6dd20620, + 0x38ba8: 0x6dd20820, 0x38ba9: 0x6dd20a20, 0x38baa: 0x6dd20c20, 0x38bab: 0x6dd20e20, + 0x38bac: 0x6dd21020, 0x38bad: 0x6dd21220, 0x38bae: 0x6dd21420, 0x38baf: 0x6dd21620, + 0x38bb0: 0x6dd21820, 0x38bb1: 0x6dd21a20, 0x38bb2: 0x6dd21c20, 0x38bb3: 0x6dd21e20, + 0x38bb4: 0x6dd22020, 0x38bb5: 0x6dd22220, 0x38bb6: 0x6dd22420, 0x38bb7: 0x6dd22620, + 0x38bb8: 0x6db37220, 0x38bb9: 0x6dd22820, 0x38bba: 0x6dd22a20, 0x38bbb: 0x6dd22c20, + 0x38bbc: 0x6dd22e20, 0x38bbd: 0x6dd23020, 0x38bbe: 0x6dd23220, 0x38bbf: 0x6dd23420, + // Block 0xe2f, offset 0x38bc0 + 0x38bc0: 0x6dd23620, 0x38bc1: 0x6dd23820, 0x38bc2: 0x6dd23a20, 0x38bc3: 0x6dd23c20, + 0x38bc4: 0x6dd23e20, 0x38bc5: 0x6dd24020, 0x38bc6: 0x6dd24220, 0x38bc7: 0x6dd24420, + 0x38bc8: 0x6dd24620, 0x38bc9: 0x6dd24820, 0x38bca: 0x6dd24a20, 0x38bcb: 0x6dd24c20, + 0x38bcc: 0x6dd24e20, 0x38bcd: 0x6dd25020, 0x38bce: 0x6dd25220, 0x38bcf: 0x6dd25420, + 0x38bd0: 0x6dd25620, 0x38bd1: 0x6dd25820, 0x38bd2: 0x6dd25a20, 0x38bd3: 0x6dd25c20, + 0x38bd4: 0x6dd25e20, 0x38bd5: 0x6dd26020, 0x38bd6: 0x6dd26220, 0x38bd7: 0x6dd26420, + 0x38bd8: 0x6dd26620, 0x38bd9: 0x6dd26820, 0x38bda: 0x6dd26a20, 0x38bdb: 0x6dd26c20, + 0x38bdc: 0x6dd26e20, 0x38bdd: 0x6dd27020, 0x38bde: 0x6dd27220, 0x38bdf: 0x6dd27420, + 0x38be0: 0x6deb0820, 0x38be1: 0x6deb0a20, 0x38be2: 0x6deb0c20, 0x38be3: 0x6deb0e20, + 0x38be4: 0x6deb1020, 0x38be5: 0x6deb1220, 0x38be6: 0x6deb1420, 0x38be7: 0x6deb1620, + 0x38be8: 0x6deb1820, 0x38be9: 0x6deb1a20, 0x38bea: 0x6deb1c20, 0x38beb: 0x6deb1e20, + 0x38bec: 0x6deb2020, 0x38bed: 0x6deb2220, 0x38bee: 0x6deb2420, 0x38bef: 0x6deb2620, + 0x38bf0: 0x6deb2820, 0x38bf1: 0x6deb2a20, 0x38bf2: 0x6deb2c20, 0x38bf3: 0x6deb2e20, + 0x38bf4: 0x6deb3020, 0x38bf5: 0x6deb3220, 0x38bf6: 0x6deb3420, 0x38bf7: 0x6deb3620, + 0x38bf8: 0x6deb3820, 0x38bf9: 0x6deb3a20, 0x38bfa: 0x6deb3c20, 0x38bfb: 0x6deb3e20, + 0x38bfc: 0x6deb4020, 0x38bfd: 0x6deb4220, 0x38bfe: 0x6deb4420, 0x38bff: 0x6deb4620, + // Block 0xe30, offset 0x38c00 + 0x38c00: 0x6deb4820, 0x38c01: 0x6deb4a20, 0x38c02: 0x6deb4c20, 0x38c03: 0x6deb4e20, + 0x38c04: 0x6deb5020, 0x38c05: 0x6deb5220, 0x38c06: 0x6deb5420, 0x38c07: 0x6deb5620, + 0x38c08: 0x6deb5820, 0x38c09: 0x6deb5a20, 0x38c0a: 0x6deb5c20, 0x38c0b: 0x6deb5e20, + 0x38c0c: 0x6deb6020, 0x38c0d: 0x6deb6220, 0x38c0e: 0x6deb6420, 0x38c0f: 0x6deb6620, + 0x38c10: 0x6deb6820, 0x38c11: 0x6deb6a20, 0x38c12: 0x6deb6c20, 0x38c13: 0x6deb6e20, + 0x38c14: 0x6deb7020, 0x38c15: 0x6deb7220, 0x38c16: 0x6deb7420, 0x38c17: 0x6deb7620, + 0x38c18: 0x6deb7820, 0x38c19: 0x6deb7a20, 0x38c1a: 0x6deb7c20, 0x38c1b: 0x6deb7e20, + 0x38c1c: 0x6deb8020, 0x38c1d: 0x6deb8220, 0x38c1e: 0x6deb8420, 0x38c1f: 0x6deb8620, + 0x38c20: 0x6deb8820, 0x38c21: 0x6deb8a20, 0x38c22: 0x6deb8c20, 0x38c23: 0x6deb8e20, + 0x38c24: 0x6deb9020, 0x38c25: 0x6deb9220, 0x38c26: 0x6deb9420, 0x38c27: 0x6deb9620, + 0x38c28: 0x6deb9820, 0x38c29: 0x6deb9a20, 0x38c2a: 0x6deb9c20, 0x38c2b: 0x6deb9e20, + 0x38c2c: 0x6deba020, 0x38c2d: 0x6deba220, 0x38c2e: 0x6deba420, 0x38c2f: 0x6deba620, + 0x38c30: 0x6deba820, 0x38c31: 0x6debaa20, 0x38c32: 0x6debac20, 0x38c33: 0x6debae20, + 0x38c34: 0x6debb020, 0x38c35: 0x6debb220, 0x38c36: 0x6debb420, 0x38c37: 0x6debb620, + 0x38c38: 0x6debb820, 0x38c39: 0x6debba20, 0x38c3a: 0x6debbc20, 0x38c3b: 0x6e00a820, + 0x38c3c: 0x6e00aa20, 0x38c3d: 0x6e00ac20, 0x38c3e: 0x6e00ae20, 0x38c3f: 0x6e00b020, + // Block 0xe31, offset 0x38c40 + 0x38c40: 0x6e00b220, 0x38c41: 0x6e00b420, 0x38c42: 0x6e00b620, 0x38c43: 0x6e00b820, + 0x38c44: 0x6e00ba20, 0x38c45: 0x6e00bc20, 0x38c46: 0x6e00be20, 0x38c47: 0x6e00c020, + 0x38c48: 0x6e00c220, 0x38c49: 0x6e00c420, 0x38c4a: 0x6e00c620, 0x38c4b: 0x6e00c820, + 0x38c4c: 0x6e00ca20, 0x38c4d: 0x6e00cc20, 0x38c4e: 0x6e00ce20, 0x38c4f: 0x6e00d020, + 0x38c50: 0x6e00d220, 0x38c51: 0x6e00d420, 0x38c52: 0x6e00d620, 0x38c53: 0x6e00d820, + 0x38c54: 0x6e00da20, 0x38c55: 0x6e00dc20, 0x38c56: 0x6e00de20, 0x38c57: 0x6e00e020, + 0x38c58: 0x6e00e220, 0x38c59: 0x6e00e420, 0x38c5a: 0x6e00e620, 0x38c5b: 0x6e00e820, + 0x38c5c: 0x6e00ea20, 0x38c5d: 0x6e00ec20, 0x38c5e: 0x6e00ee20, 0x38c5f: 0x6e00f020, + 0x38c60: 0x6e00f220, 0x38c61: 0x6e00f420, 0x38c62: 0x6e00f620, 0x38c63: 0x6e00f820, + 0x38c64: 0x6e00fa20, 0x38c65: 0x6e00fc20, 0x38c66: 0x6e00fe20, 0x38c67: 0x6e010020, + 0x38c68: 0x6e010220, 0x38c69: 0x6e010420, 0x38c6a: 0x6e010620, 0x38c6b: 0x6e010820, + 0x38c6c: 0x6e010a20, 0x38c6d: 0x6e010c20, 0x38c6e: 0x6e010e20, 0x38c6f: 0x6e011020, + 0x38c70: 0x6e011220, 0x38c71: 0x6e011420, 0x38c72: 0x6e011620, 0x38c73: 0x6e011820, + 0x38c74: 0x6e011a20, 0x38c75: 0x6e011c20, 0x38c76: 0x6e011e20, 0x38c77: 0x6e012020, + 0x38c78: 0x6e012220, 0x38c79: 0x6e012420, 0x38c7a: 0x6e012620, 0x38c7b: 0x6e012820, + 0x38c7c: 0x6e012a20, 0x38c7d: 0x6e012c20, 0x38c7e: 0x6e012e20, 0x38c7f: 0x6e013020, + // Block 0xe32, offset 0x38c80 + 0x38c80: 0x6e013220, 0x38c81: 0x6e013420, 0x38c82: 0x6e013620, 0x38c83: 0x6e013820, + 0x38c84: 0x6e013a20, 0x38c85: 0x6e013c20, 0x38c86: 0x6e013e20, 0x38c87: 0x6e014020, + 0x38c88: 0x6e014220, 0x38c89: 0x6e014420, 0x38c8a: 0x6e014620, 0x38c8b: 0x6e014820, + 0x38c8c: 0x6debbe20, 0x38c8d: 0x6e12ba20, 0x38c8e: 0x6e014a20, 0x38c8f: 0x6e12bc20, + 0x38c90: 0x6e12be20, 0x38c91: 0x6e12c020, 0x38c92: 0x6e12c220, 0x38c93: 0x6e12c420, + 0x38c94: 0x6e12c620, 0x38c95: 0x6e12c820, 0x38c96: 0x6e12ca20, 0x38c97: 0x6e12cc20, + 0x38c98: 0x6e12ce20, 0x38c99: 0x6e12d020, 0x38c9a: 0x6e12d220, 0x38c9b: 0x6e12d420, + 0x38c9c: 0x6e12d620, 0x38c9d: 0x6e12d820, 0x38c9e: 0x6e12da20, 0x38c9f: 0x6e12dc20, + 0x38ca0: 0x6e12de20, 0x38ca1: 0x6e12e020, 0x38ca2: 0x6e12e220, 0x38ca3: 0x6e12e420, + 0x38ca4: 0x6e12e620, 0x38ca5: 0x6e12e820, 0x38ca6: 0x6e12ea20, 0x38ca7: 0x6e12ec20, + 0x38ca8: 0x6e12ee20, 0x38ca9: 0x6e12f020, 0x38caa: 0x6e12f220, 0x38cab: 0x6e12f420, + 0x38cac: 0x6e12f620, 0x38cad: 0x6e12f820, 0x38cae: 0x6e12fa20, 0x38caf: 0x6e12fc20, + 0x38cb0: 0x6e12fe20, 0x38cb1: 0x6e130020, 0x38cb2: 0x6e130220, 0x38cb3: 0x6e130420, + 0x38cb4: 0x6e130620, 0x38cb5: 0x6e130820, 0x38cb6: 0x6e130a20, 0x38cb7: 0x6e130c20, + 0x38cb8: 0x6e130e20, 0x38cb9: 0x6e131020, 0x38cba: 0x6e131220, 0x38cbb: 0x6e131420, + 0x38cbc: 0x6e131620, 0x38cbd: 0x6e131820, 0x38cbe: 0x6e131a20, 0x38cbf: 0x6e131c20, + // Block 0xe33, offset 0x38cc0 + 0x38cc0: 0x6e131e20, 0x38cc1: 0x6e132020, 0x38cc2: 0x6e132220, 0x38cc3: 0x6e132420, + 0x38cc4: 0x6e132620, 0x38cc5: 0x6e132820, 0x38cc6: 0x6e132a20, 0x38cc7: 0x6e132c20, + 0x38cc8: 0x6e132e20, 0x38cc9: 0x6e133020, 0x38cca: 0x6e133220, 0x38ccb: 0x6e133420, + 0x38ccc: 0x6e133620, 0x38ccd: 0x6e20c620, 0x38cce: 0x6e20c820, 0x38ccf: 0x6e20ca20, + 0x38cd0: 0x6e20cc20, 0x38cd1: 0x6e20ce20, 0x38cd2: 0x6e20d020, 0x38cd3: 0x6e20d220, + 0x38cd4: 0x6e20d420, 0x38cd5: 0x6e20d620, 0x38cd6: 0x6e20d820, 0x38cd7: 0x6e20da20, + 0x38cd8: 0x6e20dc20, 0x38cd9: 0x6e20de20, 0x38cda: 0x6e20e020, 0x38cdb: 0x6e20e220, + 0x38cdc: 0x6e20e420, 0x38cdd: 0x6e20e620, 0x38cde: 0x6e20e820, 0x38cdf: 0x6e20ea20, + 0x38ce0: 0x6e20ec20, 0x38ce1: 0x6e20ee20, 0x38ce2: 0x6e20f020, 0x38ce3: 0x6e20f220, + 0x38ce4: 0x6e20f420, 0x38ce5: 0x6e20f620, 0x38ce6: 0x6e20f820, 0x38ce7: 0x6e20fa20, + 0x38ce8: 0x6e20fc20, 0x38ce9: 0x6e20fe20, 0x38cea: 0x6e210020, 0x38ceb: 0x6e210220, + 0x38cec: 0x6e210420, 0x38ced: 0x6e210620, 0x38cee: 0x6e210820, 0x38cef: 0x6e210a20, + 0x38cf0: 0x6e210c20, 0x38cf1: 0x6e210e20, 0x38cf2: 0x6e211020, 0x38cf3: 0x6e211220, + 0x38cf4: 0x6e211420, 0x38cf5: 0x6e211620, 0x38cf6: 0x6e2b9420, 0x38cf7: 0x6e2b9620, + 0x38cf8: 0x6e2b9820, 0x38cf9: 0x6e2b9a20, 0x38cfa: 0x6e2b9c20, 0x38cfb: 0x6e2b9e20, + 0x38cfc: 0x6e2ba020, 0x38cfd: 0x6e2ba220, 0x38cfe: 0x6e2ba420, 0x38cff: 0x6e2ba620, + // Block 0xe34, offset 0x38d00 + 0x38d00: 0x6e2ba820, 0x38d01: 0x6e2baa20, 0x38d02: 0x6e2bac20, 0x38d03: 0x6e2bae20, + 0x38d04: 0x6e2bb020, 0x38d05: 0x6e2bb220, 0x38d06: 0x6e2bb420, 0x38d07: 0x6e2bb620, + 0x38d08: 0x6e2bb820, 0x38d09: 0x6e2bba20, 0x38d0a: 0x6e2bbc20, 0x38d0b: 0x6e2bbe20, + 0x38d0c: 0x6e2bc020, 0x38d0d: 0x6e2bc220, 0x38d0e: 0x6e2bc420, 0x38d0f: 0x6e2bc620, + 0x38d10: 0x6e2bc820, 0x38d11: 0x6e2bca20, 0x38d12: 0x6e2bcc20, 0x38d13: 0x6e2bce20, + 0x38d14: 0x6e2bd020, 0x38d15: 0x6e2bd220, 0x38d16: 0x6e33f020, 0x38d17: 0x6e33f220, + 0x38d18: 0x6e33f420, 0x38d19: 0x6e33f620, 0x38d1a: 0x6e33f820, 0x38d1b: 0x6e33fa20, + 0x38d1c: 0x6e33fc20, 0x38d1d: 0x6e33fe20, 0x38d1e: 0x6e340020, 0x38d1f: 0x6e340220, + 0x38d20: 0x6e340420, 0x38d21: 0x6e340620, 0x38d22: 0x6e340820, 0x38d23: 0x6e340a20, + 0x38d24: 0x6e340c20, 0x38d25: 0x6e340e20, 0x38d26: 0x6e341020, 0x38d27: 0x6e341220, + 0x38d28: 0x6e341420, 0x38d29: 0x6e341620, 0x38d2a: 0x6e341820, 0x38d2b: 0x6e341a20, + 0x38d2c: 0x6e341c20, 0x38d2d: 0x6e341e20, 0x38d2e: 0x6e39d420, 0x38d2f: 0x6e39d620, + 0x38d30: 0x6e39d820, 0x38d31: 0x6e39da20, 0x38d32: 0x6e39dc20, 0x38d33: 0x6e39de20, + 0x38d34: 0x6e39e020, 0x38d35: 0x6e42f020, 0x38d36: 0x6e39e220, 0x38d37: 0x6e39e420, + 0x38d38: 0x6e39e620, 0x38d39: 0x6e39e820, 0x38d3a: 0x6e3df620, 0x38d3b: 0x6e3df820, + 0x38d3c: 0x6e3dfa20, 0x38d3d: 0x6e3dfc20, 0x38d3e: 0x6e3dfe20, 0x38d3f: 0x6e3e0020, + // Block 0xe35, offset 0x38d40 + 0x38d40: 0x6e3e0220, 0x38d41: 0x6e3e0420, 0x38d42: 0x6e3e0620, 0x38d43: 0x6e3e0820, + 0x38d44: 0x6e3e0a20, 0x38d45: 0x6e3e0c20, 0x38d46: 0x6e394c20, 0x38d47: 0x6e40ce20, + 0x38d48: 0x6e40d020, 0x38d49: 0x6e40d220, 0x38d4a: 0x6e40d420, 0x38d4b: 0x6e40d620, + 0x38d4c: 0x6e40d820, 0x38d4d: 0x6e40da20, 0x38d4e: 0x6e40dc20, 0x38d4f: 0x6e42f220, + 0x38d50: 0x6e42f420, 0x38d51: 0x6e42f620, 0x38d52: 0x6e42f820, 0x38d53: 0x6e470220, + 0x38d54: 0x6e446820, 0x38d55: 0x6e446a20, 0x38d56: 0x6e454e20, 0x38d57: 0x6e45d020, + 0x38d58: 0x6e472e20, 0x38d59: 0x6e468c20, 0x38d5a: 0x6e455020, 0x38d5b: 0x6c401420, + 0x38d5c: 0x6c5f9820, 0x38d5d: 0x6c5f9a20, 0x38d5e: 0x6c5f9c20, 0x38d5f: 0x6c84d420, + 0x38d60: 0x6c84d620, 0x38d61: 0x6c84d820, 0x38d62: 0x6c84da20, 0x38d63: 0x6cae3220, + 0x38d64: 0x6cae3420, 0x38d65: 0x6cae3620, 0x38d66: 0x6cae3820, 0x38d67: 0x6cae3a20, + 0x38d68: 0x6cae3c20, 0x38d69: 0x6cae3e20, 0x38d6a: 0x6cae4020, 0x38d6b: 0x6cae4220, + 0x38d6c: 0x6cae4420, 0x38d6d: 0x6cae4620, 0x38d6e: 0x6cae4820, 0x38d6f: 0x6cae4a20, + 0x38d70: 0x6cae4c20, 0x38d71: 0x6cdd5020, 0x38d72: 0x6cdd5220, 0x38d73: 0x6cdd5420, + 0x38d74: 0x6cdd5620, 0x38d75: 0x6cdd5820, 0x38d76: 0x6cdd5a20, 0x38d77: 0x6cdd5c20, + 0x38d78: 0x6cdd5e20, 0x38d79: 0x6cdd6020, 0x38d7a: 0x6d0bd020, 0x38d7b: 0x6d0bd220, + 0x38d7c: 0x6d0bd420, 0x38d7d: 0x6d0bd620, 0x38d7e: 0x6d0bd820, 0x38d7f: 0x6d0bda20, + // Block 0xe36, offset 0x38d80 + 0x38d80: 0x6d0bdc20, 0x38d81: 0x6d39be20, 0x38d82: 0x6d39c020, 0x38d83: 0x6d39c220, + 0x38d84: 0x6d39c420, 0x38d85: 0x6d39c620, 0x38d86: 0x6d39c820, 0x38d87: 0x6d39ca20, + 0x38d88: 0x6d39cc20, 0x38d89: 0x6d39ce20, 0x38d8a: 0x6d39d020, 0x38d8b: 0x6d39d220, + 0x38d8c: 0x6d39d420, 0x38d8d: 0x6d39d620, 0x38d8e: 0x6d39d820, 0x38d8f: 0x6d65f820, + 0x38d90: 0x6d65fa20, 0x38d91: 0x6d65fc20, 0x38d92: 0x6d65fe20, 0x38d93: 0x6d660020, + 0x38d94: 0x6d660220, 0x38d95: 0x6d660420, 0x38d96: 0x6d660620, 0x38d97: 0x6d660820, + 0x38d98: 0x6d660a20, 0x38d99: 0x6d660c20, 0x38d9a: 0x6d660e20, 0x38d9b: 0x6d661020, + 0x38d9c: 0x6d8fd020, 0x38d9d: 0x6d8fd220, 0x38d9e: 0x6d8fd420, 0x38d9f: 0x6d8fd620, + 0x38da0: 0x6d8fd820, 0x38da1: 0x6d8fda20, 0x38da2: 0x6d8fdc20, 0x38da3: 0x6d8fde20, + 0x38da4: 0x6d8fe020, 0x38da5: 0x6d8fe220, 0x38da6: 0x6d8fe420, 0x38da7: 0x6d8fe620, + 0x38da8: 0x6d8fe820, 0x38da9: 0x6d8fea20, 0x38daa: 0x6d8fec20, 0x38dab: 0x6d8fee20, + 0x38dac: 0x6d8ff020, 0x38dad: 0x6d8ff220, 0x38dae: 0x6d8ff420, 0x38daf: 0x6d8ff620, + 0x38db0: 0x6d8ff820, 0x38db1: 0x6db39e20, 0x38db2: 0x6db3a020, 0x38db3: 0x6db3a220, + 0x38db4: 0x6db3a420, 0x38db5: 0x6db3a620, 0x38db6: 0x6db3a820, 0x38db7: 0x6db3aa20, + 0x38db8: 0x6db3ac20, 0x38db9: 0x6db3ae20, 0x38dba: 0x6db3b020, 0x38dbb: 0x6dd29c20, + 0x38dbc: 0x6dd29e20, 0x38dbd: 0x6dd2a020, 0x38dbe: 0x6dd2a220, 0x38dbf: 0x6dd2a420, + // Block 0xe37, offset 0x38dc0 + 0x38dc0: 0x6dd2a620, 0x38dc1: 0x6dd2a820, 0x38dc2: 0x6debd420, 0x38dc3: 0x6dd2aa20, + 0x38dc4: 0x6dd2ac20, 0x38dc5: 0x6debd620, 0x38dc6: 0x6debd820, 0x38dc7: 0x6debda20, + 0x38dc8: 0x6debdc20, 0x38dc9: 0x6debde20, 0x38dca: 0x6debe020, 0x38dcb: 0x6e015a20, + 0x38dcc: 0x6e015c20, 0x38dcd: 0x6e015e20, 0x38dce: 0x6e016020, 0x38dcf: 0x6e016220, + 0x38dd0: 0x6df39420, 0x38dd1: 0x6e134220, 0x38dd2: 0x6e134420, 0x38dd3: 0x6e134620, + 0x38dd4: 0x6e134820, 0x38dd5: 0x6e134a20, 0x38dd6: 0x6e134c20, 0x38dd7: 0x6e134e20, + 0x38dd8: 0x6e211e20, 0x38dd9: 0x6e212020, 0x38dda: 0x6e2bd620, 0x38ddb: 0x6e2bd820, + 0x38ddc: 0x6e3e1420, 0x38ddd: 0x6c268c20, 0x38dde: 0x6c268e20, 0x38ddf: 0x6c402220, + 0x38de0: 0x6c402420, 0x38de1: 0x6c402620, 0x38de2: 0x6c402820, 0x38de3: 0x6c402a20, + 0x38de4: 0x6c402c20, 0x38de5: 0x6c402e20, 0x38de6: 0x6c403020, 0x38de7: 0x6c403220, + 0x38de8: 0x6c5fcc20, 0x38de9: 0x6c5fce20, 0x38dea: 0x6c5fd020, 0x38deb: 0x6c5fd220, + 0x38dec: 0x6c5fd420, 0x38ded: 0x6c5fd620, 0x38dee: 0x6c5fd820, 0x38def: 0x6c5fda20, + 0x38df0: 0x6c5fdc20, 0x38df1: 0x6c5fde20, 0x38df2: 0x6c5fe020, 0x38df3: 0x6c5fe220, + 0x38df4: 0x6c5fe420, 0x38df5: 0x6c5fe620, 0x38df6: 0x6c5fe820, 0x38df7: 0x6c5fea20, + 0x38df8: 0x6c5fec20, 0x38df9: 0x6c5fee20, 0x38dfa: 0x6c5ff020, 0x38dfb: 0x6c853220, + 0x38dfc: 0x6c853420, 0x38dfd: 0x6c853620, 0x38dfe: 0x6c853820, 0x38dff: 0x6c853a20, + // Block 0xe38, offset 0x38e00 + 0x38e00: 0x6c853c20, 0x38e01: 0x6c853e20, 0x38e02: 0x6c854020, 0x38e03: 0x6c854220, + 0x38e04: 0x6c854420, 0x38e05: 0x6c854620, 0x38e06: 0x6c854820, 0x38e07: 0x6c854a20, + 0x38e08: 0x6c854c20, 0x38e09: 0x6c854e20, 0x38e0a: 0x6c855020, 0x38e0b: 0x6c855220, + 0x38e0c: 0x6c855420, 0x38e0d: 0x6c855620, 0x38e0e: 0x6c855820, 0x38e0f: 0x6c855a20, + 0x38e10: 0x6c855c20, 0x38e11: 0x6c855e20, 0x38e12: 0x6c856020, 0x38e13: 0x6c856220, + 0x38e14: 0x6c856420, 0x38e15: 0x6c856620, 0x38e16: 0x6c856820, 0x38e17: 0x6c856a20, + 0x38e18: 0x6c856c20, 0x38e19: 0x6c856e20, 0x38e1a: 0x6c857020, 0x38e1b: 0x6c857220, + 0x38e1c: 0x6c857420, 0x38e1d: 0x6c857620, 0x38e1e: 0x6caeaa20, 0x38e1f: 0x6caeac20, + 0x38e20: 0x6caeae20, 0x38e21: 0x6caeb020, 0x38e22: 0x6caeb220, 0x38e23: 0x6caeb420, + 0x38e24: 0x6caeb620, 0x38e25: 0x6caeb820, 0x38e26: 0x6caeba20, 0x38e27: 0x6caebc20, + 0x38e28: 0x6caebe20, 0x38e29: 0x6caec020, 0x38e2a: 0x6caec220, 0x38e2b: 0x6caec420, + 0x38e2c: 0x6caec620, 0x38e2d: 0x6caec820, 0x38e2e: 0x6caeca20, 0x38e2f: 0x6caecc20, + 0x38e30: 0x6caece20, 0x38e31: 0x6caed020, 0x38e32: 0x6caed220, 0x38e33: 0x6caed420, + 0x38e34: 0x6caed620, 0x38e35: 0x6caed820, 0x38e36: 0x6caeda20, 0x38e37: 0x6caedc20, + 0x38e38: 0x6caede20, 0x38e39: 0x6caee020, 0x38e3a: 0x6caee220, 0x38e3b: 0x6caee420, + 0x38e3c: 0x6caee620, 0x38e3d: 0x6caee820, 0x38e3e: 0x6caeea20, 0x38e3f: 0x6caeec20, + // Block 0xe39, offset 0x38e40 + 0x38e40: 0x6caeee20, 0x38e41: 0x6caef020, 0x38e42: 0x6caef220, 0x38e43: 0x6caef420, + 0x38e44: 0x6caef620, 0x38e45: 0x6caef820, 0x38e46: 0x6caefa20, 0x38e47: 0x6caefc20, + 0x38e48: 0x6caefe20, 0x38e49: 0x6caf0020, 0x38e4a: 0x6caf0220, 0x38e4b: 0x6caf0420, + 0x38e4c: 0x6caf0620, 0x38e4d: 0x6caf0820, 0x38e4e: 0x6caf0a20, 0x38e4f: 0x6cddc220, + 0x38e50: 0x6cddc420, 0x38e51: 0x6cddc620, 0x38e52: 0x6cddc820, 0x38e53: 0x6cddca20, + 0x38e54: 0x6cddcc20, 0x38e55: 0x6cddce20, 0x38e56: 0x6cddd020, 0x38e57: 0x6cddd220, + 0x38e58: 0x6cddd420, 0x38e59: 0x6cddd620, 0x38e5a: 0x6cddd820, 0x38e5b: 0x6cddda20, + 0x38e5c: 0x6cdddc20, 0x38e5d: 0x6cddde20, 0x38e5e: 0x6cdde020, 0x38e5f: 0x6cdde220, + 0x38e60: 0x6cdde420, 0x38e61: 0x6cdde620, 0x38e62: 0x6cdde820, 0x38e63: 0x6cddea20, + 0x38e64: 0x6cddec20, 0x38e65: 0x6cddee20, 0x38e66: 0x6cddf020, 0x38e67: 0x6cddf220, + 0x38e68: 0x6cddf420, 0x38e69: 0x6cddf620, 0x38e6a: 0x6cddf820, 0x38e6b: 0x6d0c3620, + 0x38e6c: 0x6cddfa20, 0x38e6d: 0x6cddfc20, 0x38e6e: 0x6d0c3820, 0x38e6f: 0x6cddfe20, + 0x38e70: 0x6cde0020, 0x38e71: 0x6cde0220, 0x38e72: 0x6cde0420, 0x38e73: 0x6cde0620, + 0x38e74: 0x6cde0820, 0x38e75: 0x6cde0a20, 0x38e76: 0x6cde0c20, 0x38e77: 0x6cde0e20, + 0x38e78: 0x6cde1020, 0x38e79: 0x6cde1220, 0x38e7a: 0x6cde1420, 0x38e7b: 0x6cde1620, + 0x38e7c: 0x6cde1820, 0x38e7d: 0x6cde1a20, 0x38e7e: 0x6cde1c20, 0x38e7f: 0x6cde1e20, + // Block 0xe3a, offset 0x38e80 + 0x38e80: 0x6cde2020, 0x38e81: 0x6cde2220, 0x38e82: 0x6cde2420, 0x38e83: 0x6cde2620, + 0x38e84: 0x6cde2820, 0x38e85: 0x6cde2a20, 0x38e86: 0x6cde2c20, 0x38e87: 0x6cde2e20, + 0x38e88: 0x6d0c3a20, 0x38e89: 0x6d0c3c20, 0x38e8a: 0x6d0c3e20, 0x38e8b: 0x6d0c4020, + 0x38e8c: 0x6d0c4220, 0x38e8d: 0x6d0c4420, 0x38e8e: 0x6d0c4620, 0x38e8f: 0x6d0c4820, + 0x38e90: 0x6d0c4a20, 0x38e91: 0x6d0c4c20, 0x38e92: 0x6d0c4e20, 0x38e93: 0x6d0c5020, + 0x38e94: 0x6d0c5220, 0x38e95: 0x6d0c5420, 0x38e96: 0x6d0c5620, 0x38e97: 0x6d0c5820, + 0x38e98: 0x6d0c5a20, 0x38e99: 0x6d0c5c20, 0x38e9a: 0x6d0c5e20, 0x38e9b: 0x6d0c6020, + 0x38e9c: 0x6d0c6220, 0x38e9d: 0x6d0c6420, 0x38e9e: 0x6d3a6020, 0x38e9f: 0x6d0c6620, + 0x38ea0: 0x6d0c6820, 0x38ea1: 0x6d0c6a20, 0x38ea2: 0x6d0c6c20, 0x38ea3: 0x6d0c6e20, + 0x38ea4: 0x6d0c7020, 0x38ea5: 0x6d0c7220, 0x38ea6: 0x6d0c7420, 0x38ea7: 0x6d0c7620, + 0x38ea8: 0x6d0c7820, 0x38ea9: 0x6d0c7a20, 0x38eaa: 0x6d0c7c20, 0x38eab: 0x6d0c7e20, + 0x38eac: 0x6d0c8020, 0x38ead: 0x6d0c8220, 0x38eae: 0x6d0c8420, 0x38eaf: 0x6d0c8620, + 0x38eb0: 0x6d0c8820, 0x38eb1: 0x6d0c8a20, 0x38eb2: 0x6d0c8c20, 0x38eb3: 0x6d0c8e20, + 0x38eb4: 0x6d0c9020, 0x38eb5: 0x6d0c9220, 0x38eb6: 0x6d0c9420, 0x38eb7: 0x6d0c9620, + 0x38eb8: 0x6d0c9820, 0x38eb9: 0x6d0c9a20, 0x38eba: 0x6d0c9c20, 0x38ebb: 0x6d0c9e20, + 0x38ebc: 0x6d0ca020, 0x38ebd: 0x6d0ca220, 0x38ebe: 0x6d0ca420, 0x38ebf: 0x6d0ca620, + // Block 0xe3b, offset 0x38ec0 + 0x38ec0: 0x6d0ca820, 0x38ec1: 0x6d0caa20, 0x38ec2: 0x6d0cac20, 0x38ec3: 0x6d3a6220, + 0x38ec4: 0x6d3a6420, 0x38ec5: 0x6d3a6620, 0x38ec6: 0x6d3a6820, 0x38ec7: 0x6d3a6a20, + 0x38ec8: 0x6d3a6c20, 0x38ec9: 0x6d3a6e20, 0x38eca: 0x6d3a7020, 0x38ecb: 0x6d3a7220, + 0x38ecc: 0x6d3a7420, 0x38ecd: 0x6d3a7620, 0x38ece: 0x6d3a7820, 0x38ecf: 0x6d3a7a20, + 0x38ed0: 0x6d3a7c20, 0x38ed1: 0x6d3a7e20, 0x38ed2: 0x6d3a8020, 0x38ed3: 0x6d3a8220, + 0x38ed4: 0x6d3a8420, 0x38ed5: 0x6d3a8620, 0x38ed6: 0x6d3a8820, 0x38ed7: 0x6d3a8a20, + 0x38ed8: 0x6d3a8c20, 0x38ed9: 0x6d3a8e20, 0x38eda: 0x6d3a9020, 0x38edb: 0x6d3a9220, + 0x38edc: 0x6d3a9420, 0x38edd: 0x6d3a9620, 0x38ede: 0x6d0cae20, 0x38edf: 0x6d3a9820, + 0x38ee0: 0x6d3a9a20, 0x38ee1: 0x6d3a9c20, 0x38ee2: 0x6d3a9e20, 0x38ee3: 0x6d3aa020, + 0x38ee4: 0x6d3aa220, 0x38ee5: 0x6d3aa420, 0x38ee6: 0x6d3aa620, 0x38ee7: 0x6d3aa820, + 0x38ee8: 0x6d3aaa20, 0x38ee9: 0x6d3aac20, 0x38eea: 0x6d3aae20, 0x38eeb: 0x6d3ab020, + 0x38eec: 0x6d3ab220, 0x38eed: 0x6d3ab420, 0x38eee: 0x6d3ab620, 0x38eef: 0x6d3ab820, + 0x38ef0: 0x6d668c20, 0x38ef1: 0x6d3aba20, 0x38ef2: 0x6d3abc20, 0x38ef3: 0x6d3abe20, + 0x38ef4: 0x6d3ac020, 0x38ef5: 0x6d3ac220, 0x38ef6: 0x6d3ac420, 0x38ef7: 0x6d3ac620, + 0x38ef8: 0x6d3ac820, 0x38ef9: 0x6d3aca20, 0x38efa: 0x6d3acc20, 0x38efb: 0x6d3ace20, + 0x38efc: 0x6d3ad020, 0x38efd: 0x6d3ad220, 0x38efe: 0x6d3ad420, 0x38eff: 0x6d3ad620, + // Block 0xe3c, offset 0x38f00 + 0x38f00: 0x6d3ad820, 0x38f01: 0x6d3ada20, 0x38f02: 0x6d3adc20, 0x38f03: 0x6d3ade20, + 0x38f04: 0x6d3ae020, 0x38f05: 0x6d3ae220, 0x38f06: 0x6d3ae420, 0x38f07: 0x6d3ae620, + 0x38f08: 0x6d3ae820, 0x38f09: 0x6d3aea20, 0x38f0a: 0x6d3aec20, 0x38f0b: 0x6d3aee20, + 0x38f0c: 0x6d3af020, 0x38f0d: 0x6d3af220, 0x38f0e: 0x6d3af420, 0x38f0f: 0x6d3af620, + 0x38f10: 0x6d3af820, 0x38f11: 0x6d3afa20, 0x38f12: 0x6d668e20, 0x38f13: 0x6d669020, + 0x38f14: 0x6d669220, 0x38f15: 0x6d669420, 0x38f16: 0x6d669620, 0x38f17: 0x6d669820, + 0x38f18: 0x6d669a20, 0x38f19: 0x6d669c20, 0x38f1a: 0x6d669e20, 0x38f1b: 0x6d66a020, + 0x38f1c: 0x6d66a220, 0x38f1d: 0x6d66a420, 0x38f1e: 0x6d66a620, 0x38f1f: 0x6d66a820, + 0x38f20: 0x6d66aa20, 0x38f21: 0x6d66ac20, 0x38f22: 0x6d66ae20, 0x38f23: 0x6d66b020, + 0x38f24: 0x6d66b220, 0x38f25: 0x6d66b420, 0x38f26: 0x6d66b620, 0x38f27: 0x6d66b820, + 0x38f28: 0x6d66ba20, 0x38f29: 0x6d66bc20, 0x38f2a: 0x6d66be20, 0x38f2b: 0x6d66c020, + 0x38f2c: 0x6d66c220, 0x38f2d: 0x6d66c420, 0x38f2e: 0x6d66c620, 0x38f2f: 0x6d66c820, + 0x38f30: 0x6d66ca20, 0x38f31: 0x6d66cc20, 0x38f32: 0x6d66ce20, 0x38f33: 0x6d66d020, + 0x38f34: 0x6d66d220, 0x38f35: 0x6d66d420, 0x38f36: 0x6d66d620, 0x38f37: 0x6d66d820, + 0x38f38: 0x6d66da20, 0x38f39: 0x6d66dc20, 0x38f3a: 0x6d66de20, 0x38f3b: 0x6d66e020, + 0x38f3c: 0x6d66e220, 0x38f3d: 0x6d66e420, 0x38f3e: 0x6d66e620, 0x38f3f: 0x6d66e820, + // Block 0xe3d, offset 0x38f40 + 0x38f40: 0x6d66ea20, 0x38f41: 0x6d66ec20, 0x38f42: 0x6d66ee20, 0x38f43: 0x6d66f020, + 0x38f44: 0x6d66f220, 0x38f45: 0x6d66f420, 0x38f46: 0x6d66f620, 0x38f47: 0x6d66f820, + 0x38f48: 0x6d66fa20, 0x38f49: 0x6d66fc20, 0x38f4a: 0x6d66fe20, 0x38f4b: 0x6d670020, + 0x38f4c: 0x6d670220, 0x38f4d: 0x6d670420, 0x38f4e: 0x6d670620, 0x38f4f: 0x6d670820, + 0x38f50: 0x6d670a20, 0x38f51: 0x6d670c20, 0x38f52: 0x6d670e20, 0x38f53: 0x6d671020, + 0x38f54: 0x6d671220, 0x38f55: 0x6d671420, 0x38f56: 0x6d671620, 0x38f57: 0x6d671820, + 0x38f58: 0x6d671a20, 0x38f59: 0x6d671c20, 0x38f5a: 0x6d671e20, 0x38f5b: 0x6d672020, + 0x38f5c: 0x6d672220, 0x38f5d: 0x6d672420, 0x38f5e: 0x6d672620, 0x38f5f: 0x6d672820, + 0x38f60: 0x6d672a20, 0x38f61: 0x6d905c20, 0x38f62: 0x6d905e20, 0x38f63: 0x6d906020, + 0x38f64: 0x6d906220, 0x38f65: 0x6d906420, 0x38f66: 0x6d906620, 0x38f67: 0x6d906820, + 0x38f68: 0x6d906a20, 0x38f69: 0x6d906c20, 0x38f6a: 0x6d906e20, 0x38f6b: 0x6d907020, + 0x38f6c: 0x6d907220, 0x38f6d: 0x6d907420, 0x38f6e: 0x6d907620, 0x38f6f: 0x6d907820, + 0x38f70: 0x6d907a20, 0x38f71: 0x6d907c20, 0x38f72: 0x6d907e20, 0x38f73: 0x6d908020, + 0x38f74: 0x6d908220, 0x38f75: 0x6d908420, 0x38f76: 0x6d908620, 0x38f77: 0x6d908820, + 0x38f78: 0x6d908a20, 0x38f79: 0x6d908c20, 0x38f7a: 0x6d908e20, 0x38f7b: 0x6d909020, + 0x38f7c: 0x6d909220, 0x38f7d: 0x6d909420, 0x38f7e: 0x6d909620, 0x38f7f: 0x6d909820, + // Block 0xe3e, offset 0x38f80 + 0x38f80: 0x6d909a20, 0x38f81: 0x6d909c20, 0x38f82: 0x6d909e20, 0x38f83: 0x6d90a020, + 0x38f84: 0x6d90a220, 0x38f85: 0x6d90a420, 0x38f86: 0x6d90a620, 0x38f87: 0x6d672c20, + 0x38f88: 0x6d90a820, 0x38f89: 0x6d90aa20, 0x38f8a: 0x6d90ac20, 0x38f8b: 0x6d90ae20, + 0x38f8c: 0x6d90b020, 0x38f8d: 0x6d90b220, 0x38f8e: 0x6d90b420, 0x38f8f: 0x6d90b620, + 0x38f90: 0x6d90b820, 0x38f91: 0x6d90ba20, 0x38f92: 0x6d90bc20, 0x38f93: 0x6d90be20, + 0x38f94: 0x6d90c020, 0x38f95: 0x6d90c220, 0x38f96: 0x6d90c420, 0x38f97: 0x6d90c620, + 0x38f98: 0x6d90c820, 0x38f99: 0x6d90ca20, 0x38f9a: 0x6d90cc20, 0x38f9b: 0x6d90ce20, + 0x38f9c: 0x6d90d020, 0x38f9d: 0x6d90d220, 0x38f9e: 0x6d90d420, 0x38f9f: 0x6d90d620, + 0x38fa0: 0x6d90d820, 0x38fa1: 0x6d90da20, 0x38fa2: 0x6d90dc20, 0x38fa3: 0x6d90de20, + 0x38fa4: 0x6d90e020, 0x38fa5: 0x6d90e220, 0x38fa6: 0x6d90e420, 0x38fa7: 0x6d90e620, + 0x38fa8: 0x6d90e820, 0x38fa9: 0x6d90ea20, 0x38faa: 0x6d90ec20, 0x38fab: 0x6d90ee20, + 0x38fac: 0x6d90f020, 0x38fad: 0x6d90f220, 0x38fae: 0x6d90f420, 0x38faf: 0x6d90f620, + 0x38fb0: 0x6d90f820, 0x38fb1: 0x6d90fa20, 0x38fb2: 0x6d90fc20, 0x38fb3: 0x6d90fe20, + 0x38fb4: 0x6d910020, 0x38fb5: 0x6d910220, 0x38fb6: 0x6d910420, 0x38fb7: 0x6d910620, + 0x38fb8: 0x6db42820, 0x38fb9: 0x6db42a20, 0x38fba: 0x6db42c20, 0x38fbb: 0x6db42e20, + 0x38fbc: 0x6db43020, 0x38fbd: 0x6db43220, 0x38fbe: 0x6db43420, 0x38fbf: 0x6db43620, + // Block 0xe3f, offset 0x38fc0 + 0x38fc0: 0x6db43820, 0x38fc1: 0x6db43a20, 0x38fc2: 0x6db43c20, 0x38fc3: 0x6db43e20, + 0x38fc4: 0x6db44020, 0x38fc5: 0x6db44220, 0x38fc6: 0x6db44420, 0x38fc7: 0x6db44620, + 0x38fc8: 0x6db44820, 0x38fc9: 0x6db44a20, 0x38fca: 0x6db44c20, 0x38fcb: 0x6db44e20, + 0x38fcc: 0x6db45020, 0x38fcd: 0x6db45220, 0x38fce: 0x6db45420, 0x38fcf: 0x6db45620, + 0x38fd0: 0x6db45820, 0x38fd1: 0x6db45a20, 0x38fd2: 0x6db45c20, 0x38fd3: 0x6db45e20, + 0x38fd4: 0x6db46020, 0x38fd5: 0x6db46220, 0x38fd6: 0x6db46420, 0x38fd7: 0x6db46620, + 0x38fd8: 0x6db46820, 0x38fd9: 0x6db46a20, 0x38fda: 0x6db46c20, 0x38fdb: 0x6db46e20, + 0x38fdc: 0x6db47020, 0x38fdd: 0x6db47220, 0x38fde: 0x6db47420, 0x38fdf: 0x6db47620, + 0x38fe0: 0x6db47820, 0x38fe1: 0x6db47a20, 0x38fe2: 0x6db47c20, 0x38fe3: 0x6db47e20, + 0x38fe4: 0x6db48020, 0x38fe5: 0x6db48220, 0x38fe6: 0x6db48420, 0x38fe7: 0x6db48620, + 0x38fe8: 0x6db48820, 0x38fe9: 0x6db48a20, 0x38fea: 0x6db48c20, 0x38feb: 0x6db48e20, + 0x38fec: 0x6db49020, 0x38fed: 0x6db49220, 0x38fee: 0x6db49420, 0x38fef: 0x6db49620, + 0x38ff0: 0x6dcfa420, 0x38ff1: 0x6db49820, 0x38ff2: 0x6db49a20, 0x38ff3: 0x6db49c20, + 0x38ff4: 0x6db49e20, 0x38ff5: 0x6db4a020, 0x38ff6: 0x6db4a220, 0x38ff7: 0x6db4a420, + 0x38ff8: 0x6db4a620, 0x38ff9: 0x6db4a820, 0x38ffa: 0x6db4aa20, 0x38ffb: 0x6db4ac20, + 0x38ffc: 0x6db4ae20, 0x38ffd: 0x6db4b020, 0x38ffe: 0x6db4b220, 0x38fff: 0x6db4b420, + // Block 0xe40, offset 0x39000 + 0x39000: 0x6db4b620, 0x39001: 0x6db4b820, 0x39002: 0x6db4ba20, 0x39003: 0x6db4bc20, + 0x39004: 0x6dd2fa20, 0x39005: 0x6dd2fc20, 0x39006: 0x6dd2fe20, 0x39007: 0x6dd30020, + 0x39008: 0x6dd30220, 0x39009: 0x6dd30420, 0x3900a: 0x6dd30620, 0x3900b: 0x6dd30820, + 0x3900c: 0x6dd30a20, 0x3900d: 0x6dd30c20, 0x3900e: 0x6dd30e20, 0x3900f: 0x6dd31020, + 0x39010: 0x6dd31220, 0x39011: 0x6dd31420, 0x39012: 0x6dd31620, 0x39013: 0x6dd31820, + 0x39014: 0x6dd31a20, 0x39015: 0x6dd31c20, 0x39016: 0x6dd31e20, 0x39017: 0x6dd32020, + 0x39018: 0x6dd32220, 0x39019: 0x6dd32420, 0x3901a: 0x6dd32620, 0x3901b: 0x6dd32820, + 0x3901c: 0x6dd32a20, 0x3901d: 0x6dd32c20, 0x3901e: 0x6dd32e20, 0x3901f: 0x6dd33020, + 0x39020: 0x6dd33220, 0x39021: 0x6dd33420, 0x39022: 0x6dd33620, 0x39023: 0x6dd33820, + 0x39024: 0x6dd33a20, 0x39025: 0x6dd33c20, 0x39026: 0x6dd33e20, 0x39027: 0x6dd34020, + 0x39028: 0x6dd34220, 0x39029: 0x6dd34420, 0x3902a: 0x6dd34620, 0x3902b: 0x6dd34820, + 0x3902c: 0x6dd34a20, 0x3902d: 0x6dd34c20, 0x3902e: 0x6dd34e20, 0x3902f: 0x6dd35020, + 0x39030: 0x6dd35220, 0x39031: 0x6dd35420, 0x39032: 0x6dd35620, 0x39033: 0x6dd35820, + 0x39034: 0x6dd35a20, 0x39035: 0x6dd35c20, 0x39036: 0x6dd35e20, 0x39037: 0x6dd36020, + 0x39038: 0x6dd36220, 0x39039: 0x6dd36420, 0x3903a: 0x6dd36620, 0x3903b: 0x6dd36820, + 0x3903c: 0x6dd36a20, 0x3903d: 0x6dd36c20, 0x3903e: 0x6dd36e20, 0x3903f: 0x6dd37020, + // Block 0xe41, offset 0x39040 + 0x39040: 0x6dd37220, 0x39041: 0x6dd37420, 0x39042: 0x6dd37620, 0x39043: 0x6dd37820, + 0x39044: 0x6dd37a20, 0x39045: 0x6dd37c20, 0x39046: 0x6dd37e20, 0x39047: 0x6dd38020, + 0x39048: 0x6dd38220, 0x39049: 0x6dd38420, 0x3904a: 0x6dd38620, 0x3904b: 0x6dd38820, + 0x3904c: 0x6dd38a20, 0x3904d: 0x6dd38c20, 0x3904e: 0x6dec2620, 0x3904f: 0x6dec2820, + 0x39050: 0x6dec2a20, 0x39051: 0x6dec2c20, 0x39052: 0x6dec2e20, 0x39053: 0x6dec3020, + 0x39054: 0x6dec3220, 0x39055: 0x6dec3420, 0x39056: 0x6dec3620, 0x39057: 0x6dec3820, + 0x39058: 0x6dec3a20, 0x39059: 0x6dec3c20, 0x3905a: 0x6dec3e20, 0x3905b: 0x6dec4020, + 0x3905c: 0x6dec4220, 0x3905d: 0x6dec4420, 0x3905e: 0x6dec4620, 0x3905f: 0x6dec4820, + 0x39060: 0x6dec4a20, 0x39061: 0x6dec4c20, 0x39062: 0x6dec4e20, 0x39063: 0x6dec5020, + 0x39064: 0x6dec5220, 0x39065: 0x6dec5420, 0x39066: 0x6dec5620, 0x39067: 0x6dec5820, + 0x39068: 0x6dec5a20, 0x39069: 0x6dec5c20, 0x3906a: 0x6dec5e20, 0x3906b: 0x6dec6020, + 0x3906c: 0x6dec6220, 0x3906d: 0x6dec6420, 0x3906e: 0x6dec6620, 0x3906f: 0x6dec6820, + 0x39070: 0x6dec6a20, 0x39071: 0x6dec6c20, 0x39072: 0x6dec6e20, 0x39073: 0x6dec7020, + 0x39074: 0x6dec7220, 0x39075: 0x6dec7420, 0x39076: 0x6dec7620, 0x39077: 0x6dec7820, + 0x39078: 0x6dec7a20, 0x39079: 0x6dec7c20, 0x3907a: 0x6dec7e20, 0x3907b: 0x6dec8020, + 0x3907c: 0x6dec8220, 0x3907d: 0x6dec8420, 0x3907e: 0x6dec8620, 0x3907f: 0x6dec8820, + // Block 0xe42, offset 0x39080 + 0x39080: 0x6dec8a20, 0x39081: 0x6dec8c20, 0x39082: 0x6dec8e20, 0x39083: 0x6dec9020, + 0x39084: 0x6dec9220, 0x39085: 0x6dec9420, 0x39086: 0x6dec9620, 0x39087: 0x6dec9820, + 0x39088: 0x6dec9a20, 0x39089: 0x6e018420, 0x3908a: 0x6e018620, 0x3908b: 0x6e018820, + 0x3908c: 0x6e018a20, 0x3908d: 0x6e018c20, 0x3908e: 0x6e018e20, 0x3908f: 0x6e019020, + 0x39090: 0x6e019220, 0x39091: 0x6e019420, 0x39092: 0x6e019620, 0x39093: 0x6e019820, + 0x39094: 0x6e019a20, 0x39095: 0x6e019c20, 0x39096: 0x6e019e20, 0x39097: 0x6e01a020, + 0x39098: 0x6e01a220, 0x39099: 0x6e01a420, 0x3909a: 0x6e01a620, 0x3909b: 0x6e01a820, + 0x3909c: 0x6e01aa20, 0x3909d: 0x6e01ac20, 0x3909e: 0x6e01ae20, 0x3909f: 0x6e01b020, + 0x390a0: 0x6e01b220, 0x390a1: 0x6e01b420, 0x390a2: 0x6e01b620, 0x390a3: 0x6e01b820, + 0x390a4: 0x6e01ba20, 0x390a5: 0x6e01bc20, 0x390a6: 0x6e01be20, 0x390a7: 0x6e01c020, + 0x390a8: 0x6e01c220, 0x390a9: 0x6e01c420, 0x390aa: 0x6e01c620, 0x390ab: 0x6e01c820, + 0x390ac: 0x6e01ca20, 0x390ad: 0x6e01cc20, 0x390ae: 0x6e01ce20, 0x390af: 0x6e01d020, + 0x390b0: 0x6e01d220, 0x390b1: 0x6e136a20, 0x390b2: 0x6e136c20, 0x390b3: 0x6e136e20, + 0x390b4: 0x6e137020, 0x390b5: 0x6e137220, 0x390b6: 0x6e137420, 0x390b7: 0x6e137620, + 0x390b8: 0x6e137820, 0x390b9: 0x6e137a20, 0x390ba: 0x6e137c20, 0x390bb: 0x6e137e20, + 0x390bc: 0x6e138020, 0x390bd: 0x6e138220, 0x390be: 0x6e138420, 0x390bf: 0x6e138620, + // Block 0xe43, offset 0x390c0 + 0x390c0: 0x6e138820, 0x390c1: 0x6e138a20, 0x390c2: 0x6e138c20, 0x390c3: 0x6e138e20, + 0x390c4: 0x6e139020, 0x390c5: 0x6e139220, 0x390c6: 0x6e139420, 0x390c7: 0x6e139620, + 0x390c8: 0x6e139820, 0x390c9: 0x6e139a20, 0x390ca: 0x6e139c20, 0x390cb: 0x6e139e20, + 0x390cc: 0x6e13a020, 0x390cd: 0x6e13a220, 0x390ce: 0x6e13a420, 0x390cf: 0x6e13a620, + 0x390d0: 0x6e13a820, 0x390d1: 0x6e13aa20, 0x390d2: 0x6e13ac20, 0x390d3: 0x6e13ae20, + 0x390d4: 0x6e13b020, 0x390d5: 0x6e13b220, 0x390d6: 0x6e13b420, 0x390d7: 0x6e13b620, + 0x390d8: 0x6e13b820, 0x390d9: 0x6e13ba20, 0x390da: 0x6e13bc20, 0x390db: 0x6e13be20, + 0x390dc: 0x6e13c020, 0x390dd: 0x6e213820, 0x390de: 0x6e213a20, 0x390df: 0x6e213c20, + 0x390e0: 0x6e213e20, 0x390e1: 0x6e214020, 0x390e2: 0x6e214220, 0x390e3: 0x6e214420, + 0x390e4: 0x6e214620, 0x390e5: 0x6e214820, 0x390e6: 0x6e214a20, 0x390e7: 0x6e214c20, + 0x390e8: 0x6e214e20, 0x390e9: 0x6e215020, 0x390ea: 0x6e215220, 0x390eb: 0x6e215420, + 0x390ec: 0x6e215620, 0x390ed: 0x6e215820, 0x390ee: 0x6e215a20, 0x390ef: 0x6e215c20, + 0x390f0: 0x6e215e20, 0x390f1: 0x6e216020, 0x390f2: 0x6e216220, 0x390f3: 0x6e216420, + 0x390f4: 0x6e216620, 0x390f5: 0x6e216820, 0x390f6: 0x6e216a20, 0x390f7: 0x6e216c20, + 0x390f8: 0x6e216e20, 0x390f9: 0x6e217020, 0x390fa: 0x6e217220, 0x390fb: 0x6e217420, + 0x390fc: 0x6e217620, 0x390fd: 0x6e217820, 0x390fe: 0x6e217a20, 0x390ff: 0x6e217c20, + // Block 0xe44, offset 0x39100 + 0x39100: 0x6e217e20, 0x39101: 0x6e218020, 0x39102: 0x6e218220, 0x39103: 0x6e2bf020, + 0x39104: 0x6e2bf220, 0x39105: 0x6e2bf420, 0x39106: 0x6e2bf620, 0x39107: 0x6e2bf820, + 0x39108: 0x6e2bfa20, 0x39109: 0x6e2bfc20, 0x3910a: 0x6e2bfe20, 0x3910b: 0x6e2c0020, + 0x3910c: 0x6e2c0220, 0x3910d: 0x6e2c0420, 0x3910e: 0x6e2c0620, 0x3910f: 0x6e2c0820, + 0x39110: 0x6e2c0a20, 0x39111: 0x6e2c0c20, 0x39112: 0x6e2c0e20, 0x39113: 0x6e343220, + 0x39114: 0x6e2c1020, 0x39115: 0x6e2c1220, 0x39116: 0x6e2c1420, 0x39117: 0x6e2c1620, + 0x39118: 0x6e2c1820, 0x39119: 0x6e2c1a20, 0x3911a: 0x6e2c1c20, 0x3911b: 0x6e343420, + 0x3911c: 0x6e343620, 0x3911d: 0x6e343820, 0x3911e: 0x6e343a20, 0x3911f: 0x6e343c20, + 0x39120: 0x6e343e20, 0x39121: 0x6e344020, 0x39122: 0x6e344220, 0x39123: 0x6e344420, + 0x39124: 0x6e344620, 0x39125: 0x6e344820, 0x39126: 0x6e344a20, 0x39127: 0x6e344c20, + 0x39128: 0x6e344e20, 0x39129: 0x6e345020, 0x3912a: 0x6e345220, 0x3912b: 0x6e345420, + 0x3912c: 0x6e345620, 0x3912d: 0x6e345820, 0x3912e: 0x6e345a20, 0x3912f: 0x6e39ee20, + 0x39130: 0x6e39f020, 0x39131: 0x6e39f220, 0x39132: 0x6e39f420, 0x39133: 0x6e39f620, + 0x39134: 0x6e39f820, 0x39135: 0x6e39fa20, 0x39136: 0x6e39fc20, 0x39137: 0x6e39fe20, + 0x39138: 0x6e3a0020, 0x39139: 0x6e3a0220, 0x3913a: 0x6e3a0420, 0x3913b: 0x6e3a0620, + 0x3913c: 0x6e3a0820, 0x3913d: 0x6e3e1820, 0x3913e: 0x6e3e1a20, 0x3913f: 0x6e3e1c20, + // Block 0xe45, offset 0x39140 + 0x39140: 0x6e3e1e20, 0x39141: 0x6e3e2020, 0x39142: 0x6e3e2220, 0x39143: 0x6e3e2420, + 0x39144: 0x6e40e220, 0x39145: 0x6e40e420, 0x39146: 0x6e40e620, 0x39147: 0x6e40e820, + 0x39148: 0x6e40ea20, 0x39149: 0x6e40ec20, 0x3914a: 0x6e3e2620, 0x3914b: 0x6e40ee20, + 0x3914c: 0x6e40f020, 0x3914d: 0x6e40f220, 0x3914e: 0x6e40f420, 0x3914f: 0x6e40f620, + 0x39150: 0x6e40f820, 0x39151: 0x6e42fe20, 0x39152: 0x6e430020, 0x39153: 0x6e430220, + 0x39154: 0x6e430420, 0x39155: 0x6e430620, 0x39156: 0x6e430820, 0x39157: 0x6e430a20, + 0x39158: 0x6e446e20, 0x39159: 0x6e447020, 0x3915a: 0x6e447220, 0x3915b: 0x6e447420, + 0x3915c: 0x6e455220, 0x3915d: 0x6e455420, 0x3915e: 0x6e455620, 0x3915f: 0x6e455820, + 0x39160: 0x6e459020, 0x39161: 0x6e455a20, 0x39162: 0x6e45d220, 0x39163: 0x6e45d420, + 0x39164: 0x6e463a20, 0x39165: 0x6e463c20, 0x39166: 0x6e463e20, 0x39167: 0x6c403620, + 0x39168: 0x6c403820, 0x39169: 0x6c403a20, 0x3916a: 0x6c5ffc20, 0x3916b: 0x6c858820, + 0x3916c: 0x6c858a20, 0x3916d: 0x6c858c20, 0x3916e: 0x6c858e20, 0x3916f: 0x6c859020, + 0x39170: 0x6caf1e20, 0x39171: 0x6caf2020, 0x39172: 0x6caf2220, 0x39173: 0x6cde4c20, + 0x39174: 0x6cde4e20, 0x39175: 0x6d0cbe20, 0x39176: 0x6d0cc020, 0x39177: 0x6d0cc220, + 0x39178: 0x6d0cc420, 0x39179: 0x6d0cc620, 0x3917a: 0x6d3b1220, 0x3917b: 0x6d3b1420, + 0x3917c: 0x6d3b1620, 0x3917d: 0x6d3b1820, 0x3917e: 0x6d3b1a20, 0x3917f: 0x6d3b1c20, + // Block 0xe46, offset 0x39180 + 0x39180: 0x6d673c20, 0x39181: 0x6d673e20, 0x39182: 0x6d674020, 0x39183: 0x6d674220, + 0x39184: 0x6d3b1e20, 0x39185: 0x6d674420, 0x39186: 0x6d911620, 0x39187: 0x6d911820, + 0x39188: 0x6d911a20, 0x39189: 0x6d911c20, 0x3918a: 0x6d911e20, 0x3918b: 0x6db4c820, + 0x3918c: 0x6db4ca20, 0x3918d: 0x6db4cc20, 0x3918e: 0x6dd39820, 0x3918f: 0x6dd39a20, + 0x39190: 0x6dd39c20, 0x39191: 0x6dd39e20, 0x39192: 0x6dd3a020, 0x39193: 0x6dd3a220, + 0x39194: 0x6deca620, 0x39195: 0x6deca820, 0x39196: 0x6e01dc20, 0x39197: 0x6e01de20, + 0x39198: 0x6e13cc20, 0x39199: 0x6e218620, 0x3919a: 0x6e218820, 0x3919b: 0x6e2c1e20, + 0x3919c: 0x6e455c20, 0x3919d: 0x6c403c20, 0x3919e: 0x6c403e20, 0x3919f: 0x6c404020, + 0x391a0: 0x6c404220, 0x391a1: 0x6c600220, 0x391a2: 0x6c600420, 0x391a3: 0x6c600620, + 0x391a4: 0x6c600820, 0x391a5: 0x6c600a20, 0x391a6: 0x6c859820, 0x391a7: 0x6c859a20, + 0x391a8: 0x6c859c20, 0x391a9: 0x6c859e20, 0x391aa: 0x6caf3020, 0x391ab: 0x6cde5a20, + 0x391ac: 0x6cde5c20, 0x391ad: 0x6cde5e20, 0x391ae: 0x6cde6020, 0x391af: 0x6cde6220, + 0x391b0: 0x6cde6420, 0x391b1: 0x6cde6620, 0x391b2: 0x6d0ccc20, 0x391b3: 0x6d0cce20, + 0x391b4: 0x6d0cd020, 0x391b5: 0x6d0cd220, 0x391b6: 0x6d0cd420, 0x391b7: 0x6d0cd620, + 0x391b8: 0x6d3b2020, 0x391b9: 0x6d674e20, 0x391ba: 0x6d3b2220, 0x391bb: 0x6d3b2420, + 0x391bc: 0x6d675020, 0x391bd: 0x6d675220, 0x391be: 0x6d912e20, 0x391bf: 0x6db4d220, + // Block 0xe47, offset 0x391c0 + 0x391c0: 0x6db4d420, 0x391c1: 0x6db4d620, 0x391c2: 0x6dd3a420, 0x391c3: 0x6dd3a620, + 0x391c4: 0x6decaa20, 0x391c5: 0x6e13ce20, 0x391c6: 0x6e218a20, 0x391c7: 0x6c0a6220, + 0x391c8: 0x6c269020, 0x391c9: 0x6c269220, 0x391ca: 0x6c269420, 0x391cb: 0x6c269620, + 0x391cc: 0x6c269820, 0x391cd: 0x6c404c20, 0x391ce: 0x6c404e20, 0x391cf: 0x6c405020, + 0x391d0: 0x6c405220, 0x391d1: 0x6c405420, 0x391d2: 0x6c405620, 0x391d3: 0x6c405820, + 0x391d4: 0x6c405a20, 0x391d5: 0x6c405c20, 0x391d6: 0x6c405e20, 0x391d7: 0x6c406020, + 0x391d8: 0x6c406220, 0x391d9: 0x6c406420, 0x391da: 0x6c406620, 0x391db: 0x6c406820, + 0x391dc: 0x6c406a20, 0x391dd: 0x6c601e20, 0x391de: 0x6c602020, 0x391df: 0x6c602220, + 0x391e0: 0x6c602420, 0x391e1: 0x6c602620, 0x391e2: 0x6c602820, 0x391e3: 0x6c602a20, + 0x391e4: 0x6c602c20, 0x391e5: 0x6c602e20, 0x391e6: 0x6c603020, 0x391e7: 0x6c603220, + 0x391e8: 0x6c603420, 0x391e9: 0x6c603620, 0x391ea: 0x6c603820, 0x391eb: 0x6c603a20, + 0x391ec: 0x6c603c20, 0x391ed: 0x6c603e20, 0x391ee: 0x6c604020, 0x391ef: 0x6c604220, + 0x391f0: 0x6c604420, 0x391f1: 0x6c604620, 0x391f2: 0x6c604820, 0x391f3: 0x6c604a20, + 0x391f4: 0x6c604c20, 0x391f5: 0x6c604e20, 0x391f6: 0x6c605020, 0x391f7: 0x6c605220, + 0x391f8: 0x6c605420, 0x391f9: 0x6c605620, 0x391fa: 0x6c605820, 0x391fb: 0x6c605a20, + 0x391fc: 0x6c605c20, 0x391fd: 0x6c85dc20, 0x391fe: 0x6caf9220, 0x391ff: 0x6c85de20, + // Block 0xe48, offset 0x39200 + 0x39200: 0x6c85e020, 0x39201: 0x6c85e220, 0x39202: 0x6c85e420, 0x39203: 0x6c85e620, + 0x39204: 0x6c85e820, 0x39205: 0x6c85ea20, 0x39206: 0x6c85ec20, 0x39207: 0x6c85ee20, + 0x39208: 0x6c85f020, 0x39209: 0x6c85f220, 0x3920a: 0x6c85f420, 0x3920b: 0x6c85f620, + 0x3920c: 0x6c85f820, 0x3920d: 0x6c85fa20, 0x3920e: 0x6c85fc20, 0x3920f: 0x6c85fe20, + 0x39210: 0x6c860020, 0x39211: 0x6c860220, 0x39212: 0x6c860420, 0x39213: 0x6c860620, + 0x39214: 0x6c860820, 0x39215: 0x6c860a20, 0x39216: 0x6c860c20, 0x39217: 0x6c860e20, + 0x39218: 0x6c861020, 0x39219: 0x6c861220, 0x3921a: 0x6c861420, 0x3921b: 0x6c861620, + 0x3921c: 0x6c861820, 0x3921d: 0x6c861a20, 0x3921e: 0x6caf9420, 0x3921f: 0x6caf9620, + 0x39220: 0x6caf9820, 0x39221: 0x6caf9a20, 0x39222: 0x6caf9c20, 0x39223: 0x6caf9e20, + 0x39224: 0x6cafa020, 0x39225: 0x6cafa220, 0x39226: 0x6cafa420, 0x39227: 0x6cafa620, + 0x39228: 0x6cafa820, 0x39229: 0x6cafaa20, 0x3922a: 0x6cafac20, 0x3922b: 0x6cafae20, + 0x3922c: 0x6cafb020, 0x3922d: 0x6cafb220, 0x3922e: 0x6cafb420, 0x3922f: 0x6cafb620, + 0x39230: 0x6cafb820, 0x39231: 0x6cafba20, 0x39232: 0x6cafbc20, 0x39233: 0x6cafbe20, + 0x39234: 0x6cafc020, 0x39235: 0x6cafc220, 0x39236: 0x6cafc420, 0x39237: 0x6cafc620, + 0x39238: 0x6cafc820, 0x39239: 0x6cafca20, 0x3923a: 0x6cafcc20, 0x3923b: 0x6cafce20, + 0x3923c: 0x6cafd020, 0x3923d: 0x6cafd220, 0x3923e: 0x6cafd420, 0x3923f: 0x6cafd620, + // Block 0xe49, offset 0x39240 + 0x39240: 0x6cdeac20, 0x39241: 0x6cdeae20, 0x39242: 0x6cdeb020, 0x39243: 0x6cdeb220, + 0x39244: 0x6cdeb420, 0x39245: 0x6cdeb620, 0x39246: 0x6cdeb820, 0x39247: 0x6cdeba20, + 0x39248: 0x6cdebc20, 0x39249: 0x6cdebe20, 0x3924a: 0x6cdec020, 0x3924b: 0x6cdec220, + 0x3924c: 0x6cdec420, 0x3924d: 0x6cdec620, 0x3924e: 0x6cdec820, 0x3924f: 0x6cdeca20, + 0x39250: 0x6cdecc20, 0x39251: 0x6cdece20, 0x39252: 0x6cded020, 0x39253: 0x6cded220, + 0x39254: 0x6cded420, 0x39255: 0x6cded620, 0x39256: 0x6cded820, 0x39257: 0x6cdeda20, + 0x39258: 0x6cdedc20, 0x39259: 0x6cdede20, 0x3925a: 0x6cdee020, 0x3925b: 0x6cdee220, + 0x3925c: 0x6cdee420, 0x3925d: 0x6cdee620, 0x3925e: 0x6cdee820, 0x3925f: 0x6cdeea20, + 0x39260: 0x6cdeec20, 0x39261: 0x6cdeee20, 0x39262: 0x6cdef020, 0x39263: 0x6cdef220, + 0x39264: 0x6d0d1420, 0x39265: 0x6d0d1620, 0x39266: 0x6d0d1820, 0x39267: 0x6d0d1a20, + 0x39268: 0x6d0d1c20, 0x39269: 0x6d0d1e20, 0x3926a: 0x6d0d2020, 0x3926b: 0x6d0d2220, + 0x3926c: 0x6d0d2420, 0x3926d: 0x6d0d2620, 0x3926e: 0x6d0d2820, 0x3926f: 0x6d0d2a20, + 0x39270: 0x6d0d2c20, 0x39271: 0x6d0d2e20, 0x39272: 0x6d0d3020, 0x39273: 0x6d0d3220, + 0x39274: 0x6d0d3420, 0x39275: 0x6d0d3620, 0x39276: 0x6d0d3820, 0x39277: 0x6d0d3a20, + 0x39278: 0x6d0d3c20, 0x39279: 0x6d0d3e20, 0x3927a: 0x6d0d4020, 0x3927b: 0x6d3b8420, + 0x3927c: 0x6d0d4220, 0x3927d: 0x6d0d4420, 0x3927e: 0x6d0d4620, 0x3927f: 0x6d0d4820, + // Block 0xe4a, offset 0x39280 + 0x39280: 0x6d0d4a20, 0x39281: 0x6d0d4c20, 0x39282: 0x6d0d4e20, 0x39283: 0x6d0d5020, + 0x39284: 0x6d0d5220, 0x39285: 0x6d0d5420, 0x39286: 0x6d0d5620, 0x39287: 0x6d0d5820, + 0x39288: 0x6d0d5a20, 0x39289: 0x6d0d5c20, 0x3928a: 0x6d0d5e20, 0x3928b: 0x6d0d6020, + 0x3928c: 0x6d0d6220, 0x3928d: 0x6d0d6420, 0x3928e: 0x6d0d6620, 0x3928f: 0x6d3b8620, + 0x39290: 0x6d3b8820, 0x39291: 0x6d3b8a20, 0x39292: 0x6d3b8c20, 0x39293: 0x6d3b8e20, + 0x39294: 0x6d3b9020, 0x39295: 0x6d3b9220, 0x39296: 0x6d3b9420, 0x39297: 0x6d3b9620, + 0x39298: 0x6d3b9820, 0x39299: 0x6d3b9a20, 0x3929a: 0x6d3b9c20, 0x3929b: 0x6d3b9e20, + 0x3929c: 0x6d3ba020, 0x3929d: 0x6d3ba220, 0x3929e: 0x6d3ba420, 0x3929f: 0x6d3ba620, + 0x392a0: 0x6d3ba820, 0x392a1: 0x6d3baa20, 0x392a2: 0x6d3bac20, 0x392a3: 0x6d3bae20, + 0x392a4: 0x6d3bb020, 0x392a5: 0x6d3bb220, 0x392a6: 0x6d3bb420, 0x392a7: 0x6d3bb620, + 0x392a8: 0x6d3bb820, 0x392a9: 0x6d3bba20, 0x392aa: 0x6d3bbc20, 0x392ab: 0x6d3bbe20, + 0x392ac: 0x6d3bc020, 0x392ad: 0x6d3bc220, 0x392ae: 0x6d3bc420, 0x392af: 0x6d3bc620, + 0x392b0: 0x6d3bc820, 0x392b1: 0x6d3bca20, 0x392b2: 0x6d3bcc20, 0x392b3: 0x6d3bce20, + 0x392b4: 0x6d3bd020, 0x392b5: 0x6d3bd220, 0x392b6: 0x6d3bd420, 0x392b7: 0x6d3bd620, + 0x392b8: 0x6d67a020, 0x392b9: 0x6d67a220, 0x392ba: 0x6d67a420, 0x392bb: 0x6d67a620, + 0x392bc: 0x6d67a820, 0x392bd: 0x6d67aa20, 0x392be: 0x6d67ac20, 0x392bf: 0x6d67ae20, + // Block 0xe4b, offset 0x392c0 + 0x392c0: 0x6d67b020, 0x392c1: 0x6d67b220, 0x392c2: 0x6d67b420, 0x392c3: 0x6d67b620, + 0x392c4: 0x6d67b820, 0x392c5: 0x6d67ba20, 0x392c6: 0x6d67bc20, 0x392c7: 0x6d67be20, + 0x392c8: 0x6d67c020, 0x392c9: 0x6d67c220, 0x392ca: 0x6d67c420, 0x392cb: 0x6d67c620, + 0x392cc: 0x6d67c820, 0x392cd: 0x6d67ca20, 0x392ce: 0x6d67cc20, 0x392cf: 0x6d67ce20, + 0x392d0: 0x6d67d020, 0x392d1: 0x6d67d220, 0x392d2: 0x6d67d420, 0x392d3: 0x6d67d620, + 0x392d4: 0x6d67d820, 0x392d5: 0x6d67da20, 0x392d6: 0x6d67dc20, 0x392d7: 0x6d67de20, + 0x392d8: 0x6d67e020, 0x392d9: 0x6d67e220, 0x392da: 0x6d67e420, 0x392db: 0x6d67e620, + 0x392dc: 0x6d67e820, 0x392dd: 0x6d916820, 0x392de: 0x6d916a20, 0x392df: 0x6d916c20, + 0x392e0: 0x6d916e20, 0x392e1: 0x6d917020, 0x392e2: 0x6d917220, 0x392e3: 0x6d917420, + 0x392e4: 0x6d917620, 0x392e5: 0x6d917820, 0x392e6: 0x6d917a20, 0x392e7: 0x6d917c20, + 0x392e8: 0x6d67ea20, 0x392e9: 0x6d917e20, 0x392ea: 0x6d918020, 0x392eb: 0x6d918220, + 0x392ec: 0x6d918420, 0x392ed: 0x6db51820, 0x392ee: 0x6d918620, 0x392ef: 0x6d918820, + 0x392f0: 0x6d918a20, 0x392f1: 0x6d918c20, 0x392f2: 0x6d918e20, 0x392f3: 0x6d919020, + 0x392f4: 0x6d919220, 0x392f5: 0x6d919420, 0x392f6: 0x6d919620, 0x392f7: 0x6d919820, + 0x392f8: 0x6d919a20, 0x392f9: 0x6d919c20, 0x392fa: 0x6d919e20, 0x392fb: 0x6d91a020, + 0x392fc: 0x6d91a220, 0x392fd: 0x6d91a420, 0x392fe: 0x6d91a620, 0x392ff: 0x6d91a820, + // Block 0xe4c, offset 0x39300 + 0x39300: 0x6d91aa20, 0x39301: 0x6d91ac20, 0x39302: 0x6db51a20, 0x39303: 0x6db51c20, + 0x39304: 0x6db51e20, 0x39305: 0x6db52020, 0x39306: 0x6db52220, 0x39307: 0x6db52420, + 0x39308: 0x6db52620, 0x39309: 0x6db52820, 0x3930a: 0x6db52a20, 0x3930b: 0x6db52c20, + 0x3930c: 0x6db52e20, 0x3930d: 0x6db53020, 0x3930e: 0x6db53220, 0x3930f: 0x6db53420, + 0x39310: 0x6db53620, 0x39311: 0x6db53820, 0x39312: 0x6db53a20, 0x39313: 0x6db53c20, + 0x39314: 0x6db53e20, 0x39315: 0x6db54020, 0x39316: 0x6db54220, 0x39317: 0x6db54420, + 0x39318: 0x6db54620, 0x39319: 0x6db54820, 0x3931a: 0x6db54a20, 0x3931b: 0x6db54c20, + 0x3931c: 0x6db54e20, 0x3931d: 0x6db55020, 0x3931e: 0x6db55220, 0x3931f: 0x6db55420, + 0x39320: 0x6db55620, 0x39321: 0x6db55820, 0x39322: 0x6db55a20, 0x39323: 0x6db55c20, + 0x39324: 0x6db55e20, 0x39325: 0x6db56020, 0x39326: 0x6db56220, 0x39327: 0x6db56420, + 0x39328: 0x6db56620, 0x39329: 0x6db56820, 0x3932a: 0x6db56a20, 0x3932b: 0x6db56c20, + 0x3932c: 0x6db56e20, 0x3932d: 0x6db57020, 0x3932e: 0x6db57220, 0x3932f: 0x6db57420, + 0x39330: 0x6db57620, 0x39331: 0x6dd3d220, 0x39332: 0x6dd3d420, 0x39333: 0x6dd3d620, + 0x39334: 0x6dd3d820, 0x39335: 0x6dd3da20, 0x39336: 0x6dd3dc20, 0x39337: 0x6dd3de20, + 0x39338: 0x6dd3e020, 0x39339: 0x6dd3e220, 0x3933a: 0x6dd3e420, 0x3933b: 0x6dd3e620, + 0x3933c: 0x6dd3e820, 0x3933d: 0x6dd3ea20, 0x3933e: 0x6dd3ec20, 0x3933f: 0x6dd3ee20, + // Block 0xe4d, offset 0x39340 + 0x39340: 0x6dd3f020, 0x39341: 0x6dd3f220, 0x39342: 0x6dd3f420, 0x39343: 0x6dd3f620, + 0x39344: 0x6dd3f820, 0x39345: 0x6dd3fa20, 0x39346: 0x6dd3fc20, 0x39347: 0x6dd3fe20, + 0x39348: 0x6dd40020, 0x39349: 0x6dd40220, 0x3934a: 0x6dd40420, 0x3934b: 0x6dd40620, + 0x3934c: 0x6dd40820, 0x3934d: 0x6decca20, 0x3934e: 0x6deccc20, 0x3934f: 0x6decce20, + 0x39350: 0x6decd020, 0x39351: 0x6decd220, 0x39352: 0x6decd420, 0x39353: 0x6decd620, + 0x39354: 0x6decd820, 0x39355: 0x6decda20, 0x39356: 0x6decdc20, 0x39357: 0x6e01f820, + 0x39358: 0x6decde20, 0x39359: 0x6dece020, 0x3935a: 0x6dece220, 0x3935b: 0x6dece420, + 0x3935c: 0x6dece620, 0x3935d: 0x6dece820, 0x3935e: 0x6decea20, 0x3935f: 0x6decec20, + 0x39360: 0x6decee20, 0x39361: 0x6decf020, 0x39362: 0x6decf220, 0x39363: 0x6decf420, + 0x39364: 0x6decf620, 0x39365: 0x6decf820, 0x39366: 0x6decfa20, 0x39367: 0x6e01fa20, + 0x39368: 0x6e01fc20, 0x39369: 0x6e01fe20, 0x3936a: 0x6e020020, 0x3936b: 0x6e020220, + 0x3936c: 0x6e020420, 0x3936d: 0x6e020620, 0x3936e: 0x6e020820, 0x3936f: 0x6e020a20, + 0x39370: 0x6e020c20, 0x39371: 0x6e020e20, 0x39372: 0x6e13de20, 0x39373: 0x6e021020, + 0x39374: 0x6e021220, 0x39375: 0x6e021420, 0x39376: 0x6e13e020, 0x39377: 0x6e13e220, + 0x39378: 0x6e13e420, 0x39379: 0x6e13e620, 0x3937a: 0x6e13e820, 0x3937b: 0x6e13ea20, + 0x3937c: 0x6e13ec20, 0x3937d: 0x6e13ee20, 0x3937e: 0x6e13f020, 0x3937f: 0x6e13f220, + // Block 0xe4e, offset 0x39380 + 0x39380: 0x6e13f420, 0x39381: 0x6e13f620, 0x39382: 0x6e13f820, 0x39383: 0x6e219620, + 0x39384: 0x6e219820, 0x39385: 0x6e219a20, 0x39386: 0x6e219c20, 0x39387: 0x6e219e20, + 0x39388: 0x6e2c2c20, 0x39389: 0x6e2c2e20, 0x3938a: 0x6e2c3020, 0x3938b: 0x6e2c3220, + 0x3938c: 0x6e346820, 0x3938d: 0x6e346a20, 0x3938e: 0x6e346c20, 0x3938f: 0x6e346e20, + 0x39390: 0x6e3a1620, 0x39391: 0x6e3a1820, 0x39392: 0x6e3a1a20, 0x39393: 0x6e3a1c20, + 0x39394: 0x6e3a1e20, 0x39395: 0x6e3e2820, 0x39396: 0x6e3e2a20, 0x39397: 0x6e3e2c20, + 0x39398: 0x6e410020, 0x39399: 0x6e447820, 0x3939a: 0x6e447a20, 0x3939b: 0x6e45d620, + 0x3939c: 0x6e468e20, 0x3939d: 0x6e469020, 0x3939e: 0x6e470420, 0x3939f: 0x6e470620, + 0x393a0: 0x6c269a20, 0x393a1: 0x6c269c20, 0x393a2: 0x6c269e20, 0x393a3: 0x6c406c20, + 0x393a4: 0x6c606820, 0x393a5: 0x6c606a20, 0x393a6: 0x6c606c20, 0x393a7: 0x6c862420, + 0x393a8: 0x6c862620, 0x393a9: 0x6c862820, 0x393aa: 0x6cafe620, 0x393ab: 0x6cafe820, + 0x393ac: 0x6cafea20, 0x393ad: 0x6cdf0220, 0x393ae: 0x6cdf0420, 0x393af: 0x6d0d7820, + 0x393b0: 0x6d0d7a20, 0x393b1: 0x6d3bdc20, 0x393b2: 0x6d3bde20, 0x393b3: 0x6d3be020, + 0x393b4: 0x6d3be220, 0x393b5: 0x6d3be420, 0x393b6: 0x6d3be620, 0x393b7: 0x6d3be820, + 0x393b8: 0x6d3bea20, 0x393b9: 0x6d67f220, 0x393ba: 0x6d67f420, 0x393bb: 0x6d67f620, + 0x393bc: 0x6d91ba20, 0x393bd: 0x6d91bc20, 0x393be: 0x6d91be20, 0x393bf: 0x6db57e20, + // Block 0xe4f, offset 0x393c0 + 0x393c0: 0x6dd41020, 0x393c1: 0x6dd41220, 0x393c2: 0x6ded0220, 0x393c3: 0x6e021820, + 0x393c4: 0x6e13fa20, 0x393c5: 0x6e3a2220, 0x393c6: 0x6c406e20, 0x393c7: 0x6c407020, + 0x393c8: 0x6c607020, 0x393c9: 0x6c863220, 0x393ca: 0x6c863420, 0x393cb: 0x6c863620, + 0x393cc: 0x6c863820, 0x393cd: 0x6c863a20, 0x393ce: 0x6cb00020, 0x393cf: 0x6cb00220, + 0x393d0: 0x6cb00420, 0x393d1: 0x6cb00620, 0x393d2: 0x6cb00820, 0x393d3: 0x6cb00a20, + 0x393d4: 0x6cb00c20, 0x393d5: 0x6cb00e20, 0x393d6: 0x6cb01020, 0x393d7: 0x6cb01220, + 0x393d8: 0x6cb01420, 0x393d9: 0x6cb01620, 0x393da: 0x6cb01820, 0x393db: 0x6cb01a20, + 0x393dc: 0x6cdf1a20, 0x393dd: 0x6cdf1c20, 0x393de: 0x6cdf1e20, 0x393df: 0x6cdf2020, + 0x393e0: 0x6cdf2220, 0x393e1: 0x6cdf2420, 0x393e2: 0x6cdf2620, 0x393e3: 0x6cdf2820, + 0x393e4: 0x6cdf2a20, 0x393e5: 0x6cdf2c20, 0x393e6: 0x6cdf2e20, 0x393e7: 0x6cdf3020, + 0x393e8: 0x6d0d8420, 0x393e9: 0x6d0d8620, 0x393ea: 0x6d0d8820, 0x393eb: 0x6d0d8a20, + 0x393ec: 0x6d0d8c20, 0x393ed: 0x6d0d8e20, 0x393ee: 0x6d0d9020, 0x393ef: 0x6d0d9220, + 0x393f0: 0x6d0d9420, 0x393f1: 0x6d0d9620, 0x393f2: 0x6d0d9820, 0x393f3: 0x6d0d9a20, + 0x393f4: 0x6d0d9c20, 0x393f5: 0x6d0d9e20, 0x393f6: 0x6d0da020, 0x393f7: 0x6d0da220, + 0x393f8: 0x6d0da420, 0x393f9: 0x6d0da620, 0x393fa: 0x6d0da820, 0x393fb: 0x6d3bfa20, + 0x393fc: 0x6d3bfc20, 0x393fd: 0x6d3bfe20, 0x393fe: 0x6d3c0020, 0x393ff: 0x6d3c0220, + // Block 0xe50, offset 0x39400 + 0x39400: 0x6d3c0420, 0x39401: 0x6d3c0620, 0x39402: 0x6d3c0820, 0x39403: 0x6d3c0a20, + 0x39404: 0x6d3c0c20, 0x39405: 0x6d3c0e20, 0x39406: 0x6d3c1020, 0x39407: 0x6d3c1220, + 0x39408: 0x6d3c1420, 0x39409: 0x6d3c1620, 0x3940a: 0x6d3c1820, 0x3940b: 0x6d680420, + 0x3940c: 0x6d680620, 0x3940d: 0x6d680820, 0x3940e: 0x6d680a20, 0x3940f: 0x6d680c20, + 0x39410: 0x6d680e20, 0x39411: 0x6d681020, 0x39412: 0x6d681220, 0x39413: 0x6d681420, + 0x39414: 0x6d681620, 0x39415: 0x6d681820, 0x39416: 0x6d681a20, 0x39417: 0x6d681c20, + 0x39418: 0x6d681e20, 0x39419: 0x6d682020, 0x3941a: 0x6d682220, 0x3941b: 0x6d682420, + 0x3941c: 0x6d682620, 0x3941d: 0x6d682820, 0x3941e: 0x6d682a20, 0x3941f: 0x6d682c20, + 0x39420: 0x6d682e20, 0x39421: 0x6d91d220, 0x39422: 0x6d91d420, 0x39423: 0x6d91d620, + 0x39424: 0x6d91d820, 0x39425: 0x6d91da20, 0x39426: 0x6d91dc20, 0x39427: 0x6d91de20, + 0x39428: 0x6d91e020, 0x39429: 0x6d91e220, 0x3942a: 0x6d91e420, 0x3942b: 0x6d91e620, + 0x3942c: 0x6d91e820, 0x3942d: 0x6d91ea20, 0x3942e: 0x6d91ec20, 0x3942f: 0x6d91ee20, + 0x39430: 0x6d91f020, 0x39431: 0x6d91f220, 0x39432: 0x6d91f420, 0x39433: 0x6d91f620, + 0x39434: 0x6d91f820, 0x39435: 0x6d91fa20, 0x39436: 0x6d91fc20, 0x39437: 0x6db59020, + 0x39438: 0x6db59220, 0x39439: 0x6db59420, 0x3943a: 0x6db59620, 0x3943b: 0x6db59820, + 0x3943c: 0x6db59a20, 0x3943d: 0x6db59c20, 0x3943e: 0x6db59e20, 0x3943f: 0x6db5a020, + // Block 0xe51, offset 0x39440 + 0x39440: 0x6db5a220, 0x39441: 0x6db5a420, 0x39442: 0x6dd42020, 0x39443: 0x6dd42220, + 0x39444: 0x6dd42420, 0x39445: 0x6dd42620, 0x39446: 0x6dd42820, 0x39447: 0x6dd42a20, + 0x39448: 0x6dd42c20, 0x39449: 0x6dd42e20, 0x3944a: 0x6dd43020, 0x3944b: 0x6dd43220, + 0x3944c: 0x6ded1820, 0x3944d: 0x6ded1a20, 0x3944e: 0x6ded1c20, 0x3944f: 0x6ded1e20, + 0x39450: 0x6ded2020, 0x39451: 0x6ded2220, 0x39452: 0x6e022020, 0x39453: 0x6e022220, + 0x39454: 0x6e022420, 0x39455: 0x6e022620, 0x39456: 0x6e022820, 0x39457: 0x6e022a20, + 0x39458: 0x6e140220, 0x39459: 0x6e140420, 0x3945a: 0x6e140620, 0x3945b: 0x6e140820, + 0x3945c: 0x6e21a820, 0x3945d: 0x6e21aa20, 0x3945e: 0x6e21ac20, 0x3945f: 0x6e21ae20, + 0x39460: 0x6e21b020, 0x39461: 0x6e21b220, 0x39462: 0x6e347020, 0x39463: 0x6e347220, + 0x39464: 0x6e347420, 0x39465: 0x6e347620, 0x39466: 0x6e3a2620, 0x39467: 0x6e3a2820, + 0x39468: 0x6e3a2a20, 0x39469: 0x6e3a2c20, 0x3946a: 0x6e3a2e20, 0x3946b: 0x6e3a3020, + 0x3946c: 0x6e3e3020, 0x3946d: 0x6e410220, 0x3946e: 0x6e430c20, 0x3946f: 0x6e46b420, + 0x39470: 0x6e470820, 0x39471: 0x6e473020, 0x39472: 0x6c26a820, 0x39473: 0x6c407620, + 0x39474: 0x6c608020, 0x39475: 0x6c608220, 0x39476: 0x6c608420, 0x39477: 0x6c864220, + 0x39478: 0x6c864420, 0x39479: 0x6c864620, 0x3947a: 0x6c864820, 0x3947b: 0x6cb02a20, + 0x3947c: 0x6cb02c20, 0x3947d: 0x6cb02e20, 0x3947e: 0x6cb03020, 0x3947f: 0x6cb03220, + // Block 0xe52, offset 0x39480 + 0x39480: 0x6cb03420, 0x39481: 0x6cb03620, 0x39482: 0x6cb03820, 0x39483: 0x6cb03a20, + 0x39484: 0x6cb03c20, 0x39485: 0x6cb03e20, 0x39486: 0x6cb04020, 0x39487: 0x6cb04220, + 0x39488: 0x6cb04420, 0x39489: 0x6cb04620, 0x3948a: 0x6cb04820, 0x3948b: 0x6cb04a20, + 0x3948c: 0x6cb04c20, 0x3948d: 0x6cb04e20, 0x3948e: 0x6cb05020, 0x3948f: 0x6cb05220, + 0x39490: 0x6cb05420, 0x39491: 0x6cdf4020, 0x39492: 0x6cdf4220, 0x39493: 0x6cdf4420, + 0x39494: 0x6cdf4620, 0x39495: 0x6cdf4820, 0x39496: 0x6cdf4a20, 0x39497: 0x6cdf4c20, + 0x39498: 0x6cdf4e20, 0x39499: 0x6cdf5020, 0x3949a: 0x6cdf5220, 0x3949b: 0x6cdf5420, + 0x3949c: 0x6cdf5620, 0x3949d: 0x6cdf5820, 0x3949e: 0x6cdf5a20, 0x3949f: 0x6cdf5c20, + 0x394a0: 0x6cdf5e20, 0x394a1: 0x6d0dca20, 0x394a2: 0x6d0dcc20, 0x394a3: 0x6d0dce20, + 0x394a4: 0x6d0dd020, 0x394a5: 0x6d0dd220, 0x394a6: 0x6d0dd420, 0x394a7: 0x6d0dd620, + 0x394a8: 0x6d3c2a20, 0x394a9: 0x6d3c2c20, 0x394aa: 0x6d3c2e20, 0x394ab: 0x6d3c3020, + 0x394ac: 0x6d3c3220, 0x394ad: 0x6d3c3420, 0x394ae: 0x6d3c3620, 0x394af: 0x6d3c3820, + 0x394b0: 0x6d3c3a20, 0x394b1: 0x6d3c3c20, 0x394b2: 0x6d3c3e20, 0x394b3: 0x6d3c4020, + 0x394b4: 0x6d684c20, 0x394b5: 0x6d684e20, 0x394b6: 0x6d685020, 0x394b7: 0x6d685220, + 0x394b8: 0x6d685420, 0x394b9: 0x6d685620, 0x394ba: 0x6d685820, 0x394bb: 0x6d685a20, + 0x394bc: 0x6d685c20, 0x394bd: 0x6d685e20, 0x394be: 0x6d686020, 0x394bf: 0x6d686220, + // Block 0xe53, offset 0x394c0 + 0x394c0: 0x6d686420, 0x394c1: 0x6d686620, 0x394c2: 0x6d686820, 0x394c3: 0x6d686a20, + 0x394c4: 0x6d686c20, 0x394c5: 0x6d686e20, 0x394c6: 0x6d687020, 0x394c7: 0x6d687220, + 0x394c8: 0x6d687420, 0x394c9: 0x6d687620, 0x394ca: 0x6d687820, 0x394cb: 0x6d920c20, + 0x394cc: 0x6d920e20, 0x394cd: 0x6d921020, 0x394ce: 0x6d921220, 0x394cf: 0x6d921420, + 0x394d0: 0x6d921620, 0x394d1: 0x6d921820, 0x394d2: 0x6d921a20, 0x394d3: 0x6d921c20, + 0x394d4: 0x6d921e20, 0x394d5: 0x6d922020, 0x394d6: 0x6d922220, 0x394d7: 0x6d922420, + 0x394d8: 0x6d922620, 0x394d9: 0x6d922820, 0x394da: 0x6d922a20, 0x394db: 0x6db5b020, + 0x394dc: 0x6db5b220, 0x394dd: 0x6db5b420, 0x394de: 0x6db5b620, 0x394df: 0x6db5b820, + 0x394e0: 0x6db5ba20, 0x394e1: 0x6db5bc20, 0x394e2: 0x6d922c20, 0x394e3: 0x6db5be20, + 0x394e4: 0x6db5c020, 0x394e5: 0x6db5c220, 0x394e6: 0x6db5c420, 0x394e7: 0x6db5c620, + 0x394e8: 0x6db5c820, 0x394e9: 0x6db5ca20, 0x394ea: 0x6db5cc20, 0x394eb: 0x6db5ce20, + 0x394ec: 0x6db5d020, 0x394ed: 0x6db5d220, 0x394ee: 0x6db5d420, 0x394ef: 0x6dd43c20, + 0x394f0: 0x6dd43e20, 0x394f1: 0x6dd44020, 0x394f2: 0x6dd44220, 0x394f3: 0x6dd44420, + 0x394f4: 0x6dd44620, 0x394f5: 0x6dd44820, 0x394f6: 0x6dd44a20, 0x394f7: 0x6dd44c20, + 0x394f8: 0x6dd44e20, 0x394f9: 0x6dd45020, 0x394fa: 0x6ded2e20, 0x394fb: 0x6ded3020, + 0x394fc: 0x6ded3220, 0x394fd: 0x6ded3420, 0x394fe: 0x6ded3620, 0x394ff: 0x6ded3820, + // Block 0xe54, offset 0x39500 + 0x39500: 0x6ded3a20, 0x39501: 0x6ded3c20, 0x39502: 0x6ded3e20, 0x39503: 0x6ded4020, + 0x39504: 0x6e023820, 0x39505: 0x6e023a20, 0x39506: 0x6e023c20, 0x39507: 0x6e023e20, + 0x39508: 0x6e140c20, 0x39509: 0x6e140e20, 0x3950a: 0x6e141020, 0x3950b: 0x6e141220, + 0x3950c: 0x6e21b820, 0x3950d: 0x6e21ba20, 0x3950e: 0x6e21bc20, 0x3950f: 0x6e21be20, + 0x39510: 0x6e21c020, 0x39511: 0x6e2c4020, 0x39512: 0x6e2c4220, 0x39513: 0x6e347820, + 0x39514: 0x6e347a20, 0x39515: 0x6e3a3a20, 0x39516: 0x6e3e3220, 0x39517: 0x6e430e20, + 0x39518: 0x6e431020, 0x39519: 0x6e447c20, 0x3951a: 0x6e447e20, 0x3951b: 0x6c26ae20, + 0x3951c: 0x6c26b020, 0x3951d: 0x6c407820, 0x3951e: 0x6c407a20, 0x3951f: 0x6c407c20, + 0x39520: 0x6c609a20, 0x39521: 0x6c867220, 0x39522: 0x6c867420, 0x39523: 0x6c867620, + 0x39524: 0x6c867820, 0x39525: 0x6c867a20, 0x39526: 0x6c867c20, 0x39527: 0x6c867e20, + 0x39528: 0x6c868020, 0x39529: 0x6c868220, 0x3952a: 0x6c868420, 0x3952b: 0x6c868620, + 0x3952c: 0x6c868820, 0x3952d: 0x6c868a20, 0x3952e: 0x6cb0aa20, 0x3952f: 0x6cb0ac20, + 0x39530: 0x6cb0ae20, 0x39531: 0x6cb0b020, 0x39532: 0x6cb0b220, 0x39533: 0x6cb0b420, + 0x39534: 0x6cb0b620, 0x39535: 0x6cb0b820, 0x39536: 0x6cb0ba20, 0x39537: 0x6cb0bc20, + 0x39538: 0x6cb0be20, 0x39539: 0x6cb0c020, 0x3953a: 0x6cb0c220, 0x3953b: 0x6cb0c420, + 0x3953c: 0x6cb0c620, 0x3953d: 0x6cb0c820, 0x3953e: 0x6cb0ca20, 0x3953f: 0x6cb0cc20, + // Block 0xe55, offset 0x39540 + 0x39540: 0x6cb0ce20, 0x39541: 0x6cb0d020, 0x39542: 0x6cb0d220, 0x39543: 0x6cb0d420, + 0x39544: 0x6cb0d620, 0x39545: 0x6cb0d820, 0x39546: 0x6cb0da20, 0x39547: 0x6cb0dc20, + 0x39548: 0x6cb0de20, 0x39549: 0x6cb0e020, 0x3954a: 0x6cb0e220, 0x3954b: 0x6cb0e420, + 0x3954c: 0x6cb0e620, 0x3954d: 0x6cb0e820, 0x3954e: 0x6cb0ea20, 0x3954f: 0x6cb0ec20, + 0x39550: 0x6cb0ee20, 0x39551: 0x6cb0f020, 0x39552: 0x6cb0f220, 0x39553: 0x6cb0f420, + 0x39554: 0x6cb0f620, 0x39555: 0x6cb0f820, 0x39556: 0x6cb0fa20, 0x39557: 0x6cb0fc20, + 0x39558: 0x6cb0fe20, 0x39559: 0x6cb10020, 0x3955a: 0x6cb10220, 0x3955b: 0x6cb10420, + 0x3955c: 0x6cdfd620, 0x3955d: 0x6cdfd820, 0x3955e: 0x6cdfda20, 0x3955f: 0x6cdfdc20, + 0x39560: 0x6cdfde20, 0x39561: 0x6cdfe020, 0x39562: 0x6cdfe220, 0x39563: 0x6cdfe420, + 0x39564: 0x6cdfe620, 0x39565: 0x6cdfe820, 0x39566: 0x6cdfea20, 0x39567: 0x6cdfec20, + 0x39568: 0x6cdfee20, 0x39569: 0x6cdff020, 0x3956a: 0x6cdff220, 0x3956b: 0x6cdff420, + 0x3956c: 0x6cdff620, 0x3956d: 0x6cdff820, 0x3956e: 0x6cdffa20, 0x3956f: 0x6cdffc20, + 0x39570: 0x6cdffe20, 0x39571: 0x6ce00020, 0x39572: 0x6ce00220, 0x39573: 0x6ce00420, + 0x39574: 0x6ce00620, 0x39575: 0x6ce00820, 0x39576: 0x6ce00a20, 0x39577: 0x6ce00c20, + 0x39578: 0x6ce00e20, 0x39579: 0x6ce01020, 0x3957a: 0x6ce01220, 0x3957b: 0x6ce01420, + 0x3957c: 0x6ce01620, 0x3957d: 0x6ce01820, 0x3957e: 0x6ce01a20, 0x3957f: 0x6ce01c20, + // Block 0xe56, offset 0x39580 + 0x39580: 0x6ce01e20, 0x39581: 0x6ce02020, 0x39582: 0x6ce02220, 0x39583: 0x6d0e4a20, + 0x39584: 0x6d0e4c20, 0x39585: 0x6d0e4e20, 0x39586: 0x6d0e5020, 0x39587: 0x6d0e5220, + 0x39588: 0x6d0e5420, 0x39589: 0x6d0e5620, 0x3958a: 0x6d0e5820, 0x3958b: 0x6d0e5a20, + 0x3958c: 0x6d0e5c20, 0x3958d: 0x6d0e5e20, 0x3958e: 0x6d0e6020, 0x3958f: 0x6d0e6220, + 0x39590: 0x6d0e6420, 0x39591: 0x6d0e6620, 0x39592: 0x6d0e6820, 0x39593: 0x6d0e6a20, + 0x39594: 0x6d0e6c20, 0x39595: 0x6d0e6e20, 0x39596: 0x6d0e7020, 0x39597: 0x6d0e7220, + 0x39598: 0x6d0e7420, 0x39599: 0x6d0e7620, 0x3959a: 0x6d0e7820, 0x3959b: 0x6d0e7a20, + 0x3959c: 0x6d0e7c20, 0x3959d: 0x6d0e7e20, 0x3959e: 0x6d0e8020, 0x3959f: 0x6d0e8220, + 0x395a0: 0x6d0e8420, 0x395a1: 0x6d0e8620, 0x395a2: 0x6d0e8820, 0x395a3: 0x6d0e8a20, + 0x395a4: 0x6d0e8c20, 0x395a5: 0x6d0e8e20, 0x395a6: 0x6d0e9020, 0x395a7: 0x6d0e9220, + 0x395a8: 0x6d0e9420, 0x395a9: 0x6d0e9620, 0x395aa: 0x6d0e9820, 0x395ab: 0x6d0e9a20, + 0x395ac: 0x6d0e9c20, 0x395ad: 0x6d0e9e20, 0x395ae: 0x6d0ea020, 0x395af: 0x6d0ea220, + 0x395b0: 0x6d0ea420, 0x395b1: 0x6d0ea620, 0x395b2: 0x6d0ea820, 0x395b3: 0x6d0eaa20, + 0x395b4: 0x6d3c9e20, 0x395b5: 0x6d3ca020, 0x395b6: 0x6d3ca220, 0x395b7: 0x6d3ca420, + 0x395b8: 0x6d3ca620, 0x395b9: 0x6d3ca820, 0x395ba: 0x6d3caa20, 0x395bb: 0x6d3cac20, + 0x395bc: 0x6d3cae20, 0x395bd: 0x6d3cb020, 0x395be: 0x6d3cb220, 0x395bf: 0x6d3cb420, + // Block 0xe57, offset 0x395c0 + 0x395c0: 0x6d3cb620, 0x395c1: 0x6d3cb820, 0x395c2: 0x6d3cba20, 0x395c3: 0x6d3cbc20, + 0x395c4: 0x6d3cbe20, 0x395c5: 0x6d3cc020, 0x395c6: 0x6d3cc220, 0x395c7: 0x6d3cc420, + 0x395c8: 0x6d3cc620, 0x395c9: 0x6d3cc820, 0x395ca: 0x6d3cca20, 0x395cb: 0x6d3ccc20, + 0x395cc: 0x6d3cce20, 0x395cd: 0x6d3cd020, 0x395ce: 0x6d3cd220, 0x395cf: 0x6d3cd420, + 0x395d0: 0x6d3cd620, 0x395d1: 0x6d3cd820, 0x395d2: 0x6d3cda20, 0x395d3: 0x6d3cdc20, + 0x395d4: 0x6d3cde20, 0x395d5: 0x6d3ce020, 0x395d6: 0x6d3ce220, 0x395d7: 0x6d3ce420, + 0x395d8: 0x6d3ce620, 0x395d9: 0x6d3ce820, 0x395da: 0x6d3cea20, 0x395db: 0x6d3cec20, + 0x395dc: 0x6d0eac20, 0x395dd: 0x6d3cee20, 0x395de: 0x6d3cf020, 0x395df: 0x6d3cf220, + 0x395e0: 0x6d3cf420, 0x395e1: 0x6d3cf620, 0x395e2: 0x6d3cf820, 0x395e3: 0x6d3cfa20, + 0x395e4: 0x6d3cfc20, 0x395e5: 0x6d3cfe20, 0x395e6: 0x6d68f820, 0x395e7: 0x6d68fa20, + 0x395e8: 0x6d68fc20, 0x395e9: 0x6d68fe20, 0x395ea: 0x6d690020, 0x395eb: 0x6d690220, + 0x395ec: 0x6d690420, 0x395ed: 0x6d690620, 0x395ee: 0x6d690820, 0x395ef: 0x6d690a20, + 0x395f0: 0x6d690c20, 0x395f1: 0x6d690e20, 0x395f2: 0x6d691020, 0x395f3: 0x6d691220, + 0x395f4: 0x6d691420, 0x395f5: 0x6d691620, 0x395f6: 0x6d691820, 0x395f7: 0x6d691a20, + 0x395f8: 0x6d691c20, 0x395f9: 0x6d691e20, 0x395fa: 0x6d692020, 0x395fb: 0x6d692220, + 0x395fc: 0x6d692420, 0x395fd: 0x6d692620, 0x395fe: 0x6d692820, 0x395ff: 0x6d692a20, + // Block 0xe58, offset 0x39600 + 0x39600: 0x6d692c20, 0x39601: 0x6d692e20, 0x39602: 0x6d693020, 0x39603: 0x6d693220, + 0x39604: 0x6d693420, 0x39605: 0x6d693620, 0x39606: 0x6d693820, 0x39607: 0x6d693a20, + 0x39608: 0x6d693c20, 0x39609: 0x6d693e20, 0x3960a: 0x6d694020, 0x3960b: 0x6d694220, + 0x3960c: 0x6d694420, 0x3960d: 0x6d694620, 0x3960e: 0x6d694820, 0x3960f: 0x6d694a20, + 0x39610: 0x6d694c20, 0x39611: 0x6d694e20, 0x39612: 0x6d695020, 0x39613: 0x6d695220, + 0x39614: 0x6d695420, 0x39615: 0x6d695620, 0x39616: 0x6d695820, 0x39617: 0x6d695a20, + 0x39618: 0x6d695c20, 0x39619: 0x6d695e20, 0x3961a: 0x6d696020, 0x3961b: 0x6d696220, + 0x3961c: 0x6d696420, 0x3961d: 0x6d696620, 0x3961e: 0x6d696820, 0x3961f: 0x6d696a20, + 0x39620: 0x6d696c20, 0x39621: 0x6d696e20, 0x39622: 0x6d697020, 0x39623: 0x6d928820, + 0x39624: 0x6d928a20, 0x39625: 0x6d928c20, 0x39626: 0x6d928e20, 0x39627: 0x6d929020, + 0x39628: 0x6d929220, 0x39629: 0x6d929420, 0x3962a: 0x6d929620, 0x3962b: 0x6d929820, + 0x3962c: 0x6d929a20, 0x3962d: 0x6d929c20, 0x3962e: 0x6d929e20, 0x3962f: 0x6d92a020, + 0x39630: 0x6d92a220, 0x39631: 0x6d92a420, 0x39632: 0x6d92a620, 0x39633: 0x6d92a820, + 0x39634: 0x6d92aa20, 0x39635: 0x6d92ac20, 0x39636: 0x6d92ae20, 0x39637: 0x6d92b020, + 0x39638: 0x6d92b220, 0x39639: 0x6d92b420, 0x3963a: 0x6d92b620, 0x3963b: 0x6d92b820, + 0x3963c: 0x6d92ba20, 0x3963d: 0x6d92bc20, 0x3963e: 0x6d92be20, 0x3963f: 0x6d92c020, + // Block 0xe59, offset 0x39640 + 0x39640: 0x6d92c220, 0x39641: 0x6d92c420, 0x39642: 0x6d92c620, 0x39643: 0x6d92c820, + 0x39644: 0x6d92ca20, 0x39645: 0x6d92cc20, 0x39646: 0x6d92ce20, 0x39647: 0x6d92d020, + 0x39648: 0x6d92d220, 0x39649: 0x6d92d420, 0x3964a: 0x6d92d620, 0x3964b: 0x6d92d820, + 0x3964c: 0x6d92da20, 0x3964d: 0x6d92dc20, 0x3964e: 0x6d92de20, 0x3964f: 0x6d92e020, + 0x39650: 0x6d92e220, 0x39651: 0x6d92e420, 0x39652: 0x6d92e620, 0x39653: 0x6d92e820, + 0x39654: 0x6d92ea20, 0x39655: 0x6d92ec20, 0x39656: 0x6d92ee20, 0x39657: 0x6d92f020, + 0x39658: 0x6db61e20, 0x39659: 0x6db62020, 0x3965a: 0x6db62220, 0x3965b: 0x6db62420, + 0x3965c: 0x6db62620, 0x3965d: 0x6db62820, 0x3965e: 0x6db62a20, 0x3965f: 0x6db62c20, + 0x39660: 0x6db62e20, 0x39661: 0x6db63020, 0x39662: 0x6db63220, 0x39663: 0x6db63420, + 0x39664: 0x6db63620, 0x39665: 0x6db63820, 0x39666: 0x6db63a20, 0x39667: 0x6db63c20, + 0x39668: 0x6db63e20, 0x39669: 0x6db64020, 0x3966a: 0x6db64220, 0x3966b: 0x6db64420, + 0x3966c: 0x6db64620, 0x3966d: 0x6db64820, 0x3966e: 0x6db64a20, 0x3966f: 0x6db64c20, + 0x39670: 0x6db64e20, 0x39671: 0x6db65020, 0x39672: 0x6db65220, 0x39673: 0x6db65420, + 0x39674: 0x6db65620, 0x39675: 0x6db65820, 0x39676: 0x6db65a20, 0x39677: 0x6db65c20, + 0x39678: 0x6db65e20, 0x39679: 0x6db66020, 0x3967a: 0x6db66220, 0x3967b: 0x6db66420, + 0x3967c: 0x6db66620, 0x3967d: 0x6db66820, 0x3967e: 0x6db66a20, 0x3967f: 0x6db66c20, + // Block 0xe5a, offset 0x39680 + 0x39680: 0x6db66e20, 0x39681: 0x6db67020, 0x39682: 0x6db67220, 0x39683: 0x6db67420, + 0x39684: 0x6db67620, 0x39685: 0x6db67820, 0x39686: 0x6db67a20, 0x39687: 0x6db67c20, + 0x39688: 0x6db67e20, 0x39689: 0x6db68020, 0x3968a: 0x6db68220, 0x3968b: 0x6db68420, + 0x3968c: 0x6db68620, 0x3968d: 0x6db68820, 0x3968e: 0x6db68a20, 0x3968f: 0x6db68c20, + 0x39690: 0x6db68e20, 0x39691: 0x6db69020, 0x39692: 0x6dd49a20, 0x39693: 0x6dd49c20, + 0x39694: 0x6dd49e20, 0x39695: 0x6dd4a020, 0x39696: 0x6dd4a220, 0x39697: 0x6dd4a420, + 0x39698: 0x6dd4a620, 0x39699: 0x6dd4a820, 0x3969a: 0x6dd4aa20, 0x3969b: 0x6dd4ac20, + 0x3969c: 0x6dd4ae20, 0x3969d: 0x6dd4b020, 0x3969e: 0x6dd4b220, 0x3969f: 0x6dd4b420, + 0x396a0: 0x6dd4b620, 0x396a1: 0x6dd4b820, 0x396a2: 0x6dd4ba20, 0x396a3: 0x6dd4bc20, + 0x396a4: 0x6dd4be20, 0x396a5: 0x6dd4c020, 0x396a6: 0x6dd4c220, 0x396a7: 0x6dd4c420, + 0x396a8: 0x6dd4c620, 0x396a9: 0x6dd4c820, 0x396aa: 0x6dd4ca20, 0x396ab: 0x6dd4cc20, + 0x396ac: 0x6dd4ce20, 0x396ad: 0x6dd4d020, 0x396ae: 0x6dd4d220, 0x396af: 0x6dd4d420, + 0x396b0: 0x6dd4d620, 0x396b1: 0x6dd4d820, 0x396b2: 0x6dd4da20, 0x396b3: 0x6dd4dc20, + 0x396b4: 0x6dd4de20, 0x396b5: 0x6dd4e020, 0x396b6: 0x6dd4e220, 0x396b7: 0x6dd4e420, + 0x396b8: 0x6dd4e620, 0x396b9: 0x6dd4e820, 0x396ba: 0x6dd4ea20, 0x396bb: 0x6dd4ec20, + 0x396bc: 0x6dd4ee20, 0x396bd: 0x6dd4f020, 0x396be: 0x6ded8820, 0x396bf: 0x6ded8a20, + // Block 0xe5b, offset 0x396c0 + 0x396c0: 0x6ded8c20, 0x396c1: 0x6ded8e20, 0x396c2: 0x6ded9020, 0x396c3: 0x6ded9220, + 0x396c4: 0x6ded9420, 0x396c5: 0x6ded9620, 0x396c6: 0x6ded9820, 0x396c7: 0x6ded9a20, + 0x396c8: 0x6ded9c20, 0x396c9: 0x6ded9e20, 0x396ca: 0x6deda020, 0x396cb: 0x6deda220, + 0x396cc: 0x6deda420, 0x396cd: 0x6deda620, 0x396ce: 0x6deda820, 0x396cf: 0x6dedaa20, + 0x396d0: 0x6dedac20, 0x396d1: 0x6dedae20, 0x396d2: 0x6dedb020, 0x396d3: 0x6dedb220, + 0x396d4: 0x6dedb420, 0x396d5: 0x6dedb620, 0x396d6: 0x6dedb820, 0x396d7: 0x6dedba20, + 0x396d8: 0x6dedbc20, 0x396d9: 0x6dedbe20, 0x396da: 0x6dedc020, 0x396db: 0x6dedc220, + 0x396dc: 0x6dedc420, 0x396dd: 0x6dedc620, 0x396de: 0x6dedc820, 0x396df: 0x6dedca20, + 0x396e0: 0x6dedcc20, 0x396e1: 0x6dedce20, 0x396e2: 0x6dedd020, 0x396e3: 0x6dedd220, + 0x396e4: 0x6dedd420, 0x396e5: 0x6dedd620, 0x396e6: 0x6dedd820, 0x396e7: 0x6e027c20, + 0x396e8: 0x6e027e20, 0x396e9: 0x6e028020, 0x396ea: 0x6e028220, 0x396eb: 0x6e028420, + 0x396ec: 0x6e028620, 0x396ed: 0x6e028820, 0x396ee: 0x6e028a20, 0x396ef: 0x6e028c20, + 0x396f0: 0x6e028e20, 0x396f1: 0x6e029020, 0x396f2: 0x6e029220, 0x396f3: 0x6e029420, + 0x396f4: 0x6e029620, 0x396f5: 0x6e029820, 0x396f6: 0x6e029a20, 0x396f7: 0x6e029c20, + 0x396f8: 0x6e029e20, 0x396f9: 0x6e02a020, 0x396fa: 0x6e02a220, 0x396fb: 0x6e02a420, + 0x396fc: 0x6e02a620, 0x396fd: 0x6e02a820, 0x396fe: 0x6e02aa20, 0x396ff: 0x6e02ac20, + // Block 0xe5c, offset 0x39700 + 0x39700: 0x6e02ae20, 0x39701: 0x6e02b020, 0x39702: 0x6e143820, 0x39703: 0x6e143a20, + 0x39704: 0x6e143c20, 0x39705: 0x6e143e20, 0x39706: 0x6e144020, 0x39707: 0x6e144220, + 0x39708: 0x6e144420, 0x39709: 0x6e144620, 0x3970a: 0x6e144820, 0x3970b: 0x6e144a20, + 0x3970c: 0x6e144c20, 0x3970d: 0x6e144e20, 0x3970e: 0x6e145020, 0x3970f: 0x6e145220, + 0x39710: 0x6e145420, 0x39711: 0x6e21d820, 0x39712: 0x6e145620, 0x39713: 0x6e145820, + 0x39714: 0x6e145a20, 0x39715: 0x6e145c20, 0x39716: 0x6e145e20, 0x39717: 0x6e146020, + 0x39718: 0x6e146220, 0x39719: 0x6e146420, 0x3971a: 0x6e146620, 0x3971b: 0x6e146820, + 0x3971c: 0x6e21da20, 0x3971d: 0x6e21dc20, 0x3971e: 0x6e21de20, 0x3971f: 0x6e21e020, + 0x39720: 0x6e21e220, 0x39721: 0x6e21e420, 0x39722: 0x6e21e620, 0x39723: 0x6e21e820, + 0x39724: 0x6e21ea20, 0x39725: 0x6e21ec20, 0x39726: 0x6e21ee20, 0x39727: 0x6e21f020, + 0x39728: 0x6e21f220, 0x39729: 0x6e21f420, 0x3972a: 0x6e21f620, 0x3972b: 0x6e21f820, + 0x3972c: 0x6e21fa20, 0x3972d: 0x6e21fc20, 0x3972e: 0x6e21fe20, 0x3972f: 0x6e220020, + 0x39730: 0x6e220220, 0x39731: 0x6e220420, 0x39732: 0x6e220620, 0x39733: 0x6e220820, + 0x39734: 0x6e220a20, 0x39735: 0x6e220c20, 0x39736: 0x6e220e20, 0x39737: 0x6e221020, + 0x39738: 0x6e2c5a20, 0x39739: 0x6e2c5c20, 0x3973a: 0x6e2c5e20, 0x3973b: 0x6e2c6020, + 0x3973c: 0x6e2c6220, 0x3973d: 0x6e2c6420, 0x3973e: 0x6e2c6620, 0x3973f: 0x6e2c6820, + // Block 0xe5d, offset 0x39740 + 0x39740: 0x6e2c6a20, 0x39741: 0x6e2c6c20, 0x39742: 0x6e2c6e20, 0x39743: 0x6e2c7020, + 0x39744: 0x6e2c7220, 0x39745: 0x6e348a20, 0x39746: 0x6e348c20, 0x39747: 0x6e348e20, + 0x39748: 0x6e349020, 0x39749: 0x6e349220, 0x3974a: 0x6e349420, 0x3974b: 0x6e349620, + 0x3974c: 0x6e349820, 0x3974d: 0x6e349a20, 0x3974e: 0x6e349c20, 0x3974f: 0x6e349e20, + 0x39750: 0x6e34a020, 0x39751: 0x6e3a4220, 0x39752: 0x6e3a4420, 0x39753: 0x6e3a4620, + 0x39754: 0x6e3a4820, 0x39755: 0x6e3a4a20, 0x39756: 0x6e3a4c20, 0x39757: 0x6e3a4e20, + 0x39758: 0x6e3a5020, 0x39759: 0x6e3e3820, 0x3975a: 0x6e3e3a20, 0x3975b: 0x6e3e3c20, + 0x3975c: 0x6e3e3e20, 0x3975d: 0x6e3e4020, 0x3975e: 0x6e410a20, 0x3975f: 0x6e410c20, + 0x39760: 0x6e410e20, 0x39761: 0x6e411020, 0x39762: 0x6e431220, 0x39763: 0x6e431420, + 0x39764: 0x6e431620, 0x39765: 0x6e428c20, 0x39766: 0x6e431820, 0x39767: 0x6e431a20, + 0x39768: 0x6e448220, 0x39769: 0x6e472020, 0x3976a: 0x6c26d620, 0x3976b: 0x6c26e820, + 0x3976c: 0x6c86c820, 0x3976d: 0x6c86ca20, 0x3976e: 0x6c86cc20, 0x3976f: 0x6cb14620, + 0x39770: 0x6cb14820, 0x39771: 0x6cb14a20, 0x39772: 0x6cb14c20, 0x39773: 0x6ce04c20, + 0x39774: 0x6ce04e20, 0x39775: 0x6d0ec420, 0x39776: 0x6d0ec620, 0x39777: 0x6d0ec820, + 0x39778: 0x6d3d1a20, 0x39779: 0x6d3d1c20, 0x3977a: 0x6d698820, 0x3977b: 0x6d698a20, + 0x3977c: 0x6d698c20, 0x3977d: 0x6d698e20, 0x3977e: 0x6d699020, 0x3977f: 0x6d699220, + // Block 0xe5e, offset 0x39780 + 0x39780: 0x6d930020, 0x39781: 0x6d930220, 0x39782: 0x6d930420, 0x39783: 0x6d930620, + 0x39784: 0x6d930820, 0x39785: 0x6d930a20, 0x39786: 0x6db6a620, 0x39787: 0x6db6a820, + 0x39788: 0x6db6aa20, 0x39789: 0x6db6ac20, 0x3978a: 0x6dd50220, 0x3978b: 0x6dede620, + 0x3978c: 0x6dede820, 0x3978d: 0x6dedea20, 0x3978e: 0x6dedec20, 0x3978f: 0x6dedee20, + 0x39790: 0x6dedf020, 0x39791: 0x6dedf220, 0x39792: 0x6dedf420, 0x39793: 0x6e02b620, + 0x39794: 0x6e02b820, 0x39795: 0x6e146c20, 0x39796: 0x6e146e20, 0x39797: 0x6e3a5220, + 0x39798: 0x6e411220, 0x39799: 0x6e45da20, 0x3979a: 0x6c60c220, 0x3979b: 0x6c86d220, + 0x3979c: 0x6c86d420, 0x3979d: 0x6c86d620, 0x3979e: 0x6cb15420, 0x3979f: 0x6cb15620, + 0x397a0: 0x6ce05220, 0x397a1: 0x6ce05420, 0x397a2: 0x6ce05620, 0x397a3: 0x6ce05820, + 0x397a4: 0x6ce05a20, 0x397a5: 0x6d0ed020, 0x397a6: 0x6d0ed220, 0x397a7: 0x6cee2c20, + 0x397a8: 0x6d0ed420, 0x397a9: 0x6d3d2420, 0x397aa: 0x6d3d2620, 0x397ab: 0x6d3d2820, + 0x397ac: 0x6d3d2a20, 0x397ad: 0x6d699e20, 0x397ae: 0x6d69a020, 0x397af: 0x6d69a220, + 0x397b0: 0x6d69a420, 0x397b1: 0x6d69a620, 0x397b2: 0x6d69a820, 0x397b3: 0x6d69aa20, + 0x397b4: 0x6d69ac20, 0x397b5: 0x6d69ae20, 0x397b6: 0x6d69b020, 0x397b7: 0x6d931620, + 0x397b8: 0x6d931820, 0x397b9: 0x6d931a20, 0x397ba: 0x6d931c20, 0x397bb: 0x6d931e20, + 0x397bc: 0x6db6b620, 0x397bd: 0x6db6b820, 0x397be: 0x6db6ba20, 0x397bf: 0x6db6bc20, + // Block 0xe5f, offset 0x397c0 + 0x397c0: 0x6db6be20, 0x397c1: 0x6db6c020, 0x397c2: 0x6db6c220, 0x397c3: 0x6dd50820, + 0x397c4: 0x6dd50a20, 0x397c5: 0x6dd50c20, 0x397c6: 0x6dd50e20, 0x397c7: 0x6dd51020, + 0x397c8: 0x6db6c420, 0x397c9: 0x6dedf620, 0x397ca: 0x6dedf820, 0x397cb: 0x6dedfa20, + 0x397cc: 0x6dedfc20, 0x397cd: 0x6dedfe20, 0x397ce: 0x6dee0020, 0x397cf: 0x6dee0220, + 0x397d0: 0x6dee0420, 0x397d1: 0x6e02bc20, 0x397d2: 0x6e02be20, 0x397d3: 0x6e02c020, + 0x397d4: 0x6e02c220, 0x397d5: 0x6e02c420, 0x397d6: 0x6e02c620, 0x397d7: 0x6e147220, + 0x397d8: 0x6e147420, 0x397d9: 0x6e221a20, 0x397da: 0x6e221c20, 0x397db: 0x6e221e20, + 0x397dc: 0x6e222020, 0x397dd: 0x6e2c7a20, 0x397de: 0x6e2c7c20, 0x397df: 0x6e2c7e20, + 0x397e0: 0x6e34a820, 0x397e1: 0x6e3a5820, 0x397e2: 0x6e3a5a20, 0x397e3: 0x6e411620, + 0x397e4: 0x6e411820, 0x397e5: 0x6e448420, 0x397e6: 0x6c40ba20, 0x397e7: 0x6c26ee20, + 0x397e8: 0x6c26f020, 0x397e9: 0x6c60c420, 0x397ea: 0x6c86dc20, 0x397eb: 0x6c86de20, + 0x397ec: 0x6c86e020, 0x397ed: 0x6c86e220, 0x397ee: 0x6cb16820, 0x397ef: 0x6cb16a20, + 0x397f0: 0x6cb16c20, 0x397f1: 0x6cb16e20, 0x397f2: 0x6cb17020, 0x397f3: 0x6cb17220, + 0x397f4: 0x6cb17420, 0x397f5: 0x6ce06620, 0x397f6: 0x6ce06820, 0x397f7: 0x6ce06a20, + 0x397f8: 0x6ce06c20, 0x397f9: 0x6ce06e20, 0x397fa: 0x6ce07020, 0x397fb: 0x6ce07220, + 0x397fc: 0x6ce07420, 0x397fd: 0x6ce07620, 0x397fe: 0x6ce07820, 0x397ff: 0x6d0ee220, + // Block 0xe60, offset 0x39800 + 0x39800: 0x6d0ee420, 0x39801: 0x6d0ee620, 0x39802: 0x6d0ee820, 0x39803: 0x6d0eea20, + 0x39804: 0x6d0eec20, 0x39805: 0x6d0eee20, 0x39806: 0x6d0ef020, 0x39807: 0x6d0ef220, + 0x39808: 0x6d0ef420, 0x39809: 0x6d0ef620, 0x3980a: 0x6d0ef820, 0x3980b: 0x6d0efa20, + 0x3980c: 0x6d0efc20, 0x3980d: 0x6d3d3420, 0x3980e: 0x6d3d3620, 0x3980f: 0x6d3d3820, + 0x39810: 0x6d3d3a20, 0x39811: 0x6d3d3c20, 0x39812: 0x6d3d3e20, 0x39813: 0x6d3d4020, + 0x39814: 0x6d3d4220, 0x39815: 0x6d3d4420, 0x39816: 0x6d3d4620, 0x39817: 0x6d3d4820, + 0x39818: 0x6d69ba20, 0x39819: 0x6d69bc20, 0x3981a: 0x6d69be20, 0x3981b: 0x6d69c020, + 0x3981c: 0x6d69c220, 0x3981d: 0x6d69c420, 0x3981e: 0x6d69c620, 0x3981f: 0x6d69c820, + 0x39820: 0x6d69ca20, 0x39821: 0x6d69cc20, 0x39822: 0x6d69ce20, 0x39823: 0x6d69d020, + 0x39824: 0x6d69d220, 0x39825: 0x6d69d420, 0x39826: 0x6d69d620, 0x39827: 0x6d69d820, + 0x39828: 0x6d932a20, 0x39829: 0x6d932c20, 0x3982a: 0x6d932e20, 0x3982b: 0x6d933020, + 0x3982c: 0x6d933220, 0x3982d: 0x6d933420, 0x3982e: 0x6d933620, 0x3982f: 0x6d933820, + 0x39830: 0x6d933a20, 0x39831: 0x6d933c20, 0x39832: 0x6db6d020, 0x39833: 0x6db6d220, + 0x39834: 0x6db6d420, 0x39835: 0x6db6d620, 0x39836: 0x6db6d820, 0x39837: 0x6db6da20, + 0x39838: 0x6db6dc20, 0x39839: 0x6db6de20, 0x3983a: 0x6db6e020, 0x3983b: 0x6dd51a20, + 0x3983c: 0x6dd51c20, 0x3983d: 0x6dd51e20, 0x3983e: 0x6dd52020, 0x3983f: 0x6dd52220, + // Block 0xe61, offset 0x39840 + 0x39840: 0x6dd52420, 0x39841: 0x6dd52620, 0x39842: 0x6dee0c20, 0x39843: 0x6dee0e20, + 0x39844: 0x6dee1020, 0x39845: 0x6dee1220, 0x39846: 0x6dee1420, 0x39847: 0x6e02c820, + 0x39848: 0x6e02ca20, 0x39849: 0x6e02cc20, 0x3984a: 0x6e02ce20, 0x3984b: 0x6e02d020, + 0x3984c: 0x6e147820, 0x3984d: 0x6e147a20, 0x3984e: 0x6e147c20, 0x3984f: 0x6e147e20, + 0x39850: 0x6e222420, 0x39851: 0x6e222620, 0x39852: 0x6e222820, 0x39853: 0x6e222a20, + 0x39854: 0x6e2c8020, 0x39855: 0x6e2c8220, 0x39856: 0x6e2c8420, 0x39857: 0x6e222c20, + 0x39858: 0x6e34aa20, 0x39859: 0x6e34ac20, 0x3985a: 0x6e3a6020, 0x3985b: 0x6e3a6220, + 0x3985c: 0x6e3a6420, 0x3985d: 0x6e411a20, 0x3985e: 0x6e448620, 0x3985f: 0x6e46ec20, + 0x39860: 0x6c40be20, 0x39861: 0x6c60c620, 0x39862: 0x6c86ea20, 0x39863: 0x6c86ec20, + 0x39864: 0x6cb18420, 0x39865: 0x6cb18620, 0x39866: 0x6cb18820, 0x39867: 0x6cb18a20, + 0x39868: 0x6cb18c20, 0x39869: 0x6cb18e20, 0x3986a: 0x6cb19020, 0x3986b: 0x6cb19220, + 0x3986c: 0x6ce08a20, 0x3986d: 0x6ce08c20, 0x3986e: 0x6ce08e20, 0x3986f: 0x6ce09020, + 0x39870: 0x6ce09220, 0x39871: 0x6ce09420, 0x39872: 0x6ce09620, 0x39873: 0x6ce09820, + 0x39874: 0x6ce09a20, 0x39875: 0x6ce09c20, 0x39876: 0x6ce09e20, 0x39877: 0x6ce0a020, + 0x39878: 0x6ce0a220, 0x39879: 0x6ce0a420, 0x3987a: 0x6ce0a620, 0x3987b: 0x6ce0a820, + 0x3987c: 0x6ce0aa20, 0x3987d: 0x6ce0ac20, 0x3987e: 0x6d0f0c20, 0x3987f: 0x6d0f0e20, + // Block 0xe62, offset 0x39880 + 0x39880: 0x6d0f1020, 0x39881: 0x6d0f1220, 0x39882: 0x6d0f1420, 0x39883: 0x6d0f1620, + 0x39884: 0x6d0f1820, 0x39885: 0x6d0f1a20, 0x39886: 0x6d0f1c20, 0x39887: 0x6d0f1e20, + 0x39888: 0x6d0f2020, 0x39889: 0x6d0f2220, 0x3988a: 0x6d3d5620, 0x3988b: 0x6d3d5820, + 0x3988c: 0x6d3d5a20, 0x3988d: 0x6d3d5c20, 0x3988e: 0x6d3d5e20, 0x3988f: 0x6d3d6020, + 0x39890: 0x6d3d6220, 0x39891: 0x6d3d6420, 0x39892: 0x6d3d6620, 0x39893: 0x6d3d6820, + 0x39894: 0x6d3d6a20, 0x39895: 0x6d3d6c20, 0x39896: 0x6d3d6e20, 0x39897: 0x6d3d7020, + 0x39898: 0x6d3d7220, 0x39899: 0x6d69e420, 0x3989a: 0x6d69e620, 0x3989b: 0x6d69e820, + 0x3989c: 0x6d69ea20, 0x3989d: 0x6d69ec20, 0x3989e: 0x6d69ee20, 0x3989f: 0x6d69f020, + 0x398a0: 0x6d69f220, 0x398a1: 0x6d69f420, 0x398a2: 0x6d69f620, 0x398a3: 0x6d69f820, + 0x398a4: 0x6d69fa20, 0x398a5: 0x6d69fc20, 0x398a6: 0x6d934a20, 0x398a7: 0x6d934c20, + 0x398a8: 0x6d934e20, 0x398a9: 0x6d935020, 0x398aa: 0x6d935220, 0x398ab: 0x6d935420, + 0x398ac: 0x6d935620, 0x398ad: 0x6d935820, 0x398ae: 0x6d935a20, 0x398af: 0x6d935c20, + 0x398b0: 0x6d935e20, 0x398b1: 0x6d69fe20, 0x398b2: 0x6d936020, 0x398b3: 0x6d936220, + 0x398b4: 0x6d936420, 0x398b5: 0x6db6ea20, 0x398b6: 0x6db6ec20, 0x398b7: 0x6db6ee20, + 0x398b8: 0x6db6f020, 0x398b9: 0x6db6f220, 0x398ba: 0x6db6f420, 0x398bb: 0x6db6f620, + 0x398bc: 0x6db6f820, 0x398bd: 0x6db6fa20, 0x398be: 0x6db6fc20, 0x398bf: 0x6db6fe20, + // Block 0xe63, offset 0x398c0 + 0x398c0: 0x6db70020, 0x398c1: 0x6dd53220, 0x398c2: 0x6dd53420, 0x398c3: 0x6dd53620, + 0x398c4: 0x6dd53820, 0x398c5: 0x6dd53a20, 0x398c6: 0x6dee2220, 0x398c7: 0x6dd53c20, + 0x398c8: 0x6dd53e20, 0x398c9: 0x6dd54020, 0x398ca: 0x6dd54220, 0x398cb: 0x6dd54420, + 0x398cc: 0x6dee2420, 0x398cd: 0x6dee2620, 0x398ce: 0x6dee2820, 0x398cf: 0x6dee2a20, + 0x398d0: 0x6e02d220, 0x398d1: 0x6dee2c20, 0x398d2: 0x6dee2e20, 0x398d3: 0x6dee3020, + 0x398d4: 0x6dee3220, 0x398d5: 0x6dee3420, 0x398d6: 0x6e02d420, 0x398d7: 0x6e02d620, + 0x398d8: 0x6e02d820, 0x398d9: 0x6e02da20, 0x398da: 0x6e02dc20, 0x398db: 0x6e02de20, + 0x398dc: 0x6e02e020, 0x398dd: 0x6e148020, 0x398de: 0x6e148220, 0x398df: 0x6e222e20, + 0x398e0: 0x6e2c8620, 0x398e1: 0x6e2c8820, 0x398e2: 0x6e34ae20, 0x398e3: 0x6e411e20, + 0x398e4: 0x6c60ce20, 0x398e5: 0x6c60d020, 0x398e6: 0x6c60d220, 0x398e7: 0x6c60d420, + 0x398e8: 0x6c60d620, 0x398e9: 0x6c60d820, 0x398ea: 0x6c86f820, 0x398eb: 0x6c86fa20, + 0x398ec: 0x6c86fc20, 0x398ed: 0x6c86fe20, 0x398ee: 0x6c870020, 0x398ef: 0x6c870220, + 0x398f0: 0x6c870420, 0x398f1: 0x6c870620, 0x398f2: 0x6c870820, 0x398f3: 0x6cb1ac20, + 0x398f4: 0x6cb1ae20, 0x398f5: 0x6cb1b020, 0x398f6: 0x6cb1b220, 0x398f7: 0x6cb1b420, + 0x398f8: 0x6cb1b620, 0x398f9: 0x6cb1b820, 0x398fa: 0x6cb1ba20, 0x398fb: 0x6cb1bc20, + 0x398fc: 0x6cb1be20, 0x398fd: 0x6cb1c020, 0x398fe: 0x6cb1c220, 0x398ff: 0x6cb1c420, + // Block 0xe64, offset 0x39900 + 0x39900: 0x6cb1c620, 0x39901: 0x6cb1c820, 0x39902: 0x6cb1ca20, 0x39903: 0x6cb1cc20, + 0x39904: 0x6cb1ce20, 0x39905: 0x6cb1d020, 0x39906: 0x6cb1d220, 0x39907: 0x6cb1d420, + 0x39908: 0x6cb1d620, 0x39909: 0x6ce0e020, 0x3990a: 0x6ce0e220, 0x3990b: 0x6ce0e420, + 0x3990c: 0x6ce0e620, 0x3990d: 0x6ce0e820, 0x3990e: 0x6ce0ea20, 0x3990f: 0x6ce0ec20, + 0x39910: 0x6ce0ee20, 0x39911: 0x6ce0f020, 0x39912: 0x6ce0f220, 0x39913: 0x6ce0f420, + 0x39914: 0x6ce0f620, 0x39915: 0x6ce0f820, 0x39916: 0x6ce0fa20, 0x39917: 0x6ce0fc20, + 0x39918: 0x6ce0fe20, 0x39919: 0x6ce10020, 0x3991a: 0x6ce10220, 0x3991b: 0x6ce10420, + 0x3991c: 0x6ce10620, 0x3991d: 0x6ce10820, 0x3991e: 0x6ce10a20, 0x3991f: 0x6ce10c20, + 0x39920: 0x6ce10e20, 0x39921: 0x6ce11020, 0x39922: 0x6ce11220, 0x39923: 0x6d0f4a20, + 0x39924: 0x6d0f4c20, 0x39925: 0x6d0f4e20, 0x39926: 0x6d0f5020, 0x39927: 0x6d0f5220, + 0x39928: 0x6d0f5420, 0x39929: 0x6d0f5620, 0x3992a: 0x6d0f5820, 0x3992b: 0x6d0f5a20, + 0x3992c: 0x6d0f5c20, 0x3992d: 0x6d0f5e20, 0x3992e: 0x6d0f6020, 0x3992f: 0x6d0f6220, + 0x39930: 0x6d0f6420, 0x39931: 0x6d0f6620, 0x39932: 0x6d0f6820, 0x39933: 0x6d0f6a20, + 0x39934: 0x6d0f6c20, 0x39935: 0x6d0f6e20, 0x39936: 0x6d0f7020, 0x39937: 0x6d0f7220, + 0x39938: 0x6d0f7420, 0x39939: 0x6d0f7620, 0x3993a: 0x6d0f7820, 0x3993b: 0x6d0f7a20, + 0x3993c: 0x6d0f7c20, 0x3993d: 0x6d0f7e20, 0x3993e: 0x6d0f8020, 0x3993f: 0x6d0f8220, + // Block 0xe65, offset 0x39940 + 0x39940: 0x6d0f8420, 0x39941: 0x6d0f8620, 0x39942: 0x6d0f8820, 0x39943: 0x6d0f8a20, + 0x39944: 0x6d0f8c20, 0x39945: 0x6d3d9020, 0x39946: 0x6d3d9220, 0x39947: 0x6d3d9420, + 0x39948: 0x6d3d9620, 0x39949: 0x6d3d9820, 0x3994a: 0x6d3d9a20, 0x3994b: 0x6d3d9c20, + 0x3994c: 0x6d3d9e20, 0x3994d: 0x6d3da020, 0x3994e: 0x6d3da220, 0x3994f: 0x6d3da420, + 0x39950: 0x6d3da620, 0x39951: 0x6d3da820, 0x39952: 0x6d3daa20, 0x39953: 0x6d3dac20, + 0x39954: 0x6d3dae20, 0x39955: 0x6d3db020, 0x39956: 0x6d3db220, 0x39957: 0x6d3db420, + 0x39958: 0x6d3db620, 0x39959: 0x6d3db820, 0x3995a: 0x6d3dba20, 0x3995b: 0x6d6a3c20, + 0x3995c: 0x6d6a3e20, 0x3995d: 0x6d6a4020, 0x3995e: 0x6d6a4220, 0x3995f: 0x6d6a4420, + 0x39960: 0x6d6a4620, 0x39961: 0x6d6a4820, 0x39962: 0x6d6a4a20, 0x39963: 0x6d6a4c20, + 0x39964: 0x6d6a4e20, 0x39965: 0x6d6a5020, 0x39966: 0x6d6a5220, 0x39967: 0x6d6a5420, + 0x39968: 0x6d6a5620, 0x39969: 0x6d6a5820, 0x3996a: 0x6d6a5a20, 0x3996b: 0x6d6a5c20, + 0x3996c: 0x6d6a5e20, 0x3996d: 0x6d6a6020, 0x3996e: 0x6d6a6220, 0x3996f: 0x6d6a6420, + 0x39970: 0x6d6a6620, 0x39971: 0x6d938420, 0x39972: 0x6d938620, 0x39973: 0x6d938820, + 0x39974: 0x6d938a20, 0x39975: 0x6d938c20, 0x39976: 0x6d938e20, 0x39977: 0x6d939020, + 0x39978: 0x6d939220, 0x39979: 0x6d939420, 0x3997a: 0x6d939620, 0x3997b: 0x6d939820, + 0x3997c: 0x6d939a20, 0x3997d: 0x6d939c20, 0x3997e: 0x6d939e20, 0x3997f: 0x6d93a020, + // Block 0xe66, offset 0x39980 + 0x39980: 0x6d93a220, 0x39981: 0x6d93a420, 0x39982: 0x6d93a620, 0x39983: 0x6d93a820, + 0x39984: 0x6d93aa20, 0x39985: 0x6db02a20, 0x39986: 0x6d93ac20, 0x39987: 0x6d93ae20, + 0x39988: 0x6d93b020, 0x39989: 0x6d93b220, 0x3998a: 0x6d93b420, 0x3998b: 0x6d93b620, + 0x3998c: 0x6db71820, 0x3998d: 0x6db71a20, 0x3998e: 0x6db71c20, 0x3998f: 0x6db71e20, + 0x39990: 0x6db72020, 0x39991: 0x6db72220, 0x39992: 0x6db72420, 0x39993: 0x6db72620, + 0x39994: 0x6db72820, 0x39995: 0x6db72a20, 0x39996: 0x6db72c20, 0x39997: 0x6db72e20, + 0x39998: 0x6db73020, 0x39999: 0x6db73220, 0x3999a: 0x6db73420, 0x3999b: 0x6db73620, + 0x3999c: 0x6db73820, 0x3999d: 0x6db73a20, 0x3999e: 0x6dd55620, 0x3999f: 0x6dd55820, + 0x399a0: 0x6dd55a20, 0x399a1: 0x6dd55c20, 0x399a2: 0x6dd55e20, 0x399a3: 0x6dd56020, + 0x399a4: 0x6dd56220, 0x399a5: 0x6dd56420, 0x399a6: 0x6dd56620, 0x399a7: 0x6dd56820, + 0x399a8: 0x6dd56a20, 0x399a9: 0x6dd56c20, 0x399aa: 0x6dd56e20, 0x399ab: 0x6dd57020, + 0x399ac: 0x6dd57220, 0x399ad: 0x6dd57420, 0x399ae: 0x6dd57620, 0x399af: 0x6dd57820, + 0x399b0: 0x6dd57a20, 0x399b1: 0x6dd57c20, 0x399b2: 0x6dd57e20, 0x399b3: 0x6dd58020, + 0x399b4: 0x6dd58220, 0x399b5: 0x6dd58420, 0x399b6: 0x6dd58620, 0x399b7: 0x6dd58820, + 0x399b8: 0x6dd58a20, 0x399b9: 0x6dd58c20, 0x399ba: 0x6dd58e20, 0x399bb: 0x6dd59020, + 0x399bc: 0x6dee4620, 0x399bd: 0x6dee4820, 0x399be: 0x6dee4a20, 0x399bf: 0x6dee4c20, + // Block 0xe67, offset 0x399c0 + 0x399c0: 0x6dee4e20, 0x399c1: 0x6dee5020, 0x399c2: 0x6dee5220, 0x399c3: 0x6dee5420, + 0x399c4: 0x6dee5620, 0x399c5: 0x6dee5820, 0x399c6: 0x6dee5a20, 0x399c7: 0x6dee5c20, + 0x399c8: 0x6dee5e20, 0x399c9: 0x6dee6020, 0x399ca: 0x6dee6220, 0x399cb: 0x6dee6420, + 0x399cc: 0x6dee6620, 0x399cd: 0x6dee6820, 0x399ce: 0x6dee6a20, 0x399cf: 0x6dee6c20, + 0x399d0: 0x6dee6e20, 0x399d1: 0x6dee7020, 0x399d2: 0x6dee7220, 0x399d3: 0x6dee7420, + 0x399d4: 0x6dee7620, 0x399d5: 0x6dee7820, 0x399d6: 0x6e02ea20, 0x399d7: 0x6e02ec20, + 0x399d8: 0x6e02ee20, 0x399d9: 0x6e02f020, 0x399da: 0x6e02f220, 0x399db: 0x6e02f420, + 0x399dc: 0x6e02f620, 0x399dd: 0x6e02f820, 0x399de: 0x6e02fa20, 0x399df: 0x6e02fc20, + 0x399e0: 0x6e02fe20, 0x399e1: 0x6e030020, 0x399e2: 0x6e030220, 0x399e3: 0x6e030420, + 0x399e4: 0x6e030620, 0x399e5: 0x6e030820, 0x399e6: 0x6e148e20, 0x399e7: 0x6e149020, + 0x399e8: 0x6e149220, 0x399e9: 0x6e149420, 0x399ea: 0x6e149620, 0x399eb: 0x6e149820, + 0x399ec: 0x6e149a20, 0x399ed: 0x6e149c20, 0x399ee: 0x6e149e20, 0x399ef: 0x6e14a020, + 0x399f0: 0x6e14a220, 0x399f1: 0x6e223a20, 0x399f2: 0x6e223c20, 0x399f3: 0x6e223e20, + 0x399f4: 0x6e224020, 0x399f5: 0x6e224220, 0x399f6: 0x6e224420, 0x399f7: 0x6e224620, + 0x399f8: 0x6e224820, 0x399f9: 0x6e224a20, 0x399fa: 0x6e224c20, 0x399fb: 0x6e224e20, + 0x399fc: 0x6e225020, 0x399fd: 0x6e2c9020, 0x399fe: 0x6e2c9220, 0x399ff: 0x6e225220, + // Block 0xe68, offset 0x39a00 + 0x39a00: 0x6e2c9420, 0x39a01: 0x6e2c9620, 0x39a02: 0x6e2c9820, 0x39a03: 0x6e2c9a20, + 0x39a04: 0x6e2c9c20, 0x39a05: 0x6e2c9e20, 0x39a06: 0x6e2ca020, 0x39a07: 0x6e2ca220, + 0x39a08: 0x6e34b220, 0x39a09: 0x6e34b420, 0x39a0a: 0x6e34b620, 0x39a0b: 0x6e34b820, + 0x39a0c: 0x6e3a6a20, 0x39a0d: 0x6e3a6c20, 0x39a0e: 0x6e3e4420, 0x39a0f: 0x6e3e4620, + 0x39a10: 0x6e3e4820, 0x39a11: 0x6c40da20, 0x39a12: 0x6c60f420, 0x39a13: 0x6cb1e420, + 0x39a14: 0x6ce12e20, 0x39a15: 0x6ce13020, 0x39a16: 0x6ce13220, 0x39a17: 0x6d6a7420, + 0x39a18: 0x6c40dc20, 0x39a19: 0x6c60fa20, 0x39a1a: 0x6c60fc20, 0x39a1b: 0x6cb1ee20, + 0x39a1c: 0x6cb1f020, 0x39a1d: 0x6ce13620, 0x39a1e: 0x6ce13820, 0x39a1f: 0x6ce13a20, + 0x39a20: 0x6d0fa020, 0x39a21: 0x6d0fa220, 0x39a22: 0x6d0fa420, 0x39a23: 0x6d3dd020, + 0x39a24: 0x6d3dd220, 0x39a25: 0x6d3dd420, 0x39a26: 0x6d3dd620, 0x39a27: 0x6d6a7620, + 0x39a28: 0x6d6a7820, 0x39a29: 0x6d6a7a20, 0x39a2a: 0x6d6a7c20, 0x39a2b: 0x6d6a7e20, + 0x39a2c: 0x6d93d020, 0x39a2d: 0x6d93d220, 0x39a2e: 0x6d93d420, 0x39a2f: 0x6d93d620, + 0x39a30: 0x6d93d820, 0x39a31: 0x6d93da20, 0x39a32: 0x6db74620, 0x39a33: 0x6db74820, + 0x39a34: 0x6db74a20, 0x39a35: 0x6db74c20, 0x39a36: 0x6dd59620, 0x39a37: 0x6dd59820, + 0x39a38: 0x6dee7c20, 0x39a39: 0x6dee7e20, 0x39a3a: 0x6dee8020, 0x39a3b: 0x6dee8220, + 0x39a3c: 0x6dee8420, 0x39a3d: 0x6e14a820, 0x39a3e: 0x6e14aa20, 0x39a3f: 0x6e14ac20, + // Block 0xe69, offset 0x39a40 + 0x39a40: 0x6e225820, 0x39a41: 0x6e225a20, 0x39a42: 0x6e2ca620, 0x39a43: 0x6e2ca820, + 0x39a44: 0x6e2caa20, 0x39a45: 0x6e2cac20, 0x39a46: 0x6c26fe20, 0x39a47: 0x6c40de20, + 0x39a48: 0x6c610820, 0x39a49: 0x6c610a20, 0x39a4a: 0x6c610c20, 0x39a4b: 0x6c610e20, + 0x39a4c: 0x6c611020, 0x39a4d: 0x6c611220, 0x39a4e: 0x6c611420, 0x39a4f: 0x6c873420, + 0x39a50: 0x6c873620, 0x39a51: 0x6c873820, 0x39a52: 0x6c873a20, 0x39a53: 0x6c873c20, + 0x39a54: 0x6c873e20, 0x39a55: 0x6c874020, 0x39a56: 0x6c874220, 0x39a57: 0x6c874420, + 0x39a58: 0x6c874620, 0x39a59: 0x6c874820, 0x39a5a: 0x6c874a20, 0x39a5b: 0x6c874c20, + 0x39a5c: 0x6c874e20, 0x39a5d: 0x6cb20a20, 0x39a5e: 0x6cb20c20, 0x39a5f: 0x6cb20e20, + 0x39a60: 0x6cb21020, 0x39a61: 0x6cb21220, 0x39a62: 0x6cb21420, 0x39a63: 0x6cb21620, + 0x39a64: 0x6cb21820, 0x39a65: 0x6cb21a20, 0x39a66: 0x6cb21c20, 0x39a67: 0x6cb21e20, + 0x39a68: 0x6cb22020, 0x39a69: 0x6cb22220, 0x39a6a: 0x6cb22420, 0x39a6b: 0x6cb22620, + 0x39a6c: 0x6cb22820, 0x39a6d: 0x6cb22a20, 0x39a6e: 0x6cb22c20, 0x39a6f: 0x6cb22e20, + 0x39a70: 0x6cb23020, 0x39a71: 0x6cb23220, 0x39a72: 0x6cb23420, 0x39a73: 0x6cb23620, + 0x39a74: 0x6cb23820, 0x39a75: 0x6cb23a20, 0x39a76: 0x6ce16620, 0x39a77: 0x6ce16820, + 0x39a78: 0x6ce16a20, 0x39a79: 0x6ce16c20, 0x39a7a: 0x6ce16e20, 0x39a7b: 0x6ce17020, + 0x39a7c: 0x6ce17220, 0x39a7d: 0x6ce17420, 0x39a7e: 0x6ce17620, 0x39a7f: 0x6ce17820, + // Block 0xe6a, offset 0x39a80 + 0x39a80: 0x6ce17a20, 0x39a81: 0x6ce17c20, 0x39a82: 0x6ce17e20, 0x39a83: 0x6ce18020, + 0x39a84: 0x6ce18220, 0x39a85: 0x6ce18420, 0x39a86: 0x6ce18620, 0x39a87: 0x6ce18820, + 0x39a88: 0x6ce18a20, 0x39a89: 0x6ce18c20, 0x39a8a: 0x6ce18e20, 0x39a8b: 0x6ce19020, + 0x39a8c: 0x6ce19220, 0x39a8d: 0x6ce19420, 0x39a8e: 0x6ce19620, 0x39a8f: 0x6ce19820, + 0x39a90: 0x6d0fc620, 0x39a91: 0x6d0fc820, 0x39a92: 0x6d0fca20, 0x39a93: 0x6d0fcc20, + 0x39a94: 0x6d0fce20, 0x39a95: 0x6d0fd020, 0x39a96: 0x6d0fd220, 0x39a97: 0x6d0fd420, + 0x39a98: 0x6d0fd620, 0x39a99: 0x6d0fd820, 0x39a9a: 0x6d0fda20, 0x39a9b: 0x6d0fdc20, + 0x39a9c: 0x6d0fde20, 0x39a9d: 0x6d0fe020, 0x39a9e: 0x6d0fe220, 0x39a9f: 0x6d0fe420, + 0x39aa0: 0x6d0fe620, 0x39aa1: 0x6d0fe820, 0x39aa2: 0x6d0fea20, 0x39aa3: 0x6d0fec20, + 0x39aa4: 0x6d0fee20, 0x39aa5: 0x6d0ff020, 0x39aa6: 0x6d0ff220, 0x39aa7: 0x6d0ff420, + 0x39aa8: 0x6d0ff620, 0x39aa9: 0x6d0ff820, 0x39aaa: 0x6d0ffa20, 0x39aab: 0x6d0ffc20, + 0x39aac: 0x6d0ffe20, 0x39aad: 0x6d100020, 0x39aae: 0x6d100220, 0x39aaf: 0x6d3df420, + 0x39ab0: 0x6d3df620, 0x39ab1: 0x6d3df820, 0x39ab2: 0x6d3dfa20, 0x39ab3: 0x6d3dfc20, + 0x39ab4: 0x6d3dfe20, 0x39ab5: 0x6d3e0020, 0x39ab6: 0x6d3e0220, 0x39ab7: 0x6d3e0420, + 0x39ab8: 0x6d3e0620, 0x39ab9: 0x6d3e0820, 0x39aba: 0x6d3e0a20, 0x39abb: 0x6d3e0c20, + 0x39abc: 0x6d3e0e20, 0x39abd: 0x6d3e1020, 0x39abe: 0x6d3e1220, 0x39abf: 0x6d3e1420, + // Block 0xe6b, offset 0x39ac0 + 0x39ac0: 0x6d3e1620, 0x39ac1: 0x6d3e1820, 0x39ac2: 0x6d3e1a20, 0x39ac3: 0x6d3e1c20, + 0x39ac4: 0x6d3e1e20, 0x39ac5: 0x6d3e2020, 0x39ac6: 0x6d3e2220, 0x39ac7: 0x6d3e2420, + 0x39ac8: 0x6d3e2620, 0x39ac9: 0x6d3e2820, 0x39aca: 0x6d3e2a20, 0x39acb: 0x6d3e2c20, + 0x39acc: 0x6d3e2e20, 0x39acd: 0x6d3e3020, 0x39ace: 0x6d6aa420, 0x39acf: 0x6d6aa620, + 0x39ad0: 0x6d6aa820, 0x39ad1: 0x6d6aaa20, 0x39ad2: 0x6d6aac20, 0x39ad3: 0x6d6aae20, + 0x39ad4: 0x6d6ab020, 0x39ad5: 0x6d6ab220, 0x39ad6: 0x6d6ab420, 0x39ad7: 0x6d6ab620, + 0x39ad8: 0x6d6ab820, 0x39ad9: 0x6d6aba20, 0x39ada: 0x6d6abc20, 0x39adb: 0x6d6abe20, + 0x39adc: 0x6d6ac020, 0x39add: 0x6d3e3220, 0x39ade: 0x6d6ac220, 0x39adf: 0x6d93ea20, + 0x39ae0: 0x6d6ac420, 0x39ae1: 0x6d6ac620, 0x39ae2: 0x6d6ac820, 0x39ae3: 0x6d6aca20, + 0x39ae4: 0x6d6acc20, 0x39ae5: 0x6d6ace20, 0x39ae6: 0x6d6ad020, 0x39ae7: 0x6d6ad220, + 0x39ae8: 0x6d93ec20, 0x39ae9: 0x6d93ee20, 0x39aea: 0x6d93f020, 0x39aeb: 0x6d93f220, + 0x39aec: 0x6d93f420, 0x39aed: 0x6d93f620, 0x39aee: 0x6d93f820, 0x39aef: 0x6d93fa20, + 0x39af0: 0x6d93fc20, 0x39af1: 0x6d93fe20, 0x39af2: 0x6d940020, 0x39af3: 0x6d940220, + 0x39af4: 0x6d940420, 0x39af5: 0x6d940620, 0x39af6: 0x6d940820, 0x39af7: 0x6d940a20, + 0x39af8: 0x6d940c20, 0x39af9: 0x6d940e20, 0x39afa: 0x6d941020, 0x39afb: 0x6d941220, + 0x39afc: 0x6d941420, 0x39afd: 0x6d941620, 0x39afe: 0x6d941820, 0x39aff: 0x6d941a20, + // Block 0xe6c, offset 0x39b00 + 0x39b00: 0x6d941c20, 0x39b01: 0x6d941e20, 0x39b02: 0x6d942020, 0x39b03: 0x6d942220, + 0x39b04: 0x6d942420, 0x39b05: 0x6d942620, 0x39b06: 0x6d942820, 0x39b07: 0x6d942a20, + 0x39b08: 0x6d942c20, 0x39b09: 0x6db75820, 0x39b0a: 0x6db75a20, 0x39b0b: 0x6db75c20, + 0x39b0c: 0x6db75e20, 0x39b0d: 0x6db76020, 0x39b0e: 0x6db76220, 0x39b0f: 0x6db76420, + 0x39b10: 0x6db76620, 0x39b11: 0x6db76820, 0x39b12: 0x6db76a20, 0x39b13: 0x6db76c20, + 0x39b14: 0x6db76e20, 0x39b15: 0x6db77020, 0x39b16: 0x6db77220, 0x39b17: 0x6db77420, + 0x39b18: 0x6db77620, 0x39b19: 0x6db77820, 0x39b1a: 0x6db77a20, 0x39b1b: 0x6db77c20, + 0x39b1c: 0x6db77e20, 0x39b1d: 0x6db78020, 0x39b1e: 0x6dd5a820, 0x39b1f: 0x6dd5aa20, + 0x39b20: 0x6dd5ac20, 0x39b21: 0x6dd5ae20, 0x39b22: 0x6dd5b020, 0x39b23: 0x6dd5b220, + 0x39b24: 0x6dd5b420, 0x39b25: 0x6dd5b620, 0x39b26: 0x6dd5b820, 0x39b27: 0x6dd5ba20, + 0x39b28: 0x6dd5bc20, 0x39b29: 0x6dd5be20, 0x39b2a: 0x6dd5c020, 0x39b2b: 0x6dd5c220, + 0x39b2c: 0x6dd5c420, 0x39b2d: 0x6dd5c620, 0x39b2e: 0x6dd5c820, 0x39b2f: 0x6dd5ca20, + 0x39b30: 0x6dd5cc20, 0x39b31: 0x6dd5ce20, 0x39b32: 0x6dd5d020, 0x39b33: 0x6dd5d220, + 0x39b34: 0x6dd5d420, 0x39b35: 0x6dd5d620, 0x39b36: 0x6dee9020, 0x39b37: 0x6dee9220, + 0x39b38: 0x6dee9420, 0x39b39: 0x6dee9620, 0x39b3a: 0x6dee9820, 0x39b3b: 0x6dee9a20, + 0x39b3c: 0x6dee9c20, 0x39b3d: 0x6dee9e20, 0x39b3e: 0x6deea020, 0x39b3f: 0x6deea220, + // Block 0xe6d, offset 0x39b40 + 0x39b40: 0x6deea420, 0x39b41: 0x6deea620, 0x39b42: 0x6deea820, 0x39b43: 0x6deeaa20, + 0x39b44: 0x6deeac20, 0x39b45: 0x6deeae20, 0x39b46: 0x6deeb020, 0x39b47: 0x6deeb220, + 0x39b48: 0x6deeb420, 0x39b49: 0x6deeb620, 0x39b4a: 0x6deeb820, 0x39b4b: 0x6deeba20, + 0x39b4c: 0x6deebc20, 0x39b4d: 0x6e031420, 0x39b4e: 0x6e031620, 0x39b4f: 0x6e031820, + 0x39b50: 0x6e031a20, 0x39b51: 0x6e031c20, 0x39b52: 0x6e031e20, 0x39b53: 0x6e032020, + 0x39b54: 0x6e032220, 0x39b55: 0x6e032420, 0x39b56: 0x6e032620, 0x39b57: 0x6e032820, + 0x39b58: 0x6e032a20, 0x39b59: 0x6e14b420, 0x39b5a: 0x6e14b620, 0x39b5b: 0x6e14b820, + 0x39b5c: 0x6e14ba20, 0x39b5d: 0x6e14bc20, 0x39b5e: 0x6e14be20, 0x39b5f: 0x6e14c020, + 0x39b60: 0x6e14c220, 0x39b61: 0x6e226220, 0x39b62: 0x6e226420, 0x39b63: 0x6e226620, + 0x39b64: 0x6e226820, 0x39b65: 0x6e226a20, 0x39b66: 0x6e226c20, 0x39b67: 0x6e226e20, + 0x39b68: 0x6e2cb220, 0x39b69: 0x6e2cb420, 0x39b6a: 0x6e2cb620, 0x39b6b: 0x6e2cb820, + 0x39b6c: 0x6e2cba20, 0x39b6d: 0x6e2cbc20, 0x39b6e: 0x6e34bc20, 0x39b6f: 0x6e34be20, + 0x39b70: 0x6e3a7020, 0x39b71: 0x6e3a7220, 0x39b72: 0x6e3a7420, 0x39b73: 0x6e3a7620, + 0x39b74: 0x6e3a7820, 0x39b75: 0x6e412020, 0x39b76: 0x6e432020, 0x39b77: 0x6c270420, + 0x39b78: 0x6c40e020, 0x39b79: 0x6c40e220, 0x39b7a: 0x6c611c20, 0x39b7b: 0x6c611e20, + 0x39b7c: 0x6c612020, 0x39b7d: 0x6c612220, 0x39b7e: 0x6c612420, 0x39b7f: 0x6c612620, + // Block 0xe6e, offset 0x39b80 + 0x39b80: 0x6c612820, 0x39b81: 0x6c875c20, 0x39b82: 0x6c875e20, 0x39b83: 0x6c876020, + 0x39b84: 0x6c876220, 0x39b85: 0x6c876420, 0x39b86: 0x6c876620, 0x39b87: 0x6c876820, + 0x39b88: 0x6c876a20, 0x39b89: 0x6c876c20, 0x39b8a: 0x6c876e20, 0x39b8b: 0x6c877020, + 0x39b8c: 0x6c877220, 0x39b8d: 0x6c877420, 0x39b8e: 0x6c877620, 0x39b8f: 0x6c877820, + 0x39b90: 0x6c877a20, 0x39b91: 0x6c877c20, 0x39b92: 0x6cb26420, 0x39b93: 0x6cb26620, + 0x39b94: 0x6cb26820, 0x39b95: 0x6cb26a20, 0x39b96: 0x6cb26c20, 0x39b97: 0x6cb26e20, + 0x39b98: 0x6cb27020, 0x39b99: 0x6cb27220, 0x39b9a: 0x6cb27420, 0x39b9b: 0x6cb27620, + 0x39b9c: 0x6cb27820, 0x39b9d: 0x6cb27a20, 0x39b9e: 0x6cb27c20, 0x39b9f: 0x6cb27e20, + 0x39ba0: 0x6cb28020, 0x39ba1: 0x6cb28220, 0x39ba2: 0x6cb28420, 0x39ba3: 0x6cb28620, + 0x39ba4: 0x6cb28820, 0x39ba5: 0x6cb28a20, 0x39ba6: 0x6cb28c20, 0x39ba7: 0x6cb28e20, + 0x39ba8: 0x6cb29020, 0x39ba9: 0x6cb29220, 0x39baa: 0x6cb29420, 0x39bab: 0x6cb29620, + 0x39bac: 0x6cb29820, 0x39bad: 0x6cb29a20, 0x39bae: 0x6cb29c20, 0x39baf: 0x6cb29e20, + 0x39bb0: 0x6cb2a020, 0x39bb1: 0x6cb2a220, 0x39bb2: 0x6ce1ee20, 0x39bb3: 0x6ce1f020, + 0x39bb4: 0x6ce1f220, 0x39bb5: 0x6ce1f420, 0x39bb6: 0x6ce1f620, 0x39bb7: 0x6ce1f820, + 0x39bb8: 0x6ce1fa20, 0x39bb9: 0x6ce1fc20, 0x39bba: 0x6ce1fe20, 0x39bbb: 0x6ce20020, + 0x39bbc: 0x6ce20220, 0x39bbd: 0x6ce20420, 0x39bbe: 0x6ce20620, 0x39bbf: 0x6ce20820, + // Block 0xe6f, offset 0x39bc0 + 0x39bc0: 0x6ce20a20, 0x39bc1: 0x6ce20c20, 0x39bc2: 0x6ce20e20, 0x39bc3: 0x6ce21020, + 0x39bc4: 0x6ce21220, 0x39bc5: 0x6ce21420, 0x39bc6: 0x6ce21620, 0x39bc7: 0x6ce21820, + 0x39bc8: 0x6ce21a20, 0x39bc9: 0x6ce21c20, 0x39bca: 0x6ce21e20, 0x39bcb: 0x6ce22020, + 0x39bcc: 0x6ce22220, 0x39bcd: 0x6ce22420, 0x39bce: 0x6ce22620, 0x39bcf: 0x6ce22820, + 0x39bd0: 0x6ce22a20, 0x39bd1: 0x6ce22c20, 0x39bd2: 0x6ce22e20, 0x39bd3: 0x6ce23020, + 0x39bd4: 0x6ce23220, 0x39bd5: 0x6d105020, 0x39bd6: 0x6d105220, 0x39bd7: 0x6d105420, + 0x39bd8: 0x6d105620, 0x39bd9: 0x6d105820, 0x39bda: 0x6d105a20, 0x39bdb: 0x6d105c20, + 0x39bdc: 0x6d105e20, 0x39bdd: 0x6d106020, 0x39bde: 0x6d106220, 0x39bdf: 0x6d106420, + 0x39be0: 0x6d106620, 0x39be1: 0x6d106820, 0x39be2: 0x6d106a20, 0x39be3: 0x6d106c20, + 0x39be4: 0x6d106e20, 0x39be5: 0x6d107020, 0x39be6: 0x6d107220, 0x39be7: 0x6d107420, + 0x39be8: 0x6d107620, 0x39be9: 0x6d107820, 0x39bea: 0x6d107a20, 0x39beb: 0x6d107c20, + 0x39bec: 0x6d107e20, 0x39bed: 0x6d108020, 0x39bee: 0x6d108220, 0x39bef: 0x6d108420, + 0x39bf0: 0x6d108620, 0x39bf1: 0x6d108820, 0x39bf2: 0x6d108a20, 0x39bf3: 0x6d108c20, + 0x39bf4: 0x6d108e20, 0x39bf5: 0x6d109020, 0x39bf6: 0x6d109220, 0x39bf7: 0x6d109420, + 0x39bf8: 0x6d109620, 0x39bf9: 0x6d109820, 0x39bfa: 0x6d109a20, 0x39bfb: 0x6d109c20, + 0x39bfc: 0x6d109e20, 0x39bfd: 0x6d10a020, 0x39bfe: 0x6d10a220, 0x39bff: 0x6d10a420, + // Block 0xe70, offset 0x39c00 + 0x39c00: 0x6d3e7220, 0x39c01: 0x6d3e7420, 0x39c02: 0x6d3e7620, 0x39c03: 0x6d3e7820, + 0x39c04: 0x6d3e7a20, 0x39c05: 0x6d3e7c20, 0x39c06: 0x6d3e7e20, 0x39c07: 0x6d3e8020, + 0x39c08: 0x6d3e8220, 0x39c09: 0x6d3e8420, 0x39c0a: 0x6d3e8620, 0x39c0b: 0x6d3e8820, + 0x39c0c: 0x6d3e8a20, 0x39c0d: 0x6d3e8c20, 0x39c0e: 0x6d3e8e20, 0x39c0f: 0x6d3e9020, + 0x39c10: 0x6d3e9220, 0x39c11: 0x6d3e9420, 0x39c12: 0x6d3e9620, 0x39c13: 0x6d3e9820, + 0x39c14: 0x6d3e9a20, 0x39c15: 0x6d3e9c20, 0x39c16: 0x6d3e9e20, 0x39c17: 0x6d3ea020, + 0x39c18: 0x6d3ea220, 0x39c19: 0x6d3ea420, 0x39c1a: 0x6d3ea620, 0x39c1b: 0x6d3ea820, + 0x39c1c: 0x6d3eaa20, 0x39c1d: 0x6d3eac20, 0x39c1e: 0x6d3eae20, 0x39c1f: 0x6d3eb020, + 0x39c20: 0x6d3eb220, 0x39c21: 0x6d3eb420, 0x39c22: 0x6d3eb620, 0x39c23: 0x6d3eb820, + 0x39c24: 0x6d3eba20, 0x39c25: 0x6d3ebc20, 0x39c26: 0x6d3ebe20, 0x39c27: 0x6d3ec020, + 0x39c28: 0x6d3ec220, 0x39c29: 0x6d3ec420, 0x39c2a: 0x6d3ec620, 0x39c2b: 0x6d3ec820, + 0x39c2c: 0x6d3eca20, 0x39c2d: 0x6d3ecc20, 0x39c2e: 0x6d3ece20, 0x39c2f: 0x6d3ed020, + 0x39c30: 0x6d3ed220, 0x39c31: 0x6d3ed420, 0x39c32: 0x6d3ed620, 0x39c33: 0x6d3ed820, + 0x39c34: 0x6d3eda20, 0x39c35: 0x6d6b3c20, 0x39c36: 0x6d6b3e20, 0x39c37: 0x6d6b4020, + 0x39c38: 0x6d6b4220, 0x39c39: 0x6d6b4420, 0x39c3a: 0x6d6b4620, 0x39c3b: 0x6d6b4820, + 0x39c3c: 0x6d6b4a20, 0x39c3d: 0x6d6b4c20, 0x39c3e: 0x6d6b4e20, 0x39c3f: 0x6d6b5020, + // Block 0xe71, offset 0x39c40 + 0x39c40: 0x6d6b5220, 0x39c41: 0x6d6b5420, 0x39c42: 0x6d6b5620, 0x39c43: 0x6d6b5820, + 0x39c44: 0x6d6b5a20, 0x39c45: 0x6d6b5c20, 0x39c46: 0x6d6b5e20, 0x39c47: 0x6d6b6020, + 0x39c48: 0x6d6b6220, 0x39c49: 0x6d6b6420, 0x39c4a: 0x6d6b6620, 0x39c4b: 0x6d6b6820, + 0x39c4c: 0x6d6b6a20, 0x39c4d: 0x6d6b6c20, 0x39c4e: 0x6d6b6e20, 0x39c4f: 0x6d6b7020, + 0x39c50: 0x6d6b7220, 0x39c51: 0x6d6b7420, 0x39c52: 0x6d6b7620, 0x39c53: 0x6d6b7820, + 0x39c54: 0x6d6b7a20, 0x39c55: 0x6d6b7c20, 0x39c56: 0x6d6b7e20, 0x39c57: 0x6d6b8020, + 0x39c58: 0x6d6b8220, 0x39c59: 0x6d6b8420, 0x39c5a: 0x6d6b8620, 0x39c5b: 0x6d6b8820, + 0x39c5c: 0x6d6b8a20, 0x39c5d: 0x6d946e20, 0x39c5e: 0x6d947020, 0x39c5f: 0x6d6b8c20, + 0x39c60: 0x6d947220, 0x39c61: 0x6d947420, 0x39c62: 0x6d947620, 0x39c63: 0x6d947820, + 0x39c64: 0x6d947a20, 0x39c65: 0x6d947c20, 0x39c66: 0x6d947e20, 0x39c67: 0x6d948020, + 0x39c68: 0x6d948220, 0x39c69: 0x6d948420, 0x39c6a: 0x6d948620, 0x39c6b: 0x6d948820, + 0x39c6c: 0x6d948a20, 0x39c6d: 0x6d948c20, 0x39c6e: 0x6d948e20, 0x39c6f: 0x6d949020, + 0x39c70: 0x6d949220, 0x39c71: 0x6d949420, 0x39c72: 0x6d949620, 0x39c73: 0x6d949820, + 0x39c74: 0x6d949a20, 0x39c75: 0x6d949c20, 0x39c76: 0x6d949e20, 0x39c77: 0x6d94a020, + 0x39c78: 0x6d94a220, 0x39c79: 0x6d94a420, 0x39c7a: 0x6d94a620, 0x39c7b: 0x6d94a820, + 0x39c7c: 0x6d94aa20, 0x39c7d: 0x6d94ac20, 0x39c7e: 0x6d94ae20, 0x39c7f: 0x6d94b020, + // Block 0xe72, offset 0x39c80 + 0x39c80: 0x6d94b220, 0x39c81: 0x6d94b420, 0x39c82: 0x6d94b620, 0x39c83: 0x6d94b820, + 0x39c84: 0x6d94ba20, 0x39c85: 0x6d94bc20, 0x39c86: 0x6d94be20, 0x39c87: 0x6d94c020, + 0x39c88: 0x6d94c220, 0x39c89: 0x6d94c420, 0x39c8a: 0x6d94c620, 0x39c8b: 0x6d94c820, + 0x39c8c: 0x6d94ca20, 0x39c8d: 0x6d94cc20, 0x39c8e: 0x6d94ce20, 0x39c8f: 0x6d94d020, + 0x39c90: 0x6d94d220, 0x39c91: 0x6d94d420, 0x39c92: 0x6d94d620, 0x39c93: 0x6db7ae20, + 0x39c94: 0x6db7b020, 0x39c95: 0x6db7b220, 0x39c96: 0x6db7b420, 0x39c97: 0x6db7b620, + 0x39c98: 0x6db7b820, 0x39c99: 0x6db7ba20, 0x39c9a: 0x6db7bc20, 0x39c9b: 0x6db7be20, + 0x39c9c: 0x6db7c020, 0x39c9d: 0x6db7c220, 0x39c9e: 0x6db7c420, 0x39c9f: 0x6db7c620, + 0x39ca0: 0x6db7c820, 0x39ca1: 0x6db7ca20, 0x39ca2: 0x6db7cc20, 0x39ca3: 0x6db7ce20, + 0x39ca4: 0x6db7d020, 0x39ca5: 0x6db7d220, 0x39ca6: 0x6db7d420, 0x39ca7: 0x6db7d620, + 0x39ca8: 0x6db7d820, 0x39ca9: 0x6db7da20, 0x39caa: 0x6db7dc20, 0x39cab: 0x6db7de20, + 0x39cac: 0x6db7e020, 0x39cad: 0x6db7e220, 0x39cae: 0x6db7e420, 0x39caf: 0x6db7e620, + 0x39cb0: 0x6db7e820, 0x39cb1: 0x6db7ea20, 0x39cb2: 0x6db7ec20, 0x39cb3: 0x6db7ee20, + 0x39cb4: 0x6db7f020, 0x39cb5: 0x6db7f220, 0x39cb6: 0x6db7f420, 0x39cb7: 0x6db7f620, + 0x39cb8: 0x6db7f820, 0x39cb9: 0x6db7fa20, 0x39cba: 0x6db7fc20, 0x39cbb: 0x6db7fe20, + 0x39cbc: 0x6db80020, 0x39cbd: 0x6db80220, 0x39cbe: 0x6db80420, 0x39cbf: 0x6db80620, + // Block 0xe73, offset 0x39cc0 + 0x39cc0: 0x6db80820, 0x39cc1: 0x6db80a20, 0x39cc2: 0x6db80c20, 0x39cc3: 0x6dd61420, + 0x39cc4: 0x6db80e20, 0x39cc5: 0x6dd61620, 0x39cc6: 0x6dd61820, 0x39cc7: 0x6dd61a20, + 0x39cc8: 0x6dd61c20, 0x39cc9: 0x6dd61e20, 0x39cca: 0x6dd62020, 0x39ccb: 0x6dd62220, + 0x39ccc: 0x6dd62420, 0x39ccd: 0x6dd62620, 0x39cce: 0x6dd62820, 0x39ccf: 0x6dd62a20, + 0x39cd0: 0x6dd62c20, 0x39cd1: 0x6dd62e20, 0x39cd2: 0x6dd63020, 0x39cd3: 0x6dd63220, + 0x39cd4: 0x6dd63420, 0x39cd5: 0x6dd63620, 0x39cd6: 0x6dd63820, 0x39cd7: 0x6dd63a20, + 0x39cd8: 0x6dd63c20, 0x39cd9: 0x6dd63e20, 0x39cda: 0x6dd64020, 0x39cdb: 0x6dd64220, + 0x39cdc: 0x6dd64420, 0x39cdd: 0x6dd64620, 0x39cde: 0x6dd64820, 0x39cdf: 0x6dd64a20, + 0x39ce0: 0x6dd64c20, 0x39ce1: 0x6dd64e20, 0x39ce2: 0x6dd65020, 0x39ce3: 0x6dd65220, + 0x39ce4: 0x6dd65420, 0x39ce5: 0x6dd65620, 0x39ce6: 0x6dd65820, 0x39ce7: 0x6dd65a20, + 0x39ce8: 0x6dd65c20, 0x39ce9: 0x6dd65e20, 0x39cea: 0x6dd66020, 0x39ceb: 0x6dd66220, + 0x39cec: 0x6dd66420, 0x39ced: 0x6dd66620, 0x39cee: 0x6dd66820, 0x39cef: 0x6dd66a20, + 0x39cf0: 0x6dd66c20, 0x39cf1: 0x6dd66e20, 0x39cf2: 0x6dd67020, 0x39cf3: 0x6dd67220, + 0x39cf4: 0x6dd67420, 0x39cf5: 0x6dd67620, 0x39cf6: 0x6dd67820, 0x39cf7: 0x6dd67a20, + 0x39cf8: 0x6dd67c20, 0x39cf9: 0x6dd67e20, 0x39cfa: 0x6dd68020, 0x39cfb: 0x6dd68220, + 0x39cfc: 0x6dd68420, 0x39cfd: 0x6dd68620, 0x39cfe: 0x6dd68820, 0x39cff: 0x6dd68a20, + // Block 0xe74, offset 0x39d00 + 0x39d00: 0x6dd68c20, 0x39d01: 0x6dd68e20, 0x39d02: 0x6dd69020, 0x39d03: 0x6dd69220, + 0x39d04: 0x6dd69420, 0x39d05: 0x6dd69620, 0x39d06: 0x6dd69820, 0x39d07: 0x6dd69a20, + 0x39d08: 0x6dd69c20, 0x39d09: 0x6dd69e20, 0x39d0a: 0x6deef420, 0x39d0b: 0x6deef620, + 0x39d0c: 0x6deef820, 0x39d0d: 0x6deefa20, 0x39d0e: 0x6deefc20, 0x39d0f: 0x6deefe20, + 0x39d10: 0x6def0020, 0x39d11: 0x6def0220, 0x39d12: 0x6def0420, 0x39d13: 0x6def0620, + 0x39d14: 0x6def0820, 0x39d15: 0x6def0a20, 0x39d16: 0x6def0c20, 0x39d17: 0x6def0e20, + 0x39d18: 0x6def1020, 0x39d19: 0x6def1220, 0x39d1a: 0x6dd6a020, 0x39d1b: 0x6def1420, + 0x39d1c: 0x6def1620, 0x39d1d: 0x6def1820, 0x39d1e: 0x6def1a20, 0x39d1f: 0x6def1c20, + 0x39d20: 0x6def1e20, 0x39d21: 0x6def2020, 0x39d22: 0x6def2220, 0x39d23: 0x6def2420, + 0x39d24: 0x6def2620, 0x39d25: 0x6def2820, 0x39d26: 0x6def2a20, 0x39d27: 0x6def2c20, + 0x39d28: 0x6def2e20, 0x39d29: 0x6def3020, 0x39d2a: 0x6def3220, 0x39d2b: 0x6def3420, + 0x39d2c: 0x6def3620, 0x39d2d: 0x6def3820, 0x39d2e: 0x6def3a20, 0x39d2f: 0x6def3c20, + 0x39d30: 0x6def3e20, 0x39d31: 0x6def4020, 0x39d32: 0x6def4220, 0x39d33: 0x6def4420, + 0x39d34: 0x6def4620, 0x39d35: 0x6def4820, 0x39d36: 0x6def4a20, 0x39d37: 0x6def4c20, + 0x39d38: 0x6def4e20, 0x39d39: 0x6def5020, 0x39d3a: 0x6def5220, 0x39d3b: 0x6def5420, + 0x39d3c: 0x6def5620, 0x39d3d: 0x6def5820, 0x39d3e: 0x6def5a20, 0x39d3f: 0x6def5c20, + // Block 0xe75, offset 0x39d40 + 0x39d40: 0x6def5e20, 0x39d41: 0x6e034020, 0x39d42: 0x6e034220, 0x39d43: 0x6e034420, + 0x39d44: 0x6e034620, 0x39d45: 0x6e034820, 0x39d46: 0x6e034a20, 0x39d47: 0x6e034c20, + 0x39d48: 0x6e034e20, 0x39d49: 0x6e035020, 0x39d4a: 0x6e035220, 0x39d4b: 0x6e035420, + 0x39d4c: 0x6e035620, 0x39d4d: 0x6e035820, 0x39d4e: 0x6e035a20, 0x39d4f: 0x6e035c20, + 0x39d50: 0x6e035e20, 0x39d51: 0x6e036020, 0x39d52: 0x6e036220, 0x39d53: 0x6e036420, + 0x39d54: 0x6e036620, 0x39d55: 0x6e036820, 0x39d56: 0x6e036a20, 0x39d57: 0x6e036c20, + 0x39d58: 0x6e036e20, 0x39d59: 0x6e037020, 0x39d5a: 0x6e037220, 0x39d5b: 0x6e037420, + 0x39d5c: 0x6e037620, 0x39d5d: 0x6e037820, 0x39d5e: 0x6e037a20, 0x39d5f: 0x6e037c20, + 0x39d60: 0x6e037e20, 0x39d61: 0x6e038020, 0x39d62: 0x6e038220, 0x39d63: 0x6e038420, + 0x39d64: 0x6e038620, 0x39d65: 0x6e038820, 0x39d66: 0x6e038a20, 0x39d67: 0x6e038c20, + 0x39d68: 0x6e038e20, 0x39d69: 0x6e039020, 0x39d6a: 0x6e14d420, 0x39d6b: 0x6e14d620, + 0x39d6c: 0x6e14d820, 0x39d6d: 0x6e14da20, 0x39d6e: 0x6e14dc20, 0x39d6f: 0x6e14de20, + 0x39d70: 0x6e14e020, 0x39d71: 0x6e14e220, 0x39d72: 0x6e14e420, 0x39d73: 0x6e14e620, + 0x39d74: 0x6e14e820, 0x39d75: 0x6e14ea20, 0x39d76: 0x6e14ec20, 0x39d77: 0x6e14ee20, + 0x39d78: 0x6e14f020, 0x39d79: 0x6e14f220, 0x39d7a: 0x6e14f420, 0x39d7b: 0x6e14f620, + 0x39d7c: 0x6e14f820, 0x39d7d: 0x6e14fa20, 0x39d7e: 0x6e14fc20, 0x39d7f: 0x6e14fe20, + // Block 0xe76, offset 0x39d80 + 0x39d80: 0x6e150020, 0x39d81: 0x6e228020, 0x39d82: 0x6e228220, 0x39d83: 0x6e228420, + 0x39d84: 0x6e228620, 0x39d85: 0x6e228820, 0x39d86: 0x6e228a20, 0x39d87: 0x6e228c20, + 0x39d88: 0x6e228e20, 0x39d89: 0x6e229020, 0x39d8a: 0x6e229220, 0x39d8b: 0x6e229420, + 0x39d8c: 0x6e229620, 0x39d8d: 0x6e229820, 0x39d8e: 0x6e229a20, 0x39d8f: 0x6e229c20, + 0x39d90: 0x6e229e20, 0x39d91: 0x6e22a020, 0x39d92: 0x6e22a220, 0x39d93: 0x6e22a420, + 0x39d94: 0x6e22a620, 0x39d95: 0x6e22a820, 0x39d96: 0x6e2cca20, 0x39d97: 0x6e2ccc20, + 0x39d98: 0x6e2cce20, 0x39d99: 0x6e2cd020, 0x39d9a: 0x6e2cd220, 0x39d9b: 0x6e2cd420, + 0x39d9c: 0x6e2cd620, 0x39d9d: 0x6e2cd820, 0x39d9e: 0x6e2cda20, 0x39d9f: 0x6e2cdc20, + 0x39da0: 0x6e2cde20, 0x39da1: 0x6e2ce020, 0x39da2: 0x6e2ce220, 0x39da3: 0x6e2ce420, + 0x39da4: 0x6e34ca20, 0x39da5: 0x6e34cc20, 0x39da6: 0x6e34ce20, 0x39da7: 0x6e34d020, + 0x39da8: 0x6e34d220, 0x39da9: 0x6e34d420, 0x39daa: 0x6e34d620, 0x39dab: 0x6e34d820, + 0x39dac: 0x6e34da20, 0x39dad: 0x6e34dc20, 0x39dae: 0x6e3a8620, 0x39daf: 0x6e3a8820, + 0x39db0: 0x6e3a8a20, 0x39db1: 0x6e3a8c20, 0x39db2: 0x6e3a8e20, 0x39db3: 0x6e3a9020, + 0x39db4: 0x6e3a9220, 0x39db5: 0x6e3a9420, 0x39db6: 0x6e3a9620, 0x39db7: 0x6e3a9820, + 0x39db8: 0x6e3a9a20, 0x39db9: 0x6e3a9c20, 0x39dba: 0x6e3a9e20, 0x39dbb: 0x6e3e5020, + 0x39dbc: 0x6e3e5220, 0x39dbd: 0x6e3e5420, 0x39dbe: 0x6e3e5620, 0x39dbf: 0x6e3e5820, + // Block 0xe77, offset 0x39dc0 + 0x39dc0: 0x6e3e5a20, 0x39dc1: 0x6e412620, 0x39dc2: 0x6e412820, 0x39dc3: 0x6e412a20, + 0x39dc4: 0x6e432620, 0x39dc5: 0x6e432820, 0x39dc6: 0x6e432a20, 0x39dc7: 0x6e432c20, + 0x39dc8: 0x6e448820, 0x39dc9: 0x6e448a20, 0x39dca: 0x6e448c20, 0x39dcb: 0x6e455e20, + 0x39dcc: 0x6e456020, 0x39dcd: 0x6e45dc20, 0x39dce: 0x6e470a20, 0x39dcf: 0x6c270820, + 0x39dd0: 0x6c270a20, 0x39dd1: 0x6c270c20, 0x39dd2: 0x6c612a20, 0x39dd3: 0x6c878220, + 0x39dd4: 0x6c878420, 0x39dd5: 0x6c878620, 0x39dd6: 0x6c878820, 0x39dd7: 0x6c878a20, + 0x39dd8: 0x6cb2b020, 0x39dd9: 0x6cb2b220, 0x39dda: 0x6cb2b420, 0x39ddb: 0x6cb2b620, + 0x39ddc: 0x6cb2b820, 0x39ddd: 0x6cb2ba20, 0x39dde: 0x6cb2bc20, 0x39ddf: 0x6cb2be20, + 0x39de0: 0x6cb2c020, 0x39de1: 0x6cb2c220, 0x39de2: 0x6cb2c420, 0x39de3: 0x6cb2c620, + 0x39de4: 0x6cb2c820, 0x39de5: 0x6cb2ca20, 0x39de6: 0x6cb2cc20, 0x39de7: 0x6cb2ce20, + 0x39de8: 0x6cb2d020, 0x39de9: 0x6ce24620, 0x39dea: 0x6ce24820, 0x39deb: 0x6ce24a20, + 0x39dec: 0x6ce24c20, 0x39ded: 0x6ce24e20, 0x39dee: 0x6ce25020, 0x39def: 0x6ce25220, + 0x39df0: 0x6ce25420, 0x39df1: 0x6ce25620, 0x39df2: 0x6ce25820, 0x39df3: 0x6ce25a20, + 0x39df4: 0x6ce25c20, 0x39df5: 0x6ce25e20, 0x39df6: 0x6ce26020, 0x39df7: 0x6ce26220, + 0x39df8: 0x6d10bc20, 0x39df9: 0x6d10be20, 0x39dfa: 0x6d10c020, 0x39dfb: 0x6d10c220, + 0x39dfc: 0x6d10c420, 0x39dfd: 0x6d10c620, 0x39dfe: 0x6d10c820, 0x39dff: 0x6d10ca20, + // Block 0xe78, offset 0x39e00 + 0x39e00: 0x6d10cc20, 0x39e01: 0x6d10ce20, 0x39e02: 0x6d10d020, 0x39e03: 0x6d10d220, + 0x39e04: 0x6d10d420, 0x39e05: 0x6d10d620, 0x39e06: 0x6d10d820, 0x39e07: 0x6d10da20, + 0x39e08: 0x6d3ee820, 0x39e09: 0x6d3eea20, 0x39e0a: 0x6d3eec20, 0x39e0b: 0x6d3eee20, + 0x39e0c: 0x6d3ef020, 0x39e0d: 0x6d3ef220, 0x39e0e: 0x6d3ef420, 0x39e0f: 0x6d3ef620, + 0x39e10: 0x6d3ef820, 0x39e11: 0x6d3efa20, 0x39e12: 0x6d3efc20, 0x39e13: 0x6d3efe20, + 0x39e14: 0x6d6bac20, 0x39e15: 0x6d6bae20, 0x39e16: 0x6d6bb020, 0x39e17: 0x6d6bb220, + 0x39e18: 0x6d6bb420, 0x39e19: 0x6d6bb620, 0x39e1a: 0x6d6bb820, 0x39e1b: 0x6d6bba20, + 0x39e1c: 0x6d6bbc20, 0x39e1d: 0x6d6bbe20, 0x39e1e: 0x6d6bc020, 0x39e1f: 0x6d6bc220, + 0x39e20: 0x6d6bc420, 0x39e21: 0x6d6bc620, 0x39e22: 0x6d94e820, 0x39e23: 0x6d94ea20, + 0x39e24: 0x6d94ec20, 0x39e25: 0x6d94ee20, 0x39e26: 0x6db81a20, 0x39e27: 0x6d94f020, + 0x39e28: 0x6d94f220, 0x39e29: 0x6d94f420, 0x39e2a: 0x6d94f620, 0x39e2b: 0x6d94f820, + 0x39e2c: 0x6d94fa20, 0x39e2d: 0x6d94fc20, 0x39e2e: 0x6db81c20, 0x39e2f: 0x6db81e20, + 0x39e30: 0x6db82020, 0x39e31: 0x6db82220, 0x39e32: 0x6db82420, 0x39e33: 0x6db82620, + 0x39e34: 0x6db82820, 0x39e35: 0x6db82a20, 0x39e36: 0x6db82c20, 0x39e37: 0x6db82e20, + 0x39e38: 0x6db83020, 0x39e39: 0x6dd6b220, 0x39e3a: 0x6dd6b420, 0x39e3b: 0x6dd6b620, + 0x39e3c: 0x6dd6b820, 0x39e3d: 0x6dd6ba20, 0x39e3e: 0x6dd6bc20, 0x39e3f: 0x6def7420, + // Block 0xe79, offset 0x39e40 + 0x39e40: 0x6def7620, 0x39e41: 0x6def7820, 0x39e42: 0x6def7a20, 0x39e43: 0x6def7c20, + 0x39e44: 0x6def7e20, 0x39e45: 0x6def8020, 0x39e46: 0x6def8220, 0x39e47: 0x6def8420, + 0x39e48: 0x6def8620, 0x39e49: 0x6def8820, 0x39e4a: 0x6def8a20, 0x39e4b: 0x6def8c20, + 0x39e4c: 0x6def8e20, 0x39e4d: 0x6e039e20, 0x39e4e: 0x6e03a020, 0x39e4f: 0x6e03a220, + 0x39e50: 0x6e03a420, 0x39e51: 0x6e03a620, 0x39e52: 0x6e03a820, 0x39e53: 0x6e150820, + 0x39e54: 0x6e150a20, 0x39e55: 0x6e150c20, 0x39e56: 0x6e150e20, 0x39e57: 0x6e151020, + 0x39e58: 0x6e22ae20, 0x39e59: 0x6e22b020, 0x39e5a: 0x6e22b220, 0x39e5b: 0x6e2cea20, + 0x39e5c: 0x6e2cec20, 0x39e5d: 0x6e3aa020, 0x39e5e: 0x6e3aa220, 0x39e5f: 0x6e3e5c20, + 0x39e60: 0x6c613620, 0x39e61: 0x6c613820, 0x39e62: 0x6c613a20, 0x39e63: 0x6c613c20, + 0x39e64: 0x6c613e20, 0x39e65: 0x6c614020, 0x39e66: 0x6c614220, 0x39e67: 0x6c879e20, + 0x39e68: 0x6c87a020, 0x39e69: 0x6c87a220, 0x39e6a: 0x6c87a420, 0x39e6b: 0x6c87a620, + 0x39e6c: 0x6c87a820, 0x39e6d: 0x6c87aa20, 0x39e6e: 0x6c87ac20, 0x39e6f: 0x6c87ae20, + 0x39e70: 0x6c87b020, 0x39e71: 0x6c87b220, 0x39e72: 0x6c87b420, 0x39e73: 0x6cb30020, + 0x39e74: 0x6cb30220, 0x39e75: 0x6cb30420, 0x39e76: 0x6cb30620, 0x39e77: 0x6cb30820, + 0x39e78: 0x6cb30a20, 0x39e79: 0x6cb30c20, 0x39e7a: 0x6cb30e20, 0x39e7b: 0x6cb31020, + 0x39e7c: 0x6cb31220, 0x39e7d: 0x6cb31420, 0x39e7e: 0x6cb31620, 0x39e7f: 0x6cb31820, + // Block 0xe7a, offset 0x39e80 + 0x39e80: 0x6cb31a20, 0x39e81: 0x6cb31c20, 0x39e82: 0x6cb31e20, 0x39e83: 0x6cb32020, + 0x39e84: 0x6cb32220, 0x39e85: 0x6cb32420, 0x39e86: 0x6cb32620, 0x39e87: 0x6cb32820, + 0x39e88: 0x6cb32a20, 0x39e89: 0x6cb32c20, 0x39e8a: 0x6cb32e20, 0x39e8b: 0x6cb33020, + 0x39e8c: 0x6cb33220, 0x39e8d: 0x6cb33420, 0x39e8e: 0x6ce2a020, 0x39e8f: 0x6ce2a220, + 0x39e90: 0x6ce2a420, 0x39e91: 0x6ce2a620, 0x39e92: 0x6ce2a820, 0x39e93: 0x6ce2aa20, + 0x39e94: 0x6ce2ac20, 0x39e95: 0x6ce2ae20, 0x39e96: 0x6ce2b020, 0x39e97: 0x6ce2b220, + 0x39e98: 0x6ce2b420, 0x39e99: 0x6ce2b620, 0x39e9a: 0x6ce2b820, 0x39e9b: 0x6ce2ba20, + 0x39e9c: 0x6ce2bc20, 0x39e9d: 0x6ce2be20, 0x39e9e: 0x6ce2c020, 0x39e9f: 0x6ce2c220, + 0x39ea0: 0x6ce2c420, 0x39ea1: 0x6ce2c620, 0x39ea2: 0x6ce2c820, 0x39ea3: 0x6ce2ca20, + 0x39ea4: 0x6ce2cc20, 0x39ea5: 0x6ce2ce20, 0x39ea6: 0x6ce2d020, 0x39ea7: 0x6ce2d220, + 0x39ea8: 0x6d110a20, 0x39ea9: 0x6d110c20, 0x39eaa: 0x6d110e20, 0x39eab: 0x6d111020, + 0x39eac: 0x6d111220, 0x39ead: 0x6d111420, 0x39eae: 0x6d111620, 0x39eaf: 0x6d111820, + 0x39eb0: 0x6d111a20, 0x39eb1: 0x6d111c20, 0x39eb2: 0x6d111e20, 0x39eb3: 0x6d112020, + 0x39eb4: 0x6d112220, 0x39eb5: 0x6d112420, 0x39eb6: 0x6d112620, 0x39eb7: 0x6d112820, + 0x39eb8: 0x6d112a20, 0x39eb9: 0x6d112c20, 0x39eba: 0x6d112e20, 0x39ebb: 0x6d113020, + 0x39ebc: 0x6d113220, 0x39ebd: 0x6d113420, 0x39ebe: 0x6d113620, 0x39ebf: 0x6d113820, + // Block 0xe7b, offset 0x39ec0 + 0x39ec0: 0x6d113a20, 0x39ec1: 0x6d113c20, 0x39ec2: 0x6d3f1c20, 0x39ec3: 0x6d3f1e20, + 0x39ec4: 0x6d3f2020, 0x39ec5: 0x6d3f2220, 0x39ec6: 0x6d3f2420, 0x39ec7: 0x6d3f2620, + 0x39ec8: 0x6d3f2820, 0x39ec9: 0x6d3f2a20, 0x39eca: 0x6d3f2c20, 0x39ecb: 0x6d3f2e20, + 0x39ecc: 0x6d3f3020, 0x39ecd: 0x6d3f3220, 0x39ece: 0x6d3f3420, 0x39ecf: 0x6d3f3620, + 0x39ed0: 0x6d3f3820, 0x39ed1: 0x6d3f3a20, 0x39ed2: 0x6d3f3c20, 0x39ed3: 0x6d3f3e20, + 0x39ed4: 0x6d3f4020, 0x39ed5: 0x6d3f4220, 0x39ed6: 0x6d3f4420, 0x39ed7: 0x6d3f4620, + 0x39ed8: 0x6d3f4820, 0x39ed9: 0x6d3f4a20, 0x39eda: 0x6d3f4c20, 0x39edb: 0x6d3f4e20, + 0x39edc: 0x6d3f5020, 0x39edd: 0x6d3f5220, 0x39ede: 0x6d3f5420, 0x39edf: 0x6d3f5620, + 0x39ee0: 0x6d6bfe20, 0x39ee1: 0x6d6c0020, 0x39ee2: 0x6d6c0220, 0x39ee3: 0x6d6c0420, + 0x39ee4: 0x6d6c0620, 0x39ee5: 0x6d6c0820, 0x39ee6: 0x6d6c0a20, 0x39ee7: 0x6d6c0c20, + 0x39ee8: 0x6d6c0e20, 0x39ee9: 0x6d6c1020, 0x39eea: 0x6d6c1220, 0x39eeb: 0x6d6c1420, + 0x39eec: 0x6d6c1620, 0x39eed: 0x6d6c1820, 0x39eee: 0x6d6c1a20, 0x39eef: 0x6d6c1c20, + 0x39ef0: 0x6d6c1e20, 0x39ef1: 0x6d6c2020, 0x39ef2: 0x6d6c2220, 0x39ef3: 0x6d6c2420, + 0x39ef4: 0x6d6c2620, 0x39ef5: 0x6d6c2820, 0x39ef6: 0x6d6c2a20, 0x39ef7: 0x6d6c2c20, + 0x39ef8: 0x6d6c2e20, 0x39ef9: 0x6d6c3020, 0x39efa: 0x6d6c3220, 0x39efb: 0x6d6c3420, + 0x39efc: 0x6d6c3620, 0x39efd: 0x6d6c3820, 0x39efe: 0x6d6c3a20, 0x39eff: 0x6d6c3c20, + // Block 0xe7c, offset 0x39f00 + 0x39f00: 0x6d6c3e20, 0x39f01: 0x6d6c4020, 0x39f02: 0x6d6c4220, 0x39f03: 0x6d6c4420, + 0x39f04: 0x6d6c4620, 0x39f05: 0x6d6c4820, 0x39f06: 0x6d6c4a20, 0x39f07: 0x6d952820, + 0x39f08: 0x6d952a20, 0x39f09: 0x6d952c20, 0x39f0a: 0x6d952e20, 0x39f0b: 0x6d953020, + 0x39f0c: 0x6d953220, 0x39f0d: 0x6d953420, 0x39f0e: 0x6d953620, 0x39f0f: 0x6d953820, + 0x39f10: 0x6d953a20, 0x39f11: 0x6d953c20, 0x39f12: 0x6d953e20, 0x39f13: 0x6d954020, + 0x39f14: 0x6d954220, 0x39f15: 0x6d954420, 0x39f16: 0x6d954620, 0x39f17: 0x6d954820, + 0x39f18: 0x6d954a20, 0x39f19: 0x6d954c20, 0x39f1a: 0x6d954e20, 0x39f1b: 0x6d955020, + 0x39f1c: 0x6d955220, 0x39f1d: 0x6d955420, 0x39f1e: 0x6d955620, 0x39f1f: 0x6d955820, + 0x39f20: 0x6d955a20, 0x39f21: 0x6d955c20, 0x39f22: 0x6d955e20, 0x39f23: 0x6d956020, + 0x39f24: 0x6d956220, 0x39f25: 0x6d956420, 0x39f26: 0x6d956620, 0x39f27: 0x6d956820, + 0x39f28: 0x6d956a20, 0x39f29: 0x6db85420, 0x39f2a: 0x6db85620, 0x39f2b: 0x6db85820, + 0x39f2c: 0x6db85a20, 0x39f2d: 0x6db85c20, 0x39f2e: 0x6db85e20, 0x39f2f: 0x6db86020, + 0x39f30: 0x6db86220, 0x39f31: 0x6db86420, 0x39f32: 0x6db86620, 0x39f33: 0x6db86820, + 0x39f34: 0x6db86a20, 0x39f35: 0x6db86c20, 0x39f36: 0x6db86e20, 0x39f37: 0x6db87020, + 0x39f38: 0x6db87220, 0x39f39: 0x6db87420, 0x39f3a: 0x6db87620, 0x39f3b: 0x6db87820, + 0x39f3c: 0x6db87a20, 0x39f3d: 0x6db87c20, 0x39f3e: 0x6db87e20, 0x39f3f: 0x6db88020, + // Block 0xe7d, offset 0x39f40 + 0x39f40: 0x6db88220, 0x39f41: 0x6db88420, 0x39f42: 0x6db88620, 0x39f43: 0x6db88820, + 0x39f44: 0x6db88a20, 0x39f45: 0x6db88c20, 0x39f46: 0x6db88e20, 0x39f47: 0x6db89020, + 0x39f48: 0x6db89220, 0x39f49: 0x6db89420, 0x39f4a: 0x6dd6de20, 0x39f4b: 0x6dd6e020, + 0x39f4c: 0x6dd6e220, 0x39f4d: 0x6dd6e420, 0x39f4e: 0x6dd6e620, 0x39f4f: 0x6dd6e820, + 0x39f50: 0x6dd6ea20, 0x39f51: 0x6dd6ec20, 0x39f52: 0x6dd6ee20, 0x39f53: 0x6dd6f020, + 0x39f54: 0x6dd6f220, 0x39f55: 0x6dd6f420, 0x39f56: 0x6dd6f620, 0x39f57: 0x6dd6f820, + 0x39f58: 0x6dd6fa20, 0x39f59: 0x6dd6fc20, 0x39f5a: 0x6dd6fe20, 0x39f5b: 0x6dd70020, + 0x39f5c: 0x6dd70220, 0x39f5d: 0x6dd70420, 0x39f5e: 0x6dd70620, 0x39f5f: 0x6dd70820, + 0x39f60: 0x6dd70a20, 0x39f61: 0x6dd70c20, 0x39f62: 0x6dd70e20, 0x39f63: 0x6dd71020, + 0x39f64: 0x6defaa20, 0x39f65: 0x6defac20, 0x39f66: 0x6defae20, 0x39f67: 0x6defb020, + 0x39f68: 0x6defb220, 0x39f69: 0x6defb420, 0x39f6a: 0x6defb620, 0x39f6b: 0x6defb820, + 0x39f6c: 0x6defba20, 0x39f6d: 0x6defbc20, 0x39f6e: 0x6defbe20, 0x39f6f: 0x6defc020, + 0x39f70: 0x6defc220, 0x39f71: 0x6defc420, 0x39f72: 0x6e03ba20, 0x39f73: 0x6e03bc20, + 0x39f74: 0x6e03be20, 0x39f75: 0x6e03c020, 0x39f76: 0x6e03c220, 0x39f77: 0x6e03c420, + 0x39f78: 0x6e03c620, 0x39f79: 0x6e03c820, 0x39f7a: 0x6e03ca20, 0x39f7b: 0x6e03cc20, + 0x39f7c: 0x6e03ce20, 0x39f7d: 0x6e03d020, 0x39f7e: 0x6e03d220, 0x39f7f: 0x6e03d420, + // Block 0xe7e, offset 0x39f80 + 0x39f80: 0x6e03d620, 0x39f81: 0x6e03d820, 0x39f82: 0x6e03da20, 0x39f83: 0x6e03dc20, + 0x39f84: 0x6e03de20, 0x39f85: 0x6e03e020, 0x39f86: 0x6e03e220, 0x39f87: 0x6e03e420, + 0x39f88: 0x6e152220, 0x39f89: 0x6e152420, 0x39f8a: 0x6e152620, 0x39f8b: 0x6e152820, + 0x39f8c: 0x6e152a20, 0x39f8d: 0x6e152c20, 0x39f8e: 0x6e152e20, 0x39f8f: 0x6e153020, + 0x39f90: 0x6e153220, 0x39f91: 0x6e22be20, 0x39f92: 0x6e22c020, 0x39f93: 0x6e22c220, + 0x39f94: 0x6e22c420, 0x39f95: 0x6e22c620, 0x39f96: 0x6e22c820, 0x39f97: 0x6e22ca20, + 0x39f98: 0x6e22cc20, 0x39f99: 0x6e22ce20, 0x39f9a: 0x6e22d020, 0x39f9b: 0x6e22d220, + 0x39f9c: 0x6e22d420, 0x39f9d: 0x6e22d620, 0x39f9e: 0x6e2cf220, 0x39f9f: 0x6e2cf420, + 0x39fa0: 0x6e2cf620, 0x39fa1: 0x6e2cf820, 0x39fa2: 0x6e2cfa20, 0x39fa3: 0x6e2cfc20, + 0x39fa4: 0x6e2cfe20, 0x39fa5: 0x6e2d0020, 0x39fa6: 0x6e2d0220, 0x39fa7: 0x6e2d0420, + 0x39fa8: 0x6e2d0620, 0x39fa9: 0x6e34e220, 0x39faa: 0x6e34e420, 0x39fab: 0x6e34e620, + 0x39fac: 0x6e34e820, 0x39fad: 0x6e34ea20, 0x39fae: 0x6e34ec20, 0x39faf: 0x6e34ee20, + 0x39fb0: 0x6e34f020, 0x39fb1: 0x6e34f220, 0x39fb2: 0x6e34f420, 0x39fb3: 0x6e3aa420, + 0x39fb4: 0x6e3aa620, 0x39fb5: 0x6e3e6020, 0x39fb6: 0x6e3e6220, 0x39fb7: 0x6e3e6420, + 0x39fb8: 0x6e3e6620, 0x39fb9: 0x6e413220, 0x39fba: 0x6e432e20, 0x39fbb: 0x6e413420, + 0x39fbc: 0x6e433020, 0x39fbd: 0x6e3e6820, 0x39fbe: 0x6e413620, 0x39fbf: 0x6e433220, + // Block 0xe7f, offset 0x39fc0 + 0x39fc0: 0x6e433420, 0x39fc1: 0x6e448e20, 0x39fc2: 0x6e456220, 0x39fc3: 0x6e45e020, + 0x39fc4: 0x6e471420, 0x39fc5: 0x6c40f020, 0x39fc6: 0x6c40f220, 0x39fc7: 0x6c615c20, + 0x39fc8: 0x6c87ca20, 0x39fc9: 0x6d957420, 0x39fca: 0x6e03ea20, 0x39fcb: 0x6c271e20, + 0x39fcc: 0x6c40f620, 0x39fcd: 0x6c87d220, 0x39fce: 0x6c87d420, 0x39fcf: 0x6cb34220, + 0x39fd0: 0x6cb34420, 0x39fd1: 0x6cb34620, 0x39fd2: 0x6ce2f420, 0x39fd3: 0x6ce2f620, + 0x39fd4: 0x6d115220, 0x39fd5: 0x6d115420, 0x39fd6: 0x6d115620, 0x39fd7: 0x6d115820, + 0x39fd8: 0x6d3f6e20, 0x39fd9: 0x6d3f7020, 0x39fda: 0x6d3f7220, 0x39fdb: 0x6d3f7420, + 0x39fdc: 0x6d6c5820, 0x39fdd: 0x6d6c5a20, 0x39fde: 0x6d6c5c20, 0x39fdf: 0x6d6c5e20, + 0x39fe0: 0x6d958420, 0x39fe1: 0x6d958620, 0x39fe2: 0x6d958820, 0x39fe3: 0x6d958a20, + 0x39fe4: 0x6d958c20, 0x39fe5: 0x6d958e20, 0x39fe6: 0x6d959020, 0x39fe7: 0x6d959220, + 0x39fe8: 0x6db8a020, 0x39fe9: 0x6db8a220, 0x39fea: 0x6db8a420, 0x39feb: 0x6db8a620, + 0x39fec: 0x6db8a820, 0x39fed: 0x6db8aa20, 0x39fee: 0x6db8ac20, 0x39fef: 0x6db8ae20, + 0x39ff0: 0x6dd71820, 0x39ff1: 0x6dd71a20, 0x39ff2: 0x6dd71c20, 0x39ff3: 0x6dc60820, + 0x39ff4: 0x6dcb1a20, 0x39ff5: 0x6defcc20, 0x39ff6: 0x6defce20, 0x39ff7: 0x6defd020, + 0x39ff8: 0x6defd220, 0x39ff9: 0x6defd420, 0x39ffa: 0x6e03f020, 0x39ffb: 0x6e03f220, + 0x39ffc: 0x6e03f420, 0x39ffd: 0x6e153820, 0x39ffe: 0x6e22d820, 0x39fff: 0x6e22da20, + // Block 0xe80, offset 0x3a000 + 0x3a000: 0x6e34f620, 0x3a001: 0x6e449020, 0x3a002: 0x6e456420, 0x3a003: 0x6c272220, + 0x3a004: 0x6c272420, 0x3a005: 0x6d116220, 0x3a006: 0x6d116420, 0x3a007: 0x6d116620, + 0x3a008: 0x6d6c6420, 0x3a009: 0x6d959420, 0x3a00a: 0x6defd820, 0x3a00b: 0x6e153a20, + 0x3a00c: 0x6e22dc20, 0x3a00d: 0x6c0a8220, 0x3a00e: 0x6c0a8420, 0x3a00f: 0x6c0a8620, + 0x3a010: 0x6c0a8820, 0x3a011: 0x6c151620, 0x3a012: 0x6c151820, 0x3a013: 0x6c151a20, + 0x3a014: 0x6c151c20, 0x3a015: 0x6c151e20, 0x3a016: 0x6c152020, 0x3a017: 0x6c152220, + 0x3a018: 0x6c152420, 0x3a019: 0x6c152620, 0x3a01a: 0x6c152820, 0x3a01b: 0x6c152a20, + 0x3a01c: 0x6c152c20, 0x3a01d: 0x6c152e20, 0x3a01e: 0x6c153020, 0x3a01f: 0x6c153220, + 0x3a020: 0x6c153420, 0x3a021: 0x6c153620, 0x3a022: 0x6c274620, 0x3a023: 0x6c274820, + 0x3a024: 0x6c274a20, 0x3a025: 0x6c274c20, 0x3a026: 0x6c274e20, 0x3a027: 0x6c275020, + 0x3a028: 0x6c275220, 0x3a029: 0x6c275420, 0x3a02a: 0x6c275620, 0x3a02b: 0x6c275820, + 0x3a02c: 0x6c275a20, 0x3a02d: 0x6c275c20, 0x3a02e: 0x6c275e20, 0x3a02f: 0x6c276020, + 0x3a030: 0x6c276220, 0x3a031: 0x6c276420, 0x3a032: 0x6c276620, 0x3a033: 0x6c276820, + 0x3a034: 0x6c276a20, 0x3a035: 0x6c276c20, 0x3a036: 0x6c276e20, 0x3a037: 0x6c277020, + 0x3a038: 0x6c277220, 0x3a039: 0x6c277420, 0x3a03a: 0x6c277620, 0x3a03b: 0x6c277820, + 0x3a03c: 0x6c277a20, 0x3a03d: 0x6c277c20, 0x3a03e: 0x6c277e20, 0x3a03f: 0x6c278020, + // Block 0xe81, offset 0x3a040 + 0x3a040: 0x6c278220, 0x3a041: 0x6c278420, 0x3a042: 0x6c413020, 0x3a043: 0x6c413220, + 0x3a044: 0x6c413420, 0x3a045: 0x6c413620, 0x3a046: 0x6c413820, 0x3a047: 0x6c413a20, + 0x3a048: 0x6c413c20, 0x3a049: 0x6c413e20, 0x3a04a: 0x6c414020, 0x3a04b: 0x6c414220, + 0x3a04c: 0x6c414420, 0x3a04d: 0x6c414620, 0x3a04e: 0x6c414820, 0x3a04f: 0x6c414a20, + 0x3a050: 0x6c414c20, 0x3a051: 0x6c414e20, 0x3a052: 0x6c415020, 0x3a053: 0x6c415220, + 0x3a054: 0x6c415420, 0x3a055: 0x6c415620, 0x3a056: 0x6c415820, 0x3a057: 0x6c415a20, + 0x3a058: 0x6c415c20, 0x3a059: 0x6c415e20, 0x3a05a: 0x6c416020, 0x3a05b: 0x6c416220, + 0x3a05c: 0x6c416420, 0x3a05d: 0x6c416620, 0x3a05e: 0x6c416820, 0x3a05f: 0x6c416a20, + 0x3a060: 0x6c416c20, 0x3a061: 0x6c416e20, 0x3a062: 0x6c417020, 0x3a063: 0x6c417220, + 0x3a064: 0x6c417420, 0x3a065: 0x6c619020, 0x3a066: 0x6c619220, 0x3a067: 0x6c619420, + 0x3a068: 0x6c619620, 0x3a069: 0x6c619820, 0x3a06a: 0x6c619a20, 0x3a06b: 0x6c619c20, + 0x3a06c: 0x6c619e20, 0x3a06d: 0x6c61a020, 0x3a06e: 0x6c61a220, 0x3a06f: 0x6c61a420, + 0x3a070: 0x6c61a620, 0x3a071: 0x6c61a820, 0x3a072: 0x6c61aa20, 0x3a073: 0x6c61ac20, + 0x3a074: 0x6c61ae20, 0x3a075: 0x6c61b020, 0x3a076: 0x6c61b220, 0x3a077: 0x6c61b420, + 0x3a078: 0x6c61b620, 0x3a079: 0x6c61b820, 0x3a07a: 0x6c61ba20, 0x3a07b: 0x6c61bc20, + 0x3a07c: 0x6c61be20, 0x3a07d: 0x6c61c020, 0x3a07e: 0x6c61c220, 0x3a07f: 0x6c61c420, + // Block 0xe82, offset 0x3a080 + 0x3a080: 0x6c61c620, 0x3a081: 0x6c61c820, 0x3a082: 0x6c61ca20, 0x3a083: 0x6c61cc20, + 0x3a084: 0x6c61ce20, 0x3a085: 0x6c881420, 0x3a086: 0x6c881620, 0x3a087: 0x6c881820, + 0x3a088: 0x6c881a20, 0x3a089: 0x6c881c20, 0x3a08a: 0x6c881e20, 0x3a08b: 0x6c882020, + 0x3a08c: 0x6c882220, 0x3a08d: 0x6c882420, 0x3a08e: 0x6c882620, 0x3a08f: 0x6c882820, + 0x3a090: 0x6c882a20, 0x3a091: 0x6c882c20, 0x3a092: 0x6c882e20, 0x3a093: 0x6c883020, + 0x3a094: 0x6c883220, 0x3a095: 0x6c883420, 0x3a096: 0x6c883620, 0x3a097: 0x6c883820, + 0x3a098: 0x6c883a20, 0x3a099: 0x6c883c20, 0x3a09a: 0x6c883e20, 0x3a09b: 0x6c884020, + 0x3a09c: 0x6c884220, 0x3a09d: 0x6c884420, 0x3a09e: 0x6c884620, 0x3a09f: 0x6c884820, + 0x3a0a0: 0x6c884a20, 0x3a0a1: 0x6c884c20, 0x3a0a2: 0x6c884e20, 0x3a0a3: 0x6c885020, + 0x3a0a4: 0x6c885220, 0x3a0a5: 0x6c885420, 0x3a0a6: 0x6c885620, 0x3a0a7: 0x6c885820, + 0x3a0a8: 0x6c885a20, 0x3a0a9: 0x6c885c20, 0x3a0aa: 0x6c885e20, 0x3a0ab: 0x6cb38820, + 0x3a0ac: 0x6cb38a20, 0x3a0ad: 0x6cb38c20, 0x3a0ae: 0x6cb38e20, 0x3a0af: 0x6cb39020, + 0x3a0b0: 0x6cb39220, 0x3a0b1: 0x6cb39420, 0x3a0b2: 0x6cb39620, 0x3a0b3: 0x6cb39820, + 0x3a0b4: 0x6cb39a20, 0x3a0b5: 0x6cb39c20, 0x3a0b6: 0x6cb39e20, 0x3a0b7: 0x6cb3a020, + 0x3a0b8: 0x6cb3a220, 0x3a0b9: 0x6cb3a420, 0x3a0ba: 0x6cb3a620, 0x3a0bb: 0x6cb3a820, + 0x3a0bc: 0x6cb3aa20, 0x3a0bd: 0x6cb3ac20, 0x3a0be: 0x6cb3ae20, 0x3a0bf: 0x6cb3b020, + // Block 0xe83, offset 0x3a0c0 + 0x3a0c0: 0x6cb3b220, 0x3a0c1: 0x6cb3b420, 0x3a0c2: 0x6cb3b620, 0x3a0c3: 0x6cb3b820, + 0x3a0c4: 0x6cb3ba20, 0x3a0c5: 0x6cb3bc20, 0x3a0c6: 0x6cb3be20, 0x3a0c7: 0x6cb3c020, + 0x3a0c8: 0x6cb3c220, 0x3a0c9: 0x6cb3c420, 0x3a0ca: 0x6cb3c620, 0x3a0cb: 0x6cb3c820, + 0x3a0cc: 0x6cb3ca20, 0x3a0cd: 0x6cb3cc20, 0x3a0ce: 0x6ce32c20, 0x3a0cf: 0x6cb3ce20, + 0x3a0d0: 0x6cb3d020, 0x3a0d1: 0x6cb3d220, 0x3a0d2: 0x6cb3d420, 0x3a0d3: 0x6cb3d620, + 0x3a0d4: 0x6cb3d820, 0x3a0d5: 0x6cb3da20, 0x3a0d6: 0x6cb3dc20, 0x3a0d7: 0x6cb3de20, + 0x3a0d8: 0x6cb3e020, 0x3a0d9: 0x6cb3e220, 0x3a0da: 0x6cb3e420, 0x3a0db: 0x6cb3e620, + 0x3a0dc: 0x6cb3e820, 0x3a0dd: 0x6ce32e20, 0x3a0de: 0x6ce33020, 0x3a0df: 0x6ce33220, + 0x3a0e0: 0x6cb3ea20, 0x3a0e1: 0x6ce33420, 0x3a0e2: 0x6ce33620, 0x3a0e3: 0x6ce33820, + 0x3a0e4: 0x6ce33a20, 0x3a0e5: 0x6ce33c20, 0x3a0e6: 0x6ce33e20, 0x3a0e7: 0x6ce34020, + 0x3a0e8: 0x6ce34220, 0x3a0e9: 0x6ce34420, 0x3a0ea: 0x6ce34620, 0x3a0eb: 0x6ce34820, + 0x3a0ec: 0x6ce34a20, 0x3a0ed: 0x6ce34c20, 0x3a0ee: 0x6ce34e20, 0x3a0ef: 0x6ce35020, + 0x3a0f0: 0x6ce35220, 0x3a0f1: 0x6ce35420, 0x3a0f2: 0x6ce35620, 0x3a0f3: 0x6ce35820, + 0x3a0f4: 0x6ce35a20, 0x3a0f5: 0x6ce35c20, 0x3a0f6: 0x6ce35e20, 0x3a0f7: 0x6ce36020, + 0x3a0f8: 0x6ce36220, 0x3a0f9: 0x6ce36420, 0x3a0fa: 0x6ce36620, 0x3a0fb: 0x6ce36820, + 0x3a0fc: 0x6ce36a20, 0x3a0fd: 0x6ce36c20, 0x3a0fe: 0x6ce36e20, 0x3a0ff: 0x6ce37020, + // Block 0xe84, offset 0x3a100 + 0x3a100: 0x6ce37220, 0x3a101: 0x6ce37420, 0x3a102: 0x6ce37620, 0x3a103: 0x6ce37820, + 0x3a104: 0x6ce37a20, 0x3a105: 0x6ce37c20, 0x3a106: 0x6ce37e20, 0x3a107: 0x6ce38020, + 0x3a108: 0x6ce38220, 0x3a109: 0x6ce38420, 0x3a10a: 0x6ce38620, 0x3a10b: 0x6ce38820, + 0x3a10c: 0x6ce38a20, 0x3a10d: 0x6ce38c20, 0x3a10e: 0x6ce38e20, 0x3a10f: 0x6ce39020, + 0x3a110: 0x6ce39220, 0x3a111: 0x6ce39420, 0x3a112: 0x6ce39620, 0x3a113: 0x6ce39820, + 0x3a114: 0x6ce39a20, 0x3a115: 0x6ce39c20, 0x3a116: 0x6ce39e20, 0x3a117: 0x6ce3a020, + 0x3a118: 0x6ce3a220, 0x3a119: 0x6ce3a420, 0x3a11a: 0x6ce3a620, 0x3a11b: 0x6ce3a820, + 0x3a11c: 0x6ce3aa20, 0x3a11d: 0x6d11a220, 0x3a11e: 0x6d11a420, 0x3a11f: 0x6d11a620, + 0x3a120: 0x6d11a820, 0x3a121: 0x6d11aa20, 0x3a122: 0x6d11ac20, 0x3a123: 0x6d11ae20, + 0x3a124: 0x6d11b020, 0x3a125: 0x6d11b220, 0x3a126: 0x6d11b420, 0x3a127: 0x6d11b620, + 0x3a128: 0x6d11b820, 0x3a129: 0x6d11ba20, 0x3a12a: 0x6d11bc20, 0x3a12b: 0x6d11be20, + 0x3a12c: 0x6d11c020, 0x3a12d: 0x6d11c220, 0x3a12e: 0x6d11c420, 0x3a12f: 0x6d11c620, + 0x3a130: 0x6d11c820, 0x3a131: 0x6d11ca20, 0x3a132: 0x6d11cc20, 0x3a133: 0x6d11ce20, + 0x3a134: 0x6d11d020, 0x3a135: 0x6d11d220, 0x3a136: 0x6d11d420, 0x3a137: 0x6d11d620, + 0x3a138: 0x6d11d820, 0x3a139: 0x6d11da20, 0x3a13a: 0x6d11dc20, 0x3a13b: 0x6d11de20, + 0x3a13c: 0x6d11e020, 0x3a13d: 0x6d11e220, 0x3a13e: 0x6d11e420, 0x3a13f: 0x6d11e620, + // Block 0xe85, offset 0x3a140 + 0x3a140: 0x6d11e820, 0x3a141: 0x6d11ea20, 0x3a142: 0x6d11ec20, 0x3a143: 0x6d11ee20, + 0x3a144: 0x6d11f020, 0x3a145: 0x6d11f220, 0x3a146: 0x6d3f9c20, 0x3a147: 0x6d3f9e20, + 0x3a148: 0x6d3fa020, 0x3a149: 0x6d3fa220, 0x3a14a: 0x6d3fa420, 0x3a14b: 0x6d3fa620, + 0x3a14c: 0x6d3fa820, 0x3a14d: 0x6d3faa20, 0x3a14e: 0x6d3fac20, 0x3a14f: 0x6d3fae20, + 0x3a150: 0x6d3fb020, 0x3a151: 0x6d3fb220, 0x3a152: 0x6d3fb420, 0x3a153: 0x6d3fb620, + 0x3a154: 0x6d3fb820, 0x3a155: 0x6d3fba20, 0x3a156: 0x6d3fbc20, 0x3a157: 0x6d3fbe20, + 0x3a158: 0x6d3fc020, 0x3a159: 0x6d3fc220, 0x3a15a: 0x6d3fc420, 0x3a15b: 0x6d3fc620, + 0x3a15c: 0x6d3fc820, 0x3a15d: 0x6d3fca20, 0x3a15e: 0x6d3fcc20, 0x3a15f: 0x6d3fce20, + 0x3a160: 0x6d3fd020, 0x3a161: 0x6d3fd220, 0x3a162: 0x6d3fd420, 0x3a163: 0x6d3fd620, + 0x3a164: 0x6d3fd820, 0x3a165: 0x6d3fda20, 0x3a166: 0x6d3fdc20, 0x3a167: 0x6d3fde20, + 0x3a168: 0x6d3fe020, 0x3a169: 0x6d3fe220, 0x3a16a: 0x6d3fe420, 0x3a16b: 0x6d3fe620, + 0x3a16c: 0x6d3fe820, 0x3a16d: 0x6d3fea20, 0x3a16e: 0x6d3fec20, 0x3a16f: 0x6d3fee20, + 0x3a170: 0x6d3ff020, 0x3a171: 0x6d3ff220, 0x3a172: 0x6d3ff420, 0x3a173: 0x6d3ff620, + 0x3a174: 0x6d6c8a20, 0x3a175: 0x6d6c8c20, 0x3a176: 0x6d6c8e20, 0x3a177: 0x6d6c9020, + 0x3a178: 0x6d6c9220, 0x3a179: 0x6d6c9420, 0x3a17a: 0x6d6c9620, 0x3a17b: 0x6d6c9820, + 0x3a17c: 0x6d6c9a20, 0x3a17d: 0x6d6c9c20, 0x3a17e: 0x6d6c9e20, 0x3a17f: 0x6d6ca020, + // Block 0xe86, offset 0x3a180 + 0x3a180: 0x6d6ca220, 0x3a181: 0x6d6ca420, 0x3a182: 0x6d6ca620, 0x3a183: 0x6d6ca820, + 0x3a184: 0x6d6caa20, 0x3a185: 0x6d6cac20, 0x3a186: 0x6d6cae20, 0x3a187: 0x6d6cb020, + 0x3a188: 0x6d6cb220, 0x3a189: 0x6d6cb420, 0x3a18a: 0x6d6cb620, 0x3a18b: 0x6d6cb820, + 0x3a18c: 0x6d6cba20, 0x3a18d: 0x6d6cbc20, 0x3a18e: 0x6d6cbe20, 0x3a18f: 0x6d6cc020, + 0x3a190: 0x6d6cc220, 0x3a191: 0x6d6cc420, 0x3a192: 0x6d6cc620, 0x3a193: 0x6d784820, + 0x3a194: 0x6d6cc820, 0x3a195: 0x6d6cca20, 0x3a196: 0x6d6ccc20, 0x3a197: 0x6d6cce20, + 0x3a198: 0x6d6cd020, 0x3a199: 0x6d6cd220, 0x3a19a: 0x6d6cd420, 0x3a19b: 0x6d6cd620, + 0x3a19c: 0x6d6cd820, 0x3a19d: 0x6d6cda20, 0x3a19e: 0x6d6cdc20, 0x3a19f: 0x6d6cde20, + 0x3a1a0: 0x6d6ce020, 0x3a1a1: 0x6d6ce220, 0x3a1a2: 0x6d6ce420, 0x3a1a3: 0x6d6ce620, + 0x3a1a4: 0x6d6ce820, 0x3a1a5: 0x6d95b220, 0x3a1a6: 0x6d95b420, 0x3a1a7: 0x6d95b620, + 0x3a1a8: 0x6d95b820, 0x3a1a9: 0x6d95ba20, 0x3a1aa: 0x6d95bc20, 0x3a1ab: 0x6d95be20, + 0x3a1ac: 0x6d95c020, 0x3a1ad: 0x6d95c220, 0x3a1ae: 0x6d95c420, 0x3a1af: 0x6d95c620, + 0x3a1b0: 0x6d95c820, 0x3a1b1: 0x6d95ca20, 0x3a1b2: 0x6d95cc20, 0x3a1b3: 0x6d95ce20, + 0x3a1b4: 0x6d95d020, 0x3a1b5: 0x6d95d220, 0x3a1b6: 0x6d95d420, 0x3a1b7: 0x6d95d620, + 0x3a1b8: 0x6d95d820, 0x3a1b9: 0x6d95da20, 0x3a1ba: 0x6d95dc20, 0x3a1bb: 0x6d95de20, + 0x3a1bc: 0x6d95e020, 0x3a1bd: 0x6d95e220, 0x3a1be: 0x6d95e420, 0x3a1bf: 0x6d95e620, + // Block 0xe87, offset 0x3a1c0 + 0x3a1c0: 0x6d95e820, 0x3a1c1: 0x6d95ea20, 0x3a1c2: 0x6d95ec20, 0x3a1c3: 0x6d95ee20, + 0x3a1c4: 0x6d95f020, 0x3a1c5: 0x6d95f220, 0x3a1c6: 0x6d95f420, 0x3a1c7: 0x6db8c620, + 0x3a1c8: 0x6db8c820, 0x3a1c9: 0x6db8ca20, 0x3a1ca: 0x6db8cc20, 0x3a1cb: 0x6db8ce20, + 0x3a1cc: 0x6db8d020, 0x3a1cd: 0x6db8d220, 0x3a1ce: 0x6db8d420, 0x3a1cf: 0x6db8d620, + 0x3a1d0: 0x6db8d820, 0x3a1d1: 0x6db8da20, 0x3a1d2: 0x6db8dc20, 0x3a1d3: 0x6db8de20, + 0x3a1d4: 0x6db8e020, 0x3a1d5: 0x6db8e220, 0x3a1d6: 0x6db8e420, 0x3a1d7: 0x6db8e620, + 0x3a1d8: 0x6db8e820, 0x3a1d9: 0x6db8ea20, 0x3a1da: 0x6db8ec20, 0x3a1db: 0x6db8ee20, + 0x3a1dc: 0x6db8f020, 0x3a1dd: 0x6db8f220, 0x3a1de: 0x6db8f420, 0x3a1df: 0x6db8f620, + 0x3a1e0: 0x6db8f820, 0x3a1e1: 0x6dd72620, 0x3a1e2: 0x6dd72820, 0x3a1e3: 0x6dd72a20, + 0x3a1e4: 0x6dd72c20, 0x3a1e5: 0x6dd72e20, 0x3a1e6: 0x6dd73020, 0x3a1e7: 0x6dd73220, + 0x3a1e8: 0x6dd73420, 0x3a1e9: 0x6dd73620, 0x3a1ea: 0x6dd73820, 0x3a1eb: 0x6dd73a20, + 0x3a1ec: 0x6dd73c20, 0x3a1ed: 0x6dd73e20, 0x3a1ee: 0x6dd74020, 0x3a1ef: 0x6dd74220, + 0x3a1f0: 0x6dd74420, 0x3a1f1: 0x6dd74620, 0x3a1f2: 0x6dd74820, 0x3a1f3: 0x6dd74a20, + 0x3a1f4: 0x6dd74c20, 0x3a1f5: 0x6dd74e20, 0x3a1f6: 0x6dd75020, 0x3a1f7: 0x6defe220, + 0x3a1f8: 0x6defe420, 0x3a1f9: 0x6defe620, 0x3a1fa: 0x6defe820, 0x3a1fb: 0x6defea20, + 0x3a1fc: 0x6e03e620, 0x3a1fd: 0x6defec20, 0x3a1fe: 0x6defee20, 0x3a1ff: 0x6deff020, + // Block 0xe88, offset 0x3a200 + 0x3a200: 0x6deff220, 0x3a201: 0x6deff420, 0x3a202: 0x6e03fe20, 0x3a203: 0x6e040020, + 0x3a204: 0x6e040220, 0x3a205: 0x6e040420, 0x3a206: 0x6e040620, 0x3a207: 0x6e040820, + 0x3a208: 0x6e040a20, 0x3a209: 0x6e040c20, 0x3a20a: 0x6e040e20, 0x3a20b: 0x6e041020, + 0x3a20c: 0x6e041220, 0x3a20d: 0x6e041420, 0x3a20e: 0x6e041620, 0x3a20f: 0x6e041820, + 0x3a210: 0x6e041a20, 0x3a211: 0x6e041c20, 0x3a212: 0x6e153e20, 0x3a213: 0x6e154020, + 0x3a214: 0x6e154220, 0x3a215: 0x6e154420, 0x3a216: 0x6e154620, 0x3a217: 0x6e154820, + 0x3a218: 0x6e154a20, 0x3a219: 0x6e22de20, 0x3a21a: 0x6e22e020, 0x3a21b: 0x6e22e220, + 0x3a21c: 0x6e22e420, 0x3a21d: 0x6e22e620, 0x3a21e: 0x6e22e820, 0x3a21f: 0x6e2d0c20, + 0x3a220: 0x6e2d0e20, 0x3a221: 0x6e2d1020, 0x3a222: 0x6e2d1220, 0x3a223: 0x6e2d1420, + 0x3a224: 0x6e34fa20, 0x3a225: 0x6e34fc20, 0x3a226: 0x6e3aa820, 0x3a227: 0x6e3e6a20, + 0x3a228: 0x6c00ca20, 0x3a229: 0x6c052220, 0x3a22a: 0x6c052420, 0x3a22b: 0x6c0a9220, + 0x3a22c: 0x6c0a9420, 0x3a22d: 0x6c0a9620, 0x3a22e: 0x6c0a9820, 0x3a22f: 0x6c0a9a20, + 0x3a230: 0x6c0a9c20, 0x3a231: 0x6c0a9e20, 0x3a232: 0x6c0aa020, 0x3a233: 0x6c0aa220, + 0x3a234: 0x6c0aa420, 0x3a235: 0x6c0aa620, 0x3a236: 0x6c154e20, 0x3a237: 0x6c155020, + 0x3a238: 0x6c155220, 0x3a239: 0x6c155420, 0x3a23a: 0x6c155620, 0x3a23b: 0x6c155820, + 0x3a23c: 0x6c155a20, 0x3a23d: 0x6c155c20, 0x3a23e: 0x6c155e20, 0x3a23f: 0x6c156020, + // Block 0xe89, offset 0x3a240 + 0x3a240: 0x6c156220, 0x3a241: 0x6c156420, 0x3a242: 0x6c156620, 0x3a243: 0x6c156820, + 0x3a244: 0x6c156a20, 0x3a245: 0x6c156c20, 0x3a246: 0x6c156e20, 0x3a247: 0x6c157020, + 0x3a248: 0x6c157220, 0x3a249: 0x6c157420, 0x3a24a: 0x6c157620, 0x3a24b: 0x6c157820, + 0x3a24c: 0x6c157a20, 0x3a24d: 0x6c157c20, 0x3a24e: 0x6c157e20, 0x3a24f: 0x6c158020, + 0x3a250: 0x6c158220, 0x3a251: 0x6c158420, 0x3a252: 0x6c158620, 0x3a253: 0x6c27ae20, + 0x3a254: 0x6c27b020, 0x3a255: 0x6c27b220, 0x3a256: 0x6c27b420, 0x3a257: 0x6c27b620, + 0x3a258: 0x6c27b820, 0x3a259: 0x6c27ba20, 0x3a25a: 0x6c27bc20, 0x3a25b: 0x6c27be20, + 0x3a25c: 0x6c27c020, 0x3a25d: 0x6c27c220, 0x3a25e: 0x6c27c420, 0x3a25f: 0x6c27c620, + 0x3a260: 0x6c27c820, 0x3a261: 0x6c27ca20, 0x3a262: 0x6c27cc20, 0x3a263: 0x6c27ce20, + 0x3a264: 0x6c27d020, 0x3a265: 0x6c27d220, 0x3a266: 0x6c27d420, 0x3a267: 0x6c27d620, + 0x3a268: 0x6c27d820, 0x3a269: 0x6c27da20, 0x3a26a: 0x6c27dc20, 0x3a26b: 0x6c27de20, + 0x3a26c: 0x6c27e020, 0x3a26d: 0x6c27e220, 0x3a26e: 0x6c27e420, 0x3a26f: 0x6c41a020, + 0x3a270: 0x6c41a220, 0x3a271: 0x6c41a420, 0x3a272: 0x6c41a620, 0x3a273: 0x6c41a820, + 0x3a274: 0x6c41aa20, 0x3a275: 0x6c41ac20, 0x3a276: 0x6c41ae20, 0x3a277: 0x6c41b020, + 0x3a278: 0x6c41b220, 0x3a279: 0x6c41b420, 0x3a27a: 0x6c41b620, 0x3a27b: 0x6c41b820, + 0x3a27c: 0x6c41ba20, 0x3a27d: 0x6c41bc20, 0x3a27e: 0x6c41be20, 0x3a27f: 0x6c41c020, + // Block 0xe8a, offset 0x3a280 + 0x3a280: 0x6c41c220, 0x3a281: 0x6c41c420, 0x3a282: 0x6c41c620, 0x3a283: 0x6c41c820, + 0x3a284: 0x6c41ca20, 0x3a285: 0x6c41cc20, 0x3a286: 0x6c41ce20, 0x3a287: 0x6c41d020, + 0x3a288: 0x6c41d220, 0x3a289: 0x6c41d420, 0x3a28a: 0x6c41d620, 0x3a28b: 0x6c620e20, + 0x3a28c: 0x6c621020, 0x3a28d: 0x6c621220, 0x3a28e: 0x6c621420, 0x3a28f: 0x6c621620, + 0x3a290: 0x6c621820, 0x3a291: 0x6c621a20, 0x3a292: 0x6c621c20, 0x3a293: 0x6c621e20, + 0x3a294: 0x6c622020, 0x3a295: 0x6c622220, 0x3a296: 0x6c622420, 0x3a297: 0x6c622620, + 0x3a298: 0x6c622820, 0x3a299: 0x6c622a20, 0x3a29a: 0x6c622c20, 0x3a29b: 0x6c622e20, + 0x3a29c: 0x6c623020, 0x3a29d: 0x6c623220, 0x3a29e: 0x6c623420, 0x3a29f: 0x6c623620, + 0x3a2a0: 0x6c623820, 0x3a2a1: 0x6c623a20, 0x3a2a2: 0x6c623c20, 0x3a2a3: 0x6c623e20, + 0x3a2a4: 0x6c624020, 0x3a2a5: 0x6c624220, 0x3a2a6: 0x6c624420, 0x3a2a7: 0x6c624620, + 0x3a2a8: 0x6c624820, 0x3a2a9: 0x6c624a20, 0x3a2aa: 0x6c624c20, 0x3a2ab: 0x6c889a20, + 0x3a2ac: 0x6c889c20, 0x3a2ad: 0x6c889e20, 0x3a2ae: 0x6c88a020, 0x3a2af: 0x6c88a220, + 0x3a2b0: 0x6c88a420, 0x3a2b1: 0x6c88a620, 0x3a2b2: 0x6c88a820, 0x3a2b3: 0x6c88aa20, + 0x3a2b4: 0x6c88ac20, 0x3a2b5: 0x6c88ae20, 0x3a2b6: 0x6c88b020, 0x3a2b7: 0x6c88b220, + 0x3a2b8: 0x6c88b420, 0x3a2b9: 0x6c88b620, 0x3a2ba: 0x6c88b820, 0x3a2bb: 0x6c88ba20, + 0x3a2bc: 0x6c88bc20, 0x3a2bd: 0x6c88be20, 0x3a2be: 0x6c88c020, 0x3a2bf: 0x6c88c220, + // Block 0xe8b, offset 0x3a2c0 + 0x3a2c0: 0x6c88c420, 0x3a2c1: 0x6c88c620, 0x3a2c2: 0x6c88c820, 0x3a2c3: 0x6c88ca20, + 0x3a2c4: 0x6c88cc20, 0x3a2c5: 0x6c88ce20, 0x3a2c6: 0x6c88d020, 0x3a2c7: 0x6c88d220, + 0x3a2c8: 0x6c88d420, 0x3a2c9: 0x6c88d620, 0x3a2ca: 0x6c88d820, 0x3a2cb: 0x6c88da20, + 0x3a2cc: 0x6c88dc20, 0x3a2cd: 0x6c88de20, 0x3a2ce: 0x6c88e020, 0x3a2cf: 0x6cb42a20, + 0x3a2d0: 0x6cb42c20, 0x3a2d1: 0x6cb42e20, 0x3a2d2: 0x6cb43020, 0x3a2d3: 0x6cb43220, + 0x3a2d4: 0x6cb43420, 0x3a2d5: 0x6cb43620, 0x3a2d6: 0x6cb43820, 0x3a2d7: 0x6ce3e620, + 0x3a2d8: 0x6cb43a20, 0x3a2d9: 0x6cb43c20, 0x3a2da: 0x6cb43e20, 0x3a2db: 0x6cb44020, + 0x3a2dc: 0x6cb44220, 0x3a2dd: 0x6cb44420, 0x3a2de: 0x6cb44620, 0x3a2df: 0x6cb44820, + 0x3a2e0: 0x6cb44a20, 0x3a2e1: 0x6cb44c20, 0x3a2e2: 0x6cb44e20, 0x3a2e3: 0x6cb45020, + 0x3a2e4: 0x6cb45220, 0x3a2e5: 0x6cb45420, 0x3a2e6: 0x6cb45620, 0x3a2e7: 0x6cb45820, + 0x3a2e8: 0x6cb45a20, 0x3a2e9: 0x6cb45c20, 0x3a2ea: 0x6cb45e20, 0x3a2eb: 0x6cb46020, + 0x3a2ec: 0x6cb46220, 0x3a2ed: 0x6cb46420, 0x3a2ee: 0x6cb46620, 0x3a2ef: 0x6cb46820, + 0x3a2f0: 0x6cb46a20, 0x3a2f1: 0x6cb46c20, 0x3a2f2: 0x6ce3e820, 0x3a2f3: 0x6ce3ea20, + 0x3a2f4: 0x6ce3ec20, 0x3a2f5: 0x6ce3ee20, 0x3a2f6: 0x6ce3f020, 0x3a2f7: 0x6ce3f220, + 0x3a2f8: 0x6ce3f420, 0x3a2f9: 0x6ce3f620, 0x3a2fa: 0x6ce3f820, 0x3a2fb: 0x6ce3fa20, + 0x3a2fc: 0x6ce3fc20, 0x3a2fd: 0x6ce3fe20, 0x3a2fe: 0x6ce40020, 0x3a2ff: 0x6ce40220, + // Block 0xe8c, offset 0x3a300 + 0x3a300: 0x6ce40420, 0x3a301: 0x6ce40620, 0x3a302: 0x6ce40820, 0x3a303: 0x6ce40a20, + 0x3a304: 0x6ce40c20, 0x3a305: 0x6ce40e20, 0x3a306: 0x6ce41020, 0x3a307: 0x6ce41220, + 0x3a308: 0x6ce41420, 0x3a309: 0x6ce41620, 0x3a30a: 0x6ce41820, 0x3a30b: 0x6d122220, + 0x3a30c: 0x6d122420, 0x3a30d: 0x6d122620, 0x3a30e: 0x6d122820, 0x3a30f: 0x6d122a20, + 0x3a310: 0x6d122c20, 0x3a311: 0x6d122e20, 0x3a312: 0x6d123020, 0x3a313: 0x6d123220, + 0x3a314: 0x6d123420, 0x3a315: 0x6d123620, 0x3a316: 0x6d123820, 0x3a317: 0x6d123a20, + 0x3a318: 0x6d123c20, 0x3a319: 0x6d123e20, 0x3a31a: 0x6d124020, 0x3a31b: 0x6d124220, + 0x3a31c: 0x6d124420, 0x3a31d: 0x6d124620, 0x3a31e: 0x6d124820, 0x3a31f: 0x6d124a20, + 0x3a320: 0x6d124c20, 0x3a321: 0x6d124e20, 0x3a322: 0x6d125020, 0x3a323: 0x6d125220, + 0x3a324: 0x6d125420, 0x3a325: 0x6d125620, 0x3a326: 0x6d125820, 0x3a327: 0x6d125a20, + 0x3a328: 0x6d125c20, 0x3a329: 0x6d125e20, 0x3a32a: 0x6d126020, 0x3a32b: 0x6d403020, + 0x3a32c: 0x6d403220, 0x3a32d: 0x6d403420, 0x3a32e: 0x6d403620, 0x3a32f: 0x6d403820, + 0x3a330: 0x6d403a20, 0x3a331: 0x6d403c20, 0x3a332: 0x6d403e20, 0x3a333: 0x6d404020, + 0x3a334: 0x6d404220, 0x3a335: 0x6d404420, 0x3a336: 0x6d404620, 0x3a337: 0x6d404820, + 0x3a338: 0x6d404a20, 0x3a339: 0x6d126220, 0x3a33a: 0x6d404c20, 0x3a33b: 0x6d404e20, + 0x3a33c: 0x6d405020, 0x3a33d: 0x6d405220, 0x3a33e: 0x6d405420, 0x3a33f: 0x6d405620, + // Block 0xe8d, offset 0x3a340 + 0x3a340: 0x6d405820, 0x3a341: 0x6d405a20, 0x3a342: 0x6d405c20, 0x3a343: 0x6d405e20, + 0x3a344: 0x6d406020, 0x3a345: 0x6d406220, 0x3a346: 0x6d406420, 0x3a347: 0x6d406620, + 0x3a348: 0x6d406820, 0x3a349: 0x6d406a20, 0x3a34a: 0x6d406c20, 0x3a34b: 0x6d406e20, + 0x3a34c: 0x6d407020, 0x3a34d: 0x6d407220, 0x3a34e: 0x6d407420, 0x3a34f: 0x6d407620, + 0x3a350: 0x6d407820, 0x3a351: 0x6d6d1820, 0x3a352: 0x6d6d1a20, 0x3a353: 0x6d6d1c20, + 0x3a354: 0x6d6d1e20, 0x3a355: 0x6d6d2020, 0x3a356: 0x6d6d2220, 0x3a357: 0x6d6d2420, + 0x3a358: 0x6d6d2620, 0x3a359: 0x6d6d2820, 0x3a35a: 0x6d6d2a20, 0x3a35b: 0x6d6d2c20, + 0x3a35c: 0x6d6d2e20, 0x3a35d: 0x6d6d3020, 0x3a35e: 0x6d6d3220, 0x3a35f: 0x6d6d3420, + 0x3a360: 0x6d6d3620, 0x3a361: 0x6d6d3820, 0x3a362: 0x6d6d3a20, 0x3a363: 0x6d6d3c20, + 0x3a364: 0x6d6d3e20, 0x3a365: 0x6d6d4020, 0x3a366: 0x6d6d4220, 0x3a367: 0x6d960820, + 0x3a368: 0x6d960a20, 0x3a369: 0x6d960c20, 0x3a36a: 0x6d960e20, 0x3a36b: 0x6d961020, + 0x3a36c: 0x6d961220, 0x3a36d: 0x6d961420, 0x3a36e: 0x6d961620, 0x3a36f: 0x6d961820, + 0x3a370: 0x6d961a20, 0x3a371: 0x6d961c20, 0x3a372: 0x6d961e20, 0x3a373: 0x6d962020, + 0x3a374: 0x6d962220, 0x3a375: 0x6d962420, 0x3a376: 0x6d962620, 0x3a377: 0x6d962820, + 0x3a378: 0x6d962a20, 0x3a379: 0x6d962c20, 0x3a37a: 0x6db90c20, 0x3a37b: 0x6db90e20, + 0x3a37c: 0x6db91020, 0x3a37d: 0x6db91220, 0x3a37e: 0x6db91420, 0x3a37f: 0x6db91620, + // Block 0xe8e, offset 0x3a380 + 0x3a380: 0x6db91820, 0x3a381: 0x6db91a20, 0x3a382: 0x6db91c20, 0x3a383: 0x6db91e20, + 0x3a384: 0x6db92020, 0x3a385: 0x6db92220, 0x3a386: 0x6db92420, 0x3a387: 0x6db92620, + 0x3a388: 0x6db92820, 0x3a389: 0x6db92a20, 0x3a38a: 0x6db92c20, 0x3a38b: 0x6db92e20, + 0x3a38c: 0x6db93020, 0x3a38d: 0x6dd76220, 0x3a38e: 0x6dd76420, 0x3a38f: 0x6dd76620, + 0x3a390: 0x6dd76820, 0x3a391: 0x6dd76a20, 0x3a392: 0x6dd76c20, 0x3a393: 0x6dd76e20, + 0x3a394: 0x6dd77020, 0x3a395: 0x6dd77220, 0x3a396: 0x6dd77420, 0x3a397: 0x6dd77620, + 0x3a398: 0x6dd77820, 0x3a399: 0x6deffc20, 0x3a39a: 0x6deffe20, 0x3a39b: 0x6df00020, + 0x3a39c: 0x6df00220, 0x3a39d: 0x6df00420, 0x3a39e: 0x6df00620, 0x3a39f: 0x6df00820, + 0x3a3a0: 0x6e042a20, 0x3a3a1: 0x6e042c20, 0x3a3a2: 0x6e042e20, 0x3a3a3: 0x6e043020, + 0x3a3a4: 0x6e155420, 0x3a3a5: 0x6e155620, 0x3a3a6: 0x6e155820, 0x3a3a7: 0x6e155a20, + 0x3a3a8: 0x6e22ee20, 0x3a3a9: 0x6e2d1a20, 0x3a3aa: 0x6e2d1c20, 0x3a3ab: 0x6e2d1e20, + 0x3a3ac: 0x6e2d2020, 0x3a3ad: 0x6e2d2220, 0x3a3ae: 0x6e2d2420, 0x3a3af: 0x6e3e6c20, + 0x3a3b0: 0x6c88fc20, 0x3a3b1: 0x6c88fe20, 0x3a3b2: 0x6c890020, 0x3a3b3: 0x6c890220, + 0x3a3b4: 0x6cb49620, 0x3a3b5: 0x6cb49820, 0x3a3b6: 0x6cb49a20, 0x3a3b7: 0x6cb49c20, + 0x3a3b8: 0x6cb49e20, 0x3a3b9: 0x6cb4a020, 0x3a3ba: 0x6cb4a220, 0x3a3bb: 0x6cb4a420, + 0x3a3bc: 0x6cb4a620, 0x3a3bd: 0x6cb4a820, 0x3a3be: 0x6cb4aa20, 0x3a3bf: 0x6cb4ac20, + // Block 0xe8f, offset 0x3a3c0 + 0x3a3c0: 0x6cb4ae20, 0x3a3c1: 0x6cb4b020, 0x3a3c2: 0x6cb4b220, 0x3a3c3: 0x6cb4b420, + 0x3a3c4: 0x6cb4b620, 0x3a3c5: 0x6cb4b820, 0x3a3c6: 0x6cb4ba20, 0x3a3c7: 0x6cb4bc20, + 0x3a3c8: 0x6cb4be20, 0x3a3c9: 0x6cb4c020, 0x3a3ca: 0x6cb4c220, 0x3a3cb: 0x6ce43820, + 0x3a3cc: 0x6ce43a20, 0x3a3cd: 0x6ce43c20, 0x3a3ce: 0x6ce43e20, 0x3a3cf: 0x6ce44020, + 0x3a3d0: 0x6ce44220, 0x3a3d1: 0x6ce44420, 0x3a3d2: 0x6ce44620, 0x3a3d3: 0x6ce44820, + 0x3a3d4: 0x6ce44a20, 0x3a3d5: 0x6ce44c20, 0x3a3d6: 0x6ce44e20, 0x3a3d7: 0x6ce45020, + 0x3a3d8: 0x6ce45220, 0x3a3d9: 0x6ce45420, 0x3a3da: 0x6ce45620, 0x3a3db: 0x6ce45820, + 0x3a3dc: 0x6ce45a20, 0x3a3dd: 0x6ce45c20, 0x3a3de: 0x6ce45e20, 0x3a3df: 0x6ce46020, + 0x3a3e0: 0x6ce46220, 0x3a3e1: 0x6ce46420, 0x3a3e2: 0x6ce46620, 0x3a3e3: 0x6ce46820, + 0x3a3e4: 0x6d129020, 0x3a3e5: 0x6d129220, 0x3a3e6: 0x6d129420, 0x3a3e7: 0x6d129620, + 0x3a3e8: 0x6d129820, 0x3a3e9: 0x6d129a20, 0x3a3ea: 0x6d129c20, 0x3a3eb: 0x6d129e20, + 0x3a3ec: 0x6d12a020, 0x3a3ed: 0x6d12a220, 0x3a3ee: 0x6d12a420, 0x3a3ef: 0x6d12a620, + 0x3a3f0: 0x6d12a820, 0x3a3f1: 0x6d12aa20, 0x3a3f2: 0x6d12ac20, 0x3a3f3: 0x6d12ae20, + 0x3a3f4: 0x6d12b020, 0x3a3f5: 0x6d12b220, 0x3a3f6: 0x6d12b420, 0x3a3f7: 0x6d409a20, + 0x3a3f8: 0x6d409c20, 0x3a3f9: 0x6d409e20, 0x3a3fa: 0x6d40a020, 0x3a3fb: 0x6d40a220, + 0x3a3fc: 0x6d40a420, 0x3a3fd: 0x6d40a620, 0x3a3fe: 0x6d40a820, 0x3a3ff: 0x6d40aa20, + // Block 0xe90, offset 0x3a400 + 0x3a400: 0x6d40ac20, 0x3a401: 0x6d40ae20, 0x3a402: 0x6d40b020, 0x3a403: 0x6d40b220, + 0x3a404: 0x6d40b420, 0x3a405: 0x6d40b620, 0x3a406: 0x6d40b820, 0x3a407: 0x6d40ba20, + 0x3a408: 0x6d40bc20, 0x3a409: 0x6d40be20, 0x3a40a: 0x6d40c020, 0x3a40b: 0x6d40c220, + 0x3a40c: 0x6d6d6a20, 0x3a40d: 0x6d6d6c20, 0x3a40e: 0x6d6d6e20, 0x3a40f: 0x6d6d7020, + 0x3a410: 0x6d6d7220, 0x3a411: 0x6d6d7420, 0x3a412: 0x6d6d7620, 0x3a413: 0x6d6d7820, + 0x3a414: 0x6d6d7a20, 0x3a415: 0x6d6d7c20, 0x3a416: 0x6d6d7e20, 0x3a417: 0x6d6d8020, + 0x3a418: 0x6d6d8220, 0x3a419: 0x6d6d8420, 0x3a41a: 0x6d6d8620, 0x3a41b: 0x6d6d8820, + 0x3a41c: 0x6d6d8a20, 0x3a41d: 0x6d6d8c20, 0x3a41e: 0x6d6d8e20, 0x3a41f: 0x6d6d9020, + 0x3a420: 0x6d6d9220, 0x3a421: 0x6d6d9420, 0x3a422: 0x6d6d9620, 0x3a423: 0x6d6d9820, + 0x3a424: 0x6d6d9a20, 0x3a425: 0x6d6d9c20, 0x3a426: 0x6d6d9e20, 0x3a427: 0x6d6da020, + 0x3a428: 0x6d6da220, 0x3a429: 0x6d965820, 0x3a42a: 0x6d965a20, 0x3a42b: 0x6d965c20, + 0x3a42c: 0x6d965e20, 0x3a42d: 0x6d966020, 0x3a42e: 0x6d966220, 0x3a42f: 0x6d966420, + 0x3a430: 0x6d966620, 0x3a431: 0x6d966820, 0x3a432: 0x6d966a20, 0x3a433: 0x6d966c20, + 0x3a434: 0x6d966e20, 0x3a435: 0x6d967020, 0x3a436: 0x6d967220, 0x3a437: 0x6d967420, + 0x3a438: 0x6d967620, 0x3a439: 0x6d967820, 0x3a43a: 0x6d967a20, 0x3a43b: 0x6d967c20, + 0x3a43c: 0x6d967e20, 0x3a43d: 0x6d968020, 0x3a43e: 0x6d968220, 0x3a43f: 0x6d968420, + // Block 0xe91, offset 0x3a440 + 0x3a440: 0x6d968620, 0x3a441: 0x6d968820, 0x3a442: 0x6d968a20, 0x3a443: 0x6d968c20, + 0x3a444: 0x6d968e20, 0x3a445: 0x6db95620, 0x3a446: 0x6db95820, 0x3a447: 0x6db95a20, + 0x3a448: 0x6db95c20, 0x3a449: 0x6db95e20, 0x3a44a: 0x6db96020, 0x3a44b: 0x6db96220, + 0x3a44c: 0x6db96420, 0x3a44d: 0x6db96620, 0x3a44e: 0x6db96820, 0x3a44f: 0x6db96a20, + 0x3a450: 0x6db96c20, 0x3a451: 0x6db96e20, 0x3a452: 0x6db97020, 0x3a453: 0x6db97220, + 0x3a454: 0x6db97420, 0x3a455: 0x6db97620, 0x3a456: 0x6db97820, 0x3a457: 0x6db97a20, + 0x3a458: 0x6db97c20, 0x3a459: 0x6db97e20, 0x3a45a: 0x6db98020, 0x3a45b: 0x6db98220, + 0x3a45c: 0x6db98420, 0x3a45d: 0x6db98620, 0x3a45e: 0x6db98820, 0x3a45f: 0x6db98a20, + 0x3a460: 0x6db98c20, 0x3a461: 0x6dd79220, 0x3a462: 0x6dd79420, 0x3a463: 0x6dd79620, + 0x3a464: 0x6dd79820, 0x3a465: 0x6dd79a20, 0x3a466: 0x6dd79c20, 0x3a467: 0x6dd79e20, + 0x3a468: 0x6dd7a020, 0x3a469: 0x6dd7a220, 0x3a46a: 0x6dd7a420, 0x3a46b: 0x6dd7a620, + 0x3a46c: 0x6dd7a820, 0x3a46d: 0x6dd7aa20, 0x3a46e: 0x6dd7ac20, 0x3a46f: 0x6dd7ae20, + 0x3a470: 0x6dd7b020, 0x3a471: 0x6dd7b220, 0x3a472: 0x6dd7b420, 0x3a473: 0x6dd7b620, + 0x3a474: 0x6dd7b820, 0x3a475: 0x6dd7ba20, 0x3a476: 0x6dd7bc20, 0x3a477: 0x6dd7be20, + 0x3a478: 0x6dd7c020, 0x3a479: 0x6dd7c220, 0x3a47a: 0x6dd7c420, 0x3a47b: 0x6dd7c620, + 0x3a47c: 0x6dd7c820, 0x3a47d: 0x6df01e20, 0x3a47e: 0x6df02020, 0x3a47f: 0x6df02220, + // Block 0xe92, offset 0x3a480 + 0x3a480: 0x6df02420, 0x3a481: 0x6df02620, 0x3a482: 0x6df02820, 0x3a483: 0x6df02a20, + 0x3a484: 0x6df02c20, 0x3a485: 0x6df02e20, 0x3a486: 0x6df03020, 0x3a487: 0x6df03220, + 0x3a488: 0x6df03420, 0x3a489: 0x6df03620, 0x3a48a: 0x6df03820, 0x3a48b: 0x6df03a20, + 0x3a48c: 0x6df03c20, 0x3a48d: 0x6df03e20, 0x3a48e: 0x6df04020, 0x3a48f: 0x6df04220, + 0x3a490: 0x6df04420, 0x3a491: 0x6df04620, 0x3a492: 0x6df04820, 0x3a493: 0x6df04a20, + 0x3a494: 0x6df04c20, 0x3a495: 0x6df04e20, 0x3a496: 0x6e044220, 0x3a497: 0x6e044420, + 0x3a498: 0x6e044620, 0x3a499: 0x6e044820, 0x3a49a: 0x6e044a20, 0x3a49b: 0x6e044c20, + 0x3a49c: 0x6e044e20, 0x3a49d: 0x6e045020, 0x3a49e: 0x6e045220, 0x3a49f: 0x6e045420, + 0x3a4a0: 0x6e045620, 0x3a4a1: 0x6e045820, 0x3a4a2: 0x6e045a20, 0x3a4a3: 0x6e045c20, + 0x3a4a4: 0x6e045e20, 0x3a4a5: 0x6e046020, 0x3a4a6: 0x6e156620, 0x3a4a7: 0x6e156820, + 0x3a4a8: 0x6e156a20, 0x3a4a9: 0x6e156c20, 0x3a4aa: 0x6e156e20, 0x3a4ab: 0x6e157020, + 0x3a4ac: 0x6e157220, 0x3a4ad: 0x6e157420, 0x3a4ae: 0x6e22f420, 0x3a4af: 0x6e22f620, + 0x3a4b0: 0x6e22f820, 0x3a4b1: 0x6e22fa20, 0x3a4b2: 0x6e22fc20, 0x3a4b3: 0x6e22fe20, + 0x3a4b4: 0x6e230020, 0x3a4b5: 0x6e230220, 0x3a4b6: 0x6e2d2820, 0x3a4b7: 0x6e2d2a20, + 0x3a4b8: 0x6e2d2c20, 0x3a4b9: 0x6e2d2e20, 0x3a4ba: 0x6e2d3020, 0x3a4bb: 0x6e2d3220, + 0x3a4bc: 0x6e2d3420, 0x3a4bd: 0x6e2d3620, 0x3a4be: 0x6e350a20, 0x3a4bf: 0x6e350c20, + // Block 0xe93, offset 0x3a4c0 + 0x3a4c0: 0x6e350e20, 0x3a4c1: 0x6e351020, 0x3a4c2: 0x6e351220, 0x3a4c3: 0x6e3aac20, + 0x3a4c4: 0x6e3aae20, 0x3a4c5: 0x6e3e7220, 0x3a4c6: 0x6e3e7420, 0x3a4c7: 0x6e413a20, + 0x3a4c8: 0x6e413c20, 0x3a4c9: 0x6e413e20, 0x3a4ca: 0x6e433a20, 0x3a4cb: 0x6e433c20, + 0x3a4cc: 0x6e433e20, 0x3a4cd: 0x6e45e220, 0x3a4ce: 0x6e45e420, 0x3a4cf: 0x6c890620, + 0x3a4d0: 0x6cb4c620, 0x3a4d1: 0x6cb4c820, 0x3a4d2: 0x6d40ca20, 0x3a4d3: 0x6d40cc20, + 0x3a4d4: 0x6d40ce20, 0x3a4d5: 0x6d6da620, 0x3a4d6: 0x6d6da820, 0x3a4d7: 0x6d6daa20, + 0x3a4d8: 0x6d969020, 0x3a4d9: 0x6d969220, 0x3a4da: 0x6db99220, 0x3a4db: 0x6db99420, + 0x3a4dc: 0x6db99620, 0x3a4dd: 0x6dd7cc20, 0x3a4de: 0x6e046420, 0x3a4df: 0x6e157820, + 0x3a4e0: 0x6e157a20, 0x3a4e1: 0x6e230420, 0x3a4e2: 0x6cb4ce20, 0x3a4e3: 0x6c890820, + 0x3a4e4: 0x6c890a20, 0x3a4e5: 0x6cb4d020, 0x3a4e6: 0x6ce47220, 0x3a4e7: 0x6ce47420, + 0x3a4e8: 0x6ce47620, 0x3a4e9: 0x6ce47820, 0x3a4ea: 0x6d12bc20, 0x3a4eb: 0x6d12be20, + 0x3a4ec: 0x6d40d020, 0x3a4ed: 0x6d6dac20, 0x3a4ee: 0x6d6dae20, 0x3a4ef: 0x6d6db020, + 0x3a4f0: 0x6d969420, 0x3a4f1: 0x6d969620, 0x3a4f2: 0x6db99a20, 0x3a4f3: 0x6db99c20, + 0x3a4f4: 0x6dd7d020, 0x3a4f5: 0x6dd7d220, 0x3a4f6: 0x6dd7d420, 0x3a4f7: 0x6dd7d620, + 0x3a4f8: 0x6e046820, 0x3a4f9: 0x6e157c20, 0x3a4fa: 0x6e157e20, 0x3a4fb: 0x6e3ab020, + 0x3a4fc: 0x6e456620, 0x3a4fd: 0x6c892a20, 0x3a4fe: 0x6c892c20, 0x3a4ff: 0x6c892e20, + // Block 0xe94, offset 0x3a500 + 0x3a500: 0x6c893020, 0x3a501: 0x6c893220, 0x3a502: 0x6cb50a20, 0x3a503: 0x6cb50c20, + 0x3a504: 0x6cb50e20, 0x3a505: 0x6cb51020, 0x3a506: 0x6cb51220, 0x3a507: 0x6cb51420, + 0x3a508: 0x6cb51620, 0x3a509: 0x6cb51820, 0x3a50a: 0x6ce4e420, 0x3a50b: 0x6ce4e620, + 0x3a50c: 0x6ce4e820, 0x3a50d: 0x6ce4ea20, 0x3a50e: 0x6ce4ec20, 0x3a50f: 0x6ce4ee20, + 0x3a510: 0x6ce4f020, 0x3a511: 0x6ce4f220, 0x3a512: 0x6ce4f420, 0x3a513: 0x6ce4f620, + 0x3a514: 0x6ce4f820, 0x3a515: 0x6ce4fa20, 0x3a516: 0x6ce4fc20, 0x3a517: 0x6ce4fe20, + 0x3a518: 0x6ce50020, 0x3a519: 0x6ce50220, 0x3a51a: 0x6ce50420, 0x3a51b: 0x6ce50620, + 0x3a51c: 0x6ce50820, 0x3a51d: 0x6ce50a20, 0x3a51e: 0x6ce50c20, 0x3a51f: 0x6ce50e20, + 0x3a520: 0x6ce51020, 0x3a521: 0x6ce51220, 0x3a522: 0x6ce51420, 0x3a523: 0x6ce51620, + 0x3a524: 0x6ce51820, 0x3a525: 0x6d135820, 0x3a526: 0x6d135a20, 0x3a527: 0x6d135c20, + 0x3a528: 0x6d135e20, 0x3a529: 0x6d136020, 0x3a52a: 0x6d136220, 0x3a52b: 0x6d136420, + 0x3a52c: 0x6d136620, 0x3a52d: 0x6d136820, 0x3a52e: 0x6d136a20, 0x3a52f: 0x6d136c20, + 0x3a530: 0x6d136e20, 0x3a531: 0x6d137020, 0x3a532: 0x6d137220, 0x3a533: 0x6d137420, + 0x3a534: 0x6d137620, 0x3a535: 0x6d137820, 0x3a536: 0x6d137a20, 0x3a537: 0x6d137c20, + 0x3a538: 0x6d137e20, 0x3a539: 0x6d138020, 0x3a53a: 0x6d138220, 0x3a53b: 0x6d138420, + 0x3a53c: 0x6d138620, 0x3a53d: 0x6d138820, 0x3a53e: 0x6d138a20, 0x3a53f: 0x6d138c20, + // Block 0xe95, offset 0x3a540 + 0x3a540: 0x6d138e20, 0x3a541: 0x6d139020, 0x3a542: 0x6d415a20, 0x3a543: 0x6d415c20, + 0x3a544: 0x6d415e20, 0x3a545: 0x6d416020, 0x3a546: 0x6d416220, 0x3a547: 0x6d416420, + 0x3a548: 0x6d416620, 0x3a549: 0x6d416820, 0x3a54a: 0x6d416a20, 0x3a54b: 0x6d416c20, + 0x3a54c: 0x6d416e20, 0x3a54d: 0x6d417020, 0x3a54e: 0x6d417220, 0x3a54f: 0x6d417420, + 0x3a550: 0x6d417620, 0x3a551: 0x6d417820, 0x3a552: 0x6d417a20, 0x3a553: 0x6d417c20, + 0x3a554: 0x6d417e20, 0x3a555: 0x6d418020, 0x3a556: 0x6d418220, 0x3a557: 0x6d418420, + 0x3a558: 0x6d418620, 0x3a559: 0x6d418820, 0x3a55a: 0x6d418a20, 0x3a55b: 0x6d418c20, + 0x3a55c: 0x6d418e20, 0x3a55d: 0x6d419020, 0x3a55e: 0x6d377020, 0x3a55f: 0x6d419220, + 0x3a560: 0x6d419420, 0x3a561: 0x6d419620, 0x3a562: 0x6d419820, 0x3a563: 0x6d419a20, + 0x3a564: 0x6d419c20, 0x3a565: 0x6d419e20, 0x3a566: 0x6d41a020, 0x3a567: 0x6d41a220, + 0x3a568: 0x6d41a420, 0x3a569: 0x6d41a620, 0x3a56a: 0x6d41a820, 0x3a56b: 0x6d41aa20, + 0x3a56c: 0x6d6e4a20, 0x3a56d: 0x6d6e4c20, 0x3a56e: 0x6d6e4e20, 0x3a56f: 0x6d6e5020, + 0x3a570: 0x6d6e5220, 0x3a571: 0x6d6e5420, 0x3a572: 0x6d6e5620, 0x3a573: 0x6d6e5820, + 0x3a574: 0x6d6e5a20, 0x3a575: 0x6d6e5c20, 0x3a576: 0x6d6e5e20, 0x3a577: 0x6d6e6020, + 0x3a578: 0x6d6e6220, 0x3a579: 0x6d6e6420, 0x3a57a: 0x6d6e6620, 0x3a57b: 0x6d6e6820, + 0x3a57c: 0x6d6e6a20, 0x3a57d: 0x6d6e6c20, 0x3a57e: 0x6d6e6e20, 0x3a57f: 0x6d6e7020, + // Block 0xe96, offset 0x3a580 + 0x3a580: 0x6d6e7220, 0x3a581: 0x6d6e7420, 0x3a582: 0x6d6e7620, 0x3a583: 0x6d6e7820, + 0x3a584: 0x6d6e7a20, 0x3a585: 0x6d6e7c20, 0x3a586: 0x6d6e7e20, 0x3a587: 0x6d6e8020, + 0x3a588: 0x6d6e8220, 0x3a589: 0x6d6e8420, 0x3a58a: 0x6d6e8620, 0x3a58b: 0x6d6e8820, + 0x3a58c: 0x6d6e8a20, 0x3a58d: 0x6d6e8c20, 0x3a58e: 0x6d6e8e20, 0x3a58f: 0x6d6e9020, + 0x3a590: 0x6d6e9220, 0x3a591: 0x6d6e9420, 0x3a592: 0x6d6e9620, 0x3a593: 0x6d6e9820, + 0x3a594: 0x6d6e9a20, 0x3a595: 0x6d6e9c20, 0x3a596: 0x6d6e9e20, 0x3a597: 0x6d6ea020, + 0x3a598: 0x6d6ea220, 0x3a599: 0x6d6ea420, 0x3a59a: 0x6d6ea620, 0x3a59b: 0x6d6ea820, + 0x3a59c: 0x6d6eaa20, 0x3a59d: 0x6d6eac20, 0x3a59e: 0x6d6eae20, 0x3a59f: 0x6d6eb020, + 0x3a5a0: 0x6d6eb220, 0x3a5a1: 0x6d6eb420, 0x3a5a2: 0x6d6eb620, 0x3a5a3: 0x6d6eb820, + 0x3a5a4: 0x6d6eba20, 0x3a5a5: 0x6d6ebc20, 0x3a5a6: 0x6d974620, 0x3a5a7: 0x6d974820, + 0x3a5a8: 0x6d974a20, 0x3a5a9: 0x6d974c20, 0x3a5aa: 0x6d974e20, 0x3a5ab: 0x6d975020, + 0x3a5ac: 0x6d975220, 0x3a5ad: 0x6d975420, 0x3a5ae: 0x6d975620, 0x3a5af: 0x6d975820, + 0x3a5b0: 0x6d975a20, 0x3a5b1: 0x6d975c20, 0x3a5b2: 0x6d975e20, 0x3a5b3: 0x6d976020, + 0x3a5b4: 0x6d976220, 0x3a5b5: 0x6d976420, 0x3a5b6: 0x6d976620, 0x3a5b7: 0x6d976820, + 0x3a5b8: 0x6d976a20, 0x3a5b9: 0x6d976c20, 0x3a5ba: 0x6d976e20, 0x3a5bb: 0x6d977020, + 0x3a5bc: 0x6d977220, 0x3a5bd: 0x6d977420, 0x3a5be: 0x6d977620, 0x3a5bf: 0x6d977820, + // Block 0xe97, offset 0x3a5c0 + 0x3a5c0: 0x6d977a20, 0x3a5c1: 0x6d977c20, 0x3a5c2: 0x6d977e20, 0x3a5c3: 0x6d978020, + 0x3a5c4: 0x6d978220, 0x3a5c5: 0x6d978420, 0x3a5c6: 0x6d978620, 0x3a5c7: 0x6d978820, + 0x3a5c8: 0x6d978a20, 0x3a5c9: 0x6d978c20, 0x3a5ca: 0x6d978e20, 0x3a5cb: 0x6d979020, + 0x3a5cc: 0x6d979220, 0x3a5cd: 0x6d979420, 0x3a5ce: 0x6d979620, 0x3a5cf: 0x6d979820, + 0x3a5d0: 0x6d979a20, 0x3a5d1: 0x6d979c20, 0x3a5d2: 0x6d979e20, 0x3a5d3: 0x6d97a020, + 0x3a5d4: 0x6d97a220, 0x3a5d5: 0x6d97a420, 0x3a5d6: 0x6d97a620, 0x3a5d7: 0x6d97a820, + 0x3a5d8: 0x6d97aa20, 0x3a5d9: 0x6d97ac20, 0x3a5da: 0x6d97ae20, 0x3a5db: 0x6d97b020, + 0x3a5dc: 0x6d97b220, 0x3a5dd: 0x6d97b420, 0x3a5de: 0x6d97b620, 0x3a5df: 0x6d97b820, + 0x3a5e0: 0x6d97ba20, 0x3a5e1: 0x6d97bc20, 0x3a5e2: 0x6d97be20, 0x3a5e3: 0x6d97c020, + 0x3a5e4: 0x6d97c220, 0x3a5e5: 0x6d97c420, 0x3a5e6: 0x6d97c620, 0x3a5e7: 0x6d97c820, + 0x3a5e8: 0x6d97ca20, 0x3a5e9: 0x6d97cc20, 0x3a5ea: 0x6d97ce20, 0x3a5eb: 0x6d97d020, + 0x3a5ec: 0x6d97d220, 0x3a5ed: 0x6d97d420, 0x3a5ee: 0x6d97d620, 0x3a5ef: 0x6dba2c20, + 0x3a5f0: 0x6dba2e20, 0x3a5f1: 0x6dba3020, 0x3a5f2: 0x6dba3220, 0x3a5f3: 0x6dba3420, + 0x3a5f4: 0x6dba3620, 0x3a5f5: 0x6dba3820, 0x3a5f6: 0x6dba3a20, 0x3a5f7: 0x6dba3c20, + 0x3a5f8: 0x6dba3e20, 0x3a5f9: 0x6dba4020, 0x3a5fa: 0x6dba4220, 0x3a5fb: 0x6dba4420, + 0x3a5fc: 0x6dba4620, 0x3a5fd: 0x6dba4820, 0x3a5fe: 0x6dba4a20, 0x3a5ff: 0x6dba4c20, + // Block 0xe98, offset 0x3a600 + 0x3a600: 0x6dba4e20, 0x3a601: 0x6dba5020, 0x3a602: 0x6dba5220, 0x3a603: 0x6dba5420, + 0x3a604: 0x6dba5620, 0x3a605: 0x6dba5820, 0x3a606: 0x6dba5a20, 0x3a607: 0x6dba5c20, + 0x3a608: 0x6dba5e20, 0x3a609: 0x6dba6020, 0x3a60a: 0x6dba6220, 0x3a60b: 0x6dba6420, + 0x3a60c: 0x6dba6620, 0x3a60d: 0x6dba6820, 0x3a60e: 0x6dba6a20, 0x3a60f: 0x6dba6c20, + 0x3a610: 0x6dba6e20, 0x3a611: 0x6dba7020, 0x3a612: 0x6dba7220, 0x3a613: 0x6dba7420, + 0x3a614: 0x6dba7620, 0x3a615: 0x6dba7820, 0x3a616: 0x6dba7a20, 0x3a617: 0x6dba7c20, + 0x3a618: 0x6dba7e20, 0x3a619: 0x6dba8020, 0x3a61a: 0x6dba8220, 0x3a61b: 0x6dba8420, + 0x3a61c: 0x6dba8620, 0x3a61d: 0x6dba8820, 0x3a61e: 0x6dba8a20, 0x3a61f: 0x6dba8c20, + 0x3a620: 0x6dba8e20, 0x3a621: 0x6dba9020, 0x3a622: 0x6dba9220, 0x3a623: 0x6dba9420, + 0x3a624: 0x6dba9620, 0x3a625: 0x6dba9820, 0x3a626: 0x6dba9a20, 0x3a627: 0x6dba9c20, + 0x3a628: 0x6dba9e20, 0x3a629: 0x6dbaa020, 0x3a62a: 0x6dbaa220, 0x3a62b: 0x6dbaa420, + 0x3a62c: 0x6dbaa620, 0x3a62d: 0x6dbaa820, 0x3a62e: 0x6dbaaa20, 0x3a62f: 0x6dbaac20, + 0x3a630: 0x6dbaae20, 0x3a631: 0x6dbab020, 0x3a632: 0x6dbab220, 0x3a633: 0x6dbab420, + 0x3a634: 0x6dbab620, 0x3a635: 0x6dbab820, 0x3a636: 0x6dbaba20, 0x3a637: 0x6dbabc20, + 0x3a638: 0x6dbabe20, 0x3a639: 0x6dbac020, 0x3a63a: 0x6dbac220, 0x3a63b: 0x6dbac420, + 0x3a63c: 0x6dbac620, 0x3a63d: 0x6dbac820, 0x3a63e: 0x6dbaca20, 0x3a63f: 0x6dbacc20, + // Block 0xe99, offset 0x3a640 + 0x3a640: 0x6dbace20, 0x3a641: 0x6dbad020, 0x3a642: 0x6dbad220, 0x3a643: 0x6dbad420, + 0x3a644: 0x6dbad620, 0x3a645: 0x6dbad820, 0x3a646: 0x6dbada20, 0x3a647: 0x6dd85a20, + 0x3a648: 0x6dd85c20, 0x3a649: 0x6dd85e20, 0x3a64a: 0x6dd86020, 0x3a64b: 0x6dd86220, + 0x3a64c: 0x6dd86420, 0x3a64d: 0x6dd86620, 0x3a64e: 0x6dd86820, 0x3a64f: 0x6dd86a20, + 0x3a650: 0x6dd86c20, 0x3a651: 0x6dd86e20, 0x3a652: 0x6dd87020, 0x3a653: 0x6dd87220, + 0x3a654: 0x6dd87420, 0x3a655: 0x6dd87620, 0x3a656: 0x6dd87820, 0x3a657: 0x6dd87a20, + 0x3a658: 0x6dd87c20, 0x3a659: 0x6dd87e20, 0x3a65a: 0x6dd88020, 0x3a65b: 0x6dd88220, + 0x3a65c: 0x6dd88420, 0x3a65d: 0x6dd88620, 0x3a65e: 0x6dd88820, 0x3a65f: 0x6dd88a20, + 0x3a660: 0x6dd88c20, 0x3a661: 0x6dd88e20, 0x3a662: 0x6dd89020, 0x3a663: 0x6dd89220, + 0x3a664: 0x6dd89420, 0x3a665: 0x6dd89620, 0x3a666: 0x6dd89820, 0x3a667: 0x6dd89a20, + 0x3a668: 0x6dd89c20, 0x3a669: 0x6dd89e20, 0x3a66a: 0x6dd8a020, 0x3a66b: 0x6dd8a220, + 0x3a66c: 0x6dd8a420, 0x3a66d: 0x6dd8a620, 0x3a66e: 0x6dd8a820, 0x3a66f: 0x6dd8aa20, + 0x3a670: 0x6dd8ac20, 0x3a671: 0x6dd8ae20, 0x3a672: 0x6dd8b020, 0x3a673: 0x6dd8b220, + 0x3a674: 0x6dd8b420, 0x3a675: 0x6dd8b620, 0x3a676: 0x6dd8b820, 0x3a677: 0x6dd8ba20, + 0x3a678: 0x6dd8bc20, 0x3a679: 0x6dd8be20, 0x3a67a: 0x6dd8c020, 0x3a67b: 0x6dd8c220, + 0x3a67c: 0x6dd8c420, 0x3a67d: 0x6dd8c620, 0x3a67e: 0x6dd8c820, 0x3a67f: 0x6dd8ca20, + // Block 0xe9a, offset 0x3a680 + 0x3a680: 0x6dd8cc20, 0x3a681: 0x6dd8ce20, 0x3a682: 0x6dd8d020, 0x3a683: 0x6dd8d220, + 0x3a684: 0x6dd8d420, 0x3a685: 0x6dd8d620, 0x3a686: 0x6dd8d820, 0x3a687: 0x6dd8da20, + 0x3a688: 0x6dd8dc20, 0x3a689: 0x6dd8de20, 0x3a68a: 0x6dd8e020, 0x3a68b: 0x6dd8e220, + 0x3a68c: 0x6dd8e420, 0x3a68d: 0x6dd8e620, 0x3a68e: 0x6dd8e820, 0x3a68f: 0x6df0d820, + 0x3a690: 0x6df0da20, 0x3a691: 0x6df0dc20, 0x3a692: 0x6df0de20, 0x3a693: 0x6df0e020, + 0x3a694: 0x6df0e220, 0x3a695: 0x6df0e420, 0x3a696: 0x6df0e620, 0x3a697: 0x6df0e820, + 0x3a698: 0x6df0ea20, 0x3a699: 0x6df0ec20, 0x3a69a: 0x6df0ee20, 0x3a69b: 0x6df0f020, + 0x3a69c: 0x6df0f220, 0x3a69d: 0x6df0f420, 0x3a69e: 0x6df0f620, 0x3a69f: 0x6df0f820, + 0x3a6a0: 0x6df0fa20, 0x3a6a1: 0x6df0fc20, 0x3a6a2: 0x6df0fe20, 0x3a6a3: 0x6df10020, + 0x3a6a4: 0x6df10220, 0x3a6a5: 0x6df10420, 0x3a6a6: 0x6df10620, 0x3a6a7: 0x6df10820, + 0x3a6a8: 0x6df10a20, 0x3a6a9: 0x6df10c20, 0x3a6aa: 0x6df10e20, 0x3a6ab: 0x6df11020, + 0x3a6ac: 0x6df11220, 0x3a6ad: 0x6df11420, 0x3a6ae: 0x6df11620, 0x3a6af: 0x6df11820, + 0x3a6b0: 0x6df11a20, 0x3a6b1: 0x6df11c20, 0x3a6b2: 0x6df11e20, 0x3a6b3: 0x6df12020, + 0x3a6b4: 0x6df12220, 0x3a6b5: 0x6df12420, 0x3a6b6: 0x6df12620, 0x3a6b7: 0x6df12820, + 0x3a6b8: 0x6df12a20, 0x3a6b9: 0x6df12c20, 0x3a6ba: 0x6df12e20, 0x3a6bb: 0x6df13020, + 0x3a6bc: 0x6df13220, 0x3a6bd: 0x6df13420, 0x3a6be: 0x6df13620, 0x3a6bf: 0x6df13820, + // Block 0xe9b, offset 0x3a6c0 + 0x3a6c0: 0x6df13a20, 0x3a6c1: 0x6df13c20, 0x3a6c2: 0x6df13e20, 0x3a6c3: 0x6df14020, + 0x3a6c4: 0x6df14220, 0x3a6c5: 0x6df14420, 0x3a6c6: 0x6df14620, 0x3a6c7: 0x6df14820, + 0x3a6c8: 0x6df14a20, 0x3a6c9: 0x6df14c20, 0x3a6ca: 0x6df14e20, 0x3a6cb: 0x6df15020, + 0x3a6cc: 0x6df15220, 0x3a6cd: 0x6e04e420, 0x3a6ce: 0x6e04e620, 0x3a6cf: 0x6e04e820, + 0x3a6d0: 0x6e04ea20, 0x3a6d1: 0x6e04ec20, 0x3a6d2: 0x6e04ee20, 0x3a6d3: 0x6e04f020, + 0x3a6d4: 0x6e04f220, 0x3a6d5: 0x6e15c420, 0x3a6d6: 0x6e04f420, 0x3a6d7: 0x6e04f620, + 0x3a6d8: 0x6e04f820, 0x3a6d9: 0x6e04fa20, 0x3a6da: 0x6e04fc20, 0x3a6db: 0x6e04fe20, + 0x3a6dc: 0x6e050020, 0x3a6dd: 0x6e050220, 0x3a6de: 0x6e050420, 0x3a6df: 0x6e050620, + 0x3a6e0: 0x6e050820, 0x3a6e1: 0x6e050a20, 0x3a6e2: 0x6e050c20, 0x3a6e3: 0x6e050e20, + 0x3a6e4: 0x6e051020, 0x3a6e5: 0x6e051220, 0x3a6e6: 0x6e051420, 0x3a6e7: 0x6e051620, + 0x3a6e8: 0x6e051820, 0x3a6e9: 0x6e051a20, 0x3a6ea: 0x6e051c20, 0x3a6eb: 0x6e051e20, + 0x3a6ec: 0x6e052020, 0x3a6ed: 0x6e052220, 0x3a6ee: 0x6e052420, 0x3a6ef: 0x6e052620, + 0x3a6f0: 0x6e052820, 0x3a6f1: 0x6e052a20, 0x3a6f2: 0x6e052c20, 0x3a6f3: 0x6e052e20, + 0x3a6f4: 0x6e053020, 0x3a6f5: 0x6e053220, 0x3a6f6: 0x6e053420, 0x3a6f7: 0x6e053620, + 0x3a6f8: 0x6e053820, 0x3a6f9: 0x6e053a20, 0x3a6fa: 0x6e053c20, 0x3a6fb: 0x6e053e20, + 0x3a6fc: 0x6e054020, 0x3a6fd: 0x6e054220, 0x3a6fe: 0x6e054420, 0x3a6ff: 0x6e054620, + // Block 0xe9c, offset 0x3a700 + 0x3a700: 0x6e054820, 0x3a701: 0x6e054a20, 0x3a702: 0x6e054c20, 0x3a703: 0x6e054e20, + 0x3a704: 0x6e055020, 0x3a705: 0x6e055220, 0x3a706: 0x6e055420, 0x3a707: 0x6e055620, + 0x3a708: 0x6e055820, 0x3a709: 0x6e055a20, 0x3a70a: 0x6e055c20, 0x3a70b: 0x6e055e20, + 0x3a70c: 0x6e056020, 0x3a70d: 0x6e056220, 0x3a70e: 0x6e056420, 0x3a70f: 0x6e056620, + 0x3a710: 0x6e056820, 0x3a711: 0x6e056a20, 0x3a712: 0x6e056c20, 0x3a713: 0x6e056e20, + 0x3a714: 0x6e057020, 0x3a715: 0x6e15c620, 0x3a716: 0x6e15c820, 0x3a717: 0x6e15ca20, + 0x3a718: 0x6e15cc20, 0x3a719: 0x6e15ce20, 0x3a71a: 0x6e15d020, 0x3a71b: 0x6e15d220, + 0x3a71c: 0x6e15d420, 0x3a71d: 0x6e15d620, 0x3a71e: 0x6e15d820, 0x3a71f: 0x6e15da20, + 0x3a720: 0x6e15dc20, 0x3a721: 0x6e15de20, 0x3a722: 0x6e15e020, 0x3a723: 0x6e15e220, + 0x3a724: 0x6e15e420, 0x3a725: 0x6e15e620, 0x3a726: 0x6e15e820, 0x3a727: 0x6e15ea20, + 0x3a728: 0x6e15ec20, 0x3a729: 0x6e15ee20, 0x3a72a: 0x6e15f020, 0x3a72b: 0x6e15f220, + 0x3a72c: 0x6e15f420, 0x3a72d: 0x6e15f620, 0x3a72e: 0x6e15f820, 0x3a72f: 0x6e15fa20, + 0x3a730: 0x6e15fc20, 0x3a731: 0x6e15fe20, 0x3a732: 0x6e160020, 0x3a733: 0x6e160220, + 0x3a734: 0x6e160420, 0x3a735: 0x6e160620, 0x3a736: 0x6e160820, 0x3a737: 0x6e160a20, + 0x3a738: 0x6e160c20, 0x3a739: 0x6e160e20, 0x3a73a: 0x6e161020, 0x3a73b: 0x6e161220, + 0x3a73c: 0x6e161420, 0x3a73d: 0x6e161620, 0x3a73e: 0x6e161820, 0x3a73f: 0x6e161a20, + // Block 0xe9d, offset 0x3a740 + 0x3a740: 0x6e161c20, 0x3a741: 0x6e161e20, 0x3a742: 0x6e162020, 0x3a743: 0x6e162220, + 0x3a744: 0x6e162420, 0x3a745: 0x6e162620, 0x3a746: 0x6e162820, 0x3a747: 0x6e162a20, + 0x3a748: 0x6e162c20, 0x3a749: 0x6e162e20, 0x3a74a: 0x6e163020, 0x3a74b: 0x6e163220, + 0x3a74c: 0x6e163420, 0x3a74d: 0x6e163620, 0x3a74e: 0x6e163820, 0x3a74f: 0x6e163a20, + 0x3a750: 0x6e163c20, 0x3a751: 0x6e163e20, 0x3a752: 0x6e233e20, 0x3a753: 0x6e234020, + 0x3a754: 0x6e234220, 0x3a755: 0x6e234420, 0x3a756: 0x6e234620, 0x3a757: 0x6e234820, + 0x3a758: 0x6e234a20, 0x3a759: 0x6e234c20, 0x3a75a: 0x6e234e20, 0x3a75b: 0x6e235020, + 0x3a75c: 0x6e235220, 0x3a75d: 0x6e235420, 0x3a75e: 0x6e235620, 0x3a75f: 0x6e235820, + 0x3a760: 0x6e235a20, 0x3a761: 0x6e235c20, 0x3a762: 0x6e235e20, 0x3a763: 0x6e236020, + 0x3a764: 0x6e236220, 0x3a765: 0x6e236420, 0x3a766: 0x6e236620, 0x3a767: 0x6e236820, + 0x3a768: 0x6e236a20, 0x3a769: 0x6e236c20, 0x3a76a: 0x6e236e20, 0x3a76b: 0x6e237020, + 0x3a76c: 0x6e237220, 0x3a76d: 0x6e237420, 0x3a76e: 0x6e237620, 0x3a76f: 0x6e237820, + 0x3a770: 0x6e237a20, 0x3a771: 0x6e237c20, 0x3a772: 0x6e237e20, 0x3a773: 0x6e238020, + 0x3a774: 0x6e238220, 0x3a775: 0x6e238420, 0x3a776: 0x6e238620, 0x3a777: 0x6e238820, + 0x3a778: 0x6e2d6a20, 0x3a779: 0x6e2d6c20, 0x3a77a: 0x6e2d6e20, 0x3a77b: 0x6e2d7020, + 0x3a77c: 0x6e2d7220, 0x3a77d: 0x6e2d7420, 0x3a77e: 0x6e2d7620, 0x3a77f: 0x6e2d7820, + // Block 0xe9e, offset 0x3a780 + 0x3a780: 0x6e2d7a20, 0x3a781: 0x6e2d7c20, 0x3a782: 0x6e2d7e20, 0x3a783: 0x6e2d8020, + 0x3a784: 0x6e2d8220, 0x3a785: 0x6e2d8420, 0x3a786: 0x6e2d8620, 0x3a787: 0x6e2d8820, + 0x3a788: 0x6e2d8a20, 0x3a789: 0x6e2d8c20, 0x3a78a: 0x6e2d8e20, 0x3a78b: 0x6e2d9020, + 0x3a78c: 0x6e2d9220, 0x3a78d: 0x6e2d9420, 0x3a78e: 0x6e2d9620, 0x3a78f: 0x6e2d9820, + 0x3a790: 0x6e2d9a20, 0x3a791: 0x6e2d9c20, 0x3a792: 0x6e2d9e20, 0x3a793: 0x6e2da020, + 0x3a794: 0x6e2da220, 0x3a795: 0x6e2da420, 0x3a796: 0x6e2da620, 0x3a797: 0x6e2da820, + 0x3a798: 0x6e2daa20, 0x3a799: 0x6e2dac20, 0x3a79a: 0x6e2dae20, 0x3a79b: 0x6e2db020, + 0x3a79c: 0x6e2db220, 0x3a79d: 0x6e352620, 0x3a79e: 0x6e352820, 0x3a79f: 0x6e352a20, + 0x3a7a0: 0x6e352c20, 0x3a7a1: 0x6e352e20, 0x3a7a2: 0x6e353020, 0x3a7a3: 0x6e353220, + 0x3a7a4: 0x6e353420, 0x3a7a5: 0x6e353620, 0x3a7a6: 0x6e353820, 0x3a7a7: 0x6e353a20, + 0x3a7a8: 0x6e353c20, 0x3a7a9: 0x6e353e20, 0x3a7aa: 0x6e354020, 0x3a7ab: 0x6e354220, + 0x3a7ac: 0x6e354420, 0x3a7ad: 0x6e354620, 0x3a7ae: 0x6e354820, 0x3a7af: 0x6e354a20, + 0x3a7b0: 0x6e354c20, 0x3a7b1: 0x6e354e20, 0x3a7b2: 0x6e355020, 0x3a7b3: 0x6e355220, + 0x3a7b4: 0x6e355420, 0x3a7b5: 0x6e355620, 0x3a7b6: 0x6e355820, 0x3a7b7: 0x6e355a20, + 0x3a7b8: 0x6e355c20, 0x3a7b9: 0x6e355e20, 0x3a7ba: 0x6e3ac220, 0x3a7bb: 0x6e3ac420, + 0x3a7bc: 0x6e3ac620, 0x3a7bd: 0x6e3ac820, 0x3a7be: 0x6e3aca20, 0x3a7bf: 0x6e3acc20, + // Block 0xe9f, offset 0x3a7c0 + 0x3a7c0: 0x6e3ace20, 0x3a7c1: 0x6e3ad020, 0x3a7c2: 0x6e3ad220, 0x3a7c3: 0x6e3ad420, + 0x3a7c4: 0x6e3ad620, 0x3a7c5: 0x6e3ad820, 0x3a7c6: 0x6e3ada20, 0x3a7c7: 0x6e3adc20, + 0x3a7c8: 0x6e3ade20, 0x3a7c9: 0x6e3e8420, 0x3a7ca: 0x6e3e8620, 0x3a7cb: 0x6e3e8820, + 0x3a7cc: 0x6e3e8a20, 0x3a7cd: 0x6e3e8c20, 0x3a7ce: 0x6e3e8e20, 0x3a7cf: 0x6e3e9020, + 0x3a7d0: 0x6e3e9220, 0x3a7d1: 0x6e3e9420, 0x3a7d2: 0x6e3e9620, 0x3a7d3: 0x6e3e9820, + 0x3a7d4: 0x6e3e9a20, 0x3a7d5: 0x6e3e9c20, 0x3a7d6: 0x6e3e9e20, 0x3a7d7: 0x6e3ea020, + 0x3a7d8: 0x6e3ea220, 0x3a7d9: 0x6e3ea420, 0x3a7da: 0x6e3ea620, 0x3a7db: 0x6e3ea820, + 0x3a7dc: 0x6e3eaa20, 0x3a7dd: 0x6e3eac20, 0x3a7de: 0x6e414820, 0x3a7df: 0x6e414a20, + 0x3a7e0: 0x6e414c20, 0x3a7e1: 0x6e414e20, 0x3a7e2: 0x6e415020, 0x3a7e3: 0x6e415220, + 0x3a7e4: 0x6e415420, 0x3a7e5: 0x6e415620, 0x3a7e6: 0x6e415820, 0x3a7e7: 0x6e415a20, + 0x3a7e8: 0x6e415c20, 0x3a7e9: 0x6e434820, 0x3a7ea: 0x6e434a20, 0x3a7eb: 0x6e434c20, + 0x3a7ec: 0x6e434e20, 0x3a7ed: 0x6e435020, 0x3a7ee: 0x6e435220, 0x3a7ef: 0x6e435420, + 0x3a7f0: 0x6e435620, 0x3a7f1: 0x6e3ae020, 0x3a7f2: 0x6e449820, 0x3a7f3: 0x6e449a20, + 0x3a7f4: 0x6e449c20, 0x3a7f5: 0x6e449e20, 0x3a7f6: 0x6e44a020, 0x3a7f7: 0x6e456820, + 0x3a7f8: 0x6e456a20, 0x3a7f9: 0x6e456c20, 0x3a7fa: 0x6e45e620, 0x3a7fb: 0x6e464020, + 0x3a7fc: 0x6e46d020, 0x3a7fd: 0x6e471620, 0x3a7fe: 0x6c41f620, 0x3a7ff: 0x6c41f820, + // Block 0xea0, offset 0x3a800 + 0x3a800: 0x6c629620, 0x3a801: 0x6c629820, 0x3a802: 0x6c629a20, 0x3a803: 0x6c897220, + 0x3a804: 0x6c897420, 0x3a805: 0x6c897620, 0x3a806: 0x6c897820, 0x3a807: 0x6ce56620, + 0x3a808: 0x6ce56820, 0x3a809: 0x6d13dc20, 0x3a80a: 0x6d13de20, 0x3a80b: 0x6d13e020, + 0x3a80c: 0x6d13e220, 0x3a80d: 0x6d6ef220, 0x3a80e: 0x6d41ec20, 0x3a80f: 0x6d6ef420, + 0x3a810: 0x6d980420, 0x3a811: 0x6dbb0620, 0x3a812: 0x6d980620, 0x3a813: 0x6dbb0820, + 0x3a814: 0x6dbb0a20, 0x3a815: 0x6dd90820, 0x3a816: 0x6dd90a20, 0x3a817: 0x6c280020, + 0x3a818: 0x6c280220, 0x3a819: 0x6c62aa20, 0x3a81a: 0x6cb58e20, 0x3a81b: 0x6cb59020, + 0x3a81c: 0x6cb59220, 0x3a81d: 0x6cb59420, 0x3a81e: 0x6cb59620, 0x3a81f: 0x6cb59820, + 0x3a820: 0x6cb59a20, 0x3a821: 0x6cb59c20, 0x3a822: 0x6cb59e20, 0x3a823: 0x6cb5a020, + 0x3a824: 0x6cb5a220, 0x3a825: 0x6cb5a420, 0x3a826: 0x6ce57420, 0x3a827: 0x6ce57620, + 0x3a828: 0x6ce57820, 0x3a829: 0x6ce57a20, 0x3a82a: 0x6ce57c20, 0x3a82b: 0x6ce57e20, + 0x3a82c: 0x6ce58020, 0x3a82d: 0x6ce58220, 0x3a82e: 0x6ce58420, 0x3a82f: 0x6ce58620, + 0x3a830: 0x6ce58820, 0x3a831: 0x6ce58a20, 0x3a832: 0x6d13fa20, 0x3a833: 0x6d13fc20, + 0x3a834: 0x6d13fe20, 0x3a835: 0x6d140020, 0x3a836: 0x6d140220, 0x3a837: 0x6d140420, + 0x3a838: 0x6d140620, 0x3a839: 0x6d140820, 0x3a83a: 0x6d140a20, 0x3a83b: 0x6d140c20, + 0x3a83c: 0x6d140e20, 0x3a83d: 0x6d141020, 0x3a83e: 0x6d141220, 0x3a83f: 0x6d141420, + // Block 0xea1, offset 0x3a840 + 0x3a840: 0x6d41fe20, 0x3a841: 0x6d420020, 0x3a842: 0x6d420220, 0x3a843: 0x6d420420, + 0x3a844: 0x6d420620, 0x3a845: 0x6d420820, 0x3a846: 0x6d420a20, 0x3a847: 0x6d6f0220, + 0x3a848: 0x6d6f0420, 0x3a849: 0x6d6f0620, 0x3a84a: 0x6d6f0820, 0x3a84b: 0x6d6f0a20, + 0x3a84c: 0x6d6f0c20, 0x3a84d: 0x6d6f0e20, 0x3a84e: 0x6d6f1020, 0x3a84f: 0x6d6f1220, + 0x3a850: 0x6d6f1420, 0x3a851: 0x6d6f1620, 0x3a852: 0x6d6f1820, 0x3a853: 0x6d980e20, + 0x3a854: 0x6d981020, 0x3a855: 0x6d981220, 0x3a856: 0x6d981420, 0x3a857: 0x6d981620, + 0x3a858: 0x6d981820, 0x3a859: 0x6d981a20, 0x3a85a: 0x6d981c20, 0x3a85b: 0x6d981e20, + 0x3a85c: 0x6d982020, 0x3a85d: 0x6d982220, 0x3a85e: 0x6dbb1620, 0x3a85f: 0x6dbb1820, + 0x3a860: 0x6dbb1a20, 0x3a861: 0x6dbb1c20, 0x3a862: 0x6dbb1e20, 0x3a863: 0x6dbb2020, + 0x3a864: 0x6dbb2220, 0x3a865: 0x6dd91020, 0x3a866: 0x6dd91220, 0x3a867: 0x6dd91420, + 0x3a868: 0x6dd91620, 0x3a869: 0x6dd91820, 0x3a86a: 0x6dd91a20, 0x3a86b: 0x6dd91c20, + 0x3a86c: 0x6dd91e20, 0x3a86d: 0x6df16820, 0x3a86e: 0x6df16a20, 0x3a86f: 0x6df16c20, + 0x3a870: 0x6df16e20, 0x3a871: 0x6df17020, 0x3a872: 0x6df17220, 0x3a873: 0x6e059620, + 0x3a874: 0x6e059820, 0x3a875: 0x6e059a20, 0x3a876: 0x6e059c20, 0x3a877: 0x6e059e20, + 0x3a878: 0x6e165020, 0x3a879: 0x6e165220, 0x3a87a: 0x6e165420, 0x3a87b: 0x6e239a20, + 0x3a87c: 0x6e239c20, 0x3a87d: 0x6e239e20, 0x3a87e: 0x6e23a020, 0x3a87f: 0x6e23a220, + // Block 0xea2, offset 0x3a880 + 0x3a880: 0x6e2dba20, 0x3a881: 0x6e2dbc20, 0x3a882: 0x6e356820, 0x3a883: 0x6e356a20, + 0x3a884: 0x6e3eb020, 0x3a885: 0x6e435a20, 0x3a886: 0x6e44a220, 0x3a887: 0x6c420420, + 0x3a888: 0x6c420620, 0x3a889: 0x6c62b020, 0x3a88a: 0x6c898a20, 0x3a88b: 0x6c898c20, + 0x3a88c: 0x6c898e20, 0x3a88d: 0x6c899020, 0x3a88e: 0x6c899220, 0x3a88f: 0x6c899420, + 0x3a890: 0x6cb5b420, 0x3a891: 0x6cb5b620, 0x3a892: 0x6cb5b820, 0x3a893: 0x6cb5ba20, + 0x3a894: 0x6cb5bc20, 0x3a895: 0x6cb5be20, 0x3a896: 0x6cb5c020, 0x3a897: 0x6ce5ae20, + 0x3a898: 0x6ce5b020, 0x3a899: 0x6ce5b220, 0x3a89a: 0x6ce5b420, 0x3a89b: 0x6ce5b620, + 0x3a89c: 0x6ce5b820, 0x3a89d: 0x6ce5ba20, 0x3a89e: 0x6ce5bc20, 0x3a89f: 0x6ce5be20, + 0x3a8a0: 0x6ce5c020, 0x3a8a1: 0x6ce5c220, 0x3a8a2: 0x6ce5c420, 0x3a8a3: 0x6ce5c620, + 0x3a8a4: 0x6ce5c820, 0x3a8a5: 0x6ce5ca20, 0x3a8a6: 0x6ce5cc20, 0x3a8a7: 0x6ce5ce20, + 0x3a8a8: 0x6ce5d020, 0x3a8a9: 0x6ce5d220, 0x3a8aa: 0x6ce5d420, 0x3a8ab: 0x6ce5d620, + 0x3a8ac: 0x6ce5d820, 0x3a8ad: 0x6ce5da20, 0x3a8ae: 0x6ce5dc20, 0x3a8af: 0x6ce5de20, + 0x3a8b0: 0x6ce5e020, 0x3a8b1: 0x6ce5e220, 0x3a8b2: 0x6ce5e420, 0x3a8b3: 0x6d143020, + 0x3a8b4: 0x6d143220, 0x3a8b5: 0x6d143420, 0x3a8b6: 0x6d143620, 0x3a8b7: 0x6d143820, + 0x3a8b8: 0x6d143a20, 0x3a8b9: 0x6d143c20, 0x3a8ba: 0x6d143e20, 0x3a8bb: 0x6d144020, + 0x3a8bc: 0x6d144220, 0x3a8bd: 0x6d144420, 0x3a8be: 0x6d144620, 0x3a8bf: 0x6d144820, + // Block 0xea3, offset 0x3a8c0 + 0x3a8c0: 0x6d144a20, 0x3a8c1: 0x6d144c20, 0x3a8c2: 0x6d144e20, 0x3a8c3: 0x6d145020, + 0x3a8c4: 0x6d145220, 0x3a8c5: 0x6d145420, 0x3a8c6: 0x6d145620, 0x3a8c7: 0x6d145820, + 0x3a8c8: 0x6d145a20, 0x3a8c9: 0x6d145c20, 0x3a8ca: 0x6d145e20, 0x3a8cb: 0x6d146020, + 0x3a8cc: 0x6d146220, 0x3a8cd: 0x6d422e20, 0x3a8ce: 0x6d423020, 0x3a8cf: 0x6d423220, + 0x3a8d0: 0x6d423420, 0x3a8d1: 0x6d423620, 0x3a8d2: 0x6d423820, 0x3a8d3: 0x6d423a20, + 0x3a8d4: 0x6d423c20, 0x3a8d5: 0x6d423e20, 0x3a8d6: 0x6d424020, 0x3a8d7: 0x6d424220, + 0x3a8d8: 0x6d424420, 0x3a8d9: 0x6d424620, 0x3a8da: 0x6d424820, 0x3a8db: 0x6d424a20, + 0x3a8dc: 0x6d424c20, 0x3a8dd: 0x6d424e20, 0x3a8de: 0x6d425020, 0x3a8df: 0x6d425220, + 0x3a8e0: 0x6d425420, 0x3a8e1: 0x6d425620, 0x3a8e2: 0x6d425820, 0x3a8e3: 0x6d425a20, + 0x3a8e4: 0x6d425c20, 0x3a8e5: 0x6d425e20, 0x3a8e6: 0x6d426020, 0x3a8e7: 0x6d6f3820, + 0x3a8e8: 0x6d6f3a20, 0x3a8e9: 0x6d6f3c20, 0x3a8ea: 0x6d6f3e20, 0x3a8eb: 0x6d6f4020, + 0x3a8ec: 0x6d6f4220, 0x3a8ed: 0x6d6f4420, 0x3a8ee: 0x6d6f4620, 0x3a8ef: 0x6d6f4820, + 0x3a8f0: 0x6d6f4a20, 0x3a8f1: 0x6d6f4c20, 0x3a8f2: 0x6d6f4e20, 0x3a8f3: 0x6d6f5020, + 0x3a8f4: 0x6d6f5220, 0x3a8f5: 0x6d6f5420, 0x3a8f6: 0x6d6f5620, 0x3a8f7: 0x6d6f5820, + 0x3a8f8: 0x6d6f5a20, 0x3a8f9: 0x6d6f5c20, 0x3a8fa: 0x6d6f5e20, 0x3a8fb: 0x6d6f6020, + 0x3a8fc: 0x6d6f6220, 0x3a8fd: 0x6d6f6420, 0x3a8fe: 0x6d6f6620, 0x3a8ff: 0x6d6f6820, + // Block 0xea4, offset 0x3a900 + 0x3a900: 0x6d6f6a20, 0x3a901: 0x6d6f6c20, 0x3a902: 0x6d6f6e20, 0x3a903: 0x6d6f7020, + 0x3a904: 0x6d6f7220, 0x3a905: 0x6d6f7420, 0x3a906: 0x6d6f7620, 0x3a907: 0x6d6f7820, + 0x3a908: 0x6d984e20, 0x3a909: 0x6d985020, 0x3a90a: 0x6d985220, 0x3a90b: 0x6d985420, + 0x3a90c: 0x6d985620, 0x3a90d: 0x6d985820, 0x3a90e: 0x6d985a20, 0x3a90f: 0x6d985c20, + 0x3a910: 0x6d985e20, 0x3a911: 0x6d986020, 0x3a912: 0x6d986220, 0x3a913: 0x6d986420, + 0x3a914: 0x6d986620, 0x3a915: 0x6d986820, 0x3a916: 0x6d986a20, 0x3a917: 0x6d986c20, + 0x3a918: 0x6d986e20, 0x3a919: 0x6d987020, 0x3a91a: 0x6d987220, 0x3a91b: 0x6d987420, + 0x3a91c: 0x6d987620, 0x3a91d: 0x6d987820, 0x3a91e: 0x6d987a20, 0x3a91f: 0x6d987c20, + 0x3a920: 0x6d987e20, 0x3a921: 0x6d988020, 0x3a922: 0x6d988220, 0x3a923: 0x6d988420, + 0x3a924: 0x6d988620, 0x3a925: 0x6dbb4e20, 0x3a926: 0x6dbb5020, 0x3a927: 0x6dbb5220, + 0x3a928: 0x6dbb5420, 0x3a929: 0x6dbb5620, 0x3a92a: 0x6dbb5820, 0x3a92b: 0x6dbb5a20, + 0x3a92c: 0x6dbb5c20, 0x3a92d: 0x6dbb5e20, 0x3a92e: 0x6dbb6020, 0x3a92f: 0x6dbb6220, + 0x3a930: 0x6dbb6420, 0x3a931: 0x6dbb6620, 0x3a932: 0x6dbb6820, 0x3a933: 0x6dbb6a20, + 0x3a934: 0x6dbb6c20, 0x3a935: 0x6dbb6e20, 0x3a936: 0x6dbb7020, 0x3a937: 0x6dbb7220, + 0x3a938: 0x6dbb7420, 0x3a939: 0x6dbb7620, 0x3a93a: 0x6dbb7820, 0x3a93b: 0x6dbb7a20, + 0x3a93c: 0x6dbb7c20, 0x3a93d: 0x6dbb7e20, 0x3a93e: 0x6dbb8020, 0x3a93f: 0x6dbb8220, + // Block 0xea5, offset 0x3a940 + 0x3a940: 0x6dd93220, 0x3a941: 0x6dd93420, 0x3a942: 0x6dd93620, 0x3a943: 0x6dd93820, + 0x3a944: 0x6dd93a20, 0x3a945: 0x6dd93c20, 0x3a946: 0x6dd93e20, 0x3a947: 0x6dd94020, + 0x3a948: 0x6dd94220, 0x3a949: 0x6dd94420, 0x3a94a: 0x6dd94620, 0x3a94b: 0x6dd94820, + 0x3a94c: 0x6dd94a20, 0x3a94d: 0x6dd94c20, 0x3a94e: 0x6dd94e20, 0x3a94f: 0x6dd95020, + 0x3a950: 0x6dd95220, 0x3a951: 0x6dd95420, 0x3a952: 0x6dd95620, 0x3a953: 0x6dd95820, + 0x3a954: 0x6dd95a20, 0x3a955: 0x6dd95c20, 0x3a956: 0x6dd95e20, 0x3a957: 0x6dd96020, + 0x3a958: 0x6dd96220, 0x3a959: 0x6dd96420, 0x3a95a: 0x6dd96620, 0x3a95b: 0x6dd96820, + 0x3a95c: 0x6df18020, 0x3a95d: 0x6df18220, 0x3a95e: 0x6df18420, 0x3a95f: 0x6df18620, + 0x3a960: 0x6df18820, 0x3a961: 0x6df18a20, 0x3a962: 0x6df18c20, 0x3a963: 0x6df18e20, + 0x3a964: 0x6df19020, 0x3a965: 0x6df19220, 0x3a966: 0x6df19420, 0x3a967: 0x6df19620, + 0x3a968: 0x6df19820, 0x3a969: 0x6df19a20, 0x3a96a: 0x6df19c20, 0x3a96b: 0x6df19e20, + 0x3a96c: 0x6e05aa20, 0x3a96d: 0x6e05ac20, 0x3a96e: 0x6e05ae20, 0x3a96f: 0x6e05b020, + 0x3a970: 0x6e05b220, 0x3a971: 0x6e05b420, 0x3a972: 0x6e05b620, 0x3a973: 0x6e05b820, + 0x3a974: 0x6e05ba20, 0x3a975: 0x6e05bc20, 0x3a976: 0x6e05be20, 0x3a977: 0x6e05c020, + 0x3a978: 0x6e05c220, 0x3a979: 0x6e05c420, 0x3a97a: 0x6e05c620, 0x3a97b: 0x6e05c820, + 0x3a97c: 0x6e05ca20, 0x3a97d: 0x6e05cc20, 0x3a97e: 0x6e05ce20, 0x3a97f: 0x6e05d020, + // Block 0xea6, offset 0x3a980 + 0x3a980: 0x6e05d220, 0x3a981: 0x6e05d420, 0x3a982: 0x6e05d620, 0x3a983: 0x6e166620, + 0x3a984: 0x6e166820, 0x3a985: 0x6e166a20, 0x3a986: 0x6e166c20, 0x3a987: 0x6e166e20, + 0x3a988: 0x6e167020, 0x3a989: 0x6e167220, 0x3a98a: 0x6e167420, 0x3a98b: 0x6e167620, + 0x3a98c: 0x6e167820, 0x3a98d: 0x6e167a20, 0x3a98e: 0x6e167c20, 0x3a98f: 0x6e167e20, + 0x3a990: 0x6e168020, 0x3a991: 0x6e168220, 0x3a992: 0x6e168420, 0x3a993: 0x6e168620, + 0x3a994: 0x6e23a820, 0x3a995: 0x6e168820, 0x3a996: 0x6e168a20, 0x3a997: 0x6e168c20, + 0x3a998: 0x6e23aa20, 0x3a999: 0x6e23ac20, 0x3a99a: 0x6e23ae20, 0x3a99b: 0x6e23b020, + 0x3a99c: 0x6e23b220, 0x3a99d: 0x6e23b420, 0x3a99e: 0x6e23b620, 0x3a99f: 0x6e2dbe20, + 0x3a9a0: 0x6e2dc020, 0x3a9a1: 0x6e2dc220, 0x3a9a2: 0x6e2dc420, 0x3a9a3: 0x6e2dc620, + 0x3a9a4: 0x6e2dc820, 0x3a9a5: 0x6e2dca20, 0x3a9a6: 0x6e356c20, 0x3a9a7: 0x6e356e20, + 0x3a9a8: 0x6e357020, 0x3a9a9: 0x6e357220, 0x3a9aa: 0x6e357420, 0x3a9ab: 0x6e357620, + 0x3a9ac: 0x6e357820, 0x3a9ad: 0x6e357a20, 0x3a9ae: 0x6e357c20, 0x3a9af: 0x6e3ae820, + 0x3a9b0: 0x6e3aea20, 0x3a9b1: 0x6e3aec20, 0x3a9b2: 0x6e3aee20, 0x3a9b3: 0x6e3af020, + 0x3a9b4: 0x6e3af220, 0x3a9b5: 0x6e3af420, 0x3a9b6: 0x6e357e20, 0x3a9b7: 0x6e3eb220, + 0x3a9b8: 0x6e3af620, 0x3a9b9: 0x6e3eb420, 0x3a9ba: 0x6e3eb620, 0x3a9bb: 0x6e416020, + 0x3a9bc: 0x6e44a420, 0x3a9bd: 0x6e464220, 0x3a9be: 0x6e464420, 0x3a9bf: 0x6c159a20, + // Block 0xea7, offset 0x3a9c0 + 0x3a9c0: 0x6c159c20, 0x3a9c1: 0x6c159e20, 0x3a9c2: 0x6c281420, 0x3a9c3: 0x6c281620, + 0x3a9c4: 0x6c62c620, 0x3a9c5: 0x6c62c820, 0x3a9c6: 0x6ce5f420, 0x3a9c7: 0x6ce5f620, + 0x3a9c8: 0x6ce5f820, 0x3a9c9: 0x6d147620, 0x3a9ca: 0x6d147820, 0x3a9cb: 0x6d6f8420, + 0x3a9cc: 0x6d6f8620, 0x3a9cd: 0x6dbb8820, 0x3a9ce: 0x6e05d820, 0x3a9cf: 0x6c00d020, + 0x3a9d0: 0x6c052820, 0x3a9d1: 0x6c052a20, 0x3a9d2: 0x6c052c20, 0x3a9d3: 0x6c052e20, + 0x3a9d4: 0x6c053020, 0x3a9d5: 0x6c053220, 0x3a9d6: 0x6c0ab820, 0x3a9d7: 0x6c0aba20, + 0x3a9d8: 0x6c0abc20, 0x3a9d9: 0x6c0abe20, 0x3a9da: 0x6c15b020, 0x3a9db: 0x6c15b220, + 0x3a9dc: 0x6c15b420, 0x3a9dd: 0x6c15b620, 0x3a9de: 0x6c15b820, 0x3a9df: 0x6c15ba20, + 0x3a9e0: 0x6c15bc20, 0x3a9e1: 0x6c15be20, 0x3a9e2: 0x6c15c020, 0x3a9e3: 0x6c15c220, + 0x3a9e4: 0x6c15c420, 0x3a9e5: 0x6c15c620, 0x3a9e6: 0x6c15c820, 0x3a9e7: 0x6c15ca20, + 0x3a9e8: 0x6c15cc20, 0x3a9e9: 0x6c15ce20, 0x3a9ea: 0x6c284a20, 0x3a9eb: 0x6c284c20, + 0x3a9ec: 0x6c284e20, 0x3a9ed: 0x6c285020, 0x3a9ee: 0x6c285220, 0x3a9ef: 0x6c285420, + 0x3a9f0: 0x6c285620, 0x3a9f1: 0x6c285820, 0x3a9f2: 0x6c285a20, 0x3a9f3: 0x6c285c20, + 0x3a9f4: 0x6c285e20, 0x3a9f5: 0x6c286020, 0x3a9f6: 0x6c286220, 0x3a9f7: 0x6c286420, + 0x3a9f8: 0x6c286620, 0x3a9f9: 0x6c286820, 0x3a9fa: 0x6c286a20, 0x3a9fb: 0x6c286c20, + 0x3a9fc: 0x6c286e20, 0x3a9fd: 0x6c287020, 0x3a9fe: 0x6c287220, 0x3a9ff: 0x6c287420, + // Block 0xea8, offset 0x3aa00 + 0x3aa00: 0x6c287620, 0x3aa01: 0x6c423e20, 0x3aa02: 0x6c424020, 0x3aa03: 0x6c424220, + 0x3aa04: 0x6c424420, 0x3aa05: 0x6c424620, 0x3aa06: 0x6c424820, 0x3aa07: 0x6c424a20, + 0x3aa08: 0x6c424c20, 0x3aa09: 0x6c424e20, 0x3aa0a: 0x6c425020, 0x3aa0b: 0x6c425220, + 0x3aa0c: 0x6c425420, 0x3aa0d: 0x6c425620, 0x3aa0e: 0x6c425820, 0x3aa0f: 0x6c425a20, + 0x3aa10: 0x6c425c20, 0x3aa11: 0x6c425e20, 0x3aa12: 0x6c426020, 0x3aa13: 0x6c426220, + 0x3aa14: 0x6c426420, 0x3aa15: 0x6c426620, 0x3aa16: 0x6c426820, 0x3aa17: 0x6c426a20, + 0x3aa18: 0x6c62ee20, 0x3aa19: 0x6c62f020, 0x3aa1a: 0x6c62f220, 0x3aa1b: 0x6c62f420, + 0x3aa1c: 0x6c62f620, 0x3aa1d: 0x6c62f820, 0x3aa1e: 0x6c62fa20, 0x3aa1f: 0x6c62fc20, + 0x3aa20: 0x6c62fe20, 0x3aa21: 0x6c630020, 0x3aa22: 0x6c630220, 0x3aa23: 0x6c630420, + 0x3aa24: 0x6c630620, 0x3aa25: 0x6c630820, 0x3aa26: 0x6c630a20, 0x3aa27: 0x6c630c20, + 0x3aa28: 0x6c630e20, 0x3aa29: 0x6c631020, 0x3aa2a: 0x6c631220, 0x3aa2b: 0x6c631420, + 0x3aa2c: 0x6c631620, 0x3aa2d: 0x6c631820, 0x3aa2e: 0x6c631a20, 0x3aa2f: 0x6c631c20, + 0x3aa30: 0x6c631e20, 0x3aa31: 0x6c632020, 0x3aa32: 0x6c632220, 0x3aa33: 0x6c632420, + 0x3aa34: 0x6c6bf420, 0x3aa35: 0x6c89da20, 0x3aa36: 0x6c89dc20, 0x3aa37: 0x6c89de20, + 0x3aa38: 0x6c89e020, 0x3aa39: 0x6c89e220, 0x3aa3a: 0x6c89e420, 0x3aa3b: 0x6c89e620, + 0x3aa3c: 0x6c89e820, 0x3aa3d: 0x6c89ea20, 0x3aa3e: 0x6c89ec20, 0x3aa3f: 0x6c89ee20, + // Block 0xea9, offset 0x3aa40 + 0x3aa40: 0x6c89f020, 0x3aa41: 0x6c89f220, 0x3aa42: 0x6c89f420, 0x3aa43: 0x6c89f620, + 0x3aa44: 0x6c89f820, 0x3aa45: 0x6c89fa20, 0x3aa46: 0x6c89fc20, 0x3aa47: 0x6c89fe20, + 0x3aa48: 0x6c8a0020, 0x3aa49: 0x6c8a0220, 0x3aa4a: 0x6c8a0420, 0x3aa4b: 0x6c8a0620, + 0x3aa4c: 0x6c8a0820, 0x3aa4d: 0x6c8a0a20, 0x3aa4e: 0x6c8a0c20, 0x3aa4f: 0x6c8a0e20, + 0x3aa50: 0x6c8a1020, 0x3aa51: 0x6c8a1220, 0x3aa52: 0x6c8a1420, 0x3aa53: 0x6c8a1620, + 0x3aa54: 0x6c8a1820, 0x3aa55: 0x6c8a1a20, 0x3aa56: 0x6c8a1c20, 0x3aa57: 0x6c8a1e20, + 0x3aa58: 0x6c8a2020, 0x3aa59: 0x6c8a2220, 0x3aa5a: 0x6c8a2420, 0x3aa5b: 0x6c8a2620, + 0x3aa5c: 0x6c8a2820, 0x3aa5d: 0x6c8a2a20, 0x3aa5e: 0x6cb60a20, 0x3aa5f: 0x6cb60c20, + 0x3aa60: 0x6cb60e20, 0x3aa61: 0x6cb61020, 0x3aa62: 0x6cb61220, 0x3aa63: 0x6cb61420, + 0x3aa64: 0x6cb61620, 0x3aa65: 0x6cb61820, 0x3aa66: 0x6cb61a20, 0x3aa67: 0x6cb61c20, + 0x3aa68: 0x6cb61e20, 0x3aa69: 0x6cb62020, 0x3aa6a: 0x6cb62220, 0x3aa6b: 0x6cb62420, + 0x3aa6c: 0x6cb62620, 0x3aa6d: 0x6cb62820, 0x3aa6e: 0x6cb62a20, 0x3aa6f: 0x6cb62c20, + 0x3aa70: 0x6cb62e20, 0x3aa71: 0x6cb63020, 0x3aa72: 0x6cb63220, 0x3aa73: 0x6cb63420, + 0x3aa74: 0x6cb63620, 0x3aa75: 0x6cb63820, 0x3aa76: 0x6cb63a20, 0x3aa77: 0x6cb63c20, + 0x3aa78: 0x6cb63e20, 0x3aa79: 0x6cb64020, 0x3aa7a: 0x6cb64220, 0x3aa7b: 0x6cb64420, + 0x3aa7c: 0x6cb64620, 0x3aa7d: 0x6cb64820, 0x3aa7e: 0x6cb64a20, 0x3aa7f: 0x6cb64c20, + // Block 0xeaa, offset 0x3aa80 + 0x3aa80: 0x6ce62a20, 0x3aa81: 0x6ce62c20, 0x3aa82: 0x6ce62e20, 0x3aa83: 0x6ce63020, + 0x3aa84: 0x6ce63220, 0x3aa85: 0x6ce63420, 0x3aa86: 0x6ce63620, 0x3aa87: 0x6ce63820, + 0x3aa88: 0x6ce63a20, 0x3aa89: 0x6ce63c20, 0x3aa8a: 0x6ce63e20, 0x3aa8b: 0x6ce64020, + 0x3aa8c: 0x6ce64220, 0x3aa8d: 0x6ce64420, 0x3aa8e: 0x6ce64620, 0x3aa8f: 0x6ce64820, + 0x3aa90: 0x6ce64a20, 0x3aa91: 0x6ce64c20, 0x3aa92: 0x6ce64e20, 0x3aa93: 0x6ce65020, + 0x3aa94: 0x6ce65220, 0x3aa95: 0x6ce65420, 0x3aa96: 0x6ce65620, 0x3aa97: 0x6ce65820, + 0x3aa98: 0x6ce65a20, 0x3aa99: 0x6ce65c20, 0x3aa9a: 0x6ce65e20, 0x3aa9b: 0x6ce66020, + 0x3aa9c: 0x6ce66220, 0x3aa9d: 0x6ce66420, 0x3aa9e: 0x6ce66620, 0x3aa9f: 0x6ce66820, + 0x3aaa0: 0x6ce66a20, 0x3aaa1: 0x6ce66c20, 0x3aaa2: 0x6ce66e20, 0x3aaa3: 0x6ce67020, + 0x3aaa4: 0x6ce67220, 0x3aaa5: 0x6ce67420, 0x3aaa6: 0x6ce67620, 0x3aaa7: 0x6ce67820, + 0x3aaa8: 0x6ce67a20, 0x3aaa9: 0x6ce67c20, 0x3aaaa: 0x6ce67e20, 0x3aaab: 0x6ce68020, + 0x3aaac: 0x6ce68220, 0x3aaad: 0x6ce68420, 0x3aaae: 0x6d149e20, 0x3aaaf: 0x6d14a020, + 0x3aab0: 0x6d14a220, 0x3aab1: 0x6d14a420, 0x3aab2: 0x6d14a620, 0x3aab3: 0x6d14a820, + 0x3aab4: 0x6d14aa20, 0x3aab5: 0x6d14ac20, 0x3aab6: 0x6d14ae20, 0x3aab7: 0x6d14b020, + 0x3aab8: 0x6d14b220, 0x3aab9: 0x6d14b420, 0x3aaba: 0x6d14b620, 0x3aabb: 0x6d14b820, + 0x3aabc: 0x6d14ba20, 0x3aabd: 0x6d14bc20, 0x3aabe: 0x6d14be20, 0x3aabf: 0x6d14c020, + // Block 0xeab, offset 0x3aac0 + 0x3aac0: 0x6d14c220, 0x3aac1: 0x6d14c420, 0x3aac2: 0x6d14c620, 0x3aac3: 0x6d14c820, + 0x3aac4: 0x6d14ca20, 0x3aac5: 0x6d14cc20, 0x3aac6: 0x6d14ce20, 0x3aac7: 0x6d14d020, + 0x3aac8: 0x6d14d220, 0x3aac9: 0x6d14d420, 0x3aaca: 0x6d428420, 0x3aacb: 0x6d428620, + 0x3aacc: 0x6d428820, 0x3aacd: 0x6d428a20, 0x3aace: 0x6d428c20, 0x3aacf: 0x6d428e20, + 0x3aad0: 0x6d429020, 0x3aad1: 0x6d429220, 0x3aad2: 0x6d429420, 0x3aad3: 0x6d429620, + 0x3aad4: 0x6d429820, 0x3aad5: 0x6d429a20, 0x3aad6: 0x6d429c20, 0x3aad7: 0x6d429e20, + 0x3aad8: 0x6d42a020, 0x3aad9: 0x6d42a220, 0x3aada: 0x6d42a420, 0x3aadb: 0x6d42a620, + 0x3aadc: 0x6d42a820, 0x3aadd: 0x6d42aa20, 0x3aade: 0x6d42ac20, 0x3aadf: 0x6d42ae20, + 0x3aae0: 0x6d42b020, 0x3aae1: 0x6d42b220, 0x3aae2: 0x6d42b420, 0x3aae3: 0x6d42b620, + 0x3aae4: 0x6d42b820, 0x3aae5: 0x6d42ba20, 0x3aae6: 0x6d42bc20, 0x3aae7: 0x6d42be20, + 0x3aae8: 0x6d42c020, 0x3aae9: 0x6d42c220, 0x3aaea: 0x6d6f9820, 0x3aaeb: 0x6d6f9a20, + 0x3aaec: 0x6d6f9c20, 0x3aaed: 0x6d6f9e20, 0x3aaee: 0x6d6fa020, 0x3aaef: 0x6d6fa220, + 0x3aaf0: 0x6d6fa420, 0x3aaf1: 0x6d6fa620, 0x3aaf2: 0x6d6fa820, 0x3aaf3: 0x6d6faa20, + 0x3aaf4: 0x6d6fac20, 0x3aaf5: 0x6d6fae20, 0x3aaf6: 0x6d6fb020, 0x3aaf7: 0x6d6fb220, + 0x3aaf8: 0x6d6fb420, 0x3aaf9: 0x6d6fb620, 0x3aafa: 0x6d6fb820, 0x3aafb: 0x6d6fba20, + 0x3aafc: 0x6d6fbc20, 0x3aafd: 0x6d6fbe20, 0x3aafe: 0x6d6fc020, 0x3aaff: 0x6d98a420, + // Block 0xeac, offset 0x3ab00 + 0x3ab00: 0x6d98a620, 0x3ab01: 0x6d98a820, 0x3ab02: 0x6d98aa20, 0x3ab03: 0x6d98ac20, + 0x3ab04: 0x6d98ae20, 0x3ab05: 0x6d98b020, 0x3ab06: 0x6d98b220, 0x3ab07: 0x6d98b420, + 0x3ab08: 0x6d98b620, 0x3ab09: 0x6d98b820, 0x3ab0a: 0x6d98ba20, 0x3ab0b: 0x6d98bc20, + 0x3ab0c: 0x6d98be20, 0x3ab0d: 0x6dbba020, 0x3ab0e: 0x6dbba220, 0x3ab0f: 0x6dbba420, + 0x3ab10: 0x6dbba620, 0x3ab11: 0x6dbba820, 0x3ab12: 0x6dbbaa20, 0x3ab13: 0x6dbbac20, + 0x3ab14: 0x6dbbae20, 0x3ab15: 0x6dbbb020, 0x3ab16: 0x6dd96c20, 0x3ab17: 0x6dd96e20, + 0x3ab18: 0x6dd97020, 0x3ab19: 0x6dd97220, 0x3ab1a: 0x6dd97420, 0x3ab1b: 0x6dd97620, + 0x3ab1c: 0x6dd97820, 0x3ab1d: 0x6dd97a20, 0x3ab1e: 0x6dd97c20, 0x3ab1f: 0x6dd97e20, + 0x3ab20: 0x6dd98020, 0x3ab21: 0x6dd98220, 0x3ab22: 0x6df1a620, 0x3ab23: 0x6df1a820, + 0x3ab24: 0x6df1aa20, 0x3ab25: 0x6df1ac20, 0x3ab26: 0x6e05de20, 0x3ab27: 0x6e05e020, + 0x3ab28: 0x6e05e220, 0x3ab29: 0x6e05e420, 0x3ab2a: 0x6e05e620, 0x3ab2b: 0x6e05e820, + 0x3ab2c: 0x6e169220, 0x3ab2d: 0x6e169420, 0x3ab2e: 0x6e23b820, 0x3ab2f: 0x6e23ba20, + 0x3ab30: 0x6e2dcc20, 0x3ab31: 0x6e2dce20, 0x3ab32: 0x6e3eb820, 0x3ab33: 0x6e3eba20, + 0x3ab34: 0x6e416220, 0x3ab35: 0x6e416420, 0x3ab36: 0x6d14de20, 0x3ab37: 0x6d42cc20, + 0x3ab38: 0x6d6fc220, 0x3ab39: 0x6d6fc420, 0x3ab3a: 0x6d6fc620, 0x3ab3b: 0x6d6fc820, + 0x3ab3c: 0x6d98c220, 0x3ab3d: 0x6d98c420, 0x3ab3e: 0x6d98c620, 0x3ab3f: 0x6dbbb420, + // Block 0xead, offset 0x3ab40 + 0x3ab40: 0x6dd98620, 0x3ab41: 0x6dd98820, 0x3ab42: 0x6e05ea20, 0x3ab43: 0x6e05ec20, + 0x3ab44: 0x6e23bc20, 0x3ab45: 0x6c8a3c20, 0x3ab46: 0x6c8a3e20, 0x3ab47: 0x6c8a4020, + 0x3ab48: 0x6cb66820, 0x3ab49: 0x6cb66a20, 0x3ab4a: 0x6cb66c20, 0x3ab4b: 0x6cb66e20, + 0x3ab4c: 0x6cb67020, 0x3ab4d: 0x6cb67220, 0x3ab4e: 0x6cb67420, 0x3ab4f: 0x6cb67620, + 0x3ab50: 0x6cb67820, 0x3ab51: 0x6cb67a20, 0x3ab52: 0x6ce6a020, 0x3ab53: 0x6ce6a220, + 0x3ab54: 0x6ce6a420, 0x3ab55: 0x6ce6a620, 0x3ab56: 0x6ce6a820, 0x3ab57: 0x6ce6aa20, + 0x3ab58: 0x6ce6ac20, 0x3ab59: 0x6ce6ae20, 0x3ab5a: 0x6ce6b020, 0x3ab5b: 0x6ce6b220, + 0x3ab5c: 0x6ce6b420, 0x3ab5d: 0x6ce6b620, 0x3ab5e: 0x6ce6b820, 0x3ab5f: 0x6ce6ba20, + 0x3ab60: 0x6d14f420, 0x3ab61: 0x6d14f620, 0x3ab62: 0x6d14f820, 0x3ab63: 0x6d14fa20, + 0x3ab64: 0x6d14fc20, 0x3ab65: 0x6d14fe20, 0x3ab66: 0x6d150020, 0x3ab67: 0x6d150220, + 0x3ab68: 0x6d150420, 0x3ab69: 0x6d150620, 0x3ab6a: 0x6d150820, 0x3ab6b: 0x6d150a20, + 0x3ab6c: 0x6d150c20, 0x3ab6d: 0x6d150e20, 0x3ab6e: 0x6d151020, 0x3ab6f: 0x6d151220, + 0x3ab70: 0x6d151420, 0x3ab71: 0x6d151620, 0x3ab72: 0x6d42d820, 0x3ab73: 0x6d42da20, + 0x3ab74: 0x6d42dc20, 0x3ab75: 0x6d42de20, 0x3ab76: 0x6d42e020, 0x3ab77: 0x6d42e220, + 0x3ab78: 0x6d42e420, 0x3ab79: 0x6d42e620, 0x3ab7a: 0x6d42e820, 0x3ab7b: 0x6d42ea20, + 0x3ab7c: 0x6d42ec20, 0x3ab7d: 0x6d42ee20, 0x3ab7e: 0x6d42f020, 0x3ab7f: 0x6d42f220, + // Block 0xeae, offset 0x3ab80 + 0x3ab80: 0x6d42f420, 0x3ab81: 0x6d42f620, 0x3ab82: 0x6d42f820, 0x3ab83: 0x6d42fa20, + 0x3ab84: 0x6d42fc20, 0x3ab85: 0x6d42fe20, 0x3ab86: 0x6d430020, 0x3ab87: 0x6d430220, + 0x3ab88: 0x6d430420, 0x3ab89: 0x6d430620, 0x3ab8a: 0x6d430820, 0x3ab8b: 0x6d6fd220, + 0x3ab8c: 0x6d6fd420, 0x3ab8d: 0x6d6fd620, 0x3ab8e: 0x6d6fd820, 0x3ab8f: 0x6d6fda20, + 0x3ab90: 0x6d6fdc20, 0x3ab91: 0x6d6fde20, 0x3ab92: 0x6d6fe020, 0x3ab93: 0x6d6fe220, + 0x3ab94: 0x6d6fe420, 0x3ab95: 0x6d6fe620, 0x3ab96: 0x6d6fe820, 0x3ab97: 0x6d6fea20, + 0x3ab98: 0x6d6fec20, 0x3ab99: 0x6d6fee20, 0x3ab9a: 0x6d6ff020, 0x3ab9b: 0x6d6ff220, + 0x3ab9c: 0x6d6ff420, 0x3ab9d: 0x6d6ff620, 0x3ab9e: 0x6d6ff820, 0x3ab9f: 0x6d6ffa20, + 0x3aba0: 0x6d98d020, 0x3aba1: 0x6d98d220, 0x3aba2: 0x6d98d420, 0x3aba3: 0x6d98d620, + 0x3aba4: 0x6d98d820, 0x3aba5: 0x6d98da20, 0x3aba6: 0x6d98dc20, 0x3aba7: 0x6d98de20, + 0x3aba8: 0x6d98e020, 0x3aba9: 0x6d98e220, 0x3abaa: 0x6d98e420, 0x3abab: 0x6d98e620, + 0x3abac: 0x6d98e820, 0x3abad: 0x6d98ea20, 0x3abae: 0x6d98ec20, 0x3abaf: 0x6d98ee20, + 0x3abb0: 0x6d98f020, 0x3abb1: 0x6d98f220, 0x3abb2: 0x6d98f420, 0x3abb3: 0x6d98f620, + 0x3abb4: 0x6d98f820, 0x3abb5: 0x6d98fa20, 0x3abb6: 0x6d98fc20, 0x3abb7: 0x6d98fe20, + 0x3abb8: 0x6d990020, 0x3abb9: 0x6d990220, 0x3abba: 0x6d990420, 0x3abbb: 0x6d990620, + 0x3abbc: 0x6d990820, 0x3abbd: 0x6d990a20, 0x3abbe: 0x6d990c20, 0x3abbf: 0x6dbbbc20, + // Block 0xeaf, offset 0x3abc0 + 0x3abc0: 0x6dbbbe20, 0x3abc1: 0x6dbbc020, 0x3abc2: 0x6dbbc220, 0x3abc3: 0x6dbbc420, + 0x3abc4: 0x6dbbc620, 0x3abc5: 0x6dbbc820, 0x3abc6: 0x6dbbca20, 0x3abc7: 0x6dbbcc20, + 0x3abc8: 0x6dbbce20, 0x3abc9: 0x6dbbd020, 0x3abca: 0x6dbbd220, 0x3abcb: 0x6dbbd420, + 0x3abcc: 0x6dbbd620, 0x3abcd: 0x6dbbd820, 0x3abce: 0x6dbbda20, 0x3abcf: 0x6dbbdc20, + 0x3abd0: 0x6dbbde20, 0x3abd1: 0x6dbbe020, 0x3abd2: 0x6dbbe220, 0x3abd3: 0x6dbbe420, + 0x3abd4: 0x6dbbe620, 0x3abd5: 0x6dbbe820, 0x3abd6: 0x6dbbea20, 0x3abd7: 0x6dd9a020, + 0x3abd8: 0x6dd9a220, 0x3abd9: 0x6dd9a420, 0x3abda: 0x6dd9a620, 0x3abdb: 0x6dd9a820, + 0x3abdc: 0x6dd9aa20, 0x3abdd: 0x6dd9ac20, 0x3abde: 0x6dd9ae20, 0x3abdf: 0x6dd9b020, + 0x3abe0: 0x6dd9b220, 0x3abe1: 0x6dd9b420, 0x3abe2: 0x6dd9b620, 0x3abe3: 0x6dd9b820, + 0x3abe4: 0x6df1b420, 0x3abe5: 0x6df1b620, 0x3abe6: 0x6df1b820, 0x3abe7: 0x6df1ba20, + 0x3abe8: 0x6df1bc20, 0x3abe9: 0x6df1be20, 0x3abea: 0x6df1c020, 0x3abeb: 0x6df1c220, + 0x3abec: 0x6df1c420, 0x3abed: 0x6df1c620, 0x3abee: 0x6df1c820, 0x3abef: 0x6df1ca20, + 0x3abf0: 0x6df1cc20, 0x3abf1: 0x6df1ce20, 0x3abf2: 0x6df1d020, 0x3abf3: 0x6df1d220, + 0x3abf4: 0x6e05f420, 0x3abf5: 0x6e05f620, 0x3abf6: 0x6e05f820, 0x3abf7: 0x6e05fa20, + 0x3abf8: 0x6e05fc20, 0x3abf9: 0x6e05fe20, 0x3abfa: 0x6e060020, 0x3abfb: 0x6e060220, + 0x3abfc: 0x6e060420, 0x3abfd: 0x6e060620, 0x3abfe: 0x6e060820, 0x3abff: 0x6e060a20, + // Block 0xeb0, offset 0x3ac00 + 0x3ac00: 0x6e060c20, 0x3ac01: 0x6e060e20, 0x3ac02: 0x6e061020, 0x3ac03: 0x6e061220, + 0x3ac04: 0x6e061420, 0x3ac05: 0x6e061620, 0x3ac06: 0x6e061820, 0x3ac07: 0x6e169820, + 0x3ac08: 0x6e169a20, 0x3ac09: 0x6e169c20, 0x3ac0a: 0x6e169e20, 0x3ac0b: 0x6e16a020, + 0x3ac0c: 0x6e16a220, 0x3ac0d: 0x6e16a420, 0x3ac0e: 0x6e16a620, 0x3ac0f: 0x6e16a820, + 0x3ac10: 0x6e16aa20, 0x3ac11: 0x6e16ac20, 0x3ac12: 0x6e16ae20, 0x3ac13: 0x6e23c020, + 0x3ac14: 0x6e23c220, 0x3ac15: 0x6e23c420, 0x3ac16: 0x6e23c620, 0x3ac17: 0x6e23c820, + 0x3ac18: 0x6e23ca20, 0x3ac19: 0x6e23cc20, 0x3ac1a: 0x6e23ce20, 0x3ac1b: 0x6e23d020, + 0x3ac1c: 0x6e2dd020, 0x3ac1d: 0x6e2dd220, 0x3ac1e: 0x6e2dd420, 0x3ac1f: 0x6e2dd620, + 0x3ac20: 0x6e2dd820, 0x3ac21: 0x6e2dda20, 0x3ac22: 0x6e2ddc20, 0x3ac23: 0x6e2dde20, + 0x3ac24: 0x6e2de020, 0x3ac25: 0x6e2de220, 0x3ac26: 0x6e2de420, 0x3ac27: 0x6e358420, + 0x3ac28: 0x6e358620, 0x3ac29: 0x6e358820, 0x3ac2a: 0x6e358a20, 0x3ac2b: 0x6e358c20, + 0x3ac2c: 0x6e3afc20, 0x3ac2d: 0x6e3afe20, 0x3ac2e: 0x6e3b0020, 0x3ac2f: 0x6e3ebc20, + 0x3ac30: 0x6e3ebe20, 0x3ac31: 0x6e3ec020, 0x3ac32: 0x6e435e20, 0x3ac33: 0x6e436020, + 0x3ac34: 0x6e464820, 0x3ac35: 0x6e46ee20, 0x3ac36: 0x6c632c20, 0x3ac37: 0x6c8a4220, + 0x3ac38: 0x6c8a4420, 0x3ac39: 0x6cb68420, 0x3ac3a: 0x6cb68620, 0x3ac3b: 0x6cb68820, + 0x3ac3c: 0x6cb68a20, 0x3ac3d: 0x6cb68c20, 0x3ac3e: 0x6cb68e20, 0x3ac3f: 0x6cb69020, + // Block 0xeb1, offset 0x3ac40 + 0x3ac40: 0x6cb69220, 0x3ac41: 0x6cb69420, 0x3ac42: 0x6ce6d220, 0x3ac43: 0x6ce6d420, + 0x3ac44: 0x6ce6d620, 0x3ac45: 0x6ce6d820, 0x3ac46: 0x6ce6da20, 0x3ac47: 0x6ce6dc20, + 0x3ac48: 0x6ce6de20, 0x3ac49: 0x6ce6e020, 0x3ac4a: 0x6ce6e220, 0x3ac4b: 0x6ce6e420, + 0x3ac4c: 0x6ce6e620, 0x3ac4d: 0x6ce6e820, 0x3ac4e: 0x6ce6ea20, 0x3ac4f: 0x6ce6ec20, + 0x3ac50: 0x6ce6ee20, 0x3ac51: 0x6ce6f020, 0x3ac52: 0x6d153020, 0x3ac53: 0x6d153220, + 0x3ac54: 0x6d153420, 0x3ac55: 0x6d153620, 0x3ac56: 0x6d153820, 0x3ac57: 0x6d153a20, + 0x3ac58: 0x6d153c20, 0x3ac59: 0x6d153e20, 0x3ac5a: 0x6d154020, 0x3ac5b: 0x6d154220, + 0x3ac5c: 0x6d154420, 0x3ac5d: 0x6d154620, 0x3ac5e: 0x6d154820, 0x3ac5f: 0x6d154a20, + 0x3ac60: 0x6d154c20, 0x3ac61: 0x6d154e20, 0x3ac62: 0x6d432220, 0x3ac63: 0x6d432420, + 0x3ac64: 0x6d432620, 0x3ac65: 0x6d432820, 0x3ac66: 0x6d432a20, 0x3ac67: 0x6d432c20, + 0x3ac68: 0x6d432e20, 0x3ac69: 0x6d433020, 0x3ac6a: 0x6d433220, 0x3ac6b: 0x6d433420, + 0x3ac6c: 0x6d433620, 0x3ac6d: 0x6d433820, 0x3ac6e: 0x6d433a20, 0x3ac6f: 0x6d433c20, + 0x3ac70: 0x6d433e20, 0x3ac71: 0x6d434020, 0x3ac72: 0x6d434220, 0x3ac73: 0x6d434420, + 0x3ac74: 0x6d434620, 0x3ac75: 0x6d434820, 0x3ac76: 0x6d434a20, 0x3ac77: 0x6d701420, + 0x3ac78: 0x6d701620, 0x3ac79: 0x6d701820, 0x3ac7a: 0x6d701a20, 0x3ac7b: 0x6d701c20, + 0x3ac7c: 0x6d701e20, 0x3ac7d: 0x6d702020, 0x3ac7e: 0x6d702220, 0x3ac7f: 0x6d702420, + // Block 0xeb2, offset 0x3ac80 + 0x3ac80: 0x6d702620, 0x3ac81: 0x6d702820, 0x3ac82: 0x6d702a20, 0x3ac83: 0x6d702c20, + 0x3ac84: 0x6d702e20, 0x3ac85: 0x6d703020, 0x3ac86: 0x6d703220, 0x3ac87: 0x6d703420, + 0x3ac88: 0x6d703620, 0x3ac89: 0x6d703820, 0x3ac8a: 0x6d703a20, 0x3ac8b: 0x6d703c20, + 0x3ac8c: 0x6d703e20, 0x3ac8d: 0x6d704020, 0x3ac8e: 0x6d704220, 0x3ac8f: 0x6d704420, + 0x3ac90: 0x6d704620, 0x3ac91: 0x6d704820, 0x3ac92: 0x6d993020, 0x3ac93: 0x6d993220, + 0x3ac94: 0x6d993420, 0x3ac95: 0x6d993620, 0x3ac96: 0x6d993820, 0x3ac97: 0x6d993a20, + 0x3ac98: 0x6d993c20, 0x3ac99: 0x6d993e20, 0x3ac9a: 0x6d994020, 0x3ac9b: 0x6d994220, + 0x3ac9c: 0x6d994420, 0x3ac9d: 0x6d994620, 0x3ac9e: 0x6d994820, 0x3ac9f: 0x6d994a20, + 0x3aca0: 0x6d994c20, 0x3aca1: 0x6d994e20, 0x3aca2: 0x6d995020, 0x3aca3: 0x6d995220, + 0x3aca4: 0x6d995420, 0x3aca5: 0x6d995620, 0x3aca6: 0x6d995820, 0x3aca7: 0x6d995a20, + 0x3aca8: 0x6d995c20, 0x3aca9: 0x6d995e20, 0x3acaa: 0x6d996020, 0x3acab: 0x6d996220, + 0x3acac: 0x6d996420, 0x3acad: 0x6d996620, 0x3acae: 0x6d996820, 0x3acaf: 0x6d996a20, + 0x3acb0: 0x6d996c20, 0x3acb1: 0x6d996e20, 0x3acb2: 0x6d997020, 0x3acb3: 0x6d997220, + 0x3acb4: 0x6d997420, 0x3acb5: 0x6dbc0c20, 0x3acb6: 0x6dbc0e20, 0x3acb7: 0x6dbc1020, + 0x3acb8: 0x6dbc1220, 0x3acb9: 0x6dbc1420, 0x3acba: 0x6dbc1620, 0x3acbb: 0x6dbc1820, + 0x3acbc: 0x6dbc1a20, 0x3acbd: 0x6dbc1c20, 0x3acbe: 0x6dd9d220, 0x3acbf: 0x6dbc1e20, + // Block 0xeb3, offset 0x3acc0 + 0x3acc0: 0x6dbc2020, 0x3acc1: 0x6dbc2220, 0x3acc2: 0x6dbc2420, 0x3acc3: 0x6dbc2620, + 0x3acc4: 0x6dbc2820, 0x3acc5: 0x6dbc2a20, 0x3acc6: 0x6dbc2c20, 0x3acc7: 0x6dbc2e20, + 0x3acc8: 0x6dbc3020, 0x3acc9: 0x6dbc3220, 0x3acca: 0x6dbc3420, 0x3accb: 0x6dbc3620, + 0x3accc: 0x6dbc3820, 0x3accd: 0x6dbc3a20, 0x3acce: 0x6dbc3c20, 0x3accf: 0x6dbc3e20, + 0x3acd0: 0x6dbc4020, 0x3acd1: 0x6dbc4220, 0x3acd2: 0x6dbc4420, 0x3acd3: 0x6dbc4620, + 0x3acd4: 0x6dbc4820, 0x3acd5: 0x6dbc4a20, 0x3acd6: 0x6dbc4c20, 0x3acd7: 0x6dd9d420, + 0x3acd8: 0x6dd9d620, 0x3acd9: 0x6dd9d820, 0x3acda: 0x6dd9da20, 0x3acdb: 0x6dd9dc20, + 0x3acdc: 0x6dd9de20, 0x3acdd: 0x6dd9e020, 0x3acde: 0x6dd9e220, 0x3acdf: 0x6dd9e420, + 0x3ace0: 0x6dd9e620, 0x3ace1: 0x6dd9e820, 0x3ace2: 0x6dd9ea20, 0x3ace3: 0x6dd9ec20, + 0x3ace4: 0x6dd9ee20, 0x3ace5: 0x6dd9f020, 0x3ace6: 0x6dd9f220, 0x3ace7: 0x6dd9f420, + 0x3ace8: 0x6dd9f620, 0x3ace9: 0x6dd9f820, 0x3acea: 0x6dd9fa20, 0x3aceb: 0x6dd9fc20, + 0x3acec: 0x6dd9fe20, 0x3aced: 0x6dda0020, 0x3acee: 0x6db8fa20, 0x3acef: 0x6dda0220, + 0x3acf0: 0x6dda0420, 0x3acf1: 0x6dda0620, 0x3acf2: 0x6dda0820, 0x3acf3: 0x6dda0a20, + 0x3acf4: 0x6dda0c20, 0x3acf5: 0x6dda0e20, 0x3acf6: 0x6dda1020, 0x3acf7: 0x6dda1220, + 0x3acf8: 0x6dda1420, 0x3acf9: 0x6dda1620, 0x3acfa: 0x6dda1820, 0x3acfb: 0x6df1ee20, + 0x3acfc: 0x6df1f020, 0x3acfd: 0x6df1f220, 0x3acfe: 0x6df1f420, 0x3acff: 0x6df1f620, + // Block 0xeb4, offset 0x3ad00 + 0x3ad00: 0x6df1f820, 0x3ad01: 0x6df1fa20, 0x3ad02: 0x6df1fc20, 0x3ad03: 0x6df1fe20, + 0x3ad04: 0x6df20020, 0x3ad05: 0x6df20220, 0x3ad06: 0x6df20420, 0x3ad07: 0x6df20620, + 0x3ad08: 0x6df20820, 0x3ad09: 0x6df20a20, 0x3ad0a: 0x6df20c20, 0x3ad0b: 0x6df20e20, + 0x3ad0c: 0x6df21020, 0x3ad0d: 0x6df21220, 0x3ad0e: 0x6df21420, 0x3ad0f: 0x6df21620, + 0x3ad10: 0x6df21820, 0x3ad11: 0x6df21a20, 0x3ad12: 0x6df21c20, 0x3ad13: 0x6df21e20, + 0x3ad14: 0x6df22020, 0x3ad15: 0x6df22220, 0x3ad16: 0x6df22420, 0x3ad17: 0x6df22620, + 0x3ad18: 0x6df22820, 0x3ad19: 0x6df22a20, 0x3ad1a: 0x6df22c20, 0x3ad1b: 0x6df22e20, + 0x3ad1c: 0x6df23020, 0x3ad1d: 0x6e062a20, 0x3ad1e: 0x6e062c20, 0x3ad1f: 0x6e062e20, + 0x3ad20: 0x6e063020, 0x3ad21: 0x6e063220, 0x3ad22: 0x6e063420, 0x3ad23: 0x6e063620, + 0x3ad24: 0x6e063820, 0x3ad25: 0x6e063a20, 0x3ad26: 0x6e063c20, 0x3ad27: 0x6e063e20, + 0x3ad28: 0x6e064020, 0x3ad29: 0x6e064220, 0x3ad2a: 0x6e064420, 0x3ad2b: 0x6e064620, + 0x3ad2c: 0x6e064820, 0x3ad2d: 0x6e064a20, 0x3ad2e: 0x6e064c20, 0x3ad2f: 0x6e064e20, + 0x3ad30: 0x6e065020, 0x3ad31: 0x6e065220, 0x3ad32: 0x6e065420, 0x3ad33: 0x6e065620, + 0x3ad34: 0x6e065820, 0x3ad35: 0x6e065a20, 0x3ad36: 0x6e065c20, 0x3ad37: 0x6e065e20, + 0x3ad38: 0x6e066020, 0x3ad39: 0x6e066220, 0x3ad3a: 0x6e066420, 0x3ad3b: 0x6e066620, + 0x3ad3c: 0x6e16c020, 0x3ad3d: 0x6e16c220, 0x3ad3e: 0x6e16c420, 0x3ad3f: 0x6e16c620, + // Block 0xeb5, offset 0x3ad40 + 0x3ad40: 0x6e16c820, 0x3ad41: 0x6e16ca20, 0x3ad42: 0x6e16cc20, 0x3ad43: 0x6e16ce20, + 0x3ad44: 0x6e16d020, 0x3ad45: 0x6e16d220, 0x3ad46: 0x6e16d420, 0x3ad47: 0x6e16d620, + 0x3ad48: 0x6e16d820, 0x3ad49: 0x6e16da20, 0x3ad4a: 0x6e16dc20, 0x3ad4b: 0x6e16de20, + 0x3ad4c: 0x6e16e020, 0x3ad4d: 0x6e16e220, 0x3ad4e: 0x6e16e420, 0x3ad4f: 0x6e16e620, + 0x3ad50: 0x6e16e820, 0x3ad51: 0x6e23e220, 0x3ad52: 0x6e23e420, 0x3ad53: 0x6e23e620, + 0x3ad54: 0x6e23e820, 0x3ad55: 0x6e23ea20, 0x3ad56: 0x6e23ec20, 0x3ad57: 0x6e23ee20, + 0x3ad58: 0x6e23f020, 0x3ad59: 0x6e23f220, 0x3ad5a: 0x6e23f420, 0x3ad5b: 0x6e23f620, + 0x3ad5c: 0x6e23f820, 0x3ad5d: 0x6e23fa20, 0x3ad5e: 0x6e23fc20, 0x3ad5f: 0x6e23fe20, + 0x3ad60: 0x6e240020, 0x3ad61: 0x6e240220, 0x3ad62: 0x6e240420, 0x3ad63: 0x6e240620, + 0x3ad64: 0x6e2dec20, 0x3ad65: 0x6e2dee20, 0x3ad66: 0x6e2df020, 0x3ad67: 0x6e2df220, + 0x3ad68: 0x6e2df420, 0x3ad69: 0x6e2df620, 0x3ad6a: 0x6e2df820, 0x3ad6b: 0x6e2dfa20, + 0x3ad6c: 0x6e2dfc20, 0x3ad6d: 0x6e359e20, 0x3ad6e: 0x6e35a020, 0x3ad6f: 0x6e35a220, + 0x3ad70: 0x6e35a420, 0x3ad71: 0x6e35a620, 0x3ad72: 0x6e35a820, 0x3ad73: 0x6e35aa20, + 0x3ad74: 0x6e35ac20, 0x3ad75: 0x6e3b0620, 0x3ad76: 0x6e3b0820, 0x3ad77: 0x6e3b0a20, + 0x3ad78: 0x6e3b0c20, 0x3ad79: 0x6e3b0e20, 0x3ad7a: 0x6e3b1020, 0x3ad7b: 0x6e3b1220, + 0x3ad7c: 0x6e3b1420, 0x3ad7d: 0x6e3b1620, 0x3ad7e: 0x6e3b1820, 0x3ad7f: 0x6e3ec420, + // Block 0xeb6, offset 0x3ad80 + 0x3ad80: 0x6e3ec620, 0x3ad81: 0x6e3ec820, 0x3ad82: 0x6e3eca20, 0x3ad83: 0x6e3ecc20, + 0x3ad84: 0x6e3ece20, 0x3ad85: 0x6e3ed020, 0x3ad86: 0x6e3ed220, 0x3ad87: 0x6e3ed420, + 0x3ad88: 0x6e436220, 0x3ad89: 0x6e436420, 0x3ad8a: 0x6e44a820, 0x3ad8b: 0x6e44aa20, + 0x3ad8c: 0x6e44ac20, 0x3ad8d: 0x6e44ae20, 0x3ad8e: 0x6e44b020, 0x3ad8f: 0x6e45e820, + 0x3ad90: 0x6e464a20, 0x3ad91: 0x6e464c20, 0x3ad92: 0x6e471820, 0x3ad93: 0x6e472420, + 0x3ad94: 0x6e473820, 0x3ad95: 0x6cb69820, 0x3ad96: 0x6ce6fa20, 0x3ad97: 0x6ce6fc20, + 0x3ad98: 0x6d155820, 0x3ad99: 0x6d155a20, 0x3ad9a: 0x6d155c20, 0x3ad9b: 0x6d155e20, + 0x3ad9c: 0x6d435620, 0x3ad9d: 0x6d997e20, 0x3ad9e: 0x6d998020, 0x3ad9f: 0x6dbc5420, + 0x3ada0: 0x6dda1e20, 0x3ada1: 0x6df23620, 0x3ada2: 0x6e067020, 0x3ada3: 0x6e16ec20, + 0x3ada4: 0x6e35b220, 0x3ada5: 0x6e3b1a20, 0x3ada6: 0x6c8a4820, 0x3ada7: 0x6c8a4a20, + 0x3ada8: 0x6c8a4c20, 0x3ada9: 0x6cb6a020, 0x3adaa: 0x6cb6a220, 0x3adab: 0x6cb6a420, + 0x3adac: 0x6cb6a620, 0x3adad: 0x6ce70220, 0x3adae: 0x6ce70420, 0x3adaf: 0x6ce70620, + 0x3adb0: 0x6ce70820, 0x3adb1: 0x6ce70a20, 0x3adb2: 0x6ce70c20, 0x3adb3: 0x6ce70e20, + 0x3adb4: 0x6ce71020, 0x3adb5: 0x6d156420, 0x3adb6: 0x6d156620, 0x3adb7: 0x6d435820, + 0x3adb8: 0x6d705420, 0x3adb9: 0x6d705620, 0x3adba: 0x6d705820, 0x3adbb: 0x6d705a20, + 0x3adbc: 0x6d998420, 0x3adbd: 0x6dda2020, 0x3adbe: 0x6e067420, 0x3adbf: 0x6e067620, + // Block 0xeb7, offset 0x3adc0 + 0x3adc0: 0x6e067820, 0x3adc1: 0x6e067a20, 0x3adc2: 0x6e3ed620, 0x3adc3: 0x6ce71220, + 0x3adc4: 0x6ce71420, 0x3adc5: 0x6ce71620, 0x3adc6: 0x6d156e20, 0x3adc7: 0x6d157020, + 0x3adc8: 0x6d157220, 0x3adc9: 0x6d157420, 0x3adca: 0x6d157620, 0x3adcb: 0x6d157820, + 0x3adcc: 0x6d157a20, 0x3adcd: 0x6d436420, 0x3adce: 0x6d436620, 0x3adcf: 0x6d436820, + 0x3add0: 0x6d436a20, 0x3add1: 0x6d436c20, 0x3add2: 0x6d436e20, 0x3add3: 0x6d437020, + 0x3add4: 0x6d437220, 0x3add5: 0x6d437420, 0x3add6: 0x6d437620, 0x3add7: 0x6d437820, + 0x3add8: 0x6d437a20, 0x3add9: 0x6d706020, 0x3adda: 0x6d706220, 0x3addb: 0x6d706420, + 0x3addc: 0x6d706620, 0x3addd: 0x6d706820, 0x3adde: 0x6d706a20, 0x3addf: 0x6d706c20, + 0x3ade0: 0x6d706e20, 0x3ade1: 0x6d998c20, 0x3ade2: 0x6d998e20, 0x3ade3: 0x6d999020, + 0x3ade4: 0x6d999220, 0x3ade5: 0x6d999420, 0x3ade6: 0x6d999620, 0x3ade7: 0x6d999820, + 0x3ade8: 0x6d999a20, 0x3ade9: 0x6d999c20, 0x3adea: 0x6d999e20, 0x3adeb: 0x6dbc5820, + 0x3adec: 0x6dbc5a20, 0x3aded: 0x6dbc5c20, 0x3adee: 0x6dbc5e20, 0x3adef: 0x6dbc6020, + 0x3adf0: 0x6dbc6220, 0x3adf1: 0x6dbc6420, 0x3adf2: 0x6dda2220, 0x3adf3: 0x6dda2420, + 0x3adf4: 0x6dda2620, 0x3adf5: 0x6dda2820, 0x3adf6: 0x6dda2a20, 0x3adf7: 0x6dda2c20, + 0x3adf8: 0x6df23c20, 0x3adf9: 0x6df23e20, 0x3adfa: 0x6df24020, 0x3adfb: 0x6e067e20, + 0x3adfc: 0x6e068020, 0x3adfd: 0x6e068220, 0x3adfe: 0x6e068420, 0x3adff: 0x6e068620, + // Block 0xeb8, offset 0x3ae00 + 0x3ae00: 0x6e068820, 0x3ae01: 0x6e16f620, 0x3ae02: 0x6e16f820, 0x3ae03: 0x6e16fa20, + 0x3ae04: 0x6e16fc20, 0x3ae05: 0x6e16fe20, 0x3ae06: 0x6e170020, 0x3ae07: 0x6e170220, + 0x3ae08: 0x6e170420, 0x3ae09: 0x6e170620, 0x3ae0a: 0x6e241020, 0x3ae0b: 0x6e241220, + 0x3ae0c: 0x6e2e0020, 0x3ae0d: 0x6e2e0220, 0x3ae0e: 0x6e2e0420, 0x3ae0f: 0x6e2e0620, + 0x3ae10: 0x6e2e0820, 0x3ae11: 0x6e35b620, 0x3ae12: 0x6e35b820, 0x3ae13: 0x6e3b1e20, + 0x3ae14: 0x6e3ed820, 0x3ae15: 0x6e3eda20, 0x3ae16: 0x6e417020, 0x3ae17: 0x6e417220, + 0x3ae18: 0x6e417420, 0x3ae19: 0x6e436620, 0x3ae1a: 0x6e436820, 0x3ae1b: 0x6cb6aa20, + 0x3ae1c: 0x6cb6ac20, 0x3ae1d: 0x6ce72c20, 0x3ae1e: 0x6ce72e20, 0x3ae1f: 0x6ce73020, + 0x3ae20: 0x6ce73220, 0x3ae21: 0x6d159820, 0x3ae22: 0x6d159a20, 0x3ae23: 0x6d159c20, + 0x3ae24: 0x6d159e20, 0x3ae25: 0x6d15a020, 0x3ae26: 0x6d15a220, 0x3ae27: 0x6d15a420, + 0x3ae28: 0x6d15a620, 0x3ae29: 0x6d15a820, 0x3ae2a: 0x6d15aa20, 0x3ae2b: 0x6d15ac20, + 0x3ae2c: 0x6d15ae20, 0x3ae2d: 0x6d15b020, 0x3ae2e: 0x6d15b220, 0x3ae2f: 0x6d15b420, + 0x3ae30: 0x6d15b620, 0x3ae31: 0x6d15b820, 0x3ae32: 0x6d15ba20, 0x3ae33: 0x6d15bc20, + 0x3ae34: 0x6d15be20, 0x3ae35: 0x6d15c020, 0x3ae36: 0x6d15c220, 0x3ae37: 0x6d15c420, + 0x3ae38: 0x6d43a420, 0x3ae39: 0x6d43a620, 0x3ae3a: 0x6d43a820, 0x3ae3b: 0x6d43aa20, + 0x3ae3c: 0x6d43ac20, 0x3ae3d: 0x6d43ae20, 0x3ae3e: 0x6d43b020, 0x3ae3f: 0x6d43b220, + // Block 0xeb9, offset 0x3ae40 + 0x3ae40: 0x6d43b420, 0x3ae41: 0x6d43b620, 0x3ae42: 0x6d43b820, 0x3ae43: 0x6d43ba20, + 0x3ae44: 0x6d43bc20, 0x3ae45: 0x6d43be20, 0x3ae46: 0x6d43c020, 0x3ae47: 0x6d43c220, + 0x3ae48: 0x6d43c420, 0x3ae49: 0x6d43c620, 0x3ae4a: 0x6d43c820, 0x3ae4b: 0x6d43ca20, + 0x3ae4c: 0x6d43cc20, 0x3ae4d: 0x6d43ce20, 0x3ae4e: 0x6d43d020, 0x3ae4f: 0x6d43d220, + 0x3ae50: 0x6d708c20, 0x3ae51: 0x6d708e20, 0x3ae52: 0x6d709020, 0x3ae53: 0x6d709220, + 0x3ae54: 0x6d709420, 0x3ae55: 0x6d709620, 0x3ae56: 0x6d709820, 0x3ae57: 0x6d709a20, + 0x3ae58: 0x6d709c20, 0x3ae59: 0x6d709e20, 0x3ae5a: 0x6d70a020, 0x3ae5b: 0x6d70a220, + 0x3ae5c: 0x6d70a420, 0x3ae5d: 0x6d70a620, 0x3ae5e: 0x6d70a820, 0x3ae5f: 0x6d70aa20, + 0x3ae60: 0x6d70ac20, 0x3ae61: 0x6d70ae20, 0x3ae62: 0x6d70b020, 0x3ae63: 0x6d70b220, + 0x3ae64: 0x6d70b420, 0x3ae65: 0x6d70b620, 0x3ae66: 0x6d70b820, 0x3ae67: 0x6d70ba20, + 0x3ae68: 0x6d70bc20, 0x3ae69: 0x6d99c020, 0x3ae6a: 0x6d99c220, 0x3ae6b: 0x6d99c420, + 0x3ae6c: 0x6d99c620, 0x3ae6d: 0x6d99c820, 0x3ae6e: 0x6d99ca20, 0x3ae6f: 0x6d99cc20, + 0x3ae70: 0x6d99ce20, 0x3ae71: 0x6d99d020, 0x3ae72: 0x6d99d220, 0x3ae73: 0x6d99d420, + 0x3ae74: 0x6d99d620, 0x3ae75: 0x6d99d820, 0x3ae76: 0x6d99da20, 0x3ae77: 0x6d99dc20, + 0x3ae78: 0x6d99de20, 0x3ae79: 0x6d99e020, 0x3ae7a: 0x6d99e220, 0x3ae7b: 0x6d99e420, + 0x3ae7c: 0x6d99e620, 0x3ae7d: 0x6d99e820, 0x3ae7e: 0x6d99ea20, 0x3ae7f: 0x6dbc8420, + // Block 0xeba, offset 0x3ae80 + 0x3ae80: 0x6dbc8620, 0x3ae81: 0x6dbc8820, 0x3ae82: 0x6dbc8a20, 0x3ae83: 0x6dbc8c20, + 0x3ae84: 0x6dbc8e20, 0x3ae85: 0x6dbc9020, 0x3ae86: 0x6dbc9220, 0x3ae87: 0x6dbc9420, + 0x3ae88: 0x6dbc9620, 0x3ae89: 0x6dbc9820, 0x3ae8a: 0x6dbc9a20, 0x3ae8b: 0x6dbc9c20, + 0x3ae8c: 0x6dbc9e20, 0x3ae8d: 0x6dbca020, 0x3ae8e: 0x6dbca220, 0x3ae8f: 0x6dbca420, + 0x3ae90: 0x6dbca620, 0x3ae91: 0x6dbca820, 0x3ae92: 0x6dbcaa20, 0x3ae93: 0x6dbcac20, + 0x3ae94: 0x6dbcae20, 0x3ae95: 0x6dbcb020, 0x3ae96: 0x6dbcb220, 0x3ae97: 0x6dbcb420, + 0x3ae98: 0x6dbcb620, 0x3ae99: 0x6dbcb820, 0x3ae9a: 0x6dbcba20, 0x3ae9b: 0x6dbcbc20, + 0x3ae9c: 0x6dbcbe20, 0x3ae9d: 0x6dbcc020, 0x3ae9e: 0x6dbcc220, 0x3ae9f: 0x6dda5c20, + 0x3aea0: 0x6dda5e20, 0x3aea1: 0x6dda6020, 0x3aea2: 0x6dda6220, 0x3aea3: 0x6dda6420, + 0x3aea4: 0x6dda6620, 0x3aea5: 0x6dda6820, 0x3aea6: 0x6dda6a20, 0x3aea7: 0x6dda6c20, + 0x3aea8: 0x6dda6e20, 0x3aea9: 0x6dda7020, 0x3aeaa: 0x6dda7220, 0x3aeab: 0x6dda7420, + 0x3aeac: 0x6dda7620, 0x3aead: 0x6dda7820, 0x3aeae: 0x6dda7a20, 0x3aeaf: 0x6dda7c20, + 0x3aeb0: 0x6dda7e20, 0x3aeb1: 0x6dda8020, 0x3aeb2: 0x6dda8220, 0x3aeb3: 0x6dda8420, + 0x3aeb4: 0x6dda8620, 0x3aeb5: 0x6dda8820, 0x3aeb6: 0x6dda8a20, 0x3aeb7: 0x6dda8c20, + 0x3aeb8: 0x6dda8e20, 0x3aeb9: 0x6dda9020, 0x3aeba: 0x6dda9220, 0x3aebb: 0x6dda9420, + 0x3aebc: 0x6dda9620, 0x3aebd: 0x6dda9820, 0x3aebe: 0x6dda9a20, 0x3aebf: 0x6dda9c20, + // Block 0xebb, offset 0x3aec0 + 0x3aec0: 0x6dda9e20, 0x3aec1: 0x6ddaa020, 0x3aec2: 0x6ddaa220, 0x3aec3: 0x6df25e20, + 0x3aec4: 0x6df26020, 0x3aec5: 0x6df26220, 0x3aec6: 0x6df26420, 0x3aec7: 0x6df26620, + 0x3aec8: 0x6df26820, 0x3aec9: 0x6df26a20, 0x3aeca: 0x6df26c20, 0x3aecb: 0x6df26e20, + 0x3aecc: 0x6df27020, 0x3aecd: 0x6df27220, 0x3aece: 0x6df27420, 0x3aecf: 0x6df27620, + 0x3aed0: 0x6df27820, 0x3aed1: 0x6df27a20, 0x3aed2: 0x6df27c20, 0x3aed3: 0x6df27e20, + 0x3aed4: 0x6df28020, 0x3aed5: 0x6df28220, 0x3aed6: 0x6df28420, 0x3aed7: 0x6df28620, + 0x3aed8: 0x6df28820, 0x3aed9: 0x6df28a20, 0x3aeda: 0x6df28c20, 0x3aedb: 0x6df28e20, + 0x3aedc: 0x6df29020, 0x3aedd: 0x6df29220, 0x3aede: 0x6df29420, 0x3aedf: 0x6df29620, + 0x3aee0: 0x6df29820, 0x3aee1: 0x6df29a20, 0x3aee2: 0x6df29c20, 0x3aee3: 0x6df29e20, + 0x3aee4: 0x6df2a020, 0x3aee5: 0x6df2a220, 0x3aee6: 0x6e069820, 0x3aee7: 0x6e069a20, + 0x3aee8: 0x6e069c20, 0x3aee9: 0x6e069e20, 0x3aeea: 0x6e06a020, 0x3aeeb: 0x6e06a220, + 0x3aeec: 0x6e06a420, 0x3aeed: 0x6e06a620, 0x3aeee: 0x6e06a820, 0x3aeef: 0x6e06aa20, + 0x3aef0: 0x6e06ac20, 0x3aef1: 0x6e06ae20, 0x3aef2: 0x6e06b020, 0x3aef3: 0x6e06b220, + 0x3aef4: 0x6e06b420, 0x3aef5: 0x6e06b620, 0x3aef6: 0x6e06b820, 0x3aef7: 0x6e06ba20, + 0x3aef8: 0x6e06bc20, 0x3aef9: 0x6e06be20, 0x3aefa: 0x6e06c020, 0x3aefb: 0x6e06c220, + 0x3aefc: 0x6e06c420, 0x3aefd: 0x6e06c620, 0x3aefe: 0x6e06c820, 0x3aeff: 0x6e06ca20, + // Block 0xebc, offset 0x3af00 + 0x3af00: 0x6e06cc20, 0x3af01: 0x6e06ce20, 0x3af02: 0x6e06d020, 0x3af03: 0x6e171e20, + 0x3af04: 0x6e172020, 0x3af05: 0x6e172220, 0x3af06: 0x6e172420, 0x3af07: 0x6e172620, + 0x3af08: 0x6e172820, 0x3af09: 0x6e172a20, 0x3af0a: 0x6e172c20, 0x3af0b: 0x6e172e20, + 0x3af0c: 0x6e173020, 0x3af0d: 0x6e173220, 0x3af0e: 0x6e173420, 0x3af0f: 0x6e173620, + 0x3af10: 0x6e173820, 0x3af11: 0x6e173a20, 0x3af12: 0x6e173c20, 0x3af13: 0x6e242020, + 0x3af14: 0x6e242220, 0x3af15: 0x6e242420, 0x3af16: 0x6e242620, 0x3af17: 0x6e242820, + 0x3af18: 0x6e242a20, 0x3af19: 0x6e242c20, 0x3af1a: 0x6e242e20, 0x3af1b: 0x6e243020, + 0x3af1c: 0x6e243220, 0x3af1d: 0x6e243420, 0x3af1e: 0x6e243620, 0x3af1f: 0x6e243820, + 0x3af20: 0x6e243a20, 0x3af21: 0x6e243c20, 0x3af22: 0x6e243e20, 0x3af23: 0x6e244020, + 0x3af24: 0x6e244220, 0x3af25: 0x6e2e1220, 0x3af26: 0x6e2e1420, 0x3af27: 0x6e2e1620, + 0x3af28: 0x6e2e1820, 0x3af29: 0x6e2e1a20, 0x3af2a: 0x6e2e1c20, 0x3af2b: 0x6e2e1e20, + 0x3af2c: 0x6e2e2020, 0x3af2d: 0x6e2e2220, 0x3af2e: 0x6e2e2420, 0x3af2f: 0x6e2e2620, + 0x3af30: 0x6e2e2820, 0x3af31: 0x6e2e2a20, 0x3af32: 0x6e35c220, 0x3af33: 0x6e35c420, + 0x3af34: 0x6e35c620, 0x3af35: 0x6e35c820, 0x3af36: 0x6e35ca20, 0x3af37: 0x6e35cc20, + 0x3af38: 0x6e3b2420, 0x3af39: 0x6e3b2620, 0x3af3a: 0x6e3b2820, 0x3af3b: 0x6e3b9e20, + 0x3af3c: 0x6e3b2a20, 0x3af3d: 0x6e3b2c20, 0x3af3e: 0x6e3b2e20, 0x3af3f: 0x6e3ee220, + // Block 0xebd, offset 0x3af40 + 0x3af40: 0x6e3ee420, 0x3af41: 0x6e3ee620, 0x3af42: 0x6e3ee820, 0x3af43: 0x6e3eea20, + 0x3af44: 0x6e3eec20, 0x3af45: 0x6e3eee20, 0x3af46: 0x6e3ef020, 0x3af47: 0x6e417820, + 0x3af48: 0x6e436a20, 0x3af49: 0x6e436c20, 0x3af4a: 0x6e436e20, 0x3af4b: 0x6e457020, + 0x3af4c: 0x6e464e20, 0x3af4d: 0x6e465020, 0x3af4e: 0x6e469420, 0x3af4f: 0x6e469620, + 0x3af50: 0x6e46b620, 0x3af51: 0x6e471a20, 0x3af52: 0x6ce73620, 0x3af53: 0x6d15c820, + 0x3af54: 0x6d15ca20, 0x3af55: 0x6d15cc20, 0x3af56: 0x6d15ce20, 0x3af57: 0x6d15d020, + 0x3af58: 0x6d43e420, 0x3af59: 0x6d43e620, 0x3af5a: 0x6d43e820, 0x3af5b: 0x6d43ea20, + 0x3af5c: 0x6d43ec20, 0x3af5d: 0x6d43ee20, 0x3af5e: 0x6d43f020, 0x3af5f: 0x6d43f220, + 0x3af60: 0x6d43f420, 0x3af61: 0x6d43f620, 0x3af62: 0x6d43f820, 0x3af63: 0x6d43fa20, + 0x3af64: 0x6d70c820, 0x3af65: 0x6d70ca20, 0x3af66: 0x6d70cc20, 0x3af67: 0x6d70ce20, + 0x3af68: 0x6d70d020, 0x3af69: 0x6d70d220, 0x3af6a: 0x6d70d420, 0x3af6b: 0x6d70d620, + 0x3af6c: 0x6d70d820, 0x3af6d: 0x6d70da20, 0x3af6e: 0x6d70dc20, 0x3af6f: 0x6d99f020, + 0x3af70: 0x6d99f220, 0x3af71: 0x6d99f420, 0x3af72: 0x6d99f620, 0x3af73: 0x6d99f820, + 0x3af74: 0x6d99fa20, 0x3af75: 0x6d99fc20, 0x3af76: 0x6d99fe20, 0x3af77: 0x6d9a0020, + 0x3af78: 0x6dbccc20, 0x3af79: 0x6dbcce20, 0x3af7a: 0x6dbcd020, 0x3af7b: 0x6dbcd220, + 0x3af7c: 0x6dbcd420, 0x3af7d: 0x6dbcd620, 0x3af7e: 0x6dbcd820, 0x3af7f: 0x6dbcda20, + // Block 0xebe, offset 0x3af80 + 0x3af80: 0x6dbcdc20, 0x3af81: 0x6dbcde20, 0x3af82: 0x6dbce020, 0x3af83: 0x6dbce220, + 0x3af84: 0x6dbce420, 0x3af85: 0x6ddab420, 0x3af86: 0x6ddab620, 0x3af87: 0x6ddab820, + 0x3af88: 0x6ddaba20, 0x3af89: 0x6ddabc20, 0x3af8a: 0x6ddabe20, 0x3af8b: 0x6ddac020, + 0x3af8c: 0x6ddac220, 0x3af8d: 0x6ddac420, 0x3af8e: 0x6ddac620, 0x3af8f: 0x6df2b020, + 0x3af90: 0x6df2b220, 0x3af91: 0x6df2b420, 0x3af92: 0x6df2b620, 0x3af93: 0x6df2b820, + 0x3af94: 0x6df2ba20, 0x3af95: 0x6df2bc20, 0x3af96: 0x6df2be20, 0x3af97: 0x6df2c020, + 0x3af98: 0x6e06d820, 0x3af99: 0x6e06da20, 0x3af9a: 0x6e06dc20, 0x3af9b: 0x6e06de20, + 0x3af9c: 0x6e06e020, 0x3af9d: 0x6e06e220, 0x3af9e: 0x6e06e420, 0x3af9f: 0x6e06e620, + 0x3afa0: 0x6e174620, 0x3afa1: 0x6e174820, 0x3afa2: 0x6e174a20, 0x3afa3: 0x6e174c20, + 0x3afa4: 0x6e174e20, 0x3afa5: 0x6e175020, 0x3afa6: 0x6e175220, 0x3afa7: 0x6e175420, + 0x3afa8: 0x6e244a20, 0x3afa9: 0x6e244c20, 0x3afaa: 0x6e244e20, 0x3afab: 0x6e245020, + 0x3afac: 0x6e245220, 0x3afad: 0x6e245420, 0x3afae: 0x6e2e2e20, 0x3afaf: 0x6e2e3020, + 0x3afb0: 0x6e2e3220, 0x3afb1: 0x6e2e3420, 0x3afb2: 0x6e35d220, 0x3afb3: 0x6e35d420, + 0x3afb4: 0x6e3b3020, 0x3afb5: 0x6e3ef220, 0x3afb6: 0x6e417a20, 0x3afb7: 0x6e417c20, + 0x3afb8: 0x6e417e20, 0x3afb9: 0x6e437020, 0x3afba: 0x6e44b420, 0x3afbb: 0x6e44b620, + 0x3afbc: 0x6c428220, 0x3afbd: 0x6c633820, 0x3afbe: 0x6c633a20, 0x3afbf: 0x6d15d820, + // Block 0xebf, offset 0x3afc0 + 0x3afc0: 0x6d15da20, 0x3afc1: 0x6d15e220, 0x3afc2: 0x6d15e420, 0x3afc3: 0x6d70e420, + 0x3afc4: 0x6d9a0620, 0x3afc5: 0x6dbcec20, 0x3afc6: 0x6dbcee20, 0x3afc7: 0x6dbcf020, + 0x3afc8: 0x6ddac820, 0x3afc9: 0x6df2c820, 0x3afca: 0x6df2ca20, 0x3afcb: 0x6e06ec20, + 0x3afcc: 0x6e175820, 0x3afcd: 0x6e06ee20, 0x3afce: 0x6e06f020, 0x3afcf: 0x6e175a20, + 0x3afd0: 0x6e175c20, 0x3afd1: 0x6e245620, 0x3afd2: 0x6e245820, 0x3afd3: 0x6e245a20, + 0x3afd4: 0x6e2e3820, 0x3afd5: 0x6e2e3a20, 0x3afd6: 0x6e3b3220, 0x3afd7: 0x6ce74220, + 0x3afd8: 0x6d15ec20, 0x3afd9: 0x6d15ee20, 0x3afda: 0x6d440820, 0x3afdb: 0x6d440a20, + 0x3afdc: 0x6d440c20, 0x3afdd: 0x6d440e20, 0x3afde: 0x6d70e620, 0x3afdf: 0x6d70e820, + 0x3afe0: 0x6d70ea20, 0x3afe1: 0x6d70ec20, 0x3afe2: 0x6d70ee20, 0x3afe3: 0x6d70f020, + 0x3afe4: 0x6d70f220, 0x3afe5: 0x6d70f420, 0x3afe6: 0x6d70f620, 0x3afe7: 0x6d9a0e20, + 0x3afe8: 0x6d9a1020, 0x3afe9: 0x6d9a1220, 0x3afea: 0x6d9a1420, 0x3afeb: 0x6d9a1620, + 0x3afec: 0x6d9a1820, 0x3afed: 0x6dbcf220, 0x3afee: 0x6dbcf420, 0x3afef: 0x6dbcf620, + 0x3aff0: 0x6dbcf820, 0x3aff1: 0x6ddad020, 0x3aff2: 0x6ddad220, 0x3aff3: 0x6ddad420, + 0x3aff4: 0x6ddad620, 0x3aff5: 0x6df2d420, 0x3aff6: 0x6df2d620, 0x3aff7: 0x6df2d820, + 0x3aff8: 0x6df2da20, 0x3aff9: 0x6e06f820, 0x3affa: 0x6e06fa20, 0x3affb: 0x6e06fc20, + 0x3affc: 0x6e06fe20, 0x3affd: 0x6e070020, 0x3affe: 0x6e070220, 0x3afff: 0x6e175e20, + // Block 0xec0, offset 0x3b000 + 0x3b000: 0x6e176020, 0x3b001: 0x6e176220, 0x3b002: 0x6e245e20, 0x3b003: 0x6e246020, + 0x3b004: 0x6e246220, 0x3b005: 0x6e246420, 0x3b006: 0x6e246620, 0x3b007: 0x6e2e3e20, + 0x3b008: 0x6e35d820, 0x3b009: 0x6e418020, 0x3b00a: 0x6e469820, 0x3b00b: 0x6c634220, + 0x3b00c: 0x6cb6b820, 0x3b00d: 0x6cb6ba20, 0x3b00e: 0x6cb6bc20, 0x3b00f: 0x6cb6be20, + 0x3b010: 0x6ce75020, 0x3b011: 0x6ce75220, 0x3b012: 0x6ce75420, 0x3b013: 0x6ce75620, + 0x3b014: 0x6ce75820, 0x3b015: 0x6ce75a20, 0x3b016: 0x6ce75c20, 0x3b017: 0x6ce75e20, + 0x3b018: 0x6ce76020, 0x3b019: 0x6d160e20, 0x3b01a: 0x6d161020, 0x3b01b: 0x6d161220, + 0x3b01c: 0x6d161420, 0x3b01d: 0x6d161620, 0x3b01e: 0x6d161820, 0x3b01f: 0x6d161a20, + 0x3b020: 0x6d161c20, 0x3b021: 0x6d161e20, 0x3b022: 0x6d162020, 0x3b023: 0x6d162220, + 0x3b024: 0x6d162420, 0x3b025: 0x6d162620, 0x3b026: 0x6d162820, 0x3b027: 0x6d162a20, + 0x3b028: 0x6d162c20, 0x3b029: 0x6d162e20, 0x3b02a: 0x6d163020, 0x3b02b: 0x6d163220, + 0x3b02c: 0x6d163420, 0x3b02d: 0x6d163620, 0x3b02e: 0x6d163820, 0x3b02f: 0x6d163a20, + 0x3b030: 0x6d443220, 0x3b031: 0x6d443420, 0x3b032: 0x6d443620, 0x3b033: 0x6d443820, + 0x3b034: 0x6d443a20, 0x3b035: 0x6d443c20, 0x3b036: 0x6d443e20, 0x3b037: 0x6d444020, + 0x3b038: 0x6d444220, 0x3b039: 0x6d444420, 0x3b03a: 0x6d444620, 0x3b03b: 0x6d444820, + 0x3b03c: 0x6d444a20, 0x3b03d: 0x6d444c20, 0x3b03e: 0x6d444e20, 0x3b03f: 0x6d445020, + // Block 0xec1, offset 0x3b040 + 0x3b040: 0x6d445220, 0x3b041: 0x6d445420, 0x3b042: 0x6d445620, 0x3b043: 0x6d445820, + 0x3b044: 0x6d445a20, 0x3b045: 0x6d445c20, 0x3b046: 0x6d445e20, 0x3b047: 0x6d446020, + 0x3b048: 0x6d446220, 0x3b049: 0x6d446420, 0x3b04a: 0x6d446620, 0x3b04b: 0x6d446820, + 0x3b04c: 0x6d446a20, 0x3b04d: 0x6d446c20, 0x3b04e: 0x6d446e20, 0x3b04f: 0x6d712020, + 0x3b050: 0x6d712220, 0x3b051: 0x6d712420, 0x3b052: 0x6d712620, 0x3b053: 0x6d712820, + 0x3b054: 0x6d712a20, 0x3b055: 0x6d712c20, 0x3b056: 0x6d712e20, 0x3b057: 0x6d713020, + 0x3b058: 0x6d713220, 0x3b059: 0x6d713420, 0x3b05a: 0x6d713620, 0x3b05b: 0x6d713820, + 0x3b05c: 0x6d713a20, 0x3b05d: 0x6d713c20, 0x3b05e: 0x6d713e20, 0x3b05f: 0x6d714020, + 0x3b060: 0x6d714220, 0x3b061: 0x6d714420, 0x3b062: 0x6d714620, 0x3b063: 0x6d714820, + 0x3b064: 0x6d714a20, 0x3b065: 0x6d714c20, 0x3b066: 0x6d714e20, 0x3b067: 0x6d715020, + 0x3b068: 0x6d715220, 0x3b069: 0x6d715420, 0x3b06a: 0x6d715620, 0x3b06b: 0x6d715820, + 0x3b06c: 0x6d715a20, 0x3b06d: 0x6d715c20, 0x3b06e: 0x6d9a5020, 0x3b06f: 0x6d9a5220, + 0x3b070: 0x6d9a5420, 0x3b071: 0x6d9a5620, 0x3b072: 0x6d9a5820, 0x3b073: 0x6d9a5a20, + 0x3b074: 0x6d9a5c20, 0x3b075: 0x6d9a5e20, 0x3b076: 0x6d9a6020, 0x3b077: 0x6d9a6220, + 0x3b078: 0x6d9a6420, 0x3b079: 0x6d9a6620, 0x3b07a: 0x6d9a6820, 0x3b07b: 0x6d9a6a20, + 0x3b07c: 0x6d9a6c20, 0x3b07d: 0x6d9a6e20, 0x3b07e: 0x6d9a7020, 0x3b07f: 0x6d9a7220, + // Block 0xec2, offset 0x3b080 + 0x3b080: 0x6d9a7420, 0x3b081: 0x6d9a7620, 0x3b082: 0x6d9a7820, 0x3b083: 0x6d9a7a20, + 0x3b084: 0x6d9a7c20, 0x3b085: 0x6d9a7e20, 0x3b086: 0x6d9a8020, 0x3b087: 0x6d9a8220, + 0x3b088: 0x6d9a8420, 0x3b089: 0x6d9a8620, 0x3b08a: 0x6d9a8820, 0x3b08b: 0x6d9a8a20, + 0x3b08c: 0x6d9a8c20, 0x3b08d: 0x6d9a8e20, 0x3b08e: 0x6d9a9020, 0x3b08f: 0x6d9a9220, + 0x3b090: 0x6d9a9420, 0x3b091: 0x6d9a9620, 0x3b092: 0x6d9a9820, 0x3b093: 0x6d9a9a20, + 0x3b094: 0x6d9a9c20, 0x3b095: 0x6d9a9e20, 0x3b096: 0x6d9aa020, 0x3b097: 0x6d9aa220, + 0x3b098: 0x6d9aa420, 0x3b099: 0x6d9aa620, 0x3b09a: 0x6d9aa820, 0x3b09b: 0x6d9aaa20, + 0x3b09c: 0x6d9aac20, 0x3b09d: 0x6dbd2220, 0x3b09e: 0x6dbd2420, 0x3b09f: 0x6dbd2620, + 0x3b0a0: 0x6dbd2820, 0x3b0a1: 0x6dbd2a20, 0x3b0a2: 0x6dbd2c20, 0x3b0a3: 0x6dbd2e20, + 0x3b0a4: 0x6dbd3020, 0x3b0a5: 0x6dbd3220, 0x3b0a6: 0x6dbd3420, 0x3b0a7: 0x6dbd3620, + 0x3b0a8: 0x6dbd3820, 0x3b0a9: 0x6dbd3a20, 0x3b0aa: 0x6dbd3c20, 0x3b0ab: 0x6dbd3e20, + 0x3b0ac: 0x6dbd4020, 0x3b0ad: 0x6dbd4220, 0x3b0ae: 0x6dbd4420, 0x3b0af: 0x6dbd4620, + 0x3b0b0: 0x6dbd4820, 0x3b0b1: 0x6dbd4a20, 0x3b0b2: 0x6dbd4c20, 0x3b0b3: 0x6dbd4e20, + 0x3b0b4: 0x6dbd5020, 0x3b0b5: 0x6dbd5220, 0x3b0b6: 0x6dbd5420, 0x3b0b7: 0x6dbd5620, + 0x3b0b8: 0x6dbd5820, 0x3b0b9: 0x6dbd5a20, 0x3b0ba: 0x6dbd5c20, 0x3b0bb: 0x6dbd5e20, + 0x3b0bc: 0x6dbd6020, 0x3b0bd: 0x6dbd6220, 0x3b0be: 0x6dbd6420, 0x3b0bf: 0x6dbd6620, + // Block 0xec3, offset 0x3b0c0 + 0x3b0c0: 0x6ddb0820, 0x3b0c1: 0x6ddb0a20, 0x3b0c2: 0x6ddb0c20, 0x3b0c3: 0x6ddb0e20, + 0x3b0c4: 0x6ddb1020, 0x3b0c5: 0x6ddb1220, 0x3b0c6: 0x6ddb1420, 0x3b0c7: 0x6ddb1620, + 0x3b0c8: 0x6ddb1820, 0x3b0c9: 0x6ddb1a20, 0x3b0ca: 0x6ddb1c20, 0x3b0cb: 0x6ddb1e20, + 0x3b0cc: 0x6ddb2020, 0x3b0cd: 0x6ddb2220, 0x3b0ce: 0x6ddb2420, 0x3b0cf: 0x6ddb2620, + 0x3b0d0: 0x6ddb2820, 0x3b0d1: 0x6ddb2a20, 0x3b0d2: 0x6ddb2c20, 0x3b0d3: 0x6ddb2e20, + 0x3b0d4: 0x6ddb3020, 0x3b0d5: 0x6ddb3220, 0x3b0d6: 0x6ddb3420, 0x3b0d7: 0x6ddb3620, + 0x3b0d8: 0x6ddb3820, 0x3b0d9: 0x6df30220, 0x3b0da: 0x6df30420, 0x3b0db: 0x6df30620, + 0x3b0dc: 0x6df30820, 0x3b0dd: 0x6df30a20, 0x3b0de: 0x6df30c20, 0x3b0df: 0x6df30e20, + 0x3b0e0: 0x6df31020, 0x3b0e1: 0x6df31220, 0x3b0e2: 0x6df31420, 0x3b0e3: 0x6df31620, + 0x3b0e4: 0x6df31820, 0x3b0e5: 0x6df31a20, 0x3b0e6: 0x6df31c20, 0x3b0e7: 0x6df31e20, + 0x3b0e8: 0x6df32020, 0x3b0e9: 0x6df32220, 0x3b0ea: 0x6df32420, 0x3b0eb: 0x6df32620, + 0x3b0ec: 0x6df32820, 0x3b0ed: 0x6df32a20, 0x3b0ee: 0x6df32c20, 0x3b0ef: 0x6df32e20, + 0x3b0f0: 0x6df33020, 0x3b0f1: 0x6df33220, 0x3b0f2: 0x6df33420, 0x3b0f3: 0x6e071820, + 0x3b0f4: 0x6e071a20, 0x3b0f5: 0x6e071c20, 0x3b0f6: 0x6e071e20, 0x3b0f7: 0x6e072020, + 0x3b0f8: 0x6e072220, 0x3b0f9: 0x6e072420, 0x3b0fa: 0x6e072620, 0x3b0fb: 0x6e072820, + 0x3b0fc: 0x6e072a20, 0x3b0fd: 0x6e072c20, 0x3b0fe: 0x6e072e20, 0x3b0ff: 0x6e073020, + // Block 0xec4, offset 0x3b100 + 0x3b100: 0x6e073220, 0x3b101: 0x6e073420, 0x3b102: 0x6e073620, 0x3b103: 0x6e073820, + 0x3b104: 0x6e073a20, 0x3b105: 0x6e073c20, 0x3b106: 0x6e073e20, 0x3b107: 0x6e074020, + 0x3b108: 0x6e074220, 0x3b109: 0x6e177c20, 0x3b10a: 0x6e177e20, 0x3b10b: 0x6e178020, + 0x3b10c: 0x6e178220, 0x3b10d: 0x6e178420, 0x3b10e: 0x6e178620, 0x3b10f: 0x6e178820, + 0x3b110: 0x6e178a20, 0x3b111: 0x6e178c20, 0x3b112: 0x6e178e20, 0x3b113: 0x6e179020, + 0x3b114: 0x6e179220, 0x3b115: 0x6e179420, 0x3b116: 0x6e179620, 0x3b117: 0x6e179820, + 0x3b118: 0x6e179a20, 0x3b119: 0x6e179c20, 0x3b11a: 0x6e179e20, 0x3b11b: 0x6e17a020, + 0x3b11c: 0x6e17a220, 0x3b11d: 0x6e17a420, 0x3b11e: 0x6e17a620, 0x3b11f: 0x6e247420, + 0x3b120: 0x6e247620, 0x3b121: 0x6e247820, 0x3b122: 0x6e247a20, 0x3b123: 0x6e247c20, + 0x3b124: 0x6e247e20, 0x3b125: 0x6e248020, 0x3b126: 0x6e248220, 0x3b127: 0x6e248420, + 0x3b128: 0x6e248620, 0x3b129: 0x6e248820, 0x3b12a: 0x6e248a20, 0x3b12b: 0x6e248c20, + 0x3b12c: 0x6e2e4820, 0x3b12d: 0x6e2e4a20, 0x3b12e: 0x6e2e4c20, 0x3b12f: 0x6e2e4e20, + 0x3b130: 0x6e2e5020, 0x3b131: 0x6e2e5220, 0x3b132: 0x6e2e5420, 0x3b133: 0x6e2e5620, + 0x3b134: 0x6e2e5820, 0x3b135: 0x6e2e5a20, 0x3b136: 0x6e2e5c20, 0x3b137: 0x6e2e5e20, + 0x3b138: 0x6e2e6020, 0x3b139: 0x6e2e6220, 0x3b13a: 0x6e2e6420, 0x3b13b: 0x6e2e6620, + 0x3b13c: 0x6e2e6820, 0x3b13d: 0x6e2e6a20, 0x3b13e: 0x6e35e020, 0x3b13f: 0x6e35e220, + // Block 0xec5, offset 0x3b140 + 0x3b140: 0x6e35e420, 0x3b141: 0x6e35e620, 0x3b142: 0x6e35e820, 0x3b143: 0x6e35ea20, + 0x3b144: 0x6e35ec20, 0x3b145: 0x6e35ee20, 0x3b146: 0x6e3b3c20, 0x3b147: 0x6e3b3e20, + 0x3b148: 0x6e3b4020, 0x3b149: 0x6e3ef420, 0x3b14a: 0x6e3ef620, 0x3b14b: 0x6e3ef820, + 0x3b14c: 0x6e3efa20, 0x3b14d: 0x6e3efc20, 0x3b14e: 0x6e3efe20, 0x3b14f: 0x6e418620, + 0x3b150: 0x6e418820, 0x3b151: 0x6e418a20, 0x3b152: 0x6e44b820, 0x3b153: 0x6e44ba20, + 0x3b154: 0x6e460020, 0x3b155: 0x6d447420, 0x3b156: 0x6d447620, 0x3b157: 0x6df33a20, + 0x3b158: 0x6cb6ce20, 0x3b159: 0x6cb6d020, 0x3b15a: 0x6ce77e20, 0x3b15b: 0x6ce78020, + 0x3b15c: 0x6ce78220, 0x3b15d: 0x6ce78420, 0x3b15e: 0x6ce78620, 0x3b15f: 0x6ce78820, + 0x3b160: 0x6ce78a20, 0x3b161: 0x6ce78c20, 0x3b162: 0x6d165c20, 0x3b163: 0x6d165e20, + 0x3b164: 0x6d166020, 0x3b165: 0x6d166220, 0x3b166: 0x6d166420, 0x3b167: 0x6d166620, + 0x3b168: 0x6d166820, 0x3b169: 0x6d166a20, 0x3b16a: 0x6d166c20, 0x3b16b: 0x6d166e20, + 0x3b16c: 0x6d167020, 0x3b16d: 0x6d167220, 0x3b16e: 0x6d167420, 0x3b16f: 0x6d167620, + 0x3b170: 0x6cf59620, 0x3b171: 0x6d167820, 0x3b172: 0x6d167a20, 0x3b173: 0x6d167c20, + 0x3b174: 0x6d449420, 0x3b175: 0x6d449620, 0x3b176: 0x6d449820, 0x3b177: 0x6d449a20, + 0x3b178: 0x6d449c20, 0x3b179: 0x6d449e20, 0x3b17a: 0x6d44a020, 0x3b17b: 0x6d44a220, + 0x3b17c: 0x6d44a420, 0x3b17d: 0x6d44a620, 0x3b17e: 0x6d44a820, 0x3b17f: 0x6d44aa20, + // Block 0xec6, offset 0x3b180 + 0x3b180: 0x6d44ac20, 0x3b181: 0x6d44ae20, 0x3b182: 0x6d44b020, 0x3b183: 0x6d44b220, + 0x3b184: 0x6d717620, 0x3b185: 0x6d717820, 0x3b186: 0x6d717a20, 0x3b187: 0x6d717c20, + 0x3b188: 0x6d717e20, 0x3b189: 0x6d718020, 0x3b18a: 0x6d718220, 0x3b18b: 0x6d718420, + 0x3b18c: 0x6d718620, 0x3b18d: 0x6d718820, 0x3b18e: 0x6d718a20, 0x3b18f: 0x6d718c20, + 0x3b190: 0x6d718e20, 0x3b191: 0x6d719020, 0x3b192: 0x6d719220, 0x3b193: 0x6d9aca20, + 0x3b194: 0x6d9acc20, 0x3b195: 0x6d9ace20, 0x3b196: 0x6d9ad020, 0x3b197: 0x6d9ad220, + 0x3b198: 0x6d9ad420, 0x3b199: 0x6d9ad620, 0x3b19a: 0x6d9ad820, 0x3b19b: 0x6d9ada20, + 0x3b19c: 0x6d9adc20, 0x3b19d: 0x6d9ade20, 0x3b19e: 0x6d9ae020, 0x3b19f: 0x6d9ae220, + 0x3b1a0: 0x6d9ae420, 0x3b1a1: 0x6d9ae620, 0x3b1a2: 0x6d9ae820, 0x3b1a3: 0x6d9aea20, + 0x3b1a4: 0x6d9aec20, 0x3b1a5: 0x6d9aee20, 0x3b1a6: 0x6d9af020, 0x3b1a7: 0x6d9af220, + 0x3b1a8: 0x6dbd7c20, 0x3b1a9: 0x6dbd7e20, 0x3b1aa: 0x6dbd8020, 0x3b1ab: 0x6dbd8220, + 0x3b1ac: 0x6dbd8420, 0x3b1ad: 0x6dbd8620, 0x3b1ae: 0x6dbd8820, 0x3b1af: 0x6dbd8a20, + 0x3b1b0: 0x6dbd8c20, 0x3b1b1: 0x6dbd8e20, 0x3b1b2: 0x6dbd9020, 0x3b1b3: 0x6dbd9220, + 0x3b1b4: 0x6dbd9420, 0x3b1b5: 0x6dbd9620, 0x3b1b6: 0x6dbd9820, 0x3b1b7: 0x6dbd9a20, + 0x3b1b8: 0x6dbd9c20, 0x3b1b9: 0x6dbd9e20, 0x3b1ba: 0x6dbda020, 0x3b1bb: 0x6dbda220, + 0x3b1bc: 0x6dbda420, 0x3b1bd: 0x6dbda620, 0x3b1be: 0x6dbda820, 0x3b1bf: 0x6dbdaa20, + // Block 0xec7, offset 0x3b1c0 + 0x3b1c0: 0x6dbdac20, 0x3b1c1: 0x6dbdae20, 0x3b1c2: 0x6dbdb020, 0x3b1c3: 0x6dbdb220, + 0x3b1c4: 0x6dbdb420, 0x3b1c5: 0x6ddb5620, 0x3b1c6: 0x6ddb5820, 0x3b1c7: 0x6ddb5a20, + 0x3b1c8: 0x6ddb5c20, 0x3b1c9: 0x6ddb5e20, 0x3b1ca: 0x6ddb6020, 0x3b1cb: 0x6ddb6220, + 0x3b1cc: 0x6ddb6420, 0x3b1cd: 0x6ddb6620, 0x3b1ce: 0x6df34e20, 0x3b1cf: 0x6ddb6820, + 0x3b1d0: 0x6ddb6a20, 0x3b1d1: 0x6ddb6c20, 0x3b1d2: 0x6ddb6e20, 0x3b1d3: 0x6ddb7020, + 0x3b1d4: 0x6ddb7220, 0x3b1d5: 0x6ddb7420, 0x3b1d6: 0x6ddb7620, 0x3b1d7: 0x6ddb7820, + 0x3b1d8: 0x6ddb7a20, 0x3b1d9: 0x6ddb7c20, 0x3b1da: 0x6ddb7e20, 0x3b1db: 0x6ddb8020, + 0x3b1dc: 0x6df35020, 0x3b1dd: 0x6df35220, 0x3b1de: 0x6df35420, 0x3b1df: 0x6df35620, + 0x3b1e0: 0x6df35820, 0x3b1e1: 0x6df35a20, 0x3b1e2: 0x6df35c20, 0x3b1e3: 0x6df35e20, + 0x3b1e4: 0x6df36020, 0x3b1e5: 0x6df36220, 0x3b1e6: 0x6df36420, 0x3b1e7: 0x6df36620, + 0x3b1e8: 0x6df36820, 0x3b1e9: 0x6df36a20, 0x3b1ea: 0x6df36c20, 0x3b1eb: 0x6df36e20, + 0x3b1ec: 0x6df37020, 0x3b1ed: 0x6e075620, 0x3b1ee: 0x6e075820, 0x3b1ef: 0x6e075a20, + 0x3b1f0: 0x6e075c20, 0x3b1f1: 0x6e075e20, 0x3b1f2: 0x6e076020, 0x3b1f3: 0x6e076220, + 0x3b1f4: 0x6e076420, 0x3b1f5: 0x6e076620, 0x3b1f6: 0x6e076820, 0x3b1f7: 0x6e076a20, + 0x3b1f8: 0x6e17bc20, 0x3b1f9: 0x6e17be20, 0x3b1fa: 0x6e17c020, 0x3b1fb: 0x6e17c220, + 0x3b1fc: 0x6e17c420, 0x3b1fd: 0x6e17c620, 0x3b1fe: 0x6e17c820, 0x3b1ff: 0x6e17ca20, + // Block 0xec8, offset 0x3b200 + 0x3b200: 0x6e17cc20, 0x3b201: 0x6e17ce20, 0x3b202: 0x6e17d020, 0x3b203: 0x6e17d220, + 0x3b204: 0x6e17d420, 0x3b205: 0x6e17d620, 0x3b206: 0x6e17d820, 0x3b207: 0x6e17da20, + 0x3b208: 0x6e249220, 0x3b209: 0x6e249420, 0x3b20a: 0x6e249620, 0x3b20b: 0x6e249820, + 0x3b20c: 0x6e249a20, 0x3b20d: 0x6e249c20, 0x3b20e: 0x6e2e7020, 0x3b20f: 0x6e2e7220, + 0x3b210: 0x6e2e7420, 0x3b211: 0x6e35f420, 0x3b212: 0x6e35f620, 0x3b213: 0x6e35f820, + 0x3b214: 0x6e35fa20, 0x3b215: 0x6e35fc20, 0x3b216: 0x6e3b4220, 0x3b217: 0x6e3b4420, + 0x3b218: 0x6e3b4620, 0x3b219: 0x6e3b4820, 0x3b21a: 0x6e3b4a20, 0x3b21b: 0x6e3f0020, + 0x3b21c: 0x6e3f0220, 0x3b21d: 0x6e419020, 0x3b21e: 0x6e419220, 0x3b21f: 0x6e437220, + 0x3b220: 0x6e46d220, 0x3b221: 0x6e46f220, 0x3b222: 0x6e470c20, 0x3b223: 0x6e473420, + 0x3b224: 0x6e473a20, 0x3b225: 0x6c635620, 0x3b226: 0x6c635820, 0x3b227: 0x6cb6d220, + 0x3b228: 0x6ce79020, 0x3b229: 0x6ce79220, 0x3b22a: 0x6ce79420, 0x3b22b: 0x6d168220, + 0x3b22c: 0x6d168420, 0x3b22d: 0x6d44bc20, 0x3b22e: 0x6d44be20, 0x3b22f: 0x6d9af820, + 0x3b230: 0x6dbdb820, 0x3b231: 0x6c635e20, 0x3b232: 0x6d168820, 0x3b233: 0x6d44c020, + 0x3b234: 0x6d719620, 0x3b235: 0x6ddb8820, 0x3b236: 0x6df37820, 0x3b237: 0x6df37a20, + 0x3b238: 0x6df37c20, 0x3b239: 0x6e076c20, 0x3b23a: 0x6e17de20, 0x3b23b: 0x6e17e020, + 0x3b23c: 0x6e24a220, 0x3b23d: 0x6e24a420, 0x3b23e: 0x6e45ea20, 0x3b23f: 0x6c429020, + // Block 0xec9, offset 0x3b240 + 0x3b240: 0x6c429220, 0x3b241: 0x6c429420, 0x3b242: 0x6c636620, 0x3b243: 0x6c429620, + 0x3b244: 0x6c8a6e20, 0x3b245: 0x6c8a7020, 0x3b246: 0x6c8a7220, 0x3b247: 0x6cb6de20, + 0x3b248: 0x6cb6e020, 0x3b249: 0x6cb6e220, 0x3b24a: 0x6cb6e420, 0x3b24b: 0x6cb6e620, + 0x3b24c: 0x6cb6e820, 0x3b24d: 0x6cb6ea20, 0x3b24e: 0x6cb6ec20, 0x3b24f: 0x6cb6ee20, + 0x3b250: 0x6cb6f020, 0x3b251: 0x6cb6f220, 0x3b252: 0x6cb6f420, 0x3b253: 0x6cb6f620, + 0x3b254: 0x6cb6f820, 0x3b255: 0x6ce7b020, 0x3b256: 0x6ce7b220, 0x3b257: 0x6ce7b420, + 0x3b258: 0x6ce7b620, 0x3b259: 0x6ce7b820, 0x3b25a: 0x6ce7ba20, 0x3b25b: 0x6ce7bc20, + 0x3b25c: 0x6ce7be20, 0x3b25d: 0x6ce7c020, 0x3b25e: 0x6ce7c220, 0x3b25f: 0x6ce7c420, + 0x3b260: 0x6ce7c620, 0x3b261: 0x6ce7c820, 0x3b262: 0x6ce7ca20, 0x3b263: 0x6ce7cc20, + 0x3b264: 0x6ce7ce20, 0x3b265: 0x6ce7d020, 0x3b266: 0x6ce7d220, 0x3b267: 0x6ce7d420, + 0x3b268: 0x6d16b020, 0x3b269: 0x6d16b220, 0x3b26a: 0x6d16b420, 0x3b26b: 0x6d16b620, + 0x3b26c: 0x6d16b820, 0x3b26d: 0x6d16ba20, 0x3b26e: 0x6d16bc20, 0x3b26f: 0x6d16be20, + 0x3b270: 0x6d16c020, 0x3b271: 0x6d16c220, 0x3b272: 0x6d16c420, 0x3b273: 0x6d16c620, + 0x3b274: 0x6d16c820, 0x3b275: 0x6d16ca20, 0x3b276: 0x6d16cc20, 0x3b277: 0x6d16ce20, + 0x3b278: 0x6d16d020, 0x3b279: 0x6d16d220, 0x3b27a: 0x6d16d420, 0x3b27b: 0x6d16d620, + 0x3b27c: 0x6d16d820, 0x3b27d: 0x6d16da20, 0x3b27e: 0x6d16dc20, 0x3b27f: 0x6d16de20, + // Block 0xeca, offset 0x3b280 + 0x3b280: 0x6d16e020, 0x3b281: 0x6d16e220, 0x3b282: 0x6d16e420, 0x3b283: 0x6d16e620, + 0x3b284: 0x6d16e820, 0x3b285: 0x6d16ea20, 0x3b286: 0x6d16ec20, 0x3b287: 0x6d16ee20, + 0x3b288: 0x6d16f020, 0x3b289: 0x6d44f020, 0x3b28a: 0x6d44f220, 0x3b28b: 0x6d44f420, + 0x3b28c: 0x6d44f620, 0x3b28d: 0x6d44f820, 0x3b28e: 0x6d44fa20, 0x3b28f: 0x6d44fc20, + 0x3b290: 0x6d44fe20, 0x3b291: 0x6d450020, 0x3b292: 0x6d450220, 0x3b293: 0x6d450420, + 0x3b294: 0x6d450620, 0x3b295: 0x6d450820, 0x3b296: 0x6d450a20, 0x3b297: 0x6d450c20, + 0x3b298: 0x6d450e20, 0x3b299: 0x6d451020, 0x3b29a: 0x6d451220, 0x3b29b: 0x6d451420, + 0x3b29c: 0x6d451620, 0x3b29d: 0x6d71c220, 0x3b29e: 0x6d71c420, 0x3b29f: 0x6d71c620, + 0x3b2a0: 0x6d71c820, 0x3b2a1: 0x6d71ca20, 0x3b2a2: 0x6d71cc20, 0x3b2a3: 0x6d71ce20, + 0x3b2a4: 0x6d71d020, 0x3b2a5: 0x6d71d220, 0x3b2a6: 0x6d71d420, 0x3b2a7: 0x6d71d620, + 0x3b2a8: 0x6d71d820, 0x3b2a9: 0x6d71da20, 0x3b2aa: 0x6d71dc20, 0x3b2ab: 0x6d71de20, + 0x3b2ac: 0x6d71e020, 0x3b2ad: 0x6d71e220, 0x3b2ae: 0x6d71e420, 0x3b2af: 0x6d71e620, + 0x3b2b0: 0x6d71e820, 0x3b2b1: 0x6d71ea20, 0x3b2b2: 0x6d71ec20, 0x3b2b3: 0x6d71ee20, + 0x3b2b4: 0x6d71f020, 0x3b2b5: 0x6d71f220, 0x3b2b6: 0x6d71f420, 0x3b2b7: 0x6d71f620, + 0x3b2b8: 0x6d71f820, 0x3b2b9: 0x6d71fa20, 0x3b2ba: 0x6d9b2820, 0x3b2bb: 0x6d9b2a20, + 0x3b2bc: 0x6d9b2c20, 0x3b2bd: 0x6d9b2e20, 0x3b2be: 0x6d9b3020, 0x3b2bf: 0x6d9b3220, + // Block 0xecb, offset 0x3b2c0 + 0x3b2c0: 0x6d9b3420, 0x3b2c1: 0x6d9b3620, 0x3b2c2: 0x6d9b3820, 0x3b2c3: 0x6d9b3a20, + 0x3b2c4: 0x6d9b3c20, 0x3b2c5: 0x6d9b3e20, 0x3b2c6: 0x6d9b4020, 0x3b2c7: 0x6d9b4220, + 0x3b2c8: 0x6d9b4420, 0x3b2c9: 0x6d9b4620, 0x3b2ca: 0x6d9b4820, 0x3b2cb: 0x6d9b4a20, + 0x3b2cc: 0x6d9b4c20, 0x3b2cd: 0x6d9b4e20, 0x3b2ce: 0x6d9b5020, 0x3b2cf: 0x6d9b5220, + 0x3b2d0: 0x6d9b5420, 0x3b2d1: 0x6d9b5620, 0x3b2d2: 0x6d9b5820, 0x3b2d3: 0x6d9b5a20, + 0x3b2d4: 0x6d9b5c20, 0x3b2d5: 0x6d9b5e20, 0x3b2d6: 0x6d9b6020, 0x3b2d7: 0x6d9b6220, + 0x3b2d8: 0x6d9b6420, 0x3b2d9: 0x6d9b6620, 0x3b2da: 0x6d9b6820, 0x3b2db: 0x6d9b6a20, + 0x3b2dc: 0x6d9b6c20, 0x3b2dd: 0x6d9b6e20, 0x3b2de: 0x6d9b7020, 0x3b2df: 0x6d9b7220, + 0x3b2e0: 0x6d9b7420, 0x3b2e1: 0x6d9b7620, 0x3b2e2: 0x6d9b7820, 0x3b2e3: 0x6dbde220, + 0x3b2e4: 0x6d9b7a20, 0x3b2e5: 0x6d9b7c20, 0x3b2e6: 0x6d9b7e20, 0x3b2e7: 0x6d9b8020, + 0x3b2e8: 0x6d9b8220, 0x3b2e9: 0x6d9b8420, 0x3b2ea: 0x6d9b8620, 0x3b2eb: 0x6d9b8820, + 0x3b2ec: 0x6d9b8a20, 0x3b2ed: 0x6dbde420, 0x3b2ee: 0x6dbde620, 0x3b2ef: 0x6dbde820, + 0x3b2f0: 0x6dbdea20, 0x3b2f1: 0x6dbdec20, 0x3b2f2: 0x6dbdee20, 0x3b2f3: 0x6dbdf020, + 0x3b2f4: 0x6dbdf220, 0x3b2f5: 0x6dbdf420, 0x3b2f6: 0x6dbdf620, 0x3b2f7: 0x6dbdf820, + 0x3b2f8: 0x6dbdfa20, 0x3b2f9: 0x6dbdfc20, 0x3b2fa: 0x6dbdfe20, 0x3b2fb: 0x6dbe0020, + 0x3b2fc: 0x6dbe0220, 0x3b2fd: 0x6dbe0420, 0x3b2fe: 0x6dbe0620, 0x3b2ff: 0x6dbe0820, + // Block 0xecc, offset 0x3b300 + 0x3b300: 0x6dbe0a20, 0x3b301: 0x6dbe0c20, 0x3b302: 0x6dbe0e20, 0x3b303: 0x6dbe1020, + 0x3b304: 0x6dbe1220, 0x3b305: 0x6dbe1420, 0x3b306: 0x6dbe1620, 0x3b307: 0x6dbe1820, + 0x3b308: 0x6dbe1a20, 0x3b309: 0x6dbe1c20, 0x3b30a: 0x6dbe1e20, 0x3b30b: 0x6dbe2020, + 0x3b30c: 0x6dbe2220, 0x3b30d: 0x6dbe2420, 0x3b30e: 0x6dbe2620, 0x3b30f: 0x6dbe2820, + 0x3b310: 0x6dbe2a20, 0x3b311: 0x6dbe2c20, 0x3b312: 0x6dbe2e20, 0x3b313: 0x6dbe3020, + 0x3b314: 0x6dbe3220, 0x3b315: 0x6dbe3420, 0x3b316: 0x6dbe3620, 0x3b317: 0x6dbe3820, + 0x3b318: 0x6dbe3a20, 0x3b319: 0x6ddbb220, 0x3b31a: 0x6ddbb420, 0x3b31b: 0x6ddbb620, + 0x3b31c: 0x6ddbb820, 0x3b31d: 0x6ddbba20, 0x3b31e: 0x6ddbbc20, 0x3b31f: 0x6ddbbe20, + 0x3b320: 0x6ddbc020, 0x3b321: 0x6ddbc220, 0x3b322: 0x6ddbc420, 0x3b323: 0x6ddbc620, + 0x3b324: 0x6ddbc820, 0x3b325: 0x6ddbca20, 0x3b326: 0x6ddbcc20, 0x3b327: 0x6ddbce20, + 0x3b328: 0x6ddbd020, 0x3b329: 0x6ddbd220, 0x3b32a: 0x6ddbd420, 0x3b32b: 0x6ddbd620, + 0x3b32c: 0x6ddbd820, 0x3b32d: 0x6ddbda20, 0x3b32e: 0x6ddbdc20, 0x3b32f: 0x6ddbde20, + 0x3b330: 0x6ddbe020, 0x3b331: 0x6ddbe220, 0x3b332: 0x6ddbe420, 0x3b333: 0x6ddbe620, + 0x3b334: 0x6df39620, 0x3b335: 0x6ddbe820, 0x3b336: 0x6ddbea20, 0x3b337: 0x6ddbec20, + 0x3b338: 0x6ddbee20, 0x3b339: 0x6ddbf020, 0x3b33a: 0x6ddbf220, 0x3b33b: 0x6ddbf420, + 0x3b33c: 0x6ddbf620, 0x3b33d: 0x6df39820, 0x3b33e: 0x6df39a20, 0x3b33f: 0x6df39c20, + // Block 0xecd, offset 0x3b340 + 0x3b340: 0x6df39e20, 0x3b341: 0x6df3a020, 0x3b342: 0x6df3a220, 0x3b343: 0x6df3a420, + 0x3b344: 0x6df3a620, 0x3b345: 0x6df3a820, 0x3b346: 0x6df3aa20, 0x3b347: 0x6df3ac20, + 0x3b348: 0x6df3ae20, 0x3b349: 0x6df3b020, 0x3b34a: 0x6df3b220, 0x3b34b: 0x6df3b420, + 0x3b34c: 0x6df3b620, 0x3b34d: 0x6df3b820, 0x3b34e: 0x6df3ba20, 0x3b34f: 0x6df3bc20, + 0x3b350: 0x6df3be20, 0x3b351: 0x6df3c020, 0x3b352: 0x6df3c220, 0x3b353: 0x6df3c420, + 0x3b354: 0x6df3c620, 0x3b355: 0x6df3c820, 0x3b356: 0x6df3ca20, 0x3b357: 0x6df3cc20, + 0x3b358: 0x6df3ce20, 0x3b359: 0x6df3d020, 0x3b35a: 0x6df3d220, 0x3b35b: 0x6df3d420, + 0x3b35c: 0x6df3d620, 0x3b35d: 0x6df3d820, 0x3b35e: 0x6df3da20, 0x3b35f: 0x6df3dc20, + 0x3b360: 0x6df3de20, 0x3b361: 0x6e078820, 0x3b362: 0x6e078a20, 0x3b363: 0x6e078c20, + 0x3b364: 0x6e078e20, 0x3b365: 0x6e079020, 0x3b366: 0x6e079220, 0x3b367: 0x6e079420, + 0x3b368: 0x6e079620, 0x3b369: 0x6e079820, 0x3b36a: 0x6e079a20, 0x3b36b: 0x6e079c20, + 0x3b36c: 0x6e079e20, 0x3b36d: 0x6e07a020, 0x3b36e: 0x6e07a220, 0x3b36f: 0x6e07a420, + 0x3b370: 0x6e07a620, 0x3b371: 0x6e07a820, 0x3b372: 0x6e07aa20, 0x3b373: 0x6e07ac20, + 0x3b374: 0x6e07ae20, 0x3b375: 0x6e07b020, 0x3b376: 0x6e17f420, 0x3b377: 0x6e07b220, + 0x3b378: 0x6e07b420, 0x3b379: 0x6e07b620, 0x3b37a: 0x6e07b820, 0x3b37b: 0x6e07ba20, + 0x3b37c: 0x6e07bc20, 0x3b37d: 0x6e07be20, 0x3b37e: 0x6e17f620, 0x3b37f: 0x6e17f820, + // Block 0xece, offset 0x3b380 + 0x3b380: 0x6e17fa20, 0x3b381: 0x6e17fc20, 0x3b382: 0x6e17fe20, 0x3b383: 0x6e180020, + 0x3b384: 0x6e180220, 0x3b385: 0x6e180420, 0x3b386: 0x6e180620, 0x3b387: 0x6e180820, + 0x3b388: 0x6e180a20, 0x3b389: 0x6e180c20, 0x3b38a: 0x6e180e20, 0x3b38b: 0x6e181020, + 0x3b38c: 0x6e181220, 0x3b38d: 0x6e181420, 0x3b38e: 0x6e181620, 0x3b38f: 0x6e181820, + 0x3b390: 0x6e181a20, 0x3b391: 0x6e181c20, 0x3b392: 0x6e181e20, 0x3b393: 0x6e24b620, + 0x3b394: 0x6e24b820, 0x3b395: 0x6e24ba20, 0x3b396: 0x6e24bc20, 0x3b397: 0x6e24be20, + 0x3b398: 0x6e24c020, 0x3b399: 0x6e24c220, 0x3b39a: 0x6e24c420, 0x3b39b: 0x6e24c620, + 0x3b39c: 0x6e24c820, 0x3b39d: 0x6e24ca20, 0x3b39e: 0x6e24cc20, 0x3b39f: 0x6e24ce20, + 0x3b3a0: 0x6e24d020, 0x3b3a1: 0x6e24d220, 0x3b3a2: 0x6e24d420, 0x3b3a3: 0x6e24d620, + 0x3b3a4: 0x6e2e8420, 0x3b3a5: 0x6e2e8620, 0x3b3a6: 0x6e2e8820, 0x3b3a7: 0x6e2e8a20, + 0x3b3a8: 0x6e2e8c20, 0x3b3a9: 0x6e2e8e20, 0x3b3aa: 0x6e2e9020, 0x3b3ab: 0x6e2e9220, + 0x3b3ac: 0x6e2e9420, 0x3b3ad: 0x6e360420, 0x3b3ae: 0x6e360620, 0x3b3af: 0x6e360820, + 0x3b3b0: 0x6e360a20, 0x3b3b1: 0x6e360c20, 0x3b3b2: 0x6e360e20, 0x3b3b3: 0x6e361020, + 0x3b3b4: 0x6e361220, 0x3b3b5: 0x6e361420, 0x3b3b6: 0x6e3b5020, 0x3b3b7: 0x6e3f0820, + 0x3b3b8: 0x6e3f0a20, 0x3b3b9: 0x6e3f0c20, 0x3b3ba: 0x6e3f0e20, 0x3b3bb: 0x6e44bc20, + 0x3b3bc: 0x6e457420, 0x3b3bd: 0x6e465220, 0x3b3be: 0x6c288e20, 0x3b3bf: 0x6c289020, + // Block 0xecf, offset 0x3b3c0 + 0x3b3c0: 0x6c289220, 0x3b3c1: 0x6c42a420, 0x3b3c2: 0x6c42a620, 0x3b3c3: 0x6c637820, + 0x3b3c4: 0x6c8a8020, 0x3b3c5: 0x6c8a8220, 0x3b3c6: 0x6cb70220, 0x3b3c7: 0x6c8a8420, + 0x3b3c8: 0x6cb70420, 0x3b3c9: 0x6cb70620, 0x3b3ca: 0x6ce7e020, 0x3b3cb: 0x6ce7e220, + 0x3b3cc: 0x6d170020, 0x3b3cd: 0x6d452420, 0x3b3ce: 0x6d452620, 0x3b3cf: 0x6d720220, + 0x3b3d0: 0x6c638020, 0x3b3d1: 0x6cb70e20, 0x3b3d2: 0x6cb71020, 0x3b3d3: 0x6ce7ee20, + 0x3b3d4: 0x6d170620, 0x3b3d5: 0x6d452820, 0x3b3d6: 0x6d452a20, 0x3b3d7: 0x6d452c20, + 0x3b3d8: 0x6d452e20, 0x3b3d9: 0x6d453020, 0x3b3da: 0x6d720c20, 0x3b3db: 0x6d720e20, + 0x3b3dc: 0x6d721020, 0x3b3dd: 0x6d721220, 0x3b3de: 0x6d721420, 0x3b3df: 0x6d721620, + 0x3b3e0: 0x6d721820, 0x3b3e1: 0x6d9b9020, 0x3b3e2: 0x6d9b9220, 0x3b3e3: 0x6d9b9420, + 0x3b3e4: 0x6d9b9620, 0x3b3e5: 0x6d9b9820, 0x3b3e6: 0x6d9b9a20, 0x3b3e7: 0x6d9b9c20, + 0x3b3e8: 0x6dbe4a20, 0x3b3e9: 0x6dbe4c20, 0x3b3ea: 0x6ddbfc20, 0x3b3eb: 0x6ddbfe20, + 0x3b3ec: 0x6ddc0020, 0x3b3ed: 0x6ddc0220, 0x3b3ee: 0x6de36c20, 0x3b3ef: 0x6df3e620, + 0x3b3f0: 0x6dface20, 0x3b3f1: 0x6df3e820, 0x3b3f2: 0x6e07c620, 0x3b3f3: 0x6e182220, + 0x3b3f4: 0x6e24dc20, 0x3b3f5: 0x6e2e9620, 0x3b3f6: 0x6e2e9820, 0x3b3f7: 0x6e361620, + 0x3b3f8: 0x6e3b5420, 0x3b3f9: 0x6e419c20, 0x3b3fa: 0x6c8a8c20, 0x3b3fb: 0x6d170a20, + 0x3b3fc: 0x6d170c20, 0x3b3fd: 0x6d170e20, 0x3b3fe: 0x6d453c20, 0x3b3ff: 0x6d453e20, + // Block 0xed0, offset 0x3b400 + 0x3b400: 0x6d454020, 0x3b401: 0x6d454220, 0x3b402: 0x6d721a20, 0x3b403: 0x6d454420, + 0x3b404: 0x6d454620, 0x3b405: 0x6d721c20, 0x3b406: 0x6d721e20, 0x3b407: 0x6d9ba620, + 0x3b408: 0x6d9ba820, 0x3b409: 0x6dbe5c20, 0x3b40a: 0x6dbe5e20, 0x3b40b: 0x6dbe6020, + 0x3b40c: 0x6ddc0820, 0x3b40d: 0x6ddc0a20, 0x3b40e: 0x6ddc0c20, 0x3b40f: 0x6dbe6220, + 0x3b410: 0x6ddc0e20, 0x3b411: 0x6ddc1020, 0x3b412: 0x6ddc1220, 0x3b413: 0x6df3f020, + 0x3b414: 0x6df3f220, 0x3b415: 0x6df3f420, 0x3b416: 0x6df3f620, 0x3b417: 0x6df3f820, + 0x3b418: 0x6df3fa20, 0x3b419: 0x6e07cc20, 0x3b41a: 0x6e07ce20, 0x3b41b: 0x6e07d020, + 0x3b41c: 0x6e07d220, 0x3b41d: 0x6e182620, 0x3b41e: 0x6e182820, 0x3b41f: 0x6e182a20, + 0x3b420: 0x6e182c20, 0x3b421: 0x6e182e20, 0x3b422: 0x6e24de20, 0x3b423: 0x6e24e020, + 0x3b424: 0x6e2e9c20, 0x3b425: 0x6e3f1020, 0x3b426: 0x6e437620, 0x3b427: 0x6c8a9020, + 0x3b428: 0x6cb71220, 0x3b429: 0x6ce7f620, 0x3b42a: 0x6ce7f820, 0x3b42b: 0x6ce7fa20, + 0x3b42c: 0x6ce7fc20, 0x3b42d: 0x6ce7fe20, 0x3b42e: 0x6ce80020, 0x3b42f: 0x6ce80220, + 0x3b430: 0x6d172220, 0x3b431: 0x6d172420, 0x3b432: 0x6d172620, 0x3b433: 0x6d172820, + 0x3b434: 0x6d172a20, 0x3b435: 0x6d172c20, 0x3b436: 0x6d172e20, 0x3b437: 0x6d457c20, + 0x3b438: 0x6d457e20, 0x3b439: 0x6d458020, 0x3b43a: 0x6d458220, 0x3b43b: 0x6d458420, + 0x3b43c: 0x6d458620, 0x3b43d: 0x6d458820, 0x3b43e: 0x6d458a20, 0x3b43f: 0x6d726420, + // Block 0xed1, offset 0x3b440 + 0x3b440: 0x6d458c20, 0x3b441: 0x6d458e20, 0x3b442: 0x6d459020, 0x3b443: 0x6d459220, + 0x3b444: 0x6d459420, 0x3b445: 0x6d459620, 0x3b446: 0x6d726620, 0x3b447: 0x6d459820, + 0x3b448: 0x6d459a20, 0x3b449: 0x6d459c20, 0x3b44a: 0x6d459e20, 0x3b44b: 0x6d45a020, + 0x3b44c: 0x6d45a220, 0x3b44d: 0x6d726820, 0x3b44e: 0x6d726a20, 0x3b44f: 0x6d726c20, + 0x3b450: 0x6d726e20, 0x3b451: 0x6d727020, 0x3b452: 0x6d727220, 0x3b453: 0x6d727420, + 0x3b454: 0x6d727620, 0x3b455: 0x6d727820, 0x3b456: 0x6d727a20, 0x3b457: 0x6d727c20, + 0x3b458: 0x6d727e20, 0x3b459: 0x6d728020, 0x3b45a: 0x6d728220, 0x3b45b: 0x6d728420, + 0x3b45c: 0x6d728620, 0x3b45d: 0x6d728820, 0x3b45e: 0x6d728a20, 0x3b45f: 0x6d728c20, + 0x3b460: 0x6d728e20, 0x3b461: 0x6d729020, 0x3b462: 0x6d729220, 0x3b463: 0x6d729420, + 0x3b464: 0x6d729620, 0x3b465: 0x6d729820, 0x3b466: 0x6d729a20, 0x3b467: 0x6d729c20, + 0x3b468: 0x6d729e20, 0x3b469: 0x6d72a020, 0x3b46a: 0x6d72a220, 0x3b46b: 0x6d72a420, + 0x3b46c: 0x6d72a620, 0x3b46d: 0x6d72a820, 0x3b46e: 0x6d9bde20, 0x3b46f: 0x6d9be020, + 0x3b470: 0x6d9be220, 0x3b471: 0x6d9be420, 0x3b472: 0x6d9be620, 0x3b473: 0x6d9be820, + 0x3b474: 0x6d9bea20, 0x3b475: 0x6d9bec20, 0x3b476: 0x6d9bee20, 0x3b477: 0x6d9bf020, + 0x3b478: 0x6d9bf220, 0x3b479: 0x6d9bf420, 0x3b47a: 0x6d9bf620, 0x3b47b: 0x6d9bf820, + 0x3b47c: 0x6d9bfa20, 0x3b47d: 0x6d9bfc20, 0x3b47e: 0x6d9bfe20, 0x3b47f: 0x6d9c0020, + // Block 0xed2, offset 0x3b480 + 0x3b480: 0x6d9c0220, 0x3b481: 0x6d9c0420, 0x3b482: 0x6d9c0620, 0x3b483: 0x6d9c0820, + 0x3b484: 0x6d9c0a20, 0x3b485: 0x6d9c0c20, 0x3b486: 0x6d9c0e20, 0x3b487: 0x6d9c1020, + 0x3b488: 0x6d9c1220, 0x3b489: 0x6d9c1420, 0x3b48a: 0x6d9c1620, 0x3b48b: 0x6d9c1820, + 0x3b48c: 0x6d9c1a20, 0x3b48d: 0x6d9c1c20, 0x3b48e: 0x6d9c1e20, 0x3b48f: 0x6d9c2020, + 0x3b490: 0x6d9c2220, 0x3b491: 0x6d9c2420, 0x3b492: 0x6d9c2620, 0x3b493: 0x6d9c2820, + 0x3b494: 0x6d9c2a20, 0x3b495: 0x6d9c2c20, 0x3b496: 0x6dbe9020, 0x3b497: 0x6dbe9220, + 0x3b498: 0x6dbe9420, 0x3b499: 0x6dbe9620, 0x3b49a: 0x6dbe9820, 0x3b49b: 0x6dbe9a20, + 0x3b49c: 0x6dbe9c20, 0x3b49d: 0x6dbe9e20, 0x3b49e: 0x6dbea020, 0x3b49f: 0x6dbea220, + 0x3b4a0: 0x6dbea420, 0x3b4a1: 0x6dbea620, 0x3b4a2: 0x6dbea820, 0x3b4a3: 0x6dbeaa20, + 0x3b4a4: 0x6dbeac20, 0x3b4a5: 0x6dbeae20, 0x3b4a6: 0x6dbeb020, 0x3b4a7: 0x6dbeb220, + 0x3b4a8: 0x6dbeb420, 0x3b4a9: 0x6dbeb620, 0x3b4aa: 0x6dbeb820, 0x3b4ab: 0x6dbeba20, + 0x3b4ac: 0x6dbebc20, 0x3b4ad: 0x6ddc4820, 0x3b4ae: 0x6ddc4a20, 0x3b4af: 0x6ddc4c20, + 0x3b4b0: 0x6ddc4e20, 0x3b4b1: 0x6ddc5020, 0x3b4b2: 0x6ddc5220, 0x3b4b3: 0x6ddc5420, + 0x3b4b4: 0x6ddc5620, 0x3b4b5: 0x6ddc5820, 0x3b4b6: 0x6ddc5a20, 0x3b4b7: 0x6ddc5c20, + 0x3b4b8: 0x6ddc5e20, 0x3b4b9: 0x6ddc6020, 0x3b4ba: 0x6ddc6220, 0x3b4bb: 0x6ddc6420, + 0x3b4bc: 0x6ddc6620, 0x3b4bd: 0x6ddc6820, 0x3b4be: 0x6ddc6a20, 0x3b4bf: 0x6ddc6c20, + // Block 0xed3, offset 0x3b4c0 + 0x3b4c0: 0x6ddc6e20, 0x3b4c1: 0x6ddc7020, 0x3b4c2: 0x6ddc7220, 0x3b4c3: 0x6ddc7420, + 0x3b4c4: 0x6ddc7620, 0x3b4c5: 0x6ddc7820, 0x3b4c6: 0x6ddc7a20, 0x3b4c7: 0x6ddc7c20, + 0x3b4c8: 0x6ddc7e20, 0x3b4c9: 0x6ddc8020, 0x3b4ca: 0x6ddc8220, 0x3b4cb: 0x6ddc8420, + 0x3b4cc: 0x6ddc8620, 0x3b4cd: 0x6ddc8820, 0x3b4ce: 0x6ddc8a20, 0x3b4cf: 0x6ddc8c20, + 0x3b4d0: 0x6ddc8e20, 0x3b4d1: 0x6ddc9020, 0x3b4d2: 0x6ddc9220, 0x3b4d3: 0x6ddc9420, + 0x3b4d4: 0x6ddc9620, 0x3b4d5: 0x6ddc9820, 0x3b4d6: 0x6ddc9a20, 0x3b4d7: 0x6df43420, + 0x3b4d8: 0x6df43620, 0x3b4d9: 0x6df43820, 0x3b4da: 0x6df43a20, 0x3b4db: 0x6df43c20, + 0x3b4dc: 0x6df43e20, 0x3b4dd: 0x6df44020, 0x3b4de: 0x6ddc9c20, 0x3b4df: 0x6df44220, + 0x3b4e0: 0x6df44420, 0x3b4e1: 0x6df44620, 0x3b4e2: 0x6df44820, 0x3b4e3: 0x6df44a20, + 0x3b4e4: 0x6df44c20, 0x3b4e5: 0x6df44e20, 0x3b4e6: 0x6df45020, 0x3b4e7: 0x6df45220, + 0x3b4e8: 0x6df45420, 0x3b4e9: 0x6df45620, 0x3b4ea: 0x6df45820, 0x3b4eb: 0x6df45a20, + 0x3b4ec: 0x6df45c20, 0x3b4ed: 0x6df45e20, 0x3b4ee: 0x6df46020, 0x3b4ef: 0x6df46220, + 0x3b4f0: 0x6df46420, 0x3b4f1: 0x6df46620, 0x3b4f2: 0x6df46820, 0x3b4f3: 0x6df46a20, + 0x3b4f4: 0x6df46c20, 0x3b4f5: 0x6df46e20, 0x3b4f6: 0x6df47020, 0x3b4f7: 0x6dbebe20, + 0x3b4f8: 0x6df47220, 0x3b4f9: 0x6df47420, 0x3b4fa: 0x6df47620, 0x3b4fb: 0x6df47820, + 0x3b4fc: 0x6df47a20, 0x3b4fd: 0x6e080620, 0x3b4fe: 0x6e080820, 0x3b4ff: 0x6e080a20, + // Block 0xed4, offset 0x3b500 + 0x3b500: 0x6e080c20, 0x3b501: 0x6e080e20, 0x3b502: 0x6e081020, 0x3b503: 0x6e081220, + 0x3b504: 0x6e081420, 0x3b505: 0x6e081620, 0x3b506: 0x6e081820, 0x3b507: 0x6e081a20, + 0x3b508: 0x6e081c20, 0x3b509: 0x6e081e20, 0x3b50a: 0x6e082020, 0x3b50b: 0x6e082220, + 0x3b50c: 0x6e082420, 0x3b50d: 0x6e082620, 0x3b50e: 0x6e082820, 0x3b50f: 0x6e082a20, + 0x3b510: 0x6e082c20, 0x3b511: 0x6e082e20, 0x3b512: 0x6e083020, 0x3b513: 0x6e083220, + 0x3b514: 0x6e083420, 0x3b515: 0x6e083620, 0x3b516: 0x6e083820, 0x3b517: 0x6e083a20, + 0x3b518: 0x6e083c20, 0x3b519: 0x6e083e20, 0x3b51a: 0x6e084020, 0x3b51b: 0x6e084220, + 0x3b51c: 0x6e084420, 0x3b51d: 0x6e084620, 0x3b51e: 0x6e084820, 0x3b51f: 0x6e084a20, + 0x3b520: 0x6e084c20, 0x3b521: 0x6e084e20, 0x3b522: 0x6e085020, 0x3b523: 0x6e085220, + 0x3b524: 0x6e085420, 0x3b525: 0x6e085620, 0x3b526: 0x6e085820, 0x3b527: 0x6e085a20, + 0x3b528: 0x6e085c20, 0x3b529: 0x6e085e20, 0x3b52a: 0x6e086020, 0x3b52b: 0x6e186220, + 0x3b52c: 0x6e186420, 0x3b52d: 0x6e186620, 0x3b52e: 0x6e186820, 0x3b52f: 0x6e186a20, + 0x3b530: 0x6e186c20, 0x3b531: 0x6e186e20, 0x3b532: 0x6e187020, 0x3b533: 0x6e187220, + 0x3b534: 0x6e187420, 0x3b535: 0x6e187620, 0x3b536: 0x6e187820, 0x3b537: 0x6e187a20, + 0x3b538: 0x6e187c20, 0x3b539: 0x6e187e20, 0x3b53a: 0x6e188020, 0x3b53b: 0x6e188220, + 0x3b53c: 0x6e188420, 0x3b53d: 0x6e188620, 0x3b53e: 0x6e188820, 0x3b53f: 0x6e188a20, + // Block 0xed5, offset 0x3b540 + 0x3b540: 0x6e188c20, 0x3b541: 0x6e188e20, 0x3b542: 0x6e250a20, 0x3b543: 0x6e250c20, + 0x3b544: 0x6e250e20, 0x3b545: 0x6e251020, 0x3b546: 0x6e251220, 0x3b547: 0x6e251420, + 0x3b548: 0x6e251620, 0x3b549: 0x6e251820, 0x3b54a: 0x6e251a20, 0x3b54b: 0x6e251c20, + 0x3b54c: 0x6e251e20, 0x3b54d: 0x6e252020, 0x3b54e: 0x6e252220, 0x3b54f: 0x6e252420, + 0x3b550: 0x6e252620, 0x3b551: 0x6e252820, 0x3b552: 0x6e252a20, 0x3b553: 0x6e252c20, + 0x3b554: 0x6e252e20, 0x3b555: 0x6e253020, 0x3b556: 0x6e253220, 0x3b557: 0x6e253420, + 0x3b558: 0x6e253620, 0x3b559: 0x6e253820, 0x3b55a: 0x6e253a20, 0x3b55b: 0x6e253c20, + 0x3b55c: 0x6e253e20, 0x3b55d: 0x6e254020, 0x3b55e: 0x6e2eb220, 0x3b55f: 0x6e2eb420, + 0x3b560: 0x6e2eb620, 0x3b561: 0x6e2eb820, 0x3b562: 0x6e2eba20, 0x3b563: 0x6e2ebc20, + 0x3b564: 0x6e2ebe20, 0x3b565: 0x6e2ec020, 0x3b566: 0x6e2ec220, 0x3b567: 0x6e2ec420, + 0x3b568: 0x6e2ec620, 0x3b569: 0x6e2ec820, 0x3b56a: 0x6e2eca20, 0x3b56b: 0x6e2ecc20, + 0x3b56c: 0x6e2ece20, 0x3b56d: 0x6e2ed020, 0x3b56e: 0x6e2ed220, 0x3b56f: 0x6e2ed420, + 0x3b570: 0x6e2ed620, 0x3b571: 0x6e2ed820, 0x3b572: 0x6e2eda20, 0x3b573: 0x6e2edc20, + 0x3b574: 0x6e2ede20, 0x3b575: 0x6e2ee020, 0x3b576: 0x6e362820, 0x3b577: 0x6e362a20, + 0x3b578: 0x6e362c20, 0x3b579: 0x6e362e20, 0x3b57a: 0x6e363020, 0x3b57b: 0x6e363220, + 0x3b57c: 0x6e363420, 0x3b57d: 0x6e363620, 0x3b57e: 0x6e363820, 0x3b57f: 0x6e363a20, + // Block 0xed6, offset 0x3b580 + 0x3b580: 0x6e363c20, 0x3b581: 0x6e363e20, 0x3b582: 0x6e3b5820, 0x3b583: 0x6e3b5a20, + 0x3b584: 0x6e3b5c20, 0x3b585: 0x6e3b5e20, 0x3b586: 0x6e3b6020, 0x3b587: 0x6e3b6220, + 0x3b588: 0x6e3b6420, 0x3b589: 0x6e3b6620, 0x3b58a: 0x6e3b6820, 0x3b58b: 0x6e3b6a20, + 0x3b58c: 0x6e3b6c20, 0x3b58d: 0x6e3b6e20, 0x3b58e: 0x6e3b7020, 0x3b58f: 0x6e3f1c20, + 0x3b590: 0x6e3f1e20, 0x3b591: 0x6e3f2020, 0x3b592: 0x6e3f2220, 0x3b593: 0x6e3f2420, + 0x3b594: 0x6e41ac20, 0x3b595: 0x6e41ae20, 0x3b596: 0x6e41b020, 0x3b597: 0x6e41b220, + 0x3b598: 0x6e437e20, 0x3b599: 0x6e438020, 0x3b59a: 0x6e438220, 0x3b59b: 0x6e438420, + 0x3b59c: 0x6e438620, 0x3b59d: 0x6e438820, 0x3b59e: 0x6e438a20, 0x3b59f: 0x6e44c420, + 0x3b5a0: 0x6e44c620, 0x3b5a1: 0x6e457820, 0x3b5a2: 0x6e457a20, 0x3b5a3: 0x6e45ec20, + 0x3b5a4: 0x6e45ee20, 0x3b5a5: 0x6e46f420, 0x3b5a6: 0x6c28a020, 0x3b5a7: 0x6c42c620, + 0x3b5a8: 0x6c42c820, 0x3b5a9: 0x6c42ca20, 0x3b5aa: 0x6c42cc20, 0x3b5ab: 0x6c42ce20, + 0x3b5ac: 0x6c42d020, 0x3b5ad: 0x6c42d220, 0x3b5ae: 0x6c639620, 0x3b5af: 0x6c42d420, + 0x3b5b0: 0x6c639820, 0x3b5b1: 0x6c639a20, 0x3b5b2: 0x6c639c20, 0x3b5b3: 0x6c639e20, + 0x3b5b4: 0x6c63a020, 0x3b5b5: 0x6c63a220, 0x3b5b6: 0x6c63a420, 0x3b5b7: 0x6c8aa020, + 0x3b5b8: 0x6c8aa220, 0x3b5b9: 0x6c8aa420, 0x3b5ba: 0x6c8aa620, 0x3b5bb: 0x6cb72220, + 0x3b5bc: 0x6cb72420, 0x3b5bd: 0x6cb72620, 0x3b5be: 0x6ce80e20, 0x3b5bf: 0x6ce81020, + // Block 0xed7, offset 0x3b5c0 + 0x3b5c0: 0x6ce81220, 0x3b5c1: 0x6ce81420, 0x3b5c2: 0x6ce81620, 0x3b5c3: 0x6ce81820, + 0x3b5c4: 0x6d173a20, 0x3b5c5: 0x6ce81a20, 0x3b5c6: 0x6ce81c20, 0x3b5c7: 0x6ce81e20, + 0x3b5c8: 0x6ce82020, 0x3b5c9: 0x6ce82220, 0x3b5ca: 0x6ce82420, 0x3b5cb: 0x6d173c20, + 0x3b5cc: 0x6d173e20, 0x3b5cd: 0x6d174020, 0x3b5ce: 0x6d72ac20, 0x3b5cf: 0x6d72ae20, + 0x3b5d0: 0x6ddca620, 0x3b5d1: 0x6cb73020, 0x3b5d2: 0x6cb73220, 0x3b5d3: 0x6cb73420, + 0x3b5d4: 0x6ce82e20, 0x3b5d5: 0x6ce83020, 0x3b5d6: 0x6ce83220, 0x3b5d7: 0x6ce83420, + 0x3b5d8: 0x6ce83620, 0x3b5d9: 0x6ce83820, 0x3b5da: 0x6ce83a20, 0x3b5db: 0x6ce83c20, + 0x3b5dc: 0x6d175220, 0x3b5dd: 0x6d175420, 0x3b5de: 0x6d175620, 0x3b5df: 0x6d175820, + 0x3b5e0: 0x6d175a20, 0x3b5e1: 0x6d175c20, 0x3b5e2: 0x6d175e20, 0x3b5e3: 0x6d176020, + 0x3b5e4: 0x6d176220, 0x3b5e5: 0x6d176420, 0x3b5e6: 0x6d176620, 0x3b5e7: 0x6d176820, + 0x3b5e8: 0x6d176a20, 0x3b5e9: 0x6d176c20, 0x3b5ea: 0x6d176e20, 0x3b5eb: 0x6d177020, + 0x3b5ec: 0x6d45c220, 0x3b5ed: 0x6d45c420, 0x3b5ee: 0x6d45c620, 0x3b5ef: 0x6d45c820, + 0x3b5f0: 0x6d45ca20, 0x3b5f1: 0x6d45cc20, 0x3b5f2: 0x6d45ce20, 0x3b5f3: 0x6d45d020, + 0x3b5f4: 0x6d45d220, 0x3b5f5: 0x6d45d420, 0x3b5f6: 0x6d45d620, 0x3b5f7: 0x6d45d820, + 0x3b5f8: 0x6d45da20, 0x3b5f9: 0x6d45dc20, 0x3b5fa: 0x6d45de20, 0x3b5fb: 0x6d45e020, + 0x3b5fc: 0x6d45e220, 0x3b5fd: 0x6d72c820, 0x3b5fe: 0x6d72ca20, 0x3b5ff: 0x6d72cc20, + // Block 0xed8, offset 0x3b600 + 0x3b600: 0x6d72ce20, 0x3b601: 0x6d72d020, 0x3b602: 0x6d72d220, 0x3b603: 0x6d72d420, + 0x3b604: 0x6d72d620, 0x3b605: 0x6d72d820, 0x3b606: 0x6d72da20, 0x3b607: 0x6d72dc20, + 0x3b608: 0x6d72de20, 0x3b609: 0x6d9c4c20, 0x3b60a: 0x6d9c4e20, 0x3b60b: 0x6d9c5020, + 0x3b60c: 0x6d9c5220, 0x3b60d: 0x6d9c5420, 0x3b60e: 0x6d9c5620, 0x3b60f: 0x6d9c5820, + 0x3b610: 0x6d9c5a20, 0x3b611: 0x6d9c5c20, 0x3b612: 0x6d9c5e20, 0x3b613: 0x6d9c6020, + 0x3b614: 0x6d9c6220, 0x3b615: 0x6d9c6420, 0x3b616: 0x6d9c6620, 0x3b617: 0x6dbed620, + 0x3b618: 0x6dbed820, 0x3b619: 0x6dbeda20, 0x3b61a: 0x6dbedc20, 0x3b61b: 0x6dbede20, + 0x3b61c: 0x6dbee020, 0x3b61d: 0x6dbee220, 0x3b61e: 0x6dbee420, 0x3b61f: 0x6dbee620, + 0x3b620: 0x6dbee820, 0x3b621: 0x6dbeea20, 0x3b622: 0x6dbeec20, 0x3b623: 0x6dbeee20, + 0x3b624: 0x6dbef020, 0x3b625: 0x6dbef220, 0x3b626: 0x6dbef420, 0x3b627: 0x6dbef620, + 0x3b628: 0x6dbef820, 0x3b629: 0x6dbefa20, 0x3b62a: 0x6dbefc20, 0x3b62b: 0x6dbefe20, + 0x3b62c: 0x6dbf0020, 0x3b62d: 0x6ddcb020, 0x3b62e: 0x6ddcb220, 0x3b62f: 0x6ddcb420, + 0x3b630: 0x6ddcb620, 0x3b631: 0x6ddcb820, 0x3b632: 0x6ddcba20, 0x3b633: 0x6ddcbc20, + 0x3b634: 0x6ddcbe20, 0x3b635: 0x6ddcc020, 0x3b636: 0x6ddcc220, 0x3b637: 0x6ddcc420, + 0x3b638: 0x6ddcc620, 0x3b639: 0x6ddcc820, 0x3b63a: 0x6ddcca20, 0x3b63b: 0x6ddccc20, + 0x3b63c: 0x6ddcce20, 0x3b63d: 0x6ddcd020, 0x3b63e: 0x6ddcd220, 0x3b63f: 0x6ddcd420, + // Block 0xed9, offset 0x3b640 + 0x3b640: 0x6df49220, 0x3b641: 0x6df49420, 0x3b642: 0x6df49620, 0x3b643: 0x6df49820, + 0x3b644: 0x6df49a20, 0x3b645: 0x6df49c20, 0x3b646: 0x6df49e20, 0x3b647: 0x6df4a020, + 0x3b648: 0x6df4a220, 0x3b649: 0x6e088420, 0x3b64a: 0x6e088620, 0x3b64b: 0x6e088820, + 0x3b64c: 0x6e088a20, 0x3b64d: 0x6e088c20, 0x3b64e: 0x6e088e20, 0x3b64f: 0x6e089020, + 0x3b650: 0x6e089220, 0x3b651: 0x6e089420, 0x3b652: 0x6e089620, 0x3b653: 0x6e089820, + 0x3b654: 0x6e089a20, 0x3b655: 0x6e089c20, 0x3b656: 0x6e089e20, 0x3b657: 0x6e189a20, + 0x3b658: 0x6e189c20, 0x3b659: 0x6e189e20, 0x3b65a: 0x6e18a020, 0x3b65b: 0x6e18a220, + 0x3b65c: 0x6e18a420, 0x3b65d: 0x6e18a620, 0x3b65e: 0x6e18a820, 0x3b65f: 0x6e18aa20, + 0x3b660: 0x6e254a20, 0x3b661: 0x6e254c20, 0x3b662: 0x6e254e20, 0x3b663: 0x6e255020, + 0x3b664: 0x6e255220, 0x3b665: 0x6e255420, 0x3b666: 0x6e255620, 0x3b667: 0x6e255820, + 0x3b668: 0x6e255a20, 0x3b669: 0x6e255c20, 0x3b66a: 0x6e255e20, 0x3b66b: 0x6e256020, + 0x3b66c: 0x6e2eec20, 0x3b66d: 0x6e2eee20, 0x3b66e: 0x6e2ef020, 0x3b66f: 0x6e2ef220, + 0x3b670: 0x6e2ef420, 0x3b671: 0x6e2ef620, 0x3b672: 0x6e364620, 0x3b673: 0x6e364820, + 0x3b674: 0x6e364a20, 0x3b675: 0x6e364c20, 0x3b676: 0x6e364e20, 0x3b677: 0x6e3b7620, + 0x3b678: 0x6e3b7820, 0x3b679: 0x6e3b7a20, 0x3b67a: 0x6e3b7c20, 0x3b67b: 0x6e3f2a20, + 0x3b67c: 0x6e41b620, 0x3b67d: 0x6e41b820, 0x3b67e: 0x6e438c20, 0x3b67f: 0x6d177420, + // Block 0xeda, offset 0x3b680 + 0x3b680: 0x6d177620, 0x3b681: 0x6d45e820, 0x3b682: 0x6d45ea20, 0x3b683: 0x6d45ec20, + 0x3b684: 0x6d45ee20, 0x3b685: 0x6d45f020, 0x3b686: 0x6d45f220, 0x3b687: 0x6d45f420, + 0x3b688: 0x6d45f620, 0x3b689: 0x6d45f820, 0x3b68a: 0x6d72e420, 0x3b68b: 0x6d72e620, + 0x3b68c: 0x6d72e820, 0x3b68d: 0x6d72ea20, 0x3b68e: 0x6d9c6a20, 0x3b68f: 0x6d9c6c20, + 0x3b690: 0x6d9c6e20, 0x3b691: 0x6d9c7020, 0x3b692: 0x6d9c7220, 0x3b693: 0x6d9c7420, + 0x3b694: 0x6d9c7620, 0x3b695: 0x6dbf0220, 0x3b696: 0x6dbf0420, 0x3b697: 0x6dbf0620, + 0x3b698: 0x6dbf0820, 0x3b699: 0x6dbf0a20, 0x3b69a: 0x6ddcdc20, 0x3b69b: 0x6ddcde20, + 0x3b69c: 0x6ddce020, 0x3b69d: 0x6ddce220, 0x3b69e: 0x6df4a620, 0x3b69f: 0x6df4a820, + 0x3b6a0: 0x6e08a020, 0x3b6a1: 0x6e08a220, 0x3b6a2: 0x6e08a420, 0x3b6a3: 0x6e08a620, + 0x3b6a4: 0x6e08a820, 0x3b6a5: 0x6e18ac20, 0x3b6a6: 0x6e18ae20, 0x3b6a7: 0x6e256620, + 0x3b6a8: 0x6e2efa20, 0x3b6a9: 0x6e2efc20, 0x3b6aa: 0x6e2efe20, 0x3b6ab: 0x6e365020, + 0x3b6ac: 0x6e365220, 0x3b6ad: 0x6e3b8020, 0x3b6ae: 0x6e3f2c20, 0x3b6af: 0x6e3f2e20, + 0x3b6b0: 0x6e41ba20, 0x3b6b1: 0x6e41bc20, 0x3b6b2: 0x6e438e20, 0x3b6b3: 0x6e45f020, + 0x3b6b4: 0x6ce84820, 0x3b6b5: 0x6ce84a20, 0x3b6b6: 0x6ce84c20, 0x3b6b7: 0x6ce84e20, + 0x3b6b8: 0x6ce85020, 0x3b6b9: 0x6d177c20, 0x3b6ba: 0x6d177e20, 0x3b6bb: 0x6d178020, + 0x3b6bc: 0x6d178220, 0x3b6bd: 0x6d178420, 0x3b6be: 0x6d178620, 0x3b6bf: 0x6d461620, + // Block 0xedb, offset 0x3b6c0 + 0x3b6c0: 0x6d461820, 0x3b6c1: 0x6d461a20, 0x3b6c2: 0x6d461c20, 0x3b6c3: 0x6d461e20, + 0x3b6c4: 0x6d462020, 0x3b6c5: 0x6d462220, 0x3b6c6: 0x6d462420, 0x3b6c7: 0x6d462620, + 0x3b6c8: 0x6d462820, 0x3b6c9: 0x6d462a20, 0x3b6ca: 0x6d462c20, 0x3b6cb: 0x6d462e20, + 0x3b6cc: 0x6d463020, 0x3b6cd: 0x6d463220, 0x3b6ce: 0x6d463420, 0x3b6cf: 0x6d463620, + 0x3b6d0: 0x6d463820, 0x3b6d1: 0x6d730420, 0x3b6d2: 0x6d730620, 0x3b6d3: 0x6d730820, + 0x3b6d4: 0x6d730a20, 0x3b6d5: 0x6d730c20, 0x3b6d6: 0x6d730e20, 0x3b6d7: 0x6d731020, + 0x3b6d8: 0x6d731220, 0x3b6d9: 0x6d731420, 0x3b6da: 0x6d731620, 0x3b6db: 0x6d731820, + 0x3b6dc: 0x6d731a20, 0x3b6dd: 0x6d731c20, 0x3b6de: 0x6d731e20, 0x3b6df: 0x6d732020, + 0x3b6e0: 0x6d732220, 0x3b6e1: 0x6d732420, 0x3b6e2: 0x6d732620, 0x3b6e3: 0x6d732820, + 0x3b6e4: 0x6d732a20, 0x3b6e5: 0x6d732c20, 0x3b6e6: 0x6d732e20, 0x3b6e7: 0x6d733020, + 0x3b6e8: 0x6d733220, 0x3b6e9: 0x6d733420, 0x3b6ea: 0x6d733620, 0x3b6eb: 0x6d733820, + 0x3b6ec: 0x6d733a20, 0x3b6ed: 0x6d733c20, 0x3b6ee: 0x6d733e20, 0x3b6ef: 0x6d734020, + 0x3b6f0: 0x6d9c9020, 0x3b6f1: 0x6d9c9220, 0x3b6f2: 0x6d9c9420, 0x3b6f3: 0x6d9c9620, + 0x3b6f4: 0x6d9c9820, 0x3b6f5: 0x6d9c9a20, 0x3b6f6: 0x6d9c9c20, 0x3b6f7: 0x6d9c9e20, + 0x3b6f8: 0x6d9ca020, 0x3b6f9: 0x6d9ca220, 0x3b6fa: 0x6d9ca420, 0x3b6fb: 0x6d9ca620, + 0x3b6fc: 0x6d9ca820, 0x3b6fd: 0x6d9caa20, 0x3b6fe: 0x6d9cac20, 0x3b6ff: 0x6d9cae20, + // Block 0xedc, offset 0x3b700 + 0x3b700: 0x6d9cb020, 0x3b701: 0x6d9cb220, 0x3b702: 0x6d9cb420, 0x3b703: 0x6d9cb620, + 0x3b704: 0x6d9cb820, 0x3b705: 0x6d9cba20, 0x3b706: 0x6d9cbc20, 0x3b707: 0x6dbf2220, + 0x3b708: 0x6dbf2420, 0x3b709: 0x6dbf2620, 0x3b70a: 0x6dbf2820, 0x3b70b: 0x6dbf2a20, + 0x3b70c: 0x6dbf2c20, 0x3b70d: 0x6dbf2e20, 0x3b70e: 0x6dbf3020, 0x3b70f: 0x6dbf3220, + 0x3b710: 0x6dbf3420, 0x3b711: 0x6dbf3620, 0x3b712: 0x6dbf3820, 0x3b713: 0x6dbf3a20, + 0x3b714: 0x6dbf3c20, 0x3b715: 0x6dbf3e20, 0x3b716: 0x6dbf4020, 0x3b717: 0x6dbf4220, + 0x3b718: 0x6dbf4420, 0x3b719: 0x6dbf4620, 0x3b71a: 0x6dbf4820, 0x3b71b: 0x6dbf4a20, + 0x3b71c: 0x6dbf4c20, 0x3b71d: 0x6dbf4e20, 0x3b71e: 0x6ddcfc20, 0x3b71f: 0x6ddcfe20, + 0x3b720: 0x6ddd0020, 0x3b721: 0x6ddd0220, 0x3b722: 0x6ddd0420, 0x3b723: 0x6ddd0620, + 0x3b724: 0x6ddd0820, 0x3b725: 0x6ddd0a20, 0x3b726: 0x6ddd0c20, 0x3b727: 0x6ddd0e20, + 0x3b728: 0x6ddd1020, 0x3b729: 0x6ddd1220, 0x3b72a: 0x6ddd1420, 0x3b72b: 0x6ddd1620, + 0x3b72c: 0x6ddd1820, 0x3b72d: 0x6ddd1a20, 0x3b72e: 0x6ddd1c20, 0x3b72f: 0x6ddd1e20, + 0x3b730: 0x6ddd2020, 0x3b731: 0x6ddd2220, 0x3b732: 0x6ddd2420, 0x3b733: 0x6ddd2620, + 0x3b734: 0x6ddd2820, 0x3b735: 0x6ddd2a20, 0x3b736: 0x6ddd2c20, 0x3b737: 0x6ddd2e20, + 0x3b738: 0x6ddd3020, 0x3b739: 0x6ddd3220, 0x3b73a: 0x6df4c020, 0x3b73b: 0x6df4c220, + 0x3b73c: 0x6df4c420, 0x3b73d: 0x6df4c620, 0x3b73e: 0x6df4c820, 0x3b73f: 0x6df4ca20, + // Block 0xedd, offset 0x3b740 + 0x3b740: 0x6df4cc20, 0x3b741: 0x6df4ce20, 0x3b742: 0x6df4d020, 0x3b743: 0x6df4d220, + 0x3b744: 0x6df4d420, 0x3b745: 0x6df4d620, 0x3b746: 0x6df4d820, 0x3b747: 0x6df4da20, + 0x3b748: 0x6df4dc20, 0x3b749: 0x6df4de20, 0x3b74a: 0x6df4e020, 0x3b74b: 0x6df4e220, + 0x3b74c: 0x6df4e420, 0x3b74d: 0x6df4e620, 0x3b74e: 0x6df4e820, 0x3b74f: 0x6df4ea20, + 0x3b750: 0x6df4ec20, 0x3b751: 0x6df4ee20, 0x3b752: 0x6df4f020, 0x3b753: 0x6df4f220, + 0x3b754: 0x6df4f420, 0x3b755: 0x6df4f620, 0x3b756: 0x6e08ba20, 0x3b757: 0x6e08bc20, + 0x3b758: 0x6e08be20, 0x3b759: 0x6e08c020, 0x3b75a: 0x6e08c220, 0x3b75b: 0x6e08c420, + 0x3b75c: 0x6e08c620, 0x3b75d: 0x6e08c820, 0x3b75e: 0x6e08ca20, 0x3b75f: 0x6e08cc20, + 0x3b760: 0x6e08ce20, 0x3b761: 0x6e08d020, 0x3b762: 0x6e08d220, 0x3b763: 0x6e08d420, + 0x3b764: 0x6e08d620, 0x3b765: 0x6e08d820, 0x3b766: 0x6e08da20, 0x3b767: 0x6e08dc20, + 0x3b768: 0x6e08de20, 0x3b769: 0x6e08e020, 0x3b76a: 0x6e08e220, 0x3b76b: 0x6e08e420, + 0x3b76c: 0x6e08e620, 0x3b76d: 0x6e08e820, 0x3b76e: 0x6e08ea20, 0x3b76f: 0x6e18be20, + 0x3b770: 0x6e18c020, 0x3b771: 0x6e18c220, 0x3b772: 0x6e18c420, 0x3b773: 0x6e18c620, + 0x3b774: 0x6e18c820, 0x3b775: 0x6e18ca20, 0x3b776: 0x6e18cc20, 0x3b777: 0x6e18ce20, + 0x3b778: 0x6e18d020, 0x3b779: 0x6e18d220, 0x3b77a: 0x6e18d420, 0x3b77b: 0x6e18d620, + 0x3b77c: 0x6e18d820, 0x3b77d: 0x6e18da20, 0x3b77e: 0x6e18dc20, 0x3b77f: 0x6e18de20, + // Block 0xede, offset 0x3b780 + 0x3b780: 0x6e18e020, 0x3b781: 0x6e18e220, 0x3b782: 0x6e18e420, 0x3b783: 0x6e257420, + 0x3b784: 0x6e257620, 0x3b785: 0x6e257820, 0x3b786: 0x6e257a20, 0x3b787: 0x6e257c20, + 0x3b788: 0x6e257e20, 0x3b789: 0x6e258020, 0x3b78a: 0x6e258220, 0x3b78b: 0x6e258420, + 0x3b78c: 0x6e258620, 0x3b78d: 0x6e258820, 0x3b78e: 0x6e258a20, 0x3b78f: 0x6e258c20, + 0x3b790: 0x6e258e20, 0x3b791: 0x6e259020, 0x3b792: 0x6e259220, 0x3b793: 0x6e259420, + 0x3b794: 0x6e259620, 0x3b795: 0x6e259820, 0x3b796: 0x6e259a20, 0x3b797: 0x6e259c20, + 0x3b798: 0x6e259e20, 0x3b799: 0x6e25a020, 0x3b79a: 0x6e25a220, 0x3b79b: 0x6e2f0620, + 0x3b79c: 0x6e2f0820, 0x3b79d: 0x6e2f0a20, 0x3b79e: 0x6e2f0c20, 0x3b79f: 0x6e2f0e20, + 0x3b7a0: 0x6e2f1020, 0x3b7a1: 0x6e2f1220, 0x3b7a2: 0x6e2f1420, 0x3b7a3: 0x6e2f1620, + 0x3b7a4: 0x6e2f1820, 0x3b7a5: 0x6e2f1a20, 0x3b7a6: 0x6e366020, 0x3b7a7: 0x6e366220, + 0x3b7a8: 0x6e366420, 0x3b7a9: 0x6e366620, 0x3b7aa: 0x6e366820, 0x3b7ab: 0x6e366a20, + 0x3b7ac: 0x6e366c20, 0x3b7ad: 0x6e366e20, 0x3b7ae: 0x6e367020, 0x3b7af: 0x6e367220, + 0x3b7b0: 0x6e3b8820, 0x3b7b1: 0x6e3b8a20, 0x3b7b2: 0x6e3b8c20, 0x3b7b3: 0x6e3b8e20, + 0x3b7b4: 0x6e3b9020, 0x3b7b5: 0x6e3b9220, 0x3b7b6: 0x6e3b9420, 0x3b7b7: 0x6e3b9620, + 0x3b7b8: 0x6e3b9820, 0x3b7b9: 0x6e3b9a20, 0x3b7ba: 0x6e3f3220, 0x3b7bb: 0x6e3f3420, + 0x3b7bc: 0x6e3f3620, 0x3b7bd: 0x6e3f3820, 0x3b7be: 0x6e3f3a20, 0x3b7bf: 0x6e3f3c20, + // Block 0xedf, offset 0x3b7c0 + 0x3b7c0: 0x6e3f3e20, 0x3b7c1: 0x6e41c020, 0x3b7c2: 0x6e41c220, 0x3b7c3: 0x6e41c420, + 0x3b7c4: 0x6e41c620, 0x3b7c5: 0x6e439020, 0x3b7c6: 0x6e439220, 0x3b7c7: 0x6e439420, + 0x3b7c8: 0x6e45f220, 0x3b7c9: 0x6e465420, 0x3b7ca: 0x6c8ab620, 0x3b7cb: 0x6c8ab820, + 0x3b7cc: 0x6d178c20, 0x3b7cd: 0x6d463e20, 0x3b7ce: 0x6d464020, 0x3b7cf: 0x6d464220, + 0x3b7d0: 0x6d734620, 0x3b7d1: 0x6d9cc220, 0x3b7d2: 0x6dbf5420, 0x3b7d3: 0x6ddd3a20, + 0x3b7d4: 0x6ddd3c20, 0x3b7d5: 0x6e08f020, 0x3b7d6: 0x6e18ea20, 0x3b7d7: 0x6e18ec20, + 0x3b7d8: 0x6e18ee20, 0x3b7d9: 0x6e25a620, 0x3b7da: 0x6e25a820, 0x3b7db: 0x6e2f1c20, + 0x3b7dc: 0x6e367820, 0x3b7dd: 0x6e367a20, 0x3b7de: 0x6e367c20, 0x3b7df: 0x6e439620, + 0x3b7e0: 0x6d734820, 0x3b7e1: 0x6d734a20, 0x3b7e2: 0x6d9cc420, 0x3b7e3: 0x6ddd3e20, + 0x3b7e4: 0x6e08f220, 0x3b7e5: 0x6e18f020, 0x3b7e6: 0x6e18f220, 0x3b7e7: 0x6e25aa20, + 0x3b7e8: 0x6e2f1e20, 0x3b7e9: 0x6e41cc20, 0x3b7ea: 0x6e439820, 0x3b7eb: 0x6d178e20, + 0x3b7ec: 0x6d179020, 0x3b7ed: 0x6d464820, 0x3b7ee: 0x6d464a20, 0x3b7ef: 0x6d734e20, + 0x3b7f0: 0x6d735020, 0x3b7f1: 0x6d9cca20, 0x3b7f2: 0x6d9ccc20, 0x3b7f3: 0x6d9cce20, + 0x3b7f4: 0x6d9cd020, 0x3b7f5: 0x6d9cd220, 0x3b7f6: 0x6d9cd420, 0x3b7f7: 0x6d9cd620, + 0x3b7f8: 0x6d9cd820, 0x3b7f9: 0x6dbf5820, 0x3b7fa: 0x6dbf5a20, 0x3b7fb: 0x6dbf5c20, + 0x3b7fc: 0x6dbf5e20, 0x3b7fd: 0x6dbf6020, 0x3b7fe: 0x6ddd4420, 0x3b7ff: 0x6ddd4620, + // Block 0xee0, offset 0x3b800 + 0x3b800: 0x6ddd4820, 0x3b801: 0x6ddd4a20, 0x3b802: 0x6ddd4c20, 0x3b803: 0x6df4fc20, + 0x3b804: 0x6df4fe20, 0x3b805: 0x6df50020, 0x3b806: 0x6df50220, 0x3b807: 0x6e08f620, + 0x3b808: 0x6e08f820, 0x3b809: 0x6e08fa20, 0x3b80a: 0x6e08fc20, 0x3b80b: 0x6e08fe20, + 0x3b80c: 0x6e18f820, 0x3b80d: 0x6e18fa20, 0x3b80e: 0x6e18fc20, 0x3b80f: 0x6e18fe20, + 0x3b810: 0x6e190020, 0x3b811: 0x6e190220, 0x3b812: 0x6e25b020, 0x3b813: 0x6e25b220, + 0x3b814: 0x6e25b420, 0x3b815: 0x6e25b620, 0x3b816: 0x6e2f2020, 0x3b817: 0x6e2f2220, + 0x3b818: 0x6e2f2420, 0x3b819: 0x6e2f2620, 0x3b81a: 0x6e2f2820, 0x3b81b: 0x6e2f2a20, + 0x3b81c: 0x6e2f2c20, 0x3b81d: 0x6e2f2e20, 0x3b81e: 0x6e2f3020, 0x3b81f: 0x6e2f3220, + 0x3b820: 0x6e367e20, 0x3b821: 0x6e368020, 0x3b822: 0x6e368220, 0x3b823: 0x6e368420, + 0x3b824: 0x6e3ba020, 0x3b825: 0x6e3ba220, 0x3b826: 0x6e3f4020, 0x3b827: 0x6e3f4220, + 0x3b828: 0x6e3f4420, 0x3b829: 0x6e3f4620, 0x3b82a: 0x6e3f4820, 0x3b82b: 0x6e41ce20, + 0x3b82c: 0x6e41d020, 0x3b82d: 0x6e439a20, 0x3b82e: 0x6e439c20, 0x3b82f: 0x6e44cc20, + 0x3b830: 0x6e44ce20, 0x3b831: 0x6e457c20, 0x3b832: 0x6e457e20, 0x3b833: 0x6e458020, + 0x3b834: 0x6e45f420, 0x3b835: 0x6e45f620, 0x3b836: 0x6e465620, 0x3b837: 0x6e470e20, + 0x3b838: 0x6e471020, 0x3b839: 0x6cb73a20, 0x3b83a: 0x6cb73c20, 0x3b83b: 0x6cb73e20, + 0x3b83c: 0x6cb74020, 0x3b83d: 0x6ce85220, 0x3b83e: 0x6ce85420, 0x3b83f: 0x6ce85620, + // Block 0xee1, offset 0x3b840 + 0x3b840: 0x6ce85820, 0x3b841: 0x6ce85a20, 0x3b842: 0x6ce85c20, 0x3b843: 0x6ce85e20, + 0x3b844: 0x6ce86020, 0x3b845: 0x6ce86220, 0x3b846: 0x6ce86420, 0x3b847: 0x6ce86620, + 0x3b848: 0x6ce86820, 0x3b849: 0x6ce86a20, 0x3b84a: 0x6d179420, 0x3b84b: 0x6d179620, + 0x3b84c: 0x6d179820, 0x3b84d: 0x6d179a20, 0x3b84e: 0x6d179c20, 0x3b84f: 0x6d179e20, + 0x3b850: 0x6d17a020, 0x3b851: 0x6d17a220, 0x3b852: 0x6d17a420, 0x3b853: 0x6d17a620, + 0x3b854: 0x6d17a820, 0x3b855: 0x6d17aa20, 0x3b856: 0x6d17ac20, 0x3b857: 0x6d17ae20, + 0x3b858: 0x6d17b020, 0x3b859: 0x6d17b220, 0x3b85a: 0x6d17b420, 0x3b85b: 0x6d17b620, + 0x3b85c: 0x6d17b820, 0x3b85d: 0x6d17ba20, 0x3b85e: 0x6d17bc20, 0x3b85f: 0x6d17be20, + 0x3b860: 0x6d17c020, 0x3b861: 0x6d465a20, 0x3b862: 0x6d465c20, 0x3b863: 0x6d465e20, + 0x3b864: 0x6d466020, 0x3b865: 0x6d466220, 0x3b866: 0x6d466420, 0x3b867: 0x6d466620, + 0x3b868: 0x6d466820, 0x3b869: 0x6d466a20, 0x3b86a: 0x6d466c20, 0x3b86b: 0x6d466e20, + 0x3b86c: 0x6d467020, 0x3b86d: 0x6d467220, 0x3b86e: 0x6d467420, 0x3b86f: 0x6d467620, + 0x3b870: 0x6d467820, 0x3b871: 0x6d467a20, 0x3b872: 0x6d467c20, 0x3b873: 0x6d467e20, + 0x3b874: 0x6d468020, 0x3b875: 0x6d468220, 0x3b876: 0x6d468420, 0x3b877: 0x6d468620, + 0x3b878: 0x6d468820, 0x3b879: 0x6d468a20, 0x3b87a: 0x6d736020, 0x3b87b: 0x6d736220, + 0x3b87c: 0x6d736420, 0x3b87d: 0x6d736620, 0x3b87e: 0x6d736820, 0x3b87f: 0x6d736a20, + // Block 0xee2, offset 0x3b880 + 0x3b880: 0x6d736c20, 0x3b881: 0x6d736e20, 0x3b882: 0x6d737020, 0x3b883: 0x6d737220, + 0x3b884: 0x6d737420, 0x3b885: 0x6d737620, 0x3b886: 0x6d737820, 0x3b887: 0x6d737a20, + 0x3b888: 0x6d737c20, 0x3b889: 0x6d737e20, 0x3b88a: 0x6d738020, 0x3b88b: 0x6d738220, + 0x3b88c: 0x6d9ce020, 0x3b88d: 0x6d9ce220, 0x3b88e: 0x6d9ce420, 0x3b88f: 0x6d9ce620, + 0x3b890: 0x6d9ce820, 0x3b891: 0x6d9cea20, 0x3b892: 0x6d9cec20, 0x3b893: 0x6d9cee20, + 0x3b894: 0x6d9cf020, 0x3b895: 0x6d9cf220, 0x3b896: 0x6d9cf420, 0x3b897: 0x6d9cf620, + 0x3b898: 0x6d9cf820, 0x3b899: 0x6d9cfa20, 0x3b89a: 0x6d9cfc20, 0x3b89b: 0x6d9cfe20, + 0x3b89c: 0x6d9d0020, 0x3b89d: 0x6d9d0220, 0x3b89e: 0x6d9d0420, 0x3b89f: 0x6d9d0620, + 0x3b8a0: 0x6d9d0820, 0x3b8a1: 0x6d9d0a20, 0x3b8a2: 0x6dbf6620, 0x3b8a3: 0x6dbf6820, + 0x3b8a4: 0x6dbf6a20, 0x3b8a5: 0x6dbf6c20, 0x3b8a6: 0x6dbf6e20, 0x3b8a7: 0x6dbf7020, + 0x3b8a8: 0x6dbf7220, 0x3b8a9: 0x6dbf7420, 0x3b8aa: 0x6dbf7620, 0x3b8ab: 0x6dbf7820, + 0x3b8ac: 0x6dbf7a20, 0x3b8ad: 0x6dbf7c20, 0x3b8ae: 0x6dbf7e20, 0x3b8af: 0x6dbf8020, + 0x3b8b0: 0x6dbf8220, 0x3b8b1: 0x6dbf8420, 0x3b8b2: 0x6dbf8620, 0x3b8b3: 0x6dbf8820, + 0x3b8b4: 0x6dbf8a20, 0x3b8b5: 0x6ddd6220, 0x3b8b6: 0x6ddd6420, 0x3b8b7: 0x6ddd6620, + 0x3b8b8: 0x6ddd6820, 0x3b8b9: 0x6ddd6a20, 0x3b8ba: 0x6ddd6c20, 0x3b8bb: 0x6ddd6e20, + 0x3b8bc: 0x6ddd7020, 0x3b8bd: 0x6ddd7220, 0x3b8be: 0x6ddd7420, 0x3b8bf: 0x6ddd7620, + // Block 0xee3, offset 0x3b8c0 + 0x3b8c0: 0x6ddd7820, 0x3b8c1: 0x6ddd7a20, 0x3b8c2: 0x6ddd7c20, 0x3b8c3: 0x6ddd7e20, + 0x3b8c4: 0x6ddd8020, 0x3b8c5: 0x6ddd8220, 0x3b8c6: 0x6df50820, 0x3b8c7: 0x6df50a20, + 0x3b8c8: 0x6df50c20, 0x3b8c9: 0x6df50e20, 0x3b8ca: 0x6df51020, 0x3b8cb: 0x6df51220, + 0x3b8cc: 0x6df51420, 0x3b8cd: 0x6df51620, 0x3b8ce: 0x6df51820, 0x3b8cf: 0x6df51a20, + 0x3b8d0: 0x6e090420, 0x3b8d1: 0x6e090620, 0x3b8d2: 0x6e090820, 0x3b8d3: 0x6e090a20, + 0x3b8d4: 0x6e090c20, 0x3b8d5: 0x6e090e20, 0x3b8d6: 0x6e091020, 0x3b8d7: 0x6e091220, + 0x3b8d8: 0x6e091420, 0x3b8d9: 0x6e091620, 0x3b8da: 0x6e091820, 0x3b8db: 0x6e091a20, + 0x3b8dc: 0x6e190e20, 0x3b8dd: 0x6e191020, 0x3b8de: 0x6e191220, 0x3b8df: 0x6e191420, + 0x3b8e0: 0x6e191620, 0x3b8e1: 0x6e191820, 0x3b8e2: 0x6e191a20, 0x3b8e3: 0x6e191c20, + 0x3b8e4: 0x6e191e20, 0x3b8e5: 0x6e192020, 0x3b8e6: 0x6e192220, 0x3b8e7: 0x6e192420, + 0x3b8e8: 0x6e192620, 0x3b8e9: 0x6e192820, 0x3b8ea: 0x6e192a20, 0x3b8eb: 0x6e192c20, + 0x3b8ec: 0x6e192e20, 0x3b8ed: 0x6e193020, 0x3b8ee: 0x6e25c220, 0x3b8ef: 0x6e25c420, + 0x3b8f0: 0x6e25c620, 0x3b8f1: 0x6e2f3620, 0x3b8f2: 0x6e2f3820, 0x3b8f3: 0x6e2f3a20, + 0x3b8f4: 0x6e2f3c20, 0x3b8f5: 0x6e2f3e20, 0x3b8f6: 0x6e2f4020, 0x3b8f7: 0x6e2f4220, + 0x3b8f8: 0x6e2f4420, 0x3b8f9: 0x6e2f4620, 0x3b8fa: 0x6e369020, 0x3b8fb: 0x6e369220, + 0x3b8fc: 0x6e369420, 0x3b8fd: 0x6e369620, 0x3b8fe: 0x6e369820, 0x3b8ff: 0x6e3ba420, + // Block 0xee4, offset 0x3b900 + 0x3b900: 0x6e3f4a20, 0x3b901: 0x6e3f4c20, 0x3b902: 0x6e3f4e20, 0x3b903: 0x6e3f5020, + 0x3b904: 0x6e41d220, 0x3b905: 0x6e41d420, 0x3b906: 0x6e43a020, 0x3b907: 0x6e43a220, + 0x3b908: 0x6e44d020, 0x3b909: 0x6e45f820, 0x3b90a: 0x6e465820, 0x3b90b: 0x6cb74820, + 0x3b90c: 0x6d17ce20, 0x3b90d: 0x6d17d020, 0x3b90e: 0x6d17d220, 0x3b90f: 0x6d17d420, + 0x3b910: 0x6d17d620, 0x3b911: 0x6d17d820, 0x3b912: 0x6d17da20, 0x3b913: 0x6d17dc20, + 0x3b914: 0x6d469a20, 0x3b915: 0x6d469c20, 0x3b916: 0x6d469e20, 0x3b917: 0x6d46a020, + 0x3b918: 0x6d46a220, 0x3b919: 0x6d46a420, 0x3b91a: 0x6d46a620, 0x3b91b: 0x6d46a820, + 0x3b91c: 0x6d46aa20, 0x3b91d: 0x6d46ac20, 0x3b91e: 0x6d46ae20, 0x3b91f: 0x6d46b020, + 0x3b920: 0x6d73c420, 0x3b921: 0x6d73c620, 0x3b922: 0x6d73c820, 0x3b923: 0x6d73ca20, + 0x3b924: 0x6d73cc20, 0x3b925: 0x6d73ce20, 0x3b926: 0x6d73d020, 0x3b927: 0x6d73d220, + 0x3b928: 0x6d73d420, 0x3b929: 0x6d73d620, 0x3b92a: 0x6d73d820, 0x3b92b: 0x6d73da20, + 0x3b92c: 0x6d73dc20, 0x3b92d: 0x6d73de20, 0x3b92e: 0x6d73e020, 0x3b92f: 0x6d73e220, + 0x3b930: 0x6d73e420, 0x3b931: 0x6d73e620, 0x3b932: 0x6d73e820, 0x3b933: 0x6d73ea20, + 0x3b934: 0x6d73ec20, 0x3b935: 0x6d73ee20, 0x3b936: 0x6d73f020, 0x3b937: 0x6d73f220, + 0x3b938: 0x6d73f420, 0x3b939: 0x6d73f620, 0x3b93a: 0x6d73f820, 0x3b93b: 0x6d73fa20, + 0x3b93c: 0x6d73fc20, 0x3b93d: 0x6d73fe20, 0x3b93e: 0x6d740020, 0x3b93f: 0x6d740220, + // Block 0xee5, offset 0x3b940 + 0x3b940: 0x6d740420, 0x3b941: 0x6d9d6220, 0x3b942: 0x6d9d6420, 0x3b943: 0x6d9d6620, + 0x3b944: 0x6d9d6820, 0x3b945: 0x6d9d6a20, 0x3b946: 0x6d9d6c20, 0x3b947: 0x6d9d6e20, + 0x3b948: 0x6d9d7020, 0x3b949: 0x6d9d7220, 0x3b94a: 0x6d9d7420, 0x3b94b: 0x6d9d7620, + 0x3b94c: 0x6d9d7820, 0x3b94d: 0x6d9d7a20, 0x3b94e: 0x6d9d7c20, 0x3b94f: 0x6d9d7e20, + 0x3b950: 0x6d9d8020, 0x3b951: 0x6d9d8220, 0x3b952: 0x6d9d8420, 0x3b953: 0x6d9d8620, + 0x3b954: 0x6d9d8820, 0x3b955: 0x6d9d8a20, 0x3b956: 0x6d9d8c20, 0x3b957: 0x6d9d8e20, + 0x3b958: 0x6d9d9020, 0x3b959: 0x6d9d9220, 0x3b95a: 0x6d9d9420, 0x3b95b: 0x6d9d9620, + 0x3b95c: 0x6d9d9820, 0x3b95d: 0x6d9d9a20, 0x3b95e: 0x6d9d9c20, 0x3b95f: 0x6d9d9e20, + 0x3b960: 0x6d9da020, 0x3b961: 0x6dbfd420, 0x3b962: 0x6dbfd620, 0x3b963: 0x6dbfd820, + 0x3b964: 0x6dbfda20, 0x3b965: 0x6dbfdc20, 0x3b966: 0x6dbfde20, 0x3b967: 0x6dbfe020, + 0x3b968: 0x6dbfe220, 0x3b969: 0x6dbfe420, 0x3b96a: 0x6dbfe620, 0x3b96b: 0x6dbfe820, + 0x3b96c: 0x6dbfea20, 0x3b96d: 0x6dbfec20, 0x3b96e: 0x6dbfee20, 0x3b96f: 0x6dbff020, + 0x3b970: 0x6dbff220, 0x3b971: 0x6dbff420, 0x3b972: 0x6dbff620, 0x3b973: 0x6dbff820, + 0x3b974: 0x6dbffa20, 0x3b975: 0x6dbffc20, 0x3b976: 0x6dbffe20, 0x3b977: 0x6d46b220, + 0x3b978: 0x6dc00020, 0x3b979: 0x6dc00220, 0x3b97a: 0x6dc00420, 0x3b97b: 0x6dc00620, + 0x3b97c: 0x6dc00820, 0x3b97d: 0x6dc00a20, 0x3b97e: 0x6dc00c20, 0x3b97f: 0x6dc00e20, + // Block 0xee6, offset 0x3b980 + 0x3b980: 0x6dc01020, 0x3b981: 0x6dc01220, 0x3b982: 0x6dc01420, 0x3b983: 0x6dc01620, + 0x3b984: 0x6dc01820, 0x3b985: 0x6dc01a20, 0x3b986: 0x6dc01c20, 0x3b987: 0x6dc01e20, + 0x3b988: 0x6dc02020, 0x3b989: 0x6dc02220, 0x3b98a: 0x6dc02420, 0x3b98b: 0x6dc02620, + 0x3b98c: 0x6dc02820, 0x3b98d: 0x6dddd220, 0x3b98e: 0x6dddd420, 0x3b98f: 0x6dddd620, + 0x3b990: 0x6dddd820, 0x3b991: 0x6dddda20, 0x3b992: 0x6ddddc20, 0x3b993: 0x6dddde20, + 0x3b994: 0x6ddde020, 0x3b995: 0x6ddde220, 0x3b996: 0x6ddde420, 0x3b997: 0x6ddde620, + 0x3b998: 0x6ddde820, 0x3b999: 0x6dddea20, 0x3b99a: 0x6dddec20, 0x3b99b: 0x6dddee20, + 0x3b99c: 0x6dddf020, 0x3b99d: 0x6dddf220, 0x3b99e: 0x6dddf420, 0x3b99f: 0x6dddf620, + 0x3b9a0: 0x6dddf820, 0x3b9a1: 0x6dddfa20, 0x3b9a2: 0x6dddfc20, 0x3b9a3: 0x6dddfe20, + 0x3b9a4: 0x6dde0020, 0x3b9a5: 0x6dde0220, 0x3b9a6: 0x6dde0420, 0x3b9a7: 0x6dde0620, + 0x3b9a8: 0x6dde0820, 0x3b9a9: 0x6dde0a20, 0x3b9aa: 0x6dde0c20, 0x3b9ab: 0x6dde0e20, + 0x3b9ac: 0x6dde1020, 0x3b9ad: 0x6dde1220, 0x3b9ae: 0x6dde1420, 0x3b9af: 0x6dde1620, + 0x3b9b0: 0x6dde1820, 0x3b9b1: 0x6dde1a20, 0x3b9b2: 0x6dde1c20, 0x3b9b3: 0x6dde1e20, + 0x3b9b4: 0x6dde2020, 0x3b9b5: 0x6dde2220, 0x3b9b6: 0x6dde2420, 0x3b9b7: 0x6df58620, + 0x3b9b8: 0x6df58820, 0x3b9b9: 0x6df58a20, 0x3b9ba: 0x6df58c20, 0x3b9bb: 0x6df58e20, + 0x3b9bc: 0x6df59020, 0x3b9bd: 0x6df59220, 0x3b9be: 0x6df59420, 0x3b9bf: 0x6df59620, + // Block 0xee7, offset 0x3b9c0 + 0x3b9c0: 0x6df59820, 0x3b9c1: 0x6df59a20, 0x3b9c2: 0x6df59c20, 0x3b9c3: 0x6df59e20, + 0x3b9c4: 0x6df5a020, 0x3b9c5: 0x6df5a220, 0x3b9c6: 0x6df5a420, 0x3b9c7: 0x6df5a620, + 0x3b9c8: 0x6df5a820, 0x3b9c9: 0x6df5aa20, 0x3b9ca: 0x6df5ac20, 0x3b9cb: 0x6df5ae20, + 0x3b9cc: 0x6df5b020, 0x3b9cd: 0x6df5b220, 0x3b9ce: 0x6df5b420, 0x3b9cf: 0x6df5b620, + 0x3b9d0: 0x6df5b820, 0x3b9d1: 0x6df5ba20, 0x3b9d2: 0x6df5bc20, 0x3b9d3: 0x6df5be20, + 0x3b9d4: 0x6df5c020, 0x3b9d5: 0x6df5c220, 0x3b9d6: 0x6df5c420, 0x3b9d7: 0x6df5c620, + 0x3b9d8: 0x6df5c820, 0x3b9d9: 0x6df5ca20, 0x3b9da: 0x6df5cc20, 0x3b9db: 0x6df5ce20, + 0x3b9dc: 0x6df5d020, 0x3b9dd: 0x6df5d220, 0x3b9de: 0x6df5d420, 0x3b9df: 0x6df5d620, + 0x3b9e0: 0x6df5d820, 0x3b9e1: 0x6df5da20, 0x3b9e2: 0x6df5dc20, 0x3b9e3: 0x6df5de20, + 0x3b9e4: 0x6df5e020, 0x3b9e5: 0x6df5e220, 0x3b9e6: 0x6df5e420, 0x3b9e7: 0x6df5e620, + 0x3b9e8: 0x6df5e820, 0x3b9e9: 0x6df5ea20, 0x3b9ea: 0x6df5ec20, 0x3b9eb: 0x6df5ee20, + 0x3b9ec: 0x6df5f020, 0x3b9ed: 0x6df5f220, 0x3b9ee: 0x6df5f420, 0x3b9ef: 0x6df5f620, + 0x3b9f0: 0x6df5f820, 0x3b9f1: 0x6df5fa20, 0x3b9f2: 0x6df5fc20, 0x3b9f3: 0x6df5fe20, + 0x3b9f4: 0x6df60020, 0x3b9f5: 0x6df60220, 0x3b9f6: 0x6df60420, 0x3b9f7: 0x6df60620, + 0x3b9f8: 0x6df60820, 0x3b9f9: 0x6df60a20, 0x3b9fa: 0x6df60c20, 0x3b9fb: 0x6df60e20, + 0x3b9fc: 0x6df61020, 0x3b9fd: 0x6df61220, 0x3b9fe: 0x6e097a20, 0x3b9ff: 0x6e097c20, + // Block 0xee8, offset 0x3ba00 + 0x3ba00: 0x6e097e20, 0x3ba01: 0x6e098020, 0x3ba02: 0x6e098220, 0x3ba03: 0x6e098420, + 0x3ba04: 0x6e098620, 0x3ba05: 0x6e098820, 0x3ba06: 0x6e098a20, 0x3ba07: 0x6e098c20, + 0x3ba08: 0x6e098e20, 0x3ba09: 0x6e099020, 0x3ba0a: 0x6e099220, 0x3ba0b: 0x6e099420, + 0x3ba0c: 0x6e099620, 0x3ba0d: 0x6e099820, 0x3ba0e: 0x6e099a20, 0x3ba0f: 0x6e099c20, + 0x3ba10: 0x6e099e20, 0x3ba11: 0x6e09a020, 0x3ba12: 0x6e09a220, 0x3ba13: 0x6e09a420, + 0x3ba14: 0x6e09a620, 0x3ba15: 0x6e09a820, 0x3ba16: 0x6e09aa20, 0x3ba17: 0x6e09ac20, + 0x3ba18: 0x6e09ae20, 0x3ba19: 0x6e09b020, 0x3ba1a: 0x6e09b220, 0x3ba1b: 0x6e09b420, + 0x3ba1c: 0x6e09b620, 0x3ba1d: 0x6e09b820, 0x3ba1e: 0x6e09ba20, 0x3ba1f: 0x6e09bc20, + 0x3ba20: 0x6e09be20, 0x3ba21: 0x6e09c020, 0x3ba22: 0x6e09c220, 0x3ba23: 0x6e09c420, + 0x3ba24: 0x6e09c620, 0x3ba25: 0x6e09c820, 0x3ba26: 0x6e09ca20, 0x3ba27: 0x6e09cc20, + 0x3ba28: 0x6e09ce20, 0x3ba29: 0x6e09d020, 0x3ba2a: 0x6e09d220, 0x3ba2b: 0x6e09d420, + 0x3ba2c: 0x6e09d620, 0x3ba2d: 0x6e09d820, 0x3ba2e: 0x6e09da20, 0x3ba2f: 0x6e09dc20, + 0x3ba30: 0x6e09de20, 0x3ba31: 0x6e196e20, 0x3ba32: 0x6e197020, 0x3ba33: 0x6e197220, + 0x3ba34: 0x6e197420, 0x3ba35: 0x6e197620, 0x3ba36: 0x6e197820, 0x3ba37: 0x6e197a20, + 0x3ba38: 0x6e197c20, 0x3ba39: 0x6e197e20, 0x3ba3a: 0x6e198020, 0x3ba3b: 0x6e198220, + 0x3ba3c: 0x6e198420, 0x3ba3d: 0x6e198620, 0x3ba3e: 0x6e198820, 0x3ba3f: 0x6e198a20, + // Block 0xee9, offset 0x3ba40 + 0x3ba40: 0x6e198c20, 0x3ba41: 0x6e198e20, 0x3ba42: 0x6e199020, 0x3ba43: 0x6e199220, + 0x3ba44: 0x6e199420, 0x3ba45: 0x6e199620, 0x3ba46: 0x6e199820, 0x3ba47: 0x6e199a20, + 0x3ba48: 0x6e199c20, 0x3ba49: 0x6e199e20, 0x3ba4a: 0x6e19a020, 0x3ba4b: 0x6e19a220, + 0x3ba4c: 0x6e19a420, 0x3ba4d: 0x6e19a620, 0x3ba4e: 0x6e19a820, 0x3ba4f: 0x6e19aa20, + 0x3ba50: 0x6e19ac20, 0x3ba51: 0x6e19ae20, 0x3ba52: 0x6e19b020, 0x3ba53: 0x6e19b220, + 0x3ba54: 0x6e19b420, 0x3ba55: 0x6e19b620, 0x3ba56: 0x6e19b820, 0x3ba57: 0x6e19ba20, + 0x3ba58: 0x6e19bc20, 0x3ba59: 0x6e19be20, 0x3ba5a: 0x6e19c020, 0x3ba5b: 0x6e19c220, + 0x3ba5c: 0x6e19c420, 0x3ba5d: 0x6e19c620, 0x3ba5e: 0x6e19c820, 0x3ba5f: 0x6e19ca20, + 0x3ba60: 0x6e19cc20, 0x3ba61: 0x6e19ce20, 0x3ba62: 0x6e19d020, 0x3ba63: 0x6e19d220, + 0x3ba64: 0x6e19d420, 0x3ba65: 0x6e19d620, 0x3ba66: 0x6e19d820, 0x3ba67: 0x6e19da20, + 0x3ba68: 0x6e19dc20, 0x3ba69: 0x6e19de20, 0x3ba6a: 0x6e19e020, 0x3ba6b: 0x6e19e220, + 0x3ba6c: 0x6e19e420, 0x3ba6d: 0x6e260e20, 0x3ba6e: 0x6e261020, 0x3ba6f: 0x6e261220, + 0x3ba70: 0x6e261420, 0x3ba71: 0x6e261620, 0x3ba72: 0x6e261820, 0x3ba73: 0x6e261a20, + 0x3ba74: 0x6e261c20, 0x3ba75: 0x6e261e20, 0x3ba76: 0x6e262020, 0x3ba77: 0x6e262220, + 0x3ba78: 0x6e262420, 0x3ba79: 0x6e262620, 0x3ba7a: 0x6e262820, 0x3ba7b: 0x6e262a20, + 0x3ba7c: 0x6e262c20, 0x3ba7d: 0x6e262e20, 0x3ba7e: 0x6e263020, 0x3ba7f: 0x6e263220, + // Block 0xeea, offset 0x3ba80 + 0x3ba80: 0x6e263420, 0x3ba81: 0x6e263620, 0x3ba82: 0x6e263820, 0x3ba83: 0x6e263a20, + 0x3ba84: 0x6e263c20, 0x3ba85: 0x6e263e20, 0x3ba86: 0x6e264020, 0x3ba87: 0x6e264220, + 0x3ba88: 0x6e264420, 0x3ba89: 0x6e264620, 0x3ba8a: 0x6e264820, 0x3ba8b: 0x6e264a20, + 0x3ba8c: 0x6e264c20, 0x3ba8d: 0x6e264e20, 0x3ba8e: 0x6e265020, 0x3ba8f: 0x6e265220, + 0x3ba90: 0x6e265420, 0x3ba91: 0x6e265620, 0x3ba92: 0x6e265820, 0x3ba93: 0x6e265a20, + 0x3ba94: 0x6e265c20, 0x3ba95: 0x6e265e20, 0x3ba96: 0x6e266020, 0x3ba97: 0x6e266220, + 0x3ba98: 0x6e2f7a20, 0x3ba99: 0x6e2f7c20, 0x3ba9a: 0x6e2f7e20, 0x3ba9b: 0x6e2f8020, + 0x3ba9c: 0x6e2f8220, 0x3ba9d: 0x6e2f8420, 0x3ba9e: 0x6e2f8620, 0x3ba9f: 0x6e2f8820, + 0x3baa0: 0x6e2f8a20, 0x3baa1: 0x6e2f8c20, 0x3baa2: 0x6e2f8e20, 0x3baa3: 0x6e2f9020, + 0x3baa4: 0x6e2f9220, 0x3baa5: 0x6e2f9420, 0x3baa6: 0x6e2f9620, 0x3baa7: 0x6e2f9820, + 0x3baa8: 0x6e2f9a20, 0x3baa9: 0x6e2f9c20, 0x3baaa: 0x6e2f9e20, 0x3baab: 0x6e2fa020, + 0x3baac: 0x6e2fa220, 0x3baad: 0x6e2fa420, 0x3baae: 0x6e2fa620, 0x3baaf: 0x6e2fa820, + 0x3bab0: 0x6e2faa20, 0x3bab1: 0x6e2fac20, 0x3bab2: 0x6e2fae20, 0x3bab3: 0x6e2fb020, + 0x3bab4: 0x6e2fb220, 0x3bab5: 0x6e2fb420, 0x3bab6: 0x6e2fb620, 0x3bab7: 0x6e2fb820, + 0x3bab8: 0x6e2fba20, 0x3bab9: 0x6e2fbc20, 0x3baba: 0x6e2fbe20, 0x3babb: 0x6e2fc020, + 0x3babc: 0x6e2fc220, 0x3babd: 0x6e2fc420, 0x3babe: 0x6e2fc620, 0x3babf: 0x6e2fc820, + // Block 0xeeb, offset 0x3bac0 + 0x3bac0: 0x6e2fca20, 0x3bac1: 0x6e2fcc20, 0x3bac2: 0x6e36c220, 0x3bac3: 0x6e36c420, + 0x3bac4: 0x6e36c620, 0x3bac5: 0x6e36c820, 0x3bac6: 0x6e36ca20, 0x3bac7: 0x6e36cc20, + 0x3bac8: 0x6e36ce20, 0x3bac9: 0x6e36d020, 0x3baca: 0x6e36d220, 0x3bacb: 0x6e36d420, + 0x3bacc: 0x6e36d620, 0x3bacd: 0x6e36d820, 0x3bace: 0x6e36da20, 0x3bacf: 0x6e36dc20, + 0x3bad0: 0x6e36de20, 0x3bad1: 0x6e36e020, 0x3bad2: 0x6e36e220, 0x3bad3: 0x6e36e420, + 0x3bad4: 0x6e36e620, 0x3bad5: 0x6e36e820, 0x3bad6: 0x6e36ea20, 0x3bad7: 0x6e36ec20, + 0x3bad8: 0x6e36ee20, 0x3bad9: 0x6e36f020, 0x3bada: 0x6e36f220, 0x3badb: 0x6e36f420, + 0x3badc: 0x6e36f620, 0x3badd: 0x6e36f820, 0x3bade: 0x6e36fa20, 0x3badf: 0x6e36fc20, + 0x3bae0: 0x6e36fe20, 0x3bae1: 0x6e370020, 0x3bae2: 0x6e370220, 0x3bae3: 0x6e370420, + 0x3bae4: 0x6e370620, 0x3bae5: 0x6e3bb620, 0x3bae6: 0x6e3bb820, 0x3bae7: 0x6e3bba20, + 0x3bae8: 0x6e3bbc20, 0x3bae9: 0x6e3bbe20, 0x3baea: 0x6e3bc020, 0x3baeb: 0x6e3bc220, + 0x3baec: 0x6e3bc420, 0x3baed: 0x6e3bc620, 0x3baee: 0x6e3bc820, 0x3baef: 0x6e3bca20, + 0x3baf0: 0x6e3bcc20, 0x3baf1: 0x6e3bce20, 0x3baf2: 0x6e3bd020, 0x3baf3: 0x6e3bd220, + 0x3baf4: 0x6e3bd420, 0x3baf5: 0x6e3bd620, 0x3baf6: 0x6e3bd820, 0x3baf7: 0x6e3bda20, + 0x3baf8: 0x6e3bdc20, 0x3baf9: 0x6e3bde20, 0x3bafa: 0x6e3be020, 0x3bafb: 0x6e3f6020, + 0x3bafc: 0x6e3f6220, 0x3bafd: 0x6e3f6420, 0x3bafe: 0x6e3f6620, 0x3baff: 0x6e3f6820, + // Block 0xeec, offset 0x3bb00 + 0x3bb00: 0x6e3f6a20, 0x3bb01: 0x6e3f6c20, 0x3bb02: 0x6e3f6e20, 0x3bb03: 0x6e3f7020, + 0x3bb04: 0x6e3f7220, 0x3bb05: 0x6e3f7420, 0x3bb06: 0x6e3f7620, 0x3bb07: 0x6e3f7820, + 0x3bb08: 0x6e3f7a20, 0x3bb09: 0x6e3f7c20, 0x3bb0a: 0x6e3f7e20, 0x3bb0b: 0x6e3f8020, + 0x3bb0c: 0x6e3f8220, 0x3bb0d: 0x6e41de20, 0x3bb0e: 0x6e41e020, 0x3bb0f: 0x6e41e220, + 0x3bb10: 0x6e41e420, 0x3bb11: 0x6e41e620, 0x3bb12: 0x6e41e820, 0x3bb13: 0x6e41ea20, + 0x3bb14: 0x6e41ec20, 0x3bb15: 0x6e41ee20, 0x3bb16: 0x6e41f020, 0x3bb17: 0x6e41f220, + 0x3bb18: 0x6e41f420, 0x3bb19: 0x6e41f620, 0x3bb1a: 0x6e43a420, 0x3bb1b: 0x6e43a620, + 0x3bb1c: 0x6e43a820, 0x3bb1d: 0x6e43aa20, 0x3bb1e: 0x6e43ac20, 0x3bb1f: 0x6e43ae20, + 0x3bb20: 0x6e43b020, 0x3bb21: 0x6e43b220, 0x3bb22: 0x6e43b420, 0x3bb23: 0x6e43b620, + 0x3bb24: 0x6e43b820, 0x3bb25: 0x6e43ba20, 0x3bb26: 0x6e43bc20, 0x3bb27: 0x6e44d420, + 0x3bb28: 0x6e44d620, 0x3bb29: 0x6e44d820, 0x3bb2a: 0x6e44da20, 0x3bb2b: 0x6e44dc20, + 0x3bb2c: 0x6e44de20, 0x3bb2d: 0x6e44e020, 0x3bb2e: 0x6e44e220, 0x3bb2f: 0x6e44e420, + 0x3bb30: 0x6e458420, 0x3bb31: 0x6e458620, 0x3bb32: 0x6e458820, 0x3bb33: 0x6e45fa20, + 0x3bb34: 0x6e45fc20, 0x3bb35: 0x6e465a20, 0x3bb36: 0x6e465c20, 0x3bb37: 0x6e465e20, + 0x3bb38: 0x6e466020, 0x3bb39: 0x6ce87820, 0x3bb3a: 0x6ce87a20, 0x3bb3b: 0x6ce87c20, + 0x3bb3c: 0x6d46d420, 0x3bb3d: 0x6d46d620, 0x3bb3e: 0x6d46d820, 0x3bb3f: 0x6d46da20, + // Block 0xeed, offset 0x3bb40 + 0x3bb40: 0x6d17fa20, 0x3bb41: 0x6d742620, 0x3bb42: 0x6d742820, 0x3bb43: 0x6d742a20, + 0x3bb44: 0x6d742c20, 0x3bb45: 0x6d9dce20, 0x3bb46: 0x6d9dd020, 0x3bb47: 0x6d9dd220, + 0x3bb48: 0x6d9dd420, 0x3bb49: 0x6d742e20, 0x3bb4a: 0x6dc05a20, 0x3bb4b: 0x6dc05c20, + 0x3bb4c: 0x6df63020, 0x3bb4d: 0x6e1a0020, 0x3bb4e: 0x6e2fdc20, 0x3bb4f: 0x6ce88820, + 0x3bb50: 0x6ce88a20, 0x3bb51: 0x6ce88c20, 0x3bb52: 0x6d181a20, 0x3bb53: 0x6d181c20, + 0x3bb54: 0x6d181e20, 0x3bb55: 0x6d182020, 0x3bb56: 0x6d182220, 0x3bb57: 0x6d182420, + 0x3bb58: 0x6d182620, 0x3bb59: 0x6d182820, 0x3bb5a: 0x6d182a20, 0x3bb5b: 0x6d182c20, + 0x3bb5c: 0x6d182e20, 0x3bb5d: 0x6d470020, 0x3bb5e: 0x6d470220, 0x3bb5f: 0x6d470420, + 0x3bb60: 0x6d470620, 0x3bb61: 0x6d470820, 0x3bb62: 0x6d470a20, 0x3bb63: 0x6d470c20, + 0x3bb64: 0x6d470e20, 0x3bb65: 0x6d471020, 0x3bb66: 0x6d471220, 0x3bb67: 0x6d471420, + 0x3bb68: 0x6d471620, 0x3bb69: 0x6d471820, 0x3bb6a: 0x6d471a20, 0x3bb6b: 0x6d471c20, + 0x3bb6c: 0x6d471e20, 0x3bb6d: 0x6d472020, 0x3bb6e: 0x6d472220, 0x3bb6f: 0x6d472420, + 0x3bb70: 0x6d747e20, 0x3bb71: 0x6d748020, 0x3bb72: 0x6d748220, 0x3bb73: 0x6d748420, + 0x3bb74: 0x6d748620, 0x3bb75: 0x6d748820, 0x3bb76: 0x6d748a20, 0x3bb77: 0x6d748c20, + 0x3bb78: 0x6d748e20, 0x3bb79: 0x6d749020, 0x3bb7a: 0x6d749220, 0x3bb7b: 0x6d749420, + 0x3bb7c: 0x6d749620, 0x3bb7d: 0x6d749820, 0x3bb7e: 0x6d749a20, 0x3bb7f: 0x6d749c20, + // Block 0xeee, offset 0x3bb80 + 0x3bb80: 0x6d749e20, 0x3bb81: 0x6d74a020, 0x3bb82: 0x6d74a220, 0x3bb83: 0x6d74a420, + 0x3bb84: 0x6d74a620, 0x3bb85: 0x6d74a820, 0x3bb86: 0x6d74aa20, 0x3bb87: 0x6d74ac20, + 0x3bb88: 0x6d74ae20, 0x3bb89: 0x6d74b020, 0x3bb8a: 0x6d74b220, 0x3bb8b: 0x6d74b420, + 0x3bb8c: 0x6d74b620, 0x3bb8d: 0x6d74b820, 0x3bb8e: 0x6d74ba20, 0x3bb8f: 0x6d74bc20, + 0x3bb90: 0x6d74be20, 0x3bb91: 0x6d74c020, 0x3bb92: 0x6d74c220, 0x3bb93: 0x6d74c420, + 0x3bb94: 0x6d74c620, 0x3bb95: 0x6d74c820, 0x3bb96: 0x6d74ca20, 0x3bb97: 0x6d74cc20, + 0x3bb98: 0x6d74ce20, 0x3bb99: 0x6d74d020, 0x3bb9a: 0x6d74d220, 0x3bb9b: 0x6d74d420, + 0x3bb9c: 0x6d9e4220, 0x3bb9d: 0x6d9e4420, 0x3bb9e: 0x6d9e4620, 0x3bb9f: 0x6d9e4820, + 0x3bba0: 0x6d9e4a20, 0x3bba1: 0x6d9e4c20, 0x3bba2: 0x6d9e4e20, 0x3bba3: 0x6d9e5020, + 0x3bba4: 0x6d9e5220, 0x3bba5: 0x6d9e5420, 0x3bba6: 0x6d9e5620, 0x3bba7: 0x6d9e5820, + 0x3bba8: 0x6d9e5a20, 0x3bba9: 0x6d9e5c20, 0x3bbaa: 0x6d9e5e20, 0x3bbab: 0x6d9e6020, + 0x3bbac: 0x6d9e6220, 0x3bbad: 0x6d9e6420, 0x3bbae: 0x6d9e6620, 0x3bbaf: 0x6d9e6820, + 0x3bbb0: 0x6d9e6a20, 0x3bbb1: 0x6d9e6c20, 0x3bbb2: 0x6d9e6e20, 0x3bbb3: 0x6d9e7020, + 0x3bbb4: 0x6d9e7220, 0x3bbb5: 0x6d9e7420, 0x3bbb6: 0x6d9e7620, 0x3bbb7: 0x6d9e7820, + 0x3bbb8: 0x6d9e7a20, 0x3bbb9: 0x6d9e7c20, 0x3bbba: 0x6d9e7e20, 0x3bbbb: 0x6d9e8020, + 0x3bbbc: 0x6d9e8220, 0x3bbbd: 0x6d9e8420, 0x3bbbe: 0x6d9e8620, 0x3bbbf: 0x6d9e8820, + // Block 0xeef, offset 0x3bbc0 + 0x3bbc0: 0x6d9e8a20, 0x3bbc1: 0x6d9e8c20, 0x3bbc2: 0x6d9e8e20, 0x3bbc3: 0x6d9e9020, + 0x3bbc4: 0x6d9e9220, 0x3bbc5: 0x6d9e9420, 0x3bbc6: 0x6d9e9620, 0x3bbc7: 0x6d9e9820, + 0x3bbc8: 0x6d9e9a20, 0x3bbc9: 0x6d9e9c20, 0x3bbca: 0x6d9e9e20, 0x3bbcb: 0x6d9ea020, + 0x3bbcc: 0x6d9ea220, 0x3bbcd: 0x6d9ea420, 0x3bbce: 0x6d9ea620, 0x3bbcf: 0x6d9ea820, + 0x3bbd0: 0x6d9eaa20, 0x3bbd1: 0x6d9eac20, 0x3bbd2: 0x6dc0ba20, 0x3bbd3: 0x6dc0bc20, + 0x3bbd4: 0x6dc0be20, 0x3bbd5: 0x6dc0c020, 0x3bbd6: 0x6dc0c220, 0x3bbd7: 0x6dc0c420, + 0x3bbd8: 0x6dc0c620, 0x3bbd9: 0x6dc0c820, 0x3bbda: 0x6dc0ca20, 0x3bbdb: 0x6dc0cc20, + 0x3bbdc: 0x6dc0ce20, 0x3bbdd: 0x6dc0d020, 0x3bbde: 0x6dc0d220, 0x3bbdf: 0x6dc0d420, + 0x3bbe0: 0x6dc0d620, 0x3bbe1: 0x6dc0d820, 0x3bbe2: 0x6dc0da20, 0x3bbe3: 0x6dc0dc20, + 0x3bbe4: 0x6dc0de20, 0x3bbe5: 0x6dc0e020, 0x3bbe6: 0x6dc0e220, 0x3bbe7: 0x6dc0e420, + 0x3bbe8: 0x6dc0e620, 0x3bbe9: 0x6dc0e820, 0x3bbea: 0x6dc0ea20, 0x3bbeb: 0x6dc0ec20, + 0x3bbec: 0x6dc0ee20, 0x3bbed: 0x6dc0f020, 0x3bbee: 0x6dc0f220, 0x3bbef: 0x6dc0f420, + 0x3bbf0: 0x6dc0f620, 0x3bbf1: 0x6dc0f820, 0x3bbf2: 0x6dc0fa20, 0x3bbf3: 0x6dc0fc20, + 0x3bbf4: 0x6dc0fe20, 0x3bbf5: 0x6dc10020, 0x3bbf6: 0x6dc10220, 0x3bbf7: 0x6dc10420, + 0x3bbf8: 0x6dc10620, 0x3bbf9: 0x6dc10820, 0x3bbfa: 0x6dc10a20, 0x3bbfb: 0x6dc10c20, + 0x3bbfc: 0x6dc10e20, 0x3bbfd: 0x6dc11020, 0x3bbfe: 0x6dc11220, 0x3bbff: 0x6dc11420, + // Block 0xef0, offset 0x3bc00 + 0x3bc00: 0x6dc11620, 0x3bc01: 0x6dc11820, 0x3bc02: 0x6dc11a20, 0x3bc03: 0x6dc11c20, + 0x3bc04: 0x6dc11e20, 0x3bc05: 0x6dc12020, 0x3bc06: 0x6dc12220, 0x3bc07: 0x6dc12420, + 0x3bc08: 0x6dc12620, 0x3bc09: 0x6dc12820, 0x3bc0a: 0x6dde8220, 0x3bc0b: 0x6dde8420, + 0x3bc0c: 0x6dde8620, 0x3bc0d: 0x6dde8820, 0x3bc0e: 0x6dde8a20, 0x3bc0f: 0x6dde8c20, + 0x3bc10: 0x6dde8e20, 0x3bc11: 0x6dde9020, 0x3bc12: 0x6dde9220, 0x3bc13: 0x6dde9420, + 0x3bc14: 0x6dde9620, 0x3bc15: 0x6dde9820, 0x3bc16: 0x6dde9a20, 0x3bc17: 0x6dde9c20, + 0x3bc18: 0x6dde9e20, 0x3bc19: 0x6ddea020, 0x3bc1a: 0x6ddea220, 0x3bc1b: 0x6ddea420, + 0x3bc1c: 0x6ddea620, 0x3bc1d: 0x6ddea820, 0x3bc1e: 0x6ddeaa20, 0x3bc1f: 0x6ddeac20, + 0x3bc20: 0x6ddeae20, 0x3bc21: 0x6ddeb020, 0x3bc22: 0x6ddeb220, 0x3bc23: 0x6ddeb420, + 0x3bc24: 0x6ddeb620, 0x3bc25: 0x6ddeb820, 0x3bc26: 0x6ddeba20, 0x3bc27: 0x6ddebc20, + 0x3bc28: 0x6ddebe20, 0x3bc29: 0x6ddec020, 0x3bc2a: 0x6ddec220, 0x3bc2b: 0x6ddec420, + 0x3bc2c: 0x6ddec620, 0x3bc2d: 0x6ddec820, 0x3bc2e: 0x6ddeca20, 0x3bc2f: 0x6ddecc20, + 0x3bc30: 0x6ddece20, 0x3bc31: 0x6dded020, 0x3bc32: 0x6dded220, 0x3bc33: 0x6dded420, + 0x3bc34: 0x6dded620, 0x3bc35: 0x6dded820, 0x3bc36: 0x6ddeda20, 0x3bc37: 0x6df6a020, + 0x3bc38: 0x6df6a220, 0x3bc39: 0x6df6a420, 0x3bc3a: 0x6df6a620, 0x3bc3b: 0x6df6a820, + 0x3bc3c: 0x6df6aa20, 0x3bc3d: 0x6df6ac20, 0x3bc3e: 0x6df6ae20, 0x3bc3f: 0x6df6b020, + // Block 0xef1, offset 0x3bc40 + 0x3bc40: 0x6df6b220, 0x3bc41: 0x6df6b420, 0x3bc42: 0x6df6b620, 0x3bc43: 0x6df6b820, + 0x3bc44: 0x6df6ba20, 0x3bc45: 0x6df6bc20, 0x3bc46: 0x6df6be20, 0x3bc47: 0x6df6c020, + 0x3bc48: 0x6df6c220, 0x3bc49: 0x6df6c420, 0x3bc4a: 0x6df6c620, 0x3bc4b: 0x6df6c820, + 0x3bc4c: 0x6df6ca20, 0x3bc4d: 0x6df6cc20, 0x3bc4e: 0x6df6ce20, 0x3bc4f: 0x6df6d020, + 0x3bc50: 0x6df6d220, 0x3bc51: 0x6df6d420, 0x3bc52: 0x6df6d620, 0x3bc53: 0x6df6d820, + 0x3bc54: 0x6df6da20, 0x3bc55: 0x6df6dc20, 0x3bc56: 0x6df6de20, 0x3bc57: 0x6df6e020, + 0x3bc58: 0x6df6e220, 0x3bc59: 0x6df6e420, 0x3bc5a: 0x6df6e620, 0x3bc5b: 0x6df6e820, + 0x3bc5c: 0x6df6ea20, 0x3bc5d: 0x6df6ec20, 0x3bc5e: 0x6df6ee20, 0x3bc5f: 0x6df6f020, + 0x3bc60: 0x6df6f220, 0x3bc61: 0x6df6f420, 0x3bc62: 0x6df6f620, 0x3bc63: 0x6df6f820, + 0x3bc64: 0x6df6fa20, 0x3bc65: 0x6df6fc20, 0x3bc66: 0x6df6fe20, 0x3bc67: 0x6df70020, + 0x3bc68: 0x6df70220, 0x3bc69: 0x6df70420, 0x3bc6a: 0x6df70620, 0x3bc6b: 0x6df70820, + 0x3bc6c: 0x6df70a20, 0x3bc6d: 0x6df70c20, 0x3bc6e: 0x6df70e20, 0x3bc6f: 0x6df71020, + 0x3bc70: 0x6df71220, 0x3bc71: 0x6df71420, 0x3bc72: 0x6df71620, 0x3bc73: 0x6df71820, + 0x3bc74: 0x6df71a20, 0x3bc75: 0x6df71c20, 0x3bc76: 0x6e0a4420, 0x3bc77: 0x6e0a4620, + 0x3bc78: 0x6e0a4820, 0x3bc79: 0x6e0a4a20, 0x3bc7a: 0x6e0a4c20, 0x3bc7b: 0x6e0a4e20, + 0x3bc7c: 0x6e0a5020, 0x3bc7d: 0x6e0a5220, 0x3bc7e: 0x6e0a5420, 0x3bc7f: 0x6e0a5620, + // Block 0xef2, offset 0x3bc80 + 0x3bc80: 0x6e0a5820, 0x3bc81: 0x6e0a5a20, 0x3bc82: 0x6e0a5c20, 0x3bc83: 0x6e0a5e20, + 0x3bc84: 0x6e0a6020, 0x3bc85: 0x6e0a6220, 0x3bc86: 0x6e0a6420, 0x3bc87: 0x6e0a6620, + 0x3bc88: 0x6e0a6820, 0x3bc89: 0x6e0a6a20, 0x3bc8a: 0x6e0a6c20, 0x3bc8b: 0x6e0a6e20, + 0x3bc8c: 0x6e0a7020, 0x3bc8d: 0x6e0a7220, 0x3bc8e: 0x6e0a7420, 0x3bc8f: 0x6e0a7620, + 0x3bc90: 0x6e0a7820, 0x3bc91: 0x6e0a7a20, 0x3bc92: 0x6e0a7c20, 0x3bc93: 0x6e0a7e20, + 0x3bc94: 0x6e0a8020, 0x3bc95: 0x6e0a8220, 0x3bc96: 0x6e0a8420, 0x3bc97: 0x6e0a8620, + 0x3bc98: 0x6e0a8820, 0x3bc99: 0x6e0a8a20, 0x3bc9a: 0x6e0a8c20, 0x3bc9b: 0x6e0a8e20, + 0x3bc9c: 0x6e0a9020, 0x3bc9d: 0x6e0a9220, 0x3bc9e: 0x6e0a9420, 0x3bc9f: 0x6e0a9620, + 0x3bca0: 0x6e0a9820, 0x3bca1: 0x6e0a9a20, 0x3bca2: 0x6e0a9c20, 0x3bca3: 0x6e0a9e20, + 0x3bca4: 0x6e0aa020, 0x3bca5: 0x6e0aa220, 0x3bca6: 0x6e0aa420, 0x3bca7: 0x6e0aa620, + 0x3bca8: 0x6e0aa820, 0x3bca9: 0x6e0aaa20, 0x3bcaa: 0x6e0aac20, 0x3bcab: 0x6e0aae20, + 0x3bcac: 0x6e0ab020, 0x3bcad: 0x6e0ab220, 0x3bcae: 0x6e0ab420, 0x3bcaf: 0x6e0ab620, + 0x3bcb0: 0x6e0ab820, 0x3bcb1: 0x6e0aba20, 0x3bcb2: 0x6e0abc20, 0x3bcb3: 0x6e0abe20, + 0x3bcb4: 0x6e0ac020, 0x3bcb5: 0x6e0ac220, 0x3bcb6: 0x6e0ac420, 0x3bcb7: 0x6e0ac620, + 0x3bcb8: 0x6e0ac820, 0x3bcb9: 0x6e0aca20, 0x3bcba: 0x6e1a5420, 0x3bcbb: 0x6e1a5620, + 0x3bcbc: 0x6e1a5820, 0x3bcbd: 0x6e1a5a20, 0x3bcbe: 0x6e1a5c20, 0x3bcbf: 0x6e1a5e20, + // Block 0xef3, offset 0x3bcc0 + 0x3bcc0: 0x6e1a6020, 0x3bcc1: 0x6e1a6220, 0x3bcc2: 0x6e1a6420, 0x3bcc3: 0x6e1a6620, + 0x3bcc4: 0x6e1a6820, 0x3bcc5: 0x6e1a6a20, 0x3bcc6: 0x6e1a6c20, 0x3bcc7: 0x6e1a6e20, + 0x3bcc8: 0x6e1a7020, 0x3bcc9: 0x6e1a7220, 0x3bcca: 0x6e1a7420, 0x3bccb: 0x6e1a7620, + 0x3bccc: 0x6e1a7820, 0x3bccd: 0x6e1a7a20, 0x3bcce: 0x6e1a7c20, 0x3bccf: 0x6e1a7e20, + 0x3bcd0: 0x6e1a8020, 0x3bcd1: 0x6e1a8220, 0x3bcd2: 0x6e1a8420, 0x3bcd3: 0x6e1a8620, + 0x3bcd4: 0x6e1a8820, 0x3bcd5: 0x6e1a8a20, 0x3bcd6: 0x6e1a8c20, 0x3bcd7: 0x6e1a8e20, + 0x3bcd8: 0x6e1a9020, 0x3bcd9: 0x6e1a9220, 0x3bcda: 0x6e1a9420, 0x3bcdb: 0x6e1a9620, + 0x3bcdc: 0x6e1a9820, 0x3bcdd: 0x6e1a9a20, 0x3bcde: 0x6e1a9c20, 0x3bcdf: 0x6e1a9e20, + 0x3bce0: 0x6e1aa020, 0x3bce1: 0x6e1aa220, 0x3bce2: 0x6e1aa420, 0x3bce3: 0x6e1aa620, + 0x3bce4: 0x6e1aa820, 0x3bce5: 0x6e1aaa20, 0x3bce6: 0x6e1aac20, 0x3bce7: 0x6e1aae20, + 0x3bce8: 0x6e1ab020, 0x3bce9: 0x6e1ab220, 0x3bcea: 0x6e1ab420, 0x3bceb: 0x6e1ab620, + 0x3bcec: 0x6e1ab820, 0x3bced: 0x6e26a820, 0x3bcee: 0x6e26aa20, 0x3bcef: 0x6e26ac20, + 0x3bcf0: 0x6e26ae20, 0x3bcf1: 0x6e26b020, 0x3bcf2: 0x6e26b220, 0x3bcf3: 0x6e26b420, + 0x3bcf4: 0x6e26b620, 0x3bcf5: 0x6e26b820, 0x3bcf6: 0x6e26ba20, 0x3bcf7: 0x6e26bc20, + 0x3bcf8: 0x6e26be20, 0x3bcf9: 0x6e26c020, 0x3bcfa: 0x6e26c220, 0x3bcfb: 0x6e26c420, + 0x3bcfc: 0x6e26c620, 0x3bcfd: 0x6e26c820, 0x3bcfe: 0x6e26ca20, 0x3bcff: 0x6e26cc20, + // Block 0xef4, offset 0x3bd00 + 0x3bd00: 0x6e26ce20, 0x3bd01: 0x6e26d020, 0x3bd02: 0x6e26d220, 0x3bd03: 0x6e26d420, + 0x3bd04: 0x6e26d620, 0x3bd05: 0x6e26d820, 0x3bd06: 0x6e26da20, 0x3bd07: 0x6e26dc20, + 0x3bd08: 0x6e26de20, 0x3bd09: 0x6e26e020, 0x3bd0a: 0x6e26e220, 0x3bd0b: 0x6e26e420, + 0x3bd0c: 0x6e26e620, 0x3bd0d: 0x6e26e820, 0x3bd0e: 0x6e26ea20, 0x3bd0f: 0x6e26ec20, + 0x3bd10: 0x6e26ee20, 0x3bd11: 0x6e26f020, 0x3bd12: 0x6e26f220, 0x3bd13: 0x6e26f420, + 0x3bd14: 0x6e26f620, 0x3bd15: 0x6e26f820, 0x3bd16: 0x6e26fa20, 0x3bd17: 0x6e26fc20, + 0x3bd18: 0x6e26fe20, 0x3bd19: 0x6e270020, 0x3bd1a: 0x6e270220, 0x3bd1b: 0x6e270420, + 0x3bd1c: 0x6e270620, 0x3bd1d: 0x6e270820, 0x3bd1e: 0x6e270a20, 0x3bd1f: 0x6e270c20, + 0x3bd20: 0x6e270e20, 0x3bd21: 0x6e271020, 0x3bd22: 0x6e271220, 0x3bd23: 0x6e271420, + 0x3bd24: 0x6e271620, 0x3bd25: 0x6e271820, 0x3bd26: 0x6e271a20, 0x3bd27: 0x6e271c20, + 0x3bd28: 0x6e271e20, 0x3bd29: 0x6e272020, 0x3bd2a: 0x6e272220, 0x3bd2b: 0x6e272420, + 0x3bd2c: 0x6e272620, 0x3bd2d: 0x6e272820, 0x3bd2e: 0x6e272a20, 0x3bd2f: 0x6e302220, + 0x3bd30: 0x6e302420, 0x3bd31: 0x6e302620, 0x3bd32: 0x6e302820, 0x3bd33: 0x6e302a20, + 0x3bd34: 0x6e302c20, 0x3bd35: 0x6e302e20, 0x3bd36: 0x6e303020, 0x3bd37: 0x6e303220, + 0x3bd38: 0x6e303420, 0x3bd39: 0x6e303620, 0x3bd3a: 0x6e303820, 0x3bd3b: 0x6e303a20, + 0x3bd3c: 0x6e303c20, 0x3bd3d: 0x6e303e20, 0x3bd3e: 0x6e304020, 0x3bd3f: 0x6e304220, + // Block 0xef5, offset 0x3bd40 + 0x3bd40: 0x6e304420, 0x3bd41: 0x6e304620, 0x3bd42: 0x6e304820, 0x3bd43: 0x6e304a20, + 0x3bd44: 0x6e304c20, 0x3bd45: 0x6e304e20, 0x3bd46: 0x6e305020, 0x3bd47: 0x6e305220, + 0x3bd48: 0x6e305420, 0x3bd49: 0x6e305620, 0x3bd4a: 0x6e305820, 0x3bd4b: 0x6e305a20, + 0x3bd4c: 0x6e305c20, 0x3bd4d: 0x6e305e20, 0x3bd4e: 0x6e306020, 0x3bd4f: 0x6e306220, + 0x3bd50: 0x6e306420, 0x3bd51: 0x6e306620, 0x3bd52: 0x6e306820, 0x3bd53: 0x6e306a20, + 0x3bd54: 0x6e306c20, 0x3bd55: 0x6e306e20, 0x3bd56: 0x6e307020, 0x3bd57: 0x6e307220, + 0x3bd58: 0x6e307420, 0x3bd59: 0x6e307620, 0x3bd5a: 0x6e307820, 0x3bd5b: 0x6e307a20, + 0x3bd5c: 0x6e307c20, 0x3bd5d: 0x6e307e20, 0x3bd5e: 0x6e308020, 0x3bd5f: 0x6e308220, + 0x3bd60: 0x6e308420, 0x3bd61: 0x6e308620, 0x3bd62: 0x6e308820, 0x3bd63: 0x6e308a20, + 0x3bd64: 0x6e308c20, 0x3bd65: 0x6e308e20, 0x3bd66: 0x6e309020, 0x3bd67: 0x6e309220, + 0x3bd68: 0x6e309420, 0x3bd69: 0x6e309620, 0x3bd6a: 0x6e309820, 0x3bd6b: 0x6e309a20, + 0x3bd6c: 0x6e374020, 0x3bd6d: 0x6e309c20, 0x3bd6e: 0x6e374220, 0x3bd6f: 0x6e374420, + 0x3bd70: 0x6e374620, 0x3bd71: 0x6e374820, 0x3bd72: 0x6e374a20, 0x3bd73: 0x6e374c20, + 0x3bd74: 0x6e374e20, 0x3bd75: 0x6e375020, 0x3bd76: 0x6e375220, 0x3bd77: 0x6e375420, + 0x3bd78: 0x6e375620, 0x3bd79: 0x6e375820, 0x3bd7a: 0x6e375a20, 0x3bd7b: 0x6e375c20, + 0x3bd7c: 0x6e375e20, 0x3bd7d: 0x6e376020, 0x3bd7e: 0x6e376220, 0x3bd7f: 0x6e376420, + // Block 0xef6, offset 0x3bd80 + 0x3bd80: 0x6e376620, 0x3bd81: 0x6e376820, 0x3bd82: 0x6e376a20, 0x3bd83: 0x6e376c20, + 0x3bd84: 0x6e376e20, 0x3bd85: 0x6e377020, 0x3bd86: 0x6e377220, 0x3bd87: 0x6e377420, + 0x3bd88: 0x6e377620, 0x3bd89: 0x6e377820, 0x3bd8a: 0x6e377a20, 0x3bd8b: 0x6e377c20, + 0x3bd8c: 0x6e377e20, 0x3bd8d: 0x6e378020, 0x3bd8e: 0x6e378220, 0x3bd8f: 0x6e378420, + 0x3bd90: 0x6e378620, 0x3bd91: 0x6e3bfa20, 0x3bd92: 0x6e3bfc20, 0x3bd93: 0x6e3bfe20, + 0x3bd94: 0x6e3c0020, 0x3bd95: 0x6e3c0220, 0x3bd96: 0x6e3c0420, 0x3bd97: 0x6e3c0620, + 0x3bd98: 0x6e3c0820, 0x3bd99: 0x6e3c0a20, 0x3bd9a: 0x6e3c0c20, 0x3bd9b: 0x6e3c0e20, + 0x3bd9c: 0x6e3c1020, 0x3bd9d: 0x6e3c1220, 0x3bd9e: 0x6e3c8020, 0x3bd9f: 0x6e3c1420, + 0x3bda0: 0x6e3c1620, 0x3bda1: 0x6e3c1820, 0x3bda2: 0x6e3c1a20, 0x3bda3: 0x6e3c1c20, + 0x3bda4: 0x6e3c1e20, 0x3bda5: 0x6e3c2020, 0x3bda6: 0x6e3c2220, 0x3bda7: 0x6e3c2420, + 0x3bda8: 0x6e3c2620, 0x3bda9: 0x6e3c2820, 0x3bdaa: 0x6e3c2a20, 0x3bdab: 0x6e3c2c20, + 0x3bdac: 0x6e3c2e20, 0x3bdad: 0x6e3f8c20, 0x3bdae: 0x6e3f8e20, 0x3bdaf: 0x6e3f9020, + 0x3bdb0: 0x6e3f9220, 0x3bdb1: 0x6e3f9420, 0x3bdb2: 0x6e3f9620, 0x3bdb3: 0x6e3f9820, + 0x3bdb4: 0x6e3f9a20, 0x3bdb5: 0x6e3f9c20, 0x3bdb6: 0x6e3f9e20, 0x3bdb7: 0x6e3fa020, + 0x3bdb8: 0x6e3fa220, 0x3bdb9: 0x6e3fa420, 0x3bdba: 0x6e3fa620, 0x3bdbb: 0x6e3fa820, + 0x3bdbc: 0x6e3faa20, 0x3bdbd: 0x6e3fac20, 0x3bdbe: 0x6e3fae20, 0x3bdbf: 0x6e3fb020, + // Block 0xef7, offset 0x3bdc0 + 0x3bdc0: 0x6e3fb220, 0x3bdc1: 0x6e3fb420, 0x3bdc2: 0x6e3fb620, 0x3bdc3: 0x6e420020, + 0x3bdc4: 0x6e420220, 0x3bdc5: 0x6e420420, 0x3bdc6: 0x6e420620, 0x3bdc7: 0x6e420820, + 0x3bdc8: 0x6e420a20, 0x3bdc9: 0x6e420c20, 0x3bdca: 0x6e420e20, 0x3bdcb: 0x6e421020, + 0x3bdcc: 0x6e421220, 0x3bdcd: 0x6e421420, 0x3bdce: 0x6e421620, 0x3bdcf: 0x6e421820, + 0x3bdd0: 0x6e421a20, 0x3bdd1: 0x6e421c20, 0x3bdd2: 0x6e421e20, 0x3bdd3: 0x6e422020, + 0x3bdd4: 0x6e422220, 0x3bdd5: 0x6e422420, 0x3bdd6: 0x6e422620, 0x3bdd7: 0x6e422820, + 0x3bdd8: 0x6e43c620, 0x3bdd9: 0x6e43c820, 0x3bdda: 0x6e43ca20, 0x3bddb: 0x6e43cc20, + 0x3bddc: 0x6e43ce20, 0x3bddd: 0x6e43d020, 0x3bdde: 0x6e43d220, 0x3bddf: 0x6e43d420, + 0x3bde0: 0x6e43d620, 0x3bde1: 0x6e43d820, 0x3bde2: 0x6e43da20, 0x3bde3: 0x6e43dc20, + 0x3bde4: 0x6e43de20, 0x3bde5: 0x6e44ea20, 0x3bde6: 0x6e44ec20, 0x3bde7: 0x6e44ee20, + 0x3bde8: 0x6e44f020, 0x3bde9: 0x6e44f220, 0x3bdea: 0x6e44f420, 0x3bdeb: 0x6e44f620, + 0x3bdec: 0x6e44f820, 0x3bded: 0x6e44fa20, 0x3bdee: 0x6e459220, 0x3bdef: 0x6e459420, + 0x3bdf0: 0x6e459620, 0x3bdf1: 0x6e459820, 0x3bdf2: 0x6e459a20, 0x3bdf3: 0x6e459c20, + 0x3bdf4: 0x6e460220, 0x3bdf5: 0x6e460420, 0x3bdf6: 0x6e460620, 0x3bdf7: 0x6e460820, + 0x3bdf8: 0x6e466420, 0x3bdf9: 0x6e466620, 0x3bdfa: 0x6e466820, 0x3bdfb: 0x6e469c20, + 0x3bdfc: 0x6e469e20, 0x3bdfd: 0x6e46a020, 0x3bdfe: 0x6e46d620, 0x3bdff: 0x6e46f620, + // Block 0xef8, offset 0x3be00 + 0x3be00: 0x6e46f820, 0x3be01: 0x6c63b820, 0x3be02: 0x6c63ba20, 0x3be03: 0x6c63bc20, + 0x3be04: 0x6c8ade20, 0x3be05: 0x6cb76820, 0x3be06: 0x6cb76a20, 0x3be07: 0x6cb76c20, + 0x3be08: 0x6cb76e20, 0x3be09: 0x6cb77020, 0x3be0a: 0x6cb77220, 0x3be0b: 0x6cb77420, + 0x3be0c: 0x6ce8a220, 0x3be0d: 0x6ce8a420, 0x3be0e: 0x6d184820, 0x3be0f: 0x6d473420, + 0x3be10: 0x6d473620, 0x3be11: 0x6d74f220, 0x3be12: 0x6d74f420, 0x3be13: 0x6d74f620, + 0x3be14: 0x6d74f820, 0x3be15: 0x6e0ad620, 0x3be16: 0x6d474620, 0x3be17: 0x6d474820, + 0x3be18: 0x6d750220, 0x3be19: 0x6d750420, 0x3be1a: 0x6d750620, 0x3be1b: 0x6d750820, + 0x3be1c: 0x6d9ecc20, 0x3be1d: 0x6d9ece20, 0x3be1e: 0x6d9ed020, 0x3be1f: 0x6d9ed220, + 0x3be20: 0x6d9ed420, 0x3be21: 0x6d9ed620, 0x3be22: 0x6dc14420, 0x3be23: 0x6ddef220, + 0x3be24: 0x6ddef420, 0x3be25: 0x6ddef620, 0x3be26: 0x6df73820, 0x3be27: 0x6df73a20, + 0x3be28: 0x6df73c20, 0x3be29: 0x6df73e20, 0x3be2a: 0x6df74020, 0x3be2b: 0x6df74220, + 0x3be2c: 0x6df74420, 0x3be2d: 0x6e0ada20, 0x3be2e: 0x6e0adc20, 0x3be2f: 0x6e0ade20, + 0x3be30: 0x6e0ae020, 0x3be31: 0x6e0ae220, 0x3be32: 0x6e0ae420, 0x3be33: 0x6e0ae620, + 0x3be34: 0x6e0ae820, 0x3be35: 0x6e1aca20, 0x3be36: 0x6e1acc20, 0x3be37: 0x6e1ace20, + 0x3be38: 0x6e1ad020, 0x3be39: 0x6e1ad220, 0x3be3a: 0x6e273820, 0x3be3b: 0x6e273a20, + 0x3be3c: 0x6e273c20, 0x3be3d: 0x6e273e20, 0x3be3e: 0x6e274020, 0x3be3f: 0x6e30aa20, + // Block 0xef9, offset 0x3be40 + 0x3be40: 0x6e30ac20, 0x3be41: 0x6e30ae20, 0x3be42: 0x6e30b020, 0x3be43: 0x6e379020, + 0x3be44: 0x6e379220, 0x3be45: 0x6e379420, 0x3be46: 0x6e3c3420, 0x3be47: 0x6e3c3620, + 0x3be48: 0x6e3fba20, 0x3be49: 0x6e422a20, 0x3be4a: 0x6e43e020, 0x3be4b: 0x6d185c20, + 0x3be4c: 0x6d185e20, 0x3be4d: 0x6d474c20, 0x3be4e: 0x6d474e20, 0x3be4f: 0x6d751620, + 0x3be50: 0x6d751820, 0x3be51: 0x6d751a20, 0x3be52: 0x6d751c20, 0x3be53: 0x6d751e20, + 0x3be54: 0x6d752020, 0x3be55: 0x6d752220, 0x3be56: 0x6d752420, 0x3be57: 0x6d752620, + 0x3be58: 0x6d752820, 0x3be59: 0x6d752a20, 0x3be5a: 0x6d752c20, 0x3be5b: 0x6d9eea20, + 0x3be5c: 0x6d9eec20, 0x3be5d: 0x6d9eee20, 0x3be5e: 0x6d9ef020, 0x3be5f: 0x6d9ef220, + 0x3be60: 0x6d9ef420, 0x3be61: 0x6d9ef620, 0x3be62: 0x6d9ef820, 0x3be63: 0x6d9efa20, + 0x3be64: 0x6d9efc20, 0x3be65: 0x6dc14e20, 0x3be66: 0x6dc15020, 0x3be67: 0x6dc15220, + 0x3be68: 0x6dc15420, 0x3be69: 0x6dc15620, 0x3be6a: 0x6dc15820, 0x3be6b: 0x6dc15a20, + 0x3be6c: 0x6dc15c20, 0x3be6d: 0x6dc15e20, 0x3be6e: 0x6dc16020, 0x3be6f: 0x6dc16220, + 0x3be70: 0x6dc16420, 0x3be71: 0x6dc16620, 0x3be72: 0x6dc16820, 0x3be73: 0x6dc16a20, + 0x3be74: 0x6ddf0620, 0x3be75: 0x6ddf0820, 0x3be76: 0x6ddf0a20, 0x3be77: 0x6ddf0c20, + 0x3be78: 0x6ddf0e20, 0x3be79: 0x6ddf1020, 0x3be7a: 0x6ddf1220, 0x3be7b: 0x6ddf1420, + 0x3be7c: 0x6ddf1620, 0x3be7d: 0x6ddf1820, 0x3be7e: 0x6ddf1a20, 0x3be7f: 0x6ddf1c20, + // Block 0xefa, offset 0x3be80 + 0x3be80: 0x6ddf1e20, 0x3be81: 0x6ddf2020, 0x3be82: 0x6ddf2220, 0x3be83: 0x6ddf2420, + 0x3be84: 0x6df75620, 0x3be85: 0x6df75820, 0x3be86: 0x6df75a20, 0x3be87: 0x6df75c20, + 0x3be88: 0x6df75e20, 0x3be89: 0x6df76020, 0x3be8a: 0x6df76220, 0x3be8b: 0x6df76420, + 0x3be8c: 0x6df76620, 0x3be8d: 0x6df76820, 0x3be8e: 0x6e0af420, 0x3be8f: 0x6e0af620, + 0x3be90: 0x6e0af820, 0x3be91: 0x6e0afa20, 0x3be92: 0x6e0afc20, 0x3be93: 0x6e0afe20, + 0x3be94: 0x6e0b0020, 0x3be95: 0x6e0b0220, 0x3be96: 0x6e0b0420, 0x3be97: 0x6e1ada20, + 0x3be98: 0x6e1adc20, 0x3be99: 0x6e1ade20, 0x3be9a: 0x6e1ae020, 0x3be9b: 0x6e1ae220, + 0x3be9c: 0x6e274620, 0x3be9d: 0x6e274820, 0x3be9e: 0x6e274a20, 0x3be9f: 0x6e274c20, + 0x3bea0: 0x6e274e20, 0x3bea1: 0x6e30b420, 0x3bea2: 0x6e30b620, 0x3bea3: 0x6e30b820, + 0x3bea4: 0x6e30ba20, 0x3bea5: 0x6e30bc20, 0x3bea6: 0x6e30be20, 0x3bea7: 0x6e30c020, + 0x3bea8: 0x6e30c220, 0x3bea9: 0x6e30c420, 0x3beaa: 0x6e379c20, 0x3beab: 0x6e379e20, + 0x3beac: 0x6e37a020, 0x3bead: 0x6e37a220, 0x3beae: 0x6e3c3a20, 0x3beaf: 0x6e3c3c20, + 0x3beb0: 0x6e3c3e20, 0x3beb1: 0x6e3c4020, 0x3beb2: 0x6e3c4220, 0x3beb3: 0x6e3c4420, + 0x3beb4: 0x6e3c4620, 0x3beb5: 0x6e422c20, 0x3beb6: 0x6e43e420, 0x3beb7: 0x6e43e620, + 0x3beb8: 0x6e44fc20, 0x3beb9: 0x6e460c20, 0x3beba: 0x6e46d820, 0x3bebb: 0x6e46fa20, + 0x3bebc: 0x6d186220, 0x3bebd: 0x6d186420, 0x3bebe: 0x6d186620, 0x3bebf: 0x6d186820, + // Block 0xefb, offset 0x3bec0 + 0x3bec0: 0x6d186a20, 0x3bec1: 0x6d475820, 0x3bec2: 0x6d475a20, 0x3bec3: 0x6d475c20, + 0x3bec4: 0x6d475e20, 0x3bec5: 0x6d753c20, 0x3bec6: 0x6d753e20, 0x3bec7: 0x6d754020, + 0x3bec8: 0x6d754220, 0x3bec9: 0x6d754420, 0x3beca: 0x6d754620, 0x3becb: 0x6d754820, + 0x3becc: 0x6d754a20, 0x3becd: 0x6d754c20, 0x3bece: 0x6d754e20, 0x3becf: 0x6d755020, + 0x3bed0: 0x6d755220, 0x3bed1: 0x6d755420, 0x3bed2: 0x6d755620, 0x3bed3: 0x6d755820, + 0x3bed4: 0x6d9f0c20, 0x3bed5: 0x6d9f0e20, 0x3bed6: 0x6d9f1020, 0x3bed7: 0x6d9f1220, + 0x3bed8: 0x6d9f1420, 0x3bed9: 0x6d9f1620, 0x3beda: 0x6d9f1820, 0x3bedb: 0x6cbd9220, + 0x3bedc: 0x6d9f1a20, 0x3bedd: 0x6d9f1c20, 0x3bede: 0x6d9f1e20, 0x3bedf: 0x6d9f2020, + 0x3bee0: 0x6d9f2220, 0x3bee1: 0x6d9f2420, 0x3bee2: 0x6dc17420, 0x3bee3: 0x6dc17620, + 0x3bee4: 0x6dc17820, 0x3bee5: 0x6dc17a20, 0x3bee6: 0x6dc17c20, 0x3bee7: 0x6dc17e20, + 0x3bee8: 0x6dc18020, 0x3bee9: 0x6dc18220, 0x3beea: 0x6dc18420, 0x3beeb: 0x6dc18620, + 0x3beec: 0x6dc18820, 0x3beed: 0x6ddf3220, 0x3beee: 0x6ddf3420, 0x3beef: 0x6ddf3620, + 0x3bef0: 0x6ddf3820, 0x3bef1: 0x6ddf3a20, 0x3bef2: 0x6ddf3c20, 0x3bef3: 0x6ddf3e20, + 0x3bef4: 0x6ddf4020, 0x3bef5: 0x6ddf4220, 0x3bef6: 0x6ddf4420, 0x3bef7: 0x6ddf4620, + 0x3bef8: 0x6ddf4820, 0x3bef9: 0x6ddf4a20, 0x3befa: 0x6ddf4c20, 0x3befb: 0x6ddf4e20, + 0x3befc: 0x6df77820, 0x3befd: 0x6df77a20, 0x3befe: 0x6df77c20, 0x3beff: 0x6df77e20, + // Block 0xefc, offset 0x3bf00 + 0x3bf00: 0x6df78020, 0x3bf01: 0x6df78220, 0x3bf02: 0x6df78420, 0x3bf03: 0x6df78620, + 0x3bf04: 0x6df78820, 0x3bf05: 0x6df78a20, 0x3bf06: 0x6df78c20, 0x3bf07: 0x6df78e20, + 0x3bf08: 0x6df79020, 0x3bf09: 0x6df79220, 0x3bf0a: 0x6df79420, 0x3bf0b: 0x6df79620, + 0x3bf0c: 0x6e0b0820, 0x3bf0d: 0x6e0b0a20, 0x3bf0e: 0x6e0b0c20, 0x3bf0f: 0x6e0b0e20, + 0x3bf10: 0x6e0b1020, 0x3bf11: 0x6e0b1220, 0x3bf12: 0x6e0b1420, 0x3bf13: 0x6e0b1620, + 0x3bf14: 0x6e0b1820, 0x3bf15: 0x6e0b1a20, 0x3bf16: 0x6e0b1c20, 0x3bf17: 0x6e0b1e20, + 0x3bf18: 0x6e0b2020, 0x3bf19: 0x6e0b2220, 0x3bf1a: 0x6e0b2420, 0x3bf1b: 0x6e1aea20, + 0x3bf1c: 0x6e1aec20, 0x3bf1d: 0x6e1aee20, 0x3bf1e: 0x6e1af020, 0x3bf1f: 0x6e1af220, + 0x3bf20: 0x6e1af420, 0x3bf21: 0x6e1af620, 0x3bf22: 0x6e1af820, 0x3bf23: 0x6e275820, + 0x3bf24: 0x6e275a20, 0x3bf25: 0x6e275c20, 0x3bf26: 0x6e275e20, 0x3bf27: 0x6e276020, + 0x3bf28: 0x6e276220, 0x3bf29: 0x6e276420, 0x3bf2a: 0x6e276620, 0x3bf2b: 0x6e276820, + 0x3bf2c: 0x6e276a20, 0x3bf2d: 0x6e276c20, 0x3bf2e: 0x6e276e20, 0x3bf2f: 0x6e277020, + 0x3bf30: 0x6e277220, 0x3bf31: 0x6e277420, 0x3bf32: 0x6e30ca20, 0x3bf33: 0x6e30cc20, + 0x3bf34: 0x6e30ce20, 0x3bf35: 0x6e30d020, 0x3bf36: 0x6e30d220, 0x3bf37: 0x6e30d420, + 0x3bf38: 0x6e37a620, 0x3bf39: 0x6e37a820, 0x3bf3a: 0x6e37aa20, 0x3bf3b: 0x6e37ac20, + 0x3bf3c: 0x6e37ae20, 0x3bf3d: 0x6e37b020, 0x3bf3e: 0x6e37b220, 0x3bf3f: 0x6e3fbc20, + // Block 0xefd, offset 0x3bf40 + 0x3bf40: 0x6e3fbe20, 0x3bf41: 0x6e422e20, 0x3bf42: 0x6e423020, 0x3bf43: 0x6e43e820, + 0x3bf44: 0x6e43ea20, 0x3bf45: 0x6e43ec20, 0x3bf46: 0x6e45a020, 0x3bf47: 0x6e460e20, + 0x3bf48: 0x6c8aec20, 0x3bf49: 0x6cb78e20, 0x3bf4a: 0x6cb79020, 0x3bf4b: 0x6ce8b020, + 0x3bf4c: 0x6d476020, 0x3bf4d: 0x6c63ca20, 0x3bf4e: 0x6d755c20, 0x3bf4f: 0x6d755e20, + 0x3bf50: 0x6ddf5020, 0x3bf51: 0x6d186c20, 0x3bf52: 0x6d476820, 0x3bf53: 0x6d476a20, + 0x3bf54: 0x6d476c20, 0x3bf55: 0x6d756620, 0x3bf56: 0x6d756820, 0x3bf57: 0x6d756a20, + 0x3bf58: 0x6d756c20, 0x3bf59: 0x6d756e20, 0x3bf5a: 0x6d757020, 0x3bf5b: 0x6d9f2820, + 0x3bf5c: 0x6d9f2a20, 0x3bf5d: 0x6d9f2c20, 0x3bf5e: 0x6d9f2e20, 0x3bf5f: 0x6d9f3020, + 0x3bf60: 0x6dc18c20, 0x3bf61: 0x6dc18e20, 0x3bf62: 0x6dc19020, 0x3bf63: 0x6ddf5420, + 0x3bf64: 0x6ddf5620, 0x3bf65: 0x6df79c20, 0x3bf66: 0x6df79e20, 0x3bf67: 0x6df7a020, + 0x3bf68: 0x6e0b2c20, 0x3bf69: 0x6e0b2e20, 0x3bf6a: 0x6e1afa20, 0x3bf6b: 0x6e1afc20, + 0x3bf6c: 0x6e277620, 0x3bf6d: 0x6e30d620, 0x3bf6e: 0x6e30d820, 0x3bf6f: 0x6e30da20, + 0x3bf70: 0x6e37b420, 0x3bf71: 0x6e3c4a20, 0x3bf72: 0x6e461020, 0x3bf73: 0x6d186e20, + 0x3bf74: 0x6d476e20, 0x3bf75: 0x6d757220, 0x3bf76: 0x6d757420, 0x3bf77: 0x6d757620, + 0x3bf78: 0x6d757820, 0x3bf79: 0x6d757a20, 0x3bf7a: 0x6d9f3820, 0x3bf7b: 0x6dc19a20, + 0x3bf7c: 0x6dc19c20, 0x3bf7d: 0x6dc19e20, 0x3bf7e: 0x6dc1a020, 0x3bf7f: 0x6dc1a220, + // Block 0xefe, offset 0x3bf80 + 0x3bf80: 0x6dc1a420, 0x3bf81: 0x6dc1a620, 0x3bf82: 0x6ddf5e20, 0x3bf83: 0x6ddf6020, + 0x3bf84: 0x6ddf6220, 0x3bf85: 0x6ddf6420, 0x3bf86: 0x6df7a620, 0x3bf87: 0x6df7a820, + 0x3bf88: 0x6df7aa20, 0x3bf89: 0x6df7ac20, 0x3bf8a: 0x6df7ae20, 0x3bf8b: 0x6df7b020, + 0x3bf8c: 0x6df7b220, 0x3bf8d: 0x6df7b420, 0x3bf8e: 0x6df7b620, 0x3bf8f: 0x6df7b820, + 0x3bf90: 0x6df7ba20, 0x3bf91: 0x6df7bc20, 0x3bf92: 0x6df7be20, 0x3bf93: 0x6e0b3220, + 0x3bf94: 0x6e0b3420, 0x3bf95: 0x6e0b3620, 0x3bf96: 0x6e0b3820, 0x3bf97: 0x6e0b3a20, + 0x3bf98: 0x6e0b3c20, 0x3bf99: 0x6e1b0020, 0x3bf9a: 0x6e1b0220, 0x3bf9b: 0x6e1b0420, + 0x3bf9c: 0x6e1b0620, 0x3bf9d: 0x6e1b0820, 0x3bf9e: 0x6e1b0a20, 0x3bf9f: 0x6e277820, + 0x3bfa0: 0x6e277a20, 0x3bfa1: 0x6e277c20, 0x3bfa2: 0x6e277e20, 0x3bfa3: 0x6e278020, + 0x3bfa4: 0x6e30e020, 0x3bfa5: 0x6e30e220, 0x3bfa6: 0x6e30e420, 0x3bfa7: 0x6e37b820, + 0x3bfa8: 0x6e37ba20, 0x3bfa9: 0x6e37bc20, 0x3bfaa: 0x6e3fc020, 0x3bfab: 0x6e423220, + 0x3bfac: 0x6e461220, 0x3bfad: 0x6d477020, 0x3bfae: 0x6d758220, 0x3bfaf: 0x6d758420, + 0x3bfb0: 0x6d9f3e20, 0x3bfb1: 0x6d9f4020, 0x3bfb2: 0x6d9f4220, 0x3bfb3: 0x6d9f4420, + 0x3bfb4: 0x6d9f4620, 0x3bfb5: 0x6d9f4820, 0x3bfb6: 0x6dc1aa20, 0x3bfb7: 0x6dc1ac20, + 0x3bfb8: 0x6dc1ae20, 0x3bfb9: 0x6dc1b020, 0x3bfba: 0x6dc1b220, 0x3bfbb: 0x6dc1b420, + 0x3bfbc: 0x6dc1b620, 0x3bfbd: 0x6dc1b820, 0x3bfbe: 0x6dc1ba20, 0x3bfbf: 0x6ddf6620, + // Block 0xeff, offset 0x3bfc0 + 0x3bfc0: 0x6ddf6820, 0x3bfc1: 0x6df7c020, 0x3bfc2: 0x6e0b4420, 0x3bfc3: 0x6e0b4620, + 0x3bfc4: 0x6e0b4820, 0x3bfc5: 0x6e0b4a20, 0x3bfc6: 0x6e0b4c20, 0x3bfc7: 0x6e1b1220, + 0x3bfc8: 0x6e1b1420, 0x3bfc9: 0x6e1b1620, 0x3bfca: 0x6e1b1820, 0x3bfcb: 0x6e278620, + 0x3bfcc: 0x6e30e820, 0x3bfcd: 0x6e30ea20, 0x3bfce: 0x6e30ec20, 0x3bfcf: 0x6e30ee20, + 0x3bfd0: 0x6e37be20, 0x3bfd1: 0x6e3fc220, 0x3bfd2: 0x6e3c5020, 0x3bfd3: 0x6e3fc420, + 0x3bfd4: 0x6e43ee20, 0x3bfd5: 0x6e43f020, 0x3bfd6: 0x6e43f220, 0x3bfd7: 0x6ce8bc20, + 0x3bfd8: 0x6d187220, 0x3bfd9: 0x6d477420, 0x3bfda: 0x6d477620, 0x3bfdb: 0x6d477820, + 0x3bfdc: 0x6d758c20, 0x3bfdd: 0x6d758e20, 0x3bfde: 0x6d759020, 0x3bfdf: 0x6d759220, + 0x3bfe0: 0x6d759420, 0x3bfe1: 0x6d759620, 0x3bfe2: 0x6d759820, 0x3bfe3: 0x6d759a20, + 0x3bfe4: 0x6d9f5620, 0x3bfe5: 0x6d9f5820, 0x3bfe6: 0x6d9f5a20, 0x3bfe7: 0x6d9f5c20, + 0x3bfe8: 0x6d9f5e20, 0x3bfe9: 0x6d9f6020, 0x3bfea: 0x6d9f6220, 0x3bfeb: 0x6d9f6420, + 0x3bfec: 0x6d9f6620, 0x3bfed: 0x6d9f6820, 0x3bfee: 0x6d9f6a20, 0x3bfef: 0x6d9f6c20, + 0x3bff0: 0x6d9f6e20, 0x3bff1: 0x6d9f7020, 0x3bff2: 0x6dc1cc20, 0x3bff3: 0x6dc1ce20, + 0x3bff4: 0x6dc1d020, 0x3bff5: 0x6dc1d220, 0x3bff6: 0x6dc1d420, 0x3bff7: 0x6dc1d620, + 0x3bff8: 0x6dc1d820, 0x3bff9: 0x6dc1da20, 0x3bffa: 0x6dc1dc20, 0x3bffb: 0x6dc1de20, + 0x3bffc: 0x6dc1e020, 0x3bffd: 0x6dc1e220, 0x3bffe: 0x6dc1e420, 0x3bfff: 0x6ddf7820, + // Block 0xf00, offset 0x3c000 + 0x3c000: 0x6ddf7a20, 0x3c001: 0x6ddf7c20, 0x3c002: 0x6ddf7e20, 0x3c003: 0x6ddf8020, + 0x3c004: 0x6ddf8220, 0x3c005: 0x6ddf8420, 0x3c006: 0x6ddf8620, 0x3c007: 0x6ddf8820, + 0x3c008: 0x6df7cc20, 0x3c009: 0x6df7ce20, 0x3c00a: 0x6df7d020, 0x3c00b: 0x6df7d220, + 0x3c00c: 0x6df7d420, 0x3c00d: 0x6df7d620, 0x3c00e: 0x6df7d820, 0x3c00f: 0x6df7da20, + 0x3c010: 0x6df7dc20, 0x3c011: 0x6df7de20, 0x3c012: 0x6e0b6220, 0x3c013: 0x6e0b6420, + 0x3c014: 0x6e0b6620, 0x3c015: 0x6e0b6820, 0x3c016: 0x6e0b6a20, 0x3c017: 0x6e0b6c20, + 0x3c018: 0x6e0b6e20, 0x3c019: 0x6e0b7020, 0x3c01a: 0x6e0b7220, 0x3c01b: 0x6e0b7420, + 0x3c01c: 0x6e0b7620, 0x3c01d: 0x6e0b7820, 0x3c01e: 0x6e0b7a20, 0x3c01f: 0x6e0b7c20, + 0x3c020: 0x6e0b7e20, 0x3c021: 0x6e0b8020, 0x3c022: 0x6e0b8220, 0x3c023: 0x6e1b2a20, + 0x3c024: 0x6e0b8420, 0x3c025: 0x6e1b2c20, 0x3c026: 0x6e1b2e20, 0x3c027: 0x6e1b3020, + 0x3c028: 0x6e1b3220, 0x3c029: 0x6e1b3420, 0x3c02a: 0x6e1b3620, 0x3c02b: 0x6e1b3820, + 0x3c02c: 0x6e1b3a20, 0x3c02d: 0x6e1b3c20, 0x3c02e: 0x6e1b3e20, 0x3c02f: 0x6e1b4020, + 0x3c030: 0x6e1b4220, 0x3c031: 0x6e1b4420, 0x3c032: 0x6e1b4620, 0x3c033: 0x6e1b4820, + 0x3c034: 0x6e1b4a20, 0x3c035: 0x6e1b4c20, 0x3c036: 0x6e1b4e20, 0x3c037: 0x6e1b5020, + 0x3c038: 0x6e1b5220, 0x3c039: 0x6e1b5420, 0x3c03a: 0x6e1b5620, 0x3c03b: 0x6e1b5820, + 0x3c03c: 0x6e1b5a20, 0x3c03d: 0x6e1b5c20, 0x3c03e: 0x6e278c20, 0x3c03f: 0x6e278e20, + // Block 0xf01, offset 0x3c040 + 0x3c040: 0x6e279020, 0x3c041: 0x6e279220, 0x3c042: 0x6e279420, 0x3c043: 0x6e279620, + 0x3c044: 0x6e279820, 0x3c045: 0x6e279a20, 0x3c046: 0x6e279c20, 0x3c047: 0x6e279e20, + 0x3c048: 0x6e27a020, 0x3c049: 0x6e27a220, 0x3c04a: 0x6e27a420, 0x3c04b: 0x6e27a620, + 0x3c04c: 0x6e27a820, 0x3c04d: 0x6e27aa20, 0x3c04e: 0x6e27ac20, 0x3c04f: 0x6e30f820, + 0x3c050: 0x6e30fa20, 0x3c051: 0x6e30fc20, 0x3c052: 0x6e30fe20, 0x3c053: 0x6e310020, + 0x3c054: 0x6e310220, 0x3c055: 0x6e310420, 0x3c056: 0x6e310620, 0x3c057: 0x6e310820, + 0x3c058: 0x6e37c220, 0x3c059: 0x6e37c420, 0x3c05a: 0x6e37c620, 0x3c05b: 0x6e37c820, + 0x3c05c: 0x6e37ca20, 0x3c05d: 0x6e37cc20, 0x3c05e: 0x6e37ce20, 0x3c05f: 0x6e37d020, + 0x3c060: 0x6e37d220, 0x3c061: 0x6e37d420, 0x3c062: 0x6e37d620, 0x3c063: 0x6e37d820, + 0x3c064: 0x6e37da20, 0x3c065: 0x6e37dc20, 0x3c066: 0x6e37de20, 0x3c067: 0x6e37e020, + 0x3c068: 0x6e37e220, 0x3c069: 0x6e3c5a20, 0x3c06a: 0x6e3c5c20, 0x3c06b: 0x6e3c5e20, + 0x3c06c: 0x6e3c6020, 0x3c06d: 0x6e3c6220, 0x3c06e: 0x6e3c6420, 0x3c06f: 0x6e3c6620, + 0x3c070: 0x6e3c6820, 0x3c071: 0x6e3c6a20, 0x3c072: 0x6e3c6c20, 0x3c073: 0x6e3c6e20, + 0x3c074: 0x6e3fca20, 0x3c075: 0x6e3fcc20, 0x3c076: 0x6e3fce20, 0x3c077: 0x6e3fd020, + 0x3c078: 0x6e3fd220, 0x3c079: 0x6e423620, 0x3c07a: 0x6e423820, 0x3c07b: 0x6e423a20, + 0x3c07c: 0x6e423c20, 0x3c07d: 0x6e423e20, 0x3c07e: 0x6e424020, 0x3c07f: 0x6e43f620, + // Block 0xf02, offset 0x3c080 + 0x3c080: 0x6e43f820, 0x3c081: 0x6e43fa20, 0x3c082: 0x6e43fc20, 0x3c083: 0x6e450020, + 0x3c084: 0x6e450220, 0x3c085: 0x6e45a220, 0x3c086: 0x6e45a420, 0x3c087: 0x6e466a20, + 0x3c088: 0x6e466c20, 0x3c089: 0x6e471c20, 0x3c08a: 0x6e472a20, 0x3c08b: 0x6ddf8a20, + 0x3c08c: 0x6e0b8a20, 0x3c08d: 0x6e1b6020, 0x3c08e: 0x6e1b6220, 0x3c08f: 0x6e1b6420, + 0x3c090: 0x6e310a20, 0x3c091: 0x6d477a20, 0x3c092: 0x6d759c20, 0x3c093: 0x6d759e20, + 0x3c094: 0x6dc1ea20, 0x3c095: 0x6dc1ec20, 0x3c096: 0x6dc1ee20, 0x3c097: 0x6dc1f020, + 0x3c098: 0x6dc1f220, 0x3c099: 0x6dc1f420, 0x3c09a: 0x6ddf9420, 0x3c09b: 0x6ddf9620, + 0x3c09c: 0x6ddf9820, 0x3c09d: 0x6ddf9a20, 0x3c09e: 0x6ddf9c20, 0x3c09f: 0x6ddf9e20, + 0x3c0a0: 0x6ddfa020, 0x3c0a1: 0x6df7e820, 0x3c0a2: 0x6df7ea20, 0x3c0a3: 0x6df7ec20, + 0x3c0a4: 0x6df7ee20, 0x3c0a5: 0x6df7f020, 0x3c0a6: 0x6df7f220, 0x3c0a7: 0x6e0b8c20, + 0x3c0a8: 0x6e0b8e20, 0x3c0a9: 0x6e0b9020, 0x3c0aa: 0x6e0b9220, 0x3c0ab: 0x6e0b9420, + 0x3c0ac: 0x6e1b6820, 0x3c0ad: 0x6e1b6a20, 0x3c0ae: 0x6e27b020, 0x3c0af: 0x6e27b220, + 0x3c0b0: 0x6e27b420, 0x3c0b1: 0x6e27b620, 0x3c0b2: 0x6e27b820, 0x3c0b3: 0x6e27ba20, + 0x3c0b4: 0x6e27bc20, 0x3c0b5: 0x6e27be20, 0x3c0b6: 0x6e27c020, 0x3c0b7: 0x6e311020, + 0x3c0b8: 0x6e311220, 0x3c0b9: 0x6e37e620, 0x3c0ba: 0x6e3c7420, 0x3c0bb: 0x6e3cd420, + 0x3c0bc: 0x6e3fd620, 0x3c0bd: 0x6e3c7620, 0x3c0be: 0x6e3fd820, 0x3c0bf: 0x6e424220, + // Block 0xf03, offset 0x3c0c0 + 0x3c0c0: 0x6e424420, 0x3c0c1: 0x6e43fe20, 0x3c0c2: 0x6ce8c220, 0x3c0c3: 0x6d477c20, + 0x3c0c4: 0x6d75a620, 0x3c0c5: 0x6d75a820, 0x3c0c6: 0x6d75aa20, 0x3c0c7: 0x6d9f7a20, + 0x3c0c8: 0x6ddfa220, 0x3c0c9: 0x6e27c220, 0x3c0ca: 0x6e424620, 0x3c0cb: 0x6d9f7c20, + 0x3c0cc: 0x6d9f7e20, 0x3c0cd: 0x6dc1fa20, 0x3c0ce: 0x6dc1fc20, 0x3c0cf: 0x6dc1fe20, + 0x3c0d0: 0x6ddfae20, 0x3c0d1: 0x6ddfb020, 0x3c0d2: 0x6ddfb220, 0x3c0d3: 0x6ddfb420, + 0x3c0d4: 0x6df7fa20, 0x3c0d5: 0x6df7fc20, 0x3c0d6: 0x6df7fe20, 0x3c0d7: 0x6df80020, + 0x3c0d8: 0x6df80220, 0x3c0d9: 0x6df80420, 0x3c0da: 0x6df80620, 0x3c0db: 0x6df80820, + 0x3c0dc: 0x6e0b9820, 0x3c0dd: 0x6e0b9a20, 0x3c0de: 0x6e0b9c20, 0x3c0df: 0x6e0b9e20, + 0x3c0e0: 0x6e0ba020, 0x3c0e1: 0x6e0ba220, 0x3c0e2: 0x6e1b7620, 0x3c0e3: 0x6e1b7820, + 0x3c0e4: 0x6e1b7a20, 0x3c0e5: 0x6e1b7c20, 0x3c0e6: 0x6e27c620, 0x3c0e7: 0x6e27c820, + 0x3c0e8: 0x6e27ca20, 0x3c0e9: 0x6e27cc20, 0x3c0ea: 0x6e27ce20, 0x3c0eb: 0x6e27d020, + 0x3c0ec: 0x6e27d220, 0x3c0ed: 0x6e27d420, 0x3c0ee: 0x6e311620, 0x3c0ef: 0x6e37ee20, + 0x3c0f0: 0x6e37f020, 0x3c0f1: 0x6e37f220, 0x3c0f2: 0x6e37f420, 0x3c0f3: 0x6e3c8220, + 0x3c0f4: 0x6e3c8420, 0x3c0f5: 0x6e3fdc20, 0x3c0f6: 0x6e424820, 0x3c0f7: 0x6e450620, + 0x3c0f8: 0x6d75ae20, 0x3c0f9: 0x6d75b020, 0x3c0fa: 0x6d9f8220, 0x3c0fb: 0x6d9f8420, + 0x3c0fc: 0x6d9f8620, 0x3c0fd: 0x6dc20820, 0x3c0fe: 0x6dc20a20, 0x3c0ff: 0x6dc20c20, + // Block 0xf04, offset 0x3c100 + 0x3c100: 0x6dc20e20, 0x3c101: 0x6dc21020, 0x3c102: 0x6dc21220, 0x3c103: 0x6dc21420, + 0x3c104: 0x6dc21620, 0x3c105: 0x6dc21820, 0x3c106: 0x6dc21a20, 0x3c107: 0x6dc21c20, + 0x3c108: 0x6dc21e20, 0x3c109: 0x6ddfc820, 0x3c10a: 0x6ddfca20, 0x3c10b: 0x6ddfcc20, + 0x3c10c: 0x6ddfce20, 0x3c10d: 0x6ddfd020, 0x3c10e: 0x6ddfd220, 0x3c10f: 0x6ddfd420, + 0x3c110: 0x6ddfd620, 0x3c111: 0x6ddfd820, 0x3c112: 0x6df80e20, 0x3c113: 0x6df81020, + 0x3c114: 0x6df81220, 0x3c115: 0x6df81420, 0x3c116: 0x6df81620, 0x3c117: 0x6df81820, + 0x3c118: 0x6df81a20, 0x3c119: 0x6df81c20, 0x3c11a: 0x6e0baa20, 0x3c11b: 0x6e0bac20, + 0x3c11c: 0x6e0bae20, 0x3c11d: 0x6e0bb020, 0x3c11e: 0x6e0bb220, 0x3c11f: 0x6df81e20, + 0x3c120: 0x6e0bb420, 0x3c121: 0x6e0bb620, 0x3c122: 0x6e0bb820, 0x3c123: 0x6e0bba20, + 0x3c124: 0x6e0bbc20, 0x3c125: 0x6e0bbe20, 0x3c126: 0x6e0bc020, 0x3c127: 0x6e0bc220, + 0x3c128: 0x6e1b8220, 0x3c129: 0x6e1b8420, 0x3c12a: 0x6e1b8620, 0x3c12b: 0x6e27e020, + 0x3c12c: 0x6e27e220, 0x3c12d: 0x6e27e420, 0x3c12e: 0x6e27e620, 0x3c12f: 0x6e27e820, + 0x3c130: 0x6e27ea20, 0x3c131: 0x6e27ec20, 0x3c132: 0x6e27ee20, 0x3c133: 0x6e27f020, + 0x3c134: 0x6e27f220, 0x3c135: 0x6e312420, 0x3c136: 0x6e312620, 0x3c137: 0x6e312820, + 0x3c138: 0x6e312a20, 0x3c139: 0x6e312c20, 0x3c13a: 0x6e312e20, 0x3c13b: 0x6e313020, + 0x3c13c: 0x6e313220, 0x3c13d: 0x6e313420, 0x3c13e: 0x6e313620, 0x3c13f: 0x6e380420, + // Block 0xf05, offset 0x3c140 + 0x3c140: 0x6e37f620, 0x3c141: 0x6e37f820, 0x3c142: 0x6e37fa20, 0x3c143: 0x6e37fc20, + 0x3c144: 0x6e37fe20, 0x3c145: 0x6e3c8620, 0x3c146: 0x6e3c8820, 0x3c147: 0x6e3c8a20, + 0x3c148: 0x6e3c8c20, 0x3c149: 0x6e3c8e20, 0x3c14a: 0x6e3fde20, 0x3c14b: 0x6e424a20, + 0x3c14c: 0x6e450820, 0x3c14d: 0x6e450a20, 0x3c14e: 0x6e45a620, 0x3c14f: 0x6e461420, + 0x3c150: 0x6d75b220, 0x3c151: 0x6d9f8c20, 0x3c152: 0x6d9f8e20, 0x3c153: 0x6dc22420, + 0x3c154: 0x6dc22620, 0x3c155: 0x6ddfe020, 0x3c156: 0x6ddfe220, 0x3c157: 0x6ddfe420, + 0x3c158: 0x6ddfe620, 0x3c159: 0x6ddfe820, 0x3c15a: 0x6df82620, 0x3c15b: 0x6df82820, + 0x3c15c: 0x6df82a20, 0x3c15d: 0x6df82c20, 0x3c15e: 0x6df82e20, 0x3c15f: 0x6df83020, + 0x3c160: 0x6df83220, 0x3c161: 0x6e0bc820, 0x3c162: 0x6e0bca20, 0x3c163: 0x6e0bcc20, + 0x3c164: 0x6e0bce20, 0x3c165: 0x6e1b8a20, 0x3c166: 0x6e1b8c20, 0x3c167: 0x6e1b8e20, + 0x3c168: 0x6e1b9020, 0x3c169: 0x6e1b9220, 0x3c16a: 0x6e1b9420, 0x3c16b: 0x6e1b9620, + 0x3c16c: 0x6e1b9820, 0x3c16d: 0x6e27f620, 0x3c16e: 0x6e27f820, 0x3c16f: 0x6e313c20, + 0x3c170: 0x6e313e20, 0x3c171: 0x6e314020, 0x3c172: 0x6e314220, 0x3c173: 0x6e380620, + 0x3c174: 0x6e380820, 0x3c175: 0x6e380a20, 0x3c176: 0x6e3c9420, 0x3c177: 0x6e3c9620, + 0x3c178: 0x6e3c9820, 0x3c179: 0x6e3c9a20, 0x3c17a: 0x6e3c9c20, 0x3c17b: 0x6e3fe020, + 0x3c17c: 0x6e3fe220, 0x3c17d: 0x6e3fe420, 0x3c17e: 0x6e425020, 0x3c17f: 0x6e425220, + // Block 0xf06, offset 0x3c180 + 0x3c180: 0x6e425420, 0x3c181: 0x6e45aa20, 0x3c182: 0x6e461620, 0x3c183: 0x6e466e20, + 0x3c184: 0x6d478420, 0x3c185: 0x6d9f9020, 0x3c186: 0x6dc22e20, 0x3c187: 0x6ddff020, + 0x3c188: 0x6ddff220, 0x3c189: 0x6df83620, 0x3c18a: 0x6df83820, 0x3c18b: 0x6e0bd020, + 0x3c18c: 0x6e0bd220, 0x3c18d: 0x6e27fa20, 0x3c18e: 0x6e1b9c20, 0x3c18f: 0x6e3c9e20, + 0x3c190: 0x6e3ca020, 0x3c191: 0x6e3ca220, 0x3c192: 0x6e440220, 0x3c193: 0x6e45ac20, + 0x3c194: 0x6dc23220, 0x3c195: 0x6dc23420, 0x3c196: 0x6dc23620, 0x3c197: 0x6dc23820, + 0x3c198: 0x6ddff820, 0x3c199: 0x6ddffa20, 0x3c19a: 0x6ddffc20, 0x3c19b: 0x6df84420, + 0x3c19c: 0x6df84620, 0x3c19d: 0x6df84820, 0x3c19e: 0x6df84a20, 0x3c19f: 0x6df84c20, + 0x3c1a0: 0x6df84e20, 0x3c1a1: 0x6df85020, 0x3c1a2: 0x6df85220, 0x3c1a3: 0x6df85420, + 0x3c1a4: 0x6df85620, 0x3c1a5: 0x6e0bee20, 0x3c1a6: 0x6e0bf020, 0x3c1a7: 0x6e0bf220, + 0x3c1a8: 0x6e0bf420, 0x3c1a9: 0x6e0bf620, 0x3c1aa: 0x6e0bf820, 0x3c1ab: 0x6e0bfa20, + 0x3c1ac: 0x6e0bfc20, 0x3c1ad: 0x6e0bfe20, 0x3c1ae: 0x6e0c0020, 0x3c1af: 0x6e0c0220, + 0x3c1b0: 0x6e0c0420, 0x3c1b1: 0x6e0c0620, 0x3c1b2: 0x6e0c0820, 0x3c1b3: 0x6e0c0a20, + 0x3c1b4: 0x6e0c0c20, 0x3c1b5: 0x6e0c0e20, 0x3c1b6: 0x6e0c1020, 0x3c1b7: 0x6e1bb020, + 0x3c1b8: 0x6e1bb220, 0x3c1b9: 0x6e1bb420, 0x3c1ba: 0x6e1bb620, 0x3c1bb: 0x6e1bb820, + 0x3c1bc: 0x6e1bba20, 0x3c1bd: 0x6e1bbc20, 0x3c1be: 0x6e1bbe20, 0x3c1bf: 0x6e1bc020, + // Block 0xf07, offset 0x3c1c0 + 0x3c1c0: 0x6e1bc220, 0x3c1c1: 0x6e1bc420, 0x3c1c2: 0x6e1bc620, 0x3c1c3: 0x6e1bc820, + 0x3c1c4: 0x6e1bca20, 0x3c1c5: 0x6e1bcc20, 0x3c1c6: 0x6e1bce20, 0x3c1c7: 0x6e1bd020, + 0x3c1c8: 0x6e1bd220, 0x3c1c9: 0x6e1bd420, 0x3c1ca: 0x6e1bd620, 0x3c1cb: 0x6e1bd820, + 0x3c1cc: 0x6e1bda20, 0x3c1cd: 0x6e1bdc20, 0x3c1ce: 0x6e280620, 0x3c1cf: 0x6e280820, + 0x3c1d0: 0x6e280a20, 0x3c1d1: 0x6e280c20, 0x3c1d2: 0x6e280e20, 0x3c1d3: 0x6e281020, + 0x3c1d4: 0x6e281220, 0x3c1d5: 0x6e281420, 0x3c1d6: 0x6e281620, 0x3c1d7: 0x6e281820, + 0x3c1d8: 0x6e281a20, 0x3c1d9: 0x6e281c20, 0x3c1da: 0x6e281e20, 0x3c1db: 0x6e282020, + 0x3c1dc: 0x6e282220, 0x3c1dd: 0x6e282420, 0x3c1de: 0x6e282620, 0x3c1df: 0x6e282820, + 0x3c1e0: 0x6e282a20, 0x3c1e1: 0x6e282c20, 0x3c1e2: 0x6e282e20, 0x3c1e3: 0x6e283020, + 0x3c1e4: 0x6e283220, 0x3c1e5: 0x6e315420, 0x3c1e6: 0x6e315620, 0x3c1e7: 0x6e315820, + 0x3c1e8: 0x6e315a20, 0x3c1e9: 0x6e315c20, 0x3c1ea: 0x6e315e20, 0x3c1eb: 0x6e316020, + 0x3c1ec: 0x6e316220, 0x3c1ed: 0x6e316420, 0x3c1ee: 0x6e316620, 0x3c1ef: 0x6e316820, + 0x3c1f0: 0x6e316a20, 0x3c1f1: 0x6e316c20, 0x3c1f2: 0x6e316e20, 0x3c1f3: 0x6e317020, + 0x3c1f4: 0x6e317220, 0x3c1f5: 0x6e317420, 0x3c1f6: 0x6e317620, 0x3c1f7: 0x6e317820, + 0x3c1f8: 0x6e317a20, 0x3c1f9: 0x6e381e20, 0x3c1fa: 0x6e382020, 0x3c1fb: 0x6e382220, + 0x3c1fc: 0x6e382420, 0x3c1fd: 0x6e382620, 0x3c1fe: 0x6e382820, 0x3c1ff: 0x6e382a20, + // Block 0xf08, offset 0x3c200 + 0x3c200: 0x6e382c20, 0x3c201: 0x6e382e20, 0x3c202: 0x6e383020, 0x3c203: 0x6e383220, + 0x3c204: 0x6e383420, 0x3c205: 0x6e383620, 0x3c206: 0x6e383820, 0x3c207: 0x6e383a20, + 0x3c208: 0x6e383c20, 0x3c209: 0x6e3cb020, 0x3c20a: 0x6e3cb220, 0x3c20b: 0x6e3cb420, + 0x3c20c: 0x6e3cb620, 0x3c20d: 0x6e3cb820, 0x3c20e: 0x6e3cba20, 0x3c20f: 0x6e3cbc20, + 0x3c210: 0x6e3cbe20, 0x3c211: 0x6e3cc020, 0x3c212: 0x6e3cc220, 0x3c213: 0x6e3cc420, + 0x3c214: 0x6e3cc620, 0x3c215: 0x6e3cc820, 0x3c216: 0x6e3cca20, 0x3c217: 0x6e3ccc20, + 0x3c218: 0x6e3cce20, 0x3c219: 0x6e3cd020, 0x3c21a: 0x6e3fea20, 0x3c21b: 0x6e3fec20, + 0x3c21c: 0x6e3fee20, 0x3c21d: 0x6e3ff020, 0x3c21e: 0x6e3ff220, 0x3c21f: 0x6e3ff420, + 0x3c220: 0x6e3ff620, 0x3c221: 0x6e3ff820, 0x3c222: 0x6e3ffa20, 0x3c223: 0x6e425820, + 0x3c224: 0x6e425a20, 0x3c225: 0x6e425c20, 0x3c226: 0x6e425e20, 0x3c227: 0x6e426020, + 0x3c228: 0x6e426220, 0x3c229: 0x6e426420, 0x3c22a: 0x6e426620, 0x3c22b: 0x6e426820, + 0x3c22c: 0x6e426a20, 0x3c22d: 0x6e426c20, 0x3c22e: 0x6e426e20, 0x3c22f: 0x6e427020, + 0x3c230: 0x6e440a20, 0x3c231: 0x6e440c20, 0x3c232: 0x6e440e20, 0x3c233: 0x6e441020, + 0x3c234: 0x6e441220, 0x3c235: 0x6e441420, 0x3c236: 0x6e451020, 0x3c237: 0x6e45ae20, + 0x3c238: 0x6e45b020, 0x3c239: 0x6e45b220, 0x3c23a: 0x6e45b420, 0x3c23b: 0x6e45b620, + 0x3c23c: 0x6e45b820, 0x3c23d: 0x6e461820, 0x3c23e: 0x6e461a20, 0x3c23f: 0x6e461c20, + // Block 0xf09, offset 0x3c240 + 0x3c240: 0x6e461e20, 0x3c241: 0x6e467020, 0x3c242: 0x6e467220, 0x3c243: 0x6e467420, + 0x3c244: 0x6e467620, 0x3c245: 0x6e46a620, 0x3c246: 0x6e46be20, 0x3c247: 0x6e46c020, + 0x3c248: 0x6e46c220, 0x3c249: 0x6e46c420, 0x3c24a: 0x6e46de20, 0x3c24b: 0x6e46e020, + 0x3c24c: 0x6e46fe20, 0x3c24d: 0x6e472620, 0x3c24e: 0x6e472820, 0x3c24f: 0x6d478a20, + 0x3c250: 0x6d9f9420, 0x3c251: 0x6df85c20, 0x3c252: 0x6df85e20, 0x3c253: 0x6df86020, + 0x3c254: 0x6df86220, 0x3c255: 0x6e0c1420, 0x3c256: 0x6e0c1620, 0x3c257: 0x6e0c1820, + 0x3c258: 0x6e0c1a20, 0x3c259: 0x6e1be420, 0x3c25a: 0x6e0c1c20, 0x3c25b: 0x6e0c1e20, + 0x3c25c: 0x6e283e20, 0x3c25d: 0x6e284020, 0x3c25e: 0x6e284220, 0x3c25f: 0x6e284420, + 0x3c260: 0x6e317c20, 0x3c261: 0x6e317e20, 0x3c262: 0x6e3cd220, 0x3c263: 0x6e427420, + 0x3c264: 0x6e427620, 0x3c265: 0x6e474220, 0x3c266: 0x6d9fa020, 0x3c267: 0x6e1bec20, + 0x3c268: 0x6de00220, 0x3c269: 0x6df86620, 0x3c26a: 0x6df86820, 0x3c26b: 0x6e0c2620, + 0x3c26c: 0x6e0c2820, 0x3c26d: 0x6e0c2a20, 0x3c26e: 0x6e0c2c20, 0x3c26f: 0x6e0c2e20, + 0x3c270: 0x6e0c3020, 0x3c271: 0x6e0c3220, 0x3c272: 0x6e0c3420, 0x3c273: 0x6e0c3620, + 0x3c274: 0x6e0c3820, 0x3c275: 0x6e0c3a20, 0x3c276: 0x6e1bee20, 0x3c277: 0x6e1bf020, + 0x3c278: 0x6e1bf220, 0x3c279: 0x6e1bf420, 0x3c27a: 0x6e1bf620, 0x3c27b: 0x6e1bf820, + 0x3c27c: 0x6e1bfa20, 0x3c27d: 0x6e1bfc20, 0x3c27e: 0x6e318220, 0x3c27f: 0x6e318420, + // Block 0xf0a, offset 0x3c280 + 0x3c280: 0x6e384020, 0x3c281: 0x6e3cd620, 0x3c282: 0x6e427820, 0x3c283: 0x6e427a20, + 0x3c284: 0x6e427c20, 0x3c285: 0x6e441820, 0x3c286: 0x6e441a20, 0x3c287: 0x6e45ba20, + 0x3c288: 0x6e46aa20, 0x3c289: 0x6d9fa220, 0x3c28a: 0x6e1c0220, 0x3c28b: 0x6e3cdc20, + 0x3c28c: 0x6e3cde20, 0x3c28d: 0x6e3ce020, 0x3c28e: 0x6e400020, 0x3c28f: 0x6e400220, + 0x3c290: 0x6e400420, 0x3c291: 0x6e400620, 0x3c292: 0x6e428020, 0x3c293: 0x6e441e20, + 0x3c294: 0x6e462020, 0x3c295: 0x6e46ac20, 0x3c296: 0x6e471220, + // Block 0xf0b, offset 0x3c2c0 + 0x3c2c0: 0x6c00f020, 0x3c2c1: 0x6c00f220, 0x3c2c2: 0x6c023420, 0x3c2c3: 0x6c28c220, + 0x3c2c4: 0x6c42f420, 0x3c2c5: 0x6c63d620, 0x3c2c6: 0x6c8afa20, 0x3c2c7: 0x6d75d220, + 0x3c2c8: 0x6c024020, 0x3c2c9: 0x6c42fe20, 0x3c2ca: 0x6c004c20, 0x3c2cb: 0x6c28ce20, + 0x3c2cc: 0x6c0b0c20, 0x3c2cd: 0x6c430820, 0x3c2ce: 0x6c63ee20, 0x3c2cf: 0x6c63f020, + 0x3c2d0: 0x6c05ae20, 0x3c2d1: 0x6c0b3620, 0x3c2d2: 0x6c161c20, 0x3c2d3: 0x6c161e20, + 0x3c2d4: 0x6c28f020, 0x3c2d5: 0x6c432a20, 0x3c2d6: 0x6c63fe20, 0x3c2d7: 0x6c640020, + 0x3c2d8: 0x6c8b2020, 0x3c2d9: 0x6cb7b620, 0x3c2da: 0x6cb7b820, 0x3c2db: 0x6ce8dc20, + 0x3c2dc: 0x6c162820, 0x3c2dd: 0x6cb7bc20, 0x3c2de: 0x6d18a820, 0x3c2df: 0x6d479c20, + 0x3c2e0: 0x6c05b420, 0x3c2e1: 0x6c05b620, 0x3c2e2: 0x6c164420, 0x3c2e3: 0x6c8b3c20, + 0x3c2e4: 0x6cb7d620, 0x3c2e5: 0x6d47b020, 0x3c2e6: 0x6de00c20, 0x3c2e7: 0x6c02c420, + 0x3c2e8: 0x6c0c3c20, 0x3c2e9: 0x6c0c3e20, 0x3c2ea: 0x6c0c4020, 0x3c2eb: 0x6c0c4220, + 0x3c2ec: 0x6c172220, 0x3c2ed: 0x6c172420, 0x3c2ee: 0x6c172620, 0x3c2ef: 0x6c172820, + 0x3c2f0: 0x6c172a20, 0x3c2f1: 0x6c172c20, 0x3c2f2: 0x6c172e20, 0x3c2f3: 0x6c173020, + 0x3c2f4: 0x6c173220, 0x3c2f5: 0x6c2a1c20, 0x3c2f6: 0x6c2a1e20, 0x3c2f7: 0x6c2a2020, + 0x3c2f8: 0x6c2a2220, 0x3c2f9: 0x6c2a2420, 0x3c2fa: 0x6c2a2620, 0x3c2fb: 0x6c444a20, + 0x3c2fc: 0x6c444c20, 0x3c2fd: 0x6c444e20, 0x3c2fe: 0x6c445020, 0x3c2ff: 0x6c445220, + // Block 0xf0c, offset 0x3c300 + 0x3c300: 0x6c445420, 0x3c301: 0x6c445620, 0x3c302: 0x6c445820, 0x3c303: 0x6c655c20, + 0x3c304: 0x6c655e20, 0x3c305: 0x6c656020, 0x3c306: 0x6c656220, 0x3c307: 0x6c656420, + 0x3c308: 0x6c656620, 0x3c309: 0x6c656820, 0x3c30a: 0x6c656a20, 0x3c30b: 0x6c8c4e20, + 0x3c30c: 0x6c8c5020, 0x3c30d: 0x6c8c5220, 0x3c30e: 0x6c8c5420, 0x3c30f: 0x6c8c5620, + 0x3c310: 0x6c8c5820, 0x3c311: 0x6c8c5a20, 0x3c312: 0x6c8c5c20, 0x3c313: 0x6c8c5e20, + 0x3c314: 0x6c8c6020, 0x3c315: 0x6c8c6220, 0x3c316: 0x6cb8b220, 0x3c317: 0x6cb8b420, + 0x3c318: 0x6cb8b620, 0x3c319: 0x6cb8b820, 0x3c31a: 0x6cb8ba20, 0x3c31b: 0x6cb8bc20, + 0x3c31c: 0x6cb8be20, 0x3c31d: 0x6cb8c020, 0x3c31e: 0x6cb8c220, 0x3c31f: 0x6cb8c420, + 0x3c320: 0x6ce9d620, 0x3c321: 0x6ce9d820, 0x3c322: 0x6ce9da20, 0x3c323: 0x6ce9dc20, + 0x3c324: 0x6ce9de20, 0x3c325: 0x6d19a820, 0x3c326: 0x6d19aa20, 0x3c327: 0x6d19ac20, + 0x3c328: 0x6d19ae20, 0x3c329: 0x6d19b020, 0x3c32a: 0x6d19b220, 0x3c32b: 0x6d485020, + 0x3c32c: 0x6d485220, 0x3c32d: 0x6d485420, 0x3c32e: 0x6d485620, 0x3c32f: 0x6d485820, + 0x3c330: 0x6d765e20, 0x3c331: 0x6d766020, 0x3c332: 0x6d766220, 0x3c333: 0x6d766420, + 0x3c334: 0x6d9ffc20, 0x3c335: 0x6d9ffe20, 0x3c336: 0x6da00020, 0x3c337: 0x6dc28620, + 0x3c338: 0x6dc28820, 0x3c339: 0x6dc28a20, 0x3c33a: 0x6de03c20, 0x3c33b: 0x6de03e20, + 0x3c33c: 0x6de04020, 0x3c33d: 0x6df88c20, 0x3c33e: 0x6e0c6220, 0x3c33f: 0x6c2a4a20, + // Block 0xf0d, offset 0x3c340 + 0x3c340: 0x6c446820, 0x3c341: 0x6c658420, 0x3c342: 0x6ce9ea20, 0x3c343: 0x6d486a20, + 0x3c344: 0x6d486c20, 0x3c345: 0x6d486e20, 0x3c346: 0x6de04620, 0x3c347: 0x6c658e20, + 0x3c348: 0x6c0c7620, 0x3c349: 0x6cb8f020, 0x3c34a: 0x6cea0620, 0x3c34b: 0x6d19da20, + 0x3c34c: 0x6d487020, 0x3c34d: 0x6d768220, 0x3c34e: 0x6c177e20, 0x3c34f: 0x6c178a20, + 0x3c350: 0x6c178c20, 0x3c351: 0x6c2a7220, 0x3c352: 0x6c65c020, 0x3c353: 0x6c8c9420, + 0x3c354: 0x6cb90a20, 0x3c355: 0x6d19e820, 0x3c356: 0x6c065820, 0x3c357: 0x6c0cb220, + 0x3c358: 0x6c0cb420, 0x3c359: 0x6c0cb620, 0x3c35a: 0x6c0cb820, 0x3c35b: 0x6c17b220, + 0x3c35c: 0x6c17b420, 0x3c35d: 0x6c17b620, 0x3c35e: 0x6c2a9620, 0x3c35f: 0x6c44ca20, + 0x3c360: 0x6c44cc20, 0x3c361: 0x6c44ce20, 0x3c362: 0x6c65f820, 0x3c363: 0x6c65fa20, + 0x3c364: 0x6c65fc20, 0x3c365: 0x6c65fe20, 0x3c366: 0x6c8cb620, 0x3c367: 0x6c8cb820, + 0x3c368: 0x6c8cba20, 0x3c369: 0x6cb92c20, 0x3c36a: 0x6cb92e20, 0x3c36b: 0x6cea2a20, + 0x3c36c: 0x6cea2c20, 0x3c36d: 0x6d19fc20, 0x3c36e: 0x6d489020, 0x3c36f: 0x6d769820, + 0x3c370: 0x6df8a020, 0x3c371: 0x6c0cd020, 0x3c372: 0x6c17ce20, 0x3c373: 0x6c660a20, + 0x3c374: 0x6c8cce20, 0x3c375: 0x6cea3620, 0x3c376: 0x6c067a20, 0x3c377: 0x6c2aba20, + 0x3c378: 0x6c661020, 0x3c379: 0x6cb94420, 0x3c37a: 0x6cea3820, 0x3c37b: 0x6cea3a20, + 0x3c37c: 0x6dc2b420, 0x3c37d: 0x6de05420, 0x3c37e: 0x6c0d3420, 0x3c37f: 0x6c0d3620, + // Block 0xf0e, offset 0x3c380 + 0x3c380: 0x6c0d3820, 0x3c381: 0x6c183420, 0x3c382: 0x6c183620, 0x3c383: 0x6c2b4420, + 0x3c384: 0x6c2b4620, 0x3c385: 0x6c2b4820, 0x3c386: 0x6c454820, 0x3c387: 0x6c454a20, + 0x3c388: 0x6c66a220, 0x3c389: 0x6c66a420, 0x3c38a: 0x6c8d3a20, 0x3c38b: 0x6c8d3c20, + 0x3c38c: 0x6c8d3e20, 0x3c38d: 0x6c8d4020, 0x3c38e: 0x6cb9a420, 0x3c38f: 0x6cb9a620, + 0x3c390: 0x6cb9a820, 0x3c391: 0x6cea8c20, 0x3c392: 0x6cea8e20, 0x3c393: 0x6cea9020, + 0x3c394: 0x6d48d820, 0x3c395: 0x6d76d620, 0x3c396: 0x6d76d820, 0x3c397: 0x6c187220, + 0x3c398: 0x6c187420, 0x3c399: 0x6c187620, 0x3c39a: 0x6c2b8220, 0x3c39b: 0x6c2b8420, + 0x3c39c: 0x6c458020, 0x3c39d: 0x6c66d820, 0x3c39e: 0x6c66da20, 0x3c39f: 0x6c66dc20, + 0x3c3a0: 0x6c8d6820, 0x3c3a1: 0x6cb9d020, 0x3c3a2: 0x6cb9d220, 0x3c3a3: 0x6ceabe20, + 0x3c3a4: 0x6d1aa420, 0x3c3a5: 0x6d1aa620, 0x3c3a6: 0x6d48f020, 0x3c3a7: 0x6e0c8220, + 0x3c3a8: 0x6c016620, 0x3c3a9: 0x6c0d6620, 0x3c3aa: 0x6c459e20, 0x3c3ab: 0x6cead020, + 0x3c3ac: 0x6c0d7820, 0x3c3ad: 0x6c18a020, 0x3c3ae: 0x6c18a220, 0x3c3af: 0x6c45be20, + 0x3c3b0: 0x6c670c20, 0x3c3b1: 0x6d1ac820, 0x3c3b2: 0x6df8c020, 0x3c3b3: 0x6c18bc20, + 0x3c3b4: 0x6c671e20, 0x3c3b5: 0x6c8da620, 0x3c3b6: 0x6ceaf420, 0x3c3b7: 0x6d1ad220, + 0x3c3b8: 0x6d490e20, 0x3c3b9: 0x6d491020, 0x3c3ba: 0x6da08220, 0x3c3bb: 0x6dc2de20, + 0x3c3bc: 0x6df8c420, 0x3c3bd: 0x6c037a20, 0x3c3be: 0x6c18ce20, 0x3c3bf: 0x6c672c20, + // Block 0xf0f, offset 0x3c3c0 + 0x3c3c0: 0x6d1ad820, 0x3c3c1: 0x6c2bfe20, 0x3c3c2: 0x6c45f420, 0x3c3c3: 0x6c070820, + 0x3c3c4: 0x6c190020, 0x3c3c5: 0x6c2c2420, 0x3c3c6: 0x6c2c2620, 0x3c3c7: 0x6c462420, + 0x3c3c8: 0x6c462620, 0x3c3c9: 0x6c462820, 0x3c3ca: 0x6c462a20, 0x3c3cb: 0x6c676420, + 0x3c3cc: 0x6c676620, 0x3c3cd: 0x6c676820, 0x3c3ce: 0x6c676a20, 0x3c3cf: 0x6c8dde20, + 0x3c3d0: 0x6c8de020, 0x3c3d1: 0x6cba2a20, 0x3c3d2: 0x6cba2c20, 0x3c3d3: 0x6ceb1a20, + 0x3c3d4: 0x6ceb1c20, 0x3c3d5: 0x6ceb1e20, 0x3c3d6: 0x6d1b1020, 0x3c3d7: 0x6d1b1220, + 0x3c3d8: 0x6d493620, 0x3c3d9: 0x6d493820, 0x3c3da: 0x6da08c20, 0x3c3db: 0x6df8c820, + 0x3c3dc: 0x6c463c20, 0x3c3dd: 0x6c677a20, 0x3c3de: 0x6c8dee20, 0x3c3df: 0x6cba4020, + 0x3c3e0: 0x6ceb3020, 0x3c3e1: 0x6d494220, 0x3c3e2: 0x6df8ca20, 0x3c3e3: 0x6c03b820, + 0x3c3e4: 0x6c03ba20, 0x3c3e5: 0x6c0e1a20, 0x3c3e6: 0x6c192020, 0x3c3e7: 0x6c2c5220, + 0x3c3e8: 0x6c2c5420, 0x3c3e9: 0x6c466020, 0x3c3ea: 0x6c466220, 0x3c3eb: 0x6c679620, + 0x3c3ec: 0x6c679820, 0x3c3ed: 0x6cba5820, 0x3c3ee: 0x6cba5a20, 0x3c3ef: 0x6ceb4c20, + 0x3c3f0: 0x6d1b3220, 0x3c3f1: 0x6d770a20, 0x3c3f2: 0x6c078620, 0x3c3f3: 0x6c1a4420, + 0x3c3f4: 0x6c1a4620, 0x3c3f5: 0x6c1a4820, 0x3c3f6: 0x6c2d7620, 0x3c3f7: 0x6c2d7820, + 0x3c3f8: 0x6c2d7a20, 0x3c3f9: 0x6c2d7c20, 0x3c3fa: 0x6c47c620, 0x3c3fb: 0x6c47c820, + 0x3c3fc: 0x6c47ca20, 0x3c3fd: 0x6c47cc20, 0x3c3fe: 0x6c47ce20, 0x3c3ff: 0x6c47d020, + // Block 0xf10, offset 0x3c400 + 0x3c400: 0x6c47d220, 0x3c401: 0x6c47d420, 0x3c402: 0x6c47d620, 0x3c403: 0x6c47d820, + 0x3c404: 0x6c693820, 0x3c405: 0x6c693a20, 0x3c406: 0x6c693c20, 0x3c407: 0x6c693e20, + 0x3c408: 0x6c694020, 0x3c409: 0x6c694220, 0x3c40a: 0x6c694420, 0x3c40b: 0x6c694620, + 0x3c40c: 0x6c694820, 0x3c40d: 0x6c694a20, 0x3c40e: 0x6c694c20, 0x3c40f: 0x6d770c20, + 0x3c410: 0x6c900020, 0x3c411: 0x6c900220, 0x3c412: 0x6c900420, 0x3c413: 0x6c900620, + 0x3c414: 0x6c900820, 0x3c415: 0x6c900a20, 0x3c416: 0x6c900c20, 0x3c417: 0x6c900e20, + 0x3c418: 0x6c901020, 0x3c419: 0x6c901220, 0x3c41a: 0x6c901420, 0x3c41b: 0x6c901620, + 0x3c41c: 0x6cbc2220, 0x3c41d: 0x6cbc2420, 0x3c41e: 0x6cbc2620, 0x3c41f: 0x6cbc2820, + 0x3c420: 0x6cbc2a20, 0x3c421: 0x6cbc2c20, 0x3c422: 0x6cbc2e20, 0x3c423: 0x6cbc3020, + 0x3c424: 0x6cbc3220, 0x3c425: 0x6cbc3420, 0x3c426: 0x6cbc3620, 0x3c427: 0x6cbc3820, + 0x3c428: 0x6cbc3a20, 0x3c429: 0x6cbc3c20, 0x3c42a: 0x6ced0c20, 0x3c42b: 0x6ced0e20, + 0x3c42c: 0x6ced1020, 0x3c42d: 0x6ced1220, 0x3c42e: 0x6ced1420, 0x3c42f: 0x6ced1620, + 0x3c430: 0x6ced1820, 0x3c431: 0x6ced1a20, 0x3c432: 0x6ced1c20, 0x3c433: 0x6ced1e20, + 0x3c434: 0x6ced2020, 0x3c435: 0x6ced2220, 0x3c436: 0x6ced2420, 0x3c437: 0x6ced2620, + 0x3c438: 0x6d1cd020, 0x3c439: 0x6d1cd220, 0x3c43a: 0x6d1cd420, 0x3c43b: 0x6d1cd620, + 0x3c43c: 0x6d1cd820, 0x3c43d: 0x6d1cda20, 0x3c43e: 0x6d1cdc20, 0x3c43f: 0x6d1cde20, + // Block 0xf11, offset 0x3c440 + 0x3c440: 0x6d1ce020, 0x3c441: 0x6d1ce220, 0x3c442: 0x6d1ce420, 0x3c443: 0x6d1ce620, + 0x3c444: 0x6d1ce820, 0x3c445: 0x6d4aa220, 0x3c446: 0x6d4aa420, 0x3c447: 0x6d4aa620, + 0x3c448: 0x6d4aa820, 0x3c449: 0x6d4aaa20, 0x3c44a: 0x6d4aac20, 0x3c44b: 0x6d4aae20, + 0x3c44c: 0x6d4ab020, 0x3c44d: 0x6d4ab220, 0x3c44e: 0x6d784a20, 0x3c44f: 0x6d784c20, + 0x3c450: 0x6d784e20, 0x3c451: 0x6d785020, 0x3c452: 0x6d785220, 0x3c453: 0x6d785420, + 0x3c454: 0x6d785620, 0x3c455: 0x6da17420, 0x3c456: 0x6da17620, 0x3c457: 0x6da17820, + 0x3c458: 0x6da17a20, 0x3c459: 0x6dc3ce20, 0x3c45a: 0x6dc3d020, 0x3c45b: 0x6dc3d220, + 0x3c45c: 0x6dc3d420, 0x3c45d: 0x6dc3d620, 0x3c45e: 0x6dc3d820, 0x3c45f: 0x6de0f820, + 0x3c460: 0x6de0fa20, 0x3c461: 0x6de0fc20, 0x3c462: 0x6df92220, 0x3c463: 0x6df92420, + 0x3c464: 0x6df92620, 0x3c465: 0x6e1c7020, 0x3c466: 0x6e31be20, 0x3c467: 0x6e31c020, + 0x3c468: 0x6c1a9620, 0x3c469: 0x6c2da820, 0x3c46a: 0x6c47fe20, 0x3c46b: 0x6c697c20, + 0x3c46c: 0x6c904220, 0x3c46d: 0x6c904420, 0x3c46e: 0x6ced4820, 0x3c46f: 0x6d1d1420, + 0x3c470: 0x6d786420, 0x3c471: 0x6c07c020, 0x3c472: 0x6c07c220, 0x3c473: 0x6c0f0420, + 0x3c474: 0x6c0f0620, 0x3c475: 0x6c0f0820, 0x3c476: 0x6c0f0a20, 0x3c477: 0x6c0f0c20, + 0x3c478: 0x6c1b5020, 0x3c479: 0x6c1b5220, 0x3c47a: 0x6c1b5420, 0x3c47b: 0x6c1b5620, + 0x3c47c: 0x6c1b5820, 0x3c47d: 0x6c1b5a20, 0x3c47e: 0x6c1b5c20, 0x3c47f: 0x6c1b5e20, + // Block 0xf12, offset 0x3c480 + 0x3c480: 0x6c1b6020, 0x3c481: 0x6c1b6220, 0x3c482: 0x6c1b6420, 0x3c483: 0x6c2e6e20, + 0x3c484: 0x6c2e7020, 0x3c485: 0x6c2e7220, 0x3c486: 0x6c2e7420, 0x3c487: 0x6c2e7620, + 0x3c488: 0x6c2e7820, 0x3c489: 0x6c2e7a20, 0x3c48a: 0x6c2e7c20, 0x3c48b: 0x6c48d420, + 0x3c48c: 0x6c48d620, 0x3c48d: 0x6c48d820, 0x3c48e: 0x6c48da20, 0x3c48f: 0x6c48dc20, + 0x3c490: 0x6c48de20, 0x3c491: 0x6c48e020, 0x3c492: 0x6c48e220, 0x3c493: 0x6c48e420, + 0x3c494: 0x6c6a4e20, 0x3c495: 0x6c6a5020, 0x3c496: 0x6c6a5220, 0x3c497: 0x6c6a5420, + 0x3c498: 0x6c6a5620, 0x3c499: 0x6c6a5820, 0x3c49a: 0x6c6a5a20, 0x3c49b: 0x6c6a5c20, + 0x3c49c: 0x6c6a5e20, 0x3c49d: 0x6c6a6020, 0x3c49e: 0x6c6a6220, 0x3c49f: 0x6c6a6420, + 0x3c4a0: 0x6c6a6620, 0x3c4a1: 0x6c6a6820, 0x3c4a2: 0x6c6a6a20, 0x3c4a3: 0x6c6a6c20, + 0x3c4a4: 0x6c914220, 0x3c4a5: 0x6c914420, 0x3c4a6: 0x6c914620, 0x3c4a7: 0x6c914820, + 0x3c4a8: 0x6c914a20, 0x3c4a9: 0x6c914c20, 0x3c4aa: 0x6c914e20, 0x3c4ab: 0x6c915020, + 0x3c4ac: 0x6c915220, 0x3c4ad: 0x6c915420, 0x3c4ae: 0x6c915620, 0x3c4af: 0x6c915820, + 0x3c4b0: 0x6c915a20, 0x3c4b1: 0x6c915c20, 0x3c4b2: 0x6cbd6c20, 0x3c4b3: 0x6cbd6e20, + 0x3c4b4: 0x6cbd7020, 0x3c4b5: 0x6cbd7220, 0x3c4b6: 0x6cbd7420, 0x3c4b7: 0x6cbd7620, + 0x3c4b8: 0x6cbd7820, 0x3c4b9: 0x6cbd7a20, 0x3c4ba: 0x6cbd7c20, 0x3c4bb: 0x6cbd7e20, + 0x3c4bc: 0x6cbd8020, 0x3c4bd: 0x6cbd8220, 0x3c4be: 0x6cee2e20, 0x3c4bf: 0x6cee3020, + // Block 0xf13, offset 0x3c4c0 + 0x3c4c0: 0x6cee3220, 0x3c4c1: 0x6cee3420, 0x3c4c2: 0x6cee3620, 0x3c4c3: 0x6cee3820, + 0x3c4c4: 0x6cee3a20, 0x3c4c5: 0x6cee3c20, 0x3c4c6: 0x6cee3e20, 0x3c4c7: 0x6cee4020, + 0x3c4c8: 0x6cee4220, 0x3c4c9: 0x6cee4420, 0x3c4ca: 0x6cee4620, 0x3c4cb: 0x6cee4820, + 0x3c4cc: 0x6cee4a20, 0x3c4cd: 0x6cee4c20, 0x3c4ce: 0x6d1dda20, 0x3c4cf: 0x6d1ddc20, + 0x3c4d0: 0x6d1dde20, 0x3c4d1: 0x6d1de020, 0x3c4d2: 0x6d1de220, 0x3c4d3: 0x6d1de420, + 0x3c4d4: 0x6d1de620, 0x3c4d5: 0x6d1de820, 0x3c4d6: 0x6d1dea20, 0x3c4d7: 0x6d1dec20, + 0x3c4d8: 0x6d1dee20, 0x3c4d9: 0x6d4b9420, 0x3c4da: 0x6d4b9620, 0x3c4db: 0x6d4b9820, + 0x3c4dc: 0x6d4b9a20, 0x3c4dd: 0x6d4b9c20, 0x3c4de: 0x6d4b9e20, 0x3c4df: 0x6d78f020, + 0x3c4e0: 0x6d78f220, 0x3c4e1: 0x6d78f420, 0x3c4e2: 0x6d78f620, 0x3c4e3: 0x6d78f820, + 0x3c4e4: 0x6d78fa20, 0x3c4e5: 0x6d78fc20, 0x3c4e6: 0x6da1f420, 0x3c4e7: 0x6da1f620, + 0x3c4e8: 0x6da1f820, 0x3c4e9: 0x6da1fa20, 0x3c4ea: 0x6da1fc20, 0x3c4eb: 0x6da1fe20, + 0x3c4ec: 0x6dc42820, 0x3c4ed: 0x6dc42a20, 0x3c4ee: 0x6dc42c20, 0x3c4ef: 0x6dc42e20, + 0x3c4f0: 0x6de14220, 0x3c4f1: 0x6df95020, 0x3c4f2: 0x6c6a8020, 0x3c4f3: 0x6cee5a20, + 0x3c4f4: 0x6e1c8e20, 0x3c4f5: 0x6df95420, 0x3c4f6: 0x6cee6820, 0x3c4f7: 0x6c0f2820, + 0x3c4f8: 0x6c2e9820, 0x3c4f9: 0x6c490020, 0x3c4fa: 0x6c6aa820, 0x3c4fb: 0x6c919620, + 0x3c4fc: 0x6cbdb420, 0x3c4fd: 0x6d1e2c20, 0x3c4fe: 0x6d4bb620, 0x3c4ff: 0x6d791a20, + // Block 0xf14, offset 0x3c500 + 0x3c500: 0x6e1c9020, 0x3c501: 0x6c03ee20, 0x3c502: 0x6c07fa20, 0x3c503: 0x6c0f5420, + 0x3c504: 0x6c1bbe20, 0x3c505: 0x6c1bc020, 0x3c506: 0x6c1bc220, 0x3c507: 0x6c2ee620, + 0x3c508: 0x6c2ee820, 0x3c509: 0x6c2eea20, 0x3c50a: 0x6c2eec20, 0x3c50b: 0x6c2eee20, + 0x3c50c: 0x6c2ef020, 0x3c50d: 0x6c493620, 0x3c50e: 0x6c493820, 0x3c50f: 0x6c493a20, + 0x3c510: 0x6c6ae220, 0x3c511: 0x6c6ae420, 0x3c512: 0x6c6ae620, 0x3c513: 0x6c91cc20, + 0x3c514: 0x6c91ce20, 0x3c515: 0x6c91d020, 0x3c516: 0x6cbdec20, 0x3c517: 0x6cbdee20, + 0x3c518: 0x6cbdf020, 0x3c519: 0x6ceea020, 0x3c51a: 0x6ceea220, 0x3c51b: 0x6ceea420, + 0x3c51c: 0x6d1e4c20, 0x3c51d: 0x6d1e4e20, 0x3c51e: 0x6d1e5020, 0x3c51f: 0x6d4bd820, + 0x3c520: 0x6d4bda20, 0x3c521: 0x6d4bdc20, 0x3c522: 0x6dc45220, 0x3c523: 0x6df95a20, + 0x3c524: 0x6c0fa220, 0x3c525: 0x6c0fa420, 0x3c526: 0x6c1c5220, 0x3c527: 0x6c1c5420, + 0x3c528: 0x6c1c5620, 0x3c529: 0x6c1c5820, 0x3c52a: 0x6c1c5a20, 0x3c52b: 0x6c1c5c20, + 0x3c52c: 0x6c1c5e20, 0x3c52d: 0x6c2fc020, 0x3c52e: 0x6c2fc220, 0x3c52f: 0x6c2fc420, + 0x3c530: 0x6c2fc620, 0x3c531: 0x6c4a0c20, 0x3c532: 0x6c4a0e20, 0x3c533: 0x6c4a1020, + 0x3c534: 0x6c4a1220, 0x3c535: 0x6c4a1420, 0x3c536: 0x6c6bcc20, 0x3c537: 0x6c6bce20, + 0x3c538: 0x6c6bd020, 0x3c539: 0x6c6bd220, 0x3c53a: 0x6c6bd420, 0x3c53b: 0x6c92ec20, + 0x3c53c: 0x6c92ee20, 0x3c53d: 0x6c92f020, 0x3c53e: 0x6c92f220, 0x3c53f: 0x6c92f420, + // Block 0xf15, offset 0x3c540 + 0x3c540: 0x6c92f620, 0x3c541: 0x6c92f820, 0x3c542: 0x6c92fa20, 0x3c543: 0x6c92fc20, + 0x3c544: 0x6c92fe20, 0x3c545: 0x6c930020, 0x3c546: 0x6cbf2a20, 0x3c547: 0x6cbf2c20, + 0x3c548: 0x6cbf2e20, 0x3c549: 0x6cbf3020, 0x3c54a: 0x6cbf3220, 0x3c54b: 0x6cbf3420, + 0x3c54c: 0x6cbf3620, 0x3c54d: 0x6cbf3820, 0x3c54e: 0x6cbf3a20, 0x3c54f: 0x6cbf3c20, + 0x3c550: 0x6cbf3e20, 0x3c551: 0x6cef6c20, 0x3c552: 0x6cef6e20, 0x3c553: 0x6cef7020, + 0x3c554: 0x6cef7220, 0x3c555: 0x6cef7420, 0x3c556: 0x6cef7620, 0x3c557: 0x6d1f1420, + 0x3c558: 0x6d1f1620, 0x3c559: 0x6d1f1820, 0x3c55a: 0x6d1f1a20, 0x3c55b: 0x6d1f1c20, + 0x3c55c: 0x6d1f1e20, 0x3c55d: 0x6d1f2020, 0x3c55e: 0x6d1f2220, 0x3c55f: 0x6d1f2420, + 0x3c560: 0x6d4ca820, 0x3c561: 0x6d4caa20, 0x3c562: 0x6d4cac20, 0x3c563: 0x6d4cae20, + 0x3c564: 0x6d4cb020, 0x3c565: 0x6d4cb220, 0x3c566: 0x6d79d420, 0x3c567: 0x6d79d620, + 0x3c568: 0x6d79d820, 0x3c569: 0x6d79da20, 0x3c56a: 0x6d79dc20, 0x3c56b: 0x6da29420, + 0x3c56c: 0x6dc48620, 0x3c56d: 0x6dc48820, 0x3c56e: 0x6dc48a20, 0x3c56f: 0x6dc48c20, + 0x3c570: 0x6de18c20, 0x3c571: 0x6de18e20, 0x3c572: 0x6df98420, 0x3c573: 0x6e0d4020, + 0x3c574: 0x6e0d4220, 0x3c575: 0x6e28ae20, 0x3c576: 0x6c1c7e20, 0x3c577: 0x6c1c8020, + 0x3c578: 0x6c1c8220, 0x3c579: 0x6c1c8420, 0x3c57a: 0x6c2ff820, 0x3c57b: 0x6c4a3e20, + 0x3c57c: 0x6c931c20, 0x3c57d: 0x6c931e20, 0x3c57e: 0x6c932020, 0x3c57f: 0x6cbf6020, + // Block 0xf16, offset 0x3c580 + 0x3c580: 0x6d1f3a20, 0x3c581: 0x6d79fc20, 0x3c582: 0x6da29c20, 0x3c583: 0x6da29e20, + 0x3c584: 0x6e0d4420, 0x3c585: 0x6c1cb620, 0x3c586: 0x6c1cb820, 0x3c587: 0x6c1cba20, + 0x3c588: 0x6c304020, 0x3c589: 0x6c304220, 0x3c58a: 0x6c4a8820, 0x3c58b: 0x6c4a8a20, + 0x3c58c: 0x6c4a8c20, 0x3c58d: 0x6c6c6a20, 0x3c58e: 0x6c6c6c20, 0x3c58f: 0x6c6c6e20, + 0x3c590: 0x6c6c7020, 0x3c591: 0x6c937c20, 0x3c592: 0x6c937e20, 0x3c593: 0x6c938020, + 0x3c594: 0x6cbfc620, 0x3c595: 0x6cbfc820, 0x3c596: 0x6cbfca20, 0x3c597: 0x6cbfcc20, + 0x3c598: 0x6cbfce20, 0x3c599: 0x6cbfd020, 0x3c59a: 0x6cbfd220, 0x3c59b: 0x6cefec20, + 0x3c59c: 0x6cefee20, 0x3c59d: 0x6ceff020, 0x3c59e: 0x6ceff220, 0x3c59f: 0x6ceff420, + 0x3c5a0: 0x6ceff620, 0x3c5a1: 0x6d1fa020, 0x3c5a2: 0x6d1fa220, 0x3c5a3: 0x6d1fa420, + 0x3c5a4: 0x6d1fa620, 0x3c5a5: 0x6d1fa820, 0x3c5a6: 0x6d4d1620, 0x3c5a7: 0x6d4d1820, + 0x3c5a8: 0x6d4d1a20, 0x3c5a9: 0x6d4d1c20, 0x3c5aa: 0x6d4d1e20, 0x3c5ab: 0x6d7a2820, + 0x3c5ac: 0x6d7a2a20, 0x3c5ad: 0x6d7a2c20, 0x3c5ae: 0x6d7a2e20, 0x3c5af: 0x6da2be20, + 0x3c5b0: 0x6dc4b220, 0x3c5b1: 0x6dc4b420, 0x3c5b2: 0x6dc4b620, 0x3c5b3: 0x6df9a220, + 0x3c5b4: 0x6df9a420, 0x3c5b5: 0x6e0d5a20, 0x3c5b6: 0x6e31ee20, 0x3c5b7: 0x6c0fea20, + 0x3c5b8: 0x6c939220, 0x3c5b9: 0x6c939420, 0x3c5ba: 0x6cbfe820, 0x3c5bb: 0x6d4d3420, + 0x3c5bc: 0x6d4d3620, 0x3c5bd: 0x6d7a3620, 0x3c5be: 0x6da2c620, 0x3c5bf: 0x6c1cd420, + // Block 0xf17, offset 0x3c5c0 + 0x3c5c0: 0x6c306820, 0x3c5c1: 0x6c6c9020, 0x3c5c2: 0x6c6c9220, 0x3c5c3: 0x6d1fce20, + 0x3c5c4: 0x6d4d4e20, 0x3c5c5: 0x6d7a4020, 0x3c5c6: 0x6da2d020, 0x3c5c7: 0x6cc01e20, + 0x3c5c8: 0x6cf02c20, 0x3c5c9: 0x6c1d1820, 0x3c5ca: 0x6c1d1a20, 0x3c5cb: 0x6c1d1c20, + 0x3c5cc: 0x6c30b020, 0x3c5cd: 0x6c4b0e20, 0x3c5ce: 0x6c4b1020, 0x3c5cf: 0x6c6cf020, + 0x3c5d0: 0x6c6cf220, 0x3c5d1: 0x6c940e20, 0x3c5d2: 0x6cf05e20, 0x3c5d3: 0x6cf06020, + 0x3c5d4: 0x6cf06220, 0x3c5d5: 0x6cc05a20, 0x3c5d6: 0x6cc05c20, 0x3c5d7: 0x6cc05e20, + 0x3c5d8: 0x6cc06020, 0x3c5d9: 0x6d1ffc20, 0x3c5da: 0x6d1ffe20, 0x3c5db: 0x6d4d8820, + 0x3c5dc: 0x6d4d8a20, 0x3c5dd: 0x6d7a5e20, 0x3c5de: 0x6da2e020, 0x3c5df: 0x6de1cc20, + 0x3c5e0: 0x6de1ce20, 0x3c5e1: 0x6e1cd220, 0x3c5e2: 0x6c108820, 0x3c5e3: 0x6c108a20, + 0x3c5e4: 0x6c108c20, 0x3c5e5: 0x6c108e20, 0x3c5e6: 0x6c1dcc20, 0x3c5e7: 0x6c1dce20, + 0x3c5e8: 0x6c1dd020, 0x3c5e9: 0x6c316e20, 0x3c5ea: 0x6c317020, 0x3c5eb: 0x6c317220, + 0x3c5ec: 0x6c317420, 0x3c5ed: 0x6c317620, 0x3c5ee: 0x6c317820, 0x3c5ef: 0x6c4bbe20, + 0x3c5f0: 0x6c4bc020, 0x3c5f1: 0x6c4bc220, 0x3c5f2: 0x6c4bc420, 0x3c5f3: 0x6c4bc620, + 0x3c5f4: 0x6c4bc820, 0x3c5f5: 0x6c6dd420, 0x3c5f6: 0x6c6dd620, 0x3c5f7: 0x6c6dd820, + 0x3c5f8: 0x6c6dda20, 0x3c5f9: 0x6c6ddc20, 0x3c5fa: 0x6c6dde20, 0x3c5fb: 0x6c953c20, + 0x3c5fc: 0x6c953e20, 0x3c5fd: 0x6c954020, 0x3c5fe: 0x6c954220, 0x3c5ff: 0x6c954420, + // Block 0xf18, offset 0x3c600 + 0x3c600: 0x6c954620, 0x3c601: 0x6c954820, 0x3c602: 0x6cc15e20, 0x3c603: 0x6cc16020, + 0x3c604: 0x6cc16220, 0x3c605: 0x6cc16420, 0x3c606: 0x6cc16620, 0x3c607: 0x6cc16820, + 0x3c608: 0x6cf10820, 0x3c609: 0x6cf10a20, 0x3c60a: 0x6cf10c20, 0x3c60b: 0x6cf10e20, + 0x3c60c: 0x6d20ac20, 0x3c60d: 0x6d20ae20, 0x3c60e: 0x6d20b020, 0x3c60f: 0x6d20b220, + 0x3c610: 0x6d20b420, 0x3c611: 0x6d20b620, 0x3c612: 0x6d20b820, 0x3c613: 0x6d4e4020, + 0x3c614: 0x6d4e4220, 0x3c615: 0x6d4e4420, 0x3c616: 0x6d4e4620, 0x3c617: 0x6d7acc20, + 0x3c618: 0x6d7ace20, 0x3c619: 0x6d7ad020, 0x3c61a: 0x6d7ad220, 0x3c61b: 0x6da34c20, + 0x3c61c: 0x6da34e20, 0x3c61d: 0x6da35020, 0x3c61e: 0x6de20a20, 0x3c61f: 0x6e0d9020, + 0x3c620: 0x6e1cfc20, 0x3c621: 0x6c1ddc20, 0x3c622: 0x6c4bd820, 0x3c623: 0x6c10aa20, + 0x3c624: 0x6c955620, 0x3c625: 0x6cc17620, 0x3c626: 0x6cf11620, 0x3c627: 0x6d20bc20, + 0x3c628: 0x6da35820, 0x3c629: 0x6dc50c20, 0x3c62a: 0x6e1d0220, 0x3c62b: 0x6c319020, + 0x3c62c: 0x6c1de820, 0x3c62d: 0x6cc18420, 0x3c62e: 0x6cc18620, 0x3c62f: 0x6d20be20, + 0x3c630: 0x6d7ae420, 0x3c631: 0x6d7ae620, 0x3c632: 0x6c08b820, 0x3c633: 0x6c6e4c20, + 0x3c634: 0x6c95c220, 0x3c635: 0x6c95c420, 0x3c636: 0x6c95c620, 0x3c637: 0x6c95c820, + 0x3c638: 0x6cc1ec20, 0x3c639: 0x6cc1ee20, 0x3c63a: 0x6cc1f020, 0x3c63b: 0x6d210420, + 0x3c63c: 0x6d4ea620, 0x3c63d: 0x6d7b1820, 0x3c63e: 0x6da37a20, 0x3c63f: 0x6de22a20, + // Block 0xf19, offset 0x3c640 + 0x3c640: 0x6df9e820, 0x3c641: 0x6c1e3820, 0x3c642: 0x6c95ce20, 0x3c643: 0x6c95d020, + 0x3c644: 0x6cc1fa20, 0x3c645: 0x6cf16220, 0x3c646: 0x6cf16420, 0x3c647: 0x6d4eac20, + 0x3c648: 0x6dc51e20, 0x3c649: 0x6de22e20, 0x3c64a: 0x6c10e220, 0x3c64b: 0x6c4c6420, + 0x3c64c: 0x6c1e8020, 0x3c64d: 0x6c1e8220, 0x3c64e: 0x6c323e20, 0x3c64f: 0x6c324020, + 0x3c650: 0x6c4ca820, 0x3c651: 0x6c4caa20, 0x3c652: 0x6c6eae20, 0x3c653: 0x6c6eb020, + 0x3c654: 0x6c6eb220, 0x3c655: 0x6c6eb420, 0x3c656: 0x6c6eb620, 0x3c657: 0x6c6eb820, + 0x3c658: 0x6c964820, 0x3c659: 0x6c964a20, 0x3c65a: 0x6cc26020, 0x3c65b: 0x6cc26220, + 0x3c65c: 0x6cf1a820, 0x3c65d: 0x6cf1aa20, 0x3c65e: 0x6d216620, 0x3c65f: 0x6d216820, + 0x3c660: 0x6d216a20, 0x3c661: 0x6d4efa20, 0x3c662: 0x6d4efc20, 0x3c663: 0x6d4efe20, + 0x3c664: 0x6d7b5820, 0x3c665: 0x6d7b5a20, 0x3c666: 0x6da39a20, 0x3c667: 0x6da39c20, + 0x3c668: 0x6da39e20, 0x3c669: 0x6dc53c20, 0x3c66a: 0x6de25420, 0x3c66b: 0x6e0da820, + 0x3c66c: 0x6c08d820, 0x3c66d: 0x6c1e8c20, 0x3c66e: 0x6c1e8e20, 0x3c66f: 0x6c4cc020, + 0x3c670: 0x6c6ec020, 0x3c671: 0x6c965820, 0x3c672: 0x6d217220, 0x3c673: 0x6c1ea420, + 0x3c674: 0x6c325a20, 0x3c675: 0x6c6ed220, 0x3c676: 0x6cc27820, 0x3c677: 0x6cf1b620, + 0x3c678: 0x6da3a620, 0x3c679: 0x6e1d2020, 0x3c67a: 0x6c114820, 0x3c67b: 0x6c329820, + 0x3c67c: 0x6c4d2620, 0x3c67d: 0x6c4d2820, 0x3c67e: 0x6c6ef820, 0x3c67f: 0x6c969e20, + // Block 0xf1a, offset 0x3c680 + 0x3c680: 0x6cc2a220, 0x3c681: 0x6cc2a420, 0x3c682: 0x6d21a420, 0x3c683: 0x6da3b820, + 0x3c684: 0x6e0db620, 0x3c685: 0x6e388420, 0x3c686: 0x6c115420, 0x3c687: 0x6dc55a20, + 0x3c688: 0x6c6f1020, 0x3c689: 0x6d4f3420, 0x3c68a: 0x6da3be20, 0x3c68b: 0x6c1f1a20, + 0x3c68c: 0x6c32de20, 0x3c68d: 0x6c6f5220, 0x3c68e: 0x6c6f5420, 0x3c68f: 0x6c972a20, + 0x3c690: 0x6c972c20, 0x3c691: 0x6cc2fe20, 0x3c692: 0x6cc30020, 0x3c693: 0x6cc30220, + 0x3c694: 0x6cf23e20, 0x3c695: 0x6cf24020, 0x3c696: 0x6d21fc20, 0x3c697: 0x6d21fe20, + 0x3c698: 0x6d220020, 0x3c699: 0x6d7bb020, 0x3c69a: 0x6da3d220, 0x3c69b: 0x6dc57020, + 0x3c69c: 0x6dc57220, 0x3c69d: 0x6c091e20, 0x3c69e: 0x6c11b820, 0x3c69f: 0x6c1fec20, + 0x3c6a0: 0x6c1fee20, 0x3c6a1: 0x6c1ff020, 0x3c6a2: 0x6c1ff220, 0x3c6a3: 0x6c1ff420, + 0x3c6a4: 0x6c1ff620, 0x3c6a5: 0x6c1ff820, 0x3c6a6: 0x6c33ce20, 0x3c6a7: 0x6c33d020, + 0x3c6a8: 0x6c33d220, 0x3c6a9: 0x6c33d420, 0x3c6aa: 0x6c33d620, 0x3c6ab: 0x6c33d820, + 0x3c6ac: 0x6c33da20, 0x3c6ad: 0x6c4e8e20, 0x3c6ae: 0x6c4e9020, 0x3c6af: 0x6c4e9220, + 0x3c6b0: 0x6c4e9420, 0x3c6b1: 0x6c4e9620, 0x3c6b2: 0x6c4e9820, 0x3c6b3: 0x6c4e9a20, + 0x3c6b4: 0x6c4e9c20, 0x3c6b5: 0x6c708220, 0x3c6b6: 0x6c708420, 0x3c6b7: 0x6c708620, + 0x3c6b8: 0x6c708820, 0x3c6b9: 0x6c708a20, 0x3c6ba: 0x6c708c20, 0x3c6bb: 0x6c708e20, + 0x3c6bc: 0x6c709020, 0x3c6bd: 0x6c709220, 0x3c6be: 0x6c709420, 0x3c6bf: 0x6c98a620, + // Block 0xf1b, offset 0x3c6c0 + 0x3c6c0: 0x6c98a820, 0x3c6c1: 0x6c98aa20, 0x3c6c2: 0x6c98ac20, 0x3c6c3: 0x6c98ae20, + 0x3c6c4: 0x6c98b020, 0x3c6c5: 0x6c98b220, 0x3c6c6: 0x6c98b420, 0x3c6c7: 0x6cc47620, + 0x3c6c8: 0x6cc47820, 0x3c6c9: 0x6cc47a20, 0x3c6ca: 0x6cc47c20, 0x3c6cb: 0x6cc47e20, + 0x3c6cc: 0x6cc48020, 0x3c6cd: 0x6cc48220, 0x3c6ce: 0x6cc48420, 0x3c6cf: 0x6cc48620, + 0x3c6d0: 0x6cc48820, 0x3c6d1: 0x6cc48a20, 0x3c6d2: 0x6cc48c20, 0x3c6d3: 0x6cf35c20, + 0x3c6d4: 0x6cf35e20, 0x3c6d5: 0x6cf36020, 0x3c6d6: 0x6cf36220, 0x3c6d7: 0x6cf36420, + 0x3c6d8: 0x6cf36620, 0x3c6d9: 0x6cf36820, 0x3c6da: 0x6cf36a20, 0x3c6db: 0x6cf36c20, + 0x3c6dc: 0x6cf36e20, 0x3c6dd: 0x6cf37020, 0x3c6de: 0x6cf37220, 0x3c6df: 0x6d232020, + 0x3c6e0: 0x6d232220, 0x3c6e1: 0x6d232420, 0x3c6e2: 0x6d232620, 0x3c6e3: 0x6d232820, + 0x3c6e4: 0x6d232a20, 0x3c6e5: 0x6d232c20, 0x3c6e6: 0x6d232e20, 0x3c6e7: 0x6d233020, + 0x3c6e8: 0x6d50b220, 0x3c6e9: 0x6d50b420, 0x3c6ea: 0x6d50b620, 0x3c6eb: 0x6d50b820, + 0x3c6ec: 0x6d50ba20, 0x3c6ed: 0x6d50bc20, 0x3c6ee: 0x6d7c7c20, 0x3c6ef: 0x6d7c7e20, + 0x3c6f0: 0x6d7c8020, 0x3c6f1: 0x6d7c8220, 0x3c6f2: 0x6d7c8420, 0x3c6f3: 0x6d7c8620, + 0x3c6f4: 0x6d7c8820, 0x3c6f5: 0x6d7c8a20, 0x3c6f6: 0x6d7c8c20, 0x3c6f7: 0x6da46220, + 0x3c6f8: 0x6da46420, 0x3c6f9: 0x6da46620, 0x3c6fa: 0x6dc5f620, 0x3c6fb: 0x6dc5f820, + 0x3c6fc: 0x6dc5fa20, 0x3c6fd: 0x6dc5fc20, 0x3c6fe: 0x6dc5fe20, 0x3c6ff: 0x6de2da20, + // Block 0xf1c, offset 0x3c700 + 0x3c700: 0x6de2dc20, 0x3c701: 0x6dfa5220, 0x3c702: 0x6dfa5420, 0x3c703: 0x6e0de220, + 0x3c704: 0x6e0de420, 0x3c705: 0x6e1d4e20, 0x3c706: 0x6e1d5020, 0x3c707: 0x6e28f020, + 0x3c708: 0x6e388e20, 0x3c709: 0x6c092a20, 0x3c70a: 0x6c11cc20, 0x3c70b: 0x6c4ec420, + 0x3c70c: 0x6c4ec620, 0x3c70d: 0x6c70ae20, 0x3c70e: 0x6c70b020, 0x3c70f: 0x6c98d220, + 0x3c710: 0x6c98d420, 0x3c711: 0x6cc4ac20, 0x3c712: 0x6cf3a020, 0x3c713: 0x6d236020, + 0x3c714: 0x6d7caa20, 0x3c715: 0x6d7cac20, 0x3c716: 0x6d7cae20, 0x3c717: 0x6e3d2c20, + 0x3c718: 0x6c4ef020, 0x3c719: 0x6c98e020, 0x3c71a: 0x6d50fa20, 0x3c71b: 0x6e1d5420, + 0x3c71c: 0x6c123220, 0x3c71d: 0x6c210a20, 0x3c71e: 0x6c210c20, 0x3c71f: 0x6c210e20, + 0x3c720: 0x6c211020, 0x3c721: 0x6c211220, 0x3c722: 0x6c211420, 0x3c723: 0x6c211620, + 0x3c724: 0x6c351e20, 0x3c725: 0x6c352020, 0x3c726: 0x6c352220, 0x3c727: 0x6c352420, + 0x3c728: 0x6c352620, 0x3c729: 0x6c352820, 0x3c72a: 0x6c352a20, 0x3c72b: 0x6c501620, + 0x3c72c: 0x6c501820, 0x3c72d: 0x6c501a20, 0x3c72e: 0x6c501c20, 0x3c72f: 0x6c501e20, + 0x3c730: 0x6c502020, 0x3c731: 0x6c502220, 0x3c732: 0x6c502420, 0x3c733: 0x6c502620, + 0x3c734: 0x6c720620, 0x3c735: 0x6c720820, 0x3c736: 0x6c720a20, 0x3c737: 0x6c720c20, + 0x3c738: 0x6c720e20, 0x3c739: 0x6c721020, 0x3c73a: 0x6c721220, 0x3c73b: 0x6c721420, + 0x3c73c: 0x6c721620, 0x3c73d: 0x6c721820, 0x3c73e: 0x6c721a20, 0x3c73f: 0x6c721c20, + // Block 0xf1d, offset 0x3c740 + 0x3c740: 0x6c721e20, 0x3c741: 0x6c9a7c20, 0x3c742: 0x6c9a7e20, 0x3c743: 0x6c9a8020, + 0x3c744: 0x6c9a8220, 0x3c745: 0x6c9a8420, 0x3c746: 0x6c9a8620, 0x3c747: 0x6c9a8820, + 0x3c748: 0x6c9a8a20, 0x3c749: 0x6c9a8c20, 0x3c74a: 0x6c9a8e20, 0x3c74b: 0x6c9a9020, + 0x3c74c: 0x6cc65420, 0x3c74d: 0x6cc65620, 0x3c74e: 0x6cc65820, 0x3c74f: 0x6cc65a20, + 0x3c750: 0x6cc65c20, 0x3c751: 0x6cc65e20, 0x3c752: 0x6cc66020, 0x3c753: 0x6cc66220, + 0x3c754: 0x6cc66420, 0x3c755: 0x6cc66620, 0x3c756: 0x6cc66820, 0x3c757: 0x6cf50220, + 0x3c758: 0x6cf50420, 0x3c759: 0x6cf50620, 0x3c75a: 0x6cf50820, 0x3c75b: 0x6cf50a20, + 0x3c75c: 0x6cf50c20, 0x3c75d: 0x6cf50e20, 0x3c75e: 0x6cf51020, 0x3c75f: 0x6cf51220, + 0x3c760: 0x6cf51420, 0x3c761: 0x6cf51620, 0x3c762: 0x6cf51820, 0x3c763: 0x6d24d420, + 0x3c764: 0x6d24d620, 0x3c765: 0x6d24d820, 0x3c766: 0x6d24da20, 0x3c767: 0x6d24dc20, + 0x3c768: 0x6d24de20, 0x3c769: 0x6d24e020, 0x3c76a: 0x6d24e220, 0x3c76b: 0x6d525620, + 0x3c76c: 0x6d525820, 0x3c76d: 0x6d525a20, 0x3c76e: 0x6d525c20, 0x3c76f: 0x6d525e20, + 0x3c770: 0x6d526020, 0x3c771: 0x6d526220, 0x3c772: 0x6d526420, 0x3c773: 0x6d526620, + 0x3c774: 0x6d526820, 0x3c775: 0x6d7d9820, 0x3c776: 0x6d7d9a20, 0x3c777: 0x6d7d9c20, + 0x3c778: 0x6da50420, 0x3c779: 0x6da50620, 0x3c77a: 0x6da50820, 0x3c77b: 0x6dc6a820, + 0x3c77c: 0x6dc6aa20, 0x3c77d: 0x6dc6ac20, 0x3c77e: 0x6dc6ae20, 0x3c77f: 0x6dc6b020, + // Block 0xf1e, offset 0x3c780 + 0x3c780: 0x6dc6b220, 0x3c781: 0x6de35820, 0x3c782: 0x6dfaae20, 0x3c783: 0x6e1d8e20, + 0x3c784: 0x6e291820, 0x3c785: 0x6c9a9e20, 0x3c786: 0x6c353e20, 0x3c787: 0x6d527020, + 0x3c788: 0x6c357420, 0x3c789: 0x6c506c20, 0x3c78a: 0x6c506e20, 0x3c78b: 0x6c728820, + 0x3c78c: 0x6c728a20, 0x3c78d: 0x6c9b1020, 0x3c78e: 0x6cc6fe20, 0x3c78f: 0x6cc70020, + 0x3c790: 0x6cf58a20, 0x3c791: 0x6d253e20, 0x3c792: 0x6d254020, 0x3c793: 0x6d52b620, + 0x3c794: 0x6d52b820, 0x3c795: 0x6d52ba20, 0x3c796: 0x6d52bc20, 0x3c797: 0x6d7dfe20, + 0x3c798: 0x6d7e0020, 0x3c799: 0x6d7e0220, 0x3c79a: 0x6da53c20, 0x3c79b: 0x6dc6d420, + 0x3c79c: 0x6dc6d620, 0x3c79d: 0x6e0e3820, 0x3c79e: 0x6e0e3a20, 0x3c79f: 0x6e324620, + 0x3c7a0: 0x6c214020, 0x3c7a1: 0x6c357e20, 0x3c7a2: 0x6c358020, 0x3c7a3: 0x6c507820, + 0x3c7a4: 0x6c729820, 0x3c7a5: 0x6cc70e20, 0x3c7a6: 0x6cc71020, 0x3c7a7: 0x6cc71220, + 0x3c7a8: 0x6d254220, 0x3c7a9: 0x6d254420, 0x3c7aa: 0x6d254620, 0x3c7ab: 0x6c508020, + 0x3c7ac: 0x6c72a820, 0x3c7ad: 0x6d255420, 0x3c7ae: 0x6d52d420, 0x3c7af: 0x6da54a20, + 0x3c7b0: 0x6e0e4220, 0x3c7b1: 0x6c359c20, 0x3c7b2: 0x6c35ac20, 0x3c7b3: 0x6c35ae20, + 0x3c7b4: 0x6c50aa20, 0x3c7b5: 0x6c72e420, 0x3c7b6: 0x6c72e620, 0x3c7b7: 0x6c72e820, + 0x3c7b8: 0x6c9b6a20, 0x3c7b9: 0x6cc76220, 0x3c7ba: 0x6cc76420, 0x3c7bb: 0x6cc76620, + 0x3c7bc: 0x6cc76820, 0x3c7bd: 0x6cf5ca20, 0x3c7be: 0x6d257420, 0x3c7bf: 0x6d52ee20, + // Block 0xf1f, offset 0x3c7c0 + 0x3c7c0: 0x6d52f020, 0x3c7c1: 0x6d7e2c20, 0x3c7c2: 0x6d7e2e20, 0x3c7c3: 0x6de38020, + 0x3c7c4: 0x6de38220, 0x3c7c5: 0x6dfadc20, 0x3c7c6: 0x6c219820, 0x3c7c7: 0x6c219a20, + 0x3c7c8: 0x6c363220, 0x3c7c9: 0x6c363420, 0x3c7ca: 0x6c363620, 0x3c7cb: 0x6c363820, + 0x3c7cc: 0x6c363a20, 0x3c7cd: 0x6c363c20, 0x3c7ce: 0x6c363e20, 0x3c7cf: 0x6c514420, + 0x3c7d0: 0x6c514620, 0x3c7d1: 0x6c514820, 0x3c7d2: 0x6c514a20, 0x3c7d3: 0x6c514c20, + 0x3c7d4: 0x6c514e20, 0x3c7d5: 0x6c515020, 0x3c7d6: 0x6c515220, 0x3c7d7: 0x6c515420, + 0x3c7d8: 0x6c515620, 0x3c7d9: 0x6c737220, 0x3c7da: 0x6c737420, 0x3c7db: 0x6c737620, + 0x3c7dc: 0x6c737820, 0x3c7dd: 0x6c737a20, 0x3c7de: 0x6c737c20, 0x3c7df: 0x6c737e20, + 0x3c7e0: 0x6c738020, 0x3c7e1: 0x6c738220, 0x3c7e2: 0x6c738420, 0x3c7e3: 0x6c738620, + 0x3c7e4: 0x6c738820, 0x3c7e5: 0x6c9c0220, 0x3c7e6: 0x6c9c0420, 0x3c7e7: 0x6c9c0620, + 0x3c7e8: 0x6c9c0820, 0x3c7e9: 0x6cc83e20, 0x3c7ea: 0x6cc84020, 0x3c7eb: 0x6cc84220, + 0x3c7ec: 0x6cc84420, 0x3c7ed: 0x6cc84620, 0x3c7ee: 0x6cc84820, 0x3c7ef: 0x6cf67620, + 0x3c7f0: 0x6cf67820, 0x3c7f1: 0x6cf67a20, 0x3c7f2: 0x6cf67c20, 0x3c7f3: 0x6cf67e20, + 0x3c7f4: 0x6cf68020, 0x3c7f5: 0x6cf68220, 0x3c7f6: 0x6cf68420, 0x3c7f7: 0x6cf68620, + 0x3c7f8: 0x6d25ec20, 0x3c7f9: 0x6d25ee20, 0x3c7fa: 0x6d25f020, 0x3c7fb: 0x6d25f220, + 0x3c7fc: 0x6d25f420, 0x3c7fd: 0x6d25f620, 0x3c7fe: 0x6d536220, 0x3c7ff: 0x6d536420, + // Block 0xf20, offset 0x3c800 + 0x3c800: 0x6d536620, 0x3c801: 0x6d536820, 0x3c802: 0x6d536a20, 0x3c803: 0x6d536c20, + 0x3c804: 0x6d536e20, 0x3c805: 0x6d537020, 0x3c806: 0x6da5a420, 0x3c807: 0x6d7ec620, + 0x3c808: 0x6d7ec820, 0x3c809: 0x6d7eca20, 0x3c80a: 0x6d7ecc20, 0x3c80b: 0x6d7ece20, + 0x3c80c: 0x6d7ed020, 0x3c80d: 0x6da5a620, 0x3c80e: 0x6dc73820, 0x3c80f: 0x6dc73a20, + 0x3c810: 0x6dc73c20, 0x3c811: 0x6e0e5220, 0x3c812: 0x6e0e5420, 0x3c813: 0x6e0e5620, + 0x3c814: 0x6e325620, 0x3c815: 0x6d537e20, 0x3c816: 0x6d7ee020, 0x3c817: 0x6d7ee220, + 0x3c818: 0x6de3b220, 0x3c819: 0x6c127820, 0x3c81a: 0x6c21ae20, 0x3c81b: 0x6c365620, + 0x3c81c: 0x6c518220, 0x3c81d: 0x6c518420, 0x3c81e: 0x6c73ba20, 0x3c81f: 0x6d261220, + 0x3c820: 0x6c9c3020, 0x3c821: 0x6c9c3220, 0x3c822: 0x6c9c3420, 0x3c823: 0x6cc87e20, + 0x3c824: 0x6cf6aa20, 0x3c825: 0x6cf6ac20, 0x3c826: 0x6cf6ae20, 0x3c827: 0x6cf6b020, + 0x3c828: 0x6d261420, 0x3c829: 0x6d261620, 0x3c82a: 0x6d261820, 0x3c82b: 0x6d539820, + 0x3c82c: 0x6d539a20, 0x3c82d: 0x6d7efc20, 0x3c82e: 0x6e0e5a20, 0x3c82f: 0x6e0e5c20, + 0x3c830: 0x6e325c20, 0x3c831: 0x6c222e20, 0x3c832: 0x6c223020, 0x3c833: 0x6c223220, + 0x3c834: 0x6c223420, 0x3c835: 0x6c223620, 0x3c836: 0x6c375a20, 0x3c837: 0x6c375c20, + 0x3c838: 0x6c375e20, 0x3c839: 0x6c376020, 0x3c83a: 0x6c52ae20, 0x3c83b: 0x6c52b020, + 0x3c83c: 0x6c52b220, 0x3c83d: 0x6c52b420, 0x3c83e: 0x6c52b620, 0x3c83f: 0x6c52b820, + // Block 0xf21, offset 0x3c840 + 0x3c840: 0x6c52ba20, 0x3c841: 0x6c52bc20, 0x3c842: 0x6c52be20, 0x3c843: 0x6c752a20, + 0x3c844: 0x6c752c20, 0x3c845: 0x6c752e20, 0x3c846: 0x6c753020, 0x3c847: 0x6c753220, + 0x3c848: 0x6c753420, 0x3c849: 0x6c753620, 0x3c84a: 0x6c753820, 0x3c84b: 0x6c753a20, + 0x3c84c: 0x6c753c20, 0x3c84d: 0x6c753e20, 0x3c84e: 0x6c754020, 0x3c84f: 0x6c754220, + 0x3c850: 0x6c9d8620, 0x3c851: 0x6c9d8820, 0x3c852: 0x6c9d8a20, 0x3c853: 0x6c9d8c20, + 0x3c854: 0x6c9d8e20, 0x3c855: 0x6c9d9020, 0x3c856: 0x6c9d9220, 0x3c857: 0x6c9d9420, + 0x3c858: 0x6c9d9620, 0x3c859: 0x6c9d9820, 0x3c85a: 0x6c9d9a20, 0x3c85b: 0x6c9d9c20, + 0x3c85c: 0x6c9d9e20, 0x3c85d: 0x6c9da020, 0x3c85e: 0x6c9da220, 0x3c85f: 0x6cca6620, + 0x3c860: 0x6cca6820, 0x3c861: 0x6cca6a20, 0x3c862: 0x6cca6c20, 0x3c863: 0x6cca6e20, + 0x3c864: 0x6cca7020, 0x3c865: 0x6cca7220, 0x3c866: 0x6cca7420, 0x3c867: 0x6cca7620, + 0x3c868: 0x6cca7820, 0x3c869: 0x6cca7a20, 0x3c86a: 0x6cca7c20, 0x3c86b: 0x6cca7e20, + 0x3c86c: 0x6cca8020, 0x3c86d: 0x6cca8220, 0x3c86e: 0x6cca8420, 0x3c86f: 0x6cca8620, + 0x3c870: 0x6cf88c20, 0x3c871: 0x6cf88e20, 0x3c872: 0x6cf89020, 0x3c873: 0x6cf89220, + 0x3c874: 0x6cf89420, 0x3c875: 0x6cf89620, 0x3c876: 0x6cf89820, 0x3c877: 0x6cf89a20, + 0x3c878: 0x6cf89c20, 0x3c879: 0x6cf89e20, 0x3c87a: 0x6cf8a020, 0x3c87b: 0x6cf8a220, + 0x3c87c: 0x6cf8a420, 0x3c87d: 0x6cf8a620, 0x3c87e: 0x6cf8a820, 0x3c87f: 0x6cf8aa20, + // Block 0xf22, offset 0x3c880 + 0x3c880: 0x6cf8ac20, 0x3c881: 0x6cf8ae20, 0x3c882: 0x6cf8b020, 0x3c883: 0x6cf8b220, + 0x3c884: 0x6cf8b420, 0x3c885: 0x6cf8b620, 0x3c886: 0x6cf8b820, 0x3c887: 0x6cf8ba20, + 0x3c888: 0x6d27d220, 0x3c889: 0x6d27d420, 0x3c88a: 0x6d27d620, 0x3c88b: 0x6d27d820, + 0x3c88c: 0x6d27da20, 0x3c88d: 0x6d27dc20, 0x3c88e: 0x6d27de20, 0x3c88f: 0x6d27e020, + 0x3c890: 0x6d27e220, 0x3c891: 0x6d27e420, 0x3c892: 0x6d27e620, 0x3c893: 0x6d27e820, + 0x3c894: 0x6d27ea20, 0x3c895: 0x6d27ec20, 0x3c896: 0x6d27ee20, 0x3c897: 0x6d27f020, + 0x3c898: 0x6d27f220, 0x3c899: 0x6d27f420, 0x3c89a: 0x6d27f620, 0x3c89b: 0x6d27f820, + 0x3c89c: 0x6d27fa20, 0x3c89d: 0x6d552c20, 0x3c89e: 0x6d552e20, 0x3c89f: 0x6d553020, + 0x3c8a0: 0x6d553220, 0x3c8a1: 0x6d553420, 0x3c8a2: 0x6d553620, 0x3c8a3: 0x6d553820, + 0x3c8a4: 0x6d553a20, 0x3c8a5: 0x6d553c20, 0x3c8a6: 0x6d553e20, 0x3c8a7: 0x6d554020, + 0x3c8a8: 0x6d554220, 0x3c8a9: 0x6d554420, 0x3c8aa: 0x6d554620, 0x3c8ab: 0x6d554820, + 0x3c8ac: 0x6d554a20, 0x3c8ad: 0x6d80ae20, 0x3c8ae: 0x6d80b020, 0x3c8af: 0x6d80b220, + 0x3c8b0: 0x6d80b420, 0x3c8b1: 0x6d80b620, 0x3c8b2: 0x6d80b820, 0x3c8b3: 0x6d80ba20, + 0x3c8b4: 0x6d80bc20, 0x3c8b5: 0x6d80be20, 0x3c8b6: 0x6d80c020, 0x3c8b7: 0x6d80c220, + 0x3c8b8: 0x6d80c420, 0x3c8b9: 0x6d80c620, 0x3c8ba: 0x6d80c820, 0x3c8bb: 0x6d80ca20, + 0x3c8bc: 0x6d80cc20, 0x3c8bd: 0x6da6d820, 0x3c8be: 0x6da6da20, 0x3c8bf: 0x6da6dc20, + // Block 0xf23, offset 0x3c8c0 + 0x3c8c0: 0x6da6de20, 0x3c8c1: 0x6da6e020, 0x3c8c2: 0x6da6e220, 0x3c8c3: 0x6da6e420, + 0x3c8c4: 0x6da6e620, 0x3c8c5: 0x6da6e820, 0x3c8c6: 0x6da6ea20, 0x3c8c7: 0x6da6ec20, + 0x3c8c8: 0x6da6ee20, 0x3c8c9: 0x6dc83c20, 0x3c8ca: 0x6dc83e20, 0x3c8cb: 0x6dc84020, + 0x3c8cc: 0x6dc84220, 0x3c8cd: 0x6dc84420, 0x3c8ce: 0x6dc84620, 0x3c8cf: 0x6dc84820, + 0x3c8d0: 0x6de46c20, 0x3c8d1: 0x6de46e20, 0x3c8d2: 0x6de47020, 0x3c8d3: 0x6de47220, + 0x3c8d4: 0x6de47420, 0x3c8d5: 0x6de47620, 0x3c8d6: 0x6dfb8e20, 0x3c8d7: 0x6dfb9020, + 0x3c8d8: 0x6dfb9220, 0x3c8d9: 0x6dfb9420, 0x3c8da: 0x6dfb9620, 0x3c8db: 0x6e0ed020, + 0x3c8dc: 0x6e0ed220, 0x3c8dd: 0x6e0ed420, 0x3c8de: 0x6e0ed620, 0x3c8df: 0x6e1e0620, + 0x3c8e0: 0x6e1e0820, 0x3c8e1: 0x6e1e0a20, 0x3c8e2: 0x6e297220, 0x3c8e3: 0x6e297420, + 0x3c8e4: 0x6e328c20, 0x3c8e5: 0x6e328e20, 0x3c8e6: 0x6e38d220, 0x3c8e7: 0x6e405420, + 0x3c8e8: 0x6e3d4420, 0x3c8e9: 0x6c379220, 0x3c8ea: 0x6c52f420, 0x3c8eb: 0x6c52f620, + 0x3c8ec: 0x6c9dd620, 0x3c8ed: 0x6c9dd820, 0x3c8ee: 0x6ccad020, 0x3c8ef: 0x6cf90220, + 0x3c8f0: 0x6cf90420, 0x3c8f1: 0x6d283e20, 0x3c8f2: 0x6d558220, 0x3c8f3: 0x6dfba220, + 0x3c8f4: 0x6e329220, 0x3c8f5: 0x6c37c820, 0x3c8f6: 0x6c75a420, 0x3c8f7: 0x6c9de620, + 0x3c8f8: 0x6ccaf620, 0x3c8f9: 0x6cf91c20, 0x3c8fa: 0x6cf91e20, 0x3c8fb: 0x6d284e20, + 0x3c8fc: 0x6d559820, 0x3c8fd: 0x6d80fe20, 0x3c8fe: 0x6d810020, 0x3c8ff: 0x6da71c20, + // Block 0xf24, offset 0x3c900 + 0x3c900: 0x6c534420, 0x3c901: 0x6c534620, 0x3c902: 0x6c75d820, 0x3c903: 0x6c75da20, + 0x3c904: 0x6c9e1e20, 0x3c905: 0x6ccb4820, 0x3c906: 0x6d287420, 0x3c907: 0x6da73420, + 0x3c908: 0x6c75e820, 0x3c909: 0x6c75ea20, 0x3c90a: 0x6c9b1220, 0x3c90b: 0x6c9e4620, + 0x3c90c: 0x6ccb6220, 0x3c90d: 0x6ccb6420, 0x3c90e: 0x6ccb6620, 0x3c90f: 0x6cf97a20, + 0x3c910: 0x6d55da20, 0x3c911: 0x6da74020, 0x3c912: 0x6da74220, 0x3c913: 0x6e38de20, + 0x3c914: 0x6d289220, 0x3c915: 0x6d289c20, 0x3c916: 0x6c098220, 0x3c917: 0x6c384c20, + 0x3c918: 0x6c384e20, 0x3c919: 0x6c53ac20, 0x3c91a: 0x6c53ae20, 0x3c91b: 0x6c763420, + 0x3c91c: 0x6c763620, 0x3c91d: 0x6ccbc220, 0x3c91e: 0x6ccbc420, 0x3c91f: 0x6cf9d420, + 0x3c920: 0x6d28e820, 0x3c921: 0x6d561020, 0x3c922: 0x6dc8ba20, 0x3c923: 0x6c386420, + 0x3c924: 0x6c53cc20, 0x3c925: 0x6c9ea820, 0x3c926: 0x6cf9e020, 0x3c927: 0x6d28f220, + 0x3c928: 0x6c09c820, 0x3c929: 0x6c134c20, 0x3c92a: 0x6c134e20, 0x3c92b: 0x6c135020, + 0x3c92c: 0x6c135220, 0x3c92d: 0x6c238220, 0x3c92e: 0x6c238420, 0x3c92f: 0x6c238620, + 0x3c930: 0x6c238820, 0x3c931: 0x6c398420, 0x3c932: 0x6c398620, 0x3c933: 0x6c398820, + 0x3c934: 0x6c398a20, 0x3c935: 0x6c398c20, 0x3c936: 0x6c398e20, 0x3c937: 0x6c550a20, + 0x3c938: 0x6c550c20, 0x3c939: 0x6c550e20, 0x3c93a: 0x6c551020, 0x3c93b: 0x6c551220, + 0x3c93c: 0x6c551420, 0x3c93d: 0x6c551620, 0x3c93e: 0x6c77cc20, 0x3c93f: 0x6c77ce20, + // Block 0xf25, offset 0x3c940 + 0x3c940: 0x6c77d020, 0x3c941: 0x6c77d220, 0x3c942: 0x6c77d420, 0x3c943: 0x6c77d620, + 0x3c944: 0x6c77d820, 0x3c945: 0x6c77da20, 0x3c946: 0x6c77dc20, 0x3c947: 0x6c77de20, + 0x3c948: 0x6c77e020, 0x3c949: 0x6c77e220, 0x3c94a: 0x6c77e420, 0x3c94b: 0x6c77e620, + 0x3c94c: 0x6ca0c620, 0x3c94d: 0x6ca0c820, 0x3c94e: 0x6ca0ca20, 0x3c94f: 0x6ca0cc20, + 0x3c950: 0x6ca0ce20, 0x3c951: 0x6ca0d020, 0x3c952: 0x6ca0d220, 0x3c953: 0x6ca0d420, + 0x3c954: 0x6ca0d620, 0x3c955: 0x6ca0d820, 0x3c956: 0x6ca0da20, 0x3c957: 0x6ccdb620, + 0x3c958: 0x6ccdb820, 0x3c959: 0x6ccdba20, 0x3c95a: 0x6ccdbc20, 0x3c95b: 0x6ccdbe20, + 0x3c95c: 0x6ccdc020, 0x3c95d: 0x6ccdc220, 0x3c95e: 0x6ccdc420, 0x3c95f: 0x6ccdc620, + 0x3c960: 0x6ccdc820, 0x3c961: 0x6ccdca20, 0x3c962: 0x6ccdcc20, 0x3c963: 0x6ccdce20, + 0x3c964: 0x6ccdd020, 0x3c965: 0x6ccdd220, 0x3c966: 0x6ccdd420, 0x3c967: 0x6ccdd620, + 0x3c968: 0x6ccdd820, 0x3c969: 0x6ccdda20, 0x3c96a: 0x6cfba620, 0x3c96b: 0x6cfba820, + 0x3c96c: 0x6cfbaa20, 0x3c96d: 0x6cfbac20, 0x3c96e: 0x6cfbae20, 0x3c96f: 0x6cfbb020, + 0x3c970: 0x6cfbb220, 0x3c971: 0x6cfbb420, 0x3c972: 0x6cfbb620, 0x3c973: 0x6cfbb820, + 0x3c974: 0x6cfbba20, 0x3c975: 0x6cfbbc20, 0x3c976: 0x6cfbbe20, 0x3c977: 0x6cfbc020, + 0x3c978: 0x6cfbc220, 0x3c979: 0x6cfbc420, 0x3c97a: 0x6cfbc620, 0x3c97b: 0x6cfbc820, + 0x3c97c: 0x6cfbca20, 0x3c97d: 0x6cfbcc20, 0x3c97e: 0x6cfbce20, 0x3c97f: 0x6d2ab220, + // Block 0xf26, offset 0x3c980 + 0x3c980: 0x6d2ab420, 0x3c981: 0x6d2ab620, 0x3c982: 0x6d2ab820, 0x3c983: 0x6d2aba20, + 0x3c984: 0x6d2abc20, 0x3c985: 0x6d2abe20, 0x3c986: 0x6d2ac020, 0x3c987: 0x6d2ac220, + 0x3c988: 0x6d2ac420, 0x3c989: 0x6d2ac620, 0x3c98a: 0x6d2ac820, 0x3c98b: 0x6d57e420, + 0x3c98c: 0x6d57e620, 0x3c98d: 0x6d57e820, 0x3c98e: 0x6d57ea20, 0x3c98f: 0x6d57ec20, + 0x3c990: 0x6d57ee20, 0x3c991: 0x6d57f020, 0x3c992: 0x6d57f220, 0x3c993: 0x6d57f420, + 0x3c994: 0x6d57f620, 0x3c995: 0x6d57f820, 0x3c996: 0x6d57fa20, 0x3c997: 0x6d57fc20, + 0x3c998: 0x6d57fe20, 0x3c999: 0x6d580020, 0x3c99a: 0x6d580220, 0x3c99b: 0x6d580420, + 0x3c99c: 0x6d580620, 0x3c99d: 0x6d82e420, 0x3c99e: 0x6d82e620, 0x3c99f: 0x6d82e820, + 0x3c9a0: 0x6d82ea20, 0x3c9a1: 0x6d82ec20, 0x3c9a2: 0x6d82ee20, 0x3c9a3: 0x6d82f020, + 0x3c9a4: 0x6d82f220, 0x3c9a5: 0x6d82f420, 0x3c9a6: 0x6d82f620, 0x3c9a7: 0x6d82f820, + 0x3c9a8: 0x6da85a20, 0x3c9a9: 0x6da85c20, 0x3c9aa: 0x6da85e20, 0x3c9ab: 0x6da86020, + 0x3c9ac: 0x6da86220, 0x3c9ad: 0x6da86420, 0x3c9ae: 0x6da86620, 0x3c9af: 0x6da86820, + 0x3c9b0: 0x6da86a20, 0x3c9b1: 0x6da86c20, 0x3c9b2: 0x6da86e20, 0x3c9b3: 0x6dc9aa20, + 0x3c9b4: 0x6dc9ac20, 0x3c9b5: 0x6dc9ae20, 0x3c9b6: 0x6dc9b020, 0x3c9b7: 0x6dc9b220, + 0x3c9b8: 0x6dc9b420, 0x3c9b9: 0x6dc9b620, 0x3c9ba: 0x6de56220, 0x3c9bb: 0x6de56420, + 0x3c9bc: 0x6de56620, 0x3c9bd: 0x6de56820, 0x3c9be: 0x6de56a20, 0x3c9bf: 0x6de56c20, + // Block 0xf27, offset 0x3c9c0 + 0x3c9c0: 0x6dfc4220, 0x3c9c1: 0x6dfc4420, 0x3c9c2: 0x6dfc4620, 0x3c9c3: 0x6e0f7220, + 0x3c9c4: 0x6e0f7420, 0x3c9c5: 0x6e0f7620, 0x3c9c6: 0x6e0f7820, 0x3c9c7: 0x6e0f7a20, + 0x3c9c8: 0x6e1e6a20, 0x3c9c9: 0x6e1e6c20, 0x3c9ca: 0x6e29d220, 0x3c9cb: 0x6e29d420, + 0x3c9cc: 0x6e32be20, 0x3c9cd: 0x6c09ce20, 0x3c9ce: 0x6c23ca20, 0x3c9cf: 0x6c23cc20, + 0x3c9d0: 0x6c23ce20, 0x3c9d1: 0x6c3a1620, 0x3c9d2: 0x6c3a1820, 0x3c9d3: 0x6c3a1a20, + 0x3c9d4: 0x6c3a1c20, 0x3c9d5: 0x6c3a1e20, 0x3c9d6: 0x6c3a2020, 0x3c9d7: 0x6c3a2220, + 0x3c9d8: 0x6c55d820, 0x3c9d9: 0x6c55da20, 0x3c9da: 0x6c55dc20, 0x3c9db: 0x6c55de20, + 0x3c9dc: 0x6c55e020, 0x3c9dd: 0x6c55e220, 0x3c9de: 0x6c55e420, 0x3c9df: 0x6c55e620, + 0x3c9e0: 0x6c55e820, 0x3c9e1: 0x6c55ea20, 0x3c9e2: 0x6c55ec20, 0x3c9e3: 0x6c78b820, + 0x3c9e4: 0x6c78ba20, 0x3c9e5: 0x6c78bc20, 0x3c9e6: 0x6c78be20, 0x3c9e7: 0x6c78c020, + 0x3c9e8: 0x6c78c220, 0x3c9e9: 0x6c78c420, 0x3c9ea: 0x6c78c620, 0x3c9eb: 0x6ca1ba20, + 0x3c9ec: 0x6ca1bc20, 0x3c9ed: 0x6ca1be20, 0x3c9ee: 0x6ca1c020, 0x3c9ef: 0x6ca1c220, + 0x3c9f0: 0x6ca1c420, 0x3c9f1: 0x6ca1c620, 0x3c9f2: 0x6ca1c820, 0x3c9f3: 0x6ccee820, + 0x3c9f4: 0x6cceea20, 0x3c9f5: 0x6cceec20, 0x3c9f6: 0x6cceee20, 0x3c9f7: 0x6ccef020, + 0x3c9f8: 0x6ccef220, 0x3c9f9: 0x6ccef420, 0x3c9fa: 0x6ccef620, 0x3c9fb: 0x6ccef820, + 0x3c9fc: 0x6ccefa20, 0x3c9fd: 0x6ccefc20, 0x3c9fe: 0x6ccefe20, 0x3c9ff: 0x6ccf0020, + // Block 0xf28, offset 0x3ca00 + 0x3ca00: 0x6ccf0220, 0x3ca01: 0x6ccf0420, 0x3ca02: 0x6ccf0620, 0x3ca03: 0x6ccf0820, + 0x3ca04: 0x6cfd1220, 0x3ca05: 0x6cfd1420, 0x3ca06: 0x6cfd1620, 0x3ca07: 0x6cfd1820, + 0x3ca08: 0x6cfd1a20, 0x3ca09: 0x6cfd1c20, 0x3ca0a: 0x6cfd1e20, 0x3ca0b: 0x6cfd2020, + 0x3ca0c: 0x6cfd2220, 0x3ca0d: 0x6cfd2420, 0x3ca0e: 0x6cfd2620, 0x3ca0f: 0x6cfd2820, + 0x3ca10: 0x6cfd2a20, 0x3ca11: 0x6cfd2c20, 0x3ca12: 0x6d2bba20, 0x3ca13: 0x6d2bbc20, + 0x3ca14: 0x6d2bbe20, 0x3ca15: 0x6d2bc020, 0x3ca16: 0x6d2bc220, 0x3ca17: 0x6d2bc420, + 0x3ca18: 0x6d2bc620, 0x3ca19: 0x6d2bc820, 0x3ca1a: 0x6d2bca20, 0x3ca1b: 0x6d2bcc20, + 0x3ca1c: 0x6d2bce20, 0x3ca1d: 0x6d2bd020, 0x3ca1e: 0x6d2bd220, 0x3ca1f: 0x6d2bd420, + 0x3ca20: 0x6d2bd620, 0x3ca21: 0x6d58f020, 0x3ca22: 0x6d58f220, 0x3ca23: 0x6d58f420, + 0x3ca24: 0x6d58f620, 0x3ca25: 0x6d58f820, 0x3ca26: 0x6d58fa20, 0x3ca27: 0x6d58fc20, + 0x3ca28: 0x6d58fe20, 0x3ca29: 0x6d590020, 0x3ca2a: 0x6d841620, 0x3ca2b: 0x6d841820, + 0x3ca2c: 0x6d841a20, 0x3ca2d: 0x6d841c20, 0x3ca2e: 0x6d841e20, 0x3ca2f: 0x6d842020, + 0x3ca30: 0x6d842220, 0x3ca31: 0x6d842420, 0x3ca32: 0x6d842620, 0x3ca33: 0x6d842820, + 0x3ca34: 0x6da90c20, 0x3ca35: 0x6da90e20, 0x3ca36: 0x6da91020, 0x3ca37: 0x6da91220, + 0x3ca38: 0x6da91420, 0x3ca39: 0x6da91620, 0x3ca3a: 0x6da91820, 0x3ca3b: 0x6da91a20, + 0x3ca3c: 0x6dca3020, 0x3ca3d: 0x6dca3220, 0x3ca3e: 0x6dca3420, 0x3ca3f: 0x6dca3620, + // Block 0xf29, offset 0x3ca40 + 0x3ca40: 0x6dca3820, 0x3ca41: 0x6de5d020, 0x3ca42: 0x6de5d220, 0x3ca43: 0x6dfcc420, + 0x3ca44: 0x6dfcc620, 0x3ca45: 0x6dfcc820, 0x3ca46: 0x6e1e9420, 0x3ca47: 0x6e1e9620, + 0x3ca48: 0x6e29fc20, 0x3ca49: 0x6e32cc20, 0x3ca4a: 0x6e390620, 0x3ca4b: 0x6e390820, + 0x3ca4c: 0x6e407420, 0x3ca4d: 0x6c23d820, 0x3ca4e: 0x6c561220, 0x3ca4f: 0x6ca1d820, + 0x3ca50: 0x6ccf1a20, 0x3ca51: 0x6ccf1c20, 0x3ca52: 0x6ccf1e20, 0x3ca53: 0x6ccf2020, + 0x3ca54: 0x6cfd3a20, 0x3ca55: 0x6cfd3c20, 0x3ca56: 0x6d591420, 0x3ca57: 0x6d591620, + 0x3ca58: 0x6da92c20, 0x3ca59: 0x6da92e20, 0x3ca5a: 0x6e470020, 0x3ca5b: 0x6c78dc20, + 0x3ca5c: 0x6ca1de20, 0x3ca5d: 0x6c3a4420, 0x3ca5e: 0x6ca1f620, 0x3ca5f: 0x6ccf3a20, + 0x3ca60: 0x6d592620, 0x3ca61: 0x6dca4220, 0x3ca62: 0x6c790020, 0x3ca63: 0x6ca20620, + 0x3ca64: 0x6ca20820, 0x3ca65: 0x6ccf6420, 0x3ca66: 0x6d845020, 0x3ca67: 0x6c3a6020, + 0x3ca68: 0x6ccf7020, 0x3ca69: 0x6c23fe20, 0x3ca6a: 0x6c569020, 0x3ca6b: 0x6c569220, + 0x3ca6c: 0x6c792e20, 0x3ca6d: 0x6c793020, 0x3ca6e: 0x6c793220, 0x3ca6f: 0x6ccfca20, + 0x3ca70: 0x6cfdbc20, 0x3ca71: 0x6d2c6220, 0x3ca72: 0x6d2c6420, 0x3ca73: 0x6d2c6620, + 0x3ca74: 0x6d598420, 0x3ca75: 0x6d847c20, 0x3ca76: 0x6e0fc620, 0x3ca77: 0x6c246a20, + 0x3ca78: 0x6c3b3420, 0x3ca79: 0x6ccfcc20, 0x3ca7a: 0x6c572220, 0x3ca7b: 0x6c572420, + 0x3ca7c: 0x6c79b620, 0x3ca7d: 0x6c79b820, 0x3ca7e: 0x6ca2cc20, 0x3ca7f: 0x6ca2ce20, + // Block 0xf2a, offset 0x3ca80 + 0x3ca80: 0x6ca2d020, 0x3ca81: 0x6ca2d220, 0x3ca82: 0x6cd06c20, 0x3ca83: 0x6cd06e20, + 0x3ca84: 0x6cd07020, 0x3ca85: 0x6cd07220, 0x3ca86: 0x6cfe4620, 0x3ca87: 0x6cfe4820, + 0x3ca88: 0x6d2cde20, 0x3ca89: 0x6d5a0420, 0x3ca8a: 0x6da99420, 0x3ca8b: 0x6dca8220, + 0x3ca8c: 0x6de61a20, 0x3ca8d: 0x6c13cc20, 0x3ca8e: 0x6c3b9c20, 0x3ca8f: 0x6c3b9e20, + 0x3ca90: 0x6c3ba020, 0x3ca91: 0x6c3ba220, 0x3ca92: 0x6c3ba420, 0x3ca93: 0x6c3ba620, + 0x3ca94: 0x6c3ba820, 0x3ca95: 0x6c57c220, 0x3ca96: 0x6c57c420, 0x3ca97: 0x6c7a5e20, + 0x3ca98: 0x6c7a6020, 0x3ca99: 0x6c7a6220, 0x3ca9a: 0x6c7a6420, 0x3ca9b: 0x6c7a6620, + 0x3ca9c: 0x6c7a6820, 0x3ca9d: 0x6c7a6a20, 0x3ca9e: 0x6c7a6c20, 0x3ca9f: 0x6c7a6e20, + 0x3caa0: 0x6ca37020, 0x3caa1: 0x6ca37220, 0x3caa2: 0x6ca37420, 0x3caa3: 0x6ca37620, + 0x3caa4: 0x6ca37820, 0x3caa5: 0x6ca37a20, 0x3caa6: 0x6cd14420, 0x3caa7: 0x6cd14620, + 0x3caa8: 0x6cd14820, 0x3caa9: 0x6cd14a20, 0x3caaa: 0x6cd14c20, 0x3caab: 0x6cd14e20, + 0x3caac: 0x6cd15020, 0x3caad: 0x6cd15220, 0x3caae: 0x6cd15420, 0x3caaf: 0x6cd15620, + 0x3cab0: 0x6cd15820, 0x3cab1: 0x6cd15a20, 0x3cab2: 0x6cd15c20, 0x3cab3: 0x6cff2020, + 0x3cab4: 0x6cff2220, 0x3cab5: 0x6cff2420, 0x3cab6: 0x6cff2620, 0x3cab7: 0x6cff2820, + 0x3cab8: 0x6cff2a20, 0x3cab9: 0x6cff2c20, 0x3caba: 0x6cff2e20, 0x3cabb: 0x6cff3020, + 0x3cabc: 0x6cff3220, 0x3cabd: 0x6cff3420, 0x3cabe: 0x6cff3620, 0x3cabf: 0x6cff3820, + // Block 0xf2b, offset 0x3cac0 + 0x3cac0: 0x6cff3a20, 0x3cac1: 0x6cff3c20, 0x3cac2: 0x6cff3e20, 0x3cac3: 0x6d2d6a20, + 0x3cac4: 0x6d2d6c20, 0x3cac5: 0x6d2d6e20, 0x3cac6: 0x6d2d7020, 0x3cac7: 0x6d2d7220, + 0x3cac8: 0x6d2d7420, 0x3cac9: 0x6d2d7620, 0x3caca: 0x6d2d7820, 0x3cacb: 0x6d2d7a20, + 0x3cacc: 0x6d2d7c20, 0x3cacd: 0x6d2d7e20, 0x3cace: 0x6d2d8020, 0x3cacf: 0x6d2d8220, + 0x3cad0: 0x6d5aa220, 0x3cad1: 0x6d5aa420, 0x3cad2: 0x6d5aa620, 0x3cad3: 0x6d5aa820, + 0x3cad4: 0x6d5aaa20, 0x3cad5: 0x6d5aac20, 0x3cad6: 0x6d5aae20, 0x3cad7: 0x6d855420, + 0x3cad8: 0x6d855620, 0x3cad9: 0x6d855820, 0x3cada: 0x6d855a20, 0x3cadb: 0x6d855c20, + 0x3cadc: 0x6d855e20, 0x3cadd: 0x6d856020, 0x3cade: 0x6d856220, 0x3cadf: 0x6d856420, + 0x3cae0: 0x6d856620, 0x3cae1: 0x6daa0420, 0x3cae2: 0x6daa0620, 0x3cae3: 0x6daa0820, + 0x3cae4: 0x6daa0a20, 0x3cae5: 0x6daa0c20, 0x3cae6: 0x6daa0e20, 0x3cae7: 0x6dcade20, + 0x3cae8: 0x6dcae020, 0x3cae9: 0x6de66220, 0x3caea: 0x6de66420, 0x3caeb: 0x6de66620, + 0x3caec: 0x6dfd2420, 0x3caed: 0x6dfd2620, 0x3caee: 0x6dfd2820, 0x3caef: 0x6dfd2a20, + 0x3caf0: 0x6e0ff220, 0x3caf1: 0x6e2a2c20, 0x3caf2: 0x6e32e220, 0x3caf3: 0x6c3bb020, + 0x3caf4: 0x6c57d420, 0x3caf5: 0x6cff5020, 0x3caf6: 0x6c3bc220, 0x3caf7: 0x6c57fa20, + 0x3caf8: 0x6c57fc20, 0x3caf9: 0x6c7aac20, 0x3cafa: 0x6cff8420, 0x3cafb: 0x6cff8620, + 0x3cafc: 0x6d2dd020, 0x3cafd: 0x6d5aec20, 0x3cafe: 0x6d5aee20, 0x3caff: 0x6e1ed420, + // Block 0xf2c, offset 0x3cb00 + 0x3cb00: 0x6cd1a020, 0x3cb01: 0x6c24a820, 0x3cb02: 0x6ca3ce20, 0x3cb03: 0x6cff9c20, + 0x3cb04: 0x6cff9e20, 0x3cb05: 0x6cffa020, 0x3cb06: 0x6c13d420, 0x3cb07: 0x6c24d220, + 0x3cb08: 0x6c3c1220, 0x3cb09: 0x6c588620, 0x3cb0a: 0x6c588820, 0x3cb0b: 0x6c588a20, + 0x3cb0c: 0x6c588c20, 0x3cb0d: 0x6c7b0620, 0x3cb0e: 0x6c7b0820, 0x3cb0f: 0x6c7b0a20, + 0x3cb10: 0x6c7b0c20, 0x3cb11: 0x6ca41420, 0x3cb12: 0x6ca41620, 0x3cb13: 0x6cd1fc20, + 0x3cb14: 0x6cd1fe20, 0x3cb15: 0x6cd20020, 0x3cb16: 0x6cd20220, 0x3cb17: 0x6cd20420, + 0x3cb18: 0x6cffea20, 0x3cb19: 0x6cffec20, 0x3cb1a: 0x6cffee20, 0x3cb1b: 0x6d2e0020, + 0x3cb1c: 0x6d2e0220, 0x3cb1d: 0x6d5b2a20, 0x3cb1e: 0x6d5b2c20, 0x3cb1f: 0x6d85b820, + 0x3cb20: 0x6d85ba20, 0x3cb21: 0x6d85bc20, 0x3cb22: 0x6daa6c20, 0x3cb23: 0x6dcb1c20, + 0x3cb24: 0x6dfd4620, 0x3cb25: 0x6e101a20, 0x3cb26: 0x6e101c20, 0x3cb27: 0x6daa6e20, + 0x3cb28: 0x6c58fa20, 0x3cb29: 0x6c58fc20, 0x3cb2a: 0x6c58fe20, 0x3cb2b: 0x6c590020, + 0x3cb2c: 0x6c7b9c20, 0x3cb2d: 0x6c7b9e20, 0x3cb2e: 0x6c7ba020, 0x3cb2f: 0x6ca48420, + 0x3cb30: 0x6cd2b420, 0x3cb31: 0x6cd2b620, 0x3cb32: 0x6d00ae20, 0x3cb33: 0x6d2ea020, + 0x3cb34: 0x6d2ea220, 0x3cb35: 0x6d2ea420, 0x3cb36: 0x6d5bd220, 0x3cb37: 0x6d5bd420, + 0x3cb38: 0x6daafc20, 0x3cb39: 0x6daafe20, 0x3cb3a: 0x6de6da20, 0x3cb3b: 0x6c593620, + 0x3cb3c: 0x6c593820, 0x3cb3d: 0x6c7bd020, 0x3cb3e: 0x6cd2ea20, 0x3cb3f: 0x6cd2ec20, + // Block 0xf2d, offset 0x3cb40 + 0x3cb40: 0x6d00e020, 0x3cb41: 0x6d00e220, 0x3cb42: 0x6d2ec420, 0x3cb43: 0x6d2ec620, + 0x3cb44: 0x6d5bf620, 0x3cb45: 0x6e104e20, 0x3cb46: 0x6c3c6420, 0x3cb47: 0x6c594c20, + 0x3cb48: 0x6d2eee20, 0x3cb49: 0x6d2ef020, 0x3cb4a: 0x6c596e20, 0x3cb4b: 0x6c597020, + 0x3cb4c: 0x6c7c2a20, 0x3cb4d: 0x6c7c2c20, 0x3cb4e: 0x6ca4ec20, 0x3cb4f: 0x6cd32820, + 0x3cb50: 0x6cd32a20, 0x3cb51: 0x6d012a20, 0x3cb52: 0x6d012c20, 0x3cb53: 0x6d2f0420, + 0x3cb54: 0x6d2f0620, 0x3cb55: 0x6d5c2620, 0x3cb56: 0x6d86ac20, 0x3cb57: 0x6dab4a20, + 0x3cb58: 0x6dab4c20, 0x3cb59: 0x6dcbbc20, 0x3cb5a: 0x6de70a20, 0x3cb5b: 0x6e105a20, + 0x3cb5c: 0x6e1f1420, 0x3cb5d: 0x6e331220, 0x3cb5e: 0x6e444020, 0x3cb5f: 0x6c3cae20, + 0x3cb60: 0x6c3cb020, 0x3cb61: 0x6c5a1420, 0x3cb62: 0x6c5a1620, 0x3cb63: 0x6c5a1820, + 0x3cb64: 0x6c7ccc20, 0x3cb65: 0x6c7cce20, 0x3cb66: 0x6c7cd020, 0x3cb67: 0x6c7cd220, + 0x3cb68: 0x6ca58a20, 0x3cb69: 0x6ca58c20, 0x3cb6a: 0x6ca58e20, 0x3cb6b: 0x6cd3f020, + 0x3cb6c: 0x6cd3f220, 0x3cb6d: 0x6d01ee20, 0x3cb6e: 0x6d01f020, 0x3cb6f: 0x6d01f220, + 0x3cb70: 0x6d01f420, 0x3cb71: 0x6d2fc620, 0x3cb72: 0x6d2fc820, 0x3cb73: 0x6d2fca20, + 0x3cb74: 0x6d2fcc20, 0x3cb75: 0x6d5cca20, 0x3cb76: 0x6d5ccc20, 0x3cb77: 0x6d5cce20, + 0x3cb78: 0x6d5cd020, 0x3cb79: 0x6d874c20, 0x3cb7a: 0x6d874e20, 0x3cb7b: 0x6d875020, + 0x3cb7c: 0x6dabe020, 0x3cb7d: 0x6dabe220, 0x3cb7e: 0x6dabe420, 0x3cb7f: 0x6dabe620, + // Block 0xf2e, offset 0x3cb80 + 0x3cb80: 0x6dabe820, 0x3cb81: 0x6de75020, 0x3cb82: 0x6dfdde20, 0x3cb83: 0x6e108420, + 0x3cb84: 0x6e108620, 0x3cb85: 0x6e444420, 0x3cb86: 0x6c5a2220, 0x3cb87: 0x6cd40820, + 0x3cb88: 0x6c5a3820, 0x3cb89: 0x6c5a3a20, 0x3cb8a: 0x6ca5cc20, 0x3cb8b: 0x6d022e20, + 0x3cb8c: 0x6d2ffa20, 0x3cb8d: 0x6d5cf420, 0x3cb8e: 0x6d5cf620, 0x3cb8f: 0x6dfdea20, + 0x3cb90: 0x6e108a20, 0x3cb91: 0x6c5ab820, 0x3cb92: 0x6c5aba20, 0x3cb93: 0x6c5abc20, + 0x3cb94: 0x6c7db420, 0x3cb95: 0x6c7db620, 0x3cb96: 0x6c7db820, 0x3cb97: 0x6c7dba20, + 0x3cb98: 0x6c7dbc20, 0x3cb99: 0x6ca68020, 0x3cb9a: 0x6ca68220, 0x3cb9b: 0x6ca68420, + 0x3cb9c: 0x6ca68620, 0x3cb9d: 0x6ca68820, 0x3cb9e: 0x6cd4ac20, 0x3cb9f: 0x6cd4ae20, + 0x3cba0: 0x6cd4b020, 0x3cba1: 0x6cd4b220, 0x3cba2: 0x6cd4b420, 0x3cba3: 0x6cd4b620, + 0x3cba4: 0x6d02fc20, 0x3cba5: 0x6d02fe20, 0x3cba6: 0x6d030020, 0x3cba7: 0x6d030220, + 0x3cba8: 0x6d030420, 0x3cba9: 0x6d030620, 0x3cbaa: 0x6d30b020, 0x3cbab: 0x6d30b220, + 0x3cbac: 0x6d5d8220, 0x3cbad: 0x6d5d8420, 0x3cbae: 0x6d5d8620, 0x3cbaf: 0x6d87e820, + 0x3cbb0: 0x6d87ea20, 0x3cbb1: 0x6d87ec20, 0x3cbb2: 0x6d87ee20, 0x3cbb3: 0x6d87f020, + 0x3cbb4: 0x6d87f220, 0x3cbb5: 0x6dac9820, 0x3cbb6: 0x6dac9a20, 0x3cbb7: 0x6dac9c20, + 0x3cbb8: 0x6dcc9a20, 0x3cbb9: 0x6dcc9c20, 0x3cbba: 0x6dcc9e20, 0x3cbbb: 0x6de7a420, + 0x3cbbc: 0x6de7a620, 0x3cbbd: 0x6de7a820, 0x3cbbe: 0x6e10ba20, 0x3cbbf: 0x6e2a9e20, + // Block 0xf2f, offset 0x3cbc0 + 0x3cbc0: 0x6c256020, 0x3cbc1: 0x6c256220, 0x3cbc2: 0x6c3d2820, 0x3cbc3: 0x6c3d2a20, + 0x3cbc4: 0x6c5b2420, 0x3cbc5: 0x6c5b2620, 0x3cbc6: 0x6c5b2820, 0x3cbc7: 0x6c7e2420, + 0x3cbc8: 0x6c7e2620, 0x3cbc9: 0x6c7e2820, 0x3cbca: 0x6c7e2a20, 0x3cbcb: 0x6ca6e820, + 0x3cbcc: 0x6ca6ea20, 0x3cbcd: 0x6ca6ec20, 0x3cbce: 0x6ca6ee20, 0x3cbcf: 0x6ca6f020, + 0x3cbd0: 0x6cd51220, 0x3cbd1: 0x6cd51420, 0x3cbd2: 0x6cd51620, 0x3cbd3: 0x6cd51820, + 0x3cbd4: 0x6cd51a20, 0x3cbd5: 0x6cd51c20, 0x3cbd6: 0x6cd51e20, 0x3cbd7: 0x6cd52020, + 0x3cbd8: 0x6cd52220, 0x3cbd9: 0x6cd52420, 0x3cbda: 0x6d037220, 0x3cbdb: 0x6d037420, + 0x3cbdc: 0x6d310c20, 0x3cbdd: 0x6d310e20, 0x3cbde: 0x6d311020, 0x3cbdf: 0x6d311220, + 0x3cbe0: 0x6d5dcc20, 0x3cbe1: 0x6d5dce20, 0x3cbe2: 0x6dacc820, 0x3cbe3: 0x6dccbc20, + 0x3cbe4: 0x6e333820, 0x3cbe5: 0x6dccbe20, 0x3cbe6: 0x6c140a20, 0x3cbe7: 0x6c3d6620, + 0x3cbe8: 0x6c5b8e20, 0x3cbe9: 0x6c5b9020, 0x3cbea: 0x6c7e9e20, 0x3cbeb: 0x6c7ea020, + 0x3cbec: 0x6c7ea220, 0x3cbed: 0x6c7ea420, 0x3cbee: 0x6ca76e20, 0x3cbef: 0x6ca77020, + 0x3cbf0: 0x6ca77220, 0x3cbf1: 0x6ca77420, 0x3cbf2: 0x6cd59420, 0x3cbf3: 0x6cd59620, + 0x3cbf4: 0x6cd59820, 0x3cbf5: 0x6cd59a20, 0x3cbf6: 0x6cd59c20, 0x3cbf7: 0x6cd59e20, + 0x3cbf8: 0x6cd5a020, 0x3cbf9: 0x6d042220, 0x3cbfa: 0x6d042420, 0x3cbfb: 0x6d042620, + 0x3cbfc: 0x6d31b820, 0x3cbfd: 0x6d31ba20, 0x3cbfe: 0x6d31bc20, 0x3cbff: 0x6d31be20, + // Block 0xf30, offset 0x3cc00 + 0x3cc00: 0x6d31c020, 0x3cc01: 0x6d5e6220, 0x3cc02: 0x6d5e6420, 0x3cc03: 0x6d5e6620, + 0x3cc04: 0x6d5e6820, 0x3cc05: 0x6d88b820, 0x3cc06: 0x6dad4020, 0x3cc07: 0x6dcd1820, + 0x3cc08: 0x6dcd1a20, 0x3cc09: 0x6dfe8220, 0x3cc0a: 0x6c5bd020, 0x3cc0b: 0x6c7ef420, + 0x3cc0c: 0x6ca7c020, 0x3cc0d: 0x6ca7c220, 0x3cc0e: 0x6cd60420, 0x3cc0f: 0x6cd60620, + 0x3cc10: 0x6cd60820, 0x3cc11: 0x6d048020, 0x3cc12: 0x6d048220, 0x3cc13: 0x6d048420, + 0x3cc14: 0x6d320420, 0x3cc15: 0x6d320620, 0x3cc16: 0x6d5eb420, 0x3cc17: 0x6d891820, + 0x3cc18: 0x6d891a20, 0x3cc19: 0x6d891c20, 0x3cc1a: 0x6d891e20, 0x3cc1b: 0x6dad8620, + 0x3cc1c: 0x6dcd3620, 0x3cc1d: 0x6e2ac020, 0x3cc1e: 0x6c3d9820, 0x3cc1f: 0x6c5bf420, + 0x3cc20: 0x6c7f2e20, 0x3cc21: 0x6c7f3020, 0x3cc22: 0x6ca7e420, 0x3cc23: 0x6cd63220, + 0x3cc24: 0x6cd63420, 0x3cc25: 0x6d04b220, 0x3cc26: 0x6d04b420, 0x3cc27: 0x6d322a20, + 0x3cc28: 0x6d322c20, 0x3cc29: 0x6d5ec620, 0x3cc2a: 0x6d5ec820, 0x3cc2b: 0x6d5eca20, + 0x3cc2c: 0x6d892c20, 0x3cc2d: 0x6dada420, 0x3cc2e: 0x6de81020, 0x3cc2f: 0x6e1f8420, + 0x3cc30: 0x6c3da620, 0x3cc31: 0x6c5c2c20, 0x3cc32: 0x6c7f9c20, 0x3cc33: 0x6c7f9e20, + 0x3cc34: 0x6c7fa020, 0x3cc35: 0x6c7fa220, 0x3cc36: 0x6c7fa420, 0x3cc37: 0x6c7fa620, + 0x3cc38: 0x6ca88a20, 0x3cc39: 0x6ca88c20, 0x3cc3a: 0x6ca88e20, 0x3cc3b: 0x6ca89020, + 0x3cc3c: 0x6cd6da20, 0x3cc3d: 0x6cd6dc20, 0x3cc3e: 0x6d058c20, 0x3cc3f: 0x6d058e20, + // Block 0xf31, offset 0x3cc40 + 0x3cc40: 0x6d059020, 0x3cc41: 0x6d059220, 0x3cc42: 0x6d059420, 0x3cc43: 0x6d059620, + 0x3cc44: 0x6d332a20, 0x3cc45: 0x6d332c20, 0x3cc46: 0x6d332e20, 0x3cc47: 0x6d333020, + 0x3cc48: 0x6d333220, 0x3cc49: 0x6d333420, 0x3cc4a: 0x6d5fdc20, 0x3cc4b: 0x6d5fde20, + 0x3cc4c: 0x6d5fe020, 0x3cc4d: 0x6d5fe220, 0x3cc4e: 0x6d5fe420, 0x3cc4f: 0x6d5fe620, + 0x3cc50: 0x6d8a4020, 0x3cc51: 0x6d8a4220, 0x3cc52: 0x6d8a4420, 0x3cc53: 0x6d8a4620, + 0x3cc54: 0x6d8a4820, 0x3cc55: 0x6d8a4a20, 0x3cc56: 0x6d8a4c20, 0x3cc57: 0x6d8a4e20, + 0x3cc58: 0x6daeb420, 0x3cc59: 0x6daeb620, 0x3cc5a: 0x6daeb820, 0x3cc5b: 0x6daeba20, + 0x3cc5c: 0x6daebc20, 0x3cc5d: 0x6daebe20, 0x3cc5e: 0x6daec020, 0x3cc5f: 0x6daec220, + 0x3cc60: 0x6dce5a20, 0x3cc61: 0x6dce5c20, 0x3cc62: 0x6dce5e20, 0x3cc63: 0x6dce6020, + 0x3cc64: 0x6dce6220, 0x3cc65: 0x6de8be20, 0x3cc66: 0x6de8c020, 0x3cc67: 0x6dff1a20, + 0x3cc68: 0x6e118220, 0x3cc69: 0x6e118420, 0x3cc6a: 0x6e118620, 0x3cc6b: 0x6e118820, + 0x3cc6c: 0x6e1fe020, 0x3cc6d: 0x6e2b0220, 0x3cc6e: 0x6e337e20, 0x3cc6f: 0x6e398220, + 0x3cc70: 0x6e42de20, 0x3cc71: 0x6c3db620, 0x3cc72: 0x6c3db820, 0x3cc73: 0x6c5c5a20, + 0x3cc74: 0x6c5c5c20, 0x3cc75: 0x6c7fe820, 0x3cc76: 0x6c7fea20, 0x3cc77: 0x6c7fec20, + 0x3cc78: 0x6ca8e820, 0x3cc79: 0x6ca8ea20, 0x3cc7a: 0x6ca8ec20, 0x3cc7b: 0x6ca8ee20, + 0x3cc7c: 0x6ca8f020, 0x3cc7d: 0x6cd73a20, 0x3cc7e: 0x6cd73c20, 0x3cc7f: 0x6cd73e20, + // Block 0xf32, offset 0x3cc80 + 0x3cc80: 0x6cd74020, 0x3cc81: 0x6d060220, 0x3cc82: 0x6d33ac20, 0x3cc83: 0x6d33ae20, + 0x3cc84: 0x6d33b020, 0x3cc85: 0x6d33b220, 0x3cc86: 0x6d605e20, 0x3cc87: 0x6d606020, + 0x3cc88: 0x6d606220, 0x3cc89: 0x6d8aa420, 0x3cc8a: 0x6d8aa620, 0x3cc8b: 0x6d8aa820, + 0x3cc8c: 0x6d8aaa20, 0x3cc8d: 0x6daf1a20, 0x3cc8e: 0x6daf1c20, 0x3cc8f: 0x6dceba20, + 0x3cc90: 0x6dcebc20, 0x3cc91: 0x6dcebe20, 0x3cc92: 0x6de90420, 0x3cc93: 0x6de90620, + 0x3cc94: 0x6de90820, 0x3cc95: 0x6de90a20, 0x3cc96: 0x6dff3620, 0x3cc97: 0x6e1ffa20, + 0x3cc98: 0x6e1ffc20, 0x3cc99: 0x6e1ffe20, 0x3cc9a: 0x6c3dd220, 0x3cc9b: 0x6c3dd420, + 0x3cc9c: 0x6c5c9420, 0x3cc9d: 0x6c5c9620, 0x3cc9e: 0x6c809a20, 0x3cc9f: 0x6ca99820, + 0x3cca0: 0x6ca99a20, 0x3cca1: 0x6ca99c20, 0x3cca2: 0x6cd80620, 0x3cca3: 0x6cd80820, + 0x3cca4: 0x6cd80a20, 0x3cca5: 0x6d06c220, 0x3cca6: 0x6d06c420, 0x3cca7: 0x6d06c620, + 0x3cca8: 0x6d06c820, 0x3cca9: 0x6d06ca20, 0x3ccaa: 0x6d34b420, 0x3ccab: 0x6d34b620, + 0x3ccac: 0x6d34b820, 0x3ccad: 0x6d34ba20, 0x3ccae: 0x6d34bc20, 0x3ccaf: 0x6d34be20, + 0x3ccb0: 0x6d34c020, 0x3ccb1: 0x6d34c220, 0x3ccb2: 0x6d34c420, 0x3ccb3: 0x6d617020, + 0x3ccb4: 0x6d617220, 0x3ccb5: 0x6d617420, 0x3ccb6: 0x6d617620, 0x3ccb7: 0x6d617820, + 0x3ccb8: 0x6d8b8a20, 0x3ccb9: 0x6d8b8c20, 0x3ccba: 0x6d8b8e20, 0x3ccbb: 0x6d8b9020, + 0x3ccbc: 0x6d8b9220, 0x3ccbd: 0x6dafe220, 0x3ccbe: 0x6dafe420, 0x3ccbf: 0x6dafe620, + // Block 0xf33, offset 0x3ccc0 + 0x3ccc0: 0x6dafe820, 0x3ccc1: 0x6dcf7220, 0x3ccc2: 0x6dcf7420, 0x3ccc3: 0x6dcf7620, + 0x3ccc4: 0x6dcf7820, 0x3ccc5: 0x6de99220, 0x3ccc6: 0x6de99420, 0x3ccc7: 0x6de99620, + 0x3ccc8: 0x6de99820, 0x3ccc9: 0x6de99a20, 0x3ccca: 0x6de99c20, 0x3cccb: 0x6de99e20, + 0x3cccc: 0x6dff8a20, 0x3cccd: 0x6dff8c20, 0x3ccce: 0x6dff8e20, 0x3cccf: 0x6e11fa20, + 0x3ccd0: 0x6e11fc20, 0x3ccd1: 0x6e11fe20, 0x3ccd2: 0x6e203420, 0x3ccd3: 0x6e203620, + 0x3ccd4: 0x6e203820, 0x3ccd5: 0x6e2b3020, 0x3ccd6: 0x6e39a620, 0x3ccd7: 0x6e3dd220, + 0x3ccd8: 0x6e40b420, 0x3ccd9: 0x6c050220, 0x3ccda: 0x6c25c420, 0x3ccdb: 0x6c25c620, + 0x3ccdc: 0x6c25c820, 0x3ccdd: 0x6c25ca20, 0x3ccde: 0x6c3dfc20, 0x3ccdf: 0x6c3dfe20, + 0x3cce0: 0x6c5cba20, 0x3cce1: 0x6c5cbc20, 0x3cce2: 0x6c5cbe20, 0x3cce3: 0x6c5cc020, + 0x3cce4: 0x6c80b620, 0x3cce5: 0x6c80b820, 0x3cce6: 0x6c80ba20, 0x3cce7: 0x6c80bc20, + 0x3cce8: 0x6c80be20, 0x3cce9: 0x6c80c020, 0x3ccea: 0x6ca9dc20, 0x3cceb: 0x6ca9de20, + 0x3ccec: 0x6cd84a20, 0x3cced: 0x6cd84c20, 0x3ccee: 0x6cd84e20, 0x3ccef: 0x6d06ee20, + 0x3ccf0: 0x6d06f020, 0x3ccf1: 0x6d34d820, 0x3ccf2: 0x6d34da20, 0x3ccf3: 0x6d34dc20, + 0x3ccf4: 0x6d34de20, 0x3ccf5: 0x6d618e20, 0x3ccf6: 0x6d619020, 0x3ccf7: 0x6d8ba420, + 0x3ccf8: 0x6daff020, 0x3ccf9: 0x6e120020, 0x3ccfa: 0x6d06fa20, 0x3ccfb: 0x6d34fa20, + 0x3ccfc: 0x6d61a020, 0x3ccfd: 0x6d61a220, 0x3ccfe: 0x6d8bb820, 0x3ccff: 0x6de9b220, + // Block 0xf34, offset 0x3cd00 + 0x3cd00: 0x6c3e1e20, 0x3cd01: 0x6c5cf420, 0x3cd02: 0x6c812020, 0x3cd03: 0x6caa2420, + 0x3cd04: 0x6caa2620, 0x3cd05: 0x6caa2820, 0x3cd06: 0x6d074220, 0x3cd07: 0x6d074420, + 0x3cd08: 0x6d352c20, 0x3cd09: 0x6d61c820, 0x3cd0a: 0x6d8bf020, 0x3cd0b: 0x6dcfa620, + 0x3cd0c: 0x6de9d420, 0x3cd0d: 0x6e120e20, 0x3cd0e: 0x6c3e2c20, 0x3cd0f: 0x6caa6620, + 0x3cd10: 0x6caa6820, 0x3cd11: 0x6caa6a20, 0x3cd12: 0x6caa6c20, 0x3cd13: 0x6cd8a620, + 0x3cd14: 0x6cd8a820, 0x3cd15: 0x6d077a20, 0x3cd16: 0x6d61f020, 0x3cd17: 0x6d61f220, + 0x3cd18: 0x6d61f420, 0x3cd19: 0x6d8c0a20, 0x3cd1a: 0x6db04a20, 0x3cd1b: 0x6db04c20, + 0x3cd1c: 0x6db04e20, 0x3cd1d: 0x6dcfd420, 0x3cd1e: 0x6dcfd620, 0x3cd1f: 0x6dffb020, + 0x3cd20: 0x6e204820, 0x3cd21: 0x6e204a20, 0x3cd22: 0x6c5d2c20, 0x3cd23: 0x6c818e20, + 0x3cd24: 0x6caab020, 0x3cd25: 0x6cd8ec20, 0x3cd26: 0x6cd8ee20, 0x3cd27: 0x6cd8f020, + 0x3cd28: 0x6d07a620, 0x3cd29: 0x6d07a820, 0x3cd2a: 0x6d358a20, 0x3cd2b: 0x6d623820, + 0x3cd2c: 0x6d623a20, 0x3cd2d: 0x6d8c3e20, 0x3cd2e: 0x6d8c4020, 0x3cd2f: 0x6db07020, + 0x3cd30: 0x6dd00820, 0x3cd31: 0x6dd00a20, 0x3cd32: 0x6e205420, 0x3cd33: 0x6c81a020, + 0x3cd34: 0x6c81a220, 0x3cd35: 0x6d07ac20, 0x3cd36: 0x6d359020, 0x3cd37: 0x6d624020, + 0x3cd38: 0x6dd00e20, 0x3cd39: 0x6caace20, 0x3cd3a: 0x6cd90a20, 0x3cd3b: 0x6cd90c20, + 0x3cd3c: 0x6d07be20, 0x3cd3d: 0x6d626620, 0x3cd3e: 0x6d8c6020, 0x3cd3f: 0x6dd02820, + // Block 0xf35, offset 0x3cd40 + 0x3cd40: 0x6c3e5820, 0x3cd41: 0x6c81f820, 0x3cd42: 0x6cd94820, 0x3cd43: 0x6cd94a20, + 0x3cd44: 0x6d07f620, 0x3cd45: 0x6d07f820, 0x3cd46: 0x6d07fa20, 0x3cd47: 0x6d360a20, + 0x3cd48: 0x6d360c20, 0x3cd49: 0x6d62b420, 0x3cd4a: 0x6d8c9220, 0x3cd4b: 0x6d8c9420, + 0x3cd4c: 0x6d8c9620, 0x3cd4d: 0x6d8c9820, 0x3cd4e: 0x6db0c820, 0x3cd4f: 0x6db0ca20, + 0x3cd50: 0x6dd05a20, 0x3cd51: 0x6dd05c20, 0x3cd52: 0x6dea1a20, 0x3cd53: 0x6e42ea20, + 0x3cd54: 0x6d080820, 0x3cd55: 0x6d361820, 0x3cd56: 0x6c3f1420, 0x3cd57: 0x6c3f1620, + 0x3cd58: 0x6c3f1820, 0x3cd59: 0x6c5e3020, 0x3cd5a: 0x6c5e3220, 0x3cd5b: 0x6c5e3420, + 0x3cd5c: 0x6c5e3620, 0x3cd5d: 0x6c82ce20, 0x3cd5e: 0x6c82d020, 0x3cd5f: 0x6cabd620, + 0x3cd60: 0x6cabd820, 0x3cd61: 0x6cabda20, 0x3cd62: 0x6cda6620, 0x3cd63: 0x6cda6820, + 0x3cd64: 0x6cda6a20, 0x3cd65: 0x6cda6c20, 0x3cd66: 0x6d08f220, 0x3cd67: 0x6d08f420, + 0x3cd68: 0x6d08f620, 0x3cd69: 0x6d36d620, 0x3cd6a: 0x6d36d820, 0x3cd6b: 0x6d36da20, + 0x3cd6c: 0x6d36dc20, 0x3cd6d: 0x6d36de20, 0x3cd6e: 0x6d36e020, 0x3cd6f: 0x6d634a20, + 0x3cd70: 0x6d634c20, 0x3cd71: 0x6d634e20, 0x3cd72: 0x6d635020, 0x3cd73: 0x6d635220, + 0x3cd74: 0x6d635420, 0x3cd75: 0x6d8d5020, 0x3cd76: 0x6d8d5220, 0x3cd77: 0x6d8d5420, + 0x3cd78: 0x6d8d5620, 0x3cd79: 0x6db15e20, 0x3cd7a: 0x6db16020, 0x3cd7b: 0x6db16220, + 0x3cd7c: 0x6dd0ac20, 0x3cd7d: 0x6dd0ae20, 0x3cd7e: 0x6dea6420, 0x3cd7f: 0x6dea6620, + // Block 0xf36, offset 0x3cd80 + 0x3cd80: 0x6e001420, 0x3cd81: 0x6e125820, 0x3cd82: 0x6e207c20, 0x3cd83: 0x6e2b6220, + 0x3cd84: 0x6e454220, 0x3cd85: 0x6c82da20, 0x3cd86: 0x6cda7a20, 0x3cd87: 0x6d08f820, + 0x3cd88: 0x6d36ec20, 0x3cd89: 0x6dd0b620, 0x3cd8a: 0x6cda8a20, 0x3cd8b: 0x6d636820, + 0x3cd8c: 0x6dd0ba20, 0x3cd8d: 0x6e3de620, 0x3cd8e: 0x6d090020, 0x3cd8f: 0x6d36fc20, + 0x3cd90: 0x6d36fe20, 0x3cd91: 0x6e001e20, 0x3cd92: 0x6dd0d020, 0x3cd93: 0x6e3dea20, + 0x3cd94: 0x6c3f3220, 0x3cd95: 0x6d091820, 0x3cd96: 0x6d091a20, 0x3cd97: 0x6d8d9420, + 0x3cd98: 0x6dea8420, 0x3cd99: 0x6e208420, 0x3cd9a: 0x6c5e7620, 0x3cd9b: 0x6d377220, + 0x3cd9c: 0x6d63e020, 0x3cd9d: 0x6d63e220, 0x3cd9e: 0x6db1ba20, 0x3cd9f: 0x6dd11620, + 0x3cda0: 0x6e004820, 0x3cda1: 0x6e209620, 0x3cda2: 0x6e209820, 0x3cda3: 0x6e209a20, + 0x3cda4: 0x6d8dd820, 0x3cda5: 0x6c14c620, 0x3cda6: 0x6c14c820, 0x3cda7: 0x6c268420, + 0x3cda8: 0x6c268620, 0x3cda9: 0x6c400220, 0x3cdaa: 0x6c400420, 0x3cdab: 0x6c400620, + 0x3cdac: 0x6c400820, 0x3cdad: 0x6c400a20, 0x3cdae: 0x6c5f7e20, 0x3cdaf: 0x6c5f8020, + 0x3cdb0: 0x6c5f8220, 0x3cdb1: 0x6c5f8420, 0x3cdb2: 0x6c5f8620, 0x3cdb3: 0x6c5f8820, + 0x3cdb4: 0x6c5f8a20, 0x3cdb5: 0x6c5f8c20, 0x3cdb6: 0x6c84b020, 0x3cdb7: 0x6c84b220, + 0x3cdb8: 0x6c84b420, 0x3cdb9: 0x6c84b620, 0x3cdba: 0x6c84b820, 0x3cdbb: 0x6c84ba20, + 0x3cdbc: 0x6c84bc20, 0x3cdbd: 0x6c84be20, 0x3cdbe: 0x6c84c020, 0x3cdbf: 0x6cadf420, + // Block 0xf37, offset 0x3cdc0 + 0x3cdc0: 0x6cadf620, 0x3cdc1: 0x6cadf820, 0x3cdc2: 0x6cadfa20, 0x3cdc3: 0x6cadfc20, + 0x3cdc4: 0x6cadfe20, 0x3cdc5: 0x6cae0020, 0x3cdc6: 0x6cae0220, 0x3cdc7: 0x6cae0420, + 0x3cdc8: 0x6cae0620, 0x3cdc9: 0x6cae0820, 0x3cdca: 0x6cae0a20, 0x3cdcb: 0x6cae0c20, + 0x3cdcc: 0x6cae0e20, 0x3cdcd: 0x6cae1020, 0x3cdce: 0x6cae1220, 0x3cdcf: 0x6cae1420, + 0x3cdd0: 0x6cdd2220, 0x3cdd1: 0x6cdd2420, 0x3cdd2: 0x6cdd2620, 0x3cdd3: 0x6cdd2820, + 0x3cdd4: 0x6cdd2a20, 0x3cdd5: 0x6cdd2c20, 0x3cdd6: 0x6cdd2e20, 0x3cdd7: 0x6cdd3020, + 0x3cdd8: 0x6cdd3220, 0x3cdd9: 0x6cdd3420, 0x3cdda: 0x6cdd3620, 0x3cddb: 0x6cdd3820, + 0x3cddc: 0x6cdd3a20, 0x3cddd: 0x6cdd3c20, 0x3cdde: 0x6cdd3e20, 0x3cddf: 0x6cdd4020, + 0x3cde0: 0x6cdd4220, 0x3cde1: 0x6d0b8c20, 0x3cde2: 0x6d0b8e20, 0x3cde3: 0x6d0b9020, + 0x3cde4: 0x6d0b9220, 0x3cde5: 0x6d0b9420, 0x3cde6: 0x6d0b9620, 0x3cde7: 0x6d0b9820, + 0x3cde8: 0x6d0b9a20, 0x3cde9: 0x6d0b9c20, 0x3cdea: 0x6d0b9e20, 0x3cdeb: 0x6d0ba020, + 0x3cdec: 0x6d0ba220, 0x3cded: 0x6d0ba420, 0x3cdee: 0x6d0ba620, 0x3cdef: 0x6d0ba820, + 0x3cdf0: 0x6cdd4620, 0x3cdf1: 0x6d0baa20, 0x3cdf2: 0x6d0bac20, 0x3cdf3: 0x6d0bae20, + 0x3cdf4: 0x6d0bb020, 0x3cdf5: 0x6d0bb220, 0x3cdf6: 0x6d399220, 0x3cdf7: 0x6d399420, + 0x3cdf8: 0x6d399620, 0x3cdf9: 0x6d399820, 0x3cdfa: 0x6d399a20, 0x3cdfb: 0x6d399c20, + 0x3cdfc: 0x6d399e20, 0x3cdfd: 0x6d39a020, 0x3cdfe: 0x6d39a220, 0x3cdff: 0x6d39a420, + // Block 0xf38, offset 0x3ce00 + 0x3ce00: 0x6d39a620, 0x3ce01: 0x6d39a820, 0x3ce02: 0x6d39aa20, 0x3ce03: 0x6d39ac20, + 0x3ce04: 0x6d39ae20, 0x3ce05: 0x6d39b020, 0x3ce06: 0x6d39b220, 0x3ce07: 0x6d39b420, + 0x3ce08: 0x6d65c420, 0x3ce09: 0x6d65c620, 0x3ce0a: 0x6d65c820, 0x3ce0b: 0x6d65ca20, + 0x3ce0c: 0x6d65cc20, 0x3ce0d: 0x6d65ce20, 0x3ce0e: 0x6d65d020, 0x3ce0f: 0x6d65d220, + 0x3ce10: 0x6d65d420, 0x3ce11: 0x6d65d620, 0x3ce12: 0x6d65d820, 0x3ce13: 0x6d65da20, + 0x3ce14: 0x6d65dc20, 0x3ce15: 0x6d65de20, 0x3ce16: 0x6d65e020, 0x3ce17: 0x6d65e220, + 0x3ce18: 0x6d65e420, 0x3ce19: 0x6d65e620, 0x3ce1a: 0x6d65e820, 0x3ce1b: 0x6d65ea20, + 0x3ce1c: 0x6d65ec20, 0x3ce1d: 0x6d8fb220, 0x3ce1e: 0x6d8fb420, 0x3ce1f: 0x6d8fb620, + 0x3ce20: 0x6d8fb820, 0x3ce21: 0x6d8fba20, 0x3ce22: 0x6d8fbc20, 0x3ce23: 0x6d8fbe20, + 0x3ce24: 0x6d8fc020, 0x3ce25: 0x6db37420, 0x3ce26: 0x6db37620, 0x3ce27: 0x6db37820, + 0x3ce28: 0x6db37a20, 0x3ce29: 0x6db37c20, 0x3ce2a: 0x6db37e20, 0x3ce2b: 0x6db38020, + 0x3ce2c: 0x6db38220, 0x3ce2d: 0x6db38420, 0x3ce2e: 0x6db38620, 0x3ce2f: 0x6db38820, + 0x3ce30: 0x6db38a20, 0x3ce31: 0x6db38c20, 0x3ce32: 0x6db38e20, 0x3ce33: 0x6db39020, + 0x3ce34: 0x6db39220, 0x3ce35: 0x6dd27620, 0x3ce36: 0x6dd27820, 0x3ce37: 0x6dd27a20, + 0x3ce38: 0x6dd27c20, 0x3ce39: 0x6dd27e20, 0x3ce3a: 0x6dd28020, 0x3ce3b: 0x6dd28220, + 0x3ce3c: 0x6dd28420, 0x3ce3d: 0x6dd28620, 0x3ce3e: 0x6dd28820, 0x3ce3f: 0x6dd28a20, + // Block 0xf39, offset 0x3ce40 + 0x3ce40: 0x6dd28c20, 0x3ce41: 0x6dd28e20, 0x3ce42: 0x6dd29020, 0x3ce43: 0x6dd29220, + 0x3ce44: 0x6dd29420, 0x3ce45: 0x6debc020, 0x3ce46: 0x6debc220, 0x3ce47: 0x6debc420, + 0x3ce48: 0x6debc620, 0x3ce49: 0x6debc820, 0x3ce4a: 0x6debca20, 0x3ce4b: 0x6debcc20, + 0x3ce4c: 0x6e014c20, 0x3ce4d: 0x6e014e20, 0x3ce4e: 0x6e015020, 0x3ce4f: 0x6e015220, + 0x3ce50: 0x6e133820, 0x3ce51: 0x6e133a20, 0x3ce52: 0x6e133c20, 0x3ce53: 0x6e133e20, + 0x3ce54: 0x6e211820, 0x3ce55: 0x6e211a20, 0x3ce56: 0x6e211c20, 0x3ce57: 0x6e2bd420, + 0x3ce58: 0x6e342020, 0x3ce59: 0x6e342220, 0x3ce5a: 0x6e342420, 0x3ce5b: 0x6e3e0e20, + 0x3ce5c: 0x6e3e1020, 0x3ce5d: 0x6c5f9e20, 0x3ce5e: 0x6c5fa020, 0x3ce5f: 0x6c84dc20, + 0x3ce60: 0x6cdd6220, 0x3ce61: 0x6cdd6420, 0x3ce62: 0x6d39da20, 0x3ce63: 0x6db3b220, + 0x3ce64: 0x6c403420, 0x3ce65: 0x6c5ff220, 0x3ce66: 0x6c5ff420, 0x3ce67: 0x6c857820, + 0x3ce68: 0x6c857a20, 0x3ce69: 0x6c857c20, 0x3ce6a: 0x6c857e20, 0x3ce6b: 0x6c858020, + 0x3ce6c: 0x6caf0c20, 0x3ce6d: 0x6caf0e20, 0x3ce6e: 0x6caf1020, 0x3ce6f: 0x6caf1220, + 0x3ce70: 0x6caf1420, 0x3ce71: 0x6caf1620, 0x3ce72: 0x6caf1820, 0x3ce73: 0x6cde3020, + 0x3ce74: 0x6cde3220, 0x3ce75: 0x6cde3420, 0x3ce76: 0x6cde3620, 0x3ce77: 0x6cde3820, + 0x3ce78: 0x6cde3a20, 0x3ce79: 0x6cde3c20, 0x3ce7a: 0x6cde3e20, 0x3ce7b: 0x6cde4020, + 0x3ce7c: 0x6cde4220, 0x3ce7d: 0x6d0cb020, 0x3ce7e: 0x6d0cb220, 0x3ce7f: 0x6d0cb420, + // Block 0xf3a, offset 0x3ce80 + 0x3ce80: 0x6d0cb620, 0x3ce81: 0x6d0cb820, 0x3ce82: 0x6d3afc20, 0x3ce83: 0x6d3afe20, + 0x3ce84: 0x6d3b0020, 0x3ce85: 0x6d3b0220, 0x3ce86: 0x6d3b0420, 0x3ce87: 0x6d3b0620, + 0x3ce88: 0x6d3b0820, 0x3ce89: 0x6d3b0a20, 0x3ce8a: 0x6d672e20, 0x3ce8b: 0x6d673020, + 0x3ce8c: 0x6d673220, 0x3ce8d: 0x6d673420, 0x3ce8e: 0x6d673620, 0x3ce8f: 0x6d910820, + 0x3ce90: 0x6d910a20, 0x3ce91: 0x6d910c20, 0x3ce92: 0x6d910e20, 0x3ce93: 0x6d911020, + 0x3ce94: 0x6d911220, 0x3ce95: 0x6d911420, 0x3ce96: 0x6db4be20, 0x3ce97: 0x6db4c020, + 0x3ce98: 0x6db4c220, 0x3ce99: 0x6db4c420, 0x3ce9a: 0x6dd38e20, 0x3ce9b: 0x6dd39020, + 0x3ce9c: 0x6dd39220, 0x3ce9d: 0x6dd39420, 0x3ce9e: 0x6dd39620, 0x3ce9f: 0x6dec9c20, + 0x3cea0: 0x6dec9e20, 0x3cea1: 0x6deca020, 0x3cea2: 0x6deca220, 0x3cea3: 0x6e01d420, + 0x3cea4: 0x6e01d620, 0x3cea5: 0x6e01d820, 0x3cea6: 0x6e13c220, 0x3cea7: 0x6e13c420, + 0x3cea8: 0x6e218420, 0x3cea9: 0x6e447620, 0x3ceaa: 0x6c859220, 0x3ceab: 0x6caf2420, + 0x3ceac: 0x6db4ce20, 0x3cead: 0x6caf3220, 0x3ceae: 0x6cde6820, 0x3ceaf: 0x6d675420, + 0x3ceb0: 0x6dd3a820, 0x3ceb1: 0x6e2c2020, 0x3ceb2: 0x6c605e20, 0x3ceb3: 0x6c606020, + 0x3ceb4: 0x6c606220, 0x3ceb5: 0x6c861c20, 0x3ceb6: 0x6c861e20, 0x3ceb7: 0x6c862020, + 0x3ceb8: 0x6cafd820, 0x3ceb9: 0x6cafda20, 0x3ceba: 0x6cafdc20, 0x3cebb: 0x6cafde20, + 0x3cebc: 0x6cafe020, 0x3cebd: 0x6cdef420, 0x3cebe: 0x6d0d6820, 0x3cebf: 0x6d0d6a20, + // Block 0xf3b, offset 0x3cec0 + 0x3cec0: 0x6d0d6c20, 0x3cec1: 0x6d0d6e20, 0x3cec2: 0x6d0d7020, 0x3cec3: 0x6d0d7220, + 0x3cec4: 0x6d0d7420, 0x3cec5: 0x6d3bd820, 0x3cec6: 0x6d3bda20, 0x3cec7: 0x6d67ec20, + 0x3cec8: 0x6d67ee20, 0x3cec9: 0x6d67f020, 0x3ceca: 0x6d91ae20, 0x3cecb: 0x6d91b020, + 0x3cecc: 0x6d91b220, 0x3cecd: 0x6d91b420, 0x3cece: 0x6d91b620, 0x3cecf: 0x6d91b820, + 0x3ced0: 0x6db57820, 0x3ced1: 0x6db57a20, 0x3ced2: 0x6db57c20, 0x3ced3: 0x6dd40a20, + 0x3ced4: 0x6dd40c20, 0x3ced5: 0x6decfc20, 0x3ced6: 0x6e021620, 0x3ced7: 0x6e21a020, + 0x3ced8: 0x6e2c3420, 0x3ced9: 0x6e2c3620, 0x3ceda: 0x6cafec20, 0x3cedb: 0x6d91c020, + 0x3cedc: 0x6c863c20, 0x3cedd: 0x6cdf3220, 0x3cede: 0x6d0daa20, 0x3cedf: 0x6d3c1a20, + 0x3cee0: 0x6d3c1c20, 0x3cee1: 0x6d683020, 0x3cee2: 0x6d91fe20, 0x3cee3: 0x6d920020, + 0x3cee4: 0x6dd43420, 0x3cee5: 0x6e022c20, 0x3cee6: 0x6e3a3220, 0x3cee7: 0x6e3a3420, + 0x3cee8: 0x6c607820, 0x3cee9: 0x6c607a20, 0x3ceea: 0x6c864020, 0x3ceeb: 0x6d0dae20, + 0x3ceec: 0x6d683820, 0x3ceed: 0x6db5a620, 0x3ceee: 0x6d0dd820, 0x3ceef: 0x6d0dda20, + 0x3cef0: 0x6d922e20, 0x3cef1: 0x6d923020, 0x3cef2: 0x6c868c20, 0x3cef3: 0x6c868e20, + 0x3cef4: 0x6cb10620, 0x3cef5: 0x6cb10820, 0x3cef6: 0x6ce02420, 0x3cef7: 0x6ce02620, + 0x3cef8: 0x6ce02820, 0x3cef9: 0x6ce02a20, 0x3cefa: 0x6d0eae20, 0x3cefb: 0x6d0eb020, + 0x3cefc: 0x6d3d0020, 0x3cefd: 0x6d3d0220, 0x3cefe: 0x6d3d0420, 0x3ceff: 0x6d697220, + // Block 0xf3c, offset 0x3cf00 + 0x3cf00: 0x6d697420, 0x3cf01: 0x6d92f220, 0x3cf02: 0x6d92f420, 0x3cf03: 0x6d92f620, + 0x3cf04: 0x6d92f820, 0x3cf05: 0x6d92fa20, 0x3cf06: 0x6db69220, 0x3cf07: 0x6db69420, + 0x3cf08: 0x6db69620, 0x3cf09: 0x6dd4f220, 0x3cf0a: 0x6dd4f420, 0x3cf0b: 0x6dd4f620, + 0x3cf0c: 0x6dd4f820, 0x3cf0d: 0x6dedda20, 0x3cf0e: 0x6deddc20, 0x3cf0f: 0x6dedde20, + 0x3cf10: 0x6e02b220, 0x3cf11: 0x6e02b420, 0x3cf12: 0x6e146a20, 0x3cf13: 0x6e2c7420, + 0x3cf14: 0x6e34a220, 0x3cf15: 0x6e34a420, 0x3cf16: 0x6e34a620, 0x3cf17: 0x6e3e4220, + 0x3cf18: 0x6e431c20, 0x3cf19: 0x6c0a7c20, 0x3cf1a: 0x6c14fa20, 0x3cf1b: 0x6c14fc20, + 0x3cf1c: 0x6c26d820, 0x3cf1d: 0x6c26da20, 0x3cf1e: 0x6c26dc20, 0x3cf1f: 0x6c26de20, + 0x3cf20: 0x6c26e020, 0x3cf21: 0x6c26e220, 0x3cf22: 0x6c40ac20, 0x3cf23: 0x6c40ae20, + 0x3cf24: 0x6c40b020, 0x3cf25: 0x6c40b220, 0x3cf26: 0x6c40b420, 0x3cf27: 0x6c60b620, + 0x3cf28: 0x6c60b820, 0x3cf29: 0x6c60ba20, 0x3cf2a: 0x6c60bc20, 0x3cf2b: 0x6c86b820, + 0x3cf2c: 0x6c86ba20, 0x3cf2d: 0x6c86bc20, 0x3cf2e: 0x6c86be20, 0x3cf2f: 0x6cb13420, + 0x3cf30: 0x6cb13620, 0x3cf31: 0x6cb13820, 0x3cf32: 0x6cb13a20, 0x3cf33: 0x6cb13c20, + 0x3cf34: 0x6cb13e20, 0x3cf35: 0x6ce03e20, 0x3cf36: 0x6ce04020, 0x3cf37: 0x6ce04220, + 0x3cf38: 0x6ce04420, 0x3cf39: 0x6d0ebe20, 0x3cf3a: 0x6d0ec020, 0x3cf3b: 0x6d3d1220, + 0x3cf3c: 0x6d3d1420, 0x3cf3d: 0x6d698220, 0x3cf3e: 0x6d92fe20, 0x3cf3f: 0x6db69c20, + // Block 0xf3d, offset 0x3cf40 + 0x3cf40: 0x6c60c020, 0x3cf41: 0x6cb14e20, 0x3cf42: 0x6d699420, 0x3cf43: 0x6d69b220, + 0x3cf44: 0x6dd51220, 0x3cf45: 0x6c40bc20, 0x3cf46: 0x6cb17620, 0x3cf47: 0x6d3d4a20, + 0x3cf48: 0x6d3d4c20, 0x3cf49: 0x6d933e20, 0x3cf4a: 0x6c86ee20, 0x3cf4b: 0x6d0f2420, + 0x3cf4c: 0x6d936620, 0x3cf4d: 0x6db70220, 0x3cf4e: 0x6c60da20, 0x3cf4f: 0x6c870a20, + 0x3cf50: 0x6c870c20, 0x3cf51: 0x6c870e20, 0x3cf52: 0x6cb1d820, 0x3cf53: 0x6cb1da20, + 0x3cf54: 0x6ce11420, 0x3cf55: 0x6ce11620, 0x3cf56: 0x6d0f8e20, 0x3cf57: 0x6d3dbc20, + 0x3cf58: 0x6d3dbe20, 0x3cf59: 0x6d3dc020, 0x3cf5a: 0x6d6a6820, 0x3cf5b: 0x6d6a6a20, + 0x3cf5c: 0x6d93b820, 0x3cf5d: 0x6d93ba20, 0x3cf5e: 0x6d93bc20, 0x3cf5f: 0x6db73c20, + 0x3cf60: 0x6db73e20, 0x3cf61: 0x6dd59220, 0x3cf62: 0x6dee7a20, 0x3cf63: 0x6e225420, + 0x3cf64: 0x6e225620, 0x3cf65: 0x6e2ca420, 0x3cf66: 0x6c60f620, 0x3cf67: 0x6c60f820, + 0x3cf68: 0x6cb1e620, 0x3cf69: 0x6ce13420, 0x3cf6a: 0x6d0f9620, 0x3cf6b: 0x6d93ca20, + 0x3cf6c: 0x6dd59420, 0x3cf6d: 0x6ce13c20, 0x3cf6e: 0x6d0fa620, 0x3cf6f: 0x6d6a8020, + 0x3cf70: 0x6dd59a20, 0x3cf71: 0x6cb23c20, 0x3cf72: 0x6ce19a20, 0x3cf73: 0x6d100420, + 0x3cf74: 0x6d100620, 0x3cf75: 0x6d3e3420, 0x3cf76: 0x6d3e3620, 0x3cf77: 0x6d3e3820, + 0x3cf78: 0x6d6ad420, 0x3cf79: 0x6d6ad620, 0x3cf7a: 0x6d6ad820, 0x3cf7b: 0x6d942e20, + 0x3cf7c: 0x6d943020, 0x3cf7d: 0x6db78220, 0x3cf7e: 0x6dd5d820, 0x3cf7f: 0x6dd5da20, + // Block 0xf3e, offset 0x3cf80 + 0x3cf80: 0x6c877e20, 0x3cf81: 0x6cb2a420, 0x3cf82: 0x6cb2a620, 0x3cf83: 0x6cb2a820, + 0x3cf84: 0x6ce23420, 0x3cf85: 0x6ce23620, 0x3cf86: 0x6ce23820, 0x3cf87: 0x6d10a620, + 0x3cf88: 0x6d10a820, 0x3cf89: 0x6d10aa20, 0x3cf8a: 0x6d10ac20, 0x3cf8b: 0x6d10ae20, + 0x3cf8c: 0x6d3edc20, 0x3cf8d: 0x6d3ede20, 0x3cf8e: 0x6d3ee020, 0x3cf8f: 0x6d6b8e20, + 0x3cf90: 0x6d6b9020, 0x3cf91: 0x6d6b9220, 0x3cf92: 0x6d6b9420, 0x3cf93: 0x6d6b9620, + 0x3cf94: 0x6d94d820, 0x3cf95: 0x6d94da20, 0x3cf96: 0x6d94dc20, 0x3cf97: 0x6d94de20, + 0x3cf98: 0x6d94e020, 0x3cf99: 0x6db81020, 0x3cf9a: 0x6db81220, 0x3cf9b: 0x6db81420, + 0x3cf9c: 0x6dd6a220, 0x3cf9d: 0x6dd6a420, 0x3cf9e: 0x6dd6a620, 0x3cf9f: 0x6dd6a820, + 0x3cfa0: 0x6def6020, 0x3cfa1: 0x6def6220, 0x3cfa2: 0x6def6420, 0x3cfa3: 0x6e039220, + 0x3cfa4: 0x6e039420, 0x3cfa5: 0x6e039620, 0x3cfa6: 0x6e039820, 0x3cfa7: 0x6e150220, + 0x3cfa8: 0x6e150420, 0x3cfa9: 0x6e2ce620, 0x3cfaa: 0x6d10dc20, 0x3cfab: 0x6d10de20, + 0x3cfac: 0x6d3f0020, 0x3cfad: 0x6db83220, 0x3cfae: 0x6db83420, 0x3cfaf: 0x6dd6be20, + 0x3cfb0: 0x6def9020, 0x3cfb1: 0x6e03aa20, 0x3cfb2: 0x6c87b620, 0x3cfb3: 0x6cb33620, + 0x3cfb4: 0x6ce2d420, 0x3cfb5: 0x6ce2d620, 0x3cfb6: 0x6d3f5820, 0x3cfb7: 0x6d3f5a20, + 0x3cfb8: 0x6d3f5c20, 0x3cfb9: 0x6d6c4c20, 0x3cfba: 0x6d956c20, 0x3cfbb: 0x6d956e20, + 0x3cfbc: 0x6db89620, 0x3cfbd: 0x6db89820, 0x3cfbe: 0x6dd71220, 0x3cfbf: 0x6dd71420, + // Block 0xf3f, offset 0x3cfc0 + 0x3cfc0: 0x6defc620, 0x3cfc1: 0x6e03e820, 0x3cfc2: 0x6e153420, 0x3cfc3: 0x6e469220, + 0x3cfc4: 0x6c271620, 0x3cfc5: 0x6c271820, 0x3cfc6: 0x6c271a20, 0x3cfc7: 0x6c40f420, + 0x3cfc8: 0x6c615e20, 0x3cfc9: 0x6c616020, 0x3cfca: 0x6c616220, 0x3cfcb: 0x6c87cc20, + 0x3cfcc: 0x6c87ce20, 0x3cfcd: 0x6cb34020, 0x3cfce: 0x6ce2e820, 0x3cfcf: 0x6ce2ea20, + 0x3cfd0: 0x6ce2ec20, 0x3cfd1: 0x6ce2ee20, 0x3cfd2: 0x6d114a20, 0x3cfd3: 0x6c87d020, + 0x3cfd4: 0x6d3f6420, 0x3cfd5: 0x6d6c5020, 0x3cfd6: 0x6d6c5220, 0x3cfd7: 0x6d957620, + 0x3cfd8: 0x6db89a20, 0x3cfd9: 0x6defc820, 0x3cfda: 0x6ce2f820, 0x3cfdb: 0x6d115a20, + 0x3cfdc: 0x6d115c20, 0x3cfdd: 0x6e03f620, 0x3cfde: 0x6c052020, 0x3cfdf: 0x6c153820, + 0x3cfe0: 0x6c278620, 0x3cfe1: 0x6c278820, 0x3cfe2: 0x6c417620, 0x3cfe3: 0x6c417820, + 0x3cfe4: 0x6c417a20, 0x3cfe5: 0x6c61d020, 0x3cfe6: 0x6c886020, 0x3cfe7: 0x6c886220, + 0x3cfe8: 0x6c886420, 0x3cfe9: 0x6c886620, 0x3cfea: 0x6c886820, 0x3cfeb: 0x6cb3ec20, + 0x3cfec: 0x6cb3ee20, 0x3cfed: 0x6cb3f020, 0x3cfee: 0x6cb3f220, 0x3cfef: 0x6cb3f420, + 0x3cff0: 0x6cb3f620, 0x3cff1: 0x6cb3f820, 0x3cff2: 0x6cb3fa20, 0x3cff3: 0x6ce3ac20, + 0x3cff4: 0x6ce3ae20, 0x3cff5: 0x6ce3b020, 0x3cff6: 0x6ce3b220, 0x3cff7: 0x6ce3b420, + 0x3cff8: 0x6ce3b620, 0x3cff9: 0x6ce3b820, 0x3cffa: 0x6d11f420, 0x3cffb: 0x6d11f620, + 0x3cffc: 0x6d11f820, 0x3cffd: 0x6d11fa20, 0x3cffe: 0x6d3ff820, 0x3cfff: 0x6d3ffa20, + // Block 0xf40, offset 0x3d000 + 0x3d000: 0x6d3ffc20, 0x3d001: 0x6d3ffe20, 0x3d002: 0x6d400020, 0x3d003: 0x6d400220, + 0x3d004: 0x6d6cea20, 0x3d005: 0x6d6cec20, 0x3d006: 0x6d6cee20, 0x3d007: 0x6d6cf020, + 0x3d008: 0x6d6cf220, 0x3d009: 0x6d6cf420, 0x3d00a: 0x6d6cf620, 0x3d00b: 0x6d95f620, + 0x3d00c: 0x6db8fc20, 0x3d00d: 0x6db8fe20, 0x3d00e: 0x6db90020, 0x3d00f: 0x6db90220, + 0x3d010: 0x6dd75220, 0x3d011: 0x6dd75420, 0x3d012: 0x6e041e20, 0x3d013: 0x6e042020, + 0x3d014: 0x6e042220, 0x3d015: 0x6e042420, 0x3d016: 0x6e154c20, 0x3d017: 0x6c0aa820, + 0x3d018: 0x6c158820, 0x3d019: 0x6c158a20, 0x3d01a: 0x6c27e620, 0x3d01b: 0x6c27e820, + 0x3d01c: 0x6c41d820, 0x3d01d: 0x6c624e20, 0x3d01e: 0x6c625020, 0x3d01f: 0x6c625220, + 0x3d020: 0x6c88e220, 0x3d021: 0x6c88e420, 0x3d022: 0x6c88e620, 0x3d023: 0x6cb46e20, + 0x3d024: 0x6cb47020, 0x3d025: 0x6ce41a20, 0x3d026: 0x6ce41c20, 0x3d027: 0x6d126420, + 0x3d028: 0x6d126620, 0x3d029: 0x6d126820, 0x3d02a: 0x6d6d4420, 0x3d02b: 0x6d6d4620, + 0x3d02c: 0x6d962e20, 0x3d02d: 0x6db93220, 0x3d02e: 0x6dd77a20, 0x3d02f: 0x6dd77c20, + 0x3d030: 0x6dd77e20, 0x3d031: 0x6e043220, 0x3d032: 0x6e433620, 0x3d033: 0x6c890420, + 0x3d034: 0x6d12b620, 0x3d035: 0x6d12b820, 0x3d036: 0x6d40c420, 0x3d037: 0x6d40c620, + 0x3d038: 0x6d40c820, 0x3d039: 0x6d6da420, 0x3d03a: 0x6db98e20, 0x3d03b: 0x6dd7ca20, + 0x3d03c: 0x6df05020, 0x3d03d: 0x6df05220, 0x3d03e: 0x6e157620, 0x3d03f: 0x6e2d3820, + // Block 0xf41, offset 0x3d040 + 0x3d040: 0x6ce46e20, 0x3d041: 0x6cb4d220, 0x3d042: 0x6ce47a20, 0x3d043: 0x6d40d220, + 0x3d044: 0x6db99e20, 0x3d045: 0x6df05420, 0x3d046: 0x6cb51a20, 0x3d047: 0x6cb51c20, + 0x3d048: 0x6cb51e20, 0x3d049: 0x6cb52020, 0x3d04a: 0x6ce51a20, 0x3d04b: 0x6ce51c20, + 0x3d04c: 0x6ce51e20, 0x3d04d: 0x6ce52020, 0x3d04e: 0x6ce52220, 0x3d04f: 0x6d139220, + 0x3d050: 0x6d139420, 0x3d051: 0x6d139620, 0x3d052: 0x6d139820, 0x3d053: 0x6d139a20, + 0x3d054: 0x6d139c20, 0x3d055: 0x6d41ac20, 0x3d056: 0x6d41ae20, 0x3d057: 0x6d41b020, + 0x3d058: 0x6d41b220, 0x3d059: 0x6d41b420, 0x3d05a: 0x6d41b620, 0x3d05b: 0x6d41b820, + 0x3d05c: 0x6d41ba20, 0x3d05d: 0x6d6ebe20, 0x3d05e: 0x6d6ec020, 0x3d05f: 0x6d6ec220, + 0x3d060: 0x6d6ec420, 0x3d061: 0x6d6ec620, 0x3d062: 0x6d6ec820, 0x3d063: 0x6d6eca20, + 0x3d064: 0x6d6ecc20, 0x3d065: 0x6d6ece20, 0x3d066: 0x6d97d820, 0x3d067: 0x6d97da20, + 0x3d068: 0x6d97dc20, 0x3d069: 0x6d97de20, 0x3d06a: 0x6d97e020, 0x3d06b: 0x6d97e220, + 0x3d06c: 0x6d97e420, 0x3d06d: 0x6d97e620, 0x3d06e: 0x6d97e820, 0x3d06f: 0x6d97ea20, + 0x3d070: 0x6dbadc20, 0x3d071: 0x6dbade20, 0x3d072: 0x6dbae020, 0x3d073: 0x6dbae220, + 0x3d074: 0x6dbae420, 0x3d075: 0x6dbae620, 0x3d076: 0x6dbae820, 0x3d077: 0x6dbaea20, + 0x3d078: 0x6dd8ea20, 0x3d079: 0x6dd8ec20, 0x3d07a: 0x6dd8ee20, 0x3d07b: 0x6dd8f020, + 0x3d07c: 0x6dd8f220, 0x3d07d: 0x6dd8f420, 0x3d07e: 0x6dd8f620, 0x3d07f: 0x6df15420, + // Block 0xf42, offset 0x3d080 + 0x3d080: 0x6df15620, 0x3d081: 0x6df15820, 0x3d082: 0x6df15a20, 0x3d083: 0x6df15c20, + 0x3d084: 0x6e057220, 0x3d085: 0x6e057420, 0x3d086: 0x6e057620, 0x3d087: 0x6e057820, + 0x3d088: 0x6e057a20, 0x3d089: 0x6e057c20, 0x3d08a: 0x6e057e20, 0x3d08b: 0x6e058020, + 0x3d08c: 0x6e058220, 0x3d08d: 0x6e058420, 0x3d08e: 0x6e058620, 0x3d08f: 0x6e164020, + 0x3d090: 0x6e164220, 0x3d091: 0x6e164420, 0x3d092: 0x6e164620, 0x3d093: 0x6e164820, + 0x3d094: 0x6e164a20, 0x3d095: 0x6e164c20, 0x3d096: 0x6e238a20, 0x3d097: 0x6e238c20, + 0x3d098: 0x6e238e20, 0x3d099: 0x6e239020, 0x3d09a: 0x6e239220, 0x3d09b: 0x6e2db420, + 0x3d09c: 0x6e2db620, 0x3d09d: 0x6e356020, 0x3d09e: 0x6e356220, 0x3d09f: 0x6e356420, + 0x3d0a0: 0x6e3ae220, 0x3d0a1: 0x6e3ae420, 0x3d0a2: 0x6e3ae620, 0x3d0a3: 0x6e3eae20, + 0x3d0a4: 0x6e415e20, 0x3d0a5: 0x6c27fc20, 0x3d0a6: 0x6c41fa20, 0x3d0a7: 0x6c629c20, + 0x3d0a8: 0x6c629e20, 0x3d0a9: 0x6c62a020, 0x3d0aa: 0x6c62a220, 0x3d0ab: 0x6c62a420, + 0x3d0ac: 0x6c897a20, 0x3d0ad: 0x6c897c20, 0x3d0ae: 0x6c897e20, 0x3d0af: 0x6cb57420, + 0x3d0b0: 0x6cb57620, 0x3d0b1: 0x6cb57820, 0x3d0b2: 0x6cb57a20, 0x3d0b3: 0x6cb57c20, + 0x3d0b4: 0x6cb57e20, 0x3d0b5: 0x6ce56a20, 0x3d0b6: 0x6ce56c20, 0x3d0b7: 0x6ce56e20, + 0x3d0b8: 0x6d13e420, 0x3d0b9: 0x6d13e620, 0x3d0ba: 0x6d13e820, 0x3d0bb: 0x6d13ea20, + 0x3d0bc: 0x6d13ec20, 0x3d0bd: 0x6d13ee20, 0x3d0be: 0x6d13f020, 0x3d0bf: 0x6d13f220, + // Block 0xf43, offset 0x3d0c0 + 0x3d0c0: 0x6d41ee20, 0x3d0c1: 0x6d41f020, 0x3d0c2: 0x6d41f220, 0x3d0c3: 0x6d41f420, + 0x3d0c4: 0x6d41f620, 0x3d0c5: 0x6d6ef620, 0x3d0c6: 0x6d6ef820, 0x3d0c7: 0x6d6efa20, + 0x3d0c8: 0x6d6efc20, 0x3d0c9: 0x6d980820, 0x3d0ca: 0x6d980a20, 0x3d0cb: 0x6dbb0c20, + 0x3d0cc: 0x6dbb0e20, 0x3d0cd: 0x6dbb1020, 0x3d0ce: 0x6dbb1220, 0x3d0cf: 0x6dbb1420, + 0x3d0d0: 0x6dd90c20, 0x3d0d1: 0x6dd90e20, 0x3d0d2: 0x6df16020, 0x3d0d3: 0x6e164e20, + 0x3d0d4: 0x6e2db820, 0x3d0d5: 0x6e356620, 0x3d0d6: 0x6d141620, 0x3d0d7: 0x6d6f1a20, + 0x3d0d8: 0x6c62b220, 0x3d0d9: 0x6cb5c220, 0x3d0da: 0x6ce5e620, 0x3d0db: 0x6ce5e820, + 0x3d0dc: 0x6d146420, 0x3d0dd: 0x6d146620, 0x3d0de: 0x6d146820, 0x3d0df: 0x6d146a20, + 0x3d0e0: 0x6d146c20, 0x3d0e1: 0x6d6f7a20, 0x3d0e2: 0x6d6f7c20, 0x3d0e3: 0x6d6f7e20, + 0x3d0e4: 0x6d6f8020, 0x3d0e5: 0x6d988820, 0x3d0e6: 0x6d988a20, 0x3d0e7: 0x6d988c20, + 0x3d0e8: 0x6dbb8420, 0x3d0e9: 0x6df1a020, 0x3d0ea: 0x6e168e20, 0x3d0eb: 0x6e3af820, + 0x3d0ec: 0x6c15a020, 0x3d0ed: 0x6c281820, 0x3d0ee: 0x6c281a20, 0x3d0ef: 0x6c281c20, + 0x3d0f0: 0x6c420c20, 0x3d0f1: 0x6c62ca20, 0x3d0f2: 0x6c899e20, 0x3d0f3: 0x6c89a020, + 0x3d0f4: 0x6cb5d820, 0x3d0f5: 0x6d147a20, 0x3d0f6: 0x6d147c20, 0x3d0f7: 0x6d426620, + 0x3d0f8: 0x6d426820, 0x3d0f9: 0x6dbb8a20, 0x3d0fa: 0x6c0ac020, 0x3d0fb: 0x6c15d020, + 0x3d0fc: 0x6c287820, 0x3d0fd: 0x6c287a20, 0x3d0fe: 0x6c426c20, 0x3d0ff: 0x6c426e20, + // Block 0xf44, offset 0x3d100 + 0x3d100: 0x6c427020, 0x3d101: 0x6c632620, 0x3d102: 0x6c632820, 0x3d103: 0x6c632a20, + 0x3d104: 0x6c8a2c20, 0x3d105: 0x6c8a2e20, 0x3d106: 0x6cb64e20, 0x3d107: 0x6cb65020, + 0x3d108: 0x6cb65220, 0x3d109: 0x6cb65420, 0x3d10a: 0x6cb65620, 0x3d10b: 0x6cb65820, + 0x3d10c: 0x6cb65a20, 0x3d10d: 0x6cb65c20, 0x3d10e: 0x6ce68620, 0x3d10f: 0x6ce68820, + 0x3d110: 0x6d14d620, 0x3d111: 0x6d14d820, 0x3d112: 0x6d14da20, 0x3d113: 0x6d14dc20, + 0x3d114: 0x6d42c420, 0x3d115: 0x6d42c620, 0x3d116: 0x6d42c820, 0x3d117: 0x6d42ca20, + 0x3d118: 0x6dd98420, 0x3d119: 0x6d6fca20, 0x3d11a: 0x6ce6bc20, 0x3d11b: 0x6d430a20, + 0x3d11c: 0x6dd9ba20, 0x3d11d: 0x6c8a4620, 0x3d11e: 0x6cb69620, 0x3d11f: 0x6ce6f220, + 0x3d120: 0x6ce6f420, 0x3d121: 0x6d155020, 0x3d122: 0x6d155220, 0x3d123: 0x6d434c20, + 0x3d124: 0x6d434e20, 0x3d125: 0x6d704a20, 0x3d126: 0x6d704c20, 0x3d127: 0x6d997620, + 0x3d128: 0x6d997820, 0x3d129: 0x6dbc4e20, 0x3d12a: 0x6dbc5020, 0x3d12b: 0x6dda1a20, + 0x3d12c: 0x6df23220, 0x3d12d: 0x6df23420, 0x3d12e: 0x6e066820, 0x3d12f: 0x6e066a20, + 0x3d130: 0x6e066c20, 0x3d131: 0x6e066e20, 0x3d132: 0x6e16ea20, 0x3d133: 0x6e240820, + 0x3d134: 0x6e240a20, 0x3d135: 0x6e35ae20, 0x3d136: 0x6e35b020, 0x3d137: 0x6e44b220, + 0x3d138: 0x6cb69a20, 0x3d139: 0x6d156020, 0x3d13a: 0x6d156220, 0x3d13b: 0x6d998220, + 0x3d13c: 0x6df23820, 0x3d13d: 0x6d435a20, 0x3d13e: 0x6e16ee20, 0x3d13f: 0x6e3b1c20, + // Block 0xf45, offset 0x3d140 + 0x3d140: 0x6d437c20, 0x3d141: 0x6d707020, 0x3d142: 0x6d99a020, 0x3d143: 0x6dda2e20, + 0x3d144: 0x6e170820, 0x3d145: 0x6d43d420, 0x3d146: 0x6d43d620, 0x3d147: 0x6d70be20, + 0x3d148: 0x6d70c020, 0x3d149: 0x6e06d220, 0x3d14a: 0x6e173e20, 0x3d14b: 0x6e244420, + 0x3d14c: 0x6c8a4e20, 0x3d14d: 0x6d15d220, 0x3d14e: 0x6dbce620, 0x3d14f: 0x6e06e820, + 0x3d150: 0x6e35d620, 0x3d151: 0x6c428420, 0x3d152: 0x6c8a5020, 0x3d153: 0x6ce73a20, + 0x3d154: 0x6d43fe20, 0x3d155: 0x6d440020, 0x3d156: 0x6d9a0220, 0x3d157: 0x6d15f020, + 0x3d158: 0x6d441020, 0x3d159: 0x6ddad820, 0x3d15a: 0x6e070420, 0x3d15b: 0x6e176420, + 0x3d15c: 0x6e3b3420, 0x3d15d: 0x6d163c20, 0x3d15e: 0x6d447020, 0x3d15f: 0x6d9aae20, + 0x3d160: 0x6d9ab020, 0x3d161: 0x6dbd6820, 0x3d162: 0x6ddb3a20, 0x3d163: 0x6ddb3c20, + 0x3d164: 0x6df33620, 0x3d165: 0x6e074420, 0x3d166: 0x6e074620, 0x3d167: 0x6e17a820, + 0x3d168: 0x6e248e20, 0x3d169: 0x6e35f020, 0x3d16a: 0x6c634c20, 0x3d16b: 0x6c8a6420, + 0x3d16c: 0x6cb6c820, 0x3d16d: 0x6cb6ca20, 0x3d16e: 0x6ce77020, 0x3d16f: 0x6ce77220, + 0x3d170: 0x6ce77420, 0x3d171: 0x6ce77620, 0x3d172: 0x6d164c20, 0x3d173: 0x6d164e20, + 0x3d174: 0x6d447820, 0x3d175: 0x6d447a20, 0x3d176: 0x6d447c20, 0x3d177: 0x6d716a20, + 0x3d178: 0x6d9aba20, 0x3d179: 0x6dbd6a20, 0x3d17a: 0x6e17ac20, 0x3d17b: 0x6d167e20, + 0x3d17c: 0x6d44b420, 0x3d17d: 0x6dbdb620, 0x3d17e: 0x6ddb8220, 0x3d17f: 0x6ddb8420, + // Block 0xf46, offset 0x3d180 + 0x3d180: 0x6df37220, 0x3d181: 0x6df37420, 0x3d182: 0x6df37620, 0x3d183: 0x6e249e20, + 0x3d184: 0x6e24a020, 0x3d185: 0x6e2e7620, 0x3d186: 0x6e35fe20, 0x3d187: 0x6c428a20, + 0x3d188: 0x6cb6d420, 0x3d189: 0x6ce79620, 0x3d18a: 0x6d168620, 0x3d18b: 0x6dbdba20, + 0x3d18c: 0x6dbdbe20, 0x3d18d: 0x6ce7d620, 0x3d18e: 0x6d16f220, 0x3d18f: 0x6d451820, + 0x3d190: 0x6d451a20, 0x3d191: 0x6d451c20, 0x3d192: 0x6d451e20, 0x3d193: 0x6d71fc20, + 0x3d194: 0x6dbe3c20, 0x3d195: 0x6dbe3e20, 0x3d196: 0x6dbe4020, 0x3d197: 0x6dbe4220, + 0x3d198: 0x6ddbf820, 0x3d199: 0x6df3e020, 0x3d19a: 0x6df3e220, 0x3d19b: 0x6e07c020, + 0x3d19c: 0x6e24d820, 0x3d19d: 0x6e24da20, 0x3d19e: 0x6c15d820, 0x3d19f: 0x6c289420, + 0x3d1a0: 0x6c289620, 0x3d1a1: 0x6c42a820, 0x3d1a2: 0x6c42aa20, 0x3d1a3: 0x6c42ac20, + 0x3d1a4: 0x6c637a20, 0x3d1a5: 0x6c637c20, 0x3d1a6: 0x6c8a8620, 0x3d1a7: 0x6c8a8820, + 0x3d1a8: 0x6c8a8a20, 0x3d1a9: 0x6cb70820, 0x3d1aa: 0x6cb70a20, 0x3d1ab: 0x6ce7e420, + 0x3d1ac: 0x6ce7e620, 0x3d1ad: 0x6ce7e820, 0x3d1ae: 0x6ce7ea20, 0x3d1af: 0x6ce7ec20, + 0x3d1b0: 0x6d170220, 0x3d1b1: 0x6d170420, 0x3d1b2: 0x6d720420, 0x3d1b3: 0x6d720620, + 0x3d1b4: 0x6d9b8e20, 0x3d1b5: 0x6e07c420, 0x3d1b6: 0x6d453220, 0x3d1b7: 0x6d9b9e20, + 0x3d1b8: 0x6dbe4e20, 0x3d1b9: 0x6df3ea20, 0x3d1ba: 0x6e07c820, 0x3d1bb: 0x6e361820, + 0x3d1bc: 0x6d722020, 0x3d1bd: 0x6d722220, 0x3d1be: 0x6dbe6420, 0x3d1bf: 0x6ddc1420, + // Block 0xf47, offset 0x3d1c0 + 0x3d1c0: 0x6e07d420, 0x3d1c1: 0x6e07d620, 0x3d1c2: 0x6e183020, 0x3d1c3: 0x6e24e220, + 0x3d1c4: 0x6e44be20, 0x3d1c5: 0x6d173020, 0x3d1c6: 0x6d45a420, 0x3d1c7: 0x6d45a620, + 0x3d1c8: 0x6d45a820, 0x3d1c9: 0x6d45aa20, 0x3d1ca: 0x6d9c2e20, 0x3d1cb: 0x6ddc9e20, + 0x3d1cc: 0x6ddca020, 0x3d1cd: 0x6ddca220, 0x3d1ce: 0x6ddca420, 0x3d1cf: 0x6df47c20, + 0x3d1d0: 0x6df47e20, 0x3d1d1: 0x6df48020, 0x3d1d2: 0x6e086220, 0x3d1d3: 0x6e086420, + 0x3d1d4: 0x6e086620, 0x3d1d5: 0x6e086820, 0x3d1d6: 0x6e086a20, 0x3d1d7: 0x6e254220, + 0x3d1d8: 0x6e2ee220, 0x3d1d9: 0x6e364020, 0x3d1da: 0x6e41b420, 0x3d1db: 0x6c15e020, + 0x3d1dc: 0x6c28a220, 0x3d1dd: 0x6c28a420, 0x3d1de: 0x6c42d620, 0x3d1df: 0x6c42d820, + 0x3d1e0: 0x6c63a620, 0x3d1e1: 0x6c63a820, 0x3d1e2: 0x6c8aa820, 0x3d1e3: 0x6c8aaa20, + 0x3d1e4: 0x6c8aac20, 0x3d1e5: 0x6cb72820, 0x3d1e6: 0x6cb72a20, 0x3d1e7: 0x6cb72c20, + 0x3d1e8: 0x6ce82620, 0x3d1e9: 0x6ce82820, 0x3d1ea: 0x6d174220, 0x3d1eb: 0x6d174420, + 0x3d1ec: 0x6d174620, 0x3d1ed: 0x6d45b220, 0x3d1ee: 0x6d45b420, 0x3d1ef: 0x6d72b020, + 0x3d1f0: 0x6d9c3220, 0x3d1f1: 0x6e189020, 0x3d1f2: 0x6d72e020, 0x3d1f3: 0x6ddcd620, + 0x3d1f4: 0x6ddcd820, 0x3d1f5: 0x6ce84020, 0x3d1f6: 0x6d72ec20, 0x3d1f7: 0x6d9c7820, + 0x3d1f8: 0x6cb73820, 0x3d1f9: 0x6d178820, 0x3d1fa: 0x6d178a20, 0x3d1fb: 0x6d463a20, + 0x3d1fc: 0x6d734220, 0x3d1fd: 0x6d9cbe20, 0x3d1fe: 0x6dbf5020, 0x3d1ff: 0x6dbf5220, + // Block 0xf48, offset 0x3d200 + 0x3d200: 0x6ddd3420, 0x3d201: 0x6ddd3620, 0x3d202: 0x6df4f820, 0x3d203: 0x6e18e620, + 0x3d204: 0x6d464c20, 0x3d205: 0x6d735220, 0x3d206: 0x6e190420, 0x3d207: 0x6e439e20, + 0x3d208: 0x6cb74220, 0x3d209: 0x6d17c220, 0x3d20a: 0x6d738420, 0x3d20b: 0x6d9d0c20, + 0x3d20c: 0x6dbf8c20, 0x3d20d: 0x6dbf8e20, 0x3d20e: 0x6e193220, 0x3d20f: 0x6d17de20, + 0x3d210: 0x6d46b420, 0x3d211: 0x6d740620, 0x3d212: 0x6d740820, 0x3d213: 0x6d9da220, + 0x3d214: 0x6d9da420, 0x3d215: 0x6d9da620, 0x3d216: 0x6d9da820, 0x3d217: 0x6d9daa20, + 0x3d218: 0x6dc02a20, 0x3d219: 0x6dc02c20, 0x3d21a: 0x6dc02e20, 0x3d21b: 0x6dc03020, + 0x3d21c: 0x6dc03220, 0x3d21d: 0x6dc03420, 0x3d21e: 0x6dc03620, 0x3d21f: 0x6dc03820, + 0x3d220: 0x6dde2620, 0x3d221: 0x6dde2820, 0x3d222: 0x6dde2a20, 0x3d223: 0x6dde2c20, + 0x3d224: 0x6df61420, 0x3d225: 0x6df61620, 0x3d226: 0x6df61820, 0x3d227: 0x6df61a20, + 0x3d228: 0x6e09e020, 0x3d229: 0x6e09e220, 0x3d22a: 0x6e09e420, 0x3d22b: 0x6e19e620, + 0x3d22c: 0x6e19e820, 0x3d22d: 0x6e19ea20, 0x3d22e: 0x6e19ec20, 0x3d22f: 0x6e19ee20, + 0x3d230: 0x6e266420, 0x3d231: 0x6e266620, 0x3d232: 0x6e266820, 0x3d233: 0x6e266a20, + 0x3d234: 0x6e266c20, 0x3d235: 0x6e266e20, 0x3d236: 0x6e267020, 0x3d237: 0x6e2fce20, + 0x3d238: 0x6e2fd020, 0x3d239: 0x6e2fd220, 0x3d23a: 0x6e2fd420, 0x3d23b: 0x6e2fd620, + 0x3d23c: 0x6e2fd820, 0x3d23d: 0x6e370820, 0x3d23e: 0x6e370a20, 0x3d23f: 0x6e370c20, + // Block 0xf49, offset 0x3d240 + 0x3d240: 0x6e370e20, 0x3d241: 0x6e371020, 0x3d242: 0x6e3be220, 0x3d243: 0x6e3be420, + 0x3d244: 0x6e3f8420, 0x3d245: 0x6e43be20, 0x3d246: 0x6e458a20, 0x3d247: 0x6e466220, + 0x3d248: 0x6cb74c20, 0x3d249: 0x6cb74e20, 0x3d24a: 0x6cb75020, 0x3d24b: 0x6ce87e20, + 0x3d24c: 0x6ce88020, 0x3d24d: 0x6ce88220, 0x3d24e: 0x6d17fc20, 0x3d24f: 0x6d17fe20, + 0x3d250: 0x6d180020, 0x3d251: 0x6d180220, 0x3d252: 0x6c8ac220, 0x3d253: 0x6d46dc20, + 0x3d254: 0x6d46de20, 0x3d255: 0x6d46e020, 0x3d256: 0x6d46e220, 0x3d257: 0x6d46e420, + 0x3d258: 0x6d46e620, 0x3d259: 0x6d743020, 0x3d25a: 0x6d743220, 0x3d25b: 0x6d743420, + 0x3d25c: 0x6d9dd620, 0x3d25d: 0x6d9dd820, 0x3d25e: 0x6d9dda20, 0x3d25f: 0x6d9ddc20, + 0x3d260: 0x6d9dde20, 0x3d261: 0x6d9de020, 0x3d262: 0x6dc05e20, 0x3d263: 0x6dc06020, + 0x3d264: 0x6dc06220, 0x3d265: 0x6dc06420, 0x3d266: 0x6dde3c20, 0x3d267: 0x6df63220, + 0x3d268: 0x6df63420, 0x3d269: 0x6e09f420, 0x3d26a: 0x6e09f620, 0x3d26b: 0x6e1a0220, + 0x3d26c: 0x6e267620, 0x3d26d: 0x6e2fde20, 0x3d26e: 0x6ce88e20, 0x3d26f: 0x6d74d620, + 0x3d270: 0x6d74d820, 0x3d271: 0x6d74da20, 0x3d272: 0x6d74dc20, 0x3d273: 0x6d9eae20, + 0x3d274: 0x6d9eb020, 0x3d275: 0x6d9eb220, 0x3d276: 0x6d9eb420, 0x3d277: 0x6d9eb620, + 0x3d278: 0x6dc12a20, 0x3d279: 0x6dc12c20, 0x3d27a: 0x6dc12e20, 0x3d27b: 0x6dc13020, + 0x3d27c: 0x6ddedc20, 0x3d27d: 0x6ddede20, 0x3d27e: 0x6ddee020, 0x3d27f: 0x6ddee220, + // Block 0xf4a, offset 0x3d280 + 0x3d280: 0x6ddee420, 0x3d281: 0x6df71e20, 0x3d282: 0x6df72020, 0x3d283: 0x6df72220, + 0x3d284: 0x6df72420, 0x3d285: 0x6df72620, 0x3d286: 0x6df72820, 0x3d287: 0x6df72a20, + 0x3d288: 0x6df72c20, 0x3d289: 0x6e0acc20, 0x3d28a: 0x6e0ace20, 0x3d28b: 0x6e0ad020, + 0x3d28c: 0x6e1aba20, 0x3d28d: 0x6e1abc20, 0x3d28e: 0x6e1abe20, 0x3d28f: 0x6e1ac020, + 0x3d290: 0x6e272c20, 0x3d291: 0x6e309e20, 0x3d292: 0x6e30a020, 0x3d293: 0x6e30a220, + 0x3d294: 0x6e30a420, 0x3d295: 0x6e30a620, 0x3d296: 0x6e378820, 0x3d297: 0x6e3c3020, + 0x3d298: 0x6e3fb820, 0x3d299: 0x6e459e20, 0x3d29a: 0x6c63be20, 0x3d29b: 0x6c63c020, + 0x3d29c: 0x6c63c220, 0x3d29d: 0x6c63c420, 0x3d29e: 0x6c63c620, 0x3d29f: 0x6c8ae020, + 0x3d2a0: 0x6c8ae220, 0x3d2a1: 0x6c8ae420, 0x3d2a2: 0x6c8ae620, 0x3d2a3: 0x6c8ae820, + 0x3d2a4: 0x6c8aea20, 0x3d2a5: 0x6cb77620, 0x3d2a6: 0x6cb77820, 0x3d2a7: 0x6cb77a20, + 0x3d2a8: 0x6cb77c20, 0x3d2a9: 0x6cb77e20, 0x3d2aa: 0x6cb78020, 0x3d2ab: 0x6ce8a620, + 0x3d2ac: 0x6ce8a820, 0x3d2ad: 0x6ce8aa20, 0x3d2ae: 0x6ce8ac20, 0x3d2af: 0x6ce8ae20, + 0x3d2b0: 0x6d184a20, 0x3d2b1: 0x6d184c20, 0x3d2b2: 0x6d184e20, 0x3d2b3: 0x6d185020, + 0x3d2b4: 0x6d185220, 0x3d2b5: 0x6d185420, 0x3d2b6: 0x6d473820, 0x3d2b7: 0x6d473a20, + 0x3d2b8: 0x6d473c20, 0x3d2b9: 0x6d473e20, 0x3d2ba: 0x6d474020, 0x3d2bb: 0x6d474220, + 0x3d2bc: 0x6d474420, 0x3d2bd: 0x6d74fa20, 0x3d2be: 0x6d74fc20, 0x3d2bf: 0x6d9ec220, + // Block 0xf4b, offset 0x3d2c0 + 0x3d2c0: 0x6d9ec420, 0x3d2c1: 0x6d9ec620, 0x3d2c2: 0x6d9ec820, 0x3d2c3: 0x6dc14020, + 0x3d2c4: 0x6dc14220, 0x3d2c5: 0x6ddeee20, 0x3d2c6: 0x6df73420, 0x3d2c7: 0x6dc14620, + 0x3d2c8: 0x6ddef820, 0x3d2c9: 0x6e0aea20, 0x3d2ca: 0x6d9eda20, 0x3d2cb: 0x6d186020, + 0x3d2cc: 0x6d752e20, 0x3d2cd: 0x6dc16c20, 0x3d2ce: 0x6ddf2620, 0x3d2cf: 0x6e30c620, + 0x3d2d0: 0x6df79820, 0x3d2d1: 0x6cb79220, 0x3d2d2: 0x6ce8b220, 0x3d2d3: 0x6d476220, + 0x3d2d4: 0x6d756020, 0x3d2d5: 0x6dc18a20, 0x3d2d6: 0x6dc19220, 0x3d2d7: 0x6df7a220, + 0x3d2d8: 0x6d757c20, 0x3d2d9: 0x6e0b8620, 0x3d2da: 0x6e0b8820, 0x3d2db: 0x6e1b5e20, + 0x3d2dc: 0x6d9f7420, 0x3d2dd: 0x6df7f420, 0x3d2de: 0x6e3c7820, 0x3d2df: 0x6dc1f620, + 0x3d2e0: 0x6d75ac20, 0x3d2e1: 0x6e27c420, 0x3d2e2: 0x6d477e20, 0x3d2e3: 0x6e3c9020, + 0x3d2e4: 0x6ddfea20, 0x3d2e5: 0x6e1bde20, 0x3d2e6: 0x6e283420, 0x3d2e7: 0x6e427220, + 0x3d2e8: 0x6ce8c620, 0x3d2e9: 0x6d478c20, 0x3d2ea: 0x6d478e20, 0x3d2eb: 0x6d75be20, + 0x3d2ec: 0x6d9f9620, 0x3d2ed: 0x6d9f9820, 0x3d2ee: 0x6dc24020, 0x3d2ef: 0x6ddffe20, + 0x3d2f0: 0x6e1be020, 0x3d2f1: 0x6e318020, 0x3d2f2: 0x6d75c020, 0x3d2f3: 0x6ce8c820, + 0x3d2f4: 0x6e451220, + // Block 0xf4c, offset 0x3d300 + 0x3d300: 0x6c00f420, 0x3d301: 0x6c0ae820, 0x3d302: 0x6c15fe20, 0x3d303: 0x6d189620, + 0x3d304: 0x6c011820, 0x3d305: 0x6c0b6620, 0x3d306: 0x6c060c20, 0x3d307: 0x6c2a2820, + 0x3d308: 0x6c2a2a20, 0x3d309: 0x6c656c20, 0x3d30a: 0x6c8c6420, 0x3d30b: 0x6ce9e020, + 0x3d30c: 0x6c446a20, 0x3d30d: 0x6c448e20, 0x3d30e: 0x6c44d020, 0x3d30f: 0x6c8cbc20, + 0x3d310: 0x6c454c20, 0x3d311: 0x6ceac020, 0x3d312: 0x6c18be20, 0x3d313: 0x6c2bd220, + 0x3d314: 0x6c45cc20, 0x3d315: 0x6c190220, 0x3d316: 0x6c676c20, 0x3d317: 0x6c676e20, + 0x3d318: 0x6c0e9420, 0x3d319: 0x6c47da20, 0x3d31a: 0x6d1cea20, 0x3d31b: 0x6d4ab420, + 0x3d31c: 0x6da17c20, 0x3d31d: 0x6dc3da20, 0x3d31e: 0x6e1c7220, 0x3d31f: 0x6cbd8420, + 0x3d320: 0x6d1df020, 0x3d321: 0x6d78fe20, 0x3d322: 0x6c0f2a20, 0x3d323: 0x6c1b8820, + 0x3d324: 0x6c6ae820, 0x3d325: 0x6d793620, 0x3d326: 0x6c1c6020, 0x3d327: 0x6c4a1620, + 0x3d328: 0x6c4a1820, 0x3d329: 0x6c6bd620, 0x3d32a: 0x6c6bd820, 0x3d32b: 0x6c6bda20, + 0x3d32c: 0x6cbf4020, 0x3d32d: 0x6d1f2620, 0x3d32e: 0x6d4cb420, 0x3d32f: 0x6d4cc620, + 0x3d330: 0x6d1faa20, 0x3d331: 0x6d4d2020, 0x3d332: 0x6c102620, 0x3d333: 0x6c109020, + 0x3d334: 0x6c4bca20, 0x3d335: 0x6c6de020, 0x3d336: 0x6c964c20, 0x3d337: 0x6c964e20, + 0x3d338: 0x6c4d3a20, 0x3d339: 0x6c1ffa20, 0x3d33a: 0x6c352c20, 0x3d33b: 0x6c502820, + 0x3d33c: 0x6cc66a20, 0x3d33d: 0x6cf51a20, 0x3d33e: 0x6d24e420, 0x3d33f: 0x6dc6b420, + // Block 0xf4d, offset 0x3d340 + 0x3d340: 0x6c9b6c20, 0x3d341: 0x6cf5cc20, 0x3d342: 0x6c515820, 0x3d343: 0x6c515a20, + 0x3d344: 0x6c738a20, 0x3d345: 0x6c73bc20, 0x3d346: 0x6cc88020, 0x3d347: 0x6cc88220, + 0x3d348: 0x6c376220, 0x3d349: 0x6c754420, 0x3d34a: 0x6c754620, 0x3d34b: 0x6d27fc20, + 0x3d34c: 0x6d27fe20, 0x3d34d: 0x6d554c20, 0x3d34e: 0x6d554e20, 0x3d34f: 0x6d555020, + 0x3d350: 0x6d80ce20, 0x3d351: 0x6da6f020, 0x3d352: 0x6dc84a20, 0x3d353: 0x6cf92020, + 0x3d354: 0x6d55c820, 0x3d355: 0x6c098820, 0x3d356: 0x6c12e820, 0x3d357: 0x6c77e820, + 0x3d358: 0x6ca0dc20, 0x3d359: 0x6cfbd020, 0x3d35a: 0x6cfbd220, 0x3d35b: 0x6cfbd420, + 0x3d35c: 0x6d580820, 0x3d35d: 0x6d82fa20, 0x3d35e: 0x6de56e20, 0x3d35f: 0x6c78c820, + 0x3d360: 0x6ca1ca20, 0x3d361: 0x6d2bd820, 0x3d362: 0x6c569420, 0x3d363: 0x6c3b3620, + 0x3d364: 0x6ca2d420, 0x3d365: 0x6c3baa20, 0x3d366: 0x6c7a7020, 0x3d367: 0x6cd15e20, + 0x3d368: 0x6d2d8420, 0x3d369: 0x6d5ab020, 0x3d36a: 0x6c580820, 0x3d36b: 0x6ca41820, + 0x3d36c: 0x6c7ba220, 0x3d36d: 0x6d5bd620, 0x3d36e: 0x6c7bd220, 0x3d36f: 0x6c3c7420, + 0x3d370: 0x6c597220, 0x3d371: 0x6d012e20, 0x3d372: 0x6c7cd420, 0x3d373: 0x6ca59020, + 0x3d374: 0x6c7e2c20, 0x3d375: 0x6ca6f220, 0x3d376: 0x6d883020, 0x3d377: 0x6ca77620, + 0x3d378: 0x6d042820, 0x3d379: 0x6c258820, 0x3d37a: 0x6e1f7c20, 0x3d37b: 0x6c259220, + 0x3d37c: 0x6ca7e620, 0x3d37d: 0x6d5fe820, 0x3d37e: 0x6d5fea20, 0x3d37f: 0x6d5fec20, + // Block 0xf4e, offset 0x3d380 + 0x3d380: 0x6daf1e20, 0x3d381: 0x6d617a20, 0x3d382: 0x6dcf7a20, 0x3d383: 0x6c5cc220, + 0x3d384: 0x6c80c220, 0x3d385: 0x6ca9e020, 0x3d386: 0x6cd85020, 0x3d387: 0x6daff220, + 0x3d388: 0x6c5d0a20, 0x3d389: 0x6c3e5a20, 0x3d38a: 0x6d36e220, 0x3d38b: 0x6cdaaa20, + 0x3d38c: 0x6c5f8e20, 0x3d38d: 0x6c5f9020, 0x3d38e: 0x6c84c220, 0x3d38f: 0x6cae1620, + 0x3d390: 0x6cae1820, 0x3d391: 0x6cae1a20, 0x3d392: 0x6d0bb420, 0x3d393: 0x6d0bb620, + 0x3d394: 0x6d39b620, 0x3d395: 0x6d65ee20, 0x3d396: 0x6d8fc220, 0x3d397: 0x6e01da20, + 0x3d398: 0x6d675620, 0x3d399: 0x6db4d820, 0x3d39a: 0x6cdef620, 0x3d39b: 0x6cdf0620, + 0x3d39c: 0x6e2c3a20, 0x3d39d: 0x6e221220, 0x3d39e: 0x6c14fe20, 0x3d39f: 0x6c26e420, + 0x3d3a0: 0x6c86c020, 0x3d3a1: 0x6c86c220, 0x3d3a2: 0x6ce04620, 0x3d3a3: 0x6def6620, + 0x3d3a4: 0x6c616420, 0x3d3a5: 0x6d3f6620, 0x3d3a6: 0x6db89c20, 0x3d3a7: 0x6c0a8a20, + 0x3d3a8: 0x6ce3ba20, 0x3d3a9: 0x6ce3bc20, 0x3d3aa: 0x6d95f820, 0x3d3ab: 0x6c27ea20, + 0x3d3ac: 0x6c88e820, 0x3d3ad: 0x6cb47220, 0x3d3ae: 0x6d12ba20, 0x3d3af: 0x6c626020, + 0x3d3b0: 0x6d41bc20, 0x3d3b1: 0x6dd8f820, 0x3d3b2: 0x6c27fe20, 0x3d3b3: 0x6c41fc20, + 0x3d3b4: 0x6c62a620, 0x3d3b5: 0x6c62a820, 0x3d3b6: 0x6c898020, 0x3d3b7: 0x6c898220, + 0x3d3b8: 0x6cb58020, 0x3d3b9: 0x6cb58220, 0x3d3ba: 0x6cb58420, 0x3d3bb: 0x6cb58620, + 0x3d3bc: 0x6ce57020, 0x3d3bd: 0x6d13f420, 0x3d3be: 0x6d41f820, 0x3d3bf: 0x6d41fa20, + // Block 0xf4f, offset 0x3d3c0 + 0x3d3c0: 0x6d6efe20, 0x3d3c1: 0x6df16220, 0x3d3c2: 0x6c420e20, 0x3d3c3: 0x6cb65e20, + 0x3d3c4: 0x6d70de20, 0x3d3c5: 0x6d15dc20, 0x3d3c6: 0x6c8a6620, 0x3d3c7: 0x6c428c20, + 0x3d3c8: 0x6c635a20, 0x3d3c9: 0x6c8a9220, 0x3d3ca: 0x6c42da20, 0x3d3cb: 0x6d45b620, + 0x3d3cc: 0x6d9c3420, 0x3d3cd: 0x6e19f020, 0x3d3ce: 0x6e371220, 0x3d3cf: 0x6ce88420, + 0x3d3d0: 0x6d180420, 0x3d3d1: 0x6dc06620, 0x3d3d2: 0x6df63620, 0x3d3d3: 0x6cb75420, + 0x3d3d4: 0x6d9eb820, 0x3d3d5: 0x6e272e20, 0x3d3d6: 0x6c63c820, 0x3d3d7: 0x6d750a20, + 0x3d3d8: 0x6ddfda20, 0x3d3d9: 0x6df85820, 0x3d3da: 0x6d188a20, 0x3d3db: 0x6e383e20, + 0x3d3dc: 0x6d9f9a20, 0x3d3dd: 0x6e441c20, + // Block 0xf50, offset 0x3d400 + 0x3d400: 0x6c15ea20, 0x3d401: 0x6c00fe20, 0x3d402: 0x6c000c20, 0x3d403: 0x6c0b4420, + 0x3d404: 0x6c16ba20, 0x3d405: 0x6c435e20, 0x3d406: 0x6c437820, 0x3d407: 0x6c645620, + 0x3d408: 0x6c8bba20, 0x3d409: 0x6cb81c20, 0x3d40a: 0x6d18fe20, 0x3d40b: 0x6d18ce20, + 0x3d40c: 0x6d9fac20, 0x3d40d: 0x6c0ccc20, 0x3d40e: 0x6c173820, 0x3d40f: 0x6c2a3220, + 0x3d410: 0x6e0c6420, 0x3d411: 0x6c2a5220, 0x3d412: 0x6c8c8020, 0x3d413: 0x6df89620, + 0x3d414: 0x6c02ce20, 0x3d415: 0x6c0c7820, 0x3d416: 0x6c0c7c20, 0x3d417: 0x6c02fe20, + 0x3d418: 0x6c65aa20, 0x3d419: 0x6c02ae20, 0x3d41a: 0x6c064a20, 0x3d41b: 0x6c179020, + 0x3d41c: 0x6dbc5420, 0x3d41d: 0x6c009a20, 0x3d41e: 0x6c015a20, 0x3d41f: 0x6c17da20, + 0x3d420: 0x6c2ae220, 0x3d421: 0x6c2b4a20, 0x3d422: 0x6cb95220, 0x3d423: 0x6cea4020, + 0x3d424: 0x6c0d3c20, 0x3d425: 0x6c455c20, 0x3d426: 0x6c456020, 0x3d427: 0x6cea9c20, + 0x3d428: 0x6c016420, 0x3d429: 0x6c06b820, 0x3d42a: 0x6c06ba20, 0x3d42b: 0x6c06c620, + 0x3d42c: 0x6c06d220, 0x3d42d: 0x6c2bac20, 0x3d42e: 0x6cb9f220, 0x3d42f: 0x6c18d420, + 0x3d430: 0x6c45e820, 0x3d431: 0x6c673020, 0x3d432: 0x6c673020, 0x3d433: 0x6c673020, + 0x3d434: 0x6c038e20, 0x3d435: 0x6c135e20, 0x3d436: 0x6c03a020, 0x3d437: 0x6c677e20, + 0x3d438: 0x6c8e0c20, 0x3d439: 0x6c074420, 0x3d43a: 0x6c075020, 0x3d43b: 0x6c0e3020, + 0x3d43c: 0x6c468620, 0x3d43d: 0x6c197e20, 0x3d43e: 0x6c199e20, 0x3d43f: 0x6c2c7e20, + // Block 0xf51, offset 0x3d440 + 0x3d440: 0x6c468e20, 0x3d441: 0x6c67e620, 0x3d442: 0x6c681820, 0x3d443: 0x6c8e9620, + 0x3d444: 0x6c8eb220, 0x3d445: 0x6cbaaa20, 0x3d446: 0x6cbaaa20, 0x3d447: 0x6cbad220, + 0x3d448: 0x6cbaf620, 0x3d449: 0x6cbb0620, 0x3d44a: 0x6ceb7620, 0x3d44b: 0x6d1cf220, + 0x3d44c: 0x6d1b7220, 0x3d44d: 0x6d1cf420, 0x3d44e: 0x6d1bb220, 0x3d44f: 0x6d49c620, + 0x3d450: 0x6c032820, 0x3d451: 0x6c0f0e20, 0x3d452: 0x6c486820, 0x3d453: 0x6c908220, + 0x3d454: 0x6c90b420, 0x3d455: 0x6c481220, 0x3d456: 0x6c6a6e20, 0x3d457: 0x6cbcb020, + 0x3d458: 0x6d4af820, 0x3d459: 0x6de13e20, 0x3d45a: 0x6c1b6c20, 0x3d45b: 0x6c916220, + 0x3d45c: 0x6c1b7420, 0x3d45d: 0x6c0f1e20, 0x3d45e: 0x6d1e1020, 0x3d45f: 0x6c91d420, + 0x3d460: 0x6c080620, 0x3d461: 0x6c2f9020, 0x3d462: 0x6c6b1820, 0x3d463: 0x6c6b3c20, + 0x3d464: 0x6c6b5420, 0x3d465: 0x6c495620, 0x3d466: 0x6c924e20, 0x3d467: 0x6cbdf220, + 0x3d468: 0x6cbe0e20, 0x3d469: 0x6d4c1220, 0x3d46a: 0x6de16420, 0x3d46b: 0x6de16420, + 0x3d46c: 0x6c0fdc20, 0x3d46d: 0x6c933820, 0x3d46e: 0x6cefa820, 0x3d46f: 0x6d1f5620, + 0x3d470: 0x6de19a20, 0x3d471: 0x6e3d2020, 0x3d472: 0x6c1cc220, 0x3d473: 0x6c4a9220, + 0x3d474: 0x6c114a20, 0x3d475: 0x6c01ac20, 0x3d476: 0x6c4abc20, 0x3d477: 0x6c941020, + 0x3d478: 0x6c01b620, 0x3d479: 0x6c311420, 0x3d47a: 0x6c1dd220, 0x3d47b: 0x6c6d7820, + 0x3d47c: 0x6cc0a820, 0x3d47d: 0x6c6d7c20, 0x3d47e: 0x6cf09a20, 0x3d47f: 0x6cc16a20, + // Block 0xf52, offset 0x3d480 + 0x3d480: 0x6d202220, 0x3d481: 0x6c272c20, 0x3d482: 0x6c954a20, 0x3d483: 0x6c08a020, + 0x3d484: 0x6cc17820, 0x3d485: 0x6c6e0020, 0x3d486: 0x6cc19820, 0x3d487: 0x6d4ea820, + 0x3d488: 0x6d7ae820, 0x3d489: 0x6e320a20, 0x3d48a: 0x6c4c6820, 0x3d48b: 0x6c4cac20, + 0x3d48c: 0x6c95e620, 0x3d48d: 0x6c95ec20, 0x3d48e: 0x6cc21820, 0x3d48f: 0x6d476820, + 0x3d490: 0x6c01d820, 0x3d491: 0x6c111220, 0x3d492: 0x6c111220, 0x3d493: 0x6c82fe20, + 0x3d494: 0x6c326a20, 0x3d495: 0x6c326a20, 0x3d496: 0x6c329a20, 0x3d497: 0x6d7ea620, + 0x3d498: 0x6e201a20, 0x3d499: 0x6c1ee020, 0x3d49a: 0x6c96ae20, 0x3d49b: 0x6c6f1420, + 0x3d49c: 0x6cc2ca20, 0x3d49d: 0x6c1f2220, 0x3d49e: 0x6c1f2c20, 0x3d49f: 0x6c1f6c20, + 0x3d4a0: 0x6c6fa220, 0x3d4a1: 0x6c4dbe20, 0x3d4a2: 0x6c4da620, 0x3d4a3: 0x6c6fc020, + 0x3d4a4: 0x6c97fe20, 0x3d4a5: 0x6c97a020, 0x3d4a6: 0x6d222420, 0x3d4a7: 0x6cf2ac20, + 0x3d4a8: 0x6cf2b020, 0x3d4a9: 0x6cf2ac20, 0x3d4aa: 0x6d226c20, 0x3d4ab: 0x6d4fb820, + 0x3d4ac: 0x6d7bcc20, 0x3d4ad: 0x6d4fd820, 0x3d4ae: 0x6d4fe820, 0x3d4af: 0x6da3f620, + 0x3d4b0: 0x6de28220, 0x3d4b1: 0x6de28c20, 0x3d4b2: 0x6c11c220, 0x3d4b3: 0x6c98ba20, + 0x3d4b4: 0x6c11e820, 0x3d4b5: 0x6c345020, 0x3d4b6: 0x6c349420, 0x3d4b7: 0x6c713820, + 0x3d4b8: 0x6c4fd020, 0x3d4b9: 0x6c711220, 0x3d4ba: 0x6c4f3420, 0x3d4bb: 0x6c990c20, + 0x3d4bc: 0x6c994220, 0x3d4bd: 0x6c722020, 0x3d4be: 0x6cc57a20, 0x3d4bf: 0x6cf41220, + // Block 0xf53, offset 0x3d4c0 + 0x3d4c0: 0x6cf51c20, 0x3d4c1: 0x6c998820, 0x3d4c2: 0x6d237420, 0x3d4c3: 0x6d510220, + 0x3d4c4: 0x6d23ee20, 0x3d4c5: 0x6d515a20, 0x3d4c6: 0x6d23e220, 0x3d4c7: 0x6de2ea20, + 0x3d4c8: 0x6c9ab020, 0x3d4c9: 0x6cf53820, 0x3d4ca: 0x6da53020, 0x3d4cb: 0x6c9b6e20, + 0x3d4cc: 0x6c739020, 0x3d4cd: 0x6c731620, 0x3d4ce: 0x6d7e3620, 0x3d4cf: 0x6cc7b820, + 0x3d4d0: 0x6cf5e620, 0x3d4d1: 0x6c50c220, 0x3d4d2: 0x6c448820, 0x3d4d3: 0x6c8c8820, + 0x3d4d4: 0x6cb8f420, 0x3d4d5: 0x6d258220, 0x3d4d6: 0x6c3e9420, 0x3d4d7: 0x6c3e7220, + 0x3d4d8: 0x6c73be20, 0x3d4d9: 0x6c9c2220, 0x3d4da: 0x6cf69620, 0x3d4db: 0x6c21ee20, + 0x3d4dc: 0x6c21d820, 0x3d4dd: 0x6c220c20, 0x3d4de: 0x6c365c20, 0x3d4df: 0x6c522420, + 0x3d4e0: 0x6c36a020, 0x3d4e1: 0x6c52c020, 0x3d4e2: 0x6c9c8820, 0x3d4e3: 0x6c750620, + 0x3d4e4: 0x6c9c9a20, 0x3d4e5: 0x6c740020, 0x3d4e6: 0x6cc95020, 0x3d4e7: 0x6cf6d620, + 0x3d4e8: 0x6cf70820, 0x3d4e9: 0x6d267820, 0x3d4ea: 0x6d53d620, 0x3d4eb: 0x6da63220, + 0x3d4ec: 0x6d801420, 0x3d4ed: 0x6da6f220, 0x3d4ee: 0x6e1db420, 0x3d4ef: 0x6c12b420, + 0x3d4f0: 0x6c756020, 0x3d4f1: 0x6d80d420, 0x3d4f2: 0x6e38d620, 0x3d4f3: 0x6cf90820, + 0x3d4f4: 0x6d285c20, 0x3d4f5: 0x6c9e2620, 0x3d4f6: 0x6c9e2820, 0x3d4f7: 0x6c9e2e20, + 0x3d4f8: 0x6c30b220, 0x3d4f9: 0x6d288c20, 0x3d4fa: 0x6c130620, 0x3d4fb: 0x6c393420, + 0x3d4fc: 0x6c38ac20, 0x3d4fd: 0x6c38c620, 0x3d4fe: 0x6c22c020, 0x3d4ff: 0x6c767220, + // Block 0xf54, offset 0x3d500 + 0x3d500: 0x6c546820, 0x3d501: 0x6c76b620, 0x3d502: 0x6c546e20, 0x3d503: 0x6c769a20, + 0x3d504: 0x6c76b820, 0x3d505: 0x6c76d220, 0x3d506: 0x6c771820, 0x3d507: 0x6c545420, + 0x3d508: 0x6ccc3a20, 0x3d509: 0x6cccb620, 0x3d50a: 0x6cfa0020, 0x3d50b: 0x6cccf220, + 0x3d50c: 0x6cfa8620, 0x3d50d: 0x6d29d220, 0x3d50e: 0x6c9f8020, 0x3d50f: 0x6d568820, + 0x3d510: 0x6d571a20, 0x3d511: 0x6d577a20, 0x3d512: 0x6d580a20, 0x3d513: 0x6dfbe420, + 0x3d514: 0x6de4d620, 0x3d515: 0x6de4d020, 0x3d516: 0x6e0f0220, 0x3d517: 0x6e0f1420, + 0x3d518: 0x6c23a220, 0x3d519: 0x6c239620, 0x3d51a: 0x6c554420, 0x3d51b: 0x6cb8ea20, + 0x3d51c: 0x6cfc0420, 0x3d51d: 0x6cce4a20, 0x3d51e: 0x6d582220, 0x3d51f: 0x6d838420, + 0x3d520: 0x6e443420, 0x3d521: 0x6da93020, 0x3d522: 0x6cfd5420, 0x3d523: 0x6c790420, + 0x3d524: 0x6ccf7820, 0x3d525: 0x6d2c1c20, 0x3d526: 0x6c243420, 0x3d527: 0x6cfdfc20, + 0x3d528: 0x6de60820, 0x3d529: 0x6c04fa20, 0x3d52a: 0x6c246c20, 0x3d52b: 0x6c3b5620, + 0x3d52c: 0x6c79bc20, 0x3d52d: 0x6c79bc20, 0x3d52e: 0x6cfe7820, 0x3d52f: 0x6cfea220, + 0x3d530: 0x6d2d0620, 0x3d531: 0x6d5a3420, 0x3d532: 0x6de63620, 0x3d533: 0x6c57d820, + 0x3d534: 0x6cd1a420, 0x3d535: 0x6c585a20, 0x3d536: 0x6c3be620, 0x3d537: 0x6cffb820, + 0x3d538: 0x6ca3e620, 0x3d539: 0x6cf15e20, 0x3d53a: 0x6d00b220, 0x3d53b: 0x6dab0a20, + 0x3d53c: 0x6e104820, 0x3d53d: 0x6c3c7020, 0x3d53e: 0x6c594e20, 0x3d53f: 0x6d868020, + // Block 0xf55, offset 0x3d540 + 0x3d540: 0x6c3c8820, 0x3d541: 0x6c3c8e20, 0x3d542: 0x6c3c8c20, 0x3d543: 0x6c59e420, + 0x3d544: 0x6c7c7e20, 0x3d545: 0x6c7c5e20, 0x3d546: 0x6c7c6020, 0x3d547: 0x6c7c6020, + 0x3d548: 0x6cd36020, 0x3d549: 0x6cd34020, 0x3d54a: 0x6d5c4620, 0x3d54b: 0x6d013a20, + 0x3d54c: 0x6c13ee20, 0x3d54d: 0x6c3cd620, 0x3d54e: 0x6ca5f620, 0x3d54f: 0x6d027820, + 0x3d550: 0x6d5d2820, 0x3d551: 0x6dac1020, 0x3d552: 0x6c3d1e20, 0x3d553: 0x6c7dd220, + 0x3d554: 0x6cd4fa20, 0x3d555: 0x6d30e620, 0x3d556: 0x6d30ce20, 0x3d557: 0x6c7e5e20, + 0x3d558: 0x6c5b3020, 0x3d559: 0x6d5e0420, 0x3d55a: 0x6d314e20, 0x3d55b: 0x6d885420, + 0x3d55c: 0x6cd5c620, 0x3d55d: 0x6d5eba20, 0x3d55e: 0x6d5eba20, 0x3d55f: 0x6d322e20, + 0x3d560: 0x6d323420, 0x3d561: 0x6d32de20, 0x3d562: 0x6d5f3420, 0x3d563: 0x6d894a20, + 0x3d564: 0x6d5efe20, 0x3d565: 0x6dae2820, 0x3d566: 0x6d8a5e20, 0x3d567: 0x6daece20, + 0x3d568: 0x6daee820, 0x3d569: 0x6dce7220, 0x3d56a: 0x6c5c6620, 0x3d56b: 0x6c3dc620, + 0x3d56c: 0x6cd78420, 0x3d56d: 0x6d608020, 0x3d56e: 0x6d342620, 0x3d56f: 0x6d60e220, + 0x3d570: 0x6daf6c20, 0x3d571: 0x6e399620, 0x3d572: 0x6c80d020, 0x3d573: 0x6d619e20, + 0x3d574: 0x6cd86420, 0x3d575: 0x6d073a20, 0x3d576: 0x6d8bc020, 0x3d577: 0x6e33b420, + 0x3d578: 0x6caa3220, 0x3d579: 0x6dcfe420, 0x3d57a: 0x6c3e3620, 0x3d57b: 0x6d624620, + 0x3d57c: 0x6dd02420, 0x3d57d: 0x6cd91e20, 0x3d57e: 0x6d628a20, 0x3d57f: 0x6db0a220, + // Block 0xf56, offset 0x3d580 + 0x3d580: 0x6c21a420, 0x3d581: 0x6c3e6a20, 0x3d582: 0x6c3e9e20, 0x3d583: 0x6c823c20, + 0x3d584: 0x6cd97a20, 0x3d585: 0x6cd98820, 0x3d586: 0x6ceed220, 0x3d587: 0x6d367820, + 0x3d588: 0x6d369420, 0x3d589: 0x6d538a20, 0x3d58a: 0x6da5b220, 0x3d58b: 0x6c82fe20, + 0x3d58c: 0x6cda9c20, 0x3d58d: 0x6d114c20, 0x3d58e: 0x6cdac220, 0x3d58f: 0x6c265420, + 0x3d590: 0x6c264820, 0x3d591: 0x6c3f5620, 0x3d592: 0x6c185020, 0x3d593: 0x6c3f7e20, + 0x3d594: 0x6c3f8220, 0x3d595: 0x6c3f9420, 0x3d596: 0x6c5eb620, 0x3d597: 0x6c5f1c20, + 0x3d598: 0x6c5eb420, 0x3d599: 0x6cac7420, 0x3d59a: 0x6c840620, 0x3d59b: 0x6cae1e20, + 0x3d59c: 0x6cac7620, 0x3d59d: 0x6cad0c20, 0x3d59e: 0x6cdb6e20, 0x3d59f: 0x6cdbee20, + 0x3d5a0: 0x6c84c420, 0x3d5a1: 0x6cdb3620, 0x3d5a2: 0x6cdb3a20, 0x3d5a3: 0x6cdb5820, + 0x3d5a4: 0x6cdc0c20, 0x3d5a5: 0x6d386a20, 0x3d5a6: 0x6d0a7820, 0x3d5a7: 0x6db1fa20, + 0x3d5a8: 0x6d0bbc20, 0x3d5a9: 0x6d642820, 0x3d5aa: 0x6d646c20, 0x3d5ab: 0x6d90ac20, + 0x3d5ac: 0x6d8e4820, 0x3d5ad: 0x6db27620, 0x3d5ae: 0x6e006820, 0x3d5af: 0x6e128020, + 0x3d5b0: 0x6dd1a220, 0x3d5b1: 0x6e12c220, 0x3d5b2: 0x6e20a820, 0x3d5b3: 0x6c5f9620, + 0x3d5b4: 0x6d0bc020, 0x3d5b5: 0x6db39a20, 0x3d5b6: 0x6dd29a20, 0x3d5b7: 0x6c852c20, + 0x3d5b8: 0x6cdd7820, 0x3d5b9: 0x6d0c2420, 0x3d5ba: 0x6cdd9c20, 0x3d5bb: 0x6d900a20, + 0x3d5bc: 0x6d3a1c20, 0x3d5bd: 0x6d3b0e20, 0x3d5be: 0x6d901420, 0x3d5bf: 0x6d8ffa20, + // Block 0xf57, offset 0x3d5c0 + 0x3d5c0: 0x6d668a20, 0x3d5c1: 0x6debe220, 0x3d5c2: 0x6debf020, 0x3d5c3: 0x6d912820, + 0x3d5c4: 0x6c14d220, 0x3d5c5: 0x6cafa620, 0x3d5c6: 0x6cdeaa20, 0x3d5c7: 0x6d0d0620, + 0x3d5c8: 0x6d3b2c20, 0x3d5c9: 0x6d3b6e20, 0x3d5ca: 0x6c8c8420, 0x3d5cb: 0x6e430c20, + 0x3d5cc: 0x6c867c20, 0x3d5cd: 0x6cb06c20, 0x3d5ce: 0x6cdf6620, 0x3d5cf: 0x6d0e4620, + 0x3d5d0: 0x6d925c20, 0x3d5d1: 0x6e2c4c20, 0x3d5d2: 0x6c26ec20, 0x3d5d3: 0x6cb18c20, + 0x3d5d4: 0x6cb1a420, 0x3d5d5: 0x6ce0de20, 0x3d5d6: 0x6e34b020, 0x3d5d7: 0x6c873020, + 0x3d5d8: 0x6d93fa20, 0x3d5d9: 0x6d76c820, 0x3d5da: 0x6ce1c620, 0x3d5db: 0x6d101620, + 0x3d5dc: 0x6d103a20, 0x3d5dd: 0x6c458420, 0x3d5de: 0x6c879a20, 0x3d5df: 0x6d951e20, + 0x3d5e0: 0x6d6cc620, 0x3d5e1: 0x6d95c220, 0x3d5e2: 0x6c153c20, 0x3d5e3: 0x6c625420, + 0x3d5e4: 0x6d121420, 0x3d5e5: 0x6cb46620, 0x3d5e6: 0x6d401a20, 0x3d5e7: 0x6d12da20, + 0x3d5e8: 0x6d6e0a20, 0x3d5e9: 0x6d6e0c20, 0x3d5ea: 0x6d41c020, 0x3d5eb: 0x6df0d620, + 0x3d5ec: 0x6e04bc20, 0x3d5ed: 0x6e3ac220, 0x3d5ee: 0x6ce59420, 0x3d5ef: 0x6d420c20, + 0x3d5f0: 0x6dbb3420, 0x3d5f1: 0x6dbb7220, 0x3d5f2: 0x6d6f8c20, 0x3d5f3: 0x6ce69420, + 0x3d5f4: 0x6d7a8620, 0x3d5f5: 0x6dd9cc20, 0x3d5f6: 0x6df20220, 0x3d5f7: 0x6d706220, + 0x3d5f8: 0x6dbc7220, 0x3d5f9: 0x6df24220, 0x3d5fa: 0x6e06d620, 0x3d5fb: 0x6df2ca20, + 0x3d5fc: 0x6ce74620, 0x3d5fd: 0x6d712e20, 0x3d5fe: 0x6d15fc20, 0x3d5ff: 0x6d15fc20, + // Block 0xf58, offset 0x3d600 + 0x3d600: 0x6d711820, 0x3d601: 0x6d449820, 0x3d602: 0x6c8a6820, 0x3d603: 0x6d44d220, + 0x3d604: 0x6d9b2620, 0x3d605: 0x6df3ee20, 0x3d606: 0x6d457020, 0x3d607: 0x6dbe8420, + 0x3d608: 0x6d72ba20, 0x3d609: 0x6d9c9020, 0x3d60a: 0x6e08b620, 0x3d60b: 0x6e09e620, + 0x3d60c: 0x6d745c20, 0x3d60d: 0x6dc07220, 0x3d60e: 0x6e0a0620, 0x3d60f: 0x6dc13220, + 0x3d610: 0x6e0a7420, 0x3d611: 0x6e267a20, 0x3d612: 0x6e1a6a20, 0x3d613: 0x6e421620, + 0x3d614: 0x6d751a20, 0x3d615: 0x6cb79420, 0x3d616: 0x6e0b4220, 0x3d617: 0x6ce8be20, + 0x3d618: 0x6c42e420, 0x3d619: 0x6e1b6620, 0x3d61a: 0x6d75a020, 0x3d61b: 0x6ddfac20, + 0x3d61c: 0x6d478020, 0x3d61d: 0x6e1bc220, +} + +// mainLookup: 16576 entries, 33152 bytes +// Block 0 is the null block. +var mainLookup = [16576]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0x0e0: 0x1f, 0x0e1: 0x20, 0x0e2: 0x21, 0x0e3: 0x22, 0x0e4: 0x23, 0x0e5: 0x24, 0x0e6: 0x25, 0x0e7: 0x26, + 0x0e8: 0x27, 0x0e9: 0x28, 0x0ea: 0x29, 0x0eb: 0x2a, 0x0ec: 0x2b, 0x0ed: 0x2c, 0x0ee: 0x2d, 0x0ef: 0x2e, + 0x0f0: 0x2f, 0x0f1: 0x30, 0x0f2: 0x31, 0x0f3: 0x32, 0x0f4: 0x33, 0x0f5: 0x34, 0x0f6: 0x35, 0x0f7: 0x36, + 0x0f8: 0x37, 0x0f9: 0x38, 0x0fa: 0x39, 0x0fb: 0x3a, 0x0fc: 0x3b, 0x0fd: 0x3c, 0x0fe: 0x3d, 0x0ff: 0x3e, + // Block 0x4, offset 0x100 + 0x100: 0x3f, 0x101: 0x40, 0x102: 0x41, 0x103: 0x42, 0x104: 0x43, 0x105: 0x44, 0x106: 0x45, 0x107: 0x46, + 0x108: 0x47, 0x109: 0x48, 0x10a: 0x49, 0x10b: 0x4a, 0x10c: 0x4b, 0x10d: 0x4c, 0x10e: 0x4d, 0x10f: 0x4e, + 0x110: 0x4f, 0x111: 0x50, 0x112: 0x51, 0x113: 0x52, 0x114: 0x53, 0x115: 0x54, 0x116: 0x55, 0x117: 0x56, + 0x118: 0x57, 0x119: 0x58, 0x11a: 0x59, 0x11b: 0x5a, 0x11c: 0x5b, 0x11d: 0x5c, 0x11e: 0x5d, 0x11f: 0x5e, + 0x120: 0x5f, 0x121: 0x60, 0x122: 0x61, 0x123: 0x62, 0x124: 0x63, 0x125: 0x64, 0x126: 0x65, 0x127: 0x66, + 0x128: 0x67, 0x129: 0x68, 0x12a: 0x69, 0x12c: 0x6a, 0x12d: 0x6b, 0x12e: 0x6c, 0x12f: 0x6d, + 0x130: 0x6e, 0x131: 0x6f, 0x133: 0x70, 0x134: 0x71, 0x135: 0x72, 0x136: 0x73, 0x137: 0x74, + 0x138: 0x75, 0x139: 0x76, 0x13a: 0x77, 0x13b: 0x78, 0x13c: 0x79, 0x13d: 0x7a, 0x13e: 0x7b, 0x13f: 0x7c, + // Block 0x5, offset 0x140 + 0x140: 0x7d, 0x141: 0x7e, 0x142: 0x7f, 0x143: 0x80, 0x144: 0x81, 0x145: 0x82, 0x146: 0x83, 0x147: 0x84, + 0x148: 0x85, 0x149: 0x86, 0x14a: 0x87, 0x14b: 0x88, 0x14c: 0x89, 0x14d: 0x8a, 0x14e: 0x8b, 0x14f: 0x8c, + 0x150: 0x8d, 0x151: 0x8e, 0x152: 0x8f, 0x153: 0x90, 0x154: 0x91, 0x155: 0x92, 0x156: 0x93, 0x157: 0x94, + 0x158: 0x95, 0x159: 0x96, 0x15a: 0x97, 0x15b: 0x98, 0x15c: 0x99, 0x15d: 0x9a, 0x15e: 0x9b, 0x15f: 0x9c, + 0x160: 0x9d, 0x161: 0x9e, 0x162: 0x9f, 0x163: 0xa0, 0x164: 0xa1, 0x165: 0xa2, 0x166: 0xa3, 0x167: 0xa4, + 0x168: 0xa5, 0x169: 0xa6, 0x16a: 0xa7, 0x16b: 0xa8, 0x16c: 0xa9, 0x16d: 0xaa, + 0x170: 0xab, 0x171: 0xac, 0x172: 0xad, 0x173: 0xae, 0x174: 0xaf, 0x175: 0xb0, 0x176: 0xb1, 0x177: 0xb2, + 0x178: 0xb3, 0x17a: 0xb4, 0x17b: 0xb5, 0x17c: 0xb6, 0x17d: 0xb7, 0x17e: 0xb8, 0x17f: 0xb9, + // Block 0x6, offset 0x180 + 0x180: 0xba, 0x181: 0xbb, 0x182: 0xbc, 0x183: 0xbd, 0x184: 0xbe, 0x185: 0xbf, 0x186: 0xc0, 0x187: 0xc1, + 0x188: 0xc2, 0x189: 0xc3, 0x18a: 0xc4, 0x18b: 0xc5, 0x18c: 0xc6, 0x18d: 0xc7, 0x18e: 0xc8, 0x18f: 0xc9, + // Block 0x7, offset 0x1c0 + 0x1f7: 0xca, + // Block 0x8, offset 0x200 + 0x200: 0xcb, 0x201: 0xcc, 0x202: 0xcd, 0x203: 0xce, 0x204: 0xcf, 0x205: 0xd0, 0x206: 0xd1, 0x207: 0xd2, + 0x208: 0xd3, 0x209: 0xd4, 0x20a: 0xd5, 0x20b: 0xd6, 0x20c: 0xd7, 0x20d: 0xd8, 0x20e: 0xd9, 0x20f: 0xda, + 0x210: 0xdb, 0x211: 0xdc, 0x212: 0xdd, 0x213: 0xde, 0x214: 0xdf, 0x215: 0xe0, 0x216: 0xe1, 0x217: 0xe2, + 0x218: 0xe3, 0x219: 0xe4, 0x21a: 0xe5, 0x21b: 0xe6, 0x21c: 0xe7, 0x21d: 0xe8, 0x21e: 0xe9, 0x21f: 0xea, + 0x220: 0xeb, 0x221: 0xec, 0x222: 0xed, 0x223: 0xee, 0x224: 0xef, 0x225: 0xf0, 0x226: 0xf1, 0x227: 0xf2, + 0x228: 0xf3, 0x229: 0xf4, 0x22a: 0xf5, 0x22b: 0xf6, 0x22c: 0xf7, 0x22f: 0xf8, + // Block 0x9, offset 0x240 + 0x25e: 0xf9, 0x25f: 0xfa, + // Block 0xa, offset 0x280 + 0x2a4: 0xfb, 0x2a5: 0xfc, 0x2a6: 0xfd, 0x2a7: 0xfe, + 0x2a8: 0xff, 0x2a9: 0x100, 0x2aa: 0x101, 0x2ab: 0x102, 0x2ac: 0x103, 0x2ad: 0x104, 0x2ae: 0x105, 0x2af: 0x106, + 0x2b0: 0x107, 0x2b1: 0x108, 0x2b2: 0x109, 0x2b3: 0x10a, 0x2b4: 0x10b, 0x2b5: 0x10c, 0x2b6: 0x10d, 0x2b7: 0x10e, + 0x2b8: 0x10f, 0x2b9: 0x110, 0x2ba: 0x111, 0x2bb: 0x112, 0x2bc: 0x113, 0x2bd: 0x114, 0x2be: 0x115, 0x2bf: 0x116, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x117, 0x2c1: 0x118, 0x2c2: 0x119, 0x2c3: 0x11a, 0x2c4: 0x11b, 0x2c5: 0x11c, 0x2c6: 0x11d, 0x2c7: 0x11e, + 0x2ca: 0x11f, 0x2cb: 0x120, 0x2cc: 0x121, 0x2cd: 0x122, 0x2ce: 0x123, 0x2cf: 0x124, + 0x2d0: 0x125, 0x2d1: 0x126, 0x2d2: 0x127, + 0x2e0: 0x128, 0x2e1: 0x129, 0x2e4: 0x12a, 0x2e6: 0x12b, + 0x2e8: 0x12c, 0x2e9: 0x12d, 0x2ec: 0x12e, 0x2ed: 0x12f, + 0x2f0: 0x130, 0x2f1: 0x131, + 0x2f9: 0x132, + // Block 0xc, offset 0x300 + 0x300: 0x133, 0x301: 0x134, 0x302: 0x135, 0x303: 0x136, 0x304: 0x137, 0x305: 0x138, 0x306: 0x139, 0x307: 0x13a, + 0x31a: 0x13b, 0x31b: 0x13c, + // Block 0xd, offset 0x340 + 0x340: 0x13d, 0x341: 0x13e, 0x342: 0x13f, 0x343: 0x140, 0x344: 0x141, 0x345: 0x142, 0x346: 0x143, 0x347: 0x144, + 0x348: 0x145, 0x349: 0x146, 0x34a: 0x147, 0x34b: 0x148, 0x34c: 0x149, 0x34d: 0x14a, + 0x350: 0x14b, 0x351: 0x14c, + // Block 0xe, offset 0x380 + 0x380: 0x14d, 0x381: 0x14e, 0x382: 0x14f, 0x383: 0x150, 0x384: 0x151, 0x385: 0x152, 0x386: 0x153, 0x387: 0x154, + 0x388: 0x155, 0x389: 0x156, 0x38a: 0x157, 0x38b: 0x158, 0x38c: 0x159, 0x38d: 0x15a, 0x38e: 0x15b, 0x38f: 0x15c, + 0x390: 0x15d, + // Block 0xf, offset 0x3c0 + 0x3e0: 0x15e, 0x3e1: 0x15f, 0x3e2: 0x160, 0x3e3: 0x161, 0x3e4: 0x162, 0x3e5: 0x163, 0x3e6: 0x164, 0x3e7: 0x165, + 0x3e8: 0x166, + 0x3fc: 0x167, 0x3fd: 0x168, 0x3fe: 0x169, + // Block 0x10, offset 0x400 + 0x400: 0x16a, + // Block 0x11, offset 0x440 + 0x440: 0x16b, 0x441: 0x16c, 0x442: 0x16d, 0x443: 0x16e, 0x444: 0x16f, 0x445: 0x170, 0x446: 0x171, 0x447: 0x172, + 0x448: 0x173, 0x449: 0x174, 0x44c: 0x175, 0x44d: 0x176, + 0x450: 0x177, 0x451: 0x178, 0x452: 0x179, 0x453: 0x17a, 0x454: 0x17b, 0x455: 0x17c, 0x456: 0x17d, 0x457: 0x17e, + 0x458: 0x17f, 0x459: 0x180, 0x45a: 0x181, 0x45b: 0x182, 0x45c: 0x183, 0x45d: 0x184, 0x45e: 0x185, 0x45f: 0x186, + // Block 0x12, offset 0x480 + 0x4b8: 0x187, 0x4b9: 0x188, 0x4ba: 0x189, 0x4bb: 0x18a, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x18b, 0x4c1: 0x18c, 0x4c2: 0x18d, 0x4c3: 0x18e, 0x4c4: 0x18f, 0x4c5: 0x190, 0x4c6: 0x191, 0x4c7: 0x192, + 0x4c8: 0x193, 0x4c9: 0x194, 0x4cc: 0x195, 0x4cd: 0x196, 0x4ce: 0x197, 0x4cf: 0x198, + 0x4d0: 0x199, 0x4d1: 0x19a, 0x4d2: 0x19b, 0x4d3: 0x19c, 0x4d4: 0x19d, 0x4d5: 0x19e, 0x4d7: 0x19f, + 0x4d8: 0x1a0, 0x4d9: 0x1a1, 0x4da: 0x1a2, 0x4db: 0x1a3, 0x4dc: 0x1a4, 0x4dd: 0x1a5, + // Block 0x14, offset 0x500 + 0x520: 0x1a6, 0x521: 0x1a7, 0x522: 0x1a8, 0x523: 0x1a9, 0x524: 0x1aa, 0x525: 0x1ab, 0x526: 0x1ac, 0x527: 0x1ad, + 0x528: 0x1ae, + // Block 0x15, offset 0x540 + 0x550: 0x09, 0x551: 0x0a, 0x552: 0x0b, 0x553: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, + // Block 0x16, offset 0x580 + 0x580: 0x1af, 0x581: 0x1b0, 0x584: 0x1b0, 0x585: 0x1b0, 0x586: 0x1b0, 0x587: 0x1b1, + // Block 0x17, offset 0x5c0 + 0x5e0: 0x14, + // Block 0x18, offset 0x600 + 0x602: 0x01, 0x603: 0x02, 0x604: 0x03, 0x605: 0x04, 0x606: 0x05, 0x607: 0x06, + 0x608: 0x07, 0x609: 0x08, 0x60a: 0x09, 0x60b: 0x0a, 0x60c: 0x0b, 0x60d: 0x0c, 0x60e: 0x0d, 0x60f: 0x0e, + 0x610: 0x0f, 0x611: 0x10, 0x612: 0x11, 0x613: 0x12, 0x614: 0x13, 0x615: 0x14, 0x616: 0x15, 0x617: 0x16, + 0x618: 0x17, 0x619: 0x18, 0x61a: 0x19, 0x61b: 0x1a, 0x61c: 0x1b, 0x61d: 0x1c, 0x61e: 0x1d, 0x61f: 0x1e, + 0x620: 0x01, 0x621: 0x02, 0x622: 0x03, 0x623: 0x04, 0x624: 0x05, + 0x62a: 0x06, 0x62d: 0x07, 0x62f: 0x08, + 0x630: 0x13, 0x633: 0x15, + // Block 0x19, offset 0x640 + 0x640: 0x3f, 0x641: 0x40, 0x642: 0x41, 0x643: 0x42, 0x644: 0x43, 0x645: 0x44, 0x646: 0x45, 0x647: 0x46, + 0x648: 0x47, 0x649: 0x48, 0x64a: 0x49, 0x64b: 0x4a, 0x64c: 0x4b, 0x64d: 0x4c, 0x64e: 0x4d, 0x64f: 0x4e, + 0x650: 0x4f, 0x651: 0x50, 0x652: 0x51, 0x653: 0x52, 0x654: 0x53, 0x655: 0x54, 0x656: 0x55, 0x657: 0x56, + 0x658: 0x57, 0x659: 0x58, 0x65a: 0x59, 0x65b: 0x5a, 0x65c: 0x5b, 0x65d: 0x5c, 0x65e: 0x5d, 0x65f: 0x5e, + 0x660: 0x5f, 0x661: 0x60, 0x662: 0x61, 0x663: 0x62, 0x664: 0x63, 0x665: 0x64, 0x666: 0x65, 0x667: 0x66, + 0x668: 0x67, 0x669: 0x68, 0x66a: 0x69, 0x66c: 0x6a, 0x66d: 0x6b, 0x66e: 0x6c, 0x66f: 0x6d, + 0x670: 0x6e, 0x671: 0x6f, 0x673: 0x70, 0x674: 0x71, 0x675: 0x72, 0x676: 0x73, 0x677: 0x74, + 0x678: 0x1ba, 0x679: 0x1bb, 0x67a: 0x1bc, 0x67b: 0x1bd, 0x67c: 0x79, 0x67d: 0x7a, 0x67e: 0x7b, 0x67f: 0x7c, + // Block 0x1a, offset 0x680 + 0x680: 0x7d, 0x681: 0x7e, 0x682: 0x7f, 0x683: 0x80, 0x684: 0x1be, 0x685: 0x1bf, 0x686: 0x83, 0x687: 0x84, + 0x688: 0x85, 0x689: 0x86, 0x68a: 0x87, 0x68b: 0x88, 0x68c: 0x89, 0x68d: 0x8a, 0x68e: 0x8b, 0x68f: 0x8c, + 0x690: 0x8d, 0x691: 0x8e, 0x692: 0x1c0, 0x693: 0x90, 0x694: 0x91, 0x695: 0x92, 0x696: 0x93, 0x697: 0x94, + 0x698: 0x95, 0x699: 0x96, 0x69a: 0x97, 0x69b: 0x98, 0x69c: 0x99, 0x69d: 0x9a, 0x69e: 0x9b, 0x69f: 0x9c, + 0x6a0: 0x9d, 0x6a1: 0x9e, 0x6a2: 0x9f, 0x6a3: 0xa0, 0x6a4: 0xa1, 0x6a5: 0xa2, 0x6a6: 0xa3, 0x6a7: 0xa4, + 0x6a8: 0xa5, 0x6a9: 0xa6, 0x6aa: 0xa7, 0x6ab: 0xa8, 0x6ac: 0xa9, 0x6ad: 0xaa, + 0x6b0: 0xab, 0x6b1: 0xac, 0x6b2: 0xad, 0x6b3: 0xae, 0x6b4: 0xaf, 0x6b5: 0xb0, 0x6b6: 0xb1, 0x6b7: 0xb2, + 0x6b8: 0xb3, 0x6ba: 0xb4, 0x6bb: 0xb5, 0x6bc: 0xb6, 0x6bd: 0xb7, 0x6be: 0xb8, 0x6bf: 0xb9, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0xba, 0x6c1: 0xbb, 0x6c2: 0xbc, 0x6c3: 0xbd, 0x6c4: 0xbe, 0x6c5: 0xbf, 0x6c6: 0xc0, 0x6c7: 0xc1, + 0x6c8: 0xc2, 0x6c9: 0xc3, 0x6ca: 0xc4, 0x6cb: 0x1c1, 0x6cc: 0xc6, 0x6cd: 0x1c2, 0x6ce: 0x1c3, 0x6cf: 0x1c4, + // Block 0x1c, offset 0x700 + 0x724: 0xfb, 0x725: 0xfc, 0x726: 0xfd, 0x727: 0xfe, + 0x728: 0xff, 0x729: 0x100, 0x72a: 0x101, 0x72b: 0x102, 0x72c: 0x1c5, 0x72d: 0x104, 0x72e: 0x105, 0x72f: 0x106, + 0x730: 0x107, 0x731: 0x108, 0x732: 0x109, 0x733: 0x10a, 0x734: 0x10b, 0x735: 0x10c, 0x736: 0x10d, 0x737: 0x10e, + 0x738: 0x10f, 0x739: 0x110, 0x73a: 0x111, 0x73b: 0x112, 0x73c: 0x113, 0x73d: 0x114, 0x73e: 0x115, 0x73f: 0x116, + // Block 0x1d, offset 0x740 + 0x740: 0x18b, 0x741: 0x18c, 0x742: 0x18d, 0x743: 0x18e, 0x744: 0x1c6, 0x745: 0x1c7, 0x746: 0x191, 0x747: 0x192, + 0x748: 0x193, 0x749: 0x194, 0x74c: 0x195, 0x74d: 0x196, 0x74e: 0x197, 0x74f: 0x198, + 0x750: 0x199, 0x751: 0x19a, 0x752: 0x19b, 0x753: 0x19c, 0x754: 0x19d, 0x755: 0x19e, 0x757: 0x19f, + 0x758: 0x1a0, 0x759: 0x1a1, 0x75a: 0x1a2, 0x75b: 0x1a3, 0x75c: 0x1a4, 0x75d: 0x1a5, + // Block 0x1e, offset 0x780 + 0x790: 0x09, 0x791: 0x0a, 0x792: 0x0b, 0x793: 0x0c, 0x796: 0x0d, + 0x79b: 0x0e, 0x79d: 0x0f, 0x79e: 0x10, 0x79f: 0x1b, + 0x7af: 0x12, + // Block 0x1f, offset 0x7c0 + 0x7c2: 0x01, 0x7c3: 0x1b4, 0x7c4: 0x1b5, 0x7c5: 0x1b6, 0x7c6: 0x1b7, 0x7c7: 0x1b8, + 0x7c8: 0x1b9, 0x7c9: 0x08, 0x7ca: 0x09, 0x7cb: 0x0a, 0x7cc: 0x0b, 0x7cd: 0x0c, 0x7ce: 0x0d, 0x7cf: 0x0e, + 0x7d0: 0x0f, 0x7d1: 0x10, 0x7d2: 0x11, 0x7d3: 0x12, 0x7d4: 0x13, 0x7d5: 0x14, 0x7d6: 0x15, 0x7d7: 0x16, + 0x7d8: 0x17, 0x7d9: 0x18, 0x7da: 0x19, 0x7db: 0x1a, 0x7dc: 0x1b, 0x7dd: 0x1c, 0x7de: 0x1d, 0x7df: 0x1e, + 0x7e0: 0x01, 0x7e1: 0x17, 0x7e2: 0x18, 0x7e3: 0x19, 0x7e4: 0x05, + 0x7ea: 0x06, 0x7ed: 0x07, 0x7ef: 0x1a, + 0x7f0: 0x1c, 0x7f3: 0x15, + // Block 0x20, offset 0x800 + 0x802: 0x01, 0x803: 0x02, 0x804: 0x03, 0x805: 0x1c8, 0x806: 0x05, 0x807: 0x06, + 0x808: 0x07, 0x809: 0x08, 0x80a: 0x09, 0x80b: 0x0a, 0x80c: 0x0b, 0x80d: 0x0c, 0x80e: 0x0d, 0x80f: 0x0e, + 0x810: 0x0f, 0x811: 0x10, 0x812: 0x11, 0x813: 0x12, 0x814: 0x13, 0x815: 0x14, 0x816: 0x15, 0x817: 0x16, + 0x818: 0x17, 0x819: 0x18, 0x81a: 0x19, 0x81b: 0x1a, 0x81c: 0x1b, 0x81d: 0x1c, 0x81e: 0x1d, 0x81f: 0x1e, + 0x820: 0x01, 0x821: 0x02, 0x822: 0x03, 0x823: 0x04, 0x824: 0x05, + 0x82a: 0x06, 0x82d: 0x07, 0x82f: 0x08, + 0x830: 0x13, 0x833: 0x15, + // Block 0x21, offset 0x840 + 0x864: 0xfb, 0x865: 0xfc, 0x866: 0xfd, 0x867: 0xfe, + 0x868: 0xff, 0x869: 0x100, 0x86a: 0x101, 0x86b: 0x102, 0x86c: 0x103, 0x86d: 0x104, 0x86e: 0x105, 0x86f: 0x1cb, + 0x870: 0x1cc, 0x871: 0x1cd, 0x872: 0x1ce, 0x873: 0x1cf, 0x874: 0x1d0, 0x875: 0x10c, 0x876: 0x10d, 0x877: 0x10e, + 0x878: 0x10f, 0x879: 0x110, 0x87a: 0x1d1, 0x87b: 0x1d2, 0x87c: 0x113, 0x87d: 0x114, 0x87e: 0x115, 0x87f: 0x116, + // Block 0x22, offset 0x880 + 0x882: 0x01, 0x883: 0x02, 0x884: 0x03, 0x885: 0x04, 0x886: 0x05, 0x887: 0x06, + 0x888: 0x07, 0x889: 0x08, 0x88a: 0x09, 0x88b: 0x0a, 0x88c: 0x0b, 0x88d: 0x0c, 0x88e: 0x0d, 0x88f: 0x0e, + 0x890: 0x0f, 0x891: 0x10, 0x892: 0x11, 0x893: 0x12, 0x894: 0x13, 0x895: 0x14, 0x896: 0x15, 0x897: 0x16, + 0x898: 0x1c9, 0x899: 0x1ca, 0x89a: 0x19, 0x89b: 0x1a, 0x89c: 0x1b, 0x89d: 0x1c, 0x89e: 0x1d, 0x89f: 0x1e, + 0x8a0: 0x01, 0x8a1: 0x02, 0x8a2: 0x03, 0x8a3: 0x04, 0x8a4: 0x05, + 0x8aa: 0x06, 0x8ad: 0x07, 0x8af: 0x1f, + 0x8b0: 0x13, 0x8b3: 0x15, + // Block 0x23, offset 0x8c0 + 0x8e0: 0x1f, 0x8e1: 0x20, 0x8e2: 0x21, 0x8e3: 0x22, 0x8e4: 0x23, 0x8e5: 0x24, 0x8e6: 0x1d3, 0x8e7: 0x1d4, + 0x8e8: 0x27, 0x8e9: 0x28, 0x8ea: 0x29, 0x8eb: 0x2a, 0x8ec: 0x2b, 0x8ed: 0x2c, 0x8ee: 0x2d, 0x8ef: 0x2e, + 0x8f0: 0x2f, 0x8f1: 0x30, 0x8f2: 0x31, 0x8f3: 0x32, 0x8f4: 0x33, 0x8f5: 0x34, 0x8f6: 0x35, 0x8f7: 0x36, + 0x8f8: 0x37, 0x8f9: 0x38, 0x8fa: 0x39, 0x8fb: 0x3a, 0x8fc: 0x3b, 0x8fd: 0x3c, 0x8fe: 0x3d, 0x8ff: 0x3e, + // Block 0x24, offset 0x900 + 0x902: 0x01, 0x903: 0x02, 0x904: 0x03, 0x905: 0x04, 0x906: 0x05, 0x907: 0x06, + 0x908: 0x07, 0x909: 0x08, 0x90a: 0x09, 0x90b: 0x0a, 0x90c: 0x0b, 0x90d: 0x0c, 0x90e: 0x0d, 0x90f: 0x0e, + 0x910: 0x0f, 0x911: 0x10, 0x912: 0x11, 0x913: 0x12, 0x914: 0x13, 0x915: 0x14, 0x916: 0x15, 0x917: 0x16, + 0x918: 0x17, 0x919: 0x18, 0x91a: 0x19, 0x91b: 0x1a, 0x91c: 0x1b, 0x91d: 0x1c, 0x91e: 0x1d, 0x91f: 0x1e, + 0x920: 0x21, 0x921: 0x02, 0x922: 0x03, 0x923: 0x04, 0x924: 0x05, + 0x92a: 0x06, 0x92d: 0x07, 0x92f: 0x08, + 0x930: 0x13, 0x933: 0x15, + // Block 0x25, offset 0x940 + 0x940: 0x3f, 0x941: 0x40, 0x942: 0x41, 0x943: 0x42, 0x944: 0x43, 0x945: 0x44, 0x946: 0x45, 0x947: 0x46, + 0x948: 0x47, 0x949: 0x48, 0x94a: 0x49, 0x94b: 0x4a, 0x94c: 0x4b, 0x94d: 0x4c, 0x94e: 0x4d, 0x94f: 0x4e, + 0x950: 0x4f, 0x951: 0x50, 0x952: 0x51, 0x953: 0x52, 0x954: 0x53, 0x955: 0x54, 0x956: 0x55, 0x957: 0x56, + 0x958: 0x57, 0x959: 0x58, 0x95a: 0x59, 0x95b: 0x5a, 0x95c: 0x5b, 0x95d: 0x5c, 0x95e: 0x5d, 0x95f: 0x5e, + 0x960: 0x5f, 0x961: 0x60, 0x962: 0x61, 0x963: 0x62, 0x964: 0x63, 0x965: 0x64, 0x966: 0x65, 0x967: 0x66, + 0x968: 0x67, 0x969: 0x68, 0x96a: 0x69, 0x96c: 0x6a, 0x96d: 0x6b, 0x96e: 0x6c, 0x96f: 0x6d, + 0x970: 0x6e, 0x971: 0x6f, 0x973: 0x70, 0x974: 0x71, 0x975: 0x72, 0x976: 0x73, 0x977: 0x74, + 0x978: 0x1de, 0x979: 0x1df, 0x97a: 0x1e0, 0x97b: 0x1e1, 0x97c: 0x79, 0x97d: 0x7a, 0x97e: 0x7b, 0x97f: 0x7c, + // Block 0x26, offset 0x980 + 0x980: 0x7d, 0x981: 0x7e, 0x982: 0x7f, 0x983: 0x80, 0x984: 0x81, 0x985: 0x1e2, 0x986: 0x83, 0x987: 0x84, + 0x988: 0x85, 0x989: 0x86, 0x98a: 0x87, 0x98b: 0x88, 0x98c: 0x89, 0x98d: 0x8a, 0x98e: 0x8b, 0x98f: 0x8c, + 0x990: 0x8d, 0x991: 0x8e, 0x992: 0x1e3, 0x993: 0x90, 0x994: 0x91, 0x995: 0x92, 0x996: 0x93, 0x997: 0x94, + 0x998: 0x95, 0x999: 0x96, 0x99a: 0x97, 0x99b: 0x98, 0x99c: 0x99, 0x99d: 0x9a, 0x99e: 0x9b, 0x99f: 0x9c, + 0x9a0: 0x9d, 0x9a1: 0x9e, 0x9a2: 0x9f, 0x9a3: 0xa0, 0x9a4: 0xa1, 0x9a5: 0xa2, 0x9a6: 0xa3, 0x9a7: 0xa4, + 0x9a8: 0xa5, 0x9a9: 0xa6, 0x9aa: 0xa7, 0x9ab: 0xa8, 0x9ac: 0xa9, 0x9ad: 0xaa, + 0x9b0: 0xab, 0x9b1: 0xac, 0x9b2: 0xad, 0x9b3: 0xae, 0x9b4: 0xaf, 0x9b5: 0xb0, 0x9b6: 0xb1, 0x9b7: 0xb2, + 0x9b8: 0xb3, 0x9ba: 0xb4, 0x9bb: 0xb5, 0x9bc: 0xb6, 0x9bd: 0xb7, 0x9be: 0xb8, 0x9bf: 0xb9, + // Block 0x27, offset 0x9c0 + 0x9c0: 0xba, 0x9c1: 0xbb, 0x9c2: 0xbc, 0x9c3: 0xbd, 0x9c4: 0xbe, 0x9c5: 0xbf, 0x9c6: 0xc0, 0x9c7: 0xc1, + 0x9c8: 0xc2, 0x9c9: 0xc3, 0x9ca: 0xc4, 0x9cb: 0xc5, 0x9cc: 0xc6, 0x9cd: 0x1e4, 0x9ce: 0xc8, 0x9cf: 0x1e5, + // Block 0x28, offset 0xa00 + 0xa00: 0x18b, 0xa01: 0x18c, 0xa02: 0x18d, 0xa03: 0x18e, 0xa04: 0x1e6, 0xa05: 0x190, 0xa06: 0x191, 0xa07: 0x192, + 0xa08: 0x193, 0xa09: 0x194, 0xa0c: 0x195, 0xa0d: 0x196, 0xa0e: 0x197, 0xa0f: 0x198, + 0xa10: 0x199, 0xa11: 0x19a, 0xa12: 0x19b, 0xa13: 0x19c, 0xa14: 0x19d, 0xa15: 0x19e, 0xa17: 0x19f, + 0xa18: 0x1a0, 0xa19: 0x1a1, 0xa1a: 0x1a2, 0xa1b: 0x1a3, 0xa1c: 0x1a4, 0xa1d: 0x1a5, + // Block 0x29, offset 0xa40 + 0xa50: 0x09, 0xa51: 0x0a, 0xa52: 0x0b, 0xa53: 0x0c, 0xa56: 0x0d, + 0xa5b: 0x0e, 0xa5d: 0x0f, 0xa5e: 0x10, 0xa5f: 0x26, + 0xa6f: 0x12, + // Block 0x2a, offset 0xa80 + 0xa82: 0x01, 0xa83: 0x1d7, 0xa84: 0x1d8, 0xa85: 0x1d9, 0xa86: 0x1da, 0xa87: 0x1db, + 0xa88: 0x1dc, 0xa89: 0x1dd, 0xa8a: 0x09, 0xa8b: 0x0a, 0xa8c: 0x0b, 0xa8d: 0x0c, 0xa8e: 0x0d, 0xa8f: 0x0e, + 0xa90: 0x0f, 0xa91: 0x10, 0xa92: 0x11, 0xa93: 0x12, 0xa94: 0x13, 0xa95: 0x14, 0xa96: 0x15, 0xa97: 0x16, + 0xa98: 0x17, 0xa99: 0x18, 0xa9a: 0x19, 0xa9b: 0x1a, 0xa9c: 0x1b, 0xa9d: 0x1c, 0xa9e: 0x1d, 0xa9f: 0x1e, + 0xaa0: 0x01, 0xaa1: 0x23, 0xaa2: 0x24, 0xaa3: 0x25, 0xaa4: 0x05, + 0xaaa: 0x06, 0xaad: 0x07, 0xaaf: 0x08, + 0xab0: 0x27, 0xab3: 0x15, + // Block 0x2b, offset 0xac0 + 0xac2: 0x01, 0xac3: 0x02, 0xac4: 0x03, 0xac5: 0x04, 0xac6: 0x05, 0xac7: 0x06, + 0xac8: 0x07, 0xac9: 0x08, 0xaca: 0x09, 0xacb: 0x0a, 0xacc: 0x0b, 0xacd: 0x0c, 0xace: 0x0d, 0xacf: 0x0e, + 0xad0: 0x1e7, 0xad1: 0x1e8, 0xad2: 0x11, 0xad3: 0x12, 0xad4: 0x13, 0xad5: 0x14, 0xad6: 0x15, 0xad7: 0x16, + 0xad8: 0x17, 0xad9: 0x18, 0xada: 0x19, 0xadb: 0x1a, 0xadc: 0x1b, 0xadd: 0x1c, 0xade: 0x1d, 0xadf: 0x1e, + 0xae0: 0x01, 0xae1: 0x02, 0xae2: 0x03, 0xae3: 0x04, 0xae4: 0x05, + 0xaea: 0x06, 0xaed: 0x07, 0xaef: 0x08, + 0xaf0: 0x13, 0xaf3: 0x15, + // Block 0x2c, offset 0xb00 + 0xb20: 0x1f, 0xb21: 0x20, 0xb22: 0x21, 0xb23: 0x22, 0xb24: 0x23, 0xb25: 0x24, 0xb26: 0x1e9, 0xb27: 0x26, + 0xb28: 0x27, 0xb29: 0x28, 0xb2a: 0x29, 0xb2b: 0x2a, 0xb2c: 0x2b, 0xb2d: 0x2c, 0xb2e: 0x2d, 0xb2f: 0x2e, + 0xb30: 0x2f, 0xb31: 0x30, 0xb32: 0x31, 0xb33: 0x32, 0xb34: 0x33, 0xb35: 0x34, 0xb36: 0x35, 0xb37: 0x36, + 0xb38: 0x37, 0xb39: 0x38, 0xb3a: 0x39, 0xb3b: 0x3a, 0xb3c: 0x3b, 0xb3d: 0x3c, 0xb3e: 0x3d, 0xb3f: 0x3e, + // Block 0x2d, offset 0xb40 + 0xb42: 0x01, 0xb43: 0x02, 0xb44: 0x03, 0xb45: 0x04, 0xb46: 0x05, 0xb47: 0x06, + 0xb48: 0x07, 0xb49: 0x08, 0xb4a: 0x09, 0xb4b: 0x0a, 0xb4c: 0x0b, 0xb4d: 0x0c, 0xb4e: 0x0d, 0xb4f: 0x0e, + 0xb50: 0x0f, 0xb51: 0x10, 0xb52: 0x11, 0xb53: 0x12, 0xb54: 0x13, 0xb55: 0x14, 0xb56: 0x15, 0xb57: 0x16, + 0xb58: 0x17, 0xb59: 0x18, 0xb5a: 0x19, 0xb5b: 0x1a, 0xb5c: 0x1b, 0xb5d: 0x1c, 0xb5e: 0x1d, 0xb5f: 0x1e, + 0xb60: 0x2a, 0xb61: 0x02, 0xb62: 0x03, 0xb63: 0x04, 0xb64: 0x05, + 0xb6a: 0x06, 0xb6d: 0x07, 0xb6f: 0x08, + 0xb70: 0x13, 0xb73: 0x15, + // Block 0x2e, offset 0xb80 + 0xb82: 0x01, 0xb83: 0x02, 0xb84: 0x1ec, 0xb85: 0x1ed, 0xb86: 0x05, 0xb87: 0x06, + 0xb88: 0x07, 0xb89: 0x08, 0xb8a: 0x09, 0xb8b: 0x0a, 0xb8c: 0x0b, 0xb8d: 0x0c, 0xb8e: 0x0d, 0xb8f: 0x0e, + 0xb90: 0x0f, 0xb91: 0x10, 0xb92: 0x11, 0xb93: 0x12, 0xb94: 0x13, 0xb95: 0x14, 0xb96: 0x15, 0xb97: 0x16, + 0xb98: 0x17, 0xb99: 0x18, 0xb9a: 0x19, 0xb9b: 0x1a, 0xb9c: 0x1b, 0xb9d: 0x1c, 0xb9e: 0x1d, 0xb9f: 0x1e, + 0xba0: 0x01, 0xba1: 0x02, 0xba2: 0x03, 0xba3: 0x04, 0xba4: 0x05, + 0xbaa: 0x06, 0xbad: 0x07, 0xbaf: 0x08, + 0xbb0: 0x13, 0xbb3: 0x15, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x3f, 0xbc1: 0x40, 0xbc2: 0x41, 0xbc3: 0x42, 0xbc4: 0x43, 0xbc5: 0x44, 0xbc6: 0x45, 0xbc7: 0x46, + 0xbc8: 0x47, 0xbc9: 0x48, 0xbca: 0x49, 0xbcb: 0x4a, 0xbcc: 0x4b, 0xbcd: 0x4c, 0xbce: 0x4d, 0xbcf: 0x4e, + 0xbd0: 0x4f, 0xbd1: 0x50, 0xbd2: 0x51, 0xbd3: 0x52, 0xbd4: 0x53, 0xbd5: 0x54, 0xbd6: 0x55, 0xbd7: 0x56, + 0xbd8: 0x57, 0xbd9: 0x58, 0xbda: 0x59, 0xbdb: 0x5a, 0xbdc: 0x5b, 0xbdd: 0x5c, 0xbde: 0x5d, 0xbdf: 0x5e, + 0xbe0: 0x5f, 0xbe1: 0x60, 0xbe2: 0x61, 0xbe3: 0x62, 0xbe4: 0x63, 0xbe5: 0x64, 0xbe6: 0x65, 0xbe7: 0x66, + 0xbe8: 0x67, 0xbe9: 0x68, 0xbea: 0x69, 0xbec: 0x6a, 0xbed: 0x6b, 0xbee: 0x6c, 0xbef: 0x6d, + 0xbf0: 0x6e, 0xbf1: 0x6f, 0xbf3: 0x70, 0xbf4: 0x71, 0xbf5: 0x72, 0xbf6: 0x73, 0xbf7: 0x74, + 0xbf8: 0x75, 0xbf9: 0x1f2, 0xbfa: 0x77, 0xbfb: 0x78, 0xbfc: 0x79, 0xbfd: 0x7a, 0xbfe: 0x7b, 0xbff: 0x7c, + // Block 0x30, offset 0xc00 + 0xc02: 0x01, 0xc03: 0x02, 0xc04: 0x1f0, 0xc05: 0x1f1, 0xc06: 0x05, 0xc07: 0x06, + 0xc08: 0x07, 0xc09: 0x08, 0xc0a: 0x09, 0xc0b: 0x0a, 0xc0c: 0x0b, 0xc0d: 0x0c, 0xc0e: 0x0d, 0xc0f: 0x0e, + 0xc10: 0x0f, 0xc11: 0x10, 0xc12: 0x11, 0xc13: 0x12, 0xc14: 0x13, 0xc15: 0x14, 0xc16: 0x15, 0xc17: 0x16, + 0xc18: 0x17, 0xc19: 0x18, 0xc1a: 0x19, 0xc1b: 0x1a, 0xc1c: 0x1b, 0xc1d: 0x1c, 0xc1e: 0x1d, 0xc1f: 0x1e, + 0xc20: 0x01, 0xc21: 0x2d, 0xc22: 0x03, 0xc23: 0x04, 0xc24: 0x05, + 0xc2a: 0x06, 0xc2d: 0x07, 0xc2f: 0x08, + 0xc30: 0x13, 0xc33: 0x15, + // Block 0x31, offset 0xc40 + 0xc40: 0x3f, 0xc41: 0x40, 0xc42: 0x41, 0xc43: 0x42, 0xc44: 0x43, 0xc45: 0x44, 0xc46: 0x45, 0xc47: 0x46, + 0xc48: 0x47, 0xc49: 0x48, 0xc4a: 0x49, 0xc4b: 0x4a, 0xc4c: 0x4b, 0xc4d: 0x4c, 0xc4e: 0x4d, 0xc4f: 0x4e, + 0xc50: 0x4f, 0xc51: 0x50, 0xc52: 0x51, 0xc53: 0x52, 0xc54: 0x53, 0xc55: 0x54, 0xc56: 0x55, 0xc57: 0x56, + 0xc58: 0x57, 0xc59: 0x58, 0xc5a: 0x59, 0xc5b: 0x5a, 0xc5c: 0x5b, 0xc5d: 0x5c, 0xc5e: 0x5d, 0xc5f: 0x5e, + 0xc60: 0x5f, 0xc61: 0x60, 0xc62: 0x61, 0xc63: 0x62, 0xc64: 0x63, 0xc65: 0x64, 0xc66: 0x65, 0xc67: 0x66, + 0xc68: 0x67, 0xc69: 0x68, 0xc6a: 0x69, 0xc6c: 0x6a, 0xc6d: 0x6b, 0xc6e: 0x6c, 0xc6f: 0x6d, + 0xc70: 0x6e, 0xc71: 0x6f, 0xc73: 0x70, 0xc74: 0x71, 0xc75: 0x72, 0xc76: 0x1fc, 0xc77: 0x74, + 0xc78: 0x75, 0xc79: 0x1fd, 0xc7a: 0x77, 0xc7b: 0x78, 0xc7c: 0x79, 0xc7d: 0x7a, 0xc7e: 0x7b, 0xc7f: 0x7c, + // Block 0x32, offset 0xc80 + 0xc80: 0x7d, 0xc81: 0x7e, 0xc82: 0x7f, 0xc83: 0x80, 0xc84: 0x1fe, 0xc85: 0x82, 0xc86: 0x83, 0xc87: 0x84, + 0xc88: 0x85, 0xc89: 0x86, 0xc8a: 0x87, 0xc8b: 0x88, 0xc8c: 0x89, 0xc8d: 0x8a, 0xc8e: 0x8b, 0xc8f: 0x8c, + 0xc90: 0x8d, 0xc91: 0x8e, 0xc92: 0x8f, 0xc93: 0x90, 0xc94: 0x91, 0xc95: 0x92, 0xc96: 0x93, 0xc97: 0x94, + 0xc98: 0x95, 0xc99: 0x96, 0xc9a: 0x97, 0xc9b: 0x98, 0xc9c: 0x99, 0xc9d: 0x9a, 0xc9e: 0x9b, 0xc9f: 0x9c, + 0xca0: 0x9d, 0xca1: 0x9e, 0xca2: 0x9f, 0xca3: 0xa0, 0xca4: 0xa1, 0xca5: 0xa2, 0xca6: 0xa3, 0xca7: 0xa4, + 0xca8: 0xa5, 0xca9: 0xa6, 0xcaa: 0xa7, 0xcab: 0xa8, 0xcac: 0xa9, 0xcad: 0xaa, + 0xcb0: 0xab, 0xcb1: 0xac, 0xcb2: 0xad, 0xcb3: 0xae, 0xcb4: 0xaf, 0xcb5: 0xb0, 0xcb6: 0xb1, 0xcb7: 0xb2, + 0xcb8: 0xb3, 0xcba: 0xb4, 0xcbb: 0xb5, 0xcbc: 0xb6, 0xcbd: 0xb7, 0xcbe: 0xb8, 0xcbf: 0xb9, + // Block 0x33, offset 0xcc0 + 0xcc2: 0x01, 0xcc3: 0x1f7, 0xcc4: 0x1f8, 0xcc5: 0x1f9, 0xcc6: 0x05, 0xcc7: 0x1fa, + 0xcc8: 0x1fb, 0xcc9: 0x08, 0xcca: 0x09, 0xccb: 0x0a, 0xccc: 0x0b, 0xccd: 0x0c, 0xcce: 0x0d, 0xccf: 0x0e, + 0xcd0: 0x0f, 0xcd1: 0x10, 0xcd2: 0x11, 0xcd3: 0x12, 0xcd4: 0x13, 0xcd5: 0x14, 0xcd6: 0x15, 0xcd7: 0x16, + 0xcd8: 0x17, 0xcd9: 0x18, 0xcda: 0x19, 0xcdb: 0x1a, 0xcdc: 0x1b, 0xcdd: 0x1c, 0xcde: 0x1d, 0xcdf: 0x1e, + 0xce0: 0x01, 0xce1: 0x2f, 0xce2: 0x30, 0xce3: 0x04, 0xce4: 0x05, + 0xcea: 0x06, 0xced: 0x07, 0xcef: 0x08, + 0xcf0: 0x13, 0xcf3: 0x15, + // Block 0x34, offset 0xd00 + 0xd00: 0x3f, 0xd01: 0x40, 0xd02: 0x41, 0xd03: 0x42, 0xd04: 0x43, 0xd05: 0x44, 0xd06: 0x45, 0xd07: 0x46, + 0xd08: 0x47, 0xd09: 0x48, 0xd0a: 0x49, 0xd0b: 0x4a, 0xd0c: 0x4b, 0xd0d: 0x4c, 0xd0e: 0x4d, 0xd0f: 0x4e, + 0xd10: 0x4f, 0xd11: 0x50, 0xd12: 0x51, 0xd13: 0x52, 0xd14: 0x53, 0xd15: 0x54, 0xd16: 0x55, 0xd17: 0x56, + 0xd18: 0x57, 0xd19: 0x58, 0xd1a: 0x59, 0xd1b: 0x5a, 0xd1c: 0x5b, 0xd1d: 0x5c, 0xd1e: 0x5d, 0xd1f: 0x5e, + 0xd20: 0x5f, 0xd21: 0x60, 0xd22: 0x61, 0xd23: 0x62, 0xd24: 0x63, 0xd25: 0x64, 0xd26: 0x65, 0xd27: 0x66, + 0xd28: 0x67, 0xd29: 0x68, 0xd2a: 0x69, 0xd2c: 0x6a, 0xd2d: 0x6b, 0xd2e: 0x6c, 0xd2f: 0x6d, + 0xd30: 0x6e, 0xd31: 0x6f, 0xd33: 0x70, 0xd34: 0x71, 0xd35: 0x72, 0xd36: 0x73, 0xd37: 0x74, + 0xd38: 0x75, 0xd39: 0x204, 0xd3a: 0x77, 0xd3b: 0x78, 0xd3c: 0x79, 0xd3d: 0x7a, 0xd3e: 0x7b, 0xd3f: 0x7c, + // Block 0x35, offset 0xd40 + 0xd42: 0x01, 0xd43: 0x201, 0xd44: 0x03, 0xd45: 0x04, 0xd46: 0x05, 0xd47: 0x202, + 0xd48: 0x203, 0xd49: 0x08, 0xd4a: 0x09, 0xd4b: 0x0a, 0xd4c: 0x0b, 0xd4d: 0x0c, 0xd4e: 0x0d, 0xd4f: 0x0e, + 0xd50: 0x0f, 0xd51: 0x10, 0xd52: 0x11, 0xd53: 0x12, 0xd54: 0x13, 0xd55: 0x14, 0xd56: 0x15, 0xd57: 0x16, + 0xd58: 0x17, 0xd59: 0x18, 0xd5a: 0x19, 0xd5b: 0x1a, 0xd5c: 0x1b, 0xd5d: 0x1c, 0xd5e: 0x1d, 0xd5f: 0x1e, + 0xd60: 0x01, 0xd61: 0x32, 0xd62: 0x03, 0xd63: 0x04, 0xd64: 0x05, + 0xd6a: 0x06, 0xd6d: 0x07, 0xd6f: 0x08, + 0xd70: 0x13, 0xd73: 0x15, + // Block 0x36, offset 0xd80 + 0xda0: 0x1f, 0xda1: 0x20, 0xda2: 0x21, 0xda3: 0x22, 0xda4: 0x23, 0xda5: 0x24, 0xda6: 0x25, 0xda7: 0x26, + 0xda8: 0x27, 0xda9: 0x28, 0xdaa: 0x29, 0xdab: 0x2a, 0xdac: 0x2b, 0xdad: 0x2c, 0xdae: 0x2d, 0xdaf: 0x2e, + 0xdb0: 0x2f, 0xdb1: 0x30, 0xdb2: 0x31, 0xdb3: 0x32, 0xdb4: 0x33, 0xdb5: 0x34, 0xdb6: 0x35, 0xdb7: 0x36, + 0xdb8: 0x37, 0xdb9: 0x38, 0xdba: 0x39, 0xdbb: 0x3a, 0xdbc: 0x205, 0xdbd: 0x206, 0xdbe: 0x207, 0xdbf: 0x3e, + // Block 0x37, offset 0xdc0 + 0xdc2: 0x01, 0xdc3: 0x02, 0xdc4: 0x03, 0xdc5: 0x04, 0xdc6: 0x05, 0xdc7: 0x06, + 0xdc8: 0x07, 0xdc9: 0x08, 0xdca: 0x09, 0xdcb: 0x0a, 0xdcc: 0x0b, 0xdcd: 0x0c, 0xdce: 0x0d, 0xdcf: 0x0e, + 0xdd0: 0x0f, 0xdd1: 0x10, 0xdd2: 0x11, 0xdd3: 0x12, 0xdd4: 0x13, 0xdd5: 0x14, 0xdd6: 0x15, 0xdd7: 0x16, + 0xdd8: 0x17, 0xdd9: 0x18, 0xdda: 0x19, 0xddb: 0x1a, 0xddc: 0x1b, 0xddd: 0x1c, 0xdde: 0x1d, 0xddf: 0x1e, + 0xde0: 0x34, 0xde1: 0x02, 0xde2: 0x03, 0xde3: 0x04, 0xde4: 0x05, + 0xdea: 0x06, 0xded: 0x07, 0xdef: 0x08, + 0xdf0: 0x13, 0xdf3: 0x15, + // Block 0x38, offset 0xe00 + 0xe00: 0x3f, 0xe01: 0x40, 0xe02: 0x41, 0xe03: 0x42, 0xe04: 0x43, 0xe05: 0x44, 0xe06: 0x45, 0xe07: 0x46, + 0xe08: 0x47, 0xe09: 0x48, 0xe0a: 0x49, 0xe0b: 0x4a, 0xe0c: 0x4b, 0xe0d: 0x4c, 0xe0e: 0x4d, 0xe0f: 0x4e, + 0xe10: 0x4f, 0xe11: 0x50, 0xe12: 0x51, 0xe13: 0x52, 0xe14: 0x53, 0xe15: 0x54, 0xe16: 0x55, 0xe17: 0x56, + 0xe18: 0x57, 0xe19: 0x58, 0xe1a: 0x59, 0xe1b: 0x5a, 0xe1c: 0x5b, 0xe1d: 0x5c, 0xe1e: 0x5d, 0xe1f: 0x5e, + 0xe20: 0x5f, 0xe21: 0x60, 0xe22: 0x61, 0xe23: 0x62, 0xe24: 0x63, 0xe25: 0x64, 0xe26: 0x65, 0xe27: 0x66, + 0xe28: 0x67, 0xe29: 0x68, 0xe2a: 0x69, 0xe2c: 0x6a, 0xe2d: 0x6b, 0xe2e: 0x6c, 0xe2f: 0x6d, + 0xe30: 0x6e, 0xe31: 0x6f, 0xe33: 0x70, 0xe34: 0x71, 0xe35: 0x72, 0xe36: 0x73, 0xe37: 0x74, + 0xe38: 0x75, 0xe39: 0x76, 0xe3a: 0x211, 0xe3b: 0x212, 0xe3c: 0x79, 0xe3d: 0x7a, 0xe3e: 0x7b, 0xe3f: 0x7c, + // Block 0x39, offset 0xe40 + 0xe40: 0x7d, 0xe41: 0x7e, 0xe42: 0x7f, 0xe43: 0x80, 0xe44: 0x81, 0xe45: 0x213, 0xe46: 0x83, 0xe47: 0x84, + 0xe48: 0x85, 0xe49: 0x86, 0xe4a: 0x87, 0xe4b: 0x88, 0xe4c: 0x89, 0xe4d: 0x8a, 0xe4e: 0x8b, 0xe4f: 0x8c, + 0xe50: 0x8d, 0xe51: 0x8e, 0xe52: 0x214, 0xe53: 0x90, 0xe54: 0x91, 0xe55: 0x92, 0xe56: 0x93, 0xe57: 0x94, + 0xe58: 0x95, 0xe59: 0x96, 0xe5a: 0x97, 0xe5b: 0x98, 0xe5c: 0x99, 0xe5d: 0x9a, 0xe5e: 0x9b, 0xe5f: 0x9c, + 0xe60: 0x9d, 0xe61: 0x9e, 0xe62: 0x9f, 0xe63: 0xa0, 0xe64: 0xa1, 0xe65: 0xa2, 0xe66: 0xa3, 0xe67: 0xa4, + 0xe68: 0xa5, 0xe69: 0xa6, 0xe6a: 0xa7, 0xe6b: 0xa8, 0xe6c: 0xa9, 0xe6d: 0xaa, + 0xe70: 0xab, 0xe71: 0xac, 0xe72: 0xad, 0xe73: 0xae, 0xe74: 0xaf, 0xe75: 0xb0, 0xe76: 0xb1, 0xe77: 0xb2, + 0xe78: 0xb3, 0xe7a: 0xb4, 0xe7b: 0xb5, 0xe7c: 0xb6, 0xe7d: 0xb7, 0xe7e: 0xb8, 0xe7f: 0xb9, + // Block 0x3a, offset 0xe80 + 0xe80: 0xba, 0xe81: 0xbb, 0xe82: 0xbc, 0xe83: 0xbd, 0xe84: 0xbe, 0xe85: 0xbf, 0xe86: 0xc0, 0xe87: 0xc1, + 0xe88: 0xc2, 0xe89: 0xc3, 0xe8a: 0xc4, 0xe8b: 0xc5, 0xe8c: 0xc6, 0xe8d: 0xc7, 0xe8e: 0xc8, 0xe8f: 0x215, + // Block 0x3b, offset 0xec0 + 0xec0: 0x18b, 0xec1: 0x18c, 0xec2: 0x18d, 0xec3: 0x18e, 0xec4: 0x216, 0xec5: 0x190, 0xec6: 0x191, 0xec7: 0x192, + 0xec8: 0x193, 0xec9: 0x194, 0xecc: 0x195, 0xecd: 0x196, 0xece: 0x197, 0xecf: 0x198, + 0xed0: 0x199, 0xed1: 0x19a, 0xed2: 0x19b, 0xed3: 0x19c, 0xed4: 0x19d, 0xed5: 0x19e, 0xed7: 0x19f, + 0xed8: 0x1a0, 0xed9: 0x1a1, 0xeda: 0x1a2, 0xedb: 0x1a3, 0xedc: 0x1a4, 0xedd: 0x1a5, + // Block 0x3c, offset 0xf00 + 0xf10: 0x09, 0xf11: 0x0a, 0xf12: 0x0b, 0xf13: 0x0c, 0xf16: 0x0d, + 0xf1b: 0x0e, 0xf1d: 0x0f, 0xf1e: 0x10, 0xf1f: 0x39, + 0xf2f: 0x12, + // Block 0x3d, offset 0xf40 + 0xf42: 0x01, 0xf43: 0x20a, 0xf44: 0x20b, 0xf45: 0x20c, 0xf46: 0x20d, 0xf47: 0x06, + 0xf48: 0x07, 0xf49: 0x20e, 0xf4a: 0x20f, 0xf4b: 0x0a, 0xf4c: 0x210, 0xf4d: 0x0c, 0xf4e: 0x0d, 0xf4f: 0x0e, + 0xf50: 0x0f, 0xf51: 0x10, 0xf52: 0x11, 0xf53: 0x12, 0xf54: 0x13, 0xf55: 0x14, 0xf56: 0x15, 0xf57: 0x16, + 0xf58: 0x17, 0xf59: 0x18, 0xf5a: 0x19, 0xf5b: 0x1a, 0xf5c: 0x1b, 0xf5d: 0x1c, 0xf5e: 0x1d, 0xf5f: 0x1e, + 0xf60: 0x01, 0xf61: 0x36, 0xf62: 0x37, 0xf63: 0x38, 0xf64: 0x05, + 0xf6a: 0x06, 0xf6d: 0x07, 0xf6f: 0x08, + 0xf70: 0x3a, 0xf73: 0x15, + // Block 0x3e, offset 0xf80 + 0xf80: 0x3f, 0xf81: 0x40, 0xf82: 0x41, 0xf83: 0x42, 0xf84: 0x43, 0xf85: 0x44, 0xf86: 0x45, 0xf87: 0x46, + 0xf88: 0x47, 0xf89: 0x48, 0xf8a: 0x49, 0xf8b: 0x4a, 0xf8c: 0x4b, 0xf8d: 0x4c, 0xf8e: 0x4d, 0xf8f: 0x4e, + 0xf90: 0x4f, 0xf91: 0x50, 0xf92: 0x51, 0xf93: 0x52, 0xf94: 0x53, 0xf95: 0x54, 0xf96: 0x55, 0xf97: 0x56, + 0xf98: 0x57, 0xf99: 0x58, 0xf9a: 0x59, 0xf9b: 0x5a, 0xf9c: 0x5b, 0xf9d: 0x5c, 0xf9e: 0x5d, 0xf9f: 0x5e, + 0xfa0: 0x5f, 0xfa1: 0x60, 0xfa2: 0x61, 0xfa3: 0x62, 0xfa4: 0x63, 0xfa5: 0x64, 0xfa6: 0x65, 0xfa7: 0x66, + 0xfa8: 0x67, 0xfa9: 0x68, 0xfaa: 0x69, 0xfac: 0x6a, 0xfad: 0x6b, 0xfae: 0x6c, 0xfaf: 0x6d, + 0xfb0: 0x6e, 0xfb1: 0x6f, 0xfb3: 0x70, 0xfb4: 0x71, 0xfb5: 0x72, 0xfb6: 0x73, 0xfb7: 0x74, + 0xfb8: 0x220, 0xfb9: 0x221, 0xfba: 0x222, 0xfbb: 0x223, 0xfbc: 0x79, 0xfbd: 0x7a, 0xfbe: 0x7b, 0xfbf: 0x224, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x225, 0xfc1: 0x226, 0xfc2: 0x7f, 0xfc3: 0x80, 0xfc4: 0x227, 0xfc5: 0x228, 0xfc6: 0x83, 0xfc7: 0x84, + 0xfc8: 0x85, 0xfc9: 0x229, 0xfca: 0x87, 0xfcb: 0x88, 0xfcc: 0x89, 0xfcd: 0x8a, 0xfce: 0x8b, 0xfcf: 0x8c, + 0xfd0: 0x8d, 0xfd1: 0x22a, 0xfd2: 0x22b, 0xfd3: 0x90, 0xfd4: 0x91, 0xfd5: 0x92, 0xfd6: 0x93, 0xfd7: 0x94, + 0xfd8: 0x95, 0xfd9: 0x96, 0xfda: 0x97, 0xfdb: 0x98, 0xfdc: 0x99, 0xfdd: 0x9a, 0xfde: 0x9b, 0xfdf: 0x9c, + 0xfe0: 0x9d, 0xfe1: 0x9e, 0xfe2: 0x9f, 0xfe3: 0xa0, 0xfe4: 0xa1, 0xfe5: 0xa2, 0xfe6: 0xa3, 0xfe7: 0xa4, + 0xfe8: 0xa5, 0xfe9: 0x22c, 0xfea: 0xa7, 0xfeb: 0xa8, 0xfec: 0xa9, 0xfed: 0xaa, + 0xff0: 0xab, 0xff1: 0xac, 0xff2: 0xad, 0xff3: 0xae, 0xff4: 0xaf, 0xff5: 0xb0, 0xff6: 0xb1, 0xff7: 0xb2, + 0xff8: 0xb3, 0xffa: 0xb4, 0xffb: 0xb5, 0xffc: 0xb6, 0xffd: 0xb7, 0xffe: 0xb8, 0xfff: 0xb9, + // Block 0x40, offset 0x1000 + 0x1000: 0xba, 0x1001: 0xbb, 0x1002: 0xbc, 0x1003: 0xbd, 0x1004: 0xbe, 0x1005: 0xbf, 0x1006: 0xc0, 0x1007: 0xc1, + 0x1008: 0x22d, 0x1009: 0x22e, 0x100a: 0x22f, 0x100b: 0x230, 0x100c: 0xc6, 0x100d: 0x231, 0x100e: 0x232, 0x100f: 0x233, + // Block 0x41, offset 0x1040 + 0x1064: 0xfb, 0x1065: 0xfc, 0x1066: 0xfd, 0x1067: 0xfe, + 0x1068: 0xff, 0x1069: 0x100, 0x106a: 0x101, 0x106b: 0x102, 0x106c: 0x234, 0x106d: 0x104, 0x106e: 0x105, 0x106f: 0x106, + 0x1070: 0x107, 0x1071: 0x108, 0x1072: 0x109, 0x1073: 0x10a, 0x1074: 0x10b, 0x1075: 0x10c, 0x1076: 0x10d, 0x1077: 0x10e, + 0x1078: 0x235, 0x1079: 0x110, 0x107a: 0x111, 0x107b: 0x112, 0x107c: 0x113, 0x107d: 0x114, 0x107e: 0x115, 0x107f: 0x116, + // Block 0x42, offset 0x1080 + 0x1080: 0x18b, 0x1081: 0x18c, 0x1082: 0x18d, 0x1083: 0x18e, 0x1084: 0x236, 0x1085: 0x237, 0x1086: 0x238, 0x1087: 0x192, + 0x1088: 0x193, 0x1089: 0x194, 0x108c: 0x195, 0x108d: 0x196, 0x108e: 0x197, 0x108f: 0x198, + 0x1090: 0x199, 0x1091: 0x19a, 0x1092: 0x19b, 0x1093: 0x19c, 0x1094: 0x19d, 0x1095: 0x19e, 0x1097: 0x19f, + 0x1098: 0x1a0, 0x1099: 0x1a1, 0x109a: 0x1a2, 0x109b: 0x1a3, 0x109c: 0x1a4, 0x109d: 0x1a5, + // Block 0x43, offset 0x10c0 + 0x10d0: 0x09, 0x10d1: 0x0a, 0x10d2: 0x0b, 0x10d3: 0x0c, 0x10d6: 0x0d, + 0x10db: 0x0e, 0x10dd: 0x0f, 0x10de: 0x10, 0x10df: 0x40, + 0x10ef: 0x12, + // Block 0x44, offset 0x1100 + 0x1102: 0x01, 0x1103: 0x219, 0x1104: 0x21a, 0x1105: 0x21b, 0x1106: 0x21c, 0x1107: 0x21d, + 0x1108: 0x21e, 0x1109: 0x08, 0x110a: 0x09, 0x110b: 0x0a, 0x110c: 0x0b, 0x110d: 0x21f, 0x110e: 0x0d, 0x110f: 0x0e, + 0x1110: 0x0f, 0x1111: 0x10, 0x1112: 0x11, 0x1113: 0x12, 0x1114: 0x13, 0x1115: 0x14, 0x1116: 0x15, 0x1117: 0x16, + 0x1118: 0x17, 0x1119: 0x18, 0x111a: 0x19, 0x111b: 0x1a, 0x111c: 0x1b, 0x111d: 0x1c, 0x111e: 0x1d, 0x111f: 0x1e, + 0x1120: 0x01, 0x1121: 0x3c, 0x1122: 0x3d, 0x1123: 0x3e, 0x1124: 0x05, + 0x112a: 0x06, 0x112d: 0x07, 0x112f: 0x3f, + 0x1130: 0x41, 0x1133: 0x15, + // Block 0x45, offset 0x1140 + 0x1142: 0x01, 0x1143: 0x02, 0x1144: 0x23b, 0x1145: 0x23c, 0x1146: 0x05, 0x1147: 0x06, + 0x1148: 0x07, 0x1149: 0x08, 0x114a: 0x09, 0x114b: 0x0a, 0x114c: 0x0b, 0x114d: 0x0c, 0x114e: 0x0d, 0x114f: 0x0e, + 0x1150: 0x0f, 0x1151: 0x10, 0x1152: 0x11, 0x1153: 0x12, 0x1154: 0x13, 0x1155: 0x14, 0x1156: 0x15, 0x1157: 0x16, + 0x1158: 0x17, 0x1159: 0x18, 0x115a: 0x19, 0x115b: 0x1a, 0x115c: 0x1b, 0x115d: 0x1c, 0x115e: 0x1d, 0x115f: 0x1e, + 0x1160: 0x01, 0x1161: 0x02, 0x1162: 0x03, 0x1163: 0x04, 0x1164: 0x05, + 0x116a: 0x06, 0x116d: 0x07, 0x116f: 0x08, + 0x1170: 0x13, 0x1173: 0x15, + // Block 0x46, offset 0x1180 + 0x1182: 0x01, 0x1183: 0x23f, 0x1184: 0x03, 0x1185: 0x04, 0x1186: 0x05, 0x1187: 0x06, + 0x1188: 0x07, 0x1189: 0x08, 0x118a: 0x09, 0x118b: 0x0a, 0x118c: 0x0b, 0x118d: 0x0c, 0x118e: 0x0d, 0x118f: 0x0e, + 0x1190: 0x0f, 0x1191: 0x10, 0x1192: 0x11, 0x1193: 0x12, 0x1194: 0x13, 0x1195: 0x14, 0x1196: 0x15, 0x1197: 0x16, + 0x1198: 0x17, 0x1199: 0x18, 0x119a: 0x19, 0x119b: 0x1a, 0x119c: 0x1b, 0x119d: 0x1c, 0x119e: 0x1d, 0x119f: 0x1e, + 0x11a0: 0x01, 0x11a1: 0x02, 0x11a2: 0x03, 0x11a3: 0x04, 0x11a4: 0x05, + 0x11aa: 0x06, 0x11ad: 0x07, 0x11af: 0x08, + 0x11b0: 0x13, 0x11b3: 0x15, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x3f, 0x11c1: 0x40, 0x11c2: 0x41, 0x11c3: 0x42, 0x11c4: 0x43, 0x11c5: 0x44, 0x11c6: 0x45, 0x11c7: 0x46, + 0x11c8: 0x47, 0x11c9: 0x48, 0x11ca: 0x49, 0x11cb: 0x4a, 0x11cc: 0x4b, 0x11cd: 0x4c, 0x11ce: 0x4d, 0x11cf: 0x4e, + 0x11d0: 0x4f, 0x11d1: 0x50, 0x11d2: 0x51, 0x11d3: 0x52, 0x11d4: 0x53, 0x11d5: 0x54, 0x11d6: 0x55, 0x11d7: 0x56, + 0x11d8: 0x57, 0x11d9: 0x58, 0x11da: 0x59, 0x11db: 0x5a, 0x11dc: 0x5b, 0x11dd: 0x5c, 0x11de: 0x5d, 0x11df: 0x5e, + 0x11e0: 0x5f, 0x11e1: 0x60, 0x11e2: 0x61, 0x11e3: 0x62, 0x11e4: 0x63, 0x11e5: 0x64, 0x11e6: 0x65, 0x11e7: 0x66, + 0x11e8: 0x67, 0x11e9: 0x68, 0x11ea: 0x69, 0x11ec: 0x6a, 0x11ed: 0x6b, 0x11ee: 0x6c, 0x11ef: 0x6d, + 0x11f0: 0x6e, 0x11f1: 0x6f, 0x11f3: 0x70, 0x11f4: 0x71, 0x11f5: 0x72, 0x11f6: 0x73, 0x11f7: 0x74, + 0x11f8: 0x75, 0x11f9: 0x246, 0x11fa: 0x247, 0x11fb: 0x248, 0x11fc: 0x79, 0x11fd: 0x7a, 0x11fe: 0x7b, 0x11ff: 0x7c, + // Block 0x48, offset 0x1200 + 0x1200: 0x7d, 0x1201: 0x7e, 0x1202: 0x7f, 0x1203: 0x80, 0x1204: 0x81, 0x1205: 0x82, 0x1206: 0x83, 0x1207: 0x84, + 0x1208: 0x85, 0x1209: 0x86, 0x120a: 0x87, 0x120b: 0x88, 0x120c: 0x89, 0x120d: 0x8a, 0x120e: 0x8b, 0x120f: 0x8c, + 0x1210: 0x8d, 0x1211: 0x8e, 0x1212: 0x249, 0x1213: 0x90, 0x1214: 0x91, 0x1215: 0x92, 0x1216: 0x93, 0x1217: 0x94, + 0x1218: 0x95, 0x1219: 0x96, 0x121a: 0x97, 0x121b: 0x98, 0x121c: 0x99, 0x121d: 0x9a, 0x121e: 0x9b, 0x121f: 0x9c, + 0x1220: 0x9d, 0x1221: 0x9e, 0x1222: 0x9f, 0x1223: 0xa0, 0x1224: 0xa1, 0x1225: 0xa2, 0x1226: 0xa3, 0x1227: 0xa4, + 0x1228: 0xa5, 0x1229: 0xa6, 0x122a: 0xa7, 0x122b: 0xa8, 0x122c: 0xa9, 0x122d: 0xaa, + 0x1230: 0xab, 0x1231: 0xac, 0x1232: 0xad, 0x1233: 0xae, 0x1234: 0xaf, 0x1235: 0xb0, 0x1236: 0xb1, 0x1237: 0xb2, + 0x1238: 0xb3, 0x123a: 0xb4, 0x123b: 0xb5, 0x123c: 0xb6, 0x123d: 0xb7, 0x123e: 0xb8, 0x123f: 0xb9, + // Block 0x49, offset 0x1240 + 0x1240: 0xba, 0x1241: 0xbb, 0x1242: 0xbc, 0x1243: 0xbd, 0x1244: 0xbe, 0x1245: 0xbf, 0x1246: 0xc0, 0x1247: 0xc1, + 0x1248: 0xc2, 0x1249: 0xc3, 0x124a: 0xc4, 0x124b: 0xc5, 0x124c: 0xc6, 0x124d: 0xc7, 0x124e: 0x24a, 0x124f: 0x24b, + // Block 0x4a, offset 0x1280 + 0x1280: 0x18b, 0x1281: 0x18c, 0x1282: 0x18d, 0x1283: 0x18e, 0x1284: 0x24c, 0x1285: 0x24d, 0x1286: 0x191, 0x1287: 0x192, + 0x1288: 0x193, 0x1289: 0x194, 0x128c: 0x195, 0x128d: 0x196, 0x128e: 0x197, 0x128f: 0x198, + 0x1290: 0x199, 0x1291: 0x19a, 0x1292: 0x19b, 0x1293: 0x19c, 0x1294: 0x19d, 0x1295: 0x19e, 0x1297: 0x19f, + 0x1298: 0x1a0, 0x1299: 0x1a1, 0x129a: 0x1a2, 0x129b: 0x1a3, 0x129c: 0x1a4, 0x129d: 0x1a5, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x09, 0x12d1: 0x0a, 0x12d2: 0x0b, 0x12d3: 0x0c, 0x12d6: 0x0d, + 0x12db: 0x0e, 0x12dd: 0x0f, 0x12de: 0x10, 0x12df: 0x48, + 0x12ef: 0x12, + // Block 0x4c, offset 0x1300 + 0x1302: 0x01, 0x1303: 0x242, 0x1304: 0x03, 0x1305: 0x243, 0x1306: 0x05, 0x1307: 0x244, + 0x1308: 0x245, 0x1309: 0x08, 0x130a: 0x09, 0x130b: 0x0a, 0x130c: 0x0b, 0x130d: 0x0c, 0x130e: 0x0d, 0x130f: 0x0e, + 0x1310: 0x0f, 0x1311: 0x10, 0x1312: 0x11, 0x1313: 0x12, 0x1314: 0x13, 0x1315: 0x14, 0x1316: 0x15, 0x1317: 0x16, + 0x1318: 0x17, 0x1319: 0x18, 0x131a: 0x19, 0x131b: 0x1a, 0x131c: 0x1b, 0x131d: 0x1c, 0x131e: 0x1d, 0x131f: 0x1e, + 0x1320: 0x01, 0x1321: 0x45, 0x1322: 0x46, 0x1323: 0x47, 0x1324: 0x05, + 0x132a: 0x06, 0x132d: 0x07, 0x132f: 0x08, + 0x1330: 0x49, 0x1333: 0x15, + // Block 0x4d, offset 0x1340 + 0x1364: 0xfb, 0x1365: 0xfc, 0x1366: 0xfd, 0x1367: 0xfe, + 0x1368: 0xff, 0x1369: 0x100, 0x136a: 0x101, 0x136b: 0x102, 0x136c: 0x103, 0x136d: 0x104, 0x136e: 0x252, 0x136f: 0x106, + 0x1370: 0x253, 0x1371: 0x254, 0x1372: 0x255, 0x1373: 0x256, 0x1374: 0x257, 0x1375: 0x10c, 0x1376: 0x10d, 0x1377: 0x10e, + 0x1378: 0x10f, 0x1379: 0x110, 0x137a: 0x111, 0x137b: 0x112, 0x137c: 0x113, 0x137d: 0x114, 0x137e: 0x115, 0x137f: 0x116, + // Block 0x4e, offset 0x1380 + 0x1382: 0x01, 0x1383: 0x02, 0x1384: 0x03, 0x1385: 0x04, 0x1386: 0x05, 0x1387: 0x06, + 0x1388: 0x07, 0x1389: 0x08, 0x138a: 0x09, 0x138b: 0x0a, 0x138c: 0x0b, 0x138d: 0x0c, 0x138e: 0x0d, 0x138f: 0x0e, + 0x1390: 0x0f, 0x1391: 0x10, 0x1392: 0x11, 0x1393: 0x12, 0x1394: 0x13, 0x1395: 0x14, 0x1396: 0x15, 0x1397: 0x16, + 0x1398: 0x24e, 0x1399: 0x24f, 0x139a: 0x250, 0x139b: 0x251, 0x139c: 0x1b, 0x139d: 0x1c, 0x139e: 0x1d, 0x139f: 0x1e, + 0x13a0: 0x01, 0x13a1: 0x02, 0x13a2: 0x03, 0x13a3: 0x04, 0x13a4: 0x05, + 0x13aa: 0x06, 0x13ad: 0x07, 0x13af: 0x4b, + 0x13b0: 0x13, 0x13b3: 0x15, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x3f, 0x13c1: 0x40, 0x13c2: 0x41, 0x13c3: 0x42, 0x13c4: 0x43, 0x13c5: 0x44, 0x13c6: 0x45, 0x13c7: 0x46, + 0x13c8: 0x47, 0x13c9: 0x48, 0x13ca: 0x49, 0x13cb: 0x4a, 0x13cc: 0x4b, 0x13cd: 0x4c, 0x13ce: 0x4d, 0x13cf: 0x4e, + 0x13d0: 0x4f, 0x13d1: 0x50, 0x13d2: 0x51, 0x13d3: 0x52, 0x13d4: 0x53, 0x13d5: 0x54, 0x13d6: 0x55, 0x13d7: 0x56, + 0x13d8: 0x57, 0x13d9: 0x58, 0x13da: 0x59, 0x13db: 0x5a, 0x13dc: 0x5b, 0x13dd: 0x5c, 0x13de: 0x5d, 0x13df: 0x5e, + 0x13e0: 0x5f, 0x13e1: 0x60, 0x13e2: 0x61, 0x13e3: 0x62, 0x13e4: 0x63, 0x13e5: 0x64, 0x13e6: 0x65, 0x13e7: 0x66, + 0x13e8: 0x67, 0x13e9: 0x68, 0x13ea: 0x69, 0x13ec: 0x6a, 0x13ed: 0x6b, 0x13ee: 0x6c, 0x13ef: 0x6d, + 0x13f0: 0x6e, 0x13f1: 0x6f, 0x13f3: 0x70, 0x13f4: 0x71, 0x13f5: 0x72, 0x13f6: 0x73, 0x13f7: 0x74, + 0x13f8: 0x75, 0x13f9: 0x261, 0x13fa: 0x77, 0x13fb: 0x78, 0x13fc: 0x79, 0x13fd: 0x7a, 0x13fe: 0x7b, 0x13ff: 0x7c, + // Block 0x50, offset 0x1400 + 0x1400: 0x7d, 0x1401: 0x7e, 0x1402: 0x7f, 0x1403: 0x80, 0x1404: 0x262, 0x1405: 0x82, 0x1406: 0x83, 0x1407: 0x84, + 0x1408: 0x85, 0x1409: 0x86, 0x140a: 0x87, 0x140b: 0x88, 0x140c: 0x89, 0x140d: 0x8a, 0x140e: 0x8b, 0x140f: 0x8c, + 0x1410: 0x8d, 0x1411: 0x8e, 0x1412: 0x8f, 0x1413: 0x90, 0x1414: 0x91, 0x1415: 0x92, 0x1416: 0x93, 0x1417: 0x94, + 0x1418: 0x95, 0x1419: 0x96, 0x141a: 0x97, 0x141b: 0x98, 0x141c: 0x99, 0x141d: 0x9a, 0x141e: 0x9b, 0x141f: 0x9c, + 0x1420: 0x9d, 0x1421: 0x9e, 0x1422: 0x9f, 0x1423: 0xa0, 0x1424: 0xa1, 0x1425: 0xa2, 0x1426: 0xa3, 0x1427: 0xa4, + 0x1428: 0xa5, 0x1429: 0xa6, 0x142a: 0xa7, 0x142b: 0xa8, 0x142c: 0xa9, 0x142d: 0xaa, + 0x1430: 0xab, 0x1431: 0xac, 0x1432: 0xad, 0x1433: 0xae, 0x1434: 0xaf, 0x1435: 0xb0, 0x1436: 0xb1, 0x1437: 0xb2, + 0x1438: 0xb3, 0x143a: 0xb4, 0x143b: 0xb5, 0x143c: 0xb6, 0x143d: 0xb7, 0x143e: 0xb8, 0x143f: 0xb9, + // Block 0x51, offset 0x1440 + 0x1442: 0x01, 0x1443: 0x25a, 0x1444: 0x25b, 0x1445: 0x25c, 0x1446: 0x25d, 0x1447: 0x25e, + 0x1448: 0x25f, 0x1449: 0x08, 0x144a: 0x260, 0x144b: 0x0a, 0x144c: 0x0b, 0x144d: 0x0c, 0x144e: 0x0d, 0x144f: 0x0e, + 0x1450: 0x0f, 0x1451: 0x10, 0x1452: 0x11, 0x1453: 0x12, 0x1454: 0x13, 0x1455: 0x14, 0x1456: 0x15, 0x1457: 0x16, + 0x1458: 0x17, 0x1459: 0x18, 0x145a: 0x19, 0x145b: 0x1a, 0x145c: 0x1b, 0x145d: 0x1c, 0x145e: 0x1d, 0x145f: 0x1e, + 0x1460: 0x01, 0x1461: 0x4d, 0x1462: 0x4e, 0x1463: 0x04, 0x1464: 0x05, + 0x146a: 0x06, 0x146d: 0x07, 0x146f: 0x08, + 0x1470: 0x13, 0x1473: 0x15, + // Block 0x52, offset 0x1480 + 0x1480: 0x3f, 0x1481: 0x40, 0x1482: 0x41, 0x1483: 0x42, 0x1484: 0x43, 0x1485: 0x44, 0x1486: 0x45, 0x1487: 0x46, + 0x1488: 0x47, 0x1489: 0x48, 0x148a: 0x49, 0x148b: 0x4a, 0x148c: 0x4b, 0x148d: 0x4c, 0x148e: 0x4d, 0x148f: 0x4e, + 0x1490: 0x4f, 0x1491: 0x50, 0x1492: 0x51, 0x1493: 0x52, 0x1494: 0x53, 0x1495: 0x54, 0x1496: 0x55, 0x1497: 0x56, + 0x1498: 0x57, 0x1499: 0x58, 0x149a: 0x59, 0x149b: 0x5a, 0x149c: 0x5b, 0x149d: 0x5c, 0x149e: 0x5d, 0x149f: 0x5e, + 0x14a0: 0x5f, 0x14a1: 0x60, 0x14a2: 0x61, 0x14a3: 0x62, 0x14a4: 0x63, 0x14a5: 0x64, 0x14a6: 0x65, 0x14a7: 0x66, + 0x14a8: 0x67, 0x14a9: 0x68, 0x14aa: 0x69, 0x14ac: 0x6a, 0x14ad: 0x6b, 0x14ae: 0x6c, 0x14af: 0x6d, + 0x14b0: 0x6e, 0x14b1: 0x6f, 0x14b3: 0x70, 0x14b4: 0x71, 0x14b5: 0x72, 0x14b6: 0x1fc, 0x14b7: 0x74, + 0x14b8: 0x75, 0x14b9: 0x26a, 0x14ba: 0x26b, 0x14bb: 0x26c, 0x14bc: 0x79, 0x14bd: 0x7a, 0x14be: 0x7b, 0x14bf: 0x7c, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x7d, 0x14c1: 0x7e, 0x14c2: 0x7f, 0x14c3: 0x80, 0x14c4: 0x262, 0x14c5: 0x82, 0x14c6: 0x83, 0x14c7: 0x84, + 0x14c8: 0x85, 0x14c9: 0x86, 0x14ca: 0x87, 0x14cb: 0x88, 0x14cc: 0x89, 0x14cd: 0x8a, 0x14ce: 0x8b, 0x14cf: 0x8c, + 0x14d0: 0x8d, 0x14d1: 0x8e, 0x14d2: 0x26d, 0x14d3: 0x90, 0x14d4: 0x91, 0x14d5: 0x92, 0x14d6: 0x93, 0x14d7: 0x94, + 0x14d8: 0x95, 0x14d9: 0x96, 0x14da: 0x97, 0x14db: 0x98, 0x14dc: 0x99, 0x14dd: 0x9a, 0x14de: 0x9b, 0x14df: 0x9c, + 0x14e0: 0x9d, 0x14e1: 0x9e, 0x14e2: 0x9f, 0x14e3: 0xa0, 0x14e4: 0xa1, 0x14e5: 0xa2, 0x14e6: 0xa3, 0x14e7: 0xa4, + 0x14e8: 0xa5, 0x14e9: 0xa6, 0x14ea: 0xa7, 0x14eb: 0xa8, 0x14ec: 0xa9, 0x14ed: 0xaa, + 0x14f0: 0xab, 0x14f1: 0xac, 0x14f2: 0xad, 0x14f3: 0xae, 0x14f4: 0xaf, 0x14f5: 0xb0, 0x14f6: 0xb1, 0x14f7: 0xb2, + 0x14f8: 0xb3, 0x14fa: 0xb4, 0x14fb: 0xb5, 0x14fc: 0xb6, 0x14fd: 0xb7, 0x14fe: 0xb8, 0x14ff: 0xb9, + // Block 0x54, offset 0x1500 + 0x1500: 0xba, 0x1501: 0xbb, 0x1502: 0xbc, 0x1503: 0xbd, 0x1504: 0xbe, 0x1505: 0xbf, 0x1506: 0xc0, 0x1507: 0xc1, + 0x1508: 0xc2, 0x1509: 0xc3, 0x150a: 0xc4, 0x150b: 0xc5, 0x150c: 0xc6, 0x150d: 0xc7, 0x150e: 0x26e, 0x150f: 0x24b, + // Block 0x55, offset 0x1540 + 0x1540: 0x18b, 0x1541: 0x18c, 0x1542: 0x18d, 0x1543: 0x18e, 0x1544: 0x26f, 0x1545: 0x24d, 0x1546: 0x191, 0x1547: 0x192, + 0x1548: 0x193, 0x1549: 0x194, 0x154c: 0x195, 0x154d: 0x196, 0x154e: 0x197, 0x154f: 0x198, + 0x1550: 0x199, 0x1551: 0x19a, 0x1552: 0x19b, 0x1553: 0x19c, 0x1554: 0x19d, 0x1555: 0x19e, 0x1557: 0x19f, + 0x1558: 0x1a0, 0x1559: 0x1a1, 0x155a: 0x1a2, 0x155b: 0x1a3, 0x155c: 0x1a4, 0x155d: 0x1a5, + // Block 0x56, offset 0x1580 + 0x1590: 0x09, 0x1591: 0x0a, 0x1592: 0x0b, 0x1593: 0x0c, 0x1596: 0x0d, + 0x159b: 0x0e, 0x159d: 0x0f, 0x159e: 0x10, 0x159f: 0x53, + 0x15af: 0x12, + // Block 0x57, offset 0x15c0 + 0x15c2: 0x01, 0x15c3: 0x265, 0x15c4: 0x266, 0x15c5: 0x267, 0x15c6: 0x05, 0x15c7: 0x268, + 0x15c8: 0x269, 0x15c9: 0x08, 0x15ca: 0x09, 0x15cb: 0x0a, 0x15cc: 0x0b, 0x15cd: 0x0c, 0x15ce: 0x0d, 0x15cf: 0x0e, + 0x15d0: 0x0f, 0x15d1: 0x10, 0x15d2: 0x11, 0x15d3: 0x12, 0x15d4: 0x13, 0x15d5: 0x14, 0x15d6: 0x15, 0x15d7: 0x16, + 0x15d8: 0x17, 0x15d9: 0x18, 0x15da: 0x19, 0x15db: 0x1a, 0x15dc: 0x1b, 0x15dd: 0x1c, 0x15de: 0x1d, 0x15df: 0x1e, + 0x15e0: 0x01, 0x15e1: 0x50, 0x15e2: 0x51, 0x15e3: 0x52, 0x15e4: 0x05, + 0x15ea: 0x06, 0x15ed: 0x07, 0x15ef: 0x08, + 0x15f0: 0x54, 0x15f3: 0x15, + // Block 0x58, offset 0x1600 + 0x1620: 0x1f, 0x1621: 0x20, 0x1622: 0x21, 0x1623: 0x22, 0x1624: 0x23, 0x1625: 0x24, 0x1626: 0x25, 0x1627: 0x26, + 0x1628: 0x27, 0x1629: 0x28, 0x162a: 0x272, 0x162b: 0x2a, 0x162c: 0x2b, 0x162d: 0x2c, 0x162e: 0x2d, 0x162f: 0x2e, + 0x1630: 0x2f, 0x1631: 0x30, 0x1632: 0x31, 0x1633: 0x32, 0x1634: 0x33, 0x1635: 0x34, 0x1636: 0x35, 0x1637: 0x36, + 0x1638: 0x37, 0x1639: 0x38, 0x163a: 0x39, 0x163b: 0x3a, 0x163c: 0x3b, 0x163d: 0x3c, 0x163e: 0x3d, 0x163f: 0x3e, + // Block 0x59, offset 0x1640 + 0x1642: 0x01, 0x1643: 0x02, 0x1644: 0x03, 0x1645: 0x04, 0x1646: 0x05, 0x1647: 0x06, + 0x1648: 0x07, 0x1649: 0x08, 0x164a: 0x09, 0x164b: 0x0a, 0x164c: 0x0b, 0x164d: 0x0c, 0x164e: 0x0d, 0x164f: 0x0e, + 0x1650: 0x0f, 0x1651: 0x10, 0x1652: 0x11, 0x1653: 0x12, 0x1654: 0x13, 0x1655: 0x14, 0x1656: 0x15, 0x1657: 0x16, + 0x1658: 0x17, 0x1659: 0x18, 0x165a: 0x19, 0x165b: 0x1a, 0x165c: 0x1b, 0x165d: 0x1c, 0x165e: 0x1d, 0x165f: 0x1e, + 0x1660: 0x56, 0x1661: 0x02, 0x1662: 0x03, 0x1663: 0x04, 0x1664: 0x05, + 0x166a: 0x06, 0x166d: 0x07, 0x166f: 0x08, + 0x1670: 0x13, 0x1673: 0x15, + // Block 0x5a, offset 0x1680 + 0x1682: 0x01, 0x1683: 0x02, 0x1684: 0x03, 0x1685: 0x04, 0x1686: 0x275, 0x1687: 0x06, + 0x1688: 0x07, 0x1689: 0x276, 0x168a: 0x277, 0x168b: 0x0a, 0x168c: 0x0b, 0x168d: 0x0c, 0x168e: 0x0d, 0x168f: 0x0e, + 0x1690: 0x0f, 0x1691: 0x10, 0x1692: 0x11, 0x1693: 0x12, 0x1694: 0x13, 0x1695: 0x14, 0x1696: 0x15, 0x1697: 0x16, + 0x1698: 0x17, 0x1699: 0x18, 0x169a: 0x19, 0x169b: 0x1a, 0x169c: 0x1b, 0x169d: 0x1c, 0x169e: 0x1d, 0x169f: 0x1e, + 0x16a0: 0x01, 0x16a1: 0x02, 0x16a2: 0x03, 0x16a3: 0x04, 0x16a4: 0x05, + 0x16aa: 0x06, 0x16ad: 0x07, 0x16af: 0x08, + 0x16b0: 0x13, 0x16b3: 0x15, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x3f, 0x16c1: 0x40, 0x16c2: 0x41, 0x16c3: 0x42, 0x16c4: 0x43, 0x16c5: 0x44, 0x16c6: 0x45, 0x16c7: 0x46, + 0x16c8: 0x47, 0x16c9: 0x48, 0x16ca: 0x49, 0x16cb: 0x4a, 0x16cc: 0x4b, 0x16cd: 0x4c, 0x16ce: 0x4d, 0x16cf: 0x4e, + 0x16d0: 0x4f, 0x16d1: 0x50, 0x16d2: 0x51, 0x16d3: 0x52, 0x16d4: 0x53, 0x16d5: 0x54, 0x16d6: 0x55, 0x16d7: 0x56, + 0x16d8: 0x57, 0x16d9: 0x58, 0x16da: 0x59, 0x16db: 0x5a, 0x16dc: 0x5b, 0x16dd: 0x5c, 0x16de: 0x5d, 0x16df: 0x5e, + 0x16e0: 0x5f, 0x16e1: 0x60, 0x16e2: 0x61, 0x16e3: 0x62, 0x16e4: 0x63, 0x16e5: 0x64, 0x16e6: 0x65, 0x16e7: 0x66, + 0x16e8: 0x67, 0x16e9: 0x68, 0x16ea: 0x69, 0x16ec: 0x6a, 0x16ed: 0x6b, 0x16ee: 0x6c, 0x16ef: 0x6d, + 0x16f0: 0x6e, 0x16f1: 0x6f, 0x16f3: 0x70, 0x16f4: 0x71, 0x16f5: 0x72, 0x16f6: 0x73, 0x16f7: 0x74, + 0x16f8: 0x281, 0x16f9: 0x282, 0x16fa: 0x283, 0x16fb: 0x284, 0x16fc: 0x79, 0x16fd: 0x7a, 0x16fe: 0x7b, 0x16ff: 0x7c, + // Block 0x5c, offset 0x1700 + 0x1700: 0x7d, 0x1701: 0x7e, 0x1702: 0x7f, 0x1703: 0x80, 0x1704: 0x285, 0x1705: 0x1bf, 0x1706: 0x83, 0x1707: 0x84, + 0x1708: 0x85, 0x1709: 0x86, 0x170a: 0x87, 0x170b: 0x88, 0x170c: 0x89, 0x170d: 0x8a, 0x170e: 0x8b, 0x170f: 0x8c, + 0x1710: 0x8d, 0x1711: 0x8e, 0x1712: 0x286, 0x1713: 0x90, 0x1714: 0x91, 0x1715: 0x92, 0x1716: 0x93, 0x1717: 0x94, + 0x1718: 0x95, 0x1719: 0x96, 0x171a: 0x97, 0x171b: 0x98, 0x171c: 0x99, 0x171d: 0x9a, 0x171e: 0x9b, 0x171f: 0x9c, + 0x1720: 0x9d, 0x1721: 0x9e, 0x1722: 0x9f, 0x1723: 0xa0, 0x1724: 0xa1, 0x1725: 0xa2, 0x1726: 0xa3, 0x1727: 0xa4, + 0x1728: 0xa5, 0x1729: 0xa6, 0x172a: 0xa7, 0x172b: 0xa8, 0x172c: 0xa9, 0x172d: 0xaa, + 0x1730: 0xab, 0x1731: 0xac, 0x1732: 0xad, 0x1733: 0xae, 0x1734: 0xaf, 0x1735: 0xb0, 0x1736: 0xb1, 0x1737: 0xb2, + 0x1738: 0xb3, 0x173a: 0xb4, 0x173b: 0xb5, 0x173c: 0xb6, 0x173d: 0xb7, 0x173e: 0xb8, 0x173f: 0xb9, + // Block 0x5d, offset 0x1740 + 0x1740: 0xba, 0x1741: 0xbb, 0x1742: 0xbc, 0x1743: 0xbd, 0x1744: 0xbe, 0x1745: 0xbf, 0x1746: 0xc0, 0x1747: 0xc1, + 0x1748: 0xc2, 0x1749: 0xc3, 0x174a: 0xc4, 0x174b: 0x1c1, 0x174c: 0xc6, 0x174d: 0x287, 0x174e: 0x288, 0x174f: 0x289, + // Block 0x5e, offset 0x1780 + 0x17a4: 0xfb, 0x17a5: 0xfc, 0x17a6: 0xfd, 0x17a7: 0xfe, + 0x17a8: 0xff, 0x17a9: 0x100, 0x17aa: 0x101, 0x17ab: 0x102, 0x17ac: 0x28a, 0x17ad: 0x104, 0x17ae: 0x105, 0x17af: 0x106, + 0x17b0: 0x107, 0x17b1: 0x108, 0x17b2: 0x109, 0x17b3: 0x10a, 0x17b4: 0x10b, 0x17b5: 0x10c, 0x17b6: 0x10d, 0x17b7: 0x10e, + 0x17b8: 0x10f, 0x17b9: 0x110, 0x17ba: 0x111, 0x17bb: 0x112, 0x17bc: 0x113, 0x17bd: 0x114, 0x17be: 0x115, 0x17bf: 0x116, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x18b, 0x17c1: 0x18c, 0x17c2: 0x18d, 0x17c3: 0x18e, 0x17c4: 0x28b, 0x17c5: 0x28c, 0x17c6: 0x191, 0x17c7: 0x192, + 0x17c8: 0x193, 0x17c9: 0x194, 0x17cc: 0x195, 0x17cd: 0x196, 0x17ce: 0x197, 0x17cf: 0x198, + 0x17d0: 0x199, 0x17d1: 0x19a, 0x17d2: 0x19b, 0x17d3: 0x19c, 0x17d4: 0x19d, 0x17d5: 0x19e, 0x17d7: 0x19f, + 0x17d8: 0x1a0, 0x17d9: 0x1a1, 0x17da: 0x1a2, 0x17db: 0x1a3, 0x17dc: 0x1a4, 0x17dd: 0x1a5, + // Block 0x60, offset 0x1800 + 0x1810: 0x09, 0x1811: 0x0a, 0x1812: 0x0b, 0x1813: 0x0c, 0x1816: 0x0d, + 0x181b: 0x0e, 0x181d: 0x0f, 0x181e: 0x10, 0x181f: 0x5d, + 0x182f: 0x12, + // Block 0x61, offset 0x1840 + 0x1842: 0x01, 0x1843: 0x27a, 0x1844: 0x27b, 0x1845: 0x27c, 0x1846: 0x27d, 0x1847: 0x27e, + 0x1848: 0x27f, 0x1849: 0x08, 0x184a: 0x280, 0x184b: 0x0a, 0x184c: 0x0b, 0x184d: 0x0c, 0x184e: 0x0d, 0x184f: 0x0e, + 0x1850: 0x0f, 0x1851: 0x10, 0x1852: 0x11, 0x1853: 0x12, 0x1854: 0x13, 0x1855: 0x14, 0x1856: 0x15, 0x1857: 0x16, + 0x1858: 0x17, 0x1859: 0x18, 0x185a: 0x19, 0x185b: 0x1a, 0x185c: 0x1b, 0x185d: 0x1c, 0x185e: 0x1d, 0x185f: 0x1e, + 0x1860: 0x01, 0x1861: 0x59, 0x1862: 0x5a, 0x1863: 0x5b, 0x1864: 0x05, + 0x186a: 0x06, 0x186d: 0x07, 0x186f: 0x5c, + 0x1870: 0x5e, 0x1873: 0x15, + // Block 0x62, offset 0x1880 + 0x1882: 0x01, 0x1883: 0x02, 0x1884: 0x03, 0x1885: 0x04, 0x1886: 0x05, 0x1887: 0x06, + 0x1888: 0x07, 0x1889: 0x08, 0x188a: 0x09, 0x188b: 0x0a, 0x188c: 0x0b, 0x188d: 0x0c, 0x188e: 0x0d, 0x188f: 0x0e, + 0x1890: 0x0f, 0x1891: 0x10, 0x1892: 0x11, 0x1893: 0x12, 0x1894: 0x13, 0x1895: 0x14, 0x1896: 0x15, 0x1897: 0x28d, + 0x1898: 0x17, 0x1899: 0x18, 0x189a: 0x19, 0x189b: 0x1a, 0x189c: 0x1b, 0x189d: 0x1c, 0x189e: 0x1d, 0x189f: 0x1e, + 0x18a0: 0x01, 0x18a1: 0x02, 0x18a2: 0x03, 0x18a3: 0x04, 0x18a4: 0x05, + 0x18aa: 0x06, 0x18ad: 0x07, 0x18af: 0x08, + 0x18b0: 0x13, 0x18b3: 0x15, + // Block 0x63, offset 0x18c0 + 0x18e0: 0x1f, 0x18e1: 0x20, 0x18e2: 0x21, 0x18e3: 0x22, 0x18e4: 0x28e, 0x18e5: 0x24, 0x18e6: 0x25, 0x18e7: 0x26, + 0x18e8: 0x27, 0x18e9: 0x28, 0x18ea: 0x29, 0x18eb: 0x2a, 0x18ec: 0x2b, 0x18ed: 0x2c, 0x18ee: 0x2d, 0x18ef: 0x2e, + 0x18f0: 0x2f, 0x18f1: 0x30, 0x18f2: 0x31, 0x18f3: 0x32, 0x18f4: 0x33, 0x18f5: 0x34, 0x18f6: 0x35, 0x18f7: 0x36, + 0x18f8: 0x37, 0x18f9: 0x38, 0x18fa: 0x39, 0x18fb: 0x3a, 0x18fc: 0x3b, 0x18fd: 0x3c, 0x18fe: 0x3d, 0x18ff: 0x3e, + // Block 0x64, offset 0x1900 + 0x1902: 0x01, 0x1903: 0x02, 0x1904: 0x03, 0x1905: 0x04, 0x1906: 0x05, 0x1907: 0x06, + 0x1908: 0x07, 0x1909: 0x08, 0x190a: 0x09, 0x190b: 0x0a, 0x190c: 0x0b, 0x190d: 0x0c, 0x190e: 0x0d, 0x190f: 0x0e, + 0x1910: 0x0f, 0x1911: 0x10, 0x1912: 0x11, 0x1913: 0x12, 0x1914: 0x13, 0x1915: 0x14, 0x1916: 0x15, 0x1917: 0x16, + 0x1918: 0x17, 0x1919: 0x18, 0x191a: 0x19, 0x191b: 0x1a, 0x191c: 0x1b, 0x191d: 0x1c, 0x191e: 0x1d, 0x191f: 0x1e, + 0x1920: 0x61, 0x1921: 0x02, 0x1922: 0x03, 0x1923: 0x04, 0x1924: 0x05, + 0x192a: 0x06, 0x192d: 0x07, 0x192f: 0x08, + 0x1930: 0x13, 0x1933: 0x15, + // Block 0x65, offset 0x1940 + 0x1940: 0x3f, 0x1941: 0x40, 0x1942: 0x41, 0x1943: 0x42, 0x1944: 0x43, 0x1945: 0x44, 0x1946: 0x45, 0x1947: 0x46, + 0x1948: 0x47, 0x1949: 0x48, 0x194a: 0x49, 0x194b: 0x4a, 0x194c: 0x4b, 0x194d: 0x4c, 0x194e: 0x4d, 0x194f: 0x4e, + 0x1950: 0x4f, 0x1951: 0x50, 0x1952: 0x51, 0x1953: 0x52, 0x1954: 0x53, 0x1955: 0x54, 0x1956: 0x55, 0x1957: 0x56, + 0x1958: 0x57, 0x1959: 0x58, 0x195a: 0x59, 0x195b: 0x5a, 0x195c: 0x5b, 0x195d: 0x5c, 0x195e: 0x5d, 0x195f: 0x5e, + 0x1960: 0x5f, 0x1961: 0x60, 0x1962: 0x61, 0x1963: 0x62, 0x1964: 0x63, 0x1965: 0x64, 0x1966: 0x65, 0x1967: 0x66, + 0x1968: 0x67, 0x1969: 0x68, 0x196a: 0x69, 0x196c: 0x6a, 0x196d: 0x6b, 0x196e: 0x6c, 0x196f: 0x6d, + 0x1970: 0x6e, 0x1971: 0x6f, 0x1973: 0x70, 0x1974: 0x71, 0x1975: 0x72, 0x1976: 0x73, 0x1977: 0x74, + 0x1978: 0x294, 0x1979: 0x1f2, 0x197a: 0x77, 0x197b: 0x78, 0x197c: 0x79, 0x197d: 0x7a, 0x197e: 0x7b, 0x197f: 0x7c, + // Block 0x66, offset 0x1980 + 0x1982: 0x01, 0x1983: 0x02, 0x1984: 0x291, 0x1985: 0x292, 0x1986: 0x05, 0x1987: 0x293, + 0x1988: 0x07, 0x1989: 0x08, 0x198a: 0x09, 0x198b: 0x0a, 0x198c: 0x0b, 0x198d: 0x0c, 0x198e: 0x0d, 0x198f: 0x0e, + 0x1990: 0x0f, 0x1991: 0x10, 0x1992: 0x11, 0x1993: 0x12, 0x1994: 0x13, 0x1995: 0x14, 0x1996: 0x15, 0x1997: 0x16, + 0x1998: 0x17, 0x1999: 0x18, 0x199a: 0x19, 0x199b: 0x1a, 0x199c: 0x1b, 0x199d: 0x1c, 0x199e: 0x1d, 0x199f: 0x1e, + 0x19a0: 0x01, 0x19a1: 0x63, 0x19a2: 0x03, 0x19a3: 0x04, 0x19a4: 0x05, + 0x19aa: 0x06, 0x19ad: 0x07, 0x19af: 0x08, + 0x19b0: 0x13, 0x19b3: 0x15, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x3f, 0x19c1: 0x40, 0x19c2: 0x41, 0x19c3: 0x42, 0x19c4: 0x43, 0x19c5: 0x44, 0x19c6: 0x45, 0x19c7: 0x46, + 0x19c8: 0x47, 0x19c9: 0x48, 0x19ca: 0x49, 0x19cb: 0x4a, 0x19cc: 0x4b, 0x19cd: 0x4c, 0x19ce: 0x4d, 0x19cf: 0x4e, + 0x19d0: 0x4f, 0x19d1: 0x50, 0x19d2: 0x51, 0x19d3: 0x52, 0x19d4: 0x53, 0x19d5: 0x54, 0x19d6: 0x55, 0x19d7: 0x56, + 0x19d8: 0x57, 0x19d9: 0x58, 0x19da: 0x59, 0x19db: 0x5a, 0x19dc: 0x5b, 0x19dd: 0x5c, 0x19de: 0x5d, 0x19df: 0x5e, + 0x19e0: 0x5f, 0x19e1: 0x60, 0x19e2: 0x61, 0x19e3: 0x62, 0x19e4: 0x63, 0x19e5: 0x64, 0x19e6: 0x65, 0x19e7: 0x66, + 0x19e8: 0x67, 0x19e9: 0x68, 0x19ea: 0x69, 0x19ec: 0x6a, 0x19ed: 0x6b, 0x19ee: 0x6c, 0x19ef: 0x6d, + 0x19f0: 0x6e, 0x19f1: 0x6f, 0x19f3: 0x70, 0x19f4: 0x71, 0x19f5: 0x72, 0x19f6: 0x73, 0x19f7: 0x74, + 0x19f8: 0x75, 0x19f9: 0x1df, 0x19fa: 0x77, 0x19fb: 0x78, 0x19fc: 0x79, 0x19fd: 0x7a, 0x19fe: 0x7b, 0x19ff: 0x7c, + // Block 0x68, offset 0x1a00 + 0x1a02: 0x01, 0x1a03: 0x297, 0x1a04: 0x03, 0x1a05: 0x298, 0x1a06: 0x05, 0x1a07: 0x299, + 0x1a08: 0x29a, 0x1a09: 0x08, 0x1a0a: 0x09, 0x1a0b: 0x0a, 0x1a0c: 0x0b, 0x1a0d: 0x0c, 0x1a0e: 0x0d, 0x1a0f: 0x0e, + 0x1a10: 0x0f, 0x1a11: 0x10, 0x1a12: 0x11, 0x1a13: 0x12, 0x1a14: 0x13, 0x1a15: 0x14, 0x1a16: 0x15, 0x1a17: 0x16, + 0x1a18: 0x17, 0x1a19: 0x18, 0x1a1a: 0x19, 0x1a1b: 0x1a, 0x1a1c: 0x1b, 0x1a1d: 0x1c, 0x1a1e: 0x1d, 0x1a1f: 0x1e, + 0x1a20: 0x01, 0x1a21: 0x65, 0x1a22: 0x03, 0x1a23: 0x04, 0x1a24: 0x05, + 0x1a2a: 0x06, 0x1a2d: 0x07, 0x1a2f: 0x08, + 0x1a30: 0x13, 0x1a33: 0x15, + // Block 0x69, offset 0x1a40 + 0x1a42: 0x01, 0x1a43: 0x02, 0x1a44: 0x03, 0x1a45: 0x04, 0x1a46: 0x05, 0x1a47: 0x06, + 0x1a48: 0x07, 0x1a49: 0x08, 0x1a4a: 0x09, 0x1a4b: 0x0a, 0x1a4c: 0x0b, 0x1a4d: 0x0c, 0x1a4e: 0x0d, 0x1a4f: 0x0e, + 0x1a50: 0x0f, 0x1a51: 0x10, 0x1a52: 0x11, 0x1a53: 0x12, 0x1a54: 0x29b, 0x1a55: 0x14, 0x1a56: 0x29c, 0x1a57: 0x16, + 0x1a58: 0x17, 0x1a59: 0x18, 0x1a5a: 0x19, 0x1a5b: 0x1a, 0x1a5c: 0x1b, 0x1a5d: 0x1c, 0x1a5e: 0x1d, 0x1a5f: 0x1e, + 0x1a60: 0x01, 0x1a61: 0x02, 0x1a62: 0x03, 0x1a63: 0x04, 0x1a64: 0x05, + 0x1a6a: 0x06, 0x1a6d: 0x07, 0x1a6f: 0x08, + 0x1a70: 0x13, 0x1a73: 0x15, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x3f, 0x1a81: 0x40, 0x1a82: 0x41, 0x1a83: 0x42, 0x1a84: 0x43, 0x1a85: 0x44, 0x1a86: 0x45, 0x1a87: 0x46, + 0x1a88: 0x47, 0x1a89: 0x48, 0x1a8a: 0x49, 0x1a8b: 0x4a, 0x1a8c: 0x4b, 0x1a8d: 0x4c, 0x1a8e: 0x4d, 0x1a8f: 0x4e, + 0x1a90: 0x4f, 0x1a91: 0x50, 0x1a92: 0x51, 0x1a93: 0x52, 0x1a94: 0x53, 0x1a95: 0x54, 0x1a96: 0x55, 0x1a97: 0x56, + 0x1a98: 0x57, 0x1a99: 0x58, 0x1a9a: 0x59, 0x1a9b: 0x5a, 0x1a9c: 0x5b, 0x1a9d: 0x5c, 0x1a9e: 0x5d, 0x1a9f: 0x5e, + 0x1aa0: 0x5f, 0x1aa1: 0x60, 0x1aa2: 0x61, 0x1aa3: 0x62, 0x1aa4: 0x63, 0x1aa5: 0x64, 0x1aa6: 0x65, 0x1aa7: 0x66, + 0x1aa8: 0x67, 0x1aa9: 0x68, 0x1aaa: 0x69, 0x1aac: 0x6a, 0x1aad: 0x6b, 0x1aae: 0x6c, 0x1aaf: 0x6d, + 0x1ab0: 0x6e, 0x1ab1: 0x6f, 0x1ab3: 0x70, 0x1ab4: 0x71, 0x1ab5: 0x72, 0x1ab6: 0x73, 0x1ab7: 0x74, + 0x1ab8: 0x75, 0x1ab9: 0x29f, 0x1aba: 0x77, 0x1abb: 0x2a0, 0x1abc: 0x79, 0x1abd: 0x7a, 0x1abe: 0x7b, 0x1abf: 0x7c, + // Block 0x6b, offset 0x1ac0 + 0x1ac2: 0x01, 0x1ac3: 0x02, 0x1ac4: 0x03, 0x1ac5: 0x04, 0x1ac6: 0x05, 0x1ac7: 0x06, + 0x1ac8: 0x07, 0x1ac9: 0x08, 0x1aca: 0x09, 0x1acb: 0x0a, 0x1acc: 0x0b, 0x1acd: 0x0c, 0x1ace: 0x0d, 0x1acf: 0x0e, + 0x1ad0: 0x0f, 0x1ad1: 0x10, 0x1ad2: 0x11, 0x1ad3: 0x12, 0x1ad4: 0x13, 0x1ad5: 0x14, 0x1ad6: 0x15, 0x1ad7: 0x16, + 0x1ad8: 0x17, 0x1ad9: 0x18, 0x1ada: 0x19, 0x1adb: 0x1a, 0x1adc: 0x1b, 0x1add: 0x1c, 0x1ade: 0x1d, 0x1adf: 0x1e, + 0x1ae0: 0x01, 0x1ae1: 0x68, 0x1ae2: 0x03, 0x1ae3: 0x04, 0x1ae4: 0x05, + 0x1aea: 0x06, 0x1aed: 0x07, 0x1aef: 0x08, + 0x1af0: 0x13, 0x1af3: 0x15, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x3f, 0x1b01: 0x40, 0x1b02: 0x41, 0x1b03: 0x42, 0x1b04: 0x43, 0x1b05: 0x44, 0x1b06: 0x45, 0x1b07: 0x46, + 0x1b08: 0x47, 0x1b09: 0x48, 0x1b0a: 0x49, 0x1b0b: 0x4a, 0x1b0c: 0x4b, 0x1b0d: 0x4c, 0x1b0e: 0x4d, 0x1b0f: 0x4e, + 0x1b10: 0x4f, 0x1b11: 0x50, 0x1b12: 0x51, 0x1b13: 0x52, 0x1b14: 0x53, 0x1b15: 0x54, 0x1b16: 0x55, 0x1b17: 0x56, + 0x1b18: 0x57, 0x1b19: 0x58, 0x1b1a: 0x59, 0x1b1b: 0x5a, 0x1b1c: 0x5b, 0x1b1d: 0x5c, 0x1b1e: 0x5d, 0x1b1f: 0x5e, + 0x1b20: 0x5f, 0x1b21: 0x60, 0x1b22: 0x61, 0x1b23: 0x62, 0x1b24: 0x63, 0x1b25: 0x64, 0x1b26: 0x65, 0x1b27: 0x66, + 0x1b28: 0x67, 0x1b29: 0x68, 0x1b2a: 0x69, 0x1b2c: 0x6a, 0x1b2d: 0x6b, 0x1b2e: 0x6c, 0x1b2f: 0x6d, + 0x1b30: 0x6e, 0x1b31: 0x6f, 0x1b33: 0x70, 0x1b34: 0x71, 0x1b35: 0x72, 0x1b36: 0x1fc, 0x1b37: 0x74, + 0x1b38: 0x2a7, 0x1b39: 0x2a8, 0x1b3a: 0x2a9, 0x1b3b: 0x2aa, 0x1b3c: 0x79, 0x1b3d: 0x7a, 0x1b3e: 0x7b, 0x1b3f: 0x7c, + // Block 0x6d, offset 0x1b40 + 0x1b42: 0x01, 0x1b43: 0x2a3, 0x1b44: 0x2a4, 0x1b45: 0x04, 0x1b46: 0x05, 0x1b47: 0x2a5, + 0x1b48: 0x2a6, 0x1b49: 0x08, 0x1b4a: 0x09, 0x1b4b: 0x0a, 0x1b4c: 0x0b, 0x1b4d: 0x0c, 0x1b4e: 0x0d, 0x1b4f: 0x0e, + 0x1b50: 0x0f, 0x1b51: 0x10, 0x1b52: 0x11, 0x1b53: 0x12, 0x1b54: 0x13, 0x1b55: 0x14, 0x1b56: 0x15, 0x1b57: 0x16, + 0x1b58: 0x17, 0x1b59: 0x18, 0x1b5a: 0x19, 0x1b5b: 0x1a, 0x1b5c: 0x1b, 0x1b5d: 0x1c, 0x1b5e: 0x1d, 0x1b5f: 0x1e, + 0x1b60: 0x01, 0x1b61: 0x6a, 0x1b62: 0x30, 0x1b63: 0x04, 0x1b64: 0x05, + 0x1b6a: 0x06, 0x1b6d: 0x07, 0x1b6f: 0x08, + 0x1b70: 0x13, 0x1b73: 0x15, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x2ab, 0x1b81: 0x2ac, 0x1b82: 0x2ad, 0x1b83: 0x2ae, 0x1b84: 0x2af, 0x1b85: 0x2b0, 0x1b86: 0xc0, 0x1b87: 0x2b1, + 0x1b88: 0x2b2, 0x1b89: 0x2b3, 0x1b8a: 0xc4, 0x1b8b: 0x2b4, 0x1b8c: 0xc6, 0x1b8d: 0x2b5, 0x1b8e: 0xc8, 0x1b8f: 0x2b6, + // Block 0x6f, offset 0x1bc0 + 0x1bf7: 0xca, + 0x1bf8: 0x2b7, 0x1bf9: 0x2b8, 0x1bfa: 0x2b9, 0x1bfb: 0x2ba, 0x1bfc: 0x2bb, 0x1bfd: 0x2bc, 0x1bfe: 0x2bd, 0x1bff: 0x2be, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x2bf, 0x1c01: 0x2c0, 0x1c02: 0x2c1, 0x1c03: 0x2c2, 0x1c04: 0x2c3, 0x1c05: 0x2c4, 0x1c06: 0x2c5, 0x1c07: 0x2c6, + 0x1c08: 0x2c7, 0x1c09: 0x2c8, 0x1c0a: 0x2c9, 0x1c0b: 0x2ca, 0x1c0c: 0x2cb, 0x1c0d: 0x2cc, 0x1c0e: 0x2cd, 0x1c0f: 0x2ce, + 0x1c10: 0x2cf, 0x1c11: 0x2d0, 0x1c12: 0x2d1, 0x1c13: 0x2d2, 0x1c14: 0x2d3, 0x1c15: 0x2d4, 0x1c16: 0x2d5, 0x1c17: 0x2d6, + 0x1c18: 0x2d7, 0x1c19: 0x2d8, 0x1c1a: 0x2d9, 0x1c1b: 0x2da, 0x1c1c: 0x2db, 0x1c1d: 0x2dc, 0x1c1e: 0x2dd, 0x1c1f: 0x2de, + 0x1c20: 0x2df, 0x1c21: 0x2e0, 0x1c22: 0x2e1, 0x1c23: 0x2e2, 0x1c24: 0x2e3, 0x1c25: 0x2e4, 0x1c26: 0x2e5, 0x1c27: 0x2e6, + 0x1c28: 0x2e7, 0x1c29: 0x2e8, 0x1c2a: 0x2e9, 0x1c2b: 0x2ea, 0x1c2c: 0x2eb, 0x1c2d: 0x2ec, 0x1c2e: 0x2ed, 0x1c2f: 0x2ee, + 0x1c30: 0x2ef, 0x1c31: 0x2f0, 0x1c32: 0x2f1, 0x1c33: 0x2f2, 0x1c34: 0x2f3, 0x1c35: 0x2f4, 0x1c36: 0x2f5, 0x1c37: 0x2f6, + 0x1c38: 0x2f7, 0x1c39: 0x2f8, 0x1c3a: 0x2f9, 0x1c3b: 0x2fa, 0x1c3c: 0x2fb, 0x1c3d: 0x2fc, 0x1c3e: 0x2fd, 0x1c3f: 0x2fe, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x2ff, 0x1c41: 0x300, 0x1c42: 0x301, 0x1c43: 0x302, 0x1c44: 0x303, 0x1c45: 0x304, 0x1c46: 0x305, 0x1c47: 0x306, + 0x1c48: 0x307, 0x1c49: 0x308, 0x1c4a: 0x309, 0x1c4b: 0x30a, 0x1c4c: 0x30b, 0x1c4d: 0x30c, 0x1c4e: 0x30d, 0x1c4f: 0x30e, + 0x1c50: 0x30f, 0x1c51: 0x310, 0x1c52: 0x311, 0x1c53: 0x312, 0x1c54: 0x313, 0x1c55: 0x314, 0x1c56: 0x315, 0x1c57: 0x316, + 0x1c58: 0x317, 0x1c59: 0x318, 0x1c5a: 0x319, 0x1c5b: 0x31a, 0x1c5c: 0x31b, 0x1c5d: 0x31c, 0x1c5e: 0x31d, 0x1c5f: 0x31e, + 0x1c60: 0x31f, 0x1c61: 0x320, 0x1c62: 0x321, 0x1c63: 0x322, 0x1c64: 0x323, 0x1c65: 0x324, 0x1c66: 0x325, 0x1c67: 0x326, + 0x1c68: 0x327, 0x1c69: 0x328, 0x1c6a: 0x329, 0x1c6b: 0x32a, 0x1c6c: 0x32b, 0x1c6d: 0x32c, 0x1c6e: 0x32d, 0x1c6f: 0x32e, + 0x1c70: 0x32f, 0x1c71: 0x330, 0x1c72: 0x331, 0x1c73: 0x332, 0x1c74: 0x333, 0x1c75: 0x334, 0x1c76: 0x335, 0x1c77: 0x336, + 0x1c78: 0x337, 0x1c79: 0x338, 0x1c7a: 0x339, 0x1c7b: 0x33a, 0x1c7c: 0x33b, 0x1c7d: 0x33c, 0x1c7e: 0x33d, 0x1c7f: 0x33e, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x33f, 0x1c81: 0x340, 0x1c82: 0x341, 0x1c83: 0x342, 0x1c84: 0x343, 0x1c85: 0x344, 0x1c86: 0x345, 0x1c87: 0x346, + 0x1c88: 0x347, 0x1c89: 0x348, 0x1c8a: 0x349, 0x1c8b: 0x34a, 0x1c8c: 0x34b, 0x1c8d: 0x34c, 0x1c8e: 0x34d, 0x1c8f: 0x34e, + 0x1c90: 0x34f, 0x1c91: 0x350, 0x1c92: 0x351, 0x1c93: 0x352, 0x1c94: 0x353, 0x1c95: 0x354, 0x1c96: 0x355, 0x1c97: 0x356, + 0x1c98: 0x357, 0x1c99: 0x358, 0x1c9a: 0x359, 0x1c9b: 0x35a, 0x1c9c: 0x35b, 0x1c9d: 0x35c, 0x1c9e: 0x35d, 0x1c9f: 0x35e, + 0x1ca0: 0x35f, 0x1ca1: 0x360, 0x1ca2: 0x361, 0x1ca3: 0x362, 0x1ca4: 0x363, 0x1ca5: 0x364, 0x1ca6: 0x365, 0x1ca7: 0x366, + 0x1ca8: 0x367, 0x1ca9: 0x368, 0x1caa: 0x369, 0x1cab: 0x36a, 0x1cac: 0x36b, 0x1cad: 0x36c, 0x1cae: 0x36d, 0x1caf: 0x36e, + 0x1cb0: 0x36f, 0x1cb1: 0x370, 0x1cb2: 0x371, 0x1cb3: 0x372, 0x1cb4: 0x373, 0x1cb5: 0x374, 0x1cb6: 0x375, 0x1cb7: 0x376, + 0x1cb8: 0x377, 0x1cb9: 0x378, 0x1cba: 0x379, 0x1cbc: 0x37a, 0x1cbd: 0x37b, 0x1cbe: 0x37c, 0x1cbf: 0x37d, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x37e, 0x1cc1: 0x37f, 0x1cc2: 0x380, 0x1cc3: 0x381, 0x1cc4: 0x382, 0x1cc5: 0x383, 0x1cc6: 0x384, 0x1cc7: 0x385, + 0x1cc8: 0x386, 0x1cc9: 0x387, 0x1cca: 0x388, 0x1ccb: 0x389, 0x1ccc: 0x38a, 0x1ccd: 0x38b, 0x1cce: 0x38c, 0x1ccf: 0x38d, + 0x1cd0: 0x38e, 0x1cd1: 0x38f, 0x1cd2: 0x390, 0x1cd3: 0x391, 0x1cd4: 0x392, 0x1cd5: 0x393, 0x1cd6: 0x394, 0x1cd7: 0x395, + 0x1cd8: 0x396, 0x1cd9: 0x397, 0x1cda: 0x398, 0x1cdb: 0x399, 0x1cdc: 0x39a, 0x1cdd: 0x39b, 0x1cde: 0x39c, 0x1cdf: 0x39d, + 0x1ce0: 0x39e, 0x1ce1: 0x39f, 0x1ce2: 0x3a0, 0x1ce3: 0x3a1, 0x1ce4: 0x3a2, 0x1ce5: 0x3a3, 0x1ce6: 0x3a4, 0x1ce7: 0x3a5, + 0x1ce8: 0x3a6, 0x1ce9: 0x3a7, 0x1cea: 0x3a8, 0x1ceb: 0x3a9, 0x1cec: 0x3aa, 0x1ced: 0x3ab, 0x1cee: 0x3ac, + 0x1cf0: 0x3ad, 0x1cf1: 0x3ae, 0x1cf2: 0x3af, 0x1cf3: 0x3b0, 0x1cf4: 0x3b1, 0x1cf5: 0x3b2, 0x1cf6: 0x3b3, 0x1cf7: 0x3b4, + 0x1cf8: 0x3b5, 0x1cf9: 0x3b6, 0x1cfa: 0x3b7, 0x1cfb: 0x3b8, 0x1cfc: 0x3b9, 0x1cfd: 0x3ba, 0x1cfe: 0x3bb, 0x1cff: 0x3bc, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x3bd, 0x1d01: 0x3be, 0x1d02: 0x3bf, 0x1d03: 0x3c0, 0x1d04: 0x3c1, 0x1d05: 0x3c2, 0x1d06: 0x3c3, 0x1d07: 0x3c4, + 0x1d08: 0x3c5, 0x1d09: 0x3c6, 0x1d0a: 0x3c7, 0x1d0b: 0x3c8, 0x1d0c: 0x3c9, 0x1d0d: 0x3ca, 0x1d0e: 0x3cb, 0x1d0f: 0x3cc, + 0x1d10: 0x3cd, 0x1d11: 0x3ce, 0x1d12: 0x3cf, 0x1d15: 0x3d0, 0x1d16: 0x3d1, 0x1d17: 0x3d2, + 0x1d18: 0x3d3, 0x1d19: 0x3d4, 0x1d1a: 0x3d5, 0x1d1b: 0x3d6, 0x1d1c: 0x3d7, 0x1d1d: 0x3d8, 0x1d1e: 0x3d9, 0x1d1f: 0x3da, + 0x1d20: 0x3db, 0x1d21: 0x3dc, 0x1d22: 0x3dd, 0x1d23: 0x3de, 0x1d24: 0x3df, 0x1d25: 0x3e0, 0x1d26: 0x3e1, 0x1d27: 0x3e2, + 0x1d28: 0x3e3, 0x1d29: 0x3e4, 0x1d2a: 0x3e5, 0x1d2b: 0x3e6, 0x1d2c: 0x3e7, 0x1d2d: 0x3e8, 0x1d2e: 0x3e9, 0x1d2f: 0x3ea, + 0x1d30: 0x3eb, 0x1d31: 0x3ec, 0x1d33: 0x3ed, 0x1d34: 0x3ee, 0x1d35: 0x3ef, 0x1d36: 0x3f0, 0x1d37: 0x3f1, + 0x1d38: 0x3f2, 0x1d39: 0x3f3, 0x1d3a: 0x3f4, 0x1d3b: 0x3f5, 0x1d3c: 0x3f6, 0x1d3d: 0x3f7, 0x1d3e: 0x3f8, + // Block 0x75, offset 0x1d40 + 0x1d64: 0x3f9, 0x1d65: 0x3fa, 0x1d66: 0x3fb, 0x1d67: 0x3fc, + 0x1d68: 0x3fd, 0x1d69: 0x3fe, 0x1d6a: 0x3ff, 0x1d6b: 0x400, 0x1d6c: 0x103, 0x1d6d: 0x104, 0x1d6e: 0x105, 0x1d6f: 0x106, + 0x1d70: 0x107, 0x1d71: 0x108, 0x1d72: 0x109, 0x1d73: 0x10a, 0x1d74: 0x10b, 0x1d75: 0x10c, 0x1d76: 0x10d, 0x1d77: 0x10e, + 0x1d78: 0x10f, 0x1d79: 0x110, 0x1d7a: 0x111, 0x1d7b: 0x112, 0x1d7c: 0x401, 0x1d7d: 0x402, 0x1d7e: 0x403, 0x1d7f: 0x404, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x18b, 0x1d81: 0x18c, 0x1d82: 0x18d, 0x1d83: 0x18e, 0x1d84: 0x18f, 0x1d85: 0x190, 0x1d86: 0x191, 0x1d87: 0x192, + 0x1d88: 0x193, 0x1d89: 0x405, 0x1d8c: 0x195, 0x1d8d: 0x196, 0x1d8e: 0x197, 0x1d8f: 0x198, + 0x1d90: 0x199, 0x1d91: 0x19a, 0x1d92: 0x19b, 0x1d93: 0x19c, 0x1d94: 0x19d, 0x1d95: 0x19e, 0x1d97: 0x19f, + 0x1d98: 0x1a0, 0x1d99: 0x1a1, 0x1d9a: 0x1a2, 0x1d9b: 0x1a3, 0x1d9c: 0x1a4, 0x1d9d: 0x1a5, + // Block 0x77, offset 0x1dc0 + 0x1de0: 0x406, 0x1de1: 0x407, 0x1de2: 0x408, 0x1de3: 0x409, 0x1de4: 0x40a, 0x1de5: 0x40b, 0x1de6: 0x40c, 0x1de7: 0x40d, + 0x1de8: 0x40e, + // Block 0x78, offset 0x1e00 + 0x1e10: 0x09, 0x1e11: 0x0a, 0x1e12: 0x0b, 0x1e13: 0x0c, 0x1e16: 0x0d, + 0x1e1b: 0x0e, 0x1e1d: 0x0f, 0x1e1e: 0x10, 0x1e1f: 0x74, + 0x1e2f: 0x75, + // Block 0x79, offset 0x1e40 + 0x1e42: 0x01, 0x1e43: 0x02, 0x1e44: 0x03, 0x1e45: 0x04, 0x1e46: 0x05, 0x1e47: 0x06, + 0x1e48: 0x07, 0x1e49: 0x08, 0x1e4a: 0x09, 0x1e4b: 0x0a, 0x1e4c: 0x0b, 0x1e4d: 0x0c, 0x1e4e: 0x0d, 0x1e4f: 0x0e, + 0x1e50: 0x0f, 0x1e51: 0x10, 0x1e52: 0x11, 0x1e53: 0x12, 0x1e54: 0x13, 0x1e55: 0x14, 0x1e56: 0x15, 0x1e57: 0x16, + 0x1e58: 0x17, 0x1e59: 0x18, 0x1e5a: 0x19, 0x1e5b: 0x1a, 0x1e5c: 0x1b, 0x1e5d: 0x1c, 0x1e5e: 0x1d, 0x1e5f: 0x1e, + 0x1e60: 0x01, 0x1e61: 0x02, 0x1e62: 0x03, 0x1e63: 0x6c, 0x1e64: 0x6d, 0x1e65: 0x6e, 0x1e66: 0x6f, 0x1e67: 0x70, + 0x1e68: 0x71, 0x1e69: 0x72, 0x1e6a: 0x06, 0x1e6d: 0x07, 0x1e6f: 0x73, + 0x1e70: 0x76, 0x1e73: 0x15, + // Block 0x7a, offset 0x1e80 + 0x1e82: 0x01, 0x1e83: 0x02, 0x1e84: 0x03, 0x1e85: 0x04, 0x1e86: 0x05, 0x1e87: 0x06, + 0x1e88: 0x07, 0x1e89: 0x08, 0x1e8a: 0x09, 0x1e8b: 0x0a, 0x1e8c: 0x0b, 0x1e8d: 0x0c, 0x1e8e: 0x0d, 0x1e8f: 0x0e, + 0x1e90: 0x40f, 0x1e91: 0x410, 0x1e92: 0x411, 0x1e93: 0x12, 0x1e94: 0x13, 0x1e95: 0x14, 0x1e96: 0x15, 0x1e97: 0x16, + 0x1e98: 0x17, 0x1e99: 0x18, 0x1e9a: 0x19, 0x1e9b: 0x1a, 0x1e9c: 0x1b, 0x1e9d: 0x1c, 0x1e9e: 0x1d, 0x1e9f: 0x1e, + 0x1ea0: 0x01, 0x1ea1: 0x02, 0x1ea2: 0x03, 0x1ea3: 0x04, 0x1ea4: 0x05, + 0x1eaa: 0x06, 0x1ead: 0x07, 0x1eaf: 0x08, + 0x1eb0: 0x13, 0x1eb3: 0x15, + // Block 0x7b, offset 0x1ec0 + 0x1ec2: 0x01, 0x1ec3: 0x1f7, 0x1ec4: 0x414, 0x1ec5: 0x1f9, 0x1ec6: 0x05, 0x1ec7: 0x1fa, + 0x1ec8: 0x1fb, 0x1ec9: 0x08, 0x1eca: 0x09, 0x1ecb: 0x0a, 0x1ecc: 0x0b, 0x1ecd: 0x0c, 0x1ece: 0x0d, 0x1ecf: 0x0e, + 0x1ed0: 0x0f, 0x1ed1: 0x10, 0x1ed2: 0x11, 0x1ed3: 0x12, 0x1ed4: 0x13, 0x1ed5: 0x14, 0x1ed6: 0x15, 0x1ed7: 0x16, + 0x1ed8: 0x17, 0x1ed9: 0x18, 0x1eda: 0x19, 0x1edb: 0x1a, 0x1edc: 0x1b, 0x1edd: 0x1c, 0x1ede: 0x1d, 0x1edf: 0x1e, + 0x1ee0: 0x01, 0x1ee1: 0x2f, 0x1ee2: 0x30, 0x1ee3: 0x04, 0x1ee4: 0x05, + 0x1eea: 0x06, 0x1eed: 0x07, 0x1eef: 0x08, + 0x1ef0: 0x13, 0x1ef3: 0x15, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0x3f, 0x1f01: 0x40, 0x1f02: 0x41, 0x1f03: 0x42, 0x1f04: 0x43, 0x1f05: 0x44, 0x1f06: 0x45, 0x1f07: 0x46, + 0x1f08: 0x47, 0x1f09: 0x48, 0x1f0a: 0x49, 0x1f0b: 0x4a, 0x1f0c: 0x4b, 0x1f0d: 0x4c, 0x1f0e: 0x4d, 0x1f0f: 0x4e, + 0x1f10: 0x4f, 0x1f11: 0x50, 0x1f12: 0x51, 0x1f13: 0x52, 0x1f14: 0x53, 0x1f15: 0x54, 0x1f16: 0x55, 0x1f17: 0x56, + 0x1f18: 0x57, 0x1f19: 0x58, 0x1f1a: 0x59, 0x1f1b: 0x5a, 0x1f1c: 0x5b, 0x1f1d: 0x5c, 0x1f1e: 0x415, 0x1f1f: 0x416, + 0x1f20: 0x5f, 0x1f21: 0x60, 0x1f22: 0x61, 0x1f23: 0x62, 0x1f24: 0x63, 0x1f25: 0x64, 0x1f26: 0x65, 0x1f27: 0x66, + 0x1f28: 0x67, 0x1f29: 0x68, 0x1f2a: 0x69, 0x1f2c: 0x6a, 0x1f2d: 0x6b, 0x1f2e: 0x6c, 0x1f2f: 0x6d, + 0x1f30: 0x6e, 0x1f31: 0x6f, 0x1f33: 0x70, 0x1f34: 0x71, 0x1f35: 0x72, 0x1f36: 0x73, 0x1f37: 0x74, + 0x1f38: 0x75, 0x1f39: 0x76, 0x1f3a: 0x77, 0x1f3b: 0x78, 0x1f3c: 0x79, 0x1f3d: 0x7a, 0x1f3e: 0x7b, 0x1f3f: 0x7c, + // Block 0x7d, offset 0x1f40 + 0x1f42: 0x01, 0x1f43: 0x02, 0x1f44: 0x03, 0x1f45: 0x04, 0x1f46: 0x05, 0x1f47: 0x06, + 0x1f48: 0x07, 0x1f49: 0x08, 0x1f4a: 0x09, 0x1f4b: 0x0a, 0x1f4c: 0x0b, 0x1f4d: 0x0c, 0x1f4e: 0x0d, 0x1f4f: 0x0e, + 0x1f50: 0x0f, 0x1f51: 0x10, 0x1f52: 0x11, 0x1f53: 0x12, 0x1f54: 0x13, 0x1f55: 0x14, 0x1f56: 0x15, 0x1f57: 0x16, + 0x1f58: 0x17, 0x1f59: 0x18, 0x1f5a: 0x19, 0x1f5b: 0x1a, 0x1f5c: 0x1b, 0x1f5d: 0x1c, 0x1f5e: 0x1d, 0x1f5f: 0x1e, + 0x1f60: 0x01, 0x1f61: 0x7a, 0x1f62: 0x03, 0x1f63: 0x04, 0x1f64: 0x05, + 0x1f6a: 0x06, 0x1f6d: 0x07, 0x1f6f: 0x08, + 0x1f70: 0x13, 0x1f73: 0x15, + // Block 0x7e, offset 0x1f80 + 0x1fa0: 0x1f, 0x1fa1: 0x20, 0x1fa2: 0x21, 0x1fa3: 0x22, 0x1fa4: 0x23, 0x1fa5: 0x24, 0x1fa6: 0x25, 0x1fa7: 0x26, + 0x1fa8: 0x27, 0x1fa9: 0x28, 0x1faa: 0x29, 0x1fab: 0x2a, 0x1fac: 0x2b, 0x1fad: 0x2c, 0x1fae: 0x2d, 0x1faf: 0x2e, + 0x1fb0: 0x2f, 0x1fb1: 0x30, 0x1fb2: 0x417, 0x1fb3: 0x418, 0x1fb4: 0x33, 0x1fb5: 0x34, 0x1fb6: 0x35, 0x1fb7: 0x36, + 0x1fb8: 0x37, 0x1fb9: 0x38, 0x1fba: 0x39, 0x1fbb: 0x3a, 0x1fbc: 0x3b, 0x1fbd: 0x3c, 0x1fbe: 0x3d, 0x1fbf: 0x3e, + // Block 0x7f, offset 0x1fc0 + 0x1fc2: 0x01, 0x1fc3: 0x02, 0x1fc4: 0x03, 0x1fc5: 0x04, 0x1fc6: 0x05, 0x1fc7: 0x06, + 0x1fc8: 0x07, 0x1fc9: 0x08, 0x1fca: 0x09, 0x1fcb: 0x0a, 0x1fcc: 0x0b, 0x1fcd: 0x0c, 0x1fce: 0x0d, 0x1fcf: 0x0e, + 0x1fd0: 0x0f, 0x1fd1: 0x10, 0x1fd2: 0x11, 0x1fd3: 0x12, 0x1fd4: 0x13, 0x1fd5: 0x14, 0x1fd6: 0x15, 0x1fd7: 0x16, + 0x1fd8: 0x17, 0x1fd9: 0x18, 0x1fda: 0x19, 0x1fdb: 0x1a, 0x1fdc: 0x1b, 0x1fdd: 0x1c, 0x1fde: 0x1d, 0x1fdf: 0x1e, + 0x1fe0: 0x7c, 0x1fe1: 0x02, 0x1fe2: 0x03, 0x1fe3: 0x04, 0x1fe4: 0x05, + 0x1fea: 0x06, 0x1fed: 0x07, 0x1fef: 0x08, + 0x1ff0: 0x13, 0x1ff3: 0x15, + // Block 0x80, offset 0x2000 + 0x2000: 0xba, 0x2001: 0xbb, 0x2002: 0xbc, 0x2003: 0xbd, 0x2004: 0xbe, 0x2005: 0xbf, 0x2006: 0xc0, 0x2007: 0xc1, + 0x2008: 0x419, 0x2009: 0x2b3, 0x200a: 0xc4, 0x200b: 0x2b4, 0x200c: 0xc6, 0x200d: 0x2b5, 0x200e: 0xc8, 0x200f: 0x2b6, + // Block 0x81, offset 0x2040 + 0x2077: 0xca, + 0x2078: 0x41a, 0x2079: 0x41b, 0x207a: 0x41c, 0x207b: 0x41d, 0x207c: 0x41e, 0x207d: 0x41f, 0x207e: 0x420, 0x207f: 0x421, + // Block 0x82, offset 0x2080 + 0x2080: 0x422, 0x2081: 0x423, 0x2082: 0x424, 0x2083: 0x425, 0x2084: 0x426, 0x2085: 0x427, 0x2086: 0x428, 0x2087: 0x429, + 0x2088: 0x42a, 0x2089: 0x42b, 0x208a: 0x42c, 0x208b: 0x42d, 0x208c: 0x42e, 0x208d: 0x42f, 0x208e: 0x430, 0x208f: 0x431, + 0x2090: 0x432, 0x2091: 0x433, 0x2092: 0x434, 0x2093: 0x435, 0x2094: 0x436, 0x2095: 0x437, 0x2096: 0x438, 0x2097: 0x439, + 0x2098: 0x43a, 0x2099: 0x43b, 0x209a: 0x43c, 0x209b: 0x43d, 0x209c: 0x43e, 0x209d: 0x43f, 0x209e: 0x440, 0x209f: 0x441, + 0x20a0: 0x442, 0x20a1: 0x443, 0x20a2: 0x444, 0x20a3: 0x445, 0x20a4: 0x446, 0x20a5: 0x447, 0x20a6: 0x448, 0x20a7: 0x449, + 0x20a8: 0x44a, 0x20a9: 0x44b, 0x20aa: 0x44c, 0x20ab: 0x44d, 0x20ac: 0x44e, 0x20ad: 0x44f, 0x20ae: 0x450, 0x20af: 0x451, + 0x20b0: 0x452, 0x20b1: 0x453, 0x20b2: 0x454, 0x20b3: 0x455, 0x20b4: 0x456, 0x20b5: 0x457, 0x20b6: 0x458, 0x20b7: 0x459, + 0x20b8: 0x45a, 0x20b9: 0x45b, 0x20ba: 0x45c, 0x20bb: 0x45d, 0x20bc: 0x45e, 0x20bd: 0x45f, 0x20be: 0x460, 0x20bf: 0x461, + // Block 0x83, offset 0x20c0 + 0x20c0: 0x462, 0x20c1: 0x463, 0x20c2: 0x464, 0x20c3: 0x465, 0x20c4: 0x466, 0x20c5: 0x467, 0x20c6: 0x468, 0x20c7: 0x469, + 0x20c8: 0x46a, 0x20c9: 0x46b, 0x20ca: 0x46c, 0x20cb: 0x46d, 0x20cc: 0x46e, 0x20cd: 0x46f, 0x20ce: 0x470, 0x20cf: 0x471, + 0x20d0: 0x472, 0x20d1: 0x473, 0x20d2: 0x474, 0x20d3: 0x475, 0x20d4: 0x476, 0x20d5: 0x477, 0x20d6: 0x478, 0x20d7: 0x479, + 0x20d8: 0x47a, 0x20d9: 0x47b, 0x20da: 0x47c, 0x20db: 0x47d, 0x20dc: 0x47e, 0x20dd: 0x47f, 0x20de: 0x480, 0x20df: 0x481, + 0x20e0: 0x482, 0x20e1: 0x483, 0x20e2: 0x484, 0x20e3: 0x485, 0x20e4: 0x486, 0x20e5: 0x487, 0x20e6: 0x488, 0x20e7: 0x489, + 0x20e8: 0x48a, 0x20e9: 0x48b, 0x20ea: 0x48c, 0x20eb: 0x48d, 0x20ec: 0x48e, 0x20ed: 0x48f, 0x20ee: 0x490, 0x20ef: 0x491, + 0x20f0: 0x492, 0x20f1: 0x493, 0x20f2: 0x494, 0x20f3: 0x495, 0x20f4: 0x496, 0x20f5: 0x497, 0x20f6: 0x498, 0x20f7: 0x499, + 0x20f8: 0x49a, 0x20f9: 0x49b, 0x20fa: 0x49c, 0x20fb: 0x49d, 0x20fc: 0x49e, 0x20fd: 0x49f, 0x20fe: 0x4a0, 0x20ff: 0x4a1, + // Block 0x84, offset 0x2100 + 0x2100: 0x4a2, 0x2101: 0x4a3, 0x2102: 0x4a4, 0x2103: 0x4a5, 0x2104: 0x4a6, 0x2105: 0x4a7, 0x2106: 0x4a8, 0x2107: 0x4a9, + 0x2108: 0x4aa, 0x2109: 0x4ab, 0x210a: 0x4ac, 0x210b: 0x4ad, 0x210c: 0x4ae, 0x210d: 0x4af, 0x210e: 0x4b0, 0x210f: 0x4b1, + 0x2110: 0x4b2, 0x2111: 0x4b3, 0x2112: 0x4b4, 0x2113: 0x4b5, 0x2114: 0x4b6, 0x2115: 0x4b7, 0x2116: 0x4b8, 0x2117: 0x4b9, + 0x2118: 0x4ba, 0x2119: 0x4bb, 0x211a: 0x4bc, 0x211b: 0x4bd, 0x211c: 0x4be, 0x211d: 0x4bf, 0x211e: 0x4c0, 0x211f: 0x4c1, + 0x2120: 0x4c2, 0x2121: 0x4c3, 0x2122: 0x4c4, 0x2123: 0x4c5, 0x2124: 0x4c6, 0x2125: 0x4c7, 0x2126: 0x4c8, 0x2127: 0x4c9, + 0x2128: 0x4ca, 0x2129: 0x4cb, 0x212a: 0x4cc, 0x212b: 0x4cd, 0x212c: 0x4ce, 0x212d: 0x4cf, 0x212e: 0x4d0, 0x212f: 0x4d1, + 0x2130: 0x4d2, 0x2131: 0x4d3, 0x2132: 0x4d4, 0x2133: 0x4d5, 0x2134: 0x4d6, 0x2135: 0x4d7, 0x2136: 0x4d8, 0x2137: 0x4d9, + 0x2138: 0x4da, 0x2139: 0x4db, 0x213a: 0x4dc, 0x213c: 0x4dd, 0x213d: 0x4de, 0x213e: 0x4df, 0x213f: 0x4e0, + // Block 0x85, offset 0x2140 + 0x2140: 0x4e1, 0x2141: 0x4e2, 0x2142: 0x4e3, 0x2143: 0x4e4, 0x2144: 0x4e5, 0x2145: 0x4e6, 0x2146: 0x4e7, 0x2147: 0x4e8, + 0x2148: 0x4e9, 0x2149: 0x4ea, 0x214a: 0x4eb, 0x214b: 0x4ec, 0x214c: 0x4ed, 0x214d: 0x4ee, 0x214e: 0x4ef, 0x214f: 0x4f0, + 0x2150: 0x4f1, 0x2151: 0x4f2, 0x2152: 0x4f3, 0x2153: 0x4f4, 0x2154: 0x4f5, 0x2155: 0x4f6, 0x2156: 0x4f7, 0x2157: 0x4f8, + 0x2158: 0x4f9, 0x2159: 0x4fa, 0x215a: 0x4fb, 0x215b: 0x4fc, 0x215c: 0x4fd, 0x215d: 0x4fe, 0x215e: 0x4ff, 0x215f: 0x500, + 0x2160: 0x501, 0x2161: 0x502, 0x2162: 0x503, 0x2163: 0x504, 0x2164: 0x505, 0x2165: 0x506, 0x2166: 0x507, 0x2167: 0x508, + 0x2168: 0x509, 0x2169: 0x50a, 0x216a: 0x50b, 0x216b: 0x50c, 0x216c: 0x50d, 0x216d: 0x50e, 0x216e: 0x50f, + 0x2170: 0x510, 0x2171: 0x511, 0x2172: 0x512, 0x2173: 0x513, 0x2174: 0x514, 0x2175: 0x515, 0x2176: 0x516, 0x2177: 0x517, + 0x2178: 0x518, 0x2179: 0x519, 0x217a: 0x51a, 0x217b: 0x51b, 0x217c: 0x51c, 0x217d: 0x51d, 0x217e: 0x51e, 0x217f: 0x51f, + // Block 0x86, offset 0x2180 + 0x2180: 0x520, 0x2181: 0x521, 0x2182: 0x522, 0x2183: 0x523, 0x2184: 0x524, 0x2185: 0x525, 0x2186: 0x526, 0x2187: 0x527, + 0x2188: 0x528, 0x2189: 0x529, 0x218a: 0x52a, 0x218b: 0x52b, 0x218c: 0x52c, 0x218d: 0x52d, 0x218e: 0x52e, 0x218f: 0x52f, + 0x2190: 0x530, 0x2191: 0x531, 0x2195: 0x532, 0x2196: 0x533, 0x2197: 0x534, + 0x2198: 0x535, 0x2199: 0x536, 0x219a: 0x537, 0x219b: 0x538, 0x219c: 0x539, 0x219d: 0x53a, 0x219e: 0x53b, 0x219f: 0x53c, + 0x21a0: 0x53d, 0x21a1: 0x53e, 0x21a2: 0x53f, 0x21a3: 0x540, 0x21a4: 0x541, 0x21a5: 0x542, 0x21a6: 0x543, 0x21a7: 0x544, + 0x21a8: 0x545, 0x21a9: 0x546, 0x21aa: 0x547, 0x21ab: 0x548, 0x21ac: 0x549, 0x21ad: 0x54a, 0x21ae: 0x54b, 0x21af: 0x54c, + 0x21b0: 0x54d, 0x21b1: 0x54e, 0x21b3: 0x54f, 0x21b4: 0x550, 0x21b5: 0x551, 0x21b6: 0x552, 0x21b7: 0x553, + 0x21b8: 0x554, 0x21b9: 0x555, 0x21ba: 0x556, 0x21bb: 0x557, 0x21bc: 0x558, 0x21bd: 0x559, 0x21be: 0x55a, + // Block 0x87, offset 0x21c0 + 0x21e4: 0x55b, 0x21e5: 0x55c, 0x21e6: 0x55d, 0x21e7: 0x55e, + 0x21e8: 0x55f, 0x21e9: 0x560, 0x21ea: 0x561, 0x21eb: 0x562, 0x21ec: 0x103, 0x21ed: 0x104, 0x21ee: 0x105, 0x21ef: 0x106, + 0x21f0: 0x107, 0x21f1: 0x108, 0x21f2: 0x109, 0x21f3: 0x10a, 0x21f4: 0x10b, 0x21f5: 0x10c, 0x21f6: 0x10d, 0x21f7: 0x10e, + 0x21f8: 0x10f, 0x21f9: 0x110, 0x21fa: 0x111, 0x21fb: 0x112, 0x21fc: 0x113, 0x21fd: 0x114, 0x21fe: 0x115, 0x21ff: 0x116, + // Block 0x88, offset 0x2200 + 0x2200: 0x18b, 0x2201: 0x18c, 0x2202: 0x18d, 0x2203: 0x18e, 0x2204: 0x18f, 0x2205: 0x190, 0x2206: 0x191, 0x2207: 0x192, + 0x2208: 0x193, 0x2209: 0x563, 0x220c: 0x195, 0x220d: 0x196, 0x220e: 0x197, 0x220f: 0x198, + 0x2210: 0x199, 0x2211: 0x19a, 0x2212: 0x19b, 0x2213: 0x19c, 0x2214: 0x19d, 0x2215: 0x19e, 0x2217: 0x19f, + 0x2218: 0x1a0, 0x2219: 0x1a1, 0x221a: 0x1a2, 0x221b: 0x1a3, 0x221c: 0x1a4, 0x221d: 0x1a5, + // Block 0x89, offset 0x2240 + 0x2260: 0x564, 0x2261: 0x565, 0x2262: 0x566, 0x2263: 0x567, 0x2264: 0x568, 0x2265: 0x569, 0x2266: 0x56a, 0x2267: 0x56b, + 0x2268: 0x56c, + // Block 0x8a, offset 0x2280 + 0x2290: 0x09, 0x2291: 0x0a, 0x2292: 0x0b, 0x2293: 0x0c, 0x2296: 0x0d, + 0x229b: 0x0e, 0x229d: 0x0f, 0x229e: 0x10, 0x229f: 0x86, + 0x22af: 0x87, + // Block 0x8b, offset 0x22c0 + 0x22c2: 0x01, 0x22c3: 0x02, 0x22c4: 0x03, 0x22c5: 0x04, 0x22c6: 0x05, 0x22c7: 0x06, + 0x22c8: 0x07, 0x22c9: 0x08, 0x22ca: 0x09, 0x22cb: 0x0a, 0x22cc: 0x0b, 0x22cd: 0x0c, 0x22ce: 0x0d, 0x22cf: 0x0e, + 0x22d0: 0x0f, 0x22d1: 0x10, 0x22d2: 0x11, 0x22d3: 0x12, 0x22d4: 0x13, 0x22d5: 0x14, 0x22d6: 0x15, 0x22d7: 0x16, + 0x22d8: 0x17, 0x22d9: 0x18, 0x22da: 0x19, 0x22db: 0x1a, 0x22dc: 0x1b, 0x22dd: 0x1c, 0x22de: 0x1d, 0x22df: 0x1e, + 0x22e0: 0x01, 0x22e1: 0x02, 0x22e2: 0x03, 0x22e3: 0x7e, 0x22e4: 0x7f, 0x22e5: 0x80, 0x22e6: 0x81, 0x22e7: 0x82, + 0x22e8: 0x83, 0x22e9: 0x84, 0x22ea: 0x06, 0x22ed: 0x07, 0x22ef: 0x85, + 0x22f0: 0x88, 0x22f3: 0x15, + // Block 0x8c, offset 0x2300 + 0x2320: 0x1f, 0x2321: 0x20, 0x2322: 0x21, 0x2323: 0x22, 0x2324: 0x56d, 0x2325: 0x24, 0x2326: 0x25, 0x2327: 0x26, + 0x2328: 0x27, 0x2329: 0x28, 0x232a: 0x29, 0x232b: 0x2a, 0x232c: 0x2b, 0x232d: 0x2c, 0x232e: 0x2d, 0x232f: 0x2e, + 0x2330: 0x2f, 0x2331: 0x30, 0x2332: 0x31, 0x2333: 0x32, 0x2334: 0x33, 0x2335: 0x34, 0x2336: 0x35, 0x2337: 0x36, + 0x2338: 0x37, 0x2339: 0x38, 0x233a: 0x39, 0x233b: 0x3a, 0x233c: 0x3b, 0x233d: 0x3c, 0x233e: 0x3d, 0x233f: 0x3e, + // Block 0x8d, offset 0x2340 + 0x2342: 0x01, 0x2343: 0x02, 0x2344: 0x03, 0x2345: 0x04, 0x2346: 0x05, 0x2347: 0x06, + 0x2348: 0x07, 0x2349: 0x08, 0x234a: 0x09, 0x234b: 0x0a, 0x234c: 0x0b, 0x234d: 0x0c, 0x234e: 0x0d, 0x234f: 0x0e, + 0x2350: 0x0f, 0x2351: 0x10, 0x2352: 0x11, 0x2353: 0x12, 0x2354: 0x13, 0x2355: 0x14, 0x2356: 0x15, 0x2357: 0x16, + 0x2358: 0x17, 0x2359: 0x18, 0x235a: 0x19, 0x235b: 0x1a, 0x235c: 0x1b, 0x235d: 0x1c, 0x235e: 0x1d, 0x235f: 0x1e, + 0x2360: 0x8a, 0x2361: 0x02, 0x2362: 0x03, 0x2363: 0x04, 0x2364: 0x05, + 0x236a: 0x06, 0x236d: 0x07, 0x236f: 0x08, + 0x2370: 0x13, 0x2373: 0x15, + // Block 0x8e, offset 0x2380 + 0x2382: 0x01, 0x2383: 0x02, 0x2384: 0x03, 0x2385: 0x04, 0x2386: 0x570, 0x2387: 0x06, + 0x2388: 0x07, 0x2389: 0x571, 0x238a: 0x09, 0x238b: 0x0a, 0x238c: 0x0b, 0x238d: 0x0c, 0x238e: 0x0d, 0x238f: 0x0e, + 0x2390: 0x0f, 0x2391: 0x10, 0x2392: 0x11, 0x2393: 0x12, 0x2394: 0x13, 0x2395: 0x14, 0x2396: 0x15, 0x2397: 0x16, + 0x2398: 0x17, 0x2399: 0x18, 0x239a: 0x19, 0x239b: 0x1a, 0x239c: 0x1b, 0x239d: 0x1c, 0x239e: 0x1d, 0x239f: 0x1e, + 0x23a0: 0x01, 0x23a1: 0x02, 0x23a2: 0x03, 0x23a3: 0x04, 0x23a4: 0x05, + 0x23aa: 0x06, 0x23ad: 0x07, 0x23af: 0x08, + 0x23b0: 0x13, 0x23b3: 0x15, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x3f, 0x23c1: 0x40, 0x23c2: 0x41, 0x23c3: 0x42, 0x23c4: 0x43, 0x23c5: 0x44, 0x23c6: 0x45, 0x23c7: 0x46, + 0x23c8: 0x47, 0x23c9: 0x48, 0x23ca: 0x49, 0x23cb: 0x4a, 0x23cc: 0x4b, 0x23cd: 0x4c, 0x23ce: 0x4d, 0x23cf: 0x4e, + 0x23d0: 0x4f, 0x23d1: 0x50, 0x23d2: 0x51, 0x23d3: 0x52, 0x23d4: 0x53, 0x23d5: 0x54, 0x23d6: 0x55, 0x23d7: 0x56, + 0x23d8: 0x57, 0x23d9: 0x58, 0x23da: 0x59, 0x23db: 0x5a, 0x23dc: 0x5b, 0x23dd: 0x5c, 0x23de: 0x5d, 0x23df: 0x5e, + 0x23e0: 0x5f, 0x23e1: 0x60, 0x23e2: 0x61, 0x23e3: 0x62, 0x23e4: 0x63, 0x23e5: 0x64, 0x23e6: 0x65, 0x23e7: 0x66, + 0x23e8: 0x67, 0x23e9: 0x68, 0x23ea: 0x69, 0x23ec: 0x6a, 0x23ed: 0x6b, 0x23ee: 0x6c, 0x23ef: 0x6d, + 0x23f0: 0x6e, 0x23f1: 0x6f, 0x23f3: 0x70, 0x23f4: 0x71, 0x23f5: 0x72, 0x23f6: 0x73, 0x23f7: 0x74, + 0x23f8: 0x75, 0x23f9: 0x57a, 0x23fa: 0x57b, 0x23fb: 0x57c, 0x23fc: 0x79, 0x23fd: 0x7a, 0x23fe: 0x7b, 0x23ff: 0x7c, + // Block 0x90, offset 0x2400 + 0x2400: 0x7d, 0x2401: 0x7e, 0x2402: 0x7f, 0x2403: 0x80, 0x2404: 0x81, 0x2405: 0x82, 0x2406: 0x83, 0x2407: 0x84, + 0x2408: 0x85, 0x2409: 0x86, 0x240a: 0x87, 0x240b: 0x88, 0x240c: 0x89, 0x240d: 0x8a, 0x240e: 0x8b, 0x240f: 0x8c, + 0x2410: 0x8d, 0x2411: 0x8e, 0x2412: 0x57d, 0x2413: 0x90, 0x2414: 0x91, 0x2415: 0x92, 0x2416: 0x93, 0x2417: 0x94, + 0x2418: 0x95, 0x2419: 0x96, 0x241a: 0x97, 0x241b: 0x98, 0x241c: 0x99, 0x241d: 0x9a, 0x241e: 0x9b, 0x241f: 0x9c, + 0x2420: 0x9d, 0x2421: 0x9e, 0x2422: 0x9f, 0x2423: 0xa0, 0x2424: 0xa1, 0x2425: 0xa2, 0x2426: 0xa3, 0x2427: 0xa4, + 0x2428: 0xa5, 0x2429: 0xa6, 0x242a: 0xa7, 0x242b: 0xa8, 0x242c: 0xa9, 0x242d: 0xaa, + 0x2430: 0xab, 0x2431: 0xac, 0x2432: 0xad, 0x2433: 0xae, 0x2434: 0xaf, 0x2435: 0xb0, 0x2436: 0xb1, 0x2437: 0xb2, + 0x2438: 0xb3, 0x243a: 0xb4, 0x243b: 0xb5, 0x243c: 0xb6, 0x243d: 0xb7, 0x243e: 0xb8, 0x243f: 0xb9, + // Block 0x91, offset 0x2440 + 0x2440: 0xba, 0x2441: 0xbb, 0x2442: 0xbc, 0x2443: 0xbd, 0x2444: 0xbe, 0x2445: 0xbf, 0x2446: 0xc0, 0x2447: 0xc1, + 0x2448: 0xc2, 0x2449: 0xc3, 0x244a: 0xc4, 0x244b: 0xc5, 0x244c: 0xc6, 0x244d: 0xc7, 0x244e: 0xc8, 0x244f: 0x57e, + // Block 0x92, offset 0x2480 + 0x2480: 0x18b, 0x2481: 0x18c, 0x2482: 0x18d, 0x2483: 0x18e, 0x2484: 0x57f, 0x2485: 0x190, 0x2486: 0x191, 0x2487: 0x192, + 0x2488: 0x193, 0x2489: 0x194, 0x248c: 0x195, 0x248d: 0x196, 0x248e: 0x197, 0x248f: 0x198, + 0x2490: 0x199, 0x2491: 0x19a, 0x2492: 0x19b, 0x2493: 0x19c, 0x2494: 0x19d, 0x2495: 0x19e, 0x2497: 0x19f, + 0x2498: 0x1a0, 0x2499: 0x1a1, 0x249a: 0x1a2, 0x249b: 0x1a3, 0x249c: 0x1a4, 0x249d: 0x1a5, + // Block 0x93, offset 0x24c0 + 0x24d0: 0x09, 0x24d1: 0x0a, 0x24d2: 0x0b, 0x24d3: 0x0c, 0x24d6: 0x0d, + 0x24db: 0x0e, 0x24dd: 0x0f, 0x24de: 0x10, 0x24df: 0x90, + 0x24ef: 0x12, + // Block 0x94, offset 0x2500 + 0x2502: 0x01, 0x2503: 0x574, 0x2504: 0x575, 0x2505: 0x576, 0x2506: 0x05, 0x2507: 0x577, + 0x2508: 0x578, 0x2509: 0x08, 0x250a: 0x09, 0x250b: 0x0a, 0x250c: 0x579, 0x250d: 0x0c, 0x250e: 0x0d, 0x250f: 0x0e, + 0x2510: 0x0f, 0x2511: 0x10, 0x2512: 0x11, 0x2513: 0x12, 0x2514: 0x13, 0x2515: 0x14, 0x2516: 0x15, 0x2517: 0x16, + 0x2518: 0x17, 0x2519: 0x18, 0x251a: 0x19, 0x251b: 0x1a, 0x251c: 0x1b, 0x251d: 0x1c, 0x251e: 0x1d, 0x251f: 0x1e, + 0x2520: 0x01, 0x2521: 0x8d, 0x2522: 0x8e, 0x2523: 0x8f, 0x2524: 0x05, + 0x252a: 0x06, 0x252d: 0x07, 0x252f: 0x08, + 0x2530: 0x91, 0x2533: 0x15, + // Block 0x95, offset 0x2540 + 0x2540: 0x3f, 0x2541: 0x40, 0x2542: 0x41, 0x2543: 0x42, 0x2544: 0x43, 0x2545: 0x44, 0x2546: 0x45, 0x2547: 0x46, + 0x2548: 0x47, 0x2549: 0x48, 0x254a: 0x49, 0x254b: 0x4a, 0x254c: 0x4b, 0x254d: 0x4c, 0x254e: 0x4d, 0x254f: 0x4e, + 0x2550: 0x4f, 0x2551: 0x50, 0x2552: 0x51, 0x2553: 0x52, 0x2554: 0x53, 0x2555: 0x54, 0x2556: 0x55, 0x2557: 0x56, + 0x2558: 0x57, 0x2559: 0x58, 0x255a: 0x59, 0x255b: 0x5a, 0x255c: 0x5b, 0x255d: 0x5c, 0x255e: 0x5d, 0x255f: 0x5e, + 0x2560: 0x5f, 0x2561: 0x60, 0x2562: 0x61, 0x2563: 0x62, 0x2564: 0x63, 0x2565: 0x64, 0x2566: 0x65, 0x2567: 0x66, + 0x2568: 0x67, 0x2569: 0x68, 0x256a: 0x69, 0x256c: 0x6a, 0x256d: 0x6b, 0x256e: 0x6c, 0x256f: 0x6d, + 0x2570: 0x6e, 0x2571: 0x6f, 0x2573: 0x70, 0x2574: 0x71, 0x2575: 0x72, 0x2576: 0x73, 0x2577: 0x74, + 0x2578: 0x75, 0x2579: 0x584, 0x257a: 0x77, 0x257b: 0x78, 0x257c: 0x79, 0x257d: 0x7a, 0x257e: 0x7b, 0x257f: 0x7c, + // Block 0x96, offset 0x2580 + 0x2582: 0x01, 0x2583: 0x02, 0x2584: 0x582, 0x2585: 0x583, 0x2586: 0x05, 0x2587: 0x06, + 0x2588: 0x07, 0x2589: 0x08, 0x258a: 0x09, 0x258b: 0x0a, 0x258c: 0x0b, 0x258d: 0x0c, 0x258e: 0x0d, 0x258f: 0x0e, + 0x2590: 0x0f, 0x2591: 0x10, 0x2592: 0x11, 0x2593: 0x12, 0x2594: 0x13, 0x2595: 0x14, 0x2596: 0x15, 0x2597: 0x16, + 0x2598: 0x17, 0x2599: 0x18, 0x259a: 0x19, 0x259b: 0x1a, 0x259c: 0x1b, 0x259d: 0x1c, 0x259e: 0x1d, 0x259f: 0x1e, + 0x25a0: 0x01, 0x25a1: 0x93, 0x25a2: 0x03, 0x25a3: 0x04, 0x25a4: 0x05, + 0x25aa: 0x06, 0x25ad: 0x07, 0x25af: 0x08, + 0x25b0: 0x13, 0x25b3: 0x15, + // Block 0x97, offset 0x25c0 + 0x25e0: 0x1f, 0x25e1: 0x20, 0x25e2: 0x21, 0x25e3: 0x22, 0x25e4: 0x23, 0x25e5: 0x24, 0x25e6: 0x25, 0x25e7: 0x26, + 0x25e8: 0x27, 0x25e9: 0x28, 0x25ea: 0x29, 0x25eb: 0x2a, 0x25ec: 0x2b, 0x25ed: 0x2c, 0x25ee: 0x2d, 0x25ef: 0x2e, + 0x25f0: 0x2f, 0x25f1: 0x30, 0x25f2: 0x31, 0x25f3: 0x32, 0x25f4: 0x585, 0x25f5: 0x586, 0x25f6: 0x35, 0x25f7: 0x36, + 0x25f8: 0x37, 0x25f9: 0x38, 0x25fa: 0x39, 0x25fb: 0x3a, 0x25fc: 0x3b, 0x25fd: 0x3c, 0x25fe: 0x3d, 0x25ff: 0x3e, + // Block 0x98, offset 0x2600 + 0x2602: 0x01, 0x2603: 0x02, 0x2604: 0x03, 0x2605: 0x04, 0x2606: 0x05, 0x2607: 0x06, + 0x2608: 0x07, 0x2609: 0x08, 0x260a: 0x09, 0x260b: 0x0a, 0x260c: 0x0b, 0x260d: 0x0c, 0x260e: 0x0d, 0x260f: 0x0e, + 0x2610: 0x0f, 0x2611: 0x10, 0x2612: 0x11, 0x2613: 0x12, 0x2614: 0x13, 0x2615: 0x14, 0x2616: 0x15, 0x2617: 0x16, + 0x2618: 0x17, 0x2619: 0x18, 0x261a: 0x19, 0x261b: 0x1a, 0x261c: 0x1b, 0x261d: 0x1c, 0x261e: 0x1d, 0x261f: 0x1e, + 0x2620: 0x95, 0x2621: 0x02, 0x2622: 0x03, 0x2623: 0x04, 0x2624: 0x05, + 0x262a: 0x06, 0x262d: 0x07, 0x262f: 0x08, + 0x2630: 0x13, 0x2633: 0x15, + // Block 0x99, offset 0x2640 + 0x2660: 0x1f, 0x2661: 0x20, 0x2662: 0x21, 0x2663: 0x22, 0x2664: 0x587, 0x2665: 0x24, 0x2666: 0x25, 0x2667: 0x26, + 0x2668: 0x27, 0x2669: 0x28, 0x266a: 0x29, 0x266b: 0x2a, 0x266c: 0x2b, 0x266d: 0x2c, 0x266e: 0x2d, 0x266f: 0x2e, + 0x2670: 0x2f, 0x2671: 0x30, 0x2672: 0x31, 0x2673: 0x32, 0x2674: 0x33, 0x2675: 0x34, 0x2676: 0x35, 0x2677: 0x36, + 0x2678: 0x37, 0x2679: 0x38, 0x267a: 0x39, 0x267b: 0x3a, 0x267c: 0x3b, 0x267d: 0x3c, 0x267e: 0x3d, 0x267f: 0x3e, + // Block 0x9a, offset 0x2680 + 0x2682: 0x01, 0x2683: 0x02, 0x2684: 0x03, 0x2685: 0x04, 0x2686: 0x05, 0x2687: 0x06, + 0x2688: 0x07, 0x2689: 0x08, 0x268a: 0x09, 0x268b: 0x0a, 0x268c: 0x0b, 0x268d: 0x0c, 0x268e: 0x0d, 0x268f: 0x0e, + 0x2690: 0x0f, 0x2691: 0x10, 0x2692: 0x11, 0x2693: 0x12, 0x2694: 0x13, 0x2695: 0x14, 0x2696: 0x15, 0x2697: 0x16, + 0x2698: 0x17, 0x2699: 0x18, 0x269a: 0x19, 0x269b: 0x1a, 0x269c: 0x1b, 0x269d: 0x1c, 0x269e: 0x1d, 0x269f: 0x1e, + 0x26a0: 0x97, 0x26a1: 0x02, 0x26a2: 0x03, 0x26a3: 0x04, 0x26a4: 0x05, + 0x26aa: 0x06, 0x26ad: 0x07, 0x26af: 0x08, + 0x26b0: 0x13, 0x26b3: 0x15, + // Block 0x9b, offset 0x26c0 + 0x26c0: 0x7d, 0x26c1: 0x7e, 0x26c2: 0x7f, 0x26c3: 0x80, 0x26c4: 0x58c, 0x26c5: 0x82, 0x26c6: 0x83, 0x26c7: 0x84, + 0x26c8: 0x85, 0x26c9: 0x86, 0x26ca: 0x87, 0x26cb: 0x88, 0x26cc: 0x89, 0x26cd: 0x8a, 0x26ce: 0x8b, 0x26cf: 0x8c, + 0x26d0: 0x8d, 0x26d1: 0x8e, 0x26d2: 0x8f, 0x26d3: 0x90, 0x26d4: 0x91, 0x26d5: 0x92, 0x26d6: 0x93, 0x26d7: 0x94, + 0x26d8: 0x95, 0x26d9: 0x96, 0x26da: 0x97, 0x26db: 0x98, 0x26dc: 0x99, 0x26dd: 0x9a, 0x26de: 0x9b, 0x26df: 0x9c, + 0x26e0: 0x9d, 0x26e1: 0x9e, 0x26e2: 0x9f, 0x26e3: 0xa0, 0x26e4: 0xa1, 0x26e5: 0xa2, 0x26e6: 0xa3, 0x26e7: 0xa4, + 0x26e8: 0xa5, 0x26e9: 0xa6, 0x26ea: 0xa7, 0x26eb: 0xa8, 0x26ec: 0xa9, 0x26ed: 0xaa, + 0x26f0: 0xab, 0x26f1: 0xac, 0x26f2: 0xad, 0x26f3: 0xae, 0x26f4: 0xaf, 0x26f5: 0xb0, 0x26f6: 0xb1, 0x26f7: 0xb2, + 0x26f8: 0xb3, 0x26fa: 0xb4, 0x26fb: 0xb5, 0x26fc: 0xb6, 0x26fd: 0xb7, 0x26fe: 0xb8, 0x26ff: 0xb9, + // Block 0x9c, offset 0x2700 + 0x2700: 0xcb, 0x2701: 0xcc, 0x2702: 0xcd, 0x2703: 0xce, 0x2704: 0xcf, 0x2705: 0xd0, 0x2706: 0xd1, 0x2707: 0xd2, + 0x2708: 0xd3, 0x2709: 0xd4, 0x270a: 0xd5, 0x270b: 0xd6, 0x270c: 0xd7, 0x270d: 0xd8, 0x270e: 0xd9, 0x270f: 0xda, + 0x2710: 0xdb, 0x2711: 0xdc, 0x2712: 0xdd, 0x2713: 0xde, 0x2714: 0xdf, 0x2715: 0xe0, 0x2716: 0xe1, 0x2717: 0xe2, + 0x2718: 0xe3, 0x2719: 0xe4, 0x271a: 0xe5, 0x271b: 0xe6, 0x271c: 0xe7, 0x271d: 0xe8, 0x271e: 0xe9, 0x271f: 0x58d, + 0x2720: 0xeb, 0x2721: 0xec, 0x2722: 0xed, 0x2723: 0xee, 0x2724: 0xef, 0x2725: 0xf0, 0x2726: 0xf1, 0x2727: 0xf2, + 0x2728: 0xf3, 0x2729: 0xf4, 0x272a: 0xf5, 0x272b: 0xf6, 0x272c: 0xf7, 0x272f: 0xf8, + // Block 0x9d, offset 0x2740 + 0x2742: 0x01, 0x2743: 0x02, 0x2744: 0x58a, 0x2745: 0x58b, 0x2746: 0x05, 0x2747: 0x06, + 0x2748: 0x07, 0x2749: 0x08, 0x274a: 0x09, 0x274b: 0x0a, 0x274c: 0x0b, 0x274d: 0x0c, 0x274e: 0x0d, 0x274f: 0x0e, + 0x2750: 0x0f, 0x2751: 0x10, 0x2752: 0x11, 0x2753: 0x12, 0x2754: 0x13, 0x2755: 0x14, 0x2756: 0x15, 0x2757: 0x16, + 0x2758: 0x17, 0x2759: 0x18, 0x275a: 0x19, 0x275b: 0x1a, 0x275c: 0x1b, 0x275d: 0x1c, 0x275e: 0x1d, 0x275f: 0x1e, + 0x2760: 0x01, 0x2761: 0x02, 0x2762: 0x99, 0x2763: 0x04, 0x2764: 0x05, + 0x276a: 0x9a, 0x276d: 0x07, 0x276f: 0x08, + 0x2770: 0x13, 0x2773: 0x15, + // Block 0x9e, offset 0x2780 + 0x2780: 0x58e, 0x2781: 0x58f, 0x2782: 0x590, 0x2783: 0x42, 0x2784: 0x43, 0x2785: 0x44, 0x2786: 0x45, 0x2787: 0x46, + 0x2788: 0x47, 0x2789: 0x48, 0x278a: 0x49, 0x278b: 0x4a, 0x278c: 0x4b, 0x278d: 0x4c, 0x278e: 0x4d, 0x278f: 0x4e, + 0x2790: 0x4f, 0x2791: 0x50, 0x2792: 0x51, 0x2793: 0x52, 0x2794: 0x53, 0x2795: 0x54, 0x2796: 0x55, 0x2797: 0x56, + 0x2798: 0x57, 0x2799: 0x58, 0x279a: 0x59, 0x279b: 0x5a, 0x279c: 0x5b, 0x279d: 0x5c, 0x279e: 0x5d, 0x279f: 0x5e, + 0x27a0: 0x5f, 0x27a1: 0x60, 0x27a2: 0x61, 0x27a3: 0x62, 0x27a4: 0x63, 0x27a5: 0x64, 0x27a6: 0x65, 0x27a7: 0x66, + 0x27a8: 0x67, 0x27a9: 0x68, 0x27aa: 0x69, 0x27ac: 0x6a, 0x27ad: 0x6b, 0x27ae: 0x6c, 0x27af: 0x6d, + 0x27b0: 0x6e, 0x27b1: 0x6f, 0x27b3: 0x70, 0x27b4: 0x71, 0x27b5: 0x72, 0x27b6: 0x73, 0x27b7: 0x74, + 0x27b8: 0x75, 0x27b9: 0x76, 0x27ba: 0x77, 0x27bb: 0x78, 0x27bc: 0x79, 0x27bd: 0x7a, 0x27be: 0x7b, 0x27bf: 0x7c, + // Block 0x9f, offset 0x27c0 + 0x27c2: 0x01, 0x27c3: 0x02, 0x27c4: 0x03, 0x27c5: 0x04, 0x27c6: 0x05, 0x27c7: 0x06, + 0x27c8: 0x07, 0x27c9: 0x08, 0x27ca: 0x09, 0x27cb: 0x0a, 0x27cc: 0x0b, 0x27cd: 0x0c, 0x27ce: 0x0d, 0x27cf: 0x0e, + 0x27d0: 0x0f, 0x27d1: 0x10, 0x27d2: 0x11, 0x27d3: 0x12, 0x27d4: 0x13, 0x27d5: 0x14, 0x27d6: 0x15, 0x27d7: 0x16, + 0x27d8: 0x17, 0x27d9: 0x18, 0x27da: 0x19, 0x27db: 0x1a, 0x27dc: 0x1b, 0x27dd: 0x1c, 0x27de: 0x1d, 0x27df: 0x1e, + 0x27e0: 0x01, 0x27e1: 0x9c, 0x27e2: 0x03, 0x27e3: 0x04, 0x27e4: 0x05, + 0x27ea: 0x06, 0x27ed: 0x07, 0x27ef: 0x08, + 0x27f0: 0x13, 0x27f3: 0x15, + // Block 0xa0, offset 0x2800 + 0x2800: 0x3f, 0x2801: 0x40, 0x2802: 0x41, 0x2803: 0x42, 0x2804: 0x43, 0x2805: 0x44, 0x2806: 0x45, 0x2807: 0x46, + 0x2808: 0x47, 0x2809: 0x48, 0x280a: 0x49, 0x280b: 0x4a, 0x280c: 0x4b, 0x280d: 0x4c, 0x280e: 0x4d, 0x280f: 0x4e, + 0x2810: 0x4f, 0x2811: 0x50, 0x2812: 0x51, 0x2813: 0x52, 0x2814: 0x53, 0x2815: 0x54, 0x2816: 0x55, 0x2817: 0x56, + 0x2818: 0x57, 0x2819: 0x58, 0x281a: 0x59, 0x281b: 0x5a, 0x281c: 0x5b, 0x281d: 0x5c, 0x281e: 0x5d, 0x281f: 0x5e, + 0x2820: 0x5f, 0x2821: 0x60, 0x2822: 0x61, 0x2823: 0x62, 0x2824: 0x63, 0x2825: 0x64, 0x2826: 0x65, 0x2827: 0x66, + 0x2828: 0x67, 0x2829: 0x68, 0x282a: 0x69, 0x282c: 0x6a, 0x282d: 0x6b, 0x282e: 0x6c, 0x282f: 0x6d, + 0x2830: 0x6e, 0x2831: 0x6f, 0x2833: 0x70, 0x2834: 0x71, 0x2835: 0x72, 0x2836: 0x73, 0x2837: 0x74, + 0x2838: 0x75, 0x2839: 0x1f2, 0x283a: 0x597, 0x283b: 0x598, 0x283c: 0x79, 0x283d: 0x7a, 0x283e: 0x7b, 0x283f: 0x7c, + // Block 0xa1, offset 0x2840 + 0x2842: 0x01, 0x2843: 0x595, 0x2844: 0x03, 0x2845: 0x596, 0x2846: 0x05, 0x2847: 0x06, + 0x2848: 0x07, 0x2849: 0x08, 0x284a: 0x09, 0x284b: 0x0a, 0x284c: 0x0b, 0x284d: 0x0c, 0x284e: 0x0d, 0x284f: 0x0e, + 0x2850: 0x0f, 0x2851: 0x10, 0x2852: 0x11, 0x2853: 0x12, 0x2854: 0x13, 0x2855: 0x14, 0x2856: 0x15, 0x2857: 0x16, + 0x2858: 0x17, 0x2859: 0x18, 0x285a: 0x19, 0x285b: 0x1a, 0x285c: 0x1b, 0x285d: 0x1c, 0x285e: 0x1d, 0x285f: 0x1e, + 0x2860: 0x01, 0x2861: 0x9e, 0x2862: 0x03, 0x2863: 0x04, 0x2864: 0x05, + 0x286a: 0x06, 0x286d: 0x07, 0x286f: 0x08, + 0x2870: 0x13, 0x2873: 0x15, + // Block 0xa2, offset 0x2880 + 0x28a0: 0x1f, 0x28a1: 0x20, 0x28a2: 0x21, 0x28a3: 0x22, 0x28a4: 0x23, 0x28a5: 0x24, 0x28a6: 0x25, 0x28a7: 0x26, + 0x28a8: 0x27, 0x28a9: 0x28, 0x28aa: 0x29, 0x28ab: 0x2a, 0x28ac: 0x59b, 0x28ad: 0x59c, 0x28ae: 0x2d, 0x28af: 0x2e, + 0x28b0: 0x2f, 0x28b1: 0x30, 0x28b2: 0x31, 0x28b3: 0x32, 0x28b4: 0x33, 0x28b5: 0x34, 0x28b6: 0x35, 0x28b7: 0x36, + 0x28b8: 0x37, 0x28b9: 0x38, 0x28ba: 0x39, 0x28bb: 0x3a, 0x28bc: 0x3b, 0x28bd: 0x3c, 0x28be: 0x3d, 0x28bf: 0x3e, + // Block 0xa3, offset 0x28c0 + 0x28c2: 0x01, 0x28c3: 0x02, 0x28c4: 0x03, 0x28c5: 0x04, 0x28c6: 0x05, 0x28c7: 0x06, + 0x28c8: 0x07, 0x28c9: 0x08, 0x28ca: 0x09, 0x28cb: 0x0a, 0x28cc: 0x0b, 0x28cd: 0x0c, 0x28ce: 0x0d, 0x28cf: 0x0e, + 0x28d0: 0x0f, 0x28d1: 0x10, 0x28d2: 0x11, 0x28d3: 0x12, 0x28d4: 0x13, 0x28d5: 0x14, 0x28d6: 0x15, 0x28d7: 0x16, + 0x28d8: 0x17, 0x28d9: 0x18, 0x28da: 0x19, 0x28db: 0x1a, 0x28dc: 0x1b, 0x28dd: 0x1c, 0x28de: 0x1d, 0x28df: 0x1e, + 0x28e0: 0xa0, 0x28e1: 0x02, 0x28e2: 0x03, 0x28e3: 0x04, 0x28e4: 0x05, + 0x28ea: 0x06, 0x28ed: 0x07, 0x28ef: 0x08, + 0x28f0: 0x13, 0x28f3: 0x15, + // Block 0xa4, offset 0x2900 + 0x2920: 0x1f, 0x2921: 0x20, 0x2922: 0x21, 0x2923: 0x22, 0x2924: 0x23, 0x2925: 0x24, 0x2926: 0x25, 0x2927: 0x26, + 0x2928: 0x59d, 0x2929: 0x59e, 0x292a: 0x29, 0x292b: 0x2a, 0x292c: 0x2b, 0x292d: 0x2c, 0x292e: 0x2d, 0x292f: 0x2e, + 0x2930: 0x2f, 0x2931: 0x30, 0x2932: 0x31, 0x2933: 0x32, 0x2934: 0x33, 0x2935: 0x34, 0x2936: 0x35, 0x2937: 0x36, + 0x2938: 0x37, 0x2939: 0x38, 0x293a: 0x39, 0x293b: 0x3a, 0x293c: 0x3b, 0x293d: 0x3c, 0x293e: 0x3d, 0x293f: 0x3e, + // Block 0xa5, offset 0x2940 + 0x2942: 0x01, 0x2943: 0x02, 0x2944: 0x03, 0x2945: 0x04, 0x2946: 0x05, 0x2947: 0x06, + 0x2948: 0x07, 0x2949: 0x08, 0x294a: 0x09, 0x294b: 0x0a, 0x294c: 0x0b, 0x294d: 0x0c, 0x294e: 0x0d, 0x294f: 0x0e, + 0x2950: 0x0f, 0x2951: 0x10, 0x2952: 0x11, 0x2953: 0x12, 0x2954: 0x13, 0x2955: 0x14, 0x2956: 0x15, 0x2957: 0x16, + 0x2958: 0x17, 0x2959: 0x18, 0x295a: 0x19, 0x295b: 0x1a, 0x295c: 0x1b, 0x295d: 0x1c, 0x295e: 0x1d, 0x295f: 0x1e, + 0x2960: 0xa2, 0x2961: 0x02, 0x2962: 0x03, 0x2963: 0x04, 0x2964: 0x05, + 0x296a: 0x06, 0x296d: 0x07, 0x296f: 0x08, + 0x2970: 0x13, 0x2973: 0x15, + // Block 0xa6, offset 0x2980 + 0x2980: 0x3f, 0x2981: 0x40, 0x2982: 0x41, 0x2983: 0x42, 0x2984: 0x43, 0x2985: 0x44, 0x2986: 0x45, 0x2987: 0x46, + 0x2988: 0x47, 0x2989: 0x48, 0x298a: 0x49, 0x298b: 0x4a, 0x298c: 0x4b, 0x298d: 0x4c, 0x298e: 0x4d, 0x298f: 0x4e, + 0x2990: 0x4f, 0x2991: 0x50, 0x2992: 0x51, 0x2993: 0x52, 0x2994: 0x53, 0x2995: 0x54, 0x2996: 0x55, 0x2997: 0x56, + 0x2998: 0x57, 0x2999: 0x58, 0x299a: 0x59, 0x299b: 0x5a, 0x299c: 0x5b, 0x299d: 0x5c, 0x299e: 0x5d, 0x299f: 0x5e, + 0x29a0: 0x5f, 0x29a1: 0x60, 0x29a2: 0x61, 0x29a3: 0x62, 0x29a4: 0x63, 0x29a5: 0x64, 0x29a6: 0x65, 0x29a7: 0x66, + 0x29a8: 0x67, 0x29a9: 0x68, 0x29aa: 0x69, 0x29ac: 0x6a, 0x29ad: 0x6b, 0x29ae: 0x6c, 0x29af: 0x6d, + 0x29b0: 0x6e, 0x29b1: 0x6f, 0x29b3: 0x70, 0x29b4: 0x71, 0x29b5: 0x72, 0x29b6: 0x73, 0x29b7: 0x74, + 0x29b8: 0x5a4, 0x29b9: 0x5a5, 0x29ba: 0x77, 0x29bb: 0x5a6, 0x29bc: 0x79, 0x29bd: 0x7a, 0x29be: 0x7b, 0x29bf: 0x7c, + // Block 0xa7, offset 0x29c0 + 0x29c2: 0x01, 0x29c3: 0x5a1, 0x29c4: 0x5a2, 0x29c5: 0x5a3, 0x29c6: 0x05, 0x29c7: 0x06, + 0x29c8: 0x07, 0x29c9: 0x08, 0x29ca: 0x09, 0x29cb: 0x0a, 0x29cc: 0x0b, 0x29cd: 0x0c, 0x29ce: 0x0d, 0x29cf: 0x0e, + 0x29d0: 0x0f, 0x29d1: 0x10, 0x29d2: 0x11, 0x29d3: 0x12, 0x29d4: 0x13, 0x29d5: 0x14, 0x29d6: 0x15, 0x29d7: 0x16, + 0x29d8: 0x17, 0x29d9: 0x18, 0x29da: 0x19, 0x29db: 0x1a, 0x29dc: 0x1b, 0x29dd: 0x1c, 0x29de: 0x1d, 0x29df: 0x1e, + 0x29e0: 0x01, 0x29e1: 0xa4, 0x29e2: 0x03, 0x29e3: 0x04, 0x29e4: 0x05, + 0x29ea: 0x06, 0x29ed: 0x07, 0x29ef: 0x08, + 0x29f0: 0x13, 0x29f3: 0x15, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x5ab, 0x2a01: 0x7e, 0x2a02: 0x7f, 0x2a03: 0x80, 0x2a04: 0x81, 0x2a05: 0x82, 0x2a06: 0x83, 0x2a07: 0x84, + 0x2a08: 0x85, 0x2a09: 0x86, 0x2a0a: 0x87, 0x2a0b: 0x88, 0x2a0c: 0x89, 0x2a0d: 0x8a, 0x2a0e: 0x8b, 0x2a0f: 0x8c, + 0x2a10: 0x8d, 0x2a11: 0x8e, 0x2a12: 0x8f, 0x2a13: 0x90, 0x2a14: 0x91, 0x2a15: 0x92, 0x2a16: 0x93, 0x2a17: 0x94, + 0x2a18: 0x95, 0x2a19: 0x96, 0x2a1a: 0x97, 0x2a1b: 0x98, 0x2a1c: 0x99, 0x2a1d: 0x9a, 0x2a1e: 0x9b, 0x2a1f: 0x9c, + 0x2a20: 0x9d, 0x2a21: 0x9e, 0x2a22: 0x9f, 0x2a23: 0xa0, 0x2a24: 0xa1, 0x2a25: 0xa2, 0x2a26: 0xa3, 0x2a27: 0xa4, + 0x2a28: 0xa5, 0x2a29: 0xa6, 0x2a2a: 0xa7, 0x2a2b: 0xa8, 0x2a2c: 0xa9, 0x2a2d: 0xaa, + 0x2a30: 0xab, 0x2a31: 0xac, 0x2a32: 0xad, 0x2a33: 0xae, 0x2a34: 0xaf, 0x2a35: 0xb0, 0x2a36: 0xb1, 0x2a37: 0xb2, + 0x2a38: 0xb3, 0x2a3a: 0xb4, 0x2a3b: 0xb5, 0x2a3c: 0xb6, 0x2a3d: 0xb7, 0x2a3e: 0xb8, 0x2a3f: 0xb9, + // Block 0xa9, offset 0x2a40 + 0x2a64: 0xfb, 0x2a65: 0xfc, 0x2a66: 0xfd, 0x2a67: 0xfe, + 0x2a68: 0xff, 0x2a69: 0x100, 0x2a6a: 0x101, 0x2a6b: 0x102, 0x2a6c: 0x103, 0x2a6d: 0x104, 0x2a6e: 0x252, 0x2a6f: 0x5ac, + 0x2a70: 0x253, 0x2a71: 0x5ad, 0x2a72: 0x5ae, 0x2a73: 0x5af, 0x2a74: 0x5b0, 0x2a75: 0x10c, 0x2a76: 0x10d, 0x2a77: 0x10e, + 0x2a78: 0x10f, 0x2a79: 0x110, 0x2a7a: 0x111, 0x2a7b: 0x112, 0x2a7c: 0x113, 0x2a7d: 0x114, 0x2a7e: 0x115, 0x2a7f: 0x116, + // Block 0xaa, offset 0x2a80 + 0x2a82: 0x01, 0x2a83: 0x02, 0x2a84: 0x03, 0x2a85: 0x04, 0x2a86: 0x05, 0x2a87: 0x06, + 0x2a88: 0x07, 0x2a89: 0x08, 0x2a8a: 0x09, 0x2a8b: 0x0a, 0x2a8c: 0x0b, 0x2a8d: 0x0c, 0x2a8e: 0x0d, 0x2a8f: 0x0e, + 0x2a90: 0x0f, 0x2a91: 0x10, 0x2a92: 0x11, 0x2a93: 0x12, 0x2a94: 0x13, 0x2a95: 0x14, 0x2a96: 0x15, 0x2a97: 0x16, + 0x2a98: 0x5a7, 0x2a99: 0x5a8, 0x2a9a: 0x5a9, 0x2a9b: 0x5aa, 0x2a9c: 0x1b, 0x2a9d: 0x1c, 0x2a9e: 0x1d, 0x2a9f: 0x1e, + 0x2aa0: 0x01, 0x2aa1: 0x02, 0x2aa2: 0xa6, 0x2aa3: 0x04, 0x2aa4: 0x05, + 0x2aaa: 0x06, 0x2aad: 0x07, 0x2aaf: 0xa7, + 0x2ab0: 0x13, 0x2ab3: 0x15, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x3f, 0x2ac1: 0x40, 0x2ac2: 0x41, 0x2ac3: 0x42, 0x2ac4: 0x43, 0x2ac5: 0x44, 0x2ac6: 0x45, 0x2ac7: 0x46, + 0x2ac8: 0x47, 0x2ac9: 0x48, 0x2aca: 0x49, 0x2acb: 0x4a, 0x2acc: 0x4b, 0x2acd: 0x4c, 0x2ace: 0x4d, 0x2acf: 0x4e, + 0x2ad0: 0x4f, 0x2ad1: 0x50, 0x2ad2: 0x51, 0x2ad3: 0x52, 0x2ad4: 0x53, 0x2ad5: 0x54, 0x2ad6: 0x55, 0x2ad7: 0x56, + 0x2ad8: 0x57, 0x2ad9: 0x58, 0x2ada: 0x59, 0x2adb: 0x5a, 0x2adc: 0x5b, 0x2add: 0x5c, 0x2ade: 0x5d, 0x2adf: 0x5e, + 0x2ae0: 0x5f, 0x2ae1: 0x60, 0x2ae2: 0x61, 0x2ae3: 0x62, 0x2ae4: 0x63, 0x2ae5: 0x64, 0x2ae6: 0x65, 0x2ae7: 0x66, + 0x2ae8: 0x67, 0x2ae9: 0x68, 0x2aea: 0x69, 0x2aec: 0x6a, 0x2aed: 0x6b, 0x2aee: 0x6c, 0x2aef: 0x6d, + 0x2af0: 0x6e, 0x2af1: 0x6f, 0x2af3: 0x70, 0x2af4: 0x71, 0x2af5: 0x72, 0x2af6: 0x73, 0x2af7: 0x74, + 0x2af8: 0x75, 0x2af9: 0x76, 0x2afa: 0x5b7, 0x2afb: 0x78, 0x2afc: 0x79, 0x2afd: 0x7a, 0x2afe: 0x7b, 0x2aff: 0x7c, + // Block 0xac, offset 0x2b00 + 0x2b02: 0x01, 0x2b03: 0x5b3, 0x2b04: 0x5b4, 0x2b05: 0x5b5, 0x2b06: 0x05, 0x2b07: 0x06, + 0x2b08: 0x5b6, 0x2b09: 0x08, 0x2b0a: 0x09, 0x2b0b: 0x0a, 0x2b0c: 0x0b, 0x2b0d: 0x0c, 0x2b0e: 0x0d, 0x2b0f: 0x0e, + 0x2b10: 0x0f, 0x2b11: 0x10, 0x2b12: 0x11, 0x2b13: 0x12, 0x2b14: 0x13, 0x2b15: 0x14, 0x2b16: 0x15, 0x2b17: 0x16, + 0x2b18: 0x17, 0x2b19: 0x18, 0x2b1a: 0x19, 0x2b1b: 0x1a, 0x2b1c: 0x1b, 0x2b1d: 0x1c, 0x2b1e: 0x1d, 0x2b1f: 0x1e, + 0x2b20: 0x01, 0x2b21: 0xa9, 0x2b22: 0x03, 0x2b23: 0x04, 0x2b24: 0x05, + 0x2b2a: 0x06, 0x2b2d: 0x07, 0x2b2f: 0x08, + 0x2b30: 0x13, 0x2b33: 0x15, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x3f, 0x2b41: 0x40, 0x2b42: 0x41, 0x2b43: 0x42, 0x2b44: 0x43, 0x2b45: 0x44, 0x2b46: 0x45, 0x2b47: 0x46, + 0x2b48: 0x47, 0x2b49: 0x48, 0x2b4a: 0x49, 0x2b4b: 0x4a, 0x2b4c: 0x4b, 0x2b4d: 0x4c, 0x2b4e: 0x4d, 0x2b4f: 0x4e, + 0x2b50: 0x4f, 0x2b51: 0x50, 0x2b52: 0x51, 0x2b53: 0x52, 0x2b54: 0x53, 0x2b55: 0x54, 0x2b56: 0x55, 0x2b57: 0x56, + 0x2b58: 0x57, 0x2b59: 0x58, 0x2b5a: 0x59, 0x2b5b: 0x5a, 0x2b5c: 0x5b, 0x2b5d: 0x5c, 0x2b5e: 0x5d, 0x2b5f: 0x5e, + 0x2b60: 0x5f, 0x2b61: 0x60, 0x2b62: 0x61, 0x2b63: 0x62, 0x2b64: 0x63, 0x2b65: 0x64, 0x2b66: 0x65, 0x2b67: 0x66, + 0x2b68: 0x67, 0x2b69: 0x68, 0x2b6a: 0x69, 0x2b6c: 0x6a, 0x2b6d: 0x6b, 0x2b6e: 0x6c, 0x2b6f: 0x6d, + 0x2b70: 0x6e, 0x2b71: 0x6f, 0x2b73: 0x70, 0x2b74: 0x71, 0x2b75: 0x72, 0x2b76: 0x1fc, 0x2b77: 0x74, + 0x2b78: 0x75, 0x2b79: 0x5c1, 0x2b7a: 0x5c2, 0x2b7b: 0x5c3, 0x2b7c: 0x79, 0x2b7d: 0x7a, 0x2b7e: 0x7b, 0x2b7f: 0x7c, + // Block 0xae, offset 0x2b80 + 0x2b82: 0x01, 0x2b83: 0x5ba, 0x2b84: 0x5bb, 0x2b85: 0x5bc, 0x2b86: 0x5bd, 0x2b87: 0x5be, + 0x2b88: 0x5bf, 0x2b89: 0x08, 0x2b8a: 0x5c0, 0x2b8b: 0x0a, 0x2b8c: 0x0b, 0x2b8d: 0x0c, 0x2b8e: 0x0d, 0x2b8f: 0x0e, + 0x2b90: 0x0f, 0x2b91: 0x10, 0x2b92: 0x11, 0x2b93: 0x12, 0x2b94: 0x13, 0x2b95: 0x14, 0x2b96: 0x15, 0x2b97: 0x16, + 0x2b98: 0x17, 0x2b99: 0x18, 0x2b9a: 0x19, 0x2b9b: 0x1a, 0x2b9c: 0x1b, 0x2b9d: 0x1c, 0x2b9e: 0x1d, 0x2b9f: 0x1e, + 0x2ba0: 0x01, 0x2ba1: 0xab, 0x2ba2: 0x4e, 0x2ba3: 0x04, 0x2ba4: 0x05, + 0x2baa: 0x06, 0x2bad: 0x07, 0x2baf: 0x08, + 0x2bb0: 0x13, 0x2bb3: 0x15, + // Block 0xaf, offset 0x2bc0 + 0x2be0: 0x1f, 0x2be1: 0x20, 0x2be2: 0x21, 0x2be3: 0x22, 0x2be4: 0x23, 0x2be5: 0x24, 0x2be6: 0x25, 0x2be7: 0x26, + 0x2be8: 0x27, 0x2be9: 0x28, 0x2bea: 0x29, 0x2beb: 0x2a, 0x2bec: 0x2b, 0x2bed: 0x2c, 0x2bee: 0x2d, 0x2bef: 0x2e, + 0x2bf0: 0x2f, 0x2bf1: 0x30, 0x2bf2: 0x31, 0x2bf3: 0x32, 0x2bf4: 0x33, 0x2bf5: 0x34, 0x2bf6: 0x5c4, 0x2bf7: 0x36, + 0x2bf8: 0x37, 0x2bf9: 0x38, 0x2bfa: 0x39, 0x2bfb: 0x3a, 0x2bfc: 0x3b, 0x2bfd: 0x3c, 0x2bfe: 0x3d, 0x2bff: 0x3e, + // Block 0xb0, offset 0x2c00 + 0x2c02: 0x01, 0x2c03: 0x02, 0x2c04: 0x03, 0x2c05: 0x04, 0x2c06: 0x05, 0x2c07: 0x06, + 0x2c08: 0x07, 0x2c09: 0x08, 0x2c0a: 0x09, 0x2c0b: 0x0a, 0x2c0c: 0x0b, 0x2c0d: 0x0c, 0x2c0e: 0x0d, 0x2c0f: 0x0e, + 0x2c10: 0x0f, 0x2c11: 0x10, 0x2c12: 0x11, 0x2c13: 0x12, 0x2c14: 0x13, 0x2c15: 0x14, 0x2c16: 0x15, 0x2c17: 0x16, + 0x2c18: 0x17, 0x2c19: 0x18, 0x2c1a: 0x19, 0x2c1b: 0x1a, 0x2c1c: 0x1b, 0x2c1d: 0x1c, 0x2c1e: 0x1d, 0x2c1f: 0x1e, + 0x2c20: 0xad, 0x2c21: 0x02, 0x2c22: 0x03, 0x2c23: 0x04, 0x2c24: 0x05, + 0x2c2a: 0x06, 0x2c2d: 0x07, 0x2c2f: 0x08, + 0x2c30: 0x13, 0x2c33: 0x15, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x3f, 0x2c41: 0x40, 0x2c42: 0x41, 0x2c43: 0x42, 0x2c44: 0x43, 0x2c45: 0x44, 0x2c46: 0x45, 0x2c47: 0x46, + 0x2c48: 0x47, 0x2c49: 0x48, 0x2c4a: 0x49, 0x2c4b: 0x4a, 0x2c4c: 0x4b, 0x2c4d: 0x4c, 0x2c4e: 0x4d, 0x2c4f: 0x4e, + 0x2c50: 0x4f, 0x2c51: 0x50, 0x2c52: 0x51, 0x2c53: 0x52, 0x2c54: 0x53, 0x2c55: 0x54, 0x2c56: 0x55, 0x2c57: 0x56, + 0x2c58: 0x57, 0x2c59: 0x58, 0x2c5a: 0x59, 0x2c5b: 0x5a, 0x2c5c: 0x5b, 0x2c5d: 0x5c, 0x2c5e: 0x5d, 0x2c5f: 0x5e, + 0x2c60: 0x5f, 0x2c61: 0x60, 0x2c62: 0x61, 0x2c63: 0x62, 0x2c64: 0x63, 0x2c65: 0x64, 0x2c66: 0x65, 0x2c67: 0x66, + 0x2c68: 0x67, 0x2c69: 0x68, 0x2c6a: 0x69, 0x2c6c: 0x6a, 0x2c6d: 0x6b, 0x2c6e: 0x6c, 0x2c6f: 0x6d, + 0x2c70: 0x6e, 0x2c71: 0x6f, 0x2c73: 0x70, 0x2c74: 0x71, 0x2c75: 0x72, 0x2c76: 0x73, 0x2c77: 0x74, + 0x2c78: 0x75, 0x2c79: 0x1f2, 0x2c7a: 0x77, 0x2c7b: 0x5c9, 0x2c7c: 0x79, 0x2c7d: 0x7a, 0x2c7e: 0x7b, 0x2c7f: 0x7c, + // Block 0xb2, offset 0x2c80 + 0x2c82: 0x01, 0x2c83: 0x5c7, 0x2c84: 0x1f0, 0x2c85: 0x1f1, 0x2c86: 0x05, 0x2c87: 0x5c8, + 0x2c88: 0x07, 0x2c89: 0x08, 0x2c8a: 0x09, 0x2c8b: 0x0a, 0x2c8c: 0x0b, 0x2c8d: 0x0c, 0x2c8e: 0x0d, 0x2c8f: 0x0e, + 0x2c90: 0x0f, 0x2c91: 0x10, 0x2c92: 0x11, 0x2c93: 0x12, 0x2c94: 0x13, 0x2c95: 0x14, 0x2c96: 0x15, 0x2c97: 0x16, + 0x2c98: 0x17, 0x2c99: 0x18, 0x2c9a: 0x19, 0x2c9b: 0x1a, 0x2c9c: 0x1b, 0x2c9d: 0x1c, 0x2c9e: 0x1d, 0x2c9f: 0x1e, + 0x2ca0: 0x01, 0x2ca1: 0xaf, 0x2ca2: 0x03, 0x2ca3: 0x04, 0x2ca4: 0x05, + 0x2caa: 0x06, 0x2cad: 0x07, 0x2caf: 0x08, + 0x2cb0: 0x13, 0x2cb3: 0x15, + // Block 0xb3, offset 0x2cc0 + 0x2cc2: 0x01, 0x2cc3: 0x02, 0x2cc4: 0x5cc, 0x2cc5: 0x292, 0x2cc6: 0x05, 0x2cc7: 0x06, + 0x2cc8: 0x07, 0x2cc9: 0x08, 0x2cca: 0x09, 0x2ccb: 0x0a, 0x2ccc: 0x0b, 0x2ccd: 0x0c, 0x2cce: 0x0d, 0x2ccf: 0x0e, + 0x2cd0: 0x0f, 0x2cd1: 0x10, 0x2cd2: 0x11, 0x2cd3: 0x12, 0x2cd4: 0x13, 0x2cd5: 0x14, 0x2cd6: 0x15, 0x2cd7: 0x16, + 0x2cd8: 0x17, 0x2cd9: 0x18, 0x2cda: 0x19, 0x2cdb: 0x1a, 0x2cdc: 0x1b, 0x2cdd: 0x1c, 0x2cde: 0x1d, 0x2cdf: 0x1e, + 0x2ce0: 0x01, 0x2ce1: 0x63, 0x2ce2: 0x03, 0x2ce3: 0x04, 0x2ce4: 0x05, + 0x2cea: 0x06, 0x2ced: 0x07, 0x2cef: 0x08, + 0x2cf0: 0x13, 0x2cf3: 0x15, + // Block 0xb4, offset 0x2d00 + 0x2d00: 0x3f, 0x2d01: 0x40, 0x2d02: 0x41, 0x2d03: 0x42, 0x2d04: 0x43, 0x2d05: 0x44, 0x2d06: 0x45, 0x2d07: 0x46, + 0x2d08: 0x47, 0x2d09: 0x48, 0x2d0a: 0x49, 0x2d0b: 0x4a, 0x2d0c: 0x4b, 0x2d0d: 0x4c, 0x2d0e: 0x4d, 0x2d0f: 0x4e, + 0x2d10: 0x4f, 0x2d11: 0x50, 0x2d12: 0x51, 0x2d13: 0x52, 0x2d14: 0x53, 0x2d15: 0x54, 0x2d16: 0x55, 0x2d17: 0x56, + 0x2d18: 0x57, 0x2d19: 0x58, 0x2d1a: 0x59, 0x2d1b: 0x5a, 0x2d1c: 0x5b, 0x2d1d: 0x5c, 0x2d1e: 0x5d, 0x2d1f: 0x5e, + 0x2d20: 0x5f, 0x2d21: 0x60, 0x2d22: 0x61, 0x2d23: 0x62, 0x2d24: 0x63, 0x2d25: 0x64, 0x2d26: 0x65, 0x2d27: 0x66, + 0x2d28: 0x67, 0x2d29: 0x68, 0x2d2a: 0x69, 0x2d2c: 0x6a, 0x2d2d: 0x6b, 0x2d2e: 0x6c, 0x2d2f: 0x6d, + 0x2d30: 0x6e, 0x2d31: 0x6f, 0x2d33: 0x70, 0x2d34: 0x71, 0x2d35: 0x72, 0x2d36: 0x73, 0x2d37: 0x74, + 0x2d38: 0x5d0, 0x2d39: 0x76, 0x2d3a: 0x77, 0x2d3b: 0x78, 0x2d3c: 0x79, 0x2d3d: 0x7a, 0x2d3e: 0x7b, 0x2d3f: 0x7c, + // Block 0xb5, offset 0x2d40 + 0x2d42: 0x01, 0x2d43: 0x5cf, 0x2d44: 0x03, 0x2d45: 0x04, 0x2d46: 0x05, 0x2d47: 0x06, + 0x2d48: 0x07, 0x2d49: 0x08, 0x2d4a: 0x09, 0x2d4b: 0x0a, 0x2d4c: 0x0b, 0x2d4d: 0x0c, 0x2d4e: 0x0d, 0x2d4f: 0x0e, + 0x2d50: 0x0f, 0x2d51: 0x10, 0x2d52: 0x11, 0x2d53: 0x12, 0x2d54: 0x13, 0x2d55: 0x14, 0x2d56: 0x15, 0x2d57: 0x16, + 0x2d58: 0x17, 0x2d59: 0x18, 0x2d5a: 0x19, 0x2d5b: 0x1a, 0x2d5c: 0x1b, 0x2d5d: 0x1c, 0x2d5e: 0x1d, 0x2d5f: 0x1e, + 0x2d60: 0x01, 0x2d61: 0xb2, 0x2d62: 0x03, 0x2d63: 0x04, 0x2d64: 0x05, + 0x2d6a: 0x06, 0x2d6d: 0x07, 0x2d6f: 0x08, + 0x2d70: 0x13, 0x2d73: 0x15, + // Block 0xb6, offset 0x2d80 + 0x2d80: 0x3f, 0x2d81: 0x40, 0x2d82: 0x41, 0x2d83: 0x42, 0x2d84: 0x43, 0x2d85: 0x44, 0x2d86: 0x45, 0x2d87: 0x46, + 0x2d88: 0x47, 0x2d89: 0x48, 0x2d8a: 0x49, 0x2d8b: 0x4a, 0x2d8c: 0x4b, 0x2d8d: 0x4c, 0x2d8e: 0x4d, 0x2d8f: 0x4e, + 0x2d90: 0x4f, 0x2d91: 0x50, 0x2d92: 0x51, 0x2d93: 0x52, 0x2d94: 0x53, 0x2d95: 0x54, 0x2d96: 0x55, 0x2d97: 0x56, + 0x2d98: 0x57, 0x2d99: 0x58, 0x2d9a: 0x59, 0x2d9b: 0x5a, 0x2d9c: 0x5b, 0x2d9d: 0x5c, 0x2d9e: 0x5d, 0x2d9f: 0x5e, + 0x2da0: 0x5f, 0x2da1: 0x60, 0x2da2: 0x61, 0x2da3: 0x62, 0x2da4: 0x63, 0x2da5: 0x64, 0x2da6: 0x65, 0x2da7: 0x66, + 0x2da8: 0x67, 0x2da9: 0x68, 0x2daa: 0x69, 0x2dac: 0x6a, 0x2dad: 0x6b, 0x2dae: 0x6c, 0x2daf: 0x6d, + 0x2db0: 0x6e, 0x2db1: 0x6f, 0x2db3: 0x70, 0x2db4: 0x71, 0x2db5: 0x72, 0x2db6: 0x1fc, 0x2db7: 0x74, + 0x2db8: 0x75, 0x2db9: 0x261, 0x2dba: 0x77, 0x2dbb: 0x5d6, 0x2dbc: 0x79, 0x2dbd: 0x7a, 0x2dbe: 0x7b, 0x2dbf: 0x7c, + // Block 0xb7, offset 0x2dc0 + 0x2dc2: 0x01, 0x2dc3: 0x5d3, 0x2dc4: 0x5d4, 0x2dc5: 0x5d5, 0x2dc6: 0x05, 0x2dc7: 0x268, + 0x2dc8: 0x25f, 0x2dc9: 0x08, 0x2dca: 0x09, 0x2dcb: 0x0a, 0x2dcc: 0x0b, 0x2dcd: 0x0c, 0x2dce: 0x0d, 0x2dcf: 0x0e, + 0x2dd0: 0x0f, 0x2dd1: 0x10, 0x2dd2: 0x11, 0x2dd3: 0x12, 0x2dd4: 0x13, 0x2dd5: 0x14, 0x2dd6: 0x15, 0x2dd7: 0x16, + 0x2dd8: 0x17, 0x2dd9: 0x18, 0x2dda: 0x19, 0x2ddb: 0x1a, 0x2ddc: 0x1b, 0x2ddd: 0x1c, 0x2dde: 0x1d, 0x2ddf: 0x1e, + 0x2de0: 0x01, 0x2de1: 0xb4, 0x2de2: 0x4e, 0x2de3: 0x04, 0x2de4: 0x05, + 0x2dea: 0x06, 0x2ded: 0x07, 0x2def: 0x08, + 0x2df0: 0x13, 0x2df3: 0x15, + // Block 0xb8, offset 0x2e00 + 0x2e00: 0x3f, 0x2e01: 0x40, 0x2e02: 0x41, 0x2e03: 0x42, 0x2e04: 0x43, 0x2e05: 0x44, 0x2e06: 0x45, 0x2e07: 0x46, + 0x2e08: 0x47, 0x2e09: 0x48, 0x2e0a: 0x49, 0x2e0b: 0x4a, 0x2e0c: 0x4b, 0x2e0d: 0x4c, 0x2e0e: 0x4d, 0x2e0f: 0x4e, + 0x2e10: 0x4f, 0x2e11: 0x50, 0x2e12: 0x51, 0x2e13: 0x52, 0x2e14: 0x53, 0x2e15: 0x54, 0x2e16: 0x55, 0x2e17: 0x56, + 0x2e18: 0x57, 0x2e19: 0x58, 0x2e1a: 0x59, 0x2e1b: 0x5a, 0x2e1c: 0x5b, 0x2e1d: 0x5c, 0x2e1e: 0x5d, 0x2e1f: 0x5e, + 0x2e20: 0x5f, 0x2e21: 0x60, 0x2e22: 0x61, 0x2e23: 0x62, 0x2e24: 0x63, 0x2e25: 0x64, 0x2e26: 0x65, 0x2e27: 0x66, + 0x2e28: 0x67, 0x2e29: 0x68, 0x2e2a: 0x69, 0x2e2c: 0x6a, 0x2e2d: 0x6b, 0x2e2e: 0x6c, 0x2e2f: 0x6d, + 0x2e30: 0x6e, 0x2e31: 0x6f, 0x2e33: 0x70, 0x2e34: 0x71, 0x2e35: 0x72, 0x2e36: 0x1fc, 0x2e37: 0x74, + 0x2e38: 0x75, 0x2e39: 0x5da, 0x2e3a: 0x26b, 0x2e3b: 0x5d6, 0x2e3c: 0x79, 0x2e3d: 0x7a, 0x2e3e: 0x7b, 0x2e3f: 0x7c, + // Block 0xb9, offset 0x2e40 + 0x2e42: 0x01, 0x2e43: 0x5d3, 0x2e44: 0x5d4, 0x2e45: 0x5d9, 0x2e46: 0x05, 0x2e47: 0x268, + 0x2e48: 0x25f, 0x2e49: 0x08, 0x2e4a: 0x09, 0x2e4b: 0x0a, 0x2e4c: 0x0b, 0x2e4d: 0x0c, 0x2e4e: 0x0d, 0x2e4f: 0x0e, + 0x2e50: 0x0f, 0x2e51: 0x10, 0x2e52: 0x11, 0x2e53: 0x12, 0x2e54: 0x13, 0x2e55: 0x14, 0x2e56: 0x15, 0x2e57: 0x16, + 0x2e58: 0x17, 0x2e59: 0x18, 0x2e5a: 0x19, 0x2e5b: 0x1a, 0x2e5c: 0x1b, 0x2e5d: 0x1c, 0x2e5e: 0x1d, 0x2e5f: 0x1e, + 0x2e60: 0x01, 0x2e61: 0xb6, 0x2e62: 0x51, 0x2e63: 0x52, 0x2e64: 0x05, + 0x2e6a: 0x06, 0x2e6d: 0x07, 0x2e6f: 0x08, + 0x2e70: 0x54, 0x2e73: 0x15, + // Block 0xba, offset 0x2e80 + 0x2ea0: 0x1f, 0x2ea1: 0x20, 0x2ea2: 0x21, 0x2ea3: 0x22, 0x2ea4: 0x23, 0x2ea5: 0x24, 0x2ea6: 0x25, 0x2ea7: 0x26, + 0x2ea8: 0x27, 0x2ea9: 0x28, 0x2eaa: 0x29, 0x2eab: 0x2a, 0x2eac: 0x2b, 0x2ead: 0x2c, 0x2eae: 0x5db, 0x2eaf: 0x2e, + 0x2eb0: 0x2f, 0x2eb1: 0x30, 0x2eb2: 0x31, 0x2eb3: 0x32, 0x2eb4: 0x33, 0x2eb5: 0x34, 0x2eb6: 0x35, 0x2eb7: 0x36, + 0x2eb8: 0x37, 0x2eb9: 0x38, 0x2eba: 0x39, 0x2ebb: 0x3a, 0x2ebc: 0x3b, 0x2ebd: 0x3c, 0x2ebe: 0x3d, 0x2ebf: 0x3e, + // Block 0xbb, offset 0x2ec0 + 0x2ec2: 0x01, 0x2ec3: 0x02, 0x2ec4: 0x03, 0x2ec5: 0x04, 0x2ec6: 0x05, 0x2ec7: 0x06, + 0x2ec8: 0x07, 0x2ec9: 0x08, 0x2eca: 0x09, 0x2ecb: 0x0a, 0x2ecc: 0x0b, 0x2ecd: 0x0c, 0x2ece: 0x0d, 0x2ecf: 0x0e, + 0x2ed0: 0x0f, 0x2ed1: 0x10, 0x2ed2: 0x11, 0x2ed3: 0x12, 0x2ed4: 0x13, 0x2ed5: 0x14, 0x2ed6: 0x15, 0x2ed7: 0x16, + 0x2ed8: 0x17, 0x2ed9: 0x18, 0x2eda: 0x19, 0x2edb: 0x1a, 0x2edc: 0x1b, 0x2edd: 0x1c, 0x2ede: 0x1d, 0x2edf: 0x1e, + 0x2ee0: 0xb8, 0x2ee1: 0x02, 0x2ee2: 0x03, 0x2ee3: 0x04, 0x2ee4: 0x05, + 0x2eea: 0x06, 0x2eed: 0x07, 0x2eef: 0x08, + 0x2ef0: 0x13, 0x2ef3: 0x15, + // Block 0xbc, offset 0x2f00 + 0x2f20: 0x1f, 0x2f21: 0x20, 0x2f22: 0x21, 0x2f23: 0x22, 0x2f24: 0x23, 0x2f25: 0x24, 0x2f26: 0x25, 0x2f27: 0x26, + 0x2f28: 0x27, 0x2f29: 0x28, 0x2f2a: 0x29, 0x2f2b: 0x2a, 0x2f2c: 0x2b, 0x2f2d: 0x2c, 0x2f2e: 0x2d, 0x2f2f: 0x2e, + 0x2f30: 0x5dc, 0x2f31: 0x30, 0x2f32: 0x31, 0x2f33: 0x32, 0x2f34: 0x33, 0x2f35: 0x34, 0x2f36: 0x35, 0x2f37: 0x36, + 0x2f38: 0x37, 0x2f39: 0x38, 0x2f3a: 0x39, 0x2f3b: 0x3a, 0x2f3c: 0x3b, 0x2f3d: 0x3c, 0x2f3e: 0x3d, 0x2f3f: 0x3e, + // Block 0xbd, offset 0x2f40 + 0x2f42: 0x01, 0x2f43: 0x02, 0x2f44: 0x03, 0x2f45: 0x04, 0x2f46: 0x05, 0x2f47: 0x06, + 0x2f48: 0x07, 0x2f49: 0x08, 0x2f4a: 0x09, 0x2f4b: 0x0a, 0x2f4c: 0x0b, 0x2f4d: 0x0c, 0x2f4e: 0x0d, 0x2f4f: 0x0e, + 0x2f50: 0x0f, 0x2f51: 0x10, 0x2f52: 0x11, 0x2f53: 0x12, 0x2f54: 0x13, 0x2f55: 0x14, 0x2f56: 0x15, 0x2f57: 0x16, + 0x2f58: 0x17, 0x2f59: 0x18, 0x2f5a: 0x19, 0x2f5b: 0x1a, 0x2f5c: 0x1b, 0x2f5d: 0x1c, 0x2f5e: 0x1d, 0x2f5f: 0x1e, + 0x2f60: 0xba, 0x2f61: 0x02, 0x2f62: 0x03, 0x2f63: 0x04, 0x2f64: 0x05, + 0x2f6a: 0x06, 0x2f6d: 0x07, 0x2f6f: 0x08, + 0x2f70: 0x13, 0x2f73: 0x15, + // Block 0xbe, offset 0x2f80 + 0x2fa0: 0x1f, 0x2fa1: 0x20, 0x2fa2: 0x21, 0x2fa3: 0x22, 0x2fa4: 0x23, 0x2fa5: 0x24, 0x2fa6: 0x25, 0x2fa7: 0x26, + 0x2fa8: 0x27, 0x2fa9: 0x28, 0x2faa: 0x29, 0x2fab: 0x2a, 0x2fac: 0x2b, 0x2fad: 0x2c, 0x2fae: 0x2d, 0x2faf: 0x2e, + 0x2fb0: 0x2f, 0x2fb1: 0x30, 0x2fb2: 0x31, 0x2fb3: 0x32, 0x2fb4: 0x33, 0x2fb5: 0x34, 0x2fb6: 0x35, 0x2fb7: 0x36, + 0x2fb8: 0x5dd, 0x2fb9: 0x5de, 0x2fba: 0x39, 0x2fbb: 0x3a, 0x2fbc: 0x3b, 0x2fbd: 0x3c, 0x2fbe: 0x3d, 0x2fbf: 0x3e, + // Block 0xbf, offset 0x2fc0 + 0x2fc2: 0x01, 0x2fc3: 0x02, 0x2fc4: 0x03, 0x2fc5: 0x04, 0x2fc6: 0x05, 0x2fc7: 0x06, + 0x2fc8: 0x07, 0x2fc9: 0x08, 0x2fca: 0x09, 0x2fcb: 0x0a, 0x2fcc: 0x0b, 0x2fcd: 0x0c, 0x2fce: 0x0d, 0x2fcf: 0x0e, + 0x2fd0: 0x0f, 0x2fd1: 0x10, 0x2fd2: 0x11, 0x2fd3: 0x12, 0x2fd4: 0x13, 0x2fd5: 0x14, 0x2fd6: 0x15, 0x2fd7: 0x16, + 0x2fd8: 0x17, 0x2fd9: 0x18, 0x2fda: 0x19, 0x2fdb: 0x1a, 0x2fdc: 0x1b, 0x2fdd: 0x1c, 0x2fde: 0x1d, 0x2fdf: 0x1e, + 0x2fe0: 0xbc, 0x2fe1: 0x02, 0x2fe2: 0x03, 0x2fe3: 0x04, 0x2fe4: 0x05, + 0x2fea: 0x06, 0x2fed: 0x07, 0x2fef: 0x08, + 0x2ff0: 0x13, 0x2ff3: 0x15, + // Block 0xc0, offset 0x3000 + 0x3000: 0x3f, 0x3001: 0x40, 0x3002: 0x41, 0x3003: 0x42, 0x3004: 0x43, 0x3005: 0x44, 0x3006: 0x45, 0x3007: 0x46, + 0x3008: 0x47, 0x3009: 0x48, 0x300a: 0x49, 0x300b: 0x4a, 0x300c: 0x4b, 0x300d: 0x4c, 0x300e: 0x4d, 0x300f: 0x4e, + 0x3010: 0x4f, 0x3011: 0x50, 0x3012: 0x51, 0x3013: 0x52, 0x3014: 0x53, 0x3015: 0x54, 0x3016: 0x55, 0x3017: 0x56, + 0x3018: 0x57, 0x3019: 0x58, 0x301a: 0x59, 0x301b: 0x5a, 0x301c: 0x5b, 0x301d: 0x5c, 0x301e: 0x5d, 0x301f: 0x5e, + 0x3020: 0x5f, 0x3021: 0x60, 0x3022: 0x61, 0x3023: 0x62, 0x3024: 0x63, 0x3025: 0x64, 0x3026: 0x65, 0x3027: 0x66, + 0x3028: 0x67, 0x3029: 0x68, 0x302a: 0x69, 0x302c: 0x6a, 0x302d: 0x6b, 0x302e: 0x6c, 0x302f: 0x6d, + 0x3030: 0x6e, 0x3031: 0x6f, 0x3033: 0x70, 0x3034: 0x71, 0x3035: 0x72, 0x3036: 0x73, 0x3037: 0x74, + 0x3038: 0x5e7, 0x3039: 0x5e8, 0x303a: 0x5e9, 0x303b: 0x5ea, 0x303c: 0x79, 0x303d: 0x7a, 0x303e: 0x7b, 0x303f: 0x7c, + // Block 0xc1, offset 0x3040 + 0x3042: 0x01, 0x3043: 0x5e1, 0x3044: 0x5e2, 0x3045: 0x5e3, 0x3046: 0x05, 0x3047: 0x5e4, + 0x3048: 0x5e5, 0x3049: 0x08, 0x304a: 0x5e6, 0x304b: 0x0a, 0x304c: 0x0b, 0x304d: 0x0c, 0x304e: 0x0d, 0x304f: 0x0e, + 0x3050: 0x0f, 0x3051: 0x10, 0x3052: 0x11, 0x3053: 0x12, 0x3054: 0x13, 0x3055: 0x14, 0x3056: 0x15, 0x3057: 0x16, + 0x3058: 0x17, 0x3059: 0x18, 0x305a: 0x19, 0x305b: 0x1a, 0x305c: 0x1b, 0x305d: 0x1c, 0x305e: 0x1d, 0x305f: 0x1e, + 0x3060: 0x01, 0x3061: 0xbe, 0x3062: 0x03, 0x3063: 0x04, 0x3064: 0x05, + 0x306a: 0x06, 0x306d: 0x07, 0x306f: 0x08, + 0x3070: 0x13, 0x3073: 0x15, + // Block 0xc2, offset 0x3080 + 0x3080: 0x3f, 0x3081: 0x40, 0x3082: 0x41, 0x3083: 0x42, 0x3084: 0x43, 0x3085: 0x44, 0x3086: 0x45, 0x3087: 0x46, + 0x3088: 0x47, 0x3089: 0x48, 0x308a: 0x49, 0x308b: 0x4a, 0x308c: 0x4b, 0x308d: 0x4c, 0x308e: 0x4d, 0x308f: 0x4e, + 0x3090: 0x4f, 0x3091: 0x50, 0x3092: 0x51, 0x3093: 0x52, 0x3094: 0x53, 0x3095: 0x54, 0x3096: 0x55, 0x3097: 0x56, + 0x3098: 0x57, 0x3099: 0x58, 0x309a: 0x59, 0x309b: 0x5a, 0x309c: 0x5b, 0x309d: 0x5c, 0x309e: 0x5d, 0x309f: 0x5e, + 0x30a0: 0x5f, 0x30a1: 0x60, 0x30a2: 0x61, 0x30a3: 0x62, 0x30a4: 0x63, 0x30a5: 0x64, 0x30a6: 0x65, 0x30a7: 0x66, + 0x30a8: 0x67, 0x30a9: 0x68, 0x30aa: 0x69, 0x30ac: 0x6a, 0x30ad: 0x6b, 0x30ae: 0x6c, 0x30af: 0x6d, + 0x30b0: 0x6e, 0x30b1: 0x6f, 0x30b3: 0x70, 0x30b4: 0x71, 0x30b5: 0x72, 0x30b6: 0x73, 0x30b7: 0x74, + 0x30b8: 0x1de, 0x30b9: 0x1df, 0x30ba: 0x77, 0x30bb: 0x1e1, 0x30bc: 0x79, 0x30bd: 0x7a, 0x30be: 0x7b, 0x30bf: 0x7c, + // Block 0xc3, offset 0x30c0 + 0x30c0: 0x7d, 0x30c1: 0x7e, 0x30c2: 0x7f, 0x30c3: 0x80, 0x30c4: 0x81, 0x30c5: 0x5ed, 0x30c6: 0x83, 0x30c7: 0x84, + 0x30c8: 0x85, 0x30c9: 0x86, 0x30ca: 0x87, 0x30cb: 0x88, 0x30cc: 0x89, 0x30cd: 0x8a, 0x30ce: 0x8b, 0x30cf: 0x8c, + 0x30d0: 0x8d, 0x30d1: 0x8e, 0x30d2: 0x8f, 0x30d3: 0x90, 0x30d4: 0x91, 0x30d5: 0x92, 0x30d6: 0x93, 0x30d7: 0x94, + 0x30d8: 0x95, 0x30d9: 0x96, 0x30da: 0x97, 0x30db: 0x98, 0x30dc: 0x99, 0x30dd: 0x9a, 0x30de: 0x9b, 0x30df: 0x9c, + 0x30e0: 0x9d, 0x30e1: 0x9e, 0x30e2: 0x9f, 0x30e3: 0xa0, 0x30e4: 0xa1, 0x30e5: 0xa2, 0x30e6: 0xa3, 0x30e7: 0xa4, + 0x30e8: 0xa5, 0x30e9: 0xa6, 0x30ea: 0xa7, 0x30eb: 0xa8, 0x30ec: 0xa9, 0x30ed: 0xaa, + 0x30f0: 0xab, 0x30f1: 0xac, 0x30f2: 0xad, 0x30f3: 0xae, 0x30f4: 0xaf, 0x30f5: 0xb0, 0x30f6: 0xb1, 0x30f7: 0xb2, + 0x30f8: 0xb3, 0x30fa: 0xb4, 0x30fb: 0xb5, 0x30fc: 0xb6, 0x30fd: 0xb7, 0x30fe: 0xb8, 0x30ff: 0xb9, + // Block 0xc4, offset 0x3100 + 0x3100: 0xba, 0x3101: 0xbb, 0x3102: 0xbc, 0x3103: 0xbd, 0x3104: 0xbe, 0x3105: 0xbf, 0x3106: 0xc0, 0x3107: 0xc1, + 0x3108: 0xc2, 0x3109: 0xc3, 0x310a: 0xc4, 0x310b: 0xc5, 0x310c: 0xc6, 0x310d: 0x1e4, 0x310e: 0xc8, 0x310f: 0xc9, + // Block 0xc5, offset 0x3140 + 0x3140: 0x18b, 0x3141: 0x18c, 0x3142: 0x18d, 0x3143: 0x18e, 0x3144: 0x5ee, 0x3145: 0x190, 0x3146: 0x191, 0x3147: 0x192, + 0x3148: 0x193, 0x3149: 0x194, 0x314c: 0x195, 0x314d: 0x196, 0x314e: 0x197, 0x314f: 0x198, + 0x3150: 0x199, 0x3151: 0x19a, 0x3152: 0x19b, 0x3153: 0x19c, 0x3154: 0x19d, 0x3155: 0x19e, 0x3157: 0x19f, + 0x3158: 0x1a0, 0x3159: 0x1a1, 0x315a: 0x1a2, 0x315b: 0x1a3, 0x315c: 0x1a4, 0x315d: 0x1a5, + // Block 0xc6, offset 0x3180 + 0x3190: 0x09, 0x3191: 0x0a, 0x3192: 0x0b, 0x3193: 0x0c, 0x3196: 0x0d, + 0x319b: 0x0e, 0x319d: 0x0f, 0x319e: 0x10, 0x319f: 0xc3, + 0x31af: 0x12, + // Block 0xc7, offset 0x31c0 + 0x31c2: 0x01, 0x31c3: 0x1d7, 0x31c4: 0x1d8, 0x31c5: 0x1d9, 0x31c6: 0x05, 0x31c7: 0x1db, + 0x31c8: 0x1dc, 0x31c9: 0x08, 0x31ca: 0x09, 0x31cb: 0x0a, 0x31cc: 0x0b, 0x31cd: 0x0c, 0x31ce: 0x0d, 0x31cf: 0x0e, + 0x31d0: 0x0f, 0x31d1: 0x10, 0x31d2: 0x11, 0x31d3: 0x12, 0x31d4: 0x13, 0x31d5: 0x14, 0x31d6: 0x15, 0x31d7: 0x16, + 0x31d8: 0x17, 0x31d9: 0x18, 0x31da: 0x19, 0x31db: 0x1a, 0x31dc: 0x1b, 0x31dd: 0x1c, 0x31de: 0x1d, 0x31df: 0x1e, + 0x31e0: 0x01, 0x31e1: 0xc0, 0x31e2: 0xc1, 0x31e3: 0xc2, 0x31e4: 0x05, + 0x31ea: 0x06, 0x31ed: 0x07, 0x31ef: 0x08, + 0x31f0: 0xc4, 0x31f3: 0x15, + // Block 0xc8, offset 0x3200 + 0x3202: 0x01, 0x3203: 0x02, 0x3204: 0x03, 0x3205: 0x04, 0x3206: 0x05, 0x3207: 0x06, + 0x3208: 0x07, 0x3209: 0x08, 0x320a: 0x09, 0x320b: 0x0a, 0x320c: 0x0b, 0x320d: 0x0c, 0x320e: 0x0d, 0x320f: 0x0e, + 0x3210: 0x0f, 0x3211: 0x10, 0x3212: 0x5ef, 0x3213: 0x12, 0x3214: 0x13, 0x3215: 0x14, 0x3216: 0x15, 0x3217: 0x16, + 0x3218: 0x17, 0x3219: 0x18, 0x321a: 0x19, 0x321b: 0x1a, 0x321c: 0x1b, 0x321d: 0x1c, 0x321e: 0x1d, 0x321f: 0x1e, + 0x3220: 0x01, 0x3221: 0x02, 0x3222: 0x03, 0x3223: 0x04, 0x3224: 0x05, + 0x322a: 0x06, 0x322d: 0x07, 0x322f: 0x08, + 0x3230: 0x13, 0x3233: 0x15, + // Block 0xc9, offset 0x3240 + 0x3264: 0xfb, 0x3265: 0xfc, 0x3266: 0xfd, 0x3267: 0xfe, + 0x3268: 0xff, 0x3269: 0x100, 0x326a: 0x101, 0x326b: 0x102, 0x326c: 0x103, 0x326d: 0x104, 0x326e: 0x252, 0x326f: 0x106, + 0x3270: 0x5f4, 0x3271: 0x5f5, 0x3272: 0x5f6, 0x3273: 0x5f7, 0x3274: 0x5f8, 0x3275: 0x10c, 0x3276: 0x10d, 0x3277: 0x10e, + 0x3278: 0x10f, 0x3279: 0x110, 0x327a: 0x111, 0x327b: 0x5f9, 0x327c: 0x113, 0x327d: 0x114, 0x327e: 0x115, 0x327f: 0x116, + // Block 0xca, offset 0x3280 + 0x3282: 0x01, 0x3283: 0x02, 0x3284: 0x03, 0x3285: 0x04, 0x3286: 0x05, 0x3287: 0x06, + 0x3288: 0x07, 0x3289: 0x08, 0x328a: 0x09, 0x328b: 0x0a, 0x328c: 0x0b, 0x328d: 0x0c, 0x328e: 0x0d, 0x328f: 0x0e, + 0x3290: 0x0f, 0x3291: 0x10, 0x3292: 0x11, 0x3293: 0x12, 0x3294: 0x13, 0x3295: 0x14, 0x3296: 0x15, 0x3297: 0x16, + 0x3298: 0x5f0, 0x3299: 0x5f1, 0x329a: 0x5f2, 0x329b: 0x5f3, 0x329c: 0x1b, 0x329d: 0x1c, 0x329e: 0x1d, 0x329f: 0x1e, + 0x32a0: 0x01, 0x32a1: 0x02, 0x32a2: 0x03, 0x32a3: 0x04, 0x32a4: 0x05, + 0x32aa: 0x06, 0x32ad: 0x07, 0x32af: 0xc7, + 0x32b0: 0x13, 0x32b3: 0x15, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x3f, 0x32c1: 0x40, 0x32c2: 0x41, 0x32c3: 0x42, 0x32c4: 0x43, 0x32c5: 0x44, 0x32c6: 0x45, 0x32c7: 0x46, + 0x32c8: 0x47, 0x32c9: 0x48, 0x32ca: 0x49, 0x32cb: 0x4a, 0x32cc: 0x4b, 0x32cd: 0x4c, 0x32ce: 0x4d, 0x32cf: 0x4e, + 0x32d0: 0x4f, 0x32d1: 0x50, 0x32d2: 0x51, 0x32d3: 0x52, 0x32d4: 0x53, 0x32d5: 0x54, 0x32d6: 0x55, 0x32d7: 0x56, + 0x32d8: 0x57, 0x32d9: 0x58, 0x32da: 0x59, 0x32db: 0x5a, 0x32dc: 0x5b, 0x32dd: 0x5c, 0x32de: 0x5d, 0x32df: 0x5e, + 0x32e0: 0x5f, 0x32e1: 0x60, 0x32e2: 0x61, 0x32e3: 0x62, 0x32e4: 0x63, 0x32e5: 0x64, 0x32e6: 0x65, 0x32e7: 0x66, + 0x32e8: 0x67, 0x32e9: 0x68, 0x32ea: 0x69, 0x32ec: 0x6a, 0x32ed: 0x6b, 0x32ee: 0x6c, 0x32ef: 0x6d, + 0x32f0: 0x6e, 0x32f1: 0x6f, 0x32f3: 0x70, 0x32f4: 0x71, 0x32f5: 0x72, 0x32f6: 0x73, 0x32f7: 0x74, + 0x32f8: 0x606, 0x32f9: 0x607, 0x32fa: 0x608, 0x32fb: 0x609, 0x32fc: 0x60a, 0x32fd: 0x60b, 0x32fe: 0x60c, 0x32ff: 0x60d, + // Block 0xcc, offset 0x3300 + 0x3302: 0x01, 0x3303: 0x5fc, 0x3304: 0x5fd, 0x3305: 0x5fe, 0x3306: 0x5ff, 0x3307: 0x600, + 0x3308: 0x601, 0x3309: 0x08, 0x330a: 0x09, 0x330b: 0x0a, 0x330c: 0x602, 0x330d: 0x603, 0x330e: 0x604, 0x330f: 0x605, + 0x3310: 0x0f, 0x3311: 0x10, 0x3312: 0x11, 0x3313: 0x12, 0x3314: 0x13, 0x3315: 0x14, 0x3316: 0x15, 0x3317: 0x16, + 0x3318: 0x17, 0x3319: 0x18, 0x331a: 0x19, 0x331b: 0x1a, 0x331c: 0x1b, 0x331d: 0x1c, 0x331e: 0x1d, 0x331f: 0x1e, + 0x3320: 0x01, 0x3321: 0xc9, 0x3322: 0x03, 0x3323: 0x04, 0x3324: 0x05, + 0x332a: 0x06, 0x332d: 0x07, 0x332f: 0x08, + 0x3330: 0x13, 0x3333: 0x15, + // Block 0xcd, offset 0x3340 + 0x3342: 0x01, 0x3343: 0x610, 0x3344: 0x03, 0x3345: 0x04, 0x3346: 0x05, 0x3347: 0x06, + 0x3348: 0x07, 0x3349: 0x08, 0x334a: 0x09, 0x334b: 0x0a, 0x334c: 0x0b, 0x334d: 0x0c, 0x334e: 0x0d, 0x334f: 0x0e, + 0x3350: 0x0f, 0x3351: 0x10, 0x3352: 0x11, 0x3353: 0x12, 0x3354: 0x13, 0x3355: 0x14, 0x3356: 0x15, 0x3357: 0x16, + 0x3358: 0x17, 0x3359: 0x18, 0x335a: 0x19, 0x335b: 0x1a, 0x335c: 0x1b, 0x335d: 0x1c, 0x335e: 0x1d, 0x335f: 0x1e, + 0x3360: 0x01, 0x3361: 0x02, 0x3362: 0x03, 0x3363: 0x04, 0x3364: 0x05, + 0x336a: 0x06, 0x336d: 0x07, 0x336f: 0x08, + 0x3370: 0x13, 0x3373: 0x15, + // Block 0xce, offset 0x3380 + 0x3380: 0x3f, 0x3381: 0x40, 0x3382: 0x41, 0x3383: 0x42, 0x3384: 0x43, 0x3385: 0x44, 0x3386: 0x45, 0x3387: 0x46, + 0x3388: 0x47, 0x3389: 0x48, 0x338a: 0x49, 0x338b: 0x4a, 0x338c: 0x4b, 0x338d: 0x4c, 0x338e: 0x4d, 0x338f: 0x4e, + 0x3390: 0x4f, 0x3391: 0x50, 0x3392: 0x51, 0x3393: 0x52, 0x3394: 0x53, 0x3395: 0x54, 0x3396: 0x55, 0x3397: 0x56, + 0x3398: 0x57, 0x3399: 0x58, 0x339a: 0x59, 0x339b: 0x5a, 0x339c: 0x5b, 0x339d: 0x5c, 0x339e: 0x5d, 0x339f: 0x5e, + 0x33a0: 0x5f, 0x33a1: 0x60, 0x33a2: 0x61, 0x33a3: 0x62, 0x33a4: 0x63, 0x33a5: 0x64, 0x33a6: 0x65, 0x33a7: 0x66, + 0x33a8: 0x67, 0x33a9: 0x68, 0x33aa: 0x69, 0x33ac: 0x6a, 0x33ad: 0x6b, 0x33ae: 0x6c, 0x33af: 0x6d, + 0x33b0: 0x6e, 0x33b1: 0x6f, 0x33b3: 0x70, 0x33b4: 0x71, 0x33b5: 0x72, 0x33b6: 0x73, 0x33b7: 0x74, + 0x33b8: 0x75, 0x33b9: 0x613, 0x33ba: 0x614, 0x33bb: 0x615, 0x33bc: 0x79, 0x33bd: 0x7a, 0x33be: 0x7b, 0x33bf: 0x7c, + // Block 0xcf, offset 0x33c0 + 0x33c2: 0x01, 0x33c3: 0x02, 0x33c4: 0x03, 0x33c5: 0x04, 0x33c6: 0x05, 0x33c7: 0x06, + 0x33c8: 0x07, 0x33c9: 0x08, 0x33ca: 0x09, 0x33cb: 0x0a, 0x33cc: 0x0b, 0x33cd: 0x0c, 0x33ce: 0x0d, 0x33cf: 0x0e, + 0x33d0: 0x0f, 0x33d1: 0x10, 0x33d2: 0x11, 0x33d3: 0x12, 0x33d4: 0x13, 0x33d5: 0x14, 0x33d6: 0x15, 0x33d7: 0x16, + 0x33d8: 0x17, 0x33d9: 0x18, 0x33da: 0x19, 0x33db: 0x1a, 0x33dc: 0x1b, 0x33dd: 0x1c, 0x33de: 0x1d, 0x33df: 0x1e, + 0x33e0: 0x01, 0x33e1: 0xcc, 0x33e2: 0x03, 0x33e3: 0x04, 0x33e4: 0x05, + 0x33ea: 0x06, 0x33ed: 0x07, 0x33ef: 0x08, + 0x33f0: 0x13, 0x33f3: 0x15, + // Block 0xd0, offset 0x3400 + 0x3400: 0x3f, 0x3401: 0x40, 0x3402: 0x41, 0x3403: 0x42, 0x3404: 0x43, 0x3405: 0x44, 0x3406: 0x45, 0x3407: 0x46, + 0x3408: 0x47, 0x3409: 0x48, 0x340a: 0x49, 0x340b: 0x4a, 0x340c: 0x4b, 0x340d: 0x4c, 0x340e: 0x4d, 0x340f: 0x4e, + 0x3410: 0x4f, 0x3411: 0x50, 0x3412: 0x51, 0x3413: 0x52, 0x3414: 0x53, 0x3415: 0x54, 0x3416: 0x55, 0x3417: 0x56, + 0x3418: 0x57, 0x3419: 0x58, 0x341a: 0x59, 0x341b: 0x5a, 0x341c: 0x5b, 0x341d: 0x5c, 0x341e: 0x5d, 0x341f: 0x5e, + 0x3420: 0x5f, 0x3421: 0x60, 0x3422: 0x61, 0x3423: 0x62, 0x3424: 0x63, 0x3425: 0x64, 0x3426: 0x65, 0x3427: 0x66, + 0x3428: 0x67, 0x3429: 0x68, 0x342a: 0x69, 0x342c: 0x6a, 0x342d: 0x6b, 0x342e: 0x6c, 0x342f: 0x6d, + 0x3430: 0x6e, 0x3431: 0x6f, 0x3433: 0x70, 0x3434: 0x71, 0x3435: 0x72, 0x3436: 0x73, 0x3437: 0x74, + 0x3438: 0x61d, 0x3439: 0x61e, 0x343a: 0x61f, 0x343b: 0x620, 0x343c: 0x79, 0x343d: 0x7a, 0x343e: 0x7b, 0x343f: 0x7c, + // Block 0xd1, offset 0x3440 + 0x3440: 0x7d, 0x3441: 0x7e, 0x3442: 0x7f, 0x3443: 0x80, 0x3444: 0x81, 0x3445: 0x82, 0x3446: 0x83, 0x3447: 0x84, + 0x3448: 0x85, 0x3449: 0x86, 0x344a: 0x87, 0x344b: 0x88, 0x344c: 0x89, 0x344d: 0x8a, 0x344e: 0x8b, 0x344f: 0x8c, + 0x3450: 0x8d, 0x3451: 0x8e, 0x3452: 0x8f, 0x3453: 0x90, 0x3454: 0x91, 0x3455: 0x92, 0x3456: 0x93, 0x3457: 0x94, + 0x3458: 0x95, 0x3459: 0x96, 0x345a: 0x97, 0x345b: 0x98, 0x345c: 0x99, 0x345d: 0x9a, 0x345e: 0x9b, 0x345f: 0x9c, + 0x3460: 0x9d, 0x3461: 0x9e, 0x3462: 0x9f, 0x3463: 0xa0, 0x3464: 0xa1, 0x3465: 0xa2, 0x3466: 0xa3, 0x3467: 0xa4, + 0x3468: 0xa5, 0x3469: 0xa6, 0x346a: 0xa7, 0x346b: 0xa8, 0x346c: 0xa9, 0x346d: 0xaa, + 0x3470: 0xab, 0x3471: 0xac, 0x3472: 0xad, 0x3473: 0xae, 0x3474: 0xaf, 0x3475: 0xb0, 0x3476: 0xb1, 0x3477: 0xb2, + 0x3478: 0xb3, 0x347a: 0x621, 0x347b: 0x622, 0x347c: 0x623, 0x347d: 0x624, 0x347e: 0x625, 0x347f: 0x626, + // Block 0xd2, offset 0x3480 + 0x3480: 0x627, 0x3481: 0xbb, 0x3482: 0xbc, 0x3483: 0xbd, 0x3484: 0xbe, 0x3485: 0xbf, 0x3486: 0x628, 0x3487: 0xc1, + 0x3488: 0x629, 0x3489: 0x62a, 0x348a: 0x62b, 0x348b: 0x62c, 0x348c: 0xc6, 0x348d: 0x62d, 0x348e: 0xc8, 0x348f: 0x62e, + 0x3490: 0x62f, 0x3491: 0x630, 0x3492: 0x631, 0x3493: 0x632, 0x3494: 0x633, 0x3495: 0x634, 0x3496: 0x635, 0x3497: 0x636, + 0x3498: 0x637, 0x3499: 0x638, 0x349a: 0x639, 0x349b: 0x63a, 0x349c: 0x63b, 0x349d: 0x63c, 0x349e: 0x63d, 0x349f: 0x63e, + 0x34a0: 0x63f, 0x34a1: 0x640, 0x34a2: 0x641, 0x34a3: 0x642, 0x34a4: 0x643, 0x34a5: 0x644, 0x34a6: 0x645, 0x34a7: 0x646, + 0x34a8: 0x647, 0x34a9: 0x648, 0x34aa: 0x649, 0x34ab: 0x64a, 0x34ac: 0x64b, 0x34ad: 0x64c, 0x34ae: 0x64d, 0x34af: 0x64e, + 0x34b0: 0x64f, 0x34b1: 0x650, 0x34b2: 0x651, 0x34b3: 0x652, 0x34b4: 0x653, 0x34b5: 0x654, 0x34b6: 0x655, 0x34b7: 0x656, + 0x34b8: 0x657, 0x34b9: 0x658, 0x34ba: 0x659, 0x34bb: 0x65a, 0x34bc: 0x65b, 0x34bd: 0x65c, 0x34be: 0x65d, 0x34bf: 0x65e, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x65f, 0x34c1: 0x660, 0x34c2: 0x661, 0x34c3: 0x662, 0x34c4: 0x663, 0x34c5: 0x664, 0x34c6: 0x665, 0x34c7: 0x666, + 0x34c8: 0x667, 0x34c9: 0x668, 0x34ca: 0x669, 0x34cb: 0x66a, 0x34cc: 0x66b, 0x34cd: 0x66c, 0x34ce: 0x66d, 0x34cf: 0x66e, + 0x34d0: 0x66f, 0x34d1: 0x670, 0x34d2: 0x671, 0x34d3: 0x672, 0x34d4: 0x673, 0x34d5: 0x674, 0x34d6: 0x675, 0x34d7: 0x676, + 0x34d8: 0x677, 0x34d9: 0x678, 0x34da: 0x679, 0x34db: 0x67a, 0x34dc: 0x67b, 0x34dd: 0x67c, 0x34de: 0x67d, 0x34df: 0x67e, + 0x34e0: 0x67f, 0x34e1: 0x680, 0x34e2: 0x681, 0x34e3: 0x682, 0x34e4: 0x683, 0x34e5: 0x684, 0x34e6: 0x685, 0x34e7: 0x686, + 0x34e8: 0x687, 0x34e9: 0x688, 0x34ea: 0x689, 0x34eb: 0x68a, 0x34ec: 0x68b, 0x34ed: 0x68c, 0x34ee: 0x68d, 0x34ef: 0x68e, + 0x34f0: 0x68f, 0x34f1: 0x690, 0x34f2: 0x691, 0x34f3: 0x692, 0x34f4: 0x693, 0x34f5: 0x694, 0x34f6: 0x695, 0x34f7: 0xca, + 0x34f8: 0x696, 0x34f9: 0x697, 0x34fa: 0x698, 0x34fb: 0x699, 0x34fc: 0x69a, 0x34fd: 0x69b, 0x34fe: 0x69c, 0x34ff: 0x69d, + // Block 0xd4, offset 0x3500 + 0x3500: 0x69e, 0x3501: 0x69f, 0x3502: 0x6a0, 0x3503: 0x6a1, 0x3504: 0x6a2, 0x3505: 0x6a3, 0x3506: 0x6a4, 0x3507: 0x6a5, + 0x3508: 0x6a6, 0x3509: 0x6a7, 0x350a: 0x6a8, 0x350b: 0x6a9, 0x350c: 0x6aa, 0x350d: 0x6ab, 0x350e: 0x6ac, 0x350f: 0x6ad, + 0x3510: 0x6ae, 0x3511: 0x6af, 0x3512: 0x6b0, 0x3513: 0x6b1, 0x3514: 0x6b2, 0x3515: 0x6b3, 0x3516: 0x6b4, 0x3517: 0x6b5, + 0x3518: 0x6b6, 0x3519: 0x6b7, 0x351a: 0x6b8, 0x351b: 0x6b9, 0x351c: 0x6ba, 0x351d: 0x6bb, 0x351e: 0x6bc, 0x351f: 0x6bd, + 0x3520: 0x6be, 0x3521: 0x6bf, 0x3522: 0x6c0, 0x3523: 0x6c1, 0x3524: 0x6c2, 0x3525: 0x6c3, 0x3526: 0x6c4, 0x3527: 0x6c5, + 0x3528: 0x6c6, 0x3529: 0x6c7, 0x352a: 0x6c8, 0x352b: 0x6c9, 0x352c: 0x6ca, 0x352d: 0x6cb, 0x352e: 0x6cc, 0x352f: 0x6cd, + 0x3530: 0x6ce, 0x3531: 0x6cf, 0x3532: 0x6d0, 0x3533: 0x6d1, 0x3534: 0x6d2, 0x3535: 0x6d3, 0x3536: 0x6d4, 0x3537: 0x6d5, + 0x3538: 0x6d6, 0x3539: 0x6d7, 0x353a: 0x6d8, 0x353b: 0x6d9, 0x353c: 0x6da, 0x353d: 0x6db, 0x353e: 0x6dc, 0x353f: 0x6dd, + // Block 0xd5, offset 0x3540 + 0x3540: 0x6de, 0x3541: 0x6df, 0x3542: 0x6e0, 0x3543: 0x6e1, 0x3544: 0x6e2, 0x3545: 0x6e3, 0x3546: 0x6e4, 0x3547: 0x6e5, + 0x3548: 0x6e6, 0x3549: 0x6e7, 0x354a: 0x6e8, 0x354b: 0x6e9, 0x354c: 0x6ea, 0x354d: 0x6eb, 0x354e: 0x6ec, 0x354f: 0x6ed, + 0x3550: 0x6ee, 0x3551: 0x6ef, 0x3552: 0x6f0, 0x3553: 0x6f1, 0x3554: 0x6f2, 0x3555: 0x6f3, 0x3556: 0x6f4, 0x3557: 0x6f5, + 0x3558: 0x6f6, 0x3559: 0x6f7, 0x355a: 0x6f8, 0x355b: 0x6f9, 0x355c: 0x6fa, 0x355d: 0x6fb, 0x355e: 0x6fc, 0x355f: 0x6fd, + 0x3560: 0x6fe, 0x3561: 0x6ff, 0x3562: 0x700, 0x3563: 0x701, 0x3564: 0x702, 0x3565: 0x703, 0x3566: 0x704, 0x3567: 0x705, + 0x3568: 0x706, 0x3569: 0x707, 0x356a: 0x708, 0x356b: 0x709, 0x356c: 0x70a, 0x356d: 0x70b, 0x356e: 0x70c, 0x356f: 0x70d, + 0x3570: 0x70e, 0x3571: 0x70f, 0x3572: 0x710, 0x3573: 0x711, 0x3574: 0x712, 0x3575: 0x713, 0x3576: 0x714, 0x3577: 0x715, + 0x3578: 0x716, 0x3579: 0x717, 0x357a: 0x718, 0x357b: 0x719, 0x357c: 0x71a, 0x357d: 0x71b, 0x357e: 0x71c, 0x357f: 0x71d, + // Block 0xd6, offset 0x3580 + 0x3580: 0x71e, 0x3581: 0x71f, 0x3582: 0x720, 0x3583: 0x721, 0x3584: 0x722, 0x3585: 0x723, 0x3586: 0x724, 0x3587: 0x725, + 0x3588: 0x726, 0x3589: 0x727, 0x358a: 0x728, 0x358b: 0x729, 0x358c: 0x72a, 0x358d: 0x72b, 0x358e: 0x72c, 0x358f: 0x72d, + 0x3590: 0x72e, 0x3591: 0x72f, 0x3592: 0x730, 0x3593: 0x731, 0x3594: 0x732, 0x3595: 0x733, 0x3596: 0x734, 0x3597: 0x735, + 0x3598: 0x736, 0x3599: 0x737, 0x359a: 0x738, 0x359b: 0x739, 0x359c: 0x73a, 0x359d: 0x73b, 0x359e: 0x73c, 0x359f: 0x73d, + 0x35a0: 0x73e, 0x35a1: 0x73f, 0x35a2: 0x740, 0x35a3: 0x741, 0x35a4: 0x742, 0x35a5: 0x743, 0x35a6: 0x744, 0x35a7: 0x745, + 0x35a8: 0x746, 0x35a9: 0x747, 0x35aa: 0x748, 0x35ab: 0x749, 0x35ac: 0x74a, 0x35ad: 0x74b, 0x35ae: 0x74c, 0x35af: 0x74d, + 0x35b0: 0x74e, 0x35b1: 0x74f, 0x35b2: 0x750, 0x35b3: 0x751, 0x35b4: 0x752, 0x35b5: 0x753, 0x35b6: 0x754, 0x35b7: 0x755, + 0x35b8: 0x756, 0x35b9: 0x757, 0x35ba: 0x758, 0x35bb: 0x759, 0x35bc: 0x75a, 0x35bd: 0x75b, 0x35be: 0x75c, 0x35bf: 0x75d, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x75e, 0x35c1: 0x75f, 0x35c2: 0x760, 0x35c3: 0x761, 0x35c4: 0x762, 0x35c5: 0x763, 0x35c6: 0x764, 0x35c7: 0x765, + 0x35c8: 0x766, 0x35c9: 0x767, 0x35ca: 0x768, 0x35cb: 0x769, 0x35cc: 0x76a, 0x35cd: 0x76b, 0x35ce: 0x76c, 0x35cf: 0x76d, + 0x35d0: 0x76e, 0x35d1: 0x76f, 0x35d2: 0x770, 0x35d3: 0x771, 0x35d4: 0x772, 0x35d5: 0x773, 0x35d6: 0x774, 0x35d7: 0x775, + 0x35d8: 0x776, 0x35d9: 0x777, 0x35da: 0x778, 0x35db: 0x779, 0x35dc: 0x77a, 0x35dd: 0x77b, 0x35de: 0x77c, 0x35df: 0x77d, + 0x35e0: 0x77e, 0x35e1: 0x77f, 0x35e2: 0x780, 0x35e3: 0x781, 0x35e4: 0x782, 0x35e5: 0x783, 0x35e6: 0x784, 0x35e7: 0x785, + 0x35e8: 0x786, 0x35e9: 0x787, 0x35ea: 0x788, 0x35eb: 0x789, 0x35ec: 0x78a, 0x35ed: 0x78b, 0x35ee: 0x78c, 0x35ef: 0x78d, + 0x35f0: 0x78e, 0x35f1: 0x78f, 0x35f2: 0x790, 0x35f3: 0x791, 0x35f4: 0x792, 0x35f5: 0x793, 0x35f6: 0x794, 0x35f7: 0x795, + 0x35f8: 0x796, 0x35f9: 0x797, 0x35fa: 0x798, 0x35fb: 0x799, 0x35fc: 0x79a, 0x35fd: 0x79b, 0x35fe: 0x79c, 0x35ff: 0x79d, + // Block 0xd8, offset 0x3600 + 0x3600: 0x79e, 0x3601: 0x79f, 0x3602: 0x7a0, 0x3603: 0x7a1, 0x3604: 0x7a2, 0x3605: 0x7a3, 0x3606: 0x7a4, 0x3607: 0x7a5, + 0x3608: 0x7a6, 0x3609: 0x7a7, 0x360a: 0x7a8, 0x360b: 0x7a9, 0x360c: 0x7aa, 0x360d: 0x7ab, 0x360e: 0x7ac, 0x360f: 0x7ad, + 0x3610: 0x7ae, 0x3611: 0x7af, 0x3612: 0x7b0, 0x3613: 0x7b1, 0x3614: 0x7b2, 0x3615: 0x7b3, 0x3616: 0x7b4, 0x3617: 0x7b5, + 0x3618: 0x7b6, 0x3619: 0x7b7, 0x361a: 0x7b8, 0x361b: 0x7b9, 0x361c: 0x7ba, 0x361d: 0x7bb, 0x361e: 0x7bc, 0x361f: 0x7bd, + 0x3620: 0x7be, 0x3621: 0x7bf, 0x3622: 0x7c0, 0x3623: 0x7c1, 0x3624: 0x7c2, 0x3625: 0x7c3, 0x3626: 0x7c4, 0x3627: 0x7c5, + 0x3628: 0x7c6, 0x3629: 0x7c7, 0x362a: 0x7c8, 0x362b: 0x7c9, 0x362c: 0x7ca, 0x362d: 0x7cb, 0x362e: 0x7cc, 0x362f: 0x7cd, + 0x3630: 0x7ce, 0x3631: 0x7cf, 0x3632: 0x7d0, 0x3633: 0x7d1, 0x3634: 0x7d2, 0x3635: 0x7d3, 0x3636: 0x7d4, 0x3637: 0x7d5, + 0x3638: 0x7d6, 0x3639: 0x7d7, 0x363a: 0x7d8, 0x363b: 0x7d9, 0x363c: 0x7da, 0x363d: 0x7db, 0x363e: 0x7dc, 0x363f: 0x7dd, + // Block 0xd9, offset 0x3640 + 0x3664: 0x7de, 0x3665: 0x7df, 0x3666: 0x7e0, 0x3667: 0x7e1, + 0x3668: 0x7e2, 0x3669: 0x7e3, 0x366a: 0x7e4, 0x366b: 0x7e5, 0x366c: 0x103, 0x366d: 0x104, 0x366e: 0x105, 0x366f: 0x106, + 0x3670: 0x107, 0x3671: 0x108, 0x3672: 0x109, 0x3673: 0x10a, 0x3674: 0x10b, 0x3675: 0x10c, 0x3676: 0x10d, 0x3677: 0x10e, + 0x3678: 0x10f, 0x3679: 0x110, 0x367a: 0x111, 0x367b: 0x112, 0x367c: 0x113, 0x367d: 0x114, 0x367e: 0x115, 0x367f: 0x116, + // Block 0xda, offset 0x3680 + 0x3680: 0x18b, 0x3681: 0x18c, 0x3682: 0x18d, 0x3683: 0x18e, 0x3684: 0x18f, 0x3685: 0x190, 0x3686: 0x191, 0x3687: 0x192, + 0x3688: 0x7e6, 0x3689: 0x7e7, 0x368c: 0x195, 0x368d: 0x196, 0x368e: 0x197, 0x368f: 0x198, + 0x3690: 0x199, 0x3691: 0x19a, 0x3692: 0x19b, 0x3693: 0x19c, 0x3694: 0x19d, 0x3695: 0x19e, 0x3697: 0x19f, + 0x3698: 0x1a0, 0x3699: 0x1a1, 0x369a: 0x1a2, 0x369b: 0x1a3, 0x369c: 0x1a4, 0x369d: 0x1a5, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x7e8, 0x36c1: 0x7e9, 0x36c2: 0x7ea, 0x36c3: 0x7eb, 0x36c4: 0x7ec, 0x36c5: 0x7ed, 0x36c6: 0x7ee, 0x36c7: 0x7ef, + 0x36c8: 0x7f0, 0x36c9: 0x7f1, 0x36ca: 0x7f2, 0x36cb: 0x7f3, 0x36cc: 0x7f4, 0x36cd: 0x7f5, 0x36ce: 0x7f6, 0x36cf: 0x7f7, + 0x36d0: 0x7f8, 0x36d1: 0x7f9, 0x36d2: 0x7fa, 0x36d3: 0x7fb, 0x36d4: 0x7fc, 0x36d5: 0x7fd, 0x36d6: 0x7fe, 0x36d7: 0x7ff, + 0x36d8: 0x800, 0x36d9: 0x801, 0x36da: 0x802, 0x36db: 0x803, 0x36dc: 0x804, 0x36dd: 0x805, 0x36de: 0x806, 0x36df: 0x807, + 0x36e0: 0x808, 0x36e1: 0x809, 0x36e2: 0x80a, 0x36e3: 0x80b, 0x36e4: 0x80c, 0x36e5: 0x80d, 0x36e6: 0x80e, 0x36e7: 0x80f, + 0x36e8: 0x810, 0x36e9: 0x811, 0x36ea: 0x812, 0x36eb: 0x813, 0x36ec: 0x814, 0x36ed: 0x815, 0x36ee: 0x816, 0x36ef: 0x817, + 0x36f0: 0x818, 0x36f1: 0x819, 0x36f2: 0x81a, 0x36f3: 0x81b, 0x36f4: 0x81c, 0x36f5: 0x81d, 0x36f6: 0x81e, 0x36f7: 0x81f, + 0x36f8: 0x820, 0x36f9: 0x821, 0x36fa: 0x822, 0x36fb: 0x823, 0x36fc: 0x824, 0x36fd: 0x825, 0x36fe: 0x826, 0x36ff: 0x827, + // Block 0xdc, offset 0x3700 + 0x3700: 0x828, 0x3701: 0x829, 0x3702: 0x82a, 0x3703: 0x82b, 0x3704: 0x82c, 0x3705: 0x82d, 0x3706: 0x82e, 0x3707: 0x82f, + 0x3708: 0x830, 0x3709: 0x831, 0x370a: 0x832, 0x370b: 0x833, 0x370c: 0x834, 0x370d: 0x835, 0x370e: 0x836, 0x370f: 0x837, + 0x3710: 0x838, 0x3711: 0x839, 0x3712: 0x83a, 0x3713: 0x83b, 0x3714: 0x83c, 0x3715: 0x83d, 0x3716: 0x83e, 0x3717: 0x83f, + 0x3718: 0x840, 0x3719: 0x841, 0x371a: 0x842, 0x371b: 0x843, 0x371c: 0x844, 0x371d: 0x845, 0x371e: 0x846, 0x371f: 0x847, + 0x3720: 0x848, 0x3721: 0x849, 0x3722: 0x84a, 0x3723: 0x84b, 0x3724: 0x84c, 0x3725: 0x84d, 0x3726: 0x84e, 0x3727: 0x84f, + 0x3728: 0x850, 0x3729: 0x851, 0x372a: 0x852, 0x372b: 0x853, 0x372c: 0x854, 0x372d: 0x855, 0x372e: 0x856, 0x372f: 0x857, + 0x3730: 0x858, 0x3731: 0x859, 0x3732: 0x85a, 0x3733: 0x85b, 0x3734: 0x85c, 0x3735: 0x85d, 0x3736: 0x85e, 0x3737: 0x85f, + 0x3738: 0x860, 0x3739: 0x861, 0x373a: 0x862, 0x373b: 0x863, 0x373c: 0x864, 0x373d: 0x865, 0x373e: 0x866, 0x373f: 0x867, + // Block 0xdd, offset 0x3740 + 0x3740: 0x868, 0x3741: 0x869, 0x3742: 0x86a, 0x3743: 0x86b, 0x3744: 0x86c, 0x3745: 0x86d, 0x3746: 0x86e, 0x3747: 0x86f, + 0x3748: 0x870, 0x3749: 0x871, 0x374a: 0x872, 0x374b: 0x873, 0x374c: 0x874, 0x374d: 0x875, 0x374e: 0x876, 0x374f: 0x877, + 0x3750: 0x878, 0x3751: 0x879, 0x3752: 0x87a, 0x3753: 0x87b, 0x3754: 0x87c, 0x3755: 0x87d, 0x3756: 0x87e, 0x3757: 0x87f, + 0x3758: 0x880, 0x3759: 0x881, 0x375a: 0x882, 0x375b: 0x883, 0x375c: 0x884, 0x375d: 0x885, 0x375e: 0x886, 0x375f: 0x887, + 0x3760: 0x888, 0x3761: 0x889, 0x3762: 0x88a, 0x3763: 0x88b, 0x3764: 0x88c, 0x3765: 0x88d, 0x3766: 0x88e, 0x3767: 0x88f, + 0x3768: 0x890, 0x3769: 0x891, 0x376a: 0x892, 0x376b: 0x893, 0x376c: 0x894, 0x376d: 0x895, 0x376e: 0x896, 0x376f: 0x897, + 0x3770: 0x898, 0x3771: 0x899, 0x3772: 0x89a, 0x3773: 0x89b, 0x3774: 0x89c, 0x3775: 0x89d, 0x3776: 0x89e, 0x3777: 0x89f, + 0x3778: 0x8a0, 0x3779: 0x8a1, 0x377a: 0x8a2, 0x377b: 0x8a3, 0x377c: 0x8a4, 0x377d: 0x8a5, 0x377e: 0x8a6, 0x377f: 0x8a7, + // Block 0xde, offset 0x3780 + 0x3780: 0x8a8, 0x3781: 0x8a9, 0x3782: 0x8aa, 0x3783: 0x8ab, 0x3784: 0x8ac, 0x3785: 0x8ad, 0x3786: 0x8ae, 0x3787: 0x8af, + 0x3788: 0x8b0, 0x3789: 0x8b1, 0x378a: 0x8b2, 0x378b: 0x8b3, 0x378c: 0x8b4, 0x378d: 0x8b5, 0x378e: 0x8b6, 0x378f: 0x8b7, + 0x3790: 0x8b8, 0x3791: 0x8b9, 0x3792: 0x8ba, 0x3793: 0x8bb, 0x3794: 0x8bc, 0x3795: 0x8bd, 0x3796: 0x8be, 0x3797: 0x8bf, + 0x3798: 0x8c0, 0x3799: 0x8c1, 0x379a: 0x8c2, 0x379b: 0x8c3, 0x379c: 0x8c4, 0x379d: 0x8c5, 0x379e: 0x8c6, 0x379f: 0x8c7, + 0x37a0: 0x8c8, 0x37a1: 0x8c9, 0x37a2: 0x8ca, 0x37a3: 0x8cb, 0x37a4: 0x8cc, 0x37a5: 0x8cd, 0x37a6: 0x8ce, 0x37a7: 0x8cf, + 0x37a8: 0x8d0, 0x37a9: 0x8d1, 0x37aa: 0x8d2, 0x37ab: 0x8d3, 0x37ac: 0x8d4, 0x37ad: 0x8d5, 0x37ae: 0x8d6, 0x37af: 0x8d7, + 0x37b0: 0x8d8, 0x37b1: 0x8d9, 0x37b2: 0x8da, 0x37b3: 0x8db, 0x37b4: 0x8dc, 0x37b5: 0x8dd, 0x37b6: 0x8de, 0x37b7: 0x8df, + 0x37b8: 0x8e0, 0x37b9: 0x8e1, 0x37ba: 0x8e2, 0x37bb: 0x8e3, 0x37bc: 0x8e4, 0x37bd: 0x8e5, 0x37be: 0x8e6, 0x37bf: 0x8e7, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x8e8, 0x37c1: 0x8e9, 0x37c2: 0x8ea, 0x37c3: 0x8eb, 0x37c4: 0x8ec, 0x37c5: 0x8ed, 0x37c6: 0x8ee, 0x37c7: 0x8ef, + 0x37c8: 0x8f0, 0x37c9: 0x8f1, 0x37ca: 0x8f2, 0x37cb: 0x8f3, 0x37cc: 0x8f4, 0x37cd: 0x8f5, 0x37ce: 0x8f6, 0x37cf: 0x8f7, + 0x37d0: 0x8f8, 0x37d1: 0x8f9, 0x37d2: 0x8fa, 0x37d3: 0x8fb, 0x37d4: 0x8fc, 0x37d5: 0x8fd, 0x37d6: 0x8fe, 0x37d7: 0x8ff, + 0x37d8: 0x900, 0x37d9: 0x901, 0x37da: 0x902, 0x37db: 0x903, 0x37dc: 0x904, 0x37dd: 0x905, 0x37de: 0x906, 0x37df: 0x907, + 0x37e0: 0x908, 0x37e1: 0x909, 0x37e2: 0x90a, 0x37e3: 0x90b, 0x37e4: 0x90c, 0x37e5: 0x90d, 0x37e6: 0x90e, 0x37e7: 0x90f, + 0x37e8: 0x910, 0x37e9: 0x911, 0x37ea: 0x912, 0x37eb: 0x913, 0x37ec: 0x914, 0x37ed: 0x915, 0x37ee: 0x916, 0x37ef: 0x917, + 0x37f0: 0x918, 0x37f1: 0x919, 0x37f2: 0x91a, 0x37f3: 0x91b, 0x37f4: 0x91c, 0x37f5: 0x91d, 0x37f6: 0x91e, 0x37f7: 0x91f, + 0x37f8: 0x920, 0x37f9: 0x921, 0x37fa: 0x922, 0x37fb: 0x923, 0x37fc: 0x924, 0x37fd: 0x925, 0x37fe: 0x926, 0x37ff: 0x927, + // Block 0xe0, offset 0x3800 + 0x3800: 0x928, 0x3801: 0x929, 0x3802: 0x92a, 0x3803: 0x92b, 0x3804: 0x92c, 0x3805: 0x92d, 0x3806: 0x92e, 0x3807: 0x92f, + 0x3808: 0x930, 0x3809: 0x931, 0x380a: 0x932, 0x380b: 0x933, 0x380c: 0x934, 0x380d: 0x935, 0x380e: 0x936, 0x380f: 0x937, + 0x3810: 0x938, 0x3811: 0x939, 0x3812: 0x93a, 0x3813: 0x93b, 0x3814: 0x93c, 0x3815: 0x93d, 0x3816: 0x93e, 0x3817: 0x93f, + 0x3818: 0x940, 0x3819: 0x941, 0x381a: 0x942, 0x381b: 0x943, 0x381c: 0x944, 0x381d: 0x945, 0x381e: 0x946, 0x381f: 0x947, + 0x3820: 0x948, 0x3821: 0x949, 0x3822: 0x94a, 0x3823: 0x94b, 0x3824: 0x94c, 0x3825: 0x94d, 0x3826: 0x94e, 0x3827: 0x94f, + 0x3828: 0x950, 0x3829: 0x951, 0x382a: 0x952, 0x382b: 0x953, 0x382c: 0x954, 0x382d: 0x955, 0x382e: 0x956, 0x382f: 0x957, + 0x3830: 0x958, 0x3831: 0x959, 0x3832: 0x95a, 0x3833: 0x95b, 0x3834: 0x95c, 0x3835: 0x95d, 0x3836: 0x95e, 0x3837: 0x95f, + 0x3838: 0x960, 0x3839: 0x961, 0x383a: 0x962, 0x383b: 0x963, 0x383c: 0x964, 0x383d: 0x965, 0x383e: 0x966, 0x383f: 0x967, + // Block 0xe1, offset 0x3840 + 0x3840: 0x968, 0x3841: 0x969, 0x3842: 0x96a, 0x3843: 0x96b, 0x3844: 0x96c, 0x3845: 0x96d, 0x3846: 0x96e, 0x3847: 0x96f, + 0x3848: 0x970, 0x3849: 0x971, 0x384a: 0x972, 0x384b: 0x973, 0x384c: 0x974, 0x384d: 0x975, 0x384e: 0x976, 0x384f: 0x977, + 0x3850: 0x978, 0x3851: 0x979, 0x3852: 0x97a, 0x3853: 0x97b, 0x3854: 0x97c, 0x3855: 0x97d, 0x3856: 0x97e, 0x3857: 0x97f, + 0x3858: 0x980, 0x3859: 0x981, 0x385a: 0x982, 0x385b: 0x983, 0x385c: 0x984, 0x385d: 0x985, 0x385e: 0x986, 0x385f: 0x987, + 0x3860: 0x988, 0x3861: 0x989, 0x3862: 0x98a, 0x3863: 0x98b, 0x3864: 0x98c, 0x3865: 0x98d, 0x3866: 0x98e, 0x3867: 0x98f, + 0x3868: 0x990, 0x3869: 0x991, 0x386a: 0x992, 0x386b: 0x993, 0x386c: 0x994, 0x386d: 0x995, 0x386e: 0x996, 0x386f: 0x997, + 0x3870: 0x998, 0x3871: 0x999, 0x3872: 0x99a, 0x3873: 0x99b, 0x3874: 0x99c, 0x3875: 0x99d, 0x3876: 0x99e, 0x3877: 0x99f, + 0x3878: 0x9a0, 0x3879: 0x9a1, 0x387a: 0x9a2, 0x387b: 0x9a3, 0x387c: 0x9a4, 0x387d: 0x9a5, 0x387e: 0x9a6, 0x387f: 0x9a7, + // Block 0xe2, offset 0x3880 + 0x3880: 0x9a8, 0x3881: 0x9a9, 0x3882: 0x9aa, 0x3883: 0x9ab, 0x3884: 0x9ac, 0x3885: 0x9ad, 0x3886: 0x9ae, 0x3887: 0x9af, + 0x3888: 0x9b0, 0x3889: 0x9b1, 0x388a: 0x9b2, 0x388b: 0x9b3, 0x388c: 0x9b4, 0x388d: 0x9b5, 0x388e: 0x9b6, 0x388f: 0x9b7, + 0x3890: 0x9b8, 0x3891: 0x9b9, 0x3892: 0x9ba, 0x3893: 0x9bb, 0x3894: 0x9bc, 0x3895: 0x9bd, 0x3896: 0x9be, 0x3897: 0x9bf, + 0x3898: 0x9c0, 0x3899: 0x9c1, 0x389a: 0x9c2, 0x389b: 0x9c3, 0x389c: 0x9c4, 0x389d: 0x9c5, 0x389e: 0x9c6, 0x389f: 0x9c7, + 0x38a0: 0x9c8, 0x38a1: 0x9c9, 0x38a2: 0x9ca, 0x38a3: 0x9cb, 0x38a4: 0x9cc, 0x38a5: 0x9cd, 0x38a6: 0x9ce, 0x38a7: 0x9cf, + 0x38a8: 0x9d0, 0x38a9: 0x9d1, 0x38aa: 0x9d2, 0x38ab: 0x9d3, 0x38ac: 0x9d4, 0x38ad: 0x9d5, 0x38ae: 0x9d6, 0x38af: 0x9d7, + 0x38b0: 0x9d8, 0x38b1: 0x9d9, 0x38b2: 0x9da, 0x38b3: 0x9db, 0x38b4: 0x9dc, 0x38b5: 0x9dd, 0x38b6: 0x9de, 0x38b7: 0x9df, + 0x38b8: 0x9e0, 0x38b9: 0x9e1, 0x38ba: 0x9e2, 0x38bb: 0x9e3, 0x38bc: 0x9e4, 0x38bd: 0x9e5, 0x38be: 0x9e6, 0x38bf: 0x9e7, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x9e8, 0x38c1: 0x9e9, 0x38c2: 0x9ea, 0x38c3: 0x9eb, 0x38c4: 0x9ec, 0x38c5: 0x9ed, 0x38c6: 0x9ee, 0x38c7: 0x9ef, + 0x38c8: 0x9f0, 0x38c9: 0x9f1, 0x38ca: 0x9f2, 0x38cb: 0x9f3, 0x38cc: 0x9f4, 0x38cd: 0x9f5, 0x38ce: 0x9f6, 0x38cf: 0x9f7, + 0x38d0: 0x9f8, 0x38d1: 0x9f9, 0x38d2: 0x9fa, 0x38d3: 0x9fb, 0x38d4: 0x9fc, 0x38d5: 0x9fd, 0x38d6: 0x9fe, 0x38d7: 0x9ff, + 0x38d8: 0xa00, 0x38d9: 0xa01, 0x38da: 0xa02, 0x38db: 0xa03, 0x38dc: 0xa04, 0x38dd: 0xa05, 0x38de: 0xa06, 0x38df: 0xa07, + 0x38e0: 0xa08, 0x38e1: 0xa09, 0x38e2: 0xa0a, 0x38e3: 0xa0b, 0x38e4: 0xa0c, 0x38e5: 0xa0d, 0x38e6: 0xa0e, 0x38e7: 0xa0f, + 0x38e8: 0xa10, 0x38e9: 0xa11, 0x38ea: 0xa12, 0x38eb: 0xa13, 0x38ec: 0xa14, 0x38ed: 0xa15, 0x38ee: 0xa16, 0x38ef: 0xa17, + 0x38f0: 0xa18, 0x38f1: 0xa19, 0x38f2: 0xa1a, 0x38f3: 0xa1b, 0x38f4: 0xa1c, 0x38f5: 0xa1d, 0x38f6: 0xa1e, 0x38f7: 0xa1f, + 0x38f8: 0xa20, 0x38f9: 0xa21, 0x38fa: 0xa22, 0x38fb: 0xa23, 0x38fc: 0xa24, 0x38fd: 0xa25, 0x38fe: 0xa26, 0x38ff: 0xa27, + // Block 0xe4, offset 0x3900 + 0x3900: 0xa28, 0x3901: 0xa29, 0x3902: 0xa2a, 0x3903: 0xa2b, 0x3904: 0xa2c, 0x3905: 0xa2d, 0x3906: 0xa2e, 0x3907: 0xa2f, + 0x3908: 0xa30, 0x3909: 0xa31, 0x390a: 0xa32, 0x390b: 0xa33, 0x390c: 0xa34, 0x390d: 0xa35, 0x390e: 0xa36, 0x390f: 0xa37, + 0x3910: 0xa38, 0x3911: 0xa39, 0x3912: 0xa3a, 0x3913: 0xa3b, 0x3914: 0xa3c, 0x3915: 0xa3d, 0x3916: 0xa3e, 0x3917: 0xa3f, + 0x3918: 0xa40, 0x3919: 0xa41, 0x391a: 0xa42, 0x391b: 0xa43, 0x391c: 0xa44, 0x391d: 0xa45, 0x391e: 0xa46, 0x391f: 0xa47, + 0x3920: 0xa48, 0x3921: 0xa49, 0x3922: 0xa4a, 0x3923: 0xa4b, 0x3924: 0xa4c, 0x3925: 0xa4d, 0x3926: 0xa4e, 0x3927: 0xa4f, + 0x3928: 0xa50, 0x3929: 0xa51, 0x392a: 0xa52, 0x392b: 0xa53, 0x392c: 0xa54, 0x392d: 0xa55, 0x392e: 0xa56, 0x392f: 0xa57, + 0x3930: 0xa58, 0x3931: 0xa59, 0x3932: 0xa5a, 0x3933: 0xa5b, 0x3934: 0xa5c, 0x3935: 0xa5d, 0x3936: 0xa5e, 0x3937: 0xa5f, + 0x3938: 0xa60, 0x3939: 0xa61, 0x393a: 0xa62, 0x393b: 0xa63, 0x393c: 0xa64, 0x393d: 0xa65, 0x393e: 0xa66, 0x393f: 0xa67, + // Block 0xe5, offset 0x3940 + 0x3940: 0xa68, 0x3941: 0xa69, 0x3942: 0xa6a, 0x3943: 0xa6b, 0x3944: 0xa6c, 0x3945: 0xa6d, 0x3946: 0xa6e, 0x3947: 0xa6f, + 0x3948: 0xa70, 0x3949: 0xa71, 0x394a: 0xa72, 0x394b: 0xa73, 0x394c: 0xa74, 0x394d: 0xa75, 0x394e: 0xa76, 0x394f: 0xa77, + 0x3950: 0xa78, 0x3951: 0xa79, 0x3952: 0xa7a, 0x3953: 0xa7b, 0x3954: 0xa7c, 0x3955: 0xa7d, 0x3956: 0xa7e, 0x3957: 0xa7f, + 0x3958: 0xa80, 0x3959: 0xa81, 0x395a: 0xa82, 0x395b: 0xa83, 0x395e: 0xa84, + 0x3961: 0xa85, 0x3962: 0xa86, + 0x3968: 0xa87, 0x396a: 0xa88, + 0x397a: 0xa89, 0x397b: 0xa8a, 0x397e: 0xa8b, + // Block 0xe6, offset 0x3980 + 0x3981: 0xa8c, 0x3982: 0xa8d, 0x3983: 0xa8e, 0x3984: 0xa8f, + 0x3988: 0xa90, 0x398b: 0xa91, 0x398c: 0xa92, 0x398d: 0xa93, 0x398f: 0xa94, + 0x3990: 0xa95, 0x3992: 0xa96, 0x3993: 0xa97, 0x3994: 0xa98, 0x3997: 0xa99, + 0x3998: 0xa9a, 0x399a: 0xa9b, 0x399b: 0xa9c, + // Block 0xe7, offset 0x39c0 + 0x39e0: 0xa9d, 0x39e1: 0xa9e, 0x39e2: 0xa9f, 0x39e3: 0xaa0, 0x39e4: 0xaa1, 0x39e5: 0xaa2, 0x39e6: 0xaa3, 0x39e7: 0xaa4, + 0x39e8: 0xaa5, + // Block 0xe8, offset 0x3a00 + 0x3a10: 0x09, 0x3a11: 0x0a, 0x3a12: 0x0b, 0x3a13: 0x0c, 0x3a16: 0x0d, + 0x3a1b: 0x0e, 0x3a1d: 0x0f, 0x3a1e: 0x10, 0x3a1f: 0xd8, + 0x3a20: 0xd9, 0x3a21: 0xda, 0x3a22: 0xdb, 0x3a23: 0xdc, 0x3a24: 0xdd, 0x3a25: 0xde, 0x3a26: 0xdf, 0x3a27: 0xe0, + 0x3a28: 0xe1, 0x3a29: 0xe2, 0x3a2a: 0xe3, 0x3a2b: 0xe4, 0x3a2f: 0xe5, + // Block 0xe9, offset 0x3a40 + 0x3a42: 0x01, 0x3a43: 0x618, 0x3a44: 0x619, 0x3a45: 0x61a, 0x3a46: 0x05, 0x3a47: 0x61b, + 0x3a48: 0x61c, 0x3a49: 0x08, 0x3a4a: 0x09, 0x3a4b: 0x0a, 0x3a4c: 0x0b, 0x3a4d: 0x0c, 0x3a4e: 0x0d, 0x3a4f: 0x0e, + 0x3a50: 0x0f, 0x3a51: 0x10, 0x3a52: 0x11, 0x3a53: 0x12, 0x3a54: 0x13, 0x3a55: 0x14, 0x3a56: 0x15, 0x3a57: 0x16, + 0x3a58: 0x17, 0x3a59: 0x18, 0x3a5a: 0x19, 0x3a5b: 0x1a, 0x3a5c: 0x1b, 0x3a5d: 0x1c, 0x3a5e: 0x1d, 0x3a5f: 0x1e, + 0x3a60: 0x01, 0x3a61: 0xce, 0x3a62: 0xcf, 0x3a63: 0xd0, 0x3a64: 0xd1, 0x3a65: 0xd2, 0x3a66: 0xd3, 0x3a67: 0xd4, + 0x3a68: 0xd5, 0x3a69: 0xd6, 0x3a6a: 0x06, 0x3a6d: 0x07, 0x3a6f: 0xd7, + 0x3a70: 0xe6, 0x3a73: 0x15, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x7d, 0x3a81: 0x7e, 0x3a82: 0x7f, 0x3a83: 0x80, 0x3a84: 0x81, 0x3a85: 0x82, 0x3a86: 0x83, 0x3a87: 0x84, + 0x3a88: 0x85, 0x3a89: 0x86, 0x3a8a: 0x87, 0x3a8b: 0x88, 0x3a8c: 0x89, 0x3a8d: 0x8a, 0x3a8e: 0x8b, 0x3a8f: 0x8c, + 0x3a90: 0x8d, 0x3a91: 0x8e, 0x3a92: 0x8f, 0x3a93: 0x90, 0x3a94: 0x91, 0x3a95: 0x92, 0x3a96: 0x93, 0x3a97: 0x94, + 0x3a98: 0x95, 0x3a99: 0x96, 0x3a9a: 0x97, 0x3a9b: 0x98, 0x3a9c: 0x99, 0x3a9d: 0x9a, 0x3a9e: 0x9b, 0x3a9f: 0x9c, + 0x3aa0: 0x9d, 0x3aa1: 0x9e, 0x3aa2: 0x9f, 0x3aa3: 0xa0, 0x3aa4: 0xa1, 0x3aa5: 0xa2, 0x3aa6: 0xa3, 0x3aa7: 0xa4, + 0x3aa8: 0xa5, 0x3aa9: 0xa6, 0x3aaa: 0xa7, 0x3aab: 0xa8, 0x3aac: 0xa9, 0x3aad: 0xaa, + 0x3ab0: 0xab, 0x3ab1: 0xac, 0x3ab2: 0xad, 0x3ab3: 0xae, 0x3ab4: 0xaf, 0x3ab5: 0xb0, 0x3ab6: 0xb1, 0x3ab7: 0xb2, + 0x3ab8: 0xb3, 0x3aba: 0xaa6, 0x3abb: 0xaa7, 0x3abc: 0xaa8, 0x3abd: 0xaa9, 0x3abe: 0xaaa, 0x3abf: 0xaab, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0xaac, 0x3ac1: 0xbb, 0x3ac2: 0xbc, 0x3ac3: 0xbd, 0x3ac4: 0xbe, 0x3ac5: 0xbf, 0x3ac6: 0xaad, 0x3ac7: 0xc1, + 0x3ac8: 0xaae, 0x3ac9: 0xaaf, 0x3aca: 0xab0, 0x3acb: 0xab1, 0x3acc: 0xc6, 0x3acd: 0xab2, 0x3ace: 0xc8, 0x3acf: 0xab3, + 0x3ad0: 0xab4, 0x3ad1: 0xab5, 0x3ad2: 0xab6, 0x3ad3: 0xab7, 0x3ad4: 0xab8, 0x3ad5: 0xab9, 0x3ad6: 0xaba, 0x3ad7: 0xabb, + 0x3ad8: 0xabc, 0x3ad9: 0xabd, 0x3ada: 0xabe, 0x3adb: 0xabf, 0x3adc: 0xac0, 0x3add: 0xac1, 0x3ade: 0xac2, 0x3adf: 0xac3, + 0x3ae0: 0xac4, 0x3ae1: 0xac5, 0x3ae2: 0xac6, 0x3ae3: 0xac7, 0x3ae4: 0xac8, 0x3ae5: 0xac9, 0x3ae6: 0xaca, 0x3ae7: 0xacb, + 0x3ae8: 0xacc, 0x3ae9: 0xacd, 0x3aea: 0xace, 0x3aeb: 0xacf, 0x3aec: 0xad0, 0x3aed: 0xad1, 0x3aee: 0xad2, 0x3aef: 0xad3, + 0x3af0: 0xad4, 0x3af1: 0xad5, 0x3af2: 0xad6, 0x3af3: 0xad7, 0x3af4: 0xad8, 0x3af5: 0xad9, 0x3af6: 0xada, 0x3af7: 0xadb, + 0x3af8: 0xadc, 0x3af9: 0xadd, 0x3afa: 0xade, 0x3afb: 0xadf, 0x3afc: 0xae0, 0x3afd: 0xae1, 0x3afe: 0xae2, 0x3aff: 0xae3, + // Block 0xec, offset 0x3b00 + 0x3b00: 0xae4, 0x3b01: 0xae5, 0x3b02: 0xae6, 0x3b03: 0xae7, 0x3b04: 0xae8, 0x3b05: 0xae9, 0x3b06: 0xaea, 0x3b07: 0xaeb, + 0x3b08: 0xaec, 0x3b09: 0xaed, 0x3b0a: 0xaee, 0x3b0b: 0xaef, 0x3b0c: 0xaf0, 0x3b0d: 0xaf1, 0x3b0e: 0xaf2, 0x3b0f: 0xaf3, + 0x3b10: 0xaf4, 0x3b11: 0xaf5, 0x3b12: 0xaf6, 0x3b13: 0xaf7, 0x3b14: 0xaf8, 0x3b15: 0xaf9, 0x3b16: 0xafa, 0x3b17: 0xafb, + 0x3b18: 0xafc, 0x3b19: 0xafd, 0x3b1a: 0xafe, 0x3b1b: 0xaff, 0x3b1c: 0xb00, 0x3b1d: 0xb01, 0x3b1e: 0xb02, 0x3b1f: 0xb03, + 0x3b20: 0xb04, 0x3b21: 0xb05, 0x3b22: 0xb06, 0x3b23: 0xb07, 0x3b24: 0xb08, 0x3b25: 0xb09, 0x3b26: 0xb0a, 0x3b27: 0xb0b, + 0x3b28: 0xb0c, 0x3b29: 0xb0d, 0x3b2a: 0xb0e, 0x3b2b: 0xb0f, 0x3b2c: 0xb10, 0x3b2d: 0xb11, 0x3b2e: 0xb12, 0x3b2f: 0xb13, + 0x3b30: 0xb14, 0x3b31: 0xb15, 0x3b32: 0xb16, 0x3b33: 0xb17, 0x3b34: 0xb18, 0x3b35: 0xb19, 0x3b36: 0xb1a, 0x3b37: 0xca, + 0x3b38: 0xb1b, 0x3b39: 0xb1c, 0x3b3a: 0xb1d, 0x3b3b: 0xb1e, 0x3b3c: 0xb1f, 0x3b3d: 0xb20, 0x3b3e: 0xb21, 0x3b3f: 0xb22, + // Block 0xed, offset 0x3b40 + 0x3b40: 0xb23, 0x3b41: 0xb24, 0x3b42: 0xb25, 0x3b43: 0xb26, 0x3b44: 0xb27, 0x3b45: 0xb28, 0x3b46: 0xb29, 0x3b47: 0xb2a, + 0x3b48: 0xb2b, 0x3b49: 0xb2c, 0x3b4a: 0xb2d, 0x3b4b: 0xb2e, 0x3b4c: 0xb2f, 0x3b4d: 0xb30, 0x3b4e: 0xb31, 0x3b4f: 0xb32, + 0x3b50: 0xb33, 0x3b51: 0xb34, 0x3b52: 0xb35, 0x3b53: 0xb36, 0x3b54: 0xb37, 0x3b55: 0xb38, 0x3b56: 0xb39, 0x3b57: 0xb3a, + 0x3b58: 0xb3b, 0x3b59: 0xb3c, 0x3b5a: 0xb3d, 0x3b5b: 0xb3e, 0x3b5c: 0xb3f, 0x3b5d: 0xb40, 0x3b5e: 0xb41, 0x3b5f: 0xb42, + 0x3b60: 0xb43, 0x3b61: 0xb44, 0x3b62: 0xb45, 0x3b63: 0xb46, 0x3b64: 0xb47, 0x3b65: 0xb48, 0x3b66: 0xb49, 0x3b67: 0xb4a, + 0x3b68: 0xb4b, 0x3b69: 0xb4c, 0x3b6a: 0xb4d, 0x3b6b: 0xb4e, 0x3b6c: 0xb4f, 0x3b6d: 0xb50, 0x3b6e: 0xb51, 0x3b6f: 0xb52, + 0x3b70: 0xb53, 0x3b71: 0xb54, 0x3b72: 0xb55, 0x3b73: 0xb56, 0x3b74: 0xb57, 0x3b75: 0xb58, 0x3b76: 0xb59, 0x3b77: 0xb5a, + 0x3b78: 0xb5b, 0x3b79: 0xb5c, 0x3b7a: 0xb5d, 0x3b7b: 0xb5e, 0x3b7c: 0xb5f, 0x3b7d: 0xb60, 0x3b7e: 0xb61, 0x3b7f: 0xb62, + // Block 0xee, offset 0x3b80 + 0x3b80: 0xb63, 0x3b81: 0xb64, 0x3b82: 0xb65, 0x3b83: 0xb66, 0x3b84: 0xb67, 0x3b85: 0xb68, 0x3b86: 0xb69, 0x3b87: 0xb6a, + 0x3b88: 0xb6b, 0x3b89: 0xb6c, 0x3b8a: 0xb6d, 0x3b8b: 0xb6e, 0x3b8c: 0xb6f, 0x3b8d: 0xb70, 0x3b8e: 0xb71, 0x3b8f: 0xb72, + 0x3b90: 0xb73, 0x3b91: 0xb74, 0x3b92: 0xb75, 0x3b93: 0xb76, 0x3b94: 0xb77, 0x3b95: 0xb78, 0x3b96: 0xb79, 0x3b97: 0xb7a, + 0x3b98: 0xb7b, 0x3b99: 0xb7c, 0x3b9a: 0xb7d, 0x3b9b: 0xb7e, 0x3b9c: 0xb7f, 0x3b9d: 0xb80, 0x3b9e: 0xb81, 0x3b9f: 0xb82, + 0x3ba0: 0xb83, 0x3ba1: 0xb84, 0x3ba2: 0xb85, 0x3ba3: 0xb86, 0x3ba4: 0xb87, 0x3ba5: 0xb88, 0x3ba6: 0xb89, 0x3ba7: 0xb8a, + 0x3ba8: 0xb8b, 0x3ba9: 0xb8c, 0x3baa: 0xb8d, 0x3bab: 0xb8e, 0x3bac: 0xb8f, 0x3bad: 0xb90, 0x3bae: 0xb91, 0x3baf: 0xb92, + 0x3bb0: 0xb93, 0x3bb1: 0xb94, 0x3bb2: 0xb95, 0x3bb3: 0xb96, 0x3bb4: 0xb97, 0x3bb5: 0xb98, 0x3bb6: 0xb99, 0x3bb7: 0xb9a, + 0x3bb8: 0xb9b, 0x3bb9: 0xb9c, 0x3bba: 0xb9d, 0x3bbb: 0xb9e, 0x3bbc: 0xb9f, 0x3bbd: 0xba0, 0x3bbe: 0xba1, 0x3bbf: 0xba2, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0xba3, 0x3bc1: 0xba4, 0x3bc2: 0xba5, 0x3bc3: 0xba6, 0x3bc4: 0xba7, 0x3bc5: 0xba8, 0x3bc6: 0xba9, 0x3bc7: 0xbaa, + 0x3bc8: 0xbab, 0x3bc9: 0xbac, 0x3bca: 0xbad, 0x3bcb: 0xbae, 0x3bcc: 0xbaf, 0x3bcd: 0xbb0, 0x3bce: 0xbb1, 0x3bcf: 0xbb2, + 0x3bd0: 0xbb3, 0x3bd1: 0xbb4, 0x3bd2: 0xbb5, 0x3bd3: 0xbb6, 0x3bd4: 0xbb7, 0x3bd5: 0xbb8, 0x3bd6: 0xbb9, 0x3bd7: 0xbba, + 0x3bd8: 0xbbb, 0x3bd9: 0xbbc, 0x3bda: 0xbbd, 0x3bdb: 0xbbe, 0x3bdc: 0xbbf, 0x3bdd: 0xbc0, 0x3bde: 0xbc1, 0x3bdf: 0xbc2, + 0x3be0: 0xbc3, 0x3be1: 0xbc4, 0x3be2: 0xbc5, 0x3be3: 0xbc6, 0x3be4: 0xbc7, 0x3be5: 0xbc8, 0x3be6: 0xbc9, 0x3be7: 0xbca, + 0x3be8: 0xbcb, 0x3be9: 0xbcc, 0x3bea: 0xbcd, 0x3beb: 0xbce, 0x3bec: 0xbcf, 0x3bed: 0xbd0, 0x3bee: 0xbd1, 0x3bef: 0xbd2, + 0x3bf0: 0xbd3, 0x3bf1: 0xbd4, 0x3bf2: 0xbd5, 0x3bf3: 0xbd6, 0x3bf4: 0xbd7, 0x3bf5: 0xbd8, 0x3bf6: 0xbd9, 0x3bf7: 0xbda, + 0x3bf8: 0xbdb, 0x3bf9: 0xbdc, 0x3bfa: 0xbdd, 0x3bfb: 0xbde, 0x3bfc: 0xbdf, 0x3bfd: 0xbe0, 0x3bfe: 0xbe1, 0x3bff: 0xbe2, + // Block 0xf0, offset 0x3c00 + 0x3c00: 0xbe3, 0x3c01: 0xbe4, 0x3c02: 0xbe5, 0x3c03: 0xbe6, 0x3c04: 0xbe7, 0x3c05: 0xbe8, 0x3c06: 0xbe9, 0x3c07: 0xbea, + 0x3c08: 0xbeb, 0x3c09: 0xbec, 0x3c0a: 0xbed, 0x3c0b: 0xbee, 0x3c0c: 0xbef, 0x3c0d: 0xbf0, 0x3c0e: 0xbf1, 0x3c0f: 0xbf2, + 0x3c10: 0xbf3, 0x3c11: 0xbf4, 0x3c12: 0xbf5, 0x3c13: 0xbf6, 0x3c14: 0xbf7, 0x3c15: 0xbf8, 0x3c16: 0xbf9, 0x3c17: 0xbfa, + 0x3c18: 0xbfb, 0x3c19: 0xbfc, 0x3c1a: 0xbfd, 0x3c1b: 0xbfe, 0x3c1c: 0xbff, 0x3c1d: 0xc00, 0x3c1e: 0xc01, 0x3c1f: 0xc02, + 0x3c20: 0xc03, 0x3c21: 0xc04, 0x3c22: 0xc05, 0x3c23: 0xc06, 0x3c24: 0xc07, 0x3c25: 0xc08, 0x3c26: 0xc09, 0x3c27: 0xc0a, + 0x3c28: 0xc0b, 0x3c29: 0xc0c, 0x3c2a: 0xc0d, 0x3c2b: 0xc0e, 0x3c2c: 0xc0f, 0x3c2d: 0xc10, 0x3c2e: 0xc11, 0x3c2f: 0xc12, + 0x3c30: 0xc13, 0x3c31: 0xc14, 0x3c32: 0xc15, 0x3c33: 0xc16, 0x3c34: 0xc17, 0x3c35: 0xc18, 0x3c36: 0xc19, 0x3c37: 0xc1a, + 0x3c38: 0xc1b, 0x3c39: 0xc1c, 0x3c3a: 0xc1d, 0x3c3b: 0xc1e, 0x3c3c: 0xc1f, 0x3c3d: 0xc20, 0x3c3e: 0xc21, 0x3c3f: 0xc22, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0xc23, 0x3c41: 0xc24, 0x3c42: 0xc25, 0x3c43: 0xc26, 0x3c44: 0xc27, 0x3c45: 0xc28, 0x3c46: 0xc29, 0x3c47: 0xc2a, + 0x3c48: 0xc2b, 0x3c49: 0xc2c, 0x3c4a: 0xc2d, 0x3c4b: 0xc2e, 0x3c4c: 0xc2f, 0x3c4d: 0xc30, 0x3c4e: 0xc31, 0x3c4f: 0xc32, + 0x3c50: 0xc33, 0x3c51: 0xc34, 0x3c52: 0xc35, 0x3c53: 0xc36, 0x3c54: 0xc37, 0x3c55: 0xc38, 0x3c56: 0xc39, 0x3c57: 0xc3a, + 0x3c58: 0xc3b, 0x3c59: 0xc3c, 0x3c5a: 0xc3d, 0x3c5b: 0xc3e, 0x3c5c: 0xc3f, 0x3c5d: 0xc40, 0x3c5e: 0xc41, 0x3c5f: 0xc42, + 0x3c60: 0xc43, 0x3c61: 0xc44, 0x3c62: 0xc45, 0x3c63: 0xc46, 0x3c64: 0xc47, 0x3c65: 0xc48, 0x3c66: 0xc49, 0x3c67: 0xc4a, + 0x3c68: 0xc4b, 0x3c69: 0xc4c, 0x3c6a: 0xc4d, 0x3c6b: 0xc4e, 0x3c6c: 0xc4f, 0x3c6d: 0xc50, 0x3c6e: 0xc51, 0x3c6f: 0xc52, + 0x3c70: 0xc53, 0x3c71: 0xc54, 0x3c72: 0xc55, 0x3c73: 0xc56, 0x3c74: 0xc57, 0x3c75: 0xc58, 0x3c76: 0xc59, 0x3c77: 0xc5a, + 0x3c78: 0xc5b, 0x3c79: 0xc5c, 0x3c7a: 0xc5d, 0x3c7b: 0xc5e, 0x3c7c: 0xc5f, 0x3c7d: 0xc60, 0x3c7e: 0xc61, 0x3c7f: 0xc62, + // Block 0xf2, offset 0x3c80 + 0x3ca4: 0xc63, 0x3ca5: 0xc64, 0x3ca6: 0xc65, 0x3ca7: 0xc66, + 0x3ca8: 0xc67, 0x3ca9: 0xc68, 0x3caa: 0xc69, 0x3cab: 0xc6a, 0x3cac: 0x103, 0x3cad: 0x104, 0x3cae: 0x105, 0x3caf: 0x106, + 0x3cb0: 0x107, 0x3cb1: 0x108, 0x3cb2: 0x109, 0x3cb3: 0x10a, 0x3cb4: 0x10b, 0x3cb5: 0x10c, 0x3cb6: 0x10d, 0x3cb7: 0x10e, + 0x3cb8: 0x10f, 0x3cb9: 0x110, 0x3cba: 0x111, 0x3cbb: 0x112, 0x3cbc: 0x113, 0x3cbd: 0x114, 0x3cbe: 0x115, 0x3cbf: 0x116, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0x18b, 0x3cc1: 0x18c, 0x3cc2: 0x18d, 0x3cc3: 0x18e, 0x3cc4: 0x18f, 0x3cc5: 0x190, 0x3cc6: 0x191, 0x3cc7: 0x192, + 0x3cc8: 0xc6b, 0x3cc9: 0xc6c, 0x3ccc: 0x195, 0x3ccd: 0x196, 0x3cce: 0x197, 0x3ccf: 0x198, + 0x3cd0: 0x199, 0x3cd1: 0x19a, 0x3cd2: 0x19b, 0x3cd3: 0x19c, 0x3cd4: 0x19d, 0x3cd5: 0x19e, 0x3cd7: 0x19f, + 0x3cd8: 0x1a0, 0x3cd9: 0x1a1, 0x3cda: 0x1a2, 0x3cdb: 0x1a3, 0x3cdc: 0x1a4, 0x3cdd: 0x1a5, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0xc6d, 0x3d01: 0xc6e, 0x3d02: 0xc6f, 0x3d03: 0xc70, 0x3d04: 0xc71, 0x3d05: 0xc72, 0x3d06: 0xc73, 0x3d07: 0xc74, + 0x3d08: 0xc75, 0x3d09: 0xc76, 0x3d0a: 0xc77, 0x3d0b: 0xc78, 0x3d0c: 0xc79, 0x3d0d: 0xc7a, 0x3d0e: 0xc7b, 0x3d0f: 0xc7c, + 0x3d10: 0xc7d, 0x3d11: 0xc7e, 0x3d12: 0xc7f, 0x3d13: 0xc80, 0x3d14: 0xc81, 0x3d15: 0xc82, 0x3d16: 0xc83, 0x3d17: 0xc84, + 0x3d18: 0xc85, 0x3d19: 0xc86, 0x3d1a: 0xc87, 0x3d1b: 0xc88, 0x3d1c: 0xc89, 0x3d1d: 0xc8a, 0x3d1e: 0xc8b, 0x3d1f: 0xc8c, + 0x3d20: 0xc8d, 0x3d21: 0xc8e, 0x3d22: 0xc8f, 0x3d23: 0xc90, 0x3d24: 0xc91, 0x3d25: 0xc92, 0x3d26: 0xc93, 0x3d27: 0xc94, + 0x3d28: 0xc95, 0x3d29: 0xc96, 0x3d2a: 0xc97, 0x3d2b: 0xc98, 0x3d2c: 0xc99, 0x3d2d: 0xc9a, 0x3d2e: 0xc9b, 0x3d2f: 0xc9c, + 0x3d30: 0xc9d, 0x3d31: 0xc9e, 0x3d32: 0xc9f, 0x3d33: 0xca0, 0x3d34: 0xca1, 0x3d35: 0xca2, 0x3d36: 0xca3, 0x3d37: 0xca4, + 0x3d38: 0xca5, 0x3d39: 0xca6, 0x3d3a: 0xca7, 0x3d3b: 0xca8, 0x3d3c: 0xca9, 0x3d3d: 0xcaa, 0x3d3e: 0xcab, 0x3d3f: 0xcac, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0xcad, 0x3d41: 0xcae, 0x3d42: 0xcaf, 0x3d43: 0xcb0, 0x3d44: 0xcb1, 0x3d45: 0xcb2, 0x3d46: 0xcb3, 0x3d47: 0xcb4, + 0x3d48: 0xcb5, 0x3d49: 0xcb6, 0x3d4a: 0xcb7, 0x3d4b: 0xcb8, 0x3d4c: 0xcb9, 0x3d4d: 0xcba, 0x3d4e: 0xcbb, 0x3d4f: 0xcbc, + 0x3d50: 0xcbd, 0x3d51: 0xcbe, 0x3d52: 0xcbf, 0x3d53: 0xcc0, 0x3d54: 0xcc1, 0x3d55: 0xcc2, 0x3d56: 0xcc3, 0x3d57: 0xcc4, + 0x3d58: 0xcc5, 0x3d59: 0xcc6, 0x3d5a: 0xcc7, 0x3d5b: 0xcc8, 0x3d5c: 0xcc9, 0x3d5d: 0xcca, 0x3d5e: 0xccb, 0x3d5f: 0xccc, + 0x3d60: 0xccd, 0x3d61: 0xcce, 0x3d62: 0xccf, 0x3d63: 0xcd0, 0x3d64: 0xcd1, 0x3d65: 0xcd2, 0x3d66: 0xcd3, 0x3d67: 0xcd4, + 0x3d68: 0xcd5, 0x3d69: 0xcd6, 0x3d6a: 0xcd7, 0x3d6b: 0xcd8, 0x3d6c: 0xcd9, 0x3d6d: 0xcda, 0x3d6e: 0xcdb, 0x3d6f: 0xcdc, + 0x3d70: 0xcdd, 0x3d71: 0xcde, 0x3d72: 0xcdf, 0x3d73: 0xce0, 0x3d74: 0xce1, 0x3d75: 0xce2, 0x3d76: 0xce3, 0x3d77: 0xce4, + 0x3d78: 0xce5, 0x3d79: 0xce6, 0x3d7a: 0xce7, 0x3d7b: 0xce8, 0x3d7c: 0xce9, 0x3d7d: 0xcea, 0x3d7e: 0xceb, 0x3d7f: 0xcec, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0xced, 0x3d81: 0xcee, 0x3d82: 0xcef, 0x3d83: 0xcf0, 0x3d84: 0xcf1, 0x3d85: 0xcf2, 0x3d86: 0xcf3, 0x3d87: 0xcf4, + 0x3d88: 0xcf5, 0x3d89: 0xcf6, 0x3d8a: 0xcf7, 0x3d8b: 0xcf8, 0x3d8c: 0xcf9, 0x3d8d: 0xcfa, 0x3d8e: 0xcfb, 0x3d8f: 0xcfc, + 0x3d90: 0xcfd, 0x3d91: 0xcfe, 0x3d92: 0xcff, 0x3d93: 0xd00, 0x3d94: 0xd01, 0x3d95: 0xd02, 0x3d96: 0xd03, 0x3d97: 0xd04, + 0x3d98: 0xd05, 0x3d99: 0xd06, 0x3d9a: 0xd07, 0x3d9b: 0xd08, 0x3d9c: 0xd09, 0x3d9d: 0xd0a, 0x3d9e: 0xd0b, 0x3d9f: 0xd0c, + 0x3da0: 0xd0d, 0x3da1: 0xd0e, 0x3da2: 0xd0f, 0x3da3: 0xd10, 0x3da4: 0xd11, 0x3da5: 0xd12, 0x3da6: 0xd13, 0x3da7: 0xd14, + 0x3da8: 0xd15, 0x3da9: 0xd16, 0x3daa: 0xd17, 0x3dab: 0xd18, 0x3dac: 0xd19, 0x3dad: 0xd1a, 0x3dae: 0xd1b, 0x3daf: 0xd1c, + 0x3db0: 0xd1d, 0x3db1: 0xd1e, 0x3db2: 0xd1f, 0x3db3: 0xd20, 0x3db4: 0xd21, 0x3db5: 0xd22, 0x3db6: 0xd23, 0x3db7: 0xd24, + 0x3db8: 0xd25, 0x3db9: 0xd26, 0x3dba: 0xd27, 0x3dbb: 0xd28, 0x3dbc: 0xd29, 0x3dbd: 0xd2a, 0x3dbe: 0xd2b, 0x3dbf: 0xd2c, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0xd2d, 0x3dc1: 0xd2e, 0x3dc2: 0xd2f, 0x3dc3: 0xd30, 0x3dc4: 0xd31, 0x3dc5: 0xd32, 0x3dc6: 0xd33, 0x3dc7: 0xd34, + 0x3dc8: 0xd35, 0x3dc9: 0xd36, 0x3dca: 0xd37, 0x3dcb: 0xd38, 0x3dcc: 0xd39, 0x3dcd: 0xd3a, 0x3dce: 0xd3b, 0x3dcf: 0xd3c, + 0x3dd0: 0xd3d, 0x3dd1: 0xd3e, 0x3dd2: 0xd3f, 0x3dd3: 0xd40, 0x3dd4: 0xd41, 0x3dd5: 0xd42, 0x3dd6: 0xd43, 0x3dd7: 0xd44, + 0x3dd8: 0xd45, 0x3dd9: 0xd46, 0x3dda: 0xd47, 0x3ddb: 0xd48, 0x3ddc: 0xd49, 0x3ddd: 0xd4a, 0x3dde: 0xd4b, 0x3ddf: 0xd4c, + 0x3de0: 0xd4d, 0x3de1: 0xd4e, 0x3de2: 0xd4f, 0x3de3: 0xd50, 0x3de4: 0xd51, 0x3de5: 0xd52, 0x3de6: 0xd53, 0x3de7: 0xd54, + 0x3de8: 0xd55, 0x3de9: 0xd56, 0x3dea: 0xd57, 0x3deb: 0xd58, 0x3dec: 0xd59, 0x3ded: 0xd5a, 0x3dee: 0xd5b, 0x3def: 0xd5c, + 0x3df0: 0xd5d, 0x3df1: 0xd5e, 0x3df2: 0xd5f, 0x3df3: 0xd60, 0x3df4: 0xd61, 0x3df5: 0xd62, 0x3df6: 0xd63, 0x3df7: 0xd64, + 0x3df8: 0xd65, 0x3df9: 0xd66, 0x3dfa: 0xd67, 0x3dfb: 0xd68, 0x3dfc: 0xd69, 0x3dfd: 0xd6a, 0x3dfe: 0xd6b, 0x3dff: 0xd6c, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0xd6d, 0x3e01: 0xd6e, 0x3e02: 0xd6f, 0x3e03: 0xd70, 0x3e04: 0xd71, 0x3e05: 0xd72, 0x3e06: 0xd73, 0x3e07: 0xd74, + 0x3e08: 0xd75, 0x3e09: 0xd76, 0x3e0a: 0xd77, 0x3e0b: 0xd78, 0x3e0c: 0xd79, 0x3e0d: 0xd7a, 0x3e0e: 0xd7b, 0x3e0f: 0xd7c, + 0x3e10: 0xd7d, 0x3e11: 0xd7e, 0x3e12: 0xd7f, 0x3e13: 0xd80, 0x3e14: 0xd81, 0x3e15: 0xd82, 0x3e16: 0xd83, 0x3e17: 0xd84, + 0x3e18: 0xd85, 0x3e19: 0xd86, 0x3e1a: 0xd87, 0x3e1b: 0xd88, 0x3e1c: 0xd89, 0x3e1d: 0xd8a, 0x3e1e: 0xd8b, 0x3e1f: 0xd8c, + 0x3e20: 0xd8d, 0x3e21: 0xd8e, 0x3e22: 0xd8f, 0x3e23: 0xd90, 0x3e24: 0xd91, 0x3e25: 0xd92, 0x3e26: 0xd93, 0x3e27: 0xd94, + 0x3e28: 0xd95, 0x3e29: 0xd96, 0x3e2a: 0xd97, 0x3e2b: 0xd98, 0x3e2c: 0xd99, 0x3e2d: 0xd9a, 0x3e2e: 0xd9b, 0x3e2f: 0xd9c, + 0x3e30: 0xd9d, 0x3e31: 0xd9e, 0x3e32: 0xd9f, 0x3e33: 0xda0, 0x3e34: 0xda1, 0x3e35: 0xda2, 0x3e36: 0xda3, 0x3e37: 0xda4, + 0x3e38: 0xda5, 0x3e39: 0xda6, 0x3e3a: 0xda7, 0x3e3b: 0xda8, 0x3e3c: 0xda9, 0x3e3d: 0xdaa, 0x3e3e: 0xdab, 0x3e3f: 0xdac, + // Block 0xf9, offset 0x3e40 + 0x3e40: 0xdad, 0x3e41: 0xdae, 0x3e42: 0xdaf, 0x3e43: 0xdb0, 0x3e44: 0xdb1, 0x3e45: 0xdb2, 0x3e46: 0xdb3, 0x3e47: 0xdb4, + 0x3e48: 0xdb5, 0x3e49: 0xdb6, 0x3e4a: 0xdb7, 0x3e4b: 0xdb8, 0x3e4c: 0xdb9, 0x3e4d: 0xdba, 0x3e4e: 0xdbb, 0x3e4f: 0xdbc, + 0x3e50: 0xdbd, 0x3e51: 0xdbe, 0x3e52: 0xdbf, 0x3e53: 0xdc0, 0x3e54: 0xdc1, 0x3e55: 0xdc2, 0x3e56: 0xdc3, 0x3e57: 0xdc4, + 0x3e58: 0xdc5, 0x3e59: 0xdc6, 0x3e5a: 0xdc7, 0x3e5b: 0xdc8, 0x3e5c: 0xdc9, 0x3e5d: 0xdca, 0x3e5e: 0xdcb, 0x3e5f: 0xdcc, + 0x3e60: 0xdcd, 0x3e61: 0xdce, 0x3e62: 0xdcf, 0x3e63: 0xdd0, 0x3e64: 0xdd1, 0x3e65: 0xdd2, 0x3e66: 0xdd3, 0x3e67: 0xdd4, + 0x3e68: 0xdd5, 0x3e69: 0xdd6, 0x3e6a: 0xdd7, 0x3e6b: 0xdd8, 0x3e6c: 0xdd9, 0x3e6d: 0xdda, 0x3e6e: 0xddb, 0x3e6f: 0xddc, + 0x3e70: 0xddd, 0x3e71: 0xdde, 0x3e72: 0xddf, 0x3e73: 0xde0, 0x3e74: 0xde1, 0x3e75: 0xde2, 0x3e76: 0xde3, 0x3e77: 0xde4, + 0x3e78: 0xde5, 0x3e79: 0xde6, 0x3e7a: 0xde7, 0x3e7b: 0xde8, 0x3e7c: 0xde9, 0x3e7d: 0xdea, 0x3e7e: 0xdeb, 0x3e7f: 0xdec, + // Block 0xfa, offset 0x3e80 + 0x3e80: 0xded, 0x3e81: 0xdee, 0x3e82: 0xdef, 0x3e83: 0xdf0, 0x3e84: 0xdf1, 0x3e85: 0xdf2, 0x3e86: 0xdf3, 0x3e87: 0xdf4, + 0x3e88: 0xdf5, 0x3e89: 0xdf6, 0x3e8a: 0xdf7, 0x3e8b: 0xdf8, 0x3e8c: 0xdf9, 0x3e8d: 0xdfa, 0x3e8e: 0xdfb, 0x3e8f: 0xdfc, + 0x3e90: 0xdfd, 0x3e91: 0xdfe, 0x3e92: 0xdff, 0x3e93: 0xe00, 0x3e94: 0xe01, 0x3e95: 0xe02, 0x3e96: 0xe03, 0x3e97: 0xe04, + 0x3e98: 0xe05, 0x3e99: 0xe06, 0x3e9a: 0xe07, 0x3e9b: 0xe08, 0x3e9c: 0xe09, 0x3e9d: 0xe0a, 0x3e9e: 0xe0b, 0x3e9f: 0xe0c, + 0x3ea0: 0xe0d, 0x3ea1: 0xe0e, 0x3ea2: 0xe0f, 0x3ea3: 0xe10, 0x3ea4: 0xe11, 0x3ea5: 0xe12, 0x3ea6: 0xe13, 0x3ea7: 0xe14, + 0x3ea8: 0xe15, 0x3ea9: 0xe16, 0x3eaa: 0xe17, 0x3eab: 0xe18, 0x3eac: 0xe19, 0x3ead: 0xe1a, 0x3eae: 0xe1b, 0x3eaf: 0xe1c, + 0x3eb0: 0xe1d, 0x3eb1: 0xe1e, 0x3eb2: 0xe1f, 0x3eb3: 0xe20, 0x3eb4: 0xe21, 0x3eb5: 0xe22, 0x3eb6: 0xe23, 0x3eb7: 0xe24, + 0x3eb8: 0xe25, 0x3eb9: 0xe26, 0x3eba: 0xe27, 0x3ebb: 0xe28, 0x3ebc: 0xe29, 0x3ebd: 0xe2a, 0x3ebe: 0xe2b, 0x3ebf: 0xe2c, + // Block 0xfb, offset 0x3ec0 + 0x3ec0: 0xe2d, 0x3ec1: 0xe2e, 0x3ec2: 0xe2f, 0x3ec3: 0xe30, 0x3ec4: 0xe31, 0x3ec5: 0xe32, 0x3ec6: 0xe33, 0x3ec7: 0xe34, + 0x3ec8: 0xe35, 0x3ec9: 0xe36, 0x3eca: 0xe37, 0x3ecb: 0xe38, 0x3ecc: 0xe39, 0x3ecd: 0xe3a, 0x3ece: 0xe3b, 0x3ecf: 0xe3c, + 0x3ed0: 0xe3d, 0x3ed1: 0xe3e, 0x3ed2: 0xe3f, 0x3ed3: 0xe40, 0x3ed4: 0xe41, 0x3ed5: 0xe42, 0x3ed6: 0xe43, 0x3ed7: 0xe44, + 0x3ed8: 0xe45, 0x3ed9: 0xe46, 0x3eda: 0xe47, 0x3edb: 0xe48, 0x3edc: 0xe49, 0x3edd: 0xe4a, 0x3ede: 0xe4b, 0x3edf: 0xe4c, + 0x3ee0: 0xe4d, 0x3ee1: 0xe4e, 0x3ee2: 0xe4f, 0x3ee3: 0xe50, 0x3ee4: 0xe51, 0x3ee5: 0xe52, 0x3ee6: 0xe53, 0x3ee7: 0xe54, + 0x3ee8: 0xe55, 0x3ee9: 0xe56, 0x3eea: 0xe57, 0x3eeb: 0xe58, 0x3eec: 0xe59, 0x3eed: 0xe5a, 0x3eee: 0xe5b, 0x3eef: 0xe5c, + 0x3ef0: 0xe5d, 0x3ef1: 0xe5e, 0x3ef2: 0xe5f, 0x3ef3: 0xe60, 0x3ef4: 0xe61, 0x3ef5: 0xe62, 0x3ef6: 0xe63, 0x3ef7: 0xe64, + 0x3ef8: 0xe65, 0x3ef9: 0xe66, 0x3efa: 0xe67, 0x3efb: 0xe68, 0x3efc: 0xe69, 0x3efd: 0xe6a, 0x3efe: 0xe6b, 0x3eff: 0xe6c, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0xe6d, 0x3f01: 0xe6e, 0x3f02: 0xe6f, 0x3f03: 0xe70, 0x3f04: 0xe71, 0x3f05: 0xe72, 0x3f06: 0xe73, 0x3f07: 0xe74, + 0x3f08: 0xe75, 0x3f09: 0xe76, 0x3f0a: 0xe77, 0x3f0b: 0xe78, 0x3f0c: 0xe79, 0x3f0d: 0xe7a, 0x3f0e: 0xe7b, 0x3f0f: 0xe7c, + 0x3f10: 0xe7d, 0x3f11: 0xe7e, 0x3f12: 0xe7f, 0x3f13: 0xe80, 0x3f14: 0xe81, 0x3f15: 0xe82, 0x3f16: 0xe83, 0x3f17: 0xe84, + 0x3f18: 0xe85, 0x3f19: 0xe86, 0x3f1a: 0xe87, 0x3f1b: 0xe88, 0x3f1c: 0xe89, 0x3f1d: 0xe8a, 0x3f1e: 0xe8b, 0x3f1f: 0xe8c, + 0x3f20: 0xe8d, 0x3f21: 0xe8e, 0x3f22: 0xe8f, 0x3f23: 0xe90, 0x3f24: 0xe91, 0x3f25: 0xe92, 0x3f26: 0xe93, 0x3f27: 0xe94, + 0x3f28: 0xe95, 0x3f29: 0xe96, 0x3f2a: 0xe97, 0x3f2b: 0xe98, 0x3f2c: 0xe99, 0x3f2d: 0xe9a, 0x3f2e: 0xe9b, 0x3f2f: 0xe9c, + 0x3f30: 0xe9d, 0x3f31: 0xe9e, 0x3f32: 0xe9f, 0x3f33: 0xea0, 0x3f34: 0xea1, 0x3f35: 0xea2, 0x3f36: 0xea3, 0x3f37: 0xea4, + 0x3f38: 0xea5, 0x3f39: 0xea6, 0x3f3a: 0xea7, 0x3f3b: 0xea8, 0x3f3c: 0xea9, 0x3f3d: 0xeaa, 0x3f3e: 0xeab, 0x3f3f: 0xeac, + // Block 0xfd, offset 0x3f40 + 0x3f40: 0xead, 0x3f41: 0xeae, 0x3f42: 0xeaf, 0x3f43: 0xeb0, 0x3f44: 0xeb1, 0x3f45: 0xeb2, 0x3f46: 0xeb3, 0x3f47: 0xeb4, + 0x3f48: 0xeb5, 0x3f49: 0xeb6, 0x3f4a: 0xeb7, 0x3f4b: 0xeb8, 0x3f4c: 0xeb9, 0x3f4d: 0xeba, 0x3f4e: 0xebb, 0x3f4f: 0xebc, + 0x3f50: 0xebd, 0x3f51: 0xebe, 0x3f52: 0xebf, 0x3f53: 0xec0, 0x3f54: 0xec1, 0x3f55: 0xec2, 0x3f56: 0xec3, 0x3f57: 0xec4, + 0x3f58: 0xec5, 0x3f59: 0xec6, 0x3f5a: 0xec7, 0x3f5b: 0xec8, 0x3f5c: 0xec9, 0x3f5d: 0xeca, 0x3f5e: 0xecb, 0x3f5f: 0xecc, + 0x3f60: 0xecd, 0x3f61: 0xece, 0x3f62: 0xecf, 0x3f63: 0xed0, 0x3f64: 0xed1, 0x3f65: 0xed2, 0x3f66: 0xed3, 0x3f67: 0xed4, + 0x3f68: 0xed5, 0x3f69: 0xed6, 0x3f6a: 0xed7, 0x3f6b: 0xed8, 0x3f6c: 0xed9, 0x3f6d: 0xeda, 0x3f6e: 0xedb, 0x3f6f: 0xedc, + 0x3f70: 0xedd, 0x3f71: 0xede, 0x3f72: 0xedf, 0x3f73: 0xee0, 0x3f74: 0xee1, 0x3f75: 0xee2, 0x3f76: 0xee3, 0x3f77: 0xee4, + 0x3f78: 0xee5, 0x3f79: 0xee6, 0x3f7a: 0xee7, 0x3f7b: 0xee8, 0x3f7c: 0xee9, 0x3f7d: 0xeea, 0x3f7e: 0xeeb, 0x3f7f: 0xeec, + // Block 0xfe, offset 0x3f80 + 0x3f80: 0xeed, 0x3f81: 0xeee, 0x3f82: 0xeef, 0x3f83: 0xef0, 0x3f84: 0xef1, 0x3f85: 0xef2, 0x3f86: 0xef3, 0x3f87: 0xef4, + 0x3f88: 0xef5, 0x3f89: 0xef6, 0x3f8a: 0xef7, 0x3f8b: 0xef8, 0x3f8c: 0xef9, 0x3f8d: 0xefa, 0x3f8e: 0xefb, 0x3f8f: 0xefc, + 0x3f90: 0xefd, 0x3f91: 0xefe, 0x3f92: 0xeff, 0x3f93: 0xf00, 0x3f94: 0xf01, 0x3f95: 0xf02, 0x3f96: 0xf03, 0x3f97: 0xf04, + 0x3f98: 0xf05, 0x3f99: 0xf06, 0x3f9a: 0xf07, 0x3f9b: 0xf08, 0x3f9c: 0xf09, 0x3f9d: 0xf0a, 0x3f9e: 0xf0b, 0x3f9f: 0xf0c, + 0x3fa0: 0xf0d, 0x3fa1: 0xf0e, 0x3fa2: 0xf0f, 0x3fa3: 0xf10, 0x3fa4: 0xf11, 0x3fa5: 0xf12, 0x3fa6: 0xf13, 0x3fa7: 0xf14, + 0x3fa8: 0xf15, 0x3fa9: 0xf16, 0x3faa: 0xf17, 0x3fab: 0xf18, 0x3fac: 0xf19, 0x3fad: 0xf1a, 0x3fae: 0xf1b, 0x3faf: 0xf1c, + 0x3fb0: 0xf1d, 0x3fb1: 0xf1e, 0x3fb2: 0xf1f, 0x3fb3: 0xf20, 0x3fb4: 0xf21, 0x3fb5: 0xf22, 0x3fb6: 0xf23, 0x3fb7: 0xf24, + 0x3fb8: 0xf25, 0x3fb9: 0xf26, 0x3fba: 0xf27, 0x3fbb: 0xf28, 0x3fbc: 0xf29, 0x3fbd: 0xf2a, 0x3fbe: 0xf2b, 0x3fbf: 0xf2c, + // Block 0xff, offset 0x3fc0 + 0x3fc0: 0xf2d, 0x3fc1: 0xf2e, 0x3fc2: 0xf2f, 0x3fc3: 0xf30, 0x3fc4: 0xf31, 0x3fc5: 0xf32, 0x3fc6: 0xf33, 0x3fc7: 0xf34, + 0x3fc8: 0xf35, 0x3fc9: 0xf36, 0x3fca: 0xf37, 0x3fcb: 0xf38, 0x3fcc: 0xf39, 0x3fcd: 0xf3a, 0x3fce: 0xf3b, 0x3fcf: 0xf3c, + 0x3fd0: 0xf3d, 0x3fd1: 0xf3e, 0x3fd2: 0xf3f, 0x3fd3: 0xf40, 0x3fd4: 0xf41, 0x3fd5: 0xf42, 0x3fd6: 0xf43, 0x3fd7: 0xf44, + 0x3fd8: 0xf45, 0x3fd9: 0xf46, 0x3fda: 0xf47, 0x3fdb: 0xf48, 0x3fdc: 0xf49, 0x3fdd: 0xf4a, 0x3fde: 0xf4b, 0x3fdf: 0xf4c, + 0x3fe0: 0xf4d, + // Block 0x100, offset 0x4000 + 0x4020: 0xf4e, 0x4021: 0xf4f, 0x4022: 0xf50, 0x4023: 0xf51, 0x4024: 0xf52, 0x4025: 0xf53, 0x4026: 0xf54, 0x4027: 0xf55, + 0x4028: 0xf56, + // Block 0x101, offset 0x4040 + 0x4050: 0x09, 0x4051: 0x0a, 0x4052: 0x0b, 0x4053: 0x0c, 0x4056: 0x0d, + 0x405b: 0x0e, 0x405d: 0x0f, 0x405e: 0x10, 0x405f: 0xf1, + 0x4060: 0xf2, 0x4061: 0xf3, 0x4062: 0xf4, 0x4063: 0xf5, 0x4064: 0xf6, 0x4065: 0xf7, 0x4066: 0xf8, 0x4067: 0xf9, + 0x4068: 0xfa, 0x4069: 0xfb, 0x406a: 0xfc, 0x406b: 0xfd, 0x406f: 0xfe, + // Block 0x102, offset 0x4080 + 0x4082: 0x01, 0x4083: 0x618, 0x4084: 0x619, 0x4085: 0x61a, 0x4086: 0x05, 0x4087: 0x61b, + 0x4088: 0x61c, 0x4089: 0x08, 0x408a: 0x09, 0x408b: 0x0a, 0x408c: 0x0b, 0x408d: 0x0c, 0x408e: 0x0d, 0x408f: 0x0e, + 0x4090: 0x0f, 0x4091: 0x10, 0x4092: 0x11, 0x4093: 0x12, 0x4094: 0x13, 0x4095: 0x14, 0x4096: 0x15, 0x4097: 0x16, + 0x4098: 0x17, 0x4099: 0x18, 0x409a: 0x19, 0x409b: 0x1a, 0x409c: 0x1b, 0x409d: 0x1c, 0x409e: 0x1d, 0x409f: 0x1e, + 0x40a0: 0x01, 0x40a1: 0xce, 0x40a2: 0xe8, 0x40a3: 0xe9, 0x40a4: 0xea, 0x40a5: 0xeb, 0x40a6: 0xec, 0x40a7: 0xed, + 0x40a8: 0xee, 0x40a9: 0xef, 0x40aa: 0x06, 0x40ad: 0x07, 0x40af: 0xf0, + 0x40b0: 0xff, 0x40b3: 0x15, +} + +// mainCTEntries: 2529 entries, 10116 bytes +var mainCTEntries = [2529]struct{ L, H, N, I uint8 }{ + {0xCE, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0xB7, 0xB7, 0, 1}, + {0x87, 0x87, 0, 2}, + {0xCC, 0x0, 2, 255}, + {0x88, 0x88, 0, 2}, + {0x86, 0x86, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x88, 0x88, 0, 1}, + {0xCD, 0x1, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x81, 0x81, 0, 1}, + {0x81, 0x81, 0, 2}, + {0xCC, 0x0, 1, 255}, + {0x86, 0x86, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8B, 0x8B, 0, 3}, + {0x88, 0x88, 0, 2}, + {0x86, 0x86, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x8F, 0x8F, 0, 1}, + {0xD9, 0x0, 1, 255}, + {0x93, 0x95, 0, 1}, + {0xD9, 0x0, 1, 255}, + {0x94, 0x94, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xA7, 0x1, 1, 255}, + {0xA6, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0x97, 0x97, 0, 2}, + {0xE0, 0x0, 2, 255}, + {0xAD, 0x1, 1, 255}, + {0xAC, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0x96, 0x97, 0, 2}, + {0xE0, 0x0, 1, 255}, + {0xAF, 0x0, 1, 255}, + {0x97, 0x97, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xAF, 0x1, 1, 255}, + {0xAE, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0x97, 0x97, 0, 2}, + {0xE0, 0x0, 1, 255}, + {0xAE, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB1, 0x0, 1, 255}, + {0x96, 0x96, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB3, 0x0, 1, 255}, + {0x95, 0x95, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB3, 0x0, 2, 255}, + {0x95, 0x96, 0, 3}, + {0x82, 0x0, 1, 2}, + {0xE0, 0x0, 1, 255}, + {0xB3, 0x0, 1, 255}, + {0x95, 0x95, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xB5, 0x1, 1, 255}, + {0xB4, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0x97, 0x97, 0, 2}, + {0xE0, 0x0, 1, 255}, + {0xB4, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB7, 0x0, 3, 255}, + {0x9F, 0x9F, 0, 4}, + {0x8F, 0x0, 1, 3}, + {0x8A, 0x8A, 0, 2}, + {0xE0, 0x0, 1, 255}, + {0xB7, 0x0, 1, 255}, + {0x8A, 0x8A, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB7, 0x0, 1, 255}, + {0x8A, 0x8A, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB8, 0x0, 1, 255}, + {0x81, 0xAE, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB8, 0x0, 1, 255}, + {0xB2, 0xB2, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xBB, 0xC, 1, 255}, + {0xBA, 0x0, 12, 255}, + {0xAD, 0xAE, 0, 26}, + {0xAA, 0xAB, 0, 24}, + {0xA7, 0xA7, 0, 23}, + {0xA5, 0xA5, 0, 22}, + {0xA1, 0xA3, 0, 19}, + {0x99, 0x9F, 0, 12}, + {0x94, 0x97, 0, 8}, + {0x8D, 0x8D, 0, 7}, + {0x8A, 0x8A, 0, 6}, + {0x87, 0x88, 0, 4}, + {0x84, 0x84, 0, 3}, + {0x81, 0x82, 0, 1}, + {0x9C, 0x9F, 0, 28}, + {0xE0, 0x0, 1, 255}, + {0xBA, 0x0, 1, 255}, + {0xB2, 0xB2, 0, 1}, + {0xEA, 0x0, 1, 255}, + {0xAA, 0x0, 1, 255}, + {0x80, 0xAF, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x7, 1, 255}, + {0xBD, 0x0, 1, 255}, + {0xB1, 0x0, 1, 255}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x2, 1, 255}, + {0xBD, 0x0, 2, 255}, + {0xB4, 0xB4, 0, 2}, + {0xB2, 0xB2, 0, 1}, + {0x80, 0x80, 0, 3}, + {0x80, 0x81, 0, 4}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x2, 1, 255}, + {0xBD, 0x0, 2, 255}, + {0xB4, 0xB4, 0, 2}, + {0xB2, 0xB2, 0, 1}, + {0x80, 0x80, 0, 3}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xAE, 0xAE, 0, 1}, + {0xF0, 0x0, 1, 255}, + {0x91, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0xA7, 0xA7, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0xAC, 0x0, 1, 255}, + {0xB5, 0xB5, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xA7, 0x0, 1, 255}, + {0x8D, 0x0, 1, 255}, + {0xE2, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x8D, 0x8D, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xA7, 0x0, 1, 255}, + {0x8D, 0x0, 1, 255}, + {0xE0, 0x0, 1, 255}, + {0xA6, 0x0, 1, 255}, + {0xB7, 0xB7, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0xA7, 0xA7, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x87, 0x87, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x68, 0x68, 0, 3}, + {0x48, 0x48, 0, 2}, + {0x8C, 0x8C, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 1}, + {0x68, 0x68, 0, 1}, + {0x68, 0x68, 0, 2}, + {0x48, 0x48, 0, 1}, + {0x64, 0x64, 0, 1}, + {0x64, 0x64, 0, 2}, + {0x44, 0x44, 0, 1}, + {0x66, 0x66, 0, 1}, + {0x66, 0x66, 0, 2}, + {0x46, 0x46, 0, 1}, + {0x67, 0x67, 0, 1}, + {0x67, 0x67, 0, 2}, + {0x47, 0x47, 0, 1}, + {0xCE, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0x6C, 0x6C, 0, 3}, + {0xB7, 0xB7, 0, 1}, + {0x87, 0x87, 0, 2}, + {0xCE, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0x6C, 0x6C, 0, 4}, + {0x4C, 0x4C, 0, 3}, + {0xB7, 0xB7, 0, 1}, + {0x87, 0x87, 0, 2}, + {0xCC, 0x0, 2, 255}, + {0x8B, 0x8B, 0, 2}, + {0x88, 0x88, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x61, 0x61, 0, 3}, + {0x8A, 0x8A, 0, 2}, + {0x88, 0x88, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x61, 0x61, 0, 4}, + {0x41, 0x41, 0, 3}, + {0x8A, 0x8A, 0, 2}, + {0x88, 0x88, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0xA8, 0xA8, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xBE, 0x0, 1, 255}, + {0x90, 0x91, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 6, 255}, + {0x98, 0x42, 1, 255}, + {0x96, 0x31, 1, 255}, + {0x94, 0x1B, 1, 255}, + {0x84, 0x11, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x80, 0x80, 0, 73}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0xD, 1, 255}, + {0xBD, 0x0, 13, 255}, + {0xBC, 0xBC, 0, 20}, + {0xBA, 0xBA, 0, 19}, + {0xB4, 0xB4, 0, 18}, + {0xA6, 0xA6, 0, 17}, + {0xA2, 0xA3, 0, 15}, + {0xA0, 0xA0, 0, 14}, + {0x9D, 0x9D, 0, 13}, + {0x96, 0x96, 0, 12}, + {0x91, 0x91, 0, 11}, + {0x8C, 0x8C, 0, 10}, + {0x8A, 0x8A, 0, 9}, + {0x84, 0x84, 0, 8}, + {0x82, 0x82, 0, 7}, + {0xB1, 0xB2, 0, 21}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 8, 255}, + {0xBC, 0xBC, 0, 30}, + {0xB4, 0xB4, 0, 29}, + {0xA2, 0xA2, 0, 28}, + {0x93, 0x93, 0, 27}, + {0x8C, 0x8C, 0, 26}, + {0x8A, 0x8A, 0, 25}, + {0x84, 0x84, 0, 24}, + {0x82, 0x82, 0, 23}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x12, 1, 255}, + {0xBD, 0x0, 11, 255}, + {0xBC, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 41}, + {0xB4, 0xB4, 0, 40}, + {0xA6, 0xA6, 0, 39}, + {0xA2, 0xA3, 0, 37}, + {0xA0, 0xA0, 0, 36}, + {0x91, 0x91, 0, 35}, + {0x8C, 0x8C, 0, 34}, + {0x8A, 0x8A, 0, 33}, + {0x84, 0x84, 0, 32}, + {0x82, 0x82, 0, 31}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 5, 255}, + {0xA2, 0xA2, 0, 5}, + {0x93, 0x93, 0, 4}, + {0x91, 0x91, 0, 3}, + {0x84, 0x84, 0, 2}, + {0x82, 0x82, 0, 1}, + {0xB1, 0xB2, 0, 42}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0xD, 1, 255}, + {0xBD, 0x0, 13, 255}, + {0xBC, 0xBC, 0, 57}, + {0xBA, 0xBA, 0, 56}, + {0xB4, 0xB4, 0, 55}, + {0xA6, 0xA6, 0, 54}, + {0xA2, 0xA3, 0, 52}, + {0xA0, 0xA0, 0, 51}, + {0x96, 0x96, 0, 50}, + {0x93, 0x93, 0, 49}, + {0x91, 0x91, 0, 48}, + {0x8C, 0x8C, 0, 47}, + {0x8A, 0x8A, 0, 46}, + {0x84, 0x84, 0, 45}, + {0x82, 0x82, 0, 44}, + {0xB1, 0xB2, 0, 58}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x10, 1, 255}, + {0xBD, 0x0, 13, 255}, + {0xBC, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 71}, + {0xB4, 0xB4, 0, 70}, + {0xB2, 0xB2, 0, 69}, + {0xA6, 0xA6, 0, 68}, + {0xA2, 0xA2, 0, 67}, + {0xA0, 0xA0, 0, 66}, + {0x9D, 0x9D, 0, 65}, + {0x93, 0x93, 0, 64}, + {0x8C, 0x8C, 0, 63}, + {0x8A, 0x8A, 0, 62}, + {0x84, 0x84, 0, 61}, + {0x82, 0x82, 0, 60}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 1, 255}, + {0x91, 0x91, 0, 6}, + {0xB1, 0xB1, 0, 72}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 11, 255}, + {0xA6, 0x2E, 1, 255}, + {0xA4, 0xA4, 0, 72}, + {0xA3, 0x29, 1, 255}, + {0xA2, 0x1C, 1, 255}, + {0x9E, 0x9F, 0, 70}, + {0x99, 0x99, 0, 69}, + {0x91, 0xF, 1, 255}, + {0x8F, 0x8F, 0, 68}, + {0x85, 0x85, 0, 67}, + {0x82, 0x0, 1, 255}, + {0x80, 0x80, 0, 66}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0xB, 1, 255}, + {0xBD, 0x0, 11, 255}, + {0xBE, 0xBE, 0, 11}, + {0xBC, 0xBC, 0, 10}, + {0xBA, 0xBA, 0, 9}, + {0xA2, 0xA2, 0, 8}, + {0xA0, 0xA0, 0, 7}, + {0x9D, 0x9D, 0, 6}, + {0x98, 0x98, 0, 5}, + {0x91, 0x91, 0, 4}, + {0x8C, 0x8C, 0, 3}, + {0x8A, 0x8A, 0, 2}, + {0x82, 0x82, 0, 1}, + {0xB1, 0xB3, 0, 12}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 11, 255}, + {0xBE, 0xBE, 0, 26}, + {0xBC, 0xBC, 0, 25}, + {0xBA, 0xBA, 0, 24}, + {0xB4, 0xB4, 0, 23}, + {0xA6, 0xA6, 0, 22}, + {0xA2, 0xA3, 0, 20}, + {0xA0, 0xA0, 0, 19}, + {0x98, 0x98, 0, 18}, + {0x8C, 0x8C, 0, 17}, + {0x8A, 0x8A, 0, 16}, + {0x82, 0x82, 0, 15}, + {0xE0, 0x0, 1, 255}, + {0xBE, 0x0, 11, 255}, + {0xB3, 0xB3, 0, 37}, + {0xAB, 0xAB, 0, 36}, + {0xA9, 0xA9, 0, 35}, + {0xA3, 0xA3, 0, 34}, + {0xA1, 0xA1, 0, 33}, + {0x9F, 0x9F, 0, 32}, + {0x99, 0x99, 0, 31}, + {0x97, 0x97, 0, 30}, + {0x94, 0x94, 0, 29}, + {0x92, 0x92, 0, 28}, + {0x90, 0x90, 0, 27}, + {0xE0, 0x0, 1, 255}, + {0xBE, 0x0, 3, 255}, + {0xA1, 0xA1, 0, 40}, + {0x9F, 0x9F, 0, 39}, + {0x95, 0x95, 0, 38}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0xD, 10, 255}, + {0xBD, 0x0, 13, 255}, + {0xBE, 0xBE, 0, 54}, + {0xBC, 0xBC, 0, 53}, + {0xBA, 0xBA, 0, 52}, + {0xB4, 0xB4, 0, 51}, + {0xB2, 0xB2, 0, 50}, + {0xA2, 0xA3, 0, 48}, + {0x98, 0x98, 0, 47}, + {0x96, 0x96, 0, 46}, + {0x91, 0x91, 0, 45}, + {0x8C, 0x8C, 0, 44}, + {0x8A, 0x8A, 0, 43}, + {0x84, 0x84, 0, 42}, + {0x82, 0x82, 0, 41}, + {0xB2, 0xB3, 0, 64}, + {0xAD, 0xAD, 0, 63}, + {0xA9, 0xA9, 0, 62}, + {0xA3, 0xA3, 0, 61}, + {0xA1, 0xA1, 0, 60}, + {0x9F, 0x9F, 0, 59}, + {0x99, 0x99, 0, 58}, + {0x94, 0x94, 0, 57}, + {0x92, 0x92, 0, 56}, + {0x90, 0x90, 0, 55}, + {0xE0, 0x0, 1, 255}, + {0xBE, 0x0, 11, 255}, + {0xAB, 0xAB, 0, 12}, + {0xA8, 0xA9, 0, 10}, + {0xA6, 0xA6, 0, 9}, + {0xA3, 0xA3, 0, 8}, + {0xA1, 0xA1, 0, 7}, + {0x9F, 0x9F, 0, 6}, + {0x99, 0x99, 0, 5}, + {0x97, 0x97, 0, 4}, + {0x94, 0x94, 0, 3}, + {0x92, 0x92, 0, 2}, + {0x90, 0x90, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xBE, 0x0, 9, 255}, + {0xB7, 0xB7, 0, 10}, + {0xA6, 0xA6, 0, 9}, + {0xA4, 0xA4, 0, 8}, + {0xA1, 0xA1, 0, 7}, + {0x9F, 0x9F, 0, 6}, + {0x97, 0x97, 0, 5}, + {0x94, 0x95, 0, 3}, + {0x92, 0x92, 0, 2}, + {0x90, 0x90, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 9, 255}, + {0x9A, 0x9B, 0, 45}, + {0x93, 0x1D, 1, 255}, + {0x91, 0x11, 1, 255}, + {0x90, 0x90, 0, 44}, + {0x89, 0x89, 0, 43}, + {0x86, 0x87, 0, 41}, + {0x84, 0x8, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x81, 0x81, 0, 40}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x4, 1, 255}, + {0xBD, 0x0, 4, 255}, + {0xBC, 0xBC, 0, 5}, + {0xBA, 0xBA, 0, 4}, + {0xB4, 0xB4, 0, 3}, + {0xA2, 0xA3, 0, 1}, + {0xB1, 0xB2, 0, 6}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 7, 255}, + {0xBC, 0xBC, 0, 15}, + {0xA2, 0xA3, 0, 13}, + {0xA0, 0xA0, 0, 12}, + {0x93, 0x93, 0, 11}, + {0x8C, 0x8C, 0, 10}, + {0x8A, 0x8A, 0, 9}, + {0x82, 0x82, 0, 8}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 10, 255}, + {0xBC, 0xBC, 0, 25}, + {0xBA, 0xBA, 0, 24}, + {0xB4, 0xB4, 0, 23}, + {0xA2, 0xA2, 0, 22}, + {0xA0, 0xA0, 0, 21}, + {0x93, 0x93, 0, 20}, + {0x8C, 0x8C, 0, 19}, + {0x8A, 0x8A, 0, 18}, + {0x84, 0x84, 0, 17}, + {0x82, 0x82, 0, 16}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 13, 255}, + {0xBE, 0xBE, 0, 39}, + {0xBC, 0xBC, 0, 38}, + {0xBA, 0xBA, 0, 37}, + {0xB4, 0xB4, 0, 36}, + {0xA2, 0xA3, 0, 34}, + {0xA0, 0xA0, 0, 33}, + {0x98, 0x98, 0, 32}, + {0x96, 0x96, 0, 31}, + {0x93, 0x93, 0, 30}, + {0x8C, 0x8C, 0, 29}, + {0x8A, 0x8A, 0, 28}, + {0x84, 0x84, 0, 27}, + {0x82, 0x82, 0, 26}, + {0xE0, 0x0, 1, 255}, + {0xBE, 0x0, 9, 255}, + {0xA8, 0xA9, 0, 10}, + {0xA6, 0xA6, 0, 9}, + {0xA3, 0xA4, 0, 7}, + {0xA1, 0xA1, 0, 6}, + {0x9F, 0x9F, 0, 5}, + {0x99, 0x99, 0, 4}, + {0x94, 0x94, 0, 3}, + {0x92, 0x92, 0, 2}, + {0x90, 0x90, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 8, 255}, + {0x9A, 0x9B, 0, 62}, + {0x96, 0x29, 1, 255}, + {0x95, 0x95, 0, 61}, + {0x91, 0x14, 1, 255}, + {0x90, 0x90, 0, 60}, + {0x86, 0x87, 0, 58}, + {0x82, 0x0, 1, 255}, + {0x81, 0x81, 0, 57}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x10, 1, 255}, + {0xBD, 0x0, 16, 255}, + {0xBE, 0xBE, 0, 17}, + {0xBC, 0xBC, 0, 16}, + {0xBA, 0xBA, 0, 15}, + {0xB4, 0xB4, 0, 14}, + {0xB2, 0xB2, 0, 13}, + {0xA6, 0xA6, 0, 12}, + {0xA2, 0xA3, 0, 10}, + {0xA0, 0xA0, 0, 9}, + {0x98, 0x98, 0, 8}, + {0x96, 0x96, 0, 7}, + {0x93, 0x93, 0, 6}, + {0x91, 0x91, 0, 5}, + {0x8C, 0x8C, 0, 4}, + {0x8A, 0x8A, 0, 3}, + {0x84, 0x84, 0, 2}, + {0x82, 0x82, 0, 1}, + {0xB1, 0xB2, 0, 18}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x11, 1, 255}, + {0xBD, 0x0, 17, 255}, + {0xBE, 0xBE, 0, 37}, + {0xBC, 0xBC, 0, 36}, + {0xBA, 0xBA, 0, 35}, + {0xB4, 0xB4, 0, 34}, + {0xB2, 0xB2, 0, 33}, + {0xA6, 0xA6, 0, 32}, + {0xA2, 0xA3, 0, 30}, + {0xA0, 0xA0, 0, 29}, + {0x9D, 0x9D, 0, 28}, + {0x98, 0x98, 0, 27}, + {0x96, 0x96, 0, 26}, + {0x93, 0x93, 0, 25}, + {0x91, 0x91, 0, 24}, + {0x8C, 0x8C, 0, 23}, + {0x8A, 0x8A, 0, 22}, + {0x84, 0x84, 0, 21}, + {0x82, 0x82, 0, 20}, + {0xB2, 0xB2, 0, 38}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0xF, 1, 255}, + {0xBD, 0x0, 15, 255}, + {0xBE, 0xBE, 0, 54}, + {0xBC, 0xBC, 0, 53}, + {0xBA, 0xBA, 0, 52}, + {0xB4, 0xB4, 0, 51}, + {0xB2, 0xB2, 0, 50}, + {0xA2, 0xA3, 0, 48}, + {0xA0, 0xA0, 0, 47}, + {0x98, 0x98, 0, 46}, + {0x96, 0x96, 0, 45}, + {0x93, 0x93, 0, 44}, + {0x91, 0x91, 0, 43}, + {0x8C, 0x8C, 0, 42}, + {0x8A, 0x8A, 0, 41}, + {0x84, 0x84, 0, 40}, + {0x82, 0x82, 0, 39}, + {0xB1, 0xB2, 0, 55}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 10, 255}, + {0xA6, 0x20, 1, 255}, + {0xA4, 0xA4, 0, 52}, + {0xA1, 0xA1, 0, 51}, + {0x9E, 0x9F, 0, 49}, + {0x99, 0x99, 0, 48}, + {0x93, 0x11, 1, 255}, + {0x91, 0x0, 1, 255}, + {0x8F, 0x8F, 0, 47}, + {0x89, 0x89, 0, 46}, + {0x85, 0x85, 0, 45}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 15, 255}, + {0xBE, 0xBE, 0, 16}, + {0xBC, 0xBC, 0, 15}, + {0xBA, 0xBA, 0, 14}, + {0xB4, 0xB4, 0, 13}, + {0xB2, 0xB2, 0, 12}, + {0xA6, 0xA6, 0, 11}, + {0xA2, 0xA3, 0, 9}, + {0xA0, 0xA0, 0, 8}, + {0x98, 0x98, 0, 7}, + {0x96, 0x96, 0, 6}, + {0x93, 0x93, 0, 5}, + {0x8C, 0x8C, 0, 4}, + {0x8A, 0x8A, 0, 3}, + {0x84, 0x84, 0, 2}, + {0x82, 0x82, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 13, 255}, + {0xBE, 0xBE, 0, 29}, + {0xBC, 0xBC, 0, 28}, + {0xB4, 0xB4, 0, 27}, + {0xA6, 0xA6, 0, 26}, + {0xA0, 0xA0, 0, 25}, + {0x9D, 0x9D, 0, 24}, + {0x98, 0x98, 0, 23}, + {0x93, 0x93, 0, 22}, + {0x91, 0x91, 0, 21}, + {0x8C, 0x8C, 0, 20}, + {0x8A, 0x8A, 0, 19}, + {0x84, 0x84, 0, 18}, + {0x82, 0x82, 0, 17}, + {0xE0, 0x0, 1, 255}, + {0xBD, 0x0, 14, 255}, + {0xBC, 0xBC, 0, 44}, + {0xBA, 0xBA, 0, 43}, + {0xB4, 0xB4, 0, 42}, + {0xB2, 0xB2, 0, 41}, + {0xA6, 0xA6, 0, 40}, + {0xA2, 0xA3, 0, 38}, + {0xA0, 0xA0, 0, 37}, + {0x96, 0x96, 0, 36}, + {0x93, 0x93, 0, 35}, + {0x91, 0x91, 0, 34}, + {0x8C, 0x8C, 0, 33}, + {0x8A, 0x8A, 0, 32}, + {0x84, 0x84, 0, 31}, + {0x82, 0x82, 0, 30}, + {0xE0, 0x0, 1, 255}, + {0xBE, 0x0, 1, 255}, + {0x99, 0x99, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xBE, 0x0, 1, 255}, + {0xA4, 0xA5, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x9, 1, 255}, + {0xBD, 0x0, 3, 255}, + {0xB5, 0xB5, 0, 6}, + {0xB3, 0xB3, 0, 5}, + {0xB1, 0x0, 1, 4}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x2, 1, 255}, + {0xBD, 0x0, 2, 255}, + {0xB4, 0xB4, 0, 2}, + {0xB2, 0xB2, 0, 1}, + {0x80, 0x80, 0, 3}, + {0x80, 0x81, 0, 7}, + {0x7A, 0x7A, 0, 1}, + {0x7A, 0x7A, 0, 2}, + {0x5A, 0x5A, 0, 1}, + {0x62, 0x62, 0, 1}, + {0x62, 0x62, 0, 2}, + {0x42, 0x42, 0, 1}, + {0x70, 0x70, 0, 1}, + {0x70, 0x70, 0, 2}, + {0x50, 0x50, 0, 1}, + {0x79, 0x79, 0, 1}, + {0x79, 0x79, 0, 2}, + {0x59, 0x59, 0, 1}, + {0x73, 0x73, 0, 1}, + {0x73, 0x73, 0, 2}, + {0x53, 0x53, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x82, 0x82, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x83, 0x83, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x88, 0x88, 0, 2}, + {0x83, 0x83, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x8A, 0x8A, 0, 2}, + {0x88, 0x88, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8B, 0x8B, 0, 3}, + {0x88, 0x88, 0, 2}, + {0x83, 0x83, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x67, 0x67, 0, 2}, + {0x83, 0x83, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x67, 0x67, 0, 3}, + {0x47, 0x47, 0, 2}, + {0x83, 0x83, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x8C, 0x8C, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xC5, 0x2, 1, 255}, + {0x7A, 0x0, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 1}, + {0xBE, 0xBE, 0, 2}, + {0xC5, 0x4, 1, 255}, + {0x7A, 0x2, 1, 255}, + {0x5A, 0x0, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 2}, + {0xBD, 0xBE, 0, 3}, + {0xCE, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0x6A, 0x6A, 0, 3}, + {0xB7, 0xB7, 0, 1}, + {0x87, 0x87, 0, 2}, + {0xCE, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0x6A, 0x6A, 0, 4}, + {0x4A, 0x4A, 0, 3}, + {0xB7, 0xB7, 0, 1}, + {0x87, 0x87, 0, 2}, + {0x6A, 0x6A, 0, 1}, + {0x6A, 0x6A, 0, 2}, + {0x4A, 0x4A, 0, 1}, + {0x73, 0x73, 0, 2}, + {0x63, 0x0, 1, 255}, + {0x73, 0x73, 0, 1}, + {0x73, 0x73, 0, 4}, + {0x63, 0x1, 1, 255}, + {0x53, 0x53, 0, 3}, + {0x43, 0x0, 1, 255}, + {0x53, 0x53, 0, 1}, + {0x73, 0x73, 0, 2}, + {0x7A, 0x2, 1, 4}, + {0x64, 0x0, 1, 255}, + {0x7A, 0x0, 1, 2}, + {0x73, 0x73, 0, 1}, + {0x73, 0x73, 0, 3}, + {0x7A, 0x5, 1, 8}, + {0x64, 0x3, 1, 255}, + {0x5A, 0x2, 1, 7}, + {0x44, 0x0, 1, 255}, + {0x5A, 0x0, 1, 3}, + {0x53, 0x53, 0, 1}, + {0x53, 0x53, 0, 4}, + {0x7A, 0x0, 1, 5}, + {0x73, 0x73, 0, 2}, + {0x73, 0x73, 0, 6}, + {0x79, 0x79, 0, 2}, + {0x67, 0x0, 1, 255}, + {0x79, 0x79, 0, 1}, + {0x79, 0x79, 0, 4}, + {0x67, 0x1, 1, 255}, + {0x59, 0x59, 0, 3}, + {0x47, 0x0, 1, 255}, + {0x59, 0x59, 0, 1}, + {0x79, 0x79, 0, 2}, + {0xCE, 0x2, 1, 255}, + {0xC2, 0x1, 1, 255}, + {0x79, 0x79, 0, 4}, + {0x6C, 0x0, 1, 255}, + {0x79, 0x79, 0, 1}, + {0xB7, 0xB7, 0, 2}, + {0x87, 0x87, 0, 3}, + {0xCE, 0x3, 1, 255}, + {0xC2, 0x2, 1, 255}, + {0x79, 0x79, 0, 6}, + {0x6C, 0x1, 1, 255}, + {0x59, 0x59, 0, 5}, + {0x4C, 0x0, 1, 255}, + {0x59, 0x59, 0, 1}, + {0x79, 0x79, 0, 2}, + {0xB7, 0xB7, 0, 3}, + {0x87, 0x87, 0, 4}, + {0x79, 0x79, 0, 2}, + {0x6E, 0x0, 1, 255}, + {0x79, 0x79, 0, 1}, + {0x79, 0x79, 0, 4}, + {0x6E, 0x1, 1, 255}, + {0x59, 0x59, 0, 3}, + {0x4E, 0x0, 1, 255}, + {0x59, 0x59, 0, 1}, + {0x79, 0x79, 0, 2}, + {0x7A, 0x7A, 0, 2}, + {0x73, 0x0, 1, 255}, + {0x7A, 0x7A, 0, 1}, + {0x7A, 0x7A, 0, 4}, + {0x73, 0x1, 1, 255}, + {0x5A, 0x5A, 0, 3}, + {0x53, 0x0, 1, 255}, + {0x5A, 0x5A, 0, 1}, + {0x7A, 0x7A, 0, 2}, + {0x79, 0x79, 0, 2}, + {0x74, 0x0, 1, 255}, + {0x79, 0x79, 0, 1}, + {0x79, 0x79, 0, 4}, + {0x74, 0x1, 1, 255}, + {0x59, 0x59, 0, 3}, + {0x54, 0x0, 1, 255}, + {0x59, 0x59, 0, 1}, + {0x79, 0x79, 0, 2}, + {0x7A, 0x0, 1, 255}, + {0x73, 0x73, 0, 2}, + {0x73, 0x73, 0, 1}, + {0x7A, 0x1, 1, 255}, + {0x73, 0x73, 0, 4}, + {0x5A, 0x0, 1, 255}, + {0x53, 0x53, 0, 3}, + {0x53, 0x53, 0, 1}, + {0x73, 0x73, 0, 2}, + {0xD6, 0x0, 1, 255}, + {0x82, 0x82, 0, 1}, + {0x77, 0x77, 0, 3}, + {0x68, 0x68, 0, 2}, + {0x62, 0x62, 0, 1}, + {0x77, 0x77, 0, 6}, + {0x68, 0x68, 0, 5}, + {0x62, 0x62, 0, 4}, + {0x57, 0x57, 0, 3}, + {0x48, 0x48, 0, 2}, + {0x42, 0x42, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0xA3, 0xA3, 0, 1}, + {0x77, 0x77, 0, 2}, + {0x70, 0x70, 0, 1}, + {0x77, 0x77, 0, 4}, + {0x70, 0x70, 0, 3}, + {0x57, 0x57, 0, 2}, + {0x50, 0x50, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x79, 0x79, 0, 3}, + {0x77, 0x77, 0, 2}, + {0x87, 0x87, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x79, 0x79, 0, 5}, + {0x77, 0x77, 0, 4}, + {0x59, 0x59, 0, 3}, + {0x57, 0x57, 0, 2}, + {0x87, 0x87, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8A, 0x8A, 0, 3}, + {0x88, 0x88, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x88, 0x88, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x1, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x9D, 0x9D, 0, 1}, + {0xBC, 0xBC, 0, 2}, + {0xE3, 0x0, 1, 255}, + {0x83, 0x0, 1, 255}, + {0xBC, 0xBD, 0, 1}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x7, 1, 255}, + {0x82, 0x0, 2, 255}, + {0x9D, 0x9D, 0, 3}, + {0x99, 0x0, 1, 255}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x1, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x9D, 0x9D, 0, 1}, + {0xBC, 0xBC, 0, 2}, + {0xBC, 0xBC, 0, 4}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x4, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x0, 1, 255}, + {0xE3, 0x0, 1, 255}, + {0x83, 0x0, 1, 255}, + {0xBC, 0xBD, 0, 1}, + {0xBC, 0xBD, 0, 3}, + {0xE3, 0x0, 2, 255}, + {0x83, 0xE, 1, 255}, + {0x82, 0x0, 3, 255}, + {0x9E, 0x9E, 0, 6}, + {0x9D, 0x8, 1, 5}, + {0x99, 0x0, 1, 255}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x4, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x9D, 0x0, 1, 2}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 1}, + {0xBC, 0xBC, 0, 3}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 4}, + {0xBC, 0xBC, 0, 7}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x8, 2, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x0, 1, 255}, + {0xE3, 0x0, 1, 255}, + {0x83, 0x0, 2, 255}, + {0xBD, 0x0, 1, 3}, + {0xBC, 0xBD, 0, 2}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 1}, + {0xBD, 0x0, 1, 6}, + {0xBC, 0xBE, 0, 5}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 4}, + {0xE3, 0x0, 1, 255}, + {0x83, 0x0, 2, 255}, + {0xBD, 0x0, 1, 3}, + {0xBC, 0xBE, 0, 2}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 1}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x1, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x9D, 0x9E, 0, 1}, + {0xBC, 0xBC, 0, 3}, + {0xE3, 0x0, 1, 255}, + {0x83, 0x0, 1, 255}, + {0xBC, 0xBE, 0, 1}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x17, 1, 255}, + {0x82, 0x0, 4, 255}, + {0x9E, 0x9E, 0, 9}, + {0x9D, 0x10, 1, 8}, + {0x9A, 0x8, 1, 255}, + {0x99, 0x0, 1, 255}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x4, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x9D, 0x0, 1, 3}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 1}, + {0xBC, 0xBC, 0, 4}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x4, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x9D, 0x0, 1, 5}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 2}, + {0xBC, 0xBC, 0, 6}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 7}, + {0xBC, 0xBC, 0, 10}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x10, 2, 255}, + {0x82, 0x0, 2, 255}, + {0x9A, 0x7, 1, 255}, + {0x99, 0x0, 1, 255}, + {0xE3, 0x0, 1, 255}, + {0x83, 0x0, 2, 255}, + {0xBD, 0x0, 1, 4}, + {0xBC, 0xBD, 0, 3}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 1}, + {0xE3, 0x0, 1, 255}, + {0x83, 0x0, 2, 255}, + {0xBD, 0x0, 1, 6}, + {0xBC, 0xBD, 0, 5}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 2}, + {0xBD, 0x0, 1, 9}, + {0xBC, 0xBE, 0, 8}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 7}, + {0xE3, 0x0, 2, 255}, + {0x83, 0x5, 1, 255}, + {0x82, 0x0, 2, 255}, + {0x9E, 0x9E, 0, 3}, + {0x9D, 0x0, 1, 2}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x99, 0x99, 0, 1}, + {0xBC, 0xBC, 0, 4}, + {0xE3, 0x0, 1, 255}, + {0x82, 0x0, 1, 255}, + {0x9D, 0x9D, 0, 1}, + {0xE3, 0x0, 1, 255}, + {0x83, 0x0, 1, 255}, + {0xBD, 0xBD, 0, 1}, + {0x27, 0x27, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x9F, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x9F, 0x0, 1, 255}, + {0x86, 0x87, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x9F, 0x0, 1, 255}, + {0x86, 0x86, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x9F, 0x0, 1, 255}, + {0x87, 0x87, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xA5, 0x0, 1, 255}, + {0x8D, 0x0, 1, 255}, + {0xE0, 0x0, 1, 255}, + {0xA4, 0x0, 1, 255}, + {0xB7, 0xB7, 0, 1}, + {0x76, 0x76, 0, 8}, + {0x70, 0x70, 0, 7}, + {0x66, 0x66, 0, 6}, + {0x62, 0x62, 0, 5}, + {0x56, 0x56, 0, 4}, + {0x50, 0x50, 0, 3}, + {0x46, 0x46, 0, 2}, + {0x42, 0x42, 0, 1}, + {0x79, 0x7A, 0, 17}, + {0x73, 0x74, 0, 15}, + {0x6B, 0x6B, 0, 14}, + {0x67, 0x2, 2, 13}, + {0x64, 0x64, 0, 12}, + {0x59, 0x5A, 0, 10}, + {0x53, 0x54, 0, 8}, + {0x4B, 0x4B, 0, 7}, + {0x47, 0x0, 2, 6}, + {0x44, 0x44, 0, 5}, + {0x62, 0x62, 0, 2}, + {0x42, 0x42, 0, 1}, + {0x62, 0x62, 0, 4}, + {0x42, 0x42, 0, 3}, + {0x79, 0x7A, 0, 16}, + {0x73, 0x74, 0, 14}, + {0x6B, 0x6B, 0, 13}, + {0x67, 0x1, 2, 12}, + {0x64, 0x64, 0, 11}, + {0x59, 0x5A, 0, 9}, + {0x53, 0x54, 0, 7}, + {0x4B, 0x4B, 0, 6}, + {0x47, 0x0, 1, 5}, + {0x44, 0x44, 0, 4}, + {0x42, 0x42, 0, 1}, + {0x62, 0x62, 0, 3}, + {0x42, 0x42, 0, 2}, + {0xCC, 0x0, 2, 255}, + {0x83, 0x83, 0, 3}, + {0x80, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0xA8, 0xA8, 0, 2}, + {0x87, 0x87, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0xA8, 0xA8, 0, 2}, + {0x84, 0x84, 0, 1}, + {0xCE, 0x2, 1, 255}, + {0xCC, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0xB7, 0xB7, 0, 1}, + {0xA7, 0xA7, 0, 2}, + {0x87, 0x87, 0, 3}, + {0xE0, 0x0, 1, 255}, + {0xB5, 0x0, 1, 255}, + {0x8D, 0x0, 1, 255}, + {0xE2, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x8D, 0x8D, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB5, 0x0, 1, 255}, + {0x8D, 0x0, 1, 255}, + {0xE2, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x8D, 0x0, 1, 255}, + {0x20, 0x20, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB5, 0x0, 1, 255}, + {0x8D, 0x8D, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xA5, 0x0, 1, 255}, + {0x8D, 0x0, 1, 255}, + {0xE0, 0x0, 1, 255}, + {0xA4, 0x0, 1, 255}, + {0x9E, 0x9E, 0, 1}, + {0xCC, 0x1, 1, 255}, + {0xC4, 0x0, 1, 255}, + {0xA6, 0xA7, 0, 1}, + {0x87, 0x87, 0, 3}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 2, 255}, + {0xBA, 0xBA, 0, 3}, + {0xB9, 0x0, 1, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x99, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB8, 0xB8, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 2, 255}, + {0xBA, 0x0, 1, 3}, + {0xB9, 0xBA, 0, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xAF, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x95, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 3, 255}, + {0xBA, 0xBA, 0, 4}, + {0xB9, 0x9, 1, 3}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBB, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xAC, 0xAC, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x98, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB8, 0xB8, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 2, 255}, + {0xBA, 0xBA, 0, 3}, + {0xB9, 0x0, 1, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0x99, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xAE, 0xAE, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 2, 255}, + {0xAF, 0x0, 1, 255}, + {0xAE, 0xAE, 0, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB6, 0xB6, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 31, 255}, + {0xB1, 0x5A, 1, 255}, + {0x9F, 0x57, 1, 255}, + {0x9E, 0x54, 1, 255}, + {0x9C, 0x51, 1, 255}, + {0x9B, 0x4E, 1, 255}, + {0x9A, 0x4B, 1, 255}, + {0x99, 0x48, 1, 255}, + {0x98, 0x45, 1, 255}, + {0x97, 0x42, 1, 255}, + {0x96, 0x3F, 1, 255}, + {0x95, 0x3C, 1, 255}, + {0x94, 0x39, 1, 255}, + {0x93, 0x36, 1, 255}, + {0x92, 0x33, 1, 255}, + {0x91, 0x30, 1, 255}, + {0x90, 0x2D, 1, 255}, + {0x8F, 0x2A, 1, 255}, + {0x8E, 0x27, 1, 255}, + {0x8D, 0x24, 1, 255}, + {0x8C, 0x21, 1, 255}, + {0x8B, 0x1E, 1, 255}, + {0x8A, 0x1B, 1, 255}, + {0x89, 0x18, 1, 255}, + {0x87, 0x15, 1, 255}, + {0x86, 0x12, 1, 255}, + {0x85, 0xF, 1, 255}, + {0x84, 0xC, 1, 255}, + {0x83, 0x9, 1, 255}, + {0x82, 0x6, 1, 255}, + {0x81, 0x3, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 61}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 63}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 65}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 67}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 69}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 71}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 73}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 75}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 77}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 79}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 81}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 83}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 85}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 87}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 89}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 91}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 93}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 95}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 97}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 99}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 101}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 103}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 105}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 107}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 109}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 111}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 113}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 115}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 117}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 119}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xAC, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 30, 255}, + {0x9F, 0x57, 1, 255}, + {0x9E, 0x54, 1, 255}, + {0x9C, 0x51, 1, 255}, + {0x9B, 0x4E, 1, 255}, + {0x9A, 0x4B, 1, 255}, + {0x99, 0x48, 1, 255}, + {0x98, 0x45, 1, 255}, + {0x97, 0x42, 1, 255}, + {0x96, 0x3F, 1, 255}, + {0x95, 0x3C, 1, 255}, + {0x94, 0x39, 1, 255}, + {0x93, 0x36, 1, 255}, + {0x92, 0x33, 1, 255}, + {0x91, 0x30, 1, 255}, + {0x90, 0x2D, 1, 255}, + {0x8F, 0x2A, 1, 255}, + {0x8E, 0x27, 1, 255}, + {0x8D, 0x24, 1, 255}, + {0x8C, 0x21, 1, 255}, + {0x8B, 0x1E, 1, 255}, + {0x8A, 0x1B, 1, 255}, + {0x89, 0x18, 1, 255}, + {0x87, 0x15, 1, 255}, + {0x86, 0x12, 1, 255}, + {0x85, 0xF, 1, 255}, + {0x84, 0xC, 1, 255}, + {0x83, 0x9, 1, 255}, + {0x82, 0x6, 1, 255}, + {0x81, 0x3, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 3}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 5}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 7}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 9}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 11}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 13}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 15}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 17}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 19}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 21}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 23}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 25}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 27}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 29}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 31}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 33}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 35}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 37}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 39}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 41}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 43}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 45}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 47}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 49}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 51}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 53}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 55}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 57}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 59}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 36, 255}, + {0xAC, 0xF7, 1, 197}, + {0xAB, 0x69, 1, 196}, + {0xA1, 0x66, 1, 255}, + {0xA0, 0x63, 1, 255}, + {0x9F, 0x60, 1, 255}, + {0x9E, 0x5D, 1, 255}, + {0x9D, 0x5A, 1, 255}, + {0x9C, 0x57, 1, 255}, + {0x9B, 0x54, 1, 255}, + {0x9A, 0x51, 1, 255}, + {0x99, 0x4E, 1, 255}, + {0x98, 0x4B, 1, 255}, + {0x97, 0x48, 1, 255}, + {0x96, 0x45, 1, 255}, + {0x95, 0x42, 1, 255}, + {0x94, 0x3F, 1, 255}, + {0x93, 0x3C, 1, 255}, + {0x92, 0x39, 1, 255}, + {0x91, 0x36, 1, 255}, + {0x90, 0x33, 1, 255}, + {0x8F, 0x30, 1, 255}, + {0x8E, 0x2D, 1, 255}, + {0x8D, 0x2A, 1, 255}, + {0x8C, 0x27, 1, 255}, + {0x8B, 0x24, 1, 255}, + {0x8A, 0x21, 1, 255}, + {0x89, 0x1E, 1, 255}, + {0x88, 0x1B, 1, 255}, + {0x87, 0x18, 1, 255}, + {0x86, 0x15, 1, 255}, + {0x85, 0x12, 1, 255}, + {0x84, 0xC, 1, 255}, + {0x83, 0x9, 1, 255}, + {0x82, 0x6, 1, 255}, + {0x81, 0x3, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 131}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 133}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 135}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 137}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 139}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xB9, 0, 4}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 140}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 142}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 144}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 146}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 147}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 149}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 151}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 153}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 155}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 157}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 159}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 161}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 163}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 165}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 167}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 169}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 171}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 173}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 175}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 177}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 179}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 181}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 183}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 185}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 187}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 188}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 190}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 192}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 193}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 35, 255}, + {0xBA, 0xBA, 0, 194}, + {0xA1, 0x66, 1, 255}, + {0xA0, 0x63, 1, 255}, + {0x9F, 0x60, 1, 255}, + {0x9E, 0x5D, 1, 255}, + {0x9D, 0x5A, 1, 255}, + {0x9C, 0x57, 1, 255}, + {0x9B, 0x54, 1, 255}, + {0x9A, 0x51, 1, 255}, + {0x99, 0x4E, 1, 255}, + {0x98, 0x4B, 1, 255}, + {0x97, 0x48, 1, 255}, + {0x96, 0x45, 1, 255}, + {0x95, 0x42, 1, 255}, + {0x94, 0x3F, 1, 255}, + {0x93, 0x3C, 1, 255}, + {0x92, 0x39, 1, 255}, + {0x91, 0x36, 1, 255}, + {0x90, 0x33, 1, 255}, + {0x8F, 0x30, 1, 255}, + {0x8E, 0x2D, 1, 255}, + {0x8D, 0x2A, 1, 255}, + {0x8C, 0x27, 1, 255}, + {0x8B, 0x24, 1, 255}, + {0x8A, 0x21, 1, 255}, + {0x89, 0x1E, 1, 255}, + {0x88, 0x1B, 1, 255}, + {0x87, 0x18, 1, 255}, + {0x86, 0x15, 1, 255}, + {0x85, 0x12, 1, 255}, + {0x84, 0xC, 1, 255}, + {0x83, 0x9, 1, 255}, + {0x82, 0x6, 1, 255}, + {0x81, 0x3, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 5}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 7}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 9}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 11}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 13}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xB9, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 14}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 16}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 18}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 20}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 21}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 23}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 25}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 27}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 29}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 31}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 33}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 35}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 37}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 39}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 41}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 43}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 45}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 47}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 49}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 51}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 53}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 55}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 57}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 59}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 61}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 62}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 64}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 66}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 67}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 35, 255}, + {0xBA, 0xBA, 0, 195}, + {0xA1, 0x6A, 1, 255}, + {0xA0, 0x67, 1, 255}, + {0x9F, 0x64, 1, 255}, + {0x9E, 0x61, 1, 255}, + {0x9D, 0x5E, 1, 255}, + {0x9C, 0x5B, 1, 255}, + {0x9B, 0x58, 1, 255}, + {0x9A, 0x55, 1, 255}, + {0x99, 0x52, 1, 255}, + {0x98, 0x4F, 1, 255}, + {0x97, 0x4C, 1, 255}, + {0x96, 0x49, 1, 255}, + {0x95, 0x46, 1, 255}, + {0x94, 0x43, 1, 255}, + {0x93, 0x40, 1, 255}, + {0x92, 0x3D, 1, 255}, + {0x91, 0x3A, 1, 255}, + {0x90, 0x37, 1, 255}, + {0x8F, 0x34, 1, 255}, + {0x8E, 0x31, 1, 255}, + {0x8D, 0x2E, 1, 255}, + {0x8C, 0x2B, 1, 255}, + {0x8B, 0x28, 1, 255}, + {0x8A, 0x25, 1, 255}, + {0x89, 0x22, 1, 255}, + {0x88, 0x1F, 1, 255}, + {0x87, 0x1C, 1, 255}, + {0x86, 0x19, 1, 255}, + {0x85, 0x16, 1, 255}, + {0x84, 0x10, 1, 255}, + {0x83, 0xD, 1, 255}, + {0x82, 0xA, 1, 255}, + {0x81, 0x7, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 2, 255}, + {0xBA, 0x0, 1, 69}, + {0xB9, 0xBA, 0, 68}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBB, 0xBB, 0, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 70}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 72}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 74}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 76}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xB9, 0, 3}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 77}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 79}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 81}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 83}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 84}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 86}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 88}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 90}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 92}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 94}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 96}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 98}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 100}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 102}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 104}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 106}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 108}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 110}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 112}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 114}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 116}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 118}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 120}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 122}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 124}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 125}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 127}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 129}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 130}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 36, 255}, + {0xB6, 0xFE, 1, 134}, + {0xAF, 0x71, 1, 133}, + {0xA1, 0x6E, 1, 255}, + {0xA0, 0x6B, 1, 255}, + {0x9F, 0x68, 1, 255}, + {0x9E, 0x65, 1, 255}, + {0x9D, 0x62, 1, 255}, + {0x9C, 0x5F, 1, 255}, + {0x9B, 0x5C, 1, 255}, + {0x9A, 0x59, 1, 255}, + {0x99, 0x4E, 1, 255}, + {0x98, 0x4B, 1, 255}, + {0x97, 0x48, 1, 255}, + {0x96, 0x45, 1, 255}, + {0x95, 0x42, 1, 255}, + {0x94, 0x3F, 1, 255}, + {0x93, 0x3C, 1, 255}, + {0x92, 0x39, 1, 255}, + {0x91, 0x36, 1, 255}, + {0x90, 0x33, 1, 255}, + {0x8F, 0x30, 1, 255}, + {0x8E, 0x2D, 1, 255}, + {0x8D, 0x2A, 1, 255}, + {0x8C, 0x27, 1, 255}, + {0x8B, 0x24, 1, 255}, + {0x8A, 0x21, 1, 255}, + {0x89, 0x1E, 1, 255}, + {0x88, 0x1B, 1, 255}, + {0x87, 0x18, 1, 255}, + {0x86, 0x15, 1, 255}, + {0x85, 0x12, 1, 255}, + {0x84, 0xC, 1, 255}, + {0x83, 0x9, 1, 255}, + {0x82, 0x6, 1, 255}, + {0x81, 0x3, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 68}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 70}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 72}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 74}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 76}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xB9, 0, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 77}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 79}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 81}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 83}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 84}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 86}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 88}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 90}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 92}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 94}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 96}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 98}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 100}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 102}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 104}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 106}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 108}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 110}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 112}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 114}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 3, 255}, + {0xBA, 0x3, 1, 117}, + {0xB9, 0xBA, 0, 116}, + {0xB7, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 3}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB8, 0xB8, 0, 4}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 118}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 120}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 122}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 124}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 125}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 127}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 129}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 130}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 34, 255}, + {0xA1, 0x66, 1, 255}, + {0xA0, 0x63, 1, 255}, + {0x9F, 0x60, 1, 255}, + {0x9E, 0x5D, 1, 255}, + {0x9D, 0x5A, 1, 255}, + {0x9C, 0x57, 1, 255}, + {0x9B, 0x54, 1, 255}, + {0x9A, 0x51, 1, 255}, + {0x99, 0x4E, 1, 255}, + {0x98, 0x4B, 1, 255}, + {0x97, 0x48, 1, 255}, + {0x96, 0x45, 1, 255}, + {0x95, 0x42, 1, 255}, + {0x94, 0x3F, 1, 255}, + {0x93, 0x3C, 1, 255}, + {0x92, 0x39, 1, 255}, + {0x91, 0x36, 1, 255}, + {0x90, 0x33, 1, 255}, + {0x8F, 0x30, 1, 255}, + {0x8E, 0x2D, 1, 255}, + {0x8D, 0x2A, 1, 255}, + {0x8C, 0x27, 1, 255}, + {0x8B, 0x24, 1, 255}, + {0x8A, 0x21, 1, 255}, + {0x89, 0x1E, 1, 255}, + {0x88, 0x1B, 1, 255}, + {0x87, 0x18, 1, 255}, + {0x86, 0x15, 1, 255}, + {0x85, 0x12, 1, 255}, + {0x84, 0xC, 1, 255}, + {0x83, 0x9, 1, 255}, + {0x82, 0x6, 1, 255}, + {0x81, 0x3, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 5}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 7}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 9}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 11}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 13}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xB9, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 14}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 16}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 18}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 20}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 21}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 23}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 25}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 27}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 29}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 31}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 33}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 35}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 37}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 39}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 41}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 43}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 45}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 47}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 49}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 51}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 53}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 55}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 57}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 59}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 61}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 62}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 64}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 66}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 67}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB7, 0xB8, 0, 131}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 34, 255}, + {0xA1, 0x66, 1, 255}, + {0xA0, 0x63, 1, 255}, + {0x9F, 0x60, 1, 255}, + {0x9E, 0x5D, 1, 255}, + {0x9D, 0x5A, 1, 255}, + {0x9C, 0x57, 1, 255}, + {0x9B, 0x54, 1, 255}, + {0x9A, 0x51, 1, 255}, + {0x99, 0x4E, 1, 255}, + {0x98, 0x4B, 1, 255}, + {0x97, 0x48, 1, 255}, + {0x96, 0x45, 1, 255}, + {0x95, 0x42, 1, 255}, + {0x94, 0x3F, 1, 255}, + {0x93, 0x3C, 1, 255}, + {0x92, 0x39, 1, 255}, + {0x91, 0x36, 1, 255}, + {0x90, 0x33, 1, 255}, + {0x8F, 0x30, 1, 255}, + {0x8E, 0x2D, 1, 255}, + {0x8D, 0x2A, 1, 255}, + {0x8C, 0x27, 1, 255}, + {0x8B, 0x24, 1, 255}, + {0x8A, 0x21, 1, 255}, + {0x89, 0x1E, 1, 255}, + {0x88, 0x1B, 1, 255}, + {0x87, 0x18, 1, 255}, + {0x86, 0x15, 1, 255}, + {0x85, 0x12, 1, 255}, + {0x84, 0xC, 1, 255}, + {0x83, 0x9, 1, 255}, + {0x82, 0x6, 1, 255}, + {0x81, 0x3, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 4}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 6}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 8}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 10}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xB9, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 11}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 13}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 15}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 17}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 18}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 20}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 22}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 24}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 26}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 28}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 30}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 32}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 34}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 36}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 38}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 40}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 42}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 44}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 46}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 48}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 50}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 52}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 54}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 56}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 58}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 59}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 61}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 63}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 64}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 35, 255}, + {0xB6, 0x71, 1, 69}, + {0xA1, 0x6E, 1, 255}, + {0xA0, 0x6B, 1, 255}, + {0x9F, 0x68, 1, 255}, + {0x9E, 0x65, 1, 255}, + {0x9D, 0x62, 1, 255}, + {0x9C, 0x5F, 1, 255}, + {0x9B, 0x5C, 1, 255}, + {0x9A, 0x59, 1, 255}, + {0x99, 0x4E, 1, 255}, + {0x98, 0x4B, 1, 255}, + {0x97, 0x48, 1, 255}, + {0x96, 0x45, 1, 255}, + {0x95, 0x42, 1, 255}, + {0x94, 0x3F, 1, 255}, + {0x93, 0x3C, 1, 255}, + {0x92, 0x39, 1, 255}, + {0x91, 0x36, 1, 255}, + {0x90, 0x33, 1, 255}, + {0x8F, 0x30, 1, 255}, + {0x8E, 0x2D, 1, 255}, + {0x8D, 0x2A, 1, 255}, + {0x8C, 0x27, 1, 255}, + {0x8B, 0x24, 1, 255}, + {0x8A, 0x21, 1, 255}, + {0x89, 0x1E, 1, 255}, + {0x88, 0x1B, 1, 255}, + {0x87, 0x18, 1, 255}, + {0x86, 0x15, 1, 255}, + {0x85, 0x12, 1, 255}, + {0x84, 0xC, 1, 255}, + {0x83, 0x9, 1, 255}, + {0x82, 0x6, 1, 255}, + {0x81, 0x3, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 4}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 6}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 8}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 10}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 12}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xB9, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 13}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 15}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 17}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 19}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 20}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 22}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 24}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 26}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 28}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 30}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 32}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 34}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 36}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 38}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 40}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 42}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 44}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 46}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 48}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 50}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 3, 255}, + {0xBA, 0x3, 1, 53}, + {0xB9, 0xBA, 0, 52}, + {0xB7, 0x0, 1, 255}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB8, 0xB8, 0, 3}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 54}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 56}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 58}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 60}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 61}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xBA, 0, 63}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 65}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 66}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB7, 0xB8, 0, 67}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB8, 0xB8, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0x0, 1, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xB9, 0xB9, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBA, 0xBA, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 2, 255}, + {0xBE, 0xBE, 0, 3}, + {0xBD, 0x0, 1, 2}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xAD, 0x0, 1, 255}, + {0x8D, 0x0, 1, 255}, + {0xE0, 0x0, 1, 255}, + {0xAC, 0x0, 1, 255}, + {0xB7, 0xB7, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x87, 0x87, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x86, 0x86, 0, 2}, + {0x82, 0x82, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0xA6, 0xA7, 0, 1}, + {0xCC, 0x0, 4, 255}, + {0x8A, 0x8A, 0, 5}, + {0x87, 0x88, 0, 3}, + {0x83, 0x83, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x83, 0x83, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 4, 255}, + {0xA8, 0xA8, 0, 5}, + {0x8B, 0x8B, 0, 4}, + {0x88, 0x88, 0, 3}, + {0x82, 0x83, 0, 1}, + {0x72, 0x72, 0, 1}, + {0x72, 0x72, 0, 2}, + {0x52, 0x52, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8B, 0x8B, 0, 3}, + {0x88, 0x88, 0, 2}, + {0x82, 0x82, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xAF, 0x0, 1, 255}, + {0x8D, 0x0, 1, 3}, + {0xE0, 0x0, 1, 255}, + {0xAE, 0x0, 1, 255}, + {0xB7, 0x0, 1, 2}, + {0xE0, 0x0, 1, 255}, + {0xAF, 0x0, 1, 255}, + {0x8D, 0x8D, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xAF, 0x0, 1, 255}, + {0x8D, 0x8D, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xB9, 0x1, 1, 255}, + {0xB8, 0x0, 1, 255}, + {0xB2, 0xB2, 0, 1}, + {0x85, 0x85, 0, 2}, + {0xCC, 0x0, 2, 255}, + {0x84, 0x84, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xDA, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0xDA, 0x1, 1, 255}, + {0xD9, 0x0, 1, 255}, + {0x94, 0x94, 0, 1}, + {0xBE, 0xBE, 0, 2}, + {0xCC, 0x0, 2, 255}, + {0x9B, 0x9B, 0, 2}, + {0x82, 0x82, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x9B, 0x9B, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x61, 0x61, 0, 2}, + {0x88, 0x0, 1, 255}, + {0x61, 0x0, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x88, 0x88, 0, 1}, + {0xC3, 0x0, 1, 255}, + {0xA4, 0xA4, 0, 1}, + {0x65, 0x65, 0, 1}, + {0x69, 0x69, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x6F, 0x6F, 0, 2}, + {0x88, 0x0, 1, 255}, + {0x6F, 0x0, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x88, 0x88, 0, 1}, + {0xC3, 0x0, 1, 255}, + {0xB6, 0xB6, 0, 1}, + {0x63, 0x0, 1, 255}, + {0x68, 0x68, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x75, 0x75, 0, 2}, + {0x88, 0x0, 1, 255}, + {0x75, 0x0, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x88, 0x88, 0, 1}, + {0xC3, 0x0, 1, 255}, + {0xBC, 0xBC, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8C, 0x8C, 0, 4}, + {0x84, 0x84, 0, 3}, + {0x80, 0x81, 0, 1}, + {0xCC, 0x0, 4, 255}, + {0x8C, 0x8C, 0, 8}, + {0x84, 0x84, 0, 7}, + {0x82, 0x0, 1, 255}, + {0x80, 0x81, 0, 5}, + {0xCC, 0x0, 3, 255}, + {0x8C, 0x8C, 0, 4}, + {0x84, 0x84, 0, 3}, + {0x80, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x8C, 0x8C, 0, 2}, + {0x84, 0x84, 0, 1}, + {0xCC, 0x0, 4, 255}, + {0x8C, 0x8C, 0, 9}, + {0x88, 0x0, 1, 8}, + {0x84, 0x84, 0, 7}, + {0x80, 0x81, 0, 5}, + {0xCC, 0x0, 3, 255}, + {0x8C, 0x8C, 0, 4}, + {0x84, 0x84, 0, 3}, + {0x80, 0x81, 0, 1}, +} + +// Total size of mainTable is 1253028 bytes diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/Makefile b/vendor/golang.org/x/text/collate/tools/colcmp/Makefile new file mode 100644 index 0000000..1cf7822 --- /dev/null +++ b/vendor/golang.org/x/text/collate/tools/colcmp/Makefile @@ -0,0 +1,7 @@ +# Copyright 2012 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +chars: + go run ../../maketables.go -tables=chars -package=main > chars.go + gofmt -w -s chars.go diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/chars.go b/vendor/golang.org/x/text/collate/tools/colcmp/chars.go new file mode 100644 index 0000000..9f3b9d7 --- /dev/null +++ b/vendor/golang.org/x/text/collate/tools/colcmp/chars.go @@ -0,0 +1,1156 @@ +// Generated by running +// maketables -root=http://unicode.org/Public/UCA/6.2.0/CollationAuxiliary.zip -cldr=http://www.unicode.org/Public/cldr/23/core.zip +// DO NOT EDIT +// TODO: implement more compact representation for sparse blocks. + +package main + +type exemplarType int + +const ( + exCharacters exemplarType = iota + exContractions + exPunctuation + exAuxiliary + exCurrency + exIndex + exN +) + +var exemplarCharacters = map[string][exN]string{ + "aa": { + 0: "a b t s e c k x i d q r f g o l m n u w h y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "j p v z", + 5: "A B T S E C K X I D Q R F G O L M N U W H Y", + }, + "af": { + 0: "a á â b c d e é è ê ë f g h i î ï j k l m n o ô ö p q r s t u û v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à â ä ã æ ç é è ê ë í ì î ï ó ò ô ö ú ù û ü ý", + }, + "agq": { + 0: "a à â ǎ ā b c d e è ê ě ē ɛ ɛ̀ ɛ̂ ɛ̌ ɛ̄ f g h i ì î ǐ ī ɨ ɨ̀ ɨ̂ ɨ̌ ɨ̄ k l m n ŋ o ò ô ǒ ō ɔ ɔ̀ ɔ̂ ɔ̌ ɔ̄ p s t u ù û ǔ ū ʉ ʉ̀ ʉ̂ ʉ̌ ʉ̄ v w y z ʔ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q r x", + 5: "A B C D E Ɛ F G H I Ɨ K L M N Ŋ O Ɔ P S T U Ʉ V W Y Z ʔ", + }, + "ak": { + 0: "a b d e ɛ f g h i k l m n o ɔ p r s t u w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c j q v z", + 5: "A B C D E Ɛ F G H I J K L M N O Ɔ P Q R S T U V W X Y Z", + }, + "am": { + 0: "፟ ሀ ሀ ሁ ሂ ሃ ሄ ህ ሆ ለ ለ ሉ ሊ ላ ሌ ል ሎ ሏ ሐ ሑ ሒ ሓ ሔ ሕ ሖ ሗ መ ሙ ሚ ማ ሜ ም ሞ ሟ ሠ ሡ ሢ ሣ ሤ ሥ ሦ ሧ ረ ሩ ሪ ራ ሬ ር ሮ ሯ ሰ ሱ ሲ ሳ ሴ ስ ሶ ሷ ሸ ሹ ሺ ሻ ሼ ሽ ሾ ሿ ቀ ቁ ቂ ቃ ቄ ቅ ቆ ቈ ቊ ቊ ቋ ቌ ቍ በ በ ቡ ቢ ባ ቤ ብ ቦ ቧ ቨ ቩ ቪ ቫ ቬ ቭ ቮ ቯ ተ ቱ ቲ ታ ቴ ት ቶ ቷ ቸ ቹ ቺ ቻ ቼ ች ቾ ቿ ኀ ኁ ኂ ኃ ኄ ኅ ኆ ኈ ኊ ኊ ኋ ኌ ኍ ነ ነ ኑ ኒ ና ኔ ን ኖ ኗ ኘ ኙ ኚ ኛ ኜ ኝ ኞ ኟ አ ኡ ኢ ኣ ኤ እ ኦ ኧ ከ ኩ ኪ ካ ኬ ክ ኮ ኰ ኲ ኲ ኳ ኴ ኵ ኸ ኸ ኹ ኺ ኻ ኼ ኽ ኾ ወ ወ ዉ ዊ ዋ ዌ ው ዎ ዐ ዐ ዑ ዒ ዓ ዔ ዕ ዖ ዘ ዘ ዙ ዚ ዛ ዜ ዝ ዞ ዟ ዠ ዡ ዢ ዣ ዤ ዥ ዦ ዧ የ ዩ ዪ ያ ዬ ይ ዮ ዯ ደ ዱ ዲ ዳ ዴ ድ ዶ ዷ ጀ ጀ ጁ ጂ ጃ ጄ ጅ ጆ ጇ ገ ጉ ጊ ጋ ጌ ግ ጎ ጐ ጒ ጒ ጓ ጔ ጕ ጠ ጠ ጡ ጢ ጣ ጤ ጥ ጦ ጧ ጨ ጩ ጪ ጫ ጬ ጭ ጮ ጯ ጰ ጱ ጲ ጳ ጴ ጵ ጶ ጷ ጸ ጹ ጺ ጻ ጼ ጽ ጾ ጿ ፀ ፁ ፂ ፃ ፄ ፅ ፆ ፇ ፈ ፉ ፊ ፋ ፌ ፍ ፎ ፏ ፐ ፑ ፒ ፓ ፔ ፕ ፖ ፗ ፘ ፙ ፚ", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "ar": { + 0: "ً ٌ ٍ َ ُ ِ ّ ْ ٰ ء آ أ ؤ إ ئ ا ب ت ة ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي ى", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d \u200e \u200f ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ پ چ ژ ڜ ڢ ڤ ڥ ٯ ڧ ڨ ک گ ی", + 5: "ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي", + }, + "as": { + 0: "অ আ ই ঈ উ ঊ ঋ এ ঐ ও ঔ ং ঁ ঃ ক ক্ষ খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ড় ড় ঢ ঢ় ঢ় ণ ত থ দ ধ ন প ফ ব ভ ম য য় ৰ ল ৱ শ ষ স হ া ি ী ু ূ ৃ ে ৈ ো ৌ ্", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d ৲", + }, + "asa": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "ast": { + 0: "a á b c d e é f g h ḥ i í l ḷ m n ñ o ó p q r s t u ú ü v x y z", + 2: "- ‐ – — , ; : ! ¡ ? ¿ . … ' ‘ ’ \" “ ” « » ( ) [ ] § @ * / \\ & # † ‡ ′ ″", + 3: "ª à ă â å ä ã ā æ ç è ĕ ê ë ē ì ĭ î ï ī j k º ò ŏ ô ö ø ō œ ù ŭ û ū w ÿ", + 5: "A B C D E F G H I L M N Ñ O P Q R S T U V X Y Z", + }, + "az": { + 0: "a b c ç d e ə f g ğ h x ı i İ j k q l m n o ö p r s ş t u ü v y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "w", + }, + "az-Cyrl": { + 0: "а ә б в г ғ д е ж з и й ј к ҝ л м н о ө п р с т у ү ф х һ ч ҹ ш ы", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ц щ ъ ь э ю я", + }, + "bas": { + 0: "a á à â ǎ ā a᷆ a᷇ b ɓ c d e é è ê ě ē e᷆ e᷇ ɛ ɛ́ ɛ̀ ɛ̂ ɛ̌ ɛ̄ ɛ᷆ ɛ᷇ f g h i í ì î ǐ ī i᷆ i᷇ j k l m n ń ǹ ŋ o ó ò ô ǒ ō o᷆ o᷇ ɔ ɔ́ ɔ̀ ɔ̂ ɔ̌ ɔ̄ ɔ᷆ ɔ᷇ p r s t u ú ù û ǔ ū u᷆ u᷇ v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B Ɓ C D E Ɛ F G H I J K L M N Ŋ O Ɔ P R S T U V W Y Z", + }, + "be": { + 0: "а б в г д дж дз е ё ж з і й к л м н о п р с т у ў ф х ц ч ш ы ь э ю я", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "bem": { + 0: "a b c e f g i j k l m n o p s sh t u w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "d h q r v x z", + 5: "A B C E F G I J K L M N O P S SH T U W Y", + }, + "bez": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "x", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W Y Z", + }, + "bg": { + 0: "а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ь ю я", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "а̀ ѐ ё ѝ о̀ у̀ ъ̀ ы ѣ э ю̀ я̀ ѫ", + }, + "bm": { + 0: "a b c d e ɛ f g h i j k l m n ɲ ŋ o ɔ p r s t u w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q v x", + 5: "A B C D E Ɛ F G H I J K L M N Ɲ Ŋ O Ɔ P R S T U W Y Z", + }, + "bn": { + 0: "় ৺ অ আ ই ঈ উ ঊ ঋ ৠ ঌ ৡ এ ঐ ও ঔ ং ঃ ঁ ক ক্ষ খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ড় ঢ ঢ় ণ ত ৎ থ দ ধ ন প ফ ব ভ ম য য় র ল শ ষ স হ ঽ া ি ী ু ূ ৃ ৄ ৢ ৣ ে ৈ ো ৌ ্ ৗ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৰ ৱ", + }, + "bn-IN": { + 0: "় ৺ অ আ ই ঈ উ ঊ ঋ ৠ ঌ ৡ এ ঐ ও ঔ ং ঃ ঁ ক ক্ষ খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ড় ঢ ঢ় ণ ত ৎ থ দ ধ ন প ফ ব ভ ম য য় র ল শ ষ স হ ঽ া ি ী ু ূ ৃ ৄ ৢ ৣ ে ৈ ো ৌ ্ ৗ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৰ ৱ", + }, + "bo": { + 0: "ཾ ཿ ཀ ཀྵ ྐ ྐྵ ཁ ྑ ག གྷ ྒ ྒྷ ང ྔ ཅ ྕ ཆ ྖ ཇ ྗ ཉ ྙ ཊ ྚ ཋ ྛ ཌ ཌྷ ྜ ྜྷ ཎ ྞ ཏ ྟ ཐ ྠ ད དྷ ྡ ྡྷ ན ྣ པ ྤ ཕ ྥ བ བྷ ྦ ྦྷ མ ྨ ཙ ྩ ཚ ྪ ཛ ཛྷ ྫ ྫྷ ཝ ྭ ྺ ཞ ྮ ཟ ྯ འ ྰ ཡ ྱ ྻ ར ཪ ྲ ྼ ལ ླ ཤ ྴ ཥ ྵ ས ྶ ཧ ྷ ཨ ྸ ི ཱི ྀ ཱྀ ུ ཱུ ྲྀ ཷ ླྀ ཹ ཹ ེ ཻ ོ ཽ ྄", + 3: "ༀ", + }, + "br": { + 0: "a b ch cʼh d e ê f g h i j k l m n ñ o p r s t u ù v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à ă â å ä ã ā æ c ç é è ĕ ë ē í ì ĭ î ï ī ó ò ŏ ô ö ø ō œ q ú ŭ û ü ū ÿ", + 5: "A B C D E F G H I J K L M N O P R S T U V W X Y Z", + }, + "brx": { + 0: "़ ँ ं अ आ इ ई उ ऊ ऍ ए ऐ ऑ ओ औ क ख ग घ च छ ज झ ञ ट ठ ड ड़ ढ ण त थ द ध न प फ ब भ म य र ल ळ व श ष स ह ा ि ी ु ू ृ ॅ े ै ॉ ो ौ ्", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + 5: "अ आ इ ई उ ऊ ऍ ए ऐ ऑ ओ औ क ख ग घ च छ ज झ ञ ट ठ ड ड़ ढ ण त थ द ध न प फ ब भ म य र ल ळ व श ष स ह", + }, + "bs": { + 0: "a b c č ć d dž đ e f g h i j k l lj m n nj o p r s š t u v z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q w x y", + }, + "bs-Cyrl": { + 0: "а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "byn": { + 0: "፟ ሀ ሀ ሁ ሂ ሃ ሄ ህ ሆ ለ ለ ሉ ሊ ላ ሌ ል ሎ ሏ ሐ ሑ ሒ ሓ ሔ ሕ ሖ ሗ መ ሙ ሚ ማ ሜ ም ሞ ሟ ረ ረ ሩ ሪ ራ ሬ ር ሮ ሯ ሰ ሱ ሲ ሳ ሴ ስ ሶ ሷ ሸ ሹ ሺ ሻ ሼ ሽ ሾ ሿ ቀ ቁ ቂ ቃ ቄ ቅ ቆ ቈ ቊ ቊ ቋ ቌ ቍ ቐ ቐ ቑ ቒ ቓ ቔ ቕ ቖ ቘ ቚ ቚ ቛ ቜ ቝ በ በ ቡ ቢ ባ ቤ ብ ቦ ቧ ቨ ቩ ቪ ቫ ቬ ቭ ቮ ቯ ተ ቱ ቲ ታ ቴ ት ቶ ቷ ቸ ቹ ቺ ቻ ቼ ች ቾ ቿ ኀ ኁ ኂ ኃ ኄ ኅ ኆ ኈ ኊ ኊ ኋ ኌ ኍ ነ ነ ኑ ኒ ና ኔ ን ኖ ኗ ኘ ኙ ኚ ኛ ኜ ኝ ኞ ኟ አ ኡ ኢ ኣ ኤ እ ኦ ኧ ከ ኩ ኪ ካ ኬ ክ ኮ ኰ ኲ ኲ ኳ ኴ ኵ ኸ ኸ ኹ ኺ ኻ ኼ ኽ ኾ ዀ ዂ ዂ ዃ ዄ ዅ ወ ወ ዉ ዊ ዋ ዌ ው ዎ ዐ ዐ ዑ ዒ ዓ ዔ ዕ ዖ ዘ ዘ ዙ ዚ ዛ ዜ ዝ ዞ ዟ ዠ ዡ ዢ ዣ ዤ ዥ ዦ ዧ የ ዩ ዪ ያ ዬ ይ ዮ ደ ደ ዱ ዲ ዳ ዴ ድ ዶ ዷ ጀ ጀ ጁ ጂ ጃ ጄ ጅ ጆ ጇ ገ ጉ ጊ ጋ ጌ ግ ጎ ጐ ጒ ጒ ጓ ጔ ጕ ጘ ጘ ጙ ጚ ጛ ጜ ጝ ጞ ጟ ⶓ ⶓ ⶔ ⶕ ⶖ ጠ ጠ ጡ ጢ ጣ ጤ ጥ ጦ ጧ ጨ ጩ ጪ ጫ ጬ ጭ ጮ ጯ ጸ ጸ ጹ ጺ ጻ ጼ ጽ ጾ ጿ ፈ ፈ ፉ ፊ ፋ ፌ ፍ ፎ ፏ ፐ ፑ ፒ ፓ ፔ ፕ ፖ ፗ", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "ca": { + 0: "a à b c ç d e é è f g h i í ï j k l ŀ m n o ó ò p q r s t u ú ü v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á ă â å ä ã ā æ ĕ ê ë ē ì ĭ î ī ñ º ŏ ô ö ø ō œ ù ŭ û ū ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "cgg": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "chr": { + 0: "Ꭰ Ꭱ Ꭲ Ꭳ Ꭴ Ꭵ Ꭶ Ꭷ Ꭸ Ꭹ Ꭺ Ꭻ Ꭼ Ꭽ Ꭾ Ꭿ Ꮀ Ꮁ Ꮂ Ꮃ Ꮄ Ꮅ Ꮆ Ꮇ Ꮈ Ꮉ Ꮊ Ꮋ Ꮌ Ꮍ Ꮎ Ꮏ Ꮐ Ꮑ Ꮒ Ꮓ Ꮔ Ꮕ Ꮖ Ꮗ Ꮘ Ꮙ Ꮚ Ꮛ Ꮜ Ꮝ Ꮞ Ꮟ Ꮠ Ꮡ Ꮢ Ꮣ Ꮤ Ꮥ Ꮦ Ꮧ Ꮨ Ꮩ Ꮪ Ꮫ Ꮬ Ꮭ Ꮮ Ꮯ Ꮰ Ꮱ Ꮲ Ꮳ Ꮴ Ꮵ Ꮶ Ꮷ Ꮸ Ꮹ Ꮺ Ꮻ Ꮼ Ꮽ Ꮾ Ꮿ Ᏸ Ᏹ Ᏺ Ᏻ Ᏼ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "Ꭰ Ꭶ Ꭽ Ꮃ Ꮉ Ꮎ Ꮖ Ꮜ Ꮣ Ꮬ Ꮳ Ꮹ Ꮿ", + }, + "cs": { + 0: "a á b c č d ď e é ě f g h ch i í j k l m n ň o ó p q r ř s š t ť u ú ů v w x y ý z ž", + 2: "- ‐ – , ; : ! ? . … ‘ ‚ “ „ ( ) [ ] § @ * / &", + 3: "á à ă â å ä ã ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ľ ł ñ ó ò ŏ ô ö ø ō œ ŕ ú ù ŭ û ü ū ÿ", + }, + "cy": { + 0: "a á à â ä b c ch d dd e é è ê ë f ff g ng h i í ì î ï j l ll m n o ó ò ô ö p ph r rh s t th u ú ù û ü w ẃ ẁ ŵ ẅ y ý ỳ ŷ ÿ", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "k q v x z", + 5: "A B C CH D DD E F FF G NG H I J L LL M N O P PH R RH S T TH U W Y", + }, + "da": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å", + 2: "- ‐ – , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ′ ″", + 3: "á à â ç é è ê ë í î ï ñ ó ô ú ù û ÿ ü æ ä ø ö œ å", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å", + }, + "dav": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "de": { + 0: "a ä b c d e f g h i j k l m n o ö p q r s ß t u ü v w x y z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ‚ \" “ „ « » ( ) [ ] { } § @ * / & #", + 3: "á à ă â å ã ā æ ç é è ĕ ê ë ē ğ í ì ĭ î ï İ ī ı ñ ó ò ŏ ô ø ō œ ş ú ù ŭ û ū ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S Sch* St* T U V W X Y Z", + }, + "dje": { + 0: "a ã b c d e ẽ f g h i j k l m n ɲ ŋ o õ p q r s š t u w x y z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "v", + 5: "A B C D E F G H I J K L M N Ɲ Ŋ O P Q R S T U W X Y Z", + }, + "dua": { + 0: "a á b ɓ c d ɗ e é ɛ ɛ́ f g i í j k l m n ny ŋ o ó ɔ ɔ́ p r s t u ú ū w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "h q v x z", + 5: "A B Ɓ C D Ɗ E Ɛ F G I J K L M N Ŋ O Ɔ P S T U W Y", + }, + "dyo": { + 0: "a á b c d e é f g h i í j k l m n ñ ŋ o ó p q r s t u ú v w x y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "z", + 5: "A B C D E F G H I J K L M N Ñ Ŋ O P Q R S T U V W X Y", + }, + "dz": { + 0: "ཀ ྐ ཁ ྑ ག ྒ ང ྔ ཅ ཆ ཇ ྗ ཉ ྙ ཏ ྟ ཐ ྠ ད ྡ ན ྣ པ ྤ ཕ ྥ བ ྦ མ ྨ ཙ ྩ ཚ ྪ ཛ ྫ ཝ ྭ ཞ ཟ འ ཡ ྱ ར ྲ ལ ླ ཤ ྵ ས ྶ ཧ ྷ ཨ ི ུ ེ ོ", + 2: "- ‐ – — , ; : ༔ ! ? . … ' ‘ ’ \" “ ” ( ) [ ] ༼ ༽ § @ * / & # † ‡ ༄ ༅ ༆ ༈ ༉ ༊ ࿐ ࿑ ༌ ། ༎ ༏ ༐ ༑ ༒ ࿒ ࿓ ࿔ ༴ ༶ ྾ ྿", + 3: "ཾ ཊ ྚ ཋ ྛ ཌ ྜ ཎ ྞ ྺ ྻ ྼ ཥ ྀ ཻ ཽ ྄", + }, + "ebu": { + 0: "a b c d e f g h i ĩ j k l m n o p q r s t u ũ v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I Ĩ J K L M N O P Q R S T U Ũ V W X Y Z", + }, + "ee": { + 0: "a á à ã b d ɖ e é è ẽ ɛ ɛ́ ɛ̀ ɛ̃ f ƒ g ɣ h x i í ì ĩ k l m n ŋ o ó ò õ ɔ ɔ́ ɔ̀ ɔ̃ p r s t u ú ù ũ v ʋ w y z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] { } § @ * / & # † ‡ ′ ″", + 3: "ă â å ä ā æ c ç ĕ ê ë ĭ î ï j ñ ŏ ô ö ø œ q ŭ û ü ÿ", + 5: "A B D Ɖ E Ɛ F Ƒ G Ɣ H X I K L M N Ŋ O Ɔ P R S T U V Ʋ W Y Z", + }, + "el": { + 0: "α ά β γ δ ε έ ζ η ή θ ι ί ϊ ΐ κ λ μ ν ξ ο ό π ρ σ ς τ υ ύ ϋ ΰ φ χ ψ ω ώ", + 2: "- ‐ – — , ; : ! . … \" ( ) [ ] § @ * / \\ &", + 3: "ἀ ἄ ἂ ἆ ἁ ἅ ἃ ἇ ὰ ᾶ ἐ ἔ ἒ ἑ ἕ ἓ ὲ ἠ ἤ ἢ ἦ ἡ ἥ ἣ ἧ ὴ ῆ ἰ ἴ ἲ ἶ ἱ ἵ ἳ ἷ ὶ ῖ ῒ ῗ ὄ ὂ ὃ ὸ ὐ ὔ ὒ ὖ ὑ ὕ ὓ ὗ ὺ ῦ ῢ ῧ ὤ ὢ ὦ ὥ ὣ ὧ ὼ ῶ", + 5: "Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω", + }, + "en": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "á à ă â å ä ã ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ö ø ō œ ú ù ŭ û ü ū ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "en-Dsrt": { + 0: "𐐨 𐐩 𐐪 𐐫 𐐬 𐐭 𐐮 𐐯 𐐰 𐐱 𐐲 𐐳 𐐴 𐐵 𐐶 𐐷 𐐸 𐐹 𐐺 𐐻 𐐼 𐐽 𐐾 𐐿 𐑀 𐑁 𐑂 𐑃 𐑄 𐑅 𐑆 𐑇 𐑈 𐑉 𐑊 𐑋 𐑌 𐑍 𐑎 𐑏", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + }, + "en-GB": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "á à ă â å ä ã ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ö ø ō œ ú ù ŭ û ü ū ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "en-ZA": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "eo": { + 0: "a b c ĉ d e f g ĝ h ĥ i j ĵ k l m n o p r s ŝ t u ŭ v z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q w x y", + 5: "A B C Ĉ D E F G Ĝ H Ĥ I J Ĵ K L M N O P R S Ŝ T U Ŭ V Z", + }, + "es": { + 0: "a á b c d e é f g h i í j k l m n ñ o ó p q r s t u ú ü v w x y z", + 2: "- ‐ – — , ; : ! ¡ ? ¿ . … ' ‘ ’ \" “ ” « » ( ) [ ] § @ * / \\ & # † ‡ ′ ″", + 3: "ª à ă â å ä ã ā æ ç è ĕ ê ë ē ì ĭ î ï ī º ò ŏ ô ö ø ō œ ù ŭ û ū ÿ", + 5: "A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z", + }, + "et": { + 0: "a b c d e f g h i j k l m n o p q r s š z ž t u v w õ ä ö ü x y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à â å ā æ ç é è ê ë ē í ì î ï ī ñ ó ò ŏ ô ø ō œ ú ù û ū", + 5: "A B C D E F G H I J K L M N O P Q R S Š Z Ž T U V Õ Ä Ö Ü X Y", + }, + "eu": { + 0: "a b c ç d e f g h i j k l m n ñ o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à ă â å ä ã ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ö ø ō œ ú ù ŭ û ü ū ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "ewo": { + 0: "a á à â ǎ b d dz e é è ê ě ə ə́ ə̀ ə̂ ə̌ ɛ ɛ́ ɛ̀ ɛ̂ ɛ̌ f g h i í ì î ǐ k kp l m n ń ǹ ng nk ŋ o ó ò ô ǒ ɔ ɔ́ ɔ̀ ɔ̂ ɔ̌ p r s t ts u ú ù û ǔ v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c j q x", + 5: "A B D E Ə Ɛ F G H I K L M N Ŋ O Ɔ P R S T U V W Y Z", + }, + "fa": { + 0: "ً ٍ ٌ ّ ٔ آ ا ء أ ؤ ئ ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ة ی", + 2: "- ‐ ، ٫ ٬ ؛ : ! ؟ . … « » ( ) [ ] * / \\", + 3: "\u200c \u200d \u200e \u200f َ ِ ُ ْ ٖ ٰ ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ إ ك ى ي", + 5: "آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی", + }, + "fa-AF": { + 0: "ً ٍ ٌ ّ ٔ آ ا ء أ ؤ ئ ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ة ی", + 2: "- ‐ ، ٫ ٬ ؛ : ! ؟ . … « » ( ) [ ] * / \\", + 3: "ٖ ٰ \u200c \u200d ټ ځ څ ډ ړ ږ ښ ګ ڼ ي", + 5: "آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی", + }, + "ff": { + 0: "a b ɓ c d ɗ e f g h i j k l m n ñ ŋ o p r s t u w y ƴ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q v x z", + 5: "A B Ɓ C D Ɗ E F G H I J K L M N Ñ Ŋ O P R S T U W Y Ƴ", + }, + "fi": { + 0: "a b c d e f g h i j k l m n o p q r s š t u v w x y z ž å ä ö", + 3: "á à â ã č ç đ é è ê ë ǧ ǥ ȟ í î ï ǩ ń ñ ŋ ô õ œ ř ß ŧ ú ù û ÿ ü ʒ ǯ æ ø", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Ä Ö", + }, + "fil": { + 0: "a b c d e f g h i j k l m n ñ ng o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à â é è ê í ì î ó ò ô ú ù û", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "fo": { + 0: "a á b d ð e f g h i í j k l m n o ó p r s t u ú v x y ý æ ø", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c q w z", + }, + "fr": { + 0: "a à â æ b c ç d e é è ê ë f g h i î ï j k l m n o ô œ p q r s t u ù û ü v w x y ÿ z", + 2: "- ‐ – — , ; : ! ? . … ’ \" “ ” « » ( ) [ ] § @ * / & # † ‡", + 3: "á å ä ã ā ē í ì ī ñ ó ò ö ø ú ǔ", + }, + "fur": { + 0: "a à â b c ç d e è ê f g h i ì î j k l m n o ò ô p q r s t u ù û v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "å č é ë ğ ï ñ ó š ü", + }, + "ga": { + 0: "a á b c d e é f g h i í l m n o ó p r s t u ú", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "å ḃ ċ ḋ ḟ ġ j k ṁ ṗ q ṡ ṫ v w x y z", + }, + "gd": { + 0: "a à b c d e è f g h i ì l m n o ò p r s t u ù", + 3: "á ċ ḋ é ḟ ġ j k ṁ ó ṗ q ṡ ṫ v w x y z", + 5: "A B C D E F G H I L M N O P R S T U", + }, + "gl": { + 0: "a á b c d e é f g h i í j k l m n ñ o ó p q r s t u ú ü v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z", + }, + "gsw": { + 0: "a ä b c d e f g h i j k l m n o ö p q r s t u ü v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à ă â å ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ø ō œ ú ù ŭ û ū ÿ", + }, + "gu": { + 0: "઼ ૐ ં ઁ ઃ અ આ ઇ ઈ ઉ ઊ ઋ ૠ ઍ એ ઐ ઑ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ ય ર લ વ શ ષ સ હ ળ ઽ ા િ ી ુ ૂ ૃ ૄ ૅ ે ૈ ૉ ો ૌ ્", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d ૰", + 5: "અ આ ઇ ઈ ઉ ઊ ઋ એ ઐ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ ય ર લ વ શ ષ સ હ ળ", + }, + "guz": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "gv": { + 0: "a b c ç d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "ha": { + 0: "a b ɓ c d ɗ e f g h i j k ƙ l m n o r s sh t ts u w y ʼy z ʼ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à â é è ê í ì î ó ò ô p q r̃ ú ù û v x ƴ", + }, + "haw": { + 0: "a ā e ē i ī o ō u ū h k l m n p w ʻ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "b c d f g j q r s t v x y z", + }, + "he": { + 0: "א ב ג ד ה ו ז ח ט י כ ך ל מ ם נ ן ס ע פ ף צ ץ ק ר ש ת", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ֽ ׄ \u200e \u200f ְ ֱ ֲ ֳ ִ ֵ ֶ ַ ָ ֹ ֻ ׂ ׁ ּ ֿ ־ ׳ ״", + 5: "א ב ג ד ה ו ז ח ט י כ ל מ נ ס ע פ צ ק ר ש ת", + }, + "hi": { + 0: "़ ॐ ं ँ ः अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल ळ व श ष स ह ऽ ा ि ी ु ू ृ ॄ ॅ े ै ॉ ो ौ ्", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + }, + "hr": { + 0: "a b c č ć d dž đ e f g h i j k l lj m n nj o p r s š t u v z ž", + 2: "‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] @ * / ′ ″", + 3: "q w x y", + 5: "A B C Č Ć D DŽ Đ E F G H I J K L LJ M N NJ O P Q R S Š T U V W X Y Z Ž", + }, + "hu": { + 0: "a á b c cs ccs d dz ddz dzs ddzs e é f g gy ggy h i í j k l ly lly m n ny nny o ó ö ő p r s sz ssz t ty tty u ú ü ű v z zs zzs", + 2: "- – , ; : ! ? . … ' ’ \" ” „ « » ( ) [ ] { } 〈 〉 § @ * / & # ⸓ ~", + 3: "à ă â å ä ã ā æ ç è ĕ ê ë ē ì ĭ î ï ī ñ ò ŏ ô ø ō œ q ù ŭ û ū w x y ÿ", + 5: "A Á B C CS D DZ DZS E É F G GY H I Í J K L LY M N NY O Ó Ö Ő P Q R S SZ T TY U Ú Ü Ű V W X Y Z ZS", + }, + "hy": { + 0: "ա բ գ դ ե զ է ը թ ժ ի լ խ ծ կ հ ձ ղ ճ մ յ ն շ ո չ պ ջ ռ ս վ տ ր ց ւ փ ք և օ ֆ", + 2: "֊ ՝ ՜ ՞ « » ՚ ՛ ՟", + }, + "ia": { + 0: "a b c ch d e f g h i j k l m n o p ph q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "id": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "‐ – — , ; : ! ? . … ' ‘ ’ “ ” ( ) [ ] /", + 3: "å q x z", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "ig": { + 0: "a b ch d e ẹ f g gb gh gw h i ị j k kp kw l m n ṅ nw ny o ọ p r s sh t u ụ v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "ii": { + 0: "ꀀ ꀀ ꀁ ꀂ ꀃ ꀄ ꀅ ꀆ ꀇ ꀈ ꀉ ꀊ ꀋ ꀌ ꀍ ꀎ ꀏ ꀐ ꀑ ꀒ ꀓ ꀔ ꀕ ꀖ ꀗ ꀘ ꀙ ꀚ ꀛ ꀜ ꀝ ꀞ ꀟ ꀠ ꀡ ꀢ ꀣ ꀤ ꀥ ꀦ ꀧ ꀨ ꀩ ꀪ ꀫ ꀬ ꀭ ꀮ ꀯ ꀰ ꀱ ꀲ ꀳ ꀴ ꀵ ꀶ ꀷ ꀸ ꀹ ꀺ ꀻ ꀼ ꀽ ꀾ ꀿ ꁀ ꁁ ꁂ ꁃ ꁄ ꁅ ꁆ ꁇ ꁈ ꁉ ꁊ ꁋ ꁌ ꁍ ꁎ ꁏ ꁐ ꁑ ꁒ ꁓ ꁔ ꁕ ꁖ ꁗ ꁘ ꁙ ꁚ ꁛ ꁜ ꁝ ꁞ ꁟ ꁠ ꁡ ꁢ ꁣ ꁤ ꁥ ꁦ ꁧ ꁨ ꁩ ꁪ ꁫ ꁬ ꁭ ꁮ ꁯ ꁰ ꁱ ꁲ ꁳ ꁴ ꁵ ꁶ ꁷ ꁸ ꁹ ꁺ ꁻ ꁼ ꁽ ꁾ ꁿ ꂀ ꂁ ꂂ ꂃ ꂄ ꂅ ꂆ ꂇ ꂈ ꂉ ꂊ ꂋ ꂌ ꂍ ꂎ ꂏ ꂐ ꂑ ꂒ ꂓ ꂔ ꂕ ꂖ ꂗ ꂘ ꂙ ꂚ ꂛ ꂜ ꂝ ꂞ ꂟ ꂠ ꂡ ꂢ ꂣ ꂤ ꂥ ꂦ ꂧ ꂨ ꂩ ꂪ ꂫ ꂬ ꂭ ꂮ ꂯ ꂰ ꂱ ꂲ ꂳ ꂴ ꂵ ꂶ ꂷ ꂸ ꂹ ꂺ ꂻ ꂼ ꂽ ꂾ ꂿ ꃀ ꃁ ꃂ ꃃ ꃄ ꃅ ꃆ ꃇ ꃈ ꃉ ꃊ ꃋ ꃌ ꃍ ꃎ ꃏ ꃐ ꃑ ꃒ ꃓ ꃔ ꃕ ꃖ ꃗ ꃘ ꃙ ꃚ ꃛ ꃜ ꃝ ꃞ ꃟ ꃠ ꃡ ꃢ ꃣ ꃤ ꃥ ꃦ ꃧ ꃨ ꃩ ꃪ ꃫ ꃬ ꃭ ꃮ ꃯ ꃰ ꃱ ꃲ ꃳ ꃴ ꃵ ꃶ ꃷ ꃸ ꃹ ꃺ ꃻ ꃼ ꃽ ꃾ ꃿ ꄀ ꄁ ꄂ ꄃ ꄄ ꄅ ꄆ ꄇ ꄈ ꄉ ꄊ ꄋ ꄌ ꄍ ꄎ ꄏ ꄐ ꄑ ꄒ ꄓ ꄔ ꄕ ꄖ ꄗ ꄘ ꄙ ꄚ ꄛ ꄜ ꄝ ꄞ ꄟ ꄠ ꄡ ꄢ ꄣ ꄤ ꄥ ꄦ ꄧ ꄨ ꄩ ꄪ ꄫ ꄬ ꄭ ꄮ ꄯ ꄰ ꄱ ꄲ ꄳ ꄴ ꄵ ꄶ ꄷ ꄸ ꄹ ꄺ ꄻ ꄼ ꄽ ꄾ ꄿ ꅀ ꅁ ꅂ ꅃ ꅄ ꅅ ꅆ ꅇ ꅈ ꅉ ꅊ ꅋ ꅌ ꅍ ꅎ ꅏ ꅐ ꅑ ꅒ ꅓ ꅔ ꅕ ꅖ ꅗ ꅘ ꅙ ꅚ ꅛ ꅜ ꅝ ꅞ ꅟ ꅠ ꅡ ꅢ ꅣ ꅤ ꅥ ꅦ ꅧ ꅨ ꅩ ꅪ ꅫ ꅬ ꅭ ꅮ ꅯ ꅰ ꅱ ꅲ ꅳ ꅴ ꅵ ꅶ ꅷ ꅸ ꅹ ꅺ ꅻ ꅼ ꅽ ꅾ ꅿ ꆀ ꆁ ꆂ ꆃ ꆄ ꆅ ꆆ ꆇ ꆈ ꆉ ꆊ ꆋ ꆌ ꆍ ꆎ ꆏ ꆐ ꆑ ꆒ ꆓ ꆔ ꆕ ꆖ ꆗ ꆘ ꆙ ꆚ ꆛ ꆜ ꆝ ꆞ ꆟ ꆠ ꆡ ꆢ ꆣ ꆤ ꆥ ꆦ ꆧ ꆨ ꆩ ꆪ ꆫ ꆬ ꆭ ꆮ ꆯ ꆰ ꆱ ꆲ ꆳ ꆴ ꆵ ꆶ ꆷ ꆸ ꆹ ꆺ ꆻ ꆼ ꆽ ꆾ ꆿ ꇀ ꇁ ꇂ ꇃ ꇄ ꇅ ꇆ ꇇ ꇈ ꇉ ꇊ ꇋ ꇌ ꇍ ꇎ ꇏ ꇐ ꇑ ꇒ ꇓ ꇔ ꇕ ꇖ ꇗ ꇘ ꇙ ꇚ ꇛ ꇜ ꇝ ꇞ ꇟ ꇠ ꇡ ꇢ ꇣ ꇤ ꇥ ꇦ ꇧ ꇨ ꇩ ꇪ ꇫ ꇬ ꇭ ꇮ ꇯ ꇰ ꇱ ꇲ ꇳ ꇴ ꇵ ꇶ ꇷ ꇸ ꇹ ꇺ ꇻ ꇼ ꇽ ꇾ ꇿ ꈀ ꈁ ꈂ ꈃ ꈄ ꈅ ꈆ ꈇ ꈈ ꈉ ꈊ ꈋ ꈌ ꈍ ꈎ ꈏ ꈐ ꈑ ꈒ ꈓ ꈔ ꈕ ꈖ ꈗ ꈘ ꈙ ꈚ ꈛ ꈜ ꈝ ꈞ ꈟ ꈠ ꈡ ꈢ ꈣ ꈤ ꈥ ꈦ ꈧ ꈨ ꈩ ꈪ ꈫ ꈬ ꈭ ꈮ ꈯ ꈰ ꈱ ꈲ ꈳ ꈴ ꈵ ꈶ ꈷ ꈸ ꈹ ꈺ ꈻ ꈼ ꈽ ꈾ ꈿ ꉀ ꉁ ꉂ ꉃ ꉄ ꉅ ꉆ ꉇ ꉈ ꉉ ꉊ ꉋ ꉌ ꉍ ꉎ ꉏ ꉐ ꉑ ꉒ ꉓ ꉔ ꉕ ꉖ ꉗ ꉘ ꉙ ꉚ ꉛ ꉜ ꉝ ꉞ ꉟ ꉠ ꉡ ꉢ ꉣ ꉤ ꉥ ꉦ ꉧ ꉨ ꉩ ꉪ ꉫ ꉬ ꉭ ꉮ ꉯ ꉰ ꉱ ꉲ ꉳ ꉴ ꉵ ꉶ ꉷ ꉸ ꉹ ꉺ ꉻ ꉼ ꉽ ꉾ ꉿ ꊀ ꊁ ꊂ ꊃ ꊄ ꊅ ꊆ ꊇ ꊈ ꊉ ꊊ ꊋ ꊌ ꊍ ꊎ ꊏ ꊐ ꊑ ꊒ ꊓ ꊔ ꊕ ꊖ ꊗ ꊘ ꊙ ꊚ ꊛ ꊜ ꊝ ꊞ ꊟ ꊠ ꊡ ꊢ ꊣ ꊤ ꊥ ꊦ ꊧ ꊨ ꊩ ꊪ ꊫ ꊬ ꊭ ꊮ ꊯ ꊰ ꊱ ꊲ ꊳ ꊴ ꊵ ꊶ ꊷ ꊸ ꊹ ꊺ ꊻ ꊼ ꊽ ꊾ ꊿ ꋀ ꋁ ꋂ ꋃ ꋄ ꋅ ꋆ ꋇ ꋈ ꋉ ꋊ ꋋ ꋌ ꋍ ꋎ ꋏ ꋐ ꋑ ꋒ ꋓ ꋔ ꋕ ꋖ ꋗ ꋘ ꋙ ꋚ ꋛ ꋜ ꋝ ꋞ ꋟ ꋠ ꋡ ꋢ ꋣ ꋤ ꋥ ꋦ ꋧ ꋨ ꋩ ꋪ ꋫ ꋬ ꋭ ꋮ ꋯ ꋰ ꋱ ꋲ ꋳ ꋴ ꋵ ꋶ ꋷ ꋸ ꋹ ꋺ ꋻ ꋼ ꋽ ꋾ ꋿ ꌀ ꌁ ꌂ ꌃ ꌄ ꌅ ꌆ ꌇ ꌈ ꌉ ꌊ ꌋ ꌌ ꌍ ꌎ ꌏ ꌐ ꌑ ꌒ ꌓ ꌔ ꌕ ꌖ ꌗ ꌘ ꌙ ꌚ ꌛ ꌜ ꌝ ꌞ ꌟ ꌠ ꌡ ꌢ ꌣ ꌤ ꌥ ꌦ ꌧ ꌨ ꌩ ꌪ ꌫ ꌬ ꌭ ꌮ ꌯ ꌰ ꌱ ꌲ ꌳ ꌴ ꌵ ꌶ ꌷ ꌸ ꌹ ꌺ ꌻ ꌼ ꌽ ꌾ ꌿ ꍀ ꍁ ꍂ ꍃ ꍄ ꍅ ꍆ ꍇ ꍈ ꍉ ꍊ ꍋ ꍌ ꍍ ꍎ ꍏ ꍐ ꍑ ꍒ ꍓ ꍔ ꍕ ꍖ ꍗ ꍘ ꍙ ꍚ ꍛ ꍜ ꍝ ꍞ ꍟ ꍠ ꍡ ꍢ ꍣ ꍤ ꍥ ꍦ ꍧ ꍨ ꍩ ꍪ ꍫ ꍬ ꍭ ꍮ ꍯ ꍰ ꍱ ꍲ ꍳ ꍴ ꍵ ꍶ ꍷ ꍸ ꍹ ꍺ ꍻ ꍼ ꍽ ꍾ ꍿ ꎀ ꎁ ꎂ ꎃ ꎄ ꎅ ꎆ ꎇ ꎈ ꎉ ꎊ ꎋ ꎌ ꎍ ꎎ ꎏ ꎐ ꎑ ꎒ ꎓ ꎔ ꎕ ꎖ ꎗ ꎘ ꎙ ꎚ ꎛ ꎜ ꎝ ꎞ ꎟ ꎠ ꎡ ꎢ ꎣ ꎤ ꎥ ꎦ ꎧ ꎨ ꎩ ꎪ ꎫ ꎬ ꎭ ꎮ ꎯ ꎰ ꎱ ꎲ ꎳ ꎴ ꎵ ꎶ ꎷ ꎸ ꎹ ꎺ ꎻ ꎼ ꎽ ꎾ ꎿ ꏀ ꏁ ꏂ ꏃ ꏄ ꏅ ꏆ ꏇ ꏈ ꏉ ꏊ ꏋ ꏌ ꏍ ꏎ ꏏ ꏐ ꏑ ꏒ ꏓ ꏔ ꏕ ꏖ ꏗ ꏘ ꏙ ꏚ ꏛ ꏜ ꏝ ꏞ ꏟ ꏠ ꏡ ꏢ ꏣ ꏤ ꏥ ꏦ ꏧ ꏨ ꏩ ꏪ ꏫ ꏬ ꏭ ꏮ ꏯ ꏰ ꏱ ꏲ ꏳ ꏴ ꏵ ꏶ ꏷ ꏸ ꏹ ꏺ ꏻ ꏼ ꏽ ꏾ ꏿ ꐀ ꐁ ꐂ ꐃ ꐄ ꐅ ꐆ ꐇ ꐈ ꐉ ꐊ ꐋ ꐌ ꐍ ꐎ ꐏ ꐐ ꐑ ꐒ ꐓ ꐔ ꐕ ꐖ ꐗ ꐘ ꐙ ꐚ ꐛ ꐜ ꐝ ꐞ ꐟ ꐠ ꐡ ꐢ ꐣ ꐤ ꐥ ꐦ ꐧ ꐨ ꐩ ꐪ ꐫ ꐬ ꐭ ꐮ ꐯ ꐰ ꐱ ꐲ ꐳ ꐴ ꐵ ꐶ ꐷ ꐸ ꐹ ꐺ ꐻ ꐼ ꐽ ꐾ ꐿ ꑀ ꑁ ꑂ ꑃ ꑄ ꑅ ꑆ ꑇ ꑈ ꑉ ꑊ ꑋ ꑌ ꑍ ꑎ ꑏ ꑐ ꑑ ꑒ ꑓ ꑔ ꑕ ꑖ ꑗ ꑘ ꑙ ꑚ ꑛ ꑜ ꑝ ꑞ ꑟ ꑠ ꑡ ꑢ ꑣ ꑤ ꑥ ꑦ ꑧ ꑨ ꑩ ꑪ ꑫ ꑬ ꑭ ꑮ ꑯ ꑰ ꑱ ꑲ ꑳ ꑴ ꑵ ꑶ ꑷ ꑸ ꑹ ꑺ ꑻ ꑼ ꑽ ꑾ ꑿ ꒀ ꒁ ꒂ ꒃ ꒄ ꒅ ꒆ ꒇ ꒈ ꒉ ꒊ ꒋ ꒌ", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "is": { + 0: "a á b d ð e é f g h i í j k l m n o ó p r s t u ú v y ý þ æ ö", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c q w x z", + }, + "it": { + 0: "a à b c d e é è f g h i ì j k l m n o ó ò p q r s t u ù v w x y z", + 2: "- — , ; : ! ? . … “ ” ( ) [ ] { } @ /", + 3: "á â å ä ã æ ç ê ë í î ï ñ ô ö õ ø œ ß ú û ü ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "ja": { + 0: "々 ゞ ー ゝ ヽ ヾ ぁ ァ あ ア ぃ ィ い イ ぅ ゥ う ウ ヴ ぇ ェ え エ ぉ ォ お オ ヵ か カ が ガ き キ ぎ ギ く ク ぐ グ ヶ け ケ げ ゲ こ コ ご ゴ さ サ ざ ザ し シ じ ジ す ス ず ズ せ セ ぜ ゼ そ ソ ぞ ゾ た タ だ ダ ち チ ぢ ヂ っ ッ つ ツ づ ヅ て テ で デ と ト ど ド な ナ に ニ ぬ ヌ ね ネ の ノ は ハ ば バ ぱ パ ひ ヒ び ビ ぴ ピ ふ フ ぶ ブ ぷ プ へ ヘ べ ベ ぺ ペ ほ ホ ぼ ボ ぽ ポ ま マ み ミ む ム め メ も モ ゃ ャ や ヤ ゅ ュ ゆ ユ ょ ョ よ ヨ ら ラ り リ る ル れ レ ろ ロ ゎ ヮ わ ワ ゐ ヰ ゑ ヱ を ヲ ん ン 一 丁 七 万 万 丈 三 上 下 不 与 丑 且 世 丘 丙 両 並 中 丸 丹 主 久 乏 乗 乙 九 乱 乳 乾 亀 了 予 争 事 二 互 五 井 亜 亡 交 亥 亨 享 享 京 亭 人 仁 今 介 仏 仕 他 付 仙 代 代 令 以 仮 仰 仲 件 任 企 伊 伏 伏 伐 休 会 伝 伯 伴 伸 伺 似 但 位 位 低 住 佐 体 何 余 作 佳 併 使 例 侍 供 依 価 侮 侯 侵 便 係 促 俊 俗 保 信 修 俳 俵 俸 俺 倉 個 倍 倒 候 借 倣 値 倫 倹 偉 偏 停 健 側 側 偵 偶 偽 傍 傑 傘 備 催 債 傷 傾 働 像 僕 僚 僧 儀 億 儒 償 優 元 元 兄 充 兆 先 光 克 免 兎 児 党 入 全 八 八 公 六 共 兵 具 典 兼 内 円 冊 再 冒 冗 写 冠 冬 冷 准 凍 凝 凡 処 凶 凸 凸 凹 出 刀 刃 分 分 切 刈 刊 刑 列 初 判 別 利 到 制 制 刷 券 刺 刻 則 削 前 剖 剛 剣 剤 副 剰 割 創 劇 力 功 加 劣 助 努 励 労 効 劾 勅 勇 勉 動 勘 務 勝 募 勢 勤 勧 勲 勺 匁 包 化 北 匠 匹 匹 区 医 匿 十 千 升 午 半 卑 卑 卒 卓 協 南 単 博 占 卯 卯 印 危 即 即 却 卵 卸 厄 厘 厚 原 厳 去 参 又 及 及 友 双 反 収 叔 取 受 叙 口 口 古 句 叫 召 可 台 史 右 号 司 各 合 吉 同 同 名 后 吏 吐 向 君 吟 否 含 吸 吹 呈 呈 呉 告 周 味 呼 命 和 咲 哀 品 員 哲 唆 唇 唐 唯 唱 商 問 啓 善 喚 喜 喝 喪 喫 営 嗣 嘆 嘉 嘱 器 噴 嚇 囚 四 回 因 団 困 囲 図 固 国 圏 園 土 圧 在 地 坂 均 坊 坑 坪 垂 型 垣 埋 城 域 執 培 基 埼 堀 堂 堅 堕 堤 堪 報 場 塀 塁 塊 塑 塔 塗 塚 塩 塾 境 墓 増 墜 墨 墳 墾 壁 壇 壊 壌 士 壬 壮 声 声 壱 売 変 夏 夕 外 多 夜 夢 大 天 天 太 夫 央 失 奇 奇 奈 奉 奏 契 奔 奥 奨 奪 奮 女 奴 好 如 如 妃 妄 妊 妙 妥 妨 妹 妻 姉 始 姓 委 姫 姻 姿 威 娘 娠 娯 婆 婚 婦 婿 媒 嫁 嫌 嫡 嬢 子 孔 字 存 孝 季 孤 学 孫 宅 宇 宇 守 安 完 宗 宗 官 宙 定 宜 宝 実 客 客 宣 室 宮 宰 害 害 宴 宵 家 容 宿 寂 寄 寄 寅 密 富 寒 寛 寝 察 寡 寧 審 寮 寸 寺 対 寿 封 専 射 将 尉 尉 尊 尋 導 小 少 尚 就 尺 尼 尼 尽 尾 尿 局 居 屈 届 屋 展 属 層 履 屯 山 岐 岡 岩 岬 岳 岸 峠 峡 峰 島 崇 崎 崩 川 州 巡 巣 工 工 左 巧 巨 差 己 巳 巻 市 布 帆 希 帝 帥 師 席 帯 帰 帳 常 帽 幅 幕 幣 干 干 平 年 幸 幹 幻 幻 幼 幽 幾 庁 広 床 序 底 店 庚 府 度 座 庫 庭 庶 庶 康 庸 廃 廉 廊 延 廷 建 弁 弊 式 弐 弓 弓 弔 引 弘 弟 弦 弧 弱 張 強 弾 当 形 彩 彫 彰 影 役 彼 往 征 径 待 律 後 徐 徒 従 得 御 復 循 微 徳 徴 徹 心 必 忌 忍 志 志 忘 忙 応 忠 快 念 怒 怖 思 怠 急 性 怪 恋 恐 恒 恥 恨 恩 恭 息 恵 悔 悟 悠 患 悦 悩 悪 悲 悼 情 惑 惜 惨 惰 想 愁 愉 意 愚 愛 感 慈 態 慌 慎 慕 慢 慣 慨 慮 慰 慶 憂 憎 憤 憩 憲 憶 憾 懇 懐 懲 懸 戊 戌 成 成 我 戒 戦 戯 戸 戻 房 所 扇 扉 手 才 打 払 扱 扶 批 承 技 抄 把 抑 投 抗 折 抜 択 披 抱 抵 抹 押 抽 担 拍 拐 拒 拓 拘 拙 招 拝 拠 拡 括 拷 拾 持 指 挑 挙 挟 振 挿 捕 捜 捨 据 掃 授 掌 排 掘 掛 採 探 接 控 推 措 掲 描 提 揚 換 握 揮 援 揺 損 搬 搭 携 搾 摂 摘 摩 撃 撤 撮 撲 擁 操 擦 擬 支 改 攻 放 政 故 敏 救 敗 教 敢 散 敬 数 整 敵 敷 文 斉 斎 斗 料 斜 斤 斥 断 新 方 施 旅 旋 族 旗 既 日 旧 旧 旨 早 旬 昆 昇 昌 明 易 昔 星 映 春 昨 昭 是 昼 時 晩 普 景 晴 晶 暁 暇 暑 暖 暗 暦 暫 暮 暴 曇 曜 曲 更 書 曹 替 最 月 有 服 朕 朗 望 朝 期 木 未 未 末 本 札 朱 朴 机 朽 杉 材 村 束 条 来 杯 東 松 板 析 林 枚 果 枝 枠 枢 枯 架 柄 某 染 柔 柱 柳 査 栄 栓 校 株 核 根 格 栽 桃 案 桑 桜 桟 梅 械 棄 棋 棒 棚 棟 森 棺 植 検 業 極 楼 楽 概 構 様 槽 標 模 権 横 樹 橋 機 欄 欠 次 欧 欲 欺 款 歌 歓 止 正 武 歩 歯 歳 歴 死 殉 殉 殊 残 殖 殴 段 殺 殻 殿 母 毎 毒 比 毛 氏 民 気 水 氷 永 汁 求 汎 汗 汚 江 池 決 汽 沈 沖 没 沢 河 沸 油 治 沼 沿 況 泉 泊 泌 法 泡 泡 波 泣 泥 注 泰 泳 洋 洗 洞 津 洪 活 派 流 浄 浅 浜 浦 浪 浮 浴 海 浸 消 涙 涯 液 涼 淑 淡 深 混 添 清 渇 渇 済 渉 渋 渓 減 渡 渦 温 測 港 湖 湯 湾 湾 湿 満 源 準 溝 溶 滅 滋 滑 滝 滞 滴 漁 漂 漆 漏 演 漠 漢 漫 漬 漸 潔 潜 潟 潤 潮 澄 激 濁 濃 濫 濯 瀬 火 灯 灰 災 炉 炊 炎 炭 点 為 烈 無 焦 然 焼 煙 照 煩 煮 熟 熱 燃 燥 爆 爵 父 片 版 牙 牛 牧 物 牲 特 犠 犬 犯 状 狂 狩 独 狭 猛 猟 猪 猫 献 猶 猿 獄 獣 獲 玄 率 玉 王 珍 珠 班 現 球 理 琴 環 璽 瓶 甘 甚 生 産 用 田 田 由 甲 申 男 町 画 界 畑 畔 留 畜 畝 略 番 異 畳 疎 疑 疫 疲 疾 病 症 痘 痛 痢 痴 療 癒 癖 癸 発 登 白 百 的 皆 皇 皮 皿 盆 益 盗 盛 盟 監 盤 目 盲 直 相 盾 省 看 県 真 眠 眺 眼 着 睡 督 瞬 矛 矢 知 短 矯 石 砂 研 砕 砲 破 硝 硫 硬 碁 碑 確 磁 磨 礁 礎 示 礼 社 祈 祉 祖 祚 祝 神 祥 票 祭 禁 禄 禅 禍 禍 禎 福 秀 私 秋 科 秒 秘 租 秩 称 移 程 税 稚 種 稲 稼 稿 穀 穂 積 穏 穫 穴 究 空 突 窃 窒 窓 窮 窯 立 竜 章 童 端 競 竹 笑 笛 符 第 筆 等 筋 筒 答 策 箇 算 管 箱 節 範 築 篤 簡 簿 籍 米 粉 粋 粒 粗 粘 粛 粧 精 糖 糧 糸 系 糾 紀 約 紅 紋 納 純 紙 紙 級 紛 素 素 紡 索 紫 累 細 紳 紹 紺 終 組 経 結 絞 絡 給 統 絵 絶 絹 継 続 維 綱 網 綿 緊 総 緑 緒 線 締 編 緩 緯 練 縁 縄 縛 縦 縫 縮 績 繁 繊 織 繕 繭 繰 缶 罪 置 罰 署 罷 羅 羊 美 群 義 羽 翁 翌 習 翻 翼 老 考 者 耐 耕 耗 耳 聖 聞 聴 職 肉 肌 肖 肝 肢 肥 肩 肪 肯 育 肺 胃 胆 背 胎 胞 胴 胸 能 脂 脅 脈 脚 脱 脳 脹 腐 腕 腰 腸 腹 膚 膜 膨 臓 臣 臨 自 臭 至 致 興 舌 舎 舗 舞 舟 航 般 舶 船 艇 艦 良 色 芋 芝 花 芳 芸 芽 苗 若 苦 英 茂 茎 茶 草 荒 荘 荷 菊 菌 菓 菜 華 落 葉 著 葬 蒸 蓄 蔵 薄 薦 薪 薪 薫 薬 藤 藩 藻 虎 虐 虚 虜 虞 虫 蚊 蚕 蛇 蛍 蛮 融 血 衆 行 術 街 衛 衝 衡 衣 表 衰 衷 袋 被 裁 裂 装 裏 裕 補 裸 製 複 褐 褒 襟 襲 西 要 覆 覇 見 規 視 覚 覧 親 観 角 解 触 言 訂 計 討 訓 託 記 訟 訪 設 許 訳 訴 診 証 詐 詔 評 詞 詠 試 詩 詰 詰 話 該 詳 誇 誉 誌 認 誓 誕 誘 語 誠 誤 説 読 誰 課 調 談 請 論 諭 諮 諸 諾 謀 謁 謄 謙 講 謝 謡 謹 識 譜 警 議 譲 護 谷 豆 豊 豚 象 豪 貝 貞 負 負 財 貢 貧 貧 貨 販 貫 責 貯 貴 買 貸 費 貿 賀 賃 賄 資 賊 賓 賛 賜 賞 賠 賢 賦 質 購 贈 赤 赦 走 赴 起 超 越 趣 足 距 跡 路 跳 践 踊 踏 躍 身 車 軌 軍 軒 軟 転 軸 軽 較 載 輝 輩 輪 輸 轄 辛 辞 辰 辰 辱 農 辺 込 迅 迎 近 返 迫 迭 述 迷 追 退 送 逃 逆 透 逐 逓 途 通 逝 速 造 連 逮 週 進 逸 遂 遅 遇 遊 運 遍 過 道 道 達 違 遠 遣 適 遭 遮 遵 遷 選 遺 避 還 邦 邪 邸 郊 郎 郡 部 郭 郵 郷 都 酉 酌 配 酒 酔 酢 酪 酬 酵 酷 酸 醜 醸 釈 里 里 重 野 量 金 針 釣 鈍 鈴 鉄 鉛 鉢 鉱 銀 銃 銅 銑 銘 銭 鋭 鋳 鋼 錘 錠 錬 錯 録 鍛 鎖 鎮 鏡 鐘 鑑 長 門 閉 開 閏 閑 間 関 閣 閥 閲 闘 阪 防 阻 附 降 限 陛 院 院 陣 除 陥 陪 陰 陳 陵 陶 陸 険 陽 隅 隆 隊 階 随 隔 際 障 隠 隣 隷 隻 雄 雄 雅 集 雇 雉 雌 雑 離 難 雨 雪 雰 雲 零 雷 電 需 震 霊 霜 霧 露 青 静 非 面 革 靴 韓 音 韻 響 頂 頃 項 順 預 預 頑 頒 領 頭 頻 頼 題 額 顔 顕 願 類 顧 風 飛 食 飢 飯 飲 飼 飼 飽 飾 養 餓 館 首 香 馬 駄 駄 駅 駆 駐 騎 騒 験 騰 驚 骨 髄 高 髪 鬼 魂 魅 魔 魚 鮮 鯨 鳥 鳴 鶏 鹿 麗 麦 麻 黄 黒 黙 鼓 鼠 鼻 齢", + 2: "‾ _ _ - - ‐ — ― 〜 ・ ・ , , 、 、 ; ; : : ! ! ? ? . . ‥ … 。 。 ' \ ‘ ’ \" " “ ” ( ( ) ) [ [ ] ] { { } } 〈 〉 《 》 「 「 」 」 『 』 【 】 〔 〕 ‖ § ¶ @ @ * * / / \\ & & # # % % ‰ † ‡ ′ ″ 〃 ※", + 3: "兌 拼 楔 錄 鳯", + }, + "jgo": { + 0: "a á â ǎ b c d ɛ ɛ́ ɛ̀ ɛ̂ ɛ̌ ɛ̄ f g h i í î ǐ j k l m ḿ m̀ m̄ n ń ǹ n̄ ŋ ŋ́ ŋ̀ ŋ̄ ɔ ɔ́ ɔ̂ ɔ̌ p pf s sh t ts u ú û ǔ ʉ ʉ́ ʉ̂ ʉ̌ ʉ̈ v w ẅ y z ꞌ", + 2: "- , ; : ! ? . ‹ › « »", + 3: "e o q r x", + 5: "A B C D Ɛ F G H I J K L M N Ŋ Ɔ P Pf S Sh T Ts U Ʉ Ʉ̈ V W Ẅ Y Z Ꞌ", + }, + "jmc": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "ka": { + 0: "ა ბ გ დ ე ვ ზ თ ი კ ლ მ ნ ო პ ჟ რ ს ტ უ ფ ქ ღ ყ შ ჩ ც ძ წ ჭ ხ ჯ ჰ", + 2: "- ‐ – — , ; : ! ? . … ჻ ' ‘ ‚ “ „ « » ( ) [ ] { } § @ * / & # † ‡ ′ ″ №", + 3: "ჱ ჲ ჳ ჴ ჵ ჶ ჷ ჸ ჹ ჺ ⴀ ⴁ ⴂ ⴃ ⴄ ⴅ ⴆ ⴡ ⴇ ⴈ ⴉ ⴊ ⴋ ⴌ ⴢ ⴍ ⴎ ⴏ ⴐ ⴑ ⴒ ⴣ ⴓ ⴔ ⴕ ⴖ ⴗ ⴘ ⴙ ⴚ ⴛ ⴜ ⴝ ⴞ ⴤ ⴟ ⴠ ⴥ", + 5: "ა ბ გ დ ე ვ ზ თ ი კ ლ მ ნ ო პ ჟ რ ს ტ უ ფ ქ ღ ყ შ ჩ ც ძ წ ჭ ხ ჯ ჰ", + }, + "kab": { + 0: "a b c č d ḍ e ɛ f g ǧ ɣ h ḥ i j k l m n p q r ṛ s ṣ t ṭ u w x y z ẓ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "o v", + 5: "A B C Č D Ḍ E Ɛ F G Ǧ Ɣ H Ḥ I J K L M N P Q R Ṛ S Ṣ T Ṭ U W X Y Z Ẓ", + }, + "kam": { + 0: "a b c d e f g h i ĩ j k l m n o p q r s t u ũ v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "kde": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "kea": { + 0: "a b d dj e f g i j k l lh m n nh o p r s t tx u v x z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à ă â å ä ã ā æ c ç é è ĕ ê ë ē h í ì ĭ î ï ī ñ ó ò ŏ ô ö õ ø ō œ q ú ù ŭ û ü ū w y ÿ", + 5: "A B D E F G H I J K L M N O P R S T U V X Z", + }, + "khq": { + 0: "a ã b c d e ẽ f g h i j k l m n ɲ ŋ o õ p q r s š t u w x y z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "v", + 5: "A à B C D E Ẽ F G H I J K L M N Ɲ Ŋ O Õ P Q R S Š T U W X Y Z Ž", + }, + "ki": { + 0: "a b c d e g h i ĩ j k m n o r t u ũ w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "f l p q s v x z", + 5: "A B C D E G H I J K M N O R T U W Y", + }, + "kk": { + 0: "а ә б в г ғ д е ё ж з и й к қ л м н ң о ө п р с т у ұ ү ф х һ ц ч ш щ ъ ы і ь э ю я", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "А Ә Б В Г Ғ Д Е Ё Ж З И Й К Қ Л М Н Ң О Ө П Р С Т У Ұ Ү Ф Х Һ Ц Ч Ш Щ Ъ Ы І Ь Э Ю Я", + }, + "kkj": { + 0: "a á à â a̧ b ɓ c d ɗ ɗy e é è ê ɛ ɛ́ ɛ̀ ɛ̂ ɛ̧ f g gb gw h i í ì î i̧ j k kp kw l m mb n nd nj ny ŋ ŋg ŋgb ŋgw o ó ò ô ɔ ɔ́ ɔ̀ ɔ̂ ɔ̧ p r s t u ú ù û u̧ v w y", + 2: ", : ! ? . … ‘ ‹ › “ ” « » ( ) *", + 3: "q x z", + 5: "A B Ɓ C D Ɗ Ɗy E Ɛ F G Gb Gw H I I̧ J K Kp Kw L M Mb N Nd Nj Ny Ŋ Ŋg Ŋgb Ŋgw O Ɔ Ɔ̧ P R S T U U̧ V W Y", + }, + "kl": { + 0: "a á â ã b c d e é ê f g h i í î ĩ j k l m n o ô p q ĸ r s t u ú û ũ v w x y z æ ø å", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "kln": { + 0: "a b c d e g h i j k l m n o p r s t u w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "f q v x z", + 5: "A B C D E G H I J K L M N O P R S T U W Y", + }, + "km": { + 0: "៌ ៎ ៏ ៑ ័ ៈ ់ ៉ ៊ ៍ ក ខ គ ឃ ង ច ឆ ជ ឈ ញ ដ ឋ ឌ ឍ ណ ត ថ ទ ធ ន ប ផ ព ភ ម យ រ ឫ ឬ ល ឭ ឮ វ ស ហ ឡ អ ឲ ឪ អា ឥ ឦ ឧ ឧក ឩ ឯ ឰ ឱ ឳ ា ិ ី ឹ ឺ ុ ូ ួ ើ ឿ ៀ េ ែ ៃ ោ ៅ ំ ះ ្", + 2: "- , ៖ ! ? . ។ ៕ ‘ ’ \" “ ” ( ) [ ] { } ៙ ៚", + 3: "឴ ឵ \u200b ឝ ឞ", + }, + "kn": { + 0: "಼ ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯ ಅ ಆ ಇ ಈ ಉ ಊ ಋ ೠ ಌ ೡ ಎ ಏ ಐ ಒ ಓ ಔ ಂ ಃ ಕ ಖ ಗ ಘ ಙ ಚ ಛ ಜ ಝ ಞ ಟ ಠ ಡ ಢ ಣ ತ ಥ ದ ಧ ನ ಪ ಫ ಬ ಭ ಮ ಯ ರ ಱ ಲ ವ ಶ ಷ ಸ ಹ ಳ ೞ ಽ ಾ ಿ ೀ ು ೂ ೃ ೄ ೆ ೇ ೈ ೊ ೋ ೌ ್ ೕ ೖ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + }, + "ko": { + 0: "가 가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 검 겁 겂 것 겄 겅 겆 겇 겈 겉 겊 겋 게 겍 겎 겏 겐 겑 겒 겓 겔 겕 겖 겗 겘 겙 겚 겛 겜 겝 겞 겟 겠 겡 겢 겣 겤 겥 겦 겧 겨 격 겪 겫 견 겭 겮 겯 결 겱 겲 겳 겴 겵 겶 겷 겸 겹 겺 겻 겼 경 겾 겿 곀 곁 곂 곃 계 곅 곆 곇 곈 곉 곊 곋 곌 곍 곎 곏 곐 곑 곒 곓 곔 곕 곖 곗 곘 곙 곚 곛 곜 곝 곞 곟 고 곡 곢 곣 곤 곥 곦 곧 골 곩 곪 곫 곬 곭 곮 곯 곰 곱 곲 곳 곴 공 곶 곷 곸 곹 곺 곻 과 곽 곾 곿 관 괁 괂 괃 괄 괅 괆 괇 괈 괉 괊 괋 괌 괍 괎 괏 괐 광 괒 괓 괔 괕 괖 괗 괘 괙 괚 괛 괜 괝 괞 괟 괠 괡 괢 괣 괤 괥 괦 괧 괨 괩 괪 괫 괬 괭 괮 괯 괰 괱 괲 괳 괴 괵 괶 괷 괸 괹 괺 괻 괼 괽 괾 괿 굀 굁 굂 굃 굄 굅 굆 굇 굈 굉 굊 굋 굌 굍 굎 굏 교 굑 굒 굓 굔 굕 굖 굗 굘 굙 굚 굛 굜 굝 굞 굟 굠 굡 굢 굣 굤 굥 굦 굧 굨 굩 굪 굫 구 국 굮 굯 군 굱 굲 굳 굴 굵 굶 굷 굸 굹 굺 굻 굼 굽 굾 굿 궀 궁 궂 궃 궄 궅 궆 궇 궈 궉 궊 궋 권 궍 궎 궏 궐 궑 궒 궓 궔 궕 궖 궗 궘 궙 궚 궛 궜 궝 궞 궟 궠 궡 궢 궣 궤 궥 궦 궧 궨 궩 궪 궫 궬 궭 궮 궯 궰 궱 궲 궳 궴 궵 궶 궷 궸 궹 궺 궻 궼 궽 궾 궿 귀 귁 귂 귃 귄 귅 귆 귇 귈 귉 귊 귋 귌 귍 귎 귏 귐 귑 귒 귓 귔 귕 귖 귗 귘 귙 귚 귛 규 귝 귞 귟 균 귡 귢 귣 귤 귥 귦 귧 귨 귩 귪 귫 귬 귭 귮 귯 귰 귱 귲 귳 귴 귵 귶 귷 그 극 귺 귻 근 귽 귾 귿 글 긁 긂 긃 긄 긅 긆 긇 금 급 긊 긋 긌 긍 긎 긏 긐 긑 긒 긓 긔 긕 긖 긗 긘 긙 긚 긛 긜 긝 긞 긟 긠 긡 긢 긣 긤 긥 긦 긧 긨 긩 긪 긫 긬 긭 긮 긯 기 긱 긲 긳 긴 긵 긶 긷 길 긹 긺 긻 긼 긽 긾 긿 김 깁 깂 깃 깄 깅 깆 깇 깈 깉 깊 깋 까 깍 깎 깏 깐 깑 깒 깓 깔 깕 깖 깗 깘 깙 깚 깛 깜 깝 깞 깟 깠 깡 깢 깣 깤 깥 깦 깧 깨 깩 깪 깫 깬 깭 깮 깯 깰 깱 깲 깳 깴 깵 깶 깷 깸 깹 깺 깻 깼 깽 깾 깿 꺀 꺁 꺂 꺃 꺄 꺅 꺆 꺇 꺈 꺉 꺊 꺋 꺌 꺍 꺎 꺏 꺐 꺑 꺒 꺓 꺔 꺕 꺖 꺗 꺘 꺙 꺚 꺛 꺜 꺝 꺞 꺟 꺠 꺡 꺢 꺣 꺤 꺥 꺦 꺧 꺨 꺩 꺪 꺫 꺬 꺭 꺮 꺯 꺰 꺱 꺲 꺳 꺴 꺵 꺶 꺷 꺸 꺹 꺺 꺻 꺼 꺽 꺾 꺿 껀 껁 껂 껃 껄 껅 껆 껇 껈 껉 껊 껋 껌 껍 껎 껏 껐 껑 껒 껓 껔 껕 껖 껗 께 껙 껚 껛 껜 껝 껞 껟 껠 껡 껢 껣 껤 껥 껦 껧 껨 껩 껪 껫 껬 껭 껮 껯 껰 껱 껲 껳 껴 껵 껶 껷 껸 껹 껺 껻 껼 껽 껾 껿 꼀 꼁 꼂 꼃 꼄 꼅 꼆 꼇 꼈 꼉 꼊 꼋 꼌 꼍 꼎 꼏 꼐 꼑 꼒 꼓 꼔 꼕 꼖 꼗 꼘 꼙 꼚 꼛 꼜 꼝 꼞 꼟 꼠 꼡 꼢 꼣 꼤 꼥 꼦 꼧 꼨 꼩 꼪 꼫 꼬 꼭 꼮 꼯 꼰 꼱 꼲 꼳 꼴 꼵 꼶 꼷 꼸 꼹 꼺 꼻 꼼 꼽 꼾 꼿 꽀 꽁 꽂 꽃 꽄 꽅 꽆 꽇 꽈 꽉 꽊 꽋 꽌 꽍 꽎 꽏 꽐 꽑 꽒 꽓 꽔 꽕 꽖 꽗 꽘 꽙 꽚 꽛 꽜 꽝 꽞 꽟 꽠 꽡 꽢 꽣 꽤 꽥 꽦 꽧 꽨 꽩 꽪 꽫 꽬 꽭 꽮 꽯 꽰 꽱 꽲 꽳 꽴 꽵 꽶 꽷 꽸 꽹 꽺 꽻 꽼 꽽 꽾 꽿 꾀 꾁 꾂 꾃 꾄 꾅 꾆 꾇 꾈 꾉 꾊 꾋 꾌 꾍 꾎 꾏 꾐 꾑 꾒 꾓 꾔 꾕 꾖 꾗 꾘 꾙 꾚 꾛 꾜 꾝 꾞 꾟 꾠 꾡 꾢 꾣 꾤 꾥 꾦 꾧 꾨 꾩 꾪 꾫 꾬 꾭 꾮 꾯 꾰 꾱 꾲 꾳 꾴 꾵 꾶 꾷 꾸 꾹 꾺 꾻 꾼 꾽 꾾 꾿 꿀 꿁 꿂 꿃 꿄 꿅 꿆 꿇 꿈 꿉 꿊 꿋 꿌 꿍 꿎 꿏 꿐 꿑 꿒 꿓 꿔 꿕 꿖 꿗 꿘 꿙 꿚 꿛 꿜 꿝 꿞 꿟 꿠 꿡 꿢 꿣 꿤 꿥 꿦 꿧 꿨 꿩 꿪 꿫 꿬 꿭 꿮 꿯 꿰 꿱 꿲 꿳 꿴 꿵 꿶 꿷 꿸 꿹 꿺 꿻 꿼 꿽 꿾 꿿 뀀 뀁 뀂 뀃 뀄 뀅 뀆 뀇 뀈 뀉 뀊 뀋 뀌 뀍 뀎 뀏 뀐 뀑 뀒 뀓 뀔 뀕 뀖 뀗 뀘 뀙 뀚 뀛 뀜 뀝 뀞 뀟 뀠 뀡 뀢 뀣 뀤 뀥 뀦 뀧 뀨 뀩 뀪 뀫 뀬 뀭 뀮 뀯 뀰 뀱 뀲 뀳 뀴 뀵 뀶 뀷 뀸 뀹 뀺 뀻 뀼 뀽 뀾 뀿 끀 끁 끂 끃 끄 끅 끆 끇 끈 끉 끊 끋 끌 끍 끎 끏 끐 끑 끒 끓 끔 끕 끖 끗 끘 끙 끚 끛 끜 끝 끞 끟 끠 끡 끢 끣 끤 끥 끦 끧 끨 끩 끪 끫 끬 끭 끮 끯 끰 끱 끲 끳 끴 끵 끶 끷 끸 끹 끺 끻 끼 끽 끾 끿 낀 낁 낂 낃 낄 낅 낆 낇 낈 낉 낊 낋 낌 낍 낎 낏 낐 낑 낒 낓 낔 낕 낖 낗 나 낙 낚 낛 난 낝 낞 낟 날 낡 낢 낣 낤 낥 낦 낧 남 납 낪 낫 났 낭 낮 낯 낰 낱 낲 낳 내 낵 낶 낷 낸 낹 낺 낻 낼 낽 낾 낿 냀 냁 냂 냃 냄 냅 냆 냇 냈 냉 냊 냋 냌 냍 냎 냏 냐 냑 냒 냓 냔 냕 냖 냗 냘 냙 냚 냛 냜 냝 냞 냟 냠 냡 냢 냣 냤 냥 냦 냧 냨 냩 냪 냫 냬 냭 냮 냯 냰 냱 냲 냳 냴 냵 냶 냷 냸 냹 냺 냻 냼 냽 냾 냿 넀 넁 넂 넃 넄 넅 넆 넇 너 넉 넊 넋 넌 넍 넎 넏 널 넑 넒 넓 넔 넕 넖 넗 넘 넙 넚 넛 넜 넝 넞 넟 넠 넡 넢 넣 네 넥 넦 넧 넨 넩 넪 넫 넬 넭 넮 넯 넰 넱 넲 넳 넴 넵 넶 넷 넸 넹 넺 넻 넼 넽 넾 넿 녀 녁 녂 녃 년 녅 녆 녇 녈 녉 녊 녋 녌 녍 녎 녏 념 녑 녒 녓 녔 녕 녖 녗 녘 녙 녚 녛 녜 녝 녞 녟 녠 녡 녢 녣 녤 녥 녦 녧 녨 녩 녪 녫 녬 녭 녮 녯 녰 녱 녲 녳 녴 녵 녶 녷 노 녹 녺 녻 논 녽 녾 녿 놀 놁 놂 놃 놄 놅 놆 놇 놈 놉 놊 놋 놌 농 놎 놏 놐 놑 높 놓 놔 놕 놖 놗 놘 놙 놚 놛 놜 놝 놞 놟 놠 놡 놢 놣 놤 놥 놦 놧 놨 놩 놪 놫 놬 놭 놮 놯 놰 놱 놲 놳 놴 놵 놶 놷 놸 놹 놺 놻 놼 놽 놾 놿 뇀 뇁 뇂 뇃 뇄 뇅 뇆 뇇 뇈 뇉 뇊 뇋 뇌 뇍 뇎 뇏 뇐 뇑 뇒 뇓 뇔 뇕 뇖 뇗 뇘 뇙 뇚 뇛 뇜 뇝 뇞 뇟 뇠 뇡 뇢 뇣 뇤 뇥 뇦 뇧 뇨 뇩 뇪 뇫 뇬 뇭 뇮 뇯 뇰 뇱 뇲 뇳 뇴 뇵 뇶 뇷 뇸 뇹 뇺 뇻 뇼 뇽 뇾 뇿 눀 눁 눂 눃 누 눅 눆 눇 눈 눉 눊 눋 눌 눍 눎 눏 눐 눑 눒 눓 눔 눕 눖 눗 눘 눙 눚 눛 눜 눝 눞 눟 눠 눡 눢 눣 눤 눥 눦 눧 눨 눩 눪 눫 눬 눭 눮 눯 눰 눱 눲 눳 눴 눵 눶 눷 눸 눹 눺 눻 눼 눽 눾 눿 뉀 뉁 뉂 뉃 뉄 뉅 뉆 뉇 뉈 뉉 뉊 뉋 뉌 뉍 뉎 뉏 뉐 뉑 뉒 뉓 뉔 뉕 뉖 뉗 뉘 뉙 뉚 뉛 뉜 뉝 뉞 뉟 뉠 뉡 뉢 뉣 뉤 뉥 뉦 뉧 뉨 뉩 뉪 뉫 뉬 뉭 뉮 뉯 뉰 뉱 뉲 뉳 뉴 뉵 뉶 뉷 뉸 뉹 뉺 뉻 뉼 뉽 뉾 뉿 늀 늁 늂 늃 늄 늅 늆 늇 늈 늉 늊 늋 늌 늍 늎 늏 느 늑 늒 늓 는 늕 늖 늗 늘 늙 늚 늛 늜 늝 늞 늟 늠 늡 늢 늣 늤 능 늦 늧 늨 늩 늪 늫 늬 늭 늮 늯 늰 늱 늲 늳 늴 늵 늶 늷 늸 늹 늺 늻 늼 늽 늾 늿 닀 닁 닂 닃 닄 닅 닆 닇 니 닉 닊 닋 닌 닍 닎 닏 닐 닑 닒 닓 닔 닕 닖 닗 님 닙 닚 닛 닜 닝 닞 닟 닠 닡 닢 닣 다 닥 닦 닧 단 닩 닪 닫 달 닭 닮 닯 닰 닱 닲 닳 담 답 닶 닷 닸 당 닺 닻 닼 닽 닾 닿 대 댁 댂 댃 댄 댅 댆 댇 댈 댉 댊 댋 댌 댍 댎 댏 댐 댑 댒 댓 댔 댕 댖 댗 댘 댙 댚 댛 댜 댝 댞 댟 댠 댡 댢 댣 댤 댥 댦 댧 댨 댩 댪 댫 댬 댭 댮 댯 댰 댱 댲 댳 댴 댵 댶 댷 댸 댹 댺 댻 댼 댽 댾 댿 덀 덁 덂 덃 덄 덅 덆 덇 덈 덉 덊 덋 덌 덍 덎 덏 덐 덑 덒 덓 더 덕 덖 덗 던 덙 덚 덛 덜 덝 덞 덟 덠 덡 덢 덣 덤 덥 덦 덧 덨 덩 덪 덫 덬 덭 덮 덯 데 덱 덲 덳 덴 덵 덶 덷 델 덹 덺 덻 덼 덽 덾 덿 뎀 뎁 뎂 뎃 뎄 뎅 뎆 뎇 뎈 뎉 뎊 뎋 뎌 뎍 뎎 뎏 뎐 뎑 뎒 뎓 뎔 뎕 뎖 뎗 뎘 뎙 뎚 뎛 뎜 뎝 뎞 뎟 뎠 뎡 뎢 뎣 뎤 뎥 뎦 뎧 뎨 뎩 뎪 뎫 뎬 뎭 뎮 뎯 뎰 뎱 뎲 뎳 뎴 뎵 뎶 뎷 뎸 뎹 뎺 뎻 뎼 뎽 뎾 뎿 돀 돁 돂 돃 도 독 돆 돇 돈 돉 돊 돋 돌 돍 돎 돏 돐 돑 돒 돓 돔 돕 돖 돗 돘 동 돚 돛 돜 돝 돞 돟 돠 돡 돢 돣 돤 돥 돦 돧 돨 돩 돪 돫 돬 돭 돮 돯 돰 돱 돲 돳 돴 돵 돶 돷 돸 돹 돺 돻 돼 돽 돾 돿 됀 됁 됂 됃 됄 됅 됆 됇 됈 됉 됊 됋 됌 됍 됎 됏 됐 됑 됒 됓 됔 됕 됖 됗 되 됙 됚 됛 된 됝 됞 됟 될 됡 됢 됣 됤 됥 됦 됧 됨 됩 됪 됫 됬 됭 됮 됯 됰 됱 됲 됳 됴 됵 됶 됷 됸 됹 됺 됻 됼 됽 됾 됿 둀 둁 둂 둃 둄 둅 둆 둇 둈 둉 둊 둋 둌 둍 둎 둏 두 둑 둒 둓 둔 둕 둖 둗 둘 둙 둚 둛 둜 둝 둞 둟 둠 둡 둢 둣 둤 둥 둦 둧 둨 둩 둪 둫 둬 둭 둮 둯 둰 둱 둲 둳 둴 둵 둶 둷 둸 둹 둺 둻 둼 둽 둾 둿 뒀 뒁 뒂 뒃 뒄 뒅 뒆 뒇 뒈 뒉 뒊 뒋 뒌 뒍 뒎 뒏 뒐 뒑 뒒 뒓 뒔 뒕 뒖 뒗 뒘 뒙 뒚 뒛 뒜 뒝 뒞 뒟 뒠 뒡 뒢 뒣 뒤 뒥 뒦 뒧 뒨 뒩 뒪 뒫 뒬 뒭 뒮 뒯 뒰 뒱 뒲 뒳 뒴 뒵 뒶 뒷 뒸 뒹 뒺 뒻 뒼 뒽 뒾 뒿 듀 듁 듂 듃 듄 듅 듆 듇 듈 듉 듊 듋 듌 듍 듎 듏 듐 듑 듒 듓 듔 듕 듖 듗 듘 듙 듚 듛 드 득 듞 듟 든 듡 듢 듣 들 듥 듦 듧 듨 듩 듪 듫 듬 듭 듮 듯 듰 등 듲 듳 듴 듵 듶 듷 듸 듹 듺 듻 듼 듽 듾 듿 딀 딁 딂 딃 딄 딅 딆 딇 딈 딉 딊 딋 딌 딍 딎 딏 딐 딑 딒 딓 디 딕 딖 딗 딘 딙 딚 딛 딜 딝 딞 딟 딠 딡 딢 딣 딤 딥 딦 딧 딨 딩 딪 딫 딬 딭 딮 딯 따 딱 딲 딳 딴 딵 딶 딷 딸 딹 딺 딻 딼 딽 딾 딿 땀 땁 땂 땃 땄 땅 땆 땇 땈 땉 땊 땋 때 땍 땎 땏 땐 땑 땒 땓 땔 땕 땖 땗 땘 땙 땚 땛 땜 땝 땞 땟 땠 땡 땢 땣 땤 땥 땦 땧 땨 땩 땪 땫 땬 땭 땮 땯 땰 땱 땲 땳 땴 땵 땶 땷 땸 땹 땺 땻 땼 땽 땾 땿 떀 떁 떂 떃 떄 떅 떆 떇 떈 떉 떊 떋 떌 떍 떎 떏 떐 떑 떒 떓 떔 떕 떖 떗 떘 떙 떚 떛 떜 떝 떞 떟 떠 떡 떢 떣 떤 떥 떦 떧 떨 떩 떪 떫 떬 떭 떮 떯 떰 떱 떲 떳 떴 떵 떶 떷 떸 떹 떺 떻 떼 떽 떾 떿 뗀 뗁 뗂 뗃 뗄 뗅 뗆 뗇 뗈 뗉 뗊 뗋 뗌 뗍 뗎 뗏 뗐 뗑 뗒 뗓 뗔 뗕 뗖 뗗 뗘 뗙 뗚 뗛 뗜 뗝 뗞 뗟 뗠 뗡 뗢 뗣 뗤 뗥 뗦 뗧 뗨 뗩 뗪 뗫 뗬 뗭 뗮 뗯 뗰 뗱 뗲 뗳 뗴 뗵 뗶 뗷 뗸 뗹 뗺 뗻 뗼 뗽 뗾 뗿 똀 똁 똂 똃 똄 똅 똆 똇 똈 똉 똊 똋 똌 똍 똎 똏 또 똑 똒 똓 똔 똕 똖 똗 똘 똙 똚 똛 똜 똝 똞 똟 똠 똡 똢 똣 똤 똥 똦 똧 똨 똩 똪 똫 똬 똭 똮 똯 똰 똱 똲 똳 똴 똵 똶 똷 똸 똹 똺 똻 똼 똽 똾 똿 뙀 뙁 뙂 뙃 뙄 뙅 뙆 뙇 뙈 뙉 뙊 뙋 뙌 뙍 뙎 뙏 뙐 뙑 뙒 뙓 뙔 뙕 뙖 뙗 뙘 뙙 뙚 뙛 뙜 뙝 뙞 뙟 뙠 뙡 뙢 뙣 뙤 뙥 뙦 뙧 뙨 뙩 뙪 뙫 뙬 뙭 뙮 뙯 뙰 뙱 뙲 뙳 뙴 뙵 뙶 뙷 뙸 뙹 뙺 뙻 뙼 뙽 뙾 뙿 뚀 뚁 뚂 뚃 뚄 뚅 뚆 뚇 뚈 뚉 뚊 뚋 뚌 뚍 뚎 뚏 뚐 뚑 뚒 뚓 뚔 뚕 뚖 뚗 뚘 뚙 뚚 뚛 뚜 뚝 뚞 뚟 뚠 뚡 뚢 뚣 뚤 뚥 뚦 뚧 뚨 뚩 뚪 뚫 뚬 뚭 뚮 뚯 뚰 뚱 뚲 뚳 뚴 뚵 뚶 뚷 뚸 뚹 뚺 뚻 뚼 뚽 뚾 뚿 뛀 뛁 뛂 뛃 뛄 뛅 뛆 뛇 뛈 뛉 뛊 뛋 뛌 뛍 뛎 뛏 뛐 뛑 뛒 뛓 뛔 뛕 뛖 뛗 뛘 뛙 뛚 뛛 뛜 뛝 뛞 뛟 뛠 뛡 뛢 뛣 뛤 뛥 뛦 뛧 뛨 뛩 뛪 뛫 뛬 뛭 뛮 뛯 뛰 뛱 뛲 뛳 뛴 뛵 뛶 뛷 뛸 뛹 뛺 뛻 뛼 뛽 뛾 뛿 뜀 뜁 뜂 뜃 뜄 뜅 뜆 뜇 뜈 뜉 뜊 뜋 뜌 뜍 뜎 뜏 뜐 뜑 뜒 뜓 뜔 뜕 뜖 뜗 뜘 뜙 뜚 뜛 뜜 뜝 뜞 뜟 뜠 뜡 뜢 뜣 뜤 뜥 뜦 뜧 뜨 뜩 뜪 뜫 뜬 뜭 뜮 뜯 뜰 뜱 뜲 뜳 뜴 뜵 뜶 뜷 뜸 뜹 뜺 뜻 뜼 뜽 뜾 뜿 띀 띁 띂 띃 띄 띅 띆 띇 띈 띉 띊 띋 띌 띍 띎 띏 띐 띑 띒 띓 띔 띕 띖 띗 띘 띙 띚 띛 띜 띝 띞 띟 띠 띡 띢 띣 띤 띥 띦 띧 띨 띩 띪 띫 띬 띭 띮 띯 띰 띱 띲 띳 띴 띵 띶 띷 띸 띹 띺 띻 라 락 띾 띿 란 랁 랂 랃 랄 랅 랆 랇 랈 랉 랊 랋 람 랍 랎 랏 랐 랑 랒 랓 랔 랕 랖 랗 래 랙 랚 랛 랜 랝 랞 랟 랠 랡 랢 랣 랤 랥 랦 랧 램 랩 랪 랫 랬 랭 랮 랯 랰 랱 랲 랳 랴 략 랶 랷 랸 랹 랺 랻 랼 랽 랾 랿 럀 럁 럂 럃 럄 럅 럆 럇 럈 량 럊 럋 럌 럍 럎 럏 럐 럑 럒 럓 럔 럕 럖 럗 럘 럙 럚 럛 럜 럝 럞 럟 럠 럡 럢 럣 럤 럥 럦 럧 럨 럩 럪 럫 러 럭 럮 럯 런 럱 럲 럳 럴 럵 럶 럷 럸 럹 럺 럻 럼 럽 럾 럿 렀 렁 렂 렃 렄 렅 렆 렇 레 렉 렊 렋 렌 렍 렎 렏 렐 렑 렒 렓 렔 렕 렖 렗 렘 렙 렚 렛 렜 렝 렞 렟 렠 렡 렢 렣 려 력 렦 렧 련 렩 렪 렫 렬 렭 렮 렯 렰 렱 렲 렳 렴 렵 렶 렷 렸 령 렺 렻 렼 렽 렾 렿 례 롁 롂 롃 롄 롅 롆 롇 롈 롉 롊 롋 롌 롍 롎 롏 롐 롑 롒 롓 롔 롕 롖 롗 롘 롙 롚 롛 로 록 롞 롟 론 롡 롢 롣 롤 롥 롦 롧 롨 롩 롪 롫 롬 롭 롮 롯 롰 롱 롲 롳 롴 롵 롶 롷 롸 롹 롺 롻 롼 롽 롾 롿 뢀 뢁 뢂 뢃 뢄 뢅 뢆 뢇 뢈 뢉 뢊 뢋 뢌 뢍 뢎 뢏 뢐 뢑 뢒 뢓 뢔 뢕 뢖 뢗 뢘 뢙 뢚 뢛 뢜 뢝 뢞 뢟 뢠 뢡 뢢 뢣 뢤 뢥 뢦 뢧 뢨 뢩 뢪 뢫 뢬 뢭 뢮 뢯 뢰 뢱 뢲 뢳 뢴 뢵 뢶 뢷 뢸 뢹 뢺 뢻 뢼 뢽 뢾 뢿 룀 룁 룂 룃 룄 룅 룆 룇 룈 룉 룊 룋 료 룍 룎 룏 룐 룑 룒 룓 룔 룕 룖 룗 룘 룙 룚 룛 룜 룝 룞 룟 룠 룡 룢 룣 룤 룥 룦 룧 루 룩 룪 룫 룬 룭 룮 룯 룰 룱 룲 룳 룴 룵 룶 룷 룸 룹 룺 룻 룼 룽 룾 룿 뤀 뤁 뤂 뤃 뤄 뤅 뤆 뤇 뤈 뤉 뤊 뤋 뤌 뤍 뤎 뤏 뤐 뤑 뤒 뤓 뤔 뤕 뤖 뤗 뤘 뤙 뤚 뤛 뤜 뤝 뤞 뤟 뤠 뤡 뤢 뤣 뤤 뤥 뤦 뤧 뤨 뤩 뤪 뤫 뤬 뤭 뤮 뤯 뤰 뤱 뤲 뤳 뤴 뤵 뤶 뤷 뤸 뤹 뤺 뤻 뤼 뤽 뤾 뤿 륀 륁 륂 륃 륄 륅 륆 륇 륈 륉 륊 륋 륌 륍 륎 륏 륐 륑 륒 륓 륔 륕 륖 륗 류 륙 륚 륛 륜 륝 륞 륟 률 륡 륢 륣 륤 륥 륦 륧 륨 륩 륪 륫 륬 륭 륮 륯 륰 륱 륲 륳 르 륵 륶 륷 른 륹 륺 륻 를 륽 륾 륿 릀 릁 릂 릃 름 릅 릆 릇 릈 릉 릊 릋 릌 릍 릎 릏 릐 릑 릒 릓 릔 릕 릖 릗 릘 릙 릚 릛 릜 릝 릞 릟 릠 릡 릢 릣 릤 릥 릦 릧 릨 릩 릪 릫 리 릭 릮 릯 린 릱 릲 릳 릴 릵 릶 릷 릸 릹 릺 릻 림 립 릾 릿 맀 링 맂 맃 맄 맅 맆 맇 마 막 맊 맋 만 맍 많 맏 말 맑 맒 맓 맔 맕 맖 맗 맘 맙 맚 맛 맜 망 맞 맟 맠 맡 맢 맣 매 맥 맦 맧 맨 맩 맪 맫 맬 맭 맮 맯 맰 맱 맲 맳 맴 맵 맶 맷 맸 맹 맺 맻 맼 맽 맾 맿 먀 먁 먂 먃 먄 먅 먆 먇 먈 먉 먊 먋 먌 먍 먎 먏 먐 먑 먒 먓 먔 먕 먖 먗 먘 먙 먚 먛 먜 먝 먞 먟 먠 먡 먢 먣 먤 먥 먦 먧 먨 먩 먪 먫 먬 먭 먮 먯 먰 먱 먲 먳 먴 먵 먶 먷 머 먹 먺 먻 먼 먽 먾 먿 멀 멁 멂 멃 멄 멅 멆 멇 멈 멉 멊 멋 멌 멍 멎 멏 멐 멑 멒 멓 메 멕 멖 멗 멘 멙 멚 멛 멜 멝 멞 멟 멠 멡 멢 멣 멤 멥 멦 멧 멨 멩 멪 멫 멬 멭 멮 멯 며 멱 멲 멳 면 멵 멶 멷 멸 멹 멺 멻 멼 멽 멾 멿 몀 몁 몂 몃 몄 명 몆 몇 몈 몉 몊 몋 몌 몍 몎 몏 몐 몑 몒 몓 몔 몕 몖 몗 몘 몙 몚 몛 몜 몝 몞 몟 몠 몡 몢 몣 몤 몥 몦 몧 모 목 몪 몫 몬 몭 몮 몯 몰 몱 몲 몳 몴 몵 몶 몷 몸 몹 몺 못 몼 몽 몾 몿 뫀 뫁 뫂 뫃 뫄 뫅 뫆 뫇 뫈 뫉 뫊 뫋 뫌 뫍 뫎 뫏 뫐 뫑 뫒 뫓 뫔 뫕 뫖 뫗 뫘 뫙 뫚 뫛 뫜 뫝 뫞 뫟 뫠 뫡 뫢 뫣 뫤 뫥 뫦 뫧 뫨 뫩 뫪 뫫 뫬 뫭 뫮 뫯 뫰 뫱 뫲 뫳 뫴 뫵 뫶 뫷 뫸 뫹 뫺 뫻 뫼 뫽 뫾 뫿 묀 묁 묂 묃 묄 묅 묆 묇 묈 묉 묊 묋 묌 묍 묎 묏 묐 묑 묒 묓 묔 묕 묖 묗 묘 묙 묚 묛 묜 묝 묞 묟 묠 묡 묢 묣 묤 묥 묦 묧 묨 묩 묪 묫 묬 묭 묮 묯 묰 묱 묲 묳 무 묵 묶 묷 문 묹 묺 묻 물 묽 묾 묿 뭀 뭁 뭂 뭃 뭄 뭅 뭆 뭇 뭈 뭉 뭊 뭋 뭌 뭍 뭎 뭏 뭐 뭑 뭒 뭓 뭔 뭕 뭖 뭗 뭘 뭙 뭚 뭛 뭜 뭝 뭞 뭟 뭠 뭡 뭢 뭣 뭤 뭥 뭦 뭧 뭨 뭩 뭪 뭫 뭬 뭭 뭮 뭯 뭰 뭱 뭲 뭳 뭴 뭵 뭶 뭷 뭸 뭹 뭺 뭻 뭼 뭽 뭾 뭿 뮀 뮁 뮂 뮃 뮄 뮅 뮆 뮇 뮈 뮉 뮊 뮋 뮌 뮍 뮎 뮏 뮐 뮑 뮒 뮓 뮔 뮕 뮖 뮗 뮘 뮙 뮚 뮛 뮜 뮝 뮞 뮟 뮠 뮡 뮢 뮣 뮤 뮥 뮦 뮧 뮨 뮩 뮪 뮫 뮬 뮭 뮮 뮯 뮰 뮱 뮲 뮳 뮴 뮵 뮶 뮷 뮸 뮹 뮺 뮻 뮼 뮽 뮾 뮿 므 믁 믂 믃 믄 믅 믆 믇 믈 믉 믊 믋 믌 믍 믎 믏 믐 믑 믒 믓 믔 믕 믖 믗 믘 믙 믚 믛 믜 믝 믞 믟 믠 믡 믢 믣 믤 믥 믦 믧 믨 믩 믪 믫 믬 믭 믮 믯 믰 믱 믲 믳 믴 믵 믶 믷 미 믹 믺 믻 민 믽 믾 믿 밀 밁 밂 밃 밄 밅 밆 밇 밈 밉 밊 밋 밌 밍 밎 및 밐 밑 밒 밓 바 박 밖 밗 반 밙 밚 받 발 밝 밞 밟 밠 밡 밢 밣 밤 밥 밦 밧 밨 방 밪 밫 밬 밭 밮 밯 배 백 밲 밳 밴 밵 밶 밷 밸 밹 밺 밻 밼 밽 밾 밿 뱀 뱁 뱂 뱃 뱄 뱅 뱆 뱇 뱈 뱉 뱊 뱋 뱌 뱍 뱎 뱏 뱐 뱑 뱒 뱓 뱔 뱕 뱖 뱗 뱘 뱙 뱚 뱛 뱜 뱝 뱞 뱟 뱠 뱡 뱢 뱣 뱤 뱥 뱦 뱧 뱨 뱩 뱪 뱫 뱬 뱭 뱮 뱯 뱰 뱱 뱲 뱳 뱴 뱵 뱶 뱷 뱸 뱹 뱺 뱻 뱼 뱽 뱾 뱿 벀 벁 벂 벃 버 벅 벆 벇 번 벉 벊 벋 벌 벍 벎 벏 벐 벑 벒 벓 범 법 벖 벗 벘 벙 벚 벛 벜 벝 벞 벟 베 벡 벢 벣 벤 벥 벦 벧 벨 벩 벪 벫 벬 벭 벮 벯 벰 벱 벲 벳 벴 벵 벶 벷 벸 벹 벺 벻 벼 벽 벾 벿 변 볁 볂 볃 별 볅 볆 볇 볈 볉 볊 볋 볌 볍 볎 볏 볐 병 볒 볓 볔 볕 볖 볗 볘 볙 볚 볛 볜 볝 볞 볟 볠 볡 볢 볣 볤 볥 볦 볧 볨 볩 볪 볫 볬 볭 볮 볯 볰 볱 볲 볳 보 복 볶 볷 본 볹 볺 볻 볼 볽 볾 볿 봀 봁 봂 봃 봄 봅 봆 봇 봈 봉 봊 봋 봌 봍 봎 봏 봐 봑 봒 봓 봔 봕 봖 봗 봘 봙 봚 봛 봜 봝 봞 봟 봠 봡 봢 봣 봤 봥 봦 봧 봨 봩 봪 봫 봬 봭 봮 봯 봰 봱 봲 봳 봴 봵 봶 봷 봸 봹 봺 봻 봼 봽 봾 봿 뵀 뵁 뵂 뵃 뵄 뵅 뵆 뵇 뵈 뵉 뵊 뵋 뵌 뵍 뵎 뵏 뵐 뵑 뵒 뵓 뵔 뵕 뵖 뵗 뵘 뵙 뵚 뵛 뵜 뵝 뵞 뵟 뵠 뵡 뵢 뵣 뵤 뵥 뵦 뵧 뵨 뵩 뵪 뵫 뵬 뵭 뵮 뵯 뵰 뵱 뵲 뵳 뵴 뵵 뵶 뵷 뵸 뵹 뵺 뵻 뵼 뵽 뵾 뵿 부 북 붂 붃 분 붅 붆 붇 불 붉 붊 붋 붌 붍 붎 붏 붐 붑 붒 붓 붔 붕 붖 붗 붘 붙 붚 붛 붜 붝 붞 붟 붠 붡 붢 붣 붤 붥 붦 붧 붨 붩 붪 붫 붬 붭 붮 붯 붰 붱 붲 붳 붴 붵 붶 붷 붸 붹 붺 붻 붼 붽 붾 붿 뷀 뷁 뷂 뷃 뷄 뷅 뷆 뷇 뷈 뷉 뷊 뷋 뷌 뷍 뷎 뷏 뷐 뷑 뷒 뷓 뷔 뷕 뷖 뷗 뷘 뷙 뷚 뷛 뷜 뷝 뷞 뷟 뷠 뷡 뷢 뷣 뷤 뷥 뷦 뷧 뷨 뷩 뷪 뷫 뷬 뷭 뷮 뷯 뷰 뷱 뷲 뷳 뷴 뷵 뷶 뷷 뷸 뷹 뷺 뷻 뷼 뷽 뷾 뷿 븀 븁 븂 븃 븄 븅 븆 븇 븈 븉 븊 븋 브 븍 븎 븏 븐 븑 븒 븓 블 븕 븖 븗 븘 븙 븚 븛 븜 븝 븞 븟 븠 븡 븢 븣 븤 븥 븦 븧 븨 븩 븪 븫 븬 븭 븮 븯 븰 븱 븲 븳 븴 븵 븶 븷 븸 븹 븺 븻 븼 븽 븾 븿 빀 빁 빂 빃 비 빅 빆 빇 빈 빉 빊 빋 빌 빍 빎 빏 빐 빑 빒 빓 빔 빕 빖 빗 빘 빙 빚 빛 빜 빝 빞 빟 빠 빡 빢 빣 빤 빥 빦 빧 빨 빩 빪 빫 빬 빭 빮 빯 빰 빱 빲 빳 빴 빵 빶 빷 빸 빹 빺 빻 빼 빽 빾 빿 뺀 뺁 뺂 뺃 뺄 뺅 뺆 뺇 뺈 뺉 뺊 뺋 뺌 뺍 뺎 뺏 뺐 뺑 뺒 뺓 뺔 뺕 뺖 뺗 뺘 뺙 뺚 뺛 뺜 뺝 뺞 뺟 뺠 뺡 뺢 뺣 뺤 뺥 뺦 뺧 뺨 뺩 뺪 뺫 뺬 뺭 뺮 뺯 뺰 뺱 뺲 뺳 뺴 뺵 뺶 뺷 뺸 뺹 뺺 뺻 뺼 뺽 뺾 뺿 뻀 뻁 뻂 뻃 뻄 뻅 뻆 뻇 뻈 뻉 뻊 뻋 뻌 뻍 뻎 뻏 뻐 뻑 뻒 뻓 뻔 뻕 뻖 뻗 뻘 뻙 뻚 뻛 뻜 뻝 뻞 뻟 뻠 뻡 뻢 뻣 뻤 뻥 뻦 뻧 뻨 뻩 뻪 뻫 뻬 뻭 뻮 뻯 뻰 뻱 뻲 뻳 뻴 뻵 뻶 뻷 뻸 뻹 뻺 뻻 뻼 뻽 뻾 뻿 뼀 뼁 뼂 뼃 뼄 뼅 뼆 뼇 뼈 뼉 뼊 뼋 뼌 뼍 뼎 뼏 뼐 뼑 뼒 뼓 뼔 뼕 뼖 뼗 뼘 뼙 뼚 뼛 뼜 뼝 뼞 뼟 뼠 뼡 뼢 뼣 뼤 뼥 뼦 뼧 뼨 뼩 뼪 뼫 뼬 뼭 뼮 뼯 뼰 뼱 뼲 뼳 뼴 뼵 뼶 뼷 뼸 뼹 뼺 뼻 뼼 뼽 뼾 뼿 뽀 뽁 뽂 뽃 뽄 뽅 뽆 뽇 뽈 뽉 뽊 뽋 뽌 뽍 뽎 뽏 뽐 뽑 뽒 뽓 뽔 뽕 뽖 뽗 뽘 뽙 뽚 뽛 뽜 뽝 뽞 뽟 뽠 뽡 뽢 뽣 뽤 뽥 뽦 뽧 뽨 뽩 뽪 뽫 뽬 뽭 뽮 뽯 뽰 뽱 뽲 뽳 뽴 뽵 뽶 뽷 뽸 뽹 뽺 뽻 뽼 뽽 뽾 뽿 뾀 뾁 뾂 뾃 뾄 뾅 뾆 뾇 뾈 뾉 뾊 뾋 뾌 뾍 뾎 뾏 뾐 뾑 뾒 뾓 뾔 뾕 뾖 뾗 뾘 뾙 뾚 뾛 뾜 뾝 뾞 뾟 뾠 뾡 뾢 뾣 뾤 뾥 뾦 뾧 뾨 뾩 뾪 뾫 뾬 뾭 뾮 뾯 뾰 뾱 뾲 뾳 뾴 뾵 뾶 뾷 뾸 뾹 뾺 뾻 뾼 뾽 뾾 뾿 뿀 뿁 뿂 뿃 뿄 뿅 뿆 뿇 뿈 뿉 뿊 뿋 뿌 뿍 뿎 뿏 뿐 뿑 뿒 뿓 뿔 뿕 뿖 뿗 뿘 뿙 뿚 뿛 뿜 뿝 뿞 뿟 뿠 뿡 뿢 뿣 뿤 뿥 뿦 뿧 뿨 뿩 뿪 뿫 뿬 뿭 뿮 뿯 뿰 뿱 뿲 뿳 뿴 뿵 뿶 뿷 뿸 뿹 뿺 뿻 뿼 뿽 뿾 뿿 쀀 쀁 쀂 쀃 쀄 쀅 쀆 쀇 쀈 쀉 쀊 쀋 쀌 쀍 쀎 쀏 쀐 쀑 쀒 쀓 쀔 쀕 쀖 쀗 쀘 쀙 쀚 쀛 쀜 쀝 쀞 쀟 쀠 쀡 쀢 쀣 쀤 쀥 쀦 쀧 쀨 쀩 쀪 쀫 쀬 쀭 쀮 쀯 쀰 쀱 쀲 쀳 쀴 쀵 쀶 쀷 쀸 쀹 쀺 쀻 쀼 쀽 쀾 쀿 쁀 쁁 쁂 쁃 쁄 쁅 쁆 쁇 쁈 쁉 쁊 쁋 쁌 쁍 쁎 쁏 쁐 쁑 쁒 쁓 쁔 쁕 쁖 쁗 쁘 쁙 쁚 쁛 쁜 쁝 쁞 쁟 쁠 쁡 쁢 쁣 쁤 쁥 쁦 쁧 쁨 쁩 쁪 쁫 쁬 쁭 쁮 쁯 쁰 쁱 쁲 쁳 쁴 쁵 쁶 쁷 쁸 쁹 쁺 쁻 쁼 쁽 쁾 쁿 삀 삁 삂 삃 삄 삅 삆 삇 삈 삉 삊 삋 삌 삍 삎 삏 삐 삑 삒 삓 삔 삕 삖 삗 삘 삙 삚 삛 삜 삝 삞 삟 삠 삡 삢 삣 삤 삥 삦 삧 삨 삩 삪 삫 사 삭 삮 삯 산 삱 삲 삳 살 삵 삶 삷 삸 삹 삺 삻 삼 삽 삾 삿 샀 상 샂 샃 샄 샅 샆 샇 새 색 샊 샋 샌 샍 샎 샏 샐 샑 샒 샓 샔 샕 샖 샗 샘 샙 샚 샛 샜 생 샞 샟 샠 샡 샢 샣 샤 샥 샦 샧 샨 샩 샪 샫 샬 샭 샮 샯 샰 샱 샲 샳 샴 샵 샶 샷 샸 샹 샺 샻 샼 샽 샾 샿 섀 섁 섂 섃 섄 섅 섆 섇 섈 섉 섊 섋 섌 섍 섎 섏 섐 섑 섒 섓 섔 섕 섖 섗 섘 섙 섚 섛 서 석 섞 섟 선 섡 섢 섣 설 섥 섦 섧 섨 섩 섪 섫 섬 섭 섮 섯 섰 성 섲 섳 섴 섵 섶 섷 세 섹 섺 섻 센 섽 섾 섿 셀 셁 셂 셃 셄 셅 셆 셇 셈 셉 셊 셋 셌 셍 셎 셏 셐 셑 셒 셓 셔 셕 셖 셗 션 셙 셚 셛 셜 셝 셞 셟 셠 셡 셢 셣 셤 셥 셦 셧 셨 셩 셪 셫 셬 셭 셮 셯 셰 셱 셲 셳 셴 셵 셶 셷 셸 셹 셺 셻 셼 셽 셾 셿 솀 솁 솂 솃 솄 솅 솆 솇 솈 솉 솊 솋 소 속 솎 솏 손 솑 솒 솓 솔 솕 솖 솗 솘 솙 솚 솛 솜 솝 솞 솟 솠 송 솢 솣 솤 솥 솦 솧 솨 솩 솪 솫 솬 솭 솮 솯 솰 솱 솲 솳 솴 솵 솶 솷 솸 솹 솺 솻 솼 솽 솾 솿 쇀 쇁 쇂 쇃 쇄 쇅 쇆 쇇 쇈 쇉 쇊 쇋 쇌 쇍 쇎 쇏 쇐 쇑 쇒 쇓 쇔 쇕 쇖 쇗 쇘 쇙 쇚 쇛 쇜 쇝 쇞 쇟 쇠 쇡 쇢 쇣 쇤 쇥 쇦 쇧 쇨 쇩 쇪 쇫 쇬 쇭 쇮 쇯 쇰 쇱 쇲 쇳 쇴 쇵 쇶 쇷 쇸 쇹 쇺 쇻 쇼 쇽 쇾 쇿 숀 숁 숂 숃 숄 숅 숆 숇 숈 숉 숊 숋 숌 숍 숎 숏 숐 숑 숒 숓 숔 숕 숖 숗 수 숙 숚 숛 순 숝 숞 숟 술 숡 숢 숣 숤 숥 숦 숧 숨 숩 숪 숫 숬 숭 숮 숯 숰 숱 숲 숳 숴 숵 숶 숷 숸 숹 숺 숻 숼 숽 숾 숿 쉀 쉁 쉂 쉃 쉄 쉅 쉆 쉇 쉈 쉉 쉊 쉋 쉌 쉍 쉎 쉏 쉐 쉑 쉒 쉓 쉔 쉕 쉖 쉗 쉘 쉙 쉚 쉛 쉜 쉝 쉞 쉟 쉠 쉡 쉢 쉣 쉤 쉥 쉦 쉧 쉨 쉩 쉪 쉫 쉬 쉭 쉮 쉯 쉰 쉱 쉲 쉳 쉴 쉵 쉶 쉷 쉸 쉹 쉺 쉻 쉼 쉽 쉾 쉿 슀 슁 슂 슃 슄 슅 슆 슇 슈 슉 슊 슋 슌 슍 슎 슏 슐 슑 슒 슓 슔 슕 슖 슗 슘 슙 슚 슛 슜 슝 슞 슟 슠 슡 슢 슣 스 슥 슦 슧 슨 슩 슪 슫 슬 슭 슮 슯 슰 슱 슲 슳 슴 습 슶 슷 슸 승 슺 슻 슼 슽 슾 슿 싀 싁 싂 싃 싄 싅 싆 싇 싈 싉 싊 싋 싌 싍 싎 싏 싐 싑 싒 싓 싔 싕 싖 싗 싘 싙 싚 싛 시 식 싞 싟 신 싡 싢 싣 실 싥 싦 싧 싨 싩 싪 싫 심 십 싮 싯 싰 싱 싲 싳 싴 싵 싶 싷 싸 싹 싺 싻 싼 싽 싾 싿 쌀 쌁 쌂 쌃 쌄 쌅 쌆 쌇 쌈 쌉 쌊 쌋 쌌 쌍 쌎 쌏 쌐 쌑 쌒 쌓 쌔 쌕 쌖 쌗 쌘 쌙 쌚 쌛 쌜 쌝 쌞 쌟 쌠 쌡 쌢 쌣 쌤 쌥 쌦 쌧 쌨 쌩 쌪 쌫 쌬 쌭 쌮 쌯 쌰 쌱 쌲 쌳 쌴 쌵 쌶 쌷 쌸 쌹 쌺 쌻 쌼 쌽 쌾 쌿 썀 썁 썂 썃 썄 썅 썆 썇 썈 썉 썊 썋 썌 썍 썎 썏 썐 썑 썒 썓 썔 썕 썖 썗 썘 썙 썚 썛 썜 썝 썞 썟 썠 썡 썢 썣 썤 썥 썦 썧 써 썩 썪 썫 썬 썭 썮 썯 썰 썱 썲 썳 썴 썵 썶 썷 썸 썹 썺 썻 썼 썽 썾 썿 쎀 쎁 쎂 쎃 쎄 쎅 쎆 쎇 쎈 쎉 쎊 쎋 쎌 쎍 쎎 쎏 쎐 쎑 쎒 쎓 쎔 쎕 쎖 쎗 쎘 쎙 쎚 쎛 쎜 쎝 쎞 쎟 쎠 쎡 쎢 쎣 쎤 쎥 쎦 쎧 쎨 쎩 쎪 쎫 쎬 쎭 쎮 쎯 쎰 쎱 쎲 쎳 쎴 쎵 쎶 쎷 쎸 쎹 쎺 쎻 쎼 쎽 쎾 쎿 쏀 쏁 쏂 쏃 쏄 쏅 쏆 쏇 쏈 쏉 쏊 쏋 쏌 쏍 쏎 쏏 쏐 쏑 쏒 쏓 쏔 쏕 쏖 쏗 쏘 쏙 쏚 쏛 쏜 쏝 쏞 쏟 쏠 쏡 쏢 쏣 쏤 쏥 쏦 쏧 쏨 쏩 쏪 쏫 쏬 쏭 쏮 쏯 쏰 쏱 쏲 쏳 쏴 쏵 쏶 쏷 쏸 쏹 쏺 쏻 쏼 쏽 쏾 쏿 쐀 쐁 쐂 쐃 쐄 쐅 쐆 쐇 쐈 쐉 쐊 쐋 쐌 쐍 쐎 쐏 쐐 쐑 쐒 쐓 쐔 쐕 쐖 쐗 쐘 쐙 쐚 쐛 쐜 쐝 쐞 쐟 쐠 쐡 쐢 쐣 쐤 쐥 쐦 쐧 쐨 쐩 쐪 쐫 쐬 쐭 쐮 쐯 쐰 쐱 쐲 쐳 쐴 쐵 쐶 쐷 쐸 쐹 쐺 쐻 쐼 쐽 쐾 쐿 쑀 쑁 쑂 쑃 쑄 쑅 쑆 쑇 쑈 쑉 쑊 쑋 쑌 쑍 쑎 쑏 쑐 쑑 쑒 쑓 쑔 쑕 쑖 쑗 쑘 쑙 쑚 쑛 쑜 쑝 쑞 쑟 쑠 쑡 쑢 쑣 쑤 쑥 쑦 쑧 쑨 쑩 쑪 쑫 쑬 쑭 쑮 쑯 쑰 쑱 쑲 쑳 쑴 쑵 쑶 쑷 쑸 쑹 쑺 쑻 쑼 쑽 쑾 쑿 쒀 쒁 쒂 쒃 쒄 쒅 쒆 쒇 쒈 쒉 쒊 쒋 쒌 쒍 쒎 쒏 쒐 쒑 쒒 쒓 쒔 쒕 쒖 쒗 쒘 쒙 쒚 쒛 쒜 쒝 쒞 쒟 쒠 쒡 쒢 쒣 쒤 쒥 쒦 쒧 쒨 쒩 쒪 쒫 쒬 쒭 쒮 쒯 쒰 쒱 쒲 쒳 쒴 쒵 쒶 쒷 쒸 쒹 쒺 쒻 쒼 쒽 쒾 쒿 쓀 쓁 쓂 쓃 쓄 쓅 쓆 쓇 쓈 쓉 쓊 쓋 쓌 쓍 쓎 쓏 쓐 쓑 쓒 쓓 쓔 쓕 쓖 쓗 쓘 쓙 쓚 쓛 쓜 쓝 쓞 쓟 쓠 쓡 쓢 쓣 쓤 쓥 쓦 쓧 쓨 쓩 쓪 쓫 쓬 쓭 쓮 쓯 쓰 쓱 쓲 쓳 쓴 쓵 쓶 쓷 쓸 쓹 쓺 쓻 쓼 쓽 쓾 쓿 씀 씁 씂 씃 씄 씅 씆 씇 씈 씉 씊 씋 씌 씍 씎 씏 씐 씑 씒 씓 씔 씕 씖 씗 씘 씙 씚 씛 씜 씝 씞 씟 씠 씡 씢 씣 씤 씥 씦 씧 씨 씩 씪 씫 씬 씭 씮 씯 씰 씱 씲 씳 씴 씵 씶 씷 씸 씹 씺 씻 씼 씽 씾 씿 앀 앁 앂 앃 아 악 앆 앇 안 앉 않 앋 알 앍 앎 앏 앐 앑 앒 앓 암 압 앖 앗 았 앙 앚 앛 앜 앝 앞 앟 애 액 앢 앣 앤 앥 앦 앧 앨 앩 앪 앫 앬 앭 앮 앯 앰 앱 앲 앳 앴 앵 앶 앷 앸 앹 앺 앻 야 약 앾 앿 얀 얁 얂 얃 얄 얅 얆 얇 얈 얉 얊 얋 얌 얍 얎 얏 얐 양 얒 얓 얔 얕 얖 얗 얘 얙 얚 얛 얜 얝 얞 얟 얠 얡 얢 얣 얤 얥 얦 얧 얨 얩 얪 얫 얬 얭 얮 얯 얰 얱 얲 얳 어 억 얶 얷 언 얹 얺 얻 얼 얽 얾 얿 엀 엁 엂 엃 엄 업 없 엇 었 엉 엊 엋 엌 엍 엎 엏 에 엑 엒 엓 엔 엕 엖 엗 엘 엙 엚 엛 엜 엝 엞 엟 엠 엡 엢 엣 엤 엥 엦 엧 엨 엩 엪 엫 여 역 엮 엯 연 엱 엲 엳 열 엵 엶 엷 엸 엹 엺 엻 염 엽 엾 엿 였 영 옂 옃 옄 옅 옆 옇 예 옉 옊 옋 옌 옍 옎 옏 옐 옑 옒 옓 옔 옕 옖 옗 옘 옙 옚 옛 옜 옝 옞 옟 옠 옡 옢 옣 오 옥 옦 옧 온 옩 옪 옫 올 옭 옮 옯 옰 옱 옲 옳 옴 옵 옶 옷 옸 옹 옺 옻 옼 옽 옾 옿 와 왁 왂 왃 완 왅 왆 왇 왈 왉 왊 왋 왌 왍 왎 왏 왐 왑 왒 왓 왔 왕 왖 왗 왘 왙 왚 왛 왜 왝 왞 왟 왠 왡 왢 왣 왤 왥 왦 왧 왨 왩 왪 왫 왬 왭 왮 왯 왰 왱 왲 왳 왴 왵 왶 왷 외 왹 왺 왻 왼 왽 왾 왿 욀 욁 욂 욃 욄 욅 욆 욇 욈 욉 욊 욋 욌 욍 욎 욏 욐 욑 욒 욓 요 욕 욖 욗 욘 욙 욚 욛 욜 욝 욞 욟 욠 욡 욢 욣 욤 욥 욦 욧 욨 용 욪 욫 욬 욭 욮 욯 우 욱 욲 욳 운 욵 욶 욷 울 욹 욺 욻 욼 욽 욾 욿 움 웁 웂 웃 웄 웅 웆 웇 웈 웉 웊 웋 워 웍 웎 웏 원 웑 웒 웓 월 웕 웖 웗 웘 웙 웚 웛 웜 웝 웞 웟 웠 웡 웢 웣 웤 웥 웦 웧 웨 웩 웪 웫 웬 웭 웮 웯 웰 웱 웲 웳 웴 웵 웶 웷 웸 웹 웺 웻 웼 웽 웾 웿 윀 윁 윂 윃 위 윅 윆 윇 윈 윉 윊 윋 윌 윍 윎 윏 윐 윑 윒 윓 윔 윕 윖 윗 윘 윙 윚 윛 윜 윝 윞 윟 유 육 윢 윣 윤 윥 윦 윧 율 윩 윪 윫 윬 윭 윮 윯 윰 윱 윲 윳 윴 융 윶 윷 윸 윹 윺 윻 으 윽 윾 윿 은 읁 읂 읃 을 읅 읆 읇 읈 읉 읊 읋 음 읍 읎 읏 읐 응 읒 읓 읔 읕 읖 읗 의 읙 읚 읛 읜 읝 읞 읟 읠 읡 읢 읣 읤 읥 읦 읧 읨 읩 읪 읫 읬 읭 읮 읯 읰 읱 읲 읳 이 익 읶 읷 인 읹 읺 읻 일 읽 읾 읿 잀 잁 잂 잃 임 입 잆 잇 있 잉 잊 잋 잌 잍 잎 잏 자 작 잒 잓 잔 잕 잖 잗 잘 잙 잚 잛 잜 잝 잞 잟 잠 잡 잢 잣 잤 장 잦 잧 잨 잩 잪 잫 재 잭 잮 잯 잰 잱 잲 잳 잴 잵 잶 잷 잸 잹 잺 잻 잼 잽 잾 잿 쟀 쟁 쟂 쟃 쟄 쟅 쟆 쟇 쟈 쟉 쟊 쟋 쟌 쟍 쟎 쟏 쟐 쟑 쟒 쟓 쟔 쟕 쟖 쟗 쟘 쟙 쟚 쟛 쟜 쟝 쟞 쟟 쟠 쟡 쟢 쟣 쟤 쟥 쟦 쟧 쟨 쟩 쟪 쟫 쟬 쟭 쟮 쟯 쟰 쟱 쟲 쟳 쟴 쟵 쟶 쟷 쟸 쟹 쟺 쟻 쟼 쟽 쟾 쟿 저 적 젂 젃 전 젅 젆 젇 절 젉 젊 젋 젌 젍 젎 젏 점 접 젒 젓 젔 정 젖 젗 젘 젙 젚 젛 제 젝 젞 젟 젠 젡 젢 젣 젤 젥 젦 젧 젨 젩 젪 젫 젬 젭 젮 젯 젰 젱 젲 젳 젴 젵 젶 젷 져 젹 젺 젻 젼 젽 젾 젿 졀 졁 졂 졃 졄 졅 졆 졇 졈 졉 졊 졋 졌 졍 졎 졏 졐 졑 졒 졓 졔 졕 졖 졗 졘 졙 졚 졛 졜 졝 졞 졟 졠 졡 졢 졣 졤 졥 졦 졧 졨 졩 졪 졫 졬 졭 졮 졯 조 족 졲 졳 존 졵 졶 졷 졸 졹 졺 졻 졼 졽 졾 졿 좀 좁 좂 좃 좄 종 좆 좇 좈 좉 좊 좋 좌 좍 좎 좏 좐 좑 좒 좓 좔 좕 좖 좗 좘 좙 좚 좛 좜 좝 좞 좟 좠 좡 좢 좣 좤 좥 좦 좧 좨 좩 좪 좫 좬 좭 좮 좯 좰 좱 좲 좳 좴 좵 좶 좷 좸 좹 좺 좻 좼 좽 좾 좿 죀 죁 죂 죃 죄 죅 죆 죇 죈 죉 죊 죋 죌 죍 죎 죏 죐 죑 죒 죓 죔 죕 죖 죗 죘 죙 죚 죛 죜 죝 죞 죟 죠 죡 죢 죣 죤 죥 죦 죧 죨 죩 죪 죫 죬 죭 죮 죯 죰 죱 죲 죳 죴 죵 죶 죷 죸 죹 죺 죻 주 죽 죾 죿 준 줁 줂 줃 줄 줅 줆 줇 줈 줉 줊 줋 줌 줍 줎 줏 줐 중 줒 줓 줔 줕 줖 줗 줘 줙 줚 줛 줜 줝 줞 줟 줠 줡 줢 줣 줤 줥 줦 줧 줨 줩 줪 줫 줬 줭 줮 줯 줰 줱 줲 줳 줴 줵 줶 줷 줸 줹 줺 줻 줼 줽 줾 줿 쥀 쥁 쥂 쥃 쥄 쥅 쥆 쥇 쥈 쥉 쥊 쥋 쥌 쥍 쥎 쥏 쥐 쥑 쥒 쥓 쥔 쥕 쥖 쥗 쥘 쥙 쥚 쥛 쥜 쥝 쥞 쥟 쥠 쥡 쥢 쥣 쥤 쥥 쥦 쥧 쥨 쥩 쥪 쥫 쥬 쥭 쥮 쥯 쥰 쥱 쥲 쥳 쥴 쥵 쥶 쥷 쥸 쥹 쥺 쥻 쥼 쥽 쥾 쥿 즀 즁 즂 즃 즄 즅 즆 즇 즈 즉 즊 즋 즌 즍 즎 즏 즐 즑 즒 즓 즔 즕 즖 즗 즘 즙 즚 즛 즜 증 즞 즟 즠 즡 즢 즣 즤 즥 즦 즧 즨 즩 즪 즫 즬 즭 즮 즯 즰 즱 즲 즳 즴 즵 즶 즷 즸 즹 즺 즻 즼 즽 즾 즿 지 직 짂 짃 진 짅 짆 짇 질 짉 짊 짋 짌 짍 짎 짏 짐 집 짒 짓 짔 징 짖 짗 짘 짙 짚 짛 짜 짝 짞 짟 짠 짡 짢 짣 짤 짥 짦 짧 짨 짩 짪 짫 짬 짭 짮 짯 짰 짱 짲 짳 짴 짵 짶 짷 째 짹 짺 짻 짼 짽 짾 짿 쨀 쨁 쨂 쨃 쨄 쨅 쨆 쨇 쨈 쨉 쨊 쨋 쨌 쨍 쨎 쨏 쨐 쨑 쨒 쨓 쨔 쨕 쨖 쨗 쨘 쨙 쨚 쨛 쨜 쨝 쨞 쨟 쨠 쨡 쨢 쨣 쨤 쨥 쨦 쨧 쨨 쨩 쨪 쨫 쨬 쨭 쨮 쨯 쨰 쨱 쨲 쨳 쨴 쨵 쨶 쨷 쨸 쨹 쨺 쨻 쨼 쨽 쨾 쨿 쩀 쩁 쩂 쩃 쩄 쩅 쩆 쩇 쩈 쩉 쩊 쩋 쩌 쩍 쩎 쩏 쩐 쩑 쩒 쩓 쩔 쩕 쩖 쩗 쩘 쩙 쩚 쩛 쩜 쩝 쩞 쩟 쩠 쩡 쩢 쩣 쩤 쩥 쩦 쩧 쩨 쩩 쩪 쩫 쩬 쩭 쩮 쩯 쩰 쩱 쩲 쩳 쩴 쩵 쩶 쩷 쩸 쩹 쩺 쩻 쩼 쩽 쩾 쩿 쪀 쪁 쪂 쪃 쪄 쪅 쪆 쪇 쪈 쪉 쪊 쪋 쪌 쪍 쪎 쪏 쪐 쪑 쪒 쪓 쪔 쪕 쪖 쪗 쪘 쪙 쪚 쪛 쪜 쪝 쪞 쪟 쪠 쪡 쪢 쪣 쪤 쪥 쪦 쪧 쪨 쪩 쪪 쪫 쪬 쪭 쪮 쪯 쪰 쪱 쪲 쪳 쪴 쪵 쪶 쪷 쪸 쪹 쪺 쪻 쪼 쪽 쪾 쪿 쫀 쫁 쫂 쫃 쫄 쫅 쫆 쫇 쫈 쫉 쫊 쫋 쫌 쫍 쫎 쫏 쫐 쫑 쫒 쫓 쫔 쫕 쫖 쫗 쫘 쫙 쫚 쫛 쫜 쫝 쫞 쫟 쫠 쫡 쫢 쫣 쫤 쫥 쫦 쫧 쫨 쫩 쫪 쫫 쫬 쫭 쫮 쫯 쫰 쫱 쫲 쫳 쫴 쫵 쫶 쫷 쫸 쫹 쫺 쫻 쫼 쫽 쫾 쫿 쬀 쬁 쬂 쬃 쬄 쬅 쬆 쬇 쬈 쬉 쬊 쬋 쬌 쬍 쬎 쬏 쬐 쬑 쬒 쬓 쬔 쬕 쬖 쬗 쬘 쬙 쬚 쬛 쬜 쬝 쬞 쬟 쬠 쬡 쬢 쬣 쬤 쬥 쬦 쬧 쬨 쬩 쬪 쬫 쬬 쬭 쬮 쬯 쬰 쬱 쬲 쬳 쬴 쬵 쬶 쬷 쬸 쬹 쬺 쬻 쬼 쬽 쬾 쬿 쭀 쭁 쭂 쭃 쭄 쭅 쭆 쭇 쭈 쭉 쭊 쭋 쭌 쭍 쭎 쭏 쭐 쭑 쭒 쭓 쭔 쭕 쭖 쭗 쭘 쭙 쭚 쭛 쭜 쭝 쭞 쭟 쭠 쭡 쭢 쭣 쭤 쭥 쭦 쭧 쭨 쭩 쭪 쭫 쭬 쭭 쭮 쭯 쭰 쭱 쭲 쭳 쭴 쭵 쭶 쭷 쭸 쭹 쭺 쭻 쭼 쭽 쭾 쭿 쮀 쮁 쮂 쮃 쮄 쮅 쮆 쮇 쮈 쮉 쮊 쮋 쮌 쮍 쮎 쮏 쮐 쮑 쮒 쮓 쮔 쮕 쮖 쮗 쮘 쮙 쮚 쮛 쮜 쮝 쮞 쮟 쮠 쮡 쮢 쮣 쮤 쮥 쮦 쮧 쮨 쮩 쮪 쮫 쮬 쮭 쮮 쮯 쮰 쮱 쮲 쮳 쮴 쮵 쮶 쮷 쮸 쮹 쮺 쮻 쮼 쮽 쮾 쮿 쯀 쯁 쯂 쯃 쯄 쯅 쯆 쯇 쯈 쯉 쯊 쯋 쯌 쯍 쯎 쯏 쯐 쯑 쯒 쯓 쯔 쯕 쯖 쯗 쯘 쯙 쯚 쯛 쯜 쯝 쯞 쯟 쯠 쯡 쯢 쯣 쯤 쯥 쯦 쯧 쯨 쯩 쯪 쯫 쯬 쯭 쯮 쯯 쯰 쯱 쯲 쯳 쯴 쯵 쯶 쯷 쯸 쯹 쯺 쯻 쯼 쯽 쯾 쯿 찀 찁 찂 찃 찄 찅 찆 찇 찈 찉 찊 찋 찌 찍 찎 찏 찐 찑 찒 찓 찔 찕 찖 찗 찘 찙 찚 찛 찜 찝 찞 찟 찠 찡 찢 찣 찤 찥 찦 찧 차 착 찪 찫 찬 찭 찮 찯 찰 찱 찲 찳 찴 찵 찶 찷 참 찹 찺 찻 찼 창 찾 찿 챀 챁 챂 챃 채 책 챆 챇 챈 챉 챊 챋 챌 챍 챎 챏 챐 챑 챒 챓 챔 챕 챖 챗 챘 챙 챚 챛 챜 챝 챞 챟 챠 챡 챢 챣 챤 챥 챦 챧 챨 챩 챪 챫 챬 챭 챮 챯 챰 챱 챲 챳 챴 챵 챶 챷 챸 챹 챺 챻 챼 챽 챾 챿 첀 첁 첂 첃 첄 첅 첆 첇 첈 첉 첊 첋 첌 첍 첎 첏 첐 첑 첒 첓 첔 첕 첖 첗 처 척 첚 첛 천 첝 첞 첟 철 첡 첢 첣 첤 첥 첦 첧 첨 첩 첪 첫 첬 청 첮 첯 첰 첱 첲 첳 체 첵 첶 첷 첸 첹 첺 첻 첼 첽 첾 첿 쳀 쳁 쳂 쳃 쳄 쳅 쳆 쳇 쳈 쳉 쳊 쳋 쳌 쳍 쳎 쳏 쳐 쳑 쳒 쳓 쳔 쳕 쳖 쳗 쳘 쳙 쳚 쳛 쳜 쳝 쳞 쳟 쳠 쳡 쳢 쳣 쳤 쳥 쳦 쳧 쳨 쳩 쳪 쳫 쳬 쳭 쳮 쳯 쳰 쳱 쳲 쳳 쳴 쳵 쳶 쳷 쳸 쳹 쳺 쳻 쳼 쳽 쳾 쳿 촀 촁 촂 촃 촄 촅 촆 촇 초 촉 촊 촋 촌 촍 촎 촏 촐 촑 촒 촓 촔 촕 촖 촗 촘 촙 촚 촛 촜 총 촞 촟 촠 촡 촢 촣 촤 촥 촦 촧 촨 촩 촪 촫 촬 촭 촮 촯 촰 촱 촲 촳 촴 촵 촶 촷 촸 촹 촺 촻 촼 촽 촾 촿 쵀 쵁 쵂 쵃 쵄 쵅 쵆 쵇 쵈 쵉 쵊 쵋 쵌 쵍 쵎 쵏 쵐 쵑 쵒 쵓 쵔 쵕 쵖 쵗 쵘 쵙 쵚 쵛 최 쵝 쵞 쵟 쵠 쵡 쵢 쵣 쵤 쵥 쵦 쵧 쵨 쵩 쵪 쵫 쵬 쵭 쵮 쵯 쵰 쵱 쵲 쵳 쵴 쵵 쵶 쵷 쵸 쵹 쵺 쵻 쵼 쵽 쵾 쵿 춀 춁 춂 춃 춄 춅 춆 춇 춈 춉 춊 춋 춌 춍 춎 춏 춐 춑 춒 춓 추 축 춖 춗 춘 춙 춚 춛 출 춝 춞 춟 춠 춡 춢 춣 춤 춥 춦 춧 춨 충 춪 춫 춬 춭 춮 춯 춰 춱 춲 춳 춴 춵 춶 춷 춸 춹 춺 춻 춼 춽 춾 춿 췀 췁 췂 췃 췄 췅 췆 췇 췈 췉 췊 췋 췌 췍 췎 췏 췐 췑 췒 췓 췔 췕 췖 췗 췘 췙 췚 췛 췜 췝 췞 췟 췠 췡 췢 췣 췤 췥 췦 췧 취 췩 췪 췫 췬 췭 췮 췯 췰 췱 췲 췳 췴 췵 췶 췷 췸 췹 췺 췻 췼 췽 췾 췿 츀 츁 츂 츃 츄 츅 츆 츇 츈 츉 츊 츋 츌 츍 츎 츏 츐 츑 츒 츓 츔 츕 츖 츗 츘 츙 츚 츛 츜 츝 츞 츟 츠 측 츢 츣 츤 츥 츦 츧 츨 츩 츪 츫 츬 츭 츮 츯 츰 츱 츲 츳 츴 층 츶 츷 츸 츹 츺 츻 츼 츽 츾 츿 칀 칁 칂 칃 칄 칅 칆 칇 칈 칉 칊 칋 칌 칍 칎 칏 칐 칑 칒 칓 칔 칕 칖 칗 치 칙 칚 칛 친 칝 칞 칟 칠 칡 칢 칣 칤 칥 칦 칧 침 칩 칪 칫 칬 칭 칮 칯 칰 칱 칲 칳 카 칵 칶 칷 칸 칹 칺 칻 칼 칽 칾 칿 캀 캁 캂 캃 캄 캅 캆 캇 캈 캉 캊 캋 캌 캍 캎 캏 캐 캑 캒 캓 캔 캕 캖 캗 캘 캙 캚 캛 캜 캝 캞 캟 캠 캡 캢 캣 캤 캥 캦 캧 캨 캩 캪 캫 캬 캭 캮 캯 캰 캱 캲 캳 캴 캵 캶 캷 캸 캹 캺 캻 캼 캽 캾 캿 컀 컁 컂 컃 컄 컅 컆 컇 컈 컉 컊 컋 컌 컍 컎 컏 컐 컑 컒 컓 컔 컕 컖 컗 컘 컙 컚 컛 컜 컝 컞 컟 컠 컡 컢 컣 커 컥 컦 컧 컨 컩 컪 컫 컬 컭 컮 컯 컰 컱 컲 컳 컴 컵 컶 컷 컸 컹 컺 컻 컼 컽 컾 컿 케 켁 켂 켃 켄 켅 켆 켇 켈 켉 켊 켋 켌 켍 켎 켏 켐 켑 켒 켓 켔 켕 켖 켗 켘 켙 켚 켛 켜 켝 켞 켟 켠 켡 켢 켣 켤 켥 켦 켧 켨 켩 켪 켫 켬 켭 켮 켯 켰 켱 켲 켳 켴 켵 켶 켷 켸 켹 켺 켻 켼 켽 켾 켿 콀 콁 콂 콃 콄 콅 콆 콇 콈 콉 콊 콋 콌 콍 콎 콏 콐 콑 콒 콓 코 콕 콖 콗 콘 콙 콚 콛 콜 콝 콞 콟 콠 콡 콢 콣 콤 콥 콦 콧 콨 콩 콪 콫 콬 콭 콮 콯 콰 콱 콲 콳 콴 콵 콶 콷 콸 콹 콺 콻 콼 콽 콾 콿 쾀 쾁 쾂 쾃 쾄 쾅 쾆 쾇 쾈 쾉 쾊 쾋 쾌 쾍 쾎 쾏 쾐 쾑 쾒 쾓 쾔 쾕 쾖 쾗 쾘 쾙 쾚 쾛 쾜 쾝 쾞 쾟 쾠 쾡 쾢 쾣 쾤 쾥 쾦 쾧 쾨 쾩 쾪 쾫 쾬 쾭 쾮 쾯 쾰 쾱 쾲 쾳 쾴 쾵 쾶 쾷 쾸 쾹 쾺 쾻 쾼 쾽 쾾 쾿 쿀 쿁 쿂 쿃 쿄 쿅 쿆 쿇 쿈 쿉 쿊 쿋 쿌 쿍 쿎 쿏 쿐 쿑 쿒 쿓 쿔 쿕 쿖 쿗 쿘 쿙 쿚 쿛 쿜 쿝 쿞 쿟 쿠 쿡 쿢 쿣 쿤 쿥 쿦 쿧 쿨 쿩 쿪 쿫 쿬 쿭 쿮 쿯 쿰 쿱 쿲 쿳 쿴 쿵 쿶 쿷 쿸 쿹 쿺 쿻 쿼 쿽 쿾 쿿 퀀 퀁 퀂 퀃 퀄 퀅 퀆 퀇 퀈 퀉 퀊 퀋 퀌 퀍 퀎 퀏 퀐 퀑 퀒 퀓 퀔 퀕 퀖 퀗 퀘 퀙 퀚 퀛 퀜 퀝 퀞 퀟 퀠 퀡 퀢 퀣 퀤 퀥 퀦 퀧 퀨 퀩 퀪 퀫 퀬 퀭 퀮 퀯 퀰 퀱 퀲 퀳 퀴 퀵 퀶 퀷 퀸 퀹 퀺 퀻 퀼 퀽 퀾 퀿 큀 큁 큂 큃 큄 큅 큆 큇 큈 큉 큊 큋 큌 큍 큎 큏 큐 큑 큒 큓 큔 큕 큖 큗 큘 큙 큚 큛 큜 큝 큞 큟 큠 큡 큢 큣 큤 큥 큦 큧 큨 큩 큪 큫 크 큭 큮 큯 큰 큱 큲 큳 클 큵 큶 큷 큸 큹 큺 큻 큼 큽 큾 큿 킀 킁 킂 킃 킄 킅 킆 킇 킈 킉 킊 킋 킌 킍 킎 킏 킐 킑 킒 킓 킔 킕 킖 킗 킘 킙 킚 킛 킜 킝 킞 킟 킠 킡 킢 킣 키 킥 킦 킧 킨 킩 킪 킫 킬 킭 킮 킯 킰 킱 킲 킳 킴 킵 킶 킷 킸 킹 킺 킻 킼 킽 킾 킿 타 탁 탂 탃 탄 탅 탆 탇 탈 탉 탊 탋 탌 탍 탎 탏 탐 탑 탒 탓 탔 탕 탖 탗 탘 탙 탚 탛 태 택 탞 탟 탠 탡 탢 탣 탤 탥 탦 탧 탨 탩 탪 탫 탬 탭 탮 탯 탰 탱 탲 탳 탴 탵 탶 탷 탸 탹 탺 탻 탼 탽 탾 탿 턀 턁 턂 턃 턄 턅 턆 턇 턈 턉 턊 턋 턌 턍 턎 턏 턐 턑 턒 턓 턔 턕 턖 턗 턘 턙 턚 턛 턜 턝 턞 턟 턠 턡 턢 턣 턤 턥 턦 턧 턨 턩 턪 턫 턬 턭 턮 턯 터 턱 턲 턳 턴 턵 턶 턷 털 턹 턺 턻 턼 턽 턾 턿 텀 텁 텂 텃 텄 텅 텆 텇 텈 텉 텊 텋 테 텍 텎 텏 텐 텑 텒 텓 텔 텕 텖 텗 텘 텙 텚 텛 템 텝 텞 텟 텠 텡 텢 텣 텤 텥 텦 텧 텨 텩 텪 텫 텬 텭 텮 텯 텰 텱 텲 텳 텴 텵 텶 텷 텸 텹 텺 텻 텼 텽 텾 텿 톀 톁 톂 톃 톄 톅 톆 톇 톈 톉 톊 톋 톌 톍 톎 톏 톐 톑 톒 톓 톔 톕 톖 톗 톘 톙 톚 톛 톜 톝 톞 톟 토 톡 톢 톣 톤 톥 톦 톧 톨 톩 톪 톫 톬 톭 톮 톯 톰 톱 톲 톳 톴 통 톶 톷 톸 톹 톺 톻 톼 톽 톾 톿 퇀 퇁 퇂 퇃 퇄 퇅 퇆 퇇 퇈 퇉 퇊 퇋 퇌 퇍 퇎 퇏 퇐 퇑 퇒 퇓 퇔 퇕 퇖 퇗 퇘 퇙 퇚 퇛 퇜 퇝 퇞 퇟 퇠 퇡 퇢 퇣 퇤 퇥 퇦 퇧 퇨 퇩 퇪 퇫 퇬 퇭 퇮 퇯 퇰 퇱 퇲 퇳 퇴 퇵 퇶 퇷 퇸 퇹 퇺 퇻 퇼 퇽 퇾 퇿 툀 툁 툂 툃 툄 툅 툆 툇 툈 툉 툊 툋 툌 툍 툎 툏 툐 툑 툒 툓 툔 툕 툖 툗 툘 툙 툚 툛 툜 툝 툞 툟 툠 툡 툢 툣 툤 툥 툦 툧 툨 툩 툪 툫 투 툭 툮 툯 툰 툱 툲 툳 툴 툵 툶 툷 툸 툹 툺 툻 툼 툽 툾 툿 퉀 퉁 퉂 퉃 퉄 퉅 퉆 퉇 퉈 퉉 퉊 퉋 퉌 퉍 퉎 퉏 퉐 퉑 퉒 퉓 퉔 퉕 퉖 퉗 퉘 퉙 퉚 퉛 퉜 퉝 퉞 퉟 퉠 퉡 퉢 퉣 퉤 퉥 퉦 퉧 퉨 퉩 퉪 퉫 퉬 퉭 퉮 퉯 퉰 퉱 퉲 퉳 퉴 퉵 퉶 퉷 퉸 퉹 퉺 퉻 퉼 퉽 퉾 퉿 튀 튁 튂 튃 튄 튅 튆 튇 튈 튉 튊 튋 튌 튍 튎 튏 튐 튑 튒 튓 튔 튕 튖 튗 튘 튙 튚 튛 튜 튝 튞 튟 튠 튡 튢 튣 튤 튥 튦 튧 튨 튩 튪 튫 튬 튭 튮 튯 튰 튱 튲 튳 튴 튵 튶 튷 트 특 튺 튻 튼 튽 튾 튿 틀 틁 틂 틃 틄 틅 틆 틇 틈 틉 틊 틋 틌 틍 틎 틏 틐 틑 틒 틓 틔 틕 틖 틗 틘 틙 틚 틛 틜 틝 틞 틟 틠 틡 틢 틣 틤 틥 틦 틧 틨 틩 틪 틫 틬 틭 틮 틯 티 틱 틲 틳 틴 틵 틶 틷 틸 틹 틺 틻 틼 틽 틾 틿 팀 팁 팂 팃 팄 팅 팆 팇 팈 팉 팊 팋 파 팍 팎 팏 판 팑 팒 팓 팔 팕 팖 팗 팘 팙 팚 팛 팜 팝 팞 팟 팠 팡 팢 팣 팤 팥 팦 팧 패 팩 팪 팫 팬 팭 팮 팯 팰 팱 팲 팳 팴 팵 팶 팷 팸 팹 팺 팻 팼 팽 팾 팿 퍀 퍁 퍂 퍃 퍄 퍅 퍆 퍇 퍈 퍉 퍊 퍋 퍌 퍍 퍎 퍏 퍐 퍑 퍒 퍓 퍔 퍕 퍖 퍗 퍘 퍙 퍚 퍛 퍜 퍝 퍞 퍟 퍠 퍡 퍢 퍣 퍤 퍥 퍦 퍧 퍨 퍩 퍪 퍫 퍬 퍭 퍮 퍯 퍰 퍱 퍲 퍳 퍴 퍵 퍶 퍷 퍸 퍹 퍺 퍻 퍼 퍽 퍾 퍿 펀 펁 펂 펃 펄 펅 펆 펇 펈 펉 펊 펋 펌 펍 펎 펏 펐 펑 펒 펓 펔 펕 펖 펗 페 펙 펚 펛 펜 펝 펞 펟 펠 펡 펢 펣 펤 펥 펦 펧 펨 펩 펪 펫 펬 펭 펮 펯 펰 펱 펲 펳 펴 펵 펶 펷 편 펹 펺 펻 펼 펽 펾 펿 폀 폁 폂 폃 폄 폅 폆 폇 폈 평 폊 폋 폌 폍 폎 폏 폐 폑 폒 폓 폔 폕 폖 폗 폘 폙 폚 폛 폜 폝 폞 폟 폠 폡 폢 폣 폤 폥 폦 폧 폨 폩 폪 폫 포 폭 폮 폯 폰 폱 폲 폳 폴 폵 폶 폷 폸 폹 폺 폻 폼 폽 폾 폿 퐀 퐁 퐂 퐃 퐄 퐅 퐆 퐇 퐈 퐉 퐊 퐋 퐌 퐍 퐎 퐏 퐐 퐑 퐒 퐓 퐔 퐕 퐖 퐗 퐘 퐙 퐚 퐛 퐜 퐝 퐞 퐟 퐠 퐡 퐢 퐣 퐤 퐥 퐦 퐧 퐨 퐩 퐪 퐫 퐬 퐭 퐮 퐯 퐰 퐱 퐲 퐳 퐴 퐵 퐶 퐷 퐸 퐹 퐺 퐻 퐼 퐽 퐾 퐿 푀 푁 푂 푃 푄 푅 푆 푇 푈 푉 푊 푋 푌 푍 푎 푏 푐 푑 푒 푓 푔 푕 푖 푗 푘 푙 푚 푛 표 푝 푞 푟 푠 푡 푢 푣 푤 푥 푦 푧 푨 푩 푪 푫 푬 푭 푮 푯 푰 푱 푲 푳 푴 푵 푶 푷 푸 푹 푺 푻 푼 푽 푾 푿 풀 풁 풂 풃 풄 풅 풆 풇 품 풉 풊 풋 풌 풍 풎 풏 풐 풑 풒 풓 풔 풕 풖 풗 풘 풙 풚 풛 풜 풝 풞 풟 풠 풡 풢 풣 풤 풥 풦 풧 풨 풩 풪 풫 풬 풭 풮 풯 풰 풱 풲 풳 풴 풵 풶 풷 풸 풹 풺 풻 풼 풽 풾 풿 퓀 퓁 퓂 퓃 퓄 퓅 퓆 퓇 퓈 퓉 퓊 퓋 퓌 퓍 퓎 퓏 퓐 퓑 퓒 퓓 퓔 퓕 퓖 퓗 퓘 퓙 퓚 퓛 퓜 퓝 퓞 퓟 퓠 퓡 퓢 퓣 퓤 퓥 퓦 퓧 퓨 퓩 퓪 퓫 퓬 퓭 퓮 퓯 퓰 퓱 퓲 퓳 퓴 퓵 퓶 퓷 퓸 퓹 퓺 퓻 퓼 퓽 퓾 퓿 픀 픁 픂 픃 프 픅 픆 픇 픈 픉 픊 픋 플 픍 픎 픏 픐 픑 픒 픓 픔 픕 픖 픗 픘 픙 픚 픛 픜 픝 픞 픟 픠 픡 픢 픣 픤 픥 픦 픧 픨 픩 픪 픫 픬 픭 픮 픯 픰 픱 픲 픳 픴 픵 픶 픷 픸 픹 픺 픻 피 픽 픾 픿 핀 핁 핂 핃 필 핅 핆 핇 핈 핉 핊 핋 핌 핍 핎 핏 핐 핑 핒 핓 핔 핕 핖 핗 하 학 핚 핛 한 핝 핞 핟 할 핡 핢 핣 핤 핥 핦 핧 함 합 핪 핫 핬 항 핮 핯 핰 핱 핲 핳 해 핵 핶 핷 핸 핹 핺 핻 핼 핽 핾 핿 햀 햁 햂 햃 햄 햅 햆 햇 했 행 햊 햋 햌 햍 햎 햏 햐 햑 햒 햓 햔 햕 햖 햗 햘 햙 햚 햛 햜 햝 햞 햟 햠 햡 햢 햣 햤 향 햦 햧 햨 햩 햪 햫 햬 햭 햮 햯 햰 햱 햲 햳 햴 햵 햶 햷 햸 햹 햺 햻 햼 햽 햾 햿 헀 헁 헂 헃 헄 헅 헆 헇 허 헉 헊 헋 헌 헍 헎 헏 헐 헑 헒 헓 헔 헕 헖 헗 험 헙 헚 헛 헜 헝 헞 헟 헠 헡 헢 헣 헤 헥 헦 헧 헨 헩 헪 헫 헬 헭 헮 헯 헰 헱 헲 헳 헴 헵 헶 헷 헸 헹 헺 헻 헼 헽 헾 헿 혀 혁 혂 혃 현 혅 혆 혇 혈 혉 혊 혋 혌 혍 혎 혏 혐 협 혒 혓 혔 형 혖 혗 혘 혙 혚 혛 혜 혝 혞 혟 혠 혡 혢 혣 혤 혥 혦 혧 혨 혩 혪 혫 혬 혭 혮 혯 혰 혱 혲 혳 혴 혵 혶 혷 호 혹 혺 혻 혼 혽 혾 혿 홀 홁 홂 홃 홄 홅 홆 홇 홈 홉 홊 홋 홌 홍 홎 홏 홐 홑 홒 홓 화 확 홖 홗 환 홙 홚 홛 활 홝 홞 홟 홠 홡 홢 홣 홤 홥 홦 홧 홨 황 홪 홫 홬 홭 홮 홯 홰 홱 홲 홳 홴 홵 홶 홷 홸 홹 홺 홻 홼 홽 홾 홿 횀 횁 횂 횃 횄 횅 횆 횇 횈 횉 횊 횋 회 획 횎 횏 횐 횑 횒 횓 횔 횕 횖 횗 횘 횙 횚 횛 횜 횝 횞 횟 횠 횡 횢 횣 횤 횥 횦 횧 효 횩 횪 횫 횬 횭 횮 횯 횰 횱 횲 횳 횴 횵 횶 횷 횸 횹 횺 횻 횼 횽 횾 횿 훀 훁 훂 훃 후 훅 훆 훇 훈 훉 훊 훋 훌 훍 훎 훏 훐 훑 훒 훓 훔 훕 훖 훗 훘 훙 훚 훛 훜 훝 훞 훟 훠 훡 훢 훣 훤 훥 훦 훧 훨 훩 훪 훫 훬 훭 훮 훯 훰 훱 훲 훳 훴 훵 훶 훷 훸 훹 훺 훻 훼 훽 훾 훿 휀 휁 휂 휃 휄 휅 휆 휇 휈 휉 휊 휋 휌 휍 휎 휏 휐 휑 휒 휓 휔 휕 휖 휗 휘 휙 휚 휛 휜 휝 휞 휟 휠 휡 휢 휣 휤 휥 휦 휧 휨 휩 휪 휫 휬 휭 휮 휯 휰 휱 휲 휳 휴 휵 휶 휷 휸 휹 휺 휻 휼 휽 휾 휿 흀 흁 흂 흃 흄 흅 흆 흇 흈 흉 흊 흋 흌 흍 흎 흏 흐 흑 흒 흓 흔 흕 흖 흗 흘 흙 흚 흛 흜 흝 흞 흟 흠 흡 흢 흣 흤 흥 흦 흧 흨 흩 흪 흫 희 흭 흮 흯 흰 흱 흲 흳 흴 흵 흶 흷 흸 흹 흺 흻 흼 흽 흾 흿 힀 힁 힂 힃 힄 힅 힆 힇 히 힉 힊 힋 힌 힍 힎 힏 힐 힑 힒 힓 힔 힕 힖 힗 힘 힙 힚 힛 힜 힝 힞 힟 힠 힡 힢 힣", + 2: "‾ _ _ - - ‐ — ― 〜 ・ , , 、 ; ; : : ! ! ¡ ? ? ¿ . . ‥ … 。 · ' ‘ ’ \" " “ ” ( ( ) ) [ [ ] ] { { } } 〈 〉 《 》 「 」 『 』 【 】 〔 〕 § ¶ @ @ * * / / \\ \ & & # # % % ‰ † ‡ ′ ″ 〃 ※", + 3: "ᄀ ᄀ ᄁ ᄂ ᄃ ᄄ ᄅ ᄆ ᄇ ᄈ ᄉ ᄊ ᄋ ᄌ ᄍ ᄎ ᄏ ᄐ ᄑ ᄒ ᅡ ᅡ ᅢ ᅣ ᅤ ᅥ ᅦ ᅧ ᅨ ᅩ ᅪ ᅫ ᅬ ᅭ ᅮ ᅯ ᅰ ᅱ ᅲ ᅳ ᅴ ᅵ ᆨ ᆨ ᆩ ᆪ ᆫ ᆬ ᆭ ᆮ ᆯ ᆰ ᆱ ᆲ ᆳ ᆴ ᆵ ᆶ ᆷ ᆸ ᆹ ᆺ ᆻ ᆼ ᆽ ᆾ ᆿ ᇀ ᇁ ᇂ 丘 串 乃 久 乖 九 乞 乫 乾 亂 亘 交 京 仇 今 介 件 价 企 伋 伎 伽 佳 佶 侃 來 侊 供 係 俓 俱 個 倞 倦 倨 假 偈 健 傀 傑 傾 僅 僑 價 儆 儉 儺 光 克 兢 內 公 共 其 具 兼 冀 冠 凱 刊 刮 券 刻 剋 剛 劇 劍 劒 功 加 劤 劫 勁 勍 勘 勤 勸 勻 勾 匡 匣 區 南 卦 却 卵 卷 卿 厥 去 及 口 句 叩 叫 可 各 吉 君 告 呱 呵 咎 咬 哥 哭 啓 喀 喇 喝 喫 喬 嗜 嘉 嘔 器 囊 困 固 圈 國 圭 圻 均 坎 坑 坤 坰 坵 垢 基 埼 堀 堅 堈 堪 堺 塊 塏 境 墾 壙 壞 夔 奇 奈 奎 契 奸 妓 妗 姑 姜 姦 娘 娜 嫁 嬌 孔 季 孤 宏 官 客 宮 家 寄 寇 寡 寬 尻 局 居 屆 屈 岐 岡 岬 崎 崑 崗 嵌 嵐 嶇 嶠 工 巧 巨 己 巾 干 幹 幾 庚 庫 康 廊 廐 廓 廣 建 弓 强 彊 徑 忌 急 怪 怯 恐 恝 恪 恭 悸 愆 感 愧 愷 愾 慊 慣 慤 慨 慶 慷 憩 憬 憾 懃 懇 懦 懶 懼 戈 戒 戟 戡 扱 技 抉 拉 拏 拐 拒 拘 括 拮 拱 拳 拷 拿 捏 据 捲 捺 掘 掛 控 揀 揆 揭 擊 擎 擒 據 擧 攪 攷 改 攻 故 敎 救 敢 敬 敲 斛 斤 旗 旣 昆 昑 景 晷 暇 暖 暠 暻 曠 曲 更 曷 朗 朞 期 机 杆 杞 杰 枏 果 枯 架 枸 柑 柩 柬 柯 校 根 格 桀 桂 桔 桿 梏 梗 械 梱 棄 棋 棍 棘 棨 棺 楗 楠 極 槁 構 槐 槨 槪 槻 槿 樂 橄 橋 橘 機 檄 檎 檢 櫃 欄 權 欺 款 歌 歐 歸 殼 毆 毬 氣 求 江 汨 汲 決 汽 沂 沽 洛 洸 浪 涇 淃 淇 減 渠 渴 湳 溝 溪 滑 滾 漑 潔 潰 澗 激 濫 灌 灸 炅 炚 炬 烙 烱 煖 爛 牽 犬 狂 狗 狡 狼 獗 玖 玘 珂 珏 珖 珙 珞 珪 球 琦 琨 琪 琯 琴 瑾 璂 璟 璣 璥 瓊 瓘 瓜 甄 甘 甲 男 畇 界 畸 畺 畿 疆 疥 疳 痂 痙 痼 癎 癩 癸 皆 皎 皐 盖 監 看 眷 睾 瞰 瞼 瞿 矜 矩 矯 硅 硬 碁 碣 磎 磬 磯 磵 祁 祇 祈 祛 祺 禁 禽 科 稈 稼 稽 稿 穀 究 穹 空 窘 窟 窮 窺 竅 竟 竭 競 竿 筋 筐 筠 箇 箕 箝 管 簡 粳 糠 系 糾 紀 納 紘 級 紺 絅 結 絞 給 絳 絹 絿 經 綱 綺 緊 繫 繭 繼 缺 罐 罫 羅 羈 羌 羔 群 羹 翹 考 耆 耉 耕 耭 耿 肌 肝 股 肩 肯 肱 胛 胱 脚 脛 腔 腱 膈 膏 膠 臘 臼 舅 舊 舡 艮 艱 芎 芥 芩 芹 苛 苟 苦 苽 茄 莖 菅 菊 菌 菓 菫 菰 落 葛 葵 蓋 蕎 蕨 薑 藁 藍 藿 蘭 蘿 虔 蚣 蛟 蝎 螺 蠟 蠱 街 衢 衲 衾 衿 袈 袞 袴 裙 裸 褐 襁 襟 襤 見 規 覡 覲 覺 觀 角 計 記 訣 訶 詭 誇 誡 誥 課 諫 諾 謙 講 謳 謹 譏 警 譴 谷 谿 豈 貢 貫 貴 賈 購 赳 起 跏 距 跨 踞 蹇 蹶 躬 軀 車 軌 軍 軻 較 輕 轎 轟 辜 近 迦 迲 适 逑 逕 逵 過 遣 遽 邏 那 邯 邱 郊 郎 郡 郭 酪 醵 金 鈐 鈞 鉀 鉅 鉗 鉤 銶 鋸 鋼 錡 錤 錦 錮 鍋 鍵 鎌 鎧 鏡 鑑 鑒 鑛 開 間 閘 閣 閨 闕 關 降 階 隔 隙 雇 難 鞏 鞠 鞨 鞫 頃 頸 顆 顧 飢 餃 館 饉 饋 饑 駒 駕 駱 騎 騏 騫 驅 驕 驚 驥 骨 高 鬼 魁 鮫 鯤 鯨 鱇 鳩 鵑 鵠 鷄 鷗 鸞 麒 麴 黔 鼓 龕 龜", + 5: "ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ", + }, + "kok": { + 0: "़ ० १ २ ३ ४ ५ ६ ७ ८ ९ ॐ ं ँ ः अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क क़ ख ख़ ग ग़ घ ङ च छ ज ज़ झ ञ ट ठ ड ड़ ढ ढ़ ण त थ द ध न प फ फ़ ब भ म य य़ र ल व श ष स ह ळ ऽ ा ि ी ु ू ृ ॄ ॅ े ै ॉ ो ौ ्", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + }, + "ks": { + 0: "۪ ۭ َ ُ ِ ٔ ٕ ٖ ٗ ٚ ٛ ء آ أ ٲ ؤ ا ٮ ب پ ت ث ٹ ج چ ح خ د ذ ڈ ر ز ڑ ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ں ھ ہ و ۄ ی ۍ ے", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "ksb": { + 0: "a b c d e f g h i j k l m n o p s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q r x", + 5: "A B C D E F G H I J K L M N O P S T U V W Y Z", + }, + "ksf": { + 0: "a á b c d e é ǝ ǝ́ ɛ ɛ́ f g h i í j k l m n ŋ o ó ɔ ɔ́ p r s t u ú v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E Ǝ Ɛ F G H I J K L M N Ŋ O Ɔ P R S T U V W Y Z", + }, + "ksh": { + 0: "a å ä æ b c d e ë ė f g h i j k l m n o ö œ p q r s ß t u ů ü v w x y z", + 2: "_ ‐ – — ⸗ , ; : ! ? . … ' ‘ ‚ \" “ „ ( ) [ ] { } § @ * / & # % † ‡ ° < = > ~ $", + 3: "á à ă â å ä ã ā æ ç é è ĕ ê ë ē ğ í ì ĭ î ï ī ij ı ł ñ ó ò ŏ ô ö ø ō œ ú ù ŭ û ü ū ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "kw": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "ky": { + 0: "а б г д е ё ж з и й к л м н ӊ о ө п р с т у ү х ч ш ъ ы э ю я", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "в ф ц щ ь", + }, + "lag": { + 0: "a á b c d e é f g h i í ɨ j k l m n o ó p q r s t u ú ʉ v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I Ɨ J K L M N O P Q R S T U Ʉ V W X Y Z", + }, + "lg": { + 0: "a b c d e f g i j k l m n ny ŋ o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "h q x", + 5: "A B C D E F G I J K L M N Ŋ O P R S T U V W Y Z", + }, + "ln": { + 0: "a á â ǎ b c d e é ê ě ɛ ɛ́ ɛ̂ ɛ̌ f g gb h i í î ǐ k l m mb mp n nd ng nk ns nt ny nz o ó ô ǒ ɔ ɔ́ ɔ̂ ɔ̌ p r s t u ú v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "j q x", + 5: "A B C D E Ɛ F G Gb H I K L M Mb Mp N Nd Ng Nk Ns Nt Ny Nz O Ɔ P R S T U V W Y Z", + }, + "lo": { + 0: "່ ້ ໊ ໋ ໌ ໍ ໆ ກ ຂ ຄ ງ ຈ ສ ຊ ຍ ດ ຕ ຖ ທ ນ ບ ປ ຜ ຝ ພ ຟ ມ ຢ ຣ ລ ວ ຫ ໜ ໝ ອ ຮ ຯ ະ ັ າ ຳ ິ ີ ຶ ື ຸ ູ ົ ຼ ຽ ເ ແ ໂ ໃ ໄ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200b ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙", + }, + "lt": { + 0: "a ą b c č d e ę ė f g h i į y j k l m n o p r s š t u ų ū v z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à ã ą́ ą̃ é è ẽ ę́ ę̃ ė́ ė̃ i̇́ í i̇̀ ì i̇̃ ĩ į́ į̇́ į̃ į̇̃ j̃ j̇̃ l̃ m̃ ñ ó ò õ q r̃ ú ù ũ ų́ ų̃ ū́ ū̃ w x", + 5: "A Ą B C Č D E Ę Ė F G H I Į Y J K L M N O P R S Š T U Ų Ū V Z Ž", + }, + "lu": { + 0: "a á à b c d e é è ɛ ɛ́ ɛ̀ f h i í ì j k l m n ng ny o ó ò ɔ ɔ́ ɔ̀ p ph q s shi t u ú ù v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "g r x", + 5: "A B C D E F H I J K L M N O P Q S T U V W Y Z", + }, + "luo": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x z", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y", + }, + "luy": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "lv": { + 0: "a ā b c č d e ē f g ģ h i ī j k ķ l ļ m n ņ o p r s š t u ū v z ž", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ ‚ \" “ ” „ ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "q w x y", + 5: "A B C Č D E F G Ģ H I J K Ķ L Ļ M N Ņ O P Q R S Š T U V W X Y Z Ž", + }, + "mas": { + 0: "a á à â ā b c d e é è ê ē ɛ g h i í ì î ī ɨ j k l m n ny ŋ o ó ò ô ō ɔ p r rr s sh t u ú ù û ū ʉ ʉ́ w wu y yi", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "f q v x z", + 5: "A B C D E Ɛ G H I Ɨ J K L M N Ŋ O Ɔ P R S T U Ʉ W Y", + }, + "mer": { + 0: "a b c d e f g h i ĩ j k l m n o p q r s t u ũ v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "mfe": { + 0: "a b c d e f g h i j k l m n o p r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P R S T U V W X Y Z", + }, + "mg": { + 0: "a à â b d e é è ê ë f g h i ì î ï j k l m n ñ o ô p r s t v y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c q u w x", + 5: "A B D E F G H I J K L M N O P R S T V Y Z", + }, + "mgh": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "mgo": { + 0: "a à b ch d e è ə ə̀ f g gh i ì j k m n ŋ o ò ɔ ɔ̀ p r s t u ù w y z ʼ", + 2: ", ; : ! ? . ' ‘ ’ \" “ ”", + 3: "c h l q v x", + 5: "A B CH D E Ə F G GH I J K M N Ŋ O Ɔ P R S T U W Y Z ʼ", + }, + "mk": { + 0: "а б в г д ѓ е ж з ѕ и ј к л љ м н њ о п р с т ќ у ф х ц ч џ ш", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ѐ ѝ", + 5: "А Б В Г Д Ѓ Е Ж З Ѕ И Ј К Л Љ М Н Њ О П Р С Т Ќ У Ф Х Ц Ч Џ Ш", + }, + "ml": { + 0: "\u200c \u200d ഃ അ ആ ഇ ഈ ഉ ഊ ഋ ൠ ഌ ൡ എ ഏ ഐ ഒ ഓ ഔ ക ൿ ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ ഡ ഢ ണ ൺ ത ഥ ദ ധ ന ൻ പ ഫ ബ ഭ മ ം യ ര ർ ല ൽ വ ശ ഷ സ ഹ ള ൾ ഴ റ ാ ി ീ ു ൂ ൃ െ േ ൈ ൊ ോ ൗ ൌ ്", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + }, + "mn": { + 0: "а б в г д е ё ж з и й к л м н о ө п р с т у ү ф х ц ч ш щ ъ ы ь э ю я", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "ә җ ӊ һ", + }, + "mr": { + 0: "़ ० १ २ ३ ४ ५ ६ ७ ८ ९ ॐ ं ँ ः अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह ळ ऽ ा ि ी ु ू ृ ॄ ॅ े ै ॉ ो ौ ्", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + 5: "\u200d ॐ ं ः अ आ इ ई उ ऊ ऋ ऌ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह ळ ऽ ॅ ्", + }, + "ms": { + 0: "a ai au b c d dz e f g h i j k kh l m n ng ngg ny o p q r s sy t ts u ua v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "mt": { + 0: "a à b ċ d e è f ġ g għ h ħ i ì j k l m n o ò p q r s t u ù v w x ż z", + 2: "- , ; : ! ? . ' ‘ ’ \" “ ” ( ) [ ] { }", + 3: "c y", + }, + "mua": { + 0: "a ã b ɓ c d ɗ e ë ǝ f g h i ĩ j k l m n ŋ o õ p r s t u v ṽ w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B Ɓ C D Ɗ E Ǝ F G H I J K L M N Ŋ O P R S T U V W Y Z", + }, + "my": { + 0: "က ခ ဂ ဃ င စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ မ ယ ရ လ ဝ သ ဟ ဠ အ ဣ ဤ ဥ ဦ ဧ ဩ ဪ ာ ါ ိ ီ ု ူ ေ ဲ ံ ဿ ျ ြ ွ ှ ္ ် ့ း", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ၐ ၑ ဨ ဢ ၒ ၓ ၔ ၕ ၖ ၗ ၘ ၙ", + }, + "naq": { + 0: "a â b c d e f g h i î k m n o ô p q r s t u û w x y z ǀ ǁ ǂ ǃ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "j l v", + 5: "A B C D E F G H I K M N O P Q R S T U W X Y Z", + }, + "nb": { + 0: "a à b c d e é f g h i j k l m n o ó ò ô p q r s t u v w x y z æ ø å", + 2: "- – , ; : ! ? . ' \" « » ( ) [ ] { } § @ * / \\", + 3: "á ǎ ã č ç đ è ê í ń ñ ŋ š ŧ ü ž ä ö", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å", + }, + "nd": { + 0: "a b c d e f g h i j k l m n o p q s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "r", + 5: "A B C D E F G H I J K L M N O P Q S T U V W X Y Z", + }, + "ne": { + 0: "़ ँ ं ः ॐ अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल ळ व श ष स ह ऽ ा ि ी ु ू ृ ॄ ॅ े ै ॉ ो ौ ्", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + }, + "nl": { + 0: "a á ä b c d e é ë f g h i í ï ij j k l m n o ó ö p q r s t u ú ü v w x y z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "à â å ã æ ç è ê î ñ ô ø œ ù û ÿ", + }, + "nmg": { + 0: "a á ă â ä ā b ɓ c d e é ĕ ê ē ǝ ǝ́ ǝ̆ ǝ̂ ǝ̄ ɛ ɛ́ ɛ̆ ɛ̂ ɛ̄ f g h i í ĭ î ï ī j k l m n ń ŋ o ó ŏ ô ö ō ɔ ɔ́ ɔ̆ ɔ̂ ɔ̄ p r ŕ s t u ú ŭ û ū v w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x z", + 5: "A B Ɓ C D E Ǝ Ɛ F G H I J K L M N Ŋ O Ɔ P R S T U V W Y", + }, + "nn": { + 0: "a à b c d e é f g h i j k l m n o ó ò ô p q r s t u v w x y z æ ø å", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á ǎ č ç đ è ê ń ñ ŋ š ŧ ü ž ä ö", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å", + }, + "nnh": { + 0: "a á à â ǎ b c d e é è ê ě ɛ ɛ́ ɛ̀ ɛ̂ ɛ̌ f g h i í ì j k l m n ŋ o ó ò ô ǒ ɔ ɔ́ ɔ̀ ɔ̂ ɔ̌ p pf s sh t ts u ú ù û ǔ ʉ ʉ́ ʉ̀ ʉ̂ ʉ̌ v w ẅ y ÿ z ʼ", + 2: ", ; : ! ? . ' ‘ ’ « »", + 3: "q r x", + 5: "A B C D E Ɛ F G H I J K L M N Ŋ O Ɔ P Pf R S Sh T Ts U Ʉ V W Ẅ Y Ÿ Z ʼ", + }, + "nr": { + 0: "a b c d e f g h i j k l m n o p q s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "r", + }, + "nso": { + 0: "a b d e ê f g h i j k l m n o ô p r s š t u w x y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c q v z", + }, + "nus": { + 0: "a ä a̱ b c d e ë e̱ ɛ ɛ̈ ɛ̱ ɛ̱̈ f g ɣ h i ï i̱ j k l m n ŋ o ö o̱ ɔ ɔ̈ ɔ̱ p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E Ɛ F G Ɣ H I J K L M N Ŋ O Ɔ P Q R S T U V W X Y Z", + }, + "nyn": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "om": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "or": { + 0: "଼ ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଏ ଐ ଓ ଔ ଁ ଂ ଃ କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଡ଼ ଢ ଢ଼ ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ ଯ ୟ ର ଲ ଳ ଵ ୱ ଶ ଷ ସ ହ ା ି ୀ ୁ ୂ ୃ େ ୈ ୋ ୌ ୍", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + }, + "os": { + 0: "а ӕ б в г гъ д дж дз е ё ж з и й к къ л м н о п пъ р с т тъ у ф х хъ ц цъ ч чъ ш щ ъ ы ь э ю я", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ‚ \" “ „ « » ( ) [ ] { } § @ * / & #", + 5: "А Ӕ Б В Г Гъ Д Дж Дз Е Ё Ж З И Й К Къ Л М Н О П Пъ Р С Т Тъ У Ф Х Хъ Ц Цъ Ч Чъ Ш Щ Ы Э Ю Я", + }, + "pa": { + 0: "ੱ ੰ ਼ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੴ ੳ ਉ ਊ ਓ ਅ ਆ ਐ ਔ ੲ ਇ ਈ ਏ ਸ ਸ਼ ਹ ਕ ਖ ਖ਼ ਗ ਗ਼ ਘ ਙ ਚ ਛ ਜ ਜ਼ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ ਫ਼ ਬ ਭ ਮ ਯ ਰ ਲ ਵ ੜ ੍ ਾ ਿ ੀ ੁ ੂ ੇ ੈ ੋ ੌ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d ਃ ਂ ਁ ਲ਼", + }, + "pa-Arab": { + 0: "ُ ء آ ؤ ئ ا ب پ ت ث ٹ ج چ ح خ د ذ ڈ ر ز ڑ ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ں ه ھ ہ و ی ے", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "أ ٻ ة ٺ ټ ٽ", + }, + "pl": { + 0: "a ą b c ć d e ę f g h i j k l ł m n ń o ó p r s ś t u w y z ź ż", + 2: "- ‐ – — , ; : ! ? . … ' \" ” „ « » ( ) [ ] { } § @ * / & # % † ‡ ′ ″ ° ~", + 3: "à â å ä æ ç é è ê ë î ï ô ö œ q ß ù û ü v x ÿ", + }, + "ps": { + 0: "َ ِ ُ ً ٍ ٌ ّ ْ ٔ ٰ آ ا أ ء ب پ ت ټ ث ج ځ چ څ ح خ د ډ ذ ر ړ ز ژ ږ س ش ښ ص ض ط ظ ع غ ف ق ک ګ ل م ن ڼ ه ة و ؤ ی ي ې ۍ ئ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d", + }, + "pt": { + 0: "a á à â ã b c ç d e é ê f g h i í j k l m n o ó ò ô õ p q r s t u ú v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ª ă å ä ā æ è ĕ ë ē ì ĭ î ï ī ñ º ŏ ö ø ō œ ù ŭ û ü ū ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "rm": { + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "rn": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "ro": { + 0: "a ă â b c d e f g h i î j k l m n o p r s ș t ț u v x z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ \" “ ” „ « » ( ) [ ] @ * /", + 3: "á à å ä ç é è ê ë ñ ö q ş ţ ü w y", + 5: "A Ă Â B C D E F G H I Î J K L M N O P Q R S Ș T Ț U V W X Y Z", + }, + "rof": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "und": { + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "ru": { + 0: "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ‚ \" “ „ « » ( ) [ ] { } § @ * / & #", + 3: "а́ е́ и́ о́ у́ ы́ э́ ю́ я́", + 5: "А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я", + }, + "rw": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "rwk": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "sah": { + 0: "а б г ҕ д дь и й к л м н нь ҥ о ө п р с т у ү х һ ч ы э", + 3: "в е ё ж з ф ц ш щ ъ ь ю я", + 5: "А Б Г Ҕ Д Дь И Й К Л М Н Нь Ҥ О Ө П Р С Т У Ү Х Һ Ч Ы Э", + }, + "saq": { + 0: "a b c d e g h i j k l m n o p r s t u v w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "f q x z", + 5: "A B C D E G H I J K L M N O P R S T U V W Y", + }, + "sbp": { + 0: "a b c d e f g h i j k l m n o p s t u v w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q r x z", + 5: "A B C D E F G H I J K L M N O P S T U V W Y", + }, + "se": { + 0: "a á b c č d đ e f g h i j k l m n ŋ o p r s š t ŧ u v z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "à å ä ã æ ç é è í ń ñ ó ò ö ø q ú ü w x y", + }, + "seh": { + 0: "a á à â ã b c ç d e é ê f g h i í j k l m n o ó ò ô õ p q r s t u ú v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "ses": { + 0: "a ã b c d e ẽ f g h i j k l m n ɲ ŋ o õ p q r s š t u w x y z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "v", + 5: "A à B C D E Ẽ F G H I J K L M N Ɲ Ŋ O Õ P Q R S Š T U W X Y Z Ž", + }, + "sg": { + 0: "a â ä b d e ê ë f g h i î ï j k l m n o ô ö p r s t u ù û ü v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c q x", + 5: "A B D E F G H I J K L M N O P R S T U V W Y Z", + }, + "shi": { + 0: "ⴰ ⴱ ⴳ ⴳⵯ ⴷ ⴹ ⴻ ⴼ ⴽ ⴽⵯ ⵀ ⵃ ⵄ ⵅ ⵇ ⵉ ⵊ ⵍ ⵎ ⵏ ⵓ ⵔ ⵕ ⵖ ⵙ ⵚ ⵛ ⵜ ⵟ ⵡ ⵢ ⵣ ⵥ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "ⴰ ⴱ ⴳ ⴷ ⴹ ⴻ ⴼ ⴽ ⵀ ⵃ ⵄ ⵅ ⵇ ⵉ ⵊ ⵍ ⵎ ⵏ ⵓ ⵔ ⵕ ⵖ ⵙ ⵚ ⵛ ⵜ ⵟ ⵡ ⵢ ⵣ ⵥ", + }, + "shi-Latn": { + 0: "a b c d ḍ e ɛ f g gʷ ɣ h ḥ i j k kʷ l m n q r ṛ s ṣ t ṭ u w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "o p v", + 5: "A B C D Ḍ E Ɛ F G Gʷ Ɣ H Ḥ I J K Kʷ L M N Q R Ṛ S Ṣ T Ṭ U W X Y Z", + }, + "si": { + 0: "අ ආ ඇ ඈ ඉ ඊ උ ඌ ඍ එ ඒ ඓ ඔ ඕ ඖ ං ඃ ක ඛ ග ඝ ඞ ඟ ච ඡ ජ ඣ ඥ ඤ ට ඨ ඩ ඪ ණ ඬ ත ථ ද ධ න ඳ ප ඵ බ භ ම ඹ ය ර ල ව ශ ෂ ස හ ළ ෆ ා ැ ෑ ි ී ු ූ ෘ ෲ ෟ ෙ ේ ෛ ො ෝ ෞ ්", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200b \u200c \u200d ඎ ඏ ඐ ඦ ෳ", + 5: "අ ආ ඇ ඈ ඉ ඊ උ ඌ ඍ එ ඒ ඓ ඔ ඕ ඖ ක ඛ ග ඝ ඞ ඟ ච ඡ ජ ඣ ඥ ඤ ට ඨ ඩ ඪ ණ ඬ ත ථ ද ධ න ඳ ප ඵ බ භ ම ඹ ය ර ල ව ශ ෂ ස හ ළ ෆ", + }, + "sk": { + 0: "a á ä b c č d ď e é f g h ch i í j k l ĺ ľ m n ň o ó ô p q r ŕ s š t ť u ú v w x y ý z ž", + 2: "- ‐ – , ; : ! ? . … ‘ ‚ “ „ ( ) [ ] § @ * / &", + }, + "sl": { + 0: "a b c č d e f g h i j k l m n o p r s š t u v z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à ă â å ä ā æ ç ć đ é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ö ø ō œ q ú ù ŭ û ü ū w x y ÿ", + 5: "A B C Č Ć D Đ E F G H I J K L M N O P Q R S Š T U V W X Y Z Ž", + }, + "sn": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "so": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "sq": { + 0: "a b c ç d dh e ë f g gj h i j k l ll m n nj o p q r rr s sh t th u v x xh y z zh", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "w", + }, + "sr": { + 0: "а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ё й щ ъ ы ь э ю я", + }, + "sr-Latn": { + 0: "a b c č ć d dž đ e f g h i j k l lj m n nj o p r s š t u v z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "å q w x y", + }, + "ss": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "ssy": { + 0: "a b t s e c k x i d q r f g o l m n u w h y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "j p v z", + 5: "A B T S E C K X I D Q R F G O L M N U W H Y", + }, + "st": { + 0: "a b d e f g h i j k l m n o p q r s t u w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c v x z", + }, + "sv": { + 0: "a à b c d e é f g h i j k l m n o p q r s t u v w x y z å ä ö", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "á â ã ā ç ë í î ï ī ñ ó ú ÿ ü æ ø", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Ä Ö", + }, + "sv-FI": { + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "ã ç ë í ñ ó š ÿ ü ž", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Ä Ö", + }, + "sw": { + 0: "a b ch d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c q x", + }, + "swc": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "ta": { + 0: "அ ஆ இ ஈ உ ஊ எ ஏ ஐ ஒ ஓ ஔ ஃ க ங ச ஞ ட ண த ந ப ம ய ர ல வ ழ ள ற ன ஜ ஷ ஸ ஹ ா ி ீ ு ூ ெ ே ை ொ ோ ௌ ்", + 3: "\u200c \u200d", + }, + "te": { + 0: "అ ఆ ఇ ఈ ఉ ఊ ఋ ౠ ఌ ౡ ఎ ఏ ఐ ఒ ఓ ఔ ఁ ం ః క ఖ గ ఘ ఙ చ ఛ జ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ప ఫ బ భ మ య ర ఱ ల వ శ ష స హ ళ ా ి ీ ు ూ ృ ౄ ె ే ై ొ ో ౌ ్ ౕ ౖ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯", + 5: "అ ఆ ఇ ఈ ఉ ఊ ఋ ౠ ఎ ఏ ఐ ఒ ఓ ఔ క ఖ గ ఘ ఙ చ ఛ జ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ప ఫ బ భ మ య ర ఱ ల వ శ ష స హ ళ", + }, + "teo": { + 0: "a b c d e g h i j k l m n o p r s t u v w x y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "f q z", + 5: "A B C D E G H I J K L M N O P R S T U V W X Y", + }, + "tg": { + 0: "а б в г ғ д е ё ж з и ӣ й к қ л м н о п р с т у ӯ ф х ҳ ч ҷ ш ъ э ю я", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ц щ ы ь", + }, + "th": { + 0: "ฯ ๆ ๎ ์ ็ ่ ้ ๊ ๋ ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร ฤ ล ฦ ว ศ ษ ส ห ฬ อ ฮ ํ ะ ั า ๅ ำ ิ ี ึ ื ุ ู เ แ โ ใ ไ ฺ", + 2: "! \" # ' ( ) * , - . / : @ [ \\ ] ‐ – — ‘ ’ “ ” … ′ ″", + 3: "\u200b", + }, + "ti": { + 0: "፟ ሀ ሀ ሁ ሂ ሃ ሄ ህ ሆ ለ ለ ሉ ሊ ላ ሌ ል ሎ ሏ ሐ ሑ ሒ ሓ ሔ ሕ ሖ ሗ መ ሙ ሚ ማ ሜ ም ሞ ሟ ሠ ሡ ሢ ሣ ሤ ሥ ሦ ሧ ረ ሩ ሪ ራ ሬ ር ሮ ሯ ሰ ሱ ሲ ሳ ሴ ስ ሶ ሷ ሸ ሹ ሺ ሻ ሼ ሽ ሾ ሿ ቀ ቁ ቂ ቃ ቄ ቅ ቆ ቈ ቊ ቊ ቋ ቌ ቍ ቐ ቐ ቑ ቒ ቓ ቔ ቕ ቖ ቘ ቚ ቚ ቛ ቜ ቝ በ በ ቡ ቢ ባ ቤ ብ ቦ ቧ ቨ ቩ ቪ ቫ ቬ ቭ ቮ ቯ ተ ቱ ቲ ታ ቴ ት ቶ ቷ ቸ ቹ ቺ ቻ ቼ ች ቾ ቿ ኀ ኁ ኂ ኃ ኄ ኅ ኆ ኈ ኊ ኊ ኋ ኌ ኍ ነ ነ ኑ ኒ ና ኔ ን ኖ ኗ ኘ ኙ ኚ ኛ ኜ ኝ ኞ ኟ አ ኡ ኢ ኣ ኤ እ ኦ ኧ ከ ኩ ኪ ካ ኬ ክ ኮ ኰ ኲ ኲ ኳ ኴ ኵ ኸ ኸ ኹ ኺ ኻ ኼ ኽ ኾ ዀ ዂ ዂ ዃ ዄ ዅ ወ ወ ዉ ዊ ዋ ዌ ው ዎ ዐ ዐ ዑ ዒ ዓ ዔ ዕ ዖ ዘ ዘ ዙ ዚ ዛ ዜ ዝ ዞ ዟ ዠ ዡ ዢ ዣ ዤ ዥ ዦ ዧ የ ዩ ዪ ያ ዬ ይ ዮ ደ ደ ዱ ዲ ዳ ዴ ድ ዶ ዷ ጀ ጀ ጁ ጂ ጃ ጄ ጅ ጆ ጇ ገ ጉ ጊ ጋ ጌ ግ ጎ ጐ ጒ ጒ ጓ ጔ ጕ ጠ ጠ ጡ ጢ ጣ ጤ ጥ ጦ ጧ ጨ ጩ ጪ ጫ ጬ ጭ ጮ ጯ ጰ ጱ ጲ ጳ ጴ ጵ ጶ ጷ ጸ ጹ ጺ ጻ ጼ ጽ ጾ ጿ ፀ ፁ ፂ ፃ ፄ ፅ ፆ ፇ ፈ ፉ ፊ ፋ ፌ ፍ ፎ ፏ ፐ ፑ ፒ ፓ ፔ ፕ ፖ ፗ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "᎐ ᎐ ᎑ ᎒ ᎓ ᎔ ᎕ ᎖ ᎗ ᎘ ᎙ ሇ ⶀ ᎀ ᎀ ᎁ ᎂ ᎃ ⶁ ⶁ ⶂ ⶃ ⶄ ቇ ᎄ ᎄ ᎅ ᎆ ᎇ ⶅ ⶅ ⶆ ⶇ ኇ ⶈ ⶈ ⶉ ⶊ ኯ ዏ ⶋ ዯ ⶌ ዸ ዸ ዹ ዺ ዻ ዼ ዽ ዾ ዿ ⶍ ⶎ ጏ ጘ ጘ ጙ ጚ ጛ ጜ ጝ ጞ ጟ ⶓ ⶓ ⶔ ⶕ ⶖ ⶏ ⶏ ⶐ ⶑ ፇ ᎈ ᎈ ᎉ ᎊ ᎋ ᎌ ᎍ ᎎ ᎏ ⶒ ፘ ፘ ፙ ፚ ⶠ ⶠ ⶡ ⶢ ⶣ ⶤ ⶥ ⶦ ⶨ ⶨ ⶩ ⶪ ⶫ ⶬ ⶭ ⶮ ⶰ ⶰ ⶱ ⶲ ⶳ ⶴ ⶵ ⶶ ⶸ ⶸ ⶹ ⶺ ⶻ ⶼ ⶽ ⶾ ⷀ ⷀ ⷁ ⷂ ⷃ ⷄ ⷅ ⷆ ⷈ ⷈ ⷉ ⷊ ⷋ ⷌ ⷍ ⷎ ⷐ ⷐ ⷑ ⷒ ⷓ ⷔ ⷕ ⷖ ⷘ ⷘ ⷙ ⷚ ⷛ ⷜ ⷝ ⷞ", + 5: "ሀ ለ ሐ መ ሠ ረ ሰ ሸ ቀ ቈ ቐ ቘ በ ቨ ተ ቸ ኀ ኈ ነ ኘ አ ከ ኰ ኸ ዀ ወ ዐ ዘ ዠ የ ደ ጀ ገ ጐ ጠ ጨ ጰ ጸ ፀ ፈ ፐ", + }, + "ti-ER": { + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "tig": { + 0: "፟ ፡ ፣ ፣ ፤ ፥ ፦ ፧ ። ፠ ፨ ᎐ ᎐ ᎑ ᎒ ᎓ ᎔ ᎕ ᎖ ᎗ ᎘ ᎙ ፲ ፲ ፳ ፴ ፵ ፶ ፷ ፸ ፹ ፺ ፻ ፼ ፩ ፩ ፪ ፫ ፬ ፭ ፮ ፯ ፰ ፱ ሀ ሀ ሁ ሂ ሃ ሄ ህ ሆ ሇ ለ ሉ ሊ ላ ሌ ል ሎ ሏ ⶀ ሐ ሐ ሑ ሒ ሓ ሔ ሕ ሖ ሗ መ ሙ ሚ ማ ሜ ም ሞ ሟ ᎀ ᎀ ᎁ ᎂ ᎃ ⶁ ሠ ሠ ሡ ሢ ሣ ሤ ሥ ሦ ሧ ረ ሩ ሪ ራ ሬ ር ሮ ሯ ⶂ ሰ ሰ ሱ ሲ ሳ ሴ ስ ሶ ሷ ⶃ ሸ ሸ ሹ ሺ ሻ ሼ ሽ ሾ ሿ ⶄ ቀ ቀ ቁ ቂ ቃ ቄ ቅ ቆ ቇ ቈ ቊ ቊ ቋ ቌ ቍ ቐ ቐ ቑ ቒ ቓ ቔ ቕ ቖ ቘ ቚ ቚ ቛ ቜ ቝ በ በ ቡ ቢ ባ ቤ ብ ቦ ቧ ᎄ ᎄ ᎅ ᎆ ᎇ ⶅ ቨ ቨ ቩ ቪ ቫ ቬ ቭ ቮ ቯ ተ ቱ ቲ ታ ቴ ት ቶ ቷ ⶆ ቸ ቸ ቹ ቺ ቻ ቼ ች ቾ ቿ ⶇ ኀ ኀ ኁ ኂ ኃ ኄ ኅ ኆ ኇ ኈ ኊ ኊ ኋ ኌ ኍ ነ ነ ኑ ኒ ና ኔ ን ኖ ኗ ⶈ ኘ ኘ ኙ ኚ ኛ ኜ ኝ ኞ ኟ ⶉ አ አ ኡ ኢ ኣ ኤ እ ኦ ኧ ⶊ ከ ከ ኩ ኪ ካ ኬ ክ ኮ ኯ ኰ ኲ ኲ ኳ ኴ ኵ ኸ ኸ ኹ ኺ ኻ ኼ ኽ ኾ ዀ ዂ ዂ ዃ ዄ ዅ ወ ወ ዉ ዊ ዋ ዌ ው ዎ ዏ ዐ ዑ ዒ ዓ ዔ ዕ ዖ ዘ ዘ ዙ ዚ ዛ ዜ ዝ ዞ ዟ ⶋ ዠ ዠ ዡ ዢ ዣ ዤ ዥ ዦ ዧ የ ዩ ዪ ያ ዬ ይ ዮ ዯ ደ ዱ ዲ ዳ ዴ ድ ዶ ዷ ⶌ ዸ ዸ ዹ ዺ ዻ ዼ ዽ ዾ ዿ ⶍ ጀ ጀ ጁ ጂ ጃ ጄ ጅ ጆ ጇ ⶎ ገ ገ ጉ ጊ ጋ ጌ ግ ጎ ጏ ጐ ጒ ጒ ጓ ጔ ጕ ጘ ጘ ጙ ጚ ጛ ጜ ጝ ጞ ጟ ⶓ ⶓ ⶔ ⶕ ⶖ ጠ ጠ ጡ ጢ ጣ ጤ ጥ ጦ ጧ ⶏ ጨ ጨ ጩ ጪ ጫ ጬ ጭ ጮ ጯ ⶐ ጰ ጰ ጱ ጲ ጳ ጴ ጵ ጶ ጷ ⶑ ጸ ጸ ጹ ጺ ጻ ጼ ጽ ጾ ጿ ፀ ፁ ፂ ፃ ፄ ፅ ፆ ፇ ፈ ፉ ፊ ፋ ፌ ፍ ፎ ፏ ᎈ ᎈ ᎉ ᎊ ᎋ ፐ ፐ ፑ ፒ ፓ ፔ ፕ ፖ ፗ ᎌ ᎌ ᎍ ᎎ ᎏ ⶒ ፘ ፘ ፙ ፚ ⶠ ⶠ ⶡ ⶢ ⶣ ⶤ ⶥ ⶦ ⶨ ⶨ ⶩ ⶪ ⶫ ⶬ ⶭ ⶮ ⶰ ⶰ ⶱ ⶲ ⶳ ⶴ ⶵ ⶶ ⶸ ⶸ ⶹ ⶺ ⶻ ⶼ ⶽ ⶾ ⷀ ⷀ ⷁ ⷂ ⷃ ⷄ ⷅ ⷆ ⷈ ⷈ ⷉ ⷊ ⷋ ⷌ ⷍ ⷎ ⷐ ⷐ ⷑ ⷒ ⷓ ⷔ ⷕ ⷖ ⷘ ⷘ ⷙ ⷚ ⷛ ⷜ ⷝ ⷞ", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "tn": { + 0: "a b d e ê f g h i j k l m n o ô p r s t u w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c q v x z", + }, + "to": { + 0: "a á ā e é ē f h i í ī k l m n ng o ó ō p s t u ú ū v ʻ", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "à ă â å ä æ b c ç d è ĕ ê ë g ì ĭ î ï j ñ ò ŏ ô ö ø œ q r ù ŭ û ü w x y ÿ z", + 5: "A E F H I K L M N NG O P S T U V ʻ", + }, + "tr": { + 0: "a b c ç d e f g ğ h ı i İ j k l m n o ö p r s ş t u ü v y z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” ( ) [ ] § @ * / & # † ‡ ′ ″", + 3: "á à ă â å ä ã ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ø ō œ ö q ß ú ù ŭ û ū ü w x ÿ", + 5: "A B C Ç D E F G H I İ J K L M N O Ö P Q R S Ş T U Ü V W X Y Z", + }, + "ts": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "twq": { + 0: "a ã b c d e ẽ f g h i j k l m n ɲ ŋ o õ p q r s š t u w x y z ž", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "v", + }, + "tzm": { + 0: "a b c d ḍ e ɛ f g gʷ ɣ h ḥ i j k kʷ l m n q r ṛ s ṣ t ṭ u w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "o p v", + 5: "A B C D Ḍ E Ɛ F G Ɣ H Ḥ I J K L M N Q R Ṛ S Ṣ T Ṭ U W X Y Z", + }, + "uk": { + 0: "ʼ а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ь ю я", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ё ъ ы э", + 5: "А Б В Г Ґ Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ю Я", + }, + "ur": { + 0: "ا أ آ ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ں و ؤ ہ ۂ ھ ء ی ئ ے ة ه", + 2: "، ؍ ٫ ٬ ؛ : ؟ . ۔ ( ) [ ]", + 3: "\u0600 \u0601 \u0602 \u0603 \u200c \u200d \u200e \u200f ْ َ ِ ُ ٰ ٖ ٗ ً ٍ ٌ ٔ ّ ٘ ۃ ٻ ٺ ټ ٽ ي", + 5: "ا ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ہ ھ ء ی ے", + }, + "uz": { + 0: "а б в г ғ д е ё ж з и й к қ л м н о п р с т у ў ф х ҳ ч ш ъ э ю я", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "ц щ ы ь", + }, + "uz-Arab": { + 0: "ً ٌ ٍ َ ُ ِ ّ ْ ٔ ٰ ء آ أ ؤ ئ ا ب پ ة ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ه و ۇ ۉ ی", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "\u200c \u200d ټ ځ څ ډ ړ ږ ښ ګ ڼ ي ۍ ې", + }, + "uz-Latn": { + 0: "a aʼ b ch d e eʼ f g gʻ h i iʼ j k l m n o oʻ p q r s sh t u uʼ v x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c w", + 5: "A B CH D E F G Gʻ H I J K L M N O Oʻ P Q R S SH T U V X Y Z", + }, + "vai": { + 0: "꘠ ꘠ ꘡ ꘢ ꘣ ꘤ ꘥ ꘦ ꘧ ꘨ ꘩ ꔀ ꔀ ꔁ ꔂ ꔃ ꔄ ꔅ ꔆ ꔇ ꔈ ꔉ ꔊ ꔋ ꔌ ꘓ ꔍ ꔍ ꔎ ꔏ ꔐ ꔑ ꔒ ꔓ ꔔ ꔕ ꔖ ꔗ ꔘ ꔙ ꔚ ꔛ ꔜ ꔝ ꔞ ꘔ ꔟ ꔟ ꔠ ꔡ ꔢ ꔣ ꔤ ꔥ ꔦ ꔧ ꔨ ꔩ ꔪ ꔫ ꔬ ꔭ ꔮ ꔯ ꔰ ꔱ ꔲ ꔳ ꘕ ꔴ ꔴ ꔵ ꔶ ꔷ ꔸ ꔹ ꔺ ꔻ ꔼ ꔽ ꔾ ꔿ ꕀ ꕁ ꕂ ꕃ ꕄ ꕅ ꕆ ꕇ ꘖ ꕈ ꕈ ꕉ ꕊ ꕋ ꕌ ꕍ ꕎ ꕏ ꕐ ꕑ ꕒ ꘗ ꕓ ꕓ ꕔ ꕕ ꕖ ꕗ ꕘ ꘐ ꘘ ꕙ ꕚ ꘙ ꕛ ꕛ ꕜ ꕝ ꕞ ꕟ ꕠ ꘚ ꕡ ꕡ ꕢ ꕣ ꕤ ꕥ ꕦ ꕧ ꕨ ꕩ ꕪ ꘑ ꕫ ꕫ ꕬ ꕭ ꕮ ꘪ ꕯ ꕯ ꕰ ꕱ ꕲ ꕳ ꕴ ꕵ ꕶ ꕷ ꕸ ꕹ ꕺ ꕻ ꕼ ꕽ ꕾ ꕿ ꖀ ꖁ ꖂ ꖃ ꖄ ꖅ ꘛ ꖆ ꖇ ꘒ ꖈ ꖈ ꖉ ꖊ ꖋ ꖌ ꖍ ꖎ ꖏ ꖐ ꖑ ꖒ ꖓ ꖔ ꖕ ꖖ ꖗ ꖘ ꖙ ꖚ ꖛ ꖜ ꖝ ꖞ ꖟ ꖠ ꖡ ꖢ ꖣ ꖤ ꖥ ꖦ ꖧ ꖨ ꖩ ꖪ ꖫ ꖬ ꖭ ꖮ ꖯ ꖰ ꖱ ꖲ ꖳ ꖴ ꘜ ꖵ ꖵ ꖶ ꖷ ꖸ ꖹ ꖺ ꖻ ꖼ ꖽ ꖾ ꖿ ꗀ ꗁ ꗂ ꗃ ꗄ ꗅ ꗆ ꗇ ꗈ ꗉ ꗊ ꗋ ꘝ ꗌ ꗌ ꗍ ꗎ ꗏ ꗐ ꗑ ꘫ ꘞ ꗒ ꗒ ꗓ ꗔ ꗕ ꗖ ꗗ ꗘ ꘟ ꗙ ꗙ ꗚ ꗛ ꗜ ꗝ ꗞ ꗟ ꗠ ꗡ ꗢ ꗣ ꗤ ꗥ ꗦ ꗧ ꗨ ꗩ ꗪ ꗫ ꗬ ꗭ ꗮ ꗯ ꗰ ꗱ ꗲ ꗳ ꗴ ꗵ ꗶ ꗷ ꗸ ꗹ ꗺ ꗻ ꗼ ꗽ ꗾ ꗿ ꘀ ꘁ ꘂ ꘃ ꘄ ꘅ ꘆ ꘇ ꘈ ꘉ ꘊ ꘋ ꘌ", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "vai-Latn": { + 0: "a á ã b ɓ c d ɗ e é ẽ ɛ ɛ́ ɛ̃ f g h i í ĩ j k l m n ŋ o ó õ ɔ ɔ́ ɔ̃ p q r s t u ú ũ v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B Ɓ C D Ɗ E Ɛ F G H I J K L M N Ŋ O Ɔ P Q R S T U V W X Y Z", + }, + "ve": { + 0: "a b d ḓ e f g h i k l ḽ m n ṅ ṋ o p r s t ṱ u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "vi": { + 0: "a à ả ã á ạ ă ằ ẳ ẵ ắ ặ â ầ ẩ ẫ ấ ậ b c d đ e è ẻ ẽ é ẹ ê ề ể ễ ế ệ f g h i ì ỉ ĩ í ị j k l m n o ò ỏ õ ó ọ ô ồ ổ ỗ ố ộ ơ ờ ở ỡ ớ ợ p q r s t u ù ủ ũ ú ụ ư ừ ử ữ ứ ự v w x y ỳ ỷ ỹ ý ỵ z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "vo": { + 0: "a ä b c d e f g h i j k l m n o ö p q r s š t u ü v x y z", + 2: "- ‐ – — , ; : ! ? . … ' ‘ ’ \" “ ” « » ( ) [ ] { } § @ * / & #", + 3: "q w", + 5: "A Ä B C D E F G H I J K L M N O Ö P R S T U Ü V X Y Z", + }, + "vun": { + 0: "a b c d e f g h i j k l m n o p r s t u v w y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "q x", + 5: "A B C D E F G H I J K L M N O P R S T U V W Y Z", + }, + "wae": { + 0: "a á ä ã b c č d e é f g h i í j k l m n o ó ö õ p q r s š t u ú ü ũ v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "à ă â å ā æ ç è ĕ ê ë ē ì ĭ î ï ī ñ ò ŏ ô ø ō œ ß ù ŭ û ū ÿ", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "wal": { + 0: "፟ ᎐ ᎐ ᎑ ᎒ ᎓ ᎔ ᎕ ᎖ ᎗ ᎘ ᎙ ሀ ሀ ሁ ሂ ሃ ሄ ህ ሆ ሇ ለ ሉ ሊ ላ ሌ ል ሎ ሏ ⶀ ሐ ሐ ሑ ሒ ሓ ሔ ሕ ሖ ሗ መ ሙ ሚ ማ ሜ ም ሞ ሟ ᎀ ᎀ ᎁ ᎂ ᎃ ⶁ ሠ ሠ ሡ ሢ ሣ ሤ ሥ ሦ ሧ ረ ሩ ሪ ራ ሬ ር ሮ ሯ ⶂ ሰ ሰ ሱ ሲ ሳ ሴ ስ ሶ ሷ ⶃ ሸ ሸ ሹ ሺ ሻ ሼ ሽ ሾ ሿ ⶄ ቀ ቀ ቁ ቂ ቃ ቄ ቅ ቆ ቇ ቈ ቊ ቊ ቋ ቌ ቍ ቐ ቐ ቑ ቒ ቓ ቔ ቕ ቖ ቘ ቚ ቚ ቛ ቜ ቝ በ በ ቡ ቢ ባ ቤ ብ ቦ ቧ ᎄ ᎄ ᎅ ᎆ ᎇ ⶅ ቨ ቨ ቩ ቪ ቫ ቬ ቭ ቮ ቯ ተ ቱ ቲ ታ ቴ ት ቶ ቷ ⶆ ቸ ቸ ቹ ቺ ቻ ቼ ች ቾ ቿ ⶇ ኀ ኀ ኁ ኂ ኃ ኄ ኅ ኆ ኇ ኈ ኊ ኊ ኋ ኌ ኍ ነ ነ ኑ ኒ ና ኔ ን ኖ ኗ ⶈ ኘ ኘ ኙ ኚ ኛ ኜ ኝ ኞ ኟ ⶉ አ አ ኡ ኢ ኣ ኤ እ ኦ ኧ ⶊ ከ ከ ኩ ኪ ካ ኬ ክ ኮ ኯ ኰ ኲ ኲ ኳ ኴ ኵ ኸ ኸ ኹ ኺ ኻ ኼ ኽ ኾ ዀ ዂ ዂ ዃ ዄ ዅ ወ ወ ዉ ዊ ዋ ዌ ው ዎ ዏ ዐ ዑ ዒ ዓ ዔ ዕ ዖ ዘ ዘ ዙ ዚ ዛ ዜ ዝ ዞ ዟ ⶋ ዠ ዠ ዡ ዢ ዣ ዤ ዥ ዦ ዧ የ ዩ ዪ ያ ዬ ይ ዮ ዯ ደ ዱ ዲ ዳ ዴ ድ ዶ ዷ ⶌ ዸ ዸ ዹ ዺ ዻ ዼ ዽ ዾ ዿ ⶍ ጀ ጀ ጁ ጂ ጃ ጄ ጅ ጆ ጇ ⶎ ገ ገ ጉ ጊ ጋ ጌ ግ ጎ ጏ ጐ ጒ ጒ ጓ ጔ ጕ ጘ ጘ ጙ ጚ ጛ ጜ ጝ ጞ ጟ ⶓ ⶓ ⶔ ⶕ ⶖ ጠ ጠ ጡ ጢ ጣ ጤ ጥ ጦ ጧ ⶏ ጨ ጨ ጩ ጪ ጫ ጬ ጭ ጮ ጯ ⶐ ጰ ጰ ጱ ጲ ጳ ጴ ጵ ጶ ጷ ⶑ ጸ ጸ ጹ ጺ ጻ ጼ ጽ ጾ ጿ ፀ ፁ ፂ ፃ ፄ ፅ ፆ ፇ ፈ ፉ ፊ ፋ ፌ ፍ ፎ ፏ ᎈ ᎈ ᎉ ᎊ ᎋ ፐ ፐ ፑ ፒ ፓ ፔ ፕ ፖ ፗ ᎌ ᎌ ᎍ ᎎ ᎏ ⶒ ፘ ፘ ፙ ፚ ⶠ ⶠ ⶡ ⶢ ⶣ ⶤ ⶥ ⶦ ⶨ ⶨ ⶩ ⶪ ⶫ ⶬ ⶭ ⶮ ⶰ ⶰ ⶱ ⶲ ⶳ ⶴ ⶵ ⶶ ⶸ ⶸ ⶹ ⶺ ⶻ ⶼ ⶽ ⶾ ⷀ ⷀ ⷁ ⷂ ⷃ ⷄ ⷅ ⷆ ⷈ ⷈ ⷉ ⷊ ⷋ ⷌ ⷍ ⷎ ⷐ ⷐ ⷑ ⷒ ⷓ ⷔ ⷕ ⷖ ⷘ ⷘ ⷙ ⷚ ⷛ ⷜ ⷝ ⷞ", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "xh": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + }, + "xog": { + 0: "a b c d e f g h i j k l m n o p q r s t u v w x y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "yav": { + 0: "a á à â ǎ ā b c d e é è ɛ ɛ́ ɛ̀ f h i í ì î ī k l m mb n ny ŋ ŋg o ó ò ô ǒ ō ɔ ɔ́ ɔ̀ p s t u ú ù û ǔ ū v w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "g j q r x z", + 5: "A B C D E Ɛ F H I K L M N Ŋ O Ɔ P S T U V W Y", + }, + "yo": { + 0: "a á à b d e é è ẹ ẹ́ ẹ̀ f g gb h i í ì j k l m n o ó ò ọ ọ́ ọ̀ p r s ṣ t u ú ù w y", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "c q v x z", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "zh": { + 0: "一 丁 七 万 万 丈 三 上 下 丌 不 与 丑 专 且 世 丘 丘 丙 业 东 丝 丢 两 严 丧 个 中 丰 串 临 丸 丸 丹 为 主 丽 举 乃 久 么 义 之 之 乌 乍 乎 乏 乐 乔 乖 乘 乙 九 也 也 习 乡 书 买 乱 乾 了 予 争 事 二 于 亏 云 互 五 井 亚 些 亡 交 交 亥 亦 产 亨 享 京 亮 亲 人 亿 亿 什 仁 仅 仇 今 介 仍 从 仔 他 付 仙 代 代 令 以 仪 们 仰 仲 件 价 任 份 仿 企 伊 伍 伏 伏 伐 休 众 众 优 伙 会 伟 传 伤 伦 伯 估 伴 伸 似 伽 但 位 位 低 住 佐 佑 体 何 余 佛 作 你 佤 佩 佳 使 例 供 依 侠 侦 侦 侧 侨 侬 侯 侵 便 促 俄 俊 俗 保 信 俩 修 俱 俾 倍 倒 候 倚 借 倦 值 倾 假 偌 偏 做 停 健 偶 偷 储 催 傲 傻 像 僧 儒 儿 允 元 元 兄 充 先 光 克 免 兑 兔 党 入 全 八 八 公 六 兮 兰 共 关 关 兴 兵 其 具 典 兹 养 养 兼 兽 内 冈 册 再 冒 写 军 农 冠 冬 冰 冲 决 况 冷 准 凌 减 凝 几 凡 凤 凭 凯 凰 出 击 函 刀 分 切 刊 刑 划 列 列 刘 则 刚 创 初 判 利 别 到 制 制 刷 券 刺 刻 剂 前 剑 剧 剩 剪 副 割 力 劝 劝 办 功 加 务 劣 动 动 助 努 劫 励 励 劲 劳 势 勇 勉 勋 勒 勤 勾 勿 包 匆 匈 化 北 匙 匹 匹 区 医 十 千 升 午 半 华 协 卒 卓 单 单 卖 南 博 占 占 卡 卢 卫 卯 卯 印 危 即 却 卷 厂 厄 厄 厅 历 厉 压 压 厌 厍 厚 原 去 县 参 又 又 叉 及 友 双 反 发 叔 取 取 受 变 叙 口 口 古 句 另 只 只 叫 召 叭 可 台 史 右 叶 叶 号 司 叹 吃 各 合 合 吉 吊 同 同 名 后 吐 向 吓 吗 君 吝 吟 否 吧 含 听 启 吵 吸 吹 吻 吾 呀 呆 呈 告 呐 员 呜 呢 呦 周 味 呵 呼 命 和 咖 咦 咦 咧 咨 咪 咬 咯 咱 哀 品 哇 哇 哈 哉 响 哎 哟 哥 哦 哩 哪 哭 哲 唉 唐 唤 唬 售 唯 唱 唷 商 啊 啡 啥 啦 啪 喀 喂 善 喇 喊 喏 喔 喜 喝 喵 喷 喻 嗒 嗨 嗯 嘉 嘛 嘴 嘻 嘿 器 四 回 因 团 园 困 围 固 国 图 圆 圈 土 圣 在 圭 地 圳 场 圾 址 均 坎 坐 坑 块 坚 坚 坛 坜 坡 坤 坦 坪 垂 垃 型 垒 埃 埋 城 埔 域 培 基 堂 堆 堕 堡 堪 塑 塔 塞 填 境 增 墨 壁 壤 士 壬 壮 声 处 备 复 夏 夕 外 多 夜 够 夥 大 天 天 太 夫 央 失 头 夷 夷 夸 夹 夺 奇 奇 奈 奉 奋 奏 契 奔 奖 套 奥 女 奴 奶 她 好 如 妇 妈 妖 妙 妥 妨 妮 妹 妻 姆 姊 始 姐 姑 姓 委 姿 威 娃 娄 娘 娜 娟 娱 婆 婚 媒 嫁 嫌 嫩 子 孔 孕 字 字 存 孙 孜 孝 孟 季 孤 学 孩 宁 它 宇 宇 守 安 宋 完 宏 宗 宗 官 宙 定 宛 宜 宝 实 审 审 客 宣 室 宪 害 宴 家 容 宽 宽 宾 宿 寂 寄 寄 寅 密 寇 富 寒 寝 寝 寞 察 寡 寨 寸 对 寻 导 寿 封 射 将 尊 小 少 尔 尖 尘 尚 尝 尤 就 尺 尼 尼 尽 尾 局 局 屁 层 居 屋 屏 展 属 屠 山 岁 岂 岗 岘 岚 岛 岳 岸 峡 峰 崇 崩 崴 川 州 巡 工 工 左 巧 巨 巫 差 己 己 已 巳 巴 巷 币 币 市 布 帅 师 希 帐 帕 帖 帝 带 席 帮 常 帽 幅 幕 干 干 平 年 并 幸 幻 幻 幼 幽 广 庆 床 序 库 库 应 底 店 庙 庚 府 庞 废 度 座 庭 康 庸 廉 廖 延 廷 建 开 异 异 弃 弄 弊 式 引 弗 弘 弟 张 弥 弦 弯 弱 弹 强 归 当 录 彝 形 彩 彬 彭 彰 影 彷 役 彻 彼 往 征 径 待 很 律 後 徐 徒 得 循 微 徵 德 心 必 忆 忌 忍 志 志 忘 忙 忠 忧 快 念 忽 怀 态 怎 怒 怕 怖 思 怡 急 性 怨 怪 总 恋 恐 恢 恨 恩 恭 息 恰 恶 恼 悄 悉 悔 悟 悠 患 您 悲 情 惑 惜 惠 惧 惨 惯 想 惹 愁 愈 愉 意 愚 感 愧 慈 慎 慕 慢 慧 慰 憾 懂 懒 戈 戊 戌 戏 戏 成 我 戒 或 战 截 戴 户 房 房 所 扁 扇 手 才 扎 扑 打 托 扣 执 扩 扫 扫 扬 扭 扮 扯 批 找 找 承 技 抄 把 抑 抓 投 抗 折 抢 护 报 披 抬 抱 抵 抹 抽 担 拆 拉 拍 拒 拔 拖 拘 招 拜 拟 拥 拦 拨 择 括 拳 拷 拼 拾 拿 持 指 按 挑 挖 挝 挡 挤 挥 挪 振 挺 捉 捐 捕 损 捡 换 据 捷 授 掉 掌 排 探 接 控 控 推 掩 措 掸 描 提 插 握 援 搜 搞 搬 搭 摄 摆 摊 摔 摘 摩 摸 撒 撞 播 操 擎 擦 支 收 改 攻 放 政 故 效 敌 敏 救 教 敝 敢 散 敦 敬 数 敲 整 文 斋 斐 斗 料 斜 斥 断 斯 新 方 於 施 旁 旅 旋 族 旗 无 既 日 日 旦 旧 旨 早 旭 时 旺 昂 昆 昌 明 昏 易 星 映 春 昨 昭 是 显 晃 晋 晒 晓 晚 晨 普 景 晴 晶 智 暂 暑 暖 暗 暮 暴 曰 曲 更 曹 曼 曾 曾 替 最 月 有 朋 服 朗 望 朝 期 木 未 未 末 本 札 术 朱 朵 机 杀 杂 权 杉 李 材 村 杜 束 条 来 杨 杯 杰 松 板 极 构 析 林 果 枝 枢 枪 枫 架 柏 某 染 柔 查 柬 柯 柳 柴 标 栋 栏 树 校 样 样 核 根 格 桃 框 案 桌 桑 档 桥 梁 梅 梦 梯 械 梵 检 棉 棋 棒 棚 森 椅 植 椰 楚 楼 概 榜 模 樱 檀 欠 欠 次 欢 欣 欧 欲 欺 款 歉 歌 止 止 正 此 步 武 歪 死 殊 残 段 毅 母 每 毒 比 毕 毛 毫 氏 民 气 氛 水 永 求 汇 汉 汗 汝 江 江 池 污 汤 汪 汶 汽 沃 沈 沉 沙 沟 没 沧 河 油 治 沿 泉 泊 法 泛 泡 泡 波 泣 泥 注 泰 泳 泽 洋 洗 洛 洞 津 洪 洲 活 洽 派 流 浅 测 济 浏 浑 浓 浙 浦 浩 浪 浮 浴 海 涅 消 涉 涛 涨 涯 液 涵 淋 淑 淘 淡 深 混 添 清 渐 渡 渣 温 港 渴 游 湖 湾 源 溜 溪 滋 滑 满 滥 滨 滴 漂 漏 演 漠 漫 潘 潜 潮 澎 澳 激 灌 火 灭 灯 灰 灵 灿 炉 炎 炮 炸 点 烂 烈 烤 烦 烧 热 焦 然 煌 煞 照 煮 熊 熟 燃 燕 爆 爪 爬 爱 爵 爵 父 爷 爸 爽 片 版 牌 牙 牛 牡 牢 牧 物 牲 牵 特 牺 犯 状 犹 狂 狐 狗 狠 独 狮 狱 狼 猛 猜 猪 献 猴 玄 率 玉 王 玛 玩 玫 环 现 玲 玻 珀 珊 珍 珠 班 球 理 琊 琪 琳 琴 琼 瑙 瑜 瑞 瑟 瑰 瑶 璃 瓜 瓦 瓶 甘 甚 甜 生 用 田 田 由 甲 申 电 男 甸 画 畅 界 留 略 番 疆 疏 疑 疗 疯 疲 疼 疾 病 痕 痛 痴 癸 登 白 百 的 皆 皇 皮 盈 益 监 盒 盖 盘 盛 盟 目 直 相 盼 盾 省 眉 看 真 眠 眼 着 睛 睡 督 瞧 矛 矣 知 短 石 矶 码 砂 砍 研 破 础 硕 硬 确 碍 碎 碗 碟 碧 碰 磁 磅 磨 示 礼 社 祖 祚 祝 神 祥 票 祯 祸 禁 禅 福 离 秀 私 秋 种 科 秒 秘 租 秤 秦 秩 积 称 移 稀 程 稍 税 稣 稳 稿 穆 究 穷 穹 空 穿 突 窗 窝 立 站 竞 竞 竟 章 童 端 竹 笑 笔 笛 符 笨 第 等 筋 筑 答 策 筹 签 简 算 管 箭 箱 篇 篮 簿 籍 米 类 粉 粒 粗 粤 粹 精 糊 糕 糖 糟 系 素 索 紧 紫 累 繁 红 约 级 纪 纯 纲 纳 纵 纷 纸 纽 线 练 组 细 细 织 终 绍 经 结 绕 绘 给 络 绝 统 继 绩 绪 续 维 绵 综 绿 缅 缓 编 缘 缠 缩 缴 缶 缸 缺 罐 网 罕 罗 罚 罢 罪 置 署 羊 美 羞 群 羯 羽 翁 翅 翔 翘 翠 翰 翻 翼 耀 老 考 者 而 耍 耐 耗 耳 耶 聊 职 联 聘 聚 聪 肉 肖 肚 股 肤 肥 肩 肯 育 胁 胆 背 胎 胖 胜 胞 胡 胶 胸 能 脆 脑 脱 脸 腊 腐 腓 腰 腹 腾 腿 臂 臣 自 臭 至 致 舌 舍 舒 舞 舟 航 般 舰 船 良 色 艺 艾 节 芒 芝 芦 芬 芭 花 芳 苍 苏 苗 若 苦 英 茂 范 茨 茫 茶 草 荐 荒 荣 药 荷 莉 莎 莪 莫 莱 莲 获 菜 菩 菲 萄 萍 萤 营 萧 萨 落 著 葛 葡 蒂 蒋 蒙 蓉 蓝 蓬 蔑 蔡 薄 薪 藉 藏 藤 虎 虑 虫 虹 虽 虾 蚁 蛇 蛋 蛙 蛮 蜂 蜜 蝶 融 蟹 蠢 血 行 街 衡 衣 补 表 袋 被 袭 裁 裂 装 裕 裤 西 要 覆 见 观 规 视 览 觉 角 解 言 誉 誓 警 计 订 认 讨 让 训 训 议 讯 记 讲 讷 许 论 设 访 证 评 识 诉 词 译 试 诗 诚 话 诞 询 该 详 语 误 说 请 诸 诺 读 课 谁 调 谅 谈 谊 谋 谓 谜 谢 谨 谱 谷 豆 象 豪 貌 贝 贝 贞 负 贡 贡 财 责 贤 败 货 货 质 贩 贪 购 贯 贱 贴 贵 贸 贸 费 贺 贼 贾 资 赋 赌 赏 赐 赔 赖 赚 赛 赞 赠 赢 赤 赫 走 赵 起 趁 超 越 趋 趣 足 跃 跌 跑 距 跟 路 跳 踏 踢 踩 身 躲 车 轨 轩 转 轮 轮 软 轰 轻 载 较 辅 辆 辈 辉 辑 输 辛 辞 辨 辩 辰 辱 边 达 迁 迅 过 迈 迎 运 近 返 还 这 进 进 远 违 连 迟 迦 迪 迫 述 迷 追 退 退 送 适 逃 逆 选 逊 透 逐 递 途 通 逛 逝 速 造 逢 逸 逻 逼 遇 遍 道 遗 遭 遮 遵 避 邀 邓 那 邦 邪 邮 邱 邻 郎 郑 部 郭 都 鄂 酉 酋 配 酒 酷 酸 醉 醒 采 释 里 里 重 野 量 金 针 钓 钟 钢 钦 钱 钻 铁 铃 铜 铢 铭 银 铺 链 销 锁 锅 锋 错 锡 锦 键 锺 镇 镜 镭 长 门 闪 闭 问 闰 闲 间 闷 闹 闻 阁 阅 阐 阔 队 阮 防 防 阳 阴 阵 阶 阻 阿 陀 附 附 际 陆 陈 降 限 院 除 险 陪 陵 陵 陶 陷 隆 随 隐 隔 障 难 雄 雄 雅 集 雉 雨 雪 雯 雳 零 雷 雾 需 震 霍 霖 露 霸 霹 青 靖 静 非 靠 面 革 靼 鞋 鞑 韦 韩 音 页 顶 项 项 顺 须 顽 顽 顾 顿 预 领 颇 频 颗 题 额 风 飘 飙 飞 食 餐 饭 饮 饰 饱 饼 馆 首 香 馨 马 驱 驶 驻 驾 验 骑 骗 骚 骤 骨 高 鬼 魂 魅 魔 鱼 鲁 鲜 鸟 鸡 鸣 鸭 鸿 鹅 鹤 鹰 鹿 麦 麻 黄 黎 黑 默 鼓 鼠 鼻 齐 齿 龄 龙 龟", + 2: "﹉ ﹉ ﹊ ﹋ ﹌ _ _ ﹍ ﹍ ﹎ ﹏ ︳ ︴ - - ﹣ ‐ – — ︱ ― , , ﹐ 、 ﹑ ; ; ﹔ : : ﹕ ! ! ﹗ ? ? ﹖ . . ﹒ ‥ ︰ … 。 · ' ‘ ’ \" " “ ” 〝 〞 ( ( ﹙ ︵ ) ) ﹚ ︶ [ [ ] ] { { ﹛ ︷ } } ﹜ ︸ 〈 ︿ 〉 ﹀ 《 ︽ 》 ︾ 「 ﹁ 」 ﹂ 『 ﹃ 』 ﹄ 【 ︻ 】 ︼ 〔 ﹝ ︹ 〕 ﹞ ︺ 〖 〗 ‖ § @ @ ﹫ * * ﹡ / / \\ \ ﹨ & & ﹠ # # ﹟ % % ﹪ ‰ ′ ″ ‵ 〃 ※", + 3: "侣 傣 卑 厘 吕 堤 奎 巽 撤 楔 楠 滕 瑚 甫 盲 禄 粟 脚 钯 铂 锑 镑 魁", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "zh-Hans-MO": { + 0: "一 丁 七 万 万 丈 三 上 下 丌 不 与 丑 专 且 世 丘 丘 丙 业 东 丝 丢 两 严 丧 个 中 丰 串 临 丸 丸 丹 为 主 丽 举 乃 久 么 义 之 之 乌 乍 乎 乏 乐 乔 乖 乘 乙 九 也 也 习 乡 书 买 乱 乾 了 予 争 事 二 于 亏 云 互 五 井 亚 些 亡 交 交 亥 亦 产 亨 享 京 亮 亲 人 亿 亿 什 仁 仅 仇 今 介 仍 从 仔 他 付 仙 代 代 令 以 仪 们 仰 仲 件 价 任 份 仿 企 伊 伍 伏 伏 伐 休 众 众 优 伙 会 伟 传 伤 伦 伯 估 伴 伸 似 伽 但 位 位 低 住 佐 佑 体 何 余 佛 作 你 佤 佩 佳 使 例 供 依 侠 侦 侦 侧 侨 侬 侯 侵 便 促 俄 俊 俗 保 信 俩 修 俱 俾 倍 倒 候 倚 借 倦 值 倾 假 偌 偏 做 停 健 偶 偷 储 催 傲 傻 像 僧 儒 儿 允 元 元 兄 充 先 光 克 免 兑 兔 党 入 全 八 八 公 六 兮 兰 共 关 关 兴 兵 其 具 典 兹 养 养 兼 兽 内 冈 册 再 冒 写 军 农 冠 冬 冰 冲 决 况 冷 准 凌 减 凝 几 凡 凤 凭 凯 凰 出 击 函 刀 分 切 刊 刑 划 列 列 刘 则 刚 创 初 判 利 别 到 制 制 刷 券 刺 刻 剂 前 剑 剧 剩 剪 副 割 力 劝 劝 办 功 加 务 劣 动 动 助 努 劫 励 励 劲 劳 势 勇 勉 勋 勒 勤 勾 勿 包 匆 匈 化 北 匙 匹 匹 区 医 十 千 升 午 半 华 协 卒 卓 单 单 卖 南 博 占 占 卡 卢 卫 卯 卯 印 危 即 却 卷 厂 厄 厄 厅 历 厉 压 压 厌 厍 厚 原 去 县 参 又 又 叉 及 友 双 反 发 叔 取 取 受 变 叙 口 口 古 句 另 只 只 叫 召 叭 可 台 史 右 叶 叶 号 司 叹 吃 各 合 合 吉 吊 同 同 名 后 吐 向 吓 吗 君 吝 吟 否 吧 含 听 启 吵 吸 吹 吻 吾 呀 呆 呈 告 呐 员 呜 呢 呦 周 味 呵 呼 命 和 咖 咦 咦 咧 咨 咪 咬 咯 咱 哀 品 哇 哇 哈 哉 响 哎 哟 哥 哦 哩 哪 哭 哲 唉 唐 唤 唬 售 唯 唱 唷 商 啊 啡 啥 啦 啪 喀 喂 善 喇 喊 喏 喔 喜 喝 喵 喷 喻 嗒 嗨 嗯 嘉 嘛 嘴 嘻 嘿 器 四 回 因 团 园 困 围 固 国 图 圆 圈 土 圣 在 圭 地 圳 场 圾 址 均 坎 坐 坑 块 坚 坚 坛 坜 坡 坤 坦 坪 垂 垃 型 垒 埃 埋 城 埔 域 培 基 堂 堆 堕 堡 堪 塑 塔 塞 填 境 增 墨 壁 壤 士 壬 壮 声 处 备 复 夏 夕 外 多 夜 够 夥 大 天 天 太 夫 央 失 头 夷 夷 夸 夹 夺 奇 奇 奈 奉 奋 奏 契 奔 奖 套 奥 女 奴 奶 她 好 如 妇 妈 妖 妙 妥 妨 妮 妹 妻 姆 姊 始 姐 姑 姓 委 姿 威 娃 娄 娘 娜 娟 娱 婆 婚 媒 嫁 嫌 嫩 子 孔 孕 字 字 存 孙 孜 孝 孟 季 孤 学 孩 宁 它 宇 宇 守 安 宋 完 宏 宗 宗 官 宙 定 宛 宜 宝 实 审 审 客 宣 室 宪 害 宴 家 容 宽 宽 宾 宿 寂 寄 寄 寅 密 寇 富 寒 寝 寝 寞 察 寡 寨 寸 对 寻 导 寿 封 射 将 尊 小 少 尔 尖 尘 尚 尝 尤 就 尺 尼 尼 尽 尾 局 局 屁 层 居 屋 屏 展 属 屠 山 岁 岂 岗 岘 岚 岛 岳 岸 峡 峰 崇 崩 崴 川 州 巡 工 工 左 巧 巨 巫 差 己 己 已 巳 巴 巷 币 币 市 布 帅 师 希 帐 帕 帖 帝 带 席 帮 常 帽 幅 幕 干 干 平 年 并 幸 幻 幻 幼 幽 广 庆 床 序 库 库 应 底 店 庙 庚 府 庞 废 度 座 庭 康 庸 廉 廖 延 廷 建 开 异 异 弃 弄 弊 式 引 弗 弘 弟 张 弥 弦 弯 弱 弹 强 归 当 录 彝 形 彩 彬 彭 彰 影 彷 役 彻 彼 往 征 径 待 很 律 後 徐 徒 得 循 微 徵 德 心 必 忆 忌 忍 志 志 忘 忙 忠 忧 快 念 忽 怀 态 怎 怒 怕 怖 思 怡 急 性 怨 怪 总 恋 恐 恢 恨 恩 恭 息 恰 恶 恼 悄 悉 悔 悟 悠 患 您 悲 情 惑 惜 惠 惧 惨 惯 想 惹 愁 愈 愉 意 愚 感 愧 慈 慎 慕 慢 慧 慰 憾 懂 懒 戈 戊 戌 戏 戏 成 我 戒 或 战 截 戴 户 房 房 所 扁 扇 手 才 扎 扑 打 托 扣 执 扩 扫 扫 扬 扭 扮 扯 批 找 找 承 技 抄 把 抑 抓 投 抗 折 抢 护 报 披 抬 抱 抵 抹 抽 担 拆 拉 拍 拒 拔 拖 拘 招 拜 拟 拥 拦 拨 择 括 拳 拷 拼 拾 拿 持 指 按 挑 挖 挝 挡 挤 挥 挪 振 挺 捉 捐 捕 损 捡 换 据 捷 授 掉 掌 排 探 接 控 控 推 掩 措 掸 描 提 插 握 援 搜 搞 搬 搭 摄 摆 摊 摔 摘 摩 摸 撒 撞 播 操 擎 擦 支 收 改 攻 放 政 故 效 敌 敏 救 教 敝 敢 散 敦 敬 数 敲 整 文 斋 斐 斗 料 斜 斥 断 斯 新 方 於 施 旁 旅 旋 族 旗 无 既 日 日 旦 旧 旨 早 旭 时 旺 昂 昆 昌 明 昏 易 星 映 春 昨 昭 是 显 晃 晋 晒 晓 晚 晨 普 景 晴 晶 智 暂 暑 暖 暗 暮 暴 曰 曲 更 曹 曼 曾 曾 替 最 月 有 朋 服 朗 望 朝 期 木 未 未 末 本 札 术 朱 朵 机 杀 杂 权 杉 李 材 村 杜 束 条 来 杨 杯 杰 松 板 极 构 析 林 果 枝 枢 枪 枫 架 柏 某 染 柔 查 柬 柯 柳 柴 标 栋 栏 树 校 样 样 核 根 格 桃 框 案 桌 桑 档 桥 梁 梅 梦 梯 械 梵 检 棉 棋 棒 棚 森 椅 植 椰 楚 楼 概 榜 模 樱 檀 欠 欠 次 欢 欣 欧 欲 欺 款 歉 歌 止 止 正 此 步 武 歪 死 殊 残 段 毅 母 每 毒 比 毕 毛 毫 氏 民 气 氛 水 永 求 汇 汉 汗 汝 江 江 池 污 汤 汪 汶 汽 沃 沈 沉 沙 沟 没 沧 河 油 治 沿 泉 泊 法 泛 泡 泡 波 泣 泥 注 泰 泳 泽 洋 洗 洛 洞 津 洪 洲 活 洽 派 流 浅 测 济 浏 浑 浓 浙 浦 浩 浪 浮 浴 海 涅 消 涉 涛 涨 涯 液 涵 淋 淑 淘 淡 深 混 添 清 渐 渡 渣 温 港 渴 游 湖 湾 源 溜 溪 滋 滑 满 滥 滨 滴 漂 漏 演 漠 漫 潘 潜 潮 澎 澳 激 灌 火 灭 灯 灰 灵 灿 炉 炎 炮 炸 点 烂 烈 烤 烦 烧 热 焦 然 煌 煞 照 煮 熊 熟 燃 燕 爆 爪 爬 爱 爵 爵 父 爷 爸 爽 片 版 牌 牙 牛 牡 牢 牧 物 牲 牵 特 牺 犯 状 犹 狂 狐 狗 狠 独 狮 狱 狼 猛 猜 猪 献 猴 玄 率 玉 王 玛 玩 玫 环 现 玲 玻 珀 珊 珍 珠 班 球 理 琊 琪 琳 琴 琼 瑙 瑜 瑞 瑟 瑰 瑶 璃 瓜 瓦 瓶 甘 甚 甜 生 用 田 田 由 甲 申 电 男 甸 画 畅 界 留 略 番 疆 疏 疑 疗 疯 疲 疼 疾 病 痕 痛 痴 癸 登 白 百 的 皆 皇 皮 盈 益 监 盒 盖 盘 盛 盟 目 直 相 盼 盾 省 眉 看 真 眠 眼 着 睛 睡 督 瞧 矛 矣 知 短 石 矶 码 砂 砍 研 破 础 硕 硬 确 碍 碎 碗 碟 碧 碰 磁 磅 磨 示 礼 社 祖 祚 祝 神 祥 票 祯 祸 禁 禅 福 离 秀 私 秋 种 科 秒 秘 租 秤 秦 秩 积 称 移 稀 程 稍 税 稣 稳 稿 穆 究 穷 穹 空 穿 突 窗 窝 立 站 竞 竞 竟 章 童 端 竹 笑 笔 笛 符 笨 第 等 筋 筑 答 策 筹 签 简 算 管 箭 箱 篇 篮 簿 籍 米 类 粉 粒 粗 粤 粹 精 糊 糕 糖 糟 系 素 索 紧 紫 累 繁 红 约 级 纪 纯 纲 纳 纵 纷 纸 纽 线 练 组 细 细 织 终 绍 经 结 绕 绘 给 络 绝 统 继 绩 绪 续 维 绵 综 绿 缅 缓 编 缘 缠 缩 缴 缶 缸 缺 罐 网 罕 罗 罚 罢 罪 置 署 羊 美 羞 群 羯 羽 翁 翅 翔 翘 翠 翰 翻 翼 耀 老 考 者 而 耍 耐 耗 耳 耶 聊 职 联 聘 聚 聪 肉 肖 肚 股 肤 肥 肩 肯 育 胁 胆 背 胎 胖 胜 胞 胡 胶 胸 能 脆 脑 脱 脸 腊 腐 腓 腰 腹 腾 腿 臂 臣 自 臭 至 致 舌 舍 舒 舞 舟 航 般 舰 船 良 色 艺 艾 节 芒 芝 芦 芬 芭 花 芳 苍 苏 苗 若 苦 英 茂 范 茨 茫 茶 草 荐 荒 荣 药 荷 莉 莎 莪 莫 莱 莲 获 菜 菩 菲 萄 萍 萤 营 萧 萨 落 著 葛 葡 蒂 蒋 蒙 蓉 蓝 蓬 蔑 蔡 薄 薪 藉 藏 藤 虎 虑 虫 虹 虽 虾 蚁 蛇 蛋 蛙 蛮 蜂 蜜 蝶 融 蟹 蠢 血 行 街 衡 衣 补 表 袋 被 袭 裁 裂 装 裕 裤 西 要 覆 见 观 规 视 览 觉 角 解 言 誉 誓 警 计 订 认 讨 让 训 训 议 讯 记 讲 讷 许 论 设 访 证 评 识 诉 词 译 试 诗 诚 话 诞 询 该 详 语 误 说 请 诸 诺 读 课 谁 调 谅 谈 谊 谋 谓 谜 谢 谨 谱 谷 豆 象 豪 貌 贝 贝 贞 负 贡 贡 财 责 贤 败 货 货 质 贩 贪 购 贯 贱 贴 贵 贸 贸 费 贺 贼 贾 资 赋 赌 赏 赐 赔 赖 赚 赛 赞 赠 赢 赤 赫 走 赵 起 趁 超 越 趋 趣 足 跃 跌 跑 距 跟 路 跳 踏 踢 踩 身 躲 车 轨 轩 转 轮 轮 软 轰 轻 载 较 辅 辆 辈 辉 辑 输 辛 辞 辨 辩 辰 辱 边 达 迁 迅 过 迈 迎 运 近 返 还 这 进 进 远 违 连 迟 迦 迪 迫 述 迷 追 退 退 送 适 逃 逆 选 逊 透 逐 递 途 通 逛 逝 速 造 逢 逸 逻 逼 遇 遍 道 遗 遭 遮 遵 避 邀 邓 那 邦 邪 邮 邱 邻 郎 郑 部 郭 都 鄂 酉 酋 配 酒 酷 酸 醉 醒 采 释 里 里 重 野 量 金 针 钓 钟 钢 钦 钱 钻 铁 铃 铜 铢 铭 银 铺 链 销 锁 锅 锋 错 锡 锦 键 锺 镇 镜 镭 长 门 闪 闭 问 闰 闲 间 闷 闹 闻 阁 阅 阐 阔 队 阮 防 防 阳 阴 阵 阶 阻 阿 陀 附 附 际 陆 陈 降 限 院 除 险 陪 陵 陵 陶 陷 隆 随 隐 隔 障 难 雄 雄 雅 集 雉 雨 雪 雯 雳 零 雷 雾 需 震 霍 霖 露 霸 霹 青 靖 静 非 靠 面 革 靼 鞋 鞑 韦 韩 音 页 顶 项 项 顺 须 顽 顽 顾 顿 预 领 颇 频 颗 题 额 风 飘 飙 飞 食 餐 饭 饮 饰 饱 饼 馆 首 香 馨 马 驱 驶 驻 驾 验 骑 骗 骚 骤 骨 高 鬼 魂 魅 魔 鱼 鲁 鲜 鸟 鸡 鸣 鸭 鸿 鹅 鹤 鹰 鹿 麦 麻 黄 黎 黑 默 鼓 鼠 鼻 齐 齿 龄 龙 龟", + 3: "侣 傣 卑 厘 吕 堤 奎 巽 撤 楔 楠 滕 瑚 甫 盲 禄 粟 脚 钯 铂 锑 镑 魁", + 5: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", + }, + "zh-Hant": { + 0: "一 丁 七 丈 丈 三 上 下 丌 不 丑 且 世 丘 丙 丟 並 中 串 丸 丹 主 乃 久 么 之 乎 乏 乖 乘 乙 九 也 乾 亂 了 予 事 二 于 云 互 五 井 些 亞 亡 交 交 亥 亦 亨 享 京 亮 人 什 仁 仇 今 介 仍 仔 他 付 仙 代 代 令 以 仰 仲 件 任 份 企 伊 伍 伐 休 伙 伯 估 伴 伸 似 伽 但 佈 佉 位 位 低 住 佔 何 余 佛 作 你 佩 佳 使 來 例 供 依 侯 侵 便 係 係 促 俄 俊 俗 保 俠 信 修 俱 俾 個 倍 們 倒 候 倚 借 倫 值 假 偉 偏 做 停 健 側 側 偵 偶 偷 傑 備 傢 傣 傲 傳 傷 傻 傾 僅 像 僑 僧 價 儀 億 儒 儘 優 允 元 元 兄 充 兇 兇 先 光 克 免 兒 兔 入 內 內 全 兩 八 八 公 六 兮 共 兵 兵 其 具 典 兼 冊 再 冒 冠 冬 冰 冷 准 凌 凝 凡 凰 凱 出 函 刀 分 切 刊 列 初 判 別 利 刪 到 制 刷 刺 刻 則 剌 前 剛 剩 剪 副 割 創 劃 劇 劉 劍 力 功 加 助 助 努 劫 勁 勇 勉 勒 動 務 勝 勞 勢 勤 勵 勸 勿 包 匈 化 北 匹 區 十 千 升 午 半 卒 卒 卓 協 南 博 卜 卡 卯 卯 印 危 即 卷 卻 厄 厘 厚 原 厭 厲 去 參 又 及 友 反 叔 取 受 口 口 古 句 另 只 只 叫 召 叭 可 台 史 右 司 吃 各 合 合 吉 吊 同 同 名 后 吐 吐 向 吒 君 吝 吝 吞 吟 吠 否 吧 含 吳 吵 吸 吹 吾 呀 呂 呆 告 呢 周 味 呵 呼 命 和 咖 咦 咧 咪 咬 咱 哀 品 哇 哇 哈 哉 哎 員 哥 哦 哩 哪 哭 哲 唉 唐 唔 唬 售 唯 唱 唷 唸 商 啊 問 啟 啡 啥 啦 啪 喀 喂 善 喇 喊 喔 喜 喝 喬 單 喵 嗎 嗚 嗨 嗯 嘆 嘉 嘗 嘛 嘴 嘻 嘿 器 噴 嚇 嚴 囉 四 回 因 困 固 圈 國 圍 園 圓 圖 團 圜 土 在 圭 地 圾 址 均 坎 坐 坡 坤 坦 坪 垂 垃 型 埃 城 埔 域 執 培 基 堂 堅 堆 堡 堪 報 場 塊 塔 塗 塞 填 塵 境 增 墨 墮 壁 壇 壓 壘 壞 壢 士 壬 壯 壽 夏 夕 外 多 夜 夠 夢 夥 大 天 天 太 夫 央 失 夷 夸 夾 奇 奇 奈 奉 奎 奏 契 奔 套 奧 奪 奮 女 奴 奶 她 好 如 妙 妝 妥 妨 妮 妳 妹 妻 姆 姊 始 姐 姑 姓 委 姿 威 娃 娘 娛 婁 婆 婚 婦 媒 媽 嫌 嫩 子 孔 字 存 孝 孟 季 孤 孩 孫 學 它 宅 宇 宇 守 安 宋 完 宏 宗 宗 官 宙 定 宛 宜 客 客 宣 室 宮 害 家 容 宿 寂 寄 寄 寅 密 富 寒 寞 察 寢 實 實 寧 寨 審 寫 寬 寮 寵 寶 封 射 將 專 尊 尋 對 對 導 小 少 尖 尚 尤 就 尺 尼 尾 局 屁 居 屆 屋 屏 展 屠 層 屬 山 岡 岩 岸 峰 島 峽 崇 崙 崴 嵐 嶺 川 州 巡 工 工 左 巧 巨 巫 差 己 己 已 巳 巴 巷 市 布 希 帕 帖 帛 帝 帥 師 席 帳 帶 常 帽 幅 幕 幣 幫 干 干 平 年 幸 幹 幻 幻 幼 幽 幾 庇 床 序 底 店 庚 府 度 座 庫 庭 康 庸 廉 廖 廠 廢 廣 廳 延 廷 建 弄 式 引 弗 弘 弟 弦 弱 張 強 彈 彊 彌 彎 彝 彞 形 彥 彩 彬 彭 彰 影 役 彼 往 征 待 很 律 後 徐 徐 徑 徒 得 從 復 微 徵 德 徹 心 必 忌 忍 志 志 忘 忙 忠 快 念 忽 怎 怒 怕 怖 思 怡 急 性 怨 怪 恆 恐 恢 恥 恨 恩 恭 息 恰 悅 悉 悔 悟 悠 您 悲 悶 情 惑 惜 惠 惡 惱 想 惹 愁 愈 愉 意 愚 愛 感 慈 態 慕 慘 慢 慣 慧 慮 慰 慶 慾 憂 憐 憑 憲 憶 憾 懂 應 懶 懷 懼 戀 戈 戊 戌 成 成 我 戒 或 截 戰 戲 戴 戶 房 房 所 扁 扇 手 才 扎 打 托 扣 扥 扭 扯 批 找 找 承 技 抄 把 抓 投 抗 折 披 抬 抱 抵 抹 抽 拆 拉 拋 拍 拏 拒 拔 拖 招 拜 括 拳 拼 拾 拿 持 指 按 挑 挖 挪 振 挺 捐 捕 捨 捲 捷 掃 授 掉 掌 排 掛 採 探 接 控 推 措 描 提 插 揚 換 握 揮 援 損 搖 搜 搞 搬 搭 搶 摘 摩 摸 撐 撒 撞 撣 撥 播 撾 撿 擁 擇 擊 擋 操 擎 擔 據 擠 擦 擬 擴 擺 擾 攝 支 收 改 攻 放 政 故 效 敍 敏 救 敗 敗 敘 教 敝 敢 散 敦 敬 整 敵 數 文 斐 斗 料 斯 新 斷 方 於 施 旁 旅 旋 族 旗 既 日 旦 早 旭 旺 昂 昆 昇 昌 明 昏 易 星 映 春 昨 昭 是 時 晉 晒 晚 晨 普 景 晴 晶 智 暑 暖 暗 暫 暴 曆 曉 曰 曲 更 書 曼 曾 曾 替 最 會 月 有 朋 服 朗 望 朝 期 木 未 未 末 本 札 朱 朵 杉 李 材 村 杜 束 杯 杯 杰 東 松 板 析 林 果 枝 架 柏 某 染 柔 查 柬 柯 柳 柴 校 核 根 格 桃 案 桌 桑 梁 梅 條 梨 梯 械 梵 棄 棉 棋 棒 棚 森 椅 植 椰 楊 楓 楚 業 極 概 榜 榮 構 槍 樂 樓 標 樞 模 樣 樹 橋 機 橫 檀 檔 檢 欄 權 次 欣 欲 欺 欽 款 歉 歌 歐 歡 歡 止 正 此 步 武 歲 歷 歸 死 殊 殘 段 殺 殼 毀 毅 母 每 毒 比 毛 毫 氏 民 氣 水 永 求 汗 汝 江 江 池 污 汪 汶 決 汽 沃 沈 沉 沒 沖 沙 河 油 治 沿 況 泉 泊 法 泡 波 泥 注 泰 泳 洋 洗 洛 洞 洩 洪 洲 活 洽 派 流 浦 浩 浪 浮 海 涇 涇 消 涉 涯 液 涵 涼 淑 淚 淡 淨 深 混 淺 清 減 渡 測 港 游 湖 湯 源 準 溝 溪 溫 滄 滅 滋 滑 滴 滾 滿 漂 漏 演 漠 漢 漫 漲 漸 潔 潘 潛 潮 澤 澳 激 濃 濟 濤 濫 濱 瀏 灌 灣 火 灰 災 炎 炮 炸 為 烈 烏 烤 無 焦 然 煙 煞 照 煩 熊 熟 熱 燃 燈 燒 營 爆 爐 爛 爪 爬 爭 爵 父 爸 爺 爽 爾 牆 牆 片 版 牌 牙 牛 牠 牧 物 牲 特 牽 犧 犯 狀 狂 狐 狗 狠 狼 猛 猜 猴 猶 獄 獅 獎 獨 獲 獸 獻 玄 率 玉 王 玩 玫 玲 玻 珊 珍 珠 珥 班 現 球 理 琉 琪 琴 瑙 瑜 瑞 瑟 瑤 瑪 瑰 環 瓜 瓦 瓶 甘 甚 甜 生 產 用 田 田 由 甲 申 男 甸 界 留 畢 略 番 畫 異 當 疆 疏 疑 疼 病 痕 痛 痴 瘋 療 癡 癸 登 登 發 白 百 的 皆 皇 皮 盃 益 盛 盜 盟 盡 監 盤 盧 目 盲 直 相 盼 盾 省 眉 看 真 眠 眼 眾 睛 睡 督 瞧 瞭 矛 矣 知 短 石 砂 砍 研 砲 破 硬 碎 碗 碟 碧 碩 碰 確 碼 磁 磨 磯 礎 礙 示 社 祕 祖 祚 祛 祝 神 祥 票 祿 禁 禍 禍 禎 福 禪 禮 秀 私 秋 科 秒 秘 租 秤 秦 移 稅 程 稍 種 稱 稿 穆 穌 積 穩 究 穹 空 穿 突 窗 窩 窮 窶 立 站 竟 章 童 端 競 竹 笑 笛 符 笨 第 筆 等 筋 答 策 简 算 管 箭 箱 節 範 篇 築 簡 簫 簽 簿 籃 籌 籍 籤 米 粉 粗 粵 精 糊 糕 糟 系 糾 紀 約 紅 納 紐 純 紙 紙 級 紛 素 索 紫 累 細 紹 終 組 結 絕 絡 給 統 絲 經 綜 綠 維 綱 網 緊 緒 線 緣 編 緩 緬 緯 練 縛 縣 縮 縱 總 績 繁 繆 織 繞 繪 繳 繼 續 缸 缺 罕 罪 置 罰 署 罵 罷 羅 羊 美 羞 群 義 羽 翁 習 翔 翰 翹 翻 翼 耀 老 考 者 而 耍 耐 耗 耳 耶 聊 聖 聚 聞 聯 聰 聲 職 聽 肉 肚 股 肥 肩 肯 育 背 胎 胖 胞 胡 胸 能 脆 脫 腓 腔 腦 腰 腳 腿 膽 臉 臘 臣 臥 臨 自 臭 至 致 臺 與 與 興 舉 舊 舌 舍 舒 舞 舟 航 般 船 艦 良 色 艾 芝 芬 花 芳 若 苦 英 茅 茫 茲 茶 草 荒 荷 荼 莉 莊 莎 莫 菜 菩 華 菲 萄 萊 萬 落 葉 著 葛 葡 蒂 蒙 蒲 蒼 蓋 蓮 蔕 蔡 蔣 蕭 薄 薦 薩 薪 藉 藍 藏 藝 藤 藥 蘆 蘇 蘭 虎 處 虛 號 虧 蛇 蛋 蛙 蜂 蜜 蝶 融 螢 蟲 蟹 蠍 蠻 血 行 術 街 衛 衝 衡 衣 表 袋 被 裁 裂 裕 補 裝 裡 製 複 褲 西 要 覆 見 規 視 親 覺 覽 觀 角 解 觸 言 訂 計 訊 討 訓 託 記 訥 訪 設 許 訴 註 証 評 詞 詢 試 詩 話 話 該 詳 誇 誌 認 誓 誕 語 誠 誤 說 誰 課 誼 調 談 請 諒 論 諸 諺 諾 謀 謂 講 謝 證 識 譜 警 譯 議 護 譽 讀 變 讓 讚 谷 豆 豈 豐 象 豪 豬 貌 貓 貝 貞 負 負 財 貢 貨 貪 貪 貫 責 貴 買 費 貼 賀 資 賈 賓 賜 賞 賢 賢 賣 賤 賦 質 賭 賴 賺 購 賽 贈 贊 贏 赤 赫 走 起 超 越 趕 趙 趣 趨 足 跌 跎 跑 距 跟 跡 路 跳 踏 踢 蹟 蹤 躍 身 躲 車 軌 軍 軒 軟 較 載 輔 輕 輛 輝 輩 輪 輯 輸 轉 轟 辛 辦 辨 辭 辯 辯 辰 辱 農 迅 迎 近 返 迦 迪 迫 述 迴 迷 追 退 送 逃 逆 透 逐 途 這 這 通 逛 逝 速 造 逢 連 週 進 逸 逼 遇 遊 運 遍 過 道 道 達 違 遙 遜 遠 適 遭 遮 遲 遷 選 遺 避 避 邀 邁 還 邊 邏 那 邦 邪 邱 郎 部 郭 郵 都 鄂 鄉 鄭 鄰 酉 配 酒 酷 酸 醉 醒 醜 醫 采 釋 釋 里 重 野 量 金 針 釣 鈴 鉢 銀 銅 銖 銘 銳 銷 鋒 鋼 錄 錢 錦 錫 錯 鍋 鍵 鍾 鎊 鎖 鎮 鏡 鐘 鐵 鑑 長 門 閃 閉 開 閏 閒 間 閣 閱 闆 闊 闍 闐 關 闡 防 阻 阿 陀 附 降 限 院 院 陣 除 陪 陰 陳 陵 陵 陶 陷 陸 陽 隆 隊 階 隔 際 障 隨 險 隱 隻 雄 雄 雅 集 雉 雖 雙 雜 雞 離 難 雨 雪 雲 零 雷 電 需 震 霍 霧 露 霸 霹 靂 靈 青 靖 靜 非 靠 面 革 靼 鞋 韃 韋 韓 音 韻 響 頁 頂 項 順 須 預 頑 頓 頗 領 頞 頭 頻 顆 題 額 顏 願 類 顧 顯 風 飄 飛 食 飯 飲 飽 飾 餅 養 餐 餘 館 首 香 馬 駐 駕 駛 騎 騙 騷 驅 驗 驚 骨 體 高 髮 鬆 鬥 鬧 鬱 鬼 魁 魂 魅 魔 魚 魯 鮮 鳥 鳳 鳴 鴻 鵝 鷹 鹿 麗 麥 麵 麻 麼 黃 黎 黑 默 點 黨 鼓 鼠 鼻 齊 齋 齒 齡 龍 龜", + 2: "‾ ﹉ ﹉ ﹊ ﹋ ﹌ _ _ ﹍ ﹍ ﹎ ﹏ ︳ ︴ - - ﹣ ‐ – ︲ — ﹘ ︱ , , ﹐ 、 ﹑ ; ; ﹔ : : ﹕ ! ! ﹗ ? ? ﹖ . . ﹒ ‥ ︰ … 。 · ' ‘ ’ \" " “ ” 〝 〞 ( ( ﹙ ︵ ) ) ﹚ ︶ [ [ ] ] { { ﹛ ︷ } } ﹜ ︸ 〈 ︿ 〉 ﹀ 《 ︽ 》 ︾ 「 ﹁ 」 ﹂ 『 ﹃ 』 ﹄ 【 ︻ 】 ︼ 〔 ﹝ ︹ 〕 ﹞ ︺ § @ @ ﹫ * * ﹡ / / \\ \ ﹨ & & ﹠ # # ﹟ % % ﹪ ‰ † ‡ ‧ ′ ″ ‵ 〃 ※", + 3: "伏 侶 兌 兹 别 勳 卑 占 叶 堤 墎 奥 孜 峇 巽 彝 楔 渾 燦 狄 琳 瑚 甫 礁 芒 苗 茨 蚩 蜀 隴", + 5: "一 丁 丈 不 且 丞 並 串 乘 乾 亂 亭 傀 僎 僵 儐 償 儳 儷 儻 叢 嚴 囌 囑 廳", + }, + "zh-Hant-HK": { + 0: "一 丁 七 丈 丈 三 上 下 丌 不 丑 且 世 丘 丙 丟 並 中 串 丸 丹 主 乃 久 么 之 乎 乏 乖 乘 乙 九 也 乾 亂 了 予 事 二 于 云 互 五 井 些 亞 亡 交 交 亥 亦 亨 享 京 亮 人 什 仁 仇 今 介 仍 仔 他 付 仙 代 代 令 以 仰 仲 件 任 份 企 伊 伍 伐 休 伙 伯 估 伴 伸 似 伽 但 佈 佉 位 位 低 住 佔 何 余 佛 作 你 佩 佳 使 來 例 供 依 侯 侵 便 係 係 促 俄 俊 俗 保 俠 信 修 俱 俾 個 倍 們 倒 候 倚 借 倫 值 假 偉 偏 做 停 健 側 側 偵 偶 偷 傑 備 傢 傣 傲 傳 傷 傻 傾 僅 像 僑 僧 價 儀 億 儒 儘 優 允 元 元 兄 充 兇 兇 先 光 克 免 兒 兔 入 內 內 全 兩 八 八 公 六 兮 共 兵 兵 其 具 典 兼 冊 再 冒 冠 冬 冰 冷 准 凌 凝 凡 凰 凱 出 函 刀 分 切 刊 列 初 判 別 利 刪 到 制 刷 刺 刻 則 剌 前 剛 剩 剪 副 割 創 劃 劇 劉 劍 力 功 加 助 助 努 劫 勁 勇 勉 勒 動 務 勝 勞 勢 勤 勵 勸 勿 包 匈 化 北 匹 區 十 千 升 午 半 卒 卒 卓 協 南 博 卜 卡 卯 卯 印 危 即 卷 卻 厄 厘 厚 原 厭 厲 去 參 又 及 友 反 叔 取 受 口 口 古 句 另 只 只 叫 召 叭 可 台 史 右 司 吃 各 合 合 吉 吊 同 同 名 后 吐 吐 向 吒 君 吝 吝 吞 吟 吠 否 吧 含 吳 吵 吸 吹 吾 呀 呂 呆 告 呢 周 味 呵 呼 命 和 咖 咦 咧 咪 咬 咱 哀 品 哇 哇 哈 哉 哎 員 哥 哦 哩 哪 哭 哲 唉 唐 唔 唬 售 唯 唱 唷 唸 商 啊 問 啟 啡 啥 啦 啪 喀 喂 善 喇 喊 喔 喜 喝 喬 單 喵 嗎 嗚 嗨 嗯 嘆 嘉 嘗 嘛 嘴 嘻 嘿 器 噴 嚇 嚴 囉 四 回 因 困 固 圈 國 圍 園 圓 圖 團 圜 土 在 圭 地 圾 址 均 坎 坐 坡 坤 坦 坪 垂 垃 型 埃 城 埔 域 執 培 基 堂 堅 堆 堡 堪 報 場 塊 塔 塗 塞 填 塵 境 增 墨 墮 壁 壇 壓 壘 壞 壢 士 壬 壯 壽 夏 夕 外 多 夜 夠 夢 夥 大 天 天 太 夫 央 失 夷 夸 夾 奇 奇 奈 奉 奎 奏 契 奔 套 奧 奪 奮 女 奴 奶 她 好 如 妙 妝 妥 妨 妮 妳 妹 妻 姆 姊 始 姐 姑 姓 委 姿 威 娃 娘 娛 婁 婆 婚 婦 媒 媽 嫌 嫩 子 孔 字 存 孝 孟 季 孤 孩 孫 學 它 宅 宇 宇 守 安 宋 完 宏 宗 宗 官 宙 定 宛 宜 客 客 宣 室 宮 害 家 容 宿 寂 寄 寄 寅 密 富 寒 寞 察 寢 實 實 寧 寨 審 寫 寬 寮 寵 寶 封 射 將 專 尊 尋 對 對 導 小 少 尖 尚 尤 就 尺 尼 尾 局 屁 居 屆 屋 屏 展 屠 層 屬 山 岡 岩 岸 峰 島 峽 崇 崙 崴 嵐 嶺 川 州 巡 工 工 左 巧 巨 巫 差 己 己 已 巳 巴 巷 市 布 希 帕 帖 帛 帝 帥 師 席 帳 帶 常 帽 幅 幕 幣 幫 干 干 平 年 幸 幹 幻 幻 幼 幽 幾 庇 床 序 底 店 庚 府 度 座 庫 庭 康 庸 廉 廖 廠 廢 廣 廳 延 廷 建 弄 式 引 弗 弘 弟 弦 弱 張 強 彈 彊 彌 彎 彝 彞 形 彥 彩 彬 彭 彰 影 役 彼 往 征 待 很 律 後 徐 徐 徑 徒 得 從 復 微 徵 德 徹 心 必 忌 忍 志 志 忘 忙 忠 快 念 忽 怎 怒 怕 怖 思 怡 急 性 怨 怪 恆 恐 恢 恥 恨 恩 恭 息 恰 悅 悉 悔 悟 悠 您 悲 悶 情 惑 惜 惠 惡 惱 想 惹 愁 愈 愉 意 愚 愛 感 慈 態 慕 慘 慢 慣 慧 慮 慰 慶 慾 憂 憐 憑 憲 憶 憾 懂 應 懶 懷 懼 戀 戈 戊 戌 成 成 我 戒 或 截 戰 戲 戴 戶 房 房 所 扁 扇 手 才 扎 打 托 扣 扥 扭 扯 批 找 找 承 技 抄 把 抓 投 抗 折 披 抬 抱 抵 抹 抽 拆 拉 拋 拍 拏 拒 拔 拖 招 拜 括 拳 拼 拾 拿 持 指 按 挑 挖 挪 振 挺 捐 捕 捨 捲 捷 掃 授 掉 掌 排 掛 採 探 接 控 推 措 描 提 插 揚 換 握 揮 援 損 搖 搜 搞 搬 搭 搶 摘 摩 摸 撐 撒 撞 撣 撥 播 撾 撿 擁 擇 擊 擋 操 擎 擔 據 擠 擦 擬 擴 擺 擾 攝 支 收 改 攻 放 政 故 效 敍 敏 救 敗 敗 敘 教 敝 敢 散 敦 敬 整 敵 數 文 斐 斗 料 斯 新 斷 方 於 施 旁 旅 旋 族 旗 既 日 旦 早 旭 旺 昂 昆 昇 昌 明 昏 易 星 映 春 昨 昭 是 時 晉 晒 晚 晨 普 景 晴 晶 智 暑 暖 暗 暫 暴 曆 曉 曰 曲 更 書 曼 曾 曾 替 最 會 月 有 朋 服 朗 望 朝 期 木 未 未 末 本 札 朱 朵 杉 李 材 村 杜 束 杯 杯 杰 東 松 板 析 林 果 枝 架 柏 某 染 柔 查 柬 柯 柳 柴 校 核 根 格 桃 案 桌 桑 梁 梅 條 梨 梯 械 梵 棄 棉 棋 棒 棚 森 椅 植 椰 楊 楓 楚 業 極 概 榜 榮 構 槍 樂 樓 標 樞 模 樣 樹 橋 機 橫 檀 檔 檢 欄 權 次 欣 欲 欺 欽 款 歉 歌 歐 歡 歡 止 正 此 步 武 歲 歷 歸 死 殊 殘 段 殺 殼 毀 毅 母 每 毒 比 毛 毫 氏 民 氣 水 永 求 汗 汝 江 江 池 污 汪 汶 決 汽 沃 沈 沉 沒 沖 沙 河 油 治 沿 況 泉 泊 法 泡 波 泥 注 泰 泳 洋 洗 洛 洞 洩 洪 洲 活 洽 派 流 浦 浩 浪 浮 海 涇 涇 消 涉 涯 液 涵 涼 淑 淚 淡 淨 深 混 淺 清 減 渡 測 港 游 湖 湯 源 準 溝 溪 溫 滄 滅 滋 滑 滴 滾 滿 漂 漏 演 漠 漢 漫 漲 漸 潔 潘 潛 潮 澤 澳 激 濃 濟 濤 濫 濱 瀏 灌 灣 火 灰 災 炎 炮 炸 為 烈 烏 烤 無 焦 然 煙 煞 照 煩 熊 熟 熱 燃 燈 燒 營 爆 爐 爛 爪 爬 爭 爵 父 爸 爺 爽 爾 牆 牆 片 版 牌 牙 牛 牠 牧 物 牲 特 牽 犧 犯 狀 狂 狐 狗 狠 狼 猛 猜 猴 猶 獄 獅 獎 獨 獲 獸 獻 玄 率 玉 王 玩 玫 玲 玻 珊 珍 珠 珥 班 現 球 理 琉 琪 琴 瑙 瑜 瑞 瑟 瑤 瑪 瑰 環 瓜 瓦 瓶 甘 甚 甜 生 產 用 田 田 由 甲 申 男 甸 界 留 畢 略 番 畫 異 當 疆 疏 疑 疼 病 痕 痛 痴 瘋 療 癡 癸 登 登 發 白 百 的 皆 皇 皮 盃 益 盛 盜 盟 盡 監 盤 盧 目 盲 直 相 盼 盾 省 眉 看 真 眠 眼 眾 睛 睡 督 瞧 瞭 矛 矣 知 短 石 砂 砍 研 砲 破 硬 碎 碗 碟 碧 碩 碰 確 碼 磁 磨 磯 礎 礙 示 社 祕 祖 祚 祛 祝 神 祥 票 祿 禁 禍 禍 禎 福 禪 禮 秀 私 秋 科 秒 秘 租 秤 秦 移 稅 程 稍 種 稱 稿 穆 穌 積 穩 究 穹 空 穿 突 窗 窩 窮 窶 立 站 竟 章 童 端 競 竹 笑 笛 符 笨 第 筆 等 筋 答 策 简 算 管 箭 箱 節 範 篇 築 簡 簫 簽 簿 籃 籌 籍 籤 米 粉 粗 粵 精 糊 糕 糟 系 糾 紀 約 紅 納 紐 純 紙 紙 級 紛 素 索 紫 累 細 紹 終 組 結 絕 絡 給 統 絲 經 綜 綠 維 綱 網 緊 緒 線 緣 編 緩 緬 緯 練 縛 縣 縮 縱 總 績 繁 繆 織 繞 繪 繳 繼 續 缸 缺 罕 罪 置 罰 署 罵 罷 羅 羊 美 羞 群 義 羽 翁 習 翔 翰 翹 翻 翼 耀 老 考 者 而 耍 耐 耗 耳 耶 聊 聖 聚 聞 聯 聰 聲 職 聽 肉 肚 股 肥 肩 肯 育 背 胎 胖 胞 胡 胸 能 脆 脫 腓 腔 腦 腰 腳 腿 膽 臉 臘 臣 臥 臨 自 臭 至 致 臺 與 與 興 舉 舊 舌 舍 舒 舞 舟 航 般 船 艦 良 色 艾 芝 芬 花 芳 若 苦 英 茅 茫 茲 茶 草 荒 荷 荼 莉 莊 莎 莫 菜 菩 華 菲 萄 萊 萬 落 葉 著 葛 葡 蒂 蒙 蒲 蒼 蓋 蓮 蔕 蔡 蔣 蕭 薄 薦 薩 薪 藉 藍 藏 藝 藤 藥 蘆 蘇 蘭 虎 處 虛 號 虧 蛇 蛋 蛙 蜂 蜜 蝶 融 螢 蟲 蟹 蠍 蠻 血 行 術 街 衛 衝 衡 衣 表 袋 被 裁 裂 裕 補 裝 裡 製 複 褲 西 要 覆 見 規 視 親 覺 覽 觀 角 解 觸 言 訂 計 訊 討 訓 託 記 訥 訪 設 許 訴 註 証 評 詞 詢 試 詩 話 話 該 詳 誇 誌 認 誓 誕 語 誠 誤 說 誰 課 誼 調 談 請 諒 論 諸 諺 諾 謀 謂 講 謝 證 識 譜 警 譯 議 護 譽 讀 變 讓 讚 谷 豆 豈 豐 象 豪 豬 貌 貓 貝 貞 負 負 財 貢 貨 貪 貪 貫 責 貴 買 費 貼 賀 資 賈 賓 賜 賞 賢 賢 賣 賤 賦 質 賭 賴 賺 購 賽 贈 贊 贏 赤 赫 走 起 超 越 趕 趙 趣 趨 足 跌 跎 跑 距 跟 跡 路 跳 踏 踢 蹟 蹤 躍 身 躲 車 軌 軍 軒 軟 較 載 輔 輕 輛 輝 輩 輪 輯 輸 轉 轟 辛 辦 辨 辭 辯 辯 辰 辱 農 迅 迎 近 返 迦 迪 迫 述 迴 迷 追 退 送 逃 逆 透 逐 途 這 這 通 逛 逝 速 造 逢 連 週 進 逸 逼 遇 遊 運 遍 過 道 道 達 違 遙 遜 遠 適 遭 遮 遲 遷 選 遺 避 避 邀 邁 還 邊 邏 那 邦 邪 邱 郎 部 郭 郵 都 鄂 鄉 鄭 鄰 酉 配 酒 酷 酸 醉 醒 醜 醫 采 釋 釋 里 重 野 量 金 針 釣 鈴 鉢 銀 銅 銖 銘 銳 銷 鋒 鋼 錄 錢 錦 錫 錯 鍋 鍵 鍾 鎊 鎖 鎮 鏡 鐘 鐵 鑑 長 門 閃 閉 開 閏 閒 間 閣 閱 闆 闊 闍 闐 關 闡 防 阻 阿 陀 附 降 限 院 院 陣 除 陪 陰 陳 陵 陵 陶 陷 陸 陽 隆 隊 階 隔 際 障 隨 險 隱 隻 雄 雄 雅 集 雉 雖 雙 雜 雞 離 難 雨 雪 雲 零 雷 電 需 震 霍 霧 露 霸 霹 靂 靈 青 靖 靜 非 靠 面 革 靼 鞋 韃 韋 韓 音 韻 響 頁 頂 項 順 須 預 頑 頓 頗 領 頞 頭 頻 顆 題 額 顏 願 類 顧 顯 風 飄 飛 食 飯 飲 飽 飾 餅 養 餐 餘 館 首 香 馬 駐 駕 駛 騎 騙 騷 驅 驗 驚 骨 體 高 髮 鬆 鬥 鬧 鬱 鬼 魁 魂 魅 魔 魚 魯 鮮 鳥 鳳 鳴 鴻 鵝 鷹 鹿 麗 麥 麵 麻 麼 黃 黎 黑 默 點 黨 鼓 鼠 鼻 齊 齋 齒 齡 龍 龜", + 2: "‾ ﹉ ﹉ ﹊ ﹋ ﹌ _ _ ﹍ ﹍ ﹎ ﹏ ︳ ︴ - - ﹣ ‐ – ︲ — ﹘ ︱ , , ﹐ 、 ﹑ ; ; ﹔ : : ﹕ ! ! ﹗ ? ? ﹖ . . ﹒ ‥ ︰ … 。 · ' ‘ ’ \" " “ ” 〝 〞 ( ( ﹙ ︵ ) ) ﹚ ︶ [ [ ] ] { { ﹛ ︷ } } ﹜ ︸ 〈 ︿ 〉 ﹀ 《 ︽ 》 ︾ 「 ﹁ 」 ﹂ 『 ﹃ 』 ﹄ 【 ︻ 】 ︼ 〔 ﹝ ︹ 〕 ﹞ ︺ § @ @ ﹫ * * ﹡ / / \\ \ ﹨ & & ﹠ # # ﹟ % % ﹪ ‰ † ‡ ‧ ′ ″ ‵ 〃 ※", + 3: "伏 侶 兌 兹 别 勳 卑 占 叶 堤 墎 奥 孜 峇 巽 彝 楔 渾 燦 狄 琳 瑚 甫 礁 芒 苗 茨 蚩 蜀 隴", + 5: "一 丁 丈 不 且 丞 並 串 乘 乾 亂 亭 傀 僎 僵 儐 償 儳 儷 儻 叢 嚴 囌 囑 廳", + }, + "zu": { + 0: "a b bh c ch d dl dy e f g gc gq gx h hh hl i j k kh kl kp l m n nc ngc ngq ngx nhl nk nkc nkq nkx nq ntsh nx ny o p ph q qh r rh s sh t th tl ts tsh u v w x xh y z", + 2: "- , ; : ! ? . ( ) [ ] { }", + 3: "á à ă â å ä ã ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ö ø ō œ ú ù ŭ û ü ū ÿ", + }, +} diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/col.go b/vendor/golang.org/x/text/collate/tools/colcmp/col.go new file mode 100644 index 0000000..dc22d2e --- /dev/null +++ b/vendor/golang.org/x/text/collate/tools/colcmp/col.go @@ -0,0 +1,97 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "log" + "unicode/utf16" + + "golang.org/x/text/collate" + "golang.org/x/text/language" +) + +// Input holds an input string in both UTF-8 and UTF-16 format. +type Input struct { + index int // used for restoring to original random order + UTF8 []byte + UTF16 []uint16 + key []byte // used for sorting +} + +func (i Input) String() string { + return string(i.UTF8) +} + +func makeInput(s8 []byte, s16 []uint16) Input { + return Input{UTF8: s8, UTF16: s16} +} + +func makeInputString(s string) Input { + return Input{ + UTF8: []byte(s), + UTF16: utf16.Encode([]rune(s)), + } +} + +// Collator is an interface for architecture-specific implementations of collation. +type Collator interface { + // Key generates a sort key for the given input. Implemenations + // may return nil if a collator does not support sort keys. + Key(s Input) []byte + + // Compare returns -1 if a < b, 1 if a > b and 0 if a == b. + Compare(a, b Input) int +} + +// CollatorFactory creates a Collator for a given language tag. +type CollatorFactory struct { + name string + makeFn func(tag string) (Collator, error) + description string +} + +var collators = []CollatorFactory{} + +// AddFactory registers f as a factory for an implementation of Collator. +func AddFactory(f CollatorFactory) { + collators = append(collators, f) +} + +func getCollator(name, locale string) Collator { + for _, f := range collators { + if f.name == name { + col, err := f.makeFn(locale) + if err != nil { + log.Fatal(err) + } + return col + } + } + log.Fatalf("collator of type %q not found", name) + return nil +} + +// goCollator is an implemention of Collator using go's own collator. +type goCollator struct { + c *collate.Collator + buf collate.Buffer +} + +func init() { + AddFactory(CollatorFactory{"go", newGoCollator, "Go's native collator implementation."}) +} + +func newGoCollator(loc string) (Collator, error) { + c := &goCollator{c: collate.New(language.Make(loc))} + return c, nil +} + +func (c *goCollator) Key(b Input) []byte { + return c.c.Key(&c.buf, b.UTF8) +} + +func (c *goCollator) Compare(a, b Input) int { + return c.c.Compare(a.UTF8, b.UTF8) +} diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go b/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go new file mode 100644 index 0000000..6dda8bc --- /dev/null +++ b/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go @@ -0,0 +1,529 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main // import "golang.org/x/text/collate/tools/colcmp" + +import ( + "bytes" + "flag" + "fmt" + "io" + "log" + "os" + "runtime/pprof" + "sort" + "strconv" + "strings" + "text/template" + "time" + + "golang.org/x/text/unicode/norm" +) + +var ( + doNorm = flag.Bool("norm", false, "normalize input strings") + cases = flag.Bool("case", false, "generate case variants") + verbose = flag.Bool("verbose", false, "print results") + debug = flag.Bool("debug", false, "output debug information") + locales = flag.String("locale", "en_US", "the locale to use. May be a comma-separated list for some commands.") + col = flag.String("col", "go", "collator to test") + gold = flag.String("gold", "go", "collator used as the gold standard") + usecmp = flag.Bool("usecmp", false, + `use comparison instead of sort keys when sorting. Must be "test", "gold" or "both"`) + cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") + exclude = flag.String("exclude", "", "exclude errors that contain any of the characters") + limit = flag.Int("limit", 5000000, "maximum number of samples to generate for one run") +) + +func failOnError(err error) { + if err != nil { + log.Panic(err) + } +} + +// Test holds test data for testing a locale-collator pair. +// Test also provides functionality that is commonly used by the various commands. +type Test struct { + ctxt *Context + Name string + Locale string + ColName string + + Col Collator + UseCompare bool + + Input []Input + Duration time.Duration + + start time.Time + msg string + count int +} + +func (t *Test) clear() { + t.Col = nil + t.Input = nil +} + +const ( + msgGeneratingInput = "generating input" + msgGeneratingKeys = "generating keys" + msgSorting = "sorting" +) + +var lastLen = 0 + +func (t *Test) SetStatus(msg string) { + if *debug || *verbose { + fmt.Printf("%s: %s...\n", t.Name, msg) + } else if t.ctxt.out != nil { + fmt.Fprint(t.ctxt.out, strings.Repeat(" ", lastLen)) + fmt.Fprint(t.ctxt.out, strings.Repeat("\b", lastLen)) + fmt.Fprint(t.ctxt.out, msg, "...") + lastLen = len(msg) + 3 + fmt.Fprint(t.ctxt.out, strings.Repeat("\b", lastLen)) + } +} + +// Start is used by commands to signal the start of an operation. +func (t *Test) Start(msg string) { + t.SetStatus(msg) + t.count = 0 + t.msg = msg + t.start = time.Now() +} + +// Stop is used by commands to signal the end of an operation. +func (t *Test) Stop() (time.Duration, int) { + d := time.Now().Sub(t.start) + t.Duration += d + if *debug || *verbose { + fmt.Printf("%s: %s done. (%.3fs /%dK ops)\n", t.Name, t.msg, d.Seconds(), t.count/1000) + } + return d, t.count +} + +// generateKeys generates sort keys for all the inputs. +func (t *Test) generateKeys() { + for i, s := range t.Input { + b := t.Col.Key(s) + t.Input[i].key = b + if *debug { + fmt.Printf("%s (%X): %X\n", string(s.UTF8), s.UTF16, b) + } + } +} + +// Sort sorts the inputs. It generates sort keys if this is required by the +// chosen sort method. +func (t *Test) Sort() (tkey, tsort time.Duration, nkey, nsort int) { + if *cpuprofile != "" { + f, err := os.Create(*cpuprofile) + failOnError(err) + pprof.StartCPUProfile(f) + defer pprof.StopCPUProfile() + } + if t.UseCompare || t.Col.Key(t.Input[0]) == nil { + t.Start(msgSorting) + sort.Sort(&testCompare{*t}) + tsort, nsort = t.Stop() + } else { + t.Start(msgGeneratingKeys) + t.generateKeys() + t.count = len(t.Input) + tkey, nkey = t.Stop() + t.Start(msgSorting) + sort.Sort(t) + tsort, nsort = t.Stop() + } + return +} + +func (t *Test) Swap(a, b int) { + t.Input[a], t.Input[b] = t.Input[b], t.Input[a] +} + +func (t *Test) Less(a, b int) bool { + t.count++ + return bytes.Compare(t.Input[a].key, t.Input[b].key) == -1 +} + +func (t Test) Len() int { + return len(t.Input) +} + +type testCompare struct { + Test +} + +func (t *testCompare) Less(a, b int) bool { + t.count++ + return t.Col.Compare(t.Input[a], t.Input[b]) == -1 +} + +type testRestore struct { + Test +} + +func (t *testRestore) Less(a, b int) bool { + return t.Input[a].index < t.Input[b].index +} + +// GenerateInput generates input phrases for the locale tested by t. +func (t *Test) GenerateInput() { + t.Input = nil + if t.ctxt.lastLocale != t.Locale { + gen := phraseGenerator{} + gen.init(t.Locale) + t.SetStatus(msgGeneratingInput) + t.ctxt.lastInput = nil // allow the previous value to be garbage collected. + t.Input = gen.generate(*doNorm) + t.ctxt.lastInput = t.Input + t.ctxt.lastLocale = t.Locale + } else { + t.Input = t.ctxt.lastInput + for i := range t.Input { + t.Input[i].key = nil + } + sort.Sort(&testRestore{*t}) + } +} + +// Context holds all tests and settings translated from command line options. +type Context struct { + test []*Test + last *Test + + lastLocale string + lastInput []Input + + out io.Writer +} + +func (ts *Context) Printf(format string, a ...interface{}) { + ts.assertBuf() + fmt.Fprintf(ts.out, format, a...) +} + +func (ts *Context) Print(a ...interface{}) { + ts.assertBuf() + fmt.Fprint(ts.out, a...) +} + +// assertBuf sets up an io.Writer for ouput, if it doesn't already exist. +// In debug and verbose mode, output is buffered so that the regular output +// will not interfere with the additional output. Otherwise, output is +// written directly to stdout for a more responsive feel. +func (ts *Context) assertBuf() { + if ts.out != nil { + return + } + if *debug || *verbose { + ts.out = &bytes.Buffer{} + } else { + ts.out = os.Stdout + } +} + +// flush flushes the contents of ts.out to stdout, if it is not stdout already. +func (ts *Context) flush() { + if ts.out != nil { + if _, ok := ts.out.(io.ReadCloser); !ok { + io.Copy(os.Stdout, ts.out.(io.Reader)) + } + } +} + +// parseTests creates all tests from command lines and returns +// a Context to hold them. +func parseTests() *Context { + ctxt := &Context{} + colls := strings.Split(*col, ",") + for _, loc := range strings.Split(*locales, ",") { + loc = strings.TrimSpace(loc) + for _, name := range colls { + name = strings.TrimSpace(name) + col := getCollator(name, loc) + ctxt.test = append(ctxt.test, &Test{ + ctxt: ctxt, + Locale: loc, + ColName: name, + UseCompare: *usecmp, + Col: col, + }) + } + } + return ctxt +} + +func (c *Context) Len() int { + return len(c.test) +} + +func (c *Context) Test(i int) *Test { + if c.last != nil { + c.last.clear() + } + c.last = c.test[i] + return c.last +} + +func parseInput(args []string) []Input { + input := []Input{} + for _, s := range args { + rs := []rune{} + for len(s) > 0 { + var r rune + r, _, s, _ = strconv.UnquoteChar(s, '\'') + rs = append(rs, r) + } + s = string(rs) + if *doNorm { + s = norm.NFD.String(s) + } + input = append(input, makeInputString(s)) + } + return input +} + +// A Command is an implementation of a colcmp command. +type Command struct { + Run func(cmd *Context, args []string) + Usage string + Short string + Long string +} + +func (cmd Command) Name() string { + return strings.SplitN(cmd.Usage, " ", 2)[0] +} + +var commands = []*Command{ + cmdSort, + cmdBench, + cmdRegress, +} + +const sortHelp = ` +Sort sorts a given list of strings. Strings are separated by whitespace. +` + +var cmdSort = &Command{ + Run: runSort, + Usage: "sort <string>*", + Short: "sort a given list of strings", + Long: sortHelp, +} + +func runSort(ctxt *Context, args []string) { + input := parseInput(args) + if len(input) == 0 { + log.Fatalf("Nothing to sort.") + } + if ctxt.Len() > 1 { + ctxt.Print("COLL LOCALE RESULT\n") + } + for i := 0; i < ctxt.Len(); i++ { + t := ctxt.Test(i) + t.Input = append(t.Input, input...) + t.Sort() + if ctxt.Len() > 1 { + ctxt.Printf("%-5s %-5s ", t.ColName, t.Locale) + } + for _, s := range t.Input { + ctxt.Print(string(s.UTF8), " ") + } + ctxt.Print("\n") + } +} + +const benchHelp = ` +Bench runs a benchmark for the given list of collator implementations. +If no collator implementations are given, the go collator will be used. +` + +var cmdBench = &Command{ + Run: runBench, + Usage: "bench", + Short: "benchmark a given list of collator implementations", + Long: benchHelp, +} + +func runBench(ctxt *Context, args []string) { + ctxt.Printf("%-7s %-5s %-6s %-24s %-24s %-5s %s\n", "LOCALE", "COLL", "N", "KEYS", "SORT", "AVGLN", "TOTAL") + for i := 0; i < ctxt.Len(); i++ { + t := ctxt.Test(i) + ctxt.Printf("%-7s %-5s ", t.Locale, t.ColName) + t.GenerateInput() + ctxt.Printf("%-6s ", fmt.Sprintf("%dK", t.Len()/1000)) + tkey, tsort, nkey, nsort := t.Sort() + p := func(dur time.Duration, n int) { + s := "" + if dur > 0 { + s = fmt.Sprintf("%6.3fs ", dur.Seconds()) + if n > 0 { + s += fmt.Sprintf("%15s", fmt.Sprintf("(%4.2f ns/op)", float64(dur)/float64(n))) + } + } + ctxt.Printf("%-24s ", s) + } + p(tkey, nkey) + p(tsort, nsort) + + total := 0 + for _, s := range t.Input { + total += len(s.key) + } + ctxt.Printf("%-5d ", total/t.Len()) + ctxt.Printf("%6.3fs\n", t.Duration.Seconds()) + if *debug { + for _, s := range t.Input { + fmt.Print(string(s.UTF8), " ") + } + fmt.Println() + } + } +} + +const regressHelp = ` +Regress runs a monkey test by comparing the results of randomly generated tests +between two implementations of a collator. The user may optionally pass a list +of strings to regress against instead of the default test set. +` + +var cmdRegress = &Command{ + Run: runRegress, + Usage: "regress -gold=<col> -test=<col> [string]*", + Short: "run a monkey test between two collators", + Long: regressHelp, +} + +const failedKeyCompare = ` +%s:%d: incorrect comparison result for input: + a: %q (%.4X) + key: %s + b: %q (%.4X) + key: %s + Compare(a, b) = %d; want %d. + + gold keys: + a: %s + b: %s +` + +const failedCompare = ` +%s:%d: incorrect comparison result for input: + a: %q (%.4X) + b: %q (%.4X) + Compare(a, b) = %d; want %d. +` + +func keyStr(b []byte) string { + buf := &bytes.Buffer{} + for _, v := range b { + fmt.Fprintf(buf, "%.2X ", v) + } + return buf.String() +} + +func runRegress(ctxt *Context, args []string) { + input := parseInput(args) + for i := 0; i < ctxt.Len(); i++ { + t := ctxt.Test(i) + if len(input) > 0 { + t.Input = append(t.Input, input...) + } else { + t.GenerateInput() + } + t.Sort() + count := 0 + gold := getCollator(*gold, t.Locale) + for i := 1; i < len(t.Input); i++ { + ia := t.Input[i-1] + ib := t.Input[i] + if bytes.IndexAny(ib.UTF8, *exclude) != -1 { + i++ + continue + } + if bytes.IndexAny(ia.UTF8, *exclude) != -1 { + continue + } + goldCmp := gold.Compare(ia, ib) + if cmp := bytes.Compare(ia.key, ib.key); cmp != goldCmp { + count++ + a := string(ia.UTF8) + b := string(ib.UTF8) + fmt.Printf(failedKeyCompare, t.Locale, i-1, a, []rune(a), keyStr(ia.key), b, []rune(b), keyStr(ib.key), cmp, goldCmp, keyStr(gold.Key(ia)), keyStr(gold.Key(ib))) + } else if cmp := t.Col.Compare(ia, ib); cmp != goldCmp { + count++ + a := string(ia.UTF8) + b := string(ib.UTF8) + fmt.Printf(failedCompare, t.Locale, i-1, a, []rune(a), b, []rune(b), cmp, goldCmp) + } + } + if count > 0 { + ctxt.Printf("Found %d inconsistencies in %d entries.\n", count, t.Len()-1) + } + } +} + +const helpTemplate = ` +colcmp is a tool for testing and benchmarking collation + +Usage: colcmp command [arguments] + +The commands are: +{{range .}} + {{.Name | printf "%-11s"}} {{.Short}}{{end}} + +Use "col help [topic]" for more information about that topic. +` + +const detailedHelpTemplate = ` +Usage: colcmp {{.Usage}} + +{{.Long | trim}} +` + +func runHelp(args []string) { + t := template.New("help") + t.Funcs(template.FuncMap{"trim": strings.TrimSpace}) + if len(args) < 1 { + template.Must(t.Parse(helpTemplate)) + failOnError(t.Execute(os.Stderr, &commands)) + } else { + for _, cmd := range commands { + if cmd.Name() == args[0] { + template.Must(t.Parse(detailedHelpTemplate)) + failOnError(t.Execute(os.Stderr, cmd)) + os.Exit(0) + } + } + log.Fatalf("Unknown command %q. Run 'colcmp help'.", args[0]) + } + os.Exit(0) +} + +func main() { + flag.Parse() + log.SetFlags(0) + + ctxt := parseTests() + + if flag.NArg() < 1 { + runHelp(nil) + } + args := flag.Args()[1:] + if flag.Arg(0) == "help" { + runHelp(args) + } + for _, cmd := range commands { + if cmd.Name() == flag.Arg(0) { + cmd.Run(ctxt, args) + ctxt.flush() + return + } + } + runHelp(flag.Args()) +} diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go b/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go new file mode 100644 index 0000000..c2c31d5 --- /dev/null +++ b/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go @@ -0,0 +1,111 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin + +package main + +/* +#cgo LDFLAGS: -framework CoreFoundation +#include <CoreFoundation/CFBase.h> +#include <CoreFoundation/CoreFoundation.h> +*/ +import "C" +import ( + "unsafe" +) + +func init() { + AddFactory(CollatorFactory{"osx", newOSX16Collator, + "OS X/Darwin collator, using native strings."}) + AddFactory(CollatorFactory{"osx8", newOSX8Collator, + "OS X/Darwin collator for UTF-8."}) +} + +func osxUInt8P(s []byte) *C.UInt8 { + return (*C.UInt8)(unsafe.Pointer(&s[0])) +} + +func osxCharP(s []uint16) *C.UniChar { + return (*C.UniChar)(unsafe.Pointer(&s[0])) +} + +// osxCollator implements an Collator based on OS X's CoreFoundation. +type osxCollator struct { + loc C.CFLocaleRef + opt C.CFStringCompareFlags +} + +func (c *osxCollator) init(locale string) { + l := C.CFStringCreateWithBytes( + nil, + osxUInt8P([]byte(locale)), + C.CFIndex(len(locale)), + C.kCFStringEncodingUTF8, + C.Boolean(0), + ) + c.loc = C.CFLocaleCreate(nil, l) +} + +func newOSX8Collator(locale string) (Collator, error) { + c := &osx8Collator{} + c.init(locale) + return c, nil +} + +func newOSX16Collator(locale string) (Collator, error) { + c := &osx16Collator{} + c.init(locale) + return c, nil +} + +func (c osxCollator) Key(s Input) []byte { + return nil // sort keys not supported by OS X CoreFoundation +} + +type osx8Collator struct { + osxCollator +} + +type osx16Collator struct { + osxCollator +} + +func (c osx16Collator) Compare(a, b Input) int { + sa := C.CFStringCreateWithCharactersNoCopy( + nil, + osxCharP(a.UTF16), + C.CFIndex(len(a.UTF16)), + nil, + ) + sb := C.CFStringCreateWithCharactersNoCopy( + nil, + osxCharP(b.UTF16), + C.CFIndex(len(b.UTF16)), + nil, + ) + _range := C.CFRangeMake(0, C.CFStringGetLength(sa)) + return int(C.CFStringCompareWithOptionsAndLocale(sa, sb, _range, c.opt, c.loc)) +} + +func (c osx8Collator) Compare(a, b Input) int { + sa := C.CFStringCreateWithBytesNoCopy( + nil, + osxUInt8P(a.UTF8), + C.CFIndex(len(a.UTF8)), + C.kCFStringEncodingUTF8, + C.Boolean(0), + nil, + ) + sb := C.CFStringCreateWithBytesNoCopy( + nil, + osxUInt8P(b.UTF8), + C.CFIndex(len(b.UTF8)), + C.kCFStringEncodingUTF8, + C.Boolean(0), + nil, + ) + _range := C.CFRangeMake(0, C.CFStringGetLength(sa)) + return int(C.CFStringCompareWithOptionsAndLocale(sa, sb, _range, c.opt, c.loc)) +} diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/gen.go b/vendor/golang.org/x/text/collate/tools/colcmp/gen.go new file mode 100644 index 0000000..795be13 --- /dev/null +++ b/vendor/golang.org/x/text/collate/tools/colcmp/gen.go @@ -0,0 +1,183 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "math" + "math/rand" + "strings" + "unicode" + "unicode/utf16" + "unicode/utf8" + + "golang.org/x/text/language" + "golang.org/x/text/unicode/norm" +) + +// TODO: replace with functionality in language package. +// parent computes the parent language for the given language. +// It returns false if the parent is already root. +func parent(locale string) (parent string, ok bool) { + if locale == "und" { + return "", false + } + if i := strings.LastIndex(locale, "-"); i != -1 { + return locale[:i], true + } + return "und", true +} + +// rewriter is used to both unique strings and create variants of strings +// to add to the test set. +type rewriter struct { + seen map[string]bool + addCases bool +} + +func newRewriter() *rewriter { + return &rewriter{ + seen: make(map[string]bool), + } +} + +func (r *rewriter) insert(a []string, s string) []string { + if !r.seen[s] { + r.seen[s] = true + a = append(a, s) + } + return a +} + +// rewrite takes a sequence of strings in, adds variants of the these strings +// based on options and removes duplicates. +func (r *rewriter) rewrite(ss []string) []string { + ns := []string{} + for _, s := range ss { + ns = r.insert(ns, s) + if r.addCases { + rs := []rune(s) + rn := rs[0] + for c := unicode.SimpleFold(rn); c != rn; c = unicode.SimpleFold(c) { + rs[0] = c + ns = r.insert(ns, string(rs)) + } + } + } + return ns +} + +// exemplarySet holds a parsed set of characters from the exemplarCharacters table. +type exemplarySet struct { + typ exemplarType + set []string + charIndex int // cumulative total of phrases, including this set +} + +type phraseGenerator struct { + sets [exN]exemplarySet + n int +} + +func (g *phraseGenerator) init(id string) { + ec := exemplarCharacters + loc := language.Make(id).String() + // get sets for locale or parent locale if the set is not defined. + for i := range g.sets { + for p, ok := loc, true; ok; p, ok = parent(p) { + if set, ok := ec[p]; ok && set[i] != "" { + g.sets[i].set = strings.Split(set[i], " ") + break + } + } + } + r := newRewriter() + r.addCases = *cases + for i := range g.sets { + g.sets[i].set = r.rewrite(g.sets[i].set) + } + // compute indexes + for i, set := range g.sets { + g.n += len(set.set) + g.sets[i].charIndex = g.n + } +} + +// phrase returns the ith phrase, where i < g.n. +func (g *phraseGenerator) phrase(i int) string { + for _, set := range g.sets { + if i < set.charIndex { + return set.set[i-(set.charIndex-len(set.set))] + } + } + panic("index out of range") +} + +// generate generates inputs by combining all pairs of examplar strings. +// If doNorm is true, all input strings are normalized to NFC. +// TODO: allow other variations, statistical models, and random +// trailing sequences. +func (g *phraseGenerator) generate(doNorm bool) []Input { + const ( + M = 1024 * 1024 + buf8Size = 30 * M + buf16Size = 10 * M + ) + // TODO: use a better way to limit the input size. + if sq := int(math.Sqrt(float64(*limit))); g.n > sq { + g.n = sq + } + size := g.n * g.n + a := make([]Input, 0, size) + buf8 := make([]byte, 0, buf8Size) + buf16 := make([]uint16, 0, buf16Size) + + addInput := func(str string) { + buf8 = buf8[len(buf8):] + buf16 = buf16[len(buf16):] + if len(str) > cap(buf8) { + buf8 = make([]byte, 0, buf8Size) + } + if len(str) > cap(buf16) { + buf16 = make([]uint16, 0, buf16Size) + } + if doNorm { + buf8 = norm.NFD.AppendString(buf8, str) + } else { + buf8 = append(buf8, str...) + } + buf16 = appendUTF16(buf16, buf8) + a = append(a, makeInput(buf8, buf16)) + } + for i := 0; i < g.n; i++ { + p1 := g.phrase(i) + addInput(p1) + for j := 0; j < g.n; j++ { + p2 := g.phrase(j) + addInput(p1 + p2) + } + } + // permutate + rnd := rand.New(rand.NewSource(int64(rand.Int()))) + for i := range a { + j := i + rnd.Intn(len(a)-i) + a[i], a[j] = a[j], a[i] + a[i].index = i // allow restoring this order if input is used multiple times. + } + return a +} + +func appendUTF16(buf []uint16, s []byte) []uint16 { + for len(s) > 0 { + r, sz := utf8.DecodeRune(s) + s = s[sz:] + r1, r2 := utf16.EncodeRune(r) + if r1 != 0xFFFD { + buf = append(buf, uint16(r1), uint16(r2)) + } else { + buf = append(buf, uint16(r)) + } + } + return buf +} diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/icu.go b/vendor/golang.org/x/text/collate/tools/colcmp/icu.go new file mode 100644 index 0000000..91980ac --- /dev/null +++ b/vendor/golang.org/x/text/collate/tools/colcmp/icu.go @@ -0,0 +1,209 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build icu + +package main + +/* +#cgo LDFLAGS: -licui18n -licuuc +#include <stdlib.h> +#include <unicode/ucol.h> +#include <unicode/uiter.h> +#include <unicode/utypes.h> +*/ +import "C" +import ( + "fmt" + "log" + "unicode/utf16" + "unicode/utf8" + "unsafe" +) + +func init() { + AddFactory(CollatorFactory{"icu", newUTF16, + "Main ICU collator, using native strings."}) + AddFactory(CollatorFactory{"icu8", newUTF8iter, + "ICU collator using ICU iterators to process UTF8."}) + AddFactory(CollatorFactory{"icu16", newUTF8conv, + "ICU collation by first converting UTF8 to UTF16."}) +} + +func icuCharP(s []byte) *C.char { + return (*C.char)(unsafe.Pointer(&s[0])) +} + +func icuUInt8P(s []byte) *C.uint8_t { + return (*C.uint8_t)(unsafe.Pointer(&s[0])) +} + +func icuUCharP(s []uint16) *C.UChar { + return (*C.UChar)(unsafe.Pointer(&s[0])) +} +func icuULen(s []uint16) C.int32_t { + return C.int32_t(len(s)) +} +func icuSLen(s []byte) C.int32_t { + return C.int32_t(len(s)) +} + +// icuCollator implements a Collator based on ICU. +type icuCollator struct { + loc *C.char + col *C.UCollator + keyBuf []byte +} + +const growBufSize = 10 * 1024 * 1024 + +func (c *icuCollator) init(locale string) error { + err := C.UErrorCode(0) + c.loc = C.CString(locale) + c.col = C.ucol_open(c.loc, &err) + if err > 0 { + return fmt.Errorf("failed opening collator for %q", locale) + } else if err < 0 { + loc := C.ucol_getLocaleByType(c.col, 0, &err) + fmt, ok := map[int]string{ + -127: "warning: using default collator: %s", + -128: "warning: using fallback collator: %s", + }[int(err)] + if ok { + log.Printf(fmt, C.GoString(loc)) + } + } + c.keyBuf = make([]byte, 0, growBufSize) + return nil +} + +func (c *icuCollator) buf() (*C.uint8_t, C.int32_t) { + if len(c.keyBuf) == cap(c.keyBuf) { + c.keyBuf = make([]byte, 0, growBufSize) + } + b := c.keyBuf[len(c.keyBuf):cap(c.keyBuf)] + return icuUInt8P(b), icuSLen(b) +} + +func (c *icuCollator) extendBuf(n C.int32_t) []byte { + end := len(c.keyBuf) + int(n) + if end > cap(c.keyBuf) { + if len(c.keyBuf) == 0 { + log.Fatalf("icuCollator: max string size exceeded: %v > %v", n, growBufSize) + } + c.keyBuf = make([]byte, 0, growBufSize) + return nil + } + b := c.keyBuf[len(c.keyBuf):end] + c.keyBuf = c.keyBuf[:end] + return b +} + +func (c *icuCollator) Close() error { + C.ucol_close(c.col) + C.free(unsafe.Pointer(c.loc)) + return nil +} + +// icuUTF16 implements the Collator interface. +type icuUTF16 struct { + icuCollator +} + +func newUTF16(locale string) (Collator, error) { + c := &icuUTF16{} + return c, c.init(locale) +} + +func (c *icuUTF16) Compare(a, b Input) int { + return int(C.ucol_strcoll(c.col, icuUCharP(a.UTF16), icuULen(a.UTF16), icuUCharP(b.UTF16), icuULen(b.UTF16))) +} + +func (c *icuUTF16) Key(s Input) []byte { + bp, bn := c.buf() + n := C.ucol_getSortKey(c.col, icuUCharP(s.UTF16), icuULen(s.UTF16), bp, bn) + if b := c.extendBuf(n); b != nil { + return b + } + return c.Key(s) +} + +// icuUTF8iter implements the Collator interface +// This implementation wraps the UTF8 string in an iterator +// which is passed to the collator. +type icuUTF8iter struct { + icuCollator + a, b C.UCharIterator +} + +func newUTF8iter(locale string) (Collator, error) { + c := &icuUTF8iter{} + return c, c.init(locale) +} + +func (c *icuUTF8iter) Compare(a, b Input) int { + err := C.UErrorCode(0) + C.uiter_setUTF8(&c.a, icuCharP(a.UTF8), icuSLen(a.UTF8)) + C.uiter_setUTF8(&c.b, icuCharP(b.UTF8), icuSLen(b.UTF8)) + return int(C.ucol_strcollIter(c.col, &c.a, &c.b, &err)) +} + +func (c *icuUTF8iter) Key(s Input) []byte { + err := C.UErrorCode(0) + state := [2]C.uint32_t{} + C.uiter_setUTF8(&c.a, icuCharP(s.UTF8), icuSLen(s.UTF8)) + bp, bn := c.buf() + n := C.ucol_nextSortKeyPart(c.col, &c.a, &(state[0]), bp, bn, &err) + if n >= bn { + // Force failure. + if c.extendBuf(n+1) != nil { + log.Fatal("expected extension to fail") + } + return c.Key(s) + } + return c.extendBuf(n) +} + +// icuUTF8conv implementes the Collator interface. +// This implentation first converts the give UTF8 string +// to UTF16 and then calls the main ICU collation function. +type icuUTF8conv struct { + icuCollator +} + +func newUTF8conv(locale string) (Collator, error) { + c := &icuUTF8conv{} + return c, c.init(locale) +} + +func (c *icuUTF8conv) Compare(sa, sb Input) int { + a := encodeUTF16(sa.UTF8) + b := encodeUTF16(sb.UTF8) + return int(C.ucol_strcoll(c.col, icuUCharP(a), icuULen(a), icuUCharP(b), icuULen(b))) +} + +func (c *icuUTF8conv) Key(s Input) []byte { + a := encodeUTF16(s.UTF8) + bp, bn := c.buf() + n := C.ucol_getSortKey(c.col, icuUCharP(a), icuULen(a), bp, bn) + if b := c.extendBuf(n); b != nil { + return b + } + return c.Key(s) +} + +func encodeUTF16(b []byte) []uint16 { + a := []uint16{} + for len(b) > 0 { + r, sz := utf8.DecodeRune(b) + b = b[sz:] + r1, r2 := utf16.EncodeRune(r) + if r1 != 0xFFFD { + a = append(a, uint16(r1), uint16(r2)) + } else { + a = append(a, uint16(r)) + } + } + return a +} diff --git a/vendor/golang.org/x/text/currency/common.go b/vendor/golang.org/x/text/currency/common.go new file mode 100644 index 0000000..250cb8c --- /dev/null +++ b/vendor/golang.org/x/text/currency/common.go @@ -0,0 +1,66 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package currency + +import ( + "time" + + "golang.org/x/text/language" +) + +// This file contains code common to gen.go and the package code. + +const ( + cashShift = 3 + roundMask = 0x7 + + nonTenderBit = 0x8000 +) + +// currencyInfo contains information about a currency. +// bits 0..2: index into roundings for standard rounding +// bits 3..5: index into roundings for cash rounding +type currencyInfo byte + +// roundingType defines the scale (number of fractional decimals) and increments +// in terms of units of size 10^-scale. For example, for scale == 2 and +// increment == 1, the currency is rounded to units of 0.01. +type roundingType struct { + scale, increment uint8 +} + +// roundings contains rounding data for currencies. This struct is +// created by hand as it is very unlikely to change much. +var roundings = [...]roundingType{ + {2, 1}, // default + {0, 1}, + {1, 1}, + {3, 1}, + {4, 1}, + {2, 5}, // cash rounding alternative +} + +// regionToCode returns a 16-bit region code. Only two-letter codes are +// supported. (Three-letter codes are not needed.) +func regionToCode(r language.Region) uint16 { + if s := r.String(); len(s) == 2 { + return uint16(s[0])<<8 | uint16(s[1]) + } + return 0 +} + +func toDate(t time.Time) uint32 { + y := t.Year() + if y == 1 { + return 0 + } + date := uint32(y) << 4 + date |= uint32(t.Month()) + date <<= 5 + date |= uint32(t.Day()) + return date +} + +func fromDate(date uint32) time.Time { + return time.Date(int(date>>9), time.Month((date>>5)&0xf), int(date&0x1f), 0, 0, 0, 0, time.UTC) +} diff --git a/vendor/golang.org/x/text/currency/currency.go b/vendor/golang.org/x/text/currency/currency.go new file mode 100644 index 0000000..598ddef --- /dev/null +++ b/vendor/golang.org/x/text/currency/currency.go @@ -0,0 +1,185 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go gen_common.go -output tables.go + +// Package currency contains currency-related functionality. +// +// NOTE: the formatting functionality is currently under development and may +// change without notice. +package currency // import "golang.org/x/text/currency" + +import ( + "errors" + "sort" + + "golang.org/x/text/internal/tag" + "golang.org/x/text/language" +) + +// TODO: +// - language-specific currency names. +// - currency formatting. +// - currency information per region +// - register currency code (there are no private use area) + +// TODO: remove Currency type from package language. + +// Kind determines the rounding and rendering properties of a currency value. +type Kind struct { + rounding rounding + // TODO: formatting type: standard, accounting. See CLDR. +} + +type rounding byte + +const ( + standard rounding = iota + cash +) + +var ( + // Standard defines standard rounding and formatting for currencies. + Standard Kind = Kind{rounding: standard} + + // Cash defines rounding and formatting standards for cash transactions. + Cash Kind = Kind{rounding: cash} + + // Accounting defines rounding and formatting standards for accounting. + Accounting Kind = Kind{rounding: standard} +) + +// Rounding reports the rounding characteristics for the given currency, where +// scale is the number of fractional decimals and increment is the number of +// units in terms of 10^(-scale) to which to round to. +func (k Kind) Rounding(cur Unit) (scale, increment int) { + info := currency.Elem(int(cur.index))[3] + switch k.rounding { + case standard: + info &= roundMask + case cash: + info >>= cashShift + } + return int(roundings[info].scale), int(roundings[info].increment) +} + +// Unit is an ISO 4217 currency designator. +type Unit struct { + index uint16 +} + +// String returns the ISO code of u. +func (u Unit) String() string { + if u.index == 0 { + return "XXX" + } + return currency.Elem(int(u.index))[:3] +} + +// Amount creates an Amount for the given currency unit and amount. +func (u Unit) Amount(amount interface{}) Amount { + // TODO: verify amount is a supported number type + return Amount{amount: amount, currency: u} +} + +var ( + errSyntax = errors.New("currency: tag is not well-formed") + errValue = errors.New("currency: tag is not a recognized currency") +) + +// ParseISO parses a 3-letter ISO 4217 currency code. It returns an error if s +// is not well-formed or not a recognized currency code. +func ParseISO(s string) (Unit, error) { + var buf [4]byte // Take one byte more to detect oversize keys. + key := buf[:copy(buf[:], s)] + if !tag.FixCase("XXX", key) { + return Unit{}, errSyntax + } + if i := currency.Index(key); i >= 0 { + if i == xxx { + return Unit{}, nil + } + return Unit{uint16(i)}, nil + } + return Unit{}, errValue +} + +// MustParseISO is like ParseISO, but panics if the given currency unit +// cannot be parsed. It simplifies safe initialization of Unit values. +func MustParseISO(s string) Unit { + c, err := ParseISO(s) + if err != nil { + panic(err) + } + return c +} + +// FromRegion reports the currency unit that is currently legal tender in the +// given region according to CLDR. It will return false if region currently does +// not have a legal tender. +func FromRegion(r language.Region) (currency Unit, ok bool) { + x := regionToCode(r) + i := sort.Search(len(regionToCurrency), func(i int) bool { + return regionToCurrency[i].region >= x + }) + if i < len(regionToCurrency) && regionToCurrency[i].region == x { + return Unit{regionToCurrency[i].code}, true + } + return Unit{}, false +} + +// FromTag reports the most likely currency for the given tag. It considers the +// currency defined in the -u extension and infers the region if necessary. +func FromTag(t language.Tag) (Unit, language.Confidence) { + if cur := t.TypeForKey("cu"); len(cur) == 3 { + c, _ := ParseISO(cur) + return c, language.Exact + } + r, conf := t.Region() + if cur, ok := FromRegion(r); ok { + return cur, conf + } + return Unit{}, language.No +} + +var ( + // Undefined and testing. + XXX Unit = Unit{} + XTS Unit = Unit{xts} + + // G10 currencies https://en.wikipedia.org/wiki/G10_currencies. + USD Unit = Unit{usd} + EUR Unit = Unit{eur} + JPY Unit = Unit{jpy} + GBP Unit = Unit{gbp} + CHF Unit = Unit{chf} + AUD Unit = Unit{aud} + NZD Unit = Unit{nzd} + CAD Unit = Unit{cad} + SEK Unit = Unit{sek} + NOK Unit = Unit{nok} + + // Additional common currencies as defined by CLDR. + BRL Unit = Unit{brl} + CNY Unit = Unit{cny} + DKK Unit = Unit{dkk} + INR Unit = Unit{inr} + RUB Unit = Unit{rub} + HKD Unit = Unit{hkd} + IDR Unit = Unit{idr} + KRW Unit = Unit{krw} + MXN Unit = Unit{mxn} + PLN Unit = Unit{pln} + SAR Unit = Unit{sar} + THB Unit = Unit{thb} + TRY Unit = Unit{try} + TWD Unit = Unit{twd} + ZAR Unit = Unit{zar} + + // Precious metals. + XAG Unit = Unit{xag} + XAU Unit = Unit{xau} + XPT Unit = Unit{xpt} + XPD Unit = Unit{xpd} +) diff --git a/vendor/golang.org/x/text/currency/currency_test.go b/vendor/golang.org/x/text/currency/currency_test.go new file mode 100644 index 0000000..566a167 --- /dev/null +++ b/vendor/golang.org/x/text/currency/currency_test.go @@ -0,0 +1,171 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package currency + +import ( + "fmt" + "testing" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" +) + +var ( + cup = MustParseISO("CUP") + czk = MustParseISO("CZK") + xcd = MustParseISO("XCD") + zwr = MustParseISO("ZWR") +) + +func TestParseISO(t *testing.T) { + testCases := []struct { + in string + out Unit + ok bool + }{ + {"USD", USD, true}, + {"xxx", XXX, true}, + {"xts", XTS, true}, + {"XX", XXX, false}, + {"XXXX", XXX, false}, + {"", XXX, false}, // not well-formed + {"UUU", XXX, false}, // unknown + {"\u22A9", XXX, false}, // non-ASCII, printable + + {"aaa", XXX, false}, + {"zzz", XXX, false}, + {"000", XXX, false}, + {"999", XXX, false}, + {"---", XXX, false}, + {"\x00\x00\x00", XXX, false}, + {"\xff\xff\xff", XXX, false}, + } + for i, tc := range testCases { + if x, err := ParseISO(tc.in); x != tc.out || err == nil != tc.ok { + t.Errorf("%d:%s: was %s, %v; want %s, %v", i, tc.in, x, err == nil, tc.out, tc.ok) + } + } +} + +func TestFromRegion(t *testing.T) { + testCases := []struct { + region string + currency Unit + ok bool + }{ + {"NL", EUR, true}, + {"BE", EUR, true}, + {"AG", xcd, true}, + {"CH", CHF, true}, + {"CU", cup, true}, // first of multiple + {"DG", USD, true}, // does not have M49 code + {"150", XXX, false}, // implicit false + {"CP", XXX, false}, // explicit false in CLDR + {"CS", XXX, false}, // all expired + {"ZZ", XXX, false}, // none match + } + for _, tc := range testCases { + cur, ok := FromRegion(language.MustParseRegion(tc.region)) + if cur != tc.currency || ok != tc.ok { + t.Errorf("%s: got %v, %v; want %v, %v", tc.region, cur, ok, tc.currency, tc.ok) + } + } +} + +func TestFromTag(t *testing.T) { + testCases := []struct { + tag string + currency Unit + conf language.Confidence + }{ + {"nl", EUR, language.Low}, // nl also spoken outside Euro land. + {"nl-BE", EUR, language.Exact}, // region is known + {"pt", BRL, language.Low}, + {"en", USD, language.Low}, + {"en-u-cu-eur", EUR, language.Exact}, + {"tlh", XXX, language.No}, // Klingon has no country. + {"es-419", XXX, language.No}, + {"und", USD, language.Low}, + } + for _, tc := range testCases { + cur, conf := FromTag(language.MustParse(tc.tag)) + if cur != tc.currency || conf != tc.conf { + t.Errorf("%s: got %v, %v; want %v, %v", tc.tag, cur, conf, tc.currency, tc.conf) + } + } +} + +func TestTable(t *testing.T) { + for i := 4; i < len(currency); i += 4 { + if a, b := currency[i-4:i-1], currency[i:i+3]; a >= b { + t.Errorf("currency unordered at element %d: %s >= %s", i, a, b) + } + } + // First currency has index 1, last is numCurrencies. + if c := currency.Elem(1)[:3]; c != "ADP" { + t.Errorf("first was %c; want ADP", c) + } + if c := currency.Elem(numCurrencies)[:3]; c != "ZWR" { + t.Errorf("last was %c; want ZWR", c) + } +} + +func TestKindRounding(t *testing.T) { + testCases := []struct { + kind Kind + cur Unit + scale int + inc int + }{ + {Standard, USD, 2, 1}, + {Standard, CHF, 2, 1}, + {Cash, CHF, 2, 5}, + {Standard, TWD, 2, 1}, + {Cash, TWD, 0, 1}, + {Standard, czk, 2, 1}, + {Cash, czk, 0, 1}, + {Standard, zwr, 2, 1}, + {Cash, zwr, 0, 1}, + {Standard, KRW, 0, 1}, + {Cash, KRW, 0, 1}, // Cash defaults to standard. + } + for i, tc := range testCases { + if scale, inc := tc.kind.Rounding(tc.cur); scale != tc.scale && inc != tc.inc { + t.Errorf("%d: got %d, %d; want %d, %d", i, scale, inc, tc.scale, tc.inc) + } + } +} + +const body = `package main +import ( + "fmt" + "golang.org/x/text/currency" +) +func main() { + %s +} +` + +func TestLinking(t *testing.T) { + base := getSize(t, `fmt.Print(currency.CLDRVersion)`) + symbols := getSize(t, `fmt.Print(currency.Symbol(currency.USD))`) + if d := symbols - base; d < 2*1024 { + t.Errorf("size(symbols)-size(base) was %d; want > 2K", d) + } +} + +func getSize(t *testing.T, main string) int { + size, err := testtext.CodeSize(fmt.Sprintf(body, main)) + if err != nil { + t.Skipf("skipping link size test; binary size could not be determined: %v", err) + } + return size +} + +func BenchmarkString(b *testing.B) { + for i := 0; i < b.N; i++ { + USD.String() + } +} diff --git a/vendor/golang.org/x/text/currency/example_test.go b/vendor/golang.org/x/text/currency/example_test.go new file mode 100644 index 0000000..f7984aa --- /dev/null +++ b/vendor/golang.org/x/text/currency/example_test.go @@ -0,0 +1,27 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package currency_test + +import ( + "fmt" + "time" + + "golang.org/x/text/currency" +) + +func ExampleQuery() { + t1799, _ := time.Parse("2006-01-02", "1799-01-01") + for it := currency.Query(currency.Date(t1799)); it.Next(); { + from := "" + if t, ok := it.From(); ok { + from = t.Format("2006-01-01") + } + fmt.Printf("%v is used in %v since: %v\n", it.Unit(), it.Region(), from) + } + // Output: + // GBP is used in GB since: 1694-07-07 + // GIP is used in GI since: 1713-01-01 + // USD is used in US since: 1792-01-01 +} diff --git a/vendor/golang.org/x/text/currency/format.go b/vendor/golang.org/x/text/currency/format.go new file mode 100644 index 0000000..97ce2d9 --- /dev/null +++ b/vendor/golang.org/x/text/currency/format.go @@ -0,0 +1,215 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package currency + +import ( + "fmt" + "io" + "sort" + + "golang.org/x/text/internal" + "golang.org/x/text/internal/format" + "golang.org/x/text/language" +) + +// Amount is an amount-currency unit pair. +type Amount struct { + amount interface{} // Change to decimal(64|128). + currency Unit +} + +// Currency reports the currency unit of this amount. +func (a Amount) Currency() Unit { return a.currency } + +// TODO: based on decimal type, but may make sense to customize a bit. +// func (a Amount) Decimal() +// func (a Amount) Int() (int64, error) +// func (a Amount) Fraction() (int64, error) +// func (a Amount) Rat() *big.Rat +// func (a Amount) Float() (float64, error) +// func (a Amount) Scale() uint +// func (a Amount) Precision() uint +// func (a Amount) Sign() int +// +// Add/Sub/Div/Mul/Round. + +var space = []byte(" ") + +// Format implements fmt.Formatter. It accepts format.State for +// language-specific rendering. +func (a Amount) Format(s fmt.State, verb rune) { + v := formattedValue{ + currency: a.currency, + amount: a.amount, + format: defaultFormat, + } + v.Format(s, verb) +} + +// formattedValue is currency amount or unit that implements language-sensitive +// formatting. +type formattedValue struct { + currency Unit + amount interface{} // Amount, Unit, or number. + format *options +} + +// Format implements fmt.Formatter. It accepts format.State for +// language-specific rendering. +func (v formattedValue) Format(s fmt.State, verb rune) { + var lang int + if state, ok := s.(format.State); ok { + lang, _ = language.CompactIndex(state.Language()) + } + + // Get the options. Use DefaultFormat if not present. + opt := v.format + if opt == nil { + opt = defaultFormat + } + cur := v.currency + if cur.index == 0 { + cur = opt.currency + } + + // TODO: use pattern. + io.WriteString(s, opt.symbol(lang, cur)) + if v.amount != nil { + s.Write(space) + + // TODO: apply currency-specific rounding + scale, _ := opt.kind.Rounding(cur) + if _, ok := s.Precision(); !ok { + fmt.Fprintf(s, "%.*f", scale, v.amount) + } else { + fmt.Fprint(s, v.amount) + } + } +} + +// Formatter decorates a given number, Unit or Amount with formatting options. +type Formatter func(amount interface{}) formattedValue + +// func (f Formatter) Options(opts ...Option) Formatter + +// TODO: call this a Formatter or FormatFunc? + +var dummy = USD.Amount(0) + +// adjust creates a new Formatter based on the adjustments of fn on f. +func (f Formatter) adjust(fn func(*options)) Formatter { + var o options = *(f(dummy).format) + fn(&o) + return o.format +} + +// Default creates a new Formatter that defaults to currency unit c if a numeric +// value is passed that is not associated with a currency. +func (f Formatter) Default(currency Unit) Formatter { + return f.adjust(func(o *options) { o.currency = currency }) +} + +// Kind sets the kind of the underlying currency unit. +func (f Formatter) Kind(k Kind) Formatter { + return f.adjust(func(o *options) { o.kind = k }) +} + +var defaultFormat *options = ISO(dummy).format + +var ( + // Uses Narrow symbols. Overrides Symbol, if present. + NarrowSymbol Formatter = Formatter(formNarrow) + + // Use Symbols instead of ISO codes, when available. + Symbol Formatter = Formatter(formSymbol) + + // Use ISO code as symbol. + ISO Formatter = Formatter(formISO) + + // TODO: + // // Use full name as symbol. + // Name Formatter +) + +// options configures rendering and rounding options for an Amount. +type options struct { + currency Unit + kind Kind + + symbol func(compactIndex int, c Unit) string +} + +func (o *options) format(amount interface{}) formattedValue { + v := formattedValue{format: o} + switch x := amount.(type) { + case Amount: + v.amount = x.amount + v.currency = x.currency + case *Amount: + v.amount = x.amount + v.currency = x.currency + case Unit: + v.currency = x + case *Unit: + v.currency = *x + default: + if o.currency.index == 0 { + panic("cannot format number without a currency being set") + } + // TODO: Must be a number. + v.amount = x + v.currency = o.currency + } + return v +} + +var ( + optISO = options{symbol: lookupISO} + optSymbol = options{symbol: lookupSymbol} + optNarrow = options{symbol: lookupNarrow} +) + +// These need to be functions, rather than curried methods, as curried methods +// are evaluated at init time, causing tables to be included unconditionally. +func formISO(x interface{}) formattedValue { return optISO.format(x) } +func formSymbol(x interface{}) formattedValue { return optSymbol.format(x) } +func formNarrow(x interface{}) formattedValue { return optNarrow.format(x) } + +func lookupISO(x int, c Unit) string { return c.String() } +func lookupSymbol(x int, c Unit) string { return normalSymbol.lookup(x, c) } +func lookupNarrow(x int, c Unit) string { return narrowSymbol.lookup(x, c) } + +type symbolIndex struct { + index []uint16 // position corresponds with compact index of language. + data []curToIndex +} + +var ( + normalSymbol = symbolIndex{normalLangIndex, normalSymIndex} + narrowSymbol = symbolIndex{narrowLangIndex, narrowSymIndex} +) + +func (x *symbolIndex) lookup(lang int, c Unit) string { + for { + index := x.data[x.index[lang]:x.index[lang+1]] + i := sort.Search(len(index), func(i int) bool { + return index[i].cur >= c.index + }) + if i < len(index) && index[i].cur == c.index { + x := index[i].idx + start := x + 1 + end := start + uint16(symbols[x]) + if start == end { + return c.String() + } + return symbols[start:end] + } + if lang == 0 { + break + } + lang = int(internal.Parent[lang]) + } + return c.String() +} diff --git a/vendor/golang.org/x/text/currency/format_test.go b/vendor/golang.org/x/text/currency/format_test.go new file mode 100644 index 0000000..0aa0d58 --- /dev/null +++ b/vendor/golang.org/x/text/currency/format_test.go @@ -0,0 +1,70 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package currency + +import ( + "testing" + + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +var ( + en = language.English + fr = language.French + en_US = language.AmericanEnglish + en_GB = language.BritishEnglish + en_AU = language.MustParse("en-AU") + und = language.Und +) + +func TestFormatting(t *testing.T) { + testCases := []struct { + tag language.Tag + value interface{} + format Formatter + want string + }{ + 0: {en, USD.Amount(0.1), nil, "USD 0.10"}, + 1: {en, XPT.Amount(1.0), Symbol, "XPT 1.00"}, + + 2: {en, USD.Amount(2.0), ISO, "USD 2.00"}, + 3: {und, USD.Amount(3.0), Symbol, "US$ 3.00"}, + 4: {en, USD.Amount(4.0), Symbol, "$ 4.00"}, + + 5: {en, USD.Amount(5.20), NarrowSymbol, "$ 5.20"}, + 6: {en, AUD.Amount(6.20), Symbol, "A$ 6.20"}, + + 7: {en_AU, AUD.Amount(7.20), Symbol, "$ 7.20"}, + 8: {en_GB, USD.Amount(8.20), Symbol, "US$ 8.20"}, + + 9: {en, 9.0, Symbol.Default(EUR), "€ 9.00"}, + 10: {en, 10.123, Symbol.Default(KRW), "₩ 10"}, + 11: {fr, 11.52, Symbol.Default(TWD), "TWD 11.52"}, + 12: {en, 12.123, Symbol.Default(czk), "CZK 12.12"}, + 13: {en, 13.123, Symbol.Default(czk).Kind(Cash), "CZK 13"}, + 14: {en, 14.12345, ISO.Default(MustParseISO("CLF")), "CLF 14.1235"}, + 15: {en, USD.Amount(15.00), ISO.Default(TWD), "USD 15.00"}, + 16: {en, KRW.Amount(16.00), ISO.Kind(Cash), "KRW 16"}, + + // TODO: support integers as well. + + 17: {en, USD, nil, "USD"}, + 18: {en, USD, ISO, "USD"}, + 19: {en, USD, Symbol, "$"}, + 20: {en_GB, USD, Symbol, "US$"}, + 21: {en_AU, USD, NarrowSymbol, "$"}, + } + for i, tc := range testCases { + p := message.NewPrinter(tc.tag) + v := tc.value + if tc.format != nil { + v = tc.format(v) + } + if got := p.Sprint(v); got != tc.want { + t.Errorf("%d: got %q; want %q", i, got, tc.want) + } + } +} diff --git a/vendor/golang.org/x/text/currency/gen.go b/vendor/golang.org/x/text/currency/gen.go new file mode 100644 index 0000000..0952d41 --- /dev/null +++ b/vendor/golang.org/x/text/currency/gen.go @@ -0,0 +1,400 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// Generator for currency-related data. + +package main + +import ( + "flag" + "fmt" + "log" + "os" + "sort" + "strconv" + "strings" + "time" + + "golang.org/x/text/internal" + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/tag" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", false, + "test existing tables; can be used to compare web data with package data.") + outputFile = flag.String("output", "tables.go", "output file") + + draft = flag.String("draft", + "contributed", + `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`) +) + +func main() { + gen.Init() + + gen.Repackage("gen_common.go", "common.go", "currency") + + // Read the CLDR zip file. + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + d.SetDirFilter("supplemental", "main") + d.SetSectionFilter("numbers") + data, err := d.DecodeZip(r) + if err != nil { + log.Fatalf("DecodeZip: %v", err) + } + + w := gen.NewCodeWriter() + defer w.WriteGoFile(*outputFile, "currency") + + fmt.Fprintln(w, `import "golang.org/x/text/internal/tag"`) + + gen.WriteCLDRVersion(w) + b := &builder{} + b.genCurrencies(w, data.Supplemental()) + b.genSymbols(w, data) +} + +var constants = []string{ + // Undefined and testing. + "XXX", "XTS", + // G11 currencies https://en.wikipedia.org/wiki/G10_currencies. + "USD", "EUR", "JPY", "GBP", "CHF", "AUD", "NZD", "CAD", "SEK", "NOK", "DKK", + // Precious metals. + "XAG", "XAU", "XPT", "XPD", + + // Additional common currencies as defined by CLDR. + "BRL", "CNY", "INR", "RUB", "HKD", "IDR", "KRW", "MXN", "PLN", "SAR", + "THB", "TRY", "TWD", "ZAR", +} + +type builder struct { + currencies tag.Index + numCurrencies int +} + +func (b *builder) genCurrencies(w *gen.CodeWriter, data *cldr.SupplementalData) { + // 3-letter ISO currency codes + // Start with dummy to let index start at 1. + currencies := []string{"\x00\x00\x00\x00"} + + // currency codes + for _, reg := range data.CurrencyData.Region { + for _, cur := range reg.Currency { + currencies = append(currencies, cur.Iso4217) + } + } + // Not included in the list for some reasons: + currencies = append(currencies, "MVP") + + sort.Strings(currencies) + // Unique the elements. + k := 0 + for i := 1; i < len(currencies); i++ { + if currencies[k] != currencies[i] { + currencies[k+1] = currencies[i] + k++ + } + } + currencies = currencies[:k+1] + + // Close with dummy for simpler and faster searching. + currencies = append(currencies, "\xff\xff\xff\xff") + + // Write currency values. + fmt.Fprintln(w, "const (") + for _, c := range constants { + index := sort.SearchStrings(currencies, c) + fmt.Fprintf(w, "\t%s = %d\n", strings.ToLower(c), index) + } + fmt.Fprint(w, ")") + + // Compute currency-related data that we merge into the table. + for _, info := range data.CurrencyData.Fractions[0].Info { + if info.Iso4217 == "DEFAULT" { + continue + } + standard := getRoundingIndex(info.Digits, info.Rounding, 0) + cash := getRoundingIndex(info.CashDigits, info.CashRounding, standard) + + index := sort.SearchStrings(currencies, info.Iso4217) + currencies[index] += mkCurrencyInfo(standard, cash) + } + + // Set default values for entries that weren't touched. + for i, c := range currencies { + if len(c) == 3 { + currencies[i] += mkCurrencyInfo(0, 0) + } + } + + b.currencies = tag.Index(strings.Join(currencies, "")) + w.WriteComment(` + currency holds an alphabetically sorted list of canonical 3-letter currency + identifiers. Each identifier is followed by a byte of type currencyInfo, + defined in gen_common.go.`) + w.WriteConst("currency", b.currencies) + + // Hack alert: gofmt indents a trailing comment after an indented string. + // Ensure that the next thing written is not a comment. + b.numCurrencies = (len(b.currencies) / 4) - 2 + w.WriteConst("numCurrencies", b.numCurrencies) + + // Create a table that maps regions to currencies. + regionToCurrency := []toCurrency{} + + for _, reg := range data.CurrencyData.Region { + if len(reg.Iso3166) != 2 { + log.Fatalf("Unexpected group %q in region data", reg.Iso3166) + } + if len(reg.Currency) == 0 { + continue + } + cur := reg.Currency[0] + if cur.To != "" || cur.Tender == "false" { + continue + } + regionToCurrency = append(regionToCurrency, toCurrency{ + region: regionToCode(language.MustParseRegion(reg.Iso3166)), + code: uint16(b.currencies.Index([]byte(cur.Iso4217))), + }) + } + sort.Sort(byRegion(regionToCurrency)) + + w.WriteType(toCurrency{}) + w.WriteVar("regionToCurrency", regionToCurrency) + + // Create a table that maps regions to currencies. + regionData := []regionInfo{} + + for _, reg := range data.CurrencyData.Region { + if len(reg.Iso3166) != 2 { + log.Fatalf("Unexpected group %q in region data", reg.Iso3166) + } + for _, cur := range reg.Currency { + from, _ := time.Parse("2006-01-02", cur.From) + to, _ := time.Parse("2006-01-02", cur.To) + code := uint16(b.currencies.Index([]byte(cur.Iso4217))) + if cur.Tender == "false" { + code |= nonTenderBit + } + regionData = append(regionData, regionInfo{ + region: regionToCode(language.MustParseRegion(reg.Iso3166)), + code: code, + from: toDate(from), + to: toDate(to), + }) + } + } + sort.Stable(byRegionCode(regionData)) + + w.WriteType(regionInfo{}) + w.WriteVar("regionData", regionData) +} + +type regionInfo struct { + region uint16 + code uint16 // 0x8000 not legal tender + from uint32 + to uint32 +} + +type byRegionCode []regionInfo + +func (a byRegionCode) Len() int { return len(a) } +func (a byRegionCode) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byRegionCode) Less(i, j int) bool { return a[i].region < a[j].region } + +type toCurrency struct { + region uint16 + code uint16 +} + +type byRegion []toCurrency + +func (a byRegion) Len() int { return len(a) } +func (a byRegion) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byRegion) Less(i, j int) bool { return a[i].region < a[j].region } + +func mkCurrencyInfo(standard, cash int) string { + return string([]byte{byte(cash<<cashShift | standard)}) +} + +func getRoundingIndex(digits, rounding string, defIndex int) int { + round := roundings[defIndex] // default + + if digits != "" { + round.scale = parseUint8(digits) + } + if rounding != "" && rounding != "0" { // 0 means 1 here in CLDR + round.increment = parseUint8(rounding) + } + + // Will panic if the entry doesn't exist: + for i, r := range roundings { + if r == round { + return i + } + } + log.Fatalf("Rounding entry %#v does not exist.", round) + panic("unreachable") +} + +// genSymbols generates the symbols used for currencies. Most symbols are +// defined in root and there is only very small variation per language. +// The following rules apply: +// - A symbol can be requested as normal or narrow. +// - If a symbol is not defined for a currency, it defaults to its ISO code. +func (b *builder) genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { + d, err := cldr.ParseDraft(*draft) + if err != nil { + log.Fatalf("filter: %v", err) + } + + const ( + normal = iota + narrow + numTypes + ) + // language -> currency -> type -> symbol + var symbols [language.NumCompactTags][][numTypes]*string + + // Collect symbol information per language. + for _, lang := range data.Locales() { + ldml := data.RawLDML(lang) + if ldml.Numbers == nil || ldml.Numbers.Currencies == nil { + continue + } + + langIndex, ok := language.CompactIndex(language.MustParse(lang)) + if !ok { + log.Fatalf("No compact index for language %s", lang) + } + + symbols[langIndex] = make([][numTypes]*string, b.numCurrencies+1) + + for _, c := range ldml.Numbers.Currencies.Currency { + syms := cldr.MakeSlice(&c.Symbol) + syms.SelectDraft(d) + + for _, sym := range c.Symbol { + v := sym.Data() + if v == c.Type { + // We define "" to mean the ISO symbol. + v = "" + } + cur := b.currencies.Index([]byte(c.Type)) + // XXX gets reassigned to 0 in the package's code. + if c.Type == "XXX" { + cur = 0 + } + if cur == -1 { + fmt.Println("Unsupported:", c.Type) + continue + } + + switch sym.Alt { + case "": + symbols[langIndex][cur][normal] = &v + case "narrow": + symbols[langIndex][cur][narrow] = &v + } + } + } + } + + // Remove values identical to the parent. + for langIndex, data := range symbols { + for curIndex, curs := range data { + for typ, sym := range curs { + if sym == nil { + continue + } + for p := uint16(langIndex); p != 0; { + p = internal.Parent[p] + x := symbols[p] + if x == nil { + continue + } + if v := x[curIndex][typ]; v != nil || p == 0 { + // Value is equal to the default value root value is undefined. + parentSym := "" + if v != nil { + parentSym = *v + } + if parentSym == *sym { + // Value is the same as parent. + data[curIndex][typ] = nil + } + break + } + } + } + } + } + + // Create symbol index. + symbolData := []byte{0} + symbolLookup := map[string]uint16{"": 0} // 0 means default, so block that value. + for _, data := range symbols { + for _, curs := range data { + for _, sym := range curs { + if sym == nil { + continue + } + if _, ok := symbolLookup[*sym]; !ok { + symbolLookup[*sym] = uint16(len(symbolData)) + symbolData = append(symbolData, byte(len(*sym))) + symbolData = append(symbolData, *sym...) + } + } + } + } + w.WriteComment(` + symbols holds symbol data of the form <n> <str>, where n is the length of + the symbol string str.`) + w.WriteConst("symbols", string(symbolData)) + + // Create index from language to currency lookup to symbol. + type curToIndex struct{ cur, idx uint16 } + w.WriteType(curToIndex{}) + + prefix := []string{"normal", "narrow"} + // Create data for regular and narrow symbol data. + for typ := normal; typ <= narrow; typ++ { + + indexes := []curToIndex{} // maps currency to symbol index + languages := []uint16{} + + for _, data := range symbols { + languages = append(languages, uint16(len(indexes))) + for curIndex, curs := range data { + + if sym := curs[typ]; sym != nil { + indexes = append(indexes, curToIndex{uint16(curIndex), symbolLookup[*sym]}) + } + } + } + languages = append(languages, uint16(len(indexes))) + + w.WriteVar(prefix[typ]+"LangIndex", languages) + w.WriteVar(prefix[typ]+"SymIndex", indexes) + } +} +func parseUint8(str string) uint8 { + x, err := strconv.ParseUint(str, 10, 8) + if err != nil { + // Show line number of where this function was called. + log.New(os.Stderr, "", log.Lshortfile).Output(2, err.Error()) + os.Exit(1) + } + return uint8(x) +} diff --git a/vendor/golang.org/x/text/currency/gen_common.go b/vendor/golang.org/x/text/currency/gen_common.go new file mode 100644 index 0000000..e6748da --- /dev/null +++ b/vendor/golang.org/x/text/currency/gen_common.go @@ -0,0 +1,70 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "time" + + "golang.org/x/text/language" +) + +// This file contains code common to gen.go and the package code. + +const ( + cashShift = 3 + roundMask = 0x7 + + nonTenderBit = 0x8000 +) + +// currencyInfo contains information about a currency. +// bits 0..2: index into roundings for standard rounding +// bits 3..5: index into roundings for cash rounding +type currencyInfo byte + +// roundingType defines the scale (number of fractional decimals) and increments +// in terms of units of size 10^-scale. For example, for scale == 2 and +// increment == 1, the currency is rounded to units of 0.01. +type roundingType struct { + scale, increment uint8 +} + +// roundings contains rounding data for currencies. This struct is +// created by hand as it is very unlikely to change much. +var roundings = [...]roundingType{ + {2, 1}, // default + {0, 1}, + {1, 1}, + {3, 1}, + {4, 1}, + {2, 5}, // cash rounding alternative +} + +// regionToCode returns a 16-bit region code. Only two-letter codes are +// supported. (Three-letter codes are not needed.) +func regionToCode(r language.Region) uint16 { + if s := r.String(); len(s) == 2 { + return uint16(s[0])<<8 | uint16(s[1]) + } + return 0 +} + +func toDate(t time.Time) uint32 { + y := t.Year() + if y == 1 { + return 0 + } + date := uint32(y) << 4 + date |= uint32(t.Month()) + date <<= 5 + date |= uint32(t.Day()) + return date +} + +func fromDate(date uint32) time.Time { + return time.Date(int(date>>9), time.Month((date>>5)&0xf), int(date&0x1f), 0, 0, 0, 0, time.UTC) +} diff --git a/vendor/golang.org/x/text/currency/query.go b/vendor/golang.org/x/text/currency/query.go new file mode 100644 index 0000000..7bf9430 --- /dev/null +++ b/vendor/golang.org/x/text/currency/query.go @@ -0,0 +1,152 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package currency + +import ( + "sort" + "time" + + "golang.org/x/text/language" +) + +// QueryIter represents a set of Units. The default set includes all Units that +// are currently in use as legal tender in any Region. +type QueryIter interface { + // Next returns true if there is a next element available. + // It must be called before any of the other methods are called. + Next() bool + + // Unit returns the unit of the current iteration. + Unit() Unit + + // Region returns the Region for the current iteration. + Region() language.Region + + // From returns the date from which the unit was used in the region. + // It returns false if this date is unknown. + From() (time.Time, bool) + + // To returns the date up till which the unit was used in the region. + // It returns false if this date is unknown or if the unit is still in use. + To() (time.Time, bool) + + // IsTender reports whether the unit is a legal tender in the region during + // the specified date range. + IsTender() bool +} + +// Query represents a set of Units. The default set includes all Units that are +// currently in use as legal tender in any Region. +func Query(options ...QueryOption) QueryIter { + it := &iter{ + end: len(regionData), + date: 0xFFFFFFFF, + } + for _, fn := range options { + fn(it) + } + return it +} + +// NonTender returns a new query that also includes matching Units that are not +// legal tender. +var NonTender QueryOption = nonTender + +func nonTender(i *iter) { + i.nonTender = true +} + +// Historical selects the units for all dates. +var Historical QueryOption = historical + +func historical(i *iter) { + i.date = hist +} + +// A QueryOption can be used to change the set of unit information returned by +// a query. +type QueryOption func(*iter) + +// Date queries the units that were in use at the given point in history. +func Date(t time.Time) QueryOption { + d := toDate(t) + return func(i *iter) { + i.date = d + } +} + +// Region limits the query to only return entries for the given region. +func Region(r language.Region) QueryOption { + p, end := len(regionData), len(regionData) + x := regionToCode(r) + i := sort.Search(len(regionData), func(i int) bool { + return regionData[i].region >= x + }) + if i < len(regionData) && regionData[i].region == x { + p = i + for i++; i < len(regionData) && regionData[i].region == x; i++ { + } + end = i + } + return func(i *iter) { + i.p, i.end = p, end + } +} + +const ( + hist = 0x00 + now = 0xFFFFFFFF +) + +type iter struct { + *regionInfo + p, end int + date uint32 + nonTender bool +} + +func (i *iter) Next() bool { + for ; i.p < i.end; i.p++ { + i.regionInfo = ®ionData[i.p] + if !i.nonTender && !i.IsTender() { + continue + } + if i.date == hist || (i.from <= i.date && (i.to == 0 || i.date <= i.to)) { + i.p++ + return true + } + } + return false +} + +func (r *regionInfo) Region() language.Region { + // TODO: this could be much faster. + var buf [2]byte + buf[0] = uint8(r.region >> 8) + buf[1] = uint8(r.region) + return language.MustParseRegion(string(buf[:])) +} + +func (r *regionInfo) Unit() Unit { + return Unit{r.code &^ nonTenderBit} +} + +func (r *regionInfo) IsTender() bool { + return r.code&nonTenderBit == 0 +} + +func (r *regionInfo) From() (time.Time, bool) { + if r.from == 0 { + return time.Time{}, false + } + return fromDate(r.from), true +} + +func (r *regionInfo) To() (time.Time, bool) { + if r.to == 0 { + return time.Time{}, false + } + return fromDate(r.to), true +} diff --git a/vendor/golang.org/x/text/currency/query_test.go b/vendor/golang.org/x/text/currency/query_test.go new file mode 100644 index 0000000..6caea9d --- /dev/null +++ b/vendor/golang.org/x/text/currency/query_test.go @@ -0,0 +1,107 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package currency + +import ( + "testing" + "time" + + "golang.org/x/text/language" +) + +func TestQuery(t *testing.T) { + r := func(region string) language.Region { + return language.MustParseRegion(region) + } + t1800, _ := time.Parse("2006-01-02", "1800-01-01") + type result struct { + region language.Region + unit Unit + isTender bool + from, to string + } + testCases := []struct { + name string + opts []QueryOption + results []result + }{{ + name: "XA", + opts: []QueryOption{Region(r("XA"))}, + results: []result{}, + }, { + name: "AC", + opts: []QueryOption{Region(r("AC"))}, + results: []result{ + {r("AC"), MustParseISO("SHP"), true, "1976-01-01", ""}, + }, + }, { + name: "US", + opts: []QueryOption{Region(r("US"))}, + results: []result{ + {r("US"), MustParseISO("USD"), true, "1792-01-01", ""}, + }, + }, { + name: "US-hist", + opts: []QueryOption{Region(r("US")), Historical}, + results: []result{ + {r("US"), MustParseISO("USD"), true, "1792-01-01", ""}, + }, + }, { + name: "US-non-tender", + opts: []QueryOption{Region(r("US")), NonTender}, + results: []result{ + {r("US"), MustParseISO("USD"), true, "1792-01-01", ""}, + {r("US"), MustParseISO("USN"), false, "", ""}, + }, + }, { + name: "US-historical+non-tender", + opts: []QueryOption{Region(r("US")), Historical, NonTender}, + results: []result{ + {r("US"), MustParseISO("USD"), true, "1792-01-01", ""}, + {r("US"), MustParseISO("USN"), false, "", ""}, + {r("US"), MustParseISO("USS"), false, "", "2014-03-01"}, + }, + }, { + name: "1800", + opts: []QueryOption{Date(t1800)}, + results: []result{ + {r("CH"), MustParseISO("CHF"), true, "1799-03-17", ""}, + {r("GB"), MustParseISO("GBP"), true, "1694-07-27", ""}, + {r("GI"), MustParseISO("GIP"), true, "1713-01-01", ""}, + // The date for IE and PR seem wrong, so these may be updated at + // some point causing the tests to fail. + {r("IE"), MustParseISO("GBP"), true, "1800-01-01", "1922-01-01"}, + {r("PR"), MustParseISO("ESP"), true, "1800-01-01", "1898-12-10"}, + {r("US"), MustParseISO("USD"), true, "1792-01-01", ""}, + }, + }} + for _, tc := range testCases { + n := 0 + for it := Query(tc.opts...); it.Next(); n++ { + if n < len(tc.results) { + got := result{ + it.Region(), + it.Unit(), + it.IsTender(), + getTime(it.From()), + getTime(it.To()), + } + if got != tc.results[n] { + t.Errorf("%s:%d: got %v; want %v", tc.name, n, got, tc.results[n]) + } + } + } + if n != len(tc.results) { + t.Errorf("%s: unexpected number of results: got %d; want %d", tc.name, n, len(tc.results)) + } + } +} + +func getTime(t time.Time, ok bool) string { + if !ok { + return "" + } + return t.Format("2006-01-02") +} diff --git a/vendor/golang.org/x/text/currency/tables.go b/vendor/golang.org/x/text/currency/tables.go new file mode 100644 index 0000000..a34c7cb --- /dev/null +++ b/vendor/golang.org/x/text/currency/tables.go @@ -0,0 +1,2573 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package currency + +import "golang.org/x/text/internal/tag" + +// CLDRVersion is the CLDR version from which the tables in this package are derived. +const CLDRVersion = "30" + +const ( + xxx = 283 + xts = 281 + usd = 250 + eur = 93 + jpy = 132 + gbp = 98 + chf = 61 + aud = 19 + nzd = 191 + cad = 58 + sek = 218 + nok = 189 + dkk = 81 + xag = 264 + xau = 265 + xpt = 278 + xpd = 276 + brl = 46 + cny = 67 + inr = 124 + rub = 209 + hkd = 113 + idr = 119 + krw = 140 + mxn = 177 + pln = 200 + sar = 212 + thb = 233 + try = 242 + twd = 244 + zar = 291 +) + +// currency holds an alphabetically sorted list of canonical 3-letter currency +// identifiers. Each identifier is followed by a byte of type currencyInfo, +// defined in gen_common.go. +const currency tag.Index = "" + // Size: 1200 bytes + "\x00\x00\x00\x00ADP\x09AED\x00AFA\x00AFN\x09ALK\x00ALL\x09AMD\x09ANG\x00" + + "AOA\x00AOK\x00AON\x00AOR\x00ARA\x00ARL\x00ARM\x00ARP\x00ARS\x00ATS\x00AU" + + "D\x00AWG\x00AZM\x00AZN\x00BAD\x00BAM\x00BAN\x00BBD\x00BDT\x00BEC\x00BEF" + + "\x00BEL\x00BGL\x00BGM\x00BGN\x00BGO\x00BHD\x1bBIF\x09BMD\x00BND\x00BOB" + + "\x00BOL\x00BOP\x00BOV\x00BRB\x00BRC\x00BRE\x00BRL\x00BRN\x00BRR\x00BRZ" + + "\x00BSD\x00BTN\x00BUK\x00BWP\x00BYB\x00BYN\x00BYR\x09BZD\x00CAD(CDF\x00C" + + "HE\x00CHF(CHW\x00CLE\x00CLF$CLP\x09CNX\x00CNY\x00COP\x09COU\x00CRC\x08CS" + + "D\x00CSK\x00CUC\x00CUP\x00CVE\x00CYP\x00CZK\x08DDM\x00DEM\x00DJF\x09DKK" + + "\x00DOP\x00DZD\x00ECS\x00ECV\x00EEK\x00EGP\x00ERN\x00ESA\x00ESB\x00ESP" + + "\x09ETB\x00EUR\x00FIM\x00FJD\x00FKP\x00FRF\x00GBP\x00GEK\x00GEL\x00GHC" + + "\x00GHS\x00GIP\x00GMD\x00GNF\x09GNS\x00GQE\x00GRD\x00GTQ\x00GWE\x00GWP" + + "\x00GYD\x09HKD\x00HNL\x00HRD\x00HRK\x00HTG\x00HUF\x08IDR\x09IEP\x00ILP" + + "\x00ILR\x00ILS\x00INR\x00IQD\x09IRR\x09ISJ\x00ISK\x09ITL\x09JMD\x00JOD" + + "\x1bJPY\x09KES\x00KGS\x00KHR\x00KMF\x09KPW\x09KRH\x00KRO\x00KRW\x09KWD" + + "\x1bKYD\x00KZT\x00LAK\x09LBP\x09LKR\x00LRD\x00LSL\x00LTL\x00LTT\x00LUC" + + "\x00LUF\x09LUL\x00LVL\x00LVR\x00LYD\x1bMAD\x00MAF\x00MCF\x00MDC\x00MDL" + + "\x00MGA\x09MGF\x09MKD\x00MKN\x00MLF\x00MMK\x09MNT\x09MOP\x00MRO\x09MTL" + + "\x00MTP\x00MUR\x09MVP\x00MVR\x00MWK\x00MXN\x00MXP\x00MXV\x00MYR\x00MZE" + + "\x00MZM\x00MZN\x00NAD\x00NGN\x00NIC\x00NIO\x00NLG\x00NOK\x00NPR\x00NZD" + + "\x00OMR\x1bPAB\x00PEI\x00PEN\x00PES\x00PGK\x00PHP\x00PKR\x09PLN\x00PLZ" + + "\x00PTE\x00PYG\x09QAR\x00RHD\x00ROL\x00RON\x00RSD\x09RUB\x00RUR\x00RWF" + + "\x09SAR\x00SBD\x00SCR\x00SDD\x00SDG\x00SDP\x00SEK\x00SGD\x00SHP\x00SIT" + + "\x00SKK\x00SLL\x09SOS\x09SRD\x00SRG\x00SSP\x00STD\x09SUR\x00SVC\x00SYP" + + "\x09SZL\x00THB\x00TJR\x00TJS\x00TMM\x09TMT\x00TND\x1bTOP\x00TPE\x00TRL" + + "\x09TRY\x00TTD\x00TWD\x08TZS\x09UAH\x00UAK\x00UGS\x00UGX\x09USD\x00USN" + + "\x00USS\x00UYI\x09UYP\x00UYU\x00UZS\x09VEB\x00VEF\x00VND\x09VNN\x00VUV" + + "\x09WST\x00XAF\x09XAG\x00XAU\x00XBA\x00XBB\x00XBC\x00XBD\x00XCD\x00XDR" + + "\x00XEU\x00XFO\x00XFU\x00XOF\x09XPD\x00XPF\x09XPT\x00XRE\x00XSU\x00XTS" + + "\x00XUA\x00XXX\x00YDD\x00YER\x09YUD\x00YUM\x00YUN\x00YUR\x00ZAL\x00ZAR" + + "\x00ZMK\x09ZMW\x00ZRN\x00ZRZ\x00ZWD\x09ZWL\x00ZWR\x00\xff\xff\xff\xff" + +const numCurrencies = 298 + +type toCurrency struct { + region uint16 + code uint16 +} + +var regionToCurrency = []toCurrency{ // 255 elements + 0: {region: 0x4143, code: 0xdc}, + 1: {region: 0x4144, code: 0x5d}, + 2: {region: 0x4145, code: 0x2}, + 3: {region: 0x4146, code: 0x4}, + 4: {region: 0x4147, code: 0x10e}, + 5: {region: 0x4149, code: 0x10e}, + 6: {region: 0x414c, code: 0x6}, + 7: {region: 0x414d, code: 0x7}, + 8: {region: 0x414f, code: 0x9}, + 9: {region: 0x4152, code: 0x11}, + 10: {region: 0x4153, code: 0xfa}, + 11: {region: 0x4154, code: 0x5d}, + 12: {region: 0x4155, code: 0x13}, + 13: {region: 0x4157, code: 0x14}, + 14: {region: 0x4158, code: 0x5d}, + 15: {region: 0x415a, code: 0x16}, + 16: {region: 0x4241, code: 0x18}, + 17: {region: 0x4242, code: 0x1a}, + 18: {region: 0x4244, code: 0x1b}, + 19: {region: 0x4245, code: 0x5d}, + 20: {region: 0x4246, code: 0x113}, + 21: {region: 0x4247, code: 0x21}, + 22: {region: 0x4248, code: 0x23}, + 23: {region: 0x4249, code: 0x24}, + 24: {region: 0x424a, code: 0x113}, + 25: {region: 0x424c, code: 0x5d}, + 26: {region: 0x424d, code: 0x25}, + 27: {region: 0x424e, code: 0x26}, + 28: {region: 0x424f, code: 0x27}, + 29: {region: 0x4251, code: 0xfa}, + 30: {region: 0x4252, code: 0x2e}, + 31: {region: 0x4253, code: 0x32}, + 32: {region: 0x4254, code: 0x33}, + 33: {region: 0x4256, code: 0xbd}, + 34: {region: 0x4257, code: 0x35}, + 35: {region: 0x4259, code: 0x37}, + 36: {region: 0x425a, code: 0x39}, + 37: {region: 0x4341, code: 0x3a}, + 38: {region: 0x4343, code: 0x13}, + 39: {region: 0x4344, code: 0x3b}, + 40: {region: 0x4346, code: 0x107}, + 41: {region: 0x4347, code: 0x107}, + 42: {region: 0x4348, code: 0x3d}, + 43: {region: 0x4349, code: 0x113}, + 44: {region: 0x434b, code: 0xbf}, + 45: {region: 0x434c, code: 0x41}, + 46: {region: 0x434d, code: 0x107}, + 47: {region: 0x434e, code: 0x43}, + 48: {region: 0x434f, code: 0x44}, + 49: {region: 0x4352, code: 0x46}, + 50: {region: 0x4355, code: 0x4a}, + 51: {region: 0x4356, code: 0x4b}, + 52: {region: 0x4357, code: 0x8}, + 53: {region: 0x4358, code: 0x13}, + 54: {region: 0x4359, code: 0x5d}, + 55: {region: 0x435a, code: 0x4d}, + 56: {region: 0x4445, code: 0x5d}, + 57: {region: 0x4447, code: 0xfa}, + 58: {region: 0x444a, code: 0x50}, + 59: {region: 0x444b, code: 0x51}, + 60: {region: 0x444d, code: 0x10e}, + 61: {region: 0x444f, code: 0x52}, + 62: {region: 0x445a, code: 0x53}, + 63: {region: 0x4541, code: 0x5d}, + 64: {region: 0x4543, code: 0xfa}, + 65: {region: 0x4545, code: 0x5d}, + 66: {region: 0x4547, code: 0x57}, + 67: {region: 0x4548, code: 0x9d}, + 68: {region: 0x4552, code: 0x58}, + 69: {region: 0x4553, code: 0x5d}, + 70: {region: 0x4554, code: 0x5c}, + 71: {region: 0x4555, code: 0x5d}, + 72: {region: 0x4649, code: 0x5d}, + 73: {region: 0x464a, code: 0x5f}, + 74: {region: 0x464b, code: 0x60}, + 75: {region: 0x464d, code: 0xfa}, + 76: {region: 0x464f, code: 0x51}, + 77: {region: 0x4652, code: 0x5d}, + 78: {region: 0x4741, code: 0x107}, + 79: {region: 0x4742, code: 0x62}, + 80: {region: 0x4744, code: 0x10e}, + 81: {region: 0x4745, code: 0x64}, + 82: {region: 0x4746, code: 0x5d}, + 83: {region: 0x4747, code: 0x62}, + 84: {region: 0x4748, code: 0x66}, + 85: {region: 0x4749, code: 0x67}, + 86: {region: 0x474c, code: 0x51}, + 87: {region: 0x474d, code: 0x68}, + 88: {region: 0x474e, code: 0x69}, + 89: {region: 0x4750, code: 0x5d}, + 90: {region: 0x4751, code: 0x107}, + 91: {region: 0x4752, code: 0x5d}, + 92: {region: 0x4753, code: 0x62}, + 93: {region: 0x4754, code: 0x6d}, + 94: {region: 0x4755, code: 0xfa}, + 95: {region: 0x4757, code: 0x113}, + 96: {region: 0x4759, code: 0x70}, + 97: {region: 0x484b, code: 0x71}, + 98: {region: 0x484d, code: 0x13}, + 99: {region: 0x484e, code: 0x72}, + 100: {region: 0x4852, code: 0x74}, + 101: {region: 0x4854, code: 0x75}, + 102: {region: 0x4855, code: 0x76}, + 103: {region: 0x4943, code: 0x5d}, + 104: {region: 0x4944, code: 0x77}, + 105: {region: 0x4945, code: 0x5d}, + 106: {region: 0x494c, code: 0x7b}, + 107: {region: 0x494d, code: 0x62}, + 108: {region: 0x494e, code: 0x7c}, + 109: {region: 0x494f, code: 0xfa}, + 110: {region: 0x4951, code: 0x7d}, + 111: {region: 0x4952, code: 0x7e}, + 112: {region: 0x4953, code: 0x80}, + 113: {region: 0x4954, code: 0x5d}, + 114: {region: 0x4a45, code: 0x62}, + 115: {region: 0x4a4d, code: 0x82}, + 116: {region: 0x4a4f, code: 0x83}, + 117: {region: 0x4a50, code: 0x84}, + 118: {region: 0x4b45, code: 0x85}, + 119: {region: 0x4b47, code: 0x86}, + 120: {region: 0x4b48, code: 0x87}, + 121: {region: 0x4b49, code: 0x13}, + 122: {region: 0x4b4d, code: 0x88}, + 123: {region: 0x4b4e, code: 0x10e}, + 124: {region: 0x4b50, code: 0x89}, + 125: {region: 0x4b52, code: 0x8c}, + 126: {region: 0x4b57, code: 0x8d}, + 127: {region: 0x4b59, code: 0x8e}, + 128: {region: 0x4b5a, code: 0x8f}, + 129: {region: 0x4c41, code: 0x90}, + 130: {region: 0x4c42, code: 0x91}, + 131: {region: 0x4c43, code: 0x10e}, + 132: {region: 0x4c49, code: 0x3d}, + 133: {region: 0x4c4b, code: 0x92}, + 134: {region: 0x4c52, code: 0x93}, + 135: {region: 0x4c53, code: 0x123}, + 136: {region: 0x4c54, code: 0x5d}, + 137: {region: 0x4c55, code: 0x5d}, + 138: {region: 0x4c56, code: 0x5d}, + 139: {region: 0x4c59, code: 0x9c}, + 140: {region: 0x4d41, code: 0x9d}, + 141: {region: 0x4d43, code: 0x5d}, + 142: {region: 0x4d44, code: 0xa1}, + 143: {region: 0x4d45, code: 0x5d}, + 144: {region: 0x4d46, code: 0x5d}, + 145: {region: 0x4d47, code: 0xa2}, + 146: {region: 0x4d48, code: 0xfa}, + 147: {region: 0x4d4b, code: 0xa4}, + 148: {region: 0x4d4c, code: 0x113}, + 149: {region: 0x4d4d, code: 0xa7}, + 150: {region: 0x4d4e, code: 0xa8}, + 151: {region: 0x4d4f, code: 0xa9}, + 152: {region: 0x4d50, code: 0xfa}, + 153: {region: 0x4d51, code: 0x5d}, + 154: {region: 0x4d52, code: 0xaa}, + 155: {region: 0x4d53, code: 0x10e}, + 156: {region: 0x4d54, code: 0x5d}, + 157: {region: 0x4d55, code: 0xad}, + 158: {region: 0x4d56, code: 0xaf}, + 159: {region: 0x4d57, code: 0xb0}, + 160: {region: 0x4d58, code: 0xb1}, + 161: {region: 0x4d59, code: 0xb4}, + 162: {region: 0x4d5a, code: 0xb7}, + 163: {region: 0x4e41, code: 0xb8}, + 164: {region: 0x4e43, code: 0x115}, + 165: {region: 0x4e45, code: 0x113}, + 166: {region: 0x4e46, code: 0x13}, + 167: {region: 0x4e47, code: 0xb9}, + 168: {region: 0x4e49, code: 0xbb}, + 169: {region: 0x4e4c, code: 0x5d}, + 170: {region: 0x4e4f, code: 0xbd}, + 171: {region: 0x4e50, code: 0xbe}, + 172: {region: 0x4e52, code: 0x13}, + 173: {region: 0x4e55, code: 0xbf}, + 174: {region: 0x4e5a, code: 0xbf}, + 175: {region: 0x4f4d, code: 0xc0}, + 176: {region: 0x5041, code: 0xc1}, + 177: {region: 0x5045, code: 0xc3}, + 178: {region: 0x5046, code: 0x115}, + 179: {region: 0x5047, code: 0xc5}, + 180: {region: 0x5048, code: 0xc6}, + 181: {region: 0x504b, code: 0xc7}, + 182: {region: 0x504c, code: 0xc8}, + 183: {region: 0x504d, code: 0x5d}, + 184: {region: 0x504e, code: 0xbf}, + 185: {region: 0x5052, code: 0xfa}, + 186: {region: 0x5053, code: 0x7b}, + 187: {region: 0x5054, code: 0x5d}, + 188: {region: 0x5057, code: 0xfa}, + 189: {region: 0x5059, code: 0xcb}, + 190: {region: 0x5141, code: 0xcc}, + 191: {region: 0x5245, code: 0x5d}, + 192: {region: 0x524f, code: 0xcf}, + 193: {region: 0x5253, code: 0xd0}, + 194: {region: 0x5255, code: 0xd1}, + 195: {region: 0x5257, code: 0xd3}, + 196: {region: 0x5341, code: 0xd4}, + 197: {region: 0x5342, code: 0xd5}, + 198: {region: 0x5343, code: 0xd6}, + 199: {region: 0x5344, code: 0xd8}, + 200: {region: 0x5345, code: 0xda}, + 201: {region: 0x5347, code: 0xdb}, + 202: {region: 0x5348, code: 0xdc}, + 203: {region: 0x5349, code: 0x5d}, + 204: {region: 0x534a, code: 0xbd}, + 205: {region: 0x534b, code: 0x5d}, + 206: {region: 0x534c, code: 0xdf}, + 207: {region: 0x534d, code: 0x5d}, + 208: {region: 0x534e, code: 0x113}, + 209: {region: 0x534f, code: 0xe0}, + 210: {region: 0x5352, code: 0xe1}, + 211: {region: 0x5353, code: 0xe3}, + 212: {region: 0x5354, code: 0xe4}, + 213: {region: 0x5356, code: 0xfa}, + 214: {region: 0x5358, code: 0x8}, + 215: {region: 0x5359, code: 0xe7}, + 216: {region: 0x535a, code: 0xe8}, + 217: {region: 0x5441, code: 0x62}, + 218: {region: 0x5443, code: 0xfa}, + 219: {region: 0x5444, code: 0x107}, + 220: {region: 0x5446, code: 0x5d}, + 221: {region: 0x5447, code: 0x113}, + 222: {region: 0x5448, code: 0xe9}, + 223: {region: 0x544a, code: 0xeb}, + 224: {region: 0x544b, code: 0xbf}, + 225: {region: 0x544c, code: 0xfa}, + 226: {region: 0x544d, code: 0xed}, + 227: {region: 0x544e, code: 0xee}, + 228: {region: 0x544f, code: 0xef}, + 229: {region: 0x5452, code: 0xf2}, + 230: {region: 0x5454, code: 0xf3}, + 231: {region: 0x5456, code: 0x13}, + 232: {region: 0x5457, code: 0xf4}, + 233: {region: 0x545a, code: 0xf5}, + 234: {region: 0x5541, code: 0xf6}, + 235: {region: 0x5547, code: 0xf9}, + 236: {region: 0x554d, code: 0xfa}, + 237: {region: 0x5553, code: 0xfa}, + 238: {region: 0x5559, code: 0xff}, + 239: {region: 0x555a, code: 0x100}, + 240: {region: 0x5641, code: 0x5d}, + 241: {region: 0x5643, code: 0x10e}, + 242: {region: 0x5645, code: 0x102}, + 243: {region: 0x5647, code: 0xfa}, + 244: {region: 0x5649, code: 0xfa}, + 245: {region: 0x564e, code: 0x103}, + 246: {region: 0x5655, code: 0x105}, + 247: {region: 0x5746, code: 0x115}, + 248: {region: 0x5753, code: 0x106}, + 249: {region: 0x584b, code: 0x5d}, + 250: {region: 0x5945, code: 0x11d}, + 251: {region: 0x5954, code: 0x5d}, + 252: {region: 0x5a41, code: 0x123}, + 253: {region: 0x5a4d, code: 0x125}, + 254: {region: 0x5a57, code: 0xfa}, +} // Size: 1044 bytes + +type regionInfo struct { + region uint16 + code uint16 + from uint32 + to uint32 +} + +var regionData = []regionInfo{ // 493 elements + 0: {region: 0x4143, code: 0xdc, from: 0xf7021, to: 0x0}, + 1: {region: 0x4144, code: 0x5d, from: 0xf9e21, to: 0x0}, + 2: {region: 0x4144, code: 0x5b, from: 0xea221, to: 0xfa45c}, + 3: {region: 0x4144, code: 0x61, from: 0xf5021, to: 0xfa451}, + 4: {region: 0x4144, code: 0x1, from: 0xf2021, to: 0xfa39f}, + 5: {region: 0x4145, code: 0x2, from: 0xf6ab3, to: 0x0}, + 6: {region: 0x4146, code: 0x4, from: 0xfa547, to: 0x0}, + 7: {region: 0x4146, code: 0x3, from: 0xf0e6e, to: 0xfa59f}, + 8: {region: 0x4147, code: 0x10e, from: 0xf5b46, to: 0x0}, + 9: {region: 0x4149, code: 0x10e, from: 0xf5b46, to: 0x0}, + 10: {region: 0x414c, code: 0x6, from: 0xf5b10, to: 0x0}, + 11: {region: 0x414c, code: 0x5, from: 0xf3561, to: 0xf5b10}, + 12: {region: 0x414d, code: 0x7, from: 0xf9376, to: 0x0}, + 13: {region: 0x414d, code: 0xd2, from: 0xf8f99, to: 0xf9376}, + 14: {region: 0x414d, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 15: {region: 0x414f, code: 0x9, from: 0xf9f8d, to: 0x0}, + 16: {region: 0x414f, code: 0xc, from: 0xf96e1, to: 0xfa041}, + 17: {region: 0x414f, code: 0xb, from: 0xf8d39, to: 0xfa041}, + 18: {region: 0x414f, code: 0xa, from: 0xf7228, to: 0xf8e61}, + 19: {region: 0x4151, code: 0x811b, from: 0x0, to: 0x0}, + 20: {region: 0x4152, code: 0x11, from: 0xf9021, to: 0x0}, + 21: {region: 0x4152, code: 0xd, from: 0xf82ce, to: 0xf9021}, + 22: {region: 0x4152, code: 0x10, from: 0xf7ec1, to: 0xf82ce}, + 23: {region: 0x4152, code: 0xe, from: 0xf6421, to: 0xf7ec1}, + 24: {region: 0x4152, code: 0xf, from: 0xeb365, to: 0xf6421}, + 25: {region: 0x4153, code: 0xfa, from: 0xee0f0, to: 0x0}, + 26: {region: 0x4154, code: 0x5d, from: 0xf9e21, to: 0x0}, + 27: {region: 0x4154, code: 0x12, from: 0xf3784, to: 0xfa45c}, + 28: {region: 0x4155, code: 0x13, from: 0xf5c4e, to: 0x0}, + 29: {region: 0x4157, code: 0x14, from: 0xf8421, to: 0x0}, + 30: {region: 0x4157, code: 0x8, from: 0xf28aa, to: 0xf8421}, + 31: {region: 0x4158, code: 0x5d, from: 0xf9e21, to: 0x0}, + 32: {region: 0x415a, code: 0x16, from: 0xfac21, to: 0x0}, + 33: {region: 0x415a, code: 0x15, from: 0xf9376, to: 0xfad9f}, + 34: {region: 0x415a, code: 0xd2, from: 0xf8f99, to: 0xf9421}, + 35: {region: 0x415a, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 36: {region: 0x4241, code: 0x18, from: 0xf9621, to: 0x0}, + 37: {region: 0x4241, code: 0x19, from: 0xf950f, to: 0xf9ae1}, + 38: {region: 0x4241, code: 0x17, from: 0xf90e1, to: 0xf950f}, + 39: {region: 0x4241, code: 0x121, from: 0xf90e1, to: 0xf9341}, + 40: {region: 0x4241, code: 0x120, from: 0xf8c21, to: 0xf90e1}, + 41: {region: 0x4241, code: 0x11e, from: 0xf5c21, to: 0xf8c21}, + 42: {region: 0x4242, code: 0x1a, from: 0xf6b83, to: 0x0}, + 43: {region: 0x4242, code: 0x10e, from: 0xf5b46, to: 0xf6b83}, + 44: {region: 0x4244, code: 0x1b, from: 0xf6821, to: 0x0}, + 45: {region: 0x4244, code: 0xc7, from: 0xf3881, to: 0xf6821}, + 46: {region: 0x4244, code: 0x7c, from: 0xe5711, to: 0xf3881}, + 47: {region: 0x4245, code: 0x5d, from: 0xf9e21, to: 0x0}, + 48: {region: 0x4245, code: 0x1d, from: 0xe4e47, to: 0xfa45c}, + 49: {region: 0x4245, code: 0xbc, from: 0xe318f, to: 0xe4e47}, + 50: {region: 0x4245, code: 0x801e, from: 0xf6421, to: 0xf8c65}, + 51: {region: 0x4245, code: 0x801c, from: 0xf6421, to: 0xf8c65}, + 52: {region: 0x4246, code: 0x113, from: 0xf8104, to: 0x0}, + 53: {region: 0x4247, code: 0x21, from: 0xf9ee5, to: 0x0}, + 54: {region: 0x4247, code: 0x1f, from: 0xf5421, to: 0xf9ee5}, + 55: {region: 0x4247, code: 0x20, from: 0xf40ac, to: 0xf5421}, + 56: {region: 0x4247, code: 0x22, from: 0xeaee8, to: 0xf40ac}, + 57: {region: 0x4248, code: 0x23, from: 0xf5b50, to: 0x0}, + 58: {region: 0x4249, code: 0x24, from: 0xf58b3, to: 0x0}, + 59: {region: 0x424a, code: 0x113, from: 0xf6f7e, to: 0x0}, + 60: {region: 0x424c, code: 0x5d, from: 0xf9e21, to: 0x0}, + 61: {region: 0x424c, code: 0x61, from: 0xf5021, to: 0xfa451}, + 62: {region: 0x424d, code: 0x25, from: 0xf6446, to: 0x0}, + 63: {region: 0x424e, code: 0x26, from: 0xf5ecc, to: 0x0}, + 64: {region: 0x424e, code: 0xb4, from: 0xf5730, to: 0xf5ecc}, + 65: {region: 0x424f, code: 0x27, from: 0xf8621, to: 0x0}, + 66: {region: 0x424f, code: 0x29, from: 0xf5621, to: 0xf859f}, + 67: {region: 0x424f, code: 0x28, from: 0xe8ed7, to: 0xf5621}, + 68: {region: 0x424f, code: 0x802a, from: 0x0, to: 0x0}, + 69: {region: 0x4251, code: 0xfa, from: 0xfb621, to: 0x0}, + 70: {region: 0x4251, code: 0x8, from: 0xfb54a, to: 0xfb621}, + 71: {region: 0x4252, code: 0x2e, from: 0xf94e1, to: 0x0}, + 72: {region: 0x4252, code: 0x30, from: 0xf9301, to: 0xf94e1}, + 73: {region: 0x4252, code: 0x2d, from: 0xf8c70, to: 0xf9301}, + 74: {region: 0x4252, code: 0x2f, from: 0xf8a2f, to: 0xf8c70}, + 75: {region: 0x4252, code: 0x2c, from: 0xf845c, to: 0xf8a2f}, + 76: {region: 0x4252, code: 0x2b, from: 0xf5e4d, to: 0xf845c}, + 77: {region: 0x4252, code: 0x31, from: 0xf2d61, to: 0xf5e4d}, + 78: {region: 0x4253, code: 0x32, from: 0xf5cb9, to: 0x0}, + 79: {region: 0x4254, code: 0x33, from: 0xf6c90, to: 0x0}, + 80: {region: 0x4254, code: 0x7c, from: 0xee621, to: 0x0}, + 81: {region: 0x4255, code: 0x34, from: 0xf40e1, to: 0xf8ad2}, + 82: {region: 0x4256, code: 0xbd, from: 0xee2c7, to: 0x0}, + 83: {region: 0x4257, code: 0x35, from: 0xf7117, to: 0x0}, + 84: {region: 0x4257, code: 0x123, from: 0xf524e, to: 0xf7117}, + 85: {region: 0x4259, code: 0x37, from: 0xfc0e1, to: 0x0}, + 86: {region: 0x4259, code: 0x38, from: 0xfa021, to: 0xfc221}, + 87: {region: 0x4259, code: 0x36, from: 0xf9501, to: 0xfa19f}, + 88: {region: 0x4259, code: 0xd2, from: 0xf8f99, to: 0xf9568}, + 89: {region: 0x4259, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 90: {region: 0x425a, code: 0x39, from: 0xf6c21, to: 0x0}, + 91: {region: 0x4341, code: 0x3a, from: 0xe8421, to: 0x0}, + 92: {region: 0x4343, code: 0x13, from: 0xf5c4e, to: 0x0}, + 93: {region: 0x4344, code: 0x3b, from: 0xf9ce1, to: 0x0}, + 94: {region: 0x4344, code: 0x126, from: 0xf9361, to: 0xf9ce1}, + 95: {region: 0x4344, code: 0x127, from: 0xf675b, to: 0xf9361}, + 96: {region: 0x4346, code: 0x107, from: 0xf9221, to: 0x0}, + 97: {region: 0x4347, code: 0x107, from: 0xf9221, to: 0x0}, + 98: {region: 0x4348, code: 0x3d, from: 0xe0e71, to: 0x0}, + 99: {region: 0x4348, code: 0x803c, from: 0x0, to: 0x0}, + 100: {region: 0x4348, code: 0x803e, from: 0x0, to: 0x0}, + 101: {region: 0x4349, code: 0x113, from: 0xf4d84, to: 0x0}, + 102: {region: 0x434b, code: 0xbf, from: 0xf5eea, to: 0x0}, + 103: {region: 0x434c, code: 0x41, from: 0xf6f3d, to: 0x0}, + 104: {region: 0x434c, code: 0x3f, from: 0xf5021, to: 0xf6f3d}, + 105: {region: 0x434c, code: 0x8040, from: 0x0, to: 0x0}, + 106: {region: 0x434d, code: 0x107, from: 0xf6a81, to: 0x0}, + 107: {region: 0x434e, code: 0x43, from: 0xf4261, to: 0x0}, + 108: {region: 0x434e, code: 0x8042, from: 0xf7621, to: 0xf9d9f}, + 109: {region: 0x434f, code: 0x44, from: 0xee221, to: 0x0}, + 110: {region: 0x434f, code: 0x8045, from: 0x0, to: 0x0}, + 111: {region: 0x4350, code: 0x811b, from: 0x0, to: 0x0}, + 112: {region: 0x4352, code: 0x46, from: 0xed15a, to: 0x0}, + 113: {region: 0x4353, code: 0x47, from: 0xfa4af, to: 0xfacc3}, + 114: {region: 0x4353, code: 0x5d, from: 0xfa644, to: 0xfacc3}, + 115: {region: 0x4353, code: 0x11f, from: 0xf9438, to: 0xfa4af}, + 116: {region: 0x4355, code: 0x4a, from: 0xe8621, to: 0x0}, + 117: {region: 0x4355, code: 0x49, from: 0xf9421, to: 0x0}, + 118: {region: 0x4355, code: 0xfa, from: 0xed621, to: 0xf4e21}, + 119: {region: 0x4356, code: 0x4b, from: 0xef421, to: 0x0}, + 120: {region: 0x4356, code: 0xca, from: 0xeeeb6, to: 0xf6ee5}, + 121: {region: 0x4357, code: 0x8, from: 0xfb54a, to: 0x0}, + 122: {region: 0x4358, code: 0x13, from: 0xf5c4e, to: 0x0}, + 123: {region: 0x4359, code: 0x5d, from: 0xfb021, to: 0x0}, + 124: {region: 0x4359, code: 0x4c, from: 0xef52a, to: 0xfb03f}, + 125: {region: 0x435a, code: 0x4d, from: 0xf9221, to: 0x0}, + 126: {region: 0x435a, code: 0x48, from: 0xf42c1, to: 0xf9261}, + 127: {region: 0x4444, code: 0x4e, from: 0xf38f4, to: 0xf8d42}, + 128: {region: 0x4445, code: 0x5d, from: 0xf9e21, to: 0x0}, + 129: {region: 0x4445, code: 0x4f, from: 0xf38d4, to: 0xfa45c}, + 130: {region: 0x4447, code: 0xfa, from: 0xf5b68, to: 0x0}, + 131: {region: 0x444a, code: 0x50, from: 0xf72db, to: 0x0}, + 132: {region: 0x444b, code: 0x51, from: 0xea2bb, to: 0x0}, + 133: {region: 0x444d, code: 0x10e, from: 0xf5b46, to: 0x0}, + 134: {region: 0x444f, code: 0x52, from: 0xf3741, to: 0x0}, + 135: {region: 0x444f, code: 0xfa, from: 0xee2d5, to: 0xf3741}, + 136: {region: 0x445a, code: 0x53, from: 0xf5881, to: 0x0}, + 137: {region: 0x4541, code: 0x5d, from: 0xf9e21, to: 0x0}, + 138: {region: 0x4543, code: 0xfa, from: 0xfa142, to: 0x0}, + 139: {region: 0x4543, code: 0x54, from: 0xeb881, to: 0xfa142}, + 140: {region: 0x4543, code: 0x8055, from: 0xf92b7, to: 0xfa029}, + 141: {region: 0x4545, code: 0x5d, from: 0xfb621, to: 0x0}, + 142: {region: 0x4545, code: 0x56, from: 0xf90d5, to: 0xfb59f}, + 143: {region: 0x4545, code: 0xe5, from: 0xf5221, to: 0xf90d4}, + 144: {region: 0x4547, code: 0x57, from: 0xebb6e, to: 0x0}, + 145: {region: 0x4548, code: 0x9d, from: 0xf705a, to: 0x0}, + 146: {region: 0x4552, code: 0x58, from: 0xf9b68, to: 0x0}, + 147: {region: 0x4552, code: 0x5c, from: 0xf92b8, to: 0xf9b68}, + 148: {region: 0x4553, code: 0x5d, from: 0xf9e21, to: 0x0}, + 149: {region: 0x4553, code: 0x5b, from: 0xe9953, to: 0xfa45c}, + 150: {region: 0x4553, code: 0x8059, from: 0xf7421, to: 0xf7b9f}, + 151: {region: 0x4553, code: 0x805a, from: 0xf6e21, to: 0xf959f}, + 152: {region: 0x4554, code: 0x5c, from: 0xf712f, to: 0x0}, + 153: {region: 0x4555, code: 0x5d, from: 0xf9e21, to: 0x0}, + 154: {region: 0x4555, code: 0x8110, from: 0xf7621, to: 0xf9d9f}, + 155: {region: 0x4649, code: 0x5d, from: 0xf9e21, to: 0x0}, + 156: {region: 0x4649, code: 0x5e, from: 0xf5621, to: 0xfa45c}, + 157: {region: 0x464a, code: 0x5f, from: 0xf622d, to: 0x0}, + 158: {region: 0x464b, code: 0x60, from: 0xeda21, to: 0x0}, + 159: {region: 0x464d, code: 0xfa, from: 0xf3021, to: 0x0}, + 160: {region: 0x464d, code: 0x84, from: 0xef543, to: 0xf3021}, + 161: {region: 0x464f, code: 0x51, from: 0xf3821, to: 0x0}, + 162: {region: 0x4652, code: 0x5d, from: 0xf9e21, to: 0x0}, + 163: {region: 0x4652, code: 0x61, from: 0xf5021, to: 0xfa451}, + 164: {region: 0x4741, code: 0x107, from: 0xf9221, to: 0x0}, + 165: {region: 0x4742, code: 0x62, from: 0xd3cfb, to: 0x0}, + 166: {region: 0x4744, code: 0x10e, from: 0xf5e5b, to: 0x0}, + 167: {region: 0x4745, code: 0x64, from: 0xf9737, to: 0x0}, + 168: {region: 0x4745, code: 0x63, from: 0xf9285, to: 0xf9739}, + 169: {region: 0x4745, code: 0xd2, from: 0xf8f99, to: 0xf92cb}, + 170: {region: 0x4745, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 171: {region: 0x4746, code: 0x5d, from: 0xf9e21, to: 0x0}, + 172: {region: 0x4746, code: 0x61, from: 0xf5021, to: 0xfa451}, + 173: {region: 0x4747, code: 0x62, from: 0xe4c21, to: 0x0}, + 174: {region: 0x4748, code: 0x66, from: 0xfaee3, to: 0x0}, + 175: {region: 0x4748, code: 0x65, from: 0xf7669, to: 0xfaf9f}, + 176: {region: 0x4749, code: 0x67, from: 0xd6221, to: 0x0}, + 177: {region: 0x474c, code: 0x51, from: 0xea2bb, to: 0x0}, + 178: {region: 0x474d, code: 0x68, from: 0xf66e1, to: 0x0}, + 179: {region: 0x474e, code: 0x69, from: 0xf8426, to: 0x0}, + 180: {region: 0x474e, code: 0x6a, from: 0xf6942, to: 0xf8426}, + 181: {region: 0x4750, code: 0x5d, from: 0xf9e21, to: 0x0}, + 182: {region: 0x4750, code: 0x61, from: 0xf5021, to: 0xfa451}, + 183: {region: 0x4751, code: 0x107, from: 0xf9221, to: 0x0}, + 184: {region: 0x4751, code: 0x6b, from: 0xf6ee7, to: 0xf84c1}, + 185: {region: 0x4752, code: 0x5d, from: 0xfa221, to: 0x0}, + 186: {region: 0x4752, code: 0x6c, from: 0xf44a1, to: 0xfa45c}, + 187: {region: 0x4753, code: 0x62, from: 0xee821, to: 0x0}, + 188: {region: 0x4754, code: 0x6d, from: 0xf0abb, to: 0x0}, + 189: {region: 0x4755, code: 0xfa, from: 0xf3115, to: 0x0}, + 190: {region: 0x4757, code: 0x113, from: 0xf9a7f, to: 0x0}, + 191: {region: 0x4757, code: 0x6f, from: 0xf705c, to: 0xf9a7f}, + 192: {region: 0x4757, code: 0x6e, from: 0xef421, to: 0xf705c}, + 193: {region: 0x4759, code: 0x70, from: 0xf5cba, to: 0x0}, + 194: {region: 0x484b, code: 0x71, from: 0xece42, to: 0x0}, + 195: {region: 0x484d, code: 0x13, from: 0xf5e50, to: 0x0}, + 196: {region: 0x484e, code: 0x72, from: 0xf0c83, to: 0x0}, + 197: {region: 0x4852, code: 0x74, from: 0xf94be, to: 0x0}, + 198: {region: 0x4852, code: 0x73, from: 0xf8f97, to: 0xf9621}, + 199: {region: 0x4852, code: 0x120, from: 0xf8c21, to: 0xf8f97}, + 200: {region: 0x4852, code: 0x11e, from: 0xf5c21, to: 0xf8c21}, + 201: {region: 0x4854, code: 0x75, from: 0xea11a, to: 0x0}, + 202: {region: 0x4854, code: 0xfa, from: 0xef621, to: 0x0}, + 203: {region: 0x4855, code: 0x76, from: 0xf34f7, to: 0x0}, + 204: {region: 0x4943, code: 0x5d, from: 0xf9e21, to: 0x0}, + 205: {region: 0x4944, code: 0x77, from: 0xf5b8d, to: 0x0}, + 206: {region: 0x4945, code: 0x5d, from: 0xf9e21, to: 0x0}, + 207: {region: 0x4945, code: 0x78, from: 0xf0421, to: 0xfa449}, + 208: {region: 0x4945, code: 0x62, from: 0xe1021, to: 0xf0421}, + 209: {region: 0x494c, code: 0x7b, from: 0xf8324, to: 0x0}, + 210: {region: 0x494c, code: 0x7a, from: 0xf7856, to: 0xf8324}, + 211: {region: 0x494c, code: 0x79, from: 0xf3910, to: 0xf7856}, + 212: {region: 0x494d, code: 0x62, from: 0xe6023, to: 0x0}, + 213: {region: 0x494e, code: 0x7c, from: 0xe5711, to: 0x0}, + 214: {region: 0x494f, code: 0xfa, from: 0xf5b68, to: 0x0}, + 215: {region: 0x4951, code: 0x7d, from: 0xf1693, to: 0x0}, + 216: {region: 0x4951, code: 0x57, from: 0xf016b, to: 0xf1693}, + 217: {region: 0x4951, code: 0x7c, from: 0xf016b, to: 0xf1693}, + 218: {region: 0x4952, code: 0x7e, from: 0xf18ad, to: 0x0}, + 219: {region: 0x4953, code: 0x80, from: 0xf7a21, to: 0x0}, + 220: {region: 0x4953, code: 0x7f, from: 0xefd81, to: 0xf7a21}, + 221: {region: 0x4953, code: 0x51, from: 0xea2bb, to: 0xefd81}, + 222: {region: 0x4954, code: 0x5d, from: 0xf9e21, to: 0x0}, + 223: {region: 0x4954, code: 0x81, from: 0xe8d18, to: 0xfa45c}, + 224: {region: 0x4a45, code: 0x62, from: 0xe5a21, to: 0x0}, + 225: {region: 0x4a4d, code: 0x82, from: 0xf6328, to: 0x0}, + 226: {region: 0x4a4f, code: 0x83, from: 0xf3ce1, to: 0x0}, + 227: {region: 0x4a50, code: 0x84, from: 0xe9ec1, to: 0x0}, + 228: {region: 0x4b45, code: 0x85, from: 0xf5d2e, to: 0x0}, + 229: {region: 0x4b47, code: 0x86, from: 0xf92aa, to: 0x0}, + 230: {region: 0x4b47, code: 0xd2, from: 0xf8f99, to: 0xf92aa}, + 231: {region: 0x4b47, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 232: {region: 0x4b48, code: 0x87, from: 0xf7874, to: 0x0}, + 233: {region: 0x4b49, code: 0x13, from: 0xf5c4e, to: 0x0}, + 234: {region: 0x4b4d, code: 0x88, from: 0xf6ee6, to: 0x0}, + 235: {region: 0x4b4e, code: 0x10e, from: 0xf5b46, to: 0x0}, + 236: {region: 0x4b50, code: 0x89, from: 0xf4e91, to: 0x0}, + 237: {region: 0x4b52, code: 0x8c, from: 0xf54ca, to: 0x0}, + 238: {region: 0x4b52, code: 0x8a, from: 0xf424f, to: 0xf54ca}, + 239: {region: 0x4b52, code: 0x8b, from: 0xf330f, to: 0xf424f}, + 240: {region: 0x4b57, code: 0x8d, from: 0xf5281, to: 0x0}, + 241: {region: 0x4b59, code: 0x8e, from: 0xf6621, to: 0x0}, + 242: {region: 0x4b59, code: 0x82, from: 0xf6328, to: 0xf6621}, + 243: {region: 0x4b5a, code: 0x8f, from: 0xf9365, to: 0x0}, + 244: {region: 0x4c41, code: 0x90, from: 0xf778a, to: 0x0}, + 245: {region: 0x4c42, code: 0x91, from: 0xf3842, to: 0x0}, + 246: {region: 0x4c43, code: 0x10e, from: 0xf5b46, to: 0x0}, + 247: {region: 0x4c49, code: 0x3d, from: 0xf0241, to: 0x0}, + 248: {region: 0x4c4b, code: 0x92, from: 0xf74b6, to: 0x0}, + 249: {region: 0x4c52, code: 0x93, from: 0xf3021, to: 0x0}, + 250: {region: 0x4c53, code: 0x123, from: 0xf524e, to: 0x0}, + 251: {region: 0x4c53, code: 0x94, from: 0xf7836, to: 0x0}, + 252: {region: 0x4c54, code: 0x5d, from: 0xfbe21, to: 0x0}, + 253: {region: 0x4c54, code: 0x95, from: 0xf92d9, to: 0xfbd9f}, + 254: {region: 0x4c54, code: 0x96, from: 0xf9141, to: 0xf92d9}, + 255: {region: 0x4c54, code: 0xe5, from: 0xf5221, to: 0xf9141}, + 256: {region: 0x4c55, code: 0x5d, from: 0xf9e21, to: 0x0}, + 257: {region: 0x4c55, code: 0x98, from: 0xf3124, to: 0xfa45c}, + 258: {region: 0x4c55, code: 0x8097, from: 0xf6421, to: 0xf8c65}, + 259: {region: 0x4c55, code: 0x8099, from: 0xf6421, to: 0xf8c65}, + 260: {region: 0x4c56, code: 0x5d, from: 0xfbc21, to: 0x0}, + 261: {region: 0x4c56, code: 0x9a, from: 0xf92dc, to: 0xfbb9f}, + 262: {region: 0x4c56, code: 0x9b, from: 0xf90a7, to: 0xf9351}, + 263: {region: 0x4c56, code: 0xe5, from: 0xf5221, to: 0xf90f4}, + 264: {region: 0x4c59, code: 0x9c, from: 0xf6721, to: 0x0}, + 265: {region: 0x4d41, code: 0x9d, from: 0xf4f51, to: 0x0}, + 266: {region: 0x4d41, code: 0x9e, from: 0xeb221, to: 0xf4f51}, + 267: {region: 0x4d43, code: 0x5d, from: 0xf9e21, to: 0x0}, + 268: {region: 0x4d43, code: 0x61, from: 0xf5021, to: 0xfa451}, + 269: {region: 0x4d43, code: 0x9f, from: 0xf5021, to: 0xfa451}, + 270: {region: 0x4d44, code: 0xa1, from: 0xf937d, to: 0x0}, + 271: {region: 0x4d44, code: 0xa0, from: 0xf90c1, to: 0xf937d}, + 272: {region: 0x4d45, code: 0x5d, from: 0xfa421, to: 0x0}, + 273: {region: 0x4d45, code: 0x4f, from: 0xf9f42, to: 0xfa4af}, + 274: {region: 0x4d45, code: 0x11f, from: 0xf9438, to: 0xfa4af}, + 275: {region: 0x4d46, code: 0x5d, from: 0xf9e21, to: 0x0}, + 276: {region: 0x4d46, code: 0x61, from: 0xf5021, to: 0xfa451}, + 277: {region: 0x4d47, code: 0xa2, from: 0xf7f61, to: 0x0}, + 278: {region: 0x4d47, code: 0xa3, from: 0xf56e1, to: 0xfa99f}, + 279: {region: 0x4d48, code: 0xfa, from: 0xf3021, to: 0x0}, + 280: {region: 0x4d4b, code: 0xa4, from: 0xf92b4, to: 0x0}, + 281: {region: 0x4d4b, code: 0xa5, from: 0xf909a, to: 0xf92b4}, + 282: {region: 0x4d4c, code: 0x113, from: 0xf80c1, to: 0x0}, + 283: {region: 0x4d4c, code: 0xa6, from: 0xf54e2, to: 0xf811f}, + 284: {region: 0x4d4c, code: 0x113, from: 0xf4d78, to: 0xf54e2}, + 285: {region: 0x4d4d, code: 0xa7, from: 0xf8ad2, to: 0x0}, + 286: {region: 0x4d4d, code: 0x34, from: 0xf40e1, to: 0xf8ad2}, + 287: {region: 0x4d4e, code: 0xa8, from: 0xef661, to: 0x0}, + 288: {region: 0x4d4f, code: 0xa9, from: 0xeda21, to: 0x0}, + 289: {region: 0x4d50, code: 0xfa, from: 0xf3021, to: 0x0}, + 290: {region: 0x4d51, code: 0x5d, from: 0xf9e21, to: 0x0}, + 291: {region: 0x4d51, code: 0x61, from: 0xf5021, to: 0xfa451}, + 292: {region: 0x4d52, code: 0xaa, from: 0xf6add, to: 0x0}, + 293: {region: 0x4d52, code: 0x113, from: 0xf4d7c, to: 0xf6add}, + 294: {region: 0x4d53, code: 0x10e, from: 0xf5e5b, to: 0x0}, + 295: {region: 0x4d54, code: 0x5d, from: 0xfb021, to: 0x0}, + 296: {region: 0x4d54, code: 0xab, from: 0xf60c7, to: 0xfb03f}, + 297: {region: 0x4d54, code: 0xac, from: 0xef50d, to: 0xf60c7}, + 298: {region: 0x4d55, code: 0xad, from: 0xf1c81, to: 0x0}, + 299: {region: 0x4d56, code: 0xaf, from: 0xf7ae1, to: 0x0}, + 300: {region: 0x4d57, code: 0xb0, from: 0xf664f, to: 0x0}, + 301: {region: 0x4d58, code: 0xb1, from: 0xf9221, to: 0x0}, + 302: {region: 0x4d58, code: 0xb2, from: 0xe3c21, to: 0xf919f}, + 303: {region: 0x4d58, code: 0x80b3, from: 0x0, to: 0x0}, + 304: {region: 0x4d59, code: 0xb4, from: 0xf5730, to: 0x0}, + 305: {region: 0x4d5a, code: 0xb7, from: 0xface1, to: 0x0}, + 306: {region: 0x4d5a, code: 0xb6, from: 0xf78d0, to: 0xfad9f}, + 307: {region: 0x4d5a, code: 0xb5, from: 0xf6ed9, to: 0xf78d0}, + 308: {region: 0x4e41, code: 0xb8, from: 0xf9221, to: 0x0}, + 309: {region: 0x4e41, code: 0x123, from: 0xf524e, to: 0x0}, + 310: {region: 0x4e43, code: 0x115, from: 0xf8221, to: 0x0}, + 311: {region: 0x4e45, code: 0x113, from: 0xf4d93, to: 0x0}, + 312: {region: 0x4e46, code: 0x13, from: 0xf5c4e, to: 0x0}, + 313: {region: 0x4e47, code: 0xb9, from: 0xf6a21, to: 0x0}, + 314: {region: 0x4e49, code: 0xbb, from: 0xf8e9e, to: 0x0}, + 315: {region: 0x4e49, code: 0xba, from: 0xf884f, to: 0xf8e9e}, + 316: {region: 0x4e4c, code: 0x5d, from: 0xf9e21, to: 0x0}, + 317: {region: 0x4e4c, code: 0xbc, from: 0xe2a21, to: 0xfa45c}, + 318: {region: 0x4e4f, code: 0xbd, from: 0xee2c7, to: 0x0}, + 319: {region: 0x4e4f, code: 0xda, from: 0xea2bb, to: 0xee2c7}, + 320: {region: 0x4e50, code: 0xbe, from: 0xf1a21, to: 0x0}, + 321: {region: 0x4e50, code: 0x7c, from: 0xe9c21, to: 0xf5d51}, + 322: {region: 0x4e52, code: 0x13, from: 0xf5c4e, to: 0x0}, + 323: {region: 0x4e55, code: 0xbf, from: 0xf5eea, to: 0x0}, + 324: {region: 0x4e5a, code: 0xbf, from: 0xf5eea, to: 0x0}, + 325: {region: 0x4f4d, code: 0xc0, from: 0xf696b, to: 0x0}, + 326: {region: 0x5041, code: 0xc1, from: 0xedf64, to: 0x0}, + 327: {region: 0x5041, code: 0xfa, from: 0xedf72, to: 0x0}, + 328: {region: 0x5045, code: 0xc3, from: 0xf8ee1, to: 0x0}, + 329: {region: 0x5045, code: 0xc2, from: 0xf8241, to: 0xf8ee1}, + 330: {region: 0x5045, code: 0xc4, from: 0xe8e4e, to: 0xf8241}, + 331: {region: 0x5046, code: 0x115, from: 0xf339a, to: 0x0}, + 332: {region: 0x5047, code: 0xc5, from: 0xf6f30, to: 0x0}, + 333: {region: 0x5047, code: 0x13, from: 0xf5c4e, to: 0xf6f30}, + 334: {region: 0x5048, code: 0xc6, from: 0xf34e4, to: 0x0}, + 335: {region: 0x504b, code: 0xc7, from: 0xf3881, to: 0x0}, + 336: {region: 0x504b, code: 0x7c, from: 0xe5711, to: 0xf370f}, + 337: {region: 0x504c, code: 0xc8, from: 0xf9621, to: 0x0}, + 338: {region: 0x504c, code: 0xc9, from: 0xf3d5c, to: 0xf959f}, + 339: {region: 0x504d, code: 0x5d, from: 0xf9e21, to: 0x0}, + 340: {region: 0x504d, code: 0x61, from: 0xf6995, to: 0xfa451}, + 341: {region: 0x504e, code: 0xbf, from: 0xf622d, to: 0x0}, + 342: {region: 0x5052, code: 0xfa, from: 0xed58a, to: 0x0}, + 343: {region: 0x5052, code: 0x5b, from: 0xe1021, to: 0xed58a}, + 344: {region: 0x5053, code: 0x7b, from: 0xf8324, to: 0x0}, + 345: {region: 0x5053, code: 0x83, from: 0xf984c, to: 0x0}, + 346: {region: 0x5053, code: 0x79, from: 0xf5ec1, to: 0xf7856}, + 347: {region: 0x5053, code: 0x83, from: 0xf3ce1, to: 0xf5ec1}, + 348: {region: 0x5054, code: 0x5d, from: 0xf9e21, to: 0x0}, + 349: {region: 0x5054, code: 0xca, from: 0xeeeb6, to: 0xfa45c}, + 350: {region: 0x5057, code: 0xfa, from: 0xf3021, to: 0x0}, + 351: {region: 0x5059, code: 0xcb, from: 0xf2f61, to: 0x0}, + 352: {region: 0x5141, code: 0xcc, from: 0xf6ab3, to: 0x0}, + 353: {region: 0x5245, code: 0x5d, from: 0xf9e21, to: 0x0}, + 354: {region: 0x5245, code: 0x61, from: 0xf6e21, to: 0xfa451}, + 355: {region: 0x524f, code: 0xcf, from: 0xfaae1, to: 0x0}, + 356: {region: 0x524f, code: 0xce, from: 0xf403c, to: 0xfad9f}, + 357: {region: 0x5253, code: 0xd0, from: 0xfad59, to: 0x0}, + 358: {region: 0x5253, code: 0x47, from: 0xfa4af, to: 0xfad59}, + 359: {region: 0x5253, code: 0x11f, from: 0xf9438, to: 0xfa4af}, + 360: {region: 0x5255, code: 0xd1, from: 0xf9e21, to: 0x0}, + 361: {region: 0x5255, code: 0xd2, from: 0xf8f99, to: 0xf9d9f}, + 362: {region: 0x5257, code: 0xd3, from: 0xf58b3, to: 0x0}, + 363: {region: 0x5341, code: 0xd4, from: 0xf4156, to: 0x0}, + 364: {region: 0x5342, code: 0xd5, from: 0xf7358, to: 0x0}, + 365: {region: 0x5342, code: 0x13, from: 0xf5c4e, to: 0xf74de}, + 366: {region: 0x5343, code: 0xd6, from: 0xedf61, to: 0x0}, + 367: {region: 0x5344, code: 0xd8, from: 0xfae2a, to: 0x0}, + 368: {region: 0x5344, code: 0xd7, from: 0xf90c8, to: 0xfaede}, + 369: {region: 0x5344, code: 0xd9, from: 0xf4a88, to: 0xf9cc1}, + 370: {region: 0x5344, code: 0x57, from: 0xec233, to: 0xf4c21}, + 371: {region: 0x5344, code: 0x62, from: 0xec233, to: 0xf4c21}, + 372: {region: 0x5345, code: 0xda, from: 0xea2bb, to: 0x0}, + 373: {region: 0x5347, code: 0xdb, from: 0xf5ecc, to: 0x0}, + 374: {region: 0x5347, code: 0xb4, from: 0xf5730, to: 0xf5ecc}, + 375: {region: 0x5348, code: 0xdc, from: 0xefa4f, to: 0x0}, + 376: {region: 0x5349, code: 0x5d, from: 0xfae21, to: 0x0}, + 377: {region: 0x5349, code: 0xdd, from: 0xf9147, to: 0xfae2e}, + 378: {region: 0x534a, code: 0xbd, from: 0xee2c7, to: 0x0}, + 379: {region: 0x534b, code: 0x5d, from: 0xfb221, to: 0x0}, + 380: {region: 0x534b, code: 0xde, from: 0xf919f, to: 0xfb221}, + 381: {region: 0x534b, code: 0x48, from: 0xf42c1, to: 0xf919f}, + 382: {region: 0x534c, code: 0xdf, from: 0xf5904, to: 0x0}, + 383: {region: 0x534c, code: 0x62, from: 0xe217e, to: 0xf5c44}, + 384: {region: 0x534d, code: 0x5d, from: 0xf9e21, to: 0x0}, + 385: {region: 0x534d, code: 0x81, from: 0xe9397, to: 0xfa25c}, + 386: {region: 0x534e, code: 0x113, from: 0xf4e84, to: 0x0}, + 387: {region: 0x534f, code: 0xe0, from: 0xf50e1, to: 0x0}, + 388: {region: 0x5352, code: 0xe1, from: 0xfa821, to: 0x0}, + 389: {region: 0x5352, code: 0xe2, from: 0xf28aa, to: 0xfa79f}, + 390: {region: 0x5352, code: 0xbc, from: 0xe2f74, to: 0xf28aa}, + 391: {region: 0x5353, code: 0xe3, from: 0xfb6f2, to: 0x0}, + 392: {region: 0x5353, code: 0xd8, from: 0xfae2a, to: 0xfb721}, + 393: {region: 0x5354, code: 0xe4, from: 0xf7328, to: 0x0}, + 394: {region: 0x5355, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 395: {region: 0x5356, code: 0xfa, from: 0xfa221, to: 0x0}, + 396: {region: 0x5356, code: 0xe6, from: 0xeff6b, to: 0xfa221}, + 397: {region: 0x5358, code: 0x8, from: 0xfb54a, to: 0x0}, + 398: {region: 0x5359, code: 0xe7, from: 0xf3821, to: 0x0}, + 399: {region: 0x535a, code: 0xe8, from: 0xf6d26, to: 0x0}, + 400: {region: 0x5441, code: 0x62, from: 0xf242c, to: 0x0}, + 401: {region: 0x5443, code: 0xfa, from: 0xf6328, to: 0x0}, + 402: {region: 0x5444, code: 0x107, from: 0xf9221, to: 0x0}, + 403: {region: 0x5446, code: 0x5d, from: 0xf9e21, to: 0x0}, + 404: {region: 0x5446, code: 0x61, from: 0xf4e21, to: 0xfa451}, + 405: {region: 0x5447, code: 0x113, from: 0xf4d7c, to: 0x0}, + 406: {region: 0x5448, code: 0xe9, from: 0xf108f, to: 0x0}, + 407: {region: 0x544a, code: 0xeb, from: 0xfa15a, to: 0x0}, + 408: {region: 0x544a, code: 0xea, from: 0xf96aa, to: 0xfa159}, + 409: {region: 0x544a, code: 0xd2, from: 0xf8f99, to: 0xf96aa}, + 410: {region: 0x544b, code: 0xbf, from: 0xf5eea, to: 0x0}, + 411: {region: 0x544c, code: 0xfa, from: 0xf9f54, to: 0x0}, + 412: {region: 0x544c, code: 0xf0, from: 0xf4e22, to: 0xfa4b4}, + 413: {region: 0x544c, code: 0x77, from: 0xf6f87, to: 0xfa4b4}, + 414: {region: 0x544d, code: 0xed, from: 0xfb221, to: 0x0}, + 415: {region: 0x544d, code: 0xec, from: 0xf9361, to: 0xfb221}, + 416: {region: 0x544d, code: 0xd2, from: 0xf8f99, to: 0xf9361}, + 417: {region: 0x544d, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 418: {region: 0x544e, code: 0xee, from: 0xf4d61, to: 0x0}, + 419: {region: 0x544f, code: 0xef, from: 0xf5c4e, to: 0x0}, + 420: {region: 0x5450, code: 0xf0, from: 0xf4e22, to: 0xfa4b4}, + 421: {region: 0x5450, code: 0x77, from: 0xf6f87, to: 0xfa4b4}, + 422: {region: 0x5452, code: 0xf2, from: 0xfaa21, to: 0x0}, + 423: {region: 0x5452, code: 0xf1, from: 0xf0561, to: 0xfab9f}, + 424: {region: 0x5454, code: 0xf3, from: 0xf5821, to: 0x0}, + 425: {region: 0x5456, code: 0x13, from: 0xf5c4e, to: 0x0}, + 426: {region: 0x5457, code: 0xf4, from: 0xf3acf, to: 0x0}, + 427: {region: 0x545a, code: 0xf5, from: 0xf5cce, to: 0x0}, + 428: {region: 0x5541, code: 0xf6, from: 0xf9922, to: 0x0}, + 429: {region: 0x5541, code: 0xf7, from: 0xf916d, to: 0xf9351}, + 430: {region: 0x5541, code: 0xd2, from: 0xf8f99, to: 0xf916d}, + 431: {region: 0x5541, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 432: {region: 0x5547, code: 0xf9, from: 0xf86af, to: 0x0}, + 433: {region: 0x5547, code: 0xf8, from: 0xf5d0f, to: 0xf86af}, + 434: {region: 0x554d, code: 0xfa, from: 0xf3021, to: 0x0}, + 435: {region: 0x5553, code: 0xfa, from: 0xe0021, to: 0x0}, + 436: {region: 0x5553, code: 0x80fb, from: 0x0, to: 0x0}, + 437: {region: 0x5553, code: 0x80fc, from: 0x0, to: 0xfbc61}, + 438: {region: 0x5559, code: 0xff, from: 0xf9261, to: 0x0}, + 439: {region: 0x5559, code: 0xfe, from: 0xf6ee1, to: 0xf9261}, + 440: {region: 0x5559, code: 0x80fd, from: 0x0, to: 0x0}, + 441: {region: 0x555a, code: 0x100, from: 0xf94e1, to: 0x0}, + 442: {region: 0x5641, code: 0x5d, from: 0xf9e21, to: 0x0}, + 443: {region: 0x5641, code: 0x81, from: 0xe9d53, to: 0xfa45c}, + 444: {region: 0x5643, code: 0x10e, from: 0xf5b46, to: 0x0}, + 445: {region: 0x5645, code: 0x102, from: 0xfb021, to: 0x0}, + 446: {region: 0x5645, code: 0x101, from: 0xe9eab, to: 0xfb0de}, + 447: {region: 0x5647, code: 0xfa, from: 0xe5221, to: 0x0}, + 448: {region: 0x5647, code: 0x62, from: 0xe5221, to: 0xf4e21}, + 449: {region: 0x5649, code: 0xfa, from: 0xe5a21, to: 0x0}, + 450: {region: 0x564e, code: 0x103, from: 0xf832e, to: 0x0}, + 451: {region: 0x564e, code: 0x104, from: 0xf74a3, to: 0xf832e}, + 452: {region: 0x5655, code: 0x105, from: 0xf7a21, to: 0x0}, + 453: {region: 0x5746, code: 0x115, from: 0xf52fe, to: 0x0}, + 454: {region: 0x5753, code: 0x106, from: 0xf5eea, to: 0x0}, + 455: {region: 0x584b, code: 0x5d, from: 0xfa421, to: 0x0}, + 456: {region: 0x584b, code: 0x4f, from: 0xf9f21, to: 0xfa469}, + 457: {region: 0x584b, code: 0x11f, from: 0xf9438, to: 0xf9f3e}, + 458: {region: 0x5944, code: 0x11c, from: 0xf5a81, to: 0xf9821}, + 459: {region: 0x5945, code: 0x11d, from: 0xf8cb6, to: 0x0}, + 460: {region: 0x5954, code: 0x5d, from: 0xf9e21, to: 0x0}, + 461: {region: 0x5954, code: 0x61, from: 0xf7057, to: 0xfa451}, + 462: {region: 0x5954, code: 0x88, from: 0xf6e21, to: 0xf7057}, + 463: {region: 0x5955, code: 0x11f, from: 0xf9438, to: 0xfa4af}, + 464: {region: 0x5955, code: 0x120, from: 0xf8c21, to: 0xf90f8}, + 465: {region: 0x5955, code: 0x11e, from: 0xf5c21, to: 0xf8c21}, + 466: {region: 0x5a41, code: 0x123, from: 0xf524e, to: 0x0}, + 467: {region: 0x5a41, code: 0x8122, from: 0xf8321, to: 0xf966d}, + 468: {region: 0x5a4d, code: 0x125, from: 0xfba21, to: 0x0}, + 469: {region: 0x5a4d, code: 0x124, from: 0xf6030, to: 0xfba21}, + 470: {region: 0x5a52, code: 0x126, from: 0xf9361, to: 0xf9cff}, + 471: {region: 0x5a52, code: 0x127, from: 0xf675b, to: 0xf9361}, + 472: {region: 0x5a57, code: 0xfa, from: 0xfb28c, to: 0x0}, + 473: {region: 0x5a57, code: 0x129, from: 0xfb242, to: 0xfb28c}, + 474: {region: 0x5a57, code: 0x12a, from: 0xfb101, to: 0xfb242}, + 475: {region: 0x5a57, code: 0x128, from: 0xf7892, to: 0xfb101}, + 476: {region: 0x5a57, code: 0xcd, from: 0xf6451, to: 0xf7892}, + 477: {region: 0x5a5a, code: 0x8108, from: 0x0, to: 0x0}, + 478: {region: 0x5a5a, code: 0x8109, from: 0x0, to: 0x0}, + 479: {region: 0x5a5a, code: 0x810a, from: 0x0, to: 0x0}, + 480: {region: 0x5a5a, code: 0x810b, from: 0x0, to: 0x0}, + 481: {region: 0x5a5a, code: 0x810c, from: 0x0, to: 0x0}, + 482: {region: 0x5a5a, code: 0x810d, from: 0x0, to: 0x0}, + 483: {region: 0x5a5a, code: 0x810f, from: 0x0, to: 0x0}, + 484: {region: 0x5a5a, code: 0x8111, from: 0xf1421, to: 0xfa681}, + 485: {region: 0x5a5a, code: 0x8112, from: 0x0, to: 0xfbb7e}, + 486: {region: 0x5a5a, code: 0x8114, from: 0x0, to: 0x0}, + 487: {region: 0x5a5a, code: 0x8116, from: 0x0, to: 0x0}, + 488: {region: 0x5a5a, code: 0x8117, from: 0x0, to: 0xf9f7e}, + 489: {region: 0x5a5a, code: 0x8118, from: 0x0, to: 0x0}, + 490: {region: 0x5a5a, code: 0x8119, from: 0x0, to: 0x0}, + 491: {region: 0x5a5a, code: 0x811a, from: 0x0, to: 0x0}, + 492: {region: 0x5a5a, code: 0x811b, from: 0x0, to: 0x0}, +} // Size: 5940 bytes + +// symbols holds symbol data of the form <n> <str>, where n is the length of +// the symbol string str. +const symbols string = "" + // Size: 1396 bytes + "\x00\x02Kz\x01$\x02A$\x02KM\x03৳\x02Bs\x02R$\x01P\x03р.\x03CA$\x04CN¥" + + "\x02¥\x03₡\x03Kč\x02kr\x03E£\x03₧\x03€\x02£\x03₾\x02FG\x01Q\x03HK$\x01L" + + "\x02kn\x02Ft\x02Rp\x03₪\x03₹\x04JP¥\x03៛\x02CF\x03₩\x03₸\x03₭\x03L£\x02R" + + "s\x02Lt\x02Ls\x02Ar\x01K\x03₮\x03MX$\x02RM\x03₦\x02C$\x03NZ$\x03₱\x03zł" + + "\x03₲\x03lei\x03₽\x02RF\x02Db\x03฿\x02T$\x03₺\x03NT$\x03₴\x03US$\x03₫" + + "\x04FCFA\x03EC$\x03CFA\x04CFPF\x01R\x02ZK\x05GH₵\x03AU$\x06ብር\x03***\x09" + + "د.إ.\u200f\x03AR$\x03BB$\x09د.ب.\u200f\x03BM$\x03BN$\x03BS$\x03BZ$\x03C" + + "L$\x03CO$\x03CU$\x03DO$\x09د.ج.\u200f\x09ج.م.\u200f\x03FJ$\x04UK£\x03GY$" + + "\x09د.ع.\u200f\x06ر.إ.\x03JM$\x09د.أ.\u200f\x0cف.ج.ق.\u200f\x09د.ك." + + "\u200f\x03KY$\x09ل.ل.\u200f\x09د.ل.\u200f\x09د.م.\u200f\x09أ.م.\u200f" + + "\x09ر.ع.\u200f\x09ر.ق.\u200f\x09ر.س.\u200f\x03SB$\x09د.س.\u200f\x06ج.س." + + "\x03SR$\x09ل.س.\u200f\x09د.ت.\u200f\x03TT$\x03UY$\x09ر.ي.\u200f\x03Fdj" + + "\x03Nfk\x01S\x04GB£\x03TSh\x03₼\x03ley\x03S£\x04Bds$\x03BD$\x02B$\x02Br" + + "\x04CUC$\x03$MN\x03RD$\x04FK£\x02G$\x04Íkr\x02J$\x03CI$\x02L$\x02N$\x07р" + + "уб.\x03SI$\x02S$\x02$U\x05лв.\x06щ.д.\x02$A\x03$CA\x04£ E\x05£ RU\x04$ " + + "HK\x03£L\x04$ ZN\x03$ T\x04$ SU\x04din.\x04КМ\x04Кч\x04зл\x07дин.\x04Тл" + + "\x01F\x03USh\x04Kčs\x03ECU\x02TK\x03kr.\x03Ksh\x03öS\x03BGK\x03BGJ\x04Cu" + + "b$\x02DM\x04Fl£\x04F.G.\x02FC\x04F.Rw\x03Nu.\x05KR₩\x05TH฿\x06Δρχ\x02Tk" + + "\x02$b\x02Kr\x02Gs\x03CFP\x03FBu\x01D\x04MOP$\x02MK\x02SR\x02Le\x04NAf." + + "\x01E\x02VT\x03WS$\x03BsF\x02Af\x03Naf\x02$a\x04Afl.\x02TL\x03B/.\x02S/" + + "\x03Gs.\x03Bs.\x02؋\x04¥CN\x03$HK\x08ریال\x03$MX\x03$NZ\x03$EC\x02UM\x02" + + "mk\x03$AR\x03$AU\x02FB\x03$BM\x03$BN\x03$BS\x03$BZ\x03$CL\x03$CO\x04£CY" + + "\x03£E\x03$FJ\x04£FK\x04£GB\x04£GI\x04£IE\x04£IL\x05₤IT\x04£LB\x04£MT" + + "\x03$NA\x02$C\x03$RH\x02FR\x03$SB\x03$SG\x03$SR\x03$TT\x03$US\x03$UY\x04" + + "FCFP\x02Kw\x05$\u00a0AU\x05$\u00a0HK\x05$\u00a0NZ\x05$\u00a0SG\x05$" + + "\u00a0US\x02DA\x01G\x02LS\x02DT\x02$R\x06руб\x07રૂ.\x0a\u200eCN¥\u200e" + + "\x06ל״י\x02֏\x03NKr\x03元\x03¥\x03\u200b\x02LE\x02Kn\x06сом\x02zl\x02rb" + + "\x03MTn\x06ден\x04кр\x03NAf\x03Afl\x0cनेरू\x06रू\x02ر\x04Esc.\x06\u200bP" + + "TE\x04XXXX\x03ლ\x06ТМТ\x03Dkr\x03Skr\x03Nkr\x07රු.\x0fසිෆ්එ\x03NIS\x05Le" + + "kë\x03den\x02r.\x03BR$\x03Ekr\x04EG£\x04IE£\x03Ikr\x03Rs.\x04AUD$\x04NZD" + + "$\x07крб.\x05soʻm\x06сўм\x03₩\x03ILS\x02P.\x03Zł" + +type curToIndex struct { + cur uint16 + idx uint16 +} + +var normalLangIndex = []uint16{ // 753 elements + // Entry 0 - 3F + 0x0000, 0x0014, 0x0014, 0x0014, 0x0017, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0019, 0x0019, 0x001c, 0x001c, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0035, 0x0035, 0x0035, 0x0035, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, + 0x0037, 0x0037, 0x0037, 0x0037, 0x0038, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003b, 0x003b, 0x003e, + 0x003e, 0x0040, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, + 0x0048, 0x0048, 0x0049, 0x0049, 0x004a, 0x004a, 0x005b, 0x005b, + // Entry 40 - 7F + 0x005b, 0x005b, 0x005b, 0x005d, 0x005d, 0x005d, 0x005e, 0x005e, + 0x005f, 0x006d, 0x006d, 0x006d, 0x006d, 0x007e, 0x0084, 0x0084, + 0x0084, 0x0084, 0x008d, 0x008d, 0x008d, 0x008e, 0x008e, 0x008f, + 0x008f, 0x0090, 0x0090, 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, + 0x0098, 0x0098, 0x0099, 0x0099, 0x009b, 0x009b, 0x009f, 0x009f, + 0x009f, 0x00a0, 0x00a0, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + 0x00a8, 0x00a9, 0x00aa, 0x00aa, 0x00aa, 0x00af, 0x00af, 0x00af, + 0x00af, 0x00af, 0x00af, 0x00af, 0x00b5, 0x00b5, 0x00b6, 0x00b6, + // Entry 80 - BF + 0x00b9, 0x00b9, 0x00b9, 0x00bc, 0x00bc, 0x00bc, 0x00be, 0x00c0, + 0x00c0, 0x00c1, 0x00c2, 0x00c2, 0x00c2, 0x00d7, 0x00d8, 0x00d8, + 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00df, + 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e2, 0x00e3, + 0x00e4, 0x00e4, 0x00e5, 0x00e7, 0x00e7, 0x00e7, 0x00e8, 0x00e8, + 0x00e9, 0x00eb, 0x00ec, 0x00ec, 0x00ed, 0x00ed, 0x00ed, 0x00ed, + 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, + 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f6, 0x00f7, 0x00f7, + // Entry C0 - FF + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff, + 0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, + 0x0106, 0x0106, 0x0107, 0x0108, 0x0109, 0x0109, 0x010a, 0x010b, + 0x010d, 0x010d, 0x010e, 0x0110, 0x0111, 0x0112, 0x0112, 0x0113, + 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0118, 0x0118, 0x0119, + 0x0119, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011d, 0x011d, + 0x011d, 0x012f, 0x0134, 0x0136, 0x0137, 0x0138, 0x013a, 0x013c, + 0x013d, 0x013f, 0x0141, 0x0141, 0x0142, 0x0142, 0x0143, 0x0144, + // Entry 100 - 13F + 0x0145, 0x0145, 0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, + 0x0154, 0x0155, 0x0157, 0x0159, 0x015a, 0x015f, 0x015f, 0x0161, + 0x0161, 0x0161, 0x0161, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016d, 0x016e, 0x016e, 0x017f, 0x017f, 0x0183, 0x0183, 0x0184, + 0x0185, 0x0185, 0x01ab, 0x01ab, 0x01ab, 0x01ac, 0x01ac, 0x01ac, + 0x01cd, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01cf, + 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d1, 0x01d1, 0x01d1, 0x01d2, + 0x01d3, 0x01d5, 0x01d5, 0x01d5, 0x01d5, 0x01d6, 0x01d6, 0x01d6, + // Entry 140 - 17F + 0x01d7, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d9, + 0x01da, 0x01da, 0x01db, 0x01db, 0x01db, 0x01dc, 0x01dd, 0x01dd, + 0x01dd, 0x01dd, 0x01dd, 0x01e3, 0x01e3, 0x01e6, 0x01e6, 0x01e8, + 0x01e8, 0x01ef, 0x01ef, 0x01f2, 0x01f2, 0x01f2, 0x01f2, 0x01f3, + 0x01f3, 0x01f3, 0x01f4, 0x01f4, 0x01f4, 0x01f4, 0x01f5, 0x01f6, + 0x01f6, 0x01f6, 0x01f7, 0x01f7, 0x01fc, 0x01fc, 0x01fe, 0x01fe, + 0x0210, 0x0211, 0x0211, 0x0216, 0x0216, 0x0228, 0x0228, 0x022b, + 0x022b, 0x022f, 0x022f, 0x0230, 0x0230, 0x0231, 0x0231, 0x023d, + // Entry 180 - 1BF + 0x023d, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0247, 0x0247, + 0x0247, 0x0247, 0x0247, 0x0248, 0x0248, 0x0248, 0x0252, 0x0252, + 0x0253, 0x0253, 0x0253, 0x0254, 0x0254, 0x0254, 0x0255, 0x0255, + 0x0258, 0x0258, 0x0258, 0x0258, 0x0259, 0x0259, 0x025d, 0x025d, + 0x025d, 0x025d, 0x025e, 0x025e, 0x025f, 0x025f, 0x0262, 0x0262, + 0x0264, 0x0264, 0x0265, 0x0265, 0x0265, 0x0265, 0x0265, 0x0265, + 0x0265, 0x0266, 0x0266, 0x0266, 0x0266, 0x0266, 0x0266, 0x0266, + 0x0266, 0x0266, 0x0275, 0x0275, 0x0276, 0x0276, 0x027b, 0x027b, + // Entry 1C0 - 1FF + 0x027c, 0x027c, 0x027d, 0x027d, 0x027e, 0x027f, 0x027f, 0x027f, + 0x027f, 0x0281, 0x0281, 0x0281, 0x0281, 0x0281, 0x0294, 0x0294, + 0x0295, 0x0295, 0x0296, 0x0296, 0x0297, 0x0297, 0x029c, 0x029c, + 0x029d, 0x029d, 0x029e, 0x029f, 0x029f, 0x02a0, 0x02a0, 0x02a1, + 0x02a1, 0x02a2, 0x02a2, 0x02a2, 0x02a2, 0x02ae, 0x02ae, 0x02b1, + 0x02b1, 0x02b4, 0x02b4, 0x02b6, 0x02b6, 0x02ba, 0x02bb, 0x02bb, + 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02c3, 0x02c3, 0x02c4, + 0x02c4, 0x02c4, 0x02c5, 0x02c5, 0x02d7, 0x02d7, 0x02d7, 0x02d7, + // Entry 200 - 23F + 0x02d7, 0x02d7, 0x02d7, 0x02d7, 0x02d9, 0x02d9, 0x02d9, 0x02df, + 0x02e0, 0x02e0, 0x02e1, 0x02e2, 0x02e2, 0x02e3, 0x02e4, 0x02e4, + 0x02e4, 0x02e5, 0x02e5, 0x02e5, 0x02e5, 0x02e5, 0x02e5, 0x02e5, + 0x02e5, 0x02e7, 0x02e7, 0x02e7, 0x02e8, 0x02e8, 0x02e9, 0x02e9, + 0x02ea, 0x02ea, 0x02ea, 0x02ec, 0x02ec, 0x02ee, 0x02ef, 0x02f0, + 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02ff, 0x02ff, 0x02ff, 0x02ff, + 0x0300, 0x0300, 0x0303, 0x0304, 0x0304, 0x0304, 0x0306, 0x0306, + 0x0306, 0x0307, 0x0308, 0x0309, 0x030a, 0x030b, 0x030b, 0x030c, + // Entry 240 - 27F + 0x030e, 0x0310, 0x0310, 0x0310, 0x0310, 0x0311, 0x0311, 0x0322, + 0x0323, 0x0323, 0x0324, 0x0324, 0x032c, 0x032e, 0x032f, 0x0330, + 0x0331, 0x0331, 0x0331, 0x0332, 0x0332, 0x0333, 0x0333, 0x0334, + 0x0334, 0x0335, 0x0335, 0x0336, 0x0336, 0x0336, 0x033a, 0x033a, + 0x033a, 0x033c, 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, + 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, 0x0340, 0x0340, 0x034e, + 0x034e, 0x0352, 0x0352, 0x0352, 0x0352, 0x0352, 0x0352, 0x0352, + 0x0352, 0x0352, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0356, + // Entry 280 - 2BF + 0x0358, 0x0358, 0x0359, 0x0359, 0x035f, 0x035f, 0x035f, 0x035f, + 0x035f, 0x035f, 0x0365, 0x0365, 0x0365, 0x0365, 0x0365, 0x0365, + 0x0365, 0x0365, 0x037d, 0x037d, 0x037d, 0x037d, 0x0380, 0x0381, + 0x0381, 0x0381, 0x0382, 0x0382, 0x0385, 0x0385, 0x0386, 0x0388, + 0x038b, 0x038d, 0x038d, 0x038e, 0x038f, 0x038f, 0x0391, 0x0391, + 0x0392, 0x0393, 0x0393, 0x0393, 0x0395, 0x0395, 0x0395, 0x0398, + 0x0398, 0x039d, 0x039d, 0x039d, 0x039d, 0x039d, 0x039d, 0x039d, + 0x039d, 0x039f, 0x039f, 0x03b2, 0x03b2, 0x03b5, 0x03b6, 0x03b6, + // Entry 2C0 - 2FF + 0x03b7, 0x03b8, 0x03b8, 0x03ba, 0x03ba, 0x03ba, 0x03ba, 0x03bb, + 0x03bc, 0x03bc, 0x03bc, 0x03bc, 0x03bc, 0x03be, 0x03be, 0x03be, + 0x03be, 0x03bf, 0x03bf, 0x03bf, 0x03c1, 0x03c1, 0x03c1, 0x03c1, + 0x03c2, 0x03c2, 0x03c2, 0x03c2, 0x03c2, 0x03c2, 0x03c3, 0x03c3, + 0x03c3, 0x03c6, 0x03c6, 0x03c6, 0x03c6, 0x03ca, 0x03ca, 0x03ca, + 0x03cb, 0x03cd, 0x03cf, 0x03d3, 0x03d5, 0x03d6, 0x03d6, 0x03d8, + 0x03d8, +} // Size: 1530 bytes + +var normalSymIndex = []curToIndex{ // 984 elements + 0: {cur: 0x13, idx: 0x6}, + 1: {cur: 0x2e, idx: 0x13}, + 2: {cur: 0x3a, idx: 0x1c}, + 3: {cur: 0x43, idx: 0x20}, + 4: {cur: 0x5d, idx: 0x3b}, + 5: {cur: 0x62, idx: 0x3f}, + 6: {cur: 0x71, idx: 0x4b}, + 7: {cur: 0x7b, idx: 0x5a}, + 8: {cur: 0x7c, idx: 0x5e}, + 9: {cur: 0x84, idx: 0x62}, + 10: {cur: 0x8c, idx: 0x6e}, + 11: {cur: 0xb1, idx: 0x90}, + 12: {cur: 0xbf, idx: 0x9e}, + 13: {cur: 0xf4, idx: 0xc7}, + 14: {cur: 0xfa, idx: 0xcf}, + 15: {cur: 0x103, idx: 0xd3}, + 16: {cur: 0x107, idx: 0xd7}, + 17: {cur: 0x10e, idx: 0xdc}, + 18: {cur: 0x113, idx: 0xe0}, + 19: {cur: 0x115, idx: 0xe4}, + 20: {cur: 0xb1, idx: 0x0}, + 21: {cur: 0xe9, idx: 0xbc}, + 22: {cur: 0x123, idx: 0xe9}, + 23: {cur: 0xb8, idx: 0x4}, + 24: {cur: 0x66, idx: 0xee}, + 25: {cur: 0x13, idx: 0xf4}, + 26: {cur: 0x5c, idx: 0xf8}, + 27: {cur: 0xe9, idx: 0xbc}, + 28: {cur: 0x0, idx: 0xff}, + 29: {cur: 0x2, idx: 0x103}, + 30: {cur: 0x13, idx: 0xf4}, + 31: {cur: 0x23, idx: 0x115}, + 32: {cur: 0x53, idx: 0x13f}, + 33: {cur: 0x57, idx: 0x149}, + 34: {cur: 0x7d, idx: 0x160}, + 35: {cur: 0x7e, idx: 0x16a}, + 36: {cur: 0x83, idx: 0x175}, + 37: {cur: 0x88, idx: 0x17f}, + 38: {cur: 0x8d, idx: 0x18c}, + 39: {cur: 0x91, idx: 0x19a}, + 40: {cur: 0x9c, idx: 0x1a4}, + 41: {cur: 0x9d, idx: 0x1ae}, + 42: {cur: 0xaa, idx: 0x1b8}, + 43: {cur: 0xc0, idx: 0x1c2}, + 44: {cur: 0xcc, idx: 0x1cc}, + 45: {cur: 0xd4, idx: 0x1d6}, + 46: {cur: 0xd7, idx: 0x1e4}, + 47: {cur: 0xd8, idx: 0x1ee}, + 48: {cur: 0xe7, idx: 0x1f9}, + 49: {cur: 0xe9, idx: 0xbc}, + 50: {cur: 0xee, idx: 0x203}, + 51: {cur: 0x11d, idx: 0x215}, + 52: {cur: 0x50, idx: 0x21f}, + 53: {cur: 0x58, idx: 0x223}, + 54: {cur: 0xd8, idx: 0x0}, + 55: {cur: 0xe0, idx: 0x227}, + 56: {cur: 0x62, idx: 0x229}, + 57: {cur: 0xe3, idx: 0x3f}, + 58: {cur: 0xf5, idx: 0x22e}, + 59: {cur: 0x84, idx: 0x25}, + 60: {cur: 0xe9, idx: 0xbc}, + 61: {cur: 0xfa, idx: 0x4}, + 62: {cur: 0x16, idx: 0x232}, + 63: {cur: 0xe9, idx: 0xbc}, + 64: {cur: 0x16, idx: 0x232}, + 65: {cur: 0x2e, idx: 0x0}, + 66: {cur: 0x37, idx: 0x24a}, + 67: {cur: 0x3a, idx: 0x0}, + 68: {cur: 0x84, idx: 0x25}, + 69: {cur: 0xbf, idx: 0x0}, + 70: {cur: 0xd1, idx: 0xb2}, + 71: {cur: 0xfa, idx: 0x4}, + 72: {cur: 0x125, idx: 0x8a}, + 73: {cur: 0xf5, idx: 0x22e}, + 74: {cur: 0x13, idx: 0x0}, + 75: {cur: 0x21, idx: 0x286}, + 76: {cur: 0x2e, idx: 0x0}, + 77: {cur: 0x3a, idx: 0x0}, + 78: {cur: 0x43, idx: 0x0}, + 79: {cur: 0x62, idx: 0x0}, + 80: {cur: 0x71, idx: 0x0}, + 81: {cur: 0x7b, idx: 0x0}, + 82: {cur: 0x7c, idx: 0x0}, + 83: {cur: 0x84, idx: 0x0}, + 84: {cur: 0x8c, idx: 0x0}, + 85: {cur: 0xb1, idx: 0x0}, + 86: {cur: 0xbf, idx: 0x0}, + 87: {cur: 0xf4, idx: 0x0}, + 88: {cur: 0xfa, idx: 0x28c}, + 89: {cur: 0x103, idx: 0x0}, + 90: {cur: 0x10e, idx: 0x0}, + 91: {cur: 0x1b, idx: 0xc}, + 92: {cur: 0xe9, idx: 0xbc}, + 93: {cur: 0x43, idx: 0x25}, + 94: {cur: 0x43, idx: 0x20}, + 95: {cur: 0x13, idx: 0x293}, + 96: {cur: 0x2e, idx: 0x0}, + 97: {cur: 0x3a, idx: 0x296}, + 98: {cur: 0x43, idx: 0x0}, + 99: {cur: 0x62, idx: 0x29f}, + 100: {cur: 0x71, idx: 0x2a5}, + 101: {cur: 0x7b, idx: 0x0}, + 102: {cur: 0x84, idx: 0x0}, + 103: {cur: 0x8c, idx: 0x0}, + 104: {cur: 0xbf, idx: 0x2ae}, + 105: {cur: 0xf4, idx: 0x0}, + 106: {cur: 0xfa, idx: 0x2b7}, + 107: {cur: 0x103, idx: 0x0}, + 108: {cur: 0x10e, idx: 0x0}, + 109: {cur: 0x13, idx: 0x0}, + 110: {cur: 0x18, idx: 0x9}, + 111: {cur: 0x2e, idx: 0x0}, + 112: {cur: 0x3a, idx: 0x0}, + 113: {cur: 0x43, idx: 0x0}, + 114: {cur: 0x62, idx: 0x0}, + 115: {cur: 0x71, idx: 0x0}, + 116: {cur: 0x74, idx: 0x51}, + 117: {cur: 0x7b, idx: 0x0}, + 118: {cur: 0x84, idx: 0x25}, + 119: {cur: 0xb1, idx: 0x0}, + 120: {cur: 0xbf, idx: 0x0}, + 121: {cur: 0xd0, idx: 0x2bc}, + 122: {cur: 0xe9, idx: 0xbc}, + 123: {cur: 0xfa, idx: 0x0}, + 124: {cur: 0x10e, idx: 0x0}, + 125: {cur: 0x115, idx: 0x0}, + 126: {cur: 0x18, idx: 0x2c1}, + 127: {cur: 0x4d, idx: 0x2c6}, + 128: {cur: 0x84, idx: 0x25}, + 129: {cur: 0xc8, idx: 0x2cb}, + 130: {cur: 0xd0, idx: 0x2d0}, + 131: {cur: 0xf2, idx: 0x2d8}, + 132: {cur: 0x13, idx: 0xf4}, + 133: {cur: 0x2e, idx: 0x0}, + 134: {cur: 0x3a, idx: 0x0}, + 135: {cur: 0x43, idx: 0x25}, + 136: {cur: 0x5b, idx: 0x37}, + 137: {cur: 0xb1, idx: 0x0}, + 138: {cur: 0xe9, idx: 0xbc}, + 139: {cur: 0xfa, idx: 0x0}, + 140: {cur: 0x10e, idx: 0x0}, + 141: {cur: 0x61, idx: 0x2dd}, + 142: {cur: 0xd1, idx: 0xb2}, + 143: {cur: 0xf9, idx: 0x2df}, + 144: {cur: 0xfa, idx: 0x4}, + 145: {cur: 0x13, idx: 0xf4}, + 146: {cur: 0x48, idx: 0x2e3}, + 147: {cur: 0x4d, idx: 0x2c}, + 148: {cur: 0x7b, idx: 0x0}, + 149: {cur: 0x7c, idx: 0x0}, + 150: {cur: 0x103, idx: 0x0}, + 151: {cur: 0x110, idx: 0x2e8}, + 152: {cur: 0xd1, idx: 0xb2}, + 153: {cur: 0x8c, idx: 0x0}, + 154: {cur: 0xe9, idx: 0xbc}, + 155: {cur: 0x13, idx: 0xf4}, + 156: {cur: 0x51, idx: 0x2ef}, + 157: {cur: 0xe9, idx: 0xbc}, + 158: {cur: 0xfa, idx: 0x4}, + 159: {cur: 0x85, idx: 0x2f3}, + 160: {cur: 0x12, idx: 0x2f7}, + 161: {cur: 0x13, idx: 0xf4}, + 162: {cur: 0x20, idx: 0x2fb}, + 163: {cur: 0x22, idx: 0x2ff}, + 164: {cur: 0x4f, idx: 0x308}, + 165: {cur: 0x84, idx: 0x25}, + 166: {cur: 0xe9, idx: 0xbc}, + 167: {cur: 0xfa, idx: 0x4}, + 168: {cur: 0x5d, idx: 0x0}, + 169: {cur: 0x98, idx: 0x2dd}, + 170: {cur: 0x13, idx: 0x0}, + 171: {cur: 0x84, idx: 0x25}, + 172: {cur: 0xc8, idx: 0xa6}, + 173: {cur: 0xe9, idx: 0xbc}, + 174: {cur: 0xfa, idx: 0x4}, + 175: {cur: 0x13, idx: 0xf4}, + 176: {cur: 0x33, idx: 0x31d}, + 177: {cur: 0x7b, idx: 0x0}, + 178: {cur: 0x8c, idx: 0x321}, + 179: {cur: 0xe9, idx: 0x327}, + 180: {cur: 0x107, idx: 0x0}, + 181: {cur: 0x85, idx: 0x2f3}, + 182: {cur: 0x13, idx: 0xf4}, + 183: {cur: 0x66, idx: 0xee}, + 184: {cur: 0xe9, idx: 0xbc}, + 185: {cur: 0x6c, idx: 0x32d}, + 186: {cur: 0xe9, idx: 0xbc}, + 187: {cur: 0xfa, idx: 0x4}, + 188: {cur: 0x84, idx: 0x25}, + 189: {cur: 0xfa, idx: 0x4}, + 190: {cur: 0x84, idx: 0x62}, + 191: {cur: 0xfa, idx: 0xcf}, + 192: {cur: 0x10e, idx: 0x4}, + 193: {cur: 0x10e, idx: 0x4}, + 194: {cur: 0x13, idx: 0x4}, + 195: {cur: 0x2e, idx: 0x0}, + 196: {cur: 0x3a, idx: 0x0}, + 197: {cur: 0x43, idx: 0x0}, + 198: {cur: 0x5d, idx: 0x0}, + 199: {cur: 0x62, idx: 0x0}, + 200: {cur: 0x71, idx: 0x0}, + 201: {cur: 0x7b, idx: 0x0}, + 202: {cur: 0x7c, idx: 0x0}, + 203: {cur: 0x84, idx: 0x0}, + 204: {cur: 0x8c, idx: 0x0}, + 205: {cur: 0xb1, idx: 0x0}, + 206: {cur: 0xbf, idx: 0x0}, + 207: {cur: 0xd6, idx: 0x7e}, + 208: {cur: 0xf4, idx: 0x0}, + 209: {cur: 0xfa, idx: 0x0}, + 210: {cur: 0x103, idx: 0x0}, + 211: {cur: 0x107, idx: 0x0}, + 212: {cur: 0x10e, idx: 0x0}, + 213: {cur: 0x113, idx: 0x0}, + 214: {cur: 0x115, idx: 0x340}, + 215: {cur: 0x1a, idx: 0x4}, + 216: {cur: 0x24, idx: 0x344}, + 217: {cur: 0x25, idx: 0x4}, + 218: {cur: 0x32, idx: 0x4}, + 219: {cur: 0x35, idx: 0x16}, + 220: {cur: 0x39, idx: 0x4}, + 221: {cur: 0x3a, idx: 0x4}, + 222: {cur: 0x13, idx: 0x4}, + 223: {cur: 0xbf, idx: 0x4}, + 224: {cur: 0x13, idx: 0x4}, + 225: {cur: 0x51, idx: 0x2ef}, + 226: {cur: 0x10e, idx: 0x4}, + 227: {cur: 0x58, idx: 0x223}, + 228: {cur: 0x5f, idx: 0x4}, + 229: {cur: 0x60, idx: 0x3f}, + 230: {cur: 0x62, idx: 0x229}, + 231: {cur: 0x10e, idx: 0x4}, + 232: {cur: 0x66, idx: 0xee}, + 233: {cur: 0x62, idx: 0x229}, + 234: {cur: 0x67, idx: 0x3f}, + 235: {cur: 0x68, idx: 0x348}, + 236: {cur: 0x70, idx: 0x4}, + 237: {cur: 0x82, idx: 0x4}, + 238: {cur: 0x85, idx: 0x2f3}, + 239: {cur: 0x13, idx: 0x4}, + 240: {cur: 0x10e, idx: 0x4}, + 241: {cur: 0x8e, idx: 0x4}, + 242: {cur: 0x10e, idx: 0x4}, + 243: {cur: 0x93, idx: 0x4}, + 244: {cur: 0x123, idx: 0xe9}, + 245: {cur: 0xa2, idx: 0x87}, + 246: {cur: 0xa9, idx: 0x34a}, + 247: {cur: 0x10e, idx: 0x4}, + 248: {cur: 0x62, idx: 0x229}, + 249: {cur: 0xad, idx: 0x7e}, + 250: {cur: 0xb0, idx: 0x34f}, + 251: {cur: 0xb4, idx: 0x94}, + 252: {cur: 0xb8, idx: 0x4}, + 253: {cur: 0x13, idx: 0x4}, + 254: {cur: 0xb9, idx: 0x97}, + 255: {cur: 0x13, idx: 0x4}, + 256: {cur: 0xbf, idx: 0x4}, + 257: {cur: 0xbf, idx: 0x4}, + 258: {cur: 0xc5, idx: 0x8a}, + 259: {cur: 0xc6, idx: 0xa2}, + 260: {cur: 0xc7, idx: 0x7e}, + 261: {cur: 0xbf, idx: 0x4}, + 262: {cur: 0xd3, idx: 0xb6}, + 263: {cur: 0xd5, idx: 0x4}, + 264: {cur: 0xd6, idx: 0x352}, + 265: {cur: 0xda, idx: 0x30}, + 266: {cur: 0xdb, idx: 0x4}, + 267: {cur: 0x62, idx: 0x229}, + 268: {cur: 0xdc, idx: 0x3f}, + 269: {cur: 0xdf, idx: 0x355}, + 270: {cur: 0x62, idx: 0x229}, + 271: {cur: 0xe3, idx: 0x3f}, + 272: {cur: 0x8, idx: 0x358}, + 273: {cur: 0xe8, idx: 0x35d}, + 274: {cur: 0xbf, idx: 0x4}, + 275: {cur: 0xef, idx: 0xc0}, + 276: {cur: 0xf3, idx: 0x4}, + 277: {cur: 0x13, idx: 0x4}, + 278: {cur: 0xf5, idx: 0x22e}, + 279: {cur: 0xf9, idx: 0x2df}, + 280: {cur: 0x10e, idx: 0x4}, + 281: {cur: 0x105, idx: 0x35f}, + 282: {cur: 0x106, idx: 0x362}, + 283: {cur: 0x123, idx: 0xe9}, + 284: {cur: 0x125, idx: 0x8a}, + 285: {cur: 0x13, idx: 0x0}, + 286: {cur: 0x2e, idx: 0x0}, + 287: {cur: 0x43, idx: 0x0}, + 288: {cur: 0x5b, idx: 0x37}, + 289: {cur: 0x62, idx: 0x0}, + 290: {cur: 0x71, idx: 0x0}, + 291: {cur: 0x7b, idx: 0x0}, + 292: {cur: 0x7c, idx: 0x0}, + 293: {cur: 0x84, idx: 0x0}, + 294: {cur: 0x8c, idx: 0x0}, + 295: {cur: 0xb1, idx: 0x0}, + 296: {cur: 0xbf, idx: 0x0}, + 297: {cur: 0xe9, idx: 0xbc}, + 298: {cur: 0xf4, idx: 0x0}, + 299: {cur: 0xfa, idx: 0x4}, + 300: {cur: 0x107, idx: 0x0}, + 301: {cur: 0x10e, idx: 0x0}, + 302: {cur: 0x113, idx: 0x0}, + 303: {cur: 0x3a, idx: 0x0}, + 304: {cur: 0x5d, idx: 0x0}, + 305: {cur: 0xe9, idx: 0x0}, + 306: {cur: 0xfa, idx: 0x0}, + 307: {cur: 0x103, idx: 0x0}, + 308: {cur: 0x11, idx: 0x4}, + 309: {cur: 0xfa, idx: 0xcf}, + 310: {cur: 0x27, idx: 0x10}, + 311: {cur: 0x2e, idx: 0x13}, + 312: {cur: 0x41, idx: 0x4}, + 313: {cur: 0xfa, idx: 0xcf}, + 314: {cur: 0x44, idx: 0x4}, + 315: {cur: 0xfa, idx: 0xcf}, + 316: {cur: 0x46, idx: 0x28}, + 317: {cur: 0x4a, idx: 0x4}, + 318: {cur: 0xfa, idx: 0xcf}, + 319: {cur: 0x52, idx: 0x256}, + 320: {cur: 0xfa, idx: 0xcf}, + 321: {cur: 0xfa, idx: 0x4}, + 322: {cur: 0x107, idx: 0xd7}, + 323: {cur: 0x6d, idx: 0x49}, + 324: {cur: 0x72, idx: 0x4f}, + 325: {cur: 0x4, idx: 0x36a}, + 326: {cur: 0x8, idx: 0x36d}, + 327: {cur: 0x9, idx: 0x1}, + 328: {cur: 0x11, idx: 0x371}, + 329: {cur: 0x13, idx: 0xf4}, + 330: {cur: 0x14, idx: 0x374}, + 331: {cur: 0x43, idx: 0x20}, + 332: {cur: 0xb1, idx: 0x4}, + 333: {cur: 0x115, idx: 0x0}, + 334: {cur: 0xbb, idx: 0x9b}, + 335: {cur: 0xc1, idx: 0x37c}, + 336: {cur: 0xc3, idx: 0x380}, + 337: {cur: 0xc6, idx: 0xa2}, + 338: {cur: 0xfa, idx: 0x4}, + 339: {cur: 0xcb, idx: 0x383}, + 340: {cur: 0xfa, idx: 0x4}, + 341: {cur: 0x84, idx: 0x25}, + 342: {cur: 0xfa, idx: 0x4}, + 343: {cur: 0xfa, idx: 0xcf}, + 344: {cur: 0xff, idx: 0x4}, + 345: {cur: 0x102, idx: 0x387}, + 346: {cur: 0x13, idx: 0xf4}, + 347: {cur: 0x56, idx: 0x30}, + 348: {cur: 0x84, idx: 0x25}, + 349: {cur: 0xe9, idx: 0xbc}, + 350: {cur: 0xfa, idx: 0x4}, + 351: {cur: 0x5b, idx: 0x37}, + 352: {cur: 0xe9, idx: 0xbc}, + 353: {cur: 0x4, idx: 0x38b}, + 354: {cur: 0x3a, idx: 0x296}, + 355: {cur: 0x43, idx: 0x38e}, + 356: {cur: 0x71, idx: 0x393}, + 357: {cur: 0x7e, idx: 0x397}, + 358: {cur: 0x84, idx: 0x25}, + 359: {cur: 0xb1, idx: 0x3a0}, + 360: {cur: 0xbf, idx: 0x3a4}, + 361: {cur: 0xe9, idx: 0xbc}, + 362: {cur: 0xfa, idx: 0x4}, + 363: {cur: 0x10e, idx: 0x3a8}, + 364: {cur: 0x69, idx: 0x46}, + 365: {cur: 0xaa, idx: 0x3ac}, + 366: {cur: 0x13, idx: 0x0}, + 367: {cur: 0x2e, idx: 0x0}, + 368: {cur: 0x3a, idx: 0x0}, + 369: {cur: 0x43, idx: 0x0}, + 370: {cur: 0x5e, idx: 0x3af}, + 371: {cur: 0x71, idx: 0x0}, + 372: {cur: 0x7b, idx: 0x0}, + 373: {cur: 0x7c, idx: 0x0}, + 374: {cur: 0x84, idx: 0x25}, + 375: {cur: 0x8c, idx: 0x0}, + 376: {cur: 0xb1, idx: 0x0}, + 377: {cur: 0xbf, idx: 0x0}, + 378: {cur: 0xf4, idx: 0x0}, + 379: {cur: 0xfa, idx: 0x4}, + 380: {cur: 0x103, idx: 0x0}, + 381: {cur: 0x10e, idx: 0x0}, + 382: {cur: 0x115, idx: 0x0}, + 383: {cur: 0x84, idx: 0x25}, + 384: {cur: 0xc6, idx: 0xa2}, + 385: {cur: 0xe9, idx: 0xbc}, + 386: {cur: 0xfa, idx: 0x4}, + 387: {cur: 0x51, idx: 0x30}, + 388: {cur: 0x51, idx: 0x2ef}, + 389: {cur: 0x11, idx: 0x3b2}, + 390: {cur: 0x13, idx: 0x3b6}, + 391: {cur: 0x1d, idx: 0x3ba}, + 392: {cur: 0x25, idx: 0x3bd}, + 393: {cur: 0x26, idx: 0x3c1}, + 394: {cur: 0x32, idx: 0x3c5}, + 395: {cur: 0x39, idx: 0x3c9}, + 396: {cur: 0x3a, idx: 0x296}, + 397: {cur: 0x41, idx: 0x3cd}, + 398: {cur: 0x43, idx: 0x0}, + 399: {cur: 0x44, idx: 0x3d1}, + 400: {cur: 0x4c, idx: 0x3d5}, + 401: {cur: 0x5f, idx: 0x3de}, + 402: {cur: 0x60, idx: 0x3e2}, + 403: {cur: 0x61, idx: 0x2dd}, + 404: {cur: 0x62, idx: 0x3e7}, + 405: {cur: 0x67, idx: 0x3ec}, + 406: {cur: 0x71, idx: 0x0}, + 407: {cur: 0x78, idx: 0x3f1}, + 408: {cur: 0x79, idx: 0x3f6}, + 409: {cur: 0x81, idx: 0x3fb}, + 410: {cur: 0x84, idx: 0x0}, + 411: {cur: 0x91, idx: 0x401}, + 412: {cur: 0xac, idx: 0x406}, + 413: {cur: 0xb1, idx: 0x3a0}, + 414: {cur: 0xb8, idx: 0x40b}, + 415: {cur: 0xbf, idx: 0x3a4}, + 416: {cur: 0xcd, idx: 0x412}, + 417: {cur: 0xd5, idx: 0x419}, + 418: {cur: 0xdb, idx: 0x41d}, + 419: {cur: 0xe1, idx: 0x421}, + 420: {cur: 0xf3, idx: 0x425}, + 421: {cur: 0xf4, idx: 0x0}, + 422: {cur: 0xfa, idx: 0x429}, + 423: {cur: 0xff, idx: 0x42d}, + 424: {cur: 0x106, idx: 0x362}, + 425: {cur: 0x10e, idx: 0x0}, + 426: {cur: 0x115, idx: 0x431}, + 427: {cur: 0x24, idx: 0x344}, + 428: {cur: 0x11, idx: 0x0}, + 429: {cur: 0x13, idx: 0x439}, + 430: {cur: 0x25, idx: 0x0}, + 431: {cur: 0x26, idx: 0x0}, + 432: {cur: 0x32, idx: 0x0}, + 433: {cur: 0x39, idx: 0x0}, + 434: {cur: 0x3a, idx: 0x4}, + 435: {cur: 0x41, idx: 0x0}, + 436: {cur: 0x43, idx: 0x20}, + 437: {cur: 0x44, idx: 0x0}, + 438: {cur: 0x5f, idx: 0x0}, + 439: {cur: 0x60, idx: 0x0}, + 440: {cur: 0x62, idx: 0x3f}, + 441: {cur: 0x67, idx: 0x0}, + 442: {cur: 0x71, idx: 0x43f}, + 443: {cur: 0x7b, idx: 0x0}, + 444: {cur: 0x7c, idx: 0x0}, + 445: {cur: 0x84, idx: 0x25}, + 446: {cur: 0x8c, idx: 0x0}, + 447: {cur: 0x91, idx: 0x0}, + 448: {cur: 0xb1, idx: 0x0}, + 449: {cur: 0xb8, idx: 0x0}, + 450: {cur: 0xbf, idx: 0x445}, + 451: {cur: 0xd5, idx: 0x0}, + 452: {cur: 0xdb, idx: 0x44b}, + 453: {cur: 0xe1, idx: 0x0}, + 454: {cur: 0xf3, idx: 0x0}, + 455: {cur: 0xfa, idx: 0x451}, + 456: {cur: 0xff, idx: 0x0}, + 457: {cur: 0x103, idx: 0x0}, + 458: {cur: 0x107, idx: 0x0}, + 459: {cur: 0x113, idx: 0x0}, + 460: {cur: 0x115, idx: 0x0}, + 461: {cur: 0x3b, idx: 0x315}, + 462: {cur: 0x50, idx: 0x21f}, + 463: {cur: 0x53, idx: 0x457}, + 464: {cur: 0x69, idx: 0x46}, + 465: {cur: 0x75, idx: 0x45a}, + 466: {cur: 0x88, idx: 0x6b}, + 467: {cur: 0x61, idx: 0x0}, + 468: {cur: 0x98, idx: 0x2dd}, + 469: {cur: 0xa2, idx: 0x87}, + 470: {cur: 0xaa, idx: 0x3ac}, + 471: {cur: 0xad, idx: 0x7e}, + 472: {cur: 0xd3, idx: 0xb6}, + 473: {cur: 0xd6, idx: 0x352}, + 474: {cur: 0xe7, idx: 0x45c}, + 475: {cur: 0xee, idx: 0x45f}, + 476: {cur: 0x105, idx: 0x35f}, + 477: {cur: 0x13, idx: 0xf4}, + 478: {cur: 0x3a, idx: 0x9b}, + 479: {cur: 0x5f, idx: 0x153}, + 480: {cur: 0xd5, idx: 0x27c}, + 481: {cur: 0xe9, idx: 0xbc}, + 482: {cur: 0x115, idx: 0x0}, + 483: {cur: 0x84, idx: 0x25}, + 484: {cur: 0xe9, idx: 0xbc}, + 485: {cur: 0xfa, idx: 0x4}, + 486: {cur: 0xe9, idx: 0xbc}, + 487: {cur: 0xfa, idx: 0x4}, + 488: {cur: 0x13, idx: 0x293}, + 489: {cur: 0x2e, idx: 0x462}, + 490: {cur: 0x3a, idx: 0x296}, + 491: {cur: 0x5b, idx: 0x37}, + 492: {cur: 0xb1, idx: 0x3a0}, + 493: {cur: 0xe9, idx: 0xbc}, + 494: {cur: 0xfa, idx: 0x4}, + 495: {cur: 0x12, idx: 0x2f7}, + 496: {cur: 0x84, idx: 0x25}, + 497: {cur: 0xfa, idx: 0x4}, + 498: {cur: 0xe9, idx: 0xbc}, + 499: {cur: 0x85, idx: 0x2f3}, + 500: {cur: 0xb9, idx: 0x97}, + 501: {cur: 0x66, idx: 0xee}, + 502: {cur: 0xfa, idx: 0x4}, + 503: {cur: 0x43, idx: 0x474}, + 504: {cur: 0x79, idx: 0x47f}, + 505: {cur: 0x84, idx: 0x25}, + 506: {cur: 0xe9, idx: 0xbc}, + 507: {cur: 0xfa, idx: 0x4}, + 508: {cur: 0xe9, idx: 0xbc}, + 509: {cur: 0xfa, idx: 0x4}, + 510: {cur: 0x13, idx: 0x0}, + 511: {cur: 0x2e, idx: 0x0}, + 512: {cur: 0x3a, idx: 0x0}, + 513: {cur: 0x43, idx: 0x0}, + 514: {cur: 0x5d, idx: 0x0}, + 515: {cur: 0x62, idx: 0x0}, + 516: {cur: 0x71, idx: 0x0}, + 517: {cur: 0x7b, idx: 0x0}, + 518: {cur: 0x7c, idx: 0x0}, + 519: {cur: 0x84, idx: 0x0}, + 520: {cur: 0x8c, idx: 0x0}, + 521: {cur: 0xb1, idx: 0x0}, + 522: {cur: 0xbf, idx: 0x0}, + 523: {cur: 0xf4, idx: 0x0}, + 524: {cur: 0xfa, idx: 0x0}, + 525: {cur: 0x103, idx: 0x0}, + 526: {cur: 0x10e, idx: 0x0}, + 527: {cur: 0x115, idx: 0x0}, + 528: {cur: 0x18, idx: 0x9}, + 529: {cur: 0x13, idx: 0x0}, + 530: {cur: 0x84, idx: 0x25}, + 531: {cur: 0xc8, idx: 0xa6}, + 532: {cur: 0xe9, idx: 0xbc}, + 533: {cur: 0xfa, idx: 0x4}, + 534: {cur: 0x13, idx: 0x0}, + 535: {cur: 0x2e, idx: 0x0}, + 536: {cur: 0x3a, idx: 0x0}, + 537: {cur: 0x43, idx: 0x0}, + 538: {cur: 0x5d, idx: 0x0}, + 539: {cur: 0x62, idx: 0x0}, + 540: {cur: 0x71, idx: 0x0}, + 541: {cur: 0x76, idx: 0x54}, + 542: {cur: 0x7b, idx: 0x0}, + 543: {cur: 0x7c, idx: 0x0}, + 544: {cur: 0x84, idx: 0x25}, + 545: {cur: 0x8c, idx: 0x0}, + 546: {cur: 0xb1, idx: 0x0}, + 547: {cur: 0xbf, idx: 0x0}, + 548: {cur: 0xf4, idx: 0x0}, + 549: {cur: 0xfa, idx: 0x0}, + 550: {cur: 0x103, idx: 0x0}, + 551: {cur: 0x10e, idx: 0x0}, + 552: {cur: 0x7, idx: 0x486}, + 553: {cur: 0xe9, idx: 0xbc}, + 554: {cur: 0xfa, idx: 0x4}, + 555: {cur: 0x13, idx: 0xf4}, + 556: {cur: 0x77, idx: 0x57}, + 557: {cur: 0x7c, idx: 0x7e}, + 558: {cur: 0xe9, idx: 0xbc}, + 559: {cur: 0xb9, idx: 0x97}, + 560: {cur: 0x43, idx: 0x25}, + 561: {cur: 0x13, idx: 0x0}, + 562: {cur: 0x2e, idx: 0x0}, + 563: {cur: 0x3a, idx: 0x0}, + 564: {cur: 0x5d, idx: 0x0}, + 565: {cur: 0x62, idx: 0x0}, + 566: {cur: 0x7c, idx: 0x0}, + 567: {cur: 0x8c, idx: 0x0}, + 568: {cur: 0xb1, idx: 0x0}, + 569: {cur: 0xbf, idx: 0x0}, + 570: {cur: 0xf4, idx: 0x0}, + 571: {cur: 0xfa, idx: 0x0}, + 572: {cur: 0x103, idx: 0x0}, + 573: {cur: 0x2e, idx: 0x0}, + 574: {cur: 0x71, idx: 0x0}, + 575: {cur: 0x84, idx: 0x0}, + 576: {cur: 0x8c, idx: 0x0}, + 577: {cur: 0xb1, idx: 0x0}, + 578: {cur: 0xe9, idx: 0xbc}, + 579: {cur: 0xf4, idx: 0x0}, + 580: {cur: 0x43, idx: 0x48d}, + 581: {cur: 0x84, idx: 0x491}, + 582: {cur: 0xfa, idx: 0x4}, + 583: {cur: 0xf5, idx: 0x22e}, + 584: {cur: 0x13, idx: 0x0}, + 585: {cur: 0x43, idx: 0x0}, + 586: {cur: 0x64, idx: 0x42}, + 587: {cur: 0x71, idx: 0x0}, + 588: {cur: 0x7b, idx: 0x0}, + 589: {cur: 0x7c, idx: 0x0}, + 590: {cur: 0x84, idx: 0x0}, + 591: {cur: 0x8c, idx: 0x0}, + 592: {cur: 0xbf, idx: 0x0}, + 593: {cur: 0x103, idx: 0x0}, + 594: {cur: 0x53, idx: 0x457}, + 595: {cur: 0x85, idx: 0x2f3}, + 596: {cur: 0xf5, idx: 0x22e}, + 597: {cur: 0x13, idx: 0xf4}, + 598: {cur: 0x4b, idx: 0x495}, + 599: {cur: 0xe9, idx: 0xbc}, + 600: {cur: 0x85, idx: 0x2f3}, + 601: {cur: 0x8f, idx: 0x72}, + 602: {cur: 0xd1, idx: 0xb2}, + 603: {cur: 0xe9, idx: 0xbc}, + 604: {cur: 0xfa, idx: 0x4}, + 605: {cur: 0x51, idx: 0x2ef}, + 606: {cur: 0x85, idx: 0x2f3}, + 607: {cur: 0x87, idx: 0x67}, + 608: {cur: 0xe9, idx: 0xbc}, + 609: {cur: 0xfa, idx: 0x4}, + 610: {cur: 0xe9, idx: 0xbc}, + 611: {cur: 0xfa, idx: 0x4}, + 612: {cur: 0x13, idx: 0xf4}, + 613: {cur: 0xf5, idx: 0x22e}, + 614: {cur: 0x13, idx: 0x0}, + 615: {cur: 0x2e, idx: 0x0}, + 616: {cur: 0x3a, idx: 0x0}, + 617: {cur: 0x62, idx: 0x0}, + 618: {cur: 0x71, idx: 0x0}, + 619: {cur: 0x7b, idx: 0x0}, + 620: {cur: 0x7c, idx: 0x0}, + 621: {cur: 0x86, idx: 0x49f}, + 622: {cur: 0x8c, idx: 0x0}, + 623: {cur: 0xb1, idx: 0x0}, + 624: {cur: 0xbf, idx: 0x0}, + 625: {cur: 0xe9, idx: 0xbc}, + 626: {cur: 0xf4, idx: 0x0}, + 627: {cur: 0xfa, idx: 0x0}, + 628: {cur: 0x10e, idx: 0x0}, + 629: {cur: 0xf5, idx: 0x22e}, + 630: {cur: 0x12, idx: 0x2f7}, + 631: {cur: 0x13, idx: 0xf4}, + 632: {cur: 0x84, idx: 0x25}, + 633: {cur: 0xe9, idx: 0xbc}, + 634: {cur: 0xfa, idx: 0x4}, + 635: {cur: 0xf9, idx: 0x2df}, + 636: {cur: 0xfa, idx: 0x4}, + 637: {cur: 0x3b, idx: 0x315}, + 638: {cur: 0x9, idx: 0x1}, + 639: {cur: 0x90, idx: 0x76}, + 640: {cur: 0xe9, idx: 0xbc}, + 641: {cur: 0x13, idx: 0x0}, + 642: {cur: 0x2e, idx: 0x0}, + 643: {cur: 0x3a, idx: 0x0}, + 644: {cur: 0x43, idx: 0x0}, + 645: {cur: 0x62, idx: 0x0}, + 646: {cur: 0x71, idx: 0x0}, + 647: {cur: 0x7b, idx: 0x0}, + 648: {cur: 0x7c, idx: 0x0}, + 649: {cur: 0x84, idx: 0x0}, + 650: {cur: 0x8c, idx: 0x0}, + 651: {cur: 0xb1, idx: 0x0}, + 652: {cur: 0xbf, idx: 0x0}, + 653: {cur: 0xf4, idx: 0x0}, + 654: {cur: 0xfa, idx: 0x0}, + 655: {cur: 0x103, idx: 0x0}, + 656: {cur: 0x107, idx: 0x0}, + 657: {cur: 0x10e, idx: 0x0}, + 658: {cur: 0x113, idx: 0x0}, + 659: {cur: 0x115, idx: 0x0}, + 660: {cur: 0x3b, idx: 0x315}, + 661: {cur: 0x85, idx: 0x2f3}, + 662: {cur: 0x85, idx: 0x2f3}, + 663: {cur: 0x13, idx: 0xf4}, + 664: {cur: 0x84, idx: 0x25}, + 665: {cur: 0x9a, idx: 0x84}, + 666: {cur: 0xe9, idx: 0xbc}, + 667: {cur: 0xfa, idx: 0x4}, + 668: {cur: 0x85, idx: 0x2f3}, + 669: {cur: 0xf5, idx: 0x22e}, + 670: {cur: 0x85, idx: 0x2f3}, + 671: {cur: 0xad, idx: 0x7e}, + 672: {cur: 0xa2, idx: 0x87}, + 673: {cur: 0xb7, idx: 0x4ac}, + 674: {cur: 0x13, idx: 0x0}, + 675: {cur: 0x43, idx: 0x0}, + 676: {cur: 0x62, idx: 0x0}, + 677: {cur: 0x71, idx: 0x0}, + 678: {cur: 0x7b, idx: 0x0}, + 679: {cur: 0x7c, idx: 0x0}, + 680: {cur: 0x84, idx: 0x0}, + 681: {cur: 0x8c, idx: 0x0}, + 682: {cur: 0xa4, idx: 0x4b0}, + 683: {cur: 0xbf, idx: 0x0}, + 684: {cur: 0xf4, idx: 0x0}, + 685: {cur: 0x103, idx: 0x0}, + 686: {cur: 0x84, idx: 0x25}, + 687: {cur: 0xe9, idx: 0xbc}, + 688: {cur: 0xfa, idx: 0x4}, + 689: {cur: 0xa8, idx: 0x8c}, + 690: {cur: 0xe9, idx: 0xbc}, + 691: {cur: 0xfa, idx: 0x4}, + 692: {cur: 0xe9, idx: 0xbc}, + 693: {cur: 0xfa, idx: 0x4}, + 694: {cur: 0x3a, idx: 0x0}, + 695: {cur: 0xb1, idx: 0x0}, + 696: {cur: 0xb4, idx: 0x94}, + 697: {cur: 0xfa, idx: 0x0}, + 698: {cur: 0x26, idx: 0x4}, + 699: {cur: 0xdb, idx: 0x4}, + 700: {cur: 0x8, idx: 0x4bc}, + 701: {cur: 0x14, idx: 0x4c0}, + 702: {cur: 0x75, idx: 0x45a}, + 703: {cur: 0xa7, idx: 0x8a}, + 704: {cur: 0xc1, idx: 0x37c}, + 705: {cur: 0xe9, idx: 0xbc}, + 706: {cur: 0xf3, idx: 0x20d}, + 707: {cur: 0xfa, idx: 0x4}, + 708: {cur: 0xb8, idx: 0x4}, + 709: {cur: 0x13, idx: 0x0}, + 710: {cur: 0x2e, idx: 0x0}, + 711: {cur: 0x3a, idx: 0x0}, + 712: {cur: 0x43, idx: 0x0}, + 713: {cur: 0x71, idx: 0x0}, + 714: {cur: 0x7b, idx: 0x0}, + 715: {cur: 0x7c, idx: 0x0}, + 716: {cur: 0x84, idx: 0x0}, + 717: {cur: 0x8c, idx: 0x0}, + 718: {cur: 0xb1, idx: 0x0}, + 719: {cur: 0xbd, idx: 0x30}, + 720: {cur: 0xbf, idx: 0x0}, + 721: {cur: 0xf4, idx: 0x0}, + 722: {cur: 0xfa, idx: 0x0}, + 723: {cur: 0x103, idx: 0x0}, + 724: {cur: 0x107, idx: 0x0}, + 725: {cur: 0x10e, idx: 0x0}, + 726: {cur: 0x115, idx: 0x0}, + 727: {cur: 0xbe, idx: 0x4c4}, + 728: {cur: 0xe9, idx: 0xbc}, + 729: {cur: 0x13, idx: 0xf4}, + 730: {cur: 0x3a, idx: 0x9b}, + 731: {cur: 0x5f, idx: 0x153}, + 732: {cur: 0xd5, idx: 0x27c}, + 733: {cur: 0xe9, idx: 0xbc}, + 734: {cur: 0x115, idx: 0x0}, + 735: {cur: 0x14, idx: 0x374}, + 736: {cur: 0xfa, idx: 0x4}, + 737: {cur: 0x8, idx: 0x358}, + 738: {cur: 0xe1, idx: 0x4}, + 739: {cur: 0x8, idx: 0x358}, + 740: {cur: 0xbd, idx: 0x30}, + 741: {cur: 0x62, idx: 0x229}, + 742: {cur: 0xe3, idx: 0x3f}, + 743: {cur: 0xf9, idx: 0x2df}, + 744: {cur: 0x5c, idx: 0x24a}, + 745: {cur: 0x85, idx: 0x2f3}, + 746: {cur: 0x64, idx: 0x42}, + 747: {cur: 0xfa, idx: 0x4}, + 748: {cur: 0x64, idx: 0x0}, + 749: {cur: 0xd1, idx: 0xb2}, + 750: {cur: 0xe9, idx: 0xbc}, + 751: {cur: 0xc7, idx: 0x4d8}, + 752: {cur: 0x13, idx: 0x0}, + 753: {cur: 0x3a, idx: 0x0}, + 754: {cur: 0x43, idx: 0x0}, + 755: {cur: 0x62, idx: 0x0}, + 756: {cur: 0x71, idx: 0x0}, + 757: {cur: 0x7b, idx: 0x0}, + 758: {cur: 0x7c, idx: 0x0}, + 759: {cur: 0x84, idx: 0x0}, + 760: {cur: 0x8c, idx: 0x0}, + 761: {cur: 0xb1, idx: 0x0}, + 762: {cur: 0xbf, idx: 0x0}, + 763: {cur: 0xc8, idx: 0xa6}, + 764: {cur: 0xf4, idx: 0x0}, + 765: {cur: 0xfa, idx: 0x0}, + 766: {cur: 0x103, idx: 0x0}, + 767: {cur: 0x4, idx: 0x38b}, + 768: {cur: 0x13, idx: 0xf4}, + 769: {cur: 0xca, idx: 0x4db}, + 770: {cur: 0xe9, idx: 0xbc}, + 771: {cur: 0x9, idx: 0x1}, + 772: {cur: 0x4b, idx: 0x495}, + 773: {cur: 0xca, idx: 0x4e0}, + 774: {cur: 0x98, idx: 0x2dd}, + 775: {cur: 0xa9, idx: 0x34a}, + 776: {cur: 0xb7, idx: 0x4ac}, + 777: {cur: 0xca, idx: 0x495}, + 778: {cur: 0xe4, idx: 0xb9}, + 779: {cur: 0xc3, idx: 0x380}, + 780: {cur: 0x27, idx: 0x10}, + 781: {cur: 0xc3, idx: 0x0}, + 782: {cur: 0xc3, idx: 0x0}, + 783: {cur: 0xfa, idx: 0x4}, + 784: {cur: 0x24, idx: 0x344}, + 785: {cur: 0x13, idx: 0x0}, + 786: {cur: 0x2e, idx: 0x0}, + 787: {cur: 0x3a, idx: 0x0}, + 788: {cur: 0x43, idx: 0x0}, + 789: {cur: 0x5d, idx: 0x0}, + 790: {cur: 0x62, idx: 0x0}, + 791: {cur: 0x71, idx: 0x0}, + 792: {cur: 0x7b, idx: 0x0}, + 793: {cur: 0x7c, idx: 0x0}, + 794: {cur: 0x84, idx: 0x0}, + 795: {cur: 0x8c, idx: 0x0}, + 796: {cur: 0xb1, idx: 0x0}, + 797: {cur: 0xbf, idx: 0x0}, + 798: {cur: 0xf4, idx: 0x0}, + 799: {cur: 0xfa, idx: 0x0}, + 800: {cur: 0x103, idx: 0x0}, + 801: {cur: 0x10e, idx: 0x0}, + 802: {cur: 0xa1, idx: 0x4f}, + 803: {cur: 0xf5, idx: 0x22e}, + 804: {cur: 0x0, idx: 0x4e7}, + 805: {cur: 0x84, idx: 0x25}, + 806: {cur: 0xd1, idx: 0xb2}, + 807: {cur: 0xd2, idx: 0x18}, + 808: {cur: 0xe9, idx: 0xbc}, + 809: {cur: 0xed, idx: 0x4f0}, + 810: {cur: 0xf6, idx: 0xcb}, + 811: {cur: 0xfa, idx: 0x4}, + 812: {cur: 0x37, idx: 0x24a}, + 813: {cur: 0xd2, idx: 0x0}, + 814: {cur: 0x86, idx: 0x49f}, + 815: {cur: 0x8f, idx: 0x72}, + 816: {cur: 0xa1, idx: 0x4f}, + 817: {cur: 0xd3, idx: 0xb6}, + 818: {cur: 0xf5, idx: 0x22e}, + 819: {cur: 0xd1, idx: 0xb2}, + 820: {cur: 0x85, idx: 0x2f3}, + 821: {cur: 0xf5, idx: 0x22e}, + 822: {cur: 0x51, idx: 0x4f7}, + 823: {cur: 0xbd, idx: 0x30}, + 824: {cur: 0xda, idx: 0x4fb}, + 825: {cur: 0xe9, idx: 0xbc}, + 826: {cur: 0xbd, idx: 0x4ff}, + 827: {cur: 0xda, idx: 0x30}, + 828: {cur: 0xb7, idx: 0x4ac}, + 829: {cur: 0x92, idx: 0x503}, + 830: {cur: 0xe9, idx: 0xbc}, + 831: {cur: 0x113, idx: 0x50b}, + 832: {cur: 0x13, idx: 0x0}, + 833: {cur: 0x2e, idx: 0x0}, + 834: {cur: 0x3a, idx: 0x0}, + 835: {cur: 0x43, idx: 0x0}, + 836: {cur: 0x62, idx: 0x0}, + 837: {cur: 0x71, idx: 0x0}, + 838: {cur: 0x7b, idx: 0x51b}, + 839: {cur: 0x7c, idx: 0x0}, + 840: {cur: 0x84, idx: 0x0}, + 841: {cur: 0x8c, idx: 0x0}, + 842: {cur: 0xbf, idx: 0x0}, + 843: {cur: 0xf4, idx: 0x0}, + 844: {cur: 0xfa, idx: 0x0}, + 845: {cur: 0x103, idx: 0x0}, + 846: {cur: 0x3a, idx: 0x0}, + 847: {cur: 0x84, idx: 0x25}, + 848: {cur: 0xe9, idx: 0xbc}, + 849: {cur: 0xfa, idx: 0x4}, + 850: {cur: 0xe0, idx: 0x227}, + 851: {cur: 0x50, idx: 0x21f}, + 852: {cur: 0x5c, idx: 0x24a}, + 853: {cur: 0x85, idx: 0x2f3}, + 854: {cur: 0x6, idx: 0x51f}, + 855: {cur: 0xe9, idx: 0xbc}, + 856: {cur: 0xa4, idx: 0x525}, + 857: {cur: 0x13, idx: 0x0}, + 858: {cur: 0x18, idx: 0x2c1}, + 859: {cur: 0x84, idx: 0x25}, + 860: {cur: 0x8c, idx: 0x0}, + 861: {cur: 0xbf, idx: 0x0}, + 862: {cur: 0x103, idx: 0x0}, + 863: {cur: 0x13, idx: 0x0}, + 864: {cur: 0x18, idx: 0x9}, + 865: {cur: 0x84, idx: 0x25}, + 866: {cur: 0x8c, idx: 0x0}, + 867: {cur: 0xbf, idx: 0x0}, + 868: {cur: 0x103, idx: 0x0}, + 869: {cur: 0x13, idx: 0x0}, + 870: {cur: 0x1a, idx: 0x23e}, + 871: {cur: 0x25, idx: 0x11f}, + 872: {cur: 0x2e, idx: 0x52c}, + 873: {cur: 0x32, idx: 0x127}, + 874: {cur: 0x39, idx: 0x12b}, + 875: {cur: 0x43, idx: 0x0}, + 876: {cur: 0x51, idx: 0x4f7}, + 877: {cur: 0x52, idx: 0x256}, + 878: {cur: 0x56, idx: 0x530}, + 879: {cur: 0x57, idx: 0x534}, + 880: {cur: 0x62, idx: 0x0}, + 881: {cur: 0x71, idx: 0x0}, + 882: {cur: 0x78, idx: 0x539}, + 883: {cur: 0x7c, idx: 0x0}, + 884: {cur: 0x80, idx: 0x53e}, + 885: {cur: 0x82, idx: 0x171}, + 886: {cur: 0x84, idx: 0x0}, + 887: {cur: 0x8c, idx: 0x0}, + 888: {cur: 0xbd, idx: 0x4ff}, + 889: {cur: 0xbf, idx: 0x0}, + 890: {cur: 0xda, idx: 0x30}, + 891: {cur: 0xf4, idx: 0x0}, + 892: {cur: 0x103, idx: 0x0}, + 893: {cur: 0x85, idx: 0x2f3}, + 894: {cur: 0xe9, idx: 0xbc}, + 895: {cur: 0xf5, idx: 0x22e}, + 896: {cur: 0x3b, idx: 0x315}, + 897: {cur: 0xf9, idx: 0x2df}, + 898: {cur: 0x84, idx: 0x25}, + 899: {cur: 0xe9, idx: 0xbc}, + 900: {cur: 0xfa, idx: 0x4}, + 901: {cur: 0x92, idx: 0x542}, + 902: {cur: 0xb4, idx: 0x94}, + 903: {cur: 0xdb, idx: 0x280}, + 904: {cur: 0xb4, idx: 0x94}, + 905: {cur: 0xdb, idx: 0x4}, + 906: {cur: 0xfa, idx: 0xcf}, + 907: {cur: 0xe9, idx: 0xbc}, + 908: {cur: 0xfa, idx: 0x4}, + 909: {cur: 0xf9, idx: 0x2df}, + 910: {cur: 0x85, idx: 0x2f3}, + 911: {cur: 0x13, idx: 0xf4}, + 912: {cur: 0x84, idx: 0x25}, + 913: {cur: 0x5c, idx: 0x24a}, + 914: {cur: 0x58, idx: 0x223}, + 915: {cur: 0x5d, idx: 0x0}, + 916: {cur: 0x62, idx: 0x0}, + 917: {cur: 0x13, idx: 0x546}, + 918: {cur: 0xbf, idx: 0x54b}, + 919: {cur: 0xef, idx: 0xc0}, + 920: {cur: 0x13, idx: 0xf4}, + 921: {cur: 0x84, idx: 0x25}, + 922: {cur: 0xe9, idx: 0xbc}, + 923: {cur: 0xf2, idx: 0xc3}, + 924: {cur: 0xfa, idx: 0x4}, + 925: {cur: 0x43, idx: 0x491}, + 926: {cur: 0xfa, idx: 0x4}, + 927: {cur: 0x13, idx: 0x0}, + 928: {cur: 0x2e, idx: 0x0}, + 929: {cur: 0x3a, idx: 0x0}, + 930: {cur: 0x43, idx: 0x0}, + 931: {cur: 0x5d, idx: 0x0}, + 932: {cur: 0x62, idx: 0x0}, + 933: {cur: 0x71, idx: 0x0}, + 934: {cur: 0x7b, idx: 0x0}, + 935: {cur: 0x7c, idx: 0x0}, + 936: {cur: 0x84, idx: 0x25}, + 937: {cur: 0x8c, idx: 0x0}, + 938: {cur: 0xb1, idx: 0x0}, + 939: {cur: 0xbf, idx: 0x0}, + 940: {cur: 0xf4, idx: 0x0}, + 941: {cur: 0xf6, idx: 0xcb}, + 942: {cur: 0xf7, idx: 0x550}, + 943: {cur: 0xfa, idx: 0x0}, + 944: {cur: 0x103, idx: 0x0}, + 945: {cur: 0x10e, idx: 0x0}, + 946: {cur: 0xc7, idx: 0x7e}, + 947: {cur: 0xe9, idx: 0xbc}, + 948: {cur: 0xfa, idx: 0x4}, + 949: {cur: 0xc7, idx: 0x0}, + 950: {cur: 0x100, idx: 0x558}, + 951: {cur: 0x4, idx: 0x38b}, + 952: {cur: 0xe9, idx: 0xbc}, + 953: {cur: 0x100, idx: 0x55e}, + 954: {cur: 0x93, idx: 0x4}, + 955: {cur: 0x93, idx: 0x4}, + 956: {cur: 0x13, idx: 0xf4}, + 957: {cur: 0xe9, idx: 0xbc}, + 958: {cur: 0xf5, idx: 0x22e}, + 959: {cur: 0x84, idx: 0x25}, + 960: {cur: 0xfa, idx: 0x4}, + 961: {cur: 0xf9, idx: 0x2df}, + 962: {cur: 0xb9, idx: 0x97}, + 963: {cur: 0x13, idx: 0xf4}, + 964: {cur: 0x84, idx: 0x25}, + 965: {cur: 0x8c, idx: 0x565}, + 966: {cur: 0x13, idx: 0xf4}, + 967: {cur: 0x43, idx: 0x491}, + 968: {cur: 0x7a, idx: 0x569}, + 969: {cur: 0x8c, idx: 0x565}, + 970: {cur: 0x43, idx: 0x20}, + 971: {cur: 0x43, idx: 0x20}, + 972: {cur: 0xa9, idx: 0x34a}, + 973: {cur: 0x43, idx: 0x20}, + 974: {cur: 0xdb, idx: 0x4}, + 975: {cur: 0x13, idx: 0xf4}, + 976: {cur: 0x84, idx: 0x25}, + 977: {cur: 0x8c, idx: 0x565}, + 978: {cur: 0xf4, idx: 0x4}, + 979: {cur: 0x8c, idx: 0x6e}, + 980: {cur: 0xf4, idx: 0xc7}, + 981: {cur: 0xa9, idx: 0x34a}, + 982: {cur: 0xe9, idx: 0xbc}, + 983: {cur: 0x123, idx: 0xe9}, +} // Size: 3960 bytes + +var narrowLangIndex = []uint16{ // 753 elements + // Entry 0 - 3F + 0x0000, 0x0062, 0x0062, 0x0062, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0064, 0x0064, 0x0080, 0x0080, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x008a, + 0x008a, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, + 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00d6, 0x00d6, + // Entry 40 - 7F + 0x00d6, 0x00d6, 0x00d6, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, + 0x00d7, 0x00da, 0x00da, 0x00da, 0x00da, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00e4, 0x00e4, 0x00ea, 0x00ea, + 0x00ea, 0x00ea, 0x00ea, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + // Entry 80 - BF + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + // Entry C0 - FF + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fe, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + // Entry 100 - 13F + 0x0100, 0x0100, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0106, 0x0106, 0x0107, 0x0108, 0x0108, 0x0109, + 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, + 0x0109, 0x0109, 0x0109, 0x0165, 0x0165, 0x0166, 0x0166, 0x0166, + 0x0166, 0x0166, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, + 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, + 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, + 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, + // Entry 140 - 17F + 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, + 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, + 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0173, 0x0173, 0x0174, + 0x0174, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x017a, + 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, + 0x017a, 0x017a, 0x017a, 0x017a, 0x017b, 0x017b, 0x017c, 0x017c, + 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017e, 0x017e, 0x017f, + 0x017f, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0181, + // Entry 180 - 1BF + 0x0181, 0x0186, 0x0186, 0x0186, 0x0186, 0x0186, 0x0188, 0x0188, + 0x0188, 0x0188, 0x0188, 0x0188, 0x0188, 0x0188, 0x0189, 0x0189, + 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, + 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x018a, 0x018a, + 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018b, 0x018b, + 0x018c, 0x018c, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, + 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, + 0x018e, 0x018e, 0x0199, 0x0199, 0x0199, 0x0199, 0x019a, 0x019a, + // Entry 1C0 - 1FF + 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, + 0x019a, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a8, 0x01a8, 0x01a9, + 0x01a9, 0x01ab, 0x01ab, 0x01ac, 0x01ac, 0x01ad, 0x01ad, 0x01ad, + 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01af, 0x01af, 0x01af, + 0x01af, 0x01af, 0x01af, 0x01af, 0x01b1, 0x01b1, 0x01b1, 0x01b1, + // Entry 200 - 23F + 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b2, 0x01b2, 0x01b2, 0x01b3, + 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, + 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, + 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, + 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b4, 0x01b4, + 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b5, 0x01b5, 0x01b5, 0x01b5, + 0x01b5, 0x01b5, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, + 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, + // Entry 240 - 27F + 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b8, + 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01bb, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01be, 0x01be, 0x01bf, + 0x01bf, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, + 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, + // Entry 280 - 2BF + 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01c2, 0x01c2, 0x01c5, 0x01c5, 0x01c5, 0x01c5, 0x01c5, 0x01c5, + 0x01c5, 0x01c5, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c9, 0x01c9, + 0x01c9, 0x01c9, 0x01c9, 0x01c9, 0x01ca, 0x01ca, 0x01ca, 0x01ca, + 0x01ca, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cc, 0x01cc, + 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, + 0x01cc, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, + 0x01ce, 0x01ce, 0x01ce, 0x01cf, 0x01cf, 0x01d0, 0x01d0, 0x01d0, + // Entry 2C0 - 2FF + 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, + 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d1, 0x01d1, 0x01d1, + 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, + 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, + 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d3, 0x01d3, 0x01d3, + 0x01d3, 0x01d3, 0x01d3, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01dc, + 0x01dc, +} // Size: 1530 bytes + +var narrowSymIndex = []curToIndex{ // 476 elements + 0: {cur: 0x9, idx: 0x1}, + 1: {cur: 0x11, idx: 0x4}, + 2: {cur: 0x13, idx: 0x4}, + 3: {cur: 0x18, idx: 0x9}, + 4: {cur: 0x1a, idx: 0x4}, + 5: {cur: 0x1b, idx: 0xc}, + 6: {cur: 0x25, idx: 0x4}, + 7: {cur: 0x26, idx: 0x4}, + 8: {cur: 0x27, idx: 0x10}, + 9: {cur: 0x2e, idx: 0x13}, + 10: {cur: 0x32, idx: 0x4}, + 11: {cur: 0x35, idx: 0x16}, + 12: {cur: 0x37, idx: 0x18}, + 13: {cur: 0x39, idx: 0x4}, + 14: {cur: 0x3a, idx: 0x4}, + 15: {cur: 0x41, idx: 0x4}, + 16: {cur: 0x43, idx: 0x25}, + 17: {cur: 0x44, idx: 0x4}, + 18: {cur: 0x46, idx: 0x28}, + 19: {cur: 0x49, idx: 0x4}, + 20: {cur: 0x4a, idx: 0x4}, + 21: {cur: 0x4d, idx: 0x2c}, + 22: {cur: 0x51, idx: 0x30}, + 23: {cur: 0x52, idx: 0x4}, + 24: {cur: 0x57, idx: 0x33}, + 25: {cur: 0x5b, idx: 0x37}, + 26: {cur: 0x5d, idx: 0x3b}, + 27: {cur: 0x5f, idx: 0x4}, + 28: {cur: 0x60, idx: 0x3f}, + 29: {cur: 0x62, idx: 0x3f}, + 30: {cur: 0x64, idx: 0x42}, + 31: {cur: 0x67, idx: 0x3f}, + 32: {cur: 0x69, idx: 0x46}, + 33: {cur: 0x6d, idx: 0x49}, + 34: {cur: 0x70, idx: 0x4}, + 35: {cur: 0x71, idx: 0x4}, + 36: {cur: 0x72, idx: 0x4f}, + 37: {cur: 0x74, idx: 0x51}, + 38: {cur: 0x76, idx: 0x54}, + 39: {cur: 0x77, idx: 0x57}, + 40: {cur: 0x7b, idx: 0x5a}, + 41: {cur: 0x7c, idx: 0x5e}, + 42: {cur: 0x80, idx: 0x30}, + 43: {cur: 0x82, idx: 0x4}, + 44: {cur: 0x84, idx: 0x25}, + 45: {cur: 0x87, idx: 0x67}, + 46: {cur: 0x88, idx: 0x6b}, + 47: {cur: 0x89, idx: 0x6e}, + 48: {cur: 0x8c, idx: 0x6e}, + 49: {cur: 0x8e, idx: 0x4}, + 50: {cur: 0x8f, idx: 0x72}, + 51: {cur: 0x90, idx: 0x76}, + 52: {cur: 0x91, idx: 0x7a}, + 53: {cur: 0x92, idx: 0x7e}, + 54: {cur: 0x93, idx: 0x4}, + 55: {cur: 0x95, idx: 0x81}, + 56: {cur: 0x9a, idx: 0x84}, + 57: {cur: 0xa2, idx: 0x87}, + 58: {cur: 0xa7, idx: 0x8a}, + 59: {cur: 0xa8, idx: 0x8c}, + 60: {cur: 0xad, idx: 0x7e}, + 61: {cur: 0xb1, idx: 0x4}, + 62: {cur: 0xb4, idx: 0x94}, + 63: {cur: 0xb8, idx: 0x4}, + 64: {cur: 0xb9, idx: 0x97}, + 65: {cur: 0xbb, idx: 0x9b}, + 66: {cur: 0xbd, idx: 0x30}, + 67: {cur: 0xbe, idx: 0x7e}, + 68: {cur: 0xbf, idx: 0x4}, + 69: {cur: 0xc6, idx: 0xa2}, + 70: {cur: 0xc7, idx: 0x7e}, + 71: {cur: 0xc8, idx: 0xa6}, + 72: {cur: 0xcb, idx: 0xaa}, + 73: {cur: 0xcf, idx: 0xae}, + 74: {cur: 0xd1, idx: 0xb2}, + 75: {cur: 0xd2, idx: 0x18}, + 76: {cur: 0xd3, idx: 0xb6}, + 77: {cur: 0xd5, idx: 0x4}, + 78: {cur: 0xda, idx: 0x30}, + 79: {cur: 0xdb, idx: 0x4}, + 80: {cur: 0xdc, idx: 0x3f}, + 81: {cur: 0xe1, idx: 0x4}, + 82: {cur: 0xe3, idx: 0x3f}, + 83: {cur: 0xe4, idx: 0xb9}, + 84: {cur: 0xe7, idx: 0x3f}, + 85: {cur: 0xe9, idx: 0xbc}, + 86: {cur: 0xef, idx: 0xc0}, + 87: {cur: 0xf2, idx: 0xc3}, + 88: {cur: 0xf3, idx: 0x4}, + 89: {cur: 0xf4, idx: 0x4}, + 90: {cur: 0xf6, idx: 0xcb}, + 91: {cur: 0xfa, idx: 0x4}, + 92: {cur: 0xff, idx: 0x4}, + 93: {cur: 0x102, idx: 0x10}, + 94: {cur: 0x103, idx: 0xd3}, + 95: {cur: 0x10e, idx: 0x4}, + 96: {cur: 0x123, idx: 0xe9}, + 97: {cur: 0x125, idx: 0xeb}, + 98: {cur: 0xf4, idx: 0xc7}, + 99: {cur: 0xf4, idx: 0xc7}, + 100: {cur: 0x11, idx: 0x10d}, + 101: {cur: 0x13, idx: 0xf4}, + 102: {cur: 0x1a, idx: 0x111}, + 103: {cur: 0x25, idx: 0x11f}, + 104: {cur: 0x26, idx: 0x123}, + 105: {cur: 0x32, idx: 0x127}, + 106: {cur: 0x39, idx: 0x12b}, + 107: {cur: 0x3a, idx: 0x1c}, + 108: {cur: 0x41, idx: 0x12f}, + 109: {cur: 0x43, idx: 0x20}, + 110: {cur: 0x44, idx: 0x133}, + 111: {cur: 0x4a, idx: 0x137}, + 112: {cur: 0x52, idx: 0x13b}, + 113: {cur: 0x5f, idx: 0x153}, + 114: {cur: 0x62, idx: 0x157}, + 115: {cur: 0x70, idx: 0x15c}, + 116: {cur: 0x71, idx: 0x4b}, + 117: {cur: 0x82, idx: 0x171}, + 118: {cur: 0x84, idx: 0x62}, + 119: {cur: 0x8e, idx: 0x196}, + 120: {cur: 0xb1, idx: 0x90}, + 121: {cur: 0xbf, idx: 0x9e}, + 122: {cur: 0xd5, idx: 0x1e0}, + 123: {cur: 0xe1, idx: 0x1f5}, + 124: {cur: 0xf3, idx: 0x20d}, + 125: {cur: 0xf4, idx: 0xc7}, + 126: {cur: 0xfa, idx: 0xcf}, + 127: {cur: 0xff, idx: 0x211}, + 128: {cur: 0x26, idx: 0x4}, + 129: {cur: 0x37, idx: 0x0}, + 130: {cur: 0x51, idx: 0x0}, + 131: {cur: 0x74, idx: 0x0}, + 132: {cur: 0x80, idx: 0x0}, + 133: {cur: 0xbd, idx: 0x0}, + 134: {cur: 0xc8, idx: 0x0}, + 135: {cur: 0xd2, idx: 0x0}, + 136: {cur: 0xda, idx: 0x0}, + 137: {cur: 0xf4, idx: 0xc7}, + 138: {cur: 0xcf, idx: 0x236}, + 139: {cur: 0xe7, idx: 0x23a}, + 140: {cur: 0xf4, idx: 0xc7}, + 141: {cur: 0x13, idx: 0x6}, + 142: {cur: 0x1a, idx: 0x23e}, + 143: {cur: 0x25, idx: 0x243}, + 144: {cur: 0x32, idx: 0x247}, + 145: {cur: 0x37, idx: 0x24a}, + 146: {cur: 0x39, idx: 0x12b}, + 147: {cur: 0x3a, idx: 0x1c}, + 148: {cur: 0x49, idx: 0x24d}, + 149: {cur: 0x4a, idx: 0x252}, + 150: {cur: 0x52, idx: 0x256}, + 151: {cur: 0x5f, idx: 0x153}, + 152: {cur: 0x60, idx: 0x25a}, + 153: {cur: 0x70, idx: 0x25f}, + 154: {cur: 0x80, idx: 0x262}, + 155: {cur: 0x82, idx: 0x267}, + 156: {cur: 0x8e, idx: 0x26a}, + 157: {cur: 0x93, idx: 0x26e}, + 158: {cur: 0xb1, idx: 0x90}, + 159: {cur: 0xb8, idx: 0x271}, + 160: {cur: 0xbf, idx: 0x9e}, + 161: {cur: 0xd1, idx: 0x274}, + 162: {cur: 0xd5, idx: 0x27c}, + 163: {cur: 0xdb, idx: 0x280}, + 164: {cur: 0xf3, idx: 0x20d}, + 165: {cur: 0xff, idx: 0x283}, + 166: {cur: 0x10e, idx: 0xdc}, + 167: {cur: 0x11, idx: 0x0}, + 168: {cur: 0x13, idx: 0x0}, + 169: {cur: 0x1a, idx: 0x0}, + 170: {cur: 0x1b, idx: 0x0}, + 171: {cur: 0x25, idx: 0x0}, + 172: {cur: 0x26, idx: 0x0}, + 173: {cur: 0x2e, idx: 0x0}, + 174: {cur: 0x32, idx: 0x0}, + 175: {cur: 0x37, idx: 0x0}, + 176: {cur: 0x39, idx: 0x0}, + 177: {cur: 0x3a, idx: 0x0}, + 178: {cur: 0x41, idx: 0x0}, + 179: {cur: 0x43, idx: 0x0}, + 180: {cur: 0x44, idx: 0x0}, + 181: {cur: 0x46, idx: 0x0}, + 182: {cur: 0x4a, idx: 0x0}, + 183: {cur: 0x52, idx: 0x0}, + 184: {cur: 0x5f, idx: 0x0}, + 185: {cur: 0x67, idx: 0x0}, + 186: {cur: 0x70, idx: 0x0}, + 187: {cur: 0x71, idx: 0x0}, + 188: {cur: 0x7b, idx: 0x0}, + 189: {cur: 0x7c, idx: 0x0}, + 190: {cur: 0x82, idx: 0x0}, + 191: {cur: 0x87, idx: 0x0}, + 192: {cur: 0x8c, idx: 0x0}, + 193: {cur: 0x8e, idx: 0x0}, + 194: {cur: 0x8f, idx: 0x0}, + 195: {cur: 0x90, idx: 0x0}, + 196: {cur: 0x93, idx: 0x0}, + 197: {cur: 0xa8, idx: 0x0}, + 198: {cur: 0xb1, idx: 0x0}, + 199: {cur: 0xb8, idx: 0x0}, + 200: {cur: 0xb9, idx: 0x0}, + 201: {cur: 0xbf, idx: 0x0}, + 202: {cur: 0xc6, idx: 0x0}, + 203: {cur: 0xcb, idx: 0x0}, + 204: {cur: 0xd5, idx: 0x0}, + 205: {cur: 0xdb, idx: 0x0}, + 206: {cur: 0xe1, idx: 0x0}, + 207: {cur: 0xe3, idx: 0x0}, + 208: {cur: 0xf2, idx: 0x0}, + 209: {cur: 0xf3, idx: 0x0}, + 210: {cur: 0xf4, idx: 0x0}, + 211: {cur: 0xf6, idx: 0x0}, + 212: {cur: 0xff, idx: 0x0}, + 213: {cur: 0x103, idx: 0x0}, + 214: {cur: 0xf4, idx: 0xc7}, + 215: {cur: 0x57, idx: 0x29a}, + 216: {cur: 0x91, idx: 0x2aa}, + 217: {cur: 0xef, idx: 0x2b3}, + 218: {cur: 0xf4, idx: 0xc7}, + 219: {cur: 0x102, idx: 0x0}, + 220: {cur: 0xcf, idx: 0x4f}, + 221: {cur: 0xf4, idx: 0xc7}, + 222: {cur: 0x1b, idx: 0x2ec}, + 223: {cur: 0x35, idx: 0x0}, + 224: {cur: 0x71, idx: 0x4b}, + 225: {cur: 0xf4, idx: 0xc7}, + 226: {cur: 0x123, idx: 0x0}, + 227: {cur: 0x125, idx: 0x0}, + 228: {cur: 0x51, idx: 0x2ef}, + 229: {cur: 0x80, idx: 0x2ef}, + 230: {cur: 0xbd, idx: 0x2ef}, + 231: {cur: 0xcf, idx: 0x4f}, + 232: {cur: 0xda, idx: 0x2ef}, + 233: {cur: 0xf4, idx: 0xc7}, + 234: {cur: 0x49, idx: 0x303}, + 235: {cur: 0x60, idx: 0x30b}, + 236: {cur: 0x69, idx: 0x310}, + 237: {cur: 0x88, idx: 0x315}, + 238: {cur: 0xcf, idx: 0x4f}, + 239: {cur: 0xd3, idx: 0x318}, + 240: {cur: 0xe7, idx: 0x0}, + 241: {cur: 0xf4, idx: 0xc7}, + 242: {cur: 0x125, idx: 0x8a}, + 243: {cur: 0x1b, idx: 0x334}, + 244: {cur: 0x27, idx: 0x337}, + 245: {cur: 0x4a, idx: 0xa2}, + 246: {cur: 0x57, idx: 0x3f}, + 247: {cur: 0x80, idx: 0x33a}, + 248: {cur: 0xcb, idx: 0x33d}, + 249: {cur: 0xda, idx: 0x33a}, + 250: {cur: 0xff, idx: 0x283}, + 251: {cur: 0x57, idx: 0x0}, + 252: {cur: 0xcf, idx: 0x4f}, + 253: {cur: 0xf4, idx: 0xc7}, + 254: {cur: 0x57, idx: 0x33}, + 255: {cur: 0x102, idx: 0x366}, + 256: {cur: 0x11, idx: 0x371}, + 257: {cur: 0x37, idx: 0x24a}, + 258: {cur: 0x52, idx: 0x256}, + 259: {cur: 0xcf, idx: 0xae}, + 260: {cur: 0xf2, idx: 0x379}, + 261: {cur: 0xcf, idx: 0xae}, + 262: {cur: 0x102, idx: 0x387}, + 263: {cur: 0xf4, idx: 0xc7}, + 264: {cur: 0xf4, idx: 0xc7}, + 265: {cur: 0x9, idx: 0x0}, + 266: {cur: 0x11, idx: 0x0}, + 267: {cur: 0x13, idx: 0x0}, + 268: {cur: 0x1a, idx: 0x0}, + 269: {cur: 0x1b, idx: 0x0}, + 270: {cur: 0x25, idx: 0x0}, + 271: {cur: 0x26, idx: 0x0}, + 272: {cur: 0x27, idx: 0x0}, + 273: {cur: 0x2e, idx: 0x0}, + 274: {cur: 0x32, idx: 0x0}, + 275: {cur: 0x35, idx: 0x0}, + 276: {cur: 0x37, idx: 0x0}, + 277: {cur: 0x39, idx: 0x0}, + 278: {cur: 0x3a, idx: 0x0}, + 279: {cur: 0x41, idx: 0x0}, + 280: {cur: 0x43, idx: 0x0}, + 281: {cur: 0x44, idx: 0x0}, + 282: {cur: 0x46, idx: 0x0}, + 283: {cur: 0x49, idx: 0x0}, + 284: {cur: 0x4a, idx: 0x0}, + 285: {cur: 0x4d, idx: 0x0}, + 286: {cur: 0x51, idx: 0x0}, + 287: {cur: 0x52, idx: 0x0}, + 288: {cur: 0x57, idx: 0x0}, + 289: {cur: 0x5b, idx: 0x0}, + 290: {cur: 0x5f, idx: 0x0}, + 291: {cur: 0x60, idx: 0x0}, + 292: {cur: 0x64, idx: 0x0}, + 293: {cur: 0x67, idx: 0x0}, + 294: {cur: 0x69, idx: 0x0}, + 295: {cur: 0x6d, idx: 0x0}, + 296: {cur: 0x70, idx: 0x0}, + 297: {cur: 0x71, idx: 0x0}, + 298: {cur: 0x72, idx: 0x0}, + 299: {cur: 0x74, idx: 0x0}, + 300: {cur: 0x76, idx: 0x0}, + 301: {cur: 0x77, idx: 0x0}, + 302: {cur: 0x7b, idx: 0x0}, + 303: {cur: 0x7c, idx: 0x0}, + 304: {cur: 0x80, idx: 0x0}, + 305: {cur: 0x82, idx: 0x0}, + 306: {cur: 0x87, idx: 0x0}, + 307: {cur: 0x88, idx: 0x0}, + 308: {cur: 0x89, idx: 0x0}, + 309: {cur: 0x8c, idx: 0x0}, + 310: {cur: 0x8e, idx: 0x0}, + 311: {cur: 0x8f, idx: 0x0}, + 312: {cur: 0x90, idx: 0x0}, + 313: {cur: 0x91, idx: 0x0}, + 314: {cur: 0x92, idx: 0x0}, + 315: {cur: 0x93, idx: 0x0}, + 316: {cur: 0x95, idx: 0x0}, + 317: {cur: 0x9a, idx: 0x0}, + 318: {cur: 0xa2, idx: 0x0}, + 319: {cur: 0xa7, idx: 0x0}, + 320: {cur: 0xa8, idx: 0x0}, + 321: {cur: 0xad, idx: 0x0}, + 322: {cur: 0xb1, idx: 0x0}, + 323: {cur: 0xb4, idx: 0x0}, + 324: {cur: 0xb8, idx: 0x0}, + 325: {cur: 0xb9, idx: 0x0}, + 326: {cur: 0xbb, idx: 0x0}, + 327: {cur: 0xbd, idx: 0x0}, + 328: {cur: 0xbe, idx: 0x0}, + 329: {cur: 0xbf, idx: 0x0}, + 330: {cur: 0xc6, idx: 0x0}, + 331: {cur: 0xc7, idx: 0x0}, + 332: {cur: 0xc8, idx: 0x0}, + 333: {cur: 0xcb, idx: 0x0}, + 334: {cur: 0xcf, idx: 0x0}, + 335: {cur: 0xd2, idx: 0x0}, + 336: {cur: 0xd3, idx: 0x0}, + 337: {cur: 0xd5, idx: 0x0}, + 338: {cur: 0xda, idx: 0x0}, + 339: {cur: 0xdb, idx: 0x0}, + 340: {cur: 0xdc, idx: 0x0}, + 341: {cur: 0xe1, idx: 0x0}, + 342: {cur: 0xe3, idx: 0x0}, + 343: {cur: 0xe4, idx: 0x0}, + 344: {cur: 0xe7, idx: 0x0}, + 345: {cur: 0xe9, idx: 0x0}, + 346: {cur: 0xef, idx: 0x0}, + 347: {cur: 0xf2, idx: 0x0}, + 348: {cur: 0xf3, idx: 0x0}, + 349: {cur: 0xf4, idx: 0x0}, + 350: {cur: 0xf6, idx: 0x0}, + 351: {cur: 0xff, idx: 0x0}, + 352: {cur: 0x102, idx: 0x0}, + 353: {cur: 0x103, idx: 0x0}, + 354: {cur: 0x10e, idx: 0x0}, + 355: {cur: 0x123, idx: 0x0}, + 356: {cur: 0x125, idx: 0x0}, + 357: {cur: 0xf4, idx: 0xc7}, + 358: {cur: 0x57, idx: 0x3da}, + 359: {cur: 0x88, idx: 0x315}, + 360: {cur: 0x91, idx: 0x2aa}, + 361: {cur: 0xbb, idx: 0x40f}, + 362: {cur: 0xcf, idx: 0x4f}, + 363: {cur: 0xd3, idx: 0x416}, + 364: {cur: 0xf4, idx: 0xc7}, + 365: {cur: 0x125, idx: 0x436}, + 366: {cur: 0x64, idx: 0x0}, + 367: {cur: 0x88, idx: 0x6b}, + 368: {cur: 0xbb, idx: 0x9b}, + 369: {cur: 0x125, idx: 0xeb}, + 370: {cur: 0xf4, idx: 0xc7}, + 371: {cur: 0xf4, idx: 0xc7}, + 372: {cur: 0x2e, idx: 0x462}, + 373: {cur: 0x88, idx: 0x315}, + 374: {cur: 0xd1, idx: 0x465}, + 375: {cur: 0xf4, idx: 0xc7}, + 376: {cur: 0xad, idx: 0x46c}, + 377: {cur: 0xf4, idx: 0xc7}, + 378: {cur: 0xf4, idx: 0xc7}, + 379: {cur: 0xf4, idx: 0xc7}, + 380: {cur: 0xf4, idx: 0xc7}, + 381: {cur: 0xf4, idx: 0xc7}, + 382: {cur: 0xf4, idx: 0xc7}, + 383: {cur: 0xf4, idx: 0xc7}, + 384: {cur: 0xf4, idx: 0xc7}, + 385: {cur: 0x37, idx: 0x24a}, + 386: {cur: 0x57, idx: 0x3da}, + 387: {cur: 0xbd, idx: 0x489}, + 388: {cur: 0xcf, idx: 0x4f}, + 389: {cur: 0xf4, idx: 0xc7}, + 390: {cur: 0x43, idx: 0x491}, + 391: {cur: 0x84, idx: 0x491}, + 392: {cur: 0xf4, idx: 0xc7}, + 393: {cur: 0xf4, idx: 0xc7}, + 394: {cur: 0xf4, idx: 0xc7}, + 395: {cur: 0xf4, idx: 0xc7}, + 396: {cur: 0xcf, idx: 0x4f}, + 397: {cur: 0xf4, idx: 0xc7}, + 398: {cur: 0x25, idx: 0x243}, + 399: {cur: 0x32, idx: 0x247}, + 400: {cur: 0x39, idx: 0x12b}, + 401: {cur: 0x3a, idx: 0x9b}, + 402: {cur: 0x52, idx: 0x256}, + 403: {cur: 0x57, idx: 0x499}, + 404: {cur: 0x71, idx: 0x4b}, + 405: {cur: 0x74, idx: 0x49c}, + 406: {cur: 0x82, idx: 0x267}, + 407: {cur: 0xf3, idx: 0x20d}, + 408: {cur: 0xf4, idx: 0xc7}, + 409: {cur: 0xf4, idx: 0xc7}, + 410: {cur: 0xf4, idx: 0xc7}, + 411: {cur: 0x1b, idx: 0x0}, + 412: {cur: 0x37, idx: 0x24a}, + 413: {cur: 0x7b, idx: 0x0}, + 414: {cur: 0x7c, idx: 0x0}, + 415: {cur: 0x87, idx: 0x0}, + 416: {cur: 0x90, idx: 0x0}, + 417: {cur: 0xa8, idx: 0x0}, + 418: {cur: 0xc8, idx: 0x4a6}, + 419: {cur: 0xcb, idx: 0x33d}, + 420: {cur: 0xd1, idx: 0x4a9}, + 421: {cur: 0x103, idx: 0x0}, + 422: {cur: 0xf4, idx: 0xc7}, + 423: {cur: 0xf4, idx: 0xc7}, + 424: {cur: 0xf4, idx: 0xc7}, + 425: {cur: 0xda, idx: 0x4b7}, + 426: {cur: 0xf4, idx: 0xc7}, + 427: {cur: 0xf4, idx: 0xc7}, + 428: {cur: 0xf4, idx: 0xc7}, + 429: {cur: 0x1a, idx: 0x23e}, + 430: {cur: 0x32, idx: 0x247}, + 431: {cur: 0xcf, idx: 0x4f}, + 432: {cur: 0xf4, idx: 0xc7}, + 433: {cur: 0xbe, idx: 0x4d1}, + 434: {cur: 0xf4, idx: 0xc7}, + 435: {cur: 0xf4, idx: 0xc7}, + 436: {cur: 0xf4, idx: 0xc7}, + 437: {cur: 0xcf, idx: 0x4f}, + 438: {cur: 0xf4, idx: 0xc7}, + 439: {cur: 0xf4, idx: 0xc7}, + 440: {cur: 0x64, idx: 0x4ec}, + 441: {cur: 0xcf, idx: 0x4f}, + 442: {cur: 0xf4, idx: 0xc7}, + 443: {cur: 0x37, idx: 0x24a}, + 444: {cur: 0x92, idx: 0x503}, + 445: {cur: 0xf4, idx: 0xc7}, + 446: {cur: 0xf4, idx: 0xc7}, + 447: {cur: 0xf4, idx: 0xc7}, + 448: {cur: 0x64, idx: 0x4ec}, + 449: {cur: 0xf4, idx: 0xc7}, + 450: {cur: 0x37, idx: 0x529}, + 451: {cur: 0x64, idx: 0x4ec}, + 452: {cur: 0xf4, idx: 0xc7}, + 453: {cur: 0x5b, idx: 0x0}, + 454: {cur: 0xcf, idx: 0x4f}, + 455: {cur: 0xf4, idx: 0xc7}, + 456: {cur: 0xf4, idx: 0xc7}, + 457: {cur: 0xf4, idx: 0xc7}, + 458: {cur: 0xf4, idx: 0xc7}, + 459: {cur: 0xf4, idx: 0xc7}, + 460: {cur: 0xcf, idx: 0x4f}, + 461: {cur: 0xf4, idx: 0xc7}, + 462: {cur: 0xf4, idx: 0xc7}, + 463: {cur: 0xf4, idx: 0xc7}, + 464: {cur: 0xf4, idx: 0xc7}, + 465: {cur: 0xcf, idx: 0x4f}, + 466: {cur: 0xf4, idx: 0xc7}, + 467: {cur: 0xcf, idx: 0x4f}, + 468: {cur: 0x37, idx: 0x56d}, + 469: {cur: 0x51, idx: 0x33a}, + 470: {cur: 0x74, idx: 0x49c}, + 471: {cur: 0x80, idx: 0x33a}, + 472: {cur: 0xbd, idx: 0x33a}, + 473: {cur: 0xc8, idx: 0x570}, + 474: {cur: 0xda, idx: 0x33a}, + 475: {cur: 0xf4, idx: 0xc7}, +} // Size: 1928 bytes + +// Total table size 18528 bytes (18KiB); checksum: 463A94A0 diff --git a/vendor/golang.org/x/text/currency/tables_test.go b/vendor/golang.org/x/text/currency/tables_test.go new file mode 100644 index 0000000..779f500 --- /dev/null +++ b/vendor/golang.org/x/text/currency/tables_test.go @@ -0,0 +1,93 @@ +package currency + +import ( + "flag" + "strings" + "testing" + "time" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" + "golang.org/x/text/message" + "golang.org/x/text/unicode/cldr" +) + +var draft = flag.String("draft", + "contributed", + `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`) + +func TestTables(t *testing.T) { + testtext.SkipIfNotLong(t) + + // Read the CLDR zip file. + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + d.SetDirFilter("supplemental", "main") + d.SetSectionFilter("numbers") + data, err := d.DecodeZip(r) + if err != nil { + t.Fatalf("DecodeZip: %v", err) + } + + dr, err := cldr.ParseDraft(*draft) + if err != nil { + t.Fatalf("filter: %v", err) + } + + for _, lang := range data.Locales() { + p := message.NewPrinter(language.MustParse(lang)) + + ldml := data.RawLDML(lang) + if ldml.Numbers == nil || ldml.Numbers.Currencies == nil { + continue + } + for _, c := range ldml.Numbers.Currencies.Currency { + syms := cldr.MakeSlice(&c.Symbol) + syms.SelectDraft(dr) + + for _, sym := range c.Symbol { + cur, err := ParseISO(c.Type) + if err != nil { + continue + } + formatter := Symbol + switch sym.Alt { + case "": + case "narrow": + formatter = NarrowSymbol + default: + continue + } + want := sym.Data() + if got := p.Sprint(formatter(cur)); got != want { + t.Errorf("%s:%sSymbol(%s) = %s; want %s", lang, strings.Title(sym.Alt), c.Type, got, want) + } + } + } + } + + for _, reg := range data.Supplemental().CurrencyData.Region { + i := 0 + for ; regionData[i].Region().String() != reg.Iso3166; i++ { + } + it := Query(Historical, NonTender, Region(language.MustParseRegion(reg.Iso3166))) + for _, cur := range reg.Currency { + from, _ := time.Parse("2006-01-02", cur.From) + to, _ := time.Parse("2006-01-02", cur.To) + + it.Next() + for j, r := range []QueryIter{&iter{regionInfo: ®ionData[i]}, it} { + if got, _ := r.From(); from != got { + t.Errorf("%d:%s:%s:from: got %v; want %v", j, reg.Iso3166, cur.Iso4217, got, from) + } + if got, _ := r.To(); to != got { + t.Errorf("%d:%s:%s:to: got %v; want %v", j, reg.Iso3166, cur.Iso4217, got, to) + } + } + i++ + } + } +} diff --git a/vendor/golang.org/x/text/doc.go b/vendor/golang.org/x/text/doc.go new file mode 100644 index 0000000..a48e284 --- /dev/null +++ b/vendor/golang.org/x/text/doc.go @@ -0,0 +1,13 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// text is a repository of text-related packages related to internationalization +// (i18n) and localization (l10n), such as character encodings, text +// transformations, and locale-specific text handling. +package text + +// TODO: more documentation on general concepts, such as Transformers, use +// of normalization, etc. diff --git a/vendor/golang.org/x/text/encoding/charmap/charmap.go b/vendor/golang.org/x/text/encoding/charmap/charmap.go new file mode 100644 index 0000000..e89ff07 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/charmap/charmap.go @@ -0,0 +1,249 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run maketables.go + +// Package charmap provides simple character encodings such as IBM Code Page 437 +// and Windows 1252. +package charmap // import "golang.org/x/text/encoding/charmap" + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// These encodings vary only in the way clients should interpret them. Their +// coded character set is identical and a single implementation can be shared. +var ( + // ISO8859_6E is the ISO 8859-6E encoding. + ISO8859_6E encoding.Encoding = &iso8859_6E + + // ISO8859_6I is the ISO 8859-6I encoding. + ISO8859_6I encoding.Encoding = &iso8859_6I + + // ISO8859_8E is the ISO 8859-8E encoding. + ISO8859_8E encoding.Encoding = &iso8859_8E + + // ISO8859_8I is the ISO 8859-8I encoding. + ISO8859_8I encoding.Encoding = &iso8859_8I + + iso8859_6E = internal.Encoding{ + Encoding: ISO8859_6, + Name: "ISO-8859-6E", + MIB: identifier.ISO88596E, + } + + iso8859_6I = internal.Encoding{ + Encoding: ISO8859_6, + Name: "ISO-8859-6I", + MIB: identifier.ISO88596I, + } + + iso8859_8E = internal.Encoding{ + Encoding: ISO8859_8, + Name: "ISO-8859-8E", + MIB: identifier.ISO88598E, + } + + iso8859_8I = internal.Encoding{ + Encoding: ISO8859_8, + Name: "ISO-8859-8I", + MIB: identifier.ISO88598I, + } +) + +// All is a list of all defined encodings in this package. +var All []encoding.Encoding = listAll + +// TODO: implement these encodings, in order of importance. +// ASCII, ISO8859_1: Rather common. Close to Windows 1252. +// ISO8859_9: Close to Windows 1254. + +// utf8Enc holds a rune's UTF-8 encoding in data[:len]. +type utf8Enc struct { + len uint8 + data [3]byte +} + +// Charmap is an 8-bit character set encoding. +type Charmap struct { + // name is the encoding's name. + name string + // mib is the encoding type of this encoder. + mib identifier.MIB + // asciiSuperset states whether the encoding is a superset of ASCII. + asciiSuperset bool + // low is the lower bound of the encoded byte for a non-ASCII rune. If + // Charmap.asciiSuperset is true then this will be 0x80, otherwise 0x00. + low uint8 + // replacement is the encoded replacement character. + replacement byte + // decode is the map from encoded byte to UTF-8. + decode [256]utf8Enc + // encoding is the map from runes to encoded bytes. Each entry is a + // uint32: the high 8 bits are the encoded byte and the low 24 bits are + // the rune. The table entries are sorted by ascending rune. + encode [256]uint32 +} + +// NewDecoder implements the encoding.Encoding interface. +func (m *Charmap) NewDecoder() *encoding.Decoder { + return &encoding.Decoder{Transformer: charmapDecoder{charmap: m}} +} + +// NewEncoder implements the encoding.Encoding interface. +func (m *Charmap) NewEncoder() *encoding.Encoder { + return &encoding.Encoder{Transformer: charmapEncoder{charmap: m}} +} + +// String returns the Charmap's name. +func (m *Charmap) String() string { + return m.name +} + +// ID implements an internal interface. +func (m *Charmap) ID() (mib identifier.MIB, other string) { + return m.mib, "" +} + +// charmapDecoder implements transform.Transformer by decoding to UTF-8. +type charmapDecoder struct { + transform.NopResetter + charmap *Charmap +} + +func (m charmapDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for i, c := range src { + if m.charmap.asciiSuperset && c < utf8.RuneSelf { + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = c + nDst++ + nSrc = i + 1 + continue + } + + decode := &m.charmap.decode[c] + n := int(decode.len) + if nDst+n > len(dst) { + err = transform.ErrShortDst + break + } + // It's 15% faster to avoid calling copy for these tiny slices. + for j := 0; j < n; j++ { + dst[nDst] = decode.data[j] + nDst++ + } + nSrc = i + 1 + } + return nDst, nSrc, err +} + +// DecodeByte returns the Charmap's rune decoding of the byte b. +func (m *Charmap) DecodeByte(b byte) rune { + switch x := &m.decode[b]; x.len { + case 1: + return rune(x.data[0]) + case 2: + return rune(x.data[0]&0x1f)<<6 | rune(x.data[1]&0x3f) + default: + return rune(x.data[0]&0x0f)<<12 | rune(x.data[1]&0x3f)<<6 | rune(x.data[2]&0x3f) + } +} + +// charmapEncoder implements transform.Transformer by encoding from UTF-8. +type charmapEncoder struct { + transform.NopResetter + charmap *Charmap +} + +func (m charmapEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for nSrc < len(src) { + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + if m.charmap.asciiSuperset { + nSrc++ + dst[nDst] = uint8(r) + nDst++ + continue + } + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + } else { + err = internal.RepertoireError(m.charmap.replacement) + } + break + } + } + + // Binary search in [low, high) for that rune in the m.charmap.encode table. + for low, high := int(m.charmap.low), 0x100; ; { + if low >= high { + err = internal.RepertoireError(m.charmap.replacement) + break loop + } + mid := (low + high) / 2 + got := m.charmap.encode[mid] + gotRune := rune(got & (1<<24 - 1)) + if gotRune < r { + low = mid + 1 + } else if gotRune > r { + high = mid + } else { + dst[nDst] = byte(got >> 24) + nDst++ + break + } + } + nSrc += size + } + return nDst, nSrc, err +} + +// EncodeRune returns the Charmap's byte encoding of the rune r. ok is whether +// r is in the Charmap's repertoire. If not, b is set to the Charmap's +// replacement byte. This is often the ASCII substitute character '\x1a'. +func (m *Charmap) EncodeRune(r rune) (b byte, ok bool) { + if r < utf8.RuneSelf && m.asciiSuperset { + return byte(r), true + } + for low, high := int(m.low), 0x100; ; { + if low >= high { + return m.replacement, false + } + mid := (low + high) / 2 + got := m.encode[mid] + gotRune := rune(got & (1<<24 - 1)) + if gotRune < r { + low = mid + 1 + } else if gotRune > r { + high = mid + } else { + return byte(got >> 24), true + } + } +} diff --git a/vendor/golang.org/x/text/encoding/charmap/charmap_test.go b/vendor/golang.org/x/text/encoding/charmap/charmap_test.go new file mode 100644 index 0000000..03dd76e --- /dev/null +++ b/vendor/golang.org/x/text/encoding/charmap/charmap_test.go @@ -0,0 +1,258 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package charmap + +import ( + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/enctest" + "golang.org/x/text/transform" +) + +func dec(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Decode", e.NewDecoder(), nil +} + +func encASCIISuperset(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Encode", e.NewEncoder(), internal.ErrASCIIReplacement +} + +func encEBCDIC(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Encode", e.NewEncoder(), internal.RepertoireError(0x3f) +} + +func TestNonRepertoire(t *testing.T) { + testCases := []struct { + init func(e encoding.Encoding) (string, transform.Transformer, error) + e encoding.Encoding + src, want string + }{ + {dec, Windows1252, "\x81", "\ufffd"}, + + {encEBCDIC, CodePage037, "갂", ""}, + + {encEBCDIC, CodePage1047, "갂", ""}, + {encEBCDIC, CodePage1047, "a¤갂", "\x81\x9F"}, + + {encEBCDIC, CodePage1140, "갂", ""}, + {encEBCDIC, CodePage1140, "a€갂", "\x81\x9F"}, + + {encASCIISuperset, Windows1252, "갂", ""}, + {encASCIISuperset, Windows1252, "a갂", "a"}, + {encASCIISuperset, Windows1252, "\u00E9갂", "\xE9"}, + } + for _, tc := range testCases { + dir, tr, wantErr := tc.init(tc.e) + + dst, _, err := transform.String(tr, tc.src) + if err != wantErr { + t.Errorf("%s %v(%q): got %v; want %v", dir, tc.e, tc.src, err, wantErr) + } + if got := string(dst); got != tc.want { + t.Errorf("%s %v(%q):\ngot %q\nwant %q", dir, tc.e, tc.src, got, tc.want) + } + } +} + +func TestBasics(t *testing.T) { + testCases := []struct { + e encoding.Encoding + encoded string + utf8 string + }{{ + e: CodePage037, + encoded: "\xc8\x51\xba\x93\xcf", + utf8: "Hé[lõ", + }, { + e: CodePage437, + encoded: "H\x82ll\x93 \x9d\xa7\xf4\x9c\xbe", + utf8: "Héllô ¥º⌠£╛", + }, { + e: CodePage866, + encoded: "H\xf3\xd3o \x98\xfd\x9f\xdd\xa1", + utf8: "Hє╙o Ш¤Я▌б", + }, { + e: CodePage1047, + encoded: "\xc8\x54\x93\x93\x9f", + utf8: "Hèll¤", + }, { + e: CodePage1140, + encoded: "\xc8\x9f\x93\x93\xcf", + utf8: "H€llõ", + }, { + e: ISO8859_2, + encoded: "Hel\xe5\xf5", + utf8: "Helĺő", + }, { + e: ISO8859_3, + encoded: "He\xbd\xd4", + utf8: "He½Ô", + }, { + e: ISO8859_4, + encoded: "Hel\xb6\xf8", + utf8: "Helļø", + }, { + e: ISO8859_5, + encoded: "H\xd7\xc6o", + utf8: "HзЦo", + }, { + e: ISO8859_6, + encoded: "Hel\xc2\xc9", + utf8: "Helآة", + }, { + e: ISO8859_7, + encoded: "H\xeel\xebo", + utf8: "Hξlλo", + }, { + e: ISO8859_8, + encoded: "Hel\xf5\xed", + utf8: "Helץם", + }, { + e: ISO8859_9, + encoded: "\xdeayet", + utf8: "Şayet", + }, { + e: ISO8859_10, + encoded: "H\xea\xbfo", + utf8: "Hęŋo", + }, { + e: ISO8859_13, + encoded: "H\xe6l\xf9o", + utf8: "Hęlło", + }, { + e: ISO8859_14, + encoded: "He\xfe\xd0o", + utf8: "HeŷŴo", + }, { + e: ISO8859_15, + encoded: "H\xa4ll\xd8", + utf8: "H€llØ", + }, { + e: ISO8859_16, + encoded: "H\xe6ll\xbd", + utf8: "Hællœ", + }, { + e: KOI8R, + encoded: "He\x93\xad\x9c", + utf8: "He⌠╜°", + }, { + e: KOI8U, + encoded: "He\x93\xad\x9c", + utf8: "He⌠ґ°", + }, { + e: Macintosh, + encoded: "He\xdf\xd7", + utf8: "Hefl◊", + }, { + e: MacintoshCyrillic, + encoded: "He\xbe\x94", + utf8: "HeЊФ", + }, { + e: Windows874, + encoded: "He\xb7\xf0", + utf8: "Heท๐", + }, { + e: Windows1250, + encoded: "He\xe5\xe5o", + utf8: "Heĺĺo", + }, { + e: Windows1251, + encoded: "H\xball\xfe", + utf8: "Hєllю", + }, { + e: Windows1252, + encoded: "H\xe9ll\xf4 \xa5\xbA\xae\xa3\xd0", + utf8: "Héllô ¥º®£Ð", + }, { + e: Windows1253, + encoded: "H\xe5ll\xd6", + utf8: "HεllΦ", + }, { + e: Windows1254, + encoded: "\xd0ello", + utf8: "Ğello", + }, { + e: Windows1255, + encoded: "He\xd4o", + utf8: "Heװo", + }, { + e: Windows1256, + encoded: "H\xdbllo", + utf8: "Hغllo", + }, { + e: Windows1257, + encoded: "He\xeflo", + utf8: "Heļlo", + }, { + e: Windows1258, + encoded: "Hell\xf5", + utf8: "Hellơ", + }, { + e: XUserDefined, + encoded: "\x00\x40\x7f\x80\xab\xff", + utf8: "\u0000\u0040\u007f\uf780\uf7ab\uf7ff", + }} + + for _, tc := range testCases { + enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, "", "") + } +} + +var windows1255TestCases = []struct { + b byte + ok bool + r rune +}{ + {'\x00', true, '\u0000'}, + {'\x1a', true, '\u001a'}, + {'\x61', true, '\u0061'}, + {'\x7f', true, '\u007f'}, + {'\x80', true, '\u20ac'}, + {'\x95', true, '\u2022'}, + {'\xa0', true, '\u00a0'}, + {'\xc0', true, '\u05b0'}, + {'\xfc', true, '\ufffd'}, + {'\xfd', true, '\u200e'}, + {'\xfe', true, '\u200f'}, + {'\xff', true, '\ufffd'}, + {encoding.ASCIISub, false, '\u0400'}, + {encoding.ASCIISub, false, '\u2603'}, + {encoding.ASCIISub, false, '\U0001f4a9'}, +} + +func TestDecodeByte(t *testing.T) { + for _, tc := range windows1255TestCases { + if !tc.ok { + continue + } + + got := Windows1255.DecodeByte(tc.b) + want := tc.r + if got != want { + t.Errorf("DecodeByte(%#02x): got %#08x, want %#08x", tc.b, got, want) + } + } +} + +func TestEncodeRune(t *testing.T) { + for _, tc := range windows1255TestCases { + // There can be multiple tc.b values that map to tc.r = '\ufffd'. + if tc.r == '\ufffd' { + continue + } + + gotB, gotOK := Windows1255.EncodeRune(tc.r) + wantB, wantOK := tc.b, tc.ok + if gotB != wantB || gotOK != wantOK { + t.Errorf("EncodeRune(%#08x): got (%#02x, %t), want (%#02x, %t)", tc.r, gotB, gotOK, wantB, wantOK) + } + } +} + +func TestFiles(t *testing.T) { enctest.TestFile(t, Windows1252) } + +func BenchmarkEncoding(b *testing.B) { enctest.Benchmark(b, Windows1252) } diff --git a/vendor/golang.org/x/text/encoding/charmap/maketables.go b/vendor/golang.org/x/text/encoding/charmap/maketables.go new file mode 100644 index 0000000..f794170 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/charmap/maketables.go @@ -0,0 +1,556 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "bufio" + "fmt" + "log" + "net/http" + "sort" + "strings" + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/internal/gen" +) + +const ascii = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" + + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" + + ` !"#$%&'()*+,-./0123456789:;<=>?` + + `@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` + + "`abcdefghijklmnopqrstuvwxyz{|}~\u007f" + +var encodings = []struct { + name string + mib string + comment string + varName string + replacement byte + mapping string +}{ + { + "IBM Code Page 037", + "IBM037", + "", + "CodePage037", + 0x3f, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM037-2.1.2.ucm", + }, + { + "IBM Code Page 437", + "PC8CodePage437", + "", + "CodePage437", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM437-2.1.2.ucm", + }, + { + "IBM Code Page 850", + "PC850Multilingual", + "", + "CodePage850", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM850-2.1.2.ucm", + }, + { + "IBM Code Page 852", + "PCp852", + "", + "CodePage852", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM852-2.1.2.ucm", + }, + { + "IBM Code Page 855", + "IBM855", + "", + "CodePage855", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM855-2.1.2.ucm", + }, + { + "Windows Code Page 858", // PC latin1 with Euro + "IBM00858", + "", + "CodePage858", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/windows-858-2000.ucm", + }, + { + "IBM Code Page 860", + "IBM860", + "", + "CodePage860", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM860-2.1.2.ucm", + }, + { + "IBM Code Page 862", + "PC862LatinHebrew", + "", + "CodePage862", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM862-2.1.2.ucm", + }, + { + "IBM Code Page 863", + "IBM863", + "", + "CodePage863", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM863-2.1.2.ucm", + }, + { + "IBM Code Page 865", + "IBM865", + "", + "CodePage865", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM865-2.1.2.ucm", + }, + { + "IBM Code Page 866", + "IBM866", + "", + "CodePage866", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-ibm866.txt", + }, + { + "IBM Code Page 1047", + "IBM1047", + "", + "CodePage1047", + 0x3f, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM1047-2.1.2.ucm", + }, + { + "IBM Code Page 1140", + "IBM01140", + "", + "CodePage1140", + 0x3f, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/ibm-1140_P100-1997.ucm", + }, + { + "ISO 8859-1", + "ISOLatin1", + "", + "ISO8859_1", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/iso-8859_1-1998.ucm", + }, + { + "ISO 8859-2", + "ISOLatin2", + "", + "ISO8859_2", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-2.txt", + }, + { + "ISO 8859-3", + "ISOLatin3", + "", + "ISO8859_3", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-3.txt", + }, + { + "ISO 8859-4", + "ISOLatin4", + "", + "ISO8859_4", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-4.txt", + }, + { + "ISO 8859-5", + "ISOLatinCyrillic", + "", + "ISO8859_5", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-5.txt", + }, + { + "ISO 8859-6", + "ISOLatinArabic", + "", + "ISO8859_6,ISO8859_6E,ISO8859_6I", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-6.txt", + }, + { + "ISO 8859-7", + "ISOLatinGreek", + "", + "ISO8859_7", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-7.txt", + }, + { + "ISO 8859-8", + "ISOLatinHebrew", + "", + "ISO8859_8,ISO8859_8E,ISO8859_8I", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-8.txt", + }, + { + "ISO 8859-9", + "ISOLatin5", + "", + "ISO8859_9", + encoding.ASCIISub, + "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/iso-8859_9-1999.ucm", + }, + { + "ISO 8859-10", + "ISOLatin6", + "", + "ISO8859_10", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-10.txt", + }, + { + "ISO 8859-13", + "ISO885913", + "", + "ISO8859_13", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-13.txt", + }, + { + "ISO 8859-14", + "ISO885914", + "", + "ISO8859_14", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-14.txt", + }, + { + "ISO 8859-15", + "ISO885915", + "", + "ISO8859_15", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-15.txt", + }, + { + "ISO 8859-16", + "ISO885916", + "", + "ISO8859_16", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-iso-8859-16.txt", + }, + { + "KOI8-R", + "KOI8R", + "", + "KOI8R", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-koi8-r.txt", + }, + { + "KOI8-U", + "KOI8U", + "", + "KOI8U", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-koi8-u.txt", + }, + { + "Macintosh", + "Macintosh", + "", + "Macintosh", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-macintosh.txt", + }, + { + "Macintosh Cyrillic", + "MacintoshCyrillic", + "", + "MacintoshCyrillic", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-x-mac-cyrillic.txt", + }, + { + "Windows 874", + "Windows874", + "", + "Windows874", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-874.txt", + }, + { + "Windows 1250", + "Windows1250", + "", + "Windows1250", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1250.txt", + }, + { + "Windows 1251", + "Windows1251", + "", + "Windows1251", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1251.txt", + }, + { + "Windows 1252", + "Windows1252", + "", + "Windows1252", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1252.txt", + }, + { + "Windows 1253", + "Windows1253", + "", + "Windows1253", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1253.txt", + }, + { + "Windows 1254", + "Windows1254", + "", + "Windows1254", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1254.txt", + }, + { + "Windows 1255", + "Windows1255", + "", + "Windows1255", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1255.txt", + }, + { + "Windows 1256", + "Windows1256", + "", + "Windows1256", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1256.txt", + }, + { + "Windows 1257", + "Windows1257", + "", + "Windows1257", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1257.txt", + }, + { + "Windows 1258", + "Windows1258", + "", + "Windows1258", + encoding.ASCIISub, + "http://encoding.spec.whatwg.org/index-windows-1258.txt", + }, + { + "X-User-Defined", + "XUserDefined", + "It is defined at http://encoding.spec.whatwg.org/#x-user-defined", + "XUserDefined", + encoding.ASCIISub, + ascii + + "\uf780\uf781\uf782\uf783\uf784\uf785\uf786\uf787" + + "\uf788\uf789\uf78a\uf78b\uf78c\uf78d\uf78e\uf78f" + + "\uf790\uf791\uf792\uf793\uf794\uf795\uf796\uf797" + + "\uf798\uf799\uf79a\uf79b\uf79c\uf79d\uf79e\uf79f" + + "\uf7a0\uf7a1\uf7a2\uf7a3\uf7a4\uf7a5\uf7a6\uf7a7" + + "\uf7a8\uf7a9\uf7aa\uf7ab\uf7ac\uf7ad\uf7ae\uf7af" + + "\uf7b0\uf7b1\uf7b2\uf7b3\uf7b4\uf7b5\uf7b6\uf7b7" + + "\uf7b8\uf7b9\uf7ba\uf7bb\uf7bc\uf7bd\uf7be\uf7bf" + + "\uf7c0\uf7c1\uf7c2\uf7c3\uf7c4\uf7c5\uf7c6\uf7c7" + + "\uf7c8\uf7c9\uf7ca\uf7cb\uf7cc\uf7cd\uf7ce\uf7cf" + + "\uf7d0\uf7d1\uf7d2\uf7d3\uf7d4\uf7d5\uf7d6\uf7d7" + + "\uf7d8\uf7d9\uf7da\uf7db\uf7dc\uf7dd\uf7de\uf7df" + + "\uf7e0\uf7e1\uf7e2\uf7e3\uf7e4\uf7e5\uf7e6\uf7e7" + + "\uf7e8\uf7e9\uf7ea\uf7eb\uf7ec\uf7ed\uf7ee\uf7ef" + + "\uf7f0\uf7f1\uf7f2\uf7f3\uf7f4\uf7f5\uf7f6\uf7f7" + + "\uf7f8\uf7f9\uf7fa\uf7fb\uf7fc\uf7fd\uf7fe\uf7ff", + }, +} + +func getWHATWG(url string) string { + res, err := http.Get(url) + if err != nil { + log.Fatalf("%q: Get: %v", url, err) + } + defer res.Body.Close() + + mapping := make([]rune, 128) + for i := range mapping { + mapping[i] = '\ufffd' + } + + scanner := bufio.NewScanner(res.Body) + for scanner.Scan() { + s := strings.TrimSpace(scanner.Text()) + if s == "" || s[0] == '#' { + continue + } + x, y := 0, 0 + if _, err := fmt.Sscanf(s, "%d\t0x%x", &x, &y); err != nil { + log.Fatalf("could not parse %q", s) + } + if x < 0 || 128 <= x { + log.Fatalf("code %d is out of range", x) + } + if 0x80 <= y && y < 0xa0 { + // We diverge from the WHATWG spec by mapping control characters + // in the range [0x80, 0xa0) to U+FFFD. + continue + } + mapping[x] = rune(y) + } + return ascii + string(mapping) +} + +func getUCM(url string) string { + res, err := http.Get(url) + if err != nil { + log.Fatalf("%q: Get: %v", url, err) + } + defer res.Body.Close() + + mapping := make([]rune, 256) + for i := range mapping { + mapping[i] = '\ufffd' + } + + charsFound := 0 + scanner := bufio.NewScanner(res.Body) + for scanner.Scan() { + s := strings.TrimSpace(scanner.Text()) + if s == "" || s[0] == '#' { + continue + } + var c byte + var r rune + if _, err := fmt.Sscanf(s, `<U%x> \x%x |0`, &r, &c); err != nil { + continue + } + mapping[c] = r + charsFound++ + } + + if charsFound < 200 { + log.Fatalf("%q: only %d characters found (wrong page format?)", url, charsFound) + } + + return string(mapping) +} + +func main() { + mibs := map[string]bool{} + all := []string{} + + w := gen.NewCodeWriter() + defer w.WriteGoFile("tables.go", "charmap") + + printf := func(s string, a ...interface{}) { fmt.Fprintf(w, s, a...) } + + printf("import (\n") + printf("\t\"golang.org/x/text/encoding\"\n") + printf("\t\"golang.org/x/text/encoding/internal/identifier\"\n") + printf(")\n\n") + for _, e := range encodings { + varNames := strings.Split(e.varName, ",") + all = append(all, varNames...) + varName := varNames[0] + switch { + case strings.HasPrefix(e.mapping, "http://encoding.spec.whatwg.org/"): + e.mapping = getWHATWG(e.mapping) + case strings.HasPrefix(e.mapping, "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/"): + e.mapping = getUCM(e.mapping) + } + + asciiSuperset, low := strings.HasPrefix(e.mapping, ascii), 0x00 + if asciiSuperset { + low = 0x80 + } + lvn := 1 + if strings.HasPrefix(varName, "ISO") || strings.HasPrefix(varName, "KOI") { + lvn = 3 + } + lowerVarName := strings.ToLower(varName[:lvn]) + varName[lvn:] + printf("// %s is the %s encoding.\n", varName, e.name) + if e.comment != "" { + printf("//\n// %s\n", e.comment) + } + printf("var %s *Charmap = &%s\n\nvar %s = Charmap{\nname: %q,\n", + varName, lowerVarName, lowerVarName, e.name) + if mibs[e.mib] { + log.Fatalf("MIB type %q declared multiple times.", e.mib) + } + printf("mib: identifier.%s,\n", e.mib) + printf("asciiSuperset: %t,\n", asciiSuperset) + printf("low: 0x%02x,\n", low) + printf("replacement: 0x%02x,\n", e.replacement) + + printf("decode: [256]utf8Enc{\n") + i, backMapping := 0, map[rune]byte{} + for _, c := range e.mapping { + if _, ok := backMapping[c]; !ok && c != utf8.RuneError { + backMapping[c] = byte(i) + } + var buf [8]byte + n := utf8.EncodeRune(buf[:], c) + if n > 3 { + panic(fmt.Sprintf("rune %q (%U) is too long", c, c)) + } + printf("{%d,[3]byte{0x%02x,0x%02x,0x%02x}},", n, buf[0], buf[1], buf[2]) + if i%2 == 1 { + printf("\n") + } + i++ + } + printf("},\n") + + printf("encode: [256]uint32{\n") + encode := make([]uint32, 0, 256) + for c, i := range backMapping { + encode = append(encode, uint32(i)<<24|uint32(c)) + } + sort.Sort(byRune(encode)) + for len(encode) < cap(encode) { + encode = append(encode, encode[len(encode)-1]) + } + for i, enc := range encode { + printf("0x%08x,", enc) + if i%8 == 7 { + printf("\n") + } + } + printf("},\n}\n") + + // Add an estimate of the size of a single Charmap{} struct value, which + // includes two 256 elem arrays of 4 bytes and some extra fields, which + // align to 3 uint64s on 64-bit architectures. + w.Size += 2*4*256 + 3*8 + } + // TODO: add proper line breaking. + printf("var listAll = []encoding.Encoding{\n%s,\n}\n\n", strings.Join(all, ",\n")) +} + +type byRune []uint32 + +func (b byRune) Len() int { return len(b) } +func (b byRune) Less(i, j int) bool { return b[i]&0xffffff < b[j]&0xffffff } +func (b byRune) Swap(i, j int) { b[i], b[j] = b[j], b[i] } diff --git a/vendor/golang.org/x/text/encoding/charmap/tables.go b/vendor/golang.org/x/text/encoding/charmap/tables.go new file mode 100644 index 0000000..cf7281e --- /dev/null +++ b/vendor/golang.org/x/text/encoding/charmap/tables.go @@ -0,0 +1,7410 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package charmap + +import ( + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/identifier" +) + +// CodePage037 is the IBM Code Page 037 encoding. +var CodePage037 *Charmap = &codePage037 + +var codePage037 = Charmap{ + name: "IBM Code Page 037", + mib: identifier.IBM037, + asciiSuperset: false, + low: 0x00, + replacement: 0x3f, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}}, + {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}}, + {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}}, + {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}}, + {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}}, + {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}}, + {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}}, + {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}}, + {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}}, + {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}}, + {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}}, + {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}}, + {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}}, + {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}}, + {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}}, + {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}}, + {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}}, + {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}}, + {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}}, + {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}}, + {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007, + 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017, + 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027, + 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f, + 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037, + 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f, + 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047, + 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f, + 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057, + 0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f, + 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067, + 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f, + 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077, + 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f, + 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087, + 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f, + 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097, + 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f, + 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7, + 0xbd0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, + 0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, + 0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, + 0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, + 0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, + 0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, + 0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df, + 0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, + 0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, + 0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, + 0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, + }, +} + +// CodePage437 is the IBM Code Page 437 encoding. +var CodePage437 *Charmap = &codePage437 + +var codePage437 = Charmap{ + name: "IBM Code Page 437", + mib: identifier.PC8CodePage437, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0x9d0000a5, 0xa60000aa, 0xae0000ab, 0xaa0000ac, + 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc, + 0xab0000bd, 0xa80000bf, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, 0x900000c9, 0xa50000d1, + 0x990000d6, 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e4, 0x860000e5, + 0x910000e6, 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, + 0x8c0000ee, 0x8b0000ef, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, + 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x980000ff, 0x9f000192, 0xe2000393, 0xe9000398, + 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, + 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229, + 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage850 is the IBM Code Page 850 encoding. +var CodePage850 *Charmap = &codePage850 + +var codePage850 = Charmap{ + name: "IBM Code Page 850", + mib: identifier.PC850Multilingual, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}}, + {2, [3]byte{0xc3, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc2, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xbe, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}}, + {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x97}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0xbd0000a2, 0x9c0000a3, 0xcf0000a4, 0xbe0000a5, 0xdd0000a6, 0xf50000a7, + 0xf90000a8, 0xb80000a9, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xa90000ae, 0xee0000af, + 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xfc0000b3, 0xef0000b4, 0xe60000b5, 0xf40000b6, 0xfa0000b7, + 0xf70000b8, 0xfb0000b9, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xf30000be, 0xa80000bf, + 0xb70000c0, 0xb50000c1, 0xb60000c2, 0xc70000c3, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, + 0xd40000c8, 0x900000c9, 0xd20000ca, 0xd30000cb, 0xde0000cc, 0xd60000cd, 0xd70000ce, 0xd80000cf, + 0xd10000d0, 0xa50000d1, 0xe30000d2, 0xe00000d3, 0xe20000d4, 0xe50000d5, 0x990000d6, 0x9e0000d7, + 0x9d0000d8, 0xeb0000d9, 0xe90000da, 0xea0000db, 0x9a0000dc, 0xed0000dd, 0xe80000de, 0xe10000df, + 0x850000e0, 0xa00000e1, 0x830000e2, 0xc60000e3, 0x840000e4, 0x860000e5, 0x910000e6, 0x870000e7, + 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, 0x8b0000ef, + 0xd00000f0, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0xe40000f5, 0x940000f6, 0xf60000f7, + 0x9b0000f8, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0xec0000fd, 0xe70000fe, 0x980000ff, + 0xd5000131, 0x9f000192, 0xf2002017, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, + 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, + 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569, + 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage852 is the IBM Code Page 852 encoding. +var CodePage852 *Charmap = &codePage852 + +var codePage852 = Charmap{ + name: "IBM Code Page 852", + mib: identifier.PCp852, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc5, 0x82, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc5, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}}, + {2, [3]byte{0xc4, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc4, 0xbd, 0x00}}, + {2, [3]byte{0xc4, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0x9a, 0x00}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}}, + {2, [3]byte{0xc5, 0xa5, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc4, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xbe, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc5, 0xba, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc5, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x9a, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xbc, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {2, [3]byte{0xc4, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc4, 0x90, 0x00}}, + {2, [3]byte{0xc4, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x8f, 0x00}}, {2, [3]byte{0xc5, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}}, + {2, [3]byte{0xc4, 0x9b, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc5, 0xa2, 0x00}}, + {2, [3]byte{0xc5, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x84, 0x00}}, {2, [3]byte{0xc5, 0x88, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}}, + {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}}, + {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}}, + {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xcb, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}}, + {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x99, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xcf0000a4, 0xf50000a7, 0xf90000a8, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xf80000b0, + 0xef0000b4, 0xf70000b8, 0xaf0000bb, 0xb50000c1, 0xb60000c2, 0x8e0000c4, 0x800000c7, 0x900000c9, + 0xd30000cb, 0xd60000cd, 0xd70000ce, 0xe00000d3, 0xe20000d4, 0x990000d6, 0x9e0000d7, 0xe90000da, + 0x9a0000dc, 0xed0000dd, 0xe10000df, 0xa00000e1, 0x830000e2, 0x840000e4, 0x870000e7, 0x820000e9, + 0x890000eb, 0xa10000ed, 0x8c0000ee, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, 0xa30000fa, + 0x810000fc, 0xec0000fd, 0xc6000102, 0xc7000103, 0xa4000104, 0xa5000105, 0x8f000106, 0x86000107, + 0xac00010c, 0x9f00010d, 0xd200010e, 0xd400010f, 0xd1000110, 0xd0000111, 0xa8000118, 0xa9000119, + 0xb700011a, 0xd800011b, 0x91000139, 0x9200013a, 0x9500013d, 0x9600013e, 0x9d000141, 0x88000142, + 0xe3000143, 0xe4000144, 0xd5000147, 0xe5000148, 0x8a000150, 0x8b000151, 0xe8000154, 0xea000155, + 0xfc000158, 0xfd000159, 0x9700015a, 0x9800015b, 0xb800015e, 0xad00015f, 0xe6000160, 0xe7000161, + 0xdd000162, 0xee000163, 0x9b000164, 0x9c000165, 0xde00016e, 0x8500016f, 0xeb000170, 0xfb000171, + 0x8d000179, 0xab00017a, 0xbd00017b, 0xbe00017c, 0xa600017d, 0xa700017e, 0xf30002c7, 0xf40002d8, + 0xfa0002d9, 0xf20002db, 0xf10002dd, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, + 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, + 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569, + 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage855 is the IBM Code Page 855 encoding. +var CodePage855 *Charmap = &codePage855 + +var codePage855 = Charmap{ + name: "IBM Code Page 855", + mib: identifier.IBM855, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd1, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x82, 0x00}}, + {2, [3]byte{0xd1, 0x93, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x91, 0x00}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x84, 0x00}}, + {2, [3]byte{0xd1, 0x95, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x86, 0x00}}, + {2, [3]byte{0xd1, 0x97, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}}, + {2, [3]byte{0xd1, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x8a, 0x00}}, + {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}}, + {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x8e, 0x00}}, + {2, [3]byte{0xd1, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xae, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}}, + {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0x94, 0x00}}, + {2, [3]byte{0xd0, 0xb5, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xa4, 0x00}}, + {2, [3]byte{0xd0, 0xb3, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0x99, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}}, + {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}}, + {2, [3]byte{0xd0, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd1, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xd0, 0xaf, 0x00}}, {2, [3]byte{0xd1, 0x80, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd0, 0xa1, 0x00}}, {2, [3]byte{0xd1, 0x82, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd0, 0xa3, 0x00}}, {2, [3]byte{0xd0, 0xb6, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd1, 0x8c, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x84, 0x96}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd0, 0xab, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd0, 0xa9, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xcf0000a4, 0xfd0000a7, 0xae0000ab, 0xf00000ad, 0xaf0000bb, 0x85000401, 0x81000402, + 0x83000403, 0x87000404, 0x89000405, 0x8b000406, 0x8d000407, 0x8f000408, 0x91000409, 0x9300040a, + 0x9500040b, 0x9700040c, 0x9900040e, 0x9b00040f, 0xa1000410, 0xa3000411, 0xec000412, 0xad000413, + 0xa7000414, 0xa9000415, 0xea000416, 0xf4000417, 0xb8000418, 0xbe000419, 0xc700041a, 0xd100041b, + 0xd300041c, 0xd500041d, 0xd700041e, 0xdd00041f, 0xe2000420, 0xe4000421, 0xe6000422, 0xe8000423, + 0xab000424, 0xb6000425, 0xa5000426, 0xfc000427, 0xf6000428, 0xfa000429, 0x9f00042a, 0xf200042b, + 0xee00042c, 0xf800042d, 0x9d00042e, 0xe000042f, 0xa0000430, 0xa2000431, 0xeb000432, 0xac000433, + 0xa6000434, 0xa8000435, 0xe9000436, 0xf3000437, 0xb7000438, 0xbd000439, 0xc600043a, 0xd000043b, + 0xd200043c, 0xd400043d, 0xd600043e, 0xd800043f, 0xe1000440, 0xe3000441, 0xe5000442, 0xe7000443, + 0xaa000444, 0xb5000445, 0xa4000446, 0xfb000447, 0xf5000448, 0xf9000449, 0x9e00044a, 0xf100044b, + 0xed00044c, 0xf700044d, 0x9c00044e, 0xde00044f, 0x84000451, 0x80000452, 0x82000453, 0x86000454, + 0x88000455, 0x8a000456, 0x8c000457, 0x8e000458, 0x90000459, 0x9200045a, 0x9400045b, 0x9600045c, + 0x9800045e, 0x9a00045f, 0xef002116, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, + 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, + 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569, + 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage858 is the Windows Code Page 858 encoding. +var CodePage858 *Charmap = &codePage858 + +var codePage858 = Charmap{ + name: "Windows Code Page 858", + mib: identifier.IBM00858, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}}, + {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}}, + {2, [3]byte{0xc3, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc2, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xbe, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}}, + {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x97}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0xbd0000a2, 0x9c0000a3, 0xcf0000a4, 0xbe0000a5, 0xdd0000a6, 0xf50000a7, + 0xf90000a8, 0xb80000a9, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xa90000ae, 0xee0000af, + 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xfc0000b3, 0xef0000b4, 0xe60000b5, 0xf40000b6, 0xfa0000b7, + 0xf70000b8, 0xfb0000b9, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xf30000be, 0xa80000bf, + 0xb70000c0, 0xb50000c1, 0xb60000c2, 0xc70000c3, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, + 0xd40000c8, 0x900000c9, 0xd20000ca, 0xd30000cb, 0xde0000cc, 0xd60000cd, 0xd70000ce, 0xd80000cf, + 0xd10000d0, 0xa50000d1, 0xe30000d2, 0xe00000d3, 0xe20000d4, 0xe50000d5, 0x990000d6, 0x9e0000d7, + 0x9d0000d8, 0xeb0000d9, 0xe90000da, 0xea0000db, 0x9a0000dc, 0xed0000dd, 0xe80000de, 0xe10000df, + 0x850000e0, 0xa00000e1, 0x830000e2, 0xc60000e3, 0x840000e4, 0x860000e5, 0x910000e6, 0x870000e7, + 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, 0x8b0000ef, + 0xd00000f0, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0xe40000f5, 0x940000f6, 0xf60000f7, + 0x9b0000f8, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0xec0000fd, 0xe70000fe, 0x980000ff, + 0x9f000192, 0xf2002017, 0xd50020ac, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, + 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, + 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569, + 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage860 is the IBM Code Page 860 encoding. +var CodePage860 *Charmap = &codePage860 + +var codePage860 = Charmap{ + name: "IBM Code Page 860", + mib: identifier.IBM860, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0x8a, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf80000b0, + 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, + 0xa80000bf, 0x910000c0, 0x860000c1, 0x8f0000c2, 0x8e0000c3, 0x800000c7, 0x920000c8, 0x900000c9, + 0x890000ca, 0x980000cc, 0x8b0000cd, 0xa50000d1, 0xa90000d2, 0x9f0000d3, 0x8c0000d4, 0x990000d5, + 0x9d0000d9, 0x960000da, 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e3, + 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x8d0000ec, 0xa10000ed, 0xa40000f1, 0x950000f2, + 0xa20000f3, 0x930000f4, 0x940000f5, 0xf60000f7, 0x970000f9, 0xa30000fa, 0x810000fc, 0xe2000393, + 0xe9000398, 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, + 0xe50003c3, 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, + 0xef002229, 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage862 is the IBM Code Page 862 encoding. +var CodePage862 *Charmap = &codePage862 + +var codePage862 = Charmap{ + name: "IBM Code Page 862", + mib: identifier.PC862LatinHebrew, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}}, + {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}}, + {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}}, + {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}}, + {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}}, + {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}}, + {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}}, + {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}}, + {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}}, + {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}}, + {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}}, + {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}}, + {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}}, + {2, [3]byte{0xd7, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0x9d0000a5, 0xa60000aa, 0xae0000ab, 0xaa0000ac, + 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc, + 0xab0000bd, 0xa80000bf, 0xa50000d1, 0xe10000df, 0xa00000e1, 0xa10000ed, 0xa40000f1, 0xa20000f3, + 0xf60000f7, 0xa30000fa, 0x9f000192, 0xe2000393, 0xe9000398, 0xe40003a3, 0xe80003a6, 0xea0003a9, + 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, 0xe70003c4, 0xed0003c6, 0x800005d0, + 0x810005d1, 0x820005d2, 0x830005d3, 0x840005d4, 0x850005d5, 0x860005d6, 0x870005d7, 0x880005d8, + 0x890005d9, 0x8a0005da, 0x8b0005db, 0x8c0005dc, 0x8d0005dd, 0x8e0005de, 0x8f0005df, 0x900005e0, + 0x910005e1, 0x920005e2, 0x930005e3, 0x940005e4, 0x950005e5, 0x960005e6, 0x970005e7, 0x980005e8, + 0x990005e9, 0x9a0005ea, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229, + 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage863 is the IBM Code Page 863 encoding. +var CodePage863 *Charmap = &codePage863 + +var codePage863 = Charmap{ + name: "IBM Code Page 863", + mib: identifier.IBM863, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x97}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x88, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0x8b, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0x9b0000a2, 0x9c0000a3, 0x980000a4, 0xa00000a6, 0x8f0000a7, 0xa40000a8, 0xae0000ab, + 0xaa0000ac, 0xa70000af, 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xa60000b3, 0xa10000b4, 0xe60000b5, + 0x860000b6, 0xfa0000b7, 0xa50000b8, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xad0000be, 0x8e0000c0, + 0x840000c2, 0x800000c7, 0x910000c8, 0x900000c9, 0x920000ca, 0x940000cb, 0xa80000ce, 0x950000cf, + 0x990000d4, 0x9d0000d9, 0x9e0000db, 0x9a0000dc, 0xe10000df, 0x850000e0, 0x830000e2, 0x870000e7, + 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8c0000ee, 0x8b0000ef, 0xa20000f3, 0x930000f4, + 0xf60000f7, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x9f000192, 0xe2000393, 0xe9000398, + 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, + 0xe70003c4, 0xed0003c6, 0x8d002017, 0xfc00207f, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229, + 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage865 is the IBM Code Page 865 encoding. +var CodePage865 *Charmap = &codePage865 + +var codePage865 = Charmap{ + name: "IBM Code Page 865", + mib: identifier.IBM865, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0x9c0000a3, 0xaf0000a4, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf80000b0, + 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xac0000bc, 0xab0000bd, 0xa80000bf, + 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, 0x900000c9, 0xa50000d1, 0x990000d6, 0x9d0000d8, + 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e4, 0x860000e5, 0x910000e6, + 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, + 0x8b0000ef, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, 0x9b0000f8, + 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x980000ff, 0x9f000192, 0xe2000393, 0xe9000398, + 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, + 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229, + 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage866 is the IBM Code Page 866 encoding. +var CodePage866 *Charmap = &codePage866 + +var codePage866 = Charmap{ + name: "IBM Code Page 866", + mib: identifier.IBM866, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}}, + {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {2, [3]byte{0xd0, 0x81, 0x00}}, {2, [3]byte{0xd1, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x94, 0x00}}, + {2, [3]byte{0xd0, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x9e, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xfd0000a4, 0xf80000b0, 0xfa0000b7, 0xf0000401, 0xf2000404, 0xf4000407, 0xf600040e, + 0x80000410, 0x81000411, 0x82000412, 0x83000413, 0x84000414, 0x85000415, 0x86000416, 0x87000417, + 0x88000418, 0x89000419, 0x8a00041a, 0x8b00041b, 0x8c00041c, 0x8d00041d, 0x8e00041e, 0x8f00041f, + 0x90000420, 0x91000421, 0x92000422, 0x93000423, 0x94000424, 0x95000425, 0x96000426, 0x97000427, + 0x98000428, 0x99000429, 0x9a00042a, 0x9b00042b, 0x9c00042c, 0x9d00042d, 0x9e00042e, 0x9f00042f, + 0xa0000430, 0xa1000431, 0xa2000432, 0xa3000433, 0xa4000434, 0xa5000435, 0xa6000436, 0xa7000437, + 0xa8000438, 0xa9000439, 0xaa00043a, 0xab00043b, 0xac00043c, 0xad00043d, 0xae00043e, 0xaf00043f, + 0xe0000440, 0xe1000441, 0xe2000442, 0xe3000443, 0xe4000444, 0xe5000445, 0xe6000446, 0xe7000447, + 0xe8000448, 0xe9000449, 0xea00044a, 0xeb00044b, 0xec00044c, 0xed00044d, 0xee00044e, 0xef00044f, + 0xf1000451, 0xf3000454, 0xf5000457, 0xf700045e, 0xfc002116, 0xf9002219, 0xfb00221a, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage1047 is the IBM Code Page 1047 encoding. +var CodePage1047 *Charmap = &codePage1047 + +var codePage1047 = Charmap{ + name: "IBM Code Page 1047", + mib: identifier.IBM1047, + asciiSuperset: false, + low: 0x00, + replacement: 0x3f, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}}, + {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}}, + {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x3b, 0x00, 0x00}}, {1, [3]byte{0x5e, 0x00, 0x00}}, + {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}}, + {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}}, + {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}}, + {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}}, + {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}}, + {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}}, + {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}}, + {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}}, + {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}}, + {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}}, + {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {2, [3]byte{0xc3, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}}, + {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}}, + {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}}, + {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}}, + {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}}, + {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}}, + {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}}, + {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007, + 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017, + 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027, + 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f, + 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037, + 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f, + 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047, + 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f, + 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057, + 0xe7000058, 0xe8000059, 0xe900005a, 0xad00005b, 0xe000005c, 0xbd00005d, 0x5f00005e, 0x6d00005f, + 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067, + 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f, + 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077, + 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f, + 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087, + 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f, + 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097, + 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f, + 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7, + 0xbb0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0xb00000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, + 0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, + 0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, + 0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, + 0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, + 0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, + 0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xba0000dd, 0xae0000de, 0x590000df, + 0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, + 0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, + 0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, + 0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, + }, +} + +// CodePage1140 is the IBM Code Page 1140 encoding. +var CodePage1140 *Charmap = &codePage1140 + +var codePage1140 = Charmap{ + name: "IBM Code Page 1140", + mib: identifier.IBM01140, + asciiSuperset: false, + low: 0x00, + replacement: 0x3f, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}}, + {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}}, + {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}}, + {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}}, + {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}}, + {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}}, + {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}}, + {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}}, + {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}}, + {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}}, + {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}}, + {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}}, + {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}}, + {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}}, + {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}}, + {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}}, + {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}}, + {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}}, + {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}}, + {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}}, + {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007, + 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017, + 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027, + 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f, + 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037, + 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f, + 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047, + 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f, + 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057, + 0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f, + 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067, + 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f, + 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077, + 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f, + 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087, + 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f, + 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097, + 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f, + 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0xb20000a5, 0x6a0000a6, 0xb50000a7, 0xbd0000a8, + 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, 0x900000b0, + 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, 0x9d0000b8, + 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, 0x640000c0, + 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, 0x740000c8, + 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, 0xac0000d0, + 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, 0x800000d8, + 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df, 0x440000e0, + 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, 0x540000e8, + 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, 0x8c0000f0, + 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, 0x700000f8, + 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, 0x9f0020ac, + }, +} + +// ISO8859_1 is the ISO 8859-1 encoding. +var ISO8859_1 *Charmap = &iso8859_1 + +var iso8859_1 = Charmap{ + name: "ISO 8859-1", + mib: identifier.ISOLatin1, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087, + 0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f, + 0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097, + 0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, + 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, + 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, + 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, + 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff, + }, +} + +// ISO8859_2 is the ISO 8859-2 encoding. +var ISO8859_2 *Charmap = &iso8859_2 + +var iso8859_2 = Charmap{ + name: "ISO 8859-2", + mib: identifier.ISOLatin2, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xbd, 0x00}}, + {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc5, 0xa0, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}}, + {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xbe, 0x00}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc5, 0xa5, 0x00}}, + {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}}, + {2, [3]byte{0xc4, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0x8e, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xae, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xba, 0x00}}, + {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc5, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xb00000b0, 0xb40000b4, 0xb80000b8, + 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc90000c9, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, + 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xda0000da, 0xdc0000dc, 0xdd0000dd, 0xdf0000df, + 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, + 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xfa0000fa, 0xfc0000fc, 0xfd0000fd, 0xc3000102, + 0xe3000103, 0xa1000104, 0xb1000105, 0xc6000106, 0xe6000107, 0xc800010c, 0xe800010d, 0xcf00010e, + 0xef00010f, 0xd0000110, 0xf0000111, 0xca000118, 0xea000119, 0xcc00011a, 0xec00011b, 0xc5000139, + 0xe500013a, 0xa500013d, 0xb500013e, 0xa3000141, 0xb3000142, 0xd1000143, 0xf1000144, 0xd2000147, + 0xf2000148, 0xd5000150, 0xf5000151, 0xc0000154, 0xe0000155, 0xd8000158, 0xf8000159, 0xa600015a, + 0xb600015b, 0xaa00015e, 0xba00015f, 0xa9000160, 0xb9000161, 0xde000162, 0xfe000163, 0xab000164, + 0xbb000165, 0xd900016e, 0xf900016f, 0xdb000170, 0xfb000171, 0xac000179, 0xbc00017a, 0xaf00017b, + 0xbf00017c, 0xae00017d, 0xbe00017e, 0xb70002c7, 0xa20002d8, 0xff0002d9, 0xb20002db, 0xbd0002dd, + 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, + 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, + 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, + 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, + }, +} + +// ISO8859_3 is the ISO 8859-3 encoding. +var ISO8859_3 *Charmap = &iso8859_3 + +var iso8859_3 = Charmap{ + name: "ISO 8859-3", + mib: identifier.ISOLatin3, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0xa6, 0x00}}, + {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc4, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc4, 0x9e, 0x00}}, + {2, [3]byte{0xc4, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc4, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc4, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0xb5, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x8a, 0x00}}, + {2, [3]byte{0xc4, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc4, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc4, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xac, 0x00}}, + {2, [3]byte{0xc5, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc4, 0x9d, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0x9d, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa30000a3, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xb00000b0, 0xb20000b2, + 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb70000b7, 0xb80000b8, 0xbd0000bd, 0xc00000c0, 0xc10000c1, + 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, + 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd60000d6, + 0xd70000d7, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, + 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, + 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf60000f6, + 0xf70000f7, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xc6000108, 0xe6000109, 0xc500010a, + 0xe500010b, 0xd800011c, 0xf800011d, 0xab00011e, 0xbb00011f, 0xd5000120, 0xf5000121, 0xa6000124, + 0xb6000125, 0xa1000126, 0xb1000127, 0xa9000130, 0xb9000131, 0xac000134, 0xbc000135, 0xde00015c, + 0xfe00015d, 0xaa00015e, 0xba00015f, 0xdd00016c, 0xfd00016d, 0xaf00017b, 0xbf00017c, 0xa20002d8, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + }, +} + +// ISO8859_4 is the ISO 8859-4 encoding. +var ISO8859_4 *Charmap = &iso8859_4 + +var iso8859_4 = Charmap{ + name: "ISO 8859-4", + mib: identifier.ISOLatin4, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xc4, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0x96, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xa8, 0x00}}, + {2, [3]byte{0xc4, 0xbb, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc5, 0xa0, 0x00}}, + {2, [3]byte{0xc4, 0x92, 0x00}}, {2, [3]byte{0xc4, 0xa2, 0x00}}, + {2, [3]byte{0xc5, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x97, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0xbc, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}}, + {2, [3]byte{0xc4, 0x93, 0x00}}, {2, [3]byte{0xc4, 0xa3, 0x00}}, + {2, [3]byte{0xc5, 0xa7, 0x00}}, {2, [3]byte{0xc5, 0x8a, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0xaa, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x85, 0x00}}, + {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xa8, 0x00}}, + {2, [3]byte{0xc5, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x97, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x86, 0x00}}, + {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0xab, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xaf0000af, 0xb00000b0, 0xb40000b4, + 0xb80000b8, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc90000c9, + 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8, + 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, + 0xe50000e5, 0xe60000e6, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xf40000f4, 0xf50000f5, + 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xc0000100, 0xe0000101, + 0xa1000104, 0xb1000105, 0xc800010c, 0xe800010d, 0xd0000110, 0xf0000111, 0xaa000112, 0xba000113, + 0xcc000116, 0xec000117, 0xca000118, 0xea000119, 0xab000122, 0xbb000123, 0xa5000128, 0xb5000129, + 0xcf00012a, 0xef00012b, 0xc700012e, 0xe700012f, 0xd3000136, 0xf3000137, 0xa2000138, 0xa600013b, + 0xb600013c, 0xd1000145, 0xf1000146, 0xbd00014a, 0xbf00014b, 0xd200014c, 0xf200014d, 0xa3000156, + 0xb3000157, 0xa9000160, 0xb9000161, 0xac000166, 0xbc000167, 0xdd000168, 0xfd000169, 0xde00016a, + 0xfe00016b, 0xd9000172, 0xf9000173, 0xae00017d, 0xbe00017e, 0xb70002c7, 0xff0002d9, 0xb20002db, + 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, + 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, + 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, + 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, + }, +} + +// ISO8859_5 is the ISO 8859-5 encoding. +var ISO8859_5 *Charmap = &iso8859_5 + +var iso8859_5 = Charmap{ + name: "ISO 8859-5", + mib: identifier.ISOLatinCyrillic, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {2, [3]byte{0xd0, 0x82, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}}, + {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}}, + {2, [3]byte{0xd0, 0x88, 0x00}}, {2, [3]byte{0xd0, 0x89, 0x00}}, + {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}}, + {2, [3]byte{0xd0, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}}, + {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}}, + {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xd1, 0x91, 0x00}}, + {2, [3]byte{0xd1, 0x92, 0x00}}, {2, [3]byte{0xd1, 0x93, 0x00}}, + {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xd1, 0x95, 0x00}}, + {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd1, 0x99, 0x00}}, + {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd1, 0x9b, 0x00}}, + {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xfd0000a7, 0xad0000ad, 0xa1000401, 0xa2000402, 0xa3000403, 0xa4000404, 0xa5000405, + 0xa6000406, 0xa7000407, 0xa8000408, 0xa9000409, 0xaa00040a, 0xab00040b, 0xac00040c, 0xae00040e, + 0xaf00040f, 0xb0000410, 0xb1000411, 0xb2000412, 0xb3000413, 0xb4000414, 0xb5000415, 0xb6000416, + 0xb7000417, 0xb8000418, 0xb9000419, 0xba00041a, 0xbb00041b, 0xbc00041c, 0xbd00041d, 0xbe00041e, + 0xbf00041f, 0xc0000420, 0xc1000421, 0xc2000422, 0xc3000423, 0xc4000424, 0xc5000425, 0xc6000426, + 0xc7000427, 0xc8000428, 0xc9000429, 0xca00042a, 0xcb00042b, 0xcc00042c, 0xcd00042d, 0xce00042e, + 0xcf00042f, 0xd0000430, 0xd1000431, 0xd2000432, 0xd3000433, 0xd4000434, 0xd5000435, 0xd6000436, + 0xd7000437, 0xd8000438, 0xd9000439, 0xda00043a, 0xdb00043b, 0xdc00043c, 0xdd00043d, 0xde00043e, + 0xdf00043f, 0xe0000440, 0xe1000441, 0xe2000442, 0xe3000443, 0xe4000444, 0xe5000445, 0xe6000446, + 0xe7000447, 0xe8000448, 0xe9000449, 0xea00044a, 0xeb00044b, 0xec00044c, 0xed00044d, 0xee00044e, + 0xef00044f, 0xf1000451, 0xf2000452, 0xf3000453, 0xf4000454, 0xf5000455, 0xf6000456, 0xf7000457, + 0xf8000458, 0xf9000459, 0xfa00045a, 0xfb00045b, 0xfc00045c, 0xfe00045e, 0xff00045f, 0xf0002116, + 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, + 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, + 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, + 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, + }, +} + +// ISO8859_6 is the ISO 8859-6 encoding. +var ISO8859_6 *Charmap = &iso8859_6 + +var iso8859_6 = Charmap{ + name: "ISO 8859-6", + mib: identifier.ISOLatinArabic, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xd8, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0x9b, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0x9f, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0xa1, 0x00}}, + {2, [3]byte{0xd8, 0xa2, 0x00}}, {2, [3]byte{0xd8, 0xa3, 0x00}}, + {2, [3]byte{0xd8, 0xa4, 0x00}}, {2, [3]byte{0xd8, 0xa5, 0x00}}, + {2, [3]byte{0xd8, 0xa6, 0x00}}, {2, [3]byte{0xd8, 0xa7, 0x00}}, + {2, [3]byte{0xd8, 0xa8, 0x00}}, {2, [3]byte{0xd8, 0xa9, 0x00}}, + {2, [3]byte{0xd8, 0xaa, 0x00}}, {2, [3]byte{0xd8, 0xab, 0x00}}, + {2, [3]byte{0xd8, 0xac, 0x00}}, {2, [3]byte{0xd8, 0xad, 0x00}}, + {2, [3]byte{0xd8, 0xae, 0x00}}, {2, [3]byte{0xd8, 0xaf, 0x00}}, + {2, [3]byte{0xd8, 0xb0, 0x00}}, {2, [3]byte{0xd8, 0xb1, 0x00}}, + {2, [3]byte{0xd8, 0xb2, 0x00}}, {2, [3]byte{0xd8, 0xb3, 0x00}}, + {2, [3]byte{0xd8, 0xb4, 0x00}}, {2, [3]byte{0xd8, 0xb5, 0x00}}, + {2, [3]byte{0xd8, 0xb6, 0x00}}, {2, [3]byte{0xd8, 0xb7, 0x00}}, + {2, [3]byte{0xd8, 0xb8, 0x00}}, {2, [3]byte{0xd8, 0xb9, 0x00}}, + {2, [3]byte{0xd8, 0xba, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xd9, 0x80, 0x00}}, {2, [3]byte{0xd9, 0x81, 0x00}}, + {2, [3]byte{0xd9, 0x82, 0x00}}, {2, [3]byte{0xd9, 0x83, 0x00}}, + {2, [3]byte{0xd9, 0x84, 0x00}}, {2, [3]byte{0xd9, 0x85, 0x00}}, + {2, [3]byte{0xd9, 0x86, 0x00}}, {2, [3]byte{0xd9, 0x87, 0x00}}, + {2, [3]byte{0xd9, 0x88, 0x00}}, {2, [3]byte{0xd9, 0x89, 0x00}}, + {2, [3]byte{0xd9, 0x8a, 0x00}}, {2, [3]byte{0xd9, 0x8b, 0x00}}, + {2, [3]byte{0xd9, 0x8c, 0x00}}, {2, [3]byte{0xd9, 0x8d, 0x00}}, + {2, [3]byte{0xd9, 0x8e, 0x00}}, {2, [3]byte{0xd9, 0x8f, 0x00}}, + {2, [3]byte{0xd9, 0x90, 0x00}}, {2, [3]byte{0xd9, 0x91, 0x00}}, + {2, [3]byte{0xd9, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xad0000ad, 0xac00060c, 0xbb00061b, 0xbf00061f, 0xc1000621, 0xc2000622, + 0xc3000623, 0xc4000624, 0xc5000625, 0xc6000626, 0xc7000627, 0xc8000628, 0xc9000629, 0xca00062a, + 0xcb00062b, 0xcc00062c, 0xcd00062d, 0xce00062e, 0xcf00062f, 0xd0000630, 0xd1000631, 0xd2000632, + 0xd3000633, 0xd4000634, 0xd5000635, 0xd6000636, 0xd7000637, 0xd8000638, 0xd9000639, 0xda00063a, + 0xe0000640, 0xe1000641, 0xe2000642, 0xe3000643, 0xe4000644, 0xe5000645, 0xe6000646, 0xe7000647, + 0xe8000648, 0xe9000649, 0xea00064a, 0xeb00064b, 0xec00064c, 0xed00064d, 0xee00064e, 0xef00064f, + 0xf0000650, 0xf1000651, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + }, +} + +// ISO8859_7 is the ISO 8859-7 encoding. +var ISO8859_7 *Charmap = &iso8859_7 + +var iso8859_7 = Charmap{ + name: "ISO 8859-7", + mib: identifier.ISOLatinGreek, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x82, 0xaf}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xcd, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x95}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xce, 0x84, 0x00}}, {2, [3]byte{0xce, 0x85, 0x00}}, + {2, [3]byte{0xce, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xce, 0x88, 0x00}}, {2, [3]byte{0xce, 0x89, 0x00}}, + {2, [3]byte{0xce, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xce, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xce, 0x8e, 0x00}}, {2, [3]byte{0xce, 0x8f, 0x00}}, + {2, [3]byte{0xce, 0x90, 0x00}}, {2, [3]byte{0xce, 0x91, 0x00}}, + {2, [3]byte{0xce, 0x92, 0x00}}, {2, [3]byte{0xce, 0x93, 0x00}}, + {2, [3]byte{0xce, 0x94, 0x00}}, {2, [3]byte{0xce, 0x95, 0x00}}, + {2, [3]byte{0xce, 0x96, 0x00}}, {2, [3]byte{0xce, 0x97, 0x00}}, + {2, [3]byte{0xce, 0x98, 0x00}}, {2, [3]byte{0xce, 0x99, 0x00}}, + {2, [3]byte{0xce, 0x9a, 0x00}}, {2, [3]byte{0xce, 0x9b, 0x00}}, + {2, [3]byte{0xce, 0x9c, 0x00}}, {2, [3]byte{0xce, 0x9d, 0x00}}, + {2, [3]byte{0xce, 0x9e, 0x00}}, {2, [3]byte{0xce, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0xa0, 0x00}}, {2, [3]byte{0xce, 0xa1, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xce, 0xa3, 0x00}}, + {2, [3]byte{0xce, 0xa4, 0x00}}, {2, [3]byte{0xce, 0xa5, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0xa7, 0x00}}, + {2, [3]byte{0xce, 0xa8, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}}, + {2, [3]byte{0xce, 0xaa, 0x00}}, {2, [3]byte{0xce, 0xab, 0x00}}, + {2, [3]byte{0xce, 0xac, 0x00}}, {2, [3]byte{0xce, 0xad, 0x00}}, + {2, [3]byte{0xce, 0xae, 0x00}}, {2, [3]byte{0xce, 0xaf, 0x00}}, + {2, [3]byte{0xce, 0xb0, 0x00}}, {2, [3]byte{0xce, 0xb1, 0x00}}, + {2, [3]byte{0xce, 0xb2, 0x00}}, {2, [3]byte{0xce, 0xb3, 0x00}}, + {2, [3]byte{0xce, 0xb4, 0x00}}, {2, [3]byte{0xce, 0xb5, 0x00}}, + {2, [3]byte{0xce, 0xb6, 0x00}}, {2, [3]byte{0xce, 0xb7, 0x00}}, + {2, [3]byte{0xce, 0xb8, 0x00}}, {2, [3]byte{0xce, 0xb9, 0x00}}, + {2, [3]byte{0xce, 0xba, 0x00}}, {2, [3]byte{0xce, 0xbb, 0x00}}, + {2, [3]byte{0xce, 0xbc, 0x00}}, {2, [3]byte{0xce, 0xbd, 0x00}}, + {2, [3]byte{0xce, 0xbe, 0x00}}, {2, [3]byte{0xce, 0xbf, 0x00}}, + {2, [3]byte{0xcf, 0x80, 0x00}}, {2, [3]byte{0xcf, 0x81, 0x00}}, + {2, [3]byte{0xcf, 0x82, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xcf, 0x84, 0x00}}, {2, [3]byte{0xcf, 0x85, 0x00}}, + {2, [3]byte{0xcf, 0x86, 0x00}}, {2, [3]byte{0xcf, 0x87, 0x00}}, + {2, [3]byte{0xcf, 0x88, 0x00}}, {2, [3]byte{0xcf, 0x89, 0x00}}, + {2, [3]byte{0xcf, 0x8a, 0x00}}, {2, [3]byte{0xcf, 0x8b, 0x00}}, + {2, [3]byte{0xcf, 0x8c, 0x00}}, {2, [3]byte{0xcf, 0x8d, 0x00}}, + {2, [3]byte{0xcf, 0x8e, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa30000a3, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, 0xab0000ab, 0xac0000ac, + 0xad0000ad, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb70000b7, 0xbb0000bb, 0xbd0000bd, + 0xaa00037a, 0xb4000384, 0xb5000385, 0xb6000386, 0xb8000388, 0xb9000389, 0xba00038a, 0xbc00038c, + 0xbe00038e, 0xbf00038f, 0xc0000390, 0xc1000391, 0xc2000392, 0xc3000393, 0xc4000394, 0xc5000395, + 0xc6000396, 0xc7000397, 0xc8000398, 0xc9000399, 0xca00039a, 0xcb00039b, 0xcc00039c, 0xcd00039d, + 0xce00039e, 0xcf00039f, 0xd00003a0, 0xd10003a1, 0xd30003a3, 0xd40003a4, 0xd50003a5, 0xd60003a6, + 0xd70003a7, 0xd80003a8, 0xd90003a9, 0xda0003aa, 0xdb0003ab, 0xdc0003ac, 0xdd0003ad, 0xde0003ae, + 0xdf0003af, 0xe00003b0, 0xe10003b1, 0xe20003b2, 0xe30003b3, 0xe40003b4, 0xe50003b5, 0xe60003b6, + 0xe70003b7, 0xe80003b8, 0xe90003b9, 0xea0003ba, 0xeb0003bb, 0xec0003bc, 0xed0003bd, 0xee0003be, + 0xef0003bf, 0xf00003c0, 0xf10003c1, 0xf20003c2, 0xf30003c3, 0xf40003c4, 0xf50003c5, 0xf60003c6, + 0xf70003c7, 0xf80003c8, 0xf90003c9, 0xfa0003ca, 0xfb0003cb, 0xfc0003cc, 0xfd0003cd, 0xfe0003ce, + 0xaf002015, 0xa1002018, 0xa2002019, 0xa40020ac, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + }, +} + +// ISO8859_8 is the ISO 8859-8 encoding. +var ISO8859_8 *Charmap = &iso8859_8 + +var iso8859_8 = Charmap{ + name: "ISO 8859-8", + mib: identifier.ISOLatinHebrew, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x97}}, + {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}}, + {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}}, + {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}}, + {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}}, + {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}}, + {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}}, + {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}}, + {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}}, + {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}}, + {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}}, + {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}}, + {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}}, + {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}}, + {2, [3]byte{0xd7, 0xaa, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x8e}}, + {3, [3]byte{0xe2, 0x80, 0x8f}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, + 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, + 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9, + 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xaa0000d7, 0xba0000f7, 0xe00005d0, 0xe10005d1, + 0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9, + 0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1, + 0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9, + 0xfa0005ea, 0xfd00200e, 0xfe00200f, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + }, +} + +// ISO8859_9 is the ISO 8859-9 encoding. +var ISO8859_9 *Charmap = &iso8859_9 + +var iso8859_9 = Charmap{ + name: "ISO 8859-9", + mib: identifier.ISOLatin5, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087, + 0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f, + 0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097, + 0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8, + 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, + 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, + 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, + 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, + 0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0xde00015e, 0xfe00015f, + }, +} + +// ISO8859_10 is the ISO 8859-10 encoding. +var ISO8859_10 *Charmap = &iso8859_10 + +var iso8859_10 = Charmap{ + name: "ISO 8859-10", + mib: identifier.ISOLatin6, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xc4, 0x92, 0x00}}, {2, [3]byte{0xc4, 0xa2, 0x00}}, + {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xa8, 0x00}}, + {2, [3]byte{0xc4, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc4, 0xbb, 0x00}}, {2, [3]byte{0xc4, 0x90, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0xa6, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0xaa, 0x00}}, {2, [3]byte{0xc5, 0x8a, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xc4, 0x93, 0x00}}, {2, [3]byte{0xc4, 0xa3, 0x00}}, + {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc4, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0x91, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0xa7, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x95}}, + {2, [3]byte{0xc5, 0xab, 0x00}}, {2, [3]byte{0xc5, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x85, 0x00}}, + {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc5, 0xa8, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x97, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc5, 0x86, 0x00}}, + {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc5, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc4, 0xb8, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa70000a7, 0xad0000ad, 0xb00000b0, 0xb70000b7, 0xc10000c1, 0xc20000c2, 0xc30000c3, + 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc90000c9, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd00000d0, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd80000d8, 0xda0000da, 0xdb0000db, + 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, + 0xe50000e5, 0xe60000e6, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf00000f0, + 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf80000f8, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, + 0xfd0000fd, 0xfe0000fe, 0xc0000100, 0xe0000101, 0xa1000104, 0xb1000105, 0xc800010c, 0xe800010d, + 0xa9000110, 0xb9000111, 0xa2000112, 0xb2000113, 0xcc000116, 0xec000117, 0xca000118, 0xea000119, + 0xa3000122, 0xb3000123, 0xa5000128, 0xb5000129, 0xa400012a, 0xb400012b, 0xc700012e, 0xe700012f, + 0xa6000136, 0xb6000137, 0xff000138, 0xa800013b, 0xb800013c, 0xd1000145, 0xf1000146, 0xaf00014a, + 0xbf00014b, 0xd200014c, 0xf200014d, 0xaa000160, 0xba000161, 0xab000166, 0xbb000167, 0xd7000168, + 0xf7000169, 0xae00016a, 0xbe00016b, 0xd9000172, 0xf9000173, 0xac00017d, 0xbc00017e, 0xbd002015, + 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, + 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, + 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, + 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, + }, +} + +// ISO8859_13 is the ISO 8859-13 encoding. +var ISO8859_13 *Charmap = &iso8859_13 + +var iso8859_13 = Charmap{ + name: "ISO 8859-13", + mib: identifier.ISO885913, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9d}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9e}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc3, 0x86, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9c}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc5, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}}, + {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x92, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc4, 0x96, 0x00}}, + {2, [3]byte{0xc4, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}}, + {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x85, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc5, 0xb2, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xaa, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc4, 0x93, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc4, 0x97, 0x00}}, + {2, [3]byte{0xc4, 0xa3, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}}, + {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc5, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0xb3, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x99}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa90000a9, 0xab0000ab, + 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb50000b5, + 0xb60000b6, 0xb70000b7, 0xb90000b9, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xc40000c4, + 0xc50000c5, 0xaf0000c6, 0xc90000c9, 0xd30000d3, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xa80000d8, + 0xdc0000dc, 0xdf0000df, 0xe40000e4, 0xe50000e5, 0xbf0000e6, 0xe90000e9, 0xf30000f3, 0xf50000f5, + 0xf60000f6, 0xf70000f7, 0xb80000f8, 0xfc0000fc, 0xc2000100, 0xe2000101, 0xc0000104, 0xe0000105, + 0xc3000106, 0xe3000107, 0xc800010c, 0xe800010d, 0xc7000112, 0xe7000113, 0xcb000116, 0xeb000117, + 0xc6000118, 0xe6000119, 0xcc000122, 0xec000123, 0xce00012a, 0xee00012b, 0xc100012e, 0xe100012f, + 0xcd000136, 0xed000137, 0xcf00013b, 0xef00013c, 0xd9000141, 0xf9000142, 0xd1000143, 0xf1000144, + 0xd2000145, 0xf2000146, 0xd400014c, 0xf400014d, 0xaa000156, 0xba000157, 0xda00015a, 0xfa00015b, + 0xd0000160, 0xf0000161, 0xdb00016a, 0xfb00016b, 0xd8000172, 0xf8000173, 0xca000179, 0xea00017a, + 0xdd00017b, 0xfd00017c, 0xde00017d, 0xfe00017e, 0xff002019, 0xb400201c, 0xa100201d, 0xa500201e, + 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, + 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, + 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, + 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, + }, +} + +// ISO8859_14 is the ISO 8859-14 encoding. +var ISO8859_14 *Charmap = &iso8859_14 + +var iso8859_14 = Charmap{ + name: "ISO 8859-14", + mib: identifier.ISO885914, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe1, 0xb8, 0x82}}, + {3, [3]byte{0xe1, 0xb8, 0x83}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc4, 0x8a, 0x00}}, {2, [3]byte{0xc4, 0x8b, 0x00}}, + {3, [3]byte{0xe1, 0xb8, 0x8a}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {3, [3]byte{0xe1, 0xba, 0x80}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {3, [3]byte{0xe1, 0xba, 0x82}}, {3, [3]byte{0xe1, 0xb8, 0x8b}}, + {3, [3]byte{0xe1, 0xbb, 0xb2}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {3, [3]byte{0xe1, 0xb8, 0x9e}}, {3, [3]byte{0xe1, 0xb8, 0x9f}}, + {2, [3]byte{0xc4, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0xa1, 0x00}}, + {3, [3]byte{0xe1, 0xb9, 0x80}}, {3, [3]byte{0xe1, 0xb9, 0x81}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0x96}}, + {3, [3]byte{0xe1, 0xba, 0x81}}, {3, [3]byte{0xe1, 0xb9, 0x97}}, + {3, [3]byte{0xe1, 0xba, 0x83}}, {3, [3]byte{0xe1, 0xb9, 0xa0}}, + {3, [3]byte{0xe1, 0xbb, 0xb3}}, {3, [3]byte{0xe1, 0xba, 0x84}}, + {3, [3]byte{0xe1, 0xba, 0x85}}, {3, [3]byte{0xe1, 0xb9, 0xa1}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc5, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0xaa}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc5, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0xab}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc5, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa30000a3, 0xa70000a7, 0xa90000a9, 0xad0000ad, 0xae0000ae, 0xb60000b6, 0xc00000c0, + 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, 0xc80000c8, + 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, + 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd80000d8, 0xd90000d9, 0xda0000da, + 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, + 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, + 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, + 0xf50000f5, 0xf60000f6, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, + 0xff0000ff, 0xa400010a, 0xa500010b, 0xb2000120, 0xb3000121, 0xd0000174, 0xf0000175, 0xde000176, + 0xfe000177, 0xaf000178, 0xa1001e02, 0xa2001e03, 0xa6001e0a, 0xab001e0b, 0xb0001e1e, 0xb1001e1f, + 0xb4001e40, 0xb5001e41, 0xb7001e56, 0xb9001e57, 0xbb001e60, 0xbf001e61, 0xd7001e6a, 0xf7001e6b, + 0xa8001e80, 0xb8001e81, 0xaa001e82, 0xba001e83, 0xbd001e84, 0xbe001e85, 0xac001ef2, 0xbc001ef3, + 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, + 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, + 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, + 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, + }, +} + +// ISO8859_15 is the ISO 8859-15 encoding. +var ISO8859_15 *Charmap = &iso8859_15 + +var iso8859_15 = Charmap{ + name: "ISO 8859-15", + mib: identifier.ISO885915, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}}, + {2, [3]byte{0xc5, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa50000a5, 0xa70000a7, 0xa90000a9, 0xaa0000aa, + 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, 0xb20000b2, + 0xb30000b3, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, + 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, + 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, + 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, + 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff, + 0xbc000152, 0xbd000153, 0xa6000160, 0xa8000161, 0xbe000178, 0xb400017d, 0xb800017e, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + }, +} + +// ISO8859_16 is the ISO 8859-16 encoding. +var ISO8859_16 *Charmap = &iso8859_16 + +var iso8859_16 = Charmap{ + name: "ISO 8859-16", + mib: identifier.ISO885916, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x80, 0x9e}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc8, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9d}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc4, 0x8d, 0x00}}, + {2, [3]byte{0xc8, 0x99, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}}, + {2, [3]byte{0xc5, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc5, 0x9a, 0x00}}, + {2, [3]byte{0xc5, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0x98, 0x00}}, + {2, [3]byte{0xc8, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc5, 0x9b, 0x00}}, + {2, [3]byte{0xc5, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0x99, 0x00}}, + {2, [3]byte{0xc8, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa70000a7, 0xa90000a9, 0xab0000ab, 0xad0000ad, 0xb00000b0, 0xb10000b1, 0xb60000b6, + 0xb70000b7, 0xbb0000bb, 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, + 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe60000e6, 0xe70000e7, 0xe80000e8, + 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf20000f2, + 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xff0000ff, + 0xc3000102, 0xe3000103, 0xa1000104, 0xa2000105, 0xc5000106, 0xe5000107, 0xb200010c, 0xb900010d, + 0xd0000110, 0xf0000111, 0xdd000118, 0xfd000119, 0xa3000141, 0xb3000142, 0xd1000143, 0xf1000144, + 0xd5000150, 0xf5000151, 0xbc000152, 0xbd000153, 0xd700015a, 0xf700015b, 0xa6000160, 0xa8000161, + 0xd8000170, 0xf8000171, 0xbe000178, 0xac000179, 0xae00017a, 0xaf00017b, 0xbf00017c, 0xb400017d, + 0xb800017e, 0xaa000218, 0xba000219, 0xde00021a, 0xfe00021b, 0xb500201d, 0xa500201e, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + }, +} + +// KOI8R is the KOI8-R encoding. +var KOI8R *Charmap = &koi8R + +var koi8R = Charmap{ + name: "KOI8-R", + mib: identifier.KOI8R, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x9c}}, {3, [3]byte{0xe2, 0x94, 0xa4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xbc}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x90}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x8c, 0xa0}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {3, [3]byte{0xe2, 0x88, 0x9a}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x90}}, {3, [3]byte{0xe2, 0x95, 0x91}}, + {3, [3]byte{0xe2, 0x95, 0x92}}, {2, [3]byte{0xd1, 0x91, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x97}}, {3, [3]byte{0xe2, 0x95, 0x98}}, + {3, [3]byte{0xe2, 0x95, 0x99}}, {3, [3]byte{0xe2, 0x95, 0x9a}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9e}}, + {3, [3]byte{0xe2, 0x95, 0x9f}}, {3, [3]byte{0xe2, 0x95, 0xa0}}, + {3, [3]byte{0xe2, 0x95, 0xa1}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa5}}, + {3, [3]byte{0xe2, 0x95, 0xa6}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa9}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xb0, 0x00}}, + {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd1, 0x86, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd1, 0x85, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}}, + {2, [3]byte{0xd0, 0xb9, 0x00}}, {2, [3]byte{0xd0, 0xba, 0x00}}, + {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0xbc, 0x00}}, + {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0xbe, 0x00}}, + {2, [3]byte{0xd0, 0xbf, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd0, 0xb7, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}}, + {2, [3]byte{0xd1, 0x8d, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x8a, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}}, + {2, [3]byte{0xd0, 0x91, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0x98, 0x00}}, + {2, [3]byte{0xd0, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}}, + {2, [3]byte{0xd0, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}}, + {2, [3]byte{0xd0, 0x9d, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}}, + {2, [3]byte{0xd0, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x92, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd0, 0xa8, 0x00}}, + {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x9a0000a0, 0xbf0000a9, 0x9c0000b0, 0x9d0000b2, 0x9e0000b7, 0x9f0000f7, 0xb3000401, 0xe1000410, + 0xe2000411, 0xf7000412, 0xe7000413, 0xe4000414, 0xe5000415, 0xf6000416, 0xfa000417, 0xe9000418, + 0xea000419, 0xeb00041a, 0xec00041b, 0xed00041c, 0xee00041d, 0xef00041e, 0xf000041f, 0xf2000420, + 0xf3000421, 0xf4000422, 0xf5000423, 0xe6000424, 0xe8000425, 0xe3000426, 0xfe000427, 0xfb000428, + 0xfd000429, 0xff00042a, 0xf900042b, 0xf800042c, 0xfc00042d, 0xe000042e, 0xf100042f, 0xc1000430, + 0xc2000431, 0xd7000432, 0xc7000433, 0xc4000434, 0xc5000435, 0xd6000436, 0xda000437, 0xc9000438, + 0xca000439, 0xcb00043a, 0xcc00043b, 0xcd00043c, 0xce00043d, 0xcf00043e, 0xd000043f, 0xd2000440, + 0xd3000441, 0xd4000442, 0xd5000443, 0xc6000444, 0xc8000445, 0xc3000446, 0xde000447, 0xdb000448, + 0xdd000449, 0xdf00044a, 0xd900044b, 0xd800044c, 0xdc00044d, 0xc000044e, 0xd100044f, 0xa3000451, + 0x95002219, 0x9600221a, 0x97002248, 0x98002264, 0x99002265, 0x93002320, 0x9b002321, 0x80002500, + 0x81002502, 0x8200250c, 0x83002510, 0x84002514, 0x85002518, 0x8600251c, 0x87002524, 0x8800252c, + 0x89002534, 0x8a00253c, 0xa0002550, 0xa1002551, 0xa2002552, 0xa4002553, 0xa5002554, 0xa6002555, + 0xa7002556, 0xa8002557, 0xa9002558, 0xaa002559, 0xab00255a, 0xac00255b, 0xad00255c, 0xae00255d, + 0xaf00255e, 0xb000255f, 0xb1002560, 0xb2002561, 0xb4002562, 0xb5002563, 0xb6002564, 0xb7002565, + 0xb8002566, 0xb9002567, 0xba002568, 0xbb002569, 0xbc00256a, 0xbd00256b, 0xbe00256c, 0x8b002580, + 0x8c002584, 0x8d002588, 0x8e00258c, 0x8f002590, 0x90002591, 0x91002592, 0x92002593, 0x940025a0, + }, +} + +// KOI8U is the KOI8-U encoding. +var KOI8U *Charmap = &koi8U + +var koi8U = Charmap{ + name: "KOI8-U", + mib: identifier.KOI8U, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x9c}}, {3, [3]byte{0xe2, 0x94, 0xa4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xbc}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x90}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x8c, 0xa0}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {3, [3]byte{0xe2, 0x88, 0x9a}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x90}}, {3, [3]byte{0xe2, 0x95, 0x91}}, + {3, [3]byte{0xe2, 0x95, 0x92}}, {2, [3]byte{0xd1, 0x91, 0x00}}, + {2, [3]byte{0xd1, 0x94, 0x00}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x97}}, {3, [3]byte{0xe2, 0x95, 0x98}}, + {3, [3]byte{0xe2, 0x95, 0x99}}, {3, [3]byte{0xe2, 0x95, 0x9a}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {2, [3]byte{0xd2, 0x91, 0x00}}, + {2, [3]byte{0xd1, 0x9e, 0x00}}, {3, [3]byte{0xe2, 0x95, 0x9e}}, + {3, [3]byte{0xe2, 0x95, 0x9f}}, {3, [3]byte{0xe2, 0x95, 0xa0}}, + {3, [3]byte{0xe2, 0x95, 0xa1}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0xa6}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa9}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {2, [3]byte{0xd2, 0x90, 0x00}}, + {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xb0, 0x00}}, + {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd1, 0x86, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd1, 0x85, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}}, + {2, [3]byte{0xd0, 0xb9, 0x00}}, {2, [3]byte{0xd0, 0xba, 0x00}}, + {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0xbc, 0x00}}, + {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0xbe, 0x00}}, + {2, [3]byte{0xd0, 0xbf, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd0, 0xb7, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}}, + {2, [3]byte{0xd1, 0x8d, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x8a, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}}, + {2, [3]byte{0xd0, 0x91, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0x98, 0x00}}, + {2, [3]byte{0xd0, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}}, + {2, [3]byte{0xd0, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}}, + {2, [3]byte{0xd0, 0x9d, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}}, + {2, [3]byte{0xd0, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x92, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd0, 0xa8, 0x00}}, + {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x9a0000a0, 0xbf0000a9, 0x9c0000b0, 0x9d0000b2, 0x9e0000b7, 0x9f0000f7, 0xb3000401, 0xb4000404, + 0xb6000406, 0xb7000407, 0xbe00040e, 0xe1000410, 0xe2000411, 0xf7000412, 0xe7000413, 0xe4000414, + 0xe5000415, 0xf6000416, 0xfa000417, 0xe9000418, 0xea000419, 0xeb00041a, 0xec00041b, 0xed00041c, + 0xee00041d, 0xef00041e, 0xf000041f, 0xf2000420, 0xf3000421, 0xf4000422, 0xf5000423, 0xe6000424, + 0xe8000425, 0xe3000426, 0xfe000427, 0xfb000428, 0xfd000429, 0xff00042a, 0xf900042b, 0xf800042c, + 0xfc00042d, 0xe000042e, 0xf100042f, 0xc1000430, 0xc2000431, 0xd7000432, 0xc7000433, 0xc4000434, + 0xc5000435, 0xd6000436, 0xda000437, 0xc9000438, 0xca000439, 0xcb00043a, 0xcc00043b, 0xcd00043c, + 0xce00043d, 0xcf00043e, 0xd000043f, 0xd2000440, 0xd3000441, 0xd4000442, 0xd5000443, 0xc6000444, + 0xc8000445, 0xc3000446, 0xde000447, 0xdb000448, 0xdd000449, 0xdf00044a, 0xd900044b, 0xd800044c, + 0xdc00044d, 0xc000044e, 0xd100044f, 0xa3000451, 0xa4000454, 0xa6000456, 0xa7000457, 0xae00045e, + 0xbd000490, 0xad000491, 0x95002219, 0x9600221a, 0x97002248, 0x98002264, 0x99002265, 0x93002320, + 0x9b002321, 0x80002500, 0x81002502, 0x8200250c, 0x83002510, 0x84002514, 0x85002518, 0x8600251c, + 0x87002524, 0x8800252c, 0x89002534, 0x8a00253c, 0xa0002550, 0xa1002551, 0xa2002552, 0xa5002554, + 0xa8002557, 0xa9002558, 0xaa002559, 0xab00255a, 0xac00255b, 0xaf00255e, 0xb000255f, 0xb1002560, + 0xb2002561, 0xb5002563, 0xb8002566, 0xb9002567, 0xba002568, 0xbb002569, 0xbc00256a, 0x8b002580, + 0x8c002584, 0x8d002588, 0x8e00258c, 0x8f002590, 0x90002591, 0x91002592, 0x92002593, 0x940025a0, + }, +} + +// Macintosh is the Macintosh encoding. +var Macintosh *Charmap = &macintosh + +var macintosh = Charmap{ + name: "Macintosh", + mib: identifier.Macintosh, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x91, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa8, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {2, [3]byte{0xc2, 0xb0, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {3, [3]byte{0xe2, 0x84, 0xa2}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {3, [3]byte{0xe2, 0x89, 0xa0}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x82}}, {3, [3]byte{0xe2, 0x88, 0x91}}, + {3, [3]byte{0xe2, 0x88, 0x8f}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0xab}}, {2, [3]byte{0xc2, 0xaa, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {2, [3]byte{0xc6, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {3, [3]byte{0xe2, 0x88, 0x86}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xbb, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xe2, 0x80, 0x9c}}, {3, [3]byte{0xe2, 0x80, 0x9d}}, + {3, [3]byte{0xe2, 0x80, 0x98}}, {3, [3]byte{0xe2, 0x80, 0x99}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x97, 0x8a}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {3, [3]byte{0xe2, 0x81, 0x84}}, {3, [3]byte{0xe2, 0x82, 0xac}}, + {3, [3]byte{0xe2, 0x80, 0xb9}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {3, [3]byte{0xef, 0xac, 0x81}}, {3, [3]byte{0xef, 0xac, 0x82}}, + {3, [3]byte{0xe2, 0x80, 0xa1}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xe2, 0x80, 0x9e}}, + {3, [3]byte{0xe2, 0x80, 0xb0}}, {2, [3]byte{0xc3, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x8b, 0x00}}, {2, [3]byte{0xc3, 0x88, 0x00}}, + {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}}, + {2, [3]byte{0xc3, 0x8f, 0x00}}, {2, [3]byte{0xc3, 0x8c, 0x00}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {3, [3]byte{0xef, 0xa3, 0xbf}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x99, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {2, [3]byte{0xcb, 0x9c, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xcb, 0x98, 0x00}}, + {2, [3]byte{0xcb, 0x99, 0x00}}, {2, [3]byte{0xcb, 0x9a, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xca0000a0, 0xc10000a1, 0xa20000a2, 0xa30000a3, 0xb40000a5, 0xa40000a7, 0xac0000a8, 0xa90000a9, + 0xbb0000aa, 0xc70000ab, 0xc20000ac, 0xa80000ae, 0xf80000af, 0xa10000b0, 0xb10000b1, 0xab0000b4, + 0xb50000b5, 0xa60000b6, 0xe10000b7, 0xfc0000b8, 0xbc0000ba, 0xc80000bb, 0xc00000bf, 0xcb0000c0, + 0xe70000c1, 0xe50000c2, 0xcc0000c3, 0x800000c4, 0x810000c5, 0xae0000c6, 0x820000c7, 0xe90000c8, + 0x830000c9, 0xe60000ca, 0xe80000cb, 0xed0000cc, 0xea0000cd, 0xeb0000ce, 0xec0000cf, 0x840000d1, + 0xf10000d2, 0xee0000d3, 0xef0000d4, 0xcd0000d5, 0x850000d6, 0xaf0000d8, 0xf40000d9, 0xf20000da, + 0xf30000db, 0x860000dc, 0xa70000df, 0x880000e0, 0x870000e1, 0x890000e2, 0x8b0000e3, 0x8a0000e4, + 0x8c0000e5, 0xbe0000e6, 0x8d0000e7, 0x8f0000e8, 0x8e0000e9, 0x900000ea, 0x910000eb, 0x930000ec, + 0x920000ed, 0x940000ee, 0x950000ef, 0x960000f1, 0x980000f2, 0x970000f3, 0x990000f4, 0x9b0000f5, + 0x9a0000f6, 0xd60000f7, 0xbf0000f8, 0x9d0000f9, 0x9c0000fa, 0x9e0000fb, 0x9f0000fc, 0xd80000ff, + 0xf5000131, 0xce000152, 0xcf000153, 0xd9000178, 0xc4000192, 0xf60002c6, 0xff0002c7, 0xf90002d8, + 0xfa0002d9, 0xfb0002da, 0xfe0002db, 0xf70002dc, 0xfd0002dd, 0xbd0003a9, 0xb90003c0, 0xd0002013, + 0xd1002014, 0xd4002018, 0xd5002019, 0xe200201a, 0xd200201c, 0xd300201d, 0xe300201e, 0xa0002020, + 0xe0002021, 0xa5002022, 0xc9002026, 0xe4002030, 0xdc002039, 0xdd00203a, 0xda002044, 0xdb0020ac, + 0xaa002122, 0xb6002202, 0xc6002206, 0xb800220f, 0xb7002211, 0xc300221a, 0xb000221e, 0xba00222b, + 0xc5002248, 0xad002260, 0xb2002264, 0xb3002265, 0xd70025ca, 0xf000f8ff, 0xde00fb01, 0xdf00fb02, + }, +} + +// MacintoshCyrillic is the Macintosh Cyrillic encoding. +var MacintoshCyrillic *Charmap = &macintoshCyrillic + +var macintoshCyrillic = Charmap{ + name: "Macintosh Cyrillic", + mib: identifier.MacintoshCyrillic, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}}, + {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {2, [3]byte{0xc2, 0xb0, 0x00}}, + {2, [3]byte{0xd2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0x86, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {3, [3]byte{0xe2, 0x84, 0xa2}}, {2, [3]byte{0xd0, 0x82, 0x00}}, + {2, [3]byte{0xd1, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0xa0}}, + {2, [3]byte{0xd0, 0x83, 0x00}}, {2, [3]byte{0xd1, 0x93, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}}, + {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xd2, 0x91, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x94, 0x00}}, + {2, [3]byte{0xd0, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x89, 0x00}}, {2, [3]byte{0xd1, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x9a, 0x00}}, + {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {2, [3]byte{0xc6, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {3, [3]byte{0xe2, 0x88, 0x86}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xbb, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}}, + {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xd1, 0x95, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xe2, 0x80, 0x9c}}, {3, [3]byte{0xe2, 0x80, 0x9d}}, + {3, [3]byte{0xe2, 0x80, 0x98}}, {3, [3]byte{0xe2, 0x80, 0x99}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9e}}, + {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x9e, 0x00}}, + {2, [3]byte{0xd0, 0x8f, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}}, + {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x91, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xca0000a0, 0xa30000a3, 0xa40000a7, 0xa90000a9, 0xc70000ab, 0xc20000ac, 0xa80000ae, 0xa10000b0, + 0xb10000b1, 0xb50000b5, 0xa60000b6, 0xc80000bb, 0xd60000f7, 0xc4000192, 0xdd000401, 0xab000402, + 0xae000403, 0xb8000404, 0xc1000405, 0xa7000406, 0xba000407, 0xb7000408, 0xbc000409, 0xbe00040a, + 0xcb00040b, 0xcd00040c, 0xd800040e, 0xda00040f, 0x80000410, 0x81000411, 0x82000412, 0x83000413, + 0x84000414, 0x85000415, 0x86000416, 0x87000417, 0x88000418, 0x89000419, 0x8a00041a, 0x8b00041b, + 0x8c00041c, 0x8d00041d, 0x8e00041e, 0x8f00041f, 0x90000420, 0x91000421, 0x92000422, 0x93000423, + 0x94000424, 0x95000425, 0x96000426, 0x97000427, 0x98000428, 0x99000429, 0x9a00042a, 0x9b00042b, + 0x9c00042c, 0x9d00042d, 0x9e00042e, 0x9f00042f, 0xe0000430, 0xe1000431, 0xe2000432, 0xe3000433, + 0xe4000434, 0xe5000435, 0xe6000436, 0xe7000437, 0xe8000438, 0xe9000439, 0xea00043a, 0xeb00043b, + 0xec00043c, 0xed00043d, 0xee00043e, 0xef00043f, 0xf0000440, 0xf1000441, 0xf2000442, 0xf3000443, + 0xf4000444, 0xf5000445, 0xf6000446, 0xf7000447, 0xf8000448, 0xf9000449, 0xfa00044a, 0xfb00044b, + 0xfc00044c, 0xfd00044d, 0xfe00044e, 0xdf00044f, 0xde000451, 0xac000452, 0xaf000453, 0xb9000454, + 0xcf000455, 0xb4000456, 0xbb000457, 0xc0000458, 0xbd000459, 0xbf00045a, 0xcc00045b, 0xce00045c, + 0xd900045e, 0xdb00045f, 0xa2000490, 0xb6000491, 0xd0002013, 0xd1002014, 0xd4002018, 0xd5002019, + 0xd200201c, 0xd300201d, 0xd700201e, 0xa0002020, 0xa5002022, 0xc9002026, 0xff0020ac, 0xdc002116, + 0xaa002122, 0xc6002206, 0xc300221a, 0xb000221e, 0xc5002248, 0xad002260, 0xb2002264, 0xb3002265, + }, +} + +// Windows874 is the Windows 874 encoding. +var Windows874 *Charmap = &windows874 + +var windows874 = Charmap{ + name: "Windows 874", + mib: identifier.Windows874, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe0, 0xb8, 0x81}}, + {3, [3]byte{0xe0, 0xb8, 0x82}}, {3, [3]byte{0xe0, 0xb8, 0x83}}, + {3, [3]byte{0xe0, 0xb8, 0x84}}, {3, [3]byte{0xe0, 0xb8, 0x85}}, + {3, [3]byte{0xe0, 0xb8, 0x86}}, {3, [3]byte{0xe0, 0xb8, 0x87}}, + {3, [3]byte{0xe0, 0xb8, 0x88}}, {3, [3]byte{0xe0, 0xb8, 0x89}}, + {3, [3]byte{0xe0, 0xb8, 0x8a}}, {3, [3]byte{0xe0, 0xb8, 0x8b}}, + {3, [3]byte{0xe0, 0xb8, 0x8c}}, {3, [3]byte{0xe0, 0xb8, 0x8d}}, + {3, [3]byte{0xe0, 0xb8, 0x8e}}, {3, [3]byte{0xe0, 0xb8, 0x8f}}, + {3, [3]byte{0xe0, 0xb8, 0x90}}, {3, [3]byte{0xe0, 0xb8, 0x91}}, + {3, [3]byte{0xe0, 0xb8, 0x92}}, {3, [3]byte{0xe0, 0xb8, 0x93}}, + {3, [3]byte{0xe0, 0xb8, 0x94}}, {3, [3]byte{0xe0, 0xb8, 0x95}}, + {3, [3]byte{0xe0, 0xb8, 0x96}}, {3, [3]byte{0xe0, 0xb8, 0x97}}, + {3, [3]byte{0xe0, 0xb8, 0x98}}, {3, [3]byte{0xe0, 0xb8, 0x99}}, + {3, [3]byte{0xe0, 0xb8, 0x9a}}, {3, [3]byte{0xe0, 0xb8, 0x9b}}, + {3, [3]byte{0xe0, 0xb8, 0x9c}}, {3, [3]byte{0xe0, 0xb8, 0x9d}}, + {3, [3]byte{0xe0, 0xb8, 0x9e}}, {3, [3]byte{0xe0, 0xb8, 0x9f}}, + {3, [3]byte{0xe0, 0xb8, 0xa0}}, {3, [3]byte{0xe0, 0xb8, 0xa1}}, + {3, [3]byte{0xe0, 0xb8, 0xa2}}, {3, [3]byte{0xe0, 0xb8, 0xa3}}, + {3, [3]byte{0xe0, 0xb8, 0xa4}}, {3, [3]byte{0xe0, 0xb8, 0xa5}}, + {3, [3]byte{0xe0, 0xb8, 0xa6}}, {3, [3]byte{0xe0, 0xb8, 0xa7}}, + {3, [3]byte{0xe0, 0xb8, 0xa8}}, {3, [3]byte{0xe0, 0xb8, 0xa9}}, + {3, [3]byte{0xe0, 0xb8, 0xaa}}, {3, [3]byte{0xe0, 0xb8, 0xab}}, + {3, [3]byte{0xe0, 0xb8, 0xac}}, {3, [3]byte{0xe0, 0xb8, 0xad}}, + {3, [3]byte{0xe0, 0xb8, 0xae}}, {3, [3]byte{0xe0, 0xb8, 0xaf}}, + {3, [3]byte{0xe0, 0xb8, 0xb0}}, {3, [3]byte{0xe0, 0xb8, 0xb1}}, + {3, [3]byte{0xe0, 0xb8, 0xb2}}, {3, [3]byte{0xe0, 0xb8, 0xb3}}, + {3, [3]byte{0xe0, 0xb8, 0xb4}}, {3, [3]byte{0xe0, 0xb8, 0xb5}}, + {3, [3]byte{0xe0, 0xb8, 0xb6}}, {3, [3]byte{0xe0, 0xb8, 0xb7}}, + {3, [3]byte{0xe0, 0xb8, 0xb8}}, {3, [3]byte{0xe0, 0xb8, 0xb9}}, + {3, [3]byte{0xe0, 0xb8, 0xba}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe0, 0xb8, 0xbf}}, + {3, [3]byte{0xe0, 0xb9, 0x80}}, {3, [3]byte{0xe0, 0xb9, 0x81}}, + {3, [3]byte{0xe0, 0xb9, 0x82}}, {3, [3]byte{0xe0, 0xb9, 0x83}}, + {3, [3]byte{0xe0, 0xb9, 0x84}}, {3, [3]byte{0xe0, 0xb9, 0x85}}, + {3, [3]byte{0xe0, 0xb9, 0x86}}, {3, [3]byte{0xe0, 0xb9, 0x87}}, + {3, [3]byte{0xe0, 0xb9, 0x88}}, {3, [3]byte{0xe0, 0xb9, 0x89}}, + {3, [3]byte{0xe0, 0xb9, 0x8a}}, {3, [3]byte{0xe0, 0xb9, 0x8b}}, + {3, [3]byte{0xe0, 0xb9, 0x8c}}, {3, [3]byte{0xe0, 0xb9, 0x8d}}, + {3, [3]byte{0xe0, 0xb9, 0x8e}}, {3, [3]byte{0xe0, 0xb9, 0x8f}}, + {3, [3]byte{0xe0, 0xb9, 0x90}}, {3, [3]byte{0xe0, 0xb9, 0x91}}, + {3, [3]byte{0xe0, 0xb9, 0x92}}, {3, [3]byte{0xe0, 0xb9, 0x93}}, + {3, [3]byte{0xe0, 0xb9, 0x94}}, {3, [3]byte{0xe0, 0xb9, 0x95}}, + {3, [3]byte{0xe0, 0xb9, 0x96}}, {3, [3]byte{0xe0, 0xb9, 0x97}}, + {3, [3]byte{0xe0, 0xb9, 0x98}}, {3, [3]byte{0xe0, 0xb9, 0x99}}, + {3, [3]byte{0xe0, 0xb9, 0x9a}}, {3, [3]byte{0xe0, 0xb9, 0x9b}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa1000e01, 0xa2000e02, 0xa3000e03, 0xa4000e04, 0xa5000e05, 0xa6000e06, 0xa7000e07, + 0xa8000e08, 0xa9000e09, 0xaa000e0a, 0xab000e0b, 0xac000e0c, 0xad000e0d, 0xae000e0e, 0xaf000e0f, + 0xb0000e10, 0xb1000e11, 0xb2000e12, 0xb3000e13, 0xb4000e14, 0xb5000e15, 0xb6000e16, 0xb7000e17, + 0xb8000e18, 0xb9000e19, 0xba000e1a, 0xbb000e1b, 0xbc000e1c, 0xbd000e1d, 0xbe000e1e, 0xbf000e1f, + 0xc0000e20, 0xc1000e21, 0xc2000e22, 0xc3000e23, 0xc4000e24, 0xc5000e25, 0xc6000e26, 0xc7000e27, + 0xc8000e28, 0xc9000e29, 0xca000e2a, 0xcb000e2b, 0xcc000e2c, 0xcd000e2d, 0xce000e2e, 0xcf000e2f, + 0xd0000e30, 0xd1000e31, 0xd2000e32, 0xd3000e33, 0xd4000e34, 0xd5000e35, 0xd6000e36, 0xd7000e37, + 0xd8000e38, 0xd9000e39, 0xda000e3a, 0xdf000e3f, 0xe0000e40, 0xe1000e41, 0xe2000e42, 0xe3000e43, + 0xe4000e44, 0xe5000e45, 0xe6000e46, 0xe7000e47, 0xe8000e48, 0xe9000e49, 0xea000e4a, 0xeb000e4b, + 0xec000e4c, 0xed000e4d, 0xee000e4e, 0xef000e4f, 0xf0000e50, 0xf1000e51, 0xf2000e52, 0xf3000e53, + 0xf4000e54, 0xf5000e55, 0xf6000e56, 0xf7000e57, 0xf8000e58, 0xf9000e59, 0xfa000e5a, 0xfb000e5b, + 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x9300201c, 0x9400201d, 0x95002022, 0x85002026, + 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, + 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, + 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, + 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, + }, +} + +// Windows1250 is the Windows 1250 encoding. +var Windows1250 *Charmap = &windows1250 + +var windows1250 = Charmap{ + name: "Windows 1250", + mib: identifier.Windows1250, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xb9, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xa5, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc4, 0xbd, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}}, + {2, [3]byte{0xc4, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}}, + {2, [3]byte{0xc4, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0x8e, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xae, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xba, 0x00}}, + {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc5, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, 0xab0000ab, 0xac0000ac, + 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xbb0000bb, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc90000c9, 0xcb0000cb, + 0xcd0000cd, 0xce0000ce, 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xda0000da, 0xdc0000dc, + 0xdd0000dd, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe90000e9, 0xeb0000eb, + 0xed0000ed, 0xee0000ee, 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xfa0000fa, 0xfc0000fc, + 0xfd0000fd, 0xc3000102, 0xe3000103, 0xa5000104, 0xb9000105, 0xc6000106, 0xe6000107, 0xc800010c, + 0xe800010d, 0xcf00010e, 0xef00010f, 0xd0000110, 0xf0000111, 0xca000118, 0xea000119, 0xcc00011a, + 0xec00011b, 0xc5000139, 0xe500013a, 0xbc00013d, 0xbe00013e, 0xa3000141, 0xb3000142, 0xd1000143, + 0xf1000144, 0xd2000147, 0xf2000148, 0xd5000150, 0xf5000151, 0xc0000154, 0xe0000155, 0xd8000158, + 0xf8000159, 0x8c00015a, 0x9c00015b, 0xaa00015e, 0xba00015f, 0x8a000160, 0x9a000161, 0xde000162, + 0xfe000163, 0x8d000164, 0x9d000165, 0xd900016e, 0xf900016f, 0xdb000170, 0xfb000171, 0x8f000179, + 0x9f00017a, 0xaf00017b, 0xbf00017c, 0x8e00017d, 0x9e00017e, 0xa10002c7, 0xa20002d8, 0xff0002d9, + 0xb20002db, 0xbd0002dd, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, + 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, + 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1251 is the Windows 1251 encoding. +var Windows1251 *Charmap = &windows1251 + +var windows1251 = Charmap{ + name: "Windows 1251", + mib: identifier.Windows1251, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd0, 0x82, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xd1, 0x93, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xd0, 0x89, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}}, + {2, [3]byte{0xd0, 0x8b, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}}, + {2, [3]byte{0xd1, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xd1, 0x99, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd1, 0x9c, 0x00}}, + {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x8e, 0x00}}, + {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xd2, 0x90, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0x81, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x96, 0x00}}, + {2, [3]byte{0xd2, 0x91, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xd1, 0x91, 0x00}}, {3, [3]byte{0xe2, 0x84, 0x96}}, + {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x95, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}}, + {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, + 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xbb0000bb, 0xa8000401, + 0x80000402, 0x81000403, 0xaa000404, 0xbd000405, 0xb2000406, 0xaf000407, 0xa3000408, 0x8a000409, + 0x8c00040a, 0x8e00040b, 0x8d00040c, 0xa100040e, 0x8f00040f, 0xc0000410, 0xc1000411, 0xc2000412, + 0xc3000413, 0xc4000414, 0xc5000415, 0xc6000416, 0xc7000417, 0xc8000418, 0xc9000419, 0xca00041a, + 0xcb00041b, 0xcc00041c, 0xcd00041d, 0xce00041e, 0xcf00041f, 0xd0000420, 0xd1000421, 0xd2000422, + 0xd3000423, 0xd4000424, 0xd5000425, 0xd6000426, 0xd7000427, 0xd8000428, 0xd9000429, 0xda00042a, + 0xdb00042b, 0xdc00042c, 0xdd00042d, 0xde00042e, 0xdf00042f, 0xe0000430, 0xe1000431, 0xe2000432, + 0xe3000433, 0xe4000434, 0xe5000435, 0xe6000436, 0xe7000437, 0xe8000438, 0xe9000439, 0xea00043a, + 0xeb00043b, 0xec00043c, 0xed00043d, 0xee00043e, 0xef00043f, 0xf0000440, 0xf1000441, 0xf2000442, + 0xf3000443, 0xf4000444, 0xf5000445, 0xf6000446, 0xf7000447, 0xf8000448, 0xf9000449, 0xfa00044a, + 0xfb00044b, 0xfc00044c, 0xfd00044d, 0xfe00044e, 0xff00044f, 0xb8000451, 0x90000452, 0x83000453, + 0xba000454, 0xbe000455, 0xb3000456, 0xbf000457, 0xbc000458, 0x9a000459, 0x9c00045a, 0x9e00045b, + 0x9d00045c, 0xa200045e, 0x9f00045f, 0xa5000490, 0xb4000491, 0x96002013, 0x97002014, 0x91002018, + 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, + 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x880020ac, 0xb9002116, 0x99002122, 0x99002122, + }, +} + +// Windows1252 is the Windows 1252 encoding. +var Windows1252 *Charmap = &windows1252 + +var windows1252 = Charmap{ + name: "Windows 1252", + mib: identifier.Windows1252, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, + 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, + 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, + 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, + 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff, + 0x8c000152, 0x9c000153, 0x8a000160, 0x9a000161, 0x9f000178, 0x8e00017d, 0x9e00017e, 0x83000192, + 0x880002c6, 0x980002dc, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, + 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, + 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1253 is the Windows 1253 encoding. +var Windows1253 *Charmap = &windows1253 + +var windows1253 = Charmap{ + name: "Windows 1253", + mib: identifier.Windows1253, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xce, 0x85, 0x00}}, + {2, [3]byte{0xce, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x95}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xce, 0x84, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xce, 0x88, 0x00}}, {2, [3]byte{0xce, 0x89, 0x00}}, + {2, [3]byte{0xce, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xce, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xce, 0x8e, 0x00}}, {2, [3]byte{0xce, 0x8f, 0x00}}, + {2, [3]byte{0xce, 0x90, 0x00}}, {2, [3]byte{0xce, 0x91, 0x00}}, + {2, [3]byte{0xce, 0x92, 0x00}}, {2, [3]byte{0xce, 0x93, 0x00}}, + {2, [3]byte{0xce, 0x94, 0x00}}, {2, [3]byte{0xce, 0x95, 0x00}}, + {2, [3]byte{0xce, 0x96, 0x00}}, {2, [3]byte{0xce, 0x97, 0x00}}, + {2, [3]byte{0xce, 0x98, 0x00}}, {2, [3]byte{0xce, 0x99, 0x00}}, + {2, [3]byte{0xce, 0x9a, 0x00}}, {2, [3]byte{0xce, 0x9b, 0x00}}, + {2, [3]byte{0xce, 0x9c, 0x00}}, {2, [3]byte{0xce, 0x9d, 0x00}}, + {2, [3]byte{0xce, 0x9e, 0x00}}, {2, [3]byte{0xce, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0xa0, 0x00}}, {2, [3]byte{0xce, 0xa1, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xce, 0xa3, 0x00}}, + {2, [3]byte{0xce, 0xa4, 0x00}}, {2, [3]byte{0xce, 0xa5, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0xa7, 0x00}}, + {2, [3]byte{0xce, 0xa8, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}}, + {2, [3]byte{0xce, 0xaa, 0x00}}, {2, [3]byte{0xce, 0xab, 0x00}}, + {2, [3]byte{0xce, 0xac, 0x00}}, {2, [3]byte{0xce, 0xad, 0x00}}, + {2, [3]byte{0xce, 0xae, 0x00}}, {2, [3]byte{0xce, 0xaf, 0x00}}, + {2, [3]byte{0xce, 0xb0, 0x00}}, {2, [3]byte{0xce, 0xb1, 0x00}}, + {2, [3]byte{0xce, 0xb2, 0x00}}, {2, [3]byte{0xce, 0xb3, 0x00}}, + {2, [3]byte{0xce, 0xb4, 0x00}}, {2, [3]byte{0xce, 0xb5, 0x00}}, + {2, [3]byte{0xce, 0xb6, 0x00}}, {2, [3]byte{0xce, 0xb7, 0x00}}, + {2, [3]byte{0xce, 0xb8, 0x00}}, {2, [3]byte{0xce, 0xb9, 0x00}}, + {2, [3]byte{0xce, 0xba, 0x00}}, {2, [3]byte{0xce, 0xbb, 0x00}}, + {2, [3]byte{0xce, 0xbc, 0x00}}, {2, [3]byte{0xce, 0xbd, 0x00}}, + {2, [3]byte{0xce, 0xbe, 0x00}}, {2, [3]byte{0xce, 0xbf, 0x00}}, + {2, [3]byte{0xcf, 0x80, 0x00}}, {2, [3]byte{0xcf, 0x81, 0x00}}, + {2, [3]byte{0xcf, 0x82, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xcf, 0x84, 0x00}}, {2, [3]byte{0xcf, 0x85, 0x00}}, + {2, [3]byte{0xcf, 0x86, 0x00}}, {2, [3]byte{0xcf, 0x87, 0x00}}, + {2, [3]byte{0xcf, 0x88, 0x00}}, {2, [3]byte{0xcf, 0x89, 0x00}}, + {2, [3]byte{0xcf, 0x8a, 0x00}}, {2, [3]byte{0xcf, 0x8b, 0x00}}, + {2, [3]byte{0xcf, 0x8c, 0x00}}, {2, [3]byte{0xcf, 0x8d, 0x00}}, + {2, [3]byte{0xcf, 0x8e, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, + 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, + 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xbb0000bb, 0xbd0000bd, 0x83000192, 0xb4000384, 0xa1000385, + 0xa2000386, 0xb8000388, 0xb9000389, 0xba00038a, 0xbc00038c, 0xbe00038e, 0xbf00038f, 0xc0000390, + 0xc1000391, 0xc2000392, 0xc3000393, 0xc4000394, 0xc5000395, 0xc6000396, 0xc7000397, 0xc8000398, + 0xc9000399, 0xca00039a, 0xcb00039b, 0xcc00039c, 0xcd00039d, 0xce00039e, 0xcf00039f, 0xd00003a0, + 0xd10003a1, 0xd30003a3, 0xd40003a4, 0xd50003a5, 0xd60003a6, 0xd70003a7, 0xd80003a8, 0xd90003a9, + 0xda0003aa, 0xdb0003ab, 0xdc0003ac, 0xdd0003ad, 0xde0003ae, 0xdf0003af, 0xe00003b0, 0xe10003b1, + 0xe20003b2, 0xe30003b3, 0xe40003b4, 0xe50003b5, 0xe60003b6, 0xe70003b7, 0xe80003b8, 0xe90003b9, + 0xea0003ba, 0xeb0003bb, 0xec0003bc, 0xed0003bd, 0xee0003be, 0xef0003bf, 0xf00003c0, 0xf10003c1, + 0xf20003c2, 0xf30003c3, 0xf40003c4, 0xf50003c5, 0xf60003c6, 0xf70003c7, 0xf80003c8, 0xf90003c9, + 0xfa0003ca, 0xfb0003cb, 0xfc0003cc, 0xfd0003cd, 0xfe0003ce, 0x96002013, 0x97002014, 0xaf002015, + 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, + 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1254 is the Windows 1254 encoding. +var Windows1254 *Charmap = &windows1254 + +var windows1254 = Charmap{ + name: "Windows 1254", + mib: identifier.Windows1254, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8, + 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, + 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, + 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, + 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, + 0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0x8c000152, 0x9c000153, + 0xde00015e, 0xfe00015f, 0x8a000160, 0x9a000161, 0x9f000178, 0x83000192, 0x880002c6, 0x980002dc, + 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, + 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1255 is the Windows 1255 encoding. +var Windows1255 *Charmap = &windows1255 + +var windows1255 = Charmap{ + name: "Windows 1255", + mib: identifier.Windows1255, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xaa}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xd6, 0xb0, 0x00}}, {2, [3]byte{0xd6, 0xb1, 0x00}}, + {2, [3]byte{0xd6, 0xb2, 0x00}}, {2, [3]byte{0xd6, 0xb3, 0x00}}, + {2, [3]byte{0xd6, 0xb4, 0x00}}, {2, [3]byte{0xd6, 0xb5, 0x00}}, + {2, [3]byte{0xd6, 0xb6, 0x00}}, {2, [3]byte{0xd6, 0xb7, 0x00}}, + {2, [3]byte{0xd6, 0xb8, 0x00}}, {2, [3]byte{0xd6, 0xb9, 0x00}}, + {2, [3]byte{0xd6, 0xba, 0x00}}, {2, [3]byte{0xd6, 0xbb, 0x00}}, + {2, [3]byte{0xd6, 0xbc, 0x00}}, {2, [3]byte{0xd6, 0xbd, 0x00}}, + {2, [3]byte{0xd6, 0xbe, 0x00}}, {2, [3]byte{0xd6, 0xbf, 0x00}}, + {2, [3]byte{0xd7, 0x80, 0x00}}, {2, [3]byte{0xd7, 0x81, 0x00}}, + {2, [3]byte{0xd7, 0x82, 0x00}}, {2, [3]byte{0xd7, 0x83, 0x00}}, + {2, [3]byte{0xd7, 0xb0, 0x00}}, {2, [3]byte{0xd7, 0xb1, 0x00}}, + {2, [3]byte{0xd7, 0xb2, 0x00}}, {2, [3]byte{0xd7, 0xb3, 0x00}}, + {2, [3]byte{0xd7, 0xb4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}}, + {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}}, + {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}}, + {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}}, + {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}}, + {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}}, + {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}}, + {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}}, + {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}}, + {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}}, + {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}}, + {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}}, + {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}}, + {2, [3]byte{0xd7, 0xaa, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x8e}}, + {3, [3]byte{0xe2, 0x80, 0x8f}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, + 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, + 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9, + 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, 0xaa0000d7, 0xba0000f7, 0x83000192, + 0x880002c6, 0x980002dc, 0xc00005b0, 0xc10005b1, 0xc20005b2, 0xc30005b3, 0xc40005b4, 0xc50005b5, + 0xc60005b6, 0xc70005b7, 0xc80005b8, 0xc90005b9, 0xca0005ba, 0xcb0005bb, 0xcc0005bc, 0xcd0005bd, + 0xce0005be, 0xcf0005bf, 0xd00005c0, 0xd10005c1, 0xd20005c2, 0xd30005c3, 0xe00005d0, 0xe10005d1, + 0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9, + 0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1, + 0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9, + 0xfa0005ea, 0xd40005f0, 0xd50005f1, 0xd60005f2, 0xd70005f3, 0xd80005f4, 0xfd00200e, 0xfe00200f, + 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, + 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xa40020aa, + 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1256 is the Windows 1256 encoding. +var Windows1256 *Charmap = &windows1256 + +var windows1256 = Charmap{ + name: "Windows 1256", + mib: identifier.Windows1256, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {2, [3]byte{0xd9, 0xbe, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xd9, 0xb9, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xda, 0x86, 0x00}}, + {2, [3]byte{0xda, 0x98, 0x00}}, {2, [3]byte{0xda, 0x88, 0x00}}, + {2, [3]byte{0xda, 0xaf, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xda, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xda, 0x91, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x8c}}, + {3, [3]byte{0xe2, 0x80, 0x8d}}, {2, [3]byte{0xda, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd8, 0x8c, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xda, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xd8, 0x9b, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xd8, 0x9f, 0x00}}, + {2, [3]byte{0xdb, 0x81, 0x00}}, {2, [3]byte{0xd8, 0xa1, 0x00}}, + {2, [3]byte{0xd8, 0xa2, 0x00}}, {2, [3]byte{0xd8, 0xa3, 0x00}}, + {2, [3]byte{0xd8, 0xa4, 0x00}}, {2, [3]byte{0xd8, 0xa5, 0x00}}, + {2, [3]byte{0xd8, 0xa6, 0x00}}, {2, [3]byte{0xd8, 0xa7, 0x00}}, + {2, [3]byte{0xd8, 0xa8, 0x00}}, {2, [3]byte{0xd8, 0xa9, 0x00}}, + {2, [3]byte{0xd8, 0xaa, 0x00}}, {2, [3]byte{0xd8, 0xab, 0x00}}, + {2, [3]byte{0xd8, 0xac, 0x00}}, {2, [3]byte{0xd8, 0xad, 0x00}}, + {2, [3]byte{0xd8, 0xae, 0x00}}, {2, [3]byte{0xd8, 0xaf, 0x00}}, + {2, [3]byte{0xd8, 0xb0, 0x00}}, {2, [3]byte{0xd8, 0xb1, 0x00}}, + {2, [3]byte{0xd8, 0xb2, 0x00}}, {2, [3]byte{0xd8, 0xb3, 0x00}}, + {2, [3]byte{0xd8, 0xb4, 0x00}}, {2, [3]byte{0xd8, 0xb5, 0x00}}, + {2, [3]byte{0xd8, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xd8, 0xb7, 0x00}}, {2, [3]byte{0xd8, 0xb8, 0x00}}, + {2, [3]byte{0xd8, 0xb9, 0x00}}, {2, [3]byte{0xd8, 0xba, 0x00}}, + {2, [3]byte{0xd9, 0x80, 0x00}}, {2, [3]byte{0xd9, 0x81, 0x00}}, + {2, [3]byte{0xd9, 0x82, 0x00}}, {2, [3]byte{0xd9, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xd9, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xd9, 0x85, 0x00}}, + {2, [3]byte{0xd9, 0x86, 0x00}}, {2, [3]byte{0xd9, 0x87, 0x00}}, + {2, [3]byte{0xd9, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xd9, 0x89, 0x00}}, {2, [3]byte{0xd9, 0x8a, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xd9, 0x8b, 0x00}}, {2, [3]byte{0xd9, 0x8c, 0x00}}, + {2, [3]byte{0xd9, 0x8d, 0x00}}, {2, [3]byte{0xd9, 0x8e, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xd9, 0x8f, 0x00}}, + {2, [3]byte{0xd9, 0x90, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xd9, 0x91, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xd9, 0x92, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x8e}}, + {3, [3]byte{0xe2, 0x80, 0x8f}}, {2, [3]byte{0xdb, 0x92, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, + 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, + 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9, + 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xd70000d7, 0xe00000e0, 0xe20000e2, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xee0000ee, 0xef0000ef, 0xf40000f4, 0xf70000f7, + 0xf90000f9, 0xfb0000fb, 0xfc0000fc, 0x8c000152, 0x9c000153, 0x83000192, 0x880002c6, 0xa100060c, + 0xba00061b, 0xbf00061f, 0xc1000621, 0xc2000622, 0xc3000623, 0xc4000624, 0xc5000625, 0xc6000626, + 0xc7000627, 0xc8000628, 0xc9000629, 0xca00062a, 0xcb00062b, 0xcc00062c, 0xcd00062d, 0xce00062e, + 0xcf00062f, 0xd0000630, 0xd1000631, 0xd2000632, 0xd3000633, 0xd4000634, 0xd5000635, 0xd6000636, + 0xd8000637, 0xd9000638, 0xda000639, 0xdb00063a, 0xdc000640, 0xdd000641, 0xde000642, 0xdf000643, + 0xe1000644, 0xe3000645, 0xe4000646, 0xe5000647, 0xe6000648, 0xec000649, 0xed00064a, 0xf000064b, + 0xf100064c, 0xf200064d, 0xf300064e, 0xf500064f, 0xf6000650, 0xf8000651, 0xfa000652, 0x8a000679, + 0x8100067e, 0x8d000686, 0x8f000688, 0x9a000691, 0x8e000698, 0x980006a9, 0x900006af, 0x9f0006ba, + 0xaa0006be, 0xc00006c1, 0xff0006d2, 0x9d00200c, 0x9e00200d, 0xfd00200e, 0xfe00200f, 0x96002013, + 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, + 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, + }, +} + +// Windows1257 is the Windows 1257 encoding. +var Windows1257 *Charmap = &windows1257 + +var windows1257 = Charmap{ + name: "Windows 1257", + mib: identifier.Windows1257, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xcb, 0x87, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc3, 0x86, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc5, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}}, + {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x92, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc4, 0x96, 0x00}}, + {2, [3]byte{0xc4, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}}, + {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x85, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc5, 0xb2, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xaa, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc4, 0x93, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc4, 0x97, 0x00}}, + {2, [3]byte{0xc4, 0xa3, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}}, + {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc5, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0xb3, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0x8d0000a8, 0xa90000a9, + 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0x9d0000af, 0xb00000b0, 0xb10000b1, 0xb20000b2, + 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0x8f0000b8, 0xb90000b9, 0xbb0000bb, + 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xc40000c4, 0xc50000c5, 0xaf0000c6, 0xc90000c9, 0xd30000d3, + 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xa80000d8, 0xdc0000dc, 0xdf0000df, 0xe40000e4, 0xe50000e5, + 0xbf0000e6, 0xe90000e9, 0xf30000f3, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xb80000f8, 0xfc0000fc, + 0xc2000100, 0xe2000101, 0xc0000104, 0xe0000105, 0xc3000106, 0xe3000107, 0xc800010c, 0xe800010d, + 0xc7000112, 0xe7000113, 0xcb000116, 0xeb000117, 0xc6000118, 0xe6000119, 0xcc000122, 0xec000123, + 0xce00012a, 0xee00012b, 0xc100012e, 0xe100012f, 0xcd000136, 0xed000137, 0xcf00013b, 0xef00013c, + 0xd9000141, 0xf9000142, 0xd1000143, 0xf1000144, 0xd2000145, 0xf2000146, 0xd400014c, 0xf400014d, + 0xaa000156, 0xba000157, 0xda00015a, 0xfa00015b, 0xd0000160, 0xf0000161, 0xdb00016a, 0xfb00016b, + 0xd8000172, 0xf8000173, 0xca000179, 0xea00017a, 0xdd00017b, 0xfd00017c, 0xde00017d, 0xfe00017e, + 0x8e0002c7, 0xff0002d9, 0x9e0002db, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, + 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, + 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1258 is the Windows 1258 encoding. +var Windows1258 *Charmap = &windows1258 + +var windows1258 = Charmap{ + name: "Windows 1258", + mib: identifier.Windows1258, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xcc, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xcc, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc6, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc6, 0xaf, 0x00}}, + {2, [3]byte{0xcc, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xcc, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xcc, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc6, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc6, 0xb0, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xab}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, 0xc80000c8, + 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, 0xd30000d3, + 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, + 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, + 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, + 0xfc0000fc, 0xff0000ff, 0xc3000102, 0xe3000103, 0xd0000110, 0xf0000111, 0x8c000152, 0x9c000153, + 0x9f000178, 0x83000192, 0xd50001a0, 0xf50001a1, 0xdd0001af, 0xfd0001b0, 0x880002c6, 0x980002dc, + 0xcc000300, 0xec000301, 0xde000303, 0xd2000309, 0xf2000323, 0x96002013, 0x97002014, 0x91002018, + 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, + 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xfe0020ab, 0x800020ac, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// XUserDefined is the X-User-Defined encoding. +// +// It is defined at http://encoding.spec.whatwg.org/#x-user-defined +var XUserDefined *Charmap = &xUserDefined + +var xUserDefined = Charmap{ + name: "X-User-Defined", + mib: identifier.XUserDefined, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0x9e, 0x80}}, {3, [3]byte{0xef, 0x9e, 0x81}}, + {3, [3]byte{0xef, 0x9e, 0x82}}, {3, [3]byte{0xef, 0x9e, 0x83}}, + {3, [3]byte{0xef, 0x9e, 0x84}}, {3, [3]byte{0xef, 0x9e, 0x85}}, + {3, [3]byte{0xef, 0x9e, 0x86}}, {3, [3]byte{0xef, 0x9e, 0x87}}, + {3, [3]byte{0xef, 0x9e, 0x88}}, {3, [3]byte{0xef, 0x9e, 0x89}}, + {3, [3]byte{0xef, 0x9e, 0x8a}}, {3, [3]byte{0xef, 0x9e, 0x8b}}, + {3, [3]byte{0xef, 0x9e, 0x8c}}, {3, [3]byte{0xef, 0x9e, 0x8d}}, + {3, [3]byte{0xef, 0x9e, 0x8e}}, {3, [3]byte{0xef, 0x9e, 0x8f}}, + {3, [3]byte{0xef, 0x9e, 0x90}}, {3, [3]byte{0xef, 0x9e, 0x91}}, + {3, [3]byte{0xef, 0x9e, 0x92}}, {3, [3]byte{0xef, 0x9e, 0x93}}, + {3, [3]byte{0xef, 0x9e, 0x94}}, {3, [3]byte{0xef, 0x9e, 0x95}}, + {3, [3]byte{0xef, 0x9e, 0x96}}, {3, [3]byte{0xef, 0x9e, 0x97}}, + {3, [3]byte{0xef, 0x9e, 0x98}}, {3, [3]byte{0xef, 0x9e, 0x99}}, + {3, [3]byte{0xef, 0x9e, 0x9a}}, {3, [3]byte{0xef, 0x9e, 0x9b}}, + {3, [3]byte{0xef, 0x9e, 0x9c}}, {3, [3]byte{0xef, 0x9e, 0x9d}}, + {3, [3]byte{0xef, 0x9e, 0x9e}}, {3, [3]byte{0xef, 0x9e, 0x9f}}, + {3, [3]byte{0xef, 0x9e, 0xa0}}, {3, [3]byte{0xef, 0x9e, 0xa1}}, + {3, [3]byte{0xef, 0x9e, 0xa2}}, {3, [3]byte{0xef, 0x9e, 0xa3}}, + {3, [3]byte{0xef, 0x9e, 0xa4}}, {3, [3]byte{0xef, 0x9e, 0xa5}}, + {3, [3]byte{0xef, 0x9e, 0xa6}}, {3, [3]byte{0xef, 0x9e, 0xa7}}, + {3, [3]byte{0xef, 0x9e, 0xa8}}, {3, [3]byte{0xef, 0x9e, 0xa9}}, + {3, [3]byte{0xef, 0x9e, 0xaa}}, {3, [3]byte{0xef, 0x9e, 0xab}}, + {3, [3]byte{0xef, 0x9e, 0xac}}, {3, [3]byte{0xef, 0x9e, 0xad}}, + {3, [3]byte{0xef, 0x9e, 0xae}}, {3, [3]byte{0xef, 0x9e, 0xaf}}, + {3, [3]byte{0xef, 0x9e, 0xb0}}, {3, [3]byte{0xef, 0x9e, 0xb1}}, + {3, [3]byte{0xef, 0x9e, 0xb2}}, {3, [3]byte{0xef, 0x9e, 0xb3}}, + {3, [3]byte{0xef, 0x9e, 0xb4}}, {3, [3]byte{0xef, 0x9e, 0xb5}}, + {3, [3]byte{0xef, 0x9e, 0xb6}}, {3, [3]byte{0xef, 0x9e, 0xb7}}, + {3, [3]byte{0xef, 0x9e, 0xb8}}, {3, [3]byte{0xef, 0x9e, 0xb9}}, + {3, [3]byte{0xef, 0x9e, 0xba}}, {3, [3]byte{0xef, 0x9e, 0xbb}}, + {3, [3]byte{0xef, 0x9e, 0xbc}}, {3, [3]byte{0xef, 0x9e, 0xbd}}, + {3, [3]byte{0xef, 0x9e, 0xbe}}, {3, [3]byte{0xef, 0x9e, 0xbf}}, + {3, [3]byte{0xef, 0x9f, 0x80}}, {3, [3]byte{0xef, 0x9f, 0x81}}, + {3, [3]byte{0xef, 0x9f, 0x82}}, {3, [3]byte{0xef, 0x9f, 0x83}}, + {3, [3]byte{0xef, 0x9f, 0x84}}, {3, [3]byte{0xef, 0x9f, 0x85}}, + {3, [3]byte{0xef, 0x9f, 0x86}}, {3, [3]byte{0xef, 0x9f, 0x87}}, + {3, [3]byte{0xef, 0x9f, 0x88}}, {3, [3]byte{0xef, 0x9f, 0x89}}, + {3, [3]byte{0xef, 0x9f, 0x8a}}, {3, [3]byte{0xef, 0x9f, 0x8b}}, + {3, [3]byte{0xef, 0x9f, 0x8c}}, {3, [3]byte{0xef, 0x9f, 0x8d}}, + {3, [3]byte{0xef, 0x9f, 0x8e}}, {3, [3]byte{0xef, 0x9f, 0x8f}}, + {3, [3]byte{0xef, 0x9f, 0x90}}, {3, [3]byte{0xef, 0x9f, 0x91}}, + {3, [3]byte{0xef, 0x9f, 0x92}}, {3, [3]byte{0xef, 0x9f, 0x93}}, + {3, [3]byte{0xef, 0x9f, 0x94}}, {3, [3]byte{0xef, 0x9f, 0x95}}, + {3, [3]byte{0xef, 0x9f, 0x96}}, {3, [3]byte{0xef, 0x9f, 0x97}}, + {3, [3]byte{0xef, 0x9f, 0x98}}, {3, [3]byte{0xef, 0x9f, 0x99}}, + {3, [3]byte{0xef, 0x9f, 0x9a}}, {3, [3]byte{0xef, 0x9f, 0x9b}}, + {3, [3]byte{0xef, 0x9f, 0x9c}}, {3, [3]byte{0xef, 0x9f, 0x9d}}, + {3, [3]byte{0xef, 0x9f, 0x9e}}, {3, [3]byte{0xef, 0x9f, 0x9f}}, + {3, [3]byte{0xef, 0x9f, 0xa0}}, {3, [3]byte{0xef, 0x9f, 0xa1}}, + {3, [3]byte{0xef, 0x9f, 0xa2}}, {3, [3]byte{0xef, 0x9f, 0xa3}}, + {3, [3]byte{0xef, 0x9f, 0xa4}}, {3, [3]byte{0xef, 0x9f, 0xa5}}, + {3, [3]byte{0xef, 0x9f, 0xa6}}, {3, [3]byte{0xef, 0x9f, 0xa7}}, + {3, [3]byte{0xef, 0x9f, 0xa8}}, {3, [3]byte{0xef, 0x9f, 0xa9}}, + {3, [3]byte{0xef, 0x9f, 0xaa}}, {3, [3]byte{0xef, 0x9f, 0xab}}, + {3, [3]byte{0xef, 0x9f, 0xac}}, {3, [3]byte{0xef, 0x9f, 0xad}}, + {3, [3]byte{0xef, 0x9f, 0xae}}, {3, [3]byte{0xef, 0x9f, 0xaf}}, + {3, [3]byte{0xef, 0x9f, 0xb0}}, {3, [3]byte{0xef, 0x9f, 0xb1}}, + {3, [3]byte{0xef, 0x9f, 0xb2}}, {3, [3]byte{0xef, 0x9f, 0xb3}}, + {3, [3]byte{0xef, 0x9f, 0xb4}}, {3, [3]byte{0xef, 0x9f, 0xb5}}, + {3, [3]byte{0xef, 0x9f, 0xb6}}, {3, [3]byte{0xef, 0x9f, 0xb7}}, + {3, [3]byte{0xef, 0x9f, 0xb8}}, {3, [3]byte{0xef, 0x9f, 0xb9}}, + {3, [3]byte{0xef, 0x9f, 0xba}}, {3, [3]byte{0xef, 0x9f, 0xbb}}, + {3, [3]byte{0xef, 0x9f, 0xbc}}, {3, [3]byte{0xef, 0x9f, 0xbd}}, + {3, [3]byte{0xef, 0x9f, 0xbe}}, {3, [3]byte{0xef, 0x9f, 0xbf}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x8000f780, 0x8100f781, 0x8200f782, 0x8300f783, 0x8400f784, 0x8500f785, 0x8600f786, 0x8700f787, + 0x8800f788, 0x8900f789, 0x8a00f78a, 0x8b00f78b, 0x8c00f78c, 0x8d00f78d, 0x8e00f78e, 0x8f00f78f, + 0x9000f790, 0x9100f791, 0x9200f792, 0x9300f793, 0x9400f794, 0x9500f795, 0x9600f796, 0x9700f797, + 0x9800f798, 0x9900f799, 0x9a00f79a, 0x9b00f79b, 0x9c00f79c, 0x9d00f79d, 0x9e00f79e, 0x9f00f79f, + 0xa000f7a0, 0xa100f7a1, 0xa200f7a2, 0xa300f7a3, 0xa400f7a4, 0xa500f7a5, 0xa600f7a6, 0xa700f7a7, + 0xa800f7a8, 0xa900f7a9, 0xaa00f7aa, 0xab00f7ab, 0xac00f7ac, 0xad00f7ad, 0xae00f7ae, 0xaf00f7af, + 0xb000f7b0, 0xb100f7b1, 0xb200f7b2, 0xb300f7b3, 0xb400f7b4, 0xb500f7b5, 0xb600f7b6, 0xb700f7b7, + 0xb800f7b8, 0xb900f7b9, 0xba00f7ba, 0xbb00f7bb, 0xbc00f7bc, 0xbd00f7bd, 0xbe00f7be, 0xbf00f7bf, + 0xc000f7c0, 0xc100f7c1, 0xc200f7c2, 0xc300f7c3, 0xc400f7c4, 0xc500f7c5, 0xc600f7c6, 0xc700f7c7, + 0xc800f7c8, 0xc900f7c9, 0xca00f7ca, 0xcb00f7cb, 0xcc00f7cc, 0xcd00f7cd, 0xce00f7ce, 0xcf00f7cf, + 0xd000f7d0, 0xd100f7d1, 0xd200f7d2, 0xd300f7d3, 0xd400f7d4, 0xd500f7d5, 0xd600f7d6, 0xd700f7d7, + 0xd800f7d8, 0xd900f7d9, 0xda00f7da, 0xdb00f7db, 0xdc00f7dc, 0xdd00f7dd, 0xde00f7de, 0xdf00f7df, + 0xe000f7e0, 0xe100f7e1, 0xe200f7e2, 0xe300f7e3, 0xe400f7e4, 0xe500f7e5, 0xe600f7e6, 0xe700f7e7, + 0xe800f7e8, 0xe900f7e9, 0xea00f7ea, 0xeb00f7eb, 0xec00f7ec, 0xed00f7ed, 0xee00f7ee, 0xef00f7ef, + 0xf000f7f0, 0xf100f7f1, 0xf200f7f2, 0xf300f7f3, 0xf400f7f4, 0xf500f7f5, 0xf600f7f6, 0xf700f7f7, + 0xf800f7f8, 0xf900f7f9, 0xfa00f7fa, 0xfb00f7fb, 0xfc00f7fc, 0xfd00f7fd, 0xfe00f7fe, 0xff00f7ff, + }, +} +var listAll = []encoding.Encoding{ + CodePage037, + CodePage437, + CodePage850, + CodePage852, + CodePage855, + CodePage858, + CodePage860, + CodePage862, + CodePage863, + CodePage865, + CodePage866, + CodePage1047, + CodePage1140, + ISO8859_1, + ISO8859_2, + ISO8859_3, + ISO8859_4, + ISO8859_5, + ISO8859_6, + ISO8859_6E, + ISO8859_6I, + ISO8859_7, + ISO8859_8, + ISO8859_8E, + ISO8859_8I, + ISO8859_9, + ISO8859_10, + ISO8859_13, + ISO8859_14, + ISO8859_15, + ISO8859_16, + KOI8R, + KOI8U, + Macintosh, + MacintoshCyrillic, + Windows874, + Windows1250, + Windows1251, + Windows1252, + Windows1253, + Windows1254, + Windows1255, + Windows1256, + Windows1257, + Windows1258, + XUserDefined, +} + +// Total table size 87024 bytes (84KiB); checksum: 811C9DC5 diff --git a/vendor/golang.org/x/text/encoding/encoding.go b/vendor/golang.org/x/text/encoding/encoding.go new file mode 100644 index 0000000..221f175 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/encoding.go @@ -0,0 +1,335 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package encoding defines an interface for character encodings, such as Shift +// JIS and Windows 1252, that can convert to and from UTF-8. +// +// Encoding implementations are provided in other packages, such as +// golang.org/x/text/encoding/charmap and +// golang.org/x/text/encoding/japanese. +package encoding // import "golang.org/x/text/encoding" + +import ( + "errors" + "io" + "strconv" + "unicode/utf8" + + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// TODO: +// - There seems to be some inconsistency in when decoders return errors +// and when not. Also documentation seems to suggest they shouldn't return +// errors at all (except for UTF-16). +// - Encoders seem to rely on or at least benefit from the input being in NFC +// normal form. Perhaps add an example how users could prepare their output. + +// Encoding is a character set encoding that can be transformed to and from +// UTF-8. +type Encoding interface { + // NewDecoder returns a Decoder. + NewDecoder() *Decoder + + // NewEncoder returns an Encoder. + NewEncoder() *Encoder +} + +// A Decoder converts bytes to UTF-8. It implements transform.Transformer. +// +// Transforming source bytes that are not of that encoding will not result in an +// error per se. Each byte that cannot be transcoded will be represented in the +// output by the UTF-8 encoding of '\uFFFD', the replacement rune. +type Decoder struct { + transform.Transformer + + // This forces external creators of Decoders to use names in struct + // initializers, allowing for future extendibility without having to break + // code. + _ struct{} +} + +// Bytes converts the given encoded bytes to UTF-8. It returns the converted +// bytes or nil, err if any error occurred. +func (d *Decoder) Bytes(b []byte) ([]byte, error) { + b, _, err := transform.Bytes(d, b) + if err != nil { + return nil, err + } + return b, nil +} + +// String converts the given encoded string to UTF-8. It returns the converted +// string or "", err if any error occurred. +func (d *Decoder) String(s string) (string, error) { + s, _, err := transform.String(d, s) + if err != nil { + return "", err + } + return s, nil +} + +// Reader wraps another Reader to decode its bytes. +// +// The Decoder may not be used for any other operation as long as the returned +// Reader is in use. +func (d *Decoder) Reader(r io.Reader) io.Reader { + return transform.NewReader(r, d) +} + +// An Encoder converts bytes from UTF-8. It implements transform.Transformer. +// +// Each rune that cannot be transcoded will result in an error. In this case, +// the transform will consume all source byte up to, not including the offending +// rune. Transforming source bytes that are not valid UTF-8 will be replaced by +// `\uFFFD`. To return early with an error instead, use transform.Chain to +// preprocess the data with a UTF8Validator. +type Encoder struct { + transform.Transformer + + // This forces external creators of Encoders to use names in struct + // initializers, allowing for future extendibility without having to break + // code. + _ struct{} +} + +// Bytes converts bytes from UTF-8. It returns the converted bytes or nil, err if +// any error occurred. +func (e *Encoder) Bytes(b []byte) ([]byte, error) { + b, _, err := transform.Bytes(e, b) + if err != nil { + return nil, err + } + return b, nil +} + +// String converts a string from UTF-8. It returns the converted string or +// "", err if any error occurred. +func (e *Encoder) String(s string) (string, error) { + s, _, err := transform.String(e, s) + if err != nil { + return "", err + } + return s, nil +} + +// Writer wraps another Writer to encode its UTF-8 output. +// +// The Encoder may not be used for any other operation as long as the returned +// Writer is in use. +func (e *Encoder) Writer(w io.Writer) io.Writer { + return transform.NewWriter(w, e) +} + +// ASCIISub is the ASCII substitute character, as recommended by +// http://unicode.org/reports/tr36/#Text_Comparison +const ASCIISub = '\x1a' + +// Nop is the nop encoding. Its transformed bytes are the same as the source +// bytes; it does not replace invalid UTF-8 sequences. +var Nop Encoding = nop{} + +type nop struct{} + +func (nop) NewDecoder() *Decoder { + return &Decoder{Transformer: transform.Nop} +} +func (nop) NewEncoder() *Encoder { + return &Encoder{Transformer: transform.Nop} +} + +// Replacement is the replacement encoding. Decoding from the replacement +// encoding yields a single '\uFFFD' replacement rune. Encoding from UTF-8 to +// the replacement encoding yields the same as the source bytes except that +// invalid UTF-8 is converted to '\uFFFD'. +// +// It is defined at http://encoding.spec.whatwg.org/#replacement +var Replacement Encoding = replacement{} + +type replacement struct{} + +func (replacement) NewDecoder() *Decoder { + return &Decoder{Transformer: replacementDecoder{}} +} + +func (replacement) NewEncoder() *Encoder { + return &Encoder{Transformer: replacementEncoder{}} +} + +func (replacement) ID() (mib identifier.MIB, other string) { + return identifier.Replacement, "" +} + +type replacementDecoder struct{ transform.NopResetter } + +func (replacementDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if len(dst) < 3 { + return 0, 0, transform.ErrShortDst + } + if atEOF { + const fffd = "\ufffd" + dst[0] = fffd[0] + dst[1] = fffd[1] + dst[2] = fffd[2] + nDst = 3 + } + return nDst, len(src), nil +} + +type replacementEncoder struct{ transform.NopResetter } + +func (replacementEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + r = '\ufffd' + } + } + + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +// HTMLEscapeUnsupported wraps encoders to replace source runes outside the +// repertoire of the destination encoding with HTML escape sequences. +// +// This wrapper exists to comply to URL and HTML forms requiring a +// non-terminating legacy encoder. The produced sequences may lead to data +// loss as they are indistinguishable from legitimate input. To avoid this +// issue, use UTF-8 encodings whenever possible. +func HTMLEscapeUnsupported(e *Encoder) *Encoder { + return &Encoder{Transformer: &errorHandler{e, errorToHTML}} +} + +// ReplaceUnsupported wraps encoders to replace source runes outside the +// repertoire of the destination encoding with an encoding-specific +// replacement. +// +// This wrapper is only provided for backwards compatibility and legacy +// handling. Its use is strongly discouraged. Use UTF-8 whenever possible. +func ReplaceUnsupported(e *Encoder) *Encoder { + return &Encoder{Transformer: &errorHandler{e, errorToReplacement}} +} + +type errorHandler struct { + *Encoder + handler func(dst []byte, r rune, err repertoireError) (n int, ok bool) +} + +// TODO: consider making this error public in some form. +type repertoireError interface { + Replacement() byte +} + +func (h errorHandler) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + nDst, nSrc, err = h.Transformer.Transform(dst, src, atEOF) + for err != nil { + rerr, ok := err.(repertoireError) + if !ok { + return nDst, nSrc, err + } + r, sz := utf8.DecodeRune(src[nSrc:]) + n, ok := h.handler(dst[nDst:], r, rerr) + if !ok { + return nDst, nSrc, transform.ErrShortDst + } + err = nil + nDst += n + if nSrc += sz; nSrc < len(src) { + var dn, sn int + dn, sn, err = h.Transformer.Transform(dst[nDst:], src[nSrc:], atEOF) + nDst += dn + nSrc += sn + } + } + return nDst, nSrc, err +} + +func errorToHTML(dst []byte, r rune, err repertoireError) (n int, ok bool) { + buf := [8]byte{} + b := strconv.AppendUint(buf[:0], uint64(r), 10) + if n = len(b) + len("&#;"); n >= len(dst) { + return 0, false + } + dst[0] = '&' + dst[1] = '#' + dst[copy(dst[2:], b)+2] = ';' + return n, true +} + +func errorToReplacement(dst []byte, r rune, err repertoireError) (n int, ok bool) { + if len(dst) == 0 { + return 0, false + } + dst[0] = err.Replacement() + return 1, true +} + +// ErrInvalidUTF8 means that a transformer encountered invalid UTF-8. +var ErrInvalidUTF8 = errors.New("encoding: invalid UTF-8") + +// UTF8Validator is a transformer that returns ErrInvalidUTF8 on the first +// input byte that is not valid UTF-8. +var UTF8Validator transform.Transformer = utf8Validator{} + +type utf8Validator struct{ transform.NopResetter } + +func (utf8Validator) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := len(src) + if n > len(dst) { + n = len(dst) + } + for i := 0; i < n; { + if c := src[i]; c < utf8.RuneSelf { + dst[i] = c + i++ + continue + } + _, size := utf8.DecodeRune(src[i:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + err = ErrInvalidUTF8 + if !atEOF && !utf8.FullRune(src[i:]) { + err = transform.ErrShortSrc + } + return i, i, err + } + if i+size > len(dst) { + return i, i, transform.ErrShortDst + } + for ; size > 0; size-- { + dst[i] = src[i] + i++ + } + } + if len(src) > len(dst) { + err = transform.ErrShortDst + } + return n, n, err +} diff --git a/vendor/golang.org/x/text/encoding/encoding_test.go b/vendor/golang.org/x/text/encoding/encoding_test.go new file mode 100644 index 0000000..1738147 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/encoding_test.go @@ -0,0 +1,290 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package encoding_test + +import ( + "io/ioutil" + "strings" + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/transform" +) + +func TestEncodeInvalidUTF8(t *testing.T) { + inputs := []string{ + "hello.", + "wo\ufffdld.", + "ABC\xff\x80\x80", // Invalid UTF-8. + "\x80\x80\x80\x80\x80", + "\x80\x80D\x80\x80", // Valid rune at "D". + "E\xed\xa0\x80\xed\xbf\xbfF", // Two invalid UTF-8 runes (surrogates). + "G", + "H\xe2\x82", // U+20AC in UTF-8 is "\xe2\x82\xac", which we split over two + "\xacI\xe2\x82", // input lines. It maps to 0x80 in the Windows-1252 encoding. + } + // Each invalid source byte becomes '\x1a'. + want := strings.Replace("hello.wo?ld.ABC??????????D??E??????FGH\x80I??", "?", "\x1a", -1) + + transformer := encoding.ReplaceUnsupported(charmap.Windows1252.NewEncoder()) + gotBuf := make([]byte, 0, 1024) + src := make([]byte, 0, 1024) + for i, input := range inputs { + dst := make([]byte, 1024) + src = append(src, input...) + atEOF := i == len(inputs)-1 + nDst, nSrc, err := transformer.Transform(dst, src, atEOF) + gotBuf = append(gotBuf, dst[:nDst]...) + src = src[nSrc:] + if err != nil && err != transform.ErrShortSrc { + t.Fatalf("i=%d: %v", i, err) + } + if atEOF && err != nil { + t.Fatalf("i=%d: atEOF: %v", i, err) + } + } + if got := string(gotBuf); got != want { + t.Fatalf("\ngot %+q\nwant %+q", got, want) + } +} + +func TestReplacement(t *testing.T) { + for _, direction := range []string{"Decode", "Encode"} { + enc, want := (transform.Transformer)(nil), "" + if direction == "Decode" { + enc = encoding.Replacement.NewDecoder() + want = "\ufffd" + } else { + enc = encoding.Replacement.NewEncoder() + want = "AB\x00CD\ufffdYZ" + } + sr := strings.NewReader("AB\x00CD\x80YZ") + g, err := ioutil.ReadAll(transform.NewReader(sr, enc)) + if err != nil { + t.Errorf("%s: ReadAll: %v", direction, err) + continue + } + if got := string(g); got != want { + t.Errorf("%s:\ngot %q\nwant %q", direction, got, want) + continue + } + } +} + +func TestUTF8Validator(t *testing.T) { + testCases := []struct { + desc string + dstSize int + src string + atEOF bool + want string + wantErr error + }{ + { + "empty input", + 100, + "", + false, + "", + nil, + }, + { + "valid 1-byte 1-rune input", + 100, + "a", + false, + "a", + nil, + }, + { + "valid 3-byte 1-rune input", + 100, + "\u1234", + false, + "\u1234", + nil, + }, + { + "valid 5-byte 3-rune input", + 100, + "a\u0100\u0101", + false, + "a\u0100\u0101", + nil, + }, + { + "perfectly sized dst (non-ASCII)", + 5, + "a\u0100\u0101", + false, + "a\u0100\u0101", + nil, + }, + { + "short dst (non-ASCII)", + 4, + "a\u0100\u0101", + false, + "a\u0100", + transform.ErrShortDst, + }, + { + "perfectly sized dst (ASCII)", + 5, + "abcde", + false, + "abcde", + nil, + }, + { + "short dst (ASCII)", + 4, + "abcde", + false, + "abcd", + transform.ErrShortDst, + }, + { + "partial input (!EOF)", + 100, + "a\u0100\xf1", + false, + "a\u0100", + transform.ErrShortSrc, + }, + { + "invalid input (EOF)", + 100, + "a\u0100\xf1", + true, + "a\u0100", + encoding.ErrInvalidUTF8, + }, + { + "invalid input (!EOF)", + 100, + "a\u0100\x80", + false, + "a\u0100", + encoding.ErrInvalidUTF8, + }, + { + "invalid input (above U+10FFFF)", + 100, + "a\u0100\xf7\xbf\xbf\xbf", + false, + "a\u0100", + encoding.ErrInvalidUTF8, + }, + { + "invalid input (surrogate half)", + 100, + "a\u0100\xed\xa0\x80", + false, + "a\u0100", + encoding.ErrInvalidUTF8, + }, + } + for _, tc := range testCases { + dst := make([]byte, tc.dstSize) + nDst, nSrc, err := encoding.UTF8Validator.Transform(dst, []byte(tc.src), tc.atEOF) + if nDst < 0 || len(dst) < nDst { + t.Errorf("%s: nDst=%d out of range", tc.desc, nDst) + continue + } + got := string(dst[:nDst]) + if got != tc.want || nSrc != len(tc.want) || err != tc.wantErr { + t.Errorf("%s:\ngot %+q, %d, %v\nwant %+q, %d, %v", + tc.desc, got, nSrc, err, tc.want, len(tc.want), tc.wantErr) + continue + } + } +} + +func TestErrorHandler(t *testing.T) { + testCases := []struct { + desc string + handler func(*encoding.Encoder) *encoding.Encoder + sizeDst int + src, want string + nSrc int + err error + }{ + { + desc: "one rune replacement", + handler: encoding.ReplaceUnsupported, + sizeDst: 100, + src: "\uAC00", + want: "\x1a", + nSrc: 3, + }, + { + desc: "mid-stream rune replacement", + handler: encoding.ReplaceUnsupported, + sizeDst: 100, + src: "a\uAC00bcd\u00e9", + want: "a\x1abcd\xe9", + nSrc: 9, + }, + { + desc: "at end rune replacement", + handler: encoding.ReplaceUnsupported, + sizeDst: 10, + src: "\u00e9\uAC00", + want: "\xe9\x1a", + nSrc: 5, + }, + { + desc: "short buffer replacement", + handler: encoding.ReplaceUnsupported, + sizeDst: 1, + src: "\u00e9\uAC00", + want: "\xe9", + nSrc: 2, + err: transform.ErrShortDst, + }, + { + desc: "one rune html escape", + handler: encoding.HTMLEscapeUnsupported, + sizeDst: 100, + src: "\uAC00", + want: "가", + nSrc: 3, + }, + { + desc: "mid-stream html escape", + handler: encoding.HTMLEscapeUnsupported, + sizeDst: 100, + src: "\u00e9\uAC00dcba", + want: "\xe9가dcba", + nSrc: 9, + }, + { + desc: "short buffer html escape", + handler: encoding.HTMLEscapeUnsupported, + sizeDst: 9, + src: "ab\uAC01", + want: "ab", + nSrc: 2, + err: transform.ErrShortDst, + }, + } + for i, tc := range testCases { + tr := tc.handler(charmap.Windows1250.NewEncoder()) + b := make([]byte, tc.sizeDst) + nDst, nSrc, err := tr.Transform(b, []byte(tc.src), true) + if err != tc.err { + t.Errorf("%d:%s: error was %v; want %v", i, tc.desc, err, tc.err) + } + if got := string(b[:nDst]); got != tc.want { + t.Errorf("%d:%s: result was %q: want %q", i, tc.desc, got, tc.want) + } + if nSrc != tc.nSrc { + t.Errorf("%d:%s: nSrc was %d; want %d", i, tc.desc, nSrc, tc.nSrc) + } + + } +} diff --git a/vendor/golang.org/x/text/encoding/example_test.go b/vendor/golang.org/x/text/encoding/example_test.go new file mode 100644 index 0000000..4f92353 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/example_test.go @@ -0,0 +1,42 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package encoding_test + +import ( + "fmt" + "io" + "os" + "strings" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/unicode" + "golang.org/x/text/transform" +) + +func ExampleDecodeWindows1252() { + sr := strings.NewReader("Gar\xe7on !") + tr := charmap.Windows1252.NewDecoder().Reader(sr) + io.Copy(os.Stdout, tr) + // Output: Garçon ! +} + +func ExampleUTF8Validator() { + for i := 0; i < 2; i++ { + var transformer transform.Transformer + transformer = unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM).NewEncoder() + if i == 1 { + transformer = transform.Chain(encoding.UTF8Validator, transformer) + } + dst := make([]byte, 256) + src := []byte("abc\xffxyz") // src is invalid UTF-8. + nDst, nSrc, err := transformer.Transform(dst, src, true) + fmt.Printf("i=%d: produced %q, consumed %q, error %v\n", + i, dst[:nDst], src[:nSrc], err) + } + // Output: + // i=0: produced "\x00a\x00b\x00c\xff\xfd\x00x\x00y\x00z", consumed "abc\xffxyz", error <nil> + // i=1: produced "\x00a\x00b\x00c", consumed "abc", error encoding: invalid UTF-8 +} diff --git a/vendor/golang.org/x/text/encoding/htmlindex/gen.go b/vendor/golang.org/x/text/encoding/htmlindex/gen.go new file mode 100644 index 0000000..80a52f0 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/htmlindex/gen.go @@ -0,0 +1,170 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "log" + "strings" + + "golang.org/x/text/internal/gen" +) + +type group struct { + Encodings []struct { + Labels []string + Name string + } +} + +func main() { + gen.Init() + + r := gen.Open("https://encoding.spec.whatwg.org", "whatwg", "encodings.json") + var groups []group + if err := json.NewDecoder(r).Decode(&groups); err != nil { + log.Fatalf("Error reading encodings.json: %v", err) + } + + w := &bytes.Buffer{} + fmt.Fprintln(w, "type htmlEncoding byte") + fmt.Fprintln(w, "const (") + for i, g := range groups { + for _, e := range g.Encodings { + key := strings.ToLower(e.Name) + name := consts[key] + if name == "" { + log.Fatalf("No const defined for %s.", key) + } + if i == 0 { + fmt.Fprintf(w, "%s htmlEncoding = iota\n", name) + } else { + fmt.Fprintf(w, "%s\n", name) + } + } + } + fmt.Fprintln(w, "numEncodings") + fmt.Fprint(w, ")\n\n") + + fmt.Fprintln(w, "var canonical = [numEncodings]string{") + for _, g := range groups { + for _, e := range g.Encodings { + fmt.Fprintf(w, "%q,\n", strings.ToLower(e.Name)) + } + } + fmt.Fprint(w, "}\n\n") + + fmt.Fprintln(w, "var nameMap = map[string]htmlEncoding{") + for _, g := range groups { + for _, e := range g.Encodings { + for _, l := range e.Labels { + key := strings.ToLower(e.Name) + name := consts[key] + fmt.Fprintf(w, "%q: %s,\n", l, name) + } + } + } + fmt.Fprint(w, "}\n\n") + + var tags []string + fmt.Fprintln(w, "var localeMap = []htmlEncoding{") + for _, loc := range locales { + tags = append(tags, loc.tag) + fmt.Fprintf(w, "%s, // %s \n", consts[loc.name], loc.tag) + } + fmt.Fprint(w, "}\n\n") + + fmt.Fprintf(w, "const locales = %q\n", strings.Join(tags, " ")) + + gen.WriteGoFile("tables.go", "htmlindex", w.Bytes()) +} + +// consts maps canonical encoding name to internal constant. +var consts = map[string]string{ + "utf-8": "utf8", + "ibm866": "ibm866", + "iso-8859-2": "iso8859_2", + "iso-8859-3": "iso8859_3", + "iso-8859-4": "iso8859_4", + "iso-8859-5": "iso8859_5", + "iso-8859-6": "iso8859_6", + "iso-8859-7": "iso8859_7", + "iso-8859-8": "iso8859_8", + "iso-8859-8-i": "iso8859_8I", + "iso-8859-10": "iso8859_10", + "iso-8859-13": "iso8859_13", + "iso-8859-14": "iso8859_14", + "iso-8859-15": "iso8859_15", + "iso-8859-16": "iso8859_16", + "koi8-r": "koi8r", + "koi8-u": "koi8u", + "macintosh": "macintosh", + "windows-874": "windows874", + "windows-1250": "windows1250", + "windows-1251": "windows1251", + "windows-1252": "windows1252", + "windows-1253": "windows1253", + "windows-1254": "windows1254", + "windows-1255": "windows1255", + "windows-1256": "windows1256", + "windows-1257": "windows1257", + "windows-1258": "windows1258", + "x-mac-cyrillic": "macintoshCyrillic", + "gbk": "gbk", + "gb18030": "gb18030", + // "hz-gb-2312": "hzgb2312", // Was removed from WhatWG + "big5": "big5", + "euc-jp": "eucjp", + "iso-2022-jp": "iso2022jp", + "shift_jis": "shiftJIS", + "euc-kr": "euckr", + "replacement": "replacement", + "utf-16be": "utf16be", + "utf-16le": "utf16le", + "x-user-defined": "xUserDefined", +} + +// locales is taken from +// https://html.spec.whatwg.org/multipage/syntax.html#encoding-sniffing-algorithm. +var locales = []struct{ tag, name string }{ + {"und", "windows-1252"}, // The default value. + {"ar", "windows-1256"}, + {"ba", "windows-1251"}, + {"be", "windows-1251"}, + {"bg", "windows-1251"}, + {"cs", "windows-1250"}, + {"el", "iso-8859-7"}, + {"et", "windows-1257"}, + {"fa", "windows-1256"}, + {"he", "windows-1255"}, + {"hr", "windows-1250"}, + {"hu", "iso-8859-2"}, + {"ja", "shift_jis"}, + {"kk", "windows-1251"}, + {"ko", "euc-kr"}, + {"ku", "windows-1254"}, + {"ky", "windows-1251"}, + {"lt", "windows-1257"}, + {"lv", "windows-1257"}, + {"mk", "windows-1251"}, + {"pl", "iso-8859-2"}, + {"ru", "windows-1251"}, + {"sah", "windows-1251"}, + {"sk", "windows-1250"}, + {"sl", "iso-8859-2"}, + {"sr", "windows-1251"}, + {"tg", "windows-1251"}, + {"th", "windows-874"}, + {"tr", "windows-1254"}, + {"tt", "windows-1251"}, + {"uk", "windows-1251"}, + {"vi", "windows-1258"}, + {"zh-hans", "gb18030"}, + {"zh-hant", "big5"}, +} diff --git a/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go new file mode 100644 index 0000000..70f2ac4 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go @@ -0,0 +1,86 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package htmlindex maps character set encoding names to Encodings as +// recommended by the W3C for use in HTML 5. See http://www.w3.org/TR/encoding. +package htmlindex + +// TODO: perhaps have a "bare" version of the index (used by this package) that +// is not pre-loaded with all encodings. Global variables in encodings prevent +// the linker from being able to purge unneeded tables. This means that +// referencing all encodings, as this package does for the default index, links +// in all encodings unconditionally. +// +// This issue can be solved by either solving the linking issue (see +// https://github.com/golang/go/issues/6330) or refactoring the encoding tables +// (e.g. moving the tables to internal packages that do not use global +// variables). + +// TODO: allow canonicalizing names + +import ( + "errors" + "strings" + "sync" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/language" +) + +var ( + errInvalidName = errors.New("htmlindex: invalid encoding name") + errUnknown = errors.New("htmlindex: unknown Encoding") + errUnsupported = errors.New("htmlindex: this encoding is not supported") +) + +var ( + matcherOnce sync.Once + matcher language.Matcher +) + +// LanguageDefault returns the canonical name of the default encoding for a +// given language. +func LanguageDefault(tag language.Tag) string { + matcherOnce.Do(func() { + tags := []language.Tag{} + for _, t := range strings.Split(locales, " ") { + tags = append(tags, language.MustParse(t)) + } + matcher = language.NewMatcher(tags) + }) + _, i, _ := matcher.Match(tag) + return canonical[localeMap[i]] // Default is Windows-1252. +} + +// Get returns an Encoding for one of the names listed in +// http://www.w3.org/TR/encoding using the Default Index. Matching is case- +// insensitive. +func Get(name string) (encoding.Encoding, error) { + x, ok := nameMap[strings.ToLower(strings.TrimSpace(name))] + if !ok { + return nil, errInvalidName + } + return encodings[x], nil +} + +// Name reports the canonical name of the given Encoding. It will return +// an error if e is not associated with a supported encoding scheme. +func Name(e encoding.Encoding) (string, error) { + id, ok := e.(identifier.Interface) + if !ok { + return "", errUnknown + } + mib, _ := id.ID() + if mib == 0 { + return "", errUnknown + } + v, ok := mibMap[mib] + if !ok { + return "", errUnsupported + } + return canonical[v], nil +} diff --git a/vendor/golang.org/x/text/encoding/htmlindex/htmlindex_test.go b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex_test.go new file mode 100644 index 0000000..3fdab0f --- /dev/null +++ b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex_test.go @@ -0,0 +1,144 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package htmlindex + +import ( + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/encoding/unicode" + "golang.org/x/text/language" +) + +func TestGet(t *testing.T) { + for i, tc := range []struct { + name string + canonical string + err error + }{ + {"utf-8", "utf-8", nil}, + {" utf-8 ", "utf-8", nil}, + {" l5 ", "windows-1254", nil}, + {"latin5 ", "windows-1254", nil}, + {"latin 5", "", errInvalidName}, + {"latin-5", "", errInvalidName}, + } { + enc, err := Get(tc.name) + if err != tc.err { + t.Errorf("%d: error was %v; want %v", i, err, tc.err) + } + if err != nil { + continue + } + if got, err := Name(enc); got != tc.canonical { + t.Errorf("%d: Name(Get(%q)) = %q; want %q (%v)", i, tc.name, got, tc.canonical, err) + } + } +} + +func TestTables(t *testing.T) { + for name, index := range nameMap { + got, err := Get(name) + if err != nil { + t.Errorf("%s:err: expected non-nil error", name) + } + if want := encodings[index]; got != want { + t.Errorf("%s:encoding: got %v; want %v", name, got, want) + } + mib, _ := got.(identifier.Interface).ID() + if mibMap[mib] != index { + t.Errorf("%s:mibMab: got %d; want %d", name, mibMap[mib], index) + } + } +} + +func TestName(t *testing.T) { + for i, tc := range []struct { + desc string + enc encoding.Encoding + name string + err error + }{{ + "defined encoding", + charmap.ISO8859_2, + "iso-8859-2", + nil, + }, { + "defined Unicode encoding", + unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), + "utf-16be", + nil, + }, { + "undefined Unicode encoding in HTML standard", + unicode.UTF16(unicode.BigEndian, unicode.UseBOM), + "", + errUnsupported, + }, { + "undefined other encoding in HTML standard", + charmap.CodePage437, + "", + errUnsupported, + }, { + "unknown encoding", + encoding.Nop, + "", + errUnknown, + }} { + name, err := Name(tc.enc) + if name != tc.name || err != tc.err { + t.Errorf("%d:%s: got %q, %v; want %q, %v", i, tc.desc, name, err, tc.name, tc.err) + } + } +} + +func TestLanguageDefault(t *testing.T) { + for _, tc := range []struct{ tag, want string }{ + {"und", "windows-1252"}, // The default value. + {"ar", "windows-1256"}, + {"ba", "windows-1251"}, + {"be", "windows-1251"}, + {"bg", "windows-1251"}, + {"cs", "windows-1250"}, + {"el", "iso-8859-7"}, + {"et", "windows-1257"}, + {"fa", "windows-1256"}, + {"he", "windows-1255"}, + {"hr", "windows-1250"}, + {"hu", "iso-8859-2"}, + {"ja", "shift_jis"}, + {"kk", "windows-1251"}, + {"ko", "euc-kr"}, + {"ku", "windows-1254"}, + {"ky", "windows-1251"}, + {"lt", "windows-1257"}, + {"lv", "windows-1257"}, + {"mk", "windows-1251"}, + {"pl", "iso-8859-2"}, + {"ru", "windows-1251"}, + {"sah", "windows-1251"}, + {"sk", "windows-1250"}, + {"sl", "iso-8859-2"}, + {"sr", "windows-1251"}, + {"tg", "windows-1251"}, + {"th", "windows-874"}, + {"tr", "windows-1254"}, + {"tt", "windows-1251"}, + {"uk", "windows-1251"}, + {"vi", "windows-1258"}, + {"zh-hans", "gb18030"}, + {"zh-hant", "big5"}, + // Variants and close approximates of the above. + {"ar_EG", "windows-1256"}, + {"bs", "windows-1250"}, // Bosnian Latin maps to Croatian. + // Use default fallback in case of miss. + {"nl", "windows-1252"}, + } { + if got := LanguageDefault(language.MustParse(tc.tag)); got != tc.want { + t.Errorf("LanguageDefault(%s) = %s; want %s", tc.tag, got, tc.want) + } + } +} diff --git a/vendor/golang.org/x/text/encoding/htmlindex/map.go b/vendor/golang.org/x/text/encoding/htmlindex/map.go new file mode 100644 index 0000000..c614390 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/htmlindex/map.go @@ -0,0 +1,105 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package htmlindex + +import ( + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/encoding/japanese" + "golang.org/x/text/encoding/korean" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/encoding/traditionalchinese" + "golang.org/x/text/encoding/unicode" +) + +// mibMap maps a MIB identifier to an htmlEncoding index. +var mibMap = map[identifier.MIB]htmlEncoding{ + identifier.UTF8: utf8, + identifier.UTF16BE: utf16be, + identifier.UTF16LE: utf16le, + identifier.IBM866: ibm866, + identifier.ISOLatin2: iso8859_2, + identifier.ISOLatin3: iso8859_3, + identifier.ISOLatin4: iso8859_4, + identifier.ISOLatinCyrillic: iso8859_5, + identifier.ISOLatinArabic: iso8859_6, + identifier.ISOLatinGreek: iso8859_7, + identifier.ISOLatinHebrew: iso8859_8, + identifier.ISO88598I: iso8859_8I, + identifier.ISOLatin6: iso8859_10, + identifier.ISO885913: iso8859_13, + identifier.ISO885914: iso8859_14, + identifier.ISO885915: iso8859_15, + identifier.ISO885916: iso8859_16, + identifier.KOI8R: koi8r, + identifier.KOI8U: koi8u, + identifier.Macintosh: macintosh, + identifier.MacintoshCyrillic: macintoshCyrillic, + identifier.Windows874: windows874, + identifier.Windows1250: windows1250, + identifier.Windows1251: windows1251, + identifier.Windows1252: windows1252, + identifier.Windows1253: windows1253, + identifier.Windows1254: windows1254, + identifier.Windows1255: windows1255, + identifier.Windows1256: windows1256, + identifier.Windows1257: windows1257, + identifier.Windows1258: windows1258, + identifier.XUserDefined: xUserDefined, + identifier.GBK: gbk, + identifier.GB18030: gb18030, + identifier.Big5: big5, + identifier.EUCPkdFmtJapanese: eucjp, + identifier.ISO2022JP: iso2022jp, + identifier.ShiftJIS: shiftJIS, + identifier.EUCKR: euckr, + identifier.Replacement: replacement, +} + +// encodings maps the internal htmlEncoding to an Encoding. +// TODO: consider using a reusable index in encoding/internal. +var encodings = [numEncodings]encoding.Encoding{ + utf8: unicode.UTF8, + ibm866: charmap.CodePage866, + iso8859_2: charmap.ISO8859_2, + iso8859_3: charmap.ISO8859_3, + iso8859_4: charmap.ISO8859_4, + iso8859_5: charmap.ISO8859_5, + iso8859_6: charmap.ISO8859_6, + iso8859_7: charmap.ISO8859_7, + iso8859_8: charmap.ISO8859_8, + iso8859_8I: charmap.ISO8859_8I, + iso8859_10: charmap.ISO8859_10, + iso8859_13: charmap.ISO8859_13, + iso8859_14: charmap.ISO8859_14, + iso8859_15: charmap.ISO8859_15, + iso8859_16: charmap.ISO8859_16, + koi8r: charmap.KOI8R, + koi8u: charmap.KOI8U, + macintosh: charmap.Macintosh, + windows874: charmap.Windows874, + windows1250: charmap.Windows1250, + windows1251: charmap.Windows1251, + windows1252: charmap.Windows1252, + windows1253: charmap.Windows1253, + windows1254: charmap.Windows1254, + windows1255: charmap.Windows1255, + windows1256: charmap.Windows1256, + windows1257: charmap.Windows1257, + windows1258: charmap.Windows1258, + macintoshCyrillic: charmap.MacintoshCyrillic, + gbk: simplifiedchinese.GBK, + gb18030: simplifiedchinese.GB18030, + big5: traditionalchinese.Big5, + eucjp: japanese.EUCJP, + iso2022jp: japanese.ISO2022JP, + shiftJIS: japanese.ShiftJIS, + euckr: korean.EUCKR, + replacement: encoding.Replacement, + utf16be: unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), + utf16le: unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), + xUserDefined: charmap.XUserDefined, +} diff --git a/vendor/golang.org/x/text/encoding/htmlindex/tables.go b/vendor/golang.org/x/text/encoding/htmlindex/tables.go new file mode 100644 index 0000000..cbf4ba9 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/htmlindex/tables.go @@ -0,0 +1,352 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package htmlindex + +type htmlEncoding byte + +const ( + utf8 htmlEncoding = iota + ibm866 + iso8859_2 + iso8859_3 + iso8859_4 + iso8859_5 + iso8859_6 + iso8859_7 + iso8859_8 + iso8859_8I + iso8859_10 + iso8859_13 + iso8859_14 + iso8859_15 + iso8859_16 + koi8r + koi8u + macintosh + windows874 + windows1250 + windows1251 + windows1252 + windows1253 + windows1254 + windows1255 + windows1256 + windows1257 + windows1258 + macintoshCyrillic + gbk + gb18030 + big5 + eucjp + iso2022jp + shiftJIS + euckr + replacement + utf16be + utf16le + xUserDefined + numEncodings +) + +var canonical = [numEncodings]string{ + "utf-8", + "ibm866", + "iso-8859-2", + "iso-8859-3", + "iso-8859-4", + "iso-8859-5", + "iso-8859-6", + "iso-8859-7", + "iso-8859-8", + "iso-8859-8-i", + "iso-8859-10", + "iso-8859-13", + "iso-8859-14", + "iso-8859-15", + "iso-8859-16", + "koi8-r", + "koi8-u", + "macintosh", + "windows-874", + "windows-1250", + "windows-1251", + "windows-1252", + "windows-1253", + "windows-1254", + "windows-1255", + "windows-1256", + "windows-1257", + "windows-1258", + "x-mac-cyrillic", + "gbk", + "gb18030", + "big5", + "euc-jp", + "iso-2022-jp", + "shift_jis", + "euc-kr", + "replacement", + "utf-16be", + "utf-16le", + "x-user-defined", +} + +var nameMap = map[string]htmlEncoding{ + "unicode-1-1-utf-8": utf8, + "utf-8": utf8, + "utf8": utf8, + "866": ibm866, + "cp866": ibm866, + "csibm866": ibm866, + "ibm866": ibm866, + "csisolatin2": iso8859_2, + "iso-8859-2": iso8859_2, + "iso-ir-101": iso8859_2, + "iso8859-2": iso8859_2, + "iso88592": iso8859_2, + "iso_8859-2": iso8859_2, + "iso_8859-2:1987": iso8859_2, + "l2": iso8859_2, + "latin2": iso8859_2, + "csisolatin3": iso8859_3, + "iso-8859-3": iso8859_3, + "iso-ir-109": iso8859_3, + "iso8859-3": iso8859_3, + "iso88593": iso8859_3, + "iso_8859-3": iso8859_3, + "iso_8859-3:1988": iso8859_3, + "l3": iso8859_3, + "latin3": iso8859_3, + "csisolatin4": iso8859_4, + "iso-8859-4": iso8859_4, + "iso-ir-110": iso8859_4, + "iso8859-4": iso8859_4, + "iso88594": iso8859_4, + "iso_8859-4": iso8859_4, + "iso_8859-4:1988": iso8859_4, + "l4": iso8859_4, + "latin4": iso8859_4, + "csisolatincyrillic": iso8859_5, + "cyrillic": iso8859_5, + "iso-8859-5": iso8859_5, + "iso-ir-144": iso8859_5, + "iso8859-5": iso8859_5, + "iso88595": iso8859_5, + "iso_8859-5": iso8859_5, + "iso_8859-5:1988": iso8859_5, + "arabic": iso8859_6, + "asmo-708": iso8859_6, + "csiso88596e": iso8859_6, + "csiso88596i": iso8859_6, + "csisolatinarabic": iso8859_6, + "ecma-114": iso8859_6, + "iso-8859-6": iso8859_6, + "iso-8859-6-e": iso8859_6, + "iso-8859-6-i": iso8859_6, + "iso-ir-127": iso8859_6, + "iso8859-6": iso8859_6, + "iso88596": iso8859_6, + "iso_8859-6": iso8859_6, + "iso_8859-6:1987": iso8859_6, + "csisolatingreek": iso8859_7, + "ecma-118": iso8859_7, + "elot_928": iso8859_7, + "greek": iso8859_7, + "greek8": iso8859_7, + "iso-8859-7": iso8859_7, + "iso-ir-126": iso8859_7, + "iso8859-7": iso8859_7, + "iso88597": iso8859_7, + "iso_8859-7": iso8859_7, + "iso_8859-7:1987": iso8859_7, + "sun_eu_greek": iso8859_7, + "csiso88598e": iso8859_8, + "csisolatinhebrew": iso8859_8, + "hebrew": iso8859_8, + "iso-8859-8": iso8859_8, + "iso-8859-8-e": iso8859_8, + "iso-ir-138": iso8859_8, + "iso8859-8": iso8859_8, + "iso88598": iso8859_8, + "iso_8859-8": iso8859_8, + "iso_8859-8:1988": iso8859_8, + "visual": iso8859_8, + "csiso88598i": iso8859_8I, + "iso-8859-8-i": iso8859_8I, + "logical": iso8859_8I, + "csisolatin6": iso8859_10, + "iso-8859-10": iso8859_10, + "iso-ir-157": iso8859_10, + "iso8859-10": iso8859_10, + "iso885910": iso8859_10, + "l6": iso8859_10, + "latin6": iso8859_10, + "iso-8859-13": iso8859_13, + "iso8859-13": iso8859_13, + "iso885913": iso8859_13, + "iso-8859-14": iso8859_14, + "iso8859-14": iso8859_14, + "iso885914": iso8859_14, + "csisolatin9": iso8859_15, + "iso-8859-15": iso8859_15, + "iso8859-15": iso8859_15, + "iso885915": iso8859_15, + "iso_8859-15": iso8859_15, + "l9": iso8859_15, + "iso-8859-16": iso8859_16, + "cskoi8r": koi8r, + "koi": koi8r, + "koi8": koi8r, + "koi8-r": koi8r, + "koi8_r": koi8r, + "koi8-ru": koi8u, + "koi8-u": koi8u, + "csmacintosh": macintosh, + "mac": macintosh, + "macintosh": macintosh, + "x-mac-roman": macintosh, + "dos-874": windows874, + "iso-8859-11": windows874, + "iso8859-11": windows874, + "iso885911": windows874, + "tis-620": windows874, + "windows-874": windows874, + "cp1250": windows1250, + "windows-1250": windows1250, + "x-cp1250": windows1250, + "cp1251": windows1251, + "windows-1251": windows1251, + "x-cp1251": windows1251, + "ansi_x3.4-1968": windows1252, + "ascii": windows1252, + "cp1252": windows1252, + "cp819": windows1252, + "csisolatin1": windows1252, + "ibm819": windows1252, + "iso-8859-1": windows1252, + "iso-ir-100": windows1252, + "iso8859-1": windows1252, + "iso88591": windows1252, + "iso_8859-1": windows1252, + "iso_8859-1:1987": windows1252, + "l1": windows1252, + "latin1": windows1252, + "us-ascii": windows1252, + "windows-1252": windows1252, + "x-cp1252": windows1252, + "cp1253": windows1253, + "windows-1253": windows1253, + "x-cp1253": windows1253, + "cp1254": windows1254, + "csisolatin5": windows1254, + "iso-8859-9": windows1254, + "iso-ir-148": windows1254, + "iso8859-9": windows1254, + "iso88599": windows1254, + "iso_8859-9": windows1254, + "iso_8859-9:1989": windows1254, + "l5": windows1254, + "latin5": windows1254, + "windows-1254": windows1254, + "x-cp1254": windows1254, + "cp1255": windows1255, + "windows-1255": windows1255, + "x-cp1255": windows1255, + "cp1256": windows1256, + "windows-1256": windows1256, + "x-cp1256": windows1256, + "cp1257": windows1257, + "windows-1257": windows1257, + "x-cp1257": windows1257, + "cp1258": windows1258, + "windows-1258": windows1258, + "x-cp1258": windows1258, + "x-mac-cyrillic": macintoshCyrillic, + "x-mac-ukrainian": macintoshCyrillic, + "chinese": gbk, + "csgb2312": gbk, + "csiso58gb231280": gbk, + "gb2312": gbk, + "gb_2312": gbk, + "gb_2312-80": gbk, + "gbk": gbk, + "iso-ir-58": gbk, + "x-gbk": gbk, + "gb18030": gb18030, + "big5": big5, + "big5-hkscs": big5, + "cn-big5": big5, + "csbig5": big5, + "x-x-big5": big5, + "cseucpkdfmtjapanese": eucjp, + "euc-jp": eucjp, + "x-euc-jp": eucjp, + "csiso2022jp": iso2022jp, + "iso-2022-jp": iso2022jp, + "csshiftjis": shiftJIS, + "ms932": shiftJIS, + "ms_kanji": shiftJIS, + "shift-jis": shiftJIS, + "shift_jis": shiftJIS, + "sjis": shiftJIS, + "windows-31j": shiftJIS, + "x-sjis": shiftJIS, + "cseuckr": euckr, + "csksc56011987": euckr, + "euc-kr": euckr, + "iso-ir-149": euckr, + "korean": euckr, + "ks_c_5601-1987": euckr, + "ks_c_5601-1989": euckr, + "ksc5601": euckr, + "ksc_5601": euckr, + "windows-949": euckr, + "csiso2022kr": replacement, + "hz-gb-2312": replacement, + "iso-2022-cn": replacement, + "iso-2022-cn-ext": replacement, + "iso-2022-kr": replacement, + "utf-16be": utf16be, + "utf-16": utf16le, + "utf-16le": utf16le, + "x-user-defined": xUserDefined, +} + +var localeMap = []htmlEncoding{ + windows1252, // und + windows1256, // ar + windows1251, // ba + windows1251, // be + windows1251, // bg + windows1250, // cs + iso8859_7, // el + windows1257, // et + windows1256, // fa + windows1255, // he + windows1250, // hr + iso8859_2, // hu + shiftJIS, // ja + windows1251, // kk + euckr, // ko + windows1254, // ku + windows1251, // ky + windows1257, // lt + windows1257, // lv + windows1251, // mk + iso8859_2, // pl + windows1251, // ru + windows1251, // sah + windows1250, // sk + iso8859_2, // sl + windows1251, // sr + windows1251, // tg + windows874, // th + windows1254, // tr + windows1251, // tt + windows1251, // uk + windows1258, // vi + gb18030, // zh-hans + big5, // zh-hant +} + +const locales = "und ar ba be bg cs el et fa he hr hu ja kk ko ku ky lt lv mk pl ru sah sk sl sr tg th tr tt uk vi zh-hans zh-hant" diff --git a/vendor/golang.org/x/text/encoding/ianaindex/example_test.go b/vendor/golang.org/x/text/encoding/ianaindex/example_test.go new file mode 100644 index 0000000..e2a3a7e --- /dev/null +++ b/vendor/golang.org/x/text/encoding/ianaindex/example_test.go @@ -0,0 +1,27 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ianaindex_test + +import ( + "fmt" + + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/ianaindex" +) + +func ExampleIndex() { + fmt.Println(ianaindex.MIME.Name(charmap.ISO8859_7)) + fmt.Println(ianaindex.IANA.Name(charmap.ISO8859_7)) + fmt.Println(ianaindex.MIB.Name(charmap.ISO8859_7)) + + e, _ := ianaindex.IANA.Encoding("cp437") + fmt.Println(ianaindex.IANA.Name(e)) + + // Output: + // ISO-8859-7 <nil> + // ISO_8859-7:1987 <nil> + // ISOLatinGreek <nil> + // IBM437 <nil> +} diff --git a/vendor/golang.org/x/text/encoding/ianaindex/gen.go b/vendor/golang.org/x/text/encoding/ianaindex/gen.go new file mode 100644 index 0000000..1b61b82 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/ianaindex/gen.go @@ -0,0 +1,192 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "encoding/xml" + "fmt" + "io" + "log" + "sort" + "strconv" + "strings" + + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/internal/gen" +) + +type registry struct { + XMLName xml.Name `xml:"registry"` + Updated string `xml:"updated"` + Registry []struct { + ID string `xml:"id,attr"` + Record []struct { + Name string `xml:"name"` + Xref []struct { + Type string `xml:"type,attr"` + Data string `xml:"data,attr"` + } `xml:"xref"` + Desc struct { + Data string `xml:",innerxml"` + } `xml:"description,"` + MIB string `xml:"value"` + Alias []string `xml:"alias"` + MIME string `xml:"preferred_alias"` + } `xml:"record"` + } `xml:"registry"` +} + +func main() { + r := gen.OpenIANAFile("assignments/character-sets/character-sets.xml") + reg := ®istry{} + if err := xml.NewDecoder(r).Decode(®); err != nil && err != io.EOF { + log.Fatalf("Error decoding charset registry: %v", err) + } + if len(reg.Registry) == 0 || reg.Registry[0].ID != "character-sets-1" { + log.Fatalf("Unexpected ID %s", reg.Registry[0].ID) + } + + x := &indexInfo{} + + for _, rec := range reg.Registry[0].Record { + mib := identifier.MIB(parseInt(rec.MIB)) + x.addEntry(mib, rec.Name) + for _, a := range rec.Alias { + a = strings.Split(a, " ")[0] // strip comments. + x.addAlias(a, mib) + // MIB name aliases are prefixed with a "cs" (character set) in the + // registry to identify them as display names and to ensure that + // the name starts with a lowercase letter in case it is used as + // an identifier. We remove it to be left with a nice clean name. + if strings.HasPrefix(a, "cs") { + x.setName(2, a[2:]) + } + } + if rec.MIME != "" { + x.addAlias(rec.MIME, mib) + x.setName(1, rec.MIME) + } + } + + w := gen.NewCodeWriter() + + fmt.Fprintln(w, `import "golang.org/x/text/encoding/internal/identifier"`) + + writeIndex(w, x) + + w.WriteGoFile("tables.go", "ianaindex") +} + +type alias struct { + name string + mib identifier.MIB +} + +type indexInfo struct { + // compacted index from code to MIB + codeToMIB []identifier.MIB + alias []alias + names [][3]string +} + +func (ii *indexInfo) Len() int { + return len(ii.codeToMIB) +} + +func (ii *indexInfo) Less(a, b int) bool { + return ii.codeToMIB[a] < ii.codeToMIB[b] +} + +func (ii *indexInfo) Swap(a, b int) { + ii.codeToMIB[a], ii.codeToMIB[b] = ii.codeToMIB[b], ii.codeToMIB[a] + // Co-sort the names. + ii.names[a], ii.names[b] = ii.names[b], ii.names[a] +} + +func (ii *indexInfo) setName(i int, name string) { + ii.names[len(ii.names)-1][i] = name +} + +func (ii *indexInfo) addEntry(mib identifier.MIB, name string) { + ii.names = append(ii.names, [3]string{name, name, name}) + ii.addAlias(name, mib) + ii.codeToMIB = append(ii.codeToMIB, mib) +} + +func (ii *indexInfo) addAlias(name string, mib identifier.MIB) { + // Don't add duplicates for the same mib. Adding duplicate aliases for + // different MIBs will cause the compiler to barf on an invalid map: great!. + for i := len(ii.alias) - 1; i >= 0 && ii.alias[i].mib == mib; i-- { + if ii.alias[i].name == name { + return + } + } + ii.alias = append(ii.alias, alias{name, mib}) + lower := strings.ToLower(name) + if lower != name { + ii.addAlias(lower, mib) + } +} + +const maxMIMENameLen = '0' - 1 // officially 40, but we leave some buffer. + +func writeIndex(w *gen.CodeWriter, x *indexInfo) { + sort.Stable(x) + + // Write constants. + fmt.Fprintln(w, "const (") + for i, m := range x.codeToMIB { + if i == 0 { + fmt.Fprintf(w, "enc%d = iota\n", m) + } else { + fmt.Fprintf(w, "enc%d\n", m) + } + } + fmt.Fprintln(w, "numIANA") + fmt.Fprintln(w, ")") + + w.WriteVar("ianaToMIB", x.codeToMIB) + + var ianaNames, mibNames []string + for _, names := range x.names { + n := names[0] + if names[0] != names[1] { + // MIME names are mostly identical to IANA names. We share the + // tables by setting the first byte of the string to an index into + // the string itself (< maxMIMENameLen) to the IANA name. The MIME + // name immediately follows the index. + x := len(names[1]) + 1 + if x > maxMIMENameLen { + log.Fatalf("MIME name length (%d) > %d", x, maxMIMENameLen) + } + n = string(x) + names[1] + names[0] + } + ianaNames = append(ianaNames, n) + mibNames = append(mibNames, names[2]) + } + + w.WriteVar("ianaNames", ianaNames) + w.WriteVar("mibNames", mibNames) + + w.WriteComment(` + TODO: Instead of using a map, we could use binary search strings doing + on-the fly lower-casing per character. This allows to always avoid + allocation and will be considerably more compact.`) + fmt.Fprintln(w, "var ianaAliases = map[string]int{") + for _, a := range x.alias { + fmt.Fprintf(w, "%q: enc%d,\n", a.name, a.mib) + } + fmt.Fprintln(w, "}") +} + +func parseInt(s string) int { + x, err := strconv.ParseInt(s, 10, 64) + if err != nil { + log.Fatalf("Could not parse integer: %v", err) + } + return int(x) +} diff --git a/vendor/golang.org/x/text/encoding/ianaindex/ianaindex.go b/vendor/golang.org/x/text/encoding/ianaindex/ianaindex.go new file mode 100644 index 0000000..49b3070 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/ianaindex/ianaindex.go @@ -0,0 +1,209 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package ianaindex maps names to Encodings as specified by the IANA registry. +// This includes both the MIME and IANA names. +// +// See http://www.iana.org/assignments/character-sets/character-sets.xhtml for +// more details. +package ianaindex + +import ( + "errors" + "sort" + "strings" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/encoding/japanese" + "golang.org/x/text/encoding/korean" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/encoding/traditionalchinese" + "golang.org/x/text/encoding/unicode" +) + +// TODO: remove the "Status... incomplete" in the package doc comment. +// TODO: allow users to specify their own aliases? +// TODO: allow users to specify their own indexes? +// TODO: allow canonicalizing names + +// NOTE: only use these top-level variables if we can get the linker to drop +// the indexes when they are not used. Make them a function or perhaps only +// support MIME otherwise. + +var ( + // MIME is an index to map MIME names. + MIME *Index = mime + + // IANA is an index that supports all names and aliases using IANA names as + // the canonical identifier. + IANA *Index = iana + + // MIB is an index that associates the MIB display name with an Encoding. + MIB *Index = mib + + mime = &Index{mimeName, ianaToMIB, ianaAliases, encodings[:]} + iana = &Index{ianaName, ianaToMIB, ianaAliases, encodings[:]} + mib = &Index{mibName, ianaToMIB, ianaAliases, encodings[:]} +) + +// Index maps names registered by IANA to Encodings. +// Currently different Indexes only differ in the names they return for +// encodings. In the future they may also differ in supported aliases. +type Index struct { + names func(i int) string + toMIB []identifier.MIB // Sorted slice of supported MIBs + alias map[string]int + enc []encoding.Encoding +} + +var ( + errInvalidName = errors.New("ianaindex: invalid encoding name") + errUnknown = errors.New("ianaindex: unknown Encoding") + errUnsupported = errors.New("ianaindex: unsupported Encoding") +) + +// Encoding returns an Encoding for IANA-registered names. Matching is +// case-insensitive. +func (x *Index) Encoding(name string) (encoding.Encoding, error) { + name = strings.TrimSpace(name) + // First try without lowercasing (possibly creating an allocation). + i, ok := x.alias[name] + if !ok { + i, ok = x.alias[strings.ToLower(name)] + if !ok { + return nil, errInvalidName + } + } + return x.enc[i], nil +} + +// Name reports the canonical name of the given Encoding. It will return an +// error if the e is not associated with a known encoding scheme. +func (x *Index) Name(e encoding.Encoding) (string, error) { + id, ok := e.(identifier.Interface) + if !ok { + return "", errUnknown + } + mib, _ := id.ID() + if mib == 0 { + return "", errUnknown + } + v := findMIB(x.toMIB, mib) + if v == -1 { + return "", errUnsupported + } + return x.names(v), nil +} + +// TODO: the coverage of this index is rather spotty. Allowing users to set +// encodings would allow: +// - users to increase coverage +// - allow a partially loaded set of encodings in case the user doesn't need to +// them all. +// - write an OS-specific wrapper for supported encodings and set them. +// The exact definition of Set depends a bit on if and how we want to let users +// write their own Encoding implementations. Also, it is not possible yet to +// only partially load the encodings without doing some refactoring. Until this +// is solved, we might as well not support Set. +// // Set sets the e to be used for the encoding scheme identified by name. Only +// // canonical names may be used. An empty name assigns e to its internally +// // associated encoding scheme. +// func (x *Index) Set(name string, e encoding.Encoding) error { +// panic("TODO: implement") +// } + +func findMIB(x []identifier.MIB, mib identifier.MIB) int { + i := sort.Search(len(x), func(i int) bool { return x[i] >= mib }) + if i < len(x) && x[i] == mib { + return i + } + return -1 +} + +const maxMIMENameLen = '0' - 1 // officially 40, but we leave some buffer. + +func mimeName(x int) string { + n := ianaNames[x] + // See gen.go for a description of the encoding. + if n[0] <= maxMIMENameLen { + return n[1:n[0]] + } + return n +} + +func ianaName(x int) string { + n := ianaNames[x] + // See gen.go for a description of the encoding. + if n[0] <= maxMIMENameLen { + return n[n[0]:] + } + return n +} + +func mibName(x int) string { + return mibNames[x] +} + +var encodings = [numIANA]encoding.Encoding{ + enc106: unicode.UTF8, + enc1015: unicode.UTF16(unicode.BigEndian, unicode.UseBOM), + enc1013: unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), + enc1014: unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), + enc2028: charmap.CodePage037, + enc2011: charmap.CodePage437, + enc2009: charmap.CodePage850, + enc2010: charmap.CodePage852, + enc2046: charmap.CodePage855, + enc2089: charmap.CodePage858, + enc2048: charmap.CodePage860, + enc2013: charmap.CodePage862, + enc2050: charmap.CodePage863, + enc2052: charmap.CodePage865, + enc2086: charmap.CodePage866, + enc2102: charmap.CodePage1047, + enc2091: charmap.CodePage1140, + enc4: charmap.ISO8859_1, + enc5: charmap.ISO8859_2, + enc6: charmap.ISO8859_3, + enc7: charmap.ISO8859_4, + enc8: charmap.ISO8859_5, + enc9: charmap.ISO8859_6, + enc81: charmap.ISO8859_6E, + enc82: charmap.ISO8859_6I, + enc10: charmap.ISO8859_7, + enc11: charmap.ISO8859_8, + enc84: charmap.ISO8859_8E, + enc85: charmap.ISO8859_8I, + enc12: charmap.ISO8859_9, + enc13: charmap.ISO8859_10, + enc109: charmap.ISO8859_13, + enc110: charmap.ISO8859_14, + enc111: charmap.ISO8859_15, + enc112: charmap.ISO8859_16, + enc2084: charmap.KOI8R, + enc2088: charmap.KOI8U, + enc2027: charmap.Macintosh, + enc2109: charmap.Windows874, + enc2250: charmap.Windows1250, + enc2251: charmap.Windows1251, + enc2252: charmap.Windows1252, + enc2253: charmap.Windows1253, + enc2254: charmap.Windows1254, + enc2255: charmap.Windows1255, + enc2256: charmap.Windows1256, + enc2257: charmap.Windows1257, + enc2258: charmap.Windows1258, + enc18: japanese.EUCJP, + enc39: japanese.ISO2022JP, + enc17: japanese.ShiftJIS, + enc38: korean.EUCKR, + enc114: simplifiedchinese.GB18030, + enc113: simplifiedchinese.GBK, + enc2085: simplifiedchinese.HZGB2312, + enc2026: traditionalchinese.Big5, +} diff --git a/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go b/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go new file mode 100644 index 0000000..20a2131 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go @@ -0,0 +1,192 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ianaindex + +import ( + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/encoding/japanese" + "golang.org/x/text/encoding/korean" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/encoding/traditionalchinese" + "golang.org/x/text/encoding/unicode" +) + +var All = [][]encoding.Encoding{ + unicode.All, + charmap.All, + japanese.All, + korean.All, + simplifiedchinese.All, + traditionalchinese.All, +} + +// TestAllIANA tests whether an Encoding supported in x/text is defined by IANA but +// not supported by this package. +func TestAllIANA(t *testing.T) { + for _, ea := range All { + for _, e := range ea { + mib, _ := e.(identifier.Interface).ID() + if x := findMIB(ianaToMIB, mib); x != -1 && encodings[x] == nil { + t.Errorf("supported MIB %v (%v) not in index", mib, e) + } + } + } +} + +// TestNotSupported reports the encodings in IANA, but not by x/text. +func TestNotSupported(t *testing.T) { + mibs := map[identifier.MIB]bool{} + for _, ea := range All { + for _, e := range ea { + mib, _ := e.(identifier.Interface).ID() + mibs[mib] = true + } + } + + // Many encodings in the IANA index will likely not be suppored by the + // Go encodings. That is fine. + // TODO: consider wheter we should add this test. + // for code, mib := range ianaToMIB { + // t.Run(fmt.Sprint("IANA:", mib), func(t *testing.T) { + // if !mibs[mib] { + // t.Skipf("IANA encoding %s (MIB %v) not supported", + // ianaNames[code], mib) + // } + // }) + // } +} + +func TestEncoding(t *testing.T) { + testCases := []struct { + index *Index + name string + canonical string + err error + }{ + {MIME, "utf-8", "UTF-8", nil}, + {MIME, " utf-8 ", "UTF-8", nil}, + {MIME, " l5 ", "ISO-8859-9", nil}, + {MIME, "latin5 ", "ISO-8859-9", nil}, + {MIME, "LATIN5 ", "ISO-8859-9", nil}, + {MIME, "latin 5", "", errInvalidName}, + {MIME, "latin-5", "", errInvalidName}, + + {IANA, "utf-8", "UTF-8", nil}, + {IANA, " utf-8 ", "UTF-8", nil}, + {IANA, " l5 ", "ISO_8859-9:1989", nil}, + {IANA, "latin5 ", "ISO_8859-9:1989", nil}, + {IANA, "LATIN5 ", "ISO_8859-9:1989", nil}, + {IANA, "latin 5", "", errInvalidName}, + {IANA, "latin-5", "", errInvalidName}, + + {MIB, "utf-8", "UTF8", nil}, + {MIB, " utf-8 ", "UTF8", nil}, + {MIB, " l5 ", "ISOLatin5", nil}, + {MIB, "latin5 ", "ISOLatin5", nil}, + {MIB, "LATIN5 ", "ISOLatin5", nil}, + {MIB, "latin 5", "", errInvalidName}, + {MIB, "latin-5", "", errInvalidName}, + } + for i, tc := range testCases { + enc, err := tc.index.Encoding(tc.name) + if err != tc.err { + t.Errorf("%d: error was %v; want %v", i, err, tc.err) + } + if err != nil { + continue + } + if got, err := tc.index.Name(enc); got != tc.canonical { + t.Errorf("%d: Name(Encoding(%q)) = %q; want %q (%v)", i, tc.name, got, tc.canonical, err) + } + } +} + +func TestTables(t *testing.T) { + for i, x := range []*Index{MIME, IANA} { + for name, index := range x.alias { + got, err := x.Encoding(name) + if err != nil { + t.Errorf("%d%s:err: unexpected error %v", i, name, err) + } + if want := x.enc[index]; got != want { + t.Errorf("%d%s:encoding: got %v; want %v", i, name, got, want) + } + if got != nil { + mib, _ := got.(identifier.Interface).ID() + if i := findMIB(x.toMIB, mib); i != index { + t.Errorf("%d%s:mib: got %d; want %d", i, name, i, index) + } + } + } + } +} + +type unsupported struct { + encoding.Encoding +} + +func (unsupported) ID() (identifier.MIB, string) { return 9999, "" } + +func TestName(t *testing.T) { + testCases := []struct { + desc string + enc encoding.Encoding + f func(e encoding.Encoding) (string, error) + name string + err error + }{{ + "defined encoding", + charmap.ISO8859_2, + MIME.Name, + "ISO-8859-2", + nil, + }, { + "defined Unicode encoding", + unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), + IANA.Name, + "UTF-16BE", + nil, + }, { + "another defined Unicode encoding", + unicode.UTF16(unicode.BigEndian, unicode.UseBOM), + MIME.Name, + "UTF-16", + nil, + }, { + "unknown Unicode encoding", + unicode.UTF16(unicode.BigEndian, unicode.ExpectBOM), + MIME.Name, + "", + errUnknown, + }, { + "undefined encoding", + unsupported{}, + MIME.Name, + "", + errUnsupported, + }, { + "undefined other encoding in HTML standard", + charmap.CodePage437, + IANA.Name, + "IBM437", + nil, + }, { + "unknown encoding", + encoding.Nop, + IANA.Name, + "", + errUnknown, + }} + for i, tc := range testCases { + name, err := tc.f(tc.enc) + if name != tc.name || err != tc.err { + t.Errorf("%d:%s: got %q, %v; want %q, %v", i, tc.desc, name, err, tc.name, tc.err) + } + } +} diff --git a/vendor/golang.org/x/text/encoding/ianaindex/tables.go b/vendor/golang.org/x/text/encoding/ianaindex/tables.go new file mode 100644 index 0000000..98a1d77 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/ianaindex/tables.go @@ -0,0 +1,2348 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package ianaindex + +import "golang.org/x/text/encoding/internal/identifier" + +const ( + enc3 = iota + enc4 + enc5 + enc6 + enc7 + enc8 + enc9 + enc10 + enc11 + enc12 + enc13 + enc14 + enc15 + enc16 + enc17 + enc18 + enc19 + enc20 + enc21 + enc22 + enc23 + enc24 + enc25 + enc26 + enc27 + enc28 + enc29 + enc30 + enc31 + enc32 + enc33 + enc34 + enc35 + enc36 + enc37 + enc38 + enc39 + enc40 + enc41 + enc42 + enc43 + enc44 + enc45 + enc46 + enc47 + enc48 + enc49 + enc50 + enc51 + enc52 + enc53 + enc54 + enc55 + enc56 + enc57 + enc58 + enc59 + enc60 + enc61 + enc62 + enc63 + enc64 + enc65 + enc66 + enc67 + enc68 + enc69 + enc70 + enc71 + enc72 + enc73 + enc74 + enc75 + enc76 + enc77 + enc78 + enc79 + enc80 + enc81 + enc82 + enc83 + enc84 + enc85 + enc86 + enc87 + enc88 + enc89 + enc90 + enc91 + enc92 + enc93 + enc94 + enc95 + enc96 + enc97 + enc98 + enc99 + enc100 + enc101 + enc102 + enc103 + enc104 + enc105 + enc106 + enc109 + enc110 + enc111 + enc112 + enc113 + enc114 + enc115 + enc116 + enc117 + enc118 + enc119 + enc1000 + enc1001 + enc1002 + enc1003 + enc1004 + enc1005 + enc1006 + enc1007 + enc1008 + enc1009 + enc1010 + enc1011 + enc1012 + enc1013 + enc1014 + enc1015 + enc1016 + enc1017 + enc1018 + enc1019 + enc1020 + enc2000 + enc2001 + enc2002 + enc2003 + enc2004 + enc2005 + enc2006 + enc2007 + enc2008 + enc2009 + enc2010 + enc2011 + enc2012 + enc2013 + enc2014 + enc2015 + enc2016 + enc2017 + enc2018 + enc2019 + enc2020 + enc2021 + enc2022 + enc2023 + enc2024 + enc2025 + enc2026 + enc2027 + enc2028 + enc2029 + enc2030 + enc2031 + enc2032 + enc2033 + enc2034 + enc2035 + enc2036 + enc2037 + enc2038 + enc2039 + enc2040 + enc2041 + enc2042 + enc2043 + enc2044 + enc2045 + enc2046 + enc2047 + enc2048 + enc2049 + enc2050 + enc2051 + enc2052 + enc2053 + enc2054 + enc2055 + enc2056 + enc2057 + enc2058 + enc2059 + enc2060 + enc2061 + enc2062 + enc2063 + enc2064 + enc2065 + enc2066 + enc2067 + enc2068 + enc2069 + enc2070 + enc2071 + enc2072 + enc2073 + enc2074 + enc2075 + enc2076 + enc2077 + enc2078 + enc2079 + enc2080 + enc2081 + enc2082 + enc2083 + enc2084 + enc2085 + enc2086 + enc2087 + enc2088 + enc2089 + enc2090 + enc2091 + enc2092 + enc2093 + enc2094 + enc2095 + enc2096 + enc2097 + enc2098 + enc2099 + enc2100 + enc2101 + enc2102 + enc2103 + enc2104 + enc2105 + enc2106 + enc2107 + enc2108 + enc2109 + enc2250 + enc2251 + enc2252 + enc2253 + enc2254 + enc2255 + enc2256 + enc2257 + enc2258 + enc2259 + enc2260 + numIANA +) + +var ianaToMIB = []identifier.MIB{ // 257 elements + // Entry 0 - 3F + 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, + 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, + 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, + 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, + 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, + 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, + 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042, + // Entry 40 - 7F + 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, + 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, + 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, + 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, + 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, + 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, + 0x0075, 0x0076, 0x0077, 0x03e8, 0x03e9, 0x03ea, 0x03eb, 0x03ec, + 0x03ed, 0x03ee, 0x03ef, 0x03f0, 0x03f1, 0x03f2, 0x03f3, 0x03f4, + // Entry 80 - BF + 0x03f5, 0x03f6, 0x03f7, 0x03f8, 0x03f9, 0x03fa, 0x03fb, 0x03fc, + 0x07d0, 0x07d1, 0x07d2, 0x07d3, 0x07d4, 0x07d5, 0x07d6, 0x07d7, + 0x07d8, 0x07d9, 0x07da, 0x07db, 0x07dc, 0x07dd, 0x07de, 0x07df, + 0x07e0, 0x07e1, 0x07e2, 0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7, + 0x07e8, 0x07e9, 0x07ea, 0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef, + 0x07f0, 0x07f1, 0x07f2, 0x07f3, 0x07f4, 0x07f5, 0x07f6, 0x07f7, + 0x07f8, 0x07f9, 0x07fa, 0x07fb, 0x07fc, 0x07fd, 0x07fe, 0x07ff, + 0x0800, 0x0801, 0x0802, 0x0803, 0x0804, 0x0805, 0x0806, 0x0807, + // Entry C0 - FF + 0x0808, 0x0809, 0x080a, 0x080b, 0x080c, 0x080d, 0x080e, 0x080f, + 0x0810, 0x0811, 0x0812, 0x0813, 0x0814, 0x0815, 0x0816, 0x0817, + 0x0818, 0x0819, 0x081a, 0x081b, 0x081c, 0x081d, 0x081e, 0x081f, + 0x0820, 0x0821, 0x0822, 0x0823, 0x0824, 0x0825, 0x0826, 0x0827, + 0x0828, 0x0829, 0x082a, 0x082b, 0x082c, 0x082d, 0x082e, 0x082f, + 0x0830, 0x0831, 0x0832, 0x0833, 0x0834, 0x0835, 0x0836, 0x0837, + 0x0838, 0x0839, 0x083a, 0x083b, 0x083c, 0x083d, 0x08ca, 0x08cb, + 0x08cc, 0x08cd, 0x08ce, 0x08cf, 0x08d0, 0x08d1, 0x08d2, 0x08d3, + // Entry 100 - 13F + 0x08d4, +} // Size: 538 bytes + +var ianaNames = []string{ // 257 elements + "US-ASCII", + "\vISO-8859-1ISO_8859-1:1987", + "\vISO-8859-2ISO_8859-2:1987", + "\vISO-8859-3ISO_8859-3:1988", + "\vISO-8859-4ISO_8859-4:1988", + "\vISO-8859-5ISO_8859-5:1988", + "\vISO-8859-6ISO_8859-6:1987", + "\vISO-8859-7ISO_8859-7:1987", + "\vISO-8859-8ISO_8859-8:1988", + "\vISO-8859-9ISO_8859-9:1989", + "ISO-8859-10", + "ISO_6937-2-add", + "JIS_X0201", + "JIS_Encoding", + "Shift_JIS", + "\x07EUC-JPExtended_UNIX_Code_Packed_Format_for_Japanese", + "Extended_UNIX_Code_Fixed_Width_for_Japanese", + "BS_4730", + "SEN_850200_C", + "IT", + "ES", + "DIN_66003", + "NS_4551-1", + "NF_Z_62-010", + "ISO-10646-UTF-1", + "ISO_646.basic:1983", + "INVARIANT", + "ISO_646.irv:1983", + "NATS-SEFI", + "NATS-SEFI-ADD", + "NATS-DANO", + "NATS-DANO-ADD", + "SEN_850200_B", + "KS_C_5601-1987", + "ISO-2022-KR", + "EUC-KR", + "ISO-2022-JP", + "ISO-2022-JP-2", + "JIS_C6220-1969-jp", + "JIS_C6220-1969-ro", + "PT", + "greek7-old", + "latin-greek", + "NF_Z_62-010_(1973)", + "Latin-greek-1", + "ISO_5427", + "JIS_C6226-1978", + "BS_viewdata", + "INIS", + "INIS-8", + "INIS-cyrillic", + "ISO_5427:1981", + "ISO_5428:1980", + "GB_1988-80", + "GB_2312-80", + "NS_4551-2", + "videotex-suppl", + "PT2", + "ES2", + "MSZ_7795.3", + "JIS_C6226-1983", + "greek7", + "ASMO_449", + "iso-ir-90", + "JIS_C6229-1984-a", + "JIS_C6229-1984-b", + "JIS_C6229-1984-b-add", + "JIS_C6229-1984-hand", + "JIS_C6229-1984-hand-add", + "JIS_C6229-1984-kana", + "ISO_2033-1983", + "ANSI_X3.110-1983", + "T.61-7bit", + "T.61-8bit", + "ECMA-cyrillic", + "CSA_Z243.4-1985-1", + "CSA_Z243.4-1985-2", + "CSA_Z243.4-1985-gr", + "\rISO-8859-6-EISO_8859-6-E", + "\rISO-8859-6-IISO_8859-6-I", + "T.101-G2", + "\rISO-8859-8-EISO_8859-8-E", + "\rISO-8859-8-IISO_8859-8-I", + "CSN_369103", + "JUS_I.B1.002", + "IEC_P27-1", + "JUS_I.B1.003-serb", + "JUS_I.B1.003-mac", + "greek-ccitt", + "NC_NC00-10:81", + "ISO_6937-2-25", + "GOST_19768-74", + "ISO_8859-supp", + "ISO_10367-box", + "latin-lap", + "JIS_X0212-1990", + "DS_2089", + "us-dk", + "dk-us", + "KSC5636", + "UNICODE-1-1-UTF-7", + "ISO-2022-CN", + "ISO-2022-CN-EXT", + "UTF-8", + "ISO-8859-13", + "ISO-8859-14", + "ISO-8859-15", + "ISO-8859-16", + "GBK", + "GB18030", + "OSD_EBCDIC_DF04_15", + "OSD_EBCDIC_DF03_IRV", + "OSD_EBCDIC_DF04_1", + "ISO-11548-1", + "KZ-1048", + "ISO-10646-UCS-2", + "ISO-10646-UCS-4", + "ISO-10646-UCS-Basic", + "ISO-10646-Unicode-Latin1", + "ISO-10646-J-1", + "ISO-Unicode-IBM-1261", + "ISO-Unicode-IBM-1268", + "ISO-Unicode-IBM-1276", + "ISO-Unicode-IBM-1264", + "ISO-Unicode-IBM-1265", + "UNICODE-1-1", + "SCSU", + "UTF-7", + "UTF-16BE", + "UTF-16LE", + "UTF-16", + "CESU-8", + "UTF-32", + "UTF-32BE", + "UTF-32LE", + "BOCU-1", + "ISO-8859-1-Windows-3.0-Latin-1", + "ISO-8859-1-Windows-3.1-Latin-1", + "ISO-8859-2-Windows-Latin-2", + "ISO-8859-9-Windows-Latin-5", + "hp-roman8", + "Adobe-Standard-Encoding", + "Ventura-US", + "Ventura-International", + "DEC-MCS", + "IBM850", + "IBM852", + "IBM437", + "PC8-Danish-Norwegian", + "IBM862", + "PC8-Turkish", + "IBM-Symbols", + "IBM-Thai", + "HP-Legal", + "HP-Pi-font", + "HP-Math8", + "Adobe-Symbol-Encoding", + "HP-DeskTop", + "Ventura-Math", + "Microsoft-Publishing", + "Windows-31J", + "GB2312", + "Big5", + "macintosh", + "IBM037", + "IBM038", + "IBM273", + "IBM274", + "IBM275", + "IBM277", + "IBM278", + "IBM280", + "IBM281", + "IBM284", + "IBM285", + "IBM290", + "IBM297", + "IBM420", + "IBM423", + "IBM424", + "IBM500", + "IBM851", + "IBM855", + "IBM857", + "IBM860", + "IBM861", + "IBM863", + "IBM864", + "IBM865", + "IBM868", + "IBM869", + "IBM870", + "IBM871", + "IBM880", + "IBM891", + "IBM903", + "IBM904", + "IBM905", + "IBM918", + "IBM1026", + "EBCDIC-AT-DE", + "EBCDIC-AT-DE-A", + "EBCDIC-CA-FR", + "EBCDIC-DK-NO", + "EBCDIC-DK-NO-A", + "EBCDIC-FI-SE", + "EBCDIC-FI-SE-A", + "EBCDIC-FR", + "EBCDIC-IT", + "EBCDIC-PT", + "EBCDIC-ES", + "EBCDIC-ES-A", + "EBCDIC-ES-S", + "EBCDIC-UK", + "EBCDIC-US", + "UNKNOWN-8BIT", + "MNEMONIC", + "MNEM", + "VISCII", + "VIQR", + "KOI8-R", + "HZ-GB-2312", + "IBM866", + "IBM775", + "KOI8-U", + "IBM00858", + "IBM00924", + "IBM01140", + "IBM01141", + "IBM01142", + "IBM01143", + "IBM01144", + "IBM01145", + "IBM01146", + "IBM01147", + "IBM01148", + "IBM01149", + "Big5-HKSCS", + "IBM1047", + "PTCP154", + "Amiga-1251", + "KOI7-switched", + "BRF", + "TSCII", + "CP51932", + "windows-874", + "windows-1250", + "windows-1251", + "windows-1252", + "windows-1253", + "windows-1254", + "windows-1255", + "windows-1256", + "windows-1257", + "windows-1258", + "TIS-620", + "CP50220", +} // Size: 7088 bytes + +var mibNames = []string{ // 257 elements + "ASCII", + "ISOLatin1", + "ISOLatin2", + "ISOLatin3", + "ISOLatin4", + "ISOLatinCyrillic", + "ISOLatinArabic", + "ISOLatinGreek", + "ISOLatinHebrew", + "ISOLatin5", + "ISOLatin6", + "ISOTextComm", + "HalfWidthKatakana", + "JISEncoding", + "ShiftJIS", + "EUCPkdFmtJapanese", + "EUCFixWidJapanese", + "ISO4UnitedKingdom", + "ISO11SwedishForNames", + "ISO15Italian", + "ISO17Spanish", + "ISO21German", + "ISO60Norwegian1", + "ISO69French", + "ISO10646UTF1", + "ISO646basic1983", + "INVARIANT", + "ISO2IntlRefVersion", + "NATSSEFI", + "NATSSEFIADD", + "NATSDANO", + "NATSDANOADD", + "ISO10Swedish", + "KSC56011987", + "ISO2022KR", + "EUCKR", + "ISO2022JP", + "ISO2022JP2", + "ISO13JISC6220jp", + "ISO14JISC6220ro", + "ISO16Portuguese", + "ISO18Greek7Old", + "ISO19LatinGreek", + "ISO25French", + "ISO27LatinGreek1", + "ISO5427Cyrillic", + "ISO42JISC62261978", + "ISO47BSViewdata", + "ISO49INIS", + "ISO50INIS8", + "ISO51INISCyrillic", + "ISO54271981", + "ISO5428Greek", + "ISO57GB1988", + "ISO58GB231280", + "ISO61Norwegian2", + "ISO70VideotexSupp1", + "ISO84Portuguese2", + "ISO85Spanish2", + "ISO86Hungarian", + "ISO87JISX0208", + "ISO88Greek7", + "ISO89ASMO449", + "ISO90", + "ISO91JISC62291984a", + "ISO92JISC62991984b", + "ISO93JIS62291984badd", + "ISO94JIS62291984hand", + "ISO95JIS62291984handadd", + "ISO96JISC62291984kana", + "ISO2033", + "ISO99NAPLPS", + "ISO102T617bit", + "ISO103T618bit", + "ISO111ECMACyrillic", + "ISO121Canadian1", + "ISO122Canadian2", + "ISO123CSAZ24341985gr", + "ISO88596E", + "ISO88596I", + "ISO128T101G2", + "ISO88598E", + "ISO88598I", + "ISO139CSN369103", + "ISO141JUSIB1002", + "ISO143IECP271", + "ISO146Serbian", + "ISO147Macedonian", + "ISO150GreekCCITT", + "ISO151Cuba", + "ISO6937Add", + "ISO153GOST1976874", + "ISO8859Supp", + "ISO10367Box", + "ISO158Lap", + "ISO159JISX02121990", + "ISO646Danish", + "USDK", + "DKUS", + "KSC5636", + "Unicode11UTF7", + "ISO2022CN", + "ISO2022CNEXT", + "UTF8", + "ISO885913", + "ISO885914", + "ISO885915", + "ISO885916", + "GBK", + "GB18030", + "OSDEBCDICDF0415", + "OSDEBCDICDF03IRV", + "OSDEBCDICDF041", + "ISO115481", + "KZ1048", + "Unicode", + "UCS4", + "UnicodeASCII", + "UnicodeLatin1", + "UnicodeJapanese", + "UnicodeIBM1261", + "UnicodeIBM1268", + "UnicodeIBM1276", + "UnicodeIBM1264", + "UnicodeIBM1265", + "Unicode11", + "SCSU", + "UTF7", + "UTF16BE", + "UTF16LE", + "UTF16", + "CESU-8", + "UTF32", + "UTF32BE", + "UTF32LE", + "BOCU-1", + "Windows30Latin1", + "Windows31Latin1", + "Windows31Latin2", + "Windows31Latin5", + "HPRoman8", + "AdobeStandardEncoding", + "VenturaUS", + "VenturaInternational", + "DECMCS", + "PC850Multilingual", + "PCp852", + "PC8CodePage437", + "PC8DanishNorwegian", + "PC862LatinHebrew", + "PC8Turkish", + "IBMSymbols", + "IBMThai", + "HPLegal", + "HPPiFont", + "HPMath8", + "HPPSMath", + "HPDesktop", + "VenturaMath", + "MicrosoftPublishing", + "Windows31J", + "GB2312", + "Big5", + "Macintosh", + "IBM037", + "IBM038", + "IBM273", + "IBM274", + "IBM275", + "IBM277", + "IBM278", + "IBM280", + "IBM281", + "IBM284", + "IBM285", + "IBM290", + "IBM297", + "IBM420", + "IBM423", + "IBM424", + "IBM500", + "IBM851", + "IBM855", + "IBM857", + "IBM860", + "IBM861", + "IBM863", + "IBM864", + "IBM865", + "IBM868", + "IBM869", + "IBM870", + "IBM871", + "IBM880", + "IBM891", + "IBM903", + "IBBM904", + "IBM905", + "IBM918", + "IBM1026", + "IBMEBCDICATDE", + "EBCDICATDEA", + "EBCDICCAFR", + "EBCDICDKNO", + "EBCDICDKNOA", + "EBCDICFISE", + "EBCDICFISEA", + "EBCDICFR", + "EBCDICIT", + "EBCDICPT", + "EBCDICES", + "EBCDICESA", + "EBCDICESS", + "EBCDICUK", + "EBCDICUS", + "Unknown8BiT", + "Mnemonic", + "Mnem", + "VISCII", + "VIQR", + "KOI8R", + "HZ-GB-2312", + "IBM866", + "PC775Baltic", + "KOI8U", + "IBM00858", + "IBM00924", + "IBM01140", + "IBM01141", + "IBM01142", + "IBM01143", + "IBM01144", + "IBM01145", + "IBM01146", + "IBM01147", + "IBM01148", + "IBM01149", + "Big5HKSCS", + "IBM1047", + "PTCP154", + "Amiga1251\n(Aliases", + "KOI7switched", + "BRF", + "TSCII", + "CP51932", + "windows874", + "windows1250", + "windows1251", + "windows1252", + "windows1253", + "windows1254", + "windows1255", + "windows1256", + "windows1257", + "windows1258", + "TIS620", + "CP50220", +} // Size: 6776 bytes + +// TODO: Instead of using a map, we could use binary search strings doing +// on-the fly lower-casing per character. This allows to always avoid +// allocation and will be considerably more compact. +var ianaAliases = map[string]int{ + "US-ASCII": enc3, + "us-ascii": enc3, + "iso-ir-6": enc3, + "ANSI_X3.4-1968": enc3, + "ansi_x3.4-1968": enc3, + "ANSI_X3.4-1986": enc3, + "ansi_x3.4-1986": enc3, + "ISO_646.irv:1991": enc3, + "iso_646.irv:1991": enc3, + "ISO646-US": enc3, + "iso646-us": enc3, + "us": enc3, + "IBM367": enc3, + "ibm367": enc3, + "cp367": enc3, + "csASCII": enc3, + "csascii": enc3, + "ISO_8859-1:1987": enc4, + "iso_8859-1:1987": enc4, + "iso-ir-100": enc4, + "ISO_8859-1": enc4, + "iso_8859-1": enc4, + "ISO-8859-1": enc4, + "iso-8859-1": enc4, + "latin1": enc4, + "l1": enc4, + "IBM819": enc4, + "ibm819": enc4, + "CP819": enc4, + "cp819": enc4, + "csISOLatin1": enc4, + "csisolatin1": enc4, + "ISO_8859-2:1987": enc5, + "iso_8859-2:1987": enc5, + "iso-ir-101": enc5, + "ISO_8859-2": enc5, + "iso_8859-2": enc5, + "ISO-8859-2": enc5, + "iso-8859-2": enc5, + "latin2": enc5, + "l2": enc5, + "csISOLatin2": enc5, + "csisolatin2": enc5, + "ISO_8859-3:1988": enc6, + "iso_8859-3:1988": enc6, + "iso-ir-109": enc6, + "ISO_8859-3": enc6, + "iso_8859-3": enc6, + "ISO-8859-3": enc6, + "iso-8859-3": enc6, + "latin3": enc6, + "l3": enc6, + "csISOLatin3": enc6, + "csisolatin3": enc6, + "ISO_8859-4:1988": enc7, + "iso_8859-4:1988": enc7, + "iso-ir-110": enc7, + "ISO_8859-4": enc7, + "iso_8859-4": enc7, + "ISO-8859-4": enc7, + "iso-8859-4": enc7, + "latin4": enc7, + "l4": enc7, + "csISOLatin4": enc7, + "csisolatin4": enc7, + "ISO_8859-5:1988": enc8, + "iso_8859-5:1988": enc8, + "iso-ir-144": enc8, + "ISO_8859-5": enc8, + "iso_8859-5": enc8, + "ISO-8859-5": enc8, + "iso-8859-5": enc8, + "cyrillic": enc8, + "csISOLatinCyrillic": enc8, + "csisolatincyrillic": enc8, + "ISO_8859-6:1987": enc9, + "iso_8859-6:1987": enc9, + "iso-ir-127": enc9, + "ISO_8859-6": enc9, + "iso_8859-6": enc9, + "ISO-8859-6": enc9, + "iso-8859-6": enc9, + "ECMA-114": enc9, + "ecma-114": enc9, + "ASMO-708": enc9, + "asmo-708": enc9, + "arabic": enc9, + "csISOLatinArabic": enc9, + "csisolatinarabic": enc9, + "ISO_8859-7:1987": enc10, + "iso_8859-7:1987": enc10, + "iso-ir-126": enc10, + "ISO_8859-7": enc10, + "iso_8859-7": enc10, + "ISO-8859-7": enc10, + "iso-8859-7": enc10, + "ELOT_928": enc10, + "elot_928": enc10, + "ECMA-118": enc10, + "ecma-118": enc10, + "greek": enc10, + "greek8": enc10, + "csISOLatinGreek": enc10, + "csisolatingreek": enc10, + "ISO_8859-8:1988": enc11, + "iso_8859-8:1988": enc11, + "iso-ir-138": enc11, + "ISO_8859-8": enc11, + "iso_8859-8": enc11, + "ISO-8859-8": enc11, + "iso-8859-8": enc11, + "hebrew": enc11, + "csISOLatinHebrew": enc11, + "csisolatinhebrew": enc11, + "ISO_8859-9:1989": enc12, + "iso_8859-9:1989": enc12, + "iso-ir-148": enc12, + "ISO_8859-9": enc12, + "iso_8859-9": enc12, + "ISO-8859-9": enc12, + "iso-8859-9": enc12, + "latin5": enc12, + "l5": enc12, + "csISOLatin5": enc12, + "csisolatin5": enc12, + "ISO-8859-10": enc13, + "iso-8859-10": enc13, + "iso-ir-157": enc13, + "l6": enc13, + "ISO_8859-10:1992": enc13, + "iso_8859-10:1992": enc13, + "csISOLatin6": enc13, + "csisolatin6": enc13, + "latin6": enc13, + "ISO_6937-2-add": enc14, + "iso_6937-2-add": enc14, + "iso-ir-142": enc14, + "csISOTextComm": enc14, + "csisotextcomm": enc14, + "JIS_X0201": enc15, + "jis_x0201": enc15, + "X0201": enc15, + "x0201": enc15, + "csHalfWidthKatakana": enc15, + "cshalfwidthkatakana": enc15, + "JIS_Encoding": enc16, + "jis_encoding": enc16, + "csJISEncoding": enc16, + "csjisencoding": enc16, + "Shift_JIS": enc17, + "shift_jis": enc17, + "MS_Kanji": enc17, + "ms_kanji": enc17, + "csShiftJIS": enc17, + "csshiftjis": enc17, + "Extended_UNIX_Code_Packed_Format_for_Japanese": enc18, + "extended_unix_code_packed_format_for_japanese": enc18, + "csEUCPkdFmtJapanese": enc18, + "cseucpkdfmtjapanese": enc18, + "EUC-JP": enc18, + "euc-jp": enc18, + "Extended_UNIX_Code_Fixed_Width_for_Japanese": enc19, + "extended_unix_code_fixed_width_for_japanese": enc19, + "csEUCFixWidJapanese": enc19, + "cseucfixwidjapanese": enc19, + "BS_4730": enc20, + "bs_4730": enc20, + "iso-ir-4": enc20, + "ISO646-GB": enc20, + "iso646-gb": enc20, + "gb": enc20, + "uk": enc20, + "csISO4UnitedKingdom": enc20, + "csiso4unitedkingdom": enc20, + "SEN_850200_C": enc21, + "sen_850200_c": enc21, + "iso-ir-11": enc21, + "ISO646-SE2": enc21, + "iso646-se2": enc21, + "se2": enc21, + "csISO11SwedishForNames": enc21, + "csiso11swedishfornames": enc21, + "IT": enc22, + "it": enc22, + "iso-ir-15": enc22, + "ISO646-IT": enc22, + "iso646-it": enc22, + "csISO15Italian": enc22, + "csiso15italian": enc22, + "ES": enc23, + "es": enc23, + "iso-ir-17": enc23, + "ISO646-ES": enc23, + "iso646-es": enc23, + "csISO17Spanish": enc23, + "csiso17spanish": enc23, + "DIN_66003": enc24, + "din_66003": enc24, + "iso-ir-21": enc24, + "de": enc24, + "ISO646-DE": enc24, + "iso646-de": enc24, + "csISO21German": enc24, + "csiso21german": enc24, + "NS_4551-1": enc25, + "ns_4551-1": enc25, + "iso-ir-60": enc25, + "ISO646-NO": enc25, + "iso646-no": enc25, + "no": enc25, + "csISO60DanishNorwegian": enc25, + "csiso60danishnorwegian": enc25, + "csISO60Norwegian1": enc25, + "csiso60norwegian1": enc25, + "NF_Z_62-010": enc26, + "nf_z_62-010": enc26, + "iso-ir-69": enc26, + "ISO646-FR": enc26, + "iso646-fr": enc26, + "fr": enc26, + "csISO69French": enc26, + "csiso69french": enc26, + "ISO-10646-UTF-1": enc27, + "iso-10646-utf-1": enc27, + "csISO10646UTF1": enc27, + "csiso10646utf1": enc27, + "ISO_646.basic:1983": enc28, + "iso_646.basic:1983": enc28, + "ref": enc28, + "csISO646basic1983": enc28, + "csiso646basic1983": enc28, + "INVARIANT": enc29, + "invariant": enc29, + "csINVARIANT": enc29, + "csinvariant": enc29, + "ISO_646.irv:1983": enc30, + "iso_646.irv:1983": enc30, + "iso-ir-2": enc30, + "irv": enc30, + "csISO2IntlRefVersion": enc30, + "csiso2intlrefversion": enc30, + "NATS-SEFI": enc31, + "nats-sefi": enc31, + "iso-ir-8-1": enc31, + "csNATSSEFI": enc31, + "csnatssefi": enc31, + "NATS-SEFI-ADD": enc32, + "nats-sefi-add": enc32, + "iso-ir-8-2": enc32, + "csNATSSEFIADD": enc32, + "csnatssefiadd": enc32, + "NATS-DANO": enc33, + "nats-dano": enc33, + "iso-ir-9-1": enc33, + "csNATSDANO": enc33, + "csnatsdano": enc33, + "NATS-DANO-ADD": enc34, + "nats-dano-add": enc34, + "iso-ir-9-2": enc34, + "csNATSDANOADD": enc34, + "csnatsdanoadd": enc34, + "SEN_850200_B": enc35, + "sen_850200_b": enc35, + "iso-ir-10": enc35, + "FI": enc35, + "fi": enc35, + "ISO646-FI": enc35, + "iso646-fi": enc35, + "ISO646-SE": enc35, + "iso646-se": enc35, + "se": enc35, + "csISO10Swedish": enc35, + "csiso10swedish": enc35, + "KS_C_5601-1987": enc36, + "ks_c_5601-1987": enc36, + "iso-ir-149": enc36, + "KS_C_5601-1989": enc36, + "ks_c_5601-1989": enc36, + "KSC_5601": enc36, + "ksc_5601": enc36, + "korean": enc36, + "csKSC56011987": enc36, + "csksc56011987": enc36, + "ISO-2022-KR": enc37, + "iso-2022-kr": enc37, + "csISO2022KR": enc37, + "csiso2022kr": enc37, + "EUC-KR": enc38, + "euc-kr": enc38, + "csEUCKR": enc38, + "cseuckr": enc38, + "ISO-2022-JP": enc39, + "iso-2022-jp": enc39, + "csISO2022JP": enc39, + "csiso2022jp": enc39, + "ISO-2022-JP-2": enc40, + "iso-2022-jp-2": enc40, + "csISO2022JP2": enc40, + "csiso2022jp2": enc40, + "JIS_C6220-1969-jp": enc41, + "jis_c6220-1969-jp": enc41, + "JIS_C6220-1969": enc41, + "jis_c6220-1969": enc41, + "iso-ir-13": enc41, + "katakana": enc41, + "x0201-7": enc41, + "csISO13JISC6220jp": enc41, + "csiso13jisc6220jp": enc41, + "JIS_C6220-1969-ro": enc42, + "jis_c6220-1969-ro": enc42, + "iso-ir-14": enc42, + "jp": enc42, + "ISO646-JP": enc42, + "iso646-jp": enc42, + "csISO14JISC6220ro": enc42, + "csiso14jisc6220ro": enc42, + "PT": enc43, + "pt": enc43, + "iso-ir-16": enc43, + "ISO646-PT": enc43, + "iso646-pt": enc43, + "csISO16Portuguese": enc43, + "csiso16portuguese": enc43, + "greek7-old": enc44, + "iso-ir-18": enc44, + "csISO18Greek7Old": enc44, + "csiso18greek7old": enc44, + "latin-greek": enc45, + "iso-ir-19": enc45, + "csISO19LatinGreek": enc45, + "csiso19latingreek": enc45, + "NF_Z_62-010_(1973)": enc46, + "nf_z_62-010_(1973)": enc46, + "iso-ir-25": enc46, + "ISO646-FR1": enc46, + "iso646-fr1": enc46, + "csISO25French": enc46, + "csiso25french": enc46, + "Latin-greek-1": enc47, + "latin-greek-1": enc47, + "iso-ir-27": enc47, + "csISO27LatinGreek1": enc47, + "csiso27latingreek1": enc47, + "ISO_5427": enc48, + "iso_5427": enc48, + "iso-ir-37": enc48, + "csISO5427Cyrillic": enc48, + "csiso5427cyrillic": enc48, + "JIS_C6226-1978": enc49, + "jis_c6226-1978": enc49, + "iso-ir-42": enc49, + "csISO42JISC62261978": enc49, + "csiso42jisc62261978": enc49, + "BS_viewdata": enc50, + "bs_viewdata": enc50, + "iso-ir-47": enc50, + "csISO47BSViewdata": enc50, + "csiso47bsviewdata": enc50, + "INIS": enc51, + "inis": enc51, + "iso-ir-49": enc51, + "csISO49INIS": enc51, + "csiso49inis": enc51, + "INIS-8": enc52, + "inis-8": enc52, + "iso-ir-50": enc52, + "csISO50INIS8": enc52, + "csiso50inis8": enc52, + "INIS-cyrillic": enc53, + "inis-cyrillic": enc53, + "iso-ir-51": enc53, + "csISO51INISCyrillic": enc53, + "csiso51iniscyrillic": enc53, + "ISO_5427:1981": enc54, + "iso_5427:1981": enc54, + "iso-ir-54": enc54, + "ISO5427Cyrillic1981": enc54, + "iso5427cyrillic1981": enc54, + "csISO54271981": enc54, + "csiso54271981": enc54, + "ISO_5428:1980": enc55, + "iso_5428:1980": enc55, + "iso-ir-55": enc55, + "csISO5428Greek": enc55, + "csiso5428greek": enc55, + "GB_1988-80": enc56, + "gb_1988-80": enc56, + "iso-ir-57": enc56, + "cn": enc56, + "ISO646-CN": enc56, + "iso646-cn": enc56, + "csISO57GB1988": enc56, + "csiso57gb1988": enc56, + "GB_2312-80": enc57, + "gb_2312-80": enc57, + "iso-ir-58": enc57, + "chinese": enc57, + "csISO58GB231280": enc57, + "csiso58gb231280": enc57, + "NS_4551-2": enc58, + "ns_4551-2": enc58, + "ISO646-NO2": enc58, + "iso646-no2": enc58, + "iso-ir-61": enc58, + "no2": enc58, + "csISO61Norwegian2": enc58, + "csiso61norwegian2": enc58, + "videotex-suppl": enc59, + "iso-ir-70": enc59, + "csISO70VideotexSupp1": enc59, + "csiso70videotexsupp1": enc59, + "PT2": enc60, + "pt2": enc60, + "iso-ir-84": enc60, + "ISO646-PT2": enc60, + "iso646-pt2": enc60, + "csISO84Portuguese2": enc60, + "csiso84portuguese2": enc60, + "ES2": enc61, + "es2": enc61, + "iso-ir-85": enc61, + "ISO646-ES2": enc61, + "iso646-es2": enc61, + "csISO85Spanish2": enc61, + "csiso85spanish2": enc61, + "MSZ_7795.3": enc62, + "msz_7795.3": enc62, + "iso-ir-86": enc62, + "ISO646-HU": enc62, + "iso646-hu": enc62, + "hu": enc62, + "csISO86Hungarian": enc62, + "csiso86hungarian": enc62, + "JIS_C6226-1983": enc63, + "jis_c6226-1983": enc63, + "iso-ir-87": enc63, + "x0208": enc63, + "JIS_X0208-1983": enc63, + "jis_x0208-1983": enc63, + "csISO87JISX0208": enc63, + "csiso87jisx0208": enc63, + "greek7": enc64, + "iso-ir-88": enc64, + "csISO88Greek7": enc64, + "csiso88greek7": enc64, + "ASMO_449": enc65, + "asmo_449": enc65, + "ISO_9036": enc65, + "iso_9036": enc65, + "arabic7": enc65, + "iso-ir-89": enc65, + "csISO89ASMO449": enc65, + "csiso89asmo449": enc65, + "iso-ir-90": enc66, + "csISO90": enc66, + "csiso90": enc66, + "JIS_C6229-1984-a": enc67, + "jis_c6229-1984-a": enc67, + "iso-ir-91": enc67, + "jp-ocr-a": enc67, + "csISO91JISC62291984a": enc67, + "csiso91jisc62291984a": enc67, + "JIS_C6229-1984-b": enc68, + "jis_c6229-1984-b": enc68, + "iso-ir-92": enc68, + "ISO646-JP-OCR-B": enc68, + "iso646-jp-ocr-b": enc68, + "jp-ocr-b": enc68, + "csISO92JISC62991984b": enc68, + "csiso92jisc62991984b": enc68, + "JIS_C6229-1984-b-add": enc69, + "jis_c6229-1984-b-add": enc69, + "iso-ir-93": enc69, + "jp-ocr-b-add": enc69, + "csISO93JIS62291984badd": enc69, + "csiso93jis62291984badd": enc69, + "JIS_C6229-1984-hand": enc70, + "jis_c6229-1984-hand": enc70, + "iso-ir-94": enc70, + "jp-ocr-hand": enc70, + "csISO94JIS62291984hand": enc70, + "csiso94jis62291984hand": enc70, + "JIS_C6229-1984-hand-add": enc71, + "jis_c6229-1984-hand-add": enc71, + "iso-ir-95": enc71, + "jp-ocr-hand-add": enc71, + "csISO95JIS62291984handadd": enc71, + "csiso95jis62291984handadd": enc71, + "JIS_C6229-1984-kana": enc72, + "jis_c6229-1984-kana": enc72, + "iso-ir-96": enc72, + "csISO96JISC62291984kana": enc72, + "csiso96jisc62291984kana": enc72, + "ISO_2033-1983": enc73, + "iso_2033-1983": enc73, + "iso-ir-98": enc73, + "e13b": enc73, + "csISO2033": enc73, + "csiso2033": enc73, + "ANSI_X3.110-1983": enc74, + "ansi_x3.110-1983": enc74, + "iso-ir-99": enc74, + "CSA_T500-1983": enc74, + "csa_t500-1983": enc74, + "NAPLPS": enc74, + "naplps": enc74, + "csISO99NAPLPS": enc74, + "csiso99naplps": enc74, + "T.61-7bit": enc75, + "t.61-7bit": enc75, + "iso-ir-102": enc75, + "csISO102T617bit": enc75, + "csiso102t617bit": enc75, + "T.61-8bit": enc76, + "t.61-8bit": enc76, + "T.61": enc76, + "t.61": enc76, + "iso-ir-103": enc76, + "csISO103T618bit": enc76, + "csiso103t618bit": enc76, + "ECMA-cyrillic": enc77, + "ecma-cyrillic": enc77, + "iso-ir-111": enc77, + "KOI8-E": enc77, + "koi8-e": enc77, + "csISO111ECMACyrillic": enc77, + "csiso111ecmacyrillic": enc77, + "CSA_Z243.4-1985-1": enc78, + "csa_z243.4-1985-1": enc78, + "iso-ir-121": enc78, + "ISO646-CA": enc78, + "iso646-ca": enc78, + "csa7-1": enc78, + "csa71": enc78, + "ca": enc78, + "csISO121Canadian1": enc78, + "csiso121canadian1": enc78, + "CSA_Z243.4-1985-2": enc79, + "csa_z243.4-1985-2": enc79, + "iso-ir-122": enc79, + "ISO646-CA2": enc79, + "iso646-ca2": enc79, + "csa7-2": enc79, + "csa72": enc79, + "csISO122Canadian2": enc79, + "csiso122canadian2": enc79, + "CSA_Z243.4-1985-gr": enc80, + "csa_z243.4-1985-gr": enc80, + "iso-ir-123": enc80, + "csISO123CSAZ24341985gr": enc80, + "csiso123csaz24341985gr": enc80, + "ISO_8859-6-E": enc81, + "iso_8859-6-e": enc81, + "csISO88596E": enc81, + "csiso88596e": enc81, + "ISO-8859-6-E": enc81, + "iso-8859-6-e": enc81, + "ISO_8859-6-I": enc82, + "iso_8859-6-i": enc82, + "csISO88596I": enc82, + "csiso88596i": enc82, + "ISO-8859-6-I": enc82, + "iso-8859-6-i": enc82, + "T.101-G2": enc83, + "t.101-g2": enc83, + "iso-ir-128": enc83, + "csISO128T101G2": enc83, + "csiso128t101g2": enc83, + "ISO_8859-8-E": enc84, + "iso_8859-8-e": enc84, + "csISO88598E": enc84, + "csiso88598e": enc84, + "ISO-8859-8-E": enc84, + "iso-8859-8-e": enc84, + "ISO_8859-8-I": enc85, + "iso_8859-8-i": enc85, + "csISO88598I": enc85, + "csiso88598i": enc85, + "ISO-8859-8-I": enc85, + "iso-8859-8-i": enc85, + "CSN_369103": enc86, + "csn_369103": enc86, + "iso-ir-139": enc86, + "csISO139CSN369103": enc86, + "csiso139csn369103": enc86, + "JUS_I.B1.002": enc87, + "jus_i.b1.002": enc87, + "iso-ir-141": enc87, + "ISO646-YU": enc87, + "iso646-yu": enc87, + "js": enc87, + "yu": enc87, + "csISO141JUSIB1002": enc87, + "csiso141jusib1002": enc87, + "IEC_P27-1": enc88, + "iec_p27-1": enc88, + "iso-ir-143": enc88, + "csISO143IECP271": enc88, + "csiso143iecp271": enc88, + "JUS_I.B1.003-serb": enc89, + "jus_i.b1.003-serb": enc89, + "iso-ir-146": enc89, + "serbian": enc89, + "csISO146Serbian": enc89, + "csiso146serbian": enc89, + "JUS_I.B1.003-mac": enc90, + "jus_i.b1.003-mac": enc90, + "macedonian": enc90, + "iso-ir-147": enc90, + "csISO147Macedonian": enc90, + "csiso147macedonian": enc90, + "greek-ccitt": enc91, + "iso-ir-150": enc91, + "csISO150": enc91, + "csiso150": enc91, + "csISO150GreekCCITT": enc91, + "csiso150greekccitt": enc91, + "NC_NC00-10:81": enc92, + "nc_nc00-10:81": enc92, + "cuba": enc92, + "iso-ir-151": enc92, + "ISO646-CU": enc92, + "iso646-cu": enc92, + "csISO151Cuba": enc92, + "csiso151cuba": enc92, + "ISO_6937-2-25": enc93, + "iso_6937-2-25": enc93, + "iso-ir-152": enc93, + "csISO6937Add": enc93, + "csiso6937add": enc93, + "GOST_19768-74": enc94, + "gost_19768-74": enc94, + "ST_SEV_358-88": enc94, + "st_sev_358-88": enc94, + "iso-ir-153": enc94, + "csISO153GOST1976874": enc94, + "csiso153gost1976874": enc94, + "ISO_8859-supp": enc95, + "iso_8859-supp": enc95, + "iso-ir-154": enc95, + "latin1-2-5": enc95, + "csISO8859Supp": enc95, + "csiso8859supp": enc95, + "ISO_10367-box": enc96, + "iso_10367-box": enc96, + "iso-ir-155": enc96, + "csISO10367Box": enc96, + "csiso10367box": enc96, + "latin-lap": enc97, + "lap": enc97, + "iso-ir-158": enc97, + "csISO158Lap": enc97, + "csiso158lap": enc97, + "JIS_X0212-1990": enc98, + "jis_x0212-1990": enc98, + "x0212": enc98, + "iso-ir-159": enc98, + "csISO159JISX02121990": enc98, + "csiso159jisx02121990": enc98, + "DS_2089": enc99, + "ds_2089": enc99, + "DS2089": enc99, + "ds2089": enc99, + "ISO646-DK": enc99, + "iso646-dk": enc99, + "dk": enc99, + "csISO646Danish": enc99, + "csiso646danish": enc99, + "us-dk": enc100, + "csUSDK": enc100, + "csusdk": enc100, + "dk-us": enc101, + "csDKUS": enc101, + "csdkus": enc101, + "KSC5636": enc102, + "ksc5636": enc102, + "ISO646-KR": enc102, + "iso646-kr": enc102, + "csKSC5636": enc102, + "csksc5636": enc102, + "UNICODE-1-1-UTF-7": enc103, + "unicode-1-1-utf-7": enc103, + "csUnicode11UTF7": enc103, + "csunicode11utf7": enc103, + "ISO-2022-CN": enc104, + "iso-2022-cn": enc104, + "csISO2022CN": enc104, + "csiso2022cn": enc104, + "ISO-2022-CN-EXT": enc105, + "iso-2022-cn-ext": enc105, + "csISO2022CNEXT": enc105, + "csiso2022cnext": enc105, + "UTF-8": enc106, + "utf-8": enc106, + "csUTF8": enc106, + "csutf8": enc106, + "ISO-8859-13": enc109, + "iso-8859-13": enc109, + "csISO885913": enc109, + "csiso885913": enc109, + "ISO-8859-14": enc110, + "iso-8859-14": enc110, + "iso-ir-199": enc110, + "ISO_8859-14:1998": enc110, + "iso_8859-14:1998": enc110, + "ISO_8859-14": enc110, + "iso_8859-14": enc110, + "latin8": enc110, + "iso-celtic": enc110, + "l8": enc110, + "csISO885914": enc110, + "csiso885914": enc110, + "ISO-8859-15": enc111, + "iso-8859-15": enc111, + "ISO_8859-15": enc111, + "iso_8859-15": enc111, + "Latin-9": enc111, + "latin-9": enc111, + "csISO885915": enc111, + "csiso885915": enc111, + "ISO-8859-16": enc112, + "iso-8859-16": enc112, + "iso-ir-226": enc112, + "ISO_8859-16:2001": enc112, + "iso_8859-16:2001": enc112, + "ISO_8859-16": enc112, + "iso_8859-16": enc112, + "latin10": enc112, + "l10": enc112, + "csISO885916": enc112, + "csiso885916": enc112, + "GBK": enc113, + "gbk": enc113, + "CP936": enc113, + "cp936": enc113, + "MS936": enc113, + "ms936": enc113, + "windows-936": enc113, + "csGBK": enc113, + "csgbk": enc113, + "GB18030": enc114, + "gb18030": enc114, + "csGB18030": enc114, + "csgb18030": enc114, + "OSD_EBCDIC_DF04_15": enc115, + "osd_ebcdic_df04_15": enc115, + "csOSDEBCDICDF0415": enc115, + "csosdebcdicdf0415": enc115, + "OSD_EBCDIC_DF03_IRV": enc116, + "osd_ebcdic_df03_irv": enc116, + "csOSDEBCDICDF03IRV": enc116, + "csosdebcdicdf03irv": enc116, + "OSD_EBCDIC_DF04_1": enc117, + "osd_ebcdic_df04_1": enc117, + "csOSDEBCDICDF041": enc117, + "csosdebcdicdf041": enc117, + "ISO-11548-1": enc118, + "iso-11548-1": enc118, + "ISO_11548-1": enc118, + "iso_11548-1": enc118, + "ISO_TR_11548-1": enc118, + "iso_tr_11548-1": enc118, + "csISO115481": enc118, + "csiso115481": enc118, + "KZ-1048": enc119, + "kz-1048": enc119, + "STRK1048-2002": enc119, + "strk1048-2002": enc119, + "RK1048": enc119, + "rk1048": enc119, + "csKZ1048": enc119, + "cskz1048": enc119, + "ISO-10646-UCS-2": enc1000, + "iso-10646-ucs-2": enc1000, + "csUnicode": enc1000, + "csunicode": enc1000, + "ISO-10646-UCS-4": enc1001, + "iso-10646-ucs-4": enc1001, + "csUCS4": enc1001, + "csucs4": enc1001, + "ISO-10646-UCS-Basic": enc1002, + "iso-10646-ucs-basic": enc1002, + "csUnicodeASCII": enc1002, + "csunicodeascii": enc1002, + "ISO-10646-Unicode-Latin1": enc1003, + "iso-10646-unicode-latin1": enc1003, + "csUnicodeLatin1": enc1003, + "csunicodelatin1": enc1003, + "ISO-10646": enc1003, + "iso-10646": enc1003, + "ISO-10646-J-1": enc1004, + "iso-10646-j-1": enc1004, + "csUnicodeJapanese": enc1004, + "csunicodejapanese": enc1004, + "ISO-Unicode-IBM-1261": enc1005, + "iso-unicode-ibm-1261": enc1005, + "csUnicodeIBM1261": enc1005, + "csunicodeibm1261": enc1005, + "ISO-Unicode-IBM-1268": enc1006, + "iso-unicode-ibm-1268": enc1006, + "csUnicodeIBM1268": enc1006, + "csunicodeibm1268": enc1006, + "ISO-Unicode-IBM-1276": enc1007, + "iso-unicode-ibm-1276": enc1007, + "csUnicodeIBM1276": enc1007, + "csunicodeibm1276": enc1007, + "ISO-Unicode-IBM-1264": enc1008, + "iso-unicode-ibm-1264": enc1008, + "csUnicodeIBM1264": enc1008, + "csunicodeibm1264": enc1008, + "ISO-Unicode-IBM-1265": enc1009, + "iso-unicode-ibm-1265": enc1009, + "csUnicodeIBM1265": enc1009, + "csunicodeibm1265": enc1009, + "UNICODE-1-1": enc1010, + "unicode-1-1": enc1010, + "csUnicode11": enc1010, + "csunicode11": enc1010, + "SCSU": enc1011, + "scsu": enc1011, + "csSCSU": enc1011, + "csscsu": enc1011, + "UTF-7": enc1012, + "utf-7": enc1012, + "csUTF7": enc1012, + "csutf7": enc1012, + "UTF-16BE": enc1013, + "utf-16be": enc1013, + "csUTF16BE": enc1013, + "csutf16be": enc1013, + "UTF-16LE": enc1014, + "utf-16le": enc1014, + "csUTF16LE": enc1014, + "csutf16le": enc1014, + "UTF-16": enc1015, + "utf-16": enc1015, + "csUTF16": enc1015, + "csutf16": enc1015, + "CESU-8": enc1016, + "cesu-8": enc1016, + "csCESU8": enc1016, + "cscesu8": enc1016, + "csCESU-8": enc1016, + "cscesu-8": enc1016, + "UTF-32": enc1017, + "utf-32": enc1017, + "csUTF32": enc1017, + "csutf32": enc1017, + "UTF-32BE": enc1018, + "utf-32be": enc1018, + "csUTF32BE": enc1018, + "csutf32be": enc1018, + "UTF-32LE": enc1019, + "utf-32le": enc1019, + "csUTF32LE": enc1019, + "csutf32le": enc1019, + "BOCU-1": enc1020, + "bocu-1": enc1020, + "csBOCU1": enc1020, + "csbocu1": enc1020, + "csBOCU-1": enc1020, + "csbocu-1": enc1020, + "ISO-8859-1-Windows-3.0-Latin-1": enc2000, + "iso-8859-1-windows-3.0-latin-1": enc2000, + "csWindows30Latin1": enc2000, + "cswindows30latin1": enc2000, + "ISO-8859-1-Windows-3.1-Latin-1": enc2001, + "iso-8859-1-windows-3.1-latin-1": enc2001, + "csWindows31Latin1": enc2001, + "cswindows31latin1": enc2001, + "ISO-8859-2-Windows-Latin-2": enc2002, + "iso-8859-2-windows-latin-2": enc2002, + "csWindows31Latin2": enc2002, + "cswindows31latin2": enc2002, + "ISO-8859-9-Windows-Latin-5": enc2003, + "iso-8859-9-windows-latin-5": enc2003, + "csWindows31Latin5": enc2003, + "cswindows31latin5": enc2003, + "hp-roman8": enc2004, + "roman8": enc2004, + "r8": enc2004, + "csHPRoman8": enc2004, + "cshproman8": enc2004, + "Adobe-Standard-Encoding": enc2005, + "adobe-standard-encoding": enc2005, + "csAdobeStandardEncoding": enc2005, + "csadobestandardencoding": enc2005, + "Ventura-US": enc2006, + "ventura-us": enc2006, + "csVenturaUS": enc2006, + "csventuraus": enc2006, + "Ventura-International": enc2007, + "ventura-international": enc2007, + "csVenturaInternational": enc2007, + "csventurainternational": enc2007, + "DEC-MCS": enc2008, + "dec-mcs": enc2008, + "dec": enc2008, + "csDECMCS": enc2008, + "csdecmcs": enc2008, + "IBM850": enc2009, + "ibm850": enc2009, + "cp850": enc2009, + "850": enc2009, + "csPC850Multilingual": enc2009, + "cspc850multilingual": enc2009, + "PC8-Danish-Norwegian": enc2012, + "pc8-danish-norwegian": enc2012, + "csPC8DanishNorwegian": enc2012, + "cspc8danishnorwegian": enc2012, + "IBM862": enc2013, + "ibm862": enc2013, + "cp862": enc2013, + "862": enc2013, + "csPC862LatinHebrew": enc2013, + "cspc862latinhebrew": enc2013, + "PC8-Turkish": enc2014, + "pc8-turkish": enc2014, + "csPC8Turkish": enc2014, + "cspc8turkish": enc2014, + "IBM-Symbols": enc2015, + "ibm-symbols": enc2015, + "csIBMSymbols": enc2015, + "csibmsymbols": enc2015, + "IBM-Thai": enc2016, + "ibm-thai": enc2016, + "csIBMThai": enc2016, + "csibmthai": enc2016, + "HP-Legal": enc2017, + "hp-legal": enc2017, + "csHPLegal": enc2017, + "cshplegal": enc2017, + "HP-Pi-font": enc2018, + "hp-pi-font": enc2018, + "csHPPiFont": enc2018, + "cshppifont": enc2018, + "HP-Math8": enc2019, + "hp-math8": enc2019, + "csHPMath8": enc2019, + "cshpmath8": enc2019, + "Adobe-Symbol-Encoding": enc2020, + "adobe-symbol-encoding": enc2020, + "csHPPSMath": enc2020, + "cshppsmath": enc2020, + "HP-DeskTop": enc2021, + "hp-desktop": enc2021, + "csHPDesktop": enc2021, + "cshpdesktop": enc2021, + "Ventura-Math": enc2022, + "ventura-math": enc2022, + "csVenturaMath": enc2022, + "csventuramath": enc2022, + "Microsoft-Publishing": enc2023, + "microsoft-publishing": enc2023, + "csMicrosoftPublishing": enc2023, + "csmicrosoftpublishing": enc2023, + "Windows-31J": enc2024, + "windows-31j": enc2024, + "csWindows31J": enc2024, + "cswindows31j": enc2024, + "GB2312": enc2025, + "gb2312": enc2025, + "csGB2312": enc2025, + "csgb2312": enc2025, + "Big5": enc2026, + "big5": enc2026, + "csBig5": enc2026, + "csbig5": enc2026, + "macintosh": enc2027, + "mac": enc2027, + "csMacintosh": enc2027, + "csmacintosh": enc2027, + "IBM037": enc2028, + "ibm037": enc2028, + "cp037": enc2028, + "ebcdic-cp-us": enc2028, + "ebcdic-cp-ca": enc2028, + "ebcdic-cp-wt": enc2028, + "ebcdic-cp-nl": enc2028, + "csIBM037": enc2028, + "csibm037": enc2028, + "IBM038": enc2029, + "ibm038": enc2029, + "EBCDIC-INT": enc2029, + "ebcdic-int": enc2029, + "cp038": enc2029, + "csIBM038": enc2029, + "csibm038": enc2029, + "IBM273": enc2030, + "ibm273": enc2030, + "CP273": enc2030, + "cp273": enc2030, + "csIBM273": enc2030, + "csibm273": enc2030, + "IBM274": enc2031, + "ibm274": enc2031, + "EBCDIC-BE": enc2031, + "ebcdic-be": enc2031, + "CP274": enc2031, + "cp274": enc2031, + "csIBM274": enc2031, + "csibm274": enc2031, + "IBM275": enc2032, + "ibm275": enc2032, + "EBCDIC-BR": enc2032, + "ebcdic-br": enc2032, + "cp275": enc2032, + "csIBM275": enc2032, + "csibm275": enc2032, + "IBM277": enc2033, + "ibm277": enc2033, + "EBCDIC-CP-DK": enc2033, + "ebcdic-cp-dk": enc2033, + "EBCDIC-CP-NO": enc2033, + "ebcdic-cp-no": enc2033, + "csIBM277": enc2033, + "csibm277": enc2033, + "IBM278": enc2034, + "ibm278": enc2034, + "CP278": enc2034, + "cp278": enc2034, + "ebcdic-cp-fi": enc2034, + "ebcdic-cp-se": enc2034, + "csIBM278": enc2034, + "csibm278": enc2034, + "IBM280": enc2035, + "ibm280": enc2035, + "CP280": enc2035, + "cp280": enc2035, + "ebcdic-cp-it": enc2035, + "csIBM280": enc2035, + "csibm280": enc2035, + "IBM281": enc2036, + "ibm281": enc2036, + "EBCDIC-JP-E": enc2036, + "ebcdic-jp-e": enc2036, + "cp281": enc2036, + "csIBM281": enc2036, + "csibm281": enc2036, + "IBM284": enc2037, + "ibm284": enc2037, + "CP284": enc2037, + "cp284": enc2037, + "ebcdic-cp-es": enc2037, + "csIBM284": enc2037, + "csibm284": enc2037, + "IBM285": enc2038, + "ibm285": enc2038, + "CP285": enc2038, + "cp285": enc2038, + "ebcdic-cp-gb": enc2038, + "csIBM285": enc2038, + "csibm285": enc2038, + "IBM290": enc2039, + "ibm290": enc2039, + "cp290": enc2039, + "EBCDIC-JP-kana": enc2039, + "ebcdic-jp-kana": enc2039, + "csIBM290": enc2039, + "csibm290": enc2039, + "IBM297": enc2040, + "ibm297": enc2040, + "cp297": enc2040, + "ebcdic-cp-fr": enc2040, + "csIBM297": enc2040, + "csibm297": enc2040, + "IBM420": enc2041, + "ibm420": enc2041, + "cp420": enc2041, + "ebcdic-cp-ar1": enc2041, + "csIBM420": enc2041, + "csibm420": enc2041, + "IBM423": enc2042, + "ibm423": enc2042, + "cp423": enc2042, + "ebcdic-cp-gr": enc2042, + "csIBM423": enc2042, + "csibm423": enc2042, + "IBM424": enc2043, + "ibm424": enc2043, + "cp424": enc2043, + "ebcdic-cp-he": enc2043, + "csIBM424": enc2043, + "csibm424": enc2043, + "IBM437": enc2011, + "ibm437": enc2011, + "cp437": enc2011, + "437": enc2011, + "csPC8CodePage437": enc2011, + "cspc8codepage437": enc2011, + "IBM500": enc2044, + "ibm500": enc2044, + "CP500": enc2044, + "cp500": enc2044, + "ebcdic-cp-be": enc2044, + "ebcdic-cp-ch": enc2044, + "csIBM500": enc2044, + "csibm500": enc2044, + "IBM851": enc2045, + "ibm851": enc2045, + "cp851": enc2045, + "851": enc2045, + "csIBM851": enc2045, + "csibm851": enc2045, + "IBM852": enc2010, + "ibm852": enc2010, + "cp852": enc2010, + "852": enc2010, + "csPCp852": enc2010, + "cspcp852": enc2010, + "IBM855": enc2046, + "ibm855": enc2046, + "cp855": enc2046, + "855": enc2046, + "csIBM855": enc2046, + "csibm855": enc2046, + "IBM857": enc2047, + "ibm857": enc2047, + "cp857": enc2047, + "857": enc2047, + "csIBM857": enc2047, + "csibm857": enc2047, + "IBM860": enc2048, + "ibm860": enc2048, + "cp860": enc2048, + "860": enc2048, + "csIBM860": enc2048, + "csibm860": enc2048, + "IBM861": enc2049, + "ibm861": enc2049, + "cp861": enc2049, + "861": enc2049, + "cp-is": enc2049, + "csIBM861": enc2049, + "csibm861": enc2049, + "IBM863": enc2050, + "ibm863": enc2050, + "cp863": enc2050, + "863": enc2050, + "csIBM863": enc2050, + "csibm863": enc2050, + "IBM864": enc2051, + "ibm864": enc2051, + "cp864": enc2051, + "csIBM864": enc2051, + "csibm864": enc2051, + "IBM865": enc2052, + "ibm865": enc2052, + "cp865": enc2052, + "865": enc2052, + "csIBM865": enc2052, + "csibm865": enc2052, + "IBM868": enc2053, + "ibm868": enc2053, + "CP868": enc2053, + "cp868": enc2053, + "cp-ar": enc2053, + "csIBM868": enc2053, + "csibm868": enc2053, + "IBM869": enc2054, + "ibm869": enc2054, + "cp869": enc2054, + "869": enc2054, + "cp-gr": enc2054, + "csIBM869": enc2054, + "csibm869": enc2054, + "IBM870": enc2055, + "ibm870": enc2055, + "CP870": enc2055, + "cp870": enc2055, + "ebcdic-cp-roece": enc2055, + "ebcdic-cp-yu": enc2055, + "csIBM870": enc2055, + "csibm870": enc2055, + "IBM871": enc2056, + "ibm871": enc2056, + "CP871": enc2056, + "cp871": enc2056, + "ebcdic-cp-is": enc2056, + "csIBM871": enc2056, + "csibm871": enc2056, + "IBM880": enc2057, + "ibm880": enc2057, + "cp880": enc2057, + "EBCDIC-Cyrillic": enc2057, + "ebcdic-cyrillic": enc2057, + "csIBM880": enc2057, + "csibm880": enc2057, + "IBM891": enc2058, + "ibm891": enc2058, + "cp891": enc2058, + "csIBM891": enc2058, + "csibm891": enc2058, + "IBM903": enc2059, + "ibm903": enc2059, + "cp903": enc2059, + "csIBM903": enc2059, + "csibm903": enc2059, + "IBM904": enc2060, + "ibm904": enc2060, + "cp904": enc2060, + "904": enc2060, + "csIBBM904": enc2060, + "csibbm904": enc2060, + "IBM905": enc2061, + "ibm905": enc2061, + "CP905": enc2061, + "cp905": enc2061, + "ebcdic-cp-tr": enc2061, + "csIBM905": enc2061, + "csibm905": enc2061, + "IBM918": enc2062, + "ibm918": enc2062, + "CP918": enc2062, + "cp918": enc2062, + "ebcdic-cp-ar2": enc2062, + "csIBM918": enc2062, + "csibm918": enc2062, + "IBM1026": enc2063, + "ibm1026": enc2063, + "CP1026": enc2063, + "cp1026": enc2063, + "csIBM1026": enc2063, + "csibm1026": enc2063, + "EBCDIC-AT-DE": enc2064, + "ebcdic-at-de": enc2064, + "csIBMEBCDICATDE": enc2064, + "csibmebcdicatde": enc2064, + "EBCDIC-AT-DE-A": enc2065, + "ebcdic-at-de-a": enc2065, + "csEBCDICATDEA": enc2065, + "csebcdicatdea": enc2065, + "EBCDIC-CA-FR": enc2066, + "ebcdic-ca-fr": enc2066, + "csEBCDICCAFR": enc2066, + "csebcdiccafr": enc2066, + "EBCDIC-DK-NO": enc2067, + "ebcdic-dk-no": enc2067, + "csEBCDICDKNO": enc2067, + "csebcdicdkno": enc2067, + "EBCDIC-DK-NO-A": enc2068, + "ebcdic-dk-no-a": enc2068, + "csEBCDICDKNOA": enc2068, + "csebcdicdknoa": enc2068, + "EBCDIC-FI-SE": enc2069, + "ebcdic-fi-se": enc2069, + "csEBCDICFISE": enc2069, + "csebcdicfise": enc2069, + "EBCDIC-FI-SE-A": enc2070, + "ebcdic-fi-se-a": enc2070, + "csEBCDICFISEA": enc2070, + "csebcdicfisea": enc2070, + "EBCDIC-FR": enc2071, + "ebcdic-fr": enc2071, + "csEBCDICFR": enc2071, + "csebcdicfr": enc2071, + "EBCDIC-IT": enc2072, + "ebcdic-it": enc2072, + "csEBCDICIT": enc2072, + "csebcdicit": enc2072, + "EBCDIC-PT": enc2073, + "ebcdic-pt": enc2073, + "csEBCDICPT": enc2073, + "csebcdicpt": enc2073, + "EBCDIC-ES": enc2074, + "ebcdic-es": enc2074, + "csEBCDICES": enc2074, + "csebcdices": enc2074, + "EBCDIC-ES-A": enc2075, + "ebcdic-es-a": enc2075, + "csEBCDICESA": enc2075, + "csebcdicesa": enc2075, + "EBCDIC-ES-S": enc2076, + "ebcdic-es-s": enc2076, + "csEBCDICESS": enc2076, + "csebcdicess": enc2076, + "EBCDIC-UK": enc2077, + "ebcdic-uk": enc2077, + "csEBCDICUK": enc2077, + "csebcdicuk": enc2077, + "EBCDIC-US": enc2078, + "ebcdic-us": enc2078, + "csEBCDICUS": enc2078, + "csebcdicus": enc2078, + "UNKNOWN-8BIT": enc2079, + "unknown-8bit": enc2079, + "csUnknown8BiT": enc2079, + "csunknown8bit": enc2079, + "MNEMONIC": enc2080, + "mnemonic": enc2080, + "csMnemonic": enc2080, + "csmnemonic": enc2080, + "MNEM": enc2081, + "mnem": enc2081, + "csMnem": enc2081, + "csmnem": enc2081, + "VISCII": enc2082, + "viscii": enc2082, + "csVISCII": enc2082, + "csviscii": enc2082, + "VIQR": enc2083, + "viqr": enc2083, + "csVIQR": enc2083, + "csviqr": enc2083, + "KOI8-R": enc2084, + "koi8-r": enc2084, + "csKOI8R": enc2084, + "cskoi8r": enc2084, + "HZ-GB-2312": enc2085, + "hz-gb-2312": enc2085, + "IBM866": enc2086, + "ibm866": enc2086, + "cp866": enc2086, + "866": enc2086, + "csIBM866": enc2086, + "csibm866": enc2086, + "IBM775": enc2087, + "ibm775": enc2087, + "cp775": enc2087, + "csPC775Baltic": enc2087, + "cspc775baltic": enc2087, + "KOI8-U": enc2088, + "koi8-u": enc2088, + "csKOI8U": enc2088, + "cskoi8u": enc2088, + "IBM00858": enc2089, + "ibm00858": enc2089, + "CCSID00858": enc2089, + "ccsid00858": enc2089, + "CP00858": enc2089, + "cp00858": enc2089, + "PC-Multilingual-850+euro": enc2089, + "pc-multilingual-850+euro": enc2089, + "csIBM00858": enc2089, + "csibm00858": enc2089, + "IBM00924": enc2090, + "ibm00924": enc2090, + "CCSID00924": enc2090, + "ccsid00924": enc2090, + "CP00924": enc2090, + "cp00924": enc2090, + "ebcdic-Latin9--euro": enc2090, + "ebcdic-latin9--euro": enc2090, + "csIBM00924": enc2090, + "csibm00924": enc2090, + "IBM01140": enc2091, + "ibm01140": enc2091, + "CCSID01140": enc2091, + "ccsid01140": enc2091, + "CP01140": enc2091, + "cp01140": enc2091, + "ebcdic-us-37+euro": enc2091, + "csIBM01140": enc2091, + "csibm01140": enc2091, + "IBM01141": enc2092, + "ibm01141": enc2092, + "CCSID01141": enc2092, + "ccsid01141": enc2092, + "CP01141": enc2092, + "cp01141": enc2092, + "ebcdic-de-273+euro": enc2092, + "csIBM01141": enc2092, + "csibm01141": enc2092, + "IBM01142": enc2093, + "ibm01142": enc2093, + "CCSID01142": enc2093, + "ccsid01142": enc2093, + "CP01142": enc2093, + "cp01142": enc2093, + "ebcdic-dk-277+euro": enc2093, + "ebcdic-no-277+euro": enc2093, + "csIBM01142": enc2093, + "csibm01142": enc2093, + "IBM01143": enc2094, + "ibm01143": enc2094, + "CCSID01143": enc2094, + "ccsid01143": enc2094, + "CP01143": enc2094, + "cp01143": enc2094, + "ebcdic-fi-278+euro": enc2094, + "ebcdic-se-278+euro": enc2094, + "csIBM01143": enc2094, + "csibm01143": enc2094, + "IBM01144": enc2095, + "ibm01144": enc2095, + "CCSID01144": enc2095, + "ccsid01144": enc2095, + "CP01144": enc2095, + "cp01144": enc2095, + "ebcdic-it-280+euro": enc2095, + "csIBM01144": enc2095, + "csibm01144": enc2095, + "IBM01145": enc2096, + "ibm01145": enc2096, + "CCSID01145": enc2096, + "ccsid01145": enc2096, + "CP01145": enc2096, + "cp01145": enc2096, + "ebcdic-es-284+euro": enc2096, + "csIBM01145": enc2096, + "csibm01145": enc2096, + "IBM01146": enc2097, + "ibm01146": enc2097, + "CCSID01146": enc2097, + "ccsid01146": enc2097, + "CP01146": enc2097, + "cp01146": enc2097, + "ebcdic-gb-285+euro": enc2097, + "csIBM01146": enc2097, + "csibm01146": enc2097, + "IBM01147": enc2098, + "ibm01147": enc2098, + "CCSID01147": enc2098, + "ccsid01147": enc2098, + "CP01147": enc2098, + "cp01147": enc2098, + "ebcdic-fr-297+euro": enc2098, + "csIBM01147": enc2098, + "csibm01147": enc2098, + "IBM01148": enc2099, + "ibm01148": enc2099, + "CCSID01148": enc2099, + "ccsid01148": enc2099, + "CP01148": enc2099, + "cp01148": enc2099, + "ebcdic-international-500+euro": enc2099, + "csIBM01148": enc2099, + "csibm01148": enc2099, + "IBM01149": enc2100, + "ibm01149": enc2100, + "CCSID01149": enc2100, + "ccsid01149": enc2100, + "CP01149": enc2100, + "cp01149": enc2100, + "ebcdic-is-871+euro": enc2100, + "csIBM01149": enc2100, + "csibm01149": enc2100, + "Big5-HKSCS": enc2101, + "big5-hkscs": enc2101, + "csBig5HKSCS": enc2101, + "csbig5hkscs": enc2101, + "IBM1047": enc2102, + "ibm1047": enc2102, + "IBM-1047": enc2102, + "ibm-1047": enc2102, + "csIBM1047": enc2102, + "csibm1047": enc2102, + "PTCP154": enc2103, + "ptcp154": enc2103, + "csPTCP154": enc2103, + "csptcp154": enc2103, + "PT154": enc2103, + "pt154": enc2103, + "CP154": enc2103, + "cp154": enc2103, + "Cyrillic-Asian": enc2103, + "cyrillic-asian": enc2103, + "Amiga-1251": enc2104, + "amiga-1251": enc2104, + "Ami1251": enc2104, + "ami1251": enc2104, + "Amiga1251": enc2104, + "amiga1251": enc2104, + "Ami-1251": enc2104, + "ami-1251": enc2104, + "csAmiga1251\n(Aliases": enc2104, + "csamiga1251\n(aliases": enc2104, + "KOI7-switched": enc2105, + "koi7-switched": enc2105, + "csKOI7switched": enc2105, + "cskoi7switched": enc2105, + "BRF": enc2106, + "brf": enc2106, + "csBRF": enc2106, + "csbrf": enc2106, + "TSCII": enc2107, + "tscii": enc2107, + "csTSCII": enc2107, + "cstscii": enc2107, + "CP51932": enc2108, + "cp51932": enc2108, + "csCP51932": enc2108, + "cscp51932": enc2108, + "windows-874": enc2109, + "cswindows874": enc2109, + "windows-1250": enc2250, + "cswindows1250": enc2250, + "windows-1251": enc2251, + "cswindows1251": enc2251, + "windows-1252": enc2252, + "cswindows1252": enc2252, + "windows-1253": enc2253, + "cswindows1253": enc2253, + "windows-1254": enc2254, + "cswindows1254": enc2254, + "windows-1255": enc2255, + "cswindows1255": enc2255, + "windows-1256": enc2256, + "cswindows1256": enc2256, + "windows-1257": enc2257, + "cswindows1257": enc2257, + "windows-1258": enc2258, + "cswindows1258": enc2258, + "TIS-620": enc2259, + "tis-620": enc2259, + "csTIS620": enc2259, + "cstis620": enc2259, + "ISO-8859-11": enc2259, + "iso-8859-11": enc2259, + "CP50220": enc2260, + "cp50220": enc2260, + "csCP50220": enc2260, + "cscp50220": enc2260, +} + +// Total table size 14402 bytes (14KiB); checksum: CEBAA10C diff --git a/vendor/golang.org/x/text/encoding/internal/enctest/enctest.go b/vendor/golang.org/x/text/encoding/internal/enctest/enctest.go new file mode 100644 index 0000000..0cccae0 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/internal/enctest/enctest.go @@ -0,0 +1,180 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package enctest + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "strings" + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// Encoder or Decoder +type Transcoder interface { + transform.Transformer + Bytes([]byte) ([]byte, error) + String(string) (string, error) +} + +func TestEncoding(t *testing.T, e encoding.Encoding, encoded, utf8, prefix, suffix string) { + for _, direction := range []string{"Decode", "Encode"} { + t.Run(fmt.Sprintf("%v/%s", e, direction), func(t *testing.T) { + + var coder Transcoder + var want, src, wPrefix, sPrefix, wSuffix, sSuffix string + if direction == "Decode" { + coder, want, src = e.NewDecoder(), utf8, encoded + wPrefix, sPrefix, wSuffix, sSuffix = "", prefix, "", suffix + } else { + coder, want, src = e.NewEncoder(), encoded, utf8 + wPrefix, sPrefix, wSuffix, sSuffix = prefix, "", suffix, "" + } + + dst := make([]byte, len(wPrefix)+len(want)+len(wSuffix)) + nDst, nSrc, err := coder.Transform(dst, []byte(sPrefix+src+sSuffix), true) + if err != nil { + t.Fatal(err) + } + if nDst != len(wPrefix)+len(want)+len(wSuffix) { + t.Fatalf("nDst got %d, want %d", + nDst, len(wPrefix)+len(want)+len(wSuffix)) + } + if nSrc != len(sPrefix)+len(src)+len(sSuffix) { + t.Fatalf("nSrc got %d, want %d", + nSrc, len(sPrefix)+len(src)+len(sSuffix)) + } + if got := string(dst); got != wPrefix+want+wSuffix { + t.Fatalf("\ngot %q\nwant %q", got, wPrefix+want+wSuffix) + } + + for _, n := range []int{0, 1, 2, 10, 123, 4567} { + input := sPrefix + strings.Repeat(src, n) + sSuffix + g, err := coder.String(input) + if err != nil { + t.Fatalf("Bytes: n=%d: %v", n, err) + } + if len(g) == 0 && len(input) == 0 { + // If the input is empty then the output can be empty, + // regardless of whatever wPrefix is. + continue + } + got1, want1 := string(g), wPrefix+strings.Repeat(want, n)+wSuffix + if got1 != want1 { + t.Fatalf("ReadAll: n=%d\ngot %q\nwant %q", + n, trim(got1), trim(want1)) + } + } + }) + } +} + +func TestFile(t *testing.T, e encoding.Encoding) { + for _, dir := range []string{"Decode", "Encode"} { + t.Run(fmt.Sprintf("%s/%s", e, dir), func(t *testing.T) { + dst, src, transformer, err := load(dir, e) + if err != nil { + t.Fatalf("load: %v", err) + } + buf, err := transformer.Bytes(src) + if err != nil { + t.Fatalf("transform: %v", err) + } + if !bytes.Equal(buf, dst) { + t.Error("transformed bytes did not match golden file") + } + }) + } +} + +func Benchmark(b *testing.B, enc encoding.Encoding) { + for _, direction := range []string{"Decode", "Encode"} { + b.Run(fmt.Sprintf("%s/%s", enc, direction), func(b *testing.B) { + _, src, transformer, err := load(direction, enc) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(src))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + r := transform.NewReader(bytes.NewReader(src), transformer) + io.Copy(ioutil.Discard, r) + } + }) + } +} + +// testdataFiles are files in testdata/*.txt. +var testdataFiles = []struct { + mib identifier.MIB + basename, ext string +}{ + {identifier.Windows1252, "candide", "windows-1252"}, + {identifier.EUCPkdFmtJapanese, "rashomon", "euc-jp"}, + {identifier.ISO2022JP, "rashomon", "iso-2022-jp"}, + {identifier.ShiftJIS, "rashomon", "shift-jis"}, + {identifier.EUCKR, "unsu-joh-eun-nal", "euc-kr"}, + {identifier.GBK, "sunzi-bingfa-simplified", "gbk"}, + {identifier.HZGB2312, "sunzi-bingfa-gb-levels-1-and-2", "hz-gb2312"}, + {identifier.Big5, "sunzi-bingfa-traditional", "big5"}, + {identifier.UTF16LE, "candide", "utf-16le"}, + {identifier.UTF8, "candide", "utf-8"}, + {identifier.UTF32BE, "candide", "utf-32be"}, + + // GB18030 is a superset of GBK and is nominally a Simplified Chinese + // encoding, but it can also represent the entire Basic Multilingual + // Plane, including codepoints like 'â' that aren't encodable by GBK. + // GB18030 on Simplified Chinese should perform similarly to GBK on + // Simplified Chinese. GB18030 on "candide" is more interesting. + {identifier.GB18030, "candide", "gb18030"}, +} + +func load(direction string, enc encoding.Encoding) ([]byte, []byte, Transcoder, error) { + basename, ext, count := "", "", 0 + for _, tf := range testdataFiles { + if mib, _ := enc.(identifier.Interface).ID(); tf.mib == mib { + basename, ext = tf.basename, tf.ext + count++ + } + } + if count != 1 { + if count == 0 { + return nil, nil, nil, fmt.Errorf("no testdataFiles for %s", enc) + } + return nil, nil, nil, fmt.Errorf("too many testdataFiles for %s", enc) + } + dstFile := fmt.Sprintf("../testdata/%s-%s.txt", basename, ext) + srcFile := fmt.Sprintf("../testdata/%s-utf-8.txt", basename) + var coder Transcoder = encoding.ReplaceUnsupported(enc.NewEncoder()) + if direction == "Decode" { + dstFile, srcFile = srcFile, dstFile + coder = enc.NewDecoder() + } + dst, err := ioutil.ReadFile(dstFile) + if err != nil { + if dst, err = ioutil.ReadFile("../" + dstFile); err != nil { + return nil, nil, nil, err + } + } + src, err := ioutil.ReadFile(srcFile) + if err != nil { + if src, err = ioutil.ReadFile("../" + srcFile); err != nil { + return nil, nil, nil, err + } + } + return dst, src, coder, nil +} + +func trim(s string) string { + if len(s) < 120 { + return s + } + return s[:50] + "..." + s[len(s)-50:] +} diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/gen.go b/vendor/golang.org/x/text/encoding/internal/identifier/gen.go new file mode 100644 index 0000000..0c8eba7 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/internal/identifier/gen.go @@ -0,0 +1,137 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "bytes" + "encoding/xml" + "fmt" + "io" + "log" + "strings" + + "golang.org/x/text/internal/gen" +) + +type registry struct { + XMLName xml.Name `xml:"registry"` + Updated string `xml:"updated"` + Registry []struct { + ID string `xml:"id,attr"` + Record []struct { + Name string `xml:"name"` + Xref []struct { + Type string `xml:"type,attr"` + Data string `xml:"data,attr"` + } `xml:"xref"` + Desc struct { + Data string `xml:",innerxml"` + // Any []struct { + // Data string `xml:",chardata"` + // } `xml:",any"` + // Data string `xml:",chardata"` + } `xml:"description,"` + MIB string `xml:"value"` + Alias []string `xml:"alias"` + MIME string `xml:"preferred_alias"` + } `xml:"record"` + } `xml:"registry"` +} + +func main() { + r := gen.OpenIANAFile("assignments/character-sets/character-sets.xml") + reg := ®istry{} + if err := xml.NewDecoder(r).Decode(®); err != nil && err != io.EOF { + log.Fatalf("Error decoding charset registry: %v", err) + } + if len(reg.Registry) == 0 || reg.Registry[0].ID != "character-sets-1" { + log.Fatalf("Unexpected ID %s", reg.Registry[0].ID) + } + + w := &bytes.Buffer{} + fmt.Fprintf(w, "const (\n") + for _, rec := range reg.Registry[0].Record { + constName := "" + for _, a := range rec.Alias { + if strings.HasPrefix(a, "cs") && strings.IndexByte(a, '-') == -1 { + // Some of the constant definitions have comments in them. Strip those. + constName = strings.Title(strings.SplitN(a[2:], "\n", 2)[0]) + } + } + if constName == "" { + switch rec.MIB { + case "2085": + constName = "HZGB2312" // Not listed as alias for some reason. + default: + log.Fatalf("No cs alias defined for %s.", rec.MIB) + } + } + if rec.MIME != "" { + rec.MIME = fmt.Sprintf(" (MIME: %s)", rec.MIME) + } + fmt.Fprintf(w, "// %s is the MIB identifier with IANA name %s%s.\n//\n", constName, rec.Name, rec.MIME) + if len(rec.Desc.Data) > 0 { + fmt.Fprint(w, "// ") + d := xml.NewDecoder(strings.NewReader(rec.Desc.Data)) + inElem := true + attr := "" + for { + t, err := d.Token() + if err != nil { + if err != io.EOF { + log.Fatal(err) + } + break + } + switch x := t.(type) { + case xml.CharData: + attr = "" // Don't need attribute info. + a := bytes.Split([]byte(x), []byte("\n")) + for i, b := range a { + if b = bytes.TrimSpace(b); len(b) != 0 { + if !inElem && i > 0 { + fmt.Fprint(w, "\n// ") + } + inElem = false + fmt.Fprintf(w, "%s ", string(b)) + } + } + case xml.StartElement: + if x.Name.Local == "xref" { + inElem = true + use := false + for _, a := range x.Attr { + if a.Name.Local == "type" { + use = use || a.Value != "person" + } + if a.Name.Local == "data" && use { + attr = a.Value + " " + } + } + } + case xml.EndElement: + inElem = false + fmt.Fprint(w, attr) + } + } + fmt.Fprint(w, "\n") + } + for _, x := range rec.Xref { + switch x.Type { + case "rfc": + fmt.Fprintf(w, "// Reference: %s\n", strings.ToUpper(x.Data)) + case "uri": + fmt.Fprintf(w, "// Reference: %s\n", x.Data) + } + } + fmt.Fprintf(w, "%s MIB = %s\n", constName, rec.MIB) + fmt.Fprintln(w) + } + fmt.Fprintln(w, ")") + + gen.WriteGoFile("mib.go", "identifier", w.Bytes()) +} diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go b/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go new file mode 100644 index 0000000..7351b4e --- /dev/null +++ b/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go @@ -0,0 +1,81 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package identifier defines the contract between implementations of Encoding +// and Index by defining identifiers that uniquely identify standardized coded +// character sets (CCS) and character encoding schemes (CES), which we will +// together refer to as encodings, for which Encoding implementations provide +// converters to and from UTF-8. This package is typically only of concern to +// implementers of Indexes and Encodings. +// +// One part of the identifier is the MIB code, which is defined by IANA and +// uniquely identifies a CCS or CES. Each code is associated with data that +// references authorities, official documentation as well as aliases and MIME +// names. +// +// Not all CESs are covered by the IANA registry. The "other" string that is +// returned by ID can be used to identify other character sets or versions of +// existing ones. +// +// It is recommended that each package that provides a set of Encodings provide +// the All and Common variables to reference all supported encodings and +// commonly used subset. This allows Index implementations to include all +// available encodings without explicitly referencing or knowing about them. +package identifier + +// Note: this package is internal, but could be made public if there is a need +// for writing third-party Indexes and Encodings. + +// References: +// - http://source.icu-project.org/repos/icu/icu/trunk/source/data/mappings/convrtrs.txt +// - http://www.iana.org/assignments/character-sets/character-sets.xhtml +// - http://www.iana.org/assignments/ianacharset-mib/ianacharset-mib +// - http://www.ietf.org/rfc/rfc2978.txt +// - http://www.unicode.org/reports/tr22/ +// - http://www.w3.org/TR/encoding/ +// - https://encoding.spec.whatwg.org/ +// - https://encoding.spec.whatwg.org/encodings.json +// - https://tools.ietf.org/html/rfc6657#section-5 + +// Interface can be implemented by Encodings to define the CCS or CES for which +// it implements conversions. +type Interface interface { + // ID returns an encoding identifier. Exactly one of the mib and other + // values should be non-zero. + // + // In the usual case it is only necessary to indicate the MIB code. The + // other string can be used to specify encodings for which there is no MIB, + // such as "x-mac-dingbat". + // + // The other string may only contain the characters a-z, A-Z, 0-9, - and _. + ID() (mib MIB, other string) + + // NOTE: the restrictions on the encoding are to allow extending the syntax + // with additional information such as versions, vendors and other variants. +} + +// A MIB identifies an encoding. It is derived from the IANA MIB codes and adds +// some identifiers for some encodings that are not covered by the IANA +// standard. +// +// See http://www.iana.org/assignments/ianacharset-mib. +type MIB uint16 + +// These additional MIB types are not defined in IANA. They are added because +// they are common and defined within the text repo. +const ( + // Unofficial marks the start of encodings not registered by IANA. + Unofficial MIB = 10000 + iota + + // Replacement is the WhatWG replacement encoding. + Replacement + + // XUserDefined is the code for x-user-defined. + XUserDefined + + // MacintoshCyrillic is the code for x-mac-cyrillic. + MacintoshCyrillic +) diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/mib.go b/vendor/golang.org/x/text/encoding/internal/identifier/mib.go new file mode 100644 index 0000000..768842b --- /dev/null +++ b/vendor/golang.org/x/text/encoding/internal/identifier/mib.go @@ -0,0 +1,1621 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package identifier + +const ( + // ASCII is the MIB identifier with IANA name US-ASCII (MIME: US-ASCII). + // + // ANSI X3.4-1986 + // Reference: RFC2046 + ASCII MIB = 3 + + // ISOLatin1 is the MIB identifier with IANA name ISO_8859-1:1987 (MIME: ISO-8859-1). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin1 MIB = 4 + + // ISOLatin2 is the MIB identifier with IANA name ISO_8859-2:1987 (MIME: ISO-8859-2). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin2 MIB = 5 + + // ISOLatin3 is the MIB identifier with IANA name ISO_8859-3:1988 (MIME: ISO-8859-3). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin3 MIB = 6 + + // ISOLatin4 is the MIB identifier with IANA name ISO_8859-4:1988 (MIME: ISO-8859-4). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin4 MIB = 7 + + // ISOLatinCyrillic is the MIB identifier with IANA name ISO_8859-5:1988 (MIME: ISO-8859-5). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatinCyrillic MIB = 8 + + // ISOLatinArabic is the MIB identifier with IANA name ISO_8859-6:1987 (MIME: ISO-8859-6). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatinArabic MIB = 9 + + // ISOLatinGreek is the MIB identifier with IANA name ISO_8859-7:1987 (MIME: ISO-8859-7). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1947 + // Reference: RFC1345 + ISOLatinGreek MIB = 10 + + // ISOLatinHebrew is the MIB identifier with IANA name ISO_8859-8:1988 (MIME: ISO-8859-8). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatinHebrew MIB = 11 + + // ISOLatin5 is the MIB identifier with IANA name ISO_8859-9:1989 (MIME: ISO-8859-9). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin5 MIB = 12 + + // ISOLatin6 is the MIB identifier with IANA name ISO-8859-10 (MIME: ISO-8859-10). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin6 MIB = 13 + + // ISOTextComm is the MIB identifier with IANA name ISO_6937-2-add. + // + // ISO-IR: International Register of Escape Sequences and ISO 6937-2:1983 + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOTextComm MIB = 14 + + // HalfWidthKatakana is the MIB identifier with IANA name JIS_X0201. + // + // JIS X 0201-1976. One byte only, this is equivalent to + // JIS/Roman (similar to ASCII) plus eight-bit half-width + // Katakana + // Reference: RFC1345 + HalfWidthKatakana MIB = 15 + + // JISEncoding is the MIB identifier with IANA name JIS_Encoding. + // + // JIS X 0202-1991. Uses ISO 2022 escape sequences to + // shift code sets as documented in JIS X 0202-1991. + JISEncoding MIB = 16 + + // ShiftJIS is the MIB identifier with IANA name Shift_JIS (MIME: Shift_JIS). + // + // This charset is an extension of csHalfWidthKatakana by + // adding graphic characters in JIS X 0208. The CCS's are + // JIS X0201:1997 and JIS X0208:1997. The + // complete definition is shown in Appendix 1 of JIS + // X0208:1997. + // This charset can be used for the top-level media type "text". + ShiftJIS MIB = 17 + + // EUCPkdFmtJapanese is the MIB identifier with IANA name Extended_UNIX_Code_Packed_Format_for_Japanese (MIME: EUC-JP). + // + // Standardized by OSF, UNIX International, and UNIX Systems + // Laboratories Pacific. Uses ISO 2022 rules to select + // code set 0: US-ASCII (a single 7-bit byte set) + // code set 1: JIS X0208-1990 (a double 8-bit byte set) + // restricted to A0-FF in both bytes + // code set 2: Half Width Katakana (a single 7-bit byte set) + // requiring SS2 as the character prefix + // code set 3: JIS X0212-1990 (a double 7-bit byte set) + // restricted to A0-FF in both bytes + // requiring SS3 as the character prefix + EUCPkdFmtJapanese MIB = 18 + + // EUCFixWidJapanese is the MIB identifier with IANA name Extended_UNIX_Code_Fixed_Width_for_Japanese. + // + // Used in Japan. Each character is 2 octets. + // code set 0: US-ASCII (a single 7-bit byte set) + // 1st byte = 00 + // 2nd byte = 20-7E + // code set 1: JIS X0208-1990 (a double 7-bit byte set) + // restricted to A0-FF in both bytes + // code set 2: Half Width Katakana (a single 7-bit byte set) + // 1st byte = 00 + // 2nd byte = A0-FF + // code set 3: JIS X0212-1990 (a double 7-bit byte set) + // restricted to A0-FF in + // the first byte + // and 21-7E in the second byte + EUCFixWidJapanese MIB = 19 + + // ISO4UnitedKingdom is the MIB identifier with IANA name BS_4730. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO4UnitedKingdom MIB = 20 + + // ISO11SwedishForNames is the MIB identifier with IANA name SEN_850200_C. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO11SwedishForNames MIB = 21 + + // ISO15Italian is the MIB identifier with IANA name IT. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO15Italian MIB = 22 + + // ISO17Spanish is the MIB identifier with IANA name ES. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO17Spanish MIB = 23 + + // ISO21German is the MIB identifier with IANA name DIN_66003. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO21German MIB = 24 + + // ISO60Norwegian1 is the MIB identifier with IANA name NS_4551-1. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO60Norwegian1 MIB = 25 + + // ISO69French is the MIB identifier with IANA name NF_Z_62-010. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO69French MIB = 26 + + // ISO10646UTF1 is the MIB identifier with IANA name ISO-10646-UTF-1. + // + // Universal Transfer Format (1), this is the multibyte + // encoding, that subsets ASCII-7. It does not have byte + // ordering issues. + ISO10646UTF1 MIB = 27 + + // ISO646basic1983 is the MIB identifier with IANA name ISO_646.basic:1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO646basic1983 MIB = 28 + + // INVARIANT is the MIB identifier with IANA name INVARIANT. + // + // Reference: RFC1345 + INVARIANT MIB = 29 + + // ISO2IntlRefVersion is the MIB identifier with IANA name ISO_646.irv:1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO2IntlRefVersion MIB = 30 + + // NATSSEFI is the MIB identifier with IANA name NATS-SEFI. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + NATSSEFI MIB = 31 + + // NATSSEFIADD is the MIB identifier with IANA name NATS-SEFI-ADD. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + NATSSEFIADD MIB = 32 + + // NATSDANO is the MIB identifier with IANA name NATS-DANO. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + NATSDANO MIB = 33 + + // NATSDANOADD is the MIB identifier with IANA name NATS-DANO-ADD. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + NATSDANOADD MIB = 34 + + // ISO10Swedish is the MIB identifier with IANA name SEN_850200_B. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO10Swedish MIB = 35 + + // KSC56011987 is the MIB identifier with IANA name KS_C_5601-1987. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + KSC56011987 MIB = 36 + + // ISO2022KR is the MIB identifier with IANA name ISO-2022-KR (MIME: ISO-2022-KR). + // + // rfc1557 (see also KS_C_5601-1987) + // Reference: RFC1557 + ISO2022KR MIB = 37 + + // EUCKR is the MIB identifier with IANA name EUC-KR (MIME: EUC-KR). + // + // rfc1557 (see also KS_C_5861-1992) + // Reference: RFC1557 + EUCKR MIB = 38 + + // ISO2022JP is the MIB identifier with IANA name ISO-2022-JP (MIME: ISO-2022-JP). + // + // rfc1468 (see also rfc2237 ) + // Reference: RFC1468 + ISO2022JP MIB = 39 + + // ISO2022JP2 is the MIB identifier with IANA name ISO-2022-JP-2 (MIME: ISO-2022-JP-2). + // + // rfc1554 + // Reference: RFC1554 + ISO2022JP2 MIB = 40 + + // ISO13JISC6220jp is the MIB identifier with IANA name JIS_C6220-1969-jp. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO13JISC6220jp MIB = 41 + + // ISO14JISC6220ro is the MIB identifier with IANA name JIS_C6220-1969-ro. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO14JISC6220ro MIB = 42 + + // ISO16Portuguese is the MIB identifier with IANA name PT. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO16Portuguese MIB = 43 + + // ISO18Greek7Old is the MIB identifier with IANA name greek7-old. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO18Greek7Old MIB = 44 + + // ISO19LatinGreek is the MIB identifier with IANA name latin-greek. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO19LatinGreek MIB = 45 + + // ISO25French is the MIB identifier with IANA name NF_Z_62-010_(1973). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO25French MIB = 46 + + // ISO27LatinGreek1 is the MIB identifier with IANA name Latin-greek-1. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO27LatinGreek1 MIB = 47 + + // ISO5427Cyrillic is the MIB identifier with IANA name ISO_5427. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO5427Cyrillic MIB = 48 + + // ISO42JISC62261978 is the MIB identifier with IANA name JIS_C6226-1978. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO42JISC62261978 MIB = 49 + + // ISO47BSViewdata is the MIB identifier with IANA name BS_viewdata. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO47BSViewdata MIB = 50 + + // ISO49INIS is the MIB identifier with IANA name INIS. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO49INIS MIB = 51 + + // ISO50INIS8 is the MIB identifier with IANA name INIS-8. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO50INIS8 MIB = 52 + + // ISO51INISCyrillic is the MIB identifier with IANA name INIS-cyrillic. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO51INISCyrillic MIB = 53 + + // ISO54271981 is the MIB identifier with IANA name ISO_5427:1981. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO54271981 MIB = 54 + + // ISO5428Greek is the MIB identifier with IANA name ISO_5428:1980. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO5428Greek MIB = 55 + + // ISO57GB1988 is the MIB identifier with IANA name GB_1988-80. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO57GB1988 MIB = 56 + + // ISO58GB231280 is the MIB identifier with IANA name GB_2312-80. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO58GB231280 MIB = 57 + + // ISO61Norwegian2 is the MIB identifier with IANA name NS_4551-2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO61Norwegian2 MIB = 58 + + // ISO70VideotexSupp1 is the MIB identifier with IANA name videotex-suppl. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO70VideotexSupp1 MIB = 59 + + // ISO84Portuguese2 is the MIB identifier with IANA name PT2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO84Portuguese2 MIB = 60 + + // ISO85Spanish2 is the MIB identifier with IANA name ES2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO85Spanish2 MIB = 61 + + // ISO86Hungarian is the MIB identifier with IANA name MSZ_7795.3. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO86Hungarian MIB = 62 + + // ISO87JISX0208 is the MIB identifier with IANA name JIS_C6226-1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO87JISX0208 MIB = 63 + + // ISO88Greek7 is the MIB identifier with IANA name greek7. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO88Greek7 MIB = 64 + + // ISO89ASMO449 is the MIB identifier with IANA name ASMO_449. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO89ASMO449 MIB = 65 + + // ISO90 is the MIB identifier with IANA name iso-ir-90. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO90 MIB = 66 + + // ISO91JISC62291984a is the MIB identifier with IANA name JIS_C6229-1984-a. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO91JISC62291984a MIB = 67 + + // ISO92JISC62991984b is the MIB identifier with IANA name JIS_C6229-1984-b. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO92JISC62991984b MIB = 68 + + // ISO93JIS62291984badd is the MIB identifier with IANA name JIS_C6229-1984-b-add. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO93JIS62291984badd MIB = 69 + + // ISO94JIS62291984hand is the MIB identifier with IANA name JIS_C6229-1984-hand. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO94JIS62291984hand MIB = 70 + + // ISO95JIS62291984handadd is the MIB identifier with IANA name JIS_C6229-1984-hand-add. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO95JIS62291984handadd MIB = 71 + + // ISO96JISC62291984kana is the MIB identifier with IANA name JIS_C6229-1984-kana. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO96JISC62291984kana MIB = 72 + + // ISO2033 is the MIB identifier with IANA name ISO_2033-1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO2033 MIB = 73 + + // ISO99NAPLPS is the MIB identifier with IANA name ANSI_X3.110-1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO99NAPLPS MIB = 74 + + // ISO102T617bit is the MIB identifier with IANA name T.61-7bit. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO102T617bit MIB = 75 + + // ISO103T618bit is the MIB identifier with IANA name T.61-8bit. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO103T618bit MIB = 76 + + // ISO111ECMACyrillic is the MIB identifier with IANA name ECMA-cyrillic. + // + // ISO registry + // (formerly ECMA + // registry ) + ISO111ECMACyrillic MIB = 77 + + // ISO121Canadian1 is the MIB identifier with IANA name CSA_Z243.4-1985-1. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO121Canadian1 MIB = 78 + + // ISO122Canadian2 is the MIB identifier with IANA name CSA_Z243.4-1985-2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO122Canadian2 MIB = 79 + + // ISO123CSAZ24341985gr is the MIB identifier with IANA name CSA_Z243.4-1985-gr. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO123CSAZ24341985gr MIB = 80 + + // ISO88596E is the MIB identifier with IANA name ISO_8859-6-E (MIME: ISO-8859-6-E). + // + // rfc1556 + // Reference: RFC1556 + ISO88596E MIB = 81 + + // ISO88596I is the MIB identifier with IANA name ISO_8859-6-I (MIME: ISO-8859-6-I). + // + // rfc1556 + // Reference: RFC1556 + ISO88596I MIB = 82 + + // ISO128T101G2 is the MIB identifier with IANA name T.101-G2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO128T101G2 MIB = 83 + + // ISO88598E is the MIB identifier with IANA name ISO_8859-8-E (MIME: ISO-8859-8-E). + // + // rfc1556 + // Reference: RFC1556 + ISO88598E MIB = 84 + + // ISO88598I is the MIB identifier with IANA name ISO_8859-8-I (MIME: ISO-8859-8-I). + // + // rfc1556 + // Reference: RFC1556 + ISO88598I MIB = 85 + + // ISO139CSN369103 is the MIB identifier with IANA name CSN_369103. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO139CSN369103 MIB = 86 + + // ISO141JUSIB1002 is the MIB identifier with IANA name JUS_I.B1.002. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO141JUSIB1002 MIB = 87 + + // ISO143IECP271 is the MIB identifier with IANA name IEC_P27-1. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO143IECP271 MIB = 88 + + // ISO146Serbian is the MIB identifier with IANA name JUS_I.B1.003-serb. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO146Serbian MIB = 89 + + // ISO147Macedonian is the MIB identifier with IANA name JUS_I.B1.003-mac. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO147Macedonian MIB = 90 + + // ISO150GreekCCITT is the MIB identifier with IANA name greek-ccitt. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO150GreekCCITT MIB = 91 + + // ISO151Cuba is the MIB identifier with IANA name NC_NC00-10:81. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO151Cuba MIB = 92 + + // ISO6937Add is the MIB identifier with IANA name ISO_6937-2-25. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO6937Add MIB = 93 + + // ISO153GOST1976874 is the MIB identifier with IANA name GOST_19768-74. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO153GOST1976874 MIB = 94 + + // ISO8859Supp is the MIB identifier with IANA name ISO_8859-supp. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO8859Supp MIB = 95 + + // ISO10367Box is the MIB identifier with IANA name ISO_10367-box. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO10367Box MIB = 96 + + // ISO158Lap is the MIB identifier with IANA name latin-lap. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO158Lap MIB = 97 + + // ISO159JISX02121990 is the MIB identifier with IANA name JIS_X0212-1990. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO159JISX02121990 MIB = 98 + + // ISO646Danish is the MIB identifier with IANA name DS_2089. + // + // Danish Standard, DS 2089, February 1974 + // Reference: RFC1345 + ISO646Danish MIB = 99 + + // USDK is the MIB identifier with IANA name us-dk. + // + // Reference: RFC1345 + USDK MIB = 100 + + // DKUS is the MIB identifier with IANA name dk-us. + // + // Reference: RFC1345 + DKUS MIB = 101 + + // KSC5636 is the MIB identifier with IANA name KSC5636. + // + // Reference: RFC1345 + KSC5636 MIB = 102 + + // Unicode11UTF7 is the MIB identifier with IANA name UNICODE-1-1-UTF-7. + // + // rfc1642 + // Reference: RFC1642 + Unicode11UTF7 MIB = 103 + + // ISO2022CN is the MIB identifier with IANA name ISO-2022-CN. + // + // rfc1922 + // Reference: RFC1922 + ISO2022CN MIB = 104 + + // ISO2022CNEXT is the MIB identifier with IANA name ISO-2022-CN-EXT. + // + // rfc1922 + // Reference: RFC1922 + ISO2022CNEXT MIB = 105 + + // UTF8 is the MIB identifier with IANA name UTF-8. + // + // rfc3629 + // Reference: RFC3629 + UTF8 MIB = 106 + + // ISO885913 is the MIB identifier with IANA name ISO-8859-13. + // + // ISO See http://www.iana.org/assignments/charset-reg/ISO-8859-13 http://www.iana.org/assignments/charset-reg/ISO-8859-13 + ISO885913 MIB = 109 + + // ISO885914 is the MIB identifier with IANA name ISO-8859-14. + // + // ISO See http://www.iana.org/assignments/charset-reg/ISO-8859-14 + ISO885914 MIB = 110 + + // ISO885915 is the MIB identifier with IANA name ISO-8859-15. + // + // ISO + // Please see: http://www.iana.org/assignments/charset-reg/ISO-8859-15 + ISO885915 MIB = 111 + + // ISO885916 is the MIB identifier with IANA name ISO-8859-16. + // + // ISO + ISO885916 MIB = 112 + + // GBK is the MIB identifier with IANA name GBK. + // + // Chinese IT Standardization Technical Committee + // Please see: http://www.iana.org/assignments/charset-reg/GBK + GBK MIB = 113 + + // GB18030 is the MIB identifier with IANA name GB18030. + // + // Chinese IT Standardization Technical Committee + // Please see: http://www.iana.org/assignments/charset-reg/GB18030 + GB18030 MIB = 114 + + // OSDEBCDICDF0415 is the MIB identifier with IANA name OSD_EBCDIC_DF04_15. + // + // Fujitsu-Siemens standard mainframe EBCDIC encoding + // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-15 + OSDEBCDICDF0415 MIB = 115 + + // OSDEBCDICDF03IRV is the MIB identifier with IANA name OSD_EBCDIC_DF03_IRV. + // + // Fujitsu-Siemens standard mainframe EBCDIC encoding + // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF03-IRV + OSDEBCDICDF03IRV MIB = 116 + + // OSDEBCDICDF041 is the MIB identifier with IANA name OSD_EBCDIC_DF04_1. + // + // Fujitsu-Siemens standard mainframe EBCDIC encoding + // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-1 + OSDEBCDICDF041 MIB = 117 + + // ISO115481 is the MIB identifier with IANA name ISO-11548-1. + // + // See http://www.iana.org/assignments/charset-reg/ISO-11548-1 + ISO115481 MIB = 118 + + // KZ1048 is the MIB identifier with IANA name KZ-1048. + // + // See http://www.iana.org/assignments/charset-reg/KZ-1048 + KZ1048 MIB = 119 + + // Unicode is the MIB identifier with IANA name ISO-10646-UCS-2. + // + // the 2-octet Basic Multilingual Plane, aka Unicode + // this needs to specify network byte order: the standard + // does not specify (it is a 16-bit integer space) + Unicode MIB = 1000 + + // UCS4 is the MIB identifier with IANA name ISO-10646-UCS-4. + // + // the full code space. (same comment about byte order, + // these are 31-bit numbers. + UCS4 MIB = 1001 + + // UnicodeASCII is the MIB identifier with IANA name ISO-10646-UCS-Basic. + // + // ASCII subset of Unicode. Basic Latin = collection 1 + // See ISO 10646, Appendix A + UnicodeASCII MIB = 1002 + + // UnicodeLatin1 is the MIB identifier with IANA name ISO-10646-Unicode-Latin1. + // + // ISO Latin-1 subset of Unicode. Basic Latin and Latin-1 + // Supplement = collections 1 and 2. See ISO 10646, + // Appendix A. See rfc1815 . + UnicodeLatin1 MIB = 1003 + + // UnicodeJapanese is the MIB identifier with IANA name ISO-10646-J-1. + // + // ISO 10646 Japanese, see rfc1815 . + UnicodeJapanese MIB = 1004 + + // UnicodeIBM1261 is the MIB identifier with IANA name ISO-Unicode-IBM-1261. + // + // IBM Latin-2, -3, -5, Extended Presentation Set, GCSGID: 1261 + UnicodeIBM1261 MIB = 1005 + + // UnicodeIBM1268 is the MIB identifier with IANA name ISO-Unicode-IBM-1268. + // + // IBM Latin-4 Extended Presentation Set, GCSGID: 1268 + UnicodeIBM1268 MIB = 1006 + + // UnicodeIBM1276 is the MIB identifier with IANA name ISO-Unicode-IBM-1276. + // + // IBM Cyrillic Greek Extended Presentation Set, GCSGID: 1276 + UnicodeIBM1276 MIB = 1007 + + // UnicodeIBM1264 is the MIB identifier with IANA name ISO-Unicode-IBM-1264. + // + // IBM Arabic Presentation Set, GCSGID: 1264 + UnicodeIBM1264 MIB = 1008 + + // UnicodeIBM1265 is the MIB identifier with IANA name ISO-Unicode-IBM-1265. + // + // IBM Hebrew Presentation Set, GCSGID: 1265 + UnicodeIBM1265 MIB = 1009 + + // Unicode11 is the MIB identifier with IANA name UNICODE-1-1. + // + // rfc1641 + // Reference: RFC1641 + Unicode11 MIB = 1010 + + // SCSU is the MIB identifier with IANA name SCSU. + // + // SCSU See http://www.iana.org/assignments/charset-reg/SCSU + SCSU MIB = 1011 + + // UTF7 is the MIB identifier with IANA name UTF-7. + // + // rfc2152 + // Reference: RFC2152 + UTF7 MIB = 1012 + + // UTF16BE is the MIB identifier with IANA name UTF-16BE. + // + // rfc2781 + // Reference: RFC2781 + UTF16BE MIB = 1013 + + // UTF16LE is the MIB identifier with IANA name UTF-16LE. + // + // rfc2781 + // Reference: RFC2781 + UTF16LE MIB = 1014 + + // UTF16 is the MIB identifier with IANA name UTF-16. + // + // rfc2781 + // Reference: RFC2781 + UTF16 MIB = 1015 + + // CESU8 is the MIB identifier with IANA name CESU-8. + // + // http://www.unicode.org/unicode/reports/tr26 + CESU8 MIB = 1016 + + // UTF32 is the MIB identifier with IANA name UTF-32. + // + // http://www.unicode.org/unicode/reports/tr19/ + UTF32 MIB = 1017 + + // UTF32BE is the MIB identifier with IANA name UTF-32BE. + // + // http://www.unicode.org/unicode/reports/tr19/ + UTF32BE MIB = 1018 + + // UTF32LE is the MIB identifier with IANA name UTF-32LE. + // + // http://www.unicode.org/unicode/reports/tr19/ + UTF32LE MIB = 1019 + + // BOCU1 is the MIB identifier with IANA name BOCU-1. + // + // http://www.unicode.org/notes/tn6/ + BOCU1 MIB = 1020 + + // Windows30Latin1 is the MIB identifier with IANA name ISO-8859-1-Windows-3.0-Latin-1. + // + // Extended ISO 8859-1 Latin-1 for Windows 3.0. + // PCL Symbol Set id: 9U + Windows30Latin1 MIB = 2000 + + // Windows31Latin1 is the MIB identifier with IANA name ISO-8859-1-Windows-3.1-Latin-1. + // + // Extended ISO 8859-1 Latin-1 for Windows 3.1. + // PCL Symbol Set id: 19U + Windows31Latin1 MIB = 2001 + + // Windows31Latin2 is the MIB identifier with IANA name ISO-8859-2-Windows-Latin-2. + // + // Extended ISO 8859-2. Latin-2 for Windows 3.1. + // PCL Symbol Set id: 9E + Windows31Latin2 MIB = 2002 + + // Windows31Latin5 is the MIB identifier with IANA name ISO-8859-9-Windows-Latin-5. + // + // Extended ISO 8859-9. Latin-5 for Windows 3.1 + // PCL Symbol Set id: 5T + Windows31Latin5 MIB = 2003 + + // HPRoman8 is the MIB identifier with IANA name hp-roman8. + // + // LaserJet IIP Printer User's Manual, + // HP part no 33471-90901, Hewlet-Packard, June 1989. + // Reference: RFC1345 + HPRoman8 MIB = 2004 + + // AdobeStandardEncoding is the MIB identifier with IANA name Adobe-Standard-Encoding. + // + // PostScript Language Reference Manual + // PCL Symbol Set id: 10J + AdobeStandardEncoding MIB = 2005 + + // VenturaUS is the MIB identifier with IANA name Ventura-US. + // + // Ventura US. ASCII plus characters typically used in + // publishing, like pilcrow, copyright, registered, trade mark, + // section, dagger, and double dagger in the range A0 (hex) + // to FF (hex). + // PCL Symbol Set id: 14J + VenturaUS MIB = 2006 + + // VenturaInternational is the MIB identifier with IANA name Ventura-International. + // + // Ventura International. ASCII plus coded characters similar + // to Roman8. + // PCL Symbol Set id: 13J + VenturaInternational MIB = 2007 + + // DECMCS is the MIB identifier with IANA name DEC-MCS. + // + // VAX/VMS User's Manual, + // Order Number: AI-Y517A-TE, April 1986. + // Reference: RFC1345 + DECMCS MIB = 2008 + + // PC850Multilingual is the MIB identifier with IANA name IBM850. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + PC850Multilingual MIB = 2009 + + // PC8DanishNorwegian is the MIB identifier with IANA name PC8-Danish-Norwegian. + // + // PC Danish Norwegian + // 8-bit PC set for Danish Norwegian + // PCL Symbol Set id: 11U + PC8DanishNorwegian MIB = 2012 + + // PC862LatinHebrew is the MIB identifier with IANA name IBM862. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + PC862LatinHebrew MIB = 2013 + + // PC8Turkish is the MIB identifier with IANA name PC8-Turkish. + // + // PC Latin Turkish. PCL Symbol Set id: 9T + PC8Turkish MIB = 2014 + + // IBMSymbols is the MIB identifier with IANA name IBM-Symbols. + // + // Presentation Set, CPGID: 259 + IBMSymbols MIB = 2015 + + // IBMThai is the MIB identifier with IANA name IBM-Thai. + // + // Presentation Set, CPGID: 838 + IBMThai MIB = 2016 + + // HPLegal is the MIB identifier with IANA name HP-Legal. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 1U + HPLegal MIB = 2017 + + // HPPiFont is the MIB identifier with IANA name HP-Pi-font. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 15U + HPPiFont MIB = 2018 + + // HPMath8 is the MIB identifier with IANA name HP-Math8. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 8M + HPMath8 MIB = 2019 + + // HPPSMath is the MIB identifier with IANA name Adobe-Symbol-Encoding. + // + // PostScript Language Reference Manual + // PCL Symbol Set id: 5M + HPPSMath MIB = 2020 + + // HPDesktop is the MIB identifier with IANA name HP-DeskTop. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 7J + HPDesktop MIB = 2021 + + // VenturaMath is the MIB identifier with IANA name Ventura-Math. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 6M + VenturaMath MIB = 2022 + + // MicrosoftPublishing is the MIB identifier with IANA name Microsoft-Publishing. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 6J + MicrosoftPublishing MIB = 2023 + + // Windows31J is the MIB identifier with IANA name Windows-31J. + // + // Windows Japanese. A further extension of Shift_JIS + // to include NEC special characters (Row 13), NEC + // selection of IBM extensions (Rows 89 to 92), and IBM + // extensions (Rows 115 to 119). The CCS's are + // JIS X0201:1997, JIS X0208:1997, and these extensions. + // This charset can be used for the top-level media type "text", + // but it is of limited or specialized use (see rfc2278 ). + // PCL Symbol Set id: 19K + Windows31J MIB = 2024 + + // GB2312 is the MIB identifier with IANA name GB2312 (MIME: GB2312). + // + // Chinese for People's Republic of China (PRC) mixed one byte, + // two byte set: + // 20-7E = one byte ASCII + // A1-FE = two byte PRC Kanji + // See GB 2312-80 + // PCL Symbol Set Id: 18C + GB2312 MIB = 2025 + + // Big5 is the MIB identifier with IANA name Big5 (MIME: Big5). + // + // Chinese for Taiwan Multi-byte set. + // PCL Symbol Set Id: 18T + Big5 MIB = 2026 + + // Macintosh is the MIB identifier with IANA name macintosh. + // + // The Unicode Standard ver1.0, ISBN 0-201-56788-1, Oct 1991 + // Reference: RFC1345 + Macintosh MIB = 2027 + + // IBM037 is the MIB identifier with IANA name IBM037. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM037 MIB = 2028 + + // IBM038 is the MIB identifier with IANA name IBM038. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM038 MIB = 2029 + + // IBM273 is the MIB identifier with IANA name IBM273. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM273 MIB = 2030 + + // IBM274 is the MIB identifier with IANA name IBM274. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM274 MIB = 2031 + + // IBM275 is the MIB identifier with IANA name IBM275. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM275 MIB = 2032 + + // IBM277 is the MIB identifier with IANA name IBM277. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM277 MIB = 2033 + + // IBM278 is the MIB identifier with IANA name IBM278. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM278 MIB = 2034 + + // IBM280 is the MIB identifier with IANA name IBM280. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM280 MIB = 2035 + + // IBM281 is the MIB identifier with IANA name IBM281. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM281 MIB = 2036 + + // IBM284 is the MIB identifier with IANA name IBM284. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM284 MIB = 2037 + + // IBM285 is the MIB identifier with IANA name IBM285. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM285 MIB = 2038 + + // IBM290 is the MIB identifier with IANA name IBM290. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM290 MIB = 2039 + + // IBM297 is the MIB identifier with IANA name IBM297. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM297 MIB = 2040 + + // IBM420 is the MIB identifier with IANA name IBM420. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990, + // IBM NLS RM p 11-11 + // Reference: RFC1345 + IBM420 MIB = 2041 + + // IBM423 is the MIB identifier with IANA name IBM423. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM423 MIB = 2042 + + // IBM424 is the MIB identifier with IANA name IBM424. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM424 MIB = 2043 + + // PC8CodePage437 is the MIB identifier with IANA name IBM437. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + PC8CodePage437 MIB = 2011 + + // IBM500 is the MIB identifier with IANA name IBM500. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM500 MIB = 2044 + + // IBM851 is the MIB identifier with IANA name IBM851. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM851 MIB = 2045 + + // PCp852 is the MIB identifier with IANA name IBM852. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + PCp852 MIB = 2010 + + // IBM855 is the MIB identifier with IANA name IBM855. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM855 MIB = 2046 + + // IBM857 is the MIB identifier with IANA name IBM857. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM857 MIB = 2047 + + // IBM860 is the MIB identifier with IANA name IBM860. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM860 MIB = 2048 + + // IBM861 is the MIB identifier with IANA name IBM861. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM861 MIB = 2049 + + // IBM863 is the MIB identifier with IANA name IBM863. + // + // IBM Keyboard layouts and code pages, PN 07G4586 June 1991 + // Reference: RFC1345 + IBM863 MIB = 2050 + + // IBM864 is the MIB identifier with IANA name IBM864. + // + // IBM Keyboard layouts and code pages, PN 07G4586 June 1991 + // Reference: RFC1345 + IBM864 MIB = 2051 + + // IBM865 is the MIB identifier with IANA name IBM865. + // + // IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987) + // Reference: RFC1345 + IBM865 MIB = 2052 + + // IBM868 is the MIB identifier with IANA name IBM868. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM868 MIB = 2053 + + // IBM869 is the MIB identifier with IANA name IBM869. + // + // IBM Keyboard layouts and code pages, PN 07G4586 June 1991 + // Reference: RFC1345 + IBM869 MIB = 2054 + + // IBM870 is the MIB identifier with IANA name IBM870. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM870 MIB = 2055 + + // IBM871 is the MIB identifier with IANA name IBM871. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM871 MIB = 2056 + + // IBM880 is the MIB identifier with IANA name IBM880. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM880 MIB = 2057 + + // IBM891 is the MIB identifier with IANA name IBM891. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM891 MIB = 2058 + + // IBM903 is the MIB identifier with IANA name IBM903. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM903 MIB = 2059 + + // IBBM904 is the MIB identifier with IANA name IBM904. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBBM904 MIB = 2060 + + // IBM905 is the MIB identifier with IANA name IBM905. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM905 MIB = 2061 + + // IBM918 is the MIB identifier with IANA name IBM918. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM918 MIB = 2062 + + // IBM1026 is the MIB identifier with IANA name IBM1026. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM1026 MIB = 2063 + + // IBMEBCDICATDE is the MIB identifier with IANA name EBCDIC-AT-DE. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + IBMEBCDICATDE MIB = 2064 + + // EBCDICATDEA is the MIB identifier with IANA name EBCDIC-AT-DE-A. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICATDEA MIB = 2065 + + // EBCDICCAFR is the MIB identifier with IANA name EBCDIC-CA-FR. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICCAFR MIB = 2066 + + // EBCDICDKNO is the MIB identifier with IANA name EBCDIC-DK-NO. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICDKNO MIB = 2067 + + // EBCDICDKNOA is the MIB identifier with IANA name EBCDIC-DK-NO-A. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICDKNOA MIB = 2068 + + // EBCDICFISE is the MIB identifier with IANA name EBCDIC-FI-SE. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICFISE MIB = 2069 + + // EBCDICFISEA is the MIB identifier with IANA name EBCDIC-FI-SE-A. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICFISEA MIB = 2070 + + // EBCDICFR is the MIB identifier with IANA name EBCDIC-FR. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICFR MIB = 2071 + + // EBCDICIT is the MIB identifier with IANA name EBCDIC-IT. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICIT MIB = 2072 + + // EBCDICPT is the MIB identifier with IANA name EBCDIC-PT. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICPT MIB = 2073 + + // EBCDICES is the MIB identifier with IANA name EBCDIC-ES. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICES MIB = 2074 + + // EBCDICESA is the MIB identifier with IANA name EBCDIC-ES-A. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICESA MIB = 2075 + + // EBCDICESS is the MIB identifier with IANA name EBCDIC-ES-S. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICESS MIB = 2076 + + // EBCDICUK is the MIB identifier with IANA name EBCDIC-UK. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICUK MIB = 2077 + + // EBCDICUS is the MIB identifier with IANA name EBCDIC-US. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICUS MIB = 2078 + + // Unknown8BiT is the MIB identifier with IANA name UNKNOWN-8BIT. + // + // Reference: RFC1428 + Unknown8BiT MIB = 2079 + + // Mnemonic is the MIB identifier with IANA name MNEMONIC. + // + // rfc1345 , also known as "mnemonic+ascii+38" + // Reference: RFC1345 + Mnemonic MIB = 2080 + + // Mnem is the MIB identifier with IANA name MNEM. + // + // rfc1345 , also known as "mnemonic+ascii+8200" + // Reference: RFC1345 + Mnem MIB = 2081 + + // VISCII is the MIB identifier with IANA name VISCII. + // + // rfc1456 + // Reference: RFC1456 + VISCII MIB = 2082 + + // VIQR is the MIB identifier with IANA name VIQR. + // + // rfc1456 + // Reference: RFC1456 + VIQR MIB = 2083 + + // KOI8R is the MIB identifier with IANA name KOI8-R (MIME: KOI8-R). + // + // rfc1489 , based on GOST-19768-74, ISO-6937/8, + // INIS-Cyrillic, ISO-5427. + // Reference: RFC1489 + KOI8R MIB = 2084 + + // HZGB2312 is the MIB identifier with IANA name HZ-GB-2312. + // + // rfc1842 , rfc1843 rfc1843 rfc1842 + HZGB2312 MIB = 2085 + + // IBM866 is the MIB identifier with IANA name IBM866. + // + // IBM NLDG Volume 2 (SE09-8002-03) August 1994 + IBM866 MIB = 2086 + + // PC775Baltic is the MIB identifier with IANA name IBM775. + // + // HP PCL 5 Comparison Guide (P/N 5021-0329) pp B-13, 1996 + PC775Baltic MIB = 2087 + + // KOI8U is the MIB identifier with IANA name KOI8-U. + // + // rfc2319 + // Reference: RFC2319 + KOI8U MIB = 2088 + + // IBM00858 is the MIB identifier with IANA name IBM00858. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM00858 + IBM00858 MIB = 2089 + + // IBM00924 is the MIB identifier with IANA name IBM00924. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM00924 + IBM00924 MIB = 2090 + + // IBM01140 is the MIB identifier with IANA name IBM01140. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01140 + IBM01140 MIB = 2091 + + // IBM01141 is the MIB identifier with IANA name IBM01141. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01141 + IBM01141 MIB = 2092 + + // IBM01142 is the MIB identifier with IANA name IBM01142. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01142 + IBM01142 MIB = 2093 + + // IBM01143 is the MIB identifier with IANA name IBM01143. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01143 + IBM01143 MIB = 2094 + + // IBM01144 is the MIB identifier with IANA name IBM01144. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01144 + IBM01144 MIB = 2095 + + // IBM01145 is the MIB identifier with IANA name IBM01145. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01145 + IBM01145 MIB = 2096 + + // IBM01146 is the MIB identifier with IANA name IBM01146. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01146 + IBM01146 MIB = 2097 + + // IBM01147 is the MIB identifier with IANA name IBM01147. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01147 + IBM01147 MIB = 2098 + + // IBM01148 is the MIB identifier with IANA name IBM01148. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01148 + IBM01148 MIB = 2099 + + // IBM01149 is the MIB identifier with IANA name IBM01149. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01149 + IBM01149 MIB = 2100 + + // Big5HKSCS is the MIB identifier with IANA name Big5-HKSCS. + // + // See http://www.iana.org/assignments/charset-reg/Big5-HKSCS + Big5HKSCS MIB = 2101 + + // IBM1047 is the MIB identifier with IANA name IBM1047. + // + // IBM1047 (EBCDIC Latin 1/Open Systems) http://www-1.ibm.com/servers/eserver/iseries/software/globalization/pdf/cp01047z.pdf + IBM1047 MIB = 2102 + + // PTCP154 is the MIB identifier with IANA name PTCP154. + // + // See http://www.iana.org/assignments/charset-reg/PTCP154 + PTCP154 MIB = 2103 + + // Amiga1251 is the MIB identifier with IANA name Amiga-1251. + // + // See http://www.amiga.ultranet.ru/Amiga-1251.html + Amiga1251 MIB = 2104 + + // KOI7switched is the MIB identifier with IANA name KOI7-switched. + // + // See http://www.iana.org/assignments/charset-reg/KOI7-switched + KOI7switched MIB = 2105 + + // BRF is the MIB identifier with IANA name BRF. + // + // See http://www.iana.org/assignments/charset-reg/BRF + BRF MIB = 2106 + + // TSCII is the MIB identifier with IANA name TSCII. + // + // See http://www.iana.org/assignments/charset-reg/TSCII + TSCII MIB = 2107 + + // CP51932 is the MIB identifier with IANA name CP51932. + // + // See http://www.iana.org/assignments/charset-reg/CP51932 + CP51932 MIB = 2108 + + // Windows874 is the MIB identifier with IANA name windows-874. + // + // See http://www.iana.org/assignments/charset-reg/windows-874 + Windows874 MIB = 2109 + + // Windows1250 is the MIB identifier with IANA name windows-1250. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1250 + Windows1250 MIB = 2250 + + // Windows1251 is the MIB identifier with IANA name windows-1251. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1251 + Windows1251 MIB = 2251 + + // Windows1252 is the MIB identifier with IANA name windows-1252. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1252 + Windows1252 MIB = 2252 + + // Windows1253 is the MIB identifier with IANA name windows-1253. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1253 + Windows1253 MIB = 2253 + + // Windows1254 is the MIB identifier with IANA name windows-1254. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1254 + Windows1254 MIB = 2254 + + // Windows1255 is the MIB identifier with IANA name windows-1255. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1255 + Windows1255 MIB = 2255 + + // Windows1256 is the MIB identifier with IANA name windows-1256. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1256 + Windows1256 MIB = 2256 + + // Windows1257 is the MIB identifier with IANA name windows-1257. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1257 + Windows1257 MIB = 2257 + + // Windows1258 is the MIB identifier with IANA name windows-1258. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1258 + Windows1258 MIB = 2258 + + // TIS620 is the MIB identifier with IANA name TIS-620. + // + // Thai Industrial Standards Institute (TISI) + TIS620 MIB = 2259 + + // CP50220 is the MIB identifier with IANA name CP50220. + // + // See http://www.iana.org/assignments/charset-reg/CP50220 + CP50220 MIB = 2260 +) diff --git a/vendor/golang.org/x/text/encoding/internal/internal.go b/vendor/golang.org/x/text/encoding/internal/internal.go new file mode 100644 index 0000000..75a5fd1 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/internal/internal.go @@ -0,0 +1,75 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package internal contains code that is shared among encoding implementations. +package internal + +import ( + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// Encoding is an implementation of the Encoding interface that adds the String +// and ID methods to an existing encoding. +type Encoding struct { + encoding.Encoding + Name string + MIB identifier.MIB +} + +// _ verifies that Encoding implements identifier.Interface. +var _ identifier.Interface = (*Encoding)(nil) + +func (e *Encoding) String() string { + return e.Name +} + +func (e *Encoding) ID() (mib identifier.MIB, other string) { + return e.MIB, "" +} + +// SimpleEncoding is an Encoding that combines two Transformers. +type SimpleEncoding struct { + Decoder transform.Transformer + Encoder transform.Transformer +} + +func (e *SimpleEncoding) NewDecoder() *encoding.Decoder { + return &encoding.Decoder{Transformer: e.Decoder} +} + +func (e *SimpleEncoding) NewEncoder() *encoding.Encoder { + return &encoding.Encoder{Transformer: e.Encoder} +} + +// FuncEncoding is an Encoding that combines two functions returning a new +// Transformer. +type FuncEncoding struct { + Decoder func() transform.Transformer + Encoder func() transform.Transformer +} + +func (e FuncEncoding) NewDecoder() *encoding.Decoder { + return &encoding.Decoder{Transformer: e.Decoder()} +} + +func (e FuncEncoding) NewEncoder() *encoding.Encoder { + return &encoding.Encoder{Transformer: e.Encoder()} +} + +// A RepertoireError indicates a rune is not in the repertoire of a destination +// encoding. It is associated with an encoding-specific suggested replacement +// byte. +type RepertoireError byte + +// Error implements the error interrface. +func (r RepertoireError) Error() string { + return "encoding: rune not supported by encoding." +} + +// Replacement returns the replacement string associated with this error. +func (r RepertoireError) Replacement() byte { return byte(r) } + +var ErrASCIIReplacement = RepertoireError(encoding.ASCIISub) diff --git a/vendor/golang.org/x/text/encoding/japanese/all.go b/vendor/golang.org/x/text/encoding/japanese/all.go new file mode 100644 index 0000000..6cfa8de --- /dev/null +++ b/vendor/golang.org/x/text/encoding/japanese/all.go @@ -0,0 +1,12 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "golang.org/x/text/encoding" +) + +// All is a list of all defined encodings in this package. +var All = []encoding.Encoding{EUCJP, ISO2022JP, ShiftJIS} diff --git a/vendor/golang.org/x/text/encoding/japanese/all_test.go b/vendor/golang.org/x/text/encoding/japanese/all_test.go new file mode 100644 index 0000000..9cffe10 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/japanese/all_test.go @@ -0,0 +1,248 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "fmt" + "strings" + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/enctest" + "golang.org/x/text/transform" +) + +func dec(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Decode", e.NewDecoder(), nil +} +func enc(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Encode", e.NewEncoder(), internal.ErrASCIIReplacement +} + +func TestNonRepertoire(t *testing.T) { + // Pick n to cause the destination buffer in transform.String to overflow. + const n = 100 + long := strings.Repeat(".", n) + testCases := []struct { + init func(e encoding.Encoding) (string, transform.Transformer, error) + e encoding.Encoding + src, want string + }{ + {enc, EUCJP, "갂", ""}, + {enc, EUCJP, "a갂", "a"}, + {enc, EUCJP, "丌갂", "\x8f\xb0\xa4"}, + + {enc, ISO2022JP, "갂", ""}, + {enc, ISO2022JP, "a갂", "a"}, + {enc, ISO2022JP, "朗갂", "\x1b$BzF\x1b(B"}, // switch back to ASCII mode at end + + {enc, ShiftJIS, "갂", ""}, + {enc, ShiftJIS, "a갂", "a"}, + {enc, ShiftJIS, "\u2190갂", "\x81\xa9"}, + + // Continue correctly after errors + {dec, EUCJP, "\x8e\xa0", "\ufffd\ufffd"}, + {dec, EUCJP, "\x8e\xe0", "\ufffd"}, + {dec, EUCJP, "\x8e\xff", "\ufffd\ufffd"}, + {dec, EUCJP, "\x8ea", "\ufffda"}, + {dec, EUCJP, "\x8f\xa0", "\ufffd\ufffd"}, + {dec, EUCJP, "\x8f\xa1\xa0", "\ufffd\ufffd"}, + {dec, EUCJP, "\x8f\xa1a", "\ufffda"}, + {dec, EUCJP, "\x8f\xa1a", "\ufffda"}, + {dec, EUCJP, "\x8f\xa1a", "\ufffda"}, + {dec, EUCJP, "\x8f\xa2\xa2", "\ufffd"}, + {dec, EUCJP, "\xfe", "\ufffd"}, + {dec, EUCJP, "\xfe\xfc", "\ufffd"}, + {dec, EUCJP, "\xfe\xff", "\ufffd\ufffd"}, + // Correct handling of end of source + {dec, EUCJP, strings.Repeat("\x8e", n), strings.Repeat("\ufffd", n)}, + {dec, EUCJP, strings.Repeat("\x8f", n), strings.Repeat("\ufffd", n)}, + {dec, EUCJP, strings.Repeat("\x8f\xa0", n), strings.Repeat("\ufffd", 2*n)}, + {dec, EUCJP, "a" + strings.Repeat("\x8f\xa1", n), "a" + strings.Repeat("\ufffd", n)}, + {dec, EUCJP, "a" + strings.Repeat("\x8f\xa1\xff", n), "a" + strings.Repeat("\ufffd", 2*n)}, + + // Continue correctly after errors + {dec, ShiftJIS, "\x80", "\u0080"}, // It's what the spec says. + {dec, ShiftJIS, "\x81", "\ufffd"}, + {dec, ShiftJIS, "\x81\x7f", "\ufffd\u007f"}, + {dec, ShiftJIS, "\xe0", "\ufffd"}, + {dec, ShiftJIS, "\xe0\x39", "\ufffd\u0039"}, + {dec, ShiftJIS, "\xe0\x9f", "燹"}, + {dec, ShiftJIS, "\xe0\xfd", "\ufffd"}, + {dec, ShiftJIS, "\xef\xfc", "\ufffd"}, + {dec, ShiftJIS, "\xfc\xfc", "\ufffd"}, + {dec, ShiftJIS, "\xfc\xfd", "\ufffd"}, + {dec, ShiftJIS, "\xfdaa", "\ufffdaa"}, + + {dec, ShiftJIS, strings.Repeat("\x81\x81", n), strings.Repeat("=", n)}, + {dec, ShiftJIS, strings.Repeat("\xe0\xfd", n), strings.Repeat("\ufffd", n)}, + {dec, ShiftJIS, "a" + strings.Repeat("\xe0\xfd", n), "a" + strings.Repeat("\ufffd", n)}, + + {dec, ISO2022JP, "\x1b$", "\ufffd$"}, + {dec, ISO2022JP, "\x1b(", "\ufffd("}, + {dec, ISO2022JP, "\x1b@", "\ufffd@"}, + {dec, ISO2022JP, "\x1bZ", "\ufffdZ"}, + // incomplete escapes + {dec, ISO2022JP, "\x1b$", "\ufffd$"}, + {dec, ISO2022JP, "\x1b$J.", "\ufffd$J."}, // illegal + {dec, ISO2022JP, "\x1b$B.", "\ufffd"}, // JIS208 + {dec, ISO2022JP, "\x1b$(", "\ufffd$("}, // JIS212 + {dec, ISO2022JP, "\x1b$(..", "\ufffd$(.."}, // JIS212 + {dec, ISO2022JP, "\x1b$(" + long, "\ufffd$(" + long}, // JIS212 + {dec, ISO2022JP, "\x1b$(D.", "\ufffd"}, // JIS212 + {dec, ISO2022JP, "\x1b$(D..", "\ufffd"}, // JIS212 + {dec, ISO2022JP, "\x1b$(D...", "\ufffd\ufffd"}, // JIS212 + {dec, ISO2022JP, "\x1b(B.", "."}, // ascii + {dec, ISO2022JP, "\x1b(B..", ".."}, // ascii + {dec, ISO2022JP, "\x1b(J.", "."}, // roman + {dec, ISO2022JP, "\x1b(J..", ".."}, // roman + {dec, ISO2022JP, "\x1b(I\x20", "\ufffd"}, // katakana + {dec, ISO2022JP, "\x1b(I\x20\x20", "\ufffd\ufffd"}, // katakana + // recover to same state + {dec, ISO2022JP, "\x1b(B\x1b.", "\ufffd."}, + {dec, ISO2022JP, "\x1b(I\x1b.", "\ufffdョ"}, + {dec, ISO2022JP, "\x1b(I\x1b$.", "\ufffd、ョ"}, + {dec, ISO2022JP, "\x1b(I\x1b(.", "\ufffdィョ"}, + {dec, ISO2022JP, "\x1b$B\x7e\x7e", "\ufffd"}, + {dec, ISO2022JP, "\x1b$@\x0a.", "\x0a."}, + {dec, ISO2022JP, "\x1b$B\x0a.", "\x0a."}, + {dec, ISO2022JP, "\x1b$(D\x0a.", "\x0a."}, + {dec, ISO2022JP, "\x1b$(D\x7e\x7e", "\ufffd"}, + {dec, ISO2022JP, "\x80", "\ufffd"}, + + // TODO: according to https://encoding.spec.whatwg.org/#iso-2022-jp, + // these should all be correct. + // {dec, ISO2022JP, "\x1b(B\x0E", "\ufffd"}, + // {dec, ISO2022JP, "\x1b(B\x0F", "\ufffd"}, + {dec, ISO2022JP, "\x1b(B\x5C", "\u005C"}, + {dec, ISO2022JP, "\x1b(B\x7E", "\u007E"}, + // {dec, ISO2022JP, "\x1b(J\x0E", "\ufffd"}, + // {dec, ISO2022JP, "\x1b(J\x0F", "\ufffd"}, + // {dec, ISO2022JP, "\x1b(J\x5C", "\u00A5"}, + // {dec, ISO2022JP, "\x1b(J\x7E", "\u203E"}, + } + for _, tc := range testCases { + dir, tr, wantErr := tc.init(tc.e) + t.Run(fmt.Sprintf("%s/%v/%q", dir, tc.e, tc.src), func(t *testing.T) { + dst := make([]byte, 100000) + src := []byte(tc.src) + for i := 0; i <= len(tc.src); i++ { + nDst, nSrc, err := tr.Transform(dst, src[:i], false) + if err != nil && err != transform.ErrShortSrc && err != wantErr { + t.Fatalf("error on first call to Transform: %v", err) + } + n, _, err := tr.Transform(dst[nDst:], src[nSrc:], true) + nDst += n + if err != wantErr { + t.Fatalf("(%q|%q): got %v; want %v", tc.src[:i], tc.src[i:], err, wantErr) + } + if got := string(dst[:nDst]); got != tc.want { + t.Errorf("(%q|%q):\ngot %q\nwant %q", tc.src[:i], tc.src[i:], got, tc.want) + } + } + }) + } +} + +func TestCorrect(t *testing.T) { + testCases := []struct { + init func(e encoding.Encoding) (string, transform.Transformer, error) + e encoding.Encoding + src, want string + }{ + {dec, ShiftJIS, "\x9f\xfc", "滌"}, + {dec, ShiftJIS, "\xfb\xfc", "髙"}, + {dec, ShiftJIS, "\xfa\xb1", "﨑"}, + {enc, ShiftJIS, "滌", "\x9f\xfc"}, + {enc, ShiftJIS, "﨑", "\xed\x95"}, + } + for _, tc := range testCases { + dir, tr, _ := tc.init(tc.e) + + dst, _, err := transform.String(tr, tc.src) + if err != nil { + t.Errorf("%s %v(%q): got %v; want %v", dir, tc.e, tc.src, err, nil) + } + if got := string(dst); got != tc.want { + t.Errorf("%s %v(%q):\ngot %q\nwant %q", dir, tc.e, tc.src, got, tc.want) + } + } +} + +func TestBasics(t *testing.T) { + // The encoded forms can be verified by the iconv program: + // $ echo 月日は百代 | iconv -f UTF-8 -t SHIFT-JIS | xxd + testCases := []struct { + e encoding.Encoding + encPrefix string + encSuffix string + encoded string + utf8 string + }{{ + // "A。カ゚ 0208: etc 0212: etc" is a nonsense string that contains ASCII, half-width + // kana, JIS X 0208 (including two near the kink in the Shift JIS second byte + // encoding) and JIS X 0212 encodable codepoints. + // + // "月日は百代の過客にして、行かふ年も又旅人也。" is from the 17th century poem + // "Oku no Hosomichi" and contains both hiragana and kanji. + e: EUCJP, + encoded: "A\x8e\xa1\x8e\xb6\x8e\xdf " + + "0208: \xa1\xa1\xa1\xa2\xa1\xdf\xa1\xe0\xa1\xfd\xa1\xfe\xa2\xa1\xa2\xa2\xf4\xa6 " + + "0212: \x8f\xa2\xaf\x8f\xed\xe3", + utf8: "A。カ゚ " + + "0208: \u3000\u3001\u00d7\u00f7\u25ce\u25c7\u25c6\u25a1\u7199 " + + "0212: \u02d8\u9fa5", + }, { + e: EUCJP, + encoded: "\xb7\xee\xc6\xfc\xa4\xcf\xc9\xb4\xc2\xe5\xa4\xce\xb2\xe1\xb5\xd2" + + "\xa4\xcb\xa4\xb7\xa4\xc6\xa1\xa2\xb9\xd4\xa4\xab\xa4\xd5\xc7\xaf" + + "\xa4\xe2\xcb\xf4\xce\xb9\xbf\xcd\xcc\xe9\xa1\xa3", + utf8: "月日は百代の過客にして、行かふ年も又旅人也。", + }, { + e: ISO2022JP, + encSuffix: "\x1b\x28\x42", + encoded: "\x1b\x28\x49\x21\x36\x5f\x1b\x28\x42 " + + "0208: \x1b\x24\x42\x21\x21\x21\x22\x21\x5f\x21\x60\x21\x7d\x21\x7e\x22\x21\x22\x22\x74\x26", + utf8: "。カ゚ " + + "0208: \u3000\u3001\u00d7\u00f7\u25ce\u25c7\u25c6\u25a1\u7199", + }, { + e: ISO2022JP, + encPrefix: "\x1b\x24\x42", + encSuffix: "\x1b\x28\x42", + encoded: "\x37\x6e\x46\x7c\x24\x4f\x49\x34\x42\x65\x24\x4e\x32\x61\x35\x52" + + "\x24\x4b\x24\x37\x24\x46\x21\x22\x39\x54\x24\x2b\x24\x55\x47\x2f" + + "\x24\x62\x4b\x74\x4e\x39\x3f\x4d\x4c\x69\x21\x23", + utf8: "月日は百代の過客にして、行かふ年も又旅人也。", + }, { + e: ShiftJIS, + encoded: "A\xa1\xb6\xdf " + + "0208: \x81\x40\x81\x41\x81\x7e\x81\x80\x81\x9d\x81\x9e\x81\x9f\x81\xa0\xea\xa4", + utf8: "A。カ゚ " + + "0208: \u3000\u3001\u00d7\u00f7\u25ce\u25c7\u25c6\u25a1\u7199", + }, { + e: ShiftJIS, + encoded: "\x8c\x8e\x93\xfa\x82\xcd\x95\x53\x91\xe3\x82\xcc\x89\xdf\x8b\x71" + + "\x82\xc9\x82\xb5\x82\xc4\x81\x41\x8d\x73\x82\xa9\x82\xd3\x94\x4e" + + "\x82\xe0\x96\x94\x97\xb7\x90\x6c\x96\xe7\x81\x42", + utf8: "月日は百代の過客にして、行かふ年も又旅人也。", + }} + + for _, tc := range testCases { + enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, tc.encPrefix, tc.encSuffix) + } +} + +func TestFiles(t *testing.T) { + enctest.TestFile(t, EUCJP) + enctest.TestFile(t, ISO2022JP) + enctest.TestFile(t, ShiftJIS) +} + +func BenchmarkEncoding(b *testing.B) { + enctest.Benchmark(b, EUCJP) + enctest.Benchmark(b, ISO2022JP) + enctest.Benchmark(b, ShiftJIS) +} diff --git a/vendor/golang.org/x/text/encoding/japanese/eucjp.go b/vendor/golang.org/x/text/encoding/japanese/eucjp.go new file mode 100644 index 0000000..79313fa --- /dev/null +++ b/vendor/golang.org/x/text/encoding/japanese/eucjp.go @@ -0,0 +1,225 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// EUCJP is the EUC-JP encoding. +var EUCJP encoding.Encoding = &eucJP + +var eucJP = internal.Encoding{ + &internal.SimpleEncoding{eucJPDecoder{}, eucJPEncoder{}}, + "EUC-JP", + identifier.EUCPkdFmtJapanese, +} + +type eucJPDecoder struct{ transform.NopResetter } + +// See https://encoding.spec.whatwg.org/#euc-jp-decoder. +func (eucJPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + case c0 == 0x8e: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + break + } + c1 := src[nSrc+1] + switch { + case c1 < 0xa1: + r, size = utf8.RuneError, 1 + case c1 > 0xdf: + r, size = utf8.RuneError, 2 + if c1 == 0xff { + size = 1 + } + default: + r, size = rune(c1)+(0xff61-0xa1), 2 + } + case c0 == 0x8f: + if nSrc+2 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + if p := nSrc + 1; p < len(src) && 0xa1 <= src[p] && src[p] < 0xfe { + size = 2 + } + break + } + c1 := src[nSrc+1] + if c1 < 0xa1 || 0xfe < c1 { + r, size = utf8.RuneError, 1 + break + } + c2 := src[nSrc+2] + if c2 < 0xa1 || 0xfe < c2 { + r, size = utf8.RuneError, 2 + break + } + r, size = utf8.RuneError, 3 + if i := int(c1-0xa1)*94 + int(c2-0xa1); i < len(jis0212Decode) { + r = rune(jis0212Decode[i]) + if r == 0 { + r = utf8.RuneError + } + } + + case 0xa1 <= c0 && c0 <= 0xfe: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + break + } + c1 := src[nSrc+1] + if c1 < 0xa1 || 0xfe < c1 { + r, size = utf8.RuneError, 1 + break + } + r, size = utf8.RuneError, 2 + if i := int(c0-0xa1)*94 + int(c1-0xa1); i < len(jis0208Decode) { + r = rune(jis0208Decode[i]) + if r == 0 { + r = utf8.RuneError + } + } + + default: + r, size = utf8.RuneError, 1 + } + + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type eucJPEncoder struct{ transform.NopResetter } + +func (eucJPEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r != 0 { + goto write2or3 + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r != 0 { + goto write2or3 + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r != 0 { + goto write2or3 + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r != 0 { + goto write2or3 + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r != 0 { + goto write2or3 + } + case encode5Low <= r && r < encode5High: + if 0xff61 <= r && r < 0xffa0 { + goto write2 + } + if r = rune(encode5[r-encode5Low]); r != 0 { + goto write2or3 + } + } + err = internal.ErrASCIIReplacement + break + } + + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + write2or3: + if r>>tableShift == jis0208 { + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + } else { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = 0x8f + nDst++ + } + dst[nDst+0] = 0xa1 + uint8(r>>codeShift)&codeMask + dst[nDst+1] = 0xa1 + uint8(r)&codeMask + nDst += 2 + continue + + write2: + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = 0x8e + dst[nDst+1] = uint8(r - (0xff61 - 0xa1)) + nDst += 2 + continue + } + return nDst, nSrc, err +} + +func init() { + // Check that the hard-coded encode switch covers all tables. + if numEncodeTables != 6 { + panic("bad numEncodeTables") + } +} diff --git a/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go b/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go new file mode 100644 index 0000000..613226d --- /dev/null +++ b/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go @@ -0,0 +1,299 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// ISO2022JP is the ISO-2022-JP encoding. +var ISO2022JP encoding.Encoding = &iso2022JP + +var iso2022JP = internal.Encoding{ + internal.FuncEncoding{iso2022JPNewDecoder, iso2022JPNewEncoder}, + "ISO-2022-JP", + identifier.ISO2022JP, +} + +func iso2022JPNewDecoder() transform.Transformer { + return new(iso2022JPDecoder) +} + +func iso2022JPNewEncoder() transform.Transformer { + return new(iso2022JPEncoder) +} + +const ( + asciiState = iota + katakanaState + jis0208State + jis0212State +) + +const asciiEsc = 0x1b + +type iso2022JPDecoder int + +func (d *iso2022JPDecoder) Reset() { + *d = asciiState +} + +func (d *iso2022JPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + c0 := src[nSrc] + if c0 >= utf8.RuneSelf { + r, size = '\ufffd', 1 + goto write + } + + if c0 == asciiEsc { + if nSrc+2 >= len(src) { + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + // TODO: is it correct to only skip 1?? + r, size = '\ufffd', 1 + goto write + } + size = 3 + c1 := src[nSrc+1] + c2 := src[nSrc+2] + switch { + case c1 == '$' && (c2 == '@' || c2 == 'B'): // 0x24 {0x40, 0x42} + *d = jis0208State + continue + case c1 == '$' && c2 == '(': // 0x24 0x28 + if nSrc+3 >= len(src) { + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + r, size = '\ufffd', 1 + goto write + } + size = 4 + if src[nSrc+3] == 'D' { + *d = jis0212State + continue + } + case c1 == '(' && (c2 == 'B' || c2 == 'J'): // 0x28 {0x42, 0x4A} + *d = asciiState + continue + case c1 == '(' && c2 == 'I': // 0x28 0x49 + *d = katakanaState + continue + } + r, size = '\ufffd', 1 + goto write + } + + switch *d { + case asciiState: + r, size = rune(c0), 1 + + case katakanaState: + if c0 < 0x21 || 0x60 <= c0 { + r, size = '\ufffd', 1 + goto write + } + r, size = rune(c0)+(0xff61-0x21), 1 + + default: + if c0 == 0x0a { + *d = asciiState + r, size = rune(c0), 1 + goto write + } + if nSrc+1 >= len(src) { + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + r, size = '\ufffd', 1 + goto write + } + size = 2 + c1 := src[nSrc+1] + i := int(c0-0x21)*94 + int(c1-0x21) + if *d == jis0208State && i < len(jis0208Decode) { + r = rune(jis0208Decode[i]) + } else if *d == jis0212State && i < len(jis0212Decode) { + r = rune(jis0212Decode[i]) + } else { + r = '\ufffd' + goto write + } + if r == 0 { + r = '\ufffd' + } + } + + write: + if nDst+utf8.RuneLen(r) > len(dst) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type iso2022JPEncoder int + +func (e *iso2022JPEncoder) Reset() { + *e = asciiState +} + +func (e *iso2022JPEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + // + // http://encoding.spec.whatwg.org/#iso-2022-jp says that "the index jis0212 + // is not used by the iso-2022-jp encoder due to lack of widespread support". + // + // TODO: do we have to special-case U+00A5 and U+203E, as per + // http://encoding.spec.whatwg.org/#iso-2022-jp + // Doing so would mean that "\u00a5" would not be preserved + // after an encode-decode round trip. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode5Low <= r && r < encode5High: + if 0xff61 <= r && r < 0xffa0 { + goto writeKatakana + } + if r = rune(encode5[r-encode5Low]); r>>tableShift == jis0208 { + goto writeJIS + } + } + + // Switch back to ASCII state in case of error so that an ASCII + // replacement character can be written in the correct state. + if *e != asciiState { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + *e = asciiState + dst[nDst+0] = asciiEsc + dst[nDst+1] = '(' + dst[nDst+2] = 'B' + nDst += 3 + } + err = internal.ErrASCIIReplacement + break + } + + if *e != asciiState { + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + *e = asciiState + dst[nDst+0] = asciiEsc + dst[nDst+1] = '(' + dst[nDst+2] = 'B' + nDst += 3 + } else if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + writeJIS: + if *e != jis0208State { + if nDst+5 > len(dst) { + err = transform.ErrShortDst + break + } + *e = jis0208State + dst[nDst+0] = asciiEsc + dst[nDst+1] = '$' + dst[nDst+2] = 'B' + nDst += 3 + } else if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = 0x21 + uint8(r>>codeShift)&codeMask + dst[nDst+1] = 0x21 + uint8(r)&codeMask + nDst += 2 + continue + + writeKatakana: + if *e != katakanaState { + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + *e = katakanaState + dst[nDst+0] = asciiEsc + dst[nDst+1] = '(' + dst[nDst+2] = 'I' + nDst += 3 + } else if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r - (0xff61 - 0x21)) + nDst++ + continue + } + if atEOF && err == nil && *e != asciiState { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + } else { + *e = asciiState + dst[nDst+0] = asciiEsc + dst[nDst+1] = '(' + dst[nDst+2] = 'B' + nDst += 3 + } + } + return nDst, nSrc, err +} diff --git a/vendor/golang.org/x/text/encoding/japanese/maketables.go b/vendor/golang.org/x/text/encoding/japanese/maketables.go new file mode 100644 index 0000000..d6c10de --- /dev/null +++ b/vendor/golang.org/x/text/encoding/japanese/maketables.go @@ -0,0 +1,161 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This program generates tables.go: +// go run maketables.go | gofmt > tables.go + +// TODO: Emoji extensions? +// http://www.unicode.org/faq/emoji_dingbats.html +// http://www.unicode.org/Public/UNIDATA/EmojiSources.txt + +import ( + "bufio" + "fmt" + "log" + "net/http" + "sort" + "strings" +) + +type entry struct { + jisCode, table int +} + +func main() { + fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n") + fmt.Printf("// Package japanese provides Japanese encodings such as EUC-JP and Shift JIS.\n") + fmt.Printf(`package japanese // import "golang.org/x/text/encoding/japanese"` + "\n\n") + + reverse := [65536]entry{} + for i := range reverse { + reverse[i].table = -1 + } + + tables := []struct { + url string + name string + }{ + {"http://encoding.spec.whatwg.org/index-jis0208.txt", "0208"}, + {"http://encoding.spec.whatwg.org/index-jis0212.txt", "0212"}, + } + for i, table := range tables { + res, err := http.Get(table.url) + if err != nil { + log.Fatalf("%q: Get: %v", table.url, err) + } + defer res.Body.Close() + + mapping := [65536]uint16{} + + scanner := bufio.NewScanner(res.Body) + for scanner.Scan() { + s := strings.TrimSpace(scanner.Text()) + if s == "" || s[0] == '#' { + continue + } + x, y := 0, uint16(0) + if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil { + log.Fatalf("%q: could not parse %q", table.url, s) + } + if x < 0 || 120*94 <= x { + log.Fatalf("%q: JIS code %d is out of range", table.url, x) + } + mapping[x] = y + if reverse[y].table == -1 { + reverse[y] = entry{jisCode: x, table: i} + } + } + if err := scanner.Err(); err != nil { + log.Fatalf("%q: scanner error: %v", table.url, err) + } + + fmt.Printf("// jis%sDecode is the decoding table from JIS %s code to Unicode.\n// It is defined at %s\n", + table.name, table.name, table.url) + fmt.Printf("var jis%sDecode = [...]uint16{\n", table.name) + for i, m := range mapping { + if m != 0 { + fmt.Printf("\t%d: 0x%04X,\n", i, m) + } + } + fmt.Printf("}\n\n") + } + + // Any run of at least separation continuous zero entries in the reverse map will + // be a separate encode table. + const separation = 1024 + + intervals := []interval(nil) + low, high := -1, -1 + for i, v := range reverse { + if v.table == -1 { + continue + } + if low < 0 { + low = i + } else if i-high >= separation { + if high >= 0 { + intervals = append(intervals, interval{low, high}) + } + low = i + } + high = i + 1 + } + if high >= 0 { + intervals = append(intervals, interval{low, high}) + } + sort.Sort(byDecreasingLength(intervals)) + + fmt.Printf("const (\n") + fmt.Printf("\tjis0208 = 1\n") + fmt.Printf("\tjis0212 = 2\n") + fmt.Printf("\tcodeMask = 0x7f\n") + fmt.Printf("\tcodeShift = 7\n") + fmt.Printf("\ttableShift = 14\n") + fmt.Printf(")\n\n") + + fmt.Printf("const numEncodeTables = %d\n\n", len(intervals)) + fmt.Printf("// encodeX are the encoding tables from Unicode to JIS code,\n") + fmt.Printf("// sorted by decreasing length.\n") + for i, v := range intervals { + fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high) + } + fmt.Printf("//\n") + fmt.Printf("// The high two bits of the value record whether the JIS code comes from the\n") + fmt.Printf("// JIS0208 table (high bits == 1) or the JIS0212 table (high bits == 2).\n") + fmt.Printf("// The low 14 bits are two 7-bit unsigned integers j1 and j2 that form the\n") + fmt.Printf("// JIS code (94*j1 + j2) within that table.\n") + fmt.Printf("\n") + + for i, v := range intervals { + fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high) + fmt.Printf("var encode%d = [...]uint16{\n", i) + for j := v.low; j < v.high; j++ { + x := reverse[j] + if x.table == -1 { + continue + } + fmt.Printf("\t%d - %d: jis%s<<14 | 0x%02X<<7 | 0x%02X,\n", + j, v.low, tables[x.table].name, x.jisCode/94, x.jisCode%94) + } + fmt.Printf("}\n\n") + } +} + +// interval is a half-open interval [low, high). +type interval struct { + low, high int +} + +func (i interval) len() int { return i.high - i.low } + +// byDecreasingLength sorts intervals by decreasing length. +type byDecreasingLength []interval + +func (b byDecreasingLength) Len() int { return len(b) } +func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() } +func (b byDecreasingLength) Swap(i, j int) { b[i], b[j] = b[j], b[i] } diff --git a/vendor/golang.org/x/text/encoding/japanese/shiftjis.go b/vendor/golang.org/x/text/encoding/japanese/shiftjis.go new file mode 100644 index 0000000..16fd8a6 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/japanese/shiftjis.go @@ -0,0 +1,189 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// ShiftJIS is the Shift JIS encoding, also known as Code Page 932 and +// Windows-31J. +var ShiftJIS encoding.Encoding = &shiftJIS + +var shiftJIS = internal.Encoding{ + &internal.SimpleEncoding{shiftJISDecoder{}, shiftJISEncoder{}}, + "Shift JIS", + identifier.ShiftJIS, +} + +type shiftJISDecoder struct{ transform.NopResetter } + +func (shiftJISDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + case 0xa1 <= c0 && c0 < 0xe0: + r, size = rune(c0)+(0xff61-0xa1), 1 + + case (0x81 <= c0 && c0 < 0xa0) || (0xe0 <= c0 && c0 < 0xfd): + if c0 <= 0x9f { + c0 -= 0x70 + } else { + c0 -= 0xb0 + } + c0 = 2*c0 - 0x21 + + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = '\ufffd', 1 + goto write + } + c1 := src[nSrc+1] + switch { + case c1 < 0x40: + r, size = '\ufffd', 1 // c1 is ASCII so output on next round + goto write + case c1 < 0x7f: + c0-- + c1 -= 0x40 + case c1 == 0x7f: + r, size = '\ufffd', 1 // c1 is ASCII so output on next round + goto write + case c1 < 0x9f: + c0-- + c1 -= 0x41 + case c1 < 0xfd: + c1 -= 0x9f + default: + r, size = '\ufffd', 2 + goto write + } + r, size = '\ufffd', 2 + if i := int(c0)*94 + int(c1); i < len(jis0208Decode) { + r = rune(jis0208Decode[i]) + if r == 0 { + r = '\ufffd' + } + } + + case c0 == 0x80: + r, size = 0x80, 1 + + default: + r, size = '\ufffd', 1 + } + write: + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type shiftJISEncoder struct{ transform.NopResetter } + +func (shiftJISEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break loop + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode5Low <= r && r < encode5High: + if 0xff61 <= r && r < 0xffa0 { + r -= 0xff61 - 0xa1 + goto write1 + } + if r = rune(encode5[r-encode5Low]); r>>tableShift == jis0208 { + goto write2 + } + } + err = internal.ErrASCIIReplacement + break + } + + write1: + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + write2: + j1 := uint8(r>>codeShift) & codeMask + j2 := uint8(r) & codeMask + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break loop + } + if j1 <= 61 { + dst[nDst+0] = 129 + j1/2 + } else { + dst[nDst+0] = 193 + j1/2 + } + if j1&1 == 0 { + dst[nDst+1] = j2 + j2/63 + 64 + } else { + dst[nDst+1] = j2 + 159 + } + nDst += 2 + continue + } + return nDst, nSrc, err +} diff --git a/vendor/golang.org/x/text/encoding/japanese/tables.go b/vendor/golang.org/x/text/encoding/japanese/tables.go new file mode 100644 index 0000000..8717b79 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/japanese/tables.go @@ -0,0 +1,26971 @@ +// generated by go run maketables.go; DO NOT EDIT + +// Package japanese provides Japanese encodings such as EUC-JP and Shift JIS. +package japanese // import "golang.org/x/text/encoding/japanese" + +// jis0208Decode is the decoding table from JIS 0208 code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-jis0208.txt +var jis0208Decode = [...]uint16{ + 0: 0x3000, + 1: 0x3001, + 2: 0x3002, + 3: 0xFF0C, + 4: 0xFF0E, + 5: 0x30FB, + 6: 0xFF1A, + 7: 0xFF1B, + 8: 0xFF1F, + 9: 0xFF01, + 10: 0x309B, + 11: 0x309C, + 12: 0x00B4, + 13: 0xFF40, + 14: 0x00A8, + 15: 0xFF3E, + 16: 0xFFE3, + 17: 0xFF3F, + 18: 0x30FD, + 19: 0x30FE, + 20: 0x309D, + 21: 0x309E, + 22: 0x3003, + 23: 0x4EDD, + 24: 0x3005, + 25: 0x3006, + 26: 0x3007, + 27: 0x30FC, + 28: 0x2015, + 29: 0x2010, + 30: 0xFF0F, + 31: 0xFF3C, + 32: 0xFF5E, + 33: 0x2225, + 34: 0xFF5C, + 35: 0x2026, + 36: 0x2025, + 37: 0x2018, + 38: 0x2019, + 39: 0x201C, + 40: 0x201D, + 41: 0xFF08, + 42: 0xFF09, + 43: 0x3014, + 44: 0x3015, + 45: 0xFF3B, + 46: 0xFF3D, + 47: 0xFF5B, + 48: 0xFF5D, + 49: 0x3008, + 50: 0x3009, + 51: 0x300A, + 52: 0x300B, + 53: 0x300C, + 54: 0x300D, + 55: 0x300E, + 56: 0x300F, + 57: 0x3010, + 58: 0x3011, + 59: 0xFF0B, + 60: 0xFF0D, + 61: 0x00B1, + 62: 0x00D7, + 63: 0x00F7, + 64: 0xFF1D, + 65: 0x2260, + 66: 0xFF1C, + 67: 0xFF1E, + 68: 0x2266, + 69: 0x2267, + 70: 0x221E, + 71: 0x2234, + 72: 0x2642, + 73: 0x2640, + 74: 0x00B0, + 75: 0x2032, + 76: 0x2033, + 77: 0x2103, + 78: 0xFFE5, + 79: 0xFF04, + 80: 0xFFE0, + 81: 0xFFE1, + 82: 0xFF05, + 83: 0xFF03, + 84: 0xFF06, + 85: 0xFF0A, + 86: 0xFF20, + 87: 0x00A7, + 88: 0x2606, + 89: 0x2605, + 90: 0x25CB, + 91: 0x25CF, + 92: 0x25CE, + 93: 0x25C7, + 94: 0x25C6, + 95: 0x25A1, + 96: 0x25A0, + 97: 0x25B3, + 98: 0x25B2, + 99: 0x25BD, + 100: 0x25BC, + 101: 0x203B, + 102: 0x3012, + 103: 0x2192, + 104: 0x2190, + 105: 0x2191, + 106: 0x2193, + 107: 0x3013, + 119: 0x2208, + 120: 0x220B, + 121: 0x2286, + 122: 0x2287, + 123: 0x2282, + 124: 0x2283, + 125: 0x222A, + 126: 0x2229, + 135: 0x2227, + 136: 0x2228, + 137: 0xFFE2, + 138: 0x21D2, + 139: 0x21D4, + 140: 0x2200, + 141: 0x2203, + 153: 0x2220, + 154: 0x22A5, + 155: 0x2312, + 156: 0x2202, + 157: 0x2207, + 158: 0x2261, + 159: 0x2252, + 160: 0x226A, + 161: 0x226B, + 162: 0x221A, + 163: 0x223D, + 164: 0x221D, + 165: 0x2235, + 166: 0x222B, + 167: 0x222C, + 175: 0x212B, + 176: 0x2030, + 177: 0x266F, + 178: 0x266D, + 179: 0x266A, + 180: 0x2020, + 181: 0x2021, + 182: 0x00B6, + 187: 0x25EF, + 203: 0xFF10, + 204: 0xFF11, + 205: 0xFF12, + 206: 0xFF13, + 207: 0xFF14, + 208: 0xFF15, + 209: 0xFF16, + 210: 0xFF17, + 211: 0xFF18, + 212: 0xFF19, + 220: 0xFF21, + 221: 0xFF22, + 222: 0xFF23, + 223: 0xFF24, + 224: 0xFF25, + 225: 0xFF26, + 226: 0xFF27, + 227: 0xFF28, + 228: 0xFF29, + 229: 0xFF2A, + 230: 0xFF2B, + 231: 0xFF2C, + 232: 0xFF2D, + 233: 0xFF2E, + 234: 0xFF2F, + 235: 0xFF30, + 236: 0xFF31, + 237: 0xFF32, + 238: 0xFF33, + 239: 0xFF34, + 240: 0xFF35, + 241: 0xFF36, + 242: 0xFF37, + 243: 0xFF38, + 244: 0xFF39, + 245: 0xFF3A, + 252: 0xFF41, + 253: 0xFF42, + 254: 0xFF43, + 255: 0xFF44, + 256: 0xFF45, + 257: 0xFF46, + 258: 0xFF47, + 259: 0xFF48, + 260: 0xFF49, + 261: 0xFF4A, + 262: 0xFF4B, + 263: 0xFF4C, + 264: 0xFF4D, + 265: 0xFF4E, + 266: 0xFF4F, + 267: 0xFF50, + 268: 0xFF51, + 269: 0xFF52, + 270: 0xFF53, + 271: 0xFF54, + 272: 0xFF55, + 273: 0xFF56, + 274: 0xFF57, + 275: 0xFF58, + 276: 0xFF59, + 277: 0xFF5A, + 282: 0x3041, + 283: 0x3042, + 284: 0x3043, + 285: 0x3044, + 286: 0x3045, + 287: 0x3046, + 288: 0x3047, + 289: 0x3048, + 290: 0x3049, + 291: 0x304A, + 292: 0x304B, + 293: 0x304C, + 294: 0x304D, + 295: 0x304E, + 296: 0x304F, + 297: 0x3050, + 298: 0x3051, + 299: 0x3052, + 300: 0x3053, + 301: 0x3054, + 302: 0x3055, + 303: 0x3056, + 304: 0x3057, + 305: 0x3058, + 306: 0x3059, + 307: 0x305A, + 308: 0x305B, + 309: 0x305C, + 310: 0x305D, + 311: 0x305E, + 312: 0x305F, + 313: 0x3060, + 314: 0x3061, + 315: 0x3062, + 316: 0x3063, + 317: 0x3064, + 318: 0x3065, + 319: 0x3066, + 320: 0x3067, + 321: 0x3068, + 322: 0x3069, + 323: 0x306A, + 324: 0x306B, + 325: 0x306C, + 326: 0x306D, + 327: 0x306E, + 328: 0x306F, + 329: 0x3070, + 330: 0x3071, + 331: 0x3072, + 332: 0x3073, + 333: 0x3074, + 334: 0x3075, + 335: 0x3076, + 336: 0x3077, + 337: 0x3078, + 338: 0x3079, + 339: 0x307A, + 340: 0x307B, + 341: 0x307C, + 342: 0x307D, + 343: 0x307E, + 344: 0x307F, + 345: 0x3080, + 346: 0x3081, + 347: 0x3082, + 348: 0x3083, + 349: 0x3084, + 350: 0x3085, + 351: 0x3086, + 352: 0x3087, + 353: 0x3088, + 354: 0x3089, + 355: 0x308A, + 356: 0x308B, + 357: 0x308C, + 358: 0x308D, + 359: 0x308E, + 360: 0x308F, + 361: 0x3090, + 362: 0x3091, + 363: 0x3092, + 364: 0x3093, + 376: 0x30A1, + 377: 0x30A2, + 378: 0x30A3, + 379: 0x30A4, + 380: 0x30A5, + 381: 0x30A6, + 382: 0x30A7, + 383: 0x30A8, + 384: 0x30A9, + 385: 0x30AA, + 386: 0x30AB, + 387: 0x30AC, + 388: 0x30AD, + 389: 0x30AE, + 390: 0x30AF, + 391: 0x30B0, + 392: 0x30B1, + 393: 0x30B2, + 394: 0x30B3, + 395: 0x30B4, + 396: 0x30B5, + 397: 0x30B6, + 398: 0x30B7, + 399: 0x30B8, + 400: 0x30B9, + 401: 0x30BA, + 402: 0x30BB, + 403: 0x30BC, + 404: 0x30BD, + 405: 0x30BE, + 406: 0x30BF, + 407: 0x30C0, + 408: 0x30C1, + 409: 0x30C2, + 410: 0x30C3, + 411: 0x30C4, + 412: 0x30C5, + 413: 0x30C6, + 414: 0x30C7, + 415: 0x30C8, + 416: 0x30C9, + 417: 0x30CA, + 418: 0x30CB, + 419: 0x30CC, + 420: 0x30CD, + 421: 0x30CE, + 422: 0x30CF, + 423: 0x30D0, + 424: 0x30D1, + 425: 0x30D2, + 426: 0x30D3, + 427: 0x30D4, + 428: 0x30D5, + 429: 0x30D6, + 430: 0x30D7, + 431: 0x30D8, + 432: 0x30D9, + 433: 0x30DA, + 434: 0x30DB, + 435: 0x30DC, + 436: 0x30DD, + 437: 0x30DE, + 438: 0x30DF, + 439: 0x30E0, + 440: 0x30E1, + 441: 0x30E2, + 442: 0x30E3, + 443: 0x30E4, + 444: 0x30E5, + 445: 0x30E6, + 446: 0x30E7, + 447: 0x30E8, + 448: 0x30E9, + 449: 0x30EA, + 450: 0x30EB, + 451: 0x30EC, + 452: 0x30ED, + 453: 0x30EE, + 454: 0x30EF, + 455: 0x30F0, + 456: 0x30F1, + 457: 0x30F2, + 458: 0x30F3, + 459: 0x30F4, + 460: 0x30F5, + 461: 0x30F6, + 470: 0x0391, + 471: 0x0392, + 472: 0x0393, + 473: 0x0394, + 474: 0x0395, + 475: 0x0396, + 476: 0x0397, + 477: 0x0398, + 478: 0x0399, + 479: 0x039A, + 480: 0x039B, + 481: 0x039C, + 482: 0x039D, + 483: 0x039E, + 484: 0x039F, + 485: 0x03A0, + 486: 0x03A1, + 487: 0x03A3, + 488: 0x03A4, + 489: 0x03A5, + 490: 0x03A6, + 491: 0x03A7, + 492: 0x03A8, + 493: 0x03A9, + 502: 0x03B1, + 503: 0x03B2, + 504: 0x03B3, + 505: 0x03B4, + 506: 0x03B5, + 507: 0x03B6, + 508: 0x03B7, + 509: 0x03B8, + 510: 0x03B9, + 511: 0x03BA, + 512: 0x03BB, + 513: 0x03BC, + 514: 0x03BD, + 515: 0x03BE, + 516: 0x03BF, + 517: 0x03C0, + 518: 0x03C1, + 519: 0x03C3, + 520: 0x03C4, + 521: 0x03C5, + 522: 0x03C6, + 523: 0x03C7, + 524: 0x03C8, + 525: 0x03C9, + 564: 0x0410, + 565: 0x0411, + 566: 0x0412, + 567: 0x0413, + 568: 0x0414, + 569: 0x0415, + 570: 0x0401, + 571: 0x0416, + 572: 0x0417, + 573: 0x0418, + 574: 0x0419, + 575: 0x041A, + 576: 0x041B, + 577: 0x041C, + 578: 0x041D, + 579: 0x041E, + 580: 0x041F, + 581: 0x0420, + 582: 0x0421, + 583: 0x0422, + 584: 0x0423, + 585: 0x0424, + 586: 0x0425, + 587: 0x0426, + 588: 0x0427, + 589: 0x0428, + 590: 0x0429, + 591: 0x042A, + 592: 0x042B, + 593: 0x042C, + 594: 0x042D, + 595: 0x042E, + 596: 0x042F, + 612: 0x0430, + 613: 0x0431, + 614: 0x0432, + 615: 0x0433, + 616: 0x0434, + 617: 0x0435, + 618: 0x0451, + 619: 0x0436, + 620: 0x0437, + 621: 0x0438, + 622: 0x0439, + 623: 0x043A, + 624: 0x043B, + 625: 0x043C, + 626: 0x043D, + 627: 0x043E, + 628: 0x043F, + 629: 0x0440, + 630: 0x0441, + 631: 0x0442, + 632: 0x0443, + 633: 0x0444, + 634: 0x0445, + 635: 0x0446, + 636: 0x0447, + 637: 0x0448, + 638: 0x0449, + 639: 0x044A, + 640: 0x044B, + 641: 0x044C, + 642: 0x044D, + 643: 0x044E, + 644: 0x044F, + 658: 0x2500, + 659: 0x2502, + 660: 0x250C, + 661: 0x2510, + 662: 0x2518, + 663: 0x2514, + 664: 0x251C, + 665: 0x252C, + 666: 0x2524, + 667: 0x2534, + 668: 0x253C, + 669: 0x2501, + 670: 0x2503, + 671: 0x250F, + 672: 0x2513, + 673: 0x251B, + 674: 0x2517, + 675: 0x2523, + 676: 0x2533, + 677: 0x252B, + 678: 0x253B, + 679: 0x254B, + 680: 0x2520, + 681: 0x252F, + 682: 0x2528, + 683: 0x2537, + 684: 0x253F, + 685: 0x251D, + 686: 0x2530, + 687: 0x2525, + 688: 0x2538, + 689: 0x2542, + 1128: 0x2460, + 1129: 0x2461, + 1130: 0x2462, + 1131: 0x2463, + 1132: 0x2464, + 1133: 0x2465, + 1134: 0x2466, + 1135: 0x2467, + 1136: 0x2468, + 1137: 0x2469, + 1138: 0x246A, + 1139: 0x246B, + 1140: 0x246C, + 1141: 0x246D, + 1142: 0x246E, + 1143: 0x246F, + 1144: 0x2470, + 1145: 0x2471, + 1146: 0x2472, + 1147: 0x2473, + 1148: 0x2160, + 1149: 0x2161, + 1150: 0x2162, + 1151: 0x2163, + 1152: 0x2164, + 1153: 0x2165, + 1154: 0x2166, + 1155: 0x2167, + 1156: 0x2168, + 1157: 0x2169, + 1159: 0x3349, + 1160: 0x3314, + 1161: 0x3322, + 1162: 0x334D, + 1163: 0x3318, + 1164: 0x3327, + 1165: 0x3303, + 1166: 0x3336, + 1167: 0x3351, + 1168: 0x3357, + 1169: 0x330D, + 1170: 0x3326, + 1171: 0x3323, + 1172: 0x332B, + 1173: 0x334A, + 1174: 0x333B, + 1175: 0x339C, + 1176: 0x339D, + 1177: 0x339E, + 1178: 0x338E, + 1179: 0x338F, + 1180: 0x33C4, + 1181: 0x33A1, + 1190: 0x337B, + 1191: 0x301D, + 1192: 0x301F, + 1193: 0x2116, + 1194: 0x33CD, + 1195: 0x2121, + 1196: 0x32A4, + 1197: 0x32A5, + 1198: 0x32A6, + 1199: 0x32A7, + 1200: 0x32A8, + 1201: 0x3231, + 1202: 0x3232, + 1203: 0x3239, + 1204: 0x337E, + 1205: 0x337D, + 1206: 0x337C, + 1207: 0x2252, + 1208: 0x2261, + 1209: 0x222B, + 1210: 0x222E, + 1211: 0x2211, + 1212: 0x221A, + 1213: 0x22A5, + 1214: 0x2220, + 1215: 0x221F, + 1216: 0x22BF, + 1217: 0x2235, + 1218: 0x2229, + 1219: 0x222A, + 1410: 0x4E9C, + 1411: 0x5516, + 1412: 0x5A03, + 1413: 0x963F, + 1414: 0x54C0, + 1415: 0x611B, + 1416: 0x6328, + 1417: 0x59F6, + 1418: 0x9022, + 1419: 0x8475, + 1420: 0x831C, + 1421: 0x7A50, + 1422: 0x60AA, + 1423: 0x63E1, + 1424: 0x6E25, + 1425: 0x65ED, + 1426: 0x8466, + 1427: 0x82A6, + 1428: 0x9BF5, + 1429: 0x6893, + 1430: 0x5727, + 1431: 0x65A1, + 1432: 0x6271, + 1433: 0x5B9B, + 1434: 0x59D0, + 1435: 0x867B, + 1436: 0x98F4, + 1437: 0x7D62, + 1438: 0x7DBE, + 1439: 0x9B8E, + 1440: 0x6216, + 1441: 0x7C9F, + 1442: 0x88B7, + 1443: 0x5B89, + 1444: 0x5EB5, + 1445: 0x6309, + 1446: 0x6697, + 1447: 0x6848, + 1448: 0x95C7, + 1449: 0x978D, + 1450: 0x674F, + 1451: 0x4EE5, + 1452: 0x4F0A, + 1453: 0x4F4D, + 1454: 0x4F9D, + 1455: 0x5049, + 1456: 0x56F2, + 1457: 0x5937, + 1458: 0x59D4, + 1459: 0x5A01, + 1460: 0x5C09, + 1461: 0x60DF, + 1462: 0x610F, + 1463: 0x6170, + 1464: 0x6613, + 1465: 0x6905, + 1466: 0x70BA, + 1467: 0x754F, + 1468: 0x7570, + 1469: 0x79FB, + 1470: 0x7DAD, + 1471: 0x7DEF, + 1472: 0x80C3, + 1473: 0x840E, + 1474: 0x8863, + 1475: 0x8B02, + 1476: 0x9055, + 1477: 0x907A, + 1478: 0x533B, + 1479: 0x4E95, + 1480: 0x4EA5, + 1481: 0x57DF, + 1482: 0x80B2, + 1483: 0x90C1, + 1484: 0x78EF, + 1485: 0x4E00, + 1486: 0x58F1, + 1487: 0x6EA2, + 1488: 0x9038, + 1489: 0x7A32, + 1490: 0x8328, + 1491: 0x828B, + 1492: 0x9C2F, + 1493: 0x5141, + 1494: 0x5370, + 1495: 0x54BD, + 1496: 0x54E1, + 1497: 0x56E0, + 1498: 0x59FB, + 1499: 0x5F15, + 1500: 0x98F2, + 1501: 0x6DEB, + 1502: 0x80E4, + 1503: 0x852D, + 1504: 0x9662, + 1505: 0x9670, + 1506: 0x96A0, + 1507: 0x97FB, + 1508: 0x540B, + 1509: 0x53F3, + 1510: 0x5B87, + 1511: 0x70CF, + 1512: 0x7FBD, + 1513: 0x8FC2, + 1514: 0x96E8, + 1515: 0x536F, + 1516: 0x9D5C, + 1517: 0x7ABA, + 1518: 0x4E11, + 1519: 0x7893, + 1520: 0x81FC, + 1521: 0x6E26, + 1522: 0x5618, + 1523: 0x5504, + 1524: 0x6B1D, + 1525: 0x851A, + 1526: 0x9C3B, + 1527: 0x59E5, + 1528: 0x53A9, + 1529: 0x6D66, + 1530: 0x74DC, + 1531: 0x958F, + 1532: 0x5642, + 1533: 0x4E91, + 1534: 0x904B, + 1535: 0x96F2, + 1536: 0x834F, + 1537: 0x990C, + 1538: 0x53E1, + 1539: 0x55B6, + 1540: 0x5B30, + 1541: 0x5F71, + 1542: 0x6620, + 1543: 0x66F3, + 1544: 0x6804, + 1545: 0x6C38, + 1546: 0x6CF3, + 1547: 0x6D29, + 1548: 0x745B, + 1549: 0x76C8, + 1550: 0x7A4E, + 1551: 0x9834, + 1552: 0x82F1, + 1553: 0x885B, + 1554: 0x8A60, + 1555: 0x92ED, + 1556: 0x6DB2, + 1557: 0x75AB, + 1558: 0x76CA, + 1559: 0x99C5, + 1560: 0x60A6, + 1561: 0x8B01, + 1562: 0x8D8A, + 1563: 0x95B2, + 1564: 0x698E, + 1565: 0x53AD, + 1566: 0x5186, + 1567: 0x5712, + 1568: 0x5830, + 1569: 0x5944, + 1570: 0x5BB4, + 1571: 0x5EF6, + 1572: 0x6028, + 1573: 0x63A9, + 1574: 0x63F4, + 1575: 0x6CBF, + 1576: 0x6F14, + 1577: 0x708E, + 1578: 0x7114, + 1579: 0x7159, + 1580: 0x71D5, + 1581: 0x733F, + 1582: 0x7E01, + 1583: 0x8276, + 1584: 0x82D1, + 1585: 0x8597, + 1586: 0x9060, + 1587: 0x925B, + 1588: 0x9D1B, + 1589: 0x5869, + 1590: 0x65BC, + 1591: 0x6C5A, + 1592: 0x7525, + 1593: 0x51F9, + 1594: 0x592E, + 1595: 0x5965, + 1596: 0x5F80, + 1597: 0x5FDC, + 1598: 0x62BC, + 1599: 0x65FA, + 1600: 0x6A2A, + 1601: 0x6B27, + 1602: 0x6BB4, + 1603: 0x738B, + 1604: 0x7FC1, + 1605: 0x8956, + 1606: 0x9D2C, + 1607: 0x9D0E, + 1608: 0x9EC4, + 1609: 0x5CA1, + 1610: 0x6C96, + 1611: 0x837B, + 1612: 0x5104, + 1613: 0x5C4B, + 1614: 0x61B6, + 1615: 0x81C6, + 1616: 0x6876, + 1617: 0x7261, + 1618: 0x4E59, + 1619: 0x4FFA, + 1620: 0x5378, + 1621: 0x6069, + 1622: 0x6E29, + 1623: 0x7A4F, + 1624: 0x97F3, + 1625: 0x4E0B, + 1626: 0x5316, + 1627: 0x4EEE, + 1628: 0x4F55, + 1629: 0x4F3D, + 1630: 0x4FA1, + 1631: 0x4F73, + 1632: 0x52A0, + 1633: 0x53EF, + 1634: 0x5609, + 1635: 0x590F, + 1636: 0x5AC1, + 1637: 0x5BB6, + 1638: 0x5BE1, + 1639: 0x79D1, + 1640: 0x6687, + 1641: 0x679C, + 1642: 0x67B6, + 1643: 0x6B4C, + 1644: 0x6CB3, + 1645: 0x706B, + 1646: 0x73C2, + 1647: 0x798D, + 1648: 0x79BE, + 1649: 0x7A3C, + 1650: 0x7B87, + 1651: 0x82B1, + 1652: 0x82DB, + 1653: 0x8304, + 1654: 0x8377, + 1655: 0x83EF, + 1656: 0x83D3, + 1657: 0x8766, + 1658: 0x8AB2, + 1659: 0x5629, + 1660: 0x8CA8, + 1661: 0x8FE6, + 1662: 0x904E, + 1663: 0x971E, + 1664: 0x868A, + 1665: 0x4FC4, + 1666: 0x5CE8, + 1667: 0x6211, + 1668: 0x7259, + 1669: 0x753B, + 1670: 0x81E5, + 1671: 0x82BD, + 1672: 0x86FE, + 1673: 0x8CC0, + 1674: 0x96C5, + 1675: 0x9913, + 1676: 0x99D5, + 1677: 0x4ECB, + 1678: 0x4F1A, + 1679: 0x89E3, + 1680: 0x56DE, + 1681: 0x584A, + 1682: 0x58CA, + 1683: 0x5EFB, + 1684: 0x5FEB, + 1685: 0x602A, + 1686: 0x6094, + 1687: 0x6062, + 1688: 0x61D0, + 1689: 0x6212, + 1690: 0x62D0, + 1691: 0x6539, + 1692: 0x9B41, + 1693: 0x6666, + 1694: 0x68B0, + 1695: 0x6D77, + 1696: 0x7070, + 1697: 0x754C, + 1698: 0x7686, + 1699: 0x7D75, + 1700: 0x82A5, + 1701: 0x87F9, + 1702: 0x958B, + 1703: 0x968E, + 1704: 0x8C9D, + 1705: 0x51F1, + 1706: 0x52BE, + 1707: 0x5916, + 1708: 0x54B3, + 1709: 0x5BB3, + 1710: 0x5D16, + 1711: 0x6168, + 1712: 0x6982, + 1713: 0x6DAF, + 1714: 0x788D, + 1715: 0x84CB, + 1716: 0x8857, + 1717: 0x8A72, + 1718: 0x93A7, + 1719: 0x9AB8, + 1720: 0x6D6C, + 1721: 0x99A8, + 1722: 0x86D9, + 1723: 0x57A3, + 1724: 0x67FF, + 1725: 0x86CE, + 1726: 0x920E, + 1727: 0x5283, + 1728: 0x5687, + 1729: 0x5404, + 1730: 0x5ED3, + 1731: 0x62E1, + 1732: 0x64B9, + 1733: 0x683C, + 1734: 0x6838, + 1735: 0x6BBB, + 1736: 0x7372, + 1737: 0x78BA, + 1738: 0x7A6B, + 1739: 0x899A, + 1740: 0x89D2, + 1741: 0x8D6B, + 1742: 0x8F03, + 1743: 0x90ED, + 1744: 0x95A3, + 1745: 0x9694, + 1746: 0x9769, + 1747: 0x5B66, + 1748: 0x5CB3, + 1749: 0x697D, + 1750: 0x984D, + 1751: 0x984E, + 1752: 0x639B, + 1753: 0x7B20, + 1754: 0x6A2B, + 1755: 0x6A7F, + 1756: 0x68B6, + 1757: 0x9C0D, + 1758: 0x6F5F, + 1759: 0x5272, + 1760: 0x559D, + 1761: 0x6070, + 1762: 0x62EC, + 1763: 0x6D3B, + 1764: 0x6E07, + 1765: 0x6ED1, + 1766: 0x845B, + 1767: 0x8910, + 1768: 0x8F44, + 1769: 0x4E14, + 1770: 0x9C39, + 1771: 0x53F6, + 1772: 0x691B, + 1773: 0x6A3A, + 1774: 0x9784, + 1775: 0x682A, + 1776: 0x515C, + 1777: 0x7AC3, + 1778: 0x84B2, + 1779: 0x91DC, + 1780: 0x938C, + 1781: 0x565B, + 1782: 0x9D28, + 1783: 0x6822, + 1784: 0x8305, + 1785: 0x8431, + 1786: 0x7CA5, + 1787: 0x5208, + 1788: 0x82C5, + 1789: 0x74E6, + 1790: 0x4E7E, + 1791: 0x4F83, + 1792: 0x51A0, + 1793: 0x5BD2, + 1794: 0x520A, + 1795: 0x52D8, + 1796: 0x52E7, + 1797: 0x5DFB, + 1798: 0x559A, + 1799: 0x582A, + 1800: 0x59E6, + 1801: 0x5B8C, + 1802: 0x5B98, + 1803: 0x5BDB, + 1804: 0x5E72, + 1805: 0x5E79, + 1806: 0x60A3, + 1807: 0x611F, + 1808: 0x6163, + 1809: 0x61BE, + 1810: 0x63DB, + 1811: 0x6562, + 1812: 0x67D1, + 1813: 0x6853, + 1814: 0x68FA, + 1815: 0x6B3E, + 1816: 0x6B53, + 1817: 0x6C57, + 1818: 0x6F22, + 1819: 0x6F97, + 1820: 0x6F45, + 1821: 0x74B0, + 1822: 0x7518, + 1823: 0x76E3, + 1824: 0x770B, + 1825: 0x7AFF, + 1826: 0x7BA1, + 1827: 0x7C21, + 1828: 0x7DE9, + 1829: 0x7F36, + 1830: 0x7FF0, + 1831: 0x809D, + 1832: 0x8266, + 1833: 0x839E, + 1834: 0x89B3, + 1835: 0x8ACC, + 1836: 0x8CAB, + 1837: 0x9084, + 1838: 0x9451, + 1839: 0x9593, + 1840: 0x9591, + 1841: 0x95A2, + 1842: 0x9665, + 1843: 0x97D3, + 1844: 0x9928, + 1845: 0x8218, + 1846: 0x4E38, + 1847: 0x542B, + 1848: 0x5CB8, + 1849: 0x5DCC, + 1850: 0x73A9, + 1851: 0x764C, + 1852: 0x773C, + 1853: 0x5CA9, + 1854: 0x7FEB, + 1855: 0x8D0B, + 1856: 0x96C1, + 1857: 0x9811, + 1858: 0x9854, + 1859: 0x9858, + 1860: 0x4F01, + 1861: 0x4F0E, + 1862: 0x5371, + 1863: 0x559C, + 1864: 0x5668, + 1865: 0x57FA, + 1866: 0x5947, + 1867: 0x5B09, + 1868: 0x5BC4, + 1869: 0x5C90, + 1870: 0x5E0C, + 1871: 0x5E7E, + 1872: 0x5FCC, + 1873: 0x63EE, + 1874: 0x673A, + 1875: 0x65D7, + 1876: 0x65E2, + 1877: 0x671F, + 1878: 0x68CB, + 1879: 0x68C4, + 1880: 0x6A5F, + 1881: 0x5E30, + 1882: 0x6BC5, + 1883: 0x6C17, + 1884: 0x6C7D, + 1885: 0x757F, + 1886: 0x7948, + 1887: 0x5B63, + 1888: 0x7A00, + 1889: 0x7D00, + 1890: 0x5FBD, + 1891: 0x898F, + 1892: 0x8A18, + 1893: 0x8CB4, + 1894: 0x8D77, + 1895: 0x8ECC, + 1896: 0x8F1D, + 1897: 0x98E2, + 1898: 0x9A0E, + 1899: 0x9B3C, + 1900: 0x4E80, + 1901: 0x507D, + 1902: 0x5100, + 1903: 0x5993, + 1904: 0x5B9C, + 1905: 0x622F, + 1906: 0x6280, + 1907: 0x64EC, + 1908: 0x6B3A, + 1909: 0x72A0, + 1910: 0x7591, + 1911: 0x7947, + 1912: 0x7FA9, + 1913: 0x87FB, + 1914: 0x8ABC, + 1915: 0x8B70, + 1916: 0x63AC, + 1917: 0x83CA, + 1918: 0x97A0, + 1919: 0x5409, + 1920: 0x5403, + 1921: 0x55AB, + 1922: 0x6854, + 1923: 0x6A58, + 1924: 0x8A70, + 1925: 0x7827, + 1926: 0x6775, + 1927: 0x9ECD, + 1928: 0x5374, + 1929: 0x5BA2, + 1930: 0x811A, + 1931: 0x8650, + 1932: 0x9006, + 1933: 0x4E18, + 1934: 0x4E45, + 1935: 0x4EC7, + 1936: 0x4F11, + 1937: 0x53CA, + 1938: 0x5438, + 1939: 0x5BAE, + 1940: 0x5F13, + 1941: 0x6025, + 1942: 0x6551, + 1943: 0x673D, + 1944: 0x6C42, + 1945: 0x6C72, + 1946: 0x6CE3, + 1947: 0x7078, + 1948: 0x7403, + 1949: 0x7A76, + 1950: 0x7AAE, + 1951: 0x7B08, + 1952: 0x7D1A, + 1953: 0x7CFE, + 1954: 0x7D66, + 1955: 0x65E7, + 1956: 0x725B, + 1957: 0x53BB, + 1958: 0x5C45, + 1959: 0x5DE8, + 1960: 0x62D2, + 1961: 0x62E0, + 1962: 0x6319, + 1963: 0x6E20, + 1964: 0x865A, + 1965: 0x8A31, + 1966: 0x8DDD, + 1967: 0x92F8, + 1968: 0x6F01, + 1969: 0x79A6, + 1970: 0x9B5A, + 1971: 0x4EA8, + 1972: 0x4EAB, + 1973: 0x4EAC, + 1974: 0x4F9B, + 1975: 0x4FA0, + 1976: 0x50D1, + 1977: 0x5147, + 1978: 0x7AF6, + 1979: 0x5171, + 1980: 0x51F6, + 1981: 0x5354, + 1982: 0x5321, + 1983: 0x537F, + 1984: 0x53EB, + 1985: 0x55AC, + 1986: 0x5883, + 1987: 0x5CE1, + 1988: 0x5F37, + 1989: 0x5F4A, + 1990: 0x602F, + 1991: 0x6050, + 1992: 0x606D, + 1993: 0x631F, + 1994: 0x6559, + 1995: 0x6A4B, + 1996: 0x6CC1, + 1997: 0x72C2, + 1998: 0x72ED, + 1999: 0x77EF, + 2000: 0x80F8, + 2001: 0x8105, + 2002: 0x8208, + 2003: 0x854E, + 2004: 0x90F7, + 2005: 0x93E1, + 2006: 0x97FF, + 2007: 0x9957, + 2008: 0x9A5A, + 2009: 0x4EF0, + 2010: 0x51DD, + 2011: 0x5C2D, + 2012: 0x6681, + 2013: 0x696D, + 2014: 0x5C40, + 2015: 0x66F2, + 2016: 0x6975, + 2017: 0x7389, + 2018: 0x6850, + 2019: 0x7C81, + 2020: 0x50C5, + 2021: 0x52E4, + 2022: 0x5747, + 2023: 0x5DFE, + 2024: 0x9326, + 2025: 0x65A4, + 2026: 0x6B23, + 2027: 0x6B3D, + 2028: 0x7434, + 2029: 0x7981, + 2030: 0x79BD, + 2031: 0x7B4B, + 2032: 0x7DCA, + 2033: 0x82B9, + 2034: 0x83CC, + 2035: 0x887F, + 2036: 0x895F, + 2037: 0x8B39, + 2038: 0x8FD1, + 2039: 0x91D1, + 2040: 0x541F, + 2041: 0x9280, + 2042: 0x4E5D, + 2043: 0x5036, + 2044: 0x53E5, + 2045: 0x533A, + 2046: 0x72D7, + 2047: 0x7396, + 2048: 0x77E9, + 2049: 0x82E6, + 2050: 0x8EAF, + 2051: 0x99C6, + 2052: 0x99C8, + 2053: 0x99D2, + 2054: 0x5177, + 2055: 0x611A, + 2056: 0x865E, + 2057: 0x55B0, + 2058: 0x7A7A, + 2059: 0x5076, + 2060: 0x5BD3, + 2061: 0x9047, + 2062: 0x9685, + 2063: 0x4E32, + 2064: 0x6ADB, + 2065: 0x91E7, + 2066: 0x5C51, + 2067: 0x5C48, + 2068: 0x6398, + 2069: 0x7A9F, + 2070: 0x6C93, + 2071: 0x9774, + 2072: 0x8F61, + 2073: 0x7AAA, + 2074: 0x718A, + 2075: 0x9688, + 2076: 0x7C82, + 2077: 0x6817, + 2078: 0x7E70, + 2079: 0x6851, + 2080: 0x936C, + 2081: 0x52F2, + 2082: 0x541B, + 2083: 0x85AB, + 2084: 0x8A13, + 2085: 0x7FA4, + 2086: 0x8ECD, + 2087: 0x90E1, + 2088: 0x5366, + 2089: 0x8888, + 2090: 0x7941, + 2091: 0x4FC2, + 2092: 0x50BE, + 2093: 0x5211, + 2094: 0x5144, + 2095: 0x5553, + 2096: 0x572D, + 2097: 0x73EA, + 2098: 0x578B, + 2099: 0x5951, + 2100: 0x5F62, + 2101: 0x5F84, + 2102: 0x6075, + 2103: 0x6176, + 2104: 0x6167, + 2105: 0x61A9, + 2106: 0x63B2, + 2107: 0x643A, + 2108: 0x656C, + 2109: 0x666F, + 2110: 0x6842, + 2111: 0x6E13, + 2112: 0x7566, + 2113: 0x7A3D, + 2114: 0x7CFB, + 2115: 0x7D4C, + 2116: 0x7D99, + 2117: 0x7E4B, + 2118: 0x7F6B, + 2119: 0x830E, + 2120: 0x834A, + 2121: 0x86CD, + 2122: 0x8A08, + 2123: 0x8A63, + 2124: 0x8B66, + 2125: 0x8EFD, + 2126: 0x981A, + 2127: 0x9D8F, + 2128: 0x82B8, + 2129: 0x8FCE, + 2130: 0x9BE8, + 2131: 0x5287, + 2132: 0x621F, + 2133: 0x6483, + 2134: 0x6FC0, + 2135: 0x9699, + 2136: 0x6841, + 2137: 0x5091, + 2138: 0x6B20, + 2139: 0x6C7A, + 2140: 0x6F54, + 2141: 0x7A74, + 2142: 0x7D50, + 2143: 0x8840, + 2144: 0x8A23, + 2145: 0x6708, + 2146: 0x4EF6, + 2147: 0x5039, + 2148: 0x5026, + 2149: 0x5065, + 2150: 0x517C, + 2151: 0x5238, + 2152: 0x5263, + 2153: 0x55A7, + 2154: 0x570F, + 2155: 0x5805, + 2156: 0x5ACC, + 2157: 0x5EFA, + 2158: 0x61B2, + 2159: 0x61F8, + 2160: 0x62F3, + 2161: 0x6372, + 2162: 0x691C, + 2163: 0x6A29, + 2164: 0x727D, + 2165: 0x72AC, + 2166: 0x732E, + 2167: 0x7814, + 2168: 0x786F, + 2169: 0x7D79, + 2170: 0x770C, + 2171: 0x80A9, + 2172: 0x898B, + 2173: 0x8B19, + 2174: 0x8CE2, + 2175: 0x8ED2, + 2176: 0x9063, + 2177: 0x9375, + 2178: 0x967A, + 2179: 0x9855, + 2180: 0x9A13, + 2181: 0x9E78, + 2182: 0x5143, + 2183: 0x539F, + 2184: 0x53B3, + 2185: 0x5E7B, + 2186: 0x5F26, + 2187: 0x6E1B, + 2188: 0x6E90, + 2189: 0x7384, + 2190: 0x73FE, + 2191: 0x7D43, + 2192: 0x8237, + 2193: 0x8A00, + 2194: 0x8AFA, + 2195: 0x9650, + 2196: 0x4E4E, + 2197: 0x500B, + 2198: 0x53E4, + 2199: 0x547C, + 2200: 0x56FA, + 2201: 0x59D1, + 2202: 0x5B64, + 2203: 0x5DF1, + 2204: 0x5EAB, + 2205: 0x5F27, + 2206: 0x6238, + 2207: 0x6545, + 2208: 0x67AF, + 2209: 0x6E56, + 2210: 0x72D0, + 2211: 0x7CCA, + 2212: 0x88B4, + 2213: 0x80A1, + 2214: 0x80E1, + 2215: 0x83F0, + 2216: 0x864E, + 2217: 0x8A87, + 2218: 0x8DE8, + 2219: 0x9237, + 2220: 0x96C7, + 2221: 0x9867, + 2222: 0x9F13, + 2223: 0x4E94, + 2224: 0x4E92, + 2225: 0x4F0D, + 2226: 0x5348, + 2227: 0x5449, + 2228: 0x543E, + 2229: 0x5A2F, + 2230: 0x5F8C, + 2231: 0x5FA1, + 2232: 0x609F, + 2233: 0x68A7, + 2234: 0x6A8E, + 2235: 0x745A, + 2236: 0x7881, + 2237: 0x8A9E, + 2238: 0x8AA4, + 2239: 0x8B77, + 2240: 0x9190, + 2241: 0x4E5E, + 2242: 0x9BC9, + 2243: 0x4EA4, + 2244: 0x4F7C, + 2245: 0x4FAF, + 2246: 0x5019, + 2247: 0x5016, + 2248: 0x5149, + 2249: 0x516C, + 2250: 0x529F, + 2251: 0x52B9, + 2252: 0x52FE, + 2253: 0x539A, + 2254: 0x53E3, + 2255: 0x5411, + 2256: 0x540E, + 2257: 0x5589, + 2258: 0x5751, + 2259: 0x57A2, + 2260: 0x597D, + 2261: 0x5B54, + 2262: 0x5B5D, + 2263: 0x5B8F, + 2264: 0x5DE5, + 2265: 0x5DE7, + 2266: 0x5DF7, + 2267: 0x5E78, + 2268: 0x5E83, + 2269: 0x5E9A, + 2270: 0x5EB7, + 2271: 0x5F18, + 2272: 0x6052, + 2273: 0x614C, + 2274: 0x6297, + 2275: 0x62D8, + 2276: 0x63A7, + 2277: 0x653B, + 2278: 0x6602, + 2279: 0x6643, + 2280: 0x66F4, + 2281: 0x676D, + 2282: 0x6821, + 2283: 0x6897, + 2284: 0x69CB, + 2285: 0x6C5F, + 2286: 0x6D2A, + 2287: 0x6D69, + 2288: 0x6E2F, + 2289: 0x6E9D, + 2290: 0x7532, + 2291: 0x7687, + 2292: 0x786C, + 2293: 0x7A3F, + 2294: 0x7CE0, + 2295: 0x7D05, + 2296: 0x7D18, + 2297: 0x7D5E, + 2298: 0x7DB1, + 2299: 0x8015, + 2300: 0x8003, + 2301: 0x80AF, + 2302: 0x80B1, + 2303: 0x8154, + 2304: 0x818F, + 2305: 0x822A, + 2306: 0x8352, + 2307: 0x884C, + 2308: 0x8861, + 2309: 0x8B1B, + 2310: 0x8CA2, + 2311: 0x8CFC, + 2312: 0x90CA, + 2313: 0x9175, + 2314: 0x9271, + 2315: 0x783F, + 2316: 0x92FC, + 2317: 0x95A4, + 2318: 0x964D, + 2319: 0x9805, + 2320: 0x9999, + 2321: 0x9AD8, + 2322: 0x9D3B, + 2323: 0x525B, + 2324: 0x52AB, + 2325: 0x53F7, + 2326: 0x5408, + 2327: 0x58D5, + 2328: 0x62F7, + 2329: 0x6FE0, + 2330: 0x8C6A, + 2331: 0x8F5F, + 2332: 0x9EB9, + 2333: 0x514B, + 2334: 0x523B, + 2335: 0x544A, + 2336: 0x56FD, + 2337: 0x7A40, + 2338: 0x9177, + 2339: 0x9D60, + 2340: 0x9ED2, + 2341: 0x7344, + 2342: 0x6F09, + 2343: 0x8170, + 2344: 0x7511, + 2345: 0x5FFD, + 2346: 0x60DA, + 2347: 0x9AA8, + 2348: 0x72DB, + 2349: 0x8FBC, + 2350: 0x6B64, + 2351: 0x9803, + 2352: 0x4ECA, + 2353: 0x56F0, + 2354: 0x5764, + 2355: 0x58BE, + 2356: 0x5A5A, + 2357: 0x6068, + 2358: 0x61C7, + 2359: 0x660F, + 2360: 0x6606, + 2361: 0x6839, + 2362: 0x68B1, + 2363: 0x6DF7, + 2364: 0x75D5, + 2365: 0x7D3A, + 2366: 0x826E, + 2367: 0x9B42, + 2368: 0x4E9B, + 2369: 0x4F50, + 2370: 0x53C9, + 2371: 0x5506, + 2372: 0x5D6F, + 2373: 0x5DE6, + 2374: 0x5DEE, + 2375: 0x67FB, + 2376: 0x6C99, + 2377: 0x7473, + 2378: 0x7802, + 2379: 0x8A50, + 2380: 0x9396, + 2381: 0x88DF, + 2382: 0x5750, + 2383: 0x5EA7, + 2384: 0x632B, + 2385: 0x50B5, + 2386: 0x50AC, + 2387: 0x518D, + 2388: 0x6700, + 2389: 0x54C9, + 2390: 0x585E, + 2391: 0x59BB, + 2392: 0x5BB0, + 2393: 0x5F69, + 2394: 0x624D, + 2395: 0x63A1, + 2396: 0x683D, + 2397: 0x6B73, + 2398: 0x6E08, + 2399: 0x707D, + 2400: 0x91C7, + 2401: 0x7280, + 2402: 0x7815, + 2403: 0x7826, + 2404: 0x796D, + 2405: 0x658E, + 2406: 0x7D30, + 2407: 0x83DC, + 2408: 0x88C1, + 2409: 0x8F09, + 2410: 0x969B, + 2411: 0x5264, + 2412: 0x5728, + 2413: 0x6750, + 2414: 0x7F6A, + 2415: 0x8CA1, + 2416: 0x51B4, + 2417: 0x5742, + 2418: 0x962A, + 2419: 0x583A, + 2420: 0x698A, + 2421: 0x80B4, + 2422: 0x54B2, + 2423: 0x5D0E, + 2424: 0x57FC, + 2425: 0x7895, + 2426: 0x9DFA, + 2427: 0x4F5C, + 2428: 0x524A, + 2429: 0x548B, + 2430: 0x643E, + 2431: 0x6628, + 2432: 0x6714, + 2433: 0x67F5, + 2434: 0x7A84, + 2435: 0x7B56, + 2436: 0x7D22, + 2437: 0x932F, + 2438: 0x685C, + 2439: 0x9BAD, + 2440: 0x7B39, + 2441: 0x5319, + 2442: 0x518A, + 2443: 0x5237, + 2444: 0x5BDF, + 2445: 0x62F6, + 2446: 0x64AE, + 2447: 0x64E6, + 2448: 0x672D, + 2449: 0x6BBA, + 2450: 0x85A9, + 2451: 0x96D1, + 2452: 0x7690, + 2453: 0x9BD6, + 2454: 0x634C, + 2455: 0x9306, + 2456: 0x9BAB, + 2457: 0x76BF, + 2458: 0x6652, + 2459: 0x4E09, + 2460: 0x5098, + 2461: 0x53C2, + 2462: 0x5C71, + 2463: 0x60E8, + 2464: 0x6492, + 2465: 0x6563, + 2466: 0x685F, + 2467: 0x71E6, + 2468: 0x73CA, + 2469: 0x7523, + 2470: 0x7B97, + 2471: 0x7E82, + 2472: 0x8695, + 2473: 0x8B83, + 2474: 0x8CDB, + 2475: 0x9178, + 2476: 0x9910, + 2477: 0x65AC, + 2478: 0x66AB, + 2479: 0x6B8B, + 2480: 0x4ED5, + 2481: 0x4ED4, + 2482: 0x4F3A, + 2483: 0x4F7F, + 2484: 0x523A, + 2485: 0x53F8, + 2486: 0x53F2, + 2487: 0x55E3, + 2488: 0x56DB, + 2489: 0x58EB, + 2490: 0x59CB, + 2491: 0x59C9, + 2492: 0x59FF, + 2493: 0x5B50, + 2494: 0x5C4D, + 2495: 0x5E02, + 2496: 0x5E2B, + 2497: 0x5FD7, + 2498: 0x601D, + 2499: 0x6307, + 2500: 0x652F, + 2501: 0x5B5C, + 2502: 0x65AF, + 2503: 0x65BD, + 2504: 0x65E8, + 2505: 0x679D, + 2506: 0x6B62, + 2507: 0x6B7B, + 2508: 0x6C0F, + 2509: 0x7345, + 2510: 0x7949, + 2511: 0x79C1, + 2512: 0x7CF8, + 2513: 0x7D19, + 2514: 0x7D2B, + 2515: 0x80A2, + 2516: 0x8102, + 2517: 0x81F3, + 2518: 0x8996, + 2519: 0x8A5E, + 2520: 0x8A69, + 2521: 0x8A66, + 2522: 0x8A8C, + 2523: 0x8AEE, + 2524: 0x8CC7, + 2525: 0x8CDC, + 2526: 0x96CC, + 2527: 0x98FC, + 2528: 0x6B6F, + 2529: 0x4E8B, + 2530: 0x4F3C, + 2531: 0x4F8D, + 2532: 0x5150, + 2533: 0x5B57, + 2534: 0x5BFA, + 2535: 0x6148, + 2536: 0x6301, + 2537: 0x6642, + 2538: 0x6B21, + 2539: 0x6ECB, + 2540: 0x6CBB, + 2541: 0x723E, + 2542: 0x74BD, + 2543: 0x75D4, + 2544: 0x78C1, + 2545: 0x793A, + 2546: 0x800C, + 2547: 0x8033, + 2548: 0x81EA, + 2549: 0x8494, + 2550: 0x8F9E, + 2551: 0x6C50, + 2552: 0x9E7F, + 2553: 0x5F0F, + 2554: 0x8B58, + 2555: 0x9D2B, + 2556: 0x7AFA, + 2557: 0x8EF8, + 2558: 0x5B8D, + 2559: 0x96EB, + 2560: 0x4E03, + 2561: 0x53F1, + 2562: 0x57F7, + 2563: 0x5931, + 2564: 0x5AC9, + 2565: 0x5BA4, + 2566: 0x6089, + 2567: 0x6E7F, + 2568: 0x6F06, + 2569: 0x75BE, + 2570: 0x8CEA, + 2571: 0x5B9F, + 2572: 0x8500, + 2573: 0x7BE0, + 2574: 0x5072, + 2575: 0x67F4, + 2576: 0x829D, + 2577: 0x5C61, + 2578: 0x854A, + 2579: 0x7E1E, + 2580: 0x820E, + 2581: 0x5199, + 2582: 0x5C04, + 2583: 0x6368, + 2584: 0x8D66, + 2585: 0x659C, + 2586: 0x716E, + 2587: 0x793E, + 2588: 0x7D17, + 2589: 0x8005, + 2590: 0x8B1D, + 2591: 0x8ECA, + 2592: 0x906E, + 2593: 0x86C7, + 2594: 0x90AA, + 2595: 0x501F, + 2596: 0x52FA, + 2597: 0x5C3A, + 2598: 0x6753, + 2599: 0x707C, + 2600: 0x7235, + 2601: 0x914C, + 2602: 0x91C8, + 2603: 0x932B, + 2604: 0x82E5, + 2605: 0x5BC2, + 2606: 0x5F31, + 2607: 0x60F9, + 2608: 0x4E3B, + 2609: 0x53D6, + 2610: 0x5B88, + 2611: 0x624B, + 2612: 0x6731, + 2613: 0x6B8A, + 2614: 0x72E9, + 2615: 0x73E0, + 2616: 0x7A2E, + 2617: 0x816B, + 2618: 0x8DA3, + 2619: 0x9152, + 2620: 0x9996, + 2621: 0x5112, + 2622: 0x53D7, + 2623: 0x546A, + 2624: 0x5BFF, + 2625: 0x6388, + 2626: 0x6A39, + 2627: 0x7DAC, + 2628: 0x9700, + 2629: 0x56DA, + 2630: 0x53CE, + 2631: 0x5468, + 2632: 0x5B97, + 2633: 0x5C31, + 2634: 0x5DDE, + 2635: 0x4FEE, + 2636: 0x6101, + 2637: 0x62FE, + 2638: 0x6D32, + 2639: 0x79C0, + 2640: 0x79CB, + 2641: 0x7D42, + 2642: 0x7E4D, + 2643: 0x7FD2, + 2644: 0x81ED, + 2645: 0x821F, + 2646: 0x8490, + 2647: 0x8846, + 2648: 0x8972, + 2649: 0x8B90, + 2650: 0x8E74, + 2651: 0x8F2F, + 2652: 0x9031, + 2653: 0x914B, + 2654: 0x916C, + 2655: 0x96C6, + 2656: 0x919C, + 2657: 0x4EC0, + 2658: 0x4F4F, + 2659: 0x5145, + 2660: 0x5341, + 2661: 0x5F93, + 2662: 0x620E, + 2663: 0x67D4, + 2664: 0x6C41, + 2665: 0x6E0B, + 2666: 0x7363, + 2667: 0x7E26, + 2668: 0x91CD, + 2669: 0x9283, + 2670: 0x53D4, + 2671: 0x5919, + 2672: 0x5BBF, + 2673: 0x6DD1, + 2674: 0x795D, + 2675: 0x7E2E, + 2676: 0x7C9B, + 2677: 0x587E, + 2678: 0x719F, + 2679: 0x51FA, + 2680: 0x8853, + 2681: 0x8FF0, + 2682: 0x4FCA, + 2683: 0x5CFB, + 2684: 0x6625, + 2685: 0x77AC, + 2686: 0x7AE3, + 2687: 0x821C, + 2688: 0x99FF, + 2689: 0x51C6, + 2690: 0x5FAA, + 2691: 0x65EC, + 2692: 0x696F, + 2693: 0x6B89, + 2694: 0x6DF3, + 2695: 0x6E96, + 2696: 0x6F64, + 2697: 0x76FE, + 2698: 0x7D14, + 2699: 0x5DE1, + 2700: 0x9075, + 2701: 0x9187, + 2702: 0x9806, + 2703: 0x51E6, + 2704: 0x521D, + 2705: 0x6240, + 2706: 0x6691, + 2707: 0x66D9, + 2708: 0x6E1A, + 2709: 0x5EB6, + 2710: 0x7DD2, + 2711: 0x7F72, + 2712: 0x66F8, + 2713: 0x85AF, + 2714: 0x85F7, + 2715: 0x8AF8, + 2716: 0x52A9, + 2717: 0x53D9, + 2718: 0x5973, + 2719: 0x5E8F, + 2720: 0x5F90, + 2721: 0x6055, + 2722: 0x92E4, + 2723: 0x9664, + 2724: 0x50B7, + 2725: 0x511F, + 2726: 0x52DD, + 2727: 0x5320, + 2728: 0x5347, + 2729: 0x53EC, + 2730: 0x54E8, + 2731: 0x5546, + 2732: 0x5531, + 2733: 0x5617, + 2734: 0x5968, + 2735: 0x59BE, + 2736: 0x5A3C, + 2737: 0x5BB5, + 2738: 0x5C06, + 2739: 0x5C0F, + 2740: 0x5C11, + 2741: 0x5C1A, + 2742: 0x5E84, + 2743: 0x5E8A, + 2744: 0x5EE0, + 2745: 0x5F70, + 2746: 0x627F, + 2747: 0x6284, + 2748: 0x62DB, + 2749: 0x638C, + 2750: 0x6377, + 2751: 0x6607, + 2752: 0x660C, + 2753: 0x662D, + 2754: 0x6676, + 2755: 0x677E, + 2756: 0x68A2, + 2757: 0x6A1F, + 2758: 0x6A35, + 2759: 0x6CBC, + 2760: 0x6D88, + 2761: 0x6E09, + 2762: 0x6E58, + 2763: 0x713C, + 2764: 0x7126, + 2765: 0x7167, + 2766: 0x75C7, + 2767: 0x7701, + 2768: 0x785D, + 2769: 0x7901, + 2770: 0x7965, + 2771: 0x79F0, + 2772: 0x7AE0, + 2773: 0x7B11, + 2774: 0x7CA7, + 2775: 0x7D39, + 2776: 0x8096, + 2777: 0x83D6, + 2778: 0x848B, + 2779: 0x8549, + 2780: 0x885D, + 2781: 0x88F3, + 2782: 0x8A1F, + 2783: 0x8A3C, + 2784: 0x8A54, + 2785: 0x8A73, + 2786: 0x8C61, + 2787: 0x8CDE, + 2788: 0x91A4, + 2789: 0x9266, + 2790: 0x937E, + 2791: 0x9418, + 2792: 0x969C, + 2793: 0x9798, + 2794: 0x4E0A, + 2795: 0x4E08, + 2796: 0x4E1E, + 2797: 0x4E57, + 2798: 0x5197, + 2799: 0x5270, + 2800: 0x57CE, + 2801: 0x5834, + 2802: 0x58CC, + 2803: 0x5B22, + 2804: 0x5E38, + 2805: 0x60C5, + 2806: 0x64FE, + 2807: 0x6761, + 2808: 0x6756, + 2809: 0x6D44, + 2810: 0x72B6, + 2811: 0x7573, + 2812: 0x7A63, + 2813: 0x84B8, + 2814: 0x8B72, + 2815: 0x91B8, + 2816: 0x9320, + 2817: 0x5631, + 2818: 0x57F4, + 2819: 0x98FE, + 2820: 0x62ED, + 2821: 0x690D, + 2822: 0x6B96, + 2823: 0x71ED, + 2824: 0x7E54, + 2825: 0x8077, + 2826: 0x8272, + 2827: 0x89E6, + 2828: 0x98DF, + 2829: 0x8755, + 2830: 0x8FB1, + 2831: 0x5C3B, + 2832: 0x4F38, + 2833: 0x4FE1, + 2834: 0x4FB5, + 2835: 0x5507, + 2836: 0x5A20, + 2837: 0x5BDD, + 2838: 0x5BE9, + 2839: 0x5FC3, + 2840: 0x614E, + 2841: 0x632F, + 2842: 0x65B0, + 2843: 0x664B, + 2844: 0x68EE, + 2845: 0x699B, + 2846: 0x6D78, + 2847: 0x6DF1, + 2848: 0x7533, + 2849: 0x75B9, + 2850: 0x771F, + 2851: 0x795E, + 2852: 0x79E6, + 2853: 0x7D33, + 2854: 0x81E3, + 2855: 0x82AF, + 2856: 0x85AA, + 2857: 0x89AA, + 2858: 0x8A3A, + 2859: 0x8EAB, + 2860: 0x8F9B, + 2861: 0x9032, + 2862: 0x91DD, + 2863: 0x9707, + 2864: 0x4EBA, + 2865: 0x4EC1, + 2866: 0x5203, + 2867: 0x5875, + 2868: 0x58EC, + 2869: 0x5C0B, + 2870: 0x751A, + 2871: 0x5C3D, + 2872: 0x814E, + 2873: 0x8A0A, + 2874: 0x8FC5, + 2875: 0x9663, + 2876: 0x976D, + 2877: 0x7B25, + 2878: 0x8ACF, + 2879: 0x9808, + 2880: 0x9162, + 2881: 0x56F3, + 2882: 0x53A8, + 2883: 0x9017, + 2884: 0x5439, + 2885: 0x5782, + 2886: 0x5E25, + 2887: 0x63A8, + 2888: 0x6C34, + 2889: 0x708A, + 2890: 0x7761, + 2891: 0x7C8B, + 2892: 0x7FE0, + 2893: 0x8870, + 2894: 0x9042, + 2895: 0x9154, + 2896: 0x9310, + 2897: 0x9318, + 2898: 0x968F, + 2899: 0x745E, + 2900: 0x9AC4, + 2901: 0x5D07, + 2902: 0x5D69, + 2903: 0x6570, + 2904: 0x67A2, + 2905: 0x8DA8, + 2906: 0x96DB, + 2907: 0x636E, + 2908: 0x6749, + 2909: 0x6919, + 2910: 0x83C5, + 2911: 0x9817, + 2912: 0x96C0, + 2913: 0x88FE, + 2914: 0x6F84, + 2915: 0x647A, + 2916: 0x5BF8, + 2917: 0x4E16, + 2918: 0x702C, + 2919: 0x755D, + 2920: 0x662F, + 2921: 0x51C4, + 2922: 0x5236, + 2923: 0x52E2, + 2924: 0x59D3, + 2925: 0x5F81, + 2926: 0x6027, + 2927: 0x6210, + 2928: 0x653F, + 2929: 0x6574, + 2930: 0x661F, + 2931: 0x6674, + 2932: 0x68F2, + 2933: 0x6816, + 2934: 0x6B63, + 2935: 0x6E05, + 2936: 0x7272, + 2937: 0x751F, + 2938: 0x76DB, + 2939: 0x7CBE, + 2940: 0x8056, + 2941: 0x58F0, + 2942: 0x88FD, + 2943: 0x897F, + 2944: 0x8AA0, + 2945: 0x8A93, + 2946: 0x8ACB, + 2947: 0x901D, + 2948: 0x9192, + 2949: 0x9752, + 2950: 0x9759, + 2951: 0x6589, + 2952: 0x7A0E, + 2953: 0x8106, + 2954: 0x96BB, + 2955: 0x5E2D, + 2956: 0x60DC, + 2957: 0x621A, + 2958: 0x65A5, + 2959: 0x6614, + 2960: 0x6790, + 2961: 0x77F3, + 2962: 0x7A4D, + 2963: 0x7C4D, + 2964: 0x7E3E, + 2965: 0x810A, + 2966: 0x8CAC, + 2967: 0x8D64, + 2968: 0x8DE1, + 2969: 0x8E5F, + 2970: 0x78A9, + 2971: 0x5207, + 2972: 0x62D9, + 2973: 0x63A5, + 2974: 0x6442, + 2975: 0x6298, + 2976: 0x8A2D, + 2977: 0x7A83, + 2978: 0x7BC0, + 2979: 0x8AAC, + 2980: 0x96EA, + 2981: 0x7D76, + 2982: 0x820C, + 2983: 0x8749, + 2984: 0x4ED9, + 2985: 0x5148, + 2986: 0x5343, + 2987: 0x5360, + 2988: 0x5BA3, + 2989: 0x5C02, + 2990: 0x5C16, + 2991: 0x5DDD, + 2992: 0x6226, + 2993: 0x6247, + 2994: 0x64B0, + 2995: 0x6813, + 2996: 0x6834, + 2997: 0x6CC9, + 2998: 0x6D45, + 2999: 0x6D17, + 3000: 0x67D3, + 3001: 0x6F5C, + 3002: 0x714E, + 3003: 0x717D, + 3004: 0x65CB, + 3005: 0x7A7F, + 3006: 0x7BAD, + 3007: 0x7DDA, + 3008: 0x7E4A, + 3009: 0x7FA8, + 3010: 0x817A, + 3011: 0x821B, + 3012: 0x8239, + 3013: 0x85A6, + 3014: 0x8A6E, + 3015: 0x8CCE, + 3016: 0x8DF5, + 3017: 0x9078, + 3018: 0x9077, + 3019: 0x92AD, + 3020: 0x9291, + 3021: 0x9583, + 3022: 0x9BAE, + 3023: 0x524D, + 3024: 0x5584, + 3025: 0x6F38, + 3026: 0x7136, + 3027: 0x5168, + 3028: 0x7985, + 3029: 0x7E55, + 3030: 0x81B3, + 3031: 0x7CCE, + 3032: 0x564C, + 3033: 0x5851, + 3034: 0x5CA8, + 3035: 0x63AA, + 3036: 0x66FE, + 3037: 0x66FD, + 3038: 0x695A, + 3039: 0x72D9, + 3040: 0x758F, + 3041: 0x758E, + 3042: 0x790E, + 3043: 0x7956, + 3044: 0x79DF, + 3045: 0x7C97, + 3046: 0x7D20, + 3047: 0x7D44, + 3048: 0x8607, + 3049: 0x8A34, + 3050: 0x963B, + 3051: 0x9061, + 3052: 0x9F20, + 3053: 0x50E7, + 3054: 0x5275, + 3055: 0x53CC, + 3056: 0x53E2, + 3057: 0x5009, + 3058: 0x55AA, + 3059: 0x58EE, + 3060: 0x594F, + 3061: 0x723D, + 3062: 0x5B8B, + 3063: 0x5C64, + 3064: 0x531D, + 3065: 0x60E3, + 3066: 0x60F3, + 3067: 0x635C, + 3068: 0x6383, + 3069: 0x633F, + 3070: 0x63BB, + 3071: 0x64CD, + 3072: 0x65E9, + 3073: 0x66F9, + 3074: 0x5DE3, + 3075: 0x69CD, + 3076: 0x69FD, + 3077: 0x6F15, + 3078: 0x71E5, + 3079: 0x4E89, + 3080: 0x75E9, + 3081: 0x76F8, + 3082: 0x7A93, + 3083: 0x7CDF, + 3084: 0x7DCF, + 3085: 0x7D9C, + 3086: 0x8061, + 3087: 0x8349, + 3088: 0x8358, + 3089: 0x846C, + 3090: 0x84BC, + 3091: 0x85FB, + 3092: 0x88C5, + 3093: 0x8D70, + 3094: 0x9001, + 3095: 0x906D, + 3096: 0x9397, + 3097: 0x971C, + 3098: 0x9A12, + 3099: 0x50CF, + 3100: 0x5897, + 3101: 0x618E, + 3102: 0x81D3, + 3103: 0x8535, + 3104: 0x8D08, + 3105: 0x9020, + 3106: 0x4FC3, + 3107: 0x5074, + 3108: 0x5247, + 3109: 0x5373, + 3110: 0x606F, + 3111: 0x6349, + 3112: 0x675F, + 3113: 0x6E2C, + 3114: 0x8DB3, + 3115: 0x901F, + 3116: 0x4FD7, + 3117: 0x5C5E, + 3118: 0x8CCA, + 3119: 0x65CF, + 3120: 0x7D9A, + 3121: 0x5352, + 3122: 0x8896, + 3123: 0x5176, + 3124: 0x63C3, + 3125: 0x5B58, + 3126: 0x5B6B, + 3127: 0x5C0A, + 3128: 0x640D, + 3129: 0x6751, + 3130: 0x905C, + 3131: 0x4ED6, + 3132: 0x591A, + 3133: 0x592A, + 3134: 0x6C70, + 3135: 0x8A51, + 3136: 0x553E, + 3137: 0x5815, + 3138: 0x59A5, + 3139: 0x60F0, + 3140: 0x6253, + 3141: 0x67C1, + 3142: 0x8235, + 3143: 0x6955, + 3144: 0x9640, + 3145: 0x99C4, + 3146: 0x9A28, + 3147: 0x4F53, + 3148: 0x5806, + 3149: 0x5BFE, + 3150: 0x8010, + 3151: 0x5CB1, + 3152: 0x5E2F, + 3153: 0x5F85, + 3154: 0x6020, + 3155: 0x614B, + 3156: 0x6234, + 3157: 0x66FF, + 3158: 0x6CF0, + 3159: 0x6EDE, + 3160: 0x80CE, + 3161: 0x817F, + 3162: 0x82D4, + 3163: 0x888B, + 3164: 0x8CB8, + 3165: 0x9000, + 3166: 0x902E, + 3167: 0x968A, + 3168: 0x9EDB, + 3169: 0x9BDB, + 3170: 0x4EE3, + 3171: 0x53F0, + 3172: 0x5927, + 3173: 0x7B2C, + 3174: 0x918D, + 3175: 0x984C, + 3176: 0x9DF9, + 3177: 0x6EDD, + 3178: 0x7027, + 3179: 0x5353, + 3180: 0x5544, + 3181: 0x5B85, + 3182: 0x6258, + 3183: 0x629E, + 3184: 0x62D3, + 3185: 0x6CA2, + 3186: 0x6FEF, + 3187: 0x7422, + 3188: 0x8A17, + 3189: 0x9438, + 3190: 0x6FC1, + 3191: 0x8AFE, + 3192: 0x8338, + 3193: 0x51E7, + 3194: 0x86F8, + 3195: 0x53EA, + 3196: 0x53E9, + 3197: 0x4F46, + 3198: 0x9054, + 3199: 0x8FB0, + 3200: 0x596A, + 3201: 0x8131, + 3202: 0x5DFD, + 3203: 0x7AEA, + 3204: 0x8FBF, + 3205: 0x68DA, + 3206: 0x8C37, + 3207: 0x72F8, + 3208: 0x9C48, + 3209: 0x6A3D, + 3210: 0x8AB0, + 3211: 0x4E39, + 3212: 0x5358, + 3213: 0x5606, + 3214: 0x5766, + 3215: 0x62C5, + 3216: 0x63A2, + 3217: 0x65E6, + 3218: 0x6B4E, + 3219: 0x6DE1, + 3220: 0x6E5B, + 3221: 0x70AD, + 3222: 0x77ED, + 3223: 0x7AEF, + 3224: 0x7BAA, + 3225: 0x7DBB, + 3226: 0x803D, + 3227: 0x80C6, + 3228: 0x86CB, + 3229: 0x8A95, + 3230: 0x935B, + 3231: 0x56E3, + 3232: 0x58C7, + 3233: 0x5F3E, + 3234: 0x65AD, + 3235: 0x6696, + 3236: 0x6A80, + 3237: 0x6BB5, + 3238: 0x7537, + 3239: 0x8AC7, + 3240: 0x5024, + 3241: 0x77E5, + 3242: 0x5730, + 3243: 0x5F1B, + 3244: 0x6065, + 3245: 0x667A, + 3246: 0x6C60, + 3247: 0x75F4, + 3248: 0x7A1A, + 3249: 0x7F6E, + 3250: 0x81F4, + 3251: 0x8718, + 3252: 0x9045, + 3253: 0x99B3, + 3254: 0x7BC9, + 3255: 0x755C, + 3256: 0x7AF9, + 3257: 0x7B51, + 3258: 0x84C4, + 3259: 0x9010, + 3260: 0x79E9, + 3261: 0x7A92, + 3262: 0x8336, + 3263: 0x5AE1, + 3264: 0x7740, + 3265: 0x4E2D, + 3266: 0x4EF2, + 3267: 0x5B99, + 3268: 0x5FE0, + 3269: 0x62BD, + 3270: 0x663C, + 3271: 0x67F1, + 3272: 0x6CE8, + 3273: 0x866B, + 3274: 0x8877, + 3275: 0x8A3B, + 3276: 0x914E, + 3277: 0x92F3, + 3278: 0x99D0, + 3279: 0x6A17, + 3280: 0x7026, + 3281: 0x732A, + 3282: 0x82E7, + 3283: 0x8457, + 3284: 0x8CAF, + 3285: 0x4E01, + 3286: 0x5146, + 3287: 0x51CB, + 3288: 0x558B, + 3289: 0x5BF5, + 3290: 0x5E16, + 3291: 0x5E33, + 3292: 0x5E81, + 3293: 0x5F14, + 3294: 0x5F35, + 3295: 0x5F6B, + 3296: 0x5FB4, + 3297: 0x61F2, + 3298: 0x6311, + 3299: 0x66A2, + 3300: 0x671D, + 3301: 0x6F6E, + 3302: 0x7252, + 3303: 0x753A, + 3304: 0x773A, + 3305: 0x8074, + 3306: 0x8139, + 3307: 0x8178, + 3308: 0x8776, + 3309: 0x8ABF, + 3310: 0x8ADC, + 3311: 0x8D85, + 3312: 0x8DF3, + 3313: 0x929A, + 3314: 0x9577, + 3315: 0x9802, + 3316: 0x9CE5, + 3317: 0x52C5, + 3318: 0x6357, + 3319: 0x76F4, + 3320: 0x6715, + 3321: 0x6C88, + 3322: 0x73CD, + 3323: 0x8CC3, + 3324: 0x93AE, + 3325: 0x9673, + 3326: 0x6D25, + 3327: 0x589C, + 3328: 0x690E, + 3329: 0x69CC, + 3330: 0x8FFD, + 3331: 0x939A, + 3332: 0x75DB, + 3333: 0x901A, + 3334: 0x585A, + 3335: 0x6802, + 3336: 0x63B4, + 3337: 0x69FB, + 3338: 0x4F43, + 3339: 0x6F2C, + 3340: 0x67D8, + 3341: 0x8FBB, + 3342: 0x8526, + 3343: 0x7DB4, + 3344: 0x9354, + 3345: 0x693F, + 3346: 0x6F70, + 3347: 0x576A, + 3348: 0x58F7, + 3349: 0x5B2C, + 3350: 0x7D2C, + 3351: 0x722A, + 3352: 0x540A, + 3353: 0x91E3, + 3354: 0x9DB4, + 3355: 0x4EAD, + 3356: 0x4F4E, + 3357: 0x505C, + 3358: 0x5075, + 3359: 0x5243, + 3360: 0x8C9E, + 3361: 0x5448, + 3362: 0x5824, + 3363: 0x5B9A, + 3364: 0x5E1D, + 3365: 0x5E95, + 3366: 0x5EAD, + 3367: 0x5EF7, + 3368: 0x5F1F, + 3369: 0x608C, + 3370: 0x62B5, + 3371: 0x633A, + 3372: 0x63D0, + 3373: 0x68AF, + 3374: 0x6C40, + 3375: 0x7887, + 3376: 0x798E, + 3377: 0x7A0B, + 3378: 0x7DE0, + 3379: 0x8247, + 3380: 0x8A02, + 3381: 0x8AE6, + 3382: 0x8E44, + 3383: 0x9013, + 3384: 0x90B8, + 3385: 0x912D, + 3386: 0x91D8, + 3387: 0x9F0E, + 3388: 0x6CE5, + 3389: 0x6458, + 3390: 0x64E2, + 3391: 0x6575, + 3392: 0x6EF4, + 3393: 0x7684, + 3394: 0x7B1B, + 3395: 0x9069, + 3396: 0x93D1, + 3397: 0x6EBA, + 3398: 0x54F2, + 3399: 0x5FB9, + 3400: 0x64A4, + 3401: 0x8F4D, + 3402: 0x8FED, + 3403: 0x9244, + 3404: 0x5178, + 3405: 0x586B, + 3406: 0x5929, + 3407: 0x5C55, + 3408: 0x5E97, + 3409: 0x6DFB, + 3410: 0x7E8F, + 3411: 0x751C, + 3412: 0x8CBC, + 3413: 0x8EE2, + 3414: 0x985B, + 3415: 0x70B9, + 3416: 0x4F1D, + 3417: 0x6BBF, + 3418: 0x6FB1, + 3419: 0x7530, + 3420: 0x96FB, + 3421: 0x514E, + 3422: 0x5410, + 3423: 0x5835, + 3424: 0x5857, + 3425: 0x59AC, + 3426: 0x5C60, + 3427: 0x5F92, + 3428: 0x6597, + 3429: 0x675C, + 3430: 0x6E21, + 3431: 0x767B, + 3432: 0x83DF, + 3433: 0x8CED, + 3434: 0x9014, + 3435: 0x90FD, + 3436: 0x934D, + 3437: 0x7825, + 3438: 0x783A, + 3439: 0x52AA, + 3440: 0x5EA6, + 3441: 0x571F, + 3442: 0x5974, + 3443: 0x6012, + 3444: 0x5012, + 3445: 0x515A, + 3446: 0x51AC, + 3447: 0x51CD, + 3448: 0x5200, + 3449: 0x5510, + 3450: 0x5854, + 3451: 0x5858, + 3452: 0x5957, + 3453: 0x5B95, + 3454: 0x5CF6, + 3455: 0x5D8B, + 3456: 0x60BC, + 3457: 0x6295, + 3458: 0x642D, + 3459: 0x6771, + 3460: 0x6843, + 3461: 0x68BC, + 3462: 0x68DF, + 3463: 0x76D7, + 3464: 0x6DD8, + 3465: 0x6E6F, + 3466: 0x6D9B, + 3467: 0x706F, + 3468: 0x71C8, + 3469: 0x5F53, + 3470: 0x75D8, + 3471: 0x7977, + 3472: 0x7B49, + 3473: 0x7B54, + 3474: 0x7B52, + 3475: 0x7CD6, + 3476: 0x7D71, + 3477: 0x5230, + 3478: 0x8463, + 3479: 0x8569, + 3480: 0x85E4, + 3481: 0x8A0E, + 3482: 0x8B04, + 3483: 0x8C46, + 3484: 0x8E0F, + 3485: 0x9003, + 3486: 0x900F, + 3487: 0x9419, + 3488: 0x9676, + 3489: 0x982D, + 3490: 0x9A30, + 3491: 0x95D8, + 3492: 0x50CD, + 3493: 0x52D5, + 3494: 0x540C, + 3495: 0x5802, + 3496: 0x5C0E, + 3497: 0x61A7, + 3498: 0x649E, + 3499: 0x6D1E, + 3500: 0x77B3, + 3501: 0x7AE5, + 3502: 0x80F4, + 3503: 0x8404, + 3504: 0x9053, + 3505: 0x9285, + 3506: 0x5CE0, + 3507: 0x9D07, + 3508: 0x533F, + 3509: 0x5F97, + 3510: 0x5FB3, + 3511: 0x6D9C, + 3512: 0x7279, + 3513: 0x7763, + 3514: 0x79BF, + 3515: 0x7BE4, + 3516: 0x6BD2, + 3517: 0x72EC, + 3518: 0x8AAD, + 3519: 0x6803, + 3520: 0x6A61, + 3521: 0x51F8, + 3522: 0x7A81, + 3523: 0x6934, + 3524: 0x5C4A, + 3525: 0x9CF6, + 3526: 0x82EB, + 3527: 0x5BC5, + 3528: 0x9149, + 3529: 0x701E, + 3530: 0x5678, + 3531: 0x5C6F, + 3532: 0x60C7, + 3533: 0x6566, + 3534: 0x6C8C, + 3535: 0x8C5A, + 3536: 0x9041, + 3537: 0x9813, + 3538: 0x5451, + 3539: 0x66C7, + 3540: 0x920D, + 3541: 0x5948, + 3542: 0x90A3, + 3543: 0x5185, + 3544: 0x4E4D, + 3545: 0x51EA, + 3546: 0x8599, + 3547: 0x8B0E, + 3548: 0x7058, + 3549: 0x637A, + 3550: 0x934B, + 3551: 0x6962, + 3552: 0x99B4, + 3553: 0x7E04, + 3554: 0x7577, + 3555: 0x5357, + 3556: 0x6960, + 3557: 0x8EDF, + 3558: 0x96E3, + 3559: 0x6C5D, + 3560: 0x4E8C, + 3561: 0x5C3C, + 3562: 0x5F10, + 3563: 0x8FE9, + 3564: 0x5302, + 3565: 0x8CD1, + 3566: 0x8089, + 3567: 0x8679, + 3568: 0x5EFF, + 3569: 0x65E5, + 3570: 0x4E73, + 3571: 0x5165, + 3572: 0x5982, + 3573: 0x5C3F, + 3574: 0x97EE, + 3575: 0x4EFB, + 3576: 0x598A, + 3577: 0x5FCD, + 3578: 0x8A8D, + 3579: 0x6FE1, + 3580: 0x79B0, + 3581: 0x7962, + 3582: 0x5BE7, + 3583: 0x8471, + 3584: 0x732B, + 3585: 0x71B1, + 3586: 0x5E74, + 3587: 0x5FF5, + 3588: 0x637B, + 3589: 0x649A, + 3590: 0x71C3, + 3591: 0x7C98, + 3592: 0x4E43, + 3593: 0x5EFC, + 3594: 0x4E4B, + 3595: 0x57DC, + 3596: 0x56A2, + 3597: 0x60A9, + 3598: 0x6FC3, + 3599: 0x7D0D, + 3600: 0x80FD, + 3601: 0x8133, + 3602: 0x81BF, + 3603: 0x8FB2, + 3604: 0x8997, + 3605: 0x86A4, + 3606: 0x5DF4, + 3607: 0x628A, + 3608: 0x64AD, + 3609: 0x8987, + 3610: 0x6777, + 3611: 0x6CE2, + 3612: 0x6D3E, + 3613: 0x7436, + 3614: 0x7834, + 3615: 0x5A46, + 3616: 0x7F75, + 3617: 0x82AD, + 3618: 0x99AC, + 3619: 0x4FF3, + 3620: 0x5EC3, + 3621: 0x62DD, + 3622: 0x6392, + 3623: 0x6557, + 3624: 0x676F, + 3625: 0x76C3, + 3626: 0x724C, + 3627: 0x80CC, + 3628: 0x80BA, + 3629: 0x8F29, + 3630: 0x914D, + 3631: 0x500D, + 3632: 0x57F9, + 3633: 0x5A92, + 3634: 0x6885, + 3635: 0x6973, + 3636: 0x7164, + 3637: 0x72FD, + 3638: 0x8CB7, + 3639: 0x58F2, + 3640: 0x8CE0, + 3641: 0x966A, + 3642: 0x9019, + 3643: 0x877F, + 3644: 0x79E4, + 3645: 0x77E7, + 3646: 0x8429, + 3647: 0x4F2F, + 3648: 0x5265, + 3649: 0x535A, + 3650: 0x62CD, + 3651: 0x67CF, + 3652: 0x6CCA, + 3653: 0x767D, + 3654: 0x7B94, + 3655: 0x7C95, + 3656: 0x8236, + 3657: 0x8584, + 3658: 0x8FEB, + 3659: 0x66DD, + 3660: 0x6F20, + 3661: 0x7206, + 3662: 0x7E1B, + 3663: 0x83AB, + 3664: 0x99C1, + 3665: 0x9EA6, + 3666: 0x51FD, + 3667: 0x7BB1, + 3668: 0x7872, + 3669: 0x7BB8, + 3670: 0x8087, + 3671: 0x7B48, + 3672: 0x6AE8, + 3673: 0x5E61, + 3674: 0x808C, + 3675: 0x7551, + 3676: 0x7560, + 3677: 0x516B, + 3678: 0x9262, + 3679: 0x6E8C, + 3680: 0x767A, + 3681: 0x9197, + 3682: 0x9AEA, + 3683: 0x4F10, + 3684: 0x7F70, + 3685: 0x629C, + 3686: 0x7B4F, + 3687: 0x95A5, + 3688: 0x9CE9, + 3689: 0x567A, + 3690: 0x5859, + 3691: 0x86E4, + 3692: 0x96BC, + 3693: 0x4F34, + 3694: 0x5224, + 3695: 0x534A, + 3696: 0x53CD, + 3697: 0x53DB, + 3698: 0x5E06, + 3699: 0x642C, + 3700: 0x6591, + 3701: 0x677F, + 3702: 0x6C3E, + 3703: 0x6C4E, + 3704: 0x7248, + 3705: 0x72AF, + 3706: 0x73ED, + 3707: 0x7554, + 3708: 0x7E41, + 3709: 0x822C, + 3710: 0x85E9, + 3711: 0x8CA9, + 3712: 0x7BC4, + 3713: 0x91C6, + 3714: 0x7169, + 3715: 0x9812, + 3716: 0x98EF, + 3717: 0x633D, + 3718: 0x6669, + 3719: 0x756A, + 3720: 0x76E4, + 3721: 0x78D0, + 3722: 0x8543, + 3723: 0x86EE, + 3724: 0x532A, + 3725: 0x5351, + 3726: 0x5426, + 3727: 0x5983, + 3728: 0x5E87, + 3729: 0x5F7C, + 3730: 0x60B2, + 3731: 0x6249, + 3732: 0x6279, + 3733: 0x62AB, + 3734: 0x6590, + 3735: 0x6BD4, + 3736: 0x6CCC, + 3737: 0x75B2, + 3738: 0x76AE, + 3739: 0x7891, + 3740: 0x79D8, + 3741: 0x7DCB, + 3742: 0x7F77, + 3743: 0x80A5, + 3744: 0x88AB, + 3745: 0x8AB9, + 3746: 0x8CBB, + 3747: 0x907F, + 3748: 0x975E, + 3749: 0x98DB, + 3750: 0x6A0B, + 3751: 0x7C38, + 3752: 0x5099, + 3753: 0x5C3E, + 3754: 0x5FAE, + 3755: 0x6787, + 3756: 0x6BD8, + 3757: 0x7435, + 3758: 0x7709, + 3759: 0x7F8E, + 3760: 0x9F3B, + 3761: 0x67CA, + 3762: 0x7A17, + 3763: 0x5339, + 3764: 0x758B, + 3765: 0x9AED, + 3766: 0x5F66, + 3767: 0x819D, + 3768: 0x83F1, + 3769: 0x8098, + 3770: 0x5F3C, + 3771: 0x5FC5, + 3772: 0x7562, + 3773: 0x7B46, + 3774: 0x903C, + 3775: 0x6867, + 3776: 0x59EB, + 3777: 0x5A9B, + 3778: 0x7D10, + 3779: 0x767E, + 3780: 0x8B2C, + 3781: 0x4FF5, + 3782: 0x5F6A, + 3783: 0x6A19, + 3784: 0x6C37, + 3785: 0x6F02, + 3786: 0x74E2, + 3787: 0x7968, + 3788: 0x8868, + 3789: 0x8A55, + 3790: 0x8C79, + 3791: 0x5EDF, + 3792: 0x63CF, + 3793: 0x75C5, + 3794: 0x79D2, + 3795: 0x82D7, + 3796: 0x9328, + 3797: 0x92F2, + 3798: 0x849C, + 3799: 0x86ED, + 3800: 0x9C2D, + 3801: 0x54C1, + 3802: 0x5F6C, + 3803: 0x658C, + 3804: 0x6D5C, + 3805: 0x7015, + 3806: 0x8CA7, + 3807: 0x8CD3, + 3808: 0x983B, + 3809: 0x654F, + 3810: 0x74F6, + 3811: 0x4E0D, + 3812: 0x4ED8, + 3813: 0x57E0, + 3814: 0x592B, + 3815: 0x5A66, + 3816: 0x5BCC, + 3817: 0x51A8, + 3818: 0x5E03, + 3819: 0x5E9C, + 3820: 0x6016, + 3821: 0x6276, + 3822: 0x6577, + 3823: 0x65A7, + 3824: 0x666E, + 3825: 0x6D6E, + 3826: 0x7236, + 3827: 0x7B26, + 3828: 0x8150, + 3829: 0x819A, + 3830: 0x8299, + 3831: 0x8B5C, + 3832: 0x8CA0, + 3833: 0x8CE6, + 3834: 0x8D74, + 3835: 0x961C, + 3836: 0x9644, + 3837: 0x4FAE, + 3838: 0x64AB, + 3839: 0x6B66, + 3840: 0x821E, + 3841: 0x8461, + 3842: 0x856A, + 3843: 0x90E8, + 3844: 0x5C01, + 3845: 0x6953, + 3846: 0x98A8, + 3847: 0x847A, + 3848: 0x8557, + 3849: 0x4F0F, + 3850: 0x526F, + 3851: 0x5FA9, + 3852: 0x5E45, + 3853: 0x670D, + 3854: 0x798F, + 3855: 0x8179, + 3856: 0x8907, + 3857: 0x8986, + 3858: 0x6DF5, + 3859: 0x5F17, + 3860: 0x6255, + 3861: 0x6CB8, + 3862: 0x4ECF, + 3863: 0x7269, + 3864: 0x9B92, + 3865: 0x5206, + 3866: 0x543B, + 3867: 0x5674, + 3868: 0x58B3, + 3869: 0x61A4, + 3870: 0x626E, + 3871: 0x711A, + 3872: 0x596E, + 3873: 0x7C89, + 3874: 0x7CDE, + 3875: 0x7D1B, + 3876: 0x96F0, + 3877: 0x6587, + 3878: 0x805E, + 3879: 0x4E19, + 3880: 0x4F75, + 3881: 0x5175, + 3882: 0x5840, + 3883: 0x5E63, + 3884: 0x5E73, + 3885: 0x5F0A, + 3886: 0x67C4, + 3887: 0x4E26, + 3888: 0x853D, + 3889: 0x9589, + 3890: 0x965B, + 3891: 0x7C73, + 3892: 0x9801, + 3893: 0x50FB, + 3894: 0x58C1, + 3895: 0x7656, + 3896: 0x78A7, + 3897: 0x5225, + 3898: 0x77A5, + 3899: 0x8511, + 3900: 0x7B86, + 3901: 0x504F, + 3902: 0x5909, + 3903: 0x7247, + 3904: 0x7BC7, + 3905: 0x7DE8, + 3906: 0x8FBA, + 3907: 0x8FD4, + 3908: 0x904D, + 3909: 0x4FBF, + 3910: 0x52C9, + 3911: 0x5A29, + 3912: 0x5F01, + 3913: 0x97AD, + 3914: 0x4FDD, + 3915: 0x8217, + 3916: 0x92EA, + 3917: 0x5703, + 3918: 0x6355, + 3919: 0x6B69, + 3920: 0x752B, + 3921: 0x88DC, + 3922: 0x8F14, + 3923: 0x7A42, + 3924: 0x52DF, + 3925: 0x5893, + 3926: 0x6155, + 3927: 0x620A, + 3928: 0x66AE, + 3929: 0x6BCD, + 3930: 0x7C3F, + 3931: 0x83E9, + 3932: 0x5023, + 3933: 0x4FF8, + 3934: 0x5305, + 3935: 0x5446, + 3936: 0x5831, + 3937: 0x5949, + 3938: 0x5B9D, + 3939: 0x5CF0, + 3940: 0x5CEF, + 3941: 0x5D29, + 3942: 0x5E96, + 3943: 0x62B1, + 3944: 0x6367, + 3945: 0x653E, + 3946: 0x65B9, + 3947: 0x670B, + 3948: 0x6CD5, + 3949: 0x6CE1, + 3950: 0x70F9, + 3951: 0x7832, + 3952: 0x7E2B, + 3953: 0x80DE, + 3954: 0x82B3, + 3955: 0x840C, + 3956: 0x84EC, + 3957: 0x8702, + 3958: 0x8912, + 3959: 0x8A2A, + 3960: 0x8C4A, + 3961: 0x90A6, + 3962: 0x92D2, + 3963: 0x98FD, + 3964: 0x9CF3, + 3965: 0x9D6C, + 3966: 0x4E4F, + 3967: 0x4EA1, + 3968: 0x508D, + 3969: 0x5256, + 3970: 0x574A, + 3971: 0x59A8, + 3972: 0x5E3D, + 3973: 0x5FD8, + 3974: 0x5FD9, + 3975: 0x623F, + 3976: 0x66B4, + 3977: 0x671B, + 3978: 0x67D0, + 3979: 0x68D2, + 3980: 0x5192, + 3981: 0x7D21, + 3982: 0x80AA, + 3983: 0x81A8, + 3984: 0x8B00, + 3985: 0x8C8C, + 3986: 0x8CBF, + 3987: 0x927E, + 3988: 0x9632, + 3989: 0x5420, + 3990: 0x982C, + 3991: 0x5317, + 3992: 0x50D5, + 3993: 0x535C, + 3994: 0x58A8, + 3995: 0x64B2, + 3996: 0x6734, + 3997: 0x7267, + 3998: 0x7766, + 3999: 0x7A46, + 4000: 0x91E6, + 4001: 0x52C3, + 4002: 0x6CA1, + 4003: 0x6B86, + 4004: 0x5800, + 4005: 0x5E4C, + 4006: 0x5954, + 4007: 0x672C, + 4008: 0x7FFB, + 4009: 0x51E1, + 4010: 0x76C6, + 4011: 0x6469, + 4012: 0x78E8, + 4013: 0x9B54, + 4014: 0x9EBB, + 4015: 0x57CB, + 4016: 0x59B9, + 4017: 0x6627, + 4018: 0x679A, + 4019: 0x6BCE, + 4020: 0x54E9, + 4021: 0x69D9, + 4022: 0x5E55, + 4023: 0x819C, + 4024: 0x6795, + 4025: 0x9BAA, + 4026: 0x67FE, + 4027: 0x9C52, + 4028: 0x685D, + 4029: 0x4EA6, + 4030: 0x4FE3, + 4031: 0x53C8, + 4032: 0x62B9, + 4033: 0x672B, + 4034: 0x6CAB, + 4035: 0x8FC4, + 4036: 0x4FAD, + 4037: 0x7E6D, + 4038: 0x9EBF, + 4039: 0x4E07, + 4040: 0x6162, + 4041: 0x6E80, + 4042: 0x6F2B, + 4043: 0x8513, + 4044: 0x5473, + 4045: 0x672A, + 4046: 0x9B45, + 4047: 0x5DF3, + 4048: 0x7B95, + 4049: 0x5CAC, + 4050: 0x5BC6, + 4051: 0x871C, + 4052: 0x6E4A, + 4053: 0x84D1, + 4054: 0x7A14, + 4055: 0x8108, + 4056: 0x5999, + 4057: 0x7C8D, + 4058: 0x6C11, + 4059: 0x7720, + 4060: 0x52D9, + 4061: 0x5922, + 4062: 0x7121, + 4063: 0x725F, + 4064: 0x77DB, + 4065: 0x9727, + 4066: 0x9D61, + 4067: 0x690B, + 4068: 0x5A7F, + 4069: 0x5A18, + 4070: 0x51A5, + 4071: 0x540D, + 4072: 0x547D, + 4073: 0x660E, + 4074: 0x76DF, + 4075: 0x8FF7, + 4076: 0x9298, + 4077: 0x9CF4, + 4078: 0x59EA, + 4079: 0x725D, + 4080: 0x6EC5, + 4081: 0x514D, + 4082: 0x68C9, + 4083: 0x7DBF, + 4084: 0x7DEC, + 4085: 0x9762, + 4086: 0x9EBA, + 4087: 0x6478, + 4088: 0x6A21, + 4089: 0x8302, + 4090: 0x5984, + 4091: 0x5B5F, + 4092: 0x6BDB, + 4093: 0x731B, + 4094: 0x76F2, + 4095: 0x7DB2, + 4096: 0x8017, + 4097: 0x8499, + 4098: 0x5132, + 4099: 0x6728, + 4100: 0x9ED9, + 4101: 0x76EE, + 4102: 0x6762, + 4103: 0x52FF, + 4104: 0x9905, + 4105: 0x5C24, + 4106: 0x623B, + 4107: 0x7C7E, + 4108: 0x8CB0, + 4109: 0x554F, + 4110: 0x60B6, + 4111: 0x7D0B, + 4112: 0x9580, + 4113: 0x5301, + 4114: 0x4E5F, + 4115: 0x51B6, + 4116: 0x591C, + 4117: 0x723A, + 4118: 0x8036, + 4119: 0x91CE, + 4120: 0x5F25, + 4121: 0x77E2, + 4122: 0x5384, + 4123: 0x5F79, + 4124: 0x7D04, + 4125: 0x85AC, + 4126: 0x8A33, + 4127: 0x8E8D, + 4128: 0x9756, + 4129: 0x67F3, + 4130: 0x85AE, + 4131: 0x9453, + 4132: 0x6109, + 4133: 0x6108, + 4134: 0x6CB9, + 4135: 0x7652, + 4136: 0x8AED, + 4137: 0x8F38, + 4138: 0x552F, + 4139: 0x4F51, + 4140: 0x512A, + 4141: 0x52C7, + 4142: 0x53CB, + 4143: 0x5BA5, + 4144: 0x5E7D, + 4145: 0x60A0, + 4146: 0x6182, + 4147: 0x63D6, + 4148: 0x6709, + 4149: 0x67DA, + 4150: 0x6E67, + 4151: 0x6D8C, + 4152: 0x7336, + 4153: 0x7337, + 4154: 0x7531, + 4155: 0x7950, + 4156: 0x88D5, + 4157: 0x8A98, + 4158: 0x904A, + 4159: 0x9091, + 4160: 0x90F5, + 4161: 0x96C4, + 4162: 0x878D, + 4163: 0x5915, + 4164: 0x4E88, + 4165: 0x4F59, + 4166: 0x4E0E, + 4167: 0x8A89, + 4168: 0x8F3F, + 4169: 0x9810, + 4170: 0x50AD, + 4171: 0x5E7C, + 4172: 0x5996, + 4173: 0x5BB9, + 4174: 0x5EB8, + 4175: 0x63DA, + 4176: 0x63FA, + 4177: 0x64C1, + 4178: 0x66DC, + 4179: 0x694A, + 4180: 0x69D8, + 4181: 0x6D0B, + 4182: 0x6EB6, + 4183: 0x7194, + 4184: 0x7528, + 4185: 0x7AAF, + 4186: 0x7F8A, + 4187: 0x8000, + 4188: 0x8449, + 4189: 0x84C9, + 4190: 0x8981, + 4191: 0x8B21, + 4192: 0x8E0A, + 4193: 0x9065, + 4194: 0x967D, + 4195: 0x990A, + 4196: 0x617E, + 4197: 0x6291, + 4198: 0x6B32, + 4199: 0x6C83, + 4200: 0x6D74, + 4201: 0x7FCC, + 4202: 0x7FFC, + 4203: 0x6DC0, + 4204: 0x7F85, + 4205: 0x87BA, + 4206: 0x88F8, + 4207: 0x6765, + 4208: 0x83B1, + 4209: 0x983C, + 4210: 0x96F7, + 4211: 0x6D1B, + 4212: 0x7D61, + 4213: 0x843D, + 4214: 0x916A, + 4215: 0x4E71, + 4216: 0x5375, + 4217: 0x5D50, + 4218: 0x6B04, + 4219: 0x6FEB, + 4220: 0x85CD, + 4221: 0x862D, + 4222: 0x89A7, + 4223: 0x5229, + 4224: 0x540F, + 4225: 0x5C65, + 4226: 0x674E, + 4227: 0x68A8, + 4228: 0x7406, + 4229: 0x7483, + 4230: 0x75E2, + 4231: 0x88CF, + 4232: 0x88E1, + 4233: 0x91CC, + 4234: 0x96E2, + 4235: 0x9678, + 4236: 0x5F8B, + 4237: 0x7387, + 4238: 0x7ACB, + 4239: 0x844E, + 4240: 0x63A0, + 4241: 0x7565, + 4242: 0x5289, + 4243: 0x6D41, + 4244: 0x6E9C, + 4245: 0x7409, + 4246: 0x7559, + 4247: 0x786B, + 4248: 0x7C92, + 4249: 0x9686, + 4250: 0x7ADC, + 4251: 0x9F8D, + 4252: 0x4FB6, + 4253: 0x616E, + 4254: 0x65C5, + 4255: 0x865C, + 4256: 0x4E86, + 4257: 0x4EAE, + 4258: 0x50DA, + 4259: 0x4E21, + 4260: 0x51CC, + 4261: 0x5BEE, + 4262: 0x6599, + 4263: 0x6881, + 4264: 0x6DBC, + 4265: 0x731F, + 4266: 0x7642, + 4267: 0x77AD, + 4268: 0x7A1C, + 4269: 0x7CE7, + 4270: 0x826F, + 4271: 0x8AD2, + 4272: 0x907C, + 4273: 0x91CF, + 4274: 0x9675, + 4275: 0x9818, + 4276: 0x529B, + 4277: 0x7DD1, + 4278: 0x502B, + 4279: 0x5398, + 4280: 0x6797, + 4281: 0x6DCB, + 4282: 0x71D0, + 4283: 0x7433, + 4284: 0x81E8, + 4285: 0x8F2A, + 4286: 0x96A3, + 4287: 0x9C57, + 4288: 0x9E9F, + 4289: 0x7460, + 4290: 0x5841, + 4291: 0x6D99, + 4292: 0x7D2F, + 4293: 0x985E, + 4294: 0x4EE4, + 4295: 0x4F36, + 4296: 0x4F8B, + 4297: 0x51B7, + 4298: 0x52B1, + 4299: 0x5DBA, + 4300: 0x601C, + 4301: 0x73B2, + 4302: 0x793C, + 4303: 0x82D3, + 4304: 0x9234, + 4305: 0x96B7, + 4306: 0x96F6, + 4307: 0x970A, + 4308: 0x9E97, + 4309: 0x9F62, + 4310: 0x66A6, + 4311: 0x6B74, + 4312: 0x5217, + 4313: 0x52A3, + 4314: 0x70C8, + 4315: 0x88C2, + 4316: 0x5EC9, + 4317: 0x604B, + 4318: 0x6190, + 4319: 0x6F23, + 4320: 0x7149, + 4321: 0x7C3E, + 4322: 0x7DF4, + 4323: 0x806F, + 4324: 0x84EE, + 4325: 0x9023, + 4326: 0x932C, + 4327: 0x5442, + 4328: 0x9B6F, + 4329: 0x6AD3, + 4330: 0x7089, + 4331: 0x8CC2, + 4332: 0x8DEF, + 4333: 0x9732, + 4334: 0x52B4, + 4335: 0x5A41, + 4336: 0x5ECA, + 4337: 0x5F04, + 4338: 0x6717, + 4339: 0x697C, + 4340: 0x6994, + 4341: 0x6D6A, + 4342: 0x6F0F, + 4343: 0x7262, + 4344: 0x72FC, + 4345: 0x7BED, + 4346: 0x8001, + 4347: 0x807E, + 4348: 0x874B, + 4349: 0x90CE, + 4350: 0x516D, + 4351: 0x9E93, + 4352: 0x7984, + 4353: 0x808B, + 4354: 0x9332, + 4355: 0x8AD6, + 4356: 0x502D, + 4357: 0x548C, + 4358: 0x8A71, + 4359: 0x6B6A, + 4360: 0x8CC4, + 4361: 0x8107, + 4362: 0x60D1, + 4363: 0x67A0, + 4364: 0x9DF2, + 4365: 0x4E99, + 4366: 0x4E98, + 4367: 0x9C10, + 4368: 0x8A6B, + 4369: 0x85C1, + 4370: 0x8568, + 4371: 0x6900, + 4372: 0x6E7E, + 4373: 0x7897, + 4374: 0x8155, + 4418: 0x5F0C, + 4419: 0x4E10, + 4420: 0x4E15, + 4421: 0x4E2A, + 4422: 0x4E31, + 4423: 0x4E36, + 4424: 0x4E3C, + 4425: 0x4E3F, + 4426: 0x4E42, + 4427: 0x4E56, + 4428: 0x4E58, + 4429: 0x4E82, + 4430: 0x4E85, + 4431: 0x8C6B, + 4432: 0x4E8A, + 4433: 0x8212, + 4434: 0x5F0D, + 4435: 0x4E8E, + 4436: 0x4E9E, + 4437: 0x4E9F, + 4438: 0x4EA0, + 4439: 0x4EA2, + 4440: 0x4EB0, + 4441: 0x4EB3, + 4442: 0x4EB6, + 4443: 0x4ECE, + 4444: 0x4ECD, + 4445: 0x4EC4, + 4446: 0x4EC6, + 4447: 0x4EC2, + 4448: 0x4ED7, + 4449: 0x4EDE, + 4450: 0x4EED, + 4451: 0x4EDF, + 4452: 0x4EF7, + 4453: 0x4F09, + 4454: 0x4F5A, + 4455: 0x4F30, + 4456: 0x4F5B, + 4457: 0x4F5D, + 4458: 0x4F57, + 4459: 0x4F47, + 4460: 0x4F76, + 4461: 0x4F88, + 4462: 0x4F8F, + 4463: 0x4F98, + 4464: 0x4F7B, + 4465: 0x4F69, + 4466: 0x4F70, + 4467: 0x4F91, + 4468: 0x4F6F, + 4469: 0x4F86, + 4470: 0x4F96, + 4471: 0x5118, + 4472: 0x4FD4, + 4473: 0x4FDF, + 4474: 0x4FCE, + 4475: 0x4FD8, + 4476: 0x4FDB, + 4477: 0x4FD1, + 4478: 0x4FDA, + 4479: 0x4FD0, + 4480: 0x4FE4, + 4481: 0x4FE5, + 4482: 0x501A, + 4483: 0x5028, + 4484: 0x5014, + 4485: 0x502A, + 4486: 0x5025, + 4487: 0x5005, + 4488: 0x4F1C, + 4489: 0x4FF6, + 4490: 0x5021, + 4491: 0x5029, + 4492: 0x502C, + 4493: 0x4FFE, + 4494: 0x4FEF, + 4495: 0x5011, + 4496: 0x5006, + 4497: 0x5043, + 4498: 0x5047, + 4499: 0x6703, + 4500: 0x5055, + 4501: 0x5050, + 4502: 0x5048, + 4503: 0x505A, + 4504: 0x5056, + 4505: 0x506C, + 4506: 0x5078, + 4507: 0x5080, + 4508: 0x509A, + 4509: 0x5085, + 4510: 0x50B4, + 4511: 0x50B2, + 4512: 0x50C9, + 4513: 0x50CA, + 4514: 0x50B3, + 4515: 0x50C2, + 4516: 0x50D6, + 4517: 0x50DE, + 4518: 0x50E5, + 4519: 0x50ED, + 4520: 0x50E3, + 4521: 0x50EE, + 4522: 0x50F9, + 4523: 0x50F5, + 4524: 0x5109, + 4525: 0x5101, + 4526: 0x5102, + 4527: 0x5116, + 4528: 0x5115, + 4529: 0x5114, + 4530: 0x511A, + 4531: 0x5121, + 4532: 0x513A, + 4533: 0x5137, + 4534: 0x513C, + 4535: 0x513B, + 4536: 0x513F, + 4537: 0x5140, + 4538: 0x5152, + 4539: 0x514C, + 4540: 0x5154, + 4541: 0x5162, + 4542: 0x7AF8, + 4543: 0x5169, + 4544: 0x516A, + 4545: 0x516E, + 4546: 0x5180, + 4547: 0x5182, + 4548: 0x56D8, + 4549: 0x518C, + 4550: 0x5189, + 4551: 0x518F, + 4552: 0x5191, + 4553: 0x5193, + 4554: 0x5195, + 4555: 0x5196, + 4556: 0x51A4, + 4557: 0x51A6, + 4558: 0x51A2, + 4559: 0x51A9, + 4560: 0x51AA, + 4561: 0x51AB, + 4562: 0x51B3, + 4563: 0x51B1, + 4564: 0x51B2, + 4565: 0x51B0, + 4566: 0x51B5, + 4567: 0x51BD, + 4568: 0x51C5, + 4569: 0x51C9, + 4570: 0x51DB, + 4571: 0x51E0, + 4572: 0x8655, + 4573: 0x51E9, + 4574: 0x51ED, + 4575: 0x51F0, + 4576: 0x51F5, + 4577: 0x51FE, + 4578: 0x5204, + 4579: 0x520B, + 4580: 0x5214, + 4581: 0x520E, + 4582: 0x5227, + 4583: 0x522A, + 4584: 0x522E, + 4585: 0x5233, + 4586: 0x5239, + 4587: 0x524F, + 4588: 0x5244, + 4589: 0x524B, + 4590: 0x524C, + 4591: 0x525E, + 4592: 0x5254, + 4593: 0x526A, + 4594: 0x5274, + 4595: 0x5269, + 4596: 0x5273, + 4597: 0x527F, + 4598: 0x527D, + 4599: 0x528D, + 4600: 0x5294, + 4601: 0x5292, + 4602: 0x5271, + 4603: 0x5288, + 4604: 0x5291, + 4605: 0x8FA8, + 4606: 0x8FA7, + 4607: 0x52AC, + 4608: 0x52AD, + 4609: 0x52BC, + 4610: 0x52B5, + 4611: 0x52C1, + 4612: 0x52CD, + 4613: 0x52D7, + 4614: 0x52DE, + 4615: 0x52E3, + 4616: 0x52E6, + 4617: 0x98ED, + 4618: 0x52E0, + 4619: 0x52F3, + 4620: 0x52F5, + 4621: 0x52F8, + 4622: 0x52F9, + 4623: 0x5306, + 4624: 0x5308, + 4625: 0x7538, + 4626: 0x530D, + 4627: 0x5310, + 4628: 0x530F, + 4629: 0x5315, + 4630: 0x531A, + 4631: 0x5323, + 4632: 0x532F, + 4633: 0x5331, + 4634: 0x5333, + 4635: 0x5338, + 4636: 0x5340, + 4637: 0x5346, + 4638: 0x5345, + 4639: 0x4E17, + 4640: 0x5349, + 4641: 0x534D, + 4642: 0x51D6, + 4643: 0x535E, + 4644: 0x5369, + 4645: 0x536E, + 4646: 0x5918, + 4647: 0x537B, + 4648: 0x5377, + 4649: 0x5382, + 4650: 0x5396, + 4651: 0x53A0, + 4652: 0x53A6, + 4653: 0x53A5, + 4654: 0x53AE, + 4655: 0x53B0, + 4656: 0x53B6, + 4657: 0x53C3, + 4658: 0x7C12, + 4659: 0x96D9, + 4660: 0x53DF, + 4661: 0x66FC, + 4662: 0x71EE, + 4663: 0x53EE, + 4664: 0x53E8, + 4665: 0x53ED, + 4666: 0x53FA, + 4667: 0x5401, + 4668: 0x543D, + 4669: 0x5440, + 4670: 0x542C, + 4671: 0x542D, + 4672: 0x543C, + 4673: 0x542E, + 4674: 0x5436, + 4675: 0x5429, + 4676: 0x541D, + 4677: 0x544E, + 4678: 0x548F, + 4679: 0x5475, + 4680: 0x548E, + 4681: 0x545F, + 4682: 0x5471, + 4683: 0x5477, + 4684: 0x5470, + 4685: 0x5492, + 4686: 0x547B, + 4687: 0x5480, + 4688: 0x5476, + 4689: 0x5484, + 4690: 0x5490, + 4691: 0x5486, + 4692: 0x54C7, + 4693: 0x54A2, + 4694: 0x54B8, + 4695: 0x54A5, + 4696: 0x54AC, + 4697: 0x54C4, + 4698: 0x54C8, + 4699: 0x54A8, + 4700: 0x54AB, + 4701: 0x54C2, + 4702: 0x54A4, + 4703: 0x54BE, + 4704: 0x54BC, + 4705: 0x54D8, + 4706: 0x54E5, + 4707: 0x54E6, + 4708: 0x550F, + 4709: 0x5514, + 4710: 0x54FD, + 4711: 0x54EE, + 4712: 0x54ED, + 4713: 0x54FA, + 4714: 0x54E2, + 4715: 0x5539, + 4716: 0x5540, + 4717: 0x5563, + 4718: 0x554C, + 4719: 0x552E, + 4720: 0x555C, + 4721: 0x5545, + 4722: 0x5556, + 4723: 0x5557, + 4724: 0x5538, + 4725: 0x5533, + 4726: 0x555D, + 4727: 0x5599, + 4728: 0x5580, + 4729: 0x54AF, + 4730: 0x558A, + 4731: 0x559F, + 4732: 0x557B, + 4733: 0x557E, + 4734: 0x5598, + 4735: 0x559E, + 4736: 0x55AE, + 4737: 0x557C, + 4738: 0x5583, + 4739: 0x55A9, + 4740: 0x5587, + 4741: 0x55A8, + 4742: 0x55DA, + 4743: 0x55C5, + 4744: 0x55DF, + 4745: 0x55C4, + 4746: 0x55DC, + 4747: 0x55E4, + 4748: 0x55D4, + 4749: 0x5614, + 4750: 0x55F7, + 4751: 0x5616, + 4752: 0x55FE, + 4753: 0x55FD, + 4754: 0x561B, + 4755: 0x55F9, + 4756: 0x564E, + 4757: 0x5650, + 4758: 0x71DF, + 4759: 0x5634, + 4760: 0x5636, + 4761: 0x5632, + 4762: 0x5638, + 4763: 0x566B, + 4764: 0x5664, + 4765: 0x562F, + 4766: 0x566C, + 4767: 0x566A, + 4768: 0x5686, + 4769: 0x5680, + 4770: 0x568A, + 4771: 0x56A0, + 4772: 0x5694, + 4773: 0x568F, + 4774: 0x56A5, + 4775: 0x56AE, + 4776: 0x56B6, + 4777: 0x56B4, + 4778: 0x56C2, + 4779: 0x56BC, + 4780: 0x56C1, + 4781: 0x56C3, + 4782: 0x56C0, + 4783: 0x56C8, + 4784: 0x56CE, + 4785: 0x56D1, + 4786: 0x56D3, + 4787: 0x56D7, + 4788: 0x56EE, + 4789: 0x56F9, + 4790: 0x5700, + 4791: 0x56FF, + 4792: 0x5704, + 4793: 0x5709, + 4794: 0x5708, + 4795: 0x570B, + 4796: 0x570D, + 4797: 0x5713, + 4798: 0x5718, + 4799: 0x5716, + 4800: 0x55C7, + 4801: 0x571C, + 4802: 0x5726, + 4803: 0x5737, + 4804: 0x5738, + 4805: 0x574E, + 4806: 0x573B, + 4807: 0x5740, + 4808: 0x574F, + 4809: 0x5769, + 4810: 0x57C0, + 4811: 0x5788, + 4812: 0x5761, + 4813: 0x577F, + 4814: 0x5789, + 4815: 0x5793, + 4816: 0x57A0, + 4817: 0x57B3, + 4818: 0x57A4, + 4819: 0x57AA, + 4820: 0x57B0, + 4821: 0x57C3, + 4822: 0x57C6, + 4823: 0x57D4, + 4824: 0x57D2, + 4825: 0x57D3, + 4826: 0x580A, + 4827: 0x57D6, + 4828: 0x57E3, + 4829: 0x580B, + 4830: 0x5819, + 4831: 0x581D, + 4832: 0x5872, + 4833: 0x5821, + 4834: 0x5862, + 4835: 0x584B, + 4836: 0x5870, + 4837: 0x6BC0, + 4838: 0x5852, + 4839: 0x583D, + 4840: 0x5879, + 4841: 0x5885, + 4842: 0x58B9, + 4843: 0x589F, + 4844: 0x58AB, + 4845: 0x58BA, + 4846: 0x58DE, + 4847: 0x58BB, + 4848: 0x58B8, + 4849: 0x58AE, + 4850: 0x58C5, + 4851: 0x58D3, + 4852: 0x58D1, + 4853: 0x58D7, + 4854: 0x58D9, + 4855: 0x58D8, + 4856: 0x58E5, + 4857: 0x58DC, + 4858: 0x58E4, + 4859: 0x58DF, + 4860: 0x58EF, + 4861: 0x58FA, + 4862: 0x58F9, + 4863: 0x58FB, + 4864: 0x58FC, + 4865: 0x58FD, + 4866: 0x5902, + 4867: 0x590A, + 4868: 0x5910, + 4869: 0x591B, + 4870: 0x68A6, + 4871: 0x5925, + 4872: 0x592C, + 4873: 0x592D, + 4874: 0x5932, + 4875: 0x5938, + 4876: 0x593E, + 4877: 0x7AD2, + 4878: 0x5955, + 4879: 0x5950, + 4880: 0x594E, + 4881: 0x595A, + 4882: 0x5958, + 4883: 0x5962, + 4884: 0x5960, + 4885: 0x5967, + 4886: 0x596C, + 4887: 0x5969, + 4888: 0x5978, + 4889: 0x5981, + 4890: 0x599D, + 4891: 0x4F5E, + 4892: 0x4FAB, + 4893: 0x59A3, + 4894: 0x59B2, + 4895: 0x59C6, + 4896: 0x59E8, + 4897: 0x59DC, + 4898: 0x598D, + 4899: 0x59D9, + 4900: 0x59DA, + 4901: 0x5A25, + 4902: 0x5A1F, + 4903: 0x5A11, + 4904: 0x5A1C, + 4905: 0x5A09, + 4906: 0x5A1A, + 4907: 0x5A40, + 4908: 0x5A6C, + 4909: 0x5A49, + 4910: 0x5A35, + 4911: 0x5A36, + 4912: 0x5A62, + 4913: 0x5A6A, + 4914: 0x5A9A, + 4915: 0x5ABC, + 4916: 0x5ABE, + 4917: 0x5ACB, + 4918: 0x5AC2, + 4919: 0x5ABD, + 4920: 0x5AE3, + 4921: 0x5AD7, + 4922: 0x5AE6, + 4923: 0x5AE9, + 4924: 0x5AD6, + 4925: 0x5AFA, + 4926: 0x5AFB, + 4927: 0x5B0C, + 4928: 0x5B0B, + 4929: 0x5B16, + 4930: 0x5B32, + 4931: 0x5AD0, + 4932: 0x5B2A, + 4933: 0x5B36, + 4934: 0x5B3E, + 4935: 0x5B43, + 4936: 0x5B45, + 4937: 0x5B40, + 4938: 0x5B51, + 4939: 0x5B55, + 4940: 0x5B5A, + 4941: 0x5B5B, + 4942: 0x5B65, + 4943: 0x5B69, + 4944: 0x5B70, + 4945: 0x5B73, + 4946: 0x5B75, + 4947: 0x5B78, + 4948: 0x6588, + 4949: 0x5B7A, + 4950: 0x5B80, + 4951: 0x5B83, + 4952: 0x5BA6, + 4953: 0x5BB8, + 4954: 0x5BC3, + 4955: 0x5BC7, + 4956: 0x5BC9, + 4957: 0x5BD4, + 4958: 0x5BD0, + 4959: 0x5BE4, + 4960: 0x5BE6, + 4961: 0x5BE2, + 4962: 0x5BDE, + 4963: 0x5BE5, + 4964: 0x5BEB, + 4965: 0x5BF0, + 4966: 0x5BF6, + 4967: 0x5BF3, + 4968: 0x5C05, + 4969: 0x5C07, + 4970: 0x5C08, + 4971: 0x5C0D, + 4972: 0x5C13, + 4973: 0x5C20, + 4974: 0x5C22, + 4975: 0x5C28, + 4976: 0x5C38, + 4977: 0x5C39, + 4978: 0x5C41, + 4979: 0x5C46, + 4980: 0x5C4E, + 4981: 0x5C53, + 4982: 0x5C50, + 4983: 0x5C4F, + 4984: 0x5B71, + 4985: 0x5C6C, + 4986: 0x5C6E, + 4987: 0x4E62, + 4988: 0x5C76, + 4989: 0x5C79, + 4990: 0x5C8C, + 4991: 0x5C91, + 4992: 0x5C94, + 4993: 0x599B, + 4994: 0x5CAB, + 4995: 0x5CBB, + 4996: 0x5CB6, + 4997: 0x5CBC, + 4998: 0x5CB7, + 4999: 0x5CC5, + 5000: 0x5CBE, + 5001: 0x5CC7, + 5002: 0x5CD9, + 5003: 0x5CE9, + 5004: 0x5CFD, + 5005: 0x5CFA, + 5006: 0x5CED, + 5007: 0x5D8C, + 5008: 0x5CEA, + 5009: 0x5D0B, + 5010: 0x5D15, + 5011: 0x5D17, + 5012: 0x5D5C, + 5013: 0x5D1F, + 5014: 0x5D1B, + 5015: 0x5D11, + 5016: 0x5D14, + 5017: 0x5D22, + 5018: 0x5D1A, + 5019: 0x5D19, + 5020: 0x5D18, + 5021: 0x5D4C, + 5022: 0x5D52, + 5023: 0x5D4E, + 5024: 0x5D4B, + 5025: 0x5D6C, + 5026: 0x5D73, + 5027: 0x5D76, + 5028: 0x5D87, + 5029: 0x5D84, + 5030: 0x5D82, + 5031: 0x5DA2, + 5032: 0x5D9D, + 5033: 0x5DAC, + 5034: 0x5DAE, + 5035: 0x5DBD, + 5036: 0x5D90, + 5037: 0x5DB7, + 5038: 0x5DBC, + 5039: 0x5DC9, + 5040: 0x5DCD, + 5041: 0x5DD3, + 5042: 0x5DD2, + 5043: 0x5DD6, + 5044: 0x5DDB, + 5045: 0x5DEB, + 5046: 0x5DF2, + 5047: 0x5DF5, + 5048: 0x5E0B, + 5049: 0x5E1A, + 5050: 0x5E19, + 5051: 0x5E11, + 5052: 0x5E1B, + 5053: 0x5E36, + 5054: 0x5E37, + 5055: 0x5E44, + 5056: 0x5E43, + 5057: 0x5E40, + 5058: 0x5E4E, + 5059: 0x5E57, + 5060: 0x5E54, + 5061: 0x5E5F, + 5062: 0x5E62, + 5063: 0x5E64, + 5064: 0x5E47, + 5065: 0x5E75, + 5066: 0x5E76, + 5067: 0x5E7A, + 5068: 0x9EBC, + 5069: 0x5E7F, + 5070: 0x5EA0, + 5071: 0x5EC1, + 5072: 0x5EC2, + 5073: 0x5EC8, + 5074: 0x5ED0, + 5075: 0x5ECF, + 5076: 0x5ED6, + 5077: 0x5EE3, + 5078: 0x5EDD, + 5079: 0x5EDA, + 5080: 0x5EDB, + 5081: 0x5EE2, + 5082: 0x5EE1, + 5083: 0x5EE8, + 5084: 0x5EE9, + 5085: 0x5EEC, + 5086: 0x5EF1, + 5087: 0x5EF3, + 5088: 0x5EF0, + 5089: 0x5EF4, + 5090: 0x5EF8, + 5091: 0x5EFE, + 5092: 0x5F03, + 5093: 0x5F09, + 5094: 0x5F5D, + 5095: 0x5F5C, + 5096: 0x5F0B, + 5097: 0x5F11, + 5098: 0x5F16, + 5099: 0x5F29, + 5100: 0x5F2D, + 5101: 0x5F38, + 5102: 0x5F41, + 5103: 0x5F48, + 5104: 0x5F4C, + 5105: 0x5F4E, + 5106: 0x5F2F, + 5107: 0x5F51, + 5108: 0x5F56, + 5109: 0x5F57, + 5110: 0x5F59, + 5111: 0x5F61, + 5112: 0x5F6D, + 5113: 0x5F73, + 5114: 0x5F77, + 5115: 0x5F83, + 5116: 0x5F82, + 5117: 0x5F7F, + 5118: 0x5F8A, + 5119: 0x5F88, + 5120: 0x5F91, + 5121: 0x5F87, + 5122: 0x5F9E, + 5123: 0x5F99, + 5124: 0x5F98, + 5125: 0x5FA0, + 5126: 0x5FA8, + 5127: 0x5FAD, + 5128: 0x5FBC, + 5129: 0x5FD6, + 5130: 0x5FFB, + 5131: 0x5FE4, + 5132: 0x5FF8, + 5133: 0x5FF1, + 5134: 0x5FDD, + 5135: 0x60B3, + 5136: 0x5FFF, + 5137: 0x6021, + 5138: 0x6060, + 5139: 0x6019, + 5140: 0x6010, + 5141: 0x6029, + 5142: 0x600E, + 5143: 0x6031, + 5144: 0x601B, + 5145: 0x6015, + 5146: 0x602B, + 5147: 0x6026, + 5148: 0x600F, + 5149: 0x603A, + 5150: 0x605A, + 5151: 0x6041, + 5152: 0x606A, + 5153: 0x6077, + 5154: 0x605F, + 5155: 0x604A, + 5156: 0x6046, + 5157: 0x604D, + 5158: 0x6063, + 5159: 0x6043, + 5160: 0x6064, + 5161: 0x6042, + 5162: 0x606C, + 5163: 0x606B, + 5164: 0x6059, + 5165: 0x6081, + 5166: 0x608D, + 5167: 0x60E7, + 5168: 0x6083, + 5169: 0x609A, + 5170: 0x6084, + 5171: 0x609B, + 5172: 0x6096, + 5173: 0x6097, + 5174: 0x6092, + 5175: 0x60A7, + 5176: 0x608B, + 5177: 0x60E1, + 5178: 0x60B8, + 5179: 0x60E0, + 5180: 0x60D3, + 5181: 0x60B4, + 5182: 0x5FF0, + 5183: 0x60BD, + 5184: 0x60C6, + 5185: 0x60B5, + 5186: 0x60D8, + 5187: 0x614D, + 5188: 0x6115, + 5189: 0x6106, + 5190: 0x60F6, + 5191: 0x60F7, + 5192: 0x6100, + 5193: 0x60F4, + 5194: 0x60FA, + 5195: 0x6103, + 5196: 0x6121, + 5197: 0x60FB, + 5198: 0x60F1, + 5199: 0x610D, + 5200: 0x610E, + 5201: 0x6147, + 5202: 0x613E, + 5203: 0x6128, + 5204: 0x6127, + 5205: 0x614A, + 5206: 0x613F, + 5207: 0x613C, + 5208: 0x612C, + 5209: 0x6134, + 5210: 0x613D, + 5211: 0x6142, + 5212: 0x6144, + 5213: 0x6173, + 5214: 0x6177, + 5215: 0x6158, + 5216: 0x6159, + 5217: 0x615A, + 5218: 0x616B, + 5219: 0x6174, + 5220: 0x616F, + 5221: 0x6165, + 5222: 0x6171, + 5223: 0x615F, + 5224: 0x615D, + 5225: 0x6153, + 5226: 0x6175, + 5227: 0x6199, + 5228: 0x6196, + 5229: 0x6187, + 5230: 0x61AC, + 5231: 0x6194, + 5232: 0x619A, + 5233: 0x618A, + 5234: 0x6191, + 5235: 0x61AB, + 5236: 0x61AE, + 5237: 0x61CC, + 5238: 0x61CA, + 5239: 0x61C9, + 5240: 0x61F7, + 5241: 0x61C8, + 5242: 0x61C3, + 5243: 0x61C6, + 5244: 0x61BA, + 5245: 0x61CB, + 5246: 0x7F79, + 5247: 0x61CD, + 5248: 0x61E6, + 5249: 0x61E3, + 5250: 0x61F6, + 5251: 0x61FA, + 5252: 0x61F4, + 5253: 0x61FF, + 5254: 0x61FD, + 5255: 0x61FC, + 5256: 0x61FE, + 5257: 0x6200, + 5258: 0x6208, + 5259: 0x6209, + 5260: 0x620D, + 5261: 0x620C, + 5262: 0x6214, + 5263: 0x621B, + 5264: 0x621E, + 5265: 0x6221, + 5266: 0x622A, + 5267: 0x622E, + 5268: 0x6230, + 5269: 0x6232, + 5270: 0x6233, + 5271: 0x6241, + 5272: 0x624E, + 5273: 0x625E, + 5274: 0x6263, + 5275: 0x625B, + 5276: 0x6260, + 5277: 0x6268, + 5278: 0x627C, + 5279: 0x6282, + 5280: 0x6289, + 5281: 0x627E, + 5282: 0x6292, + 5283: 0x6293, + 5284: 0x6296, + 5285: 0x62D4, + 5286: 0x6283, + 5287: 0x6294, + 5288: 0x62D7, + 5289: 0x62D1, + 5290: 0x62BB, + 5291: 0x62CF, + 5292: 0x62FF, + 5293: 0x62C6, + 5294: 0x64D4, + 5295: 0x62C8, + 5296: 0x62DC, + 5297: 0x62CC, + 5298: 0x62CA, + 5299: 0x62C2, + 5300: 0x62C7, + 5301: 0x629B, + 5302: 0x62C9, + 5303: 0x630C, + 5304: 0x62EE, + 5305: 0x62F1, + 5306: 0x6327, + 5307: 0x6302, + 5308: 0x6308, + 5309: 0x62EF, + 5310: 0x62F5, + 5311: 0x6350, + 5312: 0x633E, + 5313: 0x634D, + 5314: 0x641C, + 5315: 0x634F, + 5316: 0x6396, + 5317: 0x638E, + 5318: 0x6380, + 5319: 0x63AB, + 5320: 0x6376, + 5321: 0x63A3, + 5322: 0x638F, + 5323: 0x6389, + 5324: 0x639F, + 5325: 0x63B5, + 5326: 0x636B, + 5327: 0x6369, + 5328: 0x63BE, + 5329: 0x63E9, + 5330: 0x63C0, + 5331: 0x63C6, + 5332: 0x63E3, + 5333: 0x63C9, + 5334: 0x63D2, + 5335: 0x63F6, + 5336: 0x63C4, + 5337: 0x6416, + 5338: 0x6434, + 5339: 0x6406, + 5340: 0x6413, + 5341: 0x6426, + 5342: 0x6436, + 5343: 0x651D, + 5344: 0x6417, + 5345: 0x6428, + 5346: 0x640F, + 5347: 0x6467, + 5348: 0x646F, + 5349: 0x6476, + 5350: 0x644E, + 5351: 0x652A, + 5352: 0x6495, + 5353: 0x6493, + 5354: 0x64A5, + 5355: 0x64A9, + 5356: 0x6488, + 5357: 0x64BC, + 5358: 0x64DA, + 5359: 0x64D2, + 5360: 0x64C5, + 5361: 0x64C7, + 5362: 0x64BB, + 5363: 0x64D8, + 5364: 0x64C2, + 5365: 0x64F1, + 5366: 0x64E7, + 5367: 0x8209, + 5368: 0x64E0, + 5369: 0x64E1, + 5370: 0x62AC, + 5371: 0x64E3, + 5372: 0x64EF, + 5373: 0x652C, + 5374: 0x64F6, + 5375: 0x64F4, + 5376: 0x64F2, + 5377: 0x64FA, + 5378: 0x6500, + 5379: 0x64FD, + 5380: 0x6518, + 5381: 0x651C, + 5382: 0x6505, + 5383: 0x6524, + 5384: 0x6523, + 5385: 0x652B, + 5386: 0x6534, + 5387: 0x6535, + 5388: 0x6537, + 5389: 0x6536, + 5390: 0x6538, + 5391: 0x754B, + 5392: 0x6548, + 5393: 0x6556, + 5394: 0x6555, + 5395: 0x654D, + 5396: 0x6558, + 5397: 0x655E, + 5398: 0x655D, + 5399: 0x6572, + 5400: 0x6578, + 5401: 0x6582, + 5402: 0x6583, + 5403: 0x8B8A, + 5404: 0x659B, + 5405: 0x659F, + 5406: 0x65AB, + 5407: 0x65B7, + 5408: 0x65C3, + 5409: 0x65C6, + 5410: 0x65C1, + 5411: 0x65C4, + 5412: 0x65CC, + 5413: 0x65D2, + 5414: 0x65DB, + 5415: 0x65D9, + 5416: 0x65E0, + 5417: 0x65E1, + 5418: 0x65F1, + 5419: 0x6772, + 5420: 0x660A, + 5421: 0x6603, + 5422: 0x65FB, + 5423: 0x6773, + 5424: 0x6635, + 5425: 0x6636, + 5426: 0x6634, + 5427: 0x661C, + 5428: 0x664F, + 5429: 0x6644, + 5430: 0x6649, + 5431: 0x6641, + 5432: 0x665E, + 5433: 0x665D, + 5434: 0x6664, + 5435: 0x6667, + 5436: 0x6668, + 5437: 0x665F, + 5438: 0x6662, + 5439: 0x6670, + 5440: 0x6683, + 5441: 0x6688, + 5442: 0x668E, + 5443: 0x6689, + 5444: 0x6684, + 5445: 0x6698, + 5446: 0x669D, + 5447: 0x66C1, + 5448: 0x66B9, + 5449: 0x66C9, + 5450: 0x66BE, + 5451: 0x66BC, + 5452: 0x66C4, + 5453: 0x66B8, + 5454: 0x66D6, + 5455: 0x66DA, + 5456: 0x66E0, + 5457: 0x663F, + 5458: 0x66E6, + 5459: 0x66E9, + 5460: 0x66F0, + 5461: 0x66F5, + 5462: 0x66F7, + 5463: 0x670F, + 5464: 0x6716, + 5465: 0x671E, + 5466: 0x6726, + 5467: 0x6727, + 5468: 0x9738, + 5469: 0x672E, + 5470: 0x673F, + 5471: 0x6736, + 5472: 0x6741, + 5473: 0x6738, + 5474: 0x6737, + 5475: 0x6746, + 5476: 0x675E, + 5477: 0x6760, + 5478: 0x6759, + 5479: 0x6763, + 5480: 0x6764, + 5481: 0x6789, + 5482: 0x6770, + 5483: 0x67A9, + 5484: 0x677C, + 5485: 0x676A, + 5486: 0x678C, + 5487: 0x678B, + 5488: 0x67A6, + 5489: 0x67A1, + 5490: 0x6785, + 5491: 0x67B7, + 5492: 0x67EF, + 5493: 0x67B4, + 5494: 0x67EC, + 5495: 0x67B3, + 5496: 0x67E9, + 5497: 0x67B8, + 5498: 0x67E4, + 5499: 0x67DE, + 5500: 0x67DD, + 5501: 0x67E2, + 5502: 0x67EE, + 5503: 0x67B9, + 5504: 0x67CE, + 5505: 0x67C6, + 5506: 0x67E7, + 5507: 0x6A9C, + 5508: 0x681E, + 5509: 0x6846, + 5510: 0x6829, + 5511: 0x6840, + 5512: 0x684D, + 5513: 0x6832, + 5514: 0x684E, + 5515: 0x68B3, + 5516: 0x682B, + 5517: 0x6859, + 5518: 0x6863, + 5519: 0x6877, + 5520: 0x687F, + 5521: 0x689F, + 5522: 0x688F, + 5523: 0x68AD, + 5524: 0x6894, + 5525: 0x689D, + 5526: 0x689B, + 5527: 0x6883, + 5528: 0x6AAE, + 5529: 0x68B9, + 5530: 0x6874, + 5531: 0x68B5, + 5532: 0x68A0, + 5533: 0x68BA, + 5534: 0x690F, + 5535: 0x688D, + 5536: 0x687E, + 5537: 0x6901, + 5538: 0x68CA, + 5539: 0x6908, + 5540: 0x68D8, + 5541: 0x6922, + 5542: 0x6926, + 5543: 0x68E1, + 5544: 0x690C, + 5545: 0x68CD, + 5546: 0x68D4, + 5547: 0x68E7, + 5548: 0x68D5, + 5549: 0x6936, + 5550: 0x6912, + 5551: 0x6904, + 5552: 0x68D7, + 5553: 0x68E3, + 5554: 0x6925, + 5555: 0x68F9, + 5556: 0x68E0, + 5557: 0x68EF, + 5558: 0x6928, + 5559: 0x692A, + 5560: 0x691A, + 5561: 0x6923, + 5562: 0x6921, + 5563: 0x68C6, + 5564: 0x6979, + 5565: 0x6977, + 5566: 0x695C, + 5567: 0x6978, + 5568: 0x696B, + 5569: 0x6954, + 5570: 0x697E, + 5571: 0x696E, + 5572: 0x6939, + 5573: 0x6974, + 5574: 0x693D, + 5575: 0x6959, + 5576: 0x6930, + 5577: 0x6961, + 5578: 0x695E, + 5579: 0x695D, + 5580: 0x6981, + 5581: 0x696A, + 5582: 0x69B2, + 5583: 0x69AE, + 5584: 0x69D0, + 5585: 0x69BF, + 5586: 0x69C1, + 5587: 0x69D3, + 5588: 0x69BE, + 5589: 0x69CE, + 5590: 0x5BE8, + 5591: 0x69CA, + 5592: 0x69DD, + 5593: 0x69BB, + 5594: 0x69C3, + 5595: 0x69A7, + 5596: 0x6A2E, + 5597: 0x6991, + 5598: 0x69A0, + 5599: 0x699C, + 5600: 0x6995, + 5601: 0x69B4, + 5602: 0x69DE, + 5603: 0x69E8, + 5604: 0x6A02, + 5605: 0x6A1B, + 5606: 0x69FF, + 5607: 0x6B0A, + 5608: 0x69F9, + 5609: 0x69F2, + 5610: 0x69E7, + 5611: 0x6A05, + 5612: 0x69B1, + 5613: 0x6A1E, + 5614: 0x69ED, + 5615: 0x6A14, + 5616: 0x69EB, + 5617: 0x6A0A, + 5618: 0x6A12, + 5619: 0x6AC1, + 5620: 0x6A23, + 5621: 0x6A13, + 5622: 0x6A44, + 5623: 0x6A0C, + 5624: 0x6A72, + 5625: 0x6A36, + 5626: 0x6A78, + 5627: 0x6A47, + 5628: 0x6A62, + 5629: 0x6A59, + 5630: 0x6A66, + 5631: 0x6A48, + 5632: 0x6A38, + 5633: 0x6A22, + 5634: 0x6A90, + 5635: 0x6A8D, + 5636: 0x6AA0, + 5637: 0x6A84, + 5638: 0x6AA2, + 5639: 0x6AA3, + 5640: 0x6A97, + 5641: 0x8617, + 5642: 0x6ABB, + 5643: 0x6AC3, + 5644: 0x6AC2, + 5645: 0x6AB8, + 5646: 0x6AB3, + 5647: 0x6AAC, + 5648: 0x6ADE, + 5649: 0x6AD1, + 5650: 0x6ADF, + 5651: 0x6AAA, + 5652: 0x6ADA, + 5653: 0x6AEA, + 5654: 0x6AFB, + 5655: 0x6B05, + 5656: 0x8616, + 5657: 0x6AFA, + 5658: 0x6B12, + 5659: 0x6B16, + 5660: 0x9B31, + 5661: 0x6B1F, + 5662: 0x6B38, + 5663: 0x6B37, + 5664: 0x76DC, + 5665: 0x6B39, + 5666: 0x98EE, + 5667: 0x6B47, + 5668: 0x6B43, + 5669: 0x6B49, + 5670: 0x6B50, + 5671: 0x6B59, + 5672: 0x6B54, + 5673: 0x6B5B, + 5674: 0x6B5F, + 5675: 0x6B61, + 5676: 0x6B78, + 5677: 0x6B79, + 5678: 0x6B7F, + 5679: 0x6B80, + 5680: 0x6B84, + 5681: 0x6B83, + 5682: 0x6B8D, + 5683: 0x6B98, + 5684: 0x6B95, + 5685: 0x6B9E, + 5686: 0x6BA4, + 5687: 0x6BAA, + 5688: 0x6BAB, + 5689: 0x6BAF, + 5690: 0x6BB2, + 5691: 0x6BB1, + 5692: 0x6BB3, + 5693: 0x6BB7, + 5694: 0x6BBC, + 5695: 0x6BC6, + 5696: 0x6BCB, + 5697: 0x6BD3, + 5698: 0x6BDF, + 5699: 0x6BEC, + 5700: 0x6BEB, + 5701: 0x6BF3, + 5702: 0x6BEF, + 5703: 0x9EBE, + 5704: 0x6C08, + 5705: 0x6C13, + 5706: 0x6C14, + 5707: 0x6C1B, + 5708: 0x6C24, + 5709: 0x6C23, + 5710: 0x6C5E, + 5711: 0x6C55, + 5712: 0x6C62, + 5713: 0x6C6A, + 5714: 0x6C82, + 5715: 0x6C8D, + 5716: 0x6C9A, + 5717: 0x6C81, + 5718: 0x6C9B, + 5719: 0x6C7E, + 5720: 0x6C68, + 5721: 0x6C73, + 5722: 0x6C92, + 5723: 0x6C90, + 5724: 0x6CC4, + 5725: 0x6CF1, + 5726: 0x6CD3, + 5727: 0x6CBD, + 5728: 0x6CD7, + 5729: 0x6CC5, + 5730: 0x6CDD, + 5731: 0x6CAE, + 5732: 0x6CB1, + 5733: 0x6CBE, + 5734: 0x6CBA, + 5735: 0x6CDB, + 5736: 0x6CEF, + 5737: 0x6CD9, + 5738: 0x6CEA, + 5739: 0x6D1F, + 5740: 0x884D, + 5741: 0x6D36, + 5742: 0x6D2B, + 5743: 0x6D3D, + 5744: 0x6D38, + 5745: 0x6D19, + 5746: 0x6D35, + 5747: 0x6D33, + 5748: 0x6D12, + 5749: 0x6D0C, + 5750: 0x6D63, + 5751: 0x6D93, + 5752: 0x6D64, + 5753: 0x6D5A, + 5754: 0x6D79, + 5755: 0x6D59, + 5756: 0x6D8E, + 5757: 0x6D95, + 5758: 0x6FE4, + 5759: 0x6D85, + 5760: 0x6DF9, + 5761: 0x6E15, + 5762: 0x6E0A, + 5763: 0x6DB5, + 5764: 0x6DC7, + 5765: 0x6DE6, + 5766: 0x6DB8, + 5767: 0x6DC6, + 5768: 0x6DEC, + 5769: 0x6DDE, + 5770: 0x6DCC, + 5771: 0x6DE8, + 5772: 0x6DD2, + 5773: 0x6DC5, + 5774: 0x6DFA, + 5775: 0x6DD9, + 5776: 0x6DE4, + 5777: 0x6DD5, + 5778: 0x6DEA, + 5779: 0x6DEE, + 5780: 0x6E2D, + 5781: 0x6E6E, + 5782: 0x6E2E, + 5783: 0x6E19, + 5784: 0x6E72, + 5785: 0x6E5F, + 5786: 0x6E3E, + 5787: 0x6E23, + 5788: 0x6E6B, + 5789: 0x6E2B, + 5790: 0x6E76, + 5791: 0x6E4D, + 5792: 0x6E1F, + 5793: 0x6E43, + 5794: 0x6E3A, + 5795: 0x6E4E, + 5796: 0x6E24, + 5797: 0x6EFF, + 5798: 0x6E1D, + 5799: 0x6E38, + 5800: 0x6E82, + 5801: 0x6EAA, + 5802: 0x6E98, + 5803: 0x6EC9, + 5804: 0x6EB7, + 5805: 0x6ED3, + 5806: 0x6EBD, + 5807: 0x6EAF, + 5808: 0x6EC4, + 5809: 0x6EB2, + 5810: 0x6ED4, + 5811: 0x6ED5, + 5812: 0x6E8F, + 5813: 0x6EA5, + 5814: 0x6EC2, + 5815: 0x6E9F, + 5816: 0x6F41, + 5817: 0x6F11, + 5818: 0x704C, + 5819: 0x6EEC, + 5820: 0x6EF8, + 5821: 0x6EFE, + 5822: 0x6F3F, + 5823: 0x6EF2, + 5824: 0x6F31, + 5825: 0x6EEF, + 5826: 0x6F32, + 5827: 0x6ECC, + 5828: 0x6F3E, + 5829: 0x6F13, + 5830: 0x6EF7, + 5831: 0x6F86, + 5832: 0x6F7A, + 5833: 0x6F78, + 5834: 0x6F81, + 5835: 0x6F80, + 5836: 0x6F6F, + 5837: 0x6F5B, + 5838: 0x6FF3, + 5839: 0x6F6D, + 5840: 0x6F82, + 5841: 0x6F7C, + 5842: 0x6F58, + 5843: 0x6F8E, + 5844: 0x6F91, + 5845: 0x6FC2, + 5846: 0x6F66, + 5847: 0x6FB3, + 5848: 0x6FA3, + 5849: 0x6FA1, + 5850: 0x6FA4, + 5851: 0x6FB9, + 5852: 0x6FC6, + 5853: 0x6FAA, + 5854: 0x6FDF, + 5855: 0x6FD5, + 5856: 0x6FEC, + 5857: 0x6FD4, + 5858: 0x6FD8, + 5859: 0x6FF1, + 5860: 0x6FEE, + 5861: 0x6FDB, + 5862: 0x7009, + 5863: 0x700B, + 5864: 0x6FFA, + 5865: 0x7011, + 5866: 0x7001, + 5867: 0x700F, + 5868: 0x6FFE, + 5869: 0x701B, + 5870: 0x701A, + 5871: 0x6F74, + 5872: 0x701D, + 5873: 0x7018, + 5874: 0x701F, + 5875: 0x7030, + 5876: 0x703E, + 5877: 0x7032, + 5878: 0x7051, + 5879: 0x7063, + 5880: 0x7099, + 5881: 0x7092, + 5882: 0x70AF, + 5883: 0x70F1, + 5884: 0x70AC, + 5885: 0x70B8, + 5886: 0x70B3, + 5887: 0x70AE, + 5888: 0x70DF, + 5889: 0x70CB, + 5890: 0x70DD, + 5891: 0x70D9, + 5892: 0x7109, + 5893: 0x70FD, + 5894: 0x711C, + 5895: 0x7119, + 5896: 0x7165, + 5897: 0x7155, + 5898: 0x7188, + 5899: 0x7166, + 5900: 0x7162, + 5901: 0x714C, + 5902: 0x7156, + 5903: 0x716C, + 5904: 0x718F, + 5905: 0x71FB, + 5906: 0x7184, + 5907: 0x7195, + 5908: 0x71A8, + 5909: 0x71AC, + 5910: 0x71D7, + 5911: 0x71B9, + 5912: 0x71BE, + 5913: 0x71D2, + 5914: 0x71C9, + 5915: 0x71D4, + 5916: 0x71CE, + 5917: 0x71E0, + 5918: 0x71EC, + 5919: 0x71E7, + 5920: 0x71F5, + 5921: 0x71FC, + 5922: 0x71F9, + 5923: 0x71FF, + 5924: 0x720D, + 5925: 0x7210, + 5926: 0x721B, + 5927: 0x7228, + 5928: 0x722D, + 5929: 0x722C, + 5930: 0x7230, + 5931: 0x7232, + 5932: 0x723B, + 5933: 0x723C, + 5934: 0x723F, + 5935: 0x7240, + 5936: 0x7246, + 5937: 0x724B, + 5938: 0x7258, + 5939: 0x7274, + 5940: 0x727E, + 5941: 0x7282, + 5942: 0x7281, + 5943: 0x7287, + 5944: 0x7292, + 5945: 0x7296, + 5946: 0x72A2, + 5947: 0x72A7, + 5948: 0x72B9, + 5949: 0x72B2, + 5950: 0x72C3, + 5951: 0x72C6, + 5952: 0x72C4, + 5953: 0x72CE, + 5954: 0x72D2, + 5955: 0x72E2, + 5956: 0x72E0, + 5957: 0x72E1, + 5958: 0x72F9, + 5959: 0x72F7, + 5960: 0x500F, + 5961: 0x7317, + 5962: 0x730A, + 5963: 0x731C, + 5964: 0x7316, + 5965: 0x731D, + 5966: 0x7334, + 5967: 0x732F, + 5968: 0x7329, + 5969: 0x7325, + 5970: 0x733E, + 5971: 0x734E, + 5972: 0x734F, + 5973: 0x9ED8, + 5974: 0x7357, + 5975: 0x736A, + 5976: 0x7368, + 5977: 0x7370, + 5978: 0x7378, + 5979: 0x7375, + 5980: 0x737B, + 5981: 0x737A, + 5982: 0x73C8, + 5983: 0x73B3, + 5984: 0x73CE, + 5985: 0x73BB, + 5986: 0x73C0, + 5987: 0x73E5, + 5988: 0x73EE, + 5989: 0x73DE, + 5990: 0x74A2, + 5991: 0x7405, + 5992: 0x746F, + 5993: 0x7425, + 5994: 0x73F8, + 5995: 0x7432, + 5996: 0x743A, + 5997: 0x7455, + 5998: 0x743F, + 5999: 0x745F, + 6000: 0x7459, + 6001: 0x7441, + 6002: 0x745C, + 6003: 0x7469, + 6004: 0x7470, + 6005: 0x7463, + 6006: 0x746A, + 6007: 0x7476, + 6008: 0x747E, + 6009: 0x748B, + 6010: 0x749E, + 6011: 0x74A7, + 6012: 0x74CA, + 6013: 0x74CF, + 6014: 0x74D4, + 6015: 0x73F1, + 6016: 0x74E0, + 6017: 0x74E3, + 6018: 0x74E7, + 6019: 0x74E9, + 6020: 0x74EE, + 6021: 0x74F2, + 6022: 0x74F0, + 6023: 0x74F1, + 6024: 0x74F8, + 6025: 0x74F7, + 6026: 0x7504, + 6027: 0x7503, + 6028: 0x7505, + 6029: 0x750C, + 6030: 0x750E, + 6031: 0x750D, + 6032: 0x7515, + 6033: 0x7513, + 6034: 0x751E, + 6035: 0x7526, + 6036: 0x752C, + 6037: 0x753C, + 6038: 0x7544, + 6039: 0x754D, + 6040: 0x754A, + 6041: 0x7549, + 6042: 0x755B, + 6043: 0x7546, + 6044: 0x755A, + 6045: 0x7569, + 6046: 0x7564, + 6047: 0x7567, + 6048: 0x756B, + 6049: 0x756D, + 6050: 0x7578, + 6051: 0x7576, + 6052: 0x7586, + 6053: 0x7587, + 6054: 0x7574, + 6055: 0x758A, + 6056: 0x7589, + 6057: 0x7582, + 6058: 0x7594, + 6059: 0x759A, + 6060: 0x759D, + 6061: 0x75A5, + 6062: 0x75A3, + 6063: 0x75C2, + 6064: 0x75B3, + 6065: 0x75C3, + 6066: 0x75B5, + 6067: 0x75BD, + 6068: 0x75B8, + 6069: 0x75BC, + 6070: 0x75B1, + 6071: 0x75CD, + 6072: 0x75CA, + 6073: 0x75D2, + 6074: 0x75D9, + 6075: 0x75E3, + 6076: 0x75DE, + 6077: 0x75FE, + 6078: 0x75FF, + 6079: 0x75FC, + 6080: 0x7601, + 6081: 0x75F0, + 6082: 0x75FA, + 6083: 0x75F2, + 6084: 0x75F3, + 6085: 0x760B, + 6086: 0x760D, + 6087: 0x7609, + 6088: 0x761F, + 6089: 0x7627, + 6090: 0x7620, + 6091: 0x7621, + 6092: 0x7622, + 6093: 0x7624, + 6094: 0x7634, + 6095: 0x7630, + 6096: 0x763B, + 6097: 0x7647, + 6098: 0x7648, + 6099: 0x7646, + 6100: 0x765C, + 6101: 0x7658, + 6102: 0x7661, + 6103: 0x7662, + 6104: 0x7668, + 6105: 0x7669, + 6106: 0x766A, + 6107: 0x7667, + 6108: 0x766C, + 6109: 0x7670, + 6110: 0x7672, + 6111: 0x7676, + 6112: 0x7678, + 6113: 0x767C, + 6114: 0x7680, + 6115: 0x7683, + 6116: 0x7688, + 6117: 0x768B, + 6118: 0x768E, + 6119: 0x7696, + 6120: 0x7693, + 6121: 0x7699, + 6122: 0x769A, + 6123: 0x76B0, + 6124: 0x76B4, + 6125: 0x76B8, + 6126: 0x76B9, + 6127: 0x76BA, + 6128: 0x76C2, + 6129: 0x76CD, + 6130: 0x76D6, + 6131: 0x76D2, + 6132: 0x76DE, + 6133: 0x76E1, + 6134: 0x76E5, + 6135: 0x76E7, + 6136: 0x76EA, + 6137: 0x862F, + 6138: 0x76FB, + 6139: 0x7708, + 6140: 0x7707, + 6141: 0x7704, + 6142: 0x7729, + 6143: 0x7724, + 6144: 0x771E, + 6145: 0x7725, + 6146: 0x7726, + 6147: 0x771B, + 6148: 0x7737, + 6149: 0x7738, + 6150: 0x7747, + 6151: 0x775A, + 6152: 0x7768, + 6153: 0x776B, + 6154: 0x775B, + 6155: 0x7765, + 6156: 0x777F, + 6157: 0x777E, + 6158: 0x7779, + 6159: 0x778E, + 6160: 0x778B, + 6161: 0x7791, + 6162: 0x77A0, + 6163: 0x779E, + 6164: 0x77B0, + 6165: 0x77B6, + 6166: 0x77B9, + 6167: 0x77BF, + 6168: 0x77BC, + 6169: 0x77BD, + 6170: 0x77BB, + 6171: 0x77C7, + 6172: 0x77CD, + 6173: 0x77D7, + 6174: 0x77DA, + 6175: 0x77DC, + 6176: 0x77E3, + 6177: 0x77EE, + 6178: 0x77FC, + 6179: 0x780C, + 6180: 0x7812, + 6181: 0x7926, + 6182: 0x7820, + 6183: 0x792A, + 6184: 0x7845, + 6185: 0x788E, + 6186: 0x7874, + 6187: 0x7886, + 6188: 0x787C, + 6189: 0x789A, + 6190: 0x788C, + 6191: 0x78A3, + 6192: 0x78B5, + 6193: 0x78AA, + 6194: 0x78AF, + 6195: 0x78D1, + 6196: 0x78C6, + 6197: 0x78CB, + 6198: 0x78D4, + 6199: 0x78BE, + 6200: 0x78BC, + 6201: 0x78C5, + 6202: 0x78CA, + 6203: 0x78EC, + 6204: 0x78E7, + 6205: 0x78DA, + 6206: 0x78FD, + 6207: 0x78F4, + 6208: 0x7907, + 6209: 0x7912, + 6210: 0x7911, + 6211: 0x7919, + 6212: 0x792C, + 6213: 0x792B, + 6214: 0x7940, + 6215: 0x7960, + 6216: 0x7957, + 6217: 0x795F, + 6218: 0x795A, + 6219: 0x7955, + 6220: 0x7953, + 6221: 0x797A, + 6222: 0x797F, + 6223: 0x798A, + 6224: 0x799D, + 6225: 0x79A7, + 6226: 0x9F4B, + 6227: 0x79AA, + 6228: 0x79AE, + 6229: 0x79B3, + 6230: 0x79B9, + 6231: 0x79BA, + 6232: 0x79C9, + 6233: 0x79D5, + 6234: 0x79E7, + 6235: 0x79EC, + 6236: 0x79E1, + 6237: 0x79E3, + 6238: 0x7A08, + 6239: 0x7A0D, + 6240: 0x7A18, + 6241: 0x7A19, + 6242: 0x7A20, + 6243: 0x7A1F, + 6244: 0x7980, + 6245: 0x7A31, + 6246: 0x7A3B, + 6247: 0x7A3E, + 6248: 0x7A37, + 6249: 0x7A43, + 6250: 0x7A57, + 6251: 0x7A49, + 6252: 0x7A61, + 6253: 0x7A62, + 6254: 0x7A69, + 6255: 0x9F9D, + 6256: 0x7A70, + 6257: 0x7A79, + 6258: 0x7A7D, + 6259: 0x7A88, + 6260: 0x7A97, + 6261: 0x7A95, + 6262: 0x7A98, + 6263: 0x7A96, + 6264: 0x7AA9, + 6265: 0x7AC8, + 6266: 0x7AB0, + 6267: 0x7AB6, + 6268: 0x7AC5, + 6269: 0x7AC4, + 6270: 0x7ABF, + 6271: 0x9083, + 6272: 0x7AC7, + 6273: 0x7ACA, + 6274: 0x7ACD, + 6275: 0x7ACF, + 6276: 0x7AD5, + 6277: 0x7AD3, + 6278: 0x7AD9, + 6279: 0x7ADA, + 6280: 0x7ADD, + 6281: 0x7AE1, + 6282: 0x7AE2, + 6283: 0x7AE6, + 6284: 0x7AED, + 6285: 0x7AF0, + 6286: 0x7B02, + 6287: 0x7B0F, + 6288: 0x7B0A, + 6289: 0x7B06, + 6290: 0x7B33, + 6291: 0x7B18, + 6292: 0x7B19, + 6293: 0x7B1E, + 6294: 0x7B35, + 6295: 0x7B28, + 6296: 0x7B36, + 6297: 0x7B50, + 6298: 0x7B7A, + 6299: 0x7B04, + 6300: 0x7B4D, + 6301: 0x7B0B, + 6302: 0x7B4C, + 6303: 0x7B45, + 6304: 0x7B75, + 6305: 0x7B65, + 6306: 0x7B74, + 6307: 0x7B67, + 6308: 0x7B70, + 6309: 0x7B71, + 6310: 0x7B6C, + 6311: 0x7B6E, + 6312: 0x7B9D, + 6313: 0x7B98, + 6314: 0x7B9F, + 6315: 0x7B8D, + 6316: 0x7B9C, + 6317: 0x7B9A, + 6318: 0x7B8B, + 6319: 0x7B92, + 6320: 0x7B8F, + 6321: 0x7B5D, + 6322: 0x7B99, + 6323: 0x7BCB, + 6324: 0x7BC1, + 6325: 0x7BCC, + 6326: 0x7BCF, + 6327: 0x7BB4, + 6328: 0x7BC6, + 6329: 0x7BDD, + 6330: 0x7BE9, + 6331: 0x7C11, + 6332: 0x7C14, + 6333: 0x7BE6, + 6334: 0x7BE5, + 6335: 0x7C60, + 6336: 0x7C00, + 6337: 0x7C07, + 6338: 0x7C13, + 6339: 0x7BF3, + 6340: 0x7BF7, + 6341: 0x7C17, + 6342: 0x7C0D, + 6343: 0x7BF6, + 6344: 0x7C23, + 6345: 0x7C27, + 6346: 0x7C2A, + 6347: 0x7C1F, + 6348: 0x7C37, + 6349: 0x7C2B, + 6350: 0x7C3D, + 6351: 0x7C4C, + 6352: 0x7C43, + 6353: 0x7C54, + 6354: 0x7C4F, + 6355: 0x7C40, + 6356: 0x7C50, + 6357: 0x7C58, + 6358: 0x7C5F, + 6359: 0x7C64, + 6360: 0x7C56, + 6361: 0x7C65, + 6362: 0x7C6C, + 6363: 0x7C75, + 6364: 0x7C83, + 6365: 0x7C90, + 6366: 0x7CA4, + 6367: 0x7CAD, + 6368: 0x7CA2, + 6369: 0x7CAB, + 6370: 0x7CA1, + 6371: 0x7CA8, + 6372: 0x7CB3, + 6373: 0x7CB2, + 6374: 0x7CB1, + 6375: 0x7CAE, + 6376: 0x7CB9, + 6377: 0x7CBD, + 6378: 0x7CC0, + 6379: 0x7CC5, + 6380: 0x7CC2, + 6381: 0x7CD8, + 6382: 0x7CD2, + 6383: 0x7CDC, + 6384: 0x7CE2, + 6385: 0x9B3B, + 6386: 0x7CEF, + 6387: 0x7CF2, + 6388: 0x7CF4, + 6389: 0x7CF6, + 6390: 0x7CFA, + 6391: 0x7D06, + 6392: 0x7D02, + 6393: 0x7D1C, + 6394: 0x7D15, + 6395: 0x7D0A, + 6396: 0x7D45, + 6397: 0x7D4B, + 6398: 0x7D2E, + 6399: 0x7D32, + 6400: 0x7D3F, + 6401: 0x7D35, + 6402: 0x7D46, + 6403: 0x7D73, + 6404: 0x7D56, + 6405: 0x7D4E, + 6406: 0x7D72, + 6407: 0x7D68, + 6408: 0x7D6E, + 6409: 0x7D4F, + 6410: 0x7D63, + 6411: 0x7D93, + 6412: 0x7D89, + 6413: 0x7D5B, + 6414: 0x7D8F, + 6415: 0x7D7D, + 6416: 0x7D9B, + 6417: 0x7DBA, + 6418: 0x7DAE, + 6419: 0x7DA3, + 6420: 0x7DB5, + 6421: 0x7DC7, + 6422: 0x7DBD, + 6423: 0x7DAB, + 6424: 0x7E3D, + 6425: 0x7DA2, + 6426: 0x7DAF, + 6427: 0x7DDC, + 6428: 0x7DB8, + 6429: 0x7D9F, + 6430: 0x7DB0, + 6431: 0x7DD8, + 6432: 0x7DDD, + 6433: 0x7DE4, + 6434: 0x7DDE, + 6435: 0x7DFB, + 6436: 0x7DF2, + 6437: 0x7DE1, + 6438: 0x7E05, + 6439: 0x7E0A, + 6440: 0x7E23, + 6441: 0x7E21, + 6442: 0x7E12, + 6443: 0x7E31, + 6444: 0x7E1F, + 6445: 0x7E09, + 6446: 0x7E0B, + 6447: 0x7E22, + 6448: 0x7E46, + 6449: 0x7E66, + 6450: 0x7E3B, + 6451: 0x7E35, + 6452: 0x7E39, + 6453: 0x7E43, + 6454: 0x7E37, + 6455: 0x7E32, + 6456: 0x7E3A, + 6457: 0x7E67, + 6458: 0x7E5D, + 6459: 0x7E56, + 6460: 0x7E5E, + 6461: 0x7E59, + 6462: 0x7E5A, + 6463: 0x7E79, + 6464: 0x7E6A, + 6465: 0x7E69, + 6466: 0x7E7C, + 6467: 0x7E7B, + 6468: 0x7E83, + 6469: 0x7DD5, + 6470: 0x7E7D, + 6471: 0x8FAE, + 6472: 0x7E7F, + 6473: 0x7E88, + 6474: 0x7E89, + 6475: 0x7E8C, + 6476: 0x7E92, + 6477: 0x7E90, + 6478: 0x7E93, + 6479: 0x7E94, + 6480: 0x7E96, + 6481: 0x7E8E, + 6482: 0x7E9B, + 6483: 0x7E9C, + 6484: 0x7F38, + 6485: 0x7F3A, + 6486: 0x7F45, + 6487: 0x7F4C, + 6488: 0x7F4D, + 6489: 0x7F4E, + 6490: 0x7F50, + 6491: 0x7F51, + 6492: 0x7F55, + 6493: 0x7F54, + 6494: 0x7F58, + 6495: 0x7F5F, + 6496: 0x7F60, + 6497: 0x7F68, + 6498: 0x7F69, + 6499: 0x7F67, + 6500: 0x7F78, + 6501: 0x7F82, + 6502: 0x7F86, + 6503: 0x7F83, + 6504: 0x7F88, + 6505: 0x7F87, + 6506: 0x7F8C, + 6507: 0x7F94, + 6508: 0x7F9E, + 6509: 0x7F9D, + 6510: 0x7F9A, + 6511: 0x7FA3, + 6512: 0x7FAF, + 6513: 0x7FB2, + 6514: 0x7FB9, + 6515: 0x7FAE, + 6516: 0x7FB6, + 6517: 0x7FB8, + 6518: 0x8B71, + 6519: 0x7FC5, + 6520: 0x7FC6, + 6521: 0x7FCA, + 6522: 0x7FD5, + 6523: 0x7FD4, + 6524: 0x7FE1, + 6525: 0x7FE6, + 6526: 0x7FE9, + 6527: 0x7FF3, + 6528: 0x7FF9, + 6529: 0x98DC, + 6530: 0x8006, + 6531: 0x8004, + 6532: 0x800B, + 6533: 0x8012, + 6534: 0x8018, + 6535: 0x8019, + 6536: 0x801C, + 6537: 0x8021, + 6538: 0x8028, + 6539: 0x803F, + 6540: 0x803B, + 6541: 0x804A, + 6542: 0x8046, + 6543: 0x8052, + 6544: 0x8058, + 6545: 0x805A, + 6546: 0x805F, + 6547: 0x8062, + 6548: 0x8068, + 6549: 0x8073, + 6550: 0x8072, + 6551: 0x8070, + 6552: 0x8076, + 6553: 0x8079, + 6554: 0x807D, + 6555: 0x807F, + 6556: 0x8084, + 6557: 0x8086, + 6558: 0x8085, + 6559: 0x809B, + 6560: 0x8093, + 6561: 0x809A, + 6562: 0x80AD, + 6563: 0x5190, + 6564: 0x80AC, + 6565: 0x80DB, + 6566: 0x80E5, + 6567: 0x80D9, + 6568: 0x80DD, + 6569: 0x80C4, + 6570: 0x80DA, + 6571: 0x80D6, + 6572: 0x8109, + 6573: 0x80EF, + 6574: 0x80F1, + 6575: 0x811B, + 6576: 0x8129, + 6577: 0x8123, + 6578: 0x812F, + 6579: 0x814B, + 6580: 0x968B, + 6581: 0x8146, + 6582: 0x813E, + 6583: 0x8153, + 6584: 0x8151, + 6585: 0x80FC, + 6586: 0x8171, + 6587: 0x816E, + 6588: 0x8165, + 6589: 0x8166, + 6590: 0x8174, + 6591: 0x8183, + 6592: 0x8188, + 6593: 0x818A, + 6594: 0x8180, + 6595: 0x8182, + 6596: 0x81A0, + 6597: 0x8195, + 6598: 0x81A4, + 6599: 0x81A3, + 6600: 0x815F, + 6601: 0x8193, + 6602: 0x81A9, + 6603: 0x81B0, + 6604: 0x81B5, + 6605: 0x81BE, + 6606: 0x81B8, + 6607: 0x81BD, + 6608: 0x81C0, + 6609: 0x81C2, + 6610: 0x81BA, + 6611: 0x81C9, + 6612: 0x81CD, + 6613: 0x81D1, + 6614: 0x81D9, + 6615: 0x81D8, + 6616: 0x81C8, + 6617: 0x81DA, + 6618: 0x81DF, + 6619: 0x81E0, + 6620: 0x81E7, + 6621: 0x81FA, + 6622: 0x81FB, + 6623: 0x81FE, + 6624: 0x8201, + 6625: 0x8202, + 6626: 0x8205, + 6627: 0x8207, + 6628: 0x820A, + 6629: 0x820D, + 6630: 0x8210, + 6631: 0x8216, + 6632: 0x8229, + 6633: 0x822B, + 6634: 0x8238, + 6635: 0x8233, + 6636: 0x8240, + 6637: 0x8259, + 6638: 0x8258, + 6639: 0x825D, + 6640: 0x825A, + 6641: 0x825F, + 6642: 0x8264, + 6643: 0x8262, + 6644: 0x8268, + 6645: 0x826A, + 6646: 0x826B, + 6647: 0x822E, + 6648: 0x8271, + 6649: 0x8277, + 6650: 0x8278, + 6651: 0x827E, + 6652: 0x828D, + 6653: 0x8292, + 6654: 0x82AB, + 6655: 0x829F, + 6656: 0x82BB, + 6657: 0x82AC, + 6658: 0x82E1, + 6659: 0x82E3, + 6660: 0x82DF, + 6661: 0x82D2, + 6662: 0x82F4, + 6663: 0x82F3, + 6664: 0x82FA, + 6665: 0x8393, + 6666: 0x8303, + 6667: 0x82FB, + 6668: 0x82F9, + 6669: 0x82DE, + 6670: 0x8306, + 6671: 0x82DC, + 6672: 0x8309, + 6673: 0x82D9, + 6674: 0x8335, + 6675: 0x8334, + 6676: 0x8316, + 6677: 0x8332, + 6678: 0x8331, + 6679: 0x8340, + 6680: 0x8339, + 6681: 0x8350, + 6682: 0x8345, + 6683: 0x832F, + 6684: 0x832B, + 6685: 0x8317, + 6686: 0x8318, + 6687: 0x8385, + 6688: 0x839A, + 6689: 0x83AA, + 6690: 0x839F, + 6691: 0x83A2, + 6692: 0x8396, + 6693: 0x8323, + 6694: 0x838E, + 6695: 0x8387, + 6696: 0x838A, + 6697: 0x837C, + 6698: 0x83B5, + 6699: 0x8373, + 6700: 0x8375, + 6701: 0x83A0, + 6702: 0x8389, + 6703: 0x83A8, + 6704: 0x83F4, + 6705: 0x8413, + 6706: 0x83EB, + 6707: 0x83CE, + 6708: 0x83FD, + 6709: 0x8403, + 6710: 0x83D8, + 6711: 0x840B, + 6712: 0x83C1, + 6713: 0x83F7, + 6714: 0x8407, + 6715: 0x83E0, + 6716: 0x83F2, + 6717: 0x840D, + 6718: 0x8422, + 6719: 0x8420, + 6720: 0x83BD, + 6721: 0x8438, + 6722: 0x8506, + 6723: 0x83FB, + 6724: 0x846D, + 6725: 0x842A, + 6726: 0x843C, + 6727: 0x855A, + 6728: 0x8484, + 6729: 0x8477, + 6730: 0x846B, + 6731: 0x84AD, + 6732: 0x846E, + 6733: 0x8482, + 6734: 0x8469, + 6735: 0x8446, + 6736: 0x842C, + 6737: 0x846F, + 6738: 0x8479, + 6739: 0x8435, + 6740: 0x84CA, + 6741: 0x8462, + 6742: 0x84B9, + 6743: 0x84BF, + 6744: 0x849F, + 6745: 0x84D9, + 6746: 0x84CD, + 6747: 0x84BB, + 6748: 0x84DA, + 6749: 0x84D0, + 6750: 0x84C1, + 6751: 0x84C6, + 6752: 0x84D6, + 6753: 0x84A1, + 6754: 0x8521, + 6755: 0x84FF, + 6756: 0x84F4, + 6757: 0x8517, + 6758: 0x8518, + 6759: 0x852C, + 6760: 0x851F, + 6761: 0x8515, + 6762: 0x8514, + 6763: 0x84FC, + 6764: 0x8540, + 6765: 0x8563, + 6766: 0x8558, + 6767: 0x8548, + 6768: 0x8541, + 6769: 0x8602, + 6770: 0x854B, + 6771: 0x8555, + 6772: 0x8580, + 6773: 0x85A4, + 6774: 0x8588, + 6775: 0x8591, + 6776: 0x858A, + 6777: 0x85A8, + 6778: 0x856D, + 6779: 0x8594, + 6780: 0x859B, + 6781: 0x85EA, + 6782: 0x8587, + 6783: 0x859C, + 6784: 0x8577, + 6785: 0x857E, + 6786: 0x8590, + 6787: 0x85C9, + 6788: 0x85BA, + 6789: 0x85CF, + 6790: 0x85B9, + 6791: 0x85D0, + 6792: 0x85D5, + 6793: 0x85DD, + 6794: 0x85E5, + 6795: 0x85DC, + 6796: 0x85F9, + 6797: 0x860A, + 6798: 0x8613, + 6799: 0x860B, + 6800: 0x85FE, + 6801: 0x85FA, + 6802: 0x8606, + 6803: 0x8622, + 6804: 0x861A, + 6805: 0x8630, + 6806: 0x863F, + 6807: 0x864D, + 6808: 0x4E55, + 6809: 0x8654, + 6810: 0x865F, + 6811: 0x8667, + 6812: 0x8671, + 6813: 0x8693, + 6814: 0x86A3, + 6815: 0x86A9, + 6816: 0x86AA, + 6817: 0x868B, + 6818: 0x868C, + 6819: 0x86B6, + 6820: 0x86AF, + 6821: 0x86C4, + 6822: 0x86C6, + 6823: 0x86B0, + 6824: 0x86C9, + 6825: 0x8823, + 6826: 0x86AB, + 6827: 0x86D4, + 6828: 0x86DE, + 6829: 0x86E9, + 6830: 0x86EC, + 6831: 0x86DF, + 6832: 0x86DB, + 6833: 0x86EF, + 6834: 0x8712, + 6835: 0x8706, + 6836: 0x8708, + 6837: 0x8700, + 6838: 0x8703, + 6839: 0x86FB, + 6840: 0x8711, + 6841: 0x8709, + 6842: 0x870D, + 6843: 0x86F9, + 6844: 0x870A, + 6845: 0x8734, + 6846: 0x873F, + 6847: 0x8737, + 6848: 0x873B, + 6849: 0x8725, + 6850: 0x8729, + 6851: 0x871A, + 6852: 0x8760, + 6853: 0x875F, + 6854: 0x8778, + 6855: 0x874C, + 6856: 0x874E, + 6857: 0x8774, + 6858: 0x8757, + 6859: 0x8768, + 6860: 0x876E, + 6861: 0x8759, + 6862: 0x8753, + 6863: 0x8763, + 6864: 0x876A, + 6865: 0x8805, + 6866: 0x87A2, + 6867: 0x879F, + 6868: 0x8782, + 6869: 0x87AF, + 6870: 0x87CB, + 6871: 0x87BD, + 6872: 0x87C0, + 6873: 0x87D0, + 6874: 0x96D6, + 6875: 0x87AB, + 6876: 0x87C4, + 6877: 0x87B3, + 6878: 0x87C7, + 6879: 0x87C6, + 6880: 0x87BB, + 6881: 0x87EF, + 6882: 0x87F2, + 6883: 0x87E0, + 6884: 0x880F, + 6885: 0x880D, + 6886: 0x87FE, + 6887: 0x87F6, + 6888: 0x87F7, + 6889: 0x880E, + 6890: 0x87D2, + 6891: 0x8811, + 6892: 0x8816, + 6893: 0x8815, + 6894: 0x8822, + 6895: 0x8821, + 6896: 0x8831, + 6897: 0x8836, + 6898: 0x8839, + 6899: 0x8827, + 6900: 0x883B, + 6901: 0x8844, + 6902: 0x8842, + 6903: 0x8852, + 6904: 0x8859, + 6905: 0x885E, + 6906: 0x8862, + 6907: 0x886B, + 6908: 0x8881, + 6909: 0x887E, + 6910: 0x889E, + 6911: 0x8875, + 6912: 0x887D, + 6913: 0x88B5, + 6914: 0x8872, + 6915: 0x8882, + 6916: 0x8897, + 6917: 0x8892, + 6918: 0x88AE, + 6919: 0x8899, + 6920: 0x88A2, + 6921: 0x888D, + 6922: 0x88A4, + 6923: 0x88B0, + 6924: 0x88BF, + 6925: 0x88B1, + 6926: 0x88C3, + 6927: 0x88C4, + 6928: 0x88D4, + 6929: 0x88D8, + 6930: 0x88D9, + 6931: 0x88DD, + 6932: 0x88F9, + 6933: 0x8902, + 6934: 0x88FC, + 6935: 0x88F4, + 6936: 0x88E8, + 6937: 0x88F2, + 6938: 0x8904, + 6939: 0x890C, + 6940: 0x890A, + 6941: 0x8913, + 6942: 0x8943, + 6943: 0x891E, + 6944: 0x8925, + 6945: 0x892A, + 6946: 0x892B, + 6947: 0x8941, + 6948: 0x8944, + 6949: 0x893B, + 6950: 0x8936, + 6951: 0x8938, + 6952: 0x894C, + 6953: 0x891D, + 6954: 0x8960, + 6955: 0x895E, + 6956: 0x8966, + 6957: 0x8964, + 6958: 0x896D, + 6959: 0x896A, + 6960: 0x896F, + 6961: 0x8974, + 6962: 0x8977, + 6963: 0x897E, + 6964: 0x8983, + 6965: 0x8988, + 6966: 0x898A, + 6967: 0x8993, + 6968: 0x8998, + 6969: 0x89A1, + 6970: 0x89A9, + 6971: 0x89A6, + 6972: 0x89AC, + 6973: 0x89AF, + 6974: 0x89B2, + 6975: 0x89BA, + 6976: 0x89BD, + 6977: 0x89BF, + 6978: 0x89C0, + 6979: 0x89DA, + 6980: 0x89DC, + 6981: 0x89DD, + 6982: 0x89E7, + 6983: 0x89F4, + 6984: 0x89F8, + 6985: 0x8A03, + 6986: 0x8A16, + 6987: 0x8A10, + 6988: 0x8A0C, + 6989: 0x8A1B, + 6990: 0x8A1D, + 6991: 0x8A25, + 6992: 0x8A36, + 6993: 0x8A41, + 6994: 0x8A5B, + 6995: 0x8A52, + 6996: 0x8A46, + 6997: 0x8A48, + 6998: 0x8A7C, + 6999: 0x8A6D, + 7000: 0x8A6C, + 7001: 0x8A62, + 7002: 0x8A85, + 7003: 0x8A82, + 7004: 0x8A84, + 7005: 0x8AA8, + 7006: 0x8AA1, + 7007: 0x8A91, + 7008: 0x8AA5, + 7009: 0x8AA6, + 7010: 0x8A9A, + 7011: 0x8AA3, + 7012: 0x8AC4, + 7013: 0x8ACD, + 7014: 0x8AC2, + 7015: 0x8ADA, + 7016: 0x8AEB, + 7017: 0x8AF3, + 7018: 0x8AE7, + 7019: 0x8AE4, + 7020: 0x8AF1, + 7021: 0x8B14, + 7022: 0x8AE0, + 7023: 0x8AE2, + 7024: 0x8AF7, + 7025: 0x8ADE, + 7026: 0x8ADB, + 7027: 0x8B0C, + 7028: 0x8B07, + 7029: 0x8B1A, + 7030: 0x8AE1, + 7031: 0x8B16, + 7032: 0x8B10, + 7033: 0x8B17, + 7034: 0x8B20, + 7035: 0x8B33, + 7036: 0x97AB, + 7037: 0x8B26, + 7038: 0x8B2B, + 7039: 0x8B3E, + 7040: 0x8B28, + 7041: 0x8B41, + 7042: 0x8B4C, + 7043: 0x8B4F, + 7044: 0x8B4E, + 7045: 0x8B49, + 7046: 0x8B56, + 7047: 0x8B5B, + 7048: 0x8B5A, + 7049: 0x8B6B, + 7050: 0x8B5F, + 7051: 0x8B6C, + 7052: 0x8B6F, + 7053: 0x8B74, + 7054: 0x8B7D, + 7055: 0x8B80, + 7056: 0x8B8C, + 7057: 0x8B8E, + 7058: 0x8B92, + 7059: 0x8B93, + 7060: 0x8B96, + 7061: 0x8B99, + 7062: 0x8B9A, + 7063: 0x8C3A, + 7064: 0x8C41, + 7065: 0x8C3F, + 7066: 0x8C48, + 7067: 0x8C4C, + 7068: 0x8C4E, + 7069: 0x8C50, + 7070: 0x8C55, + 7071: 0x8C62, + 7072: 0x8C6C, + 7073: 0x8C78, + 7074: 0x8C7A, + 7075: 0x8C82, + 7076: 0x8C89, + 7077: 0x8C85, + 7078: 0x8C8A, + 7079: 0x8C8D, + 7080: 0x8C8E, + 7081: 0x8C94, + 7082: 0x8C7C, + 7083: 0x8C98, + 7084: 0x621D, + 7085: 0x8CAD, + 7086: 0x8CAA, + 7087: 0x8CBD, + 7088: 0x8CB2, + 7089: 0x8CB3, + 7090: 0x8CAE, + 7091: 0x8CB6, + 7092: 0x8CC8, + 7093: 0x8CC1, + 7094: 0x8CE4, + 7095: 0x8CE3, + 7096: 0x8CDA, + 7097: 0x8CFD, + 7098: 0x8CFA, + 7099: 0x8CFB, + 7100: 0x8D04, + 7101: 0x8D05, + 7102: 0x8D0A, + 7103: 0x8D07, + 7104: 0x8D0F, + 7105: 0x8D0D, + 7106: 0x8D10, + 7107: 0x9F4E, + 7108: 0x8D13, + 7109: 0x8CCD, + 7110: 0x8D14, + 7111: 0x8D16, + 7112: 0x8D67, + 7113: 0x8D6D, + 7114: 0x8D71, + 7115: 0x8D73, + 7116: 0x8D81, + 7117: 0x8D99, + 7118: 0x8DC2, + 7119: 0x8DBE, + 7120: 0x8DBA, + 7121: 0x8DCF, + 7122: 0x8DDA, + 7123: 0x8DD6, + 7124: 0x8DCC, + 7125: 0x8DDB, + 7126: 0x8DCB, + 7127: 0x8DEA, + 7128: 0x8DEB, + 7129: 0x8DDF, + 7130: 0x8DE3, + 7131: 0x8DFC, + 7132: 0x8E08, + 7133: 0x8E09, + 7134: 0x8DFF, + 7135: 0x8E1D, + 7136: 0x8E1E, + 7137: 0x8E10, + 7138: 0x8E1F, + 7139: 0x8E42, + 7140: 0x8E35, + 7141: 0x8E30, + 7142: 0x8E34, + 7143: 0x8E4A, + 7144: 0x8E47, + 7145: 0x8E49, + 7146: 0x8E4C, + 7147: 0x8E50, + 7148: 0x8E48, + 7149: 0x8E59, + 7150: 0x8E64, + 7151: 0x8E60, + 7152: 0x8E2A, + 7153: 0x8E63, + 7154: 0x8E55, + 7155: 0x8E76, + 7156: 0x8E72, + 7157: 0x8E7C, + 7158: 0x8E81, + 7159: 0x8E87, + 7160: 0x8E85, + 7161: 0x8E84, + 7162: 0x8E8B, + 7163: 0x8E8A, + 7164: 0x8E93, + 7165: 0x8E91, + 7166: 0x8E94, + 7167: 0x8E99, + 7168: 0x8EAA, + 7169: 0x8EA1, + 7170: 0x8EAC, + 7171: 0x8EB0, + 7172: 0x8EC6, + 7173: 0x8EB1, + 7174: 0x8EBE, + 7175: 0x8EC5, + 7176: 0x8EC8, + 7177: 0x8ECB, + 7178: 0x8EDB, + 7179: 0x8EE3, + 7180: 0x8EFC, + 7181: 0x8EFB, + 7182: 0x8EEB, + 7183: 0x8EFE, + 7184: 0x8F0A, + 7185: 0x8F05, + 7186: 0x8F15, + 7187: 0x8F12, + 7188: 0x8F19, + 7189: 0x8F13, + 7190: 0x8F1C, + 7191: 0x8F1F, + 7192: 0x8F1B, + 7193: 0x8F0C, + 7194: 0x8F26, + 7195: 0x8F33, + 7196: 0x8F3B, + 7197: 0x8F39, + 7198: 0x8F45, + 7199: 0x8F42, + 7200: 0x8F3E, + 7201: 0x8F4C, + 7202: 0x8F49, + 7203: 0x8F46, + 7204: 0x8F4E, + 7205: 0x8F57, + 7206: 0x8F5C, + 7207: 0x8F62, + 7208: 0x8F63, + 7209: 0x8F64, + 7210: 0x8F9C, + 7211: 0x8F9F, + 7212: 0x8FA3, + 7213: 0x8FAD, + 7214: 0x8FAF, + 7215: 0x8FB7, + 7216: 0x8FDA, + 7217: 0x8FE5, + 7218: 0x8FE2, + 7219: 0x8FEA, + 7220: 0x8FEF, + 7221: 0x9087, + 7222: 0x8FF4, + 7223: 0x9005, + 7224: 0x8FF9, + 7225: 0x8FFA, + 7226: 0x9011, + 7227: 0x9015, + 7228: 0x9021, + 7229: 0x900D, + 7230: 0x901E, + 7231: 0x9016, + 7232: 0x900B, + 7233: 0x9027, + 7234: 0x9036, + 7235: 0x9035, + 7236: 0x9039, + 7237: 0x8FF8, + 7238: 0x904F, + 7239: 0x9050, + 7240: 0x9051, + 7241: 0x9052, + 7242: 0x900E, + 7243: 0x9049, + 7244: 0x903E, + 7245: 0x9056, + 7246: 0x9058, + 7247: 0x905E, + 7248: 0x9068, + 7249: 0x906F, + 7250: 0x9076, + 7251: 0x96A8, + 7252: 0x9072, + 7253: 0x9082, + 7254: 0x907D, + 7255: 0x9081, + 7256: 0x9080, + 7257: 0x908A, + 7258: 0x9089, + 7259: 0x908F, + 7260: 0x90A8, + 7261: 0x90AF, + 7262: 0x90B1, + 7263: 0x90B5, + 7264: 0x90E2, + 7265: 0x90E4, + 7266: 0x6248, + 7267: 0x90DB, + 7268: 0x9102, + 7269: 0x9112, + 7270: 0x9119, + 7271: 0x9132, + 7272: 0x9130, + 7273: 0x914A, + 7274: 0x9156, + 7275: 0x9158, + 7276: 0x9163, + 7277: 0x9165, + 7278: 0x9169, + 7279: 0x9173, + 7280: 0x9172, + 7281: 0x918B, + 7282: 0x9189, + 7283: 0x9182, + 7284: 0x91A2, + 7285: 0x91AB, + 7286: 0x91AF, + 7287: 0x91AA, + 7288: 0x91B5, + 7289: 0x91B4, + 7290: 0x91BA, + 7291: 0x91C0, + 7292: 0x91C1, + 7293: 0x91C9, + 7294: 0x91CB, + 7295: 0x91D0, + 7296: 0x91D6, + 7297: 0x91DF, + 7298: 0x91E1, + 7299: 0x91DB, + 7300: 0x91FC, + 7301: 0x91F5, + 7302: 0x91F6, + 7303: 0x921E, + 7304: 0x91FF, + 7305: 0x9214, + 7306: 0x922C, + 7307: 0x9215, + 7308: 0x9211, + 7309: 0x925E, + 7310: 0x9257, + 7311: 0x9245, + 7312: 0x9249, + 7313: 0x9264, + 7314: 0x9248, + 7315: 0x9295, + 7316: 0x923F, + 7317: 0x924B, + 7318: 0x9250, + 7319: 0x929C, + 7320: 0x9296, + 7321: 0x9293, + 7322: 0x929B, + 7323: 0x925A, + 7324: 0x92CF, + 7325: 0x92B9, + 7326: 0x92B7, + 7327: 0x92E9, + 7328: 0x930F, + 7329: 0x92FA, + 7330: 0x9344, + 7331: 0x932E, + 7332: 0x9319, + 7333: 0x9322, + 7334: 0x931A, + 7335: 0x9323, + 7336: 0x933A, + 7337: 0x9335, + 7338: 0x933B, + 7339: 0x935C, + 7340: 0x9360, + 7341: 0x937C, + 7342: 0x936E, + 7343: 0x9356, + 7344: 0x93B0, + 7345: 0x93AC, + 7346: 0x93AD, + 7347: 0x9394, + 7348: 0x93B9, + 7349: 0x93D6, + 7350: 0x93D7, + 7351: 0x93E8, + 7352: 0x93E5, + 7353: 0x93D8, + 7354: 0x93C3, + 7355: 0x93DD, + 7356: 0x93D0, + 7357: 0x93C8, + 7358: 0x93E4, + 7359: 0x941A, + 7360: 0x9414, + 7361: 0x9413, + 7362: 0x9403, + 7363: 0x9407, + 7364: 0x9410, + 7365: 0x9436, + 7366: 0x942B, + 7367: 0x9435, + 7368: 0x9421, + 7369: 0x943A, + 7370: 0x9441, + 7371: 0x9452, + 7372: 0x9444, + 7373: 0x945B, + 7374: 0x9460, + 7375: 0x9462, + 7376: 0x945E, + 7377: 0x946A, + 7378: 0x9229, + 7379: 0x9470, + 7380: 0x9475, + 7381: 0x9477, + 7382: 0x947D, + 7383: 0x945A, + 7384: 0x947C, + 7385: 0x947E, + 7386: 0x9481, + 7387: 0x947F, + 7388: 0x9582, + 7389: 0x9587, + 7390: 0x958A, + 7391: 0x9594, + 7392: 0x9596, + 7393: 0x9598, + 7394: 0x9599, + 7395: 0x95A0, + 7396: 0x95A8, + 7397: 0x95A7, + 7398: 0x95AD, + 7399: 0x95BC, + 7400: 0x95BB, + 7401: 0x95B9, + 7402: 0x95BE, + 7403: 0x95CA, + 7404: 0x6FF6, + 7405: 0x95C3, + 7406: 0x95CD, + 7407: 0x95CC, + 7408: 0x95D5, + 7409: 0x95D4, + 7410: 0x95D6, + 7411: 0x95DC, + 7412: 0x95E1, + 7413: 0x95E5, + 7414: 0x95E2, + 7415: 0x9621, + 7416: 0x9628, + 7417: 0x962E, + 7418: 0x962F, + 7419: 0x9642, + 7420: 0x964C, + 7421: 0x964F, + 7422: 0x964B, + 7423: 0x9677, + 7424: 0x965C, + 7425: 0x965E, + 7426: 0x965D, + 7427: 0x965F, + 7428: 0x9666, + 7429: 0x9672, + 7430: 0x966C, + 7431: 0x968D, + 7432: 0x9698, + 7433: 0x9695, + 7434: 0x9697, + 7435: 0x96AA, + 7436: 0x96A7, + 7437: 0x96B1, + 7438: 0x96B2, + 7439: 0x96B0, + 7440: 0x96B4, + 7441: 0x96B6, + 7442: 0x96B8, + 7443: 0x96B9, + 7444: 0x96CE, + 7445: 0x96CB, + 7446: 0x96C9, + 7447: 0x96CD, + 7448: 0x894D, + 7449: 0x96DC, + 7450: 0x970D, + 7451: 0x96D5, + 7452: 0x96F9, + 7453: 0x9704, + 7454: 0x9706, + 7455: 0x9708, + 7456: 0x9713, + 7457: 0x970E, + 7458: 0x9711, + 7459: 0x970F, + 7460: 0x9716, + 7461: 0x9719, + 7462: 0x9724, + 7463: 0x972A, + 7464: 0x9730, + 7465: 0x9739, + 7466: 0x973D, + 7467: 0x973E, + 7468: 0x9744, + 7469: 0x9746, + 7470: 0x9748, + 7471: 0x9742, + 7472: 0x9749, + 7473: 0x975C, + 7474: 0x9760, + 7475: 0x9764, + 7476: 0x9766, + 7477: 0x9768, + 7478: 0x52D2, + 7479: 0x976B, + 7480: 0x9771, + 7481: 0x9779, + 7482: 0x9785, + 7483: 0x977C, + 7484: 0x9781, + 7485: 0x977A, + 7486: 0x9786, + 7487: 0x978B, + 7488: 0x978F, + 7489: 0x9790, + 7490: 0x979C, + 7491: 0x97A8, + 7492: 0x97A6, + 7493: 0x97A3, + 7494: 0x97B3, + 7495: 0x97B4, + 7496: 0x97C3, + 7497: 0x97C6, + 7498: 0x97C8, + 7499: 0x97CB, + 7500: 0x97DC, + 7501: 0x97ED, + 7502: 0x9F4F, + 7503: 0x97F2, + 7504: 0x7ADF, + 7505: 0x97F6, + 7506: 0x97F5, + 7507: 0x980F, + 7508: 0x980C, + 7509: 0x9838, + 7510: 0x9824, + 7511: 0x9821, + 7512: 0x9837, + 7513: 0x983D, + 7514: 0x9846, + 7515: 0x984F, + 7516: 0x984B, + 7517: 0x986B, + 7518: 0x986F, + 7519: 0x9870, + 7520: 0x9871, + 7521: 0x9874, + 7522: 0x9873, + 7523: 0x98AA, + 7524: 0x98AF, + 7525: 0x98B1, + 7526: 0x98B6, + 7527: 0x98C4, + 7528: 0x98C3, + 7529: 0x98C6, + 7530: 0x98E9, + 7531: 0x98EB, + 7532: 0x9903, + 7533: 0x9909, + 7534: 0x9912, + 7535: 0x9914, + 7536: 0x9918, + 7537: 0x9921, + 7538: 0x991D, + 7539: 0x991E, + 7540: 0x9924, + 7541: 0x9920, + 7542: 0x992C, + 7543: 0x992E, + 7544: 0x993D, + 7545: 0x993E, + 7546: 0x9942, + 7547: 0x9949, + 7548: 0x9945, + 7549: 0x9950, + 7550: 0x994B, + 7551: 0x9951, + 7552: 0x9952, + 7553: 0x994C, + 7554: 0x9955, + 7555: 0x9997, + 7556: 0x9998, + 7557: 0x99A5, + 7558: 0x99AD, + 7559: 0x99AE, + 7560: 0x99BC, + 7561: 0x99DF, + 7562: 0x99DB, + 7563: 0x99DD, + 7564: 0x99D8, + 7565: 0x99D1, + 7566: 0x99ED, + 7567: 0x99EE, + 7568: 0x99F1, + 7569: 0x99F2, + 7570: 0x99FB, + 7571: 0x99F8, + 7572: 0x9A01, + 7573: 0x9A0F, + 7574: 0x9A05, + 7575: 0x99E2, + 7576: 0x9A19, + 7577: 0x9A2B, + 7578: 0x9A37, + 7579: 0x9A45, + 7580: 0x9A42, + 7581: 0x9A40, + 7582: 0x9A43, + 7583: 0x9A3E, + 7584: 0x9A55, + 7585: 0x9A4D, + 7586: 0x9A5B, + 7587: 0x9A57, + 7588: 0x9A5F, + 7589: 0x9A62, + 7590: 0x9A65, + 7591: 0x9A64, + 7592: 0x9A69, + 7593: 0x9A6B, + 7594: 0x9A6A, + 7595: 0x9AAD, + 7596: 0x9AB0, + 7597: 0x9ABC, + 7598: 0x9AC0, + 7599: 0x9ACF, + 7600: 0x9AD1, + 7601: 0x9AD3, + 7602: 0x9AD4, + 7603: 0x9ADE, + 7604: 0x9ADF, + 7605: 0x9AE2, + 7606: 0x9AE3, + 7607: 0x9AE6, + 7608: 0x9AEF, + 7609: 0x9AEB, + 7610: 0x9AEE, + 7611: 0x9AF4, + 7612: 0x9AF1, + 7613: 0x9AF7, + 7614: 0x9AFB, + 7615: 0x9B06, + 7616: 0x9B18, + 7617: 0x9B1A, + 7618: 0x9B1F, + 7619: 0x9B22, + 7620: 0x9B23, + 7621: 0x9B25, + 7622: 0x9B27, + 7623: 0x9B28, + 7624: 0x9B29, + 7625: 0x9B2A, + 7626: 0x9B2E, + 7627: 0x9B2F, + 7628: 0x9B32, + 7629: 0x9B44, + 7630: 0x9B43, + 7631: 0x9B4F, + 7632: 0x9B4D, + 7633: 0x9B4E, + 7634: 0x9B51, + 7635: 0x9B58, + 7636: 0x9B74, + 7637: 0x9B93, + 7638: 0x9B83, + 7639: 0x9B91, + 7640: 0x9B96, + 7641: 0x9B97, + 7642: 0x9B9F, + 7643: 0x9BA0, + 7644: 0x9BA8, + 7645: 0x9BB4, + 7646: 0x9BC0, + 7647: 0x9BCA, + 7648: 0x9BB9, + 7649: 0x9BC6, + 7650: 0x9BCF, + 7651: 0x9BD1, + 7652: 0x9BD2, + 7653: 0x9BE3, + 7654: 0x9BE2, + 7655: 0x9BE4, + 7656: 0x9BD4, + 7657: 0x9BE1, + 7658: 0x9C3A, + 7659: 0x9BF2, + 7660: 0x9BF1, + 7661: 0x9BF0, + 7662: 0x9C15, + 7663: 0x9C14, + 7664: 0x9C09, + 7665: 0x9C13, + 7666: 0x9C0C, + 7667: 0x9C06, + 7668: 0x9C08, + 7669: 0x9C12, + 7670: 0x9C0A, + 7671: 0x9C04, + 7672: 0x9C2E, + 7673: 0x9C1B, + 7674: 0x9C25, + 7675: 0x9C24, + 7676: 0x9C21, + 7677: 0x9C30, + 7678: 0x9C47, + 7679: 0x9C32, + 7680: 0x9C46, + 7681: 0x9C3E, + 7682: 0x9C5A, + 7683: 0x9C60, + 7684: 0x9C67, + 7685: 0x9C76, + 7686: 0x9C78, + 7687: 0x9CE7, + 7688: 0x9CEC, + 7689: 0x9CF0, + 7690: 0x9D09, + 7691: 0x9D08, + 7692: 0x9CEB, + 7693: 0x9D03, + 7694: 0x9D06, + 7695: 0x9D2A, + 7696: 0x9D26, + 7697: 0x9DAF, + 7698: 0x9D23, + 7699: 0x9D1F, + 7700: 0x9D44, + 7701: 0x9D15, + 7702: 0x9D12, + 7703: 0x9D41, + 7704: 0x9D3F, + 7705: 0x9D3E, + 7706: 0x9D46, + 7707: 0x9D48, + 7708: 0x9D5D, + 7709: 0x9D5E, + 7710: 0x9D64, + 7711: 0x9D51, + 7712: 0x9D50, + 7713: 0x9D59, + 7714: 0x9D72, + 7715: 0x9D89, + 7716: 0x9D87, + 7717: 0x9DAB, + 7718: 0x9D6F, + 7719: 0x9D7A, + 7720: 0x9D9A, + 7721: 0x9DA4, + 7722: 0x9DA9, + 7723: 0x9DB2, + 7724: 0x9DC4, + 7725: 0x9DC1, + 7726: 0x9DBB, + 7727: 0x9DB8, + 7728: 0x9DBA, + 7729: 0x9DC6, + 7730: 0x9DCF, + 7731: 0x9DC2, + 7732: 0x9DD9, + 7733: 0x9DD3, + 7734: 0x9DF8, + 7735: 0x9DE6, + 7736: 0x9DED, + 7737: 0x9DEF, + 7738: 0x9DFD, + 7739: 0x9E1A, + 7740: 0x9E1B, + 7741: 0x9E1E, + 7742: 0x9E75, + 7743: 0x9E79, + 7744: 0x9E7D, + 7745: 0x9E81, + 7746: 0x9E88, + 7747: 0x9E8B, + 7748: 0x9E8C, + 7749: 0x9E92, + 7750: 0x9E95, + 7751: 0x9E91, + 7752: 0x9E9D, + 7753: 0x9EA5, + 7754: 0x9EA9, + 7755: 0x9EB8, + 7756: 0x9EAA, + 7757: 0x9EAD, + 7758: 0x9761, + 7759: 0x9ECC, + 7760: 0x9ECE, + 7761: 0x9ECF, + 7762: 0x9ED0, + 7763: 0x9ED4, + 7764: 0x9EDC, + 7765: 0x9EDE, + 7766: 0x9EDD, + 7767: 0x9EE0, + 7768: 0x9EE5, + 7769: 0x9EE8, + 7770: 0x9EEF, + 7771: 0x9EF4, + 7772: 0x9EF6, + 7773: 0x9EF7, + 7774: 0x9EF9, + 7775: 0x9EFB, + 7776: 0x9EFC, + 7777: 0x9EFD, + 7778: 0x9F07, + 7779: 0x9F08, + 7780: 0x76B7, + 7781: 0x9F15, + 7782: 0x9F21, + 7783: 0x9F2C, + 7784: 0x9F3E, + 7785: 0x9F4A, + 7786: 0x9F52, + 7787: 0x9F54, + 7788: 0x9F63, + 7789: 0x9F5F, + 7790: 0x9F60, + 7791: 0x9F61, + 7792: 0x9F66, + 7793: 0x9F67, + 7794: 0x9F6C, + 7795: 0x9F6A, + 7796: 0x9F77, + 7797: 0x9F72, + 7798: 0x9F76, + 7799: 0x9F95, + 7800: 0x9F9C, + 7801: 0x9FA0, + 7802: 0x582F, + 7803: 0x69C7, + 7804: 0x9059, + 7805: 0x7464, + 7806: 0x51DC, + 7807: 0x7199, + 8272: 0x7E8A, + 8273: 0x891C, + 8274: 0x9348, + 8275: 0x9288, + 8276: 0x84DC, + 8277: 0x4FC9, + 8278: 0x70BB, + 8279: 0x6631, + 8280: 0x68C8, + 8281: 0x92F9, + 8282: 0x66FB, + 8283: 0x5F45, + 8284: 0x4E28, + 8285: 0x4EE1, + 8286: 0x4EFC, + 8287: 0x4F00, + 8288: 0x4F03, + 8289: 0x4F39, + 8290: 0x4F56, + 8291: 0x4F92, + 8292: 0x4F8A, + 8293: 0x4F9A, + 8294: 0x4F94, + 8295: 0x4FCD, + 8296: 0x5040, + 8297: 0x5022, + 8298: 0x4FFF, + 8299: 0x501E, + 8300: 0x5046, + 8301: 0x5070, + 8302: 0x5042, + 8303: 0x5094, + 8304: 0x50F4, + 8305: 0x50D8, + 8306: 0x514A, + 8307: 0x5164, + 8308: 0x519D, + 8309: 0x51BE, + 8310: 0x51EC, + 8311: 0x5215, + 8312: 0x529C, + 8313: 0x52A6, + 8314: 0x52C0, + 8315: 0x52DB, + 8316: 0x5300, + 8317: 0x5307, + 8318: 0x5324, + 8319: 0x5372, + 8320: 0x5393, + 8321: 0x53B2, + 8322: 0x53DD, + 8323: 0xFA0E, + 8324: 0x549C, + 8325: 0x548A, + 8326: 0x54A9, + 8327: 0x54FF, + 8328: 0x5586, + 8329: 0x5759, + 8330: 0x5765, + 8331: 0x57AC, + 8332: 0x57C8, + 8333: 0x57C7, + 8334: 0xFA0F, + 8335: 0xFA10, + 8336: 0x589E, + 8337: 0x58B2, + 8338: 0x590B, + 8339: 0x5953, + 8340: 0x595B, + 8341: 0x595D, + 8342: 0x5963, + 8343: 0x59A4, + 8344: 0x59BA, + 8345: 0x5B56, + 8346: 0x5BC0, + 8347: 0x752F, + 8348: 0x5BD8, + 8349: 0x5BEC, + 8350: 0x5C1E, + 8351: 0x5CA6, + 8352: 0x5CBA, + 8353: 0x5CF5, + 8354: 0x5D27, + 8355: 0x5D53, + 8356: 0xFA11, + 8357: 0x5D42, + 8358: 0x5D6D, + 8359: 0x5DB8, + 8360: 0x5DB9, + 8361: 0x5DD0, + 8362: 0x5F21, + 8363: 0x5F34, + 8364: 0x5F67, + 8365: 0x5FB7, + 8366: 0x5FDE, + 8367: 0x605D, + 8368: 0x6085, + 8369: 0x608A, + 8370: 0x60DE, + 8371: 0x60D5, + 8372: 0x6120, + 8373: 0x60F2, + 8374: 0x6111, + 8375: 0x6137, + 8376: 0x6130, + 8377: 0x6198, + 8378: 0x6213, + 8379: 0x62A6, + 8380: 0x63F5, + 8381: 0x6460, + 8382: 0x649D, + 8383: 0x64CE, + 8384: 0x654E, + 8385: 0x6600, + 8386: 0x6615, + 8387: 0x663B, + 8388: 0x6609, + 8389: 0x662E, + 8390: 0x661E, + 8391: 0x6624, + 8392: 0x6665, + 8393: 0x6657, + 8394: 0x6659, + 8395: 0xFA12, + 8396: 0x6673, + 8397: 0x6699, + 8398: 0x66A0, + 8399: 0x66B2, + 8400: 0x66BF, + 8401: 0x66FA, + 8402: 0x670E, + 8403: 0xF929, + 8404: 0x6766, + 8405: 0x67BB, + 8406: 0x6852, + 8407: 0x67C0, + 8408: 0x6801, + 8409: 0x6844, + 8410: 0x68CF, + 8411: 0xFA13, + 8412: 0x6968, + 8413: 0xFA14, + 8414: 0x6998, + 8415: 0x69E2, + 8416: 0x6A30, + 8417: 0x6A6B, + 8418: 0x6A46, + 8419: 0x6A73, + 8420: 0x6A7E, + 8421: 0x6AE2, + 8422: 0x6AE4, + 8423: 0x6BD6, + 8424: 0x6C3F, + 8425: 0x6C5C, + 8426: 0x6C86, + 8427: 0x6C6F, + 8428: 0x6CDA, + 8429: 0x6D04, + 8430: 0x6D87, + 8431: 0x6D6F, + 8432: 0x6D96, + 8433: 0x6DAC, + 8434: 0x6DCF, + 8435: 0x6DF8, + 8436: 0x6DF2, + 8437: 0x6DFC, + 8438: 0x6E39, + 8439: 0x6E5C, + 8440: 0x6E27, + 8441: 0x6E3C, + 8442: 0x6EBF, + 8443: 0x6F88, + 8444: 0x6FB5, + 8445: 0x6FF5, + 8446: 0x7005, + 8447: 0x7007, + 8448: 0x7028, + 8449: 0x7085, + 8450: 0x70AB, + 8451: 0x710F, + 8452: 0x7104, + 8453: 0x715C, + 8454: 0x7146, + 8455: 0x7147, + 8456: 0xFA15, + 8457: 0x71C1, + 8458: 0x71FE, + 8459: 0x72B1, + 8460: 0x72BE, + 8461: 0x7324, + 8462: 0xFA16, + 8463: 0x7377, + 8464: 0x73BD, + 8465: 0x73C9, + 8466: 0x73D6, + 8467: 0x73E3, + 8468: 0x73D2, + 8469: 0x7407, + 8470: 0x73F5, + 8471: 0x7426, + 8472: 0x742A, + 8473: 0x7429, + 8474: 0x742E, + 8475: 0x7462, + 8476: 0x7489, + 8477: 0x749F, + 8478: 0x7501, + 8479: 0x756F, + 8480: 0x7682, + 8481: 0x769C, + 8482: 0x769E, + 8483: 0x769B, + 8484: 0x76A6, + 8485: 0xFA17, + 8486: 0x7746, + 8487: 0x52AF, + 8488: 0x7821, + 8489: 0x784E, + 8490: 0x7864, + 8491: 0x787A, + 8492: 0x7930, + 8493: 0xFA18, + 8494: 0xFA19, + 8495: 0xFA1A, + 8496: 0x7994, + 8497: 0xFA1B, + 8498: 0x799B, + 8499: 0x7AD1, + 8500: 0x7AE7, + 8501: 0xFA1C, + 8502: 0x7AEB, + 8503: 0x7B9E, + 8504: 0xFA1D, + 8505: 0x7D48, + 8506: 0x7D5C, + 8507: 0x7DB7, + 8508: 0x7DA0, + 8509: 0x7DD6, + 8510: 0x7E52, + 8511: 0x7F47, + 8512: 0x7FA1, + 8513: 0xFA1E, + 8514: 0x8301, + 8515: 0x8362, + 8516: 0x837F, + 8517: 0x83C7, + 8518: 0x83F6, + 8519: 0x8448, + 8520: 0x84B4, + 8521: 0x8553, + 8522: 0x8559, + 8523: 0x856B, + 8524: 0xFA1F, + 8525: 0x85B0, + 8526: 0xFA20, + 8527: 0xFA21, + 8528: 0x8807, + 8529: 0x88F5, + 8530: 0x8A12, + 8531: 0x8A37, + 8532: 0x8A79, + 8533: 0x8AA7, + 8534: 0x8ABE, + 8535: 0x8ADF, + 8536: 0xFA22, + 8537: 0x8AF6, + 8538: 0x8B53, + 8539: 0x8B7F, + 8540: 0x8CF0, + 8541: 0x8CF4, + 8542: 0x8D12, + 8543: 0x8D76, + 8544: 0xFA23, + 8545: 0x8ECF, + 8546: 0xFA24, + 8547: 0xFA25, + 8548: 0x9067, + 8549: 0x90DE, + 8550: 0xFA26, + 8551: 0x9115, + 8552: 0x9127, + 8553: 0x91DA, + 8554: 0x91D7, + 8555: 0x91DE, + 8556: 0x91ED, + 8557: 0x91EE, + 8558: 0x91E4, + 8559: 0x91E5, + 8560: 0x9206, + 8561: 0x9210, + 8562: 0x920A, + 8563: 0x923A, + 8564: 0x9240, + 8565: 0x923C, + 8566: 0x924E, + 8567: 0x9259, + 8568: 0x9251, + 8569: 0x9239, + 8570: 0x9267, + 8571: 0x92A7, + 8572: 0x9277, + 8573: 0x9278, + 8574: 0x92E7, + 8575: 0x92D7, + 8576: 0x92D9, + 8577: 0x92D0, + 8578: 0xFA27, + 8579: 0x92D5, + 8580: 0x92E0, + 8581: 0x92D3, + 8582: 0x9325, + 8583: 0x9321, + 8584: 0x92FB, + 8585: 0xFA28, + 8586: 0x931E, + 8587: 0x92FF, + 8588: 0x931D, + 8589: 0x9302, + 8590: 0x9370, + 8591: 0x9357, + 8592: 0x93A4, + 8593: 0x93C6, + 8594: 0x93DE, + 8595: 0x93F8, + 8596: 0x9431, + 8597: 0x9445, + 8598: 0x9448, + 8599: 0x9592, + 8600: 0xF9DC, + 8601: 0xFA29, + 8602: 0x969D, + 8603: 0x96AF, + 8604: 0x9733, + 8605: 0x973B, + 8606: 0x9743, + 8607: 0x974D, + 8608: 0x974F, + 8609: 0x9751, + 8610: 0x9755, + 8611: 0x9857, + 8612: 0x9865, + 8613: 0xFA2A, + 8614: 0xFA2B, + 8615: 0x9927, + 8616: 0xFA2C, + 8617: 0x999E, + 8618: 0x9A4E, + 8619: 0x9AD9, + 8620: 0x9ADC, + 8621: 0x9B75, + 8622: 0x9B72, + 8623: 0x9B8F, + 8624: 0x9BB1, + 8625: 0x9BBB, + 8626: 0x9C00, + 8627: 0x9D70, + 8628: 0x9D6B, + 8629: 0xFA2D, + 8630: 0x9E19, + 8631: 0x9ED1, + 8634: 0x2170, + 8635: 0x2171, + 8636: 0x2172, + 8637: 0x2173, + 8638: 0x2174, + 8639: 0x2175, + 8640: 0x2176, + 8641: 0x2177, + 8642: 0x2178, + 8643: 0x2179, + 8644: 0xFFE2, + 8645: 0xFFE4, + 8646: 0xFF07, + 8647: 0xFF02, + 10716: 0x2170, + 10717: 0x2171, + 10718: 0x2172, + 10719: 0x2173, + 10720: 0x2174, + 10721: 0x2175, + 10722: 0x2176, + 10723: 0x2177, + 10724: 0x2178, + 10725: 0x2179, + 10726: 0x2160, + 10727: 0x2161, + 10728: 0x2162, + 10729: 0x2163, + 10730: 0x2164, + 10731: 0x2165, + 10732: 0x2166, + 10733: 0x2167, + 10734: 0x2168, + 10735: 0x2169, + 10736: 0xFFE2, + 10737: 0xFFE4, + 10738: 0xFF07, + 10739: 0xFF02, + 10740: 0x3231, + 10741: 0x2116, + 10742: 0x2121, + 10743: 0x2235, + 10744: 0x7E8A, + 10745: 0x891C, + 10746: 0x9348, + 10747: 0x9288, + 10748: 0x84DC, + 10749: 0x4FC9, + 10750: 0x70BB, + 10751: 0x6631, + 10752: 0x68C8, + 10753: 0x92F9, + 10754: 0x66FB, + 10755: 0x5F45, + 10756: 0x4E28, + 10757: 0x4EE1, + 10758: 0x4EFC, + 10759: 0x4F00, + 10760: 0x4F03, + 10761: 0x4F39, + 10762: 0x4F56, + 10763: 0x4F92, + 10764: 0x4F8A, + 10765: 0x4F9A, + 10766: 0x4F94, + 10767: 0x4FCD, + 10768: 0x5040, + 10769: 0x5022, + 10770: 0x4FFF, + 10771: 0x501E, + 10772: 0x5046, + 10773: 0x5070, + 10774: 0x5042, + 10775: 0x5094, + 10776: 0x50F4, + 10777: 0x50D8, + 10778: 0x514A, + 10779: 0x5164, + 10780: 0x519D, + 10781: 0x51BE, + 10782: 0x51EC, + 10783: 0x5215, + 10784: 0x529C, + 10785: 0x52A6, + 10786: 0x52C0, + 10787: 0x52DB, + 10788: 0x5300, + 10789: 0x5307, + 10790: 0x5324, + 10791: 0x5372, + 10792: 0x5393, + 10793: 0x53B2, + 10794: 0x53DD, + 10795: 0xFA0E, + 10796: 0x549C, + 10797: 0x548A, + 10798: 0x54A9, + 10799: 0x54FF, + 10800: 0x5586, + 10801: 0x5759, + 10802: 0x5765, + 10803: 0x57AC, + 10804: 0x57C8, + 10805: 0x57C7, + 10806: 0xFA0F, + 10807: 0xFA10, + 10808: 0x589E, + 10809: 0x58B2, + 10810: 0x590B, + 10811: 0x5953, + 10812: 0x595B, + 10813: 0x595D, + 10814: 0x5963, + 10815: 0x59A4, + 10816: 0x59BA, + 10817: 0x5B56, + 10818: 0x5BC0, + 10819: 0x752F, + 10820: 0x5BD8, + 10821: 0x5BEC, + 10822: 0x5C1E, + 10823: 0x5CA6, + 10824: 0x5CBA, + 10825: 0x5CF5, + 10826: 0x5D27, + 10827: 0x5D53, + 10828: 0xFA11, + 10829: 0x5D42, + 10830: 0x5D6D, + 10831: 0x5DB8, + 10832: 0x5DB9, + 10833: 0x5DD0, + 10834: 0x5F21, + 10835: 0x5F34, + 10836: 0x5F67, + 10837: 0x5FB7, + 10838: 0x5FDE, + 10839: 0x605D, + 10840: 0x6085, + 10841: 0x608A, + 10842: 0x60DE, + 10843: 0x60D5, + 10844: 0x6120, + 10845: 0x60F2, + 10846: 0x6111, + 10847: 0x6137, + 10848: 0x6130, + 10849: 0x6198, + 10850: 0x6213, + 10851: 0x62A6, + 10852: 0x63F5, + 10853: 0x6460, + 10854: 0x649D, + 10855: 0x64CE, + 10856: 0x654E, + 10857: 0x6600, + 10858: 0x6615, + 10859: 0x663B, + 10860: 0x6609, + 10861: 0x662E, + 10862: 0x661E, + 10863: 0x6624, + 10864: 0x6665, + 10865: 0x6657, + 10866: 0x6659, + 10867: 0xFA12, + 10868: 0x6673, + 10869: 0x6699, + 10870: 0x66A0, + 10871: 0x66B2, + 10872: 0x66BF, + 10873: 0x66FA, + 10874: 0x670E, + 10875: 0xF929, + 10876: 0x6766, + 10877: 0x67BB, + 10878: 0x6852, + 10879: 0x67C0, + 10880: 0x6801, + 10881: 0x6844, + 10882: 0x68CF, + 10883: 0xFA13, + 10884: 0x6968, + 10885: 0xFA14, + 10886: 0x6998, + 10887: 0x69E2, + 10888: 0x6A30, + 10889: 0x6A6B, + 10890: 0x6A46, + 10891: 0x6A73, + 10892: 0x6A7E, + 10893: 0x6AE2, + 10894: 0x6AE4, + 10895: 0x6BD6, + 10896: 0x6C3F, + 10897: 0x6C5C, + 10898: 0x6C86, + 10899: 0x6C6F, + 10900: 0x6CDA, + 10901: 0x6D04, + 10902: 0x6D87, + 10903: 0x6D6F, + 10904: 0x6D96, + 10905: 0x6DAC, + 10906: 0x6DCF, + 10907: 0x6DF8, + 10908: 0x6DF2, + 10909: 0x6DFC, + 10910: 0x6E39, + 10911: 0x6E5C, + 10912: 0x6E27, + 10913: 0x6E3C, + 10914: 0x6EBF, + 10915: 0x6F88, + 10916: 0x6FB5, + 10917: 0x6FF5, + 10918: 0x7005, + 10919: 0x7007, + 10920: 0x7028, + 10921: 0x7085, + 10922: 0x70AB, + 10923: 0x710F, + 10924: 0x7104, + 10925: 0x715C, + 10926: 0x7146, + 10927: 0x7147, + 10928: 0xFA15, + 10929: 0x71C1, + 10930: 0x71FE, + 10931: 0x72B1, + 10932: 0x72BE, + 10933: 0x7324, + 10934: 0xFA16, + 10935: 0x7377, + 10936: 0x73BD, + 10937: 0x73C9, + 10938: 0x73D6, + 10939: 0x73E3, + 10940: 0x73D2, + 10941: 0x7407, + 10942: 0x73F5, + 10943: 0x7426, + 10944: 0x742A, + 10945: 0x7429, + 10946: 0x742E, + 10947: 0x7462, + 10948: 0x7489, + 10949: 0x749F, + 10950: 0x7501, + 10951: 0x756F, + 10952: 0x7682, + 10953: 0x769C, + 10954: 0x769E, + 10955: 0x769B, + 10956: 0x76A6, + 10957: 0xFA17, + 10958: 0x7746, + 10959: 0x52AF, + 10960: 0x7821, + 10961: 0x784E, + 10962: 0x7864, + 10963: 0x787A, + 10964: 0x7930, + 10965: 0xFA18, + 10966: 0xFA19, + 10967: 0xFA1A, + 10968: 0x7994, + 10969: 0xFA1B, + 10970: 0x799B, + 10971: 0x7AD1, + 10972: 0x7AE7, + 10973: 0xFA1C, + 10974: 0x7AEB, + 10975: 0x7B9E, + 10976: 0xFA1D, + 10977: 0x7D48, + 10978: 0x7D5C, + 10979: 0x7DB7, + 10980: 0x7DA0, + 10981: 0x7DD6, + 10982: 0x7E52, + 10983: 0x7F47, + 10984: 0x7FA1, + 10985: 0xFA1E, + 10986: 0x8301, + 10987: 0x8362, + 10988: 0x837F, + 10989: 0x83C7, + 10990: 0x83F6, + 10991: 0x8448, + 10992: 0x84B4, + 10993: 0x8553, + 10994: 0x8559, + 10995: 0x856B, + 10996: 0xFA1F, + 10997: 0x85B0, + 10998: 0xFA20, + 10999: 0xFA21, + 11000: 0x8807, + 11001: 0x88F5, + 11002: 0x8A12, + 11003: 0x8A37, + 11004: 0x8A79, + 11005: 0x8AA7, + 11006: 0x8ABE, + 11007: 0x8ADF, + 11008: 0xFA22, + 11009: 0x8AF6, + 11010: 0x8B53, + 11011: 0x8B7F, + 11012: 0x8CF0, + 11013: 0x8CF4, + 11014: 0x8D12, + 11015: 0x8D76, + 11016: 0xFA23, + 11017: 0x8ECF, + 11018: 0xFA24, + 11019: 0xFA25, + 11020: 0x9067, + 11021: 0x90DE, + 11022: 0xFA26, + 11023: 0x9115, + 11024: 0x9127, + 11025: 0x91DA, + 11026: 0x91D7, + 11027: 0x91DE, + 11028: 0x91ED, + 11029: 0x91EE, + 11030: 0x91E4, + 11031: 0x91E5, + 11032: 0x9206, + 11033: 0x9210, + 11034: 0x920A, + 11035: 0x923A, + 11036: 0x9240, + 11037: 0x923C, + 11038: 0x924E, + 11039: 0x9259, + 11040: 0x9251, + 11041: 0x9239, + 11042: 0x9267, + 11043: 0x92A7, + 11044: 0x9277, + 11045: 0x9278, + 11046: 0x92E7, + 11047: 0x92D7, + 11048: 0x92D9, + 11049: 0x92D0, + 11050: 0xFA27, + 11051: 0x92D5, + 11052: 0x92E0, + 11053: 0x92D3, + 11054: 0x9325, + 11055: 0x9321, + 11056: 0x92FB, + 11057: 0xFA28, + 11058: 0x931E, + 11059: 0x92FF, + 11060: 0x931D, + 11061: 0x9302, + 11062: 0x9370, + 11063: 0x9357, + 11064: 0x93A4, + 11065: 0x93C6, + 11066: 0x93DE, + 11067: 0x93F8, + 11068: 0x9431, + 11069: 0x9445, + 11070: 0x9448, + 11071: 0x9592, + 11072: 0xF9DC, + 11073: 0xFA29, + 11074: 0x969D, + 11075: 0x96AF, + 11076: 0x9733, + 11077: 0x973B, + 11078: 0x9743, + 11079: 0x974D, + 11080: 0x974F, + 11081: 0x9751, + 11082: 0x9755, + 11083: 0x9857, + 11084: 0x9865, + 11085: 0xFA2A, + 11086: 0xFA2B, + 11087: 0x9927, + 11088: 0xFA2C, + 11089: 0x999E, + 11090: 0x9A4E, + 11091: 0x9AD9, + 11092: 0x9ADC, + 11093: 0x9B75, + 11094: 0x9B72, + 11095: 0x9B8F, + 11096: 0x9BB1, + 11097: 0x9BBB, + 11098: 0x9C00, + 11099: 0x9D70, + 11100: 0x9D6B, + 11101: 0xFA2D, + 11102: 0x9E19, + 11103: 0x9ED1, +} + +// jis0212Decode is the decoding table from JIS 0212 code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-jis0212.txt +var jis0212Decode = [...]uint16{ + 108: 0x02D8, + 109: 0x02C7, + 110: 0x00B8, + 111: 0x02D9, + 112: 0x02DD, + 113: 0x00AF, + 114: 0x02DB, + 115: 0x02DA, + 116: 0xFF5E, + 117: 0x0384, + 118: 0x0385, + 127: 0x00A1, + 128: 0x00A6, + 129: 0x00BF, + 168: 0x00BA, + 169: 0x00AA, + 170: 0x00A9, + 171: 0x00AE, + 172: 0x2122, + 173: 0x00A4, + 174: 0x2116, + 534: 0x0386, + 535: 0x0388, + 536: 0x0389, + 537: 0x038A, + 538: 0x03AA, + 540: 0x038C, + 542: 0x038E, + 543: 0x03AB, + 545: 0x038F, + 550: 0x03AC, + 551: 0x03AD, + 552: 0x03AE, + 553: 0x03AF, + 554: 0x03CA, + 555: 0x0390, + 556: 0x03CC, + 557: 0x03C2, + 558: 0x03CD, + 559: 0x03CB, + 560: 0x03B0, + 561: 0x03CE, + 597: 0x0402, + 598: 0x0403, + 599: 0x0404, + 600: 0x0405, + 601: 0x0406, + 602: 0x0407, + 603: 0x0408, + 604: 0x0409, + 605: 0x040A, + 606: 0x040B, + 607: 0x040C, + 608: 0x040E, + 609: 0x040F, + 645: 0x0452, + 646: 0x0453, + 647: 0x0454, + 648: 0x0455, + 649: 0x0456, + 650: 0x0457, + 651: 0x0458, + 652: 0x0459, + 653: 0x045A, + 654: 0x045B, + 655: 0x045C, + 656: 0x045E, + 657: 0x045F, + 752: 0x00C6, + 753: 0x0110, + 755: 0x0126, + 757: 0x0132, + 759: 0x0141, + 760: 0x013F, + 762: 0x014A, + 763: 0x00D8, + 764: 0x0152, + 766: 0x0166, + 767: 0x00DE, + 784: 0x00E6, + 785: 0x0111, + 786: 0x00F0, + 787: 0x0127, + 788: 0x0131, + 789: 0x0133, + 790: 0x0138, + 791: 0x0142, + 792: 0x0140, + 793: 0x0149, + 794: 0x014B, + 795: 0x00F8, + 796: 0x0153, + 797: 0x00DF, + 798: 0x0167, + 799: 0x00FE, + 846: 0x00C1, + 847: 0x00C0, + 848: 0x00C4, + 849: 0x00C2, + 850: 0x0102, + 851: 0x01CD, + 852: 0x0100, + 853: 0x0104, + 854: 0x00C5, + 855: 0x00C3, + 856: 0x0106, + 857: 0x0108, + 858: 0x010C, + 859: 0x00C7, + 860: 0x010A, + 861: 0x010E, + 862: 0x00C9, + 863: 0x00C8, + 864: 0x00CB, + 865: 0x00CA, + 866: 0x011A, + 867: 0x0116, + 868: 0x0112, + 869: 0x0118, + 871: 0x011C, + 872: 0x011E, + 873: 0x0122, + 874: 0x0120, + 875: 0x0124, + 876: 0x00CD, + 877: 0x00CC, + 878: 0x00CF, + 879: 0x00CE, + 880: 0x01CF, + 881: 0x0130, + 882: 0x012A, + 883: 0x012E, + 884: 0x0128, + 885: 0x0134, + 886: 0x0136, + 887: 0x0139, + 888: 0x013D, + 889: 0x013B, + 890: 0x0143, + 891: 0x0147, + 892: 0x0145, + 893: 0x00D1, + 894: 0x00D3, + 895: 0x00D2, + 896: 0x00D6, + 897: 0x00D4, + 898: 0x01D1, + 899: 0x0150, + 900: 0x014C, + 901: 0x00D5, + 902: 0x0154, + 903: 0x0158, + 904: 0x0156, + 905: 0x015A, + 906: 0x015C, + 907: 0x0160, + 908: 0x015E, + 909: 0x0164, + 910: 0x0162, + 911: 0x00DA, + 912: 0x00D9, + 913: 0x00DC, + 914: 0x00DB, + 915: 0x016C, + 916: 0x01D3, + 917: 0x0170, + 918: 0x016A, + 919: 0x0172, + 920: 0x016E, + 921: 0x0168, + 922: 0x01D7, + 923: 0x01DB, + 924: 0x01D9, + 925: 0x01D5, + 926: 0x0174, + 927: 0x00DD, + 928: 0x0178, + 929: 0x0176, + 930: 0x0179, + 931: 0x017D, + 932: 0x017B, + 940: 0x00E1, + 941: 0x00E0, + 942: 0x00E4, + 943: 0x00E2, + 944: 0x0103, + 945: 0x01CE, + 946: 0x0101, + 947: 0x0105, + 948: 0x00E5, + 949: 0x00E3, + 950: 0x0107, + 951: 0x0109, + 952: 0x010D, + 953: 0x00E7, + 954: 0x010B, + 955: 0x010F, + 956: 0x00E9, + 957: 0x00E8, + 958: 0x00EB, + 959: 0x00EA, + 960: 0x011B, + 961: 0x0117, + 962: 0x0113, + 963: 0x0119, + 964: 0x01F5, + 965: 0x011D, + 966: 0x011F, + 968: 0x0121, + 969: 0x0125, + 970: 0x00ED, + 971: 0x00EC, + 972: 0x00EF, + 973: 0x00EE, + 974: 0x01D0, + 976: 0x012B, + 977: 0x012F, + 978: 0x0129, + 979: 0x0135, + 980: 0x0137, + 981: 0x013A, + 982: 0x013E, + 983: 0x013C, + 984: 0x0144, + 985: 0x0148, + 986: 0x0146, + 987: 0x00F1, + 988: 0x00F3, + 989: 0x00F2, + 990: 0x00F6, + 991: 0x00F4, + 992: 0x01D2, + 993: 0x0151, + 994: 0x014D, + 995: 0x00F5, + 996: 0x0155, + 997: 0x0159, + 998: 0x0157, + 999: 0x015B, + 1000: 0x015D, + 1001: 0x0161, + 1002: 0x015F, + 1003: 0x0165, + 1004: 0x0163, + 1005: 0x00FA, + 1006: 0x00F9, + 1007: 0x00FC, + 1008: 0x00FB, + 1009: 0x016D, + 1010: 0x01D4, + 1011: 0x0171, + 1012: 0x016B, + 1013: 0x0173, + 1014: 0x016F, + 1015: 0x0169, + 1016: 0x01D8, + 1017: 0x01DC, + 1018: 0x01DA, + 1019: 0x01D6, + 1020: 0x0175, + 1021: 0x00FD, + 1022: 0x00FF, + 1023: 0x0177, + 1024: 0x017A, + 1025: 0x017E, + 1026: 0x017C, + 1410: 0x4E02, + 1411: 0x4E04, + 1412: 0x4E05, + 1413: 0x4E0C, + 1414: 0x4E12, + 1415: 0x4E1F, + 1416: 0x4E23, + 1417: 0x4E24, + 1418: 0x4E28, + 1419: 0x4E2B, + 1420: 0x4E2E, + 1421: 0x4E2F, + 1422: 0x4E30, + 1423: 0x4E35, + 1424: 0x4E40, + 1425: 0x4E41, + 1426: 0x4E44, + 1427: 0x4E47, + 1428: 0x4E51, + 1429: 0x4E5A, + 1430: 0x4E5C, + 1431: 0x4E63, + 1432: 0x4E68, + 1433: 0x4E69, + 1434: 0x4E74, + 1435: 0x4E75, + 1436: 0x4E79, + 1437: 0x4E7F, + 1438: 0x4E8D, + 1439: 0x4E96, + 1440: 0x4E97, + 1441: 0x4E9D, + 1442: 0x4EAF, + 1443: 0x4EB9, + 1444: 0x4EC3, + 1445: 0x4ED0, + 1446: 0x4EDA, + 1447: 0x4EDB, + 1448: 0x4EE0, + 1449: 0x4EE1, + 1450: 0x4EE2, + 1451: 0x4EE8, + 1452: 0x4EEF, + 1453: 0x4EF1, + 1454: 0x4EF3, + 1455: 0x4EF5, + 1456: 0x4EFD, + 1457: 0x4EFE, + 1458: 0x4EFF, + 1459: 0x4F00, + 1460: 0x4F02, + 1461: 0x4F03, + 1462: 0x4F08, + 1463: 0x4F0B, + 1464: 0x4F0C, + 1465: 0x4F12, + 1466: 0x4F15, + 1467: 0x4F16, + 1468: 0x4F17, + 1469: 0x4F19, + 1470: 0x4F2E, + 1471: 0x4F31, + 1472: 0x4F60, + 1473: 0x4F33, + 1474: 0x4F35, + 1475: 0x4F37, + 1476: 0x4F39, + 1477: 0x4F3B, + 1478: 0x4F3E, + 1479: 0x4F40, + 1480: 0x4F42, + 1481: 0x4F48, + 1482: 0x4F49, + 1483: 0x4F4B, + 1484: 0x4F4C, + 1485: 0x4F52, + 1486: 0x4F54, + 1487: 0x4F56, + 1488: 0x4F58, + 1489: 0x4F5F, + 1490: 0x4F63, + 1491: 0x4F6A, + 1492: 0x4F6C, + 1493: 0x4F6E, + 1494: 0x4F71, + 1495: 0x4F77, + 1496: 0x4F78, + 1497: 0x4F79, + 1498: 0x4F7A, + 1499: 0x4F7D, + 1500: 0x4F7E, + 1501: 0x4F81, + 1502: 0x4F82, + 1503: 0x4F84, + 1504: 0x4F85, + 1505: 0x4F89, + 1506: 0x4F8A, + 1507: 0x4F8C, + 1508: 0x4F8E, + 1509: 0x4F90, + 1510: 0x4F92, + 1511: 0x4F93, + 1512: 0x4F94, + 1513: 0x4F97, + 1514: 0x4F99, + 1515: 0x4F9A, + 1516: 0x4F9E, + 1517: 0x4F9F, + 1518: 0x4FB2, + 1519: 0x4FB7, + 1520: 0x4FB9, + 1521: 0x4FBB, + 1522: 0x4FBC, + 1523: 0x4FBD, + 1524: 0x4FBE, + 1525: 0x4FC0, + 1526: 0x4FC1, + 1527: 0x4FC5, + 1528: 0x4FC6, + 1529: 0x4FC8, + 1530: 0x4FC9, + 1531: 0x4FCB, + 1532: 0x4FCC, + 1533: 0x4FCD, + 1534: 0x4FCF, + 1535: 0x4FD2, + 1536: 0x4FDC, + 1537: 0x4FE0, + 1538: 0x4FE2, + 1539: 0x4FF0, + 1540: 0x4FF2, + 1541: 0x4FFC, + 1542: 0x4FFD, + 1543: 0x4FFF, + 1544: 0x5000, + 1545: 0x5001, + 1546: 0x5004, + 1547: 0x5007, + 1548: 0x500A, + 1549: 0x500C, + 1550: 0x500E, + 1551: 0x5010, + 1552: 0x5013, + 1553: 0x5017, + 1554: 0x5018, + 1555: 0x501B, + 1556: 0x501C, + 1557: 0x501D, + 1558: 0x501E, + 1559: 0x5022, + 1560: 0x5027, + 1561: 0x502E, + 1562: 0x5030, + 1563: 0x5032, + 1564: 0x5033, + 1565: 0x5035, + 1566: 0x5040, + 1567: 0x5041, + 1568: 0x5042, + 1569: 0x5045, + 1570: 0x5046, + 1571: 0x504A, + 1572: 0x504C, + 1573: 0x504E, + 1574: 0x5051, + 1575: 0x5052, + 1576: 0x5053, + 1577: 0x5057, + 1578: 0x5059, + 1579: 0x505F, + 1580: 0x5060, + 1581: 0x5062, + 1582: 0x5063, + 1583: 0x5066, + 1584: 0x5067, + 1585: 0x506A, + 1586: 0x506D, + 1587: 0x5070, + 1588: 0x5071, + 1589: 0x503B, + 1590: 0x5081, + 1591: 0x5083, + 1592: 0x5084, + 1593: 0x5086, + 1594: 0x508A, + 1595: 0x508E, + 1596: 0x508F, + 1597: 0x5090, + 1598: 0x5092, + 1599: 0x5093, + 1600: 0x5094, + 1601: 0x5096, + 1602: 0x509B, + 1603: 0x509C, + 1604: 0x509E, + 1605: 0x509F, + 1606: 0x50A0, + 1607: 0x50A1, + 1608: 0x50A2, + 1609: 0x50AA, + 1610: 0x50AF, + 1611: 0x50B0, + 1612: 0x50B9, + 1613: 0x50BA, + 1614: 0x50BD, + 1615: 0x50C0, + 1616: 0x50C3, + 1617: 0x50C4, + 1618: 0x50C7, + 1619: 0x50CC, + 1620: 0x50CE, + 1621: 0x50D0, + 1622: 0x50D3, + 1623: 0x50D4, + 1624: 0x50D8, + 1625: 0x50DC, + 1626: 0x50DD, + 1627: 0x50DF, + 1628: 0x50E2, + 1629: 0x50E4, + 1630: 0x50E6, + 1631: 0x50E8, + 1632: 0x50E9, + 1633: 0x50EF, + 1634: 0x50F1, + 1635: 0x50F6, + 1636: 0x50FA, + 1637: 0x50FE, + 1638: 0x5103, + 1639: 0x5106, + 1640: 0x5107, + 1641: 0x5108, + 1642: 0x510B, + 1643: 0x510C, + 1644: 0x510D, + 1645: 0x510E, + 1646: 0x50F2, + 1647: 0x5110, + 1648: 0x5117, + 1649: 0x5119, + 1650: 0x511B, + 1651: 0x511C, + 1652: 0x511D, + 1653: 0x511E, + 1654: 0x5123, + 1655: 0x5127, + 1656: 0x5128, + 1657: 0x512C, + 1658: 0x512D, + 1659: 0x512F, + 1660: 0x5131, + 1661: 0x5133, + 1662: 0x5134, + 1663: 0x5135, + 1664: 0x5138, + 1665: 0x5139, + 1666: 0x5142, + 1667: 0x514A, + 1668: 0x514F, + 1669: 0x5153, + 1670: 0x5155, + 1671: 0x5157, + 1672: 0x5158, + 1673: 0x515F, + 1674: 0x5164, + 1675: 0x5166, + 1676: 0x517E, + 1677: 0x5183, + 1678: 0x5184, + 1679: 0x518B, + 1680: 0x518E, + 1681: 0x5198, + 1682: 0x519D, + 1683: 0x51A1, + 1684: 0x51A3, + 1685: 0x51AD, + 1686: 0x51B8, + 1687: 0x51BA, + 1688: 0x51BC, + 1689: 0x51BE, + 1690: 0x51BF, + 1691: 0x51C2, + 1692: 0x51C8, + 1693: 0x51CF, + 1694: 0x51D1, + 1695: 0x51D2, + 1696: 0x51D3, + 1697: 0x51D5, + 1698: 0x51D8, + 1699: 0x51DE, + 1700: 0x51E2, + 1701: 0x51E5, + 1702: 0x51EE, + 1703: 0x51F2, + 1704: 0x51F3, + 1705: 0x51F4, + 1706: 0x51F7, + 1707: 0x5201, + 1708: 0x5202, + 1709: 0x5205, + 1710: 0x5212, + 1711: 0x5213, + 1712: 0x5215, + 1713: 0x5216, + 1714: 0x5218, + 1715: 0x5222, + 1716: 0x5228, + 1717: 0x5231, + 1718: 0x5232, + 1719: 0x5235, + 1720: 0x523C, + 1721: 0x5245, + 1722: 0x5249, + 1723: 0x5255, + 1724: 0x5257, + 1725: 0x5258, + 1726: 0x525A, + 1727: 0x525C, + 1728: 0x525F, + 1729: 0x5260, + 1730: 0x5261, + 1731: 0x5266, + 1732: 0x526E, + 1733: 0x5277, + 1734: 0x5278, + 1735: 0x5279, + 1736: 0x5280, + 1737: 0x5282, + 1738: 0x5285, + 1739: 0x528A, + 1740: 0x528C, + 1741: 0x5293, + 1742: 0x5295, + 1743: 0x5296, + 1744: 0x5297, + 1745: 0x5298, + 1746: 0x529A, + 1747: 0x529C, + 1748: 0x52A4, + 1749: 0x52A5, + 1750: 0x52A6, + 1751: 0x52A7, + 1752: 0x52AF, + 1753: 0x52B0, + 1754: 0x52B6, + 1755: 0x52B7, + 1756: 0x52B8, + 1757: 0x52BA, + 1758: 0x52BB, + 1759: 0x52BD, + 1760: 0x52C0, + 1761: 0x52C4, + 1762: 0x52C6, + 1763: 0x52C8, + 1764: 0x52CC, + 1765: 0x52CF, + 1766: 0x52D1, + 1767: 0x52D4, + 1768: 0x52D6, + 1769: 0x52DB, + 1770: 0x52DC, + 1771: 0x52E1, + 1772: 0x52E5, + 1773: 0x52E8, + 1774: 0x52E9, + 1775: 0x52EA, + 1776: 0x52EC, + 1777: 0x52F0, + 1778: 0x52F1, + 1779: 0x52F4, + 1780: 0x52F6, + 1781: 0x52F7, + 1782: 0x5300, + 1783: 0x5303, + 1784: 0x530A, + 1785: 0x530B, + 1786: 0x530C, + 1787: 0x5311, + 1788: 0x5313, + 1789: 0x5318, + 1790: 0x531B, + 1791: 0x531C, + 1792: 0x531E, + 1793: 0x531F, + 1794: 0x5325, + 1795: 0x5327, + 1796: 0x5328, + 1797: 0x5329, + 1798: 0x532B, + 1799: 0x532C, + 1800: 0x532D, + 1801: 0x5330, + 1802: 0x5332, + 1803: 0x5335, + 1804: 0x533C, + 1805: 0x533D, + 1806: 0x533E, + 1807: 0x5342, + 1808: 0x534C, + 1809: 0x534B, + 1810: 0x5359, + 1811: 0x535B, + 1812: 0x5361, + 1813: 0x5363, + 1814: 0x5365, + 1815: 0x536C, + 1816: 0x536D, + 1817: 0x5372, + 1818: 0x5379, + 1819: 0x537E, + 1820: 0x5383, + 1821: 0x5387, + 1822: 0x5388, + 1823: 0x538E, + 1824: 0x5393, + 1825: 0x5394, + 1826: 0x5399, + 1827: 0x539D, + 1828: 0x53A1, + 1829: 0x53A4, + 1830: 0x53AA, + 1831: 0x53AB, + 1832: 0x53AF, + 1833: 0x53B2, + 1834: 0x53B4, + 1835: 0x53B5, + 1836: 0x53B7, + 1837: 0x53B8, + 1838: 0x53BA, + 1839: 0x53BD, + 1840: 0x53C0, + 1841: 0x53C5, + 1842: 0x53CF, + 1843: 0x53D2, + 1844: 0x53D3, + 1845: 0x53D5, + 1846: 0x53DA, + 1847: 0x53DD, + 1848: 0x53DE, + 1849: 0x53E0, + 1850: 0x53E6, + 1851: 0x53E7, + 1852: 0x53F5, + 1853: 0x5402, + 1854: 0x5413, + 1855: 0x541A, + 1856: 0x5421, + 1857: 0x5427, + 1858: 0x5428, + 1859: 0x542A, + 1860: 0x542F, + 1861: 0x5431, + 1862: 0x5434, + 1863: 0x5435, + 1864: 0x5443, + 1865: 0x5444, + 1866: 0x5447, + 1867: 0x544D, + 1868: 0x544F, + 1869: 0x545E, + 1870: 0x5462, + 1871: 0x5464, + 1872: 0x5466, + 1873: 0x5467, + 1874: 0x5469, + 1875: 0x546B, + 1876: 0x546D, + 1877: 0x546E, + 1878: 0x5474, + 1879: 0x547F, + 1880: 0x5481, + 1881: 0x5483, + 1882: 0x5485, + 1883: 0x5488, + 1884: 0x5489, + 1885: 0x548D, + 1886: 0x5491, + 1887: 0x5495, + 1888: 0x5496, + 1889: 0x549C, + 1890: 0x549F, + 1891: 0x54A1, + 1892: 0x54A6, + 1893: 0x54A7, + 1894: 0x54A9, + 1895: 0x54AA, + 1896: 0x54AD, + 1897: 0x54AE, + 1898: 0x54B1, + 1899: 0x54B7, + 1900: 0x54B9, + 1901: 0x54BA, + 1902: 0x54BB, + 1903: 0x54BF, + 1904: 0x54C6, + 1905: 0x54CA, + 1906: 0x54CD, + 1907: 0x54CE, + 1908: 0x54E0, + 1909: 0x54EA, + 1910: 0x54EC, + 1911: 0x54EF, + 1912: 0x54F6, + 1913: 0x54FC, + 1914: 0x54FE, + 1915: 0x54FF, + 1916: 0x5500, + 1917: 0x5501, + 1918: 0x5505, + 1919: 0x5508, + 1920: 0x5509, + 1921: 0x550C, + 1922: 0x550D, + 1923: 0x550E, + 1924: 0x5515, + 1925: 0x552A, + 1926: 0x552B, + 1927: 0x5532, + 1928: 0x5535, + 1929: 0x5536, + 1930: 0x553B, + 1931: 0x553C, + 1932: 0x553D, + 1933: 0x5541, + 1934: 0x5547, + 1935: 0x5549, + 1936: 0x554A, + 1937: 0x554D, + 1938: 0x5550, + 1939: 0x5551, + 1940: 0x5558, + 1941: 0x555A, + 1942: 0x555B, + 1943: 0x555E, + 1944: 0x5560, + 1945: 0x5561, + 1946: 0x5564, + 1947: 0x5566, + 1948: 0x557F, + 1949: 0x5581, + 1950: 0x5582, + 1951: 0x5586, + 1952: 0x5588, + 1953: 0x558E, + 1954: 0x558F, + 1955: 0x5591, + 1956: 0x5592, + 1957: 0x5593, + 1958: 0x5594, + 1959: 0x5597, + 1960: 0x55A3, + 1961: 0x55A4, + 1962: 0x55AD, + 1963: 0x55B2, + 1964: 0x55BF, + 1965: 0x55C1, + 1966: 0x55C3, + 1967: 0x55C6, + 1968: 0x55C9, + 1969: 0x55CB, + 1970: 0x55CC, + 1971: 0x55CE, + 1972: 0x55D1, + 1973: 0x55D2, + 1974: 0x55D3, + 1975: 0x55D7, + 1976: 0x55D8, + 1977: 0x55DB, + 1978: 0x55DE, + 1979: 0x55E2, + 1980: 0x55E9, + 1981: 0x55F6, + 1982: 0x55FF, + 1983: 0x5605, + 1984: 0x5608, + 1985: 0x560A, + 1986: 0x560D, + 1987: 0x560E, + 1988: 0x560F, + 1989: 0x5610, + 1990: 0x5611, + 1991: 0x5612, + 1992: 0x5619, + 1993: 0x562C, + 1994: 0x5630, + 1995: 0x5633, + 1996: 0x5635, + 1997: 0x5637, + 1998: 0x5639, + 1999: 0x563B, + 2000: 0x563C, + 2001: 0x563D, + 2002: 0x563F, + 2003: 0x5640, + 2004: 0x5641, + 2005: 0x5643, + 2006: 0x5644, + 2007: 0x5646, + 2008: 0x5649, + 2009: 0x564B, + 2010: 0x564D, + 2011: 0x564F, + 2012: 0x5654, + 2013: 0x565E, + 2014: 0x5660, + 2015: 0x5661, + 2016: 0x5662, + 2017: 0x5663, + 2018: 0x5666, + 2019: 0x5669, + 2020: 0x566D, + 2021: 0x566F, + 2022: 0x5671, + 2023: 0x5672, + 2024: 0x5675, + 2025: 0x5684, + 2026: 0x5685, + 2027: 0x5688, + 2028: 0x568B, + 2029: 0x568C, + 2030: 0x5695, + 2031: 0x5699, + 2032: 0x569A, + 2033: 0x569D, + 2034: 0x569E, + 2035: 0x569F, + 2036: 0x56A6, + 2037: 0x56A7, + 2038: 0x56A8, + 2039: 0x56A9, + 2040: 0x56AB, + 2041: 0x56AC, + 2042: 0x56AD, + 2043: 0x56B1, + 2044: 0x56B3, + 2045: 0x56B7, + 2046: 0x56BE, + 2047: 0x56C5, + 2048: 0x56C9, + 2049: 0x56CA, + 2050: 0x56CB, + 2051: 0x56CF, + 2052: 0x56D0, + 2053: 0x56CC, + 2054: 0x56CD, + 2055: 0x56D9, + 2056: 0x56DC, + 2057: 0x56DD, + 2058: 0x56DF, + 2059: 0x56E1, + 2060: 0x56E4, + 2061: 0x56E5, + 2062: 0x56E6, + 2063: 0x56E7, + 2064: 0x56E8, + 2065: 0x56F1, + 2066: 0x56EB, + 2067: 0x56ED, + 2068: 0x56F6, + 2069: 0x56F7, + 2070: 0x5701, + 2071: 0x5702, + 2072: 0x5707, + 2073: 0x570A, + 2074: 0x570C, + 2075: 0x5711, + 2076: 0x5715, + 2077: 0x571A, + 2078: 0x571B, + 2079: 0x571D, + 2080: 0x5720, + 2081: 0x5722, + 2082: 0x5723, + 2083: 0x5724, + 2084: 0x5725, + 2085: 0x5729, + 2086: 0x572A, + 2087: 0x572C, + 2088: 0x572E, + 2089: 0x572F, + 2090: 0x5733, + 2091: 0x5734, + 2092: 0x573D, + 2093: 0x573E, + 2094: 0x573F, + 2095: 0x5745, + 2096: 0x5746, + 2097: 0x574C, + 2098: 0x574D, + 2099: 0x5752, + 2100: 0x5762, + 2101: 0x5765, + 2102: 0x5767, + 2103: 0x5768, + 2104: 0x576B, + 2105: 0x576D, + 2106: 0x576E, + 2107: 0x576F, + 2108: 0x5770, + 2109: 0x5771, + 2110: 0x5773, + 2111: 0x5774, + 2112: 0x5775, + 2113: 0x5777, + 2114: 0x5779, + 2115: 0x577A, + 2116: 0x577B, + 2117: 0x577C, + 2118: 0x577E, + 2119: 0x5781, + 2120: 0x5783, + 2121: 0x578C, + 2122: 0x5794, + 2123: 0x5797, + 2124: 0x5799, + 2125: 0x579A, + 2126: 0x579C, + 2127: 0x579D, + 2128: 0x579E, + 2129: 0x579F, + 2130: 0x57A1, + 2131: 0x5795, + 2132: 0x57A7, + 2133: 0x57A8, + 2134: 0x57A9, + 2135: 0x57AC, + 2136: 0x57B8, + 2137: 0x57BD, + 2138: 0x57C7, + 2139: 0x57C8, + 2140: 0x57CC, + 2141: 0x57CF, + 2142: 0x57D5, + 2143: 0x57DD, + 2144: 0x57DE, + 2145: 0x57E4, + 2146: 0x57E6, + 2147: 0x57E7, + 2148: 0x57E9, + 2149: 0x57ED, + 2150: 0x57F0, + 2151: 0x57F5, + 2152: 0x57F6, + 2153: 0x57F8, + 2154: 0x57FD, + 2155: 0x57FE, + 2156: 0x57FF, + 2157: 0x5803, + 2158: 0x5804, + 2159: 0x5808, + 2160: 0x5809, + 2161: 0x57E1, + 2162: 0x580C, + 2163: 0x580D, + 2164: 0x581B, + 2165: 0x581E, + 2166: 0x581F, + 2167: 0x5820, + 2168: 0x5826, + 2169: 0x5827, + 2170: 0x582D, + 2171: 0x5832, + 2172: 0x5839, + 2173: 0x583F, + 2174: 0x5849, + 2175: 0x584C, + 2176: 0x584D, + 2177: 0x584F, + 2178: 0x5850, + 2179: 0x5855, + 2180: 0x585F, + 2181: 0x5861, + 2182: 0x5864, + 2183: 0x5867, + 2184: 0x5868, + 2185: 0x5878, + 2186: 0x587C, + 2187: 0x587F, + 2188: 0x5880, + 2189: 0x5881, + 2190: 0x5887, + 2191: 0x5888, + 2192: 0x5889, + 2193: 0x588A, + 2194: 0x588C, + 2195: 0x588D, + 2196: 0x588F, + 2197: 0x5890, + 2198: 0x5894, + 2199: 0x5896, + 2200: 0x589D, + 2201: 0x58A0, + 2202: 0x58A1, + 2203: 0x58A2, + 2204: 0x58A6, + 2205: 0x58A9, + 2206: 0x58B1, + 2207: 0x58B2, + 2208: 0x58C4, + 2209: 0x58BC, + 2210: 0x58C2, + 2211: 0x58C8, + 2212: 0x58CD, + 2213: 0x58CE, + 2214: 0x58D0, + 2215: 0x58D2, + 2216: 0x58D4, + 2217: 0x58D6, + 2218: 0x58DA, + 2219: 0x58DD, + 2220: 0x58E1, + 2221: 0x58E2, + 2222: 0x58E9, + 2223: 0x58F3, + 2224: 0x5905, + 2225: 0x5906, + 2226: 0x590B, + 2227: 0x590C, + 2228: 0x5912, + 2229: 0x5913, + 2230: 0x5914, + 2231: 0x8641, + 2232: 0x591D, + 2233: 0x5921, + 2234: 0x5923, + 2235: 0x5924, + 2236: 0x5928, + 2237: 0x592F, + 2238: 0x5930, + 2239: 0x5933, + 2240: 0x5935, + 2241: 0x5936, + 2242: 0x593F, + 2243: 0x5943, + 2244: 0x5946, + 2245: 0x5952, + 2246: 0x5953, + 2247: 0x5959, + 2248: 0x595B, + 2249: 0x595D, + 2250: 0x595E, + 2251: 0x595F, + 2252: 0x5961, + 2253: 0x5963, + 2254: 0x596B, + 2255: 0x596D, + 2256: 0x596F, + 2257: 0x5972, + 2258: 0x5975, + 2259: 0x5976, + 2260: 0x5979, + 2261: 0x597B, + 2262: 0x597C, + 2263: 0x598B, + 2264: 0x598C, + 2265: 0x598E, + 2266: 0x5992, + 2267: 0x5995, + 2268: 0x5997, + 2269: 0x599F, + 2270: 0x59A4, + 2271: 0x59A7, + 2272: 0x59AD, + 2273: 0x59AE, + 2274: 0x59AF, + 2275: 0x59B0, + 2276: 0x59B3, + 2277: 0x59B7, + 2278: 0x59BA, + 2279: 0x59BC, + 2280: 0x59C1, + 2281: 0x59C3, + 2282: 0x59C4, + 2283: 0x59C8, + 2284: 0x59CA, + 2285: 0x59CD, + 2286: 0x59D2, + 2287: 0x59DD, + 2288: 0x59DE, + 2289: 0x59DF, + 2290: 0x59E3, + 2291: 0x59E4, + 2292: 0x59E7, + 2293: 0x59EE, + 2294: 0x59EF, + 2295: 0x59F1, + 2296: 0x59F2, + 2297: 0x59F4, + 2298: 0x59F7, + 2299: 0x5A00, + 2300: 0x5A04, + 2301: 0x5A0C, + 2302: 0x5A0D, + 2303: 0x5A0E, + 2304: 0x5A12, + 2305: 0x5A13, + 2306: 0x5A1E, + 2307: 0x5A23, + 2308: 0x5A24, + 2309: 0x5A27, + 2310: 0x5A28, + 2311: 0x5A2A, + 2312: 0x5A2D, + 2313: 0x5A30, + 2314: 0x5A44, + 2315: 0x5A45, + 2316: 0x5A47, + 2317: 0x5A48, + 2318: 0x5A4C, + 2319: 0x5A50, + 2320: 0x5A55, + 2321: 0x5A5E, + 2322: 0x5A63, + 2323: 0x5A65, + 2324: 0x5A67, + 2325: 0x5A6D, + 2326: 0x5A77, + 2327: 0x5A7A, + 2328: 0x5A7B, + 2329: 0x5A7E, + 2330: 0x5A8B, + 2331: 0x5A90, + 2332: 0x5A93, + 2333: 0x5A96, + 2334: 0x5A99, + 2335: 0x5A9C, + 2336: 0x5A9E, + 2337: 0x5A9F, + 2338: 0x5AA0, + 2339: 0x5AA2, + 2340: 0x5AA7, + 2341: 0x5AAC, + 2342: 0x5AB1, + 2343: 0x5AB2, + 2344: 0x5AB3, + 2345: 0x5AB5, + 2346: 0x5AB8, + 2347: 0x5ABA, + 2348: 0x5ABB, + 2349: 0x5ABF, + 2350: 0x5AC4, + 2351: 0x5AC6, + 2352: 0x5AC8, + 2353: 0x5ACF, + 2354: 0x5ADA, + 2355: 0x5ADC, + 2356: 0x5AE0, + 2357: 0x5AE5, + 2358: 0x5AEA, + 2359: 0x5AEE, + 2360: 0x5AF5, + 2361: 0x5AF6, + 2362: 0x5AFD, + 2363: 0x5B00, + 2364: 0x5B01, + 2365: 0x5B08, + 2366: 0x5B17, + 2367: 0x5B34, + 2368: 0x5B19, + 2369: 0x5B1B, + 2370: 0x5B1D, + 2371: 0x5B21, + 2372: 0x5B25, + 2373: 0x5B2D, + 2374: 0x5B38, + 2375: 0x5B41, + 2376: 0x5B4B, + 2377: 0x5B4C, + 2378: 0x5B52, + 2379: 0x5B56, + 2380: 0x5B5E, + 2381: 0x5B68, + 2382: 0x5B6E, + 2383: 0x5B6F, + 2384: 0x5B7C, + 2385: 0x5B7D, + 2386: 0x5B7E, + 2387: 0x5B7F, + 2388: 0x5B81, + 2389: 0x5B84, + 2390: 0x5B86, + 2391: 0x5B8A, + 2392: 0x5B8E, + 2393: 0x5B90, + 2394: 0x5B91, + 2395: 0x5B93, + 2396: 0x5B94, + 2397: 0x5B96, + 2398: 0x5BA8, + 2399: 0x5BA9, + 2400: 0x5BAC, + 2401: 0x5BAD, + 2402: 0x5BAF, + 2403: 0x5BB1, + 2404: 0x5BB2, + 2405: 0x5BB7, + 2406: 0x5BBA, + 2407: 0x5BBC, + 2408: 0x5BC0, + 2409: 0x5BC1, + 2410: 0x5BCD, + 2411: 0x5BCF, + 2412: 0x5BD6, + 2413: 0x5BD7, + 2414: 0x5BD8, + 2415: 0x5BD9, + 2416: 0x5BDA, + 2417: 0x5BE0, + 2418: 0x5BEF, + 2419: 0x5BF1, + 2420: 0x5BF4, + 2421: 0x5BFD, + 2422: 0x5C0C, + 2423: 0x5C17, + 2424: 0x5C1E, + 2425: 0x5C1F, + 2426: 0x5C23, + 2427: 0x5C26, + 2428: 0x5C29, + 2429: 0x5C2B, + 2430: 0x5C2C, + 2431: 0x5C2E, + 2432: 0x5C30, + 2433: 0x5C32, + 2434: 0x5C35, + 2435: 0x5C36, + 2436: 0x5C59, + 2437: 0x5C5A, + 2438: 0x5C5C, + 2439: 0x5C62, + 2440: 0x5C63, + 2441: 0x5C67, + 2442: 0x5C68, + 2443: 0x5C69, + 2444: 0x5C6D, + 2445: 0x5C70, + 2446: 0x5C74, + 2447: 0x5C75, + 2448: 0x5C7A, + 2449: 0x5C7B, + 2450: 0x5C7C, + 2451: 0x5C7D, + 2452: 0x5C87, + 2453: 0x5C88, + 2454: 0x5C8A, + 2455: 0x5C8F, + 2456: 0x5C92, + 2457: 0x5C9D, + 2458: 0x5C9F, + 2459: 0x5CA0, + 2460: 0x5CA2, + 2461: 0x5CA3, + 2462: 0x5CA6, + 2463: 0x5CAA, + 2464: 0x5CB2, + 2465: 0x5CB4, + 2466: 0x5CB5, + 2467: 0x5CBA, + 2468: 0x5CC9, + 2469: 0x5CCB, + 2470: 0x5CD2, + 2471: 0x5CDD, + 2472: 0x5CD7, + 2473: 0x5CEE, + 2474: 0x5CF1, + 2475: 0x5CF2, + 2476: 0x5CF4, + 2477: 0x5D01, + 2478: 0x5D06, + 2479: 0x5D0D, + 2480: 0x5D12, + 2481: 0x5D2B, + 2482: 0x5D23, + 2483: 0x5D24, + 2484: 0x5D26, + 2485: 0x5D27, + 2486: 0x5D31, + 2487: 0x5D34, + 2488: 0x5D39, + 2489: 0x5D3D, + 2490: 0x5D3F, + 2491: 0x5D42, + 2492: 0x5D43, + 2493: 0x5D46, + 2494: 0x5D48, + 2495: 0x5D55, + 2496: 0x5D51, + 2497: 0x5D59, + 2498: 0x5D4A, + 2499: 0x5D5F, + 2500: 0x5D60, + 2501: 0x5D61, + 2502: 0x5D62, + 2503: 0x5D64, + 2504: 0x5D6A, + 2505: 0x5D6D, + 2506: 0x5D70, + 2507: 0x5D79, + 2508: 0x5D7A, + 2509: 0x5D7E, + 2510: 0x5D7F, + 2511: 0x5D81, + 2512: 0x5D83, + 2513: 0x5D88, + 2514: 0x5D8A, + 2515: 0x5D92, + 2516: 0x5D93, + 2517: 0x5D94, + 2518: 0x5D95, + 2519: 0x5D99, + 2520: 0x5D9B, + 2521: 0x5D9F, + 2522: 0x5DA0, + 2523: 0x5DA7, + 2524: 0x5DAB, + 2525: 0x5DB0, + 2526: 0x5DB4, + 2527: 0x5DB8, + 2528: 0x5DB9, + 2529: 0x5DC3, + 2530: 0x5DC7, + 2531: 0x5DCB, + 2532: 0x5DD0, + 2533: 0x5DCE, + 2534: 0x5DD8, + 2535: 0x5DD9, + 2536: 0x5DE0, + 2537: 0x5DE4, + 2538: 0x5DE9, + 2539: 0x5DF8, + 2540: 0x5DF9, + 2541: 0x5E00, + 2542: 0x5E07, + 2543: 0x5E0D, + 2544: 0x5E12, + 2545: 0x5E14, + 2546: 0x5E15, + 2547: 0x5E18, + 2548: 0x5E1F, + 2549: 0x5E20, + 2550: 0x5E2E, + 2551: 0x5E28, + 2552: 0x5E32, + 2553: 0x5E35, + 2554: 0x5E3E, + 2555: 0x5E4B, + 2556: 0x5E50, + 2557: 0x5E49, + 2558: 0x5E51, + 2559: 0x5E56, + 2560: 0x5E58, + 2561: 0x5E5B, + 2562: 0x5E5C, + 2563: 0x5E5E, + 2564: 0x5E68, + 2565: 0x5E6A, + 2566: 0x5E6B, + 2567: 0x5E6C, + 2568: 0x5E6D, + 2569: 0x5E6E, + 2570: 0x5E70, + 2571: 0x5E80, + 2572: 0x5E8B, + 2573: 0x5E8E, + 2574: 0x5EA2, + 2575: 0x5EA4, + 2576: 0x5EA5, + 2577: 0x5EA8, + 2578: 0x5EAA, + 2579: 0x5EAC, + 2580: 0x5EB1, + 2581: 0x5EB3, + 2582: 0x5EBD, + 2583: 0x5EBE, + 2584: 0x5EBF, + 2585: 0x5EC6, + 2586: 0x5ECC, + 2587: 0x5ECB, + 2588: 0x5ECE, + 2589: 0x5ED1, + 2590: 0x5ED2, + 2591: 0x5ED4, + 2592: 0x5ED5, + 2593: 0x5EDC, + 2594: 0x5EDE, + 2595: 0x5EE5, + 2596: 0x5EEB, + 2597: 0x5F02, + 2598: 0x5F06, + 2599: 0x5F07, + 2600: 0x5F08, + 2601: 0x5F0E, + 2602: 0x5F19, + 2603: 0x5F1C, + 2604: 0x5F1D, + 2605: 0x5F21, + 2606: 0x5F22, + 2607: 0x5F23, + 2608: 0x5F24, + 2609: 0x5F28, + 2610: 0x5F2B, + 2611: 0x5F2C, + 2612: 0x5F2E, + 2613: 0x5F30, + 2614: 0x5F34, + 2615: 0x5F36, + 2616: 0x5F3B, + 2617: 0x5F3D, + 2618: 0x5F3F, + 2619: 0x5F40, + 2620: 0x5F44, + 2621: 0x5F45, + 2622: 0x5F47, + 2623: 0x5F4D, + 2624: 0x5F50, + 2625: 0x5F54, + 2626: 0x5F58, + 2627: 0x5F5B, + 2628: 0x5F60, + 2629: 0x5F63, + 2630: 0x5F64, + 2631: 0x5F67, + 2632: 0x5F6F, + 2633: 0x5F72, + 2634: 0x5F74, + 2635: 0x5F75, + 2636: 0x5F78, + 2637: 0x5F7A, + 2638: 0x5F7D, + 2639: 0x5F7E, + 2640: 0x5F89, + 2641: 0x5F8D, + 2642: 0x5F8F, + 2643: 0x5F96, + 2644: 0x5F9C, + 2645: 0x5F9D, + 2646: 0x5FA2, + 2647: 0x5FA7, + 2648: 0x5FAB, + 2649: 0x5FA4, + 2650: 0x5FAC, + 2651: 0x5FAF, + 2652: 0x5FB0, + 2653: 0x5FB1, + 2654: 0x5FB8, + 2655: 0x5FC4, + 2656: 0x5FC7, + 2657: 0x5FC8, + 2658: 0x5FC9, + 2659: 0x5FCB, + 2660: 0x5FD0, + 2661: 0x5FD1, + 2662: 0x5FD2, + 2663: 0x5FD3, + 2664: 0x5FD4, + 2665: 0x5FDE, + 2666: 0x5FE1, + 2667: 0x5FE2, + 2668: 0x5FE8, + 2669: 0x5FE9, + 2670: 0x5FEA, + 2671: 0x5FEC, + 2672: 0x5FED, + 2673: 0x5FEE, + 2674: 0x5FEF, + 2675: 0x5FF2, + 2676: 0x5FF3, + 2677: 0x5FF6, + 2678: 0x5FFA, + 2679: 0x5FFC, + 2680: 0x6007, + 2681: 0x600A, + 2682: 0x600D, + 2683: 0x6013, + 2684: 0x6014, + 2685: 0x6017, + 2686: 0x6018, + 2687: 0x601A, + 2688: 0x601F, + 2689: 0x6024, + 2690: 0x602D, + 2691: 0x6033, + 2692: 0x6035, + 2693: 0x6040, + 2694: 0x6047, + 2695: 0x6048, + 2696: 0x6049, + 2697: 0x604C, + 2698: 0x6051, + 2699: 0x6054, + 2700: 0x6056, + 2701: 0x6057, + 2702: 0x605D, + 2703: 0x6061, + 2704: 0x6067, + 2705: 0x6071, + 2706: 0x607E, + 2707: 0x607F, + 2708: 0x6082, + 2709: 0x6086, + 2710: 0x6088, + 2711: 0x608A, + 2712: 0x608E, + 2713: 0x6091, + 2714: 0x6093, + 2715: 0x6095, + 2716: 0x6098, + 2717: 0x609D, + 2718: 0x609E, + 2719: 0x60A2, + 2720: 0x60A4, + 2721: 0x60A5, + 2722: 0x60A8, + 2723: 0x60B0, + 2724: 0x60B1, + 2725: 0x60B7, + 2726: 0x60BB, + 2727: 0x60BE, + 2728: 0x60C2, + 2729: 0x60C4, + 2730: 0x60C8, + 2731: 0x60C9, + 2732: 0x60CA, + 2733: 0x60CB, + 2734: 0x60CE, + 2735: 0x60CF, + 2736: 0x60D4, + 2737: 0x60D5, + 2738: 0x60D9, + 2739: 0x60DB, + 2740: 0x60DD, + 2741: 0x60DE, + 2742: 0x60E2, + 2743: 0x60E5, + 2744: 0x60F2, + 2745: 0x60F5, + 2746: 0x60F8, + 2747: 0x60FC, + 2748: 0x60FD, + 2749: 0x6102, + 2750: 0x6107, + 2751: 0x610A, + 2752: 0x610C, + 2753: 0x6110, + 2754: 0x6111, + 2755: 0x6112, + 2756: 0x6113, + 2757: 0x6114, + 2758: 0x6116, + 2759: 0x6117, + 2760: 0x6119, + 2761: 0x611C, + 2762: 0x611E, + 2763: 0x6122, + 2764: 0x612A, + 2765: 0x612B, + 2766: 0x6130, + 2767: 0x6131, + 2768: 0x6135, + 2769: 0x6136, + 2770: 0x6137, + 2771: 0x6139, + 2772: 0x6141, + 2773: 0x6145, + 2774: 0x6146, + 2775: 0x6149, + 2776: 0x615E, + 2777: 0x6160, + 2778: 0x616C, + 2779: 0x6172, + 2780: 0x6178, + 2781: 0x617B, + 2782: 0x617C, + 2783: 0x617F, + 2784: 0x6180, + 2785: 0x6181, + 2786: 0x6183, + 2787: 0x6184, + 2788: 0x618B, + 2789: 0x618D, + 2790: 0x6192, + 2791: 0x6193, + 2792: 0x6197, + 2793: 0x6198, + 2794: 0x619C, + 2795: 0x619D, + 2796: 0x619F, + 2797: 0x61A0, + 2798: 0x61A5, + 2799: 0x61A8, + 2800: 0x61AA, + 2801: 0x61AD, + 2802: 0x61B8, + 2803: 0x61B9, + 2804: 0x61BC, + 2805: 0x61C0, + 2806: 0x61C1, + 2807: 0x61C2, + 2808: 0x61CE, + 2809: 0x61CF, + 2810: 0x61D5, + 2811: 0x61DC, + 2812: 0x61DD, + 2813: 0x61DE, + 2814: 0x61DF, + 2815: 0x61E1, + 2816: 0x61E2, + 2817: 0x61E7, + 2818: 0x61E9, + 2819: 0x61E5, + 2820: 0x61EC, + 2821: 0x61ED, + 2822: 0x61EF, + 2823: 0x6201, + 2824: 0x6203, + 2825: 0x6204, + 2826: 0x6207, + 2827: 0x6213, + 2828: 0x6215, + 2829: 0x621C, + 2830: 0x6220, + 2831: 0x6222, + 2832: 0x6223, + 2833: 0x6227, + 2834: 0x6229, + 2835: 0x622B, + 2836: 0x6239, + 2837: 0x623D, + 2838: 0x6242, + 2839: 0x6243, + 2840: 0x6244, + 2841: 0x6246, + 2842: 0x624C, + 2843: 0x6250, + 2844: 0x6251, + 2845: 0x6252, + 2846: 0x6254, + 2847: 0x6256, + 2848: 0x625A, + 2849: 0x625C, + 2850: 0x6264, + 2851: 0x626D, + 2852: 0x626F, + 2853: 0x6273, + 2854: 0x627A, + 2855: 0x627D, + 2856: 0x628D, + 2857: 0x628E, + 2858: 0x628F, + 2859: 0x6290, + 2860: 0x62A6, + 2861: 0x62A8, + 2862: 0x62B3, + 2863: 0x62B6, + 2864: 0x62B7, + 2865: 0x62BA, + 2866: 0x62BE, + 2867: 0x62BF, + 2868: 0x62C4, + 2869: 0x62CE, + 2870: 0x62D5, + 2871: 0x62D6, + 2872: 0x62DA, + 2873: 0x62EA, + 2874: 0x62F2, + 2875: 0x62F4, + 2876: 0x62FC, + 2877: 0x62FD, + 2878: 0x6303, + 2879: 0x6304, + 2880: 0x630A, + 2881: 0x630B, + 2882: 0x630D, + 2883: 0x6310, + 2884: 0x6313, + 2885: 0x6316, + 2886: 0x6318, + 2887: 0x6329, + 2888: 0x632A, + 2889: 0x632D, + 2890: 0x6335, + 2891: 0x6336, + 2892: 0x6339, + 2893: 0x633C, + 2894: 0x6341, + 2895: 0x6342, + 2896: 0x6343, + 2897: 0x6344, + 2898: 0x6346, + 2899: 0x634A, + 2900: 0x634B, + 2901: 0x634E, + 2902: 0x6352, + 2903: 0x6353, + 2904: 0x6354, + 2905: 0x6358, + 2906: 0x635B, + 2907: 0x6365, + 2908: 0x6366, + 2909: 0x636C, + 2910: 0x636D, + 2911: 0x6371, + 2912: 0x6374, + 2913: 0x6375, + 2914: 0x6378, + 2915: 0x637C, + 2916: 0x637D, + 2917: 0x637F, + 2918: 0x6382, + 2919: 0x6384, + 2920: 0x6387, + 2921: 0x638A, + 2922: 0x6390, + 2923: 0x6394, + 2924: 0x6395, + 2925: 0x6399, + 2926: 0x639A, + 2927: 0x639E, + 2928: 0x63A4, + 2929: 0x63A6, + 2930: 0x63AD, + 2931: 0x63AE, + 2932: 0x63AF, + 2933: 0x63BD, + 2934: 0x63C1, + 2935: 0x63C5, + 2936: 0x63C8, + 2937: 0x63CE, + 2938: 0x63D1, + 2939: 0x63D3, + 2940: 0x63D4, + 2941: 0x63D5, + 2942: 0x63DC, + 2943: 0x63E0, + 2944: 0x63E5, + 2945: 0x63EA, + 2946: 0x63EC, + 2947: 0x63F2, + 2948: 0x63F3, + 2949: 0x63F5, + 2950: 0x63F8, + 2951: 0x63F9, + 2952: 0x6409, + 2953: 0x640A, + 2954: 0x6410, + 2955: 0x6412, + 2956: 0x6414, + 2957: 0x6418, + 2958: 0x641E, + 2959: 0x6420, + 2960: 0x6422, + 2961: 0x6424, + 2962: 0x6425, + 2963: 0x6429, + 2964: 0x642A, + 2965: 0x642F, + 2966: 0x6430, + 2967: 0x6435, + 2968: 0x643D, + 2969: 0x643F, + 2970: 0x644B, + 2971: 0x644F, + 2972: 0x6451, + 2973: 0x6452, + 2974: 0x6453, + 2975: 0x6454, + 2976: 0x645A, + 2977: 0x645B, + 2978: 0x645C, + 2979: 0x645D, + 2980: 0x645F, + 2981: 0x6460, + 2982: 0x6461, + 2983: 0x6463, + 2984: 0x646D, + 2985: 0x6473, + 2986: 0x6474, + 2987: 0x647B, + 2988: 0x647D, + 2989: 0x6485, + 2990: 0x6487, + 2991: 0x648F, + 2992: 0x6490, + 2993: 0x6491, + 2994: 0x6498, + 2995: 0x6499, + 2996: 0x649B, + 2997: 0x649D, + 2998: 0x649F, + 2999: 0x64A1, + 3000: 0x64A3, + 3001: 0x64A6, + 3002: 0x64A8, + 3003: 0x64AC, + 3004: 0x64B3, + 3005: 0x64BD, + 3006: 0x64BE, + 3007: 0x64BF, + 3008: 0x64C4, + 3009: 0x64C9, + 3010: 0x64CA, + 3011: 0x64CB, + 3012: 0x64CC, + 3013: 0x64CE, + 3014: 0x64D0, + 3015: 0x64D1, + 3016: 0x64D5, + 3017: 0x64D7, + 3018: 0x64E4, + 3019: 0x64E5, + 3020: 0x64E9, + 3021: 0x64EA, + 3022: 0x64ED, + 3023: 0x64F0, + 3024: 0x64F5, + 3025: 0x64F7, + 3026: 0x64FB, + 3027: 0x64FF, + 3028: 0x6501, + 3029: 0x6504, + 3030: 0x6508, + 3031: 0x6509, + 3032: 0x650A, + 3033: 0x650F, + 3034: 0x6513, + 3035: 0x6514, + 3036: 0x6516, + 3037: 0x6519, + 3038: 0x651B, + 3039: 0x651E, + 3040: 0x651F, + 3041: 0x6522, + 3042: 0x6526, + 3043: 0x6529, + 3044: 0x652E, + 3045: 0x6531, + 3046: 0x653A, + 3047: 0x653C, + 3048: 0x653D, + 3049: 0x6543, + 3050: 0x6547, + 3051: 0x6549, + 3052: 0x6550, + 3053: 0x6552, + 3054: 0x6554, + 3055: 0x655F, + 3056: 0x6560, + 3057: 0x6567, + 3058: 0x656B, + 3059: 0x657A, + 3060: 0x657D, + 3061: 0x6581, + 3062: 0x6585, + 3063: 0x658A, + 3064: 0x6592, + 3065: 0x6595, + 3066: 0x6598, + 3067: 0x659D, + 3068: 0x65A0, + 3069: 0x65A3, + 3070: 0x65A6, + 3071: 0x65AE, + 3072: 0x65B2, + 3073: 0x65B3, + 3074: 0x65B4, + 3075: 0x65BF, + 3076: 0x65C2, + 3077: 0x65C8, + 3078: 0x65C9, + 3079: 0x65CE, + 3080: 0x65D0, + 3081: 0x65D4, + 3082: 0x65D6, + 3083: 0x65D8, + 3084: 0x65DF, + 3085: 0x65F0, + 3086: 0x65F2, + 3087: 0x65F4, + 3088: 0x65F5, + 3089: 0x65F9, + 3090: 0x65FE, + 3091: 0x65FF, + 3092: 0x6600, + 3093: 0x6604, + 3094: 0x6608, + 3095: 0x6609, + 3096: 0x660D, + 3097: 0x6611, + 3098: 0x6612, + 3099: 0x6615, + 3100: 0x6616, + 3101: 0x661D, + 3102: 0x661E, + 3103: 0x6621, + 3104: 0x6622, + 3105: 0x6623, + 3106: 0x6624, + 3107: 0x6626, + 3108: 0x6629, + 3109: 0x662A, + 3110: 0x662B, + 3111: 0x662C, + 3112: 0x662E, + 3113: 0x6630, + 3114: 0x6631, + 3115: 0x6633, + 3116: 0x6639, + 3117: 0x6637, + 3118: 0x6640, + 3119: 0x6645, + 3120: 0x6646, + 3121: 0x664A, + 3122: 0x664C, + 3123: 0x6651, + 3124: 0x664E, + 3125: 0x6657, + 3126: 0x6658, + 3127: 0x6659, + 3128: 0x665B, + 3129: 0x665C, + 3130: 0x6660, + 3131: 0x6661, + 3132: 0x66FB, + 3133: 0x666A, + 3134: 0x666B, + 3135: 0x666C, + 3136: 0x667E, + 3137: 0x6673, + 3138: 0x6675, + 3139: 0x667F, + 3140: 0x6677, + 3141: 0x6678, + 3142: 0x6679, + 3143: 0x667B, + 3144: 0x6680, + 3145: 0x667C, + 3146: 0x668B, + 3147: 0x668C, + 3148: 0x668D, + 3149: 0x6690, + 3150: 0x6692, + 3151: 0x6699, + 3152: 0x669A, + 3153: 0x669B, + 3154: 0x669C, + 3155: 0x669F, + 3156: 0x66A0, + 3157: 0x66A4, + 3158: 0x66AD, + 3159: 0x66B1, + 3160: 0x66B2, + 3161: 0x66B5, + 3162: 0x66BB, + 3163: 0x66BF, + 3164: 0x66C0, + 3165: 0x66C2, + 3166: 0x66C3, + 3167: 0x66C8, + 3168: 0x66CC, + 3169: 0x66CE, + 3170: 0x66CF, + 3171: 0x66D4, + 3172: 0x66DB, + 3173: 0x66DF, + 3174: 0x66E8, + 3175: 0x66EB, + 3176: 0x66EC, + 3177: 0x66EE, + 3178: 0x66FA, + 3179: 0x6705, + 3180: 0x6707, + 3181: 0x670E, + 3182: 0x6713, + 3183: 0x6719, + 3184: 0x671C, + 3185: 0x6720, + 3186: 0x6722, + 3187: 0x6733, + 3188: 0x673E, + 3189: 0x6745, + 3190: 0x6747, + 3191: 0x6748, + 3192: 0x674C, + 3193: 0x6754, + 3194: 0x6755, + 3195: 0x675D, + 3196: 0x6766, + 3197: 0x676C, + 3198: 0x676E, + 3199: 0x6774, + 3200: 0x6776, + 3201: 0x677B, + 3202: 0x6781, + 3203: 0x6784, + 3204: 0x678E, + 3205: 0x678F, + 3206: 0x6791, + 3207: 0x6793, + 3208: 0x6796, + 3209: 0x6798, + 3210: 0x6799, + 3211: 0x679B, + 3212: 0x67B0, + 3213: 0x67B1, + 3214: 0x67B2, + 3215: 0x67B5, + 3216: 0x67BB, + 3217: 0x67BC, + 3218: 0x67BD, + 3219: 0x67F9, + 3220: 0x67C0, + 3221: 0x67C2, + 3222: 0x67C3, + 3223: 0x67C5, + 3224: 0x67C8, + 3225: 0x67C9, + 3226: 0x67D2, + 3227: 0x67D7, + 3228: 0x67D9, + 3229: 0x67DC, + 3230: 0x67E1, + 3231: 0x67E6, + 3232: 0x67F0, + 3233: 0x67F2, + 3234: 0x67F6, + 3235: 0x67F7, + 3236: 0x6852, + 3237: 0x6814, + 3238: 0x6819, + 3239: 0x681D, + 3240: 0x681F, + 3241: 0x6828, + 3242: 0x6827, + 3243: 0x682C, + 3244: 0x682D, + 3245: 0x682F, + 3246: 0x6830, + 3247: 0x6831, + 3248: 0x6833, + 3249: 0x683B, + 3250: 0x683F, + 3251: 0x6844, + 3252: 0x6845, + 3253: 0x684A, + 3254: 0x684C, + 3255: 0x6855, + 3256: 0x6857, + 3257: 0x6858, + 3258: 0x685B, + 3259: 0x686B, + 3260: 0x686E, + 3261: 0x686F, + 3262: 0x6870, + 3263: 0x6871, + 3264: 0x6872, + 3265: 0x6875, + 3266: 0x6879, + 3267: 0x687A, + 3268: 0x687B, + 3269: 0x687C, + 3270: 0x6882, + 3271: 0x6884, + 3272: 0x6886, + 3273: 0x6888, + 3274: 0x6896, + 3275: 0x6898, + 3276: 0x689A, + 3277: 0x689C, + 3278: 0x68A1, + 3279: 0x68A3, + 3280: 0x68A5, + 3281: 0x68A9, + 3282: 0x68AA, + 3283: 0x68AE, + 3284: 0x68B2, + 3285: 0x68BB, + 3286: 0x68C5, + 3287: 0x68C8, + 3288: 0x68CC, + 3289: 0x68CF, + 3290: 0x68D0, + 3291: 0x68D1, + 3292: 0x68D3, + 3293: 0x68D6, + 3294: 0x68D9, + 3295: 0x68DC, + 3296: 0x68DD, + 3297: 0x68E5, + 3298: 0x68E8, + 3299: 0x68EA, + 3300: 0x68EB, + 3301: 0x68EC, + 3302: 0x68ED, + 3303: 0x68F0, + 3304: 0x68F1, + 3305: 0x68F5, + 3306: 0x68F6, + 3307: 0x68FB, + 3308: 0x68FC, + 3309: 0x68FD, + 3310: 0x6906, + 3311: 0x6909, + 3312: 0x690A, + 3313: 0x6910, + 3314: 0x6911, + 3315: 0x6913, + 3316: 0x6916, + 3317: 0x6917, + 3318: 0x6931, + 3319: 0x6933, + 3320: 0x6935, + 3321: 0x6938, + 3322: 0x693B, + 3323: 0x6942, + 3324: 0x6945, + 3325: 0x6949, + 3326: 0x694E, + 3327: 0x6957, + 3328: 0x695B, + 3329: 0x6963, + 3330: 0x6964, + 3331: 0x6965, + 3332: 0x6966, + 3333: 0x6968, + 3334: 0x6969, + 3335: 0x696C, + 3336: 0x6970, + 3337: 0x6971, + 3338: 0x6972, + 3339: 0x697A, + 3340: 0x697B, + 3341: 0x697F, + 3342: 0x6980, + 3343: 0x698D, + 3344: 0x6992, + 3345: 0x6996, + 3346: 0x6998, + 3347: 0x69A1, + 3348: 0x69A5, + 3349: 0x69A6, + 3350: 0x69A8, + 3351: 0x69AB, + 3352: 0x69AD, + 3353: 0x69AF, + 3354: 0x69B7, + 3355: 0x69B8, + 3356: 0x69BA, + 3357: 0x69BC, + 3358: 0x69C5, + 3359: 0x69C8, + 3360: 0x69D1, + 3361: 0x69D6, + 3362: 0x69D7, + 3363: 0x69E2, + 3364: 0x69E5, + 3365: 0x69EE, + 3366: 0x69EF, + 3367: 0x69F1, + 3368: 0x69F3, + 3369: 0x69F5, + 3370: 0x69FE, + 3371: 0x6A00, + 3372: 0x6A01, + 3373: 0x6A03, + 3374: 0x6A0F, + 3375: 0x6A11, + 3376: 0x6A15, + 3377: 0x6A1A, + 3378: 0x6A1D, + 3379: 0x6A20, + 3380: 0x6A24, + 3381: 0x6A28, + 3382: 0x6A30, + 3383: 0x6A32, + 3384: 0x6A34, + 3385: 0x6A37, + 3386: 0x6A3B, + 3387: 0x6A3E, + 3388: 0x6A3F, + 3389: 0x6A45, + 3390: 0x6A46, + 3391: 0x6A49, + 3392: 0x6A4A, + 3393: 0x6A4E, + 3394: 0x6A50, + 3395: 0x6A51, + 3396: 0x6A52, + 3397: 0x6A55, + 3398: 0x6A56, + 3399: 0x6A5B, + 3400: 0x6A64, + 3401: 0x6A67, + 3402: 0x6A6A, + 3403: 0x6A71, + 3404: 0x6A73, + 3405: 0x6A7E, + 3406: 0x6A81, + 3407: 0x6A83, + 3408: 0x6A86, + 3409: 0x6A87, + 3410: 0x6A89, + 3411: 0x6A8B, + 3412: 0x6A91, + 3413: 0x6A9B, + 3414: 0x6A9D, + 3415: 0x6A9E, + 3416: 0x6A9F, + 3417: 0x6AA5, + 3418: 0x6AAB, + 3419: 0x6AAF, + 3420: 0x6AB0, + 3421: 0x6AB1, + 3422: 0x6AB4, + 3423: 0x6ABD, + 3424: 0x6ABE, + 3425: 0x6ABF, + 3426: 0x6AC6, + 3427: 0x6AC9, + 3428: 0x6AC8, + 3429: 0x6ACC, + 3430: 0x6AD0, + 3431: 0x6AD4, + 3432: 0x6AD5, + 3433: 0x6AD6, + 3434: 0x6ADC, + 3435: 0x6ADD, + 3436: 0x6AE4, + 3437: 0x6AE7, + 3438: 0x6AEC, + 3439: 0x6AF0, + 3440: 0x6AF1, + 3441: 0x6AF2, + 3442: 0x6AFC, + 3443: 0x6AFD, + 3444: 0x6B02, + 3445: 0x6B03, + 3446: 0x6B06, + 3447: 0x6B07, + 3448: 0x6B09, + 3449: 0x6B0F, + 3450: 0x6B10, + 3451: 0x6B11, + 3452: 0x6B17, + 3453: 0x6B1B, + 3454: 0x6B1E, + 3455: 0x6B24, + 3456: 0x6B28, + 3457: 0x6B2B, + 3458: 0x6B2C, + 3459: 0x6B2F, + 3460: 0x6B35, + 3461: 0x6B36, + 3462: 0x6B3B, + 3463: 0x6B3F, + 3464: 0x6B46, + 3465: 0x6B4A, + 3466: 0x6B4D, + 3467: 0x6B52, + 3468: 0x6B56, + 3469: 0x6B58, + 3470: 0x6B5D, + 3471: 0x6B60, + 3472: 0x6B67, + 3473: 0x6B6B, + 3474: 0x6B6E, + 3475: 0x6B70, + 3476: 0x6B75, + 3477: 0x6B7D, + 3478: 0x6B7E, + 3479: 0x6B82, + 3480: 0x6B85, + 3481: 0x6B97, + 3482: 0x6B9B, + 3483: 0x6B9F, + 3484: 0x6BA0, + 3485: 0x6BA2, + 3486: 0x6BA3, + 3487: 0x6BA8, + 3488: 0x6BA9, + 3489: 0x6BAC, + 3490: 0x6BAD, + 3491: 0x6BAE, + 3492: 0x6BB0, + 3493: 0x6BB8, + 3494: 0x6BB9, + 3495: 0x6BBD, + 3496: 0x6BBE, + 3497: 0x6BC3, + 3498: 0x6BC4, + 3499: 0x6BC9, + 3500: 0x6BCC, + 3501: 0x6BD6, + 3502: 0x6BDA, + 3503: 0x6BE1, + 3504: 0x6BE3, + 3505: 0x6BE6, + 3506: 0x6BE7, + 3507: 0x6BEE, + 3508: 0x6BF1, + 3509: 0x6BF7, + 3510: 0x6BF9, + 3511: 0x6BFF, + 3512: 0x6C02, + 3513: 0x6C04, + 3514: 0x6C05, + 3515: 0x6C09, + 3516: 0x6C0D, + 3517: 0x6C0E, + 3518: 0x6C10, + 3519: 0x6C12, + 3520: 0x6C19, + 3521: 0x6C1F, + 3522: 0x6C26, + 3523: 0x6C27, + 3524: 0x6C28, + 3525: 0x6C2C, + 3526: 0x6C2E, + 3527: 0x6C33, + 3528: 0x6C35, + 3529: 0x6C36, + 3530: 0x6C3A, + 3531: 0x6C3B, + 3532: 0x6C3F, + 3533: 0x6C4A, + 3534: 0x6C4B, + 3535: 0x6C4D, + 3536: 0x6C4F, + 3537: 0x6C52, + 3538: 0x6C54, + 3539: 0x6C59, + 3540: 0x6C5B, + 3541: 0x6C5C, + 3542: 0x6C6B, + 3543: 0x6C6D, + 3544: 0x6C6F, + 3545: 0x6C74, + 3546: 0x6C76, + 3547: 0x6C78, + 3548: 0x6C79, + 3549: 0x6C7B, + 3550: 0x6C85, + 3551: 0x6C86, + 3552: 0x6C87, + 3553: 0x6C89, + 3554: 0x6C94, + 3555: 0x6C95, + 3556: 0x6C97, + 3557: 0x6C98, + 3558: 0x6C9C, + 3559: 0x6C9F, + 3560: 0x6CB0, + 3561: 0x6CB2, + 3562: 0x6CB4, + 3563: 0x6CC2, + 3564: 0x6CC6, + 3565: 0x6CCD, + 3566: 0x6CCF, + 3567: 0x6CD0, + 3568: 0x6CD1, + 3569: 0x6CD2, + 3570: 0x6CD4, + 3571: 0x6CD6, + 3572: 0x6CDA, + 3573: 0x6CDC, + 3574: 0x6CE0, + 3575: 0x6CE7, + 3576: 0x6CE9, + 3577: 0x6CEB, + 3578: 0x6CEC, + 3579: 0x6CEE, + 3580: 0x6CF2, + 3581: 0x6CF4, + 3582: 0x6D04, + 3583: 0x6D07, + 3584: 0x6D0A, + 3585: 0x6D0E, + 3586: 0x6D0F, + 3587: 0x6D11, + 3588: 0x6D13, + 3589: 0x6D1A, + 3590: 0x6D26, + 3591: 0x6D27, + 3592: 0x6D28, + 3593: 0x6C67, + 3594: 0x6D2E, + 3595: 0x6D2F, + 3596: 0x6D31, + 3597: 0x6D39, + 3598: 0x6D3C, + 3599: 0x6D3F, + 3600: 0x6D57, + 3601: 0x6D5E, + 3602: 0x6D5F, + 3603: 0x6D61, + 3604: 0x6D65, + 3605: 0x6D67, + 3606: 0x6D6F, + 3607: 0x6D70, + 3608: 0x6D7C, + 3609: 0x6D82, + 3610: 0x6D87, + 3611: 0x6D91, + 3612: 0x6D92, + 3613: 0x6D94, + 3614: 0x6D96, + 3615: 0x6D97, + 3616: 0x6D98, + 3617: 0x6DAA, + 3618: 0x6DAC, + 3619: 0x6DB4, + 3620: 0x6DB7, + 3621: 0x6DB9, + 3622: 0x6DBD, + 3623: 0x6DBF, + 3624: 0x6DC4, + 3625: 0x6DC8, + 3626: 0x6DCA, + 3627: 0x6DCE, + 3628: 0x6DCF, + 3629: 0x6DD6, + 3630: 0x6DDB, + 3631: 0x6DDD, + 3632: 0x6DDF, + 3633: 0x6DE0, + 3634: 0x6DE2, + 3635: 0x6DE5, + 3636: 0x6DE9, + 3637: 0x6DEF, + 3638: 0x6DF0, + 3639: 0x6DF4, + 3640: 0x6DF6, + 3641: 0x6DFC, + 3642: 0x6E00, + 3643: 0x6E04, + 3644: 0x6E1E, + 3645: 0x6E22, + 3646: 0x6E27, + 3647: 0x6E32, + 3648: 0x6E36, + 3649: 0x6E39, + 3650: 0x6E3B, + 3651: 0x6E3C, + 3652: 0x6E44, + 3653: 0x6E45, + 3654: 0x6E48, + 3655: 0x6E49, + 3656: 0x6E4B, + 3657: 0x6E4F, + 3658: 0x6E51, + 3659: 0x6E52, + 3660: 0x6E53, + 3661: 0x6E54, + 3662: 0x6E57, + 3663: 0x6E5C, + 3664: 0x6E5D, + 3665: 0x6E5E, + 3666: 0x6E62, + 3667: 0x6E63, + 3668: 0x6E68, + 3669: 0x6E73, + 3670: 0x6E7B, + 3671: 0x6E7D, + 3672: 0x6E8D, + 3673: 0x6E93, + 3674: 0x6E99, + 3675: 0x6EA0, + 3676: 0x6EA7, + 3677: 0x6EAD, + 3678: 0x6EAE, + 3679: 0x6EB1, + 3680: 0x6EB3, + 3681: 0x6EBB, + 3682: 0x6EBF, + 3683: 0x6EC0, + 3684: 0x6EC1, + 3685: 0x6EC3, + 3686: 0x6EC7, + 3687: 0x6EC8, + 3688: 0x6ECA, + 3689: 0x6ECD, + 3690: 0x6ECE, + 3691: 0x6ECF, + 3692: 0x6EEB, + 3693: 0x6EED, + 3694: 0x6EEE, + 3695: 0x6EF9, + 3696: 0x6EFB, + 3697: 0x6EFD, + 3698: 0x6F04, + 3699: 0x6F08, + 3700: 0x6F0A, + 3701: 0x6F0C, + 3702: 0x6F0D, + 3703: 0x6F16, + 3704: 0x6F18, + 3705: 0x6F1A, + 3706: 0x6F1B, + 3707: 0x6F26, + 3708: 0x6F29, + 3709: 0x6F2A, + 3710: 0x6F2F, + 3711: 0x6F30, + 3712: 0x6F33, + 3713: 0x6F36, + 3714: 0x6F3B, + 3715: 0x6F3C, + 3716: 0x6F2D, + 3717: 0x6F4F, + 3718: 0x6F51, + 3719: 0x6F52, + 3720: 0x6F53, + 3721: 0x6F57, + 3722: 0x6F59, + 3723: 0x6F5A, + 3724: 0x6F5D, + 3725: 0x6F5E, + 3726: 0x6F61, + 3727: 0x6F62, + 3728: 0x6F68, + 3729: 0x6F6C, + 3730: 0x6F7D, + 3731: 0x6F7E, + 3732: 0x6F83, + 3733: 0x6F87, + 3734: 0x6F88, + 3735: 0x6F8B, + 3736: 0x6F8C, + 3737: 0x6F8D, + 3738: 0x6F90, + 3739: 0x6F92, + 3740: 0x6F93, + 3741: 0x6F94, + 3742: 0x6F96, + 3743: 0x6F9A, + 3744: 0x6F9F, + 3745: 0x6FA0, + 3746: 0x6FA5, + 3747: 0x6FA6, + 3748: 0x6FA7, + 3749: 0x6FA8, + 3750: 0x6FAE, + 3751: 0x6FAF, + 3752: 0x6FB0, + 3753: 0x6FB5, + 3754: 0x6FB6, + 3755: 0x6FBC, + 3756: 0x6FC5, + 3757: 0x6FC7, + 3758: 0x6FC8, + 3759: 0x6FCA, + 3760: 0x6FDA, + 3761: 0x6FDE, + 3762: 0x6FE8, + 3763: 0x6FE9, + 3764: 0x6FF0, + 3765: 0x6FF5, + 3766: 0x6FF9, + 3767: 0x6FFC, + 3768: 0x6FFD, + 3769: 0x7000, + 3770: 0x7005, + 3771: 0x7006, + 3772: 0x7007, + 3773: 0x700D, + 3774: 0x7017, + 3775: 0x7020, + 3776: 0x7023, + 3777: 0x702F, + 3778: 0x7034, + 3779: 0x7037, + 3780: 0x7039, + 3781: 0x703C, + 3782: 0x7043, + 3783: 0x7044, + 3784: 0x7048, + 3785: 0x7049, + 3786: 0x704A, + 3787: 0x704B, + 3788: 0x7054, + 3789: 0x7055, + 3790: 0x705D, + 3791: 0x705E, + 3792: 0x704E, + 3793: 0x7064, + 3794: 0x7065, + 3795: 0x706C, + 3796: 0x706E, + 3797: 0x7075, + 3798: 0x7076, + 3799: 0x707E, + 3800: 0x7081, + 3801: 0x7085, + 3802: 0x7086, + 3803: 0x7094, + 3804: 0x7095, + 3805: 0x7096, + 3806: 0x7097, + 3807: 0x7098, + 3808: 0x709B, + 3809: 0x70A4, + 3810: 0x70AB, + 3811: 0x70B0, + 3812: 0x70B1, + 3813: 0x70B4, + 3814: 0x70B7, + 3815: 0x70CA, + 3816: 0x70D1, + 3817: 0x70D3, + 3818: 0x70D4, + 3819: 0x70D5, + 3820: 0x70D6, + 3821: 0x70D8, + 3822: 0x70DC, + 3823: 0x70E4, + 3824: 0x70FA, + 3825: 0x7103, + 3826: 0x7104, + 3827: 0x7105, + 3828: 0x7106, + 3829: 0x7107, + 3830: 0x710B, + 3831: 0x710C, + 3832: 0x710F, + 3833: 0x711E, + 3834: 0x7120, + 3835: 0x712B, + 3836: 0x712D, + 3837: 0x712F, + 3838: 0x7130, + 3839: 0x7131, + 3840: 0x7138, + 3841: 0x7141, + 3842: 0x7145, + 3843: 0x7146, + 3844: 0x7147, + 3845: 0x714A, + 3846: 0x714B, + 3847: 0x7150, + 3848: 0x7152, + 3849: 0x7157, + 3850: 0x715A, + 3851: 0x715C, + 3852: 0x715E, + 3853: 0x7160, + 3854: 0x7168, + 3855: 0x7179, + 3856: 0x7180, + 3857: 0x7185, + 3858: 0x7187, + 3859: 0x718C, + 3860: 0x7192, + 3861: 0x719A, + 3862: 0x719B, + 3863: 0x71A0, + 3864: 0x71A2, + 3865: 0x71AF, + 3866: 0x71B0, + 3867: 0x71B2, + 3868: 0x71B3, + 3869: 0x71BA, + 3870: 0x71BF, + 3871: 0x71C0, + 3872: 0x71C1, + 3873: 0x71C4, + 3874: 0x71CB, + 3875: 0x71CC, + 3876: 0x71D3, + 3877: 0x71D6, + 3878: 0x71D9, + 3879: 0x71DA, + 3880: 0x71DC, + 3881: 0x71F8, + 3882: 0x71FE, + 3883: 0x7200, + 3884: 0x7207, + 3885: 0x7208, + 3886: 0x7209, + 3887: 0x7213, + 3888: 0x7217, + 3889: 0x721A, + 3890: 0x721D, + 3891: 0x721F, + 3892: 0x7224, + 3893: 0x722B, + 3894: 0x722F, + 3895: 0x7234, + 3896: 0x7238, + 3897: 0x7239, + 3898: 0x7241, + 3899: 0x7242, + 3900: 0x7243, + 3901: 0x7245, + 3902: 0x724E, + 3903: 0x724F, + 3904: 0x7250, + 3905: 0x7253, + 3906: 0x7255, + 3907: 0x7256, + 3908: 0x725A, + 3909: 0x725C, + 3910: 0x725E, + 3911: 0x7260, + 3912: 0x7263, + 3913: 0x7268, + 3914: 0x726B, + 3915: 0x726E, + 3916: 0x726F, + 3917: 0x7271, + 3918: 0x7277, + 3919: 0x7278, + 3920: 0x727B, + 3921: 0x727C, + 3922: 0x727F, + 3923: 0x7284, + 3924: 0x7289, + 3925: 0x728D, + 3926: 0x728E, + 3927: 0x7293, + 3928: 0x729B, + 3929: 0x72A8, + 3930: 0x72AD, + 3931: 0x72AE, + 3932: 0x72B1, + 3933: 0x72B4, + 3934: 0x72BE, + 3935: 0x72C1, + 3936: 0x72C7, + 3937: 0x72C9, + 3938: 0x72CC, + 3939: 0x72D5, + 3940: 0x72D6, + 3941: 0x72D8, + 3942: 0x72DF, + 3943: 0x72E5, + 3944: 0x72F3, + 3945: 0x72F4, + 3946: 0x72FA, + 3947: 0x72FB, + 3948: 0x72FE, + 3949: 0x7302, + 3950: 0x7304, + 3951: 0x7305, + 3952: 0x7307, + 3953: 0x730B, + 3954: 0x730D, + 3955: 0x7312, + 3956: 0x7313, + 3957: 0x7318, + 3958: 0x7319, + 3959: 0x731E, + 3960: 0x7322, + 3961: 0x7324, + 3962: 0x7327, + 3963: 0x7328, + 3964: 0x732C, + 3965: 0x7331, + 3966: 0x7332, + 3967: 0x7335, + 3968: 0x733A, + 3969: 0x733B, + 3970: 0x733D, + 3971: 0x7343, + 3972: 0x734D, + 3973: 0x7350, + 3974: 0x7352, + 3975: 0x7356, + 3976: 0x7358, + 3977: 0x735D, + 3978: 0x735E, + 3979: 0x735F, + 3980: 0x7360, + 3981: 0x7366, + 3982: 0x7367, + 3983: 0x7369, + 3984: 0x736B, + 3985: 0x736C, + 3986: 0x736E, + 3987: 0x736F, + 3988: 0x7371, + 3989: 0x7377, + 3990: 0x7379, + 3991: 0x737C, + 3992: 0x7380, + 3993: 0x7381, + 3994: 0x7383, + 3995: 0x7385, + 3996: 0x7386, + 3997: 0x738E, + 3998: 0x7390, + 3999: 0x7393, + 4000: 0x7395, + 4001: 0x7397, + 4002: 0x7398, + 4003: 0x739C, + 4004: 0x739E, + 4005: 0x739F, + 4006: 0x73A0, + 4007: 0x73A2, + 4008: 0x73A5, + 4009: 0x73A6, + 4010: 0x73AA, + 4011: 0x73AB, + 4012: 0x73AD, + 4013: 0x73B5, + 4014: 0x73B7, + 4015: 0x73B9, + 4016: 0x73BC, + 4017: 0x73BD, + 4018: 0x73BF, + 4019: 0x73C5, + 4020: 0x73C6, + 4021: 0x73C9, + 4022: 0x73CB, + 4023: 0x73CC, + 4024: 0x73CF, + 4025: 0x73D2, + 4026: 0x73D3, + 4027: 0x73D6, + 4028: 0x73D9, + 4029: 0x73DD, + 4030: 0x73E1, + 4031: 0x73E3, + 4032: 0x73E6, + 4033: 0x73E7, + 4034: 0x73E9, + 4035: 0x73F4, + 4036: 0x73F5, + 4037: 0x73F7, + 4038: 0x73F9, + 4039: 0x73FA, + 4040: 0x73FB, + 4041: 0x73FD, + 4042: 0x73FF, + 4043: 0x7400, + 4044: 0x7401, + 4045: 0x7404, + 4046: 0x7407, + 4047: 0x740A, + 4048: 0x7411, + 4049: 0x741A, + 4050: 0x741B, + 4051: 0x7424, + 4052: 0x7426, + 4053: 0x7428, + 4054: 0x7429, + 4055: 0x742A, + 4056: 0x742B, + 4057: 0x742C, + 4058: 0x742D, + 4059: 0x742E, + 4060: 0x742F, + 4061: 0x7430, + 4062: 0x7431, + 4063: 0x7439, + 4064: 0x7440, + 4065: 0x7443, + 4066: 0x7444, + 4067: 0x7446, + 4068: 0x7447, + 4069: 0x744B, + 4070: 0x744D, + 4071: 0x7451, + 4072: 0x7452, + 4073: 0x7457, + 4074: 0x745D, + 4075: 0x7462, + 4076: 0x7466, + 4077: 0x7467, + 4078: 0x7468, + 4079: 0x746B, + 4080: 0x746D, + 4081: 0x746E, + 4082: 0x7471, + 4083: 0x7472, + 4084: 0x7480, + 4085: 0x7481, + 4086: 0x7485, + 4087: 0x7486, + 4088: 0x7487, + 4089: 0x7489, + 4090: 0x748F, + 4091: 0x7490, + 4092: 0x7491, + 4093: 0x7492, + 4094: 0x7498, + 4095: 0x7499, + 4096: 0x749A, + 4097: 0x749C, + 4098: 0x749F, + 4099: 0x74A0, + 4100: 0x74A1, + 4101: 0x74A3, + 4102: 0x74A6, + 4103: 0x74A8, + 4104: 0x74A9, + 4105: 0x74AA, + 4106: 0x74AB, + 4107: 0x74AE, + 4108: 0x74AF, + 4109: 0x74B1, + 4110: 0x74B2, + 4111: 0x74B5, + 4112: 0x74B9, + 4113: 0x74BB, + 4114: 0x74BF, + 4115: 0x74C8, + 4116: 0x74C9, + 4117: 0x74CC, + 4118: 0x74D0, + 4119: 0x74D3, + 4120: 0x74D8, + 4121: 0x74DA, + 4122: 0x74DB, + 4123: 0x74DE, + 4124: 0x74DF, + 4125: 0x74E4, + 4126: 0x74E8, + 4127: 0x74EA, + 4128: 0x74EB, + 4129: 0x74EF, + 4130: 0x74F4, + 4131: 0x74FA, + 4132: 0x74FB, + 4133: 0x74FC, + 4134: 0x74FF, + 4135: 0x7506, + 4136: 0x7512, + 4137: 0x7516, + 4138: 0x7517, + 4139: 0x7520, + 4140: 0x7521, + 4141: 0x7524, + 4142: 0x7527, + 4143: 0x7529, + 4144: 0x752A, + 4145: 0x752F, + 4146: 0x7536, + 4147: 0x7539, + 4148: 0x753D, + 4149: 0x753E, + 4150: 0x753F, + 4151: 0x7540, + 4152: 0x7543, + 4153: 0x7547, + 4154: 0x7548, + 4155: 0x754E, + 4156: 0x7550, + 4157: 0x7552, + 4158: 0x7557, + 4159: 0x755E, + 4160: 0x755F, + 4161: 0x7561, + 4162: 0x756F, + 4163: 0x7571, + 4164: 0x7579, + 4165: 0x757A, + 4166: 0x757B, + 4167: 0x757C, + 4168: 0x757D, + 4169: 0x757E, + 4170: 0x7581, + 4171: 0x7585, + 4172: 0x7590, + 4173: 0x7592, + 4174: 0x7593, + 4175: 0x7595, + 4176: 0x7599, + 4177: 0x759C, + 4178: 0x75A2, + 4179: 0x75A4, + 4180: 0x75B4, + 4181: 0x75BA, + 4182: 0x75BF, + 4183: 0x75C0, + 4184: 0x75C1, + 4185: 0x75C4, + 4186: 0x75C6, + 4187: 0x75CC, + 4188: 0x75CE, + 4189: 0x75CF, + 4190: 0x75D7, + 4191: 0x75DC, + 4192: 0x75DF, + 4193: 0x75E0, + 4194: 0x75E1, + 4195: 0x75E4, + 4196: 0x75E7, + 4197: 0x75EC, + 4198: 0x75EE, + 4199: 0x75EF, + 4200: 0x75F1, + 4201: 0x75F9, + 4202: 0x7600, + 4203: 0x7602, + 4204: 0x7603, + 4205: 0x7604, + 4206: 0x7607, + 4207: 0x7608, + 4208: 0x760A, + 4209: 0x760C, + 4210: 0x760F, + 4211: 0x7612, + 4212: 0x7613, + 4213: 0x7615, + 4214: 0x7616, + 4215: 0x7619, + 4216: 0x761B, + 4217: 0x761C, + 4218: 0x761D, + 4219: 0x761E, + 4220: 0x7623, + 4221: 0x7625, + 4222: 0x7626, + 4223: 0x7629, + 4224: 0x762D, + 4225: 0x7632, + 4226: 0x7633, + 4227: 0x7635, + 4228: 0x7638, + 4229: 0x7639, + 4230: 0x763A, + 4231: 0x763C, + 4232: 0x764A, + 4233: 0x7640, + 4234: 0x7641, + 4235: 0x7643, + 4236: 0x7644, + 4237: 0x7645, + 4238: 0x7649, + 4239: 0x764B, + 4240: 0x7655, + 4241: 0x7659, + 4242: 0x765F, + 4243: 0x7664, + 4244: 0x7665, + 4245: 0x766D, + 4246: 0x766E, + 4247: 0x766F, + 4248: 0x7671, + 4249: 0x7674, + 4250: 0x7681, + 4251: 0x7685, + 4252: 0x768C, + 4253: 0x768D, + 4254: 0x7695, + 4255: 0x769B, + 4256: 0x769C, + 4257: 0x769D, + 4258: 0x769F, + 4259: 0x76A0, + 4260: 0x76A2, + 4261: 0x76A3, + 4262: 0x76A4, + 4263: 0x76A5, + 4264: 0x76A6, + 4265: 0x76A7, + 4266: 0x76A8, + 4267: 0x76AA, + 4268: 0x76AD, + 4269: 0x76BD, + 4270: 0x76C1, + 4271: 0x76C5, + 4272: 0x76C9, + 4273: 0x76CB, + 4274: 0x76CC, + 4275: 0x76CE, + 4276: 0x76D4, + 4277: 0x76D9, + 4278: 0x76E0, + 4279: 0x76E6, + 4280: 0x76E8, + 4281: 0x76EC, + 4282: 0x76F0, + 4283: 0x76F1, + 4284: 0x76F6, + 4285: 0x76F9, + 4286: 0x76FC, + 4287: 0x7700, + 4288: 0x7706, + 4289: 0x770A, + 4290: 0x770E, + 4291: 0x7712, + 4292: 0x7714, + 4293: 0x7715, + 4294: 0x7717, + 4295: 0x7719, + 4296: 0x771A, + 4297: 0x771C, + 4298: 0x7722, + 4299: 0x7728, + 4300: 0x772D, + 4301: 0x772E, + 4302: 0x772F, + 4303: 0x7734, + 4304: 0x7735, + 4305: 0x7736, + 4306: 0x7739, + 4307: 0x773D, + 4308: 0x773E, + 4309: 0x7742, + 4310: 0x7745, + 4311: 0x7746, + 4312: 0x774A, + 4313: 0x774D, + 4314: 0x774E, + 4315: 0x774F, + 4316: 0x7752, + 4317: 0x7756, + 4318: 0x7757, + 4319: 0x775C, + 4320: 0x775E, + 4321: 0x775F, + 4322: 0x7760, + 4323: 0x7762, + 4324: 0x7764, + 4325: 0x7767, + 4326: 0x776A, + 4327: 0x776C, + 4328: 0x7770, + 4329: 0x7772, + 4330: 0x7773, + 4331: 0x7774, + 4332: 0x777A, + 4333: 0x777D, + 4334: 0x7780, + 4335: 0x7784, + 4336: 0x778C, + 4337: 0x778D, + 4338: 0x7794, + 4339: 0x7795, + 4340: 0x7796, + 4341: 0x779A, + 4342: 0x779F, + 4343: 0x77A2, + 4344: 0x77A7, + 4345: 0x77AA, + 4346: 0x77AE, + 4347: 0x77AF, + 4348: 0x77B1, + 4349: 0x77B5, + 4350: 0x77BE, + 4351: 0x77C3, + 4352: 0x77C9, + 4353: 0x77D1, + 4354: 0x77D2, + 4355: 0x77D5, + 4356: 0x77D9, + 4357: 0x77DE, + 4358: 0x77DF, + 4359: 0x77E0, + 4360: 0x77E4, + 4361: 0x77E6, + 4362: 0x77EA, + 4363: 0x77EC, + 4364: 0x77F0, + 4365: 0x77F1, + 4366: 0x77F4, + 4367: 0x77F8, + 4368: 0x77FB, + 4369: 0x7805, + 4370: 0x7806, + 4371: 0x7809, + 4372: 0x780D, + 4373: 0x780E, + 4374: 0x7811, + 4375: 0x781D, + 4376: 0x7821, + 4377: 0x7822, + 4378: 0x7823, + 4379: 0x782D, + 4380: 0x782E, + 4381: 0x7830, + 4382: 0x7835, + 4383: 0x7837, + 4384: 0x7843, + 4385: 0x7844, + 4386: 0x7847, + 4387: 0x7848, + 4388: 0x784C, + 4389: 0x784E, + 4390: 0x7852, + 4391: 0x785C, + 4392: 0x785E, + 4393: 0x7860, + 4394: 0x7861, + 4395: 0x7863, + 4396: 0x7864, + 4397: 0x7868, + 4398: 0x786A, + 4399: 0x786E, + 4400: 0x787A, + 4401: 0x787E, + 4402: 0x788A, + 4403: 0x788F, + 4404: 0x7894, + 4405: 0x7898, + 4406: 0x78A1, + 4407: 0x789D, + 4408: 0x789E, + 4409: 0x789F, + 4410: 0x78A4, + 4411: 0x78A8, + 4412: 0x78AC, + 4413: 0x78AD, + 4414: 0x78B0, + 4415: 0x78B1, + 4416: 0x78B2, + 4417: 0x78B3, + 4418: 0x78BB, + 4419: 0x78BD, + 4420: 0x78BF, + 4421: 0x78C7, + 4422: 0x78C8, + 4423: 0x78C9, + 4424: 0x78CC, + 4425: 0x78CE, + 4426: 0x78D2, + 4427: 0x78D3, + 4428: 0x78D5, + 4429: 0x78D6, + 4430: 0x78E4, + 4431: 0x78DB, + 4432: 0x78DF, + 4433: 0x78E0, + 4434: 0x78E1, + 4435: 0x78E6, + 4436: 0x78EA, + 4437: 0x78F2, + 4438: 0x78F3, + 4439: 0x7900, + 4440: 0x78F6, + 4441: 0x78F7, + 4442: 0x78FA, + 4443: 0x78FB, + 4444: 0x78FF, + 4445: 0x7906, + 4446: 0x790C, + 4447: 0x7910, + 4448: 0x791A, + 4449: 0x791C, + 4450: 0x791E, + 4451: 0x791F, + 4452: 0x7920, + 4453: 0x7925, + 4454: 0x7927, + 4455: 0x7929, + 4456: 0x792D, + 4457: 0x7931, + 4458: 0x7934, + 4459: 0x7935, + 4460: 0x793B, + 4461: 0x793D, + 4462: 0x793F, + 4463: 0x7944, + 4464: 0x7945, + 4465: 0x7946, + 4466: 0x794A, + 4467: 0x794B, + 4468: 0x794F, + 4469: 0x7951, + 4470: 0x7954, + 4471: 0x7958, + 4472: 0x795B, + 4473: 0x795C, + 4474: 0x7967, + 4475: 0x7969, + 4476: 0x796B, + 4477: 0x7972, + 4478: 0x7979, + 4479: 0x797B, + 4480: 0x797C, + 4481: 0x797E, + 4482: 0x798B, + 4483: 0x798C, + 4484: 0x7991, + 4485: 0x7993, + 4486: 0x7994, + 4487: 0x7995, + 4488: 0x7996, + 4489: 0x7998, + 4490: 0x799B, + 4491: 0x799C, + 4492: 0x79A1, + 4493: 0x79A8, + 4494: 0x79A9, + 4495: 0x79AB, + 4496: 0x79AF, + 4497: 0x79B1, + 4498: 0x79B4, + 4499: 0x79B8, + 4500: 0x79BB, + 4501: 0x79C2, + 4502: 0x79C4, + 4503: 0x79C7, + 4504: 0x79C8, + 4505: 0x79CA, + 4506: 0x79CF, + 4507: 0x79D4, + 4508: 0x79D6, + 4509: 0x79DA, + 4510: 0x79DD, + 4511: 0x79DE, + 4512: 0x79E0, + 4513: 0x79E2, + 4514: 0x79E5, + 4515: 0x79EA, + 4516: 0x79EB, + 4517: 0x79ED, + 4518: 0x79F1, + 4519: 0x79F8, + 4520: 0x79FC, + 4521: 0x7A02, + 4522: 0x7A03, + 4523: 0x7A07, + 4524: 0x7A09, + 4525: 0x7A0A, + 4526: 0x7A0C, + 4527: 0x7A11, + 4528: 0x7A15, + 4529: 0x7A1B, + 4530: 0x7A1E, + 4531: 0x7A21, + 4532: 0x7A27, + 4533: 0x7A2B, + 4534: 0x7A2D, + 4535: 0x7A2F, + 4536: 0x7A30, + 4537: 0x7A34, + 4538: 0x7A35, + 4539: 0x7A38, + 4540: 0x7A39, + 4541: 0x7A3A, + 4542: 0x7A44, + 4543: 0x7A45, + 4544: 0x7A47, + 4545: 0x7A48, + 4546: 0x7A4C, + 4547: 0x7A55, + 4548: 0x7A56, + 4549: 0x7A59, + 4550: 0x7A5C, + 4551: 0x7A5D, + 4552: 0x7A5F, + 4553: 0x7A60, + 4554: 0x7A65, + 4555: 0x7A67, + 4556: 0x7A6A, + 4557: 0x7A6D, + 4558: 0x7A75, + 4559: 0x7A78, + 4560: 0x7A7E, + 4561: 0x7A80, + 4562: 0x7A82, + 4563: 0x7A85, + 4564: 0x7A86, + 4565: 0x7A8A, + 4566: 0x7A8B, + 4567: 0x7A90, + 4568: 0x7A91, + 4569: 0x7A94, + 4570: 0x7A9E, + 4571: 0x7AA0, + 4572: 0x7AA3, + 4573: 0x7AAC, + 4574: 0x7AB3, + 4575: 0x7AB5, + 4576: 0x7AB9, + 4577: 0x7ABB, + 4578: 0x7ABC, + 4579: 0x7AC6, + 4580: 0x7AC9, + 4581: 0x7ACC, + 4582: 0x7ACE, + 4583: 0x7AD1, + 4584: 0x7ADB, + 4585: 0x7AE8, + 4586: 0x7AE9, + 4587: 0x7AEB, + 4588: 0x7AEC, + 4589: 0x7AF1, + 4590: 0x7AF4, + 4591: 0x7AFB, + 4592: 0x7AFD, + 4593: 0x7AFE, + 4594: 0x7B07, + 4595: 0x7B14, + 4596: 0x7B1F, + 4597: 0x7B23, + 4598: 0x7B27, + 4599: 0x7B29, + 4600: 0x7B2A, + 4601: 0x7B2B, + 4602: 0x7B2D, + 4603: 0x7B2E, + 4604: 0x7B2F, + 4605: 0x7B30, + 4606: 0x7B31, + 4607: 0x7B34, + 4608: 0x7B3D, + 4609: 0x7B3F, + 4610: 0x7B40, + 4611: 0x7B41, + 4612: 0x7B47, + 4613: 0x7B4E, + 4614: 0x7B55, + 4615: 0x7B60, + 4616: 0x7B64, + 4617: 0x7B66, + 4618: 0x7B69, + 4619: 0x7B6A, + 4620: 0x7B6D, + 4621: 0x7B6F, + 4622: 0x7B72, + 4623: 0x7B73, + 4624: 0x7B77, + 4625: 0x7B84, + 4626: 0x7B89, + 4627: 0x7B8E, + 4628: 0x7B90, + 4629: 0x7B91, + 4630: 0x7B96, + 4631: 0x7B9B, + 4632: 0x7B9E, + 4633: 0x7BA0, + 4634: 0x7BA5, + 4635: 0x7BAC, + 4636: 0x7BAF, + 4637: 0x7BB0, + 4638: 0x7BB2, + 4639: 0x7BB5, + 4640: 0x7BB6, + 4641: 0x7BBA, + 4642: 0x7BBB, + 4643: 0x7BBC, + 4644: 0x7BBD, + 4645: 0x7BC2, + 4646: 0x7BC5, + 4647: 0x7BC8, + 4648: 0x7BCA, + 4649: 0x7BD4, + 4650: 0x7BD6, + 4651: 0x7BD7, + 4652: 0x7BD9, + 4653: 0x7BDA, + 4654: 0x7BDB, + 4655: 0x7BE8, + 4656: 0x7BEA, + 4657: 0x7BF2, + 4658: 0x7BF4, + 4659: 0x7BF5, + 4660: 0x7BF8, + 4661: 0x7BF9, + 4662: 0x7BFA, + 4663: 0x7BFC, + 4664: 0x7BFE, + 4665: 0x7C01, + 4666: 0x7C02, + 4667: 0x7C03, + 4668: 0x7C04, + 4669: 0x7C06, + 4670: 0x7C09, + 4671: 0x7C0B, + 4672: 0x7C0C, + 4673: 0x7C0E, + 4674: 0x7C0F, + 4675: 0x7C19, + 4676: 0x7C1B, + 4677: 0x7C20, + 4678: 0x7C25, + 4679: 0x7C26, + 4680: 0x7C28, + 4681: 0x7C2C, + 4682: 0x7C31, + 4683: 0x7C33, + 4684: 0x7C34, + 4685: 0x7C36, + 4686: 0x7C39, + 4687: 0x7C3A, + 4688: 0x7C46, + 4689: 0x7C4A, + 4690: 0x7C55, + 4691: 0x7C51, + 4692: 0x7C52, + 4693: 0x7C53, + 4694: 0x7C59, + 4695: 0x7C5A, + 4696: 0x7C5B, + 4697: 0x7C5C, + 4698: 0x7C5D, + 4699: 0x7C5E, + 4700: 0x7C61, + 4701: 0x7C63, + 4702: 0x7C67, + 4703: 0x7C69, + 4704: 0x7C6D, + 4705: 0x7C6E, + 4706: 0x7C70, + 4707: 0x7C72, + 4708: 0x7C79, + 4709: 0x7C7C, + 4710: 0x7C7D, + 4711: 0x7C86, + 4712: 0x7C87, + 4713: 0x7C8F, + 4714: 0x7C94, + 4715: 0x7C9E, + 4716: 0x7CA0, + 4717: 0x7CA6, + 4718: 0x7CB0, + 4719: 0x7CB6, + 4720: 0x7CB7, + 4721: 0x7CBA, + 4722: 0x7CBB, + 4723: 0x7CBC, + 4724: 0x7CBF, + 4725: 0x7CC4, + 4726: 0x7CC7, + 4727: 0x7CC8, + 4728: 0x7CC9, + 4729: 0x7CCD, + 4730: 0x7CCF, + 4731: 0x7CD3, + 4732: 0x7CD4, + 4733: 0x7CD5, + 4734: 0x7CD7, + 4735: 0x7CD9, + 4736: 0x7CDA, + 4737: 0x7CDD, + 4738: 0x7CE6, + 4739: 0x7CE9, + 4740: 0x7CEB, + 4741: 0x7CF5, + 4742: 0x7D03, + 4743: 0x7D07, + 4744: 0x7D08, + 4745: 0x7D09, + 4746: 0x7D0F, + 4747: 0x7D11, + 4748: 0x7D12, + 4749: 0x7D13, + 4750: 0x7D16, + 4751: 0x7D1D, + 4752: 0x7D1E, + 4753: 0x7D23, + 4754: 0x7D26, + 4755: 0x7D2A, + 4756: 0x7D2D, + 4757: 0x7D31, + 4758: 0x7D3C, + 4759: 0x7D3D, + 4760: 0x7D3E, + 4761: 0x7D40, + 4762: 0x7D41, + 4763: 0x7D47, + 4764: 0x7D48, + 4765: 0x7D4D, + 4766: 0x7D51, + 4767: 0x7D53, + 4768: 0x7D57, + 4769: 0x7D59, + 4770: 0x7D5A, + 4771: 0x7D5C, + 4772: 0x7D5D, + 4773: 0x7D65, + 4774: 0x7D67, + 4775: 0x7D6A, + 4776: 0x7D70, + 4777: 0x7D78, + 4778: 0x7D7A, + 4779: 0x7D7B, + 4780: 0x7D7F, + 4781: 0x7D81, + 4782: 0x7D82, + 4783: 0x7D83, + 4784: 0x7D85, + 4785: 0x7D86, + 4786: 0x7D88, + 4787: 0x7D8B, + 4788: 0x7D8C, + 4789: 0x7D8D, + 4790: 0x7D91, + 4791: 0x7D96, + 4792: 0x7D97, + 4793: 0x7D9D, + 4794: 0x7D9E, + 4795: 0x7DA6, + 4796: 0x7DA7, + 4797: 0x7DAA, + 4798: 0x7DB3, + 4799: 0x7DB6, + 4800: 0x7DB7, + 4801: 0x7DB9, + 4802: 0x7DC2, + 4803: 0x7DC3, + 4804: 0x7DC4, + 4805: 0x7DC5, + 4806: 0x7DC6, + 4807: 0x7DCC, + 4808: 0x7DCD, + 4809: 0x7DCE, + 4810: 0x7DD7, + 4811: 0x7DD9, + 4812: 0x7E00, + 4813: 0x7DE2, + 4814: 0x7DE5, + 4815: 0x7DE6, + 4816: 0x7DEA, + 4817: 0x7DEB, + 4818: 0x7DED, + 4819: 0x7DF1, + 4820: 0x7DF5, + 4821: 0x7DF6, + 4822: 0x7DF9, + 4823: 0x7DFA, + 4824: 0x7E08, + 4825: 0x7E10, + 4826: 0x7E11, + 4827: 0x7E15, + 4828: 0x7E17, + 4829: 0x7E1C, + 4830: 0x7E1D, + 4831: 0x7E20, + 4832: 0x7E27, + 4833: 0x7E28, + 4834: 0x7E2C, + 4835: 0x7E2D, + 4836: 0x7E2F, + 4837: 0x7E33, + 4838: 0x7E36, + 4839: 0x7E3F, + 4840: 0x7E44, + 4841: 0x7E45, + 4842: 0x7E47, + 4843: 0x7E4E, + 4844: 0x7E50, + 4845: 0x7E52, + 4846: 0x7E58, + 4847: 0x7E5F, + 4848: 0x7E61, + 4849: 0x7E62, + 4850: 0x7E65, + 4851: 0x7E6B, + 4852: 0x7E6E, + 4853: 0x7E6F, + 4854: 0x7E73, + 4855: 0x7E78, + 4856: 0x7E7E, + 4857: 0x7E81, + 4858: 0x7E86, + 4859: 0x7E87, + 4860: 0x7E8A, + 4861: 0x7E8D, + 4862: 0x7E91, + 4863: 0x7E95, + 4864: 0x7E98, + 4865: 0x7E9A, + 4866: 0x7E9D, + 4867: 0x7E9E, + 4868: 0x7F3C, + 4869: 0x7F3B, + 4870: 0x7F3D, + 4871: 0x7F3E, + 4872: 0x7F3F, + 4873: 0x7F43, + 4874: 0x7F44, + 4875: 0x7F47, + 4876: 0x7F4F, + 4877: 0x7F52, + 4878: 0x7F53, + 4879: 0x7F5B, + 4880: 0x7F5C, + 4881: 0x7F5D, + 4882: 0x7F61, + 4883: 0x7F63, + 4884: 0x7F64, + 4885: 0x7F65, + 4886: 0x7F66, + 4887: 0x7F6D, + 4888: 0x7F71, + 4889: 0x7F7D, + 4890: 0x7F7E, + 4891: 0x7F7F, + 4892: 0x7F80, + 4893: 0x7F8B, + 4894: 0x7F8D, + 4895: 0x7F8F, + 4896: 0x7F90, + 4897: 0x7F91, + 4898: 0x7F96, + 4899: 0x7F97, + 4900: 0x7F9C, + 4901: 0x7FA1, + 4902: 0x7FA2, + 4903: 0x7FA6, + 4904: 0x7FAA, + 4905: 0x7FAD, + 4906: 0x7FB4, + 4907: 0x7FBC, + 4908: 0x7FBF, + 4909: 0x7FC0, + 4910: 0x7FC3, + 4911: 0x7FC8, + 4912: 0x7FCE, + 4913: 0x7FCF, + 4914: 0x7FDB, + 4915: 0x7FDF, + 4916: 0x7FE3, + 4917: 0x7FE5, + 4918: 0x7FE8, + 4919: 0x7FEC, + 4920: 0x7FEE, + 4921: 0x7FEF, + 4922: 0x7FF2, + 4923: 0x7FFA, + 4924: 0x7FFD, + 4925: 0x7FFE, + 4926: 0x7FFF, + 4927: 0x8007, + 4928: 0x8008, + 4929: 0x800A, + 4930: 0x800D, + 4931: 0x800E, + 4932: 0x800F, + 4933: 0x8011, + 4934: 0x8013, + 4935: 0x8014, + 4936: 0x8016, + 4937: 0x801D, + 4938: 0x801E, + 4939: 0x801F, + 4940: 0x8020, + 4941: 0x8024, + 4942: 0x8026, + 4943: 0x802C, + 4944: 0x802E, + 4945: 0x8030, + 4946: 0x8034, + 4947: 0x8035, + 4948: 0x8037, + 4949: 0x8039, + 4950: 0x803A, + 4951: 0x803C, + 4952: 0x803E, + 4953: 0x8040, + 4954: 0x8044, + 4955: 0x8060, + 4956: 0x8064, + 4957: 0x8066, + 4958: 0x806D, + 4959: 0x8071, + 4960: 0x8075, + 4961: 0x8081, + 4962: 0x8088, + 4963: 0x808E, + 4964: 0x809C, + 4965: 0x809E, + 4966: 0x80A6, + 4967: 0x80A7, + 4968: 0x80AB, + 4969: 0x80B8, + 4970: 0x80B9, + 4971: 0x80C8, + 4972: 0x80CD, + 4973: 0x80CF, + 4974: 0x80D2, + 4975: 0x80D4, + 4976: 0x80D5, + 4977: 0x80D7, + 4978: 0x80D8, + 4979: 0x80E0, + 4980: 0x80ED, + 4981: 0x80EE, + 4982: 0x80F0, + 4983: 0x80F2, + 4984: 0x80F3, + 4985: 0x80F6, + 4986: 0x80F9, + 4987: 0x80FA, + 4988: 0x80FE, + 4989: 0x8103, + 4990: 0x810B, + 4991: 0x8116, + 4992: 0x8117, + 4993: 0x8118, + 4994: 0x811C, + 4995: 0x811E, + 4996: 0x8120, + 4997: 0x8124, + 4998: 0x8127, + 4999: 0x812C, + 5000: 0x8130, + 5001: 0x8135, + 5002: 0x813A, + 5003: 0x813C, + 5004: 0x8145, + 5005: 0x8147, + 5006: 0x814A, + 5007: 0x814C, + 5008: 0x8152, + 5009: 0x8157, + 5010: 0x8160, + 5011: 0x8161, + 5012: 0x8167, + 5013: 0x8168, + 5014: 0x8169, + 5015: 0x816D, + 5016: 0x816F, + 5017: 0x8177, + 5018: 0x8181, + 5019: 0x8190, + 5020: 0x8184, + 5021: 0x8185, + 5022: 0x8186, + 5023: 0x818B, + 5024: 0x818E, + 5025: 0x8196, + 5026: 0x8198, + 5027: 0x819B, + 5028: 0x819E, + 5029: 0x81A2, + 5030: 0x81AE, + 5031: 0x81B2, + 5032: 0x81B4, + 5033: 0x81BB, + 5034: 0x81CB, + 5035: 0x81C3, + 5036: 0x81C5, + 5037: 0x81CA, + 5038: 0x81CE, + 5039: 0x81CF, + 5040: 0x81D5, + 5041: 0x81D7, + 5042: 0x81DB, + 5043: 0x81DD, + 5044: 0x81DE, + 5045: 0x81E1, + 5046: 0x81E4, + 5047: 0x81EB, + 5048: 0x81EC, + 5049: 0x81F0, + 5050: 0x81F1, + 5051: 0x81F2, + 5052: 0x81F5, + 5053: 0x81F6, + 5054: 0x81F8, + 5055: 0x81F9, + 5056: 0x81FD, + 5057: 0x81FF, + 5058: 0x8200, + 5059: 0x8203, + 5060: 0x820F, + 5061: 0x8213, + 5062: 0x8214, + 5063: 0x8219, + 5064: 0x821A, + 5065: 0x821D, + 5066: 0x8221, + 5067: 0x8222, + 5068: 0x8228, + 5069: 0x8232, + 5070: 0x8234, + 5071: 0x823A, + 5072: 0x8243, + 5073: 0x8244, + 5074: 0x8245, + 5075: 0x8246, + 5076: 0x824B, + 5077: 0x824E, + 5078: 0x824F, + 5079: 0x8251, + 5080: 0x8256, + 5081: 0x825C, + 5082: 0x8260, + 5083: 0x8263, + 5084: 0x8267, + 5085: 0x826D, + 5086: 0x8274, + 5087: 0x827B, + 5088: 0x827D, + 5089: 0x827F, + 5090: 0x8280, + 5091: 0x8281, + 5092: 0x8283, + 5093: 0x8284, + 5094: 0x8287, + 5095: 0x8289, + 5096: 0x828A, + 5097: 0x828E, + 5098: 0x8291, + 5099: 0x8294, + 5100: 0x8296, + 5101: 0x8298, + 5102: 0x829A, + 5103: 0x829B, + 5104: 0x82A0, + 5105: 0x82A1, + 5106: 0x82A3, + 5107: 0x82A4, + 5108: 0x82A7, + 5109: 0x82A8, + 5110: 0x82A9, + 5111: 0x82AA, + 5112: 0x82AE, + 5113: 0x82B0, + 5114: 0x82B2, + 5115: 0x82B4, + 5116: 0x82B7, + 5117: 0x82BA, + 5118: 0x82BC, + 5119: 0x82BE, + 5120: 0x82BF, + 5121: 0x82C6, + 5122: 0x82D0, + 5123: 0x82D5, + 5124: 0x82DA, + 5125: 0x82E0, + 5126: 0x82E2, + 5127: 0x82E4, + 5128: 0x82E8, + 5129: 0x82EA, + 5130: 0x82ED, + 5131: 0x82EF, + 5132: 0x82F6, + 5133: 0x82F7, + 5134: 0x82FD, + 5135: 0x82FE, + 5136: 0x8300, + 5137: 0x8301, + 5138: 0x8307, + 5139: 0x8308, + 5140: 0x830A, + 5141: 0x830B, + 5142: 0x8354, + 5143: 0x831B, + 5144: 0x831D, + 5145: 0x831E, + 5146: 0x831F, + 5147: 0x8321, + 5148: 0x8322, + 5149: 0x832C, + 5150: 0x832D, + 5151: 0x832E, + 5152: 0x8330, + 5153: 0x8333, + 5154: 0x8337, + 5155: 0x833A, + 5156: 0x833C, + 5157: 0x833D, + 5158: 0x8342, + 5159: 0x8343, + 5160: 0x8344, + 5161: 0x8347, + 5162: 0x834D, + 5163: 0x834E, + 5164: 0x8351, + 5165: 0x8355, + 5166: 0x8356, + 5167: 0x8357, + 5168: 0x8370, + 5169: 0x8378, + 5170: 0x837D, + 5171: 0x837F, + 5172: 0x8380, + 5173: 0x8382, + 5174: 0x8384, + 5175: 0x8386, + 5176: 0x838D, + 5177: 0x8392, + 5178: 0x8394, + 5179: 0x8395, + 5180: 0x8398, + 5181: 0x8399, + 5182: 0x839B, + 5183: 0x839C, + 5184: 0x839D, + 5185: 0x83A6, + 5186: 0x83A7, + 5187: 0x83A9, + 5188: 0x83AC, + 5189: 0x83BE, + 5190: 0x83BF, + 5191: 0x83C0, + 5192: 0x83C7, + 5193: 0x83C9, + 5194: 0x83CF, + 5195: 0x83D0, + 5196: 0x83D1, + 5197: 0x83D4, + 5198: 0x83DD, + 5199: 0x8353, + 5200: 0x83E8, + 5201: 0x83EA, + 5202: 0x83F6, + 5203: 0x83F8, + 5204: 0x83F9, + 5205: 0x83FC, + 5206: 0x8401, + 5207: 0x8406, + 5208: 0x840A, + 5209: 0x840F, + 5210: 0x8411, + 5211: 0x8415, + 5212: 0x8419, + 5213: 0x83AD, + 5214: 0x842F, + 5215: 0x8439, + 5216: 0x8445, + 5217: 0x8447, + 5218: 0x8448, + 5219: 0x844A, + 5220: 0x844D, + 5221: 0x844F, + 5222: 0x8451, + 5223: 0x8452, + 5224: 0x8456, + 5225: 0x8458, + 5226: 0x8459, + 5227: 0x845A, + 5228: 0x845C, + 5229: 0x8460, + 5230: 0x8464, + 5231: 0x8465, + 5232: 0x8467, + 5233: 0x846A, + 5234: 0x8470, + 5235: 0x8473, + 5236: 0x8474, + 5237: 0x8476, + 5238: 0x8478, + 5239: 0x847C, + 5240: 0x847D, + 5241: 0x8481, + 5242: 0x8485, + 5243: 0x8492, + 5244: 0x8493, + 5245: 0x8495, + 5246: 0x849E, + 5247: 0x84A6, + 5248: 0x84A8, + 5249: 0x84A9, + 5250: 0x84AA, + 5251: 0x84AF, + 5252: 0x84B1, + 5253: 0x84B4, + 5254: 0x84BA, + 5255: 0x84BD, + 5256: 0x84BE, + 5257: 0x84C0, + 5258: 0x84C2, + 5259: 0x84C7, + 5260: 0x84C8, + 5261: 0x84CC, + 5262: 0x84CF, + 5263: 0x84D3, + 5264: 0x84DC, + 5265: 0x84E7, + 5266: 0x84EA, + 5267: 0x84EF, + 5268: 0x84F0, + 5269: 0x84F1, + 5270: 0x84F2, + 5271: 0x84F7, + 5272: 0x8532, + 5273: 0x84FA, + 5274: 0x84FB, + 5275: 0x84FD, + 5276: 0x8502, + 5277: 0x8503, + 5278: 0x8507, + 5279: 0x850C, + 5280: 0x850E, + 5281: 0x8510, + 5282: 0x851C, + 5283: 0x851E, + 5284: 0x8522, + 5285: 0x8523, + 5286: 0x8524, + 5287: 0x8525, + 5288: 0x8527, + 5289: 0x852A, + 5290: 0x852B, + 5291: 0x852F, + 5292: 0x8533, + 5293: 0x8534, + 5294: 0x8536, + 5295: 0x853F, + 5296: 0x8546, + 5297: 0x854F, + 5298: 0x8550, + 5299: 0x8551, + 5300: 0x8552, + 5301: 0x8553, + 5302: 0x8556, + 5303: 0x8559, + 5304: 0x855C, + 5305: 0x855D, + 5306: 0x855E, + 5307: 0x855F, + 5308: 0x8560, + 5309: 0x8561, + 5310: 0x8562, + 5311: 0x8564, + 5312: 0x856B, + 5313: 0x856F, + 5314: 0x8579, + 5315: 0x857A, + 5316: 0x857B, + 5317: 0x857D, + 5318: 0x857F, + 5319: 0x8581, + 5320: 0x8585, + 5321: 0x8586, + 5322: 0x8589, + 5323: 0x858B, + 5324: 0x858C, + 5325: 0x858F, + 5326: 0x8593, + 5327: 0x8598, + 5328: 0x859D, + 5329: 0x859F, + 5330: 0x85A0, + 5331: 0x85A2, + 5332: 0x85A5, + 5333: 0x85A7, + 5334: 0x85B4, + 5335: 0x85B6, + 5336: 0x85B7, + 5337: 0x85B8, + 5338: 0x85BC, + 5339: 0x85BD, + 5340: 0x85BE, + 5341: 0x85BF, + 5342: 0x85C2, + 5343: 0x85C7, + 5344: 0x85CA, + 5345: 0x85CB, + 5346: 0x85CE, + 5347: 0x85AD, + 5348: 0x85D8, + 5349: 0x85DA, + 5350: 0x85DF, + 5351: 0x85E0, + 5352: 0x85E6, + 5353: 0x85E8, + 5354: 0x85ED, + 5355: 0x85F3, + 5356: 0x85F6, + 5357: 0x85FC, + 5358: 0x85FF, + 5359: 0x8600, + 5360: 0x8604, + 5361: 0x8605, + 5362: 0x860D, + 5363: 0x860E, + 5364: 0x8610, + 5365: 0x8611, + 5366: 0x8612, + 5367: 0x8618, + 5368: 0x8619, + 5369: 0x861B, + 5370: 0x861E, + 5371: 0x8621, + 5372: 0x8627, + 5373: 0x8629, + 5374: 0x8636, + 5375: 0x8638, + 5376: 0x863A, + 5377: 0x863C, + 5378: 0x863D, + 5379: 0x8640, + 5380: 0x8642, + 5381: 0x8646, + 5382: 0x8652, + 5383: 0x8653, + 5384: 0x8656, + 5385: 0x8657, + 5386: 0x8658, + 5387: 0x8659, + 5388: 0x865D, + 5389: 0x8660, + 5390: 0x8661, + 5391: 0x8662, + 5392: 0x8663, + 5393: 0x8664, + 5394: 0x8669, + 5395: 0x866C, + 5396: 0x866F, + 5397: 0x8675, + 5398: 0x8676, + 5399: 0x8677, + 5400: 0x867A, + 5401: 0x868D, + 5402: 0x8691, + 5403: 0x8696, + 5404: 0x8698, + 5405: 0x869A, + 5406: 0x869C, + 5407: 0x86A1, + 5408: 0x86A6, + 5409: 0x86A7, + 5410: 0x86A8, + 5411: 0x86AD, + 5412: 0x86B1, + 5413: 0x86B3, + 5414: 0x86B4, + 5415: 0x86B5, + 5416: 0x86B7, + 5417: 0x86B8, + 5418: 0x86B9, + 5419: 0x86BF, + 5420: 0x86C0, + 5421: 0x86C1, + 5422: 0x86C3, + 5423: 0x86C5, + 5424: 0x86D1, + 5425: 0x86D2, + 5426: 0x86D5, + 5427: 0x86D7, + 5428: 0x86DA, + 5429: 0x86DC, + 5430: 0x86E0, + 5431: 0x86E3, + 5432: 0x86E5, + 5433: 0x86E7, + 5434: 0x8688, + 5435: 0x86FA, + 5436: 0x86FC, + 5437: 0x86FD, + 5438: 0x8704, + 5439: 0x8705, + 5440: 0x8707, + 5441: 0x870B, + 5442: 0x870E, + 5443: 0x870F, + 5444: 0x8710, + 5445: 0x8713, + 5446: 0x8714, + 5447: 0x8719, + 5448: 0x871E, + 5449: 0x871F, + 5450: 0x8721, + 5451: 0x8723, + 5452: 0x8728, + 5453: 0x872E, + 5454: 0x872F, + 5455: 0x8731, + 5456: 0x8732, + 5457: 0x8739, + 5458: 0x873A, + 5459: 0x873C, + 5460: 0x873D, + 5461: 0x873E, + 5462: 0x8740, + 5463: 0x8743, + 5464: 0x8745, + 5465: 0x874D, + 5466: 0x8758, + 5467: 0x875D, + 5468: 0x8761, + 5469: 0x8764, + 5470: 0x8765, + 5471: 0x876F, + 5472: 0x8771, + 5473: 0x8772, + 5474: 0x877B, + 5475: 0x8783, + 5476: 0x8784, + 5477: 0x8785, + 5478: 0x8786, + 5479: 0x8787, + 5480: 0x8788, + 5481: 0x8789, + 5482: 0x878B, + 5483: 0x878C, + 5484: 0x8790, + 5485: 0x8793, + 5486: 0x8795, + 5487: 0x8797, + 5488: 0x8798, + 5489: 0x8799, + 5490: 0x879E, + 5491: 0x87A0, + 5492: 0x87A3, + 5493: 0x87A7, + 5494: 0x87AC, + 5495: 0x87AD, + 5496: 0x87AE, + 5497: 0x87B1, + 5498: 0x87B5, + 5499: 0x87BE, + 5500: 0x87BF, + 5501: 0x87C1, + 5502: 0x87C8, + 5503: 0x87C9, + 5504: 0x87CA, + 5505: 0x87CE, + 5506: 0x87D5, + 5507: 0x87D6, + 5508: 0x87D9, + 5509: 0x87DA, + 5510: 0x87DC, + 5511: 0x87DF, + 5512: 0x87E2, + 5513: 0x87E3, + 5514: 0x87E4, + 5515: 0x87EA, + 5516: 0x87EB, + 5517: 0x87ED, + 5518: 0x87F1, + 5519: 0x87F3, + 5520: 0x87F8, + 5521: 0x87FA, + 5522: 0x87FF, + 5523: 0x8801, + 5524: 0x8803, + 5525: 0x8806, + 5526: 0x8809, + 5527: 0x880A, + 5528: 0x880B, + 5529: 0x8810, + 5530: 0x8819, + 5531: 0x8812, + 5532: 0x8813, + 5533: 0x8814, + 5534: 0x8818, + 5535: 0x881A, + 5536: 0x881B, + 5537: 0x881C, + 5538: 0x881E, + 5539: 0x881F, + 5540: 0x8828, + 5541: 0x882D, + 5542: 0x882E, + 5543: 0x8830, + 5544: 0x8832, + 5545: 0x8835, + 5546: 0x883A, + 5547: 0x883C, + 5548: 0x8841, + 5549: 0x8843, + 5550: 0x8845, + 5551: 0x8848, + 5552: 0x8849, + 5553: 0x884A, + 5554: 0x884B, + 5555: 0x884E, + 5556: 0x8851, + 5557: 0x8855, + 5558: 0x8856, + 5559: 0x8858, + 5560: 0x885A, + 5561: 0x885C, + 5562: 0x885F, + 5563: 0x8860, + 5564: 0x8864, + 5565: 0x8869, + 5566: 0x8871, + 5567: 0x8879, + 5568: 0x887B, + 5569: 0x8880, + 5570: 0x8898, + 5571: 0x889A, + 5572: 0x889B, + 5573: 0x889C, + 5574: 0x889F, + 5575: 0x88A0, + 5576: 0x88A8, + 5577: 0x88AA, + 5578: 0x88BA, + 5579: 0x88BD, + 5580: 0x88BE, + 5581: 0x88C0, + 5582: 0x88CA, + 5583: 0x88CB, + 5584: 0x88CC, + 5585: 0x88CD, + 5586: 0x88CE, + 5587: 0x88D1, + 5588: 0x88D2, + 5589: 0x88D3, + 5590: 0x88DB, + 5591: 0x88DE, + 5592: 0x88E7, + 5593: 0x88EF, + 5594: 0x88F0, + 5595: 0x88F1, + 5596: 0x88F5, + 5597: 0x88F7, + 5598: 0x8901, + 5599: 0x8906, + 5600: 0x890D, + 5601: 0x890E, + 5602: 0x890F, + 5603: 0x8915, + 5604: 0x8916, + 5605: 0x8918, + 5606: 0x8919, + 5607: 0x891A, + 5608: 0x891C, + 5609: 0x8920, + 5610: 0x8926, + 5611: 0x8927, + 5612: 0x8928, + 5613: 0x8930, + 5614: 0x8931, + 5615: 0x8932, + 5616: 0x8935, + 5617: 0x8939, + 5618: 0x893A, + 5619: 0x893E, + 5620: 0x8940, + 5621: 0x8942, + 5622: 0x8945, + 5623: 0x8946, + 5624: 0x8949, + 5625: 0x894F, + 5626: 0x8952, + 5627: 0x8957, + 5628: 0x895A, + 5629: 0x895B, + 5630: 0x895C, + 5631: 0x8961, + 5632: 0x8962, + 5633: 0x8963, + 5634: 0x896B, + 5635: 0x896E, + 5636: 0x8970, + 5637: 0x8973, + 5638: 0x8975, + 5639: 0x897A, + 5640: 0x897B, + 5641: 0x897C, + 5642: 0x897D, + 5643: 0x8989, + 5644: 0x898D, + 5645: 0x8990, + 5646: 0x8994, + 5647: 0x8995, + 5648: 0x899B, + 5649: 0x899C, + 5650: 0x899F, + 5651: 0x89A0, + 5652: 0x89A5, + 5653: 0x89B0, + 5654: 0x89B4, + 5655: 0x89B5, + 5656: 0x89B6, + 5657: 0x89B7, + 5658: 0x89BC, + 5659: 0x89D4, + 5660: 0x89D5, + 5661: 0x89D6, + 5662: 0x89D7, + 5663: 0x89D8, + 5664: 0x89E5, + 5665: 0x89E9, + 5666: 0x89EB, + 5667: 0x89ED, + 5668: 0x89F1, + 5669: 0x89F3, + 5670: 0x89F6, + 5671: 0x89F9, + 5672: 0x89FD, + 5673: 0x89FF, + 5674: 0x8A04, + 5675: 0x8A05, + 5676: 0x8A07, + 5677: 0x8A0F, + 5678: 0x8A11, + 5679: 0x8A12, + 5680: 0x8A14, + 5681: 0x8A15, + 5682: 0x8A1E, + 5683: 0x8A20, + 5684: 0x8A22, + 5685: 0x8A24, + 5686: 0x8A26, + 5687: 0x8A2B, + 5688: 0x8A2C, + 5689: 0x8A2F, + 5690: 0x8A35, + 5691: 0x8A37, + 5692: 0x8A3D, + 5693: 0x8A3E, + 5694: 0x8A40, + 5695: 0x8A43, + 5696: 0x8A45, + 5697: 0x8A47, + 5698: 0x8A49, + 5699: 0x8A4D, + 5700: 0x8A4E, + 5701: 0x8A53, + 5702: 0x8A56, + 5703: 0x8A57, + 5704: 0x8A58, + 5705: 0x8A5C, + 5706: 0x8A5D, + 5707: 0x8A61, + 5708: 0x8A65, + 5709: 0x8A67, + 5710: 0x8A75, + 5711: 0x8A76, + 5712: 0x8A77, + 5713: 0x8A79, + 5714: 0x8A7A, + 5715: 0x8A7B, + 5716: 0x8A7E, + 5717: 0x8A7F, + 5718: 0x8A80, + 5719: 0x8A83, + 5720: 0x8A86, + 5721: 0x8A8B, + 5722: 0x8A8F, + 5723: 0x8A90, + 5724: 0x8A92, + 5725: 0x8A96, + 5726: 0x8A97, + 5727: 0x8A99, + 5728: 0x8A9F, + 5729: 0x8AA7, + 5730: 0x8AA9, + 5731: 0x8AAE, + 5732: 0x8AAF, + 5733: 0x8AB3, + 5734: 0x8AB6, + 5735: 0x8AB7, + 5736: 0x8ABB, + 5737: 0x8ABE, + 5738: 0x8AC3, + 5739: 0x8AC6, + 5740: 0x8AC8, + 5741: 0x8AC9, + 5742: 0x8ACA, + 5743: 0x8AD1, + 5744: 0x8AD3, + 5745: 0x8AD4, + 5746: 0x8AD5, + 5747: 0x8AD7, + 5748: 0x8ADD, + 5749: 0x8ADF, + 5750: 0x8AEC, + 5751: 0x8AF0, + 5752: 0x8AF4, + 5753: 0x8AF5, + 5754: 0x8AF6, + 5755: 0x8AFC, + 5756: 0x8AFF, + 5757: 0x8B05, + 5758: 0x8B06, + 5759: 0x8B0B, + 5760: 0x8B11, + 5761: 0x8B1C, + 5762: 0x8B1E, + 5763: 0x8B1F, + 5764: 0x8B0A, + 5765: 0x8B2D, + 5766: 0x8B30, + 5767: 0x8B37, + 5768: 0x8B3C, + 5769: 0x8B42, + 5770: 0x8B43, + 5771: 0x8B44, + 5772: 0x8B45, + 5773: 0x8B46, + 5774: 0x8B48, + 5775: 0x8B52, + 5776: 0x8B53, + 5777: 0x8B54, + 5778: 0x8B59, + 5779: 0x8B4D, + 5780: 0x8B5E, + 5781: 0x8B63, + 5782: 0x8B6D, + 5783: 0x8B76, + 5784: 0x8B78, + 5785: 0x8B79, + 5786: 0x8B7C, + 5787: 0x8B7E, + 5788: 0x8B81, + 5789: 0x8B84, + 5790: 0x8B85, + 5791: 0x8B8B, + 5792: 0x8B8D, + 5793: 0x8B8F, + 5794: 0x8B94, + 5795: 0x8B95, + 5796: 0x8B9C, + 5797: 0x8B9E, + 5798: 0x8B9F, + 5799: 0x8C38, + 5800: 0x8C39, + 5801: 0x8C3D, + 5802: 0x8C3E, + 5803: 0x8C45, + 5804: 0x8C47, + 5805: 0x8C49, + 5806: 0x8C4B, + 5807: 0x8C4F, + 5808: 0x8C51, + 5809: 0x8C53, + 5810: 0x8C54, + 5811: 0x8C57, + 5812: 0x8C58, + 5813: 0x8C5B, + 5814: 0x8C5D, + 5815: 0x8C59, + 5816: 0x8C63, + 5817: 0x8C64, + 5818: 0x8C66, + 5819: 0x8C68, + 5820: 0x8C69, + 5821: 0x8C6D, + 5822: 0x8C73, + 5823: 0x8C75, + 5824: 0x8C76, + 5825: 0x8C7B, + 5826: 0x8C7E, + 5827: 0x8C86, + 5828: 0x8C87, + 5829: 0x8C8B, + 5830: 0x8C90, + 5831: 0x8C92, + 5832: 0x8C93, + 5833: 0x8C99, + 5834: 0x8C9B, + 5835: 0x8C9C, + 5836: 0x8CA4, + 5837: 0x8CB9, + 5838: 0x8CBA, + 5839: 0x8CC5, + 5840: 0x8CC6, + 5841: 0x8CC9, + 5842: 0x8CCB, + 5843: 0x8CCF, + 5844: 0x8CD6, + 5845: 0x8CD5, + 5846: 0x8CD9, + 5847: 0x8CDD, + 5848: 0x8CE1, + 5849: 0x8CE8, + 5850: 0x8CEC, + 5851: 0x8CEF, + 5852: 0x8CF0, + 5853: 0x8CF2, + 5854: 0x8CF5, + 5855: 0x8CF7, + 5856: 0x8CF8, + 5857: 0x8CFE, + 5858: 0x8CFF, + 5859: 0x8D01, + 5860: 0x8D03, + 5861: 0x8D09, + 5862: 0x8D12, + 5863: 0x8D17, + 5864: 0x8D1B, + 5865: 0x8D65, + 5866: 0x8D69, + 5867: 0x8D6C, + 5868: 0x8D6E, + 5869: 0x8D7F, + 5870: 0x8D82, + 5871: 0x8D84, + 5872: 0x8D88, + 5873: 0x8D8D, + 5874: 0x8D90, + 5875: 0x8D91, + 5876: 0x8D95, + 5877: 0x8D9E, + 5878: 0x8D9F, + 5879: 0x8DA0, + 5880: 0x8DA6, + 5881: 0x8DAB, + 5882: 0x8DAC, + 5883: 0x8DAF, + 5884: 0x8DB2, + 5885: 0x8DB5, + 5886: 0x8DB7, + 5887: 0x8DB9, + 5888: 0x8DBB, + 5889: 0x8DC0, + 5890: 0x8DC5, + 5891: 0x8DC6, + 5892: 0x8DC7, + 5893: 0x8DC8, + 5894: 0x8DCA, + 5895: 0x8DCE, + 5896: 0x8DD1, + 5897: 0x8DD4, + 5898: 0x8DD5, + 5899: 0x8DD7, + 5900: 0x8DD9, + 5901: 0x8DE4, + 5902: 0x8DE5, + 5903: 0x8DE7, + 5904: 0x8DEC, + 5905: 0x8DF0, + 5906: 0x8DBC, + 5907: 0x8DF1, + 5908: 0x8DF2, + 5909: 0x8DF4, + 5910: 0x8DFD, + 5911: 0x8E01, + 5912: 0x8E04, + 5913: 0x8E05, + 5914: 0x8E06, + 5915: 0x8E0B, + 5916: 0x8E11, + 5917: 0x8E14, + 5918: 0x8E16, + 5919: 0x8E20, + 5920: 0x8E21, + 5921: 0x8E22, + 5922: 0x8E23, + 5923: 0x8E26, + 5924: 0x8E27, + 5925: 0x8E31, + 5926: 0x8E33, + 5927: 0x8E36, + 5928: 0x8E37, + 5929: 0x8E38, + 5930: 0x8E39, + 5931: 0x8E3D, + 5932: 0x8E40, + 5933: 0x8E41, + 5934: 0x8E4B, + 5935: 0x8E4D, + 5936: 0x8E4E, + 5937: 0x8E4F, + 5938: 0x8E54, + 5939: 0x8E5B, + 5940: 0x8E5C, + 5941: 0x8E5D, + 5942: 0x8E5E, + 5943: 0x8E61, + 5944: 0x8E62, + 5945: 0x8E69, + 5946: 0x8E6C, + 5947: 0x8E6D, + 5948: 0x8E6F, + 5949: 0x8E70, + 5950: 0x8E71, + 5951: 0x8E79, + 5952: 0x8E7A, + 5953: 0x8E7B, + 5954: 0x8E82, + 5955: 0x8E83, + 5956: 0x8E89, + 5957: 0x8E90, + 5958: 0x8E92, + 5959: 0x8E95, + 5960: 0x8E9A, + 5961: 0x8E9B, + 5962: 0x8E9D, + 5963: 0x8E9E, + 5964: 0x8EA2, + 5965: 0x8EA7, + 5966: 0x8EA9, + 5967: 0x8EAD, + 5968: 0x8EAE, + 5969: 0x8EB3, + 5970: 0x8EB5, + 5971: 0x8EBA, + 5972: 0x8EBB, + 5973: 0x8EC0, + 5974: 0x8EC1, + 5975: 0x8EC3, + 5976: 0x8EC4, + 5977: 0x8EC7, + 5978: 0x8ECF, + 5979: 0x8ED1, + 5980: 0x8ED4, + 5981: 0x8EDC, + 5982: 0x8EE8, + 5983: 0x8EEE, + 5984: 0x8EF0, + 5985: 0x8EF1, + 5986: 0x8EF7, + 5987: 0x8EF9, + 5988: 0x8EFA, + 5989: 0x8EED, + 5990: 0x8F00, + 5991: 0x8F02, + 5992: 0x8F07, + 5993: 0x8F08, + 5994: 0x8F0F, + 5995: 0x8F10, + 5996: 0x8F16, + 5997: 0x8F17, + 5998: 0x8F18, + 5999: 0x8F1E, + 6000: 0x8F20, + 6001: 0x8F21, + 6002: 0x8F23, + 6003: 0x8F25, + 6004: 0x8F27, + 6005: 0x8F28, + 6006: 0x8F2C, + 6007: 0x8F2D, + 6008: 0x8F2E, + 6009: 0x8F34, + 6010: 0x8F35, + 6011: 0x8F36, + 6012: 0x8F37, + 6013: 0x8F3A, + 6014: 0x8F40, + 6015: 0x8F41, + 6016: 0x8F43, + 6017: 0x8F47, + 6018: 0x8F4F, + 6019: 0x8F51, + 6020: 0x8F52, + 6021: 0x8F53, + 6022: 0x8F54, + 6023: 0x8F55, + 6024: 0x8F58, + 6025: 0x8F5D, + 6026: 0x8F5E, + 6027: 0x8F65, + 6028: 0x8F9D, + 6029: 0x8FA0, + 6030: 0x8FA1, + 6031: 0x8FA4, + 6032: 0x8FA5, + 6033: 0x8FA6, + 6034: 0x8FB5, + 6035: 0x8FB6, + 6036: 0x8FB8, + 6037: 0x8FBE, + 6038: 0x8FC0, + 6039: 0x8FC1, + 6040: 0x8FC6, + 6041: 0x8FCA, + 6042: 0x8FCB, + 6043: 0x8FCD, + 6044: 0x8FD0, + 6045: 0x8FD2, + 6046: 0x8FD3, + 6047: 0x8FD5, + 6048: 0x8FE0, + 6049: 0x8FE3, + 6050: 0x8FE4, + 6051: 0x8FE8, + 6052: 0x8FEE, + 6053: 0x8FF1, + 6054: 0x8FF5, + 6055: 0x8FF6, + 6056: 0x8FFB, + 6057: 0x8FFE, + 6058: 0x9002, + 6059: 0x9004, + 6060: 0x9008, + 6061: 0x900C, + 6062: 0x9018, + 6063: 0x901B, + 6064: 0x9028, + 6065: 0x9029, + 6066: 0x902F, + 6067: 0x902A, + 6068: 0x902C, + 6069: 0x902D, + 6070: 0x9033, + 6071: 0x9034, + 6072: 0x9037, + 6073: 0x903F, + 6074: 0x9043, + 6075: 0x9044, + 6076: 0x904C, + 6077: 0x905B, + 6078: 0x905D, + 6079: 0x9062, + 6080: 0x9066, + 6081: 0x9067, + 6082: 0x906C, + 6083: 0x9070, + 6084: 0x9074, + 6085: 0x9079, + 6086: 0x9085, + 6087: 0x9088, + 6088: 0x908B, + 6089: 0x908C, + 6090: 0x908E, + 6091: 0x9090, + 6092: 0x9095, + 6093: 0x9097, + 6094: 0x9098, + 6095: 0x9099, + 6096: 0x909B, + 6097: 0x90A0, + 6098: 0x90A1, + 6099: 0x90A2, + 6100: 0x90A5, + 6101: 0x90B0, + 6102: 0x90B2, + 6103: 0x90B3, + 6104: 0x90B4, + 6105: 0x90B6, + 6106: 0x90BD, + 6107: 0x90CC, + 6108: 0x90BE, + 6109: 0x90C3, + 6110: 0x90C4, + 6111: 0x90C5, + 6112: 0x90C7, + 6113: 0x90C8, + 6114: 0x90D5, + 6115: 0x90D7, + 6116: 0x90D8, + 6117: 0x90D9, + 6118: 0x90DC, + 6119: 0x90DD, + 6120: 0x90DF, + 6121: 0x90E5, + 6122: 0x90D2, + 6123: 0x90F6, + 6124: 0x90EB, + 6125: 0x90EF, + 6126: 0x90F0, + 6127: 0x90F4, + 6128: 0x90FE, + 6129: 0x90FF, + 6130: 0x9100, + 6131: 0x9104, + 6132: 0x9105, + 6133: 0x9106, + 6134: 0x9108, + 6135: 0x910D, + 6136: 0x9110, + 6137: 0x9114, + 6138: 0x9116, + 6139: 0x9117, + 6140: 0x9118, + 6141: 0x911A, + 6142: 0x911C, + 6143: 0x911E, + 6144: 0x9120, + 6145: 0x9125, + 6146: 0x9122, + 6147: 0x9123, + 6148: 0x9127, + 6149: 0x9129, + 6150: 0x912E, + 6151: 0x912F, + 6152: 0x9131, + 6153: 0x9134, + 6154: 0x9136, + 6155: 0x9137, + 6156: 0x9139, + 6157: 0x913A, + 6158: 0x913C, + 6159: 0x913D, + 6160: 0x9143, + 6161: 0x9147, + 6162: 0x9148, + 6163: 0x914F, + 6164: 0x9153, + 6165: 0x9157, + 6166: 0x9159, + 6167: 0x915A, + 6168: 0x915B, + 6169: 0x9161, + 6170: 0x9164, + 6171: 0x9167, + 6172: 0x916D, + 6173: 0x9174, + 6174: 0x9179, + 6175: 0x917A, + 6176: 0x917B, + 6177: 0x9181, + 6178: 0x9183, + 6179: 0x9185, + 6180: 0x9186, + 6181: 0x918A, + 6182: 0x918E, + 6183: 0x9191, + 6184: 0x9193, + 6185: 0x9194, + 6186: 0x9195, + 6187: 0x9198, + 6188: 0x919E, + 6189: 0x91A1, + 6190: 0x91A6, + 6191: 0x91A8, + 6192: 0x91AC, + 6193: 0x91AD, + 6194: 0x91AE, + 6195: 0x91B0, + 6196: 0x91B1, + 6197: 0x91B2, + 6198: 0x91B3, + 6199: 0x91B6, + 6200: 0x91BB, + 6201: 0x91BC, + 6202: 0x91BD, + 6203: 0x91BF, + 6204: 0x91C2, + 6205: 0x91C3, + 6206: 0x91C5, + 6207: 0x91D3, + 6208: 0x91D4, + 6209: 0x91D7, + 6210: 0x91D9, + 6211: 0x91DA, + 6212: 0x91DE, + 6213: 0x91E4, + 6214: 0x91E5, + 6215: 0x91E9, + 6216: 0x91EA, + 6217: 0x91EC, + 6218: 0x91ED, + 6219: 0x91EE, + 6220: 0x91EF, + 6221: 0x91F0, + 6222: 0x91F1, + 6223: 0x91F7, + 6224: 0x91F9, + 6225: 0x91FB, + 6226: 0x91FD, + 6227: 0x9200, + 6228: 0x9201, + 6229: 0x9204, + 6230: 0x9205, + 6231: 0x9206, + 6232: 0x9207, + 6233: 0x9209, + 6234: 0x920A, + 6235: 0x920C, + 6236: 0x9210, + 6237: 0x9212, + 6238: 0x9213, + 6239: 0x9216, + 6240: 0x9218, + 6241: 0x921C, + 6242: 0x921D, + 6243: 0x9223, + 6244: 0x9224, + 6245: 0x9225, + 6246: 0x9226, + 6247: 0x9228, + 6248: 0x922E, + 6249: 0x922F, + 6250: 0x9230, + 6251: 0x9233, + 6252: 0x9235, + 6253: 0x9236, + 6254: 0x9238, + 6255: 0x9239, + 6256: 0x923A, + 6257: 0x923C, + 6258: 0x923E, + 6259: 0x9240, + 6260: 0x9242, + 6261: 0x9243, + 6262: 0x9246, + 6263: 0x9247, + 6264: 0x924A, + 6265: 0x924D, + 6266: 0x924E, + 6267: 0x924F, + 6268: 0x9251, + 6269: 0x9258, + 6270: 0x9259, + 6271: 0x925C, + 6272: 0x925D, + 6273: 0x9260, + 6274: 0x9261, + 6275: 0x9265, + 6276: 0x9267, + 6277: 0x9268, + 6278: 0x9269, + 6279: 0x926E, + 6280: 0x926F, + 6281: 0x9270, + 6282: 0x9275, + 6283: 0x9276, + 6284: 0x9277, + 6285: 0x9278, + 6286: 0x9279, + 6287: 0x927B, + 6288: 0x927C, + 6289: 0x927D, + 6290: 0x927F, + 6291: 0x9288, + 6292: 0x9289, + 6293: 0x928A, + 6294: 0x928D, + 6295: 0x928E, + 6296: 0x9292, + 6297: 0x9297, + 6298: 0x9299, + 6299: 0x929F, + 6300: 0x92A0, + 6301: 0x92A4, + 6302: 0x92A5, + 6303: 0x92A7, + 6304: 0x92A8, + 6305: 0x92AB, + 6306: 0x92AF, + 6307: 0x92B2, + 6308: 0x92B6, + 6309: 0x92B8, + 6310: 0x92BA, + 6311: 0x92BB, + 6312: 0x92BC, + 6313: 0x92BD, + 6314: 0x92BF, + 6315: 0x92C0, + 6316: 0x92C1, + 6317: 0x92C2, + 6318: 0x92C3, + 6319: 0x92C5, + 6320: 0x92C6, + 6321: 0x92C7, + 6322: 0x92C8, + 6323: 0x92CB, + 6324: 0x92CC, + 6325: 0x92CD, + 6326: 0x92CE, + 6327: 0x92D0, + 6328: 0x92D3, + 6329: 0x92D5, + 6330: 0x92D7, + 6331: 0x92D8, + 6332: 0x92D9, + 6333: 0x92DC, + 6334: 0x92DD, + 6335: 0x92DF, + 6336: 0x92E0, + 6337: 0x92E1, + 6338: 0x92E3, + 6339: 0x92E5, + 6340: 0x92E7, + 6341: 0x92E8, + 6342: 0x92EC, + 6343: 0x92EE, + 6344: 0x92F0, + 6345: 0x92F9, + 6346: 0x92FB, + 6347: 0x92FF, + 6348: 0x9300, + 6349: 0x9302, + 6350: 0x9308, + 6351: 0x930D, + 6352: 0x9311, + 6353: 0x9314, + 6354: 0x9315, + 6355: 0x931C, + 6356: 0x931D, + 6357: 0x931E, + 6358: 0x931F, + 6359: 0x9321, + 6360: 0x9324, + 6361: 0x9325, + 6362: 0x9327, + 6363: 0x9329, + 6364: 0x932A, + 6365: 0x9333, + 6366: 0x9334, + 6367: 0x9336, + 6368: 0x9337, + 6369: 0x9347, + 6370: 0x9348, + 6371: 0x9349, + 6372: 0x9350, + 6373: 0x9351, + 6374: 0x9352, + 6375: 0x9355, + 6376: 0x9357, + 6377: 0x9358, + 6378: 0x935A, + 6379: 0x935E, + 6380: 0x9364, + 6381: 0x9365, + 6382: 0x9367, + 6383: 0x9369, + 6384: 0x936A, + 6385: 0x936D, + 6386: 0x936F, + 6387: 0x9370, + 6388: 0x9371, + 6389: 0x9373, + 6390: 0x9374, + 6391: 0x9376, + 6392: 0x937A, + 6393: 0x937D, + 6394: 0x937F, + 6395: 0x9380, + 6396: 0x9381, + 6397: 0x9382, + 6398: 0x9388, + 6399: 0x938A, + 6400: 0x938B, + 6401: 0x938D, + 6402: 0x938F, + 6403: 0x9392, + 6404: 0x9395, + 6405: 0x9398, + 6406: 0x939B, + 6407: 0x939E, + 6408: 0x93A1, + 6409: 0x93A3, + 6410: 0x93A4, + 6411: 0x93A6, + 6412: 0x93A8, + 6413: 0x93AB, + 6414: 0x93B4, + 6415: 0x93B5, + 6416: 0x93B6, + 6417: 0x93BA, + 6418: 0x93A9, + 6419: 0x93C1, + 6420: 0x93C4, + 6421: 0x93C5, + 6422: 0x93C6, + 6423: 0x93C7, + 6424: 0x93C9, + 6425: 0x93CA, + 6426: 0x93CB, + 6427: 0x93CC, + 6428: 0x93CD, + 6429: 0x93D3, + 6430: 0x93D9, + 6431: 0x93DC, + 6432: 0x93DE, + 6433: 0x93DF, + 6434: 0x93E2, + 6435: 0x93E6, + 6436: 0x93E7, + 6437: 0x93F9, + 6438: 0x93F7, + 6439: 0x93F8, + 6440: 0x93FA, + 6441: 0x93FB, + 6442: 0x93FD, + 6443: 0x9401, + 6444: 0x9402, + 6445: 0x9404, + 6446: 0x9408, + 6447: 0x9409, + 6448: 0x940D, + 6449: 0x940E, + 6450: 0x940F, + 6451: 0x9415, + 6452: 0x9416, + 6453: 0x9417, + 6454: 0x941F, + 6455: 0x942E, + 6456: 0x942F, + 6457: 0x9431, + 6458: 0x9432, + 6459: 0x9433, + 6460: 0x9434, + 6461: 0x943B, + 6462: 0x943F, + 6463: 0x943D, + 6464: 0x9443, + 6465: 0x9445, + 6466: 0x9448, + 6467: 0x944A, + 6468: 0x944C, + 6469: 0x9455, + 6470: 0x9459, + 6471: 0x945C, + 6472: 0x945F, + 6473: 0x9461, + 6474: 0x9463, + 6475: 0x9468, + 6476: 0x946B, + 6477: 0x946D, + 6478: 0x946E, + 6479: 0x946F, + 6480: 0x9471, + 6481: 0x9472, + 6482: 0x9484, + 6483: 0x9483, + 6484: 0x9578, + 6485: 0x9579, + 6486: 0x957E, + 6487: 0x9584, + 6488: 0x9588, + 6489: 0x958C, + 6490: 0x958D, + 6491: 0x958E, + 6492: 0x959D, + 6493: 0x959E, + 6494: 0x959F, + 6495: 0x95A1, + 6496: 0x95A6, + 6497: 0x95A9, + 6498: 0x95AB, + 6499: 0x95AC, + 6500: 0x95B4, + 6501: 0x95B6, + 6502: 0x95BA, + 6503: 0x95BD, + 6504: 0x95BF, + 6505: 0x95C6, + 6506: 0x95C8, + 6507: 0x95C9, + 6508: 0x95CB, + 6509: 0x95D0, + 6510: 0x95D1, + 6511: 0x95D2, + 6512: 0x95D3, + 6513: 0x95D9, + 6514: 0x95DA, + 6515: 0x95DD, + 6516: 0x95DE, + 6517: 0x95DF, + 6518: 0x95E0, + 6519: 0x95E4, + 6520: 0x95E6, + 6521: 0x961D, + 6522: 0x961E, + 6523: 0x9622, + 6524: 0x9624, + 6525: 0x9625, + 6526: 0x9626, + 6527: 0x962C, + 6528: 0x9631, + 6529: 0x9633, + 6530: 0x9637, + 6531: 0x9638, + 6532: 0x9639, + 6533: 0x963A, + 6534: 0x963C, + 6535: 0x963D, + 6536: 0x9641, + 6537: 0x9652, + 6538: 0x9654, + 6539: 0x9656, + 6540: 0x9657, + 6541: 0x9658, + 6542: 0x9661, + 6543: 0x966E, + 6544: 0x9674, + 6545: 0x967B, + 6546: 0x967C, + 6547: 0x967E, + 6548: 0x967F, + 6549: 0x9681, + 6550: 0x9682, + 6551: 0x9683, + 6552: 0x9684, + 6553: 0x9689, + 6554: 0x9691, + 6555: 0x9696, + 6556: 0x969A, + 6557: 0x969D, + 6558: 0x969F, + 6559: 0x96A4, + 6560: 0x96A5, + 6561: 0x96A6, + 6562: 0x96A9, + 6563: 0x96AE, + 6564: 0x96AF, + 6565: 0x96B3, + 6566: 0x96BA, + 6567: 0x96CA, + 6568: 0x96D2, + 6569: 0x5DB2, + 6570: 0x96D8, + 6571: 0x96DA, + 6572: 0x96DD, + 6573: 0x96DE, + 6574: 0x96DF, + 6575: 0x96E9, + 6576: 0x96EF, + 6577: 0x96F1, + 6578: 0x96FA, + 6579: 0x9702, + 6580: 0x9703, + 6581: 0x9705, + 6582: 0x9709, + 6583: 0x971A, + 6584: 0x971B, + 6585: 0x971D, + 6586: 0x9721, + 6587: 0x9722, + 6588: 0x9723, + 6589: 0x9728, + 6590: 0x9731, + 6591: 0x9733, + 6592: 0x9741, + 6593: 0x9743, + 6594: 0x974A, + 6595: 0x974E, + 6596: 0x974F, + 6597: 0x9755, + 6598: 0x9757, + 6599: 0x9758, + 6600: 0x975A, + 6601: 0x975B, + 6602: 0x9763, + 6603: 0x9767, + 6604: 0x976A, + 6605: 0x976E, + 6606: 0x9773, + 6607: 0x9776, + 6608: 0x9777, + 6609: 0x9778, + 6610: 0x977B, + 6611: 0x977D, + 6612: 0x977F, + 6613: 0x9780, + 6614: 0x9789, + 6615: 0x9795, + 6616: 0x9796, + 6617: 0x9797, + 6618: 0x9799, + 6619: 0x979A, + 6620: 0x979E, + 6621: 0x979F, + 6622: 0x97A2, + 6623: 0x97AC, + 6624: 0x97AE, + 6625: 0x97B1, + 6626: 0x97B2, + 6627: 0x97B5, + 6628: 0x97B6, + 6629: 0x97B8, + 6630: 0x97B9, + 6631: 0x97BA, + 6632: 0x97BC, + 6633: 0x97BE, + 6634: 0x97BF, + 6635: 0x97C1, + 6636: 0x97C4, + 6637: 0x97C5, + 6638: 0x97C7, + 6639: 0x97C9, + 6640: 0x97CA, + 6641: 0x97CC, + 6642: 0x97CD, + 6643: 0x97CE, + 6644: 0x97D0, + 6645: 0x97D1, + 6646: 0x97D4, + 6647: 0x97D7, + 6648: 0x97D8, + 6649: 0x97D9, + 6650: 0x97DD, + 6651: 0x97DE, + 6652: 0x97E0, + 6653: 0x97DB, + 6654: 0x97E1, + 6655: 0x97E4, + 6656: 0x97EF, + 6657: 0x97F1, + 6658: 0x97F4, + 6659: 0x97F7, + 6660: 0x97F8, + 6661: 0x97FA, + 6662: 0x9807, + 6663: 0x980A, + 6664: 0x9819, + 6665: 0x980D, + 6666: 0x980E, + 6667: 0x9814, + 6668: 0x9816, + 6669: 0x981C, + 6670: 0x981E, + 6671: 0x9820, + 6672: 0x9823, + 6673: 0x9826, + 6674: 0x982B, + 6675: 0x982E, + 6676: 0x982F, + 6677: 0x9830, + 6678: 0x9832, + 6679: 0x9833, + 6680: 0x9835, + 6681: 0x9825, + 6682: 0x983E, + 6683: 0x9844, + 6684: 0x9847, + 6685: 0x984A, + 6686: 0x9851, + 6687: 0x9852, + 6688: 0x9853, + 6689: 0x9856, + 6690: 0x9857, + 6691: 0x9859, + 6692: 0x985A, + 6693: 0x9862, + 6694: 0x9863, + 6695: 0x9865, + 6696: 0x9866, + 6697: 0x986A, + 6698: 0x986C, + 6699: 0x98AB, + 6700: 0x98AD, + 6701: 0x98AE, + 6702: 0x98B0, + 6703: 0x98B4, + 6704: 0x98B7, + 6705: 0x98B8, + 6706: 0x98BA, + 6707: 0x98BB, + 6708: 0x98BF, + 6709: 0x98C2, + 6710: 0x98C5, + 6711: 0x98C8, + 6712: 0x98CC, + 6713: 0x98E1, + 6714: 0x98E3, + 6715: 0x98E5, + 6716: 0x98E6, + 6717: 0x98E7, + 6718: 0x98EA, + 6719: 0x98F3, + 6720: 0x98F6, + 6721: 0x9902, + 6722: 0x9907, + 6723: 0x9908, + 6724: 0x9911, + 6725: 0x9915, + 6726: 0x9916, + 6727: 0x9917, + 6728: 0x991A, + 6729: 0x991B, + 6730: 0x991C, + 6731: 0x991F, + 6732: 0x9922, + 6733: 0x9926, + 6734: 0x9927, + 6735: 0x992B, + 6736: 0x9931, + 6737: 0x9932, + 6738: 0x9933, + 6739: 0x9934, + 6740: 0x9935, + 6741: 0x9939, + 6742: 0x993A, + 6743: 0x993B, + 6744: 0x993C, + 6745: 0x9940, + 6746: 0x9941, + 6747: 0x9946, + 6748: 0x9947, + 6749: 0x9948, + 6750: 0x994D, + 6751: 0x994E, + 6752: 0x9954, + 6753: 0x9958, + 6754: 0x9959, + 6755: 0x995B, + 6756: 0x995C, + 6757: 0x995E, + 6758: 0x995F, + 6759: 0x9960, + 6760: 0x999B, + 6761: 0x999D, + 6762: 0x999F, + 6763: 0x99A6, + 6764: 0x99B0, + 6765: 0x99B1, + 6766: 0x99B2, + 6767: 0x99B5, + 6768: 0x99B9, + 6769: 0x99BA, + 6770: 0x99BD, + 6771: 0x99BF, + 6772: 0x99C3, + 6773: 0x99C9, + 6774: 0x99D3, + 6775: 0x99D4, + 6776: 0x99D9, + 6777: 0x99DA, + 6778: 0x99DC, + 6779: 0x99DE, + 6780: 0x99E7, + 6781: 0x99EA, + 6782: 0x99EB, + 6783: 0x99EC, + 6784: 0x99F0, + 6785: 0x99F4, + 6786: 0x99F5, + 6787: 0x99F9, + 6788: 0x99FD, + 6789: 0x99FE, + 6790: 0x9A02, + 6791: 0x9A03, + 6792: 0x9A04, + 6793: 0x9A0B, + 6794: 0x9A0C, + 6795: 0x9A10, + 6796: 0x9A11, + 6797: 0x9A16, + 6798: 0x9A1E, + 6799: 0x9A20, + 6800: 0x9A22, + 6801: 0x9A23, + 6802: 0x9A24, + 6803: 0x9A27, + 6804: 0x9A2D, + 6805: 0x9A2E, + 6806: 0x9A33, + 6807: 0x9A35, + 6808: 0x9A36, + 6809: 0x9A38, + 6810: 0x9A47, + 6811: 0x9A41, + 6812: 0x9A44, + 6813: 0x9A4A, + 6814: 0x9A4B, + 6815: 0x9A4C, + 6816: 0x9A4E, + 6817: 0x9A51, + 6818: 0x9A54, + 6819: 0x9A56, + 6820: 0x9A5D, + 6821: 0x9AAA, + 6822: 0x9AAC, + 6823: 0x9AAE, + 6824: 0x9AAF, + 6825: 0x9AB2, + 6826: 0x9AB4, + 6827: 0x9AB5, + 6828: 0x9AB6, + 6829: 0x9AB9, + 6830: 0x9ABB, + 6831: 0x9ABE, + 6832: 0x9ABF, + 6833: 0x9AC1, + 6834: 0x9AC3, + 6835: 0x9AC6, + 6836: 0x9AC8, + 6837: 0x9ACE, + 6838: 0x9AD0, + 6839: 0x9AD2, + 6840: 0x9AD5, + 6841: 0x9AD6, + 6842: 0x9AD7, + 6843: 0x9ADB, + 6844: 0x9ADC, + 6845: 0x9AE0, + 6846: 0x9AE4, + 6847: 0x9AE5, + 6848: 0x9AE7, + 6849: 0x9AE9, + 6850: 0x9AEC, + 6851: 0x9AF2, + 6852: 0x9AF3, + 6853: 0x9AF5, + 6854: 0x9AF9, + 6855: 0x9AFA, + 6856: 0x9AFD, + 6857: 0x9AFF, + 6858: 0x9B00, + 6859: 0x9B01, + 6860: 0x9B02, + 6861: 0x9B03, + 6862: 0x9B04, + 6863: 0x9B05, + 6864: 0x9B08, + 6865: 0x9B09, + 6866: 0x9B0B, + 6867: 0x9B0C, + 6868: 0x9B0D, + 6869: 0x9B0E, + 6870: 0x9B10, + 6871: 0x9B12, + 6872: 0x9B16, + 6873: 0x9B19, + 6874: 0x9B1B, + 6875: 0x9B1C, + 6876: 0x9B20, + 6877: 0x9B26, + 6878: 0x9B2B, + 6879: 0x9B2D, + 6880: 0x9B33, + 6881: 0x9B34, + 6882: 0x9B35, + 6883: 0x9B37, + 6884: 0x9B39, + 6885: 0x9B3A, + 6886: 0x9B3D, + 6887: 0x9B48, + 6888: 0x9B4B, + 6889: 0x9B4C, + 6890: 0x9B55, + 6891: 0x9B56, + 6892: 0x9B57, + 6893: 0x9B5B, + 6894: 0x9B5E, + 6895: 0x9B61, + 6896: 0x9B63, + 6897: 0x9B65, + 6898: 0x9B66, + 6899: 0x9B68, + 6900: 0x9B6A, + 6901: 0x9B6B, + 6902: 0x9B6C, + 6903: 0x9B6D, + 6904: 0x9B6E, + 6905: 0x9B73, + 6906: 0x9B75, + 6907: 0x9B77, + 6908: 0x9B78, + 6909: 0x9B79, + 6910: 0x9B7F, + 6911: 0x9B80, + 6912: 0x9B84, + 6913: 0x9B85, + 6914: 0x9B86, + 6915: 0x9B87, + 6916: 0x9B89, + 6917: 0x9B8A, + 6918: 0x9B8B, + 6919: 0x9B8D, + 6920: 0x9B8F, + 6921: 0x9B90, + 6922: 0x9B94, + 6923: 0x9B9A, + 6924: 0x9B9D, + 6925: 0x9B9E, + 6926: 0x9BA6, + 6927: 0x9BA7, + 6928: 0x9BA9, + 6929: 0x9BAC, + 6930: 0x9BB0, + 6931: 0x9BB1, + 6932: 0x9BB2, + 6933: 0x9BB7, + 6934: 0x9BB8, + 6935: 0x9BBB, + 6936: 0x9BBC, + 6937: 0x9BBE, + 6938: 0x9BBF, + 6939: 0x9BC1, + 6940: 0x9BC7, + 6941: 0x9BC8, + 6942: 0x9BCE, + 6943: 0x9BD0, + 6944: 0x9BD7, + 6945: 0x9BD8, + 6946: 0x9BDD, + 6947: 0x9BDF, + 6948: 0x9BE5, + 6949: 0x9BE7, + 6950: 0x9BEA, + 6951: 0x9BEB, + 6952: 0x9BEF, + 6953: 0x9BF3, + 6954: 0x9BF7, + 6955: 0x9BF8, + 6956: 0x9BF9, + 6957: 0x9BFA, + 6958: 0x9BFD, + 6959: 0x9BFF, + 6960: 0x9C00, + 6961: 0x9C02, + 6962: 0x9C0B, + 6963: 0x9C0F, + 6964: 0x9C11, + 6965: 0x9C16, + 6966: 0x9C18, + 6967: 0x9C19, + 6968: 0x9C1A, + 6969: 0x9C1C, + 6970: 0x9C1E, + 6971: 0x9C22, + 6972: 0x9C23, + 6973: 0x9C26, + 6974: 0x9C27, + 6975: 0x9C28, + 6976: 0x9C29, + 6977: 0x9C2A, + 6978: 0x9C31, + 6979: 0x9C35, + 6980: 0x9C36, + 6981: 0x9C37, + 6982: 0x9C3D, + 6983: 0x9C41, + 6984: 0x9C43, + 6985: 0x9C44, + 6986: 0x9C45, + 6987: 0x9C49, + 6988: 0x9C4A, + 6989: 0x9C4E, + 6990: 0x9C4F, + 6991: 0x9C50, + 6992: 0x9C53, + 6993: 0x9C54, + 6994: 0x9C56, + 6995: 0x9C58, + 6996: 0x9C5B, + 6997: 0x9C5D, + 6998: 0x9C5E, + 6999: 0x9C5F, + 7000: 0x9C63, + 7001: 0x9C69, + 7002: 0x9C6A, + 7003: 0x9C5C, + 7004: 0x9C6B, + 7005: 0x9C68, + 7006: 0x9C6E, + 7007: 0x9C70, + 7008: 0x9C72, + 7009: 0x9C75, + 7010: 0x9C77, + 7011: 0x9C7B, + 7012: 0x9CE6, + 7013: 0x9CF2, + 7014: 0x9CF7, + 7015: 0x9CF9, + 7016: 0x9D0B, + 7017: 0x9D02, + 7018: 0x9D11, + 7019: 0x9D17, + 7020: 0x9D18, + 7021: 0x9D1C, + 7022: 0x9D1D, + 7023: 0x9D1E, + 7024: 0x9D2F, + 7025: 0x9D30, + 7026: 0x9D32, + 7027: 0x9D33, + 7028: 0x9D34, + 7029: 0x9D3A, + 7030: 0x9D3C, + 7031: 0x9D45, + 7032: 0x9D3D, + 7033: 0x9D42, + 7034: 0x9D43, + 7035: 0x9D47, + 7036: 0x9D4A, + 7037: 0x9D53, + 7038: 0x9D54, + 7039: 0x9D5F, + 7040: 0x9D63, + 7041: 0x9D62, + 7042: 0x9D65, + 7043: 0x9D69, + 7044: 0x9D6A, + 7045: 0x9D6B, + 7046: 0x9D70, + 7047: 0x9D76, + 7048: 0x9D77, + 7049: 0x9D7B, + 7050: 0x9D7C, + 7051: 0x9D7E, + 7052: 0x9D83, + 7053: 0x9D84, + 7054: 0x9D86, + 7055: 0x9D8A, + 7056: 0x9D8D, + 7057: 0x9D8E, + 7058: 0x9D92, + 7059: 0x9D93, + 7060: 0x9D95, + 7061: 0x9D96, + 7062: 0x9D97, + 7063: 0x9D98, + 7064: 0x9DA1, + 7065: 0x9DAA, + 7066: 0x9DAC, + 7067: 0x9DAE, + 7068: 0x9DB1, + 7069: 0x9DB5, + 7070: 0x9DB9, + 7071: 0x9DBC, + 7072: 0x9DBF, + 7073: 0x9DC3, + 7074: 0x9DC7, + 7075: 0x9DC9, + 7076: 0x9DCA, + 7077: 0x9DD4, + 7078: 0x9DD5, + 7079: 0x9DD6, + 7080: 0x9DD7, + 7081: 0x9DDA, + 7082: 0x9DDE, + 7083: 0x9DDF, + 7084: 0x9DE0, + 7085: 0x9DE5, + 7086: 0x9DE7, + 7087: 0x9DE9, + 7088: 0x9DEB, + 7089: 0x9DEE, + 7090: 0x9DF0, + 7091: 0x9DF3, + 7092: 0x9DF4, + 7093: 0x9DFE, + 7094: 0x9E0A, + 7095: 0x9E02, + 7096: 0x9E07, + 7097: 0x9E0E, + 7098: 0x9E10, + 7099: 0x9E11, + 7100: 0x9E12, + 7101: 0x9E15, + 7102: 0x9E16, + 7103: 0x9E19, + 7104: 0x9E1C, + 7105: 0x9E1D, + 7106: 0x9E7A, + 7107: 0x9E7B, + 7108: 0x9E7C, + 7109: 0x9E80, + 7110: 0x9E82, + 7111: 0x9E83, + 7112: 0x9E84, + 7113: 0x9E85, + 7114: 0x9E87, + 7115: 0x9E8E, + 7116: 0x9E8F, + 7117: 0x9E96, + 7118: 0x9E98, + 7119: 0x9E9B, + 7120: 0x9E9E, + 7121: 0x9EA4, + 7122: 0x9EA8, + 7123: 0x9EAC, + 7124: 0x9EAE, + 7125: 0x9EAF, + 7126: 0x9EB0, + 7127: 0x9EB3, + 7128: 0x9EB4, + 7129: 0x9EB5, + 7130: 0x9EC6, + 7131: 0x9EC8, + 7132: 0x9ECB, + 7133: 0x9ED5, + 7134: 0x9EDF, + 7135: 0x9EE4, + 7136: 0x9EE7, + 7137: 0x9EEC, + 7138: 0x9EED, + 7139: 0x9EEE, + 7140: 0x9EF0, + 7141: 0x9EF1, + 7142: 0x9EF2, + 7143: 0x9EF5, + 7144: 0x9EF8, + 7145: 0x9EFF, + 7146: 0x9F02, + 7147: 0x9F03, + 7148: 0x9F09, + 7149: 0x9F0F, + 7150: 0x9F10, + 7151: 0x9F11, + 7152: 0x9F12, + 7153: 0x9F14, + 7154: 0x9F16, + 7155: 0x9F17, + 7156: 0x9F19, + 7157: 0x9F1A, + 7158: 0x9F1B, + 7159: 0x9F1F, + 7160: 0x9F22, + 7161: 0x9F26, + 7162: 0x9F2A, + 7163: 0x9F2B, + 7164: 0x9F2F, + 7165: 0x9F31, + 7166: 0x9F32, + 7167: 0x9F34, + 7168: 0x9F37, + 7169: 0x9F39, + 7170: 0x9F3A, + 7171: 0x9F3C, + 7172: 0x9F3D, + 7173: 0x9F3F, + 7174: 0x9F41, + 7175: 0x9F43, + 7176: 0x9F44, + 7177: 0x9F45, + 7178: 0x9F46, + 7179: 0x9F47, + 7180: 0x9F53, + 7181: 0x9F55, + 7182: 0x9F56, + 7183: 0x9F57, + 7184: 0x9F58, + 7185: 0x9F5A, + 7186: 0x9F5D, + 7187: 0x9F5E, + 7188: 0x9F68, + 7189: 0x9F69, + 7190: 0x9F6D, + 7191: 0x9F6E, + 7192: 0x9F6F, + 7193: 0x9F70, + 7194: 0x9F71, + 7195: 0x9F73, + 7196: 0x9F75, + 7197: 0x9F7A, + 7198: 0x9F7D, + 7199: 0x9F8F, + 7200: 0x9F90, + 7201: 0x9F91, + 7202: 0x9F92, + 7203: 0x9F94, + 7204: 0x9F96, + 7205: 0x9F97, + 7206: 0x9F9E, + 7207: 0x9FA1, + 7208: 0x9FA2, + 7209: 0x9FA3, + 7210: 0x9FA5, +} + +const ( + jis0208 = 1 + jis0212 = 2 + codeMask = 0x7f + codeShift = 7 + tableShift = 14 +) + +const numEncodeTables = 6 + +// encodeX are the encoding tables from Unicode to JIS code, +// sorted by decreasing length. +// encode0: 20902 entries for runes in [19968, 40870). +// encode1: 1632 entries for runes in [ 8208, 9840). +// encode2: 974 entries for runes in [12288, 13262). +// encode3: 959 entries for runes in [ 161, 1120). +// encode4: 261 entries for runes in [63785, 64046). +// encode5: 229 entries for runes in [65281, 65510). +// +// The high two bits of the value record whether the JIS code comes from the +// JIS0208 table (high bits == 1) or the JIS0212 table (high bits == 2). +// The low 14 bits are two 7-bit unsigned integers j1 and j2 that form the +// JIS code (94*j1 + j2) within that table. + +const encode0Low, encode0High = 19968, 40870 + +var encode0 = [...]uint16{ + 19968 - 19968: jis0208<<14 | 0x0F<<7 | 0x4B, + 19969 - 19968: jis0208<<14 | 0x22<<7 | 0x59, + 19970 - 19968: jis0212<<14 | 0x0F<<7 | 0x00, + 19971 - 19968: jis0208<<14 | 0x1B<<7 | 0x16, + 19972 - 19968: jis0212<<14 | 0x0F<<7 | 0x01, + 19973 - 19968: jis0212<<14 | 0x0F<<7 | 0x02, + 19975 - 19968: jis0208<<14 | 0x2A<<7 | 0x5B, + 19976 - 19968: jis0208<<14 | 0x1D<<7 | 0x45, + 19977 - 19968: jis0208<<14 | 0x1A<<7 | 0x0F, + 19978 - 19968: jis0208<<14 | 0x1D<<7 | 0x44, + 19979 - 19968: jis0208<<14 | 0x11<<7 | 0x1B, + 19980 - 19968: jis0212<<14 | 0x0F<<7 | 0x03, + 19981 - 19968: jis0208<<14 | 0x28<<7 | 0x33, + 19982 - 19968: jis0208<<14 | 0x2C<<7 | 0x1E, + 19984 - 19968: jis0208<<14 | 0x2F<<7 | 0x01, + 19985 - 19968: jis0208<<14 | 0x10<<7 | 0x0E, + 19986 - 19968: jis0212<<14 | 0x0F<<7 | 0x04, + 19988 - 19968: jis0208<<14 | 0x12<<7 | 0x4D, + 19989 - 19968: jis0208<<14 | 0x2F<<7 | 0x02, + 19990 - 19968: jis0208<<14 | 0x1F<<7 | 0x03, + 19991 - 19968: jis0208<<14 | 0x31<<7 | 0x21, + 19992 - 19968: jis0208<<14 | 0x14<<7 | 0x35, + 19993 - 19968: jis0208<<14 | 0x29<<7 | 0x19, + 19998 - 19968: jis0208<<14 | 0x1D<<7 | 0x46, + 19999 - 19968: jis0212<<14 | 0x0F<<7 | 0x05, + 20001 - 19968: jis0208<<14 | 0x2D<<7 | 0x1D, + 20003 - 19968: jis0212<<14 | 0x0F<<7 | 0x06, + 20004 - 19968: jis0212<<14 | 0x0F<<7 | 0x07, + 20006 - 19968: jis0208<<14 | 0x29<<7 | 0x21, + 20008 - 19968: jis0208<<14 | 0x58<<7 | 0x0C, + 20010 - 19968: jis0208<<14 | 0x2F<<7 | 0x03, + 20011 - 19968: jis0212<<14 | 0x0F<<7 | 0x09, + 20013 - 19968: jis0208<<14 | 0x22<<7 | 0x45, + 20014 - 19968: jis0212<<14 | 0x0F<<7 | 0x0A, + 20015 - 19968: jis0212<<14 | 0x0F<<7 | 0x0B, + 20016 - 19968: jis0212<<14 | 0x0F<<7 | 0x0C, + 20017 - 19968: jis0208<<14 | 0x2F<<7 | 0x04, + 20018 - 19968: jis0208<<14 | 0x15<<7 | 0x59, + 20021 - 19968: jis0212<<14 | 0x0F<<7 | 0x0D, + 20022 - 19968: jis0208<<14 | 0x2F<<7 | 0x05, + 20024 - 19968: jis0208<<14 | 0x13<<7 | 0x3C, + 20025 - 19968: jis0208<<14 | 0x22<<7 | 0x0F, + 20027 - 19968: jis0208<<14 | 0x1B<<7 | 0x46, + 20028 - 19968: jis0208<<14 | 0x2F<<7 | 0x06, + 20031 - 19968: jis0208<<14 | 0x2F<<7 | 0x07, + 20032 - 19968: jis0212<<14 | 0x0F<<7 | 0x0E, + 20033 - 19968: jis0212<<14 | 0x0F<<7 | 0x0F, + 20034 - 19968: jis0208<<14 | 0x2F<<7 | 0x08, + 20035 - 19968: jis0208<<14 | 0x26<<7 | 0x14, + 20036 - 19968: jis0212<<14 | 0x0F<<7 | 0x10, + 20037 - 19968: jis0208<<14 | 0x14<<7 | 0x36, + 20039 - 19968: jis0212<<14 | 0x0F<<7 | 0x11, + 20043 - 19968: jis0208<<14 | 0x26<<7 | 0x16, + 20045 - 19968: jis0208<<14 | 0x25<<7 | 0x42, + 20046 - 19968: jis0208<<14 | 0x17<<7 | 0x22, + 20047 - 19968: jis0208<<14 | 0x2A<<7 | 0x12, + 20049 - 19968: jis0212<<14 | 0x0F<<7 | 0x12, + 20053 - 19968: jis0208<<14 | 0x48<<7 | 0x28, + 20054 - 19968: jis0208<<14 | 0x2F<<7 | 0x09, + 20055 - 19968: jis0208<<14 | 0x1D<<7 | 0x47, + 20056 - 19968: jis0208<<14 | 0x2F<<7 | 0x0A, + 20057 - 19968: jis0208<<14 | 0x11<<7 | 0x14, + 20058 - 19968: jis0212<<14 | 0x0F<<7 | 0x13, + 20060 - 19968: jis0212<<14 | 0x0F<<7 | 0x14, + 20061 - 19968: jis0208<<14 | 0x15<<7 | 0x44, + 20062 - 19968: jis0208<<14 | 0x17<<7 | 0x4F, + 20063 - 19968: jis0208<<14 | 0x2B<<7 | 0x48, + 20066 - 19968: jis0208<<14 | 0x35<<7 | 0x05, + 20067 - 19968: jis0212<<14 | 0x0F<<7 | 0x15, + 20072 - 19968: jis0212<<14 | 0x0F<<7 | 0x16, + 20073 - 19968: jis0212<<14 | 0x0F<<7 | 0x17, + 20081 - 19968: jis0208<<14 | 0x2C<<7 | 0x4F, + 20083 - 19968: jis0208<<14 | 0x25<<7 | 0x5C, + 20084 - 19968: jis0212<<14 | 0x0F<<7 | 0x18, + 20085 - 19968: jis0212<<14 | 0x0F<<7 | 0x19, + 20089 - 19968: jis0212<<14 | 0x0F<<7 | 0x1A, + 20094 - 19968: jis0208<<14 | 0x13<<7 | 0x04, + 20095 - 19968: jis0212<<14 | 0x0F<<7 | 0x1B, + 20096 - 19968: jis0208<<14 | 0x14<<7 | 0x14, + 20098 - 19968: jis0208<<14 | 0x2F<<7 | 0x0B, + 20101 - 19968: jis0208<<14 | 0x2F<<7 | 0x0C, + 20102 - 19968: jis0208<<14 | 0x2D<<7 | 0x1A, + 20104 - 19968: jis0208<<14 | 0x2C<<7 | 0x1C, + 20105 - 19968: jis0208<<14 | 0x20<<7 | 0x47, + 20106 - 19968: jis0208<<14 | 0x2F<<7 | 0x0E, + 20107 - 19968: jis0208<<14 | 0x1A<<7 | 0x55, + 20108 - 19968: jis0208<<14 | 0x25<<7 | 0x52, + 20109 - 19968: jis0212<<14 | 0x0F<<7 | 0x1C, + 20110 - 19968: jis0208<<14 | 0x2F<<7 | 0x11, + 20113 - 19968: jis0208<<14 | 0x10<<7 | 0x1D, + 20114 - 19968: jis0208<<14 | 0x17<<7 | 0x3E, + 20116 - 19968: jis0208<<14 | 0x17<<7 | 0x3D, + 20117 - 19968: jis0208<<14 | 0x0F<<7 | 0x45, + 20118 - 19968: jis0212<<14 | 0x0F<<7 | 0x1D, + 20119 - 19968: jis0212<<14 | 0x0F<<7 | 0x1E, + 20120 - 19968: jis0208<<14 | 0x2E<<7 | 0x2A, + 20121 - 19968: jis0208<<14 | 0x2E<<7 | 0x29, + 20123 - 19968: jis0208<<14 | 0x19<<7 | 0x12, + 20124 - 19968: jis0208<<14 | 0x0F<<7 | 0x00, + 20125 - 19968: jis0212<<14 | 0x0F<<7 | 0x1F, + 20126 - 19968: jis0208<<14 | 0x2F<<7 | 0x12, + 20127 - 19968: jis0208<<14 | 0x2F<<7 | 0x13, + 20128 - 19968: jis0208<<14 | 0x2F<<7 | 0x14, + 20129 - 19968: jis0208<<14 | 0x2A<<7 | 0x13, + 20130 - 19968: jis0208<<14 | 0x2F<<7 | 0x15, + 20132 - 19968: jis0208<<14 | 0x17<<7 | 0x51, + 20133 - 19968: jis0208<<14 | 0x0F<<7 | 0x46, + 20134 - 19968: jis0208<<14 | 0x2A<<7 | 0x51, + 20136 - 19968: jis0208<<14 | 0x14<<7 | 0x5B, + 20139 - 19968: jis0208<<14 | 0x14<<7 | 0x5C, + 20140 - 19968: jis0208<<14 | 0x14<<7 | 0x5D, + 20141 - 19968: jis0208<<14 | 0x23<<7 | 0x41, + 20142 - 19968: jis0208<<14 | 0x2D<<7 | 0x1B, + 20143 - 19968: jis0212<<14 | 0x0F<<7 | 0x20, + 20144 - 19968: jis0208<<14 | 0x2F<<7 | 0x16, + 20147 - 19968: jis0208<<14 | 0x2F<<7 | 0x17, + 20150 - 19968: jis0208<<14 | 0x2F<<7 | 0x18, + 20153 - 19968: jis0212<<14 | 0x0F<<7 | 0x21, + 20154 - 19968: jis0208<<14 | 0x1E<<7 | 0x2C, + 20160 - 19968: jis0208<<14 | 0x1C<<7 | 0x19, + 20161 - 19968: jis0208<<14 | 0x1E<<7 | 0x2D, + 20162 - 19968: jis0208<<14 | 0x2F<<7 | 0x1D, + 20163 - 19968: jis0212<<14 | 0x0F<<7 | 0x22, + 20164 - 19968: jis0208<<14 | 0x2F<<7 | 0x1B, + 20166 - 19968: jis0208<<14 | 0x2F<<7 | 0x1C, + 20167 - 19968: jis0208<<14 | 0x14<<7 | 0x37, + 20170 - 19968: jis0208<<14 | 0x19<<7 | 0x02, + 20171 - 19968: jis0208<<14 | 0x11<<7 | 0x4F, + 20173 - 19968: jis0208<<14 | 0x2F<<7 | 0x1A, + 20174 - 19968: jis0208<<14 | 0x2F<<7 | 0x19, + 20175 - 19968: jis0208<<14 | 0x29<<7 | 0x08, + 20176 - 19968: jis0212<<14 | 0x0F<<7 | 0x23, + 20180 - 19968: jis0208<<14 | 0x1A<<7 | 0x25, + 20181 - 19968: jis0208<<14 | 0x1A<<7 | 0x24, + 20182 - 19968: jis0208<<14 | 0x21<<7 | 0x1D, + 20183 - 19968: jis0208<<14 | 0x2F<<7 | 0x1E, + 20184 - 19968: jis0208<<14 | 0x28<<7 | 0x34, + 20185 - 19968: jis0208<<14 | 0x1F<<7 | 0x46, + 20186 - 19968: jis0212<<14 | 0x0F<<7 | 0x24, + 20187 - 19968: jis0212<<14 | 0x0F<<7 | 0x25, + 20189 - 19968: jis0208<<14 | 0x00<<7 | 0x17, + 20190 - 19968: jis0208<<14 | 0x2F<<7 | 0x1F, + 20191 - 19968: jis0208<<14 | 0x2F<<7 | 0x21, + 20192 - 19968: jis0212<<14 | 0x0F<<7 | 0x26, + 20193 - 19968: jis0208<<14 | 0x58<<7 | 0x0D, + 20194 - 19968: jis0212<<14 | 0x0F<<7 | 0x28, + 20195 - 19968: jis0208<<14 | 0x21<<7 | 0x44, + 20196 - 19968: jis0208<<14 | 0x2D<<7 | 0x40, + 20197 - 19968: jis0208<<14 | 0x0F<<7 | 0x29, + 20200 - 19968: jis0212<<14 | 0x0F<<7 | 0x29, + 20205 - 19968: jis0208<<14 | 0x2F<<7 | 0x20, + 20206 - 19968: jis0208<<14 | 0x11<<7 | 0x1D, + 20207 - 19968: jis0212<<14 | 0x0F<<7 | 0x2A, + 20208 - 19968: jis0208<<14 | 0x15<<7 | 0x23, + 20209 - 19968: jis0212<<14 | 0x0F<<7 | 0x2B, + 20210 - 19968: jis0208<<14 | 0x22<<7 | 0x46, + 20211 - 19968: jis0212<<14 | 0x0F<<7 | 0x2C, + 20213 - 19968: jis0212<<14 | 0x0F<<7 | 0x2D, + 20214 - 19968: jis0208<<14 | 0x16<<7 | 0x4E, + 20215 - 19968: jis0208<<14 | 0x2F<<7 | 0x22, + 20219 - 19968: jis0208<<14 | 0x26<<7 | 0x03, + 20220 - 19968: jis0208<<14 | 0x58<<7 | 0x0E, + 20221 - 19968: jis0212<<14 | 0x0F<<7 | 0x2E, + 20222 - 19968: jis0212<<14 | 0x0F<<7 | 0x2F, + 20223 - 19968: jis0212<<14 | 0x0F<<7 | 0x30, + 20224 - 19968: jis0208<<14 | 0x58<<7 | 0x0F, + 20225 - 19968: jis0208<<14 | 0x13<<7 | 0x4A, + 20226 - 19968: jis0212<<14 | 0x0F<<7 | 0x32, + 20227 - 19968: jis0208<<14 | 0x58<<7 | 0x10, + 20232 - 19968: jis0212<<14 | 0x0F<<7 | 0x34, + 20233 - 19968: jis0208<<14 | 0x2F<<7 | 0x23, + 20234 - 19968: jis0208<<14 | 0x0F<<7 | 0x2A, + 20235 - 19968: jis0212<<14 | 0x0F<<7 | 0x35, + 20236 - 19968: jis0212<<14 | 0x0F<<7 | 0x36, + 20237 - 19968: jis0208<<14 | 0x17<<7 | 0x3F, + 20238 - 19968: jis0208<<14 | 0x13<<7 | 0x4B, + 20239 - 19968: jis0208<<14 | 0x28<<7 | 0x59, + 20240 - 19968: jis0208<<14 | 0x27<<7 | 0x11, + 20241 - 19968: jis0208<<14 | 0x14<<7 | 0x38, + 20242 - 19968: jis0212<<14 | 0x0F<<7 | 0x37, + 20245 - 19968: jis0212<<14 | 0x0F<<7 | 0x38, + 20246 - 19968: jis0212<<14 | 0x0F<<7 | 0x39, + 20247 - 19968: jis0212<<14 | 0x0F<<7 | 0x3A, + 20249 - 19968: jis0212<<14 | 0x0F<<7 | 0x3B, + 20250 - 19968: jis0208<<14 | 0x11<<7 | 0x50, + 20252 - 19968: jis0208<<14 | 0x2F<<7 | 0x46, + 20253 - 19968: jis0208<<14 | 0x24<<7 | 0x20, + 20270 - 19968: jis0212<<14 | 0x0F<<7 | 0x3C, + 20271 - 19968: jis0208<<14 | 0x26<<7 | 0x4B, + 20272 - 19968: jis0208<<14 | 0x2F<<7 | 0x25, + 20273 - 19968: jis0212<<14 | 0x0F<<7 | 0x3D, + 20275 - 19968: jis0212<<14 | 0x0F<<7 | 0x3F, + 20276 - 19968: jis0208<<14 | 0x27<<7 | 0x1B, + 20277 - 19968: jis0212<<14 | 0x0F<<7 | 0x40, + 20278 - 19968: jis0208<<14 | 0x2D<<7 | 0x41, + 20279 - 19968: jis0212<<14 | 0x0F<<7 | 0x41, + 20280 - 19968: jis0208<<14 | 0x1E<<7 | 0x0C, + 20281 - 19968: jis0208<<14 | 0x58<<7 | 0x11, + 20282 - 19968: jis0208<<14 | 0x1A<<7 | 0x26, + 20283 - 19968: jis0212<<14 | 0x0F<<7 | 0x43, + 20284 - 19968: jis0208<<14 | 0x1A<<7 | 0x56, + 20285 - 19968: jis0208<<14 | 0x11<<7 | 0x1F, + 20286 - 19968: jis0212<<14 | 0x0F<<7 | 0x44, + 20288 - 19968: jis0212<<14 | 0x0F<<7 | 0x45, + 20290 - 19968: jis0212<<14 | 0x0F<<7 | 0x46, + 20291 - 19968: jis0208<<14 | 0x23<<7 | 0x30, + 20294 - 19968: jis0208<<14 | 0x22<<7 | 0x01, + 20295 - 19968: jis0208<<14 | 0x2F<<7 | 0x29, + 20296 - 19968: jis0212<<14 | 0x0F<<7 | 0x47, + 20297 - 19968: jis0212<<14 | 0x0F<<7 | 0x48, + 20299 - 19968: jis0212<<14 | 0x0F<<7 | 0x49, + 20300 - 19968: jis0212<<14 | 0x0F<<7 | 0x4A, + 20301 - 19968: jis0208<<14 | 0x0F<<7 | 0x2B, + 20302 - 19968: jis0208<<14 | 0x23<<7 | 0x42, + 20303 - 19968: jis0208<<14 | 0x1C<<7 | 0x1A, + 20304 - 19968: jis0208<<14 | 0x19<<7 | 0x13, + 20305 - 19968: jis0208<<14 | 0x2C<<7 | 0x03, + 20306 - 19968: jis0212<<14 | 0x0F<<7 | 0x4B, + 20307 - 19968: jis0208<<14 | 0x21<<7 | 0x2D, + 20308 - 19968: jis0212<<14 | 0x0F<<7 | 0x4C, + 20309 - 19968: jis0208<<14 | 0x11<<7 | 0x1E, + 20310 - 19968: jis0208<<14 | 0x58<<7 | 0x12, + 20311 - 19968: jis0208<<14 | 0x2F<<7 | 0x28, + 20312 - 19968: jis0212<<14 | 0x0F<<7 | 0x4E, + 20313 - 19968: jis0208<<14 | 0x2C<<7 | 0x1D, + 20314 - 19968: jis0208<<14 | 0x2F<<7 | 0x24, + 20315 - 19968: jis0208<<14 | 0x2F<<7 | 0x26, + 20316 - 19968: jis0208<<14 | 0x19<<7 | 0x4D, + 20317 - 19968: jis0208<<14 | 0x2F<<7 | 0x27, + 20318 - 19968: jis0208<<14 | 0x34<<7 | 0x03, + 20319 - 19968: jis0212<<14 | 0x0F<<7 | 0x4F, + 20320 - 19968: jis0212<<14 | 0x0F<<7 | 0x3E, + 20323 - 19968: jis0212<<14 | 0x0F<<7 | 0x50, + 20329 - 19968: jis0208<<14 | 0x2F<<7 | 0x2F, + 20330 - 19968: jis0212<<14 | 0x0F<<7 | 0x51, + 20332 - 19968: jis0212<<14 | 0x0F<<7 | 0x52, + 20334 - 19968: jis0212<<14 | 0x0F<<7 | 0x53, + 20335 - 19968: jis0208<<14 | 0x2F<<7 | 0x32, + 20336 - 19968: jis0208<<14 | 0x2F<<7 | 0x30, + 20337 - 19968: jis0212<<14 | 0x0F<<7 | 0x54, + 20339 - 19968: jis0208<<14 | 0x11<<7 | 0x21, + 20341 - 19968: jis0208<<14 | 0x29<<7 | 0x1A, + 20342 - 19968: jis0208<<14 | 0x2F<<7 | 0x2A, + 20343 - 19968: jis0212<<14 | 0x0F<<7 | 0x55, + 20344 - 19968: jis0212<<14 | 0x0F<<7 | 0x56, + 20345 - 19968: jis0212<<14 | 0x0F<<7 | 0x57, + 20346 - 19968: jis0212<<14 | 0x0F<<7 | 0x58, + 20347 - 19968: jis0208<<14 | 0x2F<<7 | 0x2E, + 20348 - 19968: jis0208<<14 | 0x17<<7 | 0x52, + 20349 - 19968: jis0212<<14 | 0x0F<<7 | 0x59, + 20350 - 19968: jis0212<<14 | 0x0F<<7 | 0x5A, + 20351 - 19968: jis0208<<14 | 0x1A<<7 | 0x27, + 20353 - 19968: jis0212<<14 | 0x0F<<7 | 0x5B, + 20354 - 19968: jis0212<<14 | 0x0F<<7 | 0x5C, + 20355 - 19968: jis0208<<14 | 0x13<<7 | 0x05, + 20356 - 19968: jis0212<<14 | 0x0F<<7 | 0x5D, + 20357 - 19968: jis0212<<14 | 0x10<<7 | 0x00, + 20358 - 19968: jis0208<<14 | 0x2F<<7 | 0x33, + 20360 - 19968: jis0208<<14 | 0x2F<<7 | 0x2B, + 20361 - 19968: jis0212<<14 | 0x10<<7 | 0x01, + 20362 - 19968: jis0208<<14 | 0x58<<7 | 0x14, + 20363 - 19968: jis0208<<14 | 0x2D<<7 | 0x42, + 20364 - 19968: jis0212<<14 | 0x10<<7 | 0x03, + 20365 - 19968: jis0208<<14 | 0x1A<<7 | 0x57, + 20366 - 19968: jis0212<<14 | 0x10<<7 | 0x04, + 20367 - 19968: jis0208<<14 | 0x2F<<7 | 0x2C, + 20368 - 19968: jis0212<<14 | 0x10<<7 | 0x05, + 20369 - 19968: jis0208<<14 | 0x2F<<7 | 0x31, + 20370 - 19968: jis0208<<14 | 0x58<<7 | 0x13, + 20371 - 19968: jis0212<<14 | 0x10<<7 | 0x07, + 20372 - 19968: jis0208<<14 | 0x58<<7 | 0x16, + 20374 - 19968: jis0208<<14 | 0x2F<<7 | 0x34, + 20375 - 19968: jis0212<<14 | 0x10<<7 | 0x09, + 20376 - 19968: jis0208<<14 | 0x2F<<7 | 0x2D, + 20377 - 19968: jis0212<<14 | 0x10<<7 | 0x0A, + 20378 - 19968: jis0208<<14 | 0x58<<7 | 0x15, + 20379 - 19968: jis0208<<14 | 0x15<<7 | 0x00, + 20381 - 19968: jis0208<<14 | 0x0F<<7 | 0x2C, + 20382 - 19968: jis0212<<14 | 0x10<<7 | 0x0C, + 20383 - 19968: jis0212<<14 | 0x10<<7 | 0x0D, + 20384 - 19968: jis0208<<14 | 0x15<<7 | 0x01, + 20385 - 19968: jis0208<<14 | 0x11<<7 | 0x20, + 20395 - 19968: jis0208<<14 | 0x34<<7 | 0x04, + 20397 - 19968: jis0208<<14 | 0x2A<<7 | 0x58, + 20398 - 19968: jis0208<<14 | 0x28<<7 | 0x4D, + 20399 - 19968: jis0208<<14 | 0x17<<7 | 0x53, + 20402 - 19968: jis0212<<14 | 0x10<<7 | 0x0E, + 20405 - 19968: jis0208<<14 | 0x1E<<7 | 0x0E, + 20406 - 19968: jis0208<<14 | 0x2D<<7 | 0x16, + 20407 - 19968: jis0212<<14 | 0x10<<7 | 0x0F, + 20409 - 19968: jis0212<<14 | 0x10<<7 | 0x10, + 20411 - 19968: jis0212<<14 | 0x10<<7 | 0x11, + 20412 - 19968: jis0212<<14 | 0x10<<7 | 0x12, + 20413 - 19968: jis0212<<14 | 0x10<<7 | 0x13, + 20414 - 19968: jis0212<<14 | 0x10<<7 | 0x14, + 20415 - 19968: jis0208<<14 | 0x29<<7 | 0x37, + 20416 - 19968: jis0212<<14 | 0x10<<7 | 0x15, + 20417 - 19968: jis0212<<14 | 0x10<<7 | 0x16, + 20418 - 19968: jis0208<<14 | 0x16<<7 | 0x17, + 20419 - 19968: jis0208<<14 | 0x21<<7 | 0x04, + 20420 - 19968: jis0208<<14 | 0x11<<7 | 0x43, + 20421 - 19968: jis0212<<14 | 0x10<<7 | 0x17, + 20422 - 19968: jis0212<<14 | 0x10<<7 | 0x18, + 20424 - 19968: jis0212<<14 | 0x10<<7 | 0x19, + 20425 - 19968: jis0208<<14 | 0x58<<7 | 0x05, + 20426 - 19968: jis0208<<14 | 0x1C<<7 | 0x32, + 20427 - 19968: jis0212<<14 | 0x10<<7 | 0x1B, + 20428 - 19968: jis0212<<14 | 0x10<<7 | 0x1C, + 20429 - 19968: jis0208<<14 | 0x58<<7 | 0x17, + 20430 - 19968: jis0208<<14 | 0x2F<<7 | 0x38, + 20431 - 19968: jis0212<<14 | 0x10<<7 | 0x1E, + 20432 - 19968: jis0208<<14 | 0x2F<<7 | 0x3D, + 20433 - 19968: jis0208<<14 | 0x2F<<7 | 0x3B, + 20434 - 19968: jis0212<<14 | 0x10<<7 | 0x1F, + 20436 - 19968: jis0208<<14 | 0x2F<<7 | 0x36, + 20439 - 19968: jis0208<<14 | 0x21<<7 | 0x0E, + 20440 - 19968: jis0208<<14 | 0x2F<<7 | 0x39, + 20442 - 19968: jis0208<<14 | 0x2F<<7 | 0x3C, + 20443 - 19968: jis0208<<14 | 0x2F<<7 | 0x3A, + 20444 - 19968: jis0212<<14 | 0x10<<7 | 0x20, + 20445 - 19968: jis0208<<14 | 0x29<<7 | 0x3C, + 20447 - 19968: jis0208<<14 | 0x2F<<7 | 0x37, + 20448 - 19968: jis0212<<14 | 0x10<<7 | 0x21, + 20449 - 19968: jis0208<<14 | 0x1E<<7 | 0x0D, + 20450 - 19968: jis0212<<14 | 0x10<<7 | 0x22, + 20451 - 19968: jis0208<<14 | 0x2A<<7 | 0x52, + 20452 - 19968: jis0208<<14 | 0x2F<<7 | 0x3E, + 20453 - 19968: jis0208<<14 | 0x2F<<7 | 0x3F, + 20462 - 19968: jis0208<<14 | 0x1C<<7 | 0x03, + 20463 - 19968: jis0208<<14 | 0x2F<<7 | 0x4C, + 20464 - 19968: jis0212<<14 | 0x10<<7 | 0x23, + 20466 - 19968: jis0212<<14 | 0x10<<7 | 0x24, + 20467 - 19968: jis0208<<14 | 0x26<<7 | 0x2F, + 20469 - 19968: jis0208<<14 | 0x28<<7 | 0x15, + 20470 - 19968: jis0208<<14 | 0x2F<<7 | 0x47, + 20472 - 19968: jis0208<<14 | 0x29<<7 | 0x4F, + 20474 - 19968: jis0208<<14 | 0x11<<7 | 0x15, + 20476 - 19968: jis0212<<14 | 0x10<<7 | 0x25, + 20477 - 19968: jis0212<<14 | 0x10<<7 | 0x26, + 20478 - 19968: jis0208<<14 | 0x2F<<7 | 0x4B, + 20479 - 19968: jis0208<<14 | 0x58<<7 | 0x1A, + 20480 - 19968: jis0212<<14 | 0x10<<7 | 0x28, + 20481 - 19968: jis0212<<14 | 0x10<<7 | 0x29, + 20484 - 19968: jis0212<<14 | 0x10<<7 | 0x2A, + 20485 - 19968: jis0208<<14 | 0x2F<<7 | 0x45, + 20486 - 19968: jis0208<<14 | 0x2F<<7 | 0x4E, + 20487 - 19968: jis0212<<14 | 0x10<<7 | 0x2B, + 20489 - 19968: jis0208<<14 | 0x20<<7 | 0x31, + 20490 - 19968: jis0212<<14 | 0x10<<7 | 0x2C, + 20491 - 19968: jis0208<<14 | 0x17<<7 | 0x23, + 20492 - 19968: jis0212<<14 | 0x10<<7 | 0x2D, + 20493 - 19968: jis0208<<14 | 0x26<<7 | 0x3B, + 20494 - 19968: jis0212<<14 | 0x10<<7 | 0x2E, + 20495 - 19968: jis0208<<14 | 0x3F<<7 | 0x26, + 20496 - 19968: jis0212<<14 | 0x10<<7 | 0x2F, + 20497 - 19968: jis0208<<14 | 0x2F<<7 | 0x4D, + 20498 - 19968: jis0208<<14 | 0x24<<7 | 0x3C, + 20499 - 19968: jis0212<<14 | 0x10<<7 | 0x30, + 20500 - 19968: jis0208<<14 | 0x2F<<7 | 0x42, + 20502 - 19968: jis0208<<14 | 0x17<<7 | 0x55, + 20503 - 19968: jis0212<<14 | 0x10<<7 | 0x31, + 20504 - 19968: jis0212<<14 | 0x10<<7 | 0x32, + 20505 - 19968: jis0208<<14 | 0x17<<7 | 0x54, + 20506 - 19968: jis0208<<14 | 0x2F<<7 | 0x40, + 20507 - 19968: jis0212<<14 | 0x10<<7 | 0x33, + 20508 - 19968: jis0212<<14 | 0x10<<7 | 0x34, + 20509 - 19968: jis0212<<14 | 0x10<<7 | 0x35, + 20510 - 19968: jis0208<<14 | 0x58<<7 | 0x1B, + 20511 - 19968: jis0208<<14 | 0x1B<<7 | 0x39, + 20513 - 19968: jis0208<<14 | 0x2F<<7 | 0x48, + 20514 - 19968: jis0208<<14 | 0x58<<7 | 0x19, + 20515 - 19968: jis0208<<14 | 0x29<<7 | 0x4E, + 20516 - 19968: jis0208<<14 | 0x22<<7 | 0x2C, + 20517 - 19968: jis0208<<14 | 0x2F<<7 | 0x44, + 20518 - 19968: jis0208<<14 | 0x16<<7 | 0x50, + 20519 - 19968: jis0212<<14 | 0x10<<7 | 0x38, + 20520 - 19968: jis0208<<14 | 0x2F<<7 | 0x41, + 20521 - 19968: jis0208<<14 | 0x2F<<7 | 0x49, + 20522 - 19968: jis0208<<14 | 0x2F<<7 | 0x43, + 20523 - 19968: jis0208<<14 | 0x2D<<7 | 0x30, + 20524 - 19968: jis0208<<14 | 0x2F<<7 | 0x4A, + 20525 - 19968: jis0208<<14 | 0x2E<<7 | 0x20, + 20526 - 19968: jis0212<<14 | 0x10<<7 | 0x39, + 20528 - 19968: jis0212<<14 | 0x10<<7 | 0x3A, + 20530 - 19968: jis0212<<14 | 0x10<<7 | 0x3B, + 20531 - 19968: jis0212<<14 | 0x10<<7 | 0x3C, + 20533 - 19968: jis0212<<14 | 0x10<<7 | 0x3D, + 20534 - 19968: jis0208<<14 | 0x15<<7 | 0x45, + 20537 - 19968: jis0208<<14 | 0x16<<7 | 0x4F, + 20539 - 19968: jis0212<<14 | 0x10<<7 | 0x55, + 20544 - 19968: jis0208<<14 | 0x58<<7 | 0x18, + 20545 - 19968: jis0212<<14 | 0x10<<7 | 0x3F, + 20546 - 19968: jis0208<<14 | 0x58<<7 | 0x1E, + 20547 - 19968: jis0208<<14 | 0x2F<<7 | 0x4F, + 20549 - 19968: jis0212<<14 | 0x10<<7 | 0x41, + 20550 - 19968: jis0208<<14 | 0x58<<7 | 0x1C, + 20551 - 19968: jis0208<<14 | 0x2F<<7 | 0x50, + 20552 - 19968: jis0208<<14 | 0x2F<<7 | 0x54, + 20553 - 19968: jis0208<<14 | 0x0F<<7 | 0x2D, + 20554 - 19968: jis0212<<14 | 0x10<<7 | 0x43, + 20556 - 19968: jis0212<<14 | 0x10<<7 | 0x44, + 20558 - 19968: jis0212<<14 | 0x10<<7 | 0x45, + 20559 - 19968: jis0208<<14 | 0x29<<7 | 0x2F, + 20560 - 19968: jis0208<<14 | 0x2F<<7 | 0x53, + 20561 - 19968: jis0212<<14 | 0x10<<7 | 0x46, + 20562 - 19968: jis0212<<14 | 0x10<<7 | 0x47, + 20563 - 19968: jis0212<<14 | 0x10<<7 | 0x48, + 20565 - 19968: jis0208<<14 | 0x2F<<7 | 0x52, + 20566 - 19968: jis0208<<14 | 0x2F<<7 | 0x56, + 20567 - 19968: jis0212<<14 | 0x10<<7 | 0x49, + 20569 - 19968: jis0212<<14 | 0x10<<7 | 0x4A, + 20570 - 19968: jis0208<<14 | 0x2F<<7 | 0x55, + 20572 - 19968: jis0208<<14 | 0x23<<7 | 0x43, + 20575 - 19968: jis0212<<14 | 0x10<<7 | 0x4B, + 20576 - 19968: jis0212<<14 | 0x10<<7 | 0x4C, + 20578 - 19968: jis0212<<14 | 0x10<<7 | 0x4D, + 20579 - 19968: jis0212<<14 | 0x10<<7 | 0x4E, + 20581 - 19968: jis0208<<14 | 0x16<<7 | 0x51, + 20582 - 19968: jis0212<<14 | 0x10<<7 | 0x4F, + 20583 - 19968: jis0212<<14 | 0x10<<7 | 0x50, + 20586 - 19968: jis0212<<14 | 0x10<<7 | 0x51, + 20588 - 19968: jis0208<<14 | 0x2F<<7 | 0x57, + 20589 - 19968: jis0212<<14 | 0x10<<7 | 0x52, + 20592 - 19968: jis0208<<14 | 0x58<<7 | 0x1D, + 20593 - 19968: jis0212<<14 | 0x10<<7 | 0x54, + 20594 - 19968: jis0208<<14 | 0x1B<<7 | 0x24, + 20596 - 19968: jis0208<<14 | 0x21<<7 | 0x05, + 20597 - 19968: jis0208<<14 | 0x23<<7 | 0x44, + 20598 - 19968: jis0208<<14 | 0x15<<7 | 0x55, + 20600 - 19968: jis0208<<14 | 0x2F<<7 | 0x58, + 20605 - 19968: jis0208<<14 | 0x14<<7 | 0x15, + 20608 - 19968: jis0208<<14 | 0x2F<<7 | 0x59, + 20609 - 19968: jis0212<<14 | 0x10<<7 | 0x56, + 20611 - 19968: jis0212<<14 | 0x10<<7 | 0x57, + 20612 - 19968: jis0212<<14 | 0x10<<7 | 0x58, + 20613 - 19968: jis0208<<14 | 0x2F<<7 | 0x5B, + 20614 - 19968: jis0212<<14 | 0x10<<7 | 0x59, + 20618 - 19968: jis0212<<14 | 0x10<<7 | 0x5A, + 20621 - 19968: jis0208<<14 | 0x2A<<7 | 0x14, + 20622 - 19968: jis0212<<14 | 0x10<<7 | 0x5B, + 20623 - 19968: jis0212<<14 | 0x10<<7 | 0x5C, + 20624 - 19968: jis0212<<14 | 0x10<<7 | 0x5D, + 20625 - 19968: jis0208<<14 | 0x16<<7 | 0x45, + 20626 - 19968: jis0212<<14 | 0x11<<7 | 0x00, + 20627 - 19968: jis0212<<14 | 0x11<<7 | 0x01, + 20628 - 19968: jis0208<<14 | 0x58<<7 | 0x1F, + 20630 - 19968: jis0212<<14 | 0x11<<7 | 0x03, + 20632 - 19968: jis0208<<14 | 0x1A<<7 | 0x10, + 20633 - 19968: jis0208<<14 | 0x27<<7 | 0x56, + 20634 - 19968: jis0208<<14 | 0x2F<<7 | 0x5A, + 20635 - 19968: jis0212<<14 | 0x11<<7 | 0x04, + 20636 - 19968: jis0212<<14 | 0x11<<7 | 0x05, + 20638 - 19968: jis0212<<14 | 0x11<<7 | 0x06, + 20639 - 19968: jis0212<<14 | 0x11<<7 | 0x07, + 20640 - 19968: jis0212<<14 | 0x11<<7 | 0x08, + 20641 - 19968: jis0212<<14 | 0x11<<7 | 0x09, + 20642 - 19968: jis0212<<14 | 0x11<<7 | 0x0A, + 20650 - 19968: jis0212<<14 | 0x11<<7 | 0x0B, + 20652 - 19968: jis0208<<14 | 0x19<<7 | 0x24, + 20653 - 19968: jis0208<<14 | 0x2C<<7 | 0x22, + 20655 - 19968: jis0212<<14 | 0x11<<7 | 0x0C, + 20656 - 19968: jis0212<<14 | 0x11<<7 | 0x0D, + 20658 - 19968: jis0208<<14 | 0x2F<<7 | 0x5D, + 20659 - 19968: jis0208<<14 | 0x30<<7 | 0x02, + 20660 - 19968: jis0208<<14 | 0x2F<<7 | 0x5C, + 20661 - 19968: jis0208<<14 | 0x19<<7 | 0x23, + 20663 - 19968: jis0208<<14 | 0x1C<<7 | 0x5C, + 20665 - 19968: jis0212<<14 | 0x11<<7 | 0x0E, + 20666 - 19968: jis0212<<14 | 0x11<<7 | 0x0F, + 20669 - 19968: jis0212<<14 | 0x11<<7 | 0x10, + 20670 - 19968: jis0208<<14 | 0x16<<7 | 0x18, + 20672 - 19968: jis0212<<14 | 0x11<<7 | 0x11, + 20674 - 19968: jis0208<<14 | 0x30<<7 | 0x03, + 20675 - 19968: jis0212<<14 | 0x11<<7 | 0x12, + 20676 - 19968: jis0212<<14 | 0x11<<7 | 0x13, + 20677 - 19968: jis0208<<14 | 0x15<<7 | 0x2E, + 20679 - 19968: jis0212<<14 | 0x11<<7 | 0x14, + 20681 - 19968: jis0208<<14 | 0x30<<7 | 0x00, + 20682 - 19968: jis0208<<14 | 0x30<<7 | 0x01, + 20684 - 19968: jis0212<<14 | 0x11<<7 | 0x15, + 20685 - 19968: jis0208<<14 | 0x25<<7 | 0x0E, + 20686 - 19968: jis0212<<14 | 0x11<<7 | 0x16, + 20687 - 19968: jis0208<<14 | 0x20<<7 | 0x5B, + 20688 - 19968: jis0212<<14 | 0x11<<7 | 0x17, + 20689 - 19968: jis0208<<14 | 0x15<<7 | 0x02, + 20691 - 19968: jis0212<<14 | 0x11<<7 | 0x18, + 20692 - 19968: jis0212<<14 | 0x11<<7 | 0x19, + 20693 - 19968: jis0208<<14 | 0x2A<<7 | 0x2C, + 20694 - 19968: jis0208<<14 | 0x30<<7 | 0x04, + 20696 - 19968: jis0208<<14 | 0x58<<7 | 0x21, + 20698 - 19968: jis0208<<14 | 0x2D<<7 | 0x1C, + 20700 - 19968: jis0212<<14 | 0x11<<7 | 0x1B, + 20701 - 19968: jis0212<<14 | 0x11<<7 | 0x1C, + 20702 - 19968: jis0208<<14 | 0x30<<7 | 0x05, + 20703 - 19968: jis0212<<14 | 0x11<<7 | 0x1D, + 20706 - 19968: jis0212<<14 | 0x11<<7 | 0x1E, + 20707 - 19968: jis0208<<14 | 0x30<<7 | 0x08, + 20708 - 19968: jis0212<<14 | 0x11<<7 | 0x1F, + 20709 - 19968: jis0208<<14 | 0x30<<7 | 0x06, + 20710 - 19968: jis0212<<14 | 0x11<<7 | 0x20, + 20711 - 19968: jis0208<<14 | 0x20<<7 | 0x2D, + 20712 - 19968: jis0212<<14 | 0x11<<7 | 0x21, + 20713 - 19968: jis0212<<14 | 0x11<<7 | 0x22, + 20717 - 19968: jis0208<<14 | 0x30<<7 | 0x07, + 20718 - 19968: jis0208<<14 | 0x30<<7 | 0x09, + 20719 - 19968: jis0212<<14 | 0x11<<7 | 0x23, + 20721 - 19968: jis0212<<14 | 0x11<<7 | 0x24, + 20722 - 19968: jis0212<<14 | 0x11<<7 | 0x30, + 20724 - 19968: jis0208<<14 | 0x58<<7 | 0x20, + 20725 - 19968: jis0208<<14 | 0x30<<7 | 0x0B, + 20726 - 19968: jis0212<<14 | 0x11<<7 | 0x25, + 20729 - 19968: jis0208<<14 | 0x30<<7 | 0x0A, + 20730 - 19968: jis0212<<14 | 0x11<<7 | 0x26, + 20731 - 19968: jis0208<<14 | 0x29<<7 | 0x27, + 20734 - 19968: jis0212<<14 | 0x11<<7 | 0x27, + 20736 - 19968: jis0208<<14 | 0x14<<7 | 0x16, + 20737 - 19968: jis0208<<14 | 0x30<<7 | 0x0D, + 20738 - 19968: jis0208<<14 | 0x30<<7 | 0x0E, + 20739 - 19968: jis0212<<14 | 0x11<<7 | 0x28, + 20740 - 19968: jis0208<<14 | 0x11<<7 | 0x0E, + 20742 - 19968: jis0212<<14 | 0x11<<7 | 0x29, + 20743 - 19968: jis0212<<14 | 0x11<<7 | 0x2A, + 20744 - 19968: jis0212<<14 | 0x11<<7 | 0x2B, + 20745 - 19968: jis0208<<14 | 0x30<<7 | 0x0C, + 20747 - 19968: jis0212<<14 | 0x11<<7 | 0x2C, + 20748 - 19968: jis0212<<14 | 0x11<<7 | 0x2D, + 20749 - 19968: jis0212<<14 | 0x11<<7 | 0x2E, + 20750 - 19968: jis0212<<14 | 0x11<<7 | 0x2F, + 20752 - 19968: jis0212<<14 | 0x11<<7 | 0x31, + 20754 - 19968: jis0208<<14 | 0x1B<<7 | 0x53, + 20756 - 19968: jis0208<<14 | 0x30<<7 | 0x11, + 20757 - 19968: jis0208<<14 | 0x30<<7 | 0x10, + 20758 - 19968: jis0208<<14 | 0x30<<7 | 0x0F, + 20759 - 19968: jis0212<<14 | 0x11<<7 | 0x32, + 20760 - 19968: jis0208<<14 | 0x2F<<7 | 0x35, + 20761 - 19968: jis0212<<14 | 0x11<<7 | 0x33, + 20762 - 19968: jis0208<<14 | 0x30<<7 | 0x12, + 20763 - 19968: jis0212<<14 | 0x11<<7 | 0x34, + 20764 - 19968: jis0212<<14 | 0x11<<7 | 0x35, + 20765 - 19968: jis0212<<14 | 0x11<<7 | 0x36, + 20766 - 19968: jis0212<<14 | 0x11<<7 | 0x37, + 20767 - 19968: jis0208<<14 | 0x1C<<7 | 0x5D, + 20769 - 19968: jis0208<<14 | 0x30<<7 | 0x13, + 20771 - 19968: jis0212<<14 | 0x11<<7 | 0x38, + 20775 - 19968: jis0212<<14 | 0x11<<7 | 0x39, + 20776 - 19968: jis0212<<14 | 0x11<<7 | 0x3A, + 20778 - 19968: jis0208<<14 | 0x2C<<7 | 0x04, + 20780 - 19968: jis0212<<14 | 0x11<<7 | 0x3B, + 20781 - 19968: jis0212<<14 | 0x11<<7 | 0x3C, + 20783 - 19968: jis0212<<14 | 0x11<<7 | 0x3D, + 20785 - 19968: jis0212<<14 | 0x11<<7 | 0x3E, + 20786 - 19968: jis0208<<14 | 0x2B<<7 | 0x38, + 20787 - 19968: jis0212<<14 | 0x11<<7 | 0x3F, + 20788 - 19968: jis0212<<14 | 0x11<<7 | 0x40, + 20789 - 19968: jis0212<<14 | 0x11<<7 | 0x41, + 20791 - 19968: jis0208<<14 | 0x30<<7 | 0x15, + 20792 - 19968: jis0212<<14 | 0x11<<7 | 0x42, + 20793 - 19968: jis0212<<14 | 0x11<<7 | 0x43, + 20794 - 19968: jis0208<<14 | 0x30<<7 | 0x14, + 20795 - 19968: jis0208<<14 | 0x30<<7 | 0x17, + 20796 - 19968: jis0208<<14 | 0x30<<7 | 0x16, + 20799 - 19968: jis0208<<14 | 0x30<<7 | 0x18, + 20800 - 19968: jis0208<<14 | 0x30<<7 | 0x19, + 20801 - 19968: jis0208<<14 | 0x0F<<7 | 0x53, + 20802 - 19968: jis0212<<14 | 0x11<<7 | 0x44, + 20803 - 19968: jis0208<<14 | 0x17<<7 | 0x14, + 20804 - 19968: jis0208<<14 | 0x16<<7 | 0x1A, + 20805 - 19968: jis0208<<14 | 0x1C<<7 | 0x1B, + 20806 - 19968: jis0208<<14 | 0x22<<7 | 0x5A, + 20807 - 19968: jis0208<<14 | 0x15<<7 | 0x03, + 20808 - 19968: jis0208<<14 | 0x1F<<7 | 0x47, + 20809 - 19968: jis0208<<14 | 0x17<<7 | 0x56, + 20810 - 19968: jis0208<<14 | 0x58<<7 | 0x22, + 20811 - 19968: jis0208<<14 | 0x18<<7 | 0x4D, + 20812 - 19968: jis0208<<14 | 0x30<<7 | 0x1B, + 20813 - 19968: jis0208<<14 | 0x2B<<7 | 0x27, + 20814 - 19968: jis0208<<14 | 0x24<<7 | 0x25, + 20815 - 19968: jis0212<<14 | 0x11<<7 | 0x46, + 20816 - 19968: jis0208<<14 | 0x1A<<7 | 0x58, + 20818 - 19968: jis0208<<14 | 0x30<<7 | 0x1A, + 20819 - 19968: jis0212<<14 | 0x11<<7 | 0x47, + 20820 - 19968: jis0208<<14 | 0x30<<7 | 0x1C, + 20821 - 19968: jis0212<<14 | 0x11<<7 | 0x48, + 20823 - 19968: jis0212<<14 | 0x11<<7 | 0x49, + 20824 - 19968: jis0212<<14 | 0x11<<7 | 0x4A, + 20826 - 19968: jis0208<<14 | 0x24<<7 | 0x3D, + 20828 - 19968: jis0208<<14 | 0x12<<7 | 0x54, + 20831 - 19968: jis0212<<14 | 0x11<<7 | 0x4B, + 20834 - 19968: jis0208<<14 | 0x30<<7 | 0x1D, + 20836 - 19968: jis0208<<14 | 0x58<<7 | 0x23, + 20837 - 19968: jis0208<<14 | 0x25<<7 | 0x5D, + 20838 - 19968: jis0212<<14 | 0x11<<7 | 0x4D, + 20840 - 19968: jis0208<<14 | 0x20<<7 | 0x13, + 20841 - 19968: jis0208<<14 | 0x30<<7 | 0x1F, + 20842 - 19968: jis0208<<14 | 0x30<<7 | 0x20, + 20843 - 19968: jis0208<<14 | 0x27<<7 | 0x0B, + 20844 - 19968: jis0208<<14 | 0x17<<7 | 0x57, + 20845 - 19968: jis0208<<14 | 0x2E<<7 | 0x1A, + 20846 - 19968: jis0208<<14 | 0x30<<7 | 0x21, + 20849 - 19968: jis0208<<14 | 0x15<<7 | 0x05, + 20853 - 19968: jis0208<<14 | 0x29<<7 | 0x1B, + 20854 - 19968: jis0208<<14 | 0x21<<7 | 0x15, + 20855 - 19968: jis0208<<14 | 0x15<<7 | 0x50, + 20856 - 19968: jis0208<<14 | 0x24<<7 | 0x14, + 20860 - 19968: jis0208<<14 | 0x16<<7 | 0x52, + 20862 - 19968: jis0212<<14 | 0x11<<7 | 0x4E, + 20864 - 19968: jis0208<<14 | 0x30<<7 | 0x22, + 20866 - 19968: jis0208<<14 | 0x30<<7 | 0x23, + 20867 - 19968: jis0212<<14 | 0x11<<7 | 0x4F, + 20868 - 19968: jis0212<<14 | 0x11<<7 | 0x50, + 20869 - 19968: jis0208<<14 | 0x25<<7 | 0x41, + 20870 - 19968: jis0208<<14 | 0x10<<7 | 0x3E, + 20873 - 19968: jis0208<<14 | 0x30<<7 | 0x26, + 20874 - 19968: jis0208<<14 | 0x19<<7 | 0x5C, + 20875 - 19968: jis0212<<14 | 0x11<<7 | 0x51, + 20876 - 19968: jis0208<<14 | 0x30<<7 | 0x25, + 20877 - 19968: jis0208<<14 | 0x19<<7 | 0x25, + 20878 - 19968: jis0212<<14 | 0x11<<7 | 0x52, + 20879 - 19968: jis0208<<14 | 0x30<<7 | 0x27, + 20880 - 19968: jis0208<<14 | 0x45<<7 | 0x4D, + 20881 - 19968: jis0208<<14 | 0x30<<7 | 0x28, + 20882 - 19968: jis0208<<14 | 0x2A<<7 | 0x20, + 20883 - 19968: jis0208<<14 | 0x30<<7 | 0x29, + 20885 - 19968: jis0208<<14 | 0x30<<7 | 0x2A, + 20886 - 19968: jis0208<<14 | 0x30<<7 | 0x2B, + 20887 - 19968: jis0208<<14 | 0x1D<<7 | 0x48, + 20888 - 19968: jis0212<<14 | 0x11<<7 | 0x53, + 20889 - 19968: jis0208<<14 | 0x1B<<7 | 0x2B, + 20893 - 19968: jis0208<<14 | 0x58<<7 | 0x24, + 20896 - 19968: jis0208<<14 | 0x13<<7 | 0x06, + 20897 - 19968: jis0212<<14 | 0x11<<7 | 0x55, + 20898 - 19968: jis0208<<14 | 0x30<<7 | 0x2E, + 20899 - 19968: jis0212<<14 | 0x11<<7 | 0x56, + 20900 - 19968: jis0208<<14 | 0x30<<7 | 0x2C, + 20901 - 19968: jis0208<<14 | 0x2B<<7 | 0x1C, + 20902 - 19968: jis0208<<14 | 0x30<<7 | 0x2D, + 20904 - 19968: jis0208<<14 | 0x28<<7 | 0x39, + 20905 - 19968: jis0208<<14 | 0x30<<7 | 0x2F, + 20906 - 19968: jis0208<<14 | 0x30<<7 | 0x30, + 20907 - 19968: jis0208<<14 | 0x30<<7 | 0x31, + 20908 - 19968: jis0208<<14 | 0x24<<7 | 0x3E, + 20909 - 19968: jis0212<<14 | 0x11<<7 | 0x57, + 20912 - 19968: jis0208<<14 | 0x30<<7 | 0x35, + 20913 - 19968: jis0208<<14 | 0x30<<7 | 0x33, + 20914 - 19968: jis0208<<14 | 0x30<<7 | 0x34, + 20915 - 19968: jis0208<<14 | 0x30<<7 | 0x32, + 20916 - 19968: jis0208<<14 | 0x19<<7 | 0x42, + 20917 - 19968: jis0208<<14 | 0x30<<7 | 0x36, + 20918 - 19968: jis0208<<14 | 0x2B<<7 | 0x49, + 20919 - 19968: jis0208<<14 | 0x2D<<7 | 0x43, + 20920 - 19968: jis0212<<14 | 0x11<<7 | 0x58, + 20922 - 19968: jis0212<<14 | 0x11<<7 | 0x59, + 20924 - 19968: jis0212<<14 | 0x11<<7 | 0x5A, + 20925 - 19968: jis0208<<14 | 0x30<<7 | 0x37, + 20926 - 19968: jis0208<<14 | 0x58<<7 | 0x25, + 20927 - 19968: jis0212<<14 | 0x11<<7 | 0x5C, + 20930 - 19968: jis0212<<14 | 0x11<<7 | 0x5D, + 20932 - 19968: jis0208<<14 | 0x1F<<7 | 0x07, + 20933 - 19968: jis0208<<14 | 0x30<<7 | 0x38, + 20934 - 19968: jis0208<<14 | 0x1C<<7 | 0x39, + 20936 - 19968: jis0212<<14 | 0x12<<7 | 0x00, + 20937 - 19968: jis0208<<14 | 0x30<<7 | 0x39, + 20939 - 19968: jis0208<<14 | 0x22<<7 | 0x5B, + 20940 - 19968: jis0208<<14 | 0x2D<<7 | 0x1E, + 20941 - 19968: jis0208<<14 | 0x24<<7 | 0x3F, + 20943 - 19968: jis0212<<14 | 0x12<<7 | 0x01, + 20945 - 19968: jis0212<<14 | 0x12<<7 | 0x02, + 20946 - 19968: jis0212<<14 | 0x12<<7 | 0x03, + 20947 - 19968: jis0212<<14 | 0x12<<7 | 0x04, + 20949 - 19968: jis0212<<14 | 0x12<<7 | 0x05, + 20950 - 19968: jis0208<<14 | 0x31<<7 | 0x24, + 20952 - 19968: jis0212<<14 | 0x12<<7 | 0x06, + 20955 - 19968: jis0208<<14 | 0x30<<7 | 0x3A, + 20956 - 19968: jis0208<<14 | 0x53<<7 | 0x04, + 20957 - 19968: jis0208<<14 | 0x15<<7 | 0x24, + 20958 - 19968: jis0212<<14 | 0x12<<7 | 0x07, + 20960 - 19968: jis0208<<14 | 0x30<<7 | 0x3B, + 20961 - 19968: jis0208<<14 | 0x2A<<7 | 0x3D, + 20962 - 19968: jis0212<<14 | 0x12<<7 | 0x08, + 20965 - 19968: jis0212<<14 | 0x12<<7 | 0x09, + 20966 - 19968: jis0208<<14 | 0x1C<<7 | 0x47, + 20967 - 19968: jis0208<<14 | 0x21<<7 | 0x5B, + 20969 - 19968: jis0208<<14 | 0x30<<7 | 0x3D, + 20970 - 19968: jis0208<<14 | 0x25<<7 | 0x43, + 20972 - 19968: jis0208<<14 | 0x58<<7 | 0x26, + 20973 - 19968: jis0208<<14 | 0x30<<7 | 0x3E, + 20974 - 19968: jis0212<<14 | 0x12<<7 | 0x0A, + 20976 - 19968: jis0208<<14 | 0x30<<7 | 0x3F, + 20977 - 19968: jis0208<<14 | 0x12<<7 | 0x0D, + 20978 - 19968: jis0212<<14 | 0x12<<7 | 0x0B, + 20979 - 19968: jis0212<<14 | 0x12<<7 | 0x0C, + 20980 - 19968: jis0212<<14 | 0x12<<7 | 0x0D, + 20981 - 19968: jis0208<<14 | 0x30<<7 | 0x40, + 20982 - 19968: jis0208<<14 | 0x15<<7 | 0x06, + 20983 - 19968: jis0212<<14 | 0x12<<7 | 0x0E, + 20984 - 19968: jis0208<<14 | 0x25<<7 | 0x2B, + 20985 - 19968: jis0208<<14 | 0x10<<7 | 0x59, + 20986 - 19968: jis0208<<14 | 0x1C<<7 | 0x2F, + 20989 - 19968: jis0208<<14 | 0x27<<7 | 0x00, + 20990 - 19968: jis0208<<14 | 0x30<<7 | 0x41, + 20992 - 19968: jis0208<<14 | 0x24<<7 | 0x40, + 20993 - 19968: jis0212<<14 | 0x12<<7 | 0x0F, + 20994 - 19968: jis0212<<14 | 0x12<<7 | 0x10, + 20995 - 19968: jis0208<<14 | 0x1E<<7 | 0x2E, + 20996 - 19968: jis0208<<14 | 0x30<<7 | 0x42, + 20997 - 19968: jis0212<<14 | 0x12<<7 | 0x11, + 20998 - 19968: jis0208<<14 | 0x29<<7 | 0x0B, + 20999 - 19968: jis0208<<14 | 0x1F<<7 | 0x39, + 21000 - 19968: jis0208<<14 | 0x13<<7 | 0x01, + 21002 - 19968: jis0208<<14 | 0x13<<7 | 0x08, + 21003 - 19968: jis0208<<14 | 0x30<<7 | 0x43, + 21006 - 19968: jis0208<<14 | 0x30<<7 | 0x45, + 21009 - 19968: jis0208<<14 | 0x16<<7 | 0x19, + 21010 - 19968: jis0212<<14 | 0x12<<7 | 0x12, + 21011 - 19968: jis0212<<14 | 0x12<<7 | 0x13, + 21012 - 19968: jis0208<<14 | 0x30<<7 | 0x44, + 21013 - 19968: jis0208<<14 | 0x58<<7 | 0x27, + 21014 - 19968: jis0212<<14 | 0x12<<7 | 0x15, + 21015 - 19968: jis0208<<14 | 0x2D<<7 | 0x52, + 21016 - 19968: jis0212<<14 | 0x12<<7 | 0x16, + 21021 - 19968: jis0208<<14 | 0x1C<<7 | 0x48, + 21026 - 19968: jis0212<<14 | 0x12<<7 | 0x17, + 21028 - 19968: jis0208<<14 | 0x27<<7 | 0x1C, + 21029 - 19968: jis0208<<14 | 0x29<<7 | 0x2B, + 21031 - 19968: jis0208<<14 | 0x30<<7 | 0x46, + 21032 - 19968: jis0212<<14 | 0x12<<7 | 0x18, + 21033 - 19968: jis0208<<14 | 0x2C<<7 | 0x57, + 21034 - 19968: jis0208<<14 | 0x30<<7 | 0x47, + 21038 - 19968: jis0208<<14 | 0x30<<7 | 0x48, + 21040 - 19968: jis0208<<14 | 0x24<<7 | 0x5D, + 21041 - 19968: jis0212<<14 | 0x12<<7 | 0x19, + 21042 - 19968: jis0212<<14 | 0x12<<7 | 0x1A, + 21043 - 19968: jis0208<<14 | 0x30<<7 | 0x49, + 21045 - 19968: jis0212<<14 | 0x12<<7 | 0x1B, + 21046 - 19968: jis0208<<14 | 0x1F<<7 | 0x08, + 21047 - 19968: jis0208<<14 | 0x19<<7 | 0x5D, + 21048 - 19968: jis0208<<14 | 0x16<<7 | 0x53, + 21049 - 19968: jis0208<<14 | 0x30<<7 | 0x4A, + 21050 - 19968: jis0208<<14 | 0x1A<<7 | 0x28, + 21051 - 19968: jis0208<<14 | 0x18<<7 | 0x4E, + 21052 - 19968: jis0212<<14 | 0x12<<7 | 0x1C, + 21059 - 19968: jis0208<<14 | 0x23<<7 | 0x45, + 21060 - 19968: jis0208<<14 | 0x30<<7 | 0x4C, + 21061 - 19968: jis0212<<14 | 0x12<<7 | 0x1D, + 21063 - 19968: jis0208<<14 | 0x21<<7 | 0x06, + 21065 - 19968: jis0212<<14 | 0x12<<7 | 0x1E, + 21066 - 19968: jis0208<<14 | 0x19<<7 | 0x4E, + 21067 - 19968: jis0208<<14 | 0x30<<7 | 0x4D, + 21068 - 19968: jis0208<<14 | 0x30<<7 | 0x4E, + 21069 - 19968: jis0208<<14 | 0x20<<7 | 0x0F, + 21071 - 19968: jis0208<<14 | 0x30<<7 | 0x4B, + 21076 - 19968: jis0208<<14 | 0x30<<7 | 0x50, + 21077 - 19968: jis0212<<14 | 0x12<<7 | 0x1F, + 21078 - 19968: jis0208<<14 | 0x2A<<7 | 0x15, + 21079 - 19968: jis0212<<14 | 0x12<<7 | 0x20, + 21080 - 19968: jis0212<<14 | 0x12<<7 | 0x21, + 21082 - 19968: jis0212<<14 | 0x12<<7 | 0x22, + 21083 - 19968: jis0208<<14 | 0x18<<7 | 0x43, + 21084 - 19968: jis0212<<14 | 0x12<<7 | 0x23, + 21086 - 19968: jis0208<<14 | 0x30<<7 | 0x4F, + 21087 - 19968: jis0212<<14 | 0x12<<7 | 0x24, + 21088 - 19968: jis0212<<14 | 0x12<<7 | 0x25, + 21089 - 19968: jis0212<<14 | 0x12<<7 | 0x26, + 21091 - 19968: jis0208<<14 | 0x16<<7 | 0x54, + 21092 - 19968: jis0208<<14 | 0x19<<7 | 0x3D, + 21093 - 19968: jis0208<<14 | 0x26<<7 | 0x4C, + 21094 - 19968: jis0212<<14 | 0x12<<7 | 0x27, + 21097 - 19968: jis0208<<14 | 0x30<<7 | 0x53, + 21098 - 19968: jis0208<<14 | 0x30<<7 | 0x51, + 21102 - 19968: jis0212<<14 | 0x12<<7 | 0x28, + 21103 - 19968: jis0208<<14 | 0x28<<7 | 0x5A, + 21104 - 19968: jis0208<<14 | 0x1D<<7 | 0x49, + 21105 - 19968: jis0208<<14 | 0x30<<7 | 0x5A, + 21106 - 19968: jis0208<<14 | 0x12<<7 | 0x43, + 21107 - 19968: jis0208<<14 | 0x30<<7 | 0x54, + 21108 - 19968: jis0208<<14 | 0x30<<7 | 0x52, + 21109 - 19968: jis0208<<14 | 0x20<<7 | 0x2E, + 21111 - 19968: jis0212<<14 | 0x12<<7 | 0x29, + 21112 - 19968: jis0212<<14 | 0x12<<7 | 0x2A, + 21113 - 19968: jis0212<<14 | 0x12<<7 | 0x2B, + 21117 - 19968: jis0208<<14 | 0x30<<7 | 0x56, + 21119 - 19968: jis0208<<14 | 0x30<<7 | 0x55, + 21120 - 19968: jis0212<<14 | 0x12<<7 | 0x2C, + 21122 - 19968: jis0212<<14 | 0x12<<7 | 0x2D, + 21123 - 19968: jis0208<<14 | 0x12<<7 | 0x23, + 21125 - 19968: jis0212<<14 | 0x12<<7 | 0x2E, + 21127 - 19968: jis0208<<14 | 0x16<<7 | 0x3F, + 21128 - 19968: jis0208<<14 | 0x30<<7 | 0x5B, + 21129 - 19968: jis0208<<14 | 0x2D<<7 | 0x0C, + 21130 - 19968: jis0212<<14 | 0x12<<7 | 0x2F, + 21132 - 19968: jis0212<<14 | 0x12<<7 | 0x30, + 21133 - 19968: jis0208<<14 | 0x30<<7 | 0x57, + 21137 - 19968: jis0208<<14 | 0x30<<7 | 0x5C, + 21138 - 19968: jis0208<<14 | 0x30<<7 | 0x59, + 21139 - 19968: jis0212<<14 | 0x12<<7 | 0x31, + 21140 - 19968: jis0208<<14 | 0x30<<7 | 0x58, + 21141 - 19968: jis0212<<14 | 0x12<<7 | 0x32, + 21142 - 19968: jis0212<<14 | 0x12<<7 | 0x33, + 21143 - 19968: jis0212<<14 | 0x12<<7 | 0x34, + 21144 - 19968: jis0212<<14 | 0x12<<7 | 0x35, + 21146 - 19968: jis0212<<14 | 0x12<<7 | 0x36, + 21147 - 19968: jis0208<<14 | 0x2D<<7 | 0x2E, + 21148 - 19968: jis0208<<14 | 0x58<<7 | 0x28, + 21151 - 19968: jis0208<<14 | 0x17<<7 | 0x58, + 21152 - 19968: jis0208<<14 | 0x11<<7 | 0x22, + 21155 - 19968: jis0208<<14 | 0x2D<<7 | 0x53, + 21156 - 19968: jis0212<<14 | 0x12<<7 | 0x38, + 21157 - 19968: jis0212<<14 | 0x12<<7 | 0x39, + 21158 - 19968: jis0208<<14 | 0x58<<7 | 0x29, + 21159 - 19968: jis0212<<14 | 0x12<<7 | 0x3B, + 21161 - 19968: jis0208<<14 | 0x1C<<7 | 0x54, + 21162 - 19968: jis0208<<14 | 0x24<<7 | 0x37, + 21163 - 19968: jis0208<<14 | 0x18<<7 | 0x44, + 21164 - 19968: jis0208<<14 | 0x31<<7 | 0x01, + 21165 - 19968: jis0208<<14 | 0x31<<7 | 0x02, + 21167 - 19968: jis0208<<14 | 0x5A<<7 | 0x1B, + 21168 - 19968: jis0212<<14 | 0x12<<7 | 0x3D, + 21169 - 19968: jis0208<<14 | 0x2D<<7 | 0x44, + 21172 - 19968: jis0208<<14 | 0x2E<<7 | 0x0A, + 21173 - 19968: jis0208<<14 | 0x31<<7 | 0x04, + 21174 - 19968: jis0212<<14 | 0x12<<7 | 0x3E, + 21175 - 19968: jis0212<<14 | 0x12<<7 | 0x3F, + 21176 - 19968: jis0212<<14 | 0x12<<7 | 0x40, + 21177 - 19968: jis0208<<14 | 0x17<<7 | 0x59, + 21178 - 19968: jis0212<<14 | 0x12<<7 | 0x41, + 21179 - 19968: jis0212<<14 | 0x12<<7 | 0x42, + 21180 - 19968: jis0208<<14 | 0x31<<7 | 0x03, + 21181 - 19968: jis0212<<14 | 0x12<<7 | 0x43, + 21182 - 19968: jis0208<<14 | 0x12<<7 | 0x0E, + 21184 - 19968: jis0208<<14 | 0x58<<7 | 0x2A, + 21185 - 19968: jis0208<<14 | 0x31<<7 | 0x05, + 21187 - 19968: jis0208<<14 | 0x2A<<7 | 0x35, + 21188 - 19968: jis0212<<14 | 0x12<<7 | 0x45, + 21189 - 19968: jis0208<<14 | 0x23<<7 | 0x1B, + 21190 - 19968: jis0212<<14 | 0x12<<7 | 0x46, + 21191 - 19968: jis0208<<14 | 0x2C<<7 | 0x05, + 21192 - 19968: jis0212<<14 | 0x12<<7 | 0x47, + 21193 - 19968: jis0208<<14 | 0x29<<7 | 0x38, + 21196 - 19968: jis0212<<14 | 0x12<<7 | 0x48, + 21197 - 19968: jis0208<<14 | 0x31<<7 | 0x06, + 21199 - 19968: jis0212<<14 | 0x12<<7 | 0x49, + 21201 - 19968: jis0212<<14 | 0x12<<7 | 0x4A, + 21202 - 19968: jis0208<<14 | 0x4F<<7 | 0x34, + 21204 - 19968: jis0212<<14 | 0x12<<7 | 0x4B, + 21205 - 19968: jis0208<<14 | 0x25<<7 | 0x0F, + 21206 - 19968: jis0212<<14 | 0x12<<7 | 0x4C, + 21207 - 19968: jis0208<<14 | 0x31<<7 | 0x07, + 21208 - 19968: jis0208<<14 | 0x13<<7 | 0x09, + 21209 - 19968: jis0208<<14 | 0x2B<<7 | 0x12, + 21211 - 19968: jis0208<<14 | 0x58<<7 | 0x2B, + 21212 - 19968: jis0212<<14 | 0x12<<7 | 0x4E, + 21213 - 19968: jis0208<<14 | 0x1D<<7 | 0x00, + 21214 - 19968: jis0208<<14 | 0x31<<7 | 0x08, + 21215 - 19968: jis0208<<14 | 0x29<<7 | 0x46, + 21216 - 19968: jis0208<<14 | 0x31<<7 | 0x0C, + 21217 - 19968: jis0212<<14 | 0x12<<7 | 0x4F, + 21218 - 19968: jis0208<<14 | 0x1F<<7 | 0x09, + 21219 - 19968: jis0208<<14 | 0x31<<7 | 0x09, + 21220 - 19968: jis0208<<14 | 0x15<<7 | 0x2F, + 21221 - 19968: jis0212<<14 | 0x12<<7 | 0x50, + 21222 - 19968: jis0208<<14 | 0x31<<7 | 0x0A, + 21223 - 19968: jis0208<<14 | 0x13<<7 | 0x0A, + 21224 - 19968: jis0212<<14 | 0x12<<7 | 0x51, + 21225 - 19968: jis0212<<14 | 0x12<<7 | 0x52, + 21226 - 19968: jis0212<<14 | 0x12<<7 | 0x53, + 21228 - 19968: jis0212<<14 | 0x12<<7 | 0x54, + 21232 - 19968: jis0212<<14 | 0x12<<7 | 0x55, + 21233 - 19968: jis0212<<14 | 0x12<<7 | 0x56, + 21234 - 19968: jis0208<<14 | 0x16<<7 | 0x0D, + 21235 - 19968: jis0208<<14 | 0x31<<7 | 0x0D, + 21236 - 19968: jis0212<<14 | 0x12<<7 | 0x57, + 21237 - 19968: jis0208<<14 | 0x31<<7 | 0x0E, + 21238 - 19968: jis0212<<14 | 0x12<<7 | 0x58, + 21239 - 19968: jis0212<<14 | 0x12<<7 | 0x59, + 21240 - 19968: jis0208<<14 | 0x31<<7 | 0x0F, + 21241 - 19968: jis0208<<14 | 0x31<<7 | 0x10, + 21242 - 19968: jis0208<<14 | 0x1B<<7 | 0x3A, + 21246 - 19968: jis0208<<14 | 0x17<<7 | 0x5A, + 21247 - 19968: jis0208<<14 | 0x2B<<7 | 0x3D, + 21248 - 19968: jis0208<<14 | 0x58<<7 | 0x2C, + 21249 - 19968: jis0208<<14 | 0x2B<<7 | 0x47, + 21250 - 19968: jis0208<<14 | 0x25<<7 | 0x56, + 21251 - 19968: jis0212<<14 | 0x12<<7 | 0x5B, + 21253 - 19968: jis0208<<14 | 0x29<<7 | 0x50, + 21254 - 19968: jis0208<<14 | 0x31<<7 | 0x11, + 21255 - 19968: jis0208<<14 | 0x58<<7 | 0x2D, + 21256 - 19968: jis0208<<14 | 0x31<<7 | 0x12, + 21258 - 19968: jis0212<<14 | 0x12<<7 | 0x5C, + 21259 - 19968: jis0212<<14 | 0x12<<7 | 0x5D, + 21260 - 19968: jis0212<<14 | 0x13<<7 | 0x00, + 21261 - 19968: jis0208<<14 | 0x31<<7 | 0x14, + 21263 - 19968: jis0208<<14 | 0x31<<7 | 0x16, + 21264 - 19968: jis0208<<14 | 0x31<<7 | 0x15, + 21265 - 19968: jis0212<<14 | 0x13<<7 | 0x01, + 21267 - 19968: jis0212<<14 | 0x13<<7 | 0x02, + 21269 - 19968: jis0208<<14 | 0x31<<7 | 0x17, + 21270 - 19968: jis0208<<14 | 0x11<<7 | 0x1C, + 21271 - 19968: jis0208<<14 | 0x2A<<7 | 0x2B, + 21272 - 19968: jis0212<<14 | 0x13<<7 | 0x03, + 21273 - 19968: jis0208<<14 | 0x19<<7 | 0x5B, + 21274 - 19968: jis0208<<14 | 0x31<<7 | 0x18, + 21275 - 19968: jis0212<<14 | 0x13<<7 | 0x04, + 21276 - 19968: jis0212<<14 | 0x13<<7 | 0x05, + 21277 - 19968: jis0208<<14 | 0x20<<7 | 0x38, + 21278 - 19968: jis0212<<14 | 0x13<<7 | 0x06, + 21279 - 19968: jis0212<<14 | 0x13<<7 | 0x07, + 21280 - 19968: jis0208<<14 | 0x1D<<7 | 0x01, + 21281 - 19968: jis0208<<14 | 0x15<<7 | 0x08, + 21283 - 19968: jis0208<<14 | 0x31<<7 | 0x19, + 21284 - 19968: jis0208<<14 | 0x58<<7 | 0x2E, + 21285 - 19968: jis0212<<14 | 0x13<<7 | 0x08, + 21287 - 19968: jis0212<<14 | 0x13<<7 | 0x09, + 21288 - 19968: jis0212<<14 | 0x13<<7 | 0x0A, + 21289 - 19968: jis0212<<14 | 0x13<<7 | 0x0B, + 21290 - 19968: jis0208<<14 | 0x27<<7 | 0x3A, + 21291 - 19968: jis0212<<14 | 0x13<<7 | 0x0C, + 21292 - 19968: jis0212<<14 | 0x13<<7 | 0x0D, + 21293 - 19968: jis0212<<14 | 0x13<<7 | 0x0E, + 21295 - 19968: jis0208<<14 | 0x31<<7 | 0x1A, + 21296 - 19968: jis0212<<14 | 0x13<<7 | 0x0F, + 21297 - 19968: jis0208<<14 | 0x31<<7 | 0x1B, + 21298 - 19968: jis0212<<14 | 0x13<<7 | 0x10, + 21299 - 19968: jis0208<<14 | 0x31<<7 | 0x1C, + 21301 - 19968: jis0212<<14 | 0x13<<7 | 0x11, + 21304 - 19968: jis0208<<14 | 0x31<<7 | 0x1D, + 21305 - 19968: jis0208<<14 | 0x28<<7 | 0x03, + 21306 - 19968: jis0208<<14 | 0x15<<7 | 0x47, + 21307 - 19968: jis0208<<14 | 0x0F<<7 | 0x44, + 21308 - 19968: jis0212<<14 | 0x13<<7 | 0x12, + 21309 - 19968: jis0212<<14 | 0x13<<7 | 0x13, + 21310 - 19968: jis0212<<14 | 0x13<<7 | 0x14, + 21311 - 19968: jis0208<<14 | 0x25<<7 | 0x1E, + 21312 - 19968: jis0208<<14 | 0x31<<7 | 0x1E, + 21313 - 19968: jis0208<<14 | 0x1C<<7 | 0x1C, + 21314 - 19968: jis0212<<14 | 0x13<<7 | 0x15, + 21315 - 19968: jis0208<<14 | 0x1F<<7 | 0x48, + 21317 - 19968: jis0208<<14 | 0x31<<7 | 0x20, + 21318 - 19968: jis0208<<14 | 0x31<<7 | 0x1F, + 21319 - 19968: jis0208<<14 | 0x1D<<7 | 0x02, + 21320 - 19968: jis0208<<14 | 0x17<<7 | 0x40, + 21321 - 19968: jis0208<<14 | 0x31<<7 | 0x22, + 21322 - 19968: jis0208<<14 | 0x27<<7 | 0x1D, + 21323 - 19968: jis0212<<14 | 0x13<<7 | 0x17, + 21324 - 19968: jis0212<<14 | 0x13<<7 | 0x16, + 21325 - 19968: jis0208<<14 | 0x31<<7 | 0x23, + 21329 - 19968: jis0208<<14 | 0x27<<7 | 0x3B, + 21330 - 19968: jis0208<<14 | 0x21<<7 | 0x13, + 21331 - 19968: jis0208<<14 | 0x21<<7 | 0x4D, + 21332 - 19968: jis0208<<14 | 0x15<<7 | 0x07, + 21335 - 19968: jis0208<<14 | 0x25<<7 | 0x4D, + 21336 - 19968: jis0208<<14 | 0x22<<7 | 0x10, + 21337 - 19968: jis0212<<14 | 0x13<<7 | 0x18, + 21338 - 19968: jis0208<<14 | 0x26<<7 | 0x4D, + 21339 - 19968: jis0212<<14 | 0x13<<7 | 0x19, + 21340 - 19968: jis0208<<14 | 0x2A<<7 | 0x2D, + 21342 - 19968: jis0208<<14 | 0x31<<7 | 0x25, + 21344 - 19968: jis0208<<14 | 0x1F<<7 | 0x49, + 21345 - 19968: jis0212<<14 | 0x13<<7 | 0x1A, + 21347 - 19968: jis0212<<14 | 0x13<<7 | 0x1B, + 21349 - 19968: jis0212<<14 | 0x13<<7 | 0x1C, + 21350 - 19968: jis0208<<14 | 0x16<<7 | 0x14, + 21353 - 19968: jis0208<<14 | 0x31<<7 | 0x26, + 21356 - 19968: jis0212<<14 | 0x13<<7 | 0x1D, + 21357 - 19968: jis0212<<14 | 0x13<<7 | 0x1E, + 21358 - 19968: jis0208<<14 | 0x31<<7 | 0x27, + 21359 - 19968: jis0208<<14 | 0x10<<7 | 0x0B, + 21360 - 19968: jis0208<<14 | 0x0F<<7 | 0x54, + 21361 - 19968: jis0208<<14 | 0x13<<7 | 0x4C, + 21362 - 19968: jis0208<<14 | 0x58<<7 | 0x2F, + 21363 - 19968: jis0208<<14 | 0x21<<7 | 0x07, + 21364 - 19968: jis0208<<14 | 0x14<<7 | 0x30, + 21365 - 19968: jis0208<<14 | 0x2C<<7 | 0x50, + 21367 - 19968: jis0208<<14 | 0x31<<7 | 0x2A, + 21368 - 19968: jis0208<<14 | 0x11<<7 | 0x16, + 21369 - 19968: jis0212<<14 | 0x13<<7 | 0x20, + 21371 - 19968: jis0208<<14 | 0x31<<7 | 0x29, + 21374 - 19968: jis0212<<14 | 0x13<<7 | 0x21, + 21375 - 19968: jis0208<<14 | 0x15<<7 | 0x09, + 21378 - 19968: jis0208<<14 | 0x31<<7 | 0x2B, + 21379 - 19968: jis0212<<14 | 0x13<<7 | 0x22, + 21380 - 19968: jis0208<<14 | 0x2B<<7 | 0x50, + 21383 - 19968: jis0212<<14 | 0x13<<7 | 0x23, + 21384 - 19968: jis0212<<14 | 0x13<<7 | 0x24, + 21390 - 19968: jis0212<<14 | 0x13<<7 | 0x25, + 21395 - 19968: jis0208<<14 | 0x58<<7 | 0x30, + 21396 - 19968: jis0212<<14 | 0x13<<7 | 0x27, + 21398 - 19968: jis0208<<14 | 0x31<<7 | 0x2C, + 21400 - 19968: jis0208<<14 | 0x2D<<7 | 0x31, + 21401 - 19968: jis0212<<14 | 0x13<<7 | 0x28, + 21402 - 19968: jis0208<<14 | 0x17<<7 | 0x5B, + 21405 - 19968: jis0212<<14 | 0x13<<7 | 0x29, + 21407 - 19968: jis0208<<14 | 0x17<<7 | 0x15, + 21408 - 19968: jis0208<<14 | 0x31<<7 | 0x2D, + 21409 - 19968: jis0212<<14 | 0x13<<7 | 0x2A, + 21412 - 19968: jis0212<<14 | 0x13<<7 | 0x2B, + 21413 - 19968: jis0208<<14 | 0x31<<7 | 0x2F, + 21414 - 19968: jis0208<<14 | 0x31<<7 | 0x2E, + 21416 - 19968: jis0208<<14 | 0x1E<<7 | 0x3E, + 21417 - 19968: jis0208<<14 | 0x10<<7 | 0x18, + 21418 - 19968: jis0212<<14 | 0x13<<7 | 0x2C, + 21419 - 19968: jis0212<<14 | 0x13<<7 | 0x2D, + 21421 - 19968: jis0208<<14 | 0x10<<7 | 0x3D, + 21422 - 19968: jis0208<<14 | 0x31<<7 | 0x30, + 21423 - 19968: jis0212<<14 | 0x13<<7 | 0x2E, + 21424 - 19968: jis0208<<14 | 0x31<<7 | 0x31, + 21426 - 19968: jis0208<<14 | 0x58<<7 | 0x31, + 21427 - 19968: jis0208<<14 | 0x17<<7 | 0x16, + 21428 - 19968: jis0212<<14 | 0x13<<7 | 0x30, + 21429 - 19968: jis0212<<14 | 0x13<<7 | 0x31, + 21430 - 19968: jis0208<<14 | 0x31<<7 | 0x32, + 21431 - 19968: jis0212<<14 | 0x13<<7 | 0x32, + 21432 - 19968: jis0212<<14 | 0x13<<7 | 0x33, + 21434 - 19968: jis0212<<14 | 0x13<<7 | 0x34, + 21435 - 19968: jis0208<<14 | 0x14<<7 | 0x4D, + 21437 - 19968: jis0212<<14 | 0x13<<7 | 0x35, + 21440 - 19968: jis0212<<14 | 0x13<<7 | 0x36, + 21442 - 19968: jis0208<<14 | 0x1A<<7 | 0x11, + 21443 - 19968: jis0208<<14 | 0x31<<7 | 0x33, + 21445 - 19968: jis0212<<14 | 0x13<<7 | 0x37, + 21448 - 19968: jis0208<<14 | 0x2A<<7 | 0x53, + 21449 - 19968: jis0208<<14 | 0x19<<7 | 0x14, + 21450 - 19968: jis0208<<14 | 0x14<<7 | 0x39, + 21451 - 19968: jis0208<<14 | 0x2C<<7 | 0x06, + 21452 - 19968: jis0208<<14 | 0x20<<7 | 0x2F, + 21453 - 19968: jis0208<<14 | 0x27<<7 | 0x1E, + 21454 - 19968: jis0208<<14 | 0x1B<<7 | 0x5C, + 21455 - 19968: jis0212<<14 | 0x13<<7 | 0x38, + 21458 - 19968: jis0212<<14 | 0x13<<7 | 0x39, + 21459 - 19968: jis0212<<14 | 0x13<<7 | 0x3A, + 21460 - 19968: jis0208<<14 | 0x1C<<7 | 0x26, + 21461 - 19968: jis0212<<14 | 0x13<<7 | 0x3B, + 21462 - 19968: jis0208<<14 | 0x1B<<7 | 0x47, + 21463 - 19968: jis0208<<14 | 0x1B<<7 | 0x54, + 21465 - 19968: jis0208<<14 | 0x1C<<7 | 0x55, + 21466 - 19968: jis0212<<14 | 0x13<<7 | 0x3C, + 21467 - 19968: jis0208<<14 | 0x27<<7 | 0x1F, + 21469 - 19968: jis0208<<14 | 0x58<<7 | 0x32, + 21470 - 19968: jis0212<<14 | 0x13<<7 | 0x3E, + 21471 - 19968: jis0208<<14 | 0x31<<7 | 0x36, + 21472 - 19968: jis0212<<14 | 0x13<<7 | 0x3F, + 21473 - 19968: jis0208<<14 | 0x10<<7 | 0x22, + 21474 - 19968: jis0208<<14 | 0x20<<7 | 0x30, + 21475 - 19968: jis0208<<14 | 0x17<<7 | 0x5C, + 21476 - 19968: jis0208<<14 | 0x17<<7 | 0x24, + 21477 - 19968: jis0208<<14 | 0x15<<7 | 0x46, + 21478 - 19968: jis0212<<14 | 0x13<<7 | 0x40, + 21479 - 19968: jis0212<<14 | 0x13<<7 | 0x41, + 21480 - 19968: jis0208<<14 | 0x31<<7 | 0x3A, + 21481 - 19968: jis0208<<14 | 0x22<<7 | 0x00, + 21482 - 19968: jis0208<<14 | 0x21<<7 | 0x5D, + 21483 - 19968: jis0208<<14 | 0x15<<7 | 0x0A, + 21484 - 19968: jis0208<<14 | 0x1D<<7 | 0x03, + 21485 - 19968: jis0208<<14 | 0x31<<7 | 0x3B, + 21486 - 19968: jis0208<<14 | 0x31<<7 | 0x39, + 21487 - 19968: jis0208<<14 | 0x11<<7 | 0x23, + 21488 - 19968: jis0208<<14 | 0x21<<7 | 0x45, + 21489 - 19968: jis0208<<14 | 0x1B<<7 | 0x17, + 21490 - 19968: jis0208<<14 | 0x1A<<7 | 0x2A, + 21491 - 19968: jis0208<<14 | 0x10<<7 | 0x05, + 21493 - 19968: jis0212<<14 | 0x13<<7 | 0x42, + 21494 - 19968: jis0208<<14 | 0x12<<7 | 0x4F, + 21495 - 19968: jis0208<<14 | 0x18<<7 | 0x45, + 21496 - 19968: jis0208<<14 | 0x1A<<7 | 0x29, + 21498 - 19968: jis0208<<14 | 0x31<<7 | 0x3C, + 21505 - 19968: jis0208<<14 | 0x31<<7 | 0x3D, + 21506 - 19968: jis0212<<14 | 0x13<<7 | 0x43, + 21507 - 19968: jis0208<<14 | 0x14<<7 | 0x28, + 21508 - 19968: jis0208<<14 | 0x12<<7 | 0x25, + 21512 - 19968: jis0208<<14 | 0x18<<7 | 0x46, + 21513 - 19968: jis0208<<14 | 0x14<<7 | 0x27, + 21514 - 19968: jis0208<<14 | 0x23<<7 | 0x3E, + 21515 - 19968: jis0208<<14 | 0x10<<7 | 0x04, + 21516 - 19968: jis0208<<14 | 0x25<<7 | 0x10, + 21517 - 19968: jis0208<<14 | 0x2B<<7 | 0x1D, + 21518 - 19968: jis0208<<14 | 0x18<<7 | 0x00, + 21519 - 19968: jis0208<<14 | 0x2C<<7 | 0x58, + 21520 - 19968: jis0208<<14 | 0x24<<7 | 0x26, + 21521 - 19968: jis0208<<14 | 0x17<<7 | 0x5D, + 21523 - 19968: jis0212<<14 | 0x13<<7 | 0x44, + 21530 - 19968: jis0212<<14 | 0x13<<7 | 0x45, + 21531 - 19968: jis0208<<14 | 0x16<<7 | 0x0E, + 21533 - 19968: jis0208<<14 | 0x31<<7 | 0x46, + 21535 - 19968: jis0208<<14 | 0x15<<7 | 0x42, + 21536 - 19968: jis0208<<14 | 0x2A<<7 | 0x29, + 21537 - 19968: jis0212<<14 | 0x13<<7 | 0x46, + 21542 - 19968: jis0208<<14 | 0x27<<7 | 0x3C, + 21543 - 19968: jis0212<<14 | 0x13<<7 | 0x47, + 21544 - 19968: jis0212<<14 | 0x13<<7 | 0x48, + 21545 - 19968: jis0208<<14 | 0x31<<7 | 0x45, + 21546 - 19968: jis0212<<14 | 0x13<<7 | 0x49, + 21547 - 19968: jis0208<<14 | 0x13<<7 | 0x3D, + 21548 - 19968: jis0208<<14 | 0x31<<7 | 0x40, + 21549 - 19968: jis0208<<14 | 0x31<<7 | 0x41, + 21550 - 19968: jis0208<<14 | 0x31<<7 | 0x43, + 21551 - 19968: jis0212<<14 | 0x13<<7 | 0x4A, + 21553 - 19968: jis0212<<14 | 0x13<<7 | 0x4B, + 21556 - 19968: jis0212<<14 | 0x13<<7 | 0x4C, + 21557 - 19968: jis0212<<14 | 0x13<<7 | 0x4D, + 21558 - 19968: jis0208<<14 | 0x31<<7 | 0x44, + 21560 - 19968: jis0208<<14 | 0x14<<7 | 0x3A, + 21561 - 19968: jis0208<<14 | 0x1E<<7 | 0x40, + 21563 - 19968: jis0208<<14 | 0x29<<7 | 0x0C, + 21564 - 19968: jis0208<<14 | 0x31<<7 | 0x42, + 21565 - 19968: jis0208<<14 | 0x31<<7 | 0x3E, + 21566 - 19968: jis0208<<14 | 0x17<<7 | 0x42, + 21568 - 19968: jis0208<<14 | 0x31<<7 | 0x3F, + 21570 - 19968: jis0208<<14 | 0x2E<<7 | 0x03, + 21571 - 19968: jis0212<<14 | 0x13<<7 | 0x4E, + 21572 - 19968: jis0212<<14 | 0x13<<7 | 0x4F, + 21574 - 19968: jis0208<<14 | 0x29<<7 | 0x51, + 21575 - 19968: jis0212<<14 | 0x13<<7 | 0x50, + 21576 - 19968: jis0208<<14 | 0x23<<7 | 0x47, + 21577 - 19968: jis0208<<14 | 0x17<<7 | 0x41, + 21578 - 19968: jis0208<<14 | 0x18<<7 | 0x4F, + 21581 - 19968: jis0212<<14 | 0x13<<7 | 0x51, + 21582 - 19968: jis0208<<14 | 0x31<<7 | 0x47, + 21583 - 19968: jis0212<<14 | 0x13<<7 | 0x52, + 21585 - 19968: jis0208<<14 | 0x25<<7 | 0x3C, + 21598 - 19968: jis0212<<14 | 0x13<<7 | 0x53, + 21599 - 19968: jis0208<<14 | 0x31<<7 | 0x4B, + 21602 - 19968: jis0212<<14 | 0x13<<7 | 0x54, + 21604 - 19968: jis0212<<14 | 0x13<<7 | 0x55, + 21606 - 19968: jis0212<<14 | 0x13<<7 | 0x56, + 21607 - 19968: jis0212<<14 | 0x13<<7 | 0x57, + 21608 - 19968: jis0208<<14 | 0x1B<<7 | 0x5D, + 21609 - 19968: jis0212<<14 | 0x13<<7 | 0x58, + 21610 - 19968: jis0208<<14 | 0x1B<<7 | 0x55, + 21611 - 19968: jis0212<<14 | 0x13<<7 | 0x59, + 21613 - 19968: jis0212<<14 | 0x13<<7 | 0x5A, + 21614 - 19968: jis0212<<14 | 0x13<<7 | 0x5B, + 21616 - 19968: jis0208<<14 | 0x31<<7 | 0x4E, + 21617 - 19968: jis0208<<14 | 0x31<<7 | 0x4C, + 21619 - 19968: jis0208<<14 | 0x2B<<7 | 0x02, + 21620 - 19968: jis0212<<14 | 0x13<<7 | 0x5C, + 21621 - 19968: jis0208<<14 | 0x31<<7 | 0x49, + 21622 - 19968: jis0208<<14 | 0x31<<7 | 0x52, + 21623 - 19968: jis0208<<14 | 0x31<<7 | 0x4D, + 21627 - 19968: jis0208<<14 | 0x31<<7 | 0x50, + 21628 - 19968: jis0208<<14 | 0x17<<7 | 0x25, + 21629 - 19968: jis0208<<14 | 0x2B<<7 | 0x1E, + 21631 - 19968: jis0212<<14 | 0x13<<7 | 0x5D, + 21632 - 19968: jis0208<<14 | 0x31<<7 | 0x51, + 21633 - 19968: jis0212<<14 | 0x14<<7 | 0x00, + 21635 - 19968: jis0212<<14 | 0x14<<7 | 0x01, + 21636 - 19968: jis0208<<14 | 0x31<<7 | 0x53, + 21637 - 19968: jis0212<<14 | 0x14<<7 | 0x02, + 21638 - 19968: jis0208<<14 | 0x31<<7 | 0x55, + 21640 - 19968: jis0212<<14 | 0x14<<7 | 0x03, + 21641 - 19968: jis0212<<14 | 0x14<<7 | 0x04, + 21642 - 19968: jis0208<<14 | 0x58<<7 | 0x35, + 21643 - 19968: jis0208<<14 | 0x19<<7 | 0x4F, + 21644 - 19968: jis0208<<14 | 0x2E<<7 | 0x21, + 21645 - 19968: jis0212<<14 | 0x14<<7 | 0x05, + 21646 - 19968: jis0208<<14 | 0x31<<7 | 0x4A, + 21647 - 19968: jis0208<<14 | 0x31<<7 | 0x48, + 21648 - 19968: jis0208<<14 | 0x31<<7 | 0x54, + 21649 - 19968: jis0212<<14 | 0x14<<7 | 0x06, + 21650 - 19968: jis0208<<14 | 0x31<<7 | 0x4F, + 21653 - 19968: jis0212<<14 | 0x14<<7 | 0x07, + 21654 - 19968: jis0212<<14 | 0x14<<7 | 0x08, + 21660 - 19968: jis0208<<14 | 0x58<<7 | 0x34, + 21663 - 19968: jis0212<<14 | 0x14<<7 | 0x0A, + 21665 - 19968: jis0212<<14 | 0x14<<7 | 0x0B, + 21666 - 19968: jis0208<<14 | 0x31<<7 | 0x57, + 21668 - 19968: jis0208<<14 | 0x32<<7 | 0x02, + 21669 - 19968: jis0208<<14 | 0x31<<7 | 0x59, + 21670 - 19968: jis0212<<14 | 0x14<<7 | 0x0C, + 21671 - 19968: jis0212<<14 | 0x14<<7 | 0x0D, + 21672 - 19968: jis0208<<14 | 0x31<<7 | 0x5D, + 21673 - 19968: jis0208<<14 | 0x58<<7 | 0x36, + 21674 - 19968: jis0212<<14 | 0x14<<7 | 0x0F, + 21675 - 19968: jis0208<<14 | 0x32<<7 | 0x00, + 21676 - 19968: jis0208<<14 | 0x31<<7 | 0x5A, + 21677 - 19968: jis0212<<14 | 0x14<<7 | 0x10, + 21678 - 19968: jis0212<<14 | 0x14<<7 | 0x11, + 21679 - 19968: jis0208<<14 | 0x32<<7 | 0x1D, + 21681 - 19968: jis0212<<14 | 0x14<<7 | 0x12, + 21682 - 19968: jis0208<<14 | 0x19<<7 | 0x48, + 21683 - 19968: jis0208<<14 | 0x12<<7 | 0x10, + 21687 - 19968: jis0212<<14 | 0x14<<7 | 0x13, + 21688 - 19968: jis0208<<14 | 0x31<<7 | 0x58, + 21689 - 19968: jis0212<<14 | 0x14<<7 | 0x14, + 21690 - 19968: jis0212<<14 | 0x14<<7 | 0x15, + 21691 - 19968: jis0212<<14 | 0x14<<7 | 0x16, + 21692 - 19968: jis0208<<14 | 0x32<<7 | 0x04, + 21693 - 19968: jis0208<<14 | 0x0F<<7 | 0x55, + 21694 - 19968: jis0208<<14 | 0x32<<7 | 0x03, + 21695 - 19968: jis0212<<14 | 0x14<<7 | 0x17, + 21696 - 19968: jis0208<<14 | 0x0F<<7 | 0x04, + 21697 - 19968: jis0208<<14 | 0x28<<7 | 0x29, + 21698 - 19968: jis0208<<14 | 0x32<<7 | 0x01, + 21700 - 19968: jis0208<<14 | 0x31<<7 | 0x5B, + 21702 - 19968: jis0212<<14 | 0x14<<7 | 0x18, + 21703 - 19968: jis0208<<14 | 0x31<<7 | 0x56, + 21704 - 19968: jis0208<<14 | 0x31<<7 | 0x5C, + 21705 - 19968: jis0208<<14 | 0x19<<7 | 0x27, + 21706 - 19968: jis0212<<14 | 0x14<<7 | 0x19, + 21709 - 19968: jis0212<<14 | 0x14<<7 | 0x1A, + 21710 - 19968: jis0212<<14 | 0x14<<7 | 0x1B, + 21720 - 19968: jis0208<<14 | 0x32<<7 | 0x05, + 21728 - 19968: jis0212<<14 | 0x14<<7 | 0x1C, + 21729 - 19968: jis0208<<14 | 0x0F<<7 | 0x56, + 21730 - 19968: jis0208<<14 | 0x32<<7 | 0x0E, + 21733 - 19968: jis0208<<14 | 0x32<<7 | 0x06, + 21734 - 19968: jis0208<<14 | 0x32<<7 | 0x07, + 21736 - 19968: jis0208<<14 | 0x1D<<7 | 0x04, + 21737 - 19968: jis0208<<14 | 0x2A<<7 | 0x48, + 21738 - 19968: jis0212<<14 | 0x14<<7 | 0x1D, + 21740 - 19968: jis0212<<14 | 0x14<<7 | 0x1E, + 21741 - 19968: jis0208<<14 | 0x32<<7 | 0x0C, + 21742 - 19968: jis0208<<14 | 0x32<<7 | 0x0B, + 21743 - 19968: jis0212<<14 | 0x14<<7 | 0x1F, + 21746 - 19968: jis0208<<14 | 0x24<<7 | 0x0E, + 21750 - 19968: jis0212<<14 | 0x14<<7 | 0x20, + 21754 - 19968: jis0208<<14 | 0x32<<7 | 0x0D, + 21756 - 19968: jis0212<<14 | 0x14<<7 | 0x21, + 21757 - 19968: jis0208<<14 | 0x32<<7 | 0x0A, + 21758 - 19968: jis0212<<14 | 0x14<<7 | 0x22, + 21759 - 19968: jis0208<<14 | 0x58<<7 | 0x37, + 21760 - 19968: jis0212<<14 | 0x14<<7 | 0x24, + 21761 - 19968: jis0212<<14 | 0x14<<7 | 0x25, + 21764 - 19968: jis0208<<14 | 0x10<<7 | 0x13, + 21765 - 19968: jis0212<<14 | 0x14<<7 | 0x26, + 21766 - 19968: jis0208<<14 | 0x19<<7 | 0x15, + 21767 - 19968: jis0208<<14 | 0x1E<<7 | 0x0F, + 21768 - 19968: jis0212<<14 | 0x14<<7 | 0x27, + 21769 - 19968: jis0212<<14 | 0x14<<7 | 0x28, + 21772 - 19968: jis0212<<14 | 0x14<<7 | 0x29, + 21773 - 19968: jis0212<<14 | 0x14<<7 | 0x2A, + 21774 - 19968: jis0212<<14 | 0x14<<7 | 0x2B, + 21775 - 19968: jis0208<<14 | 0x32<<7 | 0x08, + 21776 - 19968: jis0208<<14 | 0x24<<7 | 0x41, + 21780 - 19968: jis0208<<14 | 0x32<<7 | 0x09, + 21781 - 19968: jis0212<<14 | 0x14<<7 | 0x2C, + 21782 - 19968: jis0208<<14 | 0x0F<<7 | 0x01, + 21802 - 19968: jis0212<<14 | 0x14<<7 | 0x2D, + 21803 - 19968: jis0212<<14 | 0x14<<7 | 0x2E, + 21806 - 19968: jis0208<<14 | 0x32<<7 | 0x13, + 21807 - 19968: jis0208<<14 | 0x2C<<7 | 0x02, + 21809 - 19968: jis0208<<14 | 0x1D<<7 | 0x06, + 21810 - 19968: jis0212<<14 | 0x14<<7 | 0x2F, + 21811 - 19968: jis0208<<14 | 0x32<<7 | 0x19, + 21813 - 19968: jis0212<<14 | 0x14<<7 | 0x30, + 21814 - 19968: jis0212<<14 | 0x14<<7 | 0x31, + 21816 - 19968: jis0208<<14 | 0x32<<7 | 0x18, + 21817 - 19968: jis0208<<14 | 0x32<<7 | 0x0F, + 21819 - 19968: jis0212<<14 | 0x14<<7 | 0x32, + 21820 - 19968: jis0212<<14 | 0x14<<7 | 0x33, + 21821 - 19968: jis0212<<14 | 0x14<<7 | 0x34, + 21822 - 19968: jis0208<<14 | 0x21<<7 | 0x22, + 21824 - 19968: jis0208<<14 | 0x32<<7 | 0x10, + 21825 - 19968: jis0212<<14 | 0x14<<7 | 0x35, + 21828 - 19968: jis0208<<14 | 0x21<<7 | 0x4E, + 21829 - 19968: jis0208<<14 | 0x32<<7 | 0x15, + 21830 - 19968: jis0208<<14 | 0x1D<<7 | 0x05, + 21831 - 19968: jis0212<<14 | 0x14<<7 | 0x36, + 21833 - 19968: jis0212<<14 | 0x14<<7 | 0x37, + 21834 - 19968: jis0212<<14 | 0x14<<7 | 0x38, + 21836 - 19968: jis0208<<14 | 0x32<<7 | 0x12, + 21837 - 19968: jis0212<<14 | 0x14<<7 | 0x39, + 21839 - 19968: jis0208<<14 | 0x2B<<7 | 0x43, + 21840 - 19968: jis0212<<14 | 0x14<<7 | 0x3A, + 21841 - 19968: jis0212<<14 | 0x14<<7 | 0x3B, + 21843 - 19968: jis0208<<14 | 0x16<<7 | 0x1B, + 21846 - 19968: jis0208<<14 | 0x32<<7 | 0x16, + 21847 - 19968: jis0208<<14 | 0x32<<7 | 0x17, + 21848 - 19968: jis0212<<14 | 0x14<<7 | 0x3C, + 21850 - 19968: jis0212<<14 | 0x14<<7 | 0x3D, + 21851 - 19968: jis0212<<14 | 0x14<<7 | 0x3E, + 21852 - 19968: jis0208<<14 | 0x32<<7 | 0x14, + 21853 - 19968: jis0208<<14 | 0x32<<7 | 0x1A, + 21854 - 19968: jis0212<<14 | 0x14<<7 | 0x3F, + 21856 - 19968: jis0212<<14 | 0x14<<7 | 0x40, + 21857 - 19968: jis0212<<14 | 0x14<<7 | 0x41, + 21859 - 19968: jis0208<<14 | 0x32<<7 | 0x11, + 21860 - 19968: jis0212<<14 | 0x14<<7 | 0x42, + 21862 - 19968: jis0212<<14 | 0x14<<7 | 0x43, + 21883 - 19968: jis0208<<14 | 0x32<<7 | 0x20, + 21884 - 19968: jis0208<<14 | 0x32<<7 | 0x25, + 21886 - 19968: jis0208<<14 | 0x32<<7 | 0x21, + 21887 - 19968: jis0212<<14 | 0x14<<7 | 0x44, + 21888 - 19968: jis0208<<14 | 0x32<<7 | 0x1C, + 21889 - 19968: jis0212<<14 | 0x14<<7 | 0x45, + 21890 - 19968: jis0212<<14 | 0x14<<7 | 0x46, + 21891 - 19968: jis0208<<14 | 0x32<<7 | 0x26, + 21892 - 19968: jis0208<<14 | 0x20<<7 | 0x10, + 21894 - 19968: jis0208<<14 | 0x58<<7 | 0x38, + 21895 - 19968: jis0208<<14 | 0x32<<7 | 0x28, + 21896 - 19968: jis0212<<14 | 0x14<<7 | 0x48, + 21897 - 19968: jis0208<<14 | 0x18<<7 | 0x01, + 21898 - 19968: jis0208<<14 | 0x32<<7 | 0x1E, + 21899 - 19968: jis0208<<14 | 0x22<<7 | 0x5C, + 21902 - 19968: jis0212<<14 | 0x14<<7 | 0x49, + 21903 - 19968: jis0212<<14 | 0x14<<7 | 0x4A, + 21905 - 19968: jis0212<<14 | 0x14<<7 | 0x4B, + 21906 - 19968: jis0212<<14 | 0x14<<7 | 0x4C, + 21907 - 19968: jis0212<<14 | 0x14<<7 | 0x4D, + 21908 - 19968: jis0212<<14 | 0x14<<7 | 0x4E, + 21911 - 19968: jis0212<<14 | 0x14<<7 | 0x4F, + 21912 - 19968: jis0208<<14 | 0x32<<7 | 0x22, + 21913 - 19968: jis0208<<14 | 0x32<<7 | 0x1B, + 21914 - 19968: jis0208<<14 | 0x13<<7 | 0x0C, + 21916 - 19968: jis0208<<14 | 0x13<<7 | 0x4D, + 21917 - 19968: jis0208<<14 | 0x12<<7 | 0x44, + 21918 - 19968: jis0208<<14 | 0x32<<7 | 0x23, + 21919 - 19968: jis0208<<14 | 0x32<<7 | 0x1F, + 21923 - 19968: jis0212<<14 | 0x14<<7 | 0x50, + 21924 - 19968: jis0212<<14 | 0x14<<7 | 0x51, + 21927 - 19968: jis0208<<14 | 0x16<<7 | 0x55, + 21928 - 19968: jis0208<<14 | 0x32<<7 | 0x29, + 21929 - 19968: jis0208<<14 | 0x32<<7 | 0x27, + 21930 - 19968: jis0208<<14 | 0x20<<7 | 0x32, + 21931 - 19968: jis0208<<14 | 0x14<<7 | 0x29, + 21932 - 19968: jis0208<<14 | 0x15<<7 | 0x0B, + 21933 - 19968: jis0212<<14 | 0x14<<7 | 0x52, + 21934 - 19968: jis0208<<14 | 0x32<<7 | 0x24, + 21936 - 19968: jis0208<<14 | 0x15<<7 | 0x53, + 21938 - 19968: jis0212<<14 | 0x14<<7 | 0x53, + 21942 - 19968: jis0208<<14 | 0x10<<7 | 0x23, + 21951 - 19968: jis0212<<14 | 0x14<<7 | 0x54, + 21953 - 19968: jis0212<<14 | 0x14<<7 | 0x55, + 21955 - 19968: jis0212<<14 | 0x14<<7 | 0x56, + 21956 - 19968: jis0208<<14 | 0x32<<7 | 0x2D, + 21957 - 19968: jis0208<<14 | 0x32<<7 | 0x2B, + 21958 - 19968: jis0212<<14 | 0x14<<7 | 0x57, + 21959 - 19968: jis0208<<14 | 0x33<<7 | 0x06, + 21961 - 19968: jis0212<<14 | 0x14<<7 | 0x58, + 21963 - 19968: jis0212<<14 | 0x14<<7 | 0x59, + 21964 - 19968: jis0212<<14 | 0x14<<7 | 0x5A, + 21966 - 19968: jis0212<<14 | 0x14<<7 | 0x5B, + 21969 - 19968: jis0212<<14 | 0x14<<7 | 0x5C, + 21970 - 19968: jis0212<<14 | 0x14<<7 | 0x5D, + 21971 - 19968: jis0212<<14 | 0x15<<7 | 0x00, + 21972 - 19968: jis0208<<14 | 0x32<<7 | 0x30, + 21975 - 19968: jis0212<<14 | 0x15<<7 | 0x01, + 21976 - 19968: jis0212<<14 | 0x15<<7 | 0x02, + 21978 - 19968: jis0208<<14 | 0x32<<7 | 0x2A, + 21979 - 19968: jis0212<<14 | 0x15<<7 | 0x03, + 21980 - 19968: jis0208<<14 | 0x32<<7 | 0x2E, + 21982 - 19968: jis0212<<14 | 0x15<<7 | 0x04, + 21983 - 19968: jis0208<<14 | 0x32<<7 | 0x2C, + 21986 - 19968: jis0212<<14 | 0x15<<7 | 0x05, + 21987 - 19968: jis0208<<14 | 0x1A<<7 | 0x2B, + 21988 - 19968: jis0208<<14 | 0x32<<7 | 0x2F, + 21993 - 19968: jis0212<<14 | 0x15<<7 | 0x06, + 22006 - 19968: jis0212<<14 | 0x15<<7 | 0x07, + 22007 - 19968: jis0208<<14 | 0x32<<7 | 0x32, + 22009 - 19968: jis0208<<14 | 0x32<<7 | 0x37, + 22013 - 19968: jis0208<<14 | 0x32<<7 | 0x35, + 22014 - 19968: jis0208<<14 | 0x32<<7 | 0x34, + 22015 - 19968: jis0212<<14 | 0x15<<7 | 0x08, + 22021 - 19968: jis0212<<14 | 0x15<<7 | 0x09, + 22022 - 19968: jis0208<<14 | 0x22<<7 | 0x11, + 22024 - 19968: jis0212<<14 | 0x15<<7 | 0x0A, + 22025 - 19968: jis0208<<14 | 0x11<<7 | 0x24, + 22026 - 19968: jis0212<<14 | 0x15<<7 | 0x0B, + 22029 - 19968: jis0212<<14 | 0x15<<7 | 0x0C, + 22030 - 19968: jis0212<<14 | 0x15<<7 | 0x0D, + 22031 - 19968: jis0212<<14 | 0x15<<7 | 0x0E, + 22032 - 19968: jis0212<<14 | 0x15<<7 | 0x0F, + 22033 - 19968: jis0212<<14 | 0x15<<7 | 0x10, + 22034 - 19968: jis0212<<14 | 0x15<<7 | 0x11, + 22036 - 19968: jis0208<<14 | 0x32<<7 | 0x31, + 22038 - 19968: jis0208<<14 | 0x32<<7 | 0x33, + 22039 - 19968: jis0208<<14 | 0x1D<<7 | 0x07, + 22040 - 19968: jis0208<<14 | 0x10<<7 | 0x12, + 22041 - 19968: jis0212<<14 | 0x15<<7 | 0x12, + 22043 - 19968: jis0208<<14 | 0x32<<7 | 0x36, + 22057 - 19968: jis0208<<14 | 0x11<<7 | 0x3D, + 22060 - 19968: jis0212<<14 | 0x15<<7 | 0x13, + 22063 - 19968: jis0208<<14 | 0x32<<7 | 0x41, + 22064 - 19968: jis0212<<14 | 0x15<<7 | 0x14, + 22065 - 19968: jis0208<<14 | 0x1D<<7 | 0x5B, + 22066 - 19968: jis0208<<14 | 0x32<<7 | 0x3D, + 22067 - 19968: jis0212<<14 | 0x15<<7 | 0x15, + 22068 - 19968: jis0208<<14 | 0x32<<7 | 0x3B, + 22069 - 19968: jis0212<<14 | 0x15<<7 | 0x16, + 22070 - 19968: jis0208<<14 | 0x32<<7 | 0x3C, + 22071 - 19968: jis0212<<14 | 0x15<<7 | 0x17, + 22072 - 19968: jis0208<<14 | 0x32<<7 | 0x3E, + 22073 - 19968: jis0212<<14 | 0x15<<7 | 0x18, + 22075 - 19968: jis0212<<14 | 0x15<<7 | 0x19, + 22076 - 19968: jis0212<<14 | 0x15<<7 | 0x1A, + 22077 - 19968: jis0212<<14 | 0x15<<7 | 0x1B, + 22079 - 19968: jis0212<<14 | 0x15<<7 | 0x1C, + 22080 - 19968: jis0212<<14 | 0x15<<7 | 0x1D, + 22081 - 19968: jis0212<<14 | 0x15<<7 | 0x1E, + 22082 - 19968: jis0208<<14 | 0x10<<7 | 0x1C, + 22083 - 19968: jis0212<<14 | 0x15<<7 | 0x1F, + 22084 - 19968: jis0212<<14 | 0x15<<7 | 0x20, + 22086 - 19968: jis0212<<14 | 0x15<<7 | 0x21, + 22089 - 19968: jis0212<<14 | 0x15<<7 | 0x22, + 22091 - 19968: jis0212<<14 | 0x15<<7 | 0x23, + 22092 - 19968: jis0208<<14 | 0x20<<7 | 0x18, + 22093 - 19968: jis0212<<14 | 0x15<<7 | 0x24, + 22094 - 19968: jis0208<<14 | 0x32<<7 | 0x38, + 22095 - 19968: jis0212<<14 | 0x15<<7 | 0x25, + 22096 - 19968: jis0208<<14 | 0x32<<7 | 0x39, + 22100 - 19968: jis0212<<14 | 0x15<<7 | 0x26, + 22107 - 19968: jis0208<<14 | 0x12<<7 | 0x59, + 22110 - 19968: jis0212<<14 | 0x15<<7 | 0x27, + 22112 - 19968: jis0212<<14 | 0x15<<7 | 0x28, + 22113 - 19968: jis0212<<14 | 0x15<<7 | 0x29, + 22114 - 19968: jis0212<<14 | 0x15<<7 | 0x2A, + 22115 - 19968: jis0212<<14 | 0x15<<7 | 0x2B, + 22116 - 19968: jis0208<<14 | 0x32<<7 | 0x40, + 22118 - 19968: jis0212<<14 | 0x15<<7 | 0x2C, + 22120 - 19968: jis0208<<14 | 0x13<<7 | 0x4E, + 22121 - 19968: jis0212<<14 | 0x15<<7 | 0x2D, + 22122 - 19968: jis0208<<14 | 0x32<<7 | 0x43, + 22123 - 19968: jis0208<<14 | 0x32<<7 | 0x3F, + 22124 - 19968: jis0208<<14 | 0x32<<7 | 0x42, + 22125 - 19968: jis0212<<14 | 0x15<<7 | 0x2E, + 22127 - 19968: jis0212<<14 | 0x15<<7 | 0x2F, + 22129 - 19968: jis0212<<14 | 0x15<<7 | 0x30, + 22130 - 19968: jis0212<<14 | 0x15<<7 | 0x31, + 22132 - 19968: jis0208<<14 | 0x29<<7 | 0x0D, + 22133 - 19968: jis0212<<14 | 0x15<<7 | 0x32, + 22136 - 19968: jis0208<<14 | 0x25<<7 | 0x34, + 22138 - 19968: jis0208<<14 | 0x27<<7 | 0x17, + 22144 - 19968: jis0208<<14 | 0x32<<7 | 0x45, + 22148 - 19968: jis0212<<14 | 0x15<<7 | 0x33, + 22149 - 19968: jis0212<<14 | 0x15<<7 | 0x34, + 22150 - 19968: jis0208<<14 | 0x32<<7 | 0x44, + 22151 - 19968: jis0208<<14 | 0x12<<7 | 0x24, + 22152 - 19968: jis0212<<14 | 0x15<<7 | 0x35, + 22154 - 19968: jis0208<<14 | 0x32<<7 | 0x46, + 22155 - 19968: jis0212<<14 | 0x15<<7 | 0x36, + 22156 - 19968: jis0212<<14 | 0x15<<7 | 0x37, + 22159 - 19968: jis0208<<14 | 0x32<<7 | 0x49, + 22164 - 19968: jis0208<<14 | 0x32<<7 | 0x48, + 22165 - 19968: jis0212<<14 | 0x15<<7 | 0x38, + 22169 - 19968: jis0212<<14 | 0x15<<7 | 0x39, + 22170 - 19968: jis0212<<14 | 0x15<<7 | 0x3A, + 22173 - 19968: jis0212<<14 | 0x15<<7 | 0x3B, + 22174 - 19968: jis0212<<14 | 0x15<<7 | 0x3C, + 22175 - 19968: jis0212<<14 | 0x15<<7 | 0x3D, + 22176 - 19968: jis0208<<14 | 0x32<<7 | 0x47, + 22178 - 19968: jis0208<<14 | 0x26<<7 | 0x18, + 22181 - 19968: jis0208<<14 | 0x32<<7 | 0x4A, + 22182 - 19968: jis0212<<14 | 0x15<<7 | 0x3E, + 22183 - 19968: jis0212<<14 | 0x15<<7 | 0x3F, + 22184 - 19968: jis0212<<14 | 0x15<<7 | 0x40, + 22185 - 19968: jis0212<<14 | 0x15<<7 | 0x41, + 22187 - 19968: jis0212<<14 | 0x15<<7 | 0x42, + 22188 - 19968: jis0212<<14 | 0x15<<7 | 0x43, + 22189 - 19968: jis0212<<14 | 0x15<<7 | 0x44, + 22190 - 19968: jis0208<<14 | 0x32<<7 | 0x4B, + 22193 - 19968: jis0212<<14 | 0x15<<7 | 0x45, + 22195 - 19968: jis0212<<14 | 0x15<<7 | 0x46, + 22196 - 19968: jis0208<<14 | 0x32<<7 | 0x4D, + 22198 - 19968: jis0208<<14 | 0x32<<7 | 0x4C, + 22199 - 19968: jis0212<<14 | 0x15<<7 | 0x47, + 22204 - 19968: jis0208<<14 | 0x32<<7 | 0x4F, + 22206 - 19968: jis0212<<14 | 0x15<<7 | 0x48, + 22208 - 19968: jis0208<<14 | 0x32<<7 | 0x52, + 22209 - 19968: jis0208<<14 | 0x32<<7 | 0x50, + 22210 - 19968: jis0208<<14 | 0x32<<7 | 0x4E, + 22211 - 19968: jis0208<<14 | 0x32<<7 | 0x51, + 22213 - 19968: jis0212<<14 | 0x15<<7 | 0x49, + 22216 - 19968: jis0208<<14 | 0x32<<7 | 0x53, + 22217 - 19968: jis0212<<14 | 0x15<<7 | 0x4A, + 22218 - 19968: jis0212<<14 | 0x15<<7 | 0x4B, + 22219 - 19968: jis0212<<14 | 0x15<<7 | 0x4C, + 22220 - 19968: jis0212<<14 | 0x15<<7 | 0x4F, + 22221 - 19968: jis0212<<14 | 0x15<<7 | 0x50, + 22222 - 19968: jis0208<<14 | 0x32<<7 | 0x54, + 22223 - 19968: jis0212<<14 | 0x15<<7 | 0x4D, + 22224 - 19968: jis0212<<14 | 0x15<<7 | 0x4E, + 22225 - 19968: jis0208<<14 | 0x32<<7 | 0x55, + 22227 - 19968: jis0208<<14 | 0x32<<7 | 0x56, + 22231 - 19968: jis0208<<14 | 0x32<<7 | 0x57, + 22232 - 19968: jis0208<<14 | 0x30<<7 | 0x24, + 22233 - 19968: jis0212<<14 | 0x15<<7 | 0x51, + 22234 - 19968: jis0208<<14 | 0x1B<<7 | 0x5B, + 22235 - 19968: jis0208<<14 | 0x1A<<7 | 0x2C, + 22236 - 19968: jis0212<<14 | 0x15<<7 | 0x52, + 22237 - 19968: jis0212<<14 | 0x15<<7 | 0x53, + 22238 - 19968: jis0208<<14 | 0x11<<7 | 0x52, + 22239 - 19968: jis0212<<14 | 0x15<<7 | 0x54, + 22240 - 19968: jis0208<<14 | 0x0F<<7 | 0x57, + 22241 - 19968: jis0212<<14 | 0x15<<7 | 0x55, + 22243 - 19968: jis0208<<14 | 0x22<<7 | 0x23, + 22244 - 19968: jis0212<<14 | 0x15<<7 | 0x56, + 22245 - 19968: jis0212<<14 | 0x15<<7 | 0x57, + 22246 - 19968: jis0212<<14 | 0x15<<7 | 0x58, + 22247 - 19968: jis0212<<14 | 0x15<<7 | 0x59, + 22248 - 19968: jis0212<<14 | 0x15<<7 | 0x5A, + 22251 - 19968: jis0212<<14 | 0x15<<7 | 0x5C, + 22253 - 19968: jis0212<<14 | 0x15<<7 | 0x5D, + 22254 - 19968: jis0208<<14 | 0x32<<7 | 0x58, + 22256 - 19968: jis0208<<14 | 0x19<<7 | 0x03, + 22257 - 19968: jis0212<<14 | 0x15<<7 | 0x5B, + 22258 - 19968: jis0208<<14 | 0x0F<<7 | 0x2E, + 22259 - 19968: jis0208<<14 | 0x1E<<7 | 0x3D, + 22262 - 19968: jis0212<<14 | 0x16<<7 | 0x00, + 22263 - 19968: jis0212<<14 | 0x16<<7 | 0x01, + 22265 - 19968: jis0208<<14 | 0x32<<7 | 0x59, + 22266 - 19968: jis0208<<14 | 0x17<<7 | 0x26, + 22269 - 19968: jis0208<<14 | 0x18<<7 | 0x50, + 22271 - 19968: jis0208<<14 | 0x32<<7 | 0x5B, + 22272 - 19968: jis0208<<14 | 0x32<<7 | 0x5A, + 22273 - 19968: jis0212<<14 | 0x16<<7 | 0x02, + 22274 - 19968: jis0212<<14 | 0x16<<7 | 0x03, + 22275 - 19968: jis0208<<14 | 0x29<<7 | 0x3F, + 22276 - 19968: jis0208<<14 | 0x32<<7 | 0x5C, + 22279 - 19968: jis0212<<14 | 0x16<<7 | 0x04, + 22280 - 19968: jis0208<<14 | 0x33<<7 | 0x00, + 22281 - 19968: jis0208<<14 | 0x32<<7 | 0x5D, + 22282 - 19968: jis0212<<14 | 0x16<<7 | 0x05, + 22283 - 19968: jis0208<<14 | 0x33<<7 | 0x01, + 22284 - 19968: jis0212<<14 | 0x16<<7 | 0x06, + 22285 - 19968: jis0208<<14 | 0x33<<7 | 0x02, + 22287 - 19968: jis0208<<14 | 0x16<<7 | 0x56, + 22289 - 19968: jis0212<<14 | 0x16<<7 | 0x07, + 22290 - 19968: jis0208<<14 | 0x10<<7 | 0x3F, + 22291 - 19968: jis0208<<14 | 0x33<<7 | 0x03, + 22293 - 19968: jis0212<<14 | 0x16<<7 | 0x08, + 22294 - 19968: jis0208<<14 | 0x33<<7 | 0x05, + 22296 - 19968: jis0208<<14 | 0x33<<7 | 0x04, + 22298 - 19968: jis0212<<14 | 0x16<<7 | 0x09, + 22299 - 19968: jis0212<<14 | 0x16<<7 | 0x0A, + 22300 - 19968: jis0208<<14 | 0x33<<7 | 0x07, + 22301 - 19968: jis0212<<14 | 0x16<<7 | 0x0B, + 22303 - 19968: jis0208<<14 | 0x24<<7 | 0x39, + 22304 - 19968: jis0212<<14 | 0x16<<7 | 0x0C, + 22306 - 19968: jis0212<<14 | 0x16<<7 | 0x0D, + 22307 - 19968: jis0212<<14 | 0x16<<7 | 0x0E, + 22308 - 19968: jis0212<<14 | 0x16<<7 | 0x0F, + 22309 - 19968: jis0212<<14 | 0x16<<7 | 0x10, + 22310 - 19968: jis0208<<14 | 0x33<<7 | 0x08, + 22311 - 19968: jis0208<<14 | 0x0F<<7 | 0x14, + 22312 - 19968: jis0208<<14 | 0x19<<7 | 0x3E, + 22313 - 19968: jis0212<<14 | 0x16<<7 | 0x11, + 22314 - 19968: jis0212<<14 | 0x16<<7 | 0x12, + 22316 - 19968: jis0212<<14 | 0x16<<7 | 0x13, + 22317 - 19968: jis0208<<14 | 0x16<<7 | 0x1C, + 22318 - 19968: jis0212<<14 | 0x16<<7 | 0x14, + 22319 - 19968: jis0212<<14 | 0x16<<7 | 0x15, + 22320 - 19968: jis0208<<14 | 0x22<<7 | 0x2E, + 22323 - 19968: jis0212<<14 | 0x16<<7 | 0x16, + 22324 - 19968: jis0212<<14 | 0x16<<7 | 0x17, + 22327 - 19968: jis0208<<14 | 0x33<<7 | 0x09, + 22328 - 19968: jis0208<<14 | 0x33<<7 | 0x0A, + 22331 - 19968: jis0208<<14 | 0x33<<7 | 0x0C, + 22333 - 19968: jis0212<<14 | 0x16<<7 | 0x18, + 22334 - 19968: jis0212<<14 | 0x16<<7 | 0x19, + 22335 - 19968: jis0212<<14 | 0x16<<7 | 0x1A, + 22336 - 19968: jis0208<<14 | 0x33<<7 | 0x0D, + 22338 - 19968: jis0208<<14 | 0x19<<7 | 0x43, + 22341 - 19968: jis0212<<14 | 0x16<<7 | 0x1B, + 22342 - 19968: jis0212<<14 | 0x16<<7 | 0x1C, + 22343 - 19968: jis0208<<14 | 0x15<<7 | 0x30, + 22346 - 19968: jis0208<<14 | 0x2A<<7 | 0x16, + 22348 - 19968: jis0212<<14 | 0x16<<7 | 0x1D, + 22349 - 19968: jis0212<<14 | 0x16<<7 | 0x1E, + 22350 - 19968: jis0208<<14 | 0x33<<7 | 0x0B, + 22351 - 19968: jis0208<<14 | 0x33<<7 | 0x0E, + 22352 - 19968: jis0208<<14 | 0x19<<7 | 0x20, + 22353 - 19968: jis0208<<14 | 0x18<<7 | 0x02, + 22354 - 19968: jis0212<<14 | 0x16<<7 | 0x1F, + 22361 - 19968: jis0208<<14 | 0x58<<7 | 0x39, + 22369 - 19968: jis0208<<14 | 0x33<<7 | 0x12, + 22370 - 19968: jis0212<<14 | 0x16<<7 | 0x20, + 22372 - 19968: jis0208<<14 | 0x19<<7 | 0x04, + 22373 - 19968: jis0208<<14 | 0x58<<7 | 0x3A, + 22374 - 19968: jis0208<<14 | 0x22<<7 | 0x12, + 22375 - 19968: jis0212<<14 | 0x16<<7 | 0x22, + 22376 - 19968: jis0212<<14 | 0x16<<7 | 0x23, + 22377 - 19968: jis0208<<14 | 0x33<<7 | 0x0F, + 22378 - 19968: jis0208<<14 | 0x23<<7 | 0x39, + 22379 - 19968: jis0212<<14 | 0x16<<7 | 0x24, + 22381 - 19968: jis0212<<14 | 0x16<<7 | 0x25, + 22382 - 19968: jis0212<<14 | 0x16<<7 | 0x26, + 22383 - 19968: jis0212<<14 | 0x16<<7 | 0x27, + 22384 - 19968: jis0212<<14 | 0x16<<7 | 0x28, + 22385 - 19968: jis0212<<14 | 0x16<<7 | 0x29, + 22387 - 19968: jis0212<<14 | 0x16<<7 | 0x2A, + 22388 - 19968: jis0212<<14 | 0x16<<7 | 0x2B, + 22389 - 19968: jis0212<<14 | 0x16<<7 | 0x2C, + 22391 - 19968: jis0212<<14 | 0x16<<7 | 0x2D, + 22393 - 19968: jis0212<<14 | 0x16<<7 | 0x2E, + 22394 - 19968: jis0212<<14 | 0x16<<7 | 0x2F, + 22395 - 19968: jis0212<<14 | 0x16<<7 | 0x30, + 22396 - 19968: jis0212<<14 | 0x16<<7 | 0x31, + 22398 - 19968: jis0212<<14 | 0x16<<7 | 0x32, + 22399 - 19968: jis0208<<14 | 0x33<<7 | 0x13, + 22401 - 19968: jis0212<<14 | 0x16<<7 | 0x33, + 22402 - 19968: jis0208<<14 | 0x1E<<7 | 0x41, + 22403 - 19968: jis0212<<14 | 0x16<<7 | 0x34, + 22408 - 19968: jis0208<<14 | 0x33<<7 | 0x11, + 22409 - 19968: jis0208<<14 | 0x33<<7 | 0x14, + 22411 - 19968: jis0208<<14 | 0x16<<7 | 0x1E, + 22412 - 19968: jis0212<<14 | 0x16<<7 | 0x35, + 22419 - 19968: jis0208<<14 | 0x33<<7 | 0x15, + 22420 - 19968: jis0212<<14 | 0x16<<7 | 0x36, + 22421 - 19968: jis0212<<14 | 0x16<<7 | 0x3F, + 22423 - 19968: jis0212<<14 | 0x16<<7 | 0x37, + 22425 - 19968: jis0212<<14 | 0x16<<7 | 0x38, + 22426 - 19968: jis0212<<14 | 0x16<<7 | 0x39, + 22428 - 19968: jis0212<<14 | 0x16<<7 | 0x3A, + 22429 - 19968: jis0212<<14 | 0x16<<7 | 0x3B, + 22430 - 19968: jis0212<<14 | 0x16<<7 | 0x3C, + 22431 - 19968: jis0212<<14 | 0x16<<7 | 0x3D, + 22432 - 19968: jis0208<<14 | 0x33<<7 | 0x16, + 22433 - 19968: jis0212<<14 | 0x16<<7 | 0x3E, + 22434 - 19968: jis0208<<14 | 0x18<<7 | 0x03, + 22435 - 19968: jis0208<<14 | 0x12<<7 | 0x1F, + 22436 - 19968: jis0208<<14 | 0x33<<7 | 0x18, + 22439 - 19968: jis0212<<14 | 0x16<<7 | 0x40, + 22440 - 19968: jis0212<<14 | 0x16<<7 | 0x41, + 22441 - 19968: jis0212<<14 | 0x16<<7 | 0x42, + 22442 - 19968: jis0208<<14 | 0x33<<7 | 0x19, + 22444 - 19968: jis0208<<14 | 0x58<<7 | 0x3B, + 22448 - 19968: jis0208<<14 | 0x33<<7 | 0x1A, + 22451 - 19968: jis0208<<14 | 0x33<<7 | 0x17, + 22456 - 19968: jis0212<<14 | 0x16<<7 | 0x44, + 22461 - 19968: jis0212<<14 | 0x16<<7 | 0x45, + 22464 - 19968: jis0208<<14 | 0x33<<7 | 0x10, + 22467 - 19968: jis0208<<14 | 0x33<<7 | 0x1B, + 22470 - 19968: jis0208<<14 | 0x33<<7 | 0x1C, + 22471 - 19968: jis0208<<14 | 0x58<<7 | 0x3D, + 22472 - 19968: jis0208<<14 | 0x58<<7 | 0x3C, + 22475 - 19968: jis0208<<14 | 0x2A<<7 | 0x43, + 22476 - 19968: jis0212<<14 | 0x16<<7 | 0x48, + 22478 - 19968: jis0208<<14 | 0x1D<<7 | 0x4A, + 22479 - 19968: jis0212<<14 | 0x16<<7 | 0x49, + 22482 - 19968: jis0208<<14 | 0x33<<7 | 0x1E, + 22483 - 19968: jis0208<<14 | 0x33<<7 | 0x1F, + 22484 - 19968: jis0208<<14 | 0x33<<7 | 0x1D, + 22485 - 19968: jis0212<<14 | 0x16<<7 | 0x4A, + 22486 - 19968: jis0208<<14 | 0x33<<7 | 0x21, + 22492 - 19968: jis0208<<14 | 0x26<<7 | 0x17, + 22493 - 19968: jis0212<<14 | 0x16<<7 | 0x4B, + 22494 - 19968: jis0212<<14 | 0x16<<7 | 0x4C, + 22495 - 19968: jis0208<<14 | 0x0F<<7 | 0x47, + 22496 - 19968: jis0208<<14 | 0x28<<7 | 0x35, + 22497 - 19968: jis0212<<14 | 0x16<<7 | 0x5D, + 22499 - 19968: jis0208<<14 | 0x33<<7 | 0x22, + 22500 - 19968: jis0212<<14 | 0x16<<7 | 0x4D, + 22502 - 19968: jis0212<<14 | 0x16<<7 | 0x4E, + 22503 - 19968: jis0212<<14 | 0x16<<7 | 0x4F, + 22505 - 19968: jis0212<<14 | 0x16<<7 | 0x50, + 22509 - 19968: jis0212<<14 | 0x16<<7 | 0x51, + 22512 - 19968: jis0212<<14 | 0x16<<7 | 0x52, + 22516 - 19968: jis0208<<14 | 0x1D<<7 | 0x5C, + 22517 - 19968: jis0212<<14 | 0x16<<7 | 0x53, + 22518 - 19968: jis0212<<14 | 0x16<<7 | 0x54, + 22519 - 19968: jis0208<<14 | 0x1B<<7 | 0x18, + 22520 - 19968: jis0212<<14 | 0x16<<7 | 0x55, + 22521 - 19968: jis0208<<14 | 0x26<<7 | 0x3C, + 22522 - 19968: jis0208<<14 | 0x13<<7 | 0x4F, + 22524 - 19968: jis0208<<14 | 0x19<<7 | 0x4A, + 22525 - 19968: jis0212<<14 | 0x16<<7 | 0x56, + 22526 - 19968: jis0212<<14 | 0x16<<7 | 0x57, + 22527 - 19968: jis0212<<14 | 0x16<<7 | 0x58, + 22528 - 19968: jis0208<<14 | 0x2A<<7 | 0x38, + 22530 - 19968: jis0208<<14 | 0x25<<7 | 0x11, + 22531 - 19968: jis0212<<14 | 0x16<<7 | 0x59, + 22532 - 19968: jis0212<<14 | 0x16<<7 | 0x5A, + 22533 - 19968: jis0208<<14 | 0x16<<7 | 0x57, + 22534 - 19968: jis0208<<14 | 0x21<<7 | 0x2E, + 22536 - 19968: jis0212<<14 | 0x16<<7 | 0x5B, + 22537 - 19968: jis0212<<14 | 0x16<<7 | 0x5C, + 22538 - 19968: jis0208<<14 | 0x33<<7 | 0x20, + 22539 - 19968: jis0208<<14 | 0x33<<7 | 0x23, + 22540 - 19968: jis0212<<14 | 0x17<<7 | 0x00, + 22541 - 19968: jis0212<<14 | 0x17<<7 | 0x01, + 22549 - 19968: jis0208<<14 | 0x21<<7 | 0x23, + 22553 - 19968: jis0208<<14 | 0x33<<7 | 0x24, + 22555 - 19968: jis0212<<14 | 0x17<<7 | 0x02, + 22557 - 19968: jis0208<<14 | 0x33<<7 | 0x25, + 22558 - 19968: jis0212<<14 | 0x17<<7 | 0x03, + 22559 - 19968: jis0212<<14 | 0x17<<7 | 0x04, + 22560 - 19968: jis0212<<14 | 0x17<<7 | 0x05, + 22561 - 19968: jis0208<<14 | 0x33<<7 | 0x27, + 22564 - 19968: jis0208<<14 | 0x23<<7 | 0x48, + 22566 - 19968: jis0212<<14 | 0x17<<7 | 0x06, + 22567 - 19968: jis0212<<14 | 0x17<<7 | 0x07, + 22570 - 19968: jis0208<<14 | 0x13<<7 | 0x0D, + 22573 - 19968: jis0212<<14 | 0x17<<7 | 0x08, + 22575 - 19968: jis0208<<14 | 0x53<<7 | 0x00, + 22576 - 19968: jis0208<<14 | 0x10<<7 | 0x40, + 22577 - 19968: jis0208<<14 | 0x29<<7 | 0x52, + 22578 - 19968: jis0212<<14 | 0x17<<7 | 0x09, + 22580 - 19968: jis0208<<14 | 0x1D<<7 | 0x4B, + 22581 - 19968: jis0208<<14 | 0x24<<7 | 0x27, + 22585 - 19968: jis0212<<14 | 0x17<<7 | 0x0A, + 22586 - 19968: jis0208<<14 | 0x19<<7 | 0x45, + 22589 - 19968: jis0208<<14 | 0x33<<7 | 0x2D, + 22591 - 19968: jis0212<<14 | 0x17<<7 | 0x0B, + 22592 - 19968: jis0208<<14 | 0x29<<7 | 0x1C, + 22593 - 19968: jis0208<<14 | 0x2D<<7 | 0x3C, + 22601 - 19968: jis0212<<14 | 0x17<<7 | 0x0C, + 22602 - 19968: jis0208<<14 | 0x11<<7 | 0x53, + 22603 - 19968: jis0208<<14 | 0x33<<7 | 0x29, + 22604 - 19968: jis0212<<14 | 0x17<<7 | 0x0D, + 22605 - 19968: jis0212<<14 | 0x17<<7 | 0x0E, + 22607 - 19968: jis0212<<14 | 0x17<<7 | 0x0F, + 22608 - 19968: jis0212<<14 | 0x17<<7 | 0x10, + 22609 - 19968: jis0208<<14 | 0x20<<7 | 0x19, + 22610 - 19968: jis0208<<14 | 0x33<<7 | 0x2C, + 22612 - 19968: jis0208<<14 | 0x24<<7 | 0x42, + 22613 - 19968: jis0212<<14 | 0x17<<7 | 0x11, + 22615 - 19968: jis0208<<14 | 0x24<<7 | 0x28, + 22616 - 19968: jis0208<<14 | 0x24<<7 | 0x43, + 22617 - 19968: jis0208<<14 | 0x27<<7 | 0x18, + 22618 - 19968: jis0208<<14 | 0x23<<7 | 0x2C, + 22622 - 19968: jis0208<<14 | 0x19<<7 | 0x28, + 22623 - 19968: jis0212<<14 | 0x17<<7 | 0x12, + 22625 - 19968: jis0212<<14 | 0x17<<7 | 0x13, + 22626 - 19968: jis0208<<14 | 0x33<<7 | 0x28, + 22628 - 19968: jis0212<<14 | 0x17<<7 | 0x14, + 22631 - 19968: jis0212<<14 | 0x17<<7 | 0x15, + 22632 - 19968: jis0212<<14 | 0x17<<7 | 0x16, + 22633 - 19968: jis0208<<14 | 0x10<<7 | 0x55, + 22635 - 19968: jis0208<<14 | 0x24<<7 | 0x15, + 22640 - 19968: jis0208<<14 | 0x33<<7 | 0x2A, + 22642 - 19968: jis0208<<14 | 0x33<<7 | 0x26, + 22645 - 19968: jis0208<<14 | 0x1E<<7 | 0x2F, + 22648 - 19968: jis0212<<14 | 0x17<<7 | 0x17, + 22649 - 19968: jis0208<<14 | 0x33<<7 | 0x2E, + 22652 - 19968: jis0212<<14 | 0x17<<7 | 0x18, + 22654 - 19968: jis0208<<14 | 0x1C<<7 | 0x2D, + 22655 - 19968: jis0212<<14 | 0x17<<7 | 0x19, + 22656 - 19968: jis0212<<14 | 0x17<<7 | 0x1A, + 22657 - 19968: jis0212<<14 | 0x17<<7 | 0x1B, + 22659 - 19968: jis0208<<14 | 0x15<<7 | 0x0C, + 22661 - 19968: jis0208<<14 | 0x33<<7 | 0x2F, + 22663 - 19968: jis0212<<14 | 0x17<<7 | 0x1C, + 22664 - 19968: jis0212<<14 | 0x17<<7 | 0x1D, + 22665 - 19968: jis0212<<14 | 0x17<<7 | 0x1E, + 22666 - 19968: jis0212<<14 | 0x17<<7 | 0x1F, + 22668 - 19968: jis0212<<14 | 0x17<<7 | 0x20, + 22669 - 19968: jis0212<<14 | 0x17<<7 | 0x21, + 22671 - 19968: jis0212<<14 | 0x17<<7 | 0x22, + 22672 - 19968: jis0212<<14 | 0x17<<7 | 0x23, + 22675 - 19968: jis0208<<14 | 0x29<<7 | 0x47, + 22676 - 19968: jis0212<<14 | 0x17<<7 | 0x24, + 22678 - 19968: jis0212<<14 | 0x17<<7 | 0x25, + 22679 - 19968: jis0208<<14 | 0x20<<7 | 0x5C, + 22684 - 19968: jis0208<<14 | 0x23<<7 | 0x25, + 22685 - 19968: jis0212<<14 | 0x17<<7 | 0x26, + 22686 - 19968: jis0208<<14 | 0x58<<7 | 0x40, + 22687 - 19968: jis0208<<14 | 0x33<<7 | 0x31, + 22688 - 19968: jis0212<<14 | 0x17<<7 | 0x27, + 22689 - 19968: jis0212<<14 | 0x17<<7 | 0x28, + 22690 - 19968: jis0212<<14 | 0x17<<7 | 0x29, + 22694 - 19968: jis0212<<14 | 0x17<<7 | 0x2A, + 22696 - 19968: jis0208<<14 | 0x2A<<7 | 0x2E, + 22697 - 19968: jis0212<<14 | 0x17<<7 | 0x2B, + 22699 - 19968: jis0208<<14 | 0x33<<7 | 0x32, + 22702 - 19968: jis0208<<14 | 0x33<<7 | 0x37, + 22705 - 19968: jis0212<<14 | 0x17<<7 | 0x2C, + 22706 - 19968: jis0208<<14 | 0x58<<7 | 0x41, + 22707 - 19968: jis0208<<14 | 0x29<<7 | 0x0E, + 22712 - 19968: jis0208<<14 | 0x33<<7 | 0x36, + 22713 - 19968: jis0208<<14 | 0x33<<7 | 0x30, + 22714 - 19968: jis0208<<14 | 0x33<<7 | 0x33, + 22715 - 19968: jis0208<<14 | 0x33<<7 | 0x35, + 22716 - 19968: jis0212<<14 | 0x17<<7 | 0x2F, + 22718 - 19968: jis0208<<14 | 0x19<<7 | 0x05, + 22721 - 19968: jis0208<<14 | 0x29<<7 | 0x28, + 22722 - 19968: jis0212<<14 | 0x17<<7 | 0x30, + 22724 - 19968: jis0212<<14 | 0x17<<7 | 0x2E, + 22725 - 19968: jis0208<<14 | 0x33<<7 | 0x38, + 22727 - 19968: jis0208<<14 | 0x22<<7 | 0x24, + 22728 - 19968: jis0212<<14 | 0x17<<7 | 0x31, + 22730 - 19968: jis0208<<14 | 0x11<<7 | 0x54, + 22732 - 19968: jis0208<<14 | 0x1D<<7 | 0x4C, + 22733 - 19968: jis0212<<14 | 0x17<<7 | 0x32, + 22734 - 19968: jis0212<<14 | 0x17<<7 | 0x33, + 22736 - 19968: jis0212<<14 | 0x17<<7 | 0x34, + 22737 - 19968: jis0208<<14 | 0x33<<7 | 0x3A, + 22738 - 19968: jis0212<<14 | 0x17<<7 | 0x35, + 22739 - 19968: jis0208<<14 | 0x33<<7 | 0x39, + 22740 - 19968: jis0212<<14 | 0x17<<7 | 0x36, + 22741 - 19968: jis0208<<14 | 0x18<<7 | 0x47, + 22742 - 19968: jis0212<<14 | 0x17<<7 | 0x37, + 22743 - 19968: jis0208<<14 | 0x33<<7 | 0x3B, + 22744 - 19968: jis0208<<14 | 0x33<<7 | 0x3D, + 22745 - 19968: jis0208<<14 | 0x33<<7 | 0x3C, + 22746 - 19968: jis0212<<14 | 0x17<<7 | 0x38, + 22748 - 19968: jis0208<<14 | 0x33<<7 | 0x3F, + 22749 - 19968: jis0212<<14 | 0x17<<7 | 0x39, + 22750 - 19968: jis0208<<14 | 0x33<<7 | 0x34, + 22751 - 19968: jis0208<<14 | 0x33<<7 | 0x41, + 22753 - 19968: jis0212<<14 | 0x17<<7 | 0x3A, + 22754 - 19968: jis0212<<14 | 0x17<<7 | 0x3B, + 22756 - 19968: jis0208<<14 | 0x33<<7 | 0x40, + 22757 - 19968: jis0208<<14 | 0x33<<7 | 0x3E, + 22761 - 19968: jis0212<<14 | 0x17<<7 | 0x3C, + 22763 - 19968: jis0208<<14 | 0x1A<<7 | 0x2D, + 22764 - 19968: jis0208<<14 | 0x1E<<7 | 0x30, + 22766 - 19968: jis0208<<14 | 0x20<<7 | 0x33, + 22767 - 19968: jis0208<<14 | 0x33<<7 | 0x42, + 22768 - 19968: jis0208<<14 | 0x1F<<7 | 0x1B, + 22769 - 19968: jis0208<<14 | 0x0F<<7 | 0x4C, + 22770 - 19968: jis0208<<14 | 0x26<<7 | 0x43, + 22771 - 19968: jis0212<<14 | 0x17<<7 | 0x3D, + 22775 - 19968: jis0208<<14 | 0x23<<7 | 0x3A, + 22777 - 19968: jis0208<<14 | 0x33<<7 | 0x44, + 22778 - 19968: jis0208<<14 | 0x33<<7 | 0x43, + 22779 - 19968: jis0208<<14 | 0x33<<7 | 0x45, + 22780 - 19968: jis0208<<14 | 0x33<<7 | 0x46, + 22781 - 19968: jis0208<<14 | 0x33<<7 | 0x47, + 22786 - 19968: jis0208<<14 | 0x33<<7 | 0x48, + 22789 - 19968: jis0212<<14 | 0x17<<7 | 0x3E, + 22790 - 19968: jis0212<<14 | 0x17<<7 | 0x3F, + 22793 - 19968: jis0208<<14 | 0x29<<7 | 0x30, + 22794 - 19968: jis0208<<14 | 0x33<<7 | 0x49, + 22795 - 19968: jis0208<<14 | 0x58<<7 | 0x42, + 22796 - 19968: jis0212<<14 | 0x17<<7 | 0x41, + 22799 - 19968: jis0208<<14 | 0x11<<7 | 0x25, + 22800 - 19968: jis0208<<14 | 0x33<<7 | 0x4A, + 22802 - 19968: jis0212<<14 | 0x17<<7 | 0x42, + 22803 - 19968: jis0212<<14 | 0x17<<7 | 0x43, + 22804 - 19968: jis0212<<14 | 0x17<<7 | 0x44, + 22805 - 19968: jis0208<<14 | 0x2C<<7 | 0x1B, + 22806 - 19968: jis0208<<14 | 0x12<<7 | 0x0F, + 22808 - 19968: jis0208<<14 | 0x31<<7 | 0x28, + 22809 - 19968: jis0208<<14 | 0x1C<<7 | 0x27, + 22810 - 19968: jis0208<<14 | 0x21<<7 | 0x1E, + 22811 - 19968: jis0208<<14 | 0x33<<7 | 0x4B, + 22812 - 19968: jis0208<<14 | 0x2B<<7 | 0x4A, + 22813 - 19968: jis0212<<14 | 0x17<<7 | 0x46, + 22817 - 19968: jis0212<<14 | 0x17<<7 | 0x47, + 22818 - 19968: jis0208<<14 | 0x2B<<7 | 0x13, + 22819 - 19968: jis0212<<14 | 0x17<<7 | 0x48, + 22820 - 19968: jis0212<<14 | 0x17<<7 | 0x49, + 22821 - 19968: jis0208<<14 | 0x33<<7 | 0x4D, + 22823 - 19968: jis0208<<14 | 0x21<<7 | 0x46, + 22824 - 19968: jis0212<<14 | 0x17<<7 | 0x4A, + 22825 - 19968: jis0208<<14 | 0x24<<7 | 0x16, + 22826 - 19968: jis0208<<14 | 0x21<<7 | 0x1F, + 22827 - 19968: jis0208<<14 | 0x28<<7 | 0x36, + 22828 - 19968: jis0208<<14 | 0x33<<7 | 0x4E, + 22829 - 19968: jis0208<<14 | 0x33<<7 | 0x4F, + 22830 - 19968: jis0208<<14 | 0x10<<7 | 0x5A, + 22831 - 19968: jis0212<<14 | 0x17<<7 | 0x4B, + 22832 - 19968: jis0212<<14 | 0x17<<7 | 0x4C, + 22833 - 19968: jis0208<<14 | 0x1B<<7 | 0x19, + 22834 - 19968: jis0208<<14 | 0x33<<7 | 0x50, + 22835 - 19968: jis0212<<14 | 0x17<<7 | 0x4D, + 22837 - 19968: jis0212<<14 | 0x17<<7 | 0x4E, + 22838 - 19968: jis0212<<14 | 0x17<<7 | 0x4F, + 22839 - 19968: jis0208<<14 | 0x0F<<7 | 0x2F, + 22840 - 19968: jis0208<<14 | 0x33<<7 | 0x51, + 22846 - 19968: jis0208<<14 | 0x33<<7 | 0x52, + 22847 - 19968: jis0212<<14 | 0x17<<7 | 0x50, + 22851 - 19968: jis0212<<14 | 0x17<<7 | 0x51, + 22852 - 19968: jis0208<<14 | 0x10<<7 | 0x41, + 22854 - 19968: jis0212<<14 | 0x17<<7 | 0x52, + 22855 - 19968: jis0208<<14 | 0x13<<7 | 0x50, + 22856 - 19968: jis0208<<14 | 0x25<<7 | 0x3F, + 22857 - 19968: jis0208<<14 | 0x29<<7 | 0x53, + 22862 - 19968: jis0208<<14 | 0x33<<7 | 0x56, + 22863 - 19968: jis0208<<14 | 0x20<<7 | 0x34, + 22864 - 19968: jis0208<<14 | 0x33<<7 | 0x55, + 22865 - 19968: jis0208<<14 | 0x16<<7 | 0x1F, + 22866 - 19968: jis0212<<14 | 0x17<<7 | 0x53, + 22867 - 19968: jis0208<<14 | 0x58<<7 | 0x43, + 22868 - 19968: jis0208<<14 | 0x2A<<7 | 0x3A, + 22869 - 19968: jis0208<<14 | 0x33<<7 | 0x54, + 22871 - 19968: jis0208<<14 | 0x24<<7 | 0x44, + 22872 - 19968: jis0208<<14 | 0x33<<7 | 0x58, + 22873 - 19968: jis0212<<14 | 0x17<<7 | 0x55, + 22874 - 19968: jis0208<<14 | 0x33<<7 | 0x57, + 22875 - 19968: jis0208<<14 | 0x58<<7 | 0x44, + 22877 - 19968: jis0208<<14 | 0x58<<7 | 0x45, + 22878 - 19968: jis0212<<14 | 0x17<<7 | 0x58, + 22879 - 19968: jis0212<<14 | 0x17<<7 | 0x59, + 22880 - 19968: jis0208<<14 | 0x33<<7 | 0x5A, + 22881 - 19968: jis0212<<14 | 0x17<<7 | 0x5A, + 22882 - 19968: jis0208<<14 | 0x33<<7 | 0x59, + 22883 - 19968: jis0208<<14 | 0x58<<7 | 0x46, + 22885 - 19968: jis0208<<14 | 0x10<<7 | 0x5B, + 22887 - 19968: jis0208<<14 | 0x33<<7 | 0x5B, + 22888 - 19968: jis0208<<14 | 0x1D<<7 | 0x08, + 22889 - 19968: jis0208<<14 | 0x33<<7 | 0x5D, + 22890 - 19968: jis0208<<14 | 0x22<<7 | 0x04, + 22891 - 19968: jis0212<<14 | 0x17<<7 | 0x5C, + 22892 - 19968: jis0208<<14 | 0x33<<7 | 0x5C, + 22893 - 19968: jis0212<<14 | 0x17<<7 | 0x5D, + 22894 - 19968: jis0208<<14 | 0x29<<7 | 0x12, + 22895 - 19968: jis0212<<14 | 0x18<<7 | 0x00, + 22898 - 19968: jis0212<<14 | 0x18<<7 | 0x01, + 22899 - 19968: jis0208<<14 | 0x1C<<7 | 0x56, + 22900 - 19968: jis0208<<14 | 0x24<<7 | 0x3A, + 22901 - 19968: jis0212<<14 | 0x18<<7 | 0x02, + 22902 - 19968: jis0212<<14 | 0x18<<7 | 0x03, + 22904 - 19968: jis0208<<14 | 0x34<<7 | 0x00, + 22905 - 19968: jis0212<<14 | 0x18<<7 | 0x04, + 22907 - 19968: jis0212<<14 | 0x18<<7 | 0x05, + 22908 - 19968: jis0212<<14 | 0x18<<7 | 0x06, + 22909 - 19968: jis0208<<14 | 0x18<<7 | 0x04, + 22913 - 19968: jis0208<<14 | 0x34<<7 | 0x01, + 22914 - 19968: jis0208<<14 | 0x26<<7 | 0x00, + 22915 - 19968: jis0208<<14 | 0x27<<7 | 0x3D, + 22916 - 19968: jis0208<<14 | 0x2B<<7 | 0x30, + 22922 - 19968: jis0208<<14 | 0x26<<7 | 0x04, + 22923 - 19968: jis0212<<14 | 0x18<<7 | 0x07, + 22924 - 19968: jis0212<<14 | 0x18<<7 | 0x08, + 22925 - 19968: jis0208<<14 | 0x34<<7 | 0x0A, + 22926 - 19968: jis0212<<14 | 0x18<<7 | 0x09, + 22930 - 19968: jis0212<<14 | 0x18<<7 | 0x0A, + 22931 - 19968: jis0208<<14 | 0x14<<7 | 0x17, + 22933 - 19968: jis0212<<14 | 0x18<<7 | 0x0B, + 22934 - 19968: jis0208<<14 | 0x2C<<7 | 0x24, + 22935 - 19968: jis0212<<14 | 0x18<<7 | 0x0C, + 22937 - 19968: jis0208<<14 | 0x2B<<7 | 0x0E, + 22939 - 19968: jis0208<<14 | 0x35<<7 | 0x0B, + 22941 - 19968: jis0208<<14 | 0x34<<7 | 0x02, + 22943 - 19968: jis0212<<14 | 0x18<<7 | 0x0D, + 22947 - 19968: jis0208<<14 | 0x34<<7 | 0x05, + 22948 - 19968: jis0208<<14 | 0x58<<7 | 0x47, + 22949 - 19968: jis0208<<14 | 0x21<<7 | 0x24, + 22951 - 19968: jis0212<<14 | 0x18<<7 | 0x0F, + 22952 - 19968: jis0208<<14 | 0x2A<<7 | 0x17, + 22956 - 19968: jis0208<<14 | 0x24<<7 | 0x29, + 22957 - 19968: jis0212<<14 | 0x18<<7 | 0x10, + 22958 - 19968: jis0212<<14 | 0x18<<7 | 0x11, + 22959 - 19968: jis0212<<14 | 0x18<<7 | 0x12, + 22960 - 19968: jis0212<<14 | 0x18<<7 | 0x13, + 22962 - 19968: jis0208<<14 | 0x34<<7 | 0x06, + 22963 - 19968: jis0212<<14 | 0x18<<7 | 0x14, + 22967 - 19968: jis0212<<14 | 0x18<<7 | 0x15, + 22969 - 19968: jis0208<<14 | 0x2A<<7 | 0x44, + 22970 - 19968: jis0208<<14 | 0x58<<7 | 0x48, + 22971 - 19968: jis0208<<14 | 0x19<<7 | 0x29, + 22972 - 19968: jis0212<<14 | 0x18<<7 | 0x17, + 22974 - 19968: jis0208<<14 | 0x1D<<7 | 0x09, + 22977 - 19968: jis0212<<14 | 0x18<<7 | 0x18, + 22979 - 19968: jis0212<<14 | 0x18<<7 | 0x19, + 22980 - 19968: jis0212<<14 | 0x18<<7 | 0x1A, + 22982 - 19968: jis0208<<14 | 0x34<<7 | 0x07, + 22984 - 19968: jis0212<<14 | 0x18<<7 | 0x1B, + 22985 - 19968: jis0208<<14 | 0x1A<<7 | 0x2F, + 22986 - 19968: jis0212<<14 | 0x18<<7 | 0x1C, + 22987 - 19968: jis0208<<14 | 0x1A<<7 | 0x2E, + 22989 - 19968: jis0212<<14 | 0x18<<7 | 0x1D, + 22992 - 19968: jis0208<<14 | 0x0F<<7 | 0x18, + 22993 - 19968: jis0208<<14 | 0x17<<7 | 0x27, + 22994 - 19968: jis0212<<14 | 0x18<<7 | 0x1E, + 22995 - 19968: jis0208<<14 | 0x1F<<7 | 0x0A, + 22996 - 19968: jis0208<<14 | 0x0F<<7 | 0x30, + 23001 - 19968: jis0208<<14 | 0x34<<7 | 0x0B, + 23002 - 19968: jis0208<<14 | 0x34<<7 | 0x0C, + 23004 - 19968: jis0208<<14 | 0x34<<7 | 0x09, + 23005 - 19968: jis0212<<14 | 0x18<<7 | 0x1F, + 23006 - 19968: jis0212<<14 | 0x18<<7 | 0x20, + 23007 - 19968: jis0212<<14 | 0x18<<7 | 0x21, + 23011 - 19968: jis0212<<14 | 0x18<<7 | 0x22, + 23012 - 19968: jis0212<<14 | 0x18<<7 | 0x23, + 23013 - 19968: jis0208<<14 | 0x10<<7 | 0x17, + 23014 - 19968: jis0208<<14 | 0x13<<7 | 0x0E, + 23015 - 19968: jis0212<<14 | 0x18<<7 | 0x24, + 23016 - 19968: jis0208<<14 | 0x34<<7 | 0x08, + 23018 - 19968: jis0208<<14 | 0x2B<<7 | 0x24, + 23019 - 19968: jis0208<<14 | 0x28<<7 | 0x10, + 23022 - 19968: jis0212<<14 | 0x18<<7 | 0x25, + 23023 - 19968: jis0212<<14 | 0x18<<7 | 0x26, + 23025 - 19968: jis0212<<14 | 0x18<<7 | 0x27, + 23026 - 19968: jis0212<<14 | 0x18<<7 | 0x28, + 23028 - 19968: jis0212<<14 | 0x18<<7 | 0x29, + 23030 - 19968: jis0208<<14 | 0x0F<<7 | 0x07, + 23031 - 19968: jis0212<<14 | 0x18<<7 | 0x2A, + 23035 - 19968: jis0208<<14 | 0x0F<<7 | 0x58, + 23039 - 19968: jis0208<<14 | 0x1A<<7 | 0x30, + 23040 - 19968: jis0212<<14 | 0x18<<7 | 0x2B, + 23041 - 19968: jis0208<<14 | 0x0F<<7 | 0x31, + 23043 - 19968: jis0208<<14 | 0x0F<<7 | 0x02, + 23044 - 19968: jis0212<<14 | 0x18<<7 | 0x2C, + 23049 - 19968: jis0208<<14 | 0x34<<7 | 0x11, + 23052 - 19968: jis0212<<14 | 0x18<<7 | 0x2D, + 23053 - 19968: jis0212<<14 | 0x18<<7 | 0x2E, + 23054 - 19968: jis0212<<14 | 0x18<<7 | 0x2F, + 23057 - 19968: jis0208<<14 | 0x34<<7 | 0x0F, + 23058 - 19968: jis0212<<14 | 0x18<<7 | 0x30, + 23059 - 19968: jis0212<<14 | 0x18<<7 | 0x31, + 23064 - 19968: jis0208<<14 | 0x2B<<7 | 0x1B, + 23066 - 19968: jis0208<<14 | 0x34<<7 | 0x12, + 23068 - 19968: jis0208<<14 | 0x34<<7 | 0x10, + 23070 - 19968: jis0212<<14 | 0x18<<7 | 0x32, + 23071 - 19968: jis0208<<14 | 0x34<<7 | 0x0E, + 23072 - 19968: jis0208<<14 | 0x1E<<7 | 0x10, + 23075 - 19968: jis0212<<14 | 0x18<<7 | 0x33, + 23076 - 19968: jis0212<<14 | 0x18<<7 | 0x34, + 23077 - 19968: jis0208<<14 | 0x34<<7 | 0x0D, + 23079 - 19968: jis0212<<14 | 0x18<<7 | 0x35, + 23080 - 19968: jis0212<<14 | 0x18<<7 | 0x36, + 23081 - 19968: jis0208<<14 | 0x29<<7 | 0x39, + 23082 - 19968: jis0212<<14 | 0x18<<7 | 0x37, + 23085 - 19968: jis0212<<14 | 0x18<<7 | 0x38, + 23087 - 19968: jis0208<<14 | 0x17<<7 | 0x43, + 23088 - 19968: jis0212<<14 | 0x18<<7 | 0x39, + 23093 - 19968: jis0208<<14 | 0x34<<7 | 0x16, + 23094 - 19968: jis0208<<14 | 0x34<<7 | 0x17, + 23100 - 19968: jis0208<<14 | 0x1D<<7 | 0x0A, + 23104 - 19968: jis0208<<14 | 0x34<<7 | 0x13, + 23105 - 19968: jis0208<<14 | 0x2E<<7 | 0x0B, + 23108 - 19968: jis0212<<14 | 0x18<<7 | 0x3A, + 23109 - 19968: jis0212<<14 | 0x18<<7 | 0x3B, + 23110 - 19968: jis0208<<14 | 0x26<<7 | 0x2B, + 23111 - 19968: jis0212<<14 | 0x18<<7 | 0x3C, + 23112 - 19968: jis0212<<14 | 0x18<<7 | 0x3D, + 23113 - 19968: jis0208<<14 | 0x34<<7 | 0x15, + 23116 - 19968: jis0212<<14 | 0x18<<7 | 0x3E, + 23120 - 19968: jis0212<<14 | 0x18<<7 | 0x3F, + 23125 - 19968: jis0212<<14 | 0x18<<7 | 0x40, + 23130 - 19968: jis0208<<14 | 0x19<<7 | 0x06, + 23134 - 19968: jis0212<<14 | 0x18<<7 | 0x41, + 23138 - 19968: jis0208<<14 | 0x34<<7 | 0x18, + 23139 - 19968: jis0212<<14 | 0x18<<7 | 0x42, + 23141 - 19968: jis0212<<14 | 0x18<<7 | 0x43, + 23142 - 19968: jis0208<<14 | 0x28<<7 | 0x37, + 23143 - 19968: jis0212<<14 | 0x18<<7 | 0x44, + 23146 - 19968: jis0208<<14 | 0x34<<7 | 0x19, + 23148 - 19968: jis0208<<14 | 0x34<<7 | 0x14, + 23149 - 19968: jis0212<<14 | 0x18<<7 | 0x45, + 23159 - 19968: jis0212<<14 | 0x18<<7 | 0x46, + 23162 - 19968: jis0212<<14 | 0x18<<7 | 0x47, + 23163 - 19968: jis0212<<14 | 0x18<<7 | 0x48, + 23166 - 19968: jis0212<<14 | 0x18<<7 | 0x49, + 23167 - 19968: jis0208<<14 | 0x2B<<7 | 0x1A, + 23179 - 19968: jis0212<<14 | 0x18<<7 | 0x4A, + 23184 - 19968: jis0212<<14 | 0x18<<7 | 0x4B, + 23186 - 19968: jis0208<<14 | 0x26<<7 | 0x3D, + 23187 - 19968: jis0212<<14 | 0x18<<7 | 0x4C, + 23190 - 19968: jis0212<<14 | 0x18<<7 | 0x4D, + 23193 - 19968: jis0212<<14 | 0x18<<7 | 0x4E, + 23194 - 19968: jis0208<<14 | 0x34<<7 | 0x1A, + 23195 - 19968: jis0208<<14 | 0x28<<7 | 0x11, + 23196 - 19968: jis0212<<14 | 0x18<<7 | 0x4F, + 23198 - 19968: jis0212<<14 | 0x18<<7 | 0x50, + 23199 - 19968: jis0212<<14 | 0x18<<7 | 0x51, + 23200 - 19968: jis0212<<14 | 0x18<<7 | 0x52, + 23202 - 19968: jis0212<<14 | 0x18<<7 | 0x53, + 23207 - 19968: jis0212<<14 | 0x18<<7 | 0x54, + 23212 - 19968: jis0212<<14 | 0x18<<7 | 0x55, + 23217 - 19968: jis0212<<14 | 0x18<<7 | 0x56, + 23218 - 19968: jis0212<<14 | 0x18<<7 | 0x57, + 23219 - 19968: jis0212<<14 | 0x18<<7 | 0x58, + 23221 - 19968: jis0212<<14 | 0x18<<7 | 0x59, + 23224 - 19968: jis0212<<14 | 0x18<<7 | 0x5A, + 23226 - 19968: jis0212<<14 | 0x18<<7 | 0x5B, + 23227 - 19968: jis0212<<14 | 0x18<<7 | 0x5C, + 23228 - 19968: jis0208<<14 | 0x34<<7 | 0x1B, + 23229 - 19968: jis0208<<14 | 0x34<<7 | 0x1F, + 23230 - 19968: jis0208<<14 | 0x34<<7 | 0x1C, + 23231 - 19968: jis0212<<14 | 0x18<<7 | 0x5D, + 23233 - 19968: jis0208<<14 | 0x11<<7 | 0x26, + 23234 - 19968: jis0208<<14 | 0x34<<7 | 0x1E, + 23236 - 19968: jis0212<<14 | 0x19<<7 | 0x00, + 23238 - 19968: jis0212<<14 | 0x19<<7 | 0x01, + 23240 - 19968: jis0212<<14 | 0x19<<7 | 0x02, + 23241 - 19968: jis0208<<14 | 0x1B<<7 | 0x1A, + 23243 - 19968: jis0208<<14 | 0x34<<7 | 0x1D, + 23244 - 19968: jis0208<<14 | 0x16<<7 | 0x58, + 23247 - 19968: jis0212<<14 | 0x19<<7 | 0x03, + 23248 - 19968: jis0208<<14 | 0x34<<7 | 0x2B, + 23254 - 19968: jis0208<<14 | 0x34<<7 | 0x24, + 23255 - 19968: jis0208<<14 | 0x34<<7 | 0x21, + 23258 - 19968: jis0212<<14 | 0x19<<7 | 0x04, + 23260 - 19968: jis0212<<14 | 0x19<<7 | 0x05, + 23264 - 19968: jis0212<<14 | 0x19<<7 | 0x06, + 23265 - 19968: jis0208<<14 | 0x22<<7 | 0x43, + 23267 - 19968: jis0208<<14 | 0x34<<7 | 0x20, + 23269 - 19968: jis0212<<14 | 0x19<<7 | 0x07, + 23270 - 19968: jis0208<<14 | 0x34<<7 | 0x22, + 23273 - 19968: jis0208<<14 | 0x34<<7 | 0x23, + 23274 - 19968: jis0212<<14 | 0x19<<7 | 0x08, + 23278 - 19968: jis0212<<14 | 0x19<<7 | 0x09, + 23285 - 19968: jis0212<<14 | 0x19<<7 | 0x0A, + 23286 - 19968: jis0212<<14 | 0x19<<7 | 0x0B, + 23290 - 19968: jis0208<<14 | 0x34<<7 | 0x25, + 23291 - 19968: jis0208<<14 | 0x34<<7 | 0x26, + 23293 - 19968: jis0212<<14 | 0x19<<7 | 0x0C, + 23296 - 19968: jis0212<<14 | 0x19<<7 | 0x0D, + 23297 - 19968: jis0212<<14 | 0x19<<7 | 0x0E, + 23304 - 19968: jis0212<<14 | 0x19<<7 | 0x0F, + 23305 - 19968: jis0208<<14 | 0x13<<7 | 0x51, + 23307 - 19968: jis0208<<14 | 0x34<<7 | 0x28, + 23308 - 19968: jis0208<<14 | 0x34<<7 | 0x27, + 23318 - 19968: jis0208<<14 | 0x34<<7 | 0x29, + 23319 - 19968: jis0212<<14 | 0x19<<7 | 0x10, + 23321 - 19968: jis0212<<14 | 0x19<<7 | 0x12, + 23323 - 19968: jis0212<<14 | 0x19<<7 | 0x13, + 23325 - 19968: jis0212<<14 | 0x19<<7 | 0x14, + 23329 - 19968: jis0212<<14 | 0x19<<7 | 0x15, + 23330 - 19968: jis0208<<14 | 0x1D<<7 | 0x4D, + 23333 - 19968: jis0212<<14 | 0x19<<7 | 0x16, + 23338 - 19968: jis0208<<14 | 0x34<<7 | 0x2C, + 23340 - 19968: jis0208<<14 | 0x23<<7 | 0x3B, + 23341 - 19968: jis0212<<14 | 0x19<<7 | 0x17, + 23344 - 19968: jis0208<<14 | 0x10<<7 | 0x24, + 23346 - 19968: jis0208<<14 | 0x34<<7 | 0x2A, + 23348 - 19968: jis0212<<14 | 0x19<<7 | 0x11, + 23350 - 19968: jis0208<<14 | 0x34<<7 | 0x2D, + 23352 - 19968: jis0212<<14 | 0x19<<7 | 0x18, + 23358 - 19968: jis0208<<14 | 0x34<<7 | 0x2E, + 23360 - 19968: jis0208<<14 | 0x34<<7 | 0x31, + 23361 - 19968: jis0212<<14 | 0x19<<7 | 0x19, + 23363 - 19968: jis0208<<14 | 0x34<<7 | 0x2F, + 23365 - 19968: jis0208<<14 | 0x34<<7 | 0x30, + 23371 - 19968: jis0212<<14 | 0x19<<7 | 0x1A, + 23372 - 19968: jis0212<<14 | 0x19<<7 | 0x1B, + 23376 - 19968: jis0208<<14 | 0x1A<<7 | 0x31, + 23377 - 19968: jis0208<<14 | 0x34<<7 | 0x32, + 23378 - 19968: jis0212<<14 | 0x19<<7 | 0x1C, + 23380 - 19968: jis0208<<14 | 0x18<<7 | 0x05, + 23381 - 19968: jis0208<<14 | 0x34<<7 | 0x33, + 23382 - 19968: jis0208<<14 | 0x58<<7 | 0x49, + 23383 - 19968: jis0208<<14 | 0x1A<<7 | 0x59, + 23384 - 19968: jis0208<<14 | 0x21<<7 | 0x17, + 23386 - 19968: jis0208<<14 | 0x34<<7 | 0x34, + 23387 - 19968: jis0208<<14 | 0x34<<7 | 0x35, + 23388 - 19968: jis0208<<14 | 0x1A<<7 | 0x39, + 23389 - 19968: jis0208<<14 | 0x18<<7 | 0x06, + 23390 - 19968: jis0212<<14 | 0x19<<7 | 0x1E, + 23391 - 19968: jis0208<<14 | 0x2B<<7 | 0x31, + 23395 - 19968: jis0208<<14 | 0x14<<7 | 0x07, + 23396 - 19968: jis0208<<14 | 0x17<<7 | 0x28, + 23397 - 19968: jis0208<<14 | 0x34<<7 | 0x36, + 23398 - 19968: jis0208<<14 | 0x12<<7 | 0x37, + 23400 - 19968: jis0212<<14 | 0x19<<7 | 0x1F, + 23401 - 19968: jis0208<<14 | 0x34<<7 | 0x37, + 23403 - 19968: jis0208<<14 | 0x21<<7 | 0x18, + 23406 - 19968: jis0212<<14 | 0x19<<7 | 0x20, + 23407 - 19968: jis0212<<14 | 0x19<<7 | 0x21, + 23408 - 19968: jis0208<<14 | 0x34<<7 | 0x38, + 23409 - 19968: jis0208<<14 | 0x35<<7 | 0x02, + 23411 - 19968: jis0208<<14 | 0x34<<7 | 0x39, + 23413 - 19968: jis0208<<14 | 0x34<<7 | 0x3A, + 23416 - 19968: jis0208<<14 | 0x34<<7 | 0x3B, + 23418 - 19968: jis0208<<14 | 0x34<<7 | 0x3D, + 23420 - 19968: jis0212<<14 | 0x19<<7 | 0x22, + 23421 - 19968: jis0212<<14 | 0x19<<7 | 0x23, + 23422 - 19968: jis0212<<14 | 0x19<<7 | 0x24, + 23423 - 19968: jis0212<<14 | 0x19<<7 | 0x25, + 23424 - 19968: jis0208<<14 | 0x34<<7 | 0x3E, + 23425 - 19968: jis0212<<14 | 0x19<<7 | 0x26, + 23427 - 19968: jis0208<<14 | 0x34<<7 | 0x3F, + 23428 - 19968: jis0212<<14 | 0x19<<7 | 0x27, + 23429 - 19968: jis0208<<14 | 0x21<<7 | 0x4F, + 23430 - 19968: jis0212<<14 | 0x19<<7 | 0x28, + 23431 - 19968: jis0208<<14 | 0x10<<7 | 0x06, + 23432 - 19968: jis0208<<14 | 0x1B<<7 | 0x48, + 23433 - 19968: jis0208<<14 | 0x0F<<7 | 0x21, + 23434 - 19968: jis0212<<14 | 0x19<<7 | 0x29, + 23435 - 19968: jis0208<<14 | 0x20<<7 | 0x36, + 23436 - 19968: jis0208<<14 | 0x13<<7 | 0x0F, + 23437 - 19968: jis0208<<14 | 0x1B<<7 | 0x14, + 23438 - 19968: jis0212<<14 | 0x19<<7 | 0x2A, + 23439 - 19968: jis0208<<14 | 0x18<<7 | 0x07, + 23440 - 19968: jis0212<<14 | 0x19<<7 | 0x2B, + 23441 - 19968: jis0212<<14 | 0x19<<7 | 0x2C, + 23443 - 19968: jis0212<<14 | 0x19<<7 | 0x2D, + 23444 - 19968: jis0212<<14 | 0x19<<7 | 0x2E, + 23445 - 19968: jis0208<<14 | 0x24<<7 | 0x45, + 23446 - 19968: jis0212<<14 | 0x19<<7 | 0x2F, + 23447 - 19968: jis0208<<14 | 0x1C<<7 | 0x00, + 23448 - 19968: jis0208<<14 | 0x13<<7 | 0x10, + 23449 - 19968: jis0208<<14 | 0x22<<7 | 0x47, + 23450 - 19968: jis0208<<14 | 0x23<<7 | 0x49, + 23451 - 19968: jis0208<<14 | 0x0F<<7 | 0x17, + 23452 - 19968: jis0208<<14 | 0x14<<7 | 0x18, + 23453 - 19968: jis0208<<14 | 0x29<<7 | 0x54, + 23455 - 19968: jis0208<<14 | 0x1B<<7 | 0x21, + 23458 - 19968: jis0208<<14 | 0x14<<7 | 0x31, + 23459 - 19968: jis0208<<14 | 0x1F<<7 | 0x4A, + 23460 - 19968: jis0208<<14 | 0x1B<<7 | 0x1B, + 23461 - 19968: jis0208<<14 | 0x2C<<7 | 0x07, + 23462 - 19968: jis0208<<14 | 0x34<<7 | 0x40, + 23464 - 19968: jis0212<<14 | 0x19<<7 | 0x30, + 23465 - 19968: jis0212<<14 | 0x19<<7 | 0x31, + 23468 - 19968: jis0212<<14 | 0x19<<7 | 0x32, + 23469 - 19968: jis0212<<14 | 0x19<<7 | 0x33, + 23470 - 19968: jis0208<<14 | 0x14<<7 | 0x3B, + 23471 - 19968: jis0212<<14 | 0x19<<7 | 0x34, + 23472 - 19968: jis0208<<14 | 0x19<<7 | 0x2A, + 23473 - 19968: jis0212<<14 | 0x19<<7 | 0x35, + 23474 - 19968: jis0212<<14 | 0x19<<7 | 0x36, + 23475 - 19968: jis0208<<14 | 0x12<<7 | 0x11, + 23476 - 19968: jis0208<<14 | 0x10<<7 | 0x42, + 23477 - 19968: jis0208<<14 | 0x1D<<7 | 0x0B, + 23478 - 19968: jis0208<<14 | 0x11<<7 | 0x27, + 23479 - 19968: jis0212<<14 | 0x19<<7 | 0x37, + 23480 - 19968: jis0208<<14 | 0x34<<7 | 0x41, + 23481 - 19968: jis0208<<14 | 0x2C<<7 | 0x25, + 23482 - 19968: jis0212<<14 | 0x19<<7 | 0x38, + 23484 - 19968: jis0212<<14 | 0x19<<7 | 0x39, + 23487 - 19968: jis0208<<14 | 0x1C<<7 | 0x28, + 23488 - 19968: jis0208<<14 | 0x58<<7 | 0x4A, + 23489 - 19968: jis0212<<14 | 0x19<<7 | 0x3B, + 23490 - 19968: jis0208<<14 | 0x1B<<7 | 0x43, + 23491 - 19968: jis0208<<14 | 0x34<<7 | 0x42, + 23492 - 19968: jis0208<<14 | 0x13<<7 | 0x52, + 23493 - 19968: jis0208<<14 | 0x25<<7 | 0x31, + 23494 - 19968: jis0208<<14 | 0x2B<<7 | 0x08, + 23495 - 19968: jis0208<<14 | 0x34<<7 | 0x43, + 23497 - 19968: jis0208<<14 | 0x34<<7 | 0x44, + 23500 - 19968: jis0208<<14 | 0x28<<7 | 0x38, + 23501 - 19968: jis0212<<14 | 0x19<<7 | 0x3C, + 23503 - 19968: jis0212<<14 | 0x19<<7 | 0x3D, + 23504 - 19968: jis0208<<14 | 0x34<<7 | 0x46, + 23506 - 19968: jis0208<<14 | 0x13<<7 | 0x07, + 23507 - 19968: jis0208<<14 | 0x15<<7 | 0x56, + 23508 - 19968: jis0208<<14 | 0x34<<7 | 0x45, + 23510 - 19968: jis0212<<14 | 0x19<<7 | 0x3E, + 23511 - 19968: jis0212<<14 | 0x19<<7 | 0x3F, + 23512 - 19968: jis0208<<14 | 0x58<<7 | 0x4C, + 23513 - 19968: jis0212<<14 | 0x19<<7 | 0x41, + 23514 - 19968: jis0212<<14 | 0x19<<7 | 0x42, + 23515 - 19968: jis0208<<14 | 0x13<<7 | 0x11, + 23517 - 19968: jis0208<<14 | 0x1E<<7 | 0x11, + 23518 - 19968: jis0208<<14 | 0x34<<7 | 0x4A, + 23519 - 19968: jis0208<<14 | 0x1A<<7 | 0x00, + 23520 - 19968: jis0212<<14 | 0x19<<7 | 0x43, + 23521 - 19968: jis0208<<14 | 0x11<<7 | 0x28, + 23522 - 19968: jis0208<<14 | 0x34<<7 | 0x49, + 23524 - 19968: jis0208<<14 | 0x34<<7 | 0x47, + 23525 - 19968: jis0208<<14 | 0x34<<7 | 0x4B, + 23526 - 19968: jis0208<<14 | 0x34<<7 | 0x48, + 23527 - 19968: jis0208<<14 | 0x26<<7 | 0x0A, + 23528 - 19968: jis0208<<14 | 0x3B<<7 | 0x2C, + 23529 - 19968: jis0208<<14 | 0x1E<<7 | 0x12, + 23531 - 19968: jis0208<<14 | 0x34<<7 | 0x4C, + 23532 - 19968: jis0208<<14 | 0x58<<7 | 0x4D, + 23534 - 19968: jis0208<<14 | 0x2D<<7 | 0x1F, + 23535 - 19968: jis0212<<14 | 0x19<<7 | 0x44, + 23536 - 19968: jis0208<<14 | 0x34<<7 | 0x4D, + 23537 - 19968: jis0212<<14 | 0x19<<7 | 0x45, + 23539 - 19968: jis0208<<14 | 0x34<<7 | 0x4F, + 23540 - 19968: jis0212<<14 | 0x19<<7 | 0x46, + 23541 - 19968: jis0208<<14 | 0x22<<7 | 0x5D, + 23542 - 19968: jis0208<<14 | 0x34<<7 | 0x4E, + 23544 - 19968: jis0208<<14 | 0x1F<<7 | 0x02, + 23546 - 19968: jis0208<<14 | 0x1A<<7 | 0x5A, + 23549 - 19968: jis0212<<14 | 0x19<<7 | 0x47, + 23550 - 19968: jis0208<<14 | 0x21<<7 | 0x2F, + 23551 - 19968: jis0208<<14 | 0x1B<<7 | 0x56, + 23553 - 19968: jis0208<<14 | 0x28<<7 | 0x54, + 23554 - 19968: jis0208<<14 | 0x1F<<7 | 0x4B, + 23556 - 19968: jis0208<<14 | 0x1B<<7 | 0x2C, + 23557 - 19968: jis0208<<14 | 0x34<<7 | 0x50, + 23558 - 19968: jis0208<<14 | 0x1D<<7 | 0x0C, + 23559 - 19968: jis0208<<14 | 0x34<<7 | 0x51, + 23560 - 19968: jis0208<<14 | 0x34<<7 | 0x52, + 23561 - 19968: jis0208<<14 | 0x0F<<7 | 0x32, + 23562 - 19968: jis0208<<14 | 0x21<<7 | 0x19, + 23563 - 19968: jis0208<<14 | 0x1E<<7 | 0x31, + 23564 - 19968: jis0212<<14 | 0x19<<7 | 0x48, + 23565 - 19968: jis0208<<14 | 0x34<<7 | 0x53, + 23566 - 19968: jis0208<<14 | 0x25<<7 | 0x12, + 23567 - 19968: jis0208<<14 | 0x1D<<7 | 0x0D, + 23569 - 19968: jis0208<<14 | 0x1D<<7 | 0x0E, + 23571 - 19968: jis0208<<14 | 0x34<<7 | 0x54, + 23574 - 19968: jis0208<<14 | 0x1F<<7 | 0x4C, + 23575 - 19968: jis0212<<14 | 0x19<<7 | 0x49, + 23578 - 19968: jis0208<<14 | 0x1D<<7 | 0x0F, + 23582 - 19968: jis0208<<14 | 0x58<<7 | 0x4E, + 23583 - 19968: jis0212<<14 | 0x19<<7 | 0x4B, + 23584 - 19968: jis0208<<14 | 0x34<<7 | 0x55, + 23586 - 19968: jis0208<<14 | 0x34<<7 | 0x56, + 23587 - 19968: jis0212<<14 | 0x19<<7 | 0x4C, + 23588 - 19968: jis0208<<14 | 0x2B<<7 | 0x3F, + 23590 - 19968: jis0212<<14 | 0x19<<7 | 0x4D, + 23592 - 19968: jis0208<<14 | 0x34<<7 | 0x57, + 23593 - 19968: jis0212<<14 | 0x19<<7 | 0x4E, + 23595 - 19968: jis0212<<14 | 0x19<<7 | 0x4F, + 23596 - 19968: jis0212<<14 | 0x19<<7 | 0x50, + 23597 - 19968: jis0208<<14 | 0x15<<7 | 0x25, + 23598 - 19968: jis0212<<14 | 0x19<<7 | 0x51, + 23600 - 19968: jis0212<<14 | 0x19<<7 | 0x52, + 23601 - 19968: jis0208<<14 | 0x1C<<7 | 0x01, + 23602 - 19968: jis0212<<14 | 0x19<<7 | 0x53, + 23605 - 19968: jis0212<<14 | 0x19<<7 | 0x54, + 23606 - 19968: jis0212<<14 | 0x19<<7 | 0x55, + 23608 - 19968: jis0208<<14 | 0x34<<7 | 0x58, + 23609 - 19968: jis0208<<14 | 0x34<<7 | 0x59, + 23610 - 19968: jis0208<<14 | 0x1B<<7 | 0x3B, + 23611 - 19968: jis0208<<14 | 0x1E<<7 | 0x0B, + 23612 - 19968: jis0208<<14 | 0x25<<7 | 0x53, + 23613 - 19968: jis0208<<14 | 0x1E<<7 | 0x33, + 23614 - 19968: jis0208<<14 | 0x27<<7 | 0x57, + 23615 - 19968: jis0208<<14 | 0x26<<7 | 0x01, + 23616 - 19968: jis0208<<14 | 0x15<<7 | 0x28, + 23617 - 19968: jis0208<<14 | 0x34<<7 | 0x5A, + 23621 - 19968: jis0208<<14 | 0x14<<7 | 0x4E, + 23622 - 19968: jis0208<<14 | 0x34<<7 | 0x5B, + 23624 - 19968: jis0208<<14 | 0x15<<7 | 0x5D, + 23626 - 19968: jis0208<<14 | 0x25<<7 | 0x2E, + 23627 - 19968: jis0208<<14 | 0x11<<7 | 0x0F, + 23629 - 19968: jis0208<<14 | 0x1A<<7 | 0x32, + 23630 - 19968: jis0208<<14 | 0x34<<7 | 0x5C, + 23631 - 19968: jis0208<<14 | 0x35<<7 | 0x01, + 23632 - 19968: jis0208<<14 | 0x35<<7 | 0x00, + 23633 - 19968: jis0208<<14 | 0x15<<7 | 0x5C, + 23635 - 19968: jis0208<<14 | 0x34<<7 | 0x5D, + 23637 - 19968: jis0208<<14 | 0x24<<7 | 0x17, + 23641 - 19968: jis0212<<14 | 0x19<<7 | 0x56, + 23642 - 19968: jis0212<<14 | 0x19<<7 | 0x57, + 23644 - 19968: jis0212<<14 | 0x19<<7 | 0x58, + 23646 - 19968: jis0208<<14 | 0x21<<7 | 0x0F, + 23648 - 19968: jis0208<<14 | 0x24<<7 | 0x2A, + 23649 - 19968: jis0208<<14 | 0x1B<<7 | 0x27, + 23650 - 19968: jis0212<<14 | 0x19<<7 | 0x59, + 23651 - 19968: jis0212<<14 | 0x19<<7 | 0x5A, + 23652 - 19968: jis0208<<14 | 0x20<<7 | 0x37, + 23653 - 19968: jis0208<<14 | 0x2C<<7 | 0x59, + 23655 - 19968: jis0212<<14 | 0x19<<7 | 0x5B, + 23656 - 19968: jis0212<<14 | 0x19<<7 | 0x5C, + 23657 - 19968: jis0212<<14 | 0x19<<7 | 0x5D, + 23660 - 19968: jis0208<<14 | 0x35<<7 | 0x03, + 23661 - 19968: jis0212<<14 | 0x1A<<7 | 0x00, + 23662 - 19968: jis0208<<14 | 0x35<<7 | 0x04, + 23663 - 19968: jis0208<<14 | 0x25<<7 | 0x35, + 23664 - 19968: jis0212<<14 | 0x1A<<7 | 0x01, + 23665 - 19968: jis0208<<14 | 0x1A<<7 | 0x12, + 23668 - 19968: jis0212<<14 | 0x1A<<7 | 0x02, + 23669 - 19968: jis0212<<14 | 0x1A<<7 | 0x03, + 23670 - 19968: jis0208<<14 | 0x35<<7 | 0x06, + 23673 - 19968: jis0208<<14 | 0x35<<7 | 0x07, + 23674 - 19968: jis0212<<14 | 0x1A<<7 | 0x04, + 23675 - 19968: jis0212<<14 | 0x1A<<7 | 0x05, + 23676 - 19968: jis0212<<14 | 0x1A<<7 | 0x06, + 23677 - 19968: jis0212<<14 | 0x1A<<7 | 0x07, + 23687 - 19968: jis0212<<14 | 0x1A<<7 | 0x08, + 23688 - 19968: jis0212<<14 | 0x1A<<7 | 0x09, + 23690 - 19968: jis0212<<14 | 0x1A<<7 | 0x0A, + 23692 - 19968: jis0208<<14 | 0x35<<7 | 0x08, + 23695 - 19968: jis0212<<14 | 0x1A<<7 | 0x0B, + 23696 - 19968: jis0208<<14 | 0x13<<7 | 0x53, + 23697 - 19968: jis0208<<14 | 0x35<<7 | 0x09, + 23698 - 19968: jis0212<<14 | 0x1A<<7 | 0x0C, + 23700 - 19968: jis0208<<14 | 0x35<<7 | 0x0A, + 23709 - 19968: jis0212<<14 | 0x1A<<7 | 0x0D, + 23711 - 19968: jis0212<<14 | 0x1A<<7 | 0x0E, + 23712 - 19968: jis0212<<14 | 0x1A<<7 | 0x0F, + 23713 - 19968: jis0208<<14 | 0x11<<7 | 0x0B, + 23714 - 19968: jis0212<<14 | 0x1A<<7 | 0x10, + 23715 - 19968: jis0212<<14 | 0x1A<<7 | 0x11, + 23718 - 19968: jis0208<<14 | 0x58<<7 | 0x4F, + 23720 - 19968: jis0208<<14 | 0x20<<7 | 0x1A, + 23721 - 19968: jis0208<<14 | 0x13<<7 | 0x43, + 23722 - 19968: jis0212<<14 | 0x1A<<7 | 0x13, + 23723 - 19968: jis0208<<14 | 0x35<<7 | 0x0C, + 23724 - 19968: jis0208<<14 | 0x2B<<7 | 0x07, + 23729 - 19968: jis0208<<14 | 0x21<<7 | 0x31, + 23730 - 19968: jis0212<<14 | 0x1A<<7 | 0x14, + 23731 - 19968: jis0208<<14 | 0x12<<7 | 0x38, + 23732 - 19968: jis0212<<14 | 0x1A<<7 | 0x15, + 23733 - 19968: jis0212<<14 | 0x1A<<7 | 0x16, + 23734 - 19968: jis0208<<14 | 0x35<<7 | 0x0E, + 23735 - 19968: jis0208<<14 | 0x35<<7 | 0x10, + 23736 - 19968: jis0208<<14 | 0x13<<7 | 0x3E, + 23738 - 19968: jis0208<<14 | 0x58<<7 | 0x50, + 23739 - 19968: jis0208<<14 | 0x35<<7 | 0x0D, + 23740 - 19968: jis0208<<14 | 0x35<<7 | 0x0F, + 23742 - 19968: jis0208<<14 | 0x35<<7 | 0x12, + 23749 - 19968: jis0208<<14 | 0x35<<7 | 0x11, + 23751 - 19968: jis0208<<14 | 0x35<<7 | 0x13, + 23753 - 19968: jis0212<<14 | 0x1A<<7 | 0x18, + 23755 - 19968: jis0212<<14 | 0x1A<<7 | 0x19, + 23762 - 19968: jis0212<<14 | 0x1A<<7 | 0x1A, + 23767 - 19968: jis0212<<14 | 0x1A<<7 | 0x1C, + 23769 - 19968: jis0208<<14 | 0x35<<7 | 0x14, + 23773 - 19968: jis0212<<14 | 0x1A<<7 | 0x1B, + 23776 - 19968: jis0208<<14 | 0x25<<7 | 0x1C, + 23777 - 19968: jis0208<<14 | 0x15<<7 | 0x0D, + 23784 - 19968: jis0208<<14 | 0x11<<7 | 0x44, + 23785 - 19968: jis0208<<14 | 0x35<<7 | 0x15, + 23786 - 19968: jis0208<<14 | 0x35<<7 | 0x1A, + 23789 - 19968: jis0208<<14 | 0x35<<7 | 0x18, + 23790 - 19968: jis0212<<14 | 0x1A<<7 | 0x1D, + 23791 - 19968: jis0208<<14 | 0x29<<7 | 0x56, + 23792 - 19968: jis0208<<14 | 0x29<<7 | 0x55, + 23793 - 19968: jis0212<<14 | 0x1A<<7 | 0x1E, + 23794 - 19968: jis0212<<14 | 0x1A<<7 | 0x1F, + 23796 - 19968: jis0212<<14 | 0x1A<<7 | 0x20, + 23797 - 19968: jis0208<<14 | 0x58<<7 | 0x51, + 23798 - 19968: jis0208<<14 | 0x24<<7 | 0x46, + 23802 - 19968: jis0208<<14 | 0x35<<7 | 0x17, + 23803 - 19968: jis0208<<14 | 0x1C<<7 | 0x33, + 23805 - 19968: jis0208<<14 | 0x35<<7 | 0x16, + 23809 - 19968: jis0212<<14 | 0x1A<<7 | 0x21, + 23814 - 19968: jis0212<<14 | 0x1A<<7 | 0x22, + 23815 - 19968: jis0208<<14 | 0x1E<<7 | 0x51, + 23819 - 19968: jis0208<<14 | 0x35<<7 | 0x1B, + 23821 - 19968: jis0212<<14 | 0x1A<<7 | 0x23, + 23822 - 19968: jis0208<<14 | 0x19<<7 | 0x49, + 23825 - 19968: jis0208<<14 | 0x35<<7 | 0x21, + 23826 - 19968: jis0212<<14 | 0x1A<<7 | 0x24, + 23828 - 19968: jis0208<<14 | 0x35<<7 | 0x22, + 23829 - 19968: jis0208<<14 | 0x35<<7 | 0x1C, + 23830 - 19968: jis0208<<14 | 0x12<<7 | 0x12, + 23831 - 19968: jis0208<<14 | 0x35<<7 | 0x1D, + 23832 - 19968: jis0208<<14 | 0x35<<7 | 0x26, + 23833 - 19968: jis0208<<14 | 0x35<<7 | 0x25, + 23834 - 19968: jis0208<<14 | 0x35<<7 | 0x24, + 23835 - 19968: jis0208<<14 | 0x35<<7 | 0x20, + 23839 - 19968: jis0208<<14 | 0x35<<7 | 0x1F, + 23842 - 19968: jis0208<<14 | 0x35<<7 | 0x23, + 23843 - 19968: jis0212<<14 | 0x1A<<7 | 0x26, + 23844 - 19968: jis0212<<14 | 0x1A<<7 | 0x27, + 23846 - 19968: jis0212<<14 | 0x1A<<7 | 0x28, + 23847 - 19968: jis0208<<14 | 0x58<<7 | 0x52, + 23849 - 19968: jis0208<<14 | 0x29<<7 | 0x57, + 23851 - 19968: jis0212<<14 | 0x1A<<7 | 0x25, + 23857 - 19968: jis0212<<14 | 0x1A<<7 | 0x2A, + 23860 - 19968: jis0212<<14 | 0x1A<<7 | 0x2B, + 23865 - 19968: jis0212<<14 | 0x1A<<7 | 0x2C, + 23869 - 19968: jis0212<<14 | 0x1A<<7 | 0x2D, + 23871 - 19968: jis0212<<14 | 0x1A<<7 | 0x2E, + 23874 - 19968: jis0208<<14 | 0x58<<7 | 0x55, + 23875 - 19968: jis0212<<14 | 0x1A<<7 | 0x30, + 23878 - 19968: jis0212<<14 | 0x1A<<7 | 0x31, + 23880 - 19968: jis0212<<14 | 0x1A<<7 | 0x32, + 23882 - 19968: jis0212<<14 | 0x1A<<7 | 0x36, + 23883 - 19968: jis0208<<14 | 0x35<<7 | 0x2A, + 23884 - 19968: jis0208<<14 | 0x35<<7 | 0x27, + 23886 - 19968: jis0208<<14 | 0x35<<7 | 0x29, + 23888 - 19968: jis0208<<14 | 0x2C<<7 | 0x51, + 23889 - 19968: jis0212<<14 | 0x1A<<7 | 0x34, + 23890 - 19968: jis0208<<14 | 0x35<<7 | 0x28, + 23891 - 19968: jis0208<<14 | 0x58<<7 | 0x53, + 23893 - 19968: jis0212<<14 | 0x1A<<7 | 0x33, + 23897 - 19968: jis0212<<14 | 0x1A<<7 | 0x35, + 23900 - 19968: jis0208<<14 | 0x35<<7 | 0x1E, + 23903 - 19968: jis0212<<14 | 0x1A<<7 | 0x37, + 23904 - 19968: jis0212<<14 | 0x1A<<7 | 0x38, + 23905 - 19968: jis0212<<14 | 0x1A<<7 | 0x39, + 23906 - 19968: jis0212<<14 | 0x1A<<7 | 0x3A, + 23908 - 19968: jis0212<<14 | 0x1A<<7 | 0x3B, + 23913 - 19968: jis0208<<14 | 0x1E<<7 | 0x52, + 23914 - 19968: jis0212<<14 | 0x1A<<7 | 0x3C, + 23916 - 19968: jis0208<<14 | 0x35<<7 | 0x2B, + 23917 - 19968: jis0208<<14 | 0x58<<7 | 0x56, + 23919 - 19968: jis0208<<14 | 0x19<<7 | 0x16, + 23920 - 19968: jis0212<<14 | 0x1A<<7 | 0x3E, + 23923 - 19968: jis0208<<14 | 0x35<<7 | 0x2C, + 23926 - 19968: jis0208<<14 | 0x35<<7 | 0x2D, + 23929 - 19968: jis0212<<14 | 0x1A<<7 | 0x3F, + 23930 - 19968: jis0212<<14 | 0x1A<<7 | 0x40, + 23934 - 19968: jis0212<<14 | 0x1A<<7 | 0x41, + 23935 - 19968: jis0212<<14 | 0x1A<<7 | 0x42, + 23937 - 19968: jis0212<<14 | 0x1A<<7 | 0x43, + 23938 - 19968: jis0208<<14 | 0x35<<7 | 0x30, + 23939 - 19968: jis0212<<14 | 0x1A<<7 | 0x44, + 23940 - 19968: jis0208<<14 | 0x35<<7 | 0x2F, + 23943 - 19968: jis0208<<14 | 0x35<<7 | 0x2E, + 23944 - 19968: jis0212<<14 | 0x1A<<7 | 0x45, + 23946 - 19968: jis0212<<14 | 0x1A<<7 | 0x46, + 23947 - 19968: jis0208<<14 | 0x24<<7 | 0x47, + 23948 - 19968: jis0208<<14 | 0x35<<7 | 0x19, + 23952 - 19968: jis0208<<14 | 0x35<<7 | 0x36, + 23954 - 19968: jis0212<<14 | 0x1A<<7 | 0x47, + 23955 - 19968: jis0212<<14 | 0x1A<<7 | 0x48, + 23956 - 19968: jis0212<<14 | 0x1A<<7 | 0x49, + 23957 - 19968: jis0212<<14 | 0x1A<<7 | 0x4A, + 23961 - 19968: jis0212<<14 | 0x1A<<7 | 0x4B, + 23963 - 19968: jis0212<<14 | 0x1A<<7 | 0x4C, + 23965 - 19968: jis0208<<14 | 0x35<<7 | 0x32, + 23967 - 19968: jis0212<<14 | 0x1A<<7 | 0x4D, + 23968 - 19968: jis0212<<14 | 0x1A<<7 | 0x4E, + 23970 - 19968: jis0208<<14 | 0x35<<7 | 0x31, + 23975 - 19968: jis0212<<14 | 0x1A<<7 | 0x4F, + 23979 - 19968: jis0212<<14 | 0x1A<<7 | 0x50, + 23980 - 19968: jis0208<<14 | 0x35<<7 | 0x33, + 23982 - 19968: jis0208<<14 | 0x35<<7 | 0x34, + 23984 - 19968: jis0212<<14 | 0x1A<<7 | 0x51, + 23986 - 19968: jis0212<<14 | 0x45<<7 | 0x53, + 23988 - 19968: jis0212<<14 | 0x1A<<7 | 0x52, + 23991 - 19968: jis0208<<14 | 0x35<<7 | 0x37, + 23992 - 19968: jis0208<<14 | 0x58<<7 | 0x57, + 23993 - 19968: jis0208<<14 | 0x58<<7 | 0x58, + 23994 - 19968: jis0208<<14 | 0x2D<<7 | 0x45, + 23996 - 19968: jis0208<<14 | 0x35<<7 | 0x38, + 23997 - 19968: jis0208<<14 | 0x35<<7 | 0x35, + 24003 - 19968: jis0212<<14 | 0x1A<<7 | 0x55, + 24007 - 19968: jis0212<<14 | 0x1A<<7 | 0x56, + 24009 - 19968: jis0208<<14 | 0x35<<7 | 0x39, + 24011 - 19968: jis0212<<14 | 0x1A<<7 | 0x57, + 24012 - 19968: jis0208<<14 | 0x13<<7 | 0x3F, + 24013 - 19968: jis0208<<14 | 0x35<<7 | 0x3A, + 24014 - 19968: jis0212<<14 | 0x1A<<7 | 0x59, + 24016 - 19968: jis0208<<14 | 0x58<<7 | 0x59, + 24018 - 19968: jis0208<<14 | 0x35<<7 | 0x3C, + 24019 - 19968: jis0208<<14 | 0x35<<7 | 0x3B, + 24022 - 19968: jis0208<<14 | 0x35<<7 | 0x3D, + 24024 - 19968: jis0212<<14 | 0x1A<<7 | 0x5A, + 24025 - 19968: jis0212<<14 | 0x1A<<7 | 0x5B, + 24027 - 19968: jis0208<<14 | 0x35<<7 | 0x3E, + 24029 - 19968: jis0208<<14 | 0x1F<<7 | 0x4D, + 24030 - 19968: jis0208<<14 | 0x1C<<7 | 0x02, + 24032 - 19968: jis0212<<14 | 0x1A<<7 | 0x5C, + 24033 - 19968: jis0208<<14 | 0x1C<<7 | 0x43, + 24035 - 19968: jis0208<<14 | 0x20<<7 | 0x42, + 24036 - 19968: jis0212<<14 | 0x1A<<7 | 0x5D, + 24037 - 19968: jis0208<<14 | 0x18<<7 | 0x08, + 24038 - 19968: jis0208<<14 | 0x19<<7 | 0x17, + 24039 - 19968: jis0208<<14 | 0x18<<7 | 0x09, + 24040 - 19968: jis0208<<14 | 0x14<<7 | 0x4F, + 24041 - 19968: jis0212<<14 | 0x1B<<7 | 0x00, + 24043 - 19968: jis0208<<14 | 0x35<<7 | 0x3F, + 24046 - 19968: jis0208<<14 | 0x19<<7 | 0x18, + 24049 - 19968: jis0208<<14 | 0x17<<7 | 0x29, + 24050 - 19968: jis0208<<14 | 0x35<<7 | 0x40, + 24051 - 19968: jis0208<<14 | 0x2B<<7 | 0x05, + 24052 - 19968: jis0208<<14 | 0x26<<7 | 0x22, + 24053 - 19968: jis0208<<14 | 0x35<<7 | 0x41, + 24055 - 19968: jis0208<<14 | 0x18<<7 | 0x0A, + 24056 - 19968: jis0212<<14 | 0x1B<<7 | 0x01, + 24057 - 19968: jis0212<<14 | 0x1B<<7 | 0x02, + 24059 - 19968: jis0208<<14 | 0x13<<7 | 0x0B, + 24061 - 19968: jis0208<<14 | 0x22<<7 | 0x06, + 24062 - 19968: jis0208<<14 | 0x15<<7 | 0x31, + 24064 - 19968: jis0212<<14 | 0x1B<<7 | 0x03, + 24066 - 19968: jis0208<<14 | 0x1A<<7 | 0x33, + 24067 - 19968: jis0208<<14 | 0x28<<7 | 0x3A, + 24070 - 19968: jis0208<<14 | 0x27<<7 | 0x20, + 24071 - 19968: jis0212<<14 | 0x1B<<7 | 0x04, + 24075 - 19968: jis0208<<14 | 0x35<<7 | 0x42, + 24076 - 19968: jis0208<<14 | 0x13<<7 | 0x54, + 24077 - 19968: jis0212<<14 | 0x1B<<7 | 0x05, + 24081 - 19968: jis0208<<14 | 0x35<<7 | 0x45, + 24082 - 19968: jis0212<<14 | 0x1B<<7 | 0x06, + 24084 - 19968: jis0212<<14 | 0x1B<<7 | 0x07, + 24085 - 19968: jis0212<<14 | 0x1B<<7 | 0x08, + 24086 - 19968: jis0208<<14 | 0x23<<7 | 0x00, + 24088 - 19968: jis0212<<14 | 0x1B<<7 | 0x09, + 24089 - 19968: jis0208<<14 | 0x35<<7 | 0x44, + 24090 - 19968: jis0208<<14 | 0x35<<7 | 0x43, + 24091 - 19968: jis0208<<14 | 0x35<<7 | 0x46, + 24093 - 19968: jis0208<<14 | 0x23<<7 | 0x4A, + 24095 - 19968: jis0212<<14 | 0x1B<<7 | 0x0A, + 24096 - 19968: jis0212<<14 | 0x1B<<7 | 0x0B, + 24101 - 19968: jis0208<<14 | 0x1E<<7 | 0x42, + 24104 - 19968: jis0212<<14 | 0x1B<<7 | 0x0D, + 24107 - 19968: jis0208<<14 | 0x1A<<7 | 0x34, + 24109 - 19968: jis0208<<14 | 0x1F<<7 | 0x29, + 24110 - 19968: jis0212<<14 | 0x1B<<7 | 0x0C, + 24111 - 19968: jis0208<<14 | 0x21<<7 | 0x32, + 24112 - 19968: jis0208<<14 | 0x14<<7 | 0x01, + 24114 - 19968: jis0212<<14 | 0x1B<<7 | 0x0E, + 24115 - 19968: jis0208<<14 | 0x23<<7 | 0x01, + 24117 - 19968: jis0212<<14 | 0x1B<<7 | 0x0F, + 24118 - 19968: jis0208<<14 | 0x35<<7 | 0x47, + 24119 - 19968: jis0208<<14 | 0x35<<7 | 0x48, + 24120 - 19968: jis0208<<14 | 0x1D<<7 | 0x4E, + 24125 - 19968: jis0208<<14 | 0x2A<<7 | 0x18, + 24126 - 19968: jis0212<<14 | 0x1B<<7 | 0x10, + 24128 - 19968: jis0208<<14 | 0x35<<7 | 0x4B, + 24131 - 19968: jis0208<<14 | 0x35<<7 | 0x4A, + 24132 - 19968: jis0208<<14 | 0x35<<7 | 0x49, + 24133 - 19968: jis0208<<14 | 0x28<<7 | 0x5C, + 24135 - 19968: jis0208<<14 | 0x35<<7 | 0x52, + 24137 - 19968: jis0212<<14 | 0x1B<<7 | 0x13, + 24139 - 19968: jis0212<<14 | 0x1B<<7 | 0x11, + 24140 - 19968: jis0208<<14 | 0x2A<<7 | 0x39, + 24142 - 19968: jis0208<<14 | 0x35<<7 | 0x4C, + 24144 - 19968: jis0212<<14 | 0x1B<<7 | 0x12, + 24145 - 19968: jis0212<<14 | 0x1B<<7 | 0x14, + 24148 - 19968: jis0208<<14 | 0x35<<7 | 0x4E, + 24149 - 19968: jis0208<<14 | 0x2A<<7 | 0x4A, + 24150 - 19968: jis0212<<14 | 0x1B<<7 | 0x15, + 24151 - 19968: jis0208<<14 | 0x35<<7 | 0x4D, + 24152 - 19968: jis0212<<14 | 0x1B<<7 | 0x16, + 24155 - 19968: jis0212<<14 | 0x1B<<7 | 0x17, + 24156 - 19968: jis0212<<14 | 0x1B<<7 | 0x18, + 24158 - 19968: jis0212<<14 | 0x1B<<7 | 0x19, + 24159 - 19968: jis0208<<14 | 0x35<<7 | 0x4F, + 24161 - 19968: jis0208<<14 | 0x27<<7 | 0x07, + 24162 - 19968: jis0208<<14 | 0x35<<7 | 0x50, + 24163 - 19968: jis0208<<14 | 0x29<<7 | 0x1D, + 24164 - 19968: jis0208<<14 | 0x35<<7 | 0x51, + 24168 - 19968: jis0212<<14 | 0x1B<<7 | 0x1A, + 24170 - 19968: jis0212<<14 | 0x1B<<7 | 0x1B, + 24171 - 19968: jis0212<<14 | 0x1B<<7 | 0x1C, + 24172 - 19968: jis0212<<14 | 0x1B<<7 | 0x1D, + 24173 - 19968: jis0212<<14 | 0x1B<<7 | 0x1E, + 24174 - 19968: jis0212<<14 | 0x1B<<7 | 0x1F, + 24176 - 19968: jis0212<<14 | 0x1B<<7 | 0x20, + 24178 - 19968: jis0208<<14 | 0x13<<7 | 0x12, + 24179 - 19968: jis0208<<14 | 0x29<<7 | 0x1E, + 24180 - 19968: jis0208<<14 | 0x26<<7 | 0x0E, + 24181 - 19968: jis0208<<14 | 0x35<<7 | 0x53, + 24182 - 19968: jis0208<<14 | 0x35<<7 | 0x54, + 24184 - 19968: jis0208<<14 | 0x18<<7 | 0x0B, + 24185 - 19968: jis0208<<14 | 0x13<<7 | 0x13, + 24186 - 19968: jis0208<<14 | 0x35<<7 | 0x55, + 24187 - 19968: jis0208<<14 | 0x17<<7 | 0x17, + 24188 - 19968: jis0208<<14 | 0x2C<<7 | 0x23, + 24189 - 19968: jis0208<<14 | 0x2C<<7 | 0x08, + 24190 - 19968: jis0208<<14 | 0x13<<7 | 0x55, + 24191 - 19968: jis0208<<14 | 0x35<<7 | 0x57, + 24192 - 19968: jis0212<<14 | 0x1B<<7 | 0x21, + 24193 - 19968: jis0208<<14 | 0x23<<7 | 0x02, + 24195 - 19968: jis0208<<14 | 0x18<<7 | 0x0C, + 24196 - 19968: jis0208<<14 | 0x1D<<7 | 0x10, + 24199 - 19968: jis0208<<14 | 0x27<<7 | 0x3E, + 24202 - 19968: jis0208<<14 | 0x1D<<7 | 0x11, + 24203 - 19968: jis0212<<14 | 0x1B<<7 | 0x22, + 24206 - 19968: jis0212<<14 | 0x1B<<7 | 0x23, + 24207 - 19968: jis0208<<14 | 0x1C<<7 | 0x57, + 24213 - 19968: jis0208<<14 | 0x23<<7 | 0x4B, + 24214 - 19968: jis0208<<14 | 0x29<<7 | 0x58, + 24215 - 19968: jis0208<<14 | 0x24<<7 | 0x18, + 24218 - 19968: jis0208<<14 | 0x18<<7 | 0x0D, + 24220 - 19968: jis0208<<14 | 0x28<<7 | 0x3B, + 24224 - 19968: jis0208<<14 | 0x35<<7 | 0x58, + 24226 - 19968: jis0212<<14 | 0x1B<<7 | 0x24, + 24228 - 19968: jis0212<<14 | 0x1B<<7 | 0x25, + 24229 - 19968: jis0212<<14 | 0x1B<<7 | 0x26, + 24230 - 19968: jis0208<<14 | 0x24<<7 | 0x38, + 24231 - 19968: jis0208<<14 | 0x19<<7 | 0x21, + 24232 - 19968: jis0212<<14 | 0x1B<<7 | 0x27, + 24234 - 19968: jis0212<<14 | 0x1B<<7 | 0x28, + 24235 - 19968: jis0208<<14 | 0x17<<7 | 0x2A, + 24236 - 19968: jis0212<<14 | 0x1B<<7 | 0x29, + 24237 - 19968: jis0208<<14 | 0x23<<7 | 0x4C, + 24241 - 19968: jis0212<<14 | 0x1B<<7 | 0x2A, + 24243 - 19968: jis0212<<14 | 0x1B<<7 | 0x2B, + 24245 - 19968: jis0208<<14 | 0x0F<<7 | 0x22, + 24246 - 19968: jis0208<<14 | 0x1C<<7 | 0x4D, + 24247 - 19968: jis0208<<14 | 0x18<<7 | 0x0E, + 24248 - 19968: jis0208<<14 | 0x2C<<7 | 0x26, + 24253 - 19968: jis0212<<14 | 0x1B<<7 | 0x2C, + 24254 - 19968: jis0212<<14 | 0x1B<<7 | 0x2D, + 24255 - 19968: jis0212<<14 | 0x1B<<7 | 0x2E, + 24257 - 19968: jis0208<<14 | 0x35<<7 | 0x59, + 24258 - 19968: jis0208<<14 | 0x35<<7 | 0x5A, + 24259 - 19968: jis0208<<14 | 0x26<<7 | 0x30, + 24262 - 19968: jis0212<<14 | 0x1B<<7 | 0x2F, + 24264 - 19968: jis0208<<14 | 0x35<<7 | 0x5B, + 24265 - 19968: jis0208<<14 | 0x2D<<7 | 0x56, + 24266 - 19968: jis0208<<14 | 0x2E<<7 | 0x0C, + 24267 - 19968: jis0212<<14 | 0x1B<<7 | 0x31, + 24268 - 19968: jis0212<<14 | 0x1B<<7 | 0x30, + 24270 - 19968: jis0212<<14 | 0x1B<<7 | 0x32, + 24271 - 19968: jis0208<<14 | 0x35<<7 | 0x5D, + 24272 - 19968: jis0208<<14 | 0x35<<7 | 0x5C, + 24273 - 19968: jis0212<<14 | 0x1B<<7 | 0x33, + 24274 - 19968: jis0212<<14 | 0x1B<<7 | 0x34, + 24275 - 19968: jis0208<<14 | 0x12<<7 | 0x26, + 24276 - 19968: jis0212<<14 | 0x1B<<7 | 0x35, + 24277 - 19968: jis0212<<14 | 0x1B<<7 | 0x36, + 24278 - 19968: jis0208<<14 | 0x36<<7 | 0x00, + 24282 - 19968: jis0208<<14 | 0x36<<7 | 0x03, + 24283 - 19968: jis0208<<14 | 0x36<<7 | 0x04, + 24284 - 19968: jis0212<<14 | 0x1B<<7 | 0x37, + 24285 - 19968: jis0208<<14 | 0x36<<7 | 0x02, + 24286 - 19968: jis0212<<14 | 0x1B<<7 | 0x38, + 24287 - 19968: jis0208<<14 | 0x28<<7 | 0x1F, + 24288 - 19968: jis0208<<14 | 0x1D<<7 | 0x12, + 24289 - 19968: jis0208<<14 | 0x36<<7 | 0x06, + 24290 - 19968: jis0208<<14 | 0x36<<7 | 0x05, + 24291 - 19968: jis0208<<14 | 0x36<<7 | 0x01, + 24293 - 19968: jis0212<<14 | 0x1B<<7 | 0x39, + 24296 - 19968: jis0208<<14 | 0x36<<7 | 0x07, + 24297 - 19968: jis0208<<14 | 0x36<<7 | 0x08, + 24299 - 19968: jis0212<<14 | 0x1B<<7 | 0x3A, + 24300 - 19968: jis0208<<14 | 0x36<<7 | 0x09, + 24304 - 19968: jis0208<<14 | 0x36<<7 | 0x0C, + 24305 - 19968: jis0208<<14 | 0x36<<7 | 0x0A, + 24307 - 19968: jis0208<<14 | 0x36<<7 | 0x0B, + 24308 - 19968: jis0208<<14 | 0x36<<7 | 0x0D, + 24310 - 19968: jis0208<<14 | 0x10<<7 | 0x43, + 24311 - 19968: jis0208<<14 | 0x23<<7 | 0x4D, + 24312 - 19968: jis0208<<14 | 0x36<<7 | 0x0E, + 24314 - 19968: jis0208<<14 | 0x16<<7 | 0x59, + 24315 - 19968: jis0208<<14 | 0x11<<7 | 0x55, + 24316 - 19968: jis0208<<14 | 0x26<<7 | 0x15, + 24318 - 19968: jis0208<<14 | 0x36<<7 | 0x0F, + 24319 - 19968: jis0208<<14 | 0x25<<7 | 0x5A, + 24321 - 19968: jis0208<<14 | 0x29<<7 | 0x3A, + 24322 - 19968: jis0212<<14 | 0x1B<<7 | 0x3B, + 24323 - 19968: jis0208<<14 | 0x36<<7 | 0x10, + 24324 - 19968: jis0208<<14 | 0x2E<<7 | 0x0D, + 24326 - 19968: jis0212<<14 | 0x1B<<7 | 0x3C, + 24327 - 19968: jis0212<<14 | 0x1B<<7 | 0x3D, + 24328 - 19968: jis0212<<14 | 0x1B<<7 | 0x3E, + 24329 - 19968: jis0208<<14 | 0x36<<7 | 0x11, + 24330 - 19968: jis0208<<14 | 0x29<<7 | 0x1F, + 24331 - 19968: jis0208<<14 | 0x36<<7 | 0x14, + 24332 - 19968: jis0208<<14 | 0x2F<<7 | 0x00, + 24333 - 19968: jis0208<<14 | 0x2F<<7 | 0x10, + 24334 - 19968: jis0212<<14 | 0x1B<<7 | 0x3F, + 24335 - 19968: jis0208<<14 | 0x1B<<7 | 0x0F, + 24336 - 19968: jis0208<<14 | 0x25<<7 | 0x54, + 24337 - 19968: jis0208<<14 | 0x36<<7 | 0x15, + 24339 - 19968: jis0208<<14 | 0x14<<7 | 0x3C, + 24340 - 19968: jis0208<<14 | 0x23<<7 | 0x03, + 24341 - 19968: jis0208<<14 | 0x0F<<7 | 0x59, + 24342 - 19968: jis0208<<14 | 0x36<<7 | 0x16, + 24343 - 19968: jis0208<<14 | 0x29<<7 | 0x05, + 24344 - 19968: jis0208<<14 | 0x18<<7 | 0x0F, + 24345 - 19968: jis0212<<14 | 0x1B<<7 | 0x40, + 24347 - 19968: jis0208<<14 | 0x22<<7 | 0x2F, + 24348 - 19968: jis0212<<14 | 0x1B<<7 | 0x41, + 24349 - 19968: jis0212<<14 | 0x1B<<7 | 0x42, + 24351 - 19968: jis0208<<14 | 0x23<<7 | 0x4E, + 24353 - 19968: jis0208<<14 | 0x58<<7 | 0x5A, + 24354 - 19968: jis0212<<14 | 0x1B<<7 | 0x44, + 24355 - 19968: jis0212<<14 | 0x1B<<7 | 0x45, + 24356 - 19968: jis0212<<14 | 0x1B<<7 | 0x46, + 24357 - 19968: jis0208<<14 | 0x2B<<7 | 0x4E, + 24358 - 19968: jis0208<<14 | 0x17<<7 | 0x18, + 24359 - 19968: jis0208<<14 | 0x17<<7 | 0x2B, + 24360 - 19968: jis0212<<14 | 0x1B<<7 | 0x47, + 24361 - 19968: jis0208<<14 | 0x36<<7 | 0x17, + 24363 - 19968: jis0212<<14 | 0x1B<<7 | 0x48, + 24364 - 19968: jis0212<<14 | 0x1B<<7 | 0x49, + 24365 - 19968: jis0208<<14 | 0x36<<7 | 0x18, + 24366 - 19968: jis0212<<14 | 0x1B<<7 | 0x4A, + 24367 - 19968: jis0208<<14 | 0x36<<7 | 0x1E, + 24368 - 19968: jis0212<<14 | 0x1B<<7 | 0x4B, + 24369 - 19968: jis0208<<14 | 0x1B<<7 | 0x44, + 24372 - 19968: jis0208<<14 | 0x58<<7 | 0x5B, + 24373 - 19968: jis0208<<14 | 0x23<<7 | 0x04, + 24374 - 19968: jis0212<<14 | 0x1B<<7 | 0x4D, + 24375 - 19968: jis0208<<14 | 0x15<<7 | 0x0E, + 24376 - 19968: jis0208<<14 | 0x36<<7 | 0x19, + 24379 - 19968: jis0212<<14 | 0x1B<<7 | 0x4E, + 24380 - 19968: jis0208<<14 | 0x28<<7 | 0x0A, + 24381 - 19968: jis0212<<14 | 0x1B<<7 | 0x4F, + 24382 - 19968: jis0208<<14 | 0x22<<7 | 0x25, + 24383 - 19968: jis0212<<14 | 0x1B<<7 | 0x50, + 24384 - 19968: jis0212<<14 | 0x1B<<7 | 0x51, + 24385 - 19968: jis0208<<14 | 0x36<<7 | 0x1A, + 24388 - 19968: jis0212<<14 | 0x1B<<7 | 0x52, + 24389 - 19968: jis0208<<14 | 0x58<<7 | 0x0B, + 24391 - 19968: jis0212<<14 | 0x1B<<7 | 0x54, + 24392 - 19968: jis0208<<14 | 0x36<<7 | 0x1B, + 24394 - 19968: jis0208<<14 | 0x15<<7 | 0x0F, + 24396 - 19968: jis0208<<14 | 0x36<<7 | 0x1C, + 24397 - 19968: jis0212<<14 | 0x1B<<7 | 0x55, + 24398 - 19968: jis0208<<14 | 0x36<<7 | 0x1D, + 24400 - 19968: jis0212<<14 | 0x1B<<7 | 0x56, + 24401 - 19968: jis0208<<14 | 0x36<<7 | 0x1F, + 24403 - 19968: jis0208<<14 | 0x24<<7 | 0x55, + 24404 - 19968: jis0212<<14 | 0x1B<<7 | 0x57, + 24406 - 19968: jis0208<<14 | 0x36<<7 | 0x20, + 24407 - 19968: jis0208<<14 | 0x36<<7 | 0x21, + 24408 - 19968: jis0212<<14 | 0x1B<<7 | 0x58, + 24409 - 19968: jis0208<<14 | 0x36<<7 | 0x22, + 24411 - 19968: jis0212<<14 | 0x1B<<7 | 0x59, + 24412 - 19968: jis0208<<14 | 0x36<<7 | 0x13, + 24413 - 19968: jis0208<<14 | 0x36<<7 | 0x12, + 24416 - 19968: jis0212<<14 | 0x1B<<7 | 0x5A, + 24417 - 19968: jis0208<<14 | 0x36<<7 | 0x23, + 24418 - 19968: jis0208<<14 | 0x16<<7 | 0x20, + 24419 - 19968: jis0212<<14 | 0x1B<<7 | 0x5B, + 24420 - 19968: jis0212<<14 | 0x1B<<7 | 0x5C, + 24422 - 19968: jis0208<<14 | 0x28<<7 | 0x06, + 24423 - 19968: jis0208<<14 | 0x58<<7 | 0x5C, + 24425 - 19968: jis0208<<14 | 0x19<<7 | 0x2B, + 24426 - 19968: jis0208<<14 | 0x28<<7 | 0x16, + 24427 - 19968: jis0208<<14 | 0x23<<7 | 0x05, + 24428 - 19968: jis0208<<14 | 0x28<<7 | 0x2A, + 24429 - 19968: jis0208<<14 | 0x36<<7 | 0x24, + 24431 - 19968: jis0212<<14 | 0x1C<<7 | 0x00, + 24432 - 19968: jis0208<<14 | 0x1D<<7 | 0x13, + 24433 - 19968: jis0208<<14 | 0x10<<7 | 0x25, + 24434 - 19968: jis0212<<14 | 0x1C<<7 | 0x01, + 24435 - 19968: jis0208<<14 | 0x36<<7 | 0x25, + 24436 - 19968: jis0212<<14 | 0x1C<<7 | 0x02, + 24437 - 19968: jis0212<<14 | 0x1C<<7 | 0x03, + 24439 - 19968: jis0208<<14 | 0x36<<7 | 0x26, + 24440 - 19968: jis0212<<14 | 0x1C<<7 | 0x04, + 24441 - 19968: jis0208<<14 | 0x2B<<7 | 0x51, + 24442 - 19968: jis0212<<14 | 0x1C<<7 | 0x05, + 24444 - 19968: jis0208<<14 | 0x27<<7 | 0x3F, + 24445 - 19968: jis0212<<14 | 0x1C<<7 | 0x06, + 24446 - 19968: jis0212<<14 | 0x1C<<7 | 0x07, + 24447 - 19968: jis0208<<14 | 0x36<<7 | 0x29, + 24448 - 19968: jis0208<<14 | 0x10<<7 | 0x5C, + 24449 - 19968: jis0208<<14 | 0x1F<<7 | 0x0B, + 24450 - 19968: jis0208<<14 | 0x36<<7 | 0x28, + 24451 - 19968: jis0208<<14 | 0x36<<7 | 0x27, + 24452 - 19968: jis0208<<14 | 0x16<<7 | 0x21, + 24453 - 19968: jis0208<<14 | 0x21<<7 | 0x33, + 24455 - 19968: jis0208<<14 | 0x36<<7 | 0x2D, + 24456 - 19968: jis0208<<14 | 0x36<<7 | 0x2B, + 24457 - 19968: jis0212<<14 | 0x1C<<7 | 0x08, + 24458 - 19968: jis0208<<14 | 0x36<<7 | 0x2A, + 24459 - 19968: jis0208<<14 | 0x2D<<7 | 0x06, + 24460 - 19968: jis0208<<14 | 0x17<<7 | 0x44, + 24461 - 19968: jis0212<<14 | 0x1C<<7 | 0x09, + 24463 - 19968: jis0212<<14 | 0x1C<<7 | 0x0A, + 24464 - 19968: jis0208<<14 | 0x1C<<7 | 0x58, + 24465 - 19968: jis0208<<14 | 0x36<<7 | 0x2C, + 24466 - 19968: jis0208<<14 | 0x24<<7 | 0x2B, + 24467 - 19968: jis0208<<14 | 0x1C<<7 | 0x1D, + 24470 - 19968: jis0212<<14 | 0x1C<<7 | 0x0B, + 24471 - 19968: jis0208<<14 | 0x25<<7 | 0x1F, + 24472 - 19968: jis0208<<14 | 0x36<<7 | 0x30, + 24473 - 19968: jis0208<<14 | 0x36<<7 | 0x2F, + 24476 - 19968: jis0212<<14 | 0x1C<<7 | 0x0C, + 24477 - 19968: jis0212<<14 | 0x1C<<7 | 0x0D, + 24478 - 19968: jis0208<<14 | 0x36<<7 | 0x2E, + 24480 - 19968: jis0208<<14 | 0x36<<7 | 0x31, + 24481 - 19968: jis0208<<14 | 0x17<<7 | 0x45, + 24482 - 19968: jis0212<<14 | 0x1C<<7 | 0x0E, + 24484 - 19968: jis0212<<14 | 0x1C<<7 | 0x11, + 24487 - 19968: jis0212<<14 | 0x1C<<7 | 0x0F, + 24488 - 19968: jis0208<<14 | 0x36<<7 | 0x32, + 24489 - 19968: jis0208<<14 | 0x28<<7 | 0x5B, + 24490 - 19968: jis0208<<14 | 0x1C<<7 | 0x3A, + 24491 - 19968: jis0212<<14 | 0x1C<<7 | 0x10, + 24492 - 19968: jis0212<<14 | 0x1C<<7 | 0x12, + 24493 - 19968: jis0208<<14 | 0x36<<7 | 0x33, + 24494 - 19968: jis0208<<14 | 0x27<<7 | 0x58, + 24495 - 19968: jis0212<<14 | 0x1C<<7 | 0x13, + 24496 - 19968: jis0212<<14 | 0x1C<<7 | 0x14, + 24497 - 19968: jis0212<<14 | 0x1C<<7 | 0x15, + 24499 - 19968: jis0208<<14 | 0x25<<7 | 0x20, + 24500 - 19968: jis0208<<14 | 0x23<<7 | 0x06, + 24503 - 19968: jis0208<<14 | 0x58<<7 | 0x5D, + 24504 - 19968: jis0212<<14 | 0x1C<<7 | 0x16, + 24505 - 19968: jis0208<<14 | 0x24<<7 | 0x0F, + 24508 - 19968: jis0208<<14 | 0x36<<7 | 0x34, + 24509 - 19968: jis0208<<14 | 0x14<<7 | 0x0A, + 24515 - 19968: jis0208<<14 | 0x1E<<7 | 0x13, + 24516 - 19968: jis0212<<14 | 0x1C<<7 | 0x17, + 24517 - 19968: jis0208<<14 | 0x28<<7 | 0x0B, + 24519 - 19968: jis0212<<14 | 0x1C<<7 | 0x18, + 24520 - 19968: jis0212<<14 | 0x1C<<7 | 0x19, + 24521 - 19968: jis0212<<14 | 0x1C<<7 | 0x1A, + 24523 - 19968: jis0212<<14 | 0x1C<<7 | 0x1B, + 24524 - 19968: jis0208<<14 | 0x13<<7 | 0x56, + 24525 - 19968: jis0208<<14 | 0x26<<7 | 0x05, + 24528 - 19968: jis0212<<14 | 0x1C<<7 | 0x1C, + 24529 - 19968: jis0212<<14 | 0x1C<<7 | 0x1D, + 24530 - 19968: jis0212<<14 | 0x1C<<7 | 0x1E, + 24531 - 19968: jis0212<<14 | 0x1C<<7 | 0x1F, + 24532 - 19968: jis0212<<14 | 0x1C<<7 | 0x20, + 24534 - 19968: jis0208<<14 | 0x36<<7 | 0x35, + 24535 - 19968: jis0208<<14 | 0x1A<<7 | 0x35, + 24536 - 19968: jis0208<<14 | 0x2A<<7 | 0x19, + 24537 - 19968: jis0208<<14 | 0x2A<<7 | 0x1A, + 24540 - 19968: jis0208<<14 | 0x10<<7 | 0x5D, + 24541 - 19968: jis0208<<14 | 0x36<<7 | 0x3A, + 24542 - 19968: jis0208<<14 | 0x59<<7 | 0x00, + 24544 - 19968: jis0208<<14 | 0x22<<7 | 0x48, + 24545 - 19968: jis0212<<14 | 0x1C<<7 | 0x22, + 24546 - 19968: jis0212<<14 | 0x1C<<7 | 0x23, + 24548 - 19968: jis0208<<14 | 0x36<<7 | 0x37, + 24552 - 19968: jis0212<<14 | 0x1C<<7 | 0x24, + 24553 - 19968: jis0212<<14 | 0x1C<<7 | 0x25, + 24554 - 19968: jis0212<<14 | 0x1C<<7 | 0x26, + 24555 - 19968: jis0208<<14 | 0x11<<7 | 0x56, + 24556 - 19968: jis0212<<14 | 0x1C<<7 | 0x27, + 24557 - 19968: jis0212<<14 | 0x1C<<7 | 0x28, + 24558 - 19968: jis0212<<14 | 0x1C<<7 | 0x29, + 24559 - 19968: jis0212<<14 | 0x1C<<7 | 0x2A, + 24560 - 19968: jis0208<<14 | 0x37<<7 | 0x0C, + 24561 - 19968: jis0208<<14 | 0x36<<7 | 0x39, + 24562 - 19968: jis0212<<14 | 0x1C<<7 | 0x2B, + 24563 - 19968: jis0212<<14 | 0x1C<<7 | 0x2C, + 24565 - 19968: jis0208<<14 | 0x26<<7 | 0x0F, + 24566 - 19968: jis0212<<14 | 0x1C<<7 | 0x2D, + 24568 - 19968: jis0208<<14 | 0x36<<7 | 0x38, + 24570 - 19968: jis0212<<14 | 0x1C<<7 | 0x2E, + 24571 - 19968: jis0208<<14 | 0x36<<7 | 0x36, + 24572 - 19968: jis0212<<14 | 0x1C<<7 | 0x2F, + 24573 - 19968: jis0208<<14 | 0x18<<7 | 0x59, + 24575 - 19968: jis0208<<14 | 0x36<<7 | 0x3C, + 24583 - 19968: jis0212<<14 | 0x1C<<7 | 0x30, + 24586 - 19968: jis0212<<14 | 0x1C<<7 | 0x31, + 24589 - 19968: jis0212<<14 | 0x1C<<7 | 0x32, + 24590 - 19968: jis0208<<14 | 0x36<<7 | 0x42, + 24591 - 19968: jis0208<<14 | 0x36<<7 | 0x48, + 24592 - 19968: jis0208<<14 | 0x36<<7 | 0x40, + 24594 - 19968: jis0208<<14 | 0x24<<7 | 0x3B, + 24595 - 19968: jis0212<<14 | 0x1C<<7 | 0x33, + 24596 - 19968: jis0212<<14 | 0x1C<<7 | 0x34, + 24597 - 19968: jis0208<<14 | 0x36<<7 | 0x45, + 24598 - 19968: jis0208<<14 | 0x28<<7 | 0x3C, + 24599 - 19968: jis0212<<14 | 0x1C<<7 | 0x35, + 24600 - 19968: jis0212<<14 | 0x1C<<7 | 0x36, + 24601 - 19968: jis0208<<14 | 0x36<<7 | 0x3F, + 24602 - 19968: jis0212<<14 | 0x1C<<7 | 0x37, + 24603 - 19968: jis0208<<14 | 0x36<<7 | 0x44, + 24604 - 19968: jis0208<<14 | 0x2D<<7 | 0x46, + 24605 - 19968: jis0208<<14 | 0x1A<<7 | 0x36, + 24607 - 19968: jis0212<<14 | 0x1C<<7 | 0x38, + 24608 - 19968: jis0208<<14 | 0x21<<7 | 0x34, + 24609 - 19968: jis0208<<14 | 0x36<<7 | 0x3D, + 24612 - 19968: jis0212<<14 | 0x1C<<7 | 0x39, + 24613 - 19968: jis0208<<14 | 0x14<<7 | 0x3D, + 24614 - 19968: jis0208<<14 | 0x36<<7 | 0x47, + 24615 - 19968: jis0208<<14 | 0x1F<<7 | 0x0C, + 24616 - 19968: jis0208<<14 | 0x10<<7 | 0x44, + 24617 - 19968: jis0208<<14 | 0x36<<7 | 0x41, + 24618 - 19968: jis0208<<14 | 0x11<<7 | 0x57, + 24619 - 19968: jis0208<<14 | 0x36<<7 | 0x46, + 24621 - 19968: jis0212<<14 | 0x1C<<7 | 0x3A, + 24623 - 19968: jis0208<<14 | 0x15<<7 | 0x10, + 24625 - 19968: jis0208<<14 | 0x36<<7 | 0x43, + 24627 - 19968: jis0212<<14 | 0x1C<<7 | 0x3B, + 24629 - 19968: jis0212<<14 | 0x1C<<7 | 0x3C, + 24634 - 19968: jis0208<<14 | 0x36<<7 | 0x49, + 24640 - 19968: jis0212<<14 | 0x1C<<7 | 0x3D, + 24641 - 19968: jis0208<<14 | 0x36<<7 | 0x4B, + 24642 - 19968: jis0208<<14 | 0x36<<7 | 0x55, + 24643 - 19968: jis0208<<14 | 0x36<<7 | 0x53, + 24646 - 19968: jis0208<<14 | 0x36<<7 | 0x50, + 24647 - 19968: jis0212<<14 | 0x1C<<7 | 0x3E, + 24648 - 19968: jis0212<<14 | 0x1C<<7 | 0x3F, + 24649 - 19968: jis0212<<14 | 0x1C<<7 | 0x40, + 24650 - 19968: jis0208<<14 | 0x36<<7 | 0x4F, + 24651 - 19968: jis0208<<14 | 0x2D<<7 | 0x57, + 24652 - 19968: jis0212<<14 | 0x1C<<7 | 0x41, + 24653 - 19968: jis0208<<14 | 0x36<<7 | 0x51, + 24656 - 19968: jis0208<<14 | 0x15<<7 | 0x11, + 24657 - 19968: jis0212<<14 | 0x1C<<7 | 0x42, + 24658 - 19968: jis0208<<14 | 0x18<<7 | 0x10, + 24660 - 19968: jis0212<<14 | 0x1C<<7 | 0x43, + 24661 - 19968: jis0208<<14 | 0x1C<<7 | 0x59, + 24662 - 19968: jis0212<<14 | 0x1C<<7 | 0x44, + 24663 - 19968: jis0212<<14 | 0x1C<<7 | 0x45, + 24665 - 19968: jis0208<<14 | 0x36<<7 | 0x58, + 24666 - 19968: jis0208<<14 | 0x36<<7 | 0x4A, + 24669 - 19968: jis0208<<14 | 0x59<<7 | 0x01, + 24671 - 19968: jis0208<<14 | 0x36<<7 | 0x4E, + 24672 - 19968: jis0208<<14 | 0x36<<7 | 0x3E, + 24673 - 19968: jis0212<<14 | 0x1C<<7 | 0x47, + 24674 - 19968: jis0208<<14 | 0x11<<7 | 0x59, + 24675 - 19968: jis0208<<14 | 0x36<<7 | 0x52, + 24676 - 19968: jis0208<<14 | 0x36<<7 | 0x54, + 24677 - 19968: jis0208<<14 | 0x22<<7 | 0x30, + 24679 - 19968: jis0212<<14 | 0x1C<<7 | 0x48, + 24680 - 19968: jis0208<<14 | 0x19<<7 | 0x07, + 24681 - 19968: jis0208<<14 | 0x11<<7 | 0x17, + 24682 - 19968: jis0208<<14 | 0x36<<7 | 0x4C, + 24683 - 19968: jis0208<<14 | 0x36<<7 | 0x57, + 24684 - 19968: jis0208<<14 | 0x36<<7 | 0x56, + 24685 - 19968: jis0208<<14 | 0x15<<7 | 0x12, + 24687 - 19968: jis0208<<14 | 0x21<<7 | 0x08, + 24688 - 19968: jis0208<<14 | 0x12<<7 | 0x45, + 24689 - 19968: jis0212<<14 | 0x1C<<7 | 0x49, + 24693 - 19968: jis0208<<14 | 0x16<<7 | 0x22, + 24695 - 19968: jis0208<<14 | 0x36<<7 | 0x4D, + 24702 - 19968: jis0212<<14 | 0x1C<<7 | 0x4A, + 24703 - 19968: jis0212<<14 | 0x1C<<7 | 0x4B, + 24705 - 19968: jis0208<<14 | 0x36<<7 | 0x59, + 24706 - 19968: jis0212<<14 | 0x1C<<7 | 0x4C, + 24707 - 19968: jis0208<<14 | 0x36<<7 | 0x5C, + 24708 - 19968: jis0208<<14 | 0x37<<7 | 0x00, + 24709 - 19968: jis0208<<14 | 0x59<<7 | 0x02, + 24710 - 19968: jis0212<<14 | 0x1C<<7 | 0x4D, + 24712 - 19968: jis0212<<14 | 0x1C<<7 | 0x4E, + 24713 - 19968: jis0208<<14 | 0x1B<<7 | 0x1C, + 24714 - 19968: jis0208<<14 | 0x59<<7 | 0x03, + 24715 - 19968: jis0208<<14 | 0x37<<7 | 0x06, + 24716 - 19968: jis0208<<14 | 0x23<<7 | 0x4F, + 24717 - 19968: jis0208<<14 | 0x36<<7 | 0x5A, + 24718 - 19968: jis0212<<14 | 0x1C<<7 | 0x50, + 24721 - 19968: jis0212<<14 | 0x1C<<7 | 0x51, + 24722 - 19968: jis0208<<14 | 0x37<<7 | 0x04, + 24723 - 19968: jis0212<<14 | 0x1C<<7 | 0x52, + 24724 - 19968: jis0208<<14 | 0x11<<7 | 0x58, + 24725 - 19968: jis0212<<14 | 0x1C<<7 | 0x53, + 24726 - 19968: jis0208<<14 | 0x37<<7 | 0x02, + 24727 - 19968: jis0208<<14 | 0x37<<7 | 0x03, + 24728 - 19968: jis0212<<14 | 0x1C<<7 | 0x54, + 24730 - 19968: jis0208<<14 | 0x36<<7 | 0x5D, + 24731 - 19968: jis0208<<14 | 0x37<<7 | 0x01, + 24733 - 19968: jis0212<<14 | 0x1C<<7 | 0x55, + 24734 - 19968: jis0212<<14 | 0x1C<<7 | 0x56, + 24735 - 19968: jis0208<<14 | 0x17<<7 | 0x46, + 24736 - 19968: jis0208<<14 | 0x2C<<7 | 0x09, + 24738 - 19968: jis0212<<14 | 0x1C<<7 | 0x57, + 24739 - 19968: jis0208<<14 | 0x13<<7 | 0x14, + 24740 - 19968: jis0212<<14 | 0x1C<<7 | 0x58, + 24741 - 19968: jis0212<<14 | 0x1C<<7 | 0x59, + 24742 - 19968: jis0208<<14 | 0x10<<7 | 0x38, + 24743 - 19968: jis0208<<14 | 0x37<<7 | 0x05, + 24744 - 19968: jis0212<<14 | 0x1C<<7 | 0x5A, + 24745 - 19968: jis0208<<14 | 0x26<<7 | 0x19, + 24746 - 19968: jis0208<<14 | 0x0F<<7 | 0x0C, + 24752 - 19968: jis0212<<14 | 0x1C<<7 | 0x5B, + 24753 - 19968: jis0212<<14 | 0x1C<<7 | 0x5C, + 24754 - 19968: jis0208<<14 | 0x27<<7 | 0x40, + 24755 - 19968: jis0208<<14 | 0x36<<7 | 0x3B, + 24756 - 19968: jis0208<<14 | 0x37<<7 | 0x0B, + 24757 - 19968: jis0208<<14 | 0x37<<7 | 0x0F, + 24758 - 19968: jis0208<<14 | 0x2B<<7 | 0x44, + 24759 - 19968: jis0212<<14 | 0x1C<<7 | 0x5D, + 24760 - 19968: jis0208<<14 | 0x37<<7 | 0x08, + 24763 - 19968: jis0212<<14 | 0x1D<<7 | 0x00, + 24764 - 19968: jis0208<<14 | 0x24<<7 | 0x48, + 24765 - 19968: jis0208<<14 | 0x37<<7 | 0x0D, + 24766 - 19968: jis0212<<14 | 0x1D<<7 | 0x01, + 24770 - 19968: jis0212<<14 | 0x1D<<7 | 0x02, + 24772 - 19968: jis0212<<14 | 0x1D<<7 | 0x03, + 24773 - 19968: jis0208<<14 | 0x1D<<7 | 0x4F, + 24774 - 19968: jis0208<<14 | 0x37<<7 | 0x0E, + 24775 - 19968: jis0208<<14 | 0x25<<7 | 0x36, + 24776 - 19968: jis0212<<14 | 0x1D<<7 | 0x04, + 24777 - 19968: jis0212<<14 | 0x1D<<7 | 0x05, + 24778 - 19968: jis0212<<14 | 0x1D<<7 | 0x06, + 24779 - 19968: jis0212<<14 | 0x1D<<7 | 0x07, + 24782 - 19968: jis0212<<14 | 0x1D<<7 | 0x08, + 24783 - 19968: jis0212<<14 | 0x1D<<7 | 0x09, + 24785 - 19968: jis0208<<14 | 0x2E<<7 | 0x26, + 24787 - 19968: jis0208<<14 | 0x37<<7 | 0x0A, + 24788 - 19968: jis0212<<14 | 0x1D<<7 | 0x0A, + 24789 - 19968: jis0208<<14 | 0x59<<7 | 0x05, + 24792 - 19968: jis0208<<14 | 0x37<<7 | 0x10, + 24793 - 19968: jis0212<<14 | 0x1D<<7 | 0x0C, + 24794 - 19968: jis0208<<14 | 0x18<<7 | 0x5A, + 24795 - 19968: jis0212<<14 | 0x1D<<7 | 0x0D, + 24796 - 19968: jis0208<<14 | 0x1F<<7 | 0x2A, + 24797 - 19968: jis0212<<14 | 0x1D<<7 | 0x0E, + 24798 - 19968: jis0208<<14 | 0x59<<7 | 0x04, + 24799 - 19968: jis0208<<14 | 0x0F<<7 | 0x33, + 24800 - 19968: jis0208<<14 | 0x37<<7 | 0x09, + 24801 - 19968: jis0208<<14 | 0x37<<7 | 0x07, + 24802 - 19968: jis0212<<14 | 0x1D<<7 | 0x10, + 24803 - 19968: jis0208<<14 | 0x20<<7 | 0x39, + 24805 - 19968: jis0212<<14 | 0x1D<<7 | 0x11, + 24807 - 19968: jis0208<<14 | 0x36<<7 | 0x5B, + 24808 - 19968: jis0208<<14 | 0x1A<<7 | 0x13, + 24816 - 19968: jis0208<<14 | 0x21<<7 | 0x25, + 24817 - 19968: jis0208<<14 | 0x37<<7 | 0x1C, + 24818 - 19968: jis0208<<14 | 0x59<<7 | 0x07, + 24819 - 19968: jis0208<<14 | 0x20<<7 | 0x3A, + 24820 - 19968: jis0208<<14 | 0x37<<7 | 0x17, + 24821 - 19968: jis0212<<14 | 0x1D<<7 | 0x13, + 24822 - 19968: jis0208<<14 | 0x37<<7 | 0x14, + 24823 - 19968: jis0208<<14 | 0x37<<7 | 0x15, + 24824 - 19968: jis0212<<14 | 0x1D<<7 | 0x14, + 24825 - 19968: jis0208<<14 | 0x1B<<7 | 0x45, + 24826 - 19968: jis0208<<14 | 0x37<<7 | 0x18, + 24827 - 19968: jis0208<<14 | 0x37<<7 | 0x1B, + 24828 - 19968: jis0212<<14 | 0x1D<<7 | 0x15, + 24829 - 19968: jis0212<<14 | 0x1D<<7 | 0x16, + 24832 - 19968: jis0208<<14 | 0x37<<7 | 0x16, + 24833 - 19968: jis0208<<14 | 0x1C<<7 | 0x04, + 24834 - 19968: jis0212<<14 | 0x1D<<7 | 0x17, + 24835 - 19968: jis0208<<14 | 0x37<<7 | 0x19, + 24838 - 19968: jis0208<<14 | 0x37<<7 | 0x13, + 24839 - 19968: jis0212<<14 | 0x1D<<7 | 0x18, + 24840 - 19968: jis0208<<14 | 0x2B<<7 | 0x5B, + 24841 - 19968: jis0208<<14 | 0x2B<<7 | 0x5A, + 24842 - 19968: jis0212<<14 | 0x1D<<7 | 0x19, + 24844 - 19968: jis0212<<14 | 0x1D<<7 | 0x1A, + 24845 - 19968: jis0208<<14 | 0x37<<7 | 0x1D, + 24846 - 19968: jis0208<<14 | 0x37<<7 | 0x1E, + 24847 - 19968: jis0208<<14 | 0x0F<<7 | 0x34, + 24848 - 19968: jis0212<<14 | 0x1D<<7 | 0x1B, + 24849 - 19968: jis0208<<14 | 0x59<<7 | 0x08, + 24850 - 19968: jis0212<<14 | 0x1D<<7 | 0x1D, + 24851 - 19968: jis0212<<14 | 0x1D<<7 | 0x1E, + 24852 - 19968: jis0212<<14 | 0x1D<<7 | 0x1F, + 24853 - 19968: jis0208<<14 | 0x37<<7 | 0x12, + 24854 - 19968: jis0212<<14 | 0x1D<<7 | 0x20, + 24855 - 19968: jis0212<<14 | 0x1D<<7 | 0x21, + 24857 - 19968: jis0212<<14 | 0x1D<<7 | 0x22, + 24858 - 19968: jis0208<<14 | 0x15<<7 | 0x51, + 24859 - 19968: jis0208<<14 | 0x0F<<7 | 0x05, + 24860 - 19968: jis0212<<14 | 0x1D<<7 | 0x23, + 24862 - 19968: jis0212<<14 | 0x1D<<7 | 0x24, + 24863 - 19968: jis0208<<14 | 0x13<<7 | 0x15, + 24864 - 19968: jis0208<<14 | 0x59<<7 | 0x06, + 24865 - 19968: jis0208<<14 | 0x37<<7 | 0x1A, + 24866 - 19968: jis0212<<14 | 0x1D<<7 | 0x25, + 24871 - 19968: jis0208<<14 | 0x37<<7 | 0x22, + 24872 - 19968: jis0208<<14 | 0x37<<7 | 0x21, + 24874 - 19968: jis0212<<14 | 0x1D<<7 | 0x26, + 24875 - 19968: jis0212<<14 | 0x1D<<7 | 0x27, + 24876 - 19968: jis0208<<14 | 0x37<<7 | 0x26, + 24880 - 19968: jis0208<<14 | 0x59<<7 | 0x0A, + 24881 - 19968: jis0212<<14 | 0x1D<<7 | 0x29, + 24884 - 19968: jis0208<<14 | 0x37<<7 | 0x27, + 24885 - 19968: jis0212<<14 | 0x1D<<7 | 0x2A, + 24886 - 19968: jis0212<<14 | 0x1D<<7 | 0x2B, + 24887 - 19968: jis0208<<14 | 0x59<<7 | 0x09, + 24889 - 19968: jis0212<<14 | 0x1D<<7 | 0x2D, + 24892 - 19968: jis0208<<14 | 0x37<<7 | 0x25, + 24893 - 19968: jis0208<<14 | 0x37<<7 | 0x28, + 24894 - 19968: jis0208<<14 | 0x37<<7 | 0x20, + 24895 - 19968: jis0208<<14 | 0x37<<7 | 0x24, + 24897 - 19968: jis0212<<14 | 0x1D<<7 | 0x2E, + 24898 - 19968: jis0208<<14 | 0x37<<7 | 0x29, + 24900 - 19968: jis0208<<14 | 0x37<<7 | 0x2A, + 24901 - 19968: jis0212<<14 | 0x1D<<7 | 0x2F, + 24902 - 19968: jis0212<<14 | 0x1D<<7 | 0x30, + 24903 - 19968: jis0208<<14 | 0x37<<7 | 0x1F, + 24904 - 19968: jis0208<<14 | 0x1A<<7 | 0x5B, + 24905 - 19968: jis0212<<14 | 0x1D<<7 | 0x31, + 24906 - 19968: jis0208<<14 | 0x37<<7 | 0x23, + 24907 - 19968: jis0208<<14 | 0x21<<7 | 0x35, + 24908 - 19968: jis0208<<14 | 0x18<<7 | 0x11, + 24909 - 19968: jis0208<<14 | 0x37<<7 | 0x11, + 24910 - 19968: jis0208<<14 | 0x1E<<7 | 0x14, + 24915 - 19968: jis0208<<14 | 0x37<<7 | 0x37, + 24917 - 19968: jis0208<<14 | 0x29<<7 | 0x48, + 24920 - 19968: jis0208<<14 | 0x37<<7 | 0x2D, + 24921 - 19968: jis0208<<14 | 0x37<<7 | 0x2E, + 24922 - 19968: jis0208<<14 | 0x37<<7 | 0x2F, + 24925 - 19968: jis0208<<14 | 0x37<<7 | 0x36, + 24926 - 19968: jis0212<<14 | 0x1D<<7 | 0x32, + 24927 - 19968: jis0208<<14 | 0x37<<7 | 0x35, + 24928 - 19968: jis0212<<14 | 0x1D<<7 | 0x33, + 24930 - 19968: jis0208<<14 | 0x2A<<7 | 0x5C, + 24931 - 19968: jis0208<<14 | 0x13<<7 | 0x16, + 24933 - 19968: jis0208<<14 | 0x37<<7 | 0x33, + 24935 - 19968: jis0208<<14 | 0x16<<7 | 0x24, + 24936 - 19968: jis0208<<14 | 0x12<<7 | 0x13, + 24939 - 19968: jis0208<<14 | 0x37<<7 | 0x30, + 24940 - 19968: jis0212<<14 | 0x1D<<7 | 0x34, + 24942 - 19968: jis0208<<14 | 0x2D<<7 | 0x17, + 24943 - 19968: jis0208<<14 | 0x37<<7 | 0x32, + 24944 - 19968: jis0208<<14 | 0x0F<<7 | 0x35, + 24945 - 19968: jis0208<<14 | 0x37<<7 | 0x34, + 24946 - 19968: jis0212<<14 | 0x1D<<7 | 0x35, + 24947 - 19968: jis0208<<14 | 0x37<<7 | 0x2B, + 24948 - 19968: jis0208<<14 | 0x37<<7 | 0x31, + 24949 - 19968: jis0208<<14 | 0x37<<7 | 0x38, + 24950 - 19968: jis0208<<14 | 0x16<<7 | 0x23, + 24951 - 19968: jis0208<<14 | 0x37<<7 | 0x2C, + 24952 - 19968: jis0212<<14 | 0x1D<<7 | 0x36, + 24955 - 19968: jis0212<<14 | 0x1D<<7 | 0x37, + 24956 - 19968: jis0212<<14 | 0x1D<<7 | 0x38, + 24958 - 19968: jis0208<<14 | 0x2C<<7 | 0x3C, + 24959 - 19968: jis0212<<14 | 0x1D<<7 | 0x39, + 24960 - 19968: jis0212<<14 | 0x1D<<7 | 0x3A, + 24961 - 19968: jis0212<<14 | 0x1D<<7 | 0x3B, + 24962 - 19968: jis0208<<14 | 0x2C<<7 | 0x0A, + 24963 - 19968: jis0212<<14 | 0x1D<<7 | 0x3C, + 24964 - 19968: jis0212<<14 | 0x1D<<7 | 0x3D, + 24967 - 19968: jis0208<<14 | 0x37<<7 | 0x3B, + 24970 - 19968: jis0208<<14 | 0x37<<7 | 0x3F, + 24971 - 19968: jis0212<<14 | 0x1D<<7 | 0x3E, + 24973 - 19968: jis0212<<14 | 0x1D<<7 | 0x3F, + 24974 - 19968: jis0208<<14 | 0x20<<7 | 0x5D, + 24976 - 19968: jis0208<<14 | 0x2D<<7 | 0x58, + 24977 - 19968: jis0208<<14 | 0x37<<7 | 0x40, + 24978 - 19968: jis0212<<14 | 0x1D<<7 | 0x40, + 24979 - 19968: jis0212<<14 | 0x1D<<7 | 0x41, + 24980 - 19968: jis0208<<14 | 0x37<<7 | 0x3D, + 24982 - 19968: jis0208<<14 | 0x37<<7 | 0x3A, + 24983 - 19968: jis0212<<14 | 0x1D<<7 | 0x42, + 24984 - 19968: jis0208<<14 | 0x59<<7 | 0x0B, + 24985 - 19968: jis0208<<14 | 0x37<<7 | 0x39, + 24986 - 19968: jis0208<<14 | 0x37<<7 | 0x3E, + 24988 - 19968: jis0212<<14 | 0x1D<<7 | 0x44, + 24989 - 19968: jis0212<<14 | 0x1D<<7 | 0x45, + 24991 - 19968: jis0212<<14 | 0x1D<<7 | 0x46, + 24992 - 19968: jis0212<<14 | 0x1D<<7 | 0x47, + 24996 - 19968: jis0208<<14 | 0x29<<7 | 0x0F, + 24997 - 19968: jis0212<<14 | 0x1D<<7 | 0x48, + 24999 - 19968: jis0208<<14 | 0x25<<7 | 0x13, + 25000 - 19968: jis0212<<14 | 0x1D<<7 | 0x49, + 25001 - 19968: jis0208<<14 | 0x16<<7 | 0x25, + 25002 - 19968: jis0212<<14 | 0x1D<<7 | 0x4A, + 25003 - 19968: jis0208<<14 | 0x37<<7 | 0x41, + 25004 - 19968: jis0208<<14 | 0x37<<7 | 0x3C, + 25005 - 19968: jis0212<<14 | 0x1D<<7 | 0x4B, + 25006 - 19968: jis0208<<14 | 0x37<<7 | 0x42, + 25010 - 19968: jis0208<<14 | 0x16<<7 | 0x5A, + 25014 - 19968: jis0208<<14 | 0x11<<7 | 0x10, + 25016 - 19968: jis0212<<14 | 0x1D<<7 | 0x4C, + 25017 - 19968: jis0212<<14 | 0x1D<<7 | 0x4D, + 25018 - 19968: jis0208<<14 | 0x37<<7 | 0x4A, + 25020 - 19968: jis0212<<14 | 0x1D<<7 | 0x4E, + 25022 - 19968: jis0208<<14 | 0x13<<7 | 0x17, + 25024 - 19968: jis0212<<14 | 0x1D<<7 | 0x4F, + 25025 - 19968: jis0212<<14 | 0x1D<<7 | 0x50, + 25026 - 19968: jis0212<<14 | 0x1D<<7 | 0x51, + 25027 - 19968: jis0208<<14 | 0x37<<7 | 0x48, + 25030 - 19968: jis0208<<14 | 0x37<<7 | 0x49, + 25031 - 19968: jis0208<<14 | 0x19<<7 | 0x08, + 25032 - 19968: jis0208<<14 | 0x37<<7 | 0x47, + 25033 - 19968: jis0208<<14 | 0x37<<7 | 0x45, + 25034 - 19968: jis0208<<14 | 0x37<<7 | 0x44, + 25035 - 19968: jis0208<<14 | 0x37<<7 | 0x4B, + 25036 - 19968: jis0208<<14 | 0x37<<7 | 0x43, + 25037 - 19968: jis0208<<14 | 0x37<<7 | 0x4D, + 25038 - 19968: jis0212<<14 | 0x1D<<7 | 0x52, + 25039 - 19968: jis0212<<14 | 0x1D<<7 | 0x53, + 25040 - 19968: jis0208<<14 | 0x11<<7 | 0x5A, + 25045 - 19968: jis0212<<14 | 0x1D<<7 | 0x54, + 25052 - 19968: jis0212<<14 | 0x1D<<7 | 0x55, + 25053 - 19968: jis0212<<14 | 0x1D<<7 | 0x56, + 25054 - 19968: jis0212<<14 | 0x1D<<7 | 0x57, + 25055 - 19968: jis0212<<14 | 0x1D<<7 | 0x58, + 25057 - 19968: jis0212<<14 | 0x1D<<7 | 0x59, + 25058 - 19968: jis0212<<14 | 0x1D<<7 | 0x5A, + 25059 - 19968: jis0208<<14 | 0x37<<7 | 0x4F, + 25061 - 19968: jis0212<<14 | 0x1D<<7 | 0x5D, + 25062 - 19968: jis0208<<14 | 0x37<<7 | 0x4E, + 25063 - 19968: jis0212<<14 | 0x1D<<7 | 0x5B, + 25065 - 19968: jis0212<<14 | 0x1D<<7 | 0x5C, + 25068 - 19968: jis0212<<14 | 0x1E<<7 | 0x00, + 25069 - 19968: jis0212<<14 | 0x1E<<7 | 0x01, + 25071 - 19968: jis0212<<14 | 0x1E<<7 | 0x02, + 25074 - 19968: jis0208<<14 | 0x23<<7 | 0x07, + 25076 - 19968: jis0208<<14 | 0x37<<7 | 0x52, + 25078 - 19968: jis0208<<14 | 0x37<<7 | 0x50, + 25079 - 19968: jis0208<<14 | 0x37<<7 | 0x46, + 25080 - 19968: jis0208<<14 | 0x16<<7 | 0x5B, + 25082 - 19968: jis0208<<14 | 0x37<<7 | 0x51, + 25084 - 19968: jis0208<<14 | 0x37<<7 | 0x55, + 25085 - 19968: jis0208<<14 | 0x37<<7 | 0x54, + 25086 - 19968: jis0208<<14 | 0x37<<7 | 0x56, + 25087 - 19968: jis0208<<14 | 0x37<<7 | 0x53, + 25088 - 19968: jis0208<<14 | 0x37<<7 | 0x57, + 25089 - 19968: jis0212<<14 | 0x1E<<7 | 0x03, + 25091 - 19968: jis0212<<14 | 0x1E<<7 | 0x04, + 25092 - 19968: jis0212<<14 | 0x1E<<7 | 0x05, + 25095 - 19968: jis0212<<14 | 0x1E<<7 | 0x06, + 25096 - 19968: jis0208<<14 | 0x37<<7 | 0x58, + 25097 - 19968: jis0208<<14 | 0x37<<7 | 0x59, + 25098 - 19968: jis0208<<14 | 0x29<<7 | 0x49, + 25100 - 19968: jis0208<<14 | 0x37<<7 | 0x5B, + 25101 - 19968: jis0208<<14 | 0x37<<7 | 0x5A, + 25102 - 19968: jis0208<<14 | 0x1C<<7 | 0x1E, + 25104 - 19968: jis0208<<14 | 0x1F<<7 | 0x0D, + 25105 - 19968: jis0208<<14 | 0x11<<7 | 0x45, + 25106 - 19968: jis0208<<14 | 0x11<<7 | 0x5B, + 25107 - 19968: jis0208<<14 | 0x59<<7 | 0x0C, + 25108 - 19968: jis0208<<14 | 0x37<<7 | 0x5C, + 25109 - 19968: jis0212<<14 | 0x1E<<7 | 0x08, + 25110 - 19968: jis0208<<14 | 0x0F<<7 | 0x1E, + 25114 - 19968: jis0208<<14 | 0x1F<<7 | 0x2B, + 25115 - 19968: jis0208<<14 | 0x37<<7 | 0x5D, + 25116 - 19968: jis0212<<14 | 0x1E<<7 | 0x09, + 25117 - 19968: jis0208<<14 | 0x4B<<7 | 0x22, + 25118 - 19968: jis0208<<14 | 0x38<<7 | 0x00, + 25119 - 19968: jis0208<<14 | 0x16<<7 | 0x40, + 25120 - 19968: jis0212<<14 | 0x1E<<7 | 0x0A, + 25121 - 19968: jis0208<<14 | 0x38<<7 | 0x01, + 25122 - 19968: jis0212<<14 | 0x1E<<7 | 0x0B, + 25123 - 19968: jis0212<<14 | 0x1E<<7 | 0x0C, + 25126 - 19968: jis0208<<14 | 0x1F<<7 | 0x4E, + 25127 - 19968: jis0212<<14 | 0x1E<<7 | 0x0D, + 25129 - 19968: jis0212<<14 | 0x1E<<7 | 0x0E, + 25130 - 19968: jis0208<<14 | 0x38<<7 | 0x02, + 25131 - 19968: jis0212<<14 | 0x1E<<7 | 0x0F, + 25134 - 19968: jis0208<<14 | 0x38<<7 | 0x03, + 25135 - 19968: jis0208<<14 | 0x14<<7 | 0x19, + 25136 - 19968: jis0208<<14 | 0x38<<7 | 0x04, + 25138 - 19968: jis0208<<14 | 0x38<<7 | 0x05, + 25139 - 19968: jis0208<<14 | 0x38<<7 | 0x06, + 25140 - 19968: jis0208<<14 | 0x21<<7 | 0x36, + 25144 - 19968: jis0208<<14 | 0x17<<7 | 0x2C, + 25145 - 19968: jis0212<<14 | 0x1E<<7 | 0x10, + 25147 - 19968: jis0208<<14 | 0x2B<<7 | 0x40, + 25149 - 19968: jis0212<<14 | 0x1E<<7 | 0x11, + 25151 - 19968: jis0208<<14 | 0x2A<<7 | 0x1B, + 25152 - 19968: jis0208<<14 | 0x1C<<7 | 0x49, + 25153 - 19968: jis0208<<14 | 0x38<<7 | 0x07, + 25154 - 19968: jis0212<<14 | 0x1E<<7 | 0x12, + 25155 - 19968: jis0212<<14 | 0x1E<<7 | 0x13, + 25156 - 19968: jis0212<<14 | 0x1E<<7 | 0x14, + 25158 - 19968: jis0212<<14 | 0x1E<<7 | 0x15, + 25159 - 19968: jis0208<<14 | 0x1F<<7 | 0x4F, + 25160 - 19968: jis0208<<14 | 0x4D<<7 | 0x1C, + 25161 - 19968: jis0208<<14 | 0x27<<7 | 0x41, + 25163 - 19968: jis0208<<14 | 0x1B<<7 | 0x49, + 25164 - 19968: jis0212<<14 | 0x1E<<7 | 0x16, + 25165 - 19968: jis0208<<14 | 0x19<<7 | 0x2C, + 25166 - 19968: jis0208<<14 | 0x38<<7 | 0x08, + 25168 - 19968: jis0212<<14 | 0x1E<<7 | 0x17, + 25169 - 19968: jis0212<<14 | 0x1E<<7 | 0x18, + 25170 - 19968: jis0212<<14 | 0x1E<<7 | 0x19, + 25171 - 19968: jis0208<<14 | 0x21<<7 | 0x26, + 25172 - 19968: jis0212<<14 | 0x1E<<7 | 0x1A, + 25173 - 19968: jis0208<<14 | 0x29<<7 | 0x06, + 25174 - 19968: jis0212<<14 | 0x1E<<7 | 0x1B, + 25176 - 19968: jis0208<<14 | 0x21<<7 | 0x50, + 25178 - 19968: jis0212<<14 | 0x1E<<7 | 0x1C, + 25179 - 19968: jis0208<<14 | 0x38<<7 | 0x0B, + 25180 - 19968: jis0212<<14 | 0x1E<<7 | 0x1D, + 25182 - 19968: jis0208<<14 | 0x38<<7 | 0x09, + 25184 - 19968: jis0208<<14 | 0x38<<7 | 0x0C, + 25187 - 19968: jis0208<<14 | 0x38<<7 | 0x0A, + 25188 - 19968: jis0212<<14 | 0x1E<<7 | 0x1E, + 25192 - 19968: jis0208<<14 | 0x38<<7 | 0x0D, + 25197 - 19968: jis0212<<14 | 0x1E<<7 | 0x1F, + 25198 - 19968: jis0208<<14 | 0x29<<7 | 0x10, + 25199 - 19968: jis0212<<14 | 0x1E<<7 | 0x20, + 25201 - 19968: jis0208<<14 | 0x0F<<7 | 0x16, + 25203 - 19968: jis0212<<14 | 0x1E<<7 | 0x21, + 25206 - 19968: jis0208<<14 | 0x28<<7 | 0x3D, + 25209 - 19968: jis0208<<14 | 0x27<<7 | 0x42, + 25210 - 19968: jis0212<<14 | 0x1E<<7 | 0x22, + 25212 - 19968: jis0208<<14 | 0x38<<7 | 0x0E, + 25213 - 19968: jis0212<<14 | 0x1E<<7 | 0x23, + 25214 - 19968: jis0208<<14 | 0x38<<7 | 0x11, + 25215 - 19968: jis0208<<14 | 0x1D<<7 | 0x14, + 25216 - 19968: jis0208<<14 | 0x14<<7 | 0x1A, + 25218 - 19968: jis0208<<14 | 0x38<<7 | 0x0F, + 25219 - 19968: jis0208<<14 | 0x38<<7 | 0x16, + 25220 - 19968: jis0208<<14 | 0x1D<<7 | 0x15, + 25225 - 19968: jis0208<<14 | 0x38<<7 | 0x10, + 25226 - 19968: jis0208<<14 | 0x26<<7 | 0x23, + 25229 - 19968: jis0212<<14 | 0x1E<<7 | 0x24, + 25230 - 19968: jis0212<<14 | 0x1E<<7 | 0x25, + 25231 - 19968: jis0212<<14 | 0x1E<<7 | 0x26, + 25232 - 19968: jis0212<<14 | 0x1E<<7 | 0x27, + 25233 - 19968: jis0208<<14 | 0x2C<<7 | 0x3D, + 25234 - 19968: jis0208<<14 | 0x38<<7 | 0x12, + 25235 - 19968: jis0208<<14 | 0x38<<7 | 0x13, + 25236 - 19968: jis0208<<14 | 0x38<<7 | 0x17, + 25237 - 19968: jis0208<<14 | 0x24<<7 | 0x49, + 25238 - 19968: jis0208<<14 | 0x38<<7 | 0x14, + 25239 - 19968: jis0208<<14 | 0x18<<7 | 0x12, + 25240 - 19968: jis0208<<14 | 0x1F<<7 | 0x3D, + 25243 - 19968: jis0208<<14 | 0x38<<7 | 0x25, + 25244 - 19968: jis0208<<14 | 0x27<<7 | 0x13, + 25246 - 19968: jis0208<<14 | 0x21<<7 | 0x51, + 25254 - 19968: jis0208<<14 | 0x59<<7 | 0x0D, + 25256 - 19968: jis0212<<14 | 0x1E<<7 | 0x29, + 25259 - 19968: jis0208<<14 | 0x27<<7 | 0x43, + 25260 - 19968: jis0208<<14 | 0x39<<7 | 0x0C, + 25265 - 19968: jis0208<<14 | 0x29<<7 | 0x59, + 25267 - 19968: jis0212<<14 | 0x1E<<7 | 0x2A, + 25269 - 19968: jis0208<<14 | 0x23<<7 | 0x50, + 25270 - 19968: jis0212<<14 | 0x1E<<7 | 0x2B, + 25271 - 19968: jis0212<<14 | 0x1E<<7 | 0x2C, + 25273 - 19968: jis0208<<14 | 0x2A<<7 | 0x54, + 25274 - 19968: jis0212<<14 | 0x1E<<7 | 0x2D, + 25275 - 19968: jis0208<<14 | 0x38<<7 | 0x1A, + 25276 - 19968: jis0208<<14 | 0x11<<7 | 0x00, + 25277 - 19968: jis0208<<14 | 0x22<<7 | 0x49, + 25278 - 19968: jis0212<<14 | 0x1E<<7 | 0x2E, + 25279 - 19968: jis0212<<14 | 0x1E<<7 | 0x2F, + 25282 - 19968: jis0208<<14 | 0x38<<7 | 0x23, + 25284 - 19968: jis0212<<14 | 0x1E<<7 | 0x30, + 25285 - 19968: jis0208<<14 | 0x22<<7 | 0x13, + 25286 - 19968: jis0208<<14 | 0x38<<7 | 0x1D, + 25287 - 19968: jis0208<<14 | 0x38<<7 | 0x24, + 25288 - 19968: jis0208<<14 | 0x38<<7 | 0x1F, + 25289 - 19968: jis0208<<14 | 0x38<<7 | 0x26, + 25290 - 19968: jis0208<<14 | 0x38<<7 | 0x22, + 25292 - 19968: jis0208<<14 | 0x38<<7 | 0x21, + 25293 - 19968: jis0208<<14 | 0x26<<7 | 0x4E, + 25294 - 19968: jis0212<<14 | 0x1E<<7 | 0x31, + 25295 - 19968: jis0208<<14 | 0x38<<7 | 0x1B, + 25296 - 19968: jis0208<<14 | 0x11<<7 | 0x5C, + 25297 - 19968: jis0208<<14 | 0x38<<7 | 0x19, + 25298 - 19968: jis0208<<14 | 0x14<<7 | 0x50, + 25299 - 19968: jis0208<<14 | 0x21<<7 | 0x52, + 25300 - 19968: jis0208<<14 | 0x38<<7 | 0x15, + 25301 - 19968: jis0212<<14 | 0x1E<<7 | 0x32, + 25302 - 19968: jis0212<<14 | 0x1E<<7 | 0x33, + 25303 - 19968: jis0208<<14 | 0x38<<7 | 0x18, + 25304 - 19968: jis0208<<14 | 0x18<<7 | 0x13, + 25305 - 19968: jis0208<<14 | 0x1F<<7 | 0x3A, + 25306 - 19968: jis0212<<14 | 0x1E<<7 | 0x34, + 25307 - 19968: jis0208<<14 | 0x1D<<7 | 0x16, + 25308 - 19968: jis0208<<14 | 0x38<<7 | 0x20, + 25309 - 19968: jis0208<<14 | 0x26<<7 | 0x31, + 25312 - 19968: jis0208<<14 | 0x14<<7 | 0x51, + 25313 - 19968: jis0208<<14 | 0x12<<7 | 0x27, + 25322 - 19968: jis0212<<14 | 0x1E<<7 | 0x35, + 25324 - 19968: jis0208<<14 | 0x12<<7 | 0x46, + 25325 - 19968: jis0208<<14 | 0x1E<<7 | 0x00, + 25326 - 19968: jis0208<<14 | 0x38<<7 | 0x28, + 25327 - 19968: jis0208<<14 | 0x38<<7 | 0x2D, + 25329 - 19968: jis0208<<14 | 0x38<<7 | 0x29, + 25330 - 19968: jis0212<<14 | 0x1E<<7 | 0x36, + 25331 - 19968: jis0208<<14 | 0x16<<7 | 0x5C, + 25332 - 19968: jis0212<<14 | 0x1E<<7 | 0x37, + 25333 - 19968: jis0208<<14 | 0x38<<7 | 0x2E, + 25334 - 19968: jis0208<<14 | 0x1A<<7 | 0x01, + 25335 - 19968: jis0208<<14 | 0x18<<7 | 0x48, + 25340 - 19968: jis0212<<14 | 0x1E<<7 | 0x38, + 25341 - 19968: jis0212<<14 | 0x1E<<7 | 0x39, + 25342 - 19968: jis0208<<14 | 0x1C<<7 | 0x05, + 25343 - 19968: jis0208<<14 | 0x38<<7 | 0x1C, + 25345 - 19968: jis0208<<14 | 0x1A<<7 | 0x5C, + 25346 - 19968: jis0208<<14 | 0x38<<7 | 0x2B, + 25347 - 19968: jis0212<<14 | 0x1E<<7 | 0x3A, + 25348 - 19968: jis0212<<14 | 0x1E<<7 | 0x3B, + 25351 - 19968: jis0208<<14 | 0x1A<<7 | 0x37, + 25352 - 19968: jis0208<<14 | 0x38<<7 | 0x2C, + 25353 - 19968: jis0208<<14 | 0x0F<<7 | 0x23, + 25354 - 19968: jis0212<<14 | 0x1E<<7 | 0x3C, + 25355 - 19968: jis0212<<14 | 0x1E<<7 | 0x3D, + 25356 - 19968: jis0208<<14 | 0x38<<7 | 0x27, + 25357 - 19968: jis0212<<14 | 0x1E<<7 | 0x3E, + 25360 - 19968: jis0212<<14 | 0x1E<<7 | 0x3F, + 25361 - 19968: jis0208<<14 | 0x23<<7 | 0x08, + 25363 - 19968: jis0212<<14 | 0x1E<<7 | 0x40, + 25366 - 19968: jis0212<<14 | 0x1E<<7 | 0x41, + 25368 - 19968: jis0212<<14 | 0x1E<<7 | 0x42, + 25369 - 19968: jis0208<<14 | 0x14<<7 | 0x52, + 25375 - 19968: jis0208<<14 | 0x15<<7 | 0x13, + 25383 - 19968: jis0208<<14 | 0x38<<7 | 0x2A, + 25384 - 19968: jis0208<<14 | 0x0F<<7 | 0x06, + 25385 - 19968: jis0212<<14 | 0x1E<<7 | 0x43, + 25386 - 19968: jis0212<<14 | 0x1E<<7 | 0x44, + 25387 - 19968: jis0208<<14 | 0x19<<7 | 0x22, + 25389 - 19968: jis0212<<14 | 0x1E<<7 | 0x45, + 25391 - 19968: jis0208<<14 | 0x1E<<7 | 0x15, + 25397 - 19968: jis0212<<14 | 0x1E<<7 | 0x46, + 25398 - 19968: jis0212<<14 | 0x1E<<7 | 0x47, + 25401 - 19968: jis0212<<14 | 0x1E<<7 | 0x48, + 25402 - 19968: jis0208<<14 | 0x23<<7 | 0x51, + 25404 - 19968: jis0212<<14 | 0x1E<<7 | 0x49, + 25405 - 19968: jis0208<<14 | 0x27<<7 | 0x33, + 25406 - 19968: jis0208<<14 | 0x38<<7 | 0x30, + 25407 - 19968: jis0208<<14 | 0x20<<7 | 0x3D, + 25409 - 19968: jis0212<<14 | 0x1E<<7 | 0x4A, + 25410 - 19968: jis0212<<14 | 0x1E<<7 | 0x4B, + 25411 - 19968: jis0212<<14 | 0x1E<<7 | 0x4C, + 25412 - 19968: jis0212<<14 | 0x1E<<7 | 0x4D, + 25414 - 19968: jis0212<<14 | 0x1E<<7 | 0x4E, + 25417 - 19968: jis0208<<14 | 0x21<<7 | 0x09, + 25418 - 19968: jis0212<<14 | 0x1E<<7 | 0x4F, + 25419 - 19968: jis0212<<14 | 0x1E<<7 | 0x50, + 25420 - 19968: jis0208<<14 | 0x1A<<7 | 0x0A, + 25421 - 19968: jis0208<<14 | 0x38<<7 | 0x31, + 25422 - 19968: jis0212<<14 | 0x1E<<7 | 0x51, + 25423 - 19968: jis0208<<14 | 0x38<<7 | 0x33, + 25424 - 19968: jis0208<<14 | 0x38<<7 | 0x2F, + 25426 - 19968: jis0212<<14 | 0x1E<<7 | 0x52, + 25427 - 19968: jis0212<<14 | 0x1E<<7 | 0x53, + 25428 - 19968: jis0212<<14 | 0x1E<<7 | 0x54, + 25429 - 19968: jis0208<<14 | 0x29<<7 | 0x40, + 25431 - 19968: jis0208<<14 | 0x23<<7 | 0x1C, + 25432 - 19968: jis0212<<14 | 0x1E<<7 | 0x55, + 25435 - 19968: jis0212<<14 | 0x1E<<7 | 0x56, + 25436 - 19968: jis0208<<14 | 0x20<<7 | 0x3B, + 25445 - 19968: jis0212<<14 | 0x1E<<7 | 0x57, + 25446 - 19968: jis0212<<14 | 0x1E<<7 | 0x58, + 25447 - 19968: jis0208<<14 | 0x29<<7 | 0x5A, + 25448 - 19968: jis0208<<14 | 0x1B<<7 | 0x2D, + 25449 - 19968: jis0208<<14 | 0x38<<7 | 0x3F, + 25451 - 19968: jis0208<<14 | 0x38<<7 | 0x3E, + 25452 - 19968: jis0212<<14 | 0x1E<<7 | 0x59, + 25453 - 19968: jis0212<<14 | 0x1E<<7 | 0x5A, + 25454 - 19968: jis0208<<14 | 0x1E<<7 | 0x57, + 25457 - 19968: jis0212<<14 | 0x1E<<7 | 0x5B, + 25458 - 19968: jis0208<<14 | 0x16<<7 | 0x5D, + 25460 - 19968: jis0212<<14 | 0x1E<<7 | 0x5C, + 25461 - 19968: jis0212<<14 | 0x1E<<7 | 0x5D, + 25462 - 19968: jis0208<<14 | 0x38<<7 | 0x38, + 25463 - 19968: jis0208<<14 | 0x1D<<7 | 0x18, + 25464 - 19968: jis0212<<14 | 0x1F<<7 | 0x00, + 25466 - 19968: jis0208<<14 | 0x25<<7 | 0x47, + 25467 - 19968: jis0208<<14 | 0x26<<7 | 0x10, + 25468 - 19968: jis0212<<14 | 0x1F<<7 | 0x01, + 25469 - 19968: jis0212<<14 | 0x1F<<7 | 0x02, + 25471 - 19968: jis0212<<14 | 0x1F<<7 | 0x03, + 25472 - 19968: jis0208<<14 | 0x38<<7 | 0x36, + 25474 - 19968: jis0212<<14 | 0x1F<<7 | 0x04, + 25475 - 19968: jis0208<<14 | 0x20<<7 | 0x3C, + 25476 - 19968: jis0212<<14 | 0x1F<<7 | 0x05, + 25479 - 19968: jis0212<<14 | 0x1F<<7 | 0x06, + 25480 - 19968: jis0208<<14 | 0x1B<<7 | 0x57, + 25481 - 19968: jis0208<<14 | 0x38<<7 | 0x3B, + 25482 - 19968: jis0212<<14 | 0x1F<<7 | 0x07, + 25484 - 19968: jis0208<<14 | 0x1D<<7 | 0x17, + 25486 - 19968: jis0208<<14 | 0x38<<7 | 0x35, + 25487 - 19968: jis0208<<14 | 0x38<<7 | 0x3A, + 25488 - 19968: jis0212<<14 | 0x1F<<7 | 0x08, + 25490 - 19968: jis0208<<14 | 0x26<<7 | 0x32, + 25492 - 19968: jis0212<<14 | 0x1F<<7 | 0x09, + 25493 - 19968: jis0212<<14 | 0x1F<<7 | 0x0A, + 25494 - 19968: jis0208<<14 | 0x38<<7 | 0x34, + 25496 - 19968: jis0208<<14 | 0x16<<7 | 0x00, + 25497 - 19968: jis0212<<14 | 0x1F<<7 | 0x0B, + 25498 - 19968: jis0212<<14 | 0x1F<<7 | 0x0C, + 25499 - 19968: jis0208<<14 | 0x12<<7 | 0x3C, + 25502 - 19968: jis0212<<14 | 0x1F<<7 | 0x0D, + 25503 - 19968: jis0208<<14 | 0x38<<7 | 0x3C, + 25504 - 19968: jis0208<<14 | 0x2D<<7 | 0x0A, + 25505 - 19968: jis0208<<14 | 0x19<<7 | 0x2D, + 25506 - 19968: jis0208<<14 | 0x22<<7 | 0x14, + 25507 - 19968: jis0208<<14 | 0x38<<7 | 0x39, + 25508 - 19968: jis0212<<14 | 0x1F<<7 | 0x0E, + 25509 - 19968: jis0208<<14 | 0x1F<<7 | 0x3B, + 25510 - 19968: jis0212<<14 | 0x1F<<7 | 0x0F, + 25511 - 19968: jis0208<<14 | 0x18<<7 | 0x14, + 25512 - 19968: jis0208<<14 | 0x1E<<7 | 0x43, + 25513 - 19968: jis0208<<14 | 0x10<<7 | 0x45, + 25514 - 19968: jis0208<<14 | 0x20<<7 | 0x1B, + 25515 - 19968: jis0208<<14 | 0x38<<7 | 0x37, + 25516 - 19968: jis0208<<14 | 0x14<<7 | 0x24, + 25517 - 19968: jis0212<<14 | 0x1F<<7 | 0x10, + 25518 - 19968: jis0212<<14 | 0x1F<<7 | 0x11, + 25519 - 19968: jis0212<<14 | 0x1F<<7 | 0x12, + 25522 - 19968: jis0208<<14 | 0x16<<7 | 0x26, + 25524 - 19968: jis0208<<14 | 0x23<<7 | 0x2E, + 25525 - 19968: jis0208<<14 | 0x38<<7 | 0x3D, + 25531 - 19968: jis0208<<14 | 0x20<<7 | 0x3E, + 25533 - 19968: jis0212<<14 | 0x1F<<7 | 0x13, + 25534 - 19968: jis0208<<14 | 0x38<<7 | 0x40, + 25536 - 19968: jis0208<<14 | 0x38<<7 | 0x42, + 25537 - 19968: jis0212<<14 | 0x1F<<7 | 0x14, + 25539 - 19968: jis0208<<14 | 0x21<<7 | 0x16, + 25540 - 19968: jis0208<<14 | 0x38<<7 | 0x48, + 25541 - 19968: jis0212<<14 | 0x1F<<7 | 0x15, + 25542 - 19968: jis0208<<14 | 0x38<<7 | 0x43, + 25544 - 19968: jis0212<<14 | 0x1F<<7 | 0x16, + 25545 - 19968: jis0208<<14 | 0x38<<7 | 0x45, + 25550 - 19968: jis0212<<14 | 0x1F<<7 | 0x17, + 25551 - 19968: jis0208<<14 | 0x28<<7 | 0x20, + 25552 - 19968: jis0208<<14 | 0x23<<7 | 0x52, + 25553 - 19968: jis0212<<14 | 0x1F<<7 | 0x18, + 25554 - 19968: jis0208<<14 | 0x38<<7 | 0x46, + 25555 - 19968: jis0212<<14 | 0x1F<<7 | 0x19, + 25556 - 19968: jis0212<<14 | 0x1F<<7 | 0x1A, + 25557 - 19968: jis0212<<14 | 0x1F<<7 | 0x1B, + 25558 - 19968: jis0208<<14 | 0x2C<<7 | 0x0B, + 25562 - 19968: jis0208<<14 | 0x2C<<7 | 0x27, + 25563 - 19968: jis0208<<14 | 0x13<<7 | 0x18, + 25564 - 19968: jis0212<<14 | 0x1F<<7 | 0x1C, + 25568 - 19968: jis0212<<14 | 0x1F<<7 | 0x1D, + 25569 - 19968: jis0208<<14 | 0x0F<<7 | 0x0D, + 25571 - 19968: jis0208<<14 | 0x38<<7 | 0x44, + 25573 - 19968: jis0212<<14 | 0x1F<<7 | 0x1E, + 25577 - 19968: jis0208<<14 | 0x38<<7 | 0x41, + 25578 - 19968: jis0212<<14 | 0x1F<<7 | 0x1F, + 25580 - 19968: jis0212<<14 | 0x1F<<7 | 0x20, + 25582 - 19968: jis0208<<14 | 0x13<<7 | 0x57, + 25586 - 19968: jis0212<<14 | 0x1F<<7 | 0x21, + 25587 - 19968: jis0212<<14 | 0x1F<<7 | 0x22, + 25588 - 19968: jis0208<<14 | 0x10<<7 | 0x46, + 25589 - 19968: jis0208<<14 | 0x59<<7 | 0x0E, + 25590 - 19968: jis0208<<14 | 0x38<<7 | 0x47, + 25592 - 19968: jis0212<<14 | 0x1F<<7 | 0x24, + 25593 - 19968: jis0212<<14 | 0x1F<<7 | 0x25, + 25594 - 19968: jis0208<<14 | 0x2C<<7 | 0x28, + 25606 - 19968: jis0208<<14 | 0x38<<7 | 0x4B, + 25609 - 19968: jis0212<<14 | 0x1F<<7 | 0x26, + 25610 - 19968: jis0212<<14 | 0x1F<<7 | 0x27, + 25613 - 19968: jis0208<<14 | 0x21<<7 | 0x1A, + 25615 - 19968: jis0208<<14 | 0x38<<7 | 0x52, + 25616 - 19968: jis0212<<14 | 0x1F<<7 | 0x28, + 25618 - 19968: jis0212<<14 | 0x1F<<7 | 0x29, + 25619 - 19968: jis0208<<14 | 0x38<<7 | 0x4C, + 25620 - 19968: jis0212<<14 | 0x1F<<7 | 0x2A, + 25622 - 19968: jis0208<<14 | 0x38<<7 | 0x49, + 25623 - 19968: jis0208<<14 | 0x38<<7 | 0x50, + 25624 - 19968: jis0212<<14 | 0x1F<<7 | 0x2B, + 25628 - 19968: jis0208<<14 | 0x38<<7 | 0x32, + 25630 - 19968: jis0212<<14 | 0x1F<<7 | 0x2C, + 25632 - 19968: jis0212<<14 | 0x1F<<7 | 0x2D, + 25634 - 19968: jis0212<<14 | 0x1F<<7 | 0x2E, + 25636 - 19968: jis0212<<14 | 0x1F<<7 | 0x2F, + 25637 - 19968: jis0212<<14 | 0x1F<<7 | 0x30, + 25638 - 19968: jis0208<<14 | 0x38<<7 | 0x4D, + 25640 - 19968: jis0208<<14 | 0x38<<7 | 0x51, + 25641 - 19968: jis0212<<14 | 0x1F<<7 | 0x31, + 25642 - 19968: jis0212<<14 | 0x1F<<7 | 0x32, + 25644 - 19968: jis0208<<14 | 0x27<<7 | 0x21, + 25645 - 19968: jis0208<<14 | 0x24<<7 | 0x4A, + 25647 - 19968: jis0212<<14 | 0x1F<<7 | 0x33, + 25648 - 19968: jis0212<<14 | 0x1F<<7 | 0x34, + 25652 - 19968: jis0208<<14 | 0x38<<7 | 0x4A, + 25653 - 19968: jis0212<<14 | 0x1F<<7 | 0x35, + 25654 - 19968: jis0208<<14 | 0x38<<7 | 0x4E, + 25658 - 19968: jis0208<<14 | 0x16<<7 | 0x27, + 25661 - 19968: jis0212<<14 | 0x1F<<7 | 0x36, + 25662 - 19968: jis0208<<14 | 0x19<<7 | 0x50, + 25663 - 19968: jis0212<<14 | 0x1F<<7 | 0x37, + 25666 - 19968: jis0208<<14 | 0x1F<<7 | 0x3C, + 25675 - 19968: jis0212<<14 | 0x1F<<7 | 0x38, + 25678 - 19968: jis0208<<14 | 0x38<<7 | 0x56, + 25679 - 19968: jis0212<<14 | 0x1F<<7 | 0x39, + 25681 - 19968: jis0212<<14 | 0x1F<<7 | 0x3A, + 25682 - 19968: jis0212<<14 | 0x1F<<7 | 0x3B, + 25683 - 19968: jis0212<<14 | 0x1F<<7 | 0x3C, + 25684 - 19968: jis0212<<14 | 0x1F<<7 | 0x3D, + 25688 - 19968: jis0208<<14 | 0x24<<7 | 0x05, + 25690 - 19968: jis0212<<14 | 0x1F<<7 | 0x3E, + 25691 - 19968: jis0212<<14 | 0x1F<<7 | 0x3F, + 25692 - 19968: jis0212<<14 | 0x1F<<7 | 0x40, + 25693 - 19968: jis0212<<14 | 0x1F<<7 | 0x41, + 25695 - 19968: jis0212<<14 | 0x1F<<7 | 0x42, + 25696 - 19968: jis0208<<14 | 0x59<<7 | 0x0F, + 25697 - 19968: jis0212<<14 | 0x1F<<7 | 0x44, + 25699 - 19968: jis0212<<14 | 0x1F<<7 | 0x45, + 25703 - 19968: jis0208<<14 | 0x38<<7 | 0x53, + 25705 - 19968: jis0208<<14 | 0x2A<<7 | 0x3F, + 25709 - 19968: jis0212<<14 | 0x1F<<7 | 0x46, + 25711 - 19968: jis0208<<14 | 0x38<<7 | 0x54, + 25715 - 19968: jis0212<<14 | 0x1F<<7 | 0x47, + 25716 - 19968: jis0212<<14 | 0x1F<<7 | 0x48, + 25718 - 19968: jis0208<<14 | 0x38<<7 | 0x55, + 25720 - 19968: jis0208<<14 | 0x2B<<7 | 0x2D, + 25722 - 19968: jis0208<<14 | 0x1F<<7 | 0x01, + 25723 - 19968: jis0212<<14 | 0x1F<<7 | 0x49, + 25725 - 19968: jis0212<<14 | 0x1F<<7 | 0x4A, + 25731 - 19968: jis0208<<14 | 0x16<<7 | 0x41, + 25733 - 19968: jis0212<<14 | 0x1F<<7 | 0x4B, + 25735 - 19968: jis0212<<14 | 0x1F<<7 | 0x4C, + 25736 - 19968: jis0208<<14 | 0x38<<7 | 0x5C, + 25743 - 19968: jis0212<<14 | 0x1F<<7 | 0x4D, + 25744 - 19968: jis0212<<14 | 0x1F<<7 | 0x4E, + 25745 - 19968: jis0212<<14 | 0x1F<<7 | 0x4F, + 25746 - 19968: jis0208<<14 | 0x1A<<7 | 0x14, + 25747 - 19968: jis0208<<14 | 0x38<<7 | 0x59, + 25749 - 19968: jis0208<<14 | 0x38<<7 | 0x58, + 25752 - 19968: jis0212<<14 | 0x1F<<7 | 0x50, + 25753 - 19968: jis0212<<14 | 0x1F<<7 | 0x51, + 25754 - 19968: jis0208<<14 | 0x26<<7 | 0x11, + 25755 - 19968: jis0212<<14 | 0x1F<<7 | 0x52, + 25757 - 19968: jis0208<<14 | 0x59<<7 | 0x10, + 25758 - 19968: jis0208<<14 | 0x25<<7 | 0x14, + 25759 - 19968: jis0212<<14 | 0x1F<<7 | 0x54, + 25761 - 19968: jis0212<<14 | 0x1F<<7 | 0x55, + 25763 - 19968: jis0212<<14 | 0x1F<<7 | 0x56, + 25764 - 19968: jis0208<<14 | 0x24<<7 | 0x10, + 25765 - 19968: jis0208<<14 | 0x38<<7 | 0x5A, + 25766 - 19968: jis0212<<14 | 0x1F<<7 | 0x57, + 25768 - 19968: jis0212<<14 | 0x1F<<7 | 0x58, + 25769 - 19968: jis0208<<14 | 0x38<<7 | 0x5B, + 25771 - 19968: jis0208<<14 | 0x28<<7 | 0x4E, + 25772 - 19968: jis0212<<14 | 0x1F<<7 | 0x59, + 25773 - 19968: jis0208<<14 | 0x26<<7 | 0x24, + 25774 - 19968: jis0208<<14 | 0x1A<<7 | 0x02, + 25776 - 19968: jis0208<<14 | 0x1F<<7 | 0x50, + 25778 - 19968: jis0208<<14 | 0x2A<<7 | 0x2F, + 25779 - 19968: jis0212<<14 | 0x1F<<7 | 0x5A, + 25785 - 19968: jis0208<<14 | 0x12<<7 | 0x28, + 25787 - 19968: jis0208<<14 | 0x39<<7 | 0x04, + 25788 - 19968: jis0208<<14 | 0x38<<7 | 0x5D, + 25789 - 19968: jis0212<<14 | 0x1F<<7 | 0x5B, + 25790 - 19968: jis0212<<14 | 0x1F<<7 | 0x5C, + 25791 - 19968: jis0212<<14 | 0x1F<<7 | 0x5D, + 25793 - 19968: jis0208<<14 | 0x2C<<7 | 0x29, + 25794 - 19968: jis0208<<14 | 0x39<<7 | 0x06, + 25796 - 19968: jis0212<<14 | 0x20<<7 | 0x00, + 25797 - 19968: jis0208<<14 | 0x39<<7 | 0x02, + 25799 - 19968: jis0208<<14 | 0x39<<7 | 0x03, + 25801 - 19968: jis0212<<14 | 0x20<<7 | 0x01, + 25802 - 19968: jis0212<<14 | 0x20<<7 | 0x02, + 25803 - 19968: jis0212<<14 | 0x20<<7 | 0x03, + 25804 - 19968: jis0212<<14 | 0x20<<7 | 0x04, + 25805 - 19968: jis0208<<14 | 0x20<<7 | 0x3F, + 25806 - 19968: jis0208<<14 | 0x59<<7 | 0x11, + 25808 - 19968: jis0212<<14 | 0x20<<7 | 0x06, + 25809 - 19968: jis0212<<14 | 0x20<<7 | 0x07, + 25810 - 19968: jis0208<<14 | 0x39<<7 | 0x01, + 25812 - 19968: jis0208<<14 | 0x38<<7 | 0x1E, + 25813 - 19968: jis0212<<14 | 0x20<<7 | 0x08, + 25815 - 19968: jis0212<<14 | 0x20<<7 | 0x09, + 25816 - 19968: jis0208<<14 | 0x39<<7 | 0x05, + 25818 - 19968: jis0208<<14 | 0x39<<7 | 0x00, + 25824 - 19968: jis0208<<14 | 0x39<<7 | 0x0A, + 25825 - 19968: jis0208<<14 | 0x39<<7 | 0x0B, + 25826 - 19968: jis0208<<14 | 0x24<<7 | 0x06, + 25827 - 19968: jis0208<<14 | 0x39<<7 | 0x0D, + 25828 - 19968: jis0212<<14 | 0x20<<7 | 0x0A, + 25829 - 19968: jis0212<<14 | 0x20<<7 | 0x0B, + 25830 - 19968: jis0208<<14 | 0x1A<<7 | 0x03, + 25831 - 19968: jis0208<<14 | 0x39<<7 | 0x08, + 25833 - 19968: jis0212<<14 | 0x20<<7 | 0x0C, + 25834 - 19968: jis0212<<14 | 0x20<<7 | 0x0D, + 25836 - 19968: jis0208<<14 | 0x14<<7 | 0x1B, + 25837 - 19968: jis0212<<14 | 0x20<<7 | 0x0E, + 25839 - 19968: jis0208<<14 | 0x39<<7 | 0x0E, + 25840 - 19968: jis0212<<14 | 0x20<<7 | 0x0F, + 25841 - 19968: jis0208<<14 | 0x39<<7 | 0x07, + 25842 - 19968: jis0208<<14 | 0x39<<7 | 0x12, + 25844 - 19968: jis0208<<14 | 0x39<<7 | 0x11, + 25845 - 19968: jis0212<<14 | 0x20<<7 | 0x10, + 25846 - 19968: jis0208<<14 | 0x39<<7 | 0x10, + 25847 - 19968: jis0212<<14 | 0x20<<7 | 0x11, + 25850 - 19968: jis0208<<14 | 0x39<<7 | 0x13, + 25851 - 19968: jis0212<<14 | 0x20<<7 | 0x12, + 25853 - 19968: jis0208<<14 | 0x39<<7 | 0x15, + 25854 - 19968: jis0208<<14 | 0x1D<<7 | 0x50, + 25855 - 19968: jis0212<<14 | 0x20<<7 | 0x13, + 25856 - 19968: jis0208<<14 | 0x39<<7 | 0x14, + 25857 - 19968: jis0212<<14 | 0x20<<7 | 0x14, + 25860 - 19968: jis0212<<14 | 0x20<<7 | 0x15, + 25861 - 19968: jis0208<<14 | 0x39<<7 | 0x18, + 25864 - 19968: jis0212<<14 | 0x20<<7 | 0x16, + 25865 - 19968: jis0212<<14 | 0x20<<7 | 0x17, + 25866 - 19968: jis0212<<14 | 0x20<<7 | 0x18, + 25871 - 19968: jis0212<<14 | 0x20<<7 | 0x19, + 25875 - 19968: jis0212<<14 | 0x20<<7 | 0x1A, + 25876 - 19968: jis0212<<14 | 0x20<<7 | 0x1B, + 25878 - 19968: jis0212<<14 | 0x20<<7 | 0x1C, + 25880 - 19968: jis0208<<14 | 0x39<<7 | 0x16, + 25881 - 19968: jis0212<<14 | 0x20<<7 | 0x1D, + 25883 - 19968: jis0212<<14 | 0x20<<7 | 0x1E, + 25884 - 19968: jis0208<<14 | 0x39<<7 | 0x17, + 25885 - 19968: jis0208<<14 | 0x38<<7 | 0x4F, + 25886 - 19968: jis0212<<14 | 0x20<<7 | 0x1F, + 25887 - 19968: jis0212<<14 | 0x20<<7 | 0x20, + 25890 - 19968: jis0212<<14 | 0x20<<7 | 0x21, + 25891 - 19968: jis0208<<14 | 0x39<<7 | 0x1A, + 25892 - 19968: jis0208<<14 | 0x39<<7 | 0x19, + 25894 - 19968: jis0212<<14 | 0x20<<7 | 0x22, + 25897 - 19968: jis0212<<14 | 0x20<<7 | 0x23, + 25898 - 19968: jis0208<<14 | 0x38<<7 | 0x57, + 25899 - 19968: jis0208<<14 | 0x39<<7 | 0x1B, + 25900 - 19968: jis0208<<14 | 0x39<<7 | 0x0F, + 25902 - 19968: jis0212<<14 | 0x20<<7 | 0x24, + 25903 - 19968: jis0208<<14 | 0x1A<<7 | 0x38, + 25905 - 19968: jis0212<<14 | 0x20<<7 | 0x25, + 25908 - 19968: jis0208<<14 | 0x39<<7 | 0x1C, + 25909 - 19968: jis0208<<14 | 0x39<<7 | 0x1D, + 25910 - 19968: jis0208<<14 | 0x39<<7 | 0x1F, + 25911 - 19968: jis0208<<14 | 0x39<<7 | 0x1E, + 25912 - 19968: jis0208<<14 | 0x39<<7 | 0x20, + 25913 - 19968: jis0208<<14 | 0x11<<7 | 0x5D, + 25914 - 19968: jis0212<<14 | 0x20<<7 | 0x26, + 25915 - 19968: jis0208<<14 | 0x18<<7 | 0x15, + 25916 - 19968: jis0212<<14 | 0x20<<7 | 0x27, + 25917 - 19968: jis0212<<14 | 0x20<<7 | 0x28, + 25918 - 19968: jis0208<<14 | 0x29<<7 | 0x5B, + 25919 - 19968: jis0208<<14 | 0x1F<<7 | 0x0E, + 25923 - 19968: jis0212<<14 | 0x20<<7 | 0x29, + 25925 - 19968: jis0208<<14 | 0x17<<7 | 0x2D, + 25927 - 19968: jis0212<<14 | 0x20<<7 | 0x2A, + 25928 - 19968: jis0208<<14 | 0x39<<7 | 0x22, + 25929 - 19968: jis0212<<14 | 0x20<<7 | 0x2B, + 25933 - 19968: jis0208<<14 | 0x39<<7 | 0x25, + 25934 - 19968: jis0208<<14 | 0x59<<7 | 0x12, + 25935 - 19968: jis0208<<14 | 0x28<<7 | 0x31, + 25936 - 19968: jis0212<<14 | 0x20<<7 | 0x2C, + 25937 - 19968: jis0208<<14 | 0x14<<7 | 0x3E, + 25938 - 19968: jis0212<<14 | 0x20<<7 | 0x2D, + 25940 - 19968: jis0212<<14 | 0x20<<7 | 0x2E, + 25941 - 19968: jis0208<<14 | 0x39<<7 | 0x24, + 25942 - 19968: jis0208<<14 | 0x39<<7 | 0x23, + 25943 - 19968: jis0208<<14 | 0x26<<7 | 0x33, + 25944 - 19968: jis0208<<14 | 0x39<<7 | 0x26, + 25945 - 19968: jis0208<<14 | 0x15<<7 | 0x14, + 25949 - 19968: jis0208<<14 | 0x39<<7 | 0x28, + 25950 - 19968: jis0208<<14 | 0x39<<7 | 0x27, + 25951 - 19968: jis0212<<14 | 0x20<<7 | 0x2F, + 25952 - 19968: jis0212<<14 | 0x20<<7 | 0x30, + 25954 - 19968: jis0208<<14 | 0x13<<7 | 0x19, + 25955 - 19968: jis0208<<14 | 0x1A<<7 | 0x15, + 25958 - 19968: jis0208<<14 | 0x25<<7 | 0x37, + 25959 - 19968: jis0212<<14 | 0x20<<7 | 0x31, + 25963 - 19968: jis0212<<14 | 0x20<<7 | 0x32, + 25964 - 19968: jis0208<<14 | 0x16<<7 | 0x28, + 25968 - 19968: jis0208<<14 | 0x1E<<7 | 0x53, + 25970 - 19968: jis0208<<14 | 0x39<<7 | 0x29, + 25972 - 19968: jis0208<<14 | 0x1F<<7 | 0x0F, + 25973 - 19968: jis0208<<14 | 0x24<<7 | 0x07, + 25975 - 19968: jis0208<<14 | 0x28<<7 | 0x3E, + 25976 - 19968: jis0208<<14 | 0x39<<7 | 0x2A, + 25978 - 19968: jis0212<<14 | 0x20<<7 | 0x33, + 25981 - 19968: jis0212<<14 | 0x20<<7 | 0x34, + 25985 - 19968: jis0212<<14 | 0x20<<7 | 0x35, + 25986 - 19968: jis0208<<14 | 0x39<<7 | 0x2B, + 25987 - 19968: jis0208<<14 | 0x39<<7 | 0x2C, + 25989 - 19968: jis0212<<14 | 0x20<<7 | 0x36, + 25991 - 19968: jis0208<<14 | 0x29<<7 | 0x17, + 25992 - 19968: jis0208<<14 | 0x34<<7 | 0x3C, + 25993 - 19968: jis0208<<14 | 0x1F<<7 | 0x25, + 25994 - 19968: jis0212<<14 | 0x20<<7 | 0x37, + 25996 - 19968: jis0208<<14 | 0x28<<7 | 0x2B, + 25998 - 19968: jis0208<<14 | 0x19<<7 | 0x37, + 26000 - 19968: jis0208<<14 | 0x27<<7 | 0x44, + 26001 - 19968: jis0208<<14 | 0x27<<7 | 0x22, + 26002 - 19968: jis0212<<14 | 0x20<<7 | 0x38, + 26005 - 19968: jis0212<<14 | 0x20<<7 | 0x39, + 26007 - 19968: jis0208<<14 | 0x24<<7 | 0x2C, + 26008 - 19968: jis0212<<14 | 0x20<<7 | 0x3A, + 26009 - 19968: jis0208<<14 | 0x2D<<7 | 0x20, + 26011 - 19968: jis0208<<14 | 0x39<<7 | 0x2E, + 26012 - 19968: jis0208<<14 | 0x1B<<7 | 0x2F, + 26013 - 19968: jis0212<<14 | 0x20<<7 | 0x3B, + 26015 - 19968: jis0208<<14 | 0x39<<7 | 0x2F, + 26016 - 19968: jis0212<<14 | 0x20<<7 | 0x3C, + 26017 - 19968: jis0208<<14 | 0x0F<<7 | 0x15, + 26019 - 19968: jis0212<<14 | 0x20<<7 | 0x3D, + 26020 - 19968: jis0208<<14 | 0x15<<7 | 0x33, + 26021 - 19968: jis0208<<14 | 0x1F<<7 | 0x2C, + 26022 - 19968: jis0212<<14 | 0x20<<7 | 0x3E, + 26023 - 19968: jis0208<<14 | 0x28<<7 | 0x3F, + 26027 - 19968: jis0208<<14 | 0x39<<7 | 0x30, + 26028 - 19968: jis0208<<14 | 0x1A<<7 | 0x21, + 26029 - 19968: jis0208<<14 | 0x22<<7 | 0x26, + 26030 - 19968: jis0212<<14 | 0x20<<7 | 0x3F, + 26031 - 19968: jis0208<<14 | 0x1A<<7 | 0x3A, + 26032 - 19968: jis0208<<14 | 0x1E<<7 | 0x16, + 26034 - 19968: jis0212<<14 | 0x20<<7 | 0x40, + 26035 - 19968: jis0212<<14 | 0x20<<7 | 0x41, + 26036 - 19968: jis0212<<14 | 0x20<<7 | 0x42, + 26039 - 19968: jis0208<<14 | 0x39<<7 | 0x31, + 26041 - 19968: jis0208<<14 | 0x29<<7 | 0x5C, + 26044 - 19968: jis0208<<14 | 0x10<<7 | 0x56, + 26045 - 19968: jis0208<<14 | 0x1A<<7 | 0x3B, + 26047 - 19968: jis0212<<14 | 0x20<<7 | 0x43, + 26049 - 19968: jis0208<<14 | 0x39<<7 | 0x34, + 26050 - 19968: jis0212<<14 | 0x20<<7 | 0x44, + 26051 - 19968: jis0208<<14 | 0x39<<7 | 0x32, + 26052 - 19968: jis0208<<14 | 0x39<<7 | 0x35, + 26053 - 19968: jis0208<<14 | 0x2D<<7 | 0x18, + 26054 - 19968: jis0208<<14 | 0x39<<7 | 0x33, + 26056 - 19968: jis0212<<14 | 0x20<<7 | 0x45, + 26057 - 19968: jis0212<<14 | 0x20<<7 | 0x46, + 26059 - 19968: jis0208<<14 | 0x1F<<7 | 0x5A, + 26060 - 19968: jis0208<<14 | 0x39<<7 | 0x36, + 26062 - 19968: jis0212<<14 | 0x20<<7 | 0x47, + 26063 - 19968: jis0208<<14 | 0x21<<7 | 0x11, + 26064 - 19968: jis0212<<14 | 0x20<<7 | 0x48, + 26066 - 19968: jis0208<<14 | 0x39<<7 | 0x37, + 26068 - 19968: jis0212<<14 | 0x20<<7 | 0x49, + 26070 - 19968: jis0212<<14 | 0x20<<7 | 0x4A, + 26071 - 19968: jis0208<<14 | 0x13<<7 | 0x59, + 26072 - 19968: jis0212<<14 | 0x20<<7 | 0x4B, + 26073 - 19968: jis0208<<14 | 0x39<<7 | 0x39, + 26075 - 19968: jis0208<<14 | 0x39<<7 | 0x38, + 26079 - 19968: jis0212<<14 | 0x20<<7 | 0x4C, + 26080 - 19968: jis0208<<14 | 0x39<<7 | 0x3A, + 26081 - 19968: jis0208<<14 | 0x39<<7 | 0x3B, + 26082 - 19968: jis0208<<14 | 0x13<<7 | 0x5A, + 26085 - 19968: jis0208<<14 | 0x25<<7 | 0x5B, + 26086 - 19968: jis0208<<14 | 0x22<<7 | 0x15, + 26087 - 19968: jis0208<<14 | 0x14<<7 | 0x4B, + 26088 - 19968: jis0208<<14 | 0x1A<<7 | 0x3C, + 26089 - 19968: jis0208<<14 | 0x20<<7 | 0x40, + 26092 - 19968: jis0208<<14 | 0x1C<<7 | 0x3B, + 26093 - 19968: jis0208<<14 | 0x0F<<7 | 0x0F, + 26096 - 19968: jis0212<<14 | 0x20<<7 | 0x4D, + 26097 - 19968: jis0208<<14 | 0x39<<7 | 0x3C, + 26098 - 19968: jis0212<<14 | 0x20<<7 | 0x4E, + 26100 - 19968: jis0212<<14 | 0x20<<7 | 0x4F, + 26101 - 19968: jis0212<<14 | 0x20<<7 | 0x50, + 26105 - 19968: jis0212<<14 | 0x20<<7 | 0x51, + 26106 - 19968: jis0208<<14 | 0x11<<7 | 0x01, + 26107 - 19968: jis0208<<14 | 0x39<<7 | 0x40, + 26110 - 19968: jis0212<<14 | 0x20<<7 | 0x52, + 26111 - 19968: jis0212<<14 | 0x20<<7 | 0x53, + 26112 - 19968: jis0208<<14 | 0x59<<7 | 0x13, + 26114 - 19968: jis0208<<14 | 0x18<<7 | 0x16, + 26115 - 19968: jis0208<<14 | 0x39<<7 | 0x3F, + 26116 - 19968: jis0212<<14 | 0x20<<7 | 0x55, + 26118 - 19968: jis0208<<14 | 0x19<<7 | 0x0A, + 26119 - 19968: jis0208<<14 | 0x1D<<7 | 0x19, + 26120 - 19968: jis0212<<14 | 0x20<<7 | 0x56, + 26121 - 19968: jis0208<<14 | 0x59<<7 | 0x16, + 26122 - 19968: jis0208<<14 | 0x39<<7 | 0x3E, + 26124 - 19968: jis0208<<14 | 0x1D<<7 | 0x1A, + 26125 - 19968: jis0212<<14 | 0x20<<7 | 0x58, + 26126 - 19968: jis0208<<14 | 0x2B<<7 | 0x1F, + 26127 - 19968: jis0208<<14 | 0x19<<7 | 0x09, + 26129 - 19968: jis0212<<14 | 0x20<<7 | 0x59, + 26130 - 19968: jis0212<<14 | 0x20<<7 | 0x5A, + 26131 - 19968: jis0208<<14 | 0x0F<<7 | 0x36, + 26132 - 19968: jis0208<<14 | 0x1F<<7 | 0x2D, + 26133 - 19968: jis0208<<14 | 0x59<<7 | 0x14, + 26134 - 19968: jis0212<<14 | 0x20<<7 | 0x5C, + 26140 - 19968: jis0208<<14 | 0x39<<7 | 0x45, + 26141 - 19968: jis0212<<14 | 0x20<<7 | 0x5D, + 26142 - 19968: jis0208<<14 | 0x59<<7 | 0x18, + 26143 - 19968: jis0208<<14 | 0x1F<<7 | 0x10, + 26144 - 19968: jis0208<<14 | 0x10<<7 | 0x26, + 26145 - 19968: jis0212<<14 | 0x21<<7 | 0x01, + 26146 - 19968: jis0212<<14 | 0x21<<7 | 0x02, + 26147 - 19968: jis0212<<14 | 0x21<<7 | 0x03, + 26148 - 19968: jis0208<<14 | 0x59<<7 | 0x19, + 26149 - 19968: jis0208<<14 | 0x1C<<7 | 0x34, + 26150 - 19968: jis0212<<14 | 0x21<<7 | 0x05, + 26151 - 19968: jis0208<<14 | 0x2A<<7 | 0x45, + 26152 - 19968: jis0208<<14 | 0x19<<7 | 0x51, + 26153 - 19968: jis0212<<14 | 0x21<<7 | 0x06, + 26154 - 19968: jis0212<<14 | 0x21<<7 | 0x07, + 26155 - 19968: jis0212<<14 | 0x21<<7 | 0x08, + 26156 - 19968: jis0212<<14 | 0x21<<7 | 0x09, + 26157 - 19968: jis0208<<14 | 0x1D<<7 | 0x1B, + 26158 - 19968: jis0208<<14 | 0x59<<7 | 0x17, + 26159 - 19968: jis0208<<14 | 0x1F<<7 | 0x06, + 26160 - 19968: jis0212<<14 | 0x21<<7 | 0x0B, + 26161 - 19968: jis0208<<14 | 0x58<<7 | 0x07, + 26163 - 19968: jis0212<<14 | 0x21<<7 | 0x0D, + 26164 - 19968: jis0208<<14 | 0x39<<7 | 0x44, + 26165 - 19968: jis0208<<14 | 0x39<<7 | 0x42, + 26166 - 19968: jis0208<<14 | 0x39<<7 | 0x43, + 26167 - 19968: jis0212<<14 | 0x21<<7 | 0x0F, + 26169 - 19968: jis0212<<14 | 0x21<<7 | 0x0E, + 26171 - 19968: jis0208<<14 | 0x59<<7 | 0x15, + 26172 - 19968: jis0208<<14 | 0x22<<7 | 0x4A, + 26175 - 19968: jis0208<<14 | 0x3A<<7 | 0x05, + 26176 - 19968: jis0212<<14 | 0x21<<7 | 0x10, + 26177 - 19968: jis0208<<14 | 0x39<<7 | 0x49, + 26178 - 19968: jis0208<<14 | 0x1A<<7 | 0x5D, + 26179 - 19968: jis0208<<14 | 0x18<<7 | 0x17, + 26180 - 19968: jis0208<<14 | 0x39<<7 | 0x47, + 26181 - 19968: jis0212<<14 | 0x21<<7 | 0x11, + 26182 - 19968: jis0212<<14 | 0x21<<7 | 0x12, + 26185 - 19968: jis0208<<14 | 0x39<<7 | 0x48, + 26186 - 19968: jis0212<<14 | 0x21<<7 | 0x13, + 26187 - 19968: jis0208<<14 | 0x1E<<7 | 0x17, + 26188 - 19968: jis0212<<14 | 0x21<<7 | 0x14, + 26190 - 19968: jis0212<<14 | 0x21<<7 | 0x16, + 26191 - 19968: jis0208<<14 | 0x39<<7 | 0x46, + 26193 - 19968: jis0212<<14 | 0x21<<7 | 0x15, + 26194 - 19968: jis0208<<14 | 0x1A<<7 | 0x0E, + 26199 - 19968: jis0208<<14 | 0x59<<7 | 0x1B, + 26200 - 19968: jis0212<<14 | 0x21<<7 | 0x18, + 26201 - 19968: jis0208<<14 | 0x59<<7 | 0x1C, + 26203 - 19968: jis0212<<14 | 0x21<<7 | 0x1A, + 26204 - 19968: jis0212<<14 | 0x21<<7 | 0x1B, + 26205 - 19968: jis0208<<14 | 0x39<<7 | 0x4B, + 26206 - 19968: jis0208<<14 | 0x39<<7 | 0x4A, + 26207 - 19968: jis0208<<14 | 0x39<<7 | 0x4F, + 26208 - 19968: jis0212<<14 | 0x21<<7 | 0x1C, + 26209 - 19968: jis0212<<14 | 0x21<<7 | 0x1D, + 26210 - 19968: jis0208<<14 | 0x39<<7 | 0x50, + 26212 - 19968: jis0208<<14 | 0x39<<7 | 0x4C, + 26213 - 19968: jis0208<<14 | 0x59<<7 | 0x1A, + 26214 - 19968: jis0208<<14 | 0x12<<7 | 0x01, + 26215 - 19968: jis0208<<14 | 0x39<<7 | 0x4D, + 26216 - 19968: jis0208<<14 | 0x39<<7 | 0x4E, + 26217 - 19968: jis0208<<14 | 0x27<<7 | 0x34, + 26218 - 19968: jis0212<<14 | 0x21<<7 | 0x1F, + 26219 - 19968: jis0212<<14 | 0x21<<7 | 0x20, + 26220 - 19968: jis0212<<14 | 0x21<<7 | 0x21, + 26222 - 19968: jis0208<<14 | 0x28<<7 | 0x40, + 26223 - 19968: jis0208<<14 | 0x16<<7 | 0x29, + 26224 - 19968: jis0208<<14 | 0x39<<7 | 0x51, + 26227 - 19968: jis0208<<14 | 0x59<<7 | 0x1E, + 26228 - 19968: jis0208<<14 | 0x1F<<7 | 0x11, + 26229 - 19968: jis0212<<14 | 0x21<<7 | 0x24, + 26230 - 19968: jis0208<<14 | 0x1D<<7 | 0x1C, + 26231 - 19968: jis0212<<14 | 0x21<<7 | 0x26, + 26232 - 19968: jis0212<<14 | 0x21<<7 | 0x27, + 26233 - 19968: jis0212<<14 | 0x21<<7 | 0x28, + 26234 - 19968: jis0208<<14 | 0x22<<7 | 0x31, + 26235 - 19968: jis0212<<14 | 0x21<<7 | 0x29, + 26236 - 19968: jis0212<<14 | 0x21<<7 | 0x2B, + 26238 - 19968: jis0212<<14 | 0x21<<7 | 0x22, + 26239 - 19968: jis0212<<14 | 0x21<<7 | 0x25, + 26240 - 19968: jis0212<<14 | 0x21<<7 | 0x2A, + 26241 - 19968: jis0208<<14 | 0x15<<7 | 0x26, + 26243 - 19968: jis0208<<14 | 0x39<<7 | 0x52, + 26244 - 19968: jis0208<<14 | 0x39<<7 | 0x56, + 26247 - 19968: jis0208<<14 | 0x11<<7 | 0x2A, + 26248 - 19968: jis0208<<14 | 0x39<<7 | 0x53, + 26249 - 19968: jis0208<<14 | 0x39<<7 | 0x55, + 26251 - 19968: jis0212<<14 | 0x21<<7 | 0x2C, + 26252 - 19968: jis0212<<14 | 0x21<<7 | 0x2D, + 26253 - 19968: jis0212<<14 | 0x21<<7 | 0x2E, + 26254 - 19968: jis0208<<14 | 0x39<<7 | 0x54, + 26256 - 19968: jis0212<<14 | 0x21<<7 | 0x2F, + 26257 - 19968: jis0208<<14 | 0x1C<<7 | 0x4A, + 26258 - 19968: jis0212<<14 | 0x21<<7 | 0x30, + 26262 - 19968: jis0208<<14 | 0x22<<7 | 0x27, + 26263 - 19968: jis0208<<14 | 0x0F<<7 | 0x24, + 26264 - 19968: jis0208<<14 | 0x39<<7 | 0x57, + 26265 - 19968: jis0208<<14 | 0x59<<7 | 0x1F, + 26266 - 19968: jis0212<<14 | 0x21<<7 | 0x32, + 26267 - 19968: jis0212<<14 | 0x21<<7 | 0x33, + 26268 - 19968: jis0212<<14 | 0x21<<7 | 0x34, + 26269 - 19968: jis0208<<14 | 0x39<<7 | 0x58, + 26271 - 19968: jis0212<<14 | 0x21<<7 | 0x35, + 26272 - 19968: jis0208<<14 | 0x59<<7 | 0x20, + 26274 - 19968: jis0208<<14 | 0x23<<7 | 0x09, + 26276 - 19968: jis0212<<14 | 0x21<<7 | 0x37, + 26278 - 19968: jis0208<<14 | 0x2D<<7 | 0x50, + 26283 - 19968: jis0208<<14 | 0x1A<<7 | 0x22, + 26285 - 19968: jis0212<<14 | 0x21<<7 | 0x38, + 26286 - 19968: jis0208<<14 | 0x29<<7 | 0x4A, + 26289 - 19968: jis0212<<14 | 0x21<<7 | 0x39, + 26290 - 19968: jis0208<<14 | 0x59<<7 | 0x21, + 26292 - 19968: jis0208<<14 | 0x2A<<7 | 0x1C, + 26293 - 19968: jis0212<<14 | 0x21<<7 | 0x3B, + 26296 - 19968: jis0208<<14 | 0x3A<<7 | 0x01, + 26297 - 19968: jis0208<<14 | 0x39<<7 | 0x5A, + 26299 - 19968: jis0212<<14 | 0x21<<7 | 0x3C, + 26300 - 19968: jis0208<<14 | 0x39<<7 | 0x5D, + 26302 - 19968: jis0208<<14 | 0x39<<7 | 0x5C, + 26303 - 19968: jis0208<<14 | 0x59<<7 | 0x22, + 26304 - 19968: jis0212<<14 | 0x21<<7 | 0x3E, + 26305 - 19968: jis0208<<14 | 0x39<<7 | 0x59, + 26306 - 19968: jis0212<<14 | 0x21<<7 | 0x3F, + 26307 - 19968: jis0212<<14 | 0x21<<7 | 0x40, + 26308 - 19968: jis0208<<14 | 0x3A<<7 | 0x00, + 26311 - 19968: jis0208<<14 | 0x25<<7 | 0x3D, + 26312 - 19968: jis0212<<14 | 0x21<<7 | 0x41, + 26313 - 19968: jis0208<<14 | 0x39<<7 | 0x5B, + 26316 - 19968: jis0212<<14 | 0x21<<7 | 0x42, + 26318 - 19968: jis0212<<14 | 0x21<<7 | 0x43, + 26319 - 19968: jis0212<<14 | 0x21<<7 | 0x44, + 26324 - 19968: jis0212<<14 | 0x21<<7 | 0x45, + 26326 - 19968: jis0208<<14 | 0x3A<<7 | 0x02, + 26329 - 19968: jis0208<<14 | 0x1C<<7 | 0x4B, + 26330 - 19968: jis0208<<14 | 0x3A<<7 | 0x03, + 26331 - 19968: jis0212<<14 | 0x21<<7 | 0x46, + 26332 - 19968: jis0208<<14 | 0x2C<<7 | 0x2A, + 26333 - 19968: jis0208<<14 | 0x26<<7 | 0x57, + 26335 - 19968: jis0212<<14 | 0x21<<7 | 0x47, + 26336 - 19968: jis0208<<14 | 0x3A<<7 | 0x04, + 26342 - 19968: jis0208<<14 | 0x3A<<7 | 0x06, + 26344 - 19968: jis0212<<14 | 0x21<<7 | 0x48, + 26345 - 19968: jis0208<<14 | 0x3A<<7 | 0x07, + 26347 - 19968: jis0212<<14 | 0x21<<7 | 0x49, + 26348 - 19968: jis0212<<14 | 0x21<<7 | 0x4A, + 26350 - 19968: jis0212<<14 | 0x21<<7 | 0x4B, + 26352 - 19968: jis0208<<14 | 0x3A<<7 | 0x08, + 26354 - 19968: jis0208<<14 | 0x15<<7 | 0x29, + 26355 - 19968: jis0208<<14 | 0x10<<7 | 0x27, + 26356 - 19968: jis0208<<14 | 0x18<<7 | 0x18, + 26357 - 19968: jis0208<<14 | 0x3A<<7 | 0x09, + 26359 - 19968: jis0208<<14 | 0x3A<<7 | 0x0A, + 26360 - 19968: jis0208<<14 | 0x1C<<7 | 0x50, + 26361 - 19968: jis0208<<14 | 0x20<<7 | 0x41, + 26362 - 19968: jis0208<<14 | 0x59<<7 | 0x23, + 26363 - 19968: jis0208<<14 | 0x58<<7 | 0x0A, + 26364 - 19968: jis0208<<14 | 0x31<<7 | 0x37, + 26365 - 19968: jis0208<<14 | 0x20<<7 | 0x1D, + 26366 - 19968: jis0208<<14 | 0x20<<7 | 0x1C, + 26367 - 19968: jis0208<<14 | 0x21<<7 | 0x37, + 26368 - 19968: jis0208<<14 | 0x19<<7 | 0x26, + 26371 - 19968: jis0208<<14 | 0x2F<<7 | 0x51, + 26373 - 19968: jis0212<<14 | 0x21<<7 | 0x4D, + 26375 - 19968: jis0212<<14 | 0x21<<7 | 0x4E, + 26376 - 19968: jis0208<<14 | 0x16<<7 | 0x4D, + 26377 - 19968: jis0208<<14 | 0x2C<<7 | 0x0C, + 26379 - 19968: jis0208<<14 | 0x29<<7 | 0x5D, + 26381 - 19968: jis0208<<14 | 0x28<<7 | 0x5D, + 26382 - 19968: jis0208<<14 | 0x59<<7 | 0x24, + 26383 - 19968: jis0208<<14 | 0x3A<<7 | 0x0B, + 26387 - 19968: jis0212<<14 | 0x21<<7 | 0x50, + 26388 - 19968: jis0208<<14 | 0x19<<7 | 0x52, + 26389 - 19968: jis0208<<14 | 0x23<<7 | 0x1E, + 26390 - 19968: jis0208<<14 | 0x3A<<7 | 0x0C, + 26391 - 19968: jis0208<<14 | 0x2E<<7 | 0x0E, + 26393 - 19968: jis0212<<14 | 0x21<<7 | 0x51, + 26395 - 19968: jis0208<<14 | 0x2A<<7 | 0x1D, + 26396 - 19968: jis0212<<14 | 0x21<<7 | 0x52, + 26397 - 19968: jis0208<<14 | 0x23<<7 | 0x0A, + 26398 - 19968: jis0208<<14 | 0x3A<<7 | 0x0D, + 26399 - 19968: jis0208<<14 | 0x13<<7 | 0x5B, + 26400 - 19968: jis0212<<14 | 0x21<<7 | 0x53, + 26402 - 19968: jis0212<<14 | 0x21<<7 | 0x54, + 26406 - 19968: jis0208<<14 | 0x3A<<7 | 0x0E, + 26407 - 19968: jis0208<<14 | 0x3A<<7 | 0x0F, + 26408 - 19968: jis0208<<14 | 0x2B<<7 | 0x39, + 26410 - 19968: jis0208<<14 | 0x2B<<7 | 0x03, + 26411 - 19968: jis0208<<14 | 0x2A<<7 | 0x55, + 26412 - 19968: jis0208<<14 | 0x2A<<7 | 0x3B, + 26413 - 19968: jis0208<<14 | 0x1A<<7 | 0x04, + 26414 - 19968: jis0208<<14 | 0x3A<<7 | 0x11, + 26417 - 19968: jis0208<<14 | 0x1B<<7 | 0x4A, + 26419 - 19968: jis0212<<14 | 0x21<<7 | 0x55, + 26420 - 19968: jis0208<<14 | 0x2A<<7 | 0x30, + 26422 - 19968: jis0208<<14 | 0x3A<<7 | 0x13, + 26423 - 19968: jis0208<<14 | 0x3A<<7 | 0x16, + 26424 - 19968: jis0208<<14 | 0x3A<<7 | 0x15, + 26426 - 19968: jis0208<<14 | 0x13<<7 | 0x58, + 26429 - 19968: jis0208<<14 | 0x14<<7 | 0x3F, + 26430 - 19968: jis0212<<14 | 0x21<<7 | 0x56, + 26431 - 19968: jis0208<<14 | 0x3A<<7 | 0x12, + 26433 - 19968: jis0208<<14 | 0x3A<<7 | 0x14, + 26437 - 19968: jis0212<<14 | 0x21<<7 | 0x57, + 26438 - 19968: jis0208<<14 | 0x3A<<7 | 0x17, + 26439 - 19968: jis0212<<14 | 0x21<<7 | 0x58, + 26440 - 19968: jis0212<<14 | 0x21<<7 | 0x59, + 26441 - 19968: jis0208<<14 | 0x1E<<7 | 0x58, + 26444 - 19968: jis0212<<14 | 0x21<<7 | 0x5A, + 26446 - 19968: jis0208<<14 | 0x2C<<7 | 0x5A, + 26447 - 19968: jis0208<<14 | 0x0F<<7 | 0x28, + 26448 - 19968: jis0208<<14 | 0x19<<7 | 0x3F, + 26449 - 19968: jis0208<<14 | 0x21<<7 | 0x1B, + 26451 - 19968: jis0208<<14 | 0x1B<<7 | 0x3C, + 26452 - 19968: jis0212<<14 | 0x21<<7 | 0x5B, + 26453 - 19968: jis0212<<14 | 0x21<<7 | 0x5C, + 26454 - 19968: jis0208<<14 | 0x1D<<7 | 0x52, + 26457 - 19968: jis0208<<14 | 0x3A<<7 | 0x1A, + 26460 - 19968: jis0208<<14 | 0x24<<7 | 0x2D, + 26461 - 19968: jis0212<<14 | 0x21<<7 | 0x5D, + 26462 - 19968: jis0208<<14 | 0x3A<<7 | 0x18, + 26463 - 19968: jis0208<<14 | 0x21<<7 | 0x0A, + 26464 - 19968: jis0208<<14 | 0x3A<<7 | 0x19, + 26465 - 19968: jis0208<<14 | 0x1D<<7 | 0x51, + 26466 - 19968: jis0208<<14 | 0x2B<<7 | 0x3C, + 26467 - 19968: jis0208<<14 | 0x3A<<7 | 0x1B, + 26468 - 19968: jis0208<<14 | 0x3A<<7 | 0x1C, + 26469 - 19968: jis0208<<14 | 0x2C<<7 | 0x47, + 26470 - 19968: jis0208<<14 | 0x59<<7 | 0x26, + 26474 - 19968: jis0208<<14 | 0x3A<<7 | 0x21, + 26476 - 19968: jis0212<<14 | 0x22<<7 | 0x01, + 26477 - 19968: jis0208<<14 | 0x18<<7 | 0x19, + 26478 - 19968: jis0212<<14 | 0x22<<7 | 0x02, + 26479 - 19968: jis0208<<14 | 0x26<<7 | 0x34, + 26480 - 19968: jis0208<<14 | 0x3A<<7 | 0x1E, + 26481 - 19968: jis0208<<14 | 0x24<<7 | 0x4B, + 26482 - 19968: jis0208<<14 | 0x39<<7 | 0x3D, + 26483 - 19968: jis0208<<14 | 0x39<<7 | 0x41, + 26484 - 19968: jis0212<<14 | 0x22<<7 | 0x03, + 26485 - 19968: jis0208<<14 | 0x14<<7 | 0x2E, + 26486 - 19968: jis0212<<14 | 0x22<<7 | 0x04, + 26487 - 19968: jis0208<<14 | 0x26<<7 | 0x26, + 26491 - 19968: jis0212<<14 | 0x22<<7 | 0x05, + 26492 - 19968: jis0208<<14 | 0x3A<<7 | 0x20, + 26494 - 19968: jis0208<<14 | 0x1D<<7 | 0x1D, + 26495 - 19968: jis0208<<14 | 0x27<<7 | 0x23, + 26497 - 19968: jis0212<<14 | 0x22<<7 | 0x06, + 26500 - 19968: jis0212<<14 | 0x22<<7 | 0x07, + 26501 - 19968: jis0208<<14 | 0x3A<<7 | 0x26, + 26503 - 19968: jis0208<<14 | 0x27<<7 | 0x59, + 26505 - 19968: jis0208<<14 | 0x3A<<7 | 0x1D, + 26507 - 19968: jis0208<<14 | 0x3A<<7 | 0x23, + 26508 - 19968: jis0208<<14 | 0x3A<<7 | 0x22, + 26510 - 19968: jis0212<<14 | 0x22<<7 | 0x08, + 26511 - 19968: jis0212<<14 | 0x22<<7 | 0x09, + 26512 - 19968: jis0208<<14 | 0x1F<<7 | 0x2E, + 26513 - 19968: jis0212<<14 | 0x22<<7 | 0x0A, + 26515 - 19968: jis0212<<14 | 0x22<<7 | 0x0B, + 26517 - 19968: jis0208<<14 | 0x2A<<7 | 0x4C, + 26518 - 19968: jis0212<<14 | 0x22<<7 | 0x0C, + 26519 - 19968: jis0208<<14 | 0x2D<<7 | 0x32, + 26520 - 19968: jis0212<<14 | 0x22<<7 | 0x0D, + 26521 - 19968: jis0212<<14 | 0x22<<7 | 0x0E, + 26522 - 19968: jis0208<<14 | 0x2A<<7 | 0x46, + 26523 - 19968: jis0212<<14 | 0x22<<7 | 0x0F, + 26524 - 19968: jis0208<<14 | 0x11<<7 | 0x2B, + 26525 - 19968: jis0208<<14 | 0x1A<<7 | 0x3D, + 26528 - 19968: jis0208<<14 | 0x2E<<7 | 0x27, + 26529 - 19968: jis0208<<14 | 0x3A<<7 | 0x25, + 26530 - 19968: jis0208<<14 | 0x1E<<7 | 0x54, + 26534 - 19968: jis0208<<14 | 0x3A<<7 | 0x24, + 26537 - 19968: jis0208<<14 | 0x3A<<7 | 0x1F, + 26543 - 19968: jis0208<<14 | 0x17<<7 | 0x2E, + 26544 - 19968: jis0212<<14 | 0x22<<7 | 0x10, + 26545 - 19968: jis0212<<14 | 0x22<<7 | 0x11, + 26546 - 19968: jis0212<<14 | 0x22<<7 | 0x12, + 26547 - 19968: jis0208<<14 | 0x3A<<7 | 0x2B, + 26548 - 19968: jis0208<<14 | 0x3A<<7 | 0x29, + 26549 - 19968: jis0212<<14 | 0x22<<7 | 0x13, + 26550 - 19968: jis0208<<14 | 0x11<<7 | 0x2C, + 26551 - 19968: jis0208<<14 | 0x3A<<7 | 0x27, + 26552 - 19968: jis0208<<14 | 0x3A<<7 | 0x2D, + 26553 - 19968: jis0208<<14 | 0x3A<<7 | 0x33, + 26555 - 19968: jis0208<<14 | 0x59<<7 | 0x27, + 26556 - 19968: jis0212<<14 | 0x22<<7 | 0x15, + 26557 - 19968: jis0212<<14 | 0x22<<7 | 0x16, + 26560 - 19968: jis0208<<14 | 0x59<<7 | 0x29, + 26561 - 19968: jis0208<<14 | 0x21<<7 | 0x27, + 26562 - 19968: jis0212<<14 | 0x22<<7 | 0x19, + 26563 - 19968: jis0212<<14 | 0x22<<7 | 0x1A, + 26564 - 19968: jis0208<<14 | 0x29<<7 | 0x20, + 26565 - 19968: jis0212<<14 | 0x22<<7 | 0x1B, + 26566 - 19968: jis0208<<14 | 0x3A<<7 | 0x35, + 26568 - 19968: jis0212<<14 | 0x22<<7 | 0x1C, + 26569 - 19968: jis0212<<14 | 0x22<<7 | 0x1D, + 26570 - 19968: jis0208<<14 | 0x28<<7 | 0x01, + 26574 - 19968: jis0208<<14 | 0x3A<<7 | 0x34, + 26575 - 19968: jis0208<<14 | 0x26<<7 | 0x4F, + 26576 - 19968: jis0208<<14 | 0x2A<<7 | 0x1E, + 26577 - 19968: jis0208<<14 | 0x13<<7 | 0x1A, + 26578 - 19968: jis0212<<14 | 0x22<<7 | 0x1E, + 26579 - 19968: jis0208<<14 | 0x1F<<7 | 0x56, + 26580 - 19968: jis0208<<14 | 0x1C<<7 | 0x1F, + 26583 - 19968: jis0212<<14 | 0x22<<7 | 0x1F, + 26584 - 19968: jis0208<<14 | 0x23<<7 | 0x32, + 26585 - 19968: jis0212<<14 | 0x22<<7 | 0x20, + 26586 - 19968: jis0208<<14 | 0x2C<<7 | 0x0D, + 26588 - 19968: jis0212<<14 | 0x22<<7 | 0x21, + 26589 - 19968: jis0208<<14 | 0x3A<<7 | 0x30, + 26590 - 19968: jis0208<<14 | 0x3A<<7 | 0x2F, + 26593 - 19968: jis0212<<14 | 0x22<<7 | 0x22, + 26594 - 19968: jis0208<<14 | 0x3A<<7 | 0x31, + 26596 - 19968: jis0208<<14 | 0x3A<<7 | 0x2E, + 26598 - 19968: jis0212<<14 | 0x22<<7 | 0x23, + 26599 - 19968: jis0208<<14 | 0x3A<<7 | 0x36, + 26601 - 19968: jis0208<<14 | 0x3A<<7 | 0x2C, + 26604 - 19968: jis0208<<14 | 0x3A<<7 | 0x2A, + 26606 - 19968: jis0208<<14 | 0x3A<<7 | 0x32, + 26607 - 19968: jis0208<<14 | 0x3A<<7 | 0x28, + 26608 - 19968: jis0212<<14 | 0x22<<7 | 0x24, + 26609 - 19968: jis0208<<14 | 0x22<<7 | 0x4B, + 26610 - 19968: jis0212<<14 | 0x22<<7 | 0x25, + 26611 - 19968: jis0208<<14 | 0x2B<<7 | 0x57, + 26612 - 19968: jis0208<<14 | 0x1B<<7 | 0x25, + 26613 - 19968: jis0208<<14 | 0x19<<7 | 0x53, + 26614 - 19968: jis0212<<14 | 0x22<<7 | 0x26, + 26615 - 19968: jis0212<<14 | 0x22<<7 | 0x27, + 26617 - 19968: jis0212<<14 | 0x22<<7 | 0x17, + 26619 - 19968: jis0208<<14 | 0x19<<7 | 0x19, + 26622 - 19968: jis0208<<14 | 0x2A<<7 | 0x4E, + 26623 - 19968: jis0208<<14 | 0x12<<7 | 0x20, + 26625 - 19968: jis0208<<14 | 0x59<<7 | 0x2A, + 26626 - 19968: jis0208<<14 | 0x23<<7 | 0x2D, + 26627 - 19968: jis0208<<14 | 0x25<<7 | 0x29, + 26628 - 19968: jis0208<<14 | 0x10<<7 | 0x28, + 26643 - 19968: jis0208<<14 | 0x1F<<7 | 0x51, + 26644 - 19968: jis0212<<14 | 0x22<<7 | 0x29, + 26646 - 19968: jis0208<<14 | 0x1F<<7 | 0x13, + 26647 - 19968: jis0208<<14 | 0x16<<7 | 0x09, + 26649 - 19968: jis0212<<14 | 0x22<<7 | 0x2A, + 26653 - 19968: jis0212<<14 | 0x22<<7 | 0x2B, + 26654 - 19968: jis0208<<14 | 0x3A<<7 | 0x38, + 26655 - 19968: jis0212<<14 | 0x22<<7 | 0x2C, + 26657 - 19968: jis0208<<14 | 0x18<<7 | 0x1A, + 26658 - 19968: jis0208<<14 | 0x12<<7 | 0x5B, + 26663 - 19968: jis0212<<14 | 0x22<<7 | 0x2E, + 26664 - 19968: jis0212<<14 | 0x22<<7 | 0x2D, + 26665 - 19968: jis0208<<14 | 0x3A<<7 | 0x3A, + 26666 - 19968: jis0208<<14 | 0x12<<7 | 0x53, + 26667 - 19968: jis0208<<14 | 0x3A<<7 | 0x40, + 26668 - 19968: jis0212<<14 | 0x22<<7 | 0x2F, + 26669 - 19968: jis0212<<14 | 0x22<<7 | 0x30, + 26671 - 19968: jis0212<<14 | 0x22<<7 | 0x31, + 26672 - 19968: jis0212<<14 | 0x22<<7 | 0x32, + 26673 - 19968: jis0212<<14 | 0x22<<7 | 0x33, + 26674 - 19968: jis0208<<14 | 0x3A<<7 | 0x3D, + 26675 - 19968: jis0212<<14 | 0x22<<7 | 0x34, + 26676 - 19968: jis0208<<14 | 0x1F<<7 | 0x52, + 26680 - 19968: jis0208<<14 | 0x12<<7 | 0x2A, + 26681 - 19968: jis0208<<14 | 0x19<<7 | 0x0B, + 26683 - 19968: jis0212<<14 | 0x22<<7 | 0x35, + 26684 - 19968: jis0208<<14 | 0x12<<7 | 0x29, + 26685 - 19968: jis0208<<14 | 0x19<<7 | 0x2E, + 26687 - 19968: jis0212<<14 | 0x22<<7 | 0x36, + 26688 - 19968: jis0208<<14 | 0x3A<<7 | 0x3B, + 26689 - 19968: jis0208<<14 | 0x16<<7 | 0x44, + 26690 - 19968: jis0208<<14 | 0x16<<7 | 0x2A, + 26691 - 19968: jis0208<<14 | 0x24<<7 | 0x4C, + 26692 - 19968: jis0208<<14 | 0x59<<7 | 0x2B, + 26693 - 19968: jis0212<<14 | 0x22<<7 | 0x38, + 26694 - 19968: jis0208<<14 | 0x3A<<7 | 0x39, + 26696 - 19968: jis0208<<14 | 0x0F<<7 | 0x25, + 26698 - 19968: jis0212<<14 | 0x22<<7 | 0x39, + 26700 - 19968: jis0212<<14 | 0x22<<7 | 0x3A, + 26701 - 19968: jis0208<<14 | 0x3A<<7 | 0x3C, + 26702 - 19968: jis0208<<14 | 0x3A<<7 | 0x3E, + 26704 - 19968: jis0208<<14 | 0x15<<7 | 0x2C, + 26705 - 19968: jis0208<<14 | 0x16<<7 | 0x0B, + 26706 - 19968: jis0208<<14 | 0x59<<7 | 0x28, + 26707 - 19968: jis0208<<14 | 0x13<<7 | 0x1B, + 26708 - 19968: jis0208<<14 | 0x14<<7 | 0x2A, + 26709 - 19968: jis0212<<14 | 0x22<<7 | 0x3B, + 26711 - 19968: jis0212<<14 | 0x22<<7 | 0x3C, + 26712 - 19968: jis0212<<14 | 0x22<<7 | 0x3D, + 26713 - 19968: jis0208<<14 | 0x3A<<7 | 0x41, + 26715 - 19968: jis0212<<14 | 0x22<<7 | 0x3E, + 26716 - 19968: jis0208<<14 | 0x19<<7 | 0x58, + 26717 - 19968: jis0208<<14 | 0x2A<<7 | 0x50, + 26719 - 19968: jis0208<<14 | 0x1A<<7 | 0x16, + 26723 - 19968: jis0208<<14 | 0x3A<<7 | 0x42, + 26727 - 19968: jis0208<<14 | 0x28<<7 | 0x0F, + 26731 - 19968: jis0212<<14 | 0x22<<7 | 0x3F, + 26734 - 19968: jis0212<<14 | 0x22<<7 | 0x40, + 26735 - 19968: jis0212<<14 | 0x22<<7 | 0x41, + 26736 - 19968: jis0212<<14 | 0x22<<7 | 0x42, + 26737 - 19968: jis0212<<14 | 0x22<<7 | 0x43, + 26738 - 19968: jis0212<<14 | 0x22<<7 | 0x44, + 26740 - 19968: jis0208<<14 | 0x3A<<7 | 0x4E, + 26741 - 19968: jis0212<<14 | 0x22<<7 | 0x45, + 26742 - 19968: jis0208<<14 | 0x11<<7 | 0x12, + 26743 - 19968: jis0208<<14 | 0x3A<<7 | 0x43, + 26745 - 19968: jis0212<<14 | 0x22<<7 | 0x46, + 26746 - 19968: jis0212<<14 | 0x22<<7 | 0x47, + 26747 - 19968: jis0212<<14 | 0x22<<7 | 0x48, + 26748 - 19968: jis0212<<14 | 0x22<<7 | 0x49, + 26750 - 19968: jis0208<<14 | 0x3A<<7 | 0x54, + 26751 - 19968: jis0208<<14 | 0x3A<<7 | 0x44, + 26753 - 19968: jis0208<<14 | 0x2D<<7 | 0x21, + 26754 - 19968: jis0212<<14 | 0x22<<7 | 0x4A, + 26755 - 19968: jis0208<<14 | 0x3A<<7 | 0x4B, + 26756 - 19968: jis0212<<14 | 0x22<<7 | 0x4B, + 26757 - 19968: jis0208<<14 | 0x26<<7 | 0x3E, + 26758 - 19968: jis0212<<14 | 0x22<<7 | 0x4C, + 26760 - 19968: jis0212<<14 | 0x22<<7 | 0x4D, + 26765 - 19968: jis0208<<14 | 0x3A<<7 | 0x53, + 26767 - 19968: jis0208<<14 | 0x3A<<7 | 0x46, + 26771 - 19968: jis0208<<14 | 0x0F<<7 | 0x13, + 26772 - 19968: jis0208<<14 | 0x3A<<7 | 0x48, + 26774 - 19968: jis0212<<14 | 0x22<<7 | 0x4E, + 26775 - 19968: jis0208<<14 | 0x18<<7 | 0x1B, + 26776 - 19968: jis0212<<14 | 0x22<<7 | 0x4F, + 26778 - 19968: jis0212<<14 | 0x22<<7 | 0x50, + 26779 - 19968: jis0208<<14 | 0x3A<<7 | 0x4A, + 26780 - 19968: jis0212<<14 | 0x22<<7 | 0x51, + 26781 - 19968: jis0208<<14 | 0x3A<<7 | 0x49, + 26783 - 19968: jis0208<<14 | 0x3A<<7 | 0x45, + 26784 - 19968: jis0208<<14 | 0x3A<<7 | 0x50, + 26785 - 19968: jis0212<<14 | 0x22<<7 | 0x52, + 26786 - 19968: jis0208<<14 | 0x1D<<7 | 0x1E, + 26787 - 19968: jis0212<<14 | 0x22<<7 | 0x53, + 26789 - 19968: jis0212<<14 | 0x22<<7 | 0x54, + 26790 - 19968: jis0208<<14 | 0x33<<7 | 0x4C, + 26791 - 19968: jis0208<<14 | 0x17<<7 | 0x47, + 26792 - 19968: jis0208<<14 | 0x2C<<7 | 0x5B, + 26793 - 19968: jis0212<<14 | 0x22<<7 | 0x55, + 26794 - 19968: jis0212<<14 | 0x22<<7 | 0x56, + 26797 - 19968: jis0208<<14 | 0x3A<<7 | 0x47, + 26798 - 19968: jis0212<<14 | 0x22<<7 | 0x57, + 26799 - 19968: jis0208<<14 | 0x23<<7 | 0x53, + 26800 - 19968: jis0208<<14 | 0x12<<7 | 0x02, + 26801 - 19968: jis0208<<14 | 0x19<<7 | 0x0C, + 26802 - 19968: jis0212<<14 | 0x22<<7 | 0x58, + 26803 - 19968: jis0208<<14 | 0x3A<<7 | 0x3F, + 26805 - 19968: jis0208<<14 | 0x3A<<7 | 0x4F, + 26806 - 19968: jis0208<<14 | 0x12<<7 | 0x40, + 26809 - 19968: jis0208<<14 | 0x3A<<7 | 0x4D, + 26810 - 19968: jis0208<<14 | 0x3A<<7 | 0x51, + 26811 - 19968: jis0212<<14 | 0x22<<7 | 0x59, + 26812 - 19968: jis0208<<14 | 0x24<<7 | 0x4D, + 26820 - 19968: jis0208<<14 | 0x13<<7 | 0x5D, + 26821 - 19968: jis0212<<14 | 0x22<<7 | 0x5A, + 26822 - 19968: jis0208<<14 | 0x3B<<7 | 0x11, + 26824 - 19968: jis0208<<14 | 0x58<<7 | 0x08, + 26825 - 19968: jis0208<<14 | 0x2B<<7 | 0x28, + 26826 - 19968: jis0208<<14 | 0x3A<<7 | 0x56, + 26827 - 19968: jis0208<<14 | 0x13<<7 | 0x5C, + 26828 - 19968: jis0212<<14 | 0x22<<7 | 0x5C, + 26829 - 19968: jis0208<<14 | 0x3A<<7 | 0x5D, + 26831 - 19968: jis0208<<14 | 0x59<<7 | 0x2C, + 26832 - 19968: jis0212<<14 | 0x23<<7 | 0x00, + 26833 - 19968: jis0212<<14 | 0x23<<7 | 0x01, + 26834 - 19968: jis0208<<14 | 0x2A<<7 | 0x1F, + 26835 - 19968: jis0212<<14 | 0x23<<7 | 0x02, + 26836 - 19968: jis0208<<14 | 0x3B<<7 | 0x00, + 26837 - 19968: jis0208<<14 | 0x3B<<7 | 0x02, + 26838 - 19968: jis0212<<14 | 0x23<<7 | 0x03, + 26839 - 19968: jis0208<<14 | 0x3B<<7 | 0x06, + 26840 - 19968: jis0208<<14 | 0x3A<<7 | 0x58, + 26841 - 19968: jis0212<<14 | 0x23<<7 | 0x04, + 26842 - 19968: jis0208<<14 | 0x22<<7 | 0x09, + 26844 - 19968: jis0212<<14 | 0x23<<7 | 0x05, + 26845 - 19968: jis0212<<14 | 0x23<<7 | 0x06, + 26847 - 19968: jis0208<<14 | 0x24<<7 | 0x4E, + 26848 - 19968: jis0208<<14 | 0x3B<<7 | 0x0A, + 26849 - 19968: jis0208<<14 | 0x3A<<7 | 0x5B, + 26851 - 19968: jis0208<<14 | 0x3B<<7 | 0x07, + 26853 - 19968: jis0212<<14 | 0x23<<7 | 0x07, + 26855 - 19968: jis0208<<14 | 0x3B<<7 | 0x01, + 26856 - 19968: jis0212<<14 | 0x23<<7 | 0x08, + 26858 - 19968: jis0212<<14 | 0x23<<7 | 0x09, + 26859 - 19968: jis0212<<14 | 0x23<<7 | 0x0A, + 26860 - 19968: jis0212<<14 | 0x23<<7 | 0x0B, + 26861 - 19968: jis0212<<14 | 0x23<<7 | 0x0C, + 26862 - 19968: jis0208<<14 | 0x1E<<7 | 0x18, + 26863 - 19968: jis0208<<14 | 0x3B<<7 | 0x0B, + 26864 - 19968: jis0212<<14 | 0x23<<7 | 0x0D, + 26865 - 19968: jis0212<<14 | 0x23<<7 | 0x0E, + 26866 - 19968: jis0208<<14 | 0x1F<<7 | 0x12, + 26869 - 19968: jis0212<<14 | 0x23<<7 | 0x0F, + 26870 - 19968: jis0212<<14 | 0x23<<7 | 0x10, + 26873 - 19968: jis0208<<14 | 0x3B<<7 | 0x09, + 26874 - 19968: jis0208<<14 | 0x13<<7 | 0x1C, + 26875 - 19968: jis0212<<14 | 0x23<<7 | 0x11, + 26876 - 19968: jis0212<<14 | 0x23<<7 | 0x12, + 26877 - 19968: jis0212<<14 | 0x23<<7 | 0x13, + 26880 - 19968: jis0208<<14 | 0x2E<<7 | 0x2F, + 26881 - 19968: jis0208<<14 | 0x3A<<7 | 0x55, + 26884 - 19968: jis0208<<14 | 0x3B<<7 | 0x05, + 26885 - 19968: jis0208<<14 | 0x0F<<7 | 0x37, + 26886 - 19968: jis0212<<14 | 0x23<<7 | 0x14, + 26888 - 19968: jis0208<<14 | 0x3A<<7 | 0x57, + 26889 - 19968: jis0212<<14 | 0x23<<7 | 0x15, + 26890 - 19968: jis0212<<14 | 0x23<<7 | 0x16, + 26891 - 19968: jis0208<<14 | 0x2B<<7 | 0x19, + 26892 - 19968: jis0208<<14 | 0x3A<<7 | 0x5C, + 26893 - 19968: jis0208<<14 | 0x1E<<7 | 0x01, + 26894 - 19968: jis0208<<14 | 0x23<<7 | 0x26, + 26895 - 19968: jis0208<<14 | 0x3A<<7 | 0x52, + 26896 - 19968: jis0212<<14 | 0x23<<7 | 0x17, + 26897 - 19968: jis0212<<14 | 0x23<<7 | 0x18, + 26898 - 19968: jis0208<<14 | 0x3B<<7 | 0x04, + 26899 - 19968: jis0212<<14 | 0x23<<7 | 0x19, + 26902 - 19968: jis0212<<14 | 0x23<<7 | 0x1A, + 26903 - 19968: jis0212<<14 | 0x23<<7 | 0x1B, + 26905 - 19968: jis0208<<14 | 0x1E<<7 | 0x59, + 26906 - 19968: jis0208<<14 | 0x3B<<7 | 0x0E, + 26907 - 19968: jis0208<<14 | 0x12<<7 | 0x50, + 26908 - 19968: jis0208<<14 | 0x17<<7 | 0x00, + 26913 - 19968: jis0208<<14 | 0x3B<<7 | 0x10, + 26914 - 19968: jis0208<<14 | 0x3A<<7 | 0x59, + 26915 - 19968: jis0208<<14 | 0x3B<<7 | 0x0F, + 26917 - 19968: jis0208<<14 | 0x3B<<7 | 0x08, + 26918 - 19968: jis0208<<14 | 0x3A<<7 | 0x5A, + 26920 - 19968: jis0208<<14 | 0x3B<<7 | 0x0C, + 26922 - 19968: jis0208<<14 | 0x3B<<7 | 0x0D, + 26928 - 19968: jis0208<<14 | 0x3B<<7 | 0x1E, + 26929 - 19968: jis0212<<14 | 0x23<<7 | 0x1C, + 26931 - 19968: jis0212<<14 | 0x23<<7 | 0x1D, + 26932 - 19968: jis0208<<14 | 0x25<<7 | 0x2D, + 26933 - 19968: jis0212<<14 | 0x23<<7 | 0x1E, + 26934 - 19968: jis0208<<14 | 0x3B<<7 | 0x03, + 26936 - 19968: jis0212<<14 | 0x23<<7 | 0x1F, + 26937 - 19968: jis0208<<14 | 0x3B<<7 | 0x1A, + 26939 - 19968: jis0212<<14 | 0x23<<7 | 0x20, + 26941 - 19968: jis0208<<14 | 0x3B<<7 | 0x1C, + 26943 - 19968: jis0208<<14 | 0x23<<7 | 0x37, + 26946 - 19968: jis0212<<14 | 0x23<<7 | 0x21, + 26949 - 19968: jis0212<<14 | 0x23<<7 | 0x22, + 26953 - 19968: jis0212<<14 | 0x23<<7 | 0x23, + 26954 - 19968: jis0208<<14 | 0x2C<<7 | 0x2B, + 26958 - 19968: jis0212<<14 | 0x23<<7 | 0x24, + 26963 - 19968: jis0208<<14 | 0x28<<7 | 0x55, + 26964 - 19968: jis0208<<14 | 0x3B<<7 | 0x17, + 26965 - 19968: jis0208<<14 | 0x21<<7 | 0x29, + 26967 - 19968: jis0212<<14 | 0x23<<7 | 0x25, + 26969 - 19968: jis0208<<14 | 0x3B<<7 | 0x1D, + 26970 - 19968: jis0208<<14 | 0x20<<7 | 0x1E, + 26971 - 19968: jis0212<<14 | 0x23<<7 | 0x26, + 26972 - 19968: jis0208<<14 | 0x3B<<7 | 0x14, + 26973 - 19968: jis0208<<14 | 0x3B<<7 | 0x21, + 26974 - 19968: jis0208<<14 | 0x3B<<7 | 0x20, + 26976 - 19968: jis0208<<14 | 0x25<<7 | 0x4E, + 26977 - 19968: jis0208<<14 | 0x3B<<7 | 0x1F, + 26978 - 19968: jis0208<<14 | 0x25<<7 | 0x49, + 26979 - 19968: jis0212<<14 | 0x23<<7 | 0x27, + 26980 - 19968: jis0212<<14 | 0x23<<7 | 0x28, + 26981 - 19968: jis0212<<14 | 0x23<<7 | 0x29, + 26982 - 19968: jis0212<<14 | 0x23<<7 | 0x2A, + 26984 - 19968: jis0208<<14 | 0x59<<7 | 0x2E, + 26985 - 19968: jis0212<<14 | 0x23<<7 | 0x2C, + 26986 - 19968: jis0208<<14 | 0x3B<<7 | 0x23, + 26987 - 19968: jis0208<<14 | 0x3B<<7 | 0x16, + 26988 - 19968: jis0212<<14 | 0x23<<7 | 0x2D, + 26989 - 19968: jis0208<<14 | 0x15<<7 | 0x27, + 26990 - 19968: jis0208<<14 | 0x3B<<7 | 0x19, + 26991 - 19968: jis0208<<14 | 0x1C<<7 | 0x3C, + 26992 - 19968: jis0212<<14 | 0x23<<7 | 0x2E, + 26993 - 19968: jis0212<<14 | 0x23<<7 | 0x2F, + 26994 - 19968: jis0212<<14 | 0x23<<7 | 0x30, + 26995 - 19968: jis0208<<14 | 0x26<<7 | 0x3F, + 26996 - 19968: jis0208<<14 | 0x3B<<7 | 0x1B, + 26997 - 19968: jis0208<<14 | 0x15<<7 | 0x2A, + 26999 - 19968: jis0208<<14 | 0x3B<<7 | 0x13, + 27000 - 19968: jis0208<<14 | 0x3B<<7 | 0x15, + 27001 - 19968: jis0208<<14 | 0x3B<<7 | 0x12, + 27002 - 19968: jis0212<<14 | 0x23<<7 | 0x31, + 27003 - 19968: jis0212<<14 | 0x23<<7 | 0x32, + 27004 - 19968: jis0208<<14 | 0x2E<<7 | 0x0F, + 27005 - 19968: jis0208<<14 | 0x12<<7 | 0x39, + 27006 - 19968: jis0208<<14 | 0x3B<<7 | 0x18, + 27007 - 19968: jis0212<<14 | 0x23<<7 | 0x33, + 27008 - 19968: jis0212<<14 | 0x23<<7 | 0x34, + 27009 - 19968: jis0208<<14 | 0x3B<<7 | 0x22, + 27010 - 19968: jis0208<<14 | 0x12<<7 | 0x14, + 27018 - 19968: jis0208<<14 | 0x19<<7 | 0x46, + 27021 - 19968: jis0212<<14 | 0x23<<7 | 0x35, + 27022 - 19968: jis0208<<14 | 0x10<<7 | 0x3C, + 27025 - 19968: jis0208<<14 | 0x3B<<7 | 0x33, + 27026 - 19968: jis0212<<14 | 0x23<<7 | 0x36, + 27028 - 19968: jis0208<<14 | 0x2E<<7 | 0x10, + 27029 - 19968: jis0208<<14 | 0x3B<<7 | 0x36, + 27030 - 19968: jis0212<<14 | 0x23<<7 | 0x37, + 27032 - 19968: jis0208<<14 | 0x59<<7 | 0x30, + 27035 - 19968: jis0208<<14 | 0x1E<<7 | 0x19, + 27036 - 19968: jis0208<<14 | 0x3B<<7 | 0x35, + 27040 - 19968: jis0208<<14 | 0x3B<<7 | 0x34, + 27041 - 19968: jis0212<<14 | 0x23<<7 | 0x39, + 27045 - 19968: jis0212<<14 | 0x23<<7 | 0x3A, + 27046 - 19968: jis0212<<14 | 0x23<<7 | 0x3B, + 27047 - 19968: jis0208<<14 | 0x3B<<7 | 0x31, + 27048 - 19968: jis0212<<14 | 0x23<<7 | 0x3C, + 27051 - 19968: jis0212<<14 | 0x23<<7 | 0x3D, + 27053 - 19968: jis0212<<14 | 0x23<<7 | 0x3E, + 27054 - 19968: jis0208<<14 | 0x3B<<7 | 0x25, + 27055 - 19968: jis0212<<14 | 0x23<<7 | 0x3F, + 27057 - 19968: jis0208<<14 | 0x3B<<7 | 0x42, + 27058 - 19968: jis0208<<14 | 0x3B<<7 | 0x24, + 27060 - 19968: jis0208<<14 | 0x3B<<7 | 0x37, + 27063 - 19968: jis0212<<14 | 0x23<<7 | 0x40, + 27064 - 19968: jis0212<<14 | 0x23<<7 | 0x41, + 27066 - 19968: jis0212<<14 | 0x23<<7 | 0x42, + 27067 - 19968: jis0208<<14 | 0x3B<<7 | 0x2F, + 27068 - 19968: jis0212<<14 | 0x23<<7 | 0x43, + 27070 - 19968: jis0208<<14 | 0x3B<<7 | 0x2A, + 27071 - 19968: jis0208<<14 | 0x3B<<7 | 0x27, + 27073 - 19968: jis0208<<14 | 0x3B<<7 | 0x28, + 27075 - 19968: jis0208<<14 | 0x3B<<7 | 0x30, + 27077 - 19968: jis0212<<14 | 0x23<<7 | 0x44, + 27079 - 19968: jis0208<<14 | 0x53<<7 | 0x01, + 27080 - 19968: jis0212<<14 | 0x23<<7 | 0x45, + 27082 - 19968: jis0208<<14 | 0x3B<<7 | 0x2D, + 27083 - 19968: jis0208<<14 | 0x18<<7 | 0x1C, + 27084 - 19968: jis0208<<14 | 0x23<<7 | 0x27, + 27085 - 19968: jis0208<<14 | 0x20<<7 | 0x43, + 27086 - 19968: jis0208<<14 | 0x3B<<7 | 0x2B, + 27088 - 19968: jis0208<<14 | 0x3B<<7 | 0x26, + 27089 - 19968: jis0212<<14 | 0x23<<7 | 0x46, + 27091 - 19968: jis0208<<14 | 0x3B<<7 | 0x29, + 27094 - 19968: jis0212<<14 | 0x23<<7 | 0x47, + 27095 - 19968: jis0212<<14 | 0x23<<7 | 0x48, + 27096 - 19968: jis0208<<14 | 0x2C<<7 | 0x2C, + 27097 - 19968: jis0208<<14 | 0x2A<<7 | 0x49, + 27101 - 19968: jis0208<<14 | 0x3B<<7 | 0x2E, + 27102 - 19968: jis0208<<14 | 0x3B<<7 | 0x38, + 27106 - 19968: jis0208<<14 | 0x59<<7 | 0x31, + 27109 - 19968: jis0212<<14 | 0x23<<7 | 0x4A, + 27111 - 19968: jis0208<<14 | 0x3B<<7 | 0x40, + 27112 - 19968: jis0208<<14 | 0x3B<<7 | 0x39, + 27115 - 19968: jis0208<<14 | 0x3B<<7 | 0x46, + 27117 - 19968: jis0208<<14 | 0x3B<<7 | 0x44, + 27118 - 19968: jis0212<<14 | 0x23<<7 | 0x4B, + 27119 - 19968: jis0212<<14 | 0x23<<7 | 0x4C, + 27121 - 19968: jis0212<<14 | 0x23<<7 | 0x4D, + 27122 - 19968: jis0208<<14 | 0x3B<<7 | 0x3F, + 27123 - 19968: jis0212<<14 | 0x23<<7 | 0x4E, + 27125 - 19968: jis0212<<14 | 0x23<<7 | 0x4F, + 27129 - 19968: jis0208<<14 | 0x3B<<7 | 0x3E, + 27131 - 19968: jis0208<<14 | 0x23<<7 | 0x2F, + 27133 - 19968: jis0208<<14 | 0x20<<7 | 0x44, + 27134 - 19968: jis0212<<14 | 0x23<<7 | 0x50, + 27135 - 19968: jis0208<<14 | 0x3B<<7 | 0x3C, + 27136 - 19968: jis0212<<14 | 0x23<<7 | 0x51, + 27137 - 19968: jis0212<<14 | 0x23<<7 | 0x52, + 27138 - 19968: jis0208<<14 | 0x3B<<7 | 0x3A, + 27139 - 19968: jis0212<<14 | 0x23<<7 | 0x53, + 27141 - 19968: jis0208<<14 | 0x3B<<7 | 0x41, + 27146 - 19968: jis0208<<14 | 0x3B<<7 | 0x47, + 27147 - 19968: jis0208<<14 | 0x27<<7 | 0x54, + 27148 - 19968: jis0208<<14 | 0x3B<<7 | 0x4D, + 27151 - 19968: jis0212<<14 | 0x23<<7 | 0x54, + 27153 - 19968: jis0212<<14 | 0x23<<7 | 0x55, + 27154 - 19968: jis0208<<14 | 0x3B<<7 | 0x48, + 27155 - 19968: jis0208<<14 | 0x3B<<7 | 0x4B, + 27156 - 19968: jis0208<<14 | 0x3B<<7 | 0x45, + 27157 - 19968: jis0212<<14 | 0x23<<7 | 0x56, + 27159 - 19968: jis0208<<14 | 0x22<<7 | 0x53, + 27161 - 19968: jis0208<<14 | 0x28<<7 | 0x17, + 27162 - 19968: jis0212<<14 | 0x23<<7 | 0x57, + 27163 - 19968: jis0208<<14 | 0x3B<<7 | 0x3B, + 27165 - 19968: jis0212<<14 | 0x23<<7 | 0x58, + 27166 - 19968: jis0208<<14 | 0x3B<<7 | 0x43, + 27167 - 19968: jis0208<<14 | 0x1D<<7 | 0x1F, + 27168 - 19968: jis0212<<14 | 0x23<<7 | 0x59, + 27169 - 19968: jis0208<<14 | 0x2B<<7 | 0x2E, + 27170 - 19968: jis0208<<14 | 0x3B<<7 | 0x57, + 27171 - 19968: jis0208<<14 | 0x3B<<7 | 0x4A, + 27172 - 19968: jis0212<<14 | 0x23<<7 | 0x5A, + 27176 - 19968: jis0212<<14 | 0x23<<7 | 0x5B, + 27177 - 19968: jis0208<<14 | 0x17<<7 | 0x01, + 27178 - 19968: jis0208<<14 | 0x11<<7 | 0x02, + 27179 - 19968: jis0208<<14 | 0x12<<7 | 0x3E, + 27182 - 19968: jis0208<<14 | 0x3B<<7 | 0x32, + 27184 - 19968: jis0208<<14 | 0x59<<7 | 0x32, + 27186 - 19968: jis0212<<14 | 0x23<<7 | 0x5D, + 27188 - 19968: jis0212<<14 | 0x24<<7 | 0x00, + 27189 - 19968: jis0208<<14 | 0x1D<<7 | 0x20, + 27190 - 19968: jis0208<<14 | 0x3B<<7 | 0x4F, + 27191 - 19968: jis0212<<14 | 0x24<<7 | 0x01, + 27192 - 19968: jis0208<<14 | 0x3B<<7 | 0x56, + 27193 - 19968: jis0208<<14 | 0x1B<<7 | 0x58, + 27194 - 19968: jis0208<<14 | 0x12<<7 | 0x51, + 27195 - 19968: jis0212<<14 | 0x24<<7 | 0x02, + 27197 - 19968: jis0208<<14 | 0x22<<7 | 0x0D, + 27198 - 19968: jis0212<<14 | 0x24<<7 | 0x03, + 27199 - 19968: jis0212<<14 | 0x24<<7 | 0x04, + 27204 - 19968: jis0208<<14 | 0x3B<<7 | 0x4C, + 27205 - 19968: jis0212<<14 | 0x24<<7 | 0x05, + 27206 - 19968: jis0208<<14 | 0x59<<7 | 0x34, + 27207 - 19968: jis0208<<14 | 0x3B<<7 | 0x51, + 27208 - 19968: jis0208<<14 | 0x3B<<7 | 0x55, + 27209 - 19968: jis0212<<14 | 0x24<<7 | 0x07, + 27210 - 19968: jis0212<<14 | 0x24<<7 | 0x08, + 27211 - 19968: jis0208<<14 | 0x15<<7 | 0x15, + 27214 - 19968: jis0212<<14 | 0x24<<7 | 0x09, + 27216 - 19968: jis0212<<14 | 0x24<<7 | 0x0A, + 27217 - 19968: jis0212<<14 | 0x24<<7 | 0x0B, + 27218 - 19968: jis0212<<14 | 0x24<<7 | 0x0C, + 27221 - 19968: jis0212<<14 | 0x24<<7 | 0x0D, + 27222 - 19968: jis0212<<14 | 0x24<<7 | 0x0E, + 27224 - 19968: jis0208<<14 | 0x14<<7 | 0x2B, + 27225 - 19968: jis0208<<14 | 0x3B<<7 | 0x53, + 27227 - 19968: jis0212<<14 | 0x24<<7 | 0x0F, + 27231 - 19968: jis0208<<14 | 0x14<<7 | 0x00, + 27233 - 19968: jis0208<<14 | 0x25<<7 | 0x2A, + 27234 - 19968: jis0208<<14 | 0x3B<<7 | 0x52, + 27236 - 19968: jis0212<<14 | 0x24<<7 | 0x10, + 27238 - 19968: jis0208<<14 | 0x3B<<7 | 0x54, + 27239 - 19968: jis0212<<14 | 0x24<<7 | 0x11, + 27242 - 19968: jis0212<<14 | 0x24<<7 | 0x12, + 27243 - 19968: jis0208<<14 | 0x59<<7 | 0x33, + 27249 - 19968: jis0212<<14 | 0x24<<7 | 0x13, + 27250 - 19968: jis0208<<14 | 0x3B<<7 | 0x4E, + 27251 - 19968: jis0208<<14 | 0x59<<7 | 0x35, + 27256 - 19968: jis0208<<14 | 0x3B<<7 | 0x50, + 27262 - 19968: jis0208<<14 | 0x59<<7 | 0x36, + 27263 - 19968: jis0208<<14 | 0x12<<7 | 0x3F, + 27264 - 19968: jis0208<<14 | 0x22<<7 | 0x28, + 27265 - 19968: jis0212<<14 | 0x24<<7 | 0x16, + 27267 - 19968: jis0212<<14 | 0x24<<7 | 0x17, + 27268 - 19968: jis0208<<14 | 0x3B<<7 | 0x5B, + 27270 - 19968: jis0212<<14 | 0x24<<7 | 0x18, + 27271 - 19968: jis0212<<14 | 0x24<<7 | 0x19, + 27273 - 19968: jis0212<<14 | 0x24<<7 | 0x1A, + 27275 - 19968: jis0212<<14 | 0x24<<7 | 0x1B, + 27277 - 19968: jis0208<<14 | 0x3B<<7 | 0x59, + 27278 - 19968: jis0208<<14 | 0x17<<7 | 0x48, + 27280 - 19968: jis0208<<14 | 0x3B<<7 | 0x58, + 27281 - 19968: jis0212<<14 | 0x24<<7 | 0x1C, + 27287 - 19968: jis0208<<14 | 0x3C<<7 | 0x00, + 27291 - 19968: jis0212<<14 | 0x24<<7 | 0x1D, + 27292 - 19968: jis0208<<14 | 0x3A<<7 | 0x37, + 27293 - 19968: jis0212<<14 | 0x24<<7 | 0x1E, + 27294 - 19968: jis0212<<14 | 0x24<<7 | 0x1F, + 27295 - 19968: jis0212<<14 | 0x24<<7 | 0x20, + 27296 - 19968: jis0208<<14 | 0x3B<<7 | 0x5A, + 27298 - 19968: jis0208<<14 | 0x3B<<7 | 0x5C, + 27299 - 19968: jis0208<<14 | 0x3B<<7 | 0x5D, + 27301 - 19968: jis0212<<14 | 0x24<<7 | 0x21, + 27306 - 19968: jis0208<<14 | 0x3C<<7 | 0x0B, + 27307 - 19968: jis0212<<14 | 0x24<<7 | 0x22, + 27308 - 19968: jis0208<<14 | 0x3C<<7 | 0x07, + 27310 - 19968: jis0208<<14 | 0x3A<<7 | 0x4C, + 27311 - 19968: jis0212<<14 | 0x24<<7 | 0x23, + 27312 - 19968: jis0212<<14 | 0x24<<7 | 0x24, + 27313 - 19968: jis0212<<14 | 0x24<<7 | 0x25, + 27315 - 19968: jis0208<<14 | 0x3C<<7 | 0x06, + 27316 - 19968: jis0212<<14 | 0x24<<7 | 0x26, + 27320 - 19968: jis0208<<14 | 0x3C<<7 | 0x05, + 27323 - 19968: jis0208<<14 | 0x3C<<7 | 0x02, + 27325 - 19968: jis0212<<14 | 0x24<<7 | 0x27, + 27326 - 19968: jis0212<<14 | 0x24<<7 | 0x28, + 27327 - 19968: jis0212<<14 | 0x24<<7 | 0x29, + 27329 - 19968: jis0208<<14 | 0x3B<<7 | 0x49, + 27330 - 19968: jis0208<<14 | 0x3C<<7 | 0x04, + 27331 - 19968: jis0208<<14 | 0x3C<<7 | 0x03, + 27334 - 19968: jis0212<<14 | 0x24<<7 | 0x2A, + 27336 - 19968: jis0212<<14 | 0x24<<7 | 0x2C, + 27337 - 19968: jis0212<<14 | 0x24<<7 | 0x2B, + 27340 - 19968: jis0212<<14 | 0x24<<7 | 0x2D, + 27344 - 19968: jis0212<<14 | 0x24<<7 | 0x2E, + 27345 - 19968: jis0208<<14 | 0x3C<<7 | 0x09, + 27347 - 19968: jis0208<<14 | 0x2E<<7 | 0x05, + 27348 - 19968: jis0212<<14 | 0x24<<7 | 0x2F, + 27349 - 19968: jis0212<<14 | 0x24<<7 | 0x30, + 27350 - 19968: jis0212<<14 | 0x24<<7 | 0x31, + 27354 - 19968: jis0208<<14 | 0x3C<<7 | 0x0C, + 27355 - 19968: jis0208<<14 | 0x15<<7 | 0x5A, + 27356 - 19968: jis0212<<14 | 0x24<<7 | 0x32, + 27357 - 19968: jis0212<<14 | 0x24<<7 | 0x33, + 27358 - 19968: jis0208<<14 | 0x3C<<7 | 0x08, + 27359 - 19968: jis0208<<14 | 0x3C<<7 | 0x0A, + 27362 - 19968: jis0208<<14 | 0x59<<7 | 0x37, + 27364 - 19968: jis0208<<14 | 0x59<<7 | 0x38, + 27367 - 19968: jis0212<<14 | 0x24<<7 | 0x35, + 27368 - 19968: jis0208<<14 | 0x27<<7 | 0x06, + 27370 - 19968: jis0208<<14 | 0x3C<<7 | 0x0D, + 27372 - 19968: jis0212<<14 | 0x24<<7 | 0x36, + 27376 - 19968: jis0212<<14 | 0x24<<7 | 0x37, + 27377 - 19968: jis0212<<14 | 0x24<<7 | 0x38, + 27378 - 19968: jis0212<<14 | 0x24<<7 | 0x39, + 27386 - 19968: jis0208<<14 | 0x3C<<7 | 0x11, + 27387 - 19968: jis0208<<14 | 0x3C<<7 | 0x0E, + 27388 - 19968: jis0212<<14 | 0x24<<7 | 0x3A, + 27389 - 19968: jis0212<<14 | 0x24<<7 | 0x3B, + 27394 - 19968: jis0212<<14 | 0x24<<7 | 0x3C, + 27395 - 19968: jis0212<<14 | 0x24<<7 | 0x3D, + 27396 - 19968: jis0208<<14 | 0x2C<<7 | 0x52, + 27397 - 19968: jis0208<<14 | 0x3C<<7 | 0x0F, + 27398 - 19968: jis0212<<14 | 0x24<<7 | 0x3E, + 27399 - 19968: jis0212<<14 | 0x24<<7 | 0x3F, + 27401 - 19968: jis0212<<14 | 0x24<<7 | 0x40, + 27402 - 19968: jis0208<<14 | 0x3B<<7 | 0x3D, + 27407 - 19968: jis0212<<14 | 0x24<<7 | 0x41, + 27408 - 19968: jis0212<<14 | 0x24<<7 | 0x42, + 27409 - 19968: jis0212<<14 | 0x24<<7 | 0x43, + 27410 - 19968: jis0208<<14 | 0x3C<<7 | 0x12, + 27414 - 19968: jis0208<<14 | 0x3C<<7 | 0x13, + 27415 - 19968: jis0212<<14 | 0x24<<7 | 0x44, + 27419 - 19968: jis0212<<14 | 0x24<<7 | 0x45, + 27421 - 19968: jis0208<<14 | 0x10<<7 | 0x14, + 27422 - 19968: jis0212<<14 | 0x24<<7 | 0x46, + 27423 - 19968: jis0208<<14 | 0x3C<<7 | 0x15, + 27424 - 19968: jis0208<<14 | 0x16<<7 | 0x46, + 27425 - 19968: jis0208<<14 | 0x1B<<7 | 0x00, + 27427 - 19968: jis0208<<14 | 0x15<<7 | 0x34, + 27428 - 19968: jis0212<<14 | 0x24<<7 | 0x47, + 27431 - 19968: jis0208<<14 | 0x11<<7 | 0x03, + 27432 - 19968: jis0212<<14 | 0x24<<7 | 0x48, + 27435 - 19968: jis0212<<14 | 0x24<<7 | 0x49, + 27436 - 19968: jis0212<<14 | 0x24<<7 | 0x4A, + 27439 - 19968: jis0212<<14 | 0x24<<7 | 0x4B, + 27442 - 19968: jis0208<<14 | 0x2C<<7 | 0x3E, + 27445 - 19968: jis0212<<14 | 0x24<<7 | 0x4C, + 27446 - 19968: jis0212<<14 | 0x24<<7 | 0x4D, + 27447 - 19968: jis0208<<14 | 0x3C<<7 | 0x17, + 27448 - 19968: jis0208<<14 | 0x3C<<7 | 0x16, + 27449 - 19968: jis0208<<14 | 0x3C<<7 | 0x19, + 27450 - 19968: jis0208<<14 | 0x14<<7 | 0x1C, + 27451 - 19968: jis0212<<14 | 0x24<<7 | 0x4E, + 27453 - 19968: jis0208<<14 | 0x15<<7 | 0x35, + 27454 - 19968: jis0208<<14 | 0x13<<7 | 0x1D, + 27455 - 19968: jis0212<<14 | 0x24<<7 | 0x4F, + 27459 - 19968: jis0208<<14 | 0x3C<<7 | 0x1C, + 27462 - 19968: jis0212<<14 | 0x24<<7 | 0x50, + 27463 - 19968: jis0208<<14 | 0x3C<<7 | 0x1B, + 27465 - 19968: jis0208<<14 | 0x3C<<7 | 0x1D, + 27466 - 19968: jis0212<<14 | 0x24<<7 | 0x51, + 27468 - 19968: jis0208<<14 | 0x11<<7 | 0x2D, + 27469 - 19968: jis0212<<14 | 0x24<<7 | 0x52, + 27470 - 19968: jis0208<<14 | 0x22<<7 | 0x16, + 27472 - 19968: jis0208<<14 | 0x3C<<7 | 0x1E, + 27474 - 19968: jis0212<<14 | 0x24<<7 | 0x53, + 27475 - 19968: jis0208<<14 | 0x13<<7 | 0x1E, + 27476 - 19968: jis0208<<14 | 0x3C<<7 | 0x20, + 27478 - 19968: jis0212<<14 | 0x24<<7 | 0x54, + 27480 - 19968: jis0212<<14 | 0x24<<7 | 0x55, + 27481 - 19968: jis0208<<14 | 0x3C<<7 | 0x1F, + 27483 - 19968: jis0208<<14 | 0x3C<<7 | 0x21, + 27485 - 19968: jis0212<<14 | 0x24<<7 | 0x56, + 27487 - 19968: jis0208<<14 | 0x3C<<7 | 0x22, + 27488 - 19968: jis0212<<14 | 0x24<<7 | 0x57, + 27489 - 19968: jis0208<<14 | 0x3C<<7 | 0x23, + 27490 - 19968: jis0208<<14 | 0x1A<<7 | 0x3E, + 27491 - 19968: jis0208<<14 | 0x1F<<7 | 0x14, + 27492 - 19968: jis0208<<14 | 0x19<<7 | 0x00, + 27494 - 19968: jis0208<<14 | 0x28<<7 | 0x4F, + 27495 - 19968: jis0212<<14 | 0x24<<7 | 0x58, + 27497 - 19968: jis0208<<14 | 0x29<<7 | 0x41, + 27498 - 19968: jis0208<<14 | 0x2E<<7 | 0x23, + 27499 - 19968: jis0212<<14 | 0x24<<7 | 0x59, + 27502 - 19968: jis0212<<14 | 0x24<<7 | 0x5A, + 27503 - 19968: jis0208<<14 | 0x1A<<7 | 0x54, + 27504 - 19968: jis0212<<14 | 0x24<<7 | 0x5B, + 27507 - 19968: jis0208<<14 | 0x19<<7 | 0x2F, + 27508 - 19968: jis0208<<14 | 0x2D<<7 | 0x51, + 27509 - 19968: jis0212<<14 | 0x24<<7 | 0x5C, + 27512 - 19968: jis0208<<14 | 0x3C<<7 | 0x24, + 27513 - 19968: jis0208<<14 | 0x3C<<7 | 0x25, + 27515 - 19968: jis0208<<14 | 0x1A<<7 | 0x3F, + 27517 - 19968: jis0212<<14 | 0x24<<7 | 0x5D, + 27518 - 19968: jis0212<<14 | 0x25<<7 | 0x00, + 27519 - 19968: jis0208<<14 | 0x3C<<7 | 0x26, + 27520 - 19968: jis0208<<14 | 0x3C<<7 | 0x27, + 27522 - 19968: jis0212<<14 | 0x25<<7 | 0x01, + 27523 - 19968: jis0208<<14 | 0x3C<<7 | 0x29, + 27524 - 19968: jis0208<<14 | 0x3C<<7 | 0x28, + 27525 - 19968: jis0212<<14 | 0x25<<7 | 0x02, + 27526 - 19968: jis0208<<14 | 0x2A<<7 | 0x37, + 27529 - 19968: jis0208<<14 | 0x1C<<7 | 0x3D, + 27530 - 19968: jis0208<<14 | 0x1B<<7 | 0x4B, + 27531 - 19968: jis0208<<14 | 0x1A<<7 | 0x23, + 27533 - 19968: jis0208<<14 | 0x3C<<7 | 0x2A, + 27541 - 19968: jis0208<<14 | 0x3C<<7 | 0x2C, + 27542 - 19968: jis0208<<14 | 0x1E<<7 | 0x02, + 27543 - 19968: jis0212<<14 | 0x25<<7 | 0x03, + 27544 - 19968: jis0208<<14 | 0x3C<<7 | 0x2B, + 27547 - 19968: jis0212<<14 | 0x25<<7 | 0x04, + 27550 - 19968: jis0208<<14 | 0x3C<<7 | 0x2D, + 27551 - 19968: jis0212<<14 | 0x25<<7 | 0x05, + 27552 - 19968: jis0212<<14 | 0x25<<7 | 0x06, + 27554 - 19968: jis0212<<14 | 0x25<<7 | 0x07, + 27555 - 19968: jis0212<<14 | 0x25<<7 | 0x08, + 27556 - 19968: jis0208<<14 | 0x3C<<7 | 0x2E, + 27560 - 19968: jis0212<<14 | 0x25<<7 | 0x09, + 27561 - 19968: jis0212<<14 | 0x25<<7 | 0x0A, + 27562 - 19968: jis0208<<14 | 0x3C<<7 | 0x2F, + 27563 - 19968: jis0208<<14 | 0x3C<<7 | 0x30, + 27564 - 19968: jis0212<<14 | 0x25<<7 | 0x0B, + 27565 - 19968: jis0212<<14 | 0x25<<7 | 0x0C, + 27566 - 19968: jis0212<<14 | 0x25<<7 | 0x0D, + 27567 - 19968: jis0208<<14 | 0x3C<<7 | 0x31, + 27568 - 19968: jis0212<<14 | 0x25<<7 | 0x0E, + 27569 - 19968: jis0208<<14 | 0x3C<<7 | 0x33, + 27570 - 19968: jis0208<<14 | 0x3C<<7 | 0x32, + 27571 - 19968: jis0208<<14 | 0x3C<<7 | 0x34, + 27572 - 19968: jis0208<<14 | 0x11<<7 | 0x04, + 27573 - 19968: jis0208<<14 | 0x22<<7 | 0x29, + 27575 - 19968: jis0208<<14 | 0x3C<<7 | 0x35, + 27576 - 19968: jis0212<<14 | 0x25<<7 | 0x0F, + 27577 - 19968: jis0212<<14 | 0x25<<7 | 0x10, + 27578 - 19968: jis0208<<14 | 0x1A<<7 | 0x05, + 27579 - 19968: jis0208<<14 | 0x12<<7 | 0x2B, + 27580 - 19968: jis0208<<14 | 0x3C<<7 | 0x36, + 27581 - 19968: jis0212<<14 | 0x25<<7 | 0x11, + 27582 - 19968: jis0212<<14 | 0x25<<7 | 0x12, + 27583 - 19968: jis0208<<14 | 0x24<<7 | 0x21, + 27584 - 19968: jis0208<<14 | 0x33<<7 | 0x2B, + 27587 - 19968: jis0212<<14 | 0x25<<7 | 0x13, + 27588 - 19968: jis0212<<14 | 0x25<<7 | 0x14, + 27589 - 19968: jis0208<<14 | 0x14<<7 | 0x02, + 27590 - 19968: jis0208<<14 | 0x3C<<7 | 0x37, + 27593 - 19968: jis0212<<14 | 0x25<<7 | 0x15, + 27595 - 19968: jis0208<<14 | 0x3C<<7 | 0x38, + 27596 - 19968: jis0212<<14 | 0x25<<7 | 0x16, + 27597 - 19968: jis0208<<14 | 0x29<<7 | 0x4B, + 27598 - 19968: jis0208<<14 | 0x2A<<7 | 0x47, + 27602 - 19968: jis0208<<14 | 0x25<<7 | 0x26, + 27603 - 19968: jis0208<<14 | 0x3C<<7 | 0x39, + 27604 - 19968: jis0208<<14 | 0x27<<7 | 0x45, + 27606 - 19968: jis0208<<14 | 0x59<<7 | 0x39, + 27608 - 19968: jis0208<<14 | 0x27<<7 | 0x5A, + 27610 - 19968: jis0212<<14 | 0x25<<7 | 0x18, + 27611 - 19968: jis0208<<14 | 0x2B<<7 | 0x32, + 27615 - 19968: jis0208<<14 | 0x3C<<7 | 0x3A, + 27617 - 19968: jis0212<<14 | 0x25<<7 | 0x19, + 27619 - 19968: jis0212<<14 | 0x25<<7 | 0x1A, + 27622 - 19968: jis0212<<14 | 0x25<<7 | 0x1B, + 27623 - 19968: jis0212<<14 | 0x25<<7 | 0x1C, + 27627 - 19968: jis0208<<14 | 0x3C<<7 | 0x3C, + 27628 - 19968: jis0208<<14 | 0x3C<<7 | 0x3B, + 27630 - 19968: jis0212<<14 | 0x25<<7 | 0x1D, + 27631 - 19968: jis0208<<14 | 0x3C<<7 | 0x3E, + 27633 - 19968: jis0212<<14 | 0x25<<7 | 0x1E, + 27635 - 19968: jis0208<<14 | 0x3C<<7 | 0x3D, + 27639 - 19968: jis0212<<14 | 0x25<<7 | 0x1F, + 27641 - 19968: jis0212<<14 | 0x25<<7 | 0x20, + 27647 - 19968: jis0212<<14 | 0x25<<7 | 0x21, + 27650 - 19968: jis0212<<14 | 0x25<<7 | 0x22, + 27652 - 19968: jis0212<<14 | 0x25<<7 | 0x23, + 27653 - 19968: jis0212<<14 | 0x25<<7 | 0x24, + 27656 - 19968: jis0208<<14 | 0x3C<<7 | 0x40, + 27657 - 19968: jis0212<<14 | 0x25<<7 | 0x25, + 27661 - 19968: jis0212<<14 | 0x25<<7 | 0x26, + 27662 - 19968: jis0212<<14 | 0x25<<7 | 0x27, + 27663 - 19968: jis0208<<14 | 0x1A<<7 | 0x40, + 27664 - 19968: jis0212<<14 | 0x25<<7 | 0x28, + 27665 - 19968: jis0208<<14 | 0x2B<<7 | 0x10, + 27666 - 19968: jis0212<<14 | 0x25<<7 | 0x29, + 27667 - 19968: jis0208<<14 | 0x3C<<7 | 0x41, + 27668 - 19968: jis0208<<14 | 0x3C<<7 | 0x42, + 27671 - 19968: jis0208<<14 | 0x14<<7 | 0x03, + 27673 - 19968: jis0212<<14 | 0x25<<7 | 0x2A, + 27675 - 19968: jis0208<<14 | 0x3C<<7 | 0x43, + 27679 - 19968: jis0212<<14 | 0x25<<7 | 0x2B, + 27683 - 19968: jis0208<<14 | 0x3C<<7 | 0x45, + 27684 - 19968: jis0208<<14 | 0x3C<<7 | 0x44, + 27686 - 19968: jis0212<<14 | 0x25<<7 | 0x2C, + 27687 - 19968: jis0212<<14 | 0x25<<7 | 0x2D, + 27688 - 19968: jis0212<<14 | 0x25<<7 | 0x2E, + 27692 - 19968: jis0212<<14 | 0x25<<7 | 0x2F, + 27694 - 19968: jis0212<<14 | 0x25<<7 | 0x30, + 27699 - 19968: jis0212<<14 | 0x25<<7 | 0x31, + 27700 - 19968: jis0208<<14 | 0x1E<<7 | 0x44, + 27701 - 19968: jis0212<<14 | 0x25<<7 | 0x32, + 27702 - 19968: jis0212<<14 | 0x25<<7 | 0x33, + 27703 - 19968: jis0208<<14 | 0x28<<7 | 0x18, + 27704 - 19968: jis0208<<14 | 0x10<<7 | 0x29, + 27706 - 19968: jis0212<<14 | 0x25<<7 | 0x34, + 27707 - 19968: jis0212<<14 | 0x25<<7 | 0x35, + 27710 - 19968: jis0208<<14 | 0x27<<7 | 0x24, + 27711 - 19968: jis0208<<14 | 0x59<<7 | 0x3A, + 27712 - 19968: jis0208<<14 | 0x23<<7 | 0x54, + 27713 - 19968: jis0208<<14 | 0x1C<<7 | 0x20, + 27714 - 19968: jis0208<<14 | 0x14<<7 | 0x40, + 27722 - 19968: jis0212<<14 | 0x25<<7 | 0x37, + 27723 - 19968: jis0212<<14 | 0x25<<7 | 0x38, + 27725 - 19968: jis0212<<14 | 0x25<<7 | 0x39, + 27726 - 19968: jis0208<<14 | 0x27<<7 | 0x25, + 27727 - 19968: jis0212<<14 | 0x25<<7 | 0x3A, + 27728 - 19968: jis0208<<14 | 0x1B<<7 | 0x0D, + 27730 - 19968: jis0212<<14 | 0x25<<7 | 0x3B, + 27732 - 19968: jis0212<<14 | 0x25<<7 | 0x3C, + 27733 - 19968: jis0208<<14 | 0x3C<<7 | 0x47, + 27735 - 19968: jis0208<<14 | 0x13<<7 | 0x1F, + 27737 - 19968: jis0212<<14 | 0x25<<7 | 0x3D, + 27738 - 19968: jis0208<<14 | 0x10<<7 | 0x57, + 27739 - 19968: jis0212<<14 | 0x25<<7 | 0x3E, + 27740 - 19968: jis0208<<14 | 0x59<<7 | 0x3B, + 27741 - 19968: jis0208<<14 | 0x25<<7 | 0x51, + 27742 - 19968: jis0208<<14 | 0x3C<<7 | 0x46, + 27743 - 19968: jis0208<<14 | 0x18<<7 | 0x1D, + 27744 - 19968: jis0208<<14 | 0x22<<7 | 0x32, + 27746 - 19968: jis0208<<14 | 0x3C<<7 | 0x48, + 27751 - 19968: jis0212<<14 | 0x26<<7 | 0x15, + 27752 - 19968: jis0208<<14 | 0x3C<<7 | 0x50, + 27754 - 19968: jis0208<<14 | 0x3C<<7 | 0x49, + 27755 - 19968: jis0212<<14 | 0x25<<7 | 0x40, + 27757 - 19968: jis0212<<14 | 0x25<<7 | 0x41, + 27759 - 19968: jis0208<<14 | 0x59<<7 | 0x3D, + 27760 - 19968: jis0208<<14 | 0x21<<7 | 0x20, + 27762 - 19968: jis0208<<14 | 0x14<<7 | 0x41, + 27763 - 19968: jis0208<<14 | 0x3C<<7 | 0x51, + 27764 - 19968: jis0212<<14 | 0x25<<7 | 0x43, + 27766 - 19968: jis0212<<14 | 0x25<<7 | 0x44, + 27768 - 19968: jis0212<<14 | 0x25<<7 | 0x45, + 27769 - 19968: jis0212<<14 | 0x25<<7 | 0x46, + 27770 - 19968: jis0208<<14 | 0x16<<7 | 0x47, + 27771 - 19968: jis0212<<14 | 0x25<<7 | 0x47, + 27773 - 19968: jis0208<<14 | 0x14<<7 | 0x04, + 27774 - 19968: jis0208<<14 | 0x3C<<7 | 0x4F, + 27777 - 19968: jis0208<<14 | 0x3C<<7 | 0x4D, + 27778 - 19968: jis0208<<14 | 0x3C<<7 | 0x4A, + 27779 - 19968: jis0208<<14 | 0x2C<<7 | 0x3F, + 27781 - 19968: jis0212<<14 | 0x25<<7 | 0x48, + 27782 - 19968: jis0208<<14 | 0x59<<7 | 0x3C, + 27783 - 19968: jis0212<<14 | 0x25<<7 | 0x4A, + 27784 - 19968: jis0208<<14 | 0x23<<7 | 0x1F, + 27785 - 19968: jis0212<<14 | 0x25<<7 | 0x4B, + 27788 - 19968: jis0208<<14 | 0x25<<7 | 0x38, + 27789 - 19968: jis0208<<14 | 0x3C<<7 | 0x4B, + 27792 - 19968: jis0208<<14 | 0x3C<<7 | 0x53, + 27794 - 19968: jis0208<<14 | 0x3C<<7 | 0x52, + 27795 - 19968: jis0208<<14 | 0x16<<7 | 0x02, + 27796 - 19968: jis0212<<14 | 0x25<<7 | 0x4C, + 27797 - 19968: jis0212<<14 | 0x25<<7 | 0x4D, + 27798 - 19968: jis0208<<14 | 0x11<<7 | 0x0C, + 27799 - 19968: jis0212<<14 | 0x25<<7 | 0x4E, + 27800 - 19968: jis0212<<14 | 0x25<<7 | 0x4F, + 27801 - 19968: jis0208<<14 | 0x19<<7 | 0x1A, + 27802 - 19968: jis0208<<14 | 0x3C<<7 | 0x4C, + 27803 - 19968: jis0208<<14 | 0x3C<<7 | 0x4E, + 27804 - 19968: jis0212<<14 | 0x25<<7 | 0x50, + 27807 - 19968: jis0212<<14 | 0x25<<7 | 0x51, + 27809 - 19968: jis0208<<14 | 0x2A<<7 | 0x36, + 27810 - 19968: jis0208<<14 | 0x21<<7 | 0x53, + 27819 - 19968: jis0208<<14 | 0x2A<<7 | 0x56, + 27822 - 19968: jis0208<<14 | 0x3C<<7 | 0x5B, + 27824 - 19968: jis0212<<14 | 0x25<<7 | 0x52, + 27825 - 19968: jis0208<<14 | 0x3C<<7 | 0x5C, + 27826 - 19968: jis0212<<14 | 0x25<<7 | 0x53, + 27827 - 19968: jis0208<<14 | 0x11<<7 | 0x2E, + 27828 - 19968: jis0212<<14 | 0x25<<7 | 0x54, + 27832 - 19968: jis0208<<14 | 0x29<<7 | 0x07, + 27833 - 19968: jis0208<<14 | 0x2B<<7 | 0x5C, + 27834 - 19968: jis0208<<14 | 0x3D<<7 | 0x00, + 27835 - 19968: jis0208<<14 | 0x1B<<7 | 0x02, + 27836 - 19968: jis0208<<14 | 0x1D<<7 | 0x21, + 27837 - 19968: jis0208<<14 | 0x3C<<7 | 0x57, + 27838 - 19968: jis0208<<14 | 0x3C<<7 | 0x5D, + 27839 - 19968: jis0208<<14 | 0x10<<7 | 0x47, + 27841 - 19968: jis0208<<14 | 0x15<<7 | 0x16, + 27842 - 19968: jis0212<<14 | 0x25<<7 | 0x55, + 27844 - 19968: jis0208<<14 | 0x3C<<7 | 0x54, + 27845 - 19968: jis0208<<14 | 0x3C<<7 | 0x59, + 27846 - 19968: jis0212<<14 | 0x25<<7 | 0x56, + 27849 - 19968: jis0208<<14 | 0x1F<<7 | 0x53, + 27850 - 19968: jis0208<<14 | 0x26<<7 | 0x50, + 27852 - 19968: jis0208<<14 | 0x27<<7 | 0x46, + 27853 - 19968: jis0212<<14 | 0x25<<7 | 0x57, + 27855 - 19968: jis0212<<14 | 0x25<<7 | 0x58, + 27856 - 19968: jis0212<<14 | 0x25<<7 | 0x59, + 27857 - 19968: jis0212<<14 | 0x25<<7 | 0x5A, + 27858 - 19968: jis0212<<14 | 0x25<<7 | 0x5B, + 27859 - 19968: jis0208<<14 | 0x3C<<7 | 0x56, + 27860 - 19968: jis0212<<14 | 0x25<<7 | 0x5C, + 27861 - 19968: jis0208<<14 | 0x2A<<7 | 0x00, + 27862 - 19968: jis0212<<14 | 0x25<<7 | 0x5D, + 27863 - 19968: jis0208<<14 | 0x3C<<7 | 0x58, + 27865 - 19968: jis0208<<14 | 0x3D<<7 | 0x03, + 27866 - 19968: jis0208<<14 | 0x59<<7 | 0x3E, + 27867 - 19968: jis0208<<14 | 0x3D<<7 | 0x01, + 27868 - 19968: jis0212<<14 | 0x26<<7 | 0x01, + 27869 - 19968: jis0208<<14 | 0x3C<<7 | 0x5A, + 27872 - 19968: jis0212<<14 | 0x26<<7 | 0x02, + 27873 - 19968: jis0208<<14 | 0x2A<<7 | 0x01, + 27874 - 19968: jis0208<<14 | 0x26<<7 | 0x27, + 27875 - 19968: jis0208<<14 | 0x14<<7 | 0x42, + 27877 - 19968: jis0208<<14 | 0x24<<7 | 0x04, + 27879 - 19968: jis0212<<14 | 0x26<<7 | 0x03, + 27880 - 19968: jis0208<<14 | 0x22<<7 | 0x4C, + 27881 - 19968: jis0212<<14 | 0x26<<7 | 0x04, + 27882 - 19968: jis0208<<14 | 0x3D<<7 | 0x04, + 27883 - 19968: jis0212<<14 | 0x26<<7 | 0x05, + 27884 - 19968: jis0212<<14 | 0x26<<7 | 0x06, + 27886 - 19968: jis0212<<14 | 0x26<<7 | 0x07, + 27887 - 19968: jis0208<<14 | 0x3D<<7 | 0x02, + 27888 - 19968: jis0208<<14 | 0x21<<7 | 0x38, + 27889 - 19968: jis0208<<14 | 0x3C<<7 | 0x55, + 27890 - 19968: jis0212<<14 | 0x26<<7 | 0x08, + 27891 - 19968: jis0208<<14 | 0x10<<7 | 0x2A, + 27892 - 19968: jis0212<<14 | 0x26<<7 | 0x09, + 27908 - 19968: jis0208<<14 | 0x59<<7 | 0x3F, + 27911 - 19968: jis0212<<14 | 0x26<<7 | 0x0B, + 27914 - 19968: jis0212<<14 | 0x26<<7 | 0x0C, + 27915 - 19968: jis0208<<14 | 0x2C<<7 | 0x2D, + 27916 - 19968: jis0208<<14 | 0x3D<<7 | 0x0F, + 27918 - 19968: jis0212<<14 | 0x26<<7 | 0x0D, + 27919 - 19968: jis0212<<14 | 0x26<<7 | 0x0E, + 27921 - 19968: jis0212<<14 | 0x26<<7 | 0x0F, + 27922 - 19968: jis0208<<14 | 0x3D<<7 | 0x0E, + 27923 - 19968: jis0212<<14 | 0x26<<7 | 0x10, + 27927 - 19968: jis0208<<14 | 0x1F<<7 | 0x55, + 27929 - 19968: jis0208<<14 | 0x3D<<7 | 0x0B, + 27930 - 19968: jis0212<<14 | 0x26<<7 | 0x11, + 27931 - 19968: jis0208<<14 | 0x2C<<7 | 0x4B, + 27934 - 19968: jis0208<<14 | 0x25<<7 | 0x15, + 27935 - 19968: jis0208<<14 | 0x3D<<7 | 0x05, + 27941 - 19968: jis0208<<14 | 0x23<<7 | 0x24, + 27942 - 19968: jis0212<<14 | 0x26<<7 | 0x12, + 27943 - 19968: jis0212<<14 | 0x26<<7 | 0x13, + 27944 - 19968: jis0212<<14 | 0x26<<7 | 0x14, + 27945 - 19968: jis0208<<14 | 0x10<<7 | 0x2B, + 27946 - 19968: jis0208<<14 | 0x18<<7 | 0x1E, + 27947 - 19968: jis0208<<14 | 0x3D<<7 | 0x08, + 27950 - 19968: jis0212<<14 | 0x26<<7 | 0x16, + 27951 - 19968: jis0212<<14 | 0x26<<7 | 0x17, + 27953 - 19968: jis0212<<14 | 0x26<<7 | 0x18, + 27954 - 19968: jis0208<<14 | 0x1C<<7 | 0x06, + 27955 - 19968: jis0208<<14 | 0x3D<<7 | 0x0D, + 27957 - 19968: jis0208<<14 | 0x3D<<7 | 0x0C, + 27958 - 19968: jis0208<<14 | 0x3D<<7 | 0x07, + 27960 - 19968: jis0208<<14 | 0x3D<<7 | 0x0A, + 27961 - 19968: jis0212<<14 | 0x26<<7 | 0x19, + 27963 - 19968: jis0208<<14 | 0x12<<7 | 0x47, + 27964 - 19968: jis0212<<14 | 0x26<<7 | 0x1A, + 27965 - 19968: jis0208<<14 | 0x3D<<7 | 0x09, + 27966 - 19968: jis0208<<14 | 0x26<<7 | 0x28, + 27967 - 19968: jis0212<<14 | 0x26<<7 | 0x1B, + 27969 - 19968: jis0208<<14 | 0x2D<<7 | 0x0D, + 27972 - 19968: jis0208<<14 | 0x1D<<7 | 0x53, + 27973 - 19968: jis0208<<14 | 0x1F<<7 | 0x54, + 27991 - 19968: jis0212<<14 | 0x26<<7 | 0x1C, + 27993 - 19968: jis0208<<14 | 0x3D<<7 | 0x15, + 27994 - 19968: jis0208<<14 | 0x3D<<7 | 0x13, + 27996 - 19968: jis0208<<14 | 0x28<<7 | 0x2C, + 27998 - 19968: jis0212<<14 | 0x26<<7 | 0x1D, + 27999 - 19968: jis0212<<14 | 0x26<<7 | 0x1E, + 28001 - 19968: jis0212<<14 | 0x26<<7 | 0x1F, + 28003 - 19968: jis0208<<14 | 0x3D<<7 | 0x10, + 28004 - 19968: jis0208<<14 | 0x3D<<7 | 0x12, + 28005 - 19968: jis0212<<14 | 0x26<<7 | 0x20, + 28006 - 19968: jis0208<<14 | 0x10<<7 | 0x19, + 28007 - 19968: jis0212<<14 | 0x26<<7 | 0x21, + 28009 - 19968: jis0208<<14 | 0x18<<7 | 0x1F, + 28010 - 19968: jis0208<<14 | 0x2E<<7 | 0x11, + 28012 - 19968: jis0208<<14 | 0x12<<7 | 0x1C, + 28014 - 19968: jis0208<<14 | 0x28<<7 | 0x41, + 28015 - 19968: jis0208<<14 | 0x59<<7 | 0x41, + 28016 - 19968: jis0212<<14 | 0x26<<7 | 0x23, + 28020 - 19968: jis0208<<14 | 0x2C<<7 | 0x40, + 28023 - 19968: jis0208<<14 | 0x12<<7 | 0x03, + 28024 - 19968: jis0208<<14 | 0x1E<<7 | 0x1A, + 28025 - 19968: jis0208<<14 | 0x3D<<7 | 0x14, + 28028 - 19968: jis0212<<14 | 0x26<<7 | 0x24, + 28034 - 19968: jis0212<<14 | 0x26<<7 | 0x25, + 28037 - 19968: jis0208<<14 | 0x3D<<7 | 0x19, + 28039 - 19968: jis0208<<14 | 0x59<<7 | 0x40, + 28040 - 19968: jis0208<<14 | 0x1D<<7 | 0x22, + 28044 - 19968: jis0208<<14 | 0x2C<<7 | 0x0F, + 28046 - 19968: jis0208<<14 | 0x3D<<7 | 0x16, + 28049 - 19968: jis0212<<14 | 0x26<<7 | 0x27, + 28050 - 19968: jis0212<<14 | 0x26<<7 | 0x28, + 28051 - 19968: jis0208<<14 | 0x3D<<7 | 0x11, + 28052 - 19968: jis0212<<14 | 0x26<<7 | 0x29, + 28053 - 19968: jis0208<<14 | 0x3D<<7 | 0x17, + 28054 - 19968: jis0208<<14 | 0x59<<7 | 0x42, + 28055 - 19968: jis0212<<14 | 0x26<<7 | 0x2B, + 28056 - 19968: jis0212<<14 | 0x26<<7 | 0x2C, + 28057 - 19968: jis0208<<14 | 0x2D<<7 | 0x3D, + 28059 - 19968: jis0208<<14 | 0x24<<7 | 0x52, + 28060 - 19968: jis0208<<14 | 0x25<<7 | 0x21, + 28074 - 19968: jis0212<<14 | 0x26<<7 | 0x2D, + 28076 - 19968: jis0208<<14 | 0x59<<7 | 0x43, + 28079 - 19968: jis0208<<14 | 0x12<<7 | 0x15, + 28082 - 19968: jis0208<<14 | 0x10<<7 | 0x34, + 28084 - 19968: jis0212<<14 | 0x26<<7 | 0x2F, + 28085 - 19968: jis0208<<14 | 0x3D<<7 | 0x1D, + 28087 - 19968: jis0212<<14 | 0x26<<7 | 0x30, + 28088 - 19968: jis0208<<14 | 0x3D<<7 | 0x20, + 28089 - 19968: jis0212<<14 | 0x26<<7 | 0x31, + 28092 - 19968: jis0208<<14 | 0x2D<<7 | 0x22, + 28093 - 19968: jis0212<<14 | 0x26<<7 | 0x32, + 28095 - 19968: jis0212<<14 | 0x26<<7 | 0x33, + 28096 - 19968: jis0208<<14 | 0x2C<<7 | 0x43, + 28100 - 19968: jis0212<<14 | 0x26<<7 | 0x34, + 28101 - 19968: jis0208<<14 | 0x3D<<7 | 0x27, + 28102 - 19968: jis0208<<14 | 0x3D<<7 | 0x21, + 28103 - 19968: jis0208<<14 | 0x3D<<7 | 0x1E, + 28104 - 19968: jis0212<<14 | 0x26<<7 | 0x35, + 28106 - 19968: jis0212<<14 | 0x26<<7 | 0x36, + 28107 - 19968: jis0208<<14 | 0x2D<<7 | 0x33, + 28108 - 19968: jis0208<<14 | 0x3D<<7 | 0x24, + 28110 - 19968: jis0212<<14 | 0x26<<7 | 0x37, + 28111 - 19968: jis0208<<14 | 0x59<<7 | 0x44, + 28113 - 19968: jis0208<<14 | 0x1C<<7 | 0x29, + 28114 - 19968: jis0208<<14 | 0x3D<<7 | 0x26, + 28117 - 19968: jis0208<<14 | 0x3D<<7 | 0x2B, + 28118 - 19968: jis0212<<14 | 0x26<<7 | 0x39, + 28120 - 19968: jis0208<<14 | 0x24<<7 | 0x50, + 28121 - 19968: jis0208<<14 | 0x3D<<7 | 0x29, + 28123 - 19968: jis0212<<14 | 0x26<<7 | 0x3A, + 28125 - 19968: jis0212<<14 | 0x26<<7 | 0x3B, + 28126 - 19968: jis0208<<14 | 0x3D<<7 | 0x23, + 28127 - 19968: jis0212<<14 | 0x26<<7 | 0x3C, + 28128 - 19968: jis0212<<14 | 0x26<<7 | 0x3D, + 28129 - 19968: jis0208<<14 | 0x22<<7 | 0x17, + 28130 - 19968: jis0212<<14 | 0x26<<7 | 0x3E, + 28132 - 19968: jis0208<<14 | 0x3D<<7 | 0x2A, + 28133 - 19968: jis0212<<14 | 0x26<<7 | 0x3F, + 28134 - 19968: jis0208<<14 | 0x3D<<7 | 0x1F, + 28136 - 19968: jis0208<<14 | 0x3D<<7 | 0x25, + 28137 - 19968: jis0212<<14 | 0x26<<7 | 0x40, + 28138 - 19968: jis0208<<14 | 0x3D<<7 | 0x2C, + 28139 - 19968: jis0208<<14 | 0x0F<<7 | 0x5B, + 28140 - 19968: jis0208<<14 | 0x3D<<7 | 0x22, + 28142 - 19968: jis0208<<14 | 0x3D<<7 | 0x2D, + 28143 - 19968: jis0212<<14 | 0x26<<7 | 0x41, + 28144 - 19968: jis0212<<14 | 0x26<<7 | 0x42, + 28145 - 19968: jis0208<<14 | 0x1E<<7 | 0x1B, + 28146 - 19968: jis0208<<14 | 0x59<<7 | 0x46, + 28147 - 19968: jis0208<<14 | 0x1C<<7 | 0x3E, + 28148 - 19968: jis0212<<14 | 0x26<<7 | 0x43, + 28149 - 19968: jis0208<<14 | 0x29<<7 | 0x04, + 28150 - 19968: jis0212<<14 | 0x26<<7 | 0x44, + 28151 - 19968: jis0208<<14 | 0x19<<7 | 0x0D, + 28152 - 19968: jis0208<<14 | 0x59<<7 | 0x45, + 28153 - 19968: jis0208<<14 | 0x3D<<7 | 0x1A, + 28154 - 19968: jis0208<<14 | 0x3D<<7 | 0x28, + 28155 - 19968: jis0208<<14 | 0x24<<7 | 0x19, + 28156 - 19968: jis0208<<14 | 0x59<<7 | 0x47, + 28160 - 19968: jis0212<<14 | 0x26<<7 | 0x46, + 28164 - 19968: jis0212<<14 | 0x26<<7 | 0x47, + 28165 - 19968: jis0208<<14 | 0x1F<<7 | 0x15, + 28167 - 19968: jis0208<<14 | 0x12<<7 | 0x48, + 28168 - 19968: jis0208<<14 | 0x19<<7 | 0x30, + 28169 - 19968: jis0208<<14 | 0x1D<<7 | 0x23, + 28170 - 19968: jis0208<<14 | 0x3D<<7 | 0x1C, + 28171 - 19968: jis0208<<14 | 0x1C<<7 | 0x21, + 28179 - 19968: jis0208<<14 | 0x16<<7 | 0x2B, + 28181 - 19968: jis0208<<14 | 0x3D<<7 | 0x1B, + 28185 - 19968: jis0208<<14 | 0x3D<<7 | 0x31, + 28186 - 19968: jis0208<<14 | 0x1C<<7 | 0x4C, + 28187 - 19968: jis0208<<14 | 0x17<<7 | 0x19, + 28189 - 19968: jis0208<<14 | 0x3D<<7 | 0x40, + 28190 - 19968: jis0212<<14 | 0x26<<7 | 0x48, + 28191 - 19968: jis0208<<14 | 0x3D<<7 | 0x3A, + 28192 - 19968: jis0208<<14 | 0x14<<7 | 0x53, + 28193 - 19968: jis0208<<14 | 0x24<<7 | 0x2E, + 28194 - 19968: jis0212<<14 | 0x26<<7 | 0x49, + 28195 - 19968: jis0208<<14 | 0x3D<<7 | 0x35, + 28196 - 19968: jis0208<<14 | 0x3D<<7 | 0x3E, + 28197 - 19968: jis0208<<14 | 0x0F<<7 | 0x0E, + 28198 - 19968: jis0208<<14 | 0x10<<7 | 0x11, + 28199 - 19968: jis0208<<14 | 0x59<<7 | 0x4A, + 28201 - 19968: jis0208<<14 | 0x11<<7 | 0x18, + 28203 - 19968: jis0208<<14 | 0x3D<<7 | 0x37, + 28204 - 19968: jis0208<<14 | 0x21<<7 | 0x0B, + 28205 - 19968: jis0208<<14 | 0x3D<<7 | 0x2E, + 28206 - 19968: jis0208<<14 | 0x3D<<7 | 0x30, + 28207 - 19968: jis0208<<14 | 0x18<<7 | 0x20, + 28210 - 19968: jis0212<<14 | 0x26<<7 | 0x4B, + 28214 - 19968: jis0212<<14 | 0x26<<7 | 0x4C, + 28216 - 19968: jis0208<<14 | 0x3D<<7 | 0x41, + 28217 - 19968: jis0208<<14 | 0x59<<7 | 0x48, + 28218 - 19968: jis0208<<14 | 0x3D<<7 | 0x3C, + 28219 - 19968: jis0212<<14 | 0x26<<7 | 0x4E, + 28220 - 19968: jis0208<<14 | 0x59<<7 | 0x4B, + 28222 - 19968: jis0208<<14 | 0x3D<<7 | 0x34, + 28227 - 19968: jis0208<<14 | 0x3D<<7 | 0x3B, + 28228 - 19968: jis0212<<14 | 0x26<<7 | 0x50, + 28229 - 19968: jis0212<<14 | 0x26<<7 | 0x51, + 28232 - 19968: jis0212<<14 | 0x26<<7 | 0x52, + 28233 - 19968: jis0212<<14 | 0x26<<7 | 0x53, + 28234 - 19968: jis0208<<14 | 0x2B<<7 | 0x0A, + 28235 - 19968: jis0212<<14 | 0x26<<7 | 0x54, + 28237 - 19968: jis0208<<14 | 0x3D<<7 | 0x39, + 28238 - 19968: jis0208<<14 | 0x3D<<7 | 0x3D, + 28239 - 19968: jis0212<<14 | 0x26<<7 | 0x55, + 28241 - 19968: jis0212<<14 | 0x26<<7 | 0x56, + 28242 - 19968: jis0212<<14 | 0x26<<7 | 0x57, + 28243 - 19968: jis0212<<14 | 0x26<<7 | 0x58, + 28244 - 19968: jis0212<<14 | 0x26<<7 | 0x59, + 28246 - 19968: jis0208<<14 | 0x17<<7 | 0x2F, + 28247 - 19968: jis0212<<14 | 0x26<<7 | 0x5A, + 28248 - 19968: jis0208<<14 | 0x1D<<7 | 0x24, + 28251 - 19968: jis0208<<14 | 0x22<<7 | 0x18, + 28252 - 19968: jis0208<<14 | 0x59<<7 | 0x49, + 28253 - 19968: jis0212<<14 | 0x26<<7 | 0x5C, + 28254 - 19968: jis0212<<14 | 0x26<<7 | 0x5D, + 28255 - 19968: jis0208<<14 | 0x3D<<7 | 0x33, + 28258 - 19968: jis0212<<14 | 0x27<<7 | 0x00, + 28259 - 19968: jis0212<<14 | 0x27<<7 | 0x01, + 28263 - 19968: jis0208<<14 | 0x2C<<7 | 0x0E, + 28264 - 19968: jis0212<<14 | 0x27<<7 | 0x02, + 28267 - 19968: jis0208<<14 | 0x3D<<7 | 0x36, + 28270 - 19968: jis0208<<14 | 0x3D<<7 | 0x2F, + 28271 - 19968: jis0208<<14 | 0x24<<7 | 0x51, + 28274 - 19968: jis0208<<14 | 0x3D<<7 | 0x32, + 28275 - 19968: jis0212<<14 | 0x27<<7 | 0x03, + 28278 - 19968: jis0208<<14 | 0x3D<<7 | 0x38, + 28283 - 19968: jis0212<<14 | 0x27<<7 | 0x04, + 28285 - 19968: jis0212<<14 | 0x27<<7 | 0x05, + 28286 - 19968: jis0208<<14 | 0x2E<<7 | 0x30, + 28287 - 19968: jis0208<<14 | 0x1B<<7 | 0x1D, + 28288 - 19968: jis0208<<14 | 0x2A<<7 | 0x5D, + 28290 - 19968: jis0208<<14 | 0x3D<<7 | 0x42, + 28300 - 19968: jis0208<<14 | 0x27<<7 | 0x0D, + 28301 - 19968: jis0212<<14 | 0x27<<7 | 0x06, + 28303 - 19968: jis0208<<14 | 0x3D<<7 | 0x4E, + 28304 - 19968: jis0208<<14 | 0x17<<7 | 0x1A, + 28307 - 19968: jis0212<<14 | 0x27<<7 | 0x07, + 28310 - 19968: jis0208<<14 | 0x1C<<7 | 0x3F, + 28312 - 19968: jis0208<<14 | 0x3D<<7 | 0x44, + 28313 - 19968: jis0212<<14 | 0x27<<7 | 0x08, + 28316 - 19968: jis0208<<14 | 0x2D<<7 | 0x0E, + 28317 - 19968: jis0208<<14 | 0x18<<7 | 0x21, + 28319 - 19968: jis0208<<14 | 0x3D<<7 | 0x51, + 28320 - 19968: jis0212<<14 | 0x27<<7 | 0x09, + 28322 - 19968: jis0208<<14 | 0x0F<<7 | 0x4D, + 28325 - 19968: jis0208<<14 | 0x3D<<7 | 0x4F, + 28327 - 19968: jis0212<<14 | 0x27<<7 | 0x0A, + 28330 - 19968: jis0208<<14 | 0x3D<<7 | 0x43, + 28333 - 19968: jis0212<<14 | 0x27<<7 | 0x0B, + 28334 - 19968: jis0212<<14 | 0x27<<7 | 0x0C, + 28335 - 19968: jis0208<<14 | 0x3D<<7 | 0x49, + 28337 - 19968: jis0212<<14 | 0x27<<7 | 0x0D, + 28338 - 19968: jis0208<<14 | 0x3D<<7 | 0x4B, + 28339 - 19968: jis0212<<14 | 0x27<<7 | 0x0E, + 28342 - 19968: jis0208<<14 | 0x2C<<7 | 0x2E, + 28343 - 19968: jis0208<<14 | 0x3D<<7 | 0x46, + 28346 - 19968: jis0208<<14 | 0x24<<7 | 0x0D, + 28347 - 19968: jis0212<<14 | 0x27<<7 | 0x0F, + 28349 - 19968: jis0208<<14 | 0x3D<<7 | 0x48, + 28351 - 19968: jis0208<<14 | 0x59<<7 | 0x4C, + 28352 - 19968: jis0212<<14 | 0x27<<7 | 0x11, + 28353 - 19968: jis0212<<14 | 0x27<<7 | 0x12, + 28354 - 19968: jis0208<<14 | 0x3D<<7 | 0x50, + 28355 - 19968: jis0212<<14 | 0x27<<7 | 0x13, + 28356 - 19968: jis0208<<14 | 0x3D<<7 | 0x4A, + 28357 - 19968: jis0208<<14 | 0x2B<<7 | 0x26, + 28359 - 19968: jis0212<<14 | 0x27<<7 | 0x14, + 28360 - 19968: jis0212<<14 | 0x27<<7 | 0x15, + 28361 - 19968: jis0208<<14 | 0x3D<<7 | 0x45, + 28362 - 19968: jis0212<<14 | 0x27<<7 | 0x16, + 28363 - 19968: jis0208<<14 | 0x1B<<7 | 0x01, + 28364 - 19968: jis0208<<14 | 0x3D<<7 | 0x5D, + 28365 - 19968: jis0212<<14 | 0x27<<7 | 0x17, + 28366 - 19968: jis0212<<14 | 0x27<<7 | 0x18, + 28367 - 19968: jis0212<<14 | 0x27<<7 | 0x19, + 28369 - 19968: jis0208<<14 | 0x12<<7 | 0x49, + 28371 - 19968: jis0208<<14 | 0x3D<<7 | 0x47, + 28372 - 19968: jis0208<<14 | 0x3D<<7 | 0x4C, + 28373 - 19968: jis0208<<14 | 0x3D<<7 | 0x4D, + 28381 - 19968: jis0208<<14 | 0x21<<7 | 0x4B, + 28382 - 19968: jis0208<<14 | 0x21<<7 | 0x39, + 28395 - 19968: jis0212<<14 | 0x27<<7 | 0x1A, + 28396 - 19968: jis0208<<14 | 0x3D<<7 | 0x55, + 28397 - 19968: jis0212<<14 | 0x27<<7 | 0x1B, + 28398 - 19968: jis0212<<14 | 0x27<<7 | 0x1C, + 28399 - 19968: jis0208<<14 | 0x3D<<7 | 0x5B, + 28402 - 19968: jis0208<<14 | 0x3D<<7 | 0x59, + 28404 - 19968: jis0208<<14 | 0x24<<7 | 0x08, + 28407 - 19968: jis0208<<14 | 0x3E<<7 | 0x02, + 28408 - 19968: jis0208<<14 | 0x3D<<7 | 0x56, + 28409 - 19968: jis0212<<14 | 0x27<<7 | 0x1D, + 28411 - 19968: jis0212<<14 | 0x27<<7 | 0x1E, + 28413 - 19968: jis0212<<14 | 0x27<<7 | 0x1F, + 28414 - 19968: jis0208<<14 | 0x3D<<7 | 0x57, + 28415 - 19968: jis0208<<14 | 0x3D<<7 | 0x3F, + 28417 - 19968: jis0208<<14 | 0x14<<7 | 0x58, + 28418 - 19968: jis0208<<14 | 0x28<<7 | 0x19, + 28420 - 19968: jis0212<<14 | 0x27<<7 | 0x20, + 28422 - 19968: jis0208<<14 | 0x1B<<7 | 0x1E, + 28424 - 19968: jis0212<<14 | 0x27<<7 | 0x21, + 28425 - 19968: jis0208<<14 | 0x18<<7 | 0x56, + 28426 - 19968: jis0212<<14 | 0x27<<7 | 0x22, + 28428 - 19968: jis0212<<14 | 0x27<<7 | 0x23, + 28429 - 19968: jis0212<<14 | 0x27<<7 | 0x24, + 28431 - 19968: jis0208<<14 | 0x2E<<7 | 0x12, + 28433 - 19968: jis0208<<14 | 0x3D<<7 | 0x53, + 28435 - 19968: jis0208<<14 | 0x3E<<7 | 0x01, + 28436 - 19968: jis0208<<14 | 0x10<<7 | 0x48, + 28437 - 19968: jis0208<<14 | 0x20<<7 | 0x45, + 28438 - 19968: jis0212<<14 | 0x27<<7 | 0x25, + 28440 - 19968: jis0212<<14 | 0x27<<7 | 0x26, + 28442 - 19968: jis0212<<14 | 0x27<<7 | 0x27, + 28443 - 19968: jis0212<<14 | 0x27<<7 | 0x28, + 28448 - 19968: jis0208<<14 | 0x26<<7 | 0x58, + 28450 - 19968: jis0208<<14 | 0x13<<7 | 0x20, + 28451 - 19968: jis0208<<14 | 0x2D<<7 | 0x59, + 28454 - 19968: jis0212<<14 | 0x27<<7 | 0x29, + 28457 - 19968: jis0212<<14 | 0x27<<7 | 0x2A, + 28458 - 19968: jis0212<<14 | 0x27<<7 | 0x2B, + 28459 - 19968: jis0208<<14 | 0x2B<<7 | 0x00, + 28460 - 19968: jis0208<<14 | 0x23<<7 | 0x31, + 28461 - 19968: jis0212<<14 | 0x27<<7 | 0x32, + 28463 - 19968: jis0212<<14 | 0x27<<7 | 0x2C, + 28464 - 19968: jis0212<<14 | 0x27<<7 | 0x2D, + 28465 - 19968: jis0208<<14 | 0x3D<<7 | 0x5A, + 28466 - 19968: jis0208<<14 | 0x3D<<7 | 0x5C, + 28467 - 19968: jis0212<<14 | 0x27<<7 | 0x2E, + 28470 - 19968: jis0212<<14 | 0x27<<7 | 0x2F, + 28472 - 19968: jis0208<<14 | 0x20<<7 | 0x11, + 28475 - 19968: jis0212<<14 | 0x27<<7 | 0x30, + 28476 - 19968: jis0212<<14 | 0x27<<7 | 0x31, + 28478 - 19968: jis0208<<14 | 0x3E<<7 | 0x00, + 28479 - 19968: jis0208<<14 | 0x3D<<7 | 0x58, + 28481 - 19968: jis0208<<14 | 0x3D<<7 | 0x52, + 28485 - 19968: jis0208<<14 | 0x13<<7 | 0x22, + 28495 - 19968: jis0212<<14 | 0x27<<7 | 0x33, + 28497 - 19968: jis0212<<14 | 0x27<<7 | 0x34, + 28498 - 19968: jis0212<<14 | 0x27<<7 | 0x35, + 28499 - 19968: jis0212<<14 | 0x27<<7 | 0x36, + 28500 - 19968: jis0208<<14 | 0x16<<7 | 0x48, + 28503 - 19968: jis0212<<14 | 0x27<<7 | 0x37, + 28504 - 19968: jis0208<<14 | 0x3E<<7 | 0x0E, + 28505 - 19968: jis0212<<14 | 0x27<<7 | 0x38, + 28506 - 19968: jis0212<<14 | 0x27<<7 | 0x39, + 28507 - 19968: jis0208<<14 | 0x3E<<7 | 0x09, + 28508 - 19968: jis0208<<14 | 0x1F<<7 | 0x57, + 28509 - 19968: jis0212<<14 | 0x27<<7 | 0x3A, + 28510 - 19968: jis0212<<14 | 0x27<<7 | 0x3B, + 28511 - 19968: jis0208<<14 | 0x12<<7 | 0x42, + 28513 - 19968: jis0212<<14 | 0x27<<7 | 0x3C, + 28514 - 19968: jis0212<<14 | 0x27<<7 | 0x3D, + 28516 - 19968: jis0208<<14 | 0x1C<<7 | 0x40, + 28518 - 19968: jis0208<<14 | 0x3E<<7 | 0x12, + 28520 - 19968: jis0212<<14 | 0x27<<7 | 0x3E, + 28524 - 19968: jis0212<<14 | 0x27<<7 | 0x3F, + 28525 - 19968: jis0208<<14 | 0x3E<<7 | 0x0B, + 28526 - 19968: jis0208<<14 | 0x23<<7 | 0x0B, + 28527 - 19968: jis0208<<14 | 0x3E<<7 | 0x08, + 28528 - 19968: jis0208<<14 | 0x23<<7 | 0x38, + 28532 - 19968: jis0208<<14 | 0x3E<<7 | 0x2B, + 28536 - 19968: jis0208<<14 | 0x3E<<7 | 0x05, + 28538 - 19968: jis0208<<14 | 0x3E<<7 | 0x04, + 28540 - 19968: jis0208<<14 | 0x3E<<7 | 0x0D, + 28541 - 19968: jis0212<<14 | 0x27<<7 | 0x40, + 28542 - 19968: jis0212<<14 | 0x27<<7 | 0x41, + 28544 - 19968: jis0208<<14 | 0x3E<<7 | 0x07, + 28545 - 19968: jis0208<<14 | 0x3E<<7 | 0x06, + 28546 - 19968: jis0208<<14 | 0x3E<<7 | 0x0C, + 28547 - 19968: jis0212<<14 | 0x27<<7 | 0x42, + 28548 - 19968: jis0208<<14 | 0x1F<<7 | 0x00, + 28550 - 19968: jis0208<<14 | 0x3E<<7 | 0x03, + 28551 - 19968: jis0212<<14 | 0x27<<7 | 0x43, + 28552 - 19968: jis0208<<14 | 0x59<<7 | 0x4D, + 28555 - 19968: jis0212<<14 | 0x27<<7 | 0x45, + 28556 - 19968: jis0212<<14 | 0x27<<7 | 0x46, + 28557 - 19968: jis0212<<14 | 0x27<<7 | 0x47, + 28558 - 19968: jis0208<<14 | 0x3E<<7 | 0x0F, + 28560 - 19968: jis0212<<14 | 0x27<<7 | 0x48, + 28561 - 19968: jis0208<<14 | 0x3E<<7 | 0x10, + 28562 - 19968: jis0212<<14 | 0x27<<7 | 0x49, + 28563 - 19968: jis0212<<14 | 0x27<<7 | 0x4A, + 28564 - 19968: jis0212<<14 | 0x27<<7 | 0x4B, + 28566 - 19968: jis0212<<14 | 0x27<<7 | 0x4C, + 28567 - 19968: jis0208<<14 | 0x13<<7 | 0x21, + 28570 - 19968: jis0212<<14 | 0x27<<7 | 0x4D, + 28575 - 19968: jis0212<<14 | 0x27<<7 | 0x4E, + 28576 - 19968: jis0212<<14 | 0x27<<7 | 0x4F, + 28577 - 19968: jis0208<<14 | 0x3E<<7 | 0x15, + 28579 - 19968: jis0208<<14 | 0x3E<<7 | 0x14, + 28580 - 19968: jis0208<<14 | 0x3E<<7 | 0x16, + 28581 - 19968: jis0212<<14 | 0x27<<7 | 0x50, + 28582 - 19968: jis0212<<14 | 0x27<<7 | 0x51, + 28583 - 19968: jis0212<<14 | 0x27<<7 | 0x52, + 28584 - 19968: jis0212<<14 | 0x27<<7 | 0x53, + 28586 - 19968: jis0208<<14 | 0x3E<<7 | 0x19, + 28590 - 19968: jis0212<<14 | 0x27<<7 | 0x54, + 28591 - 19968: jis0212<<14 | 0x27<<7 | 0x55, + 28592 - 19968: jis0212<<14 | 0x27<<7 | 0x56, + 28593 - 19968: jis0208<<14 | 0x24<<7 | 0x22, + 28595 - 19968: jis0208<<14 | 0x3E<<7 | 0x13, + 28597 - 19968: jis0208<<14 | 0x59<<7 | 0x4E, + 28598 - 19968: jis0212<<14 | 0x27<<7 | 0x58, + 28601 - 19968: jis0208<<14 | 0x3E<<7 | 0x17, + 28604 - 19968: jis0212<<14 | 0x27<<7 | 0x59, + 28608 - 19968: jis0208<<14 | 0x16<<7 | 0x42, + 28609 - 19968: jis0208<<14 | 0x21<<7 | 0x58, + 28610 - 19968: jis0208<<14 | 0x3E<<7 | 0x11, + 28611 - 19968: jis0208<<14 | 0x26<<7 | 0x1A, + 28613 - 19968: jis0212<<14 | 0x27<<7 | 0x5A, + 28614 - 19968: jis0208<<14 | 0x3E<<7 | 0x18, + 28615 - 19968: jis0212<<14 | 0x27<<7 | 0x5B, + 28616 - 19968: jis0212<<14 | 0x27<<7 | 0x5C, + 28618 - 19968: jis0212<<14 | 0x27<<7 | 0x5D, + 28628 - 19968: jis0208<<14 | 0x3E<<7 | 0x1D, + 28629 - 19968: jis0208<<14 | 0x3E<<7 | 0x1B, + 28632 - 19968: jis0208<<14 | 0x3E<<7 | 0x1E, + 28634 - 19968: jis0212<<14 | 0x28<<7 | 0x00, + 28635 - 19968: jis0208<<14 | 0x3E<<7 | 0x21, + 28638 - 19968: jis0212<<14 | 0x28<<7 | 0x01, + 28639 - 19968: jis0208<<14 | 0x3E<<7 | 0x1A, + 28640 - 19968: jis0208<<14 | 0x18<<7 | 0x49, + 28641 - 19968: jis0208<<14 | 0x26<<7 | 0x07, + 28644 - 19968: jis0208<<14 | 0x3D<<7 | 0x18, + 28648 - 19968: jis0212<<14 | 0x28<<7 | 0x02, + 28649 - 19968: jis0212<<14 | 0x28<<7 | 0x03, + 28651 - 19968: jis0208<<14 | 0x2C<<7 | 0x53, + 28652 - 19968: jis0208<<14 | 0x3E<<7 | 0x1C, + 28654 - 19968: jis0208<<14 | 0x3E<<7 | 0x20, + 28655 - 19968: jis0208<<14 | 0x21<<7 | 0x54, + 28656 - 19968: jis0212<<14 | 0x28<<7 | 0x04, + 28657 - 19968: jis0208<<14 | 0x3E<<7 | 0x1F, + 28659 - 19968: jis0208<<14 | 0x3E<<7 | 0x0A, + 28661 - 19968: jis0208<<14 | 0x59<<7 | 0x4F, + 28662 - 19968: jis0208<<14 | 0x4E<<7 | 0x48, + 28665 - 19968: jis0212<<14 | 0x28<<7 | 0x06, + 28666 - 19968: jis0208<<14 | 0x3E<<7 | 0x24, + 28668 - 19968: jis0212<<14 | 0x28<<7 | 0x07, + 28669 - 19968: jis0212<<14 | 0x28<<7 | 0x08, + 28670 - 19968: jis0208<<14 | 0x3E<<7 | 0x28, + 28672 - 19968: jis0212<<14 | 0x28<<7 | 0x09, + 28673 - 19968: jis0208<<14 | 0x3E<<7 | 0x26, + 28677 - 19968: jis0208<<14 | 0x59<<7 | 0x50, + 28678 - 19968: jis0212<<14 | 0x28<<7 | 0x0B, + 28679 - 19968: jis0208<<14 | 0x59<<7 | 0x51, + 28681 - 19968: jis0208<<14 | 0x3E<<7 | 0x22, + 28683 - 19968: jis0208<<14 | 0x3E<<7 | 0x23, + 28685 - 19968: jis0212<<14 | 0x28<<7 | 0x0D, + 28687 - 19968: jis0208<<14 | 0x3E<<7 | 0x27, + 28689 - 19968: jis0208<<14 | 0x3E<<7 | 0x25, + 28693 - 19968: jis0208<<14 | 0x28<<7 | 0x2D, + 28695 - 19968: jis0212<<14 | 0x28<<7 | 0x0E, + 28696 - 19968: jis0208<<14 | 0x3E<<7 | 0x2D, + 28698 - 19968: jis0208<<14 | 0x3E<<7 | 0x2A, + 28699 - 19968: jis0208<<14 | 0x3E<<7 | 0x29, + 28701 - 19968: jis0208<<14 | 0x3E<<7 | 0x2C, + 28702 - 19968: jis0208<<14 | 0x25<<7 | 0x33, + 28703 - 19968: jis0208<<14 | 0x3E<<7 | 0x2E, + 28704 - 19968: jis0212<<14 | 0x28<<7 | 0x0F, + 28707 - 19968: jis0212<<14 | 0x28<<7 | 0x10, + 28710 - 19968: jis0208<<14 | 0x22<<7 | 0x54, + 28711 - 19968: jis0208<<14 | 0x21<<7 | 0x4C, + 28712 - 19968: jis0208<<14 | 0x59<<7 | 0x52, + 28716 - 19968: jis0208<<14 | 0x1F<<7 | 0x04, + 28719 - 19968: jis0212<<14 | 0x28<<7 | 0x11, + 28720 - 19968: jis0208<<14 | 0x3E<<7 | 0x2F, + 28722 - 19968: jis0208<<14 | 0x3E<<7 | 0x31, + 28724 - 19968: jis0212<<14 | 0x28<<7 | 0x12, + 28727 - 19968: jis0212<<14 | 0x28<<7 | 0x13, + 28729 - 19968: jis0212<<14 | 0x28<<7 | 0x14, + 28732 - 19968: jis0212<<14 | 0x28<<7 | 0x15, + 28734 - 19968: jis0208<<14 | 0x3E<<7 | 0x30, + 28739 - 19968: jis0212<<14 | 0x28<<7 | 0x16, + 28740 - 19968: jis0212<<14 | 0x28<<7 | 0x17, + 28744 - 19968: jis0212<<14 | 0x28<<7 | 0x18, + 28745 - 19968: jis0212<<14 | 0x28<<7 | 0x19, + 28746 - 19968: jis0212<<14 | 0x28<<7 | 0x1A, + 28747 - 19968: jis0212<<14 | 0x28<<7 | 0x1B, + 28748 - 19968: jis0208<<14 | 0x3D<<7 | 0x54, + 28750 - 19968: jis0212<<14 | 0x28<<7 | 0x20, + 28753 - 19968: jis0208<<14 | 0x3E<<7 | 0x32, + 28756 - 19968: jis0212<<14 | 0x28<<7 | 0x1C, + 28757 - 19968: jis0212<<14 | 0x28<<7 | 0x1D, + 28760 - 19968: jis0208<<14 | 0x25<<7 | 0x46, + 28765 - 19968: jis0212<<14 | 0x28<<7 | 0x1E, + 28766 - 19968: jis0212<<14 | 0x28<<7 | 0x1F, + 28771 - 19968: jis0208<<14 | 0x3E<<7 | 0x33, + 28772 - 19968: jis0212<<14 | 0x28<<7 | 0x21, + 28773 - 19968: jis0212<<14 | 0x28<<7 | 0x22, + 28779 - 19968: jis0208<<14 | 0x11<<7 | 0x2F, + 28780 - 19968: jis0212<<14 | 0x28<<7 | 0x23, + 28782 - 19968: jis0212<<14 | 0x28<<7 | 0x24, + 28783 - 19968: jis0208<<14 | 0x24<<7 | 0x53, + 28784 - 19968: jis0208<<14 | 0x12<<7 | 0x04, + 28789 - 19968: jis0212<<14 | 0x28<<7 | 0x25, + 28790 - 19968: jis0212<<14 | 0x28<<7 | 0x26, + 28792 - 19968: jis0208<<14 | 0x14<<7 | 0x43, + 28796 - 19968: jis0208<<14 | 0x1B<<7 | 0x3D, + 28797 - 19968: jis0208<<14 | 0x19<<7 | 0x31, + 28798 - 19968: jis0212<<14 | 0x28<<7 | 0x27, + 28801 - 19968: jis0212<<14 | 0x28<<7 | 0x28, + 28805 - 19968: jis0208<<14 | 0x59<<7 | 0x53, + 28806 - 19968: jis0212<<14 | 0x28<<7 | 0x2A, + 28809 - 19968: jis0208<<14 | 0x2E<<7 | 0x06, + 28810 - 19968: jis0208<<14 | 0x1E<<7 | 0x45, + 28814 - 19968: jis0208<<14 | 0x10<<7 | 0x49, + 28818 - 19968: jis0208<<14 | 0x3E<<7 | 0x35, + 28820 - 19968: jis0212<<14 | 0x28<<7 | 0x2B, + 28821 - 19968: jis0212<<14 | 0x28<<7 | 0x2C, + 28822 - 19968: jis0212<<14 | 0x28<<7 | 0x2D, + 28823 - 19968: jis0212<<14 | 0x28<<7 | 0x2E, + 28824 - 19968: jis0212<<14 | 0x28<<7 | 0x2F, + 28825 - 19968: jis0208<<14 | 0x3E<<7 | 0x34, + 28827 - 19968: jis0212<<14 | 0x28<<7 | 0x30, + 28836 - 19968: jis0212<<14 | 0x28<<7 | 0x31, + 28843 - 19968: jis0208<<14 | 0x59<<7 | 0x54, + 28844 - 19968: jis0208<<14 | 0x3E<<7 | 0x38, + 28845 - 19968: jis0208<<14 | 0x22<<7 | 0x19, + 28846 - 19968: jis0208<<14 | 0x3E<<7 | 0x3B, + 28847 - 19968: jis0208<<14 | 0x3E<<7 | 0x36, + 28848 - 19968: jis0212<<14 | 0x28<<7 | 0x33, + 28849 - 19968: jis0212<<14 | 0x28<<7 | 0x34, + 28851 - 19968: jis0208<<14 | 0x3E<<7 | 0x3A, + 28852 - 19968: jis0212<<14 | 0x28<<7 | 0x35, + 28855 - 19968: jis0212<<14 | 0x28<<7 | 0x36, + 28856 - 19968: jis0208<<14 | 0x3E<<7 | 0x39, + 28857 - 19968: jis0208<<14 | 0x24<<7 | 0x1F, + 28858 - 19968: jis0208<<14 | 0x0F<<7 | 0x38, + 28859 - 19968: jis0208<<14 | 0x58<<7 | 0x06, + 28872 - 19968: jis0208<<14 | 0x2D<<7 | 0x54, + 28874 - 19968: jis0212<<14 | 0x28<<7 | 0x37, + 28875 - 19968: jis0208<<14 | 0x3E<<7 | 0x3D, + 28879 - 19968: jis0208<<14 | 0x10<<7 | 0x07, + 28881 - 19968: jis0212<<14 | 0x28<<7 | 0x38, + 28883 - 19968: jis0212<<14 | 0x28<<7 | 0x39, + 28884 - 19968: jis0212<<14 | 0x28<<7 | 0x3A, + 28885 - 19968: jis0212<<14 | 0x28<<7 | 0x3B, + 28886 - 19968: jis0212<<14 | 0x28<<7 | 0x3C, + 28888 - 19968: jis0212<<14 | 0x28<<7 | 0x3D, + 28889 - 19968: jis0208<<14 | 0x3E<<7 | 0x3F, + 28892 - 19968: jis0212<<14 | 0x28<<7 | 0x3E, + 28893 - 19968: jis0208<<14 | 0x3E<<7 | 0x3E, + 28895 - 19968: jis0208<<14 | 0x3E<<7 | 0x3C, + 28900 - 19968: jis0212<<14 | 0x28<<7 | 0x3F, + 28913 - 19968: jis0208<<14 | 0x3E<<7 | 0x37, + 28921 - 19968: jis0208<<14 | 0x2A<<7 | 0x02, + 28922 - 19968: jis0212<<14 | 0x28<<7 | 0x40, + 28925 - 19968: jis0208<<14 | 0x3E<<7 | 0x41, + 28931 - 19968: jis0212<<14 | 0x28<<7 | 0x41, + 28932 - 19968: jis0208<<14 | 0x59<<7 | 0x56, + 28933 - 19968: jis0212<<14 | 0x28<<7 | 0x43, + 28934 - 19968: jis0212<<14 | 0x28<<7 | 0x44, + 28935 - 19968: jis0212<<14 | 0x28<<7 | 0x45, + 28937 - 19968: jis0208<<14 | 0x3E<<7 | 0x40, + 28939 - 19968: jis0212<<14 | 0x28<<7 | 0x46, + 28940 - 19968: jis0212<<14 | 0x28<<7 | 0x47, + 28943 - 19968: jis0208<<14 | 0x59<<7 | 0x55, + 28948 - 19968: jis0208<<14 | 0x10<<7 | 0x4A, + 28953 - 19968: jis0208<<14 | 0x3E<<7 | 0x43, + 28954 - 19968: jis0208<<14 | 0x29<<7 | 0x11, + 28956 - 19968: jis0208<<14 | 0x3E<<7 | 0x42, + 28958 - 19968: jis0212<<14 | 0x28<<7 | 0x49, + 28960 - 19968: jis0212<<14 | 0x28<<7 | 0x4A, + 28961 - 19968: jis0208<<14 | 0x2B<<7 | 0x14, + 28966 - 19968: jis0208<<14 | 0x1D<<7 | 0x26, + 28971 - 19968: jis0212<<14 | 0x28<<7 | 0x4B, + 28973 - 19968: jis0212<<14 | 0x28<<7 | 0x4C, + 28975 - 19968: jis0212<<14 | 0x28<<7 | 0x4D, + 28976 - 19968: jis0212<<14 | 0x28<<7 | 0x4E, + 28977 - 19968: jis0212<<14 | 0x28<<7 | 0x4F, + 28982 - 19968: jis0208<<14 | 0x20<<7 | 0x12, + 28984 - 19968: jis0212<<14 | 0x28<<7 | 0x50, + 28988 - 19968: jis0208<<14 | 0x1D<<7 | 0x25, + 28993 - 19968: jis0212<<14 | 0x28<<7 | 0x51, + 28997 - 19968: jis0212<<14 | 0x28<<7 | 0x52, + 28998 - 19968: jis0208<<14 | 0x59<<7 | 0x58, + 28999 - 19968: jis0208<<14 | 0x59<<7 | 0x59, + 29001 - 19968: jis0208<<14 | 0x2D<<7 | 0x5A, + 29002 - 19968: jis0212<<14 | 0x28<<7 | 0x55, + 29003 - 19968: jis0212<<14 | 0x28<<7 | 0x56, + 29004 - 19968: jis0208<<14 | 0x3E<<7 | 0x49, + 29006 - 19968: jis0208<<14 | 0x1F<<7 | 0x58, + 29008 - 19968: jis0212<<14 | 0x28<<7 | 0x57, + 29010 - 19968: jis0212<<14 | 0x28<<7 | 0x58, + 29013 - 19968: jis0208<<14 | 0x3E<<7 | 0x45, + 29014 - 19968: jis0208<<14 | 0x3E<<7 | 0x4A, + 29015 - 19968: jis0212<<14 | 0x28<<7 | 0x59, + 29017 - 19968: jis0208<<14 | 0x10<<7 | 0x4B, + 29018 - 19968: jis0212<<14 | 0x28<<7 | 0x5A, + 29020 - 19968: jis0208<<14 | 0x59<<7 | 0x57, + 29022 - 19968: jis0212<<14 | 0x28<<7 | 0x5C, + 29024 - 19968: jis0212<<14 | 0x28<<7 | 0x5D, + 29026 - 19968: jis0208<<14 | 0x3E<<7 | 0x48, + 29028 - 19968: jis0208<<14 | 0x26<<7 | 0x40, + 29029 - 19968: jis0208<<14 | 0x3E<<7 | 0x44, + 29030 - 19968: jis0208<<14 | 0x3E<<7 | 0x47, + 29031 - 19968: jis0208<<14 | 0x1D<<7 | 0x27, + 29032 - 19968: jis0212<<14 | 0x29<<7 | 0x00, + 29033 - 19968: jis0208<<14 | 0x27<<7 | 0x30, + 29036 - 19968: jis0208<<14 | 0x3E<<7 | 0x4B, + 29038 - 19968: jis0208<<14 | 0x1B<<7 | 0x30, + 29049 - 19968: jis0212<<14 | 0x29<<7 | 0x01, + 29053 - 19968: jis0208<<14 | 0x1F<<7 | 0x59, + 29056 - 19968: jis0212<<14 | 0x29<<7 | 0x02, + 29060 - 19968: jis0208<<14 | 0x3E<<7 | 0x4E, + 29061 - 19968: jis0212<<14 | 0x29<<7 | 0x03, + 29063 - 19968: jis0212<<14 | 0x29<<7 | 0x04, + 29064 - 19968: jis0208<<14 | 0x3E<<7 | 0x46, + 29066 - 19968: jis0208<<14 | 0x16<<7 | 0x06, + 29068 - 19968: jis0212<<14 | 0x29<<7 | 0x05, + 29071 - 19968: jis0208<<14 | 0x3E<<7 | 0x4C, + 29074 - 19968: jis0212<<14 | 0x29<<7 | 0x06, + 29076 - 19968: jis0208<<14 | 0x2C<<7 | 0x2F, + 29077 - 19968: jis0208<<14 | 0x3E<<7 | 0x4F, + 29081 - 19968: jis0208<<14 | 0x53<<7 | 0x05, + 29082 - 19968: jis0212<<14 | 0x29<<7 | 0x07, + 29083 - 19968: jis0212<<14 | 0x29<<7 | 0x08, + 29087 - 19968: jis0208<<14 | 0x1C<<7 | 0x2E, + 29088 - 19968: jis0212<<14 | 0x29<<7 | 0x09, + 29090 - 19968: jis0212<<14 | 0x29<<7 | 0x0A, + 29096 - 19968: jis0208<<14 | 0x3E<<7 | 0x50, + 29100 - 19968: jis0208<<14 | 0x3E<<7 | 0x51, + 29103 - 19968: jis0212<<14 | 0x29<<7 | 0x0B, + 29104 - 19968: jis0212<<14 | 0x29<<7 | 0x0C, + 29105 - 19968: jis0208<<14 | 0x26<<7 | 0x0D, + 29106 - 19968: jis0212<<14 | 0x29<<7 | 0x0D, + 29107 - 19968: jis0212<<14 | 0x29<<7 | 0x0E, + 29113 - 19968: jis0208<<14 | 0x3E<<7 | 0x53, + 29114 - 19968: jis0212<<14 | 0x29<<7 | 0x0F, + 29118 - 19968: jis0208<<14 | 0x3E<<7 | 0x54, + 29119 - 19968: jis0212<<14 | 0x29<<7 | 0x10, + 29120 - 19968: jis0212<<14 | 0x29<<7 | 0x11, + 29121 - 19968: jis0208<<14 | 0x59<<7 | 0x5B, + 29123 - 19968: jis0208<<14 | 0x26<<7 | 0x12, + 29124 - 19968: jis0212<<14 | 0x29<<7 | 0x13, + 29128 - 19968: jis0208<<14 | 0x24<<7 | 0x54, + 29129 - 19968: jis0208<<14 | 0x3E<<7 | 0x56, + 29131 - 19968: jis0212<<14 | 0x29<<7 | 0x14, + 29132 - 19968: jis0212<<14 | 0x29<<7 | 0x15, + 29134 - 19968: jis0208<<14 | 0x3E<<7 | 0x58, + 29136 - 19968: jis0208<<14 | 0x2D<<7 | 0x34, + 29138 - 19968: jis0208<<14 | 0x3E<<7 | 0x55, + 29139 - 19968: jis0212<<14 | 0x29<<7 | 0x16, + 29140 - 19968: jis0208<<14 | 0x3E<<7 | 0x57, + 29141 - 19968: jis0208<<14 | 0x10<<7 | 0x4C, + 29142 - 19968: jis0212<<14 | 0x29<<7 | 0x17, + 29143 - 19968: jis0208<<14 | 0x3E<<7 | 0x52, + 29145 - 19968: jis0212<<14 | 0x29<<7 | 0x18, + 29146 - 19968: jis0212<<14 | 0x29<<7 | 0x19, + 29148 - 19968: jis0212<<14 | 0x29<<7 | 0x1A, + 29151 - 19968: jis0208<<14 | 0x32<<7 | 0x3A, + 29152 - 19968: jis0208<<14 | 0x3E<<7 | 0x59, + 29157 - 19968: jis0208<<14 | 0x20<<7 | 0x46, + 29158 - 19968: jis0208<<14 | 0x1A<<7 | 0x17, + 29159 - 19968: jis0208<<14 | 0x3E<<7 | 0x5B, + 29164 - 19968: jis0208<<14 | 0x3E<<7 | 0x5A, + 29165 - 19968: jis0208<<14 | 0x1E<<7 | 0x03, + 29166 - 19968: jis0208<<14 | 0x31<<7 | 0x38, + 29173 - 19968: jis0208<<14 | 0x3E<<7 | 0x5C, + 29176 - 19968: jis0212<<14 | 0x29<<7 | 0x1B, + 29177 - 19968: jis0208<<14 | 0x3F<<7 | 0x00, + 29179 - 19968: jis0208<<14 | 0x3E<<7 | 0x4D, + 29180 - 19968: jis0208<<14 | 0x3E<<7 | 0x5D, + 29182 - 19968: jis0208<<14 | 0x59<<7 | 0x5C, + 29183 - 19968: jis0208<<14 | 0x3F<<7 | 0x01, + 29184 - 19968: jis0212<<14 | 0x29<<7 | 0x1D, + 29190 - 19968: jis0208<<14 | 0x26<<7 | 0x59, + 29191 - 19968: jis0212<<14 | 0x29<<7 | 0x1E, + 29192 - 19968: jis0212<<14 | 0x29<<7 | 0x1F, + 29193 - 19968: jis0212<<14 | 0x29<<7 | 0x20, + 29197 - 19968: jis0208<<14 | 0x3F<<7 | 0x02, + 29200 - 19968: jis0208<<14 | 0x3F<<7 | 0x03, + 29203 - 19968: jis0212<<14 | 0x29<<7 | 0x21, + 29207 - 19968: jis0212<<14 | 0x29<<7 | 0x22, + 29210 - 19968: jis0212<<14 | 0x29<<7 | 0x23, + 29211 - 19968: jis0208<<14 | 0x3F<<7 | 0x04, + 29213 - 19968: jis0212<<14 | 0x29<<7 | 0x24, + 29215 - 19968: jis0212<<14 | 0x29<<7 | 0x25, + 29220 - 19968: jis0212<<14 | 0x29<<7 | 0x26, + 29224 - 19968: jis0208<<14 | 0x3F<<7 | 0x05, + 29226 - 19968: jis0208<<14 | 0x23<<7 | 0x3D, + 29227 - 19968: jis0212<<14 | 0x29<<7 | 0x27, + 29228 - 19968: jis0208<<14 | 0x3F<<7 | 0x07, + 29229 - 19968: jis0208<<14 | 0x3F<<7 | 0x06, + 29231 - 19968: jis0212<<14 | 0x29<<7 | 0x28, + 29232 - 19968: jis0208<<14 | 0x3F<<7 | 0x08, + 29234 - 19968: jis0208<<14 | 0x3F<<7 | 0x09, + 29236 - 19968: jis0212<<14 | 0x29<<7 | 0x29, + 29237 - 19968: jis0208<<14 | 0x1B<<7 | 0x3E, + 29238 - 19968: jis0208<<14 | 0x28<<7 | 0x42, + 29240 - 19968: jis0212<<14 | 0x29<<7 | 0x2A, + 29241 - 19968: jis0212<<14 | 0x29<<7 | 0x2B, + 29242 - 19968: jis0208<<14 | 0x2B<<7 | 0x4B, + 29243 - 19968: jis0208<<14 | 0x3F<<7 | 0x0A, + 29244 - 19968: jis0208<<14 | 0x3F<<7 | 0x0B, + 29245 - 19968: jis0208<<14 | 0x20<<7 | 0x35, + 29246 - 19968: jis0208<<14 | 0x1B<<7 | 0x03, + 29247 - 19968: jis0208<<14 | 0x3F<<7 | 0x0C, + 29248 - 19968: jis0208<<14 | 0x3F<<7 | 0x0D, + 29249 - 19968: jis0212<<14 | 0x29<<7 | 0x2C, + 29250 - 19968: jis0212<<14 | 0x29<<7 | 0x2D, + 29251 - 19968: jis0212<<14 | 0x29<<7 | 0x2E, + 29253 - 19968: jis0212<<14 | 0x29<<7 | 0x2F, + 29254 - 19968: jis0208<<14 | 0x3F<<7 | 0x0E, + 29255 - 19968: jis0208<<14 | 0x29<<7 | 0x31, + 29256 - 19968: jis0208<<14 | 0x27<<7 | 0x26, + 29259 - 19968: jis0208<<14 | 0x3F<<7 | 0x0F, + 29260 - 19968: jis0208<<14 | 0x26<<7 | 0x36, + 29262 - 19968: jis0212<<14 | 0x29<<7 | 0x30, + 29263 - 19968: jis0212<<14 | 0x29<<7 | 0x31, + 29264 - 19968: jis0212<<14 | 0x29<<7 | 0x32, + 29266 - 19968: jis0208<<14 | 0x23<<7 | 0x0C, + 29267 - 19968: jis0212<<14 | 0x29<<7 | 0x33, + 29269 - 19968: jis0212<<14 | 0x29<<7 | 0x34, + 29270 - 19968: jis0212<<14 | 0x29<<7 | 0x35, + 29272 - 19968: jis0208<<14 | 0x3F<<7 | 0x10, + 29273 - 19968: jis0208<<14 | 0x11<<7 | 0x46, + 29274 - 19968: jis0212<<14 | 0x29<<7 | 0x36, + 29275 - 19968: jis0208<<14 | 0x14<<7 | 0x4C, + 29276 - 19968: jis0212<<14 | 0x29<<7 | 0x37, + 29277 - 19968: jis0208<<14 | 0x2B<<7 | 0x25, + 29278 - 19968: jis0212<<14 | 0x29<<7 | 0x38, + 29279 - 19968: jis0208<<14 | 0x2B<<7 | 0x15, + 29280 - 19968: jis0212<<14 | 0x29<<7 | 0x39, + 29281 - 19968: jis0208<<14 | 0x11<<7 | 0x13, + 29282 - 19968: jis0208<<14 | 0x2E<<7 | 0x13, + 29283 - 19968: jis0212<<14 | 0x29<<7 | 0x3A, + 29287 - 19968: jis0208<<14 | 0x2A<<7 | 0x31, + 29288 - 19968: jis0212<<14 | 0x29<<7 | 0x3B, + 29289 - 19968: jis0208<<14 | 0x29<<7 | 0x09, + 29291 - 19968: jis0212<<14 | 0x29<<7 | 0x3C, + 29294 - 19968: jis0212<<14 | 0x29<<7 | 0x3D, + 29295 - 19968: jis0212<<14 | 0x29<<7 | 0x3E, + 29297 - 19968: jis0212<<14 | 0x29<<7 | 0x3F, + 29298 - 19968: jis0208<<14 | 0x1F<<7 | 0x16, + 29300 - 19968: jis0208<<14 | 0x3F<<7 | 0x11, + 29303 - 19968: jis0212<<14 | 0x29<<7 | 0x40, + 29304 - 19968: jis0212<<14 | 0x29<<7 | 0x41, + 29305 - 19968: jis0208<<14 | 0x25<<7 | 0x22, + 29307 - 19968: jis0212<<14 | 0x29<<7 | 0x42, + 29308 - 19968: jis0212<<14 | 0x29<<7 | 0x43, + 29309 - 19968: jis0208<<14 | 0x17<<7 | 0x02, + 29310 - 19968: jis0208<<14 | 0x3F<<7 | 0x12, + 29311 - 19968: jis0212<<14 | 0x29<<7 | 0x44, + 29312 - 19968: jis0208<<14 | 0x19<<7 | 0x33, + 29313 - 19968: jis0208<<14 | 0x3F<<7 | 0x14, + 29314 - 19968: jis0208<<14 | 0x3F<<7 | 0x13, + 29316 - 19968: jis0212<<14 | 0x29<<7 | 0x45, + 29319 - 19968: jis0208<<14 | 0x3F<<7 | 0x15, + 29321 - 19968: jis0212<<14 | 0x29<<7 | 0x46, + 29325 - 19968: jis0212<<14 | 0x29<<7 | 0x47, + 29326 - 19968: jis0212<<14 | 0x29<<7 | 0x48, + 29330 - 19968: jis0208<<14 | 0x3F<<7 | 0x16, + 29331 - 19968: jis0212<<14 | 0x29<<7 | 0x49, + 29334 - 19968: jis0208<<14 | 0x3F<<7 | 0x17, + 29339 - 19968: jis0212<<14 | 0x29<<7 | 0x4A, + 29344 - 19968: jis0208<<14 | 0x14<<7 | 0x1D, + 29346 - 19968: jis0208<<14 | 0x3F<<7 | 0x18, + 29351 - 19968: jis0208<<14 | 0x3F<<7 | 0x19, + 29352 - 19968: jis0212<<14 | 0x29<<7 | 0x4B, + 29356 - 19968: jis0208<<14 | 0x17<<7 | 0x03, + 29357 - 19968: jis0212<<14 | 0x29<<7 | 0x4C, + 29358 - 19968: jis0212<<14 | 0x29<<7 | 0x4D, + 29359 - 19968: jis0208<<14 | 0x27<<7 | 0x27, + 29361 - 19968: jis0208<<14 | 0x59<<7 | 0x5D, + 29362 - 19968: jis0208<<14 | 0x3F<<7 | 0x1B, + 29364 - 19968: jis0212<<14 | 0x29<<7 | 0x4F, + 29366 - 19968: jis0208<<14 | 0x1D<<7 | 0x54, + 29369 - 19968: jis0208<<14 | 0x3F<<7 | 0x1A, + 29374 - 19968: jis0208<<14 | 0x5A<<7 | 0x00, + 29377 - 19968: jis0212<<14 | 0x29<<7 | 0x51, + 29378 - 19968: jis0208<<14 | 0x15<<7 | 0x17, + 29379 - 19968: jis0208<<14 | 0x3F<<7 | 0x1C, + 29380 - 19968: jis0208<<14 | 0x3F<<7 | 0x1E, + 29382 - 19968: jis0208<<14 | 0x3F<<7 | 0x1D, + 29383 - 19968: jis0212<<14 | 0x29<<7 | 0x52, + 29385 - 19968: jis0212<<14 | 0x29<<7 | 0x53, + 29388 - 19968: jis0212<<14 | 0x29<<7 | 0x54, + 29390 - 19968: jis0208<<14 | 0x3F<<7 | 0x1F, + 29392 - 19968: jis0208<<14 | 0x17<<7 | 0x30, + 29394 - 19968: jis0208<<14 | 0x3F<<7 | 0x20, + 29397 - 19968: jis0212<<14 | 0x29<<7 | 0x55, + 29398 - 19968: jis0212<<14 | 0x29<<7 | 0x56, + 29399 - 19968: jis0208<<14 | 0x15<<7 | 0x48, + 29400 - 19968: jis0212<<14 | 0x29<<7 | 0x57, + 29401 - 19968: jis0208<<14 | 0x20<<7 | 0x1F, + 29403 - 19968: jis0208<<14 | 0x18<<7 | 0x5C, + 29407 - 19968: jis0212<<14 | 0x29<<7 | 0x58, + 29408 - 19968: jis0208<<14 | 0x3F<<7 | 0x22, + 29409 - 19968: jis0208<<14 | 0x3F<<7 | 0x23, + 29410 - 19968: jis0208<<14 | 0x3F<<7 | 0x21, + 29413 - 19968: jis0212<<14 | 0x29<<7 | 0x59, + 29417 - 19968: jis0208<<14 | 0x1B<<7 | 0x4C, + 29420 - 19968: jis0208<<14 | 0x25<<7 | 0x27, + 29421 - 19968: jis0208<<14 | 0x15<<7 | 0x18, + 29427 - 19968: jis0212<<14 | 0x29<<7 | 0x5A, + 29428 - 19968: jis0212<<14 | 0x29<<7 | 0x5B, + 29431 - 19968: jis0208<<14 | 0x3F<<7 | 0x25, + 29432 - 19968: jis0208<<14 | 0x22<<7 | 0x0B, + 29433 - 19968: jis0208<<14 | 0x3F<<7 | 0x24, + 29434 - 19968: jis0212<<14 | 0x29<<7 | 0x5C, + 29435 - 19968: jis0212<<14 | 0x29<<7 | 0x5D, + 29436 - 19968: jis0208<<14 | 0x2E<<7 | 0x14, + 29437 - 19968: jis0208<<14 | 0x26<<7 | 0x41, + 29438 - 19968: jis0212<<14 | 0x2A<<7 | 0x00, + 29442 - 19968: jis0212<<14 | 0x2A<<7 | 0x01, + 29444 - 19968: jis0212<<14 | 0x2A<<7 | 0x02, + 29445 - 19968: jis0212<<14 | 0x2A<<7 | 0x03, + 29447 - 19968: jis0212<<14 | 0x2A<<7 | 0x04, + 29450 - 19968: jis0208<<14 | 0x3F<<7 | 0x28, + 29451 - 19968: jis0212<<14 | 0x2A<<7 | 0x05, + 29453 - 19968: jis0212<<14 | 0x2A<<7 | 0x06, + 29458 - 19968: jis0212<<14 | 0x2A<<7 | 0x07, + 29459 - 19968: jis0212<<14 | 0x2A<<7 | 0x08, + 29462 - 19968: jis0208<<14 | 0x3F<<7 | 0x2A, + 29463 - 19968: jis0208<<14 | 0x3F<<7 | 0x27, + 29464 - 19968: jis0212<<14 | 0x2A<<7 | 0x09, + 29465 - 19968: jis0212<<14 | 0x2A<<7 | 0x0A, + 29467 - 19968: jis0208<<14 | 0x2B<<7 | 0x33, + 29468 - 19968: jis0208<<14 | 0x3F<<7 | 0x29, + 29469 - 19968: jis0208<<14 | 0x3F<<7 | 0x2B, + 29470 - 19968: jis0212<<14 | 0x2A<<7 | 0x0B, + 29471 - 19968: jis0208<<14 | 0x2D<<7 | 0x23, + 29474 - 19968: jis0212<<14 | 0x2A<<7 | 0x0C, + 29476 - 19968: jis0208<<14 | 0x5A<<7 | 0x01, + 29477 - 19968: jis0208<<14 | 0x3F<<7 | 0x2F, + 29479 - 19968: jis0212<<14 | 0x2A<<7 | 0x0E, + 29480 - 19968: jis0212<<14 | 0x2A<<7 | 0x0F, + 29481 - 19968: jis0208<<14 | 0x3F<<7 | 0x2E, + 29482 - 19968: jis0208<<14 | 0x22<<7 | 0x55, + 29483 - 19968: jis0208<<14 | 0x26<<7 | 0x0C, + 29484 - 19968: jis0212<<14 | 0x2A<<7 | 0x10, + 29486 - 19968: jis0208<<14 | 0x17<<7 | 0x04, + 29487 - 19968: jis0208<<14 | 0x3F<<7 | 0x2D, + 29489 - 19968: jis0212<<14 | 0x2A<<7 | 0x11, + 29490 - 19968: jis0212<<14 | 0x2A<<7 | 0x12, + 29492 - 19968: jis0208<<14 | 0x3F<<7 | 0x2C, + 29493 - 19968: jis0212<<14 | 0x2A<<7 | 0x13, + 29494 - 19968: jis0208<<14 | 0x2C<<7 | 0x10, + 29495 - 19968: jis0208<<14 | 0x2C<<7 | 0x11, + 29498 - 19968: jis0212<<14 | 0x2A<<7 | 0x14, + 29499 - 19968: jis0212<<14 | 0x2A<<7 | 0x15, + 29501 - 19968: jis0212<<14 | 0x2A<<7 | 0x16, + 29502 - 19968: jis0208<<14 | 0x3F<<7 | 0x30, + 29503 - 19968: jis0208<<14 | 0x10<<7 | 0x4D, + 29507 - 19968: jis0212<<14 | 0x2A<<7 | 0x17, + 29508 - 19968: jis0208<<14 | 0x18<<7 | 0x55, + 29509 - 19968: jis0208<<14 | 0x1A<<7 | 0x41, + 29517 - 19968: jis0212<<14 | 0x2A<<7 | 0x18, + 29518 - 19968: jis0208<<14 | 0x3F<<7 | 0x31, + 29519 - 19968: jis0208<<14 | 0x3F<<7 | 0x32, + 29520 - 19968: jis0212<<14 | 0x2A<<7 | 0x19, + 29522 - 19968: jis0212<<14 | 0x2A<<7 | 0x1A, + 29526 - 19968: jis0212<<14 | 0x2A<<7 | 0x1B, + 29527 - 19968: jis0208<<14 | 0x3F<<7 | 0x34, + 29528 - 19968: jis0212<<14 | 0x2A<<7 | 0x1C, + 29533 - 19968: jis0212<<14 | 0x2A<<7 | 0x1D, + 29534 - 19968: jis0212<<14 | 0x2A<<7 | 0x1E, + 29535 - 19968: jis0212<<14 | 0x2A<<7 | 0x1F, + 29536 - 19968: jis0212<<14 | 0x2A<<7 | 0x20, + 29539 - 19968: jis0208<<14 | 0x1C<<7 | 0x22, + 29542 - 19968: jis0212<<14 | 0x2A<<7 | 0x21, + 29543 - 19968: jis0212<<14 | 0x2A<<7 | 0x22, + 29544 - 19968: jis0208<<14 | 0x3F<<7 | 0x36, + 29545 - 19968: jis0212<<14 | 0x2A<<7 | 0x23, + 29546 - 19968: jis0208<<14 | 0x3F<<7 | 0x35, + 29547 - 19968: jis0212<<14 | 0x2A<<7 | 0x24, + 29548 - 19968: jis0212<<14 | 0x2A<<7 | 0x25, + 29550 - 19968: jis0212<<14 | 0x2A<<7 | 0x26, + 29551 - 19968: jis0212<<14 | 0x2A<<7 | 0x27, + 29552 - 19968: jis0208<<14 | 0x3F<<7 | 0x37, + 29553 - 19968: jis0212<<14 | 0x2A<<7 | 0x28, + 29554 - 19968: jis0208<<14 | 0x12<<7 | 0x2C, + 29557 - 19968: jis0208<<14 | 0x3F<<7 | 0x39, + 29559 - 19968: jis0208<<14 | 0x5A<<7 | 0x03, + 29560 - 19968: jis0208<<14 | 0x3F<<7 | 0x38, + 29561 - 19968: jis0212<<14 | 0x2A<<7 | 0x2A, + 29562 - 19968: jis0208<<14 | 0x3F<<7 | 0x3B, + 29563 - 19968: jis0208<<14 | 0x3F<<7 | 0x3A, + 29564 - 19968: jis0212<<14 | 0x2A<<7 | 0x2B, + 29568 - 19968: jis0212<<14 | 0x2A<<7 | 0x2C, + 29569 - 19968: jis0212<<14 | 0x2A<<7 | 0x2D, + 29571 - 19968: jis0212<<14 | 0x2A<<7 | 0x2E, + 29572 - 19968: jis0208<<14 | 0x17<<7 | 0x1B, + 29573 - 19968: jis0212<<14 | 0x2A<<7 | 0x2F, + 29574 - 19968: jis0212<<14 | 0x2A<<7 | 0x30, + 29575 - 19968: jis0208<<14 | 0x2D<<7 | 0x07, + 29577 - 19968: jis0208<<14 | 0x15<<7 | 0x2B, + 29579 - 19968: jis0208<<14 | 0x11<<7 | 0x05, + 29582 - 19968: jis0212<<14 | 0x2A<<7 | 0x31, + 29584 - 19968: jis0212<<14 | 0x2A<<7 | 0x32, + 29587 - 19968: jis0212<<14 | 0x2A<<7 | 0x33, + 29589 - 19968: jis0212<<14 | 0x2A<<7 | 0x34, + 29590 - 19968: jis0208<<14 | 0x15<<7 | 0x49, + 29591 - 19968: jis0212<<14 | 0x2A<<7 | 0x35, + 29592 - 19968: jis0212<<14 | 0x2A<<7 | 0x36, + 29596 - 19968: jis0212<<14 | 0x2A<<7 | 0x37, + 29598 - 19968: jis0212<<14 | 0x2A<<7 | 0x38, + 29599 - 19968: jis0212<<14 | 0x2A<<7 | 0x39, + 29600 - 19968: jis0212<<14 | 0x2A<<7 | 0x3A, + 29602 - 19968: jis0212<<14 | 0x2A<<7 | 0x3B, + 29605 - 19968: jis0212<<14 | 0x2A<<7 | 0x3C, + 29606 - 19968: jis0212<<14 | 0x2A<<7 | 0x3D, + 29609 - 19968: jis0208<<14 | 0x13<<7 | 0x40, + 29610 - 19968: jis0212<<14 | 0x2A<<7 | 0x3E, + 29611 - 19968: jis0212<<14 | 0x2A<<7 | 0x3F, + 29613 - 19968: jis0212<<14 | 0x2A<<7 | 0x40, + 29618 - 19968: jis0208<<14 | 0x2D<<7 | 0x47, + 29619 - 19968: jis0208<<14 | 0x3F<<7 | 0x3D, + 29621 - 19968: jis0212<<14 | 0x2A<<7 | 0x41, + 29623 - 19968: jis0212<<14 | 0x2A<<7 | 0x42, + 29625 - 19968: jis0212<<14 | 0x2A<<7 | 0x43, + 29627 - 19968: jis0208<<14 | 0x3F<<7 | 0x3F, + 29628 - 19968: jis0212<<14 | 0x2A<<7 | 0x44, + 29629 - 19968: jis0208<<14 | 0x5A<<7 | 0x04, + 29631 - 19968: jis0212<<14 | 0x2A<<7 | 0x46, + 29632 - 19968: jis0208<<14 | 0x3F<<7 | 0x40, + 29634 - 19968: jis0208<<14 | 0x11<<7 | 0x30, + 29637 - 19968: jis0212<<14 | 0x2A<<7 | 0x47, + 29638 - 19968: jis0212<<14 | 0x2A<<7 | 0x48, + 29640 - 19968: jis0208<<14 | 0x3F<<7 | 0x3C, + 29641 - 19968: jis0208<<14 | 0x5A<<7 | 0x05, + 29642 - 19968: jis0208<<14 | 0x1A<<7 | 0x18, + 29643 - 19968: jis0212<<14 | 0x2A<<7 | 0x4A, + 29644 - 19968: jis0212<<14 | 0x2A<<7 | 0x4B, + 29645 - 19968: jis0208<<14 | 0x23<<7 | 0x20, + 29646 - 19968: jis0208<<14 | 0x3F<<7 | 0x3E, + 29647 - 19968: jis0212<<14 | 0x2A<<7 | 0x4C, + 29650 - 19968: jis0208<<14 | 0x5A<<7 | 0x08, + 29651 - 19968: jis0212<<14 | 0x2A<<7 | 0x4E, + 29654 - 19968: jis0208<<14 | 0x5A<<7 | 0x06, + 29657 - 19968: jis0212<<14 | 0x2A<<7 | 0x50, + 29661 - 19968: jis0212<<14 | 0x2A<<7 | 0x51, + 29662 - 19968: jis0208<<14 | 0x3F<<7 | 0x43, + 29664 - 19968: jis0208<<14 | 0x1B<<7 | 0x4D, + 29665 - 19968: jis0212<<14 | 0x2A<<7 | 0x52, + 29667 - 19968: jis0208<<14 | 0x5A<<7 | 0x07, + 29669 - 19968: jis0208<<14 | 0x3F<<7 | 0x41, + 29670 - 19968: jis0212<<14 | 0x2A<<7 | 0x54, + 29671 - 19968: jis0212<<14 | 0x2A<<7 | 0x55, + 29673 - 19968: jis0212<<14 | 0x2A<<7 | 0x56, + 29674 - 19968: jis0208<<14 | 0x16<<7 | 0x1D, + 29677 - 19968: jis0208<<14 | 0x27<<7 | 0x28, + 29678 - 19968: jis0208<<14 | 0x3F<<7 | 0x42, + 29681 - 19968: jis0208<<14 | 0x3F<<7 | 0x5D, + 29684 - 19968: jis0212<<14 | 0x2A<<7 | 0x57, + 29685 - 19968: jis0208<<14 | 0x5A<<7 | 0x0A, + 29687 - 19968: jis0212<<14 | 0x2A<<7 | 0x59, + 29688 - 19968: jis0208<<14 | 0x3F<<7 | 0x48, + 29689 - 19968: jis0212<<14 | 0x2A<<7 | 0x5A, + 29690 - 19968: jis0212<<14 | 0x2A<<7 | 0x5B, + 29691 - 19968: jis0212<<14 | 0x2A<<7 | 0x5C, + 29693 - 19968: jis0212<<14 | 0x2A<<7 | 0x5D, + 29694 - 19968: jis0208<<14 | 0x17<<7 | 0x1C, + 29695 - 19968: jis0212<<14 | 0x2B<<7 | 0x00, + 29696 - 19968: jis0212<<14 | 0x2B<<7 | 0x01, + 29697 - 19968: jis0212<<14 | 0x2B<<7 | 0x02, + 29699 - 19968: jis0208<<14 | 0x14<<7 | 0x44, + 29700 - 19968: jis0212<<14 | 0x2B<<7 | 0x03, + 29701 - 19968: jis0208<<14 | 0x3F<<7 | 0x45, + 29702 - 19968: jis0208<<14 | 0x2C<<7 | 0x5C, + 29703 - 19968: jis0208<<14 | 0x5A<<7 | 0x09, + 29705 - 19968: jis0208<<14 | 0x2D<<7 | 0x0F, + 29706 - 19968: jis0212<<14 | 0x2B<<7 | 0x05, + 29713 - 19968: jis0212<<14 | 0x2B<<7 | 0x06, + 29722 - 19968: jis0212<<14 | 0x2B<<7 | 0x07, + 29723 - 19968: jis0212<<14 | 0x2B<<7 | 0x08, + 29730 - 19968: jis0208<<14 | 0x21<<7 | 0x55, + 29732 - 19968: jis0212<<14 | 0x2B<<7 | 0x09, + 29733 - 19968: jis0208<<14 | 0x3F<<7 | 0x47, + 29734 - 19968: jis0208<<14 | 0x5A<<7 | 0x0B, + 29736 - 19968: jis0212<<14 | 0x2B<<7 | 0x0B, + 29737 - 19968: jis0208<<14 | 0x5A<<7 | 0x0D, + 29738 - 19968: jis0208<<14 | 0x5A<<7 | 0x0C, + 29739 - 19968: jis0212<<14 | 0x2B<<7 | 0x0E, + 29740 - 19968: jis0212<<14 | 0x2B<<7 | 0x0F, + 29741 - 19968: jis0212<<14 | 0x2B<<7 | 0x10, + 29742 - 19968: jis0208<<14 | 0x5A<<7 | 0x0E, + 29743 - 19968: jis0212<<14 | 0x2B<<7 | 0x12, + 29744 - 19968: jis0212<<14 | 0x2B<<7 | 0x13, + 29745 - 19968: jis0212<<14 | 0x2B<<7 | 0x14, + 29746 - 19968: jis0208<<14 | 0x3F<<7 | 0x49, + 29747 - 19968: jis0208<<14 | 0x2D<<7 | 0x35, + 29748 - 19968: jis0208<<14 | 0x15<<7 | 0x36, + 29749 - 19968: jis0208<<14 | 0x27<<7 | 0x5B, + 29750 - 19968: jis0208<<14 | 0x26<<7 | 0x29, + 29753 - 19968: jis0212<<14 | 0x2B<<7 | 0x15, + 29754 - 19968: jis0208<<14 | 0x3F<<7 | 0x4A, + 29759 - 19968: jis0208<<14 | 0x3F<<7 | 0x4C, + 29760 - 19968: jis0212<<14 | 0x2B<<7 | 0x16, + 29761 - 19968: jis0208<<14 | 0x3F<<7 | 0x4F, + 29763 - 19968: jis0212<<14 | 0x2B<<7 | 0x17, + 29764 - 19968: jis0212<<14 | 0x2B<<7 | 0x18, + 29766 - 19968: jis0212<<14 | 0x2B<<7 | 0x19, + 29767 - 19968: jis0212<<14 | 0x2B<<7 | 0x1A, + 29771 - 19968: jis0212<<14 | 0x2B<<7 | 0x1B, + 29773 - 19968: jis0212<<14 | 0x2B<<7 | 0x1C, + 29777 - 19968: jis0212<<14 | 0x2B<<7 | 0x1D, + 29778 - 19968: jis0212<<14 | 0x2B<<7 | 0x1E, + 29781 - 19968: jis0208<<14 | 0x3F<<7 | 0x4B, + 29783 - 19968: jis0212<<14 | 0x2B<<7 | 0x1F, + 29785 - 19968: jis0208<<14 | 0x3F<<7 | 0x4E, + 29786 - 19968: jis0208<<14 | 0x17<<7 | 0x49, + 29787 - 19968: jis0208<<14 | 0x10<<7 | 0x2C, + 29788 - 19968: jis0208<<14 | 0x3F<<7 | 0x50, + 29789 - 19968: jis0212<<14 | 0x2B<<7 | 0x20, + 29790 - 19968: jis0208<<14 | 0x1E<<7 | 0x4F, + 29791 - 19968: jis0208<<14 | 0x3F<<7 | 0x4D, + 29792 - 19968: jis0208<<14 | 0x2D<<7 | 0x3B, + 29794 - 19968: jis0208<<14 | 0x5A<<7 | 0x0F, + 29795 - 19968: jis0208<<14 | 0x3F<<7 | 0x53, + 29796 - 19968: jis0208<<14 | 0x53<<7 | 0x03, + 29798 - 19968: jis0212<<14 | 0x2B<<7 | 0x22, + 29799 - 19968: jis0212<<14 | 0x2B<<7 | 0x23, + 29800 - 19968: jis0212<<14 | 0x2B<<7 | 0x24, + 29801 - 19968: jis0208<<14 | 0x3F<<7 | 0x51, + 29802 - 19968: jis0208<<14 | 0x3F<<7 | 0x54, + 29803 - 19968: jis0212<<14 | 0x2B<<7 | 0x25, + 29805 - 19968: jis0212<<14 | 0x2B<<7 | 0x26, + 29806 - 19968: jis0212<<14 | 0x2B<<7 | 0x27, + 29807 - 19968: jis0208<<14 | 0x3F<<7 | 0x46, + 29808 - 19968: jis0208<<14 | 0x3F<<7 | 0x52, + 29809 - 19968: jis0212<<14 | 0x2B<<7 | 0x28, + 29810 - 19968: jis0212<<14 | 0x2B<<7 | 0x29, + 29811 - 19968: jis0208<<14 | 0x19<<7 | 0x1B, + 29814 - 19968: jis0208<<14 | 0x3F<<7 | 0x55, + 29822 - 19968: jis0208<<14 | 0x3F<<7 | 0x56, + 29824 - 19968: jis0212<<14 | 0x2B<<7 | 0x2A, + 29825 - 19968: jis0212<<14 | 0x2B<<7 | 0x2B, + 29827 - 19968: jis0208<<14 | 0x2C<<7 | 0x5D, + 29829 - 19968: jis0212<<14 | 0x2B<<7 | 0x2C, + 29830 - 19968: jis0212<<14 | 0x2B<<7 | 0x2D, + 29831 - 19968: jis0212<<14 | 0x2B<<7 | 0x2E, + 29833 - 19968: jis0208<<14 | 0x5A<<7 | 0x10, + 29835 - 19968: jis0208<<14 | 0x3F<<7 | 0x57, + 29839 - 19968: jis0212<<14 | 0x2B<<7 | 0x30, + 29840 - 19968: jis0212<<14 | 0x2B<<7 | 0x31, + 29841 - 19968: jis0212<<14 | 0x2B<<7 | 0x32, + 29842 - 19968: jis0212<<14 | 0x2B<<7 | 0x33, + 29848 - 19968: jis0212<<14 | 0x2B<<7 | 0x34, + 29849 - 19968: jis0212<<14 | 0x2B<<7 | 0x35, + 29850 - 19968: jis0212<<14 | 0x2B<<7 | 0x36, + 29852 - 19968: jis0212<<14 | 0x2B<<7 | 0x37, + 29854 - 19968: jis0208<<14 | 0x3F<<7 | 0x58, + 29855 - 19968: jis0208<<14 | 0x5A<<7 | 0x11, + 29856 - 19968: jis0212<<14 | 0x2B<<7 | 0x39, + 29857 - 19968: jis0212<<14 | 0x2B<<7 | 0x3A, + 29858 - 19968: jis0208<<14 | 0x3F<<7 | 0x44, + 29859 - 19968: jis0212<<14 | 0x2B<<7 | 0x3B, + 29862 - 19968: jis0212<<14 | 0x2B<<7 | 0x3C, + 29863 - 19968: jis0208<<14 | 0x3F<<7 | 0x59, + 29864 - 19968: jis0212<<14 | 0x2B<<7 | 0x3D, + 29865 - 19968: jis0212<<14 | 0x2B<<7 | 0x3E, + 29866 - 19968: jis0212<<14 | 0x2B<<7 | 0x3F, + 29867 - 19968: jis0212<<14 | 0x2B<<7 | 0x40, + 29870 - 19968: jis0212<<14 | 0x2B<<7 | 0x41, + 29871 - 19968: jis0212<<14 | 0x2B<<7 | 0x42, + 29872 - 19968: jis0208<<14 | 0x13<<7 | 0x23, + 29873 - 19968: jis0212<<14 | 0x2B<<7 | 0x43, + 29874 - 19968: jis0212<<14 | 0x2B<<7 | 0x44, + 29877 - 19968: jis0212<<14 | 0x2B<<7 | 0x45, + 29881 - 19968: jis0212<<14 | 0x2B<<7 | 0x46, + 29883 - 19968: jis0212<<14 | 0x2B<<7 | 0x47, + 29885 - 19968: jis0208<<14 | 0x1B<<7 | 0x04, + 29887 - 19968: jis0212<<14 | 0x2B<<7 | 0x48, + 29896 - 19968: jis0212<<14 | 0x2B<<7 | 0x49, + 29897 - 19968: jis0212<<14 | 0x2B<<7 | 0x4A, + 29898 - 19968: jis0208<<14 | 0x3F<<7 | 0x5A, + 29900 - 19968: jis0212<<14 | 0x2B<<7 | 0x4B, + 29903 - 19968: jis0208<<14 | 0x3F<<7 | 0x5B, + 29904 - 19968: jis0212<<14 | 0x2B<<7 | 0x4C, + 29907 - 19968: jis0212<<14 | 0x2B<<7 | 0x4D, + 29908 - 19968: jis0208<<14 | 0x3F<<7 | 0x5C, + 29912 - 19968: jis0212<<14 | 0x2B<<7 | 0x4E, + 29914 - 19968: jis0212<<14 | 0x2B<<7 | 0x4F, + 29915 - 19968: jis0212<<14 | 0x2B<<7 | 0x50, + 29916 - 19968: jis0208<<14 | 0x10<<7 | 0x1A, + 29918 - 19968: jis0212<<14 | 0x2B<<7 | 0x51, + 29919 - 19968: jis0212<<14 | 0x2B<<7 | 0x52, + 29920 - 19968: jis0208<<14 | 0x40<<7 | 0x00, + 29922 - 19968: jis0208<<14 | 0x28<<7 | 0x1A, + 29923 - 19968: jis0208<<14 | 0x40<<7 | 0x01, + 29924 - 19968: jis0212<<14 | 0x2B<<7 | 0x53, + 29926 - 19968: jis0208<<14 | 0x13<<7 | 0x03, + 29927 - 19968: jis0208<<14 | 0x40<<7 | 0x02, + 29928 - 19968: jis0212<<14 | 0x2B<<7 | 0x54, + 29929 - 19968: jis0208<<14 | 0x40<<7 | 0x03, + 29930 - 19968: jis0212<<14 | 0x2B<<7 | 0x55, + 29931 - 19968: jis0212<<14 | 0x2B<<7 | 0x56, + 29934 - 19968: jis0208<<14 | 0x40<<7 | 0x04, + 29935 - 19968: jis0212<<14 | 0x2B<<7 | 0x57, + 29936 - 19968: jis0208<<14 | 0x40<<7 | 0x06, + 29937 - 19968: jis0208<<14 | 0x40<<7 | 0x07, + 29938 - 19968: jis0208<<14 | 0x40<<7 | 0x05, + 29940 - 19968: jis0212<<14 | 0x2B<<7 | 0x58, + 29942 - 19968: jis0208<<14 | 0x28<<7 | 0x32, + 29943 - 19968: jis0208<<14 | 0x40<<7 | 0x09, + 29944 - 19968: jis0208<<14 | 0x40<<7 | 0x08, + 29946 - 19968: jis0212<<14 | 0x2B<<7 | 0x59, + 29947 - 19968: jis0212<<14 | 0x2B<<7 | 0x5A, + 29948 - 19968: jis0212<<14 | 0x2B<<7 | 0x5B, + 29951 - 19968: jis0212<<14 | 0x2B<<7 | 0x5C, + 29953 - 19968: jis0208<<14 | 0x5A<<7 | 0x12, + 29955 - 19968: jis0208<<14 | 0x40<<7 | 0x0B, + 29956 - 19968: jis0208<<14 | 0x40<<7 | 0x0A, + 29957 - 19968: jis0208<<14 | 0x40<<7 | 0x0C, + 29958 - 19968: jis0212<<14 | 0x2B<<7 | 0x5D, + 29964 - 19968: jis0208<<14 | 0x40<<7 | 0x0D, + 29965 - 19968: jis0208<<14 | 0x40<<7 | 0x0F, + 29966 - 19968: jis0208<<14 | 0x40<<7 | 0x0E, + 29969 - 19968: jis0208<<14 | 0x18<<7 | 0x58, + 29970 - 19968: jis0212<<14 | 0x2C<<7 | 0x00, + 29971 - 19968: jis0208<<14 | 0x40<<7 | 0x11, + 29973 - 19968: jis0208<<14 | 0x40<<7 | 0x10, + 29974 - 19968: jis0212<<14 | 0x2C<<7 | 0x01, + 29975 - 19968: jis0212<<14 | 0x2C<<7 | 0x02, + 29976 - 19968: jis0208<<14 | 0x13<<7 | 0x24, + 29978 - 19968: jis0208<<14 | 0x1E<<7 | 0x32, + 29980 - 19968: jis0208<<14 | 0x24<<7 | 0x1B, + 29982 - 19968: jis0208<<14 | 0x40<<7 | 0x12, + 29983 - 19968: jis0208<<14 | 0x1F<<7 | 0x17, + 29984 - 19968: jis0212<<14 | 0x2C<<7 | 0x03, + 29985 - 19968: jis0212<<14 | 0x2C<<7 | 0x04, + 29987 - 19968: jis0208<<14 | 0x1A<<7 | 0x19, + 29988 - 19968: jis0212<<14 | 0x2C<<7 | 0x05, + 29989 - 19968: jis0208<<14 | 0x10<<7 | 0x58, + 29990 - 19968: jis0208<<14 | 0x40<<7 | 0x13, + 29991 - 19968: jis0212<<14 | 0x2C<<7 | 0x06, + 29992 - 19968: jis0208<<14 | 0x2C<<7 | 0x30, + 29993 - 19968: jis0212<<14 | 0x2C<<7 | 0x07, + 29994 - 19968: jis0212<<14 | 0x2C<<7 | 0x08, + 29995 - 19968: jis0208<<14 | 0x29<<7 | 0x42, + 29996 - 19968: jis0208<<14 | 0x40<<7 | 0x14, + 29999 - 19968: jis0208<<14 | 0x58<<7 | 0x4B, + 30000 - 19968: jis0208<<14 | 0x24<<7 | 0x23, + 30001 - 19968: jis0208<<14 | 0x2C<<7 | 0x12, + 30002 - 19968: jis0208<<14 | 0x18<<7 | 0x22, + 30003 - 19968: jis0208<<14 | 0x1E<<7 | 0x1C, + 30006 - 19968: jis0212<<14 | 0x2C<<7 | 0x0A, + 30007 - 19968: jis0208<<14 | 0x22<<7 | 0x2A, + 30008 - 19968: jis0208<<14 | 0x31<<7 | 0x13, + 30009 - 19968: jis0212<<14 | 0x2C<<7 | 0x0B, + 30010 - 19968: jis0208<<14 | 0x23<<7 | 0x0D, + 30011 - 19968: jis0208<<14 | 0x11<<7 | 0x47, + 30012 - 19968: jis0208<<14 | 0x40<<7 | 0x15, + 30013 - 19968: jis0212<<14 | 0x2C<<7 | 0x0C, + 30014 - 19968: jis0212<<14 | 0x2C<<7 | 0x0D, + 30015 - 19968: jis0212<<14 | 0x2C<<7 | 0x0E, + 30016 - 19968: jis0212<<14 | 0x2C<<7 | 0x0F, + 30019 - 19968: jis0212<<14 | 0x2C<<7 | 0x10, + 30020 - 19968: jis0208<<14 | 0x40<<7 | 0x16, + 30022 - 19968: jis0208<<14 | 0x40<<7 | 0x1B, + 30023 - 19968: jis0212<<14 | 0x2C<<7 | 0x11, + 30024 - 19968: jis0212<<14 | 0x2C<<7 | 0x12, + 30025 - 19968: jis0208<<14 | 0x40<<7 | 0x19, + 30026 - 19968: jis0208<<14 | 0x40<<7 | 0x18, + 30027 - 19968: jis0208<<14 | 0x39<<7 | 0x21, + 30028 - 19968: jis0208<<14 | 0x12<<7 | 0x05, + 30029 - 19968: jis0208<<14 | 0x40<<7 | 0x17, + 30030 - 19968: jis0212<<14 | 0x2C<<7 | 0x13, + 30031 - 19968: jis0208<<14 | 0x0F<<7 | 0x39, + 30032 - 19968: jis0212<<14 | 0x2C<<7 | 0x14, + 30033 - 19968: jis0208<<14 | 0x27<<7 | 0x09, + 30034 - 19968: jis0212<<14 | 0x2C<<7 | 0x15, + 30036 - 19968: jis0208<<14 | 0x27<<7 | 0x29, + 30039 - 19968: jis0212<<14 | 0x2C<<7 | 0x16, + 30041 - 19968: jis0208<<14 | 0x2D<<7 | 0x10, + 30042 - 19968: jis0208<<14 | 0x40<<7 | 0x1C, + 30043 - 19968: jis0208<<14 | 0x40<<7 | 0x1A, + 30044 - 19968: jis0208<<14 | 0x22<<7 | 0x3B, + 30045 - 19968: jis0208<<14 | 0x1F<<7 | 0x05, + 30046 - 19968: jis0212<<14 | 0x2C<<7 | 0x17, + 30047 - 19968: jis0212<<14 | 0x2C<<7 | 0x18, + 30048 - 19968: jis0208<<14 | 0x27<<7 | 0x0A, + 30049 - 19968: jis0212<<14 | 0x2C<<7 | 0x19, + 30050 - 19968: jis0208<<14 | 0x28<<7 | 0x0C, + 30052 - 19968: jis0208<<14 | 0x40<<7 | 0x1E, + 30053 - 19968: jis0208<<14 | 0x2D<<7 | 0x0B, + 30054 - 19968: jis0208<<14 | 0x16<<7 | 0x2C, + 30055 - 19968: jis0208<<14 | 0x40<<7 | 0x1F, + 30057 - 19968: jis0208<<14 | 0x40<<7 | 0x1D, + 30058 - 19968: jis0208<<14 | 0x27<<7 | 0x35, + 30059 - 19968: jis0208<<14 | 0x40<<7 | 0x20, + 30061 - 19968: jis0208<<14 | 0x40<<7 | 0x21, + 30063 - 19968: jis0208<<14 | 0x5A<<7 | 0x13, + 30064 - 19968: jis0208<<14 | 0x0F<<7 | 0x3A, + 30065 - 19968: jis0212<<14 | 0x2C<<7 | 0x1B, + 30067 - 19968: jis0208<<14 | 0x1D<<7 | 0x55, + 30068 - 19968: jis0208<<14 | 0x40<<7 | 0x26, + 30070 - 19968: jis0208<<14 | 0x40<<7 | 0x23, + 30071 - 19968: jis0208<<14 | 0x25<<7 | 0x4C, + 30072 - 19968: jis0208<<14 | 0x40<<7 | 0x22, + 30073 - 19968: jis0212<<14 | 0x2C<<7 | 0x1C, + 30074 - 19968: jis0212<<14 | 0x2C<<7 | 0x1D, + 30075 - 19968: jis0212<<14 | 0x2C<<7 | 0x1E, + 30076 - 19968: jis0212<<14 | 0x2C<<7 | 0x1F, + 30077 - 19968: jis0212<<14 | 0x2C<<7 | 0x20, + 30078 - 19968: jis0212<<14 | 0x2C<<7 | 0x21, + 30079 - 19968: jis0208<<14 | 0x14<<7 | 0x05, + 30081 - 19968: jis0212<<14 | 0x2C<<7 | 0x22, + 30082 - 19968: jis0208<<14 | 0x40<<7 | 0x29, + 30085 - 19968: jis0212<<14 | 0x2C<<7 | 0x23, + 30086 - 19968: jis0208<<14 | 0x40<<7 | 0x24, + 30087 - 19968: jis0208<<14 | 0x40<<7 | 0x25, + 30089 - 19968: jis0208<<14 | 0x40<<7 | 0x28, + 30090 - 19968: jis0208<<14 | 0x40<<7 | 0x27, + 30091 - 19968: jis0208<<14 | 0x28<<7 | 0x04, + 30094 - 19968: jis0208<<14 | 0x20<<7 | 0x21, + 30095 - 19968: jis0208<<14 | 0x20<<7 | 0x20, + 30096 - 19968: jis0212<<14 | 0x2C<<7 | 0x24, + 30097 - 19968: jis0208<<14 | 0x14<<7 | 0x1E, + 30098 - 19968: jis0212<<14 | 0x2C<<7 | 0x25, + 30099 - 19968: jis0212<<14 | 0x2C<<7 | 0x26, + 30100 - 19968: jis0208<<14 | 0x40<<7 | 0x2A, + 30101 - 19968: jis0212<<14 | 0x2C<<7 | 0x27, + 30105 - 19968: jis0212<<14 | 0x2C<<7 | 0x28, + 30106 - 19968: jis0208<<14 | 0x40<<7 | 0x2B, + 30108 - 19968: jis0212<<14 | 0x2C<<7 | 0x29, + 30109 - 19968: jis0208<<14 | 0x40<<7 | 0x2C, + 30114 - 19968: jis0212<<14 | 0x2C<<7 | 0x2A, + 30115 - 19968: jis0208<<14 | 0x40<<7 | 0x2E, + 30116 - 19968: jis0212<<14 | 0x2C<<7 | 0x2B, + 30117 - 19968: jis0208<<14 | 0x40<<7 | 0x2D, + 30123 - 19968: jis0208<<14 | 0x10<<7 | 0x35, + 30129 - 19968: jis0208<<14 | 0x40<<7 | 0x36, + 30130 - 19968: jis0208<<14 | 0x27<<7 | 0x47, + 30131 - 19968: jis0208<<14 | 0x40<<7 | 0x30, + 30132 - 19968: jis0212<<14 | 0x2C<<7 | 0x2C, + 30133 - 19968: jis0208<<14 | 0x40<<7 | 0x32, + 30136 - 19968: jis0208<<14 | 0x40<<7 | 0x34, + 30137 - 19968: jis0208<<14 | 0x1E<<7 | 0x1D, + 30138 - 19968: jis0212<<14 | 0x2C<<7 | 0x2D, + 30140 - 19968: jis0208<<14 | 0x40<<7 | 0x35, + 30141 - 19968: jis0208<<14 | 0x40<<7 | 0x33, + 30142 - 19968: jis0208<<14 | 0x1B<<7 | 0x1F, + 30143 - 19968: jis0212<<14 | 0x2C<<7 | 0x2E, + 30144 - 19968: jis0212<<14 | 0x2C<<7 | 0x2F, + 30145 - 19968: jis0212<<14 | 0x2C<<7 | 0x30, + 30146 - 19968: jis0208<<14 | 0x40<<7 | 0x2F, + 30147 - 19968: jis0208<<14 | 0x40<<7 | 0x31, + 30148 - 19968: jis0212<<14 | 0x2C<<7 | 0x31, + 30149 - 19968: jis0208<<14 | 0x28<<7 | 0x21, + 30150 - 19968: jis0212<<14 | 0x2C<<7 | 0x32, + 30151 - 19968: jis0208<<14 | 0x1D<<7 | 0x28, + 30154 - 19968: jis0208<<14 | 0x40<<7 | 0x38, + 30156 - 19968: jis0212<<14 | 0x2C<<7 | 0x33, + 30157 - 19968: jis0208<<14 | 0x40<<7 | 0x37, + 30158 - 19968: jis0212<<14 | 0x2C<<7 | 0x34, + 30159 - 19968: jis0212<<14 | 0x2C<<7 | 0x35, + 30162 - 19968: jis0208<<14 | 0x40<<7 | 0x39, + 30164 - 19968: jis0208<<14 | 0x1B<<7 | 0x05, + 30165 - 19968: jis0208<<14 | 0x19<<7 | 0x0E, + 30167 - 19968: jis0212<<14 | 0x2C<<7 | 0x36, + 30168 - 19968: jis0208<<14 | 0x24<<7 | 0x56, + 30169 - 19968: jis0208<<14 | 0x40<<7 | 0x3A, + 30171 - 19968: jis0208<<14 | 0x23<<7 | 0x2A, + 30172 - 19968: jis0212<<14 | 0x2C<<7 | 0x37, + 30174 - 19968: jis0208<<14 | 0x40<<7 | 0x3C, + 30175 - 19968: jis0212<<14 | 0x2C<<7 | 0x38, + 30176 - 19968: jis0212<<14 | 0x2C<<7 | 0x39, + 30177 - 19968: jis0212<<14 | 0x2C<<7 | 0x3A, + 30178 - 19968: jis0208<<14 | 0x2D<<7 | 0x00, + 30179 - 19968: jis0208<<14 | 0x40<<7 | 0x3B, + 30180 - 19968: jis0212<<14 | 0x2C<<7 | 0x3B, + 30183 - 19968: jis0212<<14 | 0x2C<<7 | 0x3C, + 30185 - 19968: jis0208<<14 | 0x20<<7 | 0x48, + 30188 - 19968: jis0212<<14 | 0x2C<<7 | 0x3D, + 30190 - 19968: jis0212<<14 | 0x2C<<7 | 0x3E, + 30191 - 19968: jis0212<<14 | 0x2C<<7 | 0x3F, + 30192 - 19968: jis0208<<14 | 0x40<<7 | 0x41, + 30193 - 19968: jis0212<<14 | 0x2C<<7 | 0x40, + 30194 - 19968: jis0208<<14 | 0x40<<7 | 0x43, + 30195 - 19968: jis0208<<14 | 0x40<<7 | 0x44, + 30196 - 19968: jis0208<<14 | 0x22<<7 | 0x33, + 30201 - 19968: jis0212<<14 | 0x2C<<7 | 0x41, + 30202 - 19968: jis0208<<14 | 0x40<<7 | 0x42, + 30204 - 19968: jis0208<<14 | 0x40<<7 | 0x3F, + 30206 - 19968: jis0208<<14 | 0x40<<7 | 0x3D, + 30207 - 19968: jis0208<<14 | 0x40<<7 | 0x3E, + 30208 - 19968: jis0212<<14 | 0x2C<<7 | 0x42, + 30209 - 19968: jis0208<<14 | 0x40<<7 | 0x40, + 30210 - 19968: jis0212<<14 | 0x2C<<7 | 0x43, + 30211 - 19968: jis0212<<14 | 0x2C<<7 | 0x44, + 30212 - 19968: jis0212<<14 | 0x2C<<7 | 0x45, + 30215 - 19968: jis0212<<14 | 0x2C<<7 | 0x46, + 30216 - 19968: jis0212<<14 | 0x2C<<7 | 0x47, + 30217 - 19968: jis0208<<14 | 0x40<<7 | 0x47, + 30218 - 19968: jis0212<<14 | 0x2C<<7 | 0x48, + 30219 - 19968: jis0208<<14 | 0x40<<7 | 0x45, + 30220 - 19968: jis0212<<14 | 0x2C<<7 | 0x49, + 30221 - 19968: jis0208<<14 | 0x40<<7 | 0x46, + 30223 - 19968: jis0212<<14 | 0x2C<<7 | 0x4A, + 30226 - 19968: jis0212<<14 | 0x2C<<7 | 0x4B, + 30227 - 19968: jis0212<<14 | 0x2C<<7 | 0x4C, + 30229 - 19968: jis0212<<14 | 0x2C<<7 | 0x4D, + 30230 - 19968: jis0212<<14 | 0x2C<<7 | 0x4E, + 30233 - 19968: jis0212<<14 | 0x2C<<7 | 0x4F, + 30235 - 19968: jis0212<<14 | 0x2C<<7 | 0x50, + 30236 - 19968: jis0212<<14 | 0x2C<<7 | 0x51, + 30237 - 19968: jis0212<<14 | 0x2C<<7 | 0x52, + 30238 - 19968: jis0212<<14 | 0x2C<<7 | 0x53, + 30239 - 19968: jis0208<<14 | 0x40<<7 | 0x48, + 30240 - 19968: jis0208<<14 | 0x40<<7 | 0x4A, + 30241 - 19968: jis0208<<14 | 0x40<<7 | 0x4B, + 30242 - 19968: jis0208<<14 | 0x40<<7 | 0x4C, + 30243 - 19968: jis0212<<14 | 0x2C<<7 | 0x54, + 30244 - 19968: jis0208<<14 | 0x40<<7 | 0x4D, + 30245 - 19968: jis0212<<14 | 0x2C<<7 | 0x55, + 30246 - 19968: jis0212<<14 | 0x2C<<7 | 0x56, + 30247 - 19968: jis0208<<14 | 0x40<<7 | 0x49, + 30249 - 19968: jis0212<<14 | 0x2C<<7 | 0x57, + 30253 - 19968: jis0212<<14 | 0x2C<<7 | 0x58, + 30256 - 19968: jis0208<<14 | 0x40<<7 | 0x4F, + 30258 - 19968: jis0212<<14 | 0x2C<<7 | 0x59, + 30259 - 19968: jis0212<<14 | 0x2C<<7 | 0x5A, + 30260 - 19968: jis0208<<14 | 0x40<<7 | 0x4E, + 30261 - 19968: jis0212<<14 | 0x2C<<7 | 0x5B, + 30264 - 19968: jis0212<<14 | 0x2C<<7 | 0x5C, + 30265 - 19968: jis0212<<14 | 0x2C<<7 | 0x5D, + 30266 - 19968: jis0212<<14 | 0x2D<<7 | 0x00, + 30267 - 19968: jis0208<<14 | 0x40<<7 | 0x50, + 30268 - 19968: jis0212<<14 | 0x2D<<7 | 0x01, + 30272 - 19968: jis0212<<14 | 0x2D<<7 | 0x03, + 30273 - 19968: jis0212<<14 | 0x2D<<7 | 0x04, + 30274 - 19968: jis0208<<14 | 0x2D<<7 | 0x24, + 30275 - 19968: jis0212<<14 | 0x2D<<7 | 0x05, + 30276 - 19968: jis0212<<14 | 0x2D<<7 | 0x06, + 30277 - 19968: jis0212<<14 | 0x2D<<7 | 0x07, + 30278 - 19968: jis0208<<14 | 0x40<<7 | 0x53, + 30279 - 19968: jis0208<<14 | 0x40<<7 | 0x51, + 30280 - 19968: jis0208<<14 | 0x40<<7 | 0x52, + 30281 - 19968: jis0212<<14 | 0x2D<<7 | 0x08, + 30282 - 19968: jis0212<<14 | 0x2D<<7 | 0x02, + 30283 - 19968: jis0212<<14 | 0x2D<<7 | 0x09, + 30284 - 19968: jis0208<<14 | 0x13<<7 | 0x41, + 30290 - 19968: jis0208<<14 | 0x2B<<7 | 0x5D, + 30293 - 19968: jis0212<<14 | 0x2D<<7 | 0x0A, + 30294 - 19968: jis0208<<14 | 0x29<<7 | 0x29, + 30296 - 19968: jis0208<<14 | 0x40<<7 | 0x55, + 30297 - 19968: jis0212<<14 | 0x2D<<7 | 0x0B, + 30300 - 19968: jis0208<<14 | 0x40<<7 | 0x54, + 30303 - 19968: jis0212<<14 | 0x2D<<7 | 0x0C, + 30305 - 19968: jis0208<<14 | 0x40<<7 | 0x56, + 30306 - 19968: jis0208<<14 | 0x40<<7 | 0x57, + 30308 - 19968: jis0212<<14 | 0x2D<<7 | 0x0D, + 30309 - 19968: jis0212<<14 | 0x2D<<7 | 0x0E, + 30311 - 19968: jis0208<<14 | 0x40<<7 | 0x5B, + 30312 - 19968: jis0208<<14 | 0x40<<7 | 0x58, + 30313 - 19968: jis0208<<14 | 0x40<<7 | 0x59, + 30314 - 19968: jis0208<<14 | 0x40<<7 | 0x5A, + 30316 - 19968: jis0208<<14 | 0x40<<7 | 0x5C, + 30317 - 19968: jis0212<<14 | 0x2D<<7 | 0x0F, + 30318 - 19968: jis0212<<14 | 0x2D<<7 | 0x10, + 30319 - 19968: jis0212<<14 | 0x2D<<7 | 0x11, + 30320 - 19968: jis0208<<14 | 0x40<<7 | 0x5D, + 30321 - 19968: jis0212<<14 | 0x2D<<7 | 0x12, + 30322 - 19968: jis0208<<14 | 0x41<<7 | 0x00, + 30324 - 19968: jis0212<<14 | 0x2D<<7 | 0x13, + 30326 - 19968: jis0208<<14 | 0x41<<7 | 0x01, + 30328 - 19968: jis0208<<14 | 0x41<<7 | 0x02, + 30330 - 19968: jis0208<<14 | 0x27<<7 | 0x0E, + 30331 - 19968: jis0208<<14 | 0x24<<7 | 0x2F, + 30332 - 19968: jis0208<<14 | 0x41<<7 | 0x03, + 30333 - 19968: jis0208<<14 | 0x26<<7 | 0x51, + 30334 - 19968: jis0208<<14 | 0x28<<7 | 0x13, + 30336 - 19968: jis0208<<14 | 0x41<<7 | 0x04, + 30337 - 19968: jis0212<<14 | 0x2D<<7 | 0x14, + 30338 - 19968: jis0208<<14 | 0x5A<<7 | 0x14, + 30339 - 19968: jis0208<<14 | 0x41<<7 | 0x05, + 30340 - 19968: jis0208<<14 | 0x24<<7 | 0x09, + 30341 - 19968: jis0212<<14 | 0x2D<<7 | 0x15, + 30342 - 19968: jis0208<<14 | 0x12<<7 | 0x06, + 30343 - 19968: jis0208<<14 | 0x18<<7 | 0x23, + 30344 - 19968: jis0208<<14 | 0x41<<7 | 0x06, + 30347 - 19968: jis0208<<14 | 0x41<<7 | 0x07, + 30348 - 19968: jis0212<<14 | 0x2D<<7 | 0x16, + 30349 - 19968: jis0212<<14 | 0x2D<<7 | 0x17, + 30350 - 19968: jis0208<<14 | 0x41<<7 | 0x08, + 30352 - 19968: jis0208<<14 | 0x1A<<7 | 0x08, + 30355 - 19968: jis0208<<14 | 0x41<<7 | 0x0A, + 30357 - 19968: jis0212<<14 | 0x2D<<7 | 0x18, + 30358 - 19968: jis0208<<14 | 0x41<<7 | 0x09, + 30361 - 19968: jis0208<<14 | 0x41<<7 | 0x0B, + 30362 - 19968: jis0208<<14 | 0x41<<7 | 0x0C, + 30363 - 19968: jis0208<<14 | 0x5A<<7 | 0x17, + 30364 - 19968: jis0208<<14 | 0x5A<<7 | 0x15, + 30365 - 19968: jis0212<<14 | 0x2D<<7 | 0x1B, + 30366 - 19968: jis0208<<14 | 0x5A<<7 | 0x16, + 30367 - 19968: jis0212<<14 | 0x2D<<7 | 0x1C, + 30368 - 19968: jis0212<<14 | 0x2D<<7 | 0x1D, + 30370 - 19968: jis0212<<14 | 0x2D<<7 | 0x1E, + 30371 - 19968: jis0212<<14 | 0x2D<<7 | 0x1F, + 30372 - 19968: jis0212<<14 | 0x2D<<7 | 0x20, + 30373 - 19968: jis0212<<14 | 0x2D<<7 | 0x21, + 30374 - 19968: jis0208<<14 | 0x5A<<7 | 0x18, + 30375 - 19968: jis0212<<14 | 0x2D<<7 | 0x23, + 30376 - 19968: jis0212<<14 | 0x2D<<7 | 0x24, + 30378 - 19968: jis0212<<14 | 0x2D<<7 | 0x25, + 30381 - 19968: jis0212<<14 | 0x2D<<7 | 0x26, + 30382 - 19968: jis0208<<14 | 0x27<<7 | 0x48, + 30384 - 19968: jis0208<<14 | 0x41<<7 | 0x0D, + 30388 - 19968: jis0208<<14 | 0x41<<7 | 0x0E, + 30391 - 19968: jis0208<<14 | 0x52<<7 | 0x48, + 30392 - 19968: jis0208<<14 | 0x41<<7 | 0x0F, + 30393 - 19968: jis0208<<14 | 0x41<<7 | 0x10, + 30394 - 19968: jis0208<<14 | 0x41<<7 | 0x11, + 30397 - 19968: jis0212<<14 | 0x2D<<7 | 0x27, + 30399 - 19968: jis0208<<14 | 0x1A<<7 | 0x0D, + 30401 - 19968: jis0212<<14 | 0x2D<<7 | 0x28, + 30402 - 19968: jis0208<<14 | 0x41<<7 | 0x12, + 30403 - 19968: jis0208<<14 | 0x26<<7 | 0x35, + 30405 - 19968: jis0212<<14 | 0x2D<<7 | 0x29, + 30406 - 19968: jis0208<<14 | 0x2A<<7 | 0x3E, + 30408 - 19968: jis0208<<14 | 0x10<<7 | 0x2D, + 30409 - 19968: jis0212<<14 | 0x2D<<7 | 0x2A, + 30410 - 19968: jis0208<<14 | 0x10<<7 | 0x36, + 30411 - 19968: jis0212<<14 | 0x2D<<7 | 0x2B, + 30412 - 19968: jis0212<<14 | 0x2D<<7 | 0x2C, + 30413 - 19968: jis0208<<14 | 0x41<<7 | 0x13, + 30414 - 19968: jis0212<<14 | 0x2D<<7 | 0x2D, + 30418 - 19968: jis0208<<14 | 0x41<<7 | 0x15, + 30420 - 19968: jis0212<<14 | 0x2D<<7 | 0x2E, + 30422 - 19968: jis0208<<14 | 0x41<<7 | 0x14, + 30423 - 19968: jis0208<<14 | 0x24<<7 | 0x4F, + 30425 - 19968: jis0212<<14 | 0x2D<<7 | 0x2F, + 30427 - 19968: jis0208<<14 | 0x1F<<7 | 0x18, + 30428 - 19968: jis0208<<14 | 0x3C<<7 | 0x18, + 30430 - 19968: jis0208<<14 | 0x41<<7 | 0x16, + 30431 - 19968: jis0208<<14 | 0x2B<<7 | 0x20, + 30432 - 19968: jis0212<<14 | 0x2D<<7 | 0x30, + 30433 - 19968: jis0208<<14 | 0x41<<7 | 0x17, + 30435 - 19968: jis0208<<14 | 0x13<<7 | 0x25, + 30436 - 19968: jis0208<<14 | 0x27<<7 | 0x36, + 30437 - 19968: jis0208<<14 | 0x41<<7 | 0x18, + 30438 - 19968: jis0212<<14 | 0x2D<<7 | 0x31, + 30439 - 19968: jis0208<<14 | 0x41<<7 | 0x19, + 30440 - 19968: jis0212<<14 | 0x2D<<7 | 0x32, + 30442 - 19968: jis0208<<14 | 0x41<<7 | 0x1A, + 30444 - 19968: jis0212<<14 | 0x2D<<7 | 0x33, + 30446 - 19968: jis0208<<14 | 0x2B<<7 | 0x3B, + 30448 - 19968: jis0212<<14 | 0x2D<<7 | 0x34, + 30449 - 19968: jis0212<<14 | 0x2D<<7 | 0x35, + 30450 - 19968: jis0208<<14 | 0x2B<<7 | 0x34, + 30452 - 19968: jis0208<<14 | 0x23<<7 | 0x1D, + 30454 - 19968: jis0212<<14 | 0x2D<<7 | 0x36, + 30456 - 19968: jis0208<<14 | 0x20<<7 | 0x49, + 30457 - 19968: jis0212<<14 | 0x2D<<7 | 0x37, + 30459 - 19968: jis0208<<14 | 0x41<<7 | 0x1C, + 30460 - 19968: jis0212<<14 | 0x2D<<7 | 0x38, + 30462 - 19968: jis0208<<14 | 0x1C<<7 | 0x41, + 30464 - 19968: jis0212<<14 | 0x2D<<7 | 0x39, + 30465 - 19968: jis0208<<14 | 0x1D<<7 | 0x29, + 30468 - 19968: jis0208<<14 | 0x41<<7 | 0x1F, + 30470 - 19968: jis0212<<14 | 0x2D<<7 | 0x3A, + 30471 - 19968: jis0208<<14 | 0x41<<7 | 0x1E, + 30472 - 19968: jis0208<<14 | 0x41<<7 | 0x1D, + 30473 - 19968: jis0208<<14 | 0x27<<7 | 0x5C, + 30474 - 19968: jis0212<<14 | 0x2D<<7 | 0x3B, + 30475 - 19968: jis0208<<14 | 0x13<<7 | 0x26, + 30476 - 19968: jis0208<<14 | 0x17<<7 | 0x08, + 30478 - 19968: jis0212<<14 | 0x2D<<7 | 0x3C, + 30482 - 19968: jis0212<<14 | 0x2D<<7 | 0x3D, + 30484 - 19968: jis0212<<14 | 0x2D<<7 | 0x3E, + 30485 - 19968: jis0212<<14 | 0x2D<<7 | 0x3F, + 30487 - 19968: jis0212<<14 | 0x2D<<7 | 0x40, + 30489 - 19968: jis0212<<14 | 0x2D<<7 | 0x41, + 30490 - 19968: jis0212<<14 | 0x2D<<7 | 0x42, + 30491 - 19968: jis0208<<14 | 0x41<<7 | 0x25, + 30492 - 19968: jis0212<<14 | 0x2D<<7 | 0x43, + 30494 - 19968: jis0208<<14 | 0x41<<7 | 0x22, + 30495 - 19968: jis0208<<14 | 0x1E<<7 | 0x1E, + 30496 - 19968: jis0208<<14 | 0x2B<<7 | 0x11, + 30498 - 19968: jis0212<<14 | 0x2D<<7 | 0x44, + 30500 - 19968: jis0208<<14 | 0x41<<7 | 0x21, + 30501 - 19968: jis0208<<14 | 0x41<<7 | 0x23, + 30502 - 19968: jis0208<<14 | 0x41<<7 | 0x24, + 30504 - 19968: jis0212<<14 | 0x2D<<7 | 0x45, + 30505 - 19968: jis0208<<14 | 0x41<<7 | 0x20, + 30509 - 19968: jis0212<<14 | 0x2D<<7 | 0x46, + 30510 - 19968: jis0212<<14 | 0x2D<<7 | 0x47, + 30511 - 19968: jis0212<<14 | 0x2D<<7 | 0x48, + 30516 - 19968: jis0212<<14 | 0x2D<<7 | 0x49, + 30517 - 19968: jis0212<<14 | 0x2D<<7 | 0x4A, + 30518 - 19968: jis0212<<14 | 0x2D<<7 | 0x4B, + 30519 - 19968: jis0208<<14 | 0x41<<7 | 0x26, + 30520 - 19968: jis0208<<14 | 0x41<<7 | 0x27, + 30521 - 19968: jis0212<<14 | 0x2D<<7 | 0x4C, + 30522 - 19968: jis0208<<14 | 0x23<<7 | 0x0E, + 30524 - 19968: jis0208<<14 | 0x13<<7 | 0x42, + 30525 - 19968: jis0212<<14 | 0x2D<<7 | 0x4D, + 30526 - 19968: jis0212<<14 | 0x2D<<7 | 0x4E, + 30528 - 19968: jis0208<<14 | 0x22<<7 | 0x44, + 30530 - 19968: jis0212<<14 | 0x2D<<7 | 0x4F, + 30533 - 19968: jis0212<<14 | 0x2D<<7 | 0x50, + 30534 - 19968: jis0208<<14 | 0x5A<<7 | 0x1A, + 30535 - 19968: jis0208<<14 | 0x41<<7 | 0x28, + 30538 - 19968: jis0212<<14 | 0x2D<<7 | 0x52, + 30541 - 19968: jis0212<<14 | 0x2D<<7 | 0x53, + 30542 - 19968: jis0212<<14 | 0x2D<<7 | 0x54, + 30543 - 19968: jis0212<<14 | 0x2D<<7 | 0x55, + 30546 - 19968: jis0212<<14 | 0x2D<<7 | 0x56, + 30550 - 19968: jis0212<<14 | 0x2D<<7 | 0x57, + 30551 - 19968: jis0212<<14 | 0x2D<<7 | 0x58, + 30554 - 19968: jis0208<<14 | 0x41<<7 | 0x29, + 30555 - 19968: jis0208<<14 | 0x41<<7 | 0x2C, + 30556 - 19968: jis0212<<14 | 0x2D<<7 | 0x59, + 30558 - 19968: jis0212<<14 | 0x2D<<7 | 0x5A, + 30559 - 19968: jis0212<<14 | 0x2D<<7 | 0x5B, + 30560 - 19968: jis0212<<14 | 0x2D<<7 | 0x5C, + 30561 - 19968: jis0208<<14 | 0x1E<<7 | 0x46, + 30562 - 19968: jis0212<<14 | 0x2D<<7 | 0x5D, + 30563 - 19968: jis0208<<14 | 0x25<<7 | 0x23, + 30564 - 19968: jis0212<<14 | 0x2E<<7 | 0x00, + 30565 - 19968: jis0208<<14 | 0x41<<7 | 0x2D, + 30566 - 19968: jis0208<<14 | 0x2A<<7 | 0x32, + 30567 - 19968: jis0212<<14 | 0x2E<<7 | 0x01, + 30568 - 19968: jis0208<<14 | 0x41<<7 | 0x2A, + 30570 - 19968: jis0212<<14 | 0x2E<<7 | 0x02, + 30571 - 19968: jis0208<<14 | 0x41<<7 | 0x2B, + 30572 - 19968: jis0212<<14 | 0x2E<<7 | 0x03, + 30576 - 19968: jis0212<<14 | 0x2E<<7 | 0x04, + 30578 - 19968: jis0212<<14 | 0x2E<<7 | 0x05, + 30579 - 19968: jis0212<<14 | 0x2E<<7 | 0x06, + 30580 - 19968: jis0212<<14 | 0x2E<<7 | 0x07, + 30585 - 19968: jis0208<<14 | 0x41<<7 | 0x30, + 30586 - 19968: jis0212<<14 | 0x2E<<7 | 0x08, + 30589 - 19968: jis0212<<14 | 0x2E<<7 | 0x09, + 30590 - 19968: jis0208<<14 | 0x41<<7 | 0x2F, + 30591 - 19968: jis0208<<14 | 0x41<<7 | 0x2E, + 30592 - 19968: jis0212<<14 | 0x2E<<7 | 0x0A, + 30596 - 19968: jis0212<<14 | 0x2E<<7 | 0x0B, + 30603 - 19968: jis0208<<14 | 0x41<<7 | 0x32, + 30604 - 19968: jis0212<<14 | 0x2E<<7 | 0x0C, + 30605 - 19968: jis0212<<14 | 0x2E<<7 | 0x0D, + 30606 - 19968: jis0208<<14 | 0x41<<7 | 0x31, + 30609 - 19968: jis0208<<14 | 0x41<<7 | 0x33, + 30612 - 19968: jis0212<<14 | 0x2E<<7 | 0x0E, + 30613 - 19968: jis0212<<14 | 0x2E<<7 | 0x0F, + 30614 - 19968: jis0212<<14 | 0x2E<<7 | 0x10, + 30618 - 19968: jis0212<<14 | 0x2E<<7 | 0x11, + 30622 - 19968: jis0208<<14 | 0x41<<7 | 0x35, + 30623 - 19968: jis0212<<14 | 0x2E<<7 | 0x12, + 30624 - 19968: jis0208<<14 | 0x41<<7 | 0x34, + 30626 - 19968: jis0212<<14 | 0x2E<<7 | 0x13, + 30629 - 19968: jis0208<<14 | 0x29<<7 | 0x2C, + 30631 - 19968: jis0212<<14 | 0x2E<<7 | 0x14, + 30634 - 19968: jis0212<<14 | 0x2E<<7 | 0x15, + 30636 - 19968: jis0208<<14 | 0x1C<<7 | 0x35, + 30637 - 19968: jis0208<<14 | 0x2D<<7 | 0x25, + 30638 - 19968: jis0212<<14 | 0x2E<<7 | 0x16, + 30639 - 19968: jis0212<<14 | 0x2E<<7 | 0x17, + 30640 - 19968: jis0208<<14 | 0x41<<7 | 0x36, + 30641 - 19968: jis0212<<14 | 0x2E<<7 | 0x18, + 30643 - 19968: jis0208<<14 | 0x25<<7 | 0x16, + 30645 - 19968: jis0212<<14 | 0x2E<<7 | 0x19, + 30646 - 19968: jis0208<<14 | 0x41<<7 | 0x37, + 30649 - 19968: jis0208<<14 | 0x41<<7 | 0x38, + 30651 - 19968: jis0208<<14 | 0x41<<7 | 0x3C, + 30652 - 19968: jis0208<<14 | 0x41<<7 | 0x3A, + 30653 - 19968: jis0208<<14 | 0x41<<7 | 0x3B, + 30654 - 19968: jis0212<<14 | 0x2E<<7 | 0x1A, + 30655 - 19968: jis0208<<14 | 0x41<<7 | 0x39, + 30659 - 19968: jis0212<<14 | 0x2E<<7 | 0x1B, + 30663 - 19968: jis0208<<14 | 0x41<<7 | 0x3D, + 30665 - 19968: jis0212<<14 | 0x2E<<7 | 0x1C, + 30669 - 19968: jis0208<<14 | 0x41<<7 | 0x3E, + 30673 - 19968: jis0212<<14 | 0x2E<<7 | 0x1D, + 30674 - 19968: jis0212<<14 | 0x2E<<7 | 0x1E, + 30677 - 19968: jis0212<<14 | 0x2E<<7 | 0x1F, + 30679 - 19968: jis0208<<14 | 0x41<<7 | 0x3F, + 30681 - 19968: jis0212<<14 | 0x2E<<7 | 0x20, + 30682 - 19968: jis0208<<14 | 0x41<<7 | 0x40, + 30683 - 19968: jis0208<<14 | 0x2B<<7 | 0x16, + 30684 - 19968: jis0208<<14 | 0x41<<7 | 0x41, + 30686 - 19968: jis0212<<14 | 0x2E<<7 | 0x21, + 30687 - 19968: jis0212<<14 | 0x2E<<7 | 0x22, + 30688 - 19968: jis0212<<14 | 0x2E<<7 | 0x23, + 30690 - 19968: jis0208<<14 | 0x2B<<7 | 0x4F, + 30691 - 19968: jis0208<<14 | 0x41<<7 | 0x42, + 30692 - 19968: jis0212<<14 | 0x2E<<7 | 0x24, + 30693 - 19968: jis0208<<14 | 0x22<<7 | 0x2D, + 30694 - 19968: jis0212<<14 | 0x2E<<7 | 0x25, + 30695 - 19968: jis0208<<14 | 0x26<<7 | 0x49, + 30697 - 19968: jis0208<<14 | 0x15<<7 | 0x4A, + 30698 - 19968: jis0212<<14 | 0x2E<<7 | 0x26, + 30700 - 19968: jis0212<<14 | 0x2E<<7 | 0x27, + 30701 - 19968: jis0208<<14 | 0x22<<7 | 0x1A, + 30702 - 19968: jis0208<<14 | 0x41<<7 | 0x43, + 30703 - 19968: jis0208<<14 | 0x15<<7 | 0x19, + 30704 - 19968: jis0212<<14 | 0x2E<<7 | 0x28, + 30705 - 19968: jis0212<<14 | 0x2E<<7 | 0x29, + 30707 - 19968: jis0208<<14 | 0x1F<<7 | 0x2F, + 30708 - 19968: jis0212<<14 | 0x2E<<7 | 0x2A, + 30712 - 19968: jis0212<<14 | 0x2E<<7 | 0x2B, + 30715 - 19968: jis0212<<14 | 0x2E<<7 | 0x2C, + 30716 - 19968: jis0208<<14 | 0x41<<7 | 0x44, + 30722 - 19968: jis0208<<14 | 0x19<<7 | 0x1C, + 30725 - 19968: jis0212<<14 | 0x2E<<7 | 0x2D, + 30726 - 19968: jis0212<<14 | 0x2E<<7 | 0x2E, + 30729 - 19968: jis0212<<14 | 0x2E<<7 | 0x2F, + 30732 - 19968: jis0208<<14 | 0x41<<7 | 0x45, + 30733 - 19968: jis0212<<14 | 0x2E<<7 | 0x30, + 30734 - 19968: jis0212<<14 | 0x2E<<7 | 0x31, + 30737 - 19968: jis0212<<14 | 0x2E<<7 | 0x32, + 30738 - 19968: jis0208<<14 | 0x41<<7 | 0x46, + 30740 - 19968: jis0208<<14 | 0x17<<7 | 0x05, + 30741 - 19968: jis0208<<14 | 0x19<<7 | 0x34, + 30749 - 19968: jis0212<<14 | 0x2E<<7 | 0x33, + 30752 - 19968: jis0208<<14 | 0x41<<7 | 0x48, + 30753 - 19968: jis0208<<14 | 0x5A<<7 | 0x1C, + 30754 - 19968: jis0212<<14 | 0x2E<<7 | 0x35, + 30755 - 19968: jis0212<<14 | 0x2E<<7 | 0x36, + 30757 - 19968: jis0208<<14 | 0x24<<7 | 0x35, + 30758 - 19968: jis0208<<14 | 0x19<<7 | 0x35, + 30759 - 19968: jis0208<<14 | 0x14<<7 | 0x2D, + 30765 - 19968: jis0212<<14 | 0x2E<<7 | 0x37, + 30766 - 19968: jis0212<<14 | 0x2E<<7 | 0x38, + 30768 - 19968: jis0212<<14 | 0x2E<<7 | 0x39, + 30770 - 19968: jis0208<<14 | 0x2A<<7 | 0x03, + 30772 - 19968: jis0208<<14 | 0x26<<7 | 0x2A, + 30773 - 19968: jis0212<<14 | 0x2E<<7 | 0x3A, + 30775 - 19968: jis0212<<14 | 0x2E<<7 | 0x3B, + 30778 - 19968: jis0208<<14 | 0x24<<7 | 0x36, + 30783 - 19968: jis0208<<14 | 0x18<<7 | 0x3B, + 30787 - 19968: jis0212<<14 | 0x2E<<7 | 0x3C, + 30788 - 19968: jis0212<<14 | 0x2E<<7 | 0x3D, + 30789 - 19968: jis0208<<14 | 0x41<<7 | 0x4A, + 30791 - 19968: jis0212<<14 | 0x2E<<7 | 0x3E, + 30792 - 19968: jis0212<<14 | 0x2E<<7 | 0x3F, + 30796 - 19968: jis0212<<14 | 0x2E<<7 | 0x40, + 30798 - 19968: jis0208<<14 | 0x5A<<7 | 0x1D, + 30802 - 19968: jis0212<<14 | 0x2E<<7 | 0x42, + 30812 - 19968: jis0212<<14 | 0x2E<<7 | 0x43, + 30813 - 19968: jis0208<<14 | 0x1D<<7 | 0x2A, + 30814 - 19968: jis0212<<14 | 0x2E<<7 | 0x44, + 30816 - 19968: jis0212<<14 | 0x2E<<7 | 0x45, + 30817 - 19968: jis0212<<14 | 0x2E<<7 | 0x46, + 30819 - 19968: jis0212<<14 | 0x2E<<7 | 0x47, + 30820 - 19968: jis0208<<14 | 0x5A<<7 | 0x1E, + 30824 - 19968: jis0212<<14 | 0x2E<<7 | 0x49, + 30826 - 19968: jis0212<<14 | 0x2E<<7 | 0x4A, + 30827 - 19968: jis0208<<14 | 0x2D<<7 | 0x11, + 30828 - 19968: jis0208<<14 | 0x18<<7 | 0x24, + 30830 - 19968: jis0212<<14 | 0x2E<<7 | 0x4B, + 30831 - 19968: jis0208<<14 | 0x17<<7 | 0x06, + 30834 - 19968: jis0208<<14 | 0x27<<7 | 0x02, + 30836 - 19968: jis0208<<14 | 0x41<<7 | 0x4C, + 30842 - 19968: jis0208<<14 | 0x5A<<7 | 0x1F, + 30844 - 19968: jis0208<<14 | 0x41<<7 | 0x4E, + 30846 - 19968: jis0212<<14 | 0x2E<<7 | 0x4D, + 30849 - 19968: jis0208<<14 | 0x17<<7 | 0x4A, + 30854 - 19968: jis0208<<14 | 0x41<<7 | 0x4D, + 30855 - 19968: jis0208<<14 | 0x23<<7 | 0x55, + 30858 - 19968: jis0212<<14 | 0x2E<<7 | 0x4E, + 30860 - 19968: jis0208<<14 | 0x41<<7 | 0x50, + 30861 - 19968: jis0208<<14 | 0x12<<7 | 0x16, + 30862 - 19968: jis0208<<14 | 0x41<<7 | 0x4B, + 30863 - 19968: jis0212<<14 | 0x2E<<7 | 0x4F, + 30865 - 19968: jis0208<<14 | 0x27<<7 | 0x49, + 30867 - 19968: jis0208<<14 | 0x10<<7 | 0x0F, + 30868 - 19968: jis0212<<14 | 0x2E<<7 | 0x50, + 30869 - 19968: jis0208<<14 | 0x19<<7 | 0x4B, + 30871 - 19968: jis0208<<14 | 0x2E<<7 | 0x31, + 30872 - 19968: jis0212<<14 | 0x2E<<7 | 0x51, + 30874 - 19968: jis0208<<14 | 0x41<<7 | 0x4F, + 30877 - 19968: jis0212<<14 | 0x2E<<7 | 0x53, + 30878 - 19968: jis0212<<14 | 0x2E<<7 | 0x54, + 30879 - 19968: jis0212<<14 | 0x2E<<7 | 0x55, + 30881 - 19968: jis0212<<14 | 0x2E<<7 | 0x52, + 30883 - 19968: jis0208<<14 | 0x41<<7 | 0x51, + 30884 - 19968: jis0212<<14 | 0x2E<<7 | 0x56, + 30887 - 19968: jis0208<<14 | 0x29<<7 | 0x2A, + 30888 - 19968: jis0212<<14 | 0x2E<<7 | 0x57, + 30889 - 19968: jis0208<<14 | 0x1F<<7 | 0x38, + 30890 - 19968: jis0208<<14 | 0x41<<7 | 0x53, + 30892 - 19968: jis0212<<14 | 0x2E<<7 | 0x58, + 30893 - 19968: jis0212<<14 | 0x2E<<7 | 0x59, + 30895 - 19968: jis0208<<14 | 0x41<<7 | 0x54, + 30896 - 19968: jis0212<<14 | 0x2E<<7 | 0x5A, + 30897 - 19968: jis0212<<14 | 0x2E<<7 | 0x5B, + 30898 - 19968: jis0212<<14 | 0x2E<<7 | 0x5C, + 30899 - 19968: jis0212<<14 | 0x2E<<7 | 0x5D, + 30901 - 19968: jis0208<<14 | 0x41<<7 | 0x52, + 30906 - 19968: jis0208<<14 | 0x12<<7 | 0x2D, + 30907 - 19968: jis0212<<14 | 0x2F<<7 | 0x00, + 30908 - 19968: jis0208<<14 | 0x41<<7 | 0x5A, + 30909 - 19968: jis0212<<14 | 0x2F<<7 | 0x01, + 30910 - 19968: jis0208<<14 | 0x41<<7 | 0x59, + 30911 - 19968: jis0212<<14 | 0x2F<<7 | 0x02, + 30913 - 19968: jis0208<<14 | 0x1B<<7 | 0x06, + 30917 - 19968: jis0208<<14 | 0x41<<7 | 0x5B, + 30918 - 19968: jis0208<<14 | 0x41<<7 | 0x56, + 30919 - 19968: jis0212<<14 | 0x2F<<7 | 0x03, + 30920 - 19968: jis0212<<14 | 0x2F<<7 | 0x04, + 30921 - 19968: jis0212<<14 | 0x2F<<7 | 0x05, + 30922 - 19968: jis0208<<14 | 0x41<<7 | 0x5C, + 30923 - 19968: jis0208<<14 | 0x41<<7 | 0x57, + 30924 - 19968: jis0212<<14 | 0x2F<<7 | 0x06, + 30926 - 19968: jis0212<<14 | 0x2F<<7 | 0x07, + 30928 - 19968: jis0208<<14 | 0x27<<7 | 0x37, + 30929 - 19968: jis0208<<14 | 0x41<<7 | 0x55, + 30930 - 19968: jis0212<<14 | 0x2F<<7 | 0x08, + 30931 - 19968: jis0212<<14 | 0x2F<<7 | 0x09, + 30932 - 19968: jis0208<<14 | 0x41<<7 | 0x58, + 30933 - 19968: jis0212<<14 | 0x2F<<7 | 0x0A, + 30934 - 19968: jis0212<<14 | 0x2F<<7 | 0x0B, + 30938 - 19968: jis0208<<14 | 0x42<<7 | 0x01, + 30939 - 19968: jis0212<<14 | 0x2F<<7 | 0x0D, + 30943 - 19968: jis0212<<14 | 0x2F<<7 | 0x0E, + 30944 - 19968: jis0212<<14 | 0x2F<<7 | 0x0F, + 30945 - 19968: jis0212<<14 | 0x2F<<7 | 0x10, + 30948 - 19968: jis0212<<14 | 0x2F<<7 | 0x0C, + 30950 - 19968: jis0212<<14 | 0x2F<<7 | 0x11, + 30951 - 19968: jis0208<<14 | 0x42<<7 | 0x00, + 30952 - 19968: jis0208<<14 | 0x2A<<7 | 0x40, + 30954 - 19968: jis0212<<14 | 0x2F<<7 | 0x12, + 30956 - 19968: jis0208<<14 | 0x41<<7 | 0x5D, + 30959 - 19968: jis0208<<14 | 0x0F<<7 | 0x4A, + 30962 - 19968: jis0212<<14 | 0x2F<<7 | 0x13, + 30963 - 19968: jis0212<<14 | 0x2F<<7 | 0x14, + 30964 - 19968: jis0208<<14 | 0x42<<7 | 0x03, + 30966 - 19968: jis0212<<14 | 0x2F<<7 | 0x16, + 30967 - 19968: jis0212<<14 | 0x2F<<7 | 0x17, + 30970 - 19968: jis0212<<14 | 0x2F<<7 | 0x18, + 30971 - 19968: jis0212<<14 | 0x2F<<7 | 0x19, + 30973 - 19968: jis0208<<14 | 0x42<<7 | 0x02, + 30975 - 19968: jis0212<<14 | 0x2F<<7 | 0x1A, + 30976 - 19968: jis0212<<14 | 0x2F<<7 | 0x15, + 30977 - 19968: jis0208<<14 | 0x1D<<7 | 0x2B, + 30982 - 19968: jis0212<<14 | 0x2F<<7 | 0x1B, + 30983 - 19968: jis0208<<14 | 0x42<<7 | 0x04, + 30988 - 19968: jis0212<<14 | 0x2F<<7 | 0x1C, + 30990 - 19968: jis0208<<14 | 0x20<<7 | 0x22, + 30992 - 19968: jis0212<<14 | 0x2F<<7 | 0x1D, + 30993 - 19968: jis0208<<14 | 0x42<<7 | 0x06, + 30994 - 19968: jis0208<<14 | 0x42<<7 | 0x05, + 31001 - 19968: jis0208<<14 | 0x42<<7 | 0x07, + 31002 - 19968: jis0212<<14 | 0x2F<<7 | 0x1E, + 31004 - 19968: jis0212<<14 | 0x2F<<7 | 0x1F, + 31006 - 19968: jis0212<<14 | 0x2F<<7 | 0x20, + 31007 - 19968: jis0212<<14 | 0x2F<<7 | 0x21, + 31008 - 19968: jis0212<<14 | 0x2F<<7 | 0x22, + 31013 - 19968: jis0212<<14 | 0x2F<<7 | 0x23, + 31014 - 19968: jis0208<<14 | 0x41<<7 | 0x47, + 31015 - 19968: jis0212<<14 | 0x2F<<7 | 0x24, + 31017 - 19968: jis0212<<14 | 0x2F<<7 | 0x25, + 31018 - 19968: jis0208<<14 | 0x41<<7 | 0x49, + 31019 - 19968: jis0208<<14 | 0x42<<7 | 0x09, + 31020 - 19968: jis0208<<14 | 0x42<<7 | 0x08, + 31021 - 19968: jis0212<<14 | 0x2F<<7 | 0x26, + 31024 - 19968: jis0208<<14 | 0x5A<<7 | 0x20, + 31025 - 19968: jis0212<<14 | 0x2F<<7 | 0x27, + 31028 - 19968: jis0212<<14 | 0x2F<<7 | 0x28, + 31029 - 19968: jis0212<<14 | 0x2F<<7 | 0x29, + 31034 - 19968: jis0208<<14 | 0x1B<<7 | 0x07, + 31035 - 19968: jis0212<<14 | 0x2F<<7 | 0x2A, + 31036 - 19968: jis0208<<14 | 0x2D<<7 | 0x48, + 31037 - 19968: jis0212<<14 | 0x2F<<7 | 0x2B, + 31038 - 19968: jis0208<<14 | 0x1B<<7 | 0x31, + 31039 - 19968: jis0212<<14 | 0x2F<<7 | 0x2C, + 31040 - 19968: jis0208<<14 | 0x42<<7 | 0x0A, + 31041 - 19968: jis0208<<14 | 0x16<<7 | 0x16, + 31044 - 19968: jis0212<<14 | 0x2F<<7 | 0x2D, + 31045 - 19968: jis0212<<14 | 0x2F<<7 | 0x2E, + 31046 - 19968: jis0212<<14 | 0x2F<<7 | 0x2F, + 31047 - 19968: jis0208<<14 | 0x14<<7 | 0x1F, + 31048 - 19968: jis0208<<14 | 0x14<<7 | 0x06, + 31049 - 19968: jis0208<<14 | 0x1A<<7 | 0x42, + 31050 - 19968: jis0212<<14 | 0x2F<<7 | 0x30, + 31051 - 19968: jis0212<<14 | 0x2F<<7 | 0x31, + 31055 - 19968: jis0212<<14 | 0x2F<<7 | 0x32, + 31056 - 19968: jis0208<<14 | 0x2C<<7 | 0x13, + 31057 - 19968: jis0212<<14 | 0x2F<<7 | 0x33, + 31059 - 19968: jis0208<<14 | 0x42<<7 | 0x10, + 31060 - 19968: jis0212<<14 | 0x2F<<7 | 0x34, + 31061 - 19968: jis0208<<14 | 0x42<<7 | 0x0F, + 31062 - 19968: jis0208<<14 | 0x20<<7 | 0x23, + 31063 - 19968: jis0208<<14 | 0x42<<7 | 0x0C, + 31064 - 19968: jis0212<<14 | 0x2F<<7 | 0x35, + 31066 - 19968: jis0208<<14 | 0x42<<7 | 0x0E, + 31067 - 19968: jis0212<<14 | 0x2F<<7 | 0x36, + 31068 - 19968: jis0212<<14 | 0x2F<<7 | 0x37, + 31069 - 19968: jis0208<<14 | 0x1C<<7 | 0x2A, + 31070 - 19968: jis0208<<14 | 0x1E<<7 | 0x1F, + 31071 - 19968: jis0208<<14 | 0x42<<7 | 0x0D, + 31072 - 19968: jis0208<<14 | 0x42<<7 | 0x0B, + 31074 - 19968: jis0208<<14 | 0x26<<7 | 0x09, + 31077 - 19968: jis0208<<14 | 0x1D<<7 | 0x2C, + 31079 - 19968: jis0212<<14 | 0x2F<<7 | 0x38, + 31080 - 19968: jis0208<<14 | 0x28<<7 | 0x1B, + 31081 - 19968: jis0212<<14 | 0x2F<<7 | 0x39, + 31083 - 19968: jis0212<<14 | 0x2F<<7 | 0x3A, + 31085 - 19968: jis0208<<14 | 0x19<<7 | 0x36, + 31090 - 19968: jis0212<<14 | 0x2F<<7 | 0x3B, + 31095 - 19968: jis0208<<14 | 0x24<<7 | 0x57, + 31097 - 19968: jis0212<<14 | 0x2F<<7 | 0x3C, + 31098 - 19968: jis0208<<14 | 0x42<<7 | 0x11, + 31099 - 19968: jis0212<<14 | 0x2F<<7 | 0x3D, + 31100 - 19968: jis0212<<14 | 0x2F<<7 | 0x3E, + 31102 - 19968: jis0212<<14 | 0x2F<<7 | 0x3F, + 31103 - 19968: jis0208<<14 | 0x42<<7 | 0x12, + 31104 - 19968: jis0208<<14 | 0x42<<7 | 0x28, + 31105 - 19968: jis0208<<14 | 0x15<<7 | 0x37, + 31108 - 19968: jis0208<<14 | 0x2E<<7 | 0x1C, + 31109 - 19968: jis0208<<14 | 0x20<<7 | 0x14, + 31114 - 19968: jis0208<<14 | 0x42<<7 | 0x13, + 31115 - 19968: jis0212<<14 | 0x2F<<7 | 0x40, + 31116 - 19968: jis0212<<14 | 0x2F<<7 | 0x41, + 31117 - 19968: jis0208<<14 | 0x11<<7 | 0x31, + 31118 - 19968: jis0208<<14 | 0x23<<7 | 0x56, + 31119 - 19968: jis0208<<14 | 0x29<<7 | 0x00, + 31121 - 19968: jis0212<<14 | 0x2F<<7 | 0x42, + 31123 - 19968: jis0212<<14 | 0x2F<<7 | 0x43, + 31124 - 19968: jis0208<<14 | 0x5A<<7 | 0x24, + 31125 - 19968: jis0212<<14 | 0x2F<<7 | 0x45, + 31126 - 19968: jis0212<<14 | 0x2F<<7 | 0x46, + 31128 - 19968: jis0212<<14 | 0x2F<<7 | 0x47, + 31131 - 19968: jis0208<<14 | 0x5A<<7 | 0x26, + 31132 - 19968: jis0212<<14 | 0x2F<<7 | 0x49, + 31133 - 19968: jis0208<<14 | 0x42<<7 | 0x14, + 31137 - 19968: jis0212<<14 | 0x2F<<7 | 0x4A, + 31142 - 19968: jis0208<<14 | 0x14<<7 | 0x59, + 31143 - 19968: jis0208<<14 | 0x42<<7 | 0x15, + 31144 - 19968: jis0212<<14 | 0x2F<<7 | 0x4B, + 31145 - 19968: jis0212<<14 | 0x2F<<7 | 0x4C, + 31146 - 19968: jis0208<<14 | 0x42<<7 | 0x17, + 31147 - 19968: jis0212<<14 | 0x2F<<7 | 0x4D, + 31150 - 19968: jis0208<<14 | 0x42<<7 | 0x18, + 31151 - 19968: jis0212<<14 | 0x2F<<7 | 0x4E, + 31152 - 19968: jis0208<<14 | 0x26<<7 | 0x08, + 31153 - 19968: jis0212<<14 | 0x2F<<7 | 0x4F, + 31155 - 19968: jis0208<<14 | 0x42<<7 | 0x19, + 31156 - 19968: jis0212<<14 | 0x2F<<7 | 0x50, + 31160 - 19968: jis0212<<14 | 0x2F<<7 | 0x51, + 31161 - 19968: jis0208<<14 | 0x42<<7 | 0x1A, + 31162 - 19968: jis0208<<14 | 0x42<<7 | 0x1B, + 31163 - 19968: jis0212<<14 | 0x2F<<7 | 0x52, + 31165 - 19968: jis0208<<14 | 0x15<<7 | 0x38, + 31166 - 19968: jis0208<<14 | 0x11<<7 | 0x32, + 31167 - 19968: jis0208<<14 | 0x25<<7 | 0x24, + 31168 - 19968: jis0208<<14 | 0x1C<<7 | 0x07, + 31169 - 19968: jis0208<<14 | 0x1A<<7 | 0x43, + 31170 - 19968: jis0212<<14 | 0x2F<<7 | 0x53, + 31172 - 19968: jis0212<<14 | 0x2F<<7 | 0x54, + 31175 - 19968: jis0212<<14 | 0x2F<<7 | 0x55, + 31176 - 19968: jis0212<<14 | 0x2F<<7 | 0x56, + 31177 - 19968: jis0208<<14 | 0x42<<7 | 0x1C, + 31178 - 19968: jis0212<<14 | 0x2F<<7 | 0x57, + 31179 - 19968: jis0208<<14 | 0x1C<<7 | 0x08, + 31183 - 19968: jis0212<<14 | 0x2F<<7 | 0x58, + 31185 - 19968: jis0208<<14 | 0x11<<7 | 0x29, + 31186 - 19968: jis0208<<14 | 0x28<<7 | 0x22, + 31188 - 19968: jis0212<<14 | 0x2F<<7 | 0x59, + 31189 - 19968: jis0208<<14 | 0x42<<7 | 0x1D, + 31190 - 19968: jis0212<<14 | 0x2F<<7 | 0x5A, + 31192 - 19968: jis0208<<14 | 0x27<<7 | 0x4A, + 31194 - 19968: jis0212<<14 | 0x2F<<7 | 0x5B, + 31197 - 19968: jis0212<<14 | 0x2F<<7 | 0x5C, + 31198 - 19968: jis0212<<14 | 0x2F<<7 | 0x5D, + 31199 - 19968: jis0208<<14 | 0x20<<7 | 0x24, + 31200 - 19968: jis0212<<14 | 0x30<<7 | 0x00, + 31201 - 19968: jis0208<<14 | 0x42<<7 | 0x20, + 31202 - 19968: jis0212<<14 | 0x30<<7 | 0x01, + 31203 - 19968: jis0208<<14 | 0x42<<7 | 0x21, + 31204 - 19968: jis0208<<14 | 0x26<<7 | 0x48, + 31205 - 19968: jis0212<<14 | 0x30<<7 | 0x02, + 31206 - 19968: jis0208<<14 | 0x1E<<7 | 0x20, + 31207 - 19968: jis0208<<14 | 0x42<<7 | 0x1E, + 31209 - 19968: jis0208<<14 | 0x22<<7 | 0x40, + 31210 - 19968: jis0212<<14 | 0x30<<7 | 0x03, + 31211 - 19968: jis0212<<14 | 0x30<<7 | 0x04, + 31212 - 19968: jis0208<<14 | 0x42<<7 | 0x1F, + 31213 - 19968: jis0212<<14 | 0x30<<7 | 0x05, + 31216 - 19968: jis0208<<14 | 0x1D<<7 | 0x2D, + 31217 - 19968: jis0212<<14 | 0x30<<7 | 0x06, + 31224 - 19968: jis0212<<14 | 0x30<<7 | 0x07, + 31227 - 19968: jis0208<<14 | 0x0F<<7 | 0x3B, + 31228 - 19968: jis0212<<14 | 0x30<<7 | 0x08, + 31232 - 19968: jis0208<<14 | 0x14<<7 | 0x08, + 31234 - 19968: jis0212<<14 | 0x30<<7 | 0x09, + 31235 - 19968: jis0212<<14 | 0x30<<7 | 0x0A, + 31239 - 19968: jis0212<<14 | 0x30<<7 | 0x0B, + 31240 - 19968: jis0208<<14 | 0x42<<7 | 0x22, + 31241 - 19968: jis0212<<14 | 0x30<<7 | 0x0C, + 31242 - 19968: jis0212<<14 | 0x30<<7 | 0x0D, + 31243 - 19968: jis0208<<14 | 0x23<<7 | 0x57, + 31244 - 19968: jis0212<<14 | 0x30<<7 | 0x0E, + 31245 - 19968: jis0208<<14 | 0x42<<7 | 0x23, + 31246 - 19968: jis0208<<14 | 0x1F<<7 | 0x26, + 31249 - 19968: jis0212<<14 | 0x30<<7 | 0x0F, + 31252 - 19968: jis0208<<14 | 0x2B<<7 | 0x0C, + 31253 - 19968: jis0212<<14 | 0x30<<7 | 0x10, + 31255 - 19968: jis0208<<14 | 0x28<<7 | 0x02, + 31256 - 19968: jis0208<<14 | 0x42<<7 | 0x24, + 31257 - 19968: jis0208<<14 | 0x42<<7 | 0x25, + 31258 - 19968: jis0208<<14 | 0x22<<7 | 0x34, + 31259 - 19968: jis0212<<14 | 0x30<<7 | 0x11, + 31260 - 19968: jis0208<<14 | 0x2D<<7 | 0x26, + 31262 - 19968: jis0212<<14 | 0x30<<7 | 0x12, + 31263 - 19968: jis0208<<14 | 0x42<<7 | 0x27, + 31264 - 19968: jis0208<<14 | 0x42<<7 | 0x26, + 31265 - 19968: jis0212<<14 | 0x30<<7 | 0x13, + 31271 - 19968: jis0212<<14 | 0x30<<7 | 0x14, + 31275 - 19968: jis0212<<14 | 0x30<<7 | 0x15, + 31277 - 19968: jis0212<<14 | 0x30<<7 | 0x16, + 31278 - 19968: jis0208<<14 | 0x1B<<7 | 0x4E, + 31279 - 19968: jis0212<<14 | 0x30<<7 | 0x17, + 31280 - 19968: jis0212<<14 | 0x30<<7 | 0x18, + 31281 - 19968: jis0208<<14 | 0x42<<7 | 0x29, + 31282 - 19968: jis0208<<14 | 0x0F<<7 | 0x4F, + 31284 - 19968: jis0212<<14 | 0x30<<7 | 0x19, + 31285 - 19968: jis0212<<14 | 0x30<<7 | 0x1A, + 31287 - 19968: jis0208<<14 | 0x42<<7 | 0x2C, + 31288 - 19968: jis0212<<14 | 0x30<<7 | 0x1B, + 31289 - 19968: jis0212<<14 | 0x30<<7 | 0x1C, + 31290 - 19968: jis0212<<14 | 0x30<<7 | 0x1D, + 31291 - 19968: jis0208<<14 | 0x42<<7 | 0x2A, + 31292 - 19968: jis0208<<14 | 0x11<<7 | 0x33, + 31293 - 19968: jis0208<<14 | 0x16<<7 | 0x2D, + 31294 - 19968: jis0208<<14 | 0x42<<7 | 0x2B, + 31295 - 19968: jis0208<<14 | 0x18<<7 | 0x25, + 31296 - 19968: jis0208<<14 | 0x18<<7 | 0x51, + 31298 - 19968: jis0208<<14 | 0x29<<7 | 0x45, + 31299 - 19968: jis0208<<14 | 0x42<<7 | 0x2D, + 31300 - 19968: jis0212<<14 | 0x30<<7 | 0x1E, + 31301 - 19968: jis0212<<14 | 0x30<<7 | 0x1F, + 31302 - 19968: jis0208<<14 | 0x2A<<7 | 0x33, + 31303 - 19968: jis0212<<14 | 0x30<<7 | 0x20, + 31304 - 19968: jis0212<<14 | 0x30<<7 | 0x21, + 31305 - 19968: jis0208<<14 | 0x42<<7 | 0x2F, + 31308 - 19968: jis0212<<14 | 0x30<<7 | 0x22, + 31309 - 19968: jis0208<<14 | 0x1F<<7 | 0x30, + 31310 - 19968: jis0208<<14 | 0x10<<7 | 0x2E, + 31311 - 19968: jis0208<<14 | 0x11<<7 | 0x19, + 31312 - 19968: jis0208<<14 | 0x0F<<7 | 0x0B, + 31317 - 19968: jis0212<<14 | 0x30<<7 | 0x23, + 31318 - 19968: jis0212<<14 | 0x30<<7 | 0x24, + 31319 - 19968: jis0208<<14 | 0x42<<7 | 0x2E, + 31321 - 19968: jis0212<<14 | 0x30<<7 | 0x25, + 31324 - 19968: jis0212<<14 | 0x30<<7 | 0x26, + 31325 - 19968: jis0212<<14 | 0x30<<7 | 0x27, + 31327 - 19968: jis0212<<14 | 0x30<<7 | 0x28, + 31328 - 19968: jis0212<<14 | 0x30<<7 | 0x29, + 31329 - 19968: jis0208<<14 | 0x42<<7 | 0x30, + 31330 - 19968: jis0208<<14 | 0x42<<7 | 0x31, + 31331 - 19968: jis0208<<14 | 0x1D<<7 | 0x56, + 31333 - 19968: jis0212<<14 | 0x30<<7 | 0x2A, + 31335 - 19968: jis0212<<14 | 0x30<<7 | 0x2B, + 31337 - 19968: jis0208<<14 | 0x42<<7 | 0x32, + 31338 - 19968: jis0212<<14 | 0x30<<7 | 0x2C, + 31339 - 19968: jis0208<<14 | 0x12<<7 | 0x2E, + 31341 - 19968: jis0212<<14 | 0x30<<7 | 0x2D, + 31344 - 19968: jis0208<<14 | 0x42<<7 | 0x34, + 31348 - 19968: jis0208<<14 | 0x16<<7 | 0x49, + 31349 - 19968: jis0212<<14 | 0x30<<7 | 0x2E, + 31350 - 19968: jis0208<<14 | 0x14<<7 | 0x45, + 31352 - 19968: jis0212<<14 | 0x30<<7 | 0x2F, + 31353 - 19968: jis0208<<14 | 0x42<<7 | 0x35, + 31354 - 19968: jis0208<<14 | 0x15<<7 | 0x54, + 31357 - 19968: jis0208<<14 | 0x42<<7 | 0x36, + 31358 - 19968: jis0212<<14 | 0x30<<7 | 0x30, + 31359 - 19968: jis0208<<14 | 0x1F<<7 | 0x5B, + 31360 - 19968: jis0212<<14 | 0x30<<7 | 0x31, + 31361 - 19968: jis0208<<14 | 0x25<<7 | 0x2C, + 31362 - 19968: jis0212<<14 | 0x30<<7 | 0x32, + 31363 - 19968: jis0208<<14 | 0x1F<<7 | 0x3F, + 31364 - 19968: jis0208<<14 | 0x19<<7 | 0x54, + 31365 - 19968: jis0212<<14 | 0x30<<7 | 0x33, + 31366 - 19968: jis0212<<14 | 0x30<<7 | 0x34, + 31368 - 19968: jis0208<<14 | 0x42<<7 | 0x37, + 31370 - 19968: jis0212<<14 | 0x30<<7 | 0x35, + 31371 - 19968: jis0212<<14 | 0x30<<7 | 0x36, + 31376 - 19968: jis0212<<14 | 0x30<<7 | 0x37, + 31377 - 19968: jis0212<<14 | 0x30<<7 | 0x38, + 31378 - 19968: jis0208<<14 | 0x22<<7 | 0x41, + 31379 - 19968: jis0208<<14 | 0x20<<7 | 0x4A, + 31380 - 19968: jis0212<<14 | 0x30<<7 | 0x39, + 31381 - 19968: jis0208<<14 | 0x42<<7 | 0x39, + 31382 - 19968: jis0208<<14 | 0x42<<7 | 0x3B, + 31383 - 19968: jis0208<<14 | 0x42<<7 | 0x38, + 31384 - 19968: jis0208<<14 | 0x42<<7 | 0x3A, + 31390 - 19968: jis0212<<14 | 0x30<<7 | 0x3A, + 31391 - 19968: jis0208<<14 | 0x16<<7 | 0x01, + 31392 - 19968: jis0212<<14 | 0x30<<7 | 0x3B, + 31395 - 19968: jis0212<<14 | 0x30<<7 | 0x3C, + 31401 - 19968: jis0208<<14 | 0x42<<7 | 0x3C, + 31402 - 19968: jis0208<<14 | 0x16<<7 | 0x05, + 31404 - 19968: jis0212<<14 | 0x30<<7 | 0x3D, + 31406 - 19968: jis0208<<14 | 0x14<<7 | 0x46, + 31407 - 19968: jis0208<<14 | 0x2C<<7 | 0x31, + 31408 - 19968: jis0208<<14 | 0x42<<7 | 0x3E, + 31411 - 19968: jis0212<<14 | 0x30<<7 | 0x3E, + 31413 - 19968: jis0212<<14 | 0x30<<7 | 0x3F, + 31414 - 19968: jis0208<<14 | 0x42<<7 | 0x3F, + 31417 - 19968: jis0212<<14 | 0x30<<7 | 0x40, + 31418 - 19968: jis0208<<14 | 0x10<<7 | 0x0D, + 31419 - 19968: jis0212<<14 | 0x30<<7 | 0x41, + 31420 - 19968: jis0212<<14 | 0x30<<7 | 0x42, + 31423 - 19968: jis0208<<14 | 0x42<<7 | 0x42, + 31427 - 19968: jis0208<<14 | 0x12<<7 | 0x55, + 31428 - 19968: jis0208<<14 | 0x42<<7 | 0x41, + 31429 - 19968: jis0208<<14 | 0x42<<7 | 0x40, + 31430 - 19968: jis0212<<14 | 0x30<<7 | 0x43, + 31431 - 19968: jis0208<<14 | 0x42<<7 | 0x44, + 31432 - 19968: jis0208<<14 | 0x42<<7 | 0x3D, + 31433 - 19968: jis0212<<14 | 0x30<<7 | 0x44, + 31434 - 19968: jis0208<<14 | 0x42<<7 | 0x45, + 31435 - 19968: jis0208<<14 | 0x2D<<7 | 0x08, + 31436 - 19968: jis0212<<14 | 0x30<<7 | 0x45, + 31437 - 19968: jis0208<<14 | 0x42<<7 | 0x46, + 31438 - 19968: jis0212<<14 | 0x30<<7 | 0x46, + 31439 - 19968: jis0208<<14 | 0x42<<7 | 0x47, + 31441 - 19968: jis0208<<14 | 0x5A<<7 | 0x27, + 31442 - 19968: jis0208<<14 | 0x33<<7 | 0x53, + 31443 - 19968: jis0208<<14 | 0x42<<7 | 0x49, + 31445 - 19968: jis0208<<14 | 0x42<<7 | 0x48, + 31449 - 19968: jis0208<<14 | 0x42<<7 | 0x4A, + 31450 - 19968: jis0208<<14 | 0x42<<7 | 0x4B, + 31451 - 19968: jis0212<<14 | 0x30<<7 | 0x48, + 31452 - 19968: jis0208<<14 | 0x2D<<7 | 0x14, + 31453 - 19968: jis0208<<14 | 0x42<<7 | 0x4C, + 31455 - 19968: jis0208<<14 | 0x4F<<7 | 0x4E, + 31456 - 19968: jis0208<<14 | 0x1D<<7 | 0x2E, + 31457 - 19968: jis0208<<14 | 0x42<<7 | 0x4D, + 31458 - 19968: jis0208<<14 | 0x42<<7 | 0x4E, + 31459 - 19968: jis0208<<14 | 0x1C<<7 | 0x36, + 31461 - 19968: jis0208<<14 | 0x25<<7 | 0x17, + 31462 - 19968: jis0208<<14 | 0x42<<7 | 0x4F, + 31463 - 19968: jis0208<<14 | 0x5A<<7 | 0x28, + 31464 - 19968: jis0212<<14 | 0x30<<7 | 0x49, + 31465 - 19968: jis0212<<14 | 0x30<<7 | 0x4A, + 31466 - 19968: jis0208<<14 | 0x22<<7 | 0x07, + 31467 - 19968: jis0208<<14 | 0x5A<<7 | 0x2A, + 31468 - 19968: jis0212<<14 | 0x30<<7 | 0x4C, + 31469 - 19968: jis0208<<14 | 0x42<<7 | 0x50, + 31471 - 19968: jis0208<<14 | 0x22<<7 | 0x1B, + 31472 - 19968: jis0208<<14 | 0x42<<7 | 0x51, + 31473 - 19968: jis0212<<14 | 0x30<<7 | 0x4D, + 31476 - 19968: jis0212<<14 | 0x30<<7 | 0x4E, + 31478 - 19968: jis0208<<14 | 0x15<<7 | 0x04, + 31480 - 19968: jis0208<<14 | 0x30<<7 | 0x1E, + 31481 - 19968: jis0208<<14 | 0x22<<7 | 0x3C, + 31482 - 19968: jis0208<<14 | 0x1B<<7 | 0x12, + 31483 - 19968: jis0212<<14 | 0x30<<7 | 0x4F, + 31485 - 19968: jis0212<<14 | 0x30<<7 | 0x50, + 31486 - 19968: jis0212<<14 | 0x30<<7 | 0x51, + 31487 - 19968: jis0208<<14 | 0x13<<7 | 0x27, + 31490 - 19968: jis0208<<14 | 0x42<<7 | 0x52, + 31492 - 19968: jis0208<<14 | 0x43<<7 | 0x01, + 31494 - 19968: jis0208<<14 | 0x42<<7 | 0x55, + 31495 - 19968: jis0212<<14 | 0x30<<7 | 0x52, + 31496 - 19968: jis0208<<14 | 0x14<<7 | 0x47, + 31498 - 19968: jis0208<<14 | 0x42<<7 | 0x54, + 31499 - 19968: jis0208<<14 | 0x43<<7 | 0x03, + 31503 - 19968: jis0208<<14 | 0x42<<7 | 0x53, + 31505 - 19968: jis0208<<14 | 0x1D<<7 | 0x2F, + 31508 - 19968: jis0212<<14 | 0x30<<7 | 0x53, + 31512 - 19968: jis0208<<14 | 0x42<<7 | 0x57, + 31513 - 19968: jis0208<<14 | 0x42<<7 | 0x58, + 31515 - 19968: jis0208<<14 | 0x24<<7 | 0x0A, + 31518 - 19968: jis0208<<14 | 0x42<<7 | 0x59, + 31519 - 19968: jis0212<<14 | 0x30<<7 | 0x54, + 31520 - 19968: jis0208<<14 | 0x12<<7 | 0x3D, + 31523 - 19968: jis0212<<14 | 0x30<<7 | 0x55, + 31525 - 19968: jis0208<<14 | 0x1E<<7 | 0x39, + 31526 - 19968: jis0208<<14 | 0x28<<7 | 0x43, + 31527 - 19968: jis0212<<14 | 0x30<<7 | 0x56, + 31528 - 19968: jis0208<<14 | 0x42<<7 | 0x5B, + 31529 - 19968: jis0212<<14 | 0x30<<7 | 0x57, + 31530 - 19968: jis0212<<14 | 0x30<<7 | 0x58, + 31531 - 19968: jis0212<<14 | 0x30<<7 | 0x59, + 31532 - 19968: jis0208<<14 | 0x21<<7 | 0x47, + 31533 - 19968: jis0212<<14 | 0x30<<7 | 0x5A, + 31534 - 19968: jis0212<<14 | 0x30<<7 | 0x5B, + 31535 - 19968: jis0212<<14 | 0x30<<7 | 0x5C, + 31536 - 19968: jis0212<<14 | 0x30<<7 | 0x5D, + 31537 - 19968: jis0212<<14 | 0x31<<7 | 0x00, + 31539 - 19968: jis0208<<14 | 0x42<<7 | 0x56, + 31540 - 19968: jis0212<<14 | 0x31<<7 | 0x01, + 31541 - 19968: jis0208<<14 | 0x42<<7 | 0x5A, + 31542 - 19968: jis0208<<14 | 0x42<<7 | 0x5C, + 31545 - 19968: jis0208<<14 | 0x19<<7 | 0x5A, + 31549 - 19968: jis0212<<14 | 0x31<<7 | 0x02, + 31551 - 19968: jis0212<<14 | 0x31<<7 | 0x03, + 31552 - 19968: jis0212<<14 | 0x31<<7 | 0x04, + 31553 - 19968: jis0212<<14 | 0x31<<7 | 0x05, + 31557 - 19968: jis0208<<14 | 0x43<<7 | 0x05, + 31558 - 19968: jis0208<<14 | 0x28<<7 | 0x0D, + 31559 - 19968: jis0212<<14 | 0x31<<7 | 0x06, + 31560 - 19968: jis0208<<14 | 0x27<<7 | 0x05, + 31561 - 19968: jis0208<<14 | 0x24<<7 | 0x58, + 31563 - 19968: jis0208<<14 | 0x15<<7 | 0x39, + 31564 - 19968: jis0208<<14 | 0x43<<7 | 0x04, + 31565 - 19968: jis0208<<14 | 0x43<<7 | 0x02, + 31566 - 19968: jis0212<<14 | 0x31<<7 | 0x07, + 31567 - 19968: jis0208<<14 | 0x27<<7 | 0x14, + 31568 - 19968: jis0208<<14 | 0x42<<7 | 0x5D, + 31569 - 19968: jis0208<<14 | 0x22<<7 | 0x3D, + 31570 - 19968: jis0208<<14 | 0x24<<7 | 0x5A, + 31572 - 19968: jis0208<<14 | 0x24<<7 | 0x59, + 31573 - 19968: jis0212<<14 | 0x31<<7 | 0x08, + 31574 - 19968: jis0208<<14 | 0x19<<7 | 0x55, + 31581 - 19968: jis0208<<14 | 0x43<<7 | 0x17, + 31584 - 19968: jis0212<<14 | 0x31<<7 | 0x09, + 31588 - 19968: jis0212<<14 | 0x31<<7 | 0x0A, + 31589 - 19968: jis0208<<14 | 0x43<<7 | 0x07, + 31590 - 19968: jis0212<<14 | 0x31<<7 | 0x0B, + 31591 - 19968: jis0208<<14 | 0x43<<7 | 0x09, + 31593 - 19968: jis0212<<14 | 0x31<<7 | 0x0C, + 31594 - 19968: jis0212<<14 | 0x31<<7 | 0x0D, + 31596 - 19968: jis0208<<14 | 0x43<<7 | 0x0C, + 31597 - 19968: jis0212<<14 | 0x31<<7 | 0x0E, + 31598 - 19968: jis0208<<14 | 0x43<<7 | 0x0D, + 31599 - 19968: jis0212<<14 | 0x31<<7 | 0x0F, + 31600 - 19968: jis0208<<14 | 0x43<<7 | 0x0A, + 31601 - 19968: jis0208<<14 | 0x43<<7 | 0x0B, + 31602 - 19968: jis0212<<14 | 0x31<<7 | 0x10, + 31603 - 19968: jis0212<<14 | 0x31<<7 | 0x11, + 31604 - 19968: jis0208<<14 | 0x43<<7 | 0x08, + 31605 - 19968: jis0208<<14 | 0x43<<7 | 0x06, + 31607 - 19968: jis0212<<14 | 0x31<<7 | 0x12, + 31610 - 19968: jis0208<<14 | 0x43<<7 | 0x00, + 31620 - 19968: jis0212<<14 | 0x31<<7 | 0x13, + 31622 - 19968: jis0208<<14 | 0x29<<7 | 0x2E, + 31623 - 19968: jis0208<<14 | 0x11<<7 | 0x34, + 31625 - 19968: jis0212<<14 | 0x31<<7 | 0x14, + 31627 - 19968: jis0208<<14 | 0x43<<7 | 0x14, + 31629 - 19968: jis0208<<14 | 0x43<<7 | 0x11, + 31630 - 19968: jis0212<<14 | 0x31<<7 | 0x15, + 31631 - 19968: jis0208<<14 | 0x43<<7 | 0x16, + 31632 - 19968: jis0212<<14 | 0x31<<7 | 0x16, + 31633 - 19968: jis0212<<14 | 0x31<<7 | 0x17, + 31634 - 19968: jis0208<<14 | 0x43<<7 | 0x15, + 31636 - 19968: jis0208<<14 | 0x26<<7 | 0x52, + 31637 - 19968: jis0208<<14 | 0x2B<<7 | 0x06, + 31638 - 19968: jis0212<<14 | 0x31<<7 | 0x18, + 31639 - 19968: jis0208<<14 | 0x1A<<7 | 0x1A, + 31640 - 19968: jis0208<<14 | 0x43<<7 | 0x0F, + 31641 - 19968: jis0208<<14 | 0x43<<7 | 0x18, + 31642 - 19968: jis0208<<14 | 0x43<<7 | 0x13, + 31643 - 19968: jis0212<<14 | 0x31<<7 | 0x19, + 31644 - 19968: jis0208<<14 | 0x43<<7 | 0x12, + 31645 - 19968: jis0208<<14 | 0x43<<7 | 0x0E, + 31646 - 19968: jis0208<<14 | 0x5A<<7 | 0x2B, + 31647 - 19968: jis0208<<14 | 0x43<<7 | 0x10, + 31648 - 19968: jis0212<<14 | 0x31<<7 | 0x1B, + 31649 - 19968: jis0208<<14 | 0x13<<7 | 0x28, + 31653 - 19968: jis0212<<14 | 0x31<<7 | 0x1C, + 31658 - 19968: jis0208<<14 | 0x22<<7 | 0x1C, + 31660 - 19968: jis0212<<14 | 0x31<<7 | 0x1D, + 31661 - 19968: jis0208<<14 | 0x1F<<7 | 0x5C, + 31663 - 19968: jis0212<<14 | 0x31<<7 | 0x1E, + 31664 - 19968: jis0212<<14 | 0x31<<7 | 0x1F, + 31665 - 19968: jis0208<<14 | 0x27<<7 | 0x01, + 31666 - 19968: jis0212<<14 | 0x31<<7 | 0x20, + 31668 - 19968: jis0208<<14 | 0x43<<7 | 0x1D, + 31669 - 19968: jis0212<<14 | 0x31<<7 | 0x21, + 31670 - 19968: jis0212<<14 | 0x31<<7 | 0x22, + 31672 - 19968: jis0208<<14 | 0x27<<7 | 0x03, + 31674 - 19968: jis0212<<14 | 0x31<<7 | 0x23, + 31675 - 19968: jis0212<<14 | 0x31<<7 | 0x24, + 31676 - 19968: jis0212<<14 | 0x31<<7 | 0x25, + 31677 - 19968: jis0212<<14 | 0x31<<7 | 0x26, + 31680 - 19968: jis0208<<14 | 0x1F<<7 | 0x40, + 31681 - 19968: jis0208<<14 | 0x43<<7 | 0x1A, + 31682 - 19968: jis0212<<14 | 0x31<<7 | 0x27, + 31684 - 19968: jis0208<<14 | 0x27<<7 | 0x2E, + 31685 - 19968: jis0212<<14 | 0x31<<7 | 0x28, + 31686 - 19968: jis0208<<14 | 0x43<<7 | 0x1E, + 31687 - 19968: jis0208<<14 | 0x29<<7 | 0x32, + 31688 - 19968: jis0212<<14 | 0x31<<7 | 0x29, + 31689 - 19968: jis0208<<14 | 0x22<<7 | 0x3A, + 31690 - 19968: jis0212<<14 | 0x31<<7 | 0x2A, + 31691 - 19968: jis0208<<14 | 0x43<<7 | 0x19, + 31692 - 19968: jis0208<<14 | 0x43<<7 | 0x1B, + 31695 - 19968: jis0208<<14 | 0x43<<7 | 0x1C, + 31700 - 19968: jis0212<<14 | 0x31<<7 | 0x2B, + 31702 - 19968: jis0212<<14 | 0x31<<7 | 0x2C, + 31703 - 19968: jis0212<<14 | 0x31<<7 | 0x2D, + 31705 - 19968: jis0212<<14 | 0x31<<7 | 0x2E, + 31706 - 19968: jis0212<<14 | 0x31<<7 | 0x2F, + 31707 - 19968: jis0212<<14 | 0x31<<7 | 0x30, + 31709 - 19968: jis0208<<14 | 0x43<<7 | 0x1F, + 31712 - 19968: jis0208<<14 | 0x1B<<7 | 0x23, + 31716 - 19968: jis0208<<14 | 0x25<<7 | 0x25, + 31717 - 19968: jis0208<<14 | 0x43<<7 | 0x24, + 31718 - 19968: jis0208<<14 | 0x43<<7 | 0x23, + 31720 - 19968: jis0212<<14 | 0x31<<7 | 0x31, + 31721 - 19968: jis0208<<14 | 0x43<<7 | 0x20, + 31722 - 19968: jis0212<<14 | 0x31<<7 | 0x32, + 31725 - 19968: jis0208<<14 | 0x2E<<7 | 0x15, + 31730 - 19968: jis0212<<14 | 0x31<<7 | 0x33, + 31731 - 19968: jis0208<<14 | 0x43<<7 | 0x29, + 31732 - 19968: jis0212<<14 | 0x31<<7 | 0x34, + 31733 - 19968: jis0212<<14 | 0x31<<7 | 0x35, + 31734 - 19968: jis0208<<14 | 0x43<<7 | 0x2D, + 31735 - 19968: jis0208<<14 | 0x43<<7 | 0x2A, + 31736 - 19968: jis0212<<14 | 0x31<<7 | 0x36, + 31737 - 19968: jis0212<<14 | 0x31<<7 | 0x37, + 31738 - 19968: jis0212<<14 | 0x31<<7 | 0x38, + 31740 - 19968: jis0212<<14 | 0x31<<7 | 0x39, + 31742 - 19968: jis0212<<14 | 0x31<<7 | 0x3A, + 31744 - 19968: jis0208<<14 | 0x43<<7 | 0x26, + 31745 - 19968: jis0212<<14 | 0x31<<7 | 0x3B, + 31746 - 19968: jis0212<<14 | 0x31<<7 | 0x3C, + 31747 - 19968: jis0212<<14 | 0x31<<7 | 0x3D, + 31748 - 19968: jis0212<<14 | 0x31<<7 | 0x3E, + 31750 - 19968: jis0212<<14 | 0x31<<7 | 0x3F, + 31751 - 19968: jis0208<<14 | 0x43<<7 | 0x27, + 31753 - 19968: jis0212<<14 | 0x31<<7 | 0x40, + 31755 - 19968: jis0212<<14 | 0x31<<7 | 0x41, + 31756 - 19968: jis0212<<14 | 0x31<<7 | 0x42, + 31757 - 19968: jis0208<<14 | 0x43<<7 | 0x2C, + 31758 - 19968: jis0212<<14 | 0x31<<7 | 0x43, + 31759 - 19968: jis0212<<14 | 0x31<<7 | 0x44, + 31761 - 19968: jis0208<<14 | 0x43<<7 | 0x21, + 31762 - 19968: jis0208<<14 | 0x31<<7 | 0x34, + 31763 - 19968: jis0208<<14 | 0x43<<7 | 0x28, + 31764 - 19968: jis0208<<14 | 0x43<<7 | 0x22, + 31767 - 19968: jis0208<<14 | 0x43<<7 | 0x2B, + 31769 - 19968: jis0212<<14 | 0x31<<7 | 0x45, + 31771 - 19968: jis0212<<14 | 0x31<<7 | 0x46, + 31775 - 19968: jis0208<<14 | 0x43<<7 | 0x31, + 31776 - 19968: jis0212<<14 | 0x31<<7 | 0x47, + 31777 - 19968: jis0208<<14 | 0x13<<7 | 0x29, + 31779 - 19968: jis0208<<14 | 0x43<<7 | 0x2E, + 31781 - 19968: jis0212<<14 | 0x31<<7 | 0x48, + 31782 - 19968: jis0212<<14 | 0x31<<7 | 0x49, + 31783 - 19968: jis0208<<14 | 0x43<<7 | 0x2F, + 31784 - 19968: jis0212<<14 | 0x31<<7 | 0x4A, + 31786 - 19968: jis0208<<14 | 0x43<<7 | 0x30, + 31787 - 19968: jis0208<<14 | 0x43<<7 | 0x33, + 31788 - 19968: jis0212<<14 | 0x31<<7 | 0x4B, + 31793 - 19968: jis0212<<14 | 0x31<<7 | 0x4C, + 31795 - 19968: jis0212<<14 | 0x31<<7 | 0x4D, + 31796 - 19968: jis0212<<14 | 0x31<<7 | 0x4E, + 31798 - 19968: jis0212<<14 | 0x31<<7 | 0x4F, + 31799 - 19968: jis0208<<14 | 0x43<<7 | 0x32, + 31800 - 19968: jis0208<<14 | 0x27<<7 | 0x55, + 31801 - 19968: jis0212<<14 | 0x31<<7 | 0x50, + 31802 - 19968: jis0212<<14 | 0x31<<7 | 0x51, + 31805 - 19968: jis0208<<14 | 0x43<<7 | 0x34, + 31806 - 19968: jis0208<<14 | 0x2D<<7 | 0x5B, + 31807 - 19968: jis0208<<14 | 0x29<<7 | 0x4C, + 31808 - 19968: jis0208<<14 | 0x43<<7 | 0x39, + 31811 - 19968: jis0208<<14 | 0x43<<7 | 0x36, + 31814 - 19968: jis0212<<14 | 0x31<<7 | 0x52, + 31818 - 19968: jis0212<<14 | 0x31<<7 | 0x53, + 31820 - 19968: jis0208<<14 | 0x43<<7 | 0x35, + 31821 - 19968: jis0208<<14 | 0x1F<<7 | 0x31, + 31823 - 19968: jis0208<<14 | 0x43<<7 | 0x38, + 31824 - 19968: jis0208<<14 | 0x43<<7 | 0x3A, + 31825 - 19968: jis0212<<14 | 0x31<<7 | 0x55, + 31826 - 19968: jis0212<<14 | 0x31<<7 | 0x56, + 31827 - 19968: jis0212<<14 | 0x31<<7 | 0x57, + 31828 - 19968: jis0208<<14 | 0x43<<7 | 0x37, + 31829 - 19968: jis0212<<14 | 0x31<<7 | 0x54, + 31830 - 19968: jis0208<<14 | 0x43<<7 | 0x3E, + 31832 - 19968: jis0208<<14 | 0x43<<7 | 0x3B, + 31833 - 19968: jis0212<<14 | 0x31<<7 | 0x58, + 31834 - 19968: jis0212<<14 | 0x31<<7 | 0x59, + 31835 - 19968: jis0212<<14 | 0x31<<7 | 0x5A, + 31836 - 19968: jis0212<<14 | 0x31<<7 | 0x5B, + 31837 - 19968: jis0212<<14 | 0x31<<7 | 0x5C, + 31838 - 19968: jis0212<<14 | 0x31<<7 | 0x5D, + 31839 - 19968: jis0208<<14 | 0x43<<7 | 0x3C, + 31840 - 19968: jis0208<<14 | 0x43<<7 | 0x25, + 31841 - 19968: jis0212<<14 | 0x32<<7 | 0x00, + 31843 - 19968: jis0212<<14 | 0x32<<7 | 0x01, + 31844 - 19968: jis0208<<14 | 0x43<<7 | 0x3D, + 31845 - 19968: jis0208<<14 | 0x43<<7 | 0x3F, + 31847 - 19968: jis0212<<14 | 0x32<<7 | 0x02, + 31849 - 19968: jis0212<<14 | 0x32<<7 | 0x03, + 31852 - 19968: jis0208<<14 | 0x43<<7 | 0x40, + 31853 - 19968: jis0212<<14 | 0x32<<7 | 0x04, + 31854 - 19968: jis0212<<14 | 0x32<<7 | 0x05, + 31856 - 19968: jis0212<<14 | 0x32<<7 | 0x06, + 31858 - 19968: jis0212<<14 | 0x32<<7 | 0x07, + 31859 - 19968: jis0208<<14 | 0x29<<7 | 0x25, + 31861 - 19968: jis0208<<14 | 0x43<<7 | 0x41, + 31865 - 19968: jis0212<<14 | 0x32<<7 | 0x08, + 31868 - 19968: jis0212<<14 | 0x32<<7 | 0x09, + 31869 - 19968: jis0212<<14 | 0x32<<7 | 0x0A, + 31870 - 19968: jis0208<<14 | 0x2B<<7 | 0x41, + 31873 - 19968: jis0208<<14 | 0x15<<7 | 0x2D, + 31874 - 19968: jis0208<<14 | 0x16<<7 | 0x08, + 31875 - 19968: jis0208<<14 | 0x43<<7 | 0x42, + 31878 - 19968: jis0212<<14 | 0x32<<7 | 0x0B, + 31879 - 19968: jis0212<<14 | 0x32<<7 | 0x0C, + 31881 - 19968: jis0208<<14 | 0x29<<7 | 0x13, + 31883 - 19968: jis0208<<14 | 0x1E<<7 | 0x47, + 31885 - 19968: jis0208<<14 | 0x2B<<7 | 0x0F, + 31887 - 19968: jis0212<<14 | 0x32<<7 | 0x0D, + 31888 - 19968: jis0208<<14 | 0x43<<7 | 0x43, + 31890 - 19968: jis0208<<14 | 0x2D<<7 | 0x12, + 31892 - 19968: jis0212<<14 | 0x32<<7 | 0x0E, + 31893 - 19968: jis0208<<14 | 0x26<<7 | 0x53, + 31895 - 19968: jis0208<<14 | 0x20<<7 | 0x25, + 31896 - 19968: jis0208<<14 | 0x26<<7 | 0x13, + 31899 - 19968: jis0208<<14 | 0x1C<<7 | 0x2C, + 31902 - 19968: jis0212<<14 | 0x32<<7 | 0x0F, + 31903 - 19968: jis0208<<14 | 0x0F<<7 | 0x1F, + 31904 - 19968: jis0212<<14 | 0x32<<7 | 0x10, + 31905 - 19968: jis0208<<14 | 0x43<<7 | 0x48, + 31906 - 19968: jis0208<<14 | 0x43<<7 | 0x46, + 31908 - 19968: jis0208<<14 | 0x43<<7 | 0x44, + 31909 - 19968: jis0208<<14 | 0x13<<7 | 0x00, + 31910 - 19968: jis0212<<14 | 0x32<<7 | 0x11, + 31911 - 19968: jis0208<<14 | 0x1D<<7 | 0x30, + 31912 - 19968: jis0208<<14 | 0x43<<7 | 0x49, + 31915 - 19968: jis0208<<14 | 0x43<<7 | 0x47, + 31917 - 19968: jis0208<<14 | 0x43<<7 | 0x45, + 31918 - 19968: jis0208<<14 | 0x43<<7 | 0x4D, + 31920 - 19968: jis0212<<14 | 0x32<<7 | 0x12, + 31921 - 19968: jis0208<<14 | 0x43<<7 | 0x4C, + 31922 - 19968: jis0208<<14 | 0x43<<7 | 0x4B, + 31923 - 19968: jis0208<<14 | 0x43<<7 | 0x4A, + 31926 - 19968: jis0212<<14 | 0x32<<7 | 0x13, + 31927 - 19968: jis0212<<14 | 0x32<<7 | 0x14, + 31929 - 19968: jis0208<<14 | 0x43<<7 | 0x4E, + 31930 - 19968: jis0212<<14 | 0x32<<7 | 0x15, + 31931 - 19968: jis0212<<14 | 0x32<<7 | 0x16, + 31932 - 19968: jis0212<<14 | 0x32<<7 | 0x17, + 31933 - 19968: jis0208<<14 | 0x43<<7 | 0x4F, + 31934 - 19968: jis0208<<14 | 0x1F<<7 | 0x19, + 31935 - 19968: jis0212<<14 | 0x32<<7 | 0x18, + 31936 - 19968: jis0208<<14 | 0x43<<7 | 0x50, + 31938 - 19968: jis0208<<14 | 0x43<<7 | 0x52, + 31940 - 19968: jis0212<<14 | 0x32<<7 | 0x19, + 31941 - 19968: jis0208<<14 | 0x43<<7 | 0x51, + 31943 - 19968: jis0212<<14 | 0x32<<7 | 0x1A, + 31944 - 19968: jis0212<<14 | 0x32<<7 | 0x1B, + 31945 - 19968: jis0212<<14 | 0x32<<7 | 0x1C, + 31946 - 19968: jis0208<<14 | 0x17<<7 | 0x31, + 31949 - 19968: jis0212<<14 | 0x32<<7 | 0x1D, + 31950 - 19968: jis0208<<14 | 0x20<<7 | 0x17, + 31951 - 19968: jis0212<<14 | 0x32<<7 | 0x1E, + 31954 - 19968: jis0208<<14 | 0x43<<7 | 0x54, + 31955 - 19968: jis0212<<14 | 0x32<<7 | 0x1F, + 31956 - 19968: jis0212<<14 | 0x32<<7 | 0x20, + 31957 - 19968: jis0212<<14 | 0x32<<7 | 0x21, + 31958 - 19968: jis0208<<14 | 0x24<<7 | 0x5B, + 31959 - 19968: jis0212<<14 | 0x32<<7 | 0x22, + 31960 - 19968: jis0208<<14 | 0x43<<7 | 0x53, + 31961 - 19968: jis0212<<14 | 0x32<<7 | 0x23, + 31962 - 19968: jis0212<<14 | 0x32<<7 | 0x24, + 31964 - 19968: jis0208<<14 | 0x43<<7 | 0x55, + 31965 - 19968: jis0212<<14 | 0x32<<7 | 0x25, + 31966 - 19968: jis0208<<14 | 0x29<<7 | 0x14, + 31967 - 19968: jis0208<<14 | 0x20<<7 | 0x4B, + 31968 - 19968: jis0208<<14 | 0x18<<7 | 0x26, + 31970 - 19968: jis0208<<14 | 0x43<<7 | 0x56, + 31974 - 19968: jis0212<<14 | 0x32<<7 | 0x26, + 31975 - 19968: jis0208<<14 | 0x2D<<7 | 0x27, + 31977 - 19968: jis0212<<14 | 0x32<<7 | 0x27, + 31979 - 19968: jis0212<<14 | 0x32<<7 | 0x28, + 31983 - 19968: jis0208<<14 | 0x43<<7 | 0x58, + 31986 - 19968: jis0208<<14 | 0x43<<7 | 0x59, + 31988 - 19968: jis0208<<14 | 0x43<<7 | 0x5A, + 31989 - 19968: jis0212<<14 | 0x32<<7 | 0x29, + 31990 - 19968: jis0208<<14 | 0x43<<7 | 0x5B, + 31992 - 19968: jis0208<<14 | 0x1A<<7 | 0x44, + 31994 - 19968: jis0208<<14 | 0x43<<7 | 0x5C, + 31995 - 19968: jis0208<<14 | 0x16<<7 | 0x2E, + 31998 - 19968: jis0208<<14 | 0x14<<7 | 0x49, + 32000 - 19968: jis0208<<14 | 0x14<<7 | 0x09, + 32002 - 19968: jis0208<<14 | 0x44<<7 | 0x00, + 32003 - 19968: jis0212<<14 | 0x32<<7 | 0x2A, + 32004 - 19968: jis0208<<14 | 0x2B<<7 | 0x52, + 32005 - 19968: jis0208<<14 | 0x18<<7 | 0x27, + 32006 - 19968: jis0208<<14 | 0x43<<7 | 0x5D, + 32007 - 19968: jis0212<<14 | 0x32<<7 | 0x2B, + 32008 - 19968: jis0212<<14 | 0x32<<7 | 0x2C, + 32009 - 19968: jis0212<<14 | 0x32<<7 | 0x2D, + 32010 - 19968: jis0208<<14 | 0x44<<7 | 0x03, + 32011 - 19968: jis0208<<14 | 0x2B<<7 | 0x45, + 32013 - 19968: jis0208<<14 | 0x26<<7 | 0x1B, + 32015 - 19968: jis0212<<14 | 0x32<<7 | 0x2E, + 32016 - 19968: jis0208<<14 | 0x28<<7 | 0x12, + 32017 - 19968: jis0212<<14 | 0x32<<7 | 0x2F, + 32018 - 19968: jis0212<<14 | 0x32<<7 | 0x30, + 32019 - 19968: jis0212<<14 | 0x32<<7 | 0x31, + 32020 - 19968: jis0208<<14 | 0x1C<<7 | 0x42, + 32021 - 19968: jis0208<<14 | 0x44<<7 | 0x02, + 32022 - 19968: jis0212<<14 | 0x32<<7 | 0x32, + 32023 - 19968: jis0208<<14 | 0x1B<<7 | 0x32, + 32024 - 19968: jis0208<<14 | 0x18<<7 | 0x28, + 32025 - 19968: jis0208<<14 | 0x1A<<7 | 0x45, + 32026 - 19968: jis0208<<14 | 0x14<<7 | 0x48, + 32027 - 19968: jis0208<<14 | 0x29<<7 | 0x15, + 32028 - 19968: jis0208<<14 | 0x44<<7 | 0x01, + 32029 - 19968: jis0212<<14 | 0x32<<7 | 0x33, + 32030 - 19968: jis0212<<14 | 0x32<<7 | 0x34, + 32032 - 19968: jis0208<<14 | 0x20<<7 | 0x26, + 32033 - 19968: jis0208<<14 | 0x2A<<7 | 0x21, + 32034 - 19968: jis0208<<14 | 0x19<<7 | 0x56, + 32035 - 19968: jis0212<<14 | 0x32<<7 | 0x35, + 32038 - 19968: jis0212<<14 | 0x32<<7 | 0x36, + 32042 - 19968: jis0212<<14 | 0x32<<7 | 0x37, + 32043 - 19968: jis0208<<14 | 0x1A<<7 | 0x46, + 32044 - 19968: jis0208<<14 | 0x23<<7 | 0x3C, + 32045 - 19968: jis0212<<14 | 0x32<<7 | 0x38, + 32046 - 19968: jis0208<<14 | 0x44<<7 | 0x06, + 32047 - 19968: jis0208<<14 | 0x2D<<7 | 0x3E, + 32048 - 19968: jis0208<<14 | 0x19<<7 | 0x38, + 32049 - 19968: jis0212<<14 | 0x32<<7 | 0x39, + 32050 - 19968: jis0208<<14 | 0x44<<7 | 0x07, + 32051 - 19968: jis0208<<14 | 0x1E<<7 | 0x21, + 32053 - 19968: jis0208<<14 | 0x44<<7 | 0x09, + 32057 - 19968: jis0208<<14 | 0x1D<<7 | 0x31, + 32058 - 19968: jis0208<<14 | 0x19<<7 | 0x0F, + 32060 - 19968: jis0212<<14 | 0x32<<7 | 0x3A, + 32061 - 19968: jis0212<<14 | 0x32<<7 | 0x3B, + 32062 - 19968: jis0212<<14 | 0x32<<7 | 0x3C, + 32063 - 19968: jis0208<<14 | 0x44<<7 | 0x08, + 32064 - 19968: jis0212<<14 | 0x32<<7 | 0x3D, + 32065 - 19968: jis0212<<14 | 0x32<<7 | 0x3E, + 32066 - 19968: jis0208<<14 | 0x1C<<7 | 0x09, + 32067 - 19968: jis0208<<14 | 0x17<<7 | 0x1D, + 32068 - 19968: jis0208<<14 | 0x20<<7 | 0x27, + 32069 - 19968: jis0208<<14 | 0x44<<7 | 0x04, + 32070 - 19968: jis0208<<14 | 0x44<<7 | 0x0A, + 32071 - 19968: jis0212<<14 | 0x32<<7 | 0x3F, + 32072 - 19968: jis0208<<14 | 0x5A<<7 | 0x2D, + 32075 - 19968: jis0208<<14 | 0x44<<7 | 0x05, + 32076 - 19968: jis0208<<14 | 0x16<<7 | 0x2F, + 32077 - 19968: jis0212<<14 | 0x32<<7 | 0x41, + 32078 - 19968: jis0208<<14 | 0x44<<7 | 0x0D, + 32079 - 19968: jis0208<<14 | 0x44<<7 | 0x11, + 32080 - 19968: jis0208<<14 | 0x16<<7 | 0x4A, + 32081 - 19968: jis0212<<14 | 0x32<<7 | 0x42, + 32083 - 19968: jis0212<<14 | 0x32<<7 | 0x43, + 32086 - 19968: jis0208<<14 | 0x44<<7 | 0x0C, + 32087 - 19968: jis0212<<14 | 0x32<<7 | 0x44, + 32089 - 19968: jis0212<<14 | 0x32<<7 | 0x45, + 32090 - 19968: jis0212<<14 | 0x32<<7 | 0x46, + 32091 - 19968: jis0208<<14 | 0x44<<7 | 0x15, + 32092 - 19968: jis0208<<14 | 0x5A<<7 | 0x2E, + 32093 - 19968: jis0212<<14 | 0x32<<7 | 0x48, + 32094 - 19968: jis0208<<14 | 0x18<<7 | 0x29, + 32097 - 19968: jis0208<<14 | 0x2C<<7 | 0x4C, + 32098 - 19968: jis0208<<14 | 0x0F<<7 | 0x1B, + 32099 - 19968: jis0208<<14 | 0x44<<7 | 0x12, + 32101 - 19968: jis0212<<14 | 0x32<<7 | 0x49, + 32102 - 19968: jis0208<<14 | 0x14<<7 | 0x4A, + 32103 - 19968: jis0212<<14 | 0x32<<7 | 0x4A, + 32104 - 19968: jis0208<<14 | 0x44<<7 | 0x0F, + 32106 - 19968: jis0212<<14 | 0x32<<7 | 0x4B, + 32110 - 19968: jis0208<<14 | 0x44<<7 | 0x10, + 32112 - 19968: jis0212<<14 | 0x32<<7 | 0x4C, + 32113 - 19968: jis0208<<14 | 0x24<<7 | 0x5C, + 32114 - 19968: jis0208<<14 | 0x44<<7 | 0x0E, + 32115 - 19968: jis0208<<14 | 0x44<<7 | 0x0B, + 32117 - 19968: jis0208<<14 | 0x12<<7 | 0x07, + 32118 - 19968: jis0208<<14 | 0x1F<<7 | 0x43, + 32120 - 19968: jis0212<<14 | 0x32<<7 | 0x4D, + 32121 - 19968: jis0208<<14 | 0x17<<7 | 0x07, + 32122 - 19968: jis0212<<14 | 0x32<<7 | 0x4E, + 32123 - 19968: jis0212<<14 | 0x32<<7 | 0x4F, + 32125 - 19968: jis0208<<14 | 0x44<<7 | 0x17, + 32127 - 19968: jis0212<<14 | 0x32<<7 | 0x50, + 32129 - 19968: jis0212<<14 | 0x32<<7 | 0x51, + 32130 - 19968: jis0212<<14 | 0x32<<7 | 0x52, + 32131 - 19968: jis0212<<14 | 0x32<<7 | 0x53, + 32133 - 19968: jis0212<<14 | 0x32<<7 | 0x54, + 32134 - 19968: jis0212<<14 | 0x32<<7 | 0x55, + 32136 - 19968: jis0212<<14 | 0x32<<7 | 0x56, + 32137 - 19968: jis0208<<14 | 0x44<<7 | 0x14, + 32139 - 19968: jis0212<<14 | 0x32<<7 | 0x57, + 32140 - 19968: jis0212<<14 | 0x32<<7 | 0x58, + 32141 - 19968: jis0212<<14 | 0x32<<7 | 0x59, + 32143 - 19968: jis0208<<14 | 0x44<<7 | 0x16, + 32145 - 19968: jis0212<<14 | 0x32<<7 | 0x5A, + 32147 - 19968: jis0208<<14 | 0x44<<7 | 0x13, + 32150 - 19968: jis0212<<14 | 0x32<<7 | 0x5B, + 32151 - 19968: jis0212<<14 | 0x32<<7 | 0x5C, + 32153 - 19968: jis0208<<14 | 0x16<<7 | 0x30, + 32154 - 19968: jis0208<<14 | 0x21<<7 | 0x12, + 32155 - 19968: jis0208<<14 | 0x44<<7 | 0x18, + 32156 - 19968: jis0208<<14 | 0x20<<7 | 0x4D, + 32157 - 19968: jis0212<<14 | 0x32<<7 | 0x5D, + 32158 - 19968: jis0212<<14 | 0x33<<7 | 0x00, + 32159 - 19968: jis0208<<14 | 0x44<<7 | 0x25, + 32160 - 19968: jis0208<<14 | 0x5A<<7 | 0x30, + 32162 - 19968: jis0208<<14 | 0x44<<7 | 0x21, + 32163 - 19968: jis0208<<14 | 0x44<<7 | 0x1B, + 32166 - 19968: jis0212<<14 | 0x33<<7 | 0x01, + 32167 - 19968: jis0212<<14 | 0x33<<7 | 0x02, + 32170 - 19968: jis0212<<14 | 0x33<<7 | 0x03, + 32171 - 19968: jis0208<<14 | 0x44<<7 | 0x1F, + 32172 - 19968: jis0208<<14 | 0x1B<<7 | 0x59, + 32173 - 19968: jis0208<<14 | 0x0F<<7 | 0x3C, + 32174 - 19968: jis0208<<14 | 0x44<<7 | 0x1A, + 32175 - 19968: jis0208<<14 | 0x44<<7 | 0x22, + 32176 - 19968: jis0208<<14 | 0x44<<7 | 0x26, + 32177 - 19968: jis0208<<14 | 0x18<<7 | 0x2A, + 32178 - 19968: jis0208<<14 | 0x2B<<7 | 0x35, + 32179 - 19968: jis0212<<14 | 0x33<<7 | 0x04, + 32180 - 19968: jis0208<<14 | 0x23<<7 | 0x35, + 32181 - 19968: jis0208<<14 | 0x44<<7 | 0x1C, + 32182 - 19968: jis0212<<14 | 0x33<<7 | 0x05, + 32183 - 19968: jis0208<<14 | 0x5A<<7 | 0x2F, + 32184 - 19968: jis0208<<14 | 0x44<<7 | 0x24, + 32185 - 19968: jis0212<<14 | 0x33<<7 | 0x07, + 32186 - 19968: jis0208<<14 | 0x44<<7 | 0x19, + 32187 - 19968: jis0208<<14 | 0x22<<7 | 0x1D, + 32189 - 19968: jis0208<<14 | 0x44<<7 | 0x1E, + 32190 - 19968: jis0208<<14 | 0x0F<<7 | 0x1C, + 32191 - 19968: jis0208<<14 | 0x2B<<7 | 0x29, + 32194 - 19968: jis0212<<14 | 0x33<<7 | 0x08, + 32195 - 19968: jis0212<<14 | 0x33<<7 | 0x09, + 32196 - 19968: jis0212<<14 | 0x33<<7 | 0x0A, + 32197 - 19968: jis0212<<14 | 0x33<<7 | 0x0B, + 32198 - 19968: jis0212<<14 | 0x33<<7 | 0x0C, + 32199 - 19968: jis0208<<14 | 0x44<<7 | 0x1D, + 32202 - 19968: jis0208<<14 | 0x15<<7 | 0x3A, + 32203 - 19968: jis0208<<14 | 0x27<<7 | 0x4B, + 32204 - 19968: jis0212<<14 | 0x33<<7 | 0x0D, + 32205 - 19968: jis0212<<14 | 0x33<<7 | 0x0E, + 32206 - 19968: jis0212<<14 | 0x33<<7 | 0x0F, + 32207 - 19968: jis0208<<14 | 0x20<<7 | 0x4C, + 32209 - 19968: jis0208<<14 | 0x2D<<7 | 0x2F, + 32210 - 19968: jis0208<<14 | 0x1C<<7 | 0x4E, + 32213 - 19968: jis0208<<14 | 0x44<<7 | 0x4D, + 32214 - 19968: jis0208<<14 | 0x5A<<7 | 0x31, + 32215 - 19968: jis0212<<14 | 0x33<<7 | 0x10, + 32216 - 19968: jis0208<<14 | 0x44<<7 | 0x27, + 32217 - 19968: jis0212<<14 | 0x33<<7 | 0x11, + 32218 - 19968: jis0208<<14 | 0x1F<<7 | 0x5D, + 32220 - 19968: jis0208<<14 | 0x44<<7 | 0x23, + 32221 - 19968: jis0208<<14 | 0x44<<7 | 0x28, + 32222 - 19968: jis0208<<14 | 0x44<<7 | 0x2A, + 32224 - 19968: jis0208<<14 | 0x23<<7 | 0x58, + 32225 - 19968: jis0208<<14 | 0x44<<7 | 0x2D, + 32226 - 19968: jis0212<<14 | 0x33<<7 | 0x13, + 32228 - 19968: jis0208<<14 | 0x44<<7 | 0x29, + 32229 - 19968: jis0212<<14 | 0x33<<7 | 0x14, + 32230 - 19968: jis0212<<14 | 0x33<<7 | 0x15, + 32232 - 19968: jis0208<<14 | 0x29<<7 | 0x33, + 32233 - 19968: jis0208<<14 | 0x13<<7 | 0x2A, + 32234 - 19968: jis0212<<14 | 0x33<<7 | 0x16, + 32235 - 19968: jis0212<<14 | 0x33<<7 | 0x17, + 32236 - 19968: jis0208<<14 | 0x2B<<7 | 0x2A, + 32237 - 19968: jis0212<<14 | 0x33<<7 | 0x18, + 32239 - 19968: jis0208<<14 | 0x0F<<7 | 0x3D, + 32241 - 19968: jis0212<<14 | 0x33<<7 | 0x19, + 32242 - 19968: jis0208<<14 | 0x44<<7 | 0x2C, + 32244 - 19968: jis0208<<14 | 0x2D<<7 | 0x5C, + 32245 - 19968: jis0212<<14 | 0x33<<7 | 0x1A, + 32246 - 19968: jis0212<<14 | 0x33<<7 | 0x1B, + 32249 - 19968: jis0212<<14 | 0x33<<7 | 0x1C, + 32250 - 19968: jis0212<<14 | 0x33<<7 | 0x1D, + 32251 - 19968: jis0208<<14 | 0x44<<7 | 0x2B, + 32256 - 19968: jis0212<<14 | 0x33<<7 | 0x12, + 32257 - 19968: jis0208<<14 | 0x10<<7 | 0x4E, + 32260 - 19968: jis0208<<14 | 0x25<<7 | 0x4B, + 32261 - 19968: jis0208<<14 | 0x44<<7 | 0x2E, + 32264 - 19968: jis0212<<14 | 0x33<<7 | 0x1E, + 32265 - 19968: jis0208<<14 | 0x44<<7 | 0x35, + 32266 - 19968: jis0208<<14 | 0x44<<7 | 0x2F, + 32267 - 19968: jis0208<<14 | 0x44<<7 | 0x36, + 32272 - 19968: jis0212<<14 | 0x33<<7 | 0x1F, + 32273 - 19968: jis0212<<14 | 0x33<<7 | 0x20, + 32274 - 19968: jis0208<<14 | 0x44<<7 | 0x32, + 32277 - 19968: jis0212<<14 | 0x33<<7 | 0x21, + 32279 - 19968: jis0212<<14 | 0x33<<7 | 0x22, + 32283 - 19968: jis0208<<14 | 0x26<<7 | 0x5A, + 32284 - 19968: jis0212<<14 | 0x33<<7 | 0x23, + 32285 - 19968: jis0212<<14 | 0x33<<7 | 0x24, + 32286 - 19968: jis0208<<14 | 0x1B<<7 | 0x29, + 32287 - 19968: jis0208<<14 | 0x44<<7 | 0x34, + 32288 - 19968: jis0212<<14 | 0x33<<7 | 0x25, + 32289 - 19968: jis0208<<14 | 0x44<<7 | 0x31, + 32290 - 19968: jis0208<<14 | 0x44<<7 | 0x37, + 32291 - 19968: jis0208<<14 | 0x44<<7 | 0x30, + 32294 - 19968: jis0208<<14 | 0x1C<<7 | 0x23, + 32295 - 19968: jis0212<<14 | 0x33<<7 | 0x26, + 32296 - 19968: jis0212<<14 | 0x33<<7 | 0x27, + 32299 - 19968: jis0208<<14 | 0x2A<<7 | 0x04, + 32300 - 19968: jis0212<<14 | 0x33<<7 | 0x28, + 32301 - 19968: jis0212<<14 | 0x33<<7 | 0x29, + 32302 - 19968: jis0208<<14 | 0x1C<<7 | 0x2B, + 32303 - 19968: jis0212<<14 | 0x33<<7 | 0x2A, + 32305 - 19968: jis0208<<14 | 0x44<<7 | 0x33, + 32306 - 19968: jis0208<<14 | 0x44<<7 | 0x3F, + 32307 - 19968: jis0212<<14 | 0x33<<7 | 0x2B, + 32309 - 19968: jis0208<<14 | 0x44<<7 | 0x3B, + 32310 - 19968: jis0212<<14 | 0x33<<7 | 0x2C, + 32311 - 19968: jis0208<<14 | 0x44<<7 | 0x3E, + 32313 - 19968: jis0208<<14 | 0x44<<7 | 0x3C, + 32314 - 19968: jis0208<<14 | 0x44<<7 | 0x40, + 32315 - 19968: jis0208<<14 | 0x44<<7 | 0x3A, + 32317 - 19968: jis0208<<14 | 0x44<<7 | 0x20, + 32318 - 19968: jis0208<<14 | 0x1F<<7 | 0x32, + 32319 - 19968: jis0212<<14 | 0x33<<7 | 0x2D, + 32321 - 19968: jis0208<<14 | 0x27<<7 | 0x2A, + 32323 - 19968: jis0208<<14 | 0x44<<7 | 0x3D, + 32324 - 19968: jis0212<<14 | 0x33<<7 | 0x2E, + 32325 - 19968: jis0212<<14 | 0x33<<7 | 0x2F, + 32326 - 19968: jis0208<<14 | 0x44<<7 | 0x38, + 32327 - 19968: jis0212<<14 | 0x33<<7 | 0x30, + 32330 - 19968: jis0208<<14 | 0x20<<7 | 0x00, + 32331 - 19968: jis0208<<14 | 0x16<<7 | 0x31, + 32333 - 19968: jis0208<<14 | 0x1C<<7 | 0x0A, + 32334 - 19968: jis0212<<14 | 0x33<<7 | 0x31, + 32336 - 19968: jis0212<<14 | 0x33<<7 | 0x32, + 32338 - 19968: jis0208<<14 | 0x5A<<7 | 0x32, + 32340 - 19968: jis0208<<14 | 0x1E<<7 | 0x04, + 32341 - 19968: jis0208<<14 | 0x20<<7 | 0x15, + 32342 - 19968: jis0208<<14 | 0x44<<7 | 0x43, + 32344 - 19968: jis0212<<14 | 0x33<<7 | 0x34, + 32345 - 19968: jis0208<<14 | 0x44<<7 | 0x45, + 32346 - 19968: jis0208<<14 | 0x44<<7 | 0x46, + 32349 - 19968: jis0208<<14 | 0x44<<7 | 0x42, + 32350 - 19968: jis0208<<14 | 0x44<<7 | 0x44, + 32351 - 19968: jis0212<<14 | 0x33<<7 | 0x35, + 32353 - 19968: jis0212<<14 | 0x33<<7 | 0x36, + 32354 - 19968: jis0212<<14 | 0x33<<7 | 0x37, + 32357 - 19968: jis0212<<14 | 0x33<<7 | 0x38, + 32358 - 19968: jis0208<<14 | 0x44<<7 | 0x39, + 32359 - 19968: jis0208<<14 | 0x44<<7 | 0x41, + 32361 - 19968: jis0208<<14 | 0x44<<7 | 0x49, + 32362 - 19968: jis0208<<14 | 0x44<<7 | 0x48, + 32363 - 19968: jis0212<<14 | 0x33<<7 | 0x39, + 32365 - 19968: jis0208<<14 | 0x2A<<7 | 0x59, + 32366 - 19968: jis0212<<14 | 0x33<<7 | 0x3A, + 32367 - 19968: jis0212<<14 | 0x33<<7 | 0x3B, + 32368 - 19968: jis0208<<14 | 0x16<<7 | 0x0A, + 32371 - 19968: jis0212<<14 | 0x33<<7 | 0x3C, + 32376 - 19968: jis0212<<14 | 0x33<<7 | 0x3D, + 32377 - 19968: jis0208<<14 | 0x44<<7 | 0x47, + 32379 - 19968: jis0208<<14 | 0x44<<7 | 0x4B, + 32380 - 19968: jis0208<<14 | 0x44<<7 | 0x4A, + 32381 - 19968: jis0208<<14 | 0x44<<7 | 0x4E, + 32382 - 19968: jis0212<<14 | 0x33<<7 | 0x3E, + 32383 - 19968: jis0208<<14 | 0x44<<7 | 0x50, + 32385 - 19968: jis0212<<14 | 0x33<<7 | 0x3F, + 32386 - 19968: jis0208<<14 | 0x1A<<7 | 0x1B, + 32387 - 19968: jis0208<<14 | 0x44<<7 | 0x4C, + 32390 - 19968: jis0212<<14 | 0x33<<7 | 0x40, + 32391 - 19968: jis0212<<14 | 0x33<<7 | 0x41, + 32392 - 19968: jis0208<<14 | 0x44<<7 | 0x51, + 32393 - 19968: jis0208<<14 | 0x44<<7 | 0x52, + 32394 - 19968: jis0208<<14 | 0x58<<7 | 0x00, + 32396 - 19968: jis0208<<14 | 0x44<<7 | 0x53, + 32397 - 19968: jis0212<<14 | 0x33<<7 | 0x43, + 32398 - 19968: jis0208<<14 | 0x44<<7 | 0x59, + 32399 - 19968: jis0208<<14 | 0x24<<7 | 0x1A, + 32400 - 19968: jis0208<<14 | 0x44<<7 | 0x55, + 32401 - 19968: jis0212<<14 | 0x33<<7 | 0x44, + 32402 - 19968: jis0208<<14 | 0x44<<7 | 0x54, + 32403 - 19968: jis0208<<14 | 0x44<<7 | 0x56, + 32404 - 19968: jis0208<<14 | 0x44<<7 | 0x57, + 32405 - 19968: jis0212<<14 | 0x33<<7 | 0x45, + 32406 - 19968: jis0208<<14 | 0x44<<7 | 0x58, + 32408 - 19968: jis0212<<14 | 0x33<<7 | 0x46, + 32410 - 19968: jis0212<<14 | 0x33<<7 | 0x47, + 32411 - 19968: jis0208<<14 | 0x44<<7 | 0x5A, + 32412 - 19968: jis0208<<14 | 0x44<<7 | 0x5B, + 32413 - 19968: jis0212<<14 | 0x33<<7 | 0x48, + 32414 - 19968: jis0212<<14 | 0x33<<7 | 0x49, + 32566 - 19968: jis0208<<14 | 0x13<<7 | 0x2B, + 32568 - 19968: jis0208<<14 | 0x44<<7 | 0x5C, + 32570 - 19968: jis0208<<14 | 0x44<<7 | 0x5D, + 32571 - 19968: jis0212<<14 | 0x33<<7 | 0x4B, + 32572 - 19968: jis0212<<14 | 0x33<<7 | 0x4A, + 32573 - 19968: jis0212<<14 | 0x33<<7 | 0x4C, + 32574 - 19968: jis0212<<14 | 0x33<<7 | 0x4D, + 32575 - 19968: jis0212<<14 | 0x33<<7 | 0x4E, + 32579 - 19968: jis0212<<14 | 0x33<<7 | 0x4F, + 32580 - 19968: jis0212<<14 | 0x33<<7 | 0x50, + 32581 - 19968: jis0208<<14 | 0x45<<7 | 0x00, + 32583 - 19968: jis0208<<14 | 0x5A<<7 | 0x33, + 32588 - 19968: jis0208<<14 | 0x45<<7 | 0x01, + 32589 - 19968: jis0208<<14 | 0x45<<7 | 0x02, + 32590 - 19968: jis0208<<14 | 0x45<<7 | 0x03, + 32591 - 19968: jis0212<<14 | 0x33<<7 | 0x52, + 32592 - 19968: jis0208<<14 | 0x45<<7 | 0x04, + 32593 - 19968: jis0208<<14 | 0x45<<7 | 0x05, + 32594 - 19968: jis0212<<14 | 0x33<<7 | 0x53, + 32595 - 19968: jis0212<<14 | 0x33<<7 | 0x54, + 32596 - 19968: jis0208<<14 | 0x45<<7 | 0x07, + 32597 - 19968: jis0208<<14 | 0x45<<7 | 0x06, + 32600 - 19968: jis0208<<14 | 0x45<<7 | 0x08, + 32603 - 19968: jis0212<<14 | 0x33<<7 | 0x55, + 32604 - 19968: jis0212<<14 | 0x33<<7 | 0x56, + 32605 - 19968: jis0212<<14 | 0x33<<7 | 0x57, + 32607 - 19968: jis0208<<14 | 0x45<<7 | 0x09, + 32608 - 19968: jis0208<<14 | 0x45<<7 | 0x0A, + 32609 - 19968: jis0212<<14 | 0x33<<7 | 0x58, + 32611 - 19968: jis0212<<14 | 0x33<<7 | 0x59, + 32612 - 19968: jis0212<<14 | 0x33<<7 | 0x5A, + 32613 - 19968: jis0212<<14 | 0x33<<7 | 0x5B, + 32614 - 19968: jis0212<<14 | 0x33<<7 | 0x5C, + 32615 - 19968: jis0208<<14 | 0x45<<7 | 0x0D, + 32616 - 19968: jis0208<<14 | 0x45<<7 | 0x0B, + 32617 - 19968: jis0208<<14 | 0x45<<7 | 0x0C, + 32618 - 19968: jis0208<<14 | 0x19<<7 | 0x40, + 32619 - 19968: jis0208<<14 | 0x16<<7 | 0x32, + 32621 - 19968: jis0212<<14 | 0x33<<7 | 0x5D, + 32622 - 19968: jis0208<<14 | 0x22<<7 | 0x35, + 32624 - 19968: jis0208<<14 | 0x27<<7 | 0x12, + 32625 - 19968: jis0212<<14 | 0x34<<7 | 0x00, + 32626 - 19968: jis0208<<14 | 0x1C<<7 | 0x4F, + 32629 - 19968: jis0208<<14 | 0x26<<7 | 0x2C, + 32631 - 19968: jis0208<<14 | 0x27<<7 | 0x4C, + 32632 - 19968: jis0208<<14 | 0x45<<7 | 0x0E, + 32633 - 19968: jis0208<<14 | 0x37<<7 | 0x4C, + 32637 - 19968: jis0212<<14 | 0x34<<7 | 0x01, + 32638 - 19968: jis0212<<14 | 0x34<<7 | 0x02, + 32639 - 19968: jis0212<<14 | 0x34<<7 | 0x03, + 32640 - 19968: jis0212<<14 | 0x34<<7 | 0x04, + 32642 - 19968: jis0208<<14 | 0x45<<7 | 0x0F, + 32643 - 19968: jis0208<<14 | 0x45<<7 | 0x11, + 32645 - 19968: jis0208<<14 | 0x2C<<7 | 0x44, + 32646 - 19968: jis0208<<14 | 0x45<<7 | 0x10, + 32647 - 19968: jis0208<<14 | 0x45<<7 | 0x13, + 32648 - 19968: jis0208<<14 | 0x45<<7 | 0x12, + 32650 - 19968: jis0208<<14 | 0x2C<<7 | 0x32, + 32651 - 19968: jis0212<<14 | 0x34<<7 | 0x05, + 32652 - 19968: jis0208<<14 | 0x45<<7 | 0x14, + 32653 - 19968: jis0212<<14 | 0x34<<7 | 0x06, + 32654 - 19968: jis0208<<14 | 0x27<<7 | 0x5D, + 32655 - 19968: jis0212<<14 | 0x34<<7 | 0x07, + 32656 - 19968: jis0212<<14 | 0x34<<7 | 0x08, + 32657 - 19968: jis0212<<14 | 0x34<<7 | 0x09, + 32660 - 19968: jis0208<<14 | 0x45<<7 | 0x15, + 32662 - 19968: jis0212<<14 | 0x34<<7 | 0x0A, + 32663 - 19968: jis0212<<14 | 0x34<<7 | 0x0B, + 32666 - 19968: jis0208<<14 | 0x45<<7 | 0x18, + 32668 - 19968: jis0212<<14 | 0x34<<7 | 0x0C, + 32669 - 19968: jis0208<<14 | 0x45<<7 | 0x17, + 32670 - 19968: jis0208<<14 | 0x45<<7 | 0x16, + 32673 - 19968: jis0208<<14 | 0x5A<<7 | 0x34, + 32674 - 19968: jis0212<<14 | 0x34<<7 | 0x0E, + 32675 - 19968: jis0208<<14 | 0x45<<7 | 0x19, + 32676 - 19968: jis0208<<14 | 0x16<<7 | 0x11, + 32678 - 19968: jis0212<<14 | 0x34<<7 | 0x0F, + 32680 - 19968: jis0208<<14 | 0x20<<7 | 0x01, + 32681 - 19968: jis0208<<14 | 0x14<<7 | 0x20, + 32682 - 19968: jis0212<<14 | 0x34<<7 | 0x10, + 32685 - 19968: jis0212<<14 | 0x34<<7 | 0x11, + 32686 - 19968: jis0208<<14 | 0x45<<7 | 0x1D, + 32687 - 19968: jis0208<<14 | 0x45<<7 | 0x1A, + 32690 - 19968: jis0208<<14 | 0x45<<7 | 0x1B, + 32692 - 19968: jis0212<<14 | 0x34<<7 | 0x12, + 32694 - 19968: jis0208<<14 | 0x45<<7 | 0x1E, + 32696 - 19968: jis0208<<14 | 0x45<<7 | 0x1F, + 32697 - 19968: jis0208<<14 | 0x45<<7 | 0x1C, + 32700 - 19968: jis0212<<14 | 0x34<<7 | 0x13, + 32701 - 19968: jis0208<<14 | 0x10<<7 | 0x08, + 32703 - 19968: jis0212<<14 | 0x34<<7 | 0x14, + 32704 - 19968: jis0212<<14 | 0x34<<7 | 0x15, + 32705 - 19968: jis0208<<14 | 0x11<<7 | 0x06, + 32707 - 19968: jis0212<<14 | 0x34<<7 | 0x16, + 32709 - 19968: jis0208<<14 | 0x45<<7 | 0x21, + 32710 - 19968: jis0208<<14 | 0x45<<7 | 0x22, + 32712 - 19968: jis0212<<14 | 0x34<<7 | 0x17, + 32714 - 19968: jis0208<<14 | 0x45<<7 | 0x23, + 32716 - 19968: jis0208<<14 | 0x2C<<7 | 0x41, + 32718 - 19968: jis0212<<14 | 0x34<<7 | 0x18, + 32719 - 19968: jis0212<<14 | 0x34<<7 | 0x19, + 32722 - 19968: jis0208<<14 | 0x1C<<7 | 0x0B, + 32724 - 19968: jis0208<<14 | 0x45<<7 | 0x25, + 32725 - 19968: jis0208<<14 | 0x45<<7 | 0x24, + 32731 - 19968: jis0212<<14 | 0x34<<7 | 0x1A, + 32735 - 19968: jis0212<<14 | 0x34<<7 | 0x1B, + 32736 - 19968: jis0208<<14 | 0x1E<<7 | 0x48, + 32737 - 19968: jis0208<<14 | 0x45<<7 | 0x26, + 32739 - 19968: jis0212<<14 | 0x34<<7 | 0x1C, + 32741 - 19968: jis0212<<14 | 0x34<<7 | 0x1D, + 32742 - 19968: jis0208<<14 | 0x45<<7 | 0x27, + 32744 - 19968: jis0212<<14 | 0x34<<7 | 0x1E, + 32745 - 19968: jis0208<<14 | 0x45<<7 | 0x28, + 32747 - 19968: jis0208<<14 | 0x13<<7 | 0x44, + 32748 - 19968: jis0212<<14 | 0x34<<7 | 0x1F, + 32750 - 19968: jis0212<<14 | 0x34<<7 | 0x20, + 32751 - 19968: jis0212<<14 | 0x34<<7 | 0x21, + 32752 - 19968: jis0208<<14 | 0x13<<7 | 0x2C, + 32754 - 19968: jis0212<<14 | 0x34<<7 | 0x22, + 32755 - 19968: jis0208<<14 | 0x45<<7 | 0x29, + 32761 - 19968: jis0208<<14 | 0x45<<7 | 0x2A, + 32762 - 19968: jis0212<<14 | 0x34<<7 | 0x23, + 32763 - 19968: jis0208<<14 | 0x2A<<7 | 0x3C, + 32764 - 19968: jis0208<<14 | 0x2C<<7 | 0x42, + 32765 - 19968: jis0212<<14 | 0x34<<7 | 0x24, + 32766 - 19968: jis0212<<14 | 0x34<<7 | 0x25, + 32767 - 19968: jis0212<<14 | 0x34<<7 | 0x26, + 32768 - 19968: jis0208<<14 | 0x2C<<7 | 0x33, + 32769 - 19968: jis0208<<14 | 0x2E<<7 | 0x16, + 32771 - 19968: jis0208<<14 | 0x18<<7 | 0x2C, + 32772 - 19968: jis0208<<14 | 0x45<<7 | 0x2D, + 32773 - 19968: jis0208<<14 | 0x1B<<7 | 0x33, + 32774 - 19968: jis0208<<14 | 0x45<<7 | 0x2C, + 32775 - 19968: jis0212<<14 | 0x34<<7 | 0x27, + 32776 - 19968: jis0212<<14 | 0x34<<7 | 0x28, + 32778 - 19968: jis0212<<14 | 0x34<<7 | 0x29, + 32779 - 19968: jis0208<<14 | 0x45<<7 | 0x2E, + 32780 - 19968: jis0208<<14 | 0x1B<<7 | 0x08, + 32781 - 19968: jis0212<<14 | 0x34<<7 | 0x2A, + 32782 - 19968: jis0212<<14 | 0x34<<7 | 0x2B, + 32783 - 19968: jis0212<<14 | 0x34<<7 | 0x2C, + 32784 - 19968: jis0208<<14 | 0x21<<7 | 0x30, + 32785 - 19968: jis0212<<14 | 0x34<<7 | 0x2D, + 32786 - 19968: jis0208<<14 | 0x45<<7 | 0x2F, + 32787 - 19968: jis0212<<14 | 0x34<<7 | 0x2E, + 32788 - 19968: jis0212<<14 | 0x34<<7 | 0x2F, + 32789 - 19968: jis0208<<14 | 0x18<<7 | 0x2B, + 32790 - 19968: jis0212<<14 | 0x34<<7 | 0x30, + 32791 - 19968: jis0208<<14 | 0x2B<<7 | 0x36, + 32792 - 19968: jis0208<<14 | 0x45<<7 | 0x30, + 32793 - 19968: jis0208<<14 | 0x45<<7 | 0x31, + 32796 - 19968: jis0208<<14 | 0x45<<7 | 0x32, + 32797 - 19968: jis0212<<14 | 0x34<<7 | 0x31, + 32798 - 19968: jis0212<<14 | 0x34<<7 | 0x32, + 32799 - 19968: jis0212<<14 | 0x34<<7 | 0x33, + 32800 - 19968: jis0212<<14 | 0x34<<7 | 0x34, + 32801 - 19968: jis0208<<14 | 0x45<<7 | 0x33, + 32804 - 19968: jis0212<<14 | 0x34<<7 | 0x35, + 32806 - 19968: jis0212<<14 | 0x34<<7 | 0x36, + 32808 - 19968: jis0208<<14 | 0x45<<7 | 0x34, + 32812 - 19968: jis0212<<14 | 0x34<<7 | 0x37, + 32814 - 19968: jis0212<<14 | 0x34<<7 | 0x38, + 32816 - 19968: jis0212<<14 | 0x34<<7 | 0x39, + 32819 - 19968: jis0208<<14 | 0x1B<<7 | 0x09, + 32820 - 19968: jis0212<<14 | 0x34<<7 | 0x3A, + 32821 - 19968: jis0212<<14 | 0x34<<7 | 0x3B, + 32822 - 19968: jis0208<<14 | 0x2B<<7 | 0x4C, + 32823 - 19968: jis0212<<14 | 0x34<<7 | 0x3C, + 32825 - 19968: jis0212<<14 | 0x34<<7 | 0x3D, + 32826 - 19968: jis0212<<14 | 0x34<<7 | 0x3E, + 32827 - 19968: jis0208<<14 | 0x45<<7 | 0x36, + 32828 - 19968: jis0212<<14 | 0x34<<7 | 0x3F, + 32829 - 19968: jis0208<<14 | 0x22<<7 | 0x1E, + 32830 - 19968: jis0212<<14 | 0x34<<7 | 0x40, + 32831 - 19968: jis0208<<14 | 0x45<<7 | 0x35, + 32832 - 19968: jis0212<<14 | 0x34<<7 | 0x41, + 32836 - 19968: jis0212<<14 | 0x34<<7 | 0x42, + 32838 - 19968: jis0208<<14 | 0x45<<7 | 0x38, + 32842 - 19968: jis0208<<14 | 0x45<<7 | 0x37, + 32850 - 19968: jis0208<<14 | 0x45<<7 | 0x39, + 32854 - 19968: jis0208<<14 | 0x1F<<7 | 0x1A, + 32856 - 19968: jis0208<<14 | 0x45<<7 | 0x3A, + 32858 - 19968: jis0208<<14 | 0x45<<7 | 0x3B, + 32862 - 19968: jis0208<<14 | 0x29<<7 | 0x18, + 32863 - 19968: jis0208<<14 | 0x45<<7 | 0x3C, + 32864 - 19968: jis0212<<14 | 0x34<<7 | 0x43, + 32865 - 19968: jis0208<<14 | 0x20<<7 | 0x4E, + 32866 - 19968: jis0208<<14 | 0x45<<7 | 0x3D, + 32868 - 19968: jis0212<<14 | 0x34<<7 | 0x44, + 32870 - 19968: jis0212<<14 | 0x34<<7 | 0x45, + 32872 - 19968: jis0208<<14 | 0x45<<7 | 0x3E, + 32877 - 19968: jis0212<<14 | 0x34<<7 | 0x46, + 32879 - 19968: jis0208<<14 | 0x2D<<7 | 0x5D, + 32880 - 19968: jis0208<<14 | 0x45<<7 | 0x41, + 32881 - 19968: jis0212<<14 | 0x34<<7 | 0x47, + 32882 - 19968: jis0208<<14 | 0x45<<7 | 0x40, + 32883 - 19968: jis0208<<14 | 0x45<<7 | 0x3F, + 32884 - 19968: jis0208<<14 | 0x23<<7 | 0x0F, + 32885 - 19968: jis0212<<14 | 0x34<<7 | 0x48, + 32886 - 19968: jis0208<<14 | 0x45<<7 | 0x42, + 32887 - 19968: jis0208<<14 | 0x1E<<7 | 0x05, + 32889 - 19968: jis0208<<14 | 0x45<<7 | 0x43, + 32893 - 19968: jis0208<<14 | 0x45<<7 | 0x44, + 32894 - 19968: jis0208<<14 | 0x2E<<7 | 0x17, + 32895 - 19968: jis0208<<14 | 0x45<<7 | 0x45, + 32897 - 19968: jis0212<<14 | 0x34<<7 | 0x49, + 32900 - 19968: jis0208<<14 | 0x45<<7 | 0x46, + 32901 - 19968: jis0208<<14 | 0x45<<7 | 0x48, + 32902 - 19968: jis0208<<14 | 0x45<<7 | 0x47, + 32903 - 19968: jis0208<<14 | 0x27<<7 | 0x04, + 32904 - 19968: jis0212<<14 | 0x34<<7 | 0x4A, + 32905 - 19968: jis0208<<14 | 0x25<<7 | 0x58, + 32907 - 19968: jis0208<<14 | 0x2E<<7 | 0x1D, + 32908 - 19968: jis0208<<14 | 0x27<<7 | 0x08, + 32910 - 19968: jis0212<<14 | 0x34<<7 | 0x4B, + 32915 - 19968: jis0208<<14 | 0x45<<7 | 0x4A, + 32918 - 19968: jis0208<<14 | 0x1D<<7 | 0x32, + 32920 - 19968: jis0208<<14 | 0x28<<7 | 0x09, + 32922 - 19968: jis0208<<14 | 0x45<<7 | 0x4B, + 32923 - 19968: jis0208<<14 | 0x45<<7 | 0x49, + 32924 - 19968: jis0212<<14 | 0x34<<7 | 0x4C, + 32925 - 19968: jis0208<<14 | 0x13<<7 | 0x2D, + 32926 - 19968: jis0212<<14 | 0x34<<7 | 0x4D, + 32929 - 19968: jis0208<<14 | 0x17<<7 | 0x33, + 32930 - 19968: jis0208<<14 | 0x1A<<7 | 0x47, + 32933 - 19968: jis0208<<14 | 0x27<<7 | 0x4D, + 32934 - 19968: jis0212<<14 | 0x34<<7 | 0x4E, + 32935 - 19968: jis0212<<14 | 0x34<<7 | 0x4F, + 32937 - 19968: jis0208<<14 | 0x17<<7 | 0x09, + 32938 - 19968: jis0208<<14 | 0x2A<<7 | 0x22, + 32939 - 19968: jis0212<<14 | 0x34<<7 | 0x50, + 32940 - 19968: jis0208<<14 | 0x45<<7 | 0x4E, + 32941 - 19968: jis0208<<14 | 0x45<<7 | 0x4C, + 32943 - 19968: jis0208<<14 | 0x18<<7 | 0x2D, + 32945 - 19968: jis0208<<14 | 0x18<<7 | 0x2E, + 32946 - 19968: jis0208<<14 | 0x0F<<7 | 0x48, + 32948 - 19968: jis0208<<14 | 0x19<<7 | 0x47, + 32952 - 19968: jis0212<<14 | 0x34<<7 | 0x51, + 32953 - 19968: jis0212<<14 | 0x34<<7 | 0x52, + 32954 - 19968: jis0208<<14 | 0x26<<7 | 0x38, + 32963 - 19968: jis0208<<14 | 0x0F<<7 | 0x3E, + 32964 - 19968: jis0208<<14 | 0x45<<7 | 0x53, + 32966 - 19968: jis0208<<14 | 0x22<<7 | 0x1F, + 32968 - 19968: jis0212<<14 | 0x34<<7 | 0x53, + 32972 - 19968: jis0208<<14 | 0x26<<7 | 0x37, + 32973 - 19968: jis0212<<14 | 0x34<<7 | 0x54, + 32974 - 19968: jis0208<<14 | 0x21<<7 | 0x3A, + 32975 - 19968: jis0212<<14 | 0x34<<7 | 0x55, + 32978 - 19968: jis0212<<14 | 0x34<<7 | 0x56, + 32980 - 19968: jis0212<<14 | 0x34<<7 | 0x57, + 32981 - 19968: jis0212<<14 | 0x34<<7 | 0x58, + 32982 - 19968: jis0208<<14 | 0x45<<7 | 0x55, + 32983 - 19968: jis0212<<14 | 0x34<<7 | 0x59, + 32984 - 19968: jis0212<<14 | 0x34<<7 | 0x5A, + 32985 - 19968: jis0208<<14 | 0x45<<7 | 0x51, + 32986 - 19968: jis0208<<14 | 0x45<<7 | 0x54, + 32987 - 19968: jis0208<<14 | 0x45<<7 | 0x4F, + 32989 - 19968: jis0208<<14 | 0x45<<7 | 0x52, + 32990 - 19968: jis0208<<14 | 0x2A<<7 | 0x05, + 32992 - 19968: jis0212<<14 | 0x34<<7 | 0x5B, + 32993 - 19968: jis0208<<14 | 0x17<<7 | 0x34, + 32996 - 19968: jis0208<<14 | 0x0F<<7 | 0x5C, + 32997 - 19968: jis0208<<14 | 0x45<<7 | 0x50, + 33005 - 19968: jis0212<<14 | 0x34<<7 | 0x5C, + 33006 - 19968: jis0212<<14 | 0x34<<7 | 0x5D, + 33007 - 19968: jis0208<<14 | 0x45<<7 | 0x57, + 33008 - 19968: jis0212<<14 | 0x35<<7 | 0x00, + 33009 - 19968: jis0208<<14 | 0x45<<7 | 0x58, + 33010 - 19968: jis0212<<14 | 0x35<<7 | 0x01, + 33011 - 19968: jis0212<<14 | 0x35<<7 | 0x02, + 33012 - 19968: jis0208<<14 | 0x25<<7 | 0x18, + 33014 - 19968: jis0212<<14 | 0x35<<7 | 0x03, + 33016 - 19968: jis0208<<14 | 0x15<<7 | 0x1A, + 33017 - 19968: jis0212<<14 | 0x35<<7 | 0x04, + 33018 - 19968: jis0212<<14 | 0x35<<7 | 0x05, + 33020 - 19968: jis0208<<14 | 0x46<<7 | 0x05, + 33021 - 19968: jis0208<<14 | 0x26<<7 | 0x1C, + 33022 - 19968: jis0212<<14 | 0x35<<7 | 0x06, + 33026 - 19968: jis0208<<14 | 0x1A<<7 | 0x48, + 33027 - 19968: jis0212<<14 | 0x35<<7 | 0x07, + 33029 - 19968: jis0208<<14 | 0x15<<7 | 0x1B, + 33030 - 19968: jis0208<<14 | 0x1F<<7 | 0x27, + 33031 - 19968: jis0208<<14 | 0x2E<<7 | 0x25, + 33032 - 19968: jis0208<<14 | 0x2B<<7 | 0x0D, + 33033 - 19968: jis0208<<14 | 0x45<<7 | 0x56, + 33034 - 19968: jis0208<<14 | 0x1F<<7 | 0x33, + 33035 - 19968: jis0212<<14 | 0x35<<7 | 0x08, + 33046 - 19968: jis0212<<14 | 0x35<<7 | 0x09, + 33047 - 19968: jis0212<<14 | 0x35<<7 | 0x0A, + 33048 - 19968: jis0212<<14 | 0x35<<7 | 0x0B, + 33050 - 19968: jis0208<<14 | 0x14<<7 | 0x32, + 33051 - 19968: jis0208<<14 | 0x45<<7 | 0x59, + 33052 - 19968: jis0212<<14 | 0x35<<7 | 0x0C, + 33054 - 19968: jis0212<<14 | 0x35<<7 | 0x0D, + 33056 - 19968: jis0212<<14 | 0x35<<7 | 0x0E, + 33059 - 19968: jis0208<<14 | 0x45<<7 | 0x5B, + 33060 - 19968: jis0212<<14 | 0x35<<7 | 0x0F, + 33063 - 19968: jis0212<<14 | 0x35<<7 | 0x10, + 33065 - 19968: jis0208<<14 | 0x45<<7 | 0x5A, + 33068 - 19968: jis0212<<14 | 0x35<<7 | 0x11, + 33071 - 19968: jis0208<<14 | 0x45<<7 | 0x5C, + 33072 - 19968: jis0212<<14 | 0x35<<7 | 0x12, + 33073 - 19968: jis0208<<14 | 0x22<<7 | 0x05, + 33075 - 19968: jis0208<<14 | 0x26<<7 | 0x1D, + 33077 - 19968: jis0212<<14 | 0x35<<7 | 0x13, + 33081 - 19968: jis0208<<14 | 0x23<<7 | 0x10, + 33082 - 19968: jis0212<<14 | 0x35<<7 | 0x14, + 33084 - 19968: jis0212<<14 | 0x35<<7 | 0x15, + 33086 - 19968: jis0208<<14 | 0x46<<7 | 0x02, + 33093 - 19968: jis0212<<14 | 0x35<<7 | 0x16, + 33094 - 19968: jis0208<<14 | 0x46<<7 | 0x01, + 33095 - 19968: jis0212<<14 | 0x35<<7 | 0x17, + 33098 - 19968: jis0212<<14 | 0x35<<7 | 0x18, + 33099 - 19968: jis0208<<14 | 0x45<<7 | 0x5D, + 33100 - 19968: jis0212<<14 | 0x35<<7 | 0x19, + 33102 - 19968: jis0208<<14 | 0x1E<<7 | 0x34, + 33104 - 19968: jis0208<<14 | 0x28<<7 | 0x44, + 33105 - 19968: jis0208<<14 | 0x46<<7 | 0x04, + 33106 - 19968: jis0212<<14 | 0x35<<7 | 0x1A, + 33107 - 19968: jis0208<<14 | 0x46<<7 | 0x03, + 33108 - 19968: jis0208<<14 | 0x18<<7 | 0x2F, + 33109 - 19968: jis0208<<14 | 0x2E<<7 | 0x32, + 33111 - 19968: jis0212<<14 | 0x35<<7 | 0x1B, + 33119 - 19968: jis0208<<14 | 0x46<<7 | 0x14, + 33120 - 19968: jis0212<<14 | 0x35<<7 | 0x1C, + 33121 - 19968: jis0212<<14 | 0x35<<7 | 0x1D, + 33125 - 19968: jis0208<<14 | 0x46<<7 | 0x08, + 33126 - 19968: jis0208<<14 | 0x46<<7 | 0x09, + 33127 - 19968: jis0212<<14 | 0x35<<7 | 0x1E, + 33128 - 19968: jis0212<<14 | 0x35<<7 | 0x1F, + 33129 - 19968: jis0212<<14 | 0x35<<7 | 0x20, + 33131 - 19968: jis0208<<14 | 0x1B<<7 | 0x4F, + 33133 - 19968: jis0212<<14 | 0x35<<7 | 0x21, + 33134 - 19968: jis0208<<14 | 0x46<<7 | 0x07, + 33135 - 19968: jis0212<<14 | 0x35<<7 | 0x22, + 33136 - 19968: jis0208<<14 | 0x18<<7 | 0x57, + 33137 - 19968: jis0208<<14 | 0x46<<7 | 0x06, + 33140 - 19968: jis0208<<14 | 0x46<<7 | 0x0A, + 33143 - 19968: jis0212<<14 | 0x35<<7 | 0x23, + 33144 - 19968: jis0208<<14 | 0x23<<7 | 0x11, + 33145 - 19968: jis0208<<14 | 0x29<<7 | 0x01, + 33146 - 19968: jis0208<<14 | 0x20<<7 | 0x02, + 33151 - 19968: jis0208<<14 | 0x21<<7 | 0x3B, + 33152 - 19968: jis0208<<14 | 0x46<<7 | 0x0E, + 33153 - 19968: jis0212<<14 | 0x35<<7 | 0x24, + 33154 - 19968: jis0208<<14 | 0x46<<7 | 0x0F, + 33155 - 19968: jis0208<<14 | 0x46<<7 | 0x0B, + 33156 - 19968: jis0212<<14 | 0x35<<7 | 0x26, + 33157 - 19968: jis0212<<14 | 0x35<<7 | 0x27, + 33158 - 19968: jis0212<<14 | 0x35<<7 | 0x28, + 33160 - 19968: jis0208<<14 | 0x46<<7 | 0x0C, + 33162 - 19968: jis0208<<14 | 0x46<<7 | 0x0D, + 33163 - 19968: jis0212<<14 | 0x35<<7 | 0x29, + 33166 - 19968: jis0212<<14 | 0x35<<7 | 0x2A, + 33167 - 19968: jis0208<<14 | 0x18<<7 | 0x30, + 33168 - 19968: jis0212<<14 | 0x35<<7 | 0x25, + 33171 - 19968: jis0208<<14 | 0x46<<7 | 0x15, + 33173 - 19968: jis0208<<14 | 0x46<<7 | 0x11, + 33174 - 19968: jis0212<<14 | 0x35<<7 | 0x2B, + 33176 - 19968: jis0212<<14 | 0x35<<7 | 0x2C, + 33178 - 19968: jis0208<<14 | 0x28<<7 | 0x45, + 33179 - 19968: jis0212<<14 | 0x35<<7 | 0x2D, + 33180 - 19968: jis0208<<14 | 0x2A<<7 | 0x4B, + 33181 - 19968: jis0208<<14 | 0x28<<7 | 0x07, + 33182 - 19968: jis0212<<14 | 0x35<<7 | 0x2E, + 33184 - 19968: jis0208<<14 | 0x46<<7 | 0x10, + 33186 - 19968: jis0212<<14 | 0x35<<7 | 0x2F, + 33187 - 19968: jis0208<<14 | 0x46<<7 | 0x13, + 33188 - 19968: jis0208<<14 | 0x46<<7 | 0x12, + 33192 - 19968: jis0208<<14 | 0x2A<<7 | 0x23, + 33193 - 19968: jis0208<<14 | 0x46<<7 | 0x16, + 33198 - 19968: jis0212<<14 | 0x35<<7 | 0x30, + 33200 - 19968: jis0208<<14 | 0x46<<7 | 0x17, + 33202 - 19968: jis0212<<14 | 0x35<<7 | 0x31, + 33203 - 19968: jis0208<<14 | 0x20<<7 | 0x16, + 33204 - 19968: jis0212<<14 | 0x35<<7 | 0x32, + 33205 - 19968: jis0208<<14 | 0x46<<7 | 0x18, + 33208 - 19968: jis0208<<14 | 0x46<<7 | 0x1A, + 33210 - 19968: jis0208<<14 | 0x46<<7 | 0x1E, + 33211 - 19968: jis0212<<14 | 0x35<<7 | 0x33, + 33213 - 19968: jis0208<<14 | 0x46<<7 | 0x1B, + 33214 - 19968: jis0208<<14 | 0x46<<7 | 0x19, + 33215 - 19968: jis0208<<14 | 0x26<<7 | 0x1E, + 33216 - 19968: jis0208<<14 | 0x46<<7 | 0x1C, + 33218 - 19968: jis0208<<14 | 0x46<<7 | 0x1D, + 33219 - 19968: jis0212<<14 | 0x35<<7 | 0x35, + 33221 - 19968: jis0212<<14 | 0x35<<7 | 0x36, + 33222 - 19968: jis0208<<14 | 0x11<<7 | 0x11, + 33224 - 19968: jis0208<<14 | 0x46<<7 | 0x24, + 33225 - 19968: jis0208<<14 | 0x46<<7 | 0x1F, + 33226 - 19968: jis0212<<14 | 0x35<<7 | 0x37, + 33227 - 19968: jis0212<<14 | 0x35<<7 | 0x34, + 33229 - 19968: jis0208<<14 | 0x46<<7 | 0x20, + 33230 - 19968: jis0212<<14 | 0x35<<7 | 0x38, + 33231 - 19968: jis0212<<14 | 0x35<<7 | 0x39, + 33233 - 19968: jis0208<<14 | 0x46<<7 | 0x21, + 33235 - 19968: jis0208<<14 | 0x21<<7 | 0x00, + 33237 - 19968: jis0212<<14 | 0x35<<7 | 0x3A, + 33239 - 19968: jis0212<<14 | 0x35<<7 | 0x3B, + 33240 - 19968: jis0208<<14 | 0x46<<7 | 0x23, + 33241 - 19968: jis0208<<14 | 0x46<<7 | 0x22, + 33242 - 19968: jis0208<<14 | 0x46<<7 | 0x25, + 33243 - 19968: jis0212<<14 | 0x35<<7 | 0x3C, + 33245 - 19968: jis0212<<14 | 0x35<<7 | 0x3D, + 33246 - 19968: jis0212<<14 | 0x35<<7 | 0x3E, + 33247 - 19968: jis0208<<14 | 0x46<<7 | 0x26, + 33248 - 19968: jis0208<<14 | 0x46<<7 | 0x27, + 33249 - 19968: jis0212<<14 | 0x35<<7 | 0x3F, + 33251 - 19968: jis0208<<14 | 0x1E<<7 | 0x22, + 33252 - 19968: jis0212<<14 | 0x35<<7 | 0x40, + 33253 - 19968: jis0208<<14 | 0x11<<7 | 0x48, + 33255 - 19968: jis0208<<14 | 0x46<<7 | 0x28, + 33256 - 19968: jis0208<<14 | 0x2D<<7 | 0x36, + 33258 - 19968: jis0208<<14 | 0x1B<<7 | 0x0A, + 33259 - 19968: jis0212<<14 | 0x35<<7 | 0x41, + 33260 - 19968: jis0212<<14 | 0x35<<7 | 0x42, + 33261 - 19968: jis0208<<14 | 0x1C<<7 | 0x0C, + 33264 - 19968: jis0212<<14 | 0x35<<7 | 0x43, + 33265 - 19968: jis0212<<14 | 0x35<<7 | 0x44, + 33266 - 19968: jis0212<<14 | 0x35<<7 | 0x45, + 33267 - 19968: jis0208<<14 | 0x1A<<7 | 0x49, + 33268 - 19968: jis0208<<14 | 0x22<<7 | 0x36, + 33269 - 19968: jis0212<<14 | 0x35<<7 | 0x46, + 33270 - 19968: jis0212<<14 | 0x35<<7 | 0x47, + 33272 - 19968: jis0212<<14 | 0x35<<7 | 0x48, + 33273 - 19968: jis0212<<14 | 0x35<<7 | 0x49, + 33274 - 19968: jis0208<<14 | 0x46<<7 | 0x29, + 33275 - 19968: jis0208<<14 | 0x46<<7 | 0x2A, + 33276 - 19968: jis0208<<14 | 0x10<<7 | 0x10, + 33277 - 19968: jis0212<<14 | 0x35<<7 | 0x4A, + 33278 - 19968: jis0208<<14 | 0x46<<7 | 0x2B, + 33279 - 19968: jis0212<<14 | 0x35<<7 | 0x4B, + 33280 - 19968: jis0212<<14 | 0x35<<7 | 0x4C, + 33281 - 19968: jis0208<<14 | 0x46<<7 | 0x2C, + 33282 - 19968: jis0208<<14 | 0x46<<7 | 0x2D, + 33283 - 19968: jis0212<<14 | 0x35<<7 | 0x4D, + 33285 - 19968: jis0208<<14 | 0x46<<7 | 0x2E, + 33287 - 19968: jis0208<<14 | 0x46<<7 | 0x2F, + 33288 - 19968: jis0208<<14 | 0x15<<7 | 0x1C, + 33289 - 19968: jis0208<<14 | 0x39<<7 | 0x09, + 33290 - 19968: jis0208<<14 | 0x46<<7 | 0x30, + 33292 - 19968: jis0208<<14 | 0x1F<<7 | 0x44, + 33293 - 19968: jis0208<<14 | 0x46<<7 | 0x31, + 33294 - 19968: jis0208<<14 | 0x1B<<7 | 0x2A, + 33295 - 19968: jis0212<<14 | 0x35<<7 | 0x4E, + 33296 - 19968: jis0208<<14 | 0x46<<7 | 0x32, + 33298 - 19968: jis0208<<14 | 0x2F<<7 | 0x0F, + 33299 - 19968: jis0212<<14 | 0x35<<7 | 0x4F, + 33300 - 19968: jis0212<<14 | 0x35<<7 | 0x50, + 33302 - 19968: jis0208<<14 | 0x46<<7 | 0x33, + 33303 - 19968: jis0208<<14 | 0x29<<7 | 0x3D, + 33304 - 19968: jis0208<<14 | 0x13<<7 | 0x3B, + 33305 - 19968: jis0212<<14 | 0x35<<7 | 0x51, + 33306 - 19968: jis0212<<14 | 0x35<<7 | 0x52, + 33307 - 19968: jis0208<<14 | 0x20<<7 | 0x03, + 33308 - 19968: jis0208<<14 | 0x1C<<7 | 0x37, + 33309 - 19968: jis0212<<14 | 0x35<<7 | 0x53, + 33310 - 19968: jis0208<<14 | 0x28<<7 | 0x50, + 33311 - 19968: jis0208<<14 | 0x1C<<7 | 0x0D, + 33313 - 19968: jis0212<<14 | 0x35<<7 | 0x54, + 33314 - 19968: jis0212<<14 | 0x35<<7 | 0x55, + 33320 - 19968: jis0212<<14 | 0x35<<7 | 0x56, + 33321 - 19968: jis0208<<14 | 0x46<<7 | 0x34, + 33322 - 19968: jis0208<<14 | 0x18<<7 | 0x31, + 33323 - 19968: jis0208<<14 | 0x46<<7 | 0x35, + 33324 - 19968: jis0208<<14 | 0x27<<7 | 0x2B, + 33326 - 19968: jis0208<<14 | 0x46<<7 | 0x43, + 33330 - 19968: jis0212<<14 | 0x35<<7 | 0x57, + 33331 - 19968: jis0208<<14 | 0x46<<7 | 0x37, + 33332 - 19968: jis0212<<14 | 0x35<<7 | 0x58, + 33333 - 19968: jis0208<<14 | 0x21<<7 | 0x28, + 33334 - 19968: jis0208<<14 | 0x26<<7 | 0x54, + 33335 - 19968: jis0208<<14 | 0x17<<7 | 0x1E, + 33336 - 19968: jis0208<<14 | 0x46<<7 | 0x36, + 33337 - 19968: jis0208<<14 | 0x20<<7 | 0x04, + 33338 - 19968: jis0212<<14 | 0x35<<7 | 0x59, + 33344 - 19968: jis0208<<14 | 0x46<<7 | 0x38, + 33347 - 19968: jis0212<<14 | 0x35<<7 | 0x5A, + 33348 - 19968: jis0212<<14 | 0x35<<7 | 0x5B, + 33349 - 19968: jis0212<<14 | 0x35<<7 | 0x5C, + 33350 - 19968: jis0212<<14 | 0x35<<7 | 0x5D, + 33351 - 19968: jis0208<<14 | 0x23<<7 | 0x59, + 33355 - 19968: jis0212<<14 | 0x36<<7 | 0x00, + 33358 - 19968: jis0212<<14 | 0x36<<7 | 0x01, + 33359 - 19968: jis0212<<14 | 0x36<<7 | 0x02, + 33361 - 19968: jis0212<<14 | 0x36<<7 | 0x03, + 33366 - 19968: jis0212<<14 | 0x36<<7 | 0x04, + 33368 - 19968: jis0208<<14 | 0x46<<7 | 0x3A, + 33369 - 19968: jis0208<<14 | 0x46<<7 | 0x39, + 33370 - 19968: jis0208<<14 | 0x46<<7 | 0x3C, + 33372 - 19968: jis0212<<14 | 0x36<<7 | 0x05, + 33373 - 19968: jis0208<<14 | 0x46<<7 | 0x3B, + 33375 - 19968: jis0208<<14 | 0x46<<7 | 0x3D, + 33376 - 19968: jis0212<<14 | 0x36<<7 | 0x06, + 33378 - 19968: jis0208<<14 | 0x46<<7 | 0x3F, + 33379 - 19968: jis0212<<14 | 0x36<<7 | 0x07, + 33380 - 19968: jis0208<<14 | 0x46<<7 | 0x3E, + 33382 - 19968: jis0208<<14 | 0x13<<7 | 0x2E, + 33383 - 19968: jis0212<<14 | 0x36<<7 | 0x08, + 33384 - 19968: jis0208<<14 | 0x46<<7 | 0x40, + 33386 - 19968: jis0208<<14 | 0x46<<7 | 0x41, + 33387 - 19968: jis0208<<14 | 0x46<<7 | 0x42, + 33389 - 19968: jis0212<<14 | 0x36<<7 | 0x09, + 33390 - 19968: jis0208<<14 | 0x19<<7 | 0x10, + 33391 - 19968: jis0208<<14 | 0x2D<<7 | 0x28, + 33393 - 19968: jis0208<<14 | 0x46<<7 | 0x44, + 33394 - 19968: jis0208<<14 | 0x1E<<7 | 0x06, + 33396 - 19968: jis0212<<14 | 0x36<<7 | 0x0A, + 33398 - 19968: jis0208<<14 | 0x10<<7 | 0x4F, + 33399 - 19968: jis0208<<14 | 0x46<<7 | 0x45, + 33400 - 19968: jis0208<<14 | 0x46<<7 | 0x46, + 33403 - 19968: jis0212<<14 | 0x36<<7 | 0x0B, + 33405 - 19968: jis0212<<14 | 0x36<<7 | 0x0C, + 33406 - 19968: jis0208<<14 | 0x46<<7 | 0x47, + 33407 - 19968: jis0212<<14 | 0x36<<7 | 0x0D, + 33408 - 19968: jis0212<<14 | 0x36<<7 | 0x0E, + 33409 - 19968: jis0212<<14 | 0x36<<7 | 0x0F, + 33411 - 19968: jis0212<<14 | 0x36<<7 | 0x10, + 33412 - 19968: jis0212<<14 | 0x36<<7 | 0x11, + 33415 - 19968: jis0212<<14 | 0x36<<7 | 0x12, + 33417 - 19968: jis0212<<14 | 0x36<<7 | 0x13, + 33418 - 19968: jis0212<<14 | 0x36<<7 | 0x14, + 33419 - 19968: jis0208<<14 | 0x0F<<7 | 0x51, + 33421 - 19968: jis0208<<14 | 0x46<<7 | 0x48, + 33422 - 19968: jis0212<<14 | 0x36<<7 | 0x15, + 33425 - 19968: jis0212<<14 | 0x36<<7 | 0x16, + 33426 - 19968: jis0208<<14 | 0x46<<7 | 0x49, + 33428 - 19968: jis0212<<14 | 0x36<<7 | 0x17, + 33430 - 19968: jis0212<<14 | 0x36<<7 | 0x18, + 33432 - 19968: jis0212<<14 | 0x36<<7 | 0x19, + 33433 - 19968: jis0208<<14 | 0x28<<7 | 0x46, + 33434 - 19968: jis0212<<14 | 0x36<<7 | 0x1A, + 33435 - 19968: jis0212<<14 | 0x36<<7 | 0x1B, + 33437 - 19968: jis0208<<14 | 0x1B<<7 | 0x26, + 33439 - 19968: jis0208<<14 | 0x46<<7 | 0x4B, + 33440 - 19968: jis0212<<14 | 0x36<<7 | 0x1C, + 33441 - 19968: jis0212<<14 | 0x36<<7 | 0x1D, + 33443 - 19968: jis0212<<14 | 0x36<<7 | 0x1E, + 33444 - 19968: jis0212<<14 | 0x36<<7 | 0x1F, + 33445 - 19968: jis0208<<14 | 0x12<<7 | 0x08, + 33446 - 19968: jis0208<<14 | 0x0F<<7 | 0x11, + 33447 - 19968: jis0212<<14 | 0x36<<7 | 0x20, + 33448 - 19968: jis0212<<14 | 0x36<<7 | 0x21, + 33449 - 19968: jis0212<<14 | 0x36<<7 | 0x22, + 33450 - 19968: jis0212<<14 | 0x36<<7 | 0x23, + 33451 - 19968: jis0208<<14 | 0x46<<7 | 0x4A, + 33452 - 19968: jis0208<<14 | 0x46<<7 | 0x4D, + 33453 - 19968: jis0208<<14 | 0x26<<7 | 0x2D, + 33454 - 19968: jis0212<<14 | 0x36<<7 | 0x24, + 33455 - 19968: jis0208<<14 | 0x1E<<7 | 0x23, + 33456 - 19968: jis0212<<14 | 0x36<<7 | 0x25, + 33457 - 19968: jis0208<<14 | 0x11<<7 | 0x35, + 33458 - 19968: jis0212<<14 | 0x36<<7 | 0x26, + 33459 - 19968: jis0208<<14 | 0x2A<<7 | 0x06, + 33460 - 19968: jis0212<<14 | 0x36<<7 | 0x27, + 33463 - 19968: jis0212<<14 | 0x36<<7 | 0x28, + 33464 - 19968: jis0208<<14 | 0x16<<7 | 0x3C, + 33465 - 19968: jis0208<<14 | 0x15<<7 | 0x3B, + 33466 - 19968: jis0212<<14 | 0x36<<7 | 0x29, + 33467 - 19968: jis0208<<14 | 0x46<<7 | 0x4C, + 33468 - 19968: jis0212<<14 | 0x36<<7 | 0x2A, + 33469 - 19968: jis0208<<14 | 0x11<<7 | 0x49, + 33470 - 19968: jis0212<<14 | 0x36<<7 | 0x2B, + 33471 - 19968: jis0212<<14 | 0x36<<7 | 0x2C, + 33477 - 19968: jis0208<<14 | 0x13<<7 | 0x02, + 33478 - 19968: jis0212<<14 | 0x36<<7 | 0x2D, + 33488 - 19968: jis0212<<14 | 0x36<<7 | 0x2E, + 33489 - 19968: jis0208<<14 | 0x10<<7 | 0x50, + 33490 - 19968: jis0208<<14 | 0x46<<7 | 0x51, + 33491 - 19968: jis0208<<14 | 0x2D<<7 | 0x49, + 33492 - 19968: jis0208<<14 | 0x21<<7 | 0x3C, + 33493 - 19968: jis0212<<14 | 0x36<<7 | 0x2F, + 33495 - 19968: jis0208<<14 | 0x28<<7 | 0x23, + 33497 - 19968: jis0208<<14 | 0x46<<7 | 0x5D, + 33498 - 19968: jis0212<<14 | 0x36<<7 | 0x30, + 33499 - 19968: jis0208<<14 | 0x11<<7 | 0x36, + 33500 - 19968: jis0208<<14 | 0x46<<7 | 0x5B, + 33502 - 19968: jis0208<<14 | 0x46<<7 | 0x59, + 33503 - 19968: jis0208<<14 | 0x46<<7 | 0x50, + 33504 - 19968: jis0212<<14 | 0x36<<7 | 0x31, + 33505 - 19968: jis0208<<14 | 0x46<<7 | 0x4E, + 33506 - 19968: jis0212<<14 | 0x36<<7 | 0x32, + 33507 - 19968: jis0208<<14 | 0x46<<7 | 0x4F, + 33508 - 19968: jis0212<<14 | 0x36<<7 | 0x33, + 33509 - 19968: jis0208<<14 | 0x1B<<7 | 0x42, + 33510 - 19968: jis0208<<14 | 0x15<<7 | 0x4B, + 33511 - 19968: jis0208<<14 | 0x22<<7 | 0x56, + 33512 - 19968: jis0212<<14 | 0x36<<7 | 0x34, + 33514 - 19968: jis0212<<14 | 0x36<<7 | 0x35, + 33515 - 19968: jis0208<<14 | 0x25<<7 | 0x30, + 33517 - 19968: jis0212<<14 | 0x36<<7 | 0x36, + 33519 - 19968: jis0212<<14 | 0x36<<7 | 0x37, + 33521 - 19968: jis0208<<14 | 0x10<<7 | 0x30, + 33523 - 19968: jis0208<<14 | 0x46<<7 | 0x53, + 33524 - 19968: jis0208<<14 | 0x46<<7 | 0x52, + 33526 - 19968: jis0212<<14 | 0x36<<7 | 0x38, + 33527 - 19968: jis0212<<14 | 0x36<<7 | 0x39, + 33529 - 19968: jis0208<<14 | 0x46<<7 | 0x58, + 33530 - 19968: jis0208<<14 | 0x46<<7 | 0x54, + 33531 - 19968: jis0208<<14 | 0x46<<7 | 0x57, + 33533 - 19968: jis0212<<14 | 0x36<<7 | 0x3A, + 33534 - 19968: jis0212<<14 | 0x36<<7 | 0x3B, + 33536 - 19968: jis0212<<14 | 0x36<<7 | 0x3C, + 33537 - 19968: jis0208<<14 | 0x5A<<7 | 0x36, + 33538 - 19968: jis0208<<14 | 0x2B<<7 | 0x2F, + 33539 - 19968: jis0208<<14 | 0x46<<7 | 0x56, + 33540 - 19968: jis0208<<14 | 0x11<<7 | 0x37, + 33541 - 19968: jis0208<<14 | 0x12<<7 | 0x5C, + 33542 - 19968: jis0208<<14 | 0x46<<7 | 0x5A, + 33543 - 19968: jis0212<<14 | 0x36<<7 | 0x3E, + 33544 - 19968: jis0212<<14 | 0x36<<7 | 0x3F, + 33545 - 19968: jis0208<<14 | 0x46<<7 | 0x5C, + 33546 - 19968: jis0212<<14 | 0x36<<7 | 0x40, + 33547 - 19968: jis0212<<14 | 0x36<<7 | 0x41, + 33550 - 19968: jis0208<<14 | 0x16<<7 | 0x33, + 33558 - 19968: jis0208<<14 | 0x47<<7 | 0x02, + 33559 - 19968: jis0208<<14 | 0x47<<7 | 0x0B, + 33560 - 19968: jis0208<<14 | 0x47<<7 | 0x0C, + 33563 - 19968: jis0212<<14 | 0x36<<7 | 0x43, + 33564 - 19968: jis0208<<14 | 0x0F<<7 | 0x0A, + 33565 - 19968: jis0212<<14 | 0x36<<7 | 0x44, + 33566 - 19968: jis0212<<14 | 0x36<<7 | 0x45, + 33567 - 19968: jis0212<<14 | 0x36<<7 | 0x46, + 33569 - 19968: jis0212<<14 | 0x36<<7 | 0x47, + 33570 - 19968: jis0212<<14 | 0x36<<7 | 0x48, + 33571 - 19968: jis0208<<14 | 0x47<<7 | 0x13, + 33576 - 19968: jis0208<<14 | 0x0F<<7 | 0x50, + 33579 - 19968: jis0208<<14 | 0x47<<7 | 0x0A, + 33580 - 19968: jis0212<<14 | 0x36<<7 | 0x49, + 33581 - 19968: jis0212<<14 | 0x36<<7 | 0x4A, + 33582 - 19968: jis0212<<14 | 0x36<<7 | 0x4B, + 33583 - 19968: jis0208<<14 | 0x47<<7 | 0x09, + 33584 - 19968: jis0212<<14 | 0x36<<7 | 0x4C, + 33585 - 19968: jis0208<<14 | 0x47<<7 | 0x04, + 33586 - 19968: jis0208<<14 | 0x47<<7 | 0x03, + 33587 - 19968: jis0212<<14 | 0x36<<7 | 0x4D, + 33588 - 19968: jis0208<<14 | 0x47<<7 | 0x01, + 33589 - 19968: jis0208<<14 | 0x47<<7 | 0x00, + 33590 - 19968: jis0208<<14 | 0x22<<7 | 0x42, + 33591 - 19968: jis0212<<14 | 0x36<<7 | 0x4E, + 33592 - 19968: jis0208<<14 | 0x21<<7 | 0x5A, + 33593 - 19968: jis0208<<14 | 0x47<<7 | 0x06, + 33594 - 19968: jis0212<<14 | 0x36<<7 | 0x4F, + 33596 - 19968: jis0212<<14 | 0x36<<7 | 0x50, + 33597 - 19968: jis0212<<14 | 0x36<<7 | 0x51, + 33600 - 19968: jis0208<<14 | 0x47<<7 | 0x05, + 33602 - 19968: jis0212<<14 | 0x36<<7 | 0x52, + 33603 - 19968: jis0212<<14 | 0x36<<7 | 0x53, + 33604 - 19968: jis0212<<14 | 0x36<<7 | 0x54, + 33605 - 19968: jis0208<<14 | 0x47<<7 | 0x08, + 33607 - 19968: jis0212<<14 | 0x36<<7 | 0x55, + 33609 - 19968: jis0208<<14 | 0x20<<7 | 0x4F, + 33610 - 19968: jis0208<<14 | 0x16<<7 | 0x34, + 33613 - 19968: jis0212<<14 | 0x36<<7 | 0x56, + 33614 - 19968: jis0212<<14 | 0x36<<7 | 0x57, + 33615 - 19968: jis0208<<14 | 0x10<<7 | 0x20, + 33616 - 19968: jis0208<<14 | 0x47<<7 | 0x07, + 33617 - 19968: jis0212<<14 | 0x36<<7 | 0x58, + 33618 - 19968: jis0208<<14 | 0x18<<7 | 0x32, + 33619 - 19968: jis0212<<14 | 0x37<<7 | 0x1D, + 33620 - 19968: jis0212<<14 | 0x36<<7 | 0x42, + 33621 - 19968: jis0212<<14 | 0x36<<7 | 0x59, + 33622 - 19968: jis0212<<14 | 0x36<<7 | 0x5A, + 33623 - 19968: jis0212<<14 | 0x36<<7 | 0x5B, + 33624 - 19968: jis0208<<14 | 0x20<<7 | 0x50, + 33634 - 19968: jis0208<<14 | 0x5A<<7 | 0x37, + 33648 - 19968: jis0212<<14 | 0x36<<7 | 0x5C, + 33651 - 19968: jis0208<<14 | 0x47<<7 | 0x19, + 33653 - 19968: jis0208<<14 | 0x47<<7 | 0x1A, + 33655 - 19968: jis0208<<14 | 0x11<<7 | 0x38, + 33656 - 19968: jis0212<<14 | 0x36<<7 | 0x5D, + 33659 - 19968: jis0208<<14 | 0x11<<7 | 0x0D, + 33660 - 19968: jis0208<<14 | 0x47<<7 | 0x17, + 33661 - 19968: jis0212<<14 | 0x37<<7 | 0x00, + 33663 - 19968: jis0208<<14 | 0x5A<<7 | 0x38, + 33664 - 19968: jis0212<<14 | 0x37<<7 | 0x02, + 33666 - 19968: jis0212<<14 | 0x37<<7 | 0x03, + 33668 - 19968: jis0212<<14 | 0x37<<7 | 0x04, + 33669 - 19968: jis0208<<14 | 0x47<<7 | 0x0D, + 33670 - 19968: jis0212<<14 | 0x37<<7 | 0x05, + 33671 - 19968: jis0208<<14 | 0x47<<7 | 0x15, + 33673 - 19968: jis0208<<14 | 0x47<<7 | 0x1C, + 33674 - 19968: jis0208<<14 | 0x47<<7 | 0x16, + 33677 - 19968: jis0212<<14 | 0x37<<7 | 0x06, + 33678 - 19968: jis0208<<14 | 0x47<<7 | 0x14, + 33682 - 19968: jis0212<<14 | 0x37<<7 | 0x07, + 33683 - 19968: jis0208<<14 | 0x46<<7 | 0x55, + 33684 - 19968: jis0212<<14 | 0x37<<7 | 0x08, + 33685 - 19968: jis0212<<14 | 0x37<<7 | 0x09, + 33686 - 19968: jis0208<<14 | 0x47<<7 | 0x12, + 33688 - 19968: jis0212<<14 | 0x37<<7 | 0x0A, + 33689 - 19968: jis0212<<14 | 0x37<<7 | 0x0B, + 33690 - 19968: jis0208<<14 | 0x47<<7 | 0x0E, + 33691 - 19968: jis0212<<14 | 0x37<<7 | 0x0C, + 33692 - 19968: jis0212<<14 | 0x37<<7 | 0x0D, + 33693 - 19968: jis0212<<14 | 0x37<<7 | 0x0E, + 33694 - 19968: jis0208<<14 | 0x13<<7 | 0x2F, + 33695 - 19968: jis0208<<14 | 0x47<<7 | 0x10, + 33696 - 19968: jis0208<<14 | 0x47<<7 | 0x1B, + 33698 - 19968: jis0208<<14 | 0x47<<7 | 0x11, + 33702 - 19968: jis0212<<14 | 0x37<<7 | 0x0F, + 33703 - 19968: jis0212<<14 | 0x37<<7 | 0x10, + 33704 - 19968: jis0208<<14 | 0x47<<7 | 0x1D, + 33705 - 19968: jis0212<<14 | 0x37<<7 | 0x11, + 33706 - 19968: jis0208<<14 | 0x47<<7 | 0x0F, + 33707 - 19968: jis0208<<14 | 0x26<<7 | 0x5B, + 33708 - 19968: jis0212<<14 | 0x37<<7 | 0x12, + 33709 - 19968: jis0212<<14 | 0x37<<7 | 0x2B, + 33713 - 19968: jis0208<<14 | 0x2C<<7 | 0x48, + 33717 - 19968: jis0208<<14 | 0x47<<7 | 0x18, + 33725 - 19968: jis0208<<14 | 0x47<<7 | 0x2E, + 33726 - 19968: jis0212<<14 | 0x37<<7 | 0x13, + 33727 - 19968: jis0212<<14 | 0x37<<7 | 0x14, + 33728 - 19968: jis0212<<14 | 0x37<<7 | 0x15, + 33729 - 19968: jis0208<<14 | 0x47<<7 | 0x26, + 33733 - 19968: jis0208<<14 | 0x1E<<7 | 0x5A, + 33735 - 19968: jis0208<<14 | 0x5A<<7 | 0x39, + 33737 - 19968: jis0212<<14 | 0x37<<7 | 0x17, + 33738 - 19968: jis0208<<14 | 0x14<<7 | 0x25, + 33740 - 19968: jis0208<<14 | 0x15<<7 | 0x3C, + 33742 - 19968: jis0208<<14 | 0x47<<7 | 0x21, + 33743 - 19968: jis0212<<14 | 0x37<<7 | 0x18, + 33744 - 19968: jis0212<<14 | 0x37<<7 | 0x19, + 33745 - 19968: jis0212<<14 | 0x37<<7 | 0x1A, + 33747 - 19968: jis0208<<14 | 0x11<<7 | 0x3A, + 33748 - 19968: jis0212<<14 | 0x37<<7 | 0x1B, + 33750 - 19968: jis0208<<14 | 0x1D<<7 | 0x33, + 33752 - 19968: jis0208<<14 | 0x47<<7 | 0x24, + 33756 - 19968: jis0208<<14 | 0x19<<7 | 0x39, + 33757 - 19968: jis0212<<14 | 0x37<<7 | 0x1C, + 33759 - 19968: jis0208<<14 | 0x24<<7 | 0x30, + 33760 - 19968: jis0208<<14 | 0x47<<7 | 0x29, + 33768 - 19968: jis0212<<14 | 0x37<<7 | 0x1E, + 33769 - 19968: jis0208<<14 | 0x29<<7 | 0x4D, + 33770 - 19968: jis0212<<14 | 0x37<<7 | 0x1F, + 33771 - 19968: jis0208<<14 | 0x47<<7 | 0x20, + 33775 - 19968: jis0208<<14 | 0x11<<7 | 0x39, + 33776 - 19968: jis0208<<14 | 0x17<<7 | 0x35, + 33777 - 19968: jis0208<<14 | 0x28<<7 | 0x08, + 33778 - 19968: jis0208<<14 | 0x47<<7 | 0x2A, + 33780 - 19968: jis0208<<14 | 0x47<<7 | 0x1E, + 33782 - 19968: jis0208<<14 | 0x5A<<7 | 0x3A, + 33783 - 19968: jis0208<<14 | 0x47<<7 | 0x27, + 33784 - 19968: jis0212<<14 | 0x37<<7 | 0x21, + 33785 - 19968: jis0212<<14 | 0x37<<7 | 0x22, + 33787 - 19968: jis0208<<14 | 0x47<<7 | 0x31, + 33788 - 19968: jis0212<<14 | 0x37<<7 | 0x23, + 33789 - 19968: jis0208<<14 | 0x47<<7 | 0x22, + 33793 - 19968: jis0212<<14 | 0x37<<7 | 0x24, + 33795 - 19968: jis0208<<14 | 0x47<<7 | 0x23, + 33796 - 19968: jis0208<<14 | 0x25<<7 | 0x19, + 33798 - 19968: jis0212<<14 | 0x37<<7 | 0x25, + 33799 - 19968: jis0208<<14 | 0x47<<7 | 0x28, + 33802 - 19968: jis0212<<14 | 0x37<<7 | 0x26, + 33803 - 19968: jis0208<<14 | 0x47<<7 | 0x25, + 33804 - 19968: jis0208<<14 | 0x2A<<7 | 0x07, + 33805 - 19968: jis0208<<14 | 0x47<<7 | 0x2B, + 33806 - 19968: jis0208<<14 | 0x0F<<7 | 0x3F, + 33807 - 19968: jis0212<<14 | 0x37<<7 | 0x27, + 33809 - 19968: jis0212<<14 | 0x37<<7 | 0x28, + 33811 - 19968: jis0208<<14 | 0x47<<7 | 0x1F, + 33813 - 19968: jis0212<<14 | 0x37<<7 | 0x29, + 33817 - 19968: jis0212<<14 | 0x37<<7 | 0x2A, + 33824 - 19968: jis0208<<14 | 0x47<<7 | 0x2D, + 33826 - 19968: jis0208<<14 | 0x47<<7 | 0x2C, + 33833 - 19968: jis0208<<14 | 0x26<<7 | 0x4A, + 33834 - 19968: jis0208<<14 | 0x47<<7 | 0x33, + 33836 - 19968: jis0208<<14 | 0x47<<7 | 0x3E, + 33839 - 19968: jis0212<<14 | 0x37<<7 | 0x2C, + 33841 - 19968: jis0208<<14 | 0x12<<7 | 0x5D, + 33845 - 19968: jis0208<<14 | 0x47<<7 | 0x41, + 33848 - 19968: jis0208<<14 | 0x47<<7 | 0x2F, + 33849 - 19968: jis0212<<14 | 0x37<<7 | 0x2D, + 33852 - 19968: jis0208<<14 | 0x47<<7 | 0x34, + 33853 - 19968: jis0208<<14 | 0x2C<<7 | 0x4D, + 33861 - 19968: jis0212<<14 | 0x37<<7 | 0x2E, + 33862 - 19968: jis0208<<14 | 0x47<<7 | 0x3D, + 33863 - 19968: jis0212<<14 | 0x37<<7 | 0x2F, + 33864 - 19968: jis0208<<14 | 0x5A<<7 | 0x3B, + 33865 - 19968: jis0208<<14 | 0x2C<<7 | 0x34, + 33866 - 19968: jis0212<<14 | 0x37<<7 | 0x31, + 33869 - 19968: jis0212<<14 | 0x37<<7 | 0x32, + 33870 - 19968: jis0208<<14 | 0x2D<<7 | 0x09, + 33871 - 19968: jis0212<<14 | 0x37<<7 | 0x33, + 33873 - 19968: jis0212<<14 | 0x37<<7 | 0x34, + 33874 - 19968: jis0212<<14 | 0x37<<7 | 0x35, + 33878 - 19968: jis0212<<14 | 0x37<<7 | 0x36, + 33879 - 19968: jis0208<<14 | 0x22<<7 | 0x57, + 33880 - 19968: jis0212<<14 | 0x37<<7 | 0x37, + 33881 - 19968: jis0212<<14 | 0x37<<7 | 0x38, + 33882 - 19968: jis0212<<14 | 0x37<<7 | 0x39, + 33883 - 19968: jis0208<<14 | 0x12<<7 | 0x4A, + 33884 - 19968: jis0212<<14 | 0x37<<7 | 0x3A, + 33888 - 19968: jis0212<<14 | 0x37<<7 | 0x3B, + 33889 - 19968: jis0208<<14 | 0x28<<7 | 0x51, + 33890 - 19968: jis0208<<14 | 0x47<<7 | 0x43, + 33891 - 19968: jis0208<<14 | 0x25<<7 | 0x00, + 33892 - 19968: jis0212<<14 | 0x37<<7 | 0x3C, + 33893 - 19968: jis0212<<14 | 0x37<<7 | 0x3D, + 33894 - 19968: jis0208<<14 | 0x0F<<7 | 0x10, + 33895 - 19968: jis0212<<14 | 0x37<<7 | 0x3E, + 33897 - 19968: jis0208<<14 | 0x47<<7 | 0x3C, + 33898 - 19968: jis0212<<14 | 0x37<<7 | 0x3F, + 33899 - 19968: jis0208<<14 | 0x47<<7 | 0x38, + 33900 - 19968: jis0208<<14 | 0x20<<7 | 0x51, + 33901 - 19968: jis0208<<14 | 0x47<<7 | 0x32, + 33902 - 19968: jis0208<<14 | 0x47<<7 | 0x3A, + 33903 - 19968: jis0208<<14 | 0x47<<7 | 0x3F, + 33904 - 19968: jis0212<<14 | 0x37<<7 | 0x40, + 33905 - 19968: jis0208<<14 | 0x26<<7 | 0x0B, + 33907 - 19968: jis0212<<14 | 0x37<<7 | 0x41, + 33908 - 19968: jis0212<<14 | 0x37<<7 | 0x42, + 33909 - 19968: jis0208<<14 | 0x0F<<7 | 0x09, + 33910 - 19968: jis0212<<14 | 0x37<<7 | 0x43, + 33911 - 19968: jis0208<<14 | 0x47<<7 | 0x37, + 33912 - 19968: jis0212<<14 | 0x37<<7 | 0x44, + 33913 - 19968: jis0208<<14 | 0x47<<7 | 0x40, + 33914 - 19968: jis0208<<14 | 0x28<<7 | 0x57, + 33916 - 19968: jis0212<<14 | 0x37<<7 | 0x45, + 33917 - 19968: jis0212<<14 | 0x37<<7 | 0x46, + 33921 - 19968: jis0212<<14 | 0x37<<7 | 0x47, + 33922 - 19968: jis0208<<14 | 0x47<<7 | 0x3B, + 33924 - 19968: jis0208<<14 | 0x47<<7 | 0x36, + 33925 - 19968: jis0212<<14 | 0x37<<7 | 0x48, + 33931 - 19968: jis0208<<14 | 0x1D<<7 | 0x34, + 33936 - 19968: jis0208<<14 | 0x1C<<7 | 0x0E, + 33938 - 19968: jis0212<<14 | 0x37<<7 | 0x49, + 33939 - 19968: jis0212<<14 | 0x37<<7 | 0x4A, + 33940 - 19968: jis0208<<14 | 0x1B<<7 | 0x0B, + 33941 - 19968: jis0212<<14 | 0x37<<7 | 0x4B, + 33945 - 19968: jis0208<<14 | 0x2B<<7 | 0x37, + 33948 - 19968: jis0208<<14 | 0x28<<7 | 0x26, + 33950 - 19968: jis0212<<14 | 0x37<<7 | 0x4C, + 33951 - 19968: jis0208<<14 | 0x47<<7 | 0x46, + 33953 - 19968: jis0208<<14 | 0x47<<7 | 0x4F, + 33958 - 19968: jis0212<<14 | 0x37<<7 | 0x4D, + 33960 - 19968: jis0212<<14 | 0x37<<7 | 0x4E, + 33961 - 19968: jis0212<<14 | 0x37<<7 | 0x4F, + 33962 - 19968: jis0212<<14 | 0x37<<7 | 0x50, + 33965 - 19968: jis0208<<14 | 0x47<<7 | 0x39, + 33967 - 19968: jis0212<<14 | 0x37<<7 | 0x51, + 33969 - 19968: jis0212<<14 | 0x37<<7 | 0x52, + 33970 - 19968: jis0208<<14 | 0x12<<7 | 0x56, + 33972 - 19968: jis0208<<14 | 0x5A<<7 | 0x3C, + 33976 - 19968: jis0208<<14 | 0x1D<<7 | 0x57, + 33977 - 19968: jis0208<<14 | 0x47<<7 | 0x44, + 33978 - 19968: jis0212<<14 | 0x37<<7 | 0x54, + 33979 - 19968: jis0208<<14 | 0x47<<7 | 0x49, + 33980 - 19968: jis0208<<14 | 0x20<<7 | 0x52, + 33981 - 19968: jis0212<<14 | 0x37<<7 | 0x55, + 33982 - 19968: jis0212<<14 | 0x37<<7 | 0x56, + 33983 - 19968: jis0208<<14 | 0x47<<7 | 0x45, + 33984 - 19968: jis0212<<14 | 0x37<<7 | 0x57, + 33985 - 19968: jis0208<<14 | 0x47<<7 | 0x4C, + 33986 - 19968: jis0212<<14 | 0x37<<7 | 0x58, + 33988 - 19968: jis0208<<14 | 0x22<<7 | 0x3E, + 33990 - 19968: jis0208<<14 | 0x47<<7 | 0x4D, + 33991 - 19968: jis0212<<14 | 0x37<<7 | 0x59, + 33992 - 19968: jis0212<<14 | 0x37<<7 | 0x5A, + 33993 - 19968: jis0208<<14 | 0x2C<<7 | 0x35, + 33994 - 19968: jis0208<<14 | 0x47<<7 | 0x42, + 33995 - 19968: jis0208<<14 | 0x12<<7 | 0x17, + 33996 - 19968: jis0212<<14 | 0x37<<7 | 0x5B, + 33997 - 19968: jis0208<<14 | 0x47<<7 | 0x48, + 33999 - 19968: jis0212<<14 | 0x37<<7 | 0x5C, + 34000 - 19968: jis0208<<14 | 0x47<<7 | 0x4B, + 34001 - 19968: jis0208<<14 | 0x2B<<7 | 0x0B, + 34003 - 19968: jis0212<<14 | 0x37<<7 | 0x5D, + 34006 - 19968: jis0208<<14 | 0x47<<7 | 0x4E, + 34009 - 19968: jis0208<<14 | 0x47<<7 | 0x47, + 34010 - 19968: jis0208<<14 | 0x47<<7 | 0x4A, + 34012 - 19968: jis0208<<14 | 0x58<<7 | 0x04, + 34023 - 19968: jis0212<<14 | 0x38<<7 | 0x01, + 34026 - 19968: jis0212<<14 | 0x38<<7 | 0x02, + 34028 - 19968: jis0208<<14 | 0x2A<<7 | 0x08, + 34030 - 19968: jis0208<<14 | 0x2E<<7 | 0x00, + 34031 - 19968: jis0212<<14 | 0x38<<7 | 0x03, + 34032 - 19968: jis0212<<14 | 0x38<<7 | 0x04, + 34033 - 19968: jis0212<<14 | 0x38<<7 | 0x05, + 34034 - 19968: jis0212<<14 | 0x38<<7 | 0x06, + 34036 - 19968: jis0208<<14 | 0x47<<7 | 0x52, + 34039 - 19968: jis0212<<14 | 0x38<<7 | 0x07, + 34042 - 19968: jis0212<<14 | 0x38<<7 | 0x09, + 34043 - 19968: jis0212<<14 | 0x38<<7 | 0x0A, + 34044 - 19968: jis0208<<14 | 0x47<<7 | 0x59, + 34045 - 19968: jis0212<<14 | 0x38<<7 | 0x0B, + 34047 - 19968: jis0208<<14 | 0x47<<7 | 0x51, + 34048 - 19968: jis0208<<14 | 0x1B<<7 | 0x22, + 34050 - 19968: jis0212<<14 | 0x38<<7 | 0x0C, + 34051 - 19968: jis0212<<14 | 0x38<<7 | 0x0D, + 34054 - 19968: jis0208<<14 | 0x47<<7 | 0x30, + 34055 - 19968: jis0212<<14 | 0x38<<7 | 0x0E, + 34060 - 19968: jis0212<<14 | 0x38<<7 | 0x0F, + 34062 - 19968: jis0212<<14 | 0x38<<7 | 0x10, + 34064 - 19968: jis0212<<14 | 0x38<<7 | 0x11, + 34065 - 19968: jis0208<<14 | 0x29<<7 | 0x2D, + 34067 - 19968: jis0208<<14 | 0x2B<<7 | 0x01, + 34068 - 19968: jis0208<<14 | 0x47<<7 | 0x58, + 34069 - 19968: jis0208<<14 | 0x47<<7 | 0x57, + 34071 - 19968: jis0208<<14 | 0x47<<7 | 0x53, + 34072 - 19968: jis0208<<14 | 0x47<<7 | 0x54, + 34074 - 19968: jis0208<<14 | 0x10<<7 | 0x15, + 34076 - 19968: jis0212<<14 | 0x38<<7 | 0x12, + 34078 - 19968: jis0212<<14 | 0x38<<7 | 0x13, + 34079 - 19968: jis0208<<14 | 0x47<<7 | 0x56, + 34081 - 19968: jis0208<<14 | 0x47<<7 | 0x50, + 34082 - 19968: jis0212<<14 | 0x38<<7 | 0x14, + 34083 - 19968: jis0212<<14 | 0x38<<7 | 0x15, + 34084 - 19968: jis0212<<14 | 0x38<<7 | 0x16, + 34085 - 19968: jis0212<<14 | 0x38<<7 | 0x17, + 34086 - 19968: jis0208<<14 | 0x23<<7 | 0x34, + 34087 - 19968: jis0212<<14 | 0x38<<7 | 0x18, + 34090 - 19968: jis0212<<14 | 0x38<<7 | 0x19, + 34091 - 19968: jis0212<<14 | 0x38<<7 | 0x1A, + 34092 - 19968: jis0208<<14 | 0x47<<7 | 0x55, + 34093 - 19968: jis0208<<14 | 0x0F<<7 | 0x5D, + 34095 - 19968: jis0212<<14 | 0x38<<7 | 0x1B, + 34098 - 19968: jis0212<<14 | 0x38<<7 | 0x08, + 34099 - 19968: jis0212<<14 | 0x38<<7 | 0x1C, + 34100 - 19968: jis0212<<14 | 0x38<<7 | 0x1D, + 34101 - 19968: jis0208<<14 | 0x21<<7 | 0x01, + 34102 - 19968: jis0212<<14 | 0x38<<7 | 0x1E, + 34109 - 19968: jis0208<<14 | 0x29<<7 | 0x22, + 34111 - 19968: jis0212<<14 | 0x38<<7 | 0x1F, + 34112 - 19968: jis0208<<14 | 0x47<<7 | 0x5A, + 34113 - 19968: jis0208<<14 | 0x48<<7 | 0x00, + 34115 - 19968: jis0208<<14 | 0x27<<7 | 0x38, + 34118 - 19968: jis0212<<14 | 0x38<<7 | 0x20, + 34120 - 19968: jis0208<<14 | 0x47<<7 | 0x5D, + 34121 - 19968: jis0208<<14 | 0x1D<<7 | 0x35, + 34122 - 19968: jis0208<<14 | 0x1B<<7 | 0x28, + 34123 - 19968: jis0208<<14 | 0x48<<7 | 0x02, + 34126 - 19968: jis0208<<14 | 0x15<<7 | 0x1D, + 34127 - 19968: jis0212<<14 | 0x38<<7 | 0x21, + 34128 - 19968: jis0212<<14 | 0x38<<7 | 0x22, + 34129 - 19968: jis0212<<14 | 0x38<<7 | 0x23, + 34130 - 19968: jis0212<<14 | 0x38<<7 | 0x24, + 34131 - 19968: jis0208<<14 | 0x5A<<7 | 0x3D, + 34133 - 19968: jis0208<<14 | 0x48<<7 | 0x03, + 34134 - 19968: jis0212<<14 | 0x38<<7 | 0x26, + 34135 - 19968: jis0208<<14 | 0x28<<7 | 0x58, + 34136 - 19968: jis0208<<14 | 0x47<<7 | 0x5C, + 34137 - 19968: jis0208<<14 | 0x5A<<7 | 0x3E, + 34138 - 19968: jis0208<<14 | 0x47<<7 | 0x35, + 34140 - 19968: jis0212<<14 | 0x38<<7 | 0x28, + 34141 - 19968: jis0212<<14 | 0x38<<7 | 0x29, + 34142 - 19968: jis0212<<14 | 0x38<<7 | 0x2A, + 34143 - 19968: jis0212<<14 | 0x38<<7 | 0x2B, + 34144 - 19968: jis0212<<14 | 0x38<<7 | 0x2C, + 34145 - 19968: jis0212<<14 | 0x38<<7 | 0x2D, + 34146 - 19968: jis0212<<14 | 0x38<<7 | 0x2E, + 34147 - 19968: jis0208<<14 | 0x47<<7 | 0x5B, + 34148 - 19968: jis0212<<14 | 0x38<<7 | 0x2F, + 34152 - 19968: jis0208<<14 | 0x2E<<7 | 0x2E, + 34153 - 19968: jis0208<<14 | 0x25<<7 | 0x01, + 34154 - 19968: jis0208<<14 | 0x28<<7 | 0x52, + 34155 - 19968: jis0208<<14 | 0x5A<<7 | 0x3F, + 34157 - 19968: jis0208<<14 | 0x48<<7 | 0x0A, + 34159 - 19968: jis0212<<14 | 0x38<<7 | 0x31, + 34167 - 19968: jis0208<<14 | 0x48<<7 | 0x10, + 34169 - 19968: jis0212<<14 | 0x38<<7 | 0x32, + 34170 - 19968: jis0212<<14 | 0x38<<7 | 0x33, + 34171 - 19968: jis0212<<14 | 0x38<<7 | 0x34, + 34173 - 19968: jis0212<<14 | 0x38<<7 | 0x35, + 34174 - 19968: jis0208<<14 | 0x48<<7 | 0x11, + 34175 - 19968: jis0212<<14 | 0x38<<7 | 0x36, + 34176 - 19968: jis0208<<14 | 0x48<<7 | 0x04, + 34177 - 19968: jis0212<<14 | 0x38<<7 | 0x37, + 34180 - 19968: jis0208<<14 | 0x26<<7 | 0x55, + 34181 - 19968: jis0212<<14 | 0x38<<7 | 0x38, + 34182 - 19968: jis0212<<14 | 0x38<<7 | 0x39, + 34183 - 19968: jis0208<<14 | 0x48<<7 | 0x0E, + 34184 - 19968: jis0208<<14 | 0x48<<7 | 0x06, + 34185 - 19968: jis0212<<14 | 0x38<<7 | 0x3A, + 34186 - 19968: jis0208<<14 | 0x48<<7 | 0x08, + 34187 - 19968: jis0212<<14 | 0x38<<7 | 0x3B, + 34188 - 19968: jis0212<<14 | 0x38<<7 | 0x3C, + 34191 - 19968: jis0212<<14 | 0x38<<7 | 0x3D, + 34192 - 19968: jis0208<<14 | 0x48<<7 | 0x12, + 34193 - 19968: jis0208<<14 | 0x48<<7 | 0x07, + 34195 - 19968: jis0212<<14 | 0x38<<7 | 0x3E, + 34196 - 19968: jis0208<<14 | 0x48<<7 | 0x0B, + 34199 - 19968: jis0208<<14 | 0x10<<7 | 0x51, + 34200 - 19968: jis0212<<14 | 0x38<<7 | 0x3F, + 34201 - 19968: jis0208<<14 | 0x25<<7 | 0x44, + 34203 - 19968: jis0208<<14 | 0x48<<7 | 0x0C, + 34204 - 19968: jis0208<<14 | 0x48<<7 | 0x0F, + 34205 - 19968: jis0212<<14 | 0x38<<7 | 0x40, + 34207 - 19968: jis0212<<14 | 0x38<<7 | 0x41, + 34208 - 19968: jis0212<<14 | 0x38<<7 | 0x42, + 34210 - 19968: jis0212<<14 | 0x38<<7 | 0x43, + 34212 - 19968: jis0208<<14 | 0x48<<7 | 0x05, + 34213 - 19968: jis0212<<14 | 0x38<<7 | 0x44, + 34214 - 19968: jis0208<<14 | 0x20<<7 | 0x05, + 34215 - 19968: jis0212<<14 | 0x38<<7 | 0x45, + 34216 - 19968: jis0208<<14 | 0x48<<7 | 0x09, + 34217 - 19968: jis0208<<14 | 0x1A<<7 | 0x06, + 34218 - 19968: jis0208<<14 | 0x1E<<7 | 0x24, + 34219 - 19968: jis0208<<14 | 0x16<<7 | 0x0F, + 34220 - 19968: jis0208<<14 | 0x2B<<7 | 0x53, + 34221 - 19968: jis0212<<14 | 0x38<<7 | 0x53, + 34222 - 19968: jis0208<<14 | 0x2B<<7 | 0x58, + 34223 - 19968: jis0208<<14 | 0x1C<<7 | 0x51, + 34224 - 19968: jis0208<<14 | 0x5A<<7 | 0x41, + 34228 - 19968: jis0212<<14 | 0x38<<7 | 0x46, + 34230 - 19968: jis0212<<14 | 0x38<<7 | 0x47, + 34231 - 19968: jis0212<<14 | 0x38<<7 | 0x48, + 34232 - 19968: jis0212<<14 | 0x38<<7 | 0x49, + 34233 - 19968: jis0208<<14 | 0x48<<7 | 0x16, + 34234 - 19968: jis0208<<14 | 0x48<<7 | 0x14, + 34236 - 19968: jis0212<<14 | 0x38<<7 | 0x4A, + 34237 - 19968: jis0212<<14 | 0x38<<7 | 0x4B, + 34238 - 19968: jis0212<<14 | 0x38<<7 | 0x4C, + 34239 - 19968: jis0212<<14 | 0x38<<7 | 0x4D, + 34241 - 19968: jis0208<<14 | 0x2E<<7 | 0x2D, + 34242 - 19968: jis0212<<14 | 0x38<<7 | 0x4E, + 34247 - 19968: jis0212<<14 | 0x38<<7 | 0x4F, + 34249 - 19968: jis0208<<14 | 0x48<<7 | 0x13, + 34250 - 19968: jis0212<<14 | 0x38<<7 | 0x50, + 34251 - 19968: jis0212<<14 | 0x38<<7 | 0x51, + 34253 - 19968: jis0208<<14 | 0x2C<<7 | 0x54, + 34254 - 19968: jis0212<<14 | 0x38<<7 | 0x52, + 34255 - 19968: jis0208<<14 | 0x48<<7 | 0x15, + 34256 - 19968: jis0208<<14 | 0x48<<7 | 0x17, + 34261 - 19968: jis0208<<14 | 0x48<<7 | 0x18, + 34264 - 19968: jis0212<<14 | 0x38<<7 | 0x54, + 34266 - 19968: jis0212<<14 | 0x38<<7 | 0x55, + 34268 - 19968: jis0208<<14 | 0x48<<7 | 0x1B, + 34269 - 19968: jis0208<<14 | 0x48<<7 | 0x19, + 34271 - 19968: jis0212<<14 | 0x38<<7 | 0x56, + 34272 - 19968: jis0212<<14 | 0x38<<7 | 0x57, + 34276 - 19968: jis0208<<14 | 0x25<<7 | 0x02, + 34277 - 19968: jis0208<<14 | 0x48<<7 | 0x1A, + 34278 - 19968: jis0212<<14 | 0x38<<7 | 0x58, + 34280 - 19968: jis0212<<14 | 0x38<<7 | 0x59, + 34281 - 19968: jis0208<<14 | 0x27<<7 | 0x2C, + 34282 - 19968: jis0208<<14 | 0x48<<7 | 0x0D, + 34285 - 19968: jis0212<<14 | 0x38<<7 | 0x5A, + 34291 - 19968: jis0212<<14 | 0x38<<7 | 0x5B, + 34294 - 19968: jis0212<<14 | 0x38<<7 | 0x5C, + 34295 - 19968: jis0208<<14 | 0x1C<<7 | 0x52, + 34297 - 19968: jis0208<<14 | 0x48<<7 | 0x1C, + 34298 - 19968: jis0208<<14 | 0x48<<7 | 0x21, + 34299 - 19968: jis0208<<14 | 0x20<<7 | 0x53, + 34300 - 19968: jis0212<<14 | 0x38<<7 | 0x5D, + 34302 - 19968: jis0208<<14 | 0x48<<7 | 0x20, + 34303 - 19968: jis0212<<14 | 0x39<<7 | 0x00, + 34304 - 19968: jis0212<<14 | 0x39<<7 | 0x01, + 34306 - 19968: jis0208<<14 | 0x48<<7 | 0x01, + 34308 - 19968: jis0212<<14 | 0x39<<7 | 0x02, + 34309 - 19968: jis0212<<14 | 0x39<<7 | 0x03, + 34310 - 19968: jis0208<<14 | 0x48<<7 | 0x22, + 34311 - 19968: jis0208<<14 | 0x20<<7 | 0x28, + 34314 - 19968: jis0208<<14 | 0x48<<7 | 0x1D, + 34315 - 19968: jis0208<<14 | 0x48<<7 | 0x1F, + 34317 - 19968: jis0212<<14 | 0x39<<7 | 0x04, + 34318 - 19968: jis0212<<14 | 0x39<<7 | 0x05, + 34320 - 19968: jis0212<<14 | 0x39<<7 | 0x06, + 34321 - 19968: jis0212<<14 | 0x39<<7 | 0x07, + 34322 - 19968: jis0212<<14 | 0x39<<7 | 0x08, + 34323 - 19968: jis0208<<14 | 0x48<<7 | 0x1E, + 34326 - 19968: jis0208<<14 | 0x3C<<7 | 0x10, + 34327 - 19968: jis0208<<14 | 0x3C<<7 | 0x01, + 34328 - 19968: jis0212<<14 | 0x39<<7 | 0x09, + 34329 - 19968: jis0212<<14 | 0x39<<7 | 0x0A, + 34330 - 19968: jis0208<<14 | 0x48<<7 | 0x24, + 34331 - 19968: jis0212<<14 | 0x39<<7 | 0x0B, + 34334 - 19968: jis0212<<14 | 0x39<<7 | 0x0C, + 34337 - 19968: jis0212<<14 | 0x39<<7 | 0x0D, + 34338 - 19968: jis0208<<14 | 0x48<<7 | 0x23, + 34343 - 19968: jis0212<<14 | 0x39<<7 | 0x0E, + 34345 - 19968: jis0212<<14 | 0x39<<7 | 0x0F, + 34349 - 19968: jis0208<<14 | 0x2C<<7 | 0x55, + 34351 - 19968: jis0208<<14 | 0x41<<7 | 0x1B, + 34352 - 19968: jis0208<<14 | 0x48<<7 | 0x25, + 34358 - 19968: jis0212<<14 | 0x39<<7 | 0x10, + 34360 - 19968: jis0212<<14 | 0x39<<7 | 0x11, + 34362 - 19968: jis0212<<14 | 0x39<<7 | 0x12, + 34364 - 19968: jis0212<<14 | 0x39<<7 | 0x13, + 34365 - 19968: jis0212<<14 | 0x39<<7 | 0x14, + 34367 - 19968: jis0208<<14 | 0x48<<7 | 0x26, + 34368 - 19968: jis0212<<14 | 0x39<<7 | 0x15, + 34369 - 19968: jis0212<<14 | 0x17<<7 | 0x45, + 34370 - 19968: jis0212<<14 | 0x39<<7 | 0x16, + 34374 - 19968: jis0212<<14 | 0x39<<7 | 0x17, + 34381 - 19968: jis0208<<14 | 0x48<<7 | 0x27, + 34382 - 19968: jis0208<<14 | 0x17<<7 | 0x36, + 34384 - 19968: jis0208<<14 | 0x14<<7 | 0x33, + 34386 - 19968: jis0212<<14 | 0x39<<7 | 0x18, + 34387 - 19968: jis0212<<14 | 0x39<<7 | 0x19, + 34388 - 19968: jis0208<<14 | 0x48<<7 | 0x29, + 34389 - 19968: jis0208<<14 | 0x30<<7 | 0x3C, + 34390 - 19968: jis0212<<14 | 0x39<<7 | 0x1A, + 34391 - 19968: jis0212<<14 | 0x39<<7 | 0x1B, + 34392 - 19968: jis0212<<14 | 0x39<<7 | 0x1C, + 34393 - 19968: jis0212<<14 | 0x39<<7 | 0x1D, + 34394 - 19968: jis0208<<14 | 0x14<<7 | 0x54, + 34396 - 19968: jis0208<<14 | 0x2D<<7 | 0x19, + 34397 - 19968: jis0212<<14 | 0x39<<7 | 0x1E, + 34398 - 19968: jis0208<<14 | 0x15<<7 | 0x52, + 34399 - 19968: jis0208<<14 | 0x48<<7 | 0x2A, + 34400 - 19968: jis0212<<14 | 0x39<<7 | 0x1F, + 34401 - 19968: jis0212<<14 | 0x39<<7 | 0x20, + 34402 - 19968: jis0212<<14 | 0x39<<7 | 0x21, + 34403 - 19968: jis0212<<14 | 0x39<<7 | 0x22, + 34404 - 19968: jis0212<<14 | 0x39<<7 | 0x23, + 34407 - 19968: jis0208<<14 | 0x48<<7 | 0x2B, + 34409 - 19968: jis0212<<14 | 0x39<<7 | 0x24, + 34411 - 19968: jis0208<<14 | 0x22<<7 | 0x4D, + 34412 - 19968: jis0212<<14 | 0x39<<7 | 0x25, + 34415 - 19968: jis0212<<14 | 0x39<<7 | 0x26, + 34417 - 19968: jis0208<<14 | 0x48<<7 | 0x2C, + 34421 - 19968: jis0212<<14 | 0x39<<7 | 0x27, + 34422 - 19968: jis0212<<14 | 0x39<<7 | 0x28, + 34423 - 19968: jis0212<<14 | 0x39<<7 | 0x29, + 34425 - 19968: jis0208<<14 | 0x25<<7 | 0x59, + 34426 - 19968: jis0212<<14 | 0x39<<7 | 0x2A, + 34427 - 19968: jis0208<<14 | 0x0F<<7 | 0x19, + 34440 - 19968: jis0212<<14 | 0x39<<7 | 0x4C, + 34442 - 19968: jis0208<<14 | 0x11<<7 | 0x42, + 34443 - 19968: jis0208<<14 | 0x48<<7 | 0x31, + 34444 - 19968: jis0208<<14 | 0x48<<7 | 0x32, + 34445 - 19968: jis0212<<14 | 0x39<<7 | 0x2B, + 34449 - 19968: jis0212<<14 | 0x39<<7 | 0x2C, + 34451 - 19968: jis0208<<14 | 0x48<<7 | 0x2D, + 34453 - 19968: jis0208<<14 | 0x1A<<7 | 0x1C, + 34454 - 19968: jis0212<<14 | 0x39<<7 | 0x2D, + 34456 - 19968: jis0212<<14 | 0x39<<7 | 0x2E, + 34458 - 19968: jis0212<<14 | 0x39<<7 | 0x2F, + 34460 - 19968: jis0212<<14 | 0x39<<7 | 0x30, + 34465 - 19968: jis0212<<14 | 0x39<<7 | 0x31, + 34467 - 19968: jis0208<<14 | 0x48<<7 | 0x2E, + 34468 - 19968: jis0208<<14 | 0x26<<7 | 0x21, + 34470 - 19968: jis0212<<14 | 0x39<<7 | 0x32, + 34471 - 19968: jis0212<<14 | 0x39<<7 | 0x33, + 34472 - 19968: jis0212<<14 | 0x39<<7 | 0x34, + 34473 - 19968: jis0208<<14 | 0x48<<7 | 0x2F, + 34474 - 19968: jis0208<<14 | 0x48<<7 | 0x30, + 34475 - 19968: jis0208<<14 | 0x48<<7 | 0x3A, + 34477 - 19968: jis0212<<14 | 0x39<<7 | 0x35, + 34479 - 19968: jis0208<<14 | 0x48<<7 | 0x34, + 34480 - 19968: jis0208<<14 | 0x48<<7 | 0x37, + 34481 - 19968: jis0212<<14 | 0x39<<7 | 0x36, + 34483 - 19968: jis0212<<14 | 0x39<<7 | 0x37, + 34484 - 19968: jis0212<<14 | 0x39<<7 | 0x38, + 34485 - 19968: jis0212<<14 | 0x39<<7 | 0x39, + 34486 - 19968: jis0208<<14 | 0x48<<7 | 0x33, + 34487 - 19968: jis0212<<14 | 0x39<<7 | 0x3A, + 34488 - 19968: jis0212<<14 | 0x39<<7 | 0x3B, + 34489 - 19968: jis0212<<14 | 0x39<<7 | 0x3C, + 34495 - 19968: jis0212<<14 | 0x39<<7 | 0x3D, + 34496 - 19968: jis0212<<14 | 0x39<<7 | 0x3E, + 34497 - 19968: jis0212<<14 | 0x39<<7 | 0x3F, + 34499 - 19968: jis0212<<14 | 0x39<<7 | 0x40, + 34500 - 19968: jis0208<<14 | 0x48<<7 | 0x35, + 34501 - 19968: jis0212<<14 | 0x39<<7 | 0x41, + 34502 - 19968: jis0208<<14 | 0x48<<7 | 0x36, + 34503 - 19968: jis0208<<14 | 0x1B<<7 | 0x37, + 34505 - 19968: jis0208<<14 | 0x48<<7 | 0x38, + 34507 - 19968: jis0208<<14 | 0x22<<7 | 0x20, + 34509 - 19968: jis0208<<14 | 0x16<<7 | 0x35, + 34510 - 19968: jis0208<<14 | 0x12<<7 | 0x21, + 34513 - 19968: jis0212<<14 | 0x39<<7 | 0x42, + 34514 - 19968: jis0212<<14 | 0x39<<7 | 0x43, + 34516 - 19968: jis0208<<14 | 0x48<<7 | 0x3B, + 34517 - 19968: jis0212<<14 | 0x39<<7 | 0x44, + 34519 - 19968: jis0212<<14 | 0x39<<7 | 0x45, + 34521 - 19968: jis0208<<14 | 0x12<<7 | 0x1E, + 34522 - 19968: jis0212<<14 | 0x39<<7 | 0x46, + 34523 - 19968: jis0208<<14 | 0x48<<7 | 0x40, + 34524 - 19968: jis0212<<14 | 0x39<<7 | 0x47, + 34526 - 19968: jis0208<<14 | 0x48<<7 | 0x3C, + 34527 - 19968: jis0208<<14 | 0x48<<7 | 0x3F, + 34528 - 19968: jis0212<<14 | 0x39<<7 | 0x48, + 34531 - 19968: jis0212<<14 | 0x39<<7 | 0x49, + 34532 - 19968: jis0208<<14 | 0x27<<7 | 0x19, + 34533 - 19968: jis0212<<14 | 0x39<<7 | 0x4A, + 34535 - 19968: jis0212<<14 | 0x39<<7 | 0x4B, + 34537 - 19968: jis0208<<14 | 0x48<<7 | 0x3D, + 34540 - 19968: jis0208<<14 | 0x48<<7 | 0x3E, + 34541 - 19968: jis0208<<14 | 0x28<<7 | 0x27, + 34542 - 19968: jis0208<<14 | 0x27<<7 | 0x39, + 34543 - 19968: jis0208<<14 | 0x48<<7 | 0x41, + 34552 - 19968: jis0208<<14 | 0x21<<7 | 0x5C, + 34553 - 19968: jis0208<<14 | 0x48<<7 | 0x4B, + 34554 - 19968: jis0212<<14 | 0x39<<7 | 0x4D, + 34555 - 19968: jis0208<<14 | 0x48<<7 | 0x47, + 34556 - 19968: jis0212<<14 | 0x39<<7 | 0x4E, + 34557 - 19968: jis0212<<14 | 0x39<<7 | 0x4F, + 34558 - 19968: jis0208<<14 | 0x11<<7 | 0x4A, + 34560 - 19968: jis0208<<14 | 0x48<<7 | 0x45, + 34562 - 19968: jis0208<<14 | 0x2A<<7 | 0x09, + 34563 - 19968: jis0208<<14 | 0x48<<7 | 0x46, + 34564 - 19968: jis0212<<14 | 0x39<<7 | 0x50, + 34565 - 19968: jis0212<<14 | 0x39<<7 | 0x51, + 34566 - 19968: jis0208<<14 | 0x48<<7 | 0x43, + 34567 - 19968: jis0212<<14 | 0x39<<7 | 0x52, + 34568 - 19968: jis0208<<14 | 0x48<<7 | 0x44, + 34569 - 19968: jis0208<<14 | 0x48<<7 | 0x49, + 34570 - 19968: jis0208<<14 | 0x48<<7 | 0x4C, + 34571 - 19968: jis0212<<14 | 0x39<<7 | 0x53, + 34573 - 19968: jis0208<<14 | 0x48<<7 | 0x4A, + 34574 - 19968: jis0212<<14 | 0x39<<7 | 0x54, + 34575 - 19968: jis0212<<14 | 0x39<<7 | 0x55, + 34576 - 19968: jis0212<<14 | 0x39<<7 | 0x56, + 34577 - 19968: jis0208<<14 | 0x48<<7 | 0x48, + 34578 - 19968: jis0208<<14 | 0x48<<7 | 0x42, + 34579 - 19968: jis0212<<14 | 0x39<<7 | 0x57, + 34580 - 19968: jis0212<<14 | 0x39<<7 | 0x58, + 34584 - 19968: jis0208<<14 | 0x22<<7 | 0x37, + 34585 - 19968: jis0212<<14 | 0x39<<7 | 0x59, + 34586 - 19968: jis0208<<14 | 0x48<<7 | 0x53, + 34588 - 19968: jis0208<<14 | 0x2B<<7 | 0x09, + 34590 - 19968: jis0212<<14 | 0x39<<7 | 0x5A, + 34591 - 19968: jis0212<<14 | 0x39<<7 | 0x5B, + 34593 - 19968: jis0212<<14 | 0x39<<7 | 0x5C, + 34595 - 19968: jis0212<<14 | 0x39<<7 | 0x5D, + 34597 - 19968: jis0208<<14 | 0x48<<7 | 0x51, + 34600 - 19968: jis0212<<14 | 0x3A<<7 | 0x00, + 34601 - 19968: jis0208<<14 | 0x48<<7 | 0x52, + 34606 - 19968: jis0212<<14 | 0x3A<<7 | 0x01, + 34607 - 19968: jis0212<<14 | 0x3A<<7 | 0x02, + 34609 - 19968: jis0212<<14 | 0x3A<<7 | 0x03, + 34610 - 19968: jis0212<<14 | 0x3A<<7 | 0x04, + 34612 - 19968: jis0208<<14 | 0x48<<7 | 0x4D, + 34615 - 19968: jis0208<<14 | 0x48<<7 | 0x4F, + 34617 - 19968: jis0212<<14 | 0x3A<<7 | 0x05, + 34618 - 19968: jis0212<<14 | 0x3A<<7 | 0x06, + 34619 - 19968: jis0208<<14 | 0x48<<7 | 0x50, + 34620 - 19968: jis0212<<14 | 0x3A<<7 | 0x07, + 34621 - 19968: jis0212<<14 | 0x3A<<7 | 0x08, + 34622 - 19968: jis0212<<14 | 0x3A<<7 | 0x09, + 34623 - 19968: jis0208<<14 | 0x48<<7 | 0x4E, + 34624 - 19968: jis0212<<14 | 0x3A<<7 | 0x0A, + 34627 - 19968: jis0212<<14 | 0x3A<<7 | 0x0B, + 34629 - 19968: jis0212<<14 | 0x3A<<7 | 0x0C, + 34633 - 19968: jis0208<<14 | 0x1F<<7 | 0x45, + 34635 - 19968: jis0208<<14 | 0x2E<<7 | 0x18, + 34636 - 19968: jis0208<<14 | 0x48<<7 | 0x57, + 34637 - 19968: jis0212<<14 | 0x3A<<7 | 0x0D, + 34638 - 19968: jis0208<<14 | 0x48<<7 | 0x58, + 34643 - 19968: jis0208<<14 | 0x49<<7 | 0x00, + 34645 - 19968: jis0208<<14 | 0x1E<<7 | 0x09, + 34647 - 19968: jis0208<<14 | 0x48<<7 | 0x5A, + 34648 - 19968: jis0212<<14 | 0x3A<<7 | 0x0E, + 34649 - 19968: jis0208<<14 | 0x48<<7 | 0x5D, + 34653 - 19968: jis0212<<14 | 0x3A<<7 | 0x0F, + 34655 - 19968: jis0208<<14 | 0x48<<7 | 0x55, + 34656 - 19968: jis0208<<14 | 0x48<<7 | 0x54, + 34657 - 19968: jis0212<<14 | 0x3A<<7 | 0x10, + 34659 - 19968: jis0208<<14 | 0x49<<7 | 0x01, + 34660 - 19968: jis0212<<14 | 0x3A<<7 | 0x11, + 34661 - 19968: jis0212<<14 | 0x3A<<7 | 0x12, + 34662 - 19968: jis0208<<14 | 0x11<<7 | 0x3B, + 34664 - 19968: jis0208<<14 | 0x48<<7 | 0x5B, + 34666 - 19968: jis0208<<14 | 0x49<<7 | 0x02, + 34670 - 19968: jis0208<<14 | 0x48<<7 | 0x5C, + 34671 - 19968: jis0212<<14 | 0x3A<<7 | 0x13, + 34673 - 19968: jis0212<<14 | 0x3A<<7 | 0x14, + 34674 - 19968: jis0212<<14 | 0x3A<<7 | 0x15, + 34676 - 19968: jis0208<<14 | 0x48<<7 | 0x59, + 34678 - 19968: jis0208<<14 | 0x23<<7 | 0x12, + 34680 - 19968: jis0208<<14 | 0x48<<7 | 0x56, + 34683 - 19968: jis0212<<14 | 0x3A<<7 | 0x16, + 34687 - 19968: jis0208<<14 | 0x26<<7 | 0x47, + 34690 - 19968: jis0208<<14 | 0x49<<7 | 0x06, + 34691 - 19968: jis0212<<14 | 0x3A<<7 | 0x17, + 34692 - 19968: jis0212<<14 | 0x3A<<7 | 0x18, + 34693 - 19968: jis0212<<14 | 0x3A<<7 | 0x19, + 34694 - 19968: jis0212<<14 | 0x3A<<7 | 0x1A, + 34695 - 19968: jis0212<<14 | 0x3A<<7 | 0x1B, + 34696 - 19968: jis0212<<14 | 0x3A<<7 | 0x1C, + 34697 - 19968: jis0212<<14 | 0x3A<<7 | 0x1D, + 34699 - 19968: jis0212<<14 | 0x3A<<7 | 0x1E, + 34700 - 19968: jis0212<<14 | 0x3A<<7 | 0x1F, + 34701 - 19968: jis0208<<14 | 0x2C<<7 | 0x1A, + 34704 - 19968: jis0212<<14 | 0x3A<<7 | 0x20, + 34707 - 19968: jis0212<<14 | 0x3A<<7 | 0x21, + 34709 - 19968: jis0212<<14 | 0x3A<<7 | 0x22, + 34711 - 19968: jis0212<<14 | 0x3A<<7 | 0x23, + 34712 - 19968: jis0212<<14 | 0x3A<<7 | 0x24, + 34713 - 19968: jis0212<<14 | 0x3A<<7 | 0x25, + 34718 - 19968: jis0212<<14 | 0x3A<<7 | 0x26, + 34719 - 19968: jis0208<<14 | 0x49<<7 | 0x05, + 34720 - 19968: jis0212<<14 | 0x3A<<7 | 0x27, + 34722 - 19968: jis0208<<14 | 0x49<<7 | 0x04, + 34723 - 19968: jis0212<<14 | 0x3A<<7 | 0x28, + 34727 - 19968: jis0212<<14 | 0x3A<<7 | 0x29, + 34731 - 19968: jis0208<<14 | 0x49<<7 | 0x0D, + 34732 - 19968: jis0212<<14 | 0x3A<<7 | 0x2A, + 34733 - 19968: jis0212<<14 | 0x3A<<7 | 0x2B, + 34734 - 19968: jis0212<<14 | 0x3A<<7 | 0x2C, + 34735 - 19968: jis0208<<14 | 0x49<<7 | 0x07, + 34737 - 19968: jis0212<<14 | 0x3A<<7 | 0x2D, + 34739 - 19968: jis0208<<14 | 0x49<<7 | 0x0F, + 34741 - 19968: jis0212<<14 | 0x3A<<7 | 0x2E, + 34746 - 19968: jis0208<<14 | 0x2C<<7 | 0x45, + 34747 - 19968: jis0208<<14 | 0x49<<7 | 0x12, + 34749 - 19968: jis0208<<14 | 0x49<<7 | 0x09, + 34750 - 19968: jis0212<<14 | 0x3A<<7 | 0x2F, + 34751 - 19968: jis0212<<14 | 0x3A<<7 | 0x30, + 34752 - 19968: jis0208<<14 | 0x49<<7 | 0x0A, + 34753 - 19968: jis0212<<14 | 0x3A<<7 | 0x31, + 34756 - 19968: jis0208<<14 | 0x49<<7 | 0x0E, + 34758 - 19968: jis0208<<14 | 0x49<<7 | 0x11, + 34759 - 19968: jis0208<<14 | 0x49<<7 | 0x10, + 34760 - 19968: jis0212<<14 | 0x3A<<7 | 0x32, + 34761 - 19968: jis0212<<14 | 0x3A<<7 | 0x33, + 34762 - 19968: jis0212<<14 | 0x3A<<7 | 0x34, + 34763 - 19968: jis0208<<14 | 0x49<<7 | 0x08, + 34766 - 19968: jis0212<<14 | 0x3A<<7 | 0x35, + 34768 - 19968: jis0208<<14 | 0x49<<7 | 0x0B, + 34770 - 19968: jis0208<<14 | 0x49<<7 | 0x1C, + 34773 - 19968: jis0212<<14 | 0x3A<<7 | 0x36, + 34774 - 19968: jis0212<<14 | 0x3A<<7 | 0x37, + 34777 - 19968: jis0212<<14 | 0x3A<<7 | 0x38, + 34778 - 19968: jis0212<<14 | 0x3A<<7 | 0x39, + 34780 - 19968: jis0212<<14 | 0x3A<<7 | 0x3A, + 34783 - 19968: jis0212<<14 | 0x3A<<7 | 0x3B, + 34784 - 19968: jis0208<<14 | 0x49<<7 | 0x15, + 34786 - 19968: jis0212<<14 | 0x3A<<7 | 0x3C, + 34787 - 19968: jis0212<<14 | 0x3A<<7 | 0x3D, + 34788 - 19968: jis0212<<14 | 0x3A<<7 | 0x3E, + 34794 - 19968: jis0212<<14 | 0x3A<<7 | 0x3F, + 34795 - 19968: jis0212<<14 | 0x3A<<7 | 0x40, + 34797 - 19968: jis0212<<14 | 0x3A<<7 | 0x41, + 34799 - 19968: jis0208<<14 | 0x49<<7 | 0x13, + 34801 - 19968: jis0212<<14 | 0x3A<<7 | 0x42, + 34802 - 19968: jis0208<<14 | 0x49<<7 | 0x14, + 34803 - 19968: jis0212<<14 | 0x3A<<7 | 0x43, + 34806 - 19968: jis0208<<14 | 0x49<<7 | 0x19, + 34807 - 19968: jis0208<<14 | 0x49<<7 | 0x1A, + 34808 - 19968: jis0212<<14 | 0x3A<<7 | 0x44, + 34809 - 19968: jis0208<<14 | 0x12<<7 | 0x09, + 34810 - 19968: jis0212<<14 | 0x3A<<7 | 0x45, + 34811 - 19968: jis0208<<14 | 0x14<<7 | 0x21, + 34814 - 19968: jis0208<<14 | 0x49<<7 | 0x18, + 34815 - 19968: jis0212<<14 | 0x3A<<7 | 0x46, + 34817 - 19968: jis0212<<14 | 0x3A<<7 | 0x47, + 34819 - 19968: jis0212<<14 | 0x3A<<7 | 0x48, + 34821 - 19968: jis0208<<14 | 0x49<<7 | 0x03, + 34822 - 19968: jis0212<<14 | 0x3A<<7 | 0x49, + 34823 - 19968: jis0208<<14 | 0x5A<<7 | 0x44, + 34825 - 19968: jis0212<<14 | 0x3A<<7 | 0x4A, + 34826 - 19968: jis0212<<14 | 0x3A<<7 | 0x4B, + 34827 - 19968: jis0212<<14 | 0x3A<<7 | 0x4C, + 34829 - 19968: jis0208<<14 | 0x49<<7 | 0x17, + 34830 - 19968: jis0208<<14 | 0x49<<7 | 0x1B, + 34831 - 19968: jis0208<<14 | 0x49<<7 | 0x16, + 34832 - 19968: jis0212<<14 | 0x3A<<7 | 0x4D, + 34833 - 19968: jis0208<<14 | 0x49<<7 | 0x1D, + 34834 - 19968: jis0212<<14 | 0x3A<<7 | 0x4F, + 34835 - 19968: jis0212<<14 | 0x3A<<7 | 0x50, + 34836 - 19968: jis0212<<14 | 0x3A<<7 | 0x51, + 34837 - 19968: jis0208<<14 | 0x49<<7 | 0x1F, + 34838 - 19968: jis0208<<14 | 0x49<<7 | 0x1E, + 34840 - 19968: jis0212<<14 | 0x3A<<7 | 0x52, + 34841 - 19968: jis0212<<14 | 0x3A<<7 | 0x4E, + 34842 - 19968: jis0212<<14 | 0x3A<<7 | 0x53, + 34843 - 19968: jis0212<<14 | 0x3A<<7 | 0x54, + 34844 - 19968: jis0212<<14 | 0x3A<<7 | 0x55, + 34846 - 19968: jis0212<<14 | 0x3A<<7 | 0x56, + 34847 - 19968: jis0212<<14 | 0x3A<<7 | 0x57, + 34849 - 19968: jis0208<<14 | 0x49<<7 | 0x21, + 34850 - 19968: jis0208<<14 | 0x49<<7 | 0x20, + 34851 - 19968: jis0208<<14 | 0x48<<7 | 0x39, + 34855 - 19968: jis0208<<14 | 0x49<<7 | 0x25, + 34856 - 19968: jis0212<<14 | 0x3A<<7 | 0x58, + 34861 - 19968: jis0212<<14 | 0x3A<<7 | 0x59, + 34862 - 19968: jis0212<<14 | 0x3A<<7 | 0x5A, + 34864 - 19968: jis0212<<14 | 0x3A<<7 | 0x5B, + 34865 - 19968: jis0208<<14 | 0x49<<7 | 0x22, + 34866 - 19968: jis0212<<14 | 0x3A<<7 | 0x5C, + 34869 - 19968: jis0212<<14 | 0x3A<<7 | 0x5D, + 34870 - 19968: jis0208<<14 | 0x49<<7 | 0x23, + 34873 - 19968: jis0208<<14 | 0x49<<7 | 0x24, + 34874 - 19968: jis0212<<14 | 0x3B<<7 | 0x00, + 34875 - 19968: jis0208<<14 | 0x49<<7 | 0x26, + 34876 - 19968: jis0212<<14 | 0x3B<<7 | 0x01, + 34880 - 19968: jis0208<<14 | 0x16<<7 | 0x4B, + 34881 - 19968: jis0212<<14 | 0x3B<<7 | 0x02, + 34882 - 19968: jis0208<<14 | 0x49<<7 | 0x28, + 34883 - 19968: jis0212<<14 | 0x3B<<7 | 0x03, + 34884 - 19968: jis0208<<14 | 0x49<<7 | 0x27, + 34885 - 19968: jis0212<<14 | 0x3B<<7 | 0x04, + 34886 - 19968: jis0208<<14 | 0x1C<<7 | 0x0F, + 34888 - 19968: jis0212<<14 | 0x3B<<7 | 0x05, + 34889 - 19968: jis0212<<14 | 0x3B<<7 | 0x06, + 34890 - 19968: jis0212<<14 | 0x3B<<7 | 0x07, + 34891 - 19968: jis0212<<14 | 0x3B<<7 | 0x08, + 34892 - 19968: jis0208<<14 | 0x18<<7 | 0x33, + 34893 - 19968: jis0208<<14 | 0x3D<<7 | 0x06, + 34894 - 19968: jis0212<<14 | 0x3B<<7 | 0x09, + 34897 - 19968: jis0212<<14 | 0x3B<<7 | 0x0A, + 34898 - 19968: jis0208<<14 | 0x49<<7 | 0x29, + 34899 - 19968: jis0208<<14 | 0x1C<<7 | 0x30, + 34901 - 19968: jis0212<<14 | 0x3B<<7 | 0x0B, + 34902 - 19968: jis0212<<14 | 0x3B<<7 | 0x0C, + 34903 - 19968: jis0208<<14 | 0x12<<7 | 0x18, + 34904 - 19968: jis0212<<14 | 0x3B<<7 | 0x0D, + 34905 - 19968: jis0208<<14 | 0x49<<7 | 0x2A, + 34906 - 19968: jis0212<<14 | 0x3B<<7 | 0x0E, + 34907 - 19968: jis0208<<14 | 0x10<<7 | 0x31, + 34908 - 19968: jis0212<<14 | 0x3B<<7 | 0x0F, + 34909 - 19968: jis0208<<14 | 0x1D<<7 | 0x36, + 34910 - 19968: jis0208<<14 | 0x49<<7 | 0x2B, + 34911 - 19968: jis0212<<14 | 0x3B<<7 | 0x10, + 34912 - 19968: jis0212<<14 | 0x3B<<7 | 0x11, + 34913 - 19968: jis0208<<14 | 0x18<<7 | 0x34, + 34914 - 19968: jis0208<<14 | 0x49<<7 | 0x2C, + 34915 - 19968: jis0208<<14 | 0x0F<<7 | 0x40, + 34916 - 19968: jis0212<<14 | 0x3B<<7 | 0x12, + 34920 - 19968: jis0208<<14 | 0x28<<7 | 0x1C, + 34921 - 19968: jis0212<<14 | 0x3B<<7 | 0x13, + 34923 - 19968: jis0208<<14 | 0x49<<7 | 0x2D, + 34928 - 19968: jis0208<<14 | 0x1E<<7 | 0x49, + 34929 - 19968: jis0212<<14 | 0x3B<<7 | 0x14, + 34930 - 19968: jis0208<<14 | 0x49<<7 | 0x34, + 34933 - 19968: jis0208<<14 | 0x49<<7 | 0x31, + 34935 - 19968: jis0208<<14 | 0x22<<7 | 0x4E, + 34937 - 19968: jis0212<<14 | 0x3B<<7 | 0x15, + 34939 - 19968: jis0212<<14 | 0x3B<<7 | 0x16, + 34941 - 19968: jis0208<<14 | 0x49<<7 | 0x32, + 34942 - 19968: jis0208<<14 | 0x49<<7 | 0x2F, + 34943 - 19968: jis0208<<14 | 0x15<<7 | 0x3D, + 34944 - 19968: jis0212<<14 | 0x3B<<7 | 0x17, + 34945 - 19968: jis0208<<14 | 0x49<<7 | 0x2E, + 34946 - 19968: jis0208<<14 | 0x49<<7 | 0x35, + 34952 - 19968: jis0208<<14 | 0x16<<7 | 0x15, + 34955 - 19968: jis0208<<14 | 0x21<<7 | 0x3D, + 34957 - 19968: jis0208<<14 | 0x49<<7 | 0x3B, + 34962 - 19968: jis0208<<14 | 0x49<<7 | 0x37, + 34966 - 19968: jis0208<<14 | 0x21<<7 | 0x14, + 34967 - 19968: jis0208<<14 | 0x49<<7 | 0x36, + 34968 - 19968: jis0212<<14 | 0x3B<<7 | 0x18, + 34969 - 19968: jis0208<<14 | 0x49<<7 | 0x39, + 34970 - 19968: jis0212<<14 | 0x3B<<7 | 0x19, + 34971 - 19968: jis0212<<14 | 0x3B<<7 | 0x1A, + 34972 - 19968: jis0212<<14 | 0x3B<<7 | 0x1B, + 34974 - 19968: jis0208<<14 | 0x49<<7 | 0x30, + 34975 - 19968: jis0212<<14 | 0x3B<<7 | 0x1C, + 34976 - 19968: jis0212<<14 | 0x3B<<7 | 0x1D, + 34978 - 19968: jis0208<<14 | 0x49<<7 | 0x3A, + 34980 - 19968: jis0208<<14 | 0x49<<7 | 0x3C, + 34984 - 19968: jis0212<<14 | 0x3B<<7 | 0x1E, + 34986 - 19968: jis0212<<14 | 0x3B<<7 | 0x1F, + 34987 - 19968: jis0208<<14 | 0x27<<7 | 0x4E, + 34990 - 19968: jis0208<<14 | 0x49<<7 | 0x38, + 34992 - 19968: jis0208<<14 | 0x49<<7 | 0x3D, + 34993 - 19968: jis0208<<14 | 0x49<<7 | 0x3F, + 34996 - 19968: jis0208<<14 | 0x17<<7 | 0x32, + 34997 - 19968: jis0208<<14 | 0x49<<7 | 0x33, + 34999 - 19968: jis0208<<14 | 0x0F<<7 | 0x20, + 35002 - 19968: jis0212<<14 | 0x3B<<7 | 0x20, + 35005 - 19968: jis0212<<14 | 0x3B<<7 | 0x21, + 35006 - 19968: jis0212<<14 | 0x3B<<7 | 0x22, + 35007 - 19968: jis0208<<14 | 0x49<<7 | 0x3E, + 35008 - 19968: jis0212<<14 | 0x3B<<7 | 0x23, + 35009 - 19968: jis0208<<14 | 0x19<<7 | 0x3A, + 35010 - 19968: jis0208<<14 | 0x2D<<7 | 0x55, + 35011 - 19968: jis0208<<14 | 0x49<<7 | 0x40, + 35012 - 19968: jis0208<<14 | 0x49<<7 | 0x41, + 35013 - 19968: jis0208<<14 | 0x20<<7 | 0x54, + 35018 - 19968: jis0212<<14 | 0x3B<<7 | 0x24, + 35019 - 19968: jis0212<<14 | 0x3B<<7 | 0x25, + 35020 - 19968: jis0212<<14 | 0x3B<<7 | 0x26, + 35021 - 19968: jis0212<<14 | 0x3B<<7 | 0x27, + 35022 - 19968: jis0212<<14 | 0x3B<<7 | 0x28, + 35023 - 19968: jis0208<<14 | 0x2D<<7 | 0x01, + 35025 - 19968: jis0212<<14 | 0x3B<<7 | 0x29, + 35026 - 19968: jis0212<<14 | 0x3B<<7 | 0x2A, + 35027 - 19968: jis0212<<14 | 0x3B<<7 | 0x2B, + 35028 - 19968: jis0208<<14 | 0x49<<7 | 0x42, + 35029 - 19968: jis0208<<14 | 0x2C<<7 | 0x14, + 35032 - 19968: jis0208<<14 | 0x49<<7 | 0x43, + 35033 - 19968: jis0208<<14 | 0x49<<7 | 0x44, + 35035 - 19968: jis0212<<14 | 0x3B<<7 | 0x2C, + 35036 - 19968: jis0208<<14 | 0x29<<7 | 0x43, + 35037 - 19968: jis0208<<14 | 0x49<<7 | 0x45, + 35038 - 19968: jis0212<<14 | 0x3B<<7 | 0x2D, + 35039 - 19968: jis0208<<14 | 0x19<<7 | 0x1F, + 35041 - 19968: jis0208<<14 | 0x2D<<7 | 0x02, + 35047 - 19968: jis0212<<14 | 0x3B<<7 | 0x2E, + 35048 - 19968: jis0208<<14 | 0x49<<7 | 0x4A, + 35055 - 19968: jis0212<<14 | 0x3B<<7 | 0x2F, + 35056 - 19968: jis0212<<14 | 0x3B<<7 | 0x30, + 35057 - 19968: jis0212<<14 | 0x3B<<7 | 0x31, + 35058 - 19968: jis0208<<14 | 0x49<<7 | 0x4B, + 35059 - 19968: jis0208<<14 | 0x1D<<7 | 0x37, + 35060 - 19968: jis0208<<14 | 0x49<<7 | 0x49, + 35061 - 19968: jis0208<<14 | 0x5A<<7 | 0x45, + 35063 - 19968: jis0212<<14 | 0x3B<<7 | 0x33, + 35064 - 19968: jis0208<<14 | 0x2C<<7 | 0x46, + 35065 - 19968: jis0208<<14 | 0x49<<7 | 0x46, + 35068 - 19968: jis0208<<14 | 0x49<<7 | 0x48, + 35069 - 19968: jis0208<<14 | 0x1F<<7 | 0x1C, + 35070 - 19968: jis0208<<14 | 0x1E<<7 | 0x5D, + 35073 - 19968: jis0212<<14 | 0x3B<<7 | 0x34, + 35074 - 19968: jis0208<<14 | 0x49<<7 | 0x47, + 35076 - 19968: jis0208<<14 | 0x49<<7 | 0x4C, + 35078 - 19968: jis0212<<14 | 0x3B<<7 | 0x35, + 35079 - 19968: jis0208<<14 | 0x29<<7 | 0x02, + 35082 - 19968: jis0208<<14 | 0x49<<7 | 0x4E, + 35084 - 19968: jis0208<<14 | 0x49<<7 | 0x4D, + 35085 - 19968: jis0212<<14 | 0x3B<<7 | 0x36, + 35086 - 19968: jis0212<<14 | 0x3B<<7 | 0x37, + 35087 - 19968: jis0212<<14 | 0x3B<<7 | 0x38, + 35088 - 19968: jis0208<<14 | 0x12<<7 | 0x4B, + 35090 - 19968: jis0208<<14 | 0x2A<<7 | 0x0A, + 35091 - 19968: jis0208<<14 | 0x49<<7 | 0x4F, + 35093 - 19968: jis0212<<14 | 0x3B<<7 | 0x39, + 35094 - 19968: jis0212<<14 | 0x3B<<7 | 0x3A, + 35096 - 19968: jis0212<<14 | 0x3B<<7 | 0x3B, + 35097 - 19968: jis0212<<14 | 0x3B<<7 | 0x3C, + 35098 - 19968: jis0212<<14 | 0x3B<<7 | 0x3D, + 35100 - 19968: jis0208<<14 | 0x58<<7 | 0x01, + 35101 - 19968: jis0208<<14 | 0x49<<7 | 0x5B, + 35102 - 19968: jis0208<<14 | 0x49<<7 | 0x51, + 35104 - 19968: jis0212<<14 | 0x3B<<7 | 0x3F, + 35109 - 19968: jis0208<<14 | 0x49<<7 | 0x52, + 35110 - 19968: jis0212<<14 | 0x3B<<7 | 0x40, + 35111 - 19968: jis0212<<14 | 0x3B<<7 | 0x41, + 35112 - 19968: jis0212<<14 | 0x3B<<7 | 0x42, + 35114 - 19968: jis0208<<14 | 0x49<<7 | 0x53, + 35115 - 19968: jis0208<<14 | 0x49<<7 | 0x54, + 35120 - 19968: jis0212<<14 | 0x3B<<7 | 0x43, + 35121 - 19968: jis0212<<14 | 0x3B<<7 | 0x44, + 35122 - 19968: jis0212<<14 | 0x3B<<7 | 0x45, + 35125 - 19968: jis0212<<14 | 0x3B<<7 | 0x46, + 35126 - 19968: jis0208<<14 | 0x49<<7 | 0x58, + 35128 - 19968: jis0208<<14 | 0x49<<7 | 0x59, + 35129 - 19968: jis0212<<14 | 0x3B<<7 | 0x47, + 35130 - 19968: jis0212<<14 | 0x3B<<7 | 0x48, + 35131 - 19968: jis0208<<14 | 0x49<<7 | 0x57, + 35134 - 19968: jis0212<<14 | 0x3B<<7 | 0x49, + 35136 - 19968: jis0212<<14 | 0x3B<<7 | 0x4A, + 35137 - 19968: jis0208<<14 | 0x49<<7 | 0x55, + 35138 - 19968: jis0212<<14 | 0x3B<<7 | 0x4B, + 35139 - 19968: jis0208<<14 | 0x49<<7 | 0x50, + 35140 - 19968: jis0208<<14 | 0x49<<7 | 0x56, + 35141 - 19968: jis0212<<14 | 0x3B<<7 | 0x4C, + 35142 - 19968: jis0212<<14 | 0x3B<<7 | 0x4D, + 35145 - 19968: jis0212<<14 | 0x3B<<7 | 0x4E, + 35148 - 19968: jis0208<<14 | 0x49<<7 | 0x5A, + 35149 - 19968: jis0208<<14 | 0x4F<<7 | 0x16, + 35151 - 19968: jis0212<<14 | 0x3B<<7 | 0x4F, + 35154 - 19968: jis0212<<14 | 0x3B<<7 | 0x50, + 35158 - 19968: jis0208<<14 | 0x11<<7 | 0x07, + 35159 - 19968: jis0212<<14 | 0x3B<<7 | 0x51, + 35162 - 19968: jis0212<<14 | 0x3B<<7 | 0x52, + 35163 - 19968: jis0212<<14 | 0x3B<<7 | 0x53, + 35164 - 19968: jis0212<<14 | 0x3B<<7 | 0x54, + 35166 - 19968: jis0208<<14 | 0x49<<7 | 0x5D, + 35167 - 19968: jis0208<<14 | 0x15<<7 | 0x3E, + 35168 - 19968: jis0208<<14 | 0x49<<7 | 0x5C, + 35169 - 19968: jis0212<<14 | 0x3B<<7 | 0x55, + 35170 - 19968: jis0212<<14 | 0x3B<<7 | 0x56, + 35171 - 19968: jis0212<<14 | 0x3B<<7 | 0x57, + 35172 - 19968: jis0208<<14 | 0x4A<<7 | 0x01, + 35174 - 19968: jis0208<<14 | 0x4A<<7 | 0x00, + 35178 - 19968: jis0208<<14 | 0x4A<<7 | 0x03, + 35179 - 19968: jis0212<<14 | 0x3B<<7 | 0x58, + 35181 - 19968: jis0208<<14 | 0x4A<<7 | 0x02, + 35182 - 19968: jis0212<<14 | 0x3B<<7 | 0x59, + 35183 - 19968: jis0208<<14 | 0x4A<<7 | 0x04, + 35184 - 19968: jis0212<<14 | 0x3B<<7 | 0x5A, + 35186 - 19968: jis0208<<14 | 0x1C<<7 | 0x10, + 35187 - 19968: jis0212<<14 | 0x3B<<7 | 0x5B, + 35188 - 19968: jis0208<<14 | 0x4A<<7 | 0x05, + 35189 - 19968: jis0212<<14 | 0x3B<<7 | 0x5C, + 35191 - 19968: jis0208<<14 | 0x4A<<7 | 0x06, + 35194 - 19968: jis0212<<14 | 0x3B<<7 | 0x5D, + 35195 - 19968: jis0212<<14 | 0x3C<<7 | 0x00, + 35196 - 19968: jis0212<<14 | 0x3C<<7 | 0x01, + 35197 - 19968: jis0212<<14 | 0x3C<<7 | 0x02, + 35198 - 19968: jis0208<<14 | 0x4A<<7 | 0x07, + 35199 - 19968: jis0208<<14 | 0x1F<<7 | 0x1D, + 35201 - 19968: jis0208<<14 | 0x2C<<7 | 0x36, + 35203 - 19968: jis0208<<14 | 0x4A<<7 | 0x08, + 35206 - 19968: jis0208<<14 | 0x29<<7 | 0x03, + 35207 - 19968: jis0208<<14 | 0x26<<7 | 0x25, + 35208 - 19968: jis0208<<14 | 0x4A<<7 | 0x09, + 35209 - 19968: jis0212<<14 | 0x3C<<7 | 0x03, + 35210 - 19968: jis0208<<14 | 0x4A<<7 | 0x0A, + 35211 - 19968: jis0208<<14 | 0x17<<7 | 0x0A, + 35213 - 19968: jis0212<<14 | 0x3C<<7 | 0x04, + 35215 - 19968: jis0208<<14 | 0x14<<7 | 0x0B, + 35216 - 19968: jis0212<<14 | 0x3C<<7 | 0x05, + 35219 - 19968: jis0208<<14 | 0x4A<<7 | 0x0B, + 35220 - 19968: jis0212<<14 | 0x3C<<7 | 0x06, + 35221 - 19968: jis0212<<14 | 0x3C<<7 | 0x07, + 35222 - 19968: jis0208<<14 | 0x1A<<7 | 0x4A, + 35223 - 19968: jis0208<<14 | 0x26<<7 | 0x20, + 35224 - 19968: jis0208<<14 | 0x4A<<7 | 0x0C, + 35226 - 19968: jis0208<<14 | 0x12<<7 | 0x2F, + 35227 - 19968: jis0212<<14 | 0x3C<<7 | 0x08, + 35228 - 19968: jis0212<<14 | 0x3C<<7 | 0x09, + 35231 - 19968: jis0212<<14 | 0x3C<<7 | 0x0A, + 35232 - 19968: jis0212<<14 | 0x3C<<7 | 0x0B, + 35233 - 19968: jis0208<<14 | 0x4A<<7 | 0x0D, + 35237 - 19968: jis0212<<14 | 0x3C<<7 | 0x0C, + 35238 - 19968: jis0208<<14 | 0x4A<<7 | 0x0F, + 35239 - 19968: jis0208<<14 | 0x2C<<7 | 0x56, + 35241 - 19968: jis0208<<14 | 0x4A<<7 | 0x0E, + 35242 - 19968: jis0208<<14 | 0x1E<<7 | 0x25, + 35244 - 19968: jis0208<<14 | 0x4A<<7 | 0x10, + 35247 - 19968: jis0208<<14 | 0x4A<<7 | 0x11, + 35248 - 19968: jis0212<<14 | 0x3C<<7 | 0x0D, + 35250 - 19968: jis0208<<14 | 0x4A<<7 | 0x12, + 35251 - 19968: jis0208<<14 | 0x13<<7 | 0x30, + 35252 - 19968: jis0212<<14 | 0x3C<<7 | 0x0E, + 35253 - 19968: jis0212<<14 | 0x3C<<7 | 0x0F, + 35254 - 19968: jis0212<<14 | 0x3C<<7 | 0x10, + 35255 - 19968: jis0212<<14 | 0x3C<<7 | 0x11, + 35258 - 19968: jis0208<<14 | 0x4A<<7 | 0x13, + 35260 - 19968: jis0212<<14 | 0x3C<<7 | 0x12, + 35261 - 19968: jis0208<<14 | 0x4A<<7 | 0x14, + 35263 - 19968: jis0208<<14 | 0x4A<<7 | 0x15, + 35264 - 19968: jis0208<<14 | 0x4A<<7 | 0x16, + 35282 - 19968: jis0208<<14 | 0x12<<7 | 0x30, + 35284 - 19968: jis0212<<14 | 0x3C<<7 | 0x13, + 35285 - 19968: jis0212<<14 | 0x3C<<7 | 0x14, + 35286 - 19968: jis0212<<14 | 0x3C<<7 | 0x15, + 35287 - 19968: jis0212<<14 | 0x3C<<7 | 0x16, + 35288 - 19968: jis0212<<14 | 0x3C<<7 | 0x17, + 35290 - 19968: jis0208<<14 | 0x4A<<7 | 0x17, + 35292 - 19968: jis0208<<14 | 0x4A<<7 | 0x18, + 35293 - 19968: jis0208<<14 | 0x4A<<7 | 0x19, + 35299 - 19968: jis0208<<14 | 0x11<<7 | 0x51, + 35301 - 19968: jis0212<<14 | 0x3C<<7 | 0x18, + 35302 - 19968: jis0208<<14 | 0x1E<<7 | 0x07, + 35303 - 19968: jis0208<<14 | 0x4A<<7 | 0x1A, + 35305 - 19968: jis0212<<14 | 0x3C<<7 | 0x19, + 35307 - 19968: jis0212<<14 | 0x3C<<7 | 0x1A, + 35309 - 19968: jis0212<<14 | 0x3C<<7 | 0x1B, + 35313 - 19968: jis0212<<14 | 0x3C<<7 | 0x1C, + 35315 - 19968: jis0212<<14 | 0x3C<<7 | 0x1D, + 35316 - 19968: jis0208<<14 | 0x4A<<7 | 0x1B, + 35318 - 19968: jis0212<<14 | 0x3C<<7 | 0x1E, + 35320 - 19968: jis0208<<14 | 0x4A<<7 | 0x1C, + 35321 - 19968: jis0212<<14 | 0x3C<<7 | 0x1F, + 35325 - 19968: jis0212<<14 | 0x3C<<7 | 0x20, + 35327 - 19968: jis0212<<14 | 0x3C<<7 | 0x21, + 35328 - 19968: jis0208<<14 | 0x17<<7 | 0x1F, + 35330 - 19968: jis0208<<14 | 0x23<<7 | 0x5A, + 35331 - 19968: jis0208<<14 | 0x4A<<7 | 0x1D, + 35332 - 19968: jis0212<<14 | 0x3C<<7 | 0x22, + 35333 - 19968: jis0212<<14 | 0x3C<<7 | 0x23, + 35335 - 19968: jis0212<<14 | 0x3C<<7 | 0x24, + 35336 - 19968: jis0208<<14 | 0x16<<7 | 0x36, + 35338 - 19968: jis0208<<14 | 0x1E<<7 | 0x35, + 35340 - 19968: jis0208<<14 | 0x4A<<7 | 0x20, + 35342 - 19968: jis0208<<14 | 0x25<<7 | 0x03, + 35343 - 19968: jis0212<<14 | 0x3C<<7 | 0x25, + 35344 - 19968: jis0208<<14 | 0x4A<<7 | 0x1F, + 35345 - 19968: jis0212<<14 | 0x3C<<7 | 0x26, + 35346 - 19968: jis0208<<14 | 0x5A<<7 | 0x46, + 35347 - 19968: jis0208<<14 | 0x16<<7 | 0x10, + 35348 - 19968: jis0212<<14 | 0x3C<<7 | 0x28, + 35349 - 19968: jis0212<<14 | 0x3C<<7 | 0x29, + 35350 - 19968: jis0208<<14 | 0x4A<<7 | 0x1E, + 35351 - 19968: jis0208<<14 | 0x21<<7 | 0x56, + 35352 - 19968: jis0208<<14 | 0x14<<7 | 0x0C, + 35355 - 19968: jis0208<<14 | 0x4A<<7 | 0x21, + 35357 - 19968: jis0208<<14 | 0x4A<<7 | 0x22, + 35358 - 19968: jis0212<<14 | 0x3C<<7 | 0x2A, + 35359 - 19968: jis0208<<14 | 0x1D<<7 | 0x38, + 35360 - 19968: jis0212<<14 | 0x3C<<7 | 0x2B, + 35362 - 19968: jis0212<<14 | 0x3C<<7 | 0x2C, + 35363 - 19968: jis0208<<14 | 0x16<<7 | 0x4C, + 35364 - 19968: jis0212<<14 | 0x3C<<7 | 0x2D, + 35365 - 19968: jis0208<<14 | 0x4A<<7 | 0x23, + 35366 - 19968: jis0212<<14 | 0x3C<<7 | 0x2E, + 35370 - 19968: jis0208<<14 | 0x2A<<7 | 0x0B, + 35371 - 19968: jis0212<<14 | 0x3C<<7 | 0x2F, + 35372 - 19968: jis0212<<14 | 0x3C<<7 | 0x30, + 35373 - 19968: jis0208<<14 | 0x1F<<7 | 0x3E, + 35375 - 19968: jis0212<<14 | 0x3C<<7 | 0x31, + 35377 - 19968: jis0208<<14 | 0x14<<7 | 0x55, + 35379 - 19968: jis0208<<14 | 0x2B<<7 | 0x54, + 35380 - 19968: jis0208<<14 | 0x20<<7 | 0x29, + 35381 - 19968: jis0212<<14 | 0x3C<<7 | 0x32, + 35382 - 19968: jis0208<<14 | 0x4A<<7 | 0x24, + 35383 - 19968: jis0208<<14 | 0x5A<<7 | 0x47, + 35386 - 19968: jis0208<<14 | 0x1E<<7 | 0x26, + 35387 - 19968: jis0208<<14 | 0x22<<7 | 0x4F, + 35388 - 19968: jis0208<<14 | 0x1D<<7 | 0x39, + 35389 - 19968: jis0212<<14 | 0x3C<<7 | 0x34, + 35390 - 19968: jis0212<<14 | 0x3C<<7 | 0x35, + 35392 - 19968: jis0212<<14 | 0x3C<<7 | 0x36, + 35393 - 19968: jis0208<<14 | 0x4A<<7 | 0x25, + 35395 - 19968: jis0212<<14 | 0x3C<<7 | 0x37, + 35397 - 19968: jis0212<<14 | 0x3C<<7 | 0x38, + 35398 - 19968: jis0208<<14 | 0x4A<<7 | 0x28, + 35399 - 19968: jis0212<<14 | 0x3C<<7 | 0x39, + 35400 - 19968: jis0208<<14 | 0x4A<<7 | 0x29, + 35401 - 19968: jis0212<<14 | 0x3C<<7 | 0x3A, + 35405 - 19968: jis0212<<14 | 0x3C<<7 | 0x3B, + 35406 - 19968: jis0212<<14 | 0x3C<<7 | 0x3C, + 35408 - 19968: jis0208<<14 | 0x19<<7 | 0x1D, + 35409 - 19968: jis0208<<14 | 0x21<<7 | 0x21, + 35410 - 19968: jis0208<<14 | 0x4A<<7 | 0x27, + 35411 - 19968: jis0212<<14 | 0x3C<<7 | 0x3D, + 35412 - 19968: jis0208<<14 | 0x1D<<7 | 0x3A, + 35413 - 19968: jis0208<<14 | 0x28<<7 | 0x1D, + 35414 - 19968: jis0212<<14 | 0x3C<<7 | 0x3E, + 35415 - 19968: jis0212<<14 | 0x3C<<7 | 0x3F, + 35416 - 19968: jis0212<<14 | 0x3C<<7 | 0x40, + 35419 - 19968: jis0208<<14 | 0x4A<<7 | 0x26, + 35420 - 19968: jis0212<<14 | 0x3C<<7 | 0x41, + 35421 - 19968: jis0212<<14 | 0x3C<<7 | 0x42, + 35422 - 19968: jis0208<<14 | 0x1A<<7 | 0x4B, + 35424 - 19968: jis0208<<14 | 0x10<<7 | 0x32, + 35425 - 19968: jis0212<<14 | 0x3C<<7 | 0x43, + 35426 - 19968: jis0208<<14 | 0x4A<<7 | 0x2D, + 35427 - 19968: jis0208<<14 | 0x16<<7 | 0x37, + 35429 - 19968: jis0212<<14 | 0x3C<<7 | 0x44, + 35430 - 19968: jis0208<<14 | 0x1A<<7 | 0x4D, + 35431 - 19968: jis0212<<14 | 0x3C<<7 | 0x45, + 35433 - 19968: jis0208<<14 | 0x1A<<7 | 0x4C, + 35435 - 19968: jis0208<<14 | 0x2E<<7 | 0x2C, + 35436 - 19968: jis0208<<14 | 0x4A<<7 | 0x2C, + 35437 - 19968: jis0208<<14 | 0x4A<<7 | 0x2B, + 35438 - 19968: jis0208<<14 | 0x20<<7 | 0x06, + 35440 - 19968: jis0208<<14 | 0x14<<7 | 0x2C, + 35441 - 19968: jis0208<<14 | 0x2E<<7 | 0x22, + 35442 - 19968: jis0208<<14 | 0x12<<7 | 0x19, + 35443 - 19968: jis0208<<14 | 0x1D<<7 | 0x3B, + 35445 - 19968: jis0212<<14 | 0x3C<<7 | 0x46, + 35446 - 19968: jis0212<<14 | 0x3C<<7 | 0x47, + 35447 - 19968: jis0212<<14 | 0x3C<<7 | 0x48, + 35449 - 19968: jis0208<<14 | 0x5A<<7 | 0x48, + 35450 - 19968: jis0212<<14 | 0x3C<<7 | 0x4A, + 35451 - 19968: jis0212<<14 | 0x3C<<7 | 0x4B, + 35452 - 19968: jis0208<<14 | 0x4A<<7 | 0x2A, + 35454 - 19968: jis0212<<14 | 0x3C<<7 | 0x4C, + 35455 - 19968: jis0212<<14 | 0x3C<<7 | 0x4D, + 35456 - 19968: jis0212<<14 | 0x3C<<7 | 0x4E, + 35458 - 19968: jis0208<<14 | 0x4A<<7 | 0x2F, + 35459 - 19968: jis0212<<14 | 0x3C<<7 | 0x4F, + 35460 - 19968: jis0208<<14 | 0x4A<<7 | 0x30, + 35461 - 19968: jis0208<<14 | 0x4A<<7 | 0x2E, + 35462 - 19968: jis0212<<14 | 0x3C<<7 | 0x50, + 35463 - 19968: jis0208<<14 | 0x17<<7 | 0x37, + 35465 - 19968: jis0208<<14 | 0x2C<<7 | 0x1F, + 35467 - 19968: jis0212<<14 | 0x3C<<7 | 0x51, + 35468 - 19968: jis0208<<14 | 0x1A<<7 | 0x4E, + 35469 - 19968: jis0208<<14 | 0x26<<7 | 0x06, + 35471 - 19968: jis0212<<14 | 0x3C<<7 | 0x52, + 35472 - 19968: jis0212<<14 | 0x3C<<7 | 0x53, + 35473 - 19968: jis0208<<14 | 0x4A<<7 | 0x33, + 35474 - 19968: jis0212<<14 | 0x3C<<7 | 0x54, + 35475 - 19968: jis0208<<14 | 0x1F<<7 | 0x1F, + 35477 - 19968: jis0208<<14 | 0x22<<7 | 0x21, + 35478 - 19968: jis0212<<14 | 0x3C<<7 | 0x55, + 35479 - 19968: jis0212<<14 | 0x3C<<7 | 0x56, + 35480 - 19968: jis0208<<14 | 0x2C<<7 | 0x15, + 35481 - 19968: jis0212<<14 | 0x3C<<7 | 0x57, + 35482 - 19968: jis0208<<14 | 0x4A<<7 | 0x36, + 35486 - 19968: jis0208<<14 | 0x17<<7 | 0x4B, + 35487 - 19968: jis0212<<14 | 0x3C<<7 | 0x58, + 35488 - 19968: jis0208<<14 | 0x1F<<7 | 0x1E, + 35489 - 19968: jis0208<<14 | 0x4A<<7 | 0x32, + 35491 - 19968: jis0208<<14 | 0x4A<<7 | 0x37, + 35492 - 19968: jis0208<<14 | 0x17<<7 | 0x4C, + 35493 - 19968: jis0208<<14 | 0x4A<<7 | 0x34, + 35494 - 19968: jis0208<<14 | 0x4A<<7 | 0x35, + 35495 - 19968: jis0208<<14 | 0x5A<<7 | 0x49, + 35496 - 19968: jis0208<<14 | 0x4A<<7 | 0x31, + 35497 - 19968: jis0212<<14 | 0x3C<<7 | 0x5A, + 35500 - 19968: jis0208<<14 | 0x1F<<7 | 0x41, + 35501 - 19968: jis0208<<14 | 0x25<<7 | 0x28, + 35502 - 19968: jis0212<<14 | 0x3C<<7 | 0x5B, + 35503 - 19968: jis0212<<14 | 0x3C<<7 | 0x5C, + 35504 - 19968: jis0208<<14 | 0x22<<7 | 0x0E, + 35506 - 19968: jis0208<<14 | 0x11<<7 | 0x3C, + 35507 - 19968: jis0212<<14 | 0x3C<<7 | 0x5D, + 35510 - 19968: jis0212<<14 | 0x3D<<7 | 0x00, + 35511 - 19968: jis0212<<14 | 0x3D<<7 | 0x01, + 35513 - 19968: jis0208<<14 | 0x27<<7 | 0x4F, + 35515 - 19968: jis0212<<14 | 0x3D<<7 | 0x02, + 35516 - 19968: jis0208<<14 | 0x14<<7 | 0x22, + 35518 - 19968: jis0208<<14 | 0x5A<<7 | 0x4A, + 35519 - 19968: jis0208<<14 | 0x23<<7 | 0x13, + 35522 - 19968: jis0208<<14 | 0x4A<<7 | 0x3A, + 35523 - 19968: jis0212<<14 | 0x3D<<7 | 0x04, + 35524 - 19968: jis0208<<14 | 0x4A<<7 | 0x38, + 35526 - 19968: jis0212<<14 | 0x3D<<7 | 0x05, + 35527 - 19968: jis0208<<14 | 0x22<<7 | 0x2B, + 35528 - 19968: jis0212<<14 | 0x3D<<7 | 0x06, + 35529 - 19968: jis0212<<14 | 0x3D<<7 | 0x07, + 35530 - 19968: jis0212<<14 | 0x3D<<7 | 0x08, + 35531 - 19968: jis0208<<14 | 0x1F<<7 | 0x20, + 35532 - 19968: jis0208<<14 | 0x13<<7 | 0x31, + 35533 - 19968: jis0208<<14 | 0x4A<<7 | 0x39, + 35535 - 19968: jis0208<<14 | 0x1E<<7 | 0x3A, + 35537 - 19968: jis0212<<14 | 0x3D<<7 | 0x09, + 35538 - 19968: jis0208<<14 | 0x2D<<7 | 0x29, + 35539 - 19968: jis0212<<14 | 0x3D<<7 | 0x0A, + 35540 - 19968: jis0212<<14 | 0x3D<<7 | 0x0B, + 35541 - 19968: jis0212<<14 | 0x3D<<7 | 0x0C, + 35542 - 19968: jis0208<<14 | 0x2E<<7 | 0x1F, + 35543 - 19968: jis0212<<14 | 0x3D<<7 | 0x0D, + 35546 - 19968: jis0208<<14 | 0x4A<<7 | 0x3B, + 35547 - 19968: jis0208<<14 | 0x4A<<7 | 0x46, + 35548 - 19968: jis0208<<14 | 0x23<<7 | 0x14, + 35549 - 19968: jis0212<<14 | 0x3D<<7 | 0x0E, + 35550 - 19968: jis0208<<14 | 0x4A<<7 | 0x45, + 35551 - 19968: jis0208<<14 | 0x5A<<7 | 0x4B, + 35552 - 19968: jis0208<<14 | 0x4A<<7 | 0x42, + 35553 - 19968: jis0208<<14 | 0x4A<<7 | 0x4A, + 35554 - 19968: jis0208<<14 | 0x4A<<7 | 0x43, + 35556 - 19968: jis0208<<14 | 0x4A<<7 | 0x3F, + 35558 - 19968: jis0208<<14 | 0x23<<7 | 0x5B, + 35559 - 19968: jis0208<<14 | 0x4A<<7 | 0x3E, + 35563 - 19968: jis0208<<14 | 0x4A<<7 | 0x3C, + 35564 - 19968: jis0212<<14 | 0x3D<<7 | 0x10, + 35565 - 19968: jis0208<<14 | 0x2C<<7 | 0x00, + 35566 - 19968: jis0208<<14 | 0x1A<<7 | 0x4F, + 35568 - 19968: jis0212<<14 | 0x3D<<7 | 0x11, + 35569 - 19968: jis0208<<14 | 0x4A<<7 | 0x40, + 35571 - 19968: jis0208<<14 | 0x4A<<7 | 0x3D, + 35572 - 19968: jis0212<<14 | 0x3D<<7 | 0x12, + 35573 - 19968: jis0212<<14 | 0x3D<<7 | 0x13, + 35574 - 19968: jis0208<<14 | 0x5A<<7 | 0x4D, + 35575 - 19968: jis0208<<14 | 0x4A<<7 | 0x44, + 35576 - 19968: jis0208<<14 | 0x1C<<7 | 0x53, + 35578 - 19968: jis0208<<14 | 0x17<<7 | 0x20, + 35580 - 19968: jis0212<<14 | 0x3D<<7 | 0x15, + 35582 - 19968: jis0208<<14 | 0x21<<7 | 0x59, + 35583 - 19968: jis0212<<14 | 0x3D<<7 | 0x16, + 35584 - 19968: jis0208<<14 | 0x2A<<7 | 0x24, + 35585 - 19968: jis0208<<14 | 0x10<<7 | 0x39, + 35586 - 19968: jis0208<<14 | 0x0F<<7 | 0x41, + 35588 - 19968: jis0208<<14 | 0x25<<7 | 0x04, + 35589 - 19968: jis0212<<14 | 0x3D<<7 | 0x17, + 35590 - 19968: jis0212<<14 | 0x3D<<7 | 0x18, + 35591 - 19968: jis0208<<14 | 0x4A<<7 | 0x48, + 35594 - 19968: jis0212<<14 | 0x3D<<7 | 0x1E, + 35595 - 19968: jis0212<<14 | 0x3D<<7 | 0x19, + 35596 - 19968: jis0208<<14 | 0x4A<<7 | 0x47, + 35598 - 19968: jis0208<<14 | 0x25<<7 | 0x45, + 35600 - 19968: jis0208<<14 | 0x4A<<7 | 0x4C, + 35601 - 19968: jis0212<<14 | 0x3D<<7 | 0x1A, + 35604 - 19968: jis0208<<14 | 0x4A<<7 | 0x41, + 35606 - 19968: jis0208<<14 | 0x4A<<7 | 0x4B, + 35607 - 19968: jis0208<<14 | 0x4A<<7 | 0x4D, + 35609 - 19968: jis0208<<14 | 0x17<<7 | 0x0B, + 35610 - 19968: jis0208<<14 | 0x4A<<7 | 0x49, + 35611 - 19968: jis0208<<14 | 0x18<<7 | 0x35, + 35612 - 19968: jis0212<<14 | 0x3D<<7 | 0x1B, + 35613 - 19968: jis0208<<14 | 0x1B<<7 | 0x34, + 35614 - 19968: jis0212<<14 | 0x3D<<7 | 0x1C, + 35615 - 19968: jis0212<<14 | 0x3D<<7 | 0x1D, + 35616 - 19968: jis0208<<14 | 0x4A<<7 | 0x4E, + 35617 - 19968: jis0208<<14 | 0x2C<<7 | 0x37, + 35622 - 19968: jis0208<<14 | 0x4A<<7 | 0x51, + 35624 - 19968: jis0208<<14 | 0x4A<<7 | 0x54, + 35627 - 19968: jis0208<<14 | 0x4A<<7 | 0x52, + 35628 - 19968: jis0208<<14 | 0x28<<7 | 0x14, + 35629 - 19968: jis0212<<14 | 0x3D<<7 | 0x1F, + 35632 - 19968: jis0212<<14 | 0x3D<<7 | 0x20, + 35635 - 19968: jis0208<<14 | 0x4A<<7 | 0x4F, + 35639 - 19968: jis0212<<14 | 0x3D<<7 | 0x21, + 35641 - 19968: jis0208<<14 | 0x15<<7 | 0x3F, + 35644 - 19968: jis0212<<14 | 0x3D<<7 | 0x22, + 35646 - 19968: jis0208<<14 | 0x4A<<7 | 0x53, + 35649 - 19968: jis0208<<14 | 0x4A<<7 | 0x55, + 35650 - 19968: jis0212<<14 | 0x3D<<7 | 0x23, + 35651 - 19968: jis0212<<14 | 0x3D<<7 | 0x24, + 35652 - 19968: jis0212<<14 | 0x3D<<7 | 0x25, + 35653 - 19968: jis0212<<14 | 0x3D<<7 | 0x26, + 35654 - 19968: jis0212<<14 | 0x3D<<7 | 0x27, + 35656 - 19968: jis0212<<14 | 0x3D<<7 | 0x28, + 35657 - 19968: jis0208<<14 | 0x4A<<7 | 0x59, + 35660 - 19968: jis0208<<14 | 0x4A<<7 | 0x56, + 35661 - 19968: jis0212<<14 | 0x3D<<7 | 0x2D, + 35662 - 19968: jis0208<<14 | 0x4A<<7 | 0x58, + 35663 - 19968: jis0208<<14 | 0x4A<<7 | 0x57, + 35666 - 19968: jis0212<<14 | 0x3D<<7 | 0x29, + 35667 - 19968: jis0208<<14 | 0x5A<<7 | 0x4E, + 35668 - 19968: jis0212<<14 | 0x3D<<7 | 0x2B, + 35670 - 19968: jis0208<<14 | 0x4A<<7 | 0x5A, + 35672 - 19968: jis0208<<14 | 0x1B<<7 | 0x10, + 35673 - 19968: jis0212<<14 | 0x3D<<7 | 0x2C, + 35674 - 19968: jis0208<<14 | 0x4A<<7 | 0x5C, + 35675 - 19968: jis0208<<14 | 0x4A<<7 | 0x5B, + 35676 - 19968: jis0208<<14 | 0x28<<7 | 0x47, + 35678 - 19968: jis0212<<14 | 0x3D<<7 | 0x2E, + 35679 - 19968: jis0208<<14 | 0x4B<<7 | 0x00, + 35683 - 19968: jis0212<<14 | 0x3D<<7 | 0x2F, + 35686 - 19968: jis0208<<14 | 0x16<<7 | 0x38, + 35691 - 19968: jis0208<<14 | 0x4A<<7 | 0x5D, + 35692 - 19968: jis0208<<14 | 0x4B<<7 | 0x01, + 35693 - 19968: jis0212<<14 | 0x3D<<7 | 0x30, + 35695 - 19968: jis0208<<14 | 0x4B<<7 | 0x02, + 35696 - 19968: jis0208<<14 | 0x14<<7 | 0x23, + 35697 - 19968: jis0208<<14 | 0x45<<7 | 0x20, + 35698 - 19968: jis0208<<14 | 0x1D<<7 | 0x58, + 35700 - 19968: jis0208<<14 | 0x4B<<7 | 0x03, + 35702 - 19968: jis0212<<14 | 0x3D<<7 | 0x31, + 35703 - 19968: jis0208<<14 | 0x17<<7 | 0x4D, + 35704 - 19968: jis0212<<14 | 0x3D<<7 | 0x32, + 35705 - 19968: jis0212<<14 | 0x3D<<7 | 0x33, + 35708 - 19968: jis0212<<14 | 0x3D<<7 | 0x34, + 35709 - 19968: jis0208<<14 | 0x4B<<7 | 0x04, + 35710 - 19968: jis0212<<14 | 0x3D<<7 | 0x35, + 35711 - 19968: jis0208<<14 | 0x5A<<7 | 0x4F, + 35712 - 19968: jis0208<<14 | 0x4B<<7 | 0x05, + 35713 - 19968: jis0212<<14 | 0x3D<<7 | 0x36, + 35715 - 19968: jis0208<<14 | 0x1A<<7 | 0x1D, + 35716 - 19968: jis0212<<14 | 0x3D<<7 | 0x37, + 35717 - 19968: jis0212<<14 | 0x3D<<7 | 0x38, + 35722 - 19968: jis0208<<14 | 0x39<<7 | 0x2D, + 35723 - 19968: jis0212<<14 | 0x3D<<7 | 0x39, + 35724 - 19968: jis0208<<14 | 0x4B<<7 | 0x06, + 35725 - 19968: jis0212<<14 | 0x3D<<7 | 0x3A, + 35726 - 19968: jis0208<<14 | 0x4B<<7 | 0x07, + 35727 - 19968: jis0212<<14 | 0x3D<<7 | 0x3B, + 35728 - 19968: jis0208<<14 | 0x1C<<7 | 0x11, + 35730 - 19968: jis0208<<14 | 0x4B<<7 | 0x08, + 35731 - 19968: jis0208<<14 | 0x4B<<7 | 0x09, + 35732 - 19968: jis0212<<14 | 0x3D<<7 | 0x3C, + 35733 - 19968: jis0212<<14 | 0x3D<<7 | 0x3D, + 35734 - 19968: jis0208<<14 | 0x4B<<7 | 0x0A, + 35737 - 19968: jis0208<<14 | 0x4B<<7 | 0x0B, + 35738 - 19968: jis0208<<14 | 0x4B<<7 | 0x0C, + 35740 - 19968: jis0212<<14 | 0x3D<<7 | 0x3E, + 35742 - 19968: jis0212<<14 | 0x3D<<7 | 0x3F, + 35743 - 19968: jis0212<<14 | 0x3D<<7 | 0x40, + 35895 - 19968: jis0208<<14 | 0x22<<7 | 0x0A, + 35896 - 19968: jis0212<<14 | 0x3D<<7 | 0x41, + 35897 - 19968: jis0212<<14 | 0x3D<<7 | 0x42, + 35898 - 19968: jis0208<<14 | 0x4B<<7 | 0x0D, + 35901 - 19968: jis0212<<14 | 0x3D<<7 | 0x43, + 35902 - 19968: jis0212<<14 | 0x3D<<7 | 0x44, + 35903 - 19968: jis0208<<14 | 0x4B<<7 | 0x0F, + 35905 - 19968: jis0208<<14 | 0x4B<<7 | 0x0E, + 35909 - 19968: jis0212<<14 | 0x3D<<7 | 0x45, + 35910 - 19968: jis0208<<14 | 0x25<<7 | 0x05, + 35911 - 19968: jis0212<<14 | 0x3D<<7 | 0x46, + 35912 - 19968: jis0208<<14 | 0x4B<<7 | 0x10, + 35913 - 19968: jis0212<<14 | 0x3D<<7 | 0x47, + 35914 - 19968: jis0208<<14 | 0x2A<<7 | 0x0C, + 35915 - 19968: jis0212<<14 | 0x3D<<7 | 0x48, + 35916 - 19968: jis0208<<14 | 0x4B<<7 | 0x11, + 35918 - 19968: jis0208<<14 | 0x4B<<7 | 0x12, + 35919 - 19968: jis0212<<14 | 0x3D<<7 | 0x49, + 35920 - 19968: jis0208<<14 | 0x4B<<7 | 0x13, + 35921 - 19968: jis0212<<14 | 0x3D<<7 | 0x4A, + 35923 - 19968: jis0212<<14 | 0x3D<<7 | 0x4B, + 35924 - 19968: jis0212<<14 | 0x3D<<7 | 0x4C, + 35925 - 19968: jis0208<<14 | 0x4B<<7 | 0x14, + 35927 - 19968: jis0212<<14 | 0x3D<<7 | 0x4D, + 35928 - 19968: jis0212<<14 | 0x3D<<7 | 0x4E, + 35929 - 19968: jis0212<<14 | 0x3D<<7 | 0x51, + 35930 - 19968: jis0208<<14 | 0x25<<7 | 0x39, + 35931 - 19968: jis0212<<14 | 0x3D<<7 | 0x4F, + 35933 - 19968: jis0212<<14 | 0x3D<<7 | 0x50, + 35937 - 19968: jis0208<<14 | 0x1D<<7 | 0x3C, + 35938 - 19968: jis0208<<14 | 0x4B<<7 | 0x15, + 35939 - 19968: jis0212<<14 | 0x3D<<7 | 0x52, + 35940 - 19968: jis0212<<14 | 0x3D<<7 | 0x53, + 35942 - 19968: jis0212<<14 | 0x3D<<7 | 0x54, + 35944 - 19968: jis0212<<14 | 0x3D<<7 | 0x55, + 35945 - 19968: jis0212<<14 | 0x3D<<7 | 0x56, + 35946 - 19968: jis0208<<14 | 0x18<<7 | 0x4A, + 35947 - 19968: jis0208<<14 | 0x2F<<7 | 0x0D, + 35948 - 19968: jis0208<<14 | 0x4B<<7 | 0x16, + 35949 - 19968: jis0212<<14 | 0x3D<<7 | 0x57, + 35955 - 19968: jis0212<<14 | 0x3D<<7 | 0x58, + 35957 - 19968: jis0212<<14 | 0x3D<<7 | 0x59, + 35958 - 19968: jis0212<<14 | 0x3D<<7 | 0x5A, + 35960 - 19968: jis0208<<14 | 0x4B<<7 | 0x17, + 35961 - 19968: jis0208<<14 | 0x28<<7 | 0x1E, + 35962 - 19968: jis0208<<14 | 0x4B<<7 | 0x18, + 35963 - 19968: jis0212<<14 | 0x3D<<7 | 0x5B, + 35964 - 19968: jis0208<<14 | 0x4B<<7 | 0x20, + 35966 - 19968: jis0212<<14 | 0x3D<<7 | 0x5C, + 35970 - 19968: jis0208<<14 | 0x4B<<7 | 0x19, + 35973 - 19968: jis0208<<14 | 0x4B<<7 | 0x1B, + 35974 - 19968: jis0212<<14 | 0x3D<<7 | 0x5D, + 35975 - 19968: jis0212<<14 | 0x3E<<7 | 0x00, + 35977 - 19968: jis0208<<14 | 0x4B<<7 | 0x1A, + 35978 - 19968: jis0208<<14 | 0x4B<<7 | 0x1C, + 35979 - 19968: jis0212<<14 | 0x3E<<7 | 0x01, + 35980 - 19968: jis0208<<14 | 0x2A<<7 | 0x25, + 35981 - 19968: jis0208<<14 | 0x4B<<7 | 0x1D, + 35982 - 19968: jis0208<<14 | 0x4B<<7 | 0x1E, + 35984 - 19968: jis0212<<14 | 0x3E<<7 | 0x02, + 35986 - 19968: jis0212<<14 | 0x3E<<7 | 0x03, + 35987 - 19968: jis0212<<14 | 0x3E<<7 | 0x04, + 35988 - 19968: jis0208<<14 | 0x4B<<7 | 0x1F, + 35992 - 19968: jis0208<<14 | 0x4B<<7 | 0x21, + 35993 - 19968: jis0212<<14 | 0x3E<<7 | 0x05, + 35995 - 19968: jis0212<<14 | 0x3E<<7 | 0x06, + 35996 - 19968: jis0212<<14 | 0x3E<<7 | 0x07, + 35997 - 19968: jis0208<<14 | 0x12<<7 | 0x0C, + 35998 - 19968: jis0208<<14 | 0x23<<7 | 0x46, + 36000 - 19968: jis0208<<14 | 0x28<<7 | 0x48, + 36001 - 19968: jis0208<<14 | 0x19<<7 | 0x41, + 36002 - 19968: jis0208<<14 | 0x18<<7 | 0x36, + 36004 - 19968: jis0212<<14 | 0x3E<<7 | 0x08, + 36007 - 19968: jis0208<<14 | 0x28<<7 | 0x2E, + 36008 - 19968: jis0208<<14 | 0x11<<7 | 0x3E, + 36009 - 19968: jis0208<<14 | 0x27<<7 | 0x2D, + 36010 - 19968: jis0208<<14 | 0x4B<<7 | 0x24, + 36011 - 19968: jis0208<<14 | 0x13<<7 | 0x32, + 36012 - 19968: jis0208<<14 | 0x1F<<7 | 0x34, + 36013 - 19968: jis0208<<14 | 0x4B<<7 | 0x23, + 36014 - 19968: jis0208<<14 | 0x4B<<7 | 0x28, + 36015 - 19968: jis0208<<14 | 0x22<<7 | 0x58, + 36016 - 19968: jis0208<<14 | 0x2B<<7 | 0x42, + 36018 - 19968: jis0208<<14 | 0x4B<<7 | 0x26, + 36019 - 19968: jis0208<<14 | 0x4B<<7 | 0x27, + 36020 - 19968: jis0208<<14 | 0x14<<7 | 0x0D, + 36022 - 19968: jis0208<<14 | 0x4B<<7 | 0x29, + 36023 - 19968: jis0208<<14 | 0x26<<7 | 0x42, + 36024 - 19968: jis0208<<14 | 0x21<<7 | 0x3E, + 36025 - 19968: jis0212<<14 | 0x3E<<7 | 0x09, + 36026 - 19968: jis0212<<14 | 0x3E<<7 | 0x0A, + 36027 - 19968: jis0208<<14 | 0x27<<7 | 0x50, + 36028 - 19968: jis0208<<14 | 0x24<<7 | 0x1C, + 36029 - 19968: jis0208<<14 | 0x4B<<7 | 0x25, + 36031 - 19968: jis0208<<14 | 0x2A<<7 | 0x26, + 36032 - 19968: jis0208<<14 | 0x11<<7 | 0x4B, + 36033 - 19968: jis0208<<14 | 0x4B<<7 | 0x2B, + 36034 - 19968: jis0208<<14 | 0x2E<<7 | 0x07, + 36035 - 19968: jis0208<<14 | 0x23<<7 | 0x21, + 36036 - 19968: jis0208<<14 | 0x2E<<7 | 0x24, + 36037 - 19968: jis0212<<14 | 0x3E<<7 | 0x0B, + 36038 - 19968: jis0212<<14 | 0x3E<<7 | 0x0C, + 36039 - 19968: jis0208<<14 | 0x1A<<7 | 0x50, + 36040 - 19968: jis0208<<14 | 0x4B<<7 | 0x2A, + 36041 - 19968: jis0212<<14 | 0x3E<<7 | 0x0D, + 36042 - 19968: jis0208<<14 | 0x21<<7 | 0x10, + 36043 - 19968: jis0212<<14 | 0x3E<<7 | 0x0E, + 36045 - 19968: jis0208<<14 | 0x4B<<7 | 0x3B, + 36046 - 19968: jis0208<<14 | 0x20<<7 | 0x07, + 36047 - 19968: jis0212<<14 | 0x3E<<7 | 0x0F, + 36049 - 19968: jis0208<<14 | 0x25<<7 | 0x57, + 36051 - 19968: jis0208<<14 | 0x28<<7 | 0x2F, + 36053 - 19968: jis0212<<14 | 0x3E<<7 | 0x11, + 36054 - 19968: jis0212<<14 | 0x3E<<7 | 0x10, + 36057 - 19968: jis0212<<14 | 0x3E<<7 | 0x12, + 36058 - 19968: jis0208<<14 | 0x4B<<7 | 0x2E, + 36059 - 19968: jis0208<<14 | 0x1A<<7 | 0x1E, + 36060 - 19968: jis0208<<14 | 0x1A<<7 | 0x51, + 36061 - 19968: jis0212<<14 | 0x3E<<7 | 0x13, + 36062 - 19968: jis0208<<14 | 0x1D<<7 | 0x3D, + 36064 - 19968: jis0208<<14 | 0x26<<7 | 0x44, + 36065 - 19968: jis0212<<14 | 0x3E<<7 | 0x14, + 36066 - 19968: jis0208<<14 | 0x17<<7 | 0x0C, + 36067 - 19968: jis0208<<14 | 0x4B<<7 | 0x2D, + 36068 - 19968: jis0208<<14 | 0x4B<<7 | 0x2C, + 36070 - 19968: jis0208<<14 | 0x28<<7 | 0x49, + 36072 - 19968: jis0212<<14 | 0x3E<<7 | 0x15, + 36074 - 19968: jis0208<<14 | 0x1B<<7 | 0x20, + 36076 - 19968: jis0212<<14 | 0x3E<<7 | 0x16, + 36077 - 19968: jis0208<<14 | 0x24<<7 | 0x31, + 36079 - 19968: jis0212<<14 | 0x3E<<7 | 0x17, + 36080 - 19968: jis0208<<14 | 0x5A<<7 | 0x50, + 36082 - 19968: jis0212<<14 | 0x3E<<7 | 0x19, + 36084 - 19968: jis0208<<14 | 0x5A<<7 | 0x51, + 36085 - 19968: jis0212<<14 | 0x3E<<7 | 0x1A, + 36087 - 19968: jis0212<<14 | 0x3E<<7 | 0x1B, + 36088 - 19968: jis0212<<14 | 0x3E<<7 | 0x1C, + 36090 - 19968: jis0208<<14 | 0x4B<<7 | 0x30, + 36091 - 19968: jis0208<<14 | 0x4B<<7 | 0x31, + 36092 - 19968: jis0208<<14 | 0x18<<7 | 0x37, + 36093 - 19968: jis0208<<14 | 0x4B<<7 | 0x2F, + 36094 - 19968: jis0212<<14 | 0x3E<<7 | 0x1D, + 36095 - 19968: jis0212<<14 | 0x3E<<7 | 0x1E, + 36097 - 19968: jis0212<<14 | 0x3E<<7 | 0x1F, + 36099 - 19968: jis0212<<14 | 0x3E<<7 | 0x20, + 36100 - 19968: jis0208<<14 | 0x4B<<7 | 0x32, + 36101 - 19968: jis0208<<14 | 0x4B<<7 | 0x33, + 36103 - 19968: jis0208<<14 | 0x4B<<7 | 0x35, + 36104 - 19968: jis0208<<14 | 0x21<<7 | 0x02, + 36105 - 19968: jis0212<<14 | 0x3E<<7 | 0x21, + 36106 - 19968: jis0208<<14 | 0x4B<<7 | 0x34, + 36107 - 19968: jis0208<<14 | 0x13<<7 | 0x45, + 36109 - 19968: jis0208<<14 | 0x4B<<7 | 0x37, + 36111 - 19968: jis0208<<14 | 0x4B<<7 | 0x36, + 36112 - 19968: jis0208<<14 | 0x4B<<7 | 0x38, + 36114 - 19968: jis0208<<14 | 0x5A<<7 | 0x52, + 36115 - 19968: jis0208<<14 | 0x4B<<7 | 0x3A, + 36116 - 19968: jis0208<<14 | 0x4B<<7 | 0x3C, + 36118 - 19968: jis0208<<14 | 0x4B<<7 | 0x3D, + 36119 - 19968: jis0212<<14 | 0x3E<<7 | 0x23, + 36123 - 19968: jis0212<<14 | 0x3E<<7 | 0x24, + 36196 - 19968: jis0208<<14 | 0x1F<<7 | 0x35, + 36197 - 19968: jis0212<<14 | 0x3E<<7 | 0x25, + 36198 - 19968: jis0208<<14 | 0x1B<<7 | 0x2E, + 36199 - 19968: jis0208<<14 | 0x4B<<7 | 0x3E, + 36201 - 19968: jis0212<<14 | 0x3E<<7 | 0x26, + 36203 - 19968: jis0208<<14 | 0x12<<7 | 0x31, + 36204 - 19968: jis0212<<14 | 0x3E<<7 | 0x27, + 36205 - 19968: jis0208<<14 | 0x4B<<7 | 0x3F, + 36206 - 19968: jis0212<<14 | 0x3E<<7 | 0x28, + 36208 - 19968: jis0208<<14 | 0x20<<7 | 0x55, + 36209 - 19968: jis0208<<14 | 0x4B<<7 | 0x40, + 36211 - 19968: jis0208<<14 | 0x4B<<7 | 0x41, + 36212 - 19968: jis0208<<14 | 0x28<<7 | 0x4A, + 36214 - 19968: jis0208<<14 | 0x5A<<7 | 0x53, + 36215 - 19968: jis0208<<14 | 0x14<<7 | 0x0E, + 36223 - 19968: jis0212<<14 | 0x3E<<7 | 0x29, + 36225 - 19968: jis0208<<14 | 0x4B<<7 | 0x42, + 36226 - 19968: jis0212<<14 | 0x3E<<7 | 0x2A, + 36228 - 19968: jis0212<<14 | 0x3E<<7 | 0x2B, + 36229 - 19968: jis0208<<14 | 0x23<<7 | 0x15, + 36232 - 19968: jis0212<<14 | 0x3E<<7 | 0x2C, + 36234 - 19968: jis0208<<14 | 0x10<<7 | 0x3A, + 36237 - 19968: jis0212<<14 | 0x3E<<7 | 0x2D, + 36240 - 19968: jis0212<<14 | 0x3E<<7 | 0x2E, + 36241 - 19968: jis0212<<14 | 0x3E<<7 | 0x2F, + 36245 - 19968: jis0212<<14 | 0x3E<<7 | 0x30, + 36249 - 19968: jis0208<<14 | 0x4B<<7 | 0x43, + 36254 - 19968: jis0212<<14 | 0x3E<<7 | 0x31, + 36255 - 19968: jis0212<<14 | 0x3E<<7 | 0x32, + 36256 - 19968: jis0212<<14 | 0x3E<<7 | 0x33, + 36259 - 19968: jis0208<<14 | 0x1B<<7 | 0x50, + 36262 - 19968: jis0212<<14 | 0x3E<<7 | 0x34, + 36264 - 19968: jis0208<<14 | 0x1E<<7 | 0x55, + 36267 - 19968: jis0212<<14 | 0x3E<<7 | 0x35, + 36268 - 19968: jis0212<<14 | 0x3E<<7 | 0x36, + 36271 - 19968: jis0212<<14 | 0x3E<<7 | 0x37, + 36274 - 19968: jis0212<<14 | 0x3E<<7 | 0x38, + 36275 - 19968: jis0208<<14 | 0x21<<7 | 0x0C, + 36277 - 19968: jis0212<<14 | 0x3E<<7 | 0x39, + 36279 - 19968: jis0212<<14 | 0x3E<<7 | 0x3A, + 36281 - 19968: jis0212<<14 | 0x3E<<7 | 0x3B, + 36282 - 19968: jis0208<<14 | 0x4B<<7 | 0x46, + 36283 - 19968: jis0212<<14 | 0x3E<<7 | 0x3C, + 36284 - 19968: jis0212<<14 | 0x3E<<7 | 0x4E, + 36286 - 19968: jis0208<<14 | 0x4B<<7 | 0x45, + 36288 - 19968: jis0212<<14 | 0x3E<<7 | 0x3D, + 36290 - 19968: jis0208<<14 | 0x4B<<7 | 0x44, + 36293 - 19968: jis0212<<14 | 0x3E<<7 | 0x3E, + 36294 - 19968: jis0212<<14 | 0x3E<<7 | 0x3F, + 36295 - 19968: jis0212<<14 | 0x3E<<7 | 0x40, + 36296 - 19968: jis0212<<14 | 0x3E<<7 | 0x41, + 36298 - 19968: jis0212<<14 | 0x3E<<7 | 0x42, + 36299 - 19968: jis0208<<14 | 0x4B<<7 | 0x4C, + 36300 - 19968: jis0208<<14 | 0x4B<<7 | 0x4A, + 36302 - 19968: jis0212<<14 | 0x3E<<7 | 0x43, + 36303 - 19968: jis0208<<14 | 0x4B<<7 | 0x47, + 36305 - 19968: jis0212<<14 | 0x3E<<7 | 0x44, + 36308 - 19968: jis0212<<14 | 0x3E<<7 | 0x45, + 36309 - 19968: jis0212<<14 | 0x3E<<7 | 0x46, + 36310 - 19968: jis0208<<14 | 0x4B<<7 | 0x49, + 36311 - 19968: jis0212<<14 | 0x3E<<7 | 0x47, + 36313 - 19968: jis0212<<14 | 0x3E<<7 | 0x48, + 36314 - 19968: jis0208<<14 | 0x4B<<7 | 0x48, + 36315 - 19968: jis0208<<14 | 0x4B<<7 | 0x4B, + 36317 - 19968: jis0208<<14 | 0x14<<7 | 0x56, + 36319 - 19968: jis0208<<14 | 0x4B<<7 | 0x4F, + 36321 - 19968: jis0208<<14 | 0x1F<<7 | 0x36, + 36323 - 19968: jis0208<<14 | 0x4B<<7 | 0x50, + 36324 - 19968: jis0212<<14 | 0x3E<<7 | 0x49, + 36325 - 19968: jis0212<<14 | 0x3E<<7 | 0x4A, + 36327 - 19968: jis0212<<14 | 0x3E<<7 | 0x4B, + 36328 - 19968: jis0208<<14 | 0x17<<7 | 0x38, + 36330 - 19968: jis0208<<14 | 0x4B<<7 | 0x4D, + 36331 - 19968: jis0208<<14 | 0x4B<<7 | 0x4E, + 36332 - 19968: jis0212<<14 | 0x3E<<7 | 0x4C, + 36335 - 19968: jis0208<<14 | 0x2E<<7 | 0x08, + 36336 - 19968: jis0212<<14 | 0x3E<<7 | 0x4D, + 36337 - 19968: jis0212<<14 | 0x3E<<7 | 0x4F, + 36338 - 19968: jis0212<<14 | 0x3E<<7 | 0x50, + 36339 - 19968: jis0208<<14 | 0x23<<7 | 0x16, + 36340 - 19968: jis0212<<14 | 0x3E<<7 | 0x51, + 36341 - 19968: jis0208<<14 | 0x20<<7 | 0x08, + 36348 - 19968: jis0208<<14 | 0x4B<<7 | 0x51, + 36349 - 19968: jis0212<<14 | 0x3E<<7 | 0x52, + 36351 - 19968: jis0208<<14 | 0x4B<<7 | 0x54, + 36353 - 19968: jis0212<<14 | 0x3E<<7 | 0x53, + 36356 - 19968: jis0212<<14 | 0x3E<<7 | 0x54, + 36357 - 19968: jis0212<<14 | 0x3E<<7 | 0x55, + 36358 - 19968: jis0212<<14 | 0x3E<<7 | 0x56, + 36360 - 19968: jis0208<<14 | 0x4B<<7 | 0x52, + 36361 - 19968: jis0208<<14 | 0x4B<<7 | 0x53, + 36362 - 19968: jis0208<<14 | 0x2C<<7 | 0x38, + 36363 - 19968: jis0212<<14 | 0x3E<<7 | 0x57, + 36367 - 19968: jis0208<<14 | 0x25<<7 | 0x06, + 36368 - 19968: jis0208<<14 | 0x4B<<7 | 0x57, + 36369 - 19968: jis0212<<14 | 0x3E<<7 | 0x58, + 36372 - 19968: jis0212<<14 | 0x3E<<7 | 0x59, + 36374 - 19968: jis0212<<14 | 0x3E<<7 | 0x5A, + 36381 - 19968: jis0208<<14 | 0x4B<<7 | 0x55, + 36382 - 19968: jis0208<<14 | 0x4B<<7 | 0x56, + 36383 - 19968: jis0208<<14 | 0x4B<<7 | 0x58, + 36384 - 19968: jis0212<<14 | 0x3E<<7 | 0x5B, + 36385 - 19968: jis0212<<14 | 0x3E<<7 | 0x5C, + 36386 - 19968: jis0212<<14 | 0x3E<<7 | 0x5D, + 36387 - 19968: jis0212<<14 | 0x3F<<7 | 0x00, + 36390 - 19968: jis0212<<14 | 0x3F<<7 | 0x01, + 36391 - 19968: jis0212<<14 | 0x3F<<7 | 0x02, + 36394 - 19968: jis0208<<14 | 0x4C<<7 | 0x08, + 36400 - 19968: jis0208<<14 | 0x4B<<7 | 0x5B, + 36401 - 19968: jis0212<<14 | 0x3F<<7 | 0x03, + 36403 - 19968: jis0212<<14 | 0x3F<<7 | 0x04, + 36404 - 19968: jis0208<<14 | 0x4B<<7 | 0x5C, + 36405 - 19968: jis0208<<14 | 0x4B<<7 | 0x5A, + 36406 - 19968: jis0212<<14 | 0x3F<<7 | 0x05, + 36407 - 19968: jis0212<<14 | 0x3F<<7 | 0x06, + 36408 - 19968: jis0212<<14 | 0x3F<<7 | 0x07, + 36409 - 19968: jis0212<<14 | 0x3F<<7 | 0x08, + 36413 - 19968: jis0212<<14 | 0x3F<<7 | 0x09, + 36416 - 19968: jis0212<<14 | 0x3F<<7 | 0x0A, + 36417 - 19968: jis0212<<14 | 0x3F<<7 | 0x0B, + 36418 - 19968: jis0208<<14 | 0x4B<<7 | 0x59, + 36420 - 19968: jis0208<<14 | 0x23<<7 | 0x5C, + 36423 - 19968: jis0208<<14 | 0x4C<<7 | 0x00, + 36424 - 19968: jis0208<<14 | 0x4C<<7 | 0x04, + 36425 - 19968: jis0208<<14 | 0x4C<<7 | 0x01, + 36426 - 19968: jis0208<<14 | 0x4B<<7 | 0x5D, + 36427 - 19968: jis0212<<14 | 0x3F<<7 | 0x0C, + 36428 - 19968: jis0208<<14 | 0x4C<<7 | 0x02, + 36429 - 19968: jis0212<<14 | 0x3F<<7 | 0x0D, + 36430 - 19968: jis0212<<14 | 0x3F<<7 | 0x0E, + 36431 - 19968: jis0212<<14 | 0x3F<<7 | 0x0F, + 36432 - 19968: jis0208<<14 | 0x4C<<7 | 0x03, + 36436 - 19968: jis0212<<14 | 0x3F<<7 | 0x10, + 36437 - 19968: jis0208<<14 | 0x4C<<7 | 0x0A, + 36441 - 19968: jis0208<<14 | 0x4C<<7 | 0x05, + 36443 - 19968: jis0212<<14 | 0x3F<<7 | 0x11, + 36444 - 19968: jis0212<<14 | 0x3F<<7 | 0x12, + 36445 - 19968: jis0212<<14 | 0x3F<<7 | 0x13, + 36446 - 19968: jis0212<<14 | 0x3F<<7 | 0x14, + 36447 - 19968: jis0208<<14 | 0x1F<<7 | 0x37, + 36448 - 19968: jis0208<<14 | 0x4C<<7 | 0x07, + 36449 - 19968: jis0212<<14 | 0x3F<<7 | 0x15, + 36450 - 19968: jis0212<<14 | 0x3F<<7 | 0x16, + 36451 - 19968: jis0208<<14 | 0x4C<<7 | 0x09, + 36452 - 19968: jis0208<<14 | 0x4C<<7 | 0x06, + 36457 - 19968: jis0212<<14 | 0x3F<<7 | 0x17, + 36460 - 19968: jis0212<<14 | 0x3F<<7 | 0x18, + 36461 - 19968: jis0212<<14 | 0x3F<<7 | 0x19, + 36463 - 19968: jis0212<<14 | 0x3F<<7 | 0x1A, + 36464 - 19968: jis0212<<14 | 0x3F<<7 | 0x1B, + 36465 - 19968: jis0212<<14 | 0x3F<<7 | 0x1C, + 36466 - 19968: jis0208<<14 | 0x4C<<7 | 0x0C, + 36468 - 19968: jis0208<<14 | 0x1C<<7 | 0x12, + 36470 - 19968: jis0208<<14 | 0x4C<<7 | 0x0B, + 36473 - 19968: jis0212<<14 | 0x3F<<7 | 0x1D, + 36474 - 19968: jis0212<<14 | 0x3F<<7 | 0x1E, + 36475 - 19968: jis0212<<14 | 0x3F<<7 | 0x1F, + 36476 - 19968: jis0208<<14 | 0x4C<<7 | 0x0D, + 36481 - 19968: jis0208<<14 | 0x4C<<7 | 0x0E, + 36482 - 19968: jis0212<<14 | 0x3F<<7 | 0x20, + 36483 - 19968: jis0212<<14 | 0x3F<<7 | 0x21, + 36484 - 19968: jis0208<<14 | 0x4C<<7 | 0x11, + 36485 - 19968: jis0208<<14 | 0x4C<<7 | 0x10, + 36487 - 19968: jis0208<<14 | 0x4C<<7 | 0x0F, + 36489 - 19968: jis0212<<14 | 0x3F<<7 | 0x22, + 36490 - 19968: jis0208<<14 | 0x4C<<7 | 0x13, + 36491 - 19968: jis0208<<14 | 0x4C<<7 | 0x12, + 36493 - 19968: jis0208<<14 | 0x2B<<7 | 0x55, + 36496 - 19968: jis0212<<14 | 0x3F<<7 | 0x23, + 36497 - 19968: jis0208<<14 | 0x4C<<7 | 0x15, + 36498 - 19968: jis0212<<14 | 0x3F<<7 | 0x24, + 36499 - 19968: jis0208<<14 | 0x4C<<7 | 0x14, + 36500 - 19968: jis0208<<14 | 0x4C<<7 | 0x16, + 36501 - 19968: jis0212<<14 | 0x3F<<7 | 0x25, + 36505 - 19968: jis0208<<14 | 0x4C<<7 | 0x17, + 36506 - 19968: jis0212<<14 | 0x3F<<7 | 0x26, + 36507 - 19968: jis0212<<14 | 0x3F<<7 | 0x27, + 36509 - 19968: jis0212<<14 | 0x3F<<7 | 0x28, + 36510 - 19968: jis0212<<14 | 0x3F<<7 | 0x29, + 36513 - 19968: jis0208<<14 | 0x4C<<7 | 0x19, + 36514 - 19968: jis0212<<14 | 0x3F<<7 | 0x2A, + 36519 - 19968: jis0212<<14 | 0x3F<<7 | 0x2B, + 36521 - 19968: jis0212<<14 | 0x3F<<7 | 0x2C, + 36522 - 19968: jis0208<<14 | 0x4C<<7 | 0x18, + 36523 - 19968: jis0208<<14 | 0x1E<<7 | 0x27, + 36524 - 19968: jis0208<<14 | 0x4C<<7 | 0x1A, + 36525 - 19968: jis0212<<14 | 0x3F<<7 | 0x2D, + 36526 - 19968: jis0212<<14 | 0x3F<<7 | 0x2E, + 36527 - 19968: jis0208<<14 | 0x15<<7 | 0x4C, + 36528 - 19968: jis0208<<14 | 0x4C<<7 | 0x1B, + 36529 - 19968: jis0208<<14 | 0x4C<<7 | 0x1D, + 36531 - 19968: jis0212<<14 | 0x3F<<7 | 0x2F, + 36533 - 19968: jis0212<<14 | 0x3F<<7 | 0x30, + 36538 - 19968: jis0212<<14 | 0x3F<<7 | 0x31, + 36539 - 19968: jis0212<<14 | 0x3F<<7 | 0x32, + 36542 - 19968: jis0208<<14 | 0x4C<<7 | 0x1E, + 36544 - 19968: jis0212<<14 | 0x3F<<7 | 0x33, + 36545 - 19968: jis0212<<14 | 0x3F<<7 | 0x34, + 36547 - 19968: jis0212<<14 | 0x3F<<7 | 0x35, + 36548 - 19968: jis0212<<14 | 0x3F<<7 | 0x36, + 36549 - 19968: jis0208<<14 | 0x4C<<7 | 0x1F, + 36550 - 19968: jis0208<<14 | 0x4C<<7 | 0x1C, + 36551 - 19968: jis0212<<14 | 0x3F<<7 | 0x37, + 36552 - 19968: jis0208<<14 | 0x4C<<7 | 0x20, + 36554 - 19968: jis0208<<14 | 0x1B<<7 | 0x35, + 36555 - 19968: jis0208<<14 | 0x4C<<7 | 0x21, + 36556 - 19968: jis0208<<14 | 0x14<<7 | 0x0F, + 36557 - 19968: jis0208<<14 | 0x16<<7 | 0x12, + 36559 - 19968: jis0208<<14 | 0x5A<<7 | 0x55, + 36561 - 19968: jis0212<<14 | 0x3F<<7 | 0x39, + 36562 - 19968: jis0208<<14 | 0x17<<7 | 0x0D, + 36564 - 19968: jis0212<<14 | 0x3F<<7 | 0x3A, + 36571 - 19968: jis0208<<14 | 0x4C<<7 | 0x22, + 36572 - 19968: jis0212<<14 | 0x3F<<7 | 0x3B, + 36575 - 19968: jis0208<<14 | 0x25<<7 | 0x4F, + 36578 - 19968: jis0208<<14 | 0x24<<7 | 0x1D, + 36579 - 19968: jis0208<<14 | 0x4C<<7 | 0x23, + 36584 - 19968: jis0212<<14 | 0x3F<<7 | 0x3C, + 36587 - 19968: jis0208<<14 | 0x4C<<7 | 0x26, + 36589 - 19968: jis0212<<14 | 0x3F<<7 | 0x43, + 36590 - 19968: jis0212<<14 | 0x3F<<7 | 0x3D, + 36592 - 19968: jis0212<<14 | 0x3F<<7 | 0x3E, + 36593 - 19968: jis0212<<14 | 0x3F<<7 | 0x3F, + 36599 - 19968: jis0212<<14 | 0x3F<<7 | 0x40, + 36600 - 19968: jis0208<<14 | 0x1B<<7 | 0x13, + 36601 - 19968: jis0212<<14 | 0x3F<<7 | 0x41, + 36602 - 19968: jis0212<<14 | 0x3F<<7 | 0x42, + 36603 - 19968: jis0208<<14 | 0x4C<<7 | 0x25, + 36604 - 19968: jis0208<<14 | 0x4C<<7 | 0x24, + 36605 - 19968: jis0208<<14 | 0x16<<7 | 0x39, + 36606 - 19968: jis0208<<14 | 0x4C<<7 | 0x27, + 36608 - 19968: jis0212<<14 | 0x3F<<7 | 0x44, + 36610 - 19968: jis0212<<14 | 0x3F<<7 | 0x45, + 36611 - 19968: jis0208<<14 | 0x12<<7 | 0x32, + 36613 - 19968: jis0208<<14 | 0x4C<<7 | 0x29, + 36615 - 19968: jis0212<<14 | 0x3F<<7 | 0x46, + 36616 - 19968: jis0212<<14 | 0x3F<<7 | 0x47, + 36617 - 19968: jis0208<<14 | 0x19<<7 | 0x3B, + 36618 - 19968: jis0208<<14 | 0x4C<<7 | 0x28, + 36620 - 19968: jis0208<<14 | 0x4C<<7 | 0x31, + 36623 - 19968: jis0212<<14 | 0x3F<<7 | 0x48, + 36624 - 19968: jis0212<<14 | 0x3F<<7 | 0x49, + 36626 - 19968: jis0208<<14 | 0x4C<<7 | 0x2B, + 36627 - 19968: jis0208<<14 | 0x4C<<7 | 0x2D, + 36628 - 19968: jis0208<<14 | 0x29<<7 | 0x44, + 36629 - 19968: jis0208<<14 | 0x4C<<7 | 0x2A, + 36630 - 19968: jis0212<<14 | 0x3F<<7 | 0x4A, + 36631 - 19968: jis0212<<14 | 0x3F<<7 | 0x4B, + 36632 - 19968: jis0212<<14 | 0x3F<<7 | 0x4C, + 36633 - 19968: jis0208<<14 | 0x4C<<7 | 0x2C, + 36635 - 19968: jis0208<<14 | 0x4C<<7 | 0x30, + 36636 - 19968: jis0208<<14 | 0x4C<<7 | 0x2E, + 36637 - 19968: jis0208<<14 | 0x14<<7 | 0x10, + 36638 - 19968: jis0212<<14 | 0x3F<<7 | 0x4D, + 36639 - 19968: jis0208<<14 | 0x4C<<7 | 0x2F, + 36640 - 19968: jis0212<<14 | 0x3F<<7 | 0x4E, + 36641 - 19968: jis0212<<14 | 0x3F<<7 | 0x4F, + 36643 - 19968: jis0212<<14 | 0x3F<<7 | 0x50, + 36645 - 19968: jis0212<<14 | 0x3F<<7 | 0x51, + 36646 - 19968: jis0208<<14 | 0x4C<<7 | 0x32, + 36647 - 19968: jis0212<<14 | 0x3F<<7 | 0x52, + 36648 - 19968: jis0212<<14 | 0x3F<<7 | 0x53, + 36649 - 19968: jis0208<<14 | 0x26<<7 | 0x39, + 36650 - 19968: jis0208<<14 | 0x2D<<7 | 0x37, + 36652 - 19968: jis0212<<14 | 0x3F<<7 | 0x54, + 36653 - 19968: jis0212<<14 | 0x3F<<7 | 0x55, + 36654 - 19968: jis0212<<14 | 0x3F<<7 | 0x56, + 36655 - 19968: jis0208<<14 | 0x1C<<7 | 0x13, + 36659 - 19968: jis0208<<14 | 0x4C<<7 | 0x33, + 36660 - 19968: jis0212<<14 | 0x3F<<7 | 0x57, + 36661 - 19968: jis0212<<14 | 0x3F<<7 | 0x58, + 36662 - 19968: jis0212<<14 | 0x3F<<7 | 0x59, + 36663 - 19968: jis0212<<14 | 0x3F<<7 | 0x5A, + 36664 - 19968: jis0208<<14 | 0x2C<<7 | 0x01, + 36665 - 19968: jis0208<<14 | 0x4C<<7 | 0x35, + 36666 - 19968: jis0212<<14 | 0x3F<<7 | 0x5B, + 36667 - 19968: jis0208<<14 | 0x4C<<7 | 0x34, + 36670 - 19968: jis0208<<14 | 0x4C<<7 | 0x38, + 36671 - 19968: jis0208<<14 | 0x2C<<7 | 0x20, + 36672 - 19968: jis0212<<14 | 0x3F<<7 | 0x5C, + 36673 - 19968: jis0212<<14 | 0x3F<<7 | 0x5D, + 36674 - 19968: jis0208<<14 | 0x4C<<7 | 0x37, + 36675 - 19968: jis0212<<14 | 0x40<<7 | 0x00, + 36676 - 19968: jis0208<<14 | 0x12<<7 | 0x4C, + 36677 - 19968: jis0208<<14 | 0x4C<<7 | 0x36, + 36678 - 19968: jis0208<<14 | 0x4C<<7 | 0x3B, + 36679 - 19968: jis0212<<14 | 0x40<<7 | 0x01, + 36681 - 19968: jis0208<<14 | 0x4C<<7 | 0x3A, + 36684 - 19968: jis0208<<14 | 0x4C<<7 | 0x39, + 36685 - 19968: jis0208<<14 | 0x24<<7 | 0x11, + 36686 - 19968: jis0208<<14 | 0x4C<<7 | 0x3C, + 36687 - 19968: jis0212<<14 | 0x40<<7 | 0x02, + 36689 - 19968: jis0212<<14 | 0x40<<7 | 0x03, + 36690 - 19968: jis0212<<14 | 0x40<<7 | 0x04, + 36691 - 19968: jis0212<<14 | 0x40<<7 | 0x05, + 36692 - 19968: jis0212<<14 | 0x40<<7 | 0x06, + 36693 - 19968: jis0212<<14 | 0x40<<7 | 0x07, + 36695 - 19968: jis0208<<14 | 0x4C<<7 | 0x3D, + 36696 - 19968: jis0212<<14 | 0x40<<7 | 0x08, + 36700 - 19968: jis0208<<14 | 0x4C<<7 | 0x3E, + 36701 - 19968: jis0212<<14 | 0x40<<7 | 0x09, + 36702 - 19968: jis0212<<14 | 0x40<<7 | 0x0A, + 36703 - 19968: jis0208<<14 | 0x18<<7 | 0x4B, + 36705 - 19968: jis0208<<14 | 0x16<<7 | 0x04, + 36706 - 19968: jis0208<<14 | 0x4C<<7 | 0x3F, + 36707 - 19968: jis0208<<14 | 0x4C<<7 | 0x40, + 36708 - 19968: jis0208<<14 | 0x4C<<7 | 0x41, + 36709 - 19968: jis0212<<14 | 0x40<<7 | 0x0B, + 36763 - 19968: jis0208<<14 | 0x1E<<7 | 0x28, + 36764 - 19968: jis0208<<14 | 0x4C<<7 | 0x42, + 36765 - 19968: jis0212<<14 | 0x40<<7 | 0x0C, + 36766 - 19968: jis0208<<14 | 0x1B<<7 | 0x0C, + 36767 - 19968: jis0208<<14 | 0x4C<<7 | 0x43, + 36768 - 19968: jis0212<<14 | 0x40<<7 | 0x0D, + 36769 - 19968: jis0212<<14 | 0x40<<7 | 0x0E, + 36771 - 19968: jis0208<<14 | 0x4C<<7 | 0x44, + 36772 - 19968: jis0212<<14 | 0x40<<7 | 0x0F, + 36773 - 19968: jis0212<<14 | 0x40<<7 | 0x10, + 36774 - 19968: jis0212<<14 | 0x40<<7 | 0x11, + 36775 - 19968: jis0208<<14 | 0x31<<7 | 0x00, + 36776 - 19968: jis0208<<14 | 0x30<<7 | 0x5D, + 36781 - 19968: jis0208<<14 | 0x4C<<7 | 0x45, + 36782 - 19968: jis0208<<14 | 0x44<<7 | 0x4F, + 36783 - 19968: jis0208<<14 | 0x4C<<7 | 0x46, + 36784 - 19968: jis0208<<14 | 0x22<<7 | 0x03, + 36785 - 19968: jis0208<<14 | 0x1E<<7 | 0x0A, + 36786 - 19968: jis0208<<14 | 0x26<<7 | 0x1F, + 36789 - 19968: jis0212<<14 | 0x40<<7 | 0x12, + 36790 - 19968: jis0212<<14 | 0x40<<7 | 0x13, + 36791 - 19968: jis0208<<14 | 0x4C<<7 | 0x47, + 36792 - 19968: jis0212<<14 | 0x40<<7 | 0x14, + 36794 - 19968: jis0208<<14 | 0x29<<7 | 0x34, + 36795 - 19968: jis0208<<14 | 0x23<<7 | 0x33, + 36796 - 19968: jis0208<<14 | 0x18<<7 | 0x5D, + 36798 - 19968: jis0212<<14 | 0x40<<7 | 0x15, + 36799 - 19968: jis0208<<14 | 0x22<<7 | 0x08, + 36800 - 19968: jis0212<<14 | 0x40<<7 | 0x16, + 36801 - 19968: jis0212<<14 | 0x40<<7 | 0x17, + 36802 - 19968: jis0208<<14 | 0x10<<7 | 0x09, + 36804 - 19968: jis0208<<14 | 0x2A<<7 | 0x57, + 36805 - 19968: jis0208<<14 | 0x1E<<7 | 0x36, + 36806 - 19968: jis0212<<14 | 0x40<<7 | 0x18, + 36810 - 19968: jis0212<<14 | 0x40<<7 | 0x19, + 36811 - 19968: jis0212<<14 | 0x40<<7 | 0x1A, + 36813 - 19968: jis0212<<14 | 0x40<<7 | 0x1B, + 36814 - 19968: jis0208<<14 | 0x16<<7 | 0x3D, + 36816 - 19968: jis0212<<14 | 0x40<<7 | 0x1C, + 36817 - 19968: jis0208<<14 | 0x15<<7 | 0x40, + 36818 - 19968: jis0212<<14 | 0x40<<7 | 0x1D, + 36819 - 19968: jis0212<<14 | 0x40<<7 | 0x1E, + 36820 - 19968: jis0208<<14 | 0x29<<7 | 0x35, + 36821 - 19968: jis0212<<14 | 0x40<<7 | 0x1F, + 36826 - 19968: jis0208<<14 | 0x4C<<7 | 0x48, + 36832 - 19968: jis0212<<14 | 0x40<<7 | 0x20, + 36834 - 19968: jis0208<<14 | 0x4C<<7 | 0x4A, + 36835 - 19968: jis0212<<14 | 0x40<<7 | 0x21, + 36836 - 19968: jis0212<<14 | 0x40<<7 | 0x22, + 36837 - 19968: jis0208<<14 | 0x4C<<7 | 0x49, + 36838 - 19968: jis0208<<14 | 0x11<<7 | 0x3F, + 36840 - 19968: jis0212<<14 | 0x40<<7 | 0x23, + 36841 - 19968: jis0208<<14 | 0x25<<7 | 0x55, + 36842 - 19968: jis0208<<14 | 0x4C<<7 | 0x4B, + 36843 - 19968: jis0208<<14 | 0x26<<7 | 0x56, + 36845 - 19968: jis0208<<14 | 0x24<<7 | 0x12, + 36846 - 19968: jis0212<<14 | 0x40<<7 | 0x24, + 36847 - 19968: jis0208<<14 | 0x4C<<7 | 0x4C, + 36848 - 19968: jis0208<<14 | 0x1C<<7 | 0x31, + 36849 - 19968: jis0212<<14 | 0x40<<7 | 0x25, + 36852 - 19968: jis0208<<14 | 0x4C<<7 | 0x4E, + 36853 - 19968: jis0212<<14 | 0x40<<7 | 0x26, + 36854 - 19968: jis0212<<14 | 0x40<<7 | 0x27, + 36855 - 19968: jis0208<<14 | 0x2B<<7 | 0x21, + 36856 - 19968: jis0208<<14 | 0x4C<<7 | 0x5D, + 36857 - 19968: jis0208<<14 | 0x4C<<7 | 0x50, + 36858 - 19968: jis0208<<14 | 0x4C<<7 | 0x51, + 36859 - 19968: jis0212<<14 | 0x40<<7 | 0x28, + 36861 - 19968: jis0208<<14 | 0x23<<7 | 0x28, + 36862 - 19968: jis0212<<14 | 0x40<<7 | 0x29, + 36864 - 19968: jis0208<<14 | 0x21<<7 | 0x3F, + 36865 - 19968: jis0208<<14 | 0x20<<7 | 0x56, + 36866 - 19968: jis0212<<14 | 0x40<<7 | 0x2A, + 36867 - 19968: jis0208<<14 | 0x25<<7 | 0x07, + 36868 - 19968: jis0212<<14 | 0x40<<7 | 0x2B, + 36869 - 19968: jis0208<<14 | 0x4C<<7 | 0x4F, + 36870 - 19968: jis0208<<14 | 0x14<<7 | 0x34, + 36872 - 19968: jis0212<<14 | 0x40<<7 | 0x2C, + 36875 - 19968: jis0208<<14 | 0x4C<<7 | 0x58, + 36876 - 19968: jis0212<<14 | 0x40<<7 | 0x2D, + 36877 - 19968: jis0208<<14 | 0x4C<<7 | 0x55, + 36878 - 19968: jis0208<<14 | 0x4D<<7 | 0x04, + 36879 - 19968: jis0208<<14 | 0x25<<7 | 0x08, + 36880 - 19968: jis0208<<14 | 0x22<<7 | 0x3F, + 36881 - 19968: jis0208<<14 | 0x4C<<7 | 0x52, + 36883 - 19968: jis0208<<14 | 0x23<<7 | 0x5D, + 36884 - 19968: jis0208<<14 | 0x24<<7 | 0x32, + 36885 - 19968: jis0208<<14 | 0x4C<<7 | 0x53, + 36886 - 19968: jis0208<<14 | 0x4C<<7 | 0x57, + 36887 - 19968: jis0208<<14 | 0x1E<<7 | 0x3F, + 36888 - 19968: jis0212<<14 | 0x40<<7 | 0x2E, + 36889 - 19968: jis0208<<14 | 0x26<<7 | 0x46, + 36890 - 19968: jis0208<<14 | 0x23<<7 | 0x2B, + 36891 - 19968: jis0212<<14 | 0x40<<7 | 0x2F, + 36893 - 19968: jis0208<<14 | 0x1F<<7 | 0x21, + 36894 - 19968: jis0208<<14 | 0x4C<<7 | 0x56, + 36895 - 19968: jis0208<<14 | 0x21<<7 | 0x0D, + 36896 - 19968: jis0208<<14 | 0x21<<7 | 0x03, + 36897 - 19968: jis0208<<14 | 0x4C<<7 | 0x54, + 36898 - 19968: jis0208<<14 | 0x0F<<7 | 0x08, + 36899 - 19968: jis0208<<14 | 0x2E<<7 | 0x01, + 36903 - 19968: jis0208<<14 | 0x4C<<7 | 0x59, + 36904 - 19968: jis0212<<14 | 0x40<<7 | 0x30, + 36905 - 19968: jis0212<<14 | 0x40<<7 | 0x31, + 36906 - 19968: jis0212<<14 | 0x40<<7 | 0x33, + 36908 - 19968: jis0212<<14 | 0x40<<7 | 0x34, + 36909 - 19968: jis0212<<14 | 0x40<<7 | 0x35, + 36910 - 19968: jis0208<<14 | 0x21<<7 | 0x40, + 36911 - 19968: jis0212<<14 | 0x40<<7 | 0x32, + 36913 - 19968: jis0208<<14 | 0x1C<<7 | 0x14, + 36914 - 19968: jis0208<<14 | 0x1E<<7 | 0x29, + 36915 - 19968: jis0212<<14 | 0x40<<7 | 0x36, + 36916 - 19968: jis0212<<14 | 0x40<<7 | 0x37, + 36917 - 19968: jis0208<<14 | 0x4C<<7 | 0x5B, + 36918 - 19968: jis0208<<14 | 0x4C<<7 | 0x5A, + 36919 - 19968: jis0212<<14 | 0x40<<7 | 0x38, + 36920 - 19968: jis0208<<14 | 0x0F<<7 | 0x4E, + 36921 - 19968: jis0208<<14 | 0x4C<<7 | 0x5C, + 36924 - 19968: jis0208<<14 | 0x28<<7 | 0x0E, + 36926 - 19968: jis0208<<14 | 0x4D<<7 | 0x06, + 36927 - 19968: jis0212<<14 | 0x40<<7 | 0x39, + 36929 - 19968: jis0208<<14 | 0x25<<7 | 0x3A, + 36930 - 19968: jis0208<<14 | 0x1E<<7 | 0x4A, + 36931 - 19968: jis0212<<14 | 0x40<<7 | 0x3A, + 36932 - 19968: jis0212<<14 | 0x40<<7 | 0x3B, + 36933 - 19968: jis0208<<14 | 0x22<<7 | 0x38, + 36935 - 19968: jis0208<<14 | 0x15<<7 | 0x57, + 36937 - 19968: jis0208<<14 | 0x4D<<7 | 0x05, + 36938 - 19968: jis0208<<14 | 0x2C<<7 | 0x16, + 36939 - 19968: jis0208<<14 | 0x10<<7 | 0x1E, + 36940 - 19968: jis0212<<14 | 0x40<<7 | 0x3C, + 36941 - 19968: jis0208<<14 | 0x29<<7 | 0x36, + 36942 - 19968: jis0208<<14 | 0x11<<7 | 0x40, + 36943 - 19968: jis0208<<14 | 0x4D<<7 | 0x00, + 36944 - 19968: jis0208<<14 | 0x4D<<7 | 0x01, + 36945 - 19968: jis0208<<14 | 0x4D<<7 | 0x02, + 36946 - 19968: jis0208<<14 | 0x4D<<7 | 0x03, + 36947 - 19968: jis0208<<14 | 0x25<<7 | 0x1A, + 36948 - 19968: jis0208<<14 | 0x22<<7 | 0x02, + 36949 - 19968: jis0208<<14 | 0x0F<<7 | 0x42, + 36950 - 19968: jis0208<<14 | 0x4D<<7 | 0x07, + 36952 - 19968: jis0208<<14 | 0x4D<<7 | 0x08, + 36953 - 19968: jis0208<<14 | 0x53<<7 | 0x02, + 36955 - 19968: jis0212<<14 | 0x40<<7 | 0x3D, + 36956 - 19968: jis0208<<14 | 0x21<<7 | 0x1C, + 36957 - 19968: jis0212<<14 | 0x40<<7 | 0x3E, + 36958 - 19968: jis0208<<14 | 0x4D<<7 | 0x09, + 36960 - 19968: jis0208<<14 | 0x10<<7 | 0x52, + 36961 - 19968: jis0208<<14 | 0x20<<7 | 0x2B, + 36962 - 19968: jis0212<<14 | 0x40<<7 | 0x3F, + 36963 - 19968: jis0208<<14 | 0x17<<7 | 0x0E, + 36965 - 19968: jis0208<<14 | 0x2C<<7 | 0x39, + 36966 - 19968: jis0212<<14 | 0x40<<7 | 0x40, + 36967 - 19968: jis0208<<14 | 0x5A<<7 | 0x58, + 36968 - 19968: jis0208<<14 | 0x4D<<7 | 0x0A, + 36969 - 19968: jis0208<<14 | 0x24<<7 | 0x0B, + 36972 - 19968: jis0212<<14 | 0x40<<7 | 0x42, + 36973 - 19968: jis0208<<14 | 0x20<<7 | 0x57, + 36974 - 19968: jis0208<<14 | 0x1B<<7 | 0x36, + 36975 - 19968: jis0208<<14 | 0x4D<<7 | 0x0B, + 36976 - 19968: jis0212<<14 | 0x40<<7 | 0x43, + 36978 - 19968: jis0208<<14 | 0x4D<<7 | 0x0E, + 36980 - 19968: jis0212<<14 | 0x40<<7 | 0x44, + 36981 - 19968: jis0208<<14 | 0x1C<<7 | 0x44, + 36982 - 19968: jis0208<<14 | 0x4D<<7 | 0x0C, + 36983 - 19968: jis0208<<14 | 0x20<<7 | 0x0A, + 36984 - 19968: jis0208<<14 | 0x20<<7 | 0x09, + 36985 - 19968: jis0212<<14 | 0x40<<7 | 0x45, + 36986 - 19968: jis0208<<14 | 0x0F<<7 | 0x43, + 36988 - 19968: jis0208<<14 | 0x2D<<7 | 0x2A, + 36989 - 19968: jis0208<<14 | 0x4D<<7 | 0x10, + 36991 - 19968: jis0208<<14 | 0x27<<7 | 0x51, + 36992 - 19968: jis0208<<14 | 0x4D<<7 | 0x12, + 36993 - 19968: jis0208<<14 | 0x4D<<7 | 0x11, + 36994 - 19968: jis0208<<14 | 0x4D<<7 | 0x0F, + 36995 - 19968: jis0208<<14 | 0x42<<7 | 0x43, + 36996 - 19968: jis0208<<14 | 0x13<<7 | 0x33, + 36997 - 19968: jis0212<<14 | 0x40<<7 | 0x46, + 36999 - 19968: jis0208<<14 | 0x4C<<7 | 0x4D, + 37000 - 19968: jis0212<<14 | 0x40<<7 | 0x47, + 37001 - 19968: jis0208<<14 | 0x4D<<7 | 0x14, + 37002 - 19968: jis0208<<14 | 0x4D<<7 | 0x13, + 37003 - 19968: jis0212<<14 | 0x40<<7 | 0x48, + 37004 - 19968: jis0212<<14 | 0x40<<7 | 0x49, + 37006 - 19968: jis0212<<14 | 0x40<<7 | 0x4A, + 37007 - 19968: jis0208<<14 | 0x4D<<7 | 0x15, + 37008 - 19968: jis0212<<14 | 0x40<<7 | 0x4B, + 37009 - 19968: jis0208<<14 | 0x2C<<7 | 0x17, + 37013 - 19968: jis0212<<14 | 0x40<<7 | 0x4C, + 37015 - 19968: jis0212<<14 | 0x40<<7 | 0x4D, + 37016 - 19968: jis0212<<14 | 0x40<<7 | 0x4E, + 37017 - 19968: jis0212<<14 | 0x40<<7 | 0x4F, + 37019 - 19968: jis0212<<14 | 0x40<<7 | 0x50, + 37024 - 19968: jis0212<<14 | 0x40<<7 | 0x51, + 37025 - 19968: jis0212<<14 | 0x40<<7 | 0x52, + 37026 - 19968: jis0212<<14 | 0x40<<7 | 0x53, + 37027 - 19968: jis0208<<14 | 0x25<<7 | 0x40, + 37029 - 19968: jis0212<<14 | 0x40<<7 | 0x54, + 37030 - 19968: jis0208<<14 | 0x2A<<7 | 0x0D, + 37032 - 19968: jis0208<<14 | 0x4D<<7 | 0x16, + 37034 - 19968: jis0208<<14 | 0x1B<<7 | 0x38, + 37039 - 19968: jis0208<<14 | 0x4D<<7 | 0x17, + 37040 - 19968: jis0212<<14 | 0x40<<7 | 0x55, + 37041 - 19968: jis0208<<14 | 0x4D<<7 | 0x18, + 37042 - 19968: jis0212<<14 | 0x40<<7 | 0x56, + 37043 - 19968: jis0212<<14 | 0x40<<7 | 0x57, + 37044 - 19968: jis0212<<14 | 0x40<<7 | 0x58, + 37045 - 19968: jis0208<<14 | 0x4D<<7 | 0x19, + 37046 - 19968: jis0212<<14 | 0x40<<7 | 0x59, + 37048 - 19968: jis0208<<14 | 0x24<<7 | 0x00, + 37053 - 19968: jis0212<<14 | 0x40<<7 | 0x5A, + 37054 - 19968: jis0212<<14 | 0x40<<7 | 0x5C, + 37057 - 19968: jis0208<<14 | 0x0F<<7 | 0x49, + 37059 - 19968: jis0212<<14 | 0x40<<7 | 0x5D, + 37060 - 19968: jis0212<<14 | 0x41<<7 | 0x00, + 37061 - 19968: jis0212<<14 | 0x41<<7 | 0x01, + 37063 - 19968: jis0212<<14 | 0x41<<7 | 0x02, + 37064 - 19968: jis0212<<14 | 0x41<<7 | 0x03, + 37066 - 19968: jis0208<<14 | 0x18<<7 | 0x38, + 37068 - 19968: jis0212<<14 | 0x40<<7 | 0x5B, + 37070 - 19968: jis0208<<14 | 0x2E<<7 | 0x19, + 37074 - 19968: jis0212<<14 | 0x41<<7 | 0x0C, + 37077 - 19968: jis0212<<14 | 0x41<<7 | 0x04, + 37079 - 19968: jis0212<<14 | 0x41<<7 | 0x05, + 37080 - 19968: jis0212<<14 | 0x41<<7 | 0x06, + 37081 - 19968: jis0212<<14 | 0x41<<7 | 0x07, + 37083 - 19968: jis0208<<14 | 0x4D<<7 | 0x1D, + 37084 - 19968: jis0212<<14 | 0x41<<7 | 0x08, + 37085 - 19968: jis0212<<14 | 0x41<<7 | 0x09, + 37086 - 19968: jis0208<<14 | 0x5A<<7 | 0x59, + 37087 - 19968: jis0212<<14 | 0x41<<7 | 0x0A, + 37089 - 19968: jis0208<<14 | 0x16<<7 | 0x13, + 37090 - 19968: jis0208<<14 | 0x4D<<7 | 0x1A, + 37092 - 19968: jis0208<<14 | 0x4D<<7 | 0x1B, + 37093 - 19968: jis0212<<14 | 0x41<<7 | 0x0B, + 37096 - 19968: jis0208<<14 | 0x28<<7 | 0x53, + 37099 - 19968: jis0212<<14 | 0x41<<7 | 0x0E, + 37101 - 19968: jis0208<<14 | 0x12<<7 | 0x33, + 37103 - 19968: jis0212<<14 | 0x41<<7 | 0x0F, + 37104 - 19968: jis0212<<14 | 0x41<<7 | 0x10, + 37108 - 19968: jis0212<<14 | 0x41<<7 | 0x11, + 37109 - 19968: jis0208<<14 | 0x2C<<7 | 0x18, + 37110 - 19968: jis0212<<14 | 0x41<<7 | 0x0D, + 37111 - 19968: jis0208<<14 | 0x15<<7 | 0x1E, + 37117 - 19968: jis0208<<14 | 0x24<<7 | 0x33, + 37118 - 19968: jis0212<<14 | 0x41<<7 | 0x12, + 37119 - 19968: jis0212<<14 | 0x41<<7 | 0x13, + 37120 - 19968: jis0212<<14 | 0x41<<7 | 0x14, + 37122 - 19968: jis0208<<14 | 0x4D<<7 | 0x1E, + 37124 - 19968: jis0212<<14 | 0x41<<7 | 0x15, + 37125 - 19968: jis0212<<14 | 0x41<<7 | 0x16, + 37126 - 19968: jis0212<<14 | 0x41<<7 | 0x17, + 37128 - 19968: jis0212<<14 | 0x41<<7 | 0x18, + 37133 - 19968: jis0212<<14 | 0x41<<7 | 0x19, + 37136 - 19968: jis0212<<14 | 0x41<<7 | 0x1A, + 37138 - 19968: jis0208<<14 | 0x4D<<7 | 0x1F, + 37140 - 19968: jis0212<<14 | 0x41<<7 | 0x1B, + 37141 - 19968: jis0208<<14 | 0x5A<<7 | 0x5B, + 37142 - 19968: jis0212<<14 | 0x41<<7 | 0x1C, + 37143 - 19968: jis0212<<14 | 0x41<<7 | 0x1D, + 37144 - 19968: jis0212<<14 | 0x41<<7 | 0x1E, + 37145 - 19968: jis0208<<14 | 0x4D<<7 | 0x20, + 37146 - 19968: jis0212<<14 | 0x41<<7 | 0x1F, + 37148 - 19968: jis0212<<14 | 0x41<<7 | 0x20, + 37150 - 19968: jis0212<<14 | 0x41<<7 | 0x21, + 37152 - 19968: jis0212<<14 | 0x41<<7 | 0x22, + 37154 - 19968: jis0212<<14 | 0x41<<7 | 0x24, + 37155 - 19968: jis0212<<14 | 0x41<<7 | 0x25, + 37157 - 19968: jis0212<<14 | 0x41<<7 | 0x23, + 37159 - 19968: jis0208<<14 | 0x5A<<7 | 0x5C, + 37161 - 19968: jis0212<<14 | 0x41<<7 | 0x27, + 37165 - 19968: jis0208<<14 | 0x24<<7 | 0x01, + 37166 - 19968: jis0212<<14 | 0x41<<7 | 0x28, + 37167 - 19968: jis0212<<14 | 0x41<<7 | 0x29, + 37168 - 19968: jis0208<<14 | 0x4D<<7 | 0x22, + 37169 - 19968: jis0212<<14 | 0x41<<7 | 0x2A, + 37170 - 19968: jis0208<<14 | 0x4D<<7 | 0x21, + 37172 - 19968: jis0212<<14 | 0x41<<7 | 0x2B, + 37174 - 19968: jis0212<<14 | 0x41<<7 | 0x2C, + 37175 - 19968: jis0212<<14 | 0x41<<7 | 0x2D, + 37177 - 19968: jis0212<<14 | 0x41<<7 | 0x2E, + 37178 - 19968: jis0212<<14 | 0x41<<7 | 0x2F, + 37180 - 19968: jis0212<<14 | 0x41<<7 | 0x30, + 37181 - 19968: jis0212<<14 | 0x41<<7 | 0x31, + 37187 - 19968: jis0212<<14 | 0x41<<7 | 0x32, + 37191 - 19968: jis0212<<14 | 0x41<<7 | 0x33, + 37192 - 19968: jis0212<<14 | 0x41<<7 | 0x34, + 37193 - 19968: jis0208<<14 | 0x25<<7 | 0x32, + 37194 - 19968: jis0208<<14 | 0x4D<<7 | 0x23, + 37195 - 19968: jis0208<<14 | 0x1C<<7 | 0x15, + 37196 - 19968: jis0208<<14 | 0x1B<<7 | 0x3F, + 37197 - 19968: jis0208<<14 | 0x26<<7 | 0x3A, + 37198 - 19968: jis0208<<14 | 0x22<<7 | 0x50, + 37199 - 19968: jis0212<<14 | 0x41<<7 | 0x35, + 37202 - 19968: jis0208<<14 | 0x1B<<7 | 0x51, + 37203 - 19968: jis0212<<14 | 0x41<<7 | 0x36, + 37204 - 19968: jis0208<<14 | 0x1E<<7 | 0x4B, + 37206 - 19968: jis0208<<14 | 0x4D<<7 | 0x24, + 37207 - 19968: jis0212<<14 | 0x41<<7 | 0x37, + 37208 - 19968: jis0208<<14 | 0x4D<<7 | 0x25, + 37209 - 19968: jis0212<<14 | 0x41<<7 | 0x38, + 37210 - 19968: jis0212<<14 | 0x41<<7 | 0x39, + 37211 - 19968: jis0212<<14 | 0x41<<7 | 0x3A, + 37217 - 19968: jis0212<<14 | 0x41<<7 | 0x3B, + 37218 - 19968: jis0208<<14 | 0x1E<<7 | 0x3C, + 37219 - 19968: jis0208<<14 | 0x4D<<7 | 0x26, + 37220 - 19968: jis0212<<14 | 0x41<<7 | 0x3C, + 37221 - 19968: jis0208<<14 | 0x4D<<7 | 0x27, + 37223 - 19968: jis0212<<14 | 0x41<<7 | 0x3D, + 37225 - 19968: jis0208<<14 | 0x4D<<7 | 0x28, + 37226 - 19968: jis0208<<14 | 0x2C<<7 | 0x4E, + 37228 - 19968: jis0208<<14 | 0x1C<<7 | 0x16, + 37229 - 19968: jis0212<<14 | 0x41<<7 | 0x3E, + 37234 - 19968: jis0208<<14 | 0x4D<<7 | 0x2A, + 37235 - 19968: jis0208<<14 | 0x4D<<7 | 0x29, + 37236 - 19968: jis0212<<14 | 0x41<<7 | 0x3F, + 37237 - 19968: jis0208<<14 | 0x18<<7 | 0x39, + 37239 - 19968: jis0208<<14 | 0x18<<7 | 0x52, + 37240 - 19968: jis0208<<14 | 0x1A<<7 | 0x1F, + 37241 - 19968: jis0212<<14 | 0x41<<7 | 0x40, + 37242 - 19968: jis0212<<14 | 0x41<<7 | 0x41, + 37243 - 19968: jis0212<<14 | 0x41<<7 | 0x42, + 37249 - 19968: jis0212<<14 | 0x41<<7 | 0x43, + 37250 - 19968: jis0208<<14 | 0x4D<<7 | 0x2D, + 37251 - 19968: jis0212<<14 | 0x41<<7 | 0x44, + 37253 - 19968: jis0212<<14 | 0x41<<7 | 0x45, + 37254 - 19968: jis0212<<14 | 0x41<<7 | 0x46, + 37255 - 19968: jis0208<<14 | 0x1C<<7 | 0x45, + 37257 - 19968: jis0208<<14 | 0x4D<<7 | 0x2C, + 37258 - 19968: jis0212<<14 | 0x41<<7 | 0x47, + 37259 - 19968: jis0208<<14 | 0x4D<<7 | 0x2B, + 37261 - 19968: jis0208<<14 | 0x21<<7 | 0x48, + 37262 - 19968: jis0212<<14 | 0x41<<7 | 0x48, + 37264 - 19968: jis0208<<14 | 0x17<<7 | 0x4E, + 37265 - 19968: jis0212<<14 | 0x41<<7 | 0x49, + 37266 - 19968: jis0208<<14 | 0x1F<<7 | 0x22, + 37267 - 19968: jis0212<<14 | 0x41<<7 | 0x4A, + 37268 - 19968: jis0212<<14 | 0x41<<7 | 0x4B, + 37269 - 19968: jis0212<<14 | 0x41<<7 | 0x4C, + 37271 - 19968: jis0208<<14 | 0x27<<7 | 0x0F, + 37272 - 19968: jis0212<<14 | 0x41<<7 | 0x4D, + 37276 - 19968: jis0208<<14 | 0x1C<<7 | 0x18, + 37278 - 19968: jis0212<<14 | 0x41<<7 | 0x4E, + 37281 - 19968: jis0212<<14 | 0x41<<7 | 0x4F, + 37282 - 19968: jis0208<<14 | 0x4D<<7 | 0x2E, + 37284 - 19968: jis0208<<14 | 0x1D<<7 | 0x3E, + 37286 - 19968: jis0212<<14 | 0x41<<7 | 0x50, + 37288 - 19968: jis0212<<14 | 0x41<<7 | 0x51, + 37290 - 19968: jis0208<<14 | 0x4D<<7 | 0x31, + 37291 - 19968: jis0208<<14 | 0x4D<<7 | 0x2F, + 37292 - 19968: jis0212<<14 | 0x41<<7 | 0x52, + 37293 - 19968: jis0212<<14 | 0x41<<7 | 0x53, + 37294 - 19968: jis0212<<14 | 0x41<<7 | 0x54, + 37295 - 19968: jis0208<<14 | 0x4D<<7 | 0x30, + 37296 - 19968: jis0212<<14 | 0x41<<7 | 0x55, + 37297 - 19968: jis0212<<14 | 0x41<<7 | 0x56, + 37298 - 19968: jis0212<<14 | 0x41<<7 | 0x57, + 37299 - 19968: jis0212<<14 | 0x41<<7 | 0x58, + 37300 - 19968: jis0208<<14 | 0x4D<<7 | 0x33, + 37301 - 19968: jis0208<<14 | 0x4D<<7 | 0x32, + 37302 - 19968: jis0212<<14 | 0x41<<7 | 0x59, + 37304 - 19968: jis0208<<14 | 0x1D<<7 | 0x59, + 37306 - 19968: jis0208<<14 | 0x4D<<7 | 0x34, + 37307 - 19968: jis0212<<14 | 0x41<<7 | 0x5A, + 37308 - 19968: jis0212<<14 | 0x41<<7 | 0x5B, + 37309 - 19968: jis0212<<14 | 0x41<<7 | 0x5C, + 37311 - 19968: jis0212<<14 | 0x41<<7 | 0x5D, + 37312 - 19968: jis0208<<14 | 0x4D<<7 | 0x35, + 37313 - 19968: jis0208<<14 | 0x4D<<7 | 0x36, + 37314 - 19968: jis0212<<14 | 0x42<<7 | 0x00, + 37315 - 19968: jis0212<<14 | 0x42<<7 | 0x01, + 37317 - 19968: jis0212<<14 | 0x42<<7 | 0x02, + 37318 - 19968: jis0208<<14 | 0x27<<7 | 0x2F, + 37319 - 19968: jis0208<<14 | 0x19<<7 | 0x32, + 37320 - 19968: jis0208<<14 | 0x1B<<7 | 0x40, + 37321 - 19968: jis0208<<14 | 0x4D<<7 | 0x37, + 37323 - 19968: jis0208<<14 | 0x4D<<7 | 0x38, + 37324 - 19968: jis0208<<14 | 0x2D<<7 | 0x03, + 37325 - 19968: jis0208<<14 | 0x1C<<7 | 0x24, + 37326 - 19968: jis0208<<14 | 0x2B<<7 | 0x4D, + 37327 - 19968: jis0208<<14 | 0x2D<<7 | 0x2B, + 37328 - 19968: jis0208<<14 | 0x4D<<7 | 0x39, + 37329 - 19968: jis0208<<14 | 0x15<<7 | 0x41, + 37331 - 19968: jis0212<<14 | 0x42<<7 | 0x03, + 37332 - 19968: jis0212<<14 | 0x42<<7 | 0x04, + 37334 - 19968: jis0208<<14 | 0x4D<<7 | 0x3A, + 37335 - 19968: jis0208<<14 | 0x5B<<7 | 0x00, + 37336 - 19968: jis0208<<14 | 0x24<<7 | 0x02, + 37337 - 19968: jis0212<<14 | 0x42<<7 | 0x06, + 37338 - 19968: jis0208<<14 | 0x5A<<7 | 0x5D, + 37339 - 19968: jis0208<<14 | 0x4D<<7 | 0x3D, + 37340 - 19968: jis0208<<14 | 0x12<<7 | 0x57, + 37341 - 19968: jis0208<<14 | 0x1E<<7 | 0x2A, + 37342 - 19968: jis0208<<14 | 0x5B<<7 | 0x01, + 37343 - 19968: jis0208<<14 | 0x4D<<7 | 0x3B, + 37345 - 19968: jis0208<<14 | 0x4D<<7 | 0x3C, + 37347 - 19968: jis0208<<14 | 0x23<<7 | 0x3F, + 37348 - 19968: jis0208<<14 | 0x5B<<7 | 0x04, + 37349 - 19968: jis0208<<14 | 0x5B<<7 | 0x05, + 37350 - 19968: jis0208<<14 | 0x2A<<7 | 0x34, + 37351 - 19968: jis0208<<14 | 0x15<<7 | 0x5B, + 37353 - 19968: jis0212<<14 | 0x42<<7 | 0x0B, + 37354 - 19968: jis0212<<14 | 0x42<<7 | 0x0C, + 37356 - 19968: jis0212<<14 | 0x42<<7 | 0x0D, + 37357 - 19968: jis0208<<14 | 0x5B<<7 | 0x02, + 37358 - 19968: jis0208<<14 | 0x5B<<7 | 0x03, + 37359 - 19968: jis0212<<14 | 0x42<<7 | 0x10, + 37360 - 19968: jis0212<<14 | 0x42<<7 | 0x11, + 37361 - 19968: jis0212<<14 | 0x42<<7 | 0x12, + 37365 - 19968: jis0208<<14 | 0x4D<<7 | 0x3F, + 37366 - 19968: jis0208<<14 | 0x4D<<7 | 0x40, + 37367 - 19968: jis0212<<14 | 0x42<<7 | 0x13, + 37369 - 19968: jis0212<<14 | 0x42<<7 | 0x14, + 37371 - 19968: jis0212<<14 | 0x42<<7 | 0x15, + 37372 - 19968: jis0208<<14 | 0x4D<<7 | 0x3E, + 37373 - 19968: jis0212<<14 | 0x42<<7 | 0x16, + 37375 - 19968: jis0208<<14 | 0x4D<<7 | 0x42, + 37376 - 19968: jis0212<<14 | 0x42<<7 | 0x17, + 37377 - 19968: jis0212<<14 | 0x42<<7 | 0x18, + 37380 - 19968: jis0212<<14 | 0x42<<7 | 0x19, + 37381 - 19968: jis0212<<14 | 0x42<<7 | 0x1A, + 37382 - 19968: jis0208<<14 | 0x5B<<7 | 0x06, + 37383 - 19968: jis0212<<14 | 0x42<<7 | 0x1C, + 37385 - 19968: jis0212<<14 | 0x42<<7 | 0x1D, + 37386 - 19968: jis0208<<14 | 0x5B<<7 | 0x08, + 37388 - 19968: jis0212<<14 | 0x42<<7 | 0x1F, + 37389 - 19968: jis0208<<14 | 0x25<<7 | 0x3E, + 37390 - 19968: jis0208<<14 | 0x12<<7 | 0x22, + 37392 - 19968: jis0208<<14 | 0x5B<<7 | 0x07, + 37393 - 19968: jis0208<<14 | 0x4D<<7 | 0x46, + 37394 - 19968: jis0212<<14 | 0x42<<7 | 0x21, + 37395 - 19968: jis0212<<14 | 0x42<<7 | 0x22, + 37396 - 19968: jis0208<<14 | 0x4D<<7 | 0x43, + 37397 - 19968: jis0208<<14 | 0x4D<<7 | 0x45, + 37398 - 19968: jis0212<<14 | 0x42<<7 | 0x23, + 37400 - 19968: jis0212<<14 | 0x42<<7 | 0x24, + 37404 - 19968: jis0212<<14 | 0x42<<7 | 0x25, + 37405 - 19968: jis0212<<14 | 0x42<<7 | 0x26, + 37406 - 19968: jis0208<<14 | 0x4D<<7 | 0x41, + 37411 - 19968: jis0212<<14 | 0x42<<7 | 0x27, + 37412 - 19968: jis0212<<14 | 0x42<<7 | 0x28, + 37413 - 19968: jis0212<<14 | 0x42<<7 | 0x29, + 37414 - 19968: jis0212<<14 | 0x42<<7 | 0x2A, + 37416 - 19968: jis0212<<14 | 0x42<<7 | 0x2B, + 37417 - 19968: jis0208<<14 | 0x4E<<7 | 0x2E, + 37420 - 19968: jis0208<<14 | 0x4D<<7 | 0x44, + 37422 - 19968: jis0212<<14 | 0x42<<7 | 0x2C, + 37423 - 19968: jis0212<<14 | 0x42<<7 | 0x2D, + 37424 - 19968: jis0212<<14 | 0x42<<7 | 0x2E, + 37427 - 19968: jis0212<<14 | 0x42<<7 | 0x2F, + 37428 - 19968: jis0208<<14 | 0x2D<<7 | 0x4A, + 37429 - 19968: jis0212<<14 | 0x42<<7 | 0x30, + 37430 - 19968: jis0212<<14 | 0x42<<7 | 0x31, + 37431 - 19968: jis0208<<14 | 0x17<<7 | 0x39, + 37432 - 19968: jis0212<<14 | 0x42<<7 | 0x32, + 37433 - 19968: jis0208<<14 | 0x5B<<7 | 0x0F, + 37434 - 19968: jis0208<<14 | 0x5B<<7 | 0x09, + 37436 - 19968: jis0208<<14 | 0x5B<<7 | 0x0B, + 37438 - 19968: jis0212<<14 | 0x42<<7 | 0x36, + 37439 - 19968: jis0208<<14 | 0x4D<<7 | 0x4E, + 37440 - 19968: jis0208<<14 | 0x5B<<7 | 0x0A, + 37442 - 19968: jis0212<<14 | 0x42<<7 | 0x38, + 37443 - 19968: jis0212<<14 | 0x42<<7 | 0x39, + 37444 - 19968: jis0208<<14 | 0x24<<7 | 0x13, + 37445 - 19968: jis0208<<14 | 0x4D<<7 | 0x49, + 37446 - 19968: jis0212<<14 | 0x42<<7 | 0x3A, + 37447 - 19968: jis0212<<14 | 0x42<<7 | 0x3B, + 37448 - 19968: jis0208<<14 | 0x4D<<7 | 0x4C, + 37449 - 19968: jis0208<<14 | 0x4D<<7 | 0x4A, + 37450 - 19968: jis0212<<14 | 0x42<<7 | 0x3C, + 37451 - 19968: jis0208<<14 | 0x4D<<7 | 0x4F, + 37453 - 19968: jis0212<<14 | 0x42<<7 | 0x3D, + 37454 - 19968: jis0208<<14 | 0x5B<<7 | 0x0C, + 37455 - 19968: jis0212<<14 | 0x42<<7 | 0x3F, + 37456 - 19968: jis0208<<14 | 0x4D<<7 | 0x50, + 37457 - 19968: jis0208<<14 | 0x5B<<7 | 0x0E, + 37463 - 19968: jis0208<<14 | 0x4D<<7 | 0x48, + 37464 - 19968: jis0212<<14 | 0x42<<7 | 0x41, + 37465 - 19968: jis0208<<14 | 0x5B<<7 | 0x0D, + 37466 - 19968: jis0208<<14 | 0x4D<<7 | 0x55, + 37467 - 19968: jis0208<<14 | 0x10<<7 | 0x53, + 37468 - 19968: jis0212<<14 | 0x42<<7 | 0x43, + 37469 - 19968: jis0212<<14 | 0x42<<7 | 0x44, + 37470 - 19968: jis0208<<14 | 0x4D<<7 | 0x47, + 37472 - 19968: jis0212<<14 | 0x42<<7 | 0x45, + 37473 - 19968: jis0212<<14 | 0x42<<7 | 0x46, + 37474 - 19968: jis0208<<14 | 0x27<<7 | 0x0C, + 37476 - 19968: jis0208<<14 | 0x4D<<7 | 0x4B, + 37477 - 19968: jis0212<<14 | 0x42<<7 | 0x47, + 37478 - 19968: jis0208<<14 | 0x1D<<7 | 0x3F, + 37479 - 19968: jis0208<<14 | 0x5B<<7 | 0x10, + 37480 - 19968: jis0212<<14 | 0x42<<7 | 0x49, + 37481 - 19968: jis0212<<14 | 0x42<<7 | 0x4A, + 37486 - 19968: jis0212<<14 | 0x42<<7 | 0x4B, + 37487 - 19968: jis0212<<14 | 0x42<<7 | 0x4C, + 37488 - 19968: jis0212<<14 | 0x42<<7 | 0x4D, + 37489 - 19968: jis0208<<14 | 0x18<<7 | 0x3A, + 37493 - 19968: jis0212<<14 | 0x42<<7 | 0x4E, + 37494 - 19968: jis0212<<14 | 0x42<<7 | 0x4F, + 37495 - 19968: jis0208<<14 | 0x5B<<7 | 0x12, + 37496 - 19968: jis0208<<14 | 0x5B<<7 | 0x13, + 37497 - 19968: jis0212<<14 | 0x42<<7 | 0x52, + 37499 - 19968: jis0212<<14 | 0x42<<7 | 0x53, + 37500 - 19968: jis0212<<14 | 0x42<<7 | 0x54, + 37501 - 19968: jis0212<<14 | 0x42<<7 | 0x55, + 37502 - 19968: jis0208<<14 | 0x2A<<7 | 0x27, + 37503 - 19968: jis0212<<14 | 0x42<<7 | 0x56, + 37504 - 19968: jis0208<<14 | 0x15<<7 | 0x43, + 37507 - 19968: jis0208<<14 | 0x1C<<7 | 0x25, + 37509 - 19968: jis0208<<14 | 0x25<<7 | 0x1B, + 37512 - 19968: jis0208<<14 | 0x58<<7 | 0x03, + 37513 - 19968: jis0212<<14 | 0x42<<7 | 0x58, + 37514 - 19968: jis0212<<14 | 0x42<<7 | 0x59, + 37517 - 19968: jis0212<<14 | 0x42<<7 | 0x5A, + 37518 - 19968: jis0212<<14 | 0x42<<7 | 0x5B, + 37521 - 19968: jis0208<<14 | 0x20<<7 | 0x0C, + 37522 - 19968: jis0212<<14 | 0x42<<7 | 0x5C, + 37523 - 19968: jis0208<<14 | 0x4D<<7 | 0x53, + 37525 - 19968: jis0208<<14 | 0x4D<<7 | 0x4D, + 37526 - 19968: jis0208<<14 | 0x4D<<7 | 0x52, + 37527 - 19968: jis0212<<14 | 0x42<<7 | 0x5D, + 37528 - 19968: jis0208<<14 | 0x2B<<7 | 0x22, + 37529 - 19968: jis0212<<14 | 0x43<<7 | 0x00, + 37530 - 19968: jis0208<<14 | 0x23<<7 | 0x17, + 37531 - 19968: jis0208<<14 | 0x4D<<7 | 0x54, + 37532 - 19968: jis0208<<14 | 0x4D<<7 | 0x51, + 37535 - 19968: jis0212<<14 | 0x43<<7 | 0x01, + 37536 - 19968: jis0212<<14 | 0x43<<7 | 0x02, + 37540 - 19968: jis0212<<14 | 0x43<<7 | 0x03, + 37541 - 19968: jis0212<<14 | 0x43<<7 | 0x04, + 37543 - 19968: jis0208<<14 | 0x5B<<7 | 0x11, + 37544 - 19968: jis0212<<14 | 0x43<<7 | 0x06, + 37547 - 19968: jis0212<<14 | 0x43<<7 | 0x07, + 37549 - 19968: jis0208<<14 | 0x20<<7 | 0x0B, + 37551 - 19968: jis0212<<14 | 0x43<<7 | 0x08, + 37554 - 19968: jis0212<<14 | 0x43<<7 | 0x09, + 37558 - 19968: jis0212<<14 | 0x43<<7 | 0x0A, + 37559 - 19968: jis0208<<14 | 0x4D<<7 | 0x58, + 37560 - 19968: jis0212<<14 | 0x43<<7 | 0x0B, + 37561 - 19968: jis0208<<14 | 0x4D<<7 | 0x57, + 37562 - 19968: jis0212<<14 | 0x43<<7 | 0x0C, + 37563 - 19968: jis0212<<14 | 0x43<<7 | 0x0D, + 37564 - 19968: jis0212<<14 | 0x43<<7 | 0x0E, + 37565 - 19968: jis0212<<14 | 0x43<<7 | 0x0F, + 37567 - 19968: jis0212<<14 | 0x43<<7 | 0x10, + 37568 - 19968: jis0212<<14 | 0x43<<7 | 0x11, + 37569 - 19968: jis0212<<14 | 0x43<<7 | 0x12, + 37570 - 19968: jis0212<<14 | 0x43<<7 | 0x13, + 37571 - 19968: jis0212<<14 | 0x43<<7 | 0x14, + 37573 - 19968: jis0212<<14 | 0x43<<7 | 0x15, + 37574 - 19968: jis0212<<14 | 0x43<<7 | 0x16, + 37575 - 19968: jis0212<<14 | 0x43<<7 | 0x17, + 37576 - 19968: jis0212<<14 | 0x43<<7 | 0x18, + 37579 - 19968: jis0212<<14 | 0x43<<7 | 0x19, + 37580 - 19968: jis0212<<14 | 0x43<<7 | 0x1A, + 37581 - 19968: jis0212<<14 | 0x43<<7 | 0x1B, + 37582 - 19968: jis0212<<14 | 0x43<<7 | 0x1C, + 37583 - 19968: jis0208<<14 | 0x4D<<7 | 0x56, + 37584 - 19968: jis0208<<14 | 0x5B<<7 | 0x17, + 37586 - 19968: jis0208<<14 | 0x2A<<7 | 0x0E, + 37587 - 19968: jis0208<<14 | 0x5B<<7 | 0x1B, + 37589 - 19968: jis0208<<14 | 0x5B<<7 | 0x19, + 37591 - 19968: jis0208<<14 | 0x5B<<7 | 0x15, + 37592 - 19968: jis0212<<14 | 0x43<<7 | 0x21, + 37593 - 19968: jis0208<<14 | 0x5B<<7 | 0x16, + 37596 - 19968: jis0212<<14 | 0x43<<7 | 0x23, + 37597 - 19968: jis0212<<14 | 0x43<<7 | 0x24, + 37599 - 19968: jis0212<<14 | 0x43<<7 | 0x25, + 37600 - 19968: jis0208<<14 | 0x5B<<7 | 0x1A, + 37601 - 19968: jis0212<<14 | 0x43<<7 | 0x27, + 37603 - 19968: jis0212<<14 | 0x43<<7 | 0x28, + 37604 - 19968: jis0208<<14 | 0x1C<<7 | 0x5A, + 37605 - 19968: jis0212<<14 | 0x43<<7 | 0x29, + 37607 - 19968: jis0208<<14 | 0x5B<<7 | 0x14, + 37608 - 19968: jis0212<<14 | 0x43<<7 | 0x2B, + 37609 - 19968: jis0208<<14 | 0x4D<<7 | 0x59, + 37610 - 19968: jis0208<<14 | 0x29<<7 | 0x3E, + 37612 - 19968: jis0212<<14 | 0x43<<7 | 0x2C, + 37613 - 19968: jis0208<<14 | 0x10<<7 | 0x33, + 37614 - 19968: jis0212<<14 | 0x43<<7 | 0x2D, + 37616 - 19968: jis0212<<14 | 0x43<<7 | 0x2E, + 37618 - 19968: jis0208<<14 | 0x28<<7 | 0x25, + 37619 - 19968: jis0208<<14 | 0x22<<7 | 0x51, + 37624 - 19968: jis0208<<14 | 0x14<<7 | 0x57, + 37625 - 19968: jis0208<<14 | 0x58<<7 | 0x09, + 37626 - 19968: jis0208<<14 | 0x4D<<7 | 0x5B, + 37627 - 19968: jis0208<<14 | 0x5B<<7 | 0x1E, + 37628 - 19968: jis0208<<14 | 0x18<<7 | 0x3C, + 37631 - 19968: jis0208<<14 | 0x5B<<7 | 0x21, + 37632 - 19968: jis0212<<14 | 0x43<<7 | 0x32, + 37634 - 19968: jis0208<<14 | 0x5B<<7 | 0x23, + 37638 - 19968: jis0208<<14 | 0x1A<<7 | 0x0B, + 37640 - 19968: jis0212<<14 | 0x43<<7 | 0x34, + 37645 - 19968: jis0212<<14 | 0x43<<7 | 0x35, + 37647 - 19968: jis0208<<14 | 0x4D<<7 | 0x5A, + 37648 - 19968: jis0208<<14 | 0x1E<<7 | 0x4C, + 37649 - 19968: jis0212<<14 | 0x43<<7 | 0x36, + 37652 - 19968: jis0212<<14 | 0x43<<7 | 0x37, + 37653 - 19968: jis0212<<14 | 0x43<<7 | 0x38, + 37656 - 19968: jis0208<<14 | 0x1E<<7 | 0x4D, + 37657 - 19968: jis0208<<14 | 0x4E<<7 | 0x00, + 37658 - 19968: jis0208<<14 | 0x4E<<7 | 0x02, + 37660 - 19968: jis0212<<14 | 0x43<<7 | 0x39, + 37661 - 19968: jis0208<<14 | 0x5B<<7 | 0x22, + 37662 - 19968: jis0208<<14 | 0x5B<<7 | 0x20, + 37663 - 19968: jis0212<<14 | 0x43<<7 | 0x3C, + 37664 - 19968: jis0208<<14 | 0x1D<<7 | 0x5A, + 37665 - 19968: jis0208<<14 | 0x5B<<7 | 0x1D, + 37666 - 19968: jis0208<<14 | 0x4E<<7 | 0x01, + 37667 - 19968: jis0208<<14 | 0x4E<<7 | 0x03, + 37668 - 19968: jis0212<<14 | 0x43<<7 | 0x3E, + 37669 - 19968: jis0208<<14 | 0x5B<<7 | 0x1C, + 37670 - 19968: jis0208<<14 | 0x15<<7 | 0x32, + 37671 - 19968: jis0212<<14 | 0x43<<7 | 0x40, + 37672 - 19968: jis0208<<14 | 0x28<<7 | 0x24, + 37673 - 19968: jis0212<<14 | 0x43<<7 | 0x41, + 37674 - 19968: jis0212<<14 | 0x43<<7 | 0x42, + 37675 - 19968: jis0208<<14 | 0x1B<<7 | 0x41, + 37676 - 19968: jis0208<<14 | 0x2E<<7 | 0x02, + 37678 - 19968: jis0208<<14 | 0x4D<<7 | 0x5D, + 37679 - 19968: jis0208<<14 | 0x19<<7 | 0x57, + 37682 - 19968: jis0208<<14 | 0x2E<<7 | 0x1E, + 37683 - 19968: jis0212<<14 | 0x43<<7 | 0x43, + 37684 - 19968: jis0212<<14 | 0x43<<7 | 0x44, + 37685 - 19968: jis0208<<14 | 0x4E<<7 | 0x05, + 37686 - 19968: jis0212<<14 | 0x43<<7 | 0x45, + 37687 - 19968: jis0212<<14 | 0x43<<7 | 0x46, + 37690 - 19968: jis0208<<14 | 0x4E<<7 | 0x04, + 37691 - 19968: jis0208<<14 | 0x4E<<7 | 0x06, + 37700 - 19968: jis0208<<14 | 0x4D<<7 | 0x5C, + 37703 - 19968: jis0212<<14 | 0x43<<7 | 0x47, + 37704 - 19968: jis0208<<14 | 0x58<<7 | 0x02, + 37705 - 19968: jis0212<<14 | 0x43<<7 | 0x49, + 37707 - 19968: jis0208<<14 | 0x25<<7 | 0x48, + 37709 - 19968: jis0208<<14 | 0x24<<7 | 0x34, + 37712 - 19968: jis0212<<14 | 0x43<<7 | 0x4A, + 37713 - 19968: jis0212<<14 | 0x43<<7 | 0x4B, + 37714 - 19968: jis0212<<14 | 0x43<<7 | 0x4C, + 37716 - 19968: jis0208<<14 | 0x23<<7 | 0x36, + 37717 - 19968: jis0212<<14 | 0x43<<7 | 0x4D, + 37718 - 19968: jis0208<<14 | 0x4E<<7 | 0x0B, + 37719 - 19968: jis0208<<14 | 0x5B<<7 | 0x25, + 37720 - 19968: jis0212<<14 | 0x43<<7 | 0x4F, + 37722 - 19968: jis0212<<14 | 0x43<<7 | 0x50, + 37723 - 19968: jis0208<<14 | 0x22<<7 | 0x22, + 37724 - 19968: jis0208<<14 | 0x4E<<7 | 0x07, + 37726 - 19968: jis0212<<14 | 0x43<<7 | 0x51, + 37728 - 19968: jis0208<<14 | 0x4E<<7 | 0x08, + 37732 - 19968: jis0212<<14 | 0x43<<7 | 0x52, + 37733 - 19968: jis0212<<14 | 0x43<<7 | 0x53, + 37735 - 19968: jis0212<<14 | 0x43<<7 | 0x54, + 37737 - 19968: jis0212<<14 | 0x43<<7 | 0x55, + 37738 - 19968: jis0212<<14 | 0x43<<7 | 0x56, + 37740 - 19968: jis0208<<14 | 0x16<<7 | 0x0C, + 37741 - 19968: jis0212<<14 | 0x43<<7 | 0x57, + 37742 - 19968: jis0208<<14 | 0x4E<<7 | 0x0A, + 37743 - 19968: jis0212<<14 | 0x43<<7 | 0x58, + 37744 - 19968: jis0208<<14 | 0x5B<<7 | 0x24, + 37745 - 19968: jis0212<<14 | 0x43<<7 | 0x5A, + 37747 - 19968: jis0212<<14 | 0x43<<7 | 0x5B, + 37748 - 19968: jis0212<<14 | 0x43<<7 | 0x5C, + 37749 - 19968: jis0208<<14 | 0x17<<7 | 0x0F, + 37750 - 19968: jis0212<<14 | 0x43<<7 | 0x5D, + 37754 - 19968: jis0212<<14 | 0x44<<7 | 0x00, + 37756 - 19968: jis0208<<14 | 0x4E<<7 | 0x09, + 37757 - 19968: jis0212<<14 | 0x44<<7 | 0x01, + 37758 - 19968: jis0208<<14 | 0x1D<<7 | 0x40, + 37759 - 19968: jis0212<<14 | 0x44<<7 | 0x02, + 37760 - 19968: jis0212<<14 | 0x44<<7 | 0x03, + 37761 - 19968: jis0212<<14 | 0x44<<7 | 0x04, + 37762 - 19968: jis0212<<14 | 0x44<<7 | 0x05, + 37768 - 19968: jis0212<<14 | 0x44<<7 | 0x06, + 37770 - 19968: jis0212<<14 | 0x44<<7 | 0x07, + 37771 - 19968: jis0212<<14 | 0x44<<7 | 0x08, + 37772 - 19968: jis0208<<14 | 0x12<<7 | 0x58, + 37773 - 19968: jis0212<<14 | 0x44<<7 | 0x09, + 37775 - 19968: jis0212<<14 | 0x44<<7 | 0x0A, + 37778 - 19968: jis0212<<14 | 0x44<<7 | 0x0B, + 37780 - 19968: jis0208<<14 | 0x4E<<7 | 0x0F, + 37781 - 19968: jis0212<<14 | 0x44<<7 | 0x0C, + 37782 - 19968: jis0208<<14 | 0x19<<7 | 0x1E, + 37783 - 19968: jis0208<<14 | 0x20<<7 | 0x58, + 37784 - 19968: jis0212<<14 | 0x44<<7 | 0x0D, + 37786 - 19968: jis0208<<14 | 0x23<<7 | 0x29, + 37787 - 19968: jis0212<<14 | 0x44<<7 | 0x0E, + 37790 - 19968: jis0212<<14 | 0x44<<7 | 0x0F, + 37793 - 19968: jis0212<<14 | 0x44<<7 | 0x10, + 37795 - 19968: jis0212<<14 | 0x44<<7 | 0x11, + 37796 - 19968: jis0208<<14 | 0x5B<<7 | 0x26, + 37798 - 19968: jis0212<<14 | 0x44<<7 | 0x13, + 37799 - 19968: jis0208<<14 | 0x12<<7 | 0x1A, + 37800 - 19968: jis0212<<14 | 0x44<<7 | 0x14, + 37801 - 19968: jis0212<<14 | 0x44<<7 | 0x1A, + 37803 - 19968: jis0212<<14 | 0x44<<7 | 0x15, + 37804 - 19968: jis0208<<14 | 0x4E<<7 | 0x0D, + 37805 - 19968: jis0208<<14 | 0x4E<<7 | 0x0E, + 37806 - 19968: jis0208<<14 | 0x23<<7 | 0x22, + 37808 - 19968: jis0208<<14 | 0x4E<<7 | 0x0C, + 37812 - 19968: jis0212<<14 | 0x44<<7 | 0x16, + 37813 - 19968: jis0212<<14 | 0x44<<7 | 0x17, + 37814 - 19968: jis0212<<14 | 0x44<<7 | 0x18, + 37817 - 19968: jis0208<<14 | 0x4E<<7 | 0x10, + 37818 - 19968: jis0212<<14 | 0x44<<7 | 0x19, + 37825 - 19968: jis0212<<14 | 0x44<<7 | 0x1B, + 37827 - 19968: jis0208<<14 | 0x4E<<7 | 0x16, + 37828 - 19968: jis0212<<14 | 0x44<<7 | 0x1C, + 37829 - 19968: jis0212<<14 | 0x44<<7 | 0x1D, + 37830 - 19968: jis0208<<14 | 0x5B<<7 | 0x27, + 37831 - 19968: jis0212<<14 | 0x44<<7 | 0x1F, + 37832 - 19968: jis0208<<14 | 0x4E<<7 | 0x19, + 37833 - 19968: jis0212<<14 | 0x44<<7 | 0x20, + 37834 - 19968: jis0212<<14 | 0x44<<7 | 0x21, + 37835 - 19968: jis0212<<14 | 0x44<<7 | 0x22, + 37836 - 19968: jis0212<<14 | 0x44<<7 | 0x23, + 37837 - 19968: jis0212<<14 | 0x44<<7 | 0x24, + 37840 - 19968: jis0208<<14 | 0x4E<<7 | 0x18, + 37841 - 19968: jis0208<<14 | 0x24<<7 | 0x0C, + 37843 - 19968: jis0212<<14 | 0x44<<7 | 0x25, + 37846 - 19968: jis0208<<14 | 0x4E<<7 | 0x11, + 37847 - 19968: jis0208<<14 | 0x4E<<7 | 0x12, + 37848 - 19968: jis0208<<14 | 0x4E<<7 | 0x15, + 37849 - 19968: jis0212<<14 | 0x44<<7 | 0x26, + 37852 - 19968: jis0212<<14 | 0x44<<7 | 0x27, + 37853 - 19968: jis0208<<14 | 0x4E<<7 | 0x17, + 37854 - 19968: jis0208<<14 | 0x5B<<7 | 0x28, + 37855 - 19968: jis0212<<14 | 0x44<<7 | 0x29, + 37857 - 19968: jis0208<<14 | 0x15<<7 | 0x1F, + 37858 - 19968: jis0212<<14 | 0x44<<7 | 0x2A, + 37860 - 19968: jis0208<<14 | 0x4E<<7 | 0x1A, + 37861 - 19968: jis0208<<14 | 0x4E<<7 | 0x14, + 37862 - 19968: jis0212<<14 | 0x44<<7 | 0x2B, + 37863 - 19968: jis0212<<14 | 0x44<<7 | 0x2C, + 37864 - 19968: jis0208<<14 | 0x4E<<7 | 0x13, + 37879 - 19968: jis0212<<14 | 0x44<<7 | 0x2E, + 37880 - 19968: jis0208<<14 | 0x5B<<7 | 0x29, + 37881 - 19968: jis0212<<14 | 0x44<<7 | 0x2D, + 37882 - 19968: jis0212<<14 | 0x44<<7 | 0x30, + 37883 - 19968: jis0212<<14 | 0x44<<7 | 0x31, + 37885 - 19968: jis0212<<14 | 0x44<<7 | 0x32, + 37889 - 19968: jis0212<<14 | 0x44<<7 | 0x33, + 37890 - 19968: jis0212<<14 | 0x44<<7 | 0x34, + 37891 - 19968: jis0208<<14 | 0x4E<<7 | 0x1E, + 37892 - 19968: jis0212<<14 | 0x44<<7 | 0x35, + 37895 - 19968: jis0208<<14 | 0x4E<<7 | 0x1F, + 37896 - 19968: jis0212<<14 | 0x44<<7 | 0x36, + 37897 - 19968: jis0212<<14 | 0x44<<7 | 0x37, + 37901 - 19968: jis0212<<14 | 0x44<<7 | 0x38, + 37902 - 19968: jis0212<<14 | 0x44<<7 | 0x39, + 37903 - 19968: jis0212<<14 | 0x44<<7 | 0x3A, + 37904 - 19968: jis0208<<14 | 0x4E<<7 | 0x20, + 37907 - 19968: jis0208<<14 | 0x4E<<7 | 0x1D, + 37908 - 19968: jis0208<<14 | 0x4E<<7 | 0x1C, + 37909 - 19968: jis0212<<14 | 0x44<<7 | 0x3B, + 37910 - 19968: jis0212<<14 | 0x44<<7 | 0x3C, + 37911 - 19968: jis0212<<14 | 0x44<<7 | 0x3D, + 37912 - 19968: jis0208<<14 | 0x1D<<7 | 0x41, + 37913 - 19968: jis0208<<14 | 0x25<<7 | 0x09, + 37914 - 19968: jis0208<<14 | 0x4E<<7 | 0x1B, + 37919 - 19968: jis0212<<14 | 0x44<<7 | 0x3E, + 37921 - 19968: jis0208<<14 | 0x4E<<7 | 0x24, + 37931 - 19968: jis0208<<14 | 0x4E<<7 | 0x22, + 37934 - 19968: jis0212<<14 | 0x44<<7 | 0x3F, + 37935 - 19968: jis0212<<14 | 0x44<<7 | 0x40, + 37937 - 19968: jis0208<<14 | 0x5B<<7 | 0x2A, + 37938 - 19968: jis0212<<14 | 0x44<<7 | 0x42, + 37939 - 19968: jis0212<<14 | 0x44<<7 | 0x43, + 37940 - 19968: jis0212<<14 | 0x44<<7 | 0x44, + 37941 - 19968: jis0208<<14 | 0x4E<<7 | 0x23, + 37942 - 19968: jis0208<<14 | 0x4E<<7 | 0x21, + 37944 - 19968: jis0208<<14 | 0x21<<7 | 0x57, + 37946 - 19968: jis0208<<14 | 0x4E<<7 | 0x25, + 37947 - 19968: jis0212<<14 | 0x44<<7 | 0x45, + 37949 - 19968: jis0212<<14 | 0x44<<7 | 0x47, + 37951 - 19968: jis0212<<14 | 0x44<<7 | 0x46, + 37953 - 19968: jis0208<<14 | 0x4E<<7 | 0x26, + 37955 - 19968: jis0212<<14 | 0x44<<7 | 0x48, + 37956 - 19968: jis0208<<14 | 0x4E<<7 | 0x28, + 37957 - 19968: jis0208<<14 | 0x5B<<7 | 0x2B, + 37960 - 19968: jis0208<<14 | 0x5B<<7 | 0x2C, + 37962 - 19968: jis0212<<14 | 0x44<<7 | 0x4B, + 37964 - 19968: jis0212<<14 | 0x44<<7 | 0x4C, + 37969 - 19968: jis0208<<14 | 0x13<<7 | 0x34, + 37970 - 19968: jis0208<<14 | 0x4E<<7 | 0x27, + 37971 - 19968: jis0208<<14 | 0x2B<<7 | 0x59, + 37973 - 19968: jis0212<<14 | 0x44<<7 | 0x4D, + 37977 - 19968: jis0212<<14 | 0x44<<7 | 0x4E, + 37978 - 19968: jis0208<<14 | 0x4E<<7 | 0x33, + 37979 - 19968: jis0208<<14 | 0x4E<<7 | 0x29, + 37980 - 19968: jis0212<<14 | 0x44<<7 | 0x4F, + 37982 - 19968: jis0208<<14 | 0x4E<<7 | 0x2C, + 37983 - 19968: jis0212<<14 | 0x44<<7 | 0x50, + 37984 - 19968: jis0208<<14 | 0x4E<<7 | 0x2A, + 37985 - 19968: jis0212<<14 | 0x44<<7 | 0x51, + 37986 - 19968: jis0208<<14 | 0x4E<<7 | 0x2B, + 37987 - 19968: jis0212<<14 | 0x44<<7 | 0x52, + 37992 - 19968: jis0212<<14 | 0x44<<7 | 0x53, + 37994 - 19968: jis0208<<14 | 0x4E<<7 | 0x2D, + 37995 - 19968: jis0212<<14 | 0x44<<7 | 0x54, + 37997 - 19968: jis0212<<14 | 0x44<<7 | 0x55, + 37998 - 19968: jis0212<<14 | 0x44<<7 | 0x56, + 37999 - 19968: jis0212<<14 | 0x44<<7 | 0x57, + 38000 - 19968: jis0208<<14 | 0x4E<<7 | 0x2F, + 38001 - 19968: jis0212<<14 | 0x44<<7 | 0x58, + 38002 - 19968: jis0212<<14 | 0x44<<7 | 0x59, + 38005 - 19968: jis0208<<14 | 0x4E<<7 | 0x30, + 38007 - 19968: jis0208<<14 | 0x4E<<7 | 0x31, + 38012 - 19968: jis0208<<14 | 0x4E<<7 | 0x34, + 38013 - 19968: jis0208<<14 | 0x4E<<7 | 0x32, + 38014 - 19968: jis0208<<14 | 0x4E<<7 | 0x35, + 38015 - 19968: jis0208<<14 | 0x4E<<7 | 0x37, + 38017 - 19968: jis0208<<14 | 0x4E<<7 | 0x36, + 38019 - 19968: jis0212<<14 | 0x44<<7 | 0x5B, + 38020 - 19968: jis0212<<14 | 0x44<<7 | 0x5A, + 38263 - 19968: jis0208<<14 | 0x23<<7 | 0x18, + 38264 - 19968: jis0212<<14 | 0x44<<7 | 0x5C, + 38265 - 19968: jis0212<<14 | 0x44<<7 | 0x5D, + 38270 - 19968: jis0212<<14 | 0x45<<7 | 0x00, + 38272 - 19968: jis0208<<14 | 0x2B<<7 | 0x46, + 38274 - 19968: jis0208<<14 | 0x4E<<7 | 0x38, + 38275 - 19968: jis0208<<14 | 0x20<<7 | 0x0D, + 38276 - 19968: jis0212<<14 | 0x45<<7 | 0x01, + 38279 - 19968: jis0208<<14 | 0x4E<<7 | 0x39, + 38280 - 19968: jis0212<<14 | 0x45<<7 | 0x02, + 38281 - 19968: jis0208<<14 | 0x29<<7 | 0x23, + 38282 - 19968: jis0208<<14 | 0x4E<<7 | 0x3A, + 38283 - 19968: jis0208<<14 | 0x12<<7 | 0x0A, + 38284 - 19968: jis0212<<14 | 0x45<<7 | 0x03, + 38285 - 19968: jis0212<<14 | 0x45<<7 | 0x04, + 38286 - 19968: jis0212<<14 | 0x45<<7 | 0x05, + 38287 - 19968: jis0208<<14 | 0x10<<7 | 0x1B, + 38289 - 19968: jis0208<<14 | 0x13<<7 | 0x36, + 38290 - 19968: jis0208<<14 | 0x5B<<7 | 0x2D, + 38291 - 19968: jis0208<<14 | 0x13<<7 | 0x35, + 38292 - 19968: jis0208<<14 | 0x4E<<7 | 0x3B, + 38294 - 19968: jis0208<<14 | 0x4E<<7 | 0x3C, + 38296 - 19968: jis0208<<14 | 0x4E<<7 | 0x3D, + 38297 - 19968: jis0208<<14 | 0x4E<<7 | 0x3E, + 38301 - 19968: jis0212<<14 | 0x45<<7 | 0x06, + 38302 - 19968: jis0212<<14 | 0x45<<7 | 0x07, + 38303 - 19968: jis0212<<14 | 0x45<<7 | 0x08, + 38304 - 19968: jis0208<<14 | 0x4E<<7 | 0x3F, + 38305 - 19968: jis0212<<14 | 0x45<<7 | 0x09, + 38306 - 19968: jis0208<<14 | 0x13<<7 | 0x37, + 38307 - 19968: jis0208<<14 | 0x12<<7 | 0x34, + 38308 - 19968: jis0208<<14 | 0x18<<7 | 0x3D, + 38309 - 19968: jis0208<<14 | 0x27<<7 | 0x15, + 38310 - 19968: jis0212<<14 | 0x45<<7 | 0x0A, + 38311 - 19968: jis0208<<14 | 0x4E<<7 | 0x41, + 38312 - 19968: jis0208<<14 | 0x4E<<7 | 0x40, + 38313 - 19968: jis0212<<14 | 0x45<<7 | 0x0B, + 38315 - 19968: jis0212<<14 | 0x45<<7 | 0x0C, + 38316 - 19968: jis0212<<14 | 0x45<<7 | 0x0D, + 38317 - 19968: jis0208<<14 | 0x4E<<7 | 0x42, + 38322 - 19968: jis0208<<14 | 0x10<<7 | 0x3B, + 38324 - 19968: jis0212<<14 | 0x45<<7 | 0x0E, + 38326 - 19968: jis0212<<14 | 0x45<<7 | 0x0F, + 38329 - 19968: jis0208<<14 | 0x4E<<7 | 0x45, + 38330 - 19968: jis0212<<14 | 0x45<<7 | 0x10, + 38331 - 19968: jis0208<<14 | 0x4E<<7 | 0x44, + 38332 - 19968: jis0208<<14 | 0x4E<<7 | 0x43, + 38333 - 19968: jis0212<<14 | 0x45<<7 | 0x11, + 38334 - 19968: jis0208<<14 | 0x4E<<7 | 0x46, + 38335 - 19968: jis0212<<14 | 0x45<<7 | 0x12, + 38339 - 19968: jis0208<<14 | 0x4E<<7 | 0x49, + 38342 - 19968: jis0212<<14 | 0x45<<7 | 0x13, + 38343 - 19968: jis0208<<14 | 0x0F<<7 | 0x26, + 38344 - 19968: jis0212<<14 | 0x45<<7 | 0x14, + 38345 - 19968: jis0212<<14 | 0x45<<7 | 0x15, + 38346 - 19968: jis0208<<14 | 0x4E<<7 | 0x47, + 38347 - 19968: jis0212<<14 | 0x45<<7 | 0x16, + 38348 - 19968: jis0208<<14 | 0x4E<<7 | 0x4B, + 38349 - 19968: jis0208<<14 | 0x4E<<7 | 0x4A, + 38352 - 19968: jis0212<<14 | 0x45<<7 | 0x17, + 38353 - 19968: jis0212<<14 | 0x45<<7 | 0x18, + 38354 - 19968: jis0212<<14 | 0x45<<7 | 0x19, + 38355 - 19968: jis0212<<14 | 0x45<<7 | 0x1A, + 38356 - 19968: jis0208<<14 | 0x4E<<7 | 0x4D, + 38357 - 19968: jis0208<<14 | 0x4E<<7 | 0x4C, + 38358 - 19968: jis0208<<14 | 0x4E<<7 | 0x4E, + 38360 - 19968: jis0208<<14 | 0x25<<7 | 0x0D, + 38361 - 19968: jis0212<<14 | 0x45<<7 | 0x1B, + 38362 - 19968: jis0212<<14 | 0x45<<7 | 0x1C, + 38364 - 19968: jis0208<<14 | 0x4E<<7 | 0x4F, + 38365 - 19968: jis0212<<14 | 0x45<<7 | 0x1D, + 38366 - 19968: jis0212<<14 | 0x45<<7 | 0x1E, + 38367 - 19968: jis0212<<14 | 0x45<<7 | 0x1F, + 38368 - 19968: jis0212<<14 | 0x45<<7 | 0x20, + 38369 - 19968: jis0208<<14 | 0x4E<<7 | 0x50, + 38370 - 19968: jis0208<<14 | 0x4E<<7 | 0x52, + 38372 - 19968: jis0212<<14 | 0x45<<7 | 0x21, + 38373 - 19968: jis0208<<14 | 0x4E<<7 | 0x51, + 38374 - 19968: jis0212<<14 | 0x45<<7 | 0x22, + 38428 - 19968: jis0208<<14 | 0x28<<7 | 0x4B, + 38429 - 19968: jis0212<<14 | 0x45<<7 | 0x23, + 38430 - 19968: jis0212<<14 | 0x45<<7 | 0x24, + 38433 - 19968: jis0208<<14 | 0x4E<<7 | 0x53, + 38434 - 19968: jis0212<<14 | 0x45<<7 | 0x25, + 38436 - 19968: jis0212<<14 | 0x45<<7 | 0x26, + 38437 - 19968: jis0212<<14 | 0x45<<7 | 0x27, + 38438 - 19968: jis0212<<14 | 0x45<<7 | 0x28, + 38440 - 19968: jis0208<<14 | 0x4E<<7 | 0x54, + 38442 - 19968: jis0208<<14 | 0x19<<7 | 0x44, + 38444 - 19968: jis0212<<14 | 0x45<<7 | 0x29, + 38446 - 19968: jis0208<<14 | 0x4E<<7 | 0x55, + 38447 - 19968: jis0208<<14 | 0x4E<<7 | 0x56, + 38449 - 19968: jis0212<<14 | 0x45<<7 | 0x2A, + 38450 - 19968: jis0208<<14 | 0x2A<<7 | 0x28, + 38451 - 19968: jis0212<<14 | 0x45<<7 | 0x2B, + 38455 - 19968: jis0212<<14 | 0x45<<7 | 0x2C, + 38456 - 19968: jis0212<<14 | 0x45<<7 | 0x2D, + 38457 - 19968: jis0212<<14 | 0x45<<7 | 0x2E, + 38458 - 19968: jis0212<<14 | 0x45<<7 | 0x2F, + 38459 - 19968: jis0208<<14 | 0x20<<7 | 0x2A, + 38460 - 19968: jis0212<<14 | 0x45<<7 | 0x30, + 38461 - 19968: jis0212<<14 | 0x45<<7 | 0x31, + 38463 - 19968: jis0208<<14 | 0x0F<<7 | 0x03, + 38464 - 19968: jis0208<<14 | 0x21<<7 | 0x2A, + 38465 - 19968: jis0212<<14 | 0x45<<7 | 0x32, + 38466 - 19968: jis0208<<14 | 0x4E<<7 | 0x57, + 38468 - 19968: jis0208<<14 | 0x28<<7 | 0x4C, + 38475 - 19968: jis0208<<14 | 0x4E<<7 | 0x5A, + 38476 - 19968: jis0208<<14 | 0x4E<<7 | 0x58, + 38477 - 19968: jis0208<<14 | 0x18<<7 | 0x3E, + 38479 - 19968: jis0208<<14 | 0x4E<<7 | 0x59, + 38480 - 19968: jis0208<<14 | 0x17<<7 | 0x21, + 38482 - 19968: jis0212<<14 | 0x45<<7 | 0x33, + 38484 - 19968: jis0212<<14 | 0x45<<7 | 0x34, + 38486 - 19968: jis0212<<14 | 0x45<<7 | 0x35, + 38487 - 19968: jis0212<<14 | 0x45<<7 | 0x36, + 38488 - 19968: jis0212<<14 | 0x45<<7 | 0x37, + 38491 - 19968: jis0208<<14 | 0x29<<7 | 0x24, + 38492 - 19968: jis0208<<14 | 0x4E<<7 | 0x5C, + 38493 - 19968: jis0208<<14 | 0x4F<<7 | 0x00, + 38494 - 19968: jis0208<<14 | 0x4E<<7 | 0x5D, + 38495 - 19968: jis0208<<14 | 0x4F<<7 | 0x01, + 38497 - 19968: jis0212<<14 | 0x45<<7 | 0x38, + 38498 - 19968: jis0208<<14 | 0x10<<7 | 0x00, + 38499 - 19968: jis0208<<14 | 0x1E<<7 | 0x37, + 38500 - 19968: jis0208<<14 | 0x1C<<7 | 0x5B, + 38501 - 19968: jis0208<<14 | 0x13<<7 | 0x38, + 38502 - 19968: jis0208<<14 | 0x4F<<7 | 0x02, + 38506 - 19968: jis0208<<14 | 0x26<<7 | 0x45, + 38508 - 19968: jis0208<<14 | 0x4F<<7 | 0x04, + 38510 - 19968: jis0212<<14 | 0x45<<7 | 0x39, + 38512 - 19968: jis0208<<14 | 0x10<<7 | 0x01, + 38514 - 19968: jis0208<<14 | 0x4F<<7 | 0x03, + 38515 - 19968: jis0208<<14 | 0x23<<7 | 0x23, + 38516 - 19968: jis0212<<14 | 0x45<<7 | 0x3A, + 38517 - 19968: jis0208<<14 | 0x2D<<7 | 0x2C, + 38518 - 19968: jis0208<<14 | 0x25<<7 | 0x0A, + 38519 - 19968: jis0208<<14 | 0x4E<<7 | 0x5B, + 38520 - 19968: jis0208<<14 | 0x2D<<7 | 0x05, + 38522 - 19968: jis0208<<14 | 0x17<<7 | 0x10, + 38523 - 19968: jis0212<<14 | 0x45<<7 | 0x3B, + 38524 - 19968: jis0212<<14 | 0x45<<7 | 0x3C, + 38525 - 19968: jis0208<<14 | 0x2C<<7 | 0x3A, + 38526 - 19968: jis0212<<14 | 0x45<<7 | 0x3D, + 38527 - 19968: jis0212<<14 | 0x45<<7 | 0x3E, + 38529 - 19968: jis0212<<14 | 0x45<<7 | 0x3F, + 38530 - 19968: jis0212<<14 | 0x45<<7 | 0x40, + 38531 - 19968: jis0212<<14 | 0x45<<7 | 0x41, + 38532 - 19968: jis0212<<14 | 0x45<<7 | 0x42, + 38533 - 19968: jis0208<<14 | 0x15<<7 | 0x58, + 38534 - 19968: jis0208<<14 | 0x2D<<7 | 0x13, + 38536 - 19968: jis0208<<14 | 0x16<<7 | 0x07, + 38537 - 19968: jis0212<<14 | 0x45<<7 | 0x43, + 38538 - 19968: jis0208<<14 | 0x21<<7 | 0x41, + 38539 - 19968: jis0208<<14 | 0x46<<7 | 0x00, + 38541 - 19968: jis0208<<14 | 0x4F<<7 | 0x05, + 38542 - 19968: jis0208<<14 | 0x12<<7 | 0x0B, + 38543 - 19968: jis0208<<14 | 0x1E<<7 | 0x4E, + 38545 - 19968: jis0212<<14 | 0x45<<7 | 0x44, + 38548 - 19968: jis0208<<14 | 0x12<<7 | 0x35, + 38549 - 19968: jis0208<<14 | 0x4F<<7 | 0x07, + 38550 - 19968: jis0212<<14 | 0x45<<7 | 0x45, + 38551 - 19968: jis0208<<14 | 0x4F<<7 | 0x08, + 38552 - 19968: jis0208<<14 | 0x4F<<7 | 0x06, + 38553 - 19968: jis0208<<14 | 0x16<<7 | 0x43, + 38554 - 19968: jis0212<<14 | 0x45<<7 | 0x46, + 38555 - 19968: jis0208<<14 | 0x19<<7 | 0x3C, + 38556 - 19968: jis0208<<14 | 0x1D<<7 | 0x42, + 38557 - 19968: jis0208<<14 | 0x5B<<7 | 0x30, + 38559 - 19968: jis0212<<14 | 0x45<<7 | 0x48, + 38560 - 19968: jis0208<<14 | 0x10<<7 | 0x02, + 38563 - 19968: jis0208<<14 | 0x2D<<7 | 0x38, + 38564 - 19968: jis0212<<14 | 0x45<<7 | 0x49, + 38565 - 19968: jis0212<<14 | 0x45<<7 | 0x4A, + 38566 - 19968: jis0212<<14 | 0x45<<7 | 0x4B, + 38567 - 19968: jis0208<<14 | 0x4F<<7 | 0x0A, + 38568 - 19968: jis0208<<14 | 0x4D<<7 | 0x0D, + 38569 - 19968: jis0212<<14 | 0x45<<7 | 0x4C, + 38570 - 19968: jis0208<<14 | 0x4F<<7 | 0x09, + 38574 - 19968: jis0212<<14 | 0x45<<7 | 0x4D, + 38575 - 19968: jis0208<<14 | 0x5B<<7 | 0x31, + 38576 - 19968: jis0208<<14 | 0x4F<<7 | 0x0D, + 38577 - 19968: jis0208<<14 | 0x4F<<7 | 0x0B, + 38578 - 19968: jis0208<<14 | 0x4F<<7 | 0x0C, + 38579 - 19968: jis0212<<14 | 0x45<<7 | 0x4F, + 38580 - 19968: jis0208<<14 | 0x4F<<7 | 0x0E, + 38582 - 19968: jis0208<<14 | 0x4F<<7 | 0x0F, + 38583 - 19968: jis0208<<14 | 0x2D<<7 | 0x4B, + 38584 - 19968: jis0208<<14 | 0x4F<<7 | 0x10, + 38585 - 19968: jis0208<<14 | 0x4F<<7 | 0x11, + 38586 - 19968: jis0212<<14 | 0x45<<7 | 0x50, + 38587 - 19968: jis0208<<14 | 0x1F<<7 | 0x28, + 38588 - 19968: jis0208<<14 | 0x27<<7 | 0x1A, + 38592 - 19968: jis0208<<14 | 0x1E<<7 | 0x5C, + 38593 - 19968: jis0208<<14 | 0x13<<7 | 0x46, + 38596 - 19968: jis0208<<14 | 0x2C<<7 | 0x19, + 38597 - 19968: jis0208<<14 | 0x11<<7 | 0x4C, + 38598 - 19968: jis0208<<14 | 0x1C<<7 | 0x17, + 38599 - 19968: jis0208<<14 | 0x17<<7 | 0x3A, + 38601 - 19968: jis0208<<14 | 0x4F<<7 | 0x14, + 38602 - 19968: jis0212<<14 | 0x45<<7 | 0x51, + 38603 - 19968: jis0208<<14 | 0x4F<<7 | 0x13, + 38604 - 19968: jis0208<<14 | 0x1A<<7 | 0x52, + 38605 - 19968: jis0208<<14 | 0x4F<<7 | 0x15, + 38606 - 19968: jis0208<<14 | 0x4F<<7 | 0x12, + 38609 - 19968: jis0208<<14 | 0x1A<<7 | 0x07, + 38610 - 19968: jis0212<<14 | 0x45<<7 | 0x52, + 38613 - 19968: jis0208<<14 | 0x4F<<7 | 0x19, + 38614 - 19968: jis0208<<14 | 0x49<<7 | 0x0C, + 38616 - 19968: jis0212<<14 | 0x45<<7 | 0x54, + 38617 - 19968: jis0208<<14 | 0x31<<7 | 0x35, + 38618 - 19968: jis0212<<14 | 0x45<<7 | 0x55, + 38619 - 19968: jis0208<<14 | 0x1E<<7 | 0x56, + 38620 - 19968: jis0208<<14 | 0x4F<<7 | 0x17, + 38621 - 19968: jis0212<<14 | 0x45<<7 | 0x56, + 38622 - 19968: jis0212<<14 | 0x45<<7 | 0x57, + 38623 - 19968: jis0212<<14 | 0x45<<7 | 0x58, + 38626 - 19968: jis0208<<14 | 0x2D<<7 | 0x04, + 38627 - 19968: jis0208<<14 | 0x25<<7 | 0x50, + 38632 - 19968: jis0208<<14 | 0x10<<7 | 0x0A, + 38633 - 19968: jis0212<<14 | 0x45<<7 | 0x59, + 38634 - 19968: jis0208<<14 | 0x1F<<7 | 0x42, + 38635 - 19968: jis0208<<14 | 0x1B<<7 | 0x15, + 38639 - 19968: jis0212<<14 | 0x45<<7 | 0x5A, + 38640 - 19968: jis0208<<14 | 0x29<<7 | 0x16, + 38641 - 19968: jis0212<<14 | 0x45<<7 | 0x5B, + 38642 - 19968: jis0208<<14 | 0x10<<7 | 0x1F, + 38646 - 19968: jis0208<<14 | 0x2D<<7 | 0x4C, + 38647 - 19968: jis0208<<14 | 0x2C<<7 | 0x4A, + 38649 - 19968: jis0208<<14 | 0x4F<<7 | 0x1A, + 38650 - 19968: jis0212<<14 | 0x45<<7 | 0x5C, + 38651 - 19968: jis0208<<14 | 0x24<<7 | 0x24, + 38656 - 19968: jis0208<<14 | 0x1B<<7 | 0x5A, + 38658 - 19968: jis0212<<14 | 0x45<<7 | 0x5D, + 38659 - 19968: jis0212<<14 | 0x46<<7 | 0x00, + 38660 - 19968: jis0208<<14 | 0x4F<<7 | 0x1B, + 38661 - 19968: jis0212<<14 | 0x46<<7 | 0x01, + 38662 - 19968: jis0208<<14 | 0x4F<<7 | 0x1C, + 38663 - 19968: jis0208<<14 | 0x1E<<7 | 0x2B, + 38664 - 19968: jis0208<<14 | 0x4F<<7 | 0x1D, + 38665 - 19968: jis0212<<14 | 0x46<<7 | 0x02, + 38666 - 19968: jis0208<<14 | 0x2D<<7 | 0x4D, + 38669 - 19968: jis0208<<14 | 0x4F<<7 | 0x18, + 38670 - 19968: jis0208<<14 | 0x4F<<7 | 0x1F, + 38671 - 19968: jis0208<<14 | 0x4F<<7 | 0x21, + 38673 - 19968: jis0208<<14 | 0x4F<<7 | 0x20, + 38675 - 19968: jis0208<<14 | 0x4F<<7 | 0x1E, + 38678 - 19968: jis0208<<14 | 0x4F<<7 | 0x22, + 38681 - 19968: jis0208<<14 | 0x4F<<7 | 0x23, + 38682 - 19968: jis0212<<14 | 0x46<<7 | 0x03, + 38683 - 19968: jis0212<<14 | 0x46<<7 | 0x04, + 38684 - 19968: jis0208<<14 | 0x20<<7 | 0x59, + 38685 - 19968: jis0212<<14 | 0x46<<7 | 0x05, + 38686 - 19968: jis0208<<14 | 0x11<<7 | 0x41, + 38689 - 19968: jis0212<<14 | 0x46<<7 | 0x06, + 38690 - 19968: jis0212<<14 | 0x46<<7 | 0x07, + 38691 - 19968: jis0212<<14 | 0x46<<7 | 0x08, + 38692 - 19968: jis0208<<14 | 0x4F<<7 | 0x24, + 38695 - 19968: jis0208<<14 | 0x2B<<7 | 0x17, + 38696 - 19968: jis0212<<14 | 0x46<<7 | 0x09, + 38698 - 19968: jis0208<<14 | 0x4F<<7 | 0x25, + 38704 - 19968: jis0208<<14 | 0x4F<<7 | 0x26, + 38705 - 19968: jis0212<<14 | 0x46<<7 | 0x0A, + 38706 - 19968: jis0208<<14 | 0x2E<<7 | 0x09, + 38707 - 19968: jis0208<<14 | 0x5B<<7 | 0x32, + 38712 - 19968: jis0208<<14 | 0x3A<<7 | 0x10, + 38713 - 19968: jis0208<<14 | 0x4F<<7 | 0x27, + 38715 - 19968: jis0208<<14 | 0x5B<<7 | 0x33, + 38717 - 19968: jis0208<<14 | 0x4F<<7 | 0x28, + 38718 - 19968: jis0208<<14 | 0x4F<<7 | 0x29, + 38721 - 19968: jis0212<<14 | 0x46<<7 | 0x0C, + 38722 - 19968: jis0208<<14 | 0x4F<<7 | 0x2D, + 38723 - 19968: jis0208<<14 | 0x5B<<7 | 0x34, + 38724 - 19968: jis0208<<14 | 0x4F<<7 | 0x2A, + 38726 - 19968: jis0208<<14 | 0x4F<<7 | 0x2B, + 38728 - 19968: jis0208<<14 | 0x4F<<7 | 0x2C, + 38729 - 19968: jis0208<<14 | 0x4F<<7 | 0x2E, + 38730 - 19968: jis0212<<14 | 0x46<<7 | 0x0E, + 38733 - 19968: jis0208<<14 | 0x5B<<7 | 0x35, + 38734 - 19968: jis0212<<14 | 0x46<<7 | 0x0F, + 38735 - 19968: jis0208<<14 | 0x5B<<7 | 0x36, + 38737 - 19968: jis0208<<14 | 0x5B<<7 | 0x37, + 38738 - 19968: jis0208<<14 | 0x1F<<7 | 0x23, + 38741 - 19968: jis0208<<14 | 0x5B<<7 | 0x38, + 38742 - 19968: jis0208<<14 | 0x2B<<7 | 0x56, + 38743 - 19968: jis0212<<14 | 0x46<<7 | 0x12, + 38744 - 19968: jis0212<<14 | 0x46<<7 | 0x13, + 38745 - 19968: jis0208<<14 | 0x1F<<7 | 0x24, + 38746 - 19968: jis0212<<14 | 0x46<<7 | 0x14, + 38747 - 19968: jis0212<<14 | 0x46<<7 | 0x15, + 38748 - 19968: jis0208<<14 | 0x4F<<7 | 0x2F, + 38750 - 19968: jis0208<<14 | 0x27<<7 | 0x52, + 38752 - 19968: jis0208<<14 | 0x4F<<7 | 0x30, + 38753 - 19968: jis0208<<14 | 0x52<<7 | 0x32, + 38754 - 19968: jis0208<<14 | 0x2B<<7 | 0x2B, + 38755 - 19968: jis0212<<14 | 0x46<<7 | 0x16, + 38756 - 19968: jis0208<<14 | 0x4F<<7 | 0x31, + 38758 - 19968: jis0208<<14 | 0x4F<<7 | 0x32, + 38759 - 19968: jis0212<<14 | 0x46<<7 | 0x17, + 38760 - 19968: jis0208<<14 | 0x4F<<7 | 0x33, + 38761 - 19968: jis0208<<14 | 0x12<<7 | 0x36, + 38762 - 19968: jis0212<<14 | 0x46<<7 | 0x18, + 38763 - 19968: jis0208<<14 | 0x4F<<7 | 0x35, + 38765 - 19968: jis0208<<14 | 0x1E<<7 | 0x38, + 38766 - 19968: jis0212<<14 | 0x46<<7 | 0x19, + 38769 - 19968: jis0208<<14 | 0x4F<<7 | 0x36, + 38771 - 19968: jis0212<<14 | 0x46<<7 | 0x1A, + 38772 - 19968: jis0208<<14 | 0x16<<7 | 0x03, + 38774 - 19968: jis0212<<14 | 0x46<<7 | 0x1B, + 38775 - 19968: jis0212<<14 | 0x46<<7 | 0x1C, + 38776 - 19968: jis0212<<14 | 0x46<<7 | 0x1D, + 38777 - 19968: jis0208<<14 | 0x4F<<7 | 0x37, + 38778 - 19968: jis0208<<14 | 0x4F<<7 | 0x3B, + 38779 - 19968: jis0212<<14 | 0x46<<7 | 0x1E, + 38780 - 19968: jis0208<<14 | 0x4F<<7 | 0x39, + 38781 - 19968: jis0212<<14 | 0x46<<7 | 0x1F, + 38783 - 19968: jis0212<<14 | 0x46<<7 | 0x20, + 38784 - 19968: jis0212<<14 | 0x46<<7 | 0x21, + 38785 - 19968: jis0208<<14 | 0x4F<<7 | 0x3A, + 38788 - 19968: jis0208<<14 | 0x12<<7 | 0x52, + 38789 - 19968: jis0208<<14 | 0x4F<<7 | 0x38, + 38790 - 19968: jis0208<<14 | 0x4F<<7 | 0x3C, + 38793 - 19968: jis0212<<14 | 0x46<<7 | 0x22, + 38795 - 19968: jis0208<<14 | 0x4F<<7 | 0x3D, + 38797 - 19968: jis0208<<14 | 0x0F<<7 | 0x27, + 38799 - 19968: jis0208<<14 | 0x4F<<7 | 0x3E, + 38800 - 19968: jis0208<<14 | 0x4F<<7 | 0x3F, + 38805 - 19968: jis0212<<14 | 0x46<<7 | 0x23, + 38806 - 19968: jis0212<<14 | 0x46<<7 | 0x24, + 38807 - 19968: jis0212<<14 | 0x46<<7 | 0x25, + 38808 - 19968: jis0208<<14 | 0x1D<<7 | 0x43, + 38809 - 19968: jis0212<<14 | 0x46<<7 | 0x26, + 38810 - 19968: jis0212<<14 | 0x46<<7 | 0x27, + 38812 - 19968: jis0208<<14 | 0x4F<<7 | 0x40, + 38814 - 19968: jis0212<<14 | 0x46<<7 | 0x28, + 38815 - 19968: jis0212<<14 | 0x46<<7 | 0x29, + 38816 - 19968: jis0208<<14 | 0x14<<7 | 0x26, + 38818 - 19968: jis0212<<14 | 0x46<<7 | 0x2A, + 38819 - 19968: jis0208<<14 | 0x4F<<7 | 0x43, + 38822 - 19968: jis0208<<14 | 0x4F<<7 | 0x42, + 38824 - 19968: jis0208<<14 | 0x4F<<7 | 0x41, + 38827 - 19968: jis0208<<14 | 0x4A<<7 | 0x50, + 38828 - 19968: jis0212<<14 | 0x46<<7 | 0x2B, + 38829 - 19968: jis0208<<14 | 0x29<<7 | 0x3B, + 38830 - 19968: jis0212<<14 | 0x46<<7 | 0x2C, + 38833 - 19968: jis0212<<14 | 0x46<<7 | 0x2D, + 38834 - 19968: jis0212<<14 | 0x46<<7 | 0x2E, + 38835 - 19968: jis0208<<14 | 0x4F<<7 | 0x44, + 38836 - 19968: jis0208<<14 | 0x4F<<7 | 0x45, + 38837 - 19968: jis0212<<14 | 0x46<<7 | 0x2F, + 38838 - 19968: jis0212<<14 | 0x46<<7 | 0x30, + 38840 - 19968: jis0212<<14 | 0x46<<7 | 0x31, + 38841 - 19968: jis0212<<14 | 0x46<<7 | 0x32, + 38842 - 19968: jis0212<<14 | 0x46<<7 | 0x33, + 38844 - 19968: jis0212<<14 | 0x46<<7 | 0x34, + 38846 - 19968: jis0212<<14 | 0x46<<7 | 0x35, + 38847 - 19968: jis0212<<14 | 0x46<<7 | 0x36, + 38849 - 19968: jis0212<<14 | 0x46<<7 | 0x37, + 38851 - 19968: jis0208<<14 | 0x4F<<7 | 0x46, + 38852 - 19968: jis0212<<14 | 0x46<<7 | 0x38, + 38853 - 19968: jis0212<<14 | 0x46<<7 | 0x39, + 38854 - 19968: jis0208<<14 | 0x4F<<7 | 0x47, + 38855 - 19968: jis0212<<14 | 0x46<<7 | 0x3A, + 38856 - 19968: jis0208<<14 | 0x4F<<7 | 0x48, + 38857 - 19968: jis0212<<14 | 0x46<<7 | 0x3B, + 38858 - 19968: jis0212<<14 | 0x46<<7 | 0x3C, + 38859 - 19968: jis0208<<14 | 0x4F<<7 | 0x49, + 38860 - 19968: jis0212<<14 | 0x46<<7 | 0x3D, + 38861 - 19968: jis0212<<14 | 0x46<<7 | 0x3E, + 38862 - 19968: jis0212<<14 | 0x46<<7 | 0x3F, + 38864 - 19968: jis0212<<14 | 0x46<<7 | 0x40, + 38865 - 19968: jis0212<<14 | 0x46<<7 | 0x41, + 38867 - 19968: jis0208<<14 | 0x13<<7 | 0x39, + 38868 - 19968: jis0212<<14 | 0x46<<7 | 0x42, + 38871 - 19968: jis0212<<14 | 0x46<<7 | 0x43, + 38872 - 19968: jis0212<<14 | 0x46<<7 | 0x44, + 38873 - 19968: jis0212<<14 | 0x46<<7 | 0x45, + 38875 - 19968: jis0212<<14 | 0x46<<7 | 0x49, + 38876 - 19968: jis0208<<14 | 0x4F<<7 | 0x4A, + 38877 - 19968: jis0212<<14 | 0x46<<7 | 0x46, + 38878 - 19968: jis0212<<14 | 0x46<<7 | 0x47, + 38880 - 19968: jis0212<<14 | 0x46<<7 | 0x48, + 38881 - 19968: jis0212<<14 | 0x46<<7 | 0x4A, + 38884 - 19968: jis0212<<14 | 0x46<<7 | 0x4B, + 38893 - 19968: jis0208<<14 | 0x4F<<7 | 0x4B, + 38894 - 19968: jis0208<<14 | 0x26<<7 | 0x02, + 38895 - 19968: jis0212<<14 | 0x46<<7 | 0x4C, + 38897 - 19968: jis0212<<14 | 0x46<<7 | 0x4D, + 38898 - 19968: jis0208<<14 | 0x4F<<7 | 0x4D, + 38899 - 19968: jis0208<<14 | 0x11<<7 | 0x1A, + 38900 - 19968: jis0212<<14 | 0x46<<7 | 0x4E, + 38901 - 19968: jis0208<<14 | 0x4F<<7 | 0x50, + 38902 - 19968: jis0208<<14 | 0x4F<<7 | 0x4F, + 38903 - 19968: jis0212<<14 | 0x46<<7 | 0x4F, + 38904 - 19968: jis0212<<14 | 0x46<<7 | 0x50, + 38906 - 19968: jis0212<<14 | 0x46<<7 | 0x51, + 38907 - 19968: jis0208<<14 | 0x10<<7 | 0x03, + 38911 - 19968: jis0208<<14 | 0x15<<7 | 0x20, + 38913 - 19968: jis0208<<14 | 0x29<<7 | 0x26, + 38914 - 19968: jis0208<<14 | 0x23<<7 | 0x19, + 38915 - 19968: jis0208<<14 | 0x19<<7 | 0x01, + 38917 - 19968: jis0208<<14 | 0x18<<7 | 0x3F, + 38918 - 19968: jis0208<<14 | 0x1C<<7 | 0x46, + 38919 - 19968: jis0212<<14 | 0x46<<7 | 0x52, + 38920 - 19968: jis0208<<14 | 0x1E<<7 | 0x3B, + 38922 - 19968: jis0212<<14 | 0x46<<7 | 0x53, + 38924 - 19968: jis0208<<14 | 0x4F<<7 | 0x52, + 38925 - 19968: jis0212<<14 | 0x46<<7 | 0x55, + 38926 - 19968: jis0212<<14 | 0x46<<7 | 0x56, + 38927 - 19968: jis0208<<14 | 0x4F<<7 | 0x51, + 38928 - 19968: jis0208<<14 | 0x2C<<7 | 0x21, + 38929 - 19968: jis0208<<14 | 0x13<<7 | 0x47, + 38930 - 19968: jis0208<<14 | 0x27<<7 | 0x31, + 38931 - 19968: jis0208<<14 | 0x25<<7 | 0x3B, + 38932 - 19968: jis0212<<14 | 0x46<<7 | 0x57, + 38934 - 19968: jis0212<<14 | 0x46<<7 | 0x58, + 38935 - 19968: jis0208<<14 | 0x1E<<7 | 0x5B, + 38936 - 19968: jis0208<<14 | 0x2D<<7 | 0x2D, + 38937 - 19968: jis0212<<14 | 0x46<<7 | 0x54, + 38938 - 19968: jis0208<<14 | 0x16<<7 | 0x3A, + 38940 - 19968: jis0212<<14 | 0x46<<7 | 0x59, + 38942 - 19968: jis0212<<14 | 0x46<<7 | 0x5A, + 38944 - 19968: jis0212<<14 | 0x46<<7 | 0x5B, + 38945 - 19968: jis0208<<14 | 0x4F<<7 | 0x55, + 38947 - 19968: jis0212<<14 | 0x46<<7 | 0x5C, + 38948 - 19968: jis0208<<14 | 0x4F<<7 | 0x54, + 38949 - 19968: jis0212<<14 | 0x47<<7 | 0x07, + 38950 - 19968: jis0212<<14 | 0x46<<7 | 0x5D, + 38955 - 19968: jis0212<<14 | 0x47<<7 | 0x00, + 38956 - 19968: jis0208<<14 | 0x2A<<7 | 0x2A, + 38957 - 19968: jis0208<<14 | 0x25<<7 | 0x0B, + 38958 - 19968: jis0212<<14 | 0x47<<7 | 0x01, + 38959 - 19968: jis0212<<14 | 0x47<<7 | 0x02, + 38960 - 19968: jis0212<<14 | 0x47<<7 | 0x03, + 38962 - 19968: jis0212<<14 | 0x47<<7 | 0x04, + 38963 - 19968: jis0212<<14 | 0x47<<7 | 0x05, + 38964 - 19968: jis0208<<14 | 0x10<<7 | 0x2F, + 38965 - 19968: jis0212<<14 | 0x47<<7 | 0x06, + 38967 - 19968: jis0208<<14 | 0x4F<<7 | 0x56, + 38968 - 19968: jis0208<<14 | 0x4F<<7 | 0x53, + 38971 - 19968: jis0208<<14 | 0x28<<7 | 0x30, + 38972 - 19968: jis0208<<14 | 0x2C<<7 | 0x49, + 38973 - 19968: jis0208<<14 | 0x4F<<7 | 0x57, + 38974 - 19968: jis0212<<14 | 0x47<<7 | 0x08, + 38980 - 19968: jis0212<<14 | 0x47<<7 | 0x09, + 38982 - 19968: jis0208<<14 | 0x4F<<7 | 0x58, + 38983 - 19968: jis0212<<14 | 0x47<<7 | 0x0A, + 38986 - 19968: jis0212<<14 | 0x47<<7 | 0x0B, + 38987 - 19968: jis0208<<14 | 0x4F<<7 | 0x5A, + 38988 - 19968: jis0208<<14 | 0x21<<7 | 0x49, + 38989 - 19968: jis0208<<14 | 0x12<<7 | 0x3A, + 38990 - 19968: jis0208<<14 | 0x12<<7 | 0x3B, + 38991 - 19968: jis0208<<14 | 0x4F<<7 | 0x59, + 38993 - 19968: jis0212<<14 | 0x47<<7 | 0x0C, + 38994 - 19968: jis0212<<14 | 0x47<<7 | 0x0D, + 38995 - 19968: jis0212<<14 | 0x47<<7 | 0x0E, + 38996 - 19968: jis0208<<14 | 0x13<<7 | 0x48, + 38997 - 19968: jis0208<<14 | 0x17<<7 | 0x11, + 38998 - 19968: jis0212<<14 | 0x47<<7 | 0x0F, + 38999 - 19968: jis0208<<14 | 0x5B<<7 | 0x39, + 39000 - 19968: jis0208<<14 | 0x13<<7 | 0x49, + 39001 - 19968: jis0212<<14 | 0x47<<7 | 0x11, + 39002 - 19968: jis0212<<14 | 0x47<<7 | 0x12, + 39003 - 19968: jis0208<<14 | 0x24<<7 | 0x1E, + 39006 - 19968: jis0208<<14 | 0x2D<<7 | 0x3F, + 39010 - 19968: jis0212<<14 | 0x47<<7 | 0x13, + 39011 - 19968: jis0212<<14 | 0x47<<7 | 0x14, + 39013 - 19968: jis0208<<14 | 0x5B<<7 | 0x3A, + 39014 - 19968: jis0212<<14 | 0x47<<7 | 0x16, + 39015 - 19968: jis0208<<14 | 0x17<<7 | 0x3B, + 39018 - 19968: jis0212<<14 | 0x47<<7 | 0x17, + 39019 - 19968: jis0208<<14 | 0x4F<<7 | 0x5B, + 39020 - 19968: jis0212<<14 | 0x47<<7 | 0x18, + 39023 - 19968: jis0208<<14 | 0x4F<<7 | 0x5C, + 39024 - 19968: jis0208<<14 | 0x4F<<7 | 0x5D, + 39025 - 19968: jis0208<<14 | 0x50<<7 | 0x00, + 39027 - 19968: jis0208<<14 | 0x50<<7 | 0x02, + 39028 - 19968: jis0208<<14 | 0x50<<7 | 0x01, + 39080 - 19968: jis0208<<14 | 0x28<<7 | 0x56, + 39082 - 19968: jis0208<<14 | 0x50<<7 | 0x03, + 39083 - 19968: jis0212<<14 | 0x47<<7 | 0x19, + 39085 - 19968: jis0212<<14 | 0x47<<7 | 0x1A, + 39086 - 19968: jis0212<<14 | 0x47<<7 | 0x1B, + 39087 - 19968: jis0208<<14 | 0x50<<7 | 0x04, + 39088 - 19968: jis0212<<14 | 0x47<<7 | 0x1C, + 39089 - 19968: jis0208<<14 | 0x50<<7 | 0x05, + 39092 - 19968: jis0212<<14 | 0x47<<7 | 0x1D, + 39094 - 19968: jis0208<<14 | 0x50<<7 | 0x06, + 39095 - 19968: jis0212<<14 | 0x47<<7 | 0x1E, + 39096 - 19968: jis0212<<14 | 0x47<<7 | 0x1F, + 39098 - 19968: jis0212<<14 | 0x47<<7 | 0x20, + 39099 - 19968: jis0212<<14 | 0x47<<7 | 0x21, + 39103 - 19968: jis0212<<14 | 0x47<<7 | 0x22, + 39106 - 19968: jis0212<<14 | 0x47<<7 | 0x23, + 39107 - 19968: jis0208<<14 | 0x50<<7 | 0x08, + 39108 - 19968: jis0208<<14 | 0x50<<7 | 0x07, + 39109 - 19968: jis0212<<14 | 0x47<<7 | 0x24, + 39110 - 19968: jis0208<<14 | 0x50<<7 | 0x09, + 39112 - 19968: jis0212<<14 | 0x47<<7 | 0x25, + 39116 - 19968: jis0212<<14 | 0x47<<7 | 0x26, + 39131 - 19968: jis0208<<14 | 0x27<<7 | 0x53, + 39132 - 19968: jis0208<<14 | 0x45<<7 | 0x2B, + 39135 - 19968: jis0208<<14 | 0x1E<<7 | 0x08, + 39137 - 19968: jis0212<<14 | 0x47<<7 | 0x27, + 39138 - 19968: jis0208<<14 | 0x14<<7 | 0x11, + 39139 - 19968: jis0212<<14 | 0x47<<7 | 0x28, + 39141 - 19968: jis0212<<14 | 0x47<<7 | 0x29, + 39142 - 19968: jis0212<<14 | 0x47<<7 | 0x2A, + 39143 - 19968: jis0212<<14 | 0x47<<7 | 0x2B, + 39145 - 19968: jis0208<<14 | 0x50<<7 | 0x0A, + 39146 - 19968: jis0212<<14 | 0x47<<7 | 0x2C, + 39147 - 19968: jis0208<<14 | 0x50<<7 | 0x0B, + 39149 - 19968: jis0208<<14 | 0x31<<7 | 0x0B, + 39150 - 19968: jis0208<<14 | 0x3C<<7 | 0x1A, + 39151 - 19968: jis0208<<14 | 0x27<<7 | 0x32, + 39154 - 19968: jis0208<<14 | 0x0F<<7 | 0x5A, + 39155 - 19968: jis0212<<14 | 0x47<<7 | 0x2D, + 39156 - 19968: jis0208<<14 | 0x0F<<7 | 0x1A, + 39158 - 19968: jis0212<<14 | 0x47<<7 | 0x2E, + 39164 - 19968: jis0208<<14 | 0x1A<<7 | 0x53, + 39165 - 19968: jis0208<<14 | 0x2A<<7 | 0x0F, + 39166 - 19968: jis0208<<14 | 0x1D<<7 | 0x5D, + 39170 - 19968: jis0212<<14 | 0x47<<7 | 0x2F, + 39171 - 19968: jis0208<<14 | 0x50<<7 | 0x0C, + 39173 - 19968: jis0208<<14 | 0x2B<<7 | 0x3E, + 39175 - 19968: jis0212<<14 | 0x47<<7 | 0x30, + 39176 - 19968: jis0212<<14 | 0x47<<7 | 0x31, + 39177 - 19968: jis0208<<14 | 0x50<<7 | 0x0D, + 39178 - 19968: jis0208<<14 | 0x2C<<7 | 0x3B, + 39180 - 19968: jis0208<<14 | 0x10<<7 | 0x21, + 39184 - 19968: jis0208<<14 | 0x1A<<7 | 0x20, + 39185 - 19968: jis0212<<14 | 0x47<<7 | 0x32, + 39186 - 19968: jis0208<<14 | 0x50<<7 | 0x0E, + 39187 - 19968: jis0208<<14 | 0x11<<7 | 0x4D, + 39188 - 19968: jis0208<<14 | 0x50<<7 | 0x0F, + 39189 - 19968: jis0212<<14 | 0x47<<7 | 0x33, + 39190 - 19968: jis0212<<14 | 0x47<<7 | 0x34, + 39191 - 19968: jis0212<<14 | 0x47<<7 | 0x35, + 39192 - 19968: jis0208<<14 | 0x50<<7 | 0x10, + 39194 - 19968: jis0212<<14 | 0x47<<7 | 0x36, + 39195 - 19968: jis0212<<14 | 0x47<<7 | 0x37, + 39196 - 19968: jis0212<<14 | 0x47<<7 | 0x38, + 39197 - 19968: jis0208<<14 | 0x50<<7 | 0x12, + 39198 - 19968: jis0208<<14 | 0x50<<7 | 0x13, + 39199 - 19968: jis0212<<14 | 0x47<<7 | 0x39, + 39200 - 19968: jis0208<<14 | 0x50<<7 | 0x15, + 39201 - 19968: jis0208<<14 | 0x50<<7 | 0x11, + 39202 - 19968: jis0212<<14 | 0x47<<7 | 0x3A, + 39204 - 19968: jis0208<<14 | 0x50<<7 | 0x14, + 39206 - 19968: jis0212<<14 | 0x47<<7 | 0x3B, + 39207 - 19968: jis0208<<14 | 0x5B<<7 | 0x3D, + 39208 - 19968: jis0208<<14 | 0x13<<7 | 0x3A, + 39211 - 19968: jis0212<<14 | 0x47<<7 | 0x3D, + 39212 - 19968: jis0208<<14 | 0x50<<7 | 0x16, + 39214 - 19968: jis0208<<14 | 0x50<<7 | 0x17, + 39217 - 19968: jis0212<<14 | 0x47<<7 | 0x3E, + 39218 - 19968: jis0212<<14 | 0x47<<7 | 0x3F, + 39219 - 19968: jis0212<<14 | 0x47<<7 | 0x40, + 39220 - 19968: jis0212<<14 | 0x47<<7 | 0x41, + 39221 - 19968: jis0212<<14 | 0x47<<7 | 0x42, + 39225 - 19968: jis0212<<14 | 0x47<<7 | 0x43, + 39226 - 19968: jis0212<<14 | 0x47<<7 | 0x44, + 39227 - 19968: jis0212<<14 | 0x47<<7 | 0x45, + 39228 - 19968: jis0212<<14 | 0x47<<7 | 0x46, + 39229 - 19968: jis0208<<14 | 0x50<<7 | 0x18, + 39230 - 19968: jis0208<<14 | 0x50<<7 | 0x19, + 39232 - 19968: jis0212<<14 | 0x47<<7 | 0x47, + 39233 - 19968: jis0212<<14 | 0x47<<7 | 0x48, + 39234 - 19968: jis0208<<14 | 0x50<<7 | 0x1A, + 39237 - 19968: jis0208<<14 | 0x50<<7 | 0x1C, + 39238 - 19968: jis0212<<14 | 0x47<<7 | 0x49, + 39239 - 19968: jis0212<<14 | 0x47<<7 | 0x4A, + 39240 - 19968: jis0212<<14 | 0x47<<7 | 0x4B, + 39241 - 19968: jis0208<<14 | 0x50<<7 | 0x1B, + 39243 - 19968: jis0208<<14 | 0x50<<7 | 0x1E, + 39244 - 19968: jis0208<<14 | 0x50<<7 | 0x21, + 39245 - 19968: jis0212<<14 | 0x47<<7 | 0x4C, + 39246 - 19968: jis0212<<14 | 0x47<<7 | 0x4D, + 39248 - 19968: jis0208<<14 | 0x50<<7 | 0x1D, + 39249 - 19968: jis0208<<14 | 0x50<<7 | 0x1F, + 39250 - 19968: jis0208<<14 | 0x50<<7 | 0x20, + 39252 - 19968: jis0212<<14 | 0x47<<7 | 0x4E, + 39253 - 19968: jis0208<<14 | 0x50<<7 | 0x22, + 39255 - 19968: jis0208<<14 | 0x15<<7 | 0x21, + 39256 - 19968: jis0212<<14 | 0x47<<7 | 0x4F, + 39257 - 19968: jis0212<<14 | 0x47<<7 | 0x50, + 39259 - 19968: jis0212<<14 | 0x47<<7 | 0x51, + 39260 - 19968: jis0212<<14 | 0x47<<7 | 0x52, + 39262 - 19968: jis0212<<14 | 0x47<<7 | 0x53, + 39263 - 19968: jis0212<<14 | 0x47<<7 | 0x54, + 39264 - 19968: jis0212<<14 | 0x47<<7 | 0x55, + 39318 - 19968: jis0208<<14 | 0x1B<<7 | 0x52, + 39319 - 19968: jis0208<<14 | 0x50<<7 | 0x23, + 39320 - 19968: jis0208<<14 | 0x50<<7 | 0x24, + 39321 - 19968: jis0208<<14 | 0x18<<7 | 0x40, + 39323 - 19968: jis0212<<14 | 0x47<<7 | 0x56, + 39325 - 19968: jis0212<<14 | 0x47<<7 | 0x57, + 39326 - 19968: jis0208<<14 | 0x5B<<7 | 0x3F, + 39327 - 19968: jis0212<<14 | 0x47<<7 | 0x58, + 39333 - 19968: jis0208<<14 | 0x50<<7 | 0x25, + 39334 - 19968: jis0212<<14 | 0x47<<7 | 0x59, + 39336 - 19968: jis0208<<14 | 0x12<<7 | 0x1D, + 39340 - 19968: jis0208<<14 | 0x26<<7 | 0x2E, + 39341 - 19968: jis0208<<14 | 0x50<<7 | 0x26, + 39342 - 19968: jis0208<<14 | 0x50<<7 | 0x27, + 39344 - 19968: jis0212<<14 | 0x47<<7 | 0x5A, + 39345 - 19968: jis0212<<14 | 0x47<<7 | 0x5B, + 39346 - 19968: jis0212<<14 | 0x47<<7 | 0x5C, + 39347 - 19968: jis0208<<14 | 0x22<<7 | 0x39, + 39348 - 19968: jis0208<<14 | 0x25<<7 | 0x4A, + 39349 - 19968: jis0212<<14 | 0x47<<7 | 0x5D, + 39353 - 19968: jis0212<<14 | 0x48<<7 | 0x00, + 39354 - 19968: jis0212<<14 | 0x48<<7 | 0x01, + 39356 - 19968: jis0208<<14 | 0x50<<7 | 0x28, + 39357 - 19968: jis0212<<14 | 0x48<<7 | 0x02, + 39359 - 19968: jis0212<<14 | 0x48<<7 | 0x03, + 39361 - 19968: jis0208<<14 | 0x26<<7 | 0x5C, + 39363 - 19968: jis0212<<14 | 0x48<<7 | 0x04, + 39364 - 19968: jis0208<<14 | 0x21<<7 | 0x2B, + 39365 - 19968: jis0208<<14 | 0x10<<7 | 0x37, + 39366 - 19968: jis0208<<14 | 0x15<<7 | 0x4D, + 39368 - 19968: jis0208<<14 | 0x15<<7 | 0x4E, + 39369 - 19968: jis0212<<14 | 0x48<<7 | 0x05, + 39376 - 19968: jis0208<<14 | 0x22<<7 | 0x52, + 39377 - 19968: jis0208<<14 | 0x50<<7 | 0x2D, + 39378 - 19968: jis0208<<14 | 0x15<<7 | 0x4F, + 39379 - 19968: jis0212<<14 | 0x48<<7 | 0x06, + 39380 - 19968: jis0212<<14 | 0x48<<7 | 0x07, + 39381 - 19968: jis0208<<14 | 0x11<<7 | 0x4E, + 39384 - 19968: jis0208<<14 | 0x50<<7 | 0x2C, + 39385 - 19968: jis0212<<14 | 0x48<<7 | 0x08, + 39386 - 19968: jis0212<<14 | 0x48<<7 | 0x09, + 39387 - 19968: jis0208<<14 | 0x50<<7 | 0x2A, + 39388 - 19968: jis0212<<14 | 0x48<<7 | 0x0A, + 39389 - 19968: jis0208<<14 | 0x50<<7 | 0x2B, + 39390 - 19968: jis0212<<14 | 0x48<<7 | 0x0B, + 39391 - 19968: jis0208<<14 | 0x50<<7 | 0x29, + 39394 - 19968: jis0208<<14 | 0x50<<7 | 0x37, + 39399 - 19968: jis0212<<14 | 0x48<<7 | 0x0C, + 39402 - 19968: jis0212<<14 | 0x48<<7 | 0x0D, + 39403 - 19968: jis0212<<14 | 0x48<<7 | 0x0E, + 39404 - 19968: jis0212<<14 | 0x48<<7 | 0x0F, + 39405 - 19968: jis0208<<14 | 0x50<<7 | 0x2E, + 39406 - 19968: jis0208<<14 | 0x50<<7 | 0x2F, + 39408 - 19968: jis0212<<14 | 0x48<<7 | 0x10, + 39409 - 19968: jis0208<<14 | 0x50<<7 | 0x30, + 39410 - 19968: jis0208<<14 | 0x50<<7 | 0x31, + 39412 - 19968: jis0212<<14 | 0x48<<7 | 0x11, + 39413 - 19968: jis0212<<14 | 0x48<<7 | 0x12, + 39416 - 19968: jis0208<<14 | 0x50<<7 | 0x33, + 39417 - 19968: jis0212<<14 | 0x48<<7 | 0x13, + 39419 - 19968: jis0208<<14 | 0x50<<7 | 0x32, + 39421 - 19968: jis0212<<14 | 0x48<<7 | 0x14, + 39422 - 19968: jis0212<<14 | 0x48<<7 | 0x15, + 39423 - 19968: jis0208<<14 | 0x1C<<7 | 0x38, + 39425 - 19968: jis0208<<14 | 0x50<<7 | 0x34, + 39426 - 19968: jis0212<<14 | 0x48<<7 | 0x16, + 39427 - 19968: jis0212<<14 | 0x48<<7 | 0x17, + 39428 - 19968: jis0212<<14 | 0x48<<7 | 0x18, + 39429 - 19968: jis0208<<14 | 0x50<<7 | 0x36, + 39435 - 19968: jis0212<<14 | 0x48<<7 | 0x19, + 39436 - 19968: jis0212<<14 | 0x48<<7 | 0x1A, + 39438 - 19968: jis0208<<14 | 0x14<<7 | 0x12, + 39439 - 19968: jis0208<<14 | 0x50<<7 | 0x35, + 39440 - 19968: jis0212<<14 | 0x48<<7 | 0x1B, + 39441 - 19968: jis0212<<14 | 0x48<<7 | 0x1C, + 39442 - 19968: jis0208<<14 | 0x20<<7 | 0x5A, + 39443 - 19968: jis0208<<14 | 0x17<<7 | 0x12, + 39446 - 19968: jis0212<<14 | 0x48<<7 | 0x1D, + 39449 - 19968: jis0208<<14 | 0x50<<7 | 0x38, + 39454 - 19968: jis0212<<14 | 0x48<<7 | 0x1E, + 39456 - 19968: jis0212<<14 | 0x48<<7 | 0x1F, + 39458 - 19968: jis0212<<14 | 0x48<<7 | 0x20, + 39459 - 19968: jis0212<<14 | 0x48<<7 | 0x21, + 39460 - 19968: jis0212<<14 | 0x48<<7 | 0x22, + 39463 - 19968: jis0212<<14 | 0x48<<7 | 0x23, + 39464 - 19968: jis0208<<14 | 0x21<<7 | 0x2C, + 39467 - 19968: jis0208<<14 | 0x50<<7 | 0x39, + 39469 - 19968: jis0212<<14 | 0x48<<7 | 0x24, + 39470 - 19968: jis0212<<14 | 0x48<<7 | 0x25, + 39472 - 19968: jis0208<<14 | 0x25<<7 | 0x0C, + 39475 - 19968: jis0212<<14 | 0x48<<7 | 0x26, + 39477 - 19968: jis0212<<14 | 0x48<<7 | 0x27, + 39478 - 19968: jis0212<<14 | 0x48<<7 | 0x28, + 39479 - 19968: jis0208<<14 | 0x50<<7 | 0x3A, + 39480 - 19968: jis0212<<14 | 0x48<<7 | 0x29, + 39486 - 19968: jis0208<<14 | 0x50<<7 | 0x3F, + 39488 - 19968: jis0208<<14 | 0x50<<7 | 0x3D, + 39489 - 19968: jis0212<<14 | 0x48<<7 | 0x2B, + 39490 - 19968: jis0208<<14 | 0x50<<7 | 0x3C, + 39491 - 19968: jis0208<<14 | 0x50<<7 | 0x3E, + 39492 - 19968: jis0212<<14 | 0x48<<7 | 0x2C, + 39493 - 19968: jis0208<<14 | 0x50<<7 | 0x3B, + 39495 - 19968: jis0212<<14 | 0x48<<7 | 0x2A, + 39498 - 19968: jis0212<<14 | 0x48<<7 | 0x2D, + 39499 - 19968: jis0212<<14 | 0x48<<7 | 0x2E, + 39500 - 19968: jis0212<<14 | 0x48<<7 | 0x2F, + 39501 - 19968: jis0208<<14 | 0x50<<7 | 0x41, + 39502 - 19968: jis0208<<14 | 0x5B<<7 | 0x40, + 39505 - 19968: jis0212<<14 | 0x48<<7 | 0x31, + 39508 - 19968: jis0212<<14 | 0x48<<7 | 0x32, + 39509 - 19968: jis0208<<14 | 0x50<<7 | 0x40, + 39510 - 19968: jis0212<<14 | 0x48<<7 | 0x33, + 39511 - 19968: jis0208<<14 | 0x50<<7 | 0x43, + 39514 - 19968: jis0208<<14 | 0x15<<7 | 0x22, + 39515 - 19968: jis0208<<14 | 0x50<<7 | 0x42, + 39517 - 19968: jis0212<<14 | 0x48<<7 | 0x34, + 39519 - 19968: jis0208<<14 | 0x50<<7 | 0x44, + 39522 - 19968: jis0208<<14 | 0x50<<7 | 0x45, + 39524 - 19968: jis0208<<14 | 0x50<<7 | 0x47, + 39525 - 19968: jis0208<<14 | 0x50<<7 | 0x46, + 39529 - 19968: jis0208<<14 | 0x50<<7 | 0x48, + 39530 - 19968: jis0208<<14 | 0x50<<7 | 0x4A, + 39531 - 19968: jis0208<<14 | 0x50<<7 | 0x49, + 39592 - 19968: jis0208<<14 | 0x18<<7 | 0x5B, + 39594 - 19968: jis0212<<14 | 0x48<<7 | 0x35, + 39596 - 19968: jis0212<<14 | 0x48<<7 | 0x36, + 39597 - 19968: jis0208<<14 | 0x50<<7 | 0x4B, + 39598 - 19968: jis0212<<14 | 0x48<<7 | 0x37, + 39599 - 19968: jis0212<<14 | 0x48<<7 | 0x38, + 39600 - 19968: jis0208<<14 | 0x50<<7 | 0x4C, + 39602 - 19968: jis0212<<14 | 0x48<<7 | 0x39, + 39604 - 19968: jis0212<<14 | 0x48<<7 | 0x3A, + 39605 - 19968: jis0212<<14 | 0x48<<7 | 0x3B, + 39606 - 19968: jis0212<<14 | 0x48<<7 | 0x3C, + 39608 - 19968: jis0208<<14 | 0x12<<7 | 0x1B, + 39609 - 19968: jis0212<<14 | 0x48<<7 | 0x3D, + 39611 - 19968: jis0212<<14 | 0x48<<7 | 0x3E, + 39612 - 19968: jis0208<<14 | 0x50<<7 | 0x4D, + 39614 - 19968: jis0212<<14 | 0x48<<7 | 0x3F, + 39615 - 19968: jis0212<<14 | 0x48<<7 | 0x40, + 39616 - 19968: jis0208<<14 | 0x50<<7 | 0x4E, + 39617 - 19968: jis0212<<14 | 0x48<<7 | 0x41, + 39619 - 19968: jis0212<<14 | 0x48<<7 | 0x42, + 39620 - 19968: jis0208<<14 | 0x1E<<7 | 0x50, + 39622 - 19968: jis0212<<14 | 0x48<<7 | 0x43, + 39624 - 19968: jis0212<<14 | 0x48<<7 | 0x44, + 39630 - 19968: jis0212<<14 | 0x48<<7 | 0x45, + 39631 - 19968: jis0208<<14 | 0x50<<7 | 0x4F, + 39632 - 19968: jis0212<<14 | 0x48<<7 | 0x46, + 39633 - 19968: jis0208<<14 | 0x50<<7 | 0x50, + 39634 - 19968: jis0212<<14 | 0x48<<7 | 0x47, + 39635 - 19968: jis0208<<14 | 0x50<<7 | 0x51, + 39636 - 19968: jis0208<<14 | 0x50<<7 | 0x52, + 39637 - 19968: jis0212<<14 | 0x48<<7 | 0x48, + 39638 - 19968: jis0212<<14 | 0x48<<7 | 0x49, + 39639 - 19968: jis0212<<14 | 0x48<<7 | 0x4A, + 39640 - 19968: jis0208<<14 | 0x18<<7 | 0x41, + 39641 - 19968: jis0208<<14 | 0x5B<<7 | 0x41, + 39643 - 19968: jis0212<<14 | 0x48<<7 | 0x4B, + 39644 - 19968: jis0208<<14 | 0x5B<<7 | 0x42, + 39646 - 19968: jis0208<<14 | 0x50<<7 | 0x53, + 39647 - 19968: jis0208<<14 | 0x50<<7 | 0x54, + 39648 - 19968: jis0212<<14 | 0x48<<7 | 0x4D, + 39650 - 19968: jis0208<<14 | 0x50<<7 | 0x55, + 39651 - 19968: jis0208<<14 | 0x50<<7 | 0x56, + 39652 - 19968: jis0212<<14 | 0x48<<7 | 0x4E, + 39653 - 19968: jis0212<<14 | 0x48<<7 | 0x4F, + 39654 - 19968: jis0208<<14 | 0x50<<7 | 0x57, + 39655 - 19968: jis0212<<14 | 0x48<<7 | 0x50, + 39657 - 19968: jis0212<<14 | 0x48<<7 | 0x51, + 39658 - 19968: jis0208<<14 | 0x27<<7 | 0x10, + 39659 - 19968: jis0208<<14 | 0x50<<7 | 0x59, + 39660 - 19968: jis0212<<14 | 0x48<<7 | 0x52, + 39661 - 19968: jis0208<<14 | 0x28<<7 | 0x05, + 39662 - 19968: jis0208<<14 | 0x50<<7 | 0x5A, + 39663 - 19968: jis0208<<14 | 0x50<<7 | 0x58, + 39665 - 19968: jis0208<<14 | 0x50<<7 | 0x5C, + 39666 - 19968: jis0212<<14 | 0x48<<7 | 0x53, + 39667 - 19968: jis0212<<14 | 0x48<<7 | 0x54, + 39668 - 19968: jis0208<<14 | 0x50<<7 | 0x5B, + 39669 - 19968: jis0212<<14 | 0x48<<7 | 0x55, + 39671 - 19968: jis0208<<14 | 0x50<<7 | 0x5D, + 39673 - 19968: jis0212<<14 | 0x48<<7 | 0x56, + 39674 - 19968: jis0212<<14 | 0x48<<7 | 0x57, + 39675 - 19968: jis0208<<14 | 0x51<<7 | 0x00, + 39677 - 19968: jis0212<<14 | 0x48<<7 | 0x58, + 39679 - 19968: jis0212<<14 | 0x48<<7 | 0x59, + 39680 - 19968: jis0212<<14 | 0x48<<7 | 0x5A, + 39681 - 19968: jis0212<<14 | 0x48<<7 | 0x5B, + 39682 - 19968: jis0212<<14 | 0x48<<7 | 0x5C, + 39683 - 19968: jis0212<<14 | 0x48<<7 | 0x5D, + 39684 - 19968: jis0212<<14 | 0x49<<7 | 0x00, + 39685 - 19968: jis0212<<14 | 0x49<<7 | 0x01, + 39686 - 19968: jis0208<<14 | 0x51<<7 | 0x01, + 39688 - 19968: jis0212<<14 | 0x49<<7 | 0x02, + 39689 - 19968: jis0212<<14 | 0x49<<7 | 0x03, + 39691 - 19968: jis0212<<14 | 0x49<<7 | 0x04, + 39692 - 19968: jis0212<<14 | 0x49<<7 | 0x05, + 39693 - 19968: jis0212<<14 | 0x49<<7 | 0x06, + 39694 - 19968: jis0212<<14 | 0x49<<7 | 0x07, + 39696 - 19968: jis0212<<14 | 0x49<<7 | 0x08, + 39698 - 19968: jis0212<<14 | 0x49<<7 | 0x09, + 39702 - 19968: jis0212<<14 | 0x49<<7 | 0x0A, + 39704 - 19968: jis0208<<14 | 0x51<<7 | 0x02, + 39705 - 19968: jis0212<<14 | 0x49<<7 | 0x0B, + 39706 - 19968: jis0208<<14 | 0x51<<7 | 0x03, + 39707 - 19968: jis0212<<14 | 0x49<<7 | 0x0C, + 39708 - 19968: jis0212<<14 | 0x49<<7 | 0x0D, + 39711 - 19968: jis0208<<14 | 0x51<<7 | 0x04, + 39712 - 19968: jis0212<<14 | 0x49<<7 | 0x0E, + 39714 - 19968: jis0208<<14 | 0x51<<7 | 0x05, + 39715 - 19968: jis0208<<14 | 0x51<<7 | 0x06, + 39717 - 19968: jis0208<<14 | 0x51<<7 | 0x07, + 39718 - 19968: jis0212<<14 | 0x49<<7 | 0x0F, + 39719 - 19968: jis0208<<14 | 0x51<<7 | 0x08, + 39720 - 19968: jis0208<<14 | 0x51<<7 | 0x09, + 39721 - 19968: jis0208<<14 | 0x51<<7 | 0x0A, + 39722 - 19968: jis0208<<14 | 0x51<<7 | 0x0B, + 39723 - 19968: jis0212<<14 | 0x49<<7 | 0x10, + 39725 - 19968: jis0212<<14 | 0x49<<7 | 0x11, + 39726 - 19968: jis0208<<14 | 0x51<<7 | 0x0C, + 39727 - 19968: jis0208<<14 | 0x51<<7 | 0x0D, + 39729 - 19968: jis0208<<14 | 0x3C<<7 | 0x14, + 39730 - 19968: jis0208<<14 | 0x51<<7 | 0x0E, + 39731 - 19968: jis0212<<14 | 0x49<<7 | 0x12, + 39732 - 19968: jis0212<<14 | 0x49<<7 | 0x13, + 39733 - 19968: jis0212<<14 | 0x49<<7 | 0x14, + 39735 - 19968: jis0212<<14 | 0x49<<7 | 0x15, + 39737 - 19968: jis0212<<14 | 0x49<<7 | 0x16, + 39738 - 19968: jis0212<<14 | 0x49<<7 | 0x17, + 39739 - 19968: jis0208<<14 | 0x43<<7 | 0x57, + 39740 - 19968: jis0208<<14 | 0x14<<7 | 0x13, + 39741 - 19968: jis0212<<14 | 0x49<<7 | 0x18, + 39745 - 19968: jis0208<<14 | 0x12<<7 | 0x00, + 39746 - 19968: jis0208<<14 | 0x19<<7 | 0x11, + 39747 - 19968: jis0208<<14 | 0x51<<7 | 0x10, + 39748 - 19968: jis0208<<14 | 0x51<<7 | 0x0F, + 39749 - 19968: jis0208<<14 | 0x2B<<7 | 0x04, + 39752 - 19968: jis0212<<14 | 0x49<<7 | 0x19, + 39755 - 19968: jis0212<<14 | 0x49<<7 | 0x1A, + 39756 - 19968: jis0212<<14 | 0x49<<7 | 0x1B, + 39757 - 19968: jis0208<<14 | 0x51<<7 | 0x12, + 39758 - 19968: jis0208<<14 | 0x51<<7 | 0x13, + 39759 - 19968: jis0208<<14 | 0x51<<7 | 0x11, + 39761 - 19968: jis0208<<14 | 0x51<<7 | 0x14, + 39764 - 19968: jis0208<<14 | 0x2A<<7 | 0x41, + 39765 - 19968: jis0212<<14 | 0x49<<7 | 0x1C, + 39766 - 19968: jis0212<<14 | 0x49<<7 | 0x1D, + 39767 - 19968: jis0212<<14 | 0x49<<7 | 0x1E, + 39768 - 19968: jis0208<<14 | 0x51<<7 | 0x15, + 39770 - 19968: jis0208<<14 | 0x14<<7 | 0x5A, + 39771 - 19968: jis0212<<14 | 0x49<<7 | 0x1F, + 39774 - 19968: jis0212<<14 | 0x49<<7 | 0x20, + 39777 - 19968: jis0212<<14 | 0x49<<7 | 0x21, + 39779 - 19968: jis0212<<14 | 0x49<<7 | 0x22, + 39781 - 19968: jis0212<<14 | 0x49<<7 | 0x23, + 39782 - 19968: jis0212<<14 | 0x49<<7 | 0x24, + 39784 - 19968: jis0212<<14 | 0x49<<7 | 0x25, + 39786 - 19968: jis0212<<14 | 0x49<<7 | 0x26, + 39787 - 19968: jis0212<<14 | 0x49<<7 | 0x27, + 39788 - 19968: jis0212<<14 | 0x49<<7 | 0x28, + 39789 - 19968: jis0212<<14 | 0x49<<7 | 0x29, + 39790 - 19968: jis0212<<14 | 0x49<<7 | 0x2A, + 39791 - 19968: jis0208<<14 | 0x2E<<7 | 0x04, + 39794 - 19968: jis0208<<14 | 0x5B<<7 | 0x44, + 39795 - 19968: jis0212<<14 | 0x49<<7 | 0x2B, + 39796 - 19968: jis0208<<14 | 0x51<<7 | 0x16, + 39797 - 19968: jis0208<<14 | 0x5B<<7 | 0x43, + 39799 - 19968: jis0212<<14 | 0x49<<7 | 0x2D, + 39800 - 19968: jis0212<<14 | 0x49<<7 | 0x2E, + 39801 - 19968: jis0212<<14 | 0x49<<7 | 0x2F, + 39807 - 19968: jis0212<<14 | 0x49<<7 | 0x30, + 39808 - 19968: jis0212<<14 | 0x49<<7 | 0x31, + 39811 - 19968: jis0208<<14 | 0x51<<7 | 0x18, + 39812 - 19968: jis0212<<14 | 0x49<<7 | 0x32, + 39813 - 19968: jis0212<<14 | 0x49<<7 | 0x33, + 39814 - 19968: jis0212<<14 | 0x49<<7 | 0x34, + 39815 - 19968: jis0212<<14 | 0x49<<7 | 0x35, + 39817 - 19968: jis0212<<14 | 0x49<<7 | 0x36, + 39818 - 19968: jis0212<<14 | 0x49<<7 | 0x37, + 39819 - 19968: jis0212<<14 | 0x49<<7 | 0x38, + 39821 - 19968: jis0212<<14 | 0x49<<7 | 0x39, + 39822 - 19968: jis0208<<14 | 0x0F<<7 | 0x1D, + 39823 - 19968: jis0208<<14 | 0x5B<<7 | 0x45, + 39824 - 19968: jis0212<<14 | 0x49<<7 | 0x3B, + 39825 - 19968: jis0208<<14 | 0x51<<7 | 0x19, + 39826 - 19968: jis0208<<14 | 0x29<<7 | 0x0A, + 39827 - 19968: jis0208<<14 | 0x51<<7 | 0x17, + 39828 - 19968: jis0212<<14 | 0x49<<7 | 0x3C, + 39830 - 19968: jis0208<<14 | 0x51<<7 | 0x1A, + 39831 - 19968: jis0208<<14 | 0x51<<7 | 0x1B, + 39834 - 19968: jis0212<<14 | 0x49<<7 | 0x3D, + 39837 - 19968: jis0212<<14 | 0x49<<7 | 0x3E, + 39838 - 19968: jis0212<<14 | 0x49<<7 | 0x3F, + 39839 - 19968: jis0208<<14 | 0x51<<7 | 0x1C, + 39840 - 19968: jis0208<<14 | 0x51<<7 | 0x1D, + 39846 - 19968: jis0212<<14 | 0x49<<7 | 0x40, + 39847 - 19968: jis0212<<14 | 0x49<<7 | 0x41, + 39848 - 19968: jis0208<<14 | 0x51<<7 | 0x1E, + 39849 - 19968: jis0212<<14 | 0x49<<7 | 0x42, + 39850 - 19968: jis0208<<14 | 0x2A<<7 | 0x4D, + 39851 - 19968: jis0208<<14 | 0x1A<<7 | 0x0C, + 39852 - 19968: jis0212<<14 | 0x49<<7 | 0x43, + 39853 - 19968: jis0208<<14 | 0x19<<7 | 0x59, + 39854 - 19968: jis0208<<14 | 0x20<<7 | 0x0E, + 39856 - 19968: jis0212<<14 | 0x49<<7 | 0x44, + 39857 - 19968: jis0208<<14 | 0x5B<<7 | 0x46, + 39858 - 19968: jis0212<<14 | 0x49<<7 | 0x46, + 39860 - 19968: jis0208<<14 | 0x51<<7 | 0x1F, + 39863 - 19968: jis0212<<14 | 0x49<<7 | 0x47, + 39864 - 19968: jis0212<<14 | 0x49<<7 | 0x48, + 39865 - 19968: jis0208<<14 | 0x51<<7 | 0x22, + 39867 - 19968: jis0208<<14 | 0x5B<<7 | 0x47, + 39868 - 19968: jis0212<<14 | 0x49<<7 | 0x4A, + 39870 - 19968: jis0212<<14 | 0x49<<7 | 0x4B, + 39871 - 19968: jis0212<<14 | 0x49<<7 | 0x4C, + 39872 - 19968: jis0208<<14 | 0x51<<7 | 0x20, + 39873 - 19968: jis0212<<14 | 0x49<<7 | 0x4D, + 39878 - 19968: jis0208<<14 | 0x51<<7 | 0x23, + 39879 - 19968: jis0212<<14 | 0x49<<7 | 0x4E, + 39880 - 19968: jis0212<<14 | 0x49<<7 | 0x4F, + 39881 - 19968: jis0208<<14 | 0x17<<7 | 0x50, + 39882 - 19968: jis0208<<14 | 0x51<<7 | 0x21, + 39886 - 19968: jis0212<<14 | 0x49<<7 | 0x50, + 39887 - 19968: jis0208<<14 | 0x51<<7 | 0x24, + 39888 - 19968: jis0212<<14 | 0x49<<7 | 0x51, + 39889 - 19968: jis0208<<14 | 0x51<<7 | 0x25, + 39890 - 19968: jis0208<<14 | 0x51<<7 | 0x26, + 39892 - 19968: jis0208<<14 | 0x51<<7 | 0x2A, + 39894 - 19968: jis0208<<14 | 0x1A<<7 | 0x09, + 39895 - 19968: jis0212<<14 | 0x49<<7 | 0x52, + 39896 - 19968: jis0212<<14 | 0x49<<7 | 0x53, + 39899 - 19968: jis0208<<14 | 0x21<<7 | 0x43, + 39901 - 19968: jis0212<<14 | 0x49<<7 | 0x54, + 39903 - 19968: jis0212<<14 | 0x49<<7 | 0x55, + 39905 - 19968: jis0208<<14 | 0x51<<7 | 0x2B, + 39906 - 19968: jis0208<<14 | 0x51<<7 | 0x28, + 39907 - 19968: jis0208<<14 | 0x51<<7 | 0x27, + 39908 - 19968: jis0208<<14 | 0x51<<7 | 0x29, + 39909 - 19968: jis0212<<14 | 0x49<<7 | 0x56, + 39911 - 19968: jis0212<<14 | 0x49<<7 | 0x57, + 39912 - 19968: jis0208<<14 | 0x16<<7 | 0x3E, + 39914 - 19968: jis0212<<14 | 0x49<<7 | 0x58, + 39915 - 19968: jis0212<<14 | 0x49<<7 | 0x59, + 39919 - 19968: jis0212<<14 | 0x49<<7 | 0x5A, + 39920 - 19968: jis0208<<14 | 0x51<<7 | 0x2F, + 39921 - 19968: jis0208<<14 | 0x51<<7 | 0x2E, + 39922 - 19968: jis0208<<14 | 0x51<<7 | 0x2D, + 39923 - 19968: jis0212<<14 | 0x49<<7 | 0x5B, + 39925 - 19968: jis0208<<14 | 0x0F<<7 | 0x12, + 39927 - 19968: jis0212<<14 | 0x49<<7 | 0x5C, + 39928 - 19968: jis0212<<14 | 0x49<<7 | 0x5D, + 39929 - 19968: jis0212<<14 | 0x4A<<7 | 0x00, + 39930 - 19968: jis0212<<14 | 0x4A<<7 | 0x01, + 39933 - 19968: jis0212<<14 | 0x4A<<7 | 0x02, + 39935 - 19968: jis0212<<14 | 0x4A<<7 | 0x03, + 39936 - 19968: jis0208<<14 | 0x5B<<7 | 0x48, + 39938 - 19968: jis0212<<14 | 0x4A<<7 | 0x05, + 39940 - 19968: jis0208<<14 | 0x51<<7 | 0x39, + 39942 - 19968: jis0208<<14 | 0x51<<7 | 0x35, + 39944 - 19968: jis0208<<14 | 0x51<<7 | 0x36, + 39945 - 19968: jis0208<<14 | 0x51<<7 | 0x32, + 39946 - 19968: jis0208<<14 | 0x51<<7 | 0x38, + 39947 - 19968: jis0212<<14 | 0x4A<<7 | 0x06, + 39948 - 19968: jis0208<<14 | 0x51<<7 | 0x34, + 39949 - 19968: jis0208<<14 | 0x12<<7 | 0x41, + 39951 - 19968: jis0212<<14 | 0x4A<<7 | 0x07, + 39952 - 19968: jis0208<<14 | 0x2E<<7 | 0x2B, + 39953 - 19968: jis0212<<14 | 0x4A<<7 | 0x08, + 39954 - 19968: jis0208<<14 | 0x51<<7 | 0x37, + 39955 - 19968: jis0208<<14 | 0x51<<7 | 0x33, + 39956 - 19968: jis0208<<14 | 0x51<<7 | 0x31, + 39957 - 19968: jis0208<<14 | 0x51<<7 | 0x30, + 39958 - 19968: jis0212<<14 | 0x4A<<7 | 0x09, + 39960 - 19968: jis0212<<14 | 0x4A<<7 | 0x0A, + 39961 - 19968: jis0212<<14 | 0x4A<<7 | 0x0B, + 39962 - 19968: jis0212<<14 | 0x4A<<7 | 0x0C, + 39963 - 19968: jis0208<<14 | 0x51<<7 | 0x3B, + 39964 - 19968: jis0212<<14 | 0x4A<<7 | 0x0D, + 39966 - 19968: jis0212<<14 | 0x4A<<7 | 0x0E, + 39969 - 19968: jis0208<<14 | 0x51<<7 | 0x3E, + 39970 - 19968: jis0212<<14 | 0x4A<<7 | 0x0F, + 39971 - 19968: jis0212<<14 | 0x4A<<7 | 0x10, + 39972 - 19968: jis0208<<14 | 0x51<<7 | 0x3D, + 39973 - 19968: jis0208<<14 | 0x51<<7 | 0x3C, + 39974 - 19968: jis0212<<14 | 0x4A<<7 | 0x11, + 39975 - 19968: jis0212<<14 | 0x4A<<7 | 0x12, + 39976 - 19968: jis0212<<14 | 0x4A<<7 | 0x13, + 39977 - 19968: jis0212<<14 | 0x4A<<7 | 0x14, + 39978 - 19968: jis0212<<14 | 0x4A<<7 | 0x15, + 39981 - 19968: jis0208<<14 | 0x28<<7 | 0x28, + 39982 - 19968: jis0208<<14 | 0x51<<7 | 0x3A, + 39983 - 19968: jis0208<<14 | 0x0F<<7 | 0x52, + 39984 - 19968: jis0208<<14 | 0x51<<7 | 0x3F, + 39985 - 19968: jis0212<<14 | 0x4A<<7 | 0x16, + 39986 - 19968: jis0208<<14 | 0x51<<7 | 0x41, + 39989 - 19968: jis0212<<14 | 0x4A<<7 | 0x17, + 39990 - 19968: jis0212<<14 | 0x4A<<7 | 0x18, + 39991 - 19968: jis0212<<14 | 0x4A<<7 | 0x19, + 39993 - 19968: jis0208<<14 | 0x12<<7 | 0x4E, + 39994 - 19968: jis0208<<14 | 0x51<<7 | 0x2C, + 39995 - 19968: jis0208<<14 | 0x10<<7 | 0x16, + 39997 - 19968: jis0212<<14 | 0x4A<<7 | 0x1A, + 39998 - 19968: jis0208<<14 | 0x51<<7 | 0x43, + 40001 - 19968: jis0212<<14 | 0x4A<<7 | 0x1B, + 40003 - 19968: jis0212<<14 | 0x4A<<7 | 0x1C, + 40004 - 19968: jis0212<<14 | 0x4A<<7 | 0x1D, + 40005 - 19968: jis0212<<14 | 0x4A<<7 | 0x1E, + 40006 - 19968: jis0208<<14 | 0x51<<7 | 0x42, + 40007 - 19968: jis0208<<14 | 0x51<<7 | 0x40, + 40008 - 19968: jis0208<<14 | 0x22<<7 | 0x0C, + 40009 - 19968: jis0212<<14 | 0x4A<<7 | 0x1F, + 40010 - 19968: jis0212<<14 | 0x4A<<7 | 0x20, + 40014 - 19968: jis0212<<14 | 0x4A<<7 | 0x21, + 40015 - 19968: jis0212<<14 | 0x4A<<7 | 0x22, + 40016 - 19968: jis0212<<14 | 0x4A<<7 | 0x23, + 40018 - 19968: jis0208<<14 | 0x2A<<7 | 0x4F, + 40019 - 19968: jis0212<<14 | 0x4A<<7 | 0x24, + 40020 - 19968: jis0212<<14 | 0x4A<<7 | 0x25, + 40022 - 19968: jis0212<<14 | 0x4A<<7 | 0x26, + 40023 - 19968: jis0208<<14 | 0x2D<<7 | 0x39, + 40024 - 19968: jis0212<<14 | 0x4A<<7 | 0x27, + 40026 - 19968: jis0208<<14 | 0x51<<7 | 0x44, + 40027 - 19968: jis0212<<14 | 0x4A<<7 | 0x28, + 40028 - 19968: jis0212<<14 | 0x4A<<7 | 0x2F, + 40029 - 19968: jis0212<<14 | 0x4A<<7 | 0x29, + 40030 - 19968: jis0212<<14 | 0x4A<<7 | 0x2A, + 40031 - 19968: jis0212<<14 | 0x4A<<7 | 0x2B, + 40032 - 19968: jis0208<<14 | 0x51<<7 | 0x45, + 40035 - 19968: jis0212<<14 | 0x4A<<7 | 0x2C, + 40039 - 19968: jis0208<<14 | 0x51<<7 | 0x46, + 40040 - 19968: jis0212<<14 | 0x4A<<7 | 0x31, + 40041 - 19968: jis0212<<14 | 0x4A<<7 | 0x2D, + 40042 - 19968: jis0212<<14 | 0x4A<<7 | 0x2E, + 40043 - 19968: jis0212<<14 | 0x4A<<7 | 0x30, + 40046 - 19968: jis0212<<14 | 0x4A<<7 | 0x32, + 40048 - 19968: jis0212<<14 | 0x4A<<7 | 0x33, + 40050 - 19968: jis0212<<14 | 0x4A<<7 | 0x34, + 40053 - 19968: jis0212<<14 | 0x4A<<7 | 0x35, + 40054 - 19968: jis0208<<14 | 0x51<<7 | 0x47, + 40055 - 19968: jis0212<<14 | 0x4A<<7 | 0x36, + 40056 - 19968: jis0208<<14 | 0x51<<7 | 0x48, + 40059 - 19968: jis0212<<14 | 0x4A<<7 | 0x37, + 40165 - 19968: jis0208<<14 | 0x23<<7 | 0x1A, + 40166 - 19968: jis0212<<14 | 0x4A<<7 | 0x38, + 40167 - 19968: jis0208<<14 | 0x51<<7 | 0x49, + 40169 - 19968: jis0208<<14 | 0x27<<7 | 0x16, + 40171 - 19968: jis0208<<14 | 0x51<<7 | 0x4E, + 40172 - 19968: jis0208<<14 | 0x51<<7 | 0x4A, + 40176 - 19968: jis0208<<14 | 0x51<<7 | 0x4B, + 40178 - 19968: jis0212<<14 | 0x4A<<7 | 0x39, + 40179 - 19968: jis0208<<14 | 0x2A<<7 | 0x10, + 40180 - 19968: jis0208<<14 | 0x2B<<7 | 0x23, + 40182 - 19968: jis0208<<14 | 0x25<<7 | 0x2F, + 40183 - 19968: jis0212<<14 | 0x4A<<7 | 0x3A, + 40185 - 19968: jis0212<<14 | 0x4A<<7 | 0x3B, + 40194 - 19968: jis0212<<14 | 0x4A<<7 | 0x3D, + 40195 - 19968: jis0208<<14 | 0x51<<7 | 0x4F, + 40198 - 19968: jis0208<<14 | 0x51<<7 | 0x50, + 40199 - 19968: jis0208<<14 | 0x25<<7 | 0x1D, + 40200 - 19968: jis0208<<14 | 0x51<<7 | 0x4D, + 40201 - 19968: jis0208<<14 | 0x51<<7 | 0x4C, + 40203 - 19968: jis0212<<14 | 0x4A<<7 | 0x3C, + 40206 - 19968: jis0208<<14 | 0x11<<7 | 0x09, + 40209 - 19968: jis0212<<14 | 0x4A<<7 | 0x3E, + 40210 - 19968: jis0208<<14 | 0x51<<7 | 0x58, + 40213 - 19968: jis0208<<14 | 0x51<<7 | 0x57, + 40215 - 19968: jis0212<<14 | 0x4A<<7 | 0x3F, + 40216 - 19968: jis0212<<14 | 0x4A<<7 | 0x40, + 40219 - 19968: jis0208<<14 | 0x10<<7 | 0x54, + 40220 - 19968: jis0212<<14 | 0x4A<<7 | 0x41, + 40221 - 19968: jis0212<<14 | 0x4A<<7 | 0x42, + 40222 - 19968: jis0212<<14 | 0x4A<<7 | 0x43, + 40223 - 19968: jis0208<<14 | 0x51<<7 | 0x55, + 40227 - 19968: jis0208<<14 | 0x51<<7 | 0x54, + 40230 - 19968: jis0208<<14 | 0x51<<7 | 0x52, + 40232 - 19968: jis0208<<14 | 0x12<<7 | 0x5A, + 40234 - 19968: jis0208<<14 | 0x51<<7 | 0x51, + 40235 - 19968: jis0208<<14 | 0x1B<<7 | 0x11, + 40236 - 19968: jis0208<<14 | 0x11<<7 | 0x08, + 40239 - 19968: jis0212<<14 | 0x4A<<7 | 0x44, + 40240 - 19968: jis0212<<14 | 0x4A<<7 | 0x45, + 40242 - 19968: jis0212<<14 | 0x4A<<7 | 0x46, + 40243 - 19968: jis0212<<14 | 0x4A<<7 | 0x47, + 40244 - 19968: jis0212<<14 | 0x4A<<7 | 0x48, + 40250 - 19968: jis0212<<14 | 0x4A<<7 | 0x49, + 40251 - 19968: jis0208<<14 | 0x18<<7 | 0x42, + 40252 - 19968: jis0212<<14 | 0x4A<<7 | 0x4A, + 40253 - 19968: jis0212<<14 | 0x4A<<7 | 0x4C, + 40254 - 19968: jis0208<<14 | 0x51<<7 | 0x5B, + 40255 - 19968: jis0208<<14 | 0x51<<7 | 0x5A, + 40257 - 19968: jis0208<<14 | 0x51<<7 | 0x59, + 40258 - 19968: jis0212<<14 | 0x4A<<7 | 0x4D, + 40259 - 19968: jis0212<<14 | 0x4A<<7 | 0x4E, + 40260 - 19968: jis0208<<14 | 0x51<<7 | 0x56, + 40261 - 19968: jis0212<<14 | 0x4A<<7 | 0x4B, + 40262 - 19968: jis0208<<14 | 0x51<<7 | 0x5C, + 40263 - 19968: jis0212<<14 | 0x4A<<7 | 0x4F, + 40264 - 19968: jis0208<<14 | 0x51<<7 | 0x5D, + 40266 - 19968: jis0212<<14 | 0x4A<<7 | 0x50, + 40272 - 19968: jis0208<<14 | 0x52<<7 | 0x04, + 40273 - 19968: jis0208<<14 | 0x52<<7 | 0x03, + 40275 - 19968: jis0212<<14 | 0x4A<<7 | 0x51, + 40276 - 19968: jis0212<<14 | 0x4A<<7 | 0x52, + 40281 - 19968: jis0208<<14 | 0x52<<7 | 0x05, + 40284 - 19968: jis0208<<14 | 0x10<<7 | 0x0C, + 40285 - 19968: jis0208<<14 | 0x52<<7 | 0x00, + 40286 - 19968: jis0208<<14 | 0x52<<7 | 0x01, + 40287 - 19968: jis0212<<14 | 0x4A<<7 | 0x53, + 40288 - 19968: jis0208<<14 | 0x18<<7 | 0x53, + 40289 - 19968: jis0208<<14 | 0x2B<<7 | 0x18, + 40290 - 19968: jis0212<<14 | 0x4A<<7 | 0x55, + 40291 - 19968: jis0212<<14 | 0x4A<<7 | 0x54, + 40292 - 19968: jis0208<<14 | 0x52<<7 | 0x02, + 40293 - 19968: jis0212<<14 | 0x4A<<7 | 0x56, + 40297 - 19968: jis0212<<14 | 0x4A<<7 | 0x57, + 40298 - 19968: jis0212<<14 | 0x4A<<7 | 0x58, + 40299 - 19968: jis0208<<14 | 0x5B<<7 | 0x4A, + 40300 - 19968: jis0208<<14 | 0x2A<<7 | 0x11, + 40303 - 19968: jis0208<<14 | 0x52<<7 | 0x0A, + 40304 - 19968: jis0208<<14 | 0x5B<<7 | 0x49, + 40306 - 19968: jis0208<<14 | 0x52<<7 | 0x06, + 40310 - 19968: jis0212<<14 | 0x4A<<7 | 0x5B, + 40311 - 19968: jis0212<<14 | 0x4A<<7 | 0x5C, + 40314 - 19968: jis0208<<14 | 0x52<<7 | 0x0B, + 40315 - 19968: jis0212<<14 | 0x4A<<7 | 0x5D, + 40316 - 19968: jis0212<<14 | 0x4B<<7 | 0x00, + 40318 - 19968: jis0212<<14 | 0x4B<<7 | 0x01, + 40323 - 19968: jis0212<<14 | 0x4B<<7 | 0x02, + 40324 - 19968: jis0212<<14 | 0x4B<<7 | 0x03, + 40326 - 19968: jis0212<<14 | 0x4B<<7 | 0x04, + 40327 - 19968: jis0208<<14 | 0x52<<7 | 0x08, + 40329 - 19968: jis0208<<14 | 0x52<<7 | 0x07, + 40330 - 19968: jis0212<<14 | 0x4B<<7 | 0x05, + 40333 - 19968: jis0212<<14 | 0x4B<<7 | 0x06, + 40334 - 19968: jis0212<<14 | 0x4B<<7 | 0x07, + 40335 - 19968: jis0208<<14 | 0x16<<7 | 0x3B, + 40338 - 19968: jis0212<<14 | 0x4B<<7 | 0x08, + 40339 - 19968: jis0212<<14 | 0x4B<<7 | 0x09, + 40341 - 19968: jis0212<<14 | 0x4B<<7 | 0x0A, + 40342 - 19968: jis0212<<14 | 0x4B<<7 | 0x0B, + 40343 - 19968: jis0212<<14 | 0x4B<<7 | 0x0C, + 40344 - 19968: jis0212<<14 | 0x4B<<7 | 0x0D, + 40346 - 19968: jis0208<<14 | 0x52<<7 | 0x0C, + 40353 - 19968: jis0212<<14 | 0x4B<<7 | 0x0E, + 40356 - 19968: jis0208<<14 | 0x52<<7 | 0x0D, + 40361 - 19968: jis0208<<14 | 0x52<<7 | 0x0E, + 40362 - 19968: jis0212<<14 | 0x4B<<7 | 0x0F, + 40363 - 19968: jis0208<<14 | 0x52<<7 | 0x09, + 40364 - 19968: jis0212<<14 | 0x4B<<7 | 0x10, + 40366 - 19968: jis0212<<14 | 0x4B<<7 | 0x11, + 40367 - 19968: jis0208<<14 | 0x51<<7 | 0x53, + 40369 - 19968: jis0212<<14 | 0x4B<<7 | 0x12, + 40370 - 19968: jis0208<<14 | 0x52<<7 | 0x0F, + 40372 - 19968: jis0208<<14 | 0x23<<7 | 0x40, + 40373 - 19968: jis0212<<14 | 0x4B<<7 | 0x13, + 40376 - 19968: jis0208<<14 | 0x52<<7 | 0x13, + 40377 - 19968: jis0212<<14 | 0x4B<<7 | 0x14, + 40378 - 19968: jis0208<<14 | 0x52<<7 | 0x14, + 40379 - 19968: jis0208<<14 | 0x52<<7 | 0x12, + 40380 - 19968: jis0212<<14 | 0x4B<<7 | 0x15, + 40383 - 19968: jis0212<<14 | 0x4B<<7 | 0x16, + 40385 - 19968: jis0208<<14 | 0x52<<7 | 0x11, + 40386 - 19968: jis0208<<14 | 0x52<<7 | 0x17, + 40387 - 19968: jis0212<<14 | 0x4B<<7 | 0x17, + 40388 - 19968: jis0208<<14 | 0x52<<7 | 0x10, + 40390 - 19968: jis0208<<14 | 0x52<<7 | 0x15, + 40391 - 19968: jis0212<<14 | 0x4B<<7 | 0x18, + 40393 - 19968: jis0212<<14 | 0x4B<<7 | 0x19, + 40394 - 19968: jis0212<<14 | 0x4B<<7 | 0x1A, + 40399 - 19968: jis0208<<14 | 0x52<<7 | 0x16, + 40403 - 19968: jis0208<<14 | 0x52<<7 | 0x19, + 40404 - 19968: jis0212<<14 | 0x4B<<7 | 0x1B, + 40405 - 19968: jis0212<<14 | 0x4B<<7 | 0x1C, + 40406 - 19968: jis0212<<14 | 0x4B<<7 | 0x1D, + 40407 - 19968: jis0212<<14 | 0x4B<<7 | 0x1E, + 40409 - 19968: jis0208<<14 | 0x52<<7 | 0x18, + 40410 - 19968: jis0212<<14 | 0x4B<<7 | 0x1F, + 40414 - 19968: jis0212<<14 | 0x4B<<7 | 0x20, + 40415 - 19968: jis0212<<14 | 0x4B<<7 | 0x21, + 40416 - 19968: jis0212<<14 | 0x4B<<7 | 0x22, + 40421 - 19968: jis0212<<14 | 0x4B<<7 | 0x23, + 40422 - 19968: jis0208<<14 | 0x52<<7 | 0x1B, + 40423 - 19968: jis0212<<14 | 0x4B<<7 | 0x24, + 40425 - 19968: jis0212<<14 | 0x4B<<7 | 0x25, + 40427 - 19968: jis0212<<14 | 0x4B<<7 | 0x26, + 40429 - 19968: jis0208<<14 | 0x52<<7 | 0x1C, + 40430 - 19968: jis0212<<14 | 0x4B<<7 | 0x27, + 40431 - 19968: jis0208<<14 | 0x52<<7 | 0x1D, + 40432 - 19968: jis0212<<14 | 0x4B<<7 | 0x28, + 40434 - 19968: jis0208<<14 | 0x2E<<7 | 0x28, + 40435 - 19968: jis0212<<14 | 0x4B<<7 | 0x29, + 40436 - 19968: jis0212<<14 | 0x4B<<7 | 0x2A, + 40440 - 19968: jis0208<<14 | 0x52<<7 | 0x1A, + 40441 - 19968: jis0208<<14 | 0x21<<7 | 0x4A, + 40442 - 19968: jis0208<<14 | 0x19<<7 | 0x4C, + 40445 - 19968: jis0208<<14 | 0x52<<7 | 0x1E, + 40446 - 19968: jis0212<<14 | 0x4B<<7 | 0x2B, + 40450 - 19968: jis0212<<14 | 0x4B<<7 | 0x2D, + 40455 - 19968: jis0212<<14 | 0x4B<<7 | 0x2E, + 40458 - 19968: jis0212<<14 | 0x4B<<7 | 0x2C, + 40462 - 19968: jis0212<<14 | 0x4B<<7 | 0x2F, + 40464 - 19968: jis0212<<14 | 0x4B<<7 | 0x30, + 40465 - 19968: jis0212<<14 | 0x4B<<7 | 0x31, + 40466 - 19968: jis0212<<14 | 0x4B<<7 | 0x32, + 40469 - 19968: jis0212<<14 | 0x4B<<7 | 0x33, + 40470 - 19968: jis0212<<14 | 0x4B<<7 | 0x34, + 40473 - 19968: jis0208<<14 | 0x5B<<7 | 0x4C, + 40474 - 19968: jis0208<<14 | 0x52<<7 | 0x1F, + 40475 - 19968: jis0208<<14 | 0x52<<7 | 0x20, + 40476 - 19968: jis0212<<14 | 0x4B<<7 | 0x36, + 40477 - 19968: jis0212<<14 | 0x4B<<7 | 0x37, + 40478 - 19968: jis0208<<14 | 0x52<<7 | 0x21, + 40565 - 19968: jis0208<<14 | 0x52<<7 | 0x22, + 40568 - 19968: jis0208<<14 | 0x17<<7 | 0x13, + 40569 - 19968: jis0208<<14 | 0x52<<7 | 0x23, + 40570 - 19968: jis0212<<14 | 0x4B<<7 | 0x38, + 40571 - 19968: jis0212<<14 | 0x4B<<7 | 0x39, + 40572 - 19968: jis0212<<14 | 0x4B<<7 | 0x3A, + 40573 - 19968: jis0208<<14 | 0x52<<7 | 0x24, + 40575 - 19968: jis0208<<14 | 0x1B<<7 | 0x0E, + 40576 - 19968: jis0212<<14 | 0x4B<<7 | 0x3B, + 40577 - 19968: jis0208<<14 | 0x52<<7 | 0x25, + 40578 - 19968: jis0212<<14 | 0x4B<<7 | 0x3C, + 40579 - 19968: jis0212<<14 | 0x4B<<7 | 0x3D, + 40580 - 19968: jis0212<<14 | 0x4B<<7 | 0x3E, + 40581 - 19968: jis0212<<14 | 0x4B<<7 | 0x3F, + 40583 - 19968: jis0212<<14 | 0x4B<<7 | 0x40, + 40584 - 19968: jis0208<<14 | 0x52<<7 | 0x26, + 40587 - 19968: jis0208<<14 | 0x52<<7 | 0x27, + 40588 - 19968: jis0208<<14 | 0x52<<7 | 0x28, + 40590 - 19968: jis0212<<14 | 0x4B<<7 | 0x41, + 40591 - 19968: jis0212<<14 | 0x4B<<7 | 0x42, + 40593 - 19968: jis0208<<14 | 0x52<<7 | 0x2B, + 40594 - 19968: jis0208<<14 | 0x52<<7 | 0x29, + 40595 - 19968: jis0208<<14 | 0x2E<<7 | 0x1B, + 40597 - 19968: jis0208<<14 | 0x52<<7 | 0x2A, + 40598 - 19968: jis0212<<14 | 0x4B<<7 | 0x43, + 40599 - 19968: jis0208<<14 | 0x2D<<7 | 0x4E, + 40600 - 19968: jis0212<<14 | 0x4B<<7 | 0x44, + 40603 - 19968: jis0212<<14 | 0x4B<<7 | 0x45, + 40605 - 19968: jis0208<<14 | 0x52<<7 | 0x2C, + 40606 - 19968: jis0212<<14 | 0x4B<<7 | 0x46, + 40607 - 19968: jis0208<<14 | 0x2D<<7 | 0x3A, + 40612 - 19968: jis0212<<14 | 0x4B<<7 | 0x47, + 40613 - 19968: jis0208<<14 | 0x52<<7 | 0x2D, + 40614 - 19968: jis0208<<14 | 0x26<<7 | 0x5D, + 40616 - 19968: jis0212<<14 | 0x4B<<7 | 0x48, + 40617 - 19968: jis0208<<14 | 0x52<<7 | 0x2E, + 40618 - 19968: jis0208<<14 | 0x52<<7 | 0x30, + 40620 - 19968: jis0212<<14 | 0x4B<<7 | 0x49, + 40621 - 19968: jis0208<<14 | 0x52<<7 | 0x31, + 40622 - 19968: jis0212<<14 | 0x4B<<7 | 0x4A, + 40623 - 19968: jis0212<<14 | 0x4B<<7 | 0x4B, + 40624 - 19968: jis0212<<14 | 0x4B<<7 | 0x4C, + 40627 - 19968: jis0212<<14 | 0x4B<<7 | 0x4D, + 40628 - 19968: jis0212<<14 | 0x4B<<7 | 0x4E, + 40629 - 19968: jis0212<<14 | 0x4B<<7 | 0x4F, + 40632 - 19968: jis0208<<14 | 0x52<<7 | 0x2F, + 40633 - 19968: jis0208<<14 | 0x18<<7 | 0x4C, + 40634 - 19968: jis0208<<14 | 0x2B<<7 | 0x2C, + 40635 - 19968: jis0208<<14 | 0x2A<<7 | 0x42, + 40636 - 19968: jis0208<<14 | 0x35<<7 | 0x56, + 40638 - 19968: jis0208<<14 | 0x3C<<7 | 0x3F, + 40639 - 19968: jis0208<<14 | 0x2A<<7 | 0x5A, + 40644 - 19968: jis0208<<14 | 0x11<<7 | 0x0A, + 40646 - 19968: jis0212<<14 | 0x4B<<7 | 0x50, + 40648 - 19968: jis0212<<14 | 0x4B<<7 | 0x51, + 40651 - 19968: jis0212<<14 | 0x4B<<7 | 0x52, + 40652 - 19968: jis0208<<14 | 0x52<<7 | 0x33, + 40653 - 19968: jis0208<<14 | 0x14<<7 | 0x2F, + 40654 - 19968: jis0208<<14 | 0x52<<7 | 0x34, + 40655 - 19968: jis0208<<14 | 0x52<<7 | 0x35, + 40656 - 19968: jis0208<<14 | 0x52<<7 | 0x36, + 40657 - 19968: jis0208<<14 | 0x5B<<7 | 0x4D, + 40658 - 19968: jis0208<<14 | 0x18<<7 | 0x54, + 40660 - 19968: jis0208<<14 | 0x52<<7 | 0x37, + 40661 - 19968: jis0212<<14 | 0x4B<<7 | 0x53, + 40664 - 19968: jis0208<<14 | 0x3F<<7 | 0x33, + 40665 - 19968: jis0208<<14 | 0x2B<<7 | 0x3A, + 40667 - 19968: jis0208<<14 | 0x21<<7 | 0x42, + 40668 - 19968: jis0208<<14 | 0x52<<7 | 0x38, + 40669 - 19968: jis0208<<14 | 0x52<<7 | 0x3A, + 40670 - 19968: jis0208<<14 | 0x52<<7 | 0x39, + 40671 - 19968: jis0212<<14 | 0x4B<<7 | 0x54, + 40672 - 19968: jis0208<<14 | 0x52<<7 | 0x3B, + 40676 - 19968: jis0212<<14 | 0x4B<<7 | 0x55, + 40677 - 19968: jis0208<<14 | 0x52<<7 | 0x3C, + 40679 - 19968: jis0212<<14 | 0x4B<<7 | 0x56, + 40680 - 19968: jis0208<<14 | 0x52<<7 | 0x3D, + 40684 - 19968: jis0212<<14 | 0x4B<<7 | 0x57, + 40685 - 19968: jis0212<<14 | 0x4B<<7 | 0x58, + 40686 - 19968: jis0212<<14 | 0x4B<<7 | 0x59, + 40687 - 19968: jis0208<<14 | 0x52<<7 | 0x3E, + 40688 - 19968: jis0212<<14 | 0x4B<<7 | 0x5A, + 40689 - 19968: jis0212<<14 | 0x4B<<7 | 0x5B, + 40690 - 19968: jis0212<<14 | 0x4B<<7 | 0x5C, + 40692 - 19968: jis0208<<14 | 0x52<<7 | 0x3F, + 40693 - 19968: jis0212<<14 | 0x4B<<7 | 0x5D, + 40694 - 19968: jis0208<<14 | 0x52<<7 | 0x40, + 40695 - 19968: jis0208<<14 | 0x52<<7 | 0x41, + 40696 - 19968: jis0212<<14 | 0x4C<<7 | 0x00, + 40697 - 19968: jis0208<<14 | 0x52<<7 | 0x42, + 40699 - 19968: jis0208<<14 | 0x52<<7 | 0x43, + 40700 - 19968: jis0208<<14 | 0x52<<7 | 0x44, + 40701 - 19968: jis0208<<14 | 0x52<<7 | 0x45, + 40703 - 19968: jis0212<<14 | 0x4C<<7 | 0x01, + 40706 - 19968: jis0212<<14 | 0x4C<<7 | 0x02, + 40707 - 19968: jis0212<<14 | 0x4C<<7 | 0x03, + 40711 - 19968: jis0208<<14 | 0x52<<7 | 0x46, + 40712 - 19968: jis0208<<14 | 0x52<<7 | 0x47, + 40713 - 19968: jis0212<<14 | 0x4C<<7 | 0x04, + 40718 - 19968: jis0208<<14 | 0x24<<7 | 0x03, + 40719 - 19968: jis0212<<14 | 0x4C<<7 | 0x05, + 40720 - 19968: jis0212<<14 | 0x4C<<7 | 0x06, + 40721 - 19968: jis0212<<14 | 0x4C<<7 | 0x07, + 40722 - 19968: jis0212<<14 | 0x4C<<7 | 0x08, + 40723 - 19968: jis0208<<14 | 0x17<<7 | 0x3C, + 40724 - 19968: jis0212<<14 | 0x4C<<7 | 0x09, + 40725 - 19968: jis0208<<14 | 0x52<<7 | 0x49, + 40726 - 19968: jis0212<<14 | 0x4C<<7 | 0x0A, + 40727 - 19968: jis0212<<14 | 0x4C<<7 | 0x0B, + 40729 - 19968: jis0212<<14 | 0x4C<<7 | 0x0C, + 40730 - 19968: jis0212<<14 | 0x4C<<7 | 0x0D, + 40731 - 19968: jis0212<<14 | 0x4C<<7 | 0x0E, + 40735 - 19968: jis0212<<14 | 0x4C<<7 | 0x0F, + 40736 - 19968: jis0208<<14 | 0x20<<7 | 0x2C, + 40737 - 19968: jis0208<<14 | 0x52<<7 | 0x4A, + 40738 - 19968: jis0212<<14 | 0x4C<<7 | 0x10, + 40742 - 19968: jis0212<<14 | 0x4C<<7 | 0x11, + 40746 - 19968: jis0212<<14 | 0x4C<<7 | 0x12, + 40747 - 19968: jis0212<<14 | 0x4C<<7 | 0x13, + 40748 - 19968: jis0208<<14 | 0x52<<7 | 0x4B, + 40751 - 19968: jis0212<<14 | 0x4C<<7 | 0x14, + 40753 - 19968: jis0212<<14 | 0x4C<<7 | 0x15, + 40754 - 19968: jis0212<<14 | 0x4C<<7 | 0x16, + 40756 - 19968: jis0212<<14 | 0x4C<<7 | 0x17, + 40759 - 19968: jis0212<<14 | 0x4C<<7 | 0x18, + 40761 - 19968: jis0212<<14 | 0x4C<<7 | 0x19, + 40762 - 19968: jis0212<<14 | 0x4C<<7 | 0x1A, + 40763 - 19968: jis0208<<14 | 0x28<<7 | 0x00, + 40764 - 19968: jis0212<<14 | 0x4C<<7 | 0x1B, + 40765 - 19968: jis0212<<14 | 0x4C<<7 | 0x1C, + 40766 - 19968: jis0208<<14 | 0x52<<7 | 0x4C, + 40767 - 19968: jis0212<<14 | 0x4C<<7 | 0x1D, + 40769 - 19968: jis0212<<14 | 0x4C<<7 | 0x1E, + 40771 - 19968: jis0212<<14 | 0x4C<<7 | 0x1F, + 40772 - 19968: jis0212<<14 | 0x4C<<7 | 0x20, + 40773 - 19968: jis0212<<14 | 0x4C<<7 | 0x21, + 40774 - 19968: jis0212<<14 | 0x4C<<7 | 0x22, + 40775 - 19968: jis0212<<14 | 0x4C<<7 | 0x23, + 40778 - 19968: jis0208<<14 | 0x52<<7 | 0x4D, + 40779 - 19968: jis0208<<14 | 0x42<<7 | 0x16, + 40782 - 19968: jis0208<<14 | 0x4B<<7 | 0x39, + 40783 - 19968: jis0208<<14 | 0x4F<<7 | 0x4C, + 40786 - 19968: jis0208<<14 | 0x52<<7 | 0x4E, + 40787 - 19968: jis0212<<14 | 0x4C<<7 | 0x24, + 40788 - 19968: jis0208<<14 | 0x52<<7 | 0x4F, + 40789 - 19968: jis0212<<14 | 0x4C<<7 | 0x25, + 40790 - 19968: jis0212<<14 | 0x4C<<7 | 0x26, + 40791 - 19968: jis0212<<14 | 0x4C<<7 | 0x27, + 40792 - 19968: jis0212<<14 | 0x4C<<7 | 0x28, + 40794 - 19968: jis0212<<14 | 0x4C<<7 | 0x29, + 40797 - 19968: jis0212<<14 | 0x4C<<7 | 0x2A, + 40798 - 19968: jis0212<<14 | 0x4C<<7 | 0x2B, + 40799 - 19968: jis0208<<14 | 0x52<<7 | 0x51, + 40800 - 19968: jis0208<<14 | 0x52<<7 | 0x52, + 40801 - 19968: jis0208<<14 | 0x52<<7 | 0x53, + 40802 - 19968: jis0208<<14 | 0x2D<<7 | 0x4F, + 40803 - 19968: jis0208<<14 | 0x52<<7 | 0x50, + 40806 - 19968: jis0208<<14 | 0x52<<7 | 0x54, + 40807 - 19968: jis0208<<14 | 0x52<<7 | 0x55, + 40808 - 19968: jis0212<<14 | 0x4C<<7 | 0x2C, + 40809 - 19968: jis0212<<14 | 0x4C<<7 | 0x2D, + 40810 - 19968: jis0208<<14 | 0x52<<7 | 0x57, + 40812 - 19968: jis0208<<14 | 0x52<<7 | 0x56, + 40813 - 19968: jis0212<<14 | 0x4C<<7 | 0x2E, + 40814 - 19968: jis0212<<14 | 0x4C<<7 | 0x2F, + 40815 - 19968: jis0212<<14 | 0x4C<<7 | 0x30, + 40816 - 19968: jis0212<<14 | 0x4C<<7 | 0x31, + 40817 - 19968: jis0212<<14 | 0x4C<<7 | 0x32, + 40818 - 19968: jis0208<<14 | 0x52<<7 | 0x59, + 40819 - 19968: jis0212<<14 | 0x4C<<7 | 0x33, + 40821 - 19968: jis0212<<14 | 0x4C<<7 | 0x34, + 40822 - 19968: jis0208<<14 | 0x52<<7 | 0x5A, + 40823 - 19968: jis0208<<14 | 0x52<<7 | 0x58, + 40826 - 19968: jis0212<<14 | 0x4C<<7 | 0x35, + 40829 - 19968: jis0212<<14 | 0x4C<<7 | 0x36, + 40845 - 19968: jis0208<<14 | 0x2D<<7 | 0x15, + 40847 - 19968: jis0212<<14 | 0x4C<<7 | 0x37, + 40848 - 19968: jis0212<<14 | 0x4C<<7 | 0x38, + 40849 - 19968: jis0212<<14 | 0x4C<<7 | 0x39, + 40850 - 19968: jis0212<<14 | 0x4C<<7 | 0x3A, + 40852 - 19968: jis0212<<14 | 0x4C<<7 | 0x3B, + 40853 - 19968: jis0208<<14 | 0x52<<7 | 0x5B, + 40854 - 19968: jis0212<<14 | 0x4C<<7 | 0x3C, + 40855 - 19968: jis0212<<14 | 0x4C<<7 | 0x3D, + 40860 - 19968: jis0208<<14 | 0x52<<7 | 0x5C, + 40861 - 19968: jis0208<<14 | 0x42<<7 | 0x33, + 40862 - 19968: jis0212<<14 | 0x4C<<7 | 0x3E, + 40864 - 19968: jis0208<<14 | 0x52<<7 | 0x5D, + 40865 - 19968: jis0212<<14 | 0x4C<<7 | 0x3F, + 40866 - 19968: jis0212<<14 | 0x4C<<7 | 0x40, + 40867 - 19968: jis0212<<14 | 0x4C<<7 | 0x41, + 40869 - 19968: jis0212<<14 | 0x4C<<7 | 0x42, +} + +const encode1Low, encode1High = 8208, 9840 + +var encode1 = [...]uint16{ + 8208 - 8208: jis0208<<14 | 0x00<<7 | 0x1D, + 8213 - 8208: jis0208<<14 | 0x00<<7 | 0x1C, + 8216 - 8208: jis0208<<14 | 0x00<<7 | 0x25, + 8217 - 8208: jis0208<<14 | 0x00<<7 | 0x26, + 8220 - 8208: jis0208<<14 | 0x00<<7 | 0x27, + 8221 - 8208: jis0208<<14 | 0x00<<7 | 0x28, + 8224 - 8208: jis0208<<14 | 0x01<<7 | 0x56, + 8225 - 8208: jis0208<<14 | 0x01<<7 | 0x57, + 8229 - 8208: jis0208<<14 | 0x00<<7 | 0x24, + 8230 - 8208: jis0208<<14 | 0x00<<7 | 0x23, + 8240 - 8208: jis0208<<14 | 0x01<<7 | 0x52, + 8242 - 8208: jis0208<<14 | 0x00<<7 | 0x4B, + 8243 - 8208: jis0208<<14 | 0x00<<7 | 0x4C, + 8251 - 8208: jis0208<<14 | 0x01<<7 | 0x07, + 8451 - 8208: jis0208<<14 | 0x00<<7 | 0x4D, + 8470 - 8208: jis0208<<14 | 0x0C<<7 | 0x41, + 8481 - 8208: jis0208<<14 | 0x0C<<7 | 0x43, + 8482 - 8208: jis0212<<14 | 0x01<<7 | 0x4E, + 8491 - 8208: jis0208<<14 | 0x01<<7 | 0x51, + 8544 - 8208: jis0208<<14 | 0x0C<<7 | 0x14, + 8545 - 8208: jis0208<<14 | 0x0C<<7 | 0x15, + 8546 - 8208: jis0208<<14 | 0x0C<<7 | 0x16, + 8547 - 8208: jis0208<<14 | 0x0C<<7 | 0x17, + 8548 - 8208: jis0208<<14 | 0x0C<<7 | 0x18, + 8549 - 8208: jis0208<<14 | 0x0C<<7 | 0x19, + 8550 - 8208: jis0208<<14 | 0x0C<<7 | 0x1A, + 8551 - 8208: jis0208<<14 | 0x0C<<7 | 0x1B, + 8552 - 8208: jis0208<<14 | 0x0C<<7 | 0x1C, + 8553 - 8208: jis0208<<14 | 0x0C<<7 | 0x1D, + 8560 - 8208: jis0208<<14 | 0x5B<<7 | 0x50, + 8561 - 8208: jis0208<<14 | 0x5B<<7 | 0x51, + 8562 - 8208: jis0208<<14 | 0x5B<<7 | 0x52, + 8563 - 8208: jis0208<<14 | 0x5B<<7 | 0x53, + 8564 - 8208: jis0208<<14 | 0x5B<<7 | 0x54, + 8565 - 8208: jis0208<<14 | 0x5B<<7 | 0x55, + 8566 - 8208: jis0208<<14 | 0x5B<<7 | 0x56, + 8567 - 8208: jis0208<<14 | 0x5B<<7 | 0x57, + 8568 - 8208: jis0208<<14 | 0x5B<<7 | 0x58, + 8569 - 8208: jis0208<<14 | 0x5B<<7 | 0x59, + 8592 - 8208: jis0208<<14 | 0x01<<7 | 0x0A, + 8593 - 8208: jis0208<<14 | 0x01<<7 | 0x0B, + 8594 - 8208: jis0208<<14 | 0x01<<7 | 0x09, + 8595 - 8208: jis0208<<14 | 0x01<<7 | 0x0C, + 8658 - 8208: jis0208<<14 | 0x01<<7 | 0x2C, + 8660 - 8208: jis0208<<14 | 0x01<<7 | 0x2D, + 8704 - 8208: jis0208<<14 | 0x01<<7 | 0x2E, + 8706 - 8208: jis0208<<14 | 0x01<<7 | 0x3E, + 8707 - 8208: jis0208<<14 | 0x01<<7 | 0x2F, + 8711 - 8208: jis0208<<14 | 0x01<<7 | 0x3F, + 8712 - 8208: jis0208<<14 | 0x01<<7 | 0x19, + 8715 - 8208: jis0208<<14 | 0x01<<7 | 0x1A, + 8721 - 8208: jis0208<<14 | 0x0C<<7 | 0x53, + 8730 - 8208: jis0208<<14 | 0x01<<7 | 0x44, + 8733 - 8208: jis0208<<14 | 0x01<<7 | 0x46, + 8734 - 8208: jis0208<<14 | 0x00<<7 | 0x46, + 8735 - 8208: jis0208<<14 | 0x0C<<7 | 0x57, + 8736 - 8208: jis0208<<14 | 0x01<<7 | 0x3B, + 8741 - 8208: jis0208<<14 | 0x00<<7 | 0x21, + 8743 - 8208: jis0208<<14 | 0x01<<7 | 0x29, + 8744 - 8208: jis0208<<14 | 0x01<<7 | 0x2A, + 8745 - 8208: jis0208<<14 | 0x01<<7 | 0x20, + 8746 - 8208: jis0208<<14 | 0x01<<7 | 0x1F, + 8747 - 8208: jis0208<<14 | 0x01<<7 | 0x48, + 8748 - 8208: jis0208<<14 | 0x01<<7 | 0x49, + 8750 - 8208: jis0208<<14 | 0x0C<<7 | 0x52, + 8756 - 8208: jis0208<<14 | 0x00<<7 | 0x47, + 8757 - 8208: jis0208<<14 | 0x01<<7 | 0x47, + 8765 - 8208: jis0208<<14 | 0x01<<7 | 0x45, + 8786 - 8208: jis0208<<14 | 0x01<<7 | 0x41, + 8800 - 8208: jis0208<<14 | 0x00<<7 | 0x41, + 8801 - 8208: jis0208<<14 | 0x01<<7 | 0x40, + 8806 - 8208: jis0208<<14 | 0x00<<7 | 0x44, + 8807 - 8208: jis0208<<14 | 0x00<<7 | 0x45, + 8810 - 8208: jis0208<<14 | 0x01<<7 | 0x42, + 8811 - 8208: jis0208<<14 | 0x01<<7 | 0x43, + 8834 - 8208: jis0208<<14 | 0x01<<7 | 0x1D, + 8835 - 8208: jis0208<<14 | 0x01<<7 | 0x1E, + 8838 - 8208: jis0208<<14 | 0x01<<7 | 0x1B, + 8839 - 8208: jis0208<<14 | 0x01<<7 | 0x1C, + 8869 - 8208: jis0208<<14 | 0x01<<7 | 0x3C, + 8895 - 8208: jis0208<<14 | 0x0C<<7 | 0x58, + 8978 - 8208: jis0208<<14 | 0x01<<7 | 0x3D, + 9312 - 8208: jis0208<<14 | 0x0C<<7 | 0x00, + 9313 - 8208: jis0208<<14 | 0x0C<<7 | 0x01, + 9314 - 8208: jis0208<<14 | 0x0C<<7 | 0x02, + 9315 - 8208: jis0208<<14 | 0x0C<<7 | 0x03, + 9316 - 8208: jis0208<<14 | 0x0C<<7 | 0x04, + 9317 - 8208: jis0208<<14 | 0x0C<<7 | 0x05, + 9318 - 8208: jis0208<<14 | 0x0C<<7 | 0x06, + 9319 - 8208: jis0208<<14 | 0x0C<<7 | 0x07, + 9320 - 8208: jis0208<<14 | 0x0C<<7 | 0x08, + 9321 - 8208: jis0208<<14 | 0x0C<<7 | 0x09, + 9322 - 8208: jis0208<<14 | 0x0C<<7 | 0x0A, + 9323 - 8208: jis0208<<14 | 0x0C<<7 | 0x0B, + 9324 - 8208: jis0208<<14 | 0x0C<<7 | 0x0C, + 9325 - 8208: jis0208<<14 | 0x0C<<7 | 0x0D, + 9326 - 8208: jis0208<<14 | 0x0C<<7 | 0x0E, + 9327 - 8208: jis0208<<14 | 0x0C<<7 | 0x0F, + 9328 - 8208: jis0208<<14 | 0x0C<<7 | 0x10, + 9329 - 8208: jis0208<<14 | 0x0C<<7 | 0x11, + 9330 - 8208: jis0208<<14 | 0x0C<<7 | 0x12, + 9331 - 8208: jis0208<<14 | 0x0C<<7 | 0x13, + 9472 - 8208: jis0208<<14 | 0x07<<7 | 0x00, + 9473 - 8208: jis0208<<14 | 0x07<<7 | 0x0B, + 9474 - 8208: jis0208<<14 | 0x07<<7 | 0x01, + 9475 - 8208: jis0208<<14 | 0x07<<7 | 0x0C, + 9484 - 8208: jis0208<<14 | 0x07<<7 | 0x02, + 9487 - 8208: jis0208<<14 | 0x07<<7 | 0x0D, + 9488 - 8208: jis0208<<14 | 0x07<<7 | 0x03, + 9491 - 8208: jis0208<<14 | 0x07<<7 | 0x0E, + 9492 - 8208: jis0208<<14 | 0x07<<7 | 0x05, + 9495 - 8208: jis0208<<14 | 0x07<<7 | 0x10, + 9496 - 8208: jis0208<<14 | 0x07<<7 | 0x04, + 9499 - 8208: jis0208<<14 | 0x07<<7 | 0x0F, + 9500 - 8208: jis0208<<14 | 0x07<<7 | 0x06, + 9501 - 8208: jis0208<<14 | 0x07<<7 | 0x1B, + 9504 - 8208: jis0208<<14 | 0x07<<7 | 0x16, + 9507 - 8208: jis0208<<14 | 0x07<<7 | 0x11, + 9508 - 8208: jis0208<<14 | 0x07<<7 | 0x08, + 9509 - 8208: jis0208<<14 | 0x07<<7 | 0x1D, + 9512 - 8208: jis0208<<14 | 0x07<<7 | 0x18, + 9515 - 8208: jis0208<<14 | 0x07<<7 | 0x13, + 9516 - 8208: jis0208<<14 | 0x07<<7 | 0x07, + 9519 - 8208: jis0208<<14 | 0x07<<7 | 0x17, + 9520 - 8208: jis0208<<14 | 0x07<<7 | 0x1C, + 9523 - 8208: jis0208<<14 | 0x07<<7 | 0x12, + 9524 - 8208: jis0208<<14 | 0x07<<7 | 0x09, + 9527 - 8208: jis0208<<14 | 0x07<<7 | 0x19, + 9528 - 8208: jis0208<<14 | 0x07<<7 | 0x1E, + 9531 - 8208: jis0208<<14 | 0x07<<7 | 0x14, + 9532 - 8208: jis0208<<14 | 0x07<<7 | 0x0A, + 9535 - 8208: jis0208<<14 | 0x07<<7 | 0x1A, + 9538 - 8208: jis0208<<14 | 0x07<<7 | 0x1F, + 9547 - 8208: jis0208<<14 | 0x07<<7 | 0x15, + 9632 - 8208: jis0208<<14 | 0x01<<7 | 0x02, + 9633 - 8208: jis0208<<14 | 0x01<<7 | 0x01, + 9650 - 8208: jis0208<<14 | 0x01<<7 | 0x04, + 9651 - 8208: jis0208<<14 | 0x01<<7 | 0x03, + 9660 - 8208: jis0208<<14 | 0x01<<7 | 0x06, + 9661 - 8208: jis0208<<14 | 0x01<<7 | 0x05, + 9670 - 8208: jis0208<<14 | 0x01<<7 | 0x00, + 9671 - 8208: jis0208<<14 | 0x00<<7 | 0x5D, + 9675 - 8208: jis0208<<14 | 0x00<<7 | 0x5A, + 9678 - 8208: jis0208<<14 | 0x00<<7 | 0x5C, + 9679 - 8208: jis0208<<14 | 0x00<<7 | 0x5B, + 9711 - 8208: jis0208<<14 | 0x01<<7 | 0x5D, + 9733 - 8208: jis0208<<14 | 0x00<<7 | 0x59, + 9734 - 8208: jis0208<<14 | 0x00<<7 | 0x58, + 9792 - 8208: jis0208<<14 | 0x00<<7 | 0x49, + 9794 - 8208: jis0208<<14 | 0x00<<7 | 0x48, + 9834 - 8208: jis0208<<14 | 0x01<<7 | 0x55, + 9837 - 8208: jis0208<<14 | 0x01<<7 | 0x54, + 9839 - 8208: jis0208<<14 | 0x01<<7 | 0x53, +} + +const encode2Low, encode2High = 12288, 13262 + +var encode2 = [...]uint16{ + 12288 - 12288: jis0208<<14 | 0x00<<7 | 0x00, + 12289 - 12288: jis0208<<14 | 0x00<<7 | 0x01, + 12290 - 12288: jis0208<<14 | 0x00<<7 | 0x02, + 12291 - 12288: jis0208<<14 | 0x00<<7 | 0x16, + 12293 - 12288: jis0208<<14 | 0x00<<7 | 0x18, + 12294 - 12288: jis0208<<14 | 0x00<<7 | 0x19, + 12295 - 12288: jis0208<<14 | 0x00<<7 | 0x1A, + 12296 - 12288: jis0208<<14 | 0x00<<7 | 0x31, + 12297 - 12288: jis0208<<14 | 0x00<<7 | 0x32, + 12298 - 12288: jis0208<<14 | 0x00<<7 | 0x33, + 12299 - 12288: jis0208<<14 | 0x00<<7 | 0x34, + 12300 - 12288: jis0208<<14 | 0x00<<7 | 0x35, + 12301 - 12288: jis0208<<14 | 0x00<<7 | 0x36, + 12302 - 12288: jis0208<<14 | 0x00<<7 | 0x37, + 12303 - 12288: jis0208<<14 | 0x00<<7 | 0x38, + 12304 - 12288: jis0208<<14 | 0x00<<7 | 0x39, + 12305 - 12288: jis0208<<14 | 0x00<<7 | 0x3A, + 12306 - 12288: jis0208<<14 | 0x01<<7 | 0x08, + 12307 - 12288: jis0208<<14 | 0x01<<7 | 0x0D, + 12308 - 12288: jis0208<<14 | 0x00<<7 | 0x2B, + 12309 - 12288: jis0208<<14 | 0x00<<7 | 0x2C, + 12317 - 12288: jis0208<<14 | 0x0C<<7 | 0x3F, + 12319 - 12288: jis0208<<14 | 0x0C<<7 | 0x40, + 12353 - 12288: jis0208<<14 | 0x03<<7 | 0x00, + 12354 - 12288: jis0208<<14 | 0x03<<7 | 0x01, + 12355 - 12288: jis0208<<14 | 0x03<<7 | 0x02, + 12356 - 12288: jis0208<<14 | 0x03<<7 | 0x03, + 12357 - 12288: jis0208<<14 | 0x03<<7 | 0x04, + 12358 - 12288: jis0208<<14 | 0x03<<7 | 0x05, + 12359 - 12288: jis0208<<14 | 0x03<<7 | 0x06, + 12360 - 12288: jis0208<<14 | 0x03<<7 | 0x07, + 12361 - 12288: jis0208<<14 | 0x03<<7 | 0x08, + 12362 - 12288: jis0208<<14 | 0x03<<7 | 0x09, + 12363 - 12288: jis0208<<14 | 0x03<<7 | 0x0A, + 12364 - 12288: jis0208<<14 | 0x03<<7 | 0x0B, + 12365 - 12288: jis0208<<14 | 0x03<<7 | 0x0C, + 12366 - 12288: jis0208<<14 | 0x03<<7 | 0x0D, + 12367 - 12288: jis0208<<14 | 0x03<<7 | 0x0E, + 12368 - 12288: jis0208<<14 | 0x03<<7 | 0x0F, + 12369 - 12288: jis0208<<14 | 0x03<<7 | 0x10, + 12370 - 12288: jis0208<<14 | 0x03<<7 | 0x11, + 12371 - 12288: jis0208<<14 | 0x03<<7 | 0x12, + 12372 - 12288: jis0208<<14 | 0x03<<7 | 0x13, + 12373 - 12288: jis0208<<14 | 0x03<<7 | 0x14, + 12374 - 12288: jis0208<<14 | 0x03<<7 | 0x15, + 12375 - 12288: jis0208<<14 | 0x03<<7 | 0x16, + 12376 - 12288: jis0208<<14 | 0x03<<7 | 0x17, + 12377 - 12288: jis0208<<14 | 0x03<<7 | 0x18, + 12378 - 12288: jis0208<<14 | 0x03<<7 | 0x19, + 12379 - 12288: jis0208<<14 | 0x03<<7 | 0x1A, + 12380 - 12288: jis0208<<14 | 0x03<<7 | 0x1B, + 12381 - 12288: jis0208<<14 | 0x03<<7 | 0x1C, + 12382 - 12288: jis0208<<14 | 0x03<<7 | 0x1D, + 12383 - 12288: jis0208<<14 | 0x03<<7 | 0x1E, + 12384 - 12288: jis0208<<14 | 0x03<<7 | 0x1F, + 12385 - 12288: jis0208<<14 | 0x03<<7 | 0x20, + 12386 - 12288: jis0208<<14 | 0x03<<7 | 0x21, + 12387 - 12288: jis0208<<14 | 0x03<<7 | 0x22, + 12388 - 12288: jis0208<<14 | 0x03<<7 | 0x23, + 12389 - 12288: jis0208<<14 | 0x03<<7 | 0x24, + 12390 - 12288: jis0208<<14 | 0x03<<7 | 0x25, + 12391 - 12288: jis0208<<14 | 0x03<<7 | 0x26, + 12392 - 12288: jis0208<<14 | 0x03<<7 | 0x27, + 12393 - 12288: jis0208<<14 | 0x03<<7 | 0x28, + 12394 - 12288: jis0208<<14 | 0x03<<7 | 0x29, + 12395 - 12288: jis0208<<14 | 0x03<<7 | 0x2A, + 12396 - 12288: jis0208<<14 | 0x03<<7 | 0x2B, + 12397 - 12288: jis0208<<14 | 0x03<<7 | 0x2C, + 12398 - 12288: jis0208<<14 | 0x03<<7 | 0x2D, + 12399 - 12288: jis0208<<14 | 0x03<<7 | 0x2E, + 12400 - 12288: jis0208<<14 | 0x03<<7 | 0x2F, + 12401 - 12288: jis0208<<14 | 0x03<<7 | 0x30, + 12402 - 12288: jis0208<<14 | 0x03<<7 | 0x31, + 12403 - 12288: jis0208<<14 | 0x03<<7 | 0x32, + 12404 - 12288: jis0208<<14 | 0x03<<7 | 0x33, + 12405 - 12288: jis0208<<14 | 0x03<<7 | 0x34, + 12406 - 12288: jis0208<<14 | 0x03<<7 | 0x35, + 12407 - 12288: jis0208<<14 | 0x03<<7 | 0x36, + 12408 - 12288: jis0208<<14 | 0x03<<7 | 0x37, + 12409 - 12288: jis0208<<14 | 0x03<<7 | 0x38, + 12410 - 12288: jis0208<<14 | 0x03<<7 | 0x39, + 12411 - 12288: jis0208<<14 | 0x03<<7 | 0x3A, + 12412 - 12288: jis0208<<14 | 0x03<<7 | 0x3B, + 12413 - 12288: jis0208<<14 | 0x03<<7 | 0x3C, + 12414 - 12288: jis0208<<14 | 0x03<<7 | 0x3D, + 12415 - 12288: jis0208<<14 | 0x03<<7 | 0x3E, + 12416 - 12288: jis0208<<14 | 0x03<<7 | 0x3F, + 12417 - 12288: jis0208<<14 | 0x03<<7 | 0x40, + 12418 - 12288: jis0208<<14 | 0x03<<7 | 0x41, + 12419 - 12288: jis0208<<14 | 0x03<<7 | 0x42, + 12420 - 12288: jis0208<<14 | 0x03<<7 | 0x43, + 12421 - 12288: jis0208<<14 | 0x03<<7 | 0x44, + 12422 - 12288: jis0208<<14 | 0x03<<7 | 0x45, + 12423 - 12288: jis0208<<14 | 0x03<<7 | 0x46, + 12424 - 12288: jis0208<<14 | 0x03<<7 | 0x47, + 12425 - 12288: jis0208<<14 | 0x03<<7 | 0x48, + 12426 - 12288: jis0208<<14 | 0x03<<7 | 0x49, + 12427 - 12288: jis0208<<14 | 0x03<<7 | 0x4A, + 12428 - 12288: jis0208<<14 | 0x03<<7 | 0x4B, + 12429 - 12288: jis0208<<14 | 0x03<<7 | 0x4C, + 12430 - 12288: jis0208<<14 | 0x03<<7 | 0x4D, + 12431 - 12288: jis0208<<14 | 0x03<<7 | 0x4E, + 12432 - 12288: jis0208<<14 | 0x03<<7 | 0x4F, + 12433 - 12288: jis0208<<14 | 0x03<<7 | 0x50, + 12434 - 12288: jis0208<<14 | 0x03<<7 | 0x51, + 12435 - 12288: jis0208<<14 | 0x03<<7 | 0x52, + 12443 - 12288: jis0208<<14 | 0x00<<7 | 0x0A, + 12444 - 12288: jis0208<<14 | 0x00<<7 | 0x0B, + 12445 - 12288: jis0208<<14 | 0x00<<7 | 0x14, + 12446 - 12288: jis0208<<14 | 0x00<<7 | 0x15, + 12449 - 12288: jis0208<<14 | 0x04<<7 | 0x00, + 12450 - 12288: jis0208<<14 | 0x04<<7 | 0x01, + 12451 - 12288: jis0208<<14 | 0x04<<7 | 0x02, + 12452 - 12288: jis0208<<14 | 0x04<<7 | 0x03, + 12453 - 12288: jis0208<<14 | 0x04<<7 | 0x04, + 12454 - 12288: jis0208<<14 | 0x04<<7 | 0x05, + 12455 - 12288: jis0208<<14 | 0x04<<7 | 0x06, + 12456 - 12288: jis0208<<14 | 0x04<<7 | 0x07, + 12457 - 12288: jis0208<<14 | 0x04<<7 | 0x08, + 12458 - 12288: jis0208<<14 | 0x04<<7 | 0x09, + 12459 - 12288: jis0208<<14 | 0x04<<7 | 0x0A, + 12460 - 12288: jis0208<<14 | 0x04<<7 | 0x0B, + 12461 - 12288: jis0208<<14 | 0x04<<7 | 0x0C, + 12462 - 12288: jis0208<<14 | 0x04<<7 | 0x0D, + 12463 - 12288: jis0208<<14 | 0x04<<7 | 0x0E, + 12464 - 12288: jis0208<<14 | 0x04<<7 | 0x0F, + 12465 - 12288: jis0208<<14 | 0x04<<7 | 0x10, + 12466 - 12288: jis0208<<14 | 0x04<<7 | 0x11, + 12467 - 12288: jis0208<<14 | 0x04<<7 | 0x12, + 12468 - 12288: jis0208<<14 | 0x04<<7 | 0x13, + 12469 - 12288: jis0208<<14 | 0x04<<7 | 0x14, + 12470 - 12288: jis0208<<14 | 0x04<<7 | 0x15, + 12471 - 12288: jis0208<<14 | 0x04<<7 | 0x16, + 12472 - 12288: jis0208<<14 | 0x04<<7 | 0x17, + 12473 - 12288: jis0208<<14 | 0x04<<7 | 0x18, + 12474 - 12288: jis0208<<14 | 0x04<<7 | 0x19, + 12475 - 12288: jis0208<<14 | 0x04<<7 | 0x1A, + 12476 - 12288: jis0208<<14 | 0x04<<7 | 0x1B, + 12477 - 12288: jis0208<<14 | 0x04<<7 | 0x1C, + 12478 - 12288: jis0208<<14 | 0x04<<7 | 0x1D, + 12479 - 12288: jis0208<<14 | 0x04<<7 | 0x1E, + 12480 - 12288: jis0208<<14 | 0x04<<7 | 0x1F, + 12481 - 12288: jis0208<<14 | 0x04<<7 | 0x20, + 12482 - 12288: jis0208<<14 | 0x04<<7 | 0x21, + 12483 - 12288: jis0208<<14 | 0x04<<7 | 0x22, + 12484 - 12288: jis0208<<14 | 0x04<<7 | 0x23, + 12485 - 12288: jis0208<<14 | 0x04<<7 | 0x24, + 12486 - 12288: jis0208<<14 | 0x04<<7 | 0x25, + 12487 - 12288: jis0208<<14 | 0x04<<7 | 0x26, + 12488 - 12288: jis0208<<14 | 0x04<<7 | 0x27, + 12489 - 12288: jis0208<<14 | 0x04<<7 | 0x28, + 12490 - 12288: jis0208<<14 | 0x04<<7 | 0x29, + 12491 - 12288: jis0208<<14 | 0x04<<7 | 0x2A, + 12492 - 12288: jis0208<<14 | 0x04<<7 | 0x2B, + 12493 - 12288: jis0208<<14 | 0x04<<7 | 0x2C, + 12494 - 12288: jis0208<<14 | 0x04<<7 | 0x2D, + 12495 - 12288: jis0208<<14 | 0x04<<7 | 0x2E, + 12496 - 12288: jis0208<<14 | 0x04<<7 | 0x2F, + 12497 - 12288: jis0208<<14 | 0x04<<7 | 0x30, + 12498 - 12288: jis0208<<14 | 0x04<<7 | 0x31, + 12499 - 12288: jis0208<<14 | 0x04<<7 | 0x32, + 12500 - 12288: jis0208<<14 | 0x04<<7 | 0x33, + 12501 - 12288: jis0208<<14 | 0x04<<7 | 0x34, + 12502 - 12288: jis0208<<14 | 0x04<<7 | 0x35, + 12503 - 12288: jis0208<<14 | 0x04<<7 | 0x36, + 12504 - 12288: jis0208<<14 | 0x04<<7 | 0x37, + 12505 - 12288: jis0208<<14 | 0x04<<7 | 0x38, + 12506 - 12288: jis0208<<14 | 0x04<<7 | 0x39, + 12507 - 12288: jis0208<<14 | 0x04<<7 | 0x3A, + 12508 - 12288: jis0208<<14 | 0x04<<7 | 0x3B, + 12509 - 12288: jis0208<<14 | 0x04<<7 | 0x3C, + 12510 - 12288: jis0208<<14 | 0x04<<7 | 0x3D, + 12511 - 12288: jis0208<<14 | 0x04<<7 | 0x3E, + 12512 - 12288: jis0208<<14 | 0x04<<7 | 0x3F, + 12513 - 12288: jis0208<<14 | 0x04<<7 | 0x40, + 12514 - 12288: jis0208<<14 | 0x04<<7 | 0x41, + 12515 - 12288: jis0208<<14 | 0x04<<7 | 0x42, + 12516 - 12288: jis0208<<14 | 0x04<<7 | 0x43, + 12517 - 12288: jis0208<<14 | 0x04<<7 | 0x44, + 12518 - 12288: jis0208<<14 | 0x04<<7 | 0x45, + 12519 - 12288: jis0208<<14 | 0x04<<7 | 0x46, + 12520 - 12288: jis0208<<14 | 0x04<<7 | 0x47, + 12521 - 12288: jis0208<<14 | 0x04<<7 | 0x48, + 12522 - 12288: jis0208<<14 | 0x04<<7 | 0x49, + 12523 - 12288: jis0208<<14 | 0x04<<7 | 0x4A, + 12524 - 12288: jis0208<<14 | 0x04<<7 | 0x4B, + 12525 - 12288: jis0208<<14 | 0x04<<7 | 0x4C, + 12526 - 12288: jis0208<<14 | 0x04<<7 | 0x4D, + 12527 - 12288: jis0208<<14 | 0x04<<7 | 0x4E, + 12528 - 12288: jis0208<<14 | 0x04<<7 | 0x4F, + 12529 - 12288: jis0208<<14 | 0x04<<7 | 0x50, + 12530 - 12288: jis0208<<14 | 0x04<<7 | 0x51, + 12531 - 12288: jis0208<<14 | 0x04<<7 | 0x52, + 12532 - 12288: jis0208<<14 | 0x04<<7 | 0x53, + 12533 - 12288: jis0208<<14 | 0x04<<7 | 0x54, + 12534 - 12288: jis0208<<14 | 0x04<<7 | 0x55, + 12539 - 12288: jis0208<<14 | 0x00<<7 | 0x05, + 12540 - 12288: jis0208<<14 | 0x00<<7 | 0x1B, + 12541 - 12288: jis0208<<14 | 0x00<<7 | 0x12, + 12542 - 12288: jis0208<<14 | 0x00<<7 | 0x13, + 12849 - 12288: jis0208<<14 | 0x0C<<7 | 0x49, + 12850 - 12288: jis0208<<14 | 0x0C<<7 | 0x4A, + 12857 - 12288: jis0208<<14 | 0x0C<<7 | 0x4B, + 12964 - 12288: jis0208<<14 | 0x0C<<7 | 0x44, + 12965 - 12288: jis0208<<14 | 0x0C<<7 | 0x45, + 12966 - 12288: jis0208<<14 | 0x0C<<7 | 0x46, + 12967 - 12288: jis0208<<14 | 0x0C<<7 | 0x47, + 12968 - 12288: jis0208<<14 | 0x0C<<7 | 0x48, + 13059 - 12288: jis0208<<14 | 0x0C<<7 | 0x25, + 13069 - 12288: jis0208<<14 | 0x0C<<7 | 0x29, + 13076 - 12288: jis0208<<14 | 0x0C<<7 | 0x20, + 13080 - 12288: jis0208<<14 | 0x0C<<7 | 0x23, + 13090 - 12288: jis0208<<14 | 0x0C<<7 | 0x21, + 13091 - 12288: jis0208<<14 | 0x0C<<7 | 0x2B, + 13094 - 12288: jis0208<<14 | 0x0C<<7 | 0x2A, + 13095 - 12288: jis0208<<14 | 0x0C<<7 | 0x24, + 13099 - 12288: jis0208<<14 | 0x0C<<7 | 0x2C, + 13110 - 12288: jis0208<<14 | 0x0C<<7 | 0x26, + 13115 - 12288: jis0208<<14 | 0x0C<<7 | 0x2E, + 13129 - 12288: jis0208<<14 | 0x0C<<7 | 0x1F, + 13130 - 12288: jis0208<<14 | 0x0C<<7 | 0x2D, + 13133 - 12288: jis0208<<14 | 0x0C<<7 | 0x22, + 13137 - 12288: jis0208<<14 | 0x0C<<7 | 0x27, + 13143 - 12288: jis0208<<14 | 0x0C<<7 | 0x28, + 13179 - 12288: jis0208<<14 | 0x0C<<7 | 0x3E, + 13180 - 12288: jis0208<<14 | 0x0C<<7 | 0x4E, + 13181 - 12288: jis0208<<14 | 0x0C<<7 | 0x4D, + 13182 - 12288: jis0208<<14 | 0x0C<<7 | 0x4C, + 13198 - 12288: jis0208<<14 | 0x0C<<7 | 0x32, + 13199 - 12288: jis0208<<14 | 0x0C<<7 | 0x33, + 13212 - 12288: jis0208<<14 | 0x0C<<7 | 0x2F, + 13213 - 12288: jis0208<<14 | 0x0C<<7 | 0x30, + 13214 - 12288: jis0208<<14 | 0x0C<<7 | 0x31, + 13217 - 12288: jis0208<<14 | 0x0C<<7 | 0x35, + 13252 - 12288: jis0208<<14 | 0x0C<<7 | 0x34, + 13261 - 12288: jis0208<<14 | 0x0C<<7 | 0x42, +} + +const encode3Low, encode3High = 161, 1120 + +var encode3 = [...]uint16{ + 161 - 161: jis0212<<14 | 0x01<<7 | 0x21, + 164 - 161: jis0212<<14 | 0x01<<7 | 0x4F, + 166 - 161: jis0212<<14 | 0x01<<7 | 0x22, + 167 - 161: jis0208<<14 | 0x00<<7 | 0x57, + 168 - 161: jis0208<<14 | 0x00<<7 | 0x0E, + 169 - 161: jis0212<<14 | 0x01<<7 | 0x4C, + 170 - 161: jis0212<<14 | 0x01<<7 | 0x4B, + 174 - 161: jis0212<<14 | 0x01<<7 | 0x4D, + 175 - 161: jis0212<<14 | 0x01<<7 | 0x13, + 176 - 161: jis0208<<14 | 0x00<<7 | 0x4A, + 177 - 161: jis0208<<14 | 0x00<<7 | 0x3D, + 180 - 161: jis0208<<14 | 0x00<<7 | 0x0C, + 182 - 161: jis0208<<14 | 0x01<<7 | 0x58, + 184 - 161: jis0212<<14 | 0x01<<7 | 0x10, + 186 - 161: jis0212<<14 | 0x01<<7 | 0x4A, + 191 - 161: jis0212<<14 | 0x01<<7 | 0x23, + 192 - 161: jis0212<<14 | 0x09<<7 | 0x01, + 193 - 161: jis0212<<14 | 0x09<<7 | 0x00, + 194 - 161: jis0212<<14 | 0x09<<7 | 0x03, + 195 - 161: jis0212<<14 | 0x09<<7 | 0x09, + 196 - 161: jis0212<<14 | 0x09<<7 | 0x02, + 197 - 161: jis0212<<14 | 0x09<<7 | 0x08, + 198 - 161: jis0212<<14 | 0x08<<7 | 0x00, + 199 - 161: jis0212<<14 | 0x09<<7 | 0x0D, + 200 - 161: jis0212<<14 | 0x09<<7 | 0x11, + 201 - 161: jis0212<<14 | 0x09<<7 | 0x10, + 202 - 161: jis0212<<14 | 0x09<<7 | 0x13, + 203 - 161: jis0212<<14 | 0x09<<7 | 0x12, + 204 - 161: jis0212<<14 | 0x09<<7 | 0x1F, + 205 - 161: jis0212<<14 | 0x09<<7 | 0x1E, + 206 - 161: jis0212<<14 | 0x09<<7 | 0x21, + 207 - 161: jis0212<<14 | 0x09<<7 | 0x20, + 209 - 161: jis0212<<14 | 0x09<<7 | 0x2F, + 210 - 161: jis0212<<14 | 0x09<<7 | 0x31, + 211 - 161: jis0212<<14 | 0x09<<7 | 0x30, + 212 - 161: jis0212<<14 | 0x09<<7 | 0x33, + 213 - 161: jis0212<<14 | 0x09<<7 | 0x37, + 214 - 161: jis0212<<14 | 0x09<<7 | 0x32, + 215 - 161: jis0208<<14 | 0x00<<7 | 0x3E, + 216 - 161: jis0212<<14 | 0x08<<7 | 0x0B, + 217 - 161: jis0212<<14 | 0x09<<7 | 0x42, + 218 - 161: jis0212<<14 | 0x09<<7 | 0x41, + 219 - 161: jis0212<<14 | 0x09<<7 | 0x44, + 220 - 161: jis0212<<14 | 0x09<<7 | 0x43, + 221 - 161: jis0212<<14 | 0x09<<7 | 0x51, + 222 - 161: jis0212<<14 | 0x08<<7 | 0x0F, + 223 - 161: jis0212<<14 | 0x08<<7 | 0x2D, + 224 - 161: jis0212<<14 | 0x0A<<7 | 0x01, + 225 - 161: jis0212<<14 | 0x0A<<7 | 0x00, + 226 - 161: jis0212<<14 | 0x0A<<7 | 0x03, + 227 - 161: jis0212<<14 | 0x0A<<7 | 0x09, + 228 - 161: jis0212<<14 | 0x0A<<7 | 0x02, + 229 - 161: jis0212<<14 | 0x0A<<7 | 0x08, + 230 - 161: jis0212<<14 | 0x08<<7 | 0x20, + 231 - 161: jis0212<<14 | 0x0A<<7 | 0x0D, + 232 - 161: jis0212<<14 | 0x0A<<7 | 0x11, + 233 - 161: jis0212<<14 | 0x0A<<7 | 0x10, + 234 - 161: jis0212<<14 | 0x0A<<7 | 0x13, + 235 - 161: jis0212<<14 | 0x0A<<7 | 0x12, + 236 - 161: jis0212<<14 | 0x0A<<7 | 0x1F, + 237 - 161: jis0212<<14 | 0x0A<<7 | 0x1E, + 238 - 161: jis0212<<14 | 0x0A<<7 | 0x21, + 239 - 161: jis0212<<14 | 0x0A<<7 | 0x20, + 240 - 161: jis0212<<14 | 0x08<<7 | 0x22, + 241 - 161: jis0212<<14 | 0x0A<<7 | 0x2F, + 242 - 161: jis0212<<14 | 0x0A<<7 | 0x31, + 243 - 161: jis0212<<14 | 0x0A<<7 | 0x30, + 244 - 161: jis0212<<14 | 0x0A<<7 | 0x33, + 245 - 161: jis0212<<14 | 0x0A<<7 | 0x37, + 246 - 161: jis0212<<14 | 0x0A<<7 | 0x32, + 247 - 161: jis0208<<14 | 0x00<<7 | 0x3F, + 248 - 161: jis0212<<14 | 0x08<<7 | 0x2B, + 249 - 161: jis0212<<14 | 0x0A<<7 | 0x42, + 250 - 161: jis0212<<14 | 0x0A<<7 | 0x41, + 251 - 161: jis0212<<14 | 0x0A<<7 | 0x44, + 252 - 161: jis0212<<14 | 0x0A<<7 | 0x43, + 253 - 161: jis0212<<14 | 0x0A<<7 | 0x51, + 254 - 161: jis0212<<14 | 0x08<<7 | 0x2F, + 255 - 161: jis0212<<14 | 0x0A<<7 | 0x52, + 256 - 161: jis0212<<14 | 0x09<<7 | 0x06, + 257 - 161: jis0212<<14 | 0x0A<<7 | 0x06, + 258 - 161: jis0212<<14 | 0x09<<7 | 0x04, + 259 - 161: jis0212<<14 | 0x0A<<7 | 0x04, + 260 - 161: jis0212<<14 | 0x09<<7 | 0x07, + 261 - 161: jis0212<<14 | 0x0A<<7 | 0x07, + 262 - 161: jis0212<<14 | 0x09<<7 | 0x0A, + 263 - 161: jis0212<<14 | 0x0A<<7 | 0x0A, + 264 - 161: jis0212<<14 | 0x09<<7 | 0x0B, + 265 - 161: jis0212<<14 | 0x0A<<7 | 0x0B, + 266 - 161: jis0212<<14 | 0x09<<7 | 0x0E, + 267 - 161: jis0212<<14 | 0x0A<<7 | 0x0E, + 268 - 161: jis0212<<14 | 0x09<<7 | 0x0C, + 269 - 161: jis0212<<14 | 0x0A<<7 | 0x0C, + 270 - 161: jis0212<<14 | 0x09<<7 | 0x0F, + 271 - 161: jis0212<<14 | 0x0A<<7 | 0x0F, + 272 - 161: jis0212<<14 | 0x08<<7 | 0x01, + 273 - 161: jis0212<<14 | 0x08<<7 | 0x21, + 274 - 161: jis0212<<14 | 0x09<<7 | 0x16, + 275 - 161: jis0212<<14 | 0x0A<<7 | 0x16, + 278 - 161: jis0212<<14 | 0x09<<7 | 0x15, + 279 - 161: jis0212<<14 | 0x0A<<7 | 0x15, + 280 - 161: jis0212<<14 | 0x09<<7 | 0x17, + 281 - 161: jis0212<<14 | 0x0A<<7 | 0x17, + 282 - 161: jis0212<<14 | 0x09<<7 | 0x14, + 283 - 161: jis0212<<14 | 0x0A<<7 | 0x14, + 284 - 161: jis0212<<14 | 0x09<<7 | 0x19, + 285 - 161: jis0212<<14 | 0x0A<<7 | 0x19, + 286 - 161: jis0212<<14 | 0x09<<7 | 0x1A, + 287 - 161: jis0212<<14 | 0x0A<<7 | 0x1A, + 288 - 161: jis0212<<14 | 0x09<<7 | 0x1C, + 289 - 161: jis0212<<14 | 0x0A<<7 | 0x1C, + 290 - 161: jis0212<<14 | 0x09<<7 | 0x1B, + 292 - 161: jis0212<<14 | 0x09<<7 | 0x1D, + 293 - 161: jis0212<<14 | 0x0A<<7 | 0x1D, + 294 - 161: jis0212<<14 | 0x08<<7 | 0x03, + 295 - 161: jis0212<<14 | 0x08<<7 | 0x23, + 296 - 161: jis0212<<14 | 0x09<<7 | 0x26, + 297 - 161: jis0212<<14 | 0x0A<<7 | 0x26, + 298 - 161: jis0212<<14 | 0x09<<7 | 0x24, + 299 - 161: jis0212<<14 | 0x0A<<7 | 0x24, + 302 - 161: jis0212<<14 | 0x09<<7 | 0x25, + 303 - 161: jis0212<<14 | 0x0A<<7 | 0x25, + 304 - 161: jis0212<<14 | 0x09<<7 | 0x23, + 305 - 161: jis0212<<14 | 0x08<<7 | 0x24, + 306 - 161: jis0212<<14 | 0x08<<7 | 0x05, + 307 - 161: jis0212<<14 | 0x08<<7 | 0x25, + 308 - 161: jis0212<<14 | 0x09<<7 | 0x27, + 309 - 161: jis0212<<14 | 0x0A<<7 | 0x27, + 310 - 161: jis0212<<14 | 0x09<<7 | 0x28, + 311 - 161: jis0212<<14 | 0x0A<<7 | 0x28, + 312 - 161: jis0212<<14 | 0x08<<7 | 0x26, + 313 - 161: jis0212<<14 | 0x09<<7 | 0x29, + 314 - 161: jis0212<<14 | 0x0A<<7 | 0x29, + 315 - 161: jis0212<<14 | 0x09<<7 | 0x2B, + 316 - 161: jis0212<<14 | 0x0A<<7 | 0x2B, + 317 - 161: jis0212<<14 | 0x09<<7 | 0x2A, + 318 - 161: jis0212<<14 | 0x0A<<7 | 0x2A, + 319 - 161: jis0212<<14 | 0x08<<7 | 0x08, + 320 - 161: jis0212<<14 | 0x08<<7 | 0x28, + 321 - 161: jis0212<<14 | 0x08<<7 | 0x07, + 322 - 161: jis0212<<14 | 0x08<<7 | 0x27, + 323 - 161: jis0212<<14 | 0x09<<7 | 0x2C, + 324 - 161: jis0212<<14 | 0x0A<<7 | 0x2C, + 325 - 161: jis0212<<14 | 0x09<<7 | 0x2E, + 326 - 161: jis0212<<14 | 0x0A<<7 | 0x2E, + 327 - 161: jis0212<<14 | 0x09<<7 | 0x2D, + 328 - 161: jis0212<<14 | 0x0A<<7 | 0x2D, + 329 - 161: jis0212<<14 | 0x08<<7 | 0x29, + 330 - 161: jis0212<<14 | 0x08<<7 | 0x0A, + 331 - 161: jis0212<<14 | 0x08<<7 | 0x2A, + 332 - 161: jis0212<<14 | 0x09<<7 | 0x36, + 333 - 161: jis0212<<14 | 0x0A<<7 | 0x36, + 336 - 161: jis0212<<14 | 0x09<<7 | 0x35, + 337 - 161: jis0212<<14 | 0x0A<<7 | 0x35, + 338 - 161: jis0212<<14 | 0x08<<7 | 0x0C, + 339 - 161: jis0212<<14 | 0x08<<7 | 0x2C, + 340 - 161: jis0212<<14 | 0x09<<7 | 0x38, + 341 - 161: jis0212<<14 | 0x0A<<7 | 0x38, + 342 - 161: jis0212<<14 | 0x09<<7 | 0x3A, + 343 - 161: jis0212<<14 | 0x0A<<7 | 0x3A, + 344 - 161: jis0212<<14 | 0x09<<7 | 0x39, + 345 - 161: jis0212<<14 | 0x0A<<7 | 0x39, + 346 - 161: jis0212<<14 | 0x09<<7 | 0x3B, + 347 - 161: jis0212<<14 | 0x0A<<7 | 0x3B, + 348 - 161: jis0212<<14 | 0x09<<7 | 0x3C, + 349 - 161: jis0212<<14 | 0x0A<<7 | 0x3C, + 350 - 161: jis0212<<14 | 0x09<<7 | 0x3E, + 351 - 161: jis0212<<14 | 0x0A<<7 | 0x3E, + 352 - 161: jis0212<<14 | 0x09<<7 | 0x3D, + 353 - 161: jis0212<<14 | 0x0A<<7 | 0x3D, + 354 - 161: jis0212<<14 | 0x09<<7 | 0x40, + 355 - 161: jis0212<<14 | 0x0A<<7 | 0x40, + 356 - 161: jis0212<<14 | 0x09<<7 | 0x3F, + 357 - 161: jis0212<<14 | 0x0A<<7 | 0x3F, + 358 - 161: jis0212<<14 | 0x08<<7 | 0x0E, + 359 - 161: jis0212<<14 | 0x08<<7 | 0x2E, + 360 - 161: jis0212<<14 | 0x09<<7 | 0x4B, + 361 - 161: jis0212<<14 | 0x0A<<7 | 0x4B, + 362 - 161: jis0212<<14 | 0x09<<7 | 0x48, + 363 - 161: jis0212<<14 | 0x0A<<7 | 0x48, + 364 - 161: jis0212<<14 | 0x09<<7 | 0x45, + 365 - 161: jis0212<<14 | 0x0A<<7 | 0x45, + 366 - 161: jis0212<<14 | 0x09<<7 | 0x4A, + 367 - 161: jis0212<<14 | 0x0A<<7 | 0x4A, + 368 - 161: jis0212<<14 | 0x09<<7 | 0x47, + 369 - 161: jis0212<<14 | 0x0A<<7 | 0x47, + 370 - 161: jis0212<<14 | 0x09<<7 | 0x49, + 371 - 161: jis0212<<14 | 0x0A<<7 | 0x49, + 372 - 161: jis0212<<14 | 0x09<<7 | 0x50, + 373 - 161: jis0212<<14 | 0x0A<<7 | 0x50, + 374 - 161: jis0212<<14 | 0x09<<7 | 0x53, + 375 - 161: jis0212<<14 | 0x0A<<7 | 0x53, + 376 - 161: jis0212<<14 | 0x09<<7 | 0x52, + 377 - 161: jis0212<<14 | 0x09<<7 | 0x54, + 378 - 161: jis0212<<14 | 0x0A<<7 | 0x54, + 379 - 161: jis0212<<14 | 0x09<<7 | 0x56, + 380 - 161: jis0212<<14 | 0x0A<<7 | 0x56, + 381 - 161: jis0212<<14 | 0x09<<7 | 0x55, + 382 - 161: jis0212<<14 | 0x0A<<7 | 0x55, + 461 - 161: jis0212<<14 | 0x09<<7 | 0x05, + 462 - 161: jis0212<<14 | 0x0A<<7 | 0x05, + 463 - 161: jis0212<<14 | 0x09<<7 | 0x22, + 464 - 161: jis0212<<14 | 0x0A<<7 | 0x22, + 465 - 161: jis0212<<14 | 0x09<<7 | 0x34, + 466 - 161: jis0212<<14 | 0x0A<<7 | 0x34, + 467 - 161: jis0212<<14 | 0x09<<7 | 0x46, + 468 - 161: jis0212<<14 | 0x0A<<7 | 0x46, + 469 - 161: jis0212<<14 | 0x09<<7 | 0x4F, + 470 - 161: jis0212<<14 | 0x0A<<7 | 0x4F, + 471 - 161: jis0212<<14 | 0x09<<7 | 0x4C, + 472 - 161: jis0212<<14 | 0x0A<<7 | 0x4C, + 473 - 161: jis0212<<14 | 0x09<<7 | 0x4E, + 474 - 161: jis0212<<14 | 0x0A<<7 | 0x4E, + 475 - 161: jis0212<<14 | 0x09<<7 | 0x4D, + 476 - 161: jis0212<<14 | 0x0A<<7 | 0x4D, + 501 - 161: jis0212<<14 | 0x0A<<7 | 0x18, + 711 - 161: jis0212<<14 | 0x01<<7 | 0x0F, + 728 - 161: jis0212<<14 | 0x01<<7 | 0x0E, + 729 - 161: jis0212<<14 | 0x01<<7 | 0x11, + 730 - 161: jis0212<<14 | 0x01<<7 | 0x15, + 731 - 161: jis0212<<14 | 0x01<<7 | 0x14, + 733 - 161: jis0212<<14 | 0x01<<7 | 0x12, + 900 - 161: jis0212<<14 | 0x01<<7 | 0x17, + 901 - 161: jis0212<<14 | 0x01<<7 | 0x18, + 902 - 161: jis0212<<14 | 0x05<<7 | 0x40, + 904 - 161: jis0212<<14 | 0x05<<7 | 0x41, + 905 - 161: jis0212<<14 | 0x05<<7 | 0x42, + 906 - 161: jis0212<<14 | 0x05<<7 | 0x43, + 908 - 161: jis0212<<14 | 0x05<<7 | 0x46, + 910 - 161: jis0212<<14 | 0x05<<7 | 0x48, + 911 - 161: jis0212<<14 | 0x05<<7 | 0x4B, + 912 - 161: jis0212<<14 | 0x05<<7 | 0x55, + 913 - 161: jis0208<<14 | 0x05<<7 | 0x00, + 914 - 161: jis0208<<14 | 0x05<<7 | 0x01, + 915 - 161: jis0208<<14 | 0x05<<7 | 0x02, + 916 - 161: jis0208<<14 | 0x05<<7 | 0x03, + 917 - 161: jis0208<<14 | 0x05<<7 | 0x04, + 918 - 161: jis0208<<14 | 0x05<<7 | 0x05, + 919 - 161: jis0208<<14 | 0x05<<7 | 0x06, + 920 - 161: jis0208<<14 | 0x05<<7 | 0x07, + 921 - 161: jis0208<<14 | 0x05<<7 | 0x08, + 922 - 161: jis0208<<14 | 0x05<<7 | 0x09, + 923 - 161: jis0208<<14 | 0x05<<7 | 0x0A, + 924 - 161: jis0208<<14 | 0x05<<7 | 0x0B, + 925 - 161: jis0208<<14 | 0x05<<7 | 0x0C, + 926 - 161: jis0208<<14 | 0x05<<7 | 0x0D, + 927 - 161: jis0208<<14 | 0x05<<7 | 0x0E, + 928 - 161: jis0208<<14 | 0x05<<7 | 0x0F, + 929 - 161: jis0208<<14 | 0x05<<7 | 0x10, + 931 - 161: jis0208<<14 | 0x05<<7 | 0x11, + 932 - 161: jis0208<<14 | 0x05<<7 | 0x12, + 933 - 161: jis0208<<14 | 0x05<<7 | 0x13, + 934 - 161: jis0208<<14 | 0x05<<7 | 0x14, + 935 - 161: jis0208<<14 | 0x05<<7 | 0x15, + 936 - 161: jis0208<<14 | 0x05<<7 | 0x16, + 937 - 161: jis0208<<14 | 0x05<<7 | 0x17, + 938 - 161: jis0212<<14 | 0x05<<7 | 0x44, + 939 - 161: jis0212<<14 | 0x05<<7 | 0x49, + 940 - 161: jis0212<<14 | 0x05<<7 | 0x50, + 941 - 161: jis0212<<14 | 0x05<<7 | 0x51, + 942 - 161: jis0212<<14 | 0x05<<7 | 0x52, + 943 - 161: jis0212<<14 | 0x05<<7 | 0x53, + 944 - 161: jis0212<<14 | 0x05<<7 | 0x5A, + 945 - 161: jis0208<<14 | 0x05<<7 | 0x20, + 946 - 161: jis0208<<14 | 0x05<<7 | 0x21, + 947 - 161: jis0208<<14 | 0x05<<7 | 0x22, + 948 - 161: jis0208<<14 | 0x05<<7 | 0x23, + 949 - 161: jis0208<<14 | 0x05<<7 | 0x24, + 950 - 161: jis0208<<14 | 0x05<<7 | 0x25, + 951 - 161: jis0208<<14 | 0x05<<7 | 0x26, + 952 - 161: jis0208<<14 | 0x05<<7 | 0x27, + 953 - 161: jis0208<<14 | 0x05<<7 | 0x28, + 954 - 161: jis0208<<14 | 0x05<<7 | 0x29, + 955 - 161: jis0208<<14 | 0x05<<7 | 0x2A, + 956 - 161: jis0208<<14 | 0x05<<7 | 0x2B, + 957 - 161: jis0208<<14 | 0x05<<7 | 0x2C, + 958 - 161: jis0208<<14 | 0x05<<7 | 0x2D, + 959 - 161: jis0208<<14 | 0x05<<7 | 0x2E, + 960 - 161: jis0208<<14 | 0x05<<7 | 0x2F, + 961 - 161: jis0208<<14 | 0x05<<7 | 0x30, + 962 - 161: jis0212<<14 | 0x05<<7 | 0x57, + 963 - 161: jis0208<<14 | 0x05<<7 | 0x31, + 964 - 161: jis0208<<14 | 0x05<<7 | 0x32, + 965 - 161: jis0208<<14 | 0x05<<7 | 0x33, + 966 - 161: jis0208<<14 | 0x05<<7 | 0x34, + 967 - 161: jis0208<<14 | 0x05<<7 | 0x35, + 968 - 161: jis0208<<14 | 0x05<<7 | 0x36, + 969 - 161: jis0208<<14 | 0x05<<7 | 0x37, + 970 - 161: jis0212<<14 | 0x05<<7 | 0x54, + 971 - 161: jis0212<<14 | 0x05<<7 | 0x59, + 972 - 161: jis0212<<14 | 0x05<<7 | 0x56, + 973 - 161: jis0212<<14 | 0x05<<7 | 0x58, + 974 - 161: jis0212<<14 | 0x05<<7 | 0x5B, + 1025 - 161: jis0208<<14 | 0x06<<7 | 0x06, + 1026 - 161: jis0212<<14 | 0x06<<7 | 0x21, + 1027 - 161: jis0212<<14 | 0x06<<7 | 0x22, + 1028 - 161: jis0212<<14 | 0x06<<7 | 0x23, + 1029 - 161: jis0212<<14 | 0x06<<7 | 0x24, + 1030 - 161: jis0212<<14 | 0x06<<7 | 0x25, + 1031 - 161: jis0212<<14 | 0x06<<7 | 0x26, + 1032 - 161: jis0212<<14 | 0x06<<7 | 0x27, + 1033 - 161: jis0212<<14 | 0x06<<7 | 0x28, + 1034 - 161: jis0212<<14 | 0x06<<7 | 0x29, + 1035 - 161: jis0212<<14 | 0x06<<7 | 0x2A, + 1036 - 161: jis0212<<14 | 0x06<<7 | 0x2B, + 1038 - 161: jis0212<<14 | 0x06<<7 | 0x2C, + 1039 - 161: jis0212<<14 | 0x06<<7 | 0x2D, + 1040 - 161: jis0208<<14 | 0x06<<7 | 0x00, + 1041 - 161: jis0208<<14 | 0x06<<7 | 0x01, + 1042 - 161: jis0208<<14 | 0x06<<7 | 0x02, + 1043 - 161: jis0208<<14 | 0x06<<7 | 0x03, + 1044 - 161: jis0208<<14 | 0x06<<7 | 0x04, + 1045 - 161: jis0208<<14 | 0x06<<7 | 0x05, + 1046 - 161: jis0208<<14 | 0x06<<7 | 0x07, + 1047 - 161: jis0208<<14 | 0x06<<7 | 0x08, + 1048 - 161: jis0208<<14 | 0x06<<7 | 0x09, + 1049 - 161: jis0208<<14 | 0x06<<7 | 0x0A, + 1050 - 161: jis0208<<14 | 0x06<<7 | 0x0B, + 1051 - 161: jis0208<<14 | 0x06<<7 | 0x0C, + 1052 - 161: jis0208<<14 | 0x06<<7 | 0x0D, + 1053 - 161: jis0208<<14 | 0x06<<7 | 0x0E, + 1054 - 161: jis0208<<14 | 0x06<<7 | 0x0F, + 1055 - 161: jis0208<<14 | 0x06<<7 | 0x10, + 1056 - 161: jis0208<<14 | 0x06<<7 | 0x11, + 1057 - 161: jis0208<<14 | 0x06<<7 | 0x12, + 1058 - 161: jis0208<<14 | 0x06<<7 | 0x13, + 1059 - 161: jis0208<<14 | 0x06<<7 | 0x14, + 1060 - 161: jis0208<<14 | 0x06<<7 | 0x15, + 1061 - 161: jis0208<<14 | 0x06<<7 | 0x16, + 1062 - 161: jis0208<<14 | 0x06<<7 | 0x17, + 1063 - 161: jis0208<<14 | 0x06<<7 | 0x18, + 1064 - 161: jis0208<<14 | 0x06<<7 | 0x19, + 1065 - 161: jis0208<<14 | 0x06<<7 | 0x1A, + 1066 - 161: jis0208<<14 | 0x06<<7 | 0x1B, + 1067 - 161: jis0208<<14 | 0x06<<7 | 0x1C, + 1068 - 161: jis0208<<14 | 0x06<<7 | 0x1D, + 1069 - 161: jis0208<<14 | 0x06<<7 | 0x1E, + 1070 - 161: jis0208<<14 | 0x06<<7 | 0x1F, + 1071 - 161: jis0208<<14 | 0x06<<7 | 0x20, + 1072 - 161: jis0208<<14 | 0x06<<7 | 0x30, + 1073 - 161: jis0208<<14 | 0x06<<7 | 0x31, + 1074 - 161: jis0208<<14 | 0x06<<7 | 0x32, + 1075 - 161: jis0208<<14 | 0x06<<7 | 0x33, + 1076 - 161: jis0208<<14 | 0x06<<7 | 0x34, + 1077 - 161: jis0208<<14 | 0x06<<7 | 0x35, + 1078 - 161: jis0208<<14 | 0x06<<7 | 0x37, + 1079 - 161: jis0208<<14 | 0x06<<7 | 0x38, + 1080 - 161: jis0208<<14 | 0x06<<7 | 0x39, + 1081 - 161: jis0208<<14 | 0x06<<7 | 0x3A, + 1082 - 161: jis0208<<14 | 0x06<<7 | 0x3B, + 1083 - 161: jis0208<<14 | 0x06<<7 | 0x3C, + 1084 - 161: jis0208<<14 | 0x06<<7 | 0x3D, + 1085 - 161: jis0208<<14 | 0x06<<7 | 0x3E, + 1086 - 161: jis0208<<14 | 0x06<<7 | 0x3F, + 1087 - 161: jis0208<<14 | 0x06<<7 | 0x40, + 1088 - 161: jis0208<<14 | 0x06<<7 | 0x41, + 1089 - 161: jis0208<<14 | 0x06<<7 | 0x42, + 1090 - 161: jis0208<<14 | 0x06<<7 | 0x43, + 1091 - 161: jis0208<<14 | 0x06<<7 | 0x44, + 1092 - 161: jis0208<<14 | 0x06<<7 | 0x45, + 1093 - 161: jis0208<<14 | 0x06<<7 | 0x46, + 1094 - 161: jis0208<<14 | 0x06<<7 | 0x47, + 1095 - 161: jis0208<<14 | 0x06<<7 | 0x48, + 1096 - 161: jis0208<<14 | 0x06<<7 | 0x49, + 1097 - 161: jis0208<<14 | 0x06<<7 | 0x4A, + 1098 - 161: jis0208<<14 | 0x06<<7 | 0x4B, + 1099 - 161: jis0208<<14 | 0x06<<7 | 0x4C, + 1100 - 161: jis0208<<14 | 0x06<<7 | 0x4D, + 1101 - 161: jis0208<<14 | 0x06<<7 | 0x4E, + 1102 - 161: jis0208<<14 | 0x06<<7 | 0x4F, + 1103 - 161: jis0208<<14 | 0x06<<7 | 0x50, + 1105 - 161: jis0208<<14 | 0x06<<7 | 0x36, + 1106 - 161: jis0212<<14 | 0x06<<7 | 0x51, + 1107 - 161: jis0212<<14 | 0x06<<7 | 0x52, + 1108 - 161: jis0212<<14 | 0x06<<7 | 0x53, + 1109 - 161: jis0212<<14 | 0x06<<7 | 0x54, + 1110 - 161: jis0212<<14 | 0x06<<7 | 0x55, + 1111 - 161: jis0212<<14 | 0x06<<7 | 0x56, + 1112 - 161: jis0212<<14 | 0x06<<7 | 0x57, + 1113 - 161: jis0212<<14 | 0x06<<7 | 0x58, + 1114 - 161: jis0212<<14 | 0x06<<7 | 0x59, + 1115 - 161: jis0212<<14 | 0x06<<7 | 0x5A, + 1116 - 161: jis0212<<14 | 0x06<<7 | 0x5B, + 1118 - 161: jis0212<<14 | 0x06<<7 | 0x5C, + 1119 - 161: jis0212<<14 | 0x06<<7 | 0x5D, +} + +const encode4Low, encode4High = 63785, 64046 + +var encode4 = [...]uint16{ + 63785 - 63785: jis0208<<14 | 0x59<<7 | 0x25, + 63964 - 63785: jis0208<<14 | 0x5B<<7 | 0x2E, + 64014 - 63785: jis0208<<14 | 0x58<<7 | 0x33, + 64015 - 63785: jis0208<<14 | 0x58<<7 | 0x3E, + 64016 - 63785: jis0208<<14 | 0x58<<7 | 0x3F, + 64017 - 63785: jis0208<<14 | 0x58<<7 | 0x54, + 64018 - 63785: jis0208<<14 | 0x59<<7 | 0x1D, + 64019 - 63785: jis0208<<14 | 0x59<<7 | 0x2D, + 64020 - 63785: jis0208<<14 | 0x59<<7 | 0x2F, + 64021 - 63785: jis0208<<14 | 0x59<<7 | 0x5A, + 64022 - 63785: jis0208<<14 | 0x5A<<7 | 0x02, + 64023 - 63785: jis0208<<14 | 0x5A<<7 | 0x19, + 64024 - 63785: jis0208<<14 | 0x5A<<7 | 0x21, + 64025 - 63785: jis0208<<14 | 0x5A<<7 | 0x22, + 64026 - 63785: jis0208<<14 | 0x5A<<7 | 0x23, + 64027 - 63785: jis0208<<14 | 0x5A<<7 | 0x25, + 64028 - 63785: jis0208<<14 | 0x5A<<7 | 0x29, + 64029 - 63785: jis0208<<14 | 0x5A<<7 | 0x2C, + 64030 - 63785: jis0208<<14 | 0x5A<<7 | 0x35, + 64031 - 63785: jis0208<<14 | 0x5A<<7 | 0x40, + 64032 - 63785: jis0208<<14 | 0x5A<<7 | 0x42, + 64033 - 63785: jis0208<<14 | 0x5A<<7 | 0x43, + 64034 - 63785: jis0208<<14 | 0x5A<<7 | 0x4C, + 64035 - 63785: jis0208<<14 | 0x5A<<7 | 0x54, + 64036 - 63785: jis0208<<14 | 0x5A<<7 | 0x56, + 64037 - 63785: jis0208<<14 | 0x5A<<7 | 0x57, + 64038 - 63785: jis0208<<14 | 0x5A<<7 | 0x5A, + 64039 - 63785: jis0208<<14 | 0x5B<<7 | 0x18, + 64040 - 63785: jis0208<<14 | 0x5B<<7 | 0x1F, + 64041 - 63785: jis0208<<14 | 0x5B<<7 | 0x2F, + 64042 - 63785: jis0208<<14 | 0x5B<<7 | 0x3B, + 64043 - 63785: jis0208<<14 | 0x5B<<7 | 0x3C, + 64044 - 63785: jis0208<<14 | 0x5B<<7 | 0x3E, + 64045 - 63785: jis0208<<14 | 0x5B<<7 | 0x4B, +} + +const encode5Low, encode5High = 65281, 65510 + +var encode5 = [...]uint16{ + 65281 - 65281: jis0208<<14 | 0x00<<7 | 0x09, + 65282 - 65281: jis0208<<14 | 0x5B<<7 | 0x5D, + 65283 - 65281: jis0208<<14 | 0x00<<7 | 0x53, + 65284 - 65281: jis0208<<14 | 0x00<<7 | 0x4F, + 65285 - 65281: jis0208<<14 | 0x00<<7 | 0x52, + 65286 - 65281: jis0208<<14 | 0x00<<7 | 0x54, + 65287 - 65281: jis0208<<14 | 0x5B<<7 | 0x5C, + 65288 - 65281: jis0208<<14 | 0x00<<7 | 0x29, + 65289 - 65281: jis0208<<14 | 0x00<<7 | 0x2A, + 65290 - 65281: jis0208<<14 | 0x00<<7 | 0x55, + 65291 - 65281: jis0208<<14 | 0x00<<7 | 0x3B, + 65292 - 65281: jis0208<<14 | 0x00<<7 | 0x03, + 65293 - 65281: jis0208<<14 | 0x00<<7 | 0x3C, + 65294 - 65281: jis0208<<14 | 0x00<<7 | 0x04, + 65295 - 65281: jis0208<<14 | 0x00<<7 | 0x1E, + 65296 - 65281: jis0208<<14 | 0x02<<7 | 0x0F, + 65297 - 65281: jis0208<<14 | 0x02<<7 | 0x10, + 65298 - 65281: jis0208<<14 | 0x02<<7 | 0x11, + 65299 - 65281: jis0208<<14 | 0x02<<7 | 0x12, + 65300 - 65281: jis0208<<14 | 0x02<<7 | 0x13, + 65301 - 65281: jis0208<<14 | 0x02<<7 | 0x14, + 65302 - 65281: jis0208<<14 | 0x02<<7 | 0x15, + 65303 - 65281: jis0208<<14 | 0x02<<7 | 0x16, + 65304 - 65281: jis0208<<14 | 0x02<<7 | 0x17, + 65305 - 65281: jis0208<<14 | 0x02<<7 | 0x18, + 65306 - 65281: jis0208<<14 | 0x00<<7 | 0x06, + 65307 - 65281: jis0208<<14 | 0x00<<7 | 0x07, + 65308 - 65281: jis0208<<14 | 0x00<<7 | 0x42, + 65309 - 65281: jis0208<<14 | 0x00<<7 | 0x40, + 65310 - 65281: jis0208<<14 | 0x00<<7 | 0x43, + 65311 - 65281: jis0208<<14 | 0x00<<7 | 0x08, + 65312 - 65281: jis0208<<14 | 0x00<<7 | 0x56, + 65313 - 65281: jis0208<<14 | 0x02<<7 | 0x20, + 65314 - 65281: jis0208<<14 | 0x02<<7 | 0x21, + 65315 - 65281: jis0208<<14 | 0x02<<7 | 0x22, + 65316 - 65281: jis0208<<14 | 0x02<<7 | 0x23, + 65317 - 65281: jis0208<<14 | 0x02<<7 | 0x24, + 65318 - 65281: jis0208<<14 | 0x02<<7 | 0x25, + 65319 - 65281: jis0208<<14 | 0x02<<7 | 0x26, + 65320 - 65281: jis0208<<14 | 0x02<<7 | 0x27, + 65321 - 65281: jis0208<<14 | 0x02<<7 | 0x28, + 65322 - 65281: jis0208<<14 | 0x02<<7 | 0x29, + 65323 - 65281: jis0208<<14 | 0x02<<7 | 0x2A, + 65324 - 65281: jis0208<<14 | 0x02<<7 | 0x2B, + 65325 - 65281: jis0208<<14 | 0x02<<7 | 0x2C, + 65326 - 65281: jis0208<<14 | 0x02<<7 | 0x2D, + 65327 - 65281: jis0208<<14 | 0x02<<7 | 0x2E, + 65328 - 65281: jis0208<<14 | 0x02<<7 | 0x2F, + 65329 - 65281: jis0208<<14 | 0x02<<7 | 0x30, + 65330 - 65281: jis0208<<14 | 0x02<<7 | 0x31, + 65331 - 65281: jis0208<<14 | 0x02<<7 | 0x32, + 65332 - 65281: jis0208<<14 | 0x02<<7 | 0x33, + 65333 - 65281: jis0208<<14 | 0x02<<7 | 0x34, + 65334 - 65281: jis0208<<14 | 0x02<<7 | 0x35, + 65335 - 65281: jis0208<<14 | 0x02<<7 | 0x36, + 65336 - 65281: jis0208<<14 | 0x02<<7 | 0x37, + 65337 - 65281: jis0208<<14 | 0x02<<7 | 0x38, + 65338 - 65281: jis0208<<14 | 0x02<<7 | 0x39, + 65339 - 65281: jis0208<<14 | 0x00<<7 | 0x2D, + 65340 - 65281: jis0208<<14 | 0x00<<7 | 0x1F, + 65341 - 65281: jis0208<<14 | 0x00<<7 | 0x2E, + 65342 - 65281: jis0208<<14 | 0x00<<7 | 0x0F, + 65343 - 65281: jis0208<<14 | 0x00<<7 | 0x11, + 65344 - 65281: jis0208<<14 | 0x00<<7 | 0x0D, + 65345 - 65281: jis0208<<14 | 0x02<<7 | 0x40, + 65346 - 65281: jis0208<<14 | 0x02<<7 | 0x41, + 65347 - 65281: jis0208<<14 | 0x02<<7 | 0x42, + 65348 - 65281: jis0208<<14 | 0x02<<7 | 0x43, + 65349 - 65281: jis0208<<14 | 0x02<<7 | 0x44, + 65350 - 65281: jis0208<<14 | 0x02<<7 | 0x45, + 65351 - 65281: jis0208<<14 | 0x02<<7 | 0x46, + 65352 - 65281: jis0208<<14 | 0x02<<7 | 0x47, + 65353 - 65281: jis0208<<14 | 0x02<<7 | 0x48, + 65354 - 65281: jis0208<<14 | 0x02<<7 | 0x49, + 65355 - 65281: jis0208<<14 | 0x02<<7 | 0x4A, + 65356 - 65281: jis0208<<14 | 0x02<<7 | 0x4B, + 65357 - 65281: jis0208<<14 | 0x02<<7 | 0x4C, + 65358 - 65281: jis0208<<14 | 0x02<<7 | 0x4D, + 65359 - 65281: jis0208<<14 | 0x02<<7 | 0x4E, + 65360 - 65281: jis0208<<14 | 0x02<<7 | 0x4F, + 65361 - 65281: jis0208<<14 | 0x02<<7 | 0x50, + 65362 - 65281: jis0208<<14 | 0x02<<7 | 0x51, + 65363 - 65281: jis0208<<14 | 0x02<<7 | 0x52, + 65364 - 65281: jis0208<<14 | 0x02<<7 | 0x53, + 65365 - 65281: jis0208<<14 | 0x02<<7 | 0x54, + 65366 - 65281: jis0208<<14 | 0x02<<7 | 0x55, + 65367 - 65281: jis0208<<14 | 0x02<<7 | 0x56, + 65368 - 65281: jis0208<<14 | 0x02<<7 | 0x57, + 65369 - 65281: jis0208<<14 | 0x02<<7 | 0x58, + 65370 - 65281: jis0208<<14 | 0x02<<7 | 0x59, + 65371 - 65281: jis0208<<14 | 0x00<<7 | 0x2F, + 65372 - 65281: jis0208<<14 | 0x00<<7 | 0x22, + 65373 - 65281: jis0208<<14 | 0x00<<7 | 0x30, + 65374 - 65281: jis0208<<14 | 0x00<<7 | 0x20, + 65504 - 65281: jis0208<<14 | 0x00<<7 | 0x50, + 65505 - 65281: jis0208<<14 | 0x00<<7 | 0x51, + 65506 - 65281: jis0208<<14 | 0x01<<7 | 0x2B, + 65507 - 65281: jis0208<<14 | 0x00<<7 | 0x10, + 65508 - 65281: jis0208<<14 | 0x5B<<7 | 0x5B, + 65509 - 65281: jis0208<<14 | 0x00<<7 | 0x4E, +} diff --git a/vendor/golang.org/x/text/encoding/korean/all_test.go b/vendor/golang.org/x/text/encoding/korean/all_test.go new file mode 100644 index 0000000..8225ce6 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/korean/all_test.go @@ -0,0 +1,94 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package korean + +import ( + "strings" + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/enctest" + "golang.org/x/text/transform" +) + +func dec(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Decode", e.NewDecoder(), nil +} +func enc(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Encode", e.NewEncoder(), internal.ErrASCIIReplacement +} + +func TestNonRepertoire(t *testing.T) { + // Pick n large enough to cause an overflow in the destination buffer of + // transform.String. + const n = 10000 + testCases := []struct { + init func(e encoding.Encoding) (string, transform.Transformer, error) + e encoding.Encoding + src, want string + }{ + {dec, EUCKR, "\xfe\xfe", "\ufffd"}, + // {dec, EUCKR, "א", "\ufffd"}, // TODO: why is this different? + + {enc, EUCKR, "א", ""}, + {enc, EUCKR, "aא", "a"}, + {enc, EUCKR, "\uac00א", "\xb0\xa1"}, + // TODO: should we also handle Jamo? + + {dec, EUCKR, "\x80", "\ufffd"}, + {dec, EUCKR, "\xff", "\ufffd"}, + {dec, EUCKR, "\x81", "\ufffd"}, + {dec, EUCKR, "\xb0\x40", "\ufffd@"}, + {dec, EUCKR, "\xb0\xff", "\ufffd"}, + {dec, EUCKR, "\xd0\x20", "\ufffd "}, + {dec, EUCKR, "\xd0\xff", "\ufffd"}, + + {dec, EUCKR, strings.Repeat("\x81", n), strings.Repeat("걖", n/2)}, + } + for _, tc := range testCases { + dir, tr, wantErr := tc.init(tc.e) + + dst, _, err := transform.String(tr, tc.src) + if err != wantErr { + t.Errorf("%s %v(%q): got %v; want %v", dir, tc.e, tc.src, err, wantErr) + } + if got := string(dst); got != tc.want { + t.Errorf("%s %v(%q):\ngot %q\nwant %q", dir, tc.e, tc.src, got, tc.want) + } + } +} + +func TestBasics(t *testing.T) { + // The encoded forms can be verified by the iconv program: + // $ echo 月日は百代 | iconv -f UTF-8 -t SHIFT-JIS | xxd + testCases := []struct { + e encoding.Encoding + encoded string + utf8 string + }{{ + // Korean tests. + // + // "A\uac02\uac35\uac56\ud401B\ud408\ud620\ud624C\u4f3d\u8a70D" is a + // nonsense string that contains ASCII, Hangul and CJK ideographs. + // + // "세계야, 안녕" translates as "Hello, world". + e: EUCKR, + encoded: "A\x81\x41\x81\x61\x81\x81\xc6\xfeB\xc7\xa1\xc7\xfe\xc8\xa1C\xca\xa1\xfd\xfeD", + utf8: "A\uac02\uac35\uac56\ud401B\ud408\ud620\ud624C\u4f3d\u8a70D", + }, { + e: EUCKR, + encoded: "\xbc\xbc\xb0\xe8\xbe\xdf\x2c\x20\xbe\xc8\xb3\xe7", + utf8: "세계야, 안녕", + }} + + for _, tc := range testCases { + enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, "", "") + } +} + +func TestFiles(t *testing.T) { enctest.TestFile(t, EUCKR) } + +func BenchmarkEncoding(b *testing.B) { enctest.Benchmark(b, EUCKR) } diff --git a/vendor/golang.org/x/text/encoding/korean/euckr.go b/vendor/golang.org/x/text/encoding/korean/euckr.go new file mode 100644 index 0000000..034337f --- /dev/null +++ b/vendor/golang.org/x/text/encoding/korean/euckr.go @@ -0,0 +1,177 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package korean + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// All is a list of all defined encodings in this package. +var All = []encoding.Encoding{EUCKR} + +// EUCKR is the EUC-KR encoding, also known as Code Page 949. +var EUCKR encoding.Encoding = &eucKR + +var eucKR = internal.Encoding{ + &internal.SimpleEncoding{eucKRDecoder{}, eucKREncoder{}}, + "EUC-KR", + identifier.EUCKR, +} + +type eucKRDecoder struct{ transform.NopResetter } + +func (eucKRDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + case 0x81 <= c0 && c0 < 0xff: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + break + } + c1 := src[nSrc+1] + size = 2 + if c0 < 0xc7 { + r = 178 * rune(c0-0x81) + switch { + case 0x41 <= c1 && c1 < 0x5b: + r += rune(c1) - (0x41 - 0*26) + case 0x61 <= c1 && c1 < 0x7b: + r += rune(c1) - (0x61 - 1*26) + case 0x81 <= c1 && c1 < 0xff: + r += rune(c1) - (0x81 - 2*26) + default: + goto decError + } + } else if 0xa1 <= c1 && c1 < 0xff { + r = 178*(0xc7-0x81) + rune(c0-0xc7)*94 + rune(c1-0xa1) + } else { + goto decError + } + if int(r) < len(decode) { + r = rune(decode[r]) + if r != 0 { + break + } + } + decError: + r = utf8.RuneError + if c1 < utf8.RuneSelf { + size = 1 + } + + default: + r, size = utf8.RuneError, 1 + break + } + + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type eucKREncoder struct{ transform.NopResetter } + +func (eucKREncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r != 0 { + goto write2 + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r != 0 { + goto write2 + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r != 0 { + goto write2 + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r != 0 { + goto write2 + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r != 0 { + goto write2 + } + case encode5Low <= r && r < encode5High: + if r = rune(encode5[r-encode5Low]); r != 0 { + goto write2 + } + case encode6Low <= r && r < encode6High: + if r = rune(encode6[r-encode6Low]); r != 0 { + goto write2 + } + } + err = internal.ErrASCIIReplacement + break + } + + write2: + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = uint8(r >> 8) + dst[nDst+1] = uint8(r) + nDst += 2 + continue + } + return nDst, nSrc, err +} + +func init() { + // Check that the hard-coded encode switch covers all tables. + if numEncodeTables != 7 { + panic("bad numEncodeTables") + } +} diff --git a/vendor/golang.org/x/text/encoding/korean/maketables.go b/vendor/golang.org/x/text/encoding/korean/maketables.go new file mode 100644 index 0000000..c84034f --- /dev/null +++ b/vendor/golang.org/x/text/encoding/korean/maketables.go @@ -0,0 +1,143 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This program generates tables.go: +// go run maketables.go | gofmt > tables.go + +import ( + "bufio" + "fmt" + "log" + "net/http" + "sort" + "strings" +) + +func main() { + fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n") + fmt.Printf("// Package korean provides Korean encodings such as EUC-KR.\n") + fmt.Printf(`package korean // import "golang.org/x/text/encoding/korean"` + "\n\n") + + res, err := http.Get("http://encoding.spec.whatwg.org/index-euc-kr.txt") + if err != nil { + log.Fatalf("Get: %v", err) + } + defer res.Body.Close() + + mapping := [65536]uint16{} + reverse := [65536]uint16{} + + scanner := bufio.NewScanner(res.Body) + for scanner.Scan() { + s := strings.TrimSpace(scanner.Text()) + if s == "" || s[0] == '#' { + continue + } + x, y := uint16(0), uint16(0) + if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil { + log.Fatalf("could not parse %q", s) + } + if x < 0 || 178*(0xc7-0x81)+(0xfe-0xc7)*94+(0xff-0xa1) <= x { + log.Fatalf("EUC-KR code %d is out of range", x) + } + mapping[x] = y + if reverse[y] == 0 { + c0, c1 := uint16(0), uint16(0) + if x < 178*(0xc7-0x81) { + c0 = uint16(x/178) + 0x81 + c1 = uint16(x % 178) + switch { + case c1 < 1*26: + c1 += 0x41 + case c1 < 2*26: + c1 += 0x47 + default: + c1 += 0x4d + } + } else { + x -= 178 * (0xc7 - 0x81) + c0 = uint16(x/94) + 0xc7 + c1 = uint16(x%94) + 0xa1 + } + reverse[y] = c0<<8 | c1 + } + } + if err := scanner.Err(); err != nil { + log.Fatalf("scanner error: %v", err) + } + + fmt.Printf("// decode is the decoding table from EUC-KR code to Unicode.\n") + fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-euc-kr.txt\n") + fmt.Printf("var decode = [...]uint16{\n") + for i, v := range mapping { + if v != 0 { + fmt.Printf("\t%d: 0x%04X,\n", i, v) + } + } + fmt.Printf("}\n\n") + + // Any run of at least separation continuous zero entries in the reverse map will + // be a separate encode table. + const separation = 1024 + + intervals := []interval(nil) + low, high := -1, -1 + for i, v := range reverse { + if v == 0 { + continue + } + if low < 0 { + low = i + } else if i-high >= separation { + if high >= 0 { + intervals = append(intervals, interval{low, high}) + } + low = i + } + high = i + 1 + } + if high >= 0 { + intervals = append(intervals, interval{low, high}) + } + sort.Sort(byDecreasingLength(intervals)) + + fmt.Printf("const numEncodeTables = %d\n\n", len(intervals)) + fmt.Printf("// encodeX are the encoding tables from Unicode to EUC-KR code,\n") + fmt.Printf("// sorted by decreasing length.\n") + for i, v := range intervals { + fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high) + } + fmt.Printf("\n") + + for i, v := range intervals { + fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high) + fmt.Printf("var encode%d = [...]uint16{\n", i) + for j := v.low; j < v.high; j++ { + x := reverse[j] + if x == 0 { + continue + } + fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x) + } + fmt.Printf("}\n\n") + } +} + +// interval is a half-open interval [low, high). +type interval struct { + low, high int +} + +func (i interval) len() int { return i.high - i.low } + +// byDecreasingLength sorts intervals by decreasing length. +type byDecreasingLength []interval + +func (b byDecreasingLength) Len() int { return len(b) } +func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() } +func (b byDecreasingLength) Swap(i, j int) { b[i], b[j] = b[j], b[i] } diff --git a/vendor/golang.org/x/text/encoding/korean/tables.go b/vendor/golang.org/x/text/encoding/korean/tables.go new file mode 100644 index 0000000..0480e85 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/korean/tables.go @@ -0,0 +1,34152 @@ +// generated by go run maketables.go; DO NOT EDIT + +// Package korean provides Korean encodings such as EUC-KR. +package korean // import "golang.org/x/text/encoding/korean" + +// decode is the decoding table from EUC-KR code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-euc-kr.txt +var decode = [...]uint16{ + 0: 0xAC02, + 1: 0xAC03, + 2: 0xAC05, + 3: 0xAC06, + 4: 0xAC0B, + 5: 0xAC0C, + 6: 0xAC0D, + 7: 0xAC0E, + 8: 0xAC0F, + 9: 0xAC18, + 10: 0xAC1E, + 11: 0xAC1F, + 12: 0xAC21, + 13: 0xAC22, + 14: 0xAC23, + 15: 0xAC25, + 16: 0xAC26, + 17: 0xAC27, + 18: 0xAC28, + 19: 0xAC29, + 20: 0xAC2A, + 21: 0xAC2B, + 22: 0xAC2E, + 23: 0xAC32, + 24: 0xAC33, + 25: 0xAC34, + 26: 0xAC35, + 27: 0xAC36, + 28: 0xAC37, + 29: 0xAC3A, + 30: 0xAC3B, + 31: 0xAC3D, + 32: 0xAC3E, + 33: 0xAC3F, + 34: 0xAC41, + 35: 0xAC42, + 36: 0xAC43, + 37: 0xAC44, + 38: 0xAC45, + 39: 0xAC46, + 40: 0xAC47, + 41: 0xAC48, + 42: 0xAC49, + 43: 0xAC4A, + 44: 0xAC4C, + 45: 0xAC4E, + 46: 0xAC4F, + 47: 0xAC50, + 48: 0xAC51, + 49: 0xAC52, + 50: 0xAC53, + 51: 0xAC55, + 52: 0xAC56, + 53: 0xAC57, + 54: 0xAC59, + 55: 0xAC5A, + 56: 0xAC5B, + 57: 0xAC5D, + 58: 0xAC5E, + 59: 0xAC5F, + 60: 0xAC60, + 61: 0xAC61, + 62: 0xAC62, + 63: 0xAC63, + 64: 0xAC64, + 65: 0xAC65, + 66: 0xAC66, + 67: 0xAC67, + 68: 0xAC68, + 69: 0xAC69, + 70: 0xAC6A, + 71: 0xAC6B, + 72: 0xAC6C, + 73: 0xAC6D, + 74: 0xAC6E, + 75: 0xAC6F, + 76: 0xAC72, + 77: 0xAC73, + 78: 0xAC75, + 79: 0xAC76, + 80: 0xAC79, + 81: 0xAC7B, + 82: 0xAC7C, + 83: 0xAC7D, + 84: 0xAC7E, + 85: 0xAC7F, + 86: 0xAC82, + 87: 0xAC87, + 88: 0xAC88, + 89: 0xAC8D, + 90: 0xAC8E, + 91: 0xAC8F, + 92: 0xAC91, + 93: 0xAC92, + 94: 0xAC93, + 95: 0xAC95, + 96: 0xAC96, + 97: 0xAC97, + 98: 0xAC98, + 99: 0xAC99, + 100: 0xAC9A, + 101: 0xAC9B, + 102: 0xAC9E, + 103: 0xACA2, + 104: 0xACA3, + 105: 0xACA4, + 106: 0xACA5, + 107: 0xACA6, + 108: 0xACA7, + 109: 0xACAB, + 110: 0xACAD, + 111: 0xACAE, + 112: 0xACB1, + 113: 0xACB2, + 114: 0xACB3, + 115: 0xACB4, + 116: 0xACB5, + 117: 0xACB6, + 118: 0xACB7, + 119: 0xACBA, + 120: 0xACBE, + 121: 0xACBF, + 122: 0xACC0, + 123: 0xACC2, + 124: 0xACC3, + 125: 0xACC5, + 126: 0xACC6, + 127: 0xACC7, + 128: 0xACC9, + 129: 0xACCA, + 130: 0xACCB, + 131: 0xACCD, + 132: 0xACCE, + 133: 0xACCF, + 134: 0xACD0, + 135: 0xACD1, + 136: 0xACD2, + 137: 0xACD3, + 138: 0xACD4, + 139: 0xACD6, + 140: 0xACD8, + 141: 0xACD9, + 142: 0xACDA, + 143: 0xACDB, + 144: 0xACDC, + 145: 0xACDD, + 146: 0xACDE, + 147: 0xACDF, + 148: 0xACE2, + 149: 0xACE3, + 150: 0xACE5, + 151: 0xACE6, + 152: 0xACE9, + 153: 0xACEB, + 154: 0xACED, + 155: 0xACEE, + 156: 0xACF2, + 157: 0xACF4, + 158: 0xACF7, + 159: 0xACF8, + 160: 0xACF9, + 161: 0xACFA, + 162: 0xACFB, + 163: 0xACFE, + 164: 0xACFF, + 165: 0xAD01, + 166: 0xAD02, + 167: 0xAD03, + 168: 0xAD05, + 169: 0xAD07, + 170: 0xAD08, + 171: 0xAD09, + 172: 0xAD0A, + 173: 0xAD0B, + 174: 0xAD0E, + 175: 0xAD10, + 176: 0xAD12, + 177: 0xAD13, + 178: 0xAD14, + 179: 0xAD15, + 180: 0xAD16, + 181: 0xAD17, + 182: 0xAD19, + 183: 0xAD1A, + 184: 0xAD1B, + 185: 0xAD1D, + 186: 0xAD1E, + 187: 0xAD1F, + 188: 0xAD21, + 189: 0xAD22, + 190: 0xAD23, + 191: 0xAD24, + 192: 0xAD25, + 193: 0xAD26, + 194: 0xAD27, + 195: 0xAD28, + 196: 0xAD2A, + 197: 0xAD2B, + 198: 0xAD2E, + 199: 0xAD2F, + 200: 0xAD30, + 201: 0xAD31, + 202: 0xAD32, + 203: 0xAD33, + 204: 0xAD36, + 205: 0xAD37, + 206: 0xAD39, + 207: 0xAD3A, + 208: 0xAD3B, + 209: 0xAD3D, + 210: 0xAD3E, + 211: 0xAD3F, + 212: 0xAD40, + 213: 0xAD41, + 214: 0xAD42, + 215: 0xAD43, + 216: 0xAD46, + 217: 0xAD48, + 218: 0xAD4A, + 219: 0xAD4B, + 220: 0xAD4C, + 221: 0xAD4D, + 222: 0xAD4E, + 223: 0xAD4F, + 224: 0xAD51, + 225: 0xAD52, + 226: 0xAD53, + 227: 0xAD55, + 228: 0xAD56, + 229: 0xAD57, + 230: 0xAD59, + 231: 0xAD5A, + 232: 0xAD5B, + 233: 0xAD5C, + 234: 0xAD5D, + 235: 0xAD5E, + 236: 0xAD5F, + 237: 0xAD60, + 238: 0xAD62, + 239: 0xAD64, + 240: 0xAD65, + 241: 0xAD66, + 242: 0xAD67, + 243: 0xAD68, + 244: 0xAD69, + 245: 0xAD6A, + 246: 0xAD6B, + 247: 0xAD6E, + 248: 0xAD6F, + 249: 0xAD71, + 250: 0xAD72, + 251: 0xAD77, + 252: 0xAD78, + 253: 0xAD79, + 254: 0xAD7A, + 255: 0xAD7E, + 256: 0xAD80, + 257: 0xAD83, + 258: 0xAD84, + 259: 0xAD85, + 260: 0xAD86, + 261: 0xAD87, + 262: 0xAD8A, + 263: 0xAD8B, + 264: 0xAD8D, + 265: 0xAD8E, + 266: 0xAD8F, + 267: 0xAD91, + 268: 0xAD92, + 269: 0xAD93, + 270: 0xAD94, + 271: 0xAD95, + 272: 0xAD96, + 273: 0xAD97, + 274: 0xAD98, + 275: 0xAD99, + 276: 0xAD9A, + 277: 0xAD9B, + 278: 0xAD9E, + 279: 0xAD9F, + 280: 0xADA0, + 281: 0xADA1, + 282: 0xADA2, + 283: 0xADA3, + 284: 0xADA5, + 285: 0xADA6, + 286: 0xADA7, + 287: 0xADA8, + 288: 0xADA9, + 289: 0xADAA, + 290: 0xADAB, + 291: 0xADAC, + 292: 0xADAD, + 293: 0xADAE, + 294: 0xADAF, + 295: 0xADB0, + 296: 0xADB1, + 297: 0xADB2, + 298: 0xADB3, + 299: 0xADB4, + 300: 0xADB5, + 301: 0xADB6, + 302: 0xADB8, + 303: 0xADB9, + 304: 0xADBA, + 305: 0xADBB, + 306: 0xADBC, + 307: 0xADBD, + 308: 0xADBE, + 309: 0xADBF, + 310: 0xADC2, + 311: 0xADC3, + 312: 0xADC5, + 313: 0xADC6, + 314: 0xADC7, + 315: 0xADC9, + 316: 0xADCA, + 317: 0xADCB, + 318: 0xADCC, + 319: 0xADCD, + 320: 0xADCE, + 321: 0xADCF, + 322: 0xADD2, + 323: 0xADD4, + 324: 0xADD5, + 325: 0xADD6, + 326: 0xADD7, + 327: 0xADD8, + 328: 0xADD9, + 329: 0xADDA, + 330: 0xADDB, + 331: 0xADDD, + 332: 0xADDE, + 333: 0xADDF, + 334: 0xADE1, + 335: 0xADE2, + 336: 0xADE3, + 337: 0xADE5, + 338: 0xADE6, + 339: 0xADE7, + 340: 0xADE8, + 341: 0xADE9, + 342: 0xADEA, + 343: 0xADEB, + 344: 0xADEC, + 345: 0xADED, + 346: 0xADEE, + 347: 0xADEF, + 348: 0xADF0, + 349: 0xADF1, + 350: 0xADF2, + 351: 0xADF3, + 352: 0xADF4, + 353: 0xADF5, + 354: 0xADF6, + 355: 0xADF7, + 356: 0xADFA, + 357: 0xADFB, + 358: 0xADFD, + 359: 0xADFE, + 360: 0xAE02, + 361: 0xAE03, + 362: 0xAE04, + 363: 0xAE05, + 364: 0xAE06, + 365: 0xAE07, + 366: 0xAE0A, + 367: 0xAE0C, + 368: 0xAE0E, + 369: 0xAE0F, + 370: 0xAE10, + 371: 0xAE11, + 372: 0xAE12, + 373: 0xAE13, + 374: 0xAE15, + 375: 0xAE16, + 376: 0xAE17, + 377: 0xAE18, + 378: 0xAE19, + 379: 0xAE1A, + 380: 0xAE1B, + 381: 0xAE1C, + 382: 0xAE1D, + 383: 0xAE1E, + 384: 0xAE1F, + 385: 0xAE20, + 386: 0xAE21, + 387: 0xAE22, + 388: 0xAE23, + 389: 0xAE24, + 390: 0xAE25, + 391: 0xAE26, + 392: 0xAE27, + 393: 0xAE28, + 394: 0xAE29, + 395: 0xAE2A, + 396: 0xAE2B, + 397: 0xAE2C, + 398: 0xAE2D, + 399: 0xAE2E, + 400: 0xAE2F, + 401: 0xAE32, + 402: 0xAE33, + 403: 0xAE35, + 404: 0xAE36, + 405: 0xAE39, + 406: 0xAE3B, + 407: 0xAE3C, + 408: 0xAE3D, + 409: 0xAE3E, + 410: 0xAE3F, + 411: 0xAE42, + 412: 0xAE44, + 413: 0xAE47, + 414: 0xAE48, + 415: 0xAE49, + 416: 0xAE4B, + 417: 0xAE4F, + 418: 0xAE51, + 419: 0xAE52, + 420: 0xAE53, + 421: 0xAE55, + 422: 0xAE57, + 423: 0xAE58, + 424: 0xAE59, + 425: 0xAE5A, + 426: 0xAE5B, + 427: 0xAE5E, + 428: 0xAE62, + 429: 0xAE63, + 430: 0xAE64, + 431: 0xAE66, + 432: 0xAE67, + 433: 0xAE6A, + 434: 0xAE6B, + 435: 0xAE6D, + 436: 0xAE6E, + 437: 0xAE6F, + 438: 0xAE71, + 439: 0xAE72, + 440: 0xAE73, + 441: 0xAE74, + 442: 0xAE75, + 443: 0xAE76, + 444: 0xAE77, + 445: 0xAE7A, + 446: 0xAE7E, + 447: 0xAE7F, + 448: 0xAE80, + 449: 0xAE81, + 450: 0xAE82, + 451: 0xAE83, + 452: 0xAE86, + 453: 0xAE87, + 454: 0xAE88, + 455: 0xAE89, + 456: 0xAE8A, + 457: 0xAE8B, + 458: 0xAE8D, + 459: 0xAE8E, + 460: 0xAE8F, + 461: 0xAE90, + 462: 0xAE91, + 463: 0xAE92, + 464: 0xAE93, + 465: 0xAE94, + 466: 0xAE95, + 467: 0xAE96, + 468: 0xAE97, + 469: 0xAE98, + 470: 0xAE99, + 471: 0xAE9A, + 472: 0xAE9B, + 473: 0xAE9C, + 474: 0xAE9D, + 475: 0xAE9E, + 476: 0xAE9F, + 477: 0xAEA0, + 478: 0xAEA1, + 479: 0xAEA2, + 480: 0xAEA3, + 481: 0xAEA4, + 482: 0xAEA5, + 483: 0xAEA6, + 484: 0xAEA7, + 485: 0xAEA8, + 486: 0xAEA9, + 487: 0xAEAA, + 488: 0xAEAB, + 489: 0xAEAC, + 490: 0xAEAD, + 491: 0xAEAE, + 492: 0xAEAF, + 493: 0xAEB0, + 494: 0xAEB1, + 495: 0xAEB2, + 496: 0xAEB3, + 497: 0xAEB4, + 498: 0xAEB5, + 499: 0xAEB6, + 500: 0xAEB7, + 501: 0xAEB8, + 502: 0xAEB9, + 503: 0xAEBA, + 504: 0xAEBB, + 505: 0xAEBF, + 506: 0xAEC1, + 507: 0xAEC2, + 508: 0xAEC3, + 509: 0xAEC5, + 510: 0xAEC6, + 511: 0xAEC7, + 512: 0xAEC8, + 513: 0xAEC9, + 514: 0xAECA, + 515: 0xAECB, + 516: 0xAECE, + 517: 0xAED2, + 518: 0xAED3, + 519: 0xAED4, + 520: 0xAED5, + 521: 0xAED6, + 522: 0xAED7, + 523: 0xAEDA, + 524: 0xAEDB, + 525: 0xAEDD, + 526: 0xAEDE, + 527: 0xAEDF, + 528: 0xAEE0, + 529: 0xAEE1, + 530: 0xAEE2, + 531: 0xAEE3, + 532: 0xAEE4, + 533: 0xAEE5, + 534: 0xAEE6, + 535: 0xAEE7, + 536: 0xAEE9, + 537: 0xAEEA, + 538: 0xAEEC, + 539: 0xAEEE, + 540: 0xAEEF, + 541: 0xAEF0, + 542: 0xAEF1, + 543: 0xAEF2, + 544: 0xAEF3, + 545: 0xAEF5, + 546: 0xAEF6, + 547: 0xAEF7, + 548: 0xAEF9, + 549: 0xAEFA, + 550: 0xAEFB, + 551: 0xAEFD, + 552: 0xAEFE, + 553: 0xAEFF, + 554: 0xAF00, + 555: 0xAF01, + 556: 0xAF02, + 557: 0xAF03, + 558: 0xAF04, + 559: 0xAF05, + 560: 0xAF06, + 561: 0xAF09, + 562: 0xAF0A, + 563: 0xAF0B, + 564: 0xAF0C, + 565: 0xAF0E, + 566: 0xAF0F, + 567: 0xAF11, + 568: 0xAF12, + 569: 0xAF13, + 570: 0xAF14, + 571: 0xAF15, + 572: 0xAF16, + 573: 0xAF17, + 574: 0xAF18, + 575: 0xAF19, + 576: 0xAF1A, + 577: 0xAF1B, + 578: 0xAF1C, + 579: 0xAF1D, + 580: 0xAF1E, + 581: 0xAF1F, + 582: 0xAF20, + 583: 0xAF21, + 584: 0xAF22, + 585: 0xAF23, + 586: 0xAF24, + 587: 0xAF25, + 588: 0xAF26, + 589: 0xAF27, + 590: 0xAF28, + 591: 0xAF29, + 592: 0xAF2A, + 593: 0xAF2B, + 594: 0xAF2E, + 595: 0xAF2F, + 596: 0xAF31, + 597: 0xAF33, + 598: 0xAF35, + 599: 0xAF36, + 600: 0xAF37, + 601: 0xAF38, + 602: 0xAF39, + 603: 0xAF3A, + 604: 0xAF3B, + 605: 0xAF3E, + 606: 0xAF40, + 607: 0xAF44, + 608: 0xAF45, + 609: 0xAF46, + 610: 0xAF47, + 611: 0xAF4A, + 612: 0xAF4B, + 613: 0xAF4C, + 614: 0xAF4D, + 615: 0xAF4E, + 616: 0xAF4F, + 617: 0xAF51, + 618: 0xAF52, + 619: 0xAF53, + 620: 0xAF54, + 621: 0xAF55, + 622: 0xAF56, + 623: 0xAF57, + 624: 0xAF58, + 625: 0xAF59, + 626: 0xAF5A, + 627: 0xAF5B, + 628: 0xAF5E, + 629: 0xAF5F, + 630: 0xAF60, + 631: 0xAF61, + 632: 0xAF62, + 633: 0xAF63, + 634: 0xAF66, + 635: 0xAF67, + 636: 0xAF68, + 637: 0xAF69, + 638: 0xAF6A, + 639: 0xAF6B, + 640: 0xAF6C, + 641: 0xAF6D, + 642: 0xAF6E, + 643: 0xAF6F, + 644: 0xAF70, + 645: 0xAF71, + 646: 0xAF72, + 647: 0xAF73, + 648: 0xAF74, + 649: 0xAF75, + 650: 0xAF76, + 651: 0xAF77, + 652: 0xAF78, + 653: 0xAF7A, + 654: 0xAF7B, + 655: 0xAF7C, + 656: 0xAF7D, + 657: 0xAF7E, + 658: 0xAF7F, + 659: 0xAF81, + 660: 0xAF82, + 661: 0xAF83, + 662: 0xAF85, + 663: 0xAF86, + 664: 0xAF87, + 665: 0xAF89, + 666: 0xAF8A, + 667: 0xAF8B, + 668: 0xAF8C, + 669: 0xAF8D, + 670: 0xAF8E, + 671: 0xAF8F, + 672: 0xAF92, + 673: 0xAF93, + 674: 0xAF94, + 675: 0xAF96, + 676: 0xAF97, + 677: 0xAF98, + 678: 0xAF99, + 679: 0xAF9A, + 680: 0xAF9B, + 681: 0xAF9D, + 682: 0xAF9E, + 683: 0xAF9F, + 684: 0xAFA0, + 685: 0xAFA1, + 686: 0xAFA2, + 687: 0xAFA3, + 688: 0xAFA4, + 689: 0xAFA5, + 690: 0xAFA6, + 691: 0xAFA7, + 692: 0xAFA8, + 693: 0xAFA9, + 694: 0xAFAA, + 695: 0xAFAB, + 696: 0xAFAC, + 697: 0xAFAD, + 698: 0xAFAE, + 699: 0xAFAF, + 700: 0xAFB0, + 701: 0xAFB1, + 702: 0xAFB2, + 703: 0xAFB3, + 704: 0xAFB4, + 705: 0xAFB5, + 706: 0xAFB6, + 707: 0xAFB7, + 708: 0xAFBA, + 709: 0xAFBB, + 710: 0xAFBD, + 711: 0xAFBE, + 712: 0xAFBF, + 713: 0xAFC1, + 714: 0xAFC2, + 715: 0xAFC3, + 716: 0xAFC4, + 717: 0xAFC5, + 718: 0xAFC6, + 719: 0xAFCA, + 720: 0xAFCC, + 721: 0xAFCF, + 722: 0xAFD0, + 723: 0xAFD1, + 724: 0xAFD2, + 725: 0xAFD3, + 726: 0xAFD5, + 727: 0xAFD6, + 728: 0xAFD7, + 729: 0xAFD8, + 730: 0xAFD9, + 731: 0xAFDA, + 732: 0xAFDB, + 733: 0xAFDD, + 734: 0xAFDE, + 735: 0xAFDF, + 736: 0xAFE0, + 737: 0xAFE1, + 738: 0xAFE2, + 739: 0xAFE3, + 740: 0xAFE4, + 741: 0xAFE5, + 742: 0xAFE6, + 743: 0xAFE7, + 744: 0xAFEA, + 745: 0xAFEB, + 746: 0xAFEC, + 747: 0xAFED, + 748: 0xAFEE, + 749: 0xAFEF, + 750: 0xAFF2, + 751: 0xAFF3, + 752: 0xAFF5, + 753: 0xAFF6, + 754: 0xAFF7, + 755: 0xAFF9, + 756: 0xAFFA, + 757: 0xAFFB, + 758: 0xAFFC, + 759: 0xAFFD, + 760: 0xAFFE, + 761: 0xAFFF, + 762: 0xB002, + 763: 0xB003, + 764: 0xB005, + 765: 0xB006, + 766: 0xB007, + 767: 0xB008, + 768: 0xB009, + 769: 0xB00A, + 770: 0xB00B, + 771: 0xB00D, + 772: 0xB00E, + 773: 0xB00F, + 774: 0xB011, + 775: 0xB012, + 776: 0xB013, + 777: 0xB015, + 778: 0xB016, + 779: 0xB017, + 780: 0xB018, + 781: 0xB019, + 782: 0xB01A, + 783: 0xB01B, + 784: 0xB01E, + 785: 0xB01F, + 786: 0xB020, + 787: 0xB021, + 788: 0xB022, + 789: 0xB023, + 790: 0xB024, + 791: 0xB025, + 792: 0xB026, + 793: 0xB027, + 794: 0xB029, + 795: 0xB02A, + 796: 0xB02B, + 797: 0xB02C, + 798: 0xB02D, + 799: 0xB02E, + 800: 0xB02F, + 801: 0xB030, + 802: 0xB031, + 803: 0xB032, + 804: 0xB033, + 805: 0xB034, + 806: 0xB035, + 807: 0xB036, + 808: 0xB037, + 809: 0xB038, + 810: 0xB039, + 811: 0xB03A, + 812: 0xB03B, + 813: 0xB03C, + 814: 0xB03D, + 815: 0xB03E, + 816: 0xB03F, + 817: 0xB040, + 818: 0xB041, + 819: 0xB042, + 820: 0xB043, + 821: 0xB046, + 822: 0xB047, + 823: 0xB049, + 824: 0xB04B, + 825: 0xB04D, + 826: 0xB04F, + 827: 0xB050, + 828: 0xB051, + 829: 0xB052, + 830: 0xB056, + 831: 0xB058, + 832: 0xB05A, + 833: 0xB05B, + 834: 0xB05C, + 835: 0xB05E, + 836: 0xB05F, + 837: 0xB060, + 838: 0xB061, + 839: 0xB062, + 840: 0xB063, + 841: 0xB064, + 842: 0xB065, + 843: 0xB066, + 844: 0xB067, + 845: 0xB068, + 846: 0xB069, + 847: 0xB06A, + 848: 0xB06B, + 849: 0xB06C, + 850: 0xB06D, + 851: 0xB06E, + 852: 0xB06F, + 853: 0xB070, + 854: 0xB071, + 855: 0xB072, + 856: 0xB073, + 857: 0xB074, + 858: 0xB075, + 859: 0xB076, + 860: 0xB077, + 861: 0xB078, + 862: 0xB079, + 863: 0xB07A, + 864: 0xB07B, + 865: 0xB07E, + 866: 0xB07F, + 867: 0xB081, + 868: 0xB082, + 869: 0xB083, + 870: 0xB085, + 871: 0xB086, + 872: 0xB087, + 873: 0xB088, + 874: 0xB089, + 875: 0xB08A, + 876: 0xB08B, + 877: 0xB08E, + 878: 0xB090, + 879: 0xB092, + 880: 0xB093, + 881: 0xB094, + 882: 0xB095, + 883: 0xB096, + 884: 0xB097, + 885: 0xB09B, + 886: 0xB09D, + 887: 0xB09E, + 888: 0xB0A3, + 889: 0xB0A4, + 890: 0xB0A5, + 891: 0xB0A6, + 892: 0xB0A7, + 893: 0xB0AA, + 894: 0xB0B0, + 895: 0xB0B2, + 896: 0xB0B6, + 897: 0xB0B7, + 898: 0xB0B9, + 899: 0xB0BA, + 900: 0xB0BB, + 901: 0xB0BD, + 902: 0xB0BE, + 903: 0xB0BF, + 904: 0xB0C0, + 905: 0xB0C1, + 906: 0xB0C2, + 907: 0xB0C3, + 908: 0xB0C6, + 909: 0xB0CA, + 910: 0xB0CB, + 911: 0xB0CC, + 912: 0xB0CD, + 913: 0xB0CE, + 914: 0xB0CF, + 915: 0xB0D2, + 916: 0xB0D3, + 917: 0xB0D5, + 918: 0xB0D6, + 919: 0xB0D7, + 920: 0xB0D9, + 921: 0xB0DA, + 922: 0xB0DB, + 923: 0xB0DC, + 924: 0xB0DD, + 925: 0xB0DE, + 926: 0xB0DF, + 927: 0xB0E1, + 928: 0xB0E2, + 929: 0xB0E3, + 930: 0xB0E4, + 931: 0xB0E6, + 932: 0xB0E7, + 933: 0xB0E8, + 934: 0xB0E9, + 935: 0xB0EA, + 936: 0xB0EB, + 937: 0xB0EC, + 938: 0xB0ED, + 939: 0xB0EE, + 940: 0xB0EF, + 941: 0xB0F0, + 942: 0xB0F1, + 943: 0xB0F2, + 944: 0xB0F3, + 945: 0xB0F4, + 946: 0xB0F5, + 947: 0xB0F6, + 948: 0xB0F7, + 949: 0xB0F8, + 950: 0xB0F9, + 951: 0xB0FA, + 952: 0xB0FB, + 953: 0xB0FC, + 954: 0xB0FD, + 955: 0xB0FE, + 956: 0xB0FF, + 957: 0xB100, + 958: 0xB101, + 959: 0xB102, + 960: 0xB103, + 961: 0xB104, + 962: 0xB105, + 963: 0xB106, + 964: 0xB107, + 965: 0xB10A, + 966: 0xB10D, + 967: 0xB10E, + 968: 0xB10F, + 969: 0xB111, + 970: 0xB114, + 971: 0xB115, + 972: 0xB116, + 973: 0xB117, + 974: 0xB11A, + 975: 0xB11E, + 976: 0xB11F, + 977: 0xB120, + 978: 0xB121, + 979: 0xB122, + 980: 0xB126, + 981: 0xB127, + 982: 0xB129, + 983: 0xB12A, + 984: 0xB12B, + 985: 0xB12D, + 986: 0xB12E, + 987: 0xB12F, + 988: 0xB130, + 989: 0xB131, + 990: 0xB132, + 991: 0xB133, + 992: 0xB136, + 993: 0xB13A, + 994: 0xB13B, + 995: 0xB13C, + 996: 0xB13D, + 997: 0xB13E, + 998: 0xB13F, + 999: 0xB142, + 1000: 0xB143, + 1001: 0xB145, + 1002: 0xB146, + 1003: 0xB147, + 1004: 0xB149, + 1005: 0xB14A, + 1006: 0xB14B, + 1007: 0xB14C, + 1008: 0xB14D, + 1009: 0xB14E, + 1010: 0xB14F, + 1011: 0xB152, + 1012: 0xB153, + 1013: 0xB156, + 1014: 0xB157, + 1015: 0xB159, + 1016: 0xB15A, + 1017: 0xB15B, + 1018: 0xB15D, + 1019: 0xB15E, + 1020: 0xB15F, + 1021: 0xB161, + 1022: 0xB162, + 1023: 0xB163, + 1024: 0xB164, + 1025: 0xB165, + 1026: 0xB166, + 1027: 0xB167, + 1028: 0xB168, + 1029: 0xB169, + 1030: 0xB16A, + 1031: 0xB16B, + 1032: 0xB16C, + 1033: 0xB16D, + 1034: 0xB16E, + 1035: 0xB16F, + 1036: 0xB170, + 1037: 0xB171, + 1038: 0xB172, + 1039: 0xB173, + 1040: 0xB174, + 1041: 0xB175, + 1042: 0xB176, + 1043: 0xB177, + 1044: 0xB17A, + 1045: 0xB17B, + 1046: 0xB17D, + 1047: 0xB17E, + 1048: 0xB17F, + 1049: 0xB181, + 1050: 0xB183, + 1051: 0xB184, + 1052: 0xB185, + 1053: 0xB186, + 1054: 0xB187, + 1055: 0xB18A, + 1056: 0xB18C, + 1057: 0xB18E, + 1058: 0xB18F, + 1059: 0xB190, + 1060: 0xB191, + 1061: 0xB195, + 1062: 0xB196, + 1063: 0xB197, + 1064: 0xB199, + 1065: 0xB19A, + 1066: 0xB19B, + 1067: 0xB19D, + 1068: 0xB19E, + 1069: 0xB19F, + 1070: 0xB1A0, + 1071: 0xB1A1, + 1072: 0xB1A2, + 1073: 0xB1A3, + 1074: 0xB1A4, + 1075: 0xB1A5, + 1076: 0xB1A6, + 1077: 0xB1A7, + 1078: 0xB1A9, + 1079: 0xB1AA, + 1080: 0xB1AB, + 1081: 0xB1AC, + 1082: 0xB1AD, + 1083: 0xB1AE, + 1084: 0xB1AF, + 1085: 0xB1B0, + 1086: 0xB1B1, + 1087: 0xB1B2, + 1088: 0xB1B3, + 1089: 0xB1B4, + 1090: 0xB1B5, + 1091: 0xB1B6, + 1092: 0xB1B7, + 1093: 0xB1B8, + 1094: 0xB1B9, + 1095: 0xB1BA, + 1096: 0xB1BB, + 1097: 0xB1BC, + 1098: 0xB1BD, + 1099: 0xB1BE, + 1100: 0xB1BF, + 1101: 0xB1C0, + 1102: 0xB1C1, + 1103: 0xB1C2, + 1104: 0xB1C3, + 1105: 0xB1C4, + 1106: 0xB1C5, + 1107: 0xB1C6, + 1108: 0xB1C7, + 1109: 0xB1C8, + 1110: 0xB1C9, + 1111: 0xB1CA, + 1112: 0xB1CB, + 1113: 0xB1CD, + 1114: 0xB1CE, + 1115: 0xB1CF, + 1116: 0xB1D1, + 1117: 0xB1D2, + 1118: 0xB1D3, + 1119: 0xB1D5, + 1120: 0xB1D6, + 1121: 0xB1D7, + 1122: 0xB1D8, + 1123: 0xB1D9, + 1124: 0xB1DA, + 1125: 0xB1DB, + 1126: 0xB1DE, + 1127: 0xB1E0, + 1128: 0xB1E1, + 1129: 0xB1E2, + 1130: 0xB1E3, + 1131: 0xB1E4, + 1132: 0xB1E5, + 1133: 0xB1E6, + 1134: 0xB1E7, + 1135: 0xB1EA, + 1136: 0xB1EB, + 1137: 0xB1ED, + 1138: 0xB1EE, + 1139: 0xB1EF, + 1140: 0xB1F1, + 1141: 0xB1F2, + 1142: 0xB1F3, + 1143: 0xB1F4, + 1144: 0xB1F5, + 1145: 0xB1F6, + 1146: 0xB1F7, + 1147: 0xB1F8, + 1148: 0xB1FA, + 1149: 0xB1FC, + 1150: 0xB1FE, + 1151: 0xB1FF, + 1152: 0xB200, + 1153: 0xB201, + 1154: 0xB202, + 1155: 0xB203, + 1156: 0xB206, + 1157: 0xB207, + 1158: 0xB209, + 1159: 0xB20A, + 1160: 0xB20D, + 1161: 0xB20E, + 1162: 0xB20F, + 1163: 0xB210, + 1164: 0xB211, + 1165: 0xB212, + 1166: 0xB213, + 1167: 0xB216, + 1168: 0xB218, + 1169: 0xB21A, + 1170: 0xB21B, + 1171: 0xB21C, + 1172: 0xB21D, + 1173: 0xB21E, + 1174: 0xB21F, + 1175: 0xB221, + 1176: 0xB222, + 1177: 0xB223, + 1178: 0xB224, + 1179: 0xB225, + 1180: 0xB226, + 1181: 0xB227, + 1182: 0xB228, + 1183: 0xB229, + 1184: 0xB22A, + 1185: 0xB22B, + 1186: 0xB22C, + 1187: 0xB22D, + 1188: 0xB22E, + 1189: 0xB22F, + 1190: 0xB230, + 1191: 0xB231, + 1192: 0xB232, + 1193: 0xB233, + 1194: 0xB235, + 1195: 0xB236, + 1196: 0xB237, + 1197: 0xB238, + 1198: 0xB239, + 1199: 0xB23A, + 1200: 0xB23B, + 1201: 0xB23D, + 1202: 0xB23E, + 1203: 0xB23F, + 1204: 0xB240, + 1205: 0xB241, + 1206: 0xB242, + 1207: 0xB243, + 1208: 0xB244, + 1209: 0xB245, + 1210: 0xB246, + 1211: 0xB247, + 1212: 0xB248, + 1213: 0xB249, + 1214: 0xB24A, + 1215: 0xB24B, + 1216: 0xB24C, + 1217: 0xB24D, + 1218: 0xB24E, + 1219: 0xB24F, + 1220: 0xB250, + 1221: 0xB251, + 1222: 0xB252, + 1223: 0xB253, + 1224: 0xB254, + 1225: 0xB255, + 1226: 0xB256, + 1227: 0xB257, + 1228: 0xB259, + 1229: 0xB25A, + 1230: 0xB25B, + 1231: 0xB25D, + 1232: 0xB25E, + 1233: 0xB25F, + 1234: 0xB261, + 1235: 0xB262, + 1236: 0xB263, + 1237: 0xB264, + 1238: 0xB265, + 1239: 0xB266, + 1240: 0xB267, + 1241: 0xB26A, + 1242: 0xB26B, + 1243: 0xB26C, + 1244: 0xB26D, + 1245: 0xB26E, + 1246: 0xB26F, + 1247: 0xB270, + 1248: 0xB271, + 1249: 0xB272, + 1250: 0xB273, + 1251: 0xB276, + 1252: 0xB277, + 1253: 0xB278, + 1254: 0xB279, + 1255: 0xB27A, + 1256: 0xB27B, + 1257: 0xB27D, + 1258: 0xB27E, + 1259: 0xB27F, + 1260: 0xB280, + 1261: 0xB281, + 1262: 0xB282, + 1263: 0xB283, + 1264: 0xB286, + 1265: 0xB287, + 1266: 0xB288, + 1267: 0xB28A, + 1268: 0xB28B, + 1269: 0xB28C, + 1270: 0xB28D, + 1271: 0xB28E, + 1272: 0xB28F, + 1273: 0xB292, + 1274: 0xB293, + 1275: 0xB295, + 1276: 0xB296, + 1277: 0xB297, + 1278: 0xB29B, + 1279: 0xB29C, + 1280: 0xB29D, + 1281: 0xB29E, + 1282: 0xB29F, + 1283: 0xB2A2, + 1284: 0xB2A4, + 1285: 0xB2A7, + 1286: 0xB2A8, + 1287: 0xB2A9, + 1288: 0xB2AB, + 1289: 0xB2AD, + 1290: 0xB2AE, + 1291: 0xB2AF, + 1292: 0xB2B1, + 1293: 0xB2B2, + 1294: 0xB2B3, + 1295: 0xB2B5, + 1296: 0xB2B6, + 1297: 0xB2B7, + 1298: 0xB2B8, + 1299: 0xB2B9, + 1300: 0xB2BA, + 1301: 0xB2BB, + 1302: 0xB2BC, + 1303: 0xB2BD, + 1304: 0xB2BE, + 1305: 0xB2BF, + 1306: 0xB2C0, + 1307: 0xB2C1, + 1308: 0xB2C2, + 1309: 0xB2C3, + 1310: 0xB2C4, + 1311: 0xB2C5, + 1312: 0xB2C6, + 1313: 0xB2C7, + 1314: 0xB2CA, + 1315: 0xB2CB, + 1316: 0xB2CD, + 1317: 0xB2CE, + 1318: 0xB2CF, + 1319: 0xB2D1, + 1320: 0xB2D3, + 1321: 0xB2D4, + 1322: 0xB2D5, + 1323: 0xB2D6, + 1324: 0xB2D7, + 1325: 0xB2DA, + 1326: 0xB2DC, + 1327: 0xB2DE, + 1328: 0xB2DF, + 1329: 0xB2E0, + 1330: 0xB2E1, + 1331: 0xB2E3, + 1332: 0xB2E7, + 1333: 0xB2E9, + 1334: 0xB2EA, + 1335: 0xB2F0, + 1336: 0xB2F1, + 1337: 0xB2F2, + 1338: 0xB2F6, + 1339: 0xB2FC, + 1340: 0xB2FD, + 1341: 0xB2FE, + 1342: 0xB302, + 1343: 0xB303, + 1344: 0xB305, + 1345: 0xB306, + 1346: 0xB307, + 1347: 0xB309, + 1348: 0xB30A, + 1349: 0xB30B, + 1350: 0xB30C, + 1351: 0xB30D, + 1352: 0xB30E, + 1353: 0xB30F, + 1354: 0xB312, + 1355: 0xB316, + 1356: 0xB317, + 1357: 0xB318, + 1358: 0xB319, + 1359: 0xB31A, + 1360: 0xB31B, + 1361: 0xB31D, + 1362: 0xB31E, + 1363: 0xB31F, + 1364: 0xB320, + 1365: 0xB321, + 1366: 0xB322, + 1367: 0xB323, + 1368: 0xB324, + 1369: 0xB325, + 1370: 0xB326, + 1371: 0xB327, + 1372: 0xB328, + 1373: 0xB329, + 1374: 0xB32A, + 1375: 0xB32B, + 1376: 0xB32C, + 1377: 0xB32D, + 1378: 0xB32E, + 1379: 0xB32F, + 1380: 0xB330, + 1381: 0xB331, + 1382: 0xB332, + 1383: 0xB333, + 1384: 0xB334, + 1385: 0xB335, + 1386: 0xB336, + 1387: 0xB337, + 1388: 0xB338, + 1389: 0xB339, + 1390: 0xB33A, + 1391: 0xB33B, + 1392: 0xB33C, + 1393: 0xB33D, + 1394: 0xB33E, + 1395: 0xB33F, + 1396: 0xB340, + 1397: 0xB341, + 1398: 0xB342, + 1399: 0xB343, + 1400: 0xB344, + 1401: 0xB345, + 1402: 0xB346, + 1403: 0xB347, + 1404: 0xB348, + 1405: 0xB349, + 1406: 0xB34A, + 1407: 0xB34B, + 1408: 0xB34C, + 1409: 0xB34D, + 1410: 0xB34E, + 1411: 0xB34F, + 1412: 0xB350, + 1413: 0xB351, + 1414: 0xB352, + 1415: 0xB353, + 1416: 0xB357, + 1417: 0xB359, + 1418: 0xB35A, + 1419: 0xB35D, + 1420: 0xB360, + 1421: 0xB361, + 1422: 0xB362, + 1423: 0xB363, + 1424: 0xB366, + 1425: 0xB368, + 1426: 0xB36A, + 1427: 0xB36C, + 1428: 0xB36D, + 1429: 0xB36F, + 1430: 0xB372, + 1431: 0xB373, + 1432: 0xB375, + 1433: 0xB376, + 1434: 0xB377, + 1435: 0xB379, + 1436: 0xB37A, + 1437: 0xB37B, + 1438: 0xB37C, + 1439: 0xB37D, + 1440: 0xB37E, + 1441: 0xB37F, + 1442: 0xB382, + 1443: 0xB386, + 1444: 0xB387, + 1445: 0xB388, + 1446: 0xB389, + 1447: 0xB38A, + 1448: 0xB38B, + 1449: 0xB38D, + 1450: 0xB38E, + 1451: 0xB38F, + 1452: 0xB391, + 1453: 0xB392, + 1454: 0xB393, + 1455: 0xB395, + 1456: 0xB396, + 1457: 0xB397, + 1458: 0xB398, + 1459: 0xB399, + 1460: 0xB39A, + 1461: 0xB39B, + 1462: 0xB39C, + 1463: 0xB39D, + 1464: 0xB39E, + 1465: 0xB39F, + 1466: 0xB3A2, + 1467: 0xB3A3, + 1468: 0xB3A4, + 1469: 0xB3A5, + 1470: 0xB3A6, + 1471: 0xB3A7, + 1472: 0xB3A9, + 1473: 0xB3AA, + 1474: 0xB3AB, + 1475: 0xB3AD, + 1476: 0xB3AE, + 1477: 0xB3AF, + 1478: 0xB3B0, + 1479: 0xB3B1, + 1480: 0xB3B2, + 1481: 0xB3B3, + 1482: 0xB3B4, + 1483: 0xB3B5, + 1484: 0xB3B6, + 1485: 0xB3B7, + 1486: 0xB3B8, + 1487: 0xB3B9, + 1488: 0xB3BA, + 1489: 0xB3BB, + 1490: 0xB3BC, + 1491: 0xB3BD, + 1492: 0xB3BE, + 1493: 0xB3BF, + 1494: 0xB3C0, + 1495: 0xB3C1, + 1496: 0xB3C2, + 1497: 0xB3C3, + 1498: 0xB3C6, + 1499: 0xB3C7, + 1500: 0xB3C9, + 1501: 0xB3CA, + 1502: 0xB3CD, + 1503: 0xB3CF, + 1504: 0xB3D1, + 1505: 0xB3D2, + 1506: 0xB3D3, + 1507: 0xB3D6, + 1508: 0xB3D8, + 1509: 0xB3DA, + 1510: 0xB3DC, + 1511: 0xB3DE, + 1512: 0xB3DF, + 1513: 0xB3E1, + 1514: 0xB3E2, + 1515: 0xB3E3, + 1516: 0xB3E5, + 1517: 0xB3E6, + 1518: 0xB3E7, + 1519: 0xB3E9, + 1520: 0xB3EA, + 1521: 0xB3EB, + 1522: 0xB3EC, + 1523: 0xB3ED, + 1524: 0xB3EE, + 1525: 0xB3EF, + 1526: 0xB3F0, + 1527: 0xB3F1, + 1528: 0xB3F2, + 1529: 0xB3F3, + 1530: 0xB3F4, + 1531: 0xB3F5, + 1532: 0xB3F6, + 1533: 0xB3F7, + 1534: 0xB3F8, + 1535: 0xB3F9, + 1536: 0xB3FA, + 1537: 0xB3FB, + 1538: 0xB3FD, + 1539: 0xB3FE, + 1540: 0xB3FF, + 1541: 0xB400, + 1542: 0xB401, + 1543: 0xB402, + 1544: 0xB403, + 1545: 0xB404, + 1546: 0xB405, + 1547: 0xB406, + 1548: 0xB407, + 1549: 0xB408, + 1550: 0xB409, + 1551: 0xB40A, + 1552: 0xB40B, + 1553: 0xB40C, + 1554: 0xB40D, + 1555: 0xB40E, + 1556: 0xB40F, + 1557: 0xB411, + 1558: 0xB412, + 1559: 0xB413, + 1560: 0xB414, + 1561: 0xB415, + 1562: 0xB416, + 1563: 0xB417, + 1564: 0xB419, + 1565: 0xB41A, + 1566: 0xB41B, + 1567: 0xB41D, + 1568: 0xB41E, + 1569: 0xB41F, + 1570: 0xB421, + 1571: 0xB422, + 1572: 0xB423, + 1573: 0xB424, + 1574: 0xB425, + 1575: 0xB426, + 1576: 0xB427, + 1577: 0xB42A, + 1578: 0xB42C, + 1579: 0xB42D, + 1580: 0xB42E, + 1581: 0xB42F, + 1582: 0xB430, + 1583: 0xB431, + 1584: 0xB432, + 1585: 0xB433, + 1586: 0xB435, + 1587: 0xB436, + 1588: 0xB437, + 1589: 0xB438, + 1590: 0xB439, + 1591: 0xB43A, + 1592: 0xB43B, + 1593: 0xB43C, + 1594: 0xB43D, + 1595: 0xB43E, + 1596: 0xB43F, + 1597: 0xB440, + 1598: 0xB441, + 1599: 0xB442, + 1600: 0xB443, + 1601: 0xB444, + 1602: 0xB445, + 1603: 0xB446, + 1604: 0xB447, + 1605: 0xB448, + 1606: 0xB449, + 1607: 0xB44A, + 1608: 0xB44B, + 1609: 0xB44C, + 1610: 0xB44D, + 1611: 0xB44E, + 1612: 0xB44F, + 1613: 0xB452, + 1614: 0xB453, + 1615: 0xB455, + 1616: 0xB456, + 1617: 0xB457, + 1618: 0xB459, + 1619: 0xB45A, + 1620: 0xB45B, + 1621: 0xB45C, + 1622: 0xB45D, + 1623: 0xB45E, + 1624: 0xB45F, + 1625: 0xB462, + 1626: 0xB464, + 1627: 0xB466, + 1628: 0xB467, + 1629: 0xB468, + 1630: 0xB469, + 1631: 0xB46A, + 1632: 0xB46B, + 1633: 0xB46D, + 1634: 0xB46E, + 1635: 0xB46F, + 1636: 0xB470, + 1637: 0xB471, + 1638: 0xB472, + 1639: 0xB473, + 1640: 0xB474, + 1641: 0xB475, + 1642: 0xB476, + 1643: 0xB477, + 1644: 0xB478, + 1645: 0xB479, + 1646: 0xB47A, + 1647: 0xB47B, + 1648: 0xB47C, + 1649: 0xB47D, + 1650: 0xB47E, + 1651: 0xB47F, + 1652: 0xB481, + 1653: 0xB482, + 1654: 0xB483, + 1655: 0xB484, + 1656: 0xB485, + 1657: 0xB486, + 1658: 0xB487, + 1659: 0xB489, + 1660: 0xB48A, + 1661: 0xB48B, + 1662: 0xB48C, + 1663: 0xB48D, + 1664: 0xB48E, + 1665: 0xB48F, + 1666: 0xB490, + 1667: 0xB491, + 1668: 0xB492, + 1669: 0xB493, + 1670: 0xB494, + 1671: 0xB495, + 1672: 0xB496, + 1673: 0xB497, + 1674: 0xB498, + 1675: 0xB499, + 1676: 0xB49A, + 1677: 0xB49B, + 1678: 0xB49C, + 1679: 0xB49E, + 1680: 0xB49F, + 1681: 0xB4A0, + 1682: 0xB4A1, + 1683: 0xB4A2, + 1684: 0xB4A3, + 1685: 0xB4A5, + 1686: 0xB4A6, + 1687: 0xB4A7, + 1688: 0xB4A9, + 1689: 0xB4AA, + 1690: 0xB4AB, + 1691: 0xB4AD, + 1692: 0xB4AE, + 1693: 0xB4AF, + 1694: 0xB4B0, + 1695: 0xB4B1, + 1696: 0xB4B2, + 1697: 0xB4B3, + 1698: 0xB4B4, + 1699: 0xB4B6, + 1700: 0xB4B8, + 1701: 0xB4BA, + 1702: 0xB4BB, + 1703: 0xB4BC, + 1704: 0xB4BD, + 1705: 0xB4BE, + 1706: 0xB4BF, + 1707: 0xB4C1, + 1708: 0xB4C2, + 1709: 0xB4C3, + 1710: 0xB4C5, + 1711: 0xB4C6, + 1712: 0xB4C7, + 1713: 0xB4C9, + 1714: 0xB4CA, + 1715: 0xB4CB, + 1716: 0xB4CC, + 1717: 0xB4CD, + 1718: 0xB4CE, + 1719: 0xB4CF, + 1720: 0xB4D1, + 1721: 0xB4D2, + 1722: 0xB4D3, + 1723: 0xB4D4, + 1724: 0xB4D6, + 1725: 0xB4D7, + 1726: 0xB4D8, + 1727: 0xB4D9, + 1728: 0xB4DA, + 1729: 0xB4DB, + 1730: 0xB4DE, + 1731: 0xB4DF, + 1732: 0xB4E1, + 1733: 0xB4E2, + 1734: 0xB4E5, + 1735: 0xB4E7, + 1736: 0xB4E8, + 1737: 0xB4E9, + 1738: 0xB4EA, + 1739: 0xB4EB, + 1740: 0xB4EE, + 1741: 0xB4F0, + 1742: 0xB4F2, + 1743: 0xB4F3, + 1744: 0xB4F4, + 1745: 0xB4F5, + 1746: 0xB4F6, + 1747: 0xB4F7, + 1748: 0xB4F9, + 1749: 0xB4FA, + 1750: 0xB4FB, + 1751: 0xB4FC, + 1752: 0xB4FD, + 1753: 0xB4FE, + 1754: 0xB4FF, + 1755: 0xB500, + 1756: 0xB501, + 1757: 0xB502, + 1758: 0xB503, + 1759: 0xB504, + 1760: 0xB505, + 1761: 0xB506, + 1762: 0xB507, + 1763: 0xB508, + 1764: 0xB509, + 1765: 0xB50A, + 1766: 0xB50B, + 1767: 0xB50C, + 1768: 0xB50D, + 1769: 0xB50E, + 1770: 0xB50F, + 1771: 0xB510, + 1772: 0xB511, + 1773: 0xB512, + 1774: 0xB513, + 1775: 0xB516, + 1776: 0xB517, + 1777: 0xB519, + 1778: 0xB51A, + 1779: 0xB51D, + 1780: 0xB51E, + 1781: 0xB51F, + 1782: 0xB520, + 1783: 0xB521, + 1784: 0xB522, + 1785: 0xB523, + 1786: 0xB526, + 1787: 0xB52B, + 1788: 0xB52C, + 1789: 0xB52D, + 1790: 0xB52E, + 1791: 0xB52F, + 1792: 0xB532, + 1793: 0xB533, + 1794: 0xB535, + 1795: 0xB536, + 1796: 0xB537, + 1797: 0xB539, + 1798: 0xB53A, + 1799: 0xB53B, + 1800: 0xB53C, + 1801: 0xB53D, + 1802: 0xB53E, + 1803: 0xB53F, + 1804: 0xB542, + 1805: 0xB546, + 1806: 0xB547, + 1807: 0xB548, + 1808: 0xB549, + 1809: 0xB54A, + 1810: 0xB54E, + 1811: 0xB54F, + 1812: 0xB551, + 1813: 0xB552, + 1814: 0xB553, + 1815: 0xB555, + 1816: 0xB556, + 1817: 0xB557, + 1818: 0xB558, + 1819: 0xB559, + 1820: 0xB55A, + 1821: 0xB55B, + 1822: 0xB55E, + 1823: 0xB562, + 1824: 0xB563, + 1825: 0xB564, + 1826: 0xB565, + 1827: 0xB566, + 1828: 0xB567, + 1829: 0xB568, + 1830: 0xB569, + 1831: 0xB56A, + 1832: 0xB56B, + 1833: 0xB56C, + 1834: 0xB56D, + 1835: 0xB56E, + 1836: 0xB56F, + 1837: 0xB570, + 1838: 0xB571, + 1839: 0xB572, + 1840: 0xB573, + 1841: 0xB574, + 1842: 0xB575, + 1843: 0xB576, + 1844: 0xB577, + 1845: 0xB578, + 1846: 0xB579, + 1847: 0xB57A, + 1848: 0xB57B, + 1849: 0xB57C, + 1850: 0xB57D, + 1851: 0xB57E, + 1852: 0xB57F, + 1853: 0xB580, + 1854: 0xB581, + 1855: 0xB582, + 1856: 0xB583, + 1857: 0xB584, + 1858: 0xB585, + 1859: 0xB586, + 1860: 0xB587, + 1861: 0xB588, + 1862: 0xB589, + 1863: 0xB58A, + 1864: 0xB58B, + 1865: 0xB58C, + 1866: 0xB58D, + 1867: 0xB58E, + 1868: 0xB58F, + 1869: 0xB590, + 1870: 0xB591, + 1871: 0xB592, + 1872: 0xB593, + 1873: 0xB594, + 1874: 0xB595, + 1875: 0xB596, + 1876: 0xB597, + 1877: 0xB598, + 1878: 0xB599, + 1879: 0xB59A, + 1880: 0xB59B, + 1881: 0xB59C, + 1882: 0xB59D, + 1883: 0xB59E, + 1884: 0xB59F, + 1885: 0xB5A2, + 1886: 0xB5A3, + 1887: 0xB5A5, + 1888: 0xB5A6, + 1889: 0xB5A7, + 1890: 0xB5A9, + 1891: 0xB5AC, + 1892: 0xB5AD, + 1893: 0xB5AE, + 1894: 0xB5AF, + 1895: 0xB5B2, + 1896: 0xB5B6, + 1897: 0xB5B7, + 1898: 0xB5B8, + 1899: 0xB5B9, + 1900: 0xB5BA, + 1901: 0xB5BE, + 1902: 0xB5BF, + 1903: 0xB5C1, + 1904: 0xB5C2, + 1905: 0xB5C3, + 1906: 0xB5C5, + 1907: 0xB5C6, + 1908: 0xB5C7, + 1909: 0xB5C8, + 1910: 0xB5C9, + 1911: 0xB5CA, + 1912: 0xB5CB, + 1913: 0xB5CE, + 1914: 0xB5D2, + 1915: 0xB5D3, + 1916: 0xB5D4, + 1917: 0xB5D5, + 1918: 0xB5D6, + 1919: 0xB5D7, + 1920: 0xB5D9, + 1921: 0xB5DA, + 1922: 0xB5DB, + 1923: 0xB5DC, + 1924: 0xB5DD, + 1925: 0xB5DE, + 1926: 0xB5DF, + 1927: 0xB5E0, + 1928: 0xB5E1, + 1929: 0xB5E2, + 1930: 0xB5E3, + 1931: 0xB5E4, + 1932: 0xB5E5, + 1933: 0xB5E6, + 1934: 0xB5E7, + 1935: 0xB5E8, + 1936: 0xB5E9, + 1937: 0xB5EA, + 1938: 0xB5EB, + 1939: 0xB5ED, + 1940: 0xB5EE, + 1941: 0xB5EF, + 1942: 0xB5F0, + 1943: 0xB5F1, + 1944: 0xB5F2, + 1945: 0xB5F3, + 1946: 0xB5F4, + 1947: 0xB5F5, + 1948: 0xB5F6, + 1949: 0xB5F7, + 1950: 0xB5F8, + 1951: 0xB5F9, + 1952: 0xB5FA, + 1953: 0xB5FB, + 1954: 0xB5FC, + 1955: 0xB5FD, + 1956: 0xB5FE, + 1957: 0xB5FF, + 1958: 0xB600, + 1959: 0xB601, + 1960: 0xB602, + 1961: 0xB603, + 1962: 0xB604, + 1963: 0xB605, + 1964: 0xB606, + 1965: 0xB607, + 1966: 0xB608, + 1967: 0xB609, + 1968: 0xB60A, + 1969: 0xB60B, + 1970: 0xB60C, + 1971: 0xB60D, + 1972: 0xB60E, + 1973: 0xB60F, + 1974: 0xB612, + 1975: 0xB613, + 1976: 0xB615, + 1977: 0xB616, + 1978: 0xB617, + 1979: 0xB619, + 1980: 0xB61A, + 1981: 0xB61B, + 1982: 0xB61C, + 1983: 0xB61D, + 1984: 0xB61E, + 1985: 0xB61F, + 1986: 0xB620, + 1987: 0xB621, + 1988: 0xB622, + 1989: 0xB623, + 1990: 0xB624, + 1991: 0xB626, + 1992: 0xB627, + 1993: 0xB628, + 1994: 0xB629, + 1995: 0xB62A, + 1996: 0xB62B, + 1997: 0xB62D, + 1998: 0xB62E, + 1999: 0xB62F, + 2000: 0xB630, + 2001: 0xB631, + 2002: 0xB632, + 2003: 0xB633, + 2004: 0xB635, + 2005: 0xB636, + 2006: 0xB637, + 2007: 0xB638, + 2008: 0xB639, + 2009: 0xB63A, + 2010: 0xB63B, + 2011: 0xB63C, + 2012: 0xB63D, + 2013: 0xB63E, + 2014: 0xB63F, + 2015: 0xB640, + 2016: 0xB641, + 2017: 0xB642, + 2018: 0xB643, + 2019: 0xB644, + 2020: 0xB645, + 2021: 0xB646, + 2022: 0xB647, + 2023: 0xB649, + 2024: 0xB64A, + 2025: 0xB64B, + 2026: 0xB64C, + 2027: 0xB64D, + 2028: 0xB64E, + 2029: 0xB64F, + 2030: 0xB650, + 2031: 0xB651, + 2032: 0xB652, + 2033: 0xB653, + 2034: 0xB654, + 2035: 0xB655, + 2036: 0xB656, + 2037: 0xB657, + 2038: 0xB658, + 2039: 0xB659, + 2040: 0xB65A, + 2041: 0xB65B, + 2042: 0xB65C, + 2043: 0xB65D, + 2044: 0xB65E, + 2045: 0xB65F, + 2046: 0xB660, + 2047: 0xB661, + 2048: 0xB662, + 2049: 0xB663, + 2050: 0xB665, + 2051: 0xB666, + 2052: 0xB667, + 2053: 0xB669, + 2054: 0xB66A, + 2055: 0xB66B, + 2056: 0xB66C, + 2057: 0xB66D, + 2058: 0xB66E, + 2059: 0xB66F, + 2060: 0xB670, + 2061: 0xB671, + 2062: 0xB672, + 2063: 0xB673, + 2064: 0xB674, + 2065: 0xB675, + 2066: 0xB676, + 2067: 0xB677, + 2068: 0xB678, + 2069: 0xB679, + 2070: 0xB67A, + 2071: 0xB67B, + 2072: 0xB67C, + 2073: 0xB67D, + 2074: 0xB67E, + 2075: 0xB67F, + 2076: 0xB680, + 2077: 0xB681, + 2078: 0xB682, + 2079: 0xB683, + 2080: 0xB684, + 2081: 0xB685, + 2082: 0xB686, + 2083: 0xB687, + 2084: 0xB688, + 2085: 0xB689, + 2086: 0xB68A, + 2087: 0xB68B, + 2088: 0xB68C, + 2089: 0xB68D, + 2090: 0xB68E, + 2091: 0xB68F, + 2092: 0xB690, + 2093: 0xB691, + 2094: 0xB692, + 2095: 0xB693, + 2096: 0xB694, + 2097: 0xB695, + 2098: 0xB696, + 2099: 0xB697, + 2100: 0xB698, + 2101: 0xB699, + 2102: 0xB69A, + 2103: 0xB69B, + 2104: 0xB69E, + 2105: 0xB69F, + 2106: 0xB6A1, + 2107: 0xB6A2, + 2108: 0xB6A3, + 2109: 0xB6A5, + 2110: 0xB6A6, + 2111: 0xB6A7, + 2112: 0xB6A8, + 2113: 0xB6A9, + 2114: 0xB6AA, + 2115: 0xB6AD, + 2116: 0xB6AE, + 2117: 0xB6AF, + 2118: 0xB6B0, + 2119: 0xB6B2, + 2120: 0xB6B3, + 2121: 0xB6B4, + 2122: 0xB6B5, + 2123: 0xB6B6, + 2124: 0xB6B7, + 2125: 0xB6B8, + 2126: 0xB6B9, + 2127: 0xB6BA, + 2128: 0xB6BB, + 2129: 0xB6BC, + 2130: 0xB6BD, + 2131: 0xB6BE, + 2132: 0xB6BF, + 2133: 0xB6C0, + 2134: 0xB6C1, + 2135: 0xB6C2, + 2136: 0xB6C3, + 2137: 0xB6C4, + 2138: 0xB6C5, + 2139: 0xB6C6, + 2140: 0xB6C7, + 2141: 0xB6C8, + 2142: 0xB6C9, + 2143: 0xB6CA, + 2144: 0xB6CB, + 2145: 0xB6CC, + 2146: 0xB6CD, + 2147: 0xB6CE, + 2148: 0xB6CF, + 2149: 0xB6D0, + 2150: 0xB6D1, + 2151: 0xB6D2, + 2152: 0xB6D3, + 2153: 0xB6D5, + 2154: 0xB6D6, + 2155: 0xB6D7, + 2156: 0xB6D8, + 2157: 0xB6D9, + 2158: 0xB6DA, + 2159: 0xB6DB, + 2160: 0xB6DC, + 2161: 0xB6DD, + 2162: 0xB6DE, + 2163: 0xB6DF, + 2164: 0xB6E0, + 2165: 0xB6E1, + 2166: 0xB6E2, + 2167: 0xB6E3, + 2168: 0xB6E4, + 2169: 0xB6E5, + 2170: 0xB6E6, + 2171: 0xB6E7, + 2172: 0xB6E8, + 2173: 0xB6E9, + 2174: 0xB6EA, + 2175: 0xB6EB, + 2176: 0xB6EC, + 2177: 0xB6ED, + 2178: 0xB6EE, + 2179: 0xB6EF, + 2180: 0xB6F1, + 2181: 0xB6F2, + 2182: 0xB6F3, + 2183: 0xB6F5, + 2184: 0xB6F6, + 2185: 0xB6F7, + 2186: 0xB6F9, + 2187: 0xB6FA, + 2188: 0xB6FB, + 2189: 0xB6FC, + 2190: 0xB6FD, + 2191: 0xB6FE, + 2192: 0xB6FF, + 2193: 0xB702, + 2194: 0xB703, + 2195: 0xB704, + 2196: 0xB706, + 2197: 0xB707, + 2198: 0xB708, + 2199: 0xB709, + 2200: 0xB70A, + 2201: 0xB70B, + 2202: 0xB70C, + 2203: 0xB70D, + 2204: 0xB70E, + 2205: 0xB70F, + 2206: 0xB710, + 2207: 0xB711, + 2208: 0xB712, + 2209: 0xB713, + 2210: 0xB714, + 2211: 0xB715, + 2212: 0xB716, + 2213: 0xB717, + 2214: 0xB718, + 2215: 0xB719, + 2216: 0xB71A, + 2217: 0xB71B, + 2218: 0xB71C, + 2219: 0xB71D, + 2220: 0xB71E, + 2221: 0xB71F, + 2222: 0xB720, + 2223: 0xB721, + 2224: 0xB722, + 2225: 0xB723, + 2226: 0xB724, + 2227: 0xB725, + 2228: 0xB726, + 2229: 0xB727, + 2230: 0xB72A, + 2231: 0xB72B, + 2232: 0xB72D, + 2233: 0xB72E, + 2234: 0xB731, + 2235: 0xB732, + 2236: 0xB733, + 2237: 0xB734, + 2238: 0xB735, + 2239: 0xB736, + 2240: 0xB737, + 2241: 0xB73A, + 2242: 0xB73C, + 2243: 0xB73D, + 2244: 0xB73E, + 2245: 0xB73F, + 2246: 0xB740, + 2247: 0xB741, + 2248: 0xB742, + 2249: 0xB743, + 2250: 0xB745, + 2251: 0xB746, + 2252: 0xB747, + 2253: 0xB749, + 2254: 0xB74A, + 2255: 0xB74B, + 2256: 0xB74D, + 2257: 0xB74E, + 2258: 0xB74F, + 2259: 0xB750, + 2260: 0xB751, + 2261: 0xB752, + 2262: 0xB753, + 2263: 0xB756, + 2264: 0xB757, + 2265: 0xB758, + 2266: 0xB759, + 2267: 0xB75A, + 2268: 0xB75B, + 2269: 0xB75C, + 2270: 0xB75D, + 2271: 0xB75E, + 2272: 0xB75F, + 2273: 0xB761, + 2274: 0xB762, + 2275: 0xB763, + 2276: 0xB765, + 2277: 0xB766, + 2278: 0xB767, + 2279: 0xB769, + 2280: 0xB76A, + 2281: 0xB76B, + 2282: 0xB76C, + 2283: 0xB76D, + 2284: 0xB76E, + 2285: 0xB76F, + 2286: 0xB772, + 2287: 0xB774, + 2288: 0xB776, + 2289: 0xB777, + 2290: 0xB778, + 2291: 0xB779, + 2292: 0xB77A, + 2293: 0xB77B, + 2294: 0xB77E, + 2295: 0xB77F, + 2296: 0xB781, + 2297: 0xB782, + 2298: 0xB783, + 2299: 0xB785, + 2300: 0xB786, + 2301: 0xB787, + 2302: 0xB788, + 2303: 0xB789, + 2304: 0xB78A, + 2305: 0xB78B, + 2306: 0xB78E, + 2307: 0xB793, + 2308: 0xB794, + 2309: 0xB795, + 2310: 0xB79A, + 2311: 0xB79B, + 2312: 0xB79D, + 2313: 0xB79E, + 2314: 0xB79F, + 2315: 0xB7A1, + 2316: 0xB7A2, + 2317: 0xB7A3, + 2318: 0xB7A4, + 2319: 0xB7A5, + 2320: 0xB7A6, + 2321: 0xB7A7, + 2322: 0xB7AA, + 2323: 0xB7AE, + 2324: 0xB7AF, + 2325: 0xB7B0, + 2326: 0xB7B1, + 2327: 0xB7B2, + 2328: 0xB7B3, + 2329: 0xB7B6, + 2330: 0xB7B7, + 2331: 0xB7B9, + 2332: 0xB7BA, + 2333: 0xB7BB, + 2334: 0xB7BC, + 2335: 0xB7BD, + 2336: 0xB7BE, + 2337: 0xB7BF, + 2338: 0xB7C0, + 2339: 0xB7C1, + 2340: 0xB7C2, + 2341: 0xB7C3, + 2342: 0xB7C4, + 2343: 0xB7C5, + 2344: 0xB7C6, + 2345: 0xB7C8, + 2346: 0xB7CA, + 2347: 0xB7CB, + 2348: 0xB7CC, + 2349: 0xB7CD, + 2350: 0xB7CE, + 2351: 0xB7CF, + 2352: 0xB7D0, + 2353: 0xB7D1, + 2354: 0xB7D2, + 2355: 0xB7D3, + 2356: 0xB7D4, + 2357: 0xB7D5, + 2358: 0xB7D6, + 2359: 0xB7D7, + 2360: 0xB7D8, + 2361: 0xB7D9, + 2362: 0xB7DA, + 2363: 0xB7DB, + 2364: 0xB7DC, + 2365: 0xB7DD, + 2366: 0xB7DE, + 2367: 0xB7DF, + 2368: 0xB7E0, + 2369: 0xB7E1, + 2370: 0xB7E2, + 2371: 0xB7E3, + 2372: 0xB7E4, + 2373: 0xB7E5, + 2374: 0xB7E6, + 2375: 0xB7E7, + 2376: 0xB7E8, + 2377: 0xB7E9, + 2378: 0xB7EA, + 2379: 0xB7EB, + 2380: 0xB7EE, + 2381: 0xB7EF, + 2382: 0xB7F1, + 2383: 0xB7F2, + 2384: 0xB7F3, + 2385: 0xB7F5, + 2386: 0xB7F6, + 2387: 0xB7F7, + 2388: 0xB7F8, + 2389: 0xB7F9, + 2390: 0xB7FA, + 2391: 0xB7FB, + 2392: 0xB7FE, + 2393: 0xB802, + 2394: 0xB803, + 2395: 0xB804, + 2396: 0xB805, + 2397: 0xB806, + 2398: 0xB80A, + 2399: 0xB80B, + 2400: 0xB80D, + 2401: 0xB80E, + 2402: 0xB80F, + 2403: 0xB811, + 2404: 0xB812, + 2405: 0xB813, + 2406: 0xB814, + 2407: 0xB815, + 2408: 0xB816, + 2409: 0xB817, + 2410: 0xB81A, + 2411: 0xB81C, + 2412: 0xB81E, + 2413: 0xB81F, + 2414: 0xB820, + 2415: 0xB821, + 2416: 0xB822, + 2417: 0xB823, + 2418: 0xB826, + 2419: 0xB827, + 2420: 0xB829, + 2421: 0xB82A, + 2422: 0xB82B, + 2423: 0xB82D, + 2424: 0xB82E, + 2425: 0xB82F, + 2426: 0xB830, + 2427: 0xB831, + 2428: 0xB832, + 2429: 0xB833, + 2430: 0xB836, + 2431: 0xB83A, + 2432: 0xB83B, + 2433: 0xB83C, + 2434: 0xB83D, + 2435: 0xB83E, + 2436: 0xB83F, + 2437: 0xB841, + 2438: 0xB842, + 2439: 0xB843, + 2440: 0xB845, + 2441: 0xB846, + 2442: 0xB847, + 2443: 0xB848, + 2444: 0xB849, + 2445: 0xB84A, + 2446: 0xB84B, + 2447: 0xB84C, + 2448: 0xB84D, + 2449: 0xB84E, + 2450: 0xB84F, + 2451: 0xB850, + 2452: 0xB852, + 2453: 0xB854, + 2454: 0xB855, + 2455: 0xB856, + 2456: 0xB857, + 2457: 0xB858, + 2458: 0xB859, + 2459: 0xB85A, + 2460: 0xB85B, + 2461: 0xB85E, + 2462: 0xB85F, + 2463: 0xB861, + 2464: 0xB862, + 2465: 0xB863, + 2466: 0xB865, + 2467: 0xB866, + 2468: 0xB867, + 2469: 0xB868, + 2470: 0xB869, + 2471: 0xB86A, + 2472: 0xB86B, + 2473: 0xB86E, + 2474: 0xB870, + 2475: 0xB872, + 2476: 0xB873, + 2477: 0xB874, + 2478: 0xB875, + 2479: 0xB876, + 2480: 0xB877, + 2481: 0xB879, + 2482: 0xB87A, + 2483: 0xB87B, + 2484: 0xB87D, + 2485: 0xB87E, + 2486: 0xB87F, + 2487: 0xB880, + 2488: 0xB881, + 2489: 0xB882, + 2490: 0xB883, + 2491: 0xB884, + 2492: 0xB885, + 2493: 0xB886, + 2494: 0xB887, + 2495: 0xB888, + 2496: 0xB889, + 2497: 0xB88A, + 2498: 0xB88B, + 2499: 0xB88C, + 2500: 0xB88E, + 2501: 0xB88F, + 2502: 0xB890, + 2503: 0xB891, + 2504: 0xB892, + 2505: 0xB893, + 2506: 0xB894, + 2507: 0xB895, + 2508: 0xB896, + 2509: 0xB897, + 2510: 0xB898, + 2511: 0xB899, + 2512: 0xB89A, + 2513: 0xB89B, + 2514: 0xB89C, + 2515: 0xB89D, + 2516: 0xB89E, + 2517: 0xB89F, + 2518: 0xB8A0, + 2519: 0xB8A1, + 2520: 0xB8A2, + 2521: 0xB8A3, + 2522: 0xB8A4, + 2523: 0xB8A5, + 2524: 0xB8A6, + 2525: 0xB8A7, + 2526: 0xB8A9, + 2527: 0xB8AA, + 2528: 0xB8AB, + 2529: 0xB8AC, + 2530: 0xB8AD, + 2531: 0xB8AE, + 2532: 0xB8AF, + 2533: 0xB8B1, + 2534: 0xB8B2, + 2535: 0xB8B3, + 2536: 0xB8B5, + 2537: 0xB8B6, + 2538: 0xB8B7, + 2539: 0xB8B9, + 2540: 0xB8BA, + 2541: 0xB8BB, + 2542: 0xB8BC, + 2543: 0xB8BD, + 2544: 0xB8BE, + 2545: 0xB8BF, + 2546: 0xB8C2, + 2547: 0xB8C4, + 2548: 0xB8C6, + 2549: 0xB8C7, + 2550: 0xB8C8, + 2551: 0xB8C9, + 2552: 0xB8CA, + 2553: 0xB8CB, + 2554: 0xB8CD, + 2555: 0xB8CE, + 2556: 0xB8CF, + 2557: 0xB8D1, + 2558: 0xB8D2, + 2559: 0xB8D3, + 2560: 0xB8D5, + 2561: 0xB8D6, + 2562: 0xB8D7, + 2563: 0xB8D8, + 2564: 0xB8D9, + 2565: 0xB8DA, + 2566: 0xB8DB, + 2567: 0xB8DC, + 2568: 0xB8DE, + 2569: 0xB8E0, + 2570: 0xB8E2, + 2571: 0xB8E3, + 2572: 0xB8E4, + 2573: 0xB8E5, + 2574: 0xB8E6, + 2575: 0xB8E7, + 2576: 0xB8EA, + 2577: 0xB8EB, + 2578: 0xB8ED, + 2579: 0xB8EE, + 2580: 0xB8EF, + 2581: 0xB8F1, + 2582: 0xB8F2, + 2583: 0xB8F3, + 2584: 0xB8F4, + 2585: 0xB8F5, + 2586: 0xB8F6, + 2587: 0xB8F7, + 2588: 0xB8FA, + 2589: 0xB8FC, + 2590: 0xB8FE, + 2591: 0xB8FF, + 2592: 0xB900, + 2593: 0xB901, + 2594: 0xB902, + 2595: 0xB903, + 2596: 0xB905, + 2597: 0xB906, + 2598: 0xB907, + 2599: 0xB908, + 2600: 0xB909, + 2601: 0xB90A, + 2602: 0xB90B, + 2603: 0xB90C, + 2604: 0xB90D, + 2605: 0xB90E, + 2606: 0xB90F, + 2607: 0xB910, + 2608: 0xB911, + 2609: 0xB912, + 2610: 0xB913, + 2611: 0xB914, + 2612: 0xB915, + 2613: 0xB916, + 2614: 0xB917, + 2615: 0xB919, + 2616: 0xB91A, + 2617: 0xB91B, + 2618: 0xB91C, + 2619: 0xB91D, + 2620: 0xB91E, + 2621: 0xB91F, + 2622: 0xB921, + 2623: 0xB922, + 2624: 0xB923, + 2625: 0xB924, + 2626: 0xB925, + 2627: 0xB926, + 2628: 0xB927, + 2629: 0xB928, + 2630: 0xB929, + 2631: 0xB92A, + 2632: 0xB92B, + 2633: 0xB92C, + 2634: 0xB92D, + 2635: 0xB92E, + 2636: 0xB92F, + 2637: 0xB930, + 2638: 0xB931, + 2639: 0xB932, + 2640: 0xB933, + 2641: 0xB934, + 2642: 0xB935, + 2643: 0xB936, + 2644: 0xB937, + 2645: 0xB938, + 2646: 0xB939, + 2647: 0xB93A, + 2648: 0xB93B, + 2649: 0xB93E, + 2650: 0xB93F, + 2651: 0xB941, + 2652: 0xB942, + 2653: 0xB943, + 2654: 0xB945, + 2655: 0xB946, + 2656: 0xB947, + 2657: 0xB948, + 2658: 0xB949, + 2659: 0xB94A, + 2660: 0xB94B, + 2661: 0xB94D, + 2662: 0xB94E, + 2663: 0xB950, + 2664: 0xB952, + 2665: 0xB953, + 2666: 0xB954, + 2667: 0xB955, + 2668: 0xB956, + 2669: 0xB957, + 2670: 0xB95A, + 2671: 0xB95B, + 2672: 0xB95D, + 2673: 0xB95E, + 2674: 0xB95F, + 2675: 0xB961, + 2676: 0xB962, + 2677: 0xB963, + 2678: 0xB964, + 2679: 0xB965, + 2680: 0xB966, + 2681: 0xB967, + 2682: 0xB96A, + 2683: 0xB96C, + 2684: 0xB96E, + 2685: 0xB96F, + 2686: 0xB970, + 2687: 0xB971, + 2688: 0xB972, + 2689: 0xB973, + 2690: 0xB976, + 2691: 0xB977, + 2692: 0xB979, + 2693: 0xB97A, + 2694: 0xB97B, + 2695: 0xB97D, + 2696: 0xB97E, + 2697: 0xB97F, + 2698: 0xB980, + 2699: 0xB981, + 2700: 0xB982, + 2701: 0xB983, + 2702: 0xB986, + 2703: 0xB988, + 2704: 0xB98B, + 2705: 0xB98C, + 2706: 0xB98F, + 2707: 0xB990, + 2708: 0xB991, + 2709: 0xB992, + 2710: 0xB993, + 2711: 0xB994, + 2712: 0xB995, + 2713: 0xB996, + 2714: 0xB997, + 2715: 0xB998, + 2716: 0xB999, + 2717: 0xB99A, + 2718: 0xB99B, + 2719: 0xB99C, + 2720: 0xB99D, + 2721: 0xB99E, + 2722: 0xB99F, + 2723: 0xB9A0, + 2724: 0xB9A1, + 2725: 0xB9A2, + 2726: 0xB9A3, + 2727: 0xB9A4, + 2728: 0xB9A5, + 2729: 0xB9A6, + 2730: 0xB9A7, + 2731: 0xB9A8, + 2732: 0xB9A9, + 2733: 0xB9AA, + 2734: 0xB9AB, + 2735: 0xB9AE, + 2736: 0xB9AF, + 2737: 0xB9B1, + 2738: 0xB9B2, + 2739: 0xB9B3, + 2740: 0xB9B5, + 2741: 0xB9B6, + 2742: 0xB9B7, + 2743: 0xB9B8, + 2744: 0xB9B9, + 2745: 0xB9BA, + 2746: 0xB9BB, + 2747: 0xB9BE, + 2748: 0xB9C0, + 2749: 0xB9C2, + 2750: 0xB9C3, + 2751: 0xB9C4, + 2752: 0xB9C5, + 2753: 0xB9C6, + 2754: 0xB9C7, + 2755: 0xB9CA, + 2756: 0xB9CB, + 2757: 0xB9CD, + 2758: 0xB9D3, + 2759: 0xB9D4, + 2760: 0xB9D5, + 2761: 0xB9D6, + 2762: 0xB9D7, + 2763: 0xB9DA, + 2764: 0xB9DC, + 2765: 0xB9DF, + 2766: 0xB9E0, + 2767: 0xB9E2, + 2768: 0xB9E6, + 2769: 0xB9E7, + 2770: 0xB9E9, + 2771: 0xB9EA, + 2772: 0xB9EB, + 2773: 0xB9ED, + 2774: 0xB9EE, + 2775: 0xB9EF, + 2776: 0xB9F0, + 2777: 0xB9F1, + 2778: 0xB9F2, + 2779: 0xB9F3, + 2780: 0xB9F6, + 2781: 0xB9FB, + 2782: 0xB9FC, + 2783: 0xB9FD, + 2784: 0xB9FE, + 2785: 0xB9FF, + 2786: 0xBA02, + 2787: 0xBA03, + 2788: 0xBA04, + 2789: 0xBA05, + 2790: 0xBA06, + 2791: 0xBA07, + 2792: 0xBA09, + 2793: 0xBA0A, + 2794: 0xBA0B, + 2795: 0xBA0C, + 2796: 0xBA0D, + 2797: 0xBA0E, + 2798: 0xBA0F, + 2799: 0xBA10, + 2800: 0xBA11, + 2801: 0xBA12, + 2802: 0xBA13, + 2803: 0xBA14, + 2804: 0xBA16, + 2805: 0xBA17, + 2806: 0xBA18, + 2807: 0xBA19, + 2808: 0xBA1A, + 2809: 0xBA1B, + 2810: 0xBA1C, + 2811: 0xBA1D, + 2812: 0xBA1E, + 2813: 0xBA1F, + 2814: 0xBA20, + 2815: 0xBA21, + 2816: 0xBA22, + 2817: 0xBA23, + 2818: 0xBA24, + 2819: 0xBA25, + 2820: 0xBA26, + 2821: 0xBA27, + 2822: 0xBA28, + 2823: 0xBA29, + 2824: 0xBA2A, + 2825: 0xBA2B, + 2826: 0xBA2C, + 2827: 0xBA2D, + 2828: 0xBA2E, + 2829: 0xBA2F, + 2830: 0xBA30, + 2831: 0xBA31, + 2832: 0xBA32, + 2833: 0xBA33, + 2834: 0xBA34, + 2835: 0xBA35, + 2836: 0xBA36, + 2837: 0xBA37, + 2838: 0xBA3A, + 2839: 0xBA3B, + 2840: 0xBA3D, + 2841: 0xBA3E, + 2842: 0xBA3F, + 2843: 0xBA41, + 2844: 0xBA43, + 2845: 0xBA44, + 2846: 0xBA45, + 2847: 0xBA46, + 2848: 0xBA47, + 2849: 0xBA4A, + 2850: 0xBA4C, + 2851: 0xBA4F, + 2852: 0xBA50, + 2853: 0xBA51, + 2854: 0xBA52, + 2855: 0xBA56, + 2856: 0xBA57, + 2857: 0xBA59, + 2858: 0xBA5A, + 2859: 0xBA5B, + 2860: 0xBA5D, + 2861: 0xBA5E, + 2862: 0xBA5F, + 2863: 0xBA60, + 2864: 0xBA61, + 2865: 0xBA62, + 2866: 0xBA63, + 2867: 0xBA66, + 2868: 0xBA6A, + 2869: 0xBA6B, + 2870: 0xBA6C, + 2871: 0xBA6D, + 2872: 0xBA6E, + 2873: 0xBA6F, + 2874: 0xBA72, + 2875: 0xBA73, + 2876: 0xBA75, + 2877: 0xBA76, + 2878: 0xBA77, + 2879: 0xBA79, + 2880: 0xBA7A, + 2881: 0xBA7B, + 2882: 0xBA7C, + 2883: 0xBA7D, + 2884: 0xBA7E, + 2885: 0xBA7F, + 2886: 0xBA80, + 2887: 0xBA81, + 2888: 0xBA82, + 2889: 0xBA86, + 2890: 0xBA88, + 2891: 0xBA89, + 2892: 0xBA8A, + 2893: 0xBA8B, + 2894: 0xBA8D, + 2895: 0xBA8E, + 2896: 0xBA8F, + 2897: 0xBA90, + 2898: 0xBA91, + 2899: 0xBA92, + 2900: 0xBA93, + 2901: 0xBA94, + 2902: 0xBA95, + 2903: 0xBA96, + 2904: 0xBA97, + 2905: 0xBA98, + 2906: 0xBA99, + 2907: 0xBA9A, + 2908: 0xBA9B, + 2909: 0xBA9C, + 2910: 0xBA9D, + 2911: 0xBA9E, + 2912: 0xBA9F, + 2913: 0xBAA0, + 2914: 0xBAA1, + 2915: 0xBAA2, + 2916: 0xBAA3, + 2917: 0xBAA4, + 2918: 0xBAA5, + 2919: 0xBAA6, + 2920: 0xBAA7, + 2921: 0xBAAA, + 2922: 0xBAAD, + 2923: 0xBAAE, + 2924: 0xBAAF, + 2925: 0xBAB1, + 2926: 0xBAB3, + 2927: 0xBAB4, + 2928: 0xBAB5, + 2929: 0xBAB6, + 2930: 0xBAB7, + 2931: 0xBABA, + 2932: 0xBABC, + 2933: 0xBABE, + 2934: 0xBABF, + 2935: 0xBAC0, + 2936: 0xBAC1, + 2937: 0xBAC2, + 2938: 0xBAC3, + 2939: 0xBAC5, + 2940: 0xBAC6, + 2941: 0xBAC7, + 2942: 0xBAC9, + 2943: 0xBACA, + 2944: 0xBACB, + 2945: 0xBACC, + 2946: 0xBACD, + 2947: 0xBACE, + 2948: 0xBACF, + 2949: 0xBAD0, + 2950: 0xBAD1, + 2951: 0xBAD2, + 2952: 0xBAD3, + 2953: 0xBAD4, + 2954: 0xBAD5, + 2955: 0xBAD6, + 2956: 0xBAD7, + 2957: 0xBADA, + 2958: 0xBADB, + 2959: 0xBADC, + 2960: 0xBADD, + 2961: 0xBADE, + 2962: 0xBADF, + 2963: 0xBAE0, + 2964: 0xBAE1, + 2965: 0xBAE2, + 2966: 0xBAE3, + 2967: 0xBAE4, + 2968: 0xBAE5, + 2969: 0xBAE6, + 2970: 0xBAE7, + 2971: 0xBAE8, + 2972: 0xBAE9, + 2973: 0xBAEA, + 2974: 0xBAEB, + 2975: 0xBAEC, + 2976: 0xBAED, + 2977: 0xBAEE, + 2978: 0xBAEF, + 2979: 0xBAF0, + 2980: 0xBAF1, + 2981: 0xBAF2, + 2982: 0xBAF3, + 2983: 0xBAF4, + 2984: 0xBAF5, + 2985: 0xBAF6, + 2986: 0xBAF7, + 2987: 0xBAF8, + 2988: 0xBAF9, + 2989: 0xBAFA, + 2990: 0xBAFB, + 2991: 0xBAFD, + 2992: 0xBAFE, + 2993: 0xBAFF, + 2994: 0xBB01, + 2995: 0xBB02, + 2996: 0xBB03, + 2997: 0xBB05, + 2998: 0xBB06, + 2999: 0xBB07, + 3000: 0xBB08, + 3001: 0xBB09, + 3002: 0xBB0A, + 3003: 0xBB0B, + 3004: 0xBB0C, + 3005: 0xBB0E, + 3006: 0xBB10, + 3007: 0xBB12, + 3008: 0xBB13, + 3009: 0xBB14, + 3010: 0xBB15, + 3011: 0xBB16, + 3012: 0xBB17, + 3013: 0xBB19, + 3014: 0xBB1A, + 3015: 0xBB1B, + 3016: 0xBB1D, + 3017: 0xBB1E, + 3018: 0xBB1F, + 3019: 0xBB21, + 3020: 0xBB22, + 3021: 0xBB23, + 3022: 0xBB24, + 3023: 0xBB25, + 3024: 0xBB26, + 3025: 0xBB27, + 3026: 0xBB28, + 3027: 0xBB2A, + 3028: 0xBB2C, + 3029: 0xBB2D, + 3030: 0xBB2E, + 3031: 0xBB2F, + 3032: 0xBB30, + 3033: 0xBB31, + 3034: 0xBB32, + 3035: 0xBB33, + 3036: 0xBB37, + 3037: 0xBB39, + 3038: 0xBB3A, + 3039: 0xBB3F, + 3040: 0xBB40, + 3041: 0xBB41, + 3042: 0xBB42, + 3043: 0xBB43, + 3044: 0xBB46, + 3045: 0xBB48, + 3046: 0xBB4A, + 3047: 0xBB4B, + 3048: 0xBB4C, + 3049: 0xBB4E, + 3050: 0xBB51, + 3051: 0xBB52, + 3052: 0xBB53, + 3053: 0xBB55, + 3054: 0xBB56, + 3055: 0xBB57, + 3056: 0xBB59, + 3057: 0xBB5A, + 3058: 0xBB5B, + 3059: 0xBB5C, + 3060: 0xBB5D, + 3061: 0xBB5E, + 3062: 0xBB5F, + 3063: 0xBB60, + 3064: 0xBB62, + 3065: 0xBB64, + 3066: 0xBB65, + 3067: 0xBB66, + 3068: 0xBB67, + 3069: 0xBB68, + 3070: 0xBB69, + 3071: 0xBB6A, + 3072: 0xBB6B, + 3073: 0xBB6D, + 3074: 0xBB6E, + 3075: 0xBB6F, + 3076: 0xBB70, + 3077: 0xBB71, + 3078: 0xBB72, + 3079: 0xBB73, + 3080: 0xBB74, + 3081: 0xBB75, + 3082: 0xBB76, + 3083: 0xBB77, + 3084: 0xBB78, + 3085: 0xBB79, + 3086: 0xBB7A, + 3087: 0xBB7B, + 3088: 0xBB7C, + 3089: 0xBB7D, + 3090: 0xBB7E, + 3091: 0xBB7F, + 3092: 0xBB80, + 3093: 0xBB81, + 3094: 0xBB82, + 3095: 0xBB83, + 3096: 0xBB84, + 3097: 0xBB85, + 3098: 0xBB86, + 3099: 0xBB87, + 3100: 0xBB89, + 3101: 0xBB8A, + 3102: 0xBB8B, + 3103: 0xBB8D, + 3104: 0xBB8E, + 3105: 0xBB8F, + 3106: 0xBB91, + 3107: 0xBB92, + 3108: 0xBB93, + 3109: 0xBB94, + 3110: 0xBB95, + 3111: 0xBB96, + 3112: 0xBB97, + 3113: 0xBB98, + 3114: 0xBB99, + 3115: 0xBB9A, + 3116: 0xBB9B, + 3117: 0xBB9C, + 3118: 0xBB9D, + 3119: 0xBB9E, + 3120: 0xBB9F, + 3121: 0xBBA0, + 3122: 0xBBA1, + 3123: 0xBBA2, + 3124: 0xBBA3, + 3125: 0xBBA5, + 3126: 0xBBA6, + 3127: 0xBBA7, + 3128: 0xBBA9, + 3129: 0xBBAA, + 3130: 0xBBAB, + 3131: 0xBBAD, + 3132: 0xBBAE, + 3133: 0xBBAF, + 3134: 0xBBB0, + 3135: 0xBBB1, + 3136: 0xBBB2, + 3137: 0xBBB3, + 3138: 0xBBB5, + 3139: 0xBBB6, + 3140: 0xBBB8, + 3141: 0xBBB9, + 3142: 0xBBBA, + 3143: 0xBBBB, + 3144: 0xBBBC, + 3145: 0xBBBD, + 3146: 0xBBBE, + 3147: 0xBBBF, + 3148: 0xBBC1, + 3149: 0xBBC2, + 3150: 0xBBC3, + 3151: 0xBBC5, + 3152: 0xBBC6, + 3153: 0xBBC7, + 3154: 0xBBC9, + 3155: 0xBBCA, + 3156: 0xBBCB, + 3157: 0xBBCC, + 3158: 0xBBCD, + 3159: 0xBBCE, + 3160: 0xBBCF, + 3161: 0xBBD1, + 3162: 0xBBD2, + 3163: 0xBBD4, + 3164: 0xBBD5, + 3165: 0xBBD6, + 3166: 0xBBD7, + 3167: 0xBBD8, + 3168: 0xBBD9, + 3169: 0xBBDA, + 3170: 0xBBDB, + 3171: 0xBBDC, + 3172: 0xBBDD, + 3173: 0xBBDE, + 3174: 0xBBDF, + 3175: 0xBBE0, + 3176: 0xBBE1, + 3177: 0xBBE2, + 3178: 0xBBE3, + 3179: 0xBBE4, + 3180: 0xBBE5, + 3181: 0xBBE6, + 3182: 0xBBE7, + 3183: 0xBBE8, + 3184: 0xBBE9, + 3185: 0xBBEA, + 3186: 0xBBEB, + 3187: 0xBBEC, + 3188: 0xBBED, + 3189: 0xBBEE, + 3190: 0xBBEF, + 3191: 0xBBF0, + 3192: 0xBBF1, + 3193: 0xBBF2, + 3194: 0xBBF3, + 3195: 0xBBF4, + 3196: 0xBBF5, + 3197: 0xBBF6, + 3198: 0xBBF7, + 3199: 0xBBFA, + 3200: 0xBBFB, + 3201: 0xBBFD, + 3202: 0xBBFE, + 3203: 0xBC01, + 3204: 0xBC03, + 3205: 0xBC04, + 3206: 0xBC05, + 3207: 0xBC06, + 3208: 0xBC07, + 3209: 0xBC0A, + 3210: 0xBC0E, + 3211: 0xBC10, + 3212: 0xBC12, + 3213: 0xBC13, + 3214: 0xBC19, + 3215: 0xBC1A, + 3216: 0xBC20, + 3217: 0xBC21, + 3218: 0xBC22, + 3219: 0xBC23, + 3220: 0xBC26, + 3221: 0xBC28, + 3222: 0xBC2A, + 3223: 0xBC2B, + 3224: 0xBC2C, + 3225: 0xBC2E, + 3226: 0xBC2F, + 3227: 0xBC32, + 3228: 0xBC33, + 3229: 0xBC35, + 3230: 0xBC36, + 3231: 0xBC37, + 3232: 0xBC39, + 3233: 0xBC3A, + 3234: 0xBC3B, + 3235: 0xBC3C, + 3236: 0xBC3D, + 3237: 0xBC3E, + 3238: 0xBC3F, + 3239: 0xBC42, + 3240: 0xBC46, + 3241: 0xBC47, + 3242: 0xBC48, + 3243: 0xBC4A, + 3244: 0xBC4B, + 3245: 0xBC4E, + 3246: 0xBC4F, + 3247: 0xBC51, + 3248: 0xBC52, + 3249: 0xBC53, + 3250: 0xBC54, + 3251: 0xBC55, + 3252: 0xBC56, + 3253: 0xBC57, + 3254: 0xBC58, + 3255: 0xBC59, + 3256: 0xBC5A, + 3257: 0xBC5B, + 3258: 0xBC5C, + 3259: 0xBC5E, + 3260: 0xBC5F, + 3261: 0xBC60, + 3262: 0xBC61, + 3263: 0xBC62, + 3264: 0xBC63, + 3265: 0xBC64, + 3266: 0xBC65, + 3267: 0xBC66, + 3268: 0xBC67, + 3269: 0xBC68, + 3270: 0xBC69, + 3271: 0xBC6A, + 3272: 0xBC6B, + 3273: 0xBC6C, + 3274: 0xBC6D, + 3275: 0xBC6E, + 3276: 0xBC6F, + 3277: 0xBC70, + 3278: 0xBC71, + 3279: 0xBC72, + 3280: 0xBC73, + 3281: 0xBC74, + 3282: 0xBC75, + 3283: 0xBC76, + 3284: 0xBC77, + 3285: 0xBC78, + 3286: 0xBC79, + 3287: 0xBC7A, + 3288: 0xBC7B, + 3289: 0xBC7C, + 3290: 0xBC7D, + 3291: 0xBC7E, + 3292: 0xBC7F, + 3293: 0xBC80, + 3294: 0xBC81, + 3295: 0xBC82, + 3296: 0xBC83, + 3297: 0xBC86, + 3298: 0xBC87, + 3299: 0xBC89, + 3300: 0xBC8A, + 3301: 0xBC8D, + 3302: 0xBC8F, + 3303: 0xBC90, + 3304: 0xBC91, + 3305: 0xBC92, + 3306: 0xBC93, + 3307: 0xBC96, + 3308: 0xBC98, + 3309: 0xBC9B, + 3310: 0xBC9C, + 3311: 0xBC9D, + 3312: 0xBC9E, + 3313: 0xBC9F, + 3314: 0xBCA2, + 3315: 0xBCA3, + 3316: 0xBCA5, + 3317: 0xBCA6, + 3318: 0xBCA9, + 3319: 0xBCAA, + 3320: 0xBCAB, + 3321: 0xBCAC, + 3322: 0xBCAD, + 3323: 0xBCAE, + 3324: 0xBCAF, + 3325: 0xBCB2, + 3326: 0xBCB6, + 3327: 0xBCB7, + 3328: 0xBCB8, + 3329: 0xBCB9, + 3330: 0xBCBA, + 3331: 0xBCBB, + 3332: 0xBCBE, + 3333: 0xBCBF, + 3334: 0xBCC1, + 3335: 0xBCC2, + 3336: 0xBCC3, + 3337: 0xBCC5, + 3338: 0xBCC6, + 3339: 0xBCC7, + 3340: 0xBCC8, + 3341: 0xBCC9, + 3342: 0xBCCA, + 3343: 0xBCCB, + 3344: 0xBCCC, + 3345: 0xBCCE, + 3346: 0xBCD2, + 3347: 0xBCD3, + 3348: 0xBCD4, + 3349: 0xBCD6, + 3350: 0xBCD7, + 3351: 0xBCD9, + 3352: 0xBCDA, + 3353: 0xBCDB, + 3354: 0xBCDD, + 3355: 0xBCDE, + 3356: 0xBCDF, + 3357: 0xBCE0, + 3358: 0xBCE1, + 3359: 0xBCE2, + 3360: 0xBCE3, + 3361: 0xBCE4, + 3362: 0xBCE5, + 3363: 0xBCE6, + 3364: 0xBCE7, + 3365: 0xBCE8, + 3366: 0xBCE9, + 3367: 0xBCEA, + 3368: 0xBCEB, + 3369: 0xBCEC, + 3370: 0xBCED, + 3371: 0xBCEE, + 3372: 0xBCEF, + 3373: 0xBCF0, + 3374: 0xBCF1, + 3375: 0xBCF2, + 3376: 0xBCF3, + 3377: 0xBCF7, + 3378: 0xBCF9, + 3379: 0xBCFA, + 3380: 0xBCFB, + 3381: 0xBCFD, + 3382: 0xBCFE, + 3383: 0xBCFF, + 3384: 0xBD00, + 3385: 0xBD01, + 3386: 0xBD02, + 3387: 0xBD03, + 3388: 0xBD06, + 3389: 0xBD08, + 3390: 0xBD0A, + 3391: 0xBD0B, + 3392: 0xBD0C, + 3393: 0xBD0D, + 3394: 0xBD0E, + 3395: 0xBD0F, + 3396: 0xBD11, + 3397: 0xBD12, + 3398: 0xBD13, + 3399: 0xBD15, + 3400: 0xBD16, + 3401: 0xBD17, + 3402: 0xBD18, + 3403: 0xBD19, + 3404: 0xBD1A, + 3405: 0xBD1B, + 3406: 0xBD1C, + 3407: 0xBD1D, + 3408: 0xBD1E, + 3409: 0xBD1F, + 3410: 0xBD20, + 3411: 0xBD21, + 3412: 0xBD22, + 3413: 0xBD23, + 3414: 0xBD25, + 3415: 0xBD26, + 3416: 0xBD27, + 3417: 0xBD28, + 3418: 0xBD29, + 3419: 0xBD2A, + 3420: 0xBD2B, + 3421: 0xBD2D, + 3422: 0xBD2E, + 3423: 0xBD2F, + 3424: 0xBD30, + 3425: 0xBD31, + 3426: 0xBD32, + 3427: 0xBD33, + 3428: 0xBD34, + 3429: 0xBD35, + 3430: 0xBD36, + 3431: 0xBD37, + 3432: 0xBD38, + 3433: 0xBD39, + 3434: 0xBD3A, + 3435: 0xBD3B, + 3436: 0xBD3C, + 3437: 0xBD3D, + 3438: 0xBD3E, + 3439: 0xBD3F, + 3440: 0xBD41, + 3441: 0xBD42, + 3442: 0xBD43, + 3443: 0xBD44, + 3444: 0xBD45, + 3445: 0xBD46, + 3446: 0xBD47, + 3447: 0xBD4A, + 3448: 0xBD4B, + 3449: 0xBD4D, + 3450: 0xBD4E, + 3451: 0xBD4F, + 3452: 0xBD51, + 3453: 0xBD52, + 3454: 0xBD53, + 3455: 0xBD54, + 3456: 0xBD55, + 3457: 0xBD56, + 3458: 0xBD57, + 3459: 0xBD5A, + 3460: 0xBD5B, + 3461: 0xBD5C, + 3462: 0xBD5D, + 3463: 0xBD5E, + 3464: 0xBD5F, + 3465: 0xBD60, + 3466: 0xBD61, + 3467: 0xBD62, + 3468: 0xBD63, + 3469: 0xBD65, + 3470: 0xBD66, + 3471: 0xBD67, + 3472: 0xBD69, + 3473: 0xBD6A, + 3474: 0xBD6B, + 3475: 0xBD6C, + 3476: 0xBD6D, + 3477: 0xBD6E, + 3478: 0xBD6F, + 3479: 0xBD70, + 3480: 0xBD71, + 3481: 0xBD72, + 3482: 0xBD73, + 3483: 0xBD74, + 3484: 0xBD75, + 3485: 0xBD76, + 3486: 0xBD77, + 3487: 0xBD78, + 3488: 0xBD79, + 3489: 0xBD7A, + 3490: 0xBD7B, + 3491: 0xBD7C, + 3492: 0xBD7D, + 3493: 0xBD7E, + 3494: 0xBD7F, + 3495: 0xBD82, + 3496: 0xBD83, + 3497: 0xBD85, + 3498: 0xBD86, + 3499: 0xBD8B, + 3500: 0xBD8C, + 3501: 0xBD8D, + 3502: 0xBD8E, + 3503: 0xBD8F, + 3504: 0xBD92, + 3505: 0xBD94, + 3506: 0xBD96, + 3507: 0xBD97, + 3508: 0xBD98, + 3509: 0xBD9B, + 3510: 0xBD9D, + 3511: 0xBD9E, + 3512: 0xBD9F, + 3513: 0xBDA0, + 3514: 0xBDA1, + 3515: 0xBDA2, + 3516: 0xBDA3, + 3517: 0xBDA5, + 3518: 0xBDA6, + 3519: 0xBDA7, + 3520: 0xBDA8, + 3521: 0xBDA9, + 3522: 0xBDAA, + 3523: 0xBDAB, + 3524: 0xBDAC, + 3525: 0xBDAD, + 3526: 0xBDAE, + 3527: 0xBDAF, + 3528: 0xBDB1, + 3529: 0xBDB2, + 3530: 0xBDB3, + 3531: 0xBDB4, + 3532: 0xBDB5, + 3533: 0xBDB6, + 3534: 0xBDB7, + 3535: 0xBDB9, + 3536: 0xBDBA, + 3537: 0xBDBB, + 3538: 0xBDBC, + 3539: 0xBDBD, + 3540: 0xBDBE, + 3541: 0xBDBF, + 3542: 0xBDC0, + 3543: 0xBDC1, + 3544: 0xBDC2, + 3545: 0xBDC3, + 3546: 0xBDC4, + 3547: 0xBDC5, + 3548: 0xBDC6, + 3549: 0xBDC7, + 3550: 0xBDC8, + 3551: 0xBDC9, + 3552: 0xBDCA, + 3553: 0xBDCB, + 3554: 0xBDCC, + 3555: 0xBDCD, + 3556: 0xBDCE, + 3557: 0xBDCF, + 3558: 0xBDD0, + 3559: 0xBDD1, + 3560: 0xBDD2, + 3561: 0xBDD3, + 3562: 0xBDD6, + 3563: 0xBDD7, + 3564: 0xBDD9, + 3565: 0xBDDA, + 3566: 0xBDDB, + 3567: 0xBDDD, + 3568: 0xBDDE, + 3569: 0xBDDF, + 3570: 0xBDE0, + 3571: 0xBDE1, + 3572: 0xBDE2, + 3573: 0xBDE3, + 3574: 0xBDE4, + 3575: 0xBDE5, + 3576: 0xBDE6, + 3577: 0xBDE7, + 3578: 0xBDE8, + 3579: 0xBDEA, + 3580: 0xBDEB, + 3581: 0xBDEC, + 3582: 0xBDED, + 3583: 0xBDEE, + 3584: 0xBDEF, + 3585: 0xBDF1, + 3586: 0xBDF2, + 3587: 0xBDF3, + 3588: 0xBDF5, + 3589: 0xBDF6, + 3590: 0xBDF7, + 3591: 0xBDF9, + 3592: 0xBDFA, + 3593: 0xBDFB, + 3594: 0xBDFC, + 3595: 0xBDFD, + 3596: 0xBDFE, + 3597: 0xBDFF, + 3598: 0xBE01, + 3599: 0xBE02, + 3600: 0xBE04, + 3601: 0xBE06, + 3602: 0xBE07, + 3603: 0xBE08, + 3604: 0xBE09, + 3605: 0xBE0A, + 3606: 0xBE0B, + 3607: 0xBE0E, + 3608: 0xBE0F, + 3609: 0xBE11, + 3610: 0xBE12, + 3611: 0xBE13, + 3612: 0xBE15, + 3613: 0xBE16, + 3614: 0xBE17, + 3615: 0xBE18, + 3616: 0xBE19, + 3617: 0xBE1A, + 3618: 0xBE1B, + 3619: 0xBE1E, + 3620: 0xBE20, + 3621: 0xBE21, + 3622: 0xBE22, + 3623: 0xBE23, + 3624: 0xBE24, + 3625: 0xBE25, + 3626: 0xBE26, + 3627: 0xBE27, + 3628: 0xBE28, + 3629: 0xBE29, + 3630: 0xBE2A, + 3631: 0xBE2B, + 3632: 0xBE2C, + 3633: 0xBE2D, + 3634: 0xBE2E, + 3635: 0xBE2F, + 3636: 0xBE30, + 3637: 0xBE31, + 3638: 0xBE32, + 3639: 0xBE33, + 3640: 0xBE34, + 3641: 0xBE35, + 3642: 0xBE36, + 3643: 0xBE37, + 3644: 0xBE38, + 3645: 0xBE39, + 3646: 0xBE3A, + 3647: 0xBE3B, + 3648: 0xBE3C, + 3649: 0xBE3D, + 3650: 0xBE3E, + 3651: 0xBE3F, + 3652: 0xBE40, + 3653: 0xBE41, + 3654: 0xBE42, + 3655: 0xBE43, + 3656: 0xBE46, + 3657: 0xBE47, + 3658: 0xBE49, + 3659: 0xBE4A, + 3660: 0xBE4B, + 3661: 0xBE4D, + 3662: 0xBE4F, + 3663: 0xBE50, + 3664: 0xBE51, + 3665: 0xBE52, + 3666: 0xBE53, + 3667: 0xBE56, + 3668: 0xBE58, + 3669: 0xBE5C, + 3670: 0xBE5D, + 3671: 0xBE5E, + 3672: 0xBE5F, + 3673: 0xBE62, + 3674: 0xBE63, + 3675: 0xBE65, + 3676: 0xBE66, + 3677: 0xBE67, + 3678: 0xBE69, + 3679: 0xBE6B, + 3680: 0xBE6C, + 3681: 0xBE6D, + 3682: 0xBE6E, + 3683: 0xBE6F, + 3684: 0xBE72, + 3685: 0xBE76, + 3686: 0xBE77, + 3687: 0xBE78, + 3688: 0xBE79, + 3689: 0xBE7A, + 3690: 0xBE7E, + 3691: 0xBE7F, + 3692: 0xBE81, + 3693: 0xBE82, + 3694: 0xBE83, + 3695: 0xBE85, + 3696: 0xBE86, + 3697: 0xBE87, + 3698: 0xBE88, + 3699: 0xBE89, + 3700: 0xBE8A, + 3701: 0xBE8B, + 3702: 0xBE8E, + 3703: 0xBE92, + 3704: 0xBE93, + 3705: 0xBE94, + 3706: 0xBE95, + 3707: 0xBE96, + 3708: 0xBE97, + 3709: 0xBE9A, + 3710: 0xBE9B, + 3711: 0xBE9C, + 3712: 0xBE9D, + 3713: 0xBE9E, + 3714: 0xBE9F, + 3715: 0xBEA0, + 3716: 0xBEA1, + 3717: 0xBEA2, + 3718: 0xBEA3, + 3719: 0xBEA4, + 3720: 0xBEA5, + 3721: 0xBEA6, + 3722: 0xBEA7, + 3723: 0xBEA9, + 3724: 0xBEAA, + 3725: 0xBEAB, + 3726: 0xBEAC, + 3727: 0xBEAD, + 3728: 0xBEAE, + 3729: 0xBEAF, + 3730: 0xBEB0, + 3731: 0xBEB1, + 3732: 0xBEB2, + 3733: 0xBEB3, + 3734: 0xBEB4, + 3735: 0xBEB5, + 3736: 0xBEB6, + 3737: 0xBEB7, + 3738: 0xBEB8, + 3739: 0xBEB9, + 3740: 0xBEBA, + 3741: 0xBEBB, + 3742: 0xBEBC, + 3743: 0xBEBD, + 3744: 0xBEBE, + 3745: 0xBEBF, + 3746: 0xBEC0, + 3747: 0xBEC1, + 3748: 0xBEC2, + 3749: 0xBEC3, + 3750: 0xBEC4, + 3751: 0xBEC5, + 3752: 0xBEC6, + 3753: 0xBEC7, + 3754: 0xBEC8, + 3755: 0xBEC9, + 3756: 0xBECA, + 3757: 0xBECB, + 3758: 0xBECC, + 3759: 0xBECD, + 3760: 0xBECE, + 3761: 0xBECF, + 3762: 0xBED2, + 3763: 0xBED3, + 3764: 0xBED5, + 3765: 0xBED6, + 3766: 0xBED9, + 3767: 0xBEDA, + 3768: 0xBEDB, + 3769: 0xBEDC, + 3770: 0xBEDD, + 3771: 0xBEDE, + 3772: 0xBEDF, + 3773: 0xBEE1, + 3774: 0xBEE2, + 3775: 0xBEE6, + 3776: 0xBEE7, + 3777: 0xBEE8, + 3778: 0xBEE9, + 3779: 0xBEEA, + 3780: 0xBEEB, + 3781: 0xBEED, + 3782: 0xBEEE, + 3783: 0xBEEF, + 3784: 0xBEF0, + 3785: 0xBEF1, + 3786: 0xBEF2, + 3787: 0xBEF3, + 3788: 0xBEF4, + 3789: 0xBEF5, + 3790: 0xBEF6, + 3791: 0xBEF7, + 3792: 0xBEF8, + 3793: 0xBEF9, + 3794: 0xBEFA, + 3795: 0xBEFB, + 3796: 0xBEFC, + 3797: 0xBEFD, + 3798: 0xBEFE, + 3799: 0xBEFF, + 3800: 0xBF00, + 3801: 0xBF02, + 3802: 0xBF03, + 3803: 0xBF04, + 3804: 0xBF05, + 3805: 0xBF06, + 3806: 0xBF07, + 3807: 0xBF0A, + 3808: 0xBF0B, + 3809: 0xBF0C, + 3810: 0xBF0D, + 3811: 0xBF0E, + 3812: 0xBF0F, + 3813: 0xBF10, + 3814: 0xBF11, + 3815: 0xBF12, + 3816: 0xBF13, + 3817: 0xBF14, + 3818: 0xBF15, + 3819: 0xBF16, + 3820: 0xBF17, + 3821: 0xBF1A, + 3822: 0xBF1E, + 3823: 0xBF1F, + 3824: 0xBF20, + 3825: 0xBF21, + 3826: 0xBF22, + 3827: 0xBF23, + 3828: 0xBF24, + 3829: 0xBF25, + 3830: 0xBF26, + 3831: 0xBF27, + 3832: 0xBF28, + 3833: 0xBF29, + 3834: 0xBF2A, + 3835: 0xBF2B, + 3836: 0xBF2C, + 3837: 0xBF2D, + 3838: 0xBF2E, + 3839: 0xBF2F, + 3840: 0xBF30, + 3841: 0xBF31, + 3842: 0xBF32, + 3843: 0xBF33, + 3844: 0xBF34, + 3845: 0xBF35, + 3846: 0xBF36, + 3847: 0xBF37, + 3848: 0xBF38, + 3849: 0xBF39, + 3850: 0xBF3A, + 3851: 0xBF3B, + 3852: 0xBF3C, + 3853: 0xBF3D, + 3854: 0xBF3E, + 3855: 0xBF3F, + 3856: 0xBF42, + 3857: 0xBF43, + 3858: 0xBF45, + 3859: 0xBF46, + 3860: 0xBF47, + 3861: 0xBF49, + 3862: 0xBF4A, + 3863: 0xBF4B, + 3864: 0xBF4C, + 3865: 0xBF4D, + 3866: 0xBF4E, + 3867: 0xBF4F, + 3868: 0xBF52, + 3869: 0xBF53, + 3870: 0xBF54, + 3871: 0xBF56, + 3872: 0xBF57, + 3873: 0xBF58, + 3874: 0xBF59, + 3875: 0xBF5A, + 3876: 0xBF5B, + 3877: 0xBF5C, + 3878: 0xBF5D, + 3879: 0xBF5E, + 3880: 0xBF5F, + 3881: 0xBF60, + 3882: 0xBF61, + 3883: 0xBF62, + 3884: 0xBF63, + 3885: 0xBF64, + 3886: 0xBF65, + 3887: 0xBF66, + 3888: 0xBF67, + 3889: 0xBF68, + 3890: 0xBF69, + 3891: 0xBF6A, + 3892: 0xBF6B, + 3893: 0xBF6C, + 3894: 0xBF6D, + 3895: 0xBF6E, + 3896: 0xBF6F, + 3897: 0xBF70, + 3898: 0xBF71, + 3899: 0xBF72, + 3900: 0xBF73, + 3901: 0xBF74, + 3902: 0xBF75, + 3903: 0xBF76, + 3904: 0xBF77, + 3905: 0xBF78, + 3906: 0xBF79, + 3907: 0xBF7A, + 3908: 0xBF7B, + 3909: 0xBF7C, + 3910: 0xBF7D, + 3911: 0xBF7E, + 3912: 0xBF7F, + 3913: 0xBF80, + 3914: 0xBF81, + 3915: 0xBF82, + 3916: 0xBF83, + 3917: 0xBF84, + 3918: 0xBF85, + 3919: 0xBF86, + 3920: 0xBF87, + 3921: 0xBF88, + 3922: 0xBF89, + 3923: 0xBF8A, + 3924: 0xBF8B, + 3925: 0xBF8C, + 3926: 0xBF8D, + 3927: 0xBF8E, + 3928: 0xBF8F, + 3929: 0xBF90, + 3930: 0xBF91, + 3931: 0xBF92, + 3932: 0xBF93, + 3933: 0xBF95, + 3934: 0xBF96, + 3935: 0xBF97, + 3936: 0xBF98, + 3937: 0xBF99, + 3938: 0xBF9A, + 3939: 0xBF9B, + 3940: 0xBF9C, + 3941: 0xBF9D, + 3942: 0xBF9E, + 3943: 0xBF9F, + 3944: 0xBFA0, + 3945: 0xBFA1, + 3946: 0xBFA2, + 3947: 0xBFA3, + 3948: 0xBFA4, + 3949: 0xBFA5, + 3950: 0xBFA6, + 3951: 0xBFA7, + 3952: 0xBFA8, + 3953: 0xBFA9, + 3954: 0xBFAA, + 3955: 0xBFAB, + 3956: 0xBFAC, + 3957: 0xBFAD, + 3958: 0xBFAE, + 3959: 0xBFAF, + 3960: 0xBFB1, + 3961: 0xBFB2, + 3962: 0xBFB3, + 3963: 0xBFB4, + 3964: 0xBFB5, + 3965: 0xBFB6, + 3966: 0xBFB7, + 3967: 0xBFB8, + 3968: 0xBFB9, + 3969: 0xBFBA, + 3970: 0xBFBB, + 3971: 0xBFBC, + 3972: 0xBFBD, + 3973: 0xBFBE, + 3974: 0xBFBF, + 3975: 0xBFC0, + 3976: 0xBFC1, + 3977: 0xBFC2, + 3978: 0xBFC3, + 3979: 0xBFC4, + 3980: 0xBFC6, + 3981: 0xBFC7, + 3982: 0xBFC8, + 3983: 0xBFC9, + 3984: 0xBFCA, + 3985: 0xBFCB, + 3986: 0xBFCE, + 3987: 0xBFCF, + 3988: 0xBFD1, + 3989: 0xBFD2, + 3990: 0xBFD3, + 3991: 0xBFD5, + 3992: 0xBFD6, + 3993: 0xBFD7, + 3994: 0xBFD8, + 3995: 0xBFD9, + 3996: 0xBFDA, + 3997: 0xBFDB, + 3998: 0xBFDD, + 3999: 0xBFDE, + 4000: 0xBFE0, + 4001: 0xBFE2, + 4002: 0xBFE3, + 4003: 0xBFE4, + 4004: 0xBFE5, + 4005: 0xBFE6, + 4006: 0xBFE7, + 4007: 0xBFE8, + 4008: 0xBFE9, + 4009: 0xBFEA, + 4010: 0xBFEB, + 4011: 0xBFEC, + 4012: 0xBFED, + 4013: 0xBFEE, + 4014: 0xBFEF, + 4015: 0xBFF0, + 4016: 0xBFF1, + 4017: 0xBFF2, + 4018: 0xBFF3, + 4019: 0xBFF4, + 4020: 0xBFF5, + 4021: 0xBFF6, + 4022: 0xBFF7, + 4023: 0xBFF8, + 4024: 0xBFF9, + 4025: 0xBFFA, + 4026: 0xBFFB, + 4027: 0xBFFC, + 4028: 0xBFFD, + 4029: 0xBFFE, + 4030: 0xBFFF, + 4031: 0xC000, + 4032: 0xC001, + 4033: 0xC002, + 4034: 0xC003, + 4035: 0xC004, + 4036: 0xC005, + 4037: 0xC006, + 4038: 0xC007, + 4039: 0xC008, + 4040: 0xC009, + 4041: 0xC00A, + 4042: 0xC00B, + 4043: 0xC00C, + 4044: 0xC00D, + 4045: 0xC00E, + 4046: 0xC00F, + 4047: 0xC010, + 4048: 0xC011, + 4049: 0xC012, + 4050: 0xC013, + 4051: 0xC014, + 4052: 0xC015, + 4053: 0xC016, + 4054: 0xC017, + 4055: 0xC018, + 4056: 0xC019, + 4057: 0xC01A, + 4058: 0xC01B, + 4059: 0xC01C, + 4060: 0xC01D, + 4061: 0xC01E, + 4062: 0xC01F, + 4063: 0xC020, + 4064: 0xC021, + 4065: 0xC022, + 4066: 0xC023, + 4067: 0xC024, + 4068: 0xC025, + 4069: 0xC026, + 4070: 0xC027, + 4071: 0xC028, + 4072: 0xC029, + 4073: 0xC02A, + 4074: 0xC02B, + 4075: 0xC02C, + 4076: 0xC02D, + 4077: 0xC02E, + 4078: 0xC02F, + 4079: 0xC030, + 4080: 0xC031, + 4081: 0xC032, + 4082: 0xC033, + 4083: 0xC034, + 4084: 0xC035, + 4085: 0xC036, + 4086: 0xC037, + 4087: 0xC038, + 4088: 0xC039, + 4089: 0xC03A, + 4090: 0xC03B, + 4091: 0xC03D, + 4092: 0xC03E, + 4093: 0xC03F, + 4094: 0xC040, + 4095: 0xC041, + 4096: 0xC042, + 4097: 0xC043, + 4098: 0xC044, + 4099: 0xC045, + 4100: 0xC046, + 4101: 0xC047, + 4102: 0xC048, + 4103: 0xC049, + 4104: 0xC04A, + 4105: 0xC04B, + 4106: 0xC04C, + 4107: 0xC04D, + 4108: 0xC04E, + 4109: 0xC04F, + 4110: 0xC050, + 4111: 0xC052, + 4112: 0xC053, + 4113: 0xC054, + 4114: 0xC055, + 4115: 0xC056, + 4116: 0xC057, + 4117: 0xC059, + 4118: 0xC05A, + 4119: 0xC05B, + 4120: 0xC05D, + 4121: 0xC05E, + 4122: 0xC05F, + 4123: 0xC061, + 4124: 0xC062, + 4125: 0xC063, + 4126: 0xC064, + 4127: 0xC065, + 4128: 0xC066, + 4129: 0xC067, + 4130: 0xC06A, + 4131: 0xC06B, + 4132: 0xC06C, + 4133: 0xC06D, + 4134: 0xC06E, + 4135: 0xC06F, + 4136: 0xC070, + 4137: 0xC071, + 4138: 0xC072, + 4139: 0xC073, + 4140: 0xC074, + 4141: 0xC075, + 4142: 0xC076, + 4143: 0xC077, + 4144: 0xC078, + 4145: 0xC079, + 4146: 0xC07A, + 4147: 0xC07B, + 4148: 0xC07C, + 4149: 0xC07D, + 4150: 0xC07E, + 4151: 0xC07F, + 4152: 0xC080, + 4153: 0xC081, + 4154: 0xC082, + 4155: 0xC083, + 4156: 0xC084, + 4157: 0xC085, + 4158: 0xC086, + 4159: 0xC087, + 4160: 0xC088, + 4161: 0xC089, + 4162: 0xC08A, + 4163: 0xC08B, + 4164: 0xC08C, + 4165: 0xC08D, + 4166: 0xC08E, + 4167: 0xC08F, + 4168: 0xC092, + 4169: 0xC093, + 4170: 0xC095, + 4171: 0xC096, + 4172: 0xC097, + 4173: 0xC099, + 4174: 0xC09A, + 4175: 0xC09B, + 4176: 0xC09C, + 4177: 0xC09D, + 4178: 0xC09E, + 4179: 0xC09F, + 4180: 0xC0A2, + 4181: 0xC0A4, + 4182: 0xC0A6, + 4183: 0xC0A7, + 4184: 0xC0A8, + 4185: 0xC0A9, + 4186: 0xC0AA, + 4187: 0xC0AB, + 4188: 0xC0AE, + 4189: 0xC0B1, + 4190: 0xC0B2, + 4191: 0xC0B7, + 4192: 0xC0B8, + 4193: 0xC0B9, + 4194: 0xC0BA, + 4195: 0xC0BB, + 4196: 0xC0BE, + 4197: 0xC0C2, + 4198: 0xC0C3, + 4199: 0xC0C4, + 4200: 0xC0C6, + 4201: 0xC0C7, + 4202: 0xC0CA, + 4203: 0xC0CB, + 4204: 0xC0CD, + 4205: 0xC0CE, + 4206: 0xC0CF, + 4207: 0xC0D1, + 4208: 0xC0D2, + 4209: 0xC0D3, + 4210: 0xC0D4, + 4211: 0xC0D5, + 4212: 0xC0D6, + 4213: 0xC0D7, + 4214: 0xC0DA, + 4215: 0xC0DE, + 4216: 0xC0DF, + 4217: 0xC0E0, + 4218: 0xC0E1, + 4219: 0xC0E2, + 4220: 0xC0E3, + 4221: 0xC0E6, + 4222: 0xC0E7, + 4223: 0xC0E9, + 4224: 0xC0EA, + 4225: 0xC0EB, + 4226: 0xC0ED, + 4227: 0xC0EE, + 4228: 0xC0EF, + 4229: 0xC0F0, + 4230: 0xC0F1, + 4231: 0xC0F2, + 4232: 0xC0F3, + 4233: 0xC0F6, + 4234: 0xC0F8, + 4235: 0xC0FA, + 4236: 0xC0FB, + 4237: 0xC0FC, + 4238: 0xC0FD, + 4239: 0xC0FE, + 4240: 0xC0FF, + 4241: 0xC101, + 4242: 0xC102, + 4243: 0xC103, + 4244: 0xC105, + 4245: 0xC106, + 4246: 0xC107, + 4247: 0xC109, + 4248: 0xC10A, + 4249: 0xC10B, + 4250: 0xC10C, + 4251: 0xC10D, + 4252: 0xC10E, + 4253: 0xC10F, + 4254: 0xC111, + 4255: 0xC112, + 4256: 0xC113, + 4257: 0xC114, + 4258: 0xC116, + 4259: 0xC117, + 4260: 0xC118, + 4261: 0xC119, + 4262: 0xC11A, + 4263: 0xC11B, + 4264: 0xC121, + 4265: 0xC122, + 4266: 0xC125, + 4267: 0xC128, + 4268: 0xC129, + 4269: 0xC12A, + 4270: 0xC12B, + 4271: 0xC12E, + 4272: 0xC132, + 4273: 0xC133, + 4274: 0xC134, + 4275: 0xC135, + 4276: 0xC137, + 4277: 0xC13A, + 4278: 0xC13B, + 4279: 0xC13D, + 4280: 0xC13E, + 4281: 0xC13F, + 4282: 0xC141, + 4283: 0xC142, + 4284: 0xC143, + 4285: 0xC144, + 4286: 0xC145, + 4287: 0xC146, + 4288: 0xC147, + 4289: 0xC14A, + 4290: 0xC14E, + 4291: 0xC14F, + 4292: 0xC150, + 4293: 0xC151, + 4294: 0xC152, + 4295: 0xC153, + 4296: 0xC156, + 4297: 0xC157, + 4298: 0xC159, + 4299: 0xC15A, + 4300: 0xC15B, + 4301: 0xC15D, + 4302: 0xC15E, + 4303: 0xC15F, + 4304: 0xC160, + 4305: 0xC161, + 4306: 0xC162, + 4307: 0xC163, + 4308: 0xC166, + 4309: 0xC16A, + 4310: 0xC16B, + 4311: 0xC16C, + 4312: 0xC16D, + 4313: 0xC16E, + 4314: 0xC16F, + 4315: 0xC171, + 4316: 0xC172, + 4317: 0xC173, + 4318: 0xC175, + 4319: 0xC176, + 4320: 0xC177, + 4321: 0xC179, + 4322: 0xC17A, + 4323: 0xC17B, + 4324: 0xC17C, + 4325: 0xC17D, + 4326: 0xC17E, + 4327: 0xC17F, + 4328: 0xC180, + 4329: 0xC181, + 4330: 0xC182, + 4331: 0xC183, + 4332: 0xC184, + 4333: 0xC186, + 4334: 0xC187, + 4335: 0xC188, + 4336: 0xC189, + 4337: 0xC18A, + 4338: 0xC18B, + 4339: 0xC18F, + 4340: 0xC191, + 4341: 0xC192, + 4342: 0xC193, + 4343: 0xC195, + 4344: 0xC197, + 4345: 0xC198, + 4346: 0xC199, + 4347: 0xC19A, + 4348: 0xC19B, + 4349: 0xC19E, + 4350: 0xC1A0, + 4351: 0xC1A2, + 4352: 0xC1A3, + 4353: 0xC1A4, + 4354: 0xC1A6, + 4355: 0xC1A7, + 4356: 0xC1AA, + 4357: 0xC1AB, + 4358: 0xC1AD, + 4359: 0xC1AE, + 4360: 0xC1AF, + 4361: 0xC1B1, + 4362: 0xC1B2, + 4363: 0xC1B3, + 4364: 0xC1B4, + 4365: 0xC1B5, + 4366: 0xC1B6, + 4367: 0xC1B7, + 4368: 0xC1B8, + 4369: 0xC1B9, + 4370: 0xC1BA, + 4371: 0xC1BB, + 4372: 0xC1BC, + 4373: 0xC1BE, + 4374: 0xC1BF, + 4375: 0xC1C0, + 4376: 0xC1C1, + 4377: 0xC1C2, + 4378: 0xC1C3, + 4379: 0xC1C5, + 4380: 0xC1C6, + 4381: 0xC1C7, + 4382: 0xC1C9, + 4383: 0xC1CA, + 4384: 0xC1CB, + 4385: 0xC1CD, + 4386: 0xC1CE, + 4387: 0xC1CF, + 4388: 0xC1D0, + 4389: 0xC1D1, + 4390: 0xC1D2, + 4391: 0xC1D3, + 4392: 0xC1D5, + 4393: 0xC1D6, + 4394: 0xC1D9, + 4395: 0xC1DA, + 4396: 0xC1DB, + 4397: 0xC1DC, + 4398: 0xC1DD, + 4399: 0xC1DE, + 4400: 0xC1DF, + 4401: 0xC1E1, + 4402: 0xC1E2, + 4403: 0xC1E3, + 4404: 0xC1E5, + 4405: 0xC1E6, + 4406: 0xC1E7, + 4407: 0xC1E9, + 4408: 0xC1EA, + 4409: 0xC1EB, + 4410: 0xC1EC, + 4411: 0xC1ED, + 4412: 0xC1EE, + 4413: 0xC1EF, + 4414: 0xC1F2, + 4415: 0xC1F4, + 4416: 0xC1F5, + 4417: 0xC1F6, + 4418: 0xC1F7, + 4419: 0xC1F8, + 4420: 0xC1F9, + 4421: 0xC1FA, + 4422: 0xC1FB, + 4423: 0xC1FE, + 4424: 0xC1FF, + 4425: 0xC201, + 4426: 0xC202, + 4427: 0xC203, + 4428: 0xC205, + 4429: 0xC206, + 4430: 0xC207, + 4431: 0xC208, + 4432: 0xC209, + 4433: 0xC20A, + 4434: 0xC20B, + 4435: 0xC20E, + 4436: 0xC210, + 4437: 0xC212, + 4438: 0xC213, + 4439: 0xC214, + 4440: 0xC215, + 4441: 0xC216, + 4442: 0xC217, + 4443: 0xC21A, + 4444: 0xC21B, + 4445: 0xC21D, + 4446: 0xC21E, + 4447: 0xC221, + 4448: 0xC222, + 4449: 0xC223, + 4450: 0xC224, + 4451: 0xC225, + 4452: 0xC226, + 4453: 0xC227, + 4454: 0xC22A, + 4455: 0xC22C, + 4456: 0xC22E, + 4457: 0xC230, + 4458: 0xC233, + 4459: 0xC235, + 4460: 0xC236, + 4461: 0xC237, + 4462: 0xC238, + 4463: 0xC239, + 4464: 0xC23A, + 4465: 0xC23B, + 4466: 0xC23C, + 4467: 0xC23D, + 4468: 0xC23E, + 4469: 0xC23F, + 4470: 0xC240, + 4471: 0xC241, + 4472: 0xC242, + 4473: 0xC243, + 4474: 0xC244, + 4475: 0xC245, + 4476: 0xC246, + 4477: 0xC247, + 4478: 0xC249, + 4479: 0xC24A, + 4480: 0xC24B, + 4481: 0xC24C, + 4482: 0xC24D, + 4483: 0xC24E, + 4484: 0xC24F, + 4485: 0xC252, + 4486: 0xC253, + 4487: 0xC255, + 4488: 0xC256, + 4489: 0xC257, + 4490: 0xC259, + 4491: 0xC25A, + 4492: 0xC25B, + 4493: 0xC25C, + 4494: 0xC25D, + 4495: 0xC25E, + 4496: 0xC25F, + 4497: 0xC261, + 4498: 0xC262, + 4499: 0xC263, + 4500: 0xC264, + 4501: 0xC266, + 4502: 0xC267, + 4503: 0xC268, + 4504: 0xC269, + 4505: 0xC26A, + 4506: 0xC26B, + 4507: 0xC26E, + 4508: 0xC26F, + 4509: 0xC271, + 4510: 0xC272, + 4511: 0xC273, + 4512: 0xC275, + 4513: 0xC276, + 4514: 0xC277, + 4515: 0xC278, + 4516: 0xC279, + 4517: 0xC27A, + 4518: 0xC27B, + 4519: 0xC27E, + 4520: 0xC280, + 4521: 0xC282, + 4522: 0xC283, + 4523: 0xC284, + 4524: 0xC285, + 4525: 0xC286, + 4526: 0xC287, + 4527: 0xC28A, + 4528: 0xC28B, + 4529: 0xC28C, + 4530: 0xC28D, + 4531: 0xC28E, + 4532: 0xC28F, + 4533: 0xC291, + 4534: 0xC292, + 4535: 0xC293, + 4536: 0xC294, + 4537: 0xC295, + 4538: 0xC296, + 4539: 0xC297, + 4540: 0xC299, + 4541: 0xC29A, + 4542: 0xC29C, + 4543: 0xC29E, + 4544: 0xC29F, + 4545: 0xC2A0, + 4546: 0xC2A1, + 4547: 0xC2A2, + 4548: 0xC2A3, + 4549: 0xC2A6, + 4550: 0xC2A7, + 4551: 0xC2A9, + 4552: 0xC2AA, + 4553: 0xC2AB, + 4554: 0xC2AE, + 4555: 0xC2AF, + 4556: 0xC2B0, + 4557: 0xC2B1, + 4558: 0xC2B2, + 4559: 0xC2B3, + 4560: 0xC2B6, + 4561: 0xC2B8, + 4562: 0xC2BA, + 4563: 0xC2BB, + 4564: 0xC2BC, + 4565: 0xC2BD, + 4566: 0xC2BE, + 4567: 0xC2BF, + 4568: 0xC2C0, + 4569: 0xC2C1, + 4570: 0xC2C2, + 4571: 0xC2C3, + 4572: 0xC2C4, + 4573: 0xC2C5, + 4574: 0xC2C6, + 4575: 0xC2C7, + 4576: 0xC2C8, + 4577: 0xC2C9, + 4578: 0xC2CA, + 4579: 0xC2CB, + 4580: 0xC2CC, + 4581: 0xC2CD, + 4582: 0xC2CE, + 4583: 0xC2CF, + 4584: 0xC2D0, + 4585: 0xC2D1, + 4586: 0xC2D2, + 4587: 0xC2D3, + 4588: 0xC2D4, + 4589: 0xC2D5, + 4590: 0xC2D6, + 4591: 0xC2D7, + 4592: 0xC2D8, + 4593: 0xC2D9, + 4594: 0xC2DA, + 4595: 0xC2DB, + 4596: 0xC2DE, + 4597: 0xC2DF, + 4598: 0xC2E1, + 4599: 0xC2E2, + 4600: 0xC2E5, + 4601: 0xC2E6, + 4602: 0xC2E7, + 4603: 0xC2E8, + 4604: 0xC2E9, + 4605: 0xC2EA, + 4606: 0xC2EE, + 4607: 0xC2F0, + 4608: 0xC2F2, + 4609: 0xC2F3, + 4610: 0xC2F4, + 4611: 0xC2F5, + 4612: 0xC2F7, + 4613: 0xC2FA, + 4614: 0xC2FD, + 4615: 0xC2FE, + 4616: 0xC2FF, + 4617: 0xC301, + 4618: 0xC302, + 4619: 0xC303, + 4620: 0xC304, + 4621: 0xC305, + 4622: 0xC306, + 4623: 0xC307, + 4624: 0xC30A, + 4625: 0xC30B, + 4626: 0xC30E, + 4627: 0xC30F, + 4628: 0xC310, + 4629: 0xC311, + 4630: 0xC312, + 4631: 0xC316, + 4632: 0xC317, + 4633: 0xC319, + 4634: 0xC31A, + 4635: 0xC31B, + 4636: 0xC31D, + 4637: 0xC31E, + 4638: 0xC31F, + 4639: 0xC320, + 4640: 0xC321, + 4641: 0xC322, + 4642: 0xC323, + 4643: 0xC326, + 4644: 0xC327, + 4645: 0xC32A, + 4646: 0xC32B, + 4647: 0xC32C, + 4648: 0xC32D, + 4649: 0xC32E, + 4650: 0xC32F, + 4651: 0xC330, + 4652: 0xC331, + 4653: 0xC332, + 4654: 0xC333, + 4655: 0xC334, + 4656: 0xC335, + 4657: 0xC336, + 4658: 0xC337, + 4659: 0xC338, + 4660: 0xC339, + 4661: 0xC33A, + 4662: 0xC33B, + 4663: 0xC33C, + 4664: 0xC33D, + 4665: 0xC33E, + 4666: 0xC33F, + 4667: 0xC340, + 4668: 0xC341, + 4669: 0xC342, + 4670: 0xC343, + 4671: 0xC344, + 4672: 0xC346, + 4673: 0xC347, + 4674: 0xC348, + 4675: 0xC349, + 4676: 0xC34A, + 4677: 0xC34B, + 4678: 0xC34C, + 4679: 0xC34D, + 4680: 0xC34E, + 4681: 0xC34F, + 4682: 0xC350, + 4683: 0xC351, + 4684: 0xC352, + 4685: 0xC353, + 4686: 0xC354, + 4687: 0xC355, + 4688: 0xC356, + 4689: 0xC357, + 4690: 0xC358, + 4691: 0xC359, + 4692: 0xC35A, + 4693: 0xC35B, + 4694: 0xC35C, + 4695: 0xC35D, + 4696: 0xC35E, + 4697: 0xC35F, + 4698: 0xC360, + 4699: 0xC361, + 4700: 0xC362, + 4701: 0xC363, + 4702: 0xC364, + 4703: 0xC365, + 4704: 0xC366, + 4705: 0xC367, + 4706: 0xC36A, + 4707: 0xC36B, + 4708: 0xC36D, + 4709: 0xC36E, + 4710: 0xC36F, + 4711: 0xC371, + 4712: 0xC373, + 4713: 0xC374, + 4714: 0xC375, + 4715: 0xC376, + 4716: 0xC377, + 4717: 0xC37A, + 4718: 0xC37B, + 4719: 0xC37E, + 4720: 0xC37F, + 4721: 0xC380, + 4722: 0xC381, + 4723: 0xC382, + 4724: 0xC383, + 4725: 0xC385, + 4726: 0xC386, + 4727: 0xC387, + 4728: 0xC389, + 4729: 0xC38A, + 4730: 0xC38B, + 4731: 0xC38D, + 4732: 0xC38E, + 4733: 0xC38F, + 4734: 0xC390, + 4735: 0xC391, + 4736: 0xC392, + 4737: 0xC393, + 4738: 0xC394, + 4739: 0xC395, + 4740: 0xC396, + 4741: 0xC397, + 4742: 0xC398, + 4743: 0xC399, + 4744: 0xC39A, + 4745: 0xC39B, + 4746: 0xC39C, + 4747: 0xC39D, + 4748: 0xC39E, + 4749: 0xC39F, + 4750: 0xC3A0, + 4751: 0xC3A1, + 4752: 0xC3A2, + 4753: 0xC3A3, + 4754: 0xC3A4, + 4755: 0xC3A5, + 4756: 0xC3A6, + 4757: 0xC3A7, + 4758: 0xC3A8, + 4759: 0xC3A9, + 4760: 0xC3AA, + 4761: 0xC3AB, + 4762: 0xC3AC, + 4763: 0xC3AD, + 4764: 0xC3AE, + 4765: 0xC3AF, + 4766: 0xC3B0, + 4767: 0xC3B1, + 4768: 0xC3B2, + 4769: 0xC3B3, + 4770: 0xC3B4, + 4771: 0xC3B5, + 4772: 0xC3B6, + 4773: 0xC3B7, + 4774: 0xC3B8, + 4775: 0xC3B9, + 4776: 0xC3BA, + 4777: 0xC3BB, + 4778: 0xC3BC, + 4779: 0xC3BD, + 4780: 0xC3BE, + 4781: 0xC3BF, + 4782: 0xC3C1, + 4783: 0xC3C2, + 4784: 0xC3C3, + 4785: 0xC3C4, + 4786: 0xC3C5, + 4787: 0xC3C6, + 4788: 0xC3C7, + 4789: 0xC3C8, + 4790: 0xC3C9, + 4791: 0xC3CA, + 4792: 0xC3CB, + 4793: 0xC3CC, + 4794: 0xC3CD, + 4795: 0xC3CE, + 4796: 0xC3CF, + 4797: 0xC3D0, + 4798: 0xC3D1, + 4799: 0xC3D2, + 4800: 0xC3D3, + 4801: 0xC3D4, + 4802: 0xC3D5, + 4803: 0xC3D6, + 4804: 0xC3D7, + 4805: 0xC3DA, + 4806: 0xC3DB, + 4807: 0xC3DD, + 4808: 0xC3DE, + 4809: 0xC3E1, + 4810: 0xC3E3, + 4811: 0xC3E4, + 4812: 0xC3E5, + 4813: 0xC3E6, + 4814: 0xC3E7, + 4815: 0xC3EA, + 4816: 0xC3EB, + 4817: 0xC3EC, + 4818: 0xC3EE, + 4819: 0xC3EF, + 4820: 0xC3F0, + 4821: 0xC3F1, + 4822: 0xC3F2, + 4823: 0xC3F3, + 4824: 0xC3F6, + 4825: 0xC3F7, + 4826: 0xC3F9, + 4827: 0xC3FA, + 4828: 0xC3FB, + 4829: 0xC3FC, + 4830: 0xC3FD, + 4831: 0xC3FE, + 4832: 0xC3FF, + 4833: 0xC400, + 4834: 0xC401, + 4835: 0xC402, + 4836: 0xC403, + 4837: 0xC404, + 4838: 0xC405, + 4839: 0xC406, + 4840: 0xC407, + 4841: 0xC409, + 4842: 0xC40A, + 4843: 0xC40B, + 4844: 0xC40C, + 4845: 0xC40D, + 4846: 0xC40E, + 4847: 0xC40F, + 4848: 0xC411, + 4849: 0xC412, + 4850: 0xC413, + 4851: 0xC414, + 4852: 0xC415, + 4853: 0xC416, + 4854: 0xC417, + 4855: 0xC418, + 4856: 0xC419, + 4857: 0xC41A, + 4858: 0xC41B, + 4859: 0xC41C, + 4860: 0xC41D, + 4861: 0xC41E, + 4862: 0xC41F, + 4863: 0xC420, + 4864: 0xC421, + 4865: 0xC422, + 4866: 0xC423, + 4867: 0xC425, + 4868: 0xC426, + 4869: 0xC427, + 4870: 0xC428, + 4871: 0xC429, + 4872: 0xC42A, + 4873: 0xC42B, + 4874: 0xC42D, + 4875: 0xC42E, + 4876: 0xC42F, + 4877: 0xC431, + 4878: 0xC432, + 4879: 0xC433, + 4880: 0xC435, + 4881: 0xC436, + 4882: 0xC437, + 4883: 0xC438, + 4884: 0xC439, + 4885: 0xC43A, + 4886: 0xC43B, + 4887: 0xC43E, + 4888: 0xC43F, + 4889: 0xC440, + 4890: 0xC441, + 4891: 0xC442, + 4892: 0xC443, + 4893: 0xC444, + 4894: 0xC445, + 4895: 0xC446, + 4896: 0xC447, + 4897: 0xC449, + 4898: 0xC44A, + 4899: 0xC44B, + 4900: 0xC44C, + 4901: 0xC44D, + 4902: 0xC44E, + 4903: 0xC44F, + 4904: 0xC450, + 4905: 0xC451, + 4906: 0xC452, + 4907: 0xC453, + 4908: 0xC454, + 4909: 0xC455, + 4910: 0xC456, + 4911: 0xC457, + 4912: 0xC458, + 4913: 0xC459, + 4914: 0xC45A, + 4915: 0xC45B, + 4916: 0xC45C, + 4917: 0xC45D, + 4918: 0xC45E, + 4919: 0xC45F, + 4920: 0xC460, + 4921: 0xC461, + 4922: 0xC462, + 4923: 0xC463, + 4924: 0xC466, + 4925: 0xC467, + 4926: 0xC469, + 4927: 0xC46A, + 4928: 0xC46B, + 4929: 0xC46D, + 4930: 0xC46E, + 4931: 0xC46F, + 4932: 0xC470, + 4933: 0xC471, + 4934: 0xC472, + 4935: 0xC473, + 4936: 0xC476, + 4937: 0xC477, + 4938: 0xC478, + 4939: 0xC47A, + 4940: 0xC47B, + 4941: 0xC47C, + 4942: 0xC47D, + 4943: 0xC47E, + 4944: 0xC47F, + 4945: 0xC481, + 4946: 0xC482, + 4947: 0xC483, + 4948: 0xC484, + 4949: 0xC485, + 4950: 0xC486, + 4951: 0xC487, + 4952: 0xC488, + 4953: 0xC489, + 4954: 0xC48A, + 4955: 0xC48B, + 4956: 0xC48C, + 4957: 0xC48D, + 4958: 0xC48E, + 4959: 0xC48F, + 4960: 0xC490, + 4961: 0xC491, + 4962: 0xC492, + 4963: 0xC493, + 4964: 0xC495, + 4965: 0xC496, + 4966: 0xC497, + 4967: 0xC498, + 4968: 0xC499, + 4969: 0xC49A, + 4970: 0xC49B, + 4971: 0xC49D, + 4972: 0xC49E, + 4973: 0xC49F, + 4974: 0xC4A0, + 4975: 0xC4A1, + 4976: 0xC4A2, + 4977: 0xC4A3, + 4978: 0xC4A4, + 4979: 0xC4A5, + 4980: 0xC4A6, + 4981: 0xC4A7, + 4982: 0xC4A8, + 4983: 0xC4A9, + 4984: 0xC4AA, + 4985: 0xC4AB, + 4986: 0xC4AC, + 4987: 0xC4AD, + 4988: 0xC4AE, + 4989: 0xC4AF, + 4990: 0xC4B0, + 4991: 0xC4B1, + 4992: 0xC4B2, + 4993: 0xC4B3, + 4994: 0xC4B4, + 4995: 0xC4B5, + 4996: 0xC4B6, + 4997: 0xC4B7, + 4998: 0xC4B9, + 4999: 0xC4BA, + 5000: 0xC4BB, + 5001: 0xC4BD, + 5002: 0xC4BE, + 5003: 0xC4BF, + 5004: 0xC4C0, + 5005: 0xC4C1, + 5006: 0xC4C2, + 5007: 0xC4C3, + 5008: 0xC4C4, + 5009: 0xC4C5, + 5010: 0xC4C6, + 5011: 0xC4C7, + 5012: 0xC4C8, + 5013: 0xC4C9, + 5014: 0xC4CA, + 5015: 0xC4CB, + 5016: 0xC4CC, + 5017: 0xC4CD, + 5018: 0xC4CE, + 5019: 0xC4CF, + 5020: 0xC4D0, + 5021: 0xC4D1, + 5022: 0xC4D2, + 5023: 0xC4D3, + 5024: 0xC4D4, + 5025: 0xC4D5, + 5026: 0xC4D6, + 5027: 0xC4D7, + 5028: 0xC4D8, + 5029: 0xC4D9, + 5030: 0xC4DA, + 5031: 0xC4DB, + 5032: 0xC4DC, + 5033: 0xC4DD, + 5034: 0xC4DE, + 5035: 0xC4DF, + 5036: 0xC4E0, + 5037: 0xC4E1, + 5038: 0xC4E2, + 5039: 0xC4E3, + 5040: 0xC4E4, + 5041: 0xC4E5, + 5042: 0xC4E6, + 5043: 0xC4E7, + 5044: 0xC4E8, + 5045: 0xC4EA, + 5046: 0xC4EB, + 5047: 0xC4EC, + 5048: 0xC4ED, + 5049: 0xC4EE, + 5050: 0xC4EF, + 5051: 0xC4F2, + 5052: 0xC4F3, + 5053: 0xC4F5, + 5054: 0xC4F6, + 5055: 0xC4F7, + 5056: 0xC4F9, + 5057: 0xC4FB, + 5058: 0xC4FC, + 5059: 0xC4FD, + 5060: 0xC4FE, + 5061: 0xC502, + 5062: 0xC503, + 5063: 0xC504, + 5064: 0xC505, + 5065: 0xC506, + 5066: 0xC507, + 5067: 0xC508, + 5068: 0xC509, + 5069: 0xC50A, + 5070: 0xC50B, + 5071: 0xC50D, + 5072: 0xC50E, + 5073: 0xC50F, + 5074: 0xC511, + 5075: 0xC512, + 5076: 0xC513, + 5077: 0xC515, + 5078: 0xC516, + 5079: 0xC517, + 5080: 0xC518, + 5081: 0xC519, + 5082: 0xC51A, + 5083: 0xC51B, + 5084: 0xC51D, + 5085: 0xC51E, + 5086: 0xC51F, + 5087: 0xC520, + 5088: 0xC521, + 5089: 0xC522, + 5090: 0xC523, + 5091: 0xC524, + 5092: 0xC525, + 5093: 0xC526, + 5094: 0xC527, + 5095: 0xC52A, + 5096: 0xC52B, + 5097: 0xC52D, + 5098: 0xC52E, + 5099: 0xC52F, + 5100: 0xC531, + 5101: 0xC532, + 5102: 0xC533, + 5103: 0xC534, + 5104: 0xC535, + 5105: 0xC536, + 5106: 0xC537, + 5107: 0xC53A, + 5108: 0xC53C, + 5109: 0xC53E, + 5110: 0xC53F, + 5111: 0xC540, + 5112: 0xC541, + 5113: 0xC542, + 5114: 0xC543, + 5115: 0xC546, + 5116: 0xC547, + 5117: 0xC54B, + 5118: 0xC54F, + 5119: 0xC550, + 5120: 0xC551, + 5121: 0xC552, + 5122: 0xC556, + 5123: 0xC55A, + 5124: 0xC55B, + 5125: 0xC55C, + 5126: 0xC55F, + 5127: 0xC562, + 5128: 0xC563, + 5129: 0xC565, + 5130: 0xC566, + 5131: 0xC567, + 5132: 0xC569, + 5133: 0xC56A, + 5134: 0xC56B, + 5135: 0xC56C, + 5136: 0xC56D, + 5137: 0xC56E, + 5138: 0xC56F, + 5139: 0xC572, + 5140: 0xC576, + 5141: 0xC577, + 5142: 0xC578, + 5143: 0xC579, + 5144: 0xC57A, + 5145: 0xC57B, + 5146: 0xC57E, + 5147: 0xC57F, + 5148: 0xC581, + 5149: 0xC582, + 5150: 0xC583, + 5151: 0xC585, + 5152: 0xC586, + 5153: 0xC588, + 5154: 0xC589, + 5155: 0xC58A, + 5156: 0xC58B, + 5157: 0xC58E, + 5158: 0xC590, + 5159: 0xC592, + 5160: 0xC593, + 5161: 0xC594, + 5162: 0xC596, + 5163: 0xC599, + 5164: 0xC59A, + 5165: 0xC59B, + 5166: 0xC59D, + 5167: 0xC59E, + 5168: 0xC59F, + 5169: 0xC5A1, + 5170: 0xC5A2, + 5171: 0xC5A3, + 5172: 0xC5A4, + 5173: 0xC5A5, + 5174: 0xC5A6, + 5175: 0xC5A7, + 5176: 0xC5A8, + 5177: 0xC5AA, + 5178: 0xC5AB, + 5179: 0xC5AC, + 5180: 0xC5AD, + 5181: 0xC5AE, + 5182: 0xC5AF, + 5183: 0xC5B0, + 5184: 0xC5B1, + 5185: 0xC5B2, + 5186: 0xC5B3, + 5187: 0xC5B6, + 5188: 0xC5B7, + 5189: 0xC5BA, + 5190: 0xC5BF, + 5191: 0xC5C0, + 5192: 0xC5C1, + 5193: 0xC5C2, + 5194: 0xC5C3, + 5195: 0xC5CB, + 5196: 0xC5CD, + 5197: 0xC5CF, + 5198: 0xC5D2, + 5199: 0xC5D3, + 5200: 0xC5D5, + 5201: 0xC5D6, + 5202: 0xC5D7, + 5203: 0xC5D9, + 5204: 0xC5DA, + 5205: 0xC5DB, + 5206: 0xC5DC, + 5207: 0xC5DD, + 5208: 0xC5DE, + 5209: 0xC5DF, + 5210: 0xC5E2, + 5211: 0xC5E4, + 5212: 0xC5E6, + 5213: 0xC5E7, + 5214: 0xC5E8, + 5215: 0xC5E9, + 5216: 0xC5EA, + 5217: 0xC5EB, + 5218: 0xC5EF, + 5219: 0xC5F1, + 5220: 0xC5F2, + 5221: 0xC5F3, + 5222: 0xC5F5, + 5223: 0xC5F8, + 5224: 0xC5F9, + 5225: 0xC5FA, + 5226: 0xC5FB, + 5227: 0xC602, + 5228: 0xC603, + 5229: 0xC604, + 5230: 0xC609, + 5231: 0xC60A, + 5232: 0xC60B, + 5233: 0xC60D, + 5234: 0xC60E, + 5235: 0xC60F, + 5236: 0xC611, + 5237: 0xC612, + 5238: 0xC613, + 5239: 0xC614, + 5240: 0xC615, + 5241: 0xC616, + 5242: 0xC617, + 5243: 0xC61A, + 5244: 0xC61D, + 5245: 0xC61E, + 5246: 0xC61F, + 5247: 0xC620, + 5248: 0xC621, + 5249: 0xC622, + 5250: 0xC623, + 5251: 0xC626, + 5252: 0xC627, + 5253: 0xC629, + 5254: 0xC62A, + 5255: 0xC62B, + 5256: 0xC62F, + 5257: 0xC631, + 5258: 0xC632, + 5259: 0xC636, + 5260: 0xC638, + 5261: 0xC63A, + 5262: 0xC63C, + 5263: 0xC63D, + 5264: 0xC63E, + 5265: 0xC63F, + 5266: 0xC642, + 5267: 0xC643, + 5268: 0xC645, + 5269: 0xC646, + 5270: 0xC647, + 5271: 0xC649, + 5272: 0xC64A, + 5273: 0xC64B, + 5274: 0xC64C, + 5275: 0xC64D, + 5276: 0xC64E, + 5277: 0xC64F, + 5278: 0xC652, + 5279: 0xC656, + 5280: 0xC657, + 5281: 0xC658, + 5282: 0xC659, + 5283: 0xC65A, + 5284: 0xC65B, + 5285: 0xC65E, + 5286: 0xC65F, + 5287: 0xC661, + 5288: 0xC662, + 5289: 0xC663, + 5290: 0xC664, + 5291: 0xC665, + 5292: 0xC666, + 5293: 0xC667, + 5294: 0xC668, + 5295: 0xC669, + 5296: 0xC66A, + 5297: 0xC66B, + 5298: 0xC66D, + 5299: 0xC66E, + 5300: 0xC670, + 5301: 0xC672, + 5302: 0xC673, + 5303: 0xC674, + 5304: 0xC675, + 5305: 0xC676, + 5306: 0xC677, + 5307: 0xC67A, + 5308: 0xC67B, + 5309: 0xC67D, + 5310: 0xC67E, + 5311: 0xC67F, + 5312: 0xC681, + 5313: 0xC682, + 5314: 0xC683, + 5315: 0xC684, + 5316: 0xC685, + 5317: 0xC686, + 5318: 0xC687, + 5319: 0xC68A, + 5320: 0xC68C, + 5321: 0xC68E, + 5322: 0xC68F, + 5323: 0xC690, + 5324: 0xC691, + 5325: 0xC692, + 5326: 0xC693, + 5327: 0xC696, + 5328: 0xC697, + 5329: 0xC699, + 5330: 0xC69A, + 5331: 0xC69B, + 5332: 0xC69D, + 5333: 0xC69E, + 5334: 0xC69F, + 5335: 0xC6A0, + 5336: 0xC6A1, + 5337: 0xC6A2, + 5338: 0xC6A3, + 5339: 0xC6A6, + 5340: 0xC6A8, + 5341: 0xC6AA, + 5342: 0xC6AB, + 5343: 0xC6AC, + 5344: 0xC6AD, + 5345: 0xC6AE, + 5346: 0xC6AF, + 5347: 0xC6B2, + 5348: 0xC6B3, + 5349: 0xC6B5, + 5350: 0xC6B6, + 5351: 0xC6B7, + 5352: 0xC6BB, + 5353: 0xC6BC, + 5354: 0xC6BD, + 5355: 0xC6BE, + 5356: 0xC6BF, + 5357: 0xC6C2, + 5358: 0xC6C4, + 5359: 0xC6C6, + 5360: 0xC6C7, + 5361: 0xC6C8, + 5362: 0xC6C9, + 5363: 0xC6CA, + 5364: 0xC6CB, + 5365: 0xC6CE, + 5366: 0xC6CF, + 5367: 0xC6D1, + 5368: 0xC6D2, + 5369: 0xC6D3, + 5370: 0xC6D5, + 5371: 0xC6D6, + 5372: 0xC6D7, + 5373: 0xC6D8, + 5374: 0xC6D9, + 5375: 0xC6DA, + 5376: 0xC6DB, + 5377: 0xC6DE, + 5378: 0xC6DF, + 5379: 0xC6E2, + 5380: 0xC6E3, + 5381: 0xC6E4, + 5382: 0xC6E5, + 5383: 0xC6E6, + 5384: 0xC6E7, + 5385: 0xC6EA, + 5386: 0xC6EB, + 5387: 0xC6ED, + 5388: 0xC6EE, + 5389: 0xC6EF, + 5390: 0xC6F1, + 5391: 0xC6F2, + 5392: 0xC6F3, + 5393: 0xC6F4, + 5394: 0xC6F5, + 5395: 0xC6F6, + 5396: 0xC6F7, + 5397: 0xC6FA, + 5398: 0xC6FB, + 5399: 0xC6FC, + 5400: 0xC6FE, + 5401: 0xC6FF, + 5402: 0xC700, + 5403: 0xC701, + 5404: 0xC702, + 5405: 0xC703, + 5406: 0xC706, + 5407: 0xC707, + 5408: 0xC709, + 5409: 0xC70A, + 5410: 0xC70B, + 5411: 0xC70D, + 5412: 0xC70E, + 5413: 0xC70F, + 5414: 0xC710, + 5415: 0xC711, + 5416: 0xC712, + 5417: 0xC713, + 5418: 0xC716, + 5419: 0xC718, + 5420: 0xC71A, + 5421: 0xC71B, + 5422: 0xC71C, + 5423: 0xC71D, + 5424: 0xC71E, + 5425: 0xC71F, + 5426: 0xC722, + 5427: 0xC723, + 5428: 0xC725, + 5429: 0xC726, + 5430: 0xC727, + 5431: 0xC729, + 5432: 0xC72A, + 5433: 0xC72B, + 5434: 0xC72C, + 5435: 0xC72D, + 5436: 0xC72E, + 5437: 0xC72F, + 5438: 0xC732, + 5439: 0xC734, + 5440: 0xC736, + 5441: 0xC738, + 5442: 0xC739, + 5443: 0xC73A, + 5444: 0xC73B, + 5445: 0xC73E, + 5446: 0xC73F, + 5447: 0xC741, + 5448: 0xC742, + 5449: 0xC743, + 5450: 0xC745, + 5451: 0xC746, + 5452: 0xC747, + 5453: 0xC748, + 5454: 0xC749, + 5455: 0xC74B, + 5456: 0xC74E, + 5457: 0xC750, + 5458: 0xC759, + 5459: 0xC75A, + 5460: 0xC75B, + 5461: 0xC75D, + 5462: 0xC75E, + 5463: 0xC75F, + 5464: 0xC761, + 5465: 0xC762, + 5466: 0xC763, + 5467: 0xC764, + 5468: 0xC765, + 5469: 0xC766, + 5470: 0xC767, + 5471: 0xC769, + 5472: 0xC76A, + 5473: 0xC76C, + 5474: 0xC76D, + 5475: 0xC76E, + 5476: 0xC76F, + 5477: 0xC770, + 5478: 0xC771, + 5479: 0xC772, + 5480: 0xC773, + 5481: 0xC776, + 5482: 0xC777, + 5483: 0xC779, + 5484: 0xC77A, + 5485: 0xC77B, + 5486: 0xC77F, + 5487: 0xC780, + 5488: 0xC781, + 5489: 0xC782, + 5490: 0xC786, + 5491: 0xC78B, + 5492: 0xC78C, + 5493: 0xC78D, + 5494: 0xC78F, + 5495: 0xC792, + 5496: 0xC793, + 5497: 0xC795, + 5498: 0xC799, + 5499: 0xC79B, + 5500: 0xC79C, + 5501: 0xC79D, + 5502: 0xC79E, + 5503: 0xC79F, + 5504: 0xC7A2, + 5505: 0xC7A7, + 5506: 0xC7A8, + 5507: 0xC7A9, + 5508: 0xC7AA, + 5509: 0xC7AB, + 5510: 0xC7AE, + 5511: 0xC7AF, + 5512: 0xC7B1, + 5513: 0xC7B2, + 5514: 0xC7B3, + 5515: 0xC7B5, + 5516: 0xC7B6, + 5517: 0xC7B7, + 5518: 0xC7B8, + 5519: 0xC7B9, + 5520: 0xC7BA, + 5521: 0xC7BB, + 5522: 0xC7BE, + 5523: 0xC7C2, + 5524: 0xC7C3, + 5525: 0xC7C4, + 5526: 0xC7C5, + 5527: 0xC7C6, + 5528: 0xC7C7, + 5529: 0xC7CA, + 5530: 0xC7CB, + 5531: 0xC7CD, + 5532: 0xC7CF, + 5533: 0xC7D1, + 5534: 0xC7D2, + 5535: 0xC7D3, + 5536: 0xC7D4, + 5537: 0xC7D5, + 5538: 0xC7D6, + 5539: 0xC7D7, + 5540: 0xC7D9, + 5541: 0xC7DA, + 5542: 0xC7DB, + 5543: 0xC7DC, + 5544: 0xC7DE, + 5545: 0xC7DF, + 5546: 0xC7E0, + 5547: 0xC7E1, + 5548: 0xC7E2, + 5549: 0xC7E3, + 5550: 0xC7E5, + 5551: 0xC7E6, + 5552: 0xC7E7, + 5553: 0xC7E9, + 5554: 0xC7EA, + 5555: 0xC7EB, + 5556: 0xC7ED, + 5557: 0xC7EE, + 5558: 0xC7EF, + 5559: 0xC7F0, + 5560: 0xC7F1, + 5561: 0xC7F2, + 5562: 0xC7F3, + 5563: 0xC7F4, + 5564: 0xC7F5, + 5565: 0xC7F6, + 5566: 0xC7F7, + 5567: 0xC7F8, + 5568: 0xC7F9, + 5569: 0xC7FA, + 5570: 0xC7FB, + 5571: 0xC7FC, + 5572: 0xC7FD, + 5573: 0xC7FE, + 5574: 0xC7FF, + 5575: 0xC802, + 5576: 0xC803, + 5577: 0xC805, + 5578: 0xC806, + 5579: 0xC807, + 5580: 0xC809, + 5581: 0xC80B, + 5582: 0xC80C, + 5583: 0xC80D, + 5584: 0xC80E, + 5585: 0xC80F, + 5586: 0xC812, + 5587: 0xC814, + 5588: 0xC817, + 5589: 0xC818, + 5590: 0xC819, + 5591: 0xC81A, + 5592: 0xC81B, + 5593: 0xC81E, + 5594: 0xC81F, + 5595: 0xC821, + 5596: 0xC822, + 5597: 0xC823, + 5598: 0xC825, + 5599: 0xC826, + 5600: 0xC827, + 5601: 0xC828, + 5602: 0xC829, + 5603: 0xC82A, + 5604: 0xC82B, + 5605: 0xC82E, + 5606: 0xC830, + 5607: 0xC832, + 5608: 0xC833, + 5609: 0xC834, + 5610: 0xC835, + 5611: 0xC836, + 5612: 0xC837, + 5613: 0xC839, + 5614: 0xC83A, + 5615: 0xC83B, + 5616: 0xC83D, + 5617: 0xC83E, + 5618: 0xC83F, + 5619: 0xC841, + 5620: 0xC842, + 5621: 0xC843, + 5622: 0xC844, + 5623: 0xC845, + 5624: 0xC846, + 5625: 0xC847, + 5626: 0xC84A, + 5627: 0xC84B, + 5628: 0xC84E, + 5629: 0xC84F, + 5630: 0xC850, + 5631: 0xC851, + 5632: 0xC852, + 5633: 0xC853, + 5634: 0xC855, + 5635: 0xC856, + 5636: 0xC857, + 5637: 0xC858, + 5638: 0xC859, + 5639: 0xC85A, + 5640: 0xC85B, + 5641: 0xC85C, + 5642: 0xC85D, + 5643: 0xC85E, + 5644: 0xC85F, + 5645: 0xC860, + 5646: 0xC861, + 5647: 0xC862, + 5648: 0xC863, + 5649: 0xC864, + 5650: 0xC865, + 5651: 0xC866, + 5652: 0xC867, + 5653: 0xC868, + 5654: 0xC869, + 5655: 0xC86A, + 5656: 0xC86B, + 5657: 0xC86C, + 5658: 0xC86D, + 5659: 0xC86E, + 5660: 0xC86F, + 5661: 0xC872, + 5662: 0xC873, + 5663: 0xC875, + 5664: 0xC876, + 5665: 0xC877, + 5666: 0xC879, + 5667: 0xC87B, + 5668: 0xC87C, + 5669: 0xC87D, + 5670: 0xC87E, + 5671: 0xC87F, + 5672: 0xC882, + 5673: 0xC884, + 5674: 0xC888, + 5675: 0xC889, + 5676: 0xC88A, + 5677: 0xC88E, + 5678: 0xC88F, + 5679: 0xC890, + 5680: 0xC891, + 5681: 0xC892, + 5682: 0xC893, + 5683: 0xC895, + 5684: 0xC896, + 5685: 0xC897, + 5686: 0xC898, + 5687: 0xC899, + 5688: 0xC89A, + 5689: 0xC89B, + 5690: 0xC89C, + 5691: 0xC89E, + 5692: 0xC8A0, + 5693: 0xC8A2, + 5694: 0xC8A3, + 5695: 0xC8A4, + 5696: 0xC8A5, + 5697: 0xC8A6, + 5698: 0xC8A7, + 5699: 0xC8A9, + 5700: 0xC8AA, + 5701: 0xC8AB, + 5702: 0xC8AC, + 5703: 0xC8AD, + 5704: 0xC8AE, + 5705: 0xC8AF, + 5706: 0xC8B0, + 5707: 0xC8B1, + 5708: 0xC8B2, + 5709: 0xC8B3, + 5710: 0xC8B4, + 5711: 0xC8B5, + 5712: 0xC8B6, + 5713: 0xC8B7, + 5714: 0xC8B8, + 5715: 0xC8B9, + 5716: 0xC8BA, + 5717: 0xC8BB, + 5718: 0xC8BE, + 5719: 0xC8BF, + 5720: 0xC8C0, + 5721: 0xC8C1, + 5722: 0xC8C2, + 5723: 0xC8C3, + 5724: 0xC8C5, + 5725: 0xC8C6, + 5726: 0xC8C7, + 5727: 0xC8C9, + 5728: 0xC8CA, + 5729: 0xC8CB, + 5730: 0xC8CD, + 5731: 0xC8CE, + 5732: 0xC8CF, + 5733: 0xC8D0, + 5734: 0xC8D1, + 5735: 0xC8D2, + 5736: 0xC8D3, + 5737: 0xC8D6, + 5738: 0xC8D8, + 5739: 0xC8DA, + 5740: 0xC8DB, + 5741: 0xC8DC, + 5742: 0xC8DD, + 5743: 0xC8DE, + 5744: 0xC8DF, + 5745: 0xC8E2, + 5746: 0xC8E3, + 5747: 0xC8E5, + 5748: 0xC8E6, + 5749: 0xC8E7, + 5750: 0xC8E8, + 5751: 0xC8E9, + 5752: 0xC8EA, + 5753: 0xC8EB, + 5754: 0xC8EC, + 5755: 0xC8ED, + 5756: 0xC8EE, + 5757: 0xC8EF, + 5758: 0xC8F0, + 5759: 0xC8F1, + 5760: 0xC8F2, + 5761: 0xC8F3, + 5762: 0xC8F4, + 5763: 0xC8F6, + 5764: 0xC8F7, + 5765: 0xC8F8, + 5766: 0xC8F9, + 5767: 0xC8FA, + 5768: 0xC8FB, + 5769: 0xC8FE, + 5770: 0xC8FF, + 5771: 0xC901, + 5772: 0xC902, + 5773: 0xC903, + 5774: 0xC907, + 5775: 0xC908, + 5776: 0xC909, + 5777: 0xC90A, + 5778: 0xC90B, + 5779: 0xC90E, + 5780: 0x3000, + 5781: 0x3001, + 5782: 0x3002, + 5783: 0x00B7, + 5784: 0x2025, + 5785: 0x2026, + 5786: 0x00A8, + 5787: 0x3003, + 5788: 0x00AD, + 5789: 0x2015, + 5790: 0x2225, + 5791: 0xFF3C, + 5792: 0x223C, + 5793: 0x2018, + 5794: 0x2019, + 5795: 0x201C, + 5796: 0x201D, + 5797: 0x3014, + 5798: 0x3015, + 5799: 0x3008, + 5800: 0x3009, + 5801: 0x300A, + 5802: 0x300B, + 5803: 0x300C, + 5804: 0x300D, + 5805: 0x300E, + 5806: 0x300F, + 5807: 0x3010, + 5808: 0x3011, + 5809: 0x00B1, + 5810: 0x00D7, + 5811: 0x00F7, + 5812: 0x2260, + 5813: 0x2264, + 5814: 0x2265, + 5815: 0x221E, + 5816: 0x2234, + 5817: 0x00B0, + 5818: 0x2032, + 5819: 0x2033, + 5820: 0x2103, + 5821: 0x212B, + 5822: 0xFFE0, + 5823: 0xFFE1, + 5824: 0xFFE5, + 5825: 0x2642, + 5826: 0x2640, + 5827: 0x2220, + 5828: 0x22A5, + 5829: 0x2312, + 5830: 0x2202, + 5831: 0x2207, + 5832: 0x2261, + 5833: 0x2252, + 5834: 0x00A7, + 5835: 0x203B, + 5836: 0x2606, + 5837: 0x2605, + 5838: 0x25CB, + 5839: 0x25CF, + 5840: 0x25CE, + 5841: 0x25C7, + 5842: 0x25C6, + 5843: 0x25A1, + 5844: 0x25A0, + 5845: 0x25B3, + 5846: 0x25B2, + 5847: 0x25BD, + 5848: 0x25BC, + 5849: 0x2192, + 5850: 0x2190, + 5851: 0x2191, + 5852: 0x2193, + 5853: 0x2194, + 5854: 0x3013, + 5855: 0x226A, + 5856: 0x226B, + 5857: 0x221A, + 5858: 0x223D, + 5859: 0x221D, + 5860: 0x2235, + 5861: 0x222B, + 5862: 0x222C, + 5863: 0x2208, + 5864: 0x220B, + 5865: 0x2286, + 5866: 0x2287, + 5867: 0x2282, + 5868: 0x2283, + 5869: 0x222A, + 5870: 0x2229, + 5871: 0x2227, + 5872: 0x2228, + 5873: 0xFFE2, + 5874: 0xC910, + 5875: 0xC912, + 5876: 0xC913, + 5877: 0xC914, + 5878: 0xC915, + 5879: 0xC916, + 5880: 0xC917, + 5881: 0xC919, + 5882: 0xC91A, + 5883: 0xC91B, + 5884: 0xC91C, + 5885: 0xC91D, + 5886: 0xC91E, + 5887: 0xC91F, + 5888: 0xC920, + 5889: 0xC921, + 5890: 0xC922, + 5891: 0xC923, + 5892: 0xC924, + 5893: 0xC925, + 5894: 0xC926, + 5895: 0xC927, + 5896: 0xC928, + 5897: 0xC929, + 5898: 0xC92A, + 5899: 0xC92B, + 5900: 0xC92D, + 5901: 0xC92E, + 5902: 0xC92F, + 5903: 0xC930, + 5904: 0xC931, + 5905: 0xC932, + 5906: 0xC933, + 5907: 0xC935, + 5908: 0xC936, + 5909: 0xC937, + 5910: 0xC938, + 5911: 0xC939, + 5912: 0xC93A, + 5913: 0xC93B, + 5914: 0xC93C, + 5915: 0xC93D, + 5916: 0xC93E, + 5917: 0xC93F, + 5918: 0xC940, + 5919: 0xC941, + 5920: 0xC942, + 5921: 0xC943, + 5922: 0xC944, + 5923: 0xC945, + 5924: 0xC946, + 5925: 0xC947, + 5926: 0xC948, + 5927: 0xC949, + 5928: 0xC94A, + 5929: 0xC94B, + 5930: 0xC94C, + 5931: 0xC94D, + 5932: 0xC94E, + 5933: 0xC94F, + 5934: 0xC952, + 5935: 0xC953, + 5936: 0xC955, + 5937: 0xC956, + 5938: 0xC957, + 5939: 0xC959, + 5940: 0xC95A, + 5941: 0xC95B, + 5942: 0xC95C, + 5943: 0xC95D, + 5944: 0xC95E, + 5945: 0xC95F, + 5946: 0xC962, + 5947: 0xC964, + 5948: 0xC965, + 5949: 0xC966, + 5950: 0xC967, + 5951: 0xC968, + 5952: 0xC969, + 5953: 0xC96A, + 5954: 0xC96B, + 5955: 0xC96D, + 5956: 0xC96E, + 5957: 0xC96F, + 5958: 0x21D2, + 5959: 0x21D4, + 5960: 0x2200, + 5961: 0x2203, + 5962: 0x00B4, + 5963: 0xFF5E, + 5964: 0x02C7, + 5965: 0x02D8, + 5966: 0x02DD, + 5967: 0x02DA, + 5968: 0x02D9, + 5969: 0x00B8, + 5970: 0x02DB, + 5971: 0x00A1, + 5972: 0x00BF, + 5973: 0x02D0, + 5974: 0x222E, + 5975: 0x2211, + 5976: 0x220F, + 5977: 0x00A4, + 5978: 0x2109, + 5979: 0x2030, + 5980: 0x25C1, + 5981: 0x25C0, + 5982: 0x25B7, + 5983: 0x25B6, + 5984: 0x2664, + 5985: 0x2660, + 5986: 0x2661, + 5987: 0x2665, + 5988: 0x2667, + 5989: 0x2663, + 5990: 0x2299, + 5991: 0x25C8, + 5992: 0x25A3, + 5993: 0x25D0, + 5994: 0x25D1, + 5995: 0x2592, + 5996: 0x25A4, + 5997: 0x25A5, + 5998: 0x25A8, + 5999: 0x25A7, + 6000: 0x25A6, + 6001: 0x25A9, + 6002: 0x2668, + 6003: 0x260F, + 6004: 0x260E, + 6005: 0x261C, + 6006: 0x261E, + 6007: 0x00B6, + 6008: 0x2020, + 6009: 0x2021, + 6010: 0x2195, + 6011: 0x2197, + 6012: 0x2199, + 6013: 0x2196, + 6014: 0x2198, + 6015: 0x266D, + 6016: 0x2669, + 6017: 0x266A, + 6018: 0x266C, + 6019: 0x327F, + 6020: 0x321C, + 6021: 0x2116, + 6022: 0x33C7, + 6023: 0x2122, + 6024: 0x33C2, + 6025: 0x33D8, + 6026: 0x2121, + 6027: 0x20AC, + 6028: 0x00AE, + 6052: 0xC971, + 6053: 0xC972, + 6054: 0xC973, + 6055: 0xC975, + 6056: 0xC976, + 6057: 0xC977, + 6058: 0xC978, + 6059: 0xC979, + 6060: 0xC97A, + 6061: 0xC97B, + 6062: 0xC97D, + 6063: 0xC97E, + 6064: 0xC97F, + 6065: 0xC980, + 6066: 0xC981, + 6067: 0xC982, + 6068: 0xC983, + 6069: 0xC984, + 6070: 0xC985, + 6071: 0xC986, + 6072: 0xC987, + 6073: 0xC98A, + 6074: 0xC98B, + 6075: 0xC98D, + 6076: 0xC98E, + 6077: 0xC98F, + 6078: 0xC991, + 6079: 0xC992, + 6080: 0xC993, + 6081: 0xC994, + 6082: 0xC995, + 6083: 0xC996, + 6084: 0xC997, + 6085: 0xC99A, + 6086: 0xC99C, + 6087: 0xC99E, + 6088: 0xC99F, + 6089: 0xC9A0, + 6090: 0xC9A1, + 6091: 0xC9A2, + 6092: 0xC9A3, + 6093: 0xC9A4, + 6094: 0xC9A5, + 6095: 0xC9A6, + 6096: 0xC9A7, + 6097: 0xC9A8, + 6098: 0xC9A9, + 6099: 0xC9AA, + 6100: 0xC9AB, + 6101: 0xC9AC, + 6102: 0xC9AD, + 6103: 0xC9AE, + 6104: 0xC9AF, + 6105: 0xC9B0, + 6106: 0xC9B1, + 6107: 0xC9B2, + 6108: 0xC9B3, + 6109: 0xC9B4, + 6110: 0xC9B5, + 6111: 0xC9B6, + 6112: 0xC9B7, + 6113: 0xC9B8, + 6114: 0xC9B9, + 6115: 0xC9BA, + 6116: 0xC9BB, + 6117: 0xC9BC, + 6118: 0xC9BD, + 6119: 0xC9BE, + 6120: 0xC9BF, + 6121: 0xC9C2, + 6122: 0xC9C3, + 6123: 0xC9C5, + 6124: 0xC9C6, + 6125: 0xC9C9, + 6126: 0xC9CB, + 6127: 0xC9CC, + 6128: 0xC9CD, + 6129: 0xC9CE, + 6130: 0xC9CF, + 6131: 0xC9D2, + 6132: 0xC9D4, + 6133: 0xC9D7, + 6134: 0xC9D8, + 6135: 0xC9DB, + 6136: 0xFF01, + 6137: 0xFF02, + 6138: 0xFF03, + 6139: 0xFF04, + 6140: 0xFF05, + 6141: 0xFF06, + 6142: 0xFF07, + 6143: 0xFF08, + 6144: 0xFF09, + 6145: 0xFF0A, + 6146: 0xFF0B, + 6147: 0xFF0C, + 6148: 0xFF0D, + 6149: 0xFF0E, + 6150: 0xFF0F, + 6151: 0xFF10, + 6152: 0xFF11, + 6153: 0xFF12, + 6154: 0xFF13, + 6155: 0xFF14, + 6156: 0xFF15, + 6157: 0xFF16, + 6158: 0xFF17, + 6159: 0xFF18, + 6160: 0xFF19, + 6161: 0xFF1A, + 6162: 0xFF1B, + 6163: 0xFF1C, + 6164: 0xFF1D, + 6165: 0xFF1E, + 6166: 0xFF1F, + 6167: 0xFF20, + 6168: 0xFF21, + 6169: 0xFF22, + 6170: 0xFF23, + 6171: 0xFF24, + 6172: 0xFF25, + 6173: 0xFF26, + 6174: 0xFF27, + 6175: 0xFF28, + 6176: 0xFF29, + 6177: 0xFF2A, + 6178: 0xFF2B, + 6179: 0xFF2C, + 6180: 0xFF2D, + 6181: 0xFF2E, + 6182: 0xFF2F, + 6183: 0xFF30, + 6184: 0xFF31, + 6185: 0xFF32, + 6186: 0xFF33, + 6187: 0xFF34, + 6188: 0xFF35, + 6189: 0xFF36, + 6190: 0xFF37, + 6191: 0xFF38, + 6192: 0xFF39, + 6193: 0xFF3A, + 6194: 0xFF3B, + 6195: 0xFFE6, + 6196: 0xFF3D, + 6197: 0xFF3E, + 6198: 0xFF3F, + 6199: 0xFF40, + 6200: 0xFF41, + 6201: 0xFF42, + 6202: 0xFF43, + 6203: 0xFF44, + 6204: 0xFF45, + 6205: 0xFF46, + 6206: 0xFF47, + 6207: 0xFF48, + 6208: 0xFF49, + 6209: 0xFF4A, + 6210: 0xFF4B, + 6211: 0xFF4C, + 6212: 0xFF4D, + 6213: 0xFF4E, + 6214: 0xFF4F, + 6215: 0xFF50, + 6216: 0xFF51, + 6217: 0xFF52, + 6218: 0xFF53, + 6219: 0xFF54, + 6220: 0xFF55, + 6221: 0xFF56, + 6222: 0xFF57, + 6223: 0xFF58, + 6224: 0xFF59, + 6225: 0xFF5A, + 6226: 0xFF5B, + 6227: 0xFF5C, + 6228: 0xFF5D, + 6229: 0xFFE3, + 6230: 0xC9DE, + 6231: 0xC9DF, + 6232: 0xC9E1, + 6233: 0xC9E3, + 6234: 0xC9E5, + 6235: 0xC9E6, + 6236: 0xC9E8, + 6237: 0xC9E9, + 6238: 0xC9EA, + 6239: 0xC9EB, + 6240: 0xC9EE, + 6241: 0xC9F2, + 6242: 0xC9F3, + 6243: 0xC9F4, + 6244: 0xC9F5, + 6245: 0xC9F6, + 6246: 0xC9F7, + 6247: 0xC9FA, + 6248: 0xC9FB, + 6249: 0xC9FD, + 6250: 0xC9FE, + 6251: 0xC9FF, + 6252: 0xCA01, + 6253: 0xCA02, + 6254: 0xCA03, + 6255: 0xCA04, + 6256: 0xCA05, + 6257: 0xCA06, + 6258: 0xCA07, + 6259: 0xCA0A, + 6260: 0xCA0E, + 6261: 0xCA0F, + 6262: 0xCA10, + 6263: 0xCA11, + 6264: 0xCA12, + 6265: 0xCA13, + 6266: 0xCA15, + 6267: 0xCA16, + 6268: 0xCA17, + 6269: 0xCA19, + 6270: 0xCA1A, + 6271: 0xCA1B, + 6272: 0xCA1C, + 6273: 0xCA1D, + 6274: 0xCA1E, + 6275: 0xCA1F, + 6276: 0xCA20, + 6277: 0xCA21, + 6278: 0xCA22, + 6279: 0xCA23, + 6280: 0xCA24, + 6281: 0xCA25, + 6282: 0xCA26, + 6283: 0xCA27, + 6284: 0xCA28, + 6285: 0xCA2A, + 6286: 0xCA2B, + 6287: 0xCA2C, + 6288: 0xCA2D, + 6289: 0xCA2E, + 6290: 0xCA2F, + 6291: 0xCA30, + 6292: 0xCA31, + 6293: 0xCA32, + 6294: 0xCA33, + 6295: 0xCA34, + 6296: 0xCA35, + 6297: 0xCA36, + 6298: 0xCA37, + 6299: 0xCA38, + 6300: 0xCA39, + 6301: 0xCA3A, + 6302: 0xCA3B, + 6303: 0xCA3C, + 6304: 0xCA3D, + 6305: 0xCA3E, + 6306: 0xCA3F, + 6307: 0xCA40, + 6308: 0xCA41, + 6309: 0xCA42, + 6310: 0xCA43, + 6311: 0xCA44, + 6312: 0xCA45, + 6313: 0xCA46, + 6314: 0x3131, + 6315: 0x3132, + 6316: 0x3133, + 6317: 0x3134, + 6318: 0x3135, + 6319: 0x3136, + 6320: 0x3137, + 6321: 0x3138, + 6322: 0x3139, + 6323: 0x313A, + 6324: 0x313B, + 6325: 0x313C, + 6326: 0x313D, + 6327: 0x313E, + 6328: 0x313F, + 6329: 0x3140, + 6330: 0x3141, + 6331: 0x3142, + 6332: 0x3143, + 6333: 0x3144, + 6334: 0x3145, + 6335: 0x3146, + 6336: 0x3147, + 6337: 0x3148, + 6338: 0x3149, + 6339: 0x314A, + 6340: 0x314B, + 6341: 0x314C, + 6342: 0x314D, + 6343: 0x314E, + 6344: 0x314F, + 6345: 0x3150, + 6346: 0x3151, + 6347: 0x3152, + 6348: 0x3153, + 6349: 0x3154, + 6350: 0x3155, + 6351: 0x3156, + 6352: 0x3157, + 6353: 0x3158, + 6354: 0x3159, + 6355: 0x315A, + 6356: 0x315B, + 6357: 0x315C, + 6358: 0x315D, + 6359: 0x315E, + 6360: 0x315F, + 6361: 0x3160, + 6362: 0x3161, + 6363: 0x3162, + 6364: 0x3163, + 6365: 0x3164, + 6366: 0x3165, + 6367: 0x3166, + 6368: 0x3167, + 6369: 0x3168, + 6370: 0x3169, + 6371: 0x316A, + 6372: 0x316B, + 6373: 0x316C, + 6374: 0x316D, + 6375: 0x316E, + 6376: 0x316F, + 6377: 0x3170, + 6378: 0x3171, + 6379: 0x3172, + 6380: 0x3173, + 6381: 0x3174, + 6382: 0x3175, + 6383: 0x3176, + 6384: 0x3177, + 6385: 0x3178, + 6386: 0x3179, + 6387: 0x317A, + 6388: 0x317B, + 6389: 0x317C, + 6390: 0x317D, + 6391: 0x317E, + 6392: 0x317F, + 6393: 0x3180, + 6394: 0x3181, + 6395: 0x3182, + 6396: 0x3183, + 6397: 0x3184, + 6398: 0x3185, + 6399: 0x3186, + 6400: 0x3187, + 6401: 0x3188, + 6402: 0x3189, + 6403: 0x318A, + 6404: 0x318B, + 6405: 0x318C, + 6406: 0x318D, + 6407: 0x318E, + 6408: 0xCA47, + 6409: 0xCA48, + 6410: 0xCA49, + 6411: 0xCA4A, + 6412: 0xCA4B, + 6413: 0xCA4E, + 6414: 0xCA4F, + 6415: 0xCA51, + 6416: 0xCA52, + 6417: 0xCA53, + 6418: 0xCA55, + 6419: 0xCA56, + 6420: 0xCA57, + 6421: 0xCA58, + 6422: 0xCA59, + 6423: 0xCA5A, + 6424: 0xCA5B, + 6425: 0xCA5E, + 6426: 0xCA62, + 6427: 0xCA63, + 6428: 0xCA64, + 6429: 0xCA65, + 6430: 0xCA66, + 6431: 0xCA67, + 6432: 0xCA69, + 6433: 0xCA6A, + 6434: 0xCA6B, + 6435: 0xCA6C, + 6436: 0xCA6D, + 6437: 0xCA6E, + 6438: 0xCA6F, + 6439: 0xCA70, + 6440: 0xCA71, + 6441: 0xCA72, + 6442: 0xCA73, + 6443: 0xCA74, + 6444: 0xCA75, + 6445: 0xCA76, + 6446: 0xCA77, + 6447: 0xCA78, + 6448: 0xCA79, + 6449: 0xCA7A, + 6450: 0xCA7B, + 6451: 0xCA7C, + 6452: 0xCA7E, + 6453: 0xCA7F, + 6454: 0xCA80, + 6455: 0xCA81, + 6456: 0xCA82, + 6457: 0xCA83, + 6458: 0xCA85, + 6459: 0xCA86, + 6460: 0xCA87, + 6461: 0xCA88, + 6462: 0xCA89, + 6463: 0xCA8A, + 6464: 0xCA8B, + 6465: 0xCA8C, + 6466: 0xCA8D, + 6467: 0xCA8E, + 6468: 0xCA8F, + 6469: 0xCA90, + 6470: 0xCA91, + 6471: 0xCA92, + 6472: 0xCA93, + 6473: 0xCA94, + 6474: 0xCA95, + 6475: 0xCA96, + 6476: 0xCA97, + 6477: 0xCA99, + 6478: 0xCA9A, + 6479: 0xCA9B, + 6480: 0xCA9C, + 6481: 0xCA9D, + 6482: 0xCA9E, + 6483: 0xCA9F, + 6484: 0xCAA0, + 6485: 0xCAA1, + 6486: 0xCAA2, + 6487: 0xCAA3, + 6488: 0xCAA4, + 6489: 0xCAA5, + 6490: 0xCAA6, + 6491: 0xCAA7, + 6492: 0x2170, + 6493: 0x2171, + 6494: 0x2172, + 6495: 0x2173, + 6496: 0x2174, + 6497: 0x2175, + 6498: 0x2176, + 6499: 0x2177, + 6500: 0x2178, + 6501: 0x2179, + 6507: 0x2160, + 6508: 0x2161, + 6509: 0x2162, + 6510: 0x2163, + 6511: 0x2164, + 6512: 0x2165, + 6513: 0x2166, + 6514: 0x2167, + 6515: 0x2168, + 6516: 0x2169, + 6524: 0x0391, + 6525: 0x0392, + 6526: 0x0393, + 6527: 0x0394, + 6528: 0x0395, + 6529: 0x0396, + 6530: 0x0397, + 6531: 0x0398, + 6532: 0x0399, + 6533: 0x039A, + 6534: 0x039B, + 6535: 0x039C, + 6536: 0x039D, + 6537: 0x039E, + 6538: 0x039F, + 6539: 0x03A0, + 6540: 0x03A1, + 6541: 0x03A3, + 6542: 0x03A4, + 6543: 0x03A5, + 6544: 0x03A6, + 6545: 0x03A7, + 6546: 0x03A8, + 6547: 0x03A9, + 6556: 0x03B1, + 6557: 0x03B2, + 6558: 0x03B3, + 6559: 0x03B4, + 6560: 0x03B5, + 6561: 0x03B6, + 6562: 0x03B7, + 6563: 0x03B8, + 6564: 0x03B9, + 6565: 0x03BA, + 6566: 0x03BB, + 6567: 0x03BC, + 6568: 0x03BD, + 6569: 0x03BE, + 6570: 0x03BF, + 6571: 0x03C0, + 6572: 0x03C1, + 6573: 0x03C3, + 6574: 0x03C4, + 6575: 0x03C5, + 6576: 0x03C6, + 6577: 0x03C7, + 6578: 0x03C8, + 6579: 0x03C9, + 6586: 0xCAA8, + 6587: 0xCAA9, + 6588: 0xCAAA, + 6589: 0xCAAB, + 6590: 0xCAAC, + 6591: 0xCAAD, + 6592: 0xCAAE, + 6593: 0xCAAF, + 6594: 0xCAB0, + 6595: 0xCAB1, + 6596: 0xCAB2, + 6597: 0xCAB3, + 6598: 0xCAB4, + 6599: 0xCAB5, + 6600: 0xCAB6, + 6601: 0xCAB7, + 6602: 0xCAB8, + 6603: 0xCAB9, + 6604: 0xCABA, + 6605: 0xCABB, + 6606: 0xCABE, + 6607: 0xCABF, + 6608: 0xCAC1, + 6609: 0xCAC2, + 6610: 0xCAC3, + 6611: 0xCAC5, + 6612: 0xCAC6, + 6613: 0xCAC7, + 6614: 0xCAC8, + 6615: 0xCAC9, + 6616: 0xCACA, + 6617: 0xCACB, + 6618: 0xCACE, + 6619: 0xCAD0, + 6620: 0xCAD2, + 6621: 0xCAD4, + 6622: 0xCAD5, + 6623: 0xCAD6, + 6624: 0xCAD7, + 6625: 0xCADA, + 6626: 0xCADB, + 6627: 0xCADC, + 6628: 0xCADD, + 6629: 0xCADE, + 6630: 0xCADF, + 6631: 0xCAE1, + 6632: 0xCAE2, + 6633: 0xCAE3, + 6634: 0xCAE4, + 6635: 0xCAE5, + 6636: 0xCAE6, + 6637: 0xCAE7, + 6638: 0xCAE8, + 6639: 0xCAE9, + 6640: 0xCAEA, + 6641: 0xCAEB, + 6642: 0xCAED, + 6643: 0xCAEE, + 6644: 0xCAEF, + 6645: 0xCAF0, + 6646: 0xCAF1, + 6647: 0xCAF2, + 6648: 0xCAF3, + 6649: 0xCAF5, + 6650: 0xCAF6, + 6651: 0xCAF7, + 6652: 0xCAF8, + 6653: 0xCAF9, + 6654: 0xCAFA, + 6655: 0xCAFB, + 6656: 0xCAFC, + 6657: 0xCAFD, + 6658: 0xCAFE, + 6659: 0xCAFF, + 6660: 0xCB00, + 6661: 0xCB01, + 6662: 0xCB02, + 6663: 0xCB03, + 6664: 0xCB04, + 6665: 0xCB05, + 6666: 0xCB06, + 6667: 0xCB07, + 6668: 0xCB09, + 6669: 0xCB0A, + 6670: 0x2500, + 6671: 0x2502, + 6672: 0x250C, + 6673: 0x2510, + 6674: 0x2518, + 6675: 0x2514, + 6676: 0x251C, + 6677: 0x252C, + 6678: 0x2524, + 6679: 0x2534, + 6680: 0x253C, + 6681: 0x2501, + 6682: 0x2503, + 6683: 0x250F, + 6684: 0x2513, + 6685: 0x251B, + 6686: 0x2517, + 6687: 0x2523, + 6688: 0x2533, + 6689: 0x252B, + 6690: 0x253B, + 6691: 0x254B, + 6692: 0x2520, + 6693: 0x252F, + 6694: 0x2528, + 6695: 0x2537, + 6696: 0x253F, + 6697: 0x251D, + 6698: 0x2530, + 6699: 0x2525, + 6700: 0x2538, + 6701: 0x2542, + 6702: 0x2512, + 6703: 0x2511, + 6704: 0x251A, + 6705: 0x2519, + 6706: 0x2516, + 6707: 0x2515, + 6708: 0x250E, + 6709: 0x250D, + 6710: 0x251E, + 6711: 0x251F, + 6712: 0x2521, + 6713: 0x2522, + 6714: 0x2526, + 6715: 0x2527, + 6716: 0x2529, + 6717: 0x252A, + 6718: 0x252D, + 6719: 0x252E, + 6720: 0x2531, + 6721: 0x2532, + 6722: 0x2535, + 6723: 0x2536, + 6724: 0x2539, + 6725: 0x253A, + 6726: 0x253D, + 6727: 0x253E, + 6728: 0x2540, + 6729: 0x2541, + 6730: 0x2543, + 6731: 0x2544, + 6732: 0x2545, + 6733: 0x2546, + 6734: 0x2547, + 6735: 0x2548, + 6736: 0x2549, + 6737: 0x254A, + 6764: 0xCB0B, + 6765: 0xCB0C, + 6766: 0xCB0D, + 6767: 0xCB0E, + 6768: 0xCB0F, + 6769: 0xCB11, + 6770: 0xCB12, + 6771: 0xCB13, + 6772: 0xCB15, + 6773: 0xCB16, + 6774: 0xCB17, + 6775: 0xCB19, + 6776: 0xCB1A, + 6777: 0xCB1B, + 6778: 0xCB1C, + 6779: 0xCB1D, + 6780: 0xCB1E, + 6781: 0xCB1F, + 6782: 0xCB22, + 6783: 0xCB23, + 6784: 0xCB24, + 6785: 0xCB25, + 6786: 0xCB26, + 6787: 0xCB27, + 6788: 0xCB28, + 6789: 0xCB29, + 6790: 0xCB2A, + 6791: 0xCB2B, + 6792: 0xCB2C, + 6793: 0xCB2D, + 6794: 0xCB2E, + 6795: 0xCB2F, + 6796: 0xCB30, + 6797: 0xCB31, + 6798: 0xCB32, + 6799: 0xCB33, + 6800: 0xCB34, + 6801: 0xCB35, + 6802: 0xCB36, + 6803: 0xCB37, + 6804: 0xCB38, + 6805: 0xCB39, + 6806: 0xCB3A, + 6807: 0xCB3B, + 6808: 0xCB3C, + 6809: 0xCB3D, + 6810: 0xCB3E, + 6811: 0xCB3F, + 6812: 0xCB40, + 6813: 0xCB42, + 6814: 0xCB43, + 6815: 0xCB44, + 6816: 0xCB45, + 6817: 0xCB46, + 6818: 0xCB47, + 6819: 0xCB4A, + 6820: 0xCB4B, + 6821: 0xCB4D, + 6822: 0xCB4E, + 6823: 0xCB4F, + 6824: 0xCB51, + 6825: 0xCB52, + 6826: 0xCB53, + 6827: 0xCB54, + 6828: 0xCB55, + 6829: 0xCB56, + 6830: 0xCB57, + 6831: 0xCB5A, + 6832: 0xCB5B, + 6833: 0xCB5C, + 6834: 0xCB5E, + 6835: 0xCB5F, + 6836: 0xCB60, + 6837: 0xCB61, + 6838: 0xCB62, + 6839: 0xCB63, + 6840: 0xCB65, + 6841: 0xCB66, + 6842: 0xCB67, + 6843: 0xCB68, + 6844: 0xCB69, + 6845: 0xCB6A, + 6846: 0xCB6B, + 6847: 0xCB6C, + 6848: 0x3395, + 6849: 0x3396, + 6850: 0x3397, + 6851: 0x2113, + 6852: 0x3398, + 6853: 0x33C4, + 6854: 0x33A3, + 6855: 0x33A4, + 6856: 0x33A5, + 6857: 0x33A6, + 6858: 0x3399, + 6859: 0x339A, + 6860: 0x339B, + 6861: 0x339C, + 6862: 0x339D, + 6863: 0x339E, + 6864: 0x339F, + 6865: 0x33A0, + 6866: 0x33A1, + 6867: 0x33A2, + 6868: 0x33CA, + 6869: 0x338D, + 6870: 0x338E, + 6871: 0x338F, + 6872: 0x33CF, + 6873: 0x3388, + 6874: 0x3389, + 6875: 0x33C8, + 6876: 0x33A7, + 6877: 0x33A8, + 6878: 0x33B0, + 6879: 0x33B1, + 6880: 0x33B2, + 6881: 0x33B3, + 6882: 0x33B4, + 6883: 0x33B5, + 6884: 0x33B6, + 6885: 0x33B7, + 6886: 0x33B8, + 6887: 0x33B9, + 6888: 0x3380, + 6889: 0x3381, + 6890: 0x3382, + 6891: 0x3383, + 6892: 0x3384, + 6893: 0x33BA, + 6894: 0x33BB, + 6895: 0x33BC, + 6896: 0x33BD, + 6897: 0x33BE, + 6898: 0x33BF, + 6899: 0x3390, + 6900: 0x3391, + 6901: 0x3392, + 6902: 0x3393, + 6903: 0x3394, + 6904: 0x2126, + 6905: 0x33C0, + 6906: 0x33C1, + 6907: 0x338A, + 6908: 0x338B, + 6909: 0x338C, + 6910: 0x33D6, + 6911: 0x33C5, + 6912: 0x33AD, + 6913: 0x33AE, + 6914: 0x33AF, + 6915: 0x33DB, + 6916: 0x33A9, + 6917: 0x33AA, + 6918: 0x33AB, + 6919: 0x33AC, + 6920: 0x33DD, + 6921: 0x33D0, + 6922: 0x33D3, + 6923: 0x33C3, + 6924: 0x33C9, + 6925: 0x33DC, + 6926: 0x33C6, + 6942: 0xCB6D, + 6943: 0xCB6E, + 6944: 0xCB6F, + 6945: 0xCB70, + 6946: 0xCB71, + 6947: 0xCB72, + 6948: 0xCB73, + 6949: 0xCB74, + 6950: 0xCB75, + 6951: 0xCB76, + 6952: 0xCB77, + 6953: 0xCB7A, + 6954: 0xCB7B, + 6955: 0xCB7C, + 6956: 0xCB7D, + 6957: 0xCB7E, + 6958: 0xCB7F, + 6959: 0xCB80, + 6960: 0xCB81, + 6961: 0xCB82, + 6962: 0xCB83, + 6963: 0xCB84, + 6964: 0xCB85, + 6965: 0xCB86, + 6966: 0xCB87, + 6967: 0xCB88, + 6968: 0xCB89, + 6969: 0xCB8A, + 6970: 0xCB8B, + 6971: 0xCB8C, + 6972: 0xCB8D, + 6973: 0xCB8E, + 6974: 0xCB8F, + 6975: 0xCB90, + 6976: 0xCB91, + 6977: 0xCB92, + 6978: 0xCB93, + 6979: 0xCB94, + 6980: 0xCB95, + 6981: 0xCB96, + 6982: 0xCB97, + 6983: 0xCB98, + 6984: 0xCB99, + 6985: 0xCB9A, + 6986: 0xCB9B, + 6987: 0xCB9D, + 6988: 0xCB9E, + 6989: 0xCB9F, + 6990: 0xCBA0, + 6991: 0xCBA1, + 6992: 0xCBA2, + 6993: 0xCBA3, + 6994: 0xCBA4, + 6995: 0xCBA5, + 6996: 0xCBA6, + 6997: 0xCBA7, + 6998: 0xCBA8, + 6999: 0xCBA9, + 7000: 0xCBAA, + 7001: 0xCBAB, + 7002: 0xCBAC, + 7003: 0xCBAD, + 7004: 0xCBAE, + 7005: 0xCBAF, + 7006: 0xCBB0, + 7007: 0xCBB1, + 7008: 0xCBB2, + 7009: 0xCBB3, + 7010: 0xCBB4, + 7011: 0xCBB5, + 7012: 0xCBB6, + 7013: 0xCBB7, + 7014: 0xCBB9, + 7015: 0xCBBA, + 7016: 0xCBBB, + 7017: 0xCBBC, + 7018: 0xCBBD, + 7019: 0xCBBE, + 7020: 0xCBBF, + 7021: 0xCBC0, + 7022: 0xCBC1, + 7023: 0xCBC2, + 7024: 0xCBC3, + 7025: 0xCBC4, + 7026: 0x00C6, + 7027: 0x00D0, + 7028: 0x00AA, + 7029: 0x0126, + 7031: 0x0132, + 7033: 0x013F, + 7034: 0x0141, + 7035: 0x00D8, + 7036: 0x0152, + 7037: 0x00BA, + 7038: 0x00DE, + 7039: 0x0166, + 7040: 0x014A, + 7042: 0x3260, + 7043: 0x3261, + 7044: 0x3262, + 7045: 0x3263, + 7046: 0x3264, + 7047: 0x3265, + 7048: 0x3266, + 7049: 0x3267, + 7050: 0x3268, + 7051: 0x3269, + 7052: 0x326A, + 7053: 0x326B, + 7054: 0x326C, + 7055: 0x326D, + 7056: 0x326E, + 7057: 0x326F, + 7058: 0x3270, + 7059: 0x3271, + 7060: 0x3272, + 7061: 0x3273, + 7062: 0x3274, + 7063: 0x3275, + 7064: 0x3276, + 7065: 0x3277, + 7066: 0x3278, + 7067: 0x3279, + 7068: 0x327A, + 7069: 0x327B, + 7070: 0x24D0, + 7071: 0x24D1, + 7072: 0x24D2, + 7073: 0x24D3, + 7074: 0x24D4, + 7075: 0x24D5, + 7076: 0x24D6, + 7077: 0x24D7, + 7078: 0x24D8, + 7079: 0x24D9, + 7080: 0x24DA, + 7081: 0x24DB, + 7082: 0x24DC, + 7083: 0x24DD, + 7084: 0x24DE, + 7085: 0x24DF, + 7086: 0x24E0, + 7087: 0x24E1, + 7088: 0x24E2, + 7089: 0x24E3, + 7090: 0x24E4, + 7091: 0x24E5, + 7092: 0x24E6, + 7093: 0x24E7, + 7094: 0x24E8, + 7095: 0x24E9, + 7096: 0x2460, + 7097: 0x2461, + 7098: 0x2462, + 7099: 0x2463, + 7100: 0x2464, + 7101: 0x2465, + 7102: 0x2466, + 7103: 0x2467, + 7104: 0x2468, + 7105: 0x2469, + 7106: 0x246A, + 7107: 0x246B, + 7108: 0x246C, + 7109: 0x246D, + 7110: 0x246E, + 7111: 0x00BD, + 7112: 0x2153, + 7113: 0x2154, + 7114: 0x00BC, + 7115: 0x00BE, + 7116: 0x215B, + 7117: 0x215C, + 7118: 0x215D, + 7119: 0x215E, + 7120: 0xCBC5, + 7121: 0xCBC6, + 7122: 0xCBC7, + 7123: 0xCBC8, + 7124: 0xCBC9, + 7125: 0xCBCA, + 7126: 0xCBCB, + 7127: 0xCBCC, + 7128: 0xCBCD, + 7129: 0xCBCE, + 7130: 0xCBCF, + 7131: 0xCBD0, + 7132: 0xCBD1, + 7133: 0xCBD2, + 7134: 0xCBD3, + 7135: 0xCBD5, + 7136: 0xCBD6, + 7137: 0xCBD7, + 7138: 0xCBD8, + 7139: 0xCBD9, + 7140: 0xCBDA, + 7141: 0xCBDB, + 7142: 0xCBDC, + 7143: 0xCBDD, + 7144: 0xCBDE, + 7145: 0xCBDF, + 7146: 0xCBE0, + 7147: 0xCBE1, + 7148: 0xCBE2, + 7149: 0xCBE3, + 7150: 0xCBE5, + 7151: 0xCBE6, + 7152: 0xCBE8, + 7153: 0xCBEA, + 7154: 0xCBEB, + 7155: 0xCBEC, + 7156: 0xCBED, + 7157: 0xCBEE, + 7158: 0xCBEF, + 7159: 0xCBF0, + 7160: 0xCBF1, + 7161: 0xCBF2, + 7162: 0xCBF3, + 7163: 0xCBF4, + 7164: 0xCBF5, + 7165: 0xCBF6, + 7166: 0xCBF7, + 7167: 0xCBF8, + 7168: 0xCBF9, + 7169: 0xCBFA, + 7170: 0xCBFB, + 7171: 0xCBFC, + 7172: 0xCBFD, + 7173: 0xCBFE, + 7174: 0xCBFF, + 7175: 0xCC00, + 7176: 0xCC01, + 7177: 0xCC02, + 7178: 0xCC03, + 7179: 0xCC04, + 7180: 0xCC05, + 7181: 0xCC06, + 7182: 0xCC07, + 7183: 0xCC08, + 7184: 0xCC09, + 7185: 0xCC0A, + 7186: 0xCC0B, + 7187: 0xCC0E, + 7188: 0xCC0F, + 7189: 0xCC11, + 7190: 0xCC12, + 7191: 0xCC13, + 7192: 0xCC15, + 7193: 0xCC16, + 7194: 0xCC17, + 7195: 0xCC18, + 7196: 0xCC19, + 7197: 0xCC1A, + 7198: 0xCC1B, + 7199: 0xCC1E, + 7200: 0xCC1F, + 7201: 0xCC20, + 7202: 0xCC23, + 7203: 0xCC24, + 7204: 0x00E6, + 7205: 0x0111, + 7206: 0x00F0, + 7207: 0x0127, + 7208: 0x0131, + 7209: 0x0133, + 7210: 0x0138, + 7211: 0x0140, + 7212: 0x0142, + 7213: 0x00F8, + 7214: 0x0153, + 7215: 0x00DF, + 7216: 0x00FE, + 7217: 0x0167, + 7218: 0x014B, + 7219: 0x0149, + 7220: 0x3200, + 7221: 0x3201, + 7222: 0x3202, + 7223: 0x3203, + 7224: 0x3204, + 7225: 0x3205, + 7226: 0x3206, + 7227: 0x3207, + 7228: 0x3208, + 7229: 0x3209, + 7230: 0x320A, + 7231: 0x320B, + 7232: 0x320C, + 7233: 0x320D, + 7234: 0x320E, + 7235: 0x320F, + 7236: 0x3210, + 7237: 0x3211, + 7238: 0x3212, + 7239: 0x3213, + 7240: 0x3214, + 7241: 0x3215, + 7242: 0x3216, + 7243: 0x3217, + 7244: 0x3218, + 7245: 0x3219, + 7246: 0x321A, + 7247: 0x321B, + 7248: 0x249C, + 7249: 0x249D, + 7250: 0x249E, + 7251: 0x249F, + 7252: 0x24A0, + 7253: 0x24A1, + 7254: 0x24A2, + 7255: 0x24A3, + 7256: 0x24A4, + 7257: 0x24A5, + 7258: 0x24A6, + 7259: 0x24A7, + 7260: 0x24A8, + 7261: 0x24A9, + 7262: 0x24AA, + 7263: 0x24AB, + 7264: 0x24AC, + 7265: 0x24AD, + 7266: 0x24AE, + 7267: 0x24AF, + 7268: 0x24B0, + 7269: 0x24B1, + 7270: 0x24B2, + 7271: 0x24B3, + 7272: 0x24B4, + 7273: 0x24B5, + 7274: 0x2474, + 7275: 0x2475, + 7276: 0x2476, + 7277: 0x2477, + 7278: 0x2478, + 7279: 0x2479, + 7280: 0x247A, + 7281: 0x247B, + 7282: 0x247C, + 7283: 0x247D, + 7284: 0x247E, + 7285: 0x247F, + 7286: 0x2480, + 7287: 0x2481, + 7288: 0x2482, + 7289: 0x00B9, + 7290: 0x00B2, + 7291: 0x00B3, + 7292: 0x2074, + 7293: 0x207F, + 7294: 0x2081, + 7295: 0x2082, + 7296: 0x2083, + 7297: 0x2084, + 7298: 0xCC25, + 7299: 0xCC26, + 7300: 0xCC2A, + 7301: 0xCC2B, + 7302: 0xCC2D, + 7303: 0xCC2F, + 7304: 0xCC31, + 7305: 0xCC32, + 7306: 0xCC33, + 7307: 0xCC34, + 7308: 0xCC35, + 7309: 0xCC36, + 7310: 0xCC37, + 7311: 0xCC3A, + 7312: 0xCC3F, + 7313: 0xCC40, + 7314: 0xCC41, + 7315: 0xCC42, + 7316: 0xCC43, + 7317: 0xCC46, + 7318: 0xCC47, + 7319: 0xCC49, + 7320: 0xCC4A, + 7321: 0xCC4B, + 7322: 0xCC4D, + 7323: 0xCC4E, + 7324: 0xCC4F, + 7325: 0xCC50, + 7326: 0xCC51, + 7327: 0xCC52, + 7328: 0xCC53, + 7329: 0xCC56, + 7330: 0xCC5A, + 7331: 0xCC5B, + 7332: 0xCC5C, + 7333: 0xCC5D, + 7334: 0xCC5E, + 7335: 0xCC5F, + 7336: 0xCC61, + 7337: 0xCC62, + 7338: 0xCC63, + 7339: 0xCC65, + 7340: 0xCC67, + 7341: 0xCC69, + 7342: 0xCC6A, + 7343: 0xCC6B, + 7344: 0xCC6C, + 7345: 0xCC6D, + 7346: 0xCC6E, + 7347: 0xCC6F, + 7348: 0xCC71, + 7349: 0xCC72, + 7350: 0xCC73, + 7351: 0xCC74, + 7352: 0xCC76, + 7353: 0xCC77, + 7354: 0xCC78, + 7355: 0xCC79, + 7356: 0xCC7A, + 7357: 0xCC7B, + 7358: 0xCC7C, + 7359: 0xCC7D, + 7360: 0xCC7E, + 7361: 0xCC7F, + 7362: 0xCC80, + 7363: 0xCC81, + 7364: 0xCC82, + 7365: 0xCC83, + 7366: 0xCC84, + 7367: 0xCC85, + 7368: 0xCC86, + 7369: 0xCC87, + 7370: 0xCC88, + 7371: 0xCC89, + 7372: 0xCC8A, + 7373: 0xCC8B, + 7374: 0xCC8C, + 7375: 0xCC8D, + 7376: 0xCC8E, + 7377: 0xCC8F, + 7378: 0xCC90, + 7379: 0xCC91, + 7380: 0xCC92, + 7381: 0xCC93, + 7382: 0x3041, + 7383: 0x3042, + 7384: 0x3043, + 7385: 0x3044, + 7386: 0x3045, + 7387: 0x3046, + 7388: 0x3047, + 7389: 0x3048, + 7390: 0x3049, + 7391: 0x304A, + 7392: 0x304B, + 7393: 0x304C, + 7394: 0x304D, + 7395: 0x304E, + 7396: 0x304F, + 7397: 0x3050, + 7398: 0x3051, + 7399: 0x3052, + 7400: 0x3053, + 7401: 0x3054, + 7402: 0x3055, + 7403: 0x3056, + 7404: 0x3057, + 7405: 0x3058, + 7406: 0x3059, + 7407: 0x305A, + 7408: 0x305B, + 7409: 0x305C, + 7410: 0x305D, + 7411: 0x305E, + 7412: 0x305F, + 7413: 0x3060, + 7414: 0x3061, + 7415: 0x3062, + 7416: 0x3063, + 7417: 0x3064, + 7418: 0x3065, + 7419: 0x3066, + 7420: 0x3067, + 7421: 0x3068, + 7422: 0x3069, + 7423: 0x306A, + 7424: 0x306B, + 7425: 0x306C, + 7426: 0x306D, + 7427: 0x306E, + 7428: 0x306F, + 7429: 0x3070, + 7430: 0x3071, + 7431: 0x3072, + 7432: 0x3073, + 7433: 0x3074, + 7434: 0x3075, + 7435: 0x3076, + 7436: 0x3077, + 7437: 0x3078, + 7438: 0x3079, + 7439: 0x307A, + 7440: 0x307B, + 7441: 0x307C, + 7442: 0x307D, + 7443: 0x307E, + 7444: 0x307F, + 7445: 0x3080, + 7446: 0x3081, + 7447: 0x3082, + 7448: 0x3083, + 7449: 0x3084, + 7450: 0x3085, + 7451: 0x3086, + 7452: 0x3087, + 7453: 0x3088, + 7454: 0x3089, + 7455: 0x308A, + 7456: 0x308B, + 7457: 0x308C, + 7458: 0x308D, + 7459: 0x308E, + 7460: 0x308F, + 7461: 0x3090, + 7462: 0x3091, + 7463: 0x3092, + 7464: 0x3093, + 7476: 0xCC94, + 7477: 0xCC95, + 7478: 0xCC96, + 7479: 0xCC97, + 7480: 0xCC9A, + 7481: 0xCC9B, + 7482: 0xCC9D, + 7483: 0xCC9E, + 7484: 0xCC9F, + 7485: 0xCCA1, + 7486: 0xCCA2, + 7487: 0xCCA3, + 7488: 0xCCA4, + 7489: 0xCCA5, + 7490: 0xCCA6, + 7491: 0xCCA7, + 7492: 0xCCAA, + 7493: 0xCCAE, + 7494: 0xCCAF, + 7495: 0xCCB0, + 7496: 0xCCB1, + 7497: 0xCCB2, + 7498: 0xCCB3, + 7499: 0xCCB6, + 7500: 0xCCB7, + 7501: 0xCCB9, + 7502: 0xCCBA, + 7503: 0xCCBB, + 7504: 0xCCBD, + 7505: 0xCCBE, + 7506: 0xCCBF, + 7507: 0xCCC0, + 7508: 0xCCC1, + 7509: 0xCCC2, + 7510: 0xCCC3, + 7511: 0xCCC6, + 7512: 0xCCC8, + 7513: 0xCCCA, + 7514: 0xCCCB, + 7515: 0xCCCC, + 7516: 0xCCCD, + 7517: 0xCCCE, + 7518: 0xCCCF, + 7519: 0xCCD1, + 7520: 0xCCD2, + 7521: 0xCCD3, + 7522: 0xCCD5, + 7523: 0xCCD6, + 7524: 0xCCD7, + 7525: 0xCCD8, + 7526: 0xCCD9, + 7527: 0xCCDA, + 7528: 0xCCDB, + 7529: 0xCCDC, + 7530: 0xCCDD, + 7531: 0xCCDE, + 7532: 0xCCDF, + 7533: 0xCCE0, + 7534: 0xCCE1, + 7535: 0xCCE2, + 7536: 0xCCE3, + 7537: 0xCCE5, + 7538: 0xCCE6, + 7539: 0xCCE7, + 7540: 0xCCE8, + 7541: 0xCCE9, + 7542: 0xCCEA, + 7543: 0xCCEB, + 7544: 0xCCED, + 7545: 0xCCEE, + 7546: 0xCCEF, + 7547: 0xCCF1, + 7548: 0xCCF2, + 7549: 0xCCF3, + 7550: 0xCCF4, + 7551: 0xCCF5, + 7552: 0xCCF6, + 7553: 0xCCF7, + 7554: 0xCCF8, + 7555: 0xCCF9, + 7556: 0xCCFA, + 7557: 0xCCFB, + 7558: 0xCCFC, + 7559: 0xCCFD, + 7560: 0x30A1, + 7561: 0x30A2, + 7562: 0x30A3, + 7563: 0x30A4, + 7564: 0x30A5, + 7565: 0x30A6, + 7566: 0x30A7, + 7567: 0x30A8, + 7568: 0x30A9, + 7569: 0x30AA, + 7570: 0x30AB, + 7571: 0x30AC, + 7572: 0x30AD, + 7573: 0x30AE, + 7574: 0x30AF, + 7575: 0x30B0, + 7576: 0x30B1, + 7577: 0x30B2, + 7578: 0x30B3, + 7579: 0x30B4, + 7580: 0x30B5, + 7581: 0x30B6, + 7582: 0x30B7, + 7583: 0x30B8, + 7584: 0x30B9, + 7585: 0x30BA, + 7586: 0x30BB, + 7587: 0x30BC, + 7588: 0x30BD, + 7589: 0x30BE, + 7590: 0x30BF, + 7591: 0x30C0, + 7592: 0x30C1, + 7593: 0x30C2, + 7594: 0x30C3, + 7595: 0x30C4, + 7596: 0x30C5, + 7597: 0x30C6, + 7598: 0x30C7, + 7599: 0x30C8, + 7600: 0x30C9, + 7601: 0x30CA, + 7602: 0x30CB, + 7603: 0x30CC, + 7604: 0x30CD, + 7605: 0x30CE, + 7606: 0x30CF, + 7607: 0x30D0, + 7608: 0x30D1, + 7609: 0x30D2, + 7610: 0x30D3, + 7611: 0x30D4, + 7612: 0x30D5, + 7613: 0x30D6, + 7614: 0x30D7, + 7615: 0x30D8, + 7616: 0x30D9, + 7617: 0x30DA, + 7618: 0x30DB, + 7619: 0x30DC, + 7620: 0x30DD, + 7621: 0x30DE, + 7622: 0x30DF, + 7623: 0x30E0, + 7624: 0x30E1, + 7625: 0x30E2, + 7626: 0x30E3, + 7627: 0x30E4, + 7628: 0x30E5, + 7629: 0x30E6, + 7630: 0x30E7, + 7631: 0x30E8, + 7632: 0x30E9, + 7633: 0x30EA, + 7634: 0x30EB, + 7635: 0x30EC, + 7636: 0x30ED, + 7637: 0x30EE, + 7638: 0x30EF, + 7639: 0x30F0, + 7640: 0x30F1, + 7641: 0x30F2, + 7642: 0x30F3, + 7643: 0x30F4, + 7644: 0x30F5, + 7645: 0x30F6, + 7654: 0xCCFE, + 7655: 0xCCFF, + 7656: 0xCD00, + 7657: 0xCD02, + 7658: 0xCD03, + 7659: 0xCD04, + 7660: 0xCD05, + 7661: 0xCD06, + 7662: 0xCD07, + 7663: 0xCD0A, + 7664: 0xCD0B, + 7665: 0xCD0D, + 7666: 0xCD0E, + 7667: 0xCD0F, + 7668: 0xCD11, + 7669: 0xCD12, + 7670: 0xCD13, + 7671: 0xCD14, + 7672: 0xCD15, + 7673: 0xCD16, + 7674: 0xCD17, + 7675: 0xCD1A, + 7676: 0xCD1C, + 7677: 0xCD1E, + 7678: 0xCD1F, + 7679: 0xCD20, + 7680: 0xCD21, + 7681: 0xCD22, + 7682: 0xCD23, + 7683: 0xCD25, + 7684: 0xCD26, + 7685: 0xCD27, + 7686: 0xCD29, + 7687: 0xCD2A, + 7688: 0xCD2B, + 7689: 0xCD2D, + 7690: 0xCD2E, + 7691: 0xCD2F, + 7692: 0xCD30, + 7693: 0xCD31, + 7694: 0xCD32, + 7695: 0xCD33, + 7696: 0xCD34, + 7697: 0xCD35, + 7698: 0xCD36, + 7699: 0xCD37, + 7700: 0xCD38, + 7701: 0xCD3A, + 7702: 0xCD3B, + 7703: 0xCD3C, + 7704: 0xCD3D, + 7705: 0xCD3E, + 7706: 0xCD3F, + 7707: 0xCD40, + 7708: 0xCD41, + 7709: 0xCD42, + 7710: 0xCD43, + 7711: 0xCD44, + 7712: 0xCD45, + 7713: 0xCD46, + 7714: 0xCD47, + 7715: 0xCD48, + 7716: 0xCD49, + 7717: 0xCD4A, + 7718: 0xCD4B, + 7719: 0xCD4C, + 7720: 0xCD4D, + 7721: 0xCD4E, + 7722: 0xCD4F, + 7723: 0xCD50, + 7724: 0xCD51, + 7725: 0xCD52, + 7726: 0xCD53, + 7727: 0xCD54, + 7728: 0xCD55, + 7729: 0xCD56, + 7730: 0xCD57, + 7731: 0xCD58, + 7732: 0xCD59, + 7733: 0xCD5A, + 7734: 0xCD5B, + 7735: 0xCD5D, + 7736: 0xCD5E, + 7737: 0xCD5F, + 7738: 0x0410, + 7739: 0x0411, + 7740: 0x0412, + 7741: 0x0413, + 7742: 0x0414, + 7743: 0x0415, + 7744: 0x0401, + 7745: 0x0416, + 7746: 0x0417, + 7747: 0x0418, + 7748: 0x0419, + 7749: 0x041A, + 7750: 0x041B, + 7751: 0x041C, + 7752: 0x041D, + 7753: 0x041E, + 7754: 0x041F, + 7755: 0x0420, + 7756: 0x0421, + 7757: 0x0422, + 7758: 0x0423, + 7759: 0x0424, + 7760: 0x0425, + 7761: 0x0426, + 7762: 0x0427, + 7763: 0x0428, + 7764: 0x0429, + 7765: 0x042A, + 7766: 0x042B, + 7767: 0x042C, + 7768: 0x042D, + 7769: 0x042E, + 7770: 0x042F, + 7786: 0x0430, + 7787: 0x0431, + 7788: 0x0432, + 7789: 0x0433, + 7790: 0x0434, + 7791: 0x0435, + 7792: 0x0451, + 7793: 0x0436, + 7794: 0x0437, + 7795: 0x0438, + 7796: 0x0439, + 7797: 0x043A, + 7798: 0x043B, + 7799: 0x043C, + 7800: 0x043D, + 7801: 0x043E, + 7802: 0x043F, + 7803: 0x0440, + 7804: 0x0441, + 7805: 0x0442, + 7806: 0x0443, + 7807: 0x0444, + 7808: 0x0445, + 7809: 0x0446, + 7810: 0x0447, + 7811: 0x0448, + 7812: 0x0449, + 7813: 0x044A, + 7814: 0x044B, + 7815: 0x044C, + 7816: 0x044D, + 7817: 0x044E, + 7818: 0x044F, + 7832: 0xCD61, + 7833: 0xCD62, + 7834: 0xCD63, + 7835: 0xCD65, + 7836: 0xCD66, + 7837: 0xCD67, + 7838: 0xCD68, + 7839: 0xCD69, + 7840: 0xCD6A, + 7841: 0xCD6B, + 7842: 0xCD6E, + 7843: 0xCD70, + 7844: 0xCD72, + 7845: 0xCD73, + 7846: 0xCD74, + 7847: 0xCD75, + 7848: 0xCD76, + 7849: 0xCD77, + 7850: 0xCD79, + 7851: 0xCD7A, + 7852: 0xCD7B, + 7853: 0xCD7C, + 7854: 0xCD7D, + 7855: 0xCD7E, + 7856: 0xCD7F, + 7857: 0xCD80, + 7858: 0xCD81, + 7859: 0xCD82, + 7860: 0xCD83, + 7861: 0xCD84, + 7862: 0xCD85, + 7863: 0xCD86, + 7864: 0xCD87, + 7865: 0xCD89, + 7866: 0xCD8A, + 7867: 0xCD8B, + 7868: 0xCD8C, + 7869: 0xCD8D, + 7870: 0xCD8E, + 7871: 0xCD8F, + 7872: 0xCD90, + 7873: 0xCD91, + 7874: 0xCD92, + 7875: 0xCD93, + 7876: 0xCD96, + 7877: 0xCD97, + 7878: 0xCD99, + 7879: 0xCD9A, + 7880: 0xCD9B, + 7881: 0xCD9D, + 7882: 0xCD9E, + 7883: 0xCD9F, + 7884: 0xCDA0, + 7885: 0xCDA1, + 7886: 0xCDA2, + 7887: 0xCDA3, + 7888: 0xCDA6, + 7889: 0xCDA8, + 7890: 0xCDAA, + 7891: 0xCDAB, + 7892: 0xCDAC, + 7893: 0xCDAD, + 7894: 0xCDAE, + 7895: 0xCDAF, + 7896: 0xCDB1, + 7897: 0xCDB2, + 7898: 0xCDB3, + 7899: 0xCDB4, + 7900: 0xCDB5, + 7901: 0xCDB6, + 7902: 0xCDB7, + 7903: 0xCDB8, + 7904: 0xCDB9, + 7905: 0xCDBA, + 7906: 0xCDBB, + 7907: 0xCDBC, + 7908: 0xCDBD, + 7909: 0xCDBE, + 7910: 0xCDBF, + 7911: 0xCDC0, + 7912: 0xCDC1, + 7913: 0xCDC2, + 7914: 0xCDC3, + 7915: 0xCDC5, + 8010: 0xCDC6, + 8011: 0xCDC7, + 8012: 0xCDC8, + 8013: 0xCDC9, + 8014: 0xCDCA, + 8015: 0xCDCB, + 8016: 0xCDCD, + 8017: 0xCDCE, + 8018: 0xCDCF, + 8019: 0xCDD1, + 8020: 0xCDD2, + 8021: 0xCDD3, + 8022: 0xCDD4, + 8023: 0xCDD5, + 8024: 0xCDD6, + 8025: 0xCDD7, + 8026: 0xCDD8, + 8027: 0xCDD9, + 8028: 0xCDDA, + 8029: 0xCDDB, + 8030: 0xCDDC, + 8031: 0xCDDD, + 8032: 0xCDDE, + 8033: 0xCDDF, + 8034: 0xCDE0, + 8035: 0xCDE1, + 8036: 0xCDE2, + 8037: 0xCDE3, + 8038: 0xCDE4, + 8039: 0xCDE5, + 8040: 0xCDE6, + 8041: 0xCDE7, + 8042: 0xCDE9, + 8043: 0xCDEA, + 8044: 0xCDEB, + 8045: 0xCDED, + 8046: 0xCDEE, + 8047: 0xCDEF, + 8048: 0xCDF1, + 8049: 0xCDF2, + 8050: 0xCDF3, + 8051: 0xCDF4, + 8052: 0xCDF5, + 8053: 0xCDF6, + 8054: 0xCDF7, + 8055: 0xCDFA, + 8056: 0xCDFC, + 8057: 0xCDFE, + 8058: 0xCDFF, + 8059: 0xCE00, + 8060: 0xCE01, + 8061: 0xCE02, + 8062: 0xCE03, + 8063: 0xCE05, + 8064: 0xCE06, + 8065: 0xCE07, + 8066: 0xCE09, + 8067: 0xCE0A, + 8068: 0xCE0B, + 8069: 0xCE0D, + 8070: 0xCE0E, + 8071: 0xCE0F, + 8072: 0xCE10, + 8073: 0xCE11, + 8074: 0xCE12, + 8075: 0xCE13, + 8076: 0xCE15, + 8077: 0xCE16, + 8078: 0xCE17, + 8079: 0xCE18, + 8080: 0xCE1A, + 8081: 0xCE1B, + 8082: 0xCE1C, + 8083: 0xCE1D, + 8084: 0xCE1E, + 8085: 0xCE1F, + 8086: 0xCE22, + 8087: 0xCE23, + 8088: 0xCE25, + 8089: 0xCE26, + 8090: 0xCE27, + 8091: 0xCE29, + 8092: 0xCE2A, + 8093: 0xCE2B, + 8188: 0xCE2C, + 8189: 0xCE2D, + 8190: 0xCE2E, + 8191: 0xCE2F, + 8192: 0xCE32, + 8193: 0xCE34, + 8194: 0xCE36, + 8195: 0xCE37, + 8196: 0xCE38, + 8197: 0xCE39, + 8198: 0xCE3A, + 8199: 0xCE3B, + 8200: 0xCE3C, + 8201: 0xCE3D, + 8202: 0xCE3E, + 8203: 0xCE3F, + 8204: 0xCE40, + 8205: 0xCE41, + 8206: 0xCE42, + 8207: 0xCE43, + 8208: 0xCE44, + 8209: 0xCE45, + 8210: 0xCE46, + 8211: 0xCE47, + 8212: 0xCE48, + 8213: 0xCE49, + 8214: 0xCE4A, + 8215: 0xCE4B, + 8216: 0xCE4C, + 8217: 0xCE4D, + 8218: 0xCE4E, + 8219: 0xCE4F, + 8220: 0xCE50, + 8221: 0xCE51, + 8222: 0xCE52, + 8223: 0xCE53, + 8224: 0xCE54, + 8225: 0xCE55, + 8226: 0xCE56, + 8227: 0xCE57, + 8228: 0xCE5A, + 8229: 0xCE5B, + 8230: 0xCE5D, + 8231: 0xCE5E, + 8232: 0xCE62, + 8233: 0xCE63, + 8234: 0xCE64, + 8235: 0xCE65, + 8236: 0xCE66, + 8237: 0xCE67, + 8238: 0xCE6A, + 8239: 0xCE6C, + 8240: 0xCE6E, + 8241: 0xCE6F, + 8242: 0xCE70, + 8243: 0xCE71, + 8244: 0xCE72, + 8245: 0xCE73, + 8246: 0xCE76, + 8247: 0xCE77, + 8248: 0xCE79, + 8249: 0xCE7A, + 8250: 0xCE7B, + 8251: 0xCE7D, + 8252: 0xCE7E, + 8253: 0xCE7F, + 8254: 0xCE80, + 8255: 0xCE81, + 8256: 0xCE82, + 8257: 0xCE83, + 8258: 0xCE86, + 8259: 0xCE88, + 8260: 0xCE8A, + 8261: 0xCE8B, + 8262: 0xCE8C, + 8263: 0xCE8D, + 8264: 0xCE8E, + 8265: 0xCE8F, + 8266: 0xCE92, + 8267: 0xCE93, + 8268: 0xCE95, + 8269: 0xCE96, + 8270: 0xCE97, + 8271: 0xCE99, + 8366: 0xCE9A, + 8367: 0xCE9B, + 8368: 0xCE9C, + 8369: 0xCE9D, + 8370: 0xCE9E, + 8371: 0xCE9F, + 8372: 0xCEA2, + 8373: 0xCEA6, + 8374: 0xCEA7, + 8375: 0xCEA8, + 8376: 0xCEA9, + 8377: 0xCEAA, + 8378: 0xCEAB, + 8379: 0xCEAE, + 8380: 0xCEAF, + 8381: 0xCEB0, + 8382: 0xCEB1, + 8383: 0xCEB2, + 8384: 0xCEB3, + 8385: 0xCEB4, + 8386: 0xCEB5, + 8387: 0xCEB6, + 8388: 0xCEB7, + 8389: 0xCEB8, + 8390: 0xCEB9, + 8391: 0xCEBA, + 8392: 0xCEBB, + 8393: 0xCEBC, + 8394: 0xCEBD, + 8395: 0xCEBE, + 8396: 0xCEBF, + 8397: 0xCEC0, + 8398: 0xCEC2, + 8399: 0xCEC3, + 8400: 0xCEC4, + 8401: 0xCEC5, + 8402: 0xCEC6, + 8403: 0xCEC7, + 8404: 0xCEC8, + 8405: 0xCEC9, + 8406: 0xCECA, + 8407: 0xCECB, + 8408: 0xCECC, + 8409: 0xCECD, + 8410: 0xCECE, + 8411: 0xCECF, + 8412: 0xCED0, + 8413: 0xCED1, + 8414: 0xCED2, + 8415: 0xCED3, + 8416: 0xCED4, + 8417: 0xCED5, + 8418: 0xCED6, + 8419: 0xCED7, + 8420: 0xCED8, + 8421: 0xCED9, + 8422: 0xCEDA, + 8423: 0xCEDB, + 8424: 0xCEDC, + 8425: 0xCEDD, + 8426: 0xCEDE, + 8427: 0xCEDF, + 8428: 0xCEE0, + 8429: 0xCEE1, + 8430: 0xCEE2, + 8431: 0xCEE3, + 8432: 0xCEE6, + 8433: 0xCEE7, + 8434: 0xCEE9, + 8435: 0xCEEA, + 8436: 0xCEED, + 8437: 0xCEEE, + 8438: 0xCEEF, + 8439: 0xCEF0, + 8440: 0xCEF1, + 8441: 0xCEF2, + 8442: 0xCEF3, + 8443: 0xCEF6, + 8444: 0xCEFA, + 8445: 0xCEFB, + 8446: 0xCEFC, + 8447: 0xCEFD, + 8448: 0xCEFE, + 8449: 0xCEFF, + 8450: 0xAC00, + 8451: 0xAC01, + 8452: 0xAC04, + 8453: 0xAC07, + 8454: 0xAC08, + 8455: 0xAC09, + 8456: 0xAC0A, + 8457: 0xAC10, + 8458: 0xAC11, + 8459: 0xAC12, + 8460: 0xAC13, + 8461: 0xAC14, + 8462: 0xAC15, + 8463: 0xAC16, + 8464: 0xAC17, + 8465: 0xAC19, + 8466: 0xAC1A, + 8467: 0xAC1B, + 8468: 0xAC1C, + 8469: 0xAC1D, + 8470: 0xAC20, + 8471: 0xAC24, + 8472: 0xAC2C, + 8473: 0xAC2D, + 8474: 0xAC2F, + 8475: 0xAC30, + 8476: 0xAC31, + 8477: 0xAC38, + 8478: 0xAC39, + 8479: 0xAC3C, + 8480: 0xAC40, + 8481: 0xAC4B, + 8482: 0xAC4D, + 8483: 0xAC54, + 8484: 0xAC58, + 8485: 0xAC5C, + 8486: 0xAC70, + 8487: 0xAC71, + 8488: 0xAC74, + 8489: 0xAC77, + 8490: 0xAC78, + 8491: 0xAC7A, + 8492: 0xAC80, + 8493: 0xAC81, + 8494: 0xAC83, + 8495: 0xAC84, + 8496: 0xAC85, + 8497: 0xAC86, + 8498: 0xAC89, + 8499: 0xAC8A, + 8500: 0xAC8B, + 8501: 0xAC8C, + 8502: 0xAC90, + 8503: 0xAC94, + 8504: 0xAC9C, + 8505: 0xAC9D, + 8506: 0xAC9F, + 8507: 0xACA0, + 8508: 0xACA1, + 8509: 0xACA8, + 8510: 0xACA9, + 8511: 0xACAA, + 8512: 0xACAC, + 8513: 0xACAF, + 8514: 0xACB0, + 8515: 0xACB8, + 8516: 0xACB9, + 8517: 0xACBB, + 8518: 0xACBC, + 8519: 0xACBD, + 8520: 0xACC1, + 8521: 0xACC4, + 8522: 0xACC8, + 8523: 0xACCC, + 8524: 0xACD5, + 8525: 0xACD7, + 8526: 0xACE0, + 8527: 0xACE1, + 8528: 0xACE4, + 8529: 0xACE7, + 8530: 0xACE8, + 8531: 0xACEA, + 8532: 0xACEC, + 8533: 0xACEF, + 8534: 0xACF0, + 8535: 0xACF1, + 8536: 0xACF3, + 8537: 0xACF5, + 8538: 0xACF6, + 8539: 0xACFC, + 8540: 0xACFD, + 8541: 0xAD00, + 8542: 0xAD04, + 8543: 0xAD06, + 8544: 0xCF02, + 8545: 0xCF03, + 8546: 0xCF05, + 8547: 0xCF06, + 8548: 0xCF07, + 8549: 0xCF09, + 8550: 0xCF0A, + 8551: 0xCF0B, + 8552: 0xCF0C, + 8553: 0xCF0D, + 8554: 0xCF0E, + 8555: 0xCF0F, + 8556: 0xCF12, + 8557: 0xCF14, + 8558: 0xCF16, + 8559: 0xCF17, + 8560: 0xCF18, + 8561: 0xCF19, + 8562: 0xCF1A, + 8563: 0xCF1B, + 8564: 0xCF1D, + 8565: 0xCF1E, + 8566: 0xCF1F, + 8567: 0xCF21, + 8568: 0xCF22, + 8569: 0xCF23, + 8570: 0xCF25, + 8571: 0xCF26, + 8572: 0xCF27, + 8573: 0xCF28, + 8574: 0xCF29, + 8575: 0xCF2A, + 8576: 0xCF2B, + 8577: 0xCF2E, + 8578: 0xCF32, + 8579: 0xCF33, + 8580: 0xCF34, + 8581: 0xCF35, + 8582: 0xCF36, + 8583: 0xCF37, + 8584: 0xCF39, + 8585: 0xCF3A, + 8586: 0xCF3B, + 8587: 0xCF3C, + 8588: 0xCF3D, + 8589: 0xCF3E, + 8590: 0xCF3F, + 8591: 0xCF40, + 8592: 0xCF41, + 8593: 0xCF42, + 8594: 0xCF43, + 8595: 0xCF44, + 8596: 0xCF45, + 8597: 0xCF46, + 8598: 0xCF47, + 8599: 0xCF48, + 8600: 0xCF49, + 8601: 0xCF4A, + 8602: 0xCF4B, + 8603: 0xCF4C, + 8604: 0xCF4D, + 8605: 0xCF4E, + 8606: 0xCF4F, + 8607: 0xCF50, + 8608: 0xCF51, + 8609: 0xCF52, + 8610: 0xCF53, + 8611: 0xCF56, + 8612: 0xCF57, + 8613: 0xCF59, + 8614: 0xCF5A, + 8615: 0xCF5B, + 8616: 0xCF5D, + 8617: 0xCF5E, + 8618: 0xCF5F, + 8619: 0xCF60, + 8620: 0xCF61, + 8621: 0xCF62, + 8622: 0xCF63, + 8623: 0xCF66, + 8624: 0xCF68, + 8625: 0xCF6A, + 8626: 0xCF6B, + 8627: 0xCF6C, + 8628: 0xAD0C, + 8629: 0xAD0D, + 8630: 0xAD0F, + 8631: 0xAD11, + 8632: 0xAD18, + 8633: 0xAD1C, + 8634: 0xAD20, + 8635: 0xAD29, + 8636: 0xAD2C, + 8637: 0xAD2D, + 8638: 0xAD34, + 8639: 0xAD35, + 8640: 0xAD38, + 8641: 0xAD3C, + 8642: 0xAD44, + 8643: 0xAD45, + 8644: 0xAD47, + 8645: 0xAD49, + 8646: 0xAD50, + 8647: 0xAD54, + 8648: 0xAD58, + 8649: 0xAD61, + 8650: 0xAD63, + 8651: 0xAD6C, + 8652: 0xAD6D, + 8653: 0xAD70, + 8654: 0xAD73, + 8655: 0xAD74, + 8656: 0xAD75, + 8657: 0xAD76, + 8658: 0xAD7B, + 8659: 0xAD7C, + 8660: 0xAD7D, + 8661: 0xAD7F, + 8662: 0xAD81, + 8663: 0xAD82, + 8664: 0xAD88, + 8665: 0xAD89, + 8666: 0xAD8C, + 8667: 0xAD90, + 8668: 0xAD9C, + 8669: 0xAD9D, + 8670: 0xADA4, + 8671: 0xADB7, + 8672: 0xADC0, + 8673: 0xADC1, + 8674: 0xADC4, + 8675: 0xADC8, + 8676: 0xADD0, + 8677: 0xADD1, + 8678: 0xADD3, + 8679: 0xADDC, + 8680: 0xADE0, + 8681: 0xADE4, + 8682: 0xADF8, + 8683: 0xADF9, + 8684: 0xADFC, + 8685: 0xADFF, + 8686: 0xAE00, + 8687: 0xAE01, + 8688: 0xAE08, + 8689: 0xAE09, + 8690: 0xAE0B, + 8691: 0xAE0D, + 8692: 0xAE14, + 8693: 0xAE30, + 8694: 0xAE31, + 8695: 0xAE34, + 8696: 0xAE37, + 8697: 0xAE38, + 8698: 0xAE3A, + 8699: 0xAE40, + 8700: 0xAE41, + 8701: 0xAE43, + 8702: 0xAE45, + 8703: 0xAE46, + 8704: 0xAE4A, + 8705: 0xAE4C, + 8706: 0xAE4D, + 8707: 0xAE4E, + 8708: 0xAE50, + 8709: 0xAE54, + 8710: 0xAE56, + 8711: 0xAE5C, + 8712: 0xAE5D, + 8713: 0xAE5F, + 8714: 0xAE60, + 8715: 0xAE61, + 8716: 0xAE65, + 8717: 0xAE68, + 8718: 0xAE69, + 8719: 0xAE6C, + 8720: 0xAE70, + 8721: 0xAE78, + 8722: 0xCF6D, + 8723: 0xCF6E, + 8724: 0xCF6F, + 8725: 0xCF72, + 8726: 0xCF73, + 8727: 0xCF75, + 8728: 0xCF76, + 8729: 0xCF77, + 8730: 0xCF79, + 8731: 0xCF7A, + 8732: 0xCF7B, + 8733: 0xCF7C, + 8734: 0xCF7D, + 8735: 0xCF7E, + 8736: 0xCF7F, + 8737: 0xCF81, + 8738: 0xCF82, + 8739: 0xCF83, + 8740: 0xCF84, + 8741: 0xCF86, + 8742: 0xCF87, + 8743: 0xCF88, + 8744: 0xCF89, + 8745: 0xCF8A, + 8746: 0xCF8B, + 8747: 0xCF8D, + 8748: 0xCF8E, + 8749: 0xCF8F, + 8750: 0xCF90, + 8751: 0xCF91, + 8752: 0xCF92, + 8753: 0xCF93, + 8754: 0xCF94, + 8755: 0xCF95, + 8756: 0xCF96, + 8757: 0xCF97, + 8758: 0xCF98, + 8759: 0xCF99, + 8760: 0xCF9A, + 8761: 0xCF9B, + 8762: 0xCF9C, + 8763: 0xCF9D, + 8764: 0xCF9E, + 8765: 0xCF9F, + 8766: 0xCFA0, + 8767: 0xCFA2, + 8768: 0xCFA3, + 8769: 0xCFA4, + 8770: 0xCFA5, + 8771: 0xCFA6, + 8772: 0xCFA7, + 8773: 0xCFA9, + 8774: 0xCFAA, + 8775: 0xCFAB, + 8776: 0xCFAC, + 8777: 0xCFAD, + 8778: 0xCFAE, + 8779: 0xCFAF, + 8780: 0xCFB1, + 8781: 0xCFB2, + 8782: 0xCFB3, + 8783: 0xCFB4, + 8784: 0xCFB5, + 8785: 0xCFB6, + 8786: 0xCFB7, + 8787: 0xCFB8, + 8788: 0xCFB9, + 8789: 0xCFBA, + 8790: 0xCFBB, + 8791: 0xCFBC, + 8792: 0xCFBD, + 8793: 0xCFBE, + 8794: 0xCFBF, + 8795: 0xCFC0, + 8796: 0xCFC1, + 8797: 0xCFC2, + 8798: 0xCFC3, + 8799: 0xCFC5, + 8800: 0xCFC6, + 8801: 0xCFC7, + 8802: 0xCFC8, + 8803: 0xCFC9, + 8804: 0xCFCA, + 8805: 0xCFCB, + 8806: 0xAE79, + 8807: 0xAE7B, + 8808: 0xAE7C, + 8809: 0xAE7D, + 8810: 0xAE84, + 8811: 0xAE85, + 8812: 0xAE8C, + 8813: 0xAEBC, + 8814: 0xAEBD, + 8815: 0xAEBE, + 8816: 0xAEC0, + 8817: 0xAEC4, + 8818: 0xAECC, + 8819: 0xAECD, + 8820: 0xAECF, + 8821: 0xAED0, + 8822: 0xAED1, + 8823: 0xAED8, + 8824: 0xAED9, + 8825: 0xAEDC, + 8826: 0xAEE8, + 8827: 0xAEEB, + 8828: 0xAEED, + 8829: 0xAEF4, + 8830: 0xAEF8, + 8831: 0xAEFC, + 8832: 0xAF07, + 8833: 0xAF08, + 8834: 0xAF0D, + 8835: 0xAF10, + 8836: 0xAF2C, + 8837: 0xAF2D, + 8838: 0xAF30, + 8839: 0xAF32, + 8840: 0xAF34, + 8841: 0xAF3C, + 8842: 0xAF3D, + 8843: 0xAF3F, + 8844: 0xAF41, + 8845: 0xAF42, + 8846: 0xAF43, + 8847: 0xAF48, + 8848: 0xAF49, + 8849: 0xAF50, + 8850: 0xAF5C, + 8851: 0xAF5D, + 8852: 0xAF64, + 8853: 0xAF65, + 8854: 0xAF79, + 8855: 0xAF80, + 8856: 0xAF84, + 8857: 0xAF88, + 8858: 0xAF90, + 8859: 0xAF91, + 8860: 0xAF95, + 8861: 0xAF9C, + 8862: 0xAFB8, + 8863: 0xAFB9, + 8864: 0xAFBC, + 8865: 0xAFC0, + 8866: 0xAFC7, + 8867: 0xAFC8, + 8868: 0xAFC9, + 8869: 0xAFCB, + 8870: 0xAFCD, + 8871: 0xAFCE, + 8872: 0xAFD4, + 8873: 0xAFDC, + 8874: 0xAFE8, + 8875: 0xAFE9, + 8876: 0xAFF0, + 8877: 0xAFF1, + 8878: 0xAFF4, + 8879: 0xAFF8, + 8880: 0xB000, + 8881: 0xB001, + 8882: 0xB004, + 8883: 0xB00C, + 8884: 0xB010, + 8885: 0xB014, + 8886: 0xB01C, + 8887: 0xB01D, + 8888: 0xB028, + 8889: 0xB044, + 8890: 0xB045, + 8891: 0xB048, + 8892: 0xB04A, + 8893: 0xB04C, + 8894: 0xB04E, + 8895: 0xB053, + 8896: 0xB054, + 8897: 0xB055, + 8898: 0xB057, + 8899: 0xB059, + 8900: 0xCFCC, + 8901: 0xCFCD, + 8902: 0xCFCE, + 8903: 0xCFCF, + 8904: 0xCFD0, + 8905: 0xCFD1, + 8906: 0xCFD2, + 8907: 0xCFD3, + 8908: 0xCFD4, + 8909: 0xCFD5, + 8910: 0xCFD6, + 8911: 0xCFD7, + 8912: 0xCFD8, + 8913: 0xCFD9, + 8914: 0xCFDA, + 8915: 0xCFDB, + 8916: 0xCFDC, + 8917: 0xCFDD, + 8918: 0xCFDE, + 8919: 0xCFDF, + 8920: 0xCFE2, + 8921: 0xCFE3, + 8922: 0xCFE5, + 8923: 0xCFE6, + 8924: 0xCFE7, + 8925: 0xCFE9, + 8926: 0xCFEA, + 8927: 0xCFEB, + 8928: 0xCFEC, + 8929: 0xCFED, + 8930: 0xCFEE, + 8931: 0xCFEF, + 8932: 0xCFF2, + 8933: 0xCFF4, + 8934: 0xCFF6, + 8935: 0xCFF7, + 8936: 0xCFF8, + 8937: 0xCFF9, + 8938: 0xCFFA, + 8939: 0xCFFB, + 8940: 0xCFFD, + 8941: 0xCFFE, + 8942: 0xCFFF, + 8943: 0xD001, + 8944: 0xD002, + 8945: 0xD003, + 8946: 0xD005, + 8947: 0xD006, + 8948: 0xD007, + 8949: 0xD008, + 8950: 0xD009, + 8951: 0xD00A, + 8952: 0xD00B, + 8953: 0xD00C, + 8954: 0xD00D, + 8955: 0xD00E, + 8956: 0xD00F, + 8957: 0xD010, + 8958: 0xD012, + 8959: 0xD013, + 8960: 0xD014, + 8961: 0xD015, + 8962: 0xD016, + 8963: 0xD017, + 8964: 0xD019, + 8965: 0xD01A, + 8966: 0xD01B, + 8967: 0xD01C, + 8968: 0xD01D, + 8969: 0xD01E, + 8970: 0xD01F, + 8971: 0xD020, + 8972: 0xD021, + 8973: 0xD022, + 8974: 0xD023, + 8975: 0xD024, + 8976: 0xD025, + 8977: 0xD026, + 8978: 0xD027, + 8979: 0xD028, + 8980: 0xD029, + 8981: 0xD02A, + 8982: 0xD02B, + 8983: 0xD02C, + 8984: 0xB05D, + 8985: 0xB07C, + 8986: 0xB07D, + 8987: 0xB080, + 8988: 0xB084, + 8989: 0xB08C, + 8990: 0xB08D, + 8991: 0xB08F, + 8992: 0xB091, + 8993: 0xB098, + 8994: 0xB099, + 8995: 0xB09A, + 8996: 0xB09C, + 8997: 0xB09F, + 8998: 0xB0A0, + 8999: 0xB0A1, + 9000: 0xB0A2, + 9001: 0xB0A8, + 9002: 0xB0A9, + 9003: 0xB0AB, + 9004: 0xB0AC, + 9005: 0xB0AD, + 9006: 0xB0AE, + 9007: 0xB0AF, + 9008: 0xB0B1, + 9009: 0xB0B3, + 9010: 0xB0B4, + 9011: 0xB0B5, + 9012: 0xB0B8, + 9013: 0xB0BC, + 9014: 0xB0C4, + 9015: 0xB0C5, + 9016: 0xB0C7, + 9017: 0xB0C8, + 9018: 0xB0C9, + 9019: 0xB0D0, + 9020: 0xB0D1, + 9021: 0xB0D4, + 9022: 0xB0D8, + 9023: 0xB0E0, + 9024: 0xB0E5, + 9025: 0xB108, + 9026: 0xB109, + 9027: 0xB10B, + 9028: 0xB10C, + 9029: 0xB110, + 9030: 0xB112, + 9031: 0xB113, + 9032: 0xB118, + 9033: 0xB119, + 9034: 0xB11B, + 9035: 0xB11C, + 9036: 0xB11D, + 9037: 0xB123, + 9038: 0xB124, + 9039: 0xB125, + 9040: 0xB128, + 9041: 0xB12C, + 9042: 0xB134, + 9043: 0xB135, + 9044: 0xB137, + 9045: 0xB138, + 9046: 0xB139, + 9047: 0xB140, + 9048: 0xB141, + 9049: 0xB144, + 9050: 0xB148, + 9051: 0xB150, + 9052: 0xB151, + 9053: 0xB154, + 9054: 0xB155, + 9055: 0xB158, + 9056: 0xB15C, + 9057: 0xB160, + 9058: 0xB178, + 9059: 0xB179, + 9060: 0xB17C, + 9061: 0xB180, + 9062: 0xB182, + 9063: 0xB188, + 9064: 0xB189, + 9065: 0xB18B, + 9066: 0xB18D, + 9067: 0xB192, + 9068: 0xB193, + 9069: 0xB194, + 9070: 0xB198, + 9071: 0xB19C, + 9072: 0xB1A8, + 9073: 0xB1CC, + 9074: 0xB1D0, + 9075: 0xB1D4, + 9076: 0xB1DC, + 9077: 0xB1DD, + 9078: 0xD02E, + 9079: 0xD02F, + 9080: 0xD030, + 9081: 0xD031, + 9082: 0xD032, + 9083: 0xD033, + 9084: 0xD036, + 9085: 0xD037, + 9086: 0xD039, + 9087: 0xD03A, + 9088: 0xD03B, + 9089: 0xD03D, + 9090: 0xD03E, + 9091: 0xD03F, + 9092: 0xD040, + 9093: 0xD041, + 9094: 0xD042, + 9095: 0xD043, + 9096: 0xD046, + 9097: 0xD048, + 9098: 0xD04A, + 9099: 0xD04B, + 9100: 0xD04C, + 9101: 0xD04D, + 9102: 0xD04E, + 9103: 0xD04F, + 9104: 0xD051, + 9105: 0xD052, + 9106: 0xD053, + 9107: 0xD055, + 9108: 0xD056, + 9109: 0xD057, + 9110: 0xD059, + 9111: 0xD05A, + 9112: 0xD05B, + 9113: 0xD05C, + 9114: 0xD05D, + 9115: 0xD05E, + 9116: 0xD05F, + 9117: 0xD061, + 9118: 0xD062, + 9119: 0xD063, + 9120: 0xD064, + 9121: 0xD065, + 9122: 0xD066, + 9123: 0xD067, + 9124: 0xD068, + 9125: 0xD069, + 9126: 0xD06A, + 9127: 0xD06B, + 9128: 0xD06E, + 9129: 0xD06F, + 9130: 0xD071, + 9131: 0xD072, + 9132: 0xD073, + 9133: 0xD075, + 9134: 0xD076, + 9135: 0xD077, + 9136: 0xD078, + 9137: 0xD079, + 9138: 0xD07A, + 9139: 0xD07B, + 9140: 0xD07E, + 9141: 0xD07F, + 9142: 0xD080, + 9143: 0xD082, + 9144: 0xD083, + 9145: 0xD084, + 9146: 0xD085, + 9147: 0xD086, + 9148: 0xD087, + 9149: 0xD088, + 9150: 0xD089, + 9151: 0xD08A, + 9152: 0xD08B, + 9153: 0xD08C, + 9154: 0xD08D, + 9155: 0xD08E, + 9156: 0xD08F, + 9157: 0xD090, + 9158: 0xD091, + 9159: 0xD092, + 9160: 0xD093, + 9161: 0xD094, + 9162: 0xB1DF, + 9163: 0xB1E8, + 9164: 0xB1E9, + 9165: 0xB1EC, + 9166: 0xB1F0, + 9167: 0xB1F9, + 9168: 0xB1FB, + 9169: 0xB1FD, + 9170: 0xB204, + 9171: 0xB205, + 9172: 0xB208, + 9173: 0xB20B, + 9174: 0xB20C, + 9175: 0xB214, + 9176: 0xB215, + 9177: 0xB217, + 9178: 0xB219, + 9179: 0xB220, + 9180: 0xB234, + 9181: 0xB23C, + 9182: 0xB258, + 9183: 0xB25C, + 9184: 0xB260, + 9185: 0xB268, + 9186: 0xB269, + 9187: 0xB274, + 9188: 0xB275, + 9189: 0xB27C, + 9190: 0xB284, + 9191: 0xB285, + 9192: 0xB289, + 9193: 0xB290, + 9194: 0xB291, + 9195: 0xB294, + 9196: 0xB298, + 9197: 0xB299, + 9198: 0xB29A, + 9199: 0xB2A0, + 9200: 0xB2A1, + 9201: 0xB2A3, + 9202: 0xB2A5, + 9203: 0xB2A6, + 9204: 0xB2AA, + 9205: 0xB2AC, + 9206: 0xB2B0, + 9207: 0xB2B4, + 9208: 0xB2C8, + 9209: 0xB2C9, + 9210: 0xB2CC, + 9211: 0xB2D0, + 9212: 0xB2D2, + 9213: 0xB2D8, + 9214: 0xB2D9, + 9215: 0xB2DB, + 9216: 0xB2DD, + 9217: 0xB2E2, + 9218: 0xB2E4, + 9219: 0xB2E5, + 9220: 0xB2E6, + 9221: 0xB2E8, + 9222: 0xB2EB, + 9223: 0xB2EC, + 9224: 0xB2ED, + 9225: 0xB2EE, + 9226: 0xB2EF, + 9227: 0xB2F3, + 9228: 0xB2F4, + 9229: 0xB2F5, + 9230: 0xB2F7, + 9231: 0xB2F8, + 9232: 0xB2F9, + 9233: 0xB2FA, + 9234: 0xB2FB, + 9235: 0xB2FF, + 9236: 0xB300, + 9237: 0xB301, + 9238: 0xB304, + 9239: 0xB308, + 9240: 0xB310, + 9241: 0xB311, + 9242: 0xB313, + 9243: 0xB314, + 9244: 0xB315, + 9245: 0xB31C, + 9246: 0xB354, + 9247: 0xB355, + 9248: 0xB356, + 9249: 0xB358, + 9250: 0xB35B, + 9251: 0xB35C, + 9252: 0xB35E, + 9253: 0xB35F, + 9254: 0xB364, + 9255: 0xB365, + 9256: 0xD095, + 9257: 0xD096, + 9258: 0xD097, + 9259: 0xD098, + 9260: 0xD099, + 9261: 0xD09A, + 9262: 0xD09B, + 9263: 0xD09C, + 9264: 0xD09D, + 9265: 0xD09E, + 9266: 0xD09F, + 9267: 0xD0A0, + 9268: 0xD0A1, + 9269: 0xD0A2, + 9270: 0xD0A3, + 9271: 0xD0A6, + 9272: 0xD0A7, + 9273: 0xD0A9, + 9274: 0xD0AA, + 9275: 0xD0AB, + 9276: 0xD0AD, + 9277: 0xD0AE, + 9278: 0xD0AF, + 9279: 0xD0B0, + 9280: 0xD0B1, + 9281: 0xD0B2, + 9282: 0xD0B3, + 9283: 0xD0B6, + 9284: 0xD0B8, + 9285: 0xD0BA, + 9286: 0xD0BB, + 9287: 0xD0BC, + 9288: 0xD0BD, + 9289: 0xD0BE, + 9290: 0xD0BF, + 9291: 0xD0C2, + 9292: 0xD0C3, + 9293: 0xD0C5, + 9294: 0xD0C6, + 9295: 0xD0C7, + 9296: 0xD0CA, + 9297: 0xD0CB, + 9298: 0xD0CC, + 9299: 0xD0CD, + 9300: 0xD0CE, + 9301: 0xD0CF, + 9302: 0xD0D2, + 9303: 0xD0D6, + 9304: 0xD0D7, + 9305: 0xD0D8, + 9306: 0xD0D9, + 9307: 0xD0DA, + 9308: 0xD0DB, + 9309: 0xD0DE, + 9310: 0xD0DF, + 9311: 0xD0E1, + 9312: 0xD0E2, + 9313: 0xD0E3, + 9314: 0xD0E5, + 9315: 0xD0E6, + 9316: 0xD0E7, + 9317: 0xD0E8, + 9318: 0xD0E9, + 9319: 0xD0EA, + 9320: 0xD0EB, + 9321: 0xD0EE, + 9322: 0xD0F2, + 9323: 0xD0F3, + 9324: 0xD0F4, + 9325: 0xD0F5, + 9326: 0xD0F6, + 9327: 0xD0F7, + 9328: 0xD0F9, + 9329: 0xD0FA, + 9330: 0xD0FB, + 9331: 0xD0FC, + 9332: 0xD0FD, + 9333: 0xD0FE, + 9334: 0xD0FF, + 9335: 0xD100, + 9336: 0xD101, + 9337: 0xD102, + 9338: 0xD103, + 9339: 0xD104, + 9340: 0xB367, + 9341: 0xB369, + 9342: 0xB36B, + 9343: 0xB36E, + 9344: 0xB370, + 9345: 0xB371, + 9346: 0xB374, + 9347: 0xB378, + 9348: 0xB380, + 9349: 0xB381, + 9350: 0xB383, + 9351: 0xB384, + 9352: 0xB385, + 9353: 0xB38C, + 9354: 0xB390, + 9355: 0xB394, + 9356: 0xB3A0, + 9357: 0xB3A1, + 9358: 0xB3A8, + 9359: 0xB3AC, + 9360: 0xB3C4, + 9361: 0xB3C5, + 9362: 0xB3C8, + 9363: 0xB3CB, + 9364: 0xB3CC, + 9365: 0xB3CE, + 9366: 0xB3D0, + 9367: 0xB3D4, + 9368: 0xB3D5, + 9369: 0xB3D7, + 9370: 0xB3D9, + 9371: 0xB3DB, + 9372: 0xB3DD, + 9373: 0xB3E0, + 9374: 0xB3E4, + 9375: 0xB3E8, + 9376: 0xB3FC, + 9377: 0xB410, + 9378: 0xB418, + 9379: 0xB41C, + 9380: 0xB420, + 9381: 0xB428, + 9382: 0xB429, + 9383: 0xB42B, + 9384: 0xB434, + 9385: 0xB450, + 9386: 0xB451, + 9387: 0xB454, + 9388: 0xB458, + 9389: 0xB460, + 9390: 0xB461, + 9391: 0xB463, + 9392: 0xB465, + 9393: 0xB46C, + 9394: 0xB480, + 9395: 0xB488, + 9396: 0xB49D, + 9397: 0xB4A4, + 9398: 0xB4A8, + 9399: 0xB4AC, + 9400: 0xB4B5, + 9401: 0xB4B7, + 9402: 0xB4B9, + 9403: 0xB4C0, + 9404: 0xB4C4, + 9405: 0xB4C8, + 9406: 0xB4D0, + 9407: 0xB4D5, + 9408: 0xB4DC, + 9409: 0xB4DD, + 9410: 0xB4E0, + 9411: 0xB4E3, + 9412: 0xB4E4, + 9413: 0xB4E6, + 9414: 0xB4EC, + 9415: 0xB4ED, + 9416: 0xB4EF, + 9417: 0xB4F1, + 9418: 0xB4F8, + 9419: 0xB514, + 9420: 0xB515, + 9421: 0xB518, + 9422: 0xB51B, + 9423: 0xB51C, + 9424: 0xB524, + 9425: 0xB525, + 9426: 0xB527, + 9427: 0xB528, + 9428: 0xB529, + 9429: 0xB52A, + 9430: 0xB530, + 9431: 0xB531, + 9432: 0xB534, + 9433: 0xB538, + 9434: 0xD105, + 9435: 0xD106, + 9436: 0xD107, + 9437: 0xD108, + 9438: 0xD109, + 9439: 0xD10A, + 9440: 0xD10B, + 9441: 0xD10C, + 9442: 0xD10E, + 9443: 0xD10F, + 9444: 0xD110, + 9445: 0xD111, + 9446: 0xD112, + 9447: 0xD113, + 9448: 0xD114, + 9449: 0xD115, + 9450: 0xD116, + 9451: 0xD117, + 9452: 0xD118, + 9453: 0xD119, + 9454: 0xD11A, + 9455: 0xD11B, + 9456: 0xD11C, + 9457: 0xD11D, + 9458: 0xD11E, + 9459: 0xD11F, + 9460: 0xD120, + 9461: 0xD121, + 9462: 0xD122, + 9463: 0xD123, + 9464: 0xD124, + 9465: 0xD125, + 9466: 0xD126, + 9467: 0xD127, + 9468: 0xD128, + 9469: 0xD129, + 9470: 0xD12A, + 9471: 0xD12B, + 9472: 0xD12C, + 9473: 0xD12D, + 9474: 0xD12E, + 9475: 0xD12F, + 9476: 0xD132, + 9477: 0xD133, + 9478: 0xD135, + 9479: 0xD136, + 9480: 0xD137, + 9481: 0xD139, + 9482: 0xD13B, + 9483: 0xD13C, + 9484: 0xD13D, + 9485: 0xD13E, + 9486: 0xD13F, + 9487: 0xD142, + 9488: 0xD146, + 9489: 0xD147, + 9490: 0xD148, + 9491: 0xD149, + 9492: 0xD14A, + 9493: 0xD14B, + 9494: 0xD14E, + 9495: 0xD14F, + 9496: 0xD151, + 9497: 0xD152, + 9498: 0xD153, + 9499: 0xD155, + 9500: 0xD156, + 9501: 0xD157, + 9502: 0xD158, + 9503: 0xD159, + 9504: 0xD15A, + 9505: 0xD15B, + 9506: 0xD15E, + 9507: 0xD160, + 9508: 0xD162, + 9509: 0xD163, + 9510: 0xD164, + 9511: 0xD165, + 9512: 0xD166, + 9513: 0xD167, + 9514: 0xD169, + 9515: 0xD16A, + 9516: 0xD16B, + 9517: 0xD16D, + 9518: 0xB540, + 9519: 0xB541, + 9520: 0xB543, + 9521: 0xB544, + 9522: 0xB545, + 9523: 0xB54B, + 9524: 0xB54C, + 9525: 0xB54D, + 9526: 0xB550, + 9527: 0xB554, + 9528: 0xB55C, + 9529: 0xB55D, + 9530: 0xB55F, + 9531: 0xB560, + 9532: 0xB561, + 9533: 0xB5A0, + 9534: 0xB5A1, + 9535: 0xB5A4, + 9536: 0xB5A8, + 9537: 0xB5AA, + 9538: 0xB5AB, + 9539: 0xB5B0, + 9540: 0xB5B1, + 9541: 0xB5B3, + 9542: 0xB5B4, + 9543: 0xB5B5, + 9544: 0xB5BB, + 9545: 0xB5BC, + 9546: 0xB5BD, + 9547: 0xB5C0, + 9548: 0xB5C4, + 9549: 0xB5CC, + 9550: 0xB5CD, + 9551: 0xB5CF, + 9552: 0xB5D0, + 9553: 0xB5D1, + 9554: 0xB5D8, + 9555: 0xB5EC, + 9556: 0xB610, + 9557: 0xB611, + 9558: 0xB614, + 9559: 0xB618, + 9560: 0xB625, + 9561: 0xB62C, + 9562: 0xB634, + 9563: 0xB648, + 9564: 0xB664, + 9565: 0xB668, + 9566: 0xB69C, + 9567: 0xB69D, + 9568: 0xB6A0, + 9569: 0xB6A4, + 9570: 0xB6AB, + 9571: 0xB6AC, + 9572: 0xB6B1, + 9573: 0xB6D4, + 9574: 0xB6F0, + 9575: 0xB6F4, + 9576: 0xB6F8, + 9577: 0xB700, + 9578: 0xB701, + 9579: 0xB705, + 9580: 0xB728, + 9581: 0xB729, + 9582: 0xB72C, + 9583: 0xB72F, + 9584: 0xB730, + 9585: 0xB738, + 9586: 0xB739, + 9587: 0xB73B, + 9588: 0xB744, + 9589: 0xB748, + 9590: 0xB74C, + 9591: 0xB754, + 9592: 0xB755, + 9593: 0xB760, + 9594: 0xB764, + 9595: 0xB768, + 9596: 0xB770, + 9597: 0xB771, + 9598: 0xB773, + 9599: 0xB775, + 9600: 0xB77C, + 9601: 0xB77D, + 9602: 0xB780, + 9603: 0xB784, + 9604: 0xB78C, + 9605: 0xB78D, + 9606: 0xB78F, + 9607: 0xB790, + 9608: 0xB791, + 9609: 0xB792, + 9610: 0xB796, + 9611: 0xB797, + 9612: 0xD16E, + 9613: 0xD16F, + 9614: 0xD170, + 9615: 0xD171, + 9616: 0xD172, + 9617: 0xD173, + 9618: 0xD174, + 9619: 0xD175, + 9620: 0xD176, + 9621: 0xD177, + 9622: 0xD178, + 9623: 0xD179, + 9624: 0xD17A, + 9625: 0xD17B, + 9626: 0xD17D, + 9627: 0xD17E, + 9628: 0xD17F, + 9629: 0xD180, + 9630: 0xD181, + 9631: 0xD182, + 9632: 0xD183, + 9633: 0xD185, + 9634: 0xD186, + 9635: 0xD187, + 9636: 0xD189, + 9637: 0xD18A, + 9638: 0xD18B, + 9639: 0xD18C, + 9640: 0xD18D, + 9641: 0xD18E, + 9642: 0xD18F, + 9643: 0xD190, + 9644: 0xD191, + 9645: 0xD192, + 9646: 0xD193, + 9647: 0xD194, + 9648: 0xD195, + 9649: 0xD196, + 9650: 0xD197, + 9651: 0xD198, + 9652: 0xD199, + 9653: 0xD19A, + 9654: 0xD19B, + 9655: 0xD19C, + 9656: 0xD19D, + 9657: 0xD19E, + 9658: 0xD19F, + 9659: 0xD1A2, + 9660: 0xD1A3, + 9661: 0xD1A5, + 9662: 0xD1A6, + 9663: 0xD1A7, + 9664: 0xD1A9, + 9665: 0xD1AA, + 9666: 0xD1AB, + 9667: 0xD1AC, + 9668: 0xD1AD, + 9669: 0xD1AE, + 9670: 0xD1AF, + 9671: 0xD1B2, + 9672: 0xD1B4, + 9673: 0xD1B6, + 9674: 0xD1B7, + 9675: 0xD1B8, + 9676: 0xD1B9, + 9677: 0xD1BB, + 9678: 0xD1BD, + 9679: 0xD1BE, + 9680: 0xD1BF, + 9681: 0xD1C1, + 9682: 0xD1C2, + 9683: 0xD1C3, + 9684: 0xD1C4, + 9685: 0xD1C5, + 9686: 0xD1C6, + 9687: 0xD1C7, + 9688: 0xD1C8, + 9689: 0xD1C9, + 9690: 0xD1CA, + 9691: 0xD1CB, + 9692: 0xD1CC, + 9693: 0xD1CD, + 9694: 0xD1CE, + 9695: 0xD1CF, + 9696: 0xB798, + 9697: 0xB799, + 9698: 0xB79C, + 9699: 0xB7A0, + 9700: 0xB7A8, + 9701: 0xB7A9, + 9702: 0xB7AB, + 9703: 0xB7AC, + 9704: 0xB7AD, + 9705: 0xB7B4, + 9706: 0xB7B5, + 9707: 0xB7B8, + 9708: 0xB7C7, + 9709: 0xB7C9, + 9710: 0xB7EC, + 9711: 0xB7ED, + 9712: 0xB7F0, + 9713: 0xB7F4, + 9714: 0xB7FC, + 9715: 0xB7FD, + 9716: 0xB7FF, + 9717: 0xB800, + 9718: 0xB801, + 9719: 0xB807, + 9720: 0xB808, + 9721: 0xB809, + 9722: 0xB80C, + 9723: 0xB810, + 9724: 0xB818, + 9725: 0xB819, + 9726: 0xB81B, + 9727: 0xB81D, + 9728: 0xB824, + 9729: 0xB825, + 9730: 0xB828, + 9731: 0xB82C, + 9732: 0xB834, + 9733: 0xB835, + 9734: 0xB837, + 9735: 0xB838, + 9736: 0xB839, + 9737: 0xB840, + 9738: 0xB844, + 9739: 0xB851, + 9740: 0xB853, + 9741: 0xB85C, + 9742: 0xB85D, + 9743: 0xB860, + 9744: 0xB864, + 9745: 0xB86C, + 9746: 0xB86D, + 9747: 0xB86F, + 9748: 0xB871, + 9749: 0xB878, + 9750: 0xB87C, + 9751: 0xB88D, + 9752: 0xB8A8, + 9753: 0xB8B0, + 9754: 0xB8B4, + 9755: 0xB8B8, + 9756: 0xB8C0, + 9757: 0xB8C1, + 9758: 0xB8C3, + 9759: 0xB8C5, + 9760: 0xB8CC, + 9761: 0xB8D0, + 9762: 0xB8D4, + 9763: 0xB8DD, + 9764: 0xB8DF, + 9765: 0xB8E1, + 9766: 0xB8E8, + 9767: 0xB8E9, + 9768: 0xB8EC, + 9769: 0xB8F0, + 9770: 0xB8F8, + 9771: 0xB8F9, + 9772: 0xB8FB, + 9773: 0xB8FD, + 9774: 0xB904, + 9775: 0xB918, + 9776: 0xB920, + 9777: 0xB93C, + 9778: 0xB93D, + 9779: 0xB940, + 9780: 0xB944, + 9781: 0xB94C, + 9782: 0xB94F, + 9783: 0xB951, + 9784: 0xB958, + 9785: 0xB959, + 9786: 0xB95C, + 9787: 0xB960, + 9788: 0xB968, + 9789: 0xB969, + 9790: 0xD1D0, + 9791: 0xD1D1, + 9792: 0xD1D2, + 9793: 0xD1D3, + 9794: 0xD1D4, + 9795: 0xD1D5, + 9796: 0xD1D6, + 9797: 0xD1D7, + 9798: 0xD1D9, + 9799: 0xD1DA, + 9800: 0xD1DB, + 9801: 0xD1DC, + 9802: 0xD1DD, + 9803: 0xD1DE, + 9804: 0xD1DF, + 9805: 0xD1E0, + 9806: 0xD1E1, + 9807: 0xD1E2, + 9808: 0xD1E3, + 9809: 0xD1E4, + 9810: 0xD1E5, + 9811: 0xD1E6, + 9812: 0xD1E7, + 9813: 0xD1E8, + 9814: 0xD1E9, + 9815: 0xD1EA, + 9816: 0xD1EB, + 9817: 0xD1EC, + 9818: 0xD1ED, + 9819: 0xD1EE, + 9820: 0xD1EF, + 9821: 0xD1F0, + 9822: 0xD1F1, + 9823: 0xD1F2, + 9824: 0xD1F3, + 9825: 0xD1F5, + 9826: 0xD1F6, + 9827: 0xD1F7, + 9828: 0xD1F9, + 9829: 0xD1FA, + 9830: 0xD1FB, + 9831: 0xD1FC, + 9832: 0xD1FD, + 9833: 0xD1FE, + 9834: 0xD1FF, + 9835: 0xD200, + 9836: 0xD201, + 9837: 0xD202, + 9838: 0xD203, + 9839: 0xD204, + 9840: 0xD205, + 9841: 0xD206, + 9842: 0xD208, + 9843: 0xD20A, + 9844: 0xD20B, + 9845: 0xD20C, + 9846: 0xD20D, + 9847: 0xD20E, + 9848: 0xD20F, + 9849: 0xD211, + 9850: 0xD212, + 9851: 0xD213, + 9852: 0xD214, + 9853: 0xD215, + 9854: 0xD216, + 9855: 0xD217, + 9856: 0xD218, + 9857: 0xD219, + 9858: 0xD21A, + 9859: 0xD21B, + 9860: 0xD21C, + 9861: 0xD21D, + 9862: 0xD21E, + 9863: 0xD21F, + 9864: 0xD220, + 9865: 0xD221, + 9866: 0xD222, + 9867: 0xD223, + 9868: 0xD224, + 9869: 0xD225, + 9870: 0xD226, + 9871: 0xD227, + 9872: 0xD228, + 9873: 0xD229, + 9874: 0xB96B, + 9875: 0xB96D, + 9876: 0xB974, + 9877: 0xB975, + 9878: 0xB978, + 9879: 0xB97C, + 9880: 0xB984, + 9881: 0xB985, + 9882: 0xB987, + 9883: 0xB989, + 9884: 0xB98A, + 9885: 0xB98D, + 9886: 0xB98E, + 9887: 0xB9AC, + 9888: 0xB9AD, + 9889: 0xB9B0, + 9890: 0xB9B4, + 9891: 0xB9BC, + 9892: 0xB9BD, + 9893: 0xB9BF, + 9894: 0xB9C1, + 9895: 0xB9C8, + 9896: 0xB9C9, + 9897: 0xB9CC, + 9898: 0xB9CE, + 9899: 0xB9CF, + 9900: 0xB9D0, + 9901: 0xB9D1, + 9902: 0xB9D2, + 9903: 0xB9D8, + 9904: 0xB9D9, + 9905: 0xB9DB, + 9906: 0xB9DD, + 9907: 0xB9DE, + 9908: 0xB9E1, + 9909: 0xB9E3, + 9910: 0xB9E4, + 9911: 0xB9E5, + 9912: 0xB9E8, + 9913: 0xB9EC, + 9914: 0xB9F4, + 9915: 0xB9F5, + 9916: 0xB9F7, + 9917: 0xB9F8, + 9918: 0xB9F9, + 9919: 0xB9FA, + 9920: 0xBA00, + 9921: 0xBA01, + 9922: 0xBA08, + 9923: 0xBA15, + 9924: 0xBA38, + 9925: 0xBA39, + 9926: 0xBA3C, + 9927: 0xBA40, + 9928: 0xBA42, + 9929: 0xBA48, + 9930: 0xBA49, + 9931: 0xBA4B, + 9932: 0xBA4D, + 9933: 0xBA4E, + 9934: 0xBA53, + 9935: 0xBA54, + 9936: 0xBA55, + 9937: 0xBA58, + 9938: 0xBA5C, + 9939: 0xBA64, + 9940: 0xBA65, + 9941: 0xBA67, + 9942: 0xBA68, + 9943: 0xBA69, + 9944: 0xBA70, + 9945: 0xBA71, + 9946: 0xBA74, + 9947: 0xBA78, + 9948: 0xBA83, + 9949: 0xBA84, + 9950: 0xBA85, + 9951: 0xBA87, + 9952: 0xBA8C, + 9953: 0xBAA8, + 9954: 0xBAA9, + 9955: 0xBAAB, + 9956: 0xBAAC, + 9957: 0xBAB0, + 9958: 0xBAB2, + 9959: 0xBAB8, + 9960: 0xBAB9, + 9961: 0xBABB, + 9962: 0xBABD, + 9963: 0xBAC4, + 9964: 0xBAC8, + 9965: 0xBAD8, + 9966: 0xBAD9, + 9967: 0xBAFC, + 9968: 0xD22A, + 9969: 0xD22B, + 9970: 0xD22E, + 9971: 0xD22F, + 9972: 0xD231, + 9973: 0xD232, + 9974: 0xD233, + 9975: 0xD235, + 9976: 0xD236, + 9977: 0xD237, + 9978: 0xD238, + 9979: 0xD239, + 9980: 0xD23A, + 9981: 0xD23B, + 9982: 0xD23E, + 9983: 0xD240, + 9984: 0xD242, + 9985: 0xD243, + 9986: 0xD244, + 9987: 0xD245, + 9988: 0xD246, + 9989: 0xD247, + 9990: 0xD249, + 9991: 0xD24A, + 9992: 0xD24B, + 9993: 0xD24C, + 9994: 0xD24D, + 9995: 0xD24E, + 9996: 0xD24F, + 9997: 0xD250, + 9998: 0xD251, + 9999: 0xD252, + 10000: 0xD253, + 10001: 0xD254, + 10002: 0xD255, + 10003: 0xD256, + 10004: 0xD257, + 10005: 0xD258, + 10006: 0xD259, + 10007: 0xD25A, + 10008: 0xD25B, + 10009: 0xD25D, + 10010: 0xD25E, + 10011: 0xD25F, + 10012: 0xD260, + 10013: 0xD261, + 10014: 0xD262, + 10015: 0xD263, + 10016: 0xD265, + 10017: 0xD266, + 10018: 0xD267, + 10019: 0xD268, + 10020: 0xD269, + 10021: 0xD26A, + 10022: 0xD26B, + 10023: 0xD26C, + 10024: 0xD26D, + 10025: 0xD26E, + 10026: 0xD26F, + 10027: 0xD270, + 10028: 0xD271, + 10029: 0xD272, + 10030: 0xD273, + 10031: 0xD274, + 10032: 0xD275, + 10033: 0xD276, + 10034: 0xD277, + 10035: 0xD278, + 10036: 0xD279, + 10037: 0xD27A, + 10038: 0xD27B, + 10039: 0xD27C, + 10040: 0xD27D, + 10041: 0xD27E, + 10042: 0xD27F, + 10043: 0xD282, + 10044: 0xD283, + 10045: 0xD285, + 10046: 0xD286, + 10047: 0xD287, + 10048: 0xD289, + 10049: 0xD28A, + 10050: 0xD28B, + 10051: 0xD28C, + 10052: 0xBB00, + 10053: 0xBB04, + 10054: 0xBB0D, + 10055: 0xBB0F, + 10056: 0xBB11, + 10057: 0xBB18, + 10058: 0xBB1C, + 10059: 0xBB20, + 10060: 0xBB29, + 10061: 0xBB2B, + 10062: 0xBB34, + 10063: 0xBB35, + 10064: 0xBB36, + 10065: 0xBB38, + 10066: 0xBB3B, + 10067: 0xBB3C, + 10068: 0xBB3D, + 10069: 0xBB3E, + 10070: 0xBB44, + 10071: 0xBB45, + 10072: 0xBB47, + 10073: 0xBB49, + 10074: 0xBB4D, + 10075: 0xBB4F, + 10076: 0xBB50, + 10077: 0xBB54, + 10078: 0xBB58, + 10079: 0xBB61, + 10080: 0xBB63, + 10081: 0xBB6C, + 10082: 0xBB88, + 10083: 0xBB8C, + 10084: 0xBB90, + 10085: 0xBBA4, + 10086: 0xBBA8, + 10087: 0xBBAC, + 10088: 0xBBB4, + 10089: 0xBBB7, + 10090: 0xBBC0, + 10091: 0xBBC4, + 10092: 0xBBC8, + 10093: 0xBBD0, + 10094: 0xBBD3, + 10095: 0xBBF8, + 10096: 0xBBF9, + 10097: 0xBBFC, + 10098: 0xBBFF, + 10099: 0xBC00, + 10100: 0xBC02, + 10101: 0xBC08, + 10102: 0xBC09, + 10103: 0xBC0B, + 10104: 0xBC0C, + 10105: 0xBC0D, + 10106: 0xBC0F, + 10107: 0xBC11, + 10108: 0xBC14, + 10109: 0xBC15, + 10110: 0xBC16, + 10111: 0xBC17, + 10112: 0xBC18, + 10113: 0xBC1B, + 10114: 0xBC1C, + 10115: 0xBC1D, + 10116: 0xBC1E, + 10117: 0xBC1F, + 10118: 0xBC24, + 10119: 0xBC25, + 10120: 0xBC27, + 10121: 0xBC29, + 10122: 0xBC2D, + 10123: 0xBC30, + 10124: 0xBC31, + 10125: 0xBC34, + 10126: 0xBC38, + 10127: 0xBC40, + 10128: 0xBC41, + 10129: 0xBC43, + 10130: 0xBC44, + 10131: 0xBC45, + 10132: 0xBC49, + 10133: 0xBC4C, + 10134: 0xBC4D, + 10135: 0xBC50, + 10136: 0xBC5D, + 10137: 0xBC84, + 10138: 0xBC85, + 10139: 0xBC88, + 10140: 0xBC8B, + 10141: 0xBC8C, + 10142: 0xBC8E, + 10143: 0xBC94, + 10144: 0xBC95, + 10145: 0xBC97, + 10146: 0xD28D, + 10147: 0xD28E, + 10148: 0xD28F, + 10149: 0xD292, + 10150: 0xD293, + 10151: 0xD294, + 10152: 0xD296, + 10153: 0xD297, + 10154: 0xD298, + 10155: 0xD299, + 10156: 0xD29A, + 10157: 0xD29B, + 10158: 0xD29D, + 10159: 0xD29E, + 10160: 0xD29F, + 10161: 0xD2A1, + 10162: 0xD2A2, + 10163: 0xD2A3, + 10164: 0xD2A5, + 10165: 0xD2A6, + 10166: 0xD2A7, + 10167: 0xD2A8, + 10168: 0xD2A9, + 10169: 0xD2AA, + 10170: 0xD2AB, + 10171: 0xD2AD, + 10172: 0xD2AE, + 10173: 0xD2AF, + 10174: 0xD2B0, + 10175: 0xD2B2, + 10176: 0xD2B3, + 10177: 0xD2B4, + 10178: 0xD2B5, + 10179: 0xD2B6, + 10180: 0xD2B7, + 10181: 0xD2BA, + 10182: 0xD2BB, + 10183: 0xD2BD, + 10184: 0xD2BE, + 10185: 0xD2C1, + 10186: 0xD2C3, + 10187: 0xD2C4, + 10188: 0xD2C5, + 10189: 0xD2C6, + 10190: 0xD2C7, + 10191: 0xD2CA, + 10192: 0xD2CC, + 10193: 0xD2CD, + 10194: 0xD2CE, + 10195: 0xD2CF, + 10196: 0xD2D0, + 10197: 0xD2D1, + 10198: 0xD2D2, + 10199: 0xD2D3, + 10200: 0xD2D5, + 10201: 0xD2D6, + 10202: 0xD2D7, + 10203: 0xD2D9, + 10204: 0xD2DA, + 10205: 0xD2DB, + 10206: 0xD2DD, + 10207: 0xD2DE, + 10208: 0xD2DF, + 10209: 0xD2E0, + 10210: 0xD2E1, + 10211: 0xD2E2, + 10212: 0xD2E3, + 10213: 0xD2E6, + 10214: 0xD2E7, + 10215: 0xD2E8, + 10216: 0xD2E9, + 10217: 0xD2EA, + 10218: 0xD2EB, + 10219: 0xD2EC, + 10220: 0xD2ED, + 10221: 0xD2EE, + 10222: 0xD2EF, + 10223: 0xD2F2, + 10224: 0xD2F3, + 10225: 0xD2F5, + 10226: 0xD2F6, + 10227: 0xD2F7, + 10228: 0xD2F9, + 10229: 0xD2FA, + 10230: 0xBC99, + 10231: 0xBC9A, + 10232: 0xBCA0, + 10233: 0xBCA1, + 10234: 0xBCA4, + 10235: 0xBCA7, + 10236: 0xBCA8, + 10237: 0xBCB0, + 10238: 0xBCB1, + 10239: 0xBCB3, + 10240: 0xBCB4, + 10241: 0xBCB5, + 10242: 0xBCBC, + 10243: 0xBCBD, + 10244: 0xBCC0, + 10245: 0xBCC4, + 10246: 0xBCCD, + 10247: 0xBCCF, + 10248: 0xBCD0, + 10249: 0xBCD1, + 10250: 0xBCD5, + 10251: 0xBCD8, + 10252: 0xBCDC, + 10253: 0xBCF4, + 10254: 0xBCF5, + 10255: 0xBCF6, + 10256: 0xBCF8, + 10257: 0xBCFC, + 10258: 0xBD04, + 10259: 0xBD05, + 10260: 0xBD07, + 10261: 0xBD09, + 10262: 0xBD10, + 10263: 0xBD14, + 10264: 0xBD24, + 10265: 0xBD2C, + 10266: 0xBD40, + 10267: 0xBD48, + 10268: 0xBD49, + 10269: 0xBD4C, + 10270: 0xBD50, + 10271: 0xBD58, + 10272: 0xBD59, + 10273: 0xBD64, + 10274: 0xBD68, + 10275: 0xBD80, + 10276: 0xBD81, + 10277: 0xBD84, + 10278: 0xBD87, + 10279: 0xBD88, + 10280: 0xBD89, + 10281: 0xBD8A, + 10282: 0xBD90, + 10283: 0xBD91, + 10284: 0xBD93, + 10285: 0xBD95, + 10286: 0xBD99, + 10287: 0xBD9A, + 10288: 0xBD9C, + 10289: 0xBDA4, + 10290: 0xBDB0, + 10291: 0xBDB8, + 10292: 0xBDD4, + 10293: 0xBDD5, + 10294: 0xBDD8, + 10295: 0xBDDC, + 10296: 0xBDE9, + 10297: 0xBDF0, + 10298: 0xBDF4, + 10299: 0xBDF8, + 10300: 0xBE00, + 10301: 0xBE03, + 10302: 0xBE05, + 10303: 0xBE0C, + 10304: 0xBE0D, + 10305: 0xBE10, + 10306: 0xBE14, + 10307: 0xBE1C, + 10308: 0xBE1D, + 10309: 0xBE1F, + 10310: 0xBE44, + 10311: 0xBE45, + 10312: 0xBE48, + 10313: 0xBE4C, + 10314: 0xBE4E, + 10315: 0xBE54, + 10316: 0xBE55, + 10317: 0xBE57, + 10318: 0xBE59, + 10319: 0xBE5A, + 10320: 0xBE5B, + 10321: 0xBE60, + 10322: 0xBE61, + 10323: 0xBE64, + 10324: 0xD2FB, + 10325: 0xD2FC, + 10326: 0xD2FD, + 10327: 0xD2FE, + 10328: 0xD2FF, + 10329: 0xD302, + 10330: 0xD304, + 10331: 0xD306, + 10332: 0xD307, + 10333: 0xD308, + 10334: 0xD309, + 10335: 0xD30A, + 10336: 0xD30B, + 10337: 0xD30F, + 10338: 0xD311, + 10339: 0xD312, + 10340: 0xD313, + 10341: 0xD315, + 10342: 0xD317, + 10343: 0xD318, + 10344: 0xD319, + 10345: 0xD31A, + 10346: 0xD31B, + 10347: 0xD31E, + 10348: 0xD322, + 10349: 0xD323, + 10350: 0xD324, + 10351: 0xD326, + 10352: 0xD327, + 10353: 0xD32A, + 10354: 0xD32B, + 10355: 0xD32D, + 10356: 0xD32E, + 10357: 0xD32F, + 10358: 0xD331, + 10359: 0xD332, + 10360: 0xD333, + 10361: 0xD334, + 10362: 0xD335, + 10363: 0xD336, + 10364: 0xD337, + 10365: 0xD33A, + 10366: 0xD33E, + 10367: 0xD33F, + 10368: 0xD340, + 10369: 0xD341, + 10370: 0xD342, + 10371: 0xD343, + 10372: 0xD346, + 10373: 0xD347, + 10374: 0xD348, + 10375: 0xD349, + 10376: 0xD34A, + 10377: 0xD34B, + 10378: 0xD34C, + 10379: 0xD34D, + 10380: 0xD34E, + 10381: 0xD34F, + 10382: 0xD350, + 10383: 0xD351, + 10384: 0xD352, + 10385: 0xD353, + 10386: 0xD354, + 10387: 0xD355, + 10388: 0xD356, + 10389: 0xD357, + 10390: 0xD358, + 10391: 0xD359, + 10392: 0xD35A, + 10393: 0xD35B, + 10394: 0xD35C, + 10395: 0xD35D, + 10396: 0xD35E, + 10397: 0xD35F, + 10398: 0xD360, + 10399: 0xD361, + 10400: 0xD362, + 10401: 0xD363, + 10402: 0xD364, + 10403: 0xD365, + 10404: 0xD366, + 10405: 0xD367, + 10406: 0xD368, + 10407: 0xD369, + 10408: 0xBE68, + 10409: 0xBE6A, + 10410: 0xBE70, + 10411: 0xBE71, + 10412: 0xBE73, + 10413: 0xBE74, + 10414: 0xBE75, + 10415: 0xBE7B, + 10416: 0xBE7C, + 10417: 0xBE7D, + 10418: 0xBE80, + 10419: 0xBE84, + 10420: 0xBE8C, + 10421: 0xBE8D, + 10422: 0xBE8F, + 10423: 0xBE90, + 10424: 0xBE91, + 10425: 0xBE98, + 10426: 0xBE99, + 10427: 0xBEA8, + 10428: 0xBED0, + 10429: 0xBED1, + 10430: 0xBED4, + 10431: 0xBED7, + 10432: 0xBED8, + 10433: 0xBEE0, + 10434: 0xBEE3, + 10435: 0xBEE4, + 10436: 0xBEE5, + 10437: 0xBEEC, + 10438: 0xBF01, + 10439: 0xBF08, + 10440: 0xBF09, + 10441: 0xBF18, + 10442: 0xBF19, + 10443: 0xBF1B, + 10444: 0xBF1C, + 10445: 0xBF1D, + 10446: 0xBF40, + 10447: 0xBF41, + 10448: 0xBF44, + 10449: 0xBF48, + 10450: 0xBF50, + 10451: 0xBF51, + 10452: 0xBF55, + 10453: 0xBF94, + 10454: 0xBFB0, + 10455: 0xBFC5, + 10456: 0xBFCC, + 10457: 0xBFCD, + 10458: 0xBFD0, + 10459: 0xBFD4, + 10460: 0xBFDC, + 10461: 0xBFDF, + 10462: 0xBFE1, + 10463: 0xC03C, + 10464: 0xC051, + 10465: 0xC058, + 10466: 0xC05C, + 10467: 0xC060, + 10468: 0xC068, + 10469: 0xC069, + 10470: 0xC090, + 10471: 0xC091, + 10472: 0xC094, + 10473: 0xC098, + 10474: 0xC0A0, + 10475: 0xC0A1, + 10476: 0xC0A3, + 10477: 0xC0A5, + 10478: 0xC0AC, + 10479: 0xC0AD, + 10480: 0xC0AF, + 10481: 0xC0B0, + 10482: 0xC0B3, + 10483: 0xC0B4, + 10484: 0xC0B5, + 10485: 0xC0B6, + 10486: 0xC0BC, + 10487: 0xC0BD, + 10488: 0xC0BF, + 10489: 0xC0C0, + 10490: 0xC0C1, + 10491: 0xC0C5, + 10492: 0xC0C8, + 10493: 0xC0C9, + 10494: 0xC0CC, + 10495: 0xC0D0, + 10496: 0xC0D8, + 10497: 0xC0D9, + 10498: 0xC0DB, + 10499: 0xC0DC, + 10500: 0xC0DD, + 10501: 0xC0E4, + 10502: 0xD36A, + 10503: 0xD36B, + 10504: 0xD36C, + 10505: 0xD36D, + 10506: 0xD36E, + 10507: 0xD36F, + 10508: 0xD370, + 10509: 0xD371, + 10510: 0xD372, + 10511: 0xD373, + 10512: 0xD374, + 10513: 0xD375, + 10514: 0xD376, + 10515: 0xD377, + 10516: 0xD378, + 10517: 0xD379, + 10518: 0xD37A, + 10519: 0xD37B, + 10520: 0xD37E, + 10521: 0xD37F, + 10522: 0xD381, + 10523: 0xD382, + 10524: 0xD383, + 10525: 0xD385, + 10526: 0xD386, + 10527: 0xD387, + 10528: 0xD388, + 10529: 0xD389, + 10530: 0xD38A, + 10531: 0xD38B, + 10532: 0xD38E, + 10533: 0xD392, + 10534: 0xD393, + 10535: 0xD394, + 10536: 0xD395, + 10537: 0xD396, + 10538: 0xD397, + 10539: 0xD39A, + 10540: 0xD39B, + 10541: 0xD39D, + 10542: 0xD39E, + 10543: 0xD39F, + 10544: 0xD3A1, + 10545: 0xD3A2, + 10546: 0xD3A3, + 10547: 0xD3A4, + 10548: 0xD3A5, + 10549: 0xD3A6, + 10550: 0xD3A7, + 10551: 0xD3AA, + 10552: 0xD3AC, + 10553: 0xD3AE, + 10554: 0xD3AF, + 10555: 0xD3B0, + 10556: 0xD3B1, + 10557: 0xD3B2, + 10558: 0xD3B3, + 10559: 0xD3B5, + 10560: 0xD3B6, + 10561: 0xD3B7, + 10562: 0xD3B9, + 10563: 0xD3BA, + 10564: 0xD3BB, + 10565: 0xD3BD, + 10566: 0xD3BE, + 10567: 0xD3BF, + 10568: 0xD3C0, + 10569: 0xD3C1, + 10570: 0xD3C2, + 10571: 0xD3C3, + 10572: 0xD3C6, + 10573: 0xD3C7, + 10574: 0xD3CA, + 10575: 0xD3CB, + 10576: 0xD3CC, + 10577: 0xD3CD, + 10578: 0xD3CE, + 10579: 0xD3CF, + 10580: 0xD3D1, + 10581: 0xD3D2, + 10582: 0xD3D3, + 10583: 0xD3D4, + 10584: 0xD3D5, + 10585: 0xD3D6, + 10586: 0xC0E5, + 10587: 0xC0E8, + 10588: 0xC0EC, + 10589: 0xC0F4, + 10590: 0xC0F5, + 10591: 0xC0F7, + 10592: 0xC0F9, + 10593: 0xC100, + 10594: 0xC104, + 10595: 0xC108, + 10596: 0xC110, + 10597: 0xC115, + 10598: 0xC11C, + 10599: 0xC11D, + 10600: 0xC11E, + 10601: 0xC11F, + 10602: 0xC120, + 10603: 0xC123, + 10604: 0xC124, + 10605: 0xC126, + 10606: 0xC127, + 10607: 0xC12C, + 10608: 0xC12D, + 10609: 0xC12F, + 10610: 0xC130, + 10611: 0xC131, + 10612: 0xC136, + 10613: 0xC138, + 10614: 0xC139, + 10615: 0xC13C, + 10616: 0xC140, + 10617: 0xC148, + 10618: 0xC149, + 10619: 0xC14B, + 10620: 0xC14C, + 10621: 0xC14D, + 10622: 0xC154, + 10623: 0xC155, + 10624: 0xC158, + 10625: 0xC15C, + 10626: 0xC164, + 10627: 0xC165, + 10628: 0xC167, + 10629: 0xC168, + 10630: 0xC169, + 10631: 0xC170, + 10632: 0xC174, + 10633: 0xC178, + 10634: 0xC185, + 10635: 0xC18C, + 10636: 0xC18D, + 10637: 0xC18E, + 10638: 0xC190, + 10639: 0xC194, + 10640: 0xC196, + 10641: 0xC19C, + 10642: 0xC19D, + 10643: 0xC19F, + 10644: 0xC1A1, + 10645: 0xC1A5, + 10646: 0xC1A8, + 10647: 0xC1A9, + 10648: 0xC1AC, + 10649: 0xC1B0, + 10650: 0xC1BD, + 10651: 0xC1C4, + 10652: 0xC1C8, + 10653: 0xC1CC, + 10654: 0xC1D4, + 10655: 0xC1D7, + 10656: 0xC1D8, + 10657: 0xC1E0, + 10658: 0xC1E4, + 10659: 0xC1E8, + 10660: 0xC1F0, + 10661: 0xC1F1, + 10662: 0xC1F3, + 10663: 0xC1FC, + 10664: 0xC1FD, + 10665: 0xC200, + 10666: 0xC204, + 10667: 0xC20C, + 10668: 0xC20D, + 10669: 0xC20F, + 10670: 0xC211, + 10671: 0xC218, + 10672: 0xC219, + 10673: 0xC21C, + 10674: 0xC21F, + 10675: 0xC220, + 10676: 0xC228, + 10677: 0xC229, + 10678: 0xC22B, + 10679: 0xC22D, + 10680: 0xD3D7, + 10681: 0xD3D9, + 10682: 0xD3DA, + 10683: 0xD3DB, + 10684: 0xD3DC, + 10685: 0xD3DD, + 10686: 0xD3DE, + 10687: 0xD3DF, + 10688: 0xD3E0, + 10689: 0xD3E2, + 10690: 0xD3E4, + 10691: 0xD3E5, + 10692: 0xD3E6, + 10693: 0xD3E7, + 10694: 0xD3E8, + 10695: 0xD3E9, + 10696: 0xD3EA, + 10697: 0xD3EB, + 10698: 0xD3EE, + 10699: 0xD3EF, + 10700: 0xD3F1, + 10701: 0xD3F2, + 10702: 0xD3F3, + 10703: 0xD3F5, + 10704: 0xD3F6, + 10705: 0xD3F7, + 10706: 0xD3F8, + 10707: 0xD3F9, + 10708: 0xD3FA, + 10709: 0xD3FB, + 10710: 0xD3FE, + 10711: 0xD400, + 10712: 0xD402, + 10713: 0xD403, + 10714: 0xD404, + 10715: 0xD405, + 10716: 0xD406, + 10717: 0xD407, + 10718: 0xD409, + 10719: 0xD40A, + 10720: 0xD40B, + 10721: 0xD40C, + 10722: 0xD40D, + 10723: 0xD40E, + 10724: 0xD40F, + 10725: 0xD410, + 10726: 0xD411, + 10727: 0xD412, + 10728: 0xD413, + 10729: 0xD414, + 10730: 0xD415, + 10731: 0xD416, + 10732: 0xD417, + 10733: 0xD418, + 10734: 0xD419, + 10735: 0xD41A, + 10736: 0xD41B, + 10737: 0xD41C, + 10738: 0xD41E, + 10739: 0xD41F, + 10740: 0xD420, + 10741: 0xD421, + 10742: 0xD422, + 10743: 0xD423, + 10744: 0xD424, + 10745: 0xD425, + 10746: 0xD426, + 10747: 0xD427, + 10748: 0xD428, + 10749: 0xD429, + 10750: 0xD42A, + 10751: 0xD42B, + 10752: 0xD42C, + 10753: 0xD42D, + 10754: 0xD42E, + 10755: 0xD42F, + 10756: 0xD430, + 10757: 0xD431, + 10758: 0xD432, + 10759: 0xD433, + 10760: 0xD434, + 10761: 0xD435, + 10762: 0xD436, + 10763: 0xD437, + 10764: 0xC22F, + 10765: 0xC231, + 10766: 0xC232, + 10767: 0xC234, + 10768: 0xC248, + 10769: 0xC250, + 10770: 0xC251, + 10771: 0xC254, + 10772: 0xC258, + 10773: 0xC260, + 10774: 0xC265, + 10775: 0xC26C, + 10776: 0xC26D, + 10777: 0xC270, + 10778: 0xC274, + 10779: 0xC27C, + 10780: 0xC27D, + 10781: 0xC27F, + 10782: 0xC281, + 10783: 0xC288, + 10784: 0xC289, + 10785: 0xC290, + 10786: 0xC298, + 10787: 0xC29B, + 10788: 0xC29D, + 10789: 0xC2A4, + 10790: 0xC2A5, + 10791: 0xC2A8, + 10792: 0xC2AC, + 10793: 0xC2AD, + 10794: 0xC2B4, + 10795: 0xC2B5, + 10796: 0xC2B7, + 10797: 0xC2B9, + 10798: 0xC2DC, + 10799: 0xC2DD, + 10800: 0xC2E0, + 10801: 0xC2E3, + 10802: 0xC2E4, + 10803: 0xC2EB, + 10804: 0xC2EC, + 10805: 0xC2ED, + 10806: 0xC2EF, + 10807: 0xC2F1, + 10808: 0xC2F6, + 10809: 0xC2F8, + 10810: 0xC2F9, + 10811: 0xC2FB, + 10812: 0xC2FC, + 10813: 0xC300, + 10814: 0xC308, + 10815: 0xC309, + 10816: 0xC30C, + 10817: 0xC30D, + 10818: 0xC313, + 10819: 0xC314, + 10820: 0xC315, + 10821: 0xC318, + 10822: 0xC31C, + 10823: 0xC324, + 10824: 0xC325, + 10825: 0xC328, + 10826: 0xC329, + 10827: 0xC345, + 10828: 0xC368, + 10829: 0xC369, + 10830: 0xC36C, + 10831: 0xC370, + 10832: 0xC372, + 10833: 0xC378, + 10834: 0xC379, + 10835: 0xC37C, + 10836: 0xC37D, + 10837: 0xC384, + 10838: 0xC388, + 10839: 0xC38C, + 10840: 0xC3C0, + 10841: 0xC3D8, + 10842: 0xC3D9, + 10843: 0xC3DC, + 10844: 0xC3DF, + 10845: 0xC3E0, + 10846: 0xC3E2, + 10847: 0xC3E8, + 10848: 0xC3E9, + 10849: 0xC3ED, + 10850: 0xC3F4, + 10851: 0xC3F5, + 10852: 0xC3F8, + 10853: 0xC408, + 10854: 0xC410, + 10855: 0xC424, + 10856: 0xC42C, + 10857: 0xC430, + 10858: 0xD438, + 10859: 0xD439, + 10860: 0xD43A, + 10861: 0xD43B, + 10862: 0xD43C, + 10863: 0xD43D, + 10864: 0xD43E, + 10865: 0xD43F, + 10866: 0xD441, + 10867: 0xD442, + 10868: 0xD443, + 10869: 0xD445, + 10870: 0xD446, + 10871: 0xD447, + 10872: 0xD448, + 10873: 0xD449, + 10874: 0xD44A, + 10875: 0xD44B, + 10876: 0xD44C, + 10877: 0xD44D, + 10878: 0xD44E, + 10879: 0xD44F, + 10880: 0xD450, + 10881: 0xD451, + 10882: 0xD452, + 10883: 0xD453, + 10884: 0xD454, + 10885: 0xD455, + 10886: 0xD456, + 10887: 0xD457, + 10888: 0xD458, + 10889: 0xD459, + 10890: 0xD45A, + 10891: 0xD45B, + 10892: 0xD45D, + 10893: 0xD45E, + 10894: 0xD45F, + 10895: 0xD461, + 10896: 0xD462, + 10897: 0xD463, + 10898: 0xD465, + 10899: 0xD466, + 10900: 0xD467, + 10901: 0xD468, + 10902: 0xD469, + 10903: 0xD46A, + 10904: 0xD46B, + 10905: 0xD46C, + 10906: 0xD46E, + 10907: 0xD470, + 10908: 0xD471, + 10909: 0xD472, + 10910: 0xD473, + 10911: 0xD474, + 10912: 0xD475, + 10913: 0xD476, + 10914: 0xD477, + 10915: 0xD47A, + 10916: 0xD47B, + 10917: 0xD47D, + 10918: 0xD47E, + 10919: 0xD481, + 10920: 0xD483, + 10921: 0xD484, + 10922: 0xD485, + 10923: 0xD486, + 10924: 0xD487, + 10925: 0xD48A, + 10926: 0xD48C, + 10927: 0xD48E, + 10928: 0xD48F, + 10929: 0xD490, + 10930: 0xD491, + 10931: 0xD492, + 10932: 0xD493, + 10933: 0xD495, + 10934: 0xD496, + 10935: 0xD497, + 10936: 0xD498, + 10937: 0xD499, + 10938: 0xD49A, + 10939: 0xD49B, + 10940: 0xD49C, + 10941: 0xD49D, + 10942: 0xC434, + 10943: 0xC43C, + 10944: 0xC43D, + 10945: 0xC448, + 10946: 0xC464, + 10947: 0xC465, + 10948: 0xC468, + 10949: 0xC46C, + 10950: 0xC474, + 10951: 0xC475, + 10952: 0xC479, + 10953: 0xC480, + 10954: 0xC494, + 10955: 0xC49C, + 10956: 0xC4B8, + 10957: 0xC4BC, + 10958: 0xC4E9, + 10959: 0xC4F0, + 10960: 0xC4F1, + 10961: 0xC4F4, + 10962: 0xC4F8, + 10963: 0xC4FA, + 10964: 0xC4FF, + 10965: 0xC500, + 10966: 0xC501, + 10967: 0xC50C, + 10968: 0xC510, + 10969: 0xC514, + 10970: 0xC51C, + 10971: 0xC528, + 10972: 0xC529, + 10973: 0xC52C, + 10974: 0xC530, + 10975: 0xC538, + 10976: 0xC539, + 10977: 0xC53B, + 10978: 0xC53D, + 10979: 0xC544, + 10980: 0xC545, + 10981: 0xC548, + 10982: 0xC549, + 10983: 0xC54A, + 10984: 0xC54C, + 10985: 0xC54D, + 10986: 0xC54E, + 10987: 0xC553, + 10988: 0xC554, + 10989: 0xC555, + 10990: 0xC557, + 10991: 0xC558, + 10992: 0xC559, + 10993: 0xC55D, + 10994: 0xC55E, + 10995: 0xC560, + 10996: 0xC561, + 10997: 0xC564, + 10998: 0xC568, + 10999: 0xC570, + 11000: 0xC571, + 11001: 0xC573, + 11002: 0xC574, + 11003: 0xC575, + 11004: 0xC57C, + 11005: 0xC57D, + 11006: 0xC580, + 11007: 0xC584, + 11008: 0xC587, + 11009: 0xC58C, + 11010: 0xC58D, + 11011: 0xC58F, + 11012: 0xC591, + 11013: 0xC595, + 11014: 0xC597, + 11015: 0xC598, + 11016: 0xC59C, + 11017: 0xC5A0, + 11018: 0xC5A9, + 11019: 0xC5B4, + 11020: 0xC5B5, + 11021: 0xC5B8, + 11022: 0xC5B9, + 11023: 0xC5BB, + 11024: 0xC5BC, + 11025: 0xC5BD, + 11026: 0xC5BE, + 11027: 0xC5C4, + 11028: 0xC5C5, + 11029: 0xC5C6, + 11030: 0xC5C7, + 11031: 0xC5C8, + 11032: 0xC5C9, + 11033: 0xC5CA, + 11034: 0xC5CC, + 11035: 0xC5CE, + 11036: 0xD49E, + 11037: 0xD49F, + 11038: 0xD4A0, + 11039: 0xD4A1, + 11040: 0xD4A2, + 11041: 0xD4A3, + 11042: 0xD4A4, + 11043: 0xD4A5, + 11044: 0xD4A6, + 11045: 0xD4A7, + 11046: 0xD4A8, + 11047: 0xD4AA, + 11048: 0xD4AB, + 11049: 0xD4AC, + 11050: 0xD4AD, + 11051: 0xD4AE, + 11052: 0xD4AF, + 11053: 0xD4B0, + 11054: 0xD4B1, + 11055: 0xD4B2, + 11056: 0xD4B3, + 11057: 0xD4B4, + 11058: 0xD4B5, + 11059: 0xD4B6, + 11060: 0xD4B7, + 11061: 0xD4B8, + 11062: 0xD4B9, + 11063: 0xD4BA, + 11064: 0xD4BB, + 11065: 0xD4BC, + 11066: 0xD4BD, + 11067: 0xD4BE, + 11068: 0xD4BF, + 11069: 0xD4C0, + 11070: 0xD4C1, + 11071: 0xD4C2, + 11072: 0xD4C3, + 11073: 0xD4C4, + 11074: 0xD4C5, + 11075: 0xD4C6, + 11076: 0xD4C7, + 11077: 0xD4C8, + 11078: 0xD4C9, + 11079: 0xD4CA, + 11080: 0xD4CB, + 11081: 0xD4CD, + 11082: 0xD4CE, + 11083: 0xD4CF, + 11084: 0xD4D1, + 11085: 0xD4D2, + 11086: 0xD4D3, + 11087: 0xD4D5, + 11088: 0xD4D6, + 11089: 0xD4D7, + 11090: 0xD4D8, + 11091: 0xD4D9, + 11092: 0xD4DA, + 11093: 0xD4DB, + 11094: 0xD4DD, + 11095: 0xD4DE, + 11096: 0xD4E0, + 11097: 0xD4E1, + 11098: 0xD4E2, + 11099: 0xD4E3, + 11100: 0xD4E4, + 11101: 0xD4E5, + 11102: 0xD4E6, + 11103: 0xD4E7, + 11104: 0xD4E9, + 11105: 0xD4EA, + 11106: 0xD4EB, + 11107: 0xD4ED, + 11108: 0xD4EE, + 11109: 0xD4EF, + 11110: 0xD4F1, + 11111: 0xD4F2, + 11112: 0xD4F3, + 11113: 0xD4F4, + 11114: 0xD4F5, + 11115: 0xD4F6, + 11116: 0xD4F7, + 11117: 0xD4F9, + 11118: 0xD4FA, + 11119: 0xD4FC, + 11120: 0xC5D0, + 11121: 0xC5D1, + 11122: 0xC5D4, + 11123: 0xC5D8, + 11124: 0xC5E0, + 11125: 0xC5E1, + 11126: 0xC5E3, + 11127: 0xC5E5, + 11128: 0xC5EC, + 11129: 0xC5ED, + 11130: 0xC5EE, + 11131: 0xC5F0, + 11132: 0xC5F4, + 11133: 0xC5F6, + 11134: 0xC5F7, + 11135: 0xC5FC, + 11136: 0xC5FD, + 11137: 0xC5FE, + 11138: 0xC5FF, + 11139: 0xC600, + 11140: 0xC601, + 11141: 0xC605, + 11142: 0xC606, + 11143: 0xC607, + 11144: 0xC608, + 11145: 0xC60C, + 11146: 0xC610, + 11147: 0xC618, + 11148: 0xC619, + 11149: 0xC61B, + 11150: 0xC61C, + 11151: 0xC624, + 11152: 0xC625, + 11153: 0xC628, + 11154: 0xC62C, + 11155: 0xC62D, + 11156: 0xC62E, + 11157: 0xC630, + 11158: 0xC633, + 11159: 0xC634, + 11160: 0xC635, + 11161: 0xC637, + 11162: 0xC639, + 11163: 0xC63B, + 11164: 0xC640, + 11165: 0xC641, + 11166: 0xC644, + 11167: 0xC648, + 11168: 0xC650, + 11169: 0xC651, + 11170: 0xC653, + 11171: 0xC654, + 11172: 0xC655, + 11173: 0xC65C, + 11174: 0xC65D, + 11175: 0xC660, + 11176: 0xC66C, + 11177: 0xC66F, + 11178: 0xC671, + 11179: 0xC678, + 11180: 0xC679, + 11181: 0xC67C, + 11182: 0xC680, + 11183: 0xC688, + 11184: 0xC689, + 11185: 0xC68B, + 11186: 0xC68D, + 11187: 0xC694, + 11188: 0xC695, + 11189: 0xC698, + 11190: 0xC69C, + 11191: 0xC6A4, + 11192: 0xC6A5, + 11193: 0xC6A7, + 11194: 0xC6A9, + 11195: 0xC6B0, + 11196: 0xC6B1, + 11197: 0xC6B4, + 11198: 0xC6B8, + 11199: 0xC6B9, + 11200: 0xC6BA, + 11201: 0xC6C0, + 11202: 0xC6C1, + 11203: 0xC6C3, + 11204: 0xC6C5, + 11205: 0xC6CC, + 11206: 0xC6CD, + 11207: 0xC6D0, + 11208: 0xC6D4, + 11209: 0xC6DC, + 11210: 0xC6DD, + 11211: 0xC6E0, + 11212: 0xC6E1, + 11213: 0xC6E8, + 11214: 0xD4FE, + 11215: 0xD4FF, + 11216: 0xD500, + 11217: 0xD501, + 11218: 0xD502, + 11219: 0xD503, + 11220: 0xD505, + 11221: 0xD506, + 11222: 0xD507, + 11223: 0xD509, + 11224: 0xD50A, + 11225: 0xD50B, + 11226: 0xD50D, + 11227: 0xD50E, + 11228: 0xD50F, + 11229: 0xD510, + 11230: 0xD511, + 11231: 0xD512, + 11232: 0xD513, + 11233: 0xD516, + 11234: 0xD518, + 11235: 0xD519, + 11236: 0xD51A, + 11237: 0xD51B, + 11238: 0xD51C, + 11239: 0xD51D, + 11240: 0xD51E, + 11241: 0xD51F, + 11242: 0xD520, + 11243: 0xD521, + 11244: 0xD522, + 11245: 0xD523, + 11246: 0xD524, + 11247: 0xD525, + 11248: 0xD526, + 11249: 0xD527, + 11250: 0xD528, + 11251: 0xD529, + 11252: 0xD52A, + 11253: 0xD52B, + 11254: 0xD52C, + 11255: 0xD52D, + 11256: 0xD52E, + 11257: 0xD52F, + 11258: 0xD530, + 11259: 0xD531, + 11260: 0xD532, + 11261: 0xD533, + 11262: 0xD534, + 11263: 0xD535, + 11264: 0xD536, + 11265: 0xD537, + 11266: 0xD538, + 11267: 0xD539, + 11268: 0xD53A, + 11269: 0xD53B, + 11270: 0xD53E, + 11271: 0xD53F, + 11272: 0xD541, + 11273: 0xD542, + 11274: 0xD543, + 11275: 0xD545, + 11276: 0xD546, + 11277: 0xD547, + 11278: 0xD548, + 11279: 0xD549, + 11280: 0xD54A, + 11281: 0xD54B, + 11282: 0xD54E, + 11283: 0xD550, + 11284: 0xD552, + 11285: 0xD553, + 11286: 0xD554, + 11287: 0xD555, + 11288: 0xD556, + 11289: 0xD557, + 11290: 0xD55A, + 11291: 0xD55B, + 11292: 0xD55D, + 11293: 0xD55E, + 11294: 0xD55F, + 11295: 0xD561, + 11296: 0xD562, + 11297: 0xD563, + 11298: 0xC6E9, + 11299: 0xC6EC, + 11300: 0xC6F0, + 11301: 0xC6F8, + 11302: 0xC6F9, + 11303: 0xC6FD, + 11304: 0xC704, + 11305: 0xC705, + 11306: 0xC708, + 11307: 0xC70C, + 11308: 0xC714, + 11309: 0xC715, + 11310: 0xC717, + 11311: 0xC719, + 11312: 0xC720, + 11313: 0xC721, + 11314: 0xC724, + 11315: 0xC728, + 11316: 0xC730, + 11317: 0xC731, + 11318: 0xC733, + 11319: 0xC735, + 11320: 0xC737, + 11321: 0xC73C, + 11322: 0xC73D, + 11323: 0xC740, + 11324: 0xC744, + 11325: 0xC74A, + 11326: 0xC74C, + 11327: 0xC74D, + 11328: 0xC74F, + 11329: 0xC751, + 11330: 0xC752, + 11331: 0xC753, + 11332: 0xC754, + 11333: 0xC755, + 11334: 0xC756, + 11335: 0xC757, + 11336: 0xC758, + 11337: 0xC75C, + 11338: 0xC760, + 11339: 0xC768, + 11340: 0xC76B, + 11341: 0xC774, + 11342: 0xC775, + 11343: 0xC778, + 11344: 0xC77C, + 11345: 0xC77D, + 11346: 0xC77E, + 11347: 0xC783, + 11348: 0xC784, + 11349: 0xC785, + 11350: 0xC787, + 11351: 0xC788, + 11352: 0xC789, + 11353: 0xC78A, + 11354: 0xC78E, + 11355: 0xC790, + 11356: 0xC791, + 11357: 0xC794, + 11358: 0xC796, + 11359: 0xC797, + 11360: 0xC798, + 11361: 0xC79A, + 11362: 0xC7A0, + 11363: 0xC7A1, + 11364: 0xC7A3, + 11365: 0xC7A4, + 11366: 0xC7A5, + 11367: 0xC7A6, + 11368: 0xC7AC, + 11369: 0xC7AD, + 11370: 0xC7B0, + 11371: 0xC7B4, + 11372: 0xC7BC, + 11373: 0xC7BD, + 11374: 0xC7BF, + 11375: 0xC7C0, + 11376: 0xC7C1, + 11377: 0xC7C8, + 11378: 0xC7C9, + 11379: 0xC7CC, + 11380: 0xC7CE, + 11381: 0xC7D0, + 11382: 0xC7D8, + 11383: 0xC7DD, + 11384: 0xC7E4, + 11385: 0xC7E8, + 11386: 0xC7EC, + 11387: 0xC800, + 11388: 0xC801, + 11389: 0xC804, + 11390: 0xC808, + 11391: 0xC80A, + 11392: 0xD564, + 11393: 0xD566, + 11394: 0xD567, + 11395: 0xD56A, + 11396: 0xD56C, + 11397: 0xD56E, + 11398: 0xD56F, + 11399: 0xD570, + 11400: 0xD571, + 11401: 0xD572, + 11402: 0xD573, + 11403: 0xD576, + 11404: 0xD577, + 11405: 0xD579, + 11406: 0xD57A, + 11407: 0xD57B, + 11408: 0xD57D, + 11409: 0xD57E, + 11410: 0xD57F, + 11411: 0xD580, + 11412: 0xD581, + 11413: 0xD582, + 11414: 0xD583, + 11415: 0xD586, + 11416: 0xD58A, + 11417: 0xD58B, + 11418: 0xD58C, + 11419: 0xD58D, + 11420: 0xD58E, + 11421: 0xD58F, + 11422: 0xD591, + 11423: 0xD592, + 11424: 0xD593, + 11425: 0xD594, + 11426: 0xD595, + 11427: 0xD596, + 11428: 0xD597, + 11429: 0xD598, + 11430: 0xD599, + 11431: 0xD59A, + 11432: 0xD59B, + 11433: 0xD59C, + 11434: 0xD59D, + 11435: 0xD59E, + 11436: 0xD59F, + 11437: 0xD5A0, + 11438: 0xD5A1, + 11439: 0xD5A2, + 11440: 0xD5A3, + 11441: 0xD5A4, + 11442: 0xD5A6, + 11443: 0xD5A7, + 11444: 0xD5A8, + 11445: 0xD5A9, + 11446: 0xD5AA, + 11447: 0xD5AB, + 11448: 0xD5AC, + 11449: 0xD5AD, + 11450: 0xD5AE, + 11451: 0xD5AF, + 11452: 0xD5B0, + 11453: 0xD5B1, + 11454: 0xD5B2, + 11455: 0xD5B3, + 11456: 0xD5B4, + 11457: 0xD5B5, + 11458: 0xD5B6, + 11459: 0xD5B7, + 11460: 0xD5B8, + 11461: 0xD5B9, + 11462: 0xD5BA, + 11463: 0xD5BB, + 11464: 0xD5BC, + 11465: 0xD5BD, + 11466: 0xD5BE, + 11467: 0xD5BF, + 11468: 0xD5C0, + 11469: 0xD5C1, + 11470: 0xD5C2, + 11471: 0xD5C3, + 11472: 0xD5C4, + 11473: 0xD5C5, + 11474: 0xD5C6, + 11475: 0xD5C7, + 11476: 0xC810, + 11477: 0xC811, + 11478: 0xC813, + 11479: 0xC815, + 11480: 0xC816, + 11481: 0xC81C, + 11482: 0xC81D, + 11483: 0xC820, + 11484: 0xC824, + 11485: 0xC82C, + 11486: 0xC82D, + 11487: 0xC82F, + 11488: 0xC831, + 11489: 0xC838, + 11490: 0xC83C, + 11491: 0xC840, + 11492: 0xC848, + 11493: 0xC849, + 11494: 0xC84C, + 11495: 0xC84D, + 11496: 0xC854, + 11497: 0xC870, + 11498: 0xC871, + 11499: 0xC874, + 11500: 0xC878, + 11501: 0xC87A, + 11502: 0xC880, + 11503: 0xC881, + 11504: 0xC883, + 11505: 0xC885, + 11506: 0xC886, + 11507: 0xC887, + 11508: 0xC88B, + 11509: 0xC88C, + 11510: 0xC88D, + 11511: 0xC894, + 11512: 0xC89D, + 11513: 0xC89F, + 11514: 0xC8A1, + 11515: 0xC8A8, + 11516: 0xC8BC, + 11517: 0xC8BD, + 11518: 0xC8C4, + 11519: 0xC8C8, + 11520: 0xC8CC, + 11521: 0xC8D4, + 11522: 0xC8D5, + 11523: 0xC8D7, + 11524: 0xC8D9, + 11525: 0xC8E0, + 11526: 0xC8E1, + 11527: 0xC8E4, + 11528: 0xC8F5, + 11529: 0xC8FC, + 11530: 0xC8FD, + 11531: 0xC900, + 11532: 0xC904, + 11533: 0xC905, + 11534: 0xC906, + 11535: 0xC90C, + 11536: 0xC90D, + 11537: 0xC90F, + 11538: 0xC911, + 11539: 0xC918, + 11540: 0xC92C, + 11541: 0xC934, + 11542: 0xC950, + 11543: 0xC951, + 11544: 0xC954, + 11545: 0xC958, + 11546: 0xC960, + 11547: 0xC961, + 11548: 0xC963, + 11549: 0xC96C, + 11550: 0xC970, + 11551: 0xC974, + 11552: 0xC97C, + 11553: 0xC988, + 11554: 0xC989, + 11555: 0xC98C, + 11556: 0xC990, + 11557: 0xC998, + 11558: 0xC999, + 11559: 0xC99B, + 11560: 0xC99D, + 11561: 0xC9C0, + 11562: 0xC9C1, + 11563: 0xC9C4, + 11564: 0xC9C7, + 11565: 0xC9C8, + 11566: 0xC9CA, + 11567: 0xC9D0, + 11568: 0xC9D1, + 11569: 0xC9D3, + 11570: 0xD5CA, + 11571: 0xD5CB, + 11572: 0xD5CD, + 11573: 0xD5CE, + 11574: 0xD5CF, + 11575: 0xD5D1, + 11576: 0xD5D3, + 11577: 0xD5D4, + 11578: 0xD5D5, + 11579: 0xD5D6, + 11580: 0xD5D7, + 11581: 0xD5DA, + 11582: 0xD5DC, + 11583: 0xD5DE, + 11584: 0xD5DF, + 11585: 0xD5E0, + 11586: 0xD5E1, + 11587: 0xD5E2, + 11588: 0xD5E3, + 11589: 0xD5E6, + 11590: 0xD5E7, + 11591: 0xD5E9, + 11592: 0xD5EA, + 11593: 0xD5EB, + 11594: 0xD5ED, + 11595: 0xD5EE, + 11596: 0xD5EF, + 11597: 0xD5F0, + 11598: 0xD5F1, + 11599: 0xD5F2, + 11600: 0xD5F3, + 11601: 0xD5F6, + 11602: 0xD5F8, + 11603: 0xD5FA, + 11604: 0xD5FB, + 11605: 0xD5FC, + 11606: 0xD5FD, + 11607: 0xD5FE, + 11608: 0xD5FF, + 11609: 0xD602, + 11610: 0xD603, + 11611: 0xD605, + 11612: 0xD606, + 11613: 0xD607, + 11614: 0xD609, + 11615: 0xD60A, + 11616: 0xD60B, + 11617: 0xD60C, + 11618: 0xD60D, + 11619: 0xD60E, + 11620: 0xD60F, + 11621: 0xD612, + 11622: 0xD616, + 11623: 0xD617, + 11624: 0xD618, + 11625: 0xD619, + 11626: 0xD61A, + 11627: 0xD61B, + 11628: 0xD61D, + 11629: 0xD61E, + 11630: 0xD61F, + 11631: 0xD621, + 11632: 0xD622, + 11633: 0xD623, + 11634: 0xD625, + 11635: 0xD626, + 11636: 0xD627, + 11637: 0xD628, + 11638: 0xD629, + 11639: 0xD62A, + 11640: 0xD62B, + 11641: 0xD62C, + 11642: 0xD62E, + 11643: 0xD62F, + 11644: 0xD630, + 11645: 0xD631, + 11646: 0xD632, + 11647: 0xD633, + 11648: 0xD634, + 11649: 0xD635, + 11650: 0xD636, + 11651: 0xD637, + 11652: 0xD63A, + 11653: 0xD63B, + 11654: 0xC9D5, + 11655: 0xC9D6, + 11656: 0xC9D9, + 11657: 0xC9DA, + 11658: 0xC9DC, + 11659: 0xC9DD, + 11660: 0xC9E0, + 11661: 0xC9E2, + 11662: 0xC9E4, + 11663: 0xC9E7, + 11664: 0xC9EC, + 11665: 0xC9ED, + 11666: 0xC9EF, + 11667: 0xC9F0, + 11668: 0xC9F1, + 11669: 0xC9F8, + 11670: 0xC9F9, + 11671: 0xC9FC, + 11672: 0xCA00, + 11673: 0xCA08, + 11674: 0xCA09, + 11675: 0xCA0B, + 11676: 0xCA0C, + 11677: 0xCA0D, + 11678: 0xCA14, + 11679: 0xCA18, + 11680: 0xCA29, + 11681: 0xCA4C, + 11682: 0xCA4D, + 11683: 0xCA50, + 11684: 0xCA54, + 11685: 0xCA5C, + 11686: 0xCA5D, + 11687: 0xCA5F, + 11688: 0xCA60, + 11689: 0xCA61, + 11690: 0xCA68, + 11691: 0xCA7D, + 11692: 0xCA84, + 11693: 0xCA98, + 11694: 0xCABC, + 11695: 0xCABD, + 11696: 0xCAC0, + 11697: 0xCAC4, + 11698: 0xCACC, + 11699: 0xCACD, + 11700: 0xCACF, + 11701: 0xCAD1, + 11702: 0xCAD3, + 11703: 0xCAD8, + 11704: 0xCAD9, + 11705: 0xCAE0, + 11706: 0xCAEC, + 11707: 0xCAF4, + 11708: 0xCB08, + 11709: 0xCB10, + 11710: 0xCB14, + 11711: 0xCB18, + 11712: 0xCB20, + 11713: 0xCB21, + 11714: 0xCB41, + 11715: 0xCB48, + 11716: 0xCB49, + 11717: 0xCB4C, + 11718: 0xCB50, + 11719: 0xCB58, + 11720: 0xCB59, + 11721: 0xCB5D, + 11722: 0xCB64, + 11723: 0xCB78, + 11724: 0xCB79, + 11725: 0xCB9C, + 11726: 0xCBB8, + 11727: 0xCBD4, + 11728: 0xCBE4, + 11729: 0xCBE7, + 11730: 0xCBE9, + 11731: 0xCC0C, + 11732: 0xCC0D, + 11733: 0xCC10, + 11734: 0xCC14, + 11735: 0xCC1C, + 11736: 0xCC1D, + 11737: 0xCC21, + 11738: 0xCC22, + 11739: 0xCC27, + 11740: 0xCC28, + 11741: 0xCC29, + 11742: 0xCC2C, + 11743: 0xCC2E, + 11744: 0xCC30, + 11745: 0xCC38, + 11746: 0xCC39, + 11747: 0xCC3B, + 11748: 0xD63D, + 11749: 0xD63E, + 11750: 0xD63F, + 11751: 0xD641, + 11752: 0xD642, + 11753: 0xD643, + 11754: 0xD644, + 11755: 0xD646, + 11756: 0xD647, + 11757: 0xD64A, + 11758: 0xD64C, + 11759: 0xD64E, + 11760: 0xD64F, + 11761: 0xD650, + 11762: 0xD652, + 11763: 0xD653, + 11764: 0xD656, + 11765: 0xD657, + 11766: 0xD659, + 11767: 0xD65A, + 11768: 0xD65B, + 11769: 0xD65D, + 11770: 0xD65E, + 11771: 0xD65F, + 11772: 0xD660, + 11773: 0xD661, + 11774: 0xD662, + 11775: 0xD663, + 11776: 0xD664, + 11777: 0xD665, + 11778: 0xD666, + 11779: 0xD668, + 11780: 0xD66A, + 11781: 0xD66B, + 11782: 0xD66C, + 11783: 0xD66D, + 11784: 0xD66E, + 11785: 0xD66F, + 11786: 0xD672, + 11787: 0xD673, + 11788: 0xD675, + 11789: 0xD676, + 11790: 0xD677, + 11791: 0xD678, + 11792: 0xD679, + 11793: 0xD67A, + 11794: 0xD67B, + 11795: 0xD67C, + 11796: 0xD67D, + 11797: 0xD67E, + 11798: 0xD67F, + 11799: 0xD680, + 11800: 0xD681, + 11801: 0xD682, + 11802: 0xD684, + 11803: 0xD686, + 11804: 0xD687, + 11805: 0xD688, + 11806: 0xD689, + 11807: 0xD68A, + 11808: 0xD68B, + 11809: 0xD68E, + 11810: 0xD68F, + 11811: 0xD691, + 11812: 0xD692, + 11813: 0xD693, + 11814: 0xD695, + 11815: 0xD696, + 11816: 0xD697, + 11817: 0xD698, + 11818: 0xD699, + 11819: 0xD69A, + 11820: 0xD69B, + 11821: 0xD69C, + 11822: 0xD69E, + 11823: 0xD6A0, + 11824: 0xD6A2, + 11825: 0xD6A3, + 11826: 0xD6A4, + 11827: 0xD6A5, + 11828: 0xD6A6, + 11829: 0xD6A7, + 11830: 0xD6A9, + 11831: 0xD6AA, + 11832: 0xCC3C, + 11833: 0xCC3D, + 11834: 0xCC3E, + 11835: 0xCC44, + 11836: 0xCC45, + 11837: 0xCC48, + 11838: 0xCC4C, + 11839: 0xCC54, + 11840: 0xCC55, + 11841: 0xCC57, + 11842: 0xCC58, + 11843: 0xCC59, + 11844: 0xCC60, + 11845: 0xCC64, + 11846: 0xCC66, + 11847: 0xCC68, + 11848: 0xCC70, + 11849: 0xCC75, + 11850: 0xCC98, + 11851: 0xCC99, + 11852: 0xCC9C, + 11853: 0xCCA0, + 11854: 0xCCA8, + 11855: 0xCCA9, + 11856: 0xCCAB, + 11857: 0xCCAC, + 11858: 0xCCAD, + 11859: 0xCCB4, + 11860: 0xCCB5, + 11861: 0xCCB8, + 11862: 0xCCBC, + 11863: 0xCCC4, + 11864: 0xCCC5, + 11865: 0xCCC7, + 11866: 0xCCC9, + 11867: 0xCCD0, + 11868: 0xCCD4, + 11869: 0xCCE4, + 11870: 0xCCEC, + 11871: 0xCCF0, + 11872: 0xCD01, + 11873: 0xCD08, + 11874: 0xCD09, + 11875: 0xCD0C, + 11876: 0xCD10, + 11877: 0xCD18, + 11878: 0xCD19, + 11879: 0xCD1B, + 11880: 0xCD1D, + 11881: 0xCD24, + 11882: 0xCD28, + 11883: 0xCD2C, + 11884: 0xCD39, + 11885: 0xCD5C, + 11886: 0xCD60, + 11887: 0xCD64, + 11888: 0xCD6C, + 11889: 0xCD6D, + 11890: 0xCD6F, + 11891: 0xCD71, + 11892: 0xCD78, + 11893: 0xCD88, + 11894: 0xCD94, + 11895: 0xCD95, + 11896: 0xCD98, + 11897: 0xCD9C, + 11898: 0xCDA4, + 11899: 0xCDA5, + 11900: 0xCDA7, + 11901: 0xCDA9, + 11902: 0xCDB0, + 11903: 0xCDC4, + 11904: 0xCDCC, + 11905: 0xCDD0, + 11906: 0xCDE8, + 11907: 0xCDEC, + 11908: 0xCDF0, + 11909: 0xCDF8, + 11910: 0xCDF9, + 11911: 0xCDFB, + 11912: 0xCDFD, + 11913: 0xCE04, + 11914: 0xCE08, + 11915: 0xCE0C, + 11916: 0xCE14, + 11917: 0xCE19, + 11918: 0xCE20, + 11919: 0xCE21, + 11920: 0xCE24, + 11921: 0xCE28, + 11922: 0xCE30, + 11923: 0xCE31, + 11924: 0xCE33, + 11925: 0xCE35, + 11926: 0xD6AB, + 11927: 0xD6AD, + 11928: 0xD6AE, + 11929: 0xD6AF, + 11930: 0xD6B1, + 11931: 0xD6B2, + 11932: 0xD6B3, + 11933: 0xD6B4, + 11934: 0xD6B5, + 11935: 0xD6B6, + 11936: 0xD6B7, + 11937: 0xD6B8, + 11938: 0xD6BA, + 11939: 0xD6BC, + 11940: 0xD6BD, + 11941: 0xD6BE, + 11942: 0xD6BF, + 11943: 0xD6C0, + 11944: 0xD6C1, + 11945: 0xD6C2, + 11946: 0xD6C3, + 11947: 0xD6C6, + 11948: 0xD6C7, + 11949: 0xD6C9, + 11950: 0xD6CA, + 11951: 0xD6CB, + 11952: 0xD6CD, + 11953: 0xD6CE, + 11954: 0xD6CF, + 11955: 0xD6D0, + 11956: 0xD6D2, + 11957: 0xD6D3, + 11958: 0xD6D5, + 11959: 0xD6D6, + 11960: 0xD6D8, + 11961: 0xD6DA, + 11962: 0xD6DB, + 11963: 0xD6DC, + 11964: 0xD6DD, + 11965: 0xD6DE, + 11966: 0xD6DF, + 11967: 0xD6E1, + 11968: 0xD6E2, + 11969: 0xD6E3, + 11970: 0xD6E5, + 11971: 0xD6E6, + 11972: 0xD6E7, + 11973: 0xD6E9, + 11974: 0xD6EA, + 11975: 0xD6EB, + 11976: 0xD6EC, + 11977: 0xD6ED, + 11978: 0xD6EE, + 11979: 0xD6EF, + 11980: 0xD6F1, + 11981: 0xD6F2, + 11982: 0xD6F3, + 11983: 0xD6F4, + 11984: 0xD6F6, + 11985: 0xD6F7, + 11986: 0xD6F8, + 11987: 0xD6F9, + 11988: 0xD6FA, + 11989: 0xD6FB, + 11990: 0xD6FE, + 11991: 0xD6FF, + 11992: 0xD701, + 11993: 0xD702, + 11994: 0xD703, + 11995: 0xD705, + 11996: 0xD706, + 11997: 0xD707, + 11998: 0xD708, + 11999: 0xD709, + 12000: 0xD70A, + 12001: 0xD70B, + 12002: 0xD70C, + 12003: 0xD70D, + 12004: 0xD70E, + 12005: 0xD70F, + 12006: 0xD710, + 12007: 0xD712, + 12008: 0xD713, + 12009: 0xD714, + 12010: 0xCE58, + 12011: 0xCE59, + 12012: 0xCE5C, + 12013: 0xCE5F, + 12014: 0xCE60, + 12015: 0xCE61, + 12016: 0xCE68, + 12017: 0xCE69, + 12018: 0xCE6B, + 12019: 0xCE6D, + 12020: 0xCE74, + 12021: 0xCE75, + 12022: 0xCE78, + 12023: 0xCE7C, + 12024: 0xCE84, + 12025: 0xCE85, + 12026: 0xCE87, + 12027: 0xCE89, + 12028: 0xCE90, + 12029: 0xCE91, + 12030: 0xCE94, + 12031: 0xCE98, + 12032: 0xCEA0, + 12033: 0xCEA1, + 12034: 0xCEA3, + 12035: 0xCEA4, + 12036: 0xCEA5, + 12037: 0xCEAC, + 12038: 0xCEAD, + 12039: 0xCEC1, + 12040: 0xCEE4, + 12041: 0xCEE5, + 12042: 0xCEE8, + 12043: 0xCEEB, + 12044: 0xCEEC, + 12045: 0xCEF4, + 12046: 0xCEF5, + 12047: 0xCEF7, + 12048: 0xCEF8, + 12049: 0xCEF9, + 12050: 0xCF00, + 12051: 0xCF01, + 12052: 0xCF04, + 12053: 0xCF08, + 12054: 0xCF10, + 12055: 0xCF11, + 12056: 0xCF13, + 12057: 0xCF15, + 12058: 0xCF1C, + 12059: 0xCF20, + 12060: 0xCF24, + 12061: 0xCF2C, + 12062: 0xCF2D, + 12063: 0xCF2F, + 12064: 0xCF30, + 12065: 0xCF31, + 12066: 0xCF38, + 12067: 0xCF54, + 12068: 0xCF55, + 12069: 0xCF58, + 12070: 0xCF5C, + 12071: 0xCF64, + 12072: 0xCF65, + 12073: 0xCF67, + 12074: 0xCF69, + 12075: 0xCF70, + 12076: 0xCF71, + 12077: 0xCF74, + 12078: 0xCF78, + 12079: 0xCF80, + 12080: 0xCF85, + 12081: 0xCF8C, + 12082: 0xCFA1, + 12083: 0xCFA8, + 12084: 0xCFB0, + 12085: 0xCFC4, + 12086: 0xCFE0, + 12087: 0xCFE1, + 12088: 0xCFE4, + 12089: 0xCFE8, + 12090: 0xCFF0, + 12091: 0xCFF1, + 12092: 0xCFF3, + 12093: 0xCFF5, + 12094: 0xCFFC, + 12095: 0xD000, + 12096: 0xD004, + 12097: 0xD011, + 12098: 0xD018, + 12099: 0xD02D, + 12100: 0xD034, + 12101: 0xD035, + 12102: 0xD038, + 12103: 0xD03C, + 12104: 0xD715, + 12105: 0xD716, + 12106: 0xD717, + 12107: 0xD71A, + 12108: 0xD71B, + 12109: 0xD71D, + 12110: 0xD71E, + 12111: 0xD71F, + 12112: 0xD721, + 12113: 0xD722, + 12114: 0xD723, + 12115: 0xD724, + 12116: 0xD725, + 12117: 0xD726, + 12118: 0xD727, + 12119: 0xD72A, + 12120: 0xD72C, + 12121: 0xD72E, + 12122: 0xD72F, + 12123: 0xD730, + 12124: 0xD731, + 12125: 0xD732, + 12126: 0xD733, + 12127: 0xD736, + 12128: 0xD737, + 12129: 0xD739, + 12130: 0xD73A, + 12131: 0xD73B, + 12132: 0xD73D, + 12133: 0xD73E, + 12134: 0xD73F, + 12135: 0xD740, + 12136: 0xD741, + 12137: 0xD742, + 12138: 0xD743, + 12139: 0xD745, + 12140: 0xD746, + 12141: 0xD748, + 12142: 0xD74A, + 12143: 0xD74B, + 12144: 0xD74C, + 12145: 0xD74D, + 12146: 0xD74E, + 12147: 0xD74F, + 12148: 0xD752, + 12149: 0xD753, + 12150: 0xD755, + 12151: 0xD75A, + 12152: 0xD75B, + 12153: 0xD75C, + 12154: 0xD75D, + 12155: 0xD75E, + 12156: 0xD75F, + 12157: 0xD762, + 12158: 0xD764, + 12159: 0xD766, + 12160: 0xD767, + 12161: 0xD768, + 12162: 0xD76A, + 12163: 0xD76B, + 12164: 0xD76D, + 12165: 0xD76E, + 12166: 0xD76F, + 12167: 0xD771, + 12168: 0xD772, + 12169: 0xD773, + 12170: 0xD775, + 12171: 0xD776, + 12172: 0xD777, + 12173: 0xD778, + 12174: 0xD779, + 12175: 0xD77A, + 12176: 0xD77B, + 12177: 0xD77E, + 12178: 0xD77F, + 12179: 0xD780, + 12180: 0xD782, + 12181: 0xD783, + 12182: 0xD784, + 12183: 0xD785, + 12184: 0xD786, + 12185: 0xD787, + 12186: 0xD78A, + 12187: 0xD78B, + 12188: 0xD044, + 12189: 0xD045, + 12190: 0xD047, + 12191: 0xD049, + 12192: 0xD050, + 12193: 0xD054, + 12194: 0xD058, + 12195: 0xD060, + 12196: 0xD06C, + 12197: 0xD06D, + 12198: 0xD070, + 12199: 0xD074, + 12200: 0xD07C, + 12201: 0xD07D, + 12202: 0xD081, + 12203: 0xD0A4, + 12204: 0xD0A5, + 12205: 0xD0A8, + 12206: 0xD0AC, + 12207: 0xD0B4, + 12208: 0xD0B5, + 12209: 0xD0B7, + 12210: 0xD0B9, + 12211: 0xD0C0, + 12212: 0xD0C1, + 12213: 0xD0C4, + 12214: 0xD0C8, + 12215: 0xD0C9, + 12216: 0xD0D0, + 12217: 0xD0D1, + 12218: 0xD0D3, + 12219: 0xD0D4, + 12220: 0xD0D5, + 12221: 0xD0DC, + 12222: 0xD0DD, + 12223: 0xD0E0, + 12224: 0xD0E4, + 12225: 0xD0EC, + 12226: 0xD0ED, + 12227: 0xD0EF, + 12228: 0xD0F0, + 12229: 0xD0F1, + 12230: 0xD0F8, + 12231: 0xD10D, + 12232: 0xD130, + 12233: 0xD131, + 12234: 0xD134, + 12235: 0xD138, + 12236: 0xD13A, + 12237: 0xD140, + 12238: 0xD141, + 12239: 0xD143, + 12240: 0xD144, + 12241: 0xD145, + 12242: 0xD14C, + 12243: 0xD14D, + 12244: 0xD150, + 12245: 0xD154, + 12246: 0xD15C, + 12247: 0xD15D, + 12248: 0xD15F, + 12249: 0xD161, + 12250: 0xD168, + 12251: 0xD16C, + 12252: 0xD17C, + 12253: 0xD184, + 12254: 0xD188, + 12255: 0xD1A0, + 12256: 0xD1A1, + 12257: 0xD1A4, + 12258: 0xD1A8, + 12259: 0xD1B0, + 12260: 0xD1B1, + 12261: 0xD1B3, + 12262: 0xD1B5, + 12263: 0xD1BA, + 12264: 0xD1BC, + 12265: 0xD1C0, + 12266: 0xD1D8, + 12267: 0xD1F4, + 12268: 0xD1F8, + 12269: 0xD207, + 12270: 0xD209, + 12271: 0xD210, + 12272: 0xD22C, + 12273: 0xD22D, + 12274: 0xD230, + 12275: 0xD234, + 12276: 0xD23C, + 12277: 0xD23D, + 12278: 0xD23F, + 12279: 0xD241, + 12280: 0xD248, + 12281: 0xD25C, + 12282: 0xD78D, + 12283: 0xD78E, + 12284: 0xD78F, + 12285: 0xD791, + 12286: 0xD792, + 12287: 0xD793, + 12288: 0xD794, + 12289: 0xD795, + 12290: 0xD796, + 12291: 0xD797, + 12292: 0xD79A, + 12293: 0xD79C, + 12294: 0xD79E, + 12295: 0xD79F, + 12296: 0xD7A0, + 12297: 0xD7A1, + 12298: 0xD7A2, + 12299: 0xD7A3, + 12366: 0xD264, + 12367: 0xD280, + 12368: 0xD281, + 12369: 0xD284, + 12370: 0xD288, + 12371: 0xD290, + 12372: 0xD291, + 12373: 0xD295, + 12374: 0xD29C, + 12375: 0xD2A0, + 12376: 0xD2A4, + 12377: 0xD2AC, + 12378: 0xD2B1, + 12379: 0xD2B8, + 12380: 0xD2B9, + 12381: 0xD2BC, + 12382: 0xD2BF, + 12383: 0xD2C0, + 12384: 0xD2C2, + 12385: 0xD2C8, + 12386: 0xD2C9, + 12387: 0xD2CB, + 12388: 0xD2D4, + 12389: 0xD2D8, + 12390: 0xD2DC, + 12391: 0xD2E4, + 12392: 0xD2E5, + 12393: 0xD2F0, + 12394: 0xD2F1, + 12395: 0xD2F4, + 12396: 0xD2F8, + 12397: 0xD300, + 12398: 0xD301, + 12399: 0xD303, + 12400: 0xD305, + 12401: 0xD30C, + 12402: 0xD30D, + 12403: 0xD30E, + 12404: 0xD310, + 12405: 0xD314, + 12406: 0xD316, + 12407: 0xD31C, + 12408: 0xD31D, + 12409: 0xD31F, + 12410: 0xD320, + 12411: 0xD321, + 12412: 0xD325, + 12413: 0xD328, + 12414: 0xD329, + 12415: 0xD32C, + 12416: 0xD330, + 12417: 0xD338, + 12418: 0xD339, + 12419: 0xD33B, + 12420: 0xD33C, + 12421: 0xD33D, + 12422: 0xD344, + 12423: 0xD345, + 12424: 0xD37C, + 12425: 0xD37D, + 12426: 0xD380, + 12427: 0xD384, + 12428: 0xD38C, + 12429: 0xD38D, + 12430: 0xD38F, + 12431: 0xD390, + 12432: 0xD391, + 12433: 0xD398, + 12434: 0xD399, + 12435: 0xD39C, + 12436: 0xD3A0, + 12437: 0xD3A8, + 12438: 0xD3A9, + 12439: 0xD3AB, + 12440: 0xD3AD, + 12441: 0xD3B4, + 12442: 0xD3B8, + 12443: 0xD3BC, + 12444: 0xD3C4, + 12445: 0xD3C5, + 12446: 0xD3C8, + 12447: 0xD3C9, + 12448: 0xD3D0, + 12449: 0xD3D8, + 12450: 0xD3E1, + 12451: 0xD3E3, + 12452: 0xD3EC, + 12453: 0xD3ED, + 12454: 0xD3F0, + 12455: 0xD3F4, + 12456: 0xD3FC, + 12457: 0xD3FD, + 12458: 0xD3FF, + 12459: 0xD401, + 12460: 0xD408, + 12461: 0xD41D, + 12462: 0xD440, + 12463: 0xD444, + 12464: 0xD45C, + 12465: 0xD460, + 12466: 0xD464, + 12467: 0xD46D, + 12468: 0xD46F, + 12469: 0xD478, + 12470: 0xD479, + 12471: 0xD47C, + 12472: 0xD47F, + 12473: 0xD480, + 12474: 0xD482, + 12475: 0xD488, + 12476: 0xD489, + 12477: 0xD48B, + 12478: 0xD48D, + 12479: 0xD494, + 12480: 0xD4A9, + 12481: 0xD4CC, + 12482: 0xD4D0, + 12483: 0xD4D4, + 12484: 0xD4DC, + 12485: 0xD4DF, + 12486: 0xD4E8, + 12487: 0xD4EC, + 12488: 0xD4F0, + 12489: 0xD4F8, + 12490: 0xD4FB, + 12491: 0xD4FD, + 12492: 0xD504, + 12493: 0xD508, + 12494: 0xD50C, + 12495: 0xD514, + 12496: 0xD515, + 12497: 0xD517, + 12498: 0xD53C, + 12499: 0xD53D, + 12500: 0xD540, + 12501: 0xD544, + 12502: 0xD54C, + 12503: 0xD54D, + 12504: 0xD54F, + 12505: 0xD551, + 12506: 0xD558, + 12507: 0xD559, + 12508: 0xD55C, + 12509: 0xD560, + 12510: 0xD565, + 12511: 0xD568, + 12512: 0xD569, + 12513: 0xD56B, + 12514: 0xD56D, + 12515: 0xD574, + 12516: 0xD575, + 12517: 0xD578, + 12518: 0xD57C, + 12519: 0xD584, + 12520: 0xD585, + 12521: 0xD587, + 12522: 0xD588, + 12523: 0xD589, + 12524: 0xD590, + 12525: 0xD5A5, + 12526: 0xD5C8, + 12527: 0xD5C9, + 12528: 0xD5CC, + 12529: 0xD5D0, + 12530: 0xD5D2, + 12531: 0xD5D8, + 12532: 0xD5D9, + 12533: 0xD5DB, + 12534: 0xD5DD, + 12535: 0xD5E4, + 12536: 0xD5E5, + 12537: 0xD5E8, + 12538: 0xD5EC, + 12539: 0xD5F4, + 12540: 0xD5F5, + 12541: 0xD5F7, + 12542: 0xD5F9, + 12543: 0xD600, + 12544: 0xD601, + 12545: 0xD604, + 12546: 0xD608, + 12547: 0xD610, + 12548: 0xD611, + 12549: 0xD613, + 12550: 0xD614, + 12551: 0xD615, + 12552: 0xD61C, + 12553: 0xD620, + 12554: 0xD624, + 12555: 0xD62D, + 12556: 0xD638, + 12557: 0xD639, + 12558: 0xD63C, + 12559: 0xD640, + 12560: 0xD645, + 12561: 0xD648, + 12562: 0xD649, + 12563: 0xD64B, + 12564: 0xD64D, + 12565: 0xD651, + 12566: 0xD654, + 12567: 0xD655, + 12568: 0xD658, + 12569: 0xD65C, + 12570: 0xD667, + 12571: 0xD669, + 12572: 0xD670, + 12573: 0xD671, + 12574: 0xD674, + 12575: 0xD683, + 12576: 0xD685, + 12577: 0xD68C, + 12578: 0xD68D, + 12579: 0xD690, + 12580: 0xD694, + 12581: 0xD69D, + 12582: 0xD69F, + 12583: 0xD6A1, + 12584: 0xD6A8, + 12585: 0xD6AC, + 12586: 0xD6B0, + 12587: 0xD6B9, + 12588: 0xD6BB, + 12589: 0xD6C4, + 12590: 0xD6C5, + 12591: 0xD6C8, + 12592: 0xD6CC, + 12593: 0xD6D1, + 12594: 0xD6D4, + 12595: 0xD6D7, + 12596: 0xD6D9, + 12597: 0xD6E0, + 12598: 0xD6E4, + 12599: 0xD6E8, + 12600: 0xD6F0, + 12601: 0xD6F5, + 12602: 0xD6FC, + 12603: 0xD6FD, + 12604: 0xD700, + 12605: 0xD704, + 12606: 0xD711, + 12607: 0xD718, + 12608: 0xD719, + 12609: 0xD71C, + 12610: 0xD720, + 12611: 0xD728, + 12612: 0xD729, + 12613: 0xD72B, + 12614: 0xD72D, + 12615: 0xD734, + 12616: 0xD735, + 12617: 0xD738, + 12618: 0xD73C, + 12619: 0xD744, + 12620: 0xD747, + 12621: 0xD749, + 12622: 0xD750, + 12623: 0xD751, + 12624: 0xD754, + 12625: 0xD756, + 12626: 0xD757, + 12627: 0xD758, + 12628: 0xD759, + 12629: 0xD760, + 12630: 0xD761, + 12631: 0xD763, + 12632: 0xD765, + 12633: 0xD769, + 12634: 0xD76C, + 12635: 0xD770, + 12636: 0xD774, + 12637: 0xD77C, + 12638: 0xD77D, + 12639: 0xD781, + 12640: 0xD788, + 12641: 0xD789, + 12642: 0xD78C, + 12643: 0xD790, + 12644: 0xD798, + 12645: 0xD799, + 12646: 0xD79B, + 12647: 0xD79D, + 12742: 0x4F3D, + 12743: 0x4F73, + 12744: 0x5047, + 12745: 0x50F9, + 12746: 0x52A0, + 12747: 0x53EF, + 12748: 0x5475, + 12749: 0x54E5, + 12750: 0x5609, + 12751: 0x5AC1, + 12752: 0x5BB6, + 12753: 0x6687, + 12754: 0x67B6, + 12755: 0x67B7, + 12756: 0x67EF, + 12757: 0x6B4C, + 12758: 0x73C2, + 12759: 0x75C2, + 12760: 0x7A3C, + 12761: 0x82DB, + 12762: 0x8304, + 12763: 0x8857, + 12764: 0x8888, + 12765: 0x8A36, + 12766: 0x8CC8, + 12767: 0x8DCF, + 12768: 0x8EFB, + 12769: 0x8FE6, + 12770: 0x99D5, + 12771: 0x523B, + 12772: 0x5374, + 12773: 0x5404, + 12774: 0x606A, + 12775: 0x6164, + 12776: 0x6BBC, + 12777: 0x73CF, + 12778: 0x811A, + 12779: 0x89BA, + 12780: 0x89D2, + 12781: 0x95A3, + 12782: 0x4F83, + 12783: 0x520A, + 12784: 0x58BE, + 12785: 0x5978, + 12786: 0x59E6, + 12787: 0x5E72, + 12788: 0x5E79, + 12789: 0x61C7, + 12790: 0x63C0, + 12791: 0x6746, + 12792: 0x67EC, + 12793: 0x687F, + 12794: 0x6F97, + 12795: 0x764E, + 12796: 0x770B, + 12797: 0x78F5, + 12798: 0x7A08, + 12799: 0x7AFF, + 12800: 0x7C21, + 12801: 0x809D, + 12802: 0x826E, + 12803: 0x8271, + 12804: 0x8AEB, + 12805: 0x9593, + 12806: 0x4E6B, + 12807: 0x559D, + 12808: 0x66F7, + 12809: 0x6E34, + 12810: 0x78A3, + 12811: 0x7AED, + 12812: 0x845B, + 12813: 0x8910, + 12814: 0x874E, + 12815: 0x97A8, + 12816: 0x52D8, + 12817: 0x574E, + 12818: 0x582A, + 12819: 0x5D4C, + 12820: 0x611F, + 12821: 0x61BE, + 12822: 0x6221, + 12823: 0x6562, + 12824: 0x67D1, + 12825: 0x6A44, + 12826: 0x6E1B, + 12827: 0x7518, + 12828: 0x75B3, + 12829: 0x76E3, + 12830: 0x77B0, + 12831: 0x7D3A, + 12832: 0x90AF, + 12833: 0x9451, + 12834: 0x9452, + 12835: 0x9F95, + 12836: 0x5323, + 12837: 0x5CAC, + 12838: 0x7532, + 12839: 0x80DB, + 12840: 0x9240, + 12841: 0x9598, + 12842: 0x525B, + 12843: 0x5808, + 12844: 0x59DC, + 12845: 0x5CA1, + 12846: 0x5D17, + 12847: 0x5EB7, + 12848: 0x5F3A, + 12849: 0x5F4A, + 12850: 0x6177, + 12851: 0x6C5F, + 12852: 0x757A, + 12853: 0x7586, + 12854: 0x7CE0, + 12855: 0x7D73, + 12856: 0x7DB1, + 12857: 0x7F8C, + 12858: 0x8154, + 12859: 0x8221, + 12860: 0x8591, + 12861: 0x8941, + 12862: 0x8B1B, + 12863: 0x92FC, + 12864: 0x964D, + 12865: 0x9C47, + 12866: 0x4ECB, + 12867: 0x4EF7, + 12868: 0x500B, + 12869: 0x51F1, + 12870: 0x584F, + 12871: 0x6137, + 12872: 0x613E, + 12873: 0x6168, + 12874: 0x6539, + 12875: 0x69EA, + 12876: 0x6F11, + 12877: 0x75A5, + 12878: 0x7686, + 12879: 0x76D6, + 12880: 0x7B87, + 12881: 0x82A5, + 12882: 0x84CB, + 12883: 0xF900, + 12884: 0x93A7, + 12885: 0x958B, + 12886: 0x5580, + 12887: 0x5BA2, + 12888: 0x5751, + 12889: 0xF901, + 12890: 0x7CB3, + 12891: 0x7FB9, + 12892: 0x91B5, + 12893: 0x5028, + 12894: 0x53BB, + 12895: 0x5C45, + 12896: 0x5DE8, + 12897: 0x62D2, + 12898: 0x636E, + 12899: 0x64DA, + 12900: 0x64E7, + 12901: 0x6E20, + 12902: 0x70AC, + 12903: 0x795B, + 12904: 0x8DDD, + 12905: 0x8E1E, + 12906: 0xF902, + 12907: 0x907D, + 12908: 0x9245, + 12909: 0x92F8, + 12910: 0x4E7E, + 12911: 0x4EF6, + 12912: 0x5065, + 12913: 0x5DFE, + 12914: 0x5EFA, + 12915: 0x6106, + 12916: 0x6957, + 12917: 0x8171, + 12918: 0x8654, + 12919: 0x8E47, + 12920: 0x9375, + 12921: 0x9A2B, + 12922: 0x4E5E, + 12923: 0x5091, + 12924: 0x6770, + 12925: 0x6840, + 12926: 0x5109, + 12927: 0x528D, + 12928: 0x5292, + 12929: 0x6AA2, + 12930: 0x77BC, + 12931: 0x9210, + 12932: 0x9ED4, + 12933: 0x52AB, + 12934: 0x602F, + 12935: 0x8FF2, + 12936: 0x5048, + 12937: 0x61A9, + 12938: 0x63ED, + 12939: 0x64CA, + 12940: 0x683C, + 12941: 0x6A84, + 12942: 0x6FC0, + 12943: 0x8188, + 12944: 0x89A1, + 12945: 0x9694, + 12946: 0x5805, + 12947: 0x727D, + 12948: 0x72AC, + 12949: 0x7504, + 12950: 0x7D79, + 12951: 0x7E6D, + 12952: 0x80A9, + 12953: 0x898B, + 12954: 0x8B74, + 12955: 0x9063, + 12956: 0x9D51, + 12957: 0x6289, + 12958: 0x6C7A, + 12959: 0x6F54, + 12960: 0x7D50, + 12961: 0x7F3A, + 12962: 0x8A23, + 12963: 0x517C, + 12964: 0x614A, + 12965: 0x7B9D, + 12966: 0x8B19, + 12967: 0x9257, + 12968: 0x938C, + 12969: 0x4EAC, + 12970: 0x4FD3, + 12971: 0x501E, + 12972: 0x50BE, + 12973: 0x5106, + 12974: 0x52C1, + 12975: 0x52CD, + 12976: 0x537F, + 12977: 0x5770, + 12978: 0x5883, + 12979: 0x5E9A, + 12980: 0x5F91, + 12981: 0x6176, + 12982: 0x61AC, + 12983: 0x64CE, + 12984: 0x656C, + 12985: 0x666F, + 12986: 0x66BB, + 12987: 0x66F4, + 12988: 0x6897, + 12989: 0x6D87, + 12990: 0x7085, + 12991: 0x70F1, + 12992: 0x749F, + 12993: 0x74A5, + 12994: 0x74CA, + 12995: 0x75D9, + 12996: 0x786C, + 12997: 0x78EC, + 12998: 0x7ADF, + 12999: 0x7AF6, + 13000: 0x7D45, + 13001: 0x7D93, + 13002: 0x8015, + 13003: 0x803F, + 13004: 0x811B, + 13005: 0x8396, + 13006: 0x8B66, + 13007: 0x8F15, + 13008: 0x9015, + 13009: 0x93E1, + 13010: 0x9803, + 13011: 0x9838, + 13012: 0x9A5A, + 13013: 0x9BE8, + 13014: 0x4FC2, + 13015: 0x5553, + 13016: 0x583A, + 13017: 0x5951, + 13018: 0x5B63, + 13019: 0x5C46, + 13020: 0x60B8, + 13021: 0x6212, + 13022: 0x6842, + 13023: 0x68B0, + 13024: 0x68E8, + 13025: 0x6EAA, + 13026: 0x754C, + 13027: 0x7678, + 13028: 0x78CE, + 13029: 0x7A3D, + 13030: 0x7CFB, + 13031: 0x7E6B, + 13032: 0x7E7C, + 13033: 0x8A08, + 13034: 0x8AA1, + 13035: 0x8C3F, + 13036: 0x968E, + 13037: 0x9DC4, + 13038: 0x53E4, + 13039: 0x53E9, + 13040: 0x544A, + 13041: 0x5471, + 13042: 0x56FA, + 13043: 0x59D1, + 13044: 0x5B64, + 13045: 0x5C3B, + 13046: 0x5EAB, + 13047: 0x62F7, + 13048: 0x6537, + 13049: 0x6545, + 13050: 0x6572, + 13051: 0x66A0, + 13052: 0x67AF, + 13053: 0x69C1, + 13054: 0x6CBD, + 13055: 0x75FC, + 13056: 0x7690, + 13057: 0x777E, + 13058: 0x7A3F, + 13059: 0x7F94, + 13060: 0x8003, + 13061: 0x80A1, + 13062: 0x818F, + 13063: 0x82E6, + 13064: 0x82FD, + 13065: 0x83F0, + 13066: 0x85C1, + 13067: 0x8831, + 13068: 0x88B4, + 13069: 0x8AA5, + 13070: 0xF903, + 13071: 0x8F9C, + 13072: 0x932E, + 13073: 0x96C7, + 13074: 0x9867, + 13075: 0x9AD8, + 13076: 0x9F13, + 13077: 0x54ED, + 13078: 0x659B, + 13079: 0x66F2, + 13080: 0x688F, + 13081: 0x7A40, + 13082: 0x8C37, + 13083: 0x9D60, + 13084: 0x56F0, + 13085: 0x5764, + 13086: 0x5D11, + 13087: 0x6606, + 13088: 0x68B1, + 13089: 0x68CD, + 13090: 0x6EFE, + 13091: 0x7428, + 13092: 0x889E, + 13093: 0x9BE4, + 13094: 0x6C68, + 13095: 0xF904, + 13096: 0x9AA8, + 13097: 0x4F9B, + 13098: 0x516C, + 13099: 0x5171, + 13100: 0x529F, + 13101: 0x5B54, + 13102: 0x5DE5, + 13103: 0x6050, + 13104: 0x606D, + 13105: 0x62F1, + 13106: 0x63A7, + 13107: 0x653B, + 13108: 0x73D9, + 13109: 0x7A7A, + 13110: 0x86A3, + 13111: 0x8CA2, + 13112: 0x978F, + 13113: 0x4E32, + 13114: 0x5BE1, + 13115: 0x6208, + 13116: 0x679C, + 13117: 0x74DC, + 13118: 0x79D1, + 13119: 0x83D3, + 13120: 0x8A87, + 13121: 0x8AB2, + 13122: 0x8DE8, + 13123: 0x904E, + 13124: 0x934B, + 13125: 0x9846, + 13126: 0x5ED3, + 13127: 0x69E8, + 13128: 0x85FF, + 13129: 0x90ED, + 13130: 0xF905, + 13131: 0x51A0, + 13132: 0x5B98, + 13133: 0x5BEC, + 13134: 0x6163, + 13135: 0x68FA, + 13136: 0x6B3E, + 13137: 0x704C, + 13138: 0x742F, + 13139: 0x74D8, + 13140: 0x7BA1, + 13141: 0x7F50, + 13142: 0x83C5, + 13143: 0x89C0, + 13144: 0x8CAB, + 13145: 0x95DC, + 13146: 0x9928, + 13147: 0x522E, + 13148: 0x605D, + 13149: 0x62EC, + 13150: 0x9002, + 13151: 0x4F8A, + 13152: 0x5149, + 13153: 0x5321, + 13154: 0x58D9, + 13155: 0x5EE3, + 13156: 0x66E0, + 13157: 0x6D38, + 13158: 0x709A, + 13159: 0x72C2, + 13160: 0x73D6, + 13161: 0x7B50, + 13162: 0x80F1, + 13163: 0x945B, + 13164: 0x5366, + 13165: 0x639B, + 13166: 0x7F6B, + 13167: 0x4E56, + 13168: 0x5080, + 13169: 0x584A, + 13170: 0x58DE, + 13171: 0x602A, + 13172: 0x6127, + 13173: 0x62D0, + 13174: 0x69D0, + 13175: 0x9B41, + 13176: 0x5B8F, + 13177: 0x7D18, + 13178: 0x80B1, + 13179: 0x8F5F, + 13180: 0x4EA4, + 13181: 0x50D1, + 13182: 0x54AC, + 13183: 0x55AC, + 13184: 0x5B0C, + 13185: 0x5DA0, + 13186: 0x5DE7, + 13187: 0x652A, + 13188: 0x654E, + 13189: 0x6821, + 13190: 0x6A4B, + 13191: 0x72E1, + 13192: 0x768E, + 13193: 0x77EF, + 13194: 0x7D5E, + 13195: 0x7FF9, + 13196: 0x81A0, + 13197: 0x854E, + 13198: 0x86DF, + 13199: 0x8F03, + 13200: 0x8F4E, + 13201: 0x90CA, + 13202: 0x9903, + 13203: 0x9A55, + 13204: 0x9BAB, + 13205: 0x4E18, + 13206: 0x4E45, + 13207: 0x4E5D, + 13208: 0x4EC7, + 13209: 0x4FF1, + 13210: 0x5177, + 13211: 0x52FE, + 13212: 0x5340, + 13213: 0x53E3, + 13214: 0x53E5, + 13215: 0x548E, + 13216: 0x5614, + 13217: 0x5775, + 13218: 0x57A2, + 13219: 0x5BC7, + 13220: 0x5D87, + 13221: 0x5ED0, + 13222: 0x61FC, + 13223: 0x62D8, + 13224: 0x6551, + 13225: 0x67B8, + 13226: 0x67E9, + 13227: 0x69CB, + 13228: 0x6B50, + 13229: 0x6BC6, + 13230: 0x6BEC, + 13231: 0x6C42, + 13232: 0x6E9D, + 13233: 0x7078, + 13234: 0x72D7, + 13235: 0x7396, + 13236: 0x7403, + 13237: 0x77BF, + 13238: 0x77E9, + 13239: 0x7A76, + 13240: 0x7D7F, + 13241: 0x8009, + 13242: 0x81FC, + 13243: 0x8205, + 13244: 0x820A, + 13245: 0x82DF, + 13246: 0x8862, + 13247: 0x8B33, + 13248: 0x8CFC, + 13249: 0x8EC0, + 13250: 0x9011, + 13251: 0x90B1, + 13252: 0x9264, + 13253: 0x92B6, + 13254: 0x99D2, + 13255: 0x9A45, + 13256: 0x9CE9, + 13257: 0x9DD7, + 13258: 0x9F9C, + 13259: 0x570B, + 13260: 0x5C40, + 13261: 0x83CA, + 13262: 0x97A0, + 13263: 0x97AB, + 13264: 0x9EB4, + 13265: 0x541B, + 13266: 0x7A98, + 13267: 0x7FA4, + 13268: 0x88D9, + 13269: 0x8ECD, + 13270: 0x90E1, + 13271: 0x5800, + 13272: 0x5C48, + 13273: 0x6398, + 13274: 0x7A9F, + 13275: 0x5BAE, + 13276: 0x5F13, + 13277: 0x7A79, + 13278: 0x7AAE, + 13279: 0x828E, + 13280: 0x8EAC, + 13281: 0x5026, + 13282: 0x5238, + 13283: 0x52F8, + 13284: 0x5377, + 13285: 0x5708, + 13286: 0x62F3, + 13287: 0x6372, + 13288: 0x6B0A, + 13289: 0x6DC3, + 13290: 0x7737, + 13291: 0x53A5, + 13292: 0x7357, + 13293: 0x8568, + 13294: 0x8E76, + 13295: 0x95D5, + 13296: 0x673A, + 13297: 0x6AC3, + 13298: 0x6F70, + 13299: 0x8A6D, + 13300: 0x8ECC, + 13301: 0x994B, + 13302: 0xF906, + 13303: 0x6677, + 13304: 0x6B78, + 13305: 0x8CB4, + 13306: 0x9B3C, + 13307: 0xF907, + 13308: 0x53EB, + 13309: 0x572D, + 13310: 0x594E, + 13311: 0x63C6, + 13312: 0x69FB, + 13313: 0x73EA, + 13314: 0x7845, + 13315: 0x7ABA, + 13316: 0x7AC5, + 13317: 0x7CFE, + 13318: 0x8475, + 13319: 0x898F, + 13320: 0x8D73, + 13321: 0x9035, + 13322: 0x95A8, + 13323: 0x52FB, + 13324: 0x5747, + 13325: 0x7547, + 13326: 0x7B60, + 13327: 0x83CC, + 13328: 0x921E, + 13329: 0xF908, + 13330: 0x6A58, + 13331: 0x514B, + 13332: 0x524B, + 13333: 0x5287, + 13334: 0x621F, + 13335: 0x68D8, + 13336: 0x6975, + 13337: 0x9699, + 13338: 0x50C5, + 13339: 0x52A4, + 13340: 0x52E4, + 13341: 0x61C3, + 13342: 0x65A4, + 13343: 0x6839, + 13344: 0x69FF, + 13345: 0x747E, + 13346: 0x7B4B, + 13347: 0x82B9, + 13348: 0x83EB, + 13349: 0x89B2, + 13350: 0x8B39, + 13351: 0x8FD1, + 13352: 0x9949, + 13353: 0xF909, + 13354: 0x4ECA, + 13355: 0x5997, + 13356: 0x64D2, + 13357: 0x6611, + 13358: 0x6A8E, + 13359: 0x7434, + 13360: 0x7981, + 13361: 0x79BD, + 13362: 0x82A9, + 13363: 0x887E, + 13364: 0x887F, + 13365: 0x895F, + 13366: 0xF90A, + 13367: 0x9326, + 13368: 0x4F0B, + 13369: 0x53CA, + 13370: 0x6025, + 13371: 0x6271, + 13372: 0x6C72, + 13373: 0x7D1A, + 13374: 0x7D66, + 13375: 0x4E98, + 13376: 0x5162, + 13377: 0x77DC, + 13378: 0x80AF, + 13379: 0x4F01, + 13380: 0x4F0E, + 13381: 0x5176, + 13382: 0x5180, + 13383: 0x55DC, + 13384: 0x5668, + 13385: 0x573B, + 13386: 0x57FA, + 13387: 0x57FC, + 13388: 0x5914, + 13389: 0x5947, + 13390: 0x5993, + 13391: 0x5BC4, + 13392: 0x5C90, + 13393: 0x5D0E, + 13394: 0x5DF1, + 13395: 0x5E7E, + 13396: 0x5FCC, + 13397: 0x6280, + 13398: 0x65D7, + 13399: 0x65E3, + 13400: 0x671E, + 13401: 0x671F, + 13402: 0x675E, + 13403: 0x68CB, + 13404: 0x68C4, + 13405: 0x6A5F, + 13406: 0x6B3A, + 13407: 0x6C23, + 13408: 0x6C7D, + 13409: 0x6C82, + 13410: 0x6DC7, + 13411: 0x7398, + 13412: 0x7426, + 13413: 0x742A, + 13414: 0x7482, + 13415: 0x74A3, + 13416: 0x7578, + 13417: 0x757F, + 13418: 0x7881, + 13419: 0x78EF, + 13420: 0x7941, + 13421: 0x7947, + 13422: 0x7948, + 13423: 0x797A, + 13424: 0x7B95, + 13425: 0x7D00, + 13426: 0x7DBA, + 13427: 0x7F88, + 13428: 0x8006, + 13429: 0x802D, + 13430: 0x808C, + 13431: 0x8A18, + 13432: 0x8B4F, + 13433: 0x8C48, + 13434: 0x8D77, + 13435: 0x9321, + 13436: 0x9324, + 13437: 0x98E2, + 13438: 0x9951, + 13439: 0x9A0E, + 13440: 0x9A0F, + 13441: 0x9A65, + 13442: 0x9E92, + 13443: 0x7DCA, + 13444: 0x4F76, + 13445: 0x5409, + 13446: 0x62EE, + 13447: 0x6854, + 13448: 0x91D1, + 13449: 0x55AB, + 13450: 0x513A, + 13451: 0xF90B, + 13452: 0xF90C, + 13453: 0x5A1C, + 13454: 0x61E6, + 13455: 0xF90D, + 13456: 0x62CF, + 13457: 0x62FF, + 13458: 0xF90E, + 13459: 0xF90F, + 13460: 0xF910, + 13461: 0xF911, + 13462: 0xF912, + 13463: 0xF913, + 13464: 0x90A3, + 13465: 0xF914, + 13466: 0xF915, + 13467: 0xF916, + 13468: 0xF917, + 13469: 0xF918, + 13470: 0x8AFE, + 13471: 0xF919, + 13472: 0xF91A, + 13473: 0xF91B, + 13474: 0xF91C, + 13475: 0x6696, + 13476: 0xF91D, + 13477: 0x7156, + 13478: 0xF91E, + 13479: 0xF91F, + 13480: 0x96E3, + 13481: 0xF920, + 13482: 0x634F, + 13483: 0x637A, + 13484: 0x5357, + 13485: 0xF921, + 13486: 0x678F, + 13487: 0x6960, + 13488: 0x6E73, + 13489: 0xF922, + 13490: 0x7537, + 13491: 0xF923, + 13492: 0xF924, + 13493: 0xF925, + 13494: 0x7D0D, + 13495: 0xF926, + 13496: 0xF927, + 13497: 0x8872, + 13498: 0x56CA, + 13499: 0x5A18, + 13500: 0xF928, + 13501: 0xF929, + 13502: 0xF92A, + 13503: 0xF92B, + 13504: 0xF92C, + 13505: 0x4E43, + 13506: 0xF92D, + 13507: 0x5167, + 13508: 0x5948, + 13509: 0x67F0, + 13510: 0x8010, + 13511: 0xF92E, + 13512: 0x5973, + 13513: 0x5E74, + 13514: 0x649A, + 13515: 0x79CA, + 13516: 0x5FF5, + 13517: 0x606C, + 13518: 0x62C8, + 13519: 0x637B, + 13520: 0x5BE7, + 13521: 0x5BD7, + 13522: 0x52AA, + 13523: 0xF92F, + 13524: 0x5974, + 13525: 0x5F29, + 13526: 0x6012, + 13527: 0xF930, + 13528: 0xF931, + 13529: 0xF932, + 13530: 0x7459, + 13531: 0xF933, + 13532: 0xF934, + 13533: 0xF935, + 13534: 0xF936, + 13535: 0xF937, + 13536: 0xF938, + 13537: 0x99D1, + 13538: 0xF939, + 13539: 0xF93A, + 13540: 0xF93B, + 13541: 0xF93C, + 13542: 0xF93D, + 13543: 0xF93E, + 13544: 0xF93F, + 13545: 0xF940, + 13546: 0xF941, + 13547: 0xF942, + 13548: 0xF943, + 13549: 0x6FC3, + 13550: 0xF944, + 13551: 0xF945, + 13552: 0x81BF, + 13553: 0x8FB2, + 13554: 0x60F1, + 13555: 0xF946, + 13556: 0xF947, + 13557: 0x8166, + 13558: 0xF948, + 13559: 0xF949, + 13560: 0x5C3F, + 13561: 0xF94A, + 13562: 0xF94B, + 13563: 0xF94C, + 13564: 0xF94D, + 13565: 0xF94E, + 13566: 0xF94F, + 13567: 0xF950, + 13568: 0xF951, + 13569: 0x5AE9, + 13570: 0x8A25, + 13571: 0x677B, + 13572: 0x7D10, + 13573: 0xF952, + 13574: 0xF953, + 13575: 0xF954, + 13576: 0xF955, + 13577: 0xF956, + 13578: 0xF957, + 13579: 0x80FD, + 13580: 0xF958, + 13581: 0xF959, + 13582: 0x5C3C, + 13583: 0x6CE5, + 13584: 0x533F, + 13585: 0x6EBA, + 13586: 0x591A, + 13587: 0x8336, + 13588: 0x4E39, + 13589: 0x4EB6, + 13590: 0x4F46, + 13591: 0x55AE, + 13592: 0x5718, + 13593: 0x58C7, + 13594: 0x5F56, + 13595: 0x65B7, + 13596: 0x65E6, + 13597: 0x6A80, + 13598: 0x6BB5, + 13599: 0x6E4D, + 13600: 0x77ED, + 13601: 0x7AEF, + 13602: 0x7C1E, + 13603: 0x7DDE, + 13604: 0x86CB, + 13605: 0x8892, + 13606: 0x9132, + 13607: 0x935B, + 13608: 0x64BB, + 13609: 0x6FBE, + 13610: 0x737A, + 13611: 0x75B8, + 13612: 0x9054, + 13613: 0x5556, + 13614: 0x574D, + 13615: 0x61BA, + 13616: 0x64D4, + 13617: 0x66C7, + 13618: 0x6DE1, + 13619: 0x6E5B, + 13620: 0x6F6D, + 13621: 0x6FB9, + 13622: 0x75F0, + 13623: 0x8043, + 13624: 0x81BD, + 13625: 0x8541, + 13626: 0x8983, + 13627: 0x8AC7, + 13628: 0x8B5A, + 13629: 0x931F, + 13630: 0x6C93, + 13631: 0x7553, + 13632: 0x7B54, + 13633: 0x8E0F, + 13634: 0x905D, + 13635: 0x5510, + 13636: 0x5802, + 13637: 0x5858, + 13638: 0x5E62, + 13639: 0x6207, + 13640: 0x649E, + 13641: 0x68E0, + 13642: 0x7576, + 13643: 0x7CD6, + 13644: 0x87B3, + 13645: 0x9EE8, + 13646: 0x4EE3, + 13647: 0x5788, + 13648: 0x576E, + 13649: 0x5927, + 13650: 0x5C0D, + 13651: 0x5CB1, + 13652: 0x5E36, + 13653: 0x5F85, + 13654: 0x6234, + 13655: 0x64E1, + 13656: 0x73B3, + 13657: 0x81FA, + 13658: 0x888B, + 13659: 0x8CB8, + 13660: 0x968A, + 13661: 0x9EDB, + 13662: 0x5B85, + 13663: 0x5FB7, + 13664: 0x60B3, + 13665: 0x5012, + 13666: 0x5200, + 13667: 0x5230, + 13668: 0x5716, + 13669: 0x5835, + 13670: 0x5857, + 13671: 0x5C0E, + 13672: 0x5C60, + 13673: 0x5CF6, + 13674: 0x5D8B, + 13675: 0x5EA6, + 13676: 0x5F92, + 13677: 0x60BC, + 13678: 0x6311, + 13679: 0x6389, + 13680: 0x6417, + 13681: 0x6843, + 13682: 0x68F9, + 13683: 0x6AC2, + 13684: 0x6DD8, + 13685: 0x6E21, + 13686: 0x6ED4, + 13687: 0x6FE4, + 13688: 0x71FE, + 13689: 0x76DC, + 13690: 0x7779, + 13691: 0x79B1, + 13692: 0x7A3B, + 13693: 0x8404, + 13694: 0x89A9, + 13695: 0x8CED, + 13696: 0x8DF3, + 13697: 0x8E48, + 13698: 0x9003, + 13699: 0x9014, + 13700: 0x9053, + 13701: 0x90FD, + 13702: 0x934D, + 13703: 0x9676, + 13704: 0x97DC, + 13705: 0x6BD2, + 13706: 0x7006, + 13707: 0x7258, + 13708: 0x72A2, + 13709: 0x7368, + 13710: 0x7763, + 13711: 0x79BF, + 13712: 0x7BE4, + 13713: 0x7E9B, + 13714: 0x8B80, + 13715: 0x58A9, + 13716: 0x60C7, + 13717: 0x6566, + 13718: 0x65FD, + 13719: 0x66BE, + 13720: 0x6C8C, + 13721: 0x711E, + 13722: 0x71C9, + 13723: 0x8C5A, + 13724: 0x9813, + 13725: 0x4E6D, + 13726: 0x7A81, + 13727: 0x4EDD, + 13728: 0x51AC, + 13729: 0x51CD, + 13730: 0x52D5, + 13731: 0x540C, + 13732: 0x61A7, + 13733: 0x6771, + 13734: 0x6850, + 13735: 0x68DF, + 13736: 0x6D1E, + 13737: 0x6F7C, + 13738: 0x75BC, + 13739: 0x77B3, + 13740: 0x7AE5, + 13741: 0x80F4, + 13742: 0x8463, + 13743: 0x9285, + 13744: 0x515C, + 13745: 0x6597, + 13746: 0x675C, + 13747: 0x6793, + 13748: 0x75D8, + 13749: 0x7AC7, + 13750: 0x8373, + 13751: 0xF95A, + 13752: 0x8C46, + 13753: 0x9017, + 13754: 0x982D, + 13755: 0x5C6F, + 13756: 0x81C0, + 13757: 0x829A, + 13758: 0x9041, + 13759: 0x906F, + 13760: 0x920D, + 13761: 0x5F97, + 13762: 0x5D9D, + 13763: 0x6A59, + 13764: 0x71C8, + 13765: 0x767B, + 13766: 0x7B49, + 13767: 0x85E4, + 13768: 0x8B04, + 13769: 0x9127, + 13770: 0x9A30, + 13771: 0x5587, + 13772: 0x61F6, + 13773: 0xF95B, + 13774: 0x7669, + 13775: 0x7F85, + 13776: 0x863F, + 13777: 0x87BA, + 13778: 0x88F8, + 13779: 0x908F, + 13780: 0xF95C, + 13781: 0x6D1B, + 13782: 0x70D9, + 13783: 0x73DE, + 13784: 0x7D61, + 13785: 0x843D, + 13786: 0xF95D, + 13787: 0x916A, + 13788: 0x99F1, + 13789: 0xF95E, + 13790: 0x4E82, + 13791: 0x5375, + 13792: 0x6B04, + 13793: 0x6B12, + 13794: 0x703E, + 13795: 0x721B, + 13796: 0x862D, + 13797: 0x9E1E, + 13798: 0x524C, + 13799: 0x8FA3, + 13800: 0x5D50, + 13801: 0x64E5, + 13802: 0x652C, + 13803: 0x6B16, + 13804: 0x6FEB, + 13805: 0x7C43, + 13806: 0x7E9C, + 13807: 0x85CD, + 13808: 0x8964, + 13809: 0x89BD, + 13810: 0x62C9, + 13811: 0x81D8, + 13812: 0x881F, + 13813: 0x5ECA, + 13814: 0x6717, + 13815: 0x6D6A, + 13816: 0x72FC, + 13817: 0x7405, + 13818: 0x746F, + 13819: 0x8782, + 13820: 0x90DE, + 13821: 0x4F86, + 13822: 0x5D0D, + 13823: 0x5FA0, + 13824: 0x840A, + 13825: 0x51B7, + 13826: 0x63A0, + 13827: 0x7565, + 13828: 0x4EAE, + 13829: 0x5006, + 13830: 0x5169, + 13831: 0x51C9, + 13832: 0x6881, + 13833: 0x6A11, + 13834: 0x7CAE, + 13835: 0x7CB1, + 13836: 0x7CE7, + 13837: 0x826F, + 13838: 0x8AD2, + 13839: 0x8F1B, + 13840: 0x91CF, + 13841: 0x4FB6, + 13842: 0x5137, + 13843: 0x52F5, + 13844: 0x5442, + 13845: 0x5EEC, + 13846: 0x616E, + 13847: 0x623E, + 13848: 0x65C5, + 13849: 0x6ADA, + 13850: 0x6FFE, + 13851: 0x792A, + 13852: 0x85DC, + 13853: 0x8823, + 13854: 0x95AD, + 13855: 0x9A62, + 13856: 0x9A6A, + 13857: 0x9E97, + 13858: 0x9ECE, + 13859: 0x529B, + 13860: 0x66C6, + 13861: 0x6B77, + 13862: 0x701D, + 13863: 0x792B, + 13864: 0x8F62, + 13865: 0x9742, + 13866: 0x6190, + 13867: 0x6200, + 13868: 0x6523, + 13869: 0x6F23, + 13870: 0x7149, + 13871: 0x7489, + 13872: 0x7DF4, + 13873: 0x806F, + 13874: 0x84EE, + 13875: 0x8F26, + 13876: 0x9023, + 13877: 0x934A, + 13878: 0x51BD, + 13879: 0x5217, + 13880: 0x52A3, + 13881: 0x6D0C, + 13882: 0x70C8, + 13883: 0x88C2, + 13884: 0x5EC9, + 13885: 0x6582, + 13886: 0x6BAE, + 13887: 0x6FC2, + 13888: 0x7C3E, + 13889: 0x7375, + 13890: 0x4EE4, + 13891: 0x4F36, + 13892: 0x56F9, + 13893: 0xF95F, + 13894: 0x5CBA, + 13895: 0x5DBA, + 13896: 0x601C, + 13897: 0x73B2, + 13898: 0x7B2D, + 13899: 0x7F9A, + 13900: 0x7FCE, + 13901: 0x8046, + 13902: 0x901E, + 13903: 0x9234, + 13904: 0x96F6, + 13905: 0x9748, + 13906: 0x9818, + 13907: 0x9F61, + 13908: 0x4F8B, + 13909: 0x6FA7, + 13910: 0x79AE, + 13911: 0x91B4, + 13912: 0x96B7, + 13913: 0x52DE, + 13914: 0xF960, + 13915: 0x6488, + 13916: 0x64C4, + 13917: 0x6AD3, + 13918: 0x6F5E, + 13919: 0x7018, + 13920: 0x7210, + 13921: 0x76E7, + 13922: 0x8001, + 13923: 0x8606, + 13924: 0x865C, + 13925: 0x8DEF, + 13926: 0x8F05, + 13927: 0x9732, + 13928: 0x9B6F, + 13929: 0x9DFA, + 13930: 0x9E75, + 13931: 0x788C, + 13932: 0x797F, + 13933: 0x7DA0, + 13934: 0x83C9, + 13935: 0x9304, + 13936: 0x9E7F, + 13937: 0x9E93, + 13938: 0x8AD6, + 13939: 0x58DF, + 13940: 0x5F04, + 13941: 0x6727, + 13942: 0x7027, + 13943: 0x74CF, + 13944: 0x7C60, + 13945: 0x807E, + 13946: 0x5121, + 13947: 0x7028, + 13948: 0x7262, + 13949: 0x78CA, + 13950: 0x8CC2, + 13951: 0x8CDA, + 13952: 0x8CF4, + 13953: 0x96F7, + 13954: 0x4E86, + 13955: 0x50DA, + 13956: 0x5BEE, + 13957: 0x5ED6, + 13958: 0x6599, + 13959: 0x71CE, + 13960: 0x7642, + 13961: 0x77AD, + 13962: 0x804A, + 13963: 0x84FC, + 13964: 0x907C, + 13965: 0x9B27, + 13966: 0x9F8D, + 13967: 0x58D8, + 13968: 0x5A41, + 13969: 0x5C62, + 13970: 0x6A13, + 13971: 0x6DDA, + 13972: 0x6F0F, + 13973: 0x763B, + 13974: 0x7D2F, + 13975: 0x7E37, + 13976: 0x851E, + 13977: 0x8938, + 13978: 0x93E4, + 13979: 0x964B, + 13980: 0x5289, + 13981: 0x65D2, + 13982: 0x67F3, + 13983: 0x69B4, + 13984: 0x6D41, + 13985: 0x6E9C, + 13986: 0x700F, + 13987: 0x7409, + 13988: 0x7460, + 13989: 0x7559, + 13990: 0x7624, + 13991: 0x786B, + 13992: 0x8B2C, + 13993: 0x985E, + 13994: 0x516D, + 13995: 0x622E, + 13996: 0x9678, + 13997: 0x4F96, + 13998: 0x502B, + 13999: 0x5D19, + 14000: 0x6DEA, + 14001: 0x7DB8, + 14002: 0x8F2A, + 14003: 0x5F8B, + 14004: 0x6144, + 14005: 0x6817, + 14006: 0xF961, + 14007: 0x9686, + 14008: 0x52D2, + 14009: 0x808B, + 14010: 0x51DC, + 14011: 0x51CC, + 14012: 0x695E, + 14013: 0x7A1C, + 14014: 0x7DBE, + 14015: 0x83F1, + 14016: 0x9675, + 14017: 0x4FDA, + 14018: 0x5229, + 14019: 0x5398, + 14020: 0x540F, + 14021: 0x550E, + 14022: 0x5C65, + 14023: 0x60A7, + 14024: 0x674E, + 14025: 0x68A8, + 14026: 0x6D6C, + 14027: 0x7281, + 14028: 0x72F8, + 14029: 0x7406, + 14030: 0x7483, + 14031: 0xF962, + 14032: 0x75E2, + 14033: 0x7C6C, + 14034: 0x7F79, + 14035: 0x7FB8, + 14036: 0x8389, + 14037: 0x88CF, + 14038: 0x88E1, + 14039: 0x91CC, + 14040: 0x91D0, + 14041: 0x96E2, + 14042: 0x9BC9, + 14043: 0x541D, + 14044: 0x6F7E, + 14045: 0x71D0, + 14046: 0x7498, + 14047: 0x85FA, + 14048: 0x8EAA, + 14049: 0x96A3, + 14050: 0x9C57, + 14051: 0x9E9F, + 14052: 0x6797, + 14053: 0x6DCB, + 14054: 0x7433, + 14055: 0x81E8, + 14056: 0x9716, + 14057: 0x782C, + 14058: 0x7ACB, + 14059: 0x7B20, + 14060: 0x7C92, + 14061: 0x6469, + 14062: 0x746A, + 14063: 0x75F2, + 14064: 0x78BC, + 14065: 0x78E8, + 14066: 0x99AC, + 14067: 0x9B54, + 14068: 0x9EBB, + 14069: 0x5BDE, + 14070: 0x5E55, + 14071: 0x6F20, + 14072: 0x819C, + 14073: 0x83AB, + 14074: 0x9088, + 14075: 0x4E07, + 14076: 0x534D, + 14077: 0x5A29, + 14078: 0x5DD2, + 14079: 0x5F4E, + 14080: 0x6162, + 14081: 0x633D, + 14082: 0x6669, + 14083: 0x66FC, + 14084: 0x6EFF, + 14085: 0x6F2B, + 14086: 0x7063, + 14087: 0x779E, + 14088: 0x842C, + 14089: 0x8513, + 14090: 0x883B, + 14091: 0x8F13, + 14092: 0x9945, + 14093: 0x9C3B, + 14094: 0x551C, + 14095: 0x62B9, + 14096: 0x672B, + 14097: 0x6CAB, + 14098: 0x8309, + 14099: 0x896A, + 14100: 0x977A, + 14101: 0x4EA1, + 14102: 0x5984, + 14103: 0x5FD8, + 14104: 0x5FD9, + 14105: 0x671B, + 14106: 0x7DB2, + 14107: 0x7F54, + 14108: 0x8292, + 14109: 0x832B, + 14110: 0x83BD, + 14111: 0x8F1E, + 14112: 0x9099, + 14113: 0x57CB, + 14114: 0x59B9, + 14115: 0x5A92, + 14116: 0x5BD0, + 14117: 0x6627, + 14118: 0x679A, + 14119: 0x6885, + 14120: 0x6BCF, + 14121: 0x7164, + 14122: 0x7F75, + 14123: 0x8CB7, + 14124: 0x8CE3, + 14125: 0x9081, + 14126: 0x9B45, + 14127: 0x8108, + 14128: 0x8C8A, + 14129: 0x964C, + 14130: 0x9A40, + 14131: 0x9EA5, + 14132: 0x5B5F, + 14133: 0x6C13, + 14134: 0x731B, + 14135: 0x76F2, + 14136: 0x76DF, + 14137: 0x840C, + 14138: 0x51AA, + 14139: 0x8993, + 14140: 0x514D, + 14141: 0x5195, + 14142: 0x52C9, + 14143: 0x68C9, + 14144: 0x6C94, + 14145: 0x7704, + 14146: 0x7720, + 14147: 0x7DBF, + 14148: 0x7DEC, + 14149: 0x9762, + 14150: 0x9EB5, + 14151: 0x6EC5, + 14152: 0x8511, + 14153: 0x51A5, + 14154: 0x540D, + 14155: 0x547D, + 14156: 0x660E, + 14157: 0x669D, + 14158: 0x6927, + 14159: 0x6E9F, + 14160: 0x76BF, + 14161: 0x7791, + 14162: 0x8317, + 14163: 0x84C2, + 14164: 0x879F, + 14165: 0x9169, + 14166: 0x9298, + 14167: 0x9CF4, + 14168: 0x8882, + 14169: 0x4FAE, + 14170: 0x5192, + 14171: 0x52DF, + 14172: 0x59C6, + 14173: 0x5E3D, + 14174: 0x6155, + 14175: 0x6478, + 14176: 0x6479, + 14177: 0x66AE, + 14178: 0x67D0, + 14179: 0x6A21, + 14180: 0x6BCD, + 14181: 0x6BDB, + 14182: 0x725F, + 14183: 0x7261, + 14184: 0x7441, + 14185: 0x7738, + 14186: 0x77DB, + 14187: 0x8017, + 14188: 0x82BC, + 14189: 0x8305, + 14190: 0x8B00, + 14191: 0x8B28, + 14192: 0x8C8C, + 14193: 0x6728, + 14194: 0x6C90, + 14195: 0x7267, + 14196: 0x76EE, + 14197: 0x7766, + 14198: 0x7A46, + 14199: 0x9DA9, + 14200: 0x6B7F, + 14201: 0x6C92, + 14202: 0x5922, + 14203: 0x6726, + 14204: 0x8499, + 14205: 0x536F, + 14206: 0x5893, + 14207: 0x5999, + 14208: 0x5EDF, + 14209: 0x63CF, + 14210: 0x6634, + 14211: 0x6773, + 14212: 0x6E3A, + 14213: 0x732B, + 14214: 0x7AD7, + 14215: 0x82D7, + 14216: 0x9328, + 14217: 0x52D9, + 14218: 0x5DEB, + 14219: 0x61AE, + 14220: 0x61CB, + 14221: 0x620A, + 14222: 0x62C7, + 14223: 0x64AB, + 14224: 0x65E0, + 14225: 0x6959, + 14226: 0x6B66, + 14227: 0x6BCB, + 14228: 0x7121, + 14229: 0x73F7, + 14230: 0x755D, + 14231: 0x7E46, + 14232: 0x821E, + 14233: 0x8302, + 14234: 0x856A, + 14235: 0x8AA3, + 14236: 0x8CBF, + 14237: 0x9727, + 14238: 0x9D61, + 14239: 0x58A8, + 14240: 0x9ED8, + 14241: 0x5011, + 14242: 0x520E, + 14243: 0x543B, + 14244: 0x554F, + 14245: 0x6587, + 14246: 0x6C76, + 14247: 0x7D0A, + 14248: 0x7D0B, + 14249: 0x805E, + 14250: 0x868A, + 14251: 0x9580, + 14252: 0x96EF, + 14253: 0x52FF, + 14254: 0x6C95, + 14255: 0x7269, + 14256: 0x5473, + 14257: 0x5A9A, + 14258: 0x5C3E, + 14259: 0x5D4B, + 14260: 0x5F4C, + 14261: 0x5FAE, + 14262: 0x672A, + 14263: 0x68B6, + 14264: 0x6963, + 14265: 0x6E3C, + 14266: 0x6E44, + 14267: 0x7709, + 14268: 0x7C73, + 14269: 0x7F8E, + 14270: 0x8587, + 14271: 0x8B0E, + 14272: 0x8FF7, + 14273: 0x9761, + 14274: 0x9EF4, + 14275: 0x5CB7, + 14276: 0x60B6, + 14277: 0x610D, + 14278: 0x61AB, + 14279: 0x654F, + 14280: 0x65FB, + 14281: 0x65FC, + 14282: 0x6C11, + 14283: 0x6CEF, + 14284: 0x739F, + 14285: 0x73C9, + 14286: 0x7DE1, + 14287: 0x9594, + 14288: 0x5BC6, + 14289: 0x871C, + 14290: 0x8B10, + 14291: 0x525D, + 14292: 0x535A, + 14293: 0x62CD, + 14294: 0x640F, + 14295: 0x64B2, + 14296: 0x6734, + 14297: 0x6A38, + 14298: 0x6CCA, + 14299: 0x73C0, + 14300: 0x749E, + 14301: 0x7B94, + 14302: 0x7C95, + 14303: 0x7E1B, + 14304: 0x818A, + 14305: 0x8236, + 14306: 0x8584, + 14307: 0x8FEB, + 14308: 0x96F9, + 14309: 0x99C1, + 14310: 0x4F34, + 14311: 0x534A, + 14312: 0x53CD, + 14313: 0x53DB, + 14314: 0x62CC, + 14315: 0x642C, + 14316: 0x6500, + 14317: 0x6591, + 14318: 0x69C3, + 14319: 0x6CEE, + 14320: 0x6F58, + 14321: 0x73ED, + 14322: 0x7554, + 14323: 0x7622, + 14324: 0x76E4, + 14325: 0x76FC, + 14326: 0x78D0, + 14327: 0x78FB, + 14328: 0x792C, + 14329: 0x7D46, + 14330: 0x822C, + 14331: 0x87E0, + 14332: 0x8FD4, + 14333: 0x9812, + 14334: 0x98EF, + 14335: 0x52C3, + 14336: 0x62D4, + 14337: 0x64A5, + 14338: 0x6E24, + 14339: 0x6F51, + 14340: 0x767C, + 14341: 0x8DCB, + 14342: 0x91B1, + 14343: 0x9262, + 14344: 0x9AEE, + 14345: 0x9B43, + 14346: 0x5023, + 14347: 0x508D, + 14348: 0x574A, + 14349: 0x59A8, + 14350: 0x5C28, + 14351: 0x5E47, + 14352: 0x5F77, + 14353: 0x623F, + 14354: 0x653E, + 14355: 0x65B9, + 14356: 0x65C1, + 14357: 0x6609, + 14358: 0x678B, + 14359: 0x699C, + 14360: 0x6EC2, + 14361: 0x78C5, + 14362: 0x7D21, + 14363: 0x80AA, + 14364: 0x8180, + 14365: 0x822B, + 14366: 0x82B3, + 14367: 0x84A1, + 14368: 0x868C, + 14369: 0x8A2A, + 14370: 0x8B17, + 14371: 0x90A6, + 14372: 0x9632, + 14373: 0x9F90, + 14374: 0x500D, + 14375: 0x4FF3, + 14376: 0xF963, + 14377: 0x57F9, + 14378: 0x5F98, + 14379: 0x62DC, + 14380: 0x6392, + 14381: 0x676F, + 14382: 0x6E43, + 14383: 0x7119, + 14384: 0x76C3, + 14385: 0x80CC, + 14386: 0x80DA, + 14387: 0x88F4, + 14388: 0x88F5, + 14389: 0x8919, + 14390: 0x8CE0, + 14391: 0x8F29, + 14392: 0x914D, + 14393: 0x966A, + 14394: 0x4F2F, + 14395: 0x4F70, + 14396: 0x5E1B, + 14397: 0x67CF, + 14398: 0x6822, + 14399: 0x767D, + 14400: 0x767E, + 14401: 0x9B44, + 14402: 0x5E61, + 14403: 0x6A0A, + 14404: 0x7169, + 14405: 0x71D4, + 14406: 0x756A, + 14407: 0xF964, + 14408: 0x7E41, + 14409: 0x8543, + 14410: 0x85E9, + 14411: 0x98DC, + 14412: 0x4F10, + 14413: 0x7B4F, + 14414: 0x7F70, + 14415: 0x95A5, + 14416: 0x51E1, + 14417: 0x5E06, + 14418: 0x68B5, + 14419: 0x6C3E, + 14420: 0x6C4E, + 14421: 0x6CDB, + 14422: 0x72AF, + 14423: 0x7BC4, + 14424: 0x8303, + 14425: 0x6CD5, + 14426: 0x743A, + 14427: 0x50FB, + 14428: 0x5288, + 14429: 0x58C1, + 14430: 0x64D8, + 14431: 0x6A97, + 14432: 0x74A7, + 14433: 0x7656, + 14434: 0x78A7, + 14435: 0x8617, + 14436: 0x95E2, + 14437: 0x9739, + 14438: 0xF965, + 14439: 0x535E, + 14440: 0x5F01, + 14441: 0x8B8A, + 14442: 0x8FA8, + 14443: 0x8FAF, + 14444: 0x908A, + 14445: 0x5225, + 14446: 0x77A5, + 14447: 0x9C49, + 14448: 0x9F08, + 14449: 0x4E19, + 14450: 0x5002, + 14451: 0x5175, + 14452: 0x5C5B, + 14453: 0x5E77, + 14454: 0x661E, + 14455: 0x663A, + 14456: 0x67C4, + 14457: 0x68C5, + 14458: 0x70B3, + 14459: 0x7501, + 14460: 0x75C5, + 14461: 0x79C9, + 14462: 0x7ADD, + 14463: 0x8F27, + 14464: 0x9920, + 14465: 0x9A08, + 14466: 0x4FDD, + 14467: 0x5821, + 14468: 0x5831, + 14469: 0x5BF6, + 14470: 0x666E, + 14471: 0x6B65, + 14472: 0x6D11, + 14473: 0x6E7A, + 14474: 0x6F7D, + 14475: 0x73E4, + 14476: 0x752B, + 14477: 0x83E9, + 14478: 0x88DC, + 14479: 0x8913, + 14480: 0x8B5C, + 14481: 0x8F14, + 14482: 0x4F0F, + 14483: 0x50D5, + 14484: 0x5310, + 14485: 0x535C, + 14486: 0x5B93, + 14487: 0x5FA9, + 14488: 0x670D, + 14489: 0x798F, + 14490: 0x8179, + 14491: 0x832F, + 14492: 0x8514, + 14493: 0x8907, + 14494: 0x8986, + 14495: 0x8F39, + 14496: 0x8F3B, + 14497: 0x99A5, + 14498: 0x9C12, + 14499: 0x672C, + 14500: 0x4E76, + 14501: 0x4FF8, + 14502: 0x5949, + 14503: 0x5C01, + 14504: 0x5CEF, + 14505: 0x5CF0, + 14506: 0x6367, + 14507: 0x68D2, + 14508: 0x70FD, + 14509: 0x71A2, + 14510: 0x742B, + 14511: 0x7E2B, + 14512: 0x84EC, + 14513: 0x8702, + 14514: 0x9022, + 14515: 0x92D2, + 14516: 0x9CF3, + 14517: 0x4E0D, + 14518: 0x4ED8, + 14519: 0x4FEF, + 14520: 0x5085, + 14521: 0x5256, + 14522: 0x526F, + 14523: 0x5426, + 14524: 0x5490, + 14525: 0x57E0, + 14526: 0x592B, + 14527: 0x5A66, + 14528: 0x5B5A, + 14529: 0x5B75, + 14530: 0x5BCC, + 14531: 0x5E9C, + 14532: 0xF966, + 14533: 0x6276, + 14534: 0x6577, + 14535: 0x65A7, + 14536: 0x6D6E, + 14537: 0x6EA5, + 14538: 0x7236, + 14539: 0x7B26, + 14540: 0x7C3F, + 14541: 0x7F36, + 14542: 0x8150, + 14543: 0x8151, + 14544: 0x819A, + 14545: 0x8240, + 14546: 0x8299, + 14547: 0x83A9, + 14548: 0x8A03, + 14549: 0x8CA0, + 14550: 0x8CE6, + 14551: 0x8CFB, + 14552: 0x8D74, + 14553: 0x8DBA, + 14554: 0x90E8, + 14555: 0x91DC, + 14556: 0x961C, + 14557: 0x9644, + 14558: 0x99D9, + 14559: 0x9CE7, + 14560: 0x5317, + 14561: 0x5206, + 14562: 0x5429, + 14563: 0x5674, + 14564: 0x58B3, + 14565: 0x5954, + 14566: 0x596E, + 14567: 0x5FFF, + 14568: 0x61A4, + 14569: 0x626E, + 14570: 0x6610, + 14571: 0x6C7E, + 14572: 0x711A, + 14573: 0x76C6, + 14574: 0x7C89, + 14575: 0x7CDE, + 14576: 0x7D1B, + 14577: 0x82AC, + 14578: 0x8CC1, + 14579: 0x96F0, + 14580: 0xF967, + 14581: 0x4F5B, + 14582: 0x5F17, + 14583: 0x5F7F, + 14584: 0x62C2, + 14585: 0x5D29, + 14586: 0x670B, + 14587: 0x68DA, + 14588: 0x787C, + 14589: 0x7E43, + 14590: 0x9D6C, + 14591: 0x4E15, + 14592: 0x5099, + 14593: 0x5315, + 14594: 0x532A, + 14595: 0x5351, + 14596: 0x5983, + 14597: 0x5A62, + 14598: 0x5E87, + 14599: 0x60B2, + 14600: 0x618A, + 14601: 0x6249, + 14602: 0x6279, + 14603: 0x6590, + 14604: 0x6787, + 14605: 0x69A7, + 14606: 0x6BD4, + 14607: 0x6BD6, + 14608: 0x6BD7, + 14609: 0x6BD8, + 14610: 0x6CB8, + 14611: 0xF968, + 14612: 0x7435, + 14613: 0x75FA, + 14614: 0x7812, + 14615: 0x7891, + 14616: 0x79D5, + 14617: 0x79D8, + 14618: 0x7C83, + 14619: 0x7DCB, + 14620: 0x7FE1, + 14621: 0x80A5, + 14622: 0x813E, + 14623: 0x81C2, + 14624: 0x83F2, + 14625: 0x871A, + 14626: 0x88E8, + 14627: 0x8AB9, + 14628: 0x8B6C, + 14629: 0x8CBB, + 14630: 0x9119, + 14631: 0x975E, + 14632: 0x98DB, + 14633: 0x9F3B, + 14634: 0x56AC, + 14635: 0x5B2A, + 14636: 0x5F6C, + 14637: 0x658C, + 14638: 0x6AB3, + 14639: 0x6BAF, + 14640: 0x6D5C, + 14641: 0x6FF1, + 14642: 0x7015, + 14643: 0x725D, + 14644: 0x73AD, + 14645: 0x8CA7, + 14646: 0x8CD3, + 14647: 0x983B, + 14648: 0x6191, + 14649: 0x6C37, + 14650: 0x8058, + 14651: 0x9A01, + 14652: 0x4E4D, + 14653: 0x4E8B, + 14654: 0x4E9B, + 14655: 0x4ED5, + 14656: 0x4F3A, + 14657: 0x4F3C, + 14658: 0x4F7F, + 14659: 0x4FDF, + 14660: 0x50FF, + 14661: 0x53F2, + 14662: 0x53F8, + 14663: 0x5506, + 14664: 0x55E3, + 14665: 0x56DB, + 14666: 0x58EB, + 14667: 0x5962, + 14668: 0x5A11, + 14669: 0x5BEB, + 14670: 0x5BFA, + 14671: 0x5C04, + 14672: 0x5DF3, + 14673: 0x5E2B, + 14674: 0x5F99, + 14675: 0x601D, + 14676: 0x6368, + 14677: 0x659C, + 14678: 0x65AF, + 14679: 0x67F6, + 14680: 0x67FB, + 14681: 0x68AD, + 14682: 0x6B7B, + 14683: 0x6C99, + 14684: 0x6CD7, + 14685: 0x6E23, + 14686: 0x7009, + 14687: 0x7345, + 14688: 0x7802, + 14689: 0x793E, + 14690: 0x7940, + 14691: 0x7960, + 14692: 0x79C1, + 14693: 0x7BE9, + 14694: 0x7D17, + 14695: 0x7D72, + 14696: 0x8086, + 14697: 0x820D, + 14698: 0x838E, + 14699: 0x84D1, + 14700: 0x86C7, + 14701: 0x88DF, + 14702: 0x8A50, + 14703: 0x8A5E, + 14704: 0x8B1D, + 14705: 0x8CDC, + 14706: 0x8D66, + 14707: 0x8FAD, + 14708: 0x90AA, + 14709: 0x98FC, + 14710: 0x99DF, + 14711: 0x9E9D, + 14712: 0x524A, + 14713: 0xF969, + 14714: 0x6714, + 14715: 0xF96A, + 14716: 0x5098, + 14717: 0x522A, + 14718: 0x5C71, + 14719: 0x6563, + 14720: 0x6C55, + 14721: 0x73CA, + 14722: 0x7523, + 14723: 0x759D, + 14724: 0x7B97, + 14725: 0x849C, + 14726: 0x9178, + 14727: 0x9730, + 14728: 0x4E77, + 14729: 0x6492, + 14730: 0x6BBA, + 14731: 0x715E, + 14732: 0x85A9, + 14733: 0x4E09, + 14734: 0xF96B, + 14735: 0x6749, + 14736: 0x68EE, + 14737: 0x6E17, + 14738: 0x829F, + 14739: 0x8518, + 14740: 0x886B, + 14741: 0x63F7, + 14742: 0x6F81, + 14743: 0x9212, + 14744: 0x98AF, + 14745: 0x4E0A, + 14746: 0x50B7, + 14747: 0x50CF, + 14748: 0x511F, + 14749: 0x5546, + 14750: 0x55AA, + 14751: 0x5617, + 14752: 0x5B40, + 14753: 0x5C19, + 14754: 0x5CE0, + 14755: 0x5E38, + 14756: 0x5E8A, + 14757: 0x5EA0, + 14758: 0x5EC2, + 14759: 0x60F3, + 14760: 0x6851, + 14761: 0x6A61, + 14762: 0x6E58, + 14763: 0x723D, + 14764: 0x7240, + 14765: 0x72C0, + 14766: 0x76F8, + 14767: 0x7965, + 14768: 0x7BB1, + 14769: 0x7FD4, + 14770: 0x88F3, + 14771: 0x89F4, + 14772: 0x8A73, + 14773: 0x8C61, + 14774: 0x8CDE, + 14775: 0x971C, + 14776: 0x585E, + 14777: 0x74BD, + 14778: 0x8CFD, + 14779: 0x55C7, + 14780: 0xF96C, + 14781: 0x7A61, + 14782: 0x7D22, + 14783: 0x8272, + 14784: 0x7272, + 14785: 0x751F, + 14786: 0x7525, + 14787: 0xF96D, + 14788: 0x7B19, + 14789: 0x5885, + 14790: 0x58FB, + 14791: 0x5DBC, + 14792: 0x5E8F, + 14793: 0x5EB6, + 14794: 0x5F90, + 14795: 0x6055, + 14796: 0x6292, + 14797: 0x637F, + 14798: 0x654D, + 14799: 0x6691, + 14800: 0x66D9, + 14801: 0x66F8, + 14802: 0x6816, + 14803: 0x68F2, + 14804: 0x7280, + 14805: 0x745E, + 14806: 0x7B6E, + 14807: 0x7D6E, + 14808: 0x7DD6, + 14809: 0x7F72, + 14810: 0x80E5, + 14811: 0x8212, + 14812: 0x85AF, + 14813: 0x897F, + 14814: 0x8A93, + 14815: 0x901D, + 14816: 0x92E4, + 14817: 0x9ECD, + 14818: 0x9F20, + 14819: 0x5915, + 14820: 0x596D, + 14821: 0x5E2D, + 14822: 0x60DC, + 14823: 0x6614, + 14824: 0x6673, + 14825: 0x6790, + 14826: 0x6C50, + 14827: 0x6DC5, + 14828: 0x6F5F, + 14829: 0x77F3, + 14830: 0x78A9, + 14831: 0x84C6, + 14832: 0x91CB, + 14833: 0x932B, + 14834: 0x4ED9, + 14835: 0x50CA, + 14836: 0x5148, + 14837: 0x5584, + 14838: 0x5B0B, + 14839: 0x5BA3, + 14840: 0x6247, + 14841: 0x657E, + 14842: 0x65CB, + 14843: 0x6E32, + 14844: 0x717D, + 14845: 0x7401, + 14846: 0x7444, + 14847: 0x7487, + 14848: 0x74BF, + 14849: 0x766C, + 14850: 0x79AA, + 14851: 0x7DDA, + 14852: 0x7E55, + 14853: 0x7FA8, + 14854: 0x817A, + 14855: 0x81B3, + 14856: 0x8239, + 14857: 0x861A, + 14858: 0x87EC, + 14859: 0x8A75, + 14860: 0x8DE3, + 14861: 0x9078, + 14862: 0x9291, + 14863: 0x9425, + 14864: 0x994D, + 14865: 0x9BAE, + 14866: 0x5368, + 14867: 0x5C51, + 14868: 0x6954, + 14869: 0x6CC4, + 14870: 0x6D29, + 14871: 0x6E2B, + 14872: 0x820C, + 14873: 0x859B, + 14874: 0x893B, + 14875: 0x8A2D, + 14876: 0x8AAA, + 14877: 0x96EA, + 14878: 0x9F67, + 14879: 0x5261, + 14880: 0x66B9, + 14881: 0x6BB2, + 14882: 0x7E96, + 14883: 0x87FE, + 14884: 0x8D0D, + 14885: 0x9583, + 14886: 0x965D, + 14887: 0x651D, + 14888: 0x6D89, + 14889: 0x71EE, + 14890: 0xF96E, + 14891: 0x57CE, + 14892: 0x59D3, + 14893: 0x5BAC, + 14894: 0x6027, + 14895: 0x60FA, + 14896: 0x6210, + 14897: 0x661F, + 14898: 0x665F, + 14899: 0x7329, + 14900: 0x73F9, + 14901: 0x76DB, + 14902: 0x7701, + 14903: 0x7B6C, + 14904: 0x8056, + 14905: 0x8072, + 14906: 0x8165, + 14907: 0x8AA0, + 14908: 0x9192, + 14909: 0x4E16, + 14910: 0x52E2, + 14911: 0x6B72, + 14912: 0x6D17, + 14913: 0x7A05, + 14914: 0x7B39, + 14915: 0x7D30, + 14916: 0xF96F, + 14917: 0x8CB0, + 14918: 0x53EC, + 14919: 0x562F, + 14920: 0x5851, + 14921: 0x5BB5, + 14922: 0x5C0F, + 14923: 0x5C11, + 14924: 0x5DE2, + 14925: 0x6240, + 14926: 0x6383, + 14927: 0x6414, + 14928: 0x662D, + 14929: 0x68B3, + 14930: 0x6CBC, + 14931: 0x6D88, + 14932: 0x6EAF, + 14933: 0x701F, + 14934: 0x70A4, + 14935: 0x71D2, + 14936: 0x7526, + 14937: 0x758F, + 14938: 0x758E, + 14939: 0x7619, + 14940: 0x7B11, + 14941: 0x7BE0, + 14942: 0x7C2B, + 14943: 0x7D20, + 14944: 0x7D39, + 14945: 0x852C, + 14946: 0x856D, + 14947: 0x8607, + 14948: 0x8A34, + 14949: 0x900D, + 14950: 0x9061, + 14951: 0x90B5, + 14952: 0x92B7, + 14953: 0x97F6, + 14954: 0x9A37, + 14955: 0x4FD7, + 14956: 0x5C6C, + 14957: 0x675F, + 14958: 0x6D91, + 14959: 0x7C9F, + 14960: 0x7E8C, + 14961: 0x8B16, + 14962: 0x8D16, + 14963: 0x901F, + 14964: 0x5B6B, + 14965: 0x5DFD, + 14966: 0x640D, + 14967: 0x84C0, + 14968: 0x905C, + 14969: 0x98E1, + 14970: 0x7387, + 14971: 0x5B8B, + 14972: 0x609A, + 14973: 0x677E, + 14974: 0x6DDE, + 14975: 0x8A1F, + 14976: 0x8AA6, + 14977: 0x9001, + 14978: 0x980C, + 14979: 0x5237, + 14980: 0xF970, + 14981: 0x7051, + 14982: 0x788E, + 14983: 0x9396, + 14984: 0x8870, + 14985: 0x91D7, + 14986: 0x4FEE, + 14987: 0x53D7, + 14988: 0x55FD, + 14989: 0x56DA, + 14990: 0x5782, + 14991: 0x58FD, + 14992: 0x5AC2, + 14993: 0x5B88, + 14994: 0x5CAB, + 14995: 0x5CC0, + 14996: 0x5E25, + 14997: 0x6101, + 14998: 0x620D, + 14999: 0x624B, + 15000: 0x6388, + 15001: 0x641C, + 15002: 0x6536, + 15003: 0x6578, + 15004: 0x6A39, + 15005: 0x6B8A, + 15006: 0x6C34, + 15007: 0x6D19, + 15008: 0x6F31, + 15009: 0x71E7, + 15010: 0x72E9, + 15011: 0x7378, + 15012: 0x7407, + 15013: 0x74B2, + 15014: 0x7626, + 15015: 0x7761, + 15016: 0x79C0, + 15017: 0x7A57, + 15018: 0x7AEA, + 15019: 0x7CB9, + 15020: 0x7D8F, + 15021: 0x7DAC, + 15022: 0x7E61, + 15023: 0x7F9E, + 15024: 0x8129, + 15025: 0x8331, + 15026: 0x8490, + 15027: 0x84DA, + 15028: 0x85EA, + 15029: 0x8896, + 15030: 0x8AB0, + 15031: 0x8B90, + 15032: 0x8F38, + 15033: 0x9042, + 15034: 0x9083, + 15035: 0x916C, + 15036: 0x9296, + 15037: 0x92B9, + 15038: 0x968B, + 15039: 0x96A7, + 15040: 0x96A8, + 15041: 0x96D6, + 15042: 0x9700, + 15043: 0x9808, + 15044: 0x9996, + 15045: 0x9AD3, + 15046: 0x9B1A, + 15047: 0x53D4, + 15048: 0x587E, + 15049: 0x5919, + 15050: 0x5B70, + 15051: 0x5BBF, + 15052: 0x6DD1, + 15053: 0x6F5A, + 15054: 0x719F, + 15055: 0x7421, + 15056: 0x74B9, + 15057: 0x8085, + 15058: 0x83FD, + 15059: 0x5DE1, + 15060: 0x5F87, + 15061: 0x5FAA, + 15062: 0x6042, + 15063: 0x65EC, + 15064: 0x6812, + 15065: 0x696F, + 15066: 0x6A53, + 15067: 0x6B89, + 15068: 0x6D35, + 15069: 0x6DF3, + 15070: 0x73E3, + 15071: 0x76FE, + 15072: 0x77AC, + 15073: 0x7B4D, + 15074: 0x7D14, + 15075: 0x8123, + 15076: 0x821C, + 15077: 0x8340, + 15078: 0x84F4, + 15079: 0x8563, + 15080: 0x8A62, + 15081: 0x8AC4, + 15082: 0x9187, + 15083: 0x931E, + 15084: 0x9806, + 15085: 0x99B4, + 15086: 0x620C, + 15087: 0x8853, + 15088: 0x8FF0, + 15089: 0x9265, + 15090: 0x5D07, + 15091: 0x5D27, + 15092: 0x5D69, + 15093: 0x745F, + 15094: 0x819D, + 15095: 0x8768, + 15096: 0x6FD5, + 15097: 0x62FE, + 15098: 0x7FD2, + 15099: 0x8936, + 15100: 0x8972, + 15101: 0x4E1E, + 15102: 0x4E58, + 15103: 0x50E7, + 15104: 0x52DD, + 15105: 0x5347, + 15106: 0x627F, + 15107: 0x6607, + 15108: 0x7E69, + 15109: 0x8805, + 15110: 0x965E, + 15111: 0x4F8D, + 15112: 0x5319, + 15113: 0x5636, + 15114: 0x59CB, + 15115: 0x5AA4, + 15116: 0x5C38, + 15117: 0x5C4E, + 15118: 0x5C4D, + 15119: 0x5E02, + 15120: 0x5F11, + 15121: 0x6043, + 15122: 0x65BD, + 15123: 0x662F, + 15124: 0x6642, + 15125: 0x67BE, + 15126: 0x67F4, + 15127: 0x731C, + 15128: 0x77E2, + 15129: 0x793A, + 15130: 0x7FC5, + 15131: 0x8494, + 15132: 0x84CD, + 15133: 0x8996, + 15134: 0x8A66, + 15135: 0x8A69, + 15136: 0x8AE1, + 15137: 0x8C55, + 15138: 0x8C7A, + 15139: 0x57F4, + 15140: 0x5BD4, + 15141: 0x5F0F, + 15142: 0x606F, + 15143: 0x62ED, + 15144: 0x690D, + 15145: 0x6B96, + 15146: 0x6E5C, + 15147: 0x7184, + 15148: 0x7BD2, + 15149: 0x8755, + 15150: 0x8B58, + 15151: 0x8EFE, + 15152: 0x98DF, + 15153: 0x98FE, + 15154: 0x4F38, + 15155: 0x4F81, + 15156: 0x4FE1, + 15157: 0x547B, + 15158: 0x5A20, + 15159: 0x5BB8, + 15160: 0x613C, + 15161: 0x65B0, + 15162: 0x6668, + 15163: 0x71FC, + 15164: 0x7533, + 15165: 0x795E, + 15166: 0x7D33, + 15167: 0x814E, + 15168: 0x81E3, + 15169: 0x8398, + 15170: 0x85AA, + 15171: 0x85CE, + 15172: 0x8703, + 15173: 0x8A0A, + 15174: 0x8EAB, + 15175: 0x8F9B, + 15176: 0xF971, + 15177: 0x8FC5, + 15178: 0x5931, + 15179: 0x5BA4, + 15180: 0x5BE6, + 15181: 0x6089, + 15182: 0x5BE9, + 15183: 0x5C0B, + 15184: 0x5FC3, + 15185: 0x6C81, + 15186: 0xF972, + 15187: 0x6DF1, + 15188: 0x700B, + 15189: 0x751A, + 15190: 0x82AF, + 15191: 0x8AF6, + 15192: 0x4EC0, + 15193: 0x5341, + 15194: 0xF973, + 15195: 0x96D9, + 15196: 0x6C0F, + 15197: 0x4E9E, + 15198: 0x4FC4, + 15199: 0x5152, + 15200: 0x555E, + 15201: 0x5A25, + 15202: 0x5CE8, + 15203: 0x6211, + 15204: 0x7259, + 15205: 0x82BD, + 15206: 0x83AA, + 15207: 0x86FE, + 15208: 0x8859, + 15209: 0x8A1D, + 15210: 0x963F, + 15211: 0x96C5, + 15212: 0x9913, + 15213: 0x9D09, + 15214: 0x9D5D, + 15215: 0x580A, + 15216: 0x5CB3, + 15217: 0x5DBD, + 15218: 0x5E44, + 15219: 0x60E1, + 15220: 0x6115, + 15221: 0x63E1, + 15222: 0x6A02, + 15223: 0x6E25, + 15224: 0x9102, + 15225: 0x9354, + 15226: 0x984E, + 15227: 0x9C10, + 15228: 0x9F77, + 15229: 0x5B89, + 15230: 0x5CB8, + 15231: 0x6309, + 15232: 0x664F, + 15233: 0x6848, + 15234: 0x773C, + 15235: 0x96C1, + 15236: 0x978D, + 15237: 0x9854, + 15238: 0x9B9F, + 15239: 0x65A1, + 15240: 0x8B01, + 15241: 0x8ECB, + 15242: 0x95BC, + 15243: 0x5535, + 15244: 0x5CA9, + 15245: 0x5DD6, + 15246: 0x5EB5, + 15247: 0x6697, + 15248: 0x764C, + 15249: 0x83F4, + 15250: 0x95C7, + 15251: 0x58D3, + 15252: 0x62BC, + 15253: 0x72CE, + 15254: 0x9D28, + 15255: 0x4EF0, + 15256: 0x592E, + 15257: 0x600F, + 15258: 0x663B, + 15259: 0x6B83, + 15260: 0x79E7, + 15261: 0x9D26, + 15262: 0x5393, + 15263: 0x54C0, + 15264: 0x57C3, + 15265: 0x5D16, + 15266: 0x611B, + 15267: 0x66D6, + 15268: 0x6DAF, + 15269: 0x788D, + 15270: 0x827E, + 15271: 0x9698, + 15272: 0x9744, + 15273: 0x5384, + 15274: 0x627C, + 15275: 0x6396, + 15276: 0x6DB2, + 15277: 0x7E0A, + 15278: 0x814B, + 15279: 0x984D, + 15280: 0x6AFB, + 15281: 0x7F4C, + 15282: 0x9DAF, + 15283: 0x9E1A, + 15284: 0x4E5F, + 15285: 0x503B, + 15286: 0x51B6, + 15287: 0x591C, + 15288: 0x60F9, + 15289: 0x63F6, + 15290: 0x6930, + 15291: 0x723A, + 15292: 0x8036, + 15293: 0xF974, + 15294: 0x91CE, + 15295: 0x5F31, + 15296: 0xF975, + 15297: 0xF976, + 15298: 0x7D04, + 15299: 0x82E5, + 15300: 0x846F, + 15301: 0x84BB, + 15302: 0x85E5, + 15303: 0x8E8D, + 15304: 0xF977, + 15305: 0x4F6F, + 15306: 0xF978, + 15307: 0xF979, + 15308: 0x58E4, + 15309: 0x5B43, + 15310: 0x6059, + 15311: 0x63DA, + 15312: 0x6518, + 15313: 0x656D, + 15314: 0x6698, + 15315: 0xF97A, + 15316: 0x694A, + 15317: 0x6A23, + 15318: 0x6D0B, + 15319: 0x7001, + 15320: 0x716C, + 15321: 0x75D2, + 15322: 0x760D, + 15323: 0x79B3, + 15324: 0x7A70, + 15325: 0xF97B, + 15326: 0x7F8A, + 15327: 0xF97C, + 15328: 0x8944, + 15329: 0xF97D, + 15330: 0x8B93, + 15331: 0x91C0, + 15332: 0x967D, + 15333: 0xF97E, + 15334: 0x990A, + 15335: 0x5704, + 15336: 0x5FA1, + 15337: 0x65BC, + 15338: 0x6F01, + 15339: 0x7600, + 15340: 0x79A6, + 15341: 0x8A9E, + 15342: 0x99AD, + 15343: 0x9B5A, + 15344: 0x9F6C, + 15345: 0x5104, + 15346: 0x61B6, + 15347: 0x6291, + 15348: 0x6A8D, + 15349: 0x81C6, + 15350: 0x5043, + 15351: 0x5830, + 15352: 0x5F66, + 15353: 0x7109, + 15354: 0x8A00, + 15355: 0x8AFA, + 15356: 0x5B7C, + 15357: 0x8616, + 15358: 0x4FFA, + 15359: 0x513C, + 15360: 0x56B4, + 15361: 0x5944, + 15362: 0x63A9, + 15363: 0x6DF9, + 15364: 0x5DAA, + 15365: 0x696D, + 15366: 0x5186, + 15367: 0x4E88, + 15368: 0x4F59, + 15369: 0xF97F, + 15370: 0xF980, + 15371: 0xF981, + 15372: 0x5982, + 15373: 0xF982, + 15374: 0xF983, + 15375: 0x6B5F, + 15376: 0x6C5D, + 15377: 0xF984, + 15378: 0x74B5, + 15379: 0x7916, + 15380: 0xF985, + 15381: 0x8207, + 15382: 0x8245, + 15383: 0x8339, + 15384: 0x8F3F, + 15385: 0x8F5D, + 15386: 0xF986, + 15387: 0x9918, + 15388: 0xF987, + 15389: 0xF988, + 15390: 0xF989, + 15391: 0x4EA6, + 15392: 0xF98A, + 15393: 0x57DF, + 15394: 0x5F79, + 15395: 0x6613, + 15396: 0xF98B, + 15397: 0xF98C, + 15398: 0x75AB, + 15399: 0x7E79, + 15400: 0x8B6F, + 15401: 0xF98D, + 15402: 0x9006, + 15403: 0x9A5B, + 15404: 0x56A5, + 15405: 0x5827, + 15406: 0x59F8, + 15407: 0x5A1F, + 15408: 0x5BB4, + 15409: 0xF98E, + 15410: 0x5EF6, + 15411: 0xF98F, + 15412: 0xF990, + 15413: 0x6350, + 15414: 0x633B, + 15415: 0xF991, + 15416: 0x693D, + 15417: 0x6C87, + 15418: 0x6CBF, + 15419: 0x6D8E, + 15420: 0x6D93, + 15421: 0x6DF5, + 15422: 0x6F14, + 15423: 0xF992, + 15424: 0x70DF, + 15425: 0x7136, + 15426: 0x7159, + 15427: 0xF993, + 15428: 0x71C3, + 15429: 0x71D5, + 15430: 0xF994, + 15431: 0x784F, + 15432: 0x786F, + 15433: 0xF995, + 15434: 0x7B75, + 15435: 0x7DE3, + 15436: 0xF996, + 15437: 0x7E2F, + 15438: 0xF997, + 15439: 0x884D, + 15440: 0x8EDF, + 15441: 0xF998, + 15442: 0xF999, + 15443: 0xF99A, + 15444: 0x925B, + 15445: 0xF99B, + 15446: 0x9CF6, + 15447: 0xF99C, + 15448: 0xF99D, + 15449: 0xF99E, + 15450: 0x6085, + 15451: 0x6D85, + 15452: 0xF99F, + 15453: 0x71B1, + 15454: 0xF9A0, + 15455: 0xF9A1, + 15456: 0x95B1, + 15457: 0x53AD, + 15458: 0xF9A2, + 15459: 0xF9A3, + 15460: 0xF9A4, + 15461: 0x67D3, + 15462: 0xF9A5, + 15463: 0x708E, + 15464: 0x7130, + 15465: 0x7430, + 15466: 0x8276, + 15467: 0x82D2, + 15468: 0xF9A6, + 15469: 0x95BB, + 15470: 0x9AE5, + 15471: 0x9E7D, + 15472: 0x66C4, + 15473: 0xF9A7, + 15474: 0x71C1, + 15475: 0x8449, + 15476: 0xF9A8, + 15477: 0xF9A9, + 15478: 0x584B, + 15479: 0xF9AA, + 15480: 0xF9AB, + 15481: 0x5DB8, + 15482: 0x5F71, + 15483: 0xF9AC, + 15484: 0x6620, + 15485: 0x668E, + 15486: 0x6979, + 15487: 0x69AE, + 15488: 0x6C38, + 15489: 0x6CF3, + 15490: 0x6E36, + 15491: 0x6F41, + 15492: 0x6FDA, + 15493: 0x701B, + 15494: 0x702F, + 15495: 0x7150, + 15496: 0x71DF, + 15497: 0x7370, + 15498: 0xF9AD, + 15499: 0x745B, + 15500: 0xF9AE, + 15501: 0x74D4, + 15502: 0x76C8, + 15503: 0x7A4E, + 15504: 0x7E93, + 15505: 0xF9AF, + 15506: 0xF9B0, + 15507: 0x82F1, + 15508: 0x8A60, + 15509: 0x8FCE, + 15510: 0xF9B1, + 15511: 0x9348, + 15512: 0xF9B2, + 15513: 0x9719, + 15514: 0xF9B3, + 15515: 0xF9B4, + 15516: 0x4E42, + 15517: 0x502A, + 15518: 0xF9B5, + 15519: 0x5208, + 15520: 0x53E1, + 15521: 0x66F3, + 15522: 0x6C6D, + 15523: 0x6FCA, + 15524: 0x730A, + 15525: 0x777F, + 15526: 0x7A62, + 15527: 0x82AE, + 15528: 0x85DD, + 15529: 0x8602, + 15530: 0xF9B6, + 15531: 0x88D4, + 15532: 0x8A63, + 15533: 0x8B7D, + 15534: 0x8C6B, + 15535: 0xF9B7, + 15536: 0x92B3, + 15537: 0xF9B8, + 15538: 0x9713, + 15539: 0x9810, + 15540: 0x4E94, + 15541: 0x4F0D, + 15542: 0x4FC9, + 15543: 0x50B2, + 15544: 0x5348, + 15545: 0x543E, + 15546: 0x5433, + 15547: 0x55DA, + 15548: 0x5862, + 15549: 0x58BA, + 15550: 0x5967, + 15551: 0x5A1B, + 15552: 0x5BE4, + 15553: 0x609F, + 15554: 0xF9B9, + 15555: 0x61CA, + 15556: 0x6556, + 15557: 0x65FF, + 15558: 0x6664, + 15559: 0x68A7, + 15560: 0x6C5A, + 15561: 0x6FB3, + 15562: 0x70CF, + 15563: 0x71AC, + 15564: 0x7352, + 15565: 0x7B7D, + 15566: 0x8708, + 15567: 0x8AA4, + 15568: 0x9C32, + 15569: 0x9F07, + 15570: 0x5C4B, + 15571: 0x6C83, + 15572: 0x7344, + 15573: 0x7389, + 15574: 0x923A, + 15575: 0x6EAB, + 15576: 0x7465, + 15577: 0x761F, + 15578: 0x7A69, + 15579: 0x7E15, + 15580: 0x860A, + 15581: 0x5140, + 15582: 0x58C5, + 15583: 0x64C1, + 15584: 0x74EE, + 15585: 0x7515, + 15586: 0x7670, + 15587: 0x7FC1, + 15588: 0x9095, + 15589: 0x96CD, + 15590: 0x9954, + 15591: 0x6E26, + 15592: 0x74E6, + 15593: 0x7AA9, + 15594: 0x7AAA, + 15595: 0x81E5, + 15596: 0x86D9, + 15597: 0x8778, + 15598: 0x8A1B, + 15599: 0x5A49, + 15600: 0x5B8C, + 15601: 0x5B9B, + 15602: 0x68A1, + 15603: 0x6900, + 15604: 0x6D63, + 15605: 0x73A9, + 15606: 0x7413, + 15607: 0x742C, + 15608: 0x7897, + 15609: 0x7DE9, + 15610: 0x7FEB, + 15611: 0x8118, + 15612: 0x8155, + 15613: 0x839E, + 15614: 0x8C4C, + 15615: 0x962E, + 15616: 0x9811, + 15617: 0x66F0, + 15618: 0x5F80, + 15619: 0x65FA, + 15620: 0x6789, + 15621: 0x6C6A, + 15622: 0x738B, + 15623: 0x502D, + 15624: 0x5A03, + 15625: 0x6B6A, + 15626: 0x77EE, + 15627: 0x5916, + 15628: 0x5D6C, + 15629: 0x5DCD, + 15630: 0x7325, + 15631: 0x754F, + 15632: 0xF9BA, + 15633: 0xF9BB, + 15634: 0x50E5, + 15635: 0x51F9, + 15636: 0x582F, + 15637: 0x592D, + 15638: 0x5996, + 15639: 0x59DA, + 15640: 0x5BE5, + 15641: 0xF9BC, + 15642: 0xF9BD, + 15643: 0x5DA2, + 15644: 0x62D7, + 15645: 0x6416, + 15646: 0x6493, + 15647: 0x64FE, + 15648: 0xF9BE, + 15649: 0x66DC, + 15650: 0xF9BF, + 15651: 0x6A48, + 15652: 0xF9C0, + 15653: 0x71FF, + 15654: 0x7464, + 15655: 0xF9C1, + 15656: 0x7A88, + 15657: 0x7AAF, + 15658: 0x7E47, + 15659: 0x7E5E, + 15660: 0x8000, + 15661: 0x8170, + 15662: 0xF9C2, + 15663: 0x87EF, + 15664: 0x8981, + 15665: 0x8B20, + 15666: 0x9059, + 15667: 0xF9C3, + 15668: 0x9080, + 15669: 0x9952, + 15670: 0x617E, + 15671: 0x6B32, + 15672: 0x6D74, + 15673: 0x7E1F, + 15674: 0x8925, + 15675: 0x8FB1, + 15676: 0x4FD1, + 15677: 0x50AD, + 15678: 0x5197, + 15679: 0x52C7, + 15680: 0x57C7, + 15681: 0x5889, + 15682: 0x5BB9, + 15683: 0x5EB8, + 15684: 0x6142, + 15685: 0x6995, + 15686: 0x6D8C, + 15687: 0x6E67, + 15688: 0x6EB6, + 15689: 0x7194, + 15690: 0x7462, + 15691: 0x7528, + 15692: 0x752C, + 15693: 0x8073, + 15694: 0x8338, + 15695: 0x84C9, + 15696: 0x8E0A, + 15697: 0x9394, + 15698: 0x93DE, + 15699: 0xF9C4, + 15700: 0x4E8E, + 15701: 0x4F51, + 15702: 0x5076, + 15703: 0x512A, + 15704: 0x53C8, + 15705: 0x53CB, + 15706: 0x53F3, + 15707: 0x5B87, + 15708: 0x5BD3, + 15709: 0x5C24, + 15710: 0x611A, + 15711: 0x6182, + 15712: 0x65F4, + 15713: 0x725B, + 15714: 0x7397, + 15715: 0x7440, + 15716: 0x76C2, + 15717: 0x7950, + 15718: 0x7991, + 15719: 0x79B9, + 15720: 0x7D06, + 15721: 0x7FBD, + 15722: 0x828B, + 15723: 0x85D5, + 15724: 0x865E, + 15725: 0x8FC2, + 15726: 0x9047, + 15727: 0x90F5, + 15728: 0x91EA, + 15729: 0x9685, + 15730: 0x96E8, + 15731: 0x96E9, + 15732: 0x52D6, + 15733: 0x5F67, + 15734: 0x65ED, + 15735: 0x6631, + 15736: 0x682F, + 15737: 0x715C, + 15738: 0x7A36, + 15739: 0x90C1, + 15740: 0x980A, + 15741: 0x4E91, + 15742: 0xF9C5, + 15743: 0x6A52, + 15744: 0x6B9E, + 15745: 0x6F90, + 15746: 0x7189, + 15747: 0x8018, + 15748: 0x82B8, + 15749: 0x8553, + 15750: 0x904B, + 15751: 0x9695, + 15752: 0x96F2, + 15753: 0x97FB, + 15754: 0x851A, + 15755: 0x9B31, + 15756: 0x4E90, + 15757: 0x718A, + 15758: 0x96C4, + 15759: 0x5143, + 15760: 0x539F, + 15761: 0x54E1, + 15762: 0x5713, + 15763: 0x5712, + 15764: 0x57A3, + 15765: 0x5A9B, + 15766: 0x5AC4, + 15767: 0x5BC3, + 15768: 0x6028, + 15769: 0x613F, + 15770: 0x63F4, + 15771: 0x6C85, + 15772: 0x6D39, + 15773: 0x6E72, + 15774: 0x6E90, + 15775: 0x7230, + 15776: 0x733F, + 15777: 0x7457, + 15778: 0x82D1, + 15779: 0x8881, + 15780: 0x8F45, + 15781: 0x9060, + 15782: 0xF9C6, + 15783: 0x9662, + 15784: 0x9858, + 15785: 0x9D1B, + 15786: 0x6708, + 15787: 0x8D8A, + 15788: 0x925E, + 15789: 0x4F4D, + 15790: 0x5049, + 15791: 0x50DE, + 15792: 0x5371, + 15793: 0x570D, + 15794: 0x59D4, + 15795: 0x5A01, + 15796: 0x5C09, + 15797: 0x6170, + 15798: 0x6690, + 15799: 0x6E2D, + 15800: 0x7232, + 15801: 0x744B, + 15802: 0x7DEF, + 15803: 0x80C3, + 15804: 0x840E, + 15805: 0x8466, + 15806: 0x853F, + 15807: 0x875F, + 15808: 0x885B, + 15809: 0x8918, + 15810: 0x8B02, + 15811: 0x9055, + 15812: 0x97CB, + 15813: 0x9B4F, + 15814: 0x4E73, + 15815: 0x4F91, + 15816: 0x5112, + 15817: 0x516A, + 15818: 0xF9C7, + 15819: 0x552F, + 15820: 0x55A9, + 15821: 0x5B7A, + 15822: 0x5BA5, + 15823: 0x5E7C, + 15824: 0x5E7D, + 15825: 0x5EBE, + 15826: 0x60A0, + 15827: 0x60DF, + 15828: 0x6108, + 15829: 0x6109, + 15830: 0x63C4, + 15831: 0x6538, + 15832: 0x6709, + 15833: 0xF9C8, + 15834: 0x67D4, + 15835: 0x67DA, + 15836: 0xF9C9, + 15837: 0x6961, + 15838: 0x6962, + 15839: 0x6CB9, + 15840: 0x6D27, + 15841: 0xF9CA, + 15842: 0x6E38, + 15843: 0xF9CB, + 15844: 0x6FE1, + 15845: 0x7336, + 15846: 0x7337, + 15847: 0xF9CC, + 15848: 0x745C, + 15849: 0x7531, + 15850: 0xF9CD, + 15851: 0x7652, + 15852: 0xF9CE, + 15853: 0xF9CF, + 15854: 0x7DAD, + 15855: 0x81FE, + 15856: 0x8438, + 15857: 0x88D5, + 15858: 0x8A98, + 15859: 0x8ADB, + 15860: 0x8AED, + 15861: 0x8E30, + 15862: 0x8E42, + 15863: 0x904A, + 15864: 0x903E, + 15865: 0x907A, + 15866: 0x9149, + 15867: 0x91C9, + 15868: 0x936E, + 15869: 0xF9D0, + 15870: 0xF9D1, + 15871: 0x5809, + 15872: 0xF9D2, + 15873: 0x6BD3, + 15874: 0x8089, + 15875: 0x80B2, + 15876: 0xF9D3, + 15877: 0xF9D4, + 15878: 0x5141, + 15879: 0x596B, + 15880: 0x5C39, + 15881: 0xF9D5, + 15882: 0xF9D6, + 15883: 0x6F64, + 15884: 0x73A7, + 15885: 0x80E4, + 15886: 0x8D07, + 15887: 0xF9D7, + 15888: 0x9217, + 15889: 0x958F, + 15890: 0xF9D8, + 15891: 0xF9D9, + 15892: 0xF9DA, + 15893: 0xF9DB, + 15894: 0x807F, + 15895: 0x620E, + 15896: 0x701C, + 15897: 0x7D68, + 15898: 0x878D, + 15899: 0xF9DC, + 15900: 0x57A0, + 15901: 0x6069, + 15902: 0x6147, + 15903: 0x6BB7, + 15904: 0x8ABE, + 15905: 0x9280, + 15906: 0x96B1, + 15907: 0x4E59, + 15908: 0x541F, + 15909: 0x6DEB, + 15910: 0x852D, + 15911: 0x9670, + 15912: 0x97F3, + 15913: 0x98EE, + 15914: 0x63D6, + 15915: 0x6CE3, + 15916: 0x9091, + 15917: 0x51DD, + 15918: 0x61C9, + 15919: 0x81BA, + 15920: 0x9DF9, + 15921: 0x4F9D, + 15922: 0x501A, + 15923: 0x5100, + 15924: 0x5B9C, + 15925: 0x610F, + 15926: 0x61FF, + 15927: 0x64EC, + 15928: 0x6905, + 15929: 0x6BC5, + 15930: 0x7591, + 15931: 0x77E3, + 15932: 0x7FA9, + 15933: 0x8264, + 15934: 0x858F, + 15935: 0x87FB, + 15936: 0x8863, + 15937: 0x8ABC, + 15938: 0x8B70, + 15939: 0x91AB, + 15940: 0x4E8C, + 15941: 0x4EE5, + 15942: 0x4F0A, + 15943: 0xF9DD, + 15944: 0xF9DE, + 15945: 0x5937, + 15946: 0x59E8, + 15947: 0xF9DF, + 15948: 0x5DF2, + 15949: 0x5F1B, + 15950: 0x5F5B, + 15951: 0x6021, + 15952: 0xF9E0, + 15953: 0xF9E1, + 15954: 0xF9E2, + 15955: 0xF9E3, + 15956: 0x723E, + 15957: 0x73E5, + 15958: 0xF9E4, + 15959: 0x7570, + 15960: 0x75CD, + 15961: 0xF9E5, + 15962: 0x79FB, + 15963: 0xF9E6, + 15964: 0x800C, + 15965: 0x8033, + 15966: 0x8084, + 15967: 0x82E1, + 15968: 0x8351, + 15969: 0xF9E7, + 15970: 0xF9E8, + 15971: 0x8CBD, + 15972: 0x8CB3, + 15973: 0x9087, + 15974: 0xF9E9, + 15975: 0xF9EA, + 15976: 0x98F4, + 15977: 0x990C, + 15978: 0xF9EB, + 15979: 0xF9EC, + 15980: 0x7037, + 15981: 0x76CA, + 15982: 0x7FCA, + 15983: 0x7FCC, + 15984: 0x7FFC, + 15985: 0x8B1A, + 15986: 0x4EBA, + 15987: 0x4EC1, + 15988: 0x5203, + 15989: 0x5370, + 15990: 0xF9ED, + 15991: 0x54BD, + 15992: 0x56E0, + 15993: 0x59FB, + 15994: 0x5BC5, + 15995: 0x5F15, + 15996: 0x5FCD, + 15997: 0x6E6E, + 15998: 0xF9EE, + 15999: 0xF9EF, + 16000: 0x7D6A, + 16001: 0x8335, + 16002: 0xF9F0, + 16003: 0x8693, + 16004: 0x8A8D, + 16005: 0xF9F1, + 16006: 0x976D, + 16007: 0x9777, + 16008: 0xF9F2, + 16009: 0xF9F3, + 16010: 0x4E00, + 16011: 0x4F5A, + 16012: 0x4F7E, + 16013: 0x58F9, + 16014: 0x65E5, + 16015: 0x6EA2, + 16016: 0x9038, + 16017: 0x93B0, + 16018: 0x99B9, + 16019: 0x4EFB, + 16020: 0x58EC, + 16021: 0x598A, + 16022: 0x59D9, + 16023: 0x6041, + 16024: 0xF9F4, + 16025: 0xF9F5, + 16026: 0x7A14, + 16027: 0xF9F6, + 16028: 0x834F, + 16029: 0x8CC3, + 16030: 0x5165, + 16031: 0x5344, + 16032: 0xF9F7, + 16033: 0xF9F8, + 16034: 0xF9F9, + 16035: 0x4ECD, + 16036: 0x5269, + 16037: 0x5B55, + 16038: 0x82BF, + 16039: 0x4ED4, + 16040: 0x523A, + 16041: 0x54A8, + 16042: 0x59C9, + 16043: 0x59FF, + 16044: 0x5B50, + 16045: 0x5B57, + 16046: 0x5B5C, + 16047: 0x6063, + 16048: 0x6148, + 16049: 0x6ECB, + 16050: 0x7099, + 16051: 0x716E, + 16052: 0x7386, + 16053: 0x74F7, + 16054: 0x75B5, + 16055: 0x78C1, + 16056: 0x7D2B, + 16057: 0x8005, + 16058: 0x81EA, + 16059: 0x8328, + 16060: 0x8517, + 16061: 0x85C9, + 16062: 0x8AEE, + 16063: 0x8CC7, + 16064: 0x96CC, + 16065: 0x4F5C, + 16066: 0x52FA, + 16067: 0x56BC, + 16068: 0x65AB, + 16069: 0x6628, + 16070: 0x707C, + 16071: 0x70B8, + 16072: 0x7235, + 16073: 0x7DBD, + 16074: 0x828D, + 16075: 0x914C, + 16076: 0x96C0, + 16077: 0x9D72, + 16078: 0x5B71, + 16079: 0x68E7, + 16080: 0x6B98, + 16081: 0x6F7A, + 16082: 0x76DE, + 16083: 0x5C91, + 16084: 0x66AB, + 16085: 0x6F5B, + 16086: 0x7BB4, + 16087: 0x7C2A, + 16088: 0x8836, + 16089: 0x96DC, + 16090: 0x4E08, + 16091: 0x4ED7, + 16092: 0x5320, + 16093: 0x5834, + 16094: 0x58BB, + 16095: 0x58EF, + 16096: 0x596C, + 16097: 0x5C07, + 16098: 0x5E33, + 16099: 0x5E84, + 16100: 0x5F35, + 16101: 0x638C, + 16102: 0x66B2, + 16103: 0x6756, + 16104: 0x6A1F, + 16105: 0x6AA3, + 16106: 0x6B0C, + 16107: 0x6F3F, + 16108: 0x7246, + 16109: 0xF9FA, + 16110: 0x7350, + 16111: 0x748B, + 16112: 0x7AE0, + 16113: 0x7CA7, + 16114: 0x8178, + 16115: 0x81DF, + 16116: 0x81E7, + 16117: 0x838A, + 16118: 0x846C, + 16119: 0x8523, + 16120: 0x8594, + 16121: 0x85CF, + 16122: 0x88DD, + 16123: 0x8D13, + 16124: 0x91AC, + 16125: 0x9577, + 16126: 0x969C, + 16127: 0x518D, + 16128: 0x54C9, + 16129: 0x5728, + 16130: 0x5BB0, + 16131: 0x624D, + 16132: 0x6750, + 16133: 0x683D, + 16134: 0x6893, + 16135: 0x6E3D, + 16136: 0x6ED3, + 16137: 0x707D, + 16138: 0x7E21, + 16139: 0x88C1, + 16140: 0x8CA1, + 16141: 0x8F09, + 16142: 0x9F4B, + 16143: 0x9F4E, + 16144: 0x722D, + 16145: 0x7B8F, + 16146: 0x8ACD, + 16147: 0x931A, + 16148: 0x4F47, + 16149: 0x4F4E, + 16150: 0x5132, + 16151: 0x5480, + 16152: 0x59D0, + 16153: 0x5E95, + 16154: 0x62B5, + 16155: 0x6775, + 16156: 0x696E, + 16157: 0x6A17, + 16158: 0x6CAE, + 16159: 0x6E1A, + 16160: 0x72D9, + 16161: 0x732A, + 16162: 0x75BD, + 16163: 0x7BB8, + 16164: 0x7D35, + 16165: 0x82E7, + 16166: 0x83F9, + 16167: 0x8457, + 16168: 0x85F7, + 16169: 0x8A5B, + 16170: 0x8CAF, + 16171: 0x8E87, + 16172: 0x9019, + 16173: 0x90B8, + 16174: 0x96CE, + 16175: 0x9F5F, + 16176: 0x52E3, + 16177: 0x540A, + 16178: 0x5AE1, + 16179: 0x5BC2, + 16180: 0x6458, + 16181: 0x6575, + 16182: 0x6EF4, + 16183: 0x72C4, + 16184: 0xF9FB, + 16185: 0x7684, + 16186: 0x7A4D, + 16187: 0x7B1B, + 16188: 0x7C4D, + 16189: 0x7E3E, + 16190: 0x7FDF, + 16191: 0x837B, + 16192: 0x8B2B, + 16193: 0x8CCA, + 16194: 0x8D64, + 16195: 0x8DE1, + 16196: 0x8E5F, + 16197: 0x8FEA, + 16198: 0x8FF9, + 16199: 0x9069, + 16200: 0x93D1, + 16201: 0x4F43, + 16202: 0x4F7A, + 16203: 0x50B3, + 16204: 0x5168, + 16205: 0x5178, + 16206: 0x524D, + 16207: 0x526A, + 16208: 0x5861, + 16209: 0x587C, + 16210: 0x5960, + 16211: 0x5C08, + 16212: 0x5C55, + 16213: 0x5EDB, + 16214: 0x609B, + 16215: 0x6230, + 16216: 0x6813, + 16217: 0x6BBF, + 16218: 0x6C08, + 16219: 0x6FB1, + 16220: 0x714E, + 16221: 0x7420, + 16222: 0x7530, + 16223: 0x7538, + 16224: 0x7551, + 16225: 0x7672, + 16226: 0x7B4C, + 16227: 0x7B8B, + 16228: 0x7BAD, + 16229: 0x7BC6, + 16230: 0x7E8F, + 16231: 0x8A6E, + 16232: 0x8F3E, + 16233: 0x8F49, + 16234: 0x923F, + 16235: 0x9293, + 16236: 0x9322, + 16237: 0x942B, + 16238: 0x96FB, + 16239: 0x985A, + 16240: 0x986B, + 16241: 0x991E, + 16242: 0x5207, + 16243: 0x622A, + 16244: 0x6298, + 16245: 0x6D59, + 16246: 0x7664, + 16247: 0x7ACA, + 16248: 0x7BC0, + 16249: 0x7D76, + 16250: 0x5360, + 16251: 0x5CBE, + 16252: 0x5E97, + 16253: 0x6F38, + 16254: 0x70B9, + 16255: 0x7C98, + 16256: 0x9711, + 16257: 0x9B8E, + 16258: 0x9EDE, + 16259: 0x63A5, + 16260: 0x647A, + 16261: 0x8776, + 16262: 0x4E01, + 16263: 0x4E95, + 16264: 0x4EAD, + 16265: 0x505C, + 16266: 0x5075, + 16267: 0x5448, + 16268: 0x59C3, + 16269: 0x5B9A, + 16270: 0x5E40, + 16271: 0x5EAD, + 16272: 0x5EF7, + 16273: 0x5F81, + 16274: 0x60C5, + 16275: 0x633A, + 16276: 0x653F, + 16277: 0x6574, + 16278: 0x65CC, + 16279: 0x6676, + 16280: 0x6678, + 16281: 0x67FE, + 16282: 0x6968, + 16283: 0x6A89, + 16284: 0x6B63, + 16285: 0x6C40, + 16286: 0x6DC0, + 16287: 0x6DE8, + 16288: 0x6E1F, + 16289: 0x6E5E, + 16290: 0x701E, + 16291: 0x70A1, + 16292: 0x738E, + 16293: 0x73FD, + 16294: 0x753A, + 16295: 0x775B, + 16296: 0x7887, + 16297: 0x798E, + 16298: 0x7A0B, + 16299: 0x7A7D, + 16300: 0x7CBE, + 16301: 0x7D8E, + 16302: 0x8247, + 16303: 0x8A02, + 16304: 0x8AEA, + 16305: 0x8C9E, + 16306: 0x912D, + 16307: 0x914A, + 16308: 0x91D8, + 16309: 0x9266, + 16310: 0x92CC, + 16311: 0x9320, + 16312: 0x9706, + 16313: 0x9756, + 16314: 0x975C, + 16315: 0x9802, + 16316: 0x9F0E, + 16317: 0x5236, + 16318: 0x5291, + 16319: 0x557C, + 16320: 0x5824, + 16321: 0x5E1D, + 16322: 0x5F1F, + 16323: 0x608C, + 16324: 0x63D0, + 16325: 0x68AF, + 16326: 0x6FDF, + 16327: 0x796D, + 16328: 0x7B2C, + 16329: 0x81CD, + 16330: 0x85BA, + 16331: 0x88FD, + 16332: 0x8AF8, + 16333: 0x8E44, + 16334: 0x918D, + 16335: 0x9664, + 16336: 0x969B, + 16337: 0x973D, + 16338: 0x984C, + 16339: 0x9F4A, + 16340: 0x4FCE, + 16341: 0x5146, + 16342: 0x51CB, + 16343: 0x52A9, + 16344: 0x5632, + 16345: 0x5F14, + 16346: 0x5F6B, + 16347: 0x63AA, + 16348: 0x64CD, + 16349: 0x65E9, + 16350: 0x6641, + 16351: 0x66FA, + 16352: 0x66F9, + 16353: 0x671D, + 16354: 0x689D, + 16355: 0x68D7, + 16356: 0x69FD, + 16357: 0x6F15, + 16358: 0x6F6E, + 16359: 0x7167, + 16360: 0x71E5, + 16361: 0x722A, + 16362: 0x74AA, + 16363: 0x773A, + 16364: 0x7956, + 16365: 0x795A, + 16366: 0x79DF, + 16367: 0x7A20, + 16368: 0x7A95, + 16369: 0x7C97, + 16370: 0x7CDF, + 16371: 0x7D44, + 16372: 0x7E70, + 16373: 0x8087, + 16374: 0x85FB, + 16375: 0x86A4, + 16376: 0x8A54, + 16377: 0x8ABF, + 16378: 0x8D99, + 16379: 0x8E81, + 16380: 0x9020, + 16381: 0x906D, + 16382: 0x91E3, + 16383: 0x963B, + 16384: 0x96D5, + 16385: 0x9CE5, + 16386: 0x65CF, + 16387: 0x7C07, + 16388: 0x8DB3, + 16389: 0x93C3, + 16390: 0x5B58, + 16391: 0x5C0A, + 16392: 0x5352, + 16393: 0x62D9, + 16394: 0x731D, + 16395: 0x5027, + 16396: 0x5B97, + 16397: 0x5F9E, + 16398: 0x60B0, + 16399: 0x616B, + 16400: 0x68D5, + 16401: 0x6DD9, + 16402: 0x742E, + 16403: 0x7A2E, + 16404: 0x7D42, + 16405: 0x7D9C, + 16406: 0x7E31, + 16407: 0x816B, + 16408: 0x8E2A, + 16409: 0x8E35, + 16410: 0x937E, + 16411: 0x9418, + 16412: 0x4F50, + 16413: 0x5750, + 16414: 0x5DE6, + 16415: 0x5EA7, + 16416: 0x632B, + 16417: 0x7F6A, + 16418: 0x4E3B, + 16419: 0x4F4F, + 16420: 0x4F8F, + 16421: 0x505A, + 16422: 0x59DD, + 16423: 0x80C4, + 16424: 0x546A, + 16425: 0x5468, + 16426: 0x55FE, + 16427: 0x594F, + 16428: 0x5B99, + 16429: 0x5DDE, + 16430: 0x5EDA, + 16431: 0x665D, + 16432: 0x6731, + 16433: 0x67F1, + 16434: 0x682A, + 16435: 0x6CE8, + 16436: 0x6D32, + 16437: 0x6E4A, + 16438: 0x6F8D, + 16439: 0x70B7, + 16440: 0x73E0, + 16441: 0x7587, + 16442: 0x7C4C, + 16443: 0x7D02, + 16444: 0x7D2C, + 16445: 0x7DA2, + 16446: 0x821F, + 16447: 0x86DB, + 16448: 0x8A3B, + 16449: 0x8A85, + 16450: 0x8D70, + 16451: 0x8E8A, + 16452: 0x8F33, + 16453: 0x9031, + 16454: 0x914E, + 16455: 0x9152, + 16456: 0x9444, + 16457: 0x99D0, + 16458: 0x7AF9, + 16459: 0x7CA5, + 16460: 0x4FCA, + 16461: 0x5101, + 16462: 0x51C6, + 16463: 0x57C8, + 16464: 0x5BEF, + 16465: 0x5CFB, + 16466: 0x6659, + 16467: 0x6A3D, + 16468: 0x6D5A, + 16469: 0x6E96, + 16470: 0x6FEC, + 16471: 0x710C, + 16472: 0x756F, + 16473: 0x7AE3, + 16474: 0x8822, + 16475: 0x9021, + 16476: 0x9075, + 16477: 0x96CB, + 16478: 0x99FF, + 16479: 0x8301, + 16480: 0x4E2D, + 16481: 0x4EF2, + 16482: 0x8846, + 16483: 0x91CD, + 16484: 0x537D, + 16485: 0x6ADB, + 16486: 0x696B, + 16487: 0x6C41, + 16488: 0x847A, + 16489: 0x589E, + 16490: 0x618E, + 16491: 0x66FE, + 16492: 0x62EF, + 16493: 0x70DD, + 16494: 0x7511, + 16495: 0x75C7, + 16496: 0x7E52, + 16497: 0x84B8, + 16498: 0x8B49, + 16499: 0x8D08, + 16500: 0x4E4B, + 16501: 0x53EA, + 16502: 0x54AB, + 16503: 0x5730, + 16504: 0x5740, + 16505: 0x5FD7, + 16506: 0x6301, + 16507: 0x6307, + 16508: 0x646F, + 16509: 0x652F, + 16510: 0x65E8, + 16511: 0x667A, + 16512: 0x679D, + 16513: 0x67B3, + 16514: 0x6B62, + 16515: 0x6C60, + 16516: 0x6C9A, + 16517: 0x6F2C, + 16518: 0x77E5, + 16519: 0x7825, + 16520: 0x7949, + 16521: 0x7957, + 16522: 0x7D19, + 16523: 0x80A2, + 16524: 0x8102, + 16525: 0x81F3, + 16526: 0x829D, + 16527: 0x82B7, + 16528: 0x8718, + 16529: 0x8A8C, + 16530: 0xF9FC, + 16531: 0x8D04, + 16532: 0x8DBE, + 16533: 0x9072, + 16534: 0x76F4, + 16535: 0x7A19, + 16536: 0x7A37, + 16537: 0x7E54, + 16538: 0x8077, + 16539: 0x5507, + 16540: 0x55D4, + 16541: 0x5875, + 16542: 0x632F, + 16543: 0x6422, + 16544: 0x6649, + 16545: 0x664B, + 16546: 0x686D, + 16547: 0x699B, + 16548: 0x6B84, + 16549: 0x6D25, + 16550: 0x6EB1, + 16551: 0x73CD, + 16552: 0x7468, + 16553: 0x74A1, + 16554: 0x755B, + 16555: 0x75B9, + 16556: 0x76E1, + 16557: 0x771E, + 16558: 0x778B, + 16559: 0x79E6, + 16560: 0x7E09, + 16561: 0x7E1D, + 16562: 0x81FB, + 16563: 0x852F, + 16564: 0x8897, + 16565: 0x8A3A, + 16566: 0x8CD1, + 16567: 0x8EEB, + 16568: 0x8FB0, + 16569: 0x9032, + 16570: 0x93AD, + 16571: 0x9663, + 16572: 0x9673, + 16573: 0x9707, + 16574: 0x4F84, + 16575: 0x53F1, + 16576: 0x59EA, + 16577: 0x5AC9, + 16578: 0x5E19, + 16579: 0x684E, + 16580: 0x74C6, + 16581: 0x75BE, + 16582: 0x79E9, + 16583: 0x7A92, + 16584: 0x81A3, + 16585: 0x86ED, + 16586: 0x8CEA, + 16587: 0x8DCC, + 16588: 0x8FED, + 16589: 0x659F, + 16590: 0x6715, + 16591: 0xF9FD, + 16592: 0x57F7, + 16593: 0x6F57, + 16594: 0x7DDD, + 16595: 0x8F2F, + 16596: 0x93F6, + 16597: 0x96C6, + 16598: 0x5FB5, + 16599: 0x61F2, + 16600: 0x6F84, + 16601: 0x4E14, + 16602: 0x4F98, + 16603: 0x501F, + 16604: 0x53C9, + 16605: 0x55DF, + 16606: 0x5D6F, + 16607: 0x5DEE, + 16608: 0x6B21, + 16609: 0x6B64, + 16610: 0x78CB, + 16611: 0x7B9A, + 16612: 0xF9FE, + 16613: 0x8E49, + 16614: 0x8ECA, + 16615: 0x906E, + 16616: 0x6349, + 16617: 0x643E, + 16618: 0x7740, + 16619: 0x7A84, + 16620: 0x932F, + 16621: 0x947F, + 16622: 0x9F6A, + 16623: 0x64B0, + 16624: 0x6FAF, + 16625: 0x71E6, + 16626: 0x74A8, + 16627: 0x74DA, + 16628: 0x7AC4, + 16629: 0x7C12, + 16630: 0x7E82, + 16631: 0x7CB2, + 16632: 0x7E98, + 16633: 0x8B9A, + 16634: 0x8D0A, + 16635: 0x947D, + 16636: 0x9910, + 16637: 0x994C, + 16638: 0x5239, + 16639: 0x5BDF, + 16640: 0x64E6, + 16641: 0x672D, + 16642: 0x7D2E, + 16643: 0x50ED, + 16644: 0x53C3, + 16645: 0x5879, + 16646: 0x6158, + 16647: 0x6159, + 16648: 0x61FA, + 16649: 0x65AC, + 16650: 0x7AD9, + 16651: 0x8B92, + 16652: 0x8B96, + 16653: 0x5009, + 16654: 0x5021, + 16655: 0x5275, + 16656: 0x5531, + 16657: 0x5A3C, + 16658: 0x5EE0, + 16659: 0x5F70, + 16660: 0x6134, + 16661: 0x655E, + 16662: 0x660C, + 16663: 0x6636, + 16664: 0x66A2, + 16665: 0x69CD, + 16666: 0x6EC4, + 16667: 0x6F32, + 16668: 0x7316, + 16669: 0x7621, + 16670: 0x7A93, + 16671: 0x8139, + 16672: 0x8259, + 16673: 0x83D6, + 16674: 0x84BC, + 16675: 0x50B5, + 16676: 0x57F0, + 16677: 0x5BC0, + 16678: 0x5BE8, + 16679: 0x5F69, + 16680: 0x63A1, + 16681: 0x7826, + 16682: 0x7DB5, + 16683: 0x83DC, + 16684: 0x8521, + 16685: 0x91C7, + 16686: 0x91F5, + 16687: 0x518A, + 16688: 0x67F5, + 16689: 0x7B56, + 16690: 0x8CAC, + 16691: 0x51C4, + 16692: 0x59BB, + 16693: 0x60BD, + 16694: 0x8655, + 16695: 0x501C, + 16696: 0xF9FF, + 16697: 0x5254, + 16698: 0x5C3A, + 16699: 0x617D, + 16700: 0x621A, + 16701: 0x62D3, + 16702: 0x64F2, + 16703: 0x65A5, + 16704: 0x6ECC, + 16705: 0x7620, + 16706: 0x810A, + 16707: 0x8E60, + 16708: 0x965F, + 16709: 0x96BB, + 16710: 0x4EDF, + 16711: 0x5343, + 16712: 0x5598, + 16713: 0x5929, + 16714: 0x5DDD, + 16715: 0x64C5, + 16716: 0x6CC9, + 16717: 0x6DFA, + 16718: 0x7394, + 16719: 0x7A7F, + 16720: 0x821B, + 16721: 0x85A6, + 16722: 0x8CE4, + 16723: 0x8E10, + 16724: 0x9077, + 16725: 0x91E7, + 16726: 0x95E1, + 16727: 0x9621, + 16728: 0x97C6, + 16729: 0x51F8, + 16730: 0x54F2, + 16731: 0x5586, + 16732: 0x5FB9, + 16733: 0x64A4, + 16734: 0x6F88, + 16735: 0x7DB4, + 16736: 0x8F1F, + 16737: 0x8F4D, + 16738: 0x9435, + 16739: 0x50C9, + 16740: 0x5C16, + 16741: 0x6CBE, + 16742: 0x6DFB, + 16743: 0x751B, + 16744: 0x77BB, + 16745: 0x7C3D, + 16746: 0x7C64, + 16747: 0x8A79, + 16748: 0x8AC2, + 16749: 0x581E, + 16750: 0x59BE, + 16751: 0x5E16, + 16752: 0x6377, + 16753: 0x7252, + 16754: 0x758A, + 16755: 0x776B, + 16756: 0x8ADC, + 16757: 0x8CBC, + 16758: 0x8F12, + 16759: 0x5EF3, + 16760: 0x6674, + 16761: 0x6DF8, + 16762: 0x807D, + 16763: 0x83C1, + 16764: 0x8ACB, + 16765: 0x9751, + 16766: 0x9BD6, + 16767: 0xFA00, + 16768: 0x5243, + 16769: 0x66FF, + 16770: 0x6D95, + 16771: 0x6EEF, + 16772: 0x7DE0, + 16773: 0x8AE6, + 16774: 0x902E, + 16775: 0x905E, + 16776: 0x9AD4, + 16777: 0x521D, + 16778: 0x527F, + 16779: 0x54E8, + 16780: 0x6194, + 16781: 0x6284, + 16782: 0x62DB, + 16783: 0x68A2, + 16784: 0x6912, + 16785: 0x695A, + 16786: 0x6A35, + 16787: 0x7092, + 16788: 0x7126, + 16789: 0x785D, + 16790: 0x7901, + 16791: 0x790E, + 16792: 0x79D2, + 16793: 0x7A0D, + 16794: 0x8096, + 16795: 0x8278, + 16796: 0x82D5, + 16797: 0x8349, + 16798: 0x8549, + 16799: 0x8C82, + 16800: 0x8D85, + 16801: 0x9162, + 16802: 0x918B, + 16803: 0x91AE, + 16804: 0x4FC3, + 16805: 0x56D1, + 16806: 0x71ED, + 16807: 0x77D7, + 16808: 0x8700, + 16809: 0x89F8, + 16810: 0x5BF8, + 16811: 0x5FD6, + 16812: 0x6751, + 16813: 0x90A8, + 16814: 0x53E2, + 16815: 0x585A, + 16816: 0x5BF5, + 16817: 0x60A4, + 16818: 0x6181, + 16819: 0x6460, + 16820: 0x7E3D, + 16821: 0x8070, + 16822: 0x8525, + 16823: 0x9283, + 16824: 0x64AE, + 16825: 0x50AC, + 16826: 0x5D14, + 16827: 0x6700, + 16828: 0x589C, + 16829: 0x62BD, + 16830: 0x63A8, + 16831: 0x690E, + 16832: 0x6978, + 16833: 0x6A1E, + 16834: 0x6E6B, + 16835: 0x76BA, + 16836: 0x79CB, + 16837: 0x82BB, + 16838: 0x8429, + 16839: 0x8ACF, + 16840: 0x8DA8, + 16841: 0x8FFD, + 16842: 0x9112, + 16843: 0x914B, + 16844: 0x919C, + 16845: 0x9310, + 16846: 0x9318, + 16847: 0x939A, + 16848: 0x96DB, + 16849: 0x9A36, + 16850: 0x9C0D, + 16851: 0x4E11, + 16852: 0x755C, + 16853: 0x795D, + 16854: 0x7AFA, + 16855: 0x7B51, + 16856: 0x7BC9, + 16857: 0x7E2E, + 16858: 0x84C4, + 16859: 0x8E59, + 16860: 0x8E74, + 16861: 0x8EF8, + 16862: 0x9010, + 16863: 0x6625, + 16864: 0x693F, + 16865: 0x7443, + 16866: 0x51FA, + 16867: 0x672E, + 16868: 0x9EDC, + 16869: 0x5145, + 16870: 0x5FE0, + 16871: 0x6C96, + 16872: 0x87F2, + 16873: 0x885D, + 16874: 0x8877, + 16875: 0x60B4, + 16876: 0x81B5, + 16877: 0x8403, + 16878: 0x8D05, + 16879: 0x53D6, + 16880: 0x5439, + 16881: 0x5634, + 16882: 0x5A36, + 16883: 0x5C31, + 16884: 0x708A, + 16885: 0x7FE0, + 16886: 0x805A, + 16887: 0x8106, + 16888: 0x81ED, + 16889: 0x8DA3, + 16890: 0x9189, + 16891: 0x9A5F, + 16892: 0x9DF2, + 16893: 0x5074, + 16894: 0x4EC4, + 16895: 0x53A0, + 16896: 0x60FB, + 16897: 0x6E2C, + 16898: 0x5C64, + 16899: 0x4F88, + 16900: 0x5024, + 16901: 0x55E4, + 16902: 0x5CD9, + 16903: 0x5E5F, + 16904: 0x6065, + 16905: 0x6894, + 16906: 0x6CBB, + 16907: 0x6DC4, + 16908: 0x71BE, + 16909: 0x75D4, + 16910: 0x75F4, + 16911: 0x7661, + 16912: 0x7A1A, + 16913: 0x7A49, + 16914: 0x7DC7, + 16915: 0x7DFB, + 16916: 0x7F6E, + 16917: 0x81F4, + 16918: 0x86A9, + 16919: 0x8F1C, + 16920: 0x96C9, + 16921: 0x99B3, + 16922: 0x9F52, + 16923: 0x5247, + 16924: 0x52C5, + 16925: 0x98ED, + 16926: 0x89AA, + 16927: 0x4E03, + 16928: 0x67D2, + 16929: 0x6F06, + 16930: 0x4FB5, + 16931: 0x5BE2, + 16932: 0x6795, + 16933: 0x6C88, + 16934: 0x6D78, + 16935: 0x741B, + 16936: 0x7827, + 16937: 0x91DD, + 16938: 0x937C, + 16939: 0x87C4, + 16940: 0x79E4, + 16941: 0x7A31, + 16942: 0x5FEB, + 16943: 0x4ED6, + 16944: 0x54A4, + 16945: 0x553E, + 16946: 0x58AE, + 16947: 0x59A5, + 16948: 0x60F0, + 16949: 0x6253, + 16950: 0x62D6, + 16951: 0x6736, + 16952: 0x6955, + 16953: 0x8235, + 16954: 0x9640, + 16955: 0x99B1, + 16956: 0x99DD, + 16957: 0x502C, + 16958: 0x5353, + 16959: 0x5544, + 16960: 0x577C, + 16961: 0xFA01, + 16962: 0x6258, + 16963: 0xFA02, + 16964: 0x64E2, + 16965: 0x666B, + 16966: 0x67DD, + 16967: 0x6FC1, + 16968: 0x6FEF, + 16969: 0x7422, + 16970: 0x7438, + 16971: 0x8A17, + 16972: 0x9438, + 16973: 0x5451, + 16974: 0x5606, + 16975: 0x5766, + 16976: 0x5F48, + 16977: 0x619A, + 16978: 0x6B4E, + 16979: 0x7058, + 16980: 0x70AD, + 16981: 0x7DBB, + 16982: 0x8A95, + 16983: 0x596A, + 16984: 0x812B, + 16985: 0x63A2, + 16986: 0x7708, + 16987: 0x803D, + 16988: 0x8CAA, + 16989: 0x5854, + 16990: 0x642D, + 16991: 0x69BB, + 16992: 0x5B95, + 16993: 0x5E11, + 16994: 0x6E6F, + 16995: 0xFA03, + 16996: 0x8569, + 16997: 0x514C, + 16998: 0x53F0, + 16999: 0x592A, + 17000: 0x6020, + 17001: 0x614B, + 17002: 0x6B86, + 17003: 0x6C70, + 17004: 0x6CF0, + 17005: 0x7B1E, + 17006: 0x80CE, + 17007: 0x82D4, + 17008: 0x8DC6, + 17009: 0x90B0, + 17010: 0x98B1, + 17011: 0xFA04, + 17012: 0x64C7, + 17013: 0x6FA4, + 17014: 0x6491, + 17015: 0x6504, + 17016: 0x514E, + 17017: 0x5410, + 17018: 0x571F, + 17019: 0x8A0E, + 17020: 0x615F, + 17021: 0x6876, + 17022: 0xFA05, + 17023: 0x75DB, + 17024: 0x7B52, + 17025: 0x7D71, + 17026: 0x901A, + 17027: 0x5806, + 17028: 0x69CC, + 17029: 0x817F, + 17030: 0x892A, + 17031: 0x9000, + 17032: 0x9839, + 17033: 0x5078, + 17034: 0x5957, + 17035: 0x59AC, + 17036: 0x6295, + 17037: 0x900F, + 17038: 0x9B2A, + 17039: 0x615D, + 17040: 0x7279, + 17041: 0x95D6, + 17042: 0x5761, + 17043: 0x5A46, + 17044: 0x5DF4, + 17045: 0x628A, + 17046: 0x64AD, + 17047: 0x64FA, + 17048: 0x6777, + 17049: 0x6CE2, + 17050: 0x6D3E, + 17051: 0x722C, + 17052: 0x7436, + 17053: 0x7834, + 17054: 0x7F77, + 17055: 0x82AD, + 17056: 0x8DDB, + 17057: 0x9817, + 17058: 0x5224, + 17059: 0x5742, + 17060: 0x677F, + 17061: 0x7248, + 17062: 0x74E3, + 17063: 0x8CA9, + 17064: 0x8FA6, + 17065: 0x9211, + 17066: 0x962A, + 17067: 0x516B, + 17068: 0x53ED, + 17069: 0x634C, + 17070: 0x4F69, + 17071: 0x5504, + 17072: 0x6096, + 17073: 0x6557, + 17074: 0x6C9B, + 17075: 0x6D7F, + 17076: 0x724C, + 17077: 0x72FD, + 17078: 0x7A17, + 17079: 0x8987, + 17080: 0x8C9D, + 17081: 0x5F6D, + 17082: 0x6F8E, + 17083: 0x70F9, + 17084: 0x81A8, + 17085: 0x610E, + 17086: 0x4FBF, + 17087: 0x504F, + 17088: 0x6241, + 17089: 0x7247, + 17090: 0x7BC7, + 17091: 0x7DE8, + 17092: 0x7FE9, + 17093: 0x904D, + 17094: 0x97AD, + 17095: 0x9A19, + 17096: 0x8CB6, + 17097: 0x576A, + 17098: 0x5E73, + 17099: 0x67B0, + 17100: 0x840D, + 17101: 0x8A55, + 17102: 0x5420, + 17103: 0x5B16, + 17104: 0x5E63, + 17105: 0x5EE2, + 17106: 0x5F0A, + 17107: 0x6583, + 17108: 0x80BA, + 17109: 0x853D, + 17110: 0x9589, + 17111: 0x965B, + 17112: 0x4F48, + 17113: 0x5305, + 17114: 0x530D, + 17115: 0x530F, + 17116: 0x5486, + 17117: 0x54FA, + 17118: 0x5703, + 17119: 0x5E03, + 17120: 0x6016, + 17121: 0x629B, + 17122: 0x62B1, + 17123: 0x6355, + 17124: 0xFA06, + 17125: 0x6CE1, + 17126: 0x6D66, + 17127: 0x75B1, + 17128: 0x7832, + 17129: 0x80DE, + 17130: 0x812F, + 17131: 0x82DE, + 17132: 0x8461, + 17133: 0x84B2, + 17134: 0x888D, + 17135: 0x8912, + 17136: 0x900B, + 17137: 0x92EA, + 17138: 0x98FD, + 17139: 0x9B91, + 17140: 0x5E45, + 17141: 0x66B4, + 17142: 0x66DD, + 17143: 0x7011, + 17144: 0x7206, + 17145: 0xFA07, + 17146: 0x4FF5, + 17147: 0x527D, + 17148: 0x5F6A, + 17149: 0x6153, + 17150: 0x6753, + 17151: 0x6A19, + 17152: 0x6F02, + 17153: 0x74E2, + 17154: 0x7968, + 17155: 0x8868, + 17156: 0x8C79, + 17157: 0x98C7, + 17158: 0x98C4, + 17159: 0x9A43, + 17160: 0x54C1, + 17161: 0x7A1F, + 17162: 0x6953, + 17163: 0x8AF7, + 17164: 0x8C4A, + 17165: 0x98A8, + 17166: 0x99AE, + 17167: 0x5F7C, + 17168: 0x62AB, + 17169: 0x75B2, + 17170: 0x76AE, + 17171: 0x88AB, + 17172: 0x907F, + 17173: 0x9642, + 17174: 0x5339, + 17175: 0x5F3C, + 17176: 0x5FC5, + 17177: 0x6CCC, + 17178: 0x73CC, + 17179: 0x7562, + 17180: 0x758B, + 17181: 0x7B46, + 17182: 0x82FE, + 17183: 0x999D, + 17184: 0x4E4F, + 17185: 0x903C, + 17186: 0x4E0B, + 17187: 0x4F55, + 17188: 0x53A6, + 17189: 0x590F, + 17190: 0x5EC8, + 17191: 0x6630, + 17192: 0x6CB3, + 17193: 0x7455, + 17194: 0x8377, + 17195: 0x8766, + 17196: 0x8CC0, + 17197: 0x9050, + 17198: 0x971E, + 17199: 0x9C15, + 17200: 0x58D1, + 17201: 0x5B78, + 17202: 0x8650, + 17203: 0x8B14, + 17204: 0x9DB4, + 17205: 0x5BD2, + 17206: 0x6068, + 17207: 0x608D, + 17208: 0x65F1, + 17209: 0x6C57, + 17210: 0x6F22, + 17211: 0x6FA3, + 17212: 0x701A, + 17213: 0x7F55, + 17214: 0x7FF0, + 17215: 0x9591, + 17216: 0x9592, + 17217: 0x9650, + 17218: 0x97D3, + 17219: 0x5272, + 17220: 0x8F44, + 17221: 0x51FD, + 17222: 0x542B, + 17223: 0x54B8, + 17224: 0x5563, + 17225: 0x558A, + 17226: 0x6ABB, + 17227: 0x6DB5, + 17228: 0x7DD8, + 17229: 0x8266, + 17230: 0x929C, + 17231: 0x9677, + 17232: 0x9E79, + 17233: 0x5408, + 17234: 0x54C8, + 17235: 0x76D2, + 17236: 0x86E4, + 17237: 0x95A4, + 17238: 0x95D4, + 17239: 0x965C, + 17240: 0x4EA2, + 17241: 0x4F09, + 17242: 0x59EE, + 17243: 0x5AE6, + 17244: 0x5DF7, + 17245: 0x6052, + 17246: 0x6297, + 17247: 0x676D, + 17248: 0x6841, + 17249: 0x6C86, + 17250: 0x6E2F, + 17251: 0x7F38, + 17252: 0x809B, + 17253: 0x822A, + 17254: 0xFA08, + 17255: 0xFA09, + 17256: 0x9805, + 17257: 0x4EA5, + 17258: 0x5055, + 17259: 0x54B3, + 17260: 0x5793, + 17261: 0x595A, + 17262: 0x5B69, + 17263: 0x5BB3, + 17264: 0x61C8, + 17265: 0x6977, + 17266: 0x6D77, + 17267: 0x7023, + 17268: 0x87F9, + 17269: 0x89E3, + 17270: 0x8A72, + 17271: 0x8AE7, + 17272: 0x9082, + 17273: 0x99ED, + 17274: 0x9AB8, + 17275: 0x52BE, + 17276: 0x6838, + 17277: 0x5016, + 17278: 0x5E78, + 17279: 0x674F, + 17280: 0x8347, + 17281: 0x884C, + 17282: 0x4EAB, + 17283: 0x5411, + 17284: 0x56AE, + 17285: 0x73E6, + 17286: 0x9115, + 17287: 0x97FF, + 17288: 0x9909, + 17289: 0x9957, + 17290: 0x9999, + 17291: 0x5653, + 17292: 0x589F, + 17293: 0x865B, + 17294: 0x8A31, + 17295: 0x61B2, + 17296: 0x6AF6, + 17297: 0x737B, + 17298: 0x8ED2, + 17299: 0x6B47, + 17300: 0x96AA, + 17301: 0x9A57, + 17302: 0x5955, + 17303: 0x7200, + 17304: 0x8D6B, + 17305: 0x9769, + 17306: 0x4FD4, + 17307: 0x5CF4, + 17308: 0x5F26, + 17309: 0x61F8, + 17310: 0x665B, + 17311: 0x6CEB, + 17312: 0x70AB, + 17313: 0x7384, + 17314: 0x73B9, + 17315: 0x73FE, + 17316: 0x7729, + 17317: 0x774D, + 17318: 0x7D43, + 17319: 0x7D62, + 17320: 0x7E23, + 17321: 0x8237, + 17322: 0x8852, + 17323: 0xFA0A, + 17324: 0x8CE2, + 17325: 0x9249, + 17326: 0x986F, + 17327: 0x5B51, + 17328: 0x7A74, + 17329: 0x8840, + 17330: 0x9801, + 17331: 0x5ACC, + 17332: 0x4FE0, + 17333: 0x5354, + 17334: 0x593E, + 17335: 0x5CFD, + 17336: 0x633E, + 17337: 0x6D79, + 17338: 0x72F9, + 17339: 0x8105, + 17340: 0x8107, + 17341: 0x83A2, + 17342: 0x92CF, + 17343: 0x9830, + 17344: 0x4EA8, + 17345: 0x5144, + 17346: 0x5211, + 17347: 0x578B, + 17348: 0x5F62, + 17349: 0x6CC2, + 17350: 0x6ECE, + 17351: 0x7005, + 17352: 0x7050, + 17353: 0x70AF, + 17354: 0x7192, + 17355: 0x73E9, + 17356: 0x7469, + 17357: 0x834A, + 17358: 0x87A2, + 17359: 0x8861, + 17360: 0x9008, + 17361: 0x90A2, + 17362: 0x93A3, + 17363: 0x99A8, + 17364: 0x516E, + 17365: 0x5F57, + 17366: 0x60E0, + 17367: 0x6167, + 17368: 0x66B3, + 17369: 0x8559, + 17370: 0x8E4A, + 17371: 0x91AF, + 17372: 0x978B, + 17373: 0x4E4E, + 17374: 0x4E92, + 17375: 0x547C, + 17376: 0x58D5, + 17377: 0x58FA, + 17378: 0x597D, + 17379: 0x5CB5, + 17380: 0x5F27, + 17381: 0x6236, + 17382: 0x6248, + 17383: 0x660A, + 17384: 0x6667, + 17385: 0x6BEB, + 17386: 0x6D69, + 17387: 0x6DCF, + 17388: 0x6E56, + 17389: 0x6EF8, + 17390: 0x6F94, + 17391: 0x6FE0, + 17392: 0x6FE9, + 17393: 0x705D, + 17394: 0x72D0, + 17395: 0x7425, + 17396: 0x745A, + 17397: 0x74E0, + 17398: 0x7693, + 17399: 0x795C, + 17400: 0x7CCA, + 17401: 0x7E1E, + 17402: 0x80E1, + 17403: 0x82A6, + 17404: 0x846B, + 17405: 0x84BF, + 17406: 0x864E, + 17407: 0x865F, + 17408: 0x8774, + 17409: 0x8B77, + 17410: 0x8C6A, + 17411: 0x93AC, + 17412: 0x9800, + 17413: 0x9865, + 17414: 0x60D1, + 17415: 0x6216, + 17416: 0x9177, + 17417: 0x5A5A, + 17418: 0x660F, + 17419: 0x6DF7, + 17420: 0x6E3E, + 17421: 0x743F, + 17422: 0x9B42, + 17423: 0x5FFD, + 17424: 0x60DA, + 17425: 0x7B0F, + 17426: 0x54C4, + 17427: 0x5F18, + 17428: 0x6C5E, + 17429: 0x6CD3, + 17430: 0x6D2A, + 17431: 0x70D8, + 17432: 0x7D05, + 17433: 0x8679, + 17434: 0x8A0C, + 17435: 0x9D3B, + 17436: 0x5316, + 17437: 0x548C, + 17438: 0x5B05, + 17439: 0x6A3A, + 17440: 0x706B, + 17441: 0x7575, + 17442: 0x798D, + 17443: 0x79BE, + 17444: 0x82B1, + 17445: 0x83EF, + 17446: 0x8A71, + 17447: 0x8B41, + 17448: 0x8CA8, + 17449: 0x9774, + 17450: 0xFA0B, + 17451: 0x64F4, + 17452: 0x652B, + 17453: 0x78BA, + 17454: 0x78BB, + 17455: 0x7A6B, + 17456: 0x4E38, + 17457: 0x559A, + 17458: 0x5950, + 17459: 0x5BA6, + 17460: 0x5E7B, + 17461: 0x60A3, + 17462: 0x63DB, + 17463: 0x6B61, + 17464: 0x6665, + 17465: 0x6853, + 17466: 0x6E19, + 17467: 0x7165, + 17468: 0x74B0, + 17469: 0x7D08, + 17470: 0x9084, + 17471: 0x9A69, + 17472: 0x9C25, + 17473: 0x6D3B, + 17474: 0x6ED1, + 17475: 0x733E, + 17476: 0x8C41, + 17477: 0x95CA, + 17478: 0x51F0, + 17479: 0x5E4C, + 17480: 0x5FA8, + 17481: 0x604D, + 17482: 0x60F6, + 17483: 0x6130, + 17484: 0x614C, + 17485: 0x6643, + 17486: 0x6644, + 17487: 0x69A5, + 17488: 0x6CC1, + 17489: 0x6E5F, + 17490: 0x6EC9, + 17491: 0x6F62, + 17492: 0x714C, + 17493: 0x749C, + 17494: 0x7687, + 17495: 0x7BC1, + 17496: 0x7C27, + 17497: 0x8352, + 17498: 0x8757, + 17499: 0x9051, + 17500: 0x968D, + 17501: 0x9EC3, + 17502: 0x532F, + 17503: 0x56DE, + 17504: 0x5EFB, + 17505: 0x5F8A, + 17506: 0x6062, + 17507: 0x6094, + 17508: 0x61F7, + 17509: 0x6666, + 17510: 0x6703, + 17511: 0x6A9C, + 17512: 0x6DEE, + 17513: 0x6FAE, + 17514: 0x7070, + 17515: 0x736A, + 17516: 0x7E6A, + 17517: 0x81BE, + 17518: 0x8334, + 17519: 0x86D4, + 17520: 0x8AA8, + 17521: 0x8CC4, + 17522: 0x5283, + 17523: 0x7372, + 17524: 0x5B96, + 17525: 0x6A6B, + 17526: 0x9404, + 17527: 0x54EE, + 17528: 0x5686, + 17529: 0x5B5D, + 17530: 0x6548, + 17531: 0x6585, + 17532: 0x66C9, + 17533: 0x689F, + 17534: 0x6D8D, + 17535: 0x6DC6, + 17536: 0x723B, + 17537: 0x80B4, + 17538: 0x9175, + 17539: 0x9A4D, + 17540: 0x4FAF, + 17541: 0x5019, + 17542: 0x539A, + 17543: 0x540E, + 17544: 0x543C, + 17545: 0x5589, + 17546: 0x55C5, + 17547: 0x5E3F, + 17548: 0x5F8C, + 17549: 0x673D, + 17550: 0x7166, + 17551: 0x73DD, + 17552: 0x9005, + 17553: 0x52DB, + 17554: 0x52F3, + 17555: 0x5864, + 17556: 0x58CE, + 17557: 0x7104, + 17558: 0x718F, + 17559: 0x71FB, + 17560: 0x85B0, + 17561: 0x8A13, + 17562: 0x6688, + 17563: 0x85A8, + 17564: 0x55A7, + 17565: 0x6684, + 17566: 0x714A, + 17567: 0x8431, + 17568: 0x5349, + 17569: 0x5599, + 17570: 0x6BC1, + 17571: 0x5F59, + 17572: 0x5FBD, + 17573: 0x63EE, + 17574: 0x6689, + 17575: 0x7147, + 17576: 0x8AF1, + 17577: 0x8F1D, + 17578: 0x9EBE, + 17579: 0x4F11, + 17580: 0x643A, + 17581: 0x70CB, + 17582: 0x7566, + 17583: 0x8667, + 17584: 0x6064, + 17585: 0x8B4E, + 17586: 0x9DF8, + 17587: 0x5147, + 17588: 0x51F6, + 17589: 0x5308, + 17590: 0x6D36, + 17591: 0x80F8, + 17592: 0x9ED1, + 17593: 0x6615, + 17594: 0x6B23, + 17595: 0x7098, + 17596: 0x75D5, + 17597: 0x5403, + 17598: 0x5C79, + 17599: 0x7D07, + 17600: 0x8A16, + 17601: 0x6B20, + 17602: 0x6B3D, + 17603: 0x6B46, + 17604: 0x5438, + 17605: 0x6070, + 17606: 0x6D3D, + 17607: 0x7FD5, + 17608: 0x8208, + 17609: 0x50D6, + 17610: 0x51DE, + 17611: 0x559C, + 17612: 0x566B, + 17613: 0x56CD, + 17614: 0x59EC, + 17615: 0x5B09, + 17616: 0x5E0C, + 17617: 0x6199, + 17618: 0x6198, + 17619: 0x6231, + 17620: 0x665E, + 17621: 0x66E6, + 17622: 0x7199, + 17623: 0x71B9, + 17624: 0x71BA, + 17625: 0x72A7, + 17626: 0x79A7, + 17627: 0x7A00, + 17628: 0x7FB2, + 17629: 0x8A70, +} + +const numEncodeTables = 7 + +// encodeX are the encoding tables from Unicode to EUC-KR code, +// sorted by decreasing length. +// encode0: 20893 entries for runes in [19968, 40861). +// encode1: 11172 entries for runes in [44032, 55204). +// encode2: 1625 entries for runes in [ 8213, 9838). +// encode3: 990 entries for runes in [12288, 13278). +// encode4: 945 entries for runes in [ 161, 1106). +// encode5: 268 entries for runes in [63744, 64012). +// encode6: 230 entries for runes in [65281, 65511). + +const encode0Low, encode0High = 19968, 40861 + +var encode0 = [...]uint16{ + 19968 - 19968: 0xECE9, + 19969 - 19968: 0xEFCB, + 19971 - 19968: 0xF6D2, + 19975 - 19968: 0xD8B2, + 19976 - 19968: 0xEDDB, + 19977 - 19968: 0xDFB2, + 19978 - 19968: 0xDFBE, + 19979 - 19968: 0xF9BB, + 19981 - 19968: 0xDCF4, + 19985 - 19968: 0xF5E4, + 19988 - 19968: 0xF3A6, + 19989 - 19968: 0xDDE0, + 19990 - 19968: 0xE1A6, + 19992 - 19968: 0xCEF8, + 19993 - 19968: 0xDCB0, + 19998 - 19968: 0xE3AA, + 20013 - 19968: 0xF1E9, + 20018 - 19968: 0xCDFA, + 20024 - 19968: 0xFCAF, + 20025 - 19968: 0xD3A1, + 20027 - 19968: 0xF1AB, + 20034 - 19968: 0xE7D1, + 20035 - 19968: 0xD2AC, + 20037 - 19968: 0xCEF9, + 20043 - 19968: 0xF1FD, + 20045 - 19968: 0xDEBF, + 20046 - 19968: 0xFBBA, + 20047 - 19968: 0xF9B9, + 20054 - 19968: 0xCED2, + 20056 - 19968: 0xE3AB, + 20057 - 19968: 0xEBE0, + 20061 - 19968: 0xCEFA, + 20062 - 19968: 0xCBF7, + 20063 - 19968: 0xE5A5, + 20075 - 19968: 0xCAE1, + 20077 - 19968: 0xD4CC, + 20083 - 19968: 0xEAE1, + 20086 - 19968: 0xDCE3, + 20087 - 19968: 0xDFAD, + 20094 - 19968: 0xCBEB, + 20098 - 19968: 0xD5AF, + 20102 - 19968: 0xD6F5, + 20104 - 19968: 0xE5F8, + 20107 - 19968: 0xDEC0, + 20108 - 19968: 0xECA3, + 20110 - 19968: 0xE9CD, + 20112 - 19968: 0xEAA7, + 20113 - 19968: 0xE9F6, + 20114 - 19968: 0xFBBB, + 20116 - 19968: 0xE7E9, + 20117 - 19968: 0xEFCC, + 20120 - 19968: 0xD0E6, + 20123 - 19968: 0xDEC1, + 20126 - 19968: 0xE4AC, + 20129 - 19968: 0xD8CC, + 20130 - 19968: 0xF9F1, + 20132 - 19968: 0xCEDF, + 20133 - 19968: 0xFAA4, + 20134 - 19968: 0xE6B2, + 20136 - 19968: 0xFAFB, + 20139 - 19968: 0xFABD, + 20140 - 19968: 0xCCC8, + 20141 - 19968: 0xEFCD, + 20142 - 19968: 0xD5D5, + 20150 - 19968: 0xD3A2, + 20154 - 19968: 0xECD1, + 20160 - 19968: 0xE4A7, + 20161 - 19968: 0xECD2, + 20164 - 19968: 0xF6B1, + 20167 - 19968: 0xCEFB, + 20170 - 19968: 0xD0D1, + 20171 - 19968: 0xCBBF, + 20173 - 19968: 0xEDA4, + 20180 - 19968: 0xEDA8, + 20181 - 19968: 0xDEC2, + 20182 - 19968: 0xF6E2, + 20183 - 19968: 0xEDDC, + 20184 - 19968: 0xDCF5, + 20185 - 19968: 0xE0B9, + 20189 - 19968: 0xD4CE, + 20191 - 19968: 0xF4B5, + 20195 - 19968: 0xD3DB, + 20196 - 19968: 0xD6B5, + 20197 - 19968: 0xECA4, + 20208 - 19968: 0xE4E6, + 20210 - 19968: 0xF1EA, + 20214 - 19968: 0xCBEC, + 20215 - 19968: 0xCBC0, + 20219 - 19968: 0xECF2, + 20225 - 19968: 0xD0EA, + 20233 - 19968: 0xF9F2, + 20234 - 19968: 0xECA5, + 20235 - 19968: 0xD0DF, + 20237 - 19968: 0xE7EA, + 20238 - 19968: 0xD0EB, + 20239 - 19968: 0xDCD1, + 20240 - 19968: 0xDBE9, + 20241 - 19968: 0xFDCC, + 20271 - 19968: 0xDBD7, + 20276 - 19968: 0xDAE1, + 20278 - 19968: 0xD6B6, + 20280 - 19968: 0xE3DF, + 20282 - 19968: 0xDEC3, + 20284 - 19968: 0xDEC4, + 20285 - 19968: 0xCAA1, + 20291 - 19968: 0xEEEC, + 20294 - 19968: 0xD3A3, + 20295 - 19968: 0xEEB7, + 20296 - 19968: 0xF8CF, + 20301 - 19968: 0xEAC8, + 20302 - 19968: 0xEEB8, + 20303 - 19968: 0xF1AC, + 20304 - 19968: 0xF1A5, + 20305 - 19968: 0xE9CE, + 20309 - 19968: 0xF9BC, + 20313 - 19968: 0xE5F9, + 20314 - 19968: 0xECEA, + 20315 - 19968: 0xDDD6, + 20316 - 19968: 0xEDC2, + 20329 - 19968: 0xF8A5, + 20335 - 19968: 0xE5BA, + 20336 - 19968: 0xDBD8, + 20339 - 19968: 0xCAA2, + 20342 - 19968: 0xD1CD, + 20346 - 19968: 0xEEED, + 20350 - 19968: 0xECEB, + 20351 - 19968: 0xDEC5, + 20353 - 19968: 0xE3E0, + 20355 - 19968: 0xCAC9, + 20356 - 19968: 0xF2E9, + 20358 - 19968: 0xD5CE, + 20360 - 19968: 0xF6B6, + 20362 - 19968: 0xCEC2, + 20363 - 19968: 0xD6C7, + 20365 - 19968: 0xE3B4, + 20367 - 19968: 0xF1AD, + 20369 - 19968: 0xEAE2, + 20374 - 19968: 0xD7C2, + 20376 - 19968: 0xF3A7, + 20379 - 19968: 0xCDEA, + 20381 - 19968: 0xEBEE, + 20398 - 19968: 0xD9B2, + 20399 - 19968: 0xFDA5, + 20405 - 19968: 0xF6D5, + 20406 - 19968: 0xD5E2, + 20415 - 19968: 0xF8B5, + 20418 - 19968: 0xCCF5, + 20419 - 19968: 0xF5B5, + 20420 - 19968: 0xE4AD, + 20425 - 19968: 0xE7EB, + 20426 - 19968: 0xF1D5, + 20430 - 19968: 0xF0BB, + 20433 - 19968: 0xE9B5, + 20435 - 19968: 0xCCC9, + 20436 - 19968: 0xFAD5, + 20439 - 19968: 0xE1D4, + 20442 - 19968: 0xD7D6, + 20445 - 19968: 0xDCC1, + 20447 - 19968: 0xDEC6, + 20448 - 19968: 0xFAEF, + 20449 - 19968: 0xE3E1, + 20462 - 19968: 0xE1F3, + 20463 - 19968: 0xDCF6, + 20465 - 19968: 0xCEFC, + 20467 - 19968: 0xDBC4, + 20469 - 19968: 0xF8F1, + 20472 - 19968: 0xDCE4, + 20474 - 19968: 0xE5EF, + 20482 - 19968: 0xDCB1, + 20486 - 19968: 0xD5D6, + 20489 - 19968: 0xF3DA, + 20491 - 19968: 0xCBC1, + 20493 - 19968: 0xDBC3, + 20497 - 19968: 0xD9FA, + 20498 - 19968: 0xD3EE, + 20502 - 19968: 0xFAB8, + 20505 - 19968: 0xFDA6, + 20506 - 19968: 0xEBEF, + 20508 - 19968: 0xF4A6, + 20510 - 19968: 0xCCCA, + 20511 - 19968: 0xF3A8, + 20513 - 19968: 0xF3DB, + 20515 - 19968: 0xDBA7, + 20516 - 19968: 0xF6B7, + 20518 - 19968: 0xCFE6, + 20519 - 19968: 0xF0F2, + 20520 - 19968: 0xCBDA, + 20522 - 19968: 0xE7D2, + 20523 - 19968: 0xD7C3, + 20524 - 19968: 0xF6F0, + 20525 - 19968: 0xE8DE, + 20539 - 19968: 0xE5A6, + 20547 - 19968: 0xE5E7, + 20551 - 19968: 0xCAA3, + 20552 - 19968: 0xCCA7, + 20553 - 19968: 0xEAC9, + 20559 - 19968: 0xF8B6, + 20565 - 19968: 0xFAA5, + 20570 - 19968: 0xF1AE, + 20572 - 19968: 0xEFCE, + 20581 - 19968: 0xCBED, + 20596 - 19968: 0xF6B0, + 20597 - 19968: 0xEFCF, + 20598 - 19968: 0xE9CF, + 20600 - 19968: 0xF7DE, + 20608 - 19968: 0xCED3, + 20613 - 19968: 0xDCF7, + 20621 - 19968: 0xDBA8, + 20625 - 19968: 0xCBF8, + 20632 - 19968: 0xDFA1, + 20633 - 19968: 0xDDE1, + 20652 - 19968: 0xF5CA, + 20653 - 19968: 0xE9B6, + 20658 - 19968: 0xE7EC, + 20659 - 19968: 0xEEEE, + 20661 - 19968: 0xF3F0, + 20663 - 19968: 0xDFBF, + 20670 - 19968: 0xCCCB, + 20677 - 19968: 0xD0C1, + 20681 - 19968: 0xF4D2, + 20682 - 19968: 0xE0BA, + 20687 - 19968: 0xDFC0, + 20689 - 19968: 0xCEE0, + 20693 - 19968: 0xDCD2, + 20694 - 19968: 0xFDEA, + 20698 - 19968: 0xD6F6, + 20702 - 19968: 0xEACA, + 20709 - 19968: 0xE8E9, + 20711 - 19968: 0xE3AC, + 20717 - 19968: 0xF3D0, + 20729 - 19968: 0xCAA4, + 20731 - 19968: 0xDBF8, + 20735 - 19968: 0xDEC7, + 20736 - 19968: 0xEBF0, + 20737 - 19968: 0xF1D6, + 20740 - 19968: 0xE5E2, + 20742 - 19968: 0xCCCC, + 20745 - 19968: 0xCBFB, + 20754 - 19968: 0xEAE3, + 20767 - 19968: 0xDFC1, + 20769 - 19968: 0xD6ED, + 20778 - 19968: 0xE9D0, + 20786 - 19968: 0xEEB9, + 20791 - 19968: 0xD5E3, + 20794 - 19968: 0xD1D3, + 20796 - 19968: 0xE5F0, + 20800 - 19968: 0xE8B4, + 20801 - 19968: 0xEBC3, + 20803 - 19968: 0xEAAA, + 20804 - 19968: 0xFAFC, + 20805 - 19968: 0xF5F6, + 20806 - 19968: 0xF0BC, + 20807 - 19968: 0xFDD4, + 20808 - 19968: 0xE0BB, + 20809 - 19968: 0xCEC3, + 20811 - 19968: 0xD0BA, + 20812 - 19968: 0xF7BA, + 20813 - 19968: 0xD8F3, + 20814 - 19968: 0xF7CD, + 20818 - 19968: 0xE4AE, + 20828 - 19968: 0xD4DF, + 20834 - 19968: 0xD0E7, + 20837 - 19968: 0xECFD, + 20839 - 19968: 0xD2AE, + 20840 - 19968: 0xEEEF, + 20841 - 19968: 0xD5D7, + 20842 - 19968: 0xEAE4, + 20843 - 19968: 0xF8A2, + 20844 - 19968: 0xCDEB, + 20845 - 19968: 0xD7BF, + 20846 - 19968: 0xFBB1, + 20849 - 19968: 0xCDEC, + 20853 - 19968: 0xDCB2, + 20854 - 19968: 0xD0EC, + 20855 - 19968: 0xCEFD, + 20856 - 19968: 0xEEF0, + 20860 - 19968: 0xCCC2, + 20864 - 19968: 0xD0ED, + 20870 - 19968: 0xE5F7, + 20874 - 19968: 0xF3FC, + 20877 - 19968: 0xEEA2, + 20882 - 19968: 0xD9B3, + 20885 - 19968: 0xD8F4, + 20887 - 19968: 0xE9B7, + 20896 - 19968: 0xCEAE, + 20901 - 19968: 0xD9A2, + 20906 - 19968: 0xD8F1, + 20908 - 19968: 0xD4CF, + 20918 - 19968: 0xE5A7, + 20919 - 19968: 0xD5D2, + 20925 - 19968: 0xD6A9, + 20932 - 19968: 0xF4A2, + 20934 - 19968: 0xF1D7, + 20937 - 19968: 0xD5D8, + 20939 - 19968: 0xF0BD, + 20940 - 19968: 0xD7D0, + 20941 - 19968: 0xD4D0, + 20956 - 19968: 0xD7CF, + 20957 - 19968: 0xEBEA, + 20958 - 19968: 0xFDEB, + 20961 - 19968: 0xDBED, + 20976 - 19968: 0xFCC5, + 20977 - 19968: 0xCBC2, + 20982 - 19968: 0xFDD5, + 20984 - 19968: 0xF4C8, + 20985 - 19968: 0xE8EA, + 20986 - 19968: 0xF5F3, + 20989 - 19968: 0xF9DE, + 20992 - 19968: 0xD3EF, + 20995 - 19968: 0xECD3, + 20998 - 19968: 0xDDC2, + 20999 - 19968: 0xEFB7, + 21000 - 19968: 0xE7D4, + 21002 - 19968: 0xCACA, + 21006 - 19968: 0xD9FB, + 21009 - 19968: 0xFAFD, + 21015 - 19968: 0xD6AA, + 21021 - 19968: 0xF4F8, + 21028 - 19968: 0xF7F7, + 21029 - 19968: 0xDCAC, + 21033 - 19968: 0xD7D7, + 21034 - 19968: 0xDFA2, + 21038 - 19968: 0xCEBE, + 21040 - 19968: 0xD3F0, + 21046 - 19968: 0xF0A4, + 21047 - 19968: 0xE1EC, + 21048 - 19968: 0xCFE7, + 21049 - 19968: 0xF3CB, + 21050 - 19968: 0xEDA9, + 21051 - 19968: 0xCABE, + 21059 - 19968: 0xF4EF, + 21063 - 19968: 0xF6CE, + 21066 - 19968: 0xDEFB, + 21067 - 19968: 0xD0BB, + 21068 - 19968: 0xD5B7, + 21069 - 19968: 0xEEF1, + 21076 - 19968: 0xF4A8, + 21078 - 19968: 0xDCF8, + 21083 - 19968: 0xCBA7, + 21085 - 19968: 0xDACE, + 21089 - 19968: 0xE0E6, + 21097 - 19968: 0xEDA5, + 21098 - 19968: 0xEEF2, + 21103 - 19968: 0xDCF9, + 21106 - 19968: 0xF9DC, + 21109 - 19968: 0xF3DC, + 21117 - 19968: 0xF8F2, + 21119 - 19968: 0xF4F9, + 21123 - 19968: 0xFCF1, + 21127 - 19968: 0xD0BC, + 21128 - 19968: 0xDBF9, + 21129 - 19968: 0xD7B1, + 21133 - 19968: 0xCBFC, + 21137 - 19968: 0xF0A5, + 21138 - 19968: 0xCBFD, + 21147 - 19968: 0xD5F4, + 21151 - 19968: 0xCDED, + 21152 - 19968: 0xCAA5, + 21155 - 19968: 0xD6AB, + 21156 - 19968: 0xD0C2, + 21161 - 19968: 0xF0BE, + 21162 - 19968: 0xD2BD, + 21163 - 19968: 0xCCA4, + 21182 - 19968: 0xFAB6, + 21185 - 19968: 0xCCCD, + 21187 - 19968: 0xDAFA, + 21189 - 19968: 0xF6CF, + 21191 - 19968: 0xE9B8, + 21193 - 19968: 0xD8F5, + 21197 - 19968: 0xCCCE, + 21202 - 19968: 0xD7CD, + 21205 - 19968: 0xD4D1, + 21206 - 19968: 0xE9ED, + 21208 - 19968: 0xCAEB, + 21209 - 19968: 0xD9E2, + 21211 - 19968: 0xFDB2, + 21213 - 19968: 0xE3AD, + 21214 - 19968: 0xD6CC, + 21215 - 19968: 0xD9B4, + 21218 - 19968: 0xE1A7, + 21219 - 19968: 0xEED3, + 21220 - 19968: 0xD0C3, + 21235 - 19968: 0xFDB3, + 21237 - 19968: 0xD5E4, + 21240 - 19968: 0xCFE8, + 21242 - 19968: 0xEDC3, + 21243 - 19968: 0xD0B2, + 21246 - 19968: 0xCEFE, + 21247 - 19968: 0xDAA8, + 21253 - 19968: 0xF8D0, + 21256 - 19968: 0xFDD6, + 21261 - 19968: 0xF8D1, + 21263 - 19968: 0xF8D2, + 21264 - 19968: 0xDCD3, + 21269 - 19968: 0xDDE2, + 21270 - 19968: 0xFBF9, + 21271 - 19968: 0xDDC1, + 21273 - 19968: 0xE3B5, + 21280 - 19968: 0xEDDD, + 21281 - 19968: 0xCEC4, + 21283 - 19968: 0xCBA1, + 21290 - 19968: 0xDDE3, + 21295 - 19968: 0xFCDD, + 21305 - 19968: 0xF9AF, + 21311 - 19968: 0xD2FB, + 21312 - 19968: 0xCFA1, + 21313 - 19968: 0xE4A8, + 21315 - 19968: 0xF4B6, + 21316 - 19968: 0xECFE, + 21319 - 19968: 0xE3AE, + 21320 - 19968: 0xE7ED, + 21321 - 19968: 0xFDC1, + 21322 - 19968: 0xDAE2, + 21325 - 19968: 0xD8B3, + 21329 - 19968: 0xDDE4, + 21330 - 19968: 0xF0EF, + 21331 - 19968: 0xF6F1, + 21332 - 19968: 0xFAF0, + 21335 - 19968: 0xD1F5, + 21338 - 19968: 0xDACF, + 21340 - 19968: 0xDCD4, + 21342 - 19968: 0xDCA6, + 21344 - 19968: 0xEFBF, + 21350 - 19968: 0xCECF, + 21352 - 19968: 0xE0D9, + 21359 - 19968: 0xD9D6, + 21360 - 19968: 0xECD4, + 21361 - 19968: 0xEACB, + 21364 - 19968: 0xCABF, + 21365 - 19968: 0xD5B0, + 21367 - 19968: 0xCFE9, + 21373 - 19968: 0xF1ED, + 21375 - 19968: 0xCCCF, + 21380 - 19968: 0xE4F8, + 21395 - 19968: 0xE4ED, + 21400 - 19968: 0xD7D8, + 21402 - 19968: 0xFDA7, + 21407 - 19968: 0xEAAB, + 21408 - 19968: 0xF6B2, + 21413 - 19968: 0xCFF0, + 21414 - 19968: 0xF9BD, + 21421 - 19968: 0xE6F4, + 21435 - 19968: 0xCBDB, + 21443 - 19968: 0xF3D1, + 21448 - 19968: 0xE9D1, + 21449 - 19968: 0xF3A9, + 21450 - 19968: 0xD0E0, + 21451 - 19968: 0xE9D2, + 21453 - 19968: 0xDAE3, + 21460 - 19968: 0xE2D2, + 21462 - 19968: 0xF6A2, + 21463 - 19968: 0xE1F4, + 21467 - 19968: 0xDAE4, + 21473 - 19968: 0xE7D5, + 21474 - 19968: 0xF5BF, + 21475 - 19968: 0xCFA2, + 21476 - 19968: 0xCDAF, + 21477 - 19968: 0xCFA3, + 21481 - 19968: 0xCDB0, + 21482 - 19968: 0xF1FE, + 21483 - 19968: 0xD0A3, + 21484 - 19968: 0xE1AF, + 21485 - 19968: 0xF8A3, + 21487 - 19968: 0xCAA6, + 21488 - 19968: 0xF7BB, + 21489 - 19968: 0xF2EA, + 21490 - 19968: 0xDEC8, + 21491 - 19968: 0xE9D3, + 21496 - 19968: 0xDEC9, + 21507 - 19968: 0xFDDE, + 21508 - 19968: 0xCAC0, + 21512 - 19968: 0xF9EA, + 21513 - 19968: 0xD1CE, + 21514 - 19968: 0xEED4, + 21516 - 19968: 0xD4D2, + 21517 - 19968: 0xD9A3, + 21518 - 19968: 0xFDA8, + 21519 - 19968: 0xD7D9, + 21520 - 19968: 0xF7CE, + 21521 - 19968: 0xFABE, + 21531 - 19968: 0xCFD6, + 21533 - 19968: 0xD7F0, + 21535 - 19968: 0xEBE1, + 21536 - 19968: 0xF8C5, + 21542 - 19968: 0xDCFA, + 21545 - 19968: 0xDDC3, + 21547 - 19968: 0xF9DF, + 21555 - 19968: 0xE7EF, + 21560 - 19968: 0xFDE5, + 21561 - 19968: 0xF6A3, + 21563 - 19968: 0xD9FC, + 21564 - 19968: 0xFDA9, + 21566 - 19968: 0xE7EE, + 21570 - 19968: 0xD5E5, + 21576 - 19968: 0xEFD0, + 21578 - 19968: 0xCDB1, + 21585 - 19968: 0xF7A2, + 21608 - 19968: 0xF1B2, + 21610 - 19968: 0xF1B1, + 21617 - 19968: 0xCDB2, + 21619 - 19968: 0xDAAB, + 21621 - 19968: 0xCAA7, + 21627 - 19968: 0xE3E2, + 21628 - 19968: 0xFBBC, + 21629 - 19968: 0xD9A4, + 21632 - 19968: 0xEEBA, + 21638 - 19968: 0xF8D3, + 21644 - 19968: 0xFBFA, + 21646 - 19968: 0xCFA4, + 21648 - 19968: 0xDCFB, + 21668 - 19968: 0xF6E3, + 21672 - 19968: 0xEDAA, + 21675 - 19968: 0xF2A1, + 21676 - 19968: 0xCEE1, + 21683 - 19968: 0xFAA6, + 21688 - 19968: 0xF9E0, + 21693 - 19968: 0xECD6, + 21696 - 19968: 0xE4EE, + 21697 - 19968: 0xF9A1, + 21700 - 19968: 0xFBEF, + 21704 - 19968: 0xF9EB, + 21705 - 19968: 0xEEA3, + 21729 - 19968: 0xEAAC, + 21733 - 19968: 0xCAA8, + 21736 - 19968: 0xF4FA, + 21741 - 19968: 0xCDD6, + 21742 - 19968: 0xFCF6, + 21746 - 19968: 0xF4C9, + 21754 - 19968: 0xF8D4, + 21764 - 19968: 0xF8A6, + 21766 - 19968: 0xDECA, + 21767 - 19968: 0xF2C6, + 21774 - 19968: 0xD7DA, + 21776 - 19968: 0xD3D0, + 21788 - 19968: 0xD8C5, + 21807 - 19968: 0xEAE6, + 21809 - 19968: 0xF3DD, + 21813 - 19968: 0xE4DA, + 21822 - 19968: 0xF6E4, + 21828 - 19968: 0xF6F2, + 21830 - 19968: 0xDFC2, + 21839 - 19968: 0xD9FD, + 21843 - 19968: 0xCCF6, + 21846 - 19968: 0xD3BA, + 21854 - 19968: 0xE4AF, + 21859 - 19968: 0xF9E1, + 21884 - 19968: 0xF0A6, + 21888 - 19968: 0xCBD3, + 21892 - 19968: 0xE0BC, + 21894 - 19968: 0xF4CA, + 21895 - 19968: 0xD4FA, + 21897 - 19968: 0xFDAA, + 21898 - 19968: 0xF9E2, + 21912 - 19968: 0xF4B7, + 21913 - 19968: 0xFDC2, + 21914 - 19968: 0xFCB0, + 21916 - 19968: 0xFDEC, + 21917 - 19968: 0xCAE2, + 21927 - 19968: 0xFDBD, + 21929 - 19968: 0xEAE7, + 21930 - 19968: 0xDFC3, + 21931 - 19968: 0xD1D2, + 21932 - 19968: 0xCEE2, + 21934 - 19968: 0xD3A4, + 21957 - 19968: 0xFDAB, + 21959 - 19968: 0xDFE0, + 21972 - 19968: 0xF2C7, + 21978 - 19968: 0xE7F0, + 21980 - 19968: 0xD0EE, + 21983 - 19968: 0xF3AA, + 21987 - 19968: 0xDECB, + 21988 - 19968: 0xF6B8, + 22013 - 19968: 0xE1F5, + 22014 - 19968: 0xF1B3, + 22022 - 19968: 0xF7A3, + 22025 - 19968: 0xCAA9, + 22036 - 19968: 0xCFA5, + 22039 - 19968: 0xDFC4, + 22063 - 19968: 0xE1B0, + 22066 - 19968: 0xF0BF, + 22068 - 19968: 0xF6A4, + 22070 - 19968: 0xE3B6, + 22099 - 19968: 0xFAC6, + 22120 - 19968: 0xD0EF, + 22123 - 19968: 0xFDED, + 22132 - 19968: 0xDDC4, + 22150 - 19968: 0xFCF7, + 22181 - 19968: 0xE6BF, + 22188 - 19968: 0xDEAD, + 22190 - 19968: 0xFABF, + 22196 - 19968: 0xE5F1, + 22204 - 19968: 0xEDC4, + 22218 - 19968: 0xD2A5, + 22221 - 19968: 0xFDEE, + 22225 - 19968: 0xF5B6, + 22234 - 19968: 0xE1F6, + 22235 - 19968: 0xDECC, + 22238 - 19968: 0xFCDE, + 22240 - 19968: 0xECD7, + 22256 - 19968: 0xCDDD, + 22265 - 19968: 0xD6B7, + 22266 - 19968: 0xCDB3, + 22275 - 19968: 0xF8D5, + 22276 - 19968: 0xE5D8, + 22280 - 19968: 0xCFEA, + 22283 - 19968: 0xCFD0, + 22285 - 19968: 0xEACC, + 22290 - 19968: 0xEAAE, + 22291 - 19968: 0xEAAD, + 22294 - 19968: 0xD3F1, + 22296 - 19968: 0xD3A5, + 22303 - 19968: 0xF7CF, + 22312 - 19968: 0xEEA4, + 22317 - 19968: 0xD0A4, + 22320 - 19968: 0xF2A2, + 22331 - 19968: 0xD0F0, + 22336 - 19968: 0xF2A3, + 22338 - 19968: 0xF7F8, + 22343 - 19968: 0xD0B3, + 22346 - 19968: 0xDBA9, + 22349 - 19968: 0xD3BB, + 22350 - 19968: 0xCAEC, + 22352 - 19968: 0xF1A6, + 22353 - 19968: 0xCBD5, + 22369 - 19968: 0xF7E7, + 22372 - 19968: 0xCDDE, + 22374 - 19968: 0xF7A4, + 22378 - 19968: 0xF8C0, + 22382 - 19968: 0xD3DD, + 22384 - 19968: 0xCCD0, + 22389 - 19968: 0xCFA6, + 22396 - 19968: 0xF6F3, + 22402 - 19968: 0xE1F7, + 22408 - 19968: 0xD3DC, + 22411 - 19968: 0xFAFE, + 22419 - 19968: 0xFAA7, + 22432 - 19968: 0xEBD9, + 22434 - 19968: 0xCFA7, + 22435 - 19968: 0xEAAF, + 22467 - 19968: 0xE4EF, + 22471 - 19968: 0xE9B9, + 22472 - 19968: 0xF1D8, + 22475 - 19968: 0xD8D8, + 22478 - 19968: 0xE0F2, + 22495 - 19968: 0xE6B4, + 22496 - 19968: 0xDCFC, + 22512 - 19968: 0xF3F1, + 22516 - 19968: 0xE3D0, + 22519 - 19968: 0xF2FB, + 22521 - 19968: 0xDBC6, + 22522 - 19968: 0xD0F1, + 22524 - 19968: 0xD0F2, + 22528 - 19968: 0xCFDC, + 22530 - 19968: 0xD3D1, + 22533 - 19968: 0xCCB1, + 22534 - 19968: 0xF7D8, + 22536 - 19968: 0xCBA8, + 22537 - 19968: 0xEBBC, + 22538 - 19968: 0xE4BE, + 22558 - 19968: 0xF4DC, + 22561 - 19968: 0xDCC2, + 22564 - 19968: 0xF0A7, + 22567 - 19968: 0xE6C0, + 22570 - 19968: 0xCAED, + 22575 - 19968: 0xE8EB, + 22576 - 19968: 0xE5E8, + 22577 - 19968: 0xDCC3, + 22580 - 19968: 0xEDDE, + 22581 - 19968: 0xD3F2, + 22586 - 19968: 0xCCF7, + 22602 - 19968: 0xCED4, + 22603 - 19968: 0xE7AB, + 22607 - 19968: 0xCBC3, + 22609 - 19968: 0xE1B1, + 22612 - 19968: 0xF7B2, + 22615 - 19968: 0xD3F3, + 22616 - 19968: 0xD3D2, + 22618 - 19968: 0xF5C0, + 22622 - 19968: 0xDFDD, + 22625 - 19968: 0xEEF3, + 22626 - 19968: 0xE7F1, + 22628 - 19968: 0xFDB4, + 22645 - 19968: 0xF2C8, + 22649 - 19968: 0xF3D2, + 22652 - 19968: 0xEEF4, + 22654 - 19968: 0xE2D3, + 22659 - 19968: 0xCCD1, + 22661 - 19968: 0xDFEA, + 22665 - 19968: 0xE9BA, + 22675 - 19968: 0xD9D7, + 22684 - 19968: 0xF5CD, + 22686 - 19968: 0xF1F2, + 22687 - 19968: 0xFAC7, + 22696 - 19968: 0xD9F8, + 22697 - 19968: 0xD4C2, + 22702 - 19968: 0xF6E5, + 22707 - 19968: 0xDDC5, + 22714 - 19968: 0xE7F2, + 22715 - 19968: 0xEDDF, + 22718 - 19968: 0xCACB, + 22721 - 19968: 0xDBFA, + 22725 - 19968: 0xE8B5, + 22727 - 19968: 0xD3A6, + 22734 - 19968: 0xFDB5, + 22737 - 19968: 0xF9C9, + 22739 - 19968: 0xE4E2, + 22741 - 19968: 0xFBBD, + 22744 - 19968: 0xD7A4, + 22745 - 19968: 0xCEC5, + 22750 - 19968: 0xCED5, + 22751 - 19968: 0xD6E6, + 22756 - 19968: 0xE5BD, + 22763 - 19968: 0xDECD, + 22764 - 19968: 0xECF3, + 22767 - 19968: 0xEDE0, + 22777 - 19968: 0xECEC, + 22778 - 19968: 0xFBBE, + 22779 - 19968: 0xDFEB, + 22781 - 19968: 0xE1F8, + 22799 - 19968: 0xF9BE, + 22804 - 19968: 0xD0F3, + 22805 - 19968: 0xE0AA, + 22806 - 19968: 0xE8E2, + 22809 - 19968: 0xE2D4, + 22810 - 19968: 0xD2FD, + 22812 - 19968: 0xE5A8, + 22818 - 19968: 0xD9D3, + 22823 - 19968: 0xD3DE, + 22825 - 19968: 0xF4B8, + 22826 - 19968: 0xF7BC, + 22827 - 19968: 0xDCFD, + 22829 - 19968: 0xE8EC, + 22830 - 19968: 0xE4E7, + 22833 - 19968: 0xE3F7, + 22839 - 19968: 0xECA8, + 22846 - 19968: 0xFAF1, + 22852 - 19968: 0xE5F2, + 22855 - 19968: 0xD0F4, + 22856 - 19968: 0xD2AF, + 22857 - 19968: 0xDCE5, + 22862 - 19968: 0xD0A5, + 22863 - 19968: 0xF1B4, + 22864 - 19968: 0xFCB1, + 22865 - 19968: 0xCCF8, + 22868 - 19968: 0xDDC6, + 22869 - 19968: 0xFAD1, + 22871 - 19968: 0xF7DF, + 22874 - 19968: 0xFAA8, + 22880 - 19968: 0xEEF5, + 22882 - 19968: 0xDECE, + 22887 - 19968: 0xE7F3, + 22890 - 19968: 0xF7AC, + 22891 - 19968: 0xEBC4, + 22892 - 19968: 0xEDE1, + 22893 - 19968: 0xE0AB, + 22894 - 19968: 0xDDC7, + 22899 - 19968: 0xD2B3, + 22900 - 19968: 0xD2BF, + 22904 - 19968: 0xCACC, + 22909 - 19968: 0xFBBF, + 22914 - 19968: 0xE5FD, + 22915 - 19968: 0xDDE5, + 22916 - 19968: 0xD8CD, + 22922 - 19968: 0xECF4, + 22931 - 19968: 0xD0F5, + 22934 - 19968: 0xE8ED, + 22935 - 19968: 0xD0D2, + 22937 - 19968: 0xD9D8, + 22949 - 19968: 0xF6E6, + 22952 - 19968: 0xDBAA, + 22956 - 19968: 0xF7E0, + 22969 - 19968: 0xD8D9, + 22971 - 19968: 0xF4A3, + 22974 - 19968: 0xF4DD, + 22979 - 19968: 0xEFD1, + 22982 - 19968: 0xD9B5, + 22985 - 19968: 0xEDAB, + 22987 - 19968: 0xE3B7, + 22992 - 19968: 0xEEBB, + 22993 - 19968: 0xCDB4, + 22995 - 19968: 0xE0F3, + 22996 - 19968: 0xEACD, + 23001 - 19968: 0xECF5, + 23002 - 19968: 0xE8EE, + 23004 - 19968: 0xCBA9, + 23005 - 19968: 0xF1AF, + 23014 - 19968: 0xCACD, + 23016 - 19968: 0xECA9, + 23018 - 19968: 0xF2EB, + 23020 - 19968: 0xFDEF, + 23022 - 19968: 0xF9F3, + 23032 - 19968: 0xE6C1, + 23035 - 19968: 0xECD8, + 23039 - 19968: 0xEDAC, + 23041 - 19968: 0xEACE, + 23043 - 19968: 0xE8DF, + 23057 - 19968: 0xDECF, + 23064 - 19968: 0xD2A6, + 23067 - 19968: 0xE7F4, + 23068 - 19968: 0xD1D6, + 23071 - 19968: 0xE6C2, + 23072 - 19968: 0xE3E3, + 23077 - 19968: 0xE4B0, + 23081 - 19968: 0xD8B4, + 23094 - 19968: 0xF6A5, + 23100 - 19968: 0xF3DE, + 23105 - 19968: 0xD7A5, + 23110 - 19968: 0xF7E8, + 23113 - 19968: 0xE8C6, + 23130 - 19968: 0xFBE6, + 23138 - 19968: 0xDDE6, + 23142 - 19968: 0xDCFE, + 23186 - 19968: 0xD8DA, + 23194 - 19968: 0xDAAC, + 23195 - 19968: 0xEAB0, + 23204 - 19968: 0xE3B8, + 23233 - 19968: 0xCAAA, + 23234 - 19968: 0xE1F9, + 23236 - 19968: 0xEAB1, + 23241 - 19968: 0xF2EC, + 23244 - 19968: 0xFAEE, + 23265 - 19968: 0xEED5, + 23270 - 19968: 0xF9F4, + 23273 - 19968: 0xD2EC, + 23301 - 19968: 0xFBFB, + 23305 - 19968: 0xFDF0, + 23307 - 19968: 0xE0BD, + 23308 - 19968: 0xCEE3, + 23318 - 19968: 0xF8C6, + 23338 - 19968: 0xDEAE, + 23360 - 19968: 0xDFC5, + 23363 - 19968: 0xE5BE, + 23376 - 19968: 0xEDAD, + 23377 - 19968: 0xFAEA, + 23380 - 19968: 0xCDEE, + 23381 - 19968: 0xEDA6, + 23383 - 19968: 0xEDAE, + 23384 - 19968: 0xF0ED, + 23386 - 19968: 0xDDA1, + 23388 - 19968: 0xEDAF, + 23389 - 19968: 0xFCF8, + 23391 - 19968: 0xD8EB, + 23395 - 19968: 0xCCF9, + 23396 - 19968: 0xCDB5, + 23401 - 19968: 0xFAA9, + 23403 - 19968: 0xE1DD, + 23408 - 19968: 0xE2D5, + 23409 - 19968: 0xEDCF, + 23413 - 19968: 0xDDA2, + 23416 - 19968: 0xF9CA, + 23418 - 19968: 0xEAE8, + 23420 - 19968: 0xE5ED, + 23429 - 19968: 0xD3EB, + 23431 - 19968: 0xE9D4, + 23432 - 19968: 0xE1FA, + 23433 - 19968: 0xE4CC, + 23435 - 19968: 0xE1E4, + 23436 - 19968: 0xE8C7, + 23439 - 19968: 0xCEDB, + 23443 - 19968: 0xDCD5, + 23445 - 19968: 0xF7B5, + 23446 - 19968: 0xFCF3, + 23447 - 19968: 0xF0F3, + 23448 - 19968: 0xCEAF, + 23449 - 19968: 0xF1B5, + 23450 - 19968: 0xEFD2, + 23451 - 19968: 0xE8C8, + 23452 - 19968: 0xEBF1, + 23458 - 19968: 0xCBD4, + 23459 - 19968: 0xE0BE, + 23460 - 19968: 0xE3F8, + 23461 - 19968: 0xEAE9, + 23462 - 19968: 0xFCB2, + 23468 - 19968: 0xE0F4, + 23470 - 19968: 0xCFE0, + 23472 - 19968: 0xEEA5, + 23475 - 19968: 0xFAAA, + 23476 - 19968: 0xE6C3, + 23477 - 19968: 0xE1B2, + 23478 - 19968: 0xCAAB, + 23480 - 19968: 0xE3E4, + 23481 - 19968: 0xE9BB, + 23487 - 19968: 0xE2D6, + 23488 - 19968: 0xF3F2, + 23490 - 19968: 0xEED6, + 23491 - 19968: 0xEAB2, + 23492 - 19968: 0xD0F6, + 23493 - 19968: 0xECD9, + 23494 - 19968: 0xDACB, + 23495 - 19968: 0xCFA8, + 23500 - 19968: 0xDDA3, + 23504 - 19968: 0xD8DB, + 23506 - 19968: 0xF9CE, + 23507 - 19968: 0xE9D5, + 23508 - 19968: 0xE3D1, + 23511 - 19968: 0xD2BC, + 23518 - 19968: 0xD8AC, + 23519 - 19968: 0xF3CC, + 23521 - 19968: 0xCDFB, + 23522 - 19968: 0xF6D6, + 23524 - 19968: 0xE7F5, + 23525 - 19968: 0xE8EF, + 23526 - 19968: 0xE3F9, + 23527 - 19968: 0xD2BB, + 23528 - 19968: 0xF3F3, + 23529 - 19968: 0xE3FB, + 23531 - 19968: 0xDED0, + 23532 - 19968: 0xCEB0, + 23534 - 19968: 0xD6F7, + 23535 - 19968: 0xF1D9, + 23541 - 19968: 0xF5C1, + 23542 - 19968: 0xDCC4, + 23544 - 19968: 0xF5BB, + 23546 - 19968: 0xDED1, + 23553 - 19968: 0xDCE6, + 23556 - 19968: 0xDED2, + 23559 - 19968: 0xEDE2, + 23560 - 19968: 0xEEF6, + 23561 - 19968: 0xEACF, + 23562 - 19968: 0xF0EE, + 23563 - 19968: 0xE3FC, + 23565 - 19968: 0xD3DF, + 23566 - 19968: 0xD3F4, + 23567 - 19968: 0xE1B3, + 23569 - 19968: 0xE1B4, + 23574 - 19968: 0xF4D3, + 23577 - 19968: 0xDFC6, + 23588 - 19968: 0xE9D6, + 23592 - 19968: 0xDBAB, + 23601 - 19968: 0xF6A6, + 23608 - 19968: 0xE3B9, + 23609 - 19968: 0xEBC5, + 23610 - 19968: 0xF4A9, + 23611 - 19968: 0xCDB6, + 23612 - 19968: 0xD2F9, + 23614 - 19968: 0xDAAD, + 23615 - 19968: 0xD2E3, + 23616 - 19968: 0xCFD1, + 23621 - 19968: 0xCBDC, + 23622 - 19968: 0xCCFA, + 23624 - 19968: 0xCFDD, + 23627 - 19968: 0xE8A9, + 23629 - 19968: 0xE3BB, + 23630 - 19968: 0xE3BA, + 23633 - 19968: 0xE0DA, + 23637 - 19968: 0xEEF7, + 23643 - 19968: 0xDCB3, + 23648 - 19968: 0xD3F5, + 23650 - 19968: 0xD7A6, + 23652 - 19968: 0xF6B5, + 23653 - 19968: 0xD7DB, + 23660 - 19968: 0xE1D5, + 23663 - 19968: 0xD4EA, + 23665 - 19968: 0xDFA3, + 23673 - 19968: 0xFDDF, + 23696 - 19968: 0xD0F7, + 23697 - 19968: 0xEDD4, + 23713 - 19968: 0xCBAA, + 23721 - 19968: 0xE4DB, + 23723 - 19968: 0xE1FB, + 23724 - 19968: 0xCBA2, + 23729 - 19968: 0xD3E0, + 23731 - 19968: 0xE4BF, + 23733 - 19968: 0xFBC0, + 23735 - 19968: 0xDABE, + 23736 - 19968: 0xE4CD, + 23738 - 19968: 0xD6B9, + 23742 - 19968: 0xEFC0, + 23744 - 19968: 0xE1FC, + 23769 - 19968: 0xF6B9, + 23776 - 19968: 0xDFC7, + 23784 - 19968: 0xE4B1, + 23791 - 19968: 0xDCE7, + 23792 - 19968: 0xDCE8, + 23796 - 19968: 0xFAD6, + 23798 - 19968: 0xD3F6, + 23803 - 19968: 0xF1DA, + 23805 - 19968: 0xFAF2, + 23815 - 19968: 0xE2FD, + 23821 - 19968: 0xD5CF, + 23822 - 19968: 0xD0F8, + 23825 - 19968: 0xCDDF, + 23828 - 19968: 0xF5CB, + 23830 - 19968: 0xE4F0, + 23831 - 19968: 0xCBAB, + 23833 - 19968: 0xD7C4, + 23847 - 19968: 0xE2FE, + 23849 - 19968: 0xDDDA, + 23883 - 19968: 0xDAAE, + 23884 - 19968: 0xCAEE, + 23888 - 19968: 0xD5B9, + 23913 - 19968: 0xE3A1, + 23916 - 19968: 0xE8E3, + 23919 - 19968: 0xF3AB, + 23943 - 19968: 0xCFA9, + 23947 - 19968: 0xD3F7, + 23965 - 19968: 0xD4F1, + 23968 - 19968: 0xCEE4, + 23970 - 19968: 0xE8F2, + 23978 - 19968: 0xE5F5, + 23992 - 19968: 0xE7AE, + 23994 - 19968: 0xD6BA, + 23996 - 19968: 0xDFEC, + 23997 - 19968: 0xE4C0, + 24013 - 19968: 0xE8E4, + 24018 - 19968: 0xD8B5, + 24022 - 19968: 0xE4DC, + 24029 - 19968: 0xF4B9, + 24030 - 19968: 0xF1B6, + 24033 - 19968: 0xE2DE, + 24034 - 19968: 0xE1B5, + 24037 - 19968: 0xCDEF, + 24038 - 19968: 0xF1A7, + 24039 - 19968: 0xCEE5, + 24040 - 19968: 0xCBDD, + 24043 - 19968: 0xD9E3, + 24046 - 19968: 0xF3AC, + 24049 - 19968: 0xD0F9, + 24050 - 19968: 0xECAB, + 24051 - 19968: 0xDED3, + 24052 - 19968: 0xF7E9, + 24055 - 19968: 0xF9F5, + 24061 - 19968: 0xE1DE, + 24062 - 19968: 0xCBEE, + 24066 - 19968: 0xE3BC, + 24067 - 19968: 0xF8D6, + 24070 - 19968: 0xDBEE, + 24076 - 19968: 0xFDF1, + 24081 - 19968: 0xF7B6, + 24086 - 19968: 0xF4DE, + 24089 - 19968: 0xF2ED, + 24091 - 19968: 0xDBD9, + 24093 - 19968: 0xF0A8, + 24101 - 19968: 0xE1FD, + 24107 - 19968: 0xDED4, + 24109 - 19968: 0xE0AC, + 24115 - 19968: 0xEDE3, + 24118 - 19968: 0xD3E1, + 24120 - 19968: 0xDFC8, + 24125 - 19968: 0xD9B6, + 24127 - 19968: 0xFDAC, + 24128 - 19968: 0xEFD3, + 24132 - 19968: 0xE4C1, + 24133 - 19968: 0xF8EB, + 24135 - 19968: 0xDBAC, + 24140 - 19968: 0xFCC6, + 24149 - 19968: 0xD8AD, + 24159 - 19968: 0xF6BA, + 24161 - 19968: 0xDBDF, + 24162 - 19968: 0xD3D3, + 24163 - 19968: 0xF8C7, + 24178 - 19968: 0xCACE, + 24179 - 19968: 0xF8C1, + 24180 - 19968: 0xD2B4, + 24183 - 19968: 0xDCB4, + 24184 - 19968: 0xFAB9, + 24185 - 19968: 0xCACF, + 24187 - 19968: 0xFCB3, + 24188 - 19968: 0xEAEA, + 24189 - 19968: 0xEAEB, + 24190 - 19968: 0xD0FA, + 24196 - 19968: 0xEDE4, + 24199 - 19968: 0xDDE7, + 24202 - 19968: 0xDFC9, + 24207 - 19968: 0xDFED, + 24213 - 19968: 0xEEBC, + 24215 - 19968: 0xEFC1, + 24218 - 19968: 0xCCD2, + 24220 - 19968: 0xDDA4, + 24224 - 19968: 0xDFCA, + 24230 - 19968: 0xD3F8, + 24231 - 19968: 0xF1A8, + 24235 - 19968: 0xCDB7, + 24237 - 19968: 0xEFD4, + 24245 - 19968: 0xE4DD, + 24246 - 19968: 0xDFEE, + 24247 - 19968: 0xCBAC, + 24248 - 19968: 0xE9BC, + 24254 - 19968: 0xEAEC, + 24258 - 19968: 0xDFCB, + 24264 - 19968: 0xF9BF, + 24265 - 19968: 0xD6AF, + 24266 - 19968: 0xD5C6, + 24272 - 19968: 0xCFAA, + 24275 - 19968: 0xCEA9, + 24278 - 19968: 0xD6F8, + 24282 - 19968: 0xF1B7, + 24283 - 19968: 0xEEF8, + 24287 - 19968: 0xD9D9, + 24288 - 19968: 0xF3DF, + 24290 - 19968: 0xF8C8, + 24291 - 19968: 0xCEC6, + 24300 - 19968: 0xD5E6, + 24307 - 19968: 0xF4E6, + 24310 - 19968: 0xE6C5, + 24311 - 19968: 0xEFD5, + 24314 - 19968: 0xCBEF, + 24315 - 19968: 0xFCDF, + 24321 - 19968: 0xDCA7, + 24324 - 19968: 0xD6E7, + 24330 - 19968: 0xF8C9, + 24335 - 19968: 0xE3D2, + 24337 - 19968: 0xE3BD, + 24339 - 19968: 0xCFE1, + 24340 - 19968: 0xF0C0, + 24341 - 19968: 0xECDA, + 24343 - 19968: 0xDDD7, + 24344 - 19968: 0xFBF0, + 24347 - 19968: 0xECAC, + 24351 - 19968: 0xF0A9, + 24358 - 19968: 0xFAD7, + 24359 - 19968: 0xFBC1, + 24361 - 19968: 0xD2C0, + 24369 - 19968: 0xE5B0, + 24373 - 19968: 0xEDE5, + 24378 - 19968: 0xCBAD, + 24380 - 19968: 0xF9B0, + 24392 - 19968: 0xF7A5, + 24394 - 19968: 0xCBAE, + 24396 - 19968: 0xDAAF, + 24398 - 19968: 0xD8B6, + 24406 - 19968: 0xD3A7, + 24407 - 19968: 0xFBB2, + 24409 - 19968: 0xFDC4, + 24411 - 19968: 0xECAD, + 24418 - 19968: 0xFBA1, + 24422 - 19968: 0xE5E9, + 24423 - 19968: 0xE9EE, + 24425 - 19968: 0xF3F4, + 24426 - 19968: 0xF8F3, + 24427 - 19968: 0xF0C1, + 24428 - 19968: 0xDEAF, + 24429 - 19968: 0xF8B0, + 24432 - 19968: 0xF3E0, + 24433 - 19968: 0xE7AF, + 24439 - 19968: 0xDBAD, + 24441 - 19968: 0xE6B5, + 24444 - 19968: 0xF9A8, + 24447 - 19968: 0xDDD8, + 24448 - 19968: 0xE8D9, + 24449 - 19968: 0xEFD6, + 24453 - 19968: 0xD3E2, + 24455 - 19968: 0xE2DF, + 24458 - 19968: 0xFCE0, + 24459 - 19968: 0xD7C8, + 24460 - 19968: 0xFDAD, + 24464 - 19968: 0xDFEF, + 24465 - 19968: 0xCCD3, + 24466 - 19968: 0xD3F9, + 24471 - 19968: 0xD4F0, + 24472 - 19968: 0xDBC7, + 24473 - 19968: 0xDED5, + 24478 - 19968: 0xF0F4, + 24480 - 19968: 0xD5D0, + 24481 - 19968: 0xE5D9, + 24488 - 19968: 0xFCC7, + 24489 - 19968: 0xDCD6, + 24490 - 19968: 0xE2E0, + 24494 - 19968: 0xDAB0, + 24501 - 19968: 0xF3A3, + 24503 - 19968: 0xD3EC, + 24505 - 19968: 0xF4CB, + 24509 - 19968: 0xFDC5, + 24515 - 19968: 0xE3FD, + 24517 - 19968: 0xF9B1, + 24524 - 19968: 0xD0FB, + 24525 - 19968: 0xECDB, + 24534 - 19968: 0xF5BC, + 24535 - 19968: 0xF2A4, + 24536 - 19968: 0xD8CE, + 24537 - 19968: 0xD8CF, + 24544 - 19968: 0xF5F7, + 24555 - 19968: 0xF6E1, + 24565 - 19968: 0xD2B7, + 24573 - 19968: 0xFBEC, + 24575 - 19968: 0xDDC8, + 24591 - 19968: 0xE4E8, + 24594 - 19968: 0xD2C1, + 24598 - 19968: 0xF8D7, + 24604 - 19968: 0xD6BB, + 24605 - 19968: 0xDED6, + 24608 - 19968: 0xF7BD, + 24609 - 19968: 0xECAE, + 24613 - 19968: 0xD0E1, + 24615 - 19968: 0xE0F5, + 24616 - 19968: 0xEAB3, + 24618 - 19968: 0xCED6, + 24623 - 19968: 0xCCA5, + 24641 - 19968: 0xECF6, + 24642 - 19968: 0xE2E1, + 24643 - 19968: 0xE3BE, + 24653 - 19968: 0xFCC8, + 24656 - 19968: 0xCDF0, + 24658 - 19968: 0xF9F6, + 24661 - 19968: 0xDFF0, + 24665 - 19968: 0xE5BF, + 24669 - 19968: 0xCEBF, + 24674 - 19968: 0xFCE1, + 24675 - 19968: 0xEDB0, + 24676 - 19968: 0xFDD1, + 24677 - 19968: 0xF6BB, + 24680 - 19968: 0xF9CF, + 24681 - 19968: 0xEBDA, + 24682 - 19968: 0xCAC1, + 24684 - 19968: 0xD2B8, + 24685 - 19968: 0xCDF1, + 24687 - 19968: 0xE3D3, + 24688 - 19968: 0xFDE6, + 24709 - 19968: 0xE6ED, + 24713 - 19968: 0xE3FA, + 24716 - 19968: 0xF0AA, + 24717 - 19968: 0xF9D0, + 24724 - 19968: 0xFCE2, + 24726 - 19968: 0xF8A7, + 24730 - 19968: 0xE1E5, + 24731 - 19968: 0xEEF9, + 24735 - 19968: 0xE7F6, + 24736 - 19968: 0xEAED, + 24739 - 19968: 0xFCB4, + 24740 - 19968: 0xF5C2, + 24743 - 19968: 0xD7DC, + 24752 - 19968: 0xF0F5, + 24754 - 19968: 0xDDE8, + 24755 - 19968: 0xD3ED, + 24756 - 19968: 0xF5FC, + 24758 - 19968: 0xDABF, + 24760 - 19968: 0xCCFB, + 24764 - 19968: 0xD3FA, + 24765 - 19968: 0xF4A4, + 24773 - 19968: 0xEFD7, + 24775 - 19968: 0xD4C3, + 24785 - 19968: 0xFBE3, + 24794 - 19968: 0xFBED, + 24796 - 19968: 0xE0AD, + 24799 - 19968: 0xEAEE, + 24800 - 19968: 0xFBB3, + 24801 - 19968: 0xE4C2, + 24816 - 19968: 0xF6E7, + 24817 - 19968: 0xD2DD, + 24819 - 19968: 0xDFCC, + 24822 - 19968: 0xFCC9, + 24825 - 19968: 0xE5A9, + 24826 - 19968: 0xE0F6, + 24827 - 19968: 0xF6B3, + 24833 - 19968: 0xE1FE, + 24838 - 19968: 0xCBF0, + 24840 - 19968: 0xEAEF, + 24841 - 19968: 0xEAF0, + 24845 - 19968: 0xDAC0, + 24846 - 19968: 0xF8B4, + 24847 - 19968: 0xEBF2, + 24853 - 19968: 0xE4C3, + 24858 - 19968: 0xE9D7, + 24859 - 19968: 0xE4F1, + 24863 - 19968: 0xCAEF, + 24871 - 19968: 0xCED7, + 24880 - 19968: 0xFCCA, + 24884 - 19968: 0xF3E1, + 24887 - 19968: 0xCBC4, + 24892 - 19968: 0xE3E5, + 24894 - 19968: 0xCBC5, + 24895 - 19968: 0xEAB4, + 24898 - 19968: 0xE9BD, + 24900 - 19968: 0xD7C9, + 24903 - 19968: 0xEBDB, + 24904 - 19968: 0xEDB1, + 24906 - 19968: 0xCCC3, + 24907 - 19968: 0xF7BE, + 24908 - 19968: 0xFCCB, + 24915 - 19968: 0xF8F4, + 24917 - 19968: 0xD9B7, + 24920 - 19968: 0xF3D3, + 24921 - 19968: 0xF3D4, + 24925 - 19968: 0xF7E4, + 24927 - 19968: 0xF7D1, + 24930 - 19968: 0xD8B7, + 24931 - 19968: 0xCEB1, + 24932 - 19968: 0xCAC2, + 24935 - 19968: 0xFBB4, + 24936 - 19968: 0xCBC6, + 24939 - 19968: 0xF0F6, + 24942 - 19968: 0xD5E7, + 24944 - 19968: 0xEAD0, + 24950 - 19968: 0xCCD4, + 24951 - 19968: 0xCBAF, + 24957 - 19968: 0xF4AA, + 24958 - 19968: 0xE9AF, + 24961 - 19968: 0xF5C3, + 24962 - 19968: 0xE9D8, + 24970 - 19968: 0xDDE9, + 24974 - 19968: 0xF1F3, + 24976 - 19968: 0xD5FB, + 24977 - 19968: 0xDEBB, + 24980 - 19968: 0xF4FB, + 24984 - 19968: 0xFDF3, + 24985 - 19968: 0xFDF2, + 24986 - 19968: 0xF7A6, + 24996 - 19968: 0xDDC9, + 24999 - 19968: 0xD4D3, + 25001 - 19968: 0xCCA8, + 25003 - 19968: 0xDAC1, + 25004 - 19968: 0xCCD5, + 25006 - 19968: 0xD9E4, + 25010 - 19968: 0xFACA, + 25014 - 19968: 0xE5E3, + 25018 - 19968: 0xD3BC, + 25022 - 19968: 0xCAF0, + 25027 - 19968: 0xD0C4, + 25031 - 19968: 0xCAD0, + 25032 - 19968: 0xFAAB, + 25033 - 19968: 0xEBEB, + 25034 - 19968: 0xE7F8, + 25035 - 19968: 0xD9E5, + 25062 - 19968: 0xD1D7, + 25074 - 19968: 0xF3A4, + 25078 - 19968: 0xD4FB, + 25079 - 19968: 0xFCE3, + 25080 - 19968: 0xFAD8, + 25082 - 19968: 0xF3D5, + 25084 - 19968: 0xCFAB, + 25087 - 19968: 0xEBF3, + 25088 - 19968: 0xD5FC, + 25095 - 19968: 0xD3D4, + 25096 - 19968: 0xCDFC, + 25098 - 19968: 0xD9E6, + 25100 - 19968: 0xE2F9, + 25101 - 19968: 0xE2A1, + 25102 - 19968: 0xEBD4, + 25104 - 19968: 0xE0F7, + 25105 - 19968: 0xE4B2, + 25106 - 19968: 0xCCFC, + 25110 - 19968: 0xFBE4, + 25114 - 19968: 0xF4AB, + 25119 - 19968: 0xD0BD, + 25121 - 19968: 0xCAF1, + 25130 - 19968: 0xEFB8, + 25134 - 19968: 0xD7C0, + 25136 - 19968: 0xEEFA, + 25137 - 19968: 0xFDF4, + 25140 - 19968: 0xD3E3, + 25142 - 19968: 0xFBC2, + 25150 - 19968: 0xD5E8, + 25151 - 19968: 0xDBAE, + 25152 - 19968: 0xE1B6, + 25153 - 19968: 0xF8B7, + 25159 - 19968: 0xE0BF, + 25160 - 19968: 0xFBC3, + 25161 - 19968: 0xDDEA, + 25163 - 19968: 0xE2A2, + 25165 - 19968: 0xEEA6, + 25171 - 19968: 0xF6E8, + 25176 - 19968: 0xF6F5, + 25198 - 19968: 0xDDCA, + 25201 - 19968: 0xD0E2, + 25206 - 19968: 0xDDA6, + 25209 - 19968: 0xDDEB, + 25212 - 19968: 0xE4F9, + 25215 - 19968: 0xE3AF, + 25216 - 19968: 0xD0FC, + 25220 - 19968: 0xF4FC, + 25225 - 19968: 0xCCBC, + 25226 - 19968: 0xF7EA, + 25233 - 19968: 0xE5E4, + 25234 - 19968: 0xDFF1, + 25237 - 19968: 0xF7E1, + 25239 - 19968: 0xF9F7, + 25240 - 19968: 0xEFB9, + 25243 - 19968: 0xF8D8, + 25259 - 19968: 0xF9A9, + 25265 - 19968: 0xF8D9, + 25269 - 19968: 0xEEBD, + 25273 - 19968: 0xD8C6, + 25276 - 19968: 0xE4E3, + 25277 - 19968: 0xF5CE, + 25282 - 19968: 0xDDD9, + 25287 - 19968: 0xD9E7, + 25288 - 19968: 0xD2B9, + 25289 - 19968: 0xD5C3, + 25292 - 19968: 0xDAE5, + 25293 - 19968: 0xDAD0, + 25295 - 19968: 0xD1D9, + 25296 - 19968: 0xCED8, + 25298 - 19968: 0xCBDE, + 25299 - 19968: 0xF4AC, + 25300 - 19968: 0xDAFB, + 25302 - 19968: 0xF6E9, + 25303 - 19968: 0xE8F3, + 25304 - 19968: 0xCFAC, + 25305 - 19968: 0xF0F0, + 25307 - 19968: 0xF4FD, + 25308 - 19968: 0xDBC8, + 25324 - 19968: 0xCEC0, + 25325 - 19968: 0xE3D4, + 25326 - 19968: 0xD1CF, + 25327 - 19968: 0xF1F5, + 25329 - 19968: 0xCDF2, + 25331 - 19968: 0xCFEB, + 25335 - 19968: 0xCDB8, + 25342 - 19968: 0xE3A6, + 25343 - 19968: 0xD1DA, + 25345 - 19968: 0xF2A5, + 25351 - 19968: 0xF2A6, + 25353 - 19968: 0xE4CE, + 25361 - 19968: 0xD3FB, + 25387 - 19968: 0xF1A9, + 25391 - 19968: 0xF2C9, + 25402 - 19968: 0xEFD8, + 25403 - 19968: 0xE6C9, + 25405 - 19968: 0xD8B8, + 25406 - 19968: 0xFAF3, + 25417 - 19968: 0xF3B5, + 25420 - 19968: 0xF8A4, + 25423 - 19968: 0xD1F3, + 25424 - 19968: 0xE6C8, + 25429 - 19968: 0xF8DA, + 25447 - 19968: 0xDCE9, + 25448 - 19968: 0xDED7, + 25454 - 19968: 0xCBDF, + 25458 - 19968: 0xCFEC, + 25463 - 19968: 0xF4DF, + 25466 - 19968: 0xD1F4, + 25467 - 19968: 0xD2BA, + 25471 - 19968: 0xDFF2, + 25475 - 19968: 0xE1B7, + 25480 - 19968: 0xE2A3, + 25481 - 19968: 0xD3FC, + 25484 - 19968: 0xEDE6, + 25490 - 19968: 0xDBC9, + 25494 - 19968: 0xE4FA, + 25496 - 19968: 0xCFDE, + 25499 - 19968: 0xCED0, + 25504 - 19968: 0xD5D3, + 25505 - 19968: 0xF3F5, + 25506 - 19968: 0xF7AE, + 25509 - 19968: 0xEFC8, + 25511 - 19968: 0xCDF3, + 25512 - 19968: 0xF5CF, + 25513 - 19968: 0xE5F3, + 25514 - 19968: 0xF0C2, + 25536 - 19968: 0xCAD1, + 25540 - 19968: 0xEAF1, + 25542 - 19968: 0xD0A6, + 25551 - 19968: 0xD9DA, + 25552 - 19968: 0xF0AB, + 25558 - 19968: 0xEBE7, + 25562 - 19968: 0xE5C0, + 25563 - 19968: 0xFCB5, + 25569 - 19968: 0xE4C4, + 25581 - 19968: 0xCCA9, + 25582 - 19968: 0xFDC6, + 25588 - 19968: 0xEAB5, + 25590 - 19968: 0xE5AA, + 25591 - 19968: 0xDFBA, + 25613 - 19968: 0xE1DF, + 25615 - 19968: 0xDAD1, + 25620 - 19968: 0xE1B8, + 25622 - 19968: 0xE8F4, + 25623 - 19968: 0xD3FD, + 25628 - 19968: 0xE2A4, + 25634 - 19968: 0xF2CA, + 25644 - 19968: 0xDAE6, + 25645 - 19968: 0xF7B3, + 25658 - 19968: 0xFDCD, + 25662 - 19968: 0xF3B6, + 25688 - 19968: 0xEED7, + 25696 - 19968: 0xF5C4, + 25705 - 19968: 0xD8A4, + 25711 - 19968: 0xF2A7, + 25720 - 19968: 0xD9B8, + 25721 - 19968: 0xD9B9, + 25722 - 19968: 0xEFC9, + 25736 - 19968: 0xD6CE, + 25745 - 19968: 0xF7CB, + 25746 - 19968: 0xDFAE, + 25747 - 19968: 0xE8F5, + 25754 - 19968: 0xD2B5, + 25758 - 19968: 0xD3D5, + 25764 - 19968: 0xF4CC, + 25765 - 19968: 0xDAFC, + 25771 - 19968: 0xD9E8, + 25773 - 19968: 0xF7EB, + 25774 - 19968: 0xF5C9, + 25776 - 19968: 0xF3BC, + 25778 - 19968: 0xDAD2, + 25787 - 19968: 0xD3B5, + 25793 - 19968: 0xE8B6, + 25796 - 19968: 0xD6CF, + 25797 - 19968: 0xF4BA, + 25799 - 19968: 0xF7C9, + 25802 - 19968: 0xCCAA, + 25805 - 19968: 0xF0C3, + 25806 - 19968: 0xCCD6, + 25810 - 19968: 0xD0D3, + 25812 - 19968: 0xD3BD, + 25816 - 19968: 0xDBFB, + 25818 - 19968: 0xCBE0, + 25825 - 19968: 0xD3E4, + 25826 - 19968: 0xF6F7, + 25829 - 19968: 0xD5BA, + 25830 - 19968: 0xF3CD, + 25831 - 19968: 0xCBE1, + 25836 - 19968: 0xEBF4, + 25842 - 19968: 0xF4AD, + 25844 - 19968: 0xFCAA, + 25850 - 19968: 0xF7EC, + 25854 - 19968: 0xE8F6, + 25856 - 19968: 0xDAE7, + 25860 - 19968: 0xF7CC, + 25880 - 19968: 0xE5C1, + 25885 - 19968: 0xE0EE, + 25891 - 19968: 0xD5FD, + 25898 - 19968: 0xCEE6, + 25899 - 19968: 0xFCAB, + 25900 - 19968: 0xD5BB, + 25903 - 19968: 0xF2A8, + 25910 - 19968: 0xE2A5, + 25911 - 19968: 0xCDB9, + 25912 - 19968: 0xEAF2, + 25913 - 19968: 0xCBC7, + 25915 - 19968: 0xCDF4, + 25918 - 19968: 0xDBAF, + 25919 - 19968: 0xEFD9, + 25925 - 19968: 0xCDBA, + 25928 - 19968: 0xFCF9, + 25933 - 19968: 0xDFF3, + 25934 - 19968: 0xCEE7, + 25935 - 19968: 0xDAC2, + 25937 - 19968: 0xCFAD, + 25942 - 19968: 0xE7F9, + 25943 - 19968: 0xF8A8, + 25950 - 19968: 0xF3E2, + 25954 - 19968: 0xCAF2, + 25955 - 19968: 0xDFA4, + 25958 - 19968: 0xD4C4, + 25964 - 19968: 0xCCD7, + 25965 - 19968: 0xE5C2, + 25970 - 19968: 0xCDBB, + 25972 - 19968: 0xEFDA, + 25973 - 19968: 0xEED8, + 25975 - 19968: 0xDDA7, + 25976 - 19968: 0xE2A6, + 25982 - 19968: 0xE0C0, + 25986 - 19968: 0xD6B0, + 25987 - 19968: 0xF8CA, + 25989 - 19968: 0xFCFA, + 25991 - 19968: 0xD9FE, + 25996 - 19968: 0xDEB0, + 26000 - 19968: 0xDDEC, + 26001 - 19968: 0xDAE8, + 26007 - 19968: 0xD4E0, + 26009 - 19968: 0xD6F9, + 26011 - 19968: 0xCDD7, + 26012 - 19968: 0xDED8, + 26015 - 19968: 0xF2F8, + 26017 - 19968: 0xE4D6, + 26020 - 19968: 0xD0C5, + 26021 - 19968: 0xF4AE, + 26023 - 19968: 0xDDA8, + 26027 - 19968: 0xEDC5, + 26028 - 19968: 0xF3D6, + 26031 - 19968: 0xDED9, + 26032 - 19968: 0xE3E6, + 26039 - 19968: 0xD3A8, + 26041 - 19968: 0xDBB0, + 26044 - 19968: 0xE5DA, + 26045 - 19968: 0xE3BF, + 26049 - 19968: 0xDBB1, + 26053 - 19968: 0xD5E9, + 26059 - 19968: 0xE0C1, + 26060 - 19968: 0xEFDB, + 26063 - 19968: 0xF0E9, + 26066 - 19968: 0xD7B2, + 26071 - 19968: 0xD0FD, + 26080 - 19968: 0xD9E9, + 26083 - 19968: 0xD0FE, + 26085 - 19968: 0xECED, + 26086 - 19968: 0xD3A9, + 26088 - 19968: 0xF2A9, + 26089 - 19968: 0xF0C4, + 26092 - 19968: 0xE2E2, + 26093 - 19968: 0xE9EF, + 26097 - 19968: 0xF9D1, + 26100 - 19968: 0xE9D9, + 26106 - 19968: 0xE8DA, + 26107 - 19968: 0xDAC3, + 26108 - 19968: 0xDAC4, + 26109 - 19968: 0xD4C5, + 26111 - 19968: 0xE7FA, + 26118 - 19968: 0xCDE0, + 26119 - 19968: 0xE3B0, + 26121 - 19968: 0xDBB2, + 26122 - 19968: 0xFBC4, + 26124 - 19968: 0xF3E3, + 26126 - 19968: 0xD9A5, + 26127 - 19968: 0xFBE7, + 26128 - 19968: 0xDDCB, + 26129 - 19968: 0xD0D4, + 26131 - 19968: 0xE6B6, + 26132 - 19968: 0xE0AE, + 26133 - 19968: 0xFDDA, + 26142 - 19968: 0xDCB5, + 26143 - 19968: 0xE0F8, + 26144 - 19968: 0xE7B1, + 26149 - 19968: 0xF5F0, + 26151 - 19968: 0xD8DC, + 26152 - 19968: 0xEDC6, + 26157 - 19968: 0xE1B9, + 26159 - 19968: 0xE3C0, + 26160 - 19968: 0xF9C0, + 26161 - 19968: 0xE9F0, + 26164 - 19968: 0xD9DB, + 26166 - 19968: 0xF3E4, + 26170 - 19968: 0xDCB6, + 26171 - 19968: 0xE4E9, + 26177 - 19968: 0xF0C5, + 26178 - 19968: 0xE3C1, + 26179 - 19968: 0xFCCC, + 26180 - 19968: 0xFCCD, + 26185 - 19968: 0xF2CB, + 26187 - 19968: 0xF2CC, + 26191 - 19968: 0xE4CF, + 26201 - 19968: 0xF1DB, + 26203 - 19968: 0xFAD9, + 26205 - 19968: 0xF1B8, + 26206 - 19968: 0xFDF5, + 26207 - 19968: 0xE0F9, + 26212 - 19968: 0xE7FB, + 26213 - 19968: 0xFCB7, + 26214 - 19968: 0xFCE4, + 26215 - 19968: 0xFBC5, + 26216 - 19968: 0xE3E7, + 26217 - 19968: 0xD8B9, + 26219 - 19968: 0xF6F8, + 26222 - 19968: 0xDCC5, + 26223 - 19968: 0xCCD8, + 26227 - 19968: 0xE0AF, + 26228 - 19968: 0xF4E7, + 26230 - 19968: 0xEFDC, + 26231 - 19968: 0xCFFC, + 26232 - 19968: 0xEFDD, + 26234 - 19968: 0xF2AA, + 26244 - 19968: 0xFDBE, + 26247 - 19968: 0xCAAC, + 26248 - 19968: 0xFDBB, + 26249 - 19968: 0xFDC7, + 26254 - 19968: 0xE7B2, + 26256 - 19968: 0xEAD1, + 26257 - 19968: 0xDFF4, + 26262 - 19968: 0xD1EC, + 26263 - 19968: 0xE4DE, + 26264 - 19968: 0xE5C3, + 26269 - 19968: 0xD9A6, + 26272 - 19968: 0xCDBC, + 26274 - 19968: 0xF3E5, + 26283 - 19968: 0xEDD5, + 26286 - 19968: 0xD9BA, + 26290 - 19968: 0xEDE7, + 26291 - 19968: 0xFBB5, + 26292 - 19968: 0xF8EC, + 26297 - 19968: 0xE0E7, + 26299 - 19968: 0xCCD9, + 26302 - 19968: 0xD4C6, + 26308 - 19968: 0xE7A5, + 26310 - 19968: 0xD5F5, + 26311 - 19968: 0xD3BE, + 26313 - 19968: 0xFCFB, + 26326 - 19968: 0xE4F2, + 26329 - 19968: 0xDFF5, + 26332 - 19968: 0xE8F8, + 26333 - 19968: 0xF8ED, + 26336 - 19968: 0xCEC7, + 26342 - 19968: 0xFDF6, + 26352 - 19968: 0xE8D8, + 26354 - 19968: 0xCDD8, + 26355 - 19968: 0xE7D6, + 26356 - 19968: 0xCCDA, + 26359 - 19968: 0xCAE3, + 26360 - 19968: 0xDFF6, + 26361 - 19968: 0xF0C7, + 26362 - 19968: 0xF0C6, + 26364 - 19968: 0xD8BA, + 26366 - 19968: 0xF1F4, + 26367 - 19968: 0xF4F0, + 26368 - 19968: 0xF5CC, + 26371 - 19968: 0xFCE5, + 26376 - 19968: 0xEAC5, + 26377 - 19968: 0xEAF3, + 26379 - 19968: 0xDDDB, + 26381 - 19968: 0xDCD7, + 26388 - 19968: 0xDEFD, + 26389 - 19968: 0xF2F9, + 26391 - 19968: 0xD5C7, + 26395 - 19968: 0xD8D0, + 26397 - 19968: 0xF0C8, + 26398 - 19968: 0xD1A1, + 26399 - 19968: 0xD1A2, + 26406 - 19968: 0xD9D4, + 26407 - 19968: 0xD6E8, + 26408 - 19968: 0xD9CA, + 26410 - 19968: 0xDAB1, + 26411 - 19968: 0xD8C7, + 26412 - 19968: 0xDCE2, + 26413 - 19968: 0xF3CE, + 26414 - 19968: 0xF5F4, + 26417 - 19968: 0xF1B9, + 26420 - 19968: 0xDAD3, + 26422 - 19968: 0xF6EA, + 26426 - 19968: 0xCFF5, + 26429 - 19968: 0xFDAE, + 26438 - 19968: 0xCAD2, + 26441 - 19968: 0xDFB4, + 26446 - 19968: 0xD7DD, + 26447 - 19968: 0xFABA, + 26448 - 19968: 0xEEA7, + 26449 - 19968: 0xF5BD, + 26451 - 19968: 0xF8F5, + 26454 - 19968: 0xEDE8, + 26460 - 19968: 0xD4E1, + 26462 - 19968: 0xD1A3, + 26463 - 19968: 0xE1D6, + 26477 - 19968: 0xF9F8, + 26479 - 19968: 0xDBCA, + 26480 - 19968: 0xCBF9, + 26481 - 19968: 0xD4D4, + 26483 - 19968: 0xD9DC, + 26485 - 19968: 0xEEBE, + 26487 - 19968: 0xF7ED, + 26491 - 19968: 0xD2EE, + 26494 - 19968: 0xE1E6, + 26495 - 19968: 0xF7F9, + 26503 - 19968: 0xDDED, + 26505 - 19968: 0xE8DB, + 26507 - 19968: 0xDBB3, + 26511 - 19968: 0xD1F7, + 26512 - 19968: 0xE0B0, + 26515 - 19968: 0xD4E2, + 26517 - 19968: 0xF6D7, + 26519 - 19968: 0xD7F9, + 26522 - 19968: 0xD8DD, + 26524 - 19968: 0xCDFD, + 26525 - 19968: 0xF2AB, + 26543 - 19968: 0xCDBD, + 26544 - 19968: 0xF8C2, + 26547 - 19968: 0xF2AC, + 26550 - 19968: 0xCAAD, + 26551 - 19968: 0xCAAE, + 26552 - 19968: 0xCFAE, + 26558 - 19968: 0xE3C2, + 26564 - 19968: 0xDCB7, + 26575 - 19968: 0xDBDA, + 26576 - 19968: 0xD9BB, + 26577 - 19968: 0xCAF3, + 26578 - 19968: 0xF6D3, + 26579 - 19968: 0xE6F8, + 26580 - 19968: 0xEAF5, + 26586 - 19968: 0xEAF6, + 26589 - 19968: 0xF6F9, + 26601 - 19968: 0xCFAF, + 26604 - 19968: 0xCAD3, + 26607 - 19968: 0xCAAF, + 26608 - 19968: 0xD2B0, + 26609 - 19968: 0xF1BA, + 26611 - 19968: 0xD7B3, + 26612 - 19968: 0xE3C3, + 26613 - 19968: 0xF3FD, + 26614 - 19968: 0xDEDA, + 26619 - 19968: 0xDEDB, + 26622 - 19968: 0xEFDE, + 26642 - 19968: 0xE2E3, + 26643 - 19968: 0xEEFB, + 26646 - 19968: 0xDFF7, + 26647 - 19968: 0xD7CA, + 26657 - 19968: 0xCEE8, + 26658 - 19968: 0xDBDB, + 26666 - 19968: 0xF1BB, + 26671 - 19968: 0xE9F1, + 26680 - 19968: 0xFAB7, + 26681 - 19968: 0xD0C6, + 26684 - 19968: 0xCCAB, + 26685 - 19968: 0xEEA8, + 26688 - 19968: 0xCBFA, + 26689 - 19968: 0xF9F9, + 26690 - 19968: 0xCCFD, + 26691 - 19968: 0xD3FE, + 26696 - 19968: 0xE4D0, + 26702 - 19968: 0xF2EE, + 26704 - 19968: 0xD4D5, + 26705 - 19968: 0xDFCD, + 26707 - 19968: 0xFCB8, + 26708 - 19968: 0xD1D0, + 26733 - 19968: 0xF2CD, + 26742 - 19968: 0xF7D2, + 26751 - 19968: 0xCAD4, + 26753 - 19968: 0xD5D9, + 26757 - 19968: 0xD8DE, + 26767 - 19968: 0xCDD9, + 26771 - 19968: 0xEEA9, + 26772 - 19968: 0xF6BC, + 26775 - 19968: 0xCCDB, + 26781 - 19968: 0xF0C9, + 26783 - 19968: 0xFCFC, + 26785 - 19968: 0xE8C9, + 26786 - 19968: 0xF4FE, + 26791 - 19968: 0xE7FC, + 26792 - 19968: 0xD7DE, + 26797 - 19968: 0xDEDC, + 26799 - 19968: 0xF0AC, + 26800 - 19968: 0xCCFE, + 26801 - 19968: 0xCDE1, + 26803 - 19968: 0xE1BA, + 26805 - 19968: 0xDBEF, + 26806 - 19968: 0xDAB2, + 26820 - 19968: 0xD1A5, + 26821 - 19968: 0xDCB8, + 26825 - 19968: 0xD8F6, + 26827 - 19968: 0xD1A4, + 26829 - 19968: 0xCDE2, + 26834 - 19968: 0xDCEA, + 26837 - 19968: 0xF0F7, + 26839 - 19968: 0xF0CA, + 26840 - 19968: 0xD0BE, + 26842 - 19968: 0xDDDC, + 26847 - 19968: 0xD4D6, + 26848 - 19968: 0xD3D6, + 26855 - 19968: 0xEDD0, + 26856 - 19968: 0xCDA1, + 26862 - 19968: 0xDFB5, + 26866 - 19968: 0xDFF8, + 26873 - 19968: 0xD4A1, + 26874 - 19968: 0xCEB2, + 26880 - 19968: 0xE8CA, + 26885 - 19968: 0xEBF5, + 26893 - 19968: 0xE3D5, + 26894 - 19968: 0xF5D0, + 26898 - 19968: 0xF5A1, + 26919 - 19968: 0xD9A7, + 26928 - 19968: 0xE5AB, + 26941 - 19968: 0xE6CB, + 26943 - 19968: 0xF5F1, + 26954 - 19968: 0xE5C5, + 26963 - 19968: 0xF9A3, + 26964 - 19968: 0xE0DB, + 26965 - 19968: 0xF6EB, + 26967 - 19968: 0xCBF1, + 26969 - 19968: 0xD9EA, + 26970 - 19968: 0xF5A2, + 26974 - 19968: 0xD7D1, + 26976 - 19968: 0xD1F8, + 26977 - 19968: 0xEAF8, + 26978 - 19968: 0xEAF9, + 26979 - 19968: 0xDAB3, + 26984 - 19968: 0xEFDF, + 26987 - 19968: 0xF1EF, + 26989 - 19968: 0xE5F6, + 26990 - 19968: 0xEEBF, + 26991 - 19968: 0xE2E4, + 26997 - 19968: 0xD0BF, + 26999 - 19968: 0xFAAC, + 27000 - 19968: 0xF5D1, + 27001 - 19968: 0xE7B3, + 27029 - 19968: 0xE9BE, + 27035 - 19968: 0xF2CE, + 27036 - 19968: 0xDBB4, + 27045 - 19968: 0xFCCE, + 27047 - 19968: 0xDDEE, + 27054 - 19968: 0xE7B4, + 27060 - 19968: 0xD7B4, + 27067 - 19968: 0xF7B4, + 27073 - 19968: 0xCDBE, + 27075 - 19968: 0xDAE9, + 27083 - 19968: 0xCFB0, + 27084 - 19968: 0xF7D9, + 27085 - 19968: 0xF3E6, + 27088 - 19968: 0xCED9, + 27112 - 19968: 0xCEAA, + 27114 - 19968: 0xCBC8, + 27131 - 19968: 0xD0A7, + 27133 - 19968: 0xF0CB, + 27135 - 19968: 0xD0C7, + 27138 - 19968: 0xE4C5, + 27146 - 19968: 0xDBE0, + 27153 - 19968: 0xD5DA, + 27155 - 19968: 0xD7A7, + 27159 - 19968: 0xEEC0, + 27161 - 19968: 0xF8F6, + 27166 - 19968: 0xF5D2, + 27167 - 19968: 0xEDE9, + 27169 - 19968: 0xD9BC, + 27171 - 19968: 0xE5C6, + 27189 - 19968: 0xF5A3, + 27192 - 19968: 0xDAD4, + 27193 - 19968: 0xE2A7, + 27194 - 19968: 0xFBFC, + 27197 - 19968: 0xF1DC, + 27204 - 19968: 0xCAF4, + 27208 - 19968: 0xE8FA, + 27211 - 19968: 0xCEE9, + 27218 - 19968: 0xE9F8, + 27219 - 19968: 0xE2E5, + 27224 - 19968: 0xD0B9, + 27225 - 19968: 0xD4F2, + 27231 - 19968: 0xD1A6, + 27233 - 19968: 0xDFCE, + 27243 - 19968: 0xFCF4, + 27264 - 19968: 0xD3AA, + 27268 - 19968: 0xCCAC, + 27273 - 19968: 0xEFE0, + 27277 - 19968: 0xE5E5, + 27278 - 19968: 0xD0D5, + 27287 - 19968: 0xDBFC, + 27292 - 19968: 0xFCE6, + 27298 - 19968: 0xCBFE, + 27299 - 19968: 0xEDEA, + 27315 - 19968: 0xDEB1, + 27323 - 19968: 0xF9E3, + 27330 - 19968: 0xD4A2, + 27331 - 19968: 0xCFF6, + 27347 - 19968: 0xD6D0, + 27354 - 19968: 0xD5EA, + 27355 - 19968: 0xF1EE, + 27382 - 19968: 0xFACB, + 27387 - 19968: 0xE5A1, + 27396 - 19968: 0xD5B1, + 27402 - 19968: 0xCFED, + 27404 - 19968: 0xEDEB, + 27410 - 19968: 0xD5B2, + 27414 - 19968: 0xD5BC, + 27424 - 19968: 0xFDE2, + 27425 - 19968: 0xF3AD, + 27427 - 19968: 0xFDDB, + 27442 - 19968: 0xE9B0, + 27450 - 19968: 0xD1A7, + 27453 - 19968: 0xFDE3, + 27454 - 19968: 0xCEB3, + 27462 - 19968: 0xFDE4, + 27463 - 19968: 0xFACE, + 27468 - 19968: 0xCAB0, + 27470 - 19968: 0xF7A7, + 27472 - 19968: 0xCFB1, + 27487 - 19968: 0xE6A2, + 27489 - 19968: 0xFCB6, + 27490 - 19968: 0xF2AD, + 27491 - 19968: 0xEFE1, + 27492 - 19968: 0xF3AE, + 27493 - 19968: 0xDCC6, + 27494 - 19968: 0xD9EB, + 27498 - 19968: 0xE8E0, + 27506 - 19968: 0xE1A8, + 27511 - 19968: 0xD5F6, + 27512 - 19968: 0xCFFD, + 27515 - 19968: 0xDEDD, + 27519 - 19968: 0xD9D1, + 27523 - 19968: 0xE4EA, + 27524 - 19968: 0xF2CF, + 27526 - 19968: 0xF7BF, + 27529 - 19968: 0xE2E6, + 27530 - 19968: 0xE2A8, + 27542 - 19968: 0xE3D6, + 27544 - 19968: 0xEDD1, + 27550 - 19968: 0xE9F9, + 27566 - 19968: 0xD6B1, + 27567 - 19968: 0xDEB2, + 27570 - 19968: 0xE0E8, + 27573 - 19968: 0xD3AB, + 27575 - 19968: 0xEBDC, + 27578 - 19968: 0xDFAF, + 27580 - 19968: 0xCAC3, + 27583 - 19968: 0xEEFC, + 27585 - 19968: 0xFDC3, + 27589 - 19968: 0xEBF6, + 27590 - 19968: 0xCFB2, + 27595 - 19968: 0xD9EC, + 27597 - 19968: 0xD9BD, + 27599 - 19968: 0xD8DF, + 27602 - 19968: 0xD4B8, + 27603 - 19968: 0xEBBE, + 27604 - 19968: 0xDDEF, + 27606 - 19968: 0xDDF0, + 27607 - 19968: 0xDDF1, + 27608 - 19968: 0xDDF2, + 27611 - 19968: 0xD9BE, + 27627 - 19968: 0xFBC6, + 27628 - 19968: 0xCFB3, + 27656 - 19968: 0xEEFD, + 27663 - 19968: 0xE4AB, + 27665 - 19968: 0xDAC5, + 27667 - 19968: 0xD8EC, + 27683 - 19968: 0xD1A8, + 27700 - 19968: 0xE2A9, + 27703 - 19968: 0xDEBC, + 27704 - 19968: 0xE7B5, + 27710 - 19968: 0xDBF0, + 27712 - 19968: 0xEFE2, + 27713 - 19968: 0xF1F0, + 27714 - 19968: 0xCFB4, + 27726 - 19968: 0xDBF1, + 27728 - 19968: 0xE0B1, + 27733 - 19968: 0xDFA5, + 27735 - 19968: 0xF9D2, + 27738 - 19968: 0xE7FD, + 27741 - 19968: 0xE6A3, + 27742 - 19968: 0xFBF1, + 27743 - 19968: 0xCBB0, + 27744 - 19968: 0xF2AE, + 27752 - 19968: 0xCDE7, + 27754 - 19968: 0xE8DC, + 27757 - 19968: 0xE7D7, + 27760 - 19968: 0xF7C0, + 27762 - 19968: 0xD0E3, + 27766 - 19968: 0xDAA1, + 27770 - 19968: 0xCCBD, + 27773 - 19968: 0xD1A9, + 27774 - 19968: 0xDDCC, + 27777 - 19968: 0xE3FE, + 27778 - 19968: 0xD1AA, + 27779 - 19968: 0xE8AA, + 27781 - 19968: 0xEAB6, + 27782 - 19968: 0xF9FA, + 27783 - 19968: 0xE6CC, + 27784 - 19968: 0xF6D8, + 27788 - 19968: 0xD4C7, + 27792 - 19968: 0xD9CB, + 27794 - 19968: 0xD9D2, + 27795 - 19968: 0xD3CB, + 27796 - 19968: 0xD8F7, + 27797 - 19968: 0xDAA9, + 27798 - 19968: 0xF5F8, + 27801 - 19968: 0xDEDE, + 27802 - 19968: 0xF2AF, + 27803 - 19968: 0xF8A9, + 27819 - 19968: 0xD8C8, + 27822 - 19968: 0xEEC1, + 27827 - 19968: 0xF9C1, + 27832 - 19968: 0xDDF3, + 27833 - 19968: 0xEAFA, + 27835 - 19968: 0xF6BD, + 27836 - 19968: 0xE1BB, + 27837 - 19968: 0xCDBF, + 27838 - 19968: 0xF4D4, + 27839 - 19968: 0xE6CD, + 27841 - 19968: 0xFCCF, + 27842 - 19968: 0xFBA2, + 27844 - 19968: 0xE0DC, + 27849 - 19968: 0xF4BB, + 27850 - 19968: 0xDAD5, + 27852 - 19968: 0xF9B2, + 27859 - 19968: 0xFBF2, + 27861 - 19968: 0xDBF6, + 27863 - 19968: 0xDEDF, + 27867 - 19968: 0xDBF2, + 27873 - 19968: 0xF8DC, + 27874 - 19968: 0xF7EE, + 27875 - 19968: 0xEBE8, + 27877 - 19968: 0xD2FA, + 27880 - 19968: 0xF1BC, + 27883 - 19968: 0xFADA, + 27886 - 19968: 0xDAEA, + 27887 - 19968: 0xDAC6, + 27888 - 19968: 0xF7C1, + 27891 - 19968: 0xE7B6, + 27915 - 19968: 0xE5C7, + 27916 - 19968: 0xD6AC, + 27921 - 19968: 0xDCC7, + 27927 - 19968: 0xE1A9, + 27929 - 19968: 0xE2AA, + 27931 - 19968: 0xD5A6, + 27934 - 19968: 0xD4D7, + 27941 - 19968: 0xF2D0, + 27943 - 19968: 0xEAFB, + 27945 - 19968: 0xE0DD, + 27946 - 19968: 0xFBF3, + 27954 - 19968: 0xF1BD, + 27957 - 19968: 0xE2E7, + 27958 - 19968: 0xFDD7, + 27960 - 19968: 0xCEC8, + 27961 - 19968: 0xEAB7, + 27963 - 19968: 0xFCC0, + 27965 - 19968: 0xFDE7, + 27966 - 19968: 0xF7EF, + 27969 - 19968: 0xD7B5, + 27993 - 19968: 0xEFBA, + 27994 - 19968: 0xF1DD, + 27996 - 19968: 0xDEB3, + 28003 - 19968: 0xE8CB, + 28006 - 19968: 0xF8DD, + 28009 - 19968: 0xFBC7, + 28010 - 19968: 0xD5C8, + 28012 - 19968: 0xD7DF, + 28014 - 19968: 0xDDA9, + 28020 - 19968: 0xE9B1, + 28023 - 19968: 0xFAAD, + 28024 - 19968: 0xF6D9, + 28025 - 19968: 0xFAF4, + 28031 - 19968: 0xF8AA, + 28037 - 19968: 0xE6EE, + 28039 - 19968: 0xCCDC, + 28040 - 19968: 0xE1BC, + 28041 - 19968: 0xE0EF, + 28044 - 19968: 0xE9BF, + 28045 - 19968: 0xFCFD, + 28046 - 19968: 0xE6CE, + 28049 - 19968: 0xE1D7, + 28051 - 19968: 0xE6CF, + 28053 - 19968: 0xF4F1, + 28079 - 19968: 0xE4F3, + 28082 - 19968: 0xE4FB, + 28085 - 19968: 0xF9E4, + 28096 - 19968: 0xEFE3, + 28099 - 19968: 0xCFEE, + 28100 - 19968: 0xF6BE, + 28101 - 19968: 0xE0B2, + 28102 - 19968: 0xFCFE, + 28103 - 19968: 0xD1AB, + 28107 - 19968: 0xD7FA, + 28111 - 19968: 0xFBC8, + 28113 - 19968: 0xE2D7, + 28120 - 19968: 0xD4A3, + 28121 - 19968: 0xF0F8, + 28122 - 19968: 0xD7A8, + 28126 - 19968: 0xE1E7, + 28129 - 19968: 0xD3BF, + 28136 - 19968: 0xEFE4, + 28138 - 19968: 0xD7C5, + 28139 - 19968: 0xEBE2, + 28142 - 19968: 0xFCE7, + 28145 - 19968: 0xE4A2, + 28147 - 19968: 0xE2E8, + 28149 - 19968: 0xE6D0, + 28151 - 19968: 0xFBE8, + 28152 - 19968: 0xF4E8, + 28153 - 19968: 0xE5F4, + 28154 - 19968: 0xF4BC, + 28155 - 19968: 0xF4D5, + 28183 - 19968: 0xDFB6, + 28185 - 19968: 0xFCB9, + 28186 - 19968: 0xEEC2, + 28187 - 19968: 0xCAF5, + 28191 - 19968: 0xEFE5, + 28192 - 19968: 0xCBE2, + 28193 - 19968: 0xD4A4, + 28195 - 19968: 0xDEE0, + 28196 - 19968: 0xDAFD, + 28197 - 19968: 0xE4C6, + 28198 - 19968: 0xE8BE, + 28203 - 19968: 0xE0DE, + 28204 - 19968: 0xF6B4, + 28205 - 19968: 0xEAD2, + 28207 - 19968: 0xF9FB, + 28210 - 19968: 0xE0C2, + 28212 - 19968: 0xCAE4, + 28214 - 19968: 0xE7B7, + 28216 - 19968: 0xEAFD, + 28218 - 19968: 0xD9DD, + 28220 - 19968: 0xDAB4, + 28221 - 19968: 0xEEAA, + 28222 - 19968: 0xFBE9, + 28227 - 19968: 0xDBCB, + 28228 - 19968: 0xDAB5, + 28234 - 19968: 0xF1BE, + 28237 - 19968: 0xD3AC, + 28246 - 19968: 0xFBC9, + 28248 - 19968: 0xDFCF, + 28251 - 19968: 0xD3C0, + 28252 - 19968: 0xE3D7, + 28254 - 19968: 0xEFE6, + 28255 - 19968: 0xFCD0, + 28263 - 19968: 0xE9C0, + 28267 - 19968: 0xF5D3, + 28270 - 19968: 0xECDC, + 28271 - 19968: 0xF7B7, + 28274 - 19968: 0xEAB8, + 28275 - 19968: 0xD1F9, + 28282 - 19968: 0xDCC8, + 28304 - 19968: 0xEAB9, + 28310 - 19968: 0xF1DE, + 28316 - 19968: 0xD7B6, + 28317 - 19968: 0xCFB5, + 28319 - 19968: 0xD9A8, + 28322 - 19968: 0xECEE, + 28325 - 19968: 0xDDAA, + 28330 - 19968: 0xCDA2, + 28331 - 19968: 0xE8AE, + 28335 - 19968: 0xE1BD, + 28337 - 19968: 0xF2D1, + 28342 - 19968: 0xE9C1, + 28346 - 19968: 0xD2FC, + 28354 - 19968: 0xDBB5, + 28356 - 19968: 0xF3E7, + 28357 - 19968: 0xD8FE, + 28361 - 19968: 0xFCD1, + 28363 - 19968: 0xEDB2, + 28364 - 19968: 0xF4AF, + 28366 - 19968: 0xFBA3, + 28369 - 19968: 0xFCC1, + 28371 - 19968: 0xEEAB, + 28372 - 19968: 0xD4A5, + 28399 - 19968: 0xF4F2, + 28404 - 19968: 0xEED9, + 28408 - 19968: 0xFBCA, + 28414 - 19968: 0xCDE3, + 28415 - 19968: 0xD8BB, + 28417 - 19968: 0xE5DB, + 28418 - 19968: 0xF8F7, + 28422 - 19968: 0xF6D4, + 28431 - 19968: 0xD7A9, + 28433 - 19968: 0xCBC9, + 28436 - 19968: 0xE6D1, + 28437 - 19968: 0xF0CC, + 28448 - 19968: 0xD8AE, + 28450 - 19968: 0xF9D3, + 28451 - 19968: 0xD5FE, + 28459 - 19968: 0xD8BC, + 28460 - 19968: 0xF2B0, + 28465 - 19968: 0xE2AB, + 28466 - 19968: 0xF3E8, + 28472 - 19968: 0xEFC2, + 28479 - 19968: 0xEDEC, + 28481 - 19968: 0xE7B8, + 28497 - 19968: 0xDAFE, + 28500 - 19968: 0xCCBE, + 28503 - 19968: 0xF2FC, + 28504 - 19968: 0xDAEB, + 28506 - 19968: 0xE2D8, + 28507 - 19968: 0xEDD6, + 28510 - 19968: 0xD6D1, + 28511 - 19968: 0xE0B3, + 28514 - 19968: 0xFCD2, + 28516 - 19968: 0xEBC8, + 28525 - 19968: 0xD3C1, + 28526 - 19968: 0xF0CD, + 28528 - 19968: 0xCFF7, + 28538 - 19968: 0xEDD2, + 28540 - 19968: 0xD4D8, + 28541 - 19968: 0xDCC9, + 28542 - 19968: 0xD7F1, + 28545 - 19968: 0xDFBB, + 28548 - 19968: 0xF3A5, + 28552 - 19968: 0xF4CD, + 28557 - 19968: 0xF1BF, + 28558 - 19968: 0xF8B1, + 28560 - 19968: 0xE9FA, + 28564 - 19968: 0xFBCB, + 28567 - 19968: 0xCAD5, + 28579 - 19968: 0xF9D4, + 28580 - 19968: 0xF7CA, + 28583 - 19968: 0xD6C8, + 28590 - 19968: 0xFCE8, + 28591 - 19968: 0xF3BD, + 28593 - 19968: 0xEEFE, + 28595 - 19968: 0xE7FE, + 28601 - 19968: 0xD3C2, + 28606 - 19968: 0xD3B6, + 28608 - 19968: 0xCCAD, + 28609 - 19968: 0xF6FA, + 28610 - 19968: 0xD6B2, + 28611 - 19968: 0xD2D8, + 28618 - 19968: 0xE7D8, + 28629 - 19968: 0xE3A5, + 28634 - 19968: 0xE7B9, + 28639 - 19968: 0xF0AD, + 28640 - 19968: 0xFBCC, + 28641 - 19968: 0xEBA1, + 28644 - 19968: 0xD4A6, + 28649 - 19968: 0xFBCD, + 28651 - 19968: 0xD5BD, + 28652 - 19968: 0xF1DF, + 28655 - 19968: 0xF6FB, + 28657 - 19968: 0xDEB4, + 28670 - 19968: 0xD5EB, + 28673 - 19968: 0xE5C8, + 28677 - 19968: 0xFBA4, + 28678 - 19968: 0xD4B9, + 28681 - 19968: 0xDEE1, + 28683 - 19968: 0xE4A3, + 28687 - 19968: 0xD7B7, + 28689 - 19968: 0xF8EE, + 28693 - 19968: 0xDEB5, + 28696 - 19968: 0xD6D2, + 28698 - 19968: 0xF9D5, + 28699 - 19968: 0xE7BA, + 28700 - 19968: 0xEBD5, + 28701 - 19968: 0xD5F7, + 28702 - 19968: 0xEFE7, + 28703 - 19968: 0xE1BE, + 28707 - 19968: 0xFAAE, + 28711 - 19968: 0xD6E9, + 28712 - 19968: 0xD6EE, + 28719 - 19968: 0xE7BB, + 28727 - 19968: 0xECCB, + 28734 - 19968: 0xD5B3, + 28748 - 19968: 0xCEB4, + 28752 - 19968: 0xFBA5, + 28753 - 19968: 0xE1EE, + 28760 - 19968: 0xF7A8, + 28765 - 19968: 0xFBCE, + 28771 - 19968: 0xD8BD, + 28779 - 19968: 0xFBFD, + 28784 - 19968: 0xFCE9, + 28792 - 19968: 0xCFB6, + 28796 - 19968: 0xEDC7, + 28797 - 19968: 0xEEAC, + 28805 - 19968: 0xCCDD, + 28810 - 19968: 0xF6A7, + 28814 - 19968: 0xE6FA, + 28818 - 19968: 0xF5A4, + 28824 - 19968: 0xFDDC, + 28825 - 19968: 0xEDB3, + 28826 - 19968: 0xCEC9, + 28833 - 19968: 0xEFE8, + 28836 - 19968: 0xE1BF, + 28843 - 19968: 0xFADB, + 28844 - 19968: 0xCBE3, + 28845 - 19968: 0xF7A9, + 28847 - 19968: 0xFBA6, + 28851 - 19968: 0xDCB9, + 28855 - 19968: 0xF1C0, + 28856 - 19968: 0xEDC8, + 28857 - 19968: 0xEFC3, + 28872 - 19968: 0xD6AD, + 28875 - 19968: 0xFDCE, + 28879 - 19968: 0xE8A1, + 28888 - 19968: 0xFBF4, + 28889 - 19968: 0xD5A7, + 28893 - 19968: 0xF1F6, + 28895 - 19968: 0xE6D3, + 28913 - 19968: 0xCCDE, + 28921 - 19968: 0xF8B2, + 28925 - 19968: 0xDCEB, + 28932 - 19968: 0xFDB6, + 28937 - 19968: 0xE5EA, + 28940 - 19968: 0xF1E0, + 28953 - 19968: 0xDBCC, + 28954 - 19968: 0xDDCD, + 28958 - 19968: 0xD4C8, + 28961 - 19968: 0xD9ED, + 28966 - 19968: 0xF5A5, + 28976 - 19968: 0xE6FB, + 28982 - 19968: 0xE6D4, + 28999 - 19968: 0xFDC8, + 29001 - 19968: 0xD6A1, + 29002 - 19968: 0xFDBF, + 29004 - 19968: 0xFCD3, + 29006 - 19968: 0xEFA1, + 29008 - 19968: 0xE7BC, + 29014 - 19968: 0xD1EE, + 29017 - 19968: 0xE6D5, + 29020 - 19968: 0xE9F2, + 29022 - 19968: 0xDFB0, + 29028 - 19968: 0xD8E0, + 29029 - 19968: 0xFCBA, + 29030 - 19968: 0xFDAF, + 29031 - 19968: 0xF0CE, + 29033 - 19968: 0xDBE1, + 29036 - 19968: 0xE5C9, + 29038 - 19968: 0xEDB4, + 29053 - 19968: 0xE0C3, + 29060 - 19968: 0xE3D8, + 29065 - 19968: 0xE9FB, + 29066 - 19968: 0xEAA8, + 29071 - 19968: 0xFDB7, + 29074 - 19968: 0xFBA7, + 29076 - 19968: 0xE9C2, + 29081 - 19968: 0xFDF7, + 29087 - 19968: 0xE2D9, + 29090 - 19968: 0xDCEC, + 29100 - 19968: 0xE8A2, + 29105 - 19968: 0xE6F0, + 29113 - 19968: 0xFDF8, + 29114 - 19968: 0xFDF9, + 29118 - 19968: 0xF6BF, + 29121 - 19968: 0xE7A7, + 29123 - 19968: 0xE6D7, + 29128 - 19968: 0xD4F3, + 29129 - 19968: 0xD4C9, + 29134 - 19968: 0xD6FA, + 29136 - 19968: 0xD7F2, + 29138 - 19968: 0xE1C0, + 29140 - 19968: 0xDBE2, + 29141 - 19968: 0xE6D8, + 29151 - 19968: 0xE7BD, + 29157 - 19968: 0xF0CF, + 29158 - 19968: 0xF3BE, + 29159 - 19968: 0xE2AC, + 29165 - 19968: 0xF5B7, + 29166 - 19968: 0xE0F0, + 29179 - 19968: 0xFDB8, + 29180 - 19968: 0xE3E8, + 29182 - 19968: 0xD4A7, + 29183 - 19968: 0xE8FC, + 29184 - 19968: 0xFAD2, + 29190 - 19968: 0xF8EF, + 29200 - 19968: 0xD6D3, + 29211 - 19968: 0xD5B4, + 29226 - 19968: 0xF0D0, + 29228 - 19968: 0xF7F0, + 29229 - 19968: 0xEEB3, + 29232 - 19968: 0xEABA, + 29234 - 19968: 0xEAD3, + 29237 - 19968: 0xEDC9, + 29238 - 19968: 0xDDAB, + 29242 - 19968: 0xE5AC, + 29243 - 19968: 0xFDA1, + 29245 - 19968: 0xDFD0, + 29246 - 19968: 0xECB3, + 29248 - 19968: 0xDFD1, + 29254 - 19968: 0xEDED, + 29255 - 19968: 0xF8B8, + 29256 - 19968: 0xF7FA, + 29260 - 19968: 0xF8AB, + 29266 - 19968: 0xF4E0, + 29272 - 19968: 0xD4BA, + 29273 - 19968: 0xE4B3, + 29275 - 19968: 0xE9DA, + 29277 - 19968: 0xDEB6, + 29279 - 19968: 0xD9BF, + 29281 - 19968: 0xD9C0, + 29282 - 19968: 0xD6EF, + 29287 - 19968: 0xD9CC, + 29289 - 19968: 0xDAAA, + 29298 - 19968: 0xDFE5, + 29305 - 19968: 0xF7E5, + 29309 - 19968: 0xCCB2, + 29312 - 19968: 0xDFF9, + 29313 - 19968: 0xD7E0, + 29346 - 19968: 0xD4BB, + 29351 - 19968: 0xFDFA, + 29356 - 19968: 0xCCB3, + 29359 - 19968: 0xDBF3, + 29376 - 19968: 0xDFD2, + 29378 - 19968: 0xCECA, + 29380 - 19968: 0xEEDA, + 29390 - 19968: 0xE4E4, + 29392 - 19968: 0xFBCF, + 29399 - 19968: 0xCFB7, + 29401 - 19968: 0xEEC3, + 29409 - 19968: 0xCEEA, + 29417 - 19968: 0xE2AD, + 29432 - 19968: 0xD7E1, + 29433 - 19968: 0xFAF5, + 29436 - 19968: 0xD5C9, + 29437 - 19968: 0xF8AC, + 29450 - 19968: 0xE7D9, + 29462 - 19968: 0xF3E9, + 29467 - 19968: 0xD8ED, + 29468 - 19968: 0xE3C4, + 29469 - 19968: 0xF0F1, + 29477 - 19968: 0xE8E5, + 29481 - 19968: 0xE0FA, + 29482 - 19968: 0xEEC4, + 29483 - 19968: 0xD9DE, + 29494 - 19968: 0xEBA2, + 29495 - 19968: 0xEBA3, + 29502 - 19968: 0xFCC2, + 29503 - 19968: 0xEABB, + 29508 - 19968: 0xE8AB, + 29509 - 19968: 0xDEE2, + 29520 - 19968: 0xEDEF, + 29522 - 19968: 0xE8A3, + 29527 - 19968: 0xCFF1, + 29544 - 19968: 0xD4BC, + 29546 - 19968: 0xFCEA, + 29552 - 19968: 0xE7BE, + 29554 - 19968: 0xFCF2, + 29557 - 19968: 0xD6B4, + 29560 - 19968: 0xE2AE, + 29562 - 19968: 0xD3B7, + 29563 - 19968: 0xFACC, + 29572 - 19968: 0xFADC, + 29574 - 19968: 0xEDB5, + 29575 - 19968: 0xE1E3, + 29577 - 19968: 0xE8AC, + 29579 - 19968: 0xE8DD, + 29582 - 19968: 0xEFE9, + 29588 - 19968: 0xF4BD, + 29590 - 19968: 0xCFB8, + 29591 - 19968: 0xE9DB, + 29592 - 19968: 0xD1AC, + 29599 - 19968: 0xDAC7, + 29607 - 19968: 0xEBC9, + 29609 - 19968: 0xE8CC, + 29613 - 19968: 0xDEB7, + 29618 - 19968: 0xD6BC, + 29619 - 19968: 0xD3E5, + 29625 - 19968: 0xFADD, + 29632 - 19968: 0xDAD6, + 29634 - 19968: 0xCAB1, + 29641 - 19968: 0xDAC8, + 29642 - 19968: 0xDFA6, + 29644 - 19968: 0xF9B3, + 29645 - 19968: 0xF2D2, + 29647 - 19968: 0xCAC4, + 29654 - 19968: 0xCECB, + 29657 - 19968: 0xCDF5, + 29661 - 19968: 0xFDB0, + 29662 - 19968: 0xD5A8, + 29664 - 19968: 0xF1C1, + 29667 - 19968: 0xE2E9, + 29668 - 19968: 0xDCCA, + 29669 - 19968: 0xECB4, + 29670 - 19968: 0xFAC0, + 29673 - 19968: 0xFBA8, + 29674 - 19968: 0xD0A8, + 29677 - 19968: 0xDAEC, + 29687 - 19968: 0xD9EE, + 29689 - 19968: 0xE0FB, + 29693 - 19968: 0xEFEA, + 29694 - 19968: 0xFADE, + 29697 - 19968: 0xE0C4, + 29699 - 19968: 0xCFB9, + 29701 - 19968: 0xD5CA, + 29702 - 19968: 0xD7E2, + 29703 - 19968: 0xE2AF, + 29705 - 19968: 0xD7B8, + 29715 - 19968: 0xE8CD, + 29723 - 19968: 0xF6DA, + 29728 - 19968: 0xEFA2, + 29729 - 19968: 0xE2DA, + 29730 - 19968: 0xF6FC, + 29733 - 19968: 0xFBD0, + 29734 - 19968: 0xD1AD, + 29736 - 19968: 0xCDE4, + 29738 - 19968: 0xD1AE, + 29739 - 19968: 0xDCED, + 29740 - 19968: 0xE8CE, + 29742 - 19968: 0xF0F9, + 29743 - 19968: 0xCEB5, + 29744 - 19968: 0xE6FC, + 29747 - 19968: 0xD7FB, + 29748 - 19968: 0xD0D6, + 29749 - 19968: 0xDDF5, + 29750 - 19968: 0xF7F1, + 29752 - 19968: 0xF6FD, + 29754 - 19968: 0xDBF7, + 29759 - 19968: 0xFBEA, + 29760 - 19968: 0xE9DC, + 29761 - 19968: 0xD9C1, + 29763 - 19968: 0xF5F2, + 29764 - 19968: 0xE0C5, + 29771 - 19968: 0xEAD4, + 29781 - 19968: 0xF9C2, + 29783 - 19968: 0xEABC, + 29785 - 19968: 0xD2C5, + 29786 - 19968: 0xFBD1, + 29787 - 19968: 0xE7C0, + 29788 - 19968: 0xEBA5, + 29790 - 19968: 0xDFFA, + 29791 - 19968: 0xE3A2, + 29792 - 19968: 0xD7B9, + 29794 - 19968: 0xE9C3, + 29796 - 19968: 0xE8FD, + 29797 - 19968: 0xE8AF, + 29800 - 19968: 0xF2D3, + 29801 - 19968: 0xFBA9, + 29802 - 19968: 0xD8A5, + 29807 - 19968: 0xD5CB, + 29822 - 19968: 0xD0C8, + 29826 - 19968: 0xD1AF, + 29827 - 19968: 0xD7E3, + 29831 - 19968: 0xE0C6, + 29833 - 19968: 0xD6A2, + 29835 - 19968: 0xEDF0, + 29848 - 19968: 0xD7F3, + 29852 - 19968: 0xFCD4, + 29854 - 19968: 0xDAD7, + 29855 - 19968: 0xCCDF, + 29857 - 19968: 0xF2D4, + 29859 - 19968: 0xD1B0, + 29861 - 19968: 0xCCE0, + 29863 - 19968: 0xDBFD, + 29864 - 19968: 0xF3BF, + 29866 - 19968: 0xF0D1, + 29872 - 19968: 0xFCBB, + 29874 - 19968: 0xE2B0, + 29877 - 19968: 0xE6A5, + 29881 - 19968: 0xE2DB, + 29885 - 19968: 0xDFDE, + 29887 - 19968: 0xE0C7, + 29894 - 19968: 0xF2EF, + 29898 - 19968: 0xCCE1, + 29903 - 19968: 0xD6EA, + 29908 - 19968: 0xE7C2, + 29912 - 19968: 0xCEB6, + 29914 - 19968: 0xF3C0, + 29916 - 19968: 0xCDFE, + 29920 - 19968: 0xFBD2, + 29922 - 19968: 0xF8F8, + 29923 - 19968: 0xF7FB, + 29926 - 19968: 0xE8BF, + 29934 - 19968: 0xE8B7, + 29943 - 19968: 0xEDB6, + 29953 - 19968: 0xDCBA, + 29956 - 19968: 0xCCB4, + 29969 - 19968: 0xF1F7, + 29973 - 19968: 0xE8B8, + 29976 - 19968: 0xCAF6, + 29978 - 19968: 0xE4A4, + 29979 - 19968: 0xF4D6, + 29983 - 19968: 0xDFE6, + 29987 - 19968: 0xDFA7, + 29989 - 19968: 0xDFE7, + 29990 - 19968: 0xE1C1, + 29992 - 19968: 0xE9C4, + 29995 - 19968: 0xDCCB, + 29996 - 19968: 0xE9C5, + 30000 - 19968: 0xEFA3, + 30001 - 19968: 0xEBA6, + 30002 - 19968: 0xCBA3, + 30003 - 19968: 0xE3E9, + 30007 - 19968: 0xD1FB, + 30008 - 19968: 0xEFA4, + 30010 - 19968: 0xEFEB, + 30023 - 19968: 0xD0B4, + 30028 - 19968: 0xCDA3, + 30031 - 19968: 0xE8E6, + 30033 - 19968: 0xEFA5, + 30035 - 19968: 0xD3CC, + 30036 - 19968: 0xDAED, + 30041 - 19968: 0xD7BA, + 30043 - 19968: 0xF2D5, + 30044 - 19968: 0xF5E5, + 30045 - 19968: 0xD9EF, + 30050 - 19968: 0xF9B4, + 30053 - 19968: 0xD5D4, + 30054 - 19968: 0xFDCF, + 30058 - 19968: 0xDBE3, + 30063 - 19968: 0xF1E1, + 30064 - 19968: 0xECB6, + 30069 - 19968: 0xFBFE, + 30070 - 19968: 0xD3D7, + 30072 - 19968: 0xD1B1, + 30074 - 19968: 0xCBB1, + 30079 - 19968: 0xD1B2, + 30086 - 19968: 0xCBB2, + 30087 - 19968: 0xF1C2, + 30090 - 19968: 0xF4E1, + 30091 - 19968: 0xF9B5, + 30094 - 19968: 0xE1C3, + 30095 - 19968: 0xE1C2, + 30097 - 19968: 0xEBF7, + 30109 - 19968: 0xDFA8, + 30117 - 19968: 0xCBCA, + 30123 - 19968: 0xE6B9, + 30129 - 19968: 0xF8DE, + 30130 - 19968: 0xF9AA, + 30131 - 19968: 0xCAF7, + 30133 - 19968: 0xEDB7, + 30136 - 19968: 0xD3B8, + 30137 - 19968: 0xF2D6, + 30140 - 19968: 0xD4D9, + 30141 - 19968: 0xEEC5, + 30142 - 19968: 0xF2F0, + 30146 - 19968: 0xCAB2, + 30149 - 19968: 0xDCBB, + 30151 - 19968: 0xF1F8, + 30157 - 19968: 0xECB7, + 30162 - 19968: 0xE5CA, + 30164 - 19968: 0xF6C0, + 30165 - 19968: 0xFDDD, + 30168 - 19968: 0xD4E3, + 30169 - 19968: 0xCCE2, + 30171 - 19968: 0xF7D4, + 30178 - 19968: 0xD7E5, + 30192 - 19968: 0xD3C3, + 30194 - 19968: 0xD8A6, + 30196 - 19968: 0xF6C1, + 30202 - 19968: 0xDDF6, + 30204 - 19968: 0xCDC0, + 30208 - 19968: 0xE5DC, + 30221 - 19968: 0xE5CB, + 30233 - 19968: 0xE1C4, + 30239 - 19968: 0xE8B0, + 30240 - 19968: 0xF4B0, + 30241 - 19968: 0xF3EA, + 30242 - 19968: 0xDAEE, + 30244 - 19968: 0xD7BB, + 30246 - 19968: 0xE2B1, + 30267 - 19968: 0xD7AA, + 30274 - 19968: 0xD6FB, + 30284 - 19968: 0xE4DF, + 30286 - 19968: 0xCAD6, + 30290 - 19968: 0xEBA8, + 30294 - 19968: 0xDBFE, + 30305 - 19968: 0xF6C2, + 30308 - 19968: 0xEFBB, + 30313 - 19968: 0xD4FD, + 30316 - 19968: 0xE0C8, + 30320 - 19968: 0xE8B9, + 30322 - 19968: 0xEFA6, + 30328 - 19968: 0xCDA4, + 30331 - 19968: 0xD4F4, + 30332 - 19968: 0xDBA1, + 30333 - 19968: 0xDBDC, + 30334 - 19968: 0xDBDD, + 30340 - 19968: 0xEEDC, + 30342 - 19968: 0xCBCB, + 30343 - 19968: 0xFCD5, + 30350 - 19968: 0xCEEB, + 30352 - 19968: 0xCDC1, + 30355 - 19968: 0xFBD3, + 30382 - 19968: 0xF9AB, + 30394 - 19968: 0xF5D4, + 30399 - 19968: 0xD9A9, + 30402 - 19968: 0xE9DD, + 30403 - 19968: 0xDBCD, + 30406 - 19968: 0xDDCE, + 30408 - 19968: 0xE7C3, + 30410 - 19968: 0xECCC, + 30418 - 19968: 0xF9EC, + 30422 - 19968: 0xCBCC, + 30427 - 19968: 0xE0FC, + 30428 - 19968: 0xD4A8, + 30430 - 19968: 0xEDD3, + 30431 - 19968: 0xD8EF, + 30433 - 19968: 0xF2D7, + 30435 - 19968: 0xCAF8, + 30436 - 19968: 0xDAEF, + 30439 - 19968: 0xD6D4, + 30446 - 19968: 0xD9CD, + 30450 - 19968: 0xD8EE, + 30452 - 19968: 0xF2C1, + 30456 - 19968: 0xDFD3, + 30460 - 19968: 0xDAF0, + 30462 - 19968: 0xE2EA, + 30465 - 19968: 0xE0FD, + 30468 - 19968: 0xD8F8, + 30472 - 19968: 0xF7AF, + 30473 - 19968: 0xDAB6, + 30475 - 19968: 0xCAD7, + 30494 - 19968: 0xF2D8, + 30496 - 19968: 0xD8F9, + 30505 - 19968: 0xFADF, + 30519 - 19968: 0xCFEF, + 30520 - 19968: 0xD9C2, + 30522 - 19968: 0xF0D2, + 30524 - 19968: 0xE4D1, + 30528 - 19968: 0xF3B7, + 30541 - 19968: 0xFAE0, + 30555 - 19968: 0xEFEC, + 30561 - 19968: 0xE2B2, + 30563 - 19968: 0xD4BD, + 30566 - 19968: 0xD9CE, + 30571 - 19968: 0xF4E2, + 30585 - 19968: 0xD4A9, + 30590 - 19968: 0xCDC2, + 30591 - 19968: 0xE7DA, + 30603 - 19968: 0xF2D9, + 30609 - 19968: 0xD9AA, + 30622 - 19968: 0xD8BE, + 30629 - 19968: 0xDCAD, + 30636 - 19968: 0xE2EB, + 30637 - 19968: 0xD6FC, + 30640 - 19968: 0xCAF9, + 30643 - 19968: 0xD4DA, + 30651 - 19968: 0xF4D7, + 30652 - 19968: 0xCCA1, + 30655 - 19968: 0xCFBA, + 30679 - 19968: 0xF5B8, + 30683 - 19968: 0xD9C3, + 30684 - 19968: 0xD0E8, + 30690 - 19968: 0xE3C5, + 30691 - 19968: 0xEBF8, + 30693 - 19968: 0xF2B1, + 30697 - 19968: 0xCFBB, + 30701 - 19968: 0xD3AD, + 30702 - 19968: 0xE8E1, + 30703 - 19968: 0xCEEC, + 30707 - 19968: 0xE0B4, + 30722 - 19968: 0xDEE3, + 30738 - 19968: 0xDDF7, + 30757 - 19968: 0xF2B2, + 30758 - 19968: 0xF3F6, + 30759 - 19968: 0xF6DB, + 30764 - 19968: 0xD7FE, + 30770 - 19968: 0xF8DF, + 30772 - 19968: 0xF7F2, + 30789 - 19968: 0xD0A9, + 30799 - 19968: 0xE6DA, + 30813 - 19968: 0xF5A6, + 30827 - 19968: 0xD7BC, + 30828 - 19968: 0xCCE3, + 30831 - 19968: 0xE6DB, + 30844 - 19968: 0xDDDD, + 30849 - 19968: 0xD1B3, + 30855 - 19968: 0xEFED, + 30860 - 19968: 0xD6DE, + 30861 - 19968: 0xE4F4, + 30862 - 19968: 0xE1EF, + 30865 - 19968: 0xDDF8, + 30871 - 19968: 0xE8CF, + 30883 - 19968: 0xCAE5, + 30887 - 19968: 0xDCA1, + 30889 - 19968: 0xE0B5, + 30906 - 19968: 0xFCAC, + 30907 - 19968: 0xFCAD, + 30908 - 19968: 0xD8A7, + 30913 - 19968: 0xEDB8, + 30917 - 19968: 0xDBB6, + 30922 - 19968: 0xD6F0, + 30923 - 19968: 0xF3AF, + 30926 - 19968: 0xCDA5, + 30928 - 19968: 0xDAF1, + 30952 - 19968: 0xD8A8, + 30956 - 19968: 0xCCE4, + 30959 - 19968: 0xD1B4, + 30965 - 19968: 0xCAD8, + 30971 - 19968: 0xDAF2, + 30977 - 19968: 0xF5A7, + 30990 - 19968: 0xF5A8, + 30998 - 19968: 0xE6A6, + 31018 - 19968: 0xD5EC, + 31019 - 19968: 0xD5F8, + 31020 - 19968: 0xDAF3, + 31034 - 19968: 0xE3C6, + 31038 - 19968: 0xDEE4, + 31040 - 19968: 0xDEE5, + 31041 - 19968: 0xD1B5, + 31047 - 19968: 0xD1B6, + 31048 - 19968: 0xD1B7, + 31049 - 19968: 0xF2B3, + 31056 - 19968: 0xE9DE, + 31062 - 19968: 0xF0D3, + 31063 - 19968: 0xF2B4, + 31066 - 19968: 0xF0D4, + 31067 - 19968: 0xCBE4, + 31068 - 19968: 0xFBD4, + 31069 - 19968: 0xF5E6, + 31070 - 19968: 0xE3EA, + 31072 - 19968: 0xDEE6, + 31077 - 19968: 0xDFD4, + 31080 - 19968: 0xF8F9, + 31085 - 19968: 0xF0AE, + 31098 - 19968: 0xD1B8, + 31103 - 19968: 0xD6DF, + 31105 - 19968: 0xD0D7, + 31117 - 19968: 0xFCA1, + 31118 - 19968: 0xEFEE, + 31119 - 19968: 0xDCD8, + 31121 - 19968: 0xE9DF, + 31142 - 19968: 0xE5DD, + 31143 - 19968: 0xFDFB, + 31146 - 19968: 0xE0C9, + 31150 - 19968: 0xD6C9, + 31153 - 19968: 0xD4AA, + 31155 - 19968: 0xE5CC, + 31161 - 19968: 0xE9E0, + 31165 - 19968: 0xD0D8, + 31166 - 19968: 0xFCA2, + 31167 - 19968: 0xD4BE, + 31168 - 19968: 0xE2B3, + 31169 - 19968: 0xDEE7, + 31177 - 19968: 0xDCBC, + 31178 - 19968: 0xD2B6, + 31179 - 19968: 0xF5D5, + 31185 - 19968: 0xCEA1, + 31186 - 19968: 0xF5A9, + 31189 - 19968: 0xDDF9, + 31192 - 19968: 0xDDFA, + 31199 - 19968: 0xF0D5, + 31204 - 19968: 0xF6DF, + 31206 - 19968: 0xF2DA, + 31207 - 19968: 0xE4EB, + 31209 - 19968: 0xF2F1, + 31227 - 19968: 0xECB9, + 31232 - 19968: 0xFDFC, + 31237 - 19968: 0xE1AA, + 31240 - 19968: 0xCAD9, + 31243 - 19968: 0xEFEF, + 31245 - 19968: 0xF5AA, + 31252 - 19968: 0xECF9, + 31255 - 19968: 0xF8AD, + 31257 - 19968: 0xF2C2, + 31258 - 19968: 0xF6C3, + 31260 - 19968: 0xD7D2, + 31263 - 19968: 0xF9A2, + 31264 - 19968: 0xF0D6, + 31278 - 19968: 0xF0FA, + 31281 - 19968: 0xF6E0, + 31286 - 19968: 0xE9F3, + 31287 - 19968: 0xF2C3, + 31291 - 19968: 0xD4AB, + 31292 - 19968: 0xCAB3, + 31293 - 19968: 0xCDA6, + 31295 - 19968: 0xCDC3, + 31296 - 19968: 0xCDDA, + 31302 - 19968: 0xD9CF, + 31305 - 19968: 0xF6C4, + 31309 - 19968: 0xEEDD, + 31310 - 19968: 0xE7C4, + 31319 - 19968: 0xE2B4, + 31329 - 19968: 0xDFE2, + 31330 - 19968: 0xE7DB, + 31337 - 19968: 0xE8B1, + 31339 - 19968: 0xFCAE, + 31344 - 19968: 0xE5CD, + 31348 - 19968: 0xFAEB, + 31350 - 19968: 0xCFBC, + 31353 - 19968: 0xCFE2, + 31354 - 19968: 0xCDF6, + 31357 - 19968: 0xEFF0, + 31359 - 19968: 0xF4BE, + 31361 - 19968: 0xD4CD, + 31364 - 19968: 0xF3B8, + 31368 - 19968: 0xE9A1, + 31378 - 19968: 0xF2F2, + 31379 - 19968: 0xF3EB, + 31381 - 19968: 0xF0D7, + 31384 - 19968: 0xCFD7, + 31391 - 19968: 0xCFDF, + 31401 - 19968: 0xE8C0, + 31402 - 19968: 0xE8C1, + 31406 - 19968: 0xCFE3, + 31407 - 19968: 0xE9A2, + 31418 - 19968: 0xD0AA, + 31428 - 19968: 0xF3C1, + 31429 - 19968: 0xD0AB, + 31431 - 19968: 0xD4E4, + 31434 - 19968: 0xEFBC, + 31435 - 19968: 0xD8A1, + 31447 - 19968: 0xD9DF, + 31449 - 19968: 0xF3D7, + 31453 - 19968: 0xDCBD, + 31455 - 19968: 0xCCE5, + 31456 - 19968: 0xEDF1, + 31459 - 19968: 0xF1E2, + 31461 - 19968: 0xD4DB, + 31466 - 19968: 0xE2B5, + 31469 - 19968: 0xCAE6, + 31471 - 19968: 0xD3AE, + 31478 - 19968: 0xCCE6, + 31481 - 19968: 0xF1D3, + 31482 - 19968: 0xF5E7, + 31487 - 19968: 0xCADA, + 31503 - 19968: 0xFBEE, + 31505 - 19968: 0xE1C5, + 31513 - 19968: 0xDFE9, + 31515 - 19968: 0xEEDE, + 31518 - 19968: 0xF7C2, + 31520 - 19968: 0xD8A2, + 31526 - 19968: 0xDDAC, + 31532 - 19968: 0xF0AF, + 31533 - 19968: 0xD6BD, + 31545 - 19968: 0xE1AB, + 31558 - 19968: 0xF9B6, + 31561 - 19968: 0xD4F5, + 31563 - 19968: 0xD0C9, + 31564 - 19968: 0xEFA7, + 31565 - 19968: 0xE2EC, + 31567 - 19968: 0xDBEA, + 31568 - 19968: 0xCECC, + 31569 - 19968: 0xF5E8, + 31570 - 19968: 0xF7D5, + 31572 - 19968: 0xD3CD, + 31574 - 19968: 0xF3FE, + 31584 - 19968: 0xD0B5, + 31596 - 19968: 0xE0FE, + 31598 - 19968: 0xDFFB, + 31605 - 19968: 0xE6DD, + 31613 - 19968: 0xE8A4, + 31623 - 19968: 0xCBCD, + 31627 - 19968: 0xEFA8, + 31631 - 19968: 0xEEB4, + 31636 - 19968: 0xDAD8, + 31637 - 19968: 0xD1B9, + 31639 - 19968: 0xDFA9, + 31642 - 19968: 0xF3B0, + 31645 - 19968: 0xCCC4, + 31649 - 19968: 0xCEB7, + 31661 - 19968: 0xEFA9, + 31665 - 19968: 0xDFD5, + 31668 - 19968: 0xEDD7, + 31672 - 19968: 0xEEC6, + 31680 - 19968: 0xEFBD, + 31681 - 19968: 0xFCD6, + 31684 - 19968: 0xDBF4, + 31686 - 19968: 0xEFAA, + 31687 - 19968: 0xF8B9, + 31689 - 19968: 0xF5E9, + 31698 - 19968: 0xE3D9, + 31712 - 19968: 0xE1C6, + 31716 - 19968: 0xD4BF, + 31721 - 19968: 0xDEE8, + 31751 - 19968: 0xF0EA, + 31762 - 19968: 0xF3C2, + 31774 - 19968: 0xD3AF, + 31777 - 19968: 0xCADB, + 31783 - 19968: 0xFCD7, + 31786 - 19968: 0xEDD8, + 31787 - 19968: 0xE1C7, + 31805 - 19968: 0xF4D8, + 31806 - 19968: 0xD6B3, + 31807 - 19968: 0xDDAD, + 31811 - 19968: 0xD5BE, + 31820 - 19968: 0xF1C3, + 31821 - 19968: 0xEEDF, + 31840 - 19968: 0xD6EB, + 31844 - 19968: 0xF4D9, + 31852 - 19968: 0xD7E6, + 31859 - 19968: 0xDAB7, + 31875 - 19968: 0xDDFB, + 31881 - 19968: 0xDDCF, + 31890 - 19968: 0xD8A3, + 31893 - 19968: 0xDAD9, + 31895 - 19968: 0xF0D8, + 31896 - 19968: 0xEFC4, + 31903 - 19968: 0xE1D8, + 31909 - 19968: 0xF1D4, + 31911 - 19968: 0xEDF2, + 31918 - 19968: 0xD5DB, + 31921 - 19968: 0xD5DC, + 31922 - 19968: 0xF3C4, + 31923 - 19968: 0xCBD7, + 31929 - 19968: 0xE2B6, + 31934 - 19968: 0xEFF1, + 31946 - 19968: 0xFBD5, + 31958 - 19968: 0xD3D8, + 31966 - 19968: 0xDDD0, + 31967 - 19968: 0xF0D9, + 31968 - 19968: 0xCBB3, + 31975 - 19968: 0xD5DD, + 31995 - 19968: 0xCDA7, + 31998 - 19968: 0xD0AC, + 32000 - 19968: 0xD1BA, + 32002 - 19968: 0xF1C4, + 32004 - 19968: 0xE5B3, + 32005 - 19968: 0xFBF5, + 32006 - 19968: 0xE9E1, + 32007 - 19968: 0xFDE0, + 32008 - 19968: 0xFCBC, + 32010 - 19968: 0xDAA2, + 32011 - 19968: 0xDAA3, + 32013 - 19968: 0xD2A1, + 32016 - 19968: 0xD2EF, + 32020 - 19968: 0xE2ED, + 32023 - 19968: 0xDEE9, + 32024 - 19968: 0xCEDC, + 32025 - 19968: 0xF2B5, + 32026 - 19968: 0xD0E4, + 32027 - 19968: 0xDDD1, + 32032 - 19968: 0xE1C8, + 32033 - 19968: 0xDBB7, + 32034 - 19968: 0xDFE3, + 32043 - 19968: 0xEDB9, + 32044 - 19968: 0xF1C5, + 32046 - 19968: 0xF3CF, + 32047 - 19968: 0xD7AB, + 32048 - 19968: 0xE1AC, + 32051 - 19968: 0xE3EB, + 32053 - 19968: 0xEEC7, + 32057 - 19968: 0xE1C9, + 32058 - 19968: 0xCAFA, + 32066 - 19968: 0xF0FB, + 32067 - 19968: 0xFAE1, + 32068 - 19968: 0xF0DA, + 32069 - 19968: 0xCCE7, + 32070 - 19968: 0xDAF4, + 32080 - 19968: 0xCCBF, + 32094 - 19968: 0xCEED, + 32097 - 19968: 0xD5A9, + 32098 - 19968: 0xFAE2, + 32102 - 19968: 0xD0E5, + 32104 - 19968: 0xEBD6, + 32106 - 19968: 0xECDF, + 32110 - 19968: 0xDFFC, + 32113 - 19968: 0xF7D6, + 32114 - 19968: 0xDEEA, + 32115 - 19968: 0xCBB4, + 32118 - 19968: 0xEFBE, + 32121 - 19968: 0xCCB5, + 32127 - 19968: 0xCFBD, + 32142 - 19968: 0xEFF2, + 32143 - 19968: 0xE2B7, + 32147 - 19968: 0xCCE8, + 32156 - 19968: 0xF0FC, + 32160 - 19968: 0xD6E0, + 32162 - 19968: 0xF1C6, + 32172 - 19968: 0xE2B8, + 32173 - 19968: 0xEBAB, + 32177 - 19968: 0xCBB5, + 32178 - 19968: 0xD8D1, + 32180 - 19968: 0xF4CE, + 32181 - 19968: 0xF3F7, + 32184 - 19968: 0xD7C6, + 32186 - 19968: 0xD1BB, + 32187 - 19968: 0xF7AA, + 32189 - 19968: 0xEDCA, + 32190 - 19968: 0xD7D3, + 32191 - 19968: 0xD8FA, + 32199 - 19968: 0xF6C5, + 32202 - 19968: 0xD1CC, + 32203 - 19968: 0xDDFC, + 32214 - 19968: 0xDFFD, + 32216 - 19968: 0xF9E5, + 32218 - 19968: 0xE0CA, + 32221 - 19968: 0xF2FD, + 32222 - 19968: 0xD3B0, + 32224 - 19968: 0xF4F3, + 32225 - 19968: 0xDAC9, + 32227 - 19968: 0xE6DE, + 32232 - 19968: 0xF8BA, + 32233 - 19968: 0xE8D0, + 32236 - 19968: 0xD8FB, + 32239 - 19968: 0xEAD5, + 32244 - 19968: 0xD6A3, + 32251 - 19968: 0xF6C6, + 32265 - 19968: 0xF2DB, + 32266 - 19968: 0xE4FC, + 32277 - 19968: 0xE8B2, + 32283 - 19968: 0xDADA, + 32285 - 19968: 0xF2DC, + 32286 - 19968: 0xFBD6, + 32287 - 19968: 0xE9B2, + 32289 - 19968: 0xEEAD, + 32291 - 19968: 0xFAE3, + 32299 - 19968: 0xDCEE, + 32302 - 19968: 0xF5EA, + 32303 - 19968: 0xE6E0, + 32305 - 19968: 0xF0FD, + 32311 - 19968: 0xD7AC, + 32317 - 19968: 0xF5C5, + 32318 - 19968: 0xEEE0, + 32321 - 19968: 0xDBE5, + 32323 - 19968: 0xDDDE, + 32326 - 19968: 0xD9F0, + 32327 - 19968: 0xE9A3, + 32338 - 19968: 0xF1F9, + 32340 - 19968: 0xF2C4, + 32341 - 19968: 0xE0CB, + 32350 - 19968: 0xE9A4, + 32353 - 19968: 0xE2B9, + 32361 - 19968: 0xE3B1, + 32362 - 19968: 0xFCEB, + 32363 - 19968: 0xCDA8, + 32365 - 19968: 0xCCB6, + 32368 - 19968: 0xF0DB, + 32377 - 19968: 0xE6BA, + 32380 - 19968: 0xCDA9, + 32386 - 19968: 0xF3C3, + 32396 - 19968: 0xE1D9, + 32399 - 19968: 0xEFAB, + 32403 - 19968: 0xE7C5, + 32406 - 19968: 0xE0E9, + 32408 - 19968: 0xF3C5, + 32411 - 19968: 0xD4C0, + 32412 - 19968: 0xD5BF, + 32566 - 19968: 0xDDAE, + 32568 - 19968: 0xF9FC, + 32570 - 19968: 0xCCC0, + 32588 - 19968: 0xE5A2, + 32592 - 19968: 0xCEB8, + 32596 - 19968: 0xD8D2, + 32597 - 19968: 0xF9D6, + 32618 - 19968: 0xF1AA, + 32619 - 19968: 0xCED1, + 32622 - 19968: 0xF6C7, + 32624 - 19968: 0xDBEB, + 32626 - 19968: 0xDFFE, + 32629 - 19968: 0xD8E1, + 32631 - 19968: 0xF7F3, + 32633 - 19968: 0xD7E7, + 32645 - 19968: 0xD4FE, + 32648 - 19968: 0xD1BC, + 32650 - 19968: 0xE5CF, + 32652 - 19968: 0xCBB6, + 32654 - 19968: 0xDAB8, + 32660 - 19968: 0xCDC4, + 32666 - 19968: 0xD6BE, + 32670 - 19968: 0xE2BA, + 32676 - 19968: 0xCFD8, + 32680 - 19968: 0xE0CC, + 32681 - 19968: 0xEBF9, + 32690 - 19968: 0xFDFD, + 32696 - 19968: 0xD7E8, + 32697 - 19968: 0xCBD8, + 32701 - 19968: 0xE9E2, + 32705 - 19968: 0xE8BA, + 32709 - 19968: 0xE3C7, + 32714 - 19968: 0xECCD, + 32716 - 19968: 0xECCE, + 32718 - 19968: 0xD6BF, + 32722 - 19968: 0xE3A7, + 32724 - 19968: 0xDFD6, + 32725 - 19968: 0xFDE8, + 32735 - 19968: 0xEEE1, + 32736 - 19968: 0xF6A8, + 32737 - 19968: 0xDDFD, + 32745 - 19968: 0xF8BB, + 32747 - 19968: 0xE8D1, + 32752 - 19968: 0xF9D7, + 32761 - 19968: 0xCEEE, + 32764 - 19968: 0xECCF, + 32768 - 19968: 0xE9A5, + 32769 - 19968: 0xD6D5, + 32771 - 19968: 0xCDC5, + 32773 - 19968: 0xEDBA, + 32774 - 19968: 0xD1BD, + 32777 - 19968: 0xCFBE, + 32780 - 19968: 0xECBB, + 32784 - 19968: 0xD2B1, + 32789 - 19968: 0xCCE9, + 32791 - 19968: 0xD9C4, + 32792 - 19968: 0xE9FC, + 32813 - 19968: 0xD1BE, + 32819 - 19968: 0xECBC, + 32822 - 19968: 0xE5AD, + 32829 - 19968: 0xF7B0, + 32831 - 19968: 0xCCEA, + 32835 - 19968: 0xD3C4, + 32838 - 19968: 0xD6C0, + 32842 - 19968: 0xD6FD, + 32854 - 19968: 0xE1A1, + 32856 - 19968: 0xDEBD, + 32858 - 19968: 0xF6A9, + 32862 - 19968: 0xDAA4, + 32879 - 19968: 0xD6A4, + 32880 - 19968: 0xF5C6, + 32882 - 19968: 0xE1A2, + 32883 - 19968: 0xE9C6, + 32887 - 19968: 0xF2C5, + 32893 - 19968: 0xF4E9, + 32894 - 19968: 0xD6EC, + 32895 - 19968: 0xEBD3, + 32900 - 19968: 0xECBD, + 32901 - 19968: 0xE2DC, + 32902 - 19968: 0xDEEB, + 32903 - 19968: 0xF0DC, + 32905 - 19968: 0xEBBF, + 32907 - 19968: 0xD7CE, + 32908 - 19968: 0xD1BF, + 32918 - 19968: 0xF5AB, + 32923 - 19968: 0xF9FD, + 32925 - 19968: 0xCADC, + 32929 - 19968: 0xCDC6, + 32930 - 19968: 0xF2B6, + 32933 - 19968: 0xDDFE, + 32937 - 19968: 0xCCB7, + 32938 - 19968: 0xDBB8, + 32943 - 19968: 0xD0E9, + 32945 - 19968: 0xCEDD, + 32946 - 19968: 0xEBC0, + 32948 - 19968: 0xFDA2, + 32954 - 19968: 0xF8CB, + 32963 - 19968: 0xEAD6, + 32964 - 19968: 0xF1B0, + 32972 - 19968: 0xDBCE, + 32974 - 19968: 0xF7C3, + 32986 - 19968: 0xDBCF, + 32987 - 19968: 0xCBA4, + 32990 - 19968: 0xF8E0, + 32993 - 19968: 0xFBD7, + 32996 - 19968: 0xEBCA, + 32997 - 19968: 0xE0A1, + 33009 - 19968: 0xCECD, + 33012 - 19968: 0xD4DC, + 33016 - 19968: 0xFDD8, + 33021 - 19968: 0xD2F6, + 33026 - 19968: 0xF2B7, + 33029 - 19968: 0xFAF6, + 33030 - 19968: 0xF6AA, + 33031 - 19968: 0xFAF7, + 33032 - 19968: 0xD8E6, + 33034 - 19968: 0xF4B1, + 33048 - 19968: 0xE8D2, + 33050 - 19968: 0xCAC5, + 33051 - 19968: 0xCCEB, + 33059 - 19968: 0xE2EE, + 33065 - 19968: 0xE2BB, + 33067 - 19968: 0xF7AD, + 33071 - 19968: 0xF8E1, + 33081 - 19968: 0xF3EC, + 33086 - 19968: 0xDEA1, + 33099 - 19968: 0xE4FD, + 33102 - 19968: 0xE3EC, + 33104 - 19968: 0xDDAF, + 33105 - 19968: 0xDDB0, + 33108 - 19968: 0xCBB7, + 33109 - 19968: 0xE8D3, + 33125 - 19968: 0xE1A3, + 33126 - 19968: 0xD2E0, + 33131 - 19968: 0xF0FE, + 33136 - 19968: 0xE9A6, + 33137 - 19968: 0xCBF2, + 33144 - 19968: 0xEDF3, + 33145 - 19968: 0xDCD9, + 33146 - 19968: 0xE0CD, + 33151 - 19968: 0xF7DA, + 33152 - 19968: 0xDBB9, + 33160 - 19968: 0xCCAE, + 33162 - 19968: 0xDADB, + 33167 - 19968: 0xCDC7, + 33178 - 19968: 0xDDB1, + 33180 - 19968: 0xD8AF, + 33181 - 19968: 0xE3A3, + 33184 - 19968: 0xCEEF, + 33187 - 19968: 0xF2F3, + 33192 - 19968: 0xF8B3, + 33203 - 19968: 0xE0CE, + 33205 - 19968: 0xF5FD, + 33210 - 19968: 0xEBEC, + 33213 - 19968: 0xD3C5, + 33214 - 19968: 0xFCEC, + 33215 - 19968: 0xD2DB, + 33216 - 19968: 0xD4EB, + 33218 - 19968: 0xDEA2, + 33222 - 19968: 0xE5E6, + 33229 - 19968: 0xF0B0, + 33240 - 19968: 0xD5C4, + 33247 - 19968: 0xEDF4, + 33251 - 19968: 0xE3ED, + 33253 - 19968: 0xE8C2, + 33255 - 19968: 0xEDF5, + 33256 - 19968: 0xD7FC, + 33258 - 19968: 0xEDBB, + 33261 - 19968: 0xF6AB, + 33267 - 19968: 0xF2B8, + 33268 - 19968: 0xF6C8, + 33274 - 19968: 0xD3E6, + 33275 - 19968: 0xF2DD, + 33276 - 19968: 0xCFBF, + 33278 - 19968: 0xEBAC, + 33285 - 19968: 0xCFC0, + 33287 - 19968: 0xE6A8, + 33288 - 19968: 0xFDE9, + 33290 - 19968: 0xCFC1, + 33292 - 19968: 0xE0DF, + 33293 - 19968: 0xDEEC, + 33298 - 19968: 0xE0A2, + 33307 - 19968: 0xF4BF, + 33308 - 19968: 0xE2EF, + 33310 - 19968: 0xD9F1, + 33311 - 19968: 0xF1C7, + 33313 - 19968: 0xCBB8, + 33322 - 19968: 0xF9FE, + 33323 - 19968: 0xDBBA, + 33324 - 19968: 0xDAF5, + 33333 - 19968: 0xF6EC, + 33334 - 19968: 0xDADC, + 33335 - 19968: 0xFAE4, + 33337 - 19968: 0xE0CF, + 33344 - 19968: 0xDDB2, + 33349 - 19968: 0xE6A9, + 33351 - 19968: 0xEFF3, + 33369 - 19968: 0xF3ED, + 33380 - 19968: 0xEBFA, + 33382 - 19968: 0xF9E6, + 33390 - 19968: 0xCADD, + 33391 - 19968: 0xD5DE, + 33393 - 19968: 0xCADE, + 33394 - 19968: 0xDFE4, + 33398 - 19968: 0xE6FD, + 33400 - 19968: 0xF5AC, + 33406 - 19968: 0xE4F5, + 33419 - 19968: 0xE9E3, + 33421 - 19968: 0xEDCB, + 33422 - 19968: 0xCFE4, + 33426 - 19968: 0xD8D3, + 33433 - 19968: 0xDDB3, + 33434 - 19968: 0xD4EC, + 33437 - 19968: 0xF2B9, + 33439 - 19968: 0xDFB7, + 33445 - 19968: 0xCBCE, + 33446 - 19968: 0xFBD8, + 33449 - 19968: 0xD0D9, + 33452 - 19968: 0xDDD2, + 33453 - 19968: 0xF7F4, + 33454 - 19968: 0xE7DC, + 33455 - 19968: 0xE4A5, + 33457 - 19968: 0xFCA3, + 33459 - 19968: 0xDBBB, + 33463 - 19968: 0xF2BA, + 33464 - 19968: 0xE9FD, + 33465 - 19968: 0xD0CA, + 33467 - 19968: 0xF5D6, + 33468 - 19968: 0xD9C5, + 33469 - 19968: 0xE4B4, + 33471 - 19968: 0xEDA7, + 33489 - 19968: 0xEABD, + 33490 - 19968: 0xE6FE, + 33492 - 19968: 0xF7C4, + 33493 - 19968: 0xF5AD, + 33495 - 19968: 0xD9E0, + 33499 - 19968: 0xCAB4, + 33502 - 19968: 0xF8E2, + 33503 - 19968: 0xCFC2, + 33505 - 19968: 0xECBE, + 33509 - 19968: 0xE5B4, + 33510 - 19968: 0xCDC8, + 33511 - 19968: 0xEEC8, + 33521 - 19968: 0xE7C8, + 33533 - 19968: 0xCDC9, + 33534 - 19968: 0xF9B7, + 33537 - 19968: 0xF1E8, + 33538 - 19968: 0xD9F2, + 33539 - 19968: 0xDBF5, + 33540 - 19968: 0xCAB5, + 33541 - 19968: 0xD9C6, + 33545 - 19968: 0xD8C9, + 33559 - 19968: 0xD9AB, + 33576 - 19968: 0xEDBC, + 33579 - 19968: 0xD8D4, + 33583 - 19968: 0xDCDA, + 33585 - 19968: 0xE2BC, + 33588 - 19968: 0xFCED, + 33589 - 19968: 0xECE0, + 33590 - 19968: 0xD2FE, + 33592 - 19968: 0xE9C7, + 33593 - 19968: 0xE6AA, + 33600 - 19968: 0xE2F0, + 33607 - 19968: 0xFABB, + 33609 - 19968: 0xF5AE, + 33610 - 19968: 0xFBAA, + 33615 - 19968: 0xECFB, + 33617 - 19968: 0xECBF, + 33618 - 19968: 0xFCD8, + 33651 - 19968: 0xD4E5, + 33655 - 19968: 0xF9C3, + 33659 - 19968: 0xEEE2, + 33673 - 19968: 0xD7E9, + 33674 - 19968: 0xEDF6, + 33678 - 19968: 0xDEED, + 33686 - 19968: 0xCCEC, + 33688 - 19968: 0xE3EE, + 33694 - 19968: 0xE8D4, + 33698 - 19968: 0xFAF8, + 33705 - 19968: 0xDDB4, + 33706 - 19968: 0xE4B5, + 33707 - 19968: 0xD8B0, + 33725 - 19968: 0xD8D5, + 33729 - 19968: 0xF4EA, + 33733 - 19968: 0xCEB9, + 33737 - 19968: 0xD6E1, + 33738 - 19968: 0xCFD2, + 33740 - 19968: 0xD0B6, + 33747 - 19968: 0xCEA2, + 33750 - 19968: 0xF3EE, + 33756 - 19968: 0xF3F8, + 33769 - 19968: 0xDCCC, + 33771 - 19968: 0xD0CB, + 33775 - 19968: 0xFCA4, + 33776 - 19968: 0xCDCA, + 33777 - 19968: 0xD7D4, + 33778 - 19968: 0xDEA3, + 33780 - 19968: 0xE4E0, + 33785 - 19968: 0xEEC9, + 33789 - 19968: 0xE2DD, + 33795 - 19968: 0xF5FE, + 33796 - 19968: 0xD4AC, + 33802 - 19968: 0xD5D1, + 33804 - 19968: 0xD8F0, + 33805 - 19968: 0xF8C3, + 33806 - 19968: 0xEAD7, + 33833 - 19968: 0xF5D7, + 33836 - 19968: 0xD8BF, + 33841 - 19968: 0xFDC0, + 33848 - 19968: 0xEBAD, + 33853 - 19968: 0xD5AA, + 33865 - 19968: 0xE7A8, + 33879 - 19968: 0xEECA, + 33883 - 19968: 0xCAE7, + 33889 - 19968: 0xF8E3, + 33891 - 19968: 0xD4DD, + 33894 - 19968: 0xEAD8, + 33899 - 19968: 0xFBD9, + 33900 - 19968: 0xEDF7, + 33903 - 19968: 0xE5B5, + 33909 - 19968: 0xD0AD, + 33914 - 19968: 0xF1F1, + 33936 - 19968: 0xE2BD, + 33940 - 19968: 0xE3C8, + 33945 - 19968: 0xD9D5, + 33948 - 19968: 0xDFAA, + 33953 - 19968: 0xDBBC, + 33970 - 19968: 0xF8E4, + 33976 - 19968: 0xF1FA, + 33979 - 19968: 0xE5B6, + 33980 - 19968: 0xF3EF, + 33983 - 19968: 0xFBDA, + 33984 - 19968: 0xE1E0, + 33986 - 19968: 0xD9AC, + 33988 - 19968: 0xF5EB, + 33990 - 19968: 0xE0B6, + 33993 - 19968: 0xE9C8, + 33995 - 19968: 0xCBCF, + 33997 - 19968: 0xE3C9, + 34001 - 19968: 0xDEEE, + 34010 - 19968: 0xE2BE, + 34028 - 19968: 0xDCEF, + 34030 - 19968: 0xD6A5, + 34036 - 19968: 0xE2F1, + 34044 - 19968: 0xD6FE, + 34065 - 19968: 0xD9A1, + 34067 - 19968: 0xD8C0, + 34068 - 19968: 0xDCDB, + 34071 - 19968: 0xEDBD, + 34072 - 19968: 0xDFB8, + 34074 - 19968: 0xEAA5, + 34078 - 19968: 0xD7AD, + 34081 - 19968: 0xF3F9, + 34083 - 19968: 0xEDF8, + 34085 - 19968: 0xF5C7, + 34092 - 19968: 0xE1CA, + 34093 - 19968: 0xEBE3, + 34095 - 19968: 0xF2DE, + 34109 - 19968: 0xF8CC, + 34111 - 19968: 0xEAD9, + 34113 - 19968: 0xD3C6, + 34115 - 19968: 0xDBE6, + 34121 - 19968: 0xF5AF, + 34126 - 19968: 0xCEF0, + 34131 - 19968: 0xE9FE, + 34137 - 19968: 0xFBB6, + 34147 - 19968: 0xE2F2, + 34152 - 19968: 0xCFF2, + 34153 - 19968: 0xF7B9, + 34154 - 19968: 0xD9F3, + 34157 - 19968: 0xE1CB, + 34180 - 19968: 0xDADD, + 34183 - 19968: 0xDAB9, + 34191 - 19968: 0xEBFB, + 34193 - 19968: 0xCBB9, + 34196 - 19968: 0xEDF9, + 34203 - 19968: 0xE0E0, + 34214 - 19968: 0xF4C0, + 34216 - 19968: 0xFDBC, + 34217 - 19968: 0xDFB1, + 34218 - 19968: 0xE3EF, + 34223 - 19968: 0xE0A3, + 34224 - 19968: 0xFDB9, + 34234 - 19968: 0xF0B1, + 34241 - 19968: 0xCDCB, + 34249 - 19968: 0xEDBE, + 34253 - 19968: 0xD5C0, + 34254 - 19968: 0xE3F0, + 34255 - 19968: 0xEDFA, + 34261 - 19968: 0xE9E4, + 34268 - 19968: 0xD5ED, + 34269 - 19968: 0xE7DD, + 34276 - 19968: 0xD4F6, + 34277 - 19968: 0xE5B7, + 34281 - 19968: 0xDBE7, + 34282 - 19968: 0xE2BF, + 34295 - 19968: 0xEECB, + 34298 - 19968: 0xD7F4, + 34299 - 19968: 0xF0DD, + 34303 - 19968: 0xCEAB, + 34306 - 19968: 0xE7DE, + 34310 - 19968: 0xD6D6, + 34311 - 19968: 0xE1CC, + 34314 - 19968: 0xE8B3, + 34326 - 19968: 0xE5EE, + 34327 - 19968: 0xDCA2, + 34330 - 19968: 0xE0D0, + 34349 - 19968: 0xD5B5, + 34367 - 19968: 0xD5A1, + 34382 - 19968: 0xFBDB, + 34384 - 19968: 0xF9CB, + 34388 - 19968: 0xCBF3, + 34389 - 19968: 0xF4A5, + 34395 - 19968: 0xFAC8, + 34396 - 19968: 0xD6D7, + 34398 - 19968: 0xE9E5, + 34399 - 19968: 0xFBDC, + 34407 - 19968: 0xFDD0, + 34425 - 19968: 0xFBF6, + 34442 - 19968: 0xDAA5, + 34444 - 19968: 0xDBBD, + 34451 - 19968: 0xECE2, + 34467 - 19968: 0xCDF7, + 34468 - 19968: 0xF0DE, + 34473 - 19968: 0xF6C9, + 34503 - 19968: 0xDEEF, + 34507 - 19968: 0xD3B1, + 34516 - 19968: 0xFCEE, + 34521 - 19968: 0xE8C3, + 34523 - 19968: 0xF1C8, + 34527 - 19968: 0xCEF1, + 34532 - 19968: 0xF9ED, + 34541 - 19968: 0xF2F4, + 34558 - 19968: 0xE4B6, + 34560 - 19968: 0xF5B9, + 34562 - 19968: 0xDCF0, + 34563 - 19968: 0xE3F1, + 34568 - 19968: 0xE8A5, + 34584 - 19968: 0xF2BB, + 34586 - 19968: 0xDEA4, + 34588 - 19968: 0xDACC, + 34638 - 19968: 0xCAE9, + 34645 - 19968: 0xE3DA, + 34647 - 19968: 0xFCD9, + 34655 - 19968: 0xEADA, + 34662 - 19968: 0xF9C4, + 34664 - 19968: 0xE3A4, + 34676 - 19968: 0xFBDD, + 34678 - 19968: 0xEFCA, + 34680 - 19968: 0xE8C4, + 34690 - 19968: 0xD5CC, + 34701 - 19968: 0xEBD7, + 34719 - 19968: 0xD9AD, + 34722 - 19968: 0xFBAB, + 34739 - 19968: 0xD3D9, + 34746 - 19968: 0xD5A2, + 34756 - 19968: 0xF6DE, + 34784 - 19968: 0xDAF6, + 34796 - 19968: 0xE0D1, + 34799 - 19968: 0xE9A8, + 34802 - 19968: 0xF5F9, + 34809 - 19968: 0xFAAF, + 34811 - 19968: 0xEBFC, + 34814 - 19968: 0xE0EA, + 34821 - 19968: 0xE3B2, + 34847 - 19968: 0xD5C5, + 34850 - 19968: 0xF1E3, + 34851 - 19968: 0xD5EE, + 34865 - 19968: 0xCDCC, + 34870 - 19968: 0xEDD9, + 34875 - 19968: 0xD8C1, + 34880 - 19968: 0xFAEC, + 34886 - 19968: 0xF1EB, + 34892 - 19968: 0xFABC, + 34893 - 19968: 0xE6E2, + 34898 - 19968: 0xFAE5, + 34899 - 19968: 0xE2FA, + 34903 - 19968: 0xCAB6, + 34905 - 19968: 0xE4B7, + 34907 - 19968: 0xEADB, + 34909 - 19968: 0xF5FA, + 34913 - 19968: 0xFBAC, + 34914 - 19968: 0xCFC3, + 34915 - 19968: 0xEBFD, + 34920 - 19968: 0xF8FA, + 34923 - 19968: 0xDFB9, + 34928 - 19968: 0xE1F1, + 34930 - 19968: 0xD2A4, + 34935 - 19968: 0xF5FB, + 34942 - 19968: 0xD0DA, + 34943 - 19968: 0xD0DB, + 34945 - 19968: 0xEABE, + 34946 - 19968: 0xD9B1, + 34952 - 19968: 0xCAB7, + 34955 - 19968: 0xD3E7, + 34957 - 19968: 0xF8E5, + 34962 - 19968: 0xD3B2, + 34966 - 19968: 0xE2C0, + 34967 - 19968: 0xF2DF, + 34974 - 19968: 0xCDE5, + 34987 - 19968: 0xF9AC, + 34996 - 19968: 0xCDCD, + 35009 - 19968: 0xEEAE, + 35010 - 19968: 0xD6AE, + 35023 - 19968: 0xD7EA, + 35028 - 19968: 0xE7E0, + 35029 - 19968: 0xEBAE, + 35033 - 19968: 0xCFD9, + 35036 - 19968: 0xDCCD, + 35037 - 19968: 0xEDFB, + 35039 - 19968: 0xDEF0, + 35041 - 19968: 0xD7EB, + 35048 - 19968: 0xDEA5, + 35059 - 19968: 0xDFD7, + 35060 - 19968: 0xDBD0, + 35061 - 19968: 0xDBD1, + 35064 - 19968: 0xD5A3, + 35069 - 19968: 0xF0B2, + 35079 - 19968: 0xDCDC, + 35088 - 19968: 0xCAE8, + 35090 - 19968: 0xF8E6, + 35091 - 19968: 0xDCCE, + 35096 - 19968: 0xEADC, + 35097 - 19968: 0xDBD2, + 35109 - 19968: 0xE9B3, + 35114 - 19968: 0xF7DB, + 35126 - 19968: 0xE3A8, + 35128 - 19968: 0xD7AE, + 35131 - 19968: 0xE0E1, + 35137 - 19968: 0xCBBA, + 35140 - 19968: 0xE5D1, + 35167 - 19968: 0xD0DC, + 35172 - 19968: 0xD5C1, + 35178 - 19968: 0xD8CA, + 35186 - 19968: 0xE3A9, + 35199 - 19968: 0xE0A4, + 35201 - 19968: 0xE9A9, + 35203 - 19968: 0xD3C7, + 35206 - 19968: 0xDCDD, + 35207 - 19968: 0xF8AE, + 35211 - 19968: 0xCCB8, + 35215 - 19968: 0xD0AE, + 35219 - 19968: 0xD8F2, + 35222 - 19968: 0xE3CA, + 35233 - 19968: 0xCCAF, + 35241 - 19968: 0xD4AD, + 35242 - 19968: 0xF6D1, + 35250 - 19968: 0xD0CC, + 35258 - 19968: 0xCAC6, + 35261 - 19968: 0xD5C2, + 35264 - 19968: 0xCEBA, + 35282 - 19968: 0xCAC7, + 35299 - 19968: 0xFAB0, + 35316 - 19968: 0xDFD8, + 35320 - 19968: 0xF5BA, + 35328 - 19968: 0xE5EB, + 35330 - 19968: 0xEFF4, + 35331 - 19968: 0xDDB5, + 35336 - 19968: 0xCDAA, + 35338 - 19968: 0xE3F2, + 35340 - 19968: 0xFBF7, + 35342 - 19968: 0xF7D0, + 35347 - 19968: 0xFDBA, + 35350 - 19968: 0xFDE1, + 35351 - 19968: 0xF6FE, + 35352 - 19968: 0xD1C0, + 35355 - 19968: 0xE8C5, + 35357 - 19968: 0xE4B8, + 35359 - 19968: 0xE1E8, + 35363 - 19968: 0xCCC1, + 35365 - 19968: 0xD2ED, + 35370 - 19968: 0xDBBE, + 35373 - 19968: 0xE0E2, + 35377 - 19968: 0xFAC9, + 35380 - 19968: 0xE1CD, + 35382 - 19968: 0xCAB8, + 35386 - 19968: 0xF2E0, + 35387 - 19968: 0xF1C9, + 35408 - 19968: 0xDEF1, + 35412 - 19968: 0xF0DF, + 35413 - 19968: 0xF8C4, + 35419 - 19968: 0xEECC, + 35422 - 19968: 0xDEF2, + 35424 - 19968: 0xE7C9, + 35426 - 19968: 0xE2F3, + 35427 - 19968: 0xE7E1, + 35430 - 19968: 0xE3CB, + 35433 - 19968: 0xE3CC, + 35437 - 19968: 0xCFF8, + 35438 - 19968: 0xEFAC, + 35440 - 19968: 0xFDFE, + 35441 - 19968: 0xFCA5, + 35442 - 19968: 0xFAB1, + 35443 - 19968: 0xDFD9, + 35445 - 19968: 0xE0D2, + 35449 - 19968: 0xF4DA, + 35461 - 19968: 0xF1CA, + 35463 - 19968: 0xCEA3, + 35468 - 19968: 0xF2BC, + 35469 - 19968: 0xECE3, + 35475 - 19968: 0xE0A5, + 35477 - 19968: 0xF7AB, + 35480 - 19968: 0xEBAF, + 35486 - 19968: 0xE5DE, + 35488 - 19968: 0xE1A4, + 35489 - 19968: 0xCDAB, + 35491 - 19968: 0xD9F4, + 35492 - 19968: 0xE8A6, + 35493 - 19968: 0xCDCE, + 35494 - 19968: 0xE1E9, + 35496 - 19968: 0xFCEF, + 35498 - 19968: 0xE0E3, + 35504 - 19968: 0xE2C1, + 35506 - 19968: 0xCEA4, + 35513 - 19968: 0xDEA6, + 35516 - 19968: 0xEBFE, + 35518 - 19968: 0xEBDD, + 35519 - 19968: 0xF0E0, + 35522 - 19968: 0xF4DB, + 35524 - 19968: 0xE2F4, + 35527 - 19968: 0xD3C8, + 35531 - 19968: 0xF4EB, + 35533 - 19968: 0xEEB5, + 35535 - 19968: 0xF5D8, + 35538 - 19968: 0xD5DF, + 35542 - 19968: 0xD6E5, + 35547 - 19968: 0xEBB0, + 35548 - 19968: 0xF4E3, + 35553 - 19968: 0xE3CD, + 35558 - 19968: 0xF4F4, + 35559 - 19968: 0xFAB2, + 35562 - 19968: 0xEFF5, + 35563 - 19968: 0xCADF, + 35565 - 19968: 0xEBB1, + 35566 - 19968: 0xEDBF, + 35569 - 19968: 0xFDC9, + 35574 - 19968: 0xE4A6, + 35575 - 19968: 0xF9A4, + 35576 - 19968: 0xF0B3, + 35578 - 19968: 0xE5EC, + 35582 - 19968: 0xD1E7, + 35584 - 19968: 0xD9C7, + 35585 - 19968: 0xE4D7, + 35586 - 19968: 0xEADD, + 35588 - 19968: 0xD4F7, + 35598 - 19968: 0xDABA, + 35600 - 19968: 0xDACD, + 35604 - 19968: 0xF9CC, + 35606 - 19968: 0xE1DA, + 35607 - 19968: 0xDBBF, + 35609 - 19968: 0xCCC5, + 35610 - 19968: 0xECD0, + 35611 - 19968: 0xCBBB, + 35613 - 19968: 0xDEF3, + 35616 - 19968: 0xE9AA, + 35624 - 19968: 0xD9C8, + 35627 - 19968: 0xEEE3, + 35628 - 19968: 0xD7BD, + 35635 - 19968: 0xCFC4, + 35641 - 19968: 0xD0CD, + 35649 - 19968: 0xFCA6, + 35657 - 19968: 0xF1FB, + 35662 - 19968: 0xFDD2, + 35663 - 19968: 0xD1C1, + 35672 - 19968: 0xE3DB, + 35674 - 19968: 0xD3C9, + 35676 - 19968: 0xDCCF, + 35686 - 19968: 0xCCED, + 35692 - 19968: 0xDEA7, + 35695 - 19968: 0xE6BB, + 35696 - 19968: 0xECA1, + 35700 - 19968: 0xCCB9, + 35703 - 19968: 0xFBDE, + 35709 - 19968: 0xE7E2, + 35712 - 19968: 0xD4C1, + 35722 - 19968: 0xDCA8, + 35728 - 19968: 0xE2C2, + 35730 - 19968: 0xF3D8, + 35731 - 19968: 0xE5D3, + 35734 - 19968: 0xF3D9, + 35738 - 19968: 0xF3C6, + 35895 - 19968: 0xCDDB, + 35903 - 19968: 0xCDAC, + 35905 - 19968: 0xFCC3, + 35910 - 19968: 0xD4E7, + 35912 - 19968: 0xD1C2, + 35914 - 19968: 0xF9A5, + 35916 - 19968: 0xE8D5, + 35925 - 19968: 0xE3CE, + 35930 - 19968: 0xD4CA, + 35937 - 19968: 0xDFDA, + 35946 - 19968: 0xFBDF, + 35947 - 19968: 0xE7E3, + 35961 - 19968: 0xF8FB, + 35962 - 19968: 0xE3CF, + 35970 - 19968: 0xF5B0, + 35978 - 19968: 0xD8E7, + 35980 - 19968: 0xD9C9, + 35997 - 19968: 0xF8AF, + 35998 - 19968: 0xEFF6, + 36000 - 19968: 0xDDB6, + 36001 - 19968: 0xEEAF, + 36002 - 19968: 0xCDF8, + 36007 - 19968: 0xDEB8, + 36008 - 19968: 0xFCA7, + 36009 - 19968: 0xF7FC, + 36010 - 19968: 0xF7B1, + 36011 - 19968: 0xCEBB, + 36012 - 19968: 0xF4A1, + 36015 - 19968: 0xEECD, + 36016 - 19968: 0xE1AE, + 36019 - 19968: 0xECC3, + 36020 - 19968: 0xCFFE, + 36022 - 19968: 0xF8BF, + 36023 - 19968: 0xD8E2, + 36024 - 19968: 0xD3E8, + 36027 - 19968: 0xDEA8, + 36028 - 19968: 0xF4E4, + 36029 - 19968: 0xECC2, + 36031 - 19968: 0xD9F5, + 36032 - 19968: 0xF9C5, + 36033 - 19968: 0xDDD3, + 36034 - 19968: 0xD6F1, + 36035 - 19968: 0xECFC, + 36036 - 19968: 0xFCF0, + 36039 - 19968: 0xEDC0, + 36040 - 19968: 0xCAB9, + 36042 - 19968: 0xEEE4, + 36049 - 19968: 0xF2E1, + 36051 - 19968: 0xDEB9, + 36058 - 19968: 0xD6F2, + 36060 - 19968: 0xDEF4, + 36062 - 19968: 0xDFDB, + 36064 - 19968: 0xDBD3, + 36066 - 19968: 0xFAE7, + 36067 - 19968: 0xD8E3, + 36068 - 19968: 0xF4C1, + 36070 - 19968: 0xDDB7, + 36074 - 19968: 0xF2F5, + 36077 - 19968: 0xD4AE, + 36084 - 19968: 0xD6F3, + 36091 - 19968: 0xDDB8, + 36092 - 19968: 0xCFC5, + 36093 - 19968: 0xDFDF, + 36100 - 19968: 0xF2BE, + 36101 - 19968: 0xF6A1, + 36103 - 19968: 0xEBCB, + 36104 - 19968: 0xF1FC, + 36106 - 19968: 0xF3C7, + 36109 - 19968: 0xE0EB, + 36115 - 19968: 0xEDFC, + 36118 - 19968: 0xE1DB, + 36196 - 19968: 0xEEE5, + 36198 - 19968: 0xDEF5, + 36203 - 19968: 0xFAD3, + 36208 - 19968: 0xF1CB, + 36211 - 19968: 0xD0AF, + 36212 - 19968: 0xDDB9, + 36215 - 19968: 0xD1C3, + 36229 - 19968: 0xF5B1, + 36234 - 19968: 0xEAC6, + 36249 - 19968: 0xF0E1, + 36259 - 19968: 0xF6AC, + 36264 - 19968: 0xF5D9, + 36275 - 19968: 0xF0EB, + 36282 - 19968: 0xDDBA, + 36286 - 19968: 0xF2BF, + 36294 - 19968: 0xF7C5, + 36299 - 19968: 0xDBA2, + 36300 - 19968: 0xF2F6, + 36303 - 19968: 0xCABA, + 36315 - 19968: 0xF7F5, + 36317 - 19968: 0xCBE5, + 36321 - 19968: 0xEEE6, + 36323 - 19968: 0xE0D3, + 36328 - 19968: 0xCEA5, + 36335 - 19968: 0xD6D8, + 36339 - 19968: 0xD4AF, + 36362 - 19968: 0xE9C9, + 36367 - 19968: 0xD3CE, + 36368 - 19968: 0xF4C2, + 36382 - 19968: 0xCBE6, + 36394 - 19968: 0xF1A1, + 36400 - 19968: 0xEBB2, + 36405 - 19968: 0xF1A2, + 36418 - 19968: 0xEBB3, + 36420 - 19968: 0xF0B4, + 36423 - 19968: 0xCBF4, + 36424 - 19968: 0xD4B0, + 36425 - 19968: 0xF3B2, + 36426 - 19968: 0xFBB7, + 36441 - 19968: 0xF5EC, + 36447 - 19968: 0xEEE7, + 36448 - 19968: 0xF4B2, + 36468 - 19968: 0xF5ED, + 36470 - 19968: 0xCFF3, + 36481 - 19968: 0xF0E2, + 36487 - 19968: 0xEECE, + 36490 - 19968: 0xF1CC, + 36493 - 19968: 0xE5B8, + 36522 - 19968: 0xD7F5, + 36523 - 19968: 0xE3F3, + 36524 - 19968: 0xCFE5, + 36544 - 19968: 0xCFC6, + 36554 - 19968: 0xF3B3, + 36555 - 19968: 0xE4D8, + 36556 - 19968: 0xCFF9, + 36557 - 19968: 0xCFDA, + 36562 - 19968: 0xFACD, + 36575 - 19968: 0xE6E3, + 36587 - 19968: 0xF2E2, + 36600 - 19968: 0xF5EE, + 36603 - 19968: 0xCABB, + 36606 - 19968: 0xE3DC, + 36611 - 19968: 0xCEF2, + 36613 - 19968: 0xD6D9, + 36617 - 19968: 0xEEB0, + 36626 - 19968: 0xF4E5, + 36627 - 19968: 0xD8C2, + 36628 - 19968: 0xDCD0, + 36629 - 19968: 0xCCEE, + 36635 - 19968: 0xD5E0, + 36636 - 19968: 0xF6CA, + 36637 - 19968: 0xFDCA, + 36638 - 19968: 0xD8D6, + 36639 - 19968: 0xF4CF, + 36646 - 19968: 0xD6A6, + 36647 - 19968: 0xDCBE, + 36649 - 19968: 0xDBD4, + 36650 - 19968: 0xD7C7, + 36655 - 19968: 0xF2FE, + 36659 - 19968: 0xF1CD, + 36664 - 19968: 0xE2C3, + 36665 - 19968: 0xDCDE, + 36667 - 19968: 0xDCDF, + 36670 - 19968: 0xEFAD, + 36671 - 19968: 0xE6AB, + 36676 - 19968: 0xF9DD, + 36677 - 19968: 0xEABF, + 36681 - 19968: 0xEFAE, + 36685 - 19968: 0xF4D0, + 36686 - 19968: 0xCEF3, + 36701 - 19968: 0xE6AC, + 36703 - 19968: 0xCEDE, + 36706 - 19968: 0xD5F9, + 36763 - 19968: 0xE3F4, + 36764 - 19968: 0xCDD0, + 36771 - 19968: 0xD5B8, + 36774 - 19968: 0xF7FD, + 36776 - 19968: 0xDCA9, + 36781 - 19968: 0xDEF6, + 36783 - 19968: 0xDCAA, + 36784 - 19968: 0xF2E3, + 36785 - 19968: 0xE9B4, + 36786 - 19968: 0xD2DC, + 36802 - 19968: 0xE9E6, + 36805 - 19968: 0xE3F6, + 36814 - 19968: 0xE7CA, + 36817 - 19968: 0xD0CE, + 36820 - 19968: 0xDAF7, + 36838 - 19968: 0xCABC, + 36842 - 19968: 0xEEE8, + 36843 - 19968: 0xDADE, + 36845 - 19968: 0xF2F7, + 36848 - 19968: 0xE2FB, + 36850 - 19968: 0xCCA6, + 36855 - 19968: 0xDABB, + 36857 - 19968: 0xEEE9, + 36861 - 19968: 0xF5DA, + 36864 - 19968: 0xF7DC, + 36865 - 19968: 0xE1EA, + 36866 - 19968: 0xCEC1, + 36867 - 19968: 0xD4B1, + 36869 - 19968: 0xFDB1, + 36870 - 19968: 0xE6BD, + 36872 - 19968: 0xFBAD, + 36875 - 19968: 0xF8E7, + 36877 - 19968: 0xE1CE, + 36879 - 19968: 0xF7E2, + 36880 - 19968: 0xF5EF, + 36881 - 19968: 0xCFC7, + 36884 - 19968: 0xD4B2, + 36885 - 19968: 0xCCEF, + 36887 - 19968: 0xD4E8, + 36889 - 19968: 0xEECF, + 36890 - 19968: 0xF7D7, + 36893 - 19968: 0xE0A6, + 36894 - 19968: 0xD6C1, + 36895 - 19968: 0xE1DC, + 36896 - 19968: 0xF0E3, + 36897 - 19968: 0xF1E4, + 36898 - 19968: 0xDCF1, + 36899 - 19968: 0xD6A7, + 36910 - 19968: 0xF4F5, + 36913 - 19968: 0xF1CE, + 36914 - 19968: 0xF2E4, + 36917 - 19968: 0xD0B0, + 36920 - 19968: 0xECEF, + 36924 - 19968: 0xF9BA, + 36926 - 19968: 0xEBB5, + 36929 - 19968: 0xD4ED, + 36930 - 19968: 0xE2C4, + 36935 - 19968: 0xE9E7, + 36938 - 19968: 0xEBB4, + 36939 - 19968: 0xEAA1, + 36941 - 19968: 0xF8BC, + 36942 - 19968: 0xCEA6, + 36944 - 19968: 0xF9C6, + 36945 - 19968: 0xFCDA, + 36947 - 19968: 0xD4B3, + 36948 - 19968: 0xD3B9, + 36949 - 19968: 0xEADE, + 36953 - 19968: 0xE9AB, + 36956 - 19968: 0xE1E1, + 36957 - 19968: 0xD3CF, + 36958 - 19968: 0xF4F6, + 36960 - 19968: 0xEAC0, + 36961 - 19968: 0xE1CF, + 36963 - 19968: 0xCCBA, + 36969 - 19968: 0xEEEA, + 36973 - 19968: 0xF0E4, + 36974 - 19968: 0xF3B4, + 36975 - 19968: 0xD4EE, + 36978 - 19968: 0xF2C0, + 36981 - 19968: 0xF1E5, + 36983 - 19968: 0xF4C3, + 36984 - 19968: 0xE0D4, + 36986 - 19968: 0xEBB6, + 36988 - 19968: 0xD7A1, + 36989 - 19968: 0xCBE8, + 36991 - 19968: 0xF9AD, + 36992 - 19968: 0xE9AD, + 36993 - 19968: 0xD8E4, + 36994 - 19968: 0xFAB3, + 36995 - 19968: 0xE2C5, + 36996 - 19968: 0xFCBD, + 36999 - 19968: 0xECC4, + 37000 - 19968: 0xD8B1, + 37002 - 19968: 0xDCAB, + 37007 - 19968: 0xD5A4, + 37009 - 19968: 0xEBE9, + 37013 - 19968: 0xE8BB, + 37017 - 19968: 0xD8D7, + 37026 - 19968: 0xFBAE, + 37027 - 19968: 0xD1E1, + 37030 - 19968: 0xDBC0, + 37032 - 19968: 0xF5BE, + 37034 - 19968: 0xDEF7, + 37039 - 19968: 0xCAFB, + 37040 - 19968: 0xF7C6, + 37041 - 19968: 0xCFC8, + 37045 - 19968: 0xE1D0, + 37048 - 19968: 0xEED0, + 37057 - 19968: 0xE9F4, + 37066 - 19968: 0xCEF4, + 37086 - 19968: 0xD5CD, + 37089 - 19968: 0xCFDB, + 37096 - 19968: 0xDDBB, + 37101 - 19968: 0xCEAC, + 37109 - 19968: 0xE9E8, + 37117 - 19968: 0xD4B4, + 37122 - 19968: 0xE4C7, + 37138 - 19968: 0xF5DB, + 37141 - 19968: 0xFAC1, + 37145 - 19968: 0xDEA9, + 37159 - 19968: 0xD4F8, + 37165 - 19968: 0xEFF7, + 37170 - 19968: 0xD3B3, + 37193 - 19968: 0xEBB7, + 37194 - 19968: 0xEFF8, + 37195 - 19968: 0xF5DC, + 37196 - 19968: 0xEDCC, + 37197 - 19968: 0xDBD5, + 37198 - 19968: 0xF1CF, + 37202 - 19968: 0xF1D0, + 37218 - 19968: 0xF5B2, + 37225 - 19968: 0xD9AE, + 37226 - 19968: 0xD5AC, + 37228 - 19968: 0xE2C6, + 37237 - 19968: 0xFDA3, + 37239 - 19968: 0xFBE5, + 37240 - 19968: 0xDFAB, + 37255 - 19968: 0xE2F5, + 37257 - 19968: 0xF6AD, + 37259 - 19968: 0xF5B3, + 37261 - 19968: 0xF0B5, + 37266 - 19968: 0xE1A5, + 37276 - 19968: 0xF5DD, + 37291 - 19968: 0xECA2, + 37292 - 19968: 0xEDFD, + 37294 - 19968: 0xF5B4, + 37295 - 19968: 0xFBB8, + 37297 - 19968: 0xDBA3, + 37300 - 19968: 0xD6CA, + 37301 - 19968: 0xCBD9, + 37312 - 19968: 0xE5D4, + 37319 - 19968: 0xF3FA, + 37321 - 19968: 0xEBB8, + 37323 - 19968: 0xE0B7, + 37324 - 19968: 0xD7EC, + 37325 - 19968: 0xF1EC, + 37326 - 19968: 0xE5AF, + 37327 - 19968: 0xD5E1, + 37328 - 19968: 0xD7ED, + 37329 - 19968: 0xD1D1, + 37335 - 19968: 0xE1F2, + 37336 - 19968: 0xEFF9, + 37340 - 19968: 0xDDBC, + 37341 - 19968: 0xF6DC, + 37347 - 19968: 0xF0E5, + 37351 - 19968: 0xF4C4, + 37354 - 19968: 0xE9E9, + 37365 - 19968: 0xF3FB, + 37389 - 19968: 0xD4EF, + 37392 - 19968: 0xCCA2, + 37393 - 19968: 0xF7FE, + 37394 - 19968: 0xDFBC, + 37399 - 19968: 0xEBCD, + 37406 - 19968: 0xD0B7, + 37428 - 19968: 0xD6C2, + 37434 - 19968: 0xE8AD, + 37439 - 19968: 0xEFAF, + 37440 - 19968: 0xCBA5, + 37445 - 19968: 0xCBE9, + 37449 - 19968: 0xFAE8, + 37463 - 19968: 0xCCC6, + 37467 - 19968: 0xE6E7, + 37470 - 19968: 0xEAC7, + 37474 - 19968: 0xDBA4, + 37476 - 19968: 0xCFC9, + 37477 - 19968: 0xE2FC, + 37478 - 19968: 0xEFFA, + 37504 - 19968: 0xEBDE, + 37507 - 19968: 0xF5C8, + 37509 - 19968: 0xD4DE, + 37521 - 19968: 0xE0D5, + 37523 - 19968: 0xEFB0, + 37526 - 19968: 0xE2C7, + 37528 - 19968: 0xD9AF, + 37532 - 19968: 0xF9E7, + 37555 - 19968: 0xE7E5, + 37558 - 19968: 0xCFCA, + 37559 - 19968: 0xE1D1, + 37561 - 19968: 0xE2C8, + 37580 - 19968: 0xEFFB, + 37583 - 19968: 0xFAF9, + 37586 - 19968: 0xDCF2, + 37604 - 19968: 0xE0A7, + 37610 - 19968: 0xF8E8, + 37624 - 19968: 0xCBEA, + 37628 - 19968: 0xCBBC, + 37636 - 19968: 0xD6E2, + 37648 - 19968: 0xF5DE, + 37656 - 19968: 0xF5DF, + 37658 - 19968: 0xEEB6, + 37662 - 19968: 0xE2F6, + 37663 - 19968: 0xD3CA, + 37664 - 19968: 0xEFFC, + 37665 - 19968: 0xD1C4, + 37666 - 19968: 0xEFB1, + 37668 - 19968: 0xD1C5, + 37670 - 19968: 0xD0DE, + 37672 - 19968: 0xD9E1, + 37675 - 19968: 0xE0B8, + 37678 - 19968: 0xCDD1, + 37679 - 19968: 0xF3B9, + 37704 - 19968: 0xE7CC, + 37706 - 19968: 0xD6A8, + 37707 - 19968: 0xCEA7, + 37709 - 19968: 0xD4B5, + 37716 - 19968: 0xE4C8, + 37723 - 19968: 0xD3B4, + 37742 - 19968: 0xEBB9, + 37749 - 19968: 0xCBF5, + 37756 - 19968: 0xF6DD, + 37758 - 19968: 0xF1A3, + 37772 - 19968: 0xCCC7, + 37780 - 19968: 0xE9CA, + 37782 - 19968: 0xE1F0, + 37786 - 19968: 0xF5E0, + 37795 - 19968: 0xFBAF, + 37799 - 19968: 0xCBD1, + 37804 - 19968: 0xFBE0, + 37805 - 19968: 0xF2E5, + 37808 - 19968: 0xECF0, + 37827 - 19968: 0xF0EC, + 37841 - 19968: 0xEEEB, + 37854 - 19968: 0xE9CB, + 37857 - 19968: 0xCCF0, + 37860 - 19968: 0xD7AF, + 37878 - 19968: 0xF3A1, + 37892 - 19968: 0xFCF5, + 37912 - 19968: 0xF1A4, + 37925 - 19968: 0xE0D6, + 37931 - 19968: 0xEFB2, + 37941 - 19968: 0xF4D1, + 37944 - 19968: 0xF7A1, + 37956 - 19968: 0xF1D1, + 37969 - 19968: 0xCAFC, + 37970 - 19968: 0xCAFD, + 37979 - 19968: 0xCECE, + 38013 - 19968: 0xF3C8, + 38015 - 19968: 0xF3BA, + 38263 - 19968: 0xEDFE, + 38272 - 19968: 0xDAA6, + 38275 - 19968: 0xE0EC, + 38281 - 19968: 0xF8CD, + 38283 - 19968: 0xCBD2, + 38287 - 19968: 0xEBCE, + 38289 - 19968: 0xF9D8, + 38290 - 19968: 0xF9D9, + 38291 - 19968: 0xCAE0, + 38292 - 19968: 0xDACA, + 38296 - 19968: 0xCBA6, + 38307 - 19968: 0xCAC8, + 38308 - 19968: 0xF9EE, + 38309 - 19968: 0xDBEC, + 38312 - 19968: 0xD0B1, + 38317 - 19968: 0xD5EF, + 38321 - 19968: 0xE6F3, + 38331 - 19968: 0xE7A2, + 38332 - 19968: 0xE4D9, + 38343 - 19968: 0xE4E1, + 38346 - 19968: 0xFCC4, + 38356 - 19968: 0xF9EF, + 38357 - 19968: 0xCFF4, + 38358 - 19968: 0xF7E6, + 38364 - 19968: 0xCEBC, + 38369 - 19968: 0xF4C5, + 38370 - 19968: 0xDCA3, + 38428 - 19968: 0xDDBD, + 38433 - 19968: 0xF4C6, + 38442 - 19968: 0xF8A1, + 38446 - 19968: 0xE8D6, + 38450 - 19968: 0xDBC1, + 38459 - 19968: 0xF0E6, + 38463 - 19968: 0xE4B9, + 38464 - 19968: 0xF6ED, + 38466 - 19968: 0xF9AE, + 38468 - 19968: 0xDDBE, + 38475 - 19968: 0xD7B0, + 38476 - 19968: 0xD8E8, + 38477 - 19968: 0xCBBD, + 38480 - 19968: 0xF9DA, + 38491 - 19968: 0xF8CE, + 38492 - 19968: 0xF9F0, + 38493 - 19968: 0xE0ED, + 38494 - 19968: 0xE3B3, + 38495 - 19968: 0xF4B3, + 38498 - 19968: 0xEAC2, + 38499 - 19968: 0xF2E6, + 38500 - 19968: 0xF0B6, + 38506 - 19968: 0xDBD6, + 38512 - 19968: 0xEBE4, + 38515 - 19968: 0xF2E7, + 38517 - 19968: 0xD7D5, + 38518 - 19968: 0xD4B6, + 38519 - 19968: 0xF9E8, + 38520 - 19968: 0xD7C1, + 38525 - 19968: 0xE5D5, + 38533 - 19968: 0xE9EA, + 38534 - 19968: 0xD7CC, + 38538 - 19968: 0xD3E9, + 38539 - 19968: 0xE2C9, + 38541 - 19968: 0xFCDB, + 38542 - 19968: 0xCDAD, + 38548 - 19968: 0xCCB0, + 38549 - 19968: 0xEAA2, + 38552 - 19968: 0xE4F6, + 38553 - 19968: 0xD0C0, + 38555 - 19968: 0xF0B7, + 38556 - 19968: 0xEEA1, + 38563 - 19968: 0xD7F6, + 38567 - 19968: 0xE2CA, + 38568 - 19968: 0xE2CB, + 38570 - 19968: 0xFACF, + 38577 - 19968: 0xEBDF, + 38583 - 19968: 0xD6CB, + 38587 - 19968: 0xF4B4, + 38592 - 19968: 0xEDCD, + 38593 - 19968: 0xE4D2, + 38596 - 19968: 0xEAA9, + 38597 - 19968: 0xE4BA, + 38598 - 19968: 0xF3A2, + 38599 - 19968: 0xCDD2, + 38601 - 19968: 0xF6CB, + 38603 - 19968: 0xF1E6, + 38604 - 19968: 0xEDC1, + 38605 - 19968: 0xE8BC, + 38606 - 19968: 0xEED1, + 38613 - 19968: 0xF0E7, + 38614 - 19968: 0xE2CC, + 38617 - 19968: 0xE4AA, + 38619 - 19968: 0xF5E1, + 38620 - 19968: 0xEDDA, + 38626 - 19968: 0xD7EE, + 38627 - 19968: 0xD1F1, + 38632 - 19968: 0xE9EB, + 38633 - 19968: 0xE9EC, + 38634 - 19968: 0xE0E4, + 38639 - 19968: 0xDAA7, + 38640 - 19968: 0xDDD4, + 38642 - 19968: 0xEAA3, + 38646 - 19968: 0xD6C3, + 38647 - 19968: 0xD6F4, + 38649 - 19968: 0xDADF, + 38651 - 19968: 0xEFB3, + 38656 - 19968: 0xE2CD, + 38662 - 19968: 0xEFFD, + 38663 - 19968: 0xF2E8, + 38673 - 19968: 0xEFC5, + 38675 - 19968: 0xE7E7, + 38678 - 19968: 0xD7FD, + 38681 - 19968: 0xE7CE, + 38684 - 19968: 0xDFDC, + 38686 - 19968: 0xF9C7, + 38695 - 19968: 0xD9F6, + 38704 - 19968: 0xDFAC, + 38706 - 19968: 0xD6DA, + 38713 - 19968: 0xDCA4, + 38717 - 19968: 0xF0B8, + 38722 - 19968: 0xD5FA, + 38724 - 19968: 0xE4F7, + 38728 - 19968: 0xD6C4, + 38737 - 19968: 0xF4EC, + 38742 - 19968: 0xEFFE, + 38748 - 19968: 0xF0A1, + 38750 - 19968: 0xDEAA, + 38753 - 19968: 0xDABC, + 38754 - 19968: 0xD8FC, + 38761 - 19968: 0xFAD4, + 38765 - 19968: 0xECE5, + 38772 - 19968: 0xFCA8, + 38775 - 19968: 0xECE6, + 38778 - 19968: 0xD8CB, + 38795 - 19968: 0xFBB9, + 38797 - 19968: 0xE4D3, + 38799 - 19968: 0xCDF9, + 38816 - 19968: 0xCFD3, + 38824 - 19968: 0xCAEA, + 38827 - 19968: 0xCFD4, + 38829 - 19968: 0xF8BD, + 38854 - 19968: 0xF4C7, + 38859 - 19968: 0xEADF, + 38867 - 19968: 0xF9DB, + 38876 - 19968: 0xD4B7, + 38899 - 19968: 0xEBE5, + 38902 - 19968: 0xE1D2, + 38907 - 19968: 0xEAA4, + 38911 - 19968: 0xFAC2, + 38912 - 19968: 0xFBE1, + 38913 - 19968: 0xFAED, + 38914 - 19968: 0xF0A2, + 38915 - 19968: 0xCCF1, + 38917 - 19968: 0xFAA3, + 38918 - 19968: 0xE2F7, + 38920 - 19968: 0xE2CE, + 38922 - 19968: 0xE9F5, + 38924 - 19968: 0xE1EB, + 38928 - 19968: 0xE7E8, + 38929 - 19968: 0xE8D7, + 38930 - 19968: 0xDAF8, + 38931 - 19968: 0xD4CB, + 38935 - 19968: 0xF7F6, + 38936 - 19968: 0xD6C5, + 38957 - 19968: 0xD4E9, + 38960 - 19968: 0xFAFA, + 38968 - 19968: 0xCCF2, + 38969 - 19968: 0xF7DD, + 38971 - 19968: 0xDEBA, + 38982 - 19968: 0xCEA8, + 38988 - 19968: 0xF0B9, + 38989 - 19968: 0xE4FE, + 38990 - 19968: 0xE4C9, + 38996 - 19968: 0xE4D4, + 39000 - 19968: 0xEAC3, + 39002 - 19968: 0xEFB4, + 39006 - 19968: 0xD7BE, + 39013 - 19968: 0xFBE2, + 39015 - 19968: 0xCDD3, + 39019 - 19968: 0xEFB5, + 39023 - 19968: 0xFAE9, + 39080 - 19968: 0xF9A6, + 39087 - 19968: 0xDFBD, + 39089 - 19968: 0xF7C7, + 39108 - 19968: 0xF8FD, + 39111 - 19968: 0xF8FC, + 39131 - 19968: 0xDEAB, + 39132 - 19968: 0xDBE8, + 39135 - 19968: 0xE3DD, + 39137 - 19968: 0xE1E2, + 39138 - 19968: 0xD1C6, + 39149 - 19968: 0xF6D0, + 39150 - 19968: 0xEBE6, + 39151 - 19968: 0xDAF9, + 39156 - 19968: 0xECC7, + 39164 - 19968: 0xDEF8, + 39165 - 19968: 0xF8E9, + 39166 - 19968: 0xE3DE, + 39171 - 19968: 0xCEF5, + 39177 - 19968: 0xFAC3, + 39178 - 19968: 0xE5D7, + 39180 - 19968: 0xECC8, + 39184 - 19968: 0xF3C9, + 39187 - 19968: 0xE4BB, + 39192 - 19968: 0xE6AE, + 39198 - 19968: 0xEFB6, + 39200 - 19968: 0xDCBF, + 39208 - 19968: 0xCEBD, + 39237 - 19968: 0xD8C3, + 39241 - 19968: 0xD0CF, + 39243 - 19968: 0xCFFA, + 39244 - 19968: 0xF3CA, + 39245 - 19968: 0xE0D7, + 39249 - 19968: 0xD1C7, + 39250 - 19968: 0xE9AE, + 39252 - 19968: 0xE8BD, + 39255 - 19968: 0xFAC4, + 39318 - 19968: 0xE2CF, + 39321 - 19968: 0xFAC5, + 39325 - 19968: 0xF9B8, + 39333 - 19968: 0xDCE0, + 39336 - 19968: 0xFBB0, + 39340 - 19968: 0xD8A9, + 39341 - 19968: 0xE5DF, + 39342 - 19968: 0xF9A7, + 39345 - 19968: 0xF6EE, + 39347 - 19968: 0xF6CC, + 39348 - 19968: 0xE2F8, + 39353 - 19968: 0xECF1, + 39361 - 19968: 0xDAE0, + 39376 - 19968: 0xF1D2, + 39377 - 19968: 0xD2CC, + 39378 - 19968: 0xCFCB, + 39381 - 19968: 0xCABD, + 39385 - 19968: 0xDDBF, + 39389 - 19968: 0xF6EF, + 39391 - 19968: 0xDEF9, + 39405 - 19968: 0xFAB4, + 39409 - 19968: 0xD5AD, + 39423 - 19968: 0xF1E7, + 39425 - 19968: 0xDEBE, + 39432 - 19968: 0xDCC0, + 39438 - 19968: 0xD1C8, + 39439 - 19968: 0xD1C9, + 39449 - 19968: 0xF8BE, + 39467 - 19968: 0xCBF6, + 39472 - 19968: 0xD4F9, + 39478 - 19968: 0xF5E2, + 39479 - 19968: 0xE1D3, + 39488 - 19968: 0xD8E9, + 39491 - 19968: 0xF8FE, + 39493 - 19968: 0xCFCC, + 39501 - 19968: 0xFDA4, + 39509 - 19968: 0xCEF6, + 39511 - 19968: 0xFAD0, + 39514 - 19968: 0xCCF3, + 39515 - 19968: 0xE6BE, + 39519 - 19968: 0xF6AE, + 39522 - 19968: 0xD5F0, + 39525 - 19968: 0xD1CA, + 39529 - 19968: 0xFCBE, + 39530 - 19968: 0xD5F1, + 39592 - 19968: 0xCDE9, + 39608 - 19968: 0xFAB5, + 39635 - 19968: 0xE2D0, + 39636 - 19968: 0xF4F7, + 39640 - 19968: 0xCDD4, + 39653 - 19968: 0xE7A3, + 39662 - 19968: 0xDBA5, + 39706 - 19968: 0xE2D1, + 39719 - 19968: 0xD7A2, + 39722 - 19968: 0xF7E3, + 39729 - 19968: 0xEAA6, + 39740 - 19968: 0xD0A1, + 39745 - 19968: 0xCEDA, + 39746 - 19968: 0xFBEB, + 39747 - 19968: 0xDBA6, + 39748 - 19968: 0xDBDE, + 39749 - 19968: 0xD8E5, + 39759 - 19968: 0xEAE0, + 39764 - 19968: 0xD8AA, + 39770 - 19968: 0xE5E0, + 39791 - 19968: 0xD6DB, + 39822 - 19968: 0xEFC6, + 39825 - 19968: 0xF8EA, + 39839 - 19968: 0xE4D5, + 39851 - 19968: 0xCEF7, + 39854 - 19968: 0xE0D8, + 39881 - 19968: 0xD7EF, + 39894 - 19968: 0xF4ED, + 39908 - 19968: 0xCDE6, + 39912 - 19968: 0xCCF4, + 39949 - 19968: 0xF5E3, + 39952 - 19968: 0xE4CA, + 39954 - 19968: 0xDCE1, + 39957 - 19968: 0xF9C8, + 39973 - 19968: 0xFCBF, + 39986 - 19968: 0xE8A7, + 39995 - 19968: 0xD8C4, + 40007 - 19968: 0xCBBE, + 40009 - 19968: 0xDCAE, + 40023 - 19968: 0xD7F7, + 40165 - 19968: 0xF0E8, + 40167 - 19968: 0xDDC0, + 40169 - 19968: 0xCFCD, + 40179 - 19968: 0xDCF3, + 40180 - 19968: 0xD9B0, + 40182 - 19968: 0xE6E9, + 40201 - 19968: 0xE4BC, + 40219 - 19968: 0xEAC4, + 40230 - 19968: 0xE4EC, + 40232 - 19968: 0xE4E5, + 40251 - 19968: 0xFBF8, + 40273 - 19968: 0xCCBB, + 40285 - 19968: 0xE4BD, + 40288 - 19968: 0xCDDC, + 40289 - 19968: 0xD9F7, + 40300 - 19968: 0xDDDF, + 40306 - 19968: 0xEDCE, + 40361 - 19968: 0xD9D0, + 40367 - 19968: 0xE5A3, + 40372 - 19968: 0xF9CD, + 40388 - 19968: 0xCDAE, + 40407 - 19968: 0xCFCE, + 40434 - 19968: 0xF6AF, + 40440 - 19968: 0xFDD3, + 40441 - 19968: 0xEBED, + 40442 - 19968: 0xD6DC, + 40474 - 19968: 0xE5A4, + 40478 - 19968: 0xD5B6, + 40565 - 19968: 0xD6DD, + 40569 - 19968: 0xF9E9, + 40573 - 19968: 0xE7A4, + 40575 - 19968: 0xD6E3, + 40594 - 19968: 0xD1CB, + 40595 - 19968: 0xD6E4, + 40599 - 19968: 0xD5F2, + 40605 - 19968: 0xDEFA, + 40607 - 19968: 0xD7F8, + 40613 - 19968: 0xD8EA, + 40628 - 19968: 0xCFD5, + 40629 - 19968: 0xD8FD, + 40635 - 19968: 0xD8AB, + 40638 - 19968: 0xFDCB, + 40643 - 19968: 0xFCDC, + 40653 - 19968: 0xE0A8, + 40654 - 19968: 0xD5F3, + 40657 - 19968: 0xFDD9, + 40660 - 19968: 0xCCA3, + 40664 - 19968: 0xD9F9, + 40667 - 19968: 0xD3EA, + 40668 - 19968: 0xF5F5, + 40670 - 19968: 0xEFC7, + 40680 - 19968: 0xD3DA, + 40692 - 19968: 0xDABD, + 40711 - 19968: 0xE8A8, + 40712 - 19968: 0xDCAF, + 40718 - 19968: 0xF0A3, + 40723 - 19968: 0xCDD5, + 40736 - 19968: 0xE0A9, + 40763 - 19968: 0xDEAC, + 40778 - 19968: 0xF0BA, + 40779 - 19968: 0xEEB1, + 40782 - 19968: 0xEEB2, + 40786 - 19968: 0xF6CD, + 40799 - 19968: 0xEED2, + 40801 - 19968: 0xD6C6, + 40807 - 19968: 0xE0E5, + 40810 - 19968: 0xF3BB, + 40812 - 19968: 0xE5E1, + 40823 - 19968: 0xE4CB, + 40845 - 19968: 0xD7A3, + 40848 - 19968: 0xDBC2, + 40853 - 19968: 0xCAFE, + 40860 - 19968: 0xCFCF, +} + +const encode1Low, encode1High = 44032, 55204 + +var encode1 = [...]uint16{ + 44032 - 44032: 0xB0A1, + 44033 - 44032: 0xB0A2, + 44034 - 44032: 0x8141, + 44035 - 44032: 0x8142, + 44036 - 44032: 0xB0A3, + 44037 - 44032: 0x8143, + 44038 - 44032: 0x8144, + 44039 - 44032: 0xB0A4, + 44040 - 44032: 0xB0A5, + 44041 - 44032: 0xB0A6, + 44042 - 44032: 0xB0A7, + 44043 - 44032: 0x8145, + 44044 - 44032: 0x8146, + 44045 - 44032: 0x8147, + 44046 - 44032: 0x8148, + 44047 - 44032: 0x8149, + 44048 - 44032: 0xB0A8, + 44049 - 44032: 0xB0A9, + 44050 - 44032: 0xB0AA, + 44051 - 44032: 0xB0AB, + 44052 - 44032: 0xB0AC, + 44053 - 44032: 0xB0AD, + 44054 - 44032: 0xB0AE, + 44055 - 44032: 0xB0AF, + 44056 - 44032: 0x814A, + 44057 - 44032: 0xB0B0, + 44058 - 44032: 0xB0B1, + 44059 - 44032: 0xB0B2, + 44060 - 44032: 0xB0B3, + 44061 - 44032: 0xB0B4, + 44062 - 44032: 0x814B, + 44063 - 44032: 0x814C, + 44064 - 44032: 0xB0B5, + 44065 - 44032: 0x814D, + 44066 - 44032: 0x814E, + 44067 - 44032: 0x814F, + 44068 - 44032: 0xB0B6, + 44069 - 44032: 0x8150, + 44070 - 44032: 0x8151, + 44071 - 44032: 0x8152, + 44072 - 44032: 0x8153, + 44073 - 44032: 0x8154, + 44074 - 44032: 0x8155, + 44075 - 44032: 0x8156, + 44076 - 44032: 0xB0B7, + 44077 - 44032: 0xB0B8, + 44078 - 44032: 0x8157, + 44079 - 44032: 0xB0B9, + 44080 - 44032: 0xB0BA, + 44081 - 44032: 0xB0BB, + 44082 - 44032: 0x8158, + 44083 - 44032: 0x8159, + 44084 - 44032: 0x815A, + 44085 - 44032: 0x8161, + 44086 - 44032: 0x8162, + 44087 - 44032: 0x8163, + 44088 - 44032: 0xB0BC, + 44089 - 44032: 0xB0BD, + 44090 - 44032: 0x8164, + 44091 - 44032: 0x8165, + 44092 - 44032: 0xB0BE, + 44093 - 44032: 0x8166, + 44094 - 44032: 0x8167, + 44095 - 44032: 0x8168, + 44096 - 44032: 0xB0BF, + 44097 - 44032: 0x8169, + 44098 - 44032: 0x816A, + 44099 - 44032: 0x816B, + 44100 - 44032: 0x816C, + 44101 - 44032: 0x816D, + 44102 - 44032: 0x816E, + 44103 - 44032: 0x816F, + 44104 - 44032: 0x8170, + 44105 - 44032: 0x8171, + 44106 - 44032: 0x8172, + 44107 - 44032: 0xB0C0, + 44108 - 44032: 0x8173, + 44109 - 44032: 0xB0C1, + 44110 - 44032: 0x8174, + 44111 - 44032: 0x8175, + 44112 - 44032: 0x8176, + 44113 - 44032: 0x8177, + 44114 - 44032: 0x8178, + 44115 - 44032: 0x8179, + 44116 - 44032: 0xB0C2, + 44117 - 44032: 0x817A, + 44118 - 44032: 0x8181, + 44119 - 44032: 0x8182, + 44120 - 44032: 0xB0C3, + 44121 - 44032: 0x8183, + 44122 - 44032: 0x8184, + 44123 - 44032: 0x8185, + 44124 - 44032: 0xB0C4, + 44125 - 44032: 0x8186, + 44126 - 44032: 0x8187, + 44127 - 44032: 0x8188, + 44128 - 44032: 0x8189, + 44129 - 44032: 0x818A, + 44130 - 44032: 0x818B, + 44131 - 44032: 0x818C, + 44132 - 44032: 0x818D, + 44133 - 44032: 0x818E, + 44134 - 44032: 0x818F, + 44135 - 44032: 0x8190, + 44136 - 44032: 0x8191, + 44137 - 44032: 0x8192, + 44138 - 44032: 0x8193, + 44139 - 44032: 0x8194, + 44140 - 44032: 0x8195, + 44141 - 44032: 0x8196, + 44142 - 44032: 0x8197, + 44143 - 44032: 0x8198, + 44144 - 44032: 0xB0C5, + 44145 - 44032: 0xB0C6, + 44146 - 44032: 0x8199, + 44147 - 44032: 0x819A, + 44148 - 44032: 0xB0C7, + 44149 - 44032: 0x819B, + 44150 - 44032: 0x819C, + 44151 - 44032: 0xB0C8, + 44152 - 44032: 0xB0C9, + 44153 - 44032: 0x819D, + 44154 - 44032: 0xB0CA, + 44155 - 44032: 0x819E, + 44156 - 44032: 0x819F, + 44157 - 44032: 0x81A0, + 44158 - 44032: 0x81A1, + 44159 - 44032: 0x81A2, + 44160 - 44032: 0xB0CB, + 44161 - 44032: 0xB0CC, + 44162 - 44032: 0x81A3, + 44163 - 44032: 0xB0CD, + 44164 - 44032: 0xB0CE, + 44165 - 44032: 0xB0CF, + 44166 - 44032: 0xB0D0, + 44167 - 44032: 0x81A4, + 44168 - 44032: 0x81A5, + 44169 - 44032: 0xB0D1, + 44170 - 44032: 0xB0D2, + 44171 - 44032: 0xB0D3, + 44172 - 44032: 0xB0D4, + 44173 - 44032: 0x81A6, + 44174 - 44032: 0x81A7, + 44175 - 44032: 0x81A8, + 44176 - 44032: 0xB0D5, + 44177 - 44032: 0x81A9, + 44178 - 44032: 0x81AA, + 44179 - 44032: 0x81AB, + 44180 - 44032: 0xB0D6, + 44181 - 44032: 0x81AC, + 44182 - 44032: 0x81AD, + 44183 - 44032: 0x81AE, + 44184 - 44032: 0x81AF, + 44185 - 44032: 0x81B0, + 44186 - 44032: 0x81B1, + 44187 - 44032: 0x81B2, + 44188 - 44032: 0xB0D7, + 44189 - 44032: 0xB0D8, + 44190 - 44032: 0x81B3, + 44191 - 44032: 0xB0D9, + 44192 - 44032: 0xB0DA, + 44193 - 44032: 0xB0DB, + 44194 - 44032: 0x81B4, + 44195 - 44032: 0x81B5, + 44196 - 44032: 0x81B6, + 44197 - 44032: 0x81B7, + 44198 - 44032: 0x81B8, + 44199 - 44032: 0x81B9, + 44200 - 44032: 0xB0DC, + 44201 - 44032: 0xB0DD, + 44202 - 44032: 0xB0DE, + 44203 - 44032: 0x81BA, + 44204 - 44032: 0xB0DF, + 44205 - 44032: 0x81BB, + 44206 - 44032: 0x81BC, + 44207 - 44032: 0xB0E0, + 44208 - 44032: 0xB0E1, + 44209 - 44032: 0x81BD, + 44210 - 44032: 0x81BE, + 44211 - 44032: 0x81BF, + 44212 - 44032: 0x81C0, + 44213 - 44032: 0x81C1, + 44214 - 44032: 0x81C2, + 44215 - 44032: 0x81C3, + 44216 - 44032: 0xB0E2, + 44217 - 44032: 0xB0E3, + 44218 - 44032: 0x81C4, + 44219 - 44032: 0xB0E4, + 44220 - 44032: 0xB0E5, + 44221 - 44032: 0xB0E6, + 44222 - 44032: 0x81C5, + 44223 - 44032: 0x81C6, + 44224 - 44032: 0x81C7, + 44225 - 44032: 0xB0E7, + 44226 - 44032: 0x81C8, + 44227 - 44032: 0x81C9, + 44228 - 44032: 0xB0E8, + 44229 - 44032: 0x81CA, + 44230 - 44032: 0x81CB, + 44231 - 44032: 0x81CC, + 44232 - 44032: 0xB0E9, + 44233 - 44032: 0x81CD, + 44234 - 44032: 0x81CE, + 44235 - 44032: 0x81CF, + 44236 - 44032: 0xB0EA, + 44237 - 44032: 0x81D0, + 44238 - 44032: 0x81D1, + 44239 - 44032: 0x81D2, + 44240 - 44032: 0x81D3, + 44241 - 44032: 0x81D4, + 44242 - 44032: 0x81D5, + 44243 - 44032: 0x81D6, + 44244 - 44032: 0x81D7, + 44245 - 44032: 0xB0EB, + 44246 - 44032: 0x81D8, + 44247 - 44032: 0xB0EC, + 44248 - 44032: 0x81D9, + 44249 - 44032: 0x81DA, + 44250 - 44032: 0x81DB, + 44251 - 44032: 0x81DC, + 44252 - 44032: 0x81DD, + 44253 - 44032: 0x81DE, + 44254 - 44032: 0x81DF, + 44255 - 44032: 0x81E0, + 44256 - 44032: 0xB0ED, + 44257 - 44032: 0xB0EE, + 44258 - 44032: 0x81E1, + 44259 - 44032: 0x81E2, + 44260 - 44032: 0xB0EF, + 44261 - 44032: 0x81E3, + 44262 - 44032: 0x81E4, + 44263 - 44032: 0xB0F0, + 44264 - 44032: 0xB0F1, + 44265 - 44032: 0x81E5, + 44266 - 44032: 0xB0F2, + 44267 - 44032: 0x81E6, + 44268 - 44032: 0xB0F3, + 44269 - 44032: 0x81E7, + 44270 - 44032: 0x81E8, + 44271 - 44032: 0xB0F4, + 44272 - 44032: 0xB0F5, + 44273 - 44032: 0xB0F6, + 44274 - 44032: 0x81E9, + 44275 - 44032: 0xB0F7, + 44276 - 44032: 0x81EA, + 44277 - 44032: 0xB0F8, + 44278 - 44032: 0xB0F9, + 44279 - 44032: 0x81EB, + 44280 - 44032: 0x81EC, + 44281 - 44032: 0x81ED, + 44282 - 44032: 0x81EE, + 44283 - 44032: 0x81EF, + 44284 - 44032: 0xB0FA, + 44285 - 44032: 0xB0FB, + 44286 - 44032: 0x81F0, + 44287 - 44032: 0x81F1, + 44288 - 44032: 0xB0FC, + 44289 - 44032: 0x81F2, + 44290 - 44032: 0x81F3, + 44291 - 44032: 0x81F4, + 44292 - 44032: 0xB0FD, + 44293 - 44032: 0x81F5, + 44294 - 44032: 0xB0FE, + 44295 - 44032: 0x81F6, + 44296 - 44032: 0x81F7, + 44297 - 44032: 0x81F8, + 44298 - 44032: 0x81F9, + 44299 - 44032: 0x81FA, + 44300 - 44032: 0xB1A1, + 44301 - 44032: 0xB1A2, + 44302 - 44032: 0x81FB, + 44303 - 44032: 0xB1A3, + 44304 - 44032: 0x81FC, + 44305 - 44032: 0xB1A4, + 44306 - 44032: 0x81FD, + 44307 - 44032: 0x81FE, + 44308 - 44032: 0x8241, + 44309 - 44032: 0x8242, + 44310 - 44032: 0x8243, + 44311 - 44032: 0x8244, + 44312 - 44032: 0xB1A5, + 44313 - 44032: 0x8245, + 44314 - 44032: 0x8246, + 44315 - 44032: 0x8247, + 44316 - 44032: 0xB1A6, + 44317 - 44032: 0x8248, + 44318 - 44032: 0x8249, + 44319 - 44032: 0x824A, + 44320 - 44032: 0xB1A7, + 44321 - 44032: 0x824B, + 44322 - 44032: 0x824C, + 44323 - 44032: 0x824D, + 44324 - 44032: 0x824E, + 44325 - 44032: 0x824F, + 44326 - 44032: 0x8250, + 44327 - 44032: 0x8251, + 44328 - 44032: 0x8252, + 44329 - 44032: 0xB1A8, + 44330 - 44032: 0x8253, + 44331 - 44032: 0x8254, + 44332 - 44032: 0xB1A9, + 44333 - 44032: 0xB1AA, + 44334 - 44032: 0x8255, + 44335 - 44032: 0x8256, + 44336 - 44032: 0x8257, + 44337 - 44032: 0x8258, + 44338 - 44032: 0x8259, + 44339 - 44032: 0x825A, + 44340 - 44032: 0xB1AB, + 44341 - 44032: 0xB1AC, + 44342 - 44032: 0x8261, + 44343 - 44032: 0x8262, + 44344 - 44032: 0xB1AD, + 44345 - 44032: 0x8263, + 44346 - 44032: 0x8264, + 44347 - 44032: 0x8265, + 44348 - 44032: 0xB1AE, + 44349 - 44032: 0x8266, + 44350 - 44032: 0x8267, + 44351 - 44032: 0x8268, + 44352 - 44032: 0x8269, + 44353 - 44032: 0x826A, + 44354 - 44032: 0x826B, + 44355 - 44032: 0x826C, + 44356 - 44032: 0xB1AF, + 44357 - 44032: 0xB1B0, + 44358 - 44032: 0x826D, + 44359 - 44032: 0xB1B1, + 44360 - 44032: 0x826E, + 44361 - 44032: 0xB1B2, + 44362 - 44032: 0x826F, + 44363 - 44032: 0x8270, + 44364 - 44032: 0x8271, + 44365 - 44032: 0x8272, + 44366 - 44032: 0x8273, + 44367 - 44032: 0x8274, + 44368 - 44032: 0xB1B3, + 44369 - 44032: 0x8275, + 44370 - 44032: 0x8276, + 44371 - 44032: 0x8277, + 44372 - 44032: 0xB1B4, + 44373 - 44032: 0x8278, + 44374 - 44032: 0x8279, + 44375 - 44032: 0x827A, + 44376 - 44032: 0xB1B5, + 44377 - 44032: 0x8281, + 44378 - 44032: 0x8282, + 44379 - 44032: 0x8283, + 44380 - 44032: 0x8284, + 44381 - 44032: 0x8285, + 44382 - 44032: 0x8286, + 44383 - 44032: 0x8287, + 44384 - 44032: 0x8288, + 44385 - 44032: 0xB1B6, + 44386 - 44032: 0x8289, + 44387 - 44032: 0xB1B7, + 44388 - 44032: 0x828A, + 44389 - 44032: 0x828B, + 44390 - 44032: 0x828C, + 44391 - 44032: 0x828D, + 44392 - 44032: 0x828E, + 44393 - 44032: 0x828F, + 44394 - 44032: 0x8290, + 44395 - 44032: 0x8291, + 44396 - 44032: 0xB1B8, + 44397 - 44032: 0xB1B9, + 44398 - 44032: 0x8292, + 44399 - 44032: 0x8293, + 44400 - 44032: 0xB1BA, + 44401 - 44032: 0x8294, + 44402 - 44032: 0x8295, + 44403 - 44032: 0xB1BB, + 44404 - 44032: 0xB1BC, + 44405 - 44032: 0xB1BD, + 44406 - 44032: 0xB1BE, + 44407 - 44032: 0x8296, + 44408 - 44032: 0x8297, + 44409 - 44032: 0x8298, + 44410 - 44032: 0x8299, + 44411 - 44032: 0xB1BF, + 44412 - 44032: 0xB1C0, + 44413 - 44032: 0xB1C1, + 44414 - 44032: 0x829A, + 44415 - 44032: 0xB1C2, + 44416 - 44032: 0x829B, + 44417 - 44032: 0xB1C3, + 44418 - 44032: 0xB1C4, + 44419 - 44032: 0x829C, + 44420 - 44032: 0x829D, + 44421 - 44032: 0x829E, + 44422 - 44032: 0x829F, + 44423 - 44032: 0x82A0, + 44424 - 44032: 0xB1C5, + 44425 - 44032: 0xB1C6, + 44426 - 44032: 0x82A1, + 44427 - 44032: 0x82A2, + 44428 - 44032: 0xB1C7, + 44429 - 44032: 0x82A3, + 44430 - 44032: 0x82A4, + 44431 - 44032: 0x82A5, + 44432 - 44032: 0xB1C8, + 44433 - 44032: 0x82A6, + 44434 - 44032: 0x82A7, + 44435 - 44032: 0x82A8, + 44436 - 44032: 0x82A9, + 44437 - 44032: 0x82AA, + 44438 - 44032: 0x82AB, + 44439 - 44032: 0x82AC, + 44440 - 44032: 0x82AD, + 44441 - 44032: 0x82AE, + 44442 - 44032: 0x82AF, + 44443 - 44032: 0x82B0, + 44444 - 44032: 0xB1C9, + 44445 - 44032: 0xB1CA, + 44446 - 44032: 0x82B1, + 44447 - 44032: 0x82B2, + 44448 - 44032: 0x82B3, + 44449 - 44032: 0x82B4, + 44450 - 44032: 0x82B5, + 44451 - 44032: 0x82B6, + 44452 - 44032: 0xB1CB, + 44453 - 44032: 0x82B7, + 44454 - 44032: 0x82B8, + 44455 - 44032: 0x82B9, + 44456 - 44032: 0x82BA, + 44457 - 44032: 0x82BB, + 44458 - 44032: 0x82BC, + 44459 - 44032: 0x82BD, + 44460 - 44032: 0x82BE, + 44461 - 44032: 0x82BF, + 44462 - 44032: 0x82C0, + 44463 - 44032: 0x82C1, + 44464 - 44032: 0x82C2, + 44465 - 44032: 0x82C3, + 44466 - 44032: 0x82C4, + 44467 - 44032: 0x82C5, + 44468 - 44032: 0x82C6, + 44469 - 44032: 0x82C7, + 44470 - 44032: 0x82C8, + 44471 - 44032: 0xB1CC, + 44472 - 44032: 0x82C9, + 44473 - 44032: 0x82CA, + 44474 - 44032: 0x82CB, + 44475 - 44032: 0x82CC, + 44476 - 44032: 0x82CD, + 44477 - 44032: 0x82CE, + 44478 - 44032: 0x82CF, + 44479 - 44032: 0x82D0, + 44480 - 44032: 0xB1CD, + 44481 - 44032: 0xB1CE, + 44482 - 44032: 0x82D1, + 44483 - 44032: 0x82D2, + 44484 - 44032: 0xB1CF, + 44485 - 44032: 0x82D3, + 44486 - 44032: 0x82D4, + 44487 - 44032: 0x82D5, + 44488 - 44032: 0xB1D0, + 44489 - 44032: 0x82D6, + 44490 - 44032: 0x82D7, + 44491 - 44032: 0x82D8, + 44492 - 44032: 0x82D9, + 44493 - 44032: 0x82DA, + 44494 - 44032: 0x82DB, + 44495 - 44032: 0x82DC, + 44496 - 44032: 0xB1D1, + 44497 - 44032: 0xB1D2, + 44498 - 44032: 0x82DD, + 44499 - 44032: 0xB1D3, + 44500 - 44032: 0x82DE, + 44501 - 44032: 0x82DF, + 44502 - 44032: 0x82E0, + 44503 - 44032: 0x82E1, + 44504 - 44032: 0x82E2, + 44505 - 44032: 0x82E3, + 44506 - 44032: 0x82E4, + 44507 - 44032: 0x82E5, + 44508 - 44032: 0xB1D4, + 44509 - 44032: 0x82E6, + 44510 - 44032: 0x82E7, + 44511 - 44032: 0x82E8, + 44512 - 44032: 0xB1D5, + 44513 - 44032: 0x82E9, + 44514 - 44032: 0x82EA, + 44515 - 44032: 0x82EB, + 44516 - 44032: 0xB1D6, + 44517 - 44032: 0x82EC, + 44518 - 44032: 0x82ED, + 44519 - 44032: 0x82EE, + 44520 - 44032: 0x82EF, + 44521 - 44032: 0x82F0, + 44522 - 44032: 0x82F1, + 44523 - 44032: 0x82F2, + 44524 - 44032: 0x82F3, + 44525 - 44032: 0x82F4, + 44526 - 44032: 0x82F5, + 44527 - 44032: 0x82F6, + 44528 - 44032: 0x82F7, + 44529 - 44032: 0x82F8, + 44530 - 44032: 0x82F9, + 44531 - 44032: 0x82FA, + 44532 - 44032: 0x82FB, + 44533 - 44032: 0x82FC, + 44534 - 44032: 0x82FD, + 44535 - 44032: 0x82FE, + 44536 - 44032: 0xB1D7, + 44537 - 44032: 0xB1D8, + 44538 - 44032: 0x8341, + 44539 - 44032: 0x8342, + 44540 - 44032: 0xB1D9, + 44541 - 44032: 0x8343, + 44542 - 44032: 0x8344, + 44543 - 44032: 0xB1DA, + 44544 - 44032: 0xB1DB, + 44545 - 44032: 0xB1DC, + 44546 - 44032: 0x8345, + 44547 - 44032: 0x8346, + 44548 - 44032: 0x8347, + 44549 - 44032: 0x8348, + 44550 - 44032: 0x8349, + 44551 - 44032: 0x834A, + 44552 - 44032: 0xB1DD, + 44553 - 44032: 0xB1DE, + 44554 - 44032: 0x834B, + 44555 - 44032: 0xB1DF, + 44556 - 44032: 0x834C, + 44557 - 44032: 0xB1E0, + 44558 - 44032: 0x834D, + 44559 - 44032: 0x834E, + 44560 - 44032: 0x834F, + 44561 - 44032: 0x8350, + 44562 - 44032: 0x8351, + 44563 - 44032: 0x8352, + 44564 - 44032: 0xB1E1, + 44565 - 44032: 0x8353, + 44566 - 44032: 0x8354, + 44567 - 44032: 0x8355, + 44568 - 44032: 0x8356, + 44569 - 44032: 0x8357, + 44570 - 44032: 0x8358, + 44571 - 44032: 0x8359, + 44572 - 44032: 0x835A, + 44573 - 44032: 0x8361, + 44574 - 44032: 0x8362, + 44575 - 44032: 0x8363, + 44576 - 44032: 0x8364, + 44577 - 44032: 0x8365, + 44578 - 44032: 0x8366, + 44579 - 44032: 0x8367, + 44580 - 44032: 0x8368, + 44581 - 44032: 0x8369, + 44582 - 44032: 0x836A, + 44583 - 44032: 0x836B, + 44584 - 44032: 0x836C, + 44585 - 44032: 0x836D, + 44586 - 44032: 0x836E, + 44587 - 44032: 0x836F, + 44588 - 44032: 0x8370, + 44589 - 44032: 0x8371, + 44590 - 44032: 0x8372, + 44591 - 44032: 0x8373, + 44592 - 44032: 0xB1E2, + 44593 - 44032: 0xB1E3, + 44594 - 44032: 0x8374, + 44595 - 44032: 0x8375, + 44596 - 44032: 0xB1E4, + 44597 - 44032: 0x8376, + 44598 - 44032: 0x8377, + 44599 - 44032: 0xB1E5, + 44600 - 44032: 0xB1E6, + 44601 - 44032: 0x8378, + 44602 - 44032: 0xB1E7, + 44603 - 44032: 0x8379, + 44604 - 44032: 0x837A, + 44605 - 44032: 0x8381, + 44606 - 44032: 0x8382, + 44607 - 44032: 0x8383, + 44608 - 44032: 0xB1E8, + 44609 - 44032: 0xB1E9, + 44610 - 44032: 0x8384, + 44611 - 44032: 0xB1EA, + 44612 - 44032: 0x8385, + 44613 - 44032: 0xB1EB, + 44614 - 44032: 0xB1EC, + 44615 - 44032: 0x8386, + 44616 - 44032: 0x8387, + 44617 - 44032: 0x8388, + 44618 - 44032: 0xB1ED, + 44619 - 44032: 0x8389, + 44620 - 44032: 0xB1EE, + 44621 - 44032: 0xB1EF, + 44622 - 44032: 0xB1F0, + 44623 - 44032: 0x838A, + 44624 - 44032: 0xB1F1, + 44625 - 44032: 0x838B, + 44626 - 44032: 0x838C, + 44627 - 44032: 0x838D, + 44628 - 44032: 0xB1F2, + 44629 - 44032: 0x838E, + 44630 - 44032: 0xB1F3, + 44631 - 44032: 0x838F, + 44632 - 44032: 0x8390, + 44633 - 44032: 0x8391, + 44634 - 44032: 0x8392, + 44635 - 44032: 0x8393, + 44636 - 44032: 0xB1F4, + 44637 - 44032: 0xB1F5, + 44638 - 44032: 0x8394, + 44639 - 44032: 0xB1F6, + 44640 - 44032: 0xB1F7, + 44641 - 44032: 0xB1F8, + 44642 - 44032: 0x8395, + 44643 - 44032: 0x8396, + 44644 - 44032: 0x8397, + 44645 - 44032: 0xB1F9, + 44646 - 44032: 0x8398, + 44647 - 44032: 0x8399, + 44648 - 44032: 0xB1FA, + 44649 - 44032: 0xB1FB, + 44650 - 44032: 0x839A, + 44651 - 44032: 0x839B, + 44652 - 44032: 0xB1FC, + 44653 - 44032: 0x839C, + 44654 - 44032: 0x839D, + 44655 - 44032: 0x839E, + 44656 - 44032: 0xB1FD, + 44657 - 44032: 0x839F, + 44658 - 44032: 0x83A0, + 44659 - 44032: 0x83A1, + 44660 - 44032: 0x83A2, + 44661 - 44032: 0x83A3, + 44662 - 44032: 0x83A4, + 44663 - 44032: 0x83A5, + 44664 - 44032: 0xB1FE, + 44665 - 44032: 0xB2A1, + 44666 - 44032: 0x83A6, + 44667 - 44032: 0xB2A2, + 44668 - 44032: 0xB2A3, + 44669 - 44032: 0xB2A4, + 44670 - 44032: 0x83A7, + 44671 - 44032: 0x83A8, + 44672 - 44032: 0x83A9, + 44673 - 44032: 0x83AA, + 44674 - 44032: 0x83AB, + 44675 - 44032: 0x83AC, + 44676 - 44032: 0xB2A5, + 44677 - 44032: 0xB2A6, + 44678 - 44032: 0x83AD, + 44679 - 44032: 0x83AE, + 44680 - 44032: 0x83AF, + 44681 - 44032: 0x83B0, + 44682 - 44032: 0x83B1, + 44683 - 44032: 0x83B2, + 44684 - 44032: 0xB2A7, + 44685 - 44032: 0x83B3, + 44686 - 44032: 0x83B4, + 44687 - 44032: 0x83B5, + 44688 - 44032: 0x83B6, + 44689 - 44032: 0x83B7, + 44690 - 44032: 0x83B8, + 44691 - 44032: 0x83B9, + 44692 - 44032: 0x83BA, + 44693 - 44032: 0x83BB, + 44694 - 44032: 0x83BC, + 44695 - 44032: 0x83BD, + 44696 - 44032: 0x83BE, + 44697 - 44032: 0x83BF, + 44698 - 44032: 0x83C0, + 44699 - 44032: 0x83C1, + 44700 - 44032: 0x83C2, + 44701 - 44032: 0x83C3, + 44702 - 44032: 0x83C4, + 44703 - 44032: 0x83C5, + 44704 - 44032: 0x83C6, + 44705 - 44032: 0x83C7, + 44706 - 44032: 0x83C8, + 44707 - 44032: 0x83C9, + 44708 - 44032: 0x83CA, + 44709 - 44032: 0x83CB, + 44710 - 44032: 0x83CC, + 44711 - 44032: 0x83CD, + 44712 - 44032: 0x83CE, + 44713 - 44032: 0x83CF, + 44714 - 44032: 0x83D0, + 44715 - 44032: 0x83D1, + 44716 - 44032: 0x83D2, + 44717 - 44032: 0x83D3, + 44718 - 44032: 0x83D4, + 44719 - 44032: 0x83D5, + 44720 - 44032: 0x83D6, + 44721 - 44032: 0x83D7, + 44722 - 44032: 0x83D8, + 44723 - 44032: 0x83D9, + 44724 - 44032: 0x83DA, + 44725 - 44032: 0x83DB, + 44726 - 44032: 0x83DC, + 44727 - 44032: 0x83DD, + 44728 - 44032: 0x83DE, + 44729 - 44032: 0x83DF, + 44730 - 44032: 0x83E0, + 44731 - 44032: 0x83E1, + 44732 - 44032: 0xB2A8, + 44733 - 44032: 0xB2A9, + 44734 - 44032: 0xB2AA, + 44735 - 44032: 0x83E2, + 44736 - 44032: 0xB2AB, + 44737 - 44032: 0x83E3, + 44738 - 44032: 0x83E4, + 44739 - 44032: 0x83E5, + 44740 - 44032: 0xB2AC, + 44741 - 44032: 0x83E6, + 44742 - 44032: 0x83E7, + 44743 - 44032: 0x83E8, + 44744 - 44032: 0x83E9, + 44745 - 44032: 0x83EA, + 44746 - 44032: 0x83EB, + 44747 - 44032: 0x83EC, + 44748 - 44032: 0xB2AD, + 44749 - 44032: 0xB2AE, + 44750 - 44032: 0x83ED, + 44751 - 44032: 0xB2AF, + 44752 - 44032: 0xB2B0, + 44753 - 44032: 0xB2B1, + 44754 - 44032: 0x83EE, + 44755 - 44032: 0x83EF, + 44756 - 44032: 0x83F0, + 44757 - 44032: 0x83F1, + 44758 - 44032: 0x83F2, + 44759 - 44032: 0x83F3, + 44760 - 44032: 0xB2B2, + 44761 - 44032: 0xB2B3, + 44762 - 44032: 0x83F4, + 44763 - 44032: 0x83F5, + 44764 - 44032: 0xB2B4, + 44765 - 44032: 0x83F6, + 44766 - 44032: 0x83F7, + 44767 - 44032: 0x83F8, + 44768 - 44032: 0x83F9, + 44769 - 44032: 0x83FA, + 44770 - 44032: 0x83FB, + 44771 - 44032: 0x83FC, + 44772 - 44032: 0x83FD, + 44773 - 44032: 0x83FE, + 44774 - 44032: 0x8441, + 44775 - 44032: 0x8442, + 44776 - 44032: 0xB2B5, + 44777 - 44032: 0x8443, + 44778 - 44032: 0x8444, + 44779 - 44032: 0xB2B6, + 44780 - 44032: 0x8445, + 44781 - 44032: 0xB2B7, + 44782 - 44032: 0x8446, + 44783 - 44032: 0x8447, + 44784 - 44032: 0x8448, + 44785 - 44032: 0x8449, + 44786 - 44032: 0x844A, + 44787 - 44032: 0x844B, + 44788 - 44032: 0xB2B8, + 44789 - 44032: 0x844C, + 44790 - 44032: 0x844D, + 44791 - 44032: 0x844E, + 44792 - 44032: 0xB2B9, + 44793 - 44032: 0x844F, + 44794 - 44032: 0x8450, + 44795 - 44032: 0x8451, + 44796 - 44032: 0xB2BA, + 44797 - 44032: 0x8452, + 44798 - 44032: 0x8453, + 44799 - 44032: 0x8454, + 44800 - 44032: 0x8455, + 44801 - 44032: 0x8456, + 44802 - 44032: 0x8457, + 44803 - 44032: 0x8458, + 44804 - 44032: 0x8459, + 44805 - 44032: 0x845A, + 44806 - 44032: 0x8461, + 44807 - 44032: 0xB2BB, + 44808 - 44032: 0xB2BC, + 44809 - 44032: 0x8462, + 44810 - 44032: 0x8463, + 44811 - 44032: 0x8464, + 44812 - 44032: 0x8465, + 44813 - 44032: 0xB2BD, + 44814 - 44032: 0x8466, + 44815 - 44032: 0x8467, + 44816 - 44032: 0xB2BE, + 44817 - 44032: 0x8468, + 44818 - 44032: 0x8469, + 44819 - 44032: 0x846A, + 44820 - 44032: 0x846B, + 44821 - 44032: 0x846C, + 44822 - 44032: 0x846D, + 44823 - 44032: 0x846E, + 44824 - 44032: 0x846F, + 44825 - 44032: 0x8470, + 44826 - 44032: 0x8471, + 44827 - 44032: 0x8472, + 44828 - 44032: 0x8473, + 44829 - 44032: 0x8474, + 44830 - 44032: 0x8475, + 44831 - 44032: 0x8476, + 44832 - 44032: 0x8477, + 44833 - 44032: 0x8478, + 44834 - 44032: 0x8479, + 44835 - 44032: 0x847A, + 44836 - 44032: 0x8481, + 44837 - 44032: 0x8482, + 44838 - 44032: 0x8483, + 44839 - 44032: 0x8484, + 44840 - 44032: 0x8485, + 44841 - 44032: 0x8486, + 44842 - 44032: 0x8487, + 44843 - 44032: 0x8488, + 44844 - 44032: 0xB2BF, + 44845 - 44032: 0xB2C0, + 44846 - 44032: 0x8489, + 44847 - 44032: 0x848A, + 44848 - 44032: 0xB2C1, + 44849 - 44032: 0x848B, + 44850 - 44032: 0xB2C2, + 44851 - 44032: 0x848C, + 44852 - 44032: 0xB2C3, + 44853 - 44032: 0x848D, + 44854 - 44032: 0x848E, + 44855 - 44032: 0x848F, + 44856 - 44032: 0x8490, + 44857 - 44032: 0x8491, + 44858 - 44032: 0x8492, + 44859 - 44032: 0x8493, + 44860 - 44032: 0xB2C4, + 44861 - 44032: 0xB2C5, + 44862 - 44032: 0x8494, + 44863 - 44032: 0xB2C6, + 44864 - 44032: 0x8495, + 44865 - 44032: 0xB2C7, + 44866 - 44032: 0xB2C8, + 44867 - 44032: 0xB2C9, + 44868 - 44032: 0x8496, + 44869 - 44032: 0x8497, + 44870 - 44032: 0x8498, + 44871 - 44032: 0x8499, + 44872 - 44032: 0xB2CA, + 44873 - 44032: 0xB2CB, + 44874 - 44032: 0x849A, + 44875 - 44032: 0x849B, + 44876 - 44032: 0x849C, + 44877 - 44032: 0x849D, + 44878 - 44032: 0x849E, + 44879 - 44032: 0x849F, + 44880 - 44032: 0xB2CC, + 44881 - 44032: 0x84A0, + 44882 - 44032: 0x84A1, + 44883 - 44032: 0x84A2, + 44884 - 44032: 0x84A3, + 44885 - 44032: 0x84A4, + 44886 - 44032: 0x84A5, + 44887 - 44032: 0x84A6, + 44888 - 44032: 0x84A7, + 44889 - 44032: 0x84A8, + 44890 - 44032: 0x84A9, + 44891 - 44032: 0x84AA, + 44892 - 44032: 0xB2CD, + 44893 - 44032: 0xB2CE, + 44894 - 44032: 0x84AB, + 44895 - 44032: 0x84AC, + 44896 - 44032: 0x84AD, + 44897 - 44032: 0x84AE, + 44898 - 44032: 0x84AF, + 44899 - 44032: 0x84B0, + 44900 - 44032: 0xB2CF, + 44901 - 44032: 0xB2D0, + 44902 - 44032: 0x84B1, + 44903 - 44032: 0x84B2, + 44904 - 44032: 0x84B3, + 44905 - 44032: 0x84B4, + 44906 - 44032: 0x84B5, + 44907 - 44032: 0x84B6, + 44908 - 44032: 0x84B7, + 44909 - 44032: 0x84B8, + 44910 - 44032: 0x84B9, + 44911 - 44032: 0x84BA, + 44912 - 44032: 0x84BB, + 44913 - 44032: 0x84BC, + 44914 - 44032: 0x84BD, + 44915 - 44032: 0x84BE, + 44916 - 44032: 0x84BF, + 44917 - 44032: 0x84C0, + 44918 - 44032: 0x84C1, + 44919 - 44032: 0x84C2, + 44920 - 44032: 0x84C3, + 44921 - 44032: 0xB2D1, + 44922 - 44032: 0x84C4, + 44923 - 44032: 0x84C5, + 44924 - 44032: 0x84C6, + 44925 - 44032: 0x84C7, + 44926 - 44032: 0x84C8, + 44927 - 44032: 0x84C9, + 44928 - 44032: 0xB2D2, + 44929 - 44032: 0x84CA, + 44930 - 44032: 0x84CB, + 44931 - 44032: 0x84CC, + 44932 - 44032: 0xB2D3, + 44933 - 44032: 0x84CD, + 44934 - 44032: 0x84CE, + 44935 - 44032: 0x84CF, + 44936 - 44032: 0xB2D4, + 44937 - 44032: 0x84D0, + 44938 - 44032: 0x84D1, + 44939 - 44032: 0x84D2, + 44940 - 44032: 0x84D3, + 44941 - 44032: 0x84D4, + 44942 - 44032: 0x84D5, + 44943 - 44032: 0x84D6, + 44944 - 44032: 0xB2D5, + 44945 - 44032: 0xB2D6, + 44946 - 44032: 0x84D7, + 44947 - 44032: 0x84D8, + 44948 - 44032: 0x84D9, + 44949 - 44032: 0xB2D7, + 44950 - 44032: 0x84DA, + 44951 - 44032: 0x84DB, + 44952 - 44032: 0x84DC, + 44953 - 44032: 0x84DD, + 44954 - 44032: 0x84DE, + 44955 - 44032: 0x84DF, + 44956 - 44032: 0xB2D8, + 44957 - 44032: 0x84E0, + 44958 - 44032: 0x84E1, + 44959 - 44032: 0x84E2, + 44960 - 44032: 0x84E3, + 44961 - 44032: 0x84E4, + 44962 - 44032: 0x84E5, + 44963 - 44032: 0x84E6, + 44964 - 44032: 0x84E7, + 44965 - 44032: 0x84E8, + 44966 - 44032: 0x84E9, + 44967 - 44032: 0x84EA, + 44968 - 44032: 0x84EB, + 44969 - 44032: 0x84EC, + 44970 - 44032: 0x84ED, + 44971 - 44032: 0x84EE, + 44972 - 44032: 0x84EF, + 44973 - 44032: 0x84F0, + 44974 - 44032: 0x84F1, + 44975 - 44032: 0x84F2, + 44976 - 44032: 0x84F3, + 44977 - 44032: 0x84F4, + 44978 - 44032: 0x84F5, + 44979 - 44032: 0x84F6, + 44980 - 44032: 0x84F7, + 44981 - 44032: 0x84F8, + 44982 - 44032: 0x84F9, + 44983 - 44032: 0x84FA, + 44984 - 44032: 0xB2D9, + 44985 - 44032: 0xB2DA, + 44986 - 44032: 0x84FB, + 44987 - 44032: 0x84FC, + 44988 - 44032: 0xB2DB, + 44989 - 44032: 0x84FD, + 44990 - 44032: 0x84FE, + 44991 - 44032: 0x8541, + 44992 - 44032: 0xB2DC, + 44993 - 44032: 0x8542, + 44994 - 44032: 0x8543, + 44995 - 44032: 0x8544, + 44996 - 44032: 0x8545, + 44997 - 44032: 0x8546, + 44998 - 44032: 0x8547, + 44999 - 44032: 0xB2DD, + 45000 - 44032: 0xB2DE, + 45001 - 44032: 0xB2DF, + 45002 - 44032: 0x8548, + 45003 - 44032: 0xB2E0, + 45004 - 44032: 0x8549, + 45005 - 44032: 0xB2E1, + 45006 - 44032: 0xB2E2, + 45007 - 44032: 0x854A, + 45008 - 44032: 0x854B, + 45009 - 44032: 0x854C, + 45010 - 44032: 0x854D, + 45011 - 44032: 0x854E, + 45012 - 44032: 0xB2E3, + 45013 - 44032: 0x854F, + 45014 - 44032: 0x8550, + 45015 - 44032: 0x8551, + 45016 - 44032: 0x8552, + 45017 - 44032: 0x8553, + 45018 - 44032: 0x8554, + 45019 - 44032: 0x8555, + 45020 - 44032: 0xB2E4, + 45021 - 44032: 0x8556, + 45022 - 44032: 0x8557, + 45023 - 44032: 0x8558, + 45024 - 44032: 0x8559, + 45025 - 44032: 0x855A, + 45026 - 44032: 0x8561, + 45027 - 44032: 0x8562, + 45028 - 44032: 0x8563, + 45029 - 44032: 0x8564, + 45030 - 44032: 0x8565, + 45031 - 44032: 0x8566, + 45032 - 44032: 0xB2E5, + 45033 - 44032: 0xB2E6, + 45034 - 44032: 0x8567, + 45035 - 44032: 0x8568, + 45036 - 44032: 0x8569, + 45037 - 44032: 0x856A, + 45038 - 44032: 0x856B, + 45039 - 44032: 0x856C, + 45040 - 44032: 0xB2E7, + 45041 - 44032: 0xB2E8, + 45042 - 44032: 0x856D, + 45043 - 44032: 0x856E, + 45044 - 44032: 0xB2E9, + 45045 - 44032: 0x856F, + 45046 - 44032: 0x8570, + 45047 - 44032: 0x8571, + 45048 - 44032: 0xB2EA, + 45049 - 44032: 0x8572, + 45050 - 44032: 0x8573, + 45051 - 44032: 0x8574, + 45052 - 44032: 0x8575, + 45053 - 44032: 0x8576, + 45054 - 44032: 0x8577, + 45055 - 44032: 0x8578, + 45056 - 44032: 0xB2EB, + 45057 - 44032: 0xB2EC, + 45058 - 44032: 0x8579, + 45059 - 44032: 0x857A, + 45060 - 44032: 0xB2ED, + 45061 - 44032: 0x8581, + 45062 - 44032: 0x8582, + 45063 - 44032: 0x8583, + 45064 - 44032: 0x8584, + 45065 - 44032: 0x8585, + 45066 - 44032: 0x8586, + 45067 - 44032: 0x8587, + 45068 - 44032: 0xB2EE, + 45069 - 44032: 0x8588, + 45070 - 44032: 0x8589, + 45071 - 44032: 0x858A, + 45072 - 44032: 0xB2EF, + 45073 - 44032: 0x858B, + 45074 - 44032: 0x858C, + 45075 - 44032: 0x858D, + 45076 - 44032: 0xB2F0, + 45077 - 44032: 0x858E, + 45078 - 44032: 0x858F, + 45079 - 44032: 0x8590, + 45080 - 44032: 0x8591, + 45081 - 44032: 0x8592, + 45082 - 44032: 0x8593, + 45083 - 44032: 0x8594, + 45084 - 44032: 0xB2F1, + 45085 - 44032: 0xB2F2, + 45086 - 44032: 0x8595, + 45087 - 44032: 0x8596, + 45088 - 44032: 0x8597, + 45089 - 44032: 0x8598, + 45090 - 44032: 0x8599, + 45091 - 44032: 0x859A, + 45092 - 44032: 0x859B, + 45093 - 44032: 0x859C, + 45094 - 44032: 0x859D, + 45095 - 44032: 0x859E, + 45096 - 44032: 0xB2F3, + 45097 - 44032: 0x859F, + 45098 - 44032: 0x85A0, + 45099 - 44032: 0x85A1, + 45100 - 44032: 0x85A2, + 45101 - 44032: 0x85A3, + 45102 - 44032: 0x85A4, + 45103 - 44032: 0x85A5, + 45104 - 44032: 0x85A6, + 45105 - 44032: 0x85A7, + 45106 - 44032: 0x85A8, + 45107 - 44032: 0x85A9, + 45108 - 44032: 0x85AA, + 45109 - 44032: 0x85AB, + 45110 - 44032: 0x85AC, + 45111 - 44032: 0x85AD, + 45112 - 44032: 0x85AE, + 45113 - 44032: 0x85AF, + 45114 - 44032: 0x85B0, + 45115 - 44032: 0x85B1, + 45116 - 44032: 0x85B2, + 45117 - 44032: 0x85B3, + 45118 - 44032: 0x85B4, + 45119 - 44032: 0x85B5, + 45120 - 44032: 0x85B6, + 45121 - 44032: 0x85B7, + 45122 - 44032: 0x85B8, + 45123 - 44032: 0x85B9, + 45124 - 44032: 0xB2F4, + 45125 - 44032: 0xB2F5, + 45126 - 44032: 0x85BA, + 45127 - 44032: 0x85BB, + 45128 - 44032: 0xB2F6, + 45129 - 44032: 0x85BC, + 45130 - 44032: 0xB2F7, + 45131 - 44032: 0x85BD, + 45132 - 44032: 0xB2F8, + 45133 - 44032: 0x85BE, + 45134 - 44032: 0xB2F9, + 45135 - 44032: 0x85BF, + 45136 - 44032: 0x85C0, + 45137 - 44032: 0x85C1, + 45138 - 44032: 0x85C2, + 45139 - 44032: 0xB2FA, + 45140 - 44032: 0xB2FB, + 45141 - 44032: 0xB2FC, + 45142 - 44032: 0x85C3, + 45143 - 44032: 0xB2FD, + 45144 - 44032: 0x85C4, + 45145 - 44032: 0xB2FE, + 45146 - 44032: 0x85C5, + 45147 - 44032: 0x85C6, + 45148 - 44032: 0x85C7, + 45149 - 44032: 0xB3A1, + 45150 - 44032: 0x85C8, + 45151 - 44032: 0x85C9, + 45152 - 44032: 0x85CA, + 45153 - 44032: 0x85CB, + 45154 - 44032: 0x85CC, + 45155 - 44032: 0x85CD, + 45156 - 44032: 0x85CE, + 45157 - 44032: 0x85CF, + 45158 - 44032: 0x85D0, + 45159 - 44032: 0x85D1, + 45160 - 44032: 0x85D2, + 45161 - 44032: 0x85D3, + 45162 - 44032: 0x85D4, + 45163 - 44032: 0x85D5, + 45164 - 44032: 0x85D6, + 45165 - 44032: 0x85D7, + 45166 - 44032: 0x85D8, + 45167 - 44032: 0x85D9, + 45168 - 44032: 0x85DA, + 45169 - 44032: 0x85DB, + 45170 - 44032: 0x85DC, + 45171 - 44032: 0x85DD, + 45172 - 44032: 0x85DE, + 45173 - 44032: 0x85DF, + 45174 - 44032: 0x85E0, + 45175 - 44032: 0x85E1, + 45176 - 44032: 0x85E2, + 45177 - 44032: 0x85E3, + 45178 - 44032: 0x85E4, + 45179 - 44032: 0x85E5, + 45180 - 44032: 0xB3A2, + 45181 - 44032: 0xB3A3, + 45182 - 44032: 0x85E6, + 45183 - 44032: 0x85E7, + 45184 - 44032: 0xB3A4, + 45185 - 44032: 0x85E8, + 45186 - 44032: 0x85E9, + 45187 - 44032: 0x85EA, + 45188 - 44032: 0xB3A5, + 45189 - 44032: 0x85EB, + 45190 - 44032: 0x85EC, + 45191 - 44032: 0x85ED, + 45192 - 44032: 0x85EE, + 45193 - 44032: 0x85EF, + 45194 - 44032: 0x85F0, + 45195 - 44032: 0x85F1, + 45196 - 44032: 0xB3A6, + 45197 - 44032: 0xB3A7, + 45198 - 44032: 0x85F2, + 45199 - 44032: 0xB3A8, + 45200 - 44032: 0x85F3, + 45201 - 44032: 0xB3A9, + 45202 - 44032: 0x85F4, + 45203 - 44032: 0x85F5, + 45204 - 44032: 0x85F6, + 45205 - 44032: 0x85F7, + 45206 - 44032: 0x85F8, + 45207 - 44032: 0x85F9, + 45208 - 44032: 0xB3AA, + 45209 - 44032: 0xB3AB, + 45210 - 44032: 0xB3AC, + 45211 - 44032: 0x85FA, + 45212 - 44032: 0xB3AD, + 45213 - 44032: 0x85FB, + 45214 - 44032: 0x85FC, + 45215 - 44032: 0xB3AE, + 45216 - 44032: 0xB3AF, + 45217 - 44032: 0xB3B0, + 45218 - 44032: 0xB3B1, + 45219 - 44032: 0x85FD, + 45220 - 44032: 0x85FE, + 45221 - 44032: 0x8641, + 45222 - 44032: 0x8642, + 45223 - 44032: 0x8643, + 45224 - 44032: 0xB3B2, + 45225 - 44032: 0xB3B3, + 45226 - 44032: 0x8644, + 45227 - 44032: 0xB3B4, + 45228 - 44032: 0xB3B5, + 45229 - 44032: 0xB3B6, + 45230 - 44032: 0xB3B7, + 45231 - 44032: 0xB3B8, + 45232 - 44032: 0x8645, + 45233 - 44032: 0xB3B9, + 45234 - 44032: 0x8646, + 45235 - 44032: 0xB3BA, + 45236 - 44032: 0xB3BB, + 45237 - 44032: 0xB3BC, + 45238 - 44032: 0x8647, + 45239 - 44032: 0x8648, + 45240 - 44032: 0xB3BD, + 45241 - 44032: 0x8649, + 45242 - 44032: 0x864A, + 45243 - 44032: 0x864B, + 45244 - 44032: 0xB3BE, + 45245 - 44032: 0x864C, + 45246 - 44032: 0x864D, + 45247 - 44032: 0x864E, + 45248 - 44032: 0x864F, + 45249 - 44032: 0x8650, + 45250 - 44032: 0x8651, + 45251 - 44032: 0x8652, + 45252 - 44032: 0xB3BF, + 45253 - 44032: 0xB3C0, + 45254 - 44032: 0x8653, + 45255 - 44032: 0xB3C1, + 45256 - 44032: 0xB3C2, + 45257 - 44032: 0xB3C3, + 45258 - 44032: 0x8654, + 45259 - 44032: 0x8655, + 45260 - 44032: 0x8656, + 45261 - 44032: 0x8657, + 45262 - 44032: 0x8658, + 45263 - 44032: 0x8659, + 45264 - 44032: 0xB3C4, + 45265 - 44032: 0xB3C5, + 45266 - 44032: 0x865A, + 45267 - 44032: 0x8661, + 45268 - 44032: 0xB3C6, + 45269 - 44032: 0x8662, + 45270 - 44032: 0x8663, + 45271 - 44032: 0x8664, + 45272 - 44032: 0xB3C7, + 45273 - 44032: 0x8665, + 45274 - 44032: 0x8666, + 45275 - 44032: 0x8667, + 45276 - 44032: 0x8668, + 45277 - 44032: 0x8669, + 45278 - 44032: 0x866A, + 45279 - 44032: 0x866B, + 45280 - 44032: 0xB3C8, + 45281 - 44032: 0x866C, + 45282 - 44032: 0x866D, + 45283 - 44032: 0x866E, + 45284 - 44032: 0x866F, + 45285 - 44032: 0xB3C9, + 45286 - 44032: 0x8670, + 45287 - 44032: 0x8671, + 45288 - 44032: 0x8672, + 45289 - 44032: 0x8673, + 45290 - 44032: 0x8674, + 45291 - 44032: 0x8675, + 45292 - 44032: 0x8676, + 45293 - 44032: 0x8677, + 45294 - 44032: 0x8678, + 45295 - 44032: 0x8679, + 45296 - 44032: 0x867A, + 45297 - 44032: 0x8681, + 45298 - 44032: 0x8682, + 45299 - 44032: 0x8683, + 45300 - 44032: 0x8684, + 45301 - 44032: 0x8685, + 45302 - 44032: 0x8686, + 45303 - 44032: 0x8687, + 45304 - 44032: 0x8688, + 45305 - 44032: 0x8689, + 45306 - 44032: 0x868A, + 45307 - 44032: 0x868B, + 45308 - 44032: 0x868C, + 45309 - 44032: 0x868D, + 45310 - 44032: 0x868E, + 45311 - 44032: 0x868F, + 45312 - 44032: 0x8690, + 45313 - 44032: 0x8691, + 45314 - 44032: 0x8692, + 45315 - 44032: 0x8693, + 45316 - 44032: 0x8694, + 45317 - 44032: 0x8695, + 45318 - 44032: 0x8696, + 45319 - 44032: 0x8697, + 45320 - 44032: 0xB3CA, + 45321 - 44032: 0xB3CB, + 45322 - 44032: 0x8698, + 45323 - 44032: 0xB3CC, + 45324 - 44032: 0xB3CD, + 45325 - 44032: 0x8699, + 45326 - 44032: 0x869A, + 45327 - 44032: 0x869B, + 45328 - 44032: 0xB3CE, + 45329 - 44032: 0x869C, + 45330 - 44032: 0xB3CF, + 45331 - 44032: 0xB3D0, + 45332 - 44032: 0x869D, + 45333 - 44032: 0x869E, + 45334 - 44032: 0x869F, + 45335 - 44032: 0x86A0, + 45336 - 44032: 0xB3D1, + 45337 - 44032: 0xB3D2, + 45338 - 44032: 0x86A1, + 45339 - 44032: 0xB3D3, + 45340 - 44032: 0xB3D4, + 45341 - 44032: 0xB3D5, + 45342 - 44032: 0x86A2, + 45343 - 44032: 0x86A3, + 45344 - 44032: 0x86A4, + 45345 - 44032: 0x86A5, + 45346 - 44032: 0x86A6, + 45347 - 44032: 0xB3D6, + 45348 - 44032: 0xB3D7, + 45349 - 44032: 0xB3D8, + 45350 - 44032: 0x86A7, + 45351 - 44032: 0x86A8, + 45352 - 44032: 0xB3D9, + 45353 - 44032: 0x86A9, + 45354 - 44032: 0x86AA, + 45355 - 44032: 0x86AB, + 45356 - 44032: 0xB3DA, + 45357 - 44032: 0x86AC, + 45358 - 44032: 0x86AD, + 45359 - 44032: 0x86AE, + 45360 - 44032: 0x86AF, + 45361 - 44032: 0x86B0, + 45362 - 44032: 0x86B1, + 45363 - 44032: 0x86B2, + 45364 - 44032: 0xB3DB, + 45365 - 44032: 0xB3DC, + 45366 - 44032: 0x86B3, + 45367 - 44032: 0xB3DD, + 45368 - 44032: 0xB3DE, + 45369 - 44032: 0xB3DF, + 45370 - 44032: 0x86B4, + 45371 - 44032: 0x86B5, + 45372 - 44032: 0x86B6, + 45373 - 44032: 0x86B7, + 45374 - 44032: 0x86B8, + 45375 - 44032: 0x86B9, + 45376 - 44032: 0xB3E0, + 45377 - 44032: 0xB3E1, + 45378 - 44032: 0x86BA, + 45379 - 44032: 0x86BB, + 45380 - 44032: 0xB3E2, + 45381 - 44032: 0x86BC, + 45382 - 44032: 0x86BD, + 45383 - 44032: 0x86BE, + 45384 - 44032: 0xB3E3, + 45385 - 44032: 0x86BF, + 45386 - 44032: 0x86C0, + 45387 - 44032: 0x86C1, + 45388 - 44032: 0x86C2, + 45389 - 44032: 0x86C3, + 45390 - 44032: 0x86C4, + 45391 - 44032: 0x86C5, + 45392 - 44032: 0xB3E4, + 45393 - 44032: 0xB3E5, + 45394 - 44032: 0x86C6, + 45395 - 44032: 0x86C7, + 45396 - 44032: 0xB3E6, + 45397 - 44032: 0xB3E7, + 45398 - 44032: 0x86C8, + 45399 - 44032: 0x86C9, + 45400 - 44032: 0xB3E8, + 45401 - 44032: 0x86CA, + 45402 - 44032: 0x86CB, + 45403 - 44032: 0x86CC, + 45404 - 44032: 0xB3E9, + 45405 - 44032: 0x86CD, + 45406 - 44032: 0x86CE, + 45407 - 44032: 0x86CF, + 45408 - 44032: 0xB3EA, + 45409 - 44032: 0x86D0, + 45410 - 44032: 0x86D1, + 45411 - 44032: 0x86D2, + 45412 - 44032: 0x86D3, + 45413 - 44032: 0x86D4, + 45414 - 44032: 0x86D5, + 45415 - 44032: 0x86D6, + 45416 - 44032: 0x86D7, + 45417 - 44032: 0x86D8, + 45418 - 44032: 0x86D9, + 45419 - 44032: 0x86DA, + 45420 - 44032: 0x86DB, + 45421 - 44032: 0x86DC, + 45422 - 44032: 0x86DD, + 45423 - 44032: 0x86DE, + 45424 - 44032: 0x86DF, + 45425 - 44032: 0x86E0, + 45426 - 44032: 0x86E1, + 45427 - 44032: 0x86E2, + 45428 - 44032: 0x86E3, + 45429 - 44032: 0x86E4, + 45430 - 44032: 0x86E5, + 45431 - 44032: 0x86E6, + 45432 - 44032: 0xB3EB, + 45433 - 44032: 0xB3EC, + 45434 - 44032: 0x86E7, + 45435 - 44032: 0x86E8, + 45436 - 44032: 0xB3ED, + 45437 - 44032: 0x86E9, + 45438 - 44032: 0x86EA, + 45439 - 44032: 0x86EB, + 45440 - 44032: 0xB3EE, + 45441 - 44032: 0x86EC, + 45442 - 44032: 0xB3EF, + 45443 - 44032: 0x86ED, + 45444 - 44032: 0x86EE, + 45445 - 44032: 0x86EF, + 45446 - 44032: 0x86F0, + 45447 - 44032: 0x86F1, + 45448 - 44032: 0xB3F0, + 45449 - 44032: 0xB3F1, + 45450 - 44032: 0x86F2, + 45451 - 44032: 0xB3F2, + 45452 - 44032: 0x86F3, + 45453 - 44032: 0xB3F3, + 45454 - 44032: 0x86F4, + 45455 - 44032: 0x86F5, + 45456 - 44032: 0x86F6, + 45457 - 44032: 0x86F7, + 45458 - 44032: 0xB3F4, + 45459 - 44032: 0xB3F5, + 45460 - 44032: 0xB3F6, + 45461 - 44032: 0x86F8, + 45462 - 44032: 0x86F9, + 45463 - 44032: 0x86FA, + 45464 - 44032: 0xB3F7, + 45465 - 44032: 0x86FB, + 45466 - 44032: 0x86FC, + 45467 - 44032: 0x86FD, + 45468 - 44032: 0xB3F8, + 45469 - 44032: 0x86FE, + 45470 - 44032: 0x8741, + 45471 - 44032: 0x8742, + 45472 - 44032: 0x8743, + 45473 - 44032: 0x8744, + 45474 - 44032: 0x8745, + 45475 - 44032: 0x8746, + 45476 - 44032: 0x8747, + 45477 - 44032: 0x8748, + 45478 - 44032: 0x8749, + 45479 - 44032: 0x874A, + 45480 - 44032: 0xB3F9, + 45481 - 44032: 0x874B, + 45482 - 44032: 0x874C, + 45483 - 44032: 0x874D, + 45484 - 44032: 0x874E, + 45485 - 44032: 0x874F, + 45486 - 44032: 0x8750, + 45487 - 44032: 0x8751, + 45488 - 44032: 0x8752, + 45489 - 44032: 0x8753, + 45490 - 44032: 0x8754, + 45491 - 44032: 0x8755, + 45492 - 44032: 0x8756, + 45493 - 44032: 0x8757, + 45494 - 44032: 0x8758, + 45495 - 44032: 0x8759, + 45496 - 44032: 0x875A, + 45497 - 44032: 0x8761, + 45498 - 44032: 0x8762, + 45499 - 44032: 0x8763, + 45500 - 44032: 0x8764, + 45501 - 44032: 0x8765, + 45502 - 44032: 0x8766, + 45503 - 44032: 0x8767, + 45504 - 44032: 0x8768, + 45505 - 44032: 0x8769, + 45506 - 44032: 0x876A, + 45507 - 44032: 0x876B, + 45508 - 44032: 0x876C, + 45509 - 44032: 0x876D, + 45510 - 44032: 0x876E, + 45511 - 44032: 0x876F, + 45512 - 44032: 0x8770, + 45513 - 44032: 0x8771, + 45514 - 44032: 0x8772, + 45515 - 44032: 0x8773, + 45516 - 44032: 0xB3FA, + 45517 - 44032: 0x8774, + 45518 - 44032: 0x8775, + 45519 - 44032: 0x8776, + 45520 - 44032: 0xB3FB, + 45521 - 44032: 0x8777, + 45522 - 44032: 0x8778, + 45523 - 44032: 0x8779, + 45524 - 44032: 0xB3FC, + 45525 - 44032: 0x877A, + 45526 - 44032: 0x8781, + 45527 - 44032: 0x8782, + 45528 - 44032: 0x8783, + 45529 - 44032: 0x8784, + 45530 - 44032: 0x8785, + 45531 - 44032: 0x8786, + 45532 - 44032: 0xB3FD, + 45533 - 44032: 0xB3FE, + 45534 - 44032: 0x8787, + 45535 - 44032: 0xB4A1, + 45536 - 44032: 0x8788, + 45537 - 44032: 0x8789, + 45538 - 44032: 0x878A, + 45539 - 44032: 0x878B, + 45540 - 44032: 0x878C, + 45541 - 44032: 0x878D, + 45542 - 44032: 0x878E, + 45543 - 44032: 0x878F, + 45544 - 44032: 0xB4A2, + 45545 - 44032: 0xB4A3, + 45546 - 44032: 0x8790, + 45547 - 44032: 0x8791, + 45548 - 44032: 0xB4A4, + 45549 - 44032: 0x8792, + 45550 - 44032: 0x8793, + 45551 - 44032: 0x8794, + 45552 - 44032: 0xB4A5, + 45553 - 44032: 0x8795, + 45554 - 44032: 0x8796, + 45555 - 44032: 0x8797, + 45556 - 44032: 0x8798, + 45557 - 44032: 0x8799, + 45558 - 44032: 0x879A, + 45559 - 44032: 0x879B, + 45560 - 44032: 0x879C, + 45561 - 44032: 0xB4A6, + 45562 - 44032: 0x879D, + 45563 - 44032: 0xB4A7, + 45564 - 44032: 0x879E, + 45565 - 44032: 0xB4A8, + 45566 - 44032: 0x879F, + 45567 - 44032: 0x87A0, + 45568 - 44032: 0x87A1, + 45569 - 44032: 0x87A2, + 45570 - 44032: 0x87A3, + 45571 - 44032: 0x87A4, + 45572 - 44032: 0xB4A9, + 45573 - 44032: 0xB4AA, + 45574 - 44032: 0x87A5, + 45575 - 44032: 0x87A6, + 45576 - 44032: 0xB4AB, + 45577 - 44032: 0x87A7, + 45578 - 44032: 0x87A8, + 45579 - 44032: 0xB4AC, + 45580 - 44032: 0xB4AD, + 45581 - 44032: 0x87A9, + 45582 - 44032: 0x87AA, + 45583 - 44032: 0x87AB, + 45584 - 44032: 0x87AC, + 45585 - 44032: 0x87AD, + 45586 - 44032: 0x87AE, + 45587 - 44032: 0x87AF, + 45588 - 44032: 0xB4AE, + 45589 - 44032: 0xB4AF, + 45590 - 44032: 0x87B0, + 45591 - 44032: 0xB4B0, + 45592 - 44032: 0x87B1, + 45593 - 44032: 0xB4B1, + 45594 - 44032: 0x87B2, + 45595 - 44032: 0x87B3, + 45596 - 44032: 0x87B4, + 45597 - 44032: 0x87B5, + 45598 - 44032: 0x87B6, + 45599 - 44032: 0x87B7, + 45600 - 44032: 0xB4B2, + 45601 - 44032: 0x87B8, + 45602 - 44032: 0x87B9, + 45603 - 44032: 0x87BA, + 45604 - 44032: 0x87BB, + 45605 - 44032: 0x87BC, + 45606 - 44032: 0x87BD, + 45607 - 44032: 0x87BE, + 45608 - 44032: 0x87BF, + 45609 - 44032: 0x87C0, + 45610 - 44032: 0x87C1, + 45611 - 44032: 0x87C2, + 45612 - 44032: 0x87C3, + 45613 - 44032: 0x87C4, + 45614 - 44032: 0x87C5, + 45615 - 44032: 0x87C6, + 45616 - 44032: 0x87C7, + 45617 - 44032: 0x87C8, + 45618 - 44032: 0x87C9, + 45619 - 44032: 0x87CA, + 45620 - 44032: 0xB4B3, + 45621 - 44032: 0x87CB, + 45622 - 44032: 0x87CC, + 45623 - 44032: 0x87CD, + 45624 - 44032: 0x87CE, + 45625 - 44032: 0x87CF, + 45626 - 44032: 0x87D0, + 45627 - 44032: 0x87D1, + 45628 - 44032: 0xB4B4, + 45629 - 44032: 0x87D2, + 45630 - 44032: 0x87D3, + 45631 - 44032: 0x87D4, + 45632 - 44032: 0x87D5, + 45633 - 44032: 0x87D6, + 45634 - 44032: 0x87D7, + 45635 - 44032: 0x87D8, + 45636 - 44032: 0x87D9, + 45637 - 44032: 0x87DA, + 45638 - 44032: 0x87DB, + 45639 - 44032: 0x87DC, + 45640 - 44032: 0x87DD, + 45641 - 44032: 0x87DE, + 45642 - 44032: 0x87DF, + 45643 - 44032: 0x87E0, + 45644 - 44032: 0x87E1, + 45645 - 44032: 0x87E2, + 45646 - 44032: 0x87E3, + 45647 - 44032: 0x87E4, + 45648 - 44032: 0x87E5, + 45649 - 44032: 0x87E6, + 45650 - 44032: 0x87E7, + 45651 - 44032: 0x87E8, + 45652 - 44032: 0x87E9, + 45653 - 44032: 0x87EA, + 45654 - 44032: 0x87EB, + 45655 - 44032: 0x87EC, + 45656 - 44032: 0xB4B5, + 45657 - 44032: 0x87ED, + 45658 - 44032: 0x87EE, + 45659 - 44032: 0x87EF, + 45660 - 44032: 0xB4B6, + 45661 - 44032: 0x87F0, + 45662 - 44032: 0x87F1, + 45663 - 44032: 0x87F2, + 45664 - 44032: 0xB4B7, + 45665 - 44032: 0x87F3, + 45666 - 44032: 0x87F4, + 45667 - 44032: 0x87F5, + 45668 - 44032: 0x87F6, + 45669 - 44032: 0x87F7, + 45670 - 44032: 0x87F8, + 45671 - 44032: 0x87F9, + 45672 - 44032: 0xB4B8, + 45673 - 44032: 0xB4B9, + 45674 - 44032: 0x87FA, + 45675 - 44032: 0x87FB, + 45676 - 44032: 0x87FC, + 45677 - 44032: 0x87FD, + 45678 - 44032: 0x87FE, + 45679 - 44032: 0x8841, + 45680 - 44032: 0x8842, + 45681 - 44032: 0x8843, + 45682 - 44032: 0x8844, + 45683 - 44032: 0x8845, + 45684 - 44032: 0xB4BA, + 45685 - 44032: 0xB4BB, + 45686 - 44032: 0x8846, + 45687 - 44032: 0x8847, + 45688 - 44032: 0x8848, + 45689 - 44032: 0x8849, + 45690 - 44032: 0x884A, + 45691 - 44032: 0x884B, + 45692 - 44032: 0xB4BC, + 45693 - 44032: 0x884C, + 45694 - 44032: 0x884D, + 45695 - 44032: 0x884E, + 45696 - 44032: 0x884F, + 45697 - 44032: 0x8850, + 45698 - 44032: 0x8851, + 45699 - 44032: 0x8852, + 45700 - 44032: 0xB4BD, + 45701 - 44032: 0xB4BE, + 45702 - 44032: 0x8853, + 45703 - 44032: 0x8854, + 45704 - 44032: 0x8855, + 45705 - 44032: 0xB4BF, + 45706 - 44032: 0x8856, + 45707 - 44032: 0x8857, + 45708 - 44032: 0x8858, + 45709 - 44032: 0x8859, + 45710 - 44032: 0x885A, + 45711 - 44032: 0x8861, + 45712 - 44032: 0xB4C0, + 45713 - 44032: 0xB4C1, + 45714 - 44032: 0x8862, + 45715 - 44032: 0x8863, + 45716 - 44032: 0xB4C2, + 45717 - 44032: 0x8864, + 45718 - 44032: 0x8865, + 45719 - 44032: 0x8866, + 45720 - 44032: 0xB4C3, + 45721 - 44032: 0xB4C4, + 45722 - 44032: 0xB4C5, + 45723 - 44032: 0x8867, + 45724 - 44032: 0x8868, + 45725 - 44032: 0x8869, + 45726 - 44032: 0x886A, + 45727 - 44032: 0x886B, + 45728 - 44032: 0xB4C6, + 45729 - 44032: 0xB4C7, + 45730 - 44032: 0x886C, + 45731 - 44032: 0xB4C8, + 45732 - 44032: 0x886D, + 45733 - 44032: 0xB4C9, + 45734 - 44032: 0xB4CA, + 45735 - 44032: 0x886E, + 45736 - 44032: 0x886F, + 45737 - 44032: 0x8870, + 45738 - 44032: 0xB4CB, + 45739 - 44032: 0x8871, + 45740 - 44032: 0xB4CC, + 45741 - 44032: 0x8872, + 45742 - 44032: 0x8873, + 45743 - 44032: 0x8874, + 45744 - 44032: 0xB4CD, + 45745 - 44032: 0x8875, + 45746 - 44032: 0x8876, + 45747 - 44032: 0x8877, + 45748 - 44032: 0xB4CE, + 45749 - 44032: 0x8878, + 45750 - 44032: 0x8879, + 45751 - 44032: 0x887A, + 45752 - 44032: 0x8881, + 45753 - 44032: 0x8882, + 45754 - 44032: 0x8883, + 45755 - 44032: 0x8884, + 45756 - 44032: 0x8885, + 45757 - 44032: 0x8886, + 45758 - 44032: 0x8887, + 45759 - 44032: 0x8888, + 45760 - 44032: 0x8889, + 45761 - 44032: 0x888A, + 45762 - 44032: 0x888B, + 45763 - 44032: 0x888C, + 45764 - 44032: 0x888D, + 45765 - 44032: 0x888E, + 45766 - 44032: 0x888F, + 45767 - 44032: 0x8890, + 45768 - 44032: 0xB4CF, + 45769 - 44032: 0xB4D0, + 45770 - 44032: 0x8891, + 45771 - 44032: 0x8892, + 45772 - 44032: 0xB4D1, + 45773 - 44032: 0x8893, + 45774 - 44032: 0x8894, + 45775 - 44032: 0x8895, + 45776 - 44032: 0xB4D2, + 45777 - 44032: 0x8896, + 45778 - 44032: 0xB4D3, + 45779 - 44032: 0x8897, + 45780 - 44032: 0x8898, + 45781 - 44032: 0x8899, + 45782 - 44032: 0x889A, + 45783 - 44032: 0x889B, + 45784 - 44032: 0xB4D4, + 45785 - 44032: 0xB4D5, + 45786 - 44032: 0x889C, + 45787 - 44032: 0xB4D6, + 45788 - 44032: 0x889D, + 45789 - 44032: 0xB4D7, + 45790 - 44032: 0x889E, + 45791 - 44032: 0x889F, + 45792 - 44032: 0x88A0, + 45793 - 44032: 0x88A1, + 45794 - 44032: 0xB4D8, + 45795 - 44032: 0x88A2, + 45796 - 44032: 0xB4D9, + 45797 - 44032: 0xB4DA, + 45798 - 44032: 0xB4DB, + 45799 - 44032: 0x88A3, + 45800 - 44032: 0xB4DC, + 45801 - 44032: 0x88A4, + 45802 - 44032: 0x88A5, + 45803 - 44032: 0xB4DD, + 45804 - 44032: 0xB4DE, + 45805 - 44032: 0xB4DF, + 45806 - 44032: 0xB4E0, + 45807 - 44032: 0xB4E1, + 45808 - 44032: 0x88A6, + 45809 - 44032: 0x88A7, + 45810 - 44032: 0x88A8, + 45811 - 44032: 0xB4E2, + 45812 - 44032: 0xB4E3, + 45813 - 44032: 0xB4E4, + 45814 - 44032: 0x88A9, + 45815 - 44032: 0xB4E5, + 45816 - 44032: 0xB4E6, + 45817 - 44032: 0xB4E7, + 45818 - 44032: 0xB4E8, + 45819 - 44032: 0xB4E9, + 45820 - 44032: 0x88AA, + 45821 - 44032: 0x88AB, + 45822 - 44032: 0x88AC, + 45823 - 44032: 0xB4EA, + 45824 - 44032: 0xB4EB, + 45825 - 44032: 0xB4EC, + 45826 - 44032: 0x88AD, + 45827 - 44032: 0x88AE, + 45828 - 44032: 0xB4ED, + 45829 - 44032: 0x88AF, + 45830 - 44032: 0x88B0, + 45831 - 44032: 0x88B1, + 45832 - 44032: 0xB4EE, + 45833 - 44032: 0x88B2, + 45834 - 44032: 0x88B3, + 45835 - 44032: 0x88B4, + 45836 - 44032: 0x88B5, + 45837 - 44032: 0x88B6, + 45838 - 44032: 0x88B7, + 45839 - 44032: 0x88B8, + 45840 - 44032: 0xB4EF, + 45841 - 44032: 0xB4F0, + 45842 - 44032: 0x88B9, + 45843 - 44032: 0xB4F1, + 45844 - 44032: 0xB4F2, + 45845 - 44032: 0xB4F3, + 45846 - 44032: 0x88BA, + 45847 - 44032: 0x88BB, + 45848 - 44032: 0x88BC, + 45849 - 44032: 0x88BD, + 45850 - 44032: 0x88BE, + 45851 - 44032: 0x88BF, + 45852 - 44032: 0xB4F4, + 45853 - 44032: 0x88C0, + 45854 - 44032: 0x88C1, + 45855 - 44032: 0x88C2, + 45856 - 44032: 0x88C3, + 45857 - 44032: 0x88C4, + 45858 - 44032: 0x88C5, + 45859 - 44032: 0x88C6, + 45860 - 44032: 0x88C7, + 45861 - 44032: 0x88C8, + 45862 - 44032: 0x88C9, + 45863 - 44032: 0x88CA, + 45864 - 44032: 0x88CB, + 45865 - 44032: 0x88CC, + 45866 - 44032: 0x88CD, + 45867 - 44032: 0x88CE, + 45868 - 44032: 0x88CF, + 45869 - 44032: 0x88D0, + 45870 - 44032: 0x88D1, + 45871 - 44032: 0x88D2, + 45872 - 44032: 0x88D3, + 45873 - 44032: 0x88D4, + 45874 - 44032: 0x88D5, + 45875 - 44032: 0x88D6, + 45876 - 44032: 0x88D7, + 45877 - 44032: 0x88D8, + 45878 - 44032: 0x88D9, + 45879 - 44032: 0x88DA, + 45880 - 44032: 0x88DB, + 45881 - 44032: 0x88DC, + 45882 - 44032: 0x88DD, + 45883 - 44032: 0x88DE, + 45884 - 44032: 0x88DF, + 45885 - 44032: 0x88E0, + 45886 - 44032: 0x88E1, + 45887 - 44032: 0x88E2, + 45888 - 44032: 0x88E3, + 45889 - 44032: 0x88E4, + 45890 - 44032: 0x88E5, + 45891 - 44032: 0x88E6, + 45892 - 44032: 0x88E7, + 45893 - 44032: 0x88E8, + 45894 - 44032: 0x88E9, + 45895 - 44032: 0x88EA, + 45896 - 44032: 0x88EB, + 45897 - 44032: 0x88EC, + 45898 - 44032: 0x88ED, + 45899 - 44032: 0x88EE, + 45900 - 44032: 0x88EF, + 45901 - 44032: 0x88F0, + 45902 - 44032: 0x88F1, + 45903 - 44032: 0x88F2, + 45904 - 44032: 0x88F3, + 45905 - 44032: 0x88F4, + 45906 - 44032: 0x88F5, + 45907 - 44032: 0x88F6, + 45908 - 44032: 0xB4F5, + 45909 - 44032: 0xB4F6, + 45910 - 44032: 0xB4F7, + 45911 - 44032: 0x88F7, + 45912 - 44032: 0xB4F8, + 45913 - 44032: 0x88F8, + 45914 - 44032: 0x88F9, + 45915 - 44032: 0xB4F9, + 45916 - 44032: 0xB4FA, + 45917 - 44032: 0x88FA, + 45918 - 44032: 0xB4FB, + 45919 - 44032: 0xB4FC, + 45920 - 44032: 0x88FB, + 45921 - 44032: 0x88FC, + 45922 - 44032: 0x88FD, + 45923 - 44032: 0x88FE, + 45924 - 44032: 0xB4FD, + 45925 - 44032: 0xB4FE, + 45926 - 44032: 0x8941, + 45927 - 44032: 0xB5A1, + 45928 - 44032: 0x8942, + 45929 - 44032: 0xB5A2, + 45930 - 44032: 0x8943, + 45931 - 44032: 0xB5A3, + 45932 - 44032: 0x8944, + 45933 - 44032: 0x8945, + 45934 - 44032: 0xB5A4, + 45935 - 44032: 0x8946, + 45936 - 44032: 0xB5A5, + 45937 - 44032: 0xB5A6, + 45938 - 44032: 0x8947, + 45939 - 44032: 0x8948, + 45940 - 44032: 0xB5A7, + 45941 - 44032: 0x8949, + 45942 - 44032: 0x894A, + 45943 - 44032: 0x894B, + 45944 - 44032: 0xB5A8, + 45945 - 44032: 0x894C, + 45946 - 44032: 0x894D, + 45947 - 44032: 0x894E, + 45948 - 44032: 0x894F, + 45949 - 44032: 0x8950, + 45950 - 44032: 0x8951, + 45951 - 44032: 0x8952, + 45952 - 44032: 0xB5A9, + 45953 - 44032: 0xB5AA, + 45954 - 44032: 0x8953, + 45955 - 44032: 0xB5AB, + 45956 - 44032: 0xB5AC, + 45957 - 44032: 0xB5AD, + 45958 - 44032: 0x8954, + 45959 - 44032: 0x8955, + 45960 - 44032: 0x8956, + 45961 - 44032: 0x8957, + 45962 - 44032: 0x8958, + 45963 - 44032: 0x8959, + 45964 - 44032: 0xB5AE, + 45965 - 44032: 0x895A, + 45966 - 44032: 0x8961, + 45967 - 44032: 0x8962, + 45968 - 44032: 0xB5AF, + 45969 - 44032: 0x8963, + 45970 - 44032: 0x8964, + 45971 - 44032: 0x8965, + 45972 - 44032: 0xB5B0, + 45973 - 44032: 0x8966, + 45974 - 44032: 0x8967, + 45975 - 44032: 0x8968, + 45976 - 44032: 0x8969, + 45977 - 44032: 0x896A, + 45978 - 44032: 0x896B, + 45979 - 44032: 0x896C, + 45980 - 44032: 0x896D, + 45981 - 44032: 0x896E, + 45982 - 44032: 0x896F, + 45983 - 44032: 0x8970, + 45984 - 44032: 0xB5B1, + 45985 - 44032: 0xB5B2, + 45986 - 44032: 0x8971, + 45987 - 44032: 0x8972, + 45988 - 44032: 0x8973, + 45989 - 44032: 0x8974, + 45990 - 44032: 0x8975, + 45991 - 44032: 0x8976, + 45992 - 44032: 0xB5B3, + 45993 - 44032: 0x8977, + 45994 - 44032: 0x8978, + 45995 - 44032: 0x8979, + 45996 - 44032: 0xB5B4, + 45997 - 44032: 0x897A, + 45998 - 44032: 0x8981, + 45999 - 44032: 0x8982, + 46000 - 44032: 0x8983, + 46001 - 44032: 0x8984, + 46002 - 44032: 0x8985, + 46003 - 44032: 0x8986, + 46004 - 44032: 0x8987, + 46005 - 44032: 0x8988, + 46006 - 44032: 0x8989, + 46007 - 44032: 0x898A, + 46008 - 44032: 0x898B, + 46009 - 44032: 0x898C, + 46010 - 44032: 0x898D, + 46011 - 44032: 0x898E, + 46012 - 44032: 0x898F, + 46013 - 44032: 0x8990, + 46014 - 44032: 0x8991, + 46015 - 44032: 0x8992, + 46016 - 44032: 0x8993, + 46017 - 44032: 0x8994, + 46018 - 44032: 0x8995, + 46019 - 44032: 0x8996, + 46020 - 44032: 0xB5B5, + 46021 - 44032: 0xB5B6, + 46022 - 44032: 0x8997, + 46023 - 44032: 0x8998, + 46024 - 44032: 0xB5B7, + 46025 - 44032: 0x8999, + 46026 - 44032: 0x899A, + 46027 - 44032: 0xB5B8, + 46028 - 44032: 0xB5B9, + 46029 - 44032: 0x899B, + 46030 - 44032: 0xB5BA, + 46031 - 44032: 0x899C, + 46032 - 44032: 0xB5BB, + 46033 - 44032: 0x899D, + 46034 - 44032: 0x899E, + 46035 - 44032: 0x899F, + 46036 - 44032: 0xB5BC, + 46037 - 44032: 0xB5BD, + 46038 - 44032: 0x89A0, + 46039 - 44032: 0xB5BE, + 46040 - 44032: 0x89A1, + 46041 - 44032: 0xB5BF, + 46042 - 44032: 0x89A2, + 46043 - 44032: 0xB5C0, + 46044 - 44032: 0x89A3, + 46045 - 44032: 0xB5C1, + 46046 - 44032: 0x89A4, + 46047 - 44032: 0x89A5, + 46048 - 44032: 0xB5C2, + 46049 - 44032: 0x89A6, + 46050 - 44032: 0x89A7, + 46051 - 44032: 0x89A8, + 46052 - 44032: 0xB5C3, + 46053 - 44032: 0x89A9, + 46054 - 44032: 0x89AA, + 46055 - 44032: 0x89AB, + 46056 - 44032: 0xB5C4, + 46057 - 44032: 0x89AC, + 46058 - 44032: 0x89AD, + 46059 - 44032: 0x89AE, + 46060 - 44032: 0x89AF, + 46061 - 44032: 0x89B0, + 46062 - 44032: 0x89B1, + 46063 - 44032: 0x89B2, + 46064 - 44032: 0x89B3, + 46065 - 44032: 0x89B4, + 46066 - 44032: 0x89B5, + 46067 - 44032: 0x89B6, + 46068 - 44032: 0x89B7, + 46069 - 44032: 0x89B8, + 46070 - 44032: 0x89B9, + 46071 - 44032: 0x89BA, + 46072 - 44032: 0x89BB, + 46073 - 44032: 0x89BC, + 46074 - 44032: 0x89BD, + 46075 - 44032: 0x89BE, + 46076 - 44032: 0xB5C5, + 46077 - 44032: 0x89BF, + 46078 - 44032: 0x89C0, + 46079 - 44032: 0x89C1, + 46080 - 44032: 0x89C2, + 46081 - 44032: 0x89C3, + 46082 - 44032: 0x89C4, + 46083 - 44032: 0x89C5, + 46084 - 44032: 0x89C6, + 46085 - 44032: 0x89C7, + 46086 - 44032: 0x89C8, + 46087 - 44032: 0x89C9, + 46088 - 44032: 0x89CA, + 46089 - 44032: 0x89CB, + 46090 - 44032: 0x89CC, + 46091 - 44032: 0x89CD, + 46092 - 44032: 0x89CE, + 46093 - 44032: 0x89CF, + 46094 - 44032: 0x89D0, + 46095 - 44032: 0x89D1, + 46096 - 44032: 0xB5C6, + 46097 - 44032: 0x89D2, + 46098 - 44032: 0x89D3, + 46099 - 44032: 0x89D4, + 46100 - 44032: 0x89D5, + 46101 - 44032: 0x89D6, + 46102 - 44032: 0x89D7, + 46103 - 44032: 0x89D8, + 46104 - 44032: 0xB5C7, + 46105 - 44032: 0x89D9, + 46106 - 44032: 0x89DA, + 46107 - 44032: 0x89DB, + 46108 - 44032: 0xB5C8, + 46109 - 44032: 0x89DC, + 46110 - 44032: 0x89DD, + 46111 - 44032: 0x89DE, + 46112 - 44032: 0xB5C9, + 46113 - 44032: 0x89DF, + 46114 - 44032: 0x89E0, + 46115 - 44032: 0x89E1, + 46116 - 44032: 0x89E2, + 46117 - 44032: 0x89E3, + 46118 - 44032: 0x89E4, + 46119 - 44032: 0x89E5, + 46120 - 44032: 0xB5CA, + 46121 - 44032: 0xB5CB, + 46122 - 44032: 0x89E6, + 46123 - 44032: 0xB5CC, + 46124 - 44032: 0x89E7, + 46125 - 44032: 0x89E8, + 46126 - 44032: 0x89E9, + 46127 - 44032: 0x89EA, + 46128 - 44032: 0x89EB, + 46129 - 44032: 0x89EC, + 46130 - 44032: 0x89ED, + 46131 - 44032: 0x89EE, + 46132 - 44032: 0xB5CD, + 46133 - 44032: 0x89EF, + 46134 - 44032: 0x89F0, + 46135 - 44032: 0x89F1, + 46136 - 44032: 0x89F2, + 46137 - 44032: 0x89F3, + 46138 - 44032: 0x89F4, + 46139 - 44032: 0x89F5, + 46140 - 44032: 0x89F6, + 46141 - 44032: 0x89F7, + 46142 - 44032: 0x89F8, + 46143 - 44032: 0x89F9, + 46144 - 44032: 0x89FA, + 46145 - 44032: 0x89FB, + 46146 - 44032: 0x89FC, + 46147 - 44032: 0x89FD, + 46148 - 44032: 0x89FE, + 46149 - 44032: 0x8A41, + 46150 - 44032: 0x8A42, + 46151 - 44032: 0x8A43, + 46152 - 44032: 0x8A44, + 46153 - 44032: 0x8A45, + 46154 - 44032: 0x8A46, + 46155 - 44032: 0x8A47, + 46156 - 44032: 0x8A48, + 46157 - 44032: 0x8A49, + 46158 - 44032: 0x8A4A, + 46159 - 44032: 0x8A4B, + 46160 - 44032: 0xB5CE, + 46161 - 44032: 0xB5CF, + 46162 - 44032: 0x8A4C, + 46163 - 44032: 0x8A4D, + 46164 - 44032: 0xB5D0, + 46165 - 44032: 0x8A4E, + 46166 - 44032: 0x8A4F, + 46167 - 44032: 0x8A50, + 46168 - 44032: 0xB5D1, + 46169 - 44032: 0x8A51, + 46170 - 44032: 0x8A52, + 46171 - 44032: 0x8A53, + 46172 - 44032: 0x8A54, + 46173 - 44032: 0x8A55, + 46174 - 44032: 0x8A56, + 46175 - 44032: 0x8A57, + 46176 - 44032: 0xB5D2, + 46177 - 44032: 0xB5D3, + 46178 - 44032: 0x8A58, + 46179 - 44032: 0xB5D4, + 46180 - 44032: 0x8A59, + 46181 - 44032: 0xB5D5, + 46182 - 44032: 0x8A5A, + 46183 - 44032: 0x8A61, + 46184 - 44032: 0x8A62, + 46185 - 44032: 0x8A63, + 46186 - 44032: 0x8A64, + 46187 - 44032: 0x8A65, + 46188 - 44032: 0xB5D6, + 46189 - 44032: 0x8A66, + 46190 - 44032: 0x8A67, + 46191 - 44032: 0x8A68, + 46192 - 44032: 0x8A69, + 46193 - 44032: 0x8A6A, + 46194 - 44032: 0x8A6B, + 46195 - 44032: 0x8A6C, + 46196 - 44032: 0x8A6D, + 46197 - 44032: 0x8A6E, + 46198 - 44032: 0x8A6F, + 46199 - 44032: 0x8A70, + 46200 - 44032: 0x8A71, + 46201 - 44032: 0x8A72, + 46202 - 44032: 0x8A73, + 46203 - 44032: 0x8A74, + 46204 - 44032: 0x8A75, + 46205 - 44032: 0x8A76, + 46206 - 44032: 0x8A77, + 46207 - 44032: 0x8A78, + 46208 - 44032: 0xB5D7, + 46209 - 44032: 0x8A79, + 46210 - 44032: 0x8A7A, + 46211 - 44032: 0x8A81, + 46212 - 44032: 0x8A82, + 46213 - 44032: 0x8A83, + 46214 - 44032: 0x8A84, + 46215 - 44032: 0x8A85, + 46216 - 44032: 0xB5D8, + 46217 - 44032: 0x8A86, + 46218 - 44032: 0x8A87, + 46219 - 44032: 0x8A88, + 46220 - 44032: 0x8A89, + 46221 - 44032: 0x8A8A, + 46222 - 44032: 0x8A8B, + 46223 - 44032: 0x8A8C, + 46224 - 44032: 0x8A8D, + 46225 - 44032: 0x8A8E, + 46226 - 44032: 0x8A8F, + 46227 - 44032: 0x8A90, + 46228 - 44032: 0x8A91, + 46229 - 44032: 0x8A92, + 46230 - 44032: 0x8A93, + 46231 - 44032: 0x8A94, + 46232 - 44032: 0x8A95, + 46233 - 44032: 0x8A96, + 46234 - 44032: 0x8A97, + 46235 - 44032: 0x8A98, + 46236 - 44032: 0x8A99, + 46237 - 44032: 0xB5D9, + 46238 - 44032: 0x8A9A, + 46239 - 44032: 0x8A9B, + 46240 - 44032: 0x8A9C, + 46241 - 44032: 0x8A9D, + 46242 - 44032: 0x8A9E, + 46243 - 44032: 0x8A9F, + 46244 - 44032: 0xB5DA, + 46245 - 44032: 0x8AA0, + 46246 - 44032: 0x8AA1, + 46247 - 44032: 0x8AA2, + 46248 - 44032: 0xB5DB, + 46249 - 44032: 0x8AA3, + 46250 - 44032: 0x8AA4, + 46251 - 44032: 0x8AA5, + 46252 - 44032: 0xB5DC, + 46253 - 44032: 0x8AA6, + 46254 - 44032: 0x8AA7, + 46255 - 44032: 0x8AA8, + 46256 - 44032: 0x8AA9, + 46257 - 44032: 0x8AAA, + 46258 - 44032: 0x8AAB, + 46259 - 44032: 0x8AAC, + 46260 - 44032: 0x8AAD, + 46261 - 44032: 0xB5DD, + 46262 - 44032: 0x8AAE, + 46263 - 44032: 0xB5DE, + 46264 - 44032: 0x8AAF, + 46265 - 44032: 0xB5DF, + 46266 - 44032: 0x8AB0, + 46267 - 44032: 0x8AB1, + 46268 - 44032: 0x8AB2, + 46269 - 44032: 0x8AB3, + 46270 - 44032: 0x8AB4, + 46271 - 44032: 0x8AB5, + 46272 - 44032: 0xB5E0, + 46273 - 44032: 0x8AB6, + 46274 - 44032: 0x8AB7, + 46275 - 44032: 0x8AB8, + 46276 - 44032: 0xB5E1, + 46277 - 44032: 0x8AB9, + 46278 - 44032: 0x8ABA, + 46279 - 44032: 0x8ABB, + 46280 - 44032: 0xB5E2, + 46281 - 44032: 0x8ABC, + 46282 - 44032: 0x8ABD, + 46283 - 44032: 0x8ABE, + 46284 - 44032: 0x8ABF, + 46285 - 44032: 0x8AC0, + 46286 - 44032: 0x8AC1, + 46287 - 44032: 0x8AC2, + 46288 - 44032: 0xB5E3, + 46289 - 44032: 0x8AC3, + 46290 - 44032: 0x8AC4, + 46291 - 44032: 0x8AC5, + 46292 - 44032: 0x8AC6, + 46293 - 44032: 0xB5E4, + 46294 - 44032: 0x8AC7, + 46295 - 44032: 0x8AC8, + 46296 - 44032: 0x8AC9, + 46297 - 44032: 0x8ACA, + 46298 - 44032: 0x8ACB, + 46299 - 44032: 0x8ACC, + 46300 - 44032: 0xB5E5, + 46301 - 44032: 0xB5E6, + 46302 - 44032: 0x8ACD, + 46303 - 44032: 0x8ACE, + 46304 - 44032: 0xB5E7, + 46305 - 44032: 0x8ACF, + 46306 - 44032: 0x8AD0, + 46307 - 44032: 0xB5E8, + 46308 - 44032: 0xB5E9, + 46309 - 44032: 0x8AD1, + 46310 - 44032: 0xB5EA, + 46311 - 44032: 0x8AD2, + 46312 - 44032: 0x8AD3, + 46313 - 44032: 0x8AD4, + 46314 - 44032: 0x8AD5, + 46315 - 44032: 0x8AD6, + 46316 - 44032: 0xB5EB, + 46317 - 44032: 0xB5EC, + 46318 - 44032: 0x8AD7, + 46319 - 44032: 0xB5ED, + 46320 - 44032: 0x8AD8, + 46321 - 44032: 0xB5EE, + 46322 - 44032: 0x8AD9, + 46323 - 44032: 0x8ADA, + 46324 - 44032: 0x8ADB, + 46325 - 44032: 0x8ADC, + 46326 - 44032: 0x8ADD, + 46327 - 44032: 0x8ADE, + 46328 - 44032: 0xB5EF, + 46329 - 44032: 0x8ADF, + 46330 - 44032: 0x8AE0, + 46331 - 44032: 0x8AE1, + 46332 - 44032: 0x8AE2, + 46333 - 44032: 0x8AE3, + 46334 - 44032: 0x8AE4, + 46335 - 44032: 0x8AE5, + 46336 - 44032: 0x8AE6, + 46337 - 44032: 0x8AE7, + 46338 - 44032: 0x8AE8, + 46339 - 44032: 0x8AE9, + 46340 - 44032: 0x8AEA, + 46341 - 44032: 0x8AEB, + 46342 - 44032: 0x8AEC, + 46343 - 44032: 0x8AED, + 46344 - 44032: 0x8AEE, + 46345 - 44032: 0x8AEF, + 46346 - 44032: 0x8AF0, + 46347 - 44032: 0x8AF1, + 46348 - 44032: 0x8AF2, + 46349 - 44032: 0x8AF3, + 46350 - 44032: 0x8AF4, + 46351 - 44032: 0x8AF5, + 46352 - 44032: 0x8AF6, + 46353 - 44032: 0x8AF7, + 46354 - 44032: 0x8AF8, + 46355 - 44032: 0x8AF9, + 46356 - 44032: 0xB5F0, + 46357 - 44032: 0xB5F1, + 46358 - 44032: 0x8AFA, + 46359 - 44032: 0x8AFB, + 46360 - 44032: 0xB5F2, + 46361 - 44032: 0x8AFC, + 46362 - 44032: 0x8AFD, + 46363 - 44032: 0xB5F3, + 46364 - 44032: 0xB5F4, + 46365 - 44032: 0x8AFE, + 46366 - 44032: 0x8B41, + 46367 - 44032: 0x8B42, + 46368 - 44032: 0x8B43, + 46369 - 44032: 0x8B44, + 46370 - 44032: 0x8B45, + 46371 - 44032: 0x8B46, + 46372 - 44032: 0xB5F5, + 46373 - 44032: 0xB5F6, + 46374 - 44032: 0x8B47, + 46375 - 44032: 0xB5F7, + 46376 - 44032: 0xB5F8, + 46377 - 44032: 0xB5F9, + 46378 - 44032: 0xB5FA, + 46379 - 44032: 0x8B48, + 46380 - 44032: 0x8B49, + 46381 - 44032: 0x8B4A, + 46382 - 44032: 0x8B4B, + 46383 - 44032: 0x8B4C, + 46384 - 44032: 0xB5FB, + 46385 - 44032: 0xB5FC, + 46386 - 44032: 0x8B4D, + 46387 - 44032: 0x8B4E, + 46388 - 44032: 0xB5FD, + 46389 - 44032: 0x8B4F, + 46390 - 44032: 0x8B50, + 46391 - 44032: 0x8B51, + 46392 - 44032: 0xB5FE, + 46393 - 44032: 0x8B52, + 46394 - 44032: 0x8B53, + 46395 - 44032: 0x8B54, + 46396 - 44032: 0x8B55, + 46397 - 44032: 0x8B56, + 46398 - 44032: 0x8B57, + 46399 - 44032: 0x8B58, + 46400 - 44032: 0xB6A1, + 46401 - 44032: 0xB6A2, + 46402 - 44032: 0x8B59, + 46403 - 44032: 0xB6A3, + 46404 - 44032: 0xB6A4, + 46405 - 44032: 0xB6A5, + 46406 - 44032: 0x8B5A, + 46407 - 44032: 0x8B61, + 46408 - 44032: 0x8B62, + 46409 - 44032: 0x8B63, + 46410 - 44032: 0x8B64, + 46411 - 44032: 0xB6A6, + 46412 - 44032: 0xB6A7, + 46413 - 44032: 0xB6A8, + 46414 - 44032: 0x8B65, + 46415 - 44032: 0x8B66, + 46416 - 44032: 0xB6A9, + 46417 - 44032: 0x8B67, + 46418 - 44032: 0x8B68, + 46419 - 44032: 0x8B69, + 46420 - 44032: 0xB6AA, + 46421 - 44032: 0x8B6A, + 46422 - 44032: 0x8B6B, + 46423 - 44032: 0x8B6C, + 46424 - 44032: 0x8B6D, + 46425 - 44032: 0x8B6E, + 46426 - 44032: 0x8B6F, + 46427 - 44032: 0x8B70, + 46428 - 44032: 0xB6AB, + 46429 - 44032: 0xB6AC, + 46430 - 44032: 0x8B71, + 46431 - 44032: 0xB6AD, + 46432 - 44032: 0xB6AE, + 46433 - 44032: 0xB6AF, + 46434 - 44032: 0x8B72, + 46435 - 44032: 0x8B73, + 46436 - 44032: 0x8B74, + 46437 - 44032: 0x8B75, + 46438 - 44032: 0x8B76, + 46439 - 44032: 0x8B77, + 46440 - 44032: 0x8B78, + 46441 - 44032: 0x8B79, + 46442 - 44032: 0x8B7A, + 46443 - 44032: 0x8B81, + 46444 - 44032: 0x8B82, + 46445 - 44032: 0x8B83, + 46446 - 44032: 0x8B84, + 46447 - 44032: 0x8B85, + 46448 - 44032: 0x8B86, + 46449 - 44032: 0x8B87, + 46450 - 44032: 0x8B88, + 46451 - 44032: 0x8B89, + 46452 - 44032: 0x8B8A, + 46453 - 44032: 0x8B8B, + 46454 - 44032: 0x8B8C, + 46455 - 44032: 0x8B8D, + 46456 - 44032: 0x8B8E, + 46457 - 44032: 0x8B8F, + 46458 - 44032: 0x8B90, + 46459 - 44032: 0x8B91, + 46460 - 44032: 0x8B92, + 46461 - 44032: 0x8B93, + 46462 - 44032: 0x8B94, + 46463 - 44032: 0x8B95, + 46464 - 44032: 0x8B96, + 46465 - 44032: 0x8B97, + 46466 - 44032: 0x8B98, + 46467 - 44032: 0x8B99, + 46468 - 44032: 0x8B9A, + 46469 - 44032: 0x8B9B, + 46470 - 44032: 0x8B9C, + 46471 - 44032: 0x8B9D, + 46472 - 44032: 0x8B9E, + 46473 - 44032: 0x8B9F, + 46474 - 44032: 0x8BA0, + 46475 - 44032: 0x8BA1, + 46476 - 44032: 0x8BA2, + 46477 - 44032: 0x8BA3, + 46478 - 44032: 0x8BA4, + 46479 - 44032: 0x8BA5, + 46480 - 44032: 0x8BA6, + 46481 - 44032: 0x8BA7, + 46482 - 44032: 0x8BA8, + 46483 - 44032: 0x8BA9, + 46484 - 44032: 0x8BAA, + 46485 - 44032: 0x8BAB, + 46486 - 44032: 0x8BAC, + 46487 - 44032: 0x8BAD, + 46488 - 44032: 0x8BAE, + 46489 - 44032: 0x8BAF, + 46490 - 44032: 0x8BB0, + 46491 - 44032: 0x8BB1, + 46492 - 44032: 0x8BB2, + 46493 - 44032: 0x8BB3, + 46494 - 44032: 0x8BB4, + 46495 - 44032: 0x8BB5, + 46496 - 44032: 0xB6B0, + 46497 - 44032: 0xB6B1, + 46498 - 44032: 0x8BB6, + 46499 - 44032: 0x8BB7, + 46500 - 44032: 0xB6B2, + 46501 - 44032: 0x8BB8, + 46502 - 44032: 0x8BB9, + 46503 - 44032: 0x8BBA, + 46504 - 44032: 0xB6B3, + 46505 - 44032: 0x8BBB, + 46506 - 44032: 0xB6B4, + 46507 - 44032: 0xB6B5, + 46508 - 44032: 0x8BBC, + 46509 - 44032: 0x8BBD, + 46510 - 44032: 0x8BBE, + 46511 - 44032: 0x8BBF, + 46512 - 44032: 0xB6B6, + 46513 - 44032: 0xB6B7, + 46514 - 44032: 0x8BC0, + 46515 - 44032: 0xB6B8, + 46516 - 44032: 0xB6B9, + 46517 - 44032: 0xB6BA, + 46518 - 44032: 0x8BC1, + 46519 - 44032: 0x8BC2, + 46520 - 44032: 0x8BC3, + 46521 - 44032: 0x8BC4, + 46522 - 44032: 0x8BC5, + 46523 - 44032: 0xB6BB, + 46524 - 44032: 0xB6BC, + 46525 - 44032: 0xB6BD, + 46526 - 44032: 0x8BC6, + 46527 - 44032: 0x8BC7, + 46528 - 44032: 0xB6BE, + 46529 - 44032: 0x8BC8, + 46530 - 44032: 0x8BC9, + 46531 - 44032: 0x8BCA, + 46532 - 44032: 0xB6BF, + 46533 - 44032: 0x8BCB, + 46534 - 44032: 0x8BCC, + 46535 - 44032: 0x8BCD, + 46536 - 44032: 0x8BCE, + 46537 - 44032: 0x8BCF, + 46538 - 44032: 0x8BD0, + 46539 - 44032: 0x8BD1, + 46540 - 44032: 0xB6C0, + 46541 - 44032: 0xB6C1, + 46542 - 44032: 0x8BD2, + 46543 - 44032: 0xB6C2, + 46544 - 44032: 0xB6C3, + 46545 - 44032: 0xB6C4, + 46546 - 44032: 0x8BD3, + 46547 - 44032: 0x8BD4, + 46548 - 44032: 0x8BD5, + 46549 - 44032: 0x8BD6, + 46550 - 44032: 0x8BD7, + 46551 - 44032: 0x8BD8, + 46552 - 44032: 0xB6C5, + 46553 - 44032: 0x8BD9, + 46554 - 44032: 0x8BDA, + 46555 - 44032: 0x8BDB, + 46556 - 44032: 0x8BDC, + 46557 - 44032: 0x8BDD, + 46558 - 44032: 0x8BDE, + 46559 - 44032: 0x8BDF, + 46560 - 44032: 0x8BE0, + 46561 - 44032: 0x8BE1, + 46562 - 44032: 0x8BE2, + 46563 - 44032: 0x8BE3, + 46564 - 44032: 0x8BE4, + 46565 - 44032: 0x8BE5, + 46566 - 44032: 0x8BE6, + 46567 - 44032: 0x8BE7, + 46568 - 44032: 0x8BE8, + 46569 - 44032: 0x8BE9, + 46570 - 44032: 0x8BEA, + 46571 - 44032: 0x8BEB, + 46572 - 44032: 0xB6C6, + 46573 - 44032: 0x8BEC, + 46574 - 44032: 0x8BED, + 46575 - 44032: 0x8BEE, + 46576 - 44032: 0x8BEF, + 46577 - 44032: 0x8BF0, + 46578 - 44032: 0x8BF1, + 46579 - 44032: 0x8BF2, + 46580 - 44032: 0x8BF3, + 46581 - 44032: 0x8BF4, + 46582 - 44032: 0x8BF5, + 46583 - 44032: 0x8BF6, + 46584 - 44032: 0x8BF7, + 46585 - 44032: 0x8BF8, + 46586 - 44032: 0x8BF9, + 46587 - 44032: 0x8BFA, + 46588 - 44032: 0x8BFB, + 46589 - 44032: 0x8BFC, + 46590 - 44032: 0x8BFD, + 46591 - 44032: 0x8BFE, + 46592 - 44032: 0x8C41, + 46593 - 44032: 0x8C42, + 46594 - 44032: 0x8C43, + 46595 - 44032: 0x8C44, + 46596 - 44032: 0x8C45, + 46597 - 44032: 0x8C46, + 46598 - 44032: 0x8C47, + 46599 - 44032: 0x8C48, + 46600 - 44032: 0x8C49, + 46601 - 44032: 0x8C4A, + 46602 - 44032: 0x8C4B, + 46603 - 44032: 0x8C4C, + 46604 - 44032: 0x8C4D, + 46605 - 44032: 0x8C4E, + 46606 - 44032: 0x8C4F, + 46607 - 44032: 0x8C50, + 46608 - 44032: 0xB6C7, + 46609 - 44032: 0xB6C8, + 46610 - 44032: 0x8C51, + 46611 - 44032: 0x8C52, + 46612 - 44032: 0xB6C9, + 46613 - 44032: 0x8C53, + 46614 - 44032: 0x8C54, + 46615 - 44032: 0x8C55, + 46616 - 44032: 0xB6CA, + 46617 - 44032: 0x8C56, + 46618 - 44032: 0x8C57, + 46619 - 44032: 0x8C58, + 46620 - 44032: 0x8C59, + 46621 - 44032: 0x8C5A, + 46622 - 44032: 0x8C61, + 46623 - 44032: 0x8C62, + 46624 - 44032: 0x8C63, + 46625 - 44032: 0x8C64, + 46626 - 44032: 0x8C65, + 46627 - 44032: 0x8C66, + 46628 - 44032: 0x8C67, + 46629 - 44032: 0xB6CB, + 46630 - 44032: 0x8C68, + 46631 - 44032: 0x8C69, + 46632 - 44032: 0x8C6A, + 46633 - 44032: 0x8C6B, + 46634 - 44032: 0x8C6C, + 46635 - 44032: 0x8C6D, + 46636 - 44032: 0xB6CC, + 46637 - 44032: 0x8C6E, + 46638 - 44032: 0x8C6F, + 46639 - 44032: 0x8C70, + 46640 - 44032: 0x8C71, + 46641 - 44032: 0x8C72, + 46642 - 44032: 0x8C73, + 46643 - 44032: 0x8C74, + 46644 - 44032: 0xB6CD, + 46645 - 44032: 0x8C75, + 46646 - 44032: 0x8C76, + 46647 - 44032: 0x8C77, + 46648 - 44032: 0x8C78, + 46649 - 44032: 0x8C79, + 46650 - 44032: 0x8C7A, + 46651 - 44032: 0x8C81, + 46652 - 44032: 0x8C82, + 46653 - 44032: 0x8C83, + 46654 - 44032: 0x8C84, + 46655 - 44032: 0x8C85, + 46656 - 44032: 0x8C86, + 46657 - 44032: 0x8C87, + 46658 - 44032: 0x8C88, + 46659 - 44032: 0x8C89, + 46660 - 44032: 0x8C8A, + 46661 - 44032: 0x8C8B, + 46662 - 44032: 0x8C8C, + 46663 - 44032: 0x8C8D, + 46664 - 44032: 0xB6CE, + 46665 - 44032: 0x8C8E, + 46666 - 44032: 0x8C8F, + 46667 - 44032: 0x8C90, + 46668 - 44032: 0x8C91, + 46669 - 44032: 0x8C92, + 46670 - 44032: 0x8C93, + 46671 - 44032: 0x8C94, + 46672 - 44032: 0x8C95, + 46673 - 44032: 0x8C96, + 46674 - 44032: 0x8C97, + 46675 - 44032: 0x8C98, + 46676 - 44032: 0x8C99, + 46677 - 44032: 0x8C9A, + 46678 - 44032: 0x8C9B, + 46679 - 44032: 0x8C9C, + 46680 - 44032: 0x8C9D, + 46681 - 44032: 0x8C9E, + 46682 - 44032: 0x8C9F, + 46683 - 44032: 0x8CA0, + 46684 - 44032: 0x8CA1, + 46685 - 44032: 0x8CA2, + 46686 - 44032: 0x8CA3, + 46687 - 44032: 0x8CA4, + 46688 - 44032: 0x8CA5, + 46689 - 44032: 0x8CA6, + 46690 - 44032: 0x8CA7, + 46691 - 44032: 0x8CA8, + 46692 - 44032: 0xB6CF, + 46693 - 44032: 0x8CA9, + 46694 - 44032: 0x8CAA, + 46695 - 44032: 0x8CAB, + 46696 - 44032: 0xB6D0, + 46697 - 44032: 0x8CAC, + 46698 - 44032: 0x8CAD, + 46699 - 44032: 0x8CAE, + 46700 - 44032: 0x8CAF, + 46701 - 44032: 0x8CB0, + 46702 - 44032: 0x8CB1, + 46703 - 44032: 0x8CB2, + 46704 - 44032: 0x8CB3, + 46705 - 44032: 0x8CB4, + 46706 - 44032: 0x8CB5, + 46707 - 44032: 0x8CB6, + 46708 - 44032: 0x8CB7, + 46709 - 44032: 0x8CB8, + 46710 - 44032: 0x8CB9, + 46711 - 44032: 0x8CBA, + 46712 - 44032: 0x8CBB, + 46713 - 44032: 0x8CBC, + 46714 - 44032: 0x8CBD, + 46715 - 44032: 0x8CBE, + 46716 - 44032: 0x8CBF, + 46717 - 44032: 0x8CC0, + 46718 - 44032: 0x8CC1, + 46719 - 44032: 0x8CC2, + 46720 - 44032: 0x8CC3, + 46721 - 44032: 0x8CC4, + 46722 - 44032: 0x8CC5, + 46723 - 44032: 0x8CC6, + 46724 - 44032: 0x8CC7, + 46725 - 44032: 0x8CC8, + 46726 - 44032: 0x8CC9, + 46727 - 44032: 0x8CCA, + 46728 - 44032: 0x8CCB, + 46729 - 44032: 0x8CCC, + 46730 - 44032: 0x8CCD, + 46731 - 44032: 0x8CCE, + 46732 - 44032: 0x8CCF, + 46733 - 44032: 0x8CD0, + 46734 - 44032: 0x8CD1, + 46735 - 44032: 0x8CD2, + 46736 - 44032: 0x8CD3, + 46737 - 44032: 0x8CD4, + 46738 - 44032: 0x8CD5, + 46739 - 44032: 0x8CD6, + 46740 - 44032: 0x8CD7, + 46741 - 44032: 0x8CD8, + 46742 - 44032: 0x8CD9, + 46743 - 44032: 0x8CDA, + 46744 - 44032: 0x8CDB, + 46745 - 44032: 0x8CDC, + 46746 - 44032: 0x8CDD, + 46747 - 44032: 0x8CDE, + 46748 - 44032: 0xB6D1, + 46749 - 44032: 0xB6D2, + 46750 - 44032: 0x8CDF, + 46751 - 44032: 0x8CE0, + 46752 - 44032: 0xB6D3, + 46753 - 44032: 0x8CE1, + 46754 - 44032: 0x8CE2, + 46755 - 44032: 0x8CE3, + 46756 - 44032: 0xB6D4, + 46757 - 44032: 0x8CE4, + 46758 - 44032: 0x8CE5, + 46759 - 44032: 0x8CE6, + 46760 - 44032: 0x8CE7, + 46761 - 44032: 0x8CE8, + 46762 - 44032: 0x8CE9, + 46763 - 44032: 0xB6D5, + 46764 - 44032: 0xB6D6, + 46765 - 44032: 0x8CEA, + 46766 - 44032: 0x8CEB, + 46767 - 44032: 0x8CEC, + 46768 - 44032: 0x8CED, + 46769 - 44032: 0xB6D7, + 46770 - 44032: 0x8CEE, + 46771 - 44032: 0x8CEF, + 46772 - 44032: 0x8CF0, + 46773 - 44032: 0x8CF1, + 46774 - 44032: 0x8CF2, + 46775 - 44032: 0x8CF3, + 46776 - 44032: 0x8CF4, + 46777 - 44032: 0x8CF5, + 46778 - 44032: 0x8CF6, + 46779 - 44032: 0x8CF7, + 46780 - 44032: 0x8CF8, + 46781 - 44032: 0x8CF9, + 46782 - 44032: 0x8CFA, + 46783 - 44032: 0x8CFB, + 46784 - 44032: 0x8CFC, + 46785 - 44032: 0x8CFD, + 46786 - 44032: 0x8CFE, + 46787 - 44032: 0x8D41, + 46788 - 44032: 0x8D42, + 46789 - 44032: 0x8D43, + 46790 - 44032: 0x8D44, + 46791 - 44032: 0x8D45, + 46792 - 44032: 0x8D46, + 46793 - 44032: 0x8D47, + 46794 - 44032: 0x8D48, + 46795 - 44032: 0x8D49, + 46796 - 44032: 0x8D4A, + 46797 - 44032: 0x8D4B, + 46798 - 44032: 0x8D4C, + 46799 - 44032: 0x8D4D, + 46800 - 44032: 0x8D4E, + 46801 - 44032: 0x8D4F, + 46802 - 44032: 0x8D50, + 46803 - 44032: 0x8D51, + 46804 - 44032: 0xB6D8, + 46805 - 44032: 0x8D52, + 46806 - 44032: 0x8D53, + 46807 - 44032: 0x8D54, + 46808 - 44032: 0x8D55, + 46809 - 44032: 0x8D56, + 46810 - 44032: 0x8D57, + 46811 - 44032: 0x8D58, + 46812 - 44032: 0x8D59, + 46813 - 44032: 0x8D5A, + 46814 - 44032: 0x8D61, + 46815 - 44032: 0x8D62, + 46816 - 44032: 0x8D63, + 46817 - 44032: 0x8D64, + 46818 - 44032: 0x8D65, + 46819 - 44032: 0x8D66, + 46820 - 44032: 0x8D67, + 46821 - 44032: 0x8D68, + 46822 - 44032: 0x8D69, + 46823 - 44032: 0x8D6A, + 46824 - 44032: 0x8D6B, + 46825 - 44032: 0x8D6C, + 46826 - 44032: 0x8D6D, + 46827 - 44032: 0x8D6E, + 46828 - 44032: 0x8D6F, + 46829 - 44032: 0x8D70, + 46830 - 44032: 0x8D71, + 46831 - 44032: 0x8D72, + 46832 - 44032: 0xB6D9, + 46833 - 44032: 0x8D73, + 46834 - 44032: 0x8D74, + 46835 - 44032: 0x8D75, + 46836 - 44032: 0xB6DA, + 46837 - 44032: 0x8D76, + 46838 - 44032: 0x8D77, + 46839 - 44032: 0x8D78, + 46840 - 44032: 0xB6DB, + 46841 - 44032: 0x8D79, + 46842 - 44032: 0x8D7A, + 46843 - 44032: 0x8D81, + 46844 - 44032: 0x8D82, + 46845 - 44032: 0x8D83, + 46846 - 44032: 0x8D84, + 46847 - 44032: 0x8D85, + 46848 - 44032: 0xB6DC, + 46849 - 44032: 0xB6DD, + 46850 - 44032: 0x8D86, + 46851 - 44032: 0x8D87, + 46852 - 44032: 0x8D88, + 46853 - 44032: 0xB6DE, + 46854 - 44032: 0x8D89, + 46855 - 44032: 0x8D8A, + 46856 - 44032: 0x8D8B, + 46857 - 44032: 0x8D8C, + 46858 - 44032: 0x8D8D, + 46859 - 44032: 0x8D8E, + 46860 - 44032: 0x8D8F, + 46861 - 44032: 0x8D90, + 46862 - 44032: 0x8D91, + 46863 - 44032: 0x8D92, + 46864 - 44032: 0x8D93, + 46865 - 44032: 0x8D94, + 46866 - 44032: 0x8D95, + 46867 - 44032: 0x8D96, + 46868 - 44032: 0x8D97, + 46869 - 44032: 0x8D98, + 46870 - 44032: 0x8D99, + 46871 - 44032: 0x8D9A, + 46872 - 44032: 0x8D9B, + 46873 - 44032: 0x8D9C, + 46874 - 44032: 0x8D9D, + 46875 - 44032: 0x8D9E, + 46876 - 44032: 0x8D9F, + 46877 - 44032: 0x8DA0, + 46878 - 44032: 0x8DA1, + 46879 - 44032: 0x8DA2, + 46880 - 44032: 0x8DA3, + 46881 - 44032: 0x8DA4, + 46882 - 44032: 0x8DA5, + 46883 - 44032: 0x8DA6, + 46884 - 44032: 0x8DA7, + 46885 - 44032: 0x8DA8, + 46886 - 44032: 0x8DA9, + 46887 - 44032: 0x8DAA, + 46888 - 44032: 0xB6DF, + 46889 - 44032: 0xB6E0, + 46890 - 44032: 0x8DAB, + 46891 - 44032: 0x8DAC, + 46892 - 44032: 0xB6E1, + 46893 - 44032: 0x8DAD, + 46894 - 44032: 0x8DAE, + 46895 - 44032: 0xB6E2, + 46896 - 44032: 0xB6E3, + 46897 - 44032: 0x8DAF, + 46898 - 44032: 0x8DB0, + 46899 - 44032: 0x8DB1, + 46900 - 44032: 0x8DB2, + 46901 - 44032: 0x8DB3, + 46902 - 44032: 0x8DB4, + 46903 - 44032: 0x8DB5, + 46904 - 44032: 0xB6E4, + 46905 - 44032: 0xB6E5, + 46906 - 44032: 0x8DB6, + 46907 - 44032: 0xB6E6, + 46908 - 44032: 0x8DB7, + 46909 - 44032: 0x8DB8, + 46910 - 44032: 0x8DB9, + 46911 - 44032: 0x8DBA, + 46912 - 44032: 0x8DBB, + 46913 - 44032: 0x8DBC, + 46914 - 44032: 0x8DBD, + 46915 - 44032: 0x8DBE, + 46916 - 44032: 0xB6E7, + 46917 - 44032: 0x8DBF, + 46918 - 44032: 0x8DC0, + 46919 - 44032: 0x8DC1, + 46920 - 44032: 0xB6E8, + 46921 - 44032: 0x8DC2, + 46922 - 44032: 0x8DC3, + 46923 - 44032: 0x8DC4, + 46924 - 44032: 0xB6E9, + 46925 - 44032: 0x8DC5, + 46926 - 44032: 0x8DC6, + 46927 - 44032: 0x8DC7, + 46928 - 44032: 0x8DC8, + 46929 - 44032: 0x8DC9, + 46930 - 44032: 0x8DCA, + 46931 - 44032: 0x8DCB, + 46932 - 44032: 0xB6EA, + 46933 - 44032: 0xB6EB, + 46934 - 44032: 0x8DCC, + 46935 - 44032: 0x8DCD, + 46936 - 44032: 0x8DCE, + 46937 - 44032: 0x8DCF, + 46938 - 44032: 0x8DD0, + 46939 - 44032: 0x8DD1, + 46940 - 44032: 0x8DD2, + 46941 - 44032: 0x8DD3, + 46942 - 44032: 0x8DD4, + 46943 - 44032: 0x8DD5, + 46944 - 44032: 0xB6EC, + 46945 - 44032: 0x8DD6, + 46946 - 44032: 0x8DD7, + 46947 - 44032: 0x8DD8, + 46948 - 44032: 0xB6ED, + 46949 - 44032: 0x8DD9, + 46950 - 44032: 0x8DDA, + 46951 - 44032: 0x8DDB, + 46952 - 44032: 0xB6EE, + 46953 - 44032: 0x8DDC, + 46954 - 44032: 0x8DDD, + 46955 - 44032: 0x8DDE, + 46956 - 44032: 0x8DDF, + 46957 - 44032: 0x8DE0, + 46958 - 44032: 0x8DE1, + 46959 - 44032: 0x8DE2, + 46960 - 44032: 0xB6EF, + 46961 - 44032: 0xB6F0, + 46962 - 44032: 0x8DE3, + 46963 - 44032: 0xB6F1, + 46964 - 44032: 0x8DE4, + 46965 - 44032: 0xB6F2, + 46966 - 44032: 0x8DE5, + 46967 - 44032: 0x8DE6, + 46968 - 44032: 0x8DE7, + 46969 - 44032: 0x8DE8, + 46970 - 44032: 0x8DE9, + 46971 - 44032: 0x8DEA, + 46972 - 44032: 0xB6F3, + 46973 - 44032: 0xB6F4, + 46974 - 44032: 0x8DEB, + 46975 - 44032: 0x8DEC, + 46976 - 44032: 0xB6F5, + 46977 - 44032: 0x8DED, + 46978 - 44032: 0x8DEE, + 46979 - 44032: 0x8DEF, + 46980 - 44032: 0xB6F6, + 46981 - 44032: 0x8DF0, + 46982 - 44032: 0x8DF1, + 46983 - 44032: 0x8DF2, + 46984 - 44032: 0x8DF3, + 46985 - 44032: 0x8DF4, + 46986 - 44032: 0x8DF5, + 46987 - 44032: 0x8DF6, + 46988 - 44032: 0xB6F7, + 46989 - 44032: 0xB6F8, + 46990 - 44032: 0x8DF7, + 46991 - 44032: 0xB6F9, + 46992 - 44032: 0xB6FA, + 46993 - 44032: 0xB6FB, + 46994 - 44032: 0xB6FC, + 46995 - 44032: 0x8DF8, + 46996 - 44032: 0x8DF9, + 46997 - 44032: 0x8DFA, + 46998 - 44032: 0xB6FD, + 46999 - 44032: 0xB6FE, + 47000 - 44032: 0xB7A1, + 47001 - 44032: 0xB7A2, + 47002 - 44032: 0x8DFB, + 47003 - 44032: 0x8DFC, + 47004 - 44032: 0xB7A3, + 47005 - 44032: 0x8DFD, + 47006 - 44032: 0x8DFE, + 47007 - 44032: 0x8E41, + 47008 - 44032: 0xB7A4, + 47009 - 44032: 0x8E42, + 47010 - 44032: 0x8E43, + 47011 - 44032: 0x8E44, + 47012 - 44032: 0x8E45, + 47013 - 44032: 0x8E46, + 47014 - 44032: 0x8E47, + 47015 - 44032: 0x8E48, + 47016 - 44032: 0xB7A5, + 47017 - 44032: 0xB7A6, + 47018 - 44032: 0x8E49, + 47019 - 44032: 0xB7A7, + 47020 - 44032: 0xB7A8, + 47021 - 44032: 0xB7A9, + 47022 - 44032: 0x8E4A, + 47023 - 44032: 0x8E4B, + 47024 - 44032: 0x8E4C, + 47025 - 44032: 0x8E4D, + 47026 - 44032: 0x8E4E, + 47027 - 44032: 0x8E4F, + 47028 - 44032: 0xB7AA, + 47029 - 44032: 0xB7AB, + 47030 - 44032: 0x8E50, + 47031 - 44032: 0x8E51, + 47032 - 44032: 0xB7AC, + 47033 - 44032: 0x8E52, + 47034 - 44032: 0x8E53, + 47035 - 44032: 0x8E54, + 47036 - 44032: 0x8E55, + 47037 - 44032: 0x8E56, + 47038 - 44032: 0x8E57, + 47039 - 44032: 0x8E58, + 47040 - 44032: 0x8E59, + 47041 - 44032: 0x8E5A, + 47042 - 44032: 0x8E61, + 47043 - 44032: 0x8E62, + 47044 - 44032: 0x8E63, + 47045 - 44032: 0x8E64, + 47046 - 44032: 0x8E65, + 47047 - 44032: 0xB7AD, + 47048 - 44032: 0x8E66, + 47049 - 44032: 0xB7AE, + 47050 - 44032: 0x8E67, + 47051 - 44032: 0x8E68, + 47052 - 44032: 0x8E69, + 47053 - 44032: 0x8E6A, + 47054 - 44032: 0x8E6B, + 47055 - 44032: 0x8E6C, + 47056 - 44032: 0x8E6D, + 47057 - 44032: 0x8E6E, + 47058 - 44032: 0x8E6F, + 47059 - 44032: 0x8E70, + 47060 - 44032: 0x8E71, + 47061 - 44032: 0x8E72, + 47062 - 44032: 0x8E73, + 47063 - 44032: 0x8E74, + 47064 - 44032: 0x8E75, + 47065 - 44032: 0x8E76, + 47066 - 44032: 0x8E77, + 47067 - 44032: 0x8E78, + 47068 - 44032: 0x8E79, + 47069 - 44032: 0x8E7A, + 47070 - 44032: 0x8E81, + 47071 - 44032: 0x8E82, + 47072 - 44032: 0x8E83, + 47073 - 44032: 0x8E84, + 47074 - 44032: 0x8E85, + 47075 - 44032: 0x8E86, + 47076 - 44032: 0x8E87, + 47077 - 44032: 0x8E88, + 47078 - 44032: 0x8E89, + 47079 - 44032: 0x8E8A, + 47080 - 44032: 0x8E8B, + 47081 - 44032: 0x8E8C, + 47082 - 44032: 0x8E8D, + 47083 - 44032: 0x8E8E, + 47084 - 44032: 0xB7AF, + 47085 - 44032: 0xB7B0, + 47086 - 44032: 0x8E8F, + 47087 - 44032: 0x8E90, + 47088 - 44032: 0xB7B1, + 47089 - 44032: 0x8E91, + 47090 - 44032: 0x8E92, + 47091 - 44032: 0x8E93, + 47092 - 44032: 0xB7B2, + 47093 - 44032: 0x8E94, + 47094 - 44032: 0x8E95, + 47095 - 44032: 0x8E96, + 47096 - 44032: 0x8E97, + 47097 - 44032: 0x8E98, + 47098 - 44032: 0x8E99, + 47099 - 44032: 0x8E9A, + 47100 - 44032: 0xB7B3, + 47101 - 44032: 0xB7B4, + 47102 - 44032: 0x8E9B, + 47103 - 44032: 0xB7B5, + 47104 - 44032: 0xB7B6, + 47105 - 44032: 0xB7B7, + 47106 - 44032: 0x8E9C, + 47107 - 44032: 0x8E9D, + 47108 - 44032: 0x8E9E, + 47109 - 44032: 0x8E9F, + 47110 - 44032: 0x8EA0, + 47111 - 44032: 0xB7B8, + 47112 - 44032: 0xB7B9, + 47113 - 44032: 0xB7BA, + 47114 - 44032: 0x8EA1, + 47115 - 44032: 0x8EA2, + 47116 - 44032: 0xB7BB, + 47117 - 44032: 0x8EA3, + 47118 - 44032: 0x8EA4, + 47119 - 44032: 0x8EA5, + 47120 - 44032: 0xB7BC, + 47121 - 44032: 0x8EA6, + 47122 - 44032: 0x8EA7, + 47123 - 44032: 0x8EA8, + 47124 - 44032: 0x8EA9, + 47125 - 44032: 0x8EAA, + 47126 - 44032: 0x8EAB, + 47127 - 44032: 0x8EAC, + 47128 - 44032: 0xB7BD, + 47129 - 44032: 0xB7BE, + 47130 - 44032: 0x8EAD, + 47131 - 44032: 0xB7BF, + 47132 - 44032: 0x8EAE, + 47133 - 44032: 0xB7C0, + 47134 - 44032: 0x8EAF, + 47135 - 44032: 0x8EB0, + 47136 - 44032: 0x8EB1, + 47137 - 44032: 0x8EB2, + 47138 - 44032: 0x8EB3, + 47139 - 44032: 0x8EB4, + 47140 - 44032: 0xB7C1, + 47141 - 44032: 0xB7C2, + 47142 - 44032: 0x8EB5, + 47143 - 44032: 0x8EB6, + 47144 - 44032: 0xB7C3, + 47145 - 44032: 0x8EB7, + 47146 - 44032: 0x8EB8, + 47147 - 44032: 0x8EB9, + 47148 - 44032: 0xB7C4, + 47149 - 44032: 0x8EBA, + 47150 - 44032: 0x8EBB, + 47151 - 44032: 0x8EBC, + 47152 - 44032: 0x8EBD, + 47153 - 44032: 0x8EBE, + 47154 - 44032: 0x8EBF, + 47155 - 44032: 0x8EC0, + 47156 - 44032: 0xB7C5, + 47157 - 44032: 0xB7C6, + 47158 - 44032: 0x8EC1, + 47159 - 44032: 0xB7C7, + 47160 - 44032: 0xB7C8, + 47161 - 44032: 0xB7C9, + 47162 - 44032: 0x8EC2, + 47163 - 44032: 0x8EC3, + 47164 - 44032: 0x8EC4, + 47165 - 44032: 0x8EC5, + 47166 - 44032: 0x8EC6, + 47167 - 44032: 0x8EC7, + 47168 - 44032: 0xB7CA, + 47169 - 44032: 0x8EC8, + 47170 - 44032: 0x8EC9, + 47171 - 44032: 0x8ECA, + 47172 - 44032: 0xB7CB, + 47173 - 44032: 0x8ECB, + 47174 - 44032: 0x8ECC, + 47175 - 44032: 0x8ECD, + 47176 - 44032: 0x8ECE, + 47177 - 44032: 0x8ECF, + 47178 - 44032: 0x8ED0, + 47179 - 44032: 0x8ED1, + 47180 - 44032: 0x8ED2, + 47181 - 44032: 0x8ED3, + 47182 - 44032: 0x8ED4, + 47183 - 44032: 0x8ED5, + 47184 - 44032: 0x8ED6, + 47185 - 44032: 0xB7CC, + 47186 - 44032: 0x8ED7, + 47187 - 44032: 0xB7CD, + 47188 - 44032: 0x8ED8, + 47189 - 44032: 0x8ED9, + 47190 - 44032: 0x8EDA, + 47191 - 44032: 0x8EDB, + 47192 - 44032: 0x8EDC, + 47193 - 44032: 0x8EDD, + 47194 - 44032: 0x8EDE, + 47195 - 44032: 0x8EDF, + 47196 - 44032: 0xB7CE, + 47197 - 44032: 0xB7CF, + 47198 - 44032: 0x8EE0, + 47199 - 44032: 0x8EE1, + 47200 - 44032: 0xB7D0, + 47201 - 44032: 0x8EE2, + 47202 - 44032: 0x8EE3, + 47203 - 44032: 0x8EE4, + 47204 - 44032: 0xB7D1, + 47205 - 44032: 0x8EE5, + 47206 - 44032: 0x8EE6, + 47207 - 44032: 0x8EE7, + 47208 - 44032: 0x8EE8, + 47209 - 44032: 0x8EE9, + 47210 - 44032: 0x8EEA, + 47211 - 44032: 0x8EEB, + 47212 - 44032: 0xB7D2, + 47213 - 44032: 0xB7D3, + 47214 - 44032: 0x8EEC, + 47215 - 44032: 0xB7D4, + 47216 - 44032: 0x8EED, + 47217 - 44032: 0xB7D5, + 47218 - 44032: 0x8EEE, + 47219 - 44032: 0x8EEF, + 47220 - 44032: 0x8EF0, + 47221 - 44032: 0x8EF1, + 47222 - 44032: 0x8EF2, + 47223 - 44032: 0x8EF3, + 47224 - 44032: 0xB7D6, + 47225 - 44032: 0x8EF4, + 47226 - 44032: 0x8EF5, + 47227 - 44032: 0x8EF6, + 47228 - 44032: 0xB7D7, + 47229 - 44032: 0x8EF7, + 47230 - 44032: 0x8EF8, + 47231 - 44032: 0x8EF9, + 47232 - 44032: 0x8EFA, + 47233 - 44032: 0x8EFB, + 47234 - 44032: 0x8EFC, + 47235 - 44032: 0x8EFD, + 47236 - 44032: 0x8EFE, + 47237 - 44032: 0x8F41, + 47238 - 44032: 0x8F42, + 47239 - 44032: 0x8F43, + 47240 - 44032: 0x8F44, + 47241 - 44032: 0x8F45, + 47242 - 44032: 0x8F46, + 47243 - 44032: 0x8F47, + 47244 - 44032: 0x8F48, + 47245 - 44032: 0xB7D8, + 47246 - 44032: 0x8F49, + 47247 - 44032: 0x8F4A, + 47248 - 44032: 0x8F4B, + 47249 - 44032: 0x8F4C, + 47250 - 44032: 0x8F4D, + 47251 - 44032: 0x8F4E, + 47252 - 44032: 0x8F4F, + 47253 - 44032: 0x8F50, + 47254 - 44032: 0x8F51, + 47255 - 44032: 0x8F52, + 47256 - 44032: 0x8F53, + 47257 - 44032: 0x8F54, + 47258 - 44032: 0x8F55, + 47259 - 44032: 0x8F56, + 47260 - 44032: 0x8F57, + 47261 - 44032: 0x8F58, + 47262 - 44032: 0x8F59, + 47263 - 44032: 0x8F5A, + 47264 - 44032: 0x8F61, + 47265 - 44032: 0x8F62, + 47266 - 44032: 0x8F63, + 47267 - 44032: 0x8F64, + 47268 - 44032: 0x8F65, + 47269 - 44032: 0x8F66, + 47270 - 44032: 0x8F67, + 47271 - 44032: 0x8F68, + 47272 - 44032: 0xB7D9, + 47273 - 44032: 0x8F69, + 47274 - 44032: 0x8F6A, + 47275 - 44032: 0x8F6B, + 47276 - 44032: 0x8F6C, + 47277 - 44032: 0x8F6D, + 47278 - 44032: 0x8F6E, + 47279 - 44032: 0x8F6F, + 47280 - 44032: 0xB7DA, + 47281 - 44032: 0x8F70, + 47282 - 44032: 0x8F71, + 47283 - 44032: 0x8F72, + 47284 - 44032: 0xB7DB, + 47285 - 44032: 0x8F73, + 47286 - 44032: 0x8F74, + 47287 - 44032: 0x8F75, + 47288 - 44032: 0xB7DC, + 47289 - 44032: 0x8F76, + 47290 - 44032: 0x8F77, + 47291 - 44032: 0x8F78, + 47292 - 44032: 0x8F79, + 47293 - 44032: 0x8F7A, + 47294 - 44032: 0x8F81, + 47295 - 44032: 0x8F82, + 47296 - 44032: 0xB7DD, + 47297 - 44032: 0xB7DE, + 47298 - 44032: 0x8F83, + 47299 - 44032: 0xB7DF, + 47300 - 44032: 0x8F84, + 47301 - 44032: 0xB7E0, + 47302 - 44032: 0x8F85, + 47303 - 44032: 0x8F86, + 47304 - 44032: 0x8F87, + 47305 - 44032: 0x8F88, + 47306 - 44032: 0x8F89, + 47307 - 44032: 0x8F8A, + 47308 - 44032: 0xB7E1, + 47309 - 44032: 0x8F8B, + 47310 - 44032: 0x8F8C, + 47311 - 44032: 0x8F8D, + 47312 - 44032: 0xB7E2, + 47313 - 44032: 0x8F8E, + 47314 - 44032: 0x8F8F, + 47315 - 44032: 0x8F90, + 47316 - 44032: 0xB7E3, + 47317 - 44032: 0x8F91, + 47318 - 44032: 0x8F92, + 47319 - 44032: 0x8F93, + 47320 - 44032: 0x8F94, + 47321 - 44032: 0x8F95, + 47322 - 44032: 0x8F96, + 47323 - 44032: 0x8F97, + 47324 - 44032: 0x8F98, + 47325 - 44032: 0xB7E4, + 47326 - 44032: 0x8F99, + 47327 - 44032: 0xB7E5, + 47328 - 44032: 0x8F9A, + 47329 - 44032: 0xB7E6, + 47330 - 44032: 0x8F9B, + 47331 - 44032: 0x8F9C, + 47332 - 44032: 0x8F9D, + 47333 - 44032: 0x8F9E, + 47334 - 44032: 0x8F9F, + 47335 - 44032: 0x8FA0, + 47336 - 44032: 0xB7E7, + 47337 - 44032: 0xB7E8, + 47338 - 44032: 0x8FA1, + 47339 - 44032: 0x8FA2, + 47340 - 44032: 0xB7E9, + 47341 - 44032: 0x8FA3, + 47342 - 44032: 0x8FA4, + 47343 - 44032: 0x8FA5, + 47344 - 44032: 0xB7EA, + 47345 - 44032: 0x8FA6, + 47346 - 44032: 0x8FA7, + 47347 - 44032: 0x8FA8, + 47348 - 44032: 0x8FA9, + 47349 - 44032: 0x8FAA, + 47350 - 44032: 0x8FAB, + 47351 - 44032: 0x8FAC, + 47352 - 44032: 0xB7EB, + 47353 - 44032: 0xB7EC, + 47354 - 44032: 0x8FAD, + 47355 - 44032: 0xB7ED, + 47356 - 44032: 0x8FAE, + 47357 - 44032: 0xB7EE, + 47358 - 44032: 0x8FAF, + 47359 - 44032: 0x8FB0, + 47360 - 44032: 0x8FB1, + 47361 - 44032: 0x8FB2, + 47362 - 44032: 0x8FB3, + 47363 - 44032: 0x8FB4, + 47364 - 44032: 0xB7EF, + 47365 - 44032: 0x8FB5, + 47366 - 44032: 0x8FB6, + 47367 - 44032: 0x8FB7, + 47368 - 44032: 0x8FB8, + 47369 - 44032: 0x8FB9, + 47370 - 44032: 0x8FBA, + 47371 - 44032: 0x8FBB, + 47372 - 44032: 0x8FBC, + 47373 - 44032: 0x8FBD, + 47374 - 44032: 0x8FBE, + 47375 - 44032: 0x8FBF, + 47376 - 44032: 0x8FC0, + 47377 - 44032: 0x8FC1, + 47378 - 44032: 0x8FC2, + 47379 - 44032: 0x8FC3, + 47380 - 44032: 0x8FC4, + 47381 - 44032: 0x8FC5, + 47382 - 44032: 0x8FC6, + 47383 - 44032: 0x8FC7, + 47384 - 44032: 0xB7F0, + 47385 - 44032: 0x8FC8, + 47386 - 44032: 0x8FC9, + 47387 - 44032: 0x8FCA, + 47388 - 44032: 0x8FCB, + 47389 - 44032: 0x8FCC, + 47390 - 44032: 0x8FCD, + 47391 - 44032: 0x8FCE, + 47392 - 44032: 0xB7F1, + 47393 - 44032: 0x8FCF, + 47394 - 44032: 0x8FD0, + 47395 - 44032: 0x8FD1, + 47396 - 44032: 0x8FD2, + 47397 - 44032: 0x8FD3, + 47398 - 44032: 0x8FD4, + 47399 - 44032: 0x8FD5, + 47400 - 44032: 0x8FD6, + 47401 - 44032: 0x8FD7, + 47402 - 44032: 0x8FD8, + 47403 - 44032: 0x8FD9, + 47404 - 44032: 0x8FDA, + 47405 - 44032: 0x8FDB, + 47406 - 44032: 0x8FDC, + 47407 - 44032: 0x8FDD, + 47408 - 44032: 0x8FDE, + 47409 - 44032: 0x8FDF, + 47410 - 44032: 0x8FE0, + 47411 - 44032: 0x8FE1, + 47412 - 44032: 0x8FE2, + 47413 - 44032: 0x8FE3, + 47414 - 44032: 0x8FE4, + 47415 - 44032: 0x8FE5, + 47416 - 44032: 0x8FE6, + 47417 - 44032: 0x8FE7, + 47418 - 44032: 0x8FE8, + 47419 - 44032: 0x8FE9, + 47420 - 44032: 0xB7F2, + 47421 - 44032: 0xB7F3, + 47422 - 44032: 0x8FEA, + 47423 - 44032: 0x8FEB, + 47424 - 44032: 0xB7F4, + 47425 - 44032: 0x8FEC, + 47426 - 44032: 0x8FED, + 47427 - 44032: 0x8FEE, + 47428 - 44032: 0xB7F5, + 47429 - 44032: 0x8FEF, + 47430 - 44032: 0x8FF0, + 47431 - 44032: 0x8FF1, + 47432 - 44032: 0x8FF2, + 47433 - 44032: 0x8FF3, + 47434 - 44032: 0x8FF4, + 47435 - 44032: 0x8FF5, + 47436 - 44032: 0xB7F6, + 47437 - 44032: 0x8FF6, + 47438 - 44032: 0x8FF7, + 47439 - 44032: 0xB7F7, + 47440 - 44032: 0x8FF8, + 47441 - 44032: 0xB7F8, + 47442 - 44032: 0x8FF9, + 47443 - 44032: 0x8FFA, + 47444 - 44032: 0x8FFB, + 47445 - 44032: 0x8FFC, + 47446 - 44032: 0x8FFD, + 47447 - 44032: 0x8FFE, + 47448 - 44032: 0xB7F9, + 47449 - 44032: 0xB7FA, + 47450 - 44032: 0x9041, + 47451 - 44032: 0x9042, + 47452 - 44032: 0xB7FB, + 47453 - 44032: 0x9043, + 47454 - 44032: 0x9044, + 47455 - 44032: 0x9045, + 47456 - 44032: 0xB7FC, + 47457 - 44032: 0x9046, + 47458 - 44032: 0x9047, + 47459 - 44032: 0x9048, + 47460 - 44032: 0x9049, + 47461 - 44032: 0x904A, + 47462 - 44032: 0x904B, + 47463 - 44032: 0x904C, + 47464 - 44032: 0xB7FD, + 47465 - 44032: 0xB7FE, + 47466 - 44032: 0x904D, + 47467 - 44032: 0xB8A1, + 47468 - 44032: 0x904E, + 47469 - 44032: 0xB8A2, + 47470 - 44032: 0x904F, + 47471 - 44032: 0x9050, + 47472 - 44032: 0x9051, + 47473 - 44032: 0x9052, + 47474 - 44032: 0x9053, + 47475 - 44032: 0x9054, + 47476 - 44032: 0xB8A3, + 47477 - 44032: 0xB8A4, + 47478 - 44032: 0x9055, + 47479 - 44032: 0x9056, + 47480 - 44032: 0xB8A5, + 47481 - 44032: 0x9057, + 47482 - 44032: 0x9058, + 47483 - 44032: 0x9059, + 47484 - 44032: 0xB8A6, + 47485 - 44032: 0x905A, + 47486 - 44032: 0x9061, + 47487 - 44032: 0x9062, + 47488 - 44032: 0x9063, + 47489 - 44032: 0x9064, + 47490 - 44032: 0x9065, + 47491 - 44032: 0x9066, + 47492 - 44032: 0xB8A7, + 47493 - 44032: 0xB8A8, + 47494 - 44032: 0x9067, + 47495 - 44032: 0xB8A9, + 47496 - 44032: 0x9068, + 47497 - 44032: 0xB8AA, + 47498 - 44032: 0xB8AB, + 47499 - 44032: 0x9069, + 47500 - 44032: 0x906A, + 47501 - 44032: 0xB8AC, + 47502 - 44032: 0xB8AD, + 47503 - 44032: 0x906B, + 47504 - 44032: 0x906C, + 47505 - 44032: 0x906D, + 47506 - 44032: 0x906E, + 47507 - 44032: 0x906F, + 47508 - 44032: 0x9070, + 47509 - 44032: 0x9071, + 47510 - 44032: 0x9072, + 47511 - 44032: 0x9073, + 47512 - 44032: 0x9074, + 47513 - 44032: 0x9075, + 47514 - 44032: 0x9076, + 47515 - 44032: 0x9077, + 47516 - 44032: 0x9078, + 47517 - 44032: 0x9079, + 47518 - 44032: 0x907A, + 47519 - 44032: 0x9081, + 47520 - 44032: 0x9082, + 47521 - 44032: 0x9083, + 47522 - 44032: 0x9084, + 47523 - 44032: 0x9085, + 47524 - 44032: 0x9086, + 47525 - 44032: 0x9087, + 47526 - 44032: 0x9088, + 47527 - 44032: 0x9089, + 47528 - 44032: 0x908A, + 47529 - 44032: 0x908B, + 47530 - 44032: 0x908C, + 47531 - 44032: 0x908D, + 47532 - 44032: 0xB8AE, + 47533 - 44032: 0xB8AF, + 47534 - 44032: 0x908E, + 47535 - 44032: 0x908F, + 47536 - 44032: 0xB8B0, + 47537 - 44032: 0x9090, + 47538 - 44032: 0x9091, + 47539 - 44032: 0x9092, + 47540 - 44032: 0xB8B1, + 47541 - 44032: 0x9093, + 47542 - 44032: 0x9094, + 47543 - 44032: 0x9095, + 47544 - 44032: 0x9096, + 47545 - 44032: 0x9097, + 47546 - 44032: 0x9098, + 47547 - 44032: 0x9099, + 47548 - 44032: 0xB8B2, + 47549 - 44032: 0xB8B3, + 47550 - 44032: 0x909A, + 47551 - 44032: 0xB8B4, + 47552 - 44032: 0x909B, + 47553 - 44032: 0xB8B5, + 47554 - 44032: 0x909C, + 47555 - 44032: 0x909D, + 47556 - 44032: 0x909E, + 47557 - 44032: 0x909F, + 47558 - 44032: 0x90A0, + 47559 - 44032: 0x90A1, + 47560 - 44032: 0xB8B6, + 47561 - 44032: 0xB8B7, + 47562 - 44032: 0x90A2, + 47563 - 44032: 0x90A3, + 47564 - 44032: 0xB8B8, + 47565 - 44032: 0x90A4, + 47566 - 44032: 0xB8B9, + 47567 - 44032: 0xB8BA, + 47568 - 44032: 0xB8BB, + 47569 - 44032: 0xB8BC, + 47570 - 44032: 0xB8BD, + 47571 - 44032: 0x90A5, + 47572 - 44032: 0x90A6, + 47573 - 44032: 0x90A7, + 47574 - 44032: 0x90A8, + 47575 - 44032: 0x90A9, + 47576 - 44032: 0xB8BE, + 47577 - 44032: 0xB8BF, + 47578 - 44032: 0x90AA, + 47579 - 44032: 0xB8C0, + 47580 - 44032: 0x90AB, + 47581 - 44032: 0xB8C1, + 47582 - 44032: 0xB8C2, + 47583 - 44032: 0x90AC, + 47584 - 44032: 0x90AD, + 47585 - 44032: 0xB8C3, + 47586 - 44032: 0x90AE, + 47587 - 44032: 0xB8C4, + 47588 - 44032: 0xB8C5, + 47589 - 44032: 0xB8C6, + 47590 - 44032: 0x90AF, + 47591 - 44032: 0x90B0, + 47592 - 44032: 0xB8C7, + 47593 - 44032: 0x90B1, + 47594 - 44032: 0x90B2, + 47595 - 44032: 0x90B3, + 47596 - 44032: 0xB8C8, + 47597 - 44032: 0x90B4, + 47598 - 44032: 0x90B5, + 47599 - 44032: 0x90B6, + 47600 - 44032: 0x90B7, + 47601 - 44032: 0x90B8, + 47602 - 44032: 0x90B9, + 47603 - 44032: 0x90BA, + 47604 - 44032: 0xB8C9, + 47605 - 44032: 0xB8CA, + 47606 - 44032: 0x90BB, + 47607 - 44032: 0xB8CB, + 47608 - 44032: 0xB8CC, + 47609 - 44032: 0xB8CD, + 47610 - 44032: 0xB8CE, + 47611 - 44032: 0x90BC, + 47612 - 44032: 0x90BD, + 47613 - 44032: 0x90BE, + 47614 - 44032: 0x90BF, + 47615 - 44032: 0x90C0, + 47616 - 44032: 0xB8CF, + 47617 - 44032: 0xB8D0, + 47618 - 44032: 0x90C1, + 47619 - 44032: 0x90C2, + 47620 - 44032: 0x90C3, + 47621 - 44032: 0x90C4, + 47622 - 44032: 0x90C5, + 47623 - 44032: 0x90C6, + 47624 - 44032: 0xB8D1, + 47625 - 44032: 0x90C7, + 47626 - 44032: 0x90C8, + 47627 - 44032: 0x90C9, + 47628 - 44032: 0x90CA, + 47629 - 44032: 0x90CB, + 47630 - 44032: 0x90CC, + 47631 - 44032: 0x90CD, + 47632 - 44032: 0x90CE, + 47633 - 44032: 0x90CF, + 47634 - 44032: 0x90D0, + 47635 - 44032: 0x90D1, + 47636 - 44032: 0x90D2, + 47637 - 44032: 0xB8D2, + 47638 - 44032: 0x90D3, + 47639 - 44032: 0x90D4, + 47640 - 44032: 0x90D5, + 47641 - 44032: 0x90D6, + 47642 - 44032: 0x90D7, + 47643 - 44032: 0x90D8, + 47644 - 44032: 0x90D9, + 47645 - 44032: 0x90DA, + 47646 - 44032: 0x90DB, + 47647 - 44032: 0x90DC, + 47648 - 44032: 0x90DD, + 47649 - 44032: 0x90DE, + 47650 - 44032: 0x90DF, + 47651 - 44032: 0x90E0, + 47652 - 44032: 0x90E1, + 47653 - 44032: 0x90E2, + 47654 - 44032: 0x90E3, + 47655 - 44032: 0x90E4, + 47656 - 44032: 0x90E5, + 47657 - 44032: 0x90E6, + 47658 - 44032: 0x90E7, + 47659 - 44032: 0x90E8, + 47660 - 44032: 0x90E9, + 47661 - 44032: 0x90EA, + 47662 - 44032: 0x90EB, + 47663 - 44032: 0x90EC, + 47664 - 44032: 0x90ED, + 47665 - 44032: 0x90EE, + 47666 - 44032: 0x90EF, + 47667 - 44032: 0x90F0, + 47668 - 44032: 0x90F1, + 47669 - 44032: 0x90F2, + 47670 - 44032: 0x90F3, + 47671 - 44032: 0x90F4, + 47672 - 44032: 0xB8D3, + 47673 - 44032: 0xB8D4, + 47674 - 44032: 0x90F5, + 47675 - 44032: 0x90F6, + 47676 - 44032: 0xB8D5, + 47677 - 44032: 0x90F7, + 47678 - 44032: 0x90F8, + 47679 - 44032: 0x90F9, + 47680 - 44032: 0xB8D6, + 47681 - 44032: 0x90FA, + 47682 - 44032: 0xB8D7, + 47683 - 44032: 0x90FB, + 47684 - 44032: 0x90FC, + 47685 - 44032: 0x90FD, + 47686 - 44032: 0x90FE, + 47687 - 44032: 0x9141, + 47688 - 44032: 0xB8D8, + 47689 - 44032: 0xB8D9, + 47690 - 44032: 0x9142, + 47691 - 44032: 0xB8DA, + 47692 - 44032: 0x9143, + 47693 - 44032: 0xB8DB, + 47694 - 44032: 0xB8DC, + 47695 - 44032: 0x9144, + 47696 - 44032: 0x9145, + 47697 - 44032: 0x9146, + 47698 - 44032: 0x9147, + 47699 - 44032: 0xB8DD, + 47700 - 44032: 0xB8DE, + 47701 - 44032: 0xB8DF, + 47702 - 44032: 0x9148, + 47703 - 44032: 0x9149, + 47704 - 44032: 0xB8E0, + 47705 - 44032: 0x914A, + 47706 - 44032: 0x914B, + 47707 - 44032: 0x914C, + 47708 - 44032: 0xB8E1, + 47709 - 44032: 0x914D, + 47710 - 44032: 0x914E, + 47711 - 44032: 0x914F, + 47712 - 44032: 0x9150, + 47713 - 44032: 0x9151, + 47714 - 44032: 0x9152, + 47715 - 44032: 0x9153, + 47716 - 44032: 0xB8E2, + 47717 - 44032: 0xB8E3, + 47718 - 44032: 0x9154, + 47719 - 44032: 0xB8E4, + 47720 - 44032: 0xB8E5, + 47721 - 44032: 0xB8E6, + 47722 - 44032: 0x9155, + 47723 - 44032: 0x9156, + 47724 - 44032: 0x9157, + 47725 - 44032: 0x9158, + 47726 - 44032: 0x9159, + 47727 - 44032: 0x915A, + 47728 - 44032: 0xB8E7, + 47729 - 44032: 0xB8E8, + 47730 - 44032: 0x9161, + 47731 - 44032: 0x9162, + 47732 - 44032: 0xB8E9, + 47733 - 44032: 0x9163, + 47734 - 44032: 0x9164, + 47735 - 44032: 0x9165, + 47736 - 44032: 0xB8EA, + 47737 - 44032: 0x9166, + 47738 - 44032: 0x9167, + 47739 - 44032: 0x9168, + 47740 - 44032: 0x9169, + 47741 - 44032: 0x916A, + 47742 - 44032: 0x916B, + 47743 - 44032: 0x916C, + 47744 - 44032: 0x916D, + 47745 - 44032: 0x916E, + 47746 - 44032: 0x916F, + 47747 - 44032: 0xB8EB, + 47748 - 44032: 0xB8EC, + 47749 - 44032: 0xB8ED, + 47750 - 44032: 0x9170, + 47751 - 44032: 0xB8EE, + 47752 - 44032: 0x9171, + 47753 - 44032: 0x9172, + 47754 - 44032: 0x9173, + 47755 - 44032: 0x9174, + 47756 - 44032: 0xB8EF, + 47757 - 44032: 0x9175, + 47758 - 44032: 0x9176, + 47759 - 44032: 0x9177, + 47760 - 44032: 0x9178, + 47761 - 44032: 0x9179, + 47762 - 44032: 0x917A, + 47763 - 44032: 0x9181, + 47764 - 44032: 0x9182, + 47765 - 44032: 0x9183, + 47766 - 44032: 0x9184, + 47767 - 44032: 0x9185, + 47768 - 44032: 0x9186, + 47769 - 44032: 0x9187, + 47770 - 44032: 0x9188, + 47771 - 44032: 0x9189, + 47772 - 44032: 0x918A, + 47773 - 44032: 0x918B, + 47774 - 44032: 0x918C, + 47775 - 44032: 0x918D, + 47776 - 44032: 0x918E, + 47777 - 44032: 0x918F, + 47778 - 44032: 0x9190, + 47779 - 44032: 0x9191, + 47780 - 44032: 0x9192, + 47781 - 44032: 0x9193, + 47782 - 44032: 0x9194, + 47783 - 44032: 0x9195, + 47784 - 44032: 0xB8F0, + 47785 - 44032: 0xB8F1, + 47786 - 44032: 0x9196, + 47787 - 44032: 0xB8F2, + 47788 - 44032: 0xB8F3, + 47789 - 44032: 0x9197, + 47790 - 44032: 0x9198, + 47791 - 44032: 0x9199, + 47792 - 44032: 0xB8F4, + 47793 - 44032: 0x919A, + 47794 - 44032: 0xB8F5, + 47795 - 44032: 0x919B, + 47796 - 44032: 0x919C, + 47797 - 44032: 0x919D, + 47798 - 44032: 0x919E, + 47799 - 44032: 0x919F, + 47800 - 44032: 0xB8F6, + 47801 - 44032: 0xB8F7, + 47802 - 44032: 0x91A0, + 47803 - 44032: 0xB8F8, + 47804 - 44032: 0x91A1, + 47805 - 44032: 0xB8F9, + 47806 - 44032: 0x91A2, + 47807 - 44032: 0x91A3, + 47808 - 44032: 0x91A4, + 47809 - 44032: 0x91A5, + 47810 - 44032: 0x91A6, + 47811 - 44032: 0x91A7, + 47812 - 44032: 0xB8FA, + 47813 - 44032: 0x91A8, + 47814 - 44032: 0x91A9, + 47815 - 44032: 0x91AA, + 47816 - 44032: 0xB8FB, + 47817 - 44032: 0x91AB, + 47818 - 44032: 0x91AC, + 47819 - 44032: 0x91AD, + 47820 - 44032: 0x91AE, + 47821 - 44032: 0x91AF, + 47822 - 44032: 0x91B0, + 47823 - 44032: 0x91B1, + 47824 - 44032: 0x91B2, + 47825 - 44032: 0x91B3, + 47826 - 44032: 0x91B4, + 47827 - 44032: 0x91B5, + 47828 - 44032: 0x91B6, + 47829 - 44032: 0x91B7, + 47830 - 44032: 0x91B8, + 47831 - 44032: 0x91B9, + 47832 - 44032: 0xB8FC, + 47833 - 44032: 0xB8FD, + 47834 - 44032: 0x91BA, + 47835 - 44032: 0x91BB, + 47836 - 44032: 0x91BC, + 47837 - 44032: 0x91BD, + 47838 - 44032: 0x91BE, + 47839 - 44032: 0x91BF, + 47840 - 44032: 0x91C0, + 47841 - 44032: 0x91C1, + 47842 - 44032: 0x91C2, + 47843 - 44032: 0x91C3, + 47844 - 44032: 0x91C4, + 47845 - 44032: 0x91C5, + 47846 - 44032: 0x91C6, + 47847 - 44032: 0x91C7, + 47848 - 44032: 0x91C8, + 47849 - 44032: 0x91C9, + 47850 - 44032: 0x91CA, + 47851 - 44032: 0x91CB, + 47852 - 44032: 0x91CC, + 47853 - 44032: 0x91CD, + 47854 - 44032: 0x91CE, + 47855 - 44032: 0x91CF, + 47856 - 44032: 0x91D0, + 47857 - 44032: 0x91D1, + 47858 - 44032: 0x91D2, + 47859 - 44032: 0x91D3, + 47860 - 44032: 0x91D4, + 47861 - 44032: 0x91D5, + 47862 - 44032: 0x91D6, + 47863 - 44032: 0x91D7, + 47864 - 44032: 0x91D8, + 47865 - 44032: 0x91D9, + 47866 - 44032: 0x91DA, + 47867 - 44032: 0x91DB, + 47868 - 44032: 0xB8FE, + 47869 - 44032: 0x91DC, + 47870 - 44032: 0x91DD, + 47871 - 44032: 0x91DE, + 47872 - 44032: 0xB9A1, + 47873 - 44032: 0x91DF, + 47874 - 44032: 0x91E0, + 47875 - 44032: 0x91E1, + 47876 - 44032: 0xB9A2, + 47877 - 44032: 0x91E2, + 47878 - 44032: 0x91E3, + 47879 - 44032: 0x91E4, + 47880 - 44032: 0x91E5, + 47881 - 44032: 0x91E6, + 47882 - 44032: 0x91E7, + 47883 - 44032: 0x91E8, + 47884 - 44032: 0x91E9, + 47885 - 44032: 0xB9A3, + 47886 - 44032: 0x91EA, + 47887 - 44032: 0xB9A4, + 47888 - 44032: 0x91EB, + 47889 - 44032: 0xB9A5, + 47890 - 44032: 0x91EC, + 47891 - 44032: 0x91ED, + 47892 - 44032: 0x91EE, + 47893 - 44032: 0x91EF, + 47894 - 44032: 0x91F0, + 47895 - 44032: 0x91F1, + 47896 - 44032: 0xB9A6, + 47897 - 44032: 0x91F2, + 47898 - 44032: 0x91F3, + 47899 - 44032: 0x91F4, + 47900 - 44032: 0xB9A7, + 47901 - 44032: 0x91F5, + 47902 - 44032: 0x91F6, + 47903 - 44032: 0x91F7, + 47904 - 44032: 0xB9A8, + 47905 - 44032: 0x91F8, + 47906 - 44032: 0x91F9, + 47907 - 44032: 0x91FA, + 47908 - 44032: 0x91FB, + 47909 - 44032: 0x91FC, + 47910 - 44032: 0x91FD, + 47911 - 44032: 0x91FE, + 47912 - 44032: 0x9241, + 47913 - 44032: 0xB9A9, + 47914 - 44032: 0x9242, + 47915 - 44032: 0xB9AA, + 47916 - 44032: 0x9243, + 47917 - 44032: 0x9244, + 47918 - 44032: 0x9245, + 47919 - 44032: 0x9246, + 47920 - 44032: 0x9247, + 47921 - 44032: 0x9248, + 47922 - 44032: 0x9249, + 47923 - 44032: 0x924A, + 47924 - 44032: 0xB9AB, + 47925 - 44032: 0xB9AC, + 47926 - 44032: 0xB9AD, + 47927 - 44032: 0x924B, + 47928 - 44032: 0xB9AE, + 47929 - 44032: 0x924C, + 47930 - 44032: 0x924D, + 47931 - 44032: 0xB9AF, + 47932 - 44032: 0xB9B0, + 47933 - 44032: 0xB9B1, + 47934 - 44032: 0xB9B2, + 47935 - 44032: 0x924E, + 47936 - 44032: 0x924F, + 47937 - 44032: 0x9250, + 47938 - 44032: 0x9251, + 47939 - 44032: 0x9252, + 47940 - 44032: 0xB9B3, + 47941 - 44032: 0xB9B4, + 47942 - 44032: 0x9253, + 47943 - 44032: 0xB9B5, + 47944 - 44032: 0x9254, + 47945 - 44032: 0xB9B6, + 47946 - 44032: 0x9255, + 47947 - 44032: 0x9256, + 47948 - 44032: 0x9257, + 47949 - 44032: 0xB9B7, + 47950 - 44032: 0x9258, + 47951 - 44032: 0xB9B8, + 47952 - 44032: 0xB9B9, + 47953 - 44032: 0x9259, + 47954 - 44032: 0x925A, + 47955 - 44032: 0x9261, + 47956 - 44032: 0xB9BA, + 47957 - 44032: 0x9262, + 47958 - 44032: 0x9263, + 47959 - 44032: 0x9264, + 47960 - 44032: 0xB9BB, + 47961 - 44032: 0x9265, + 47962 - 44032: 0x9266, + 47963 - 44032: 0x9267, + 47964 - 44032: 0x9268, + 47965 - 44032: 0x9269, + 47966 - 44032: 0x926A, + 47967 - 44032: 0x926B, + 47968 - 44032: 0x926C, + 47969 - 44032: 0xB9BC, + 47970 - 44032: 0x926D, + 47971 - 44032: 0xB9BD, + 47972 - 44032: 0x926E, + 47973 - 44032: 0x926F, + 47974 - 44032: 0x9270, + 47975 - 44032: 0x9271, + 47976 - 44032: 0x9272, + 47977 - 44032: 0x9273, + 47978 - 44032: 0x9274, + 47979 - 44032: 0x9275, + 47980 - 44032: 0xB9BE, + 47981 - 44032: 0x9276, + 47982 - 44032: 0x9277, + 47983 - 44032: 0x9278, + 47984 - 44032: 0x9279, + 47985 - 44032: 0x927A, + 47986 - 44032: 0x9281, + 47987 - 44032: 0x9282, + 47988 - 44032: 0x9283, + 47989 - 44032: 0x9284, + 47990 - 44032: 0x9285, + 47991 - 44032: 0x9286, + 47992 - 44032: 0x9287, + 47993 - 44032: 0x9288, + 47994 - 44032: 0x9289, + 47995 - 44032: 0x928A, + 47996 - 44032: 0x928B, + 47997 - 44032: 0x928C, + 47998 - 44032: 0x928D, + 47999 - 44032: 0x928E, + 48000 - 44032: 0x928F, + 48001 - 44032: 0x9290, + 48002 - 44032: 0x9291, + 48003 - 44032: 0x9292, + 48004 - 44032: 0x9293, + 48005 - 44032: 0x9294, + 48006 - 44032: 0x9295, + 48007 - 44032: 0x9296, + 48008 - 44032: 0xB9BF, + 48009 - 44032: 0x9297, + 48010 - 44032: 0x9298, + 48011 - 44032: 0x9299, + 48012 - 44032: 0xB9C0, + 48013 - 44032: 0x929A, + 48014 - 44032: 0x929B, + 48015 - 44032: 0x929C, + 48016 - 44032: 0xB9C1, + 48017 - 44032: 0x929D, + 48018 - 44032: 0x929E, + 48019 - 44032: 0x929F, + 48020 - 44032: 0x92A0, + 48021 - 44032: 0x92A1, + 48022 - 44032: 0x92A2, + 48023 - 44032: 0x92A3, + 48024 - 44032: 0x92A4, + 48025 - 44032: 0x92A5, + 48026 - 44032: 0x92A6, + 48027 - 44032: 0x92A7, + 48028 - 44032: 0x92A8, + 48029 - 44032: 0x92A9, + 48030 - 44032: 0x92AA, + 48031 - 44032: 0x92AB, + 48032 - 44032: 0x92AC, + 48033 - 44032: 0x92AD, + 48034 - 44032: 0x92AE, + 48035 - 44032: 0x92AF, + 48036 - 44032: 0xB9C2, + 48037 - 44032: 0x92B0, + 48038 - 44032: 0x92B1, + 48039 - 44032: 0x92B2, + 48040 - 44032: 0xB9C3, + 48041 - 44032: 0x92B3, + 48042 - 44032: 0x92B4, + 48043 - 44032: 0x92B5, + 48044 - 44032: 0xB9C4, + 48045 - 44032: 0x92B6, + 48046 - 44032: 0x92B7, + 48047 - 44032: 0x92B8, + 48048 - 44032: 0x92B9, + 48049 - 44032: 0x92BA, + 48050 - 44032: 0x92BB, + 48051 - 44032: 0x92BC, + 48052 - 44032: 0xB9C5, + 48053 - 44032: 0x92BD, + 48054 - 44032: 0x92BE, + 48055 - 44032: 0xB9C6, + 48056 - 44032: 0x92BF, + 48057 - 44032: 0x92C0, + 48058 - 44032: 0x92C1, + 48059 - 44032: 0x92C2, + 48060 - 44032: 0x92C3, + 48061 - 44032: 0x92C4, + 48062 - 44032: 0x92C5, + 48063 - 44032: 0x92C6, + 48064 - 44032: 0xB9C7, + 48065 - 44032: 0x92C7, + 48066 - 44032: 0x92C8, + 48067 - 44032: 0x92C9, + 48068 - 44032: 0xB9C8, + 48069 - 44032: 0x92CA, + 48070 - 44032: 0x92CB, + 48071 - 44032: 0x92CC, + 48072 - 44032: 0xB9C9, + 48073 - 44032: 0x92CD, + 48074 - 44032: 0x92CE, + 48075 - 44032: 0x92CF, + 48076 - 44032: 0x92D0, + 48077 - 44032: 0x92D1, + 48078 - 44032: 0x92D2, + 48079 - 44032: 0x92D3, + 48080 - 44032: 0xB9CA, + 48081 - 44032: 0x92D4, + 48082 - 44032: 0x92D5, + 48083 - 44032: 0xB9CB, + 48084 - 44032: 0x92D6, + 48085 - 44032: 0x92D7, + 48086 - 44032: 0x92D8, + 48087 - 44032: 0x92D9, + 48088 - 44032: 0x92DA, + 48089 - 44032: 0x92DB, + 48090 - 44032: 0x92DC, + 48091 - 44032: 0x92DD, + 48092 - 44032: 0x92DE, + 48093 - 44032: 0x92DF, + 48094 - 44032: 0x92E0, + 48095 - 44032: 0x92E1, + 48096 - 44032: 0x92E2, + 48097 - 44032: 0x92E3, + 48098 - 44032: 0x92E4, + 48099 - 44032: 0x92E5, + 48100 - 44032: 0x92E6, + 48101 - 44032: 0x92E7, + 48102 - 44032: 0x92E8, + 48103 - 44032: 0x92E9, + 48104 - 44032: 0x92EA, + 48105 - 44032: 0x92EB, + 48106 - 44032: 0x92EC, + 48107 - 44032: 0x92ED, + 48108 - 44032: 0x92EE, + 48109 - 44032: 0x92EF, + 48110 - 44032: 0x92F0, + 48111 - 44032: 0x92F1, + 48112 - 44032: 0x92F2, + 48113 - 44032: 0x92F3, + 48114 - 44032: 0x92F4, + 48115 - 44032: 0x92F5, + 48116 - 44032: 0x92F6, + 48117 - 44032: 0x92F7, + 48118 - 44032: 0x92F8, + 48119 - 44032: 0x92F9, + 48120 - 44032: 0xB9CC, + 48121 - 44032: 0xB9CD, + 48122 - 44032: 0x92FA, + 48123 - 44032: 0x92FB, + 48124 - 44032: 0xB9CE, + 48125 - 44032: 0x92FC, + 48126 - 44032: 0x92FD, + 48127 - 44032: 0xB9CF, + 48128 - 44032: 0xB9D0, + 48129 - 44032: 0x92FE, + 48130 - 44032: 0xB9D1, + 48131 - 44032: 0x9341, + 48132 - 44032: 0x9342, + 48133 - 44032: 0x9343, + 48134 - 44032: 0x9344, + 48135 - 44032: 0x9345, + 48136 - 44032: 0xB9D2, + 48137 - 44032: 0xB9D3, + 48138 - 44032: 0x9346, + 48139 - 44032: 0xB9D4, + 48140 - 44032: 0xB9D5, + 48141 - 44032: 0xB9D6, + 48142 - 44032: 0x9347, + 48143 - 44032: 0xB9D7, + 48144 - 44032: 0x9348, + 48145 - 44032: 0xB9D8, + 48146 - 44032: 0x9349, + 48147 - 44032: 0x934A, + 48148 - 44032: 0xB9D9, + 48149 - 44032: 0xB9DA, + 48150 - 44032: 0xB9DB, + 48151 - 44032: 0xB9DC, + 48152 - 44032: 0xB9DD, + 48153 - 44032: 0x934B, + 48154 - 44032: 0x934C, + 48155 - 44032: 0xB9DE, + 48156 - 44032: 0xB9DF, + 48157 - 44032: 0xB9E0, + 48158 - 44032: 0xB9E1, + 48159 - 44032: 0xB9E2, + 48160 - 44032: 0x934D, + 48161 - 44032: 0x934E, + 48162 - 44032: 0x934F, + 48163 - 44032: 0x9350, + 48164 - 44032: 0xB9E3, + 48165 - 44032: 0xB9E4, + 48166 - 44032: 0x9351, + 48167 - 44032: 0xB9E5, + 48168 - 44032: 0x9352, + 48169 - 44032: 0xB9E6, + 48170 - 44032: 0x9353, + 48171 - 44032: 0x9354, + 48172 - 44032: 0x9355, + 48173 - 44032: 0xB9E7, + 48174 - 44032: 0x9356, + 48175 - 44032: 0x9357, + 48176 - 44032: 0xB9E8, + 48177 - 44032: 0xB9E9, + 48178 - 44032: 0x9358, + 48179 - 44032: 0x9359, + 48180 - 44032: 0xB9EA, + 48181 - 44032: 0x935A, + 48182 - 44032: 0x9361, + 48183 - 44032: 0x9362, + 48184 - 44032: 0xB9EB, + 48185 - 44032: 0x9363, + 48186 - 44032: 0x9364, + 48187 - 44032: 0x9365, + 48188 - 44032: 0x9366, + 48189 - 44032: 0x9367, + 48190 - 44032: 0x9368, + 48191 - 44032: 0x9369, + 48192 - 44032: 0xB9EC, + 48193 - 44032: 0xB9ED, + 48194 - 44032: 0x936A, + 48195 - 44032: 0xB9EE, + 48196 - 44032: 0xB9EF, + 48197 - 44032: 0xB9F0, + 48198 - 44032: 0x936B, + 48199 - 44032: 0x936C, + 48200 - 44032: 0x936D, + 48201 - 44032: 0xB9F1, + 48202 - 44032: 0x936E, + 48203 - 44032: 0x936F, + 48204 - 44032: 0xB9F2, + 48205 - 44032: 0xB9F3, + 48206 - 44032: 0x9370, + 48207 - 44032: 0x9371, + 48208 - 44032: 0xB9F4, + 48209 - 44032: 0x9372, + 48210 - 44032: 0x9373, + 48211 - 44032: 0x9374, + 48212 - 44032: 0x9375, + 48213 - 44032: 0x9376, + 48214 - 44032: 0x9377, + 48215 - 44032: 0x9378, + 48216 - 44032: 0x9379, + 48217 - 44032: 0x937A, + 48218 - 44032: 0x9381, + 48219 - 44032: 0x9382, + 48220 - 44032: 0x9383, + 48221 - 44032: 0xB9F5, + 48222 - 44032: 0x9384, + 48223 - 44032: 0x9385, + 48224 - 44032: 0x9386, + 48225 - 44032: 0x9387, + 48226 - 44032: 0x9388, + 48227 - 44032: 0x9389, + 48228 - 44032: 0x938A, + 48229 - 44032: 0x938B, + 48230 - 44032: 0x938C, + 48231 - 44032: 0x938D, + 48232 - 44032: 0x938E, + 48233 - 44032: 0x938F, + 48234 - 44032: 0x9390, + 48235 - 44032: 0x9391, + 48236 - 44032: 0x9392, + 48237 - 44032: 0x9393, + 48238 - 44032: 0x9394, + 48239 - 44032: 0x9395, + 48240 - 44032: 0x9396, + 48241 - 44032: 0x9397, + 48242 - 44032: 0x9398, + 48243 - 44032: 0x9399, + 48244 - 44032: 0x939A, + 48245 - 44032: 0x939B, + 48246 - 44032: 0x939C, + 48247 - 44032: 0x939D, + 48248 - 44032: 0x939E, + 48249 - 44032: 0x939F, + 48250 - 44032: 0x93A0, + 48251 - 44032: 0x93A1, + 48252 - 44032: 0x93A2, + 48253 - 44032: 0x93A3, + 48254 - 44032: 0x93A4, + 48255 - 44032: 0x93A5, + 48256 - 44032: 0x93A6, + 48257 - 44032: 0x93A7, + 48258 - 44032: 0x93A8, + 48259 - 44032: 0x93A9, + 48260 - 44032: 0xB9F6, + 48261 - 44032: 0xB9F7, + 48262 - 44032: 0x93AA, + 48263 - 44032: 0x93AB, + 48264 - 44032: 0xB9F8, + 48265 - 44032: 0x93AC, + 48266 - 44032: 0x93AD, + 48267 - 44032: 0xB9F9, + 48268 - 44032: 0xB9FA, + 48269 - 44032: 0x93AE, + 48270 - 44032: 0xB9FB, + 48271 - 44032: 0x93AF, + 48272 - 44032: 0x93B0, + 48273 - 44032: 0x93B1, + 48274 - 44032: 0x93B2, + 48275 - 44032: 0x93B3, + 48276 - 44032: 0xB9FC, + 48277 - 44032: 0xB9FD, + 48278 - 44032: 0x93B4, + 48279 - 44032: 0xB9FE, + 48280 - 44032: 0x93B5, + 48281 - 44032: 0xBAA1, + 48282 - 44032: 0xBAA2, + 48283 - 44032: 0x93B6, + 48284 - 44032: 0x93B7, + 48285 - 44032: 0x93B8, + 48286 - 44032: 0x93B9, + 48287 - 44032: 0x93BA, + 48288 - 44032: 0xBAA3, + 48289 - 44032: 0xBAA4, + 48290 - 44032: 0x93BB, + 48291 - 44032: 0x93BC, + 48292 - 44032: 0xBAA5, + 48293 - 44032: 0x93BD, + 48294 - 44032: 0x93BE, + 48295 - 44032: 0xBAA6, + 48296 - 44032: 0xBAA7, + 48297 - 44032: 0x93BF, + 48298 - 44032: 0x93C0, + 48299 - 44032: 0x93C1, + 48300 - 44032: 0x93C2, + 48301 - 44032: 0x93C3, + 48302 - 44032: 0x93C4, + 48303 - 44032: 0x93C5, + 48304 - 44032: 0xBAA8, + 48305 - 44032: 0xBAA9, + 48306 - 44032: 0x93C6, + 48307 - 44032: 0xBAAA, + 48308 - 44032: 0xBAAB, + 48309 - 44032: 0xBAAC, + 48310 - 44032: 0x93C7, + 48311 - 44032: 0x93C8, + 48312 - 44032: 0x93C9, + 48313 - 44032: 0x93CA, + 48314 - 44032: 0x93CB, + 48315 - 44032: 0x93CC, + 48316 - 44032: 0xBAAD, + 48317 - 44032: 0xBAAE, + 48318 - 44032: 0x93CD, + 48319 - 44032: 0x93CE, + 48320 - 44032: 0xBAAF, + 48321 - 44032: 0x93CF, + 48322 - 44032: 0x93D0, + 48323 - 44032: 0x93D1, + 48324 - 44032: 0xBAB0, + 48325 - 44032: 0x93D2, + 48326 - 44032: 0x93D3, + 48327 - 44032: 0x93D4, + 48328 - 44032: 0x93D5, + 48329 - 44032: 0x93D6, + 48330 - 44032: 0x93D7, + 48331 - 44032: 0x93D8, + 48332 - 44032: 0x93D9, + 48333 - 44032: 0xBAB1, + 48334 - 44032: 0x93DA, + 48335 - 44032: 0xBAB2, + 48336 - 44032: 0xBAB3, + 48337 - 44032: 0xBAB4, + 48338 - 44032: 0x93DB, + 48339 - 44032: 0x93DC, + 48340 - 44032: 0x93DD, + 48341 - 44032: 0xBAB5, + 48342 - 44032: 0x93DE, + 48343 - 44032: 0x93DF, + 48344 - 44032: 0xBAB6, + 48345 - 44032: 0x93E0, + 48346 - 44032: 0x93E1, + 48347 - 44032: 0x93E2, + 48348 - 44032: 0xBAB7, + 48349 - 44032: 0x93E3, + 48350 - 44032: 0x93E4, + 48351 - 44032: 0x93E5, + 48352 - 44032: 0x93E6, + 48353 - 44032: 0x93E7, + 48354 - 44032: 0x93E8, + 48355 - 44032: 0x93E9, + 48356 - 44032: 0x93EA, + 48357 - 44032: 0x93EB, + 48358 - 44032: 0x93EC, + 48359 - 44032: 0x93ED, + 48360 - 44032: 0x93EE, + 48361 - 44032: 0x93EF, + 48362 - 44032: 0x93F0, + 48363 - 44032: 0x93F1, + 48364 - 44032: 0x93F2, + 48365 - 44032: 0x93F3, + 48366 - 44032: 0x93F4, + 48367 - 44032: 0x93F5, + 48368 - 44032: 0x93F6, + 48369 - 44032: 0x93F7, + 48370 - 44032: 0x93F8, + 48371 - 44032: 0x93F9, + 48372 - 44032: 0xBAB8, + 48373 - 44032: 0xBAB9, + 48374 - 44032: 0xBABA, + 48375 - 44032: 0x93FA, + 48376 - 44032: 0xBABB, + 48377 - 44032: 0x93FB, + 48378 - 44032: 0x93FC, + 48379 - 44032: 0x93FD, + 48380 - 44032: 0xBABC, + 48381 - 44032: 0x93FE, + 48382 - 44032: 0x9441, + 48383 - 44032: 0x9442, + 48384 - 44032: 0x9443, + 48385 - 44032: 0x9444, + 48386 - 44032: 0x9445, + 48387 - 44032: 0x9446, + 48388 - 44032: 0xBABD, + 48389 - 44032: 0xBABE, + 48390 - 44032: 0x9447, + 48391 - 44032: 0xBABF, + 48392 - 44032: 0x9448, + 48393 - 44032: 0xBAC0, + 48394 - 44032: 0x9449, + 48395 - 44032: 0x944A, + 48396 - 44032: 0x944B, + 48397 - 44032: 0x944C, + 48398 - 44032: 0x944D, + 48399 - 44032: 0x944E, + 48400 - 44032: 0xBAC1, + 48401 - 44032: 0x944F, + 48402 - 44032: 0x9450, + 48403 - 44032: 0x9451, + 48404 - 44032: 0xBAC2, + 48405 - 44032: 0x9452, + 48406 - 44032: 0x9453, + 48407 - 44032: 0x9454, + 48408 - 44032: 0x9455, + 48409 - 44032: 0x9456, + 48410 - 44032: 0x9457, + 48411 - 44032: 0x9458, + 48412 - 44032: 0x9459, + 48413 - 44032: 0x945A, + 48414 - 44032: 0x9461, + 48415 - 44032: 0x9462, + 48416 - 44032: 0x9463, + 48417 - 44032: 0x9464, + 48418 - 44032: 0x9465, + 48419 - 44032: 0x9466, + 48420 - 44032: 0xBAC3, + 48421 - 44032: 0x9467, + 48422 - 44032: 0x9468, + 48423 - 44032: 0x9469, + 48424 - 44032: 0x946A, + 48425 - 44032: 0x946B, + 48426 - 44032: 0x946C, + 48427 - 44032: 0x946D, + 48428 - 44032: 0xBAC4, + 48429 - 44032: 0x946E, + 48430 - 44032: 0x946F, + 48431 - 44032: 0x9470, + 48432 - 44032: 0x9471, + 48433 - 44032: 0x9472, + 48434 - 44032: 0x9473, + 48435 - 44032: 0x9474, + 48436 - 44032: 0x9475, + 48437 - 44032: 0x9476, + 48438 - 44032: 0x9477, + 48439 - 44032: 0x9478, + 48440 - 44032: 0x9479, + 48441 - 44032: 0x947A, + 48442 - 44032: 0x9481, + 48443 - 44032: 0x9482, + 48444 - 44032: 0x9483, + 48445 - 44032: 0x9484, + 48446 - 44032: 0x9485, + 48447 - 44032: 0x9486, + 48448 - 44032: 0xBAC5, + 48449 - 44032: 0x9487, + 48450 - 44032: 0x9488, + 48451 - 44032: 0x9489, + 48452 - 44032: 0x948A, + 48453 - 44032: 0x948B, + 48454 - 44032: 0x948C, + 48455 - 44032: 0x948D, + 48456 - 44032: 0xBAC6, + 48457 - 44032: 0xBAC7, + 48458 - 44032: 0x948E, + 48459 - 44032: 0x948F, + 48460 - 44032: 0xBAC8, + 48461 - 44032: 0x9490, + 48462 - 44032: 0x9491, + 48463 - 44032: 0x9492, + 48464 - 44032: 0xBAC9, + 48465 - 44032: 0x9493, + 48466 - 44032: 0x9494, + 48467 - 44032: 0x9495, + 48468 - 44032: 0x9496, + 48469 - 44032: 0x9497, + 48470 - 44032: 0x9498, + 48471 - 44032: 0x9499, + 48472 - 44032: 0xBACA, + 48473 - 44032: 0xBACB, + 48474 - 44032: 0x949A, + 48475 - 44032: 0x949B, + 48476 - 44032: 0x949C, + 48477 - 44032: 0x949D, + 48478 - 44032: 0x949E, + 48479 - 44032: 0x949F, + 48480 - 44032: 0x94A0, + 48481 - 44032: 0x94A1, + 48482 - 44032: 0x94A2, + 48483 - 44032: 0x94A3, + 48484 - 44032: 0xBACC, + 48485 - 44032: 0x94A4, + 48486 - 44032: 0x94A5, + 48487 - 44032: 0x94A6, + 48488 - 44032: 0xBACD, + 48489 - 44032: 0x94A7, + 48490 - 44032: 0x94A8, + 48491 - 44032: 0x94A9, + 48492 - 44032: 0x94AA, + 48493 - 44032: 0x94AB, + 48494 - 44032: 0x94AC, + 48495 - 44032: 0x94AD, + 48496 - 44032: 0x94AE, + 48497 - 44032: 0x94AF, + 48498 - 44032: 0x94B0, + 48499 - 44032: 0x94B1, + 48500 - 44032: 0x94B2, + 48501 - 44032: 0x94B3, + 48502 - 44032: 0x94B4, + 48503 - 44032: 0x94B5, + 48504 - 44032: 0x94B6, + 48505 - 44032: 0x94B7, + 48506 - 44032: 0x94B8, + 48507 - 44032: 0x94B9, + 48508 - 44032: 0x94BA, + 48509 - 44032: 0x94BB, + 48510 - 44032: 0x94BC, + 48511 - 44032: 0x94BD, + 48512 - 44032: 0xBACE, + 48513 - 44032: 0xBACF, + 48514 - 44032: 0x94BE, + 48515 - 44032: 0x94BF, + 48516 - 44032: 0xBAD0, + 48517 - 44032: 0x94C0, + 48518 - 44032: 0x94C1, + 48519 - 44032: 0xBAD1, + 48520 - 44032: 0xBAD2, + 48521 - 44032: 0xBAD3, + 48522 - 44032: 0xBAD4, + 48523 - 44032: 0x94C2, + 48524 - 44032: 0x94C3, + 48525 - 44032: 0x94C4, + 48526 - 44032: 0x94C5, + 48527 - 44032: 0x94C6, + 48528 - 44032: 0xBAD5, + 48529 - 44032: 0xBAD6, + 48530 - 44032: 0x94C7, + 48531 - 44032: 0xBAD7, + 48532 - 44032: 0x94C8, + 48533 - 44032: 0xBAD8, + 48534 - 44032: 0x94C9, + 48535 - 44032: 0x94CA, + 48536 - 44032: 0x94CB, + 48537 - 44032: 0xBAD9, + 48538 - 44032: 0xBADA, + 48539 - 44032: 0x94CC, + 48540 - 44032: 0xBADB, + 48541 - 44032: 0x94CD, + 48542 - 44032: 0x94CE, + 48543 - 44032: 0x94CF, + 48544 - 44032: 0x94D0, + 48545 - 44032: 0x94D1, + 48546 - 44032: 0x94D2, + 48547 - 44032: 0x94D3, + 48548 - 44032: 0xBADC, + 48549 - 44032: 0x94D4, + 48550 - 44032: 0x94D5, + 48551 - 44032: 0x94D6, + 48552 - 44032: 0x94D7, + 48553 - 44032: 0x94D8, + 48554 - 44032: 0x94D9, + 48555 - 44032: 0x94DA, + 48556 - 44032: 0x94DB, + 48557 - 44032: 0x94DC, + 48558 - 44032: 0x94DD, + 48559 - 44032: 0x94DE, + 48560 - 44032: 0xBADD, + 48561 - 44032: 0x94DF, + 48562 - 44032: 0x94E0, + 48563 - 44032: 0x94E1, + 48564 - 44032: 0x94E2, + 48565 - 44032: 0x94E3, + 48566 - 44032: 0x94E4, + 48567 - 44032: 0x94E5, + 48568 - 44032: 0xBADE, + 48569 - 44032: 0x94E6, + 48570 - 44032: 0x94E7, + 48571 - 44032: 0x94E8, + 48572 - 44032: 0x94E9, + 48573 - 44032: 0x94EA, + 48574 - 44032: 0x94EB, + 48575 - 44032: 0x94EC, + 48576 - 44032: 0x94ED, + 48577 - 44032: 0x94EE, + 48578 - 44032: 0x94EF, + 48579 - 44032: 0x94F0, + 48580 - 44032: 0x94F1, + 48581 - 44032: 0x94F2, + 48582 - 44032: 0x94F3, + 48583 - 44032: 0x94F4, + 48584 - 44032: 0x94F5, + 48585 - 44032: 0x94F6, + 48586 - 44032: 0x94F7, + 48587 - 44032: 0x94F8, + 48588 - 44032: 0x94F9, + 48589 - 44032: 0x94FA, + 48590 - 44032: 0x94FB, + 48591 - 44032: 0x94FC, + 48592 - 44032: 0x94FD, + 48593 - 44032: 0x94FE, + 48594 - 44032: 0x9541, + 48595 - 44032: 0x9542, + 48596 - 44032: 0xBADF, + 48597 - 44032: 0xBAE0, + 48598 - 44032: 0x9543, + 48599 - 44032: 0x9544, + 48600 - 44032: 0xBAE1, + 48601 - 44032: 0x9545, + 48602 - 44032: 0x9546, + 48603 - 44032: 0x9547, + 48604 - 44032: 0xBAE2, + 48605 - 44032: 0x9548, + 48606 - 44032: 0x9549, + 48607 - 44032: 0x954A, + 48608 - 44032: 0x954B, + 48609 - 44032: 0x954C, + 48610 - 44032: 0x954D, + 48611 - 44032: 0x954E, + 48612 - 44032: 0x954F, + 48613 - 44032: 0x9550, + 48614 - 44032: 0x9551, + 48615 - 44032: 0x9552, + 48616 - 44032: 0x9553, + 48617 - 44032: 0xBAE3, + 48618 - 44032: 0x9554, + 48619 - 44032: 0x9555, + 48620 - 44032: 0x9556, + 48621 - 44032: 0x9557, + 48622 - 44032: 0x9558, + 48623 - 44032: 0x9559, + 48624 - 44032: 0xBAE4, + 48625 - 44032: 0x955A, + 48626 - 44032: 0x9561, + 48627 - 44032: 0x9562, + 48628 - 44032: 0xBAE5, + 48629 - 44032: 0x9563, + 48630 - 44032: 0x9564, + 48631 - 44032: 0x9565, + 48632 - 44032: 0xBAE6, + 48633 - 44032: 0x9566, + 48634 - 44032: 0x9567, + 48635 - 44032: 0x9568, + 48636 - 44032: 0x9569, + 48637 - 44032: 0x956A, + 48638 - 44032: 0x956B, + 48639 - 44032: 0x956C, + 48640 - 44032: 0xBAE7, + 48641 - 44032: 0x956D, + 48642 - 44032: 0x956E, + 48643 - 44032: 0xBAE8, + 48644 - 44032: 0x956F, + 48645 - 44032: 0xBAE9, + 48646 - 44032: 0x9570, + 48647 - 44032: 0x9571, + 48648 - 44032: 0x9572, + 48649 - 44032: 0x9573, + 48650 - 44032: 0x9574, + 48651 - 44032: 0x9575, + 48652 - 44032: 0xBAEA, + 48653 - 44032: 0xBAEB, + 48654 - 44032: 0x9576, + 48655 - 44032: 0x9577, + 48656 - 44032: 0xBAEC, + 48657 - 44032: 0x9578, + 48658 - 44032: 0x9579, + 48659 - 44032: 0x957A, + 48660 - 44032: 0xBAED, + 48661 - 44032: 0x9581, + 48662 - 44032: 0x9582, + 48663 - 44032: 0x9583, + 48664 - 44032: 0x9584, + 48665 - 44032: 0x9585, + 48666 - 44032: 0x9586, + 48667 - 44032: 0x9587, + 48668 - 44032: 0xBAEE, + 48669 - 44032: 0xBAEF, + 48670 - 44032: 0x9588, + 48671 - 44032: 0xBAF0, + 48672 - 44032: 0x9589, + 48673 - 44032: 0x958A, + 48674 - 44032: 0x958B, + 48675 - 44032: 0x958C, + 48676 - 44032: 0x958D, + 48677 - 44032: 0x958E, + 48678 - 44032: 0x958F, + 48679 - 44032: 0x9590, + 48680 - 44032: 0x9591, + 48681 - 44032: 0x9592, + 48682 - 44032: 0x9593, + 48683 - 44032: 0x9594, + 48684 - 44032: 0x9595, + 48685 - 44032: 0x9596, + 48686 - 44032: 0x9597, + 48687 - 44032: 0x9598, + 48688 - 44032: 0x9599, + 48689 - 44032: 0x959A, + 48690 - 44032: 0x959B, + 48691 - 44032: 0x959C, + 48692 - 44032: 0x959D, + 48693 - 44032: 0x959E, + 48694 - 44032: 0x959F, + 48695 - 44032: 0x95A0, + 48696 - 44032: 0x95A1, + 48697 - 44032: 0x95A2, + 48698 - 44032: 0x95A3, + 48699 - 44032: 0x95A4, + 48700 - 44032: 0x95A5, + 48701 - 44032: 0x95A6, + 48702 - 44032: 0x95A7, + 48703 - 44032: 0x95A8, + 48704 - 44032: 0x95A9, + 48705 - 44032: 0x95AA, + 48706 - 44032: 0x95AB, + 48707 - 44032: 0x95AC, + 48708 - 44032: 0xBAF1, + 48709 - 44032: 0xBAF2, + 48710 - 44032: 0x95AD, + 48711 - 44032: 0x95AE, + 48712 - 44032: 0xBAF3, + 48713 - 44032: 0x95AF, + 48714 - 44032: 0x95B0, + 48715 - 44032: 0x95B1, + 48716 - 44032: 0xBAF4, + 48717 - 44032: 0x95B2, + 48718 - 44032: 0xBAF5, + 48719 - 44032: 0x95B3, + 48720 - 44032: 0x95B4, + 48721 - 44032: 0x95B5, + 48722 - 44032: 0x95B6, + 48723 - 44032: 0x95B7, + 48724 - 44032: 0xBAF6, + 48725 - 44032: 0xBAF7, + 48726 - 44032: 0x95B8, + 48727 - 44032: 0xBAF8, + 48728 - 44032: 0x95B9, + 48729 - 44032: 0xBAF9, + 48730 - 44032: 0xBAFA, + 48731 - 44032: 0xBAFB, + 48732 - 44032: 0x95BA, + 48733 - 44032: 0x95BB, + 48734 - 44032: 0x95BC, + 48735 - 44032: 0x95BD, + 48736 - 44032: 0xBAFC, + 48737 - 44032: 0xBAFD, + 48738 - 44032: 0x95BE, + 48739 - 44032: 0x95BF, + 48740 - 44032: 0xBAFE, + 48741 - 44032: 0x95C0, + 48742 - 44032: 0x95C1, + 48743 - 44032: 0x95C2, + 48744 - 44032: 0xBBA1, + 48745 - 44032: 0x95C3, + 48746 - 44032: 0xBBA2, + 48747 - 44032: 0x95C4, + 48748 - 44032: 0x95C5, + 48749 - 44032: 0x95C6, + 48750 - 44032: 0x95C7, + 48751 - 44032: 0x95C8, + 48752 - 44032: 0xBBA3, + 48753 - 44032: 0xBBA4, + 48754 - 44032: 0x95C9, + 48755 - 44032: 0xBBA5, + 48756 - 44032: 0xBBA6, + 48757 - 44032: 0xBBA7, + 48758 - 44032: 0x95CA, + 48759 - 44032: 0x95CB, + 48760 - 44032: 0x95CC, + 48761 - 44032: 0x95CD, + 48762 - 44032: 0x95CE, + 48763 - 44032: 0xBBA8, + 48764 - 44032: 0xBBA9, + 48765 - 44032: 0xBBAA, + 48766 - 44032: 0x95CF, + 48767 - 44032: 0x95D0, + 48768 - 44032: 0xBBAB, + 48769 - 44032: 0x95D1, + 48770 - 44032: 0x95D2, + 48771 - 44032: 0x95D3, + 48772 - 44032: 0xBBAC, + 48773 - 44032: 0x95D4, + 48774 - 44032: 0x95D5, + 48775 - 44032: 0x95D6, + 48776 - 44032: 0x95D7, + 48777 - 44032: 0x95D8, + 48778 - 44032: 0x95D9, + 48779 - 44032: 0x95DA, + 48780 - 44032: 0xBBAD, + 48781 - 44032: 0xBBAE, + 48782 - 44032: 0x95DB, + 48783 - 44032: 0xBBAF, + 48784 - 44032: 0xBBB0, + 48785 - 44032: 0xBBB1, + 48786 - 44032: 0x95DC, + 48787 - 44032: 0x95DD, + 48788 - 44032: 0x95DE, + 48789 - 44032: 0x95DF, + 48790 - 44032: 0x95E0, + 48791 - 44032: 0x95E1, + 48792 - 44032: 0xBBB2, + 48793 - 44032: 0xBBB3, + 48794 - 44032: 0x95E2, + 48795 - 44032: 0x95E3, + 48796 - 44032: 0x95E4, + 48797 - 44032: 0x95E5, + 48798 - 44032: 0x95E6, + 48799 - 44032: 0x95E7, + 48800 - 44032: 0x95E8, + 48801 - 44032: 0x95E9, + 48802 - 44032: 0x95EA, + 48803 - 44032: 0x95EB, + 48804 - 44032: 0x95EC, + 48805 - 44032: 0x95ED, + 48806 - 44032: 0x95EE, + 48807 - 44032: 0x95EF, + 48808 - 44032: 0xBBB4, + 48809 - 44032: 0x95F0, + 48810 - 44032: 0x95F1, + 48811 - 44032: 0x95F2, + 48812 - 44032: 0x95F3, + 48813 - 44032: 0x95F4, + 48814 - 44032: 0x95F5, + 48815 - 44032: 0x95F6, + 48816 - 44032: 0x95F7, + 48817 - 44032: 0x95F8, + 48818 - 44032: 0x95F9, + 48819 - 44032: 0x95FA, + 48820 - 44032: 0x95FB, + 48821 - 44032: 0x95FC, + 48822 - 44032: 0x95FD, + 48823 - 44032: 0x95FE, + 48824 - 44032: 0x9641, + 48825 - 44032: 0x9642, + 48826 - 44032: 0x9643, + 48827 - 44032: 0x9644, + 48828 - 44032: 0x9645, + 48829 - 44032: 0x9646, + 48830 - 44032: 0x9647, + 48831 - 44032: 0x9648, + 48832 - 44032: 0x9649, + 48833 - 44032: 0x964A, + 48834 - 44032: 0x964B, + 48835 - 44032: 0x964C, + 48836 - 44032: 0x964D, + 48837 - 44032: 0x964E, + 48838 - 44032: 0x964F, + 48839 - 44032: 0x9650, + 48840 - 44032: 0x9651, + 48841 - 44032: 0x9652, + 48842 - 44032: 0x9653, + 48843 - 44032: 0x9654, + 48844 - 44032: 0x9655, + 48845 - 44032: 0x9656, + 48846 - 44032: 0x9657, + 48847 - 44032: 0x9658, + 48848 - 44032: 0xBBB5, + 48849 - 44032: 0xBBB6, + 48850 - 44032: 0x9659, + 48851 - 44032: 0x965A, + 48852 - 44032: 0xBBB7, + 48853 - 44032: 0x9661, + 48854 - 44032: 0x9662, + 48855 - 44032: 0xBBB8, + 48856 - 44032: 0xBBB9, + 48857 - 44032: 0x9663, + 48858 - 44032: 0x9664, + 48859 - 44032: 0x9665, + 48860 - 44032: 0x9666, + 48861 - 44032: 0x9667, + 48862 - 44032: 0x9668, + 48863 - 44032: 0x9669, + 48864 - 44032: 0xBBBA, + 48865 - 44032: 0x966A, + 48866 - 44032: 0x966B, + 48867 - 44032: 0xBBBB, + 48868 - 44032: 0xBBBC, + 48869 - 44032: 0xBBBD, + 48870 - 44032: 0x966C, + 48871 - 44032: 0x966D, + 48872 - 44032: 0x966E, + 48873 - 44032: 0x966F, + 48874 - 44032: 0x9670, + 48875 - 44032: 0x9671, + 48876 - 44032: 0xBBBE, + 48877 - 44032: 0x9672, + 48878 - 44032: 0x9673, + 48879 - 44032: 0x9674, + 48880 - 44032: 0x9675, + 48881 - 44032: 0x9676, + 48882 - 44032: 0x9677, + 48883 - 44032: 0x9678, + 48884 - 44032: 0x9679, + 48885 - 44032: 0x967A, + 48886 - 44032: 0x9681, + 48887 - 44032: 0x9682, + 48888 - 44032: 0x9683, + 48889 - 44032: 0x9684, + 48890 - 44032: 0x9685, + 48891 - 44032: 0x9686, + 48892 - 44032: 0x9687, + 48893 - 44032: 0x9688, + 48894 - 44032: 0x9689, + 48895 - 44032: 0x968A, + 48896 - 44032: 0x968B, + 48897 - 44032: 0xBBBF, + 48898 - 44032: 0x968C, + 48899 - 44032: 0x968D, + 48900 - 44032: 0x968E, + 48901 - 44032: 0x968F, + 48902 - 44032: 0x9690, + 48903 - 44032: 0x9691, + 48904 - 44032: 0xBBC0, + 48905 - 44032: 0xBBC1, + 48906 - 44032: 0x9692, + 48907 - 44032: 0x9693, + 48908 - 44032: 0x9694, + 48909 - 44032: 0x9695, + 48910 - 44032: 0x9696, + 48911 - 44032: 0x9697, + 48912 - 44032: 0x9698, + 48913 - 44032: 0x9699, + 48914 - 44032: 0x969A, + 48915 - 44032: 0x969B, + 48916 - 44032: 0x969C, + 48917 - 44032: 0x969D, + 48918 - 44032: 0x969E, + 48919 - 44032: 0x969F, + 48920 - 44032: 0xBBC2, + 48921 - 44032: 0xBBC3, + 48922 - 44032: 0x96A0, + 48923 - 44032: 0xBBC4, + 48924 - 44032: 0xBBC5, + 48925 - 44032: 0xBBC6, + 48926 - 44032: 0x96A1, + 48927 - 44032: 0x96A2, + 48928 - 44032: 0x96A3, + 48929 - 44032: 0x96A4, + 48930 - 44032: 0x96A5, + 48931 - 44032: 0x96A6, + 48932 - 44032: 0x96A7, + 48933 - 44032: 0x96A8, + 48934 - 44032: 0x96A9, + 48935 - 44032: 0x96AA, + 48936 - 44032: 0x96AB, + 48937 - 44032: 0x96AC, + 48938 - 44032: 0x96AD, + 48939 - 44032: 0x96AE, + 48940 - 44032: 0x96AF, + 48941 - 44032: 0x96B0, + 48942 - 44032: 0x96B1, + 48943 - 44032: 0x96B2, + 48944 - 44032: 0x96B3, + 48945 - 44032: 0x96B4, + 48946 - 44032: 0x96B5, + 48947 - 44032: 0x96B6, + 48948 - 44032: 0x96B7, + 48949 - 44032: 0x96B8, + 48950 - 44032: 0x96B9, + 48951 - 44032: 0x96BA, + 48952 - 44032: 0x96BB, + 48953 - 44032: 0x96BC, + 48954 - 44032: 0x96BD, + 48955 - 44032: 0x96BE, + 48956 - 44032: 0x96BF, + 48957 - 44032: 0x96C0, + 48958 - 44032: 0x96C1, + 48959 - 44032: 0x96C2, + 48960 - 44032: 0xBBC7, + 48961 - 44032: 0xBBC8, + 48962 - 44032: 0x96C3, + 48963 - 44032: 0x96C4, + 48964 - 44032: 0xBBC9, + 48965 - 44032: 0x96C5, + 48966 - 44032: 0x96C6, + 48967 - 44032: 0x96C7, + 48968 - 44032: 0xBBCA, + 48969 - 44032: 0x96C8, + 48970 - 44032: 0x96C9, + 48971 - 44032: 0x96CA, + 48972 - 44032: 0x96CB, + 48973 - 44032: 0x96CC, + 48974 - 44032: 0x96CD, + 48975 - 44032: 0x96CE, + 48976 - 44032: 0xBBCB, + 48977 - 44032: 0xBBCC, + 48978 - 44032: 0x96CF, + 48979 - 44032: 0x96D0, + 48980 - 44032: 0x96D1, + 48981 - 44032: 0xBBCD, + 48982 - 44032: 0x96D2, + 48983 - 44032: 0x96D3, + 48984 - 44032: 0x96D4, + 48985 - 44032: 0x96D5, + 48986 - 44032: 0x96D6, + 48987 - 44032: 0x96D7, + 48988 - 44032: 0x96D8, + 48989 - 44032: 0x96D9, + 48990 - 44032: 0x96DA, + 48991 - 44032: 0x96DB, + 48992 - 44032: 0x96DC, + 48993 - 44032: 0x96DD, + 48994 - 44032: 0x96DE, + 48995 - 44032: 0x96DF, + 48996 - 44032: 0x96E0, + 48997 - 44032: 0x96E1, + 48998 - 44032: 0x96E2, + 48999 - 44032: 0x96E3, + 49000 - 44032: 0x96E4, + 49001 - 44032: 0x96E5, + 49002 - 44032: 0x96E6, + 49003 - 44032: 0x96E7, + 49004 - 44032: 0x96E8, + 49005 - 44032: 0x96E9, + 49006 - 44032: 0x96EA, + 49007 - 44032: 0x96EB, + 49008 - 44032: 0x96EC, + 49009 - 44032: 0x96ED, + 49010 - 44032: 0x96EE, + 49011 - 44032: 0x96EF, + 49012 - 44032: 0x96F0, + 49013 - 44032: 0x96F1, + 49014 - 44032: 0x96F2, + 49015 - 44032: 0x96F3, + 49016 - 44032: 0x96F4, + 49017 - 44032: 0x96F5, + 49018 - 44032: 0x96F6, + 49019 - 44032: 0x96F7, + 49020 - 44032: 0x96F8, + 49021 - 44032: 0x96F9, + 49022 - 44032: 0x96FA, + 49023 - 44032: 0x96FB, + 49024 - 44032: 0x96FC, + 49025 - 44032: 0x96FD, + 49026 - 44032: 0x96FE, + 49027 - 44032: 0x9741, + 49028 - 44032: 0x9742, + 49029 - 44032: 0x9743, + 49030 - 44032: 0x9744, + 49031 - 44032: 0x9745, + 49032 - 44032: 0x9746, + 49033 - 44032: 0x9747, + 49034 - 44032: 0x9748, + 49035 - 44032: 0x9749, + 49036 - 44032: 0x974A, + 49037 - 44032: 0x974B, + 49038 - 44032: 0x974C, + 49039 - 44032: 0x974D, + 49040 - 44032: 0x974E, + 49041 - 44032: 0x974F, + 49042 - 44032: 0x9750, + 49043 - 44032: 0x9751, + 49044 - 44032: 0xBBCE, + 49045 - 44032: 0x9752, + 49046 - 44032: 0x9753, + 49047 - 44032: 0x9754, + 49048 - 44032: 0x9755, + 49049 - 44032: 0x9756, + 49050 - 44032: 0x9757, + 49051 - 44032: 0x9758, + 49052 - 44032: 0x9759, + 49053 - 44032: 0x975A, + 49054 - 44032: 0x9761, + 49055 - 44032: 0x9762, + 49056 - 44032: 0x9763, + 49057 - 44032: 0x9764, + 49058 - 44032: 0x9765, + 49059 - 44032: 0x9766, + 49060 - 44032: 0x9767, + 49061 - 44032: 0x9768, + 49062 - 44032: 0x9769, + 49063 - 44032: 0x976A, + 49064 - 44032: 0x976B, + 49065 - 44032: 0x976C, + 49066 - 44032: 0x976D, + 49067 - 44032: 0x976E, + 49068 - 44032: 0x976F, + 49069 - 44032: 0x9770, + 49070 - 44032: 0x9771, + 49071 - 44032: 0x9772, + 49072 - 44032: 0xBBCF, + 49073 - 44032: 0x9773, + 49074 - 44032: 0x9774, + 49075 - 44032: 0x9775, + 49076 - 44032: 0x9776, + 49077 - 44032: 0x9777, + 49078 - 44032: 0x9778, + 49079 - 44032: 0x9779, + 49080 - 44032: 0x977A, + 49081 - 44032: 0x9781, + 49082 - 44032: 0x9782, + 49083 - 44032: 0x9783, + 49084 - 44032: 0x9784, + 49085 - 44032: 0x9785, + 49086 - 44032: 0x9786, + 49087 - 44032: 0x9787, + 49088 - 44032: 0x9788, + 49089 - 44032: 0x9789, + 49090 - 44032: 0x978A, + 49091 - 44032: 0x978B, + 49092 - 44032: 0x978C, + 49093 - 44032: 0xBBD0, + 49094 - 44032: 0x978D, + 49095 - 44032: 0x978E, + 49096 - 44032: 0x978F, + 49097 - 44032: 0x9790, + 49098 - 44032: 0x9791, + 49099 - 44032: 0x9792, + 49100 - 44032: 0xBBD1, + 49101 - 44032: 0xBBD2, + 49102 - 44032: 0x9793, + 49103 - 44032: 0x9794, + 49104 - 44032: 0xBBD3, + 49105 - 44032: 0x9795, + 49106 - 44032: 0x9796, + 49107 - 44032: 0x9797, + 49108 - 44032: 0xBBD4, + 49109 - 44032: 0x9798, + 49110 - 44032: 0x9799, + 49111 - 44032: 0x979A, + 49112 - 44032: 0x979B, + 49113 - 44032: 0x979C, + 49114 - 44032: 0x979D, + 49115 - 44032: 0x979E, + 49116 - 44032: 0xBBD5, + 49117 - 44032: 0x979F, + 49118 - 44032: 0x97A0, + 49119 - 44032: 0xBBD6, + 49120 - 44032: 0x97A1, + 49121 - 44032: 0xBBD7, + 49122 - 44032: 0x97A2, + 49123 - 44032: 0x97A3, + 49124 - 44032: 0x97A4, + 49125 - 44032: 0x97A5, + 49126 - 44032: 0x97A6, + 49127 - 44032: 0x97A7, + 49128 - 44032: 0x97A8, + 49129 - 44032: 0x97A9, + 49130 - 44032: 0x97AA, + 49131 - 44032: 0x97AB, + 49132 - 44032: 0x97AC, + 49133 - 44032: 0x97AD, + 49134 - 44032: 0x97AE, + 49135 - 44032: 0x97AF, + 49136 - 44032: 0x97B0, + 49137 - 44032: 0x97B1, + 49138 - 44032: 0x97B2, + 49139 - 44032: 0x97B3, + 49140 - 44032: 0x97B4, + 49141 - 44032: 0x97B5, + 49142 - 44032: 0x97B6, + 49143 - 44032: 0x97B7, + 49144 - 44032: 0x97B8, + 49145 - 44032: 0x97B9, + 49146 - 44032: 0x97BA, + 49147 - 44032: 0x97BB, + 49148 - 44032: 0x97BC, + 49149 - 44032: 0x97BD, + 49150 - 44032: 0x97BE, + 49151 - 44032: 0x97BF, + 49152 - 44032: 0x97C0, + 49153 - 44032: 0x97C1, + 49154 - 44032: 0x97C2, + 49155 - 44032: 0x97C3, + 49156 - 44032: 0x97C4, + 49157 - 44032: 0x97C5, + 49158 - 44032: 0x97C6, + 49159 - 44032: 0x97C7, + 49160 - 44032: 0x97C8, + 49161 - 44032: 0x97C9, + 49162 - 44032: 0x97CA, + 49163 - 44032: 0x97CB, + 49164 - 44032: 0x97CC, + 49165 - 44032: 0x97CD, + 49166 - 44032: 0x97CE, + 49167 - 44032: 0x97CF, + 49168 - 44032: 0x97D0, + 49169 - 44032: 0x97D1, + 49170 - 44032: 0x97D2, + 49171 - 44032: 0x97D3, + 49172 - 44032: 0x97D4, + 49173 - 44032: 0x97D5, + 49174 - 44032: 0x97D6, + 49175 - 44032: 0x97D7, + 49176 - 44032: 0x97D8, + 49177 - 44032: 0x97D9, + 49178 - 44032: 0x97DA, + 49179 - 44032: 0x97DB, + 49180 - 44032: 0x97DC, + 49181 - 44032: 0x97DD, + 49182 - 44032: 0x97DE, + 49183 - 44032: 0x97DF, + 49184 - 44032: 0x97E0, + 49185 - 44032: 0x97E1, + 49186 - 44032: 0x97E2, + 49187 - 44032: 0x97E3, + 49188 - 44032: 0x97E4, + 49189 - 44032: 0x97E5, + 49190 - 44032: 0x97E6, + 49191 - 44032: 0x97E7, + 49192 - 44032: 0x97E8, + 49193 - 44032: 0x97E9, + 49194 - 44032: 0x97EA, + 49195 - 44032: 0x97EB, + 49196 - 44032: 0x97EC, + 49197 - 44032: 0x97ED, + 49198 - 44032: 0x97EE, + 49199 - 44032: 0x97EF, + 49200 - 44032: 0x97F0, + 49201 - 44032: 0x97F1, + 49202 - 44032: 0x97F2, + 49203 - 44032: 0x97F3, + 49204 - 44032: 0x97F4, + 49205 - 44032: 0x97F5, + 49206 - 44032: 0x97F6, + 49207 - 44032: 0x97F7, + 49208 - 44032: 0x97F8, + 49209 - 44032: 0x97F9, + 49210 - 44032: 0x97FA, + 49211 - 44032: 0x97FB, + 49212 - 44032: 0xBBD8, + 49213 - 44032: 0x97FC, + 49214 - 44032: 0x97FD, + 49215 - 44032: 0x97FE, + 49216 - 44032: 0x9841, + 49217 - 44032: 0x9842, + 49218 - 44032: 0x9843, + 49219 - 44032: 0x9844, + 49220 - 44032: 0x9845, + 49221 - 44032: 0x9846, + 49222 - 44032: 0x9847, + 49223 - 44032: 0x9848, + 49224 - 44032: 0x9849, + 49225 - 44032: 0x984A, + 49226 - 44032: 0x984B, + 49227 - 44032: 0x984C, + 49228 - 44032: 0x984D, + 49229 - 44032: 0x984E, + 49230 - 44032: 0x984F, + 49231 - 44032: 0x9850, + 49232 - 44032: 0x9851, + 49233 - 44032: 0xBBD9, + 49234 - 44032: 0x9852, + 49235 - 44032: 0x9853, + 49236 - 44032: 0x9854, + 49237 - 44032: 0x9855, + 49238 - 44032: 0x9856, + 49239 - 44032: 0x9857, + 49240 - 44032: 0xBBDA, + 49241 - 44032: 0x9858, + 49242 - 44032: 0x9859, + 49243 - 44032: 0x985A, + 49244 - 44032: 0xBBDB, + 49245 - 44032: 0x9861, + 49246 - 44032: 0x9862, + 49247 - 44032: 0x9863, + 49248 - 44032: 0xBBDC, + 49249 - 44032: 0x9864, + 49250 - 44032: 0x9865, + 49251 - 44032: 0x9866, + 49252 - 44032: 0x9867, + 49253 - 44032: 0x9868, + 49254 - 44032: 0x9869, + 49255 - 44032: 0x986A, + 49256 - 44032: 0xBBDD, + 49257 - 44032: 0xBBDE, + 49258 - 44032: 0x986B, + 49259 - 44032: 0x986C, + 49260 - 44032: 0x986D, + 49261 - 44032: 0x986E, + 49262 - 44032: 0x986F, + 49263 - 44032: 0x9870, + 49264 - 44032: 0x9871, + 49265 - 44032: 0x9872, + 49266 - 44032: 0x9873, + 49267 - 44032: 0x9874, + 49268 - 44032: 0x9875, + 49269 - 44032: 0x9876, + 49270 - 44032: 0x9877, + 49271 - 44032: 0x9878, + 49272 - 44032: 0x9879, + 49273 - 44032: 0x987A, + 49274 - 44032: 0x9881, + 49275 - 44032: 0x9882, + 49276 - 44032: 0x9883, + 49277 - 44032: 0x9884, + 49278 - 44032: 0x9885, + 49279 - 44032: 0x9886, + 49280 - 44032: 0x9887, + 49281 - 44032: 0x9888, + 49282 - 44032: 0x9889, + 49283 - 44032: 0x988A, + 49284 - 44032: 0x988B, + 49285 - 44032: 0x988C, + 49286 - 44032: 0x988D, + 49287 - 44032: 0x988E, + 49288 - 44032: 0x988F, + 49289 - 44032: 0x9890, + 49290 - 44032: 0x9891, + 49291 - 44032: 0x9892, + 49292 - 44032: 0x9893, + 49293 - 44032: 0x9894, + 49294 - 44032: 0x9895, + 49295 - 44032: 0x9896, + 49296 - 44032: 0xBBDF, + 49297 - 44032: 0xBBE0, + 49298 - 44032: 0x9897, + 49299 - 44032: 0x9898, + 49300 - 44032: 0xBBE1, + 49301 - 44032: 0x9899, + 49302 - 44032: 0x989A, + 49303 - 44032: 0x989B, + 49304 - 44032: 0xBBE2, + 49305 - 44032: 0x989C, + 49306 - 44032: 0x989D, + 49307 - 44032: 0x989E, + 49308 - 44032: 0x989F, + 49309 - 44032: 0x98A0, + 49310 - 44032: 0x98A1, + 49311 - 44032: 0x98A2, + 49312 - 44032: 0xBBE3, + 49313 - 44032: 0xBBE4, + 49314 - 44032: 0x98A3, + 49315 - 44032: 0xBBE5, + 49316 - 44032: 0x98A4, + 49317 - 44032: 0xBBE6, + 49318 - 44032: 0x98A5, + 49319 - 44032: 0x98A6, + 49320 - 44032: 0x98A7, + 49321 - 44032: 0x98A8, + 49322 - 44032: 0x98A9, + 49323 - 44032: 0x98AA, + 49324 - 44032: 0xBBE7, + 49325 - 44032: 0xBBE8, + 49326 - 44032: 0x98AB, + 49327 - 44032: 0xBBE9, + 49328 - 44032: 0xBBEA, + 49329 - 44032: 0x98AC, + 49330 - 44032: 0x98AD, + 49331 - 44032: 0xBBEB, + 49332 - 44032: 0xBBEC, + 49333 - 44032: 0xBBED, + 49334 - 44032: 0xBBEE, + 49335 - 44032: 0x98AE, + 49336 - 44032: 0x98AF, + 49337 - 44032: 0x98B0, + 49338 - 44032: 0x98B1, + 49339 - 44032: 0x98B2, + 49340 - 44032: 0xBBEF, + 49341 - 44032: 0xBBF0, + 49342 - 44032: 0x98B3, + 49343 - 44032: 0xBBF1, + 49344 - 44032: 0xBBF2, + 49345 - 44032: 0xBBF3, + 49346 - 44032: 0x98B4, + 49347 - 44032: 0x98B5, + 49348 - 44032: 0x98B6, + 49349 - 44032: 0xBBF4, + 49350 - 44032: 0x98B7, + 49351 - 44032: 0x98B8, + 49352 - 44032: 0xBBF5, + 49353 - 44032: 0xBBF6, + 49354 - 44032: 0x98B9, + 49355 - 44032: 0x98BA, + 49356 - 44032: 0xBBF7, + 49357 - 44032: 0x98BB, + 49358 - 44032: 0x98BC, + 49359 - 44032: 0x98BD, + 49360 - 44032: 0xBBF8, + 49361 - 44032: 0x98BE, + 49362 - 44032: 0x98BF, + 49363 - 44032: 0x98C0, + 49364 - 44032: 0x98C1, + 49365 - 44032: 0x98C2, + 49366 - 44032: 0x98C3, + 49367 - 44032: 0x98C4, + 49368 - 44032: 0xBBF9, + 49369 - 44032: 0xBBFA, + 49370 - 44032: 0x98C5, + 49371 - 44032: 0xBBFB, + 49372 - 44032: 0xBBFC, + 49373 - 44032: 0xBBFD, + 49374 - 44032: 0x98C6, + 49375 - 44032: 0x98C7, + 49376 - 44032: 0x98C8, + 49377 - 44032: 0x98C9, + 49378 - 44032: 0x98CA, + 49379 - 44032: 0x98CB, + 49380 - 44032: 0xBBFE, + 49381 - 44032: 0xBCA1, + 49382 - 44032: 0x98CC, + 49383 - 44032: 0x98CD, + 49384 - 44032: 0xBCA2, + 49385 - 44032: 0x98CE, + 49386 - 44032: 0x98CF, + 49387 - 44032: 0x98D0, + 49388 - 44032: 0xBCA3, + 49389 - 44032: 0x98D1, + 49390 - 44032: 0x98D2, + 49391 - 44032: 0x98D3, + 49392 - 44032: 0x98D4, + 49393 - 44032: 0x98D5, + 49394 - 44032: 0x98D6, + 49395 - 44032: 0x98D7, + 49396 - 44032: 0xBCA4, + 49397 - 44032: 0xBCA5, + 49398 - 44032: 0x98D8, + 49399 - 44032: 0xBCA6, + 49400 - 44032: 0x98D9, + 49401 - 44032: 0xBCA7, + 49402 - 44032: 0x98DA, + 49403 - 44032: 0x98DB, + 49404 - 44032: 0x98DC, + 49405 - 44032: 0x98DD, + 49406 - 44032: 0x98DE, + 49407 - 44032: 0x98DF, + 49408 - 44032: 0xBCA8, + 49409 - 44032: 0x98E0, + 49410 - 44032: 0x98E1, + 49411 - 44032: 0x98E2, + 49412 - 44032: 0xBCA9, + 49413 - 44032: 0x98E3, + 49414 - 44032: 0x98E4, + 49415 - 44032: 0x98E5, + 49416 - 44032: 0xBCAA, + 49417 - 44032: 0x98E6, + 49418 - 44032: 0x98E7, + 49419 - 44032: 0x98E8, + 49420 - 44032: 0x98E9, + 49421 - 44032: 0x98EA, + 49422 - 44032: 0x98EB, + 49423 - 44032: 0x98EC, + 49424 - 44032: 0xBCAB, + 49425 - 44032: 0x98ED, + 49426 - 44032: 0x98EE, + 49427 - 44032: 0x98EF, + 49428 - 44032: 0x98F0, + 49429 - 44032: 0xBCAC, + 49430 - 44032: 0x98F1, + 49431 - 44032: 0x98F2, + 49432 - 44032: 0x98F3, + 49433 - 44032: 0x98F4, + 49434 - 44032: 0x98F5, + 49435 - 44032: 0x98F6, + 49436 - 44032: 0xBCAD, + 49437 - 44032: 0xBCAE, + 49438 - 44032: 0xBCAF, + 49439 - 44032: 0xBCB0, + 49440 - 44032: 0xBCB1, + 49441 - 44032: 0x98F7, + 49442 - 44032: 0x98F8, + 49443 - 44032: 0xBCB2, + 49444 - 44032: 0xBCB3, + 49445 - 44032: 0x98F9, + 49446 - 44032: 0xBCB4, + 49447 - 44032: 0xBCB5, + 49448 - 44032: 0x98FA, + 49449 - 44032: 0x98FB, + 49450 - 44032: 0x98FC, + 49451 - 44032: 0x98FD, + 49452 - 44032: 0xBCB6, + 49453 - 44032: 0xBCB7, + 49454 - 44032: 0x98FE, + 49455 - 44032: 0xBCB8, + 49456 - 44032: 0xBCB9, + 49457 - 44032: 0xBCBA, + 49458 - 44032: 0x9941, + 49459 - 44032: 0x9942, + 49460 - 44032: 0x9943, + 49461 - 44032: 0x9944, + 49462 - 44032: 0xBCBB, + 49463 - 44032: 0x9945, + 49464 - 44032: 0xBCBC, + 49465 - 44032: 0xBCBD, + 49466 - 44032: 0x9946, + 49467 - 44032: 0x9947, + 49468 - 44032: 0xBCBE, + 49469 - 44032: 0x9948, + 49470 - 44032: 0x9949, + 49471 - 44032: 0x994A, + 49472 - 44032: 0xBCBF, + 49473 - 44032: 0x994B, + 49474 - 44032: 0x994C, + 49475 - 44032: 0x994D, + 49476 - 44032: 0x994E, + 49477 - 44032: 0x994F, + 49478 - 44032: 0x9950, + 49479 - 44032: 0x9951, + 49480 - 44032: 0xBCC0, + 49481 - 44032: 0xBCC1, + 49482 - 44032: 0x9952, + 49483 - 44032: 0xBCC2, + 49484 - 44032: 0xBCC3, + 49485 - 44032: 0xBCC4, + 49486 - 44032: 0x9953, + 49487 - 44032: 0x9954, + 49488 - 44032: 0x9955, + 49489 - 44032: 0x9956, + 49490 - 44032: 0x9957, + 49491 - 44032: 0x9958, + 49492 - 44032: 0xBCC5, + 49493 - 44032: 0xBCC6, + 49494 - 44032: 0x9959, + 49495 - 44032: 0x995A, + 49496 - 44032: 0xBCC7, + 49497 - 44032: 0x9961, + 49498 - 44032: 0x9962, + 49499 - 44032: 0x9963, + 49500 - 44032: 0xBCC8, + 49501 - 44032: 0x9964, + 49502 - 44032: 0x9965, + 49503 - 44032: 0x9966, + 49504 - 44032: 0x9967, + 49505 - 44032: 0x9968, + 49506 - 44032: 0x9969, + 49507 - 44032: 0x996A, + 49508 - 44032: 0xBCC9, + 49509 - 44032: 0xBCCA, + 49510 - 44032: 0x996B, + 49511 - 44032: 0xBCCB, + 49512 - 44032: 0xBCCC, + 49513 - 44032: 0xBCCD, + 49514 - 44032: 0x996C, + 49515 - 44032: 0x996D, + 49516 - 44032: 0x996E, + 49517 - 44032: 0x996F, + 49518 - 44032: 0x9970, + 49519 - 44032: 0x9971, + 49520 - 44032: 0xBCCE, + 49521 - 44032: 0x9972, + 49522 - 44032: 0x9973, + 49523 - 44032: 0x9974, + 49524 - 44032: 0xBCCF, + 49525 - 44032: 0x9975, + 49526 - 44032: 0x9976, + 49527 - 44032: 0x9977, + 49528 - 44032: 0xBCD0, + 49529 - 44032: 0x9978, + 49530 - 44032: 0x9979, + 49531 - 44032: 0x997A, + 49532 - 44032: 0x9981, + 49533 - 44032: 0x9982, + 49534 - 44032: 0x9983, + 49535 - 44032: 0x9984, + 49536 - 44032: 0x9985, + 49537 - 44032: 0x9986, + 49538 - 44032: 0x9987, + 49539 - 44032: 0x9988, + 49540 - 44032: 0x9989, + 49541 - 44032: 0xBCD1, + 49542 - 44032: 0x998A, + 49543 - 44032: 0x998B, + 49544 - 44032: 0x998C, + 49545 - 44032: 0x998D, + 49546 - 44032: 0x998E, + 49547 - 44032: 0x998F, + 49548 - 44032: 0xBCD2, + 49549 - 44032: 0xBCD3, + 49550 - 44032: 0xBCD4, + 49551 - 44032: 0x9990, + 49552 - 44032: 0xBCD5, + 49553 - 44032: 0x9991, + 49554 - 44032: 0x9992, + 49555 - 44032: 0x9993, + 49556 - 44032: 0xBCD6, + 49557 - 44032: 0x9994, + 49558 - 44032: 0xBCD7, + 49559 - 44032: 0x9995, + 49560 - 44032: 0x9996, + 49561 - 44032: 0x9997, + 49562 - 44032: 0x9998, + 49563 - 44032: 0x9999, + 49564 - 44032: 0xBCD8, + 49565 - 44032: 0xBCD9, + 49566 - 44032: 0x999A, + 49567 - 44032: 0xBCDA, + 49568 - 44032: 0x999B, + 49569 - 44032: 0xBCDB, + 49570 - 44032: 0x999C, + 49571 - 44032: 0x999D, + 49572 - 44032: 0x999E, + 49573 - 44032: 0xBCDC, + 49574 - 44032: 0x999F, + 49575 - 44032: 0x99A0, + 49576 - 44032: 0xBCDD, + 49577 - 44032: 0xBCDE, + 49578 - 44032: 0x99A1, + 49579 - 44032: 0x99A2, + 49580 - 44032: 0xBCDF, + 49581 - 44032: 0x99A3, + 49582 - 44032: 0x99A4, + 49583 - 44032: 0x99A5, + 49584 - 44032: 0xBCE0, + 49585 - 44032: 0x99A6, + 49586 - 44032: 0x99A7, + 49587 - 44032: 0x99A8, + 49588 - 44032: 0x99A9, + 49589 - 44032: 0x99AA, + 49590 - 44032: 0x99AB, + 49591 - 44032: 0x99AC, + 49592 - 44032: 0x99AD, + 49593 - 44032: 0x99AE, + 49594 - 44032: 0x99AF, + 49595 - 44032: 0x99B0, + 49596 - 44032: 0x99B1, + 49597 - 44032: 0xBCE1, + 49598 - 44032: 0x99B2, + 49599 - 44032: 0x99B3, + 49600 - 44032: 0x99B4, + 49601 - 44032: 0x99B5, + 49602 - 44032: 0x99B6, + 49603 - 44032: 0x99B7, + 49604 - 44032: 0xBCE2, + 49605 - 44032: 0x99B8, + 49606 - 44032: 0x99B9, + 49607 - 44032: 0x99BA, + 49608 - 44032: 0xBCE3, + 49609 - 44032: 0x99BB, + 49610 - 44032: 0x99BC, + 49611 - 44032: 0x99BD, + 49612 - 44032: 0xBCE4, + 49613 - 44032: 0x99BE, + 49614 - 44032: 0x99BF, + 49615 - 44032: 0x99C0, + 49616 - 44032: 0x99C1, + 49617 - 44032: 0x99C2, + 49618 - 44032: 0x99C3, + 49619 - 44032: 0x99C4, + 49620 - 44032: 0xBCE5, + 49621 - 44032: 0x99C5, + 49622 - 44032: 0x99C6, + 49623 - 44032: 0xBCE6, + 49624 - 44032: 0xBCE7, + 49625 - 44032: 0x99C7, + 49626 - 44032: 0x99C8, + 49627 - 44032: 0x99C9, + 49628 - 44032: 0x99CA, + 49629 - 44032: 0x99CB, + 49630 - 44032: 0x99CC, + 49631 - 44032: 0x99CD, + 49632 - 44032: 0xBCE8, + 49633 - 44032: 0x99CE, + 49634 - 44032: 0x99CF, + 49635 - 44032: 0x99D0, + 49636 - 44032: 0xBCE9, + 49637 - 44032: 0x99D1, + 49638 - 44032: 0x99D2, + 49639 - 44032: 0x99D3, + 49640 - 44032: 0xBCEA, + 49641 - 44032: 0x99D4, + 49642 - 44032: 0x99D5, + 49643 - 44032: 0x99D6, + 49644 - 44032: 0x99D7, + 49645 - 44032: 0x99D8, + 49646 - 44032: 0x99D9, + 49647 - 44032: 0x99DA, + 49648 - 44032: 0xBCEB, + 49649 - 44032: 0xBCEC, + 49650 - 44032: 0x99DB, + 49651 - 44032: 0xBCED, + 49652 - 44032: 0x99DC, + 49653 - 44032: 0x99DD, + 49654 - 44032: 0x99DE, + 49655 - 44032: 0x99DF, + 49656 - 44032: 0x99E0, + 49657 - 44032: 0x99E1, + 49658 - 44032: 0x99E2, + 49659 - 44032: 0x99E3, + 49660 - 44032: 0xBCEE, + 49661 - 44032: 0xBCEF, + 49662 - 44032: 0x99E4, + 49663 - 44032: 0x99E5, + 49664 - 44032: 0xBCF0, + 49665 - 44032: 0x99E6, + 49666 - 44032: 0x99E7, + 49667 - 44032: 0x99E8, + 49668 - 44032: 0xBCF1, + 49669 - 44032: 0x99E9, + 49670 - 44032: 0x99EA, + 49671 - 44032: 0x99EB, + 49672 - 44032: 0x99EC, + 49673 - 44032: 0x99ED, + 49674 - 44032: 0x99EE, + 49675 - 44032: 0x99EF, + 49676 - 44032: 0xBCF2, + 49677 - 44032: 0xBCF3, + 49678 - 44032: 0x99F0, + 49679 - 44032: 0xBCF4, + 49680 - 44032: 0x99F1, + 49681 - 44032: 0xBCF5, + 49682 - 44032: 0x99F2, + 49683 - 44032: 0x99F3, + 49684 - 44032: 0x99F4, + 49685 - 44032: 0x99F5, + 49686 - 44032: 0x99F6, + 49687 - 44032: 0x99F7, + 49688 - 44032: 0xBCF6, + 49689 - 44032: 0xBCF7, + 49690 - 44032: 0x99F8, + 49691 - 44032: 0x99F9, + 49692 - 44032: 0xBCF8, + 49693 - 44032: 0x99FA, + 49694 - 44032: 0x99FB, + 49695 - 44032: 0xBCF9, + 49696 - 44032: 0xBCFA, + 49697 - 44032: 0x99FC, + 49698 - 44032: 0x99FD, + 49699 - 44032: 0x99FE, + 49700 - 44032: 0x9A41, + 49701 - 44032: 0x9A42, + 49702 - 44032: 0x9A43, + 49703 - 44032: 0x9A44, + 49704 - 44032: 0xBCFB, + 49705 - 44032: 0xBCFC, + 49706 - 44032: 0x9A45, + 49707 - 44032: 0xBCFD, + 49708 - 44032: 0x9A46, + 49709 - 44032: 0xBCFE, + 49710 - 44032: 0x9A47, + 49711 - 44032: 0xBDA1, + 49712 - 44032: 0x9A48, + 49713 - 44032: 0xBDA2, + 49714 - 44032: 0xBDA3, + 49715 - 44032: 0x9A49, + 49716 - 44032: 0xBDA4, + 49717 - 44032: 0x9A4A, + 49718 - 44032: 0x9A4B, + 49719 - 44032: 0x9A4C, + 49720 - 44032: 0x9A4D, + 49721 - 44032: 0x9A4E, + 49722 - 44032: 0x9A4F, + 49723 - 44032: 0x9A50, + 49724 - 44032: 0x9A51, + 49725 - 44032: 0x9A52, + 49726 - 44032: 0x9A53, + 49727 - 44032: 0x9A54, + 49728 - 44032: 0x9A55, + 49729 - 44032: 0x9A56, + 49730 - 44032: 0x9A57, + 49731 - 44032: 0x9A58, + 49732 - 44032: 0x9A59, + 49733 - 44032: 0x9A5A, + 49734 - 44032: 0x9A61, + 49735 - 44032: 0x9A62, + 49736 - 44032: 0xBDA5, + 49737 - 44032: 0x9A63, + 49738 - 44032: 0x9A64, + 49739 - 44032: 0x9A65, + 49740 - 44032: 0x9A66, + 49741 - 44032: 0x9A67, + 49742 - 44032: 0x9A68, + 49743 - 44032: 0x9A69, + 49744 - 44032: 0xBDA6, + 49745 - 44032: 0xBDA7, + 49746 - 44032: 0x9A6A, + 49747 - 44032: 0x9A6B, + 49748 - 44032: 0xBDA8, + 49749 - 44032: 0x9A6C, + 49750 - 44032: 0x9A6D, + 49751 - 44032: 0x9A6E, + 49752 - 44032: 0xBDA9, + 49753 - 44032: 0x9A6F, + 49754 - 44032: 0x9A70, + 49755 - 44032: 0x9A71, + 49756 - 44032: 0x9A72, + 49757 - 44032: 0x9A73, + 49758 - 44032: 0x9A74, + 49759 - 44032: 0x9A75, + 49760 - 44032: 0xBDAA, + 49761 - 44032: 0x9A76, + 49762 - 44032: 0x9A77, + 49763 - 44032: 0x9A78, + 49764 - 44032: 0x9A79, + 49765 - 44032: 0xBDAB, + 49766 - 44032: 0x9A7A, + 49767 - 44032: 0x9A81, + 49768 - 44032: 0x9A82, + 49769 - 44032: 0x9A83, + 49770 - 44032: 0x9A84, + 49771 - 44032: 0x9A85, + 49772 - 44032: 0xBDAC, + 49773 - 44032: 0xBDAD, + 49774 - 44032: 0x9A86, + 49775 - 44032: 0x9A87, + 49776 - 44032: 0xBDAE, + 49777 - 44032: 0x9A88, + 49778 - 44032: 0x9A89, + 49779 - 44032: 0x9A8A, + 49780 - 44032: 0xBDAF, + 49781 - 44032: 0x9A8B, + 49782 - 44032: 0x9A8C, + 49783 - 44032: 0x9A8D, + 49784 - 44032: 0x9A8E, + 49785 - 44032: 0x9A8F, + 49786 - 44032: 0x9A90, + 49787 - 44032: 0x9A91, + 49788 - 44032: 0xBDB0, + 49789 - 44032: 0xBDB1, + 49790 - 44032: 0x9A92, + 49791 - 44032: 0xBDB2, + 49792 - 44032: 0x9A93, + 49793 - 44032: 0xBDB3, + 49794 - 44032: 0x9A94, + 49795 - 44032: 0x9A95, + 49796 - 44032: 0x9A96, + 49797 - 44032: 0x9A97, + 49798 - 44032: 0x9A98, + 49799 - 44032: 0x9A99, + 49800 - 44032: 0xBDB4, + 49801 - 44032: 0xBDB5, + 49802 - 44032: 0x9A9A, + 49803 - 44032: 0x9A9B, + 49804 - 44032: 0x9A9C, + 49805 - 44032: 0x9A9D, + 49806 - 44032: 0x9A9E, + 49807 - 44032: 0x9A9F, + 49808 - 44032: 0xBDB6, + 49809 - 44032: 0x9AA0, + 49810 - 44032: 0x9AA1, + 49811 - 44032: 0x9AA2, + 49812 - 44032: 0x9AA3, + 49813 - 44032: 0x9AA4, + 49814 - 44032: 0x9AA5, + 49815 - 44032: 0x9AA6, + 49816 - 44032: 0xBDB7, + 49817 - 44032: 0x9AA7, + 49818 - 44032: 0x9AA8, + 49819 - 44032: 0xBDB8, + 49820 - 44032: 0x9AA9, + 49821 - 44032: 0xBDB9, + 49822 - 44032: 0x9AAA, + 49823 - 44032: 0x9AAB, + 49824 - 44032: 0x9AAC, + 49825 - 44032: 0x9AAD, + 49826 - 44032: 0x9AAE, + 49827 - 44032: 0x9AAF, + 49828 - 44032: 0xBDBA, + 49829 - 44032: 0xBDBB, + 49830 - 44032: 0x9AB0, + 49831 - 44032: 0x9AB1, + 49832 - 44032: 0xBDBC, + 49833 - 44032: 0x9AB2, + 49834 - 44032: 0x9AB3, + 49835 - 44032: 0x9AB4, + 49836 - 44032: 0xBDBD, + 49837 - 44032: 0xBDBE, + 49838 - 44032: 0x9AB5, + 49839 - 44032: 0x9AB6, + 49840 - 44032: 0x9AB7, + 49841 - 44032: 0x9AB8, + 49842 - 44032: 0x9AB9, + 49843 - 44032: 0x9ABA, + 49844 - 44032: 0xBDBF, + 49845 - 44032: 0xBDC0, + 49846 - 44032: 0x9ABB, + 49847 - 44032: 0xBDC1, + 49848 - 44032: 0x9ABC, + 49849 - 44032: 0xBDC2, + 49850 - 44032: 0x9ABD, + 49851 - 44032: 0x9ABE, + 49852 - 44032: 0x9ABF, + 49853 - 44032: 0x9AC0, + 49854 - 44032: 0x9AC1, + 49855 - 44032: 0x9AC2, + 49856 - 44032: 0x9AC3, + 49857 - 44032: 0x9AC4, + 49858 - 44032: 0x9AC5, + 49859 - 44032: 0x9AC6, + 49860 - 44032: 0x9AC7, + 49861 - 44032: 0x9AC8, + 49862 - 44032: 0x9AC9, + 49863 - 44032: 0x9ACA, + 49864 - 44032: 0x9ACB, + 49865 - 44032: 0x9ACC, + 49866 - 44032: 0x9ACD, + 49867 - 44032: 0x9ACE, + 49868 - 44032: 0x9ACF, + 49869 - 44032: 0x9AD0, + 49870 - 44032: 0x9AD1, + 49871 - 44032: 0x9AD2, + 49872 - 44032: 0x9AD3, + 49873 - 44032: 0x9AD4, + 49874 - 44032: 0x9AD5, + 49875 - 44032: 0x9AD6, + 49876 - 44032: 0x9AD7, + 49877 - 44032: 0x9AD8, + 49878 - 44032: 0x9AD9, + 49879 - 44032: 0x9ADA, + 49880 - 44032: 0x9ADB, + 49881 - 44032: 0x9ADC, + 49882 - 44032: 0x9ADD, + 49883 - 44032: 0x9ADE, + 49884 - 44032: 0xBDC3, + 49885 - 44032: 0xBDC4, + 49886 - 44032: 0x9ADF, + 49887 - 44032: 0x9AE0, + 49888 - 44032: 0xBDC5, + 49889 - 44032: 0x9AE1, + 49890 - 44032: 0x9AE2, + 49891 - 44032: 0xBDC6, + 49892 - 44032: 0xBDC7, + 49893 - 44032: 0x9AE3, + 49894 - 44032: 0x9AE4, + 49895 - 44032: 0x9AE5, + 49896 - 44032: 0x9AE6, + 49897 - 44032: 0x9AE7, + 49898 - 44032: 0x9AE8, + 49899 - 44032: 0xBDC8, + 49900 - 44032: 0xBDC9, + 49901 - 44032: 0xBDCA, + 49902 - 44032: 0x9AE9, + 49903 - 44032: 0xBDCB, + 49904 - 44032: 0x9AEA, + 49905 - 44032: 0xBDCC, + 49906 - 44032: 0x9AEB, + 49907 - 44032: 0x9AEC, + 49908 - 44032: 0x9AED, + 49909 - 44032: 0x9AEE, + 49910 - 44032: 0xBDCD, + 49911 - 44032: 0x9AEF, + 49912 - 44032: 0xBDCE, + 49913 - 44032: 0xBDCF, + 49914 - 44032: 0x9AF0, + 49915 - 44032: 0xBDD0, + 49916 - 44032: 0xBDD1, + 49917 - 44032: 0x9AF1, + 49918 - 44032: 0x9AF2, + 49919 - 44032: 0x9AF3, + 49920 - 44032: 0xBDD2, + 49921 - 44032: 0x9AF4, + 49922 - 44032: 0x9AF5, + 49923 - 44032: 0x9AF6, + 49924 - 44032: 0x9AF7, + 49925 - 44032: 0x9AF8, + 49926 - 44032: 0x9AF9, + 49927 - 44032: 0x9AFA, + 49928 - 44032: 0xBDD3, + 49929 - 44032: 0xBDD4, + 49930 - 44032: 0x9AFB, + 49931 - 44032: 0x9AFC, + 49932 - 44032: 0xBDD5, + 49933 - 44032: 0xBDD6, + 49934 - 44032: 0x9AFD, + 49935 - 44032: 0x9AFE, + 49936 - 44032: 0x9B41, + 49937 - 44032: 0x9B42, + 49938 - 44032: 0x9B43, + 49939 - 44032: 0xBDD7, + 49940 - 44032: 0xBDD8, + 49941 - 44032: 0xBDD9, + 49942 - 44032: 0x9B44, + 49943 - 44032: 0x9B45, + 49944 - 44032: 0xBDDA, + 49945 - 44032: 0x9B46, + 49946 - 44032: 0x9B47, + 49947 - 44032: 0x9B48, + 49948 - 44032: 0xBDDB, + 49949 - 44032: 0x9B49, + 49950 - 44032: 0x9B4A, + 49951 - 44032: 0x9B4B, + 49952 - 44032: 0x9B4C, + 49953 - 44032: 0x9B4D, + 49954 - 44032: 0x9B4E, + 49955 - 44032: 0x9B4F, + 49956 - 44032: 0xBDDC, + 49957 - 44032: 0xBDDD, + 49958 - 44032: 0x9B50, + 49959 - 44032: 0x9B51, + 49960 - 44032: 0xBDDE, + 49961 - 44032: 0xBDDF, + 49962 - 44032: 0x9B52, + 49963 - 44032: 0x9B53, + 49964 - 44032: 0x9B54, + 49965 - 44032: 0x9B55, + 49966 - 44032: 0x9B56, + 49967 - 44032: 0x9B57, + 49968 - 44032: 0x9B58, + 49969 - 44032: 0x9B59, + 49970 - 44032: 0x9B5A, + 49971 - 44032: 0x9B61, + 49972 - 44032: 0x9B62, + 49973 - 44032: 0x9B63, + 49974 - 44032: 0x9B64, + 49975 - 44032: 0x9B65, + 49976 - 44032: 0x9B66, + 49977 - 44032: 0x9B67, + 49978 - 44032: 0x9B68, + 49979 - 44032: 0x9B69, + 49980 - 44032: 0x9B6A, + 49981 - 44032: 0x9B6B, + 49982 - 44032: 0x9B6C, + 49983 - 44032: 0x9B6D, + 49984 - 44032: 0x9B6E, + 49985 - 44032: 0x9B6F, + 49986 - 44032: 0x9B70, + 49987 - 44032: 0x9B71, + 49988 - 44032: 0x9B72, + 49989 - 44032: 0xBDE0, + 49990 - 44032: 0x9B73, + 49991 - 44032: 0x9B74, + 49992 - 44032: 0x9B75, + 49993 - 44032: 0x9B76, + 49994 - 44032: 0x9B77, + 49995 - 44032: 0x9B78, + 49996 - 44032: 0x9B79, + 49997 - 44032: 0x9B7A, + 49998 - 44032: 0x9B81, + 49999 - 44032: 0x9B82, + 50000 - 44032: 0x9B83, + 50001 - 44032: 0x9B84, + 50002 - 44032: 0x9B85, + 50003 - 44032: 0x9B86, + 50004 - 44032: 0x9B87, + 50005 - 44032: 0x9B88, + 50006 - 44032: 0x9B89, + 50007 - 44032: 0x9B8A, + 50008 - 44032: 0x9B8B, + 50009 - 44032: 0x9B8C, + 50010 - 44032: 0x9B8D, + 50011 - 44032: 0x9B8E, + 50012 - 44032: 0x9B8F, + 50013 - 44032: 0x9B90, + 50014 - 44032: 0x9B91, + 50015 - 44032: 0x9B92, + 50016 - 44032: 0x9B93, + 50017 - 44032: 0x9B94, + 50018 - 44032: 0x9B95, + 50019 - 44032: 0x9B96, + 50020 - 44032: 0x9B97, + 50021 - 44032: 0x9B98, + 50022 - 44032: 0x9B99, + 50023 - 44032: 0x9B9A, + 50024 - 44032: 0xBDE1, + 50025 - 44032: 0xBDE2, + 50026 - 44032: 0x9B9B, + 50027 - 44032: 0x9B9C, + 50028 - 44032: 0xBDE3, + 50029 - 44032: 0x9B9D, + 50030 - 44032: 0x9B9E, + 50031 - 44032: 0x9B9F, + 50032 - 44032: 0xBDE4, + 50033 - 44032: 0x9BA0, + 50034 - 44032: 0xBDE5, + 50035 - 44032: 0x9BA1, + 50036 - 44032: 0x9BA2, + 50037 - 44032: 0x9BA3, + 50038 - 44032: 0x9BA4, + 50039 - 44032: 0x9BA5, + 50040 - 44032: 0xBDE6, + 50041 - 44032: 0xBDE7, + 50042 - 44032: 0x9BA6, + 50043 - 44032: 0x9BA7, + 50044 - 44032: 0xBDE8, + 50045 - 44032: 0xBDE9, + 50046 - 44032: 0x9BA8, + 50047 - 44032: 0x9BA9, + 50048 - 44032: 0x9BAA, + 50049 - 44032: 0x9BAB, + 50050 - 44032: 0x9BAC, + 50051 - 44032: 0x9BAD, + 50052 - 44032: 0xBDEA, + 50053 - 44032: 0x9BAE, + 50054 - 44032: 0x9BAF, + 50055 - 44032: 0x9BB0, + 50056 - 44032: 0xBDEB, + 50057 - 44032: 0x9BB1, + 50058 - 44032: 0x9BB2, + 50059 - 44032: 0x9BB3, + 50060 - 44032: 0xBDEC, + 50061 - 44032: 0x9BB4, + 50062 - 44032: 0x9BB5, + 50063 - 44032: 0x9BB6, + 50064 - 44032: 0x9BB7, + 50065 - 44032: 0x9BB8, + 50066 - 44032: 0x9BB9, + 50067 - 44032: 0x9BBA, + 50068 - 44032: 0x9BBB, + 50069 - 44032: 0x9BBC, + 50070 - 44032: 0x9BBD, + 50071 - 44032: 0x9BBE, + 50072 - 44032: 0x9BBF, + 50073 - 44032: 0x9BC0, + 50074 - 44032: 0x9BC1, + 50075 - 44032: 0x9BC2, + 50076 - 44032: 0x9BC3, + 50077 - 44032: 0x9BC4, + 50078 - 44032: 0x9BC5, + 50079 - 44032: 0x9BC6, + 50080 - 44032: 0x9BC7, + 50081 - 44032: 0x9BC8, + 50082 - 44032: 0x9BC9, + 50083 - 44032: 0x9BCA, + 50084 - 44032: 0x9BCB, + 50085 - 44032: 0x9BCC, + 50086 - 44032: 0x9BCD, + 50087 - 44032: 0x9BCE, + 50088 - 44032: 0x9BCF, + 50089 - 44032: 0x9BD0, + 50090 - 44032: 0x9BD1, + 50091 - 44032: 0x9BD2, + 50092 - 44032: 0x9BD3, + 50093 - 44032: 0x9BD4, + 50094 - 44032: 0x9BD5, + 50095 - 44032: 0x9BD6, + 50096 - 44032: 0x9BD7, + 50097 - 44032: 0x9BD8, + 50098 - 44032: 0x9BD9, + 50099 - 44032: 0x9BDA, + 50100 - 44032: 0x9BDB, + 50101 - 44032: 0x9BDC, + 50102 - 44032: 0x9BDD, + 50103 - 44032: 0x9BDE, + 50104 - 44032: 0x9BDF, + 50105 - 44032: 0x9BE0, + 50106 - 44032: 0x9BE1, + 50107 - 44032: 0x9BE2, + 50108 - 44032: 0x9BE3, + 50109 - 44032: 0x9BE4, + 50110 - 44032: 0x9BE5, + 50111 - 44032: 0x9BE6, + 50112 - 44032: 0xBDED, + 50113 - 44032: 0x9BE7, + 50114 - 44032: 0x9BE8, + 50115 - 44032: 0x9BE9, + 50116 - 44032: 0x9BEA, + 50117 - 44032: 0x9BEB, + 50118 - 44032: 0x9BEC, + 50119 - 44032: 0x9BED, + 50120 - 44032: 0x9BEE, + 50121 - 44032: 0x9BEF, + 50122 - 44032: 0x9BF0, + 50123 - 44032: 0x9BF1, + 50124 - 44032: 0x9BF2, + 50125 - 44032: 0x9BF3, + 50126 - 44032: 0x9BF4, + 50127 - 44032: 0x9BF5, + 50128 - 44032: 0x9BF6, + 50129 - 44032: 0x9BF7, + 50130 - 44032: 0x9BF8, + 50131 - 44032: 0x9BF9, + 50132 - 44032: 0x9BFA, + 50133 - 44032: 0x9BFB, + 50134 - 44032: 0x9BFC, + 50135 - 44032: 0x9BFD, + 50136 - 44032: 0xBDEE, + 50137 - 44032: 0xBDEF, + 50138 - 44032: 0x9BFE, + 50139 - 44032: 0x9C41, + 50140 - 44032: 0xBDF0, + 50141 - 44032: 0x9C42, + 50142 - 44032: 0x9C43, + 50143 - 44032: 0xBDF1, + 50144 - 44032: 0xBDF2, + 50145 - 44032: 0x9C44, + 50146 - 44032: 0xBDF3, + 50147 - 44032: 0x9C45, + 50148 - 44032: 0x9C46, + 50149 - 44032: 0x9C47, + 50150 - 44032: 0x9C48, + 50151 - 44032: 0x9C49, + 50152 - 44032: 0xBDF4, + 50153 - 44032: 0xBDF5, + 50154 - 44032: 0x9C4A, + 50155 - 44032: 0x9C4B, + 50156 - 44032: 0x9C4C, + 50157 - 44032: 0xBDF6, + 50158 - 44032: 0x9C4D, + 50159 - 44032: 0x9C4E, + 50160 - 44032: 0x9C4F, + 50161 - 44032: 0x9C50, + 50162 - 44032: 0x9C51, + 50163 - 44032: 0x9C52, + 50164 - 44032: 0xBDF7, + 50165 - 44032: 0xBDF8, + 50166 - 44032: 0x9C53, + 50167 - 44032: 0x9C54, + 50168 - 44032: 0xBDF9, + 50169 - 44032: 0x9C55, + 50170 - 44032: 0x9C56, + 50171 - 44032: 0x9C57, + 50172 - 44032: 0x9C58, + 50173 - 44032: 0x9C59, + 50174 - 44032: 0x9C5A, + 50175 - 44032: 0x9C61, + 50176 - 44032: 0x9C62, + 50177 - 44032: 0x9C63, + 50178 - 44032: 0x9C64, + 50179 - 44032: 0x9C65, + 50180 - 44032: 0x9C66, + 50181 - 44032: 0x9C67, + 50182 - 44032: 0x9C68, + 50183 - 44032: 0x9C69, + 50184 - 44032: 0xBDFA, + 50185 - 44032: 0x9C6A, + 50186 - 44032: 0x9C6B, + 50187 - 44032: 0x9C6C, + 50188 - 44032: 0x9C6D, + 50189 - 44032: 0x9C6E, + 50190 - 44032: 0x9C6F, + 50191 - 44032: 0x9C70, + 50192 - 44032: 0xBDFB, + 50193 - 44032: 0x9C71, + 50194 - 44032: 0x9C72, + 50195 - 44032: 0x9C73, + 50196 - 44032: 0x9C74, + 50197 - 44032: 0x9C75, + 50198 - 44032: 0x9C76, + 50199 - 44032: 0x9C77, + 50200 - 44032: 0x9C78, + 50201 - 44032: 0x9C79, + 50202 - 44032: 0x9C7A, + 50203 - 44032: 0x9C81, + 50204 - 44032: 0x9C82, + 50205 - 44032: 0x9C83, + 50206 - 44032: 0x9C84, + 50207 - 44032: 0x9C85, + 50208 - 44032: 0x9C86, + 50209 - 44032: 0x9C87, + 50210 - 44032: 0x9C88, + 50211 - 44032: 0x9C89, + 50212 - 44032: 0xBDFC, + 50213 - 44032: 0x9C8A, + 50214 - 44032: 0x9C8B, + 50215 - 44032: 0x9C8C, + 50216 - 44032: 0x9C8D, + 50217 - 44032: 0x9C8E, + 50218 - 44032: 0x9C8F, + 50219 - 44032: 0x9C90, + 50220 - 44032: 0xBDFD, + 50221 - 44032: 0x9C91, + 50222 - 44032: 0x9C92, + 50223 - 44032: 0x9C93, + 50224 - 44032: 0xBDFE, + 50225 - 44032: 0x9C94, + 50226 - 44032: 0x9C95, + 50227 - 44032: 0x9C96, + 50228 - 44032: 0xBEA1, + 50229 - 44032: 0x9C97, + 50230 - 44032: 0x9C98, + 50231 - 44032: 0x9C99, + 50232 - 44032: 0x9C9A, + 50233 - 44032: 0x9C9B, + 50234 - 44032: 0x9C9C, + 50235 - 44032: 0x9C9D, + 50236 - 44032: 0xBEA2, + 50237 - 44032: 0xBEA3, + 50238 - 44032: 0x9C9E, + 50239 - 44032: 0x9C9F, + 50240 - 44032: 0x9CA0, + 50241 - 44032: 0x9CA1, + 50242 - 44032: 0x9CA2, + 50243 - 44032: 0x9CA3, + 50244 - 44032: 0x9CA4, + 50245 - 44032: 0x9CA5, + 50246 - 44032: 0x9CA6, + 50247 - 44032: 0x9CA7, + 50248 - 44032: 0xBEA4, + 50249 - 44032: 0x9CA8, + 50250 - 44032: 0x9CA9, + 50251 - 44032: 0x9CAA, + 50252 - 44032: 0x9CAB, + 50253 - 44032: 0x9CAC, + 50254 - 44032: 0x9CAD, + 50255 - 44032: 0x9CAE, + 50256 - 44032: 0x9CAF, + 50257 - 44032: 0x9CB0, + 50258 - 44032: 0x9CB1, + 50259 - 44032: 0x9CB2, + 50260 - 44032: 0x9CB3, + 50261 - 44032: 0x9CB4, + 50262 - 44032: 0x9CB5, + 50263 - 44032: 0x9CB6, + 50264 - 44032: 0x9CB7, + 50265 - 44032: 0x9CB8, + 50266 - 44032: 0x9CB9, + 50267 - 44032: 0x9CBA, + 50268 - 44032: 0x9CBB, + 50269 - 44032: 0x9CBC, + 50270 - 44032: 0x9CBD, + 50271 - 44032: 0x9CBE, + 50272 - 44032: 0x9CBF, + 50273 - 44032: 0x9CC0, + 50274 - 44032: 0x9CC1, + 50275 - 44032: 0x9CC2, + 50276 - 44032: 0xBEA5, + 50277 - 44032: 0xBEA6, + 50278 - 44032: 0x9CC3, + 50279 - 44032: 0x9CC4, + 50280 - 44032: 0xBEA7, + 50281 - 44032: 0x9CC5, + 50282 - 44032: 0x9CC6, + 50283 - 44032: 0x9CC7, + 50284 - 44032: 0xBEA8, + 50285 - 44032: 0x9CC8, + 50286 - 44032: 0x9CC9, + 50287 - 44032: 0x9CCA, + 50288 - 44032: 0x9CCB, + 50289 - 44032: 0x9CCC, + 50290 - 44032: 0x9CCD, + 50291 - 44032: 0x9CCE, + 50292 - 44032: 0xBEA9, + 50293 - 44032: 0xBEAA, + 50294 - 44032: 0x9CCF, + 50295 - 44032: 0x9CD0, + 50296 - 44032: 0x9CD1, + 50297 - 44032: 0xBEAB, + 50298 - 44032: 0x9CD2, + 50299 - 44032: 0x9CD3, + 50300 - 44032: 0x9CD4, + 50301 - 44032: 0x9CD5, + 50302 - 44032: 0x9CD6, + 50303 - 44032: 0x9CD7, + 50304 - 44032: 0xBEAC, + 50305 - 44032: 0x9CD8, + 50306 - 44032: 0x9CD9, + 50307 - 44032: 0x9CDA, + 50308 - 44032: 0x9CDB, + 50309 - 44032: 0x9CDC, + 50310 - 44032: 0x9CDD, + 50311 - 44032: 0x9CDE, + 50312 - 44032: 0x9CDF, + 50313 - 44032: 0x9CE0, + 50314 - 44032: 0x9CE1, + 50315 - 44032: 0x9CE2, + 50316 - 44032: 0x9CE3, + 50317 - 44032: 0x9CE4, + 50318 - 44032: 0x9CE5, + 50319 - 44032: 0x9CE6, + 50320 - 44032: 0x9CE7, + 50321 - 44032: 0x9CE8, + 50322 - 44032: 0x9CE9, + 50323 - 44032: 0x9CEA, + 50324 - 44032: 0xBEAD, + 50325 - 44032: 0x9CEB, + 50326 - 44032: 0x9CEC, + 50327 - 44032: 0x9CED, + 50328 - 44032: 0x9CEE, + 50329 - 44032: 0x9CEF, + 50330 - 44032: 0x9CF0, + 50331 - 44032: 0x9CF1, + 50332 - 44032: 0xBEAE, + 50333 - 44032: 0x9CF2, + 50334 - 44032: 0x9CF3, + 50335 - 44032: 0x9CF4, + 50336 - 44032: 0x9CF5, + 50337 - 44032: 0x9CF6, + 50338 - 44032: 0x9CF7, + 50339 - 44032: 0x9CF8, + 50340 - 44032: 0x9CF9, + 50341 - 44032: 0x9CFA, + 50342 - 44032: 0x9CFB, + 50343 - 44032: 0x9CFC, + 50344 - 44032: 0x9CFD, + 50345 - 44032: 0x9CFE, + 50346 - 44032: 0x9D41, + 50347 - 44032: 0x9D42, + 50348 - 44032: 0x9D43, + 50349 - 44032: 0x9D44, + 50350 - 44032: 0x9D45, + 50351 - 44032: 0x9D46, + 50352 - 44032: 0x9D47, + 50353 - 44032: 0x9D48, + 50354 - 44032: 0x9D49, + 50355 - 44032: 0x9D4A, + 50356 - 44032: 0x9D4B, + 50357 - 44032: 0x9D4C, + 50358 - 44032: 0x9D4D, + 50359 - 44032: 0x9D4E, + 50360 - 44032: 0xBEAF, + 50361 - 44032: 0x9D4F, + 50362 - 44032: 0x9D50, + 50363 - 44032: 0x9D51, + 50364 - 44032: 0xBEB0, + 50365 - 44032: 0x9D52, + 50366 - 44032: 0x9D53, + 50367 - 44032: 0x9D54, + 50368 - 44032: 0x9D55, + 50369 - 44032: 0x9D56, + 50370 - 44032: 0x9D57, + 50371 - 44032: 0x9D58, + 50372 - 44032: 0x9D59, + 50373 - 44032: 0x9D5A, + 50374 - 44032: 0x9D61, + 50375 - 44032: 0x9D62, + 50376 - 44032: 0x9D63, + 50377 - 44032: 0x9D64, + 50378 - 44032: 0x9D65, + 50379 - 44032: 0x9D66, + 50380 - 44032: 0x9D67, + 50381 - 44032: 0x9D68, + 50382 - 44032: 0x9D69, + 50383 - 44032: 0x9D6A, + 50384 - 44032: 0x9D6B, + 50385 - 44032: 0x9D6C, + 50386 - 44032: 0x9D6D, + 50387 - 44032: 0x9D6E, + 50388 - 44032: 0x9D6F, + 50389 - 44032: 0x9D70, + 50390 - 44032: 0x9D71, + 50391 - 44032: 0x9D72, + 50392 - 44032: 0x9D73, + 50393 - 44032: 0x9D74, + 50394 - 44032: 0x9D75, + 50395 - 44032: 0x9D76, + 50396 - 44032: 0x9D77, + 50397 - 44032: 0x9D78, + 50398 - 44032: 0x9D79, + 50399 - 44032: 0x9D7A, + 50400 - 44032: 0x9D81, + 50401 - 44032: 0x9D82, + 50402 - 44032: 0x9D83, + 50403 - 44032: 0x9D84, + 50404 - 44032: 0x9D85, + 50405 - 44032: 0x9D86, + 50406 - 44032: 0x9D87, + 50407 - 44032: 0x9D88, + 50408 - 44032: 0x9D89, + 50409 - 44032: 0xBEB1, + 50410 - 44032: 0x9D8A, + 50411 - 44032: 0x9D8B, + 50412 - 44032: 0x9D8C, + 50413 - 44032: 0x9D8D, + 50414 - 44032: 0x9D8E, + 50415 - 44032: 0x9D8F, + 50416 - 44032: 0xBEB2, + 50417 - 44032: 0xBEB3, + 50418 - 44032: 0x9D90, + 50419 - 44032: 0x9D91, + 50420 - 44032: 0xBEB4, + 50421 - 44032: 0x9D92, + 50422 - 44032: 0x9D93, + 50423 - 44032: 0x9D94, + 50424 - 44032: 0xBEB5, + 50425 - 44032: 0x9D95, + 50426 - 44032: 0xBEB6, + 50427 - 44032: 0x9D96, + 50428 - 44032: 0x9D97, + 50429 - 44032: 0x9D98, + 50430 - 44032: 0x9D99, + 50431 - 44032: 0xBEB7, + 50432 - 44032: 0xBEB8, + 50433 - 44032: 0xBEB9, + 50434 - 44032: 0x9D9A, + 50435 - 44032: 0x9D9B, + 50436 - 44032: 0x9D9C, + 50437 - 44032: 0x9D9D, + 50438 - 44032: 0x9D9E, + 50439 - 44032: 0x9D9F, + 50440 - 44032: 0x9DA0, + 50441 - 44032: 0x9DA1, + 50442 - 44032: 0x9DA2, + 50443 - 44032: 0x9DA3, + 50444 - 44032: 0xBEBA, + 50445 - 44032: 0x9DA4, + 50446 - 44032: 0x9DA5, + 50447 - 44032: 0x9DA6, + 50448 - 44032: 0xBEBB, + 50449 - 44032: 0x9DA7, + 50450 - 44032: 0x9DA8, + 50451 - 44032: 0x9DA9, + 50452 - 44032: 0xBEBC, + 50453 - 44032: 0x9DAA, + 50454 - 44032: 0x9DAB, + 50455 - 44032: 0x9DAC, + 50456 - 44032: 0x9DAD, + 50457 - 44032: 0x9DAE, + 50458 - 44032: 0x9DAF, + 50459 - 44032: 0x9DB0, + 50460 - 44032: 0xBEBD, + 50461 - 44032: 0x9DB1, + 50462 - 44032: 0x9DB2, + 50463 - 44032: 0x9DB3, + 50464 - 44032: 0x9DB4, + 50465 - 44032: 0x9DB5, + 50466 - 44032: 0x9DB6, + 50467 - 44032: 0x9DB7, + 50468 - 44032: 0x9DB8, + 50469 - 44032: 0x9DB9, + 50470 - 44032: 0x9DBA, + 50471 - 44032: 0x9DBB, + 50472 - 44032: 0xBEBE, + 50473 - 44032: 0xBEBF, + 50474 - 44032: 0x9DBC, + 50475 - 44032: 0x9DBD, + 50476 - 44032: 0xBEC0, + 50477 - 44032: 0x9DBE, + 50478 - 44032: 0x9DBF, + 50479 - 44032: 0x9DC0, + 50480 - 44032: 0xBEC1, + 50481 - 44032: 0x9DC1, + 50482 - 44032: 0x9DC2, + 50483 - 44032: 0x9DC3, + 50484 - 44032: 0x9DC4, + 50485 - 44032: 0x9DC5, + 50486 - 44032: 0x9DC6, + 50487 - 44032: 0x9DC7, + 50488 - 44032: 0xBEC2, + 50489 - 44032: 0xBEC3, + 50490 - 44032: 0x9DC8, + 50491 - 44032: 0xBEC4, + 50492 - 44032: 0x9DC9, + 50493 - 44032: 0xBEC5, + 50494 - 44032: 0x9DCA, + 50495 - 44032: 0x9DCB, + 50496 - 44032: 0x9DCC, + 50497 - 44032: 0x9DCD, + 50498 - 44032: 0x9DCE, + 50499 - 44032: 0x9DCF, + 50500 - 44032: 0xBEC6, + 50501 - 44032: 0xBEC7, + 50502 - 44032: 0x9DD0, + 50503 - 44032: 0x9DD1, + 50504 - 44032: 0xBEC8, + 50505 - 44032: 0xBEC9, + 50506 - 44032: 0xBECA, + 50507 - 44032: 0x9DD2, + 50508 - 44032: 0xBECB, + 50509 - 44032: 0xBECC, + 50510 - 44032: 0xBECD, + 50511 - 44032: 0x9DD3, + 50512 - 44032: 0x9DD4, + 50513 - 44032: 0x9DD5, + 50514 - 44032: 0x9DD6, + 50515 - 44032: 0xBECE, + 50516 - 44032: 0xBECF, + 50517 - 44032: 0xBED0, + 50518 - 44032: 0x9DD7, + 50519 - 44032: 0xBED1, + 50520 - 44032: 0xBED2, + 50521 - 44032: 0xBED3, + 50522 - 44032: 0x9DD8, + 50523 - 44032: 0x9DD9, + 50524 - 44032: 0x9DDA, + 50525 - 44032: 0xBED4, + 50526 - 44032: 0xBED5, + 50527 - 44032: 0x9DDB, + 50528 - 44032: 0xBED6, + 50529 - 44032: 0xBED7, + 50530 - 44032: 0x9DDC, + 50531 - 44032: 0x9DDD, + 50532 - 44032: 0xBED8, + 50533 - 44032: 0x9DDE, + 50534 - 44032: 0x9DDF, + 50535 - 44032: 0x9DE0, + 50536 - 44032: 0xBED9, + 50537 - 44032: 0x9DE1, + 50538 - 44032: 0x9DE2, + 50539 - 44032: 0x9DE3, + 50540 - 44032: 0x9DE4, + 50541 - 44032: 0x9DE5, + 50542 - 44032: 0x9DE6, + 50543 - 44032: 0x9DE7, + 50544 - 44032: 0xBEDA, + 50545 - 44032: 0xBEDB, + 50546 - 44032: 0x9DE8, + 50547 - 44032: 0xBEDC, + 50548 - 44032: 0xBEDD, + 50549 - 44032: 0xBEDE, + 50550 - 44032: 0x9DE9, + 50551 - 44032: 0x9DEA, + 50552 - 44032: 0x9DEB, + 50553 - 44032: 0x9DEC, + 50554 - 44032: 0x9DED, + 50555 - 44032: 0x9DEE, + 50556 - 44032: 0xBEDF, + 50557 - 44032: 0xBEE0, + 50558 - 44032: 0x9DEF, + 50559 - 44032: 0x9DF0, + 50560 - 44032: 0xBEE1, + 50561 - 44032: 0x9DF1, + 50562 - 44032: 0x9DF2, + 50563 - 44032: 0x9DF3, + 50564 - 44032: 0xBEE2, + 50565 - 44032: 0x9DF4, + 50566 - 44032: 0x9DF5, + 50567 - 44032: 0xBEE3, + 50568 - 44032: 0x9DF6, + 50569 - 44032: 0x9DF7, + 50570 - 44032: 0x9DF8, + 50571 - 44032: 0x9DF9, + 50572 - 44032: 0xBEE4, + 50573 - 44032: 0xBEE5, + 50574 - 44032: 0x9DFA, + 50575 - 44032: 0xBEE6, + 50576 - 44032: 0x9DFB, + 50577 - 44032: 0xBEE7, + 50578 - 44032: 0x9DFC, + 50579 - 44032: 0x9DFD, + 50580 - 44032: 0x9DFE, + 50581 - 44032: 0xBEE8, + 50582 - 44032: 0x9E41, + 50583 - 44032: 0xBEE9, + 50584 - 44032: 0xBEEA, + 50585 - 44032: 0x9E42, + 50586 - 44032: 0x9E43, + 50587 - 44032: 0x9E44, + 50588 - 44032: 0xBEEB, + 50589 - 44032: 0x9E45, + 50590 - 44032: 0x9E46, + 50591 - 44032: 0x9E47, + 50592 - 44032: 0xBEEC, + 50593 - 44032: 0x9E48, + 50594 - 44032: 0x9E49, + 50595 - 44032: 0x9E4A, + 50596 - 44032: 0x9E4B, + 50597 - 44032: 0x9E4C, + 50598 - 44032: 0x9E4D, + 50599 - 44032: 0x9E4E, + 50600 - 44032: 0x9E4F, + 50601 - 44032: 0xBEED, + 50602 - 44032: 0x9E50, + 50603 - 44032: 0x9E51, + 50604 - 44032: 0x9E52, + 50605 - 44032: 0x9E53, + 50606 - 44032: 0x9E54, + 50607 - 44032: 0x9E55, + 50608 - 44032: 0x9E56, + 50609 - 44032: 0x9E57, + 50610 - 44032: 0x9E58, + 50611 - 44032: 0x9E59, + 50612 - 44032: 0xBEEE, + 50613 - 44032: 0xBEEF, + 50614 - 44032: 0x9E5A, + 50615 - 44032: 0x9E61, + 50616 - 44032: 0xBEF0, + 50617 - 44032: 0xBEF1, + 50618 - 44032: 0x9E62, + 50619 - 44032: 0xBEF2, + 50620 - 44032: 0xBEF3, + 50621 - 44032: 0xBEF4, + 50622 - 44032: 0xBEF5, + 50623 - 44032: 0x9E63, + 50624 - 44032: 0x9E64, + 50625 - 44032: 0x9E65, + 50626 - 44032: 0x9E66, + 50627 - 44032: 0x9E67, + 50628 - 44032: 0xBEF6, + 50629 - 44032: 0xBEF7, + 50630 - 44032: 0xBEF8, + 50631 - 44032: 0xBEF9, + 50632 - 44032: 0xBEFA, + 50633 - 44032: 0xBEFB, + 50634 - 44032: 0xBEFC, + 50635 - 44032: 0x9E68, + 50636 - 44032: 0xBEFD, + 50637 - 44032: 0x9E69, + 50638 - 44032: 0xBEFE, + 50639 - 44032: 0x9E6A, + 50640 - 44032: 0xBFA1, + 50641 - 44032: 0xBFA2, + 50642 - 44032: 0x9E6B, + 50643 - 44032: 0x9E6C, + 50644 - 44032: 0xBFA3, + 50645 - 44032: 0x9E6D, + 50646 - 44032: 0x9E6E, + 50647 - 44032: 0x9E6F, + 50648 - 44032: 0xBFA4, + 50649 - 44032: 0x9E70, + 50650 - 44032: 0x9E71, + 50651 - 44032: 0x9E72, + 50652 - 44032: 0x9E73, + 50653 - 44032: 0x9E74, + 50654 - 44032: 0x9E75, + 50655 - 44032: 0x9E76, + 50656 - 44032: 0xBFA5, + 50657 - 44032: 0xBFA6, + 50658 - 44032: 0x9E77, + 50659 - 44032: 0xBFA7, + 50660 - 44032: 0x9E78, + 50661 - 44032: 0xBFA8, + 50662 - 44032: 0x9E79, + 50663 - 44032: 0x9E7A, + 50664 - 44032: 0x9E81, + 50665 - 44032: 0x9E82, + 50666 - 44032: 0x9E83, + 50667 - 44032: 0x9E84, + 50668 - 44032: 0xBFA9, + 50669 - 44032: 0xBFAA, + 50670 - 44032: 0xBFAB, + 50671 - 44032: 0x9E85, + 50672 - 44032: 0xBFAC, + 50673 - 44032: 0x9E86, + 50674 - 44032: 0x9E87, + 50675 - 44032: 0x9E88, + 50676 - 44032: 0xBFAD, + 50677 - 44032: 0x9E89, + 50678 - 44032: 0xBFAE, + 50679 - 44032: 0xBFAF, + 50680 - 44032: 0x9E8A, + 50681 - 44032: 0x9E8B, + 50682 - 44032: 0x9E8C, + 50683 - 44032: 0x9E8D, + 50684 - 44032: 0xBFB0, + 50685 - 44032: 0xBFB1, + 50686 - 44032: 0xBFB2, + 50687 - 44032: 0xBFB3, + 50688 - 44032: 0xBFB4, + 50689 - 44032: 0xBFB5, + 50690 - 44032: 0x9E8E, + 50691 - 44032: 0x9E8F, + 50692 - 44032: 0x9E90, + 50693 - 44032: 0xBFB6, + 50694 - 44032: 0xBFB7, + 50695 - 44032: 0xBFB8, + 50696 - 44032: 0xBFB9, + 50697 - 44032: 0x9E91, + 50698 - 44032: 0x9E92, + 50699 - 44032: 0x9E93, + 50700 - 44032: 0xBFBA, + 50701 - 44032: 0x9E94, + 50702 - 44032: 0x9E95, + 50703 - 44032: 0x9E96, + 50704 - 44032: 0xBFBB, + 50705 - 44032: 0x9E97, + 50706 - 44032: 0x9E98, + 50707 - 44032: 0x9E99, + 50708 - 44032: 0x9E9A, + 50709 - 44032: 0x9E9B, + 50710 - 44032: 0x9E9C, + 50711 - 44032: 0x9E9D, + 50712 - 44032: 0xBFBC, + 50713 - 44032: 0xBFBD, + 50714 - 44032: 0x9E9E, + 50715 - 44032: 0xBFBE, + 50716 - 44032: 0xBFBF, + 50717 - 44032: 0x9E9F, + 50718 - 44032: 0x9EA0, + 50719 - 44032: 0x9EA1, + 50720 - 44032: 0x9EA2, + 50721 - 44032: 0x9EA3, + 50722 - 44032: 0x9EA4, + 50723 - 44032: 0x9EA5, + 50724 - 44032: 0xBFC0, + 50725 - 44032: 0xBFC1, + 50726 - 44032: 0x9EA6, + 50727 - 44032: 0x9EA7, + 50728 - 44032: 0xBFC2, + 50729 - 44032: 0x9EA8, + 50730 - 44032: 0x9EA9, + 50731 - 44032: 0x9EAA, + 50732 - 44032: 0xBFC3, + 50733 - 44032: 0xBFC4, + 50734 - 44032: 0xBFC5, + 50735 - 44032: 0x9EAB, + 50736 - 44032: 0xBFC6, + 50737 - 44032: 0x9EAC, + 50738 - 44032: 0x9EAD, + 50739 - 44032: 0xBFC7, + 50740 - 44032: 0xBFC8, + 50741 - 44032: 0xBFC9, + 50742 - 44032: 0x9EAE, + 50743 - 44032: 0xBFCA, + 50744 - 44032: 0x9EAF, + 50745 - 44032: 0xBFCB, + 50746 - 44032: 0x9EB0, + 50747 - 44032: 0xBFCC, + 50748 - 44032: 0x9EB1, + 50749 - 44032: 0x9EB2, + 50750 - 44032: 0x9EB3, + 50751 - 44032: 0x9EB4, + 50752 - 44032: 0xBFCD, + 50753 - 44032: 0xBFCE, + 50754 - 44032: 0x9EB5, + 50755 - 44032: 0x9EB6, + 50756 - 44032: 0xBFCF, + 50757 - 44032: 0x9EB7, + 50758 - 44032: 0x9EB8, + 50759 - 44032: 0x9EB9, + 50760 - 44032: 0xBFD0, + 50761 - 44032: 0x9EBA, + 50762 - 44032: 0x9EBB, + 50763 - 44032: 0x9EBC, + 50764 - 44032: 0x9EBD, + 50765 - 44032: 0x9EBE, + 50766 - 44032: 0x9EBF, + 50767 - 44032: 0x9EC0, + 50768 - 44032: 0xBFD1, + 50769 - 44032: 0xBFD2, + 50770 - 44032: 0x9EC1, + 50771 - 44032: 0xBFD3, + 50772 - 44032: 0xBFD4, + 50773 - 44032: 0xBFD5, + 50774 - 44032: 0x9EC2, + 50775 - 44032: 0x9EC3, + 50776 - 44032: 0x9EC4, + 50777 - 44032: 0x9EC5, + 50778 - 44032: 0x9EC6, + 50779 - 44032: 0x9EC7, + 50780 - 44032: 0xBFD6, + 50781 - 44032: 0xBFD7, + 50782 - 44032: 0x9EC8, + 50783 - 44032: 0x9EC9, + 50784 - 44032: 0xBFD8, + 50785 - 44032: 0x9ECA, + 50786 - 44032: 0x9ECB, + 50787 - 44032: 0x9ECC, + 50788 - 44032: 0x9ECD, + 50789 - 44032: 0x9ECE, + 50790 - 44032: 0x9ECF, + 50791 - 44032: 0x9ED0, + 50792 - 44032: 0x9ED1, + 50793 - 44032: 0x9ED2, + 50794 - 44032: 0x9ED3, + 50795 - 44032: 0x9ED4, + 50796 - 44032: 0xBFD9, + 50797 - 44032: 0x9ED5, + 50798 - 44032: 0x9ED6, + 50799 - 44032: 0xBFDA, + 50800 - 44032: 0x9ED7, + 50801 - 44032: 0xBFDB, + 50802 - 44032: 0x9ED8, + 50803 - 44032: 0x9ED9, + 50804 - 44032: 0x9EDA, + 50805 - 44032: 0x9EDB, + 50806 - 44032: 0x9EDC, + 50807 - 44032: 0x9EDD, + 50808 - 44032: 0xBFDC, + 50809 - 44032: 0xBFDD, + 50810 - 44032: 0x9EDE, + 50811 - 44032: 0x9EDF, + 50812 - 44032: 0xBFDE, + 50813 - 44032: 0x9EE0, + 50814 - 44032: 0x9EE1, + 50815 - 44032: 0x9EE2, + 50816 - 44032: 0xBFDF, + 50817 - 44032: 0x9EE3, + 50818 - 44032: 0x9EE4, + 50819 - 44032: 0x9EE5, + 50820 - 44032: 0x9EE6, + 50821 - 44032: 0x9EE7, + 50822 - 44032: 0x9EE8, + 50823 - 44032: 0x9EE9, + 50824 - 44032: 0xBFE0, + 50825 - 44032: 0xBFE1, + 50826 - 44032: 0x9EEA, + 50827 - 44032: 0xBFE2, + 50828 - 44032: 0x9EEB, + 50829 - 44032: 0xBFE3, + 50830 - 44032: 0x9EEC, + 50831 - 44032: 0x9EED, + 50832 - 44032: 0x9EEE, + 50833 - 44032: 0x9EEF, + 50834 - 44032: 0x9EF0, + 50835 - 44032: 0x9EF1, + 50836 - 44032: 0xBFE4, + 50837 - 44032: 0xBFE5, + 50838 - 44032: 0x9EF2, + 50839 - 44032: 0x9EF3, + 50840 - 44032: 0xBFE6, + 50841 - 44032: 0x9EF4, + 50842 - 44032: 0x9EF5, + 50843 - 44032: 0x9EF6, + 50844 - 44032: 0xBFE7, + 50845 - 44032: 0x9EF7, + 50846 - 44032: 0x9EF8, + 50847 - 44032: 0x9EF9, + 50848 - 44032: 0x9EFA, + 50849 - 44032: 0x9EFB, + 50850 - 44032: 0x9EFC, + 50851 - 44032: 0x9EFD, + 50852 - 44032: 0xBFE8, + 50853 - 44032: 0xBFE9, + 50854 - 44032: 0x9EFE, + 50855 - 44032: 0xBFEA, + 50856 - 44032: 0x9F41, + 50857 - 44032: 0xBFEB, + 50858 - 44032: 0x9F42, + 50859 - 44032: 0x9F43, + 50860 - 44032: 0x9F44, + 50861 - 44032: 0x9F45, + 50862 - 44032: 0x9F46, + 50863 - 44032: 0x9F47, + 50864 - 44032: 0xBFEC, + 50865 - 44032: 0xBFED, + 50866 - 44032: 0x9F48, + 50867 - 44032: 0x9F49, + 50868 - 44032: 0xBFEE, + 50869 - 44032: 0x9F4A, + 50870 - 44032: 0x9F4B, + 50871 - 44032: 0x9F4C, + 50872 - 44032: 0xBFEF, + 50873 - 44032: 0xBFF0, + 50874 - 44032: 0xBFF1, + 50875 - 44032: 0x9F4D, + 50876 - 44032: 0x9F4E, + 50877 - 44032: 0x9F4F, + 50878 - 44032: 0x9F50, + 50879 - 44032: 0x9F51, + 50880 - 44032: 0xBFF2, + 50881 - 44032: 0xBFF3, + 50882 - 44032: 0x9F52, + 50883 - 44032: 0xBFF4, + 50884 - 44032: 0x9F53, + 50885 - 44032: 0xBFF5, + 50886 - 44032: 0x9F54, + 50887 - 44032: 0x9F55, + 50888 - 44032: 0x9F56, + 50889 - 44032: 0x9F57, + 50890 - 44032: 0x9F58, + 50891 - 44032: 0x9F59, + 50892 - 44032: 0xBFF6, + 50893 - 44032: 0xBFF7, + 50894 - 44032: 0x9F5A, + 50895 - 44032: 0x9F61, + 50896 - 44032: 0xBFF8, + 50897 - 44032: 0x9F62, + 50898 - 44032: 0x9F63, + 50899 - 44032: 0x9F64, + 50900 - 44032: 0xBFF9, + 50901 - 44032: 0x9F65, + 50902 - 44032: 0x9F66, + 50903 - 44032: 0x9F67, + 50904 - 44032: 0x9F68, + 50905 - 44032: 0x9F69, + 50906 - 44032: 0x9F6A, + 50907 - 44032: 0x9F6B, + 50908 - 44032: 0xBFFA, + 50909 - 44032: 0xBFFB, + 50910 - 44032: 0x9F6C, + 50911 - 44032: 0x9F6D, + 50912 - 44032: 0xBFFC, + 50913 - 44032: 0xBFFD, + 50914 - 44032: 0x9F6E, + 50915 - 44032: 0x9F6F, + 50916 - 44032: 0x9F70, + 50917 - 44032: 0x9F71, + 50918 - 44032: 0x9F72, + 50919 - 44032: 0x9F73, + 50920 - 44032: 0xBFFE, + 50921 - 44032: 0xC0A1, + 50922 - 44032: 0x9F74, + 50923 - 44032: 0x9F75, + 50924 - 44032: 0xC0A2, + 50925 - 44032: 0x9F76, + 50926 - 44032: 0x9F77, + 50927 - 44032: 0x9F78, + 50928 - 44032: 0xC0A3, + 50929 - 44032: 0x9F79, + 50930 - 44032: 0x9F7A, + 50931 - 44032: 0x9F81, + 50932 - 44032: 0x9F82, + 50933 - 44032: 0x9F83, + 50934 - 44032: 0x9F84, + 50935 - 44032: 0x9F85, + 50936 - 44032: 0xC0A4, + 50937 - 44032: 0xC0A5, + 50938 - 44032: 0x9F86, + 50939 - 44032: 0x9F87, + 50940 - 44032: 0x9F88, + 50941 - 44032: 0xC0A6, + 50942 - 44032: 0x9F89, + 50943 - 44032: 0x9F8A, + 50944 - 44032: 0x9F8B, + 50945 - 44032: 0x9F8C, + 50946 - 44032: 0x9F8D, + 50947 - 44032: 0x9F8E, + 50948 - 44032: 0xC0A7, + 50949 - 44032: 0xC0A8, + 50950 - 44032: 0x9F8F, + 50951 - 44032: 0x9F90, + 50952 - 44032: 0xC0A9, + 50953 - 44032: 0x9F91, + 50954 - 44032: 0x9F92, + 50955 - 44032: 0x9F93, + 50956 - 44032: 0xC0AA, + 50957 - 44032: 0x9F94, + 50958 - 44032: 0x9F95, + 50959 - 44032: 0x9F96, + 50960 - 44032: 0x9F97, + 50961 - 44032: 0x9F98, + 50962 - 44032: 0x9F99, + 50963 - 44032: 0x9F9A, + 50964 - 44032: 0xC0AB, + 50965 - 44032: 0xC0AC, + 50966 - 44032: 0x9F9B, + 50967 - 44032: 0xC0AD, + 50968 - 44032: 0x9F9C, + 50969 - 44032: 0xC0AE, + 50970 - 44032: 0x9F9D, + 50971 - 44032: 0x9F9E, + 50972 - 44032: 0x9F9F, + 50973 - 44032: 0x9FA0, + 50974 - 44032: 0x9FA1, + 50975 - 44032: 0x9FA2, + 50976 - 44032: 0xC0AF, + 50977 - 44032: 0xC0B0, + 50978 - 44032: 0x9FA3, + 50979 - 44032: 0x9FA4, + 50980 - 44032: 0xC0B1, + 50981 - 44032: 0x9FA5, + 50982 - 44032: 0x9FA6, + 50983 - 44032: 0x9FA7, + 50984 - 44032: 0xC0B2, + 50985 - 44032: 0x9FA8, + 50986 - 44032: 0x9FA9, + 50987 - 44032: 0x9FAA, + 50988 - 44032: 0x9FAB, + 50989 - 44032: 0x9FAC, + 50990 - 44032: 0x9FAD, + 50991 - 44032: 0x9FAE, + 50992 - 44032: 0xC0B3, + 50993 - 44032: 0xC0B4, + 50994 - 44032: 0x9FAF, + 50995 - 44032: 0xC0B5, + 50996 - 44032: 0x9FB0, + 50997 - 44032: 0xC0B6, + 50998 - 44032: 0x9FB1, + 50999 - 44032: 0xC0B7, + 51000 - 44032: 0x9FB2, + 51001 - 44032: 0x9FB3, + 51002 - 44032: 0x9FB4, + 51003 - 44032: 0x9FB5, + 51004 - 44032: 0xC0B8, + 51005 - 44032: 0xC0B9, + 51006 - 44032: 0x9FB6, + 51007 - 44032: 0x9FB7, + 51008 - 44032: 0xC0BA, + 51009 - 44032: 0x9FB8, + 51010 - 44032: 0x9FB9, + 51011 - 44032: 0x9FBA, + 51012 - 44032: 0xC0BB, + 51013 - 44032: 0x9FBB, + 51014 - 44032: 0x9FBC, + 51015 - 44032: 0x9FBD, + 51016 - 44032: 0x9FBE, + 51017 - 44032: 0x9FBF, + 51018 - 44032: 0xC0BC, + 51019 - 44032: 0x9FC0, + 51020 - 44032: 0xC0BD, + 51021 - 44032: 0xC0BE, + 51022 - 44032: 0x9FC1, + 51023 - 44032: 0xC0BF, + 51024 - 44032: 0x9FC2, + 51025 - 44032: 0xC0C0, + 51026 - 44032: 0xC0C1, + 51027 - 44032: 0xC0C2, + 51028 - 44032: 0xC0C3, + 51029 - 44032: 0xC0C4, + 51030 - 44032: 0xC0C5, + 51031 - 44032: 0xC0C6, + 51032 - 44032: 0xC0C7, + 51033 - 44032: 0x9FC3, + 51034 - 44032: 0x9FC4, + 51035 - 44032: 0x9FC5, + 51036 - 44032: 0xC0C8, + 51037 - 44032: 0x9FC6, + 51038 - 44032: 0x9FC7, + 51039 - 44032: 0x9FC8, + 51040 - 44032: 0xC0C9, + 51041 - 44032: 0x9FC9, + 51042 - 44032: 0x9FCA, + 51043 - 44032: 0x9FCB, + 51044 - 44032: 0x9FCC, + 51045 - 44032: 0x9FCD, + 51046 - 44032: 0x9FCE, + 51047 - 44032: 0x9FCF, + 51048 - 44032: 0xC0CA, + 51049 - 44032: 0x9FD0, + 51050 - 44032: 0x9FD1, + 51051 - 44032: 0xC0CB, + 51052 - 44032: 0x9FD2, + 51053 - 44032: 0x9FD3, + 51054 - 44032: 0x9FD4, + 51055 - 44032: 0x9FD5, + 51056 - 44032: 0x9FD6, + 51057 - 44032: 0x9FD7, + 51058 - 44032: 0x9FD8, + 51059 - 44032: 0x9FD9, + 51060 - 44032: 0xC0CC, + 51061 - 44032: 0xC0CD, + 51062 - 44032: 0x9FDA, + 51063 - 44032: 0x9FDB, + 51064 - 44032: 0xC0CE, + 51065 - 44032: 0x9FDC, + 51066 - 44032: 0x9FDD, + 51067 - 44032: 0x9FDE, + 51068 - 44032: 0xC0CF, + 51069 - 44032: 0xC0D0, + 51070 - 44032: 0xC0D1, + 51071 - 44032: 0x9FDF, + 51072 - 44032: 0x9FE0, + 51073 - 44032: 0x9FE1, + 51074 - 44032: 0x9FE2, + 51075 - 44032: 0xC0D2, + 51076 - 44032: 0xC0D3, + 51077 - 44032: 0xC0D4, + 51078 - 44032: 0x9FE3, + 51079 - 44032: 0xC0D5, + 51080 - 44032: 0xC0D6, + 51081 - 44032: 0xC0D7, + 51082 - 44032: 0xC0D8, + 51083 - 44032: 0x9FE4, + 51084 - 44032: 0x9FE5, + 51085 - 44032: 0x9FE6, + 51086 - 44032: 0xC0D9, + 51087 - 44032: 0x9FE7, + 51088 - 44032: 0xC0DA, + 51089 - 44032: 0xC0DB, + 51090 - 44032: 0x9FE8, + 51091 - 44032: 0x9FE9, + 51092 - 44032: 0xC0DC, + 51093 - 44032: 0x9FEA, + 51094 - 44032: 0xC0DD, + 51095 - 44032: 0xC0DE, + 51096 - 44032: 0xC0DF, + 51097 - 44032: 0x9FEB, + 51098 - 44032: 0xC0E0, + 51099 - 44032: 0x9FEC, + 51100 - 44032: 0x9FED, + 51101 - 44032: 0x9FEE, + 51102 - 44032: 0x9FEF, + 51103 - 44032: 0x9FF0, + 51104 - 44032: 0xC0E1, + 51105 - 44032: 0xC0E2, + 51106 - 44032: 0x9FF1, + 51107 - 44032: 0xC0E3, + 51108 - 44032: 0xC0E4, + 51109 - 44032: 0xC0E5, + 51110 - 44032: 0xC0E6, + 51111 - 44032: 0x9FF2, + 51112 - 44032: 0x9FF3, + 51113 - 44032: 0x9FF4, + 51114 - 44032: 0x9FF5, + 51115 - 44032: 0x9FF6, + 51116 - 44032: 0xC0E7, + 51117 - 44032: 0xC0E8, + 51118 - 44032: 0x9FF7, + 51119 - 44032: 0x9FF8, + 51120 - 44032: 0xC0E9, + 51121 - 44032: 0x9FF9, + 51122 - 44032: 0x9FFA, + 51123 - 44032: 0x9FFB, + 51124 - 44032: 0xC0EA, + 51125 - 44032: 0x9FFC, + 51126 - 44032: 0x9FFD, + 51127 - 44032: 0x9FFE, + 51128 - 44032: 0xA041, + 51129 - 44032: 0xA042, + 51130 - 44032: 0xA043, + 51131 - 44032: 0xA044, + 51132 - 44032: 0xC0EB, + 51133 - 44032: 0xC0EC, + 51134 - 44032: 0xA045, + 51135 - 44032: 0xC0ED, + 51136 - 44032: 0xC0EE, + 51137 - 44032: 0xC0EF, + 51138 - 44032: 0xA046, + 51139 - 44032: 0xA047, + 51140 - 44032: 0xA048, + 51141 - 44032: 0xA049, + 51142 - 44032: 0xA04A, + 51143 - 44032: 0xA04B, + 51144 - 44032: 0xC0F0, + 51145 - 44032: 0xC0F1, + 51146 - 44032: 0xA04C, + 51147 - 44032: 0xA04D, + 51148 - 44032: 0xC0F2, + 51149 - 44032: 0xA04E, + 51150 - 44032: 0xC0F3, + 51151 - 44032: 0xA04F, + 51152 - 44032: 0xC0F4, + 51153 - 44032: 0xA050, + 51154 - 44032: 0xA051, + 51155 - 44032: 0xA052, + 51156 - 44032: 0xA053, + 51157 - 44032: 0xA054, + 51158 - 44032: 0xA055, + 51159 - 44032: 0xA056, + 51160 - 44032: 0xC0F5, + 51161 - 44032: 0xA057, + 51162 - 44032: 0xA058, + 51163 - 44032: 0xA059, + 51164 - 44032: 0xA05A, + 51165 - 44032: 0xC0F6, + 51166 - 44032: 0xA061, + 51167 - 44032: 0xA062, + 51168 - 44032: 0xA063, + 51169 - 44032: 0xA064, + 51170 - 44032: 0xA065, + 51171 - 44032: 0xA066, + 51172 - 44032: 0xC0F7, + 51173 - 44032: 0xA067, + 51174 - 44032: 0xA068, + 51175 - 44032: 0xA069, + 51176 - 44032: 0xC0F8, + 51177 - 44032: 0xA06A, + 51178 - 44032: 0xA06B, + 51179 - 44032: 0xA06C, + 51180 - 44032: 0xC0F9, + 51181 - 44032: 0xA06D, + 51182 - 44032: 0xA06E, + 51183 - 44032: 0xA06F, + 51184 - 44032: 0xA070, + 51185 - 44032: 0xA071, + 51186 - 44032: 0xA072, + 51187 - 44032: 0xA073, + 51188 - 44032: 0xA074, + 51189 - 44032: 0xA075, + 51190 - 44032: 0xA076, + 51191 - 44032: 0xA077, + 51192 - 44032: 0xA078, + 51193 - 44032: 0xA079, + 51194 - 44032: 0xA07A, + 51195 - 44032: 0xA081, + 51196 - 44032: 0xA082, + 51197 - 44032: 0xA083, + 51198 - 44032: 0xA084, + 51199 - 44032: 0xA085, + 51200 - 44032: 0xC0FA, + 51201 - 44032: 0xC0FB, + 51202 - 44032: 0xA086, + 51203 - 44032: 0xA087, + 51204 - 44032: 0xC0FC, + 51205 - 44032: 0xA088, + 51206 - 44032: 0xA089, + 51207 - 44032: 0xA08A, + 51208 - 44032: 0xC0FD, + 51209 - 44032: 0xA08B, + 51210 - 44032: 0xC0FE, + 51211 - 44032: 0xA08C, + 51212 - 44032: 0xA08D, + 51213 - 44032: 0xA08E, + 51214 - 44032: 0xA08F, + 51215 - 44032: 0xA090, + 51216 - 44032: 0xC1A1, + 51217 - 44032: 0xC1A2, + 51218 - 44032: 0xA091, + 51219 - 44032: 0xC1A3, + 51220 - 44032: 0xA092, + 51221 - 44032: 0xC1A4, + 51222 - 44032: 0xC1A5, + 51223 - 44032: 0xA093, + 51224 - 44032: 0xA094, + 51225 - 44032: 0xA095, + 51226 - 44032: 0xA096, + 51227 - 44032: 0xA097, + 51228 - 44032: 0xC1A6, + 51229 - 44032: 0xC1A7, + 51230 - 44032: 0xA098, + 51231 - 44032: 0xA099, + 51232 - 44032: 0xC1A8, + 51233 - 44032: 0xA09A, + 51234 - 44032: 0xA09B, + 51235 - 44032: 0xA09C, + 51236 - 44032: 0xC1A9, + 51237 - 44032: 0xA09D, + 51238 - 44032: 0xA09E, + 51239 - 44032: 0xA09F, + 51240 - 44032: 0xA0A0, + 51241 - 44032: 0xA0A1, + 51242 - 44032: 0xA0A2, + 51243 - 44032: 0xA0A3, + 51244 - 44032: 0xC1AA, + 51245 - 44032: 0xC1AB, + 51246 - 44032: 0xA0A4, + 51247 - 44032: 0xC1AC, + 51248 - 44032: 0xA0A5, + 51249 - 44032: 0xC1AD, + 51250 - 44032: 0xA0A6, + 51251 - 44032: 0xA0A7, + 51252 - 44032: 0xA0A8, + 51253 - 44032: 0xA0A9, + 51254 - 44032: 0xA0AA, + 51255 - 44032: 0xA0AB, + 51256 - 44032: 0xC1AE, + 51257 - 44032: 0xA0AC, + 51258 - 44032: 0xA0AD, + 51259 - 44032: 0xA0AE, + 51260 - 44032: 0xC1AF, + 51261 - 44032: 0xA0AF, + 51262 - 44032: 0xA0B0, + 51263 - 44032: 0xA0B1, + 51264 - 44032: 0xC1B0, + 51265 - 44032: 0xA0B2, + 51266 - 44032: 0xA0B3, + 51267 - 44032: 0xA0B4, + 51268 - 44032: 0xA0B5, + 51269 - 44032: 0xA0B6, + 51270 - 44032: 0xA0B7, + 51271 - 44032: 0xA0B8, + 51272 - 44032: 0xC1B1, + 51273 - 44032: 0xC1B2, + 51274 - 44032: 0xA0B9, + 51275 - 44032: 0xA0BA, + 51276 - 44032: 0xC1B3, + 51277 - 44032: 0xC1B4, + 51278 - 44032: 0xA0BB, + 51279 - 44032: 0xA0BC, + 51280 - 44032: 0xA0BD, + 51281 - 44032: 0xA0BE, + 51282 - 44032: 0xA0BF, + 51283 - 44032: 0xA0C0, + 51284 - 44032: 0xC1B5, + 51285 - 44032: 0xA0C1, + 51286 - 44032: 0xA0C2, + 51287 - 44032: 0xA0C3, + 51288 - 44032: 0xA0C4, + 51289 - 44032: 0xA0C5, + 51290 - 44032: 0xA0C6, + 51291 - 44032: 0xA0C7, + 51292 - 44032: 0xA0C8, + 51293 - 44032: 0xA0C9, + 51294 - 44032: 0xA0CA, + 51295 - 44032: 0xA0CB, + 51296 - 44032: 0xA0CC, + 51297 - 44032: 0xA0CD, + 51298 - 44032: 0xA0CE, + 51299 - 44032: 0xA0CF, + 51300 - 44032: 0xA0D0, + 51301 - 44032: 0xA0D1, + 51302 - 44032: 0xA0D2, + 51303 - 44032: 0xA0D3, + 51304 - 44032: 0xA0D4, + 51305 - 44032: 0xA0D5, + 51306 - 44032: 0xA0D6, + 51307 - 44032: 0xA0D7, + 51308 - 44032: 0xA0D8, + 51309 - 44032: 0xA0D9, + 51310 - 44032: 0xA0DA, + 51311 - 44032: 0xA0DB, + 51312 - 44032: 0xC1B6, + 51313 - 44032: 0xC1B7, + 51314 - 44032: 0xA0DC, + 51315 - 44032: 0xA0DD, + 51316 - 44032: 0xC1B8, + 51317 - 44032: 0xA0DE, + 51318 - 44032: 0xA0DF, + 51319 - 44032: 0xA0E0, + 51320 - 44032: 0xC1B9, + 51321 - 44032: 0xA0E1, + 51322 - 44032: 0xC1BA, + 51323 - 44032: 0xA0E2, + 51324 - 44032: 0xA0E3, + 51325 - 44032: 0xA0E4, + 51326 - 44032: 0xA0E5, + 51327 - 44032: 0xA0E6, + 51328 - 44032: 0xC1BB, + 51329 - 44032: 0xC1BC, + 51330 - 44032: 0xA0E7, + 51331 - 44032: 0xC1BD, + 51332 - 44032: 0xA0E8, + 51333 - 44032: 0xC1BE, + 51334 - 44032: 0xC1BF, + 51335 - 44032: 0xC1C0, + 51336 - 44032: 0xA0E9, + 51337 - 44032: 0xA0EA, + 51338 - 44032: 0xA0EB, + 51339 - 44032: 0xC1C1, + 51340 - 44032: 0xC1C2, + 51341 - 44032: 0xC1C3, + 51342 - 44032: 0xA0EC, + 51343 - 44032: 0xA0ED, + 51344 - 44032: 0xA0EE, + 51345 - 44032: 0xA0EF, + 51346 - 44032: 0xA0F0, + 51347 - 44032: 0xA0F1, + 51348 - 44032: 0xC1C4, + 51349 - 44032: 0xA0F2, + 51350 - 44032: 0xA0F3, + 51351 - 44032: 0xA0F4, + 51352 - 44032: 0xA0F5, + 51353 - 44032: 0xA0F6, + 51354 - 44032: 0xA0F7, + 51355 - 44032: 0xA0F8, + 51356 - 44032: 0xA0F9, + 51357 - 44032: 0xC1C5, + 51358 - 44032: 0xA0FA, + 51359 - 44032: 0xC1C6, + 51360 - 44032: 0xA0FB, + 51361 - 44032: 0xC1C7, + 51362 - 44032: 0xA0FC, + 51363 - 44032: 0xA0FD, + 51364 - 44032: 0xA0FE, + 51365 - 44032: 0xA141, + 51366 - 44032: 0xA142, + 51367 - 44032: 0xA143, + 51368 - 44032: 0xC1C8, + 51369 - 44032: 0xA144, + 51370 - 44032: 0xA145, + 51371 - 44032: 0xA146, + 51372 - 44032: 0xA147, + 51373 - 44032: 0xA148, + 51374 - 44032: 0xA149, + 51375 - 44032: 0xA14A, + 51376 - 44032: 0xA14B, + 51377 - 44032: 0xA14C, + 51378 - 44032: 0xA14D, + 51379 - 44032: 0xA14E, + 51380 - 44032: 0xA14F, + 51381 - 44032: 0xA150, + 51382 - 44032: 0xA151, + 51383 - 44032: 0xA152, + 51384 - 44032: 0xA153, + 51385 - 44032: 0xA154, + 51386 - 44032: 0xA155, + 51387 - 44032: 0xA156, + 51388 - 44032: 0xC1C9, + 51389 - 44032: 0xC1CA, + 51390 - 44032: 0xA157, + 51391 - 44032: 0xA158, + 51392 - 44032: 0xA159, + 51393 - 44032: 0xA15A, + 51394 - 44032: 0xA161, + 51395 - 44032: 0xA162, + 51396 - 44032: 0xC1CB, + 51397 - 44032: 0xA163, + 51398 - 44032: 0xA164, + 51399 - 44032: 0xA165, + 51400 - 44032: 0xC1CC, + 51401 - 44032: 0xA166, + 51402 - 44032: 0xA167, + 51403 - 44032: 0xA168, + 51404 - 44032: 0xC1CD, + 51405 - 44032: 0xA169, + 51406 - 44032: 0xA16A, + 51407 - 44032: 0xA16B, + 51408 - 44032: 0xA16C, + 51409 - 44032: 0xA16D, + 51410 - 44032: 0xA16E, + 51411 - 44032: 0xA16F, + 51412 - 44032: 0xC1CE, + 51413 - 44032: 0xC1CF, + 51414 - 44032: 0xA170, + 51415 - 44032: 0xC1D0, + 51416 - 44032: 0xA171, + 51417 - 44032: 0xC1D1, + 51418 - 44032: 0xA172, + 51419 - 44032: 0xA173, + 51420 - 44032: 0xA174, + 51421 - 44032: 0xA175, + 51422 - 44032: 0xA176, + 51423 - 44032: 0xA177, + 51424 - 44032: 0xC1D2, + 51425 - 44032: 0xC1D3, + 51426 - 44032: 0xA178, + 51427 - 44032: 0xA179, + 51428 - 44032: 0xC1D4, + 51429 - 44032: 0xA17A, + 51430 - 44032: 0xA181, + 51431 - 44032: 0xA182, + 51432 - 44032: 0xA183, + 51433 - 44032: 0xA184, + 51434 - 44032: 0xA185, + 51435 - 44032: 0xA186, + 51436 - 44032: 0xA187, + 51437 - 44032: 0xA188, + 51438 - 44032: 0xA189, + 51439 - 44032: 0xA18A, + 51440 - 44032: 0xA18B, + 51441 - 44032: 0xA18C, + 51442 - 44032: 0xA18D, + 51443 - 44032: 0xA18E, + 51444 - 44032: 0xA18F, + 51445 - 44032: 0xC1D5, + 51446 - 44032: 0xA190, + 51447 - 44032: 0xA191, + 51448 - 44032: 0xA192, + 51449 - 44032: 0xA193, + 51450 - 44032: 0xA194, + 51451 - 44032: 0xA195, + 51452 - 44032: 0xC1D6, + 51453 - 44032: 0xC1D7, + 51454 - 44032: 0xA196, + 51455 - 44032: 0xA197, + 51456 - 44032: 0xC1D8, + 51457 - 44032: 0xA198, + 51458 - 44032: 0xA199, + 51459 - 44032: 0xA19A, + 51460 - 44032: 0xC1D9, + 51461 - 44032: 0xC1DA, + 51462 - 44032: 0xC1DB, + 51463 - 44032: 0xA19B, + 51464 - 44032: 0xA19C, + 51465 - 44032: 0xA19D, + 51466 - 44032: 0xA19E, + 51467 - 44032: 0xA19F, + 51468 - 44032: 0xC1DC, + 51469 - 44032: 0xC1DD, + 51470 - 44032: 0xA1A0, + 51471 - 44032: 0xC1DE, + 51472 - 44032: 0xA241, + 51473 - 44032: 0xC1DF, + 51474 - 44032: 0xA242, + 51475 - 44032: 0xA243, + 51476 - 44032: 0xA244, + 51477 - 44032: 0xA245, + 51478 - 44032: 0xA246, + 51479 - 44032: 0xA247, + 51480 - 44032: 0xC1E0, + 51481 - 44032: 0xA248, + 51482 - 44032: 0xA249, + 51483 - 44032: 0xA24A, + 51484 - 44032: 0xA24B, + 51485 - 44032: 0xA24C, + 51486 - 44032: 0xA24D, + 51487 - 44032: 0xA24E, + 51488 - 44032: 0xA24F, + 51489 - 44032: 0xA250, + 51490 - 44032: 0xA251, + 51491 - 44032: 0xA252, + 51492 - 44032: 0xA253, + 51493 - 44032: 0xA254, + 51494 - 44032: 0xA255, + 51495 - 44032: 0xA256, + 51496 - 44032: 0xA257, + 51497 - 44032: 0xA258, + 51498 - 44032: 0xA259, + 51499 - 44032: 0xA25A, + 51500 - 44032: 0xC1E1, + 51501 - 44032: 0xA261, + 51502 - 44032: 0xA262, + 51503 - 44032: 0xA263, + 51504 - 44032: 0xA264, + 51505 - 44032: 0xA265, + 51506 - 44032: 0xA266, + 51507 - 44032: 0xA267, + 51508 - 44032: 0xC1E2, + 51509 - 44032: 0xA268, + 51510 - 44032: 0xA269, + 51511 - 44032: 0xA26A, + 51512 - 44032: 0xA26B, + 51513 - 44032: 0xA26C, + 51514 - 44032: 0xA26D, + 51515 - 44032: 0xA26E, + 51516 - 44032: 0xA26F, + 51517 - 44032: 0xA270, + 51518 - 44032: 0xA271, + 51519 - 44032: 0xA272, + 51520 - 44032: 0xA273, + 51521 - 44032: 0xA274, + 51522 - 44032: 0xA275, + 51523 - 44032: 0xA276, + 51524 - 44032: 0xA277, + 51525 - 44032: 0xA278, + 51526 - 44032: 0xA279, + 51527 - 44032: 0xA27A, + 51528 - 44032: 0xA281, + 51529 - 44032: 0xA282, + 51530 - 44032: 0xA283, + 51531 - 44032: 0xA284, + 51532 - 44032: 0xA285, + 51533 - 44032: 0xA286, + 51534 - 44032: 0xA287, + 51535 - 44032: 0xA288, + 51536 - 44032: 0xC1E3, + 51537 - 44032: 0xC1E4, + 51538 - 44032: 0xA289, + 51539 - 44032: 0xA28A, + 51540 - 44032: 0xC1E5, + 51541 - 44032: 0xA28B, + 51542 - 44032: 0xA28C, + 51543 - 44032: 0xA28D, + 51544 - 44032: 0xC1E6, + 51545 - 44032: 0xA28E, + 51546 - 44032: 0xA28F, + 51547 - 44032: 0xA290, + 51548 - 44032: 0xA291, + 51549 - 44032: 0xA292, + 51550 - 44032: 0xA293, + 51551 - 44032: 0xA294, + 51552 - 44032: 0xC1E7, + 51553 - 44032: 0xC1E8, + 51554 - 44032: 0xA295, + 51555 - 44032: 0xC1E9, + 51556 - 44032: 0xA296, + 51557 - 44032: 0xA297, + 51558 - 44032: 0xA298, + 51559 - 44032: 0xA299, + 51560 - 44032: 0xA29A, + 51561 - 44032: 0xA29B, + 51562 - 44032: 0xA29C, + 51563 - 44032: 0xA29D, + 51564 - 44032: 0xC1EA, + 51565 - 44032: 0xA29E, + 51566 - 44032: 0xA29F, + 51567 - 44032: 0xA2A0, + 51568 - 44032: 0xC1EB, + 51569 - 44032: 0xA341, + 51570 - 44032: 0xA342, + 51571 - 44032: 0xA343, + 51572 - 44032: 0xC1EC, + 51573 - 44032: 0xA344, + 51574 - 44032: 0xA345, + 51575 - 44032: 0xA346, + 51576 - 44032: 0xA347, + 51577 - 44032: 0xA348, + 51578 - 44032: 0xA349, + 51579 - 44032: 0xA34A, + 51580 - 44032: 0xC1ED, + 51581 - 44032: 0xA34B, + 51582 - 44032: 0xA34C, + 51583 - 44032: 0xA34D, + 51584 - 44032: 0xA34E, + 51585 - 44032: 0xA34F, + 51586 - 44032: 0xA350, + 51587 - 44032: 0xA351, + 51588 - 44032: 0xA352, + 51589 - 44032: 0xA353, + 51590 - 44032: 0xA354, + 51591 - 44032: 0xA355, + 51592 - 44032: 0xC1EE, + 51593 - 44032: 0xC1EF, + 51594 - 44032: 0xA356, + 51595 - 44032: 0xA357, + 51596 - 44032: 0xC1F0, + 51597 - 44032: 0xA358, + 51598 - 44032: 0xA359, + 51599 - 44032: 0xA35A, + 51600 - 44032: 0xC1F1, + 51601 - 44032: 0xA361, + 51602 - 44032: 0xA362, + 51603 - 44032: 0xA363, + 51604 - 44032: 0xA364, + 51605 - 44032: 0xA365, + 51606 - 44032: 0xA366, + 51607 - 44032: 0xA367, + 51608 - 44032: 0xC1F2, + 51609 - 44032: 0xC1F3, + 51610 - 44032: 0xA368, + 51611 - 44032: 0xC1F4, + 51612 - 44032: 0xA369, + 51613 - 44032: 0xC1F5, + 51614 - 44032: 0xA36A, + 51615 - 44032: 0xA36B, + 51616 - 44032: 0xA36C, + 51617 - 44032: 0xA36D, + 51618 - 44032: 0xA36E, + 51619 - 44032: 0xA36F, + 51620 - 44032: 0xA370, + 51621 - 44032: 0xA371, + 51622 - 44032: 0xA372, + 51623 - 44032: 0xA373, + 51624 - 44032: 0xA374, + 51625 - 44032: 0xA375, + 51626 - 44032: 0xA376, + 51627 - 44032: 0xA377, + 51628 - 44032: 0xA378, + 51629 - 44032: 0xA379, + 51630 - 44032: 0xA37A, + 51631 - 44032: 0xA381, + 51632 - 44032: 0xA382, + 51633 - 44032: 0xA383, + 51634 - 44032: 0xA384, + 51635 - 44032: 0xA385, + 51636 - 44032: 0xA386, + 51637 - 44032: 0xA387, + 51638 - 44032: 0xA388, + 51639 - 44032: 0xA389, + 51640 - 44032: 0xA38A, + 51641 - 44032: 0xA38B, + 51642 - 44032: 0xA38C, + 51643 - 44032: 0xA38D, + 51644 - 44032: 0xA38E, + 51645 - 44032: 0xA38F, + 51646 - 44032: 0xA390, + 51647 - 44032: 0xA391, + 51648 - 44032: 0xC1F6, + 51649 - 44032: 0xC1F7, + 51650 - 44032: 0xA392, + 51651 - 44032: 0xA393, + 51652 - 44032: 0xC1F8, + 51653 - 44032: 0xA394, + 51654 - 44032: 0xA395, + 51655 - 44032: 0xC1F9, + 51656 - 44032: 0xC1FA, + 51657 - 44032: 0xA396, + 51658 - 44032: 0xC1FB, + 51659 - 44032: 0xA397, + 51660 - 44032: 0xA398, + 51661 - 44032: 0xA399, + 51662 - 44032: 0xA39A, + 51663 - 44032: 0xA39B, + 51664 - 44032: 0xC1FC, + 51665 - 44032: 0xC1FD, + 51666 - 44032: 0xA39C, + 51667 - 44032: 0xC1FE, + 51668 - 44032: 0xA39D, + 51669 - 44032: 0xC2A1, + 51670 - 44032: 0xC2A2, + 51671 - 44032: 0xA39E, + 51672 - 44032: 0xA39F, + 51673 - 44032: 0xC2A3, + 51674 - 44032: 0xC2A4, + 51675 - 44032: 0xA3A0, + 51676 - 44032: 0xC2A5, + 51677 - 44032: 0xC2A6, + 51678 - 44032: 0xA441, + 51679 - 44032: 0xA442, + 51680 - 44032: 0xC2A7, + 51681 - 44032: 0xA443, + 51682 - 44032: 0xC2A8, + 51683 - 44032: 0xA444, + 51684 - 44032: 0xC2A9, + 51685 - 44032: 0xA445, + 51686 - 44032: 0xA446, + 51687 - 44032: 0xC2AA, + 51688 - 44032: 0xA447, + 51689 - 44032: 0xA448, + 51690 - 44032: 0xA449, + 51691 - 44032: 0xA44A, + 51692 - 44032: 0xC2AB, + 51693 - 44032: 0xC2AC, + 51694 - 44032: 0xA44B, + 51695 - 44032: 0xC2AD, + 51696 - 44032: 0xC2AE, + 51697 - 44032: 0xC2AF, + 51698 - 44032: 0xA44C, + 51699 - 44032: 0xA44D, + 51700 - 44032: 0xA44E, + 51701 - 44032: 0xA44F, + 51702 - 44032: 0xA450, + 51703 - 44032: 0xA451, + 51704 - 44032: 0xC2B0, + 51705 - 44032: 0xC2B1, + 51706 - 44032: 0xA452, + 51707 - 44032: 0xA453, + 51708 - 44032: 0xC2B2, + 51709 - 44032: 0xA454, + 51710 - 44032: 0xA455, + 51711 - 44032: 0xA456, + 51712 - 44032: 0xC2B3, + 51713 - 44032: 0xA457, + 51714 - 44032: 0xA458, + 51715 - 44032: 0xA459, + 51716 - 44032: 0xA45A, + 51717 - 44032: 0xA461, + 51718 - 44032: 0xA462, + 51719 - 44032: 0xA463, + 51720 - 44032: 0xC2B4, + 51721 - 44032: 0xC2B5, + 51722 - 44032: 0xA464, + 51723 - 44032: 0xC2B6, + 51724 - 44032: 0xC2B7, + 51725 - 44032: 0xC2B8, + 51726 - 44032: 0xA465, + 51727 - 44032: 0xA466, + 51728 - 44032: 0xA467, + 51729 - 44032: 0xA468, + 51730 - 44032: 0xA469, + 51731 - 44032: 0xA46A, + 51732 - 44032: 0xC2B9, + 51733 - 44032: 0xA46B, + 51734 - 44032: 0xA46C, + 51735 - 44032: 0xA46D, + 51736 - 44032: 0xC2BA, + 51737 - 44032: 0xA46E, + 51738 - 44032: 0xA46F, + 51739 - 44032: 0xA470, + 51740 - 44032: 0xA471, + 51741 - 44032: 0xA472, + 51742 - 44032: 0xA473, + 51743 - 44032: 0xA474, + 51744 - 44032: 0xA475, + 51745 - 44032: 0xA476, + 51746 - 44032: 0xA477, + 51747 - 44032: 0xA478, + 51748 - 44032: 0xA479, + 51749 - 44032: 0xA47A, + 51750 - 44032: 0xA481, + 51751 - 44032: 0xA482, + 51752 - 44032: 0xA483, + 51753 - 44032: 0xC2BB, + 51754 - 44032: 0xA484, + 51755 - 44032: 0xA485, + 51756 - 44032: 0xA486, + 51757 - 44032: 0xA487, + 51758 - 44032: 0xA488, + 51759 - 44032: 0xA489, + 51760 - 44032: 0xA48A, + 51761 - 44032: 0xA48B, + 51762 - 44032: 0xA48C, + 51763 - 44032: 0xA48D, + 51764 - 44032: 0xA48E, + 51765 - 44032: 0xA48F, + 51766 - 44032: 0xA490, + 51767 - 44032: 0xA491, + 51768 - 44032: 0xA492, + 51769 - 44032: 0xA493, + 51770 - 44032: 0xA494, + 51771 - 44032: 0xA495, + 51772 - 44032: 0xA496, + 51773 - 44032: 0xA497, + 51774 - 44032: 0xA498, + 51775 - 44032: 0xA499, + 51776 - 44032: 0xA49A, + 51777 - 44032: 0xA49B, + 51778 - 44032: 0xA49C, + 51779 - 44032: 0xA49D, + 51780 - 44032: 0xA49E, + 51781 - 44032: 0xA49F, + 51782 - 44032: 0xA4A0, + 51783 - 44032: 0xA541, + 51784 - 44032: 0xA542, + 51785 - 44032: 0xA543, + 51786 - 44032: 0xA544, + 51787 - 44032: 0xA545, + 51788 - 44032: 0xC2BC, + 51789 - 44032: 0xC2BD, + 51790 - 44032: 0xA546, + 51791 - 44032: 0xA547, + 51792 - 44032: 0xC2BE, + 51793 - 44032: 0xA548, + 51794 - 44032: 0xA549, + 51795 - 44032: 0xA54A, + 51796 - 44032: 0xC2BF, + 51797 - 44032: 0xA54B, + 51798 - 44032: 0xA54C, + 51799 - 44032: 0xA54D, + 51800 - 44032: 0xA54E, + 51801 - 44032: 0xA54F, + 51802 - 44032: 0xA550, + 51803 - 44032: 0xA551, + 51804 - 44032: 0xC2C0, + 51805 - 44032: 0xC2C1, + 51806 - 44032: 0xA552, + 51807 - 44032: 0xC2C2, + 51808 - 44032: 0xC2C3, + 51809 - 44032: 0xC2C4, + 51810 - 44032: 0xA553, + 51811 - 44032: 0xA554, + 51812 - 44032: 0xA555, + 51813 - 44032: 0xA556, + 51814 - 44032: 0xA557, + 51815 - 44032: 0xA558, + 51816 - 44032: 0xC2C5, + 51817 - 44032: 0xA559, + 51818 - 44032: 0xA55A, + 51819 - 44032: 0xA561, + 51820 - 44032: 0xA562, + 51821 - 44032: 0xA563, + 51822 - 44032: 0xA564, + 51823 - 44032: 0xA565, + 51824 - 44032: 0xA566, + 51825 - 44032: 0xA567, + 51826 - 44032: 0xA568, + 51827 - 44032: 0xA569, + 51828 - 44032: 0xA56A, + 51829 - 44032: 0xA56B, + 51830 - 44032: 0xA56C, + 51831 - 44032: 0xA56D, + 51832 - 44032: 0xA56E, + 51833 - 44032: 0xA56F, + 51834 - 44032: 0xA570, + 51835 - 44032: 0xA571, + 51836 - 44032: 0xA572, + 51837 - 44032: 0xC2C6, + 51838 - 44032: 0xA573, + 51839 - 44032: 0xA574, + 51840 - 44032: 0xA575, + 51841 - 44032: 0xA576, + 51842 - 44032: 0xA577, + 51843 - 44032: 0xA578, + 51844 - 44032: 0xC2C7, + 51845 - 44032: 0xA579, + 51846 - 44032: 0xA57A, + 51847 - 44032: 0xA581, + 51848 - 44032: 0xA582, + 51849 - 44032: 0xA583, + 51850 - 44032: 0xA584, + 51851 - 44032: 0xA585, + 51852 - 44032: 0xA586, + 51853 - 44032: 0xA587, + 51854 - 44032: 0xA588, + 51855 - 44032: 0xA589, + 51856 - 44032: 0xA58A, + 51857 - 44032: 0xA58B, + 51858 - 44032: 0xA58C, + 51859 - 44032: 0xA58D, + 51860 - 44032: 0xA58E, + 51861 - 44032: 0xA58F, + 51862 - 44032: 0xA590, + 51863 - 44032: 0xA591, + 51864 - 44032: 0xC2C8, + 51865 - 44032: 0xA592, + 51866 - 44032: 0xA593, + 51867 - 44032: 0xA594, + 51868 - 44032: 0xA595, + 51869 - 44032: 0xA596, + 51870 - 44032: 0xA597, + 51871 - 44032: 0xA598, + 51872 - 44032: 0xA599, + 51873 - 44032: 0xA59A, + 51874 - 44032: 0xA59B, + 51875 - 44032: 0xA59C, + 51876 - 44032: 0xA59D, + 51877 - 44032: 0xA59E, + 51878 - 44032: 0xA59F, + 51879 - 44032: 0xA5A0, + 51880 - 44032: 0xA641, + 51881 - 44032: 0xA642, + 51882 - 44032: 0xA643, + 51883 - 44032: 0xA644, + 51884 - 44032: 0xA645, + 51885 - 44032: 0xA646, + 51886 - 44032: 0xA647, + 51887 - 44032: 0xA648, + 51888 - 44032: 0xA649, + 51889 - 44032: 0xA64A, + 51890 - 44032: 0xA64B, + 51891 - 44032: 0xA64C, + 51892 - 44032: 0xA64D, + 51893 - 44032: 0xA64E, + 51894 - 44032: 0xA64F, + 51895 - 44032: 0xA650, + 51896 - 44032: 0xA651, + 51897 - 44032: 0xA652, + 51898 - 44032: 0xA653, + 51899 - 44032: 0xA654, + 51900 - 44032: 0xC2C9, + 51901 - 44032: 0xC2CA, + 51902 - 44032: 0xA655, + 51903 - 44032: 0xA656, + 51904 - 44032: 0xC2CB, + 51905 - 44032: 0xA657, + 51906 - 44032: 0xA658, + 51907 - 44032: 0xA659, + 51908 - 44032: 0xC2CC, + 51909 - 44032: 0xA65A, + 51910 - 44032: 0xA661, + 51911 - 44032: 0xA662, + 51912 - 44032: 0xA663, + 51913 - 44032: 0xA664, + 51914 - 44032: 0xA665, + 51915 - 44032: 0xA666, + 51916 - 44032: 0xC2CD, + 51917 - 44032: 0xC2CE, + 51918 - 44032: 0xA667, + 51919 - 44032: 0xC2CF, + 51920 - 44032: 0xA668, + 51921 - 44032: 0xC2D0, + 51922 - 44032: 0xA669, + 51923 - 44032: 0xC2D1, + 51924 - 44032: 0xA66A, + 51925 - 44032: 0xA66B, + 51926 - 44032: 0xA66C, + 51927 - 44032: 0xA66D, + 51928 - 44032: 0xC2D2, + 51929 - 44032: 0xC2D3, + 51930 - 44032: 0xA66E, + 51931 - 44032: 0xA66F, + 51932 - 44032: 0xA670, + 51933 - 44032: 0xA671, + 51934 - 44032: 0xA672, + 51935 - 44032: 0xA673, + 51936 - 44032: 0xC2D4, + 51937 - 44032: 0xA674, + 51938 - 44032: 0xA675, + 51939 - 44032: 0xA676, + 51940 - 44032: 0xA677, + 51941 - 44032: 0xA678, + 51942 - 44032: 0xA679, + 51943 - 44032: 0xA67A, + 51944 - 44032: 0xA681, + 51945 - 44032: 0xA682, + 51946 - 44032: 0xA683, + 51947 - 44032: 0xA684, + 51948 - 44032: 0xC2D5, + 51949 - 44032: 0xA685, + 51950 - 44032: 0xA686, + 51951 - 44032: 0xA687, + 51952 - 44032: 0xA688, + 51953 - 44032: 0xA689, + 51954 - 44032: 0xA68A, + 51955 - 44032: 0xA68B, + 51956 - 44032: 0xC2D6, + 51957 - 44032: 0xA68C, + 51958 - 44032: 0xA68D, + 51959 - 44032: 0xA68E, + 51960 - 44032: 0xA68F, + 51961 - 44032: 0xA690, + 51962 - 44032: 0xA691, + 51963 - 44032: 0xA692, + 51964 - 44032: 0xA693, + 51965 - 44032: 0xA694, + 51966 - 44032: 0xA695, + 51967 - 44032: 0xA696, + 51968 - 44032: 0xA697, + 51969 - 44032: 0xA698, + 51970 - 44032: 0xA699, + 51971 - 44032: 0xA69A, + 51972 - 44032: 0xA69B, + 51973 - 44032: 0xA69C, + 51974 - 44032: 0xA69D, + 51975 - 44032: 0xA69E, + 51976 - 44032: 0xC2D7, + 51977 - 44032: 0xA69F, + 51978 - 44032: 0xA6A0, + 51979 - 44032: 0xA741, + 51980 - 44032: 0xA742, + 51981 - 44032: 0xA743, + 51982 - 44032: 0xA744, + 51983 - 44032: 0xA745, + 51984 - 44032: 0xC2D8, + 51985 - 44032: 0xA746, + 51986 - 44032: 0xA747, + 51987 - 44032: 0xA748, + 51988 - 44032: 0xC2D9, + 51989 - 44032: 0xA749, + 51990 - 44032: 0xA74A, + 51991 - 44032: 0xA74B, + 51992 - 44032: 0xC2DA, + 51993 - 44032: 0xA74C, + 51994 - 44032: 0xA74D, + 51995 - 44032: 0xA74E, + 51996 - 44032: 0xA74F, + 51997 - 44032: 0xA750, + 51998 - 44032: 0xA751, + 51999 - 44032: 0xA752, + 52000 - 44032: 0xC2DB, + 52001 - 44032: 0xC2DC, + 52002 - 44032: 0xA753, + 52003 - 44032: 0xA754, + 52004 - 44032: 0xA755, + 52005 - 44032: 0xA756, + 52006 - 44032: 0xA757, + 52007 - 44032: 0xA758, + 52008 - 44032: 0xA759, + 52009 - 44032: 0xA75A, + 52010 - 44032: 0xA761, + 52011 - 44032: 0xA762, + 52012 - 44032: 0xA763, + 52013 - 44032: 0xA764, + 52014 - 44032: 0xA765, + 52015 - 44032: 0xA766, + 52016 - 44032: 0xA767, + 52017 - 44032: 0xA768, + 52018 - 44032: 0xA769, + 52019 - 44032: 0xA76A, + 52020 - 44032: 0xA76B, + 52021 - 44032: 0xA76C, + 52022 - 44032: 0xA76D, + 52023 - 44032: 0xA76E, + 52024 - 44032: 0xA76F, + 52025 - 44032: 0xA770, + 52026 - 44032: 0xA771, + 52027 - 44032: 0xA772, + 52028 - 44032: 0xA773, + 52029 - 44032: 0xA774, + 52030 - 44032: 0xA775, + 52031 - 44032: 0xA776, + 52032 - 44032: 0xA777, + 52033 - 44032: 0xC2DD, + 52034 - 44032: 0xA778, + 52035 - 44032: 0xA779, + 52036 - 44032: 0xA77A, + 52037 - 44032: 0xA781, + 52038 - 44032: 0xA782, + 52039 - 44032: 0xA783, + 52040 - 44032: 0xC2DE, + 52041 - 44032: 0xC2DF, + 52042 - 44032: 0xA784, + 52043 - 44032: 0xA785, + 52044 - 44032: 0xC2E0, + 52045 - 44032: 0xA786, + 52046 - 44032: 0xA787, + 52047 - 44032: 0xA788, + 52048 - 44032: 0xC2E1, + 52049 - 44032: 0xA789, + 52050 - 44032: 0xA78A, + 52051 - 44032: 0xA78B, + 52052 - 44032: 0xA78C, + 52053 - 44032: 0xA78D, + 52054 - 44032: 0xA78E, + 52055 - 44032: 0xA78F, + 52056 - 44032: 0xC2E2, + 52057 - 44032: 0xC2E3, + 52058 - 44032: 0xA790, + 52059 - 44032: 0xA791, + 52060 - 44032: 0xA792, + 52061 - 44032: 0xC2E4, + 52062 - 44032: 0xA793, + 52063 - 44032: 0xA794, + 52064 - 44032: 0xA795, + 52065 - 44032: 0xA796, + 52066 - 44032: 0xA797, + 52067 - 44032: 0xA798, + 52068 - 44032: 0xC2E5, + 52069 - 44032: 0xA799, + 52070 - 44032: 0xA79A, + 52071 - 44032: 0xA79B, + 52072 - 44032: 0xA79C, + 52073 - 44032: 0xA79D, + 52074 - 44032: 0xA79E, + 52075 - 44032: 0xA79F, + 52076 - 44032: 0xA7A0, + 52077 - 44032: 0xA841, + 52078 - 44032: 0xA842, + 52079 - 44032: 0xA843, + 52080 - 44032: 0xA844, + 52081 - 44032: 0xA845, + 52082 - 44032: 0xA846, + 52083 - 44032: 0xA847, + 52084 - 44032: 0xA848, + 52085 - 44032: 0xA849, + 52086 - 44032: 0xA84A, + 52087 - 44032: 0xA84B, + 52088 - 44032: 0xC2E6, + 52089 - 44032: 0xC2E7, + 52090 - 44032: 0xA84C, + 52091 - 44032: 0xA84D, + 52092 - 44032: 0xA84E, + 52093 - 44032: 0xA84F, + 52094 - 44032: 0xA850, + 52095 - 44032: 0xA851, + 52096 - 44032: 0xA852, + 52097 - 44032: 0xA853, + 52098 - 44032: 0xA854, + 52099 - 44032: 0xA855, + 52100 - 44032: 0xA856, + 52101 - 44032: 0xA857, + 52102 - 44032: 0xA858, + 52103 - 44032: 0xA859, + 52104 - 44032: 0xA85A, + 52105 - 44032: 0xA861, + 52106 - 44032: 0xA862, + 52107 - 44032: 0xA863, + 52108 - 44032: 0xA864, + 52109 - 44032: 0xA865, + 52110 - 44032: 0xA866, + 52111 - 44032: 0xA867, + 52112 - 44032: 0xA868, + 52113 - 44032: 0xA869, + 52114 - 44032: 0xA86A, + 52115 - 44032: 0xA86B, + 52116 - 44032: 0xA86C, + 52117 - 44032: 0xA86D, + 52118 - 44032: 0xA86E, + 52119 - 44032: 0xA86F, + 52120 - 44032: 0xA870, + 52121 - 44032: 0xA871, + 52122 - 44032: 0xA872, + 52123 - 44032: 0xA873, + 52124 - 44032: 0xC2E8, + 52125 - 44032: 0xA874, + 52126 - 44032: 0xA875, + 52127 - 44032: 0xA876, + 52128 - 44032: 0xA877, + 52129 - 44032: 0xA878, + 52130 - 44032: 0xA879, + 52131 - 44032: 0xA87A, + 52132 - 44032: 0xA881, + 52133 - 44032: 0xA882, + 52134 - 44032: 0xA883, + 52135 - 44032: 0xA884, + 52136 - 44032: 0xA885, + 52137 - 44032: 0xA886, + 52138 - 44032: 0xA887, + 52139 - 44032: 0xA888, + 52140 - 44032: 0xA889, + 52141 - 44032: 0xA88A, + 52142 - 44032: 0xA88B, + 52143 - 44032: 0xA88C, + 52144 - 44032: 0xA88D, + 52145 - 44032: 0xA88E, + 52146 - 44032: 0xA88F, + 52147 - 44032: 0xA890, + 52148 - 44032: 0xA891, + 52149 - 44032: 0xA892, + 52150 - 44032: 0xA893, + 52151 - 44032: 0xA894, + 52152 - 44032: 0xC2E9, + 52153 - 44032: 0xA895, + 52154 - 44032: 0xA896, + 52155 - 44032: 0xA897, + 52156 - 44032: 0xA898, + 52157 - 44032: 0xA899, + 52158 - 44032: 0xA89A, + 52159 - 44032: 0xA89B, + 52160 - 44032: 0xA89C, + 52161 - 44032: 0xA89D, + 52162 - 44032: 0xA89E, + 52163 - 44032: 0xA89F, + 52164 - 44032: 0xA8A0, + 52165 - 44032: 0xA941, + 52166 - 44032: 0xA942, + 52167 - 44032: 0xA943, + 52168 - 44032: 0xA944, + 52169 - 44032: 0xA945, + 52170 - 44032: 0xA946, + 52171 - 44032: 0xA947, + 52172 - 44032: 0xA948, + 52173 - 44032: 0xA949, + 52174 - 44032: 0xA94A, + 52175 - 44032: 0xA94B, + 52176 - 44032: 0xA94C, + 52177 - 44032: 0xA94D, + 52178 - 44032: 0xA94E, + 52179 - 44032: 0xA94F, + 52180 - 44032: 0xC2EA, + 52181 - 44032: 0xA950, + 52182 - 44032: 0xA951, + 52183 - 44032: 0xA952, + 52184 - 44032: 0xA953, + 52185 - 44032: 0xA954, + 52186 - 44032: 0xA955, + 52187 - 44032: 0xA956, + 52188 - 44032: 0xA957, + 52189 - 44032: 0xA958, + 52190 - 44032: 0xA959, + 52191 - 44032: 0xA95A, + 52192 - 44032: 0xA961, + 52193 - 44032: 0xA962, + 52194 - 44032: 0xA963, + 52195 - 44032: 0xA964, + 52196 - 44032: 0xC2EB, + 52197 - 44032: 0xA965, + 52198 - 44032: 0xA966, + 52199 - 44032: 0xC2EC, + 52200 - 44032: 0xA967, + 52201 - 44032: 0xC2ED, + 52202 - 44032: 0xA968, + 52203 - 44032: 0xA969, + 52204 - 44032: 0xA96A, + 52205 - 44032: 0xA96B, + 52206 - 44032: 0xA96C, + 52207 - 44032: 0xA96D, + 52208 - 44032: 0xA96E, + 52209 - 44032: 0xA96F, + 52210 - 44032: 0xA970, + 52211 - 44032: 0xA971, + 52212 - 44032: 0xA972, + 52213 - 44032: 0xA973, + 52214 - 44032: 0xA974, + 52215 - 44032: 0xA975, + 52216 - 44032: 0xA976, + 52217 - 44032: 0xA977, + 52218 - 44032: 0xA978, + 52219 - 44032: 0xA979, + 52220 - 44032: 0xA97A, + 52221 - 44032: 0xA981, + 52222 - 44032: 0xA982, + 52223 - 44032: 0xA983, + 52224 - 44032: 0xA984, + 52225 - 44032: 0xA985, + 52226 - 44032: 0xA986, + 52227 - 44032: 0xA987, + 52228 - 44032: 0xA988, + 52229 - 44032: 0xA989, + 52230 - 44032: 0xA98A, + 52231 - 44032: 0xA98B, + 52232 - 44032: 0xA98C, + 52233 - 44032: 0xA98D, + 52234 - 44032: 0xA98E, + 52235 - 44032: 0xA98F, + 52236 - 44032: 0xC2EE, + 52237 - 44032: 0xC2EF, + 52238 - 44032: 0xA990, + 52239 - 44032: 0xA991, + 52240 - 44032: 0xC2F0, + 52241 - 44032: 0xA992, + 52242 - 44032: 0xA993, + 52243 - 44032: 0xA994, + 52244 - 44032: 0xC2F1, + 52245 - 44032: 0xA995, + 52246 - 44032: 0xA996, + 52247 - 44032: 0xA997, + 52248 - 44032: 0xA998, + 52249 - 44032: 0xA999, + 52250 - 44032: 0xA99A, + 52251 - 44032: 0xA99B, + 52252 - 44032: 0xC2F2, + 52253 - 44032: 0xC2F3, + 52254 - 44032: 0xA99C, + 52255 - 44032: 0xA99D, + 52256 - 44032: 0xA99E, + 52257 - 44032: 0xC2F4, + 52258 - 44032: 0xC2F5, + 52259 - 44032: 0xA99F, + 52260 - 44032: 0xA9A0, + 52261 - 44032: 0xAA41, + 52262 - 44032: 0xAA42, + 52263 - 44032: 0xC2F6, + 52264 - 44032: 0xC2F7, + 52265 - 44032: 0xC2F8, + 52266 - 44032: 0xAA43, + 52267 - 44032: 0xAA44, + 52268 - 44032: 0xC2F9, + 52269 - 44032: 0xAA45, + 52270 - 44032: 0xC2FA, + 52271 - 44032: 0xAA46, + 52272 - 44032: 0xC2FB, + 52273 - 44032: 0xAA47, + 52274 - 44032: 0xAA48, + 52275 - 44032: 0xAA49, + 52276 - 44032: 0xAA4A, + 52277 - 44032: 0xAA4B, + 52278 - 44032: 0xAA4C, + 52279 - 44032: 0xAA4D, + 52280 - 44032: 0xC2FC, + 52281 - 44032: 0xC2FD, + 52282 - 44032: 0xAA4E, + 52283 - 44032: 0xC2FE, + 52284 - 44032: 0xC3A1, + 52285 - 44032: 0xC3A2, + 52286 - 44032: 0xC3A3, + 52287 - 44032: 0xAA4F, + 52288 - 44032: 0xAA50, + 52289 - 44032: 0xAA51, + 52290 - 44032: 0xAA52, + 52291 - 44032: 0xAA53, + 52292 - 44032: 0xC3A4, + 52293 - 44032: 0xC3A5, + 52294 - 44032: 0xAA54, + 52295 - 44032: 0xAA55, + 52296 - 44032: 0xC3A6, + 52297 - 44032: 0xAA56, + 52298 - 44032: 0xAA57, + 52299 - 44032: 0xAA58, + 52300 - 44032: 0xC3A7, + 52301 - 44032: 0xAA59, + 52302 - 44032: 0xAA5A, + 52303 - 44032: 0xAA61, + 52304 - 44032: 0xAA62, + 52305 - 44032: 0xAA63, + 52306 - 44032: 0xAA64, + 52307 - 44032: 0xAA65, + 52308 - 44032: 0xC3A8, + 52309 - 44032: 0xC3A9, + 52310 - 44032: 0xAA66, + 52311 - 44032: 0xC3AA, + 52312 - 44032: 0xC3AB, + 52313 - 44032: 0xC3AC, + 52314 - 44032: 0xAA67, + 52315 - 44032: 0xAA68, + 52316 - 44032: 0xAA69, + 52317 - 44032: 0xAA6A, + 52318 - 44032: 0xAA6B, + 52319 - 44032: 0xAA6C, + 52320 - 44032: 0xC3AD, + 52321 - 44032: 0xAA6D, + 52322 - 44032: 0xAA6E, + 52323 - 44032: 0xAA6F, + 52324 - 44032: 0xC3AE, + 52325 - 44032: 0xAA70, + 52326 - 44032: 0xC3AF, + 52327 - 44032: 0xAA71, + 52328 - 44032: 0xC3B0, + 52329 - 44032: 0xAA72, + 52330 - 44032: 0xAA73, + 52331 - 44032: 0xAA74, + 52332 - 44032: 0xAA75, + 52333 - 44032: 0xAA76, + 52334 - 44032: 0xAA77, + 52335 - 44032: 0xAA78, + 52336 - 44032: 0xC3B1, + 52337 - 44032: 0xAA79, + 52338 - 44032: 0xAA7A, + 52339 - 44032: 0xAA81, + 52340 - 44032: 0xAA82, + 52341 - 44032: 0xC3B2, + 52342 - 44032: 0xAA83, + 52343 - 44032: 0xAA84, + 52344 - 44032: 0xAA85, + 52345 - 44032: 0xAA86, + 52346 - 44032: 0xAA87, + 52347 - 44032: 0xAA88, + 52348 - 44032: 0xAA89, + 52349 - 44032: 0xAA8A, + 52350 - 44032: 0xAA8B, + 52351 - 44032: 0xAA8C, + 52352 - 44032: 0xAA8D, + 52353 - 44032: 0xAA8E, + 52354 - 44032: 0xAA8F, + 52355 - 44032: 0xAA90, + 52356 - 44032: 0xAA91, + 52357 - 44032: 0xAA92, + 52358 - 44032: 0xAA93, + 52359 - 44032: 0xAA94, + 52360 - 44032: 0xAA95, + 52361 - 44032: 0xAA96, + 52362 - 44032: 0xAA97, + 52363 - 44032: 0xAA98, + 52364 - 44032: 0xAA99, + 52365 - 44032: 0xAA9A, + 52366 - 44032: 0xAA9B, + 52367 - 44032: 0xAA9C, + 52368 - 44032: 0xAA9D, + 52369 - 44032: 0xAA9E, + 52370 - 44032: 0xAA9F, + 52371 - 44032: 0xAAA0, + 52372 - 44032: 0xAB41, + 52373 - 44032: 0xAB42, + 52374 - 44032: 0xAB43, + 52375 - 44032: 0xAB44, + 52376 - 44032: 0xC3B3, + 52377 - 44032: 0xC3B4, + 52378 - 44032: 0xAB45, + 52379 - 44032: 0xAB46, + 52380 - 44032: 0xC3B5, + 52381 - 44032: 0xAB47, + 52382 - 44032: 0xAB48, + 52383 - 44032: 0xAB49, + 52384 - 44032: 0xC3B6, + 52385 - 44032: 0xAB4A, + 52386 - 44032: 0xAB4B, + 52387 - 44032: 0xAB4C, + 52388 - 44032: 0xAB4D, + 52389 - 44032: 0xAB4E, + 52390 - 44032: 0xAB4F, + 52391 - 44032: 0xAB50, + 52392 - 44032: 0xC3B7, + 52393 - 44032: 0xC3B8, + 52394 - 44032: 0xAB51, + 52395 - 44032: 0xC3B9, + 52396 - 44032: 0xC3BA, + 52397 - 44032: 0xC3BB, + 52398 - 44032: 0xAB52, + 52399 - 44032: 0xAB53, + 52400 - 44032: 0xAB54, + 52401 - 44032: 0xAB55, + 52402 - 44032: 0xAB56, + 52403 - 44032: 0xAB57, + 52404 - 44032: 0xC3BC, + 52405 - 44032: 0xC3BD, + 52406 - 44032: 0xAB58, + 52407 - 44032: 0xAB59, + 52408 - 44032: 0xC3BE, + 52409 - 44032: 0xAB5A, + 52410 - 44032: 0xAB61, + 52411 - 44032: 0xAB62, + 52412 - 44032: 0xC3BF, + 52413 - 44032: 0xAB63, + 52414 - 44032: 0xAB64, + 52415 - 44032: 0xAB65, + 52416 - 44032: 0xAB66, + 52417 - 44032: 0xAB67, + 52418 - 44032: 0xAB68, + 52419 - 44032: 0xAB69, + 52420 - 44032: 0xC3C0, + 52421 - 44032: 0xC3C1, + 52422 - 44032: 0xAB6A, + 52423 - 44032: 0xC3C2, + 52424 - 44032: 0xAB6B, + 52425 - 44032: 0xC3C3, + 52426 - 44032: 0xAB6C, + 52427 - 44032: 0xAB6D, + 52428 - 44032: 0xAB6E, + 52429 - 44032: 0xAB6F, + 52430 - 44032: 0xAB70, + 52431 - 44032: 0xAB71, + 52432 - 44032: 0xC3C4, + 52433 - 44032: 0xAB72, + 52434 - 44032: 0xAB73, + 52435 - 44032: 0xAB74, + 52436 - 44032: 0xC3C5, + 52437 - 44032: 0xAB75, + 52438 - 44032: 0xAB76, + 52439 - 44032: 0xAB77, + 52440 - 44032: 0xAB78, + 52441 - 44032: 0xAB79, + 52442 - 44032: 0xAB7A, + 52443 - 44032: 0xAB81, + 52444 - 44032: 0xAB82, + 52445 - 44032: 0xAB83, + 52446 - 44032: 0xAB84, + 52447 - 44032: 0xAB85, + 52448 - 44032: 0xAB86, + 52449 - 44032: 0xAB87, + 52450 - 44032: 0xAB88, + 52451 - 44032: 0xAB89, + 52452 - 44032: 0xC3C6, + 52453 - 44032: 0xAB8A, + 52454 - 44032: 0xAB8B, + 52455 - 44032: 0xAB8C, + 52456 - 44032: 0xAB8D, + 52457 - 44032: 0xAB8E, + 52458 - 44032: 0xAB8F, + 52459 - 44032: 0xAB90, + 52460 - 44032: 0xC3C7, + 52461 - 44032: 0xAB91, + 52462 - 44032: 0xAB92, + 52463 - 44032: 0xAB93, + 52464 - 44032: 0xC3C8, + 52465 - 44032: 0xAB94, + 52466 - 44032: 0xAB95, + 52467 - 44032: 0xAB96, + 52468 - 44032: 0xAB97, + 52469 - 44032: 0xAB98, + 52470 - 44032: 0xAB99, + 52471 - 44032: 0xAB9A, + 52472 - 44032: 0xAB9B, + 52473 - 44032: 0xAB9C, + 52474 - 44032: 0xAB9D, + 52475 - 44032: 0xAB9E, + 52476 - 44032: 0xAB9F, + 52477 - 44032: 0xABA0, + 52478 - 44032: 0xAC41, + 52479 - 44032: 0xAC42, + 52480 - 44032: 0xAC43, + 52481 - 44032: 0xC3C9, + 52482 - 44032: 0xAC44, + 52483 - 44032: 0xAC45, + 52484 - 44032: 0xAC46, + 52485 - 44032: 0xAC47, + 52486 - 44032: 0xAC48, + 52487 - 44032: 0xAC49, + 52488 - 44032: 0xC3CA, + 52489 - 44032: 0xC3CB, + 52490 - 44032: 0xAC4A, + 52491 - 44032: 0xAC4B, + 52492 - 44032: 0xC3CC, + 52493 - 44032: 0xAC4C, + 52494 - 44032: 0xAC4D, + 52495 - 44032: 0xAC4E, + 52496 - 44032: 0xC3CD, + 52497 - 44032: 0xAC4F, + 52498 - 44032: 0xAC50, + 52499 - 44032: 0xAC51, + 52500 - 44032: 0xAC52, + 52501 - 44032: 0xAC53, + 52502 - 44032: 0xAC54, + 52503 - 44032: 0xAC55, + 52504 - 44032: 0xC3CE, + 52505 - 44032: 0xC3CF, + 52506 - 44032: 0xAC56, + 52507 - 44032: 0xC3D0, + 52508 - 44032: 0xAC57, + 52509 - 44032: 0xC3D1, + 52510 - 44032: 0xAC58, + 52511 - 44032: 0xAC59, + 52512 - 44032: 0xAC5A, + 52513 - 44032: 0xAC61, + 52514 - 44032: 0xAC62, + 52515 - 44032: 0xAC63, + 52516 - 44032: 0xC3D2, + 52517 - 44032: 0xAC64, + 52518 - 44032: 0xAC65, + 52519 - 44032: 0xAC66, + 52520 - 44032: 0xC3D3, + 52521 - 44032: 0xAC67, + 52522 - 44032: 0xAC68, + 52523 - 44032: 0xAC69, + 52524 - 44032: 0xC3D4, + 52525 - 44032: 0xAC6A, + 52526 - 44032: 0xAC6B, + 52527 - 44032: 0xAC6C, + 52528 - 44032: 0xAC6D, + 52529 - 44032: 0xAC6E, + 52530 - 44032: 0xAC6F, + 52531 - 44032: 0xAC70, + 52532 - 44032: 0xAC71, + 52533 - 44032: 0xAC72, + 52534 - 44032: 0xAC73, + 52535 - 44032: 0xAC74, + 52536 - 44032: 0xAC75, + 52537 - 44032: 0xC3D5, + 52538 - 44032: 0xAC76, + 52539 - 44032: 0xAC77, + 52540 - 44032: 0xAC78, + 52541 - 44032: 0xAC79, + 52542 - 44032: 0xAC7A, + 52543 - 44032: 0xAC81, + 52544 - 44032: 0xAC82, + 52545 - 44032: 0xAC83, + 52546 - 44032: 0xAC84, + 52547 - 44032: 0xAC85, + 52548 - 44032: 0xAC86, + 52549 - 44032: 0xAC87, + 52550 - 44032: 0xAC88, + 52551 - 44032: 0xAC89, + 52552 - 44032: 0xAC8A, + 52553 - 44032: 0xAC8B, + 52554 - 44032: 0xAC8C, + 52555 - 44032: 0xAC8D, + 52556 - 44032: 0xAC8E, + 52557 - 44032: 0xAC8F, + 52558 - 44032: 0xAC90, + 52559 - 44032: 0xAC91, + 52560 - 44032: 0xAC92, + 52561 - 44032: 0xAC93, + 52562 - 44032: 0xAC94, + 52563 - 44032: 0xAC95, + 52564 - 44032: 0xAC96, + 52565 - 44032: 0xAC97, + 52566 - 44032: 0xAC98, + 52567 - 44032: 0xAC99, + 52568 - 44032: 0xAC9A, + 52569 - 44032: 0xAC9B, + 52570 - 44032: 0xAC9C, + 52571 - 44032: 0xAC9D, + 52572 - 44032: 0xC3D6, + 52573 - 44032: 0xAC9E, + 52574 - 44032: 0xAC9F, + 52575 - 44032: 0xACA0, + 52576 - 44032: 0xC3D7, + 52577 - 44032: 0xAD41, + 52578 - 44032: 0xAD42, + 52579 - 44032: 0xAD43, + 52580 - 44032: 0xC3D8, + 52581 - 44032: 0xAD44, + 52582 - 44032: 0xAD45, + 52583 - 44032: 0xAD46, + 52584 - 44032: 0xAD47, + 52585 - 44032: 0xAD48, + 52586 - 44032: 0xAD49, + 52587 - 44032: 0xAD4A, + 52588 - 44032: 0xC3D9, + 52589 - 44032: 0xC3DA, + 52590 - 44032: 0xAD4B, + 52591 - 44032: 0xC3DB, + 52592 - 44032: 0xAD4C, + 52593 - 44032: 0xC3DC, + 52594 - 44032: 0xAD4D, + 52595 - 44032: 0xAD4E, + 52596 - 44032: 0xAD4F, + 52597 - 44032: 0xAD50, + 52598 - 44032: 0xAD51, + 52599 - 44032: 0xAD52, + 52600 - 44032: 0xC3DD, + 52601 - 44032: 0xAD53, + 52602 - 44032: 0xAD54, + 52603 - 44032: 0xAD55, + 52604 - 44032: 0xAD56, + 52605 - 44032: 0xAD57, + 52606 - 44032: 0xAD58, + 52607 - 44032: 0xAD59, + 52608 - 44032: 0xAD5A, + 52609 - 44032: 0xAD61, + 52610 - 44032: 0xAD62, + 52611 - 44032: 0xAD63, + 52612 - 44032: 0xAD64, + 52613 - 44032: 0xAD65, + 52614 - 44032: 0xAD66, + 52615 - 44032: 0xAD67, + 52616 - 44032: 0xC3DE, + 52617 - 44032: 0xAD68, + 52618 - 44032: 0xAD69, + 52619 - 44032: 0xAD6A, + 52620 - 44032: 0xAD6B, + 52621 - 44032: 0xAD6C, + 52622 - 44032: 0xAD6D, + 52623 - 44032: 0xAD6E, + 52624 - 44032: 0xAD6F, + 52625 - 44032: 0xAD70, + 52626 - 44032: 0xAD71, + 52627 - 44032: 0xAD72, + 52628 - 44032: 0xC3DF, + 52629 - 44032: 0xC3E0, + 52630 - 44032: 0xAD73, + 52631 - 44032: 0xAD74, + 52632 - 44032: 0xC3E1, + 52633 - 44032: 0xAD75, + 52634 - 44032: 0xAD76, + 52635 - 44032: 0xAD77, + 52636 - 44032: 0xC3E2, + 52637 - 44032: 0xAD78, + 52638 - 44032: 0xAD79, + 52639 - 44032: 0xAD7A, + 52640 - 44032: 0xAD81, + 52641 - 44032: 0xAD82, + 52642 - 44032: 0xAD83, + 52643 - 44032: 0xAD84, + 52644 - 44032: 0xC3E3, + 52645 - 44032: 0xC3E4, + 52646 - 44032: 0xAD85, + 52647 - 44032: 0xC3E5, + 52648 - 44032: 0xAD86, + 52649 - 44032: 0xC3E6, + 52650 - 44032: 0xAD87, + 52651 - 44032: 0xAD88, + 52652 - 44032: 0xAD89, + 52653 - 44032: 0xAD8A, + 52654 - 44032: 0xAD8B, + 52655 - 44032: 0xAD8C, + 52656 - 44032: 0xC3E7, + 52657 - 44032: 0xAD8D, + 52658 - 44032: 0xAD8E, + 52659 - 44032: 0xAD8F, + 52660 - 44032: 0xAD90, + 52661 - 44032: 0xAD91, + 52662 - 44032: 0xAD92, + 52663 - 44032: 0xAD93, + 52664 - 44032: 0xAD94, + 52665 - 44032: 0xAD95, + 52666 - 44032: 0xAD96, + 52667 - 44032: 0xAD97, + 52668 - 44032: 0xAD98, + 52669 - 44032: 0xAD99, + 52670 - 44032: 0xAD9A, + 52671 - 44032: 0xAD9B, + 52672 - 44032: 0xAD9C, + 52673 - 44032: 0xAD9D, + 52674 - 44032: 0xAD9E, + 52675 - 44032: 0xAD9F, + 52676 - 44032: 0xC3E8, + 52677 - 44032: 0xADA0, + 52678 - 44032: 0xAE41, + 52679 - 44032: 0xAE42, + 52680 - 44032: 0xAE43, + 52681 - 44032: 0xAE44, + 52682 - 44032: 0xAE45, + 52683 - 44032: 0xAE46, + 52684 - 44032: 0xC3E9, + 52685 - 44032: 0xAE47, + 52686 - 44032: 0xAE48, + 52687 - 44032: 0xAE49, + 52688 - 44032: 0xC3EA, + 52689 - 44032: 0xAE4A, + 52690 - 44032: 0xAE4B, + 52691 - 44032: 0xAE4C, + 52692 - 44032: 0xAE4D, + 52693 - 44032: 0xAE4E, + 52694 - 44032: 0xAE4F, + 52695 - 44032: 0xAE50, + 52696 - 44032: 0xAE51, + 52697 - 44032: 0xAE52, + 52698 - 44032: 0xAE53, + 52699 - 44032: 0xAE54, + 52700 - 44032: 0xAE55, + 52701 - 44032: 0xAE56, + 52702 - 44032: 0xAE57, + 52703 - 44032: 0xAE58, + 52704 - 44032: 0xAE59, + 52705 - 44032: 0xAE5A, + 52706 - 44032: 0xAE61, + 52707 - 44032: 0xAE62, + 52708 - 44032: 0xAE63, + 52709 - 44032: 0xAE64, + 52710 - 44032: 0xAE65, + 52711 - 44032: 0xAE66, + 52712 - 44032: 0xC3EB, + 52713 - 44032: 0xAE67, + 52714 - 44032: 0xAE68, + 52715 - 44032: 0xAE69, + 52716 - 44032: 0xC3EC, + 52717 - 44032: 0xAE6A, + 52718 - 44032: 0xAE6B, + 52719 - 44032: 0xAE6C, + 52720 - 44032: 0xC3ED, + 52721 - 44032: 0xAE6D, + 52722 - 44032: 0xAE6E, + 52723 - 44032: 0xAE6F, + 52724 - 44032: 0xAE70, + 52725 - 44032: 0xAE71, + 52726 - 44032: 0xAE72, + 52727 - 44032: 0xAE73, + 52728 - 44032: 0xC3EE, + 52729 - 44032: 0xC3EF, + 52730 - 44032: 0xAE74, + 52731 - 44032: 0xC3F0, + 52732 - 44032: 0xAE75, + 52733 - 44032: 0xC3F1, + 52734 - 44032: 0xAE76, + 52735 - 44032: 0xAE77, + 52736 - 44032: 0xAE78, + 52737 - 44032: 0xAE79, + 52738 - 44032: 0xAE7A, + 52739 - 44032: 0xAE81, + 52740 - 44032: 0xC3F2, + 52741 - 44032: 0xAE82, + 52742 - 44032: 0xAE83, + 52743 - 44032: 0xAE84, + 52744 - 44032: 0xC3F3, + 52745 - 44032: 0xAE85, + 52746 - 44032: 0xAE86, + 52747 - 44032: 0xAE87, + 52748 - 44032: 0xC3F4, + 52749 - 44032: 0xAE88, + 52750 - 44032: 0xAE89, + 52751 - 44032: 0xAE8A, + 52752 - 44032: 0xAE8B, + 52753 - 44032: 0xAE8C, + 52754 - 44032: 0xAE8D, + 52755 - 44032: 0xAE8E, + 52756 - 44032: 0xC3F5, + 52757 - 44032: 0xAE8F, + 52758 - 44032: 0xAE90, + 52759 - 44032: 0xAE91, + 52760 - 44032: 0xAE92, + 52761 - 44032: 0xC3F6, + 52762 - 44032: 0xAE93, + 52763 - 44032: 0xAE94, + 52764 - 44032: 0xAE95, + 52765 - 44032: 0xAE96, + 52766 - 44032: 0xAE97, + 52767 - 44032: 0xAE98, + 52768 - 44032: 0xC3F7, + 52769 - 44032: 0xC3F8, + 52770 - 44032: 0xAE99, + 52771 - 44032: 0xAE9A, + 52772 - 44032: 0xC3F9, + 52773 - 44032: 0xAE9B, + 52774 - 44032: 0xAE9C, + 52775 - 44032: 0xAE9D, + 52776 - 44032: 0xC3FA, + 52777 - 44032: 0xAE9E, + 52778 - 44032: 0xAE9F, + 52779 - 44032: 0xAEA0, + 52780 - 44032: 0xAF41, + 52781 - 44032: 0xAF42, + 52782 - 44032: 0xAF43, + 52783 - 44032: 0xAF44, + 52784 - 44032: 0xC3FB, + 52785 - 44032: 0xC3FC, + 52786 - 44032: 0xAF45, + 52787 - 44032: 0xC3FD, + 52788 - 44032: 0xAF46, + 52789 - 44032: 0xC3FE, + 52790 - 44032: 0xAF47, + 52791 - 44032: 0xAF48, + 52792 - 44032: 0xAF49, + 52793 - 44032: 0xAF4A, + 52794 - 44032: 0xAF4B, + 52795 - 44032: 0xAF4C, + 52796 - 44032: 0xAF4D, + 52797 - 44032: 0xAF4E, + 52798 - 44032: 0xAF4F, + 52799 - 44032: 0xAF50, + 52800 - 44032: 0xAF51, + 52801 - 44032: 0xAF52, + 52802 - 44032: 0xAF53, + 52803 - 44032: 0xAF54, + 52804 - 44032: 0xAF55, + 52805 - 44032: 0xAF56, + 52806 - 44032: 0xAF57, + 52807 - 44032: 0xAF58, + 52808 - 44032: 0xAF59, + 52809 - 44032: 0xAF5A, + 52810 - 44032: 0xAF61, + 52811 - 44032: 0xAF62, + 52812 - 44032: 0xAF63, + 52813 - 44032: 0xAF64, + 52814 - 44032: 0xAF65, + 52815 - 44032: 0xAF66, + 52816 - 44032: 0xAF67, + 52817 - 44032: 0xAF68, + 52818 - 44032: 0xAF69, + 52819 - 44032: 0xAF6A, + 52820 - 44032: 0xAF6B, + 52821 - 44032: 0xAF6C, + 52822 - 44032: 0xAF6D, + 52823 - 44032: 0xAF6E, + 52824 - 44032: 0xC4A1, + 52825 - 44032: 0xC4A2, + 52826 - 44032: 0xAF6F, + 52827 - 44032: 0xAF70, + 52828 - 44032: 0xC4A3, + 52829 - 44032: 0xAF71, + 52830 - 44032: 0xAF72, + 52831 - 44032: 0xC4A4, + 52832 - 44032: 0xC4A5, + 52833 - 44032: 0xC4A6, + 52834 - 44032: 0xAF73, + 52835 - 44032: 0xAF74, + 52836 - 44032: 0xAF75, + 52837 - 44032: 0xAF76, + 52838 - 44032: 0xAF77, + 52839 - 44032: 0xAF78, + 52840 - 44032: 0xC4A7, + 52841 - 44032: 0xC4A8, + 52842 - 44032: 0xAF79, + 52843 - 44032: 0xC4A9, + 52844 - 44032: 0xAF7A, + 52845 - 44032: 0xC4AA, + 52846 - 44032: 0xAF81, + 52847 - 44032: 0xAF82, + 52848 - 44032: 0xAF83, + 52849 - 44032: 0xAF84, + 52850 - 44032: 0xAF85, + 52851 - 44032: 0xAF86, + 52852 - 44032: 0xC4AB, + 52853 - 44032: 0xC4AC, + 52854 - 44032: 0xAF87, + 52855 - 44032: 0xAF88, + 52856 - 44032: 0xC4AD, + 52857 - 44032: 0xAF89, + 52858 - 44032: 0xAF8A, + 52859 - 44032: 0xAF8B, + 52860 - 44032: 0xC4AE, + 52861 - 44032: 0xAF8C, + 52862 - 44032: 0xAF8D, + 52863 - 44032: 0xAF8E, + 52864 - 44032: 0xAF8F, + 52865 - 44032: 0xAF90, + 52866 - 44032: 0xAF91, + 52867 - 44032: 0xAF92, + 52868 - 44032: 0xC4AF, + 52869 - 44032: 0xC4B0, + 52870 - 44032: 0xAF93, + 52871 - 44032: 0xC4B1, + 52872 - 44032: 0xAF94, + 52873 - 44032: 0xC4B2, + 52874 - 44032: 0xAF95, + 52875 - 44032: 0xAF96, + 52876 - 44032: 0xAF97, + 52877 - 44032: 0xAF98, + 52878 - 44032: 0xAF99, + 52879 - 44032: 0xAF9A, + 52880 - 44032: 0xC4B3, + 52881 - 44032: 0xC4B4, + 52882 - 44032: 0xAF9B, + 52883 - 44032: 0xAF9C, + 52884 - 44032: 0xC4B5, + 52885 - 44032: 0xAF9D, + 52886 - 44032: 0xAF9E, + 52887 - 44032: 0xAF9F, + 52888 - 44032: 0xC4B6, + 52889 - 44032: 0xAFA0, + 52890 - 44032: 0xB041, + 52891 - 44032: 0xB042, + 52892 - 44032: 0xB043, + 52893 - 44032: 0xB044, + 52894 - 44032: 0xB045, + 52895 - 44032: 0xB046, + 52896 - 44032: 0xC4B7, + 52897 - 44032: 0xC4B8, + 52898 - 44032: 0xB047, + 52899 - 44032: 0xC4B9, + 52900 - 44032: 0xC4BA, + 52901 - 44032: 0xC4BB, + 52902 - 44032: 0xB048, + 52903 - 44032: 0xB049, + 52904 - 44032: 0xB04A, + 52905 - 44032: 0xB04B, + 52906 - 44032: 0xB04C, + 52907 - 44032: 0xB04D, + 52908 - 44032: 0xC4BC, + 52909 - 44032: 0xC4BD, + 52910 - 44032: 0xB04E, + 52911 - 44032: 0xB04F, + 52912 - 44032: 0xB050, + 52913 - 44032: 0xB051, + 52914 - 44032: 0xB052, + 52915 - 44032: 0xB053, + 52916 - 44032: 0xB054, + 52917 - 44032: 0xB055, + 52918 - 44032: 0xB056, + 52919 - 44032: 0xB057, + 52920 - 44032: 0xB058, + 52921 - 44032: 0xB059, + 52922 - 44032: 0xB05A, + 52923 - 44032: 0xB061, + 52924 - 44032: 0xB062, + 52925 - 44032: 0xB063, + 52926 - 44032: 0xB064, + 52927 - 44032: 0xB065, + 52928 - 44032: 0xB066, + 52929 - 44032: 0xC4BE, + 52930 - 44032: 0xB067, + 52931 - 44032: 0xB068, + 52932 - 44032: 0xB069, + 52933 - 44032: 0xB06A, + 52934 - 44032: 0xB06B, + 52935 - 44032: 0xB06C, + 52936 - 44032: 0xB06D, + 52937 - 44032: 0xB06E, + 52938 - 44032: 0xB06F, + 52939 - 44032: 0xB070, + 52940 - 44032: 0xB071, + 52941 - 44032: 0xB072, + 52942 - 44032: 0xB073, + 52943 - 44032: 0xB074, + 52944 - 44032: 0xB075, + 52945 - 44032: 0xB076, + 52946 - 44032: 0xB077, + 52947 - 44032: 0xB078, + 52948 - 44032: 0xB079, + 52949 - 44032: 0xB07A, + 52950 - 44032: 0xB081, + 52951 - 44032: 0xB082, + 52952 - 44032: 0xB083, + 52953 - 44032: 0xB084, + 52954 - 44032: 0xB085, + 52955 - 44032: 0xB086, + 52956 - 44032: 0xB087, + 52957 - 44032: 0xB088, + 52958 - 44032: 0xB089, + 52959 - 44032: 0xB08A, + 52960 - 44032: 0xB08B, + 52961 - 44032: 0xB08C, + 52962 - 44032: 0xB08D, + 52963 - 44032: 0xB08E, + 52964 - 44032: 0xC4BF, + 52965 - 44032: 0xC4C0, + 52966 - 44032: 0xB08F, + 52967 - 44032: 0xB090, + 52968 - 44032: 0xC4C1, + 52969 - 44032: 0xB091, + 52970 - 44032: 0xB092, + 52971 - 44032: 0xC4C2, + 52972 - 44032: 0xC4C3, + 52973 - 44032: 0xB093, + 52974 - 44032: 0xB094, + 52975 - 44032: 0xB095, + 52976 - 44032: 0xB096, + 52977 - 44032: 0xB097, + 52978 - 44032: 0xB098, + 52979 - 44032: 0xB099, + 52980 - 44032: 0xC4C4, + 52981 - 44032: 0xC4C5, + 52982 - 44032: 0xB09A, + 52983 - 44032: 0xC4C6, + 52984 - 44032: 0xC4C7, + 52985 - 44032: 0xC4C8, + 52986 - 44032: 0xB09B, + 52987 - 44032: 0xB09C, + 52988 - 44032: 0xB09D, + 52989 - 44032: 0xB09E, + 52990 - 44032: 0xB09F, + 52991 - 44032: 0xB0A0, + 52992 - 44032: 0xC4C9, + 52993 - 44032: 0xC4CA, + 52994 - 44032: 0xB141, + 52995 - 44032: 0xB142, + 52996 - 44032: 0xC4CB, + 52997 - 44032: 0xB143, + 52998 - 44032: 0xB144, + 52999 - 44032: 0xB145, + 53000 - 44032: 0xC4CC, + 53001 - 44032: 0xB146, + 53002 - 44032: 0xB147, + 53003 - 44032: 0xB148, + 53004 - 44032: 0xB149, + 53005 - 44032: 0xB14A, + 53006 - 44032: 0xB14B, + 53007 - 44032: 0xB14C, + 53008 - 44032: 0xC4CD, + 53009 - 44032: 0xC4CE, + 53010 - 44032: 0xB14D, + 53011 - 44032: 0xC4CF, + 53012 - 44032: 0xB14E, + 53013 - 44032: 0xC4D0, + 53014 - 44032: 0xB14F, + 53015 - 44032: 0xB150, + 53016 - 44032: 0xB151, + 53017 - 44032: 0xB152, + 53018 - 44032: 0xB153, + 53019 - 44032: 0xB154, + 53020 - 44032: 0xC4D1, + 53021 - 44032: 0xB155, + 53022 - 44032: 0xB156, + 53023 - 44032: 0xB157, + 53024 - 44032: 0xC4D2, + 53025 - 44032: 0xB158, + 53026 - 44032: 0xB159, + 53027 - 44032: 0xB15A, + 53028 - 44032: 0xC4D3, + 53029 - 44032: 0xB161, + 53030 - 44032: 0xB162, + 53031 - 44032: 0xB163, + 53032 - 44032: 0xB164, + 53033 - 44032: 0xB165, + 53034 - 44032: 0xB166, + 53035 - 44032: 0xB167, + 53036 - 44032: 0xC4D4, + 53037 - 44032: 0xC4D5, + 53038 - 44032: 0xB168, + 53039 - 44032: 0xC4D6, + 53040 - 44032: 0xC4D7, + 53041 - 44032: 0xC4D8, + 53042 - 44032: 0xB169, + 53043 - 44032: 0xB16A, + 53044 - 44032: 0xB16B, + 53045 - 44032: 0xB16C, + 53046 - 44032: 0xB16D, + 53047 - 44032: 0xB16E, + 53048 - 44032: 0xC4D9, + 53049 - 44032: 0xB16F, + 53050 - 44032: 0xB170, + 53051 - 44032: 0xB171, + 53052 - 44032: 0xB172, + 53053 - 44032: 0xB173, + 53054 - 44032: 0xB174, + 53055 - 44032: 0xB175, + 53056 - 44032: 0xB176, + 53057 - 44032: 0xB177, + 53058 - 44032: 0xB178, + 53059 - 44032: 0xB179, + 53060 - 44032: 0xB17A, + 53061 - 44032: 0xB181, + 53062 - 44032: 0xB182, + 53063 - 44032: 0xB183, + 53064 - 44032: 0xB184, + 53065 - 44032: 0xB185, + 53066 - 44032: 0xB186, + 53067 - 44032: 0xB187, + 53068 - 44032: 0xB188, + 53069 - 44032: 0xB189, + 53070 - 44032: 0xB18A, + 53071 - 44032: 0xB18B, + 53072 - 44032: 0xB18C, + 53073 - 44032: 0xB18D, + 53074 - 44032: 0xB18E, + 53075 - 44032: 0xB18F, + 53076 - 44032: 0xC4DA, + 53077 - 44032: 0xC4DB, + 53078 - 44032: 0xB190, + 53079 - 44032: 0xB191, + 53080 - 44032: 0xC4DC, + 53081 - 44032: 0xB192, + 53082 - 44032: 0xB193, + 53083 - 44032: 0xB194, + 53084 - 44032: 0xC4DD, + 53085 - 44032: 0xB195, + 53086 - 44032: 0xB196, + 53087 - 44032: 0xB197, + 53088 - 44032: 0xB198, + 53089 - 44032: 0xB199, + 53090 - 44032: 0xB19A, + 53091 - 44032: 0xB19B, + 53092 - 44032: 0xC4DE, + 53093 - 44032: 0xC4DF, + 53094 - 44032: 0xB19C, + 53095 - 44032: 0xC4E0, + 53096 - 44032: 0xB19D, + 53097 - 44032: 0xC4E1, + 53098 - 44032: 0xB19E, + 53099 - 44032: 0xB19F, + 53100 - 44032: 0xB1A0, + 53101 - 44032: 0xB241, + 53102 - 44032: 0xB242, + 53103 - 44032: 0xB243, + 53104 - 44032: 0xC4E2, + 53105 - 44032: 0xC4E3, + 53106 - 44032: 0xB244, + 53107 - 44032: 0xB245, + 53108 - 44032: 0xC4E4, + 53109 - 44032: 0xB246, + 53110 - 44032: 0xB247, + 53111 - 44032: 0xB248, + 53112 - 44032: 0xC4E5, + 53113 - 44032: 0xB249, + 53114 - 44032: 0xB24A, + 53115 - 44032: 0xB24B, + 53116 - 44032: 0xB24C, + 53117 - 44032: 0xB24D, + 53118 - 44032: 0xB24E, + 53119 - 44032: 0xB24F, + 53120 - 44032: 0xC4E6, + 53121 - 44032: 0xB250, + 53122 - 44032: 0xB251, + 53123 - 44032: 0xB252, + 53124 - 44032: 0xB253, + 53125 - 44032: 0xC4E7, + 53126 - 44032: 0xB254, + 53127 - 44032: 0xB255, + 53128 - 44032: 0xB256, + 53129 - 44032: 0xB257, + 53130 - 44032: 0xB258, + 53131 - 44032: 0xB259, + 53132 - 44032: 0xC4E8, + 53133 - 44032: 0xB25A, + 53134 - 44032: 0xB261, + 53135 - 44032: 0xB262, + 53136 - 44032: 0xB263, + 53137 - 44032: 0xB264, + 53138 - 44032: 0xB265, + 53139 - 44032: 0xB266, + 53140 - 44032: 0xB267, + 53141 - 44032: 0xB268, + 53142 - 44032: 0xB269, + 53143 - 44032: 0xB26A, + 53144 - 44032: 0xB26B, + 53145 - 44032: 0xB26C, + 53146 - 44032: 0xB26D, + 53147 - 44032: 0xB26E, + 53148 - 44032: 0xB26F, + 53149 - 44032: 0xB270, + 53150 - 44032: 0xB271, + 53151 - 44032: 0xB272, + 53152 - 44032: 0xB273, + 53153 - 44032: 0xC4E9, + 53154 - 44032: 0xB274, + 53155 - 44032: 0xB275, + 53156 - 44032: 0xB276, + 53157 - 44032: 0xB277, + 53158 - 44032: 0xB278, + 53159 - 44032: 0xB279, + 53160 - 44032: 0xC4EA, + 53161 - 44032: 0xB27A, + 53162 - 44032: 0xB281, + 53163 - 44032: 0xB282, + 53164 - 44032: 0xB283, + 53165 - 44032: 0xB284, + 53166 - 44032: 0xB285, + 53167 - 44032: 0xB286, + 53168 - 44032: 0xC4EB, + 53169 - 44032: 0xB287, + 53170 - 44032: 0xB288, + 53171 - 44032: 0xB289, + 53172 - 44032: 0xB28A, + 53173 - 44032: 0xB28B, + 53174 - 44032: 0xB28C, + 53175 - 44032: 0xB28D, + 53176 - 44032: 0xB28E, + 53177 - 44032: 0xB28F, + 53178 - 44032: 0xB290, + 53179 - 44032: 0xB291, + 53180 - 44032: 0xB292, + 53181 - 44032: 0xB293, + 53182 - 44032: 0xB294, + 53183 - 44032: 0xB295, + 53184 - 44032: 0xB296, + 53185 - 44032: 0xB297, + 53186 - 44032: 0xB298, + 53187 - 44032: 0xB299, + 53188 - 44032: 0xC4EC, + 53189 - 44032: 0xB29A, + 53190 - 44032: 0xB29B, + 53191 - 44032: 0xB29C, + 53192 - 44032: 0xB29D, + 53193 - 44032: 0xB29E, + 53194 - 44032: 0xB29F, + 53195 - 44032: 0xB2A0, + 53196 - 44032: 0xB341, + 53197 - 44032: 0xB342, + 53198 - 44032: 0xB343, + 53199 - 44032: 0xB344, + 53200 - 44032: 0xB345, + 53201 - 44032: 0xB346, + 53202 - 44032: 0xB347, + 53203 - 44032: 0xB348, + 53204 - 44032: 0xB349, + 53205 - 44032: 0xB34A, + 53206 - 44032: 0xB34B, + 53207 - 44032: 0xB34C, + 53208 - 44032: 0xB34D, + 53209 - 44032: 0xB34E, + 53210 - 44032: 0xB34F, + 53211 - 44032: 0xB350, + 53212 - 44032: 0xB351, + 53213 - 44032: 0xB352, + 53214 - 44032: 0xB353, + 53215 - 44032: 0xB354, + 53216 - 44032: 0xC4ED, + 53217 - 44032: 0xC4EE, + 53218 - 44032: 0xB355, + 53219 - 44032: 0xB356, + 53220 - 44032: 0xC4EF, + 53221 - 44032: 0xB357, + 53222 - 44032: 0xB358, + 53223 - 44032: 0xB359, + 53224 - 44032: 0xC4F0, + 53225 - 44032: 0xB35A, + 53226 - 44032: 0xB361, + 53227 - 44032: 0xB362, + 53228 - 44032: 0xB363, + 53229 - 44032: 0xB364, + 53230 - 44032: 0xB365, + 53231 - 44032: 0xB366, + 53232 - 44032: 0xC4F1, + 53233 - 44032: 0xC4F2, + 53234 - 44032: 0xB367, + 53235 - 44032: 0xC4F3, + 53236 - 44032: 0xB368, + 53237 - 44032: 0xC4F4, + 53238 - 44032: 0xB369, + 53239 - 44032: 0xB36A, + 53240 - 44032: 0xB36B, + 53241 - 44032: 0xB36C, + 53242 - 44032: 0xB36D, + 53243 - 44032: 0xB36E, + 53244 - 44032: 0xC4F5, + 53245 - 44032: 0xB36F, + 53246 - 44032: 0xB370, + 53247 - 44032: 0xB371, + 53248 - 44032: 0xC4F6, + 53249 - 44032: 0xB372, + 53250 - 44032: 0xB373, + 53251 - 44032: 0xB374, + 53252 - 44032: 0xC4F7, + 53253 - 44032: 0xB375, + 53254 - 44032: 0xB376, + 53255 - 44032: 0xB377, + 53256 - 44032: 0xB378, + 53257 - 44032: 0xB379, + 53258 - 44032: 0xB37A, + 53259 - 44032: 0xB381, + 53260 - 44032: 0xB382, + 53261 - 44032: 0xB383, + 53262 - 44032: 0xB384, + 53263 - 44032: 0xB385, + 53264 - 44032: 0xB386, + 53265 - 44032: 0xC4F8, + 53266 - 44032: 0xB387, + 53267 - 44032: 0xB388, + 53268 - 44032: 0xB389, + 53269 - 44032: 0xB38A, + 53270 - 44032: 0xB38B, + 53271 - 44032: 0xB38C, + 53272 - 44032: 0xC4F9, + 53273 - 44032: 0xB38D, + 53274 - 44032: 0xB38E, + 53275 - 44032: 0xB38F, + 53276 - 44032: 0xB390, + 53277 - 44032: 0xB391, + 53278 - 44032: 0xB392, + 53279 - 44032: 0xB393, + 53280 - 44032: 0xB394, + 53281 - 44032: 0xB395, + 53282 - 44032: 0xB396, + 53283 - 44032: 0xB397, + 53284 - 44032: 0xB398, + 53285 - 44032: 0xB399, + 53286 - 44032: 0xB39A, + 53287 - 44032: 0xB39B, + 53288 - 44032: 0xB39C, + 53289 - 44032: 0xB39D, + 53290 - 44032: 0xB39E, + 53291 - 44032: 0xB39F, + 53292 - 44032: 0xB3A0, + 53293 - 44032: 0xC4FA, + 53294 - 44032: 0xB441, + 53295 - 44032: 0xB442, + 53296 - 44032: 0xB443, + 53297 - 44032: 0xB444, + 53298 - 44032: 0xB445, + 53299 - 44032: 0xB446, + 53300 - 44032: 0xC4FB, + 53301 - 44032: 0xC4FC, + 53302 - 44032: 0xB447, + 53303 - 44032: 0xB448, + 53304 - 44032: 0xC4FD, + 53305 - 44032: 0xB449, + 53306 - 44032: 0xB44A, + 53307 - 44032: 0xB44B, + 53308 - 44032: 0xC4FE, + 53309 - 44032: 0xB44C, + 53310 - 44032: 0xB44D, + 53311 - 44032: 0xB44E, + 53312 - 44032: 0xB44F, + 53313 - 44032: 0xB450, + 53314 - 44032: 0xB451, + 53315 - 44032: 0xB452, + 53316 - 44032: 0xC5A1, + 53317 - 44032: 0xC5A2, + 53318 - 44032: 0xB453, + 53319 - 44032: 0xC5A3, + 53320 - 44032: 0xB454, + 53321 - 44032: 0xC5A4, + 53322 - 44032: 0xB455, + 53323 - 44032: 0xB456, + 53324 - 44032: 0xB457, + 53325 - 44032: 0xB458, + 53326 - 44032: 0xB459, + 53327 - 44032: 0xB45A, + 53328 - 44032: 0xC5A5, + 53329 - 44032: 0xB461, + 53330 - 44032: 0xB462, + 53331 - 44032: 0xB463, + 53332 - 44032: 0xC5A6, + 53333 - 44032: 0xB464, + 53334 - 44032: 0xB465, + 53335 - 44032: 0xB466, + 53336 - 44032: 0xC5A7, + 53337 - 44032: 0xB467, + 53338 - 44032: 0xB468, + 53339 - 44032: 0xB469, + 53340 - 44032: 0xB46A, + 53341 - 44032: 0xB46B, + 53342 - 44032: 0xB46C, + 53343 - 44032: 0xB46D, + 53344 - 44032: 0xC5A8, + 53345 - 44032: 0xB46E, + 53346 - 44032: 0xB46F, + 53347 - 44032: 0xB470, + 53348 - 44032: 0xB471, + 53349 - 44032: 0xB472, + 53350 - 44032: 0xB473, + 53351 - 44032: 0xB474, + 53352 - 44032: 0xB475, + 53353 - 44032: 0xB476, + 53354 - 44032: 0xB477, + 53355 - 44032: 0xB478, + 53356 - 44032: 0xC5A9, + 53357 - 44032: 0xC5AA, + 53358 - 44032: 0xB479, + 53359 - 44032: 0xB47A, + 53360 - 44032: 0xC5AB, + 53361 - 44032: 0xB481, + 53362 - 44032: 0xB482, + 53363 - 44032: 0xB483, + 53364 - 44032: 0xC5AC, + 53365 - 44032: 0xB484, + 53366 - 44032: 0xB485, + 53367 - 44032: 0xB486, + 53368 - 44032: 0xB487, + 53369 - 44032: 0xB488, + 53370 - 44032: 0xB489, + 53371 - 44032: 0xB48A, + 53372 - 44032: 0xC5AD, + 53373 - 44032: 0xC5AE, + 53374 - 44032: 0xB48B, + 53375 - 44032: 0xB48C, + 53376 - 44032: 0xB48D, + 53377 - 44032: 0xC5AF, + 53378 - 44032: 0xB48E, + 53379 - 44032: 0xB48F, + 53380 - 44032: 0xB490, + 53381 - 44032: 0xB491, + 53382 - 44032: 0xB492, + 53383 - 44032: 0xB493, + 53384 - 44032: 0xB494, + 53385 - 44032: 0xB495, + 53386 - 44032: 0xB496, + 53387 - 44032: 0xB497, + 53388 - 44032: 0xB498, + 53389 - 44032: 0xB499, + 53390 - 44032: 0xB49A, + 53391 - 44032: 0xB49B, + 53392 - 44032: 0xB49C, + 53393 - 44032: 0xB49D, + 53394 - 44032: 0xB49E, + 53395 - 44032: 0xB49F, + 53396 - 44032: 0xB4A0, + 53397 - 44032: 0xB541, + 53398 - 44032: 0xB542, + 53399 - 44032: 0xB543, + 53400 - 44032: 0xB544, + 53401 - 44032: 0xB545, + 53402 - 44032: 0xB546, + 53403 - 44032: 0xB547, + 53404 - 44032: 0xB548, + 53405 - 44032: 0xB549, + 53406 - 44032: 0xB54A, + 53407 - 44032: 0xB54B, + 53408 - 44032: 0xB54C, + 53409 - 44032: 0xB54D, + 53410 - 44032: 0xB54E, + 53411 - 44032: 0xB54F, + 53412 - 44032: 0xC5B0, + 53413 - 44032: 0xC5B1, + 53414 - 44032: 0xB550, + 53415 - 44032: 0xB551, + 53416 - 44032: 0xC5B2, + 53417 - 44032: 0xB552, + 53418 - 44032: 0xB553, + 53419 - 44032: 0xB554, + 53420 - 44032: 0xC5B3, + 53421 - 44032: 0xB555, + 53422 - 44032: 0xB556, + 53423 - 44032: 0xB557, + 53424 - 44032: 0xB558, + 53425 - 44032: 0xB559, + 53426 - 44032: 0xB55A, + 53427 - 44032: 0xB561, + 53428 - 44032: 0xC5B4, + 53429 - 44032: 0xC5B5, + 53430 - 44032: 0xB562, + 53431 - 44032: 0xC5B6, + 53432 - 44032: 0xB563, + 53433 - 44032: 0xC5B7, + 53434 - 44032: 0xB564, + 53435 - 44032: 0xB565, + 53436 - 44032: 0xB566, + 53437 - 44032: 0xB567, + 53438 - 44032: 0xB568, + 53439 - 44032: 0xB569, + 53440 - 44032: 0xC5B8, + 53441 - 44032: 0xC5B9, + 53442 - 44032: 0xB56A, + 53443 - 44032: 0xB56B, + 53444 - 44032: 0xC5BA, + 53445 - 44032: 0xB56C, + 53446 - 44032: 0xB56D, + 53447 - 44032: 0xB56E, + 53448 - 44032: 0xC5BB, + 53449 - 44032: 0xC5BC, + 53450 - 44032: 0xB56F, + 53451 - 44032: 0xB570, + 53452 - 44032: 0xB571, + 53453 - 44032: 0xB572, + 53454 - 44032: 0xB573, + 53455 - 44032: 0xB574, + 53456 - 44032: 0xC5BD, + 53457 - 44032: 0xC5BE, + 53458 - 44032: 0xB575, + 53459 - 44032: 0xC5BF, + 53460 - 44032: 0xC5C0, + 53461 - 44032: 0xC5C1, + 53462 - 44032: 0xB576, + 53463 - 44032: 0xB577, + 53464 - 44032: 0xB578, + 53465 - 44032: 0xB579, + 53466 - 44032: 0xB57A, + 53467 - 44032: 0xB581, + 53468 - 44032: 0xC5C2, + 53469 - 44032: 0xC5C3, + 53470 - 44032: 0xB582, + 53471 - 44032: 0xB583, + 53472 - 44032: 0xC5C4, + 53473 - 44032: 0xB584, + 53474 - 44032: 0xB585, + 53475 - 44032: 0xB586, + 53476 - 44032: 0xC5C5, + 53477 - 44032: 0xB587, + 53478 - 44032: 0xB588, + 53479 - 44032: 0xB589, + 53480 - 44032: 0xB58A, + 53481 - 44032: 0xB58B, + 53482 - 44032: 0xB58C, + 53483 - 44032: 0xB58D, + 53484 - 44032: 0xC5C6, + 53485 - 44032: 0xC5C7, + 53486 - 44032: 0xB58E, + 53487 - 44032: 0xC5C8, + 53488 - 44032: 0xC5C9, + 53489 - 44032: 0xC5CA, + 53490 - 44032: 0xB58F, + 53491 - 44032: 0xB590, + 53492 - 44032: 0xB591, + 53493 - 44032: 0xB592, + 53494 - 44032: 0xB593, + 53495 - 44032: 0xB594, + 53496 - 44032: 0xC5CB, + 53497 - 44032: 0xB595, + 53498 - 44032: 0xB596, + 53499 - 44032: 0xB597, + 53500 - 44032: 0xB598, + 53501 - 44032: 0xB599, + 53502 - 44032: 0xB59A, + 53503 - 44032: 0xB59B, + 53504 - 44032: 0xB59C, + 53505 - 44032: 0xB59D, + 53506 - 44032: 0xB59E, + 53507 - 44032: 0xB59F, + 53508 - 44032: 0xB5A0, + 53509 - 44032: 0xB641, + 53510 - 44032: 0xB642, + 53511 - 44032: 0xB643, + 53512 - 44032: 0xB644, + 53513 - 44032: 0xB645, + 53514 - 44032: 0xB646, + 53515 - 44032: 0xB647, + 53516 - 44032: 0xB648, + 53517 - 44032: 0xC5CC, + 53518 - 44032: 0xB649, + 53519 - 44032: 0xB64A, + 53520 - 44032: 0xB64B, + 53521 - 44032: 0xB64C, + 53522 - 44032: 0xB64D, + 53523 - 44032: 0xB64E, + 53524 - 44032: 0xB64F, + 53525 - 44032: 0xB650, + 53526 - 44032: 0xB651, + 53527 - 44032: 0xB652, + 53528 - 44032: 0xB653, + 53529 - 44032: 0xB654, + 53530 - 44032: 0xB655, + 53531 - 44032: 0xB656, + 53532 - 44032: 0xB657, + 53533 - 44032: 0xB658, + 53534 - 44032: 0xB659, + 53535 - 44032: 0xB65A, + 53536 - 44032: 0xB661, + 53537 - 44032: 0xB662, + 53538 - 44032: 0xB663, + 53539 - 44032: 0xB664, + 53540 - 44032: 0xB665, + 53541 - 44032: 0xB666, + 53542 - 44032: 0xB667, + 53543 - 44032: 0xB668, + 53544 - 44032: 0xB669, + 53545 - 44032: 0xB66A, + 53546 - 44032: 0xB66B, + 53547 - 44032: 0xB66C, + 53548 - 44032: 0xB66D, + 53549 - 44032: 0xB66E, + 53550 - 44032: 0xB66F, + 53551 - 44032: 0xB670, + 53552 - 44032: 0xC5CD, + 53553 - 44032: 0xC5CE, + 53554 - 44032: 0xB671, + 53555 - 44032: 0xB672, + 53556 - 44032: 0xC5CF, + 53557 - 44032: 0xB673, + 53558 - 44032: 0xB674, + 53559 - 44032: 0xB675, + 53560 - 44032: 0xC5D0, + 53561 - 44032: 0xB676, + 53562 - 44032: 0xC5D1, + 53563 - 44032: 0xB677, + 53564 - 44032: 0xB678, + 53565 - 44032: 0xB679, + 53566 - 44032: 0xB67A, + 53567 - 44032: 0xB681, + 53568 - 44032: 0xC5D2, + 53569 - 44032: 0xC5D3, + 53570 - 44032: 0xB682, + 53571 - 44032: 0xC5D4, + 53572 - 44032: 0xC5D5, + 53573 - 44032: 0xC5D6, + 53574 - 44032: 0xB683, + 53575 - 44032: 0xB684, + 53576 - 44032: 0xB685, + 53577 - 44032: 0xB686, + 53578 - 44032: 0xB687, + 53579 - 44032: 0xB688, + 53580 - 44032: 0xC5D7, + 53581 - 44032: 0xC5D8, + 53582 - 44032: 0xB689, + 53583 - 44032: 0xB68A, + 53584 - 44032: 0xC5D9, + 53585 - 44032: 0xB68B, + 53586 - 44032: 0xB68C, + 53587 - 44032: 0xB68D, + 53588 - 44032: 0xC5DA, + 53589 - 44032: 0xB68E, + 53590 - 44032: 0xB68F, + 53591 - 44032: 0xB690, + 53592 - 44032: 0xB691, + 53593 - 44032: 0xB692, + 53594 - 44032: 0xB693, + 53595 - 44032: 0xB694, + 53596 - 44032: 0xC5DB, + 53597 - 44032: 0xC5DC, + 53598 - 44032: 0xB695, + 53599 - 44032: 0xC5DD, + 53600 - 44032: 0xB696, + 53601 - 44032: 0xC5DE, + 53602 - 44032: 0xB697, + 53603 - 44032: 0xB698, + 53604 - 44032: 0xB699, + 53605 - 44032: 0xB69A, + 53606 - 44032: 0xB69B, + 53607 - 44032: 0xB69C, + 53608 - 44032: 0xC5DF, + 53609 - 44032: 0xB69D, + 53610 - 44032: 0xB69E, + 53611 - 44032: 0xB69F, + 53612 - 44032: 0xC5E0, + 53613 - 44032: 0xB6A0, + 53614 - 44032: 0xB741, + 53615 - 44032: 0xB742, + 53616 - 44032: 0xB743, + 53617 - 44032: 0xB744, + 53618 - 44032: 0xB745, + 53619 - 44032: 0xB746, + 53620 - 44032: 0xB747, + 53621 - 44032: 0xB748, + 53622 - 44032: 0xB749, + 53623 - 44032: 0xB74A, + 53624 - 44032: 0xB74B, + 53625 - 44032: 0xB74C, + 53626 - 44032: 0xB74D, + 53627 - 44032: 0xB74E, + 53628 - 44032: 0xC5E1, + 53629 - 44032: 0xB74F, + 53630 - 44032: 0xB750, + 53631 - 44032: 0xB751, + 53632 - 44032: 0xB752, + 53633 - 44032: 0xB753, + 53634 - 44032: 0xB754, + 53635 - 44032: 0xB755, + 53636 - 44032: 0xC5E2, + 53637 - 44032: 0xB756, + 53638 - 44032: 0xB757, + 53639 - 44032: 0xB758, + 53640 - 44032: 0xC5E3, + 53641 - 44032: 0xB759, + 53642 - 44032: 0xB75A, + 53643 - 44032: 0xB761, + 53644 - 44032: 0xB762, + 53645 - 44032: 0xB763, + 53646 - 44032: 0xB764, + 53647 - 44032: 0xB765, + 53648 - 44032: 0xB766, + 53649 - 44032: 0xB767, + 53650 - 44032: 0xB768, + 53651 - 44032: 0xB769, + 53652 - 44032: 0xB76A, + 53653 - 44032: 0xB76B, + 53654 - 44032: 0xB76C, + 53655 - 44032: 0xB76D, + 53656 - 44032: 0xB76E, + 53657 - 44032: 0xB76F, + 53658 - 44032: 0xB770, + 53659 - 44032: 0xB771, + 53660 - 44032: 0xB772, + 53661 - 44032: 0xB773, + 53662 - 44032: 0xB774, + 53663 - 44032: 0xB775, + 53664 - 44032: 0xC5E4, + 53665 - 44032: 0xC5E5, + 53666 - 44032: 0xB776, + 53667 - 44032: 0xB777, + 53668 - 44032: 0xC5E6, + 53669 - 44032: 0xB778, + 53670 - 44032: 0xB779, + 53671 - 44032: 0xB77A, + 53672 - 44032: 0xC5E7, + 53673 - 44032: 0xB781, + 53674 - 44032: 0xB782, + 53675 - 44032: 0xB783, + 53676 - 44032: 0xB784, + 53677 - 44032: 0xB785, + 53678 - 44032: 0xB786, + 53679 - 44032: 0xB787, + 53680 - 44032: 0xC5E8, + 53681 - 44032: 0xC5E9, + 53682 - 44032: 0xB788, + 53683 - 44032: 0xC5EA, + 53684 - 44032: 0xB789, + 53685 - 44032: 0xC5EB, + 53686 - 44032: 0xB78A, + 53687 - 44032: 0xB78B, + 53688 - 44032: 0xB78C, + 53689 - 44032: 0xB78D, + 53690 - 44032: 0xC5EC, + 53691 - 44032: 0xB78E, + 53692 - 44032: 0xC5ED, + 53693 - 44032: 0xB78F, + 53694 - 44032: 0xB790, + 53695 - 44032: 0xB791, + 53696 - 44032: 0xC5EE, + 53697 - 44032: 0xB792, + 53698 - 44032: 0xB793, + 53699 - 44032: 0xB794, + 53700 - 44032: 0xB795, + 53701 - 44032: 0xB796, + 53702 - 44032: 0xB797, + 53703 - 44032: 0xB798, + 53704 - 44032: 0xB799, + 53705 - 44032: 0xB79A, + 53706 - 44032: 0xB79B, + 53707 - 44032: 0xB79C, + 53708 - 44032: 0xB79D, + 53709 - 44032: 0xB79E, + 53710 - 44032: 0xB79F, + 53711 - 44032: 0xB7A0, + 53712 - 44032: 0xB841, + 53713 - 44032: 0xB842, + 53714 - 44032: 0xB843, + 53715 - 44032: 0xB844, + 53716 - 44032: 0xB845, + 53717 - 44032: 0xB846, + 53718 - 44032: 0xB847, + 53719 - 44032: 0xB848, + 53720 - 44032: 0xC5EF, + 53721 - 44032: 0xB849, + 53722 - 44032: 0xB84A, + 53723 - 44032: 0xB84B, + 53724 - 44032: 0xB84C, + 53725 - 44032: 0xB84D, + 53726 - 44032: 0xB84E, + 53727 - 44032: 0xB84F, + 53728 - 44032: 0xB850, + 53729 - 44032: 0xB851, + 53730 - 44032: 0xB852, + 53731 - 44032: 0xB853, + 53732 - 44032: 0xB854, + 53733 - 44032: 0xB855, + 53734 - 44032: 0xB856, + 53735 - 44032: 0xB857, + 53736 - 44032: 0xB858, + 53737 - 44032: 0xB859, + 53738 - 44032: 0xB85A, + 53739 - 44032: 0xB861, + 53740 - 44032: 0xB862, + 53741 - 44032: 0xB863, + 53742 - 44032: 0xB864, + 53743 - 44032: 0xB865, + 53744 - 44032: 0xB866, + 53745 - 44032: 0xB867, + 53746 - 44032: 0xB868, + 53747 - 44032: 0xB869, + 53748 - 44032: 0xC5F0, + 53749 - 44032: 0xB86A, + 53750 - 44032: 0xB86B, + 53751 - 44032: 0xB86C, + 53752 - 44032: 0xC5F1, + 53753 - 44032: 0xB86D, + 53754 - 44032: 0xB86E, + 53755 - 44032: 0xB86F, + 53756 - 44032: 0xB870, + 53757 - 44032: 0xB871, + 53758 - 44032: 0xB872, + 53759 - 44032: 0xB873, + 53760 - 44032: 0xB874, + 53761 - 44032: 0xB875, + 53762 - 44032: 0xB876, + 53763 - 44032: 0xB877, + 53764 - 44032: 0xB878, + 53765 - 44032: 0xB879, + 53766 - 44032: 0xB87A, + 53767 - 44032: 0xC5F2, + 53768 - 44032: 0xB881, + 53769 - 44032: 0xC5F3, + 53770 - 44032: 0xB882, + 53771 - 44032: 0xB883, + 53772 - 44032: 0xB884, + 53773 - 44032: 0xB885, + 53774 - 44032: 0xB886, + 53775 - 44032: 0xB887, + 53776 - 44032: 0xC5F4, + 53777 - 44032: 0xB888, + 53778 - 44032: 0xB889, + 53779 - 44032: 0xB88A, + 53780 - 44032: 0xB88B, + 53781 - 44032: 0xB88C, + 53782 - 44032: 0xB88D, + 53783 - 44032: 0xB88E, + 53784 - 44032: 0xB88F, + 53785 - 44032: 0xB890, + 53786 - 44032: 0xB891, + 53787 - 44032: 0xB892, + 53788 - 44032: 0xB893, + 53789 - 44032: 0xB894, + 53790 - 44032: 0xB895, + 53791 - 44032: 0xB896, + 53792 - 44032: 0xB897, + 53793 - 44032: 0xB898, + 53794 - 44032: 0xB899, + 53795 - 44032: 0xB89A, + 53796 - 44032: 0xB89B, + 53797 - 44032: 0xB89C, + 53798 - 44032: 0xB89D, + 53799 - 44032: 0xB89E, + 53800 - 44032: 0xB89F, + 53801 - 44032: 0xB8A0, + 53802 - 44032: 0xB941, + 53803 - 44032: 0xB942, + 53804 - 44032: 0xC5F5, + 53805 - 44032: 0xC5F6, + 53806 - 44032: 0xB943, + 53807 - 44032: 0xB944, + 53808 - 44032: 0xC5F7, + 53809 - 44032: 0xB945, + 53810 - 44032: 0xB946, + 53811 - 44032: 0xB947, + 53812 - 44032: 0xC5F8, + 53813 - 44032: 0xB948, + 53814 - 44032: 0xB949, + 53815 - 44032: 0xB94A, + 53816 - 44032: 0xB94B, + 53817 - 44032: 0xB94C, + 53818 - 44032: 0xB94D, + 53819 - 44032: 0xB94E, + 53820 - 44032: 0xC5F9, + 53821 - 44032: 0xC5FA, + 53822 - 44032: 0xB94F, + 53823 - 44032: 0xC5FB, + 53824 - 44032: 0xB950, + 53825 - 44032: 0xC5FC, + 53826 - 44032: 0xB951, + 53827 - 44032: 0xB952, + 53828 - 44032: 0xB953, + 53829 - 44032: 0xB954, + 53830 - 44032: 0xB955, + 53831 - 44032: 0xB956, + 53832 - 44032: 0xC5FD, + 53833 - 44032: 0xB957, + 53834 - 44032: 0xB958, + 53835 - 44032: 0xB959, + 53836 - 44032: 0xB95A, + 53837 - 44032: 0xB961, + 53838 - 44032: 0xB962, + 53839 - 44032: 0xB963, + 53840 - 44032: 0xB964, + 53841 - 44032: 0xB965, + 53842 - 44032: 0xB966, + 53843 - 44032: 0xB967, + 53844 - 44032: 0xB968, + 53845 - 44032: 0xB969, + 53846 - 44032: 0xB96A, + 53847 - 44032: 0xB96B, + 53848 - 44032: 0xB96C, + 53849 - 44032: 0xB96D, + 53850 - 44032: 0xB96E, + 53851 - 44032: 0xB96F, + 53852 - 44032: 0xC5FE, + 53853 - 44032: 0xB970, + 53854 - 44032: 0xB971, + 53855 - 44032: 0xB972, + 53856 - 44032: 0xB973, + 53857 - 44032: 0xB974, + 53858 - 44032: 0xB975, + 53859 - 44032: 0xB976, + 53860 - 44032: 0xC6A1, + 53861 - 44032: 0xB977, + 53862 - 44032: 0xB978, + 53863 - 44032: 0xB979, + 53864 - 44032: 0xB97A, + 53865 - 44032: 0xB981, + 53866 - 44032: 0xB982, + 53867 - 44032: 0xB983, + 53868 - 44032: 0xB984, + 53869 - 44032: 0xB985, + 53870 - 44032: 0xB986, + 53871 - 44032: 0xB987, + 53872 - 44032: 0xB988, + 53873 - 44032: 0xB989, + 53874 - 44032: 0xB98A, + 53875 - 44032: 0xB98B, + 53876 - 44032: 0xB98C, + 53877 - 44032: 0xB98D, + 53878 - 44032: 0xB98E, + 53879 - 44032: 0xB98F, + 53880 - 44032: 0xB990, + 53881 - 44032: 0xB991, + 53882 - 44032: 0xB992, + 53883 - 44032: 0xB993, + 53884 - 44032: 0xB994, + 53885 - 44032: 0xB995, + 53886 - 44032: 0xB996, + 53887 - 44032: 0xB997, + 53888 - 44032: 0xC6A2, + 53889 - 44032: 0xC6A3, + 53890 - 44032: 0xB998, + 53891 - 44032: 0xB999, + 53892 - 44032: 0xC6A4, + 53893 - 44032: 0xB99A, + 53894 - 44032: 0xB99B, + 53895 - 44032: 0xB99C, + 53896 - 44032: 0xC6A5, + 53897 - 44032: 0xB99D, + 53898 - 44032: 0xB99E, + 53899 - 44032: 0xB99F, + 53900 - 44032: 0xB9A0, + 53901 - 44032: 0xBA41, + 53902 - 44032: 0xBA42, + 53903 - 44032: 0xBA43, + 53904 - 44032: 0xC6A6, + 53905 - 44032: 0xC6A7, + 53906 - 44032: 0xBA44, + 53907 - 44032: 0xBA45, + 53908 - 44032: 0xBA46, + 53909 - 44032: 0xC6A8, + 53910 - 44032: 0xBA47, + 53911 - 44032: 0xBA48, + 53912 - 44032: 0xBA49, + 53913 - 44032: 0xBA4A, + 53914 - 44032: 0xBA4B, + 53915 - 44032: 0xBA4C, + 53916 - 44032: 0xC6A9, + 53917 - 44032: 0xBA4D, + 53918 - 44032: 0xBA4E, + 53919 - 44032: 0xBA4F, + 53920 - 44032: 0xC6AA, + 53921 - 44032: 0xBA50, + 53922 - 44032: 0xBA51, + 53923 - 44032: 0xBA52, + 53924 - 44032: 0xC6AB, + 53925 - 44032: 0xBA53, + 53926 - 44032: 0xBA54, + 53927 - 44032: 0xBA55, + 53928 - 44032: 0xBA56, + 53929 - 44032: 0xBA57, + 53930 - 44032: 0xBA58, + 53931 - 44032: 0xBA59, + 53932 - 44032: 0xC6AC, + 53933 - 44032: 0xBA5A, + 53934 - 44032: 0xBA61, + 53935 - 44032: 0xBA62, + 53936 - 44032: 0xBA63, + 53937 - 44032: 0xC6AD, + 53938 - 44032: 0xBA64, + 53939 - 44032: 0xBA65, + 53940 - 44032: 0xBA66, + 53941 - 44032: 0xBA67, + 53942 - 44032: 0xBA68, + 53943 - 44032: 0xBA69, + 53944 - 44032: 0xC6AE, + 53945 - 44032: 0xC6AF, + 53946 - 44032: 0xBA6A, + 53947 - 44032: 0xBA6B, + 53948 - 44032: 0xC6B0, + 53949 - 44032: 0xBA6C, + 53950 - 44032: 0xBA6D, + 53951 - 44032: 0xC6B1, + 53952 - 44032: 0xC6B2, + 53953 - 44032: 0xBA6E, + 53954 - 44032: 0xC6B3, + 53955 - 44032: 0xBA6F, + 53956 - 44032: 0xBA70, + 53957 - 44032: 0xBA71, + 53958 - 44032: 0xBA72, + 53959 - 44032: 0xBA73, + 53960 - 44032: 0xC6B4, + 53961 - 44032: 0xC6B5, + 53962 - 44032: 0xBA74, + 53963 - 44032: 0xC6B6, + 53964 - 44032: 0xBA75, + 53965 - 44032: 0xBA76, + 53966 - 44032: 0xBA77, + 53967 - 44032: 0xBA78, + 53968 - 44032: 0xBA79, + 53969 - 44032: 0xBA7A, + 53970 - 44032: 0xBA81, + 53971 - 44032: 0xBA82, + 53972 - 44032: 0xC6B7, + 53973 - 44032: 0xBA83, + 53974 - 44032: 0xBA84, + 53975 - 44032: 0xBA85, + 53976 - 44032: 0xC6B8, + 53977 - 44032: 0xBA86, + 53978 - 44032: 0xBA87, + 53979 - 44032: 0xBA88, + 53980 - 44032: 0xC6B9, + 53981 - 44032: 0xBA89, + 53982 - 44032: 0xBA8A, + 53983 - 44032: 0xBA8B, + 53984 - 44032: 0xBA8C, + 53985 - 44032: 0xBA8D, + 53986 - 44032: 0xBA8E, + 53987 - 44032: 0xBA8F, + 53988 - 44032: 0xC6BA, + 53989 - 44032: 0xC6BB, + 53990 - 44032: 0xBA90, + 53991 - 44032: 0xBA91, + 53992 - 44032: 0xBA92, + 53993 - 44032: 0xBA93, + 53994 - 44032: 0xBA94, + 53995 - 44032: 0xBA95, + 53996 - 44032: 0xBA96, + 53997 - 44032: 0xBA97, + 53998 - 44032: 0xBA98, + 53999 - 44032: 0xBA99, + 54000 - 44032: 0xC6BC, + 54001 - 44032: 0xC6BD, + 54002 - 44032: 0xBA9A, + 54003 - 44032: 0xBA9B, + 54004 - 44032: 0xC6BE, + 54005 - 44032: 0xBA9C, + 54006 - 44032: 0xBA9D, + 54007 - 44032: 0xBA9E, + 54008 - 44032: 0xC6BF, + 54009 - 44032: 0xBA9F, + 54010 - 44032: 0xBAA0, + 54011 - 44032: 0xBB41, + 54012 - 44032: 0xBB42, + 54013 - 44032: 0xBB43, + 54014 - 44032: 0xBB44, + 54015 - 44032: 0xBB45, + 54016 - 44032: 0xC6C0, + 54017 - 44032: 0xC6C1, + 54018 - 44032: 0xBB46, + 54019 - 44032: 0xC6C2, + 54020 - 44032: 0xBB47, + 54021 - 44032: 0xC6C3, + 54022 - 44032: 0xBB48, + 54023 - 44032: 0xBB49, + 54024 - 44032: 0xBB4A, + 54025 - 44032: 0xBB4B, + 54026 - 44032: 0xBB4C, + 54027 - 44032: 0xBB4D, + 54028 - 44032: 0xC6C4, + 54029 - 44032: 0xC6C5, + 54030 - 44032: 0xC6C6, + 54031 - 44032: 0xBB4E, + 54032 - 44032: 0xC6C7, + 54033 - 44032: 0xBB4F, + 54034 - 44032: 0xBB50, + 54035 - 44032: 0xBB51, + 54036 - 44032: 0xC6C8, + 54037 - 44032: 0xBB52, + 54038 - 44032: 0xC6C9, + 54039 - 44032: 0xBB53, + 54040 - 44032: 0xBB54, + 54041 - 44032: 0xBB55, + 54042 - 44032: 0xBB56, + 54043 - 44032: 0xBB57, + 54044 - 44032: 0xC6CA, + 54045 - 44032: 0xC6CB, + 54046 - 44032: 0xBB58, + 54047 - 44032: 0xC6CC, + 54048 - 44032: 0xC6CD, + 54049 - 44032: 0xC6CE, + 54050 - 44032: 0xBB59, + 54051 - 44032: 0xBB5A, + 54052 - 44032: 0xBB61, + 54053 - 44032: 0xC6CF, + 54054 - 44032: 0xBB62, + 54055 - 44032: 0xBB63, + 54056 - 44032: 0xC6D0, + 54057 - 44032: 0xC6D1, + 54058 - 44032: 0xBB64, + 54059 - 44032: 0xBB65, + 54060 - 44032: 0xC6D2, + 54061 - 44032: 0xBB66, + 54062 - 44032: 0xBB67, + 54063 - 44032: 0xBB68, + 54064 - 44032: 0xC6D3, + 54065 - 44032: 0xBB69, + 54066 - 44032: 0xBB6A, + 54067 - 44032: 0xBB6B, + 54068 - 44032: 0xBB6C, + 54069 - 44032: 0xBB6D, + 54070 - 44032: 0xBB6E, + 54071 - 44032: 0xBB6F, + 54072 - 44032: 0xC6D4, + 54073 - 44032: 0xC6D5, + 54074 - 44032: 0xBB70, + 54075 - 44032: 0xC6D6, + 54076 - 44032: 0xC6D7, + 54077 - 44032: 0xC6D8, + 54078 - 44032: 0xBB71, + 54079 - 44032: 0xBB72, + 54080 - 44032: 0xBB73, + 54081 - 44032: 0xBB74, + 54082 - 44032: 0xBB75, + 54083 - 44032: 0xBB76, + 54084 - 44032: 0xC6D9, + 54085 - 44032: 0xC6DA, + 54086 - 44032: 0xBB77, + 54087 - 44032: 0xBB78, + 54088 - 44032: 0xBB79, + 54089 - 44032: 0xBB7A, + 54090 - 44032: 0xBB81, + 54091 - 44032: 0xBB82, + 54092 - 44032: 0xBB83, + 54093 - 44032: 0xBB84, + 54094 - 44032: 0xBB85, + 54095 - 44032: 0xBB86, + 54096 - 44032: 0xBB87, + 54097 - 44032: 0xBB88, + 54098 - 44032: 0xBB89, + 54099 - 44032: 0xBB8A, + 54100 - 44032: 0xBB8B, + 54101 - 44032: 0xBB8C, + 54102 - 44032: 0xBB8D, + 54103 - 44032: 0xBB8E, + 54104 - 44032: 0xBB8F, + 54105 - 44032: 0xBB90, + 54106 - 44032: 0xBB91, + 54107 - 44032: 0xBB92, + 54108 - 44032: 0xBB93, + 54109 - 44032: 0xBB94, + 54110 - 44032: 0xBB95, + 54111 - 44032: 0xBB96, + 54112 - 44032: 0xBB97, + 54113 - 44032: 0xBB98, + 54114 - 44032: 0xBB99, + 54115 - 44032: 0xBB9A, + 54116 - 44032: 0xBB9B, + 54117 - 44032: 0xBB9C, + 54118 - 44032: 0xBB9D, + 54119 - 44032: 0xBB9E, + 54120 - 44032: 0xBB9F, + 54121 - 44032: 0xBBA0, + 54122 - 44032: 0xBC41, + 54123 - 44032: 0xBC42, + 54124 - 44032: 0xBC43, + 54125 - 44032: 0xBC44, + 54126 - 44032: 0xBC45, + 54127 - 44032: 0xBC46, + 54128 - 44032: 0xBC47, + 54129 - 44032: 0xBC48, + 54130 - 44032: 0xBC49, + 54131 - 44032: 0xBC4A, + 54132 - 44032: 0xBC4B, + 54133 - 44032: 0xBC4C, + 54134 - 44032: 0xBC4D, + 54135 - 44032: 0xBC4E, + 54136 - 44032: 0xBC4F, + 54137 - 44032: 0xBC50, + 54138 - 44032: 0xBC51, + 54139 - 44032: 0xBC52, + 54140 - 44032: 0xC6DB, + 54141 - 44032: 0xC6DC, + 54142 - 44032: 0xBC53, + 54143 - 44032: 0xBC54, + 54144 - 44032: 0xC6DD, + 54145 - 44032: 0xBC55, + 54146 - 44032: 0xBC56, + 54147 - 44032: 0xBC57, + 54148 - 44032: 0xC6DE, + 54149 - 44032: 0xBC58, + 54150 - 44032: 0xBC59, + 54151 - 44032: 0xBC5A, + 54152 - 44032: 0xBC61, + 54153 - 44032: 0xBC62, + 54154 - 44032: 0xBC63, + 54155 - 44032: 0xBC64, + 54156 - 44032: 0xC6DF, + 54157 - 44032: 0xC6E0, + 54158 - 44032: 0xBC65, + 54159 - 44032: 0xC6E1, + 54160 - 44032: 0xC6E2, + 54161 - 44032: 0xC6E3, + 54162 - 44032: 0xBC66, + 54163 - 44032: 0xBC67, + 54164 - 44032: 0xBC68, + 54165 - 44032: 0xBC69, + 54166 - 44032: 0xBC6A, + 54167 - 44032: 0xBC6B, + 54168 - 44032: 0xC6E4, + 54169 - 44032: 0xC6E5, + 54170 - 44032: 0xBC6C, + 54171 - 44032: 0xBC6D, + 54172 - 44032: 0xC6E6, + 54173 - 44032: 0xBC6E, + 54174 - 44032: 0xBC6F, + 54175 - 44032: 0xBC70, + 54176 - 44032: 0xC6E7, + 54177 - 44032: 0xBC71, + 54178 - 44032: 0xBC72, + 54179 - 44032: 0xBC73, + 54180 - 44032: 0xBC74, + 54181 - 44032: 0xBC75, + 54182 - 44032: 0xBC76, + 54183 - 44032: 0xBC77, + 54184 - 44032: 0xC6E8, + 54185 - 44032: 0xC6E9, + 54186 - 44032: 0xBC78, + 54187 - 44032: 0xC6EA, + 54188 - 44032: 0xBC79, + 54189 - 44032: 0xC6EB, + 54190 - 44032: 0xBC7A, + 54191 - 44032: 0xBC81, + 54192 - 44032: 0xBC82, + 54193 - 44032: 0xBC83, + 54194 - 44032: 0xBC84, + 54195 - 44032: 0xBC85, + 54196 - 44032: 0xC6EC, + 54197 - 44032: 0xBC86, + 54198 - 44032: 0xBC87, + 54199 - 44032: 0xBC88, + 54200 - 44032: 0xC6ED, + 54201 - 44032: 0xBC89, + 54202 - 44032: 0xBC8A, + 54203 - 44032: 0xBC8B, + 54204 - 44032: 0xC6EE, + 54205 - 44032: 0xBC8C, + 54206 - 44032: 0xBC8D, + 54207 - 44032: 0xBC8E, + 54208 - 44032: 0xBC8F, + 54209 - 44032: 0xBC90, + 54210 - 44032: 0xBC91, + 54211 - 44032: 0xBC92, + 54212 - 44032: 0xC6EF, + 54213 - 44032: 0xC6F0, + 54214 - 44032: 0xBC93, + 54215 - 44032: 0xBC94, + 54216 - 44032: 0xC6F1, + 54217 - 44032: 0xC6F2, + 54218 - 44032: 0xBC95, + 54219 - 44032: 0xBC96, + 54220 - 44032: 0xBC97, + 54221 - 44032: 0xBC98, + 54222 - 44032: 0xBC99, + 54223 - 44032: 0xBC9A, + 54224 - 44032: 0xC6F3, + 54225 - 44032: 0xBC9B, + 54226 - 44032: 0xBC9C, + 54227 - 44032: 0xBC9D, + 54228 - 44032: 0xBC9E, + 54229 - 44032: 0xBC9F, + 54230 - 44032: 0xBCA0, + 54231 - 44032: 0xBD41, + 54232 - 44032: 0xC6F4, + 54233 - 44032: 0xBD42, + 54234 - 44032: 0xBD43, + 54235 - 44032: 0xBD44, + 54236 - 44032: 0xBD45, + 54237 - 44032: 0xBD46, + 54238 - 44032: 0xBD47, + 54239 - 44032: 0xBD48, + 54240 - 44032: 0xBD49, + 54241 - 44032: 0xC6F5, + 54242 - 44032: 0xBD4A, + 54243 - 44032: 0xC6F6, + 54244 - 44032: 0xBD4B, + 54245 - 44032: 0xBD4C, + 54246 - 44032: 0xBD4D, + 54247 - 44032: 0xBD4E, + 54248 - 44032: 0xBD4F, + 54249 - 44032: 0xBD50, + 54250 - 44032: 0xBD51, + 54251 - 44032: 0xBD52, + 54252 - 44032: 0xC6F7, + 54253 - 44032: 0xC6F8, + 54254 - 44032: 0xBD53, + 54255 - 44032: 0xBD54, + 54256 - 44032: 0xC6F9, + 54257 - 44032: 0xBD55, + 54258 - 44032: 0xBD56, + 54259 - 44032: 0xBD57, + 54260 - 44032: 0xC6FA, + 54261 - 44032: 0xBD58, + 54262 - 44032: 0xBD59, + 54263 - 44032: 0xBD5A, + 54264 - 44032: 0xBD61, + 54265 - 44032: 0xBD62, + 54266 - 44032: 0xBD63, + 54267 - 44032: 0xBD64, + 54268 - 44032: 0xC6FB, + 54269 - 44032: 0xC6FC, + 54270 - 44032: 0xBD65, + 54271 - 44032: 0xC6FD, + 54272 - 44032: 0xBD66, + 54273 - 44032: 0xC6FE, + 54274 - 44032: 0xBD67, + 54275 - 44032: 0xBD68, + 54276 - 44032: 0xBD69, + 54277 - 44032: 0xBD6A, + 54278 - 44032: 0xBD6B, + 54279 - 44032: 0xBD6C, + 54280 - 44032: 0xC7A1, + 54281 - 44032: 0xBD6D, + 54282 - 44032: 0xBD6E, + 54283 - 44032: 0xBD6F, + 54284 - 44032: 0xBD70, + 54285 - 44032: 0xBD71, + 54286 - 44032: 0xBD72, + 54287 - 44032: 0xBD73, + 54288 - 44032: 0xBD74, + 54289 - 44032: 0xBD75, + 54290 - 44032: 0xBD76, + 54291 - 44032: 0xBD77, + 54292 - 44032: 0xBD78, + 54293 - 44032: 0xBD79, + 54294 - 44032: 0xBD7A, + 54295 - 44032: 0xBD81, + 54296 - 44032: 0xBD82, + 54297 - 44032: 0xBD83, + 54298 - 44032: 0xBD84, + 54299 - 44032: 0xBD85, + 54300 - 44032: 0xBD86, + 54301 - 44032: 0xC7A2, + 54302 - 44032: 0xBD87, + 54303 - 44032: 0xBD88, + 54304 - 44032: 0xBD89, + 54305 - 44032: 0xBD8A, + 54306 - 44032: 0xBD8B, + 54307 - 44032: 0xBD8C, + 54308 - 44032: 0xBD8D, + 54309 - 44032: 0xBD8E, + 54310 - 44032: 0xBD8F, + 54311 - 44032: 0xBD90, + 54312 - 44032: 0xBD91, + 54313 - 44032: 0xBD92, + 54314 - 44032: 0xBD93, + 54315 - 44032: 0xBD94, + 54316 - 44032: 0xBD95, + 54317 - 44032: 0xBD96, + 54318 - 44032: 0xBD97, + 54319 - 44032: 0xBD98, + 54320 - 44032: 0xBD99, + 54321 - 44032: 0xBD9A, + 54322 - 44032: 0xBD9B, + 54323 - 44032: 0xBD9C, + 54324 - 44032: 0xBD9D, + 54325 - 44032: 0xBD9E, + 54326 - 44032: 0xBD9F, + 54327 - 44032: 0xBDA0, + 54328 - 44032: 0xBE41, + 54329 - 44032: 0xBE42, + 54330 - 44032: 0xBE43, + 54331 - 44032: 0xBE44, + 54332 - 44032: 0xBE45, + 54333 - 44032: 0xBE46, + 54334 - 44032: 0xBE47, + 54335 - 44032: 0xBE48, + 54336 - 44032: 0xC7A3, + 54337 - 44032: 0xBE49, + 54338 - 44032: 0xBE4A, + 54339 - 44032: 0xBE4B, + 54340 - 44032: 0xC7A4, + 54341 - 44032: 0xBE4C, + 54342 - 44032: 0xBE4D, + 54343 - 44032: 0xBE4E, + 54344 - 44032: 0xBE4F, + 54345 - 44032: 0xBE50, + 54346 - 44032: 0xBE51, + 54347 - 44032: 0xBE52, + 54348 - 44032: 0xBE53, + 54349 - 44032: 0xBE54, + 54350 - 44032: 0xBE55, + 54351 - 44032: 0xBE56, + 54352 - 44032: 0xBE57, + 54353 - 44032: 0xBE58, + 54354 - 44032: 0xBE59, + 54355 - 44032: 0xBE5A, + 54356 - 44032: 0xBE61, + 54357 - 44032: 0xBE62, + 54358 - 44032: 0xBE63, + 54359 - 44032: 0xBE64, + 54360 - 44032: 0xBE65, + 54361 - 44032: 0xBE66, + 54362 - 44032: 0xBE67, + 54363 - 44032: 0xBE68, + 54364 - 44032: 0xC7A5, + 54365 - 44032: 0xBE69, + 54366 - 44032: 0xBE6A, + 54367 - 44032: 0xBE6B, + 54368 - 44032: 0xC7A6, + 54369 - 44032: 0xBE6C, + 54370 - 44032: 0xBE6D, + 54371 - 44032: 0xBE6E, + 54372 - 44032: 0xC7A7, + 54373 - 44032: 0xBE6F, + 54374 - 44032: 0xBE70, + 54375 - 44032: 0xBE71, + 54376 - 44032: 0xBE72, + 54377 - 44032: 0xBE73, + 54378 - 44032: 0xBE74, + 54379 - 44032: 0xBE75, + 54380 - 44032: 0xBE76, + 54381 - 44032: 0xC7A8, + 54382 - 44032: 0xBE77, + 54383 - 44032: 0xC7A9, + 54384 - 44032: 0xBE78, + 54385 - 44032: 0xBE79, + 54386 - 44032: 0xBE7A, + 54387 - 44032: 0xBE81, + 54388 - 44032: 0xBE82, + 54389 - 44032: 0xBE83, + 54390 - 44032: 0xBE84, + 54391 - 44032: 0xBE85, + 54392 - 44032: 0xC7AA, + 54393 - 44032: 0xC7AB, + 54394 - 44032: 0xBE86, + 54395 - 44032: 0xBE87, + 54396 - 44032: 0xC7AC, + 54397 - 44032: 0xBE88, + 54398 - 44032: 0xBE89, + 54399 - 44032: 0xC7AD, + 54400 - 44032: 0xC7AE, + 54401 - 44032: 0xBE8A, + 54402 - 44032: 0xC7AF, + 54403 - 44032: 0xBE8B, + 54404 - 44032: 0xBE8C, + 54405 - 44032: 0xBE8D, + 54406 - 44032: 0xBE8E, + 54407 - 44032: 0xBE8F, + 54408 - 44032: 0xC7B0, + 54409 - 44032: 0xC7B1, + 54410 - 44032: 0xBE90, + 54411 - 44032: 0xC7B2, + 54412 - 44032: 0xBE91, + 54413 - 44032: 0xC7B3, + 54414 - 44032: 0xBE92, + 54415 - 44032: 0xBE93, + 54416 - 44032: 0xBE94, + 54417 - 44032: 0xBE95, + 54418 - 44032: 0xBE96, + 54419 - 44032: 0xBE97, + 54420 - 44032: 0xC7B4, + 54421 - 44032: 0xBE98, + 54422 - 44032: 0xBE99, + 54423 - 44032: 0xBE9A, + 54424 - 44032: 0xBE9B, + 54425 - 44032: 0xBE9C, + 54426 - 44032: 0xBE9D, + 54427 - 44032: 0xBE9E, + 54428 - 44032: 0xBE9F, + 54429 - 44032: 0xBEA0, + 54430 - 44032: 0xBF41, + 54431 - 44032: 0xBF42, + 54432 - 44032: 0xBF43, + 54433 - 44032: 0xBF44, + 54434 - 44032: 0xBF45, + 54435 - 44032: 0xBF46, + 54436 - 44032: 0xBF47, + 54437 - 44032: 0xBF48, + 54438 - 44032: 0xBF49, + 54439 - 44032: 0xBF4A, + 54440 - 44032: 0xBF4B, + 54441 - 44032: 0xC7B5, + 54442 - 44032: 0xBF4C, + 54443 - 44032: 0xBF4D, + 54444 - 44032: 0xBF4E, + 54445 - 44032: 0xBF4F, + 54446 - 44032: 0xBF50, + 54447 - 44032: 0xBF51, + 54448 - 44032: 0xBF52, + 54449 - 44032: 0xBF53, + 54450 - 44032: 0xBF54, + 54451 - 44032: 0xBF55, + 54452 - 44032: 0xBF56, + 54453 - 44032: 0xBF57, + 54454 - 44032: 0xBF58, + 54455 - 44032: 0xBF59, + 54456 - 44032: 0xBF5A, + 54457 - 44032: 0xBF61, + 54458 - 44032: 0xBF62, + 54459 - 44032: 0xBF63, + 54460 - 44032: 0xBF64, + 54461 - 44032: 0xBF65, + 54462 - 44032: 0xBF66, + 54463 - 44032: 0xBF67, + 54464 - 44032: 0xBF68, + 54465 - 44032: 0xBF69, + 54466 - 44032: 0xBF6A, + 54467 - 44032: 0xBF6B, + 54468 - 44032: 0xBF6C, + 54469 - 44032: 0xBF6D, + 54470 - 44032: 0xBF6E, + 54471 - 44032: 0xBF6F, + 54472 - 44032: 0xBF70, + 54473 - 44032: 0xBF71, + 54474 - 44032: 0xBF72, + 54475 - 44032: 0xBF73, + 54476 - 44032: 0xC7B6, + 54477 - 44032: 0xBF74, + 54478 - 44032: 0xBF75, + 54479 - 44032: 0xBF76, + 54480 - 44032: 0xC7B7, + 54481 - 44032: 0xBF77, + 54482 - 44032: 0xBF78, + 54483 - 44032: 0xBF79, + 54484 - 44032: 0xC7B8, + 54485 - 44032: 0xBF7A, + 54486 - 44032: 0xBF81, + 54487 - 44032: 0xBF82, + 54488 - 44032: 0xBF83, + 54489 - 44032: 0xBF84, + 54490 - 44032: 0xBF85, + 54491 - 44032: 0xBF86, + 54492 - 44032: 0xC7B9, + 54493 - 44032: 0xBF87, + 54494 - 44032: 0xBF88, + 54495 - 44032: 0xC7BA, + 54496 - 44032: 0xBF89, + 54497 - 44032: 0xBF8A, + 54498 - 44032: 0xBF8B, + 54499 - 44032: 0xBF8C, + 54500 - 44032: 0xBF8D, + 54501 - 44032: 0xBF8E, + 54502 - 44032: 0xBF8F, + 54503 - 44032: 0xBF90, + 54504 - 44032: 0xC7BB, + 54505 - 44032: 0xBF91, + 54506 - 44032: 0xBF92, + 54507 - 44032: 0xBF93, + 54508 - 44032: 0xC7BC, + 54509 - 44032: 0xBF94, + 54510 - 44032: 0xBF95, + 54511 - 44032: 0xBF96, + 54512 - 44032: 0xC7BD, + 54513 - 44032: 0xBF97, + 54514 - 44032: 0xBF98, + 54515 - 44032: 0xBF99, + 54516 - 44032: 0xBF9A, + 54517 - 44032: 0xBF9B, + 54518 - 44032: 0xBF9C, + 54519 - 44032: 0xBF9D, + 54520 - 44032: 0xC7BE, + 54521 - 44032: 0xBF9E, + 54522 - 44032: 0xBF9F, + 54523 - 44032: 0xC7BF, + 54524 - 44032: 0xBFA0, + 54525 - 44032: 0xC7C0, + 54526 - 44032: 0xC041, + 54527 - 44032: 0xC042, + 54528 - 44032: 0xC043, + 54529 - 44032: 0xC044, + 54530 - 44032: 0xC045, + 54531 - 44032: 0xC046, + 54532 - 44032: 0xC7C1, + 54533 - 44032: 0xC047, + 54534 - 44032: 0xC048, + 54535 - 44032: 0xC049, + 54536 - 44032: 0xC7C2, + 54537 - 44032: 0xC04A, + 54538 - 44032: 0xC04B, + 54539 - 44032: 0xC04C, + 54540 - 44032: 0xC7C3, + 54541 - 44032: 0xC04D, + 54542 - 44032: 0xC04E, + 54543 - 44032: 0xC04F, + 54544 - 44032: 0xC050, + 54545 - 44032: 0xC051, + 54546 - 44032: 0xC052, + 54547 - 44032: 0xC053, + 54548 - 44032: 0xC7C4, + 54549 - 44032: 0xC7C5, + 54550 - 44032: 0xC054, + 54551 - 44032: 0xC7C6, + 54552 - 44032: 0xC055, + 54553 - 44032: 0xC056, + 54554 - 44032: 0xC057, + 54555 - 44032: 0xC058, + 54556 - 44032: 0xC059, + 54557 - 44032: 0xC05A, + 54558 - 44032: 0xC061, + 54559 - 44032: 0xC062, + 54560 - 44032: 0xC063, + 54561 - 44032: 0xC064, + 54562 - 44032: 0xC065, + 54563 - 44032: 0xC066, + 54564 - 44032: 0xC067, + 54565 - 44032: 0xC068, + 54566 - 44032: 0xC069, + 54567 - 44032: 0xC06A, + 54568 - 44032: 0xC06B, + 54569 - 44032: 0xC06C, + 54570 - 44032: 0xC06D, + 54571 - 44032: 0xC06E, + 54572 - 44032: 0xC06F, + 54573 - 44032: 0xC070, + 54574 - 44032: 0xC071, + 54575 - 44032: 0xC072, + 54576 - 44032: 0xC073, + 54577 - 44032: 0xC074, + 54578 - 44032: 0xC075, + 54579 - 44032: 0xC076, + 54580 - 44032: 0xC077, + 54581 - 44032: 0xC078, + 54582 - 44032: 0xC079, + 54583 - 44032: 0xC07A, + 54584 - 44032: 0xC081, + 54585 - 44032: 0xC082, + 54586 - 44032: 0xC083, + 54587 - 44032: 0xC084, + 54588 - 44032: 0xC7C7, + 54589 - 44032: 0xC7C8, + 54590 - 44032: 0xC085, + 54591 - 44032: 0xC086, + 54592 - 44032: 0xC7C9, + 54593 - 44032: 0xC087, + 54594 - 44032: 0xC088, + 54595 - 44032: 0xC089, + 54596 - 44032: 0xC7CA, + 54597 - 44032: 0xC08A, + 54598 - 44032: 0xC08B, + 54599 - 44032: 0xC08C, + 54600 - 44032: 0xC08D, + 54601 - 44032: 0xC08E, + 54602 - 44032: 0xC08F, + 54603 - 44032: 0xC090, + 54604 - 44032: 0xC7CB, + 54605 - 44032: 0xC7CC, + 54606 - 44032: 0xC091, + 54607 - 44032: 0xC7CD, + 54608 - 44032: 0xC092, + 54609 - 44032: 0xC7CE, + 54610 - 44032: 0xC093, + 54611 - 44032: 0xC094, + 54612 - 44032: 0xC095, + 54613 - 44032: 0xC096, + 54614 - 44032: 0xC097, + 54615 - 44032: 0xC098, + 54616 - 44032: 0xC7CF, + 54617 - 44032: 0xC7D0, + 54618 - 44032: 0xC099, + 54619 - 44032: 0xC09A, + 54620 - 44032: 0xC7D1, + 54621 - 44032: 0xC09B, + 54622 - 44032: 0xC09C, + 54623 - 44032: 0xC09D, + 54624 - 44032: 0xC7D2, + 54625 - 44032: 0xC09E, + 54626 - 44032: 0xC09F, + 54627 - 44032: 0xC0A0, + 54628 - 44032: 0xC141, + 54629 - 44032: 0xC7D3, + 54630 - 44032: 0xC142, + 54631 - 44032: 0xC143, + 54632 - 44032: 0xC7D4, + 54633 - 44032: 0xC7D5, + 54634 - 44032: 0xC144, + 54635 - 44032: 0xC7D6, + 54636 - 44032: 0xC145, + 54637 - 44032: 0xC7D7, + 54638 - 44032: 0xC146, + 54639 - 44032: 0xC147, + 54640 - 44032: 0xC148, + 54641 - 44032: 0xC149, + 54642 - 44032: 0xC14A, + 54643 - 44032: 0xC14B, + 54644 - 44032: 0xC7D8, + 54645 - 44032: 0xC7D9, + 54646 - 44032: 0xC14C, + 54647 - 44032: 0xC14D, + 54648 - 44032: 0xC7DA, + 54649 - 44032: 0xC14E, + 54650 - 44032: 0xC14F, + 54651 - 44032: 0xC150, + 54652 - 44032: 0xC7DB, + 54653 - 44032: 0xC151, + 54654 - 44032: 0xC152, + 54655 - 44032: 0xC153, + 54656 - 44032: 0xC154, + 54657 - 44032: 0xC155, + 54658 - 44032: 0xC156, + 54659 - 44032: 0xC157, + 54660 - 44032: 0xC7DC, + 54661 - 44032: 0xC7DD, + 54662 - 44032: 0xC158, + 54663 - 44032: 0xC7DE, + 54664 - 44032: 0xC7DF, + 54665 - 44032: 0xC7E0, + 54666 - 44032: 0xC159, + 54667 - 44032: 0xC15A, + 54668 - 44032: 0xC161, + 54669 - 44032: 0xC162, + 54670 - 44032: 0xC163, + 54671 - 44032: 0xC164, + 54672 - 44032: 0xC7E1, + 54673 - 44032: 0xC165, + 54674 - 44032: 0xC166, + 54675 - 44032: 0xC167, + 54676 - 44032: 0xC168, + 54677 - 44032: 0xC169, + 54678 - 44032: 0xC16A, + 54679 - 44032: 0xC16B, + 54680 - 44032: 0xC16C, + 54681 - 44032: 0xC16D, + 54682 - 44032: 0xC16E, + 54683 - 44032: 0xC16F, + 54684 - 44032: 0xC170, + 54685 - 44032: 0xC171, + 54686 - 44032: 0xC172, + 54687 - 44032: 0xC173, + 54688 - 44032: 0xC174, + 54689 - 44032: 0xC175, + 54690 - 44032: 0xC176, + 54691 - 44032: 0xC177, + 54692 - 44032: 0xC178, + 54693 - 44032: 0xC7E2, + 54694 - 44032: 0xC179, + 54695 - 44032: 0xC17A, + 54696 - 44032: 0xC181, + 54697 - 44032: 0xC182, + 54698 - 44032: 0xC183, + 54699 - 44032: 0xC184, + 54700 - 44032: 0xC185, + 54701 - 44032: 0xC186, + 54702 - 44032: 0xC187, + 54703 - 44032: 0xC188, + 54704 - 44032: 0xC189, + 54705 - 44032: 0xC18A, + 54706 - 44032: 0xC18B, + 54707 - 44032: 0xC18C, + 54708 - 44032: 0xC18D, + 54709 - 44032: 0xC18E, + 54710 - 44032: 0xC18F, + 54711 - 44032: 0xC190, + 54712 - 44032: 0xC191, + 54713 - 44032: 0xC192, + 54714 - 44032: 0xC193, + 54715 - 44032: 0xC194, + 54716 - 44032: 0xC195, + 54717 - 44032: 0xC196, + 54718 - 44032: 0xC197, + 54719 - 44032: 0xC198, + 54720 - 44032: 0xC199, + 54721 - 44032: 0xC19A, + 54722 - 44032: 0xC19B, + 54723 - 44032: 0xC19C, + 54724 - 44032: 0xC19D, + 54725 - 44032: 0xC19E, + 54726 - 44032: 0xC19F, + 54727 - 44032: 0xC1A0, + 54728 - 44032: 0xC7E3, + 54729 - 44032: 0xC7E4, + 54730 - 44032: 0xC241, + 54731 - 44032: 0xC242, + 54732 - 44032: 0xC7E5, + 54733 - 44032: 0xC243, + 54734 - 44032: 0xC244, + 54735 - 44032: 0xC245, + 54736 - 44032: 0xC7E6, + 54737 - 44032: 0xC246, + 54738 - 44032: 0xC7E7, + 54739 - 44032: 0xC247, + 54740 - 44032: 0xC248, + 54741 - 44032: 0xC249, + 54742 - 44032: 0xC24A, + 54743 - 44032: 0xC24B, + 54744 - 44032: 0xC7E8, + 54745 - 44032: 0xC7E9, + 54746 - 44032: 0xC24C, + 54747 - 44032: 0xC7EA, + 54748 - 44032: 0xC24D, + 54749 - 44032: 0xC7EB, + 54750 - 44032: 0xC24E, + 54751 - 44032: 0xC24F, + 54752 - 44032: 0xC250, + 54753 - 44032: 0xC251, + 54754 - 44032: 0xC252, + 54755 - 44032: 0xC253, + 54756 - 44032: 0xC7EC, + 54757 - 44032: 0xC7ED, + 54758 - 44032: 0xC254, + 54759 - 44032: 0xC255, + 54760 - 44032: 0xC7EE, + 54761 - 44032: 0xC256, + 54762 - 44032: 0xC257, + 54763 - 44032: 0xC258, + 54764 - 44032: 0xC7EF, + 54765 - 44032: 0xC259, + 54766 - 44032: 0xC25A, + 54767 - 44032: 0xC261, + 54768 - 44032: 0xC262, + 54769 - 44032: 0xC263, + 54770 - 44032: 0xC264, + 54771 - 44032: 0xC265, + 54772 - 44032: 0xC7F0, + 54773 - 44032: 0xC7F1, + 54774 - 44032: 0xC266, + 54775 - 44032: 0xC7F2, + 54776 - 44032: 0xC267, + 54777 - 44032: 0xC7F3, + 54778 - 44032: 0xC268, + 54779 - 44032: 0xC269, + 54780 - 44032: 0xC26A, + 54781 - 44032: 0xC26B, + 54782 - 44032: 0xC26C, + 54783 - 44032: 0xC26D, + 54784 - 44032: 0xC7F4, + 54785 - 44032: 0xC7F5, + 54786 - 44032: 0xC26E, + 54787 - 44032: 0xC26F, + 54788 - 44032: 0xC7F6, + 54789 - 44032: 0xC270, + 54790 - 44032: 0xC271, + 54791 - 44032: 0xC272, + 54792 - 44032: 0xC7F7, + 54793 - 44032: 0xC273, + 54794 - 44032: 0xC274, + 54795 - 44032: 0xC275, + 54796 - 44032: 0xC276, + 54797 - 44032: 0xC277, + 54798 - 44032: 0xC278, + 54799 - 44032: 0xC279, + 54800 - 44032: 0xC7F8, + 54801 - 44032: 0xC7F9, + 54802 - 44032: 0xC27A, + 54803 - 44032: 0xC7FA, + 54804 - 44032: 0xC7FB, + 54805 - 44032: 0xC7FC, + 54806 - 44032: 0xC281, + 54807 - 44032: 0xC282, + 54808 - 44032: 0xC283, + 54809 - 44032: 0xC284, + 54810 - 44032: 0xC285, + 54811 - 44032: 0xC286, + 54812 - 44032: 0xC7FD, + 54813 - 44032: 0xC287, + 54814 - 44032: 0xC288, + 54815 - 44032: 0xC289, + 54816 - 44032: 0xC7FE, + 54817 - 44032: 0xC28A, + 54818 - 44032: 0xC28B, + 54819 - 44032: 0xC28C, + 54820 - 44032: 0xC8A1, + 54821 - 44032: 0xC28D, + 54822 - 44032: 0xC28E, + 54823 - 44032: 0xC28F, + 54824 - 44032: 0xC290, + 54825 - 44032: 0xC291, + 54826 - 44032: 0xC292, + 54827 - 44032: 0xC293, + 54828 - 44032: 0xC294, + 54829 - 44032: 0xC8A2, + 54830 - 44032: 0xC295, + 54831 - 44032: 0xC296, + 54832 - 44032: 0xC297, + 54833 - 44032: 0xC298, + 54834 - 44032: 0xC299, + 54835 - 44032: 0xC29A, + 54836 - 44032: 0xC29B, + 54837 - 44032: 0xC29C, + 54838 - 44032: 0xC29D, + 54839 - 44032: 0xC29E, + 54840 - 44032: 0xC8A3, + 54841 - 44032: 0xC8A4, + 54842 - 44032: 0xC29F, + 54843 - 44032: 0xC2A0, + 54844 - 44032: 0xC8A5, + 54845 - 44032: 0xC341, + 54846 - 44032: 0xC342, + 54847 - 44032: 0xC343, + 54848 - 44032: 0xC8A6, + 54849 - 44032: 0xC344, + 54850 - 44032: 0xC345, + 54851 - 44032: 0xC346, + 54852 - 44032: 0xC347, + 54853 - 44032: 0xC8A7, + 54854 - 44032: 0xC348, + 54855 - 44032: 0xC349, + 54856 - 44032: 0xC8A8, + 54857 - 44032: 0xC8A9, + 54858 - 44032: 0xC34A, + 54859 - 44032: 0xC8AA, + 54860 - 44032: 0xC34B, + 54861 - 44032: 0xC8AB, + 54862 - 44032: 0xC34C, + 54863 - 44032: 0xC34D, + 54864 - 44032: 0xC34E, + 54865 - 44032: 0xC8AC, + 54866 - 44032: 0xC34F, + 54867 - 44032: 0xC350, + 54868 - 44032: 0xC8AD, + 54869 - 44032: 0xC8AE, + 54870 - 44032: 0xC351, + 54871 - 44032: 0xC352, + 54872 - 44032: 0xC8AF, + 54873 - 44032: 0xC353, + 54874 - 44032: 0xC354, + 54875 - 44032: 0xC355, + 54876 - 44032: 0xC8B0, + 54877 - 44032: 0xC356, + 54878 - 44032: 0xC357, + 54879 - 44032: 0xC358, + 54880 - 44032: 0xC359, + 54881 - 44032: 0xC35A, + 54882 - 44032: 0xC361, + 54883 - 44032: 0xC362, + 54884 - 44032: 0xC363, + 54885 - 44032: 0xC364, + 54886 - 44032: 0xC365, + 54887 - 44032: 0xC8B1, + 54888 - 44032: 0xC366, + 54889 - 44032: 0xC8B2, + 54890 - 44032: 0xC367, + 54891 - 44032: 0xC368, + 54892 - 44032: 0xC369, + 54893 - 44032: 0xC36A, + 54894 - 44032: 0xC36B, + 54895 - 44032: 0xC36C, + 54896 - 44032: 0xC8B3, + 54897 - 44032: 0xC8B4, + 54898 - 44032: 0xC36D, + 54899 - 44032: 0xC36E, + 54900 - 44032: 0xC8B5, + 54901 - 44032: 0xC36F, + 54902 - 44032: 0xC370, + 54903 - 44032: 0xC371, + 54904 - 44032: 0xC372, + 54905 - 44032: 0xC373, + 54906 - 44032: 0xC374, + 54907 - 44032: 0xC375, + 54908 - 44032: 0xC376, + 54909 - 44032: 0xC377, + 54910 - 44032: 0xC378, + 54911 - 44032: 0xC379, + 54912 - 44032: 0xC37A, + 54913 - 44032: 0xC381, + 54914 - 44032: 0xC382, + 54915 - 44032: 0xC8B6, + 54916 - 44032: 0xC383, + 54917 - 44032: 0xC8B7, + 54918 - 44032: 0xC384, + 54919 - 44032: 0xC385, + 54920 - 44032: 0xC386, + 54921 - 44032: 0xC387, + 54922 - 44032: 0xC388, + 54923 - 44032: 0xC389, + 54924 - 44032: 0xC8B8, + 54925 - 44032: 0xC8B9, + 54926 - 44032: 0xC38A, + 54927 - 44032: 0xC38B, + 54928 - 44032: 0xC8BA, + 54929 - 44032: 0xC38C, + 54930 - 44032: 0xC38D, + 54931 - 44032: 0xC38E, + 54932 - 44032: 0xC8BB, + 54933 - 44032: 0xC38F, + 54934 - 44032: 0xC390, + 54935 - 44032: 0xC391, + 54936 - 44032: 0xC392, + 54937 - 44032: 0xC393, + 54938 - 44032: 0xC394, + 54939 - 44032: 0xC395, + 54940 - 44032: 0xC396, + 54941 - 44032: 0xC8BC, + 54942 - 44032: 0xC397, + 54943 - 44032: 0xC8BD, + 54944 - 44032: 0xC398, + 54945 - 44032: 0xC8BE, + 54946 - 44032: 0xC399, + 54947 - 44032: 0xC39A, + 54948 - 44032: 0xC39B, + 54949 - 44032: 0xC39C, + 54950 - 44032: 0xC39D, + 54951 - 44032: 0xC39E, + 54952 - 44032: 0xC8BF, + 54953 - 44032: 0xC39F, + 54954 - 44032: 0xC3A0, + 54955 - 44032: 0xC441, + 54956 - 44032: 0xC8C0, + 54957 - 44032: 0xC442, + 54958 - 44032: 0xC443, + 54959 - 44032: 0xC444, + 54960 - 44032: 0xC8C1, + 54961 - 44032: 0xC445, + 54962 - 44032: 0xC446, + 54963 - 44032: 0xC447, + 54964 - 44032: 0xC448, + 54965 - 44032: 0xC449, + 54966 - 44032: 0xC44A, + 54967 - 44032: 0xC44B, + 54968 - 44032: 0xC44C, + 54969 - 44032: 0xC8C2, + 54970 - 44032: 0xC44D, + 54971 - 44032: 0xC8C3, + 54972 - 44032: 0xC44E, + 54973 - 44032: 0xC44F, + 54974 - 44032: 0xC450, + 54975 - 44032: 0xC451, + 54976 - 44032: 0xC452, + 54977 - 44032: 0xC453, + 54978 - 44032: 0xC454, + 54979 - 44032: 0xC455, + 54980 - 44032: 0xC8C4, + 54981 - 44032: 0xC8C5, + 54982 - 44032: 0xC456, + 54983 - 44032: 0xC457, + 54984 - 44032: 0xC8C6, + 54985 - 44032: 0xC458, + 54986 - 44032: 0xC459, + 54987 - 44032: 0xC45A, + 54988 - 44032: 0xC8C7, + 54989 - 44032: 0xC461, + 54990 - 44032: 0xC462, + 54991 - 44032: 0xC463, + 54992 - 44032: 0xC464, + 54993 - 44032: 0xC8C8, + 54994 - 44032: 0xC465, + 54995 - 44032: 0xC466, + 54996 - 44032: 0xC8C9, + 54997 - 44032: 0xC467, + 54998 - 44032: 0xC468, + 54999 - 44032: 0xC8CA, + 55000 - 44032: 0xC469, + 55001 - 44032: 0xC8CB, + 55002 - 44032: 0xC46A, + 55003 - 44032: 0xC46B, + 55004 - 44032: 0xC46C, + 55005 - 44032: 0xC46D, + 55006 - 44032: 0xC46E, + 55007 - 44032: 0xC46F, + 55008 - 44032: 0xC8CC, + 55009 - 44032: 0xC470, + 55010 - 44032: 0xC471, + 55011 - 44032: 0xC472, + 55012 - 44032: 0xC8CD, + 55013 - 44032: 0xC473, + 55014 - 44032: 0xC474, + 55015 - 44032: 0xC475, + 55016 - 44032: 0xC8CE, + 55017 - 44032: 0xC476, + 55018 - 44032: 0xC477, + 55019 - 44032: 0xC478, + 55020 - 44032: 0xC479, + 55021 - 44032: 0xC47A, + 55022 - 44032: 0xC481, + 55023 - 44032: 0xC482, + 55024 - 44032: 0xC8CF, + 55025 - 44032: 0xC483, + 55026 - 44032: 0xC484, + 55027 - 44032: 0xC485, + 55028 - 44032: 0xC486, + 55029 - 44032: 0xC8D0, + 55030 - 44032: 0xC487, + 55031 - 44032: 0xC488, + 55032 - 44032: 0xC489, + 55033 - 44032: 0xC48A, + 55034 - 44032: 0xC48B, + 55035 - 44032: 0xC48C, + 55036 - 44032: 0xC8D1, + 55037 - 44032: 0xC8D2, + 55038 - 44032: 0xC48D, + 55039 - 44032: 0xC48E, + 55040 - 44032: 0xC8D3, + 55041 - 44032: 0xC48F, + 55042 - 44032: 0xC490, + 55043 - 44032: 0xC491, + 55044 - 44032: 0xC8D4, + 55045 - 44032: 0xC492, + 55046 - 44032: 0xC493, + 55047 - 44032: 0xC494, + 55048 - 44032: 0xC495, + 55049 - 44032: 0xC496, + 55050 - 44032: 0xC497, + 55051 - 44032: 0xC498, + 55052 - 44032: 0xC499, + 55053 - 44032: 0xC49A, + 55054 - 44032: 0xC49B, + 55055 - 44032: 0xC49C, + 55056 - 44032: 0xC49D, + 55057 - 44032: 0xC8D5, + 55058 - 44032: 0xC49E, + 55059 - 44032: 0xC49F, + 55060 - 44032: 0xC4A0, + 55061 - 44032: 0xC541, + 55062 - 44032: 0xC542, + 55063 - 44032: 0xC543, + 55064 - 44032: 0xC8D6, + 55065 - 44032: 0xC8D7, + 55066 - 44032: 0xC544, + 55067 - 44032: 0xC545, + 55068 - 44032: 0xC8D8, + 55069 - 44032: 0xC546, + 55070 - 44032: 0xC547, + 55071 - 44032: 0xC548, + 55072 - 44032: 0xC8D9, + 55073 - 44032: 0xC549, + 55074 - 44032: 0xC54A, + 55075 - 44032: 0xC54B, + 55076 - 44032: 0xC54C, + 55077 - 44032: 0xC54D, + 55078 - 44032: 0xC54E, + 55079 - 44032: 0xC54F, + 55080 - 44032: 0xC8DA, + 55081 - 44032: 0xC8DB, + 55082 - 44032: 0xC550, + 55083 - 44032: 0xC8DC, + 55084 - 44032: 0xC551, + 55085 - 44032: 0xC8DD, + 55086 - 44032: 0xC552, + 55087 - 44032: 0xC553, + 55088 - 44032: 0xC554, + 55089 - 44032: 0xC555, + 55090 - 44032: 0xC556, + 55091 - 44032: 0xC557, + 55092 - 44032: 0xC8DE, + 55093 - 44032: 0xC8DF, + 55094 - 44032: 0xC558, + 55095 - 44032: 0xC559, + 55096 - 44032: 0xC8E0, + 55097 - 44032: 0xC55A, + 55098 - 44032: 0xC561, + 55099 - 44032: 0xC562, + 55100 - 44032: 0xC8E1, + 55101 - 44032: 0xC563, + 55102 - 44032: 0xC564, + 55103 - 44032: 0xC565, + 55104 - 44032: 0xC566, + 55105 - 44032: 0xC567, + 55106 - 44032: 0xC568, + 55107 - 44032: 0xC569, + 55108 - 44032: 0xC8E2, + 55109 - 44032: 0xC56A, + 55110 - 44032: 0xC56B, + 55111 - 44032: 0xC8E3, + 55112 - 44032: 0xC56C, + 55113 - 44032: 0xC8E4, + 55114 - 44032: 0xC56D, + 55115 - 44032: 0xC56E, + 55116 - 44032: 0xC56F, + 55117 - 44032: 0xC570, + 55118 - 44032: 0xC571, + 55119 - 44032: 0xC572, + 55120 - 44032: 0xC8E5, + 55121 - 44032: 0xC8E6, + 55122 - 44032: 0xC573, + 55123 - 44032: 0xC574, + 55124 - 44032: 0xC8E7, + 55125 - 44032: 0xC575, + 55126 - 44032: 0xC8E8, + 55127 - 44032: 0xC8E9, + 55128 - 44032: 0xC8EA, + 55129 - 44032: 0xC8EB, + 55130 - 44032: 0xC576, + 55131 - 44032: 0xC577, + 55132 - 44032: 0xC578, + 55133 - 44032: 0xC579, + 55134 - 44032: 0xC57A, + 55135 - 44032: 0xC581, + 55136 - 44032: 0xC8EC, + 55137 - 44032: 0xC8ED, + 55138 - 44032: 0xC582, + 55139 - 44032: 0xC8EE, + 55140 - 44032: 0xC583, + 55141 - 44032: 0xC8EF, + 55142 - 44032: 0xC584, + 55143 - 44032: 0xC585, + 55144 - 44032: 0xC586, + 55145 - 44032: 0xC8F0, + 55146 - 44032: 0xC587, + 55147 - 44032: 0xC588, + 55148 - 44032: 0xC8F1, + 55149 - 44032: 0xC589, + 55150 - 44032: 0xC58A, + 55151 - 44032: 0xC58B, + 55152 - 44032: 0xC8F2, + 55153 - 44032: 0xC58C, + 55154 - 44032: 0xC58D, + 55155 - 44032: 0xC58E, + 55156 - 44032: 0xC8F3, + 55157 - 44032: 0xC58F, + 55158 - 44032: 0xC590, + 55159 - 44032: 0xC591, + 55160 - 44032: 0xC592, + 55161 - 44032: 0xC593, + 55162 - 44032: 0xC594, + 55163 - 44032: 0xC595, + 55164 - 44032: 0xC8F4, + 55165 - 44032: 0xC8F5, + 55166 - 44032: 0xC596, + 55167 - 44032: 0xC597, + 55168 - 44032: 0xC598, + 55169 - 44032: 0xC8F6, + 55170 - 44032: 0xC599, + 55171 - 44032: 0xC59A, + 55172 - 44032: 0xC59B, + 55173 - 44032: 0xC59C, + 55174 - 44032: 0xC59D, + 55175 - 44032: 0xC59E, + 55176 - 44032: 0xC8F7, + 55177 - 44032: 0xC8F8, + 55178 - 44032: 0xC59F, + 55179 - 44032: 0xC5A0, + 55180 - 44032: 0xC8F9, + 55181 - 44032: 0xC641, + 55182 - 44032: 0xC642, + 55183 - 44032: 0xC643, + 55184 - 44032: 0xC8FA, + 55185 - 44032: 0xC644, + 55186 - 44032: 0xC645, + 55187 - 44032: 0xC646, + 55188 - 44032: 0xC647, + 55189 - 44032: 0xC648, + 55190 - 44032: 0xC649, + 55191 - 44032: 0xC64A, + 55192 - 44032: 0xC8FB, + 55193 - 44032: 0xC8FC, + 55194 - 44032: 0xC64B, + 55195 - 44032: 0xC8FD, + 55196 - 44032: 0xC64C, + 55197 - 44032: 0xC8FE, + 55198 - 44032: 0xC64D, + 55199 - 44032: 0xC64E, + 55200 - 44032: 0xC64F, + 55201 - 44032: 0xC650, + 55202 - 44032: 0xC651, + 55203 - 44032: 0xC652, +} + +const encode2Low, encode2High = 8213, 9838 + +var encode2 = [...]uint16{ + 8213 - 8213: 0xA1AA, + 8216 - 8213: 0xA1AE, + 8217 - 8213: 0xA1AF, + 8220 - 8213: 0xA1B0, + 8221 - 8213: 0xA1B1, + 8224 - 8213: 0xA2D3, + 8225 - 8213: 0xA2D4, + 8229 - 8213: 0xA1A5, + 8230 - 8213: 0xA1A6, + 8240 - 8213: 0xA2B6, + 8242 - 8213: 0xA1C7, + 8243 - 8213: 0xA1C8, + 8251 - 8213: 0xA1D8, + 8308 - 8213: 0xA9F9, + 8319 - 8213: 0xA9FA, + 8321 - 8213: 0xA9FB, + 8322 - 8213: 0xA9FC, + 8323 - 8213: 0xA9FD, + 8324 - 8213: 0xA9FE, + 8364 - 8213: 0xA2E6, + 8451 - 8213: 0xA1C9, + 8457 - 8213: 0xA2B5, + 8467 - 8213: 0xA7A4, + 8470 - 8213: 0xA2E0, + 8481 - 8213: 0xA2E5, + 8482 - 8213: 0xA2E2, + 8486 - 8213: 0xA7D9, + 8491 - 8213: 0xA1CA, + 8531 - 8213: 0xA8F7, + 8532 - 8213: 0xA8F8, + 8539 - 8213: 0xA8FB, + 8540 - 8213: 0xA8FC, + 8541 - 8213: 0xA8FD, + 8542 - 8213: 0xA8FE, + 8544 - 8213: 0xA5B0, + 8545 - 8213: 0xA5B1, + 8546 - 8213: 0xA5B2, + 8547 - 8213: 0xA5B3, + 8548 - 8213: 0xA5B4, + 8549 - 8213: 0xA5B5, + 8550 - 8213: 0xA5B6, + 8551 - 8213: 0xA5B7, + 8552 - 8213: 0xA5B8, + 8553 - 8213: 0xA5B9, + 8560 - 8213: 0xA5A1, + 8561 - 8213: 0xA5A2, + 8562 - 8213: 0xA5A3, + 8563 - 8213: 0xA5A4, + 8564 - 8213: 0xA5A5, + 8565 - 8213: 0xA5A6, + 8566 - 8213: 0xA5A7, + 8567 - 8213: 0xA5A8, + 8568 - 8213: 0xA5A9, + 8569 - 8213: 0xA5AA, + 8592 - 8213: 0xA1E7, + 8593 - 8213: 0xA1E8, + 8594 - 8213: 0xA1E6, + 8595 - 8213: 0xA1E9, + 8596 - 8213: 0xA1EA, + 8597 - 8213: 0xA2D5, + 8598 - 8213: 0xA2D8, + 8599 - 8213: 0xA2D6, + 8600 - 8213: 0xA2D9, + 8601 - 8213: 0xA2D7, + 8658 - 8213: 0xA2A1, + 8660 - 8213: 0xA2A2, + 8704 - 8213: 0xA2A3, + 8706 - 8213: 0xA1D3, + 8707 - 8213: 0xA2A4, + 8711 - 8213: 0xA1D4, + 8712 - 8213: 0xA1F4, + 8715 - 8213: 0xA1F5, + 8719 - 8213: 0xA2B3, + 8721 - 8213: 0xA2B2, + 8730 - 8213: 0xA1EE, + 8733 - 8213: 0xA1F0, + 8734 - 8213: 0xA1C4, + 8736 - 8213: 0xA1D0, + 8741 - 8213: 0xA1AB, + 8743 - 8213: 0xA1FC, + 8744 - 8213: 0xA1FD, + 8745 - 8213: 0xA1FB, + 8746 - 8213: 0xA1FA, + 8747 - 8213: 0xA1F2, + 8748 - 8213: 0xA1F3, + 8750 - 8213: 0xA2B1, + 8756 - 8213: 0xA1C5, + 8757 - 8213: 0xA1F1, + 8764 - 8213: 0xA1AD, + 8765 - 8213: 0xA1EF, + 8786 - 8213: 0xA1D6, + 8800 - 8213: 0xA1C1, + 8801 - 8213: 0xA1D5, + 8804 - 8213: 0xA1C2, + 8805 - 8213: 0xA1C3, + 8810 - 8213: 0xA1EC, + 8811 - 8213: 0xA1ED, + 8834 - 8213: 0xA1F8, + 8835 - 8213: 0xA1F9, + 8838 - 8213: 0xA1F6, + 8839 - 8213: 0xA1F7, + 8857 - 8213: 0xA2C1, + 8869 - 8213: 0xA1D1, + 8978 - 8213: 0xA1D2, + 9312 - 8213: 0xA8E7, + 9313 - 8213: 0xA8E8, + 9314 - 8213: 0xA8E9, + 9315 - 8213: 0xA8EA, + 9316 - 8213: 0xA8EB, + 9317 - 8213: 0xA8EC, + 9318 - 8213: 0xA8ED, + 9319 - 8213: 0xA8EE, + 9320 - 8213: 0xA8EF, + 9321 - 8213: 0xA8F0, + 9322 - 8213: 0xA8F1, + 9323 - 8213: 0xA8F2, + 9324 - 8213: 0xA8F3, + 9325 - 8213: 0xA8F4, + 9326 - 8213: 0xA8F5, + 9332 - 8213: 0xA9E7, + 9333 - 8213: 0xA9E8, + 9334 - 8213: 0xA9E9, + 9335 - 8213: 0xA9EA, + 9336 - 8213: 0xA9EB, + 9337 - 8213: 0xA9EC, + 9338 - 8213: 0xA9ED, + 9339 - 8213: 0xA9EE, + 9340 - 8213: 0xA9EF, + 9341 - 8213: 0xA9F0, + 9342 - 8213: 0xA9F1, + 9343 - 8213: 0xA9F2, + 9344 - 8213: 0xA9F3, + 9345 - 8213: 0xA9F4, + 9346 - 8213: 0xA9F5, + 9372 - 8213: 0xA9CD, + 9373 - 8213: 0xA9CE, + 9374 - 8213: 0xA9CF, + 9375 - 8213: 0xA9D0, + 9376 - 8213: 0xA9D1, + 9377 - 8213: 0xA9D2, + 9378 - 8213: 0xA9D3, + 9379 - 8213: 0xA9D4, + 9380 - 8213: 0xA9D5, + 9381 - 8213: 0xA9D6, + 9382 - 8213: 0xA9D7, + 9383 - 8213: 0xA9D8, + 9384 - 8213: 0xA9D9, + 9385 - 8213: 0xA9DA, + 9386 - 8213: 0xA9DB, + 9387 - 8213: 0xA9DC, + 9388 - 8213: 0xA9DD, + 9389 - 8213: 0xA9DE, + 9390 - 8213: 0xA9DF, + 9391 - 8213: 0xA9E0, + 9392 - 8213: 0xA9E1, + 9393 - 8213: 0xA9E2, + 9394 - 8213: 0xA9E3, + 9395 - 8213: 0xA9E4, + 9396 - 8213: 0xA9E5, + 9397 - 8213: 0xA9E6, + 9424 - 8213: 0xA8CD, + 9425 - 8213: 0xA8CE, + 9426 - 8213: 0xA8CF, + 9427 - 8213: 0xA8D0, + 9428 - 8213: 0xA8D1, + 9429 - 8213: 0xA8D2, + 9430 - 8213: 0xA8D3, + 9431 - 8213: 0xA8D4, + 9432 - 8213: 0xA8D5, + 9433 - 8213: 0xA8D6, + 9434 - 8213: 0xA8D7, + 9435 - 8213: 0xA8D8, + 9436 - 8213: 0xA8D9, + 9437 - 8213: 0xA8DA, + 9438 - 8213: 0xA8DB, + 9439 - 8213: 0xA8DC, + 9440 - 8213: 0xA8DD, + 9441 - 8213: 0xA8DE, + 9442 - 8213: 0xA8DF, + 9443 - 8213: 0xA8E0, + 9444 - 8213: 0xA8E1, + 9445 - 8213: 0xA8E2, + 9446 - 8213: 0xA8E3, + 9447 - 8213: 0xA8E4, + 9448 - 8213: 0xA8E5, + 9449 - 8213: 0xA8E6, + 9472 - 8213: 0xA6A1, + 9473 - 8213: 0xA6AC, + 9474 - 8213: 0xA6A2, + 9475 - 8213: 0xA6AD, + 9484 - 8213: 0xA6A3, + 9485 - 8213: 0xA6C8, + 9486 - 8213: 0xA6C7, + 9487 - 8213: 0xA6AE, + 9488 - 8213: 0xA6A4, + 9489 - 8213: 0xA6C2, + 9490 - 8213: 0xA6C1, + 9491 - 8213: 0xA6AF, + 9492 - 8213: 0xA6A6, + 9493 - 8213: 0xA6C6, + 9494 - 8213: 0xA6C5, + 9495 - 8213: 0xA6B1, + 9496 - 8213: 0xA6A5, + 9497 - 8213: 0xA6C4, + 9498 - 8213: 0xA6C3, + 9499 - 8213: 0xA6B0, + 9500 - 8213: 0xA6A7, + 9501 - 8213: 0xA6BC, + 9502 - 8213: 0xA6C9, + 9503 - 8213: 0xA6CA, + 9504 - 8213: 0xA6B7, + 9505 - 8213: 0xA6CB, + 9506 - 8213: 0xA6CC, + 9507 - 8213: 0xA6B2, + 9508 - 8213: 0xA6A9, + 9509 - 8213: 0xA6BE, + 9510 - 8213: 0xA6CD, + 9511 - 8213: 0xA6CE, + 9512 - 8213: 0xA6B9, + 9513 - 8213: 0xA6CF, + 9514 - 8213: 0xA6D0, + 9515 - 8213: 0xA6B4, + 9516 - 8213: 0xA6A8, + 9517 - 8213: 0xA6D1, + 9518 - 8213: 0xA6D2, + 9519 - 8213: 0xA6B8, + 9520 - 8213: 0xA6BD, + 9521 - 8213: 0xA6D3, + 9522 - 8213: 0xA6D4, + 9523 - 8213: 0xA6B3, + 9524 - 8213: 0xA6AA, + 9525 - 8213: 0xA6D5, + 9526 - 8213: 0xA6D6, + 9527 - 8213: 0xA6BA, + 9528 - 8213: 0xA6BF, + 9529 - 8213: 0xA6D7, + 9530 - 8213: 0xA6D8, + 9531 - 8213: 0xA6B5, + 9532 - 8213: 0xA6AB, + 9533 - 8213: 0xA6D9, + 9534 - 8213: 0xA6DA, + 9535 - 8213: 0xA6BB, + 9536 - 8213: 0xA6DB, + 9537 - 8213: 0xA6DC, + 9538 - 8213: 0xA6C0, + 9539 - 8213: 0xA6DD, + 9540 - 8213: 0xA6DE, + 9541 - 8213: 0xA6DF, + 9542 - 8213: 0xA6E0, + 9543 - 8213: 0xA6E1, + 9544 - 8213: 0xA6E2, + 9545 - 8213: 0xA6E3, + 9546 - 8213: 0xA6E4, + 9547 - 8213: 0xA6B6, + 9618 - 8213: 0xA2C6, + 9632 - 8213: 0xA1E1, + 9633 - 8213: 0xA1E0, + 9635 - 8213: 0xA2C3, + 9636 - 8213: 0xA2C7, + 9637 - 8213: 0xA2C8, + 9638 - 8213: 0xA2CB, + 9639 - 8213: 0xA2CA, + 9640 - 8213: 0xA2C9, + 9641 - 8213: 0xA2CC, + 9650 - 8213: 0xA1E3, + 9651 - 8213: 0xA1E2, + 9654 - 8213: 0xA2BA, + 9655 - 8213: 0xA2B9, + 9660 - 8213: 0xA1E5, + 9661 - 8213: 0xA1E4, + 9664 - 8213: 0xA2B8, + 9665 - 8213: 0xA2B7, + 9670 - 8213: 0xA1DF, + 9671 - 8213: 0xA1DE, + 9672 - 8213: 0xA2C2, + 9675 - 8213: 0xA1DB, + 9678 - 8213: 0xA1DD, + 9679 - 8213: 0xA1DC, + 9680 - 8213: 0xA2C4, + 9681 - 8213: 0xA2C5, + 9733 - 8213: 0xA1DA, + 9734 - 8213: 0xA1D9, + 9742 - 8213: 0xA2CF, + 9743 - 8213: 0xA2CE, + 9756 - 8213: 0xA2D0, + 9758 - 8213: 0xA2D1, + 9792 - 8213: 0xA1CF, + 9794 - 8213: 0xA1CE, + 9824 - 8213: 0xA2BC, + 9825 - 8213: 0xA2BD, + 9827 - 8213: 0xA2C0, + 9828 - 8213: 0xA2BB, + 9829 - 8213: 0xA2BE, + 9831 - 8213: 0xA2BF, + 9832 - 8213: 0xA2CD, + 9833 - 8213: 0xA2DB, + 9834 - 8213: 0xA2DC, + 9836 - 8213: 0xA2DD, + 9837 - 8213: 0xA2DA, +} + +const encode3Low, encode3High = 12288, 13278 + +var encode3 = [...]uint16{ + 12288 - 12288: 0xA1A1, + 12289 - 12288: 0xA1A2, + 12290 - 12288: 0xA1A3, + 12291 - 12288: 0xA1A8, + 12296 - 12288: 0xA1B4, + 12297 - 12288: 0xA1B5, + 12298 - 12288: 0xA1B6, + 12299 - 12288: 0xA1B7, + 12300 - 12288: 0xA1B8, + 12301 - 12288: 0xA1B9, + 12302 - 12288: 0xA1BA, + 12303 - 12288: 0xA1BB, + 12304 - 12288: 0xA1BC, + 12305 - 12288: 0xA1BD, + 12307 - 12288: 0xA1EB, + 12308 - 12288: 0xA1B2, + 12309 - 12288: 0xA1B3, + 12353 - 12288: 0xAAA1, + 12354 - 12288: 0xAAA2, + 12355 - 12288: 0xAAA3, + 12356 - 12288: 0xAAA4, + 12357 - 12288: 0xAAA5, + 12358 - 12288: 0xAAA6, + 12359 - 12288: 0xAAA7, + 12360 - 12288: 0xAAA8, + 12361 - 12288: 0xAAA9, + 12362 - 12288: 0xAAAA, + 12363 - 12288: 0xAAAB, + 12364 - 12288: 0xAAAC, + 12365 - 12288: 0xAAAD, + 12366 - 12288: 0xAAAE, + 12367 - 12288: 0xAAAF, + 12368 - 12288: 0xAAB0, + 12369 - 12288: 0xAAB1, + 12370 - 12288: 0xAAB2, + 12371 - 12288: 0xAAB3, + 12372 - 12288: 0xAAB4, + 12373 - 12288: 0xAAB5, + 12374 - 12288: 0xAAB6, + 12375 - 12288: 0xAAB7, + 12376 - 12288: 0xAAB8, + 12377 - 12288: 0xAAB9, + 12378 - 12288: 0xAABA, + 12379 - 12288: 0xAABB, + 12380 - 12288: 0xAABC, + 12381 - 12288: 0xAABD, + 12382 - 12288: 0xAABE, + 12383 - 12288: 0xAABF, + 12384 - 12288: 0xAAC0, + 12385 - 12288: 0xAAC1, + 12386 - 12288: 0xAAC2, + 12387 - 12288: 0xAAC3, + 12388 - 12288: 0xAAC4, + 12389 - 12288: 0xAAC5, + 12390 - 12288: 0xAAC6, + 12391 - 12288: 0xAAC7, + 12392 - 12288: 0xAAC8, + 12393 - 12288: 0xAAC9, + 12394 - 12288: 0xAACA, + 12395 - 12288: 0xAACB, + 12396 - 12288: 0xAACC, + 12397 - 12288: 0xAACD, + 12398 - 12288: 0xAACE, + 12399 - 12288: 0xAACF, + 12400 - 12288: 0xAAD0, + 12401 - 12288: 0xAAD1, + 12402 - 12288: 0xAAD2, + 12403 - 12288: 0xAAD3, + 12404 - 12288: 0xAAD4, + 12405 - 12288: 0xAAD5, + 12406 - 12288: 0xAAD6, + 12407 - 12288: 0xAAD7, + 12408 - 12288: 0xAAD8, + 12409 - 12288: 0xAAD9, + 12410 - 12288: 0xAADA, + 12411 - 12288: 0xAADB, + 12412 - 12288: 0xAADC, + 12413 - 12288: 0xAADD, + 12414 - 12288: 0xAADE, + 12415 - 12288: 0xAADF, + 12416 - 12288: 0xAAE0, + 12417 - 12288: 0xAAE1, + 12418 - 12288: 0xAAE2, + 12419 - 12288: 0xAAE3, + 12420 - 12288: 0xAAE4, + 12421 - 12288: 0xAAE5, + 12422 - 12288: 0xAAE6, + 12423 - 12288: 0xAAE7, + 12424 - 12288: 0xAAE8, + 12425 - 12288: 0xAAE9, + 12426 - 12288: 0xAAEA, + 12427 - 12288: 0xAAEB, + 12428 - 12288: 0xAAEC, + 12429 - 12288: 0xAAED, + 12430 - 12288: 0xAAEE, + 12431 - 12288: 0xAAEF, + 12432 - 12288: 0xAAF0, + 12433 - 12288: 0xAAF1, + 12434 - 12288: 0xAAF2, + 12435 - 12288: 0xAAF3, + 12449 - 12288: 0xABA1, + 12450 - 12288: 0xABA2, + 12451 - 12288: 0xABA3, + 12452 - 12288: 0xABA4, + 12453 - 12288: 0xABA5, + 12454 - 12288: 0xABA6, + 12455 - 12288: 0xABA7, + 12456 - 12288: 0xABA8, + 12457 - 12288: 0xABA9, + 12458 - 12288: 0xABAA, + 12459 - 12288: 0xABAB, + 12460 - 12288: 0xABAC, + 12461 - 12288: 0xABAD, + 12462 - 12288: 0xABAE, + 12463 - 12288: 0xABAF, + 12464 - 12288: 0xABB0, + 12465 - 12288: 0xABB1, + 12466 - 12288: 0xABB2, + 12467 - 12288: 0xABB3, + 12468 - 12288: 0xABB4, + 12469 - 12288: 0xABB5, + 12470 - 12288: 0xABB6, + 12471 - 12288: 0xABB7, + 12472 - 12288: 0xABB8, + 12473 - 12288: 0xABB9, + 12474 - 12288: 0xABBA, + 12475 - 12288: 0xABBB, + 12476 - 12288: 0xABBC, + 12477 - 12288: 0xABBD, + 12478 - 12288: 0xABBE, + 12479 - 12288: 0xABBF, + 12480 - 12288: 0xABC0, + 12481 - 12288: 0xABC1, + 12482 - 12288: 0xABC2, + 12483 - 12288: 0xABC3, + 12484 - 12288: 0xABC4, + 12485 - 12288: 0xABC5, + 12486 - 12288: 0xABC6, + 12487 - 12288: 0xABC7, + 12488 - 12288: 0xABC8, + 12489 - 12288: 0xABC9, + 12490 - 12288: 0xABCA, + 12491 - 12288: 0xABCB, + 12492 - 12288: 0xABCC, + 12493 - 12288: 0xABCD, + 12494 - 12288: 0xABCE, + 12495 - 12288: 0xABCF, + 12496 - 12288: 0xABD0, + 12497 - 12288: 0xABD1, + 12498 - 12288: 0xABD2, + 12499 - 12288: 0xABD3, + 12500 - 12288: 0xABD4, + 12501 - 12288: 0xABD5, + 12502 - 12288: 0xABD6, + 12503 - 12288: 0xABD7, + 12504 - 12288: 0xABD8, + 12505 - 12288: 0xABD9, + 12506 - 12288: 0xABDA, + 12507 - 12288: 0xABDB, + 12508 - 12288: 0xABDC, + 12509 - 12288: 0xABDD, + 12510 - 12288: 0xABDE, + 12511 - 12288: 0xABDF, + 12512 - 12288: 0xABE0, + 12513 - 12288: 0xABE1, + 12514 - 12288: 0xABE2, + 12515 - 12288: 0xABE3, + 12516 - 12288: 0xABE4, + 12517 - 12288: 0xABE5, + 12518 - 12288: 0xABE6, + 12519 - 12288: 0xABE7, + 12520 - 12288: 0xABE8, + 12521 - 12288: 0xABE9, + 12522 - 12288: 0xABEA, + 12523 - 12288: 0xABEB, + 12524 - 12288: 0xABEC, + 12525 - 12288: 0xABED, + 12526 - 12288: 0xABEE, + 12527 - 12288: 0xABEF, + 12528 - 12288: 0xABF0, + 12529 - 12288: 0xABF1, + 12530 - 12288: 0xABF2, + 12531 - 12288: 0xABF3, + 12532 - 12288: 0xABF4, + 12533 - 12288: 0xABF5, + 12534 - 12288: 0xABF6, + 12593 - 12288: 0xA4A1, + 12594 - 12288: 0xA4A2, + 12595 - 12288: 0xA4A3, + 12596 - 12288: 0xA4A4, + 12597 - 12288: 0xA4A5, + 12598 - 12288: 0xA4A6, + 12599 - 12288: 0xA4A7, + 12600 - 12288: 0xA4A8, + 12601 - 12288: 0xA4A9, + 12602 - 12288: 0xA4AA, + 12603 - 12288: 0xA4AB, + 12604 - 12288: 0xA4AC, + 12605 - 12288: 0xA4AD, + 12606 - 12288: 0xA4AE, + 12607 - 12288: 0xA4AF, + 12608 - 12288: 0xA4B0, + 12609 - 12288: 0xA4B1, + 12610 - 12288: 0xA4B2, + 12611 - 12288: 0xA4B3, + 12612 - 12288: 0xA4B4, + 12613 - 12288: 0xA4B5, + 12614 - 12288: 0xA4B6, + 12615 - 12288: 0xA4B7, + 12616 - 12288: 0xA4B8, + 12617 - 12288: 0xA4B9, + 12618 - 12288: 0xA4BA, + 12619 - 12288: 0xA4BB, + 12620 - 12288: 0xA4BC, + 12621 - 12288: 0xA4BD, + 12622 - 12288: 0xA4BE, + 12623 - 12288: 0xA4BF, + 12624 - 12288: 0xA4C0, + 12625 - 12288: 0xA4C1, + 12626 - 12288: 0xA4C2, + 12627 - 12288: 0xA4C3, + 12628 - 12288: 0xA4C4, + 12629 - 12288: 0xA4C5, + 12630 - 12288: 0xA4C6, + 12631 - 12288: 0xA4C7, + 12632 - 12288: 0xA4C8, + 12633 - 12288: 0xA4C9, + 12634 - 12288: 0xA4CA, + 12635 - 12288: 0xA4CB, + 12636 - 12288: 0xA4CC, + 12637 - 12288: 0xA4CD, + 12638 - 12288: 0xA4CE, + 12639 - 12288: 0xA4CF, + 12640 - 12288: 0xA4D0, + 12641 - 12288: 0xA4D1, + 12642 - 12288: 0xA4D2, + 12643 - 12288: 0xA4D3, + 12644 - 12288: 0xA4D4, + 12645 - 12288: 0xA4D5, + 12646 - 12288: 0xA4D6, + 12647 - 12288: 0xA4D7, + 12648 - 12288: 0xA4D8, + 12649 - 12288: 0xA4D9, + 12650 - 12288: 0xA4DA, + 12651 - 12288: 0xA4DB, + 12652 - 12288: 0xA4DC, + 12653 - 12288: 0xA4DD, + 12654 - 12288: 0xA4DE, + 12655 - 12288: 0xA4DF, + 12656 - 12288: 0xA4E0, + 12657 - 12288: 0xA4E1, + 12658 - 12288: 0xA4E2, + 12659 - 12288: 0xA4E3, + 12660 - 12288: 0xA4E4, + 12661 - 12288: 0xA4E5, + 12662 - 12288: 0xA4E6, + 12663 - 12288: 0xA4E7, + 12664 - 12288: 0xA4E8, + 12665 - 12288: 0xA4E9, + 12666 - 12288: 0xA4EA, + 12667 - 12288: 0xA4EB, + 12668 - 12288: 0xA4EC, + 12669 - 12288: 0xA4ED, + 12670 - 12288: 0xA4EE, + 12671 - 12288: 0xA4EF, + 12672 - 12288: 0xA4F0, + 12673 - 12288: 0xA4F1, + 12674 - 12288: 0xA4F2, + 12675 - 12288: 0xA4F3, + 12676 - 12288: 0xA4F4, + 12677 - 12288: 0xA4F5, + 12678 - 12288: 0xA4F6, + 12679 - 12288: 0xA4F7, + 12680 - 12288: 0xA4F8, + 12681 - 12288: 0xA4F9, + 12682 - 12288: 0xA4FA, + 12683 - 12288: 0xA4FB, + 12684 - 12288: 0xA4FC, + 12685 - 12288: 0xA4FD, + 12686 - 12288: 0xA4FE, + 12800 - 12288: 0xA9B1, + 12801 - 12288: 0xA9B2, + 12802 - 12288: 0xA9B3, + 12803 - 12288: 0xA9B4, + 12804 - 12288: 0xA9B5, + 12805 - 12288: 0xA9B6, + 12806 - 12288: 0xA9B7, + 12807 - 12288: 0xA9B8, + 12808 - 12288: 0xA9B9, + 12809 - 12288: 0xA9BA, + 12810 - 12288: 0xA9BB, + 12811 - 12288: 0xA9BC, + 12812 - 12288: 0xA9BD, + 12813 - 12288: 0xA9BE, + 12814 - 12288: 0xA9BF, + 12815 - 12288: 0xA9C0, + 12816 - 12288: 0xA9C1, + 12817 - 12288: 0xA9C2, + 12818 - 12288: 0xA9C3, + 12819 - 12288: 0xA9C4, + 12820 - 12288: 0xA9C5, + 12821 - 12288: 0xA9C6, + 12822 - 12288: 0xA9C7, + 12823 - 12288: 0xA9C8, + 12824 - 12288: 0xA9C9, + 12825 - 12288: 0xA9CA, + 12826 - 12288: 0xA9CB, + 12827 - 12288: 0xA9CC, + 12828 - 12288: 0xA2DF, + 12896 - 12288: 0xA8B1, + 12897 - 12288: 0xA8B2, + 12898 - 12288: 0xA8B3, + 12899 - 12288: 0xA8B4, + 12900 - 12288: 0xA8B5, + 12901 - 12288: 0xA8B6, + 12902 - 12288: 0xA8B7, + 12903 - 12288: 0xA8B8, + 12904 - 12288: 0xA8B9, + 12905 - 12288: 0xA8BA, + 12906 - 12288: 0xA8BB, + 12907 - 12288: 0xA8BC, + 12908 - 12288: 0xA8BD, + 12909 - 12288: 0xA8BE, + 12910 - 12288: 0xA8BF, + 12911 - 12288: 0xA8C0, + 12912 - 12288: 0xA8C1, + 12913 - 12288: 0xA8C2, + 12914 - 12288: 0xA8C3, + 12915 - 12288: 0xA8C4, + 12916 - 12288: 0xA8C5, + 12917 - 12288: 0xA8C6, + 12918 - 12288: 0xA8C7, + 12919 - 12288: 0xA8C8, + 12920 - 12288: 0xA8C9, + 12921 - 12288: 0xA8CA, + 12922 - 12288: 0xA8CB, + 12923 - 12288: 0xA8CC, + 12927 - 12288: 0xA2DE, + 13184 - 12288: 0xA7C9, + 13185 - 12288: 0xA7CA, + 13186 - 12288: 0xA7CB, + 13187 - 12288: 0xA7CC, + 13188 - 12288: 0xA7CD, + 13192 - 12288: 0xA7BA, + 13193 - 12288: 0xA7BB, + 13194 - 12288: 0xA7DC, + 13195 - 12288: 0xA7DD, + 13196 - 12288: 0xA7DE, + 13197 - 12288: 0xA7B6, + 13198 - 12288: 0xA7B7, + 13199 - 12288: 0xA7B8, + 13200 - 12288: 0xA7D4, + 13201 - 12288: 0xA7D5, + 13202 - 12288: 0xA7D6, + 13203 - 12288: 0xA7D7, + 13204 - 12288: 0xA7D8, + 13205 - 12288: 0xA7A1, + 13206 - 12288: 0xA7A2, + 13207 - 12288: 0xA7A3, + 13208 - 12288: 0xA7A5, + 13209 - 12288: 0xA7AB, + 13210 - 12288: 0xA7AC, + 13211 - 12288: 0xA7AD, + 13212 - 12288: 0xA7AE, + 13213 - 12288: 0xA7AF, + 13214 - 12288: 0xA7B0, + 13215 - 12288: 0xA7B1, + 13216 - 12288: 0xA7B2, + 13217 - 12288: 0xA7B3, + 13218 - 12288: 0xA7B4, + 13219 - 12288: 0xA7A7, + 13220 - 12288: 0xA7A8, + 13221 - 12288: 0xA7A9, + 13222 - 12288: 0xA7AA, + 13223 - 12288: 0xA7BD, + 13224 - 12288: 0xA7BE, + 13225 - 12288: 0xA7E5, + 13226 - 12288: 0xA7E6, + 13227 - 12288: 0xA7E7, + 13228 - 12288: 0xA7E8, + 13229 - 12288: 0xA7E1, + 13230 - 12288: 0xA7E2, + 13231 - 12288: 0xA7E3, + 13232 - 12288: 0xA7BF, + 13233 - 12288: 0xA7C0, + 13234 - 12288: 0xA7C1, + 13235 - 12288: 0xA7C2, + 13236 - 12288: 0xA7C3, + 13237 - 12288: 0xA7C4, + 13238 - 12288: 0xA7C5, + 13239 - 12288: 0xA7C6, + 13240 - 12288: 0xA7C7, + 13241 - 12288: 0xA7C8, + 13242 - 12288: 0xA7CE, + 13243 - 12288: 0xA7CF, + 13244 - 12288: 0xA7D0, + 13245 - 12288: 0xA7D1, + 13246 - 12288: 0xA7D2, + 13247 - 12288: 0xA7D3, + 13248 - 12288: 0xA7DA, + 13249 - 12288: 0xA7DB, + 13250 - 12288: 0xA2E3, + 13251 - 12288: 0xA7EC, + 13252 - 12288: 0xA7A6, + 13253 - 12288: 0xA7E0, + 13254 - 12288: 0xA7EF, + 13255 - 12288: 0xA2E1, + 13256 - 12288: 0xA7BC, + 13257 - 12288: 0xA7ED, + 13258 - 12288: 0xA7B5, + 13263 - 12288: 0xA7B9, + 13264 - 12288: 0xA7EA, + 13267 - 12288: 0xA7EB, + 13270 - 12288: 0xA7DF, + 13272 - 12288: 0xA2E4, + 13275 - 12288: 0xA7E4, + 13276 - 12288: 0xA7EE, + 13277 - 12288: 0xA7E9, +} + +const encode4Low, encode4High = 161, 1106 + +var encode4 = [...]uint16{ + 161 - 161: 0xA2AE, + 164 - 161: 0xA2B4, + 167 - 161: 0xA1D7, + 168 - 161: 0xA1A7, + 170 - 161: 0xA8A3, + 173 - 161: 0xA1A9, + 174 - 161: 0xA2E7, + 176 - 161: 0xA1C6, + 177 - 161: 0xA1BE, + 178 - 161: 0xA9F7, + 179 - 161: 0xA9F8, + 180 - 161: 0xA2A5, + 182 - 161: 0xA2D2, + 183 - 161: 0xA1A4, + 184 - 161: 0xA2AC, + 185 - 161: 0xA9F6, + 186 - 161: 0xA8AC, + 188 - 161: 0xA8F9, + 189 - 161: 0xA8F6, + 190 - 161: 0xA8FA, + 191 - 161: 0xA2AF, + 198 - 161: 0xA8A1, + 208 - 161: 0xA8A2, + 215 - 161: 0xA1BF, + 216 - 161: 0xA8AA, + 222 - 161: 0xA8AD, + 223 - 161: 0xA9AC, + 230 - 161: 0xA9A1, + 240 - 161: 0xA9A3, + 247 - 161: 0xA1C0, + 248 - 161: 0xA9AA, + 254 - 161: 0xA9AD, + 273 - 161: 0xA9A2, + 294 - 161: 0xA8A4, + 295 - 161: 0xA9A4, + 305 - 161: 0xA9A5, + 306 - 161: 0xA8A6, + 307 - 161: 0xA9A6, + 312 - 161: 0xA9A7, + 319 - 161: 0xA8A8, + 320 - 161: 0xA9A8, + 321 - 161: 0xA8A9, + 322 - 161: 0xA9A9, + 329 - 161: 0xA9B0, + 330 - 161: 0xA8AF, + 331 - 161: 0xA9AF, + 338 - 161: 0xA8AB, + 339 - 161: 0xA9AB, + 358 - 161: 0xA8AE, + 359 - 161: 0xA9AE, + 711 - 161: 0xA2A7, + 720 - 161: 0xA2B0, + 728 - 161: 0xA2A8, + 729 - 161: 0xA2AB, + 730 - 161: 0xA2AA, + 731 - 161: 0xA2AD, + 733 - 161: 0xA2A9, + 913 - 161: 0xA5C1, + 914 - 161: 0xA5C2, + 915 - 161: 0xA5C3, + 916 - 161: 0xA5C4, + 917 - 161: 0xA5C5, + 918 - 161: 0xA5C6, + 919 - 161: 0xA5C7, + 920 - 161: 0xA5C8, + 921 - 161: 0xA5C9, + 922 - 161: 0xA5CA, + 923 - 161: 0xA5CB, + 924 - 161: 0xA5CC, + 925 - 161: 0xA5CD, + 926 - 161: 0xA5CE, + 927 - 161: 0xA5CF, + 928 - 161: 0xA5D0, + 929 - 161: 0xA5D1, + 931 - 161: 0xA5D2, + 932 - 161: 0xA5D3, + 933 - 161: 0xA5D4, + 934 - 161: 0xA5D5, + 935 - 161: 0xA5D6, + 936 - 161: 0xA5D7, + 937 - 161: 0xA5D8, + 945 - 161: 0xA5E1, + 946 - 161: 0xA5E2, + 947 - 161: 0xA5E3, + 948 - 161: 0xA5E4, + 949 - 161: 0xA5E5, + 950 - 161: 0xA5E6, + 951 - 161: 0xA5E7, + 952 - 161: 0xA5E8, + 953 - 161: 0xA5E9, + 954 - 161: 0xA5EA, + 955 - 161: 0xA5EB, + 956 - 161: 0xA5EC, + 957 - 161: 0xA5ED, + 958 - 161: 0xA5EE, + 959 - 161: 0xA5EF, + 960 - 161: 0xA5F0, + 961 - 161: 0xA5F1, + 963 - 161: 0xA5F2, + 964 - 161: 0xA5F3, + 965 - 161: 0xA5F4, + 966 - 161: 0xA5F5, + 967 - 161: 0xA5F6, + 968 - 161: 0xA5F7, + 969 - 161: 0xA5F8, + 1025 - 161: 0xACA7, + 1040 - 161: 0xACA1, + 1041 - 161: 0xACA2, + 1042 - 161: 0xACA3, + 1043 - 161: 0xACA4, + 1044 - 161: 0xACA5, + 1045 - 161: 0xACA6, + 1046 - 161: 0xACA8, + 1047 - 161: 0xACA9, + 1048 - 161: 0xACAA, + 1049 - 161: 0xACAB, + 1050 - 161: 0xACAC, + 1051 - 161: 0xACAD, + 1052 - 161: 0xACAE, + 1053 - 161: 0xACAF, + 1054 - 161: 0xACB0, + 1055 - 161: 0xACB1, + 1056 - 161: 0xACB2, + 1057 - 161: 0xACB3, + 1058 - 161: 0xACB4, + 1059 - 161: 0xACB5, + 1060 - 161: 0xACB6, + 1061 - 161: 0xACB7, + 1062 - 161: 0xACB8, + 1063 - 161: 0xACB9, + 1064 - 161: 0xACBA, + 1065 - 161: 0xACBB, + 1066 - 161: 0xACBC, + 1067 - 161: 0xACBD, + 1068 - 161: 0xACBE, + 1069 - 161: 0xACBF, + 1070 - 161: 0xACC0, + 1071 - 161: 0xACC1, + 1072 - 161: 0xACD1, + 1073 - 161: 0xACD2, + 1074 - 161: 0xACD3, + 1075 - 161: 0xACD4, + 1076 - 161: 0xACD5, + 1077 - 161: 0xACD6, + 1078 - 161: 0xACD8, + 1079 - 161: 0xACD9, + 1080 - 161: 0xACDA, + 1081 - 161: 0xACDB, + 1082 - 161: 0xACDC, + 1083 - 161: 0xACDD, + 1084 - 161: 0xACDE, + 1085 - 161: 0xACDF, + 1086 - 161: 0xACE0, + 1087 - 161: 0xACE1, + 1088 - 161: 0xACE2, + 1089 - 161: 0xACE3, + 1090 - 161: 0xACE4, + 1091 - 161: 0xACE5, + 1092 - 161: 0xACE6, + 1093 - 161: 0xACE7, + 1094 - 161: 0xACE8, + 1095 - 161: 0xACE9, + 1096 - 161: 0xACEA, + 1097 - 161: 0xACEB, + 1098 - 161: 0xACEC, + 1099 - 161: 0xACED, + 1100 - 161: 0xACEE, + 1101 - 161: 0xACEF, + 1102 - 161: 0xACF0, + 1103 - 161: 0xACF1, + 1105 - 161: 0xACD7, +} + +const encode5Low, encode5High = 63744, 64012 + +var encode5 = [...]uint16{ + 63744 - 63744: 0xCBD0, + 63745 - 63744: 0xCBD6, + 63746 - 63744: 0xCBE7, + 63747 - 63744: 0xCDCF, + 63748 - 63744: 0xCDE8, + 63749 - 63744: 0xCEAD, + 63750 - 63744: 0xCFFB, + 63751 - 63744: 0xD0A2, + 63752 - 63744: 0xD0B8, + 63753 - 63744: 0xD0D0, + 63754 - 63744: 0xD0DD, + 63755 - 63744: 0xD1D4, + 63756 - 63744: 0xD1D5, + 63757 - 63744: 0xD1D8, + 63758 - 63744: 0xD1DB, + 63759 - 63744: 0xD1DC, + 63760 - 63744: 0xD1DD, + 63761 - 63744: 0xD1DE, + 63762 - 63744: 0xD1DF, + 63763 - 63744: 0xD1E0, + 63764 - 63744: 0xD1E2, + 63765 - 63744: 0xD1E3, + 63766 - 63744: 0xD1E4, + 63767 - 63744: 0xD1E5, + 63768 - 63744: 0xD1E6, + 63769 - 63744: 0xD1E8, + 63770 - 63744: 0xD1E9, + 63771 - 63744: 0xD1EA, + 63772 - 63744: 0xD1EB, + 63773 - 63744: 0xD1ED, + 63774 - 63744: 0xD1EF, + 63775 - 63744: 0xD1F0, + 63776 - 63744: 0xD1F2, + 63777 - 63744: 0xD1F6, + 63778 - 63744: 0xD1FA, + 63779 - 63744: 0xD1FC, + 63780 - 63744: 0xD1FD, + 63781 - 63744: 0xD1FE, + 63782 - 63744: 0xD2A2, + 63783 - 63744: 0xD2A3, + 63784 - 63744: 0xD2A7, + 63785 - 63744: 0xD2A8, + 63786 - 63744: 0xD2A9, + 63787 - 63744: 0xD2AA, + 63788 - 63744: 0xD2AB, + 63789 - 63744: 0xD2AD, + 63790 - 63744: 0xD2B2, + 63791 - 63744: 0xD2BE, + 63792 - 63744: 0xD2C2, + 63793 - 63744: 0xD2C3, + 63794 - 63744: 0xD2C4, + 63795 - 63744: 0xD2C6, + 63796 - 63744: 0xD2C7, + 63797 - 63744: 0xD2C8, + 63798 - 63744: 0xD2C9, + 63799 - 63744: 0xD2CA, + 63800 - 63744: 0xD2CB, + 63801 - 63744: 0xD2CD, + 63802 - 63744: 0xD2CE, + 63803 - 63744: 0xD2CF, + 63804 - 63744: 0xD2D0, + 63805 - 63744: 0xD2D1, + 63806 - 63744: 0xD2D2, + 63807 - 63744: 0xD2D3, + 63808 - 63744: 0xD2D4, + 63809 - 63744: 0xD2D5, + 63810 - 63744: 0xD2D6, + 63811 - 63744: 0xD2D7, + 63812 - 63744: 0xD2D9, + 63813 - 63744: 0xD2DA, + 63814 - 63744: 0xD2DE, + 63815 - 63744: 0xD2DF, + 63816 - 63744: 0xD2E1, + 63817 - 63744: 0xD2E2, + 63818 - 63744: 0xD2E4, + 63819 - 63744: 0xD2E5, + 63820 - 63744: 0xD2E6, + 63821 - 63744: 0xD2E7, + 63822 - 63744: 0xD2E8, + 63823 - 63744: 0xD2E9, + 63824 - 63744: 0xD2EA, + 63825 - 63744: 0xD2EB, + 63826 - 63744: 0xD2F0, + 63827 - 63744: 0xD2F1, + 63828 - 63744: 0xD2F2, + 63829 - 63744: 0xD2F3, + 63830 - 63744: 0xD2F4, + 63831 - 63744: 0xD2F5, + 63832 - 63744: 0xD2F7, + 63833 - 63744: 0xD2F8, + 63834 - 63744: 0xD4E6, + 63835 - 63744: 0xD4FC, + 63836 - 63744: 0xD5A5, + 63837 - 63744: 0xD5AB, + 63838 - 63744: 0xD5AE, + 63839 - 63744: 0xD6B8, + 63840 - 63744: 0xD6CD, + 63841 - 63744: 0xD7CB, + 63842 - 63744: 0xD7E4, + 63843 - 63744: 0xDBC5, + 63844 - 63744: 0xDBE4, + 63845 - 63744: 0xDCA5, + 63846 - 63744: 0xDDA5, + 63847 - 63744: 0xDDD5, + 63848 - 63744: 0xDDF4, + 63849 - 63744: 0xDEFC, + 63850 - 63744: 0xDEFE, + 63851 - 63744: 0xDFB3, + 63852 - 63744: 0xDFE1, + 63853 - 63744: 0xDFE8, + 63854 - 63744: 0xE0F1, + 63855 - 63744: 0xE1AD, + 63856 - 63744: 0xE1ED, + 63857 - 63744: 0xE3F5, + 63858 - 63744: 0xE4A1, + 63859 - 63744: 0xE4A9, + 63860 - 63744: 0xE5AE, + 63861 - 63744: 0xE5B1, + 63862 - 63744: 0xE5B2, + 63863 - 63744: 0xE5B9, + 63864 - 63744: 0xE5BB, + 63865 - 63744: 0xE5BC, + 63866 - 63744: 0xE5C4, + 63867 - 63744: 0xE5CE, + 63868 - 63744: 0xE5D0, + 63869 - 63744: 0xE5D2, + 63870 - 63744: 0xE5D6, + 63871 - 63744: 0xE5FA, + 63872 - 63744: 0xE5FB, + 63873 - 63744: 0xE5FC, + 63874 - 63744: 0xE5FE, + 63875 - 63744: 0xE6A1, + 63876 - 63744: 0xE6A4, + 63877 - 63744: 0xE6A7, + 63878 - 63744: 0xE6AD, + 63879 - 63744: 0xE6AF, + 63880 - 63744: 0xE6B0, + 63881 - 63744: 0xE6B1, + 63882 - 63744: 0xE6B3, + 63883 - 63744: 0xE6B7, + 63884 - 63744: 0xE6B8, + 63885 - 63744: 0xE6BC, + 63886 - 63744: 0xE6C4, + 63887 - 63744: 0xE6C6, + 63888 - 63744: 0xE6C7, + 63889 - 63744: 0xE6CA, + 63890 - 63744: 0xE6D2, + 63891 - 63744: 0xE6D6, + 63892 - 63744: 0xE6D9, + 63893 - 63744: 0xE6DC, + 63894 - 63744: 0xE6DF, + 63895 - 63744: 0xE6E1, + 63896 - 63744: 0xE6E4, + 63897 - 63744: 0xE6E5, + 63898 - 63744: 0xE6E6, + 63899 - 63744: 0xE6E8, + 63900 - 63744: 0xE6EA, + 63901 - 63744: 0xE6EB, + 63902 - 63744: 0xE6EC, + 63903 - 63744: 0xE6EF, + 63904 - 63744: 0xE6F1, + 63905 - 63744: 0xE6F2, + 63906 - 63744: 0xE6F5, + 63907 - 63744: 0xE6F6, + 63908 - 63744: 0xE6F7, + 63909 - 63744: 0xE6F9, + 63910 - 63744: 0xE7A1, + 63911 - 63744: 0xE7A6, + 63912 - 63744: 0xE7A9, + 63913 - 63744: 0xE7AA, + 63914 - 63744: 0xE7AC, + 63915 - 63744: 0xE7AD, + 63916 - 63744: 0xE7B0, + 63917 - 63744: 0xE7BF, + 63918 - 63744: 0xE7C1, + 63919 - 63744: 0xE7C6, + 63920 - 63744: 0xE7C7, + 63921 - 63744: 0xE7CB, + 63922 - 63744: 0xE7CD, + 63923 - 63744: 0xE7CF, + 63924 - 63744: 0xE7D0, + 63925 - 63744: 0xE7D3, + 63926 - 63744: 0xE7DF, + 63927 - 63744: 0xE7E4, + 63928 - 63744: 0xE7E6, + 63929 - 63744: 0xE7F7, + 63930 - 63744: 0xE8E7, + 63931 - 63744: 0xE8E8, + 63932 - 63744: 0xE8F0, + 63933 - 63744: 0xE8F1, + 63934 - 63744: 0xE8F7, + 63935 - 63744: 0xE8F9, + 63936 - 63744: 0xE8FB, + 63937 - 63744: 0xE8FE, + 63938 - 63744: 0xE9A7, + 63939 - 63744: 0xE9AC, + 63940 - 63744: 0xE9CC, + 63941 - 63744: 0xE9F7, + 63942 - 63744: 0xEAC1, + 63943 - 63744: 0xEAE5, + 63944 - 63744: 0xEAF4, + 63945 - 63744: 0xEAF7, + 63946 - 63744: 0xEAFC, + 63947 - 63744: 0xEAFE, + 63948 - 63744: 0xEBA4, + 63949 - 63744: 0xEBA7, + 63950 - 63744: 0xEBA9, + 63951 - 63744: 0xEBAA, + 63952 - 63744: 0xEBBA, + 63953 - 63744: 0xEBBB, + 63954 - 63744: 0xEBBD, + 63955 - 63744: 0xEBC1, + 63956 - 63744: 0xEBC2, + 63957 - 63744: 0xEBC6, + 63958 - 63744: 0xEBC7, + 63959 - 63744: 0xEBCC, + 63960 - 63744: 0xEBCF, + 63961 - 63744: 0xEBD0, + 63962 - 63744: 0xEBD1, + 63963 - 63744: 0xEBD2, + 63964 - 63744: 0xEBD8, + 63965 - 63744: 0xECA6, + 63966 - 63744: 0xECA7, + 63967 - 63744: 0xECAA, + 63968 - 63744: 0xECAF, + 63969 - 63744: 0xECB0, + 63970 - 63744: 0xECB1, + 63971 - 63744: 0xECB2, + 63972 - 63744: 0xECB5, + 63973 - 63744: 0xECB8, + 63974 - 63744: 0xECBA, + 63975 - 63744: 0xECC0, + 63976 - 63744: 0xECC1, + 63977 - 63744: 0xECC5, + 63978 - 63744: 0xECC6, + 63979 - 63744: 0xECC9, + 63980 - 63744: 0xECCA, + 63981 - 63744: 0xECD5, + 63982 - 63744: 0xECDD, + 63983 - 63744: 0xECDE, + 63984 - 63744: 0xECE1, + 63985 - 63744: 0xECE4, + 63986 - 63744: 0xECE7, + 63987 - 63744: 0xECE8, + 63988 - 63744: 0xECF7, + 63989 - 63744: 0xECF8, + 63990 - 63744: 0xECFA, + 63991 - 63744: 0xEDA1, + 63992 - 63744: 0xEDA2, + 63993 - 63744: 0xEDA3, + 63994 - 63744: 0xEDEE, + 63995 - 63744: 0xEEDB, + 63996 - 63744: 0xF2BD, + 63997 - 63744: 0xF2FA, + 63998 - 63744: 0xF3B1, + 63999 - 63744: 0xF4A7, + 64000 - 63744: 0xF4EE, + 64001 - 63744: 0xF6F4, + 64002 - 63744: 0xF6F6, + 64003 - 63744: 0xF7B8, + 64004 - 63744: 0xF7C8, + 64005 - 63744: 0xF7D3, + 64006 - 63744: 0xF8DB, + 64007 - 63744: 0xF8F0, + 64008 - 63744: 0xFAA1, + 64009 - 63744: 0xFAA2, + 64010 - 63744: 0xFAE6, + 64011 - 63744: 0xFCA9, +} + +const encode6Low, encode6High = 65281, 65511 + +var encode6 = [...]uint16{ + 65281 - 65281: 0xA3A1, + 65282 - 65281: 0xA3A2, + 65283 - 65281: 0xA3A3, + 65284 - 65281: 0xA3A4, + 65285 - 65281: 0xA3A5, + 65286 - 65281: 0xA3A6, + 65287 - 65281: 0xA3A7, + 65288 - 65281: 0xA3A8, + 65289 - 65281: 0xA3A9, + 65290 - 65281: 0xA3AA, + 65291 - 65281: 0xA3AB, + 65292 - 65281: 0xA3AC, + 65293 - 65281: 0xA3AD, + 65294 - 65281: 0xA3AE, + 65295 - 65281: 0xA3AF, + 65296 - 65281: 0xA3B0, + 65297 - 65281: 0xA3B1, + 65298 - 65281: 0xA3B2, + 65299 - 65281: 0xA3B3, + 65300 - 65281: 0xA3B4, + 65301 - 65281: 0xA3B5, + 65302 - 65281: 0xA3B6, + 65303 - 65281: 0xA3B7, + 65304 - 65281: 0xA3B8, + 65305 - 65281: 0xA3B9, + 65306 - 65281: 0xA3BA, + 65307 - 65281: 0xA3BB, + 65308 - 65281: 0xA3BC, + 65309 - 65281: 0xA3BD, + 65310 - 65281: 0xA3BE, + 65311 - 65281: 0xA3BF, + 65312 - 65281: 0xA3C0, + 65313 - 65281: 0xA3C1, + 65314 - 65281: 0xA3C2, + 65315 - 65281: 0xA3C3, + 65316 - 65281: 0xA3C4, + 65317 - 65281: 0xA3C5, + 65318 - 65281: 0xA3C6, + 65319 - 65281: 0xA3C7, + 65320 - 65281: 0xA3C8, + 65321 - 65281: 0xA3C9, + 65322 - 65281: 0xA3CA, + 65323 - 65281: 0xA3CB, + 65324 - 65281: 0xA3CC, + 65325 - 65281: 0xA3CD, + 65326 - 65281: 0xA3CE, + 65327 - 65281: 0xA3CF, + 65328 - 65281: 0xA3D0, + 65329 - 65281: 0xA3D1, + 65330 - 65281: 0xA3D2, + 65331 - 65281: 0xA3D3, + 65332 - 65281: 0xA3D4, + 65333 - 65281: 0xA3D5, + 65334 - 65281: 0xA3D6, + 65335 - 65281: 0xA3D7, + 65336 - 65281: 0xA3D8, + 65337 - 65281: 0xA3D9, + 65338 - 65281: 0xA3DA, + 65339 - 65281: 0xA3DB, + 65340 - 65281: 0xA1AC, + 65341 - 65281: 0xA3DD, + 65342 - 65281: 0xA3DE, + 65343 - 65281: 0xA3DF, + 65344 - 65281: 0xA3E0, + 65345 - 65281: 0xA3E1, + 65346 - 65281: 0xA3E2, + 65347 - 65281: 0xA3E3, + 65348 - 65281: 0xA3E4, + 65349 - 65281: 0xA3E5, + 65350 - 65281: 0xA3E6, + 65351 - 65281: 0xA3E7, + 65352 - 65281: 0xA3E8, + 65353 - 65281: 0xA3E9, + 65354 - 65281: 0xA3EA, + 65355 - 65281: 0xA3EB, + 65356 - 65281: 0xA3EC, + 65357 - 65281: 0xA3ED, + 65358 - 65281: 0xA3EE, + 65359 - 65281: 0xA3EF, + 65360 - 65281: 0xA3F0, + 65361 - 65281: 0xA3F1, + 65362 - 65281: 0xA3F2, + 65363 - 65281: 0xA3F3, + 65364 - 65281: 0xA3F4, + 65365 - 65281: 0xA3F5, + 65366 - 65281: 0xA3F6, + 65367 - 65281: 0xA3F7, + 65368 - 65281: 0xA3F8, + 65369 - 65281: 0xA3F9, + 65370 - 65281: 0xA3FA, + 65371 - 65281: 0xA3FB, + 65372 - 65281: 0xA3FC, + 65373 - 65281: 0xA3FD, + 65374 - 65281: 0xA2A6, + 65504 - 65281: 0xA1CB, + 65505 - 65281: 0xA1CC, + 65506 - 65281: 0xA1FE, + 65507 - 65281: 0xA3FE, + 65509 - 65281: 0xA1CD, + 65510 - 65281: 0xA3DC, +} diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go new file mode 100644 index 0000000..5ecc526 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go @@ -0,0 +1,12 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package simplifiedchinese + +import ( + "golang.org/x/text/encoding" +) + +// All is a list of all defined encodings in this package. +var All = []encoding.Encoding{GB18030, GBK, HZGB2312} diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/all_test.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/all_test.go new file mode 100644 index 0000000..b369da2 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/all_test.go @@ -0,0 +1,143 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package simplifiedchinese + +import ( + "strings" + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/enctest" + "golang.org/x/text/transform" +) + +func dec(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Decode", e.NewDecoder(), nil +} +func enc(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Encode", e.NewEncoder(), internal.ErrASCIIReplacement +} + +func TestNonRepertoire(t *testing.T) { + // Pick n large enough to overflow the destination buffer of transform.String. + const n = 10000 + testCases := []struct { + init func(e encoding.Encoding) (string, transform.Transformer, error) + e encoding.Encoding + src, want string + }{ + {dec, GBK, "a\xfe\xfeb", "a\ufffdb"}, + {dec, HZGB2312, "~{z~", "\ufffd"}, + + {enc, GBK, "갂", ""}, + {enc, GBK, "a갂", "a"}, + {enc, GBK, "\u4e02갂", "\x81@"}, + + {enc, HZGB2312, "갂", ""}, + {enc, HZGB2312, "a갂", "a"}, + {enc, HZGB2312, "\u6cf5갂", "~{1C~}"}, + + {dec, GB18030, "\x80", "€"}, + {dec, GB18030, "\x81", "\ufffd"}, + {dec, GB18030, "\x81\x20", "\ufffd "}, + {dec, GB18030, "\xfe\xfe", "\ufffd"}, + {dec, GB18030, "\xfe\xff", "\ufffd\ufffd"}, + {dec, GB18030, "\xfe\x30", "\ufffd0"}, + {dec, GB18030, "\xfe\x30\x30 ", "\ufffd00 "}, + {dec, GB18030, "\xfe\x30\xff ", "\ufffd0\ufffd "}, + {dec, GB18030, "\xfe\x30\x81\x21", "\ufffd0\ufffd!"}, + + {dec, GB18030, strings.Repeat("\xfe\x30", n), strings.Repeat("\ufffd0", n)}, + + {dec, HZGB2312, "~/", "\ufffd"}, + {dec, HZGB2312, "~{a\x80", "\ufffd"}, + {dec, HZGB2312, "~{a\x80", "\ufffd"}, + {dec, HZGB2312, "~{" + strings.Repeat("z~", n), strings.Repeat("\ufffd", n)}, + {dec, HZGB2312, "~{" + strings.Repeat("\xfe\x30", n), strings.Repeat("\ufffd", n*2)}, + } + for _, tc := range testCases { + dir, tr, wantErr := tc.init(tc.e) + + dst, _, err := transform.String(tr, tc.src) + if err != wantErr { + t.Errorf("%s %v(%q): got %v; want %v", dir, tc.e, tc.src, err, wantErr) + } + if got := string(dst); got != tc.want { + t.Errorf("%s %v(%q):\ngot %q\nwant %q", dir, tc.e, tc.src, got, tc.want) + } + } +} + +func TestBasics(t *testing.T) { + // The encoded forms can be verified by the iconv program: + // $ echo 月日は百代 | iconv -f UTF-8 -t SHIFT-JIS | xxd + testCases := []struct { + e encoding.Encoding + encPrefix string + encoded string + utf8 string + }{{ + // "\u0081\u00de\u00df\u00e0\u00e1\u00e2\u00e3\uffff\U00010000" is a + // nonsense string that contains GB18030 encodable codepoints of which + // only U+00E0 and U+00E1 are GBK encodable. + // + // "A\u3000\u554a\u4e02\u4e90\u72dc\u7349\u02ca\u2588Z€" is a nonsense + // string that contains ASCII and GBK encodable codepoints from Levels + // 1-5 as well as the Euro sign. + // + // "A\u43f0\u4c32\U00027267\u3000\U0002910d\u79d4Z€" is a nonsense string + // that contains ASCII and Big5 encodable codepoints from the Basic + // Multilingual Plane and the Supplementary Ideographic Plane as well as + // the Euro sign. + // + // "花间一壶酒,独酌无相亲。" (simplified) and + // "花間一壺酒,獨酌無相親。" (traditional) + // are from the 8th century poem "Yuè Xià Dú Zhuó". + e: GB18030, + encoded: "\x81\x30\x81\x31\x81\x30\x89\x37\x81\x30\x89\x38\xa8\xa4\xa8\xa2" + + "\x81\x30\x89\x39\x81\x30\x8a\x30\x84\x31\xa4\x39\x90\x30\x81\x30", + utf8: "\u0081\u00de\u00df\u00e0\u00e1\u00e2\u00e3\uffff\U00010000", + }, { + e: GB18030, + encoded: "\xbb\xa8\xbc\xe4\xd2\xbb\xba\xf8\xbe\xc6\xa3\xac\xb6\xc0\xd7\xc3" + + "\xce\xde\xcf\xe0\xc7\xd7\xa1\xa3", + utf8: "花间一壶酒,独酌无相亲。", + }, { + e: GBK, + encoded: "A\xa1\xa1\xb0\xa1\x81\x40\x81\x80\xaa\x40\xaa\x80\xa8\x40\xa8\x80Z\x80", + utf8: "A\u3000\u554a\u4e02\u4e90\u72dc\u7349\u02ca\u2588Z€", + }, { + e: GBK, + encoded: "\xbb\xa8\xbc\xe4\xd2\xbb\xba\xf8\xbe\xc6\xa3\xac\xb6\xc0\xd7\xc3" + + "\xce\xde\xcf\xe0\xc7\xd7\xa1\xa3", + utf8: "花间一壶酒,独酌无相亲。", + }, { + e: HZGB2312, + encoded: "A~{\x21\x21~~\x30\x21~}Z~~", + utf8: "A\u3000~\u554aZ~", + }, { + e: HZGB2312, + encPrefix: "~{", + encoded: ";(<dR;:x>F#,6@WCN^O`GW!#", + utf8: "花间一壶酒,独酌无相亲。", + }} + + for _, tc := range testCases { + enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, tc.encPrefix, "") + } +} + +func TestFiles(t *testing.T) { + enctest.TestFile(t, GB18030) + enctest.TestFile(t, GBK) + enctest.TestFile(t, HZGB2312) +} + +func BenchmarkEncoding(b *testing.B) { + enctest.Benchmark(b, GB18030) + enctest.Benchmark(b, GBK) + enctest.Benchmark(b, HZGB2312) +} diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go new file mode 100644 index 0000000..b89c45b --- /dev/null +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go @@ -0,0 +1,269 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package simplifiedchinese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +var ( + // GB18030 is the GB18030 encoding. + GB18030 encoding.Encoding = &gbk18030 + // GBK is the GBK encoding. It encodes an extension of the GB2312 character set + // and is also known as Code Page 936. + GBK encoding.Encoding = &gbk +) + +var gbk = internal.Encoding{ + &internal.SimpleEncoding{ + gbkDecoder{gb18030: false}, + gbkEncoder{gb18030: false}, + }, + "GBK", + identifier.GBK, +} + +var gbk18030 = internal.Encoding{ + &internal.SimpleEncoding{ + gbkDecoder{gb18030: true}, + gbkEncoder{gb18030: true}, + }, + "GB18030", + identifier.GB18030, +} + +type gbkDecoder struct { + transform.NopResetter + gb18030 bool +} + +func (d gbkDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + // Microsoft's Code Page 936 extends GBK 1.0 to encode the euro sign U+20AC + // as 0x80. The HTML5 specification at http://encoding.spec.whatwg.org/#gbk + // says to treat "gbk" as Code Page 936. + case c0 == 0x80: + r, size = '€', 1 + + case c0 < 0xff: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + goto write + } + c1 := src[nSrc+1] + switch { + case 0x40 <= c1 && c1 < 0x7f: + c1 -= 0x40 + case 0x80 <= c1 && c1 < 0xff: + c1 -= 0x41 + case d.gb18030 && 0x30 <= c1 && c1 < 0x40: + if nSrc+3 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + // The second byte here is always ASCII, so we can set size + // to 1 in all cases. + r, size = utf8.RuneError, 1 + goto write + } + c2 := src[nSrc+2] + if c2 < 0x81 || 0xff <= c2 { + r, size = utf8.RuneError, 1 + goto write + } + c3 := src[nSrc+3] + if c3 < 0x30 || 0x3a <= c3 { + r, size = utf8.RuneError, 1 + goto write + } + size = 4 + r = ((rune(c0-0x81)*10+rune(c1-0x30))*126+rune(c2-0x81))*10 + rune(c3-0x30) + if r < 39420 { + i, j := 0, len(gb18030) + for i < j { + h := i + (j-i)/2 + if r >= rune(gb18030[h][0]) { + i = h + 1 + } else { + j = h + } + } + dec := &gb18030[i-1] + r += rune(dec[1]) - rune(dec[0]) + goto write + } + r -= 189000 + if 0 <= r && r < 0x100000 { + r += 0x10000 + } else { + r, size = utf8.RuneError, 1 + } + goto write + default: + r, size = utf8.RuneError, 1 + goto write + } + r, size = '\ufffd', 2 + if i := int(c0-0x81)*190 + int(c1); i < len(decode) { + r = rune(decode[i]) + if r == 0 { + r = '\ufffd' + } + } + + default: + r, size = utf8.RuneError, 1 + } + + write: + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type gbkEncoder struct { + transform.NopResetter + gb18030 bool +} + +func (e gbkEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, r2, size := rune(0), rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r2 = rune(encode0[r-encode0Low]); r2 != 0 { + goto write2 + } + case encode1Low <= r && r < encode1High: + // Microsoft's Code Page 936 extends GBK 1.0 to encode the euro sign U+20AC + // as 0x80. The HTML5 specification at http://encoding.spec.whatwg.org/#gbk + // says to treat "gbk" as Code Page 936. + if r == '€' { + r = 0x80 + goto write1 + } + if r2 = rune(encode1[r-encode1Low]); r2 != 0 { + goto write2 + } + case encode2Low <= r && r < encode2High: + if r2 = rune(encode2[r-encode2Low]); r2 != 0 { + goto write2 + } + case encode3Low <= r && r < encode3High: + if r2 = rune(encode3[r-encode3Low]); r2 != 0 { + goto write2 + } + case encode4Low <= r && r < encode4High: + if r2 = rune(encode4[r-encode4Low]); r2 != 0 { + goto write2 + } + } + + if e.gb18030 { + if r < 0x10000 { + i, j := 0, len(gb18030) + for i < j { + h := i + (j-i)/2 + if r >= rune(gb18030[h][1]) { + i = h + 1 + } else { + j = h + } + } + dec := &gb18030[i-1] + r += rune(dec[0]) - rune(dec[1]) + goto write4 + } else if r < 0x110000 { + r += 189000 - 0x10000 + goto write4 + } + } + err = internal.ErrASCIIReplacement + break + } + + write1: + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + write2: + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = uint8(r2 >> 8) + dst[nDst+1] = uint8(r2) + nDst += 2 + continue + + write4: + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+3] = uint8(r%10 + 0x30) + r /= 10 + dst[nDst+2] = uint8(r%126 + 0x81) + r /= 126 + dst[nDst+1] = uint8(r%10 + 0x30) + r /= 10 + dst[nDst+0] = uint8(r + 0x81) + nDst += 4 + continue + } + return nDst, nSrc, err +} + +func init() { + // Check that the hard-coded encode switch covers all tables. + if numEncodeTables != 5 { + panic("bad numEncodeTables") + } +} diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go new file mode 100644 index 0000000..eb3157f --- /dev/null +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go @@ -0,0 +1,245 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package simplifiedchinese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// HZGB2312 is the HZ-GB2312 encoding. +var HZGB2312 encoding.Encoding = &hzGB2312 + +var hzGB2312 = internal.Encoding{ + internal.FuncEncoding{hzGB2312NewDecoder, hzGB2312NewEncoder}, + "HZ-GB2312", + identifier.HZGB2312, +} + +func hzGB2312NewDecoder() transform.Transformer { + return new(hzGB2312Decoder) +} + +func hzGB2312NewEncoder() transform.Transformer { + return new(hzGB2312Encoder) +} + +const ( + asciiState = iota + gbState +) + +type hzGB2312Decoder int + +func (d *hzGB2312Decoder) Reset() { + *d = asciiState +} + +func (d *hzGB2312Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + c0 := src[nSrc] + if c0 >= utf8.RuneSelf { + r, size = utf8.RuneError, 1 + goto write + } + + if c0 == '~' { + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r = utf8.RuneError + goto write + } + size = 2 + switch src[nSrc+1] { + case '{': + *d = gbState + continue + case '}': + *d = asciiState + continue + case '~': + if nDst >= len(dst) { + err = transform.ErrShortDst + break loop + } + dst[nDst] = '~' + nDst++ + continue + case '\n': + continue + default: + r = utf8.RuneError + goto write + } + } + + if *d == asciiState { + r, size = rune(c0), 1 + } else { + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + goto write + } + size = 2 + c1 := src[nSrc+1] + if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 { + // error + } else if i := int(c0-0x01)*190 + int(c1+0x3f); i < len(decode) { + r = rune(decode[i]) + if r != 0 { + goto write + } + } + if c1 > utf8.RuneSelf { + // Be consistent and always treat non-ASCII as a single error. + size = 1 + } + r = utf8.RuneError + } + + write: + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type hzGB2312Encoder int + +func (d *hzGB2312Encoder) Reset() { + *d = asciiState +} + +func (e *hzGB2312Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + if r == '~' { + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = '~' + dst[nDst+1] = '~' + nDst += 2 + continue + } else if *e != asciiState { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + *e = asciiState + dst[nDst+0] = '~' + dst[nDst+1] = '}' + nDst += 2 + } else if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst += 1 + continue + + } + + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r != 0 { + goto writeGB + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r != 0 { + goto writeGB + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r != 0 { + goto writeGB + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r != 0 { + goto writeGB + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r != 0 { + goto writeGB + } + } + + terminateInASCIIState: + // Switch back to ASCII state in case of error so that an ASCII + // replacement character can be written in the correct state. + if *e != asciiState { + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = '~' + dst[nDst+1] = '}' + nDst += 2 + } + err = internal.ErrASCIIReplacement + break + + writeGB: + c0 := uint8(r>>8) - 0x80 + c1 := uint8(r) - 0x80 + if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 { + goto terminateInASCIIState + } + if *e == asciiState { + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + *e = gbState + dst[nDst+0] = '~' + dst[nDst+1] = '{' + nDst += 2 + } else if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = c0 + dst[nDst+1] = c1 + nDst += 2 + continue + } + // TODO: should one always terminate in ASCII state to make it safe to + // concatenate two HZ-GB2312-encoded strings? + return nDst, nSrc, err +} diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go new file mode 100644 index 0000000..55016c7 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go @@ -0,0 +1,161 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This program generates tables.go: +// go run maketables.go | gofmt > tables.go + +import ( + "bufio" + "fmt" + "log" + "net/http" + "sort" + "strings" +) + +func main() { + fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n") + fmt.Printf("// Package simplifiedchinese provides Simplified Chinese encodings such as GBK.\n") + fmt.Printf(`package simplifiedchinese // import "golang.org/x/text/encoding/simplifiedchinese"` + "\n\n") + + printGB18030() + printGBK() +} + +func printGB18030() { + res, err := http.Get("http://encoding.spec.whatwg.org/index-gb18030.txt") + if err != nil { + log.Fatalf("Get: %v", err) + } + defer res.Body.Close() + + fmt.Printf("// gb18030 is the table from http://encoding.spec.whatwg.org/index-gb18030.txt\n") + fmt.Printf("var gb18030 = [...][2]uint16{\n") + scanner := bufio.NewScanner(res.Body) + for scanner.Scan() { + s := strings.TrimSpace(scanner.Text()) + if s == "" || s[0] == '#' { + continue + } + x, y := uint32(0), uint32(0) + if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil { + log.Fatalf("could not parse %q", s) + } + if x < 0x10000 && y < 0x10000 { + fmt.Printf("\t{0x%04x, 0x%04x},\n", x, y) + } + } + fmt.Printf("}\n\n") +} + +func printGBK() { + res, err := http.Get("http://encoding.spec.whatwg.org/index-gbk.txt") + if err != nil { + log.Fatalf("Get: %v", err) + } + defer res.Body.Close() + + mapping := [65536]uint16{} + reverse := [65536]uint16{} + + scanner := bufio.NewScanner(res.Body) + for scanner.Scan() { + s := strings.TrimSpace(scanner.Text()) + if s == "" || s[0] == '#' { + continue + } + x, y := uint16(0), uint16(0) + if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil { + log.Fatalf("could not parse %q", s) + } + if x < 0 || 126*190 <= x { + log.Fatalf("GBK code %d is out of range", x) + } + mapping[x] = y + if reverse[y] == 0 { + c0, c1 := x/190, x%190 + if c1 >= 0x3f { + c1++ + } + reverse[y] = (0x81+c0)<<8 | (0x40 + c1) + } + } + if err := scanner.Err(); err != nil { + log.Fatalf("scanner error: %v", err) + } + + fmt.Printf("// decode is the decoding table from GBK code to Unicode.\n") + fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-gbk.txt\n") + fmt.Printf("var decode = [...]uint16{\n") + for i, v := range mapping { + if v != 0 { + fmt.Printf("\t%d: 0x%04X,\n", i, v) + } + } + fmt.Printf("}\n\n") + + // Any run of at least separation continuous zero entries in the reverse map will + // be a separate encode table. + const separation = 1024 + + intervals := []interval(nil) + low, high := -1, -1 + for i, v := range reverse { + if v == 0 { + continue + } + if low < 0 { + low = i + } else if i-high >= separation { + if high >= 0 { + intervals = append(intervals, interval{low, high}) + } + low = i + } + high = i + 1 + } + if high >= 0 { + intervals = append(intervals, interval{low, high}) + } + sort.Sort(byDecreasingLength(intervals)) + + fmt.Printf("const numEncodeTables = %d\n\n", len(intervals)) + fmt.Printf("// encodeX are the encoding tables from Unicode to GBK code,\n") + fmt.Printf("// sorted by decreasing length.\n") + for i, v := range intervals { + fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high) + } + fmt.Printf("\n") + + for i, v := range intervals { + fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high) + fmt.Printf("var encode%d = [...]uint16{\n", i) + for j := v.low; j < v.high; j++ { + x := reverse[j] + if x == 0 { + continue + } + fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x) + } + fmt.Printf("}\n\n") + } +} + +// interval is a half-open interval [low, high). +type interval struct { + low, high int +} + +func (i interval) len() int { return i.high - i.low } + +// byDecreasingLength sorts intervals by decreasing length. +type byDecreasingLength []interval + +func (b byDecreasingLength) Len() int { return len(b) } +func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() } +func (b byDecreasingLength) Swap(i, j int) { b[i], b[j] = b[j], b[i] } diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go new file mode 100644 index 0000000..415f52a --- /dev/null +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go @@ -0,0 +1,43999 @@ +// generated by go run maketables.go; DO NOT EDIT + +// Package simplifiedchinese provides Simplified Chinese encodings such as GBK. +package simplifiedchinese // import "golang.org/x/text/encoding/simplifiedchinese" + +// gb18030 is the table from http://encoding.spec.whatwg.org/index-gb18030.txt +var gb18030 = [...][2]uint16{ + {0x0000, 0x0080}, + {0x0024, 0x00a5}, + {0x0026, 0x00a9}, + {0x002d, 0x00b2}, + {0x0032, 0x00b8}, + {0x0051, 0x00d8}, + {0x0059, 0x00e2}, + {0x005f, 0x00eb}, + {0x0060, 0x00ee}, + {0x0064, 0x00f4}, + {0x0067, 0x00f8}, + {0x0068, 0x00fb}, + {0x0069, 0x00fd}, + {0x006d, 0x0102}, + {0x007e, 0x0114}, + {0x0085, 0x011c}, + {0x0094, 0x012c}, + {0x00ac, 0x0145}, + {0x00af, 0x0149}, + {0x00b3, 0x014e}, + {0x00d0, 0x016c}, + {0x0132, 0x01cf}, + {0x0133, 0x01d1}, + {0x0134, 0x01d3}, + {0x0135, 0x01d5}, + {0x0136, 0x01d7}, + {0x0137, 0x01d9}, + {0x0138, 0x01db}, + {0x0139, 0x01dd}, + {0x0155, 0x01fa}, + {0x01ac, 0x0252}, + {0x01bb, 0x0262}, + {0x0220, 0x02c8}, + {0x0221, 0x02cc}, + {0x022e, 0x02da}, + {0x02e5, 0x03a2}, + {0x02e6, 0x03aa}, + {0x02ed, 0x03c2}, + {0x02ee, 0x03ca}, + {0x0325, 0x0402}, + {0x0333, 0x0450}, + {0x0334, 0x0452}, + {0x1ef2, 0x2011}, + {0x1ef4, 0x2017}, + {0x1ef5, 0x201a}, + {0x1ef7, 0x201e}, + {0x1efe, 0x2027}, + {0x1f07, 0x2031}, + {0x1f08, 0x2034}, + {0x1f09, 0x2036}, + {0x1f0e, 0x203c}, + {0x1f7e, 0x20ad}, + {0x1fd4, 0x2104}, + {0x1fd5, 0x2106}, + {0x1fd8, 0x210a}, + {0x1fe4, 0x2117}, + {0x1fee, 0x2122}, + {0x202c, 0x216c}, + {0x2030, 0x217a}, + {0x2046, 0x2194}, + {0x2048, 0x219a}, + {0x20b6, 0x2209}, + {0x20bc, 0x2210}, + {0x20bd, 0x2212}, + {0x20c0, 0x2216}, + {0x20c4, 0x221b}, + {0x20c6, 0x2221}, + {0x20c8, 0x2224}, + {0x20c9, 0x2226}, + {0x20ca, 0x222c}, + {0x20cc, 0x222f}, + {0x20d1, 0x2238}, + {0x20d6, 0x223e}, + {0x20e0, 0x2249}, + {0x20e3, 0x224d}, + {0x20e8, 0x2253}, + {0x20f5, 0x2262}, + {0x20f7, 0x2268}, + {0x20fd, 0x2270}, + {0x2122, 0x2296}, + {0x2125, 0x229a}, + {0x2130, 0x22a6}, + {0x2149, 0x22c0}, + {0x219b, 0x2313}, + {0x22e8, 0x246a}, + {0x22f2, 0x249c}, + {0x2356, 0x254c}, + {0x235a, 0x2574}, + {0x2367, 0x2590}, + {0x236a, 0x2596}, + {0x2374, 0x25a2}, + {0x2384, 0x25b4}, + {0x238c, 0x25be}, + {0x2394, 0x25c8}, + {0x2397, 0x25cc}, + {0x2399, 0x25d0}, + {0x23ab, 0x25e6}, + {0x23ca, 0x2607}, + {0x23cc, 0x260a}, + {0x2402, 0x2641}, + {0x2403, 0x2643}, + {0x2c41, 0x2e82}, + {0x2c43, 0x2e85}, + {0x2c46, 0x2e89}, + {0x2c48, 0x2e8d}, + {0x2c52, 0x2e98}, + {0x2c61, 0x2ea8}, + {0x2c63, 0x2eab}, + {0x2c66, 0x2eaf}, + {0x2c6a, 0x2eb4}, + {0x2c6c, 0x2eb8}, + {0x2c6f, 0x2ebc}, + {0x2c7d, 0x2ecb}, + {0x2da2, 0x2ffc}, + {0x2da6, 0x3004}, + {0x2da7, 0x3018}, + {0x2dac, 0x301f}, + {0x2dae, 0x302a}, + {0x2dc2, 0x303f}, + {0x2dc4, 0x3094}, + {0x2dcb, 0x309f}, + {0x2dcd, 0x30f7}, + {0x2dd2, 0x30ff}, + {0x2dd8, 0x312a}, + {0x2ece, 0x322a}, + {0x2ed5, 0x3232}, + {0x2f46, 0x32a4}, + {0x3030, 0x3390}, + {0x303c, 0x339f}, + {0x303e, 0x33a2}, + {0x3060, 0x33c5}, + {0x3069, 0x33cf}, + {0x306b, 0x33d3}, + {0x306d, 0x33d6}, + {0x30de, 0x3448}, + {0x3109, 0x3474}, + {0x3233, 0x359f}, + {0x32a2, 0x360f}, + {0x32ad, 0x361b}, + {0x35aa, 0x3919}, + {0x35ff, 0x396f}, + {0x365f, 0x39d1}, + {0x366d, 0x39e0}, + {0x3700, 0x3a74}, + {0x37da, 0x3b4f}, + {0x38f9, 0x3c6f}, + {0x396a, 0x3ce1}, + {0x3cdf, 0x4057}, + {0x3de7, 0x4160}, + {0x3fbe, 0x4338}, + {0x4032, 0x43ad}, + {0x4036, 0x43b2}, + {0x4061, 0x43de}, + {0x4159, 0x44d7}, + {0x42ce, 0x464d}, + {0x42e2, 0x4662}, + {0x43a3, 0x4724}, + {0x43a8, 0x472a}, + {0x43fa, 0x477d}, + {0x440a, 0x478e}, + {0x45c3, 0x4948}, + {0x45f5, 0x497b}, + {0x45f7, 0x497e}, + {0x45fb, 0x4984}, + {0x45fc, 0x4987}, + {0x4610, 0x499c}, + {0x4613, 0x49a0}, + {0x4629, 0x49b8}, + {0x48e8, 0x4c78}, + {0x490f, 0x4ca4}, + {0x497e, 0x4d1a}, + {0x4a12, 0x4daf}, + {0x4a63, 0x9fa6}, + {0x82bd, 0xe76c}, + {0x82be, 0xe7c8}, + {0x82bf, 0xe7e7}, + {0x82cc, 0xe815}, + {0x82cd, 0xe819}, + {0x82d2, 0xe81f}, + {0x82d9, 0xe827}, + {0x82dd, 0xe82d}, + {0x82e1, 0xe833}, + {0x82e9, 0xe83c}, + {0x82f0, 0xe844}, + {0x8300, 0xe856}, + {0x830e, 0xe865}, + {0x93d5, 0xf92d}, + {0x9421, 0xf97a}, + {0x943c, 0xf996}, + {0x948d, 0xf9e8}, + {0x9496, 0xf9f2}, + {0x94b0, 0xfa10}, + {0x94b1, 0xfa12}, + {0x94b2, 0xfa15}, + {0x94b5, 0xfa19}, + {0x94bb, 0xfa22}, + {0x94bc, 0xfa25}, + {0x94be, 0xfa2a}, + {0x98c4, 0xfe32}, + {0x98c5, 0xfe45}, + {0x98c9, 0xfe53}, + {0x98ca, 0xfe58}, + {0x98cb, 0xfe67}, + {0x98cc, 0xfe6c}, + {0x9961, 0xff5f}, + {0x99e2, 0xffe6}, +} + +// decode is the decoding table from GBK code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-gbk.txt +var decode = [...]uint16{ + 0: 0x4E02, + 1: 0x4E04, + 2: 0x4E05, + 3: 0x4E06, + 4: 0x4E0F, + 5: 0x4E12, + 6: 0x4E17, + 7: 0x4E1F, + 8: 0x4E20, + 9: 0x4E21, + 10: 0x4E23, + 11: 0x4E26, + 12: 0x4E29, + 13: 0x4E2E, + 14: 0x4E2F, + 15: 0x4E31, + 16: 0x4E33, + 17: 0x4E35, + 18: 0x4E37, + 19: 0x4E3C, + 20: 0x4E40, + 21: 0x4E41, + 22: 0x4E42, + 23: 0x4E44, + 24: 0x4E46, + 25: 0x4E4A, + 26: 0x4E51, + 27: 0x4E55, + 28: 0x4E57, + 29: 0x4E5A, + 30: 0x4E5B, + 31: 0x4E62, + 32: 0x4E63, + 33: 0x4E64, + 34: 0x4E65, + 35: 0x4E67, + 36: 0x4E68, + 37: 0x4E6A, + 38: 0x4E6B, + 39: 0x4E6C, + 40: 0x4E6D, + 41: 0x4E6E, + 42: 0x4E6F, + 43: 0x4E72, + 44: 0x4E74, + 45: 0x4E75, + 46: 0x4E76, + 47: 0x4E77, + 48: 0x4E78, + 49: 0x4E79, + 50: 0x4E7A, + 51: 0x4E7B, + 52: 0x4E7C, + 53: 0x4E7D, + 54: 0x4E7F, + 55: 0x4E80, + 56: 0x4E81, + 57: 0x4E82, + 58: 0x4E83, + 59: 0x4E84, + 60: 0x4E85, + 61: 0x4E87, + 62: 0x4E8A, + 63: 0x4E90, + 64: 0x4E96, + 65: 0x4E97, + 66: 0x4E99, + 67: 0x4E9C, + 68: 0x4E9D, + 69: 0x4E9E, + 70: 0x4EA3, + 71: 0x4EAA, + 72: 0x4EAF, + 73: 0x4EB0, + 74: 0x4EB1, + 75: 0x4EB4, + 76: 0x4EB6, + 77: 0x4EB7, + 78: 0x4EB8, + 79: 0x4EB9, + 80: 0x4EBC, + 81: 0x4EBD, + 82: 0x4EBE, + 83: 0x4EC8, + 84: 0x4ECC, + 85: 0x4ECF, + 86: 0x4ED0, + 87: 0x4ED2, + 88: 0x4EDA, + 89: 0x4EDB, + 90: 0x4EDC, + 91: 0x4EE0, + 92: 0x4EE2, + 93: 0x4EE6, + 94: 0x4EE7, + 95: 0x4EE9, + 96: 0x4EED, + 97: 0x4EEE, + 98: 0x4EEF, + 99: 0x4EF1, + 100: 0x4EF4, + 101: 0x4EF8, + 102: 0x4EF9, + 103: 0x4EFA, + 104: 0x4EFC, + 105: 0x4EFE, + 106: 0x4F00, + 107: 0x4F02, + 108: 0x4F03, + 109: 0x4F04, + 110: 0x4F05, + 111: 0x4F06, + 112: 0x4F07, + 113: 0x4F08, + 114: 0x4F0B, + 115: 0x4F0C, + 116: 0x4F12, + 117: 0x4F13, + 118: 0x4F14, + 119: 0x4F15, + 120: 0x4F16, + 121: 0x4F1C, + 122: 0x4F1D, + 123: 0x4F21, + 124: 0x4F23, + 125: 0x4F28, + 126: 0x4F29, + 127: 0x4F2C, + 128: 0x4F2D, + 129: 0x4F2E, + 130: 0x4F31, + 131: 0x4F33, + 132: 0x4F35, + 133: 0x4F37, + 134: 0x4F39, + 135: 0x4F3B, + 136: 0x4F3E, + 137: 0x4F3F, + 138: 0x4F40, + 139: 0x4F41, + 140: 0x4F42, + 141: 0x4F44, + 142: 0x4F45, + 143: 0x4F47, + 144: 0x4F48, + 145: 0x4F49, + 146: 0x4F4A, + 147: 0x4F4B, + 148: 0x4F4C, + 149: 0x4F52, + 150: 0x4F54, + 151: 0x4F56, + 152: 0x4F61, + 153: 0x4F62, + 154: 0x4F66, + 155: 0x4F68, + 156: 0x4F6A, + 157: 0x4F6B, + 158: 0x4F6D, + 159: 0x4F6E, + 160: 0x4F71, + 161: 0x4F72, + 162: 0x4F75, + 163: 0x4F77, + 164: 0x4F78, + 165: 0x4F79, + 166: 0x4F7A, + 167: 0x4F7D, + 168: 0x4F80, + 169: 0x4F81, + 170: 0x4F82, + 171: 0x4F85, + 172: 0x4F86, + 173: 0x4F87, + 174: 0x4F8A, + 175: 0x4F8C, + 176: 0x4F8E, + 177: 0x4F90, + 178: 0x4F92, + 179: 0x4F93, + 180: 0x4F95, + 181: 0x4F96, + 182: 0x4F98, + 183: 0x4F99, + 184: 0x4F9A, + 185: 0x4F9C, + 186: 0x4F9E, + 187: 0x4F9F, + 188: 0x4FA1, + 189: 0x4FA2, + 190: 0x4FA4, + 191: 0x4FAB, + 192: 0x4FAD, + 193: 0x4FB0, + 194: 0x4FB1, + 195: 0x4FB2, + 196: 0x4FB3, + 197: 0x4FB4, + 198: 0x4FB6, + 199: 0x4FB7, + 200: 0x4FB8, + 201: 0x4FB9, + 202: 0x4FBA, + 203: 0x4FBB, + 204: 0x4FBC, + 205: 0x4FBD, + 206: 0x4FBE, + 207: 0x4FC0, + 208: 0x4FC1, + 209: 0x4FC2, + 210: 0x4FC6, + 211: 0x4FC7, + 212: 0x4FC8, + 213: 0x4FC9, + 214: 0x4FCB, + 215: 0x4FCC, + 216: 0x4FCD, + 217: 0x4FD2, + 218: 0x4FD3, + 219: 0x4FD4, + 220: 0x4FD5, + 221: 0x4FD6, + 222: 0x4FD9, + 223: 0x4FDB, + 224: 0x4FE0, + 225: 0x4FE2, + 226: 0x4FE4, + 227: 0x4FE5, + 228: 0x4FE7, + 229: 0x4FEB, + 230: 0x4FEC, + 231: 0x4FF0, + 232: 0x4FF2, + 233: 0x4FF4, + 234: 0x4FF5, + 235: 0x4FF6, + 236: 0x4FF7, + 237: 0x4FF9, + 238: 0x4FFB, + 239: 0x4FFC, + 240: 0x4FFD, + 241: 0x4FFF, + 242: 0x5000, + 243: 0x5001, + 244: 0x5002, + 245: 0x5003, + 246: 0x5004, + 247: 0x5005, + 248: 0x5006, + 249: 0x5007, + 250: 0x5008, + 251: 0x5009, + 252: 0x500A, + 253: 0x500B, + 254: 0x500E, + 255: 0x5010, + 256: 0x5011, + 257: 0x5013, + 258: 0x5015, + 259: 0x5016, + 260: 0x5017, + 261: 0x501B, + 262: 0x501D, + 263: 0x501E, + 264: 0x5020, + 265: 0x5022, + 266: 0x5023, + 267: 0x5024, + 268: 0x5027, + 269: 0x502B, + 270: 0x502F, + 271: 0x5030, + 272: 0x5031, + 273: 0x5032, + 274: 0x5033, + 275: 0x5034, + 276: 0x5035, + 277: 0x5036, + 278: 0x5037, + 279: 0x5038, + 280: 0x5039, + 281: 0x503B, + 282: 0x503D, + 283: 0x503F, + 284: 0x5040, + 285: 0x5041, + 286: 0x5042, + 287: 0x5044, + 288: 0x5045, + 289: 0x5046, + 290: 0x5049, + 291: 0x504A, + 292: 0x504B, + 293: 0x504D, + 294: 0x5050, + 295: 0x5051, + 296: 0x5052, + 297: 0x5053, + 298: 0x5054, + 299: 0x5056, + 300: 0x5057, + 301: 0x5058, + 302: 0x5059, + 303: 0x505B, + 304: 0x505D, + 305: 0x505E, + 306: 0x505F, + 307: 0x5060, + 308: 0x5061, + 309: 0x5062, + 310: 0x5063, + 311: 0x5064, + 312: 0x5066, + 313: 0x5067, + 314: 0x5068, + 315: 0x5069, + 316: 0x506A, + 317: 0x506B, + 318: 0x506D, + 319: 0x506E, + 320: 0x506F, + 321: 0x5070, + 322: 0x5071, + 323: 0x5072, + 324: 0x5073, + 325: 0x5074, + 326: 0x5075, + 327: 0x5078, + 328: 0x5079, + 329: 0x507A, + 330: 0x507C, + 331: 0x507D, + 332: 0x5081, + 333: 0x5082, + 334: 0x5083, + 335: 0x5084, + 336: 0x5086, + 337: 0x5087, + 338: 0x5089, + 339: 0x508A, + 340: 0x508B, + 341: 0x508C, + 342: 0x508E, + 343: 0x508F, + 344: 0x5090, + 345: 0x5091, + 346: 0x5092, + 347: 0x5093, + 348: 0x5094, + 349: 0x5095, + 350: 0x5096, + 351: 0x5097, + 352: 0x5098, + 353: 0x5099, + 354: 0x509A, + 355: 0x509B, + 356: 0x509C, + 357: 0x509D, + 358: 0x509E, + 359: 0x509F, + 360: 0x50A0, + 361: 0x50A1, + 362: 0x50A2, + 363: 0x50A4, + 364: 0x50A6, + 365: 0x50AA, + 366: 0x50AB, + 367: 0x50AD, + 368: 0x50AE, + 369: 0x50AF, + 370: 0x50B0, + 371: 0x50B1, + 372: 0x50B3, + 373: 0x50B4, + 374: 0x50B5, + 375: 0x50B6, + 376: 0x50B7, + 377: 0x50B8, + 378: 0x50B9, + 379: 0x50BC, + 380: 0x50BD, + 381: 0x50BE, + 382: 0x50BF, + 383: 0x50C0, + 384: 0x50C1, + 385: 0x50C2, + 386: 0x50C3, + 387: 0x50C4, + 388: 0x50C5, + 389: 0x50C6, + 390: 0x50C7, + 391: 0x50C8, + 392: 0x50C9, + 393: 0x50CA, + 394: 0x50CB, + 395: 0x50CC, + 396: 0x50CD, + 397: 0x50CE, + 398: 0x50D0, + 399: 0x50D1, + 400: 0x50D2, + 401: 0x50D3, + 402: 0x50D4, + 403: 0x50D5, + 404: 0x50D7, + 405: 0x50D8, + 406: 0x50D9, + 407: 0x50DB, + 408: 0x50DC, + 409: 0x50DD, + 410: 0x50DE, + 411: 0x50DF, + 412: 0x50E0, + 413: 0x50E1, + 414: 0x50E2, + 415: 0x50E3, + 416: 0x50E4, + 417: 0x50E5, + 418: 0x50E8, + 419: 0x50E9, + 420: 0x50EA, + 421: 0x50EB, + 422: 0x50EF, + 423: 0x50F0, + 424: 0x50F1, + 425: 0x50F2, + 426: 0x50F4, + 427: 0x50F6, + 428: 0x50F7, + 429: 0x50F8, + 430: 0x50F9, + 431: 0x50FA, + 432: 0x50FC, + 433: 0x50FD, + 434: 0x50FE, + 435: 0x50FF, + 436: 0x5100, + 437: 0x5101, + 438: 0x5102, + 439: 0x5103, + 440: 0x5104, + 441: 0x5105, + 442: 0x5108, + 443: 0x5109, + 444: 0x510A, + 445: 0x510C, + 446: 0x510D, + 447: 0x510E, + 448: 0x510F, + 449: 0x5110, + 450: 0x5111, + 451: 0x5113, + 452: 0x5114, + 453: 0x5115, + 454: 0x5116, + 455: 0x5117, + 456: 0x5118, + 457: 0x5119, + 458: 0x511A, + 459: 0x511B, + 460: 0x511C, + 461: 0x511D, + 462: 0x511E, + 463: 0x511F, + 464: 0x5120, + 465: 0x5122, + 466: 0x5123, + 467: 0x5124, + 468: 0x5125, + 469: 0x5126, + 470: 0x5127, + 471: 0x5128, + 472: 0x5129, + 473: 0x512A, + 474: 0x512B, + 475: 0x512C, + 476: 0x512D, + 477: 0x512E, + 478: 0x512F, + 479: 0x5130, + 480: 0x5131, + 481: 0x5132, + 482: 0x5133, + 483: 0x5134, + 484: 0x5135, + 485: 0x5136, + 486: 0x5137, + 487: 0x5138, + 488: 0x5139, + 489: 0x513A, + 490: 0x513B, + 491: 0x513C, + 492: 0x513D, + 493: 0x513E, + 494: 0x5142, + 495: 0x5147, + 496: 0x514A, + 497: 0x514C, + 498: 0x514E, + 499: 0x514F, + 500: 0x5150, + 501: 0x5152, + 502: 0x5153, + 503: 0x5157, + 504: 0x5158, + 505: 0x5159, + 506: 0x515B, + 507: 0x515D, + 508: 0x515E, + 509: 0x515F, + 510: 0x5160, + 511: 0x5161, + 512: 0x5163, + 513: 0x5164, + 514: 0x5166, + 515: 0x5167, + 516: 0x5169, + 517: 0x516A, + 518: 0x516F, + 519: 0x5172, + 520: 0x517A, + 521: 0x517E, + 522: 0x517F, + 523: 0x5183, + 524: 0x5184, + 525: 0x5186, + 526: 0x5187, + 527: 0x518A, + 528: 0x518B, + 529: 0x518E, + 530: 0x518F, + 531: 0x5190, + 532: 0x5191, + 533: 0x5193, + 534: 0x5194, + 535: 0x5198, + 536: 0x519A, + 537: 0x519D, + 538: 0x519E, + 539: 0x519F, + 540: 0x51A1, + 541: 0x51A3, + 542: 0x51A6, + 543: 0x51A7, + 544: 0x51A8, + 545: 0x51A9, + 546: 0x51AA, + 547: 0x51AD, + 548: 0x51AE, + 549: 0x51B4, + 550: 0x51B8, + 551: 0x51B9, + 552: 0x51BA, + 553: 0x51BE, + 554: 0x51BF, + 555: 0x51C1, + 556: 0x51C2, + 557: 0x51C3, + 558: 0x51C5, + 559: 0x51C8, + 560: 0x51CA, + 561: 0x51CD, + 562: 0x51CE, + 563: 0x51D0, + 564: 0x51D2, + 565: 0x51D3, + 566: 0x51D4, + 567: 0x51D5, + 568: 0x51D6, + 569: 0x51D7, + 570: 0x51D8, + 571: 0x51D9, + 572: 0x51DA, + 573: 0x51DC, + 574: 0x51DE, + 575: 0x51DF, + 576: 0x51E2, + 577: 0x51E3, + 578: 0x51E5, + 579: 0x51E6, + 580: 0x51E7, + 581: 0x51E8, + 582: 0x51E9, + 583: 0x51EA, + 584: 0x51EC, + 585: 0x51EE, + 586: 0x51F1, + 587: 0x51F2, + 588: 0x51F4, + 589: 0x51F7, + 590: 0x51FE, + 591: 0x5204, + 592: 0x5205, + 593: 0x5209, + 594: 0x520B, + 595: 0x520C, + 596: 0x520F, + 597: 0x5210, + 598: 0x5213, + 599: 0x5214, + 600: 0x5215, + 601: 0x521C, + 602: 0x521E, + 603: 0x521F, + 604: 0x5221, + 605: 0x5222, + 606: 0x5223, + 607: 0x5225, + 608: 0x5226, + 609: 0x5227, + 610: 0x522A, + 611: 0x522C, + 612: 0x522F, + 613: 0x5231, + 614: 0x5232, + 615: 0x5234, + 616: 0x5235, + 617: 0x523C, + 618: 0x523E, + 619: 0x5244, + 620: 0x5245, + 621: 0x5246, + 622: 0x5247, + 623: 0x5248, + 624: 0x5249, + 625: 0x524B, + 626: 0x524E, + 627: 0x524F, + 628: 0x5252, + 629: 0x5253, + 630: 0x5255, + 631: 0x5257, + 632: 0x5258, + 633: 0x5259, + 634: 0x525A, + 635: 0x525B, + 636: 0x525D, + 637: 0x525F, + 638: 0x5260, + 639: 0x5262, + 640: 0x5263, + 641: 0x5264, + 642: 0x5266, + 643: 0x5268, + 644: 0x526B, + 645: 0x526C, + 646: 0x526D, + 647: 0x526E, + 648: 0x5270, + 649: 0x5271, + 650: 0x5273, + 651: 0x5274, + 652: 0x5275, + 653: 0x5276, + 654: 0x5277, + 655: 0x5278, + 656: 0x5279, + 657: 0x527A, + 658: 0x527B, + 659: 0x527C, + 660: 0x527E, + 661: 0x5280, + 662: 0x5283, + 663: 0x5284, + 664: 0x5285, + 665: 0x5286, + 666: 0x5287, + 667: 0x5289, + 668: 0x528A, + 669: 0x528B, + 670: 0x528C, + 671: 0x528D, + 672: 0x528E, + 673: 0x528F, + 674: 0x5291, + 675: 0x5292, + 676: 0x5294, + 677: 0x5295, + 678: 0x5296, + 679: 0x5297, + 680: 0x5298, + 681: 0x5299, + 682: 0x529A, + 683: 0x529C, + 684: 0x52A4, + 685: 0x52A5, + 686: 0x52A6, + 687: 0x52A7, + 688: 0x52AE, + 689: 0x52AF, + 690: 0x52B0, + 691: 0x52B4, + 692: 0x52B5, + 693: 0x52B6, + 694: 0x52B7, + 695: 0x52B8, + 696: 0x52B9, + 697: 0x52BA, + 698: 0x52BB, + 699: 0x52BC, + 700: 0x52BD, + 701: 0x52C0, + 702: 0x52C1, + 703: 0x52C2, + 704: 0x52C4, + 705: 0x52C5, + 706: 0x52C6, + 707: 0x52C8, + 708: 0x52CA, + 709: 0x52CC, + 710: 0x52CD, + 711: 0x52CE, + 712: 0x52CF, + 713: 0x52D1, + 714: 0x52D3, + 715: 0x52D4, + 716: 0x52D5, + 717: 0x52D7, + 718: 0x52D9, + 719: 0x52DA, + 720: 0x52DB, + 721: 0x52DC, + 722: 0x52DD, + 723: 0x52DE, + 724: 0x52E0, + 725: 0x52E1, + 726: 0x52E2, + 727: 0x52E3, + 728: 0x52E5, + 729: 0x52E6, + 730: 0x52E7, + 731: 0x52E8, + 732: 0x52E9, + 733: 0x52EA, + 734: 0x52EB, + 735: 0x52EC, + 736: 0x52ED, + 737: 0x52EE, + 738: 0x52EF, + 739: 0x52F1, + 740: 0x52F2, + 741: 0x52F3, + 742: 0x52F4, + 743: 0x52F5, + 744: 0x52F6, + 745: 0x52F7, + 746: 0x52F8, + 747: 0x52FB, + 748: 0x52FC, + 749: 0x52FD, + 750: 0x5301, + 751: 0x5302, + 752: 0x5303, + 753: 0x5304, + 754: 0x5307, + 755: 0x5309, + 756: 0x530A, + 757: 0x530B, + 758: 0x530C, + 759: 0x530E, + 760: 0x5311, + 761: 0x5312, + 762: 0x5313, + 763: 0x5314, + 764: 0x5318, + 765: 0x531B, + 766: 0x531C, + 767: 0x531E, + 768: 0x531F, + 769: 0x5322, + 770: 0x5324, + 771: 0x5325, + 772: 0x5327, + 773: 0x5328, + 774: 0x5329, + 775: 0x532B, + 776: 0x532C, + 777: 0x532D, + 778: 0x532F, + 779: 0x5330, + 780: 0x5331, + 781: 0x5332, + 782: 0x5333, + 783: 0x5334, + 784: 0x5335, + 785: 0x5336, + 786: 0x5337, + 787: 0x5338, + 788: 0x533C, + 789: 0x533D, + 790: 0x5340, + 791: 0x5342, + 792: 0x5344, + 793: 0x5346, + 794: 0x534B, + 795: 0x534C, + 796: 0x534D, + 797: 0x5350, + 798: 0x5354, + 799: 0x5358, + 800: 0x5359, + 801: 0x535B, + 802: 0x535D, + 803: 0x5365, + 804: 0x5368, + 805: 0x536A, + 806: 0x536C, + 807: 0x536D, + 808: 0x5372, + 809: 0x5376, + 810: 0x5379, + 811: 0x537B, + 812: 0x537C, + 813: 0x537D, + 814: 0x537E, + 815: 0x5380, + 816: 0x5381, + 817: 0x5383, + 818: 0x5387, + 819: 0x5388, + 820: 0x538A, + 821: 0x538E, + 822: 0x538F, + 823: 0x5390, + 824: 0x5391, + 825: 0x5392, + 826: 0x5393, + 827: 0x5394, + 828: 0x5396, + 829: 0x5397, + 830: 0x5399, + 831: 0x539B, + 832: 0x539C, + 833: 0x539E, + 834: 0x53A0, + 835: 0x53A1, + 836: 0x53A4, + 837: 0x53A7, + 838: 0x53AA, + 839: 0x53AB, + 840: 0x53AC, + 841: 0x53AD, + 842: 0x53AF, + 843: 0x53B0, + 844: 0x53B1, + 845: 0x53B2, + 846: 0x53B3, + 847: 0x53B4, + 848: 0x53B5, + 849: 0x53B7, + 850: 0x53B8, + 851: 0x53B9, + 852: 0x53BA, + 853: 0x53BC, + 854: 0x53BD, + 855: 0x53BE, + 856: 0x53C0, + 857: 0x53C3, + 858: 0x53C4, + 859: 0x53C5, + 860: 0x53C6, + 861: 0x53C7, + 862: 0x53CE, + 863: 0x53CF, + 864: 0x53D0, + 865: 0x53D2, + 866: 0x53D3, + 867: 0x53D5, + 868: 0x53DA, + 869: 0x53DC, + 870: 0x53DD, + 871: 0x53DE, + 872: 0x53E1, + 873: 0x53E2, + 874: 0x53E7, + 875: 0x53F4, + 876: 0x53FA, + 877: 0x53FE, + 878: 0x53FF, + 879: 0x5400, + 880: 0x5402, + 881: 0x5405, + 882: 0x5407, + 883: 0x540B, + 884: 0x5414, + 885: 0x5418, + 886: 0x5419, + 887: 0x541A, + 888: 0x541C, + 889: 0x5422, + 890: 0x5424, + 891: 0x5425, + 892: 0x542A, + 893: 0x5430, + 894: 0x5433, + 895: 0x5436, + 896: 0x5437, + 897: 0x543A, + 898: 0x543D, + 899: 0x543F, + 900: 0x5441, + 901: 0x5442, + 902: 0x5444, + 903: 0x5445, + 904: 0x5447, + 905: 0x5449, + 906: 0x544C, + 907: 0x544D, + 908: 0x544E, + 909: 0x544F, + 910: 0x5451, + 911: 0x545A, + 912: 0x545D, + 913: 0x545E, + 914: 0x545F, + 915: 0x5460, + 916: 0x5461, + 917: 0x5463, + 918: 0x5465, + 919: 0x5467, + 920: 0x5469, + 921: 0x546A, + 922: 0x546B, + 923: 0x546C, + 924: 0x546D, + 925: 0x546E, + 926: 0x546F, + 927: 0x5470, + 928: 0x5474, + 929: 0x5479, + 930: 0x547A, + 931: 0x547E, + 932: 0x547F, + 933: 0x5481, + 934: 0x5483, + 935: 0x5485, + 936: 0x5487, + 937: 0x5488, + 938: 0x5489, + 939: 0x548A, + 940: 0x548D, + 941: 0x5491, + 942: 0x5493, + 943: 0x5497, + 944: 0x5498, + 945: 0x549C, + 946: 0x549E, + 947: 0x549F, + 948: 0x54A0, + 949: 0x54A1, + 950: 0x54A2, + 951: 0x54A5, + 952: 0x54AE, + 953: 0x54B0, + 954: 0x54B2, + 955: 0x54B5, + 956: 0x54B6, + 957: 0x54B7, + 958: 0x54B9, + 959: 0x54BA, + 960: 0x54BC, + 961: 0x54BE, + 962: 0x54C3, + 963: 0x54C5, + 964: 0x54CA, + 965: 0x54CB, + 966: 0x54D6, + 967: 0x54D8, + 968: 0x54DB, + 969: 0x54E0, + 970: 0x54E1, + 971: 0x54E2, + 972: 0x54E3, + 973: 0x54E4, + 974: 0x54EB, + 975: 0x54EC, + 976: 0x54EF, + 977: 0x54F0, + 978: 0x54F1, + 979: 0x54F4, + 980: 0x54F5, + 981: 0x54F6, + 982: 0x54F7, + 983: 0x54F8, + 984: 0x54F9, + 985: 0x54FB, + 986: 0x54FE, + 987: 0x5500, + 988: 0x5502, + 989: 0x5503, + 990: 0x5504, + 991: 0x5505, + 992: 0x5508, + 993: 0x550A, + 994: 0x550B, + 995: 0x550C, + 996: 0x550D, + 997: 0x550E, + 998: 0x5512, + 999: 0x5513, + 1000: 0x5515, + 1001: 0x5516, + 1002: 0x5517, + 1003: 0x5518, + 1004: 0x5519, + 1005: 0x551A, + 1006: 0x551C, + 1007: 0x551D, + 1008: 0x551E, + 1009: 0x551F, + 1010: 0x5521, + 1011: 0x5525, + 1012: 0x5526, + 1013: 0x5528, + 1014: 0x5529, + 1015: 0x552B, + 1016: 0x552D, + 1017: 0x5532, + 1018: 0x5534, + 1019: 0x5535, + 1020: 0x5536, + 1021: 0x5538, + 1022: 0x5539, + 1023: 0x553A, + 1024: 0x553B, + 1025: 0x553D, + 1026: 0x5540, + 1027: 0x5542, + 1028: 0x5545, + 1029: 0x5547, + 1030: 0x5548, + 1031: 0x554B, + 1032: 0x554C, + 1033: 0x554D, + 1034: 0x554E, + 1035: 0x554F, + 1036: 0x5551, + 1037: 0x5552, + 1038: 0x5553, + 1039: 0x5554, + 1040: 0x5557, + 1041: 0x5558, + 1042: 0x5559, + 1043: 0x555A, + 1044: 0x555B, + 1045: 0x555D, + 1046: 0x555E, + 1047: 0x555F, + 1048: 0x5560, + 1049: 0x5562, + 1050: 0x5563, + 1051: 0x5568, + 1052: 0x5569, + 1053: 0x556B, + 1054: 0x556F, + 1055: 0x5570, + 1056: 0x5571, + 1057: 0x5572, + 1058: 0x5573, + 1059: 0x5574, + 1060: 0x5579, + 1061: 0x557A, + 1062: 0x557D, + 1063: 0x557F, + 1064: 0x5585, + 1065: 0x5586, + 1066: 0x558C, + 1067: 0x558D, + 1068: 0x558E, + 1069: 0x5590, + 1070: 0x5592, + 1071: 0x5593, + 1072: 0x5595, + 1073: 0x5596, + 1074: 0x5597, + 1075: 0x559A, + 1076: 0x559B, + 1077: 0x559E, + 1078: 0x55A0, + 1079: 0x55A1, + 1080: 0x55A2, + 1081: 0x55A3, + 1082: 0x55A4, + 1083: 0x55A5, + 1084: 0x55A6, + 1085: 0x55A8, + 1086: 0x55A9, + 1087: 0x55AA, + 1088: 0x55AB, + 1089: 0x55AC, + 1090: 0x55AD, + 1091: 0x55AE, + 1092: 0x55AF, + 1093: 0x55B0, + 1094: 0x55B2, + 1095: 0x55B4, + 1096: 0x55B6, + 1097: 0x55B8, + 1098: 0x55BA, + 1099: 0x55BC, + 1100: 0x55BF, + 1101: 0x55C0, + 1102: 0x55C1, + 1103: 0x55C2, + 1104: 0x55C3, + 1105: 0x55C6, + 1106: 0x55C7, + 1107: 0x55C8, + 1108: 0x55CA, + 1109: 0x55CB, + 1110: 0x55CE, + 1111: 0x55CF, + 1112: 0x55D0, + 1113: 0x55D5, + 1114: 0x55D7, + 1115: 0x55D8, + 1116: 0x55D9, + 1117: 0x55DA, + 1118: 0x55DB, + 1119: 0x55DE, + 1120: 0x55E0, + 1121: 0x55E2, + 1122: 0x55E7, + 1123: 0x55E9, + 1124: 0x55ED, + 1125: 0x55EE, + 1126: 0x55F0, + 1127: 0x55F1, + 1128: 0x55F4, + 1129: 0x55F6, + 1130: 0x55F8, + 1131: 0x55F9, + 1132: 0x55FA, + 1133: 0x55FB, + 1134: 0x55FC, + 1135: 0x55FF, + 1136: 0x5602, + 1137: 0x5603, + 1138: 0x5604, + 1139: 0x5605, + 1140: 0x5606, + 1141: 0x5607, + 1142: 0x560A, + 1143: 0x560B, + 1144: 0x560D, + 1145: 0x5610, + 1146: 0x5611, + 1147: 0x5612, + 1148: 0x5613, + 1149: 0x5614, + 1150: 0x5615, + 1151: 0x5616, + 1152: 0x5617, + 1153: 0x5619, + 1154: 0x561A, + 1155: 0x561C, + 1156: 0x561D, + 1157: 0x5620, + 1158: 0x5621, + 1159: 0x5622, + 1160: 0x5625, + 1161: 0x5626, + 1162: 0x5628, + 1163: 0x5629, + 1164: 0x562A, + 1165: 0x562B, + 1166: 0x562E, + 1167: 0x562F, + 1168: 0x5630, + 1169: 0x5633, + 1170: 0x5635, + 1171: 0x5637, + 1172: 0x5638, + 1173: 0x563A, + 1174: 0x563C, + 1175: 0x563D, + 1176: 0x563E, + 1177: 0x5640, + 1178: 0x5641, + 1179: 0x5642, + 1180: 0x5643, + 1181: 0x5644, + 1182: 0x5645, + 1183: 0x5646, + 1184: 0x5647, + 1185: 0x5648, + 1186: 0x5649, + 1187: 0x564A, + 1188: 0x564B, + 1189: 0x564F, + 1190: 0x5650, + 1191: 0x5651, + 1192: 0x5652, + 1193: 0x5653, + 1194: 0x5655, + 1195: 0x5656, + 1196: 0x565A, + 1197: 0x565B, + 1198: 0x565D, + 1199: 0x565E, + 1200: 0x565F, + 1201: 0x5660, + 1202: 0x5661, + 1203: 0x5663, + 1204: 0x5665, + 1205: 0x5666, + 1206: 0x5667, + 1207: 0x566D, + 1208: 0x566E, + 1209: 0x566F, + 1210: 0x5670, + 1211: 0x5672, + 1212: 0x5673, + 1213: 0x5674, + 1214: 0x5675, + 1215: 0x5677, + 1216: 0x5678, + 1217: 0x5679, + 1218: 0x567A, + 1219: 0x567D, + 1220: 0x567E, + 1221: 0x567F, + 1222: 0x5680, + 1223: 0x5681, + 1224: 0x5682, + 1225: 0x5683, + 1226: 0x5684, + 1227: 0x5687, + 1228: 0x5688, + 1229: 0x5689, + 1230: 0x568A, + 1231: 0x568B, + 1232: 0x568C, + 1233: 0x568D, + 1234: 0x5690, + 1235: 0x5691, + 1236: 0x5692, + 1237: 0x5694, + 1238: 0x5695, + 1239: 0x5696, + 1240: 0x5697, + 1241: 0x5698, + 1242: 0x5699, + 1243: 0x569A, + 1244: 0x569B, + 1245: 0x569C, + 1246: 0x569D, + 1247: 0x569E, + 1248: 0x569F, + 1249: 0x56A0, + 1250: 0x56A1, + 1251: 0x56A2, + 1252: 0x56A4, + 1253: 0x56A5, + 1254: 0x56A6, + 1255: 0x56A7, + 1256: 0x56A8, + 1257: 0x56A9, + 1258: 0x56AA, + 1259: 0x56AB, + 1260: 0x56AC, + 1261: 0x56AD, + 1262: 0x56AE, + 1263: 0x56B0, + 1264: 0x56B1, + 1265: 0x56B2, + 1266: 0x56B3, + 1267: 0x56B4, + 1268: 0x56B5, + 1269: 0x56B6, + 1270: 0x56B8, + 1271: 0x56B9, + 1272: 0x56BA, + 1273: 0x56BB, + 1274: 0x56BD, + 1275: 0x56BE, + 1276: 0x56BF, + 1277: 0x56C0, + 1278: 0x56C1, + 1279: 0x56C2, + 1280: 0x56C3, + 1281: 0x56C4, + 1282: 0x56C5, + 1283: 0x56C6, + 1284: 0x56C7, + 1285: 0x56C8, + 1286: 0x56C9, + 1287: 0x56CB, + 1288: 0x56CC, + 1289: 0x56CD, + 1290: 0x56CE, + 1291: 0x56CF, + 1292: 0x56D0, + 1293: 0x56D1, + 1294: 0x56D2, + 1295: 0x56D3, + 1296: 0x56D5, + 1297: 0x56D6, + 1298: 0x56D8, + 1299: 0x56D9, + 1300: 0x56DC, + 1301: 0x56E3, + 1302: 0x56E5, + 1303: 0x56E6, + 1304: 0x56E7, + 1305: 0x56E8, + 1306: 0x56E9, + 1307: 0x56EA, + 1308: 0x56EC, + 1309: 0x56EE, + 1310: 0x56EF, + 1311: 0x56F2, + 1312: 0x56F3, + 1313: 0x56F6, + 1314: 0x56F7, + 1315: 0x56F8, + 1316: 0x56FB, + 1317: 0x56FC, + 1318: 0x5700, + 1319: 0x5701, + 1320: 0x5702, + 1321: 0x5705, + 1322: 0x5707, + 1323: 0x570B, + 1324: 0x570C, + 1325: 0x570D, + 1326: 0x570E, + 1327: 0x570F, + 1328: 0x5710, + 1329: 0x5711, + 1330: 0x5712, + 1331: 0x5713, + 1332: 0x5714, + 1333: 0x5715, + 1334: 0x5716, + 1335: 0x5717, + 1336: 0x5718, + 1337: 0x5719, + 1338: 0x571A, + 1339: 0x571B, + 1340: 0x571D, + 1341: 0x571E, + 1342: 0x5720, + 1343: 0x5721, + 1344: 0x5722, + 1345: 0x5724, + 1346: 0x5725, + 1347: 0x5726, + 1348: 0x5727, + 1349: 0x572B, + 1350: 0x5731, + 1351: 0x5732, + 1352: 0x5734, + 1353: 0x5735, + 1354: 0x5736, + 1355: 0x5737, + 1356: 0x5738, + 1357: 0x573C, + 1358: 0x573D, + 1359: 0x573F, + 1360: 0x5741, + 1361: 0x5743, + 1362: 0x5744, + 1363: 0x5745, + 1364: 0x5746, + 1365: 0x5748, + 1366: 0x5749, + 1367: 0x574B, + 1368: 0x5752, + 1369: 0x5753, + 1370: 0x5754, + 1371: 0x5755, + 1372: 0x5756, + 1373: 0x5758, + 1374: 0x5759, + 1375: 0x5762, + 1376: 0x5763, + 1377: 0x5765, + 1378: 0x5767, + 1379: 0x576C, + 1380: 0x576E, + 1381: 0x5770, + 1382: 0x5771, + 1383: 0x5772, + 1384: 0x5774, + 1385: 0x5775, + 1386: 0x5778, + 1387: 0x5779, + 1388: 0x577A, + 1389: 0x577D, + 1390: 0x577E, + 1391: 0x577F, + 1392: 0x5780, + 1393: 0x5781, + 1394: 0x5787, + 1395: 0x5788, + 1396: 0x5789, + 1397: 0x578A, + 1398: 0x578D, + 1399: 0x578E, + 1400: 0x578F, + 1401: 0x5790, + 1402: 0x5791, + 1403: 0x5794, + 1404: 0x5795, + 1405: 0x5796, + 1406: 0x5797, + 1407: 0x5798, + 1408: 0x5799, + 1409: 0x579A, + 1410: 0x579C, + 1411: 0x579D, + 1412: 0x579E, + 1413: 0x579F, + 1414: 0x57A5, + 1415: 0x57A8, + 1416: 0x57AA, + 1417: 0x57AC, + 1418: 0x57AF, + 1419: 0x57B0, + 1420: 0x57B1, + 1421: 0x57B3, + 1422: 0x57B5, + 1423: 0x57B6, + 1424: 0x57B7, + 1425: 0x57B9, + 1426: 0x57BA, + 1427: 0x57BB, + 1428: 0x57BC, + 1429: 0x57BD, + 1430: 0x57BE, + 1431: 0x57BF, + 1432: 0x57C0, + 1433: 0x57C1, + 1434: 0x57C4, + 1435: 0x57C5, + 1436: 0x57C6, + 1437: 0x57C7, + 1438: 0x57C8, + 1439: 0x57C9, + 1440: 0x57CA, + 1441: 0x57CC, + 1442: 0x57CD, + 1443: 0x57D0, + 1444: 0x57D1, + 1445: 0x57D3, + 1446: 0x57D6, + 1447: 0x57D7, + 1448: 0x57DB, + 1449: 0x57DC, + 1450: 0x57DE, + 1451: 0x57E1, + 1452: 0x57E2, + 1453: 0x57E3, + 1454: 0x57E5, + 1455: 0x57E6, + 1456: 0x57E7, + 1457: 0x57E8, + 1458: 0x57E9, + 1459: 0x57EA, + 1460: 0x57EB, + 1461: 0x57EC, + 1462: 0x57EE, + 1463: 0x57F0, + 1464: 0x57F1, + 1465: 0x57F2, + 1466: 0x57F3, + 1467: 0x57F5, + 1468: 0x57F6, + 1469: 0x57F7, + 1470: 0x57FB, + 1471: 0x57FC, + 1472: 0x57FE, + 1473: 0x57FF, + 1474: 0x5801, + 1475: 0x5803, + 1476: 0x5804, + 1477: 0x5805, + 1478: 0x5808, + 1479: 0x5809, + 1480: 0x580A, + 1481: 0x580C, + 1482: 0x580E, + 1483: 0x580F, + 1484: 0x5810, + 1485: 0x5812, + 1486: 0x5813, + 1487: 0x5814, + 1488: 0x5816, + 1489: 0x5817, + 1490: 0x5818, + 1491: 0x581A, + 1492: 0x581B, + 1493: 0x581C, + 1494: 0x581D, + 1495: 0x581F, + 1496: 0x5822, + 1497: 0x5823, + 1498: 0x5825, + 1499: 0x5826, + 1500: 0x5827, + 1501: 0x5828, + 1502: 0x5829, + 1503: 0x582B, + 1504: 0x582C, + 1505: 0x582D, + 1506: 0x582E, + 1507: 0x582F, + 1508: 0x5831, + 1509: 0x5832, + 1510: 0x5833, + 1511: 0x5834, + 1512: 0x5836, + 1513: 0x5837, + 1514: 0x5838, + 1515: 0x5839, + 1516: 0x583A, + 1517: 0x583B, + 1518: 0x583C, + 1519: 0x583D, + 1520: 0x583E, + 1521: 0x583F, + 1522: 0x5840, + 1523: 0x5841, + 1524: 0x5842, + 1525: 0x5843, + 1526: 0x5845, + 1527: 0x5846, + 1528: 0x5847, + 1529: 0x5848, + 1530: 0x5849, + 1531: 0x584A, + 1532: 0x584B, + 1533: 0x584E, + 1534: 0x584F, + 1535: 0x5850, + 1536: 0x5852, + 1537: 0x5853, + 1538: 0x5855, + 1539: 0x5856, + 1540: 0x5857, + 1541: 0x5859, + 1542: 0x585A, + 1543: 0x585B, + 1544: 0x585C, + 1545: 0x585D, + 1546: 0x585F, + 1547: 0x5860, + 1548: 0x5861, + 1549: 0x5862, + 1550: 0x5863, + 1551: 0x5864, + 1552: 0x5866, + 1553: 0x5867, + 1554: 0x5868, + 1555: 0x5869, + 1556: 0x586A, + 1557: 0x586D, + 1558: 0x586E, + 1559: 0x586F, + 1560: 0x5870, + 1561: 0x5871, + 1562: 0x5872, + 1563: 0x5873, + 1564: 0x5874, + 1565: 0x5875, + 1566: 0x5876, + 1567: 0x5877, + 1568: 0x5878, + 1569: 0x5879, + 1570: 0x587A, + 1571: 0x587B, + 1572: 0x587C, + 1573: 0x587D, + 1574: 0x587F, + 1575: 0x5882, + 1576: 0x5884, + 1577: 0x5886, + 1578: 0x5887, + 1579: 0x5888, + 1580: 0x588A, + 1581: 0x588B, + 1582: 0x588C, + 1583: 0x588D, + 1584: 0x588E, + 1585: 0x588F, + 1586: 0x5890, + 1587: 0x5891, + 1588: 0x5894, + 1589: 0x5895, + 1590: 0x5896, + 1591: 0x5897, + 1592: 0x5898, + 1593: 0x589B, + 1594: 0x589C, + 1595: 0x589D, + 1596: 0x58A0, + 1597: 0x58A1, + 1598: 0x58A2, + 1599: 0x58A3, + 1600: 0x58A4, + 1601: 0x58A5, + 1602: 0x58A6, + 1603: 0x58A7, + 1604: 0x58AA, + 1605: 0x58AB, + 1606: 0x58AC, + 1607: 0x58AD, + 1608: 0x58AE, + 1609: 0x58AF, + 1610: 0x58B0, + 1611: 0x58B1, + 1612: 0x58B2, + 1613: 0x58B3, + 1614: 0x58B4, + 1615: 0x58B5, + 1616: 0x58B6, + 1617: 0x58B7, + 1618: 0x58B8, + 1619: 0x58B9, + 1620: 0x58BA, + 1621: 0x58BB, + 1622: 0x58BD, + 1623: 0x58BE, + 1624: 0x58BF, + 1625: 0x58C0, + 1626: 0x58C2, + 1627: 0x58C3, + 1628: 0x58C4, + 1629: 0x58C6, + 1630: 0x58C7, + 1631: 0x58C8, + 1632: 0x58C9, + 1633: 0x58CA, + 1634: 0x58CB, + 1635: 0x58CC, + 1636: 0x58CD, + 1637: 0x58CE, + 1638: 0x58CF, + 1639: 0x58D0, + 1640: 0x58D2, + 1641: 0x58D3, + 1642: 0x58D4, + 1643: 0x58D6, + 1644: 0x58D7, + 1645: 0x58D8, + 1646: 0x58D9, + 1647: 0x58DA, + 1648: 0x58DB, + 1649: 0x58DC, + 1650: 0x58DD, + 1651: 0x58DE, + 1652: 0x58DF, + 1653: 0x58E0, + 1654: 0x58E1, + 1655: 0x58E2, + 1656: 0x58E3, + 1657: 0x58E5, + 1658: 0x58E6, + 1659: 0x58E7, + 1660: 0x58E8, + 1661: 0x58E9, + 1662: 0x58EA, + 1663: 0x58ED, + 1664: 0x58EF, + 1665: 0x58F1, + 1666: 0x58F2, + 1667: 0x58F4, + 1668: 0x58F5, + 1669: 0x58F7, + 1670: 0x58F8, + 1671: 0x58FA, + 1672: 0x58FB, + 1673: 0x58FC, + 1674: 0x58FD, + 1675: 0x58FE, + 1676: 0x58FF, + 1677: 0x5900, + 1678: 0x5901, + 1679: 0x5903, + 1680: 0x5905, + 1681: 0x5906, + 1682: 0x5908, + 1683: 0x5909, + 1684: 0x590A, + 1685: 0x590B, + 1686: 0x590C, + 1687: 0x590E, + 1688: 0x5910, + 1689: 0x5911, + 1690: 0x5912, + 1691: 0x5913, + 1692: 0x5917, + 1693: 0x5918, + 1694: 0x591B, + 1695: 0x591D, + 1696: 0x591E, + 1697: 0x5920, + 1698: 0x5921, + 1699: 0x5922, + 1700: 0x5923, + 1701: 0x5926, + 1702: 0x5928, + 1703: 0x592C, + 1704: 0x5930, + 1705: 0x5932, + 1706: 0x5933, + 1707: 0x5935, + 1708: 0x5936, + 1709: 0x593B, + 1710: 0x593D, + 1711: 0x593E, + 1712: 0x593F, + 1713: 0x5940, + 1714: 0x5943, + 1715: 0x5945, + 1716: 0x5946, + 1717: 0x594A, + 1718: 0x594C, + 1719: 0x594D, + 1720: 0x5950, + 1721: 0x5952, + 1722: 0x5953, + 1723: 0x5959, + 1724: 0x595B, + 1725: 0x595C, + 1726: 0x595D, + 1727: 0x595E, + 1728: 0x595F, + 1729: 0x5961, + 1730: 0x5963, + 1731: 0x5964, + 1732: 0x5966, + 1733: 0x5967, + 1734: 0x5968, + 1735: 0x5969, + 1736: 0x596A, + 1737: 0x596B, + 1738: 0x596C, + 1739: 0x596D, + 1740: 0x596E, + 1741: 0x596F, + 1742: 0x5970, + 1743: 0x5971, + 1744: 0x5972, + 1745: 0x5975, + 1746: 0x5977, + 1747: 0x597A, + 1748: 0x597B, + 1749: 0x597C, + 1750: 0x597E, + 1751: 0x597F, + 1752: 0x5980, + 1753: 0x5985, + 1754: 0x5989, + 1755: 0x598B, + 1756: 0x598C, + 1757: 0x598E, + 1758: 0x598F, + 1759: 0x5990, + 1760: 0x5991, + 1761: 0x5994, + 1762: 0x5995, + 1763: 0x5998, + 1764: 0x599A, + 1765: 0x599B, + 1766: 0x599C, + 1767: 0x599D, + 1768: 0x599F, + 1769: 0x59A0, + 1770: 0x59A1, + 1771: 0x59A2, + 1772: 0x59A6, + 1773: 0x59A7, + 1774: 0x59AC, + 1775: 0x59AD, + 1776: 0x59B0, + 1777: 0x59B1, + 1778: 0x59B3, + 1779: 0x59B4, + 1780: 0x59B5, + 1781: 0x59B6, + 1782: 0x59B7, + 1783: 0x59B8, + 1784: 0x59BA, + 1785: 0x59BC, + 1786: 0x59BD, + 1787: 0x59BF, + 1788: 0x59C0, + 1789: 0x59C1, + 1790: 0x59C2, + 1791: 0x59C3, + 1792: 0x59C4, + 1793: 0x59C5, + 1794: 0x59C7, + 1795: 0x59C8, + 1796: 0x59C9, + 1797: 0x59CC, + 1798: 0x59CD, + 1799: 0x59CE, + 1800: 0x59CF, + 1801: 0x59D5, + 1802: 0x59D6, + 1803: 0x59D9, + 1804: 0x59DB, + 1805: 0x59DE, + 1806: 0x59DF, + 1807: 0x59E0, + 1808: 0x59E1, + 1809: 0x59E2, + 1810: 0x59E4, + 1811: 0x59E6, + 1812: 0x59E7, + 1813: 0x59E9, + 1814: 0x59EA, + 1815: 0x59EB, + 1816: 0x59ED, + 1817: 0x59EE, + 1818: 0x59EF, + 1819: 0x59F0, + 1820: 0x59F1, + 1821: 0x59F2, + 1822: 0x59F3, + 1823: 0x59F4, + 1824: 0x59F5, + 1825: 0x59F6, + 1826: 0x59F7, + 1827: 0x59F8, + 1828: 0x59FA, + 1829: 0x59FC, + 1830: 0x59FD, + 1831: 0x59FE, + 1832: 0x5A00, + 1833: 0x5A02, + 1834: 0x5A0A, + 1835: 0x5A0B, + 1836: 0x5A0D, + 1837: 0x5A0E, + 1838: 0x5A0F, + 1839: 0x5A10, + 1840: 0x5A12, + 1841: 0x5A14, + 1842: 0x5A15, + 1843: 0x5A16, + 1844: 0x5A17, + 1845: 0x5A19, + 1846: 0x5A1A, + 1847: 0x5A1B, + 1848: 0x5A1D, + 1849: 0x5A1E, + 1850: 0x5A21, + 1851: 0x5A22, + 1852: 0x5A24, + 1853: 0x5A26, + 1854: 0x5A27, + 1855: 0x5A28, + 1856: 0x5A2A, + 1857: 0x5A2B, + 1858: 0x5A2C, + 1859: 0x5A2D, + 1860: 0x5A2E, + 1861: 0x5A2F, + 1862: 0x5A30, + 1863: 0x5A33, + 1864: 0x5A35, + 1865: 0x5A37, + 1866: 0x5A38, + 1867: 0x5A39, + 1868: 0x5A3A, + 1869: 0x5A3B, + 1870: 0x5A3D, + 1871: 0x5A3E, + 1872: 0x5A3F, + 1873: 0x5A41, + 1874: 0x5A42, + 1875: 0x5A43, + 1876: 0x5A44, + 1877: 0x5A45, + 1878: 0x5A47, + 1879: 0x5A48, + 1880: 0x5A4B, + 1881: 0x5A4C, + 1882: 0x5A4D, + 1883: 0x5A4E, + 1884: 0x5A4F, + 1885: 0x5A50, + 1886: 0x5A51, + 1887: 0x5A52, + 1888: 0x5A53, + 1889: 0x5A54, + 1890: 0x5A56, + 1891: 0x5A57, + 1892: 0x5A58, + 1893: 0x5A59, + 1894: 0x5A5B, + 1895: 0x5A5C, + 1896: 0x5A5D, + 1897: 0x5A5E, + 1898: 0x5A5F, + 1899: 0x5A60, + 1900: 0x5A61, + 1901: 0x5A63, + 1902: 0x5A64, + 1903: 0x5A65, + 1904: 0x5A66, + 1905: 0x5A68, + 1906: 0x5A69, + 1907: 0x5A6B, + 1908: 0x5A6C, + 1909: 0x5A6D, + 1910: 0x5A6E, + 1911: 0x5A6F, + 1912: 0x5A70, + 1913: 0x5A71, + 1914: 0x5A72, + 1915: 0x5A73, + 1916: 0x5A78, + 1917: 0x5A79, + 1918: 0x5A7B, + 1919: 0x5A7C, + 1920: 0x5A7D, + 1921: 0x5A7E, + 1922: 0x5A80, + 1923: 0x5A81, + 1924: 0x5A82, + 1925: 0x5A83, + 1926: 0x5A84, + 1927: 0x5A85, + 1928: 0x5A86, + 1929: 0x5A87, + 1930: 0x5A88, + 1931: 0x5A89, + 1932: 0x5A8A, + 1933: 0x5A8B, + 1934: 0x5A8C, + 1935: 0x5A8D, + 1936: 0x5A8E, + 1937: 0x5A8F, + 1938: 0x5A90, + 1939: 0x5A91, + 1940: 0x5A93, + 1941: 0x5A94, + 1942: 0x5A95, + 1943: 0x5A96, + 1944: 0x5A97, + 1945: 0x5A98, + 1946: 0x5A99, + 1947: 0x5A9C, + 1948: 0x5A9D, + 1949: 0x5A9E, + 1950: 0x5A9F, + 1951: 0x5AA0, + 1952: 0x5AA1, + 1953: 0x5AA2, + 1954: 0x5AA3, + 1955: 0x5AA4, + 1956: 0x5AA5, + 1957: 0x5AA6, + 1958: 0x5AA7, + 1959: 0x5AA8, + 1960: 0x5AA9, + 1961: 0x5AAB, + 1962: 0x5AAC, + 1963: 0x5AAD, + 1964: 0x5AAE, + 1965: 0x5AAF, + 1966: 0x5AB0, + 1967: 0x5AB1, + 1968: 0x5AB4, + 1969: 0x5AB6, + 1970: 0x5AB7, + 1971: 0x5AB9, + 1972: 0x5ABA, + 1973: 0x5ABB, + 1974: 0x5ABC, + 1975: 0x5ABD, + 1976: 0x5ABF, + 1977: 0x5AC0, + 1978: 0x5AC3, + 1979: 0x5AC4, + 1980: 0x5AC5, + 1981: 0x5AC6, + 1982: 0x5AC7, + 1983: 0x5AC8, + 1984: 0x5ACA, + 1985: 0x5ACB, + 1986: 0x5ACD, + 1987: 0x5ACE, + 1988: 0x5ACF, + 1989: 0x5AD0, + 1990: 0x5AD1, + 1991: 0x5AD3, + 1992: 0x5AD5, + 1993: 0x5AD7, + 1994: 0x5AD9, + 1995: 0x5ADA, + 1996: 0x5ADB, + 1997: 0x5ADD, + 1998: 0x5ADE, + 1999: 0x5ADF, + 2000: 0x5AE2, + 2001: 0x5AE4, + 2002: 0x5AE5, + 2003: 0x5AE7, + 2004: 0x5AE8, + 2005: 0x5AEA, + 2006: 0x5AEC, + 2007: 0x5AED, + 2008: 0x5AEE, + 2009: 0x5AEF, + 2010: 0x5AF0, + 2011: 0x5AF2, + 2012: 0x5AF3, + 2013: 0x5AF4, + 2014: 0x5AF5, + 2015: 0x5AF6, + 2016: 0x5AF7, + 2017: 0x5AF8, + 2018: 0x5AF9, + 2019: 0x5AFA, + 2020: 0x5AFB, + 2021: 0x5AFC, + 2022: 0x5AFD, + 2023: 0x5AFE, + 2024: 0x5AFF, + 2025: 0x5B00, + 2026: 0x5B01, + 2027: 0x5B02, + 2028: 0x5B03, + 2029: 0x5B04, + 2030: 0x5B05, + 2031: 0x5B06, + 2032: 0x5B07, + 2033: 0x5B08, + 2034: 0x5B0A, + 2035: 0x5B0B, + 2036: 0x5B0C, + 2037: 0x5B0D, + 2038: 0x5B0E, + 2039: 0x5B0F, + 2040: 0x5B10, + 2041: 0x5B11, + 2042: 0x5B12, + 2043: 0x5B13, + 2044: 0x5B14, + 2045: 0x5B15, + 2046: 0x5B18, + 2047: 0x5B19, + 2048: 0x5B1A, + 2049: 0x5B1B, + 2050: 0x5B1C, + 2051: 0x5B1D, + 2052: 0x5B1E, + 2053: 0x5B1F, + 2054: 0x5B20, + 2055: 0x5B21, + 2056: 0x5B22, + 2057: 0x5B23, + 2058: 0x5B24, + 2059: 0x5B25, + 2060: 0x5B26, + 2061: 0x5B27, + 2062: 0x5B28, + 2063: 0x5B29, + 2064: 0x5B2A, + 2065: 0x5B2B, + 2066: 0x5B2C, + 2067: 0x5B2D, + 2068: 0x5B2E, + 2069: 0x5B2F, + 2070: 0x5B30, + 2071: 0x5B31, + 2072: 0x5B33, + 2073: 0x5B35, + 2074: 0x5B36, + 2075: 0x5B38, + 2076: 0x5B39, + 2077: 0x5B3A, + 2078: 0x5B3B, + 2079: 0x5B3C, + 2080: 0x5B3D, + 2081: 0x5B3E, + 2082: 0x5B3F, + 2083: 0x5B41, + 2084: 0x5B42, + 2085: 0x5B43, + 2086: 0x5B44, + 2087: 0x5B45, + 2088: 0x5B46, + 2089: 0x5B47, + 2090: 0x5B48, + 2091: 0x5B49, + 2092: 0x5B4A, + 2093: 0x5B4B, + 2094: 0x5B4C, + 2095: 0x5B4D, + 2096: 0x5B4E, + 2097: 0x5B4F, + 2098: 0x5B52, + 2099: 0x5B56, + 2100: 0x5B5E, + 2101: 0x5B60, + 2102: 0x5B61, + 2103: 0x5B67, + 2104: 0x5B68, + 2105: 0x5B6B, + 2106: 0x5B6D, + 2107: 0x5B6E, + 2108: 0x5B6F, + 2109: 0x5B72, + 2110: 0x5B74, + 2111: 0x5B76, + 2112: 0x5B77, + 2113: 0x5B78, + 2114: 0x5B79, + 2115: 0x5B7B, + 2116: 0x5B7C, + 2117: 0x5B7E, + 2118: 0x5B7F, + 2119: 0x5B82, + 2120: 0x5B86, + 2121: 0x5B8A, + 2122: 0x5B8D, + 2123: 0x5B8E, + 2124: 0x5B90, + 2125: 0x5B91, + 2126: 0x5B92, + 2127: 0x5B94, + 2128: 0x5B96, + 2129: 0x5B9F, + 2130: 0x5BA7, + 2131: 0x5BA8, + 2132: 0x5BA9, + 2133: 0x5BAC, + 2134: 0x5BAD, + 2135: 0x5BAE, + 2136: 0x5BAF, + 2137: 0x5BB1, + 2138: 0x5BB2, + 2139: 0x5BB7, + 2140: 0x5BBA, + 2141: 0x5BBB, + 2142: 0x5BBC, + 2143: 0x5BC0, + 2144: 0x5BC1, + 2145: 0x5BC3, + 2146: 0x5BC8, + 2147: 0x5BC9, + 2148: 0x5BCA, + 2149: 0x5BCB, + 2150: 0x5BCD, + 2151: 0x5BCE, + 2152: 0x5BCF, + 2153: 0x5BD1, + 2154: 0x5BD4, + 2155: 0x5BD5, + 2156: 0x5BD6, + 2157: 0x5BD7, + 2158: 0x5BD8, + 2159: 0x5BD9, + 2160: 0x5BDA, + 2161: 0x5BDB, + 2162: 0x5BDC, + 2163: 0x5BE0, + 2164: 0x5BE2, + 2165: 0x5BE3, + 2166: 0x5BE6, + 2167: 0x5BE7, + 2168: 0x5BE9, + 2169: 0x5BEA, + 2170: 0x5BEB, + 2171: 0x5BEC, + 2172: 0x5BED, + 2173: 0x5BEF, + 2174: 0x5BF1, + 2175: 0x5BF2, + 2176: 0x5BF3, + 2177: 0x5BF4, + 2178: 0x5BF5, + 2179: 0x5BF6, + 2180: 0x5BF7, + 2181: 0x5BFD, + 2182: 0x5BFE, + 2183: 0x5C00, + 2184: 0x5C02, + 2185: 0x5C03, + 2186: 0x5C05, + 2187: 0x5C07, + 2188: 0x5C08, + 2189: 0x5C0B, + 2190: 0x5C0C, + 2191: 0x5C0D, + 2192: 0x5C0E, + 2193: 0x5C10, + 2194: 0x5C12, + 2195: 0x5C13, + 2196: 0x5C17, + 2197: 0x5C19, + 2198: 0x5C1B, + 2199: 0x5C1E, + 2200: 0x5C1F, + 2201: 0x5C20, + 2202: 0x5C21, + 2203: 0x5C23, + 2204: 0x5C26, + 2205: 0x5C28, + 2206: 0x5C29, + 2207: 0x5C2A, + 2208: 0x5C2B, + 2209: 0x5C2D, + 2210: 0x5C2E, + 2211: 0x5C2F, + 2212: 0x5C30, + 2213: 0x5C32, + 2214: 0x5C33, + 2215: 0x5C35, + 2216: 0x5C36, + 2217: 0x5C37, + 2218: 0x5C43, + 2219: 0x5C44, + 2220: 0x5C46, + 2221: 0x5C47, + 2222: 0x5C4C, + 2223: 0x5C4D, + 2224: 0x5C52, + 2225: 0x5C53, + 2226: 0x5C54, + 2227: 0x5C56, + 2228: 0x5C57, + 2229: 0x5C58, + 2230: 0x5C5A, + 2231: 0x5C5B, + 2232: 0x5C5C, + 2233: 0x5C5D, + 2234: 0x5C5F, + 2235: 0x5C62, + 2236: 0x5C64, + 2237: 0x5C67, + 2238: 0x5C68, + 2239: 0x5C69, + 2240: 0x5C6A, + 2241: 0x5C6B, + 2242: 0x5C6C, + 2243: 0x5C6D, + 2244: 0x5C70, + 2245: 0x5C72, + 2246: 0x5C73, + 2247: 0x5C74, + 2248: 0x5C75, + 2249: 0x5C76, + 2250: 0x5C77, + 2251: 0x5C78, + 2252: 0x5C7B, + 2253: 0x5C7C, + 2254: 0x5C7D, + 2255: 0x5C7E, + 2256: 0x5C80, + 2257: 0x5C83, + 2258: 0x5C84, + 2259: 0x5C85, + 2260: 0x5C86, + 2261: 0x5C87, + 2262: 0x5C89, + 2263: 0x5C8A, + 2264: 0x5C8B, + 2265: 0x5C8E, + 2266: 0x5C8F, + 2267: 0x5C92, + 2268: 0x5C93, + 2269: 0x5C95, + 2270: 0x5C9D, + 2271: 0x5C9E, + 2272: 0x5C9F, + 2273: 0x5CA0, + 2274: 0x5CA1, + 2275: 0x5CA4, + 2276: 0x5CA5, + 2277: 0x5CA6, + 2278: 0x5CA7, + 2279: 0x5CA8, + 2280: 0x5CAA, + 2281: 0x5CAE, + 2282: 0x5CAF, + 2283: 0x5CB0, + 2284: 0x5CB2, + 2285: 0x5CB4, + 2286: 0x5CB6, + 2287: 0x5CB9, + 2288: 0x5CBA, + 2289: 0x5CBB, + 2290: 0x5CBC, + 2291: 0x5CBE, + 2292: 0x5CC0, + 2293: 0x5CC2, + 2294: 0x5CC3, + 2295: 0x5CC5, + 2296: 0x5CC6, + 2297: 0x5CC7, + 2298: 0x5CC8, + 2299: 0x5CC9, + 2300: 0x5CCA, + 2301: 0x5CCC, + 2302: 0x5CCD, + 2303: 0x5CCE, + 2304: 0x5CCF, + 2305: 0x5CD0, + 2306: 0x5CD1, + 2307: 0x5CD3, + 2308: 0x5CD4, + 2309: 0x5CD5, + 2310: 0x5CD6, + 2311: 0x5CD7, + 2312: 0x5CD8, + 2313: 0x5CDA, + 2314: 0x5CDB, + 2315: 0x5CDC, + 2316: 0x5CDD, + 2317: 0x5CDE, + 2318: 0x5CDF, + 2319: 0x5CE0, + 2320: 0x5CE2, + 2321: 0x5CE3, + 2322: 0x5CE7, + 2323: 0x5CE9, + 2324: 0x5CEB, + 2325: 0x5CEC, + 2326: 0x5CEE, + 2327: 0x5CEF, + 2328: 0x5CF1, + 2329: 0x5CF2, + 2330: 0x5CF3, + 2331: 0x5CF4, + 2332: 0x5CF5, + 2333: 0x5CF6, + 2334: 0x5CF7, + 2335: 0x5CF8, + 2336: 0x5CF9, + 2337: 0x5CFA, + 2338: 0x5CFC, + 2339: 0x5CFD, + 2340: 0x5CFE, + 2341: 0x5CFF, + 2342: 0x5D00, + 2343: 0x5D01, + 2344: 0x5D04, + 2345: 0x5D05, + 2346: 0x5D08, + 2347: 0x5D09, + 2348: 0x5D0A, + 2349: 0x5D0B, + 2350: 0x5D0C, + 2351: 0x5D0D, + 2352: 0x5D0F, + 2353: 0x5D10, + 2354: 0x5D11, + 2355: 0x5D12, + 2356: 0x5D13, + 2357: 0x5D15, + 2358: 0x5D17, + 2359: 0x5D18, + 2360: 0x5D19, + 2361: 0x5D1A, + 2362: 0x5D1C, + 2363: 0x5D1D, + 2364: 0x5D1F, + 2365: 0x5D20, + 2366: 0x5D21, + 2367: 0x5D22, + 2368: 0x5D23, + 2369: 0x5D25, + 2370: 0x5D28, + 2371: 0x5D2A, + 2372: 0x5D2B, + 2373: 0x5D2C, + 2374: 0x5D2F, + 2375: 0x5D30, + 2376: 0x5D31, + 2377: 0x5D32, + 2378: 0x5D33, + 2379: 0x5D35, + 2380: 0x5D36, + 2381: 0x5D37, + 2382: 0x5D38, + 2383: 0x5D39, + 2384: 0x5D3A, + 2385: 0x5D3B, + 2386: 0x5D3C, + 2387: 0x5D3F, + 2388: 0x5D40, + 2389: 0x5D41, + 2390: 0x5D42, + 2391: 0x5D43, + 2392: 0x5D44, + 2393: 0x5D45, + 2394: 0x5D46, + 2395: 0x5D48, + 2396: 0x5D49, + 2397: 0x5D4D, + 2398: 0x5D4E, + 2399: 0x5D4F, + 2400: 0x5D50, + 2401: 0x5D51, + 2402: 0x5D52, + 2403: 0x5D53, + 2404: 0x5D54, + 2405: 0x5D55, + 2406: 0x5D56, + 2407: 0x5D57, + 2408: 0x5D59, + 2409: 0x5D5A, + 2410: 0x5D5C, + 2411: 0x5D5E, + 2412: 0x5D5F, + 2413: 0x5D60, + 2414: 0x5D61, + 2415: 0x5D62, + 2416: 0x5D63, + 2417: 0x5D64, + 2418: 0x5D65, + 2419: 0x5D66, + 2420: 0x5D67, + 2421: 0x5D68, + 2422: 0x5D6A, + 2423: 0x5D6D, + 2424: 0x5D6E, + 2425: 0x5D70, + 2426: 0x5D71, + 2427: 0x5D72, + 2428: 0x5D73, + 2429: 0x5D75, + 2430: 0x5D76, + 2431: 0x5D77, + 2432: 0x5D78, + 2433: 0x5D79, + 2434: 0x5D7A, + 2435: 0x5D7B, + 2436: 0x5D7C, + 2437: 0x5D7D, + 2438: 0x5D7E, + 2439: 0x5D7F, + 2440: 0x5D80, + 2441: 0x5D81, + 2442: 0x5D83, + 2443: 0x5D84, + 2444: 0x5D85, + 2445: 0x5D86, + 2446: 0x5D87, + 2447: 0x5D88, + 2448: 0x5D89, + 2449: 0x5D8A, + 2450: 0x5D8B, + 2451: 0x5D8C, + 2452: 0x5D8D, + 2453: 0x5D8E, + 2454: 0x5D8F, + 2455: 0x5D90, + 2456: 0x5D91, + 2457: 0x5D92, + 2458: 0x5D93, + 2459: 0x5D94, + 2460: 0x5D95, + 2461: 0x5D96, + 2462: 0x5D97, + 2463: 0x5D98, + 2464: 0x5D9A, + 2465: 0x5D9B, + 2466: 0x5D9C, + 2467: 0x5D9E, + 2468: 0x5D9F, + 2469: 0x5DA0, + 2470: 0x5DA1, + 2471: 0x5DA2, + 2472: 0x5DA3, + 2473: 0x5DA4, + 2474: 0x5DA5, + 2475: 0x5DA6, + 2476: 0x5DA7, + 2477: 0x5DA8, + 2478: 0x5DA9, + 2479: 0x5DAA, + 2480: 0x5DAB, + 2481: 0x5DAC, + 2482: 0x5DAD, + 2483: 0x5DAE, + 2484: 0x5DAF, + 2485: 0x5DB0, + 2486: 0x5DB1, + 2487: 0x5DB2, + 2488: 0x5DB3, + 2489: 0x5DB4, + 2490: 0x5DB5, + 2491: 0x5DB6, + 2492: 0x5DB8, + 2493: 0x5DB9, + 2494: 0x5DBA, + 2495: 0x5DBB, + 2496: 0x5DBC, + 2497: 0x5DBD, + 2498: 0x5DBE, + 2499: 0x5DBF, + 2500: 0x5DC0, + 2501: 0x5DC1, + 2502: 0x5DC2, + 2503: 0x5DC3, + 2504: 0x5DC4, + 2505: 0x5DC6, + 2506: 0x5DC7, + 2507: 0x5DC8, + 2508: 0x5DC9, + 2509: 0x5DCA, + 2510: 0x5DCB, + 2511: 0x5DCC, + 2512: 0x5DCE, + 2513: 0x5DCF, + 2514: 0x5DD0, + 2515: 0x5DD1, + 2516: 0x5DD2, + 2517: 0x5DD3, + 2518: 0x5DD4, + 2519: 0x5DD5, + 2520: 0x5DD6, + 2521: 0x5DD7, + 2522: 0x5DD8, + 2523: 0x5DD9, + 2524: 0x5DDA, + 2525: 0x5DDC, + 2526: 0x5DDF, + 2527: 0x5DE0, + 2528: 0x5DE3, + 2529: 0x5DE4, + 2530: 0x5DEA, + 2531: 0x5DEC, + 2532: 0x5DED, + 2533: 0x5DF0, + 2534: 0x5DF5, + 2535: 0x5DF6, + 2536: 0x5DF8, + 2537: 0x5DF9, + 2538: 0x5DFA, + 2539: 0x5DFB, + 2540: 0x5DFC, + 2541: 0x5DFF, + 2542: 0x5E00, + 2543: 0x5E04, + 2544: 0x5E07, + 2545: 0x5E09, + 2546: 0x5E0A, + 2547: 0x5E0B, + 2548: 0x5E0D, + 2549: 0x5E0E, + 2550: 0x5E12, + 2551: 0x5E13, + 2552: 0x5E17, + 2553: 0x5E1E, + 2554: 0x5E1F, + 2555: 0x5E20, + 2556: 0x5E21, + 2557: 0x5E22, + 2558: 0x5E23, + 2559: 0x5E24, + 2560: 0x5E25, + 2561: 0x5E28, + 2562: 0x5E29, + 2563: 0x5E2A, + 2564: 0x5E2B, + 2565: 0x5E2C, + 2566: 0x5E2F, + 2567: 0x5E30, + 2568: 0x5E32, + 2569: 0x5E33, + 2570: 0x5E34, + 2571: 0x5E35, + 2572: 0x5E36, + 2573: 0x5E39, + 2574: 0x5E3A, + 2575: 0x5E3E, + 2576: 0x5E3F, + 2577: 0x5E40, + 2578: 0x5E41, + 2579: 0x5E43, + 2580: 0x5E46, + 2581: 0x5E47, + 2582: 0x5E48, + 2583: 0x5E49, + 2584: 0x5E4A, + 2585: 0x5E4B, + 2586: 0x5E4D, + 2587: 0x5E4E, + 2588: 0x5E4F, + 2589: 0x5E50, + 2590: 0x5E51, + 2591: 0x5E52, + 2592: 0x5E53, + 2593: 0x5E56, + 2594: 0x5E57, + 2595: 0x5E58, + 2596: 0x5E59, + 2597: 0x5E5A, + 2598: 0x5E5C, + 2599: 0x5E5D, + 2600: 0x5E5F, + 2601: 0x5E60, + 2602: 0x5E63, + 2603: 0x5E64, + 2604: 0x5E65, + 2605: 0x5E66, + 2606: 0x5E67, + 2607: 0x5E68, + 2608: 0x5E69, + 2609: 0x5E6A, + 2610: 0x5E6B, + 2611: 0x5E6C, + 2612: 0x5E6D, + 2613: 0x5E6E, + 2614: 0x5E6F, + 2615: 0x5E70, + 2616: 0x5E71, + 2617: 0x5E75, + 2618: 0x5E77, + 2619: 0x5E79, + 2620: 0x5E7E, + 2621: 0x5E81, + 2622: 0x5E82, + 2623: 0x5E83, + 2624: 0x5E85, + 2625: 0x5E88, + 2626: 0x5E89, + 2627: 0x5E8C, + 2628: 0x5E8D, + 2629: 0x5E8E, + 2630: 0x5E92, + 2631: 0x5E98, + 2632: 0x5E9B, + 2633: 0x5E9D, + 2634: 0x5EA1, + 2635: 0x5EA2, + 2636: 0x5EA3, + 2637: 0x5EA4, + 2638: 0x5EA8, + 2639: 0x5EA9, + 2640: 0x5EAA, + 2641: 0x5EAB, + 2642: 0x5EAC, + 2643: 0x5EAE, + 2644: 0x5EAF, + 2645: 0x5EB0, + 2646: 0x5EB1, + 2647: 0x5EB2, + 2648: 0x5EB4, + 2649: 0x5EBA, + 2650: 0x5EBB, + 2651: 0x5EBC, + 2652: 0x5EBD, + 2653: 0x5EBF, + 2654: 0x5EC0, + 2655: 0x5EC1, + 2656: 0x5EC2, + 2657: 0x5EC3, + 2658: 0x5EC4, + 2659: 0x5EC5, + 2660: 0x5EC6, + 2661: 0x5EC7, + 2662: 0x5EC8, + 2663: 0x5ECB, + 2664: 0x5ECC, + 2665: 0x5ECD, + 2666: 0x5ECE, + 2667: 0x5ECF, + 2668: 0x5ED0, + 2669: 0x5ED4, + 2670: 0x5ED5, + 2671: 0x5ED7, + 2672: 0x5ED8, + 2673: 0x5ED9, + 2674: 0x5EDA, + 2675: 0x5EDC, + 2676: 0x5EDD, + 2677: 0x5EDE, + 2678: 0x5EDF, + 2679: 0x5EE0, + 2680: 0x5EE1, + 2681: 0x5EE2, + 2682: 0x5EE3, + 2683: 0x5EE4, + 2684: 0x5EE5, + 2685: 0x5EE6, + 2686: 0x5EE7, + 2687: 0x5EE9, + 2688: 0x5EEB, + 2689: 0x5EEC, + 2690: 0x5EED, + 2691: 0x5EEE, + 2692: 0x5EEF, + 2693: 0x5EF0, + 2694: 0x5EF1, + 2695: 0x5EF2, + 2696: 0x5EF3, + 2697: 0x5EF5, + 2698: 0x5EF8, + 2699: 0x5EF9, + 2700: 0x5EFB, + 2701: 0x5EFC, + 2702: 0x5EFD, + 2703: 0x5F05, + 2704: 0x5F06, + 2705: 0x5F07, + 2706: 0x5F09, + 2707: 0x5F0C, + 2708: 0x5F0D, + 2709: 0x5F0E, + 2710: 0x5F10, + 2711: 0x5F12, + 2712: 0x5F14, + 2713: 0x5F16, + 2714: 0x5F19, + 2715: 0x5F1A, + 2716: 0x5F1C, + 2717: 0x5F1D, + 2718: 0x5F1E, + 2719: 0x5F21, + 2720: 0x5F22, + 2721: 0x5F23, + 2722: 0x5F24, + 2723: 0x5F28, + 2724: 0x5F2B, + 2725: 0x5F2C, + 2726: 0x5F2E, + 2727: 0x5F30, + 2728: 0x5F32, + 2729: 0x5F33, + 2730: 0x5F34, + 2731: 0x5F35, + 2732: 0x5F36, + 2733: 0x5F37, + 2734: 0x5F38, + 2735: 0x5F3B, + 2736: 0x5F3D, + 2737: 0x5F3E, + 2738: 0x5F3F, + 2739: 0x5F41, + 2740: 0x5F42, + 2741: 0x5F43, + 2742: 0x5F44, + 2743: 0x5F45, + 2744: 0x5F46, + 2745: 0x5F47, + 2746: 0x5F48, + 2747: 0x5F49, + 2748: 0x5F4A, + 2749: 0x5F4B, + 2750: 0x5F4C, + 2751: 0x5F4D, + 2752: 0x5F4E, + 2753: 0x5F4F, + 2754: 0x5F51, + 2755: 0x5F54, + 2756: 0x5F59, + 2757: 0x5F5A, + 2758: 0x5F5B, + 2759: 0x5F5C, + 2760: 0x5F5E, + 2761: 0x5F5F, + 2762: 0x5F60, + 2763: 0x5F63, + 2764: 0x5F65, + 2765: 0x5F67, + 2766: 0x5F68, + 2767: 0x5F6B, + 2768: 0x5F6E, + 2769: 0x5F6F, + 2770: 0x5F72, + 2771: 0x5F74, + 2772: 0x5F75, + 2773: 0x5F76, + 2774: 0x5F78, + 2775: 0x5F7A, + 2776: 0x5F7D, + 2777: 0x5F7E, + 2778: 0x5F7F, + 2779: 0x5F83, + 2780: 0x5F86, + 2781: 0x5F8D, + 2782: 0x5F8E, + 2783: 0x5F8F, + 2784: 0x5F91, + 2785: 0x5F93, + 2786: 0x5F94, + 2787: 0x5F96, + 2788: 0x5F9A, + 2789: 0x5F9B, + 2790: 0x5F9D, + 2791: 0x5F9E, + 2792: 0x5F9F, + 2793: 0x5FA0, + 2794: 0x5FA2, + 2795: 0x5FA3, + 2796: 0x5FA4, + 2797: 0x5FA5, + 2798: 0x5FA6, + 2799: 0x5FA7, + 2800: 0x5FA9, + 2801: 0x5FAB, + 2802: 0x5FAC, + 2803: 0x5FAF, + 2804: 0x5FB0, + 2805: 0x5FB1, + 2806: 0x5FB2, + 2807: 0x5FB3, + 2808: 0x5FB4, + 2809: 0x5FB6, + 2810: 0x5FB8, + 2811: 0x5FB9, + 2812: 0x5FBA, + 2813: 0x5FBB, + 2814: 0x5FBE, + 2815: 0x5FBF, + 2816: 0x5FC0, + 2817: 0x5FC1, + 2818: 0x5FC2, + 2819: 0x5FC7, + 2820: 0x5FC8, + 2821: 0x5FCA, + 2822: 0x5FCB, + 2823: 0x5FCE, + 2824: 0x5FD3, + 2825: 0x5FD4, + 2826: 0x5FD5, + 2827: 0x5FDA, + 2828: 0x5FDB, + 2829: 0x5FDC, + 2830: 0x5FDE, + 2831: 0x5FDF, + 2832: 0x5FE2, + 2833: 0x5FE3, + 2834: 0x5FE5, + 2835: 0x5FE6, + 2836: 0x5FE8, + 2837: 0x5FE9, + 2838: 0x5FEC, + 2839: 0x5FEF, + 2840: 0x5FF0, + 2841: 0x5FF2, + 2842: 0x5FF3, + 2843: 0x5FF4, + 2844: 0x5FF6, + 2845: 0x5FF7, + 2846: 0x5FF9, + 2847: 0x5FFA, + 2848: 0x5FFC, + 2849: 0x6007, + 2850: 0x6008, + 2851: 0x6009, + 2852: 0x600B, + 2853: 0x600C, + 2854: 0x6010, + 2855: 0x6011, + 2856: 0x6013, + 2857: 0x6017, + 2858: 0x6018, + 2859: 0x601A, + 2860: 0x601E, + 2861: 0x601F, + 2862: 0x6022, + 2863: 0x6023, + 2864: 0x6024, + 2865: 0x602C, + 2866: 0x602D, + 2867: 0x602E, + 2868: 0x6030, + 2869: 0x6031, + 2870: 0x6032, + 2871: 0x6033, + 2872: 0x6034, + 2873: 0x6036, + 2874: 0x6037, + 2875: 0x6038, + 2876: 0x6039, + 2877: 0x603A, + 2878: 0x603D, + 2879: 0x603E, + 2880: 0x6040, + 2881: 0x6044, + 2882: 0x6045, + 2883: 0x6046, + 2884: 0x6047, + 2885: 0x6048, + 2886: 0x6049, + 2887: 0x604A, + 2888: 0x604C, + 2889: 0x604E, + 2890: 0x604F, + 2891: 0x6051, + 2892: 0x6053, + 2893: 0x6054, + 2894: 0x6056, + 2895: 0x6057, + 2896: 0x6058, + 2897: 0x605B, + 2898: 0x605C, + 2899: 0x605E, + 2900: 0x605F, + 2901: 0x6060, + 2902: 0x6061, + 2903: 0x6065, + 2904: 0x6066, + 2905: 0x606E, + 2906: 0x6071, + 2907: 0x6072, + 2908: 0x6074, + 2909: 0x6075, + 2910: 0x6077, + 2911: 0x607E, + 2912: 0x6080, + 2913: 0x6081, + 2914: 0x6082, + 2915: 0x6085, + 2916: 0x6086, + 2917: 0x6087, + 2918: 0x6088, + 2919: 0x608A, + 2920: 0x608B, + 2921: 0x608E, + 2922: 0x608F, + 2923: 0x6090, + 2924: 0x6091, + 2925: 0x6093, + 2926: 0x6095, + 2927: 0x6097, + 2928: 0x6098, + 2929: 0x6099, + 2930: 0x609C, + 2931: 0x609E, + 2932: 0x60A1, + 2933: 0x60A2, + 2934: 0x60A4, + 2935: 0x60A5, + 2936: 0x60A7, + 2937: 0x60A9, + 2938: 0x60AA, + 2939: 0x60AE, + 2940: 0x60B0, + 2941: 0x60B3, + 2942: 0x60B5, + 2943: 0x60B6, + 2944: 0x60B7, + 2945: 0x60B9, + 2946: 0x60BA, + 2947: 0x60BD, + 2948: 0x60BE, + 2949: 0x60BF, + 2950: 0x60C0, + 2951: 0x60C1, + 2952: 0x60C2, + 2953: 0x60C3, + 2954: 0x60C4, + 2955: 0x60C7, + 2956: 0x60C8, + 2957: 0x60C9, + 2958: 0x60CC, + 2959: 0x60CD, + 2960: 0x60CE, + 2961: 0x60CF, + 2962: 0x60D0, + 2963: 0x60D2, + 2964: 0x60D3, + 2965: 0x60D4, + 2966: 0x60D6, + 2967: 0x60D7, + 2968: 0x60D9, + 2969: 0x60DB, + 2970: 0x60DE, + 2971: 0x60E1, + 2972: 0x60E2, + 2973: 0x60E3, + 2974: 0x60E4, + 2975: 0x60E5, + 2976: 0x60EA, + 2977: 0x60F1, + 2978: 0x60F2, + 2979: 0x60F5, + 2980: 0x60F7, + 2981: 0x60F8, + 2982: 0x60FB, + 2983: 0x60FC, + 2984: 0x60FD, + 2985: 0x60FE, + 2986: 0x60FF, + 2987: 0x6102, + 2988: 0x6103, + 2989: 0x6104, + 2990: 0x6105, + 2991: 0x6107, + 2992: 0x610A, + 2993: 0x610B, + 2994: 0x610C, + 2995: 0x6110, + 2996: 0x6111, + 2997: 0x6112, + 2998: 0x6113, + 2999: 0x6114, + 3000: 0x6116, + 3001: 0x6117, + 3002: 0x6118, + 3003: 0x6119, + 3004: 0x611B, + 3005: 0x611C, + 3006: 0x611D, + 3007: 0x611E, + 3008: 0x6121, + 3009: 0x6122, + 3010: 0x6125, + 3011: 0x6128, + 3012: 0x6129, + 3013: 0x612A, + 3014: 0x612C, + 3015: 0x612D, + 3016: 0x612E, + 3017: 0x612F, + 3018: 0x6130, + 3019: 0x6131, + 3020: 0x6132, + 3021: 0x6133, + 3022: 0x6134, + 3023: 0x6135, + 3024: 0x6136, + 3025: 0x6137, + 3026: 0x6138, + 3027: 0x6139, + 3028: 0x613A, + 3029: 0x613B, + 3030: 0x613C, + 3031: 0x613D, + 3032: 0x613E, + 3033: 0x6140, + 3034: 0x6141, + 3035: 0x6142, + 3036: 0x6143, + 3037: 0x6144, + 3038: 0x6145, + 3039: 0x6146, + 3040: 0x6147, + 3041: 0x6149, + 3042: 0x614B, + 3043: 0x614D, + 3044: 0x614F, + 3045: 0x6150, + 3046: 0x6152, + 3047: 0x6153, + 3048: 0x6154, + 3049: 0x6156, + 3050: 0x6157, + 3051: 0x6158, + 3052: 0x6159, + 3053: 0x615A, + 3054: 0x615B, + 3055: 0x615C, + 3056: 0x615E, + 3057: 0x615F, + 3058: 0x6160, + 3059: 0x6161, + 3060: 0x6163, + 3061: 0x6164, + 3062: 0x6165, + 3063: 0x6166, + 3064: 0x6169, + 3065: 0x616A, + 3066: 0x616B, + 3067: 0x616C, + 3068: 0x616D, + 3069: 0x616E, + 3070: 0x616F, + 3071: 0x6171, + 3072: 0x6172, + 3073: 0x6173, + 3074: 0x6174, + 3075: 0x6176, + 3076: 0x6178, + 3077: 0x6179, + 3078: 0x617A, + 3079: 0x617B, + 3080: 0x617C, + 3081: 0x617D, + 3082: 0x617E, + 3083: 0x617F, + 3084: 0x6180, + 3085: 0x6181, + 3086: 0x6182, + 3087: 0x6183, + 3088: 0x6184, + 3089: 0x6185, + 3090: 0x6186, + 3091: 0x6187, + 3092: 0x6188, + 3093: 0x6189, + 3094: 0x618A, + 3095: 0x618C, + 3096: 0x618D, + 3097: 0x618F, + 3098: 0x6190, + 3099: 0x6191, + 3100: 0x6192, + 3101: 0x6193, + 3102: 0x6195, + 3103: 0x6196, + 3104: 0x6197, + 3105: 0x6198, + 3106: 0x6199, + 3107: 0x619A, + 3108: 0x619B, + 3109: 0x619C, + 3110: 0x619E, + 3111: 0x619F, + 3112: 0x61A0, + 3113: 0x61A1, + 3114: 0x61A2, + 3115: 0x61A3, + 3116: 0x61A4, + 3117: 0x61A5, + 3118: 0x61A6, + 3119: 0x61AA, + 3120: 0x61AB, + 3121: 0x61AD, + 3122: 0x61AE, + 3123: 0x61AF, + 3124: 0x61B0, + 3125: 0x61B1, + 3126: 0x61B2, + 3127: 0x61B3, + 3128: 0x61B4, + 3129: 0x61B5, + 3130: 0x61B6, + 3131: 0x61B8, + 3132: 0x61B9, + 3133: 0x61BA, + 3134: 0x61BB, + 3135: 0x61BC, + 3136: 0x61BD, + 3137: 0x61BF, + 3138: 0x61C0, + 3139: 0x61C1, + 3140: 0x61C3, + 3141: 0x61C4, + 3142: 0x61C5, + 3143: 0x61C6, + 3144: 0x61C7, + 3145: 0x61C9, + 3146: 0x61CC, + 3147: 0x61CD, + 3148: 0x61CE, + 3149: 0x61CF, + 3150: 0x61D0, + 3151: 0x61D3, + 3152: 0x61D5, + 3153: 0x61D6, + 3154: 0x61D7, + 3155: 0x61D8, + 3156: 0x61D9, + 3157: 0x61DA, + 3158: 0x61DB, + 3159: 0x61DC, + 3160: 0x61DD, + 3161: 0x61DE, + 3162: 0x61DF, + 3163: 0x61E0, + 3164: 0x61E1, + 3165: 0x61E2, + 3166: 0x61E3, + 3167: 0x61E4, + 3168: 0x61E5, + 3169: 0x61E7, + 3170: 0x61E8, + 3171: 0x61E9, + 3172: 0x61EA, + 3173: 0x61EB, + 3174: 0x61EC, + 3175: 0x61ED, + 3176: 0x61EE, + 3177: 0x61EF, + 3178: 0x61F0, + 3179: 0x61F1, + 3180: 0x61F2, + 3181: 0x61F3, + 3182: 0x61F4, + 3183: 0x61F6, + 3184: 0x61F7, + 3185: 0x61F8, + 3186: 0x61F9, + 3187: 0x61FA, + 3188: 0x61FB, + 3189: 0x61FC, + 3190: 0x61FD, + 3191: 0x61FE, + 3192: 0x6200, + 3193: 0x6201, + 3194: 0x6202, + 3195: 0x6203, + 3196: 0x6204, + 3197: 0x6205, + 3198: 0x6207, + 3199: 0x6209, + 3200: 0x6213, + 3201: 0x6214, + 3202: 0x6219, + 3203: 0x621C, + 3204: 0x621D, + 3205: 0x621E, + 3206: 0x6220, + 3207: 0x6223, + 3208: 0x6226, + 3209: 0x6227, + 3210: 0x6228, + 3211: 0x6229, + 3212: 0x622B, + 3213: 0x622D, + 3214: 0x622F, + 3215: 0x6230, + 3216: 0x6231, + 3217: 0x6232, + 3218: 0x6235, + 3219: 0x6236, + 3220: 0x6238, + 3221: 0x6239, + 3222: 0x623A, + 3223: 0x623B, + 3224: 0x623C, + 3225: 0x6242, + 3226: 0x6244, + 3227: 0x6245, + 3228: 0x6246, + 3229: 0x624A, + 3230: 0x624F, + 3231: 0x6250, + 3232: 0x6255, + 3233: 0x6256, + 3234: 0x6257, + 3235: 0x6259, + 3236: 0x625A, + 3237: 0x625C, + 3238: 0x625D, + 3239: 0x625E, + 3240: 0x625F, + 3241: 0x6260, + 3242: 0x6261, + 3243: 0x6262, + 3244: 0x6264, + 3245: 0x6265, + 3246: 0x6268, + 3247: 0x6271, + 3248: 0x6272, + 3249: 0x6274, + 3250: 0x6275, + 3251: 0x6277, + 3252: 0x6278, + 3253: 0x627A, + 3254: 0x627B, + 3255: 0x627D, + 3256: 0x6281, + 3257: 0x6282, + 3258: 0x6283, + 3259: 0x6285, + 3260: 0x6286, + 3261: 0x6287, + 3262: 0x6288, + 3263: 0x628B, + 3264: 0x628C, + 3265: 0x628D, + 3266: 0x628E, + 3267: 0x628F, + 3268: 0x6290, + 3269: 0x6294, + 3270: 0x6299, + 3271: 0x629C, + 3272: 0x629D, + 3273: 0x629E, + 3274: 0x62A3, + 3275: 0x62A6, + 3276: 0x62A7, + 3277: 0x62A9, + 3278: 0x62AA, + 3279: 0x62AD, + 3280: 0x62AE, + 3281: 0x62AF, + 3282: 0x62B0, + 3283: 0x62B2, + 3284: 0x62B3, + 3285: 0x62B4, + 3286: 0x62B6, + 3287: 0x62B7, + 3288: 0x62B8, + 3289: 0x62BA, + 3290: 0x62BE, + 3291: 0x62C0, + 3292: 0x62C1, + 3293: 0x62C3, + 3294: 0x62CB, + 3295: 0x62CF, + 3296: 0x62D1, + 3297: 0x62D5, + 3298: 0x62DD, + 3299: 0x62DE, + 3300: 0x62E0, + 3301: 0x62E1, + 3302: 0x62E4, + 3303: 0x62EA, + 3304: 0x62EB, + 3305: 0x62F0, + 3306: 0x62F2, + 3307: 0x62F5, + 3308: 0x62F8, + 3309: 0x62F9, + 3310: 0x62FA, + 3311: 0x62FB, + 3312: 0x6300, + 3313: 0x6303, + 3314: 0x6304, + 3315: 0x6305, + 3316: 0x6306, + 3317: 0x630A, + 3318: 0x630B, + 3319: 0x630C, + 3320: 0x630D, + 3321: 0x630F, + 3322: 0x6310, + 3323: 0x6312, + 3324: 0x6313, + 3325: 0x6314, + 3326: 0x6315, + 3327: 0x6317, + 3328: 0x6318, + 3329: 0x6319, + 3330: 0x631C, + 3331: 0x6326, + 3332: 0x6327, + 3333: 0x6329, + 3334: 0x632C, + 3335: 0x632D, + 3336: 0x632E, + 3337: 0x6330, + 3338: 0x6331, + 3339: 0x6333, + 3340: 0x6334, + 3341: 0x6335, + 3342: 0x6336, + 3343: 0x6337, + 3344: 0x6338, + 3345: 0x633B, + 3346: 0x633C, + 3347: 0x633E, + 3348: 0x633F, + 3349: 0x6340, + 3350: 0x6341, + 3351: 0x6344, + 3352: 0x6347, + 3353: 0x6348, + 3354: 0x634A, + 3355: 0x6351, + 3356: 0x6352, + 3357: 0x6353, + 3358: 0x6354, + 3359: 0x6356, + 3360: 0x6357, + 3361: 0x6358, + 3362: 0x6359, + 3363: 0x635A, + 3364: 0x635B, + 3365: 0x635C, + 3366: 0x635D, + 3367: 0x6360, + 3368: 0x6364, + 3369: 0x6365, + 3370: 0x6366, + 3371: 0x6368, + 3372: 0x636A, + 3373: 0x636B, + 3374: 0x636C, + 3375: 0x636F, + 3376: 0x6370, + 3377: 0x6372, + 3378: 0x6373, + 3379: 0x6374, + 3380: 0x6375, + 3381: 0x6378, + 3382: 0x6379, + 3383: 0x637C, + 3384: 0x637D, + 3385: 0x637E, + 3386: 0x637F, + 3387: 0x6381, + 3388: 0x6383, + 3389: 0x6384, + 3390: 0x6385, + 3391: 0x6386, + 3392: 0x638B, + 3393: 0x638D, + 3394: 0x6391, + 3395: 0x6393, + 3396: 0x6394, + 3397: 0x6395, + 3398: 0x6397, + 3399: 0x6399, + 3400: 0x639A, + 3401: 0x639B, + 3402: 0x639C, + 3403: 0x639D, + 3404: 0x639E, + 3405: 0x639F, + 3406: 0x63A1, + 3407: 0x63A4, + 3408: 0x63A6, + 3409: 0x63AB, + 3410: 0x63AF, + 3411: 0x63B1, + 3412: 0x63B2, + 3413: 0x63B5, + 3414: 0x63B6, + 3415: 0x63B9, + 3416: 0x63BB, + 3417: 0x63BD, + 3418: 0x63BF, + 3419: 0x63C0, + 3420: 0x63C1, + 3421: 0x63C2, + 3422: 0x63C3, + 3423: 0x63C5, + 3424: 0x63C7, + 3425: 0x63C8, + 3426: 0x63CA, + 3427: 0x63CB, + 3428: 0x63CC, + 3429: 0x63D1, + 3430: 0x63D3, + 3431: 0x63D4, + 3432: 0x63D5, + 3433: 0x63D7, + 3434: 0x63D8, + 3435: 0x63D9, + 3436: 0x63DA, + 3437: 0x63DB, + 3438: 0x63DC, + 3439: 0x63DD, + 3440: 0x63DF, + 3441: 0x63E2, + 3442: 0x63E4, + 3443: 0x63E5, + 3444: 0x63E6, + 3445: 0x63E7, + 3446: 0x63E8, + 3447: 0x63EB, + 3448: 0x63EC, + 3449: 0x63EE, + 3450: 0x63EF, + 3451: 0x63F0, + 3452: 0x63F1, + 3453: 0x63F3, + 3454: 0x63F5, + 3455: 0x63F7, + 3456: 0x63F9, + 3457: 0x63FA, + 3458: 0x63FB, + 3459: 0x63FC, + 3460: 0x63FE, + 3461: 0x6403, + 3462: 0x6404, + 3463: 0x6406, + 3464: 0x6407, + 3465: 0x6408, + 3466: 0x6409, + 3467: 0x640A, + 3468: 0x640D, + 3469: 0x640E, + 3470: 0x6411, + 3471: 0x6412, + 3472: 0x6415, + 3473: 0x6416, + 3474: 0x6417, + 3475: 0x6418, + 3476: 0x6419, + 3477: 0x641A, + 3478: 0x641D, + 3479: 0x641F, + 3480: 0x6422, + 3481: 0x6423, + 3482: 0x6424, + 3483: 0x6425, + 3484: 0x6427, + 3485: 0x6428, + 3486: 0x6429, + 3487: 0x642B, + 3488: 0x642E, + 3489: 0x642F, + 3490: 0x6430, + 3491: 0x6431, + 3492: 0x6432, + 3493: 0x6433, + 3494: 0x6435, + 3495: 0x6436, + 3496: 0x6437, + 3497: 0x6438, + 3498: 0x6439, + 3499: 0x643B, + 3500: 0x643C, + 3501: 0x643E, + 3502: 0x6440, + 3503: 0x6442, + 3504: 0x6443, + 3505: 0x6449, + 3506: 0x644B, + 3507: 0x644C, + 3508: 0x644D, + 3509: 0x644E, + 3510: 0x644F, + 3511: 0x6450, + 3512: 0x6451, + 3513: 0x6453, + 3514: 0x6455, + 3515: 0x6456, + 3516: 0x6457, + 3517: 0x6459, + 3518: 0x645A, + 3519: 0x645B, + 3520: 0x645C, + 3521: 0x645D, + 3522: 0x645F, + 3523: 0x6460, + 3524: 0x6461, + 3525: 0x6462, + 3526: 0x6463, + 3527: 0x6464, + 3528: 0x6465, + 3529: 0x6466, + 3530: 0x6468, + 3531: 0x646A, + 3532: 0x646B, + 3533: 0x646C, + 3534: 0x646E, + 3535: 0x646F, + 3536: 0x6470, + 3537: 0x6471, + 3538: 0x6472, + 3539: 0x6473, + 3540: 0x6474, + 3541: 0x6475, + 3542: 0x6476, + 3543: 0x6477, + 3544: 0x647B, + 3545: 0x647C, + 3546: 0x647D, + 3547: 0x647E, + 3548: 0x647F, + 3549: 0x6480, + 3550: 0x6481, + 3551: 0x6483, + 3552: 0x6486, + 3553: 0x6488, + 3554: 0x6489, + 3555: 0x648A, + 3556: 0x648B, + 3557: 0x648C, + 3558: 0x648D, + 3559: 0x648E, + 3560: 0x648F, + 3561: 0x6490, + 3562: 0x6493, + 3563: 0x6494, + 3564: 0x6497, + 3565: 0x6498, + 3566: 0x649A, + 3567: 0x649B, + 3568: 0x649C, + 3569: 0x649D, + 3570: 0x649F, + 3571: 0x64A0, + 3572: 0x64A1, + 3573: 0x64A2, + 3574: 0x64A3, + 3575: 0x64A5, + 3576: 0x64A6, + 3577: 0x64A7, + 3578: 0x64A8, + 3579: 0x64AA, + 3580: 0x64AB, + 3581: 0x64AF, + 3582: 0x64B1, + 3583: 0x64B2, + 3584: 0x64B3, + 3585: 0x64B4, + 3586: 0x64B6, + 3587: 0x64B9, + 3588: 0x64BB, + 3589: 0x64BD, + 3590: 0x64BE, + 3591: 0x64BF, + 3592: 0x64C1, + 3593: 0x64C3, + 3594: 0x64C4, + 3595: 0x64C6, + 3596: 0x64C7, + 3597: 0x64C8, + 3598: 0x64C9, + 3599: 0x64CA, + 3600: 0x64CB, + 3601: 0x64CC, + 3602: 0x64CF, + 3603: 0x64D1, + 3604: 0x64D3, + 3605: 0x64D4, + 3606: 0x64D5, + 3607: 0x64D6, + 3608: 0x64D9, + 3609: 0x64DA, + 3610: 0x64DB, + 3611: 0x64DC, + 3612: 0x64DD, + 3613: 0x64DF, + 3614: 0x64E0, + 3615: 0x64E1, + 3616: 0x64E3, + 3617: 0x64E5, + 3618: 0x64E7, + 3619: 0x64E8, + 3620: 0x64E9, + 3621: 0x64EA, + 3622: 0x64EB, + 3623: 0x64EC, + 3624: 0x64ED, + 3625: 0x64EE, + 3626: 0x64EF, + 3627: 0x64F0, + 3628: 0x64F1, + 3629: 0x64F2, + 3630: 0x64F3, + 3631: 0x64F4, + 3632: 0x64F5, + 3633: 0x64F6, + 3634: 0x64F7, + 3635: 0x64F8, + 3636: 0x64F9, + 3637: 0x64FA, + 3638: 0x64FB, + 3639: 0x64FC, + 3640: 0x64FD, + 3641: 0x64FE, + 3642: 0x64FF, + 3643: 0x6501, + 3644: 0x6502, + 3645: 0x6503, + 3646: 0x6504, + 3647: 0x6505, + 3648: 0x6506, + 3649: 0x6507, + 3650: 0x6508, + 3651: 0x650A, + 3652: 0x650B, + 3653: 0x650C, + 3654: 0x650D, + 3655: 0x650E, + 3656: 0x650F, + 3657: 0x6510, + 3658: 0x6511, + 3659: 0x6513, + 3660: 0x6514, + 3661: 0x6515, + 3662: 0x6516, + 3663: 0x6517, + 3664: 0x6519, + 3665: 0x651A, + 3666: 0x651B, + 3667: 0x651C, + 3668: 0x651D, + 3669: 0x651E, + 3670: 0x651F, + 3671: 0x6520, + 3672: 0x6521, + 3673: 0x6522, + 3674: 0x6523, + 3675: 0x6524, + 3676: 0x6526, + 3677: 0x6527, + 3678: 0x6528, + 3679: 0x6529, + 3680: 0x652A, + 3681: 0x652C, + 3682: 0x652D, + 3683: 0x6530, + 3684: 0x6531, + 3685: 0x6532, + 3686: 0x6533, + 3687: 0x6537, + 3688: 0x653A, + 3689: 0x653C, + 3690: 0x653D, + 3691: 0x6540, + 3692: 0x6541, + 3693: 0x6542, + 3694: 0x6543, + 3695: 0x6544, + 3696: 0x6546, + 3697: 0x6547, + 3698: 0x654A, + 3699: 0x654B, + 3700: 0x654D, + 3701: 0x654E, + 3702: 0x6550, + 3703: 0x6552, + 3704: 0x6553, + 3705: 0x6554, + 3706: 0x6557, + 3707: 0x6558, + 3708: 0x655A, + 3709: 0x655C, + 3710: 0x655F, + 3711: 0x6560, + 3712: 0x6561, + 3713: 0x6564, + 3714: 0x6565, + 3715: 0x6567, + 3716: 0x6568, + 3717: 0x6569, + 3718: 0x656A, + 3719: 0x656D, + 3720: 0x656E, + 3721: 0x656F, + 3722: 0x6571, + 3723: 0x6573, + 3724: 0x6575, + 3725: 0x6576, + 3726: 0x6578, + 3727: 0x6579, + 3728: 0x657A, + 3729: 0x657B, + 3730: 0x657C, + 3731: 0x657D, + 3732: 0x657E, + 3733: 0x657F, + 3734: 0x6580, + 3735: 0x6581, + 3736: 0x6582, + 3737: 0x6583, + 3738: 0x6584, + 3739: 0x6585, + 3740: 0x6586, + 3741: 0x6588, + 3742: 0x6589, + 3743: 0x658A, + 3744: 0x658D, + 3745: 0x658E, + 3746: 0x658F, + 3747: 0x6592, + 3748: 0x6594, + 3749: 0x6595, + 3750: 0x6596, + 3751: 0x6598, + 3752: 0x659A, + 3753: 0x659D, + 3754: 0x659E, + 3755: 0x65A0, + 3756: 0x65A2, + 3757: 0x65A3, + 3758: 0x65A6, + 3759: 0x65A8, + 3760: 0x65AA, + 3761: 0x65AC, + 3762: 0x65AE, + 3763: 0x65B1, + 3764: 0x65B2, + 3765: 0x65B3, + 3766: 0x65B4, + 3767: 0x65B5, + 3768: 0x65B6, + 3769: 0x65B7, + 3770: 0x65B8, + 3771: 0x65BA, + 3772: 0x65BB, + 3773: 0x65BE, + 3774: 0x65BF, + 3775: 0x65C0, + 3776: 0x65C2, + 3777: 0x65C7, + 3778: 0x65C8, + 3779: 0x65C9, + 3780: 0x65CA, + 3781: 0x65CD, + 3782: 0x65D0, + 3783: 0x65D1, + 3784: 0x65D3, + 3785: 0x65D4, + 3786: 0x65D5, + 3787: 0x65D8, + 3788: 0x65D9, + 3789: 0x65DA, + 3790: 0x65DB, + 3791: 0x65DC, + 3792: 0x65DD, + 3793: 0x65DE, + 3794: 0x65DF, + 3795: 0x65E1, + 3796: 0x65E3, + 3797: 0x65E4, + 3798: 0x65EA, + 3799: 0x65EB, + 3800: 0x65F2, + 3801: 0x65F3, + 3802: 0x65F4, + 3803: 0x65F5, + 3804: 0x65F8, + 3805: 0x65F9, + 3806: 0x65FB, + 3807: 0x65FC, + 3808: 0x65FD, + 3809: 0x65FE, + 3810: 0x65FF, + 3811: 0x6601, + 3812: 0x6604, + 3813: 0x6605, + 3814: 0x6607, + 3815: 0x6608, + 3816: 0x6609, + 3817: 0x660B, + 3818: 0x660D, + 3819: 0x6610, + 3820: 0x6611, + 3821: 0x6612, + 3822: 0x6616, + 3823: 0x6617, + 3824: 0x6618, + 3825: 0x661A, + 3826: 0x661B, + 3827: 0x661C, + 3828: 0x661E, + 3829: 0x6621, + 3830: 0x6622, + 3831: 0x6623, + 3832: 0x6624, + 3833: 0x6626, + 3834: 0x6629, + 3835: 0x662A, + 3836: 0x662B, + 3837: 0x662C, + 3838: 0x662E, + 3839: 0x6630, + 3840: 0x6632, + 3841: 0x6633, + 3842: 0x6637, + 3843: 0x6638, + 3844: 0x6639, + 3845: 0x663A, + 3846: 0x663B, + 3847: 0x663D, + 3848: 0x663F, + 3849: 0x6640, + 3850: 0x6642, + 3851: 0x6644, + 3852: 0x6645, + 3853: 0x6646, + 3854: 0x6647, + 3855: 0x6648, + 3856: 0x6649, + 3857: 0x664A, + 3858: 0x664D, + 3859: 0x664E, + 3860: 0x6650, + 3861: 0x6651, + 3862: 0x6658, + 3863: 0x6659, + 3864: 0x665B, + 3865: 0x665C, + 3866: 0x665D, + 3867: 0x665E, + 3868: 0x6660, + 3869: 0x6662, + 3870: 0x6663, + 3871: 0x6665, + 3872: 0x6667, + 3873: 0x6669, + 3874: 0x666A, + 3875: 0x666B, + 3876: 0x666C, + 3877: 0x666D, + 3878: 0x6671, + 3879: 0x6672, + 3880: 0x6673, + 3881: 0x6675, + 3882: 0x6678, + 3883: 0x6679, + 3884: 0x667B, + 3885: 0x667C, + 3886: 0x667D, + 3887: 0x667F, + 3888: 0x6680, + 3889: 0x6681, + 3890: 0x6683, + 3891: 0x6685, + 3892: 0x6686, + 3893: 0x6688, + 3894: 0x6689, + 3895: 0x668A, + 3896: 0x668B, + 3897: 0x668D, + 3898: 0x668E, + 3899: 0x668F, + 3900: 0x6690, + 3901: 0x6692, + 3902: 0x6693, + 3903: 0x6694, + 3904: 0x6695, + 3905: 0x6698, + 3906: 0x6699, + 3907: 0x669A, + 3908: 0x669B, + 3909: 0x669C, + 3910: 0x669E, + 3911: 0x669F, + 3912: 0x66A0, + 3913: 0x66A1, + 3914: 0x66A2, + 3915: 0x66A3, + 3916: 0x66A4, + 3917: 0x66A5, + 3918: 0x66A6, + 3919: 0x66A9, + 3920: 0x66AA, + 3921: 0x66AB, + 3922: 0x66AC, + 3923: 0x66AD, + 3924: 0x66AF, + 3925: 0x66B0, + 3926: 0x66B1, + 3927: 0x66B2, + 3928: 0x66B3, + 3929: 0x66B5, + 3930: 0x66B6, + 3931: 0x66B7, + 3932: 0x66B8, + 3933: 0x66BA, + 3934: 0x66BB, + 3935: 0x66BC, + 3936: 0x66BD, + 3937: 0x66BF, + 3938: 0x66C0, + 3939: 0x66C1, + 3940: 0x66C2, + 3941: 0x66C3, + 3942: 0x66C4, + 3943: 0x66C5, + 3944: 0x66C6, + 3945: 0x66C7, + 3946: 0x66C8, + 3947: 0x66C9, + 3948: 0x66CA, + 3949: 0x66CB, + 3950: 0x66CC, + 3951: 0x66CD, + 3952: 0x66CE, + 3953: 0x66CF, + 3954: 0x66D0, + 3955: 0x66D1, + 3956: 0x66D2, + 3957: 0x66D3, + 3958: 0x66D4, + 3959: 0x66D5, + 3960: 0x66D6, + 3961: 0x66D7, + 3962: 0x66D8, + 3963: 0x66DA, + 3964: 0x66DE, + 3965: 0x66DF, + 3966: 0x66E0, + 3967: 0x66E1, + 3968: 0x66E2, + 3969: 0x66E3, + 3970: 0x66E4, + 3971: 0x66E5, + 3972: 0x66E7, + 3973: 0x66E8, + 3974: 0x66EA, + 3975: 0x66EB, + 3976: 0x66EC, + 3977: 0x66ED, + 3978: 0x66EE, + 3979: 0x66EF, + 3980: 0x66F1, + 3981: 0x66F5, + 3982: 0x66F6, + 3983: 0x66F8, + 3984: 0x66FA, + 3985: 0x66FB, + 3986: 0x66FD, + 3987: 0x6701, + 3988: 0x6702, + 3989: 0x6703, + 3990: 0x6704, + 3991: 0x6705, + 3992: 0x6706, + 3993: 0x6707, + 3994: 0x670C, + 3995: 0x670E, + 3996: 0x670F, + 3997: 0x6711, + 3998: 0x6712, + 3999: 0x6713, + 4000: 0x6716, + 4001: 0x6718, + 4002: 0x6719, + 4003: 0x671A, + 4004: 0x671C, + 4005: 0x671E, + 4006: 0x6720, + 4007: 0x6721, + 4008: 0x6722, + 4009: 0x6723, + 4010: 0x6724, + 4011: 0x6725, + 4012: 0x6727, + 4013: 0x6729, + 4014: 0x672E, + 4015: 0x6730, + 4016: 0x6732, + 4017: 0x6733, + 4018: 0x6736, + 4019: 0x6737, + 4020: 0x6738, + 4021: 0x6739, + 4022: 0x673B, + 4023: 0x673C, + 4024: 0x673E, + 4025: 0x673F, + 4026: 0x6741, + 4027: 0x6744, + 4028: 0x6745, + 4029: 0x6747, + 4030: 0x674A, + 4031: 0x674B, + 4032: 0x674D, + 4033: 0x6752, + 4034: 0x6754, + 4035: 0x6755, + 4036: 0x6757, + 4037: 0x6758, + 4038: 0x6759, + 4039: 0x675A, + 4040: 0x675B, + 4041: 0x675D, + 4042: 0x6762, + 4043: 0x6763, + 4044: 0x6764, + 4045: 0x6766, + 4046: 0x6767, + 4047: 0x676B, + 4048: 0x676C, + 4049: 0x676E, + 4050: 0x6771, + 4051: 0x6774, + 4052: 0x6776, + 4053: 0x6778, + 4054: 0x6779, + 4055: 0x677A, + 4056: 0x677B, + 4057: 0x677D, + 4058: 0x6780, + 4059: 0x6782, + 4060: 0x6783, + 4061: 0x6785, + 4062: 0x6786, + 4063: 0x6788, + 4064: 0x678A, + 4065: 0x678C, + 4066: 0x678D, + 4067: 0x678E, + 4068: 0x678F, + 4069: 0x6791, + 4070: 0x6792, + 4071: 0x6793, + 4072: 0x6794, + 4073: 0x6796, + 4074: 0x6799, + 4075: 0x679B, + 4076: 0x679F, + 4077: 0x67A0, + 4078: 0x67A1, + 4079: 0x67A4, + 4080: 0x67A6, + 4081: 0x67A9, + 4082: 0x67AC, + 4083: 0x67AE, + 4084: 0x67B1, + 4085: 0x67B2, + 4086: 0x67B4, + 4087: 0x67B9, + 4088: 0x67BA, + 4089: 0x67BB, + 4090: 0x67BC, + 4091: 0x67BD, + 4092: 0x67BE, + 4093: 0x67BF, + 4094: 0x67C0, + 4095: 0x67C2, + 4096: 0x67C5, + 4097: 0x67C6, + 4098: 0x67C7, + 4099: 0x67C8, + 4100: 0x67C9, + 4101: 0x67CA, + 4102: 0x67CB, + 4103: 0x67CC, + 4104: 0x67CD, + 4105: 0x67CE, + 4106: 0x67D5, + 4107: 0x67D6, + 4108: 0x67D7, + 4109: 0x67DB, + 4110: 0x67DF, + 4111: 0x67E1, + 4112: 0x67E3, + 4113: 0x67E4, + 4114: 0x67E6, + 4115: 0x67E7, + 4116: 0x67E8, + 4117: 0x67EA, + 4118: 0x67EB, + 4119: 0x67ED, + 4120: 0x67EE, + 4121: 0x67F2, + 4122: 0x67F5, + 4123: 0x67F6, + 4124: 0x67F7, + 4125: 0x67F8, + 4126: 0x67F9, + 4127: 0x67FA, + 4128: 0x67FB, + 4129: 0x67FC, + 4130: 0x67FE, + 4131: 0x6801, + 4132: 0x6802, + 4133: 0x6803, + 4134: 0x6804, + 4135: 0x6806, + 4136: 0x680D, + 4137: 0x6810, + 4138: 0x6812, + 4139: 0x6814, + 4140: 0x6815, + 4141: 0x6818, + 4142: 0x6819, + 4143: 0x681A, + 4144: 0x681B, + 4145: 0x681C, + 4146: 0x681E, + 4147: 0x681F, + 4148: 0x6820, + 4149: 0x6822, + 4150: 0x6823, + 4151: 0x6824, + 4152: 0x6825, + 4153: 0x6826, + 4154: 0x6827, + 4155: 0x6828, + 4156: 0x682B, + 4157: 0x682C, + 4158: 0x682D, + 4159: 0x682E, + 4160: 0x682F, + 4161: 0x6830, + 4162: 0x6831, + 4163: 0x6834, + 4164: 0x6835, + 4165: 0x6836, + 4166: 0x683A, + 4167: 0x683B, + 4168: 0x683F, + 4169: 0x6847, + 4170: 0x684B, + 4171: 0x684D, + 4172: 0x684F, + 4173: 0x6852, + 4174: 0x6856, + 4175: 0x6857, + 4176: 0x6858, + 4177: 0x6859, + 4178: 0x685A, + 4179: 0x685B, + 4180: 0x685C, + 4181: 0x685D, + 4182: 0x685E, + 4183: 0x685F, + 4184: 0x686A, + 4185: 0x686C, + 4186: 0x686D, + 4187: 0x686E, + 4188: 0x686F, + 4189: 0x6870, + 4190: 0x6871, + 4191: 0x6872, + 4192: 0x6873, + 4193: 0x6875, + 4194: 0x6878, + 4195: 0x6879, + 4196: 0x687A, + 4197: 0x687B, + 4198: 0x687C, + 4199: 0x687D, + 4200: 0x687E, + 4201: 0x687F, + 4202: 0x6880, + 4203: 0x6882, + 4204: 0x6884, + 4205: 0x6887, + 4206: 0x6888, + 4207: 0x6889, + 4208: 0x688A, + 4209: 0x688B, + 4210: 0x688C, + 4211: 0x688D, + 4212: 0x688E, + 4213: 0x6890, + 4214: 0x6891, + 4215: 0x6892, + 4216: 0x6894, + 4217: 0x6895, + 4218: 0x6896, + 4219: 0x6898, + 4220: 0x6899, + 4221: 0x689A, + 4222: 0x689B, + 4223: 0x689C, + 4224: 0x689D, + 4225: 0x689E, + 4226: 0x689F, + 4227: 0x68A0, + 4228: 0x68A1, + 4229: 0x68A3, + 4230: 0x68A4, + 4231: 0x68A5, + 4232: 0x68A9, + 4233: 0x68AA, + 4234: 0x68AB, + 4235: 0x68AC, + 4236: 0x68AE, + 4237: 0x68B1, + 4238: 0x68B2, + 4239: 0x68B4, + 4240: 0x68B6, + 4241: 0x68B7, + 4242: 0x68B8, + 4243: 0x68B9, + 4244: 0x68BA, + 4245: 0x68BB, + 4246: 0x68BC, + 4247: 0x68BD, + 4248: 0x68BE, + 4249: 0x68BF, + 4250: 0x68C1, + 4251: 0x68C3, + 4252: 0x68C4, + 4253: 0x68C5, + 4254: 0x68C6, + 4255: 0x68C7, + 4256: 0x68C8, + 4257: 0x68CA, + 4258: 0x68CC, + 4259: 0x68CE, + 4260: 0x68CF, + 4261: 0x68D0, + 4262: 0x68D1, + 4263: 0x68D3, + 4264: 0x68D4, + 4265: 0x68D6, + 4266: 0x68D7, + 4267: 0x68D9, + 4268: 0x68DB, + 4269: 0x68DC, + 4270: 0x68DD, + 4271: 0x68DE, + 4272: 0x68DF, + 4273: 0x68E1, + 4274: 0x68E2, + 4275: 0x68E4, + 4276: 0x68E5, + 4277: 0x68E6, + 4278: 0x68E7, + 4279: 0x68E8, + 4280: 0x68E9, + 4281: 0x68EA, + 4282: 0x68EB, + 4283: 0x68EC, + 4284: 0x68ED, + 4285: 0x68EF, + 4286: 0x68F2, + 4287: 0x68F3, + 4288: 0x68F4, + 4289: 0x68F6, + 4290: 0x68F7, + 4291: 0x68F8, + 4292: 0x68FB, + 4293: 0x68FD, + 4294: 0x68FE, + 4295: 0x68FF, + 4296: 0x6900, + 4297: 0x6902, + 4298: 0x6903, + 4299: 0x6904, + 4300: 0x6906, + 4301: 0x6907, + 4302: 0x6908, + 4303: 0x6909, + 4304: 0x690A, + 4305: 0x690C, + 4306: 0x690F, + 4307: 0x6911, + 4308: 0x6913, + 4309: 0x6914, + 4310: 0x6915, + 4311: 0x6916, + 4312: 0x6917, + 4313: 0x6918, + 4314: 0x6919, + 4315: 0x691A, + 4316: 0x691B, + 4317: 0x691C, + 4318: 0x691D, + 4319: 0x691E, + 4320: 0x6921, + 4321: 0x6922, + 4322: 0x6923, + 4323: 0x6925, + 4324: 0x6926, + 4325: 0x6927, + 4326: 0x6928, + 4327: 0x6929, + 4328: 0x692A, + 4329: 0x692B, + 4330: 0x692C, + 4331: 0x692E, + 4332: 0x692F, + 4333: 0x6931, + 4334: 0x6932, + 4335: 0x6933, + 4336: 0x6935, + 4337: 0x6936, + 4338: 0x6937, + 4339: 0x6938, + 4340: 0x693A, + 4341: 0x693B, + 4342: 0x693C, + 4343: 0x693E, + 4344: 0x6940, + 4345: 0x6941, + 4346: 0x6943, + 4347: 0x6944, + 4348: 0x6945, + 4349: 0x6946, + 4350: 0x6947, + 4351: 0x6948, + 4352: 0x6949, + 4353: 0x694A, + 4354: 0x694B, + 4355: 0x694C, + 4356: 0x694D, + 4357: 0x694E, + 4358: 0x694F, + 4359: 0x6950, + 4360: 0x6951, + 4361: 0x6952, + 4362: 0x6953, + 4363: 0x6955, + 4364: 0x6956, + 4365: 0x6958, + 4366: 0x6959, + 4367: 0x695B, + 4368: 0x695C, + 4369: 0x695F, + 4370: 0x6961, + 4371: 0x6962, + 4372: 0x6964, + 4373: 0x6965, + 4374: 0x6967, + 4375: 0x6968, + 4376: 0x6969, + 4377: 0x696A, + 4378: 0x696C, + 4379: 0x696D, + 4380: 0x696F, + 4381: 0x6970, + 4382: 0x6972, + 4383: 0x6973, + 4384: 0x6974, + 4385: 0x6975, + 4386: 0x6976, + 4387: 0x697A, + 4388: 0x697B, + 4389: 0x697D, + 4390: 0x697E, + 4391: 0x697F, + 4392: 0x6981, + 4393: 0x6983, + 4394: 0x6985, + 4395: 0x698A, + 4396: 0x698B, + 4397: 0x698C, + 4398: 0x698E, + 4399: 0x698F, + 4400: 0x6990, + 4401: 0x6991, + 4402: 0x6992, + 4403: 0x6993, + 4404: 0x6996, + 4405: 0x6997, + 4406: 0x6999, + 4407: 0x699A, + 4408: 0x699D, + 4409: 0x699E, + 4410: 0x699F, + 4411: 0x69A0, + 4412: 0x69A1, + 4413: 0x69A2, + 4414: 0x69A3, + 4415: 0x69A4, + 4416: 0x69A5, + 4417: 0x69A6, + 4418: 0x69A9, + 4419: 0x69AA, + 4420: 0x69AC, + 4421: 0x69AE, + 4422: 0x69AF, + 4423: 0x69B0, + 4424: 0x69B2, + 4425: 0x69B3, + 4426: 0x69B5, + 4427: 0x69B6, + 4428: 0x69B8, + 4429: 0x69B9, + 4430: 0x69BA, + 4431: 0x69BC, + 4432: 0x69BD, + 4433: 0x69BE, + 4434: 0x69BF, + 4435: 0x69C0, + 4436: 0x69C2, + 4437: 0x69C3, + 4438: 0x69C4, + 4439: 0x69C5, + 4440: 0x69C6, + 4441: 0x69C7, + 4442: 0x69C8, + 4443: 0x69C9, + 4444: 0x69CB, + 4445: 0x69CD, + 4446: 0x69CF, + 4447: 0x69D1, + 4448: 0x69D2, + 4449: 0x69D3, + 4450: 0x69D5, + 4451: 0x69D6, + 4452: 0x69D7, + 4453: 0x69D8, + 4454: 0x69D9, + 4455: 0x69DA, + 4456: 0x69DC, + 4457: 0x69DD, + 4458: 0x69DE, + 4459: 0x69E1, + 4460: 0x69E2, + 4461: 0x69E3, + 4462: 0x69E4, + 4463: 0x69E5, + 4464: 0x69E6, + 4465: 0x69E7, + 4466: 0x69E8, + 4467: 0x69E9, + 4468: 0x69EA, + 4469: 0x69EB, + 4470: 0x69EC, + 4471: 0x69EE, + 4472: 0x69EF, + 4473: 0x69F0, + 4474: 0x69F1, + 4475: 0x69F3, + 4476: 0x69F4, + 4477: 0x69F5, + 4478: 0x69F6, + 4479: 0x69F7, + 4480: 0x69F8, + 4481: 0x69F9, + 4482: 0x69FA, + 4483: 0x69FB, + 4484: 0x69FC, + 4485: 0x69FE, + 4486: 0x6A00, + 4487: 0x6A01, + 4488: 0x6A02, + 4489: 0x6A03, + 4490: 0x6A04, + 4491: 0x6A05, + 4492: 0x6A06, + 4493: 0x6A07, + 4494: 0x6A08, + 4495: 0x6A09, + 4496: 0x6A0B, + 4497: 0x6A0C, + 4498: 0x6A0D, + 4499: 0x6A0E, + 4500: 0x6A0F, + 4501: 0x6A10, + 4502: 0x6A11, + 4503: 0x6A12, + 4504: 0x6A13, + 4505: 0x6A14, + 4506: 0x6A15, + 4507: 0x6A16, + 4508: 0x6A19, + 4509: 0x6A1A, + 4510: 0x6A1B, + 4511: 0x6A1C, + 4512: 0x6A1D, + 4513: 0x6A1E, + 4514: 0x6A20, + 4515: 0x6A22, + 4516: 0x6A23, + 4517: 0x6A24, + 4518: 0x6A25, + 4519: 0x6A26, + 4520: 0x6A27, + 4521: 0x6A29, + 4522: 0x6A2B, + 4523: 0x6A2C, + 4524: 0x6A2D, + 4525: 0x6A2E, + 4526: 0x6A30, + 4527: 0x6A32, + 4528: 0x6A33, + 4529: 0x6A34, + 4530: 0x6A36, + 4531: 0x6A37, + 4532: 0x6A38, + 4533: 0x6A39, + 4534: 0x6A3A, + 4535: 0x6A3B, + 4536: 0x6A3C, + 4537: 0x6A3F, + 4538: 0x6A40, + 4539: 0x6A41, + 4540: 0x6A42, + 4541: 0x6A43, + 4542: 0x6A45, + 4543: 0x6A46, + 4544: 0x6A48, + 4545: 0x6A49, + 4546: 0x6A4A, + 4547: 0x6A4B, + 4548: 0x6A4C, + 4549: 0x6A4D, + 4550: 0x6A4E, + 4551: 0x6A4F, + 4552: 0x6A51, + 4553: 0x6A52, + 4554: 0x6A53, + 4555: 0x6A54, + 4556: 0x6A55, + 4557: 0x6A56, + 4558: 0x6A57, + 4559: 0x6A5A, + 4560: 0x6A5C, + 4561: 0x6A5D, + 4562: 0x6A5E, + 4563: 0x6A5F, + 4564: 0x6A60, + 4565: 0x6A62, + 4566: 0x6A63, + 4567: 0x6A64, + 4568: 0x6A66, + 4569: 0x6A67, + 4570: 0x6A68, + 4571: 0x6A69, + 4572: 0x6A6A, + 4573: 0x6A6B, + 4574: 0x6A6C, + 4575: 0x6A6D, + 4576: 0x6A6E, + 4577: 0x6A6F, + 4578: 0x6A70, + 4579: 0x6A72, + 4580: 0x6A73, + 4581: 0x6A74, + 4582: 0x6A75, + 4583: 0x6A76, + 4584: 0x6A77, + 4585: 0x6A78, + 4586: 0x6A7A, + 4587: 0x6A7B, + 4588: 0x6A7D, + 4589: 0x6A7E, + 4590: 0x6A7F, + 4591: 0x6A81, + 4592: 0x6A82, + 4593: 0x6A83, + 4594: 0x6A85, + 4595: 0x6A86, + 4596: 0x6A87, + 4597: 0x6A88, + 4598: 0x6A89, + 4599: 0x6A8A, + 4600: 0x6A8B, + 4601: 0x6A8C, + 4602: 0x6A8D, + 4603: 0x6A8F, + 4604: 0x6A92, + 4605: 0x6A93, + 4606: 0x6A94, + 4607: 0x6A95, + 4608: 0x6A96, + 4609: 0x6A98, + 4610: 0x6A99, + 4611: 0x6A9A, + 4612: 0x6A9B, + 4613: 0x6A9C, + 4614: 0x6A9D, + 4615: 0x6A9E, + 4616: 0x6A9F, + 4617: 0x6AA1, + 4618: 0x6AA2, + 4619: 0x6AA3, + 4620: 0x6AA4, + 4621: 0x6AA5, + 4622: 0x6AA6, + 4623: 0x6AA7, + 4624: 0x6AA8, + 4625: 0x6AAA, + 4626: 0x6AAD, + 4627: 0x6AAE, + 4628: 0x6AAF, + 4629: 0x6AB0, + 4630: 0x6AB1, + 4631: 0x6AB2, + 4632: 0x6AB3, + 4633: 0x6AB4, + 4634: 0x6AB5, + 4635: 0x6AB6, + 4636: 0x6AB7, + 4637: 0x6AB8, + 4638: 0x6AB9, + 4639: 0x6ABA, + 4640: 0x6ABB, + 4641: 0x6ABC, + 4642: 0x6ABD, + 4643: 0x6ABE, + 4644: 0x6ABF, + 4645: 0x6AC0, + 4646: 0x6AC1, + 4647: 0x6AC2, + 4648: 0x6AC3, + 4649: 0x6AC4, + 4650: 0x6AC5, + 4651: 0x6AC6, + 4652: 0x6AC7, + 4653: 0x6AC8, + 4654: 0x6AC9, + 4655: 0x6ACA, + 4656: 0x6ACB, + 4657: 0x6ACC, + 4658: 0x6ACD, + 4659: 0x6ACE, + 4660: 0x6ACF, + 4661: 0x6AD0, + 4662: 0x6AD1, + 4663: 0x6AD2, + 4664: 0x6AD3, + 4665: 0x6AD4, + 4666: 0x6AD5, + 4667: 0x6AD6, + 4668: 0x6AD7, + 4669: 0x6AD8, + 4670: 0x6AD9, + 4671: 0x6ADA, + 4672: 0x6ADB, + 4673: 0x6ADC, + 4674: 0x6ADD, + 4675: 0x6ADE, + 4676: 0x6ADF, + 4677: 0x6AE0, + 4678: 0x6AE1, + 4679: 0x6AE2, + 4680: 0x6AE3, + 4681: 0x6AE4, + 4682: 0x6AE5, + 4683: 0x6AE6, + 4684: 0x6AE7, + 4685: 0x6AE8, + 4686: 0x6AE9, + 4687: 0x6AEA, + 4688: 0x6AEB, + 4689: 0x6AEC, + 4690: 0x6AED, + 4691: 0x6AEE, + 4692: 0x6AEF, + 4693: 0x6AF0, + 4694: 0x6AF1, + 4695: 0x6AF2, + 4696: 0x6AF3, + 4697: 0x6AF4, + 4698: 0x6AF5, + 4699: 0x6AF6, + 4700: 0x6AF7, + 4701: 0x6AF8, + 4702: 0x6AF9, + 4703: 0x6AFA, + 4704: 0x6AFB, + 4705: 0x6AFC, + 4706: 0x6AFD, + 4707: 0x6AFE, + 4708: 0x6AFF, + 4709: 0x6B00, + 4710: 0x6B01, + 4711: 0x6B02, + 4712: 0x6B03, + 4713: 0x6B04, + 4714: 0x6B05, + 4715: 0x6B06, + 4716: 0x6B07, + 4717: 0x6B08, + 4718: 0x6B09, + 4719: 0x6B0A, + 4720: 0x6B0B, + 4721: 0x6B0C, + 4722: 0x6B0D, + 4723: 0x6B0E, + 4724: 0x6B0F, + 4725: 0x6B10, + 4726: 0x6B11, + 4727: 0x6B12, + 4728: 0x6B13, + 4729: 0x6B14, + 4730: 0x6B15, + 4731: 0x6B16, + 4732: 0x6B17, + 4733: 0x6B18, + 4734: 0x6B19, + 4735: 0x6B1A, + 4736: 0x6B1B, + 4737: 0x6B1C, + 4738: 0x6B1D, + 4739: 0x6B1E, + 4740: 0x6B1F, + 4741: 0x6B25, + 4742: 0x6B26, + 4743: 0x6B28, + 4744: 0x6B29, + 4745: 0x6B2A, + 4746: 0x6B2B, + 4747: 0x6B2C, + 4748: 0x6B2D, + 4749: 0x6B2E, + 4750: 0x6B2F, + 4751: 0x6B30, + 4752: 0x6B31, + 4753: 0x6B33, + 4754: 0x6B34, + 4755: 0x6B35, + 4756: 0x6B36, + 4757: 0x6B38, + 4758: 0x6B3B, + 4759: 0x6B3C, + 4760: 0x6B3D, + 4761: 0x6B3F, + 4762: 0x6B40, + 4763: 0x6B41, + 4764: 0x6B42, + 4765: 0x6B44, + 4766: 0x6B45, + 4767: 0x6B48, + 4768: 0x6B4A, + 4769: 0x6B4B, + 4770: 0x6B4D, + 4771: 0x6B4E, + 4772: 0x6B4F, + 4773: 0x6B50, + 4774: 0x6B51, + 4775: 0x6B52, + 4776: 0x6B53, + 4777: 0x6B54, + 4778: 0x6B55, + 4779: 0x6B56, + 4780: 0x6B57, + 4781: 0x6B58, + 4782: 0x6B5A, + 4783: 0x6B5B, + 4784: 0x6B5C, + 4785: 0x6B5D, + 4786: 0x6B5E, + 4787: 0x6B5F, + 4788: 0x6B60, + 4789: 0x6B61, + 4790: 0x6B68, + 4791: 0x6B69, + 4792: 0x6B6B, + 4793: 0x6B6C, + 4794: 0x6B6D, + 4795: 0x6B6E, + 4796: 0x6B6F, + 4797: 0x6B70, + 4798: 0x6B71, + 4799: 0x6B72, + 4800: 0x6B73, + 4801: 0x6B74, + 4802: 0x6B75, + 4803: 0x6B76, + 4804: 0x6B77, + 4805: 0x6B78, + 4806: 0x6B7A, + 4807: 0x6B7D, + 4808: 0x6B7E, + 4809: 0x6B7F, + 4810: 0x6B80, + 4811: 0x6B85, + 4812: 0x6B88, + 4813: 0x6B8C, + 4814: 0x6B8E, + 4815: 0x6B8F, + 4816: 0x6B90, + 4817: 0x6B91, + 4818: 0x6B94, + 4819: 0x6B95, + 4820: 0x6B97, + 4821: 0x6B98, + 4822: 0x6B99, + 4823: 0x6B9C, + 4824: 0x6B9D, + 4825: 0x6B9E, + 4826: 0x6B9F, + 4827: 0x6BA0, + 4828: 0x6BA2, + 4829: 0x6BA3, + 4830: 0x6BA4, + 4831: 0x6BA5, + 4832: 0x6BA6, + 4833: 0x6BA7, + 4834: 0x6BA8, + 4835: 0x6BA9, + 4836: 0x6BAB, + 4837: 0x6BAC, + 4838: 0x6BAD, + 4839: 0x6BAE, + 4840: 0x6BAF, + 4841: 0x6BB0, + 4842: 0x6BB1, + 4843: 0x6BB2, + 4844: 0x6BB6, + 4845: 0x6BB8, + 4846: 0x6BB9, + 4847: 0x6BBA, + 4848: 0x6BBB, + 4849: 0x6BBC, + 4850: 0x6BBD, + 4851: 0x6BBE, + 4852: 0x6BC0, + 4853: 0x6BC3, + 4854: 0x6BC4, + 4855: 0x6BC6, + 4856: 0x6BC7, + 4857: 0x6BC8, + 4858: 0x6BC9, + 4859: 0x6BCA, + 4860: 0x6BCC, + 4861: 0x6BCE, + 4862: 0x6BD0, + 4863: 0x6BD1, + 4864: 0x6BD8, + 4865: 0x6BDA, + 4866: 0x6BDC, + 4867: 0x6BDD, + 4868: 0x6BDE, + 4869: 0x6BDF, + 4870: 0x6BE0, + 4871: 0x6BE2, + 4872: 0x6BE3, + 4873: 0x6BE4, + 4874: 0x6BE5, + 4875: 0x6BE6, + 4876: 0x6BE7, + 4877: 0x6BE8, + 4878: 0x6BE9, + 4879: 0x6BEC, + 4880: 0x6BED, + 4881: 0x6BEE, + 4882: 0x6BF0, + 4883: 0x6BF1, + 4884: 0x6BF2, + 4885: 0x6BF4, + 4886: 0x6BF6, + 4887: 0x6BF7, + 4888: 0x6BF8, + 4889: 0x6BFA, + 4890: 0x6BFB, + 4891: 0x6BFC, + 4892: 0x6BFE, + 4893: 0x6BFF, + 4894: 0x6C00, + 4895: 0x6C01, + 4896: 0x6C02, + 4897: 0x6C03, + 4898: 0x6C04, + 4899: 0x6C08, + 4900: 0x6C09, + 4901: 0x6C0A, + 4902: 0x6C0B, + 4903: 0x6C0C, + 4904: 0x6C0E, + 4905: 0x6C12, + 4906: 0x6C17, + 4907: 0x6C1C, + 4908: 0x6C1D, + 4909: 0x6C1E, + 4910: 0x6C20, + 4911: 0x6C23, + 4912: 0x6C25, + 4913: 0x6C2B, + 4914: 0x6C2C, + 4915: 0x6C2D, + 4916: 0x6C31, + 4917: 0x6C33, + 4918: 0x6C36, + 4919: 0x6C37, + 4920: 0x6C39, + 4921: 0x6C3A, + 4922: 0x6C3B, + 4923: 0x6C3C, + 4924: 0x6C3E, + 4925: 0x6C3F, + 4926: 0x6C43, + 4927: 0x6C44, + 4928: 0x6C45, + 4929: 0x6C48, + 4930: 0x6C4B, + 4931: 0x6C4C, + 4932: 0x6C4D, + 4933: 0x6C4E, + 4934: 0x6C4F, + 4935: 0x6C51, + 4936: 0x6C52, + 4937: 0x6C53, + 4938: 0x6C56, + 4939: 0x6C58, + 4940: 0x6C59, + 4941: 0x6C5A, + 4942: 0x6C62, + 4943: 0x6C63, + 4944: 0x6C65, + 4945: 0x6C66, + 4946: 0x6C67, + 4947: 0x6C6B, + 4948: 0x6C6C, + 4949: 0x6C6D, + 4950: 0x6C6E, + 4951: 0x6C6F, + 4952: 0x6C71, + 4953: 0x6C73, + 4954: 0x6C75, + 4955: 0x6C77, + 4956: 0x6C78, + 4957: 0x6C7A, + 4958: 0x6C7B, + 4959: 0x6C7C, + 4960: 0x6C7F, + 4961: 0x6C80, + 4962: 0x6C84, + 4963: 0x6C87, + 4964: 0x6C8A, + 4965: 0x6C8B, + 4966: 0x6C8D, + 4967: 0x6C8E, + 4968: 0x6C91, + 4969: 0x6C92, + 4970: 0x6C95, + 4971: 0x6C96, + 4972: 0x6C97, + 4973: 0x6C98, + 4974: 0x6C9A, + 4975: 0x6C9C, + 4976: 0x6C9D, + 4977: 0x6C9E, + 4978: 0x6CA0, + 4979: 0x6CA2, + 4980: 0x6CA8, + 4981: 0x6CAC, + 4982: 0x6CAF, + 4983: 0x6CB0, + 4984: 0x6CB4, + 4985: 0x6CB5, + 4986: 0x6CB6, + 4987: 0x6CB7, + 4988: 0x6CBA, + 4989: 0x6CC0, + 4990: 0x6CC1, + 4991: 0x6CC2, + 4992: 0x6CC3, + 4993: 0x6CC6, + 4994: 0x6CC7, + 4995: 0x6CC8, + 4996: 0x6CCB, + 4997: 0x6CCD, + 4998: 0x6CCE, + 4999: 0x6CCF, + 5000: 0x6CD1, + 5001: 0x6CD2, + 5002: 0x6CD8, + 5003: 0x6CD9, + 5004: 0x6CDA, + 5005: 0x6CDC, + 5006: 0x6CDD, + 5007: 0x6CDF, + 5008: 0x6CE4, + 5009: 0x6CE6, + 5010: 0x6CE7, + 5011: 0x6CE9, + 5012: 0x6CEC, + 5013: 0x6CED, + 5014: 0x6CF2, + 5015: 0x6CF4, + 5016: 0x6CF9, + 5017: 0x6CFF, + 5018: 0x6D00, + 5019: 0x6D02, + 5020: 0x6D03, + 5021: 0x6D05, + 5022: 0x6D06, + 5023: 0x6D08, + 5024: 0x6D09, + 5025: 0x6D0A, + 5026: 0x6D0D, + 5027: 0x6D0F, + 5028: 0x6D10, + 5029: 0x6D11, + 5030: 0x6D13, + 5031: 0x6D14, + 5032: 0x6D15, + 5033: 0x6D16, + 5034: 0x6D18, + 5035: 0x6D1C, + 5036: 0x6D1D, + 5037: 0x6D1F, + 5038: 0x6D20, + 5039: 0x6D21, + 5040: 0x6D22, + 5041: 0x6D23, + 5042: 0x6D24, + 5043: 0x6D26, + 5044: 0x6D28, + 5045: 0x6D29, + 5046: 0x6D2C, + 5047: 0x6D2D, + 5048: 0x6D2F, + 5049: 0x6D30, + 5050: 0x6D34, + 5051: 0x6D36, + 5052: 0x6D37, + 5053: 0x6D38, + 5054: 0x6D3A, + 5055: 0x6D3F, + 5056: 0x6D40, + 5057: 0x6D42, + 5058: 0x6D44, + 5059: 0x6D49, + 5060: 0x6D4C, + 5061: 0x6D50, + 5062: 0x6D55, + 5063: 0x6D56, + 5064: 0x6D57, + 5065: 0x6D58, + 5066: 0x6D5B, + 5067: 0x6D5D, + 5068: 0x6D5F, + 5069: 0x6D61, + 5070: 0x6D62, + 5071: 0x6D64, + 5072: 0x6D65, + 5073: 0x6D67, + 5074: 0x6D68, + 5075: 0x6D6B, + 5076: 0x6D6C, + 5077: 0x6D6D, + 5078: 0x6D70, + 5079: 0x6D71, + 5080: 0x6D72, + 5081: 0x6D73, + 5082: 0x6D75, + 5083: 0x6D76, + 5084: 0x6D79, + 5085: 0x6D7A, + 5086: 0x6D7B, + 5087: 0x6D7D, + 5088: 0x6D7E, + 5089: 0x6D7F, + 5090: 0x6D80, + 5091: 0x6D81, + 5092: 0x6D83, + 5093: 0x6D84, + 5094: 0x6D86, + 5095: 0x6D87, + 5096: 0x6D8A, + 5097: 0x6D8B, + 5098: 0x6D8D, + 5099: 0x6D8F, + 5100: 0x6D90, + 5101: 0x6D92, + 5102: 0x6D96, + 5103: 0x6D97, + 5104: 0x6D98, + 5105: 0x6D99, + 5106: 0x6D9A, + 5107: 0x6D9C, + 5108: 0x6DA2, + 5109: 0x6DA5, + 5110: 0x6DAC, + 5111: 0x6DAD, + 5112: 0x6DB0, + 5113: 0x6DB1, + 5114: 0x6DB3, + 5115: 0x6DB4, + 5116: 0x6DB6, + 5117: 0x6DB7, + 5118: 0x6DB9, + 5119: 0x6DBA, + 5120: 0x6DBB, + 5121: 0x6DBC, + 5122: 0x6DBD, + 5123: 0x6DBE, + 5124: 0x6DC1, + 5125: 0x6DC2, + 5126: 0x6DC3, + 5127: 0x6DC8, + 5128: 0x6DC9, + 5129: 0x6DCA, + 5130: 0x6DCD, + 5131: 0x6DCE, + 5132: 0x6DCF, + 5133: 0x6DD0, + 5134: 0x6DD2, + 5135: 0x6DD3, + 5136: 0x6DD4, + 5137: 0x6DD5, + 5138: 0x6DD7, + 5139: 0x6DDA, + 5140: 0x6DDB, + 5141: 0x6DDC, + 5142: 0x6DDF, + 5143: 0x6DE2, + 5144: 0x6DE3, + 5145: 0x6DE5, + 5146: 0x6DE7, + 5147: 0x6DE8, + 5148: 0x6DE9, + 5149: 0x6DEA, + 5150: 0x6DED, + 5151: 0x6DEF, + 5152: 0x6DF0, + 5153: 0x6DF2, + 5154: 0x6DF4, + 5155: 0x6DF5, + 5156: 0x6DF6, + 5157: 0x6DF8, + 5158: 0x6DFA, + 5159: 0x6DFD, + 5160: 0x6DFE, + 5161: 0x6DFF, + 5162: 0x6E00, + 5163: 0x6E01, + 5164: 0x6E02, + 5165: 0x6E03, + 5166: 0x6E04, + 5167: 0x6E06, + 5168: 0x6E07, + 5169: 0x6E08, + 5170: 0x6E09, + 5171: 0x6E0B, + 5172: 0x6E0F, + 5173: 0x6E12, + 5174: 0x6E13, + 5175: 0x6E15, + 5176: 0x6E18, + 5177: 0x6E19, + 5178: 0x6E1B, + 5179: 0x6E1C, + 5180: 0x6E1E, + 5181: 0x6E1F, + 5182: 0x6E22, + 5183: 0x6E26, + 5184: 0x6E27, + 5185: 0x6E28, + 5186: 0x6E2A, + 5187: 0x6E2C, + 5188: 0x6E2E, + 5189: 0x6E30, + 5190: 0x6E31, + 5191: 0x6E33, + 5192: 0x6E35, + 5193: 0x6E36, + 5194: 0x6E37, + 5195: 0x6E39, + 5196: 0x6E3B, + 5197: 0x6E3C, + 5198: 0x6E3D, + 5199: 0x6E3E, + 5200: 0x6E3F, + 5201: 0x6E40, + 5202: 0x6E41, + 5203: 0x6E42, + 5204: 0x6E45, + 5205: 0x6E46, + 5206: 0x6E47, + 5207: 0x6E48, + 5208: 0x6E49, + 5209: 0x6E4A, + 5210: 0x6E4B, + 5211: 0x6E4C, + 5212: 0x6E4F, + 5213: 0x6E50, + 5214: 0x6E51, + 5215: 0x6E52, + 5216: 0x6E55, + 5217: 0x6E57, + 5218: 0x6E59, + 5219: 0x6E5A, + 5220: 0x6E5C, + 5221: 0x6E5D, + 5222: 0x6E5E, + 5223: 0x6E60, + 5224: 0x6E61, + 5225: 0x6E62, + 5226: 0x6E63, + 5227: 0x6E64, + 5228: 0x6E65, + 5229: 0x6E66, + 5230: 0x6E67, + 5231: 0x6E68, + 5232: 0x6E69, + 5233: 0x6E6A, + 5234: 0x6E6C, + 5235: 0x6E6D, + 5236: 0x6E6F, + 5237: 0x6E70, + 5238: 0x6E71, + 5239: 0x6E72, + 5240: 0x6E73, + 5241: 0x6E74, + 5242: 0x6E75, + 5243: 0x6E76, + 5244: 0x6E77, + 5245: 0x6E78, + 5246: 0x6E79, + 5247: 0x6E7A, + 5248: 0x6E7B, + 5249: 0x6E7C, + 5250: 0x6E7D, + 5251: 0x6E80, + 5252: 0x6E81, + 5253: 0x6E82, + 5254: 0x6E84, + 5255: 0x6E87, + 5256: 0x6E88, + 5257: 0x6E8A, + 5258: 0x6E8B, + 5259: 0x6E8C, + 5260: 0x6E8D, + 5261: 0x6E8E, + 5262: 0x6E91, + 5263: 0x6E92, + 5264: 0x6E93, + 5265: 0x6E94, + 5266: 0x6E95, + 5267: 0x6E96, + 5268: 0x6E97, + 5269: 0x6E99, + 5270: 0x6E9A, + 5271: 0x6E9B, + 5272: 0x6E9D, + 5273: 0x6E9E, + 5274: 0x6EA0, + 5275: 0x6EA1, + 5276: 0x6EA3, + 5277: 0x6EA4, + 5278: 0x6EA6, + 5279: 0x6EA8, + 5280: 0x6EA9, + 5281: 0x6EAB, + 5282: 0x6EAC, + 5283: 0x6EAD, + 5284: 0x6EAE, + 5285: 0x6EB0, + 5286: 0x6EB3, + 5287: 0x6EB5, + 5288: 0x6EB8, + 5289: 0x6EB9, + 5290: 0x6EBC, + 5291: 0x6EBE, + 5292: 0x6EBF, + 5293: 0x6EC0, + 5294: 0x6EC3, + 5295: 0x6EC4, + 5296: 0x6EC5, + 5297: 0x6EC6, + 5298: 0x6EC8, + 5299: 0x6EC9, + 5300: 0x6ECA, + 5301: 0x6ECC, + 5302: 0x6ECD, + 5303: 0x6ECE, + 5304: 0x6ED0, + 5305: 0x6ED2, + 5306: 0x6ED6, + 5307: 0x6ED8, + 5308: 0x6ED9, + 5309: 0x6EDB, + 5310: 0x6EDC, + 5311: 0x6EDD, + 5312: 0x6EE3, + 5313: 0x6EE7, + 5314: 0x6EEA, + 5315: 0x6EEB, + 5316: 0x6EEC, + 5317: 0x6EED, + 5318: 0x6EEE, + 5319: 0x6EEF, + 5320: 0x6EF0, + 5321: 0x6EF1, + 5322: 0x6EF2, + 5323: 0x6EF3, + 5324: 0x6EF5, + 5325: 0x6EF6, + 5326: 0x6EF7, + 5327: 0x6EF8, + 5328: 0x6EFA, + 5329: 0x6EFB, + 5330: 0x6EFC, + 5331: 0x6EFD, + 5332: 0x6EFE, + 5333: 0x6EFF, + 5334: 0x6F00, + 5335: 0x6F01, + 5336: 0x6F03, + 5337: 0x6F04, + 5338: 0x6F05, + 5339: 0x6F07, + 5340: 0x6F08, + 5341: 0x6F0A, + 5342: 0x6F0B, + 5343: 0x6F0C, + 5344: 0x6F0D, + 5345: 0x6F0E, + 5346: 0x6F10, + 5347: 0x6F11, + 5348: 0x6F12, + 5349: 0x6F16, + 5350: 0x6F17, + 5351: 0x6F18, + 5352: 0x6F19, + 5353: 0x6F1A, + 5354: 0x6F1B, + 5355: 0x6F1C, + 5356: 0x6F1D, + 5357: 0x6F1E, + 5358: 0x6F1F, + 5359: 0x6F21, + 5360: 0x6F22, + 5361: 0x6F23, + 5362: 0x6F25, + 5363: 0x6F26, + 5364: 0x6F27, + 5365: 0x6F28, + 5366: 0x6F2C, + 5367: 0x6F2E, + 5368: 0x6F30, + 5369: 0x6F32, + 5370: 0x6F34, + 5371: 0x6F35, + 5372: 0x6F37, + 5373: 0x6F38, + 5374: 0x6F39, + 5375: 0x6F3A, + 5376: 0x6F3B, + 5377: 0x6F3C, + 5378: 0x6F3D, + 5379: 0x6F3F, + 5380: 0x6F40, + 5381: 0x6F41, + 5382: 0x6F42, + 5383: 0x6F43, + 5384: 0x6F44, + 5385: 0x6F45, + 5386: 0x6F48, + 5387: 0x6F49, + 5388: 0x6F4A, + 5389: 0x6F4C, + 5390: 0x6F4E, + 5391: 0x6F4F, + 5392: 0x6F50, + 5393: 0x6F51, + 5394: 0x6F52, + 5395: 0x6F53, + 5396: 0x6F54, + 5397: 0x6F55, + 5398: 0x6F56, + 5399: 0x6F57, + 5400: 0x6F59, + 5401: 0x6F5A, + 5402: 0x6F5B, + 5403: 0x6F5D, + 5404: 0x6F5F, + 5405: 0x6F60, + 5406: 0x6F61, + 5407: 0x6F63, + 5408: 0x6F64, + 5409: 0x6F65, + 5410: 0x6F67, + 5411: 0x6F68, + 5412: 0x6F69, + 5413: 0x6F6A, + 5414: 0x6F6B, + 5415: 0x6F6C, + 5416: 0x6F6F, + 5417: 0x6F70, + 5418: 0x6F71, + 5419: 0x6F73, + 5420: 0x6F75, + 5421: 0x6F76, + 5422: 0x6F77, + 5423: 0x6F79, + 5424: 0x6F7B, + 5425: 0x6F7D, + 5426: 0x6F7E, + 5427: 0x6F7F, + 5428: 0x6F80, + 5429: 0x6F81, + 5430: 0x6F82, + 5431: 0x6F83, + 5432: 0x6F85, + 5433: 0x6F86, + 5434: 0x6F87, + 5435: 0x6F8A, + 5436: 0x6F8B, + 5437: 0x6F8F, + 5438: 0x6F90, + 5439: 0x6F91, + 5440: 0x6F92, + 5441: 0x6F93, + 5442: 0x6F94, + 5443: 0x6F95, + 5444: 0x6F96, + 5445: 0x6F97, + 5446: 0x6F98, + 5447: 0x6F99, + 5448: 0x6F9A, + 5449: 0x6F9B, + 5450: 0x6F9D, + 5451: 0x6F9E, + 5452: 0x6F9F, + 5453: 0x6FA0, + 5454: 0x6FA2, + 5455: 0x6FA3, + 5456: 0x6FA4, + 5457: 0x6FA5, + 5458: 0x6FA6, + 5459: 0x6FA8, + 5460: 0x6FA9, + 5461: 0x6FAA, + 5462: 0x6FAB, + 5463: 0x6FAC, + 5464: 0x6FAD, + 5465: 0x6FAE, + 5466: 0x6FAF, + 5467: 0x6FB0, + 5468: 0x6FB1, + 5469: 0x6FB2, + 5470: 0x6FB4, + 5471: 0x6FB5, + 5472: 0x6FB7, + 5473: 0x6FB8, + 5474: 0x6FBA, + 5475: 0x6FBB, + 5476: 0x6FBC, + 5477: 0x6FBD, + 5478: 0x6FBE, + 5479: 0x6FBF, + 5480: 0x6FC1, + 5481: 0x6FC3, + 5482: 0x6FC4, + 5483: 0x6FC5, + 5484: 0x6FC6, + 5485: 0x6FC7, + 5486: 0x6FC8, + 5487: 0x6FCA, + 5488: 0x6FCB, + 5489: 0x6FCC, + 5490: 0x6FCD, + 5491: 0x6FCE, + 5492: 0x6FCF, + 5493: 0x6FD0, + 5494: 0x6FD3, + 5495: 0x6FD4, + 5496: 0x6FD5, + 5497: 0x6FD6, + 5498: 0x6FD7, + 5499: 0x6FD8, + 5500: 0x6FD9, + 5501: 0x6FDA, + 5502: 0x6FDB, + 5503: 0x6FDC, + 5504: 0x6FDD, + 5505: 0x6FDF, + 5506: 0x6FE2, + 5507: 0x6FE3, + 5508: 0x6FE4, + 5509: 0x6FE5, + 5510: 0x6FE6, + 5511: 0x6FE7, + 5512: 0x6FE8, + 5513: 0x6FE9, + 5514: 0x6FEA, + 5515: 0x6FEB, + 5516: 0x6FEC, + 5517: 0x6FED, + 5518: 0x6FF0, + 5519: 0x6FF1, + 5520: 0x6FF2, + 5521: 0x6FF3, + 5522: 0x6FF4, + 5523: 0x6FF5, + 5524: 0x6FF6, + 5525: 0x6FF7, + 5526: 0x6FF8, + 5527: 0x6FF9, + 5528: 0x6FFA, + 5529: 0x6FFB, + 5530: 0x6FFC, + 5531: 0x6FFD, + 5532: 0x6FFE, + 5533: 0x6FFF, + 5534: 0x7000, + 5535: 0x7001, + 5536: 0x7002, + 5537: 0x7003, + 5538: 0x7004, + 5539: 0x7005, + 5540: 0x7006, + 5541: 0x7007, + 5542: 0x7008, + 5543: 0x7009, + 5544: 0x700A, + 5545: 0x700B, + 5546: 0x700C, + 5547: 0x700D, + 5548: 0x700E, + 5549: 0x700F, + 5550: 0x7010, + 5551: 0x7012, + 5552: 0x7013, + 5553: 0x7014, + 5554: 0x7015, + 5555: 0x7016, + 5556: 0x7017, + 5557: 0x7018, + 5558: 0x7019, + 5559: 0x701C, + 5560: 0x701D, + 5561: 0x701E, + 5562: 0x701F, + 5563: 0x7020, + 5564: 0x7021, + 5565: 0x7022, + 5566: 0x7024, + 5567: 0x7025, + 5568: 0x7026, + 5569: 0x7027, + 5570: 0x7028, + 5571: 0x7029, + 5572: 0x702A, + 5573: 0x702B, + 5574: 0x702C, + 5575: 0x702D, + 5576: 0x702E, + 5577: 0x702F, + 5578: 0x7030, + 5579: 0x7031, + 5580: 0x7032, + 5581: 0x7033, + 5582: 0x7034, + 5583: 0x7036, + 5584: 0x7037, + 5585: 0x7038, + 5586: 0x703A, + 5587: 0x703B, + 5588: 0x703C, + 5589: 0x703D, + 5590: 0x703E, + 5591: 0x703F, + 5592: 0x7040, + 5593: 0x7041, + 5594: 0x7042, + 5595: 0x7043, + 5596: 0x7044, + 5597: 0x7045, + 5598: 0x7046, + 5599: 0x7047, + 5600: 0x7048, + 5601: 0x7049, + 5602: 0x704A, + 5603: 0x704B, + 5604: 0x704D, + 5605: 0x704E, + 5606: 0x7050, + 5607: 0x7051, + 5608: 0x7052, + 5609: 0x7053, + 5610: 0x7054, + 5611: 0x7055, + 5612: 0x7056, + 5613: 0x7057, + 5614: 0x7058, + 5615: 0x7059, + 5616: 0x705A, + 5617: 0x705B, + 5618: 0x705C, + 5619: 0x705D, + 5620: 0x705F, + 5621: 0x7060, + 5622: 0x7061, + 5623: 0x7062, + 5624: 0x7063, + 5625: 0x7064, + 5626: 0x7065, + 5627: 0x7066, + 5628: 0x7067, + 5629: 0x7068, + 5630: 0x7069, + 5631: 0x706A, + 5632: 0x706E, + 5633: 0x7071, + 5634: 0x7072, + 5635: 0x7073, + 5636: 0x7074, + 5637: 0x7077, + 5638: 0x7079, + 5639: 0x707A, + 5640: 0x707B, + 5641: 0x707D, + 5642: 0x7081, + 5643: 0x7082, + 5644: 0x7083, + 5645: 0x7084, + 5646: 0x7086, + 5647: 0x7087, + 5648: 0x7088, + 5649: 0x708B, + 5650: 0x708C, + 5651: 0x708D, + 5652: 0x708F, + 5653: 0x7090, + 5654: 0x7091, + 5655: 0x7093, + 5656: 0x7097, + 5657: 0x7098, + 5658: 0x709A, + 5659: 0x709B, + 5660: 0x709E, + 5661: 0x709F, + 5662: 0x70A0, + 5663: 0x70A1, + 5664: 0x70A2, + 5665: 0x70A3, + 5666: 0x70A4, + 5667: 0x70A5, + 5668: 0x70A6, + 5669: 0x70A7, + 5670: 0x70A8, + 5671: 0x70A9, + 5672: 0x70AA, + 5673: 0x70B0, + 5674: 0x70B2, + 5675: 0x70B4, + 5676: 0x70B5, + 5677: 0x70B6, + 5678: 0x70BA, + 5679: 0x70BE, + 5680: 0x70BF, + 5681: 0x70C4, + 5682: 0x70C5, + 5683: 0x70C6, + 5684: 0x70C7, + 5685: 0x70C9, + 5686: 0x70CB, + 5687: 0x70CC, + 5688: 0x70CD, + 5689: 0x70CE, + 5690: 0x70CF, + 5691: 0x70D0, + 5692: 0x70D1, + 5693: 0x70D2, + 5694: 0x70D3, + 5695: 0x70D4, + 5696: 0x70D5, + 5697: 0x70D6, + 5698: 0x70D7, + 5699: 0x70DA, + 5700: 0x70DC, + 5701: 0x70DD, + 5702: 0x70DE, + 5703: 0x70E0, + 5704: 0x70E1, + 5705: 0x70E2, + 5706: 0x70E3, + 5707: 0x70E5, + 5708: 0x70EA, + 5709: 0x70EE, + 5710: 0x70F0, + 5711: 0x70F1, + 5712: 0x70F2, + 5713: 0x70F3, + 5714: 0x70F4, + 5715: 0x70F5, + 5716: 0x70F6, + 5717: 0x70F8, + 5718: 0x70FA, + 5719: 0x70FB, + 5720: 0x70FC, + 5721: 0x70FE, + 5722: 0x70FF, + 5723: 0x7100, + 5724: 0x7101, + 5725: 0x7102, + 5726: 0x7103, + 5727: 0x7104, + 5728: 0x7105, + 5729: 0x7106, + 5730: 0x7107, + 5731: 0x7108, + 5732: 0x710B, + 5733: 0x710C, + 5734: 0x710D, + 5735: 0x710E, + 5736: 0x710F, + 5737: 0x7111, + 5738: 0x7112, + 5739: 0x7114, + 5740: 0x7117, + 5741: 0x711B, + 5742: 0x711C, + 5743: 0x711D, + 5744: 0x711E, + 5745: 0x711F, + 5746: 0x7120, + 5747: 0x7121, + 5748: 0x7122, + 5749: 0x7123, + 5750: 0x7124, + 5751: 0x7125, + 5752: 0x7127, + 5753: 0x7128, + 5754: 0x7129, + 5755: 0x712A, + 5756: 0x712B, + 5757: 0x712C, + 5758: 0x712D, + 5759: 0x712E, + 5760: 0x7132, + 5761: 0x7133, + 5762: 0x7134, + 5763: 0x7135, + 5764: 0x7137, + 5765: 0x7138, + 5766: 0x7139, + 5767: 0x713A, + 5768: 0x713B, + 5769: 0x713C, + 5770: 0x713D, + 5771: 0x713E, + 5772: 0x713F, + 5773: 0x7140, + 5774: 0x7141, + 5775: 0x7142, + 5776: 0x7143, + 5777: 0x7144, + 5778: 0x7146, + 5779: 0x7147, + 5780: 0x7148, + 5781: 0x7149, + 5782: 0x714B, + 5783: 0x714D, + 5784: 0x714F, + 5785: 0x7150, + 5786: 0x7151, + 5787: 0x7152, + 5788: 0x7153, + 5789: 0x7154, + 5790: 0x7155, + 5791: 0x7156, + 5792: 0x7157, + 5793: 0x7158, + 5794: 0x7159, + 5795: 0x715A, + 5796: 0x715B, + 5797: 0x715D, + 5798: 0x715F, + 5799: 0x7160, + 5800: 0x7161, + 5801: 0x7162, + 5802: 0x7163, + 5803: 0x7165, + 5804: 0x7169, + 5805: 0x716A, + 5806: 0x716B, + 5807: 0x716C, + 5808: 0x716D, + 5809: 0x716F, + 5810: 0x7170, + 5811: 0x7171, + 5812: 0x7174, + 5813: 0x7175, + 5814: 0x7176, + 5815: 0x7177, + 5816: 0x7179, + 5817: 0x717B, + 5818: 0x717C, + 5819: 0x717E, + 5820: 0x717F, + 5821: 0x7180, + 5822: 0x7181, + 5823: 0x7182, + 5824: 0x7183, + 5825: 0x7185, + 5826: 0x7186, + 5827: 0x7187, + 5828: 0x7188, + 5829: 0x7189, + 5830: 0x718B, + 5831: 0x718C, + 5832: 0x718D, + 5833: 0x718E, + 5834: 0x7190, + 5835: 0x7191, + 5836: 0x7192, + 5837: 0x7193, + 5838: 0x7195, + 5839: 0x7196, + 5840: 0x7197, + 5841: 0x719A, + 5842: 0x719B, + 5843: 0x719C, + 5844: 0x719D, + 5845: 0x719E, + 5846: 0x71A1, + 5847: 0x71A2, + 5848: 0x71A3, + 5849: 0x71A4, + 5850: 0x71A5, + 5851: 0x71A6, + 5852: 0x71A7, + 5853: 0x71A9, + 5854: 0x71AA, + 5855: 0x71AB, + 5856: 0x71AD, + 5857: 0x71AE, + 5858: 0x71AF, + 5859: 0x71B0, + 5860: 0x71B1, + 5861: 0x71B2, + 5862: 0x71B4, + 5863: 0x71B6, + 5864: 0x71B7, + 5865: 0x71B8, + 5866: 0x71BA, + 5867: 0x71BB, + 5868: 0x71BC, + 5869: 0x71BD, + 5870: 0x71BE, + 5871: 0x71BF, + 5872: 0x71C0, + 5873: 0x71C1, + 5874: 0x71C2, + 5875: 0x71C4, + 5876: 0x71C5, + 5877: 0x71C6, + 5878: 0x71C7, + 5879: 0x71C8, + 5880: 0x71C9, + 5881: 0x71CA, + 5882: 0x71CB, + 5883: 0x71CC, + 5884: 0x71CD, + 5885: 0x71CF, + 5886: 0x71D0, + 5887: 0x71D1, + 5888: 0x71D2, + 5889: 0x71D3, + 5890: 0x71D6, + 5891: 0x71D7, + 5892: 0x71D8, + 5893: 0x71D9, + 5894: 0x71DA, + 5895: 0x71DB, + 5896: 0x71DC, + 5897: 0x71DD, + 5898: 0x71DE, + 5899: 0x71DF, + 5900: 0x71E1, + 5901: 0x71E2, + 5902: 0x71E3, + 5903: 0x71E4, + 5904: 0x71E6, + 5905: 0x71E8, + 5906: 0x71E9, + 5907: 0x71EA, + 5908: 0x71EB, + 5909: 0x71EC, + 5910: 0x71ED, + 5911: 0x71EF, + 5912: 0x71F0, + 5913: 0x71F1, + 5914: 0x71F2, + 5915: 0x71F3, + 5916: 0x71F4, + 5917: 0x71F5, + 5918: 0x71F6, + 5919: 0x71F7, + 5920: 0x71F8, + 5921: 0x71FA, + 5922: 0x71FB, + 5923: 0x71FC, + 5924: 0x71FD, + 5925: 0x71FE, + 5926: 0x71FF, + 5927: 0x7200, + 5928: 0x7201, + 5929: 0x7202, + 5930: 0x7203, + 5931: 0x7204, + 5932: 0x7205, + 5933: 0x7207, + 5934: 0x7208, + 5935: 0x7209, + 5936: 0x720A, + 5937: 0x720B, + 5938: 0x720C, + 5939: 0x720D, + 5940: 0x720E, + 5941: 0x720F, + 5942: 0x7210, + 5943: 0x7211, + 5944: 0x7212, + 5945: 0x7213, + 5946: 0x7214, + 5947: 0x7215, + 5948: 0x7216, + 5949: 0x7217, + 5950: 0x7218, + 5951: 0x7219, + 5952: 0x721A, + 5953: 0x721B, + 5954: 0x721C, + 5955: 0x721E, + 5956: 0x721F, + 5957: 0x7220, + 5958: 0x7221, + 5959: 0x7222, + 5960: 0x7223, + 5961: 0x7224, + 5962: 0x7225, + 5963: 0x7226, + 5964: 0x7227, + 5965: 0x7229, + 5966: 0x722B, + 5967: 0x722D, + 5968: 0x722E, + 5969: 0x722F, + 5970: 0x7232, + 5971: 0x7233, + 5972: 0x7234, + 5973: 0x723A, + 5974: 0x723C, + 5975: 0x723E, + 5976: 0x7240, + 5977: 0x7241, + 5978: 0x7242, + 5979: 0x7243, + 5980: 0x7244, + 5981: 0x7245, + 5982: 0x7246, + 5983: 0x7249, + 5984: 0x724A, + 5985: 0x724B, + 5986: 0x724E, + 5987: 0x724F, + 5988: 0x7250, + 5989: 0x7251, + 5990: 0x7253, + 5991: 0x7254, + 5992: 0x7255, + 5993: 0x7257, + 5994: 0x7258, + 5995: 0x725A, + 5996: 0x725C, + 5997: 0x725E, + 5998: 0x7260, + 5999: 0x7263, + 6000: 0x7264, + 6001: 0x7265, + 6002: 0x7268, + 6003: 0x726A, + 6004: 0x726B, + 6005: 0x726C, + 6006: 0x726D, + 6007: 0x7270, + 6008: 0x7271, + 6009: 0x7273, + 6010: 0x7274, + 6011: 0x7276, + 6012: 0x7277, + 6013: 0x7278, + 6014: 0x727B, + 6015: 0x727C, + 6016: 0x727D, + 6017: 0x7282, + 6018: 0x7283, + 6019: 0x7285, + 6020: 0x7286, + 6021: 0x7287, + 6022: 0x7288, + 6023: 0x7289, + 6024: 0x728C, + 6025: 0x728E, + 6026: 0x7290, + 6027: 0x7291, + 6028: 0x7293, + 6029: 0x7294, + 6030: 0x7295, + 6031: 0x7296, + 6032: 0x7297, + 6033: 0x7298, + 6034: 0x7299, + 6035: 0x729A, + 6036: 0x729B, + 6037: 0x729C, + 6038: 0x729D, + 6039: 0x729E, + 6040: 0x72A0, + 6041: 0x72A1, + 6042: 0x72A2, + 6043: 0x72A3, + 6044: 0x72A4, + 6045: 0x72A5, + 6046: 0x72A6, + 6047: 0x72A7, + 6048: 0x72A8, + 6049: 0x72A9, + 6050: 0x72AA, + 6051: 0x72AB, + 6052: 0x72AE, + 6053: 0x72B1, + 6054: 0x72B2, + 6055: 0x72B3, + 6056: 0x72B5, + 6057: 0x72BA, + 6058: 0x72BB, + 6059: 0x72BC, + 6060: 0x72BD, + 6061: 0x72BE, + 6062: 0x72BF, + 6063: 0x72C0, + 6064: 0x72C5, + 6065: 0x72C6, + 6066: 0x72C7, + 6067: 0x72C9, + 6068: 0x72CA, + 6069: 0x72CB, + 6070: 0x72CC, + 6071: 0x72CF, + 6072: 0x72D1, + 6073: 0x72D3, + 6074: 0x72D4, + 6075: 0x72D5, + 6076: 0x72D6, + 6077: 0x72D8, + 6078: 0x72DA, + 6079: 0x72DB, + 6176: 0x3000, + 6177: 0x3001, + 6178: 0x3002, + 6179: 0x00B7, + 6180: 0x02C9, + 6181: 0x02C7, + 6182: 0x00A8, + 6183: 0x3003, + 6184: 0x3005, + 6185: 0x2014, + 6186: 0xFF5E, + 6187: 0x2016, + 6188: 0x2026, + 6189: 0x2018, + 6190: 0x2019, + 6191: 0x201C, + 6192: 0x201D, + 6193: 0x3014, + 6194: 0x3015, + 6195: 0x3008, + 6196: 0x3009, + 6197: 0x300A, + 6198: 0x300B, + 6199: 0x300C, + 6200: 0x300D, + 6201: 0x300E, + 6202: 0x300F, + 6203: 0x3016, + 6204: 0x3017, + 6205: 0x3010, + 6206: 0x3011, + 6207: 0x00B1, + 6208: 0x00D7, + 6209: 0x00F7, + 6210: 0x2236, + 6211: 0x2227, + 6212: 0x2228, + 6213: 0x2211, + 6214: 0x220F, + 6215: 0x222A, + 6216: 0x2229, + 6217: 0x2208, + 6218: 0x2237, + 6219: 0x221A, + 6220: 0x22A5, + 6221: 0x2225, + 6222: 0x2220, + 6223: 0x2312, + 6224: 0x2299, + 6225: 0x222B, + 6226: 0x222E, + 6227: 0x2261, + 6228: 0x224C, + 6229: 0x2248, + 6230: 0x223D, + 6231: 0x221D, + 6232: 0x2260, + 6233: 0x226E, + 6234: 0x226F, + 6235: 0x2264, + 6236: 0x2265, + 6237: 0x221E, + 6238: 0x2235, + 6239: 0x2234, + 6240: 0x2642, + 6241: 0x2640, + 6242: 0x00B0, + 6243: 0x2032, + 6244: 0x2033, + 6245: 0x2103, + 6246: 0xFF04, + 6247: 0x00A4, + 6248: 0xFFE0, + 6249: 0xFFE1, + 6250: 0x2030, + 6251: 0x00A7, + 6252: 0x2116, + 6253: 0x2606, + 6254: 0x2605, + 6255: 0x25CB, + 6256: 0x25CF, + 6257: 0x25CE, + 6258: 0x25C7, + 6259: 0x25C6, + 6260: 0x25A1, + 6261: 0x25A0, + 6262: 0x25B3, + 6263: 0x25B2, + 6264: 0x203B, + 6265: 0x2192, + 6266: 0x2190, + 6267: 0x2191, + 6268: 0x2193, + 6269: 0x3013, + 6366: 0x2170, + 6367: 0x2171, + 6368: 0x2172, + 6369: 0x2173, + 6370: 0x2174, + 6371: 0x2175, + 6372: 0x2176, + 6373: 0x2177, + 6374: 0x2178, + 6375: 0x2179, + 6382: 0x2488, + 6383: 0x2489, + 6384: 0x248A, + 6385: 0x248B, + 6386: 0x248C, + 6387: 0x248D, + 6388: 0x248E, + 6389: 0x248F, + 6390: 0x2490, + 6391: 0x2491, + 6392: 0x2492, + 6393: 0x2493, + 6394: 0x2494, + 6395: 0x2495, + 6396: 0x2496, + 6397: 0x2497, + 6398: 0x2498, + 6399: 0x2499, + 6400: 0x249A, + 6401: 0x249B, + 6402: 0x2474, + 6403: 0x2475, + 6404: 0x2476, + 6405: 0x2477, + 6406: 0x2478, + 6407: 0x2479, + 6408: 0x247A, + 6409: 0x247B, + 6410: 0x247C, + 6411: 0x247D, + 6412: 0x247E, + 6413: 0x247F, + 6414: 0x2480, + 6415: 0x2481, + 6416: 0x2482, + 6417: 0x2483, + 6418: 0x2484, + 6419: 0x2485, + 6420: 0x2486, + 6421: 0x2487, + 6422: 0x2460, + 6423: 0x2461, + 6424: 0x2462, + 6425: 0x2463, + 6426: 0x2464, + 6427: 0x2465, + 6428: 0x2466, + 6429: 0x2467, + 6430: 0x2468, + 6431: 0x2469, + 6432: 0x20AC, + 6434: 0x3220, + 6435: 0x3221, + 6436: 0x3222, + 6437: 0x3223, + 6438: 0x3224, + 6439: 0x3225, + 6440: 0x3226, + 6441: 0x3227, + 6442: 0x3228, + 6443: 0x3229, + 6446: 0x2160, + 6447: 0x2161, + 6448: 0x2162, + 6449: 0x2163, + 6450: 0x2164, + 6451: 0x2165, + 6452: 0x2166, + 6453: 0x2167, + 6454: 0x2168, + 6455: 0x2169, + 6456: 0x216A, + 6457: 0x216B, + 6555: 0x3000, + 6556: 0xFF01, + 6557: 0xFF02, + 6558: 0xFF03, + 6559: 0xFFE5, + 6560: 0xFF05, + 6561: 0xFF06, + 6562: 0xFF07, + 6563: 0xFF08, + 6564: 0xFF09, + 6565: 0xFF0A, + 6566: 0xFF0B, + 6567: 0xFF0C, + 6568: 0xFF0D, + 6569: 0xFF0E, + 6570: 0xFF0F, + 6571: 0xFF10, + 6572: 0xFF11, + 6573: 0xFF12, + 6574: 0xFF13, + 6575: 0xFF14, + 6576: 0xFF15, + 6577: 0xFF16, + 6578: 0xFF17, + 6579: 0xFF18, + 6580: 0xFF19, + 6581: 0xFF1A, + 6582: 0xFF1B, + 6583: 0xFF1C, + 6584: 0xFF1D, + 6585: 0xFF1E, + 6586: 0xFF1F, + 6587: 0xFF20, + 6588: 0xFF21, + 6589: 0xFF22, + 6590: 0xFF23, + 6591: 0xFF24, + 6592: 0xFF25, + 6593: 0xFF26, + 6594: 0xFF27, + 6595: 0xFF28, + 6596: 0xFF29, + 6597: 0xFF2A, + 6598: 0xFF2B, + 6599: 0xFF2C, + 6600: 0xFF2D, + 6601: 0xFF2E, + 6602: 0xFF2F, + 6603: 0xFF30, + 6604: 0xFF31, + 6605: 0xFF32, + 6606: 0xFF33, + 6607: 0xFF34, + 6608: 0xFF35, + 6609: 0xFF36, + 6610: 0xFF37, + 6611: 0xFF38, + 6612: 0xFF39, + 6613: 0xFF3A, + 6614: 0xFF3B, + 6615: 0xFF3C, + 6616: 0xFF3D, + 6617: 0xFF3E, + 6618: 0xFF3F, + 6619: 0xFF40, + 6620: 0xFF41, + 6621: 0xFF42, + 6622: 0xFF43, + 6623: 0xFF44, + 6624: 0xFF45, + 6625: 0xFF46, + 6626: 0xFF47, + 6627: 0xFF48, + 6628: 0xFF49, + 6629: 0xFF4A, + 6630: 0xFF4B, + 6631: 0xFF4C, + 6632: 0xFF4D, + 6633: 0xFF4E, + 6634: 0xFF4F, + 6635: 0xFF50, + 6636: 0xFF51, + 6637: 0xFF52, + 6638: 0xFF53, + 6639: 0xFF54, + 6640: 0xFF55, + 6641: 0xFF56, + 6642: 0xFF57, + 6643: 0xFF58, + 6644: 0xFF59, + 6645: 0xFF5A, + 6646: 0xFF5B, + 6647: 0xFF5C, + 6648: 0xFF5D, + 6649: 0xFFE3, + 6746: 0x3041, + 6747: 0x3042, + 6748: 0x3043, + 6749: 0x3044, + 6750: 0x3045, + 6751: 0x3046, + 6752: 0x3047, + 6753: 0x3048, + 6754: 0x3049, + 6755: 0x304A, + 6756: 0x304B, + 6757: 0x304C, + 6758: 0x304D, + 6759: 0x304E, + 6760: 0x304F, + 6761: 0x3050, + 6762: 0x3051, + 6763: 0x3052, + 6764: 0x3053, + 6765: 0x3054, + 6766: 0x3055, + 6767: 0x3056, + 6768: 0x3057, + 6769: 0x3058, + 6770: 0x3059, + 6771: 0x305A, + 6772: 0x305B, + 6773: 0x305C, + 6774: 0x305D, + 6775: 0x305E, + 6776: 0x305F, + 6777: 0x3060, + 6778: 0x3061, + 6779: 0x3062, + 6780: 0x3063, + 6781: 0x3064, + 6782: 0x3065, + 6783: 0x3066, + 6784: 0x3067, + 6785: 0x3068, + 6786: 0x3069, + 6787: 0x306A, + 6788: 0x306B, + 6789: 0x306C, + 6790: 0x306D, + 6791: 0x306E, + 6792: 0x306F, + 6793: 0x3070, + 6794: 0x3071, + 6795: 0x3072, + 6796: 0x3073, + 6797: 0x3074, + 6798: 0x3075, + 6799: 0x3076, + 6800: 0x3077, + 6801: 0x3078, + 6802: 0x3079, + 6803: 0x307A, + 6804: 0x307B, + 6805: 0x307C, + 6806: 0x307D, + 6807: 0x307E, + 6808: 0x307F, + 6809: 0x3080, + 6810: 0x3081, + 6811: 0x3082, + 6812: 0x3083, + 6813: 0x3084, + 6814: 0x3085, + 6815: 0x3086, + 6816: 0x3087, + 6817: 0x3088, + 6818: 0x3089, + 6819: 0x308A, + 6820: 0x308B, + 6821: 0x308C, + 6822: 0x308D, + 6823: 0x308E, + 6824: 0x308F, + 6825: 0x3090, + 6826: 0x3091, + 6827: 0x3092, + 6828: 0x3093, + 6936: 0x30A1, + 6937: 0x30A2, + 6938: 0x30A3, + 6939: 0x30A4, + 6940: 0x30A5, + 6941: 0x30A6, + 6942: 0x30A7, + 6943: 0x30A8, + 6944: 0x30A9, + 6945: 0x30AA, + 6946: 0x30AB, + 6947: 0x30AC, + 6948: 0x30AD, + 6949: 0x30AE, + 6950: 0x30AF, + 6951: 0x30B0, + 6952: 0x30B1, + 6953: 0x30B2, + 6954: 0x30B3, + 6955: 0x30B4, + 6956: 0x30B5, + 6957: 0x30B6, + 6958: 0x30B7, + 6959: 0x30B8, + 6960: 0x30B9, + 6961: 0x30BA, + 6962: 0x30BB, + 6963: 0x30BC, + 6964: 0x30BD, + 6965: 0x30BE, + 6966: 0x30BF, + 6967: 0x30C0, + 6968: 0x30C1, + 6969: 0x30C2, + 6970: 0x30C3, + 6971: 0x30C4, + 6972: 0x30C5, + 6973: 0x30C6, + 6974: 0x30C7, + 6975: 0x30C8, + 6976: 0x30C9, + 6977: 0x30CA, + 6978: 0x30CB, + 6979: 0x30CC, + 6980: 0x30CD, + 6981: 0x30CE, + 6982: 0x30CF, + 6983: 0x30D0, + 6984: 0x30D1, + 6985: 0x30D2, + 6986: 0x30D3, + 6987: 0x30D4, + 6988: 0x30D5, + 6989: 0x30D6, + 6990: 0x30D7, + 6991: 0x30D8, + 6992: 0x30D9, + 6993: 0x30DA, + 6994: 0x30DB, + 6995: 0x30DC, + 6996: 0x30DD, + 6997: 0x30DE, + 6998: 0x30DF, + 6999: 0x30E0, + 7000: 0x30E1, + 7001: 0x30E2, + 7002: 0x30E3, + 7003: 0x30E4, + 7004: 0x30E5, + 7005: 0x30E6, + 7006: 0x30E7, + 7007: 0x30E8, + 7008: 0x30E9, + 7009: 0x30EA, + 7010: 0x30EB, + 7011: 0x30EC, + 7012: 0x30ED, + 7013: 0x30EE, + 7014: 0x30EF, + 7015: 0x30F0, + 7016: 0x30F1, + 7017: 0x30F2, + 7018: 0x30F3, + 7019: 0x30F4, + 7020: 0x30F5, + 7021: 0x30F6, + 7126: 0x0391, + 7127: 0x0392, + 7128: 0x0393, + 7129: 0x0394, + 7130: 0x0395, + 7131: 0x0396, + 7132: 0x0397, + 7133: 0x0398, + 7134: 0x0399, + 7135: 0x039A, + 7136: 0x039B, + 7137: 0x039C, + 7138: 0x039D, + 7139: 0x039E, + 7140: 0x039F, + 7141: 0x03A0, + 7142: 0x03A1, + 7143: 0x03A3, + 7144: 0x03A4, + 7145: 0x03A5, + 7146: 0x03A6, + 7147: 0x03A7, + 7148: 0x03A8, + 7149: 0x03A9, + 7158: 0x03B1, + 7159: 0x03B2, + 7160: 0x03B3, + 7161: 0x03B4, + 7162: 0x03B5, + 7163: 0x03B6, + 7164: 0x03B7, + 7165: 0x03B8, + 7166: 0x03B9, + 7167: 0x03BA, + 7168: 0x03BB, + 7169: 0x03BC, + 7170: 0x03BD, + 7171: 0x03BE, + 7172: 0x03BF, + 7173: 0x03C0, + 7174: 0x03C1, + 7175: 0x03C3, + 7176: 0x03C4, + 7177: 0x03C5, + 7178: 0x03C6, + 7179: 0x03C7, + 7180: 0x03C8, + 7181: 0x03C9, + 7189: 0xFE35, + 7190: 0xFE36, + 7191: 0xFE39, + 7192: 0xFE3A, + 7193: 0xFE3F, + 7194: 0xFE40, + 7195: 0xFE3D, + 7196: 0xFE3E, + 7197: 0xFE41, + 7198: 0xFE42, + 7199: 0xFE43, + 7200: 0xFE44, + 7203: 0xFE3B, + 7204: 0xFE3C, + 7205: 0xFE37, + 7206: 0xFE38, + 7207: 0xFE31, + 7209: 0xFE33, + 7210: 0xFE34, + 7316: 0x0410, + 7317: 0x0411, + 7318: 0x0412, + 7319: 0x0413, + 7320: 0x0414, + 7321: 0x0415, + 7322: 0x0401, + 7323: 0x0416, + 7324: 0x0417, + 7325: 0x0418, + 7326: 0x0419, + 7327: 0x041A, + 7328: 0x041B, + 7329: 0x041C, + 7330: 0x041D, + 7331: 0x041E, + 7332: 0x041F, + 7333: 0x0420, + 7334: 0x0421, + 7335: 0x0422, + 7336: 0x0423, + 7337: 0x0424, + 7338: 0x0425, + 7339: 0x0426, + 7340: 0x0427, + 7341: 0x0428, + 7342: 0x0429, + 7343: 0x042A, + 7344: 0x042B, + 7345: 0x042C, + 7346: 0x042D, + 7347: 0x042E, + 7348: 0x042F, + 7364: 0x0430, + 7365: 0x0431, + 7366: 0x0432, + 7367: 0x0433, + 7368: 0x0434, + 7369: 0x0435, + 7370: 0x0451, + 7371: 0x0436, + 7372: 0x0437, + 7373: 0x0438, + 7374: 0x0439, + 7375: 0x043A, + 7376: 0x043B, + 7377: 0x043C, + 7378: 0x043D, + 7379: 0x043E, + 7380: 0x043F, + 7381: 0x0440, + 7382: 0x0441, + 7383: 0x0442, + 7384: 0x0443, + 7385: 0x0444, + 7386: 0x0445, + 7387: 0x0446, + 7388: 0x0447, + 7389: 0x0448, + 7390: 0x0449, + 7391: 0x044A, + 7392: 0x044B, + 7393: 0x044C, + 7394: 0x044D, + 7395: 0x044E, + 7396: 0x044F, + 7410: 0x02CA, + 7411: 0x02CB, + 7412: 0x02D9, + 7413: 0x2013, + 7414: 0x2015, + 7415: 0x2025, + 7416: 0x2035, + 7417: 0x2105, + 7418: 0x2109, + 7419: 0x2196, + 7420: 0x2197, + 7421: 0x2198, + 7422: 0x2199, + 7423: 0x2215, + 7424: 0x221F, + 7425: 0x2223, + 7426: 0x2252, + 7427: 0x2266, + 7428: 0x2267, + 7429: 0x22BF, + 7430: 0x2550, + 7431: 0x2551, + 7432: 0x2552, + 7433: 0x2553, + 7434: 0x2554, + 7435: 0x2555, + 7436: 0x2556, + 7437: 0x2557, + 7438: 0x2558, + 7439: 0x2559, + 7440: 0x255A, + 7441: 0x255B, + 7442: 0x255C, + 7443: 0x255D, + 7444: 0x255E, + 7445: 0x255F, + 7446: 0x2560, + 7447: 0x2561, + 7448: 0x2562, + 7449: 0x2563, + 7450: 0x2564, + 7451: 0x2565, + 7452: 0x2566, + 7453: 0x2567, + 7454: 0x2568, + 7455: 0x2569, + 7456: 0x256A, + 7457: 0x256B, + 7458: 0x256C, + 7459: 0x256D, + 7460: 0x256E, + 7461: 0x256F, + 7462: 0x2570, + 7463: 0x2571, + 7464: 0x2572, + 7465: 0x2573, + 7466: 0x2581, + 7467: 0x2582, + 7468: 0x2583, + 7469: 0x2584, + 7470: 0x2585, + 7471: 0x2586, + 7472: 0x2587, + 7473: 0x2588, + 7474: 0x2589, + 7475: 0x258A, + 7476: 0x258B, + 7477: 0x258C, + 7478: 0x258D, + 7479: 0x258E, + 7480: 0x258F, + 7481: 0x2593, + 7482: 0x2594, + 7483: 0x2595, + 7484: 0x25BC, + 7485: 0x25BD, + 7486: 0x25E2, + 7487: 0x25E3, + 7488: 0x25E4, + 7489: 0x25E5, + 7490: 0x2609, + 7491: 0x2295, + 7492: 0x3012, + 7493: 0x301D, + 7494: 0x301E, + 7506: 0x0101, + 7507: 0x00E1, + 7508: 0x01CE, + 7509: 0x00E0, + 7510: 0x0113, + 7511: 0x00E9, + 7512: 0x011B, + 7513: 0x00E8, + 7514: 0x012B, + 7515: 0x00ED, + 7516: 0x01D0, + 7517: 0x00EC, + 7518: 0x014D, + 7519: 0x00F3, + 7520: 0x01D2, + 7521: 0x00F2, + 7522: 0x016B, + 7523: 0x00FA, + 7524: 0x01D4, + 7525: 0x00F9, + 7526: 0x01D6, + 7527: 0x01D8, + 7528: 0x01DA, + 7529: 0x01DC, + 7530: 0x00FC, + 7531: 0x00EA, + 7532: 0x0251, + 7534: 0x0144, + 7535: 0x0148, + 7536: 0x01F9, + 7537: 0x0261, + 7542: 0x3105, + 7543: 0x3106, + 7544: 0x3107, + 7545: 0x3108, + 7546: 0x3109, + 7547: 0x310A, + 7548: 0x310B, + 7549: 0x310C, + 7550: 0x310D, + 7551: 0x310E, + 7552: 0x310F, + 7553: 0x3110, + 7554: 0x3111, + 7555: 0x3112, + 7556: 0x3113, + 7557: 0x3114, + 7558: 0x3115, + 7559: 0x3116, + 7560: 0x3117, + 7561: 0x3118, + 7562: 0x3119, + 7563: 0x311A, + 7564: 0x311B, + 7565: 0x311C, + 7566: 0x311D, + 7567: 0x311E, + 7568: 0x311F, + 7569: 0x3120, + 7570: 0x3121, + 7571: 0x3122, + 7572: 0x3123, + 7573: 0x3124, + 7574: 0x3125, + 7575: 0x3126, + 7576: 0x3127, + 7577: 0x3128, + 7578: 0x3129, + 7600: 0x3021, + 7601: 0x3022, + 7602: 0x3023, + 7603: 0x3024, + 7604: 0x3025, + 7605: 0x3026, + 7606: 0x3027, + 7607: 0x3028, + 7608: 0x3029, + 7609: 0x32A3, + 7610: 0x338E, + 7611: 0x338F, + 7612: 0x339C, + 7613: 0x339D, + 7614: 0x339E, + 7615: 0x33A1, + 7616: 0x33C4, + 7617: 0x33CE, + 7618: 0x33D1, + 7619: 0x33D2, + 7620: 0x33D5, + 7621: 0xFE30, + 7622: 0xFFE2, + 7623: 0xFFE4, + 7625: 0x2121, + 7626: 0x3231, + 7628: 0x2010, + 7632: 0x30FC, + 7633: 0x309B, + 7634: 0x309C, + 7635: 0x30FD, + 7636: 0x30FE, + 7637: 0x3006, + 7638: 0x309D, + 7639: 0x309E, + 7640: 0xFE49, + 7641: 0xFE4A, + 7642: 0xFE4B, + 7643: 0xFE4C, + 7644: 0xFE4D, + 7645: 0xFE4E, + 7646: 0xFE4F, + 7647: 0xFE50, + 7648: 0xFE51, + 7649: 0xFE52, + 7650: 0xFE54, + 7651: 0xFE55, + 7652: 0xFE56, + 7653: 0xFE57, + 7654: 0xFE59, + 7655: 0xFE5A, + 7656: 0xFE5B, + 7657: 0xFE5C, + 7658: 0xFE5D, + 7659: 0xFE5E, + 7660: 0xFE5F, + 7661: 0xFE60, + 7662: 0xFE61, + 7663: 0xFE62, + 7664: 0xFE63, + 7665: 0xFE64, + 7666: 0xFE65, + 7667: 0xFE66, + 7668: 0xFE68, + 7669: 0xFE69, + 7670: 0xFE6A, + 7671: 0xFE6B, + 7672: 0x303E, + 7673: 0x2FF0, + 7674: 0x2FF1, + 7675: 0x2FF2, + 7676: 0x2FF3, + 7677: 0x2FF4, + 7678: 0x2FF5, + 7679: 0x2FF6, + 7680: 0x2FF7, + 7681: 0x2FF8, + 7682: 0x2FF9, + 7683: 0x2FFA, + 7684: 0x2FFB, + 7685: 0x3007, + 7699: 0x2500, + 7700: 0x2501, + 7701: 0x2502, + 7702: 0x2503, + 7703: 0x2504, + 7704: 0x2505, + 7705: 0x2506, + 7706: 0x2507, + 7707: 0x2508, + 7708: 0x2509, + 7709: 0x250A, + 7710: 0x250B, + 7711: 0x250C, + 7712: 0x250D, + 7713: 0x250E, + 7714: 0x250F, + 7715: 0x2510, + 7716: 0x2511, + 7717: 0x2512, + 7718: 0x2513, + 7719: 0x2514, + 7720: 0x2515, + 7721: 0x2516, + 7722: 0x2517, + 7723: 0x2518, + 7724: 0x2519, + 7725: 0x251A, + 7726: 0x251B, + 7727: 0x251C, + 7728: 0x251D, + 7729: 0x251E, + 7730: 0x251F, + 7731: 0x2520, + 7732: 0x2521, + 7733: 0x2522, + 7734: 0x2523, + 7735: 0x2524, + 7736: 0x2525, + 7737: 0x2526, + 7738: 0x2527, + 7739: 0x2528, + 7740: 0x2529, + 7741: 0x252A, + 7742: 0x252B, + 7743: 0x252C, + 7744: 0x252D, + 7745: 0x252E, + 7746: 0x252F, + 7747: 0x2530, + 7748: 0x2531, + 7749: 0x2532, + 7750: 0x2533, + 7751: 0x2534, + 7752: 0x2535, + 7753: 0x2536, + 7754: 0x2537, + 7755: 0x2538, + 7756: 0x2539, + 7757: 0x253A, + 7758: 0x253B, + 7759: 0x253C, + 7760: 0x253D, + 7761: 0x253E, + 7762: 0x253F, + 7763: 0x2540, + 7764: 0x2541, + 7765: 0x2542, + 7766: 0x2543, + 7767: 0x2544, + 7768: 0x2545, + 7769: 0x2546, + 7770: 0x2547, + 7771: 0x2548, + 7772: 0x2549, + 7773: 0x254A, + 7774: 0x254B, + 7790: 0x72DC, + 7791: 0x72DD, + 7792: 0x72DF, + 7793: 0x72E2, + 7794: 0x72E3, + 7795: 0x72E4, + 7796: 0x72E5, + 7797: 0x72E6, + 7798: 0x72E7, + 7799: 0x72EA, + 7800: 0x72EB, + 7801: 0x72F5, + 7802: 0x72F6, + 7803: 0x72F9, + 7804: 0x72FD, + 7805: 0x72FE, + 7806: 0x72FF, + 7807: 0x7300, + 7808: 0x7302, + 7809: 0x7304, + 7810: 0x7305, + 7811: 0x7306, + 7812: 0x7307, + 7813: 0x7308, + 7814: 0x7309, + 7815: 0x730B, + 7816: 0x730C, + 7817: 0x730D, + 7818: 0x730F, + 7819: 0x7310, + 7820: 0x7311, + 7821: 0x7312, + 7822: 0x7314, + 7823: 0x7318, + 7824: 0x7319, + 7825: 0x731A, + 7826: 0x731F, + 7827: 0x7320, + 7828: 0x7323, + 7829: 0x7324, + 7830: 0x7326, + 7831: 0x7327, + 7832: 0x7328, + 7833: 0x732D, + 7834: 0x732F, + 7835: 0x7330, + 7836: 0x7332, + 7837: 0x7333, + 7838: 0x7335, + 7839: 0x7336, + 7840: 0x733A, + 7841: 0x733B, + 7842: 0x733C, + 7843: 0x733D, + 7844: 0x7340, + 7845: 0x7341, + 7846: 0x7342, + 7847: 0x7343, + 7848: 0x7344, + 7849: 0x7345, + 7850: 0x7346, + 7851: 0x7347, + 7852: 0x7348, + 7853: 0x7349, + 7854: 0x734A, + 7855: 0x734B, + 7856: 0x734C, + 7857: 0x734E, + 7858: 0x734F, + 7859: 0x7351, + 7860: 0x7353, + 7861: 0x7354, + 7862: 0x7355, + 7863: 0x7356, + 7864: 0x7358, + 7865: 0x7359, + 7866: 0x735A, + 7867: 0x735B, + 7868: 0x735C, + 7869: 0x735D, + 7870: 0x735E, + 7871: 0x735F, + 7872: 0x7361, + 7873: 0x7362, + 7874: 0x7363, + 7875: 0x7364, + 7876: 0x7365, + 7877: 0x7366, + 7878: 0x7367, + 7879: 0x7368, + 7880: 0x7369, + 7881: 0x736A, + 7882: 0x736B, + 7883: 0x736E, + 7884: 0x7370, + 7885: 0x7371, + 7980: 0x7372, + 7981: 0x7373, + 7982: 0x7374, + 7983: 0x7375, + 7984: 0x7376, + 7985: 0x7377, + 7986: 0x7378, + 7987: 0x7379, + 7988: 0x737A, + 7989: 0x737B, + 7990: 0x737C, + 7991: 0x737D, + 7992: 0x737F, + 7993: 0x7380, + 7994: 0x7381, + 7995: 0x7382, + 7996: 0x7383, + 7997: 0x7385, + 7998: 0x7386, + 7999: 0x7388, + 8000: 0x738A, + 8001: 0x738C, + 8002: 0x738D, + 8003: 0x738F, + 8004: 0x7390, + 8005: 0x7392, + 8006: 0x7393, + 8007: 0x7394, + 8008: 0x7395, + 8009: 0x7397, + 8010: 0x7398, + 8011: 0x7399, + 8012: 0x739A, + 8013: 0x739C, + 8014: 0x739D, + 8015: 0x739E, + 8016: 0x73A0, + 8017: 0x73A1, + 8018: 0x73A3, + 8019: 0x73A4, + 8020: 0x73A5, + 8021: 0x73A6, + 8022: 0x73A7, + 8023: 0x73A8, + 8024: 0x73AA, + 8025: 0x73AC, + 8026: 0x73AD, + 8027: 0x73B1, + 8028: 0x73B4, + 8029: 0x73B5, + 8030: 0x73B6, + 8031: 0x73B8, + 8032: 0x73B9, + 8033: 0x73BC, + 8034: 0x73BD, + 8035: 0x73BE, + 8036: 0x73BF, + 8037: 0x73C1, + 8038: 0x73C3, + 8039: 0x73C4, + 8040: 0x73C5, + 8041: 0x73C6, + 8042: 0x73C7, + 8043: 0x73CB, + 8044: 0x73CC, + 8045: 0x73CE, + 8046: 0x73D2, + 8047: 0x73D3, + 8048: 0x73D4, + 8049: 0x73D5, + 8050: 0x73D6, + 8051: 0x73D7, + 8052: 0x73D8, + 8053: 0x73DA, + 8054: 0x73DB, + 8055: 0x73DC, + 8056: 0x73DD, + 8057: 0x73DF, + 8058: 0x73E1, + 8059: 0x73E2, + 8060: 0x73E3, + 8061: 0x73E4, + 8062: 0x73E6, + 8063: 0x73E8, + 8064: 0x73EA, + 8065: 0x73EB, + 8066: 0x73EC, + 8067: 0x73EE, + 8068: 0x73EF, + 8069: 0x73F0, + 8070: 0x73F1, + 8071: 0x73F3, + 8072: 0x73F4, + 8073: 0x73F5, + 8074: 0x73F6, + 8075: 0x73F7, + 8170: 0x73F8, + 8171: 0x73F9, + 8172: 0x73FA, + 8173: 0x73FB, + 8174: 0x73FC, + 8175: 0x73FD, + 8176: 0x73FE, + 8177: 0x73FF, + 8178: 0x7400, + 8179: 0x7401, + 8180: 0x7402, + 8181: 0x7404, + 8182: 0x7407, + 8183: 0x7408, + 8184: 0x740B, + 8185: 0x740C, + 8186: 0x740D, + 8187: 0x740E, + 8188: 0x7411, + 8189: 0x7412, + 8190: 0x7413, + 8191: 0x7414, + 8192: 0x7415, + 8193: 0x7416, + 8194: 0x7417, + 8195: 0x7418, + 8196: 0x7419, + 8197: 0x741C, + 8198: 0x741D, + 8199: 0x741E, + 8200: 0x741F, + 8201: 0x7420, + 8202: 0x7421, + 8203: 0x7423, + 8204: 0x7424, + 8205: 0x7427, + 8206: 0x7429, + 8207: 0x742B, + 8208: 0x742D, + 8209: 0x742F, + 8210: 0x7431, + 8211: 0x7432, + 8212: 0x7437, + 8213: 0x7438, + 8214: 0x7439, + 8215: 0x743A, + 8216: 0x743B, + 8217: 0x743D, + 8218: 0x743E, + 8219: 0x743F, + 8220: 0x7440, + 8221: 0x7442, + 8222: 0x7443, + 8223: 0x7444, + 8224: 0x7445, + 8225: 0x7446, + 8226: 0x7447, + 8227: 0x7448, + 8228: 0x7449, + 8229: 0x744A, + 8230: 0x744B, + 8231: 0x744C, + 8232: 0x744D, + 8233: 0x744E, + 8234: 0x744F, + 8235: 0x7450, + 8236: 0x7451, + 8237: 0x7452, + 8238: 0x7453, + 8239: 0x7454, + 8240: 0x7456, + 8241: 0x7458, + 8242: 0x745D, + 8243: 0x7460, + 8244: 0x7461, + 8245: 0x7462, + 8246: 0x7463, + 8247: 0x7464, + 8248: 0x7465, + 8249: 0x7466, + 8250: 0x7467, + 8251: 0x7468, + 8252: 0x7469, + 8253: 0x746A, + 8254: 0x746B, + 8255: 0x746C, + 8256: 0x746E, + 8257: 0x746F, + 8258: 0x7471, + 8259: 0x7472, + 8260: 0x7473, + 8261: 0x7474, + 8262: 0x7475, + 8263: 0x7478, + 8264: 0x7479, + 8265: 0x747A, + 8360: 0x747B, + 8361: 0x747C, + 8362: 0x747D, + 8363: 0x747F, + 8364: 0x7482, + 8365: 0x7484, + 8366: 0x7485, + 8367: 0x7486, + 8368: 0x7488, + 8369: 0x7489, + 8370: 0x748A, + 8371: 0x748C, + 8372: 0x748D, + 8373: 0x748F, + 8374: 0x7491, + 8375: 0x7492, + 8376: 0x7493, + 8377: 0x7494, + 8378: 0x7495, + 8379: 0x7496, + 8380: 0x7497, + 8381: 0x7498, + 8382: 0x7499, + 8383: 0x749A, + 8384: 0x749B, + 8385: 0x749D, + 8386: 0x749F, + 8387: 0x74A0, + 8388: 0x74A1, + 8389: 0x74A2, + 8390: 0x74A3, + 8391: 0x74A4, + 8392: 0x74A5, + 8393: 0x74A6, + 8394: 0x74AA, + 8395: 0x74AB, + 8396: 0x74AC, + 8397: 0x74AD, + 8398: 0x74AE, + 8399: 0x74AF, + 8400: 0x74B0, + 8401: 0x74B1, + 8402: 0x74B2, + 8403: 0x74B3, + 8404: 0x74B4, + 8405: 0x74B5, + 8406: 0x74B6, + 8407: 0x74B7, + 8408: 0x74B8, + 8409: 0x74B9, + 8410: 0x74BB, + 8411: 0x74BC, + 8412: 0x74BD, + 8413: 0x74BE, + 8414: 0x74BF, + 8415: 0x74C0, + 8416: 0x74C1, + 8417: 0x74C2, + 8418: 0x74C3, + 8419: 0x74C4, + 8420: 0x74C5, + 8421: 0x74C6, + 8422: 0x74C7, + 8423: 0x74C8, + 8424: 0x74C9, + 8425: 0x74CA, + 8426: 0x74CB, + 8427: 0x74CC, + 8428: 0x74CD, + 8429: 0x74CE, + 8430: 0x74CF, + 8431: 0x74D0, + 8432: 0x74D1, + 8433: 0x74D3, + 8434: 0x74D4, + 8435: 0x74D5, + 8436: 0x74D6, + 8437: 0x74D7, + 8438: 0x74D8, + 8439: 0x74D9, + 8440: 0x74DA, + 8441: 0x74DB, + 8442: 0x74DD, + 8443: 0x74DF, + 8444: 0x74E1, + 8445: 0x74E5, + 8446: 0x74E7, + 8447: 0x74E8, + 8448: 0x74E9, + 8449: 0x74EA, + 8450: 0x74EB, + 8451: 0x74EC, + 8452: 0x74ED, + 8453: 0x74F0, + 8454: 0x74F1, + 8455: 0x74F2, + 8550: 0x74F3, + 8551: 0x74F5, + 8552: 0x74F8, + 8553: 0x74F9, + 8554: 0x74FA, + 8555: 0x74FB, + 8556: 0x74FC, + 8557: 0x74FD, + 8558: 0x74FE, + 8559: 0x7500, + 8560: 0x7501, + 8561: 0x7502, + 8562: 0x7503, + 8563: 0x7505, + 8564: 0x7506, + 8565: 0x7507, + 8566: 0x7508, + 8567: 0x7509, + 8568: 0x750A, + 8569: 0x750B, + 8570: 0x750C, + 8571: 0x750E, + 8572: 0x7510, + 8573: 0x7512, + 8574: 0x7514, + 8575: 0x7515, + 8576: 0x7516, + 8577: 0x7517, + 8578: 0x751B, + 8579: 0x751D, + 8580: 0x751E, + 8581: 0x7520, + 8582: 0x7521, + 8583: 0x7522, + 8584: 0x7523, + 8585: 0x7524, + 8586: 0x7526, + 8587: 0x7527, + 8588: 0x752A, + 8589: 0x752E, + 8590: 0x7534, + 8591: 0x7536, + 8592: 0x7539, + 8593: 0x753C, + 8594: 0x753D, + 8595: 0x753F, + 8596: 0x7541, + 8597: 0x7542, + 8598: 0x7543, + 8599: 0x7544, + 8600: 0x7546, + 8601: 0x7547, + 8602: 0x7549, + 8603: 0x754A, + 8604: 0x754D, + 8605: 0x7550, + 8606: 0x7551, + 8607: 0x7552, + 8608: 0x7553, + 8609: 0x7555, + 8610: 0x7556, + 8611: 0x7557, + 8612: 0x7558, + 8613: 0x755D, + 8614: 0x755E, + 8615: 0x755F, + 8616: 0x7560, + 8617: 0x7561, + 8618: 0x7562, + 8619: 0x7563, + 8620: 0x7564, + 8621: 0x7567, + 8622: 0x7568, + 8623: 0x7569, + 8624: 0x756B, + 8625: 0x756C, + 8626: 0x756D, + 8627: 0x756E, + 8628: 0x756F, + 8629: 0x7570, + 8630: 0x7571, + 8631: 0x7573, + 8632: 0x7575, + 8633: 0x7576, + 8634: 0x7577, + 8635: 0x757A, + 8636: 0x757B, + 8637: 0x757C, + 8638: 0x757D, + 8639: 0x757E, + 8640: 0x7580, + 8641: 0x7581, + 8642: 0x7582, + 8643: 0x7584, + 8644: 0x7585, + 8645: 0x7587, + 8740: 0x7588, + 8741: 0x7589, + 8742: 0x758A, + 8743: 0x758C, + 8744: 0x758D, + 8745: 0x758E, + 8746: 0x7590, + 8747: 0x7593, + 8748: 0x7595, + 8749: 0x7598, + 8750: 0x759B, + 8751: 0x759C, + 8752: 0x759E, + 8753: 0x75A2, + 8754: 0x75A6, + 8755: 0x75A7, + 8756: 0x75A8, + 8757: 0x75A9, + 8758: 0x75AA, + 8759: 0x75AD, + 8760: 0x75B6, + 8761: 0x75B7, + 8762: 0x75BA, + 8763: 0x75BB, + 8764: 0x75BF, + 8765: 0x75C0, + 8766: 0x75C1, + 8767: 0x75C6, + 8768: 0x75CB, + 8769: 0x75CC, + 8770: 0x75CE, + 8771: 0x75CF, + 8772: 0x75D0, + 8773: 0x75D1, + 8774: 0x75D3, + 8775: 0x75D7, + 8776: 0x75D9, + 8777: 0x75DA, + 8778: 0x75DC, + 8779: 0x75DD, + 8780: 0x75DF, + 8781: 0x75E0, + 8782: 0x75E1, + 8783: 0x75E5, + 8784: 0x75E9, + 8785: 0x75EC, + 8786: 0x75ED, + 8787: 0x75EE, + 8788: 0x75EF, + 8789: 0x75F2, + 8790: 0x75F3, + 8791: 0x75F5, + 8792: 0x75F6, + 8793: 0x75F7, + 8794: 0x75F8, + 8795: 0x75FA, + 8796: 0x75FB, + 8797: 0x75FD, + 8798: 0x75FE, + 8799: 0x7602, + 8800: 0x7604, + 8801: 0x7606, + 8802: 0x7607, + 8803: 0x7608, + 8804: 0x7609, + 8805: 0x760B, + 8806: 0x760D, + 8807: 0x760E, + 8808: 0x760F, + 8809: 0x7611, + 8810: 0x7612, + 8811: 0x7613, + 8812: 0x7614, + 8813: 0x7616, + 8814: 0x761A, + 8815: 0x761C, + 8816: 0x761D, + 8817: 0x761E, + 8818: 0x7621, + 8819: 0x7623, + 8820: 0x7627, + 8821: 0x7628, + 8822: 0x762C, + 8823: 0x762E, + 8824: 0x762F, + 8825: 0x7631, + 8826: 0x7632, + 8827: 0x7636, + 8828: 0x7637, + 8829: 0x7639, + 8830: 0x763A, + 8831: 0x763B, + 8832: 0x763D, + 8833: 0x7641, + 8834: 0x7642, + 8835: 0x7644, + 8930: 0x7645, + 8931: 0x7646, + 8932: 0x7647, + 8933: 0x7648, + 8934: 0x7649, + 8935: 0x764A, + 8936: 0x764B, + 8937: 0x764E, + 8938: 0x764F, + 8939: 0x7650, + 8940: 0x7651, + 8941: 0x7652, + 8942: 0x7653, + 8943: 0x7655, + 8944: 0x7657, + 8945: 0x7658, + 8946: 0x7659, + 8947: 0x765A, + 8948: 0x765B, + 8949: 0x765D, + 8950: 0x765F, + 8951: 0x7660, + 8952: 0x7661, + 8953: 0x7662, + 8954: 0x7664, + 8955: 0x7665, + 8956: 0x7666, + 8957: 0x7667, + 8958: 0x7668, + 8959: 0x7669, + 8960: 0x766A, + 8961: 0x766C, + 8962: 0x766D, + 8963: 0x766E, + 8964: 0x7670, + 8965: 0x7671, + 8966: 0x7672, + 8967: 0x7673, + 8968: 0x7674, + 8969: 0x7675, + 8970: 0x7676, + 8971: 0x7677, + 8972: 0x7679, + 8973: 0x767A, + 8974: 0x767C, + 8975: 0x767F, + 8976: 0x7680, + 8977: 0x7681, + 8978: 0x7683, + 8979: 0x7685, + 8980: 0x7689, + 8981: 0x768A, + 8982: 0x768C, + 8983: 0x768D, + 8984: 0x768F, + 8985: 0x7690, + 8986: 0x7692, + 8987: 0x7694, + 8988: 0x7695, + 8989: 0x7697, + 8990: 0x7698, + 8991: 0x769A, + 8992: 0x769B, + 8993: 0x769C, + 8994: 0x769D, + 8995: 0x769E, + 8996: 0x769F, + 8997: 0x76A0, + 8998: 0x76A1, + 8999: 0x76A2, + 9000: 0x76A3, + 9001: 0x76A5, + 9002: 0x76A6, + 9003: 0x76A7, + 9004: 0x76A8, + 9005: 0x76A9, + 9006: 0x76AA, + 9007: 0x76AB, + 9008: 0x76AC, + 9009: 0x76AD, + 9010: 0x76AF, + 9011: 0x76B0, + 9012: 0x76B3, + 9013: 0x76B5, + 9014: 0x76B6, + 9015: 0x76B7, + 9016: 0x76B8, + 9017: 0x76B9, + 9018: 0x76BA, + 9019: 0x76BB, + 9020: 0x76BC, + 9021: 0x76BD, + 9022: 0x76BE, + 9023: 0x76C0, + 9024: 0x76C1, + 9025: 0x76C3, + 9026: 0x554A, + 9027: 0x963F, + 9028: 0x57C3, + 9029: 0x6328, + 9030: 0x54CE, + 9031: 0x5509, + 9032: 0x54C0, + 9033: 0x7691, + 9034: 0x764C, + 9035: 0x853C, + 9036: 0x77EE, + 9037: 0x827E, + 9038: 0x788D, + 9039: 0x7231, + 9040: 0x9698, + 9041: 0x978D, + 9042: 0x6C28, + 9043: 0x5B89, + 9044: 0x4FFA, + 9045: 0x6309, + 9046: 0x6697, + 9047: 0x5CB8, + 9048: 0x80FA, + 9049: 0x6848, + 9050: 0x80AE, + 9051: 0x6602, + 9052: 0x76CE, + 9053: 0x51F9, + 9054: 0x6556, + 9055: 0x71AC, + 9056: 0x7FF1, + 9057: 0x8884, + 9058: 0x50B2, + 9059: 0x5965, + 9060: 0x61CA, + 9061: 0x6FB3, + 9062: 0x82AD, + 9063: 0x634C, + 9064: 0x6252, + 9065: 0x53ED, + 9066: 0x5427, + 9067: 0x7B06, + 9068: 0x516B, + 9069: 0x75A4, + 9070: 0x5DF4, + 9071: 0x62D4, + 9072: 0x8DCB, + 9073: 0x9776, + 9074: 0x628A, + 9075: 0x8019, + 9076: 0x575D, + 9077: 0x9738, + 9078: 0x7F62, + 9079: 0x7238, + 9080: 0x767D, + 9081: 0x67CF, + 9082: 0x767E, + 9083: 0x6446, + 9084: 0x4F70, + 9085: 0x8D25, + 9086: 0x62DC, + 9087: 0x7A17, + 9088: 0x6591, + 9089: 0x73ED, + 9090: 0x642C, + 9091: 0x6273, + 9092: 0x822C, + 9093: 0x9881, + 9094: 0x677F, + 9095: 0x7248, + 9096: 0x626E, + 9097: 0x62CC, + 9098: 0x4F34, + 9099: 0x74E3, + 9100: 0x534A, + 9101: 0x529E, + 9102: 0x7ECA, + 9103: 0x90A6, + 9104: 0x5E2E, + 9105: 0x6886, + 9106: 0x699C, + 9107: 0x8180, + 9108: 0x7ED1, + 9109: 0x68D2, + 9110: 0x78C5, + 9111: 0x868C, + 9112: 0x9551, + 9113: 0x508D, + 9114: 0x8C24, + 9115: 0x82DE, + 9116: 0x80DE, + 9117: 0x5305, + 9118: 0x8912, + 9119: 0x5265, + 9120: 0x76C4, + 9121: 0x76C7, + 9122: 0x76C9, + 9123: 0x76CB, + 9124: 0x76CC, + 9125: 0x76D3, + 9126: 0x76D5, + 9127: 0x76D9, + 9128: 0x76DA, + 9129: 0x76DC, + 9130: 0x76DD, + 9131: 0x76DE, + 9132: 0x76E0, + 9133: 0x76E1, + 9134: 0x76E2, + 9135: 0x76E3, + 9136: 0x76E4, + 9137: 0x76E6, + 9138: 0x76E7, + 9139: 0x76E8, + 9140: 0x76E9, + 9141: 0x76EA, + 9142: 0x76EB, + 9143: 0x76EC, + 9144: 0x76ED, + 9145: 0x76F0, + 9146: 0x76F3, + 9147: 0x76F5, + 9148: 0x76F6, + 9149: 0x76F7, + 9150: 0x76FA, + 9151: 0x76FB, + 9152: 0x76FD, + 9153: 0x76FF, + 9154: 0x7700, + 9155: 0x7702, + 9156: 0x7703, + 9157: 0x7705, + 9158: 0x7706, + 9159: 0x770A, + 9160: 0x770C, + 9161: 0x770E, + 9162: 0x770F, + 9163: 0x7710, + 9164: 0x7711, + 9165: 0x7712, + 9166: 0x7713, + 9167: 0x7714, + 9168: 0x7715, + 9169: 0x7716, + 9170: 0x7717, + 9171: 0x7718, + 9172: 0x771B, + 9173: 0x771C, + 9174: 0x771D, + 9175: 0x771E, + 9176: 0x7721, + 9177: 0x7723, + 9178: 0x7724, + 9179: 0x7725, + 9180: 0x7727, + 9181: 0x772A, + 9182: 0x772B, + 9183: 0x772C, + 9184: 0x772E, + 9185: 0x7730, + 9186: 0x7731, + 9187: 0x7732, + 9188: 0x7733, + 9189: 0x7734, + 9190: 0x7739, + 9191: 0x773B, + 9192: 0x773D, + 9193: 0x773E, + 9194: 0x773F, + 9195: 0x7742, + 9196: 0x7744, + 9197: 0x7745, + 9198: 0x7746, + 9199: 0x7748, + 9200: 0x7749, + 9201: 0x774A, + 9202: 0x774B, + 9203: 0x774C, + 9204: 0x774D, + 9205: 0x774E, + 9206: 0x774F, + 9207: 0x7752, + 9208: 0x7753, + 9209: 0x7754, + 9210: 0x7755, + 9211: 0x7756, + 9212: 0x7757, + 9213: 0x7758, + 9214: 0x7759, + 9215: 0x775C, + 9216: 0x8584, + 9217: 0x96F9, + 9218: 0x4FDD, + 9219: 0x5821, + 9220: 0x9971, + 9221: 0x5B9D, + 9222: 0x62B1, + 9223: 0x62A5, + 9224: 0x66B4, + 9225: 0x8C79, + 9226: 0x9C8D, + 9227: 0x7206, + 9228: 0x676F, + 9229: 0x7891, + 9230: 0x60B2, + 9231: 0x5351, + 9232: 0x5317, + 9233: 0x8F88, + 9234: 0x80CC, + 9235: 0x8D1D, + 9236: 0x94A1, + 9237: 0x500D, + 9238: 0x72C8, + 9239: 0x5907, + 9240: 0x60EB, + 9241: 0x7119, + 9242: 0x88AB, + 9243: 0x5954, + 9244: 0x82EF, + 9245: 0x672C, + 9246: 0x7B28, + 9247: 0x5D29, + 9248: 0x7EF7, + 9249: 0x752D, + 9250: 0x6CF5, + 9251: 0x8E66, + 9252: 0x8FF8, + 9253: 0x903C, + 9254: 0x9F3B, + 9255: 0x6BD4, + 9256: 0x9119, + 9257: 0x7B14, + 9258: 0x5F7C, + 9259: 0x78A7, + 9260: 0x84D6, + 9261: 0x853D, + 9262: 0x6BD5, + 9263: 0x6BD9, + 9264: 0x6BD6, + 9265: 0x5E01, + 9266: 0x5E87, + 9267: 0x75F9, + 9268: 0x95ED, + 9269: 0x655D, + 9270: 0x5F0A, + 9271: 0x5FC5, + 9272: 0x8F9F, + 9273: 0x58C1, + 9274: 0x81C2, + 9275: 0x907F, + 9276: 0x965B, + 9277: 0x97AD, + 9278: 0x8FB9, + 9279: 0x7F16, + 9280: 0x8D2C, + 9281: 0x6241, + 9282: 0x4FBF, + 9283: 0x53D8, + 9284: 0x535E, + 9285: 0x8FA8, + 9286: 0x8FA9, + 9287: 0x8FAB, + 9288: 0x904D, + 9289: 0x6807, + 9290: 0x5F6A, + 9291: 0x8198, + 9292: 0x8868, + 9293: 0x9CD6, + 9294: 0x618B, + 9295: 0x522B, + 9296: 0x762A, + 9297: 0x5F6C, + 9298: 0x658C, + 9299: 0x6FD2, + 9300: 0x6EE8, + 9301: 0x5BBE, + 9302: 0x6448, + 9303: 0x5175, + 9304: 0x51B0, + 9305: 0x67C4, + 9306: 0x4E19, + 9307: 0x79C9, + 9308: 0x997C, + 9309: 0x70B3, + 9310: 0x775D, + 9311: 0x775E, + 9312: 0x775F, + 9313: 0x7760, + 9314: 0x7764, + 9315: 0x7767, + 9316: 0x7769, + 9317: 0x776A, + 9318: 0x776D, + 9319: 0x776E, + 9320: 0x776F, + 9321: 0x7770, + 9322: 0x7771, + 9323: 0x7772, + 9324: 0x7773, + 9325: 0x7774, + 9326: 0x7775, + 9327: 0x7776, + 9328: 0x7777, + 9329: 0x7778, + 9330: 0x777A, + 9331: 0x777B, + 9332: 0x777C, + 9333: 0x7781, + 9334: 0x7782, + 9335: 0x7783, + 9336: 0x7786, + 9337: 0x7787, + 9338: 0x7788, + 9339: 0x7789, + 9340: 0x778A, + 9341: 0x778B, + 9342: 0x778F, + 9343: 0x7790, + 9344: 0x7793, + 9345: 0x7794, + 9346: 0x7795, + 9347: 0x7796, + 9348: 0x7797, + 9349: 0x7798, + 9350: 0x7799, + 9351: 0x779A, + 9352: 0x779B, + 9353: 0x779C, + 9354: 0x779D, + 9355: 0x779E, + 9356: 0x77A1, + 9357: 0x77A3, + 9358: 0x77A4, + 9359: 0x77A6, + 9360: 0x77A8, + 9361: 0x77AB, + 9362: 0x77AD, + 9363: 0x77AE, + 9364: 0x77AF, + 9365: 0x77B1, + 9366: 0x77B2, + 9367: 0x77B4, + 9368: 0x77B6, + 9369: 0x77B7, + 9370: 0x77B8, + 9371: 0x77B9, + 9372: 0x77BA, + 9373: 0x77BC, + 9374: 0x77BE, + 9375: 0x77C0, + 9376: 0x77C1, + 9377: 0x77C2, + 9378: 0x77C3, + 9379: 0x77C4, + 9380: 0x77C5, + 9381: 0x77C6, + 9382: 0x77C7, + 9383: 0x77C8, + 9384: 0x77C9, + 9385: 0x77CA, + 9386: 0x77CB, + 9387: 0x77CC, + 9388: 0x77CE, + 9389: 0x77CF, + 9390: 0x77D0, + 9391: 0x77D1, + 9392: 0x77D2, + 9393: 0x77D3, + 9394: 0x77D4, + 9395: 0x77D5, + 9396: 0x77D6, + 9397: 0x77D8, + 9398: 0x77D9, + 9399: 0x77DA, + 9400: 0x77DD, + 9401: 0x77DE, + 9402: 0x77DF, + 9403: 0x77E0, + 9404: 0x77E1, + 9405: 0x77E4, + 9406: 0x75C5, + 9407: 0x5E76, + 9408: 0x73BB, + 9409: 0x83E0, + 9410: 0x64AD, + 9411: 0x62E8, + 9412: 0x94B5, + 9413: 0x6CE2, + 9414: 0x535A, + 9415: 0x52C3, + 9416: 0x640F, + 9417: 0x94C2, + 9418: 0x7B94, + 9419: 0x4F2F, + 9420: 0x5E1B, + 9421: 0x8236, + 9422: 0x8116, + 9423: 0x818A, + 9424: 0x6E24, + 9425: 0x6CCA, + 9426: 0x9A73, + 9427: 0x6355, + 9428: 0x535C, + 9429: 0x54FA, + 9430: 0x8865, + 9431: 0x57E0, + 9432: 0x4E0D, + 9433: 0x5E03, + 9434: 0x6B65, + 9435: 0x7C3F, + 9436: 0x90E8, + 9437: 0x6016, + 9438: 0x64E6, + 9439: 0x731C, + 9440: 0x88C1, + 9441: 0x6750, + 9442: 0x624D, + 9443: 0x8D22, + 9444: 0x776C, + 9445: 0x8E29, + 9446: 0x91C7, + 9447: 0x5F69, + 9448: 0x83DC, + 9449: 0x8521, + 9450: 0x9910, + 9451: 0x53C2, + 9452: 0x8695, + 9453: 0x6B8B, + 9454: 0x60ED, + 9455: 0x60E8, + 9456: 0x707F, + 9457: 0x82CD, + 9458: 0x8231, + 9459: 0x4ED3, + 9460: 0x6CA7, + 9461: 0x85CF, + 9462: 0x64CD, + 9463: 0x7CD9, + 9464: 0x69FD, + 9465: 0x66F9, + 9466: 0x8349, + 9467: 0x5395, + 9468: 0x7B56, + 9469: 0x4FA7, + 9470: 0x518C, + 9471: 0x6D4B, + 9472: 0x5C42, + 9473: 0x8E6D, + 9474: 0x63D2, + 9475: 0x53C9, + 9476: 0x832C, + 9477: 0x8336, + 9478: 0x67E5, + 9479: 0x78B4, + 9480: 0x643D, + 9481: 0x5BDF, + 9482: 0x5C94, + 9483: 0x5DEE, + 9484: 0x8BE7, + 9485: 0x62C6, + 9486: 0x67F4, + 9487: 0x8C7A, + 9488: 0x6400, + 9489: 0x63BA, + 9490: 0x8749, + 9491: 0x998B, + 9492: 0x8C17, + 9493: 0x7F20, + 9494: 0x94F2, + 9495: 0x4EA7, + 9496: 0x9610, + 9497: 0x98A4, + 9498: 0x660C, + 9499: 0x7316, + 9500: 0x77E6, + 9501: 0x77E8, + 9502: 0x77EA, + 9503: 0x77EF, + 9504: 0x77F0, + 9505: 0x77F1, + 9506: 0x77F2, + 9507: 0x77F4, + 9508: 0x77F5, + 9509: 0x77F7, + 9510: 0x77F9, + 9511: 0x77FA, + 9512: 0x77FB, + 9513: 0x77FC, + 9514: 0x7803, + 9515: 0x7804, + 9516: 0x7805, + 9517: 0x7806, + 9518: 0x7807, + 9519: 0x7808, + 9520: 0x780A, + 9521: 0x780B, + 9522: 0x780E, + 9523: 0x780F, + 9524: 0x7810, + 9525: 0x7813, + 9526: 0x7815, + 9527: 0x7819, + 9528: 0x781B, + 9529: 0x781E, + 9530: 0x7820, + 9531: 0x7821, + 9532: 0x7822, + 9533: 0x7824, + 9534: 0x7828, + 9535: 0x782A, + 9536: 0x782B, + 9537: 0x782E, + 9538: 0x782F, + 9539: 0x7831, + 9540: 0x7832, + 9541: 0x7833, + 9542: 0x7835, + 9543: 0x7836, + 9544: 0x783D, + 9545: 0x783F, + 9546: 0x7841, + 9547: 0x7842, + 9548: 0x7843, + 9549: 0x7844, + 9550: 0x7846, + 9551: 0x7848, + 9552: 0x7849, + 9553: 0x784A, + 9554: 0x784B, + 9555: 0x784D, + 9556: 0x784F, + 9557: 0x7851, + 9558: 0x7853, + 9559: 0x7854, + 9560: 0x7858, + 9561: 0x7859, + 9562: 0x785A, + 9563: 0x785B, + 9564: 0x785C, + 9565: 0x785E, + 9566: 0x785F, + 9567: 0x7860, + 9568: 0x7861, + 9569: 0x7862, + 9570: 0x7863, + 9571: 0x7864, + 9572: 0x7865, + 9573: 0x7866, + 9574: 0x7867, + 9575: 0x7868, + 9576: 0x7869, + 9577: 0x786F, + 9578: 0x7870, + 9579: 0x7871, + 9580: 0x7872, + 9581: 0x7873, + 9582: 0x7874, + 9583: 0x7875, + 9584: 0x7876, + 9585: 0x7878, + 9586: 0x7879, + 9587: 0x787A, + 9588: 0x787B, + 9589: 0x787D, + 9590: 0x787E, + 9591: 0x787F, + 9592: 0x7880, + 9593: 0x7881, + 9594: 0x7882, + 9595: 0x7883, + 9596: 0x573A, + 9597: 0x5C1D, + 9598: 0x5E38, + 9599: 0x957F, + 9600: 0x507F, + 9601: 0x80A0, + 9602: 0x5382, + 9603: 0x655E, + 9604: 0x7545, + 9605: 0x5531, + 9606: 0x5021, + 9607: 0x8D85, + 9608: 0x6284, + 9609: 0x949E, + 9610: 0x671D, + 9611: 0x5632, + 9612: 0x6F6E, + 9613: 0x5DE2, + 9614: 0x5435, + 9615: 0x7092, + 9616: 0x8F66, + 9617: 0x626F, + 9618: 0x64A4, + 9619: 0x63A3, + 9620: 0x5F7B, + 9621: 0x6F88, + 9622: 0x90F4, + 9623: 0x81E3, + 9624: 0x8FB0, + 9625: 0x5C18, + 9626: 0x6668, + 9627: 0x5FF1, + 9628: 0x6C89, + 9629: 0x9648, + 9630: 0x8D81, + 9631: 0x886C, + 9632: 0x6491, + 9633: 0x79F0, + 9634: 0x57CE, + 9635: 0x6A59, + 9636: 0x6210, + 9637: 0x5448, + 9638: 0x4E58, + 9639: 0x7A0B, + 9640: 0x60E9, + 9641: 0x6F84, + 9642: 0x8BDA, + 9643: 0x627F, + 9644: 0x901E, + 9645: 0x9A8B, + 9646: 0x79E4, + 9647: 0x5403, + 9648: 0x75F4, + 9649: 0x6301, + 9650: 0x5319, + 9651: 0x6C60, + 9652: 0x8FDF, + 9653: 0x5F1B, + 9654: 0x9A70, + 9655: 0x803B, + 9656: 0x9F7F, + 9657: 0x4F88, + 9658: 0x5C3A, + 9659: 0x8D64, + 9660: 0x7FC5, + 9661: 0x65A5, + 9662: 0x70BD, + 9663: 0x5145, + 9664: 0x51B2, + 9665: 0x866B, + 9666: 0x5D07, + 9667: 0x5BA0, + 9668: 0x62BD, + 9669: 0x916C, + 9670: 0x7574, + 9671: 0x8E0C, + 9672: 0x7A20, + 9673: 0x6101, + 9674: 0x7B79, + 9675: 0x4EC7, + 9676: 0x7EF8, + 9677: 0x7785, + 9678: 0x4E11, + 9679: 0x81ED, + 9680: 0x521D, + 9681: 0x51FA, + 9682: 0x6A71, + 9683: 0x53A8, + 9684: 0x8E87, + 9685: 0x9504, + 9686: 0x96CF, + 9687: 0x6EC1, + 9688: 0x9664, + 9689: 0x695A, + 9690: 0x7884, + 9691: 0x7885, + 9692: 0x7886, + 9693: 0x7888, + 9694: 0x788A, + 9695: 0x788B, + 9696: 0x788F, + 9697: 0x7890, + 9698: 0x7892, + 9699: 0x7894, + 9700: 0x7895, + 9701: 0x7896, + 9702: 0x7899, + 9703: 0x789D, + 9704: 0x789E, + 9705: 0x78A0, + 9706: 0x78A2, + 9707: 0x78A4, + 9708: 0x78A6, + 9709: 0x78A8, + 9710: 0x78A9, + 9711: 0x78AA, + 9712: 0x78AB, + 9713: 0x78AC, + 9714: 0x78AD, + 9715: 0x78AE, + 9716: 0x78AF, + 9717: 0x78B5, + 9718: 0x78B6, + 9719: 0x78B7, + 9720: 0x78B8, + 9721: 0x78BA, + 9722: 0x78BB, + 9723: 0x78BC, + 9724: 0x78BD, + 9725: 0x78BF, + 9726: 0x78C0, + 9727: 0x78C2, + 9728: 0x78C3, + 9729: 0x78C4, + 9730: 0x78C6, + 9731: 0x78C7, + 9732: 0x78C8, + 9733: 0x78CC, + 9734: 0x78CD, + 9735: 0x78CE, + 9736: 0x78CF, + 9737: 0x78D1, + 9738: 0x78D2, + 9739: 0x78D3, + 9740: 0x78D6, + 9741: 0x78D7, + 9742: 0x78D8, + 9743: 0x78DA, + 9744: 0x78DB, + 9745: 0x78DC, + 9746: 0x78DD, + 9747: 0x78DE, + 9748: 0x78DF, + 9749: 0x78E0, + 9750: 0x78E1, + 9751: 0x78E2, + 9752: 0x78E3, + 9753: 0x78E4, + 9754: 0x78E5, + 9755: 0x78E6, + 9756: 0x78E7, + 9757: 0x78E9, + 9758: 0x78EA, + 9759: 0x78EB, + 9760: 0x78ED, + 9761: 0x78EE, + 9762: 0x78EF, + 9763: 0x78F0, + 9764: 0x78F1, + 9765: 0x78F3, + 9766: 0x78F5, + 9767: 0x78F6, + 9768: 0x78F8, + 9769: 0x78F9, + 9770: 0x78FB, + 9771: 0x78FC, + 9772: 0x78FD, + 9773: 0x78FE, + 9774: 0x78FF, + 9775: 0x7900, + 9776: 0x7902, + 9777: 0x7903, + 9778: 0x7904, + 9779: 0x7906, + 9780: 0x7907, + 9781: 0x7908, + 9782: 0x7909, + 9783: 0x790A, + 9784: 0x790B, + 9785: 0x790C, + 9786: 0x7840, + 9787: 0x50A8, + 9788: 0x77D7, + 9789: 0x6410, + 9790: 0x89E6, + 9791: 0x5904, + 9792: 0x63E3, + 9793: 0x5DDD, + 9794: 0x7A7F, + 9795: 0x693D, + 9796: 0x4F20, + 9797: 0x8239, + 9798: 0x5598, + 9799: 0x4E32, + 9800: 0x75AE, + 9801: 0x7A97, + 9802: 0x5E62, + 9803: 0x5E8A, + 9804: 0x95EF, + 9805: 0x521B, + 9806: 0x5439, + 9807: 0x708A, + 9808: 0x6376, + 9809: 0x9524, + 9810: 0x5782, + 9811: 0x6625, + 9812: 0x693F, + 9813: 0x9187, + 9814: 0x5507, + 9815: 0x6DF3, + 9816: 0x7EAF, + 9817: 0x8822, + 9818: 0x6233, + 9819: 0x7EF0, + 9820: 0x75B5, + 9821: 0x8328, + 9822: 0x78C1, + 9823: 0x96CC, + 9824: 0x8F9E, + 9825: 0x6148, + 9826: 0x74F7, + 9827: 0x8BCD, + 9828: 0x6B64, + 9829: 0x523A, + 9830: 0x8D50, + 9831: 0x6B21, + 9832: 0x806A, + 9833: 0x8471, + 9834: 0x56F1, + 9835: 0x5306, + 9836: 0x4ECE, + 9837: 0x4E1B, + 9838: 0x51D1, + 9839: 0x7C97, + 9840: 0x918B, + 9841: 0x7C07, + 9842: 0x4FC3, + 9843: 0x8E7F, + 9844: 0x7BE1, + 9845: 0x7A9C, + 9846: 0x6467, + 9847: 0x5D14, + 9848: 0x50AC, + 9849: 0x8106, + 9850: 0x7601, + 9851: 0x7CB9, + 9852: 0x6DEC, + 9853: 0x7FE0, + 9854: 0x6751, + 9855: 0x5B58, + 9856: 0x5BF8, + 9857: 0x78CB, + 9858: 0x64AE, + 9859: 0x6413, + 9860: 0x63AA, + 9861: 0x632B, + 9862: 0x9519, + 9863: 0x642D, + 9864: 0x8FBE, + 9865: 0x7B54, + 9866: 0x7629, + 9867: 0x6253, + 9868: 0x5927, + 9869: 0x5446, + 9870: 0x6B79, + 9871: 0x50A3, + 9872: 0x6234, + 9873: 0x5E26, + 9874: 0x6B86, + 9875: 0x4EE3, + 9876: 0x8D37, + 9877: 0x888B, + 9878: 0x5F85, + 9879: 0x902E, + 9880: 0x790D, + 9881: 0x790E, + 9882: 0x790F, + 9883: 0x7910, + 9884: 0x7911, + 9885: 0x7912, + 9886: 0x7914, + 9887: 0x7915, + 9888: 0x7916, + 9889: 0x7917, + 9890: 0x7918, + 9891: 0x7919, + 9892: 0x791A, + 9893: 0x791B, + 9894: 0x791C, + 9895: 0x791D, + 9896: 0x791F, + 9897: 0x7920, + 9898: 0x7921, + 9899: 0x7922, + 9900: 0x7923, + 9901: 0x7925, + 9902: 0x7926, + 9903: 0x7927, + 9904: 0x7928, + 9905: 0x7929, + 9906: 0x792A, + 9907: 0x792B, + 9908: 0x792C, + 9909: 0x792D, + 9910: 0x792E, + 9911: 0x792F, + 9912: 0x7930, + 9913: 0x7931, + 9914: 0x7932, + 9915: 0x7933, + 9916: 0x7935, + 9917: 0x7936, + 9918: 0x7937, + 9919: 0x7938, + 9920: 0x7939, + 9921: 0x793D, + 9922: 0x793F, + 9923: 0x7942, + 9924: 0x7943, + 9925: 0x7944, + 9926: 0x7945, + 9927: 0x7947, + 9928: 0x794A, + 9929: 0x794B, + 9930: 0x794C, + 9931: 0x794D, + 9932: 0x794E, + 9933: 0x794F, + 9934: 0x7950, + 9935: 0x7951, + 9936: 0x7952, + 9937: 0x7954, + 9938: 0x7955, + 9939: 0x7958, + 9940: 0x7959, + 9941: 0x7961, + 9942: 0x7963, + 9943: 0x7964, + 9944: 0x7966, + 9945: 0x7969, + 9946: 0x796A, + 9947: 0x796B, + 9948: 0x796C, + 9949: 0x796E, + 9950: 0x7970, + 9951: 0x7971, + 9952: 0x7972, + 9953: 0x7973, + 9954: 0x7974, + 9955: 0x7975, + 9956: 0x7976, + 9957: 0x7979, + 9958: 0x797B, + 9959: 0x797C, + 9960: 0x797D, + 9961: 0x797E, + 9962: 0x797F, + 9963: 0x7982, + 9964: 0x7983, + 9965: 0x7986, + 9966: 0x7987, + 9967: 0x7988, + 9968: 0x7989, + 9969: 0x798B, + 9970: 0x798C, + 9971: 0x798D, + 9972: 0x798E, + 9973: 0x7990, + 9974: 0x7991, + 9975: 0x7992, + 9976: 0x6020, + 9977: 0x803D, + 9978: 0x62C5, + 9979: 0x4E39, + 9980: 0x5355, + 9981: 0x90F8, + 9982: 0x63B8, + 9983: 0x80C6, + 9984: 0x65E6, + 9985: 0x6C2E, + 9986: 0x4F46, + 9987: 0x60EE, + 9988: 0x6DE1, + 9989: 0x8BDE, + 9990: 0x5F39, + 9991: 0x86CB, + 9992: 0x5F53, + 9993: 0x6321, + 9994: 0x515A, + 9995: 0x8361, + 9996: 0x6863, + 9997: 0x5200, + 9998: 0x6363, + 9999: 0x8E48, + 10000: 0x5012, + 10001: 0x5C9B, + 10002: 0x7977, + 10003: 0x5BFC, + 10004: 0x5230, + 10005: 0x7A3B, + 10006: 0x60BC, + 10007: 0x9053, + 10008: 0x76D7, + 10009: 0x5FB7, + 10010: 0x5F97, + 10011: 0x7684, + 10012: 0x8E6C, + 10013: 0x706F, + 10014: 0x767B, + 10015: 0x7B49, + 10016: 0x77AA, + 10017: 0x51F3, + 10018: 0x9093, + 10019: 0x5824, + 10020: 0x4F4E, + 10021: 0x6EF4, + 10022: 0x8FEA, + 10023: 0x654C, + 10024: 0x7B1B, + 10025: 0x72C4, + 10026: 0x6DA4, + 10027: 0x7FDF, + 10028: 0x5AE1, + 10029: 0x62B5, + 10030: 0x5E95, + 10031: 0x5730, + 10032: 0x8482, + 10033: 0x7B2C, + 10034: 0x5E1D, + 10035: 0x5F1F, + 10036: 0x9012, + 10037: 0x7F14, + 10038: 0x98A0, + 10039: 0x6382, + 10040: 0x6EC7, + 10041: 0x7898, + 10042: 0x70B9, + 10043: 0x5178, + 10044: 0x975B, + 10045: 0x57AB, + 10046: 0x7535, + 10047: 0x4F43, + 10048: 0x7538, + 10049: 0x5E97, + 10050: 0x60E6, + 10051: 0x5960, + 10052: 0x6DC0, + 10053: 0x6BBF, + 10054: 0x7889, + 10055: 0x53FC, + 10056: 0x96D5, + 10057: 0x51CB, + 10058: 0x5201, + 10059: 0x6389, + 10060: 0x540A, + 10061: 0x9493, + 10062: 0x8C03, + 10063: 0x8DCC, + 10064: 0x7239, + 10065: 0x789F, + 10066: 0x8776, + 10067: 0x8FED, + 10068: 0x8C0D, + 10069: 0x53E0, + 10070: 0x7993, + 10071: 0x7994, + 10072: 0x7995, + 10073: 0x7996, + 10074: 0x7997, + 10075: 0x7998, + 10076: 0x7999, + 10077: 0x799B, + 10078: 0x799C, + 10079: 0x799D, + 10080: 0x799E, + 10081: 0x799F, + 10082: 0x79A0, + 10083: 0x79A1, + 10084: 0x79A2, + 10085: 0x79A3, + 10086: 0x79A4, + 10087: 0x79A5, + 10088: 0x79A6, + 10089: 0x79A8, + 10090: 0x79A9, + 10091: 0x79AA, + 10092: 0x79AB, + 10093: 0x79AC, + 10094: 0x79AD, + 10095: 0x79AE, + 10096: 0x79AF, + 10097: 0x79B0, + 10098: 0x79B1, + 10099: 0x79B2, + 10100: 0x79B4, + 10101: 0x79B5, + 10102: 0x79B6, + 10103: 0x79B7, + 10104: 0x79B8, + 10105: 0x79BC, + 10106: 0x79BF, + 10107: 0x79C2, + 10108: 0x79C4, + 10109: 0x79C5, + 10110: 0x79C7, + 10111: 0x79C8, + 10112: 0x79CA, + 10113: 0x79CC, + 10114: 0x79CE, + 10115: 0x79CF, + 10116: 0x79D0, + 10117: 0x79D3, + 10118: 0x79D4, + 10119: 0x79D6, + 10120: 0x79D7, + 10121: 0x79D9, + 10122: 0x79DA, + 10123: 0x79DB, + 10124: 0x79DC, + 10125: 0x79DD, + 10126: 0x79DE, + 10127: 0x79E0, + 10128: 0x79E1, + 10129: 0x79E2, + 10130: 0x79E5, + 10131: 0x79E8, + 10132: 0x79EA, + 10133: 0x79EC, + 10134: 0x79EE, + 10135: 0x79F1, + 10136: 0x79F2, + 10137: 0x79F3, + 10138: 0x79F4, + 10139: 0x79F5, + 10140: 0x79F6, + 10141: 0x79F7, + 10142: 0x79F9, + 10143: 0x79FA, + 10144: 0x79FC, + 10145: 0x79FE, + 10146: 0x79FF, + 10147: 0x7A01, + 10148: 0x7A04, + 10149: 0x7A05, + 10150: 0x7A07, + 10151: 0x7A08, + 10152: 0x7A09, + 10153: 0x7A0A, + 10154: 0x7A0C, + 10155: 0x7A0F, + 10156: 0x7A10, + 10157: 0x7A11, + 10158: 0x7A12, + 10159: 0x7A13, + 10160: 0x7A15, + 10161: 0x7A16, + 10162: 0x7A18, + 10163: 0x7A19, + 10164: 0x7A1B, + 10165: 0x7A1C, + 10166: 0x4E01, + 10167: 0x76EF, + 10168: 0x53EE, + 10169: 0x9489, + 10170: 0x9876, + 10171: 0x9F0E, + 10172: 0x952D, + 10173: 0x5B9A, + 10174: 0x8BA2, + 10175: 0x4E22, + 10176: 0x4E1C, + 10177: 0x51AC, + 10178: 0x8463, + 10179: 0x61C2, + 10180: 0x52A8, + 10181: 0x680B, + 10182: 0x4F97, + 10183: 0x606B, + 10184: 0x51BB, + 10185: 0x6D1E, + 10186: 0x515C, + 10187: 0x6296, + 10188: 0x6597, + 10189: 0x9661, + 10190: 0x8C46, + 10191: 0x9017, + 10192: 0x75D8, + 10193: 0x90FD, + 10194: 0x7763, + 10195: 0x6BD2, + 10196: 0x728A, + 10197: 0x72EC, + 10198: 0x8BFB, + 10199: 0x5835, + 10200: 0x7779, + 10201: 0x8D4C, + 10202: 0x675C, + 10203: 0x9540, + 10204: 0x809A, + 10205: 0x5EA6, + 10206: 0x6E21, + 10207: 0x5992, + 10208: 0x7AEF, + 10209: 0x77ED, + 10210: 0x953B, + 10211: 0x6BB5, + 10212: 0x65AD, + 10213: 0x7F0E, + 10214: 0x5806, + 10215: 0x5151, + 10216: 0x961F, + 10217: 0x5BF9, + 10218: 0x58A9, + 10219: 0x5428, + 10220: 0x8E72, + 10221: 0x6566, + 10222: 0x987F, + 10223: 0x56E4, + 10224: 0x949D, + 10225: 0x76FE, + 10226: 0x9041, + 10227: 0x6387, + 10228: 0x54C6, + 10229: 0x591A, + 10230: 0x593A, + 10231: 0x579B, + 10232: 0x8EB2, + 10233: 0x6735, + 10234: 0x8DFA, + 10235: 0x8235, + 10236: 0x5241, + 10237: 0x60F0, + 10238: 0x5815, + 10239: 0x86FE, + 10240: 0x5CE8, + 10241: 0x9E45, + 10242: 0x4FC4, + 10243: 0x989D, + 10244: 0x8BB9, + 10245: 0x5A25, + 10246: 0x6076, + 10247: 0x5384, + 10248: 0x627C, + 10249: 0x904F, + 10250: 0x9102, + 10251: 0x997F, + 10252: 0x6069, + 10253: 0x800C, + 10254: 0x513F, + 10255: 0x8033, + 10256: 0x5C14, + 10257: 0x9975, + 10258: 0x6D31, + 10259: 0x4E8C, + 10260: 0x7A1D, + 10261: 0x7A1F, + 10262: 0x7A21, + 10263: 0x7A22, + 10264: 0x7A24, + 10265: 0x7A25, + 10266: 0x7A26, + 10267: 0x7A27, + 10268: 0x7A28, + 10269: 0x7A29, + 10270: 0x7A2A, + 10271: 0x7A2B, + 10272: 0x7A2C, + 10273: 0x7A2D, + 10274: 0x7A2E, + 10275: 0x7A2F, + 10276: 0x7A30, + 10277: 0x7A31, + 10278: 0x7A32, + 10279: 0x7A34, + 10280: 0x7A35, + 10281: 0x7A36, + 10282: 0x7A38, + 10283: 0x7A3A, + 10284: 0x7A3E, + 10285: 0x7A40, + 10286: 0x7A41, + 10287: 0x7A42, + 10288: 0x7A43, + 10289: 0x7A44, + 10290: 0x7A45, + 10291: 0x7A47, + 10292: 0x7A48, + 10293: 0x7A49, + 10294: 0x7A4A, + 10295: 0x7A4B, + 10296: 0x7A4C, + 10297: 0x7A4D, + 10298: 0x7A4E, + 10299: 0x7A4F, + 10300: 0x7A50, + 10301: 0x7A52, + 10302: 0x7A53, + 10303: 0x7A54, + 10304: 0x7A55, + 10305: 0x7A56, + 10306: 0x7A58, + 10307: 0x7A59, + 10308: 0x7A5A, + 10309: 0x7A5B, + 10310: 0x7A5C, + 10311: 0x7A5D, + 10312: 0x7A5E, + 10313: 0x7A5F, + 10314: 0x7A60, + 10315: 0x7A61, + 10316: 0x7A62, + 10317: 0x7A63, + 10318: 0x7A64, + 10319: 0x7A65, + 10320: 0x7A66, + 10321: 0x7A67, + 10322: 0x7A68, + 10323: 0x7A69, + 10324: 0x7A6A, + 10325: 0x7A6B, + 10326: 0x7A6C, + 10327: 0x7A6D, + 10328: 0x7A6E, + 10329: 0x7A6F, + 10330: 0x7A71, + 10331: 0x7A72, + 10332: 0x7A73, + 10333: 0x7A75, + 10334: 0x7A7B, + 10335: 0x7A7C, + 10336: 0x7A7D, + 10337: 0x7A7E, + 10338: 0x7A82, + 10339: 0x7A85, + 10340: 0x7A87, + 10341: 0x7A89, + 10342: 0x7A8A, + 10343: 0x7A8B, + 10344: 0x7A8C, + 10345: 0x7A8E, + 10346: 0x7A8F, + 10347: 0x7A90, + 10348: 0x7A93, + 10349: 0x7A94, + 10350: 0x7A99, + 10351: 0x7A9A, + 10352: 0x7A9B, + 10353: 0x7A9E, + 10354: 0x7AA1, + 10355: 0x7AA2, + 10356: 0x8D30, + 10357: 0x53D1, + 10358: 0x7F5A, + 10359: 0x7B4F, + 10360: 0x4F10, + 10361: 0x4E4F, + 10362: 0x9600, + 10363: 0x6CD5, + 10364: 0x73D0, + 10365: 0x85E9, + 10366: 0x5E06, + 10367: 0x756A, + 10368: 0x7FFB, + 10369: 0x6A0A, + 10370: 0x77FE, + 10371: 0x9492, + 10372: 0x7E41, + 10373: 0x51E1, + 10374: 0x70E6, + 10375: 0x53CD, + 10376: 0x8FD4, + 10377: 0x8303, + 10378: 0x8D29, + 10379: 0x72AF, + 10380: 0x996D, + 10381: 0x6CDB, + 10382: 0x574A, + 10383: 0x82B3, + 10384: 0x65B9, + 10385: 0x80AA, + 10386: 0x623F, + 10387: 0x9632, + 10388: 0x59A8, + 10389: 0x4EFF, + 10390: 0x8BBF, + 10391: 0x7EBA, + 10392: 0x653E, + 10393: 0x83F2, + 10394: 0x975E, + 10395: 0x5561, + 10396: 0x98DE, + 10397: 0x80A5, + 10398: 0x532A, + 10399: 0x8BFD, + 10400: 0x5420, + 10401: 0x80BA, + 10402: 0x5E9F, + 10403: 0x6CB8, + 10404: 0x8D39, + 10405: 0x82AC, + 10406: 0x915A, + 10407: 0x5429, + 10408: 0x6C1B, + 10409: 0x5206, + 10410: 0x7EB7, + 10411: 0x575F, + 10412: 0x711A, + 10413: 0x6C7E, + 10414: 0x7C89, + 10415: 0x594B, + 10416: 0x4EFD, + 10417: 0x5FFF, + 10418: 0x6124, + 10419: 0x7CAA, + 10420: 0x4E30, + 10421: 0x5C01, + 10422: 0x67AB, + 10423: 0x8702, + 10424: 0x5CF0, + 10425: 0x950B, + 10426: 0x98CE, + 10427: 0x75AF, + 10428: 0x70FD, + 10429: 0x9022, + 10430: 0x51AF, + 10431: 0x7F1D, + 10432: 0x8BBD, + 10433: 0x5949, + 10434: 0x51E4, + 10435: 0x4F5B, + 10436: 0x5426, + 10437: 0x592B, + 10438: 0x6577, + 10439: 0x80A4, + 10440: 0x5B75, + 10441: 0x6276, + 10442: 0x62C2, + 10443: 0x8F90, + 10444: 0x5E45, + 10445: 0x6C1F, + 10446: 0x7B26, + 10447: 0x4F0F, + 10448: 0x4FD8, + 10449: 0x670D, + 10450: 0x7AA3, + 10451: 0x7AA4, + 10452: 0x7AA7, + 10453: 0x7AA9, + 10454: 0x7AAA, + 10455: 0x7AAB, + 10456: 0x7AAE, + 10457: 0x7AAF, + 10458: 0x7AB0, + 10459: 0x7AB1, + 10460: 0x7AB2, + 10461: 0x7AB4, + 10462: 0x7AB5, + 10463: 0x7AB6, + 10464: 0x7AB7, + 10465: 0x7AB8, + 10466: 0x7AB9, + 10467: 0x7ABA, + 10468: 0x7ABB, + 10469: 0x7ABC, + 10470: 0x7ABD, + 10471: 0x7ABE, + 10472: 0x7AC0, + 10473: 0x7AC1, + 10474: 0x7AC2, + 10475: 0x7AC3, + 10476: 0x7AC4, + 10477: 0x7AC5, + 10478: 0x7AC6, + 10479: 0x7AC7, + 10480: 0x7AC8, + 10481: 0x7AC9, + 10482: 0x7ACA, + 10483: 0x7ACC, + 10484: 0x7ACD, + 10485: 0x7ACE, + 10486: 0x7ACF, + 10487: 0x7AD0, + 10488: 0x7AD1, + 10489: 0x7AD2, + 10490: 0x7AD3, + 10491: 0x7AD4, + 10492: 0x7AD5, + 10493: 0x7AD7, + 10494: 0x7AD8, + 10495: 0x7ADA, + 10496: 0x7ADB, + 10497: 0x7ADC, + 10498: 0x7ADD, + 10499: 0x7AE1, + 10500: 0x7AE2, + 10501: 0x7AE4, + 10502: 0x7AE7, + 10503: 0x7AE8, + 10504: 0x7AE9, + 10505: 0x7AEA, + 10506: 0x7AEB, + 10507: 0x7AEC, + 10508: 0x7AEE, + 10509: 0x7AF0, + 10510: 0x7AF1, + 10511: 0x7AF2, + 10512: 0x7AF3, + 10513: 0x7AF4, + 10514: 0x7AF5, + 10515: 0x7AF6, + 10516: 0x7AF7, + 10517: 0x7AF8, + 10518: 0x7AFB, + 10519: 0x7AFC, + 10520: 0x7AFE, + 10521: 0x7B00, + 10522: 0x7B01, + 10523: 0x7B02, + 10524: 0x7B05, + 10525: 0x7B07, + 10526: 0x7B09, + 10527: 0x7B0C, + 10528: 0x7B0D, + 10529: 0x7B0E, + 10530: 0x7B10, + 10531: 0x7B12, + 10532: 0x7B13, + 10533: 0x7B16, + 10534: 0x7B17, + 10535: 0x7B18, + 10536: 0x7B1A, + 10537: 0x7B1C, + 10538: 0x7B1D, + 10539: 0x7B1F, + 10540: 0x7B21, + 10541: 0x7B22, + 10542: 0x7B23, + 10543: 0x7B27, + 10544: 0x7B29, + 10545: 0x7B2D, + 10546: 0x6D6E, + 10547: 0x6DAA, + 10548: 0x798F, + 10549: 0x88B1, + 10550: 0x5F17, + 10551: 0x752B, + 10552: 0x629A, + 10553: 0x8F85, + 10554: 0x4FEF, + 10555: 0x91DC, + 10556: 0x65A7, + 10557: 0x812F, + 10558: 0x8151, + 10559: 0x5E9C, + 10560: 0x8150, + 10561: 0x8D74, + 10562: 0x526F, + 10563: 0x8986, + 10564: 0x8D4B, + 10565: 0x590D, + 10566: 0x5085, + 10567: 0x4ED8, + 10568: 0x961C, + 10569: 0x7236, + 10570: 0x8179, + 10571: 0x8D1F, + 10572: 0x5BCC, + 10573: 0x8BA3, + 10574: 0x9644, + 10575: 0x5987, + 10576: 0x7F1A, + 10577: 0x5490, + 10578: 0x5676, + 10579: 0x560E, + 10580: 0x8BE5, + 10581: 0x6539, + 10582: 0x6982, + 10583: 0x9499, + 10584: 0x76D6, + 10585: 0x6E89, + 10586: 0x5E72, + 10587: 0x7518, + 10588: 0x6746, + 10589: 0x67D1, + 10590: 0x7AFF, + 10591: 0x809D, + 10592: 0x8D76, + 10593: 0x611F, + 10594: 0x79C6, + 10595: 0x6562, + 10596: 0x8D63, + 10597: 0x5188, + 10598: 0x521A, + 10599: 0x94A2, + 10600: 0x7F38, + 10601: 0x809B, + 10602: 0x7EB2, + 10603: 0x5C97, + 10604: 0x6E2F, + 10605: 0x6760, + 10606: 0x7BD9, + 10607: 0x768B, + 10608: 0x9AD8, + 10609: 0x818F, + 10610: 0x7F94, + 10611: 0x7CD5, + 10612: 0x641E, + 10613: 0x9550, + 10614: 0x7A3F, + 10615: 0x544A, + 10616: 0x54E5, + 10617: 0x6B4C, + 10618: 0x6401, + 10619: 0x6208, + 10620: 0x9E3D, + 10621: 0x80F3, + 10622: 0x7599, + 10623: 0x5272, + 10624: 0x9769, + 10625: 0x845B, + 10626: 0x683C, + 10627: 0x86E4, + 10628: 0x9601, + 10629: 0x9694, + 10630: 0x94EC, + 10631: 0x4E2A, + 10632: 0x5404, + 10633: 0x7ED9, + 10634: 0x6839, + 10635: 0x8DDF, + 10636: 0x8015, + 10637: 0x66F4, + 10638: 0x5E9A, + 10639: 0x7FB9, + 10640: 0x7B2F, + 10641: 0x7B30, + 10642: 0x7B32, + 10643: 0x7B34, + 10644: 0x7B35, + 10645: 0x7B36, + 10646: 0x7B37, + 10647: 0x7B39, + 10648: 0x7B3B, + 10649: 0x7B3D, + 10650: 0x7B3F, + 10651: 0x7B40, + 10652: 0x7B41, + 10653: 0x7B42, + 10654: 0x7B43, + 10655: 0x7B44, + 10656: 0x7B46, + 10657: 0x7B48, + 10658: 0x7B4A, + 10659: 0x7B4D, + 10660: 0x7B4E, + 10661: 0x7B53, + 10662: 0x7B55, + 10663: 0x7B57, + 10664: 0x7B59, + 10665: 0x7B5C, + 10666: 0x7B5E, + 10667: 0x7B5F, + 10668: 0x7B61, + 10669: 0x7B63, + 10670: 0x7B64, + 10671: 0x7B65, + 10672: 0x7B66, + 10673: 0x7B67, + 10674: 0x7B68, + 10675: 0x7B69, + 10676: 0x7B6A, + 10677: 0x7B6B, + 10678: 0x7B6C, + 10679: 0x7B6D, + 10680: 0x7B6F, + 10681: 0x7B70, + 10682: 0x7B73, + 10683: 0x7B74, + 10684: 0x7B76, + 10685: 0x7B78, + 10686: 0x7B7A, + 10687: 0x7B7C, + 10688: 0x7B7D, + 10689: 0x7B7F, + 10690: 0x7B81, + 10691: 0x7B82, + 10692: 0x7B83, + 10693: 0x7B84, + 10694: 0x7B86, + 10695: 0x7B87, + 10696: 0x7B88, + 10697: 0x7B89, + 10698: 0x7B8A, + 10699: 0x7B8B, + 10700: 0x7B8C, + 10701: 0x7B8E, + 10702: 0x7B8F, + 10703: 0x7B91, + 10704: 0x7B92, + 10705: 0x7B93, + 10706: 0x7B96, + 10707: 0x7B98, + 10708: 0x7B99, + 10709: 0x7B9A, + 10710: 0x7B9B, + 10711: 0x7B9E, + 10712: 0x7B9F, + 10713: 0x7BA0, + 10714: 0x7BA3, + 10715: 0x7BA4, + 10716: 0x7BA5, + 10717: 0x7BAE, + 10718: 0x7BAF, + 10719: 0x7BB0, + 10720: 0x7BB2, + 10721: 0x7BB3, + 10722: 0x7BB5, + 10723: 0x7BB6, + 10724: 0x7BB7, + 10725: 0x7BB9, + 10726: 0x7BBA, + 10727: 0x7BBB, + 10728: 0x7BBC, + 10729: 0x7BBD, + 10730: 0x7BBE, + 10731: 0x7BBF, + 10732: 0x7BC0, + 10733: 0x7BC2, + 10734: 0x7BC3, + 10735: 0x7BC4, + 10736: 0x57C2, + 10737: 0x803F, + 10738: 0x6897, + 10739: 0x5DE5, + 10740: 0x653B, + 10741: 0x529F, + 10742: 0x606D, + 10743: 0x9F9A, + 10744: 0x4F9B, + 10745: 0x8EAC, + 10746: 0x516C, + 10747: 0x5BAB, + 10748: 0x5F13, + 10749: 0x5DE9, + 10750: 0x6C5E, + 10751: 0x62F1, + 10752: 0x8D21, + 10753: 0x5171, + 10754: 0x94A9, + 10755: 0x52FE, + 10756: 0x6C9F, + 10757: 0x82DF, + 10758: 0x72D7, + 10759: 0x57A2, + 10760: 0x6784, + 10761: 0x8D2D, + 10762: 0x591F, + 10763: 0x8F9C, + 10764: 0x83C7, + 10765: 0x5495, + 10766: 0x7B8D, + 10767: 0x4F30, + 10768: 0x6CBD, + 10769: 0x5B64, + 10770: 0x59D1, + 10771: 0x9F13, + 10772: 0x53E4, + 10773: 0x86CA, + 10774: 0x9AA8, + 10775: 0x8C37, + 10776: 0x80A1, + 10777: 0x6545, + 10778: 0x987E, + 10779: 0x56FA, + 10780: 0x96C7, + 10781: 0x522E, + 10782: 0x74DC, + 10783: 0x5250, + 10784: 0x5BE1, + 10785: 0x6302, + 10786: 0x8902, + 10787: 0x4E56, + 10788: 0x62D0, + 10789: 0x602A, + 10790: 0x68FA, + 10791: 0x5173, + 10792: 0x5B98, + 10793: 0x51A0, + 10794: 0x89C2, + 10795: 0x7BA1, + 10796: 0x9986, + 10797: 0x7F50, + 10798: 0x60EF, + 10799: 0x704C, + 10800: 0x8D2F, + 10801: 0x5149, + 10802: 0x5E7F, + 10803: 0x901B, + 10804: 0x7470, + 10805: 0x89C4, + 10806: 0x572D, + 10807: 0x7845, + 10808: 0x5F52, + 10809: 0x9F9F, + 10810: 0x95FA, + 10811: 0x8F68, + 10812: 0x9B3C, + 10813: 0x8BE1, + 10814: 0x7678, + 10815: 0x6842, + 10816: 0x67DC, + 10817: 0x8DEA, + 10818: 0x8D35, + 10819: 0x523D, + 10820: 0x8F8A, + 10821: 0x6EDA, + 10822: 0x68CD, + 10823: 0x9505, + 10824: 0x90ED, + 10825: 0x56FD, + 10826: 0x679C, + 10827: 0x88F9, + 10828: 0x8FC7, + 10829: 0x54C8, + 10830: 0x7BC5, + 10831: 0x7BC8, + 10832: 0x7BC9, + 10833: 0x7BCA, + 10834: 0x7BCB, + 10835: 0x7BCD, + 10836: 0x7BCE, + 10837: 0x7BCF, + 10838: 0x7BD0, + 10839: 0x7BD2, + 10840: 0x7BD4, + 10841: 0x7BD5, + 10842: 0x7BD6, + 10843: 0x7BD7, + 10844: 0x7BD8, + 10845: 0x7BDB, + 10846: 0x7BDC, + 10847: 0x7BDE, + 10848: 0x7BDF, + 10849: 0x7BE0, + 10850: 0x7BE2, + 10851: 0x7BE3, + 10852: 0x7BE4, + 10853: 0x7BE7, + 10854: 0x7BE8, + 10855: 0x7BE9, + 10856: 0x7BEB, + 10857: 0x7BEC, + 10858: 0x7BED, + 10859: 0x7BEF, + 10860: 0x7BF0, + 10861: 0x7BF2, + 10862: 0x7BF3, + 10863: 0x7BF4, + 10864: 0x7BF5, + 10865: 0x7BF6, + 10866: 0x7BF8, + 10867: 0x7BF9, + 10868: 0x7BFA, + 10869: 0x7BFB, + 10870: 0x7BFD, + 10871: 0x7BFF, + 10872: 0x7C00, + 10873: 0x7C01, + 10874: 0x7C02, + 10875: 0x7C03, + 10876: 0x7C04, + 10877: 0x7C05, + 10878: 0x7C06, + 10879: 0x7C08, + 10880: 0x7C09, + 10881: 0x7C0A, + 10882: 0x7C0D, + 10883: 0x7C0E, + 10884: 0x7C10, + 10885: 0x7C11, + 10886: 0x7C12, + 10887: 0x7C13, + 10888: 0x7C14, + 10889: 0x7C15, + 10890: 0x7C17, + 10891: 0x7C18, + 10892: 0x7C19, + 10893: 0x7C1A, + 10894: 0x7C1B, + 10895: 0x7C1C, + 10896: 0x7C1D, + 10897: 0x7C1E, + 10898: 0x7C20, + 10899: 0x7C21, + 10900: 0x7C22, + 10901: 0x7C23, + 10902: 0x7C24, + 10903: 0x7C25, + 10904: 0x7C28, + 10905: 0x7C29, + 10906: 0x7C2B, + 10907: 0x7C2C, + 10908: 0x7C2D, + 10909: 0x7C2E, + 10910: 0x7C2F, + 10911: 0x7C30, + 10912: 0x7C31, + 10913: 0x7C32, + 10914: 0x7C33, + 10915: 0x7C34, + 10916: 0x7C35, + 10917: 0x7C36, + 10918: 0x7C37, + 10919: 0x7C39, + 10920: 0x7C3A, + 10921: 0x7C3B, + 10922: 0x7C3C, + 10923: 0x7C3D, + 10924: 0x7C3E, + 10925: 0x7C42, + 10926: 0x9AB8, + 10927: 0x5B69, + 10928: 0x6D77, + 10929: 0x6C26, + 10930: 0x4EA5, + 10931: 0x5BB3, + 10932: 0x9A87, + 10933: 0x9163, + 10934: 0x61A8, + 10935: 0x90AF, + 10936: 0x97E9, + 10937: 0x542B, + 10938: 0x6DB5, + 10939: 0x5BD2, + 10940: 0x51FD, + 10941: 0x558A, + 10942: 0x7F55, + 10943: 0x7FF0, + 10944: 0x64BC, + 10945: 0x634D, + 10946: 0x65F1, + 10947: 0x61BE, + 10948: 0x608D, + 10949: 0x710A, + 10950: 0x6C57, + 10951: 0x6C49, + 10952: 0x592F, + 10953: 0x676D, + 10954: 0x822A, + 10955: 0x58D5, + 10956: 0x568E, + 10957: 0x8C6A, + 10958: 0x6BEB, + 10959: 0x90DD, + 10960: 0x597D, + 10961: 0x8017, + 10962: 0x53F7, + 10963: 0x6D69, + 10964: 0x5475, + 10965: 0x559D, + 10966: 0x8377, + 10967: 0x83CF, + 10968: 0x6838, + 10969: 0x79BE, + 10970: 0x548C, + 10971: 0x4F55, + 10972: 0x5408, + 10973: 0x76D2, + 10974: 0x8C89, + 10975: 0x9602, + 10976: 0x6CB3, + 10977: 0x6DB8, + 10978: 0x8D6B, + 10979: 0x8910, + 10980: 0x9E64, + 10981: 0x8D3A, + 10982: 0x563F, + 10983: 0x9ED1, + 10984: 0x75D5, + 10985: 0x5F88, + 10986: 0x72E0, + 10987: 0x6068, + 10988: 0x54FC, + 10989: 0x4EA8, + 10990: 0x6A2A, + 10991: 0x8861, + 10992: 0x6052, + 10993: 0x8F70, + 10994: 0x54C4, + 10995: 0x70D8, + 10996: 0x8679, + 10997: 0x9E3F, + 10998: 0x6D2A, + 10999: 0x5B8F, + 11000: 0x5F18, + 11001: 0x7EA2, + 11002: 0x5589, + 11003: 0x4FAF, + 11004: 0x7334, + 11005: 0x543C, + 11006: 0x539A, + 11007: 0x5019, + 11008: 0x540E, + 11009: 0x547C, + 11010: 0x4E4E, + 11011: 0x5FFD, + 11012: 0x745A, + 11013: 0x58F6, + 11014: 0x846B, + 11015: 0x80E1, + 11016: 0x8774, + 11017: 0x72D0, + 11018: 0x7CCA, + 11019: 0x6E56, + 11020: 0x7C43, + 11021: 0x7C44, + 11022: 0x7C45, + 11023: 0x7C46, + 11024: 0x7C47, + 11025: 0x7C48, + 11026: 0x7C49, + 11027: 0x7C4A, + 11028: 0x7C4B, + 11029: 0x7C4C, + 11030: 0x7C4E, + 11031: 0x7C4F, + 11032: 0x7C50, + 11033: 0x7C51, + 11034: 0x7C52, + 11035: 0x7C53, + 11036: 0x7C54, + 11037: 0x7C55, + 11038: 0x7C56, + 11039: 0x7C57, + 11040: 0x7C58, + 11041: 0x7C59, + 11042: 0x7C5A, + 11043: 0x7C5B, + 11044: 0x7C5C, + 11045: 0x7C5D, + 11046: 0x7C5E, + 11047: 0x7C5F, + 11048: 0x7C60, + 11049: 0x7C61, + 11050: 0x7C62, + 11051: 0x7C63, + 11052: 0x7C64, + 11053: 0x7C65, + 11054: 0x7C66, + 11055: 0x7C67, + 11056: 0x7C68, + 11057: 0x7C69, + 11058: 0x7C6A, + 11059: 0x7C6B, + 11060: 0x7C6C, + 11061: 0x7C6D, + 11062: 0x7C6E, + 11063: 0x7C6F, + 11064: 0x7C70, + 11065: 0x7C71, + 11066: 0x7C72, + 11067: 0x7C75, + 11068: 0x7C76, + 11069: 0x7C77, + 11070: 0x7C78, + 11071: 0x7C79, + 11072: 0x7C7A, + 11073: 0x7C7E, + 11074: 0x7C7F, + 11075: 0x7C80, + 11076: 0x7C81, + 11077: 0x7C82, + 11078: 0x7C83, + 11079: 0x7C84, + 11080: 0x7C85, + 11081: 0x7C86, + 11082: 0x7C87, + 11083: 0x7C88, + 11084: 0x7C8A, + 11085: 0x7C8B, + 11086: 0x7C8C, + 11087: 0x7C8D, + 11088: 0x7C8E, + 11089: 0x7C8F, + 11090: 0x7C90, + 11091: 0x7C93, + 11092: 0x7C94, + 11093: 0x7C96, + 11094: 0x7C99, + 11095: 0x7C9A, + 11096: 0x7C9B, + 11097: 0x7CA0, + 11098: 0x7CA1, + 11099: 0x7CA3, + 11100: 0x7CA6, + 11101: 0x7CA7, + 11102: 0x7CA8, + 11103: 0x7CA9, + 11104: 0x7CAB, + 11105: 0x7CAC, + 11106: 0x7CAD, + 11107: 0x7CAF, + 11108: 0x7CB0, + 11109: 0x7CB4, + 11110: 0x7CB5, + 11111: 0x7CB6, + 11112: 0x7CB7, + 11113: 0x7CB8, + 11114: 0x7CBA, + 11115: 0x7CBB, + 11116: 0x5F27, + 11117: 0x864E, + 11118: 0x552C, + 11119: 0x62A4, + 11120: 0x4E92, + 11121: 0x6CAA, + 11122: 0x6237, + 11123: 0x82B1, + 11124: 0x54D7, + 11125: 0x534E, + 11126: 0x733E, + 11127: 0x6ED1, + 11128: 0x753B, + 11129: 0x5212, + 11130: 0x5316, + 11131: 0x8BDD, + 11132: 0x69D0, + 11133: 0x5F8A, + 11134: 0x6000, + 11135: 0x6DEE, + 11136: 0x574F, + 11137: 0x6B22, + 11138: 0x73AF, + 11139: 0x6853, + 11140: 0x8FD8, + 11141: 0x7F13, + 11142: 0x6362, + 11143: 0x60A3, + 11144: 0x5524, + 11145: 0x75EA, + 11146: 0x8C62, + 11147: 0x7115, + 11148: 0x6DA3, + 11149: 0x5BA6, + 11150: 0x5E7B, + 11151: 0x8352, + 11152: 0x614C, + 11153: 0x9EC4, + 11154: 0x78FA, + 11155: 0x8757, + 11156: 0x7C27, + 11157: 0x7687, + 11158: 0x51F0, + 11159: 0x60F6, + 11160: 0x714C, + 11161: 0x6643, + 11162: 0x5E4C, + 11163: 0x604D, + 11164: 0x8C0E, + 11165: 0x7070, + 11166: 0x6325, + 11167: 0x8F89, + 11168: 0x5FBD, + 11169: 0x6062, + 11170: 0x86D4, + 11171: 0x56DE, + 11172: 0x6BC1, + 11173: 0x6094, + 11174: 0x6167, + 11175: 0x5349, + 11176: 0x60E0, + 11177: 0x6666, + 11178: 0x8D3F, + 11179: 0x79FD, + 11180: 0x4F1A, + 11181: 0x70E9, + 11182: 0x6C47, + 11183: 0x8BB3, + 11184: 0x8BF2, + 11185: 0x7ED8, + 11186: 0x8364, + 11187: 0x660F, + 11188: 0x5A5A, + 11189: 0x9B42, + 11190: 0x6D51, + 11191: 0x6DF7, + 11192: 0x8C41, + 11193: 0x6D3B, + 11194: 0x4F19, + 11195: 0x706B, + 11196: 0x83B7, + 11197: 0x6216, + 11198: 0x60D1, + 11199: 0x970D, + 11200: 0x8D27, + 11201: 0x7978, + 11202: 0x51FB, + 11203: 0x573E, + 11204: 0x57FA, + 11205: 0x673A, + 11206: 0x7578, + 11207: 0x7A3D, + 11208: 0x79EF, + 11209: 0x7B95, + 11210: 0x7CBF, + 11211: 0x7CC0, + 11212: 0x7CC2, + 11213: 0x7CC3, + 11214: 0x7CC4, + 11215: 0x7CC6, + 11216: 0x7CC9, + 11217: 0x7CCB, + 11218: 0x7CCE, + 11219: 0x7CCF, + 11220: 0x7CD0, + 11221: 0x7CD1, + 11222: 0x7CD2, + 11223: 0x7CD3, + 11224: 0x7CD4, + 11225: 0x7CD8, + 11226: 0x7CDA, + 11227: 0x7CDB, + 11228: 0x7CDD, + 11229: 0x7CDE, + 11230: 0x7CE1, + 11231: 0x7CE2, + 11232: 0x7CE3, + 11233: 0x7CE4, + 11234: 0x7CE5, + 11235: 0x7CE6, + 11236: 0x7CE7, + 11237: 0x7CE9, + 11238: 0x7CEA, + 11239: 0x7CEB, + 11240: 0x7CEC, + 11241: 0x7CED, + 11242: 0x7CEE, + 11243: 0x7CF0, + 11244: 0x7CF1, + 11245: 0x7CF2, + 11246: 0x7CF3, + 11247: 0x7CF4, + 11248: 0x7CF5, + 11249: 0x7CF6, + 11250: 0x7CF7, + 11251: 0x7CF9, + 11252: 0x7CFA, + 11253: 0x7CFC, + 11254: 0x7CFD, + 11255: 0x7CFE, + 11256: 0x7CFF, + 11257: 0x7D00, + 11258: 0x7D01, + 11259: 0x7D02, + 11260: 0x7D03, + 11261: 0x7D04, + 11262: 0x7D05, + 11263: 0x7D06, + 11264: 0x7D07, + 11265: 0x7D08, + 11266: 0x7D09, + 11267: 0x7D0B, + 11268: 0x7D0C, + 11269: 0x7D0D, + 11270: 0x7D0E, + 11271: 0x7D0F, + 11272: 0x7D10, + 11273: 0x7D11, + 11274: 0x7D12, + 11275: 0x7D13, + 11276: 0x7D14, + 11277: 0x7D15, + 11278: 0x7D16, + 11279: 0x7D17, + 11280: 0x7D18, + 11281: 0x7D19, + 11282: 0x7D1A, + 11283: 0x7D1B, + 11284: 0x7D1C, + 11285: 0x7D1D, + 11286: 0x7D1E, + 11287: 0x7D1F, + 11288: 0x7D21, + 11289: 0x7D23, + 11290: 0x7D24, + 11291: 0x7D25, + 11292: 0x7D26, + 11293: 0x7D28, + 11294: 0x7D29, + 11295: 0x7D2A, + 11296: 0x7D2C, + 11297: 0x7D2D, + 11298: 0x7D2E, + 11299: 0x7D30, + 11300: 0x7D31, + 11301: 0x7D32, + 11302: 0x7D33, + 11303: 0x7D34, + 11304: 0x7D35, + 11305: 0x7D36, + 11306: 0x808C, + 11307: 0x9965, + 11308: 0x8FF9, + 11309: 0x6FC0, + 11310: 0x8BA5, + 11311: 0x9E21, + 11312: 0x59EC, + 11313: 0x7EE9, + 11314: 0x7F09, + 11315: 0x5409, + 11316: 0x6781, + 11317: 0x68D8, + 11318: 0x8F91, + 11319: 0x7C4D, + 11320: 0x96C6, + 11321: 0x53CA, + 11322: 0x6025, + 11323: 0x75BE, + 11324: 0x6C72, + 11325: 0x5373, + 11326: 0x5AC9, + 11327: 0x7EA7, + 11328: 0x6324, + 11329: 0x51E0, + 11330: 0x810A, + 11331: 0x5DF1, + 11332: 0x84DF, + 11333: 0x6280, + 11334: 0x5180, + 11335: 0x5B63, + 11336: 0x4F0E, + 11337: 0x796D, + 11338: 0x5242, + 11339: 0x60B8, + 11340: 0x6D4E, + 11341: 0x5BC4, + 11342: 0x5BC2, + 11343: 0x8BA1, + 11344: 0x8BB0, + 11345: 0x65E2, + 11346: 0x5FCC, + 11347: 0x9645, + 11348: 0x5993, + 11349: 0x7EE7, + 11350: 0x7EAA, + 11351: 0x5609, + 11352: 0x67B7, + 11353: 0x5939, + 11354: 0x4F73, + 11355: 0x5BB6, + 11356: 0x52A0, + 11357: 0x835A, + 11358: 0x988A, + 11359: 0x8D3E, + 11360: 0x7532, + 11361: 0x94BE, + 11362: 0x5047, + 11363: 0x7A3C, + 11364: 0x4EF7, + 11365: 0x67B6, + 11366: 0x9A7E, + 11367: 0x5AC1, + 11368: 0x6B7C, + 11369: 0x76D1, + 11370: 0x575A, + 11371: 0x5C16, + 11372: 0x7B3A, + 11373: 0x95F4, + 11374: 0x714E, + 11375: 0x517C, + 11376: 0x80A9, + 11377: 0x8270, + 11378: 0x5978, + 11379: 0x7F04, + 11380: 0x8327, + 11381: 0x68C0, + 11382: 0x67EC, + 11383: 0x78B1, + 11384: 0x7877, + 11385: 0x62E3, + 11386: 0x6361, + 11387: 0x7B80, + 11388: 0x4FED, + 11389: 0x526A, + 11390: 0x51CF, + 11391: 0x8350, + 11392: 0x69DB, + 11393: 0x9274, + 11394: 0x8DF5, + 11395: 0x8D31, + 11396: 0x89C1, + 11397: 0x952E, + 11398: 0x7BAD, + 11399: 0x4EF6, + 11400: 0x7D37, + 11401: 0x7D38, + 11402: 0x7D39, + 11403: 0x7D3A, + 11404: 0x7D3B, + 11405: 0x7D3C, + 11406: 0x7D3D, + 11407: 0x7D3E, + 11408: 0x7D3F, + 11409: 0x7D40, + 11410: 0x7D41, + 11411: 0x7D42, + 11412: 0x7D43, + 11413: 0x7D44, + 11414: 0x7D45, + 11415: 0x7D46, + 11416: 0x7D47, + 11417: 0x7D48, + 11418: 0x7D49, + 11419: 0x7D4A, + 11420: 0x7D4B, + 11421: 0x7D4C, + 11422: 0x7D4D, + 11423: 0x7D4E, + 11424: 0x7D4F, + 11425: 0x7D50, + 11426: 0x7D51, + 11427: 0x7D52, + 11428: 0x7D53, + 11429: 0x7D54, + 11430: 0x7D55, + 11431: 0x7D56, + 11432: 0x7D57, + 11433: 0x7D58, + 11434: 0x7D59, + 11435: 0x7D5A, + 11436: 0x7D5B, + 11437: 0x7D5C, + 11438: 0x7D5D, + 11439: 0x7D5E, + 11440: 0x7D5F, + 11441: 0x7D60, + 11442: 0x7D61, + 11443: 0x7D62, + 11444: 0x7D63, + 11445: 0x7D64, + 11446: 0x7D65, + 11447: 0x7D66, + 11448: 0x7D67, + 11449: 0x7D68, + 11450: 0x7D69, + 11451: 0x7D6A, + 11452: 0x7D6B, + 11453: 0x7D6C, + 11454: 0x7D6D, + 11455: 0x7D6F, + 11456: 0x7D70, + 11457: 0x7D71, + 11458: 0x7D72, + 11459: 0x7D73, + 11460: 0x7D74, + 11461: 0x7D75, + 11462: 0x7D76, + 11463: 0x7D78, + 11464: 0x7D79, + 11465: 0x7D7A, + 11466: 0x7D7B, + 11467: 0x7D7C, + 11468: 0x7D7D, + 11469: 0x7D7E, + 11470: 0x7D7F, + 11471: 0x7D80, + 11472: 0x7D81, + 11473: 0x7D82, + 11474: 0x7D83, + 11475: 0x7D84, + 11476: 0x7D85, + 11477: 0x7D86, + 11478: 0x7D87, + 11479: 0x7D88, + 11480: 0x7D89, + 11481: 0x7D8A, + 11482: 0x7D8B, + 11483: 0x7D8C, + 11484: 0x7D8D, + 11485: 0x7D8E, + 11486: 0x7D8F, + 11487: 0x7D90, + 11488: 0x7D91, + 11489: 0x7D92, + 11490: 0x7D93, + 11491: 0x7D94, + 11492: 0x7D95, + 11493: 0x7D96, + 11494: 0x7D97, + 11495: 0x7D98, + 11496: 0x5065, + 11497: 0x8230, + 11498: 0x5251, + 11499: 0x996F, + 11500: 0x6E10, + 11501: 0x6E85, + 11502: 0x6DA7, + 11503: 0x5EFA, + 11504: 0x50F5, + 11505: 0x59DC, + 11506: 0x5C06, + 11507: 0x6D46, + 11508: 0x6C5F, + 11509: 0x7586, + 11510: 0x848B, + 11511: 0x6868, + 11512: 0x5956, + 11513: 0x8BB2, + 11514: 0x5320, + 11515: 0x9171, + 11516: 0x964D, + 11517: 0x8549, + 11518: 0x6912, + 11519: 0x7901, + 11520: 0x7126, + 11521: 0x80F6, + 11522: 0x4EA4, + 11523: 0x90CA, + 11524: 0x6D47, + 11525: 0x9A84, + 11526: 0x5A07, + 11527: 0x56BC, + 11528: 0x6405, + 11529: 0x94F0, + 11530: 0x77EB, + 11531: 0x4FA5, + 11532: 0x811A, + 11533: 0x72E1, + 11534: 0x89D2, + 11535: 0x997A, + 11536: 0x7F34, + 11537: 0x7EDE, + 11538: 0x527F, + 11539: 0x6559, + 11540: 0x9175, + 11541: 0x8F7F, + 11542: 0x8F83, + 11543: 0x53EB, + 11544: 0x7A96, + 11545: 0x63ED, + 11546: 0x63A5, + 11547: 0x7686, + 11548: 0x79F8, + 11549: 0x8857, + 11550: 0x9636, + 11551: 0x622A, + 11552: 0x52AB, + 11553: 0x8282, + 11554: 0x6854, + 11555: 0x6770, + 11556: 0x6377, + 11557: 0x776B, + 11558: 0x7AED, + 11559: 0x6D01, + 11560: 0x7ED3, + 11561: 0x89E3, + 11562: 0x59D0, + 11563: 0x6212, + 11564: 0x85C9, + 11565: 0x82A5, + 11566: 0x754C, + 11567: 0x501F, + 11568: 0x4ECB, + 11569: 0x75A5, + 11570: 0x8BEB, + 11571: 0x5C4A, + 11572: 0x5DFE, + 11573: 0x7B4B, + 11574: 0x65A4, + 11575: 0x91D1, + 11576: 0x4ECA, + 11577: 0x6D25, + 11578: 0x895F, + 11579: 0x7D27, + 11580: 0x9526, + 11581: 0x4EC5, + 11582: 0x8C28, + 11583: 0x8FDB, + 11584: 0x9773, + 11585: 0x664B, + 11586: 0x7981, + 11587: 0x8FD1, + 11588: 0x70EC, + 11589: 0x6D78, + 11590: 0x7D99, + 11591: 0x7D9A, + 11592: 0x7D9B, + 11593: 0x7D9C, + 11594: 0x7D9D, + 11595: 0x7D9E, + 11596: 0x7D9F, + 11597: 0x7DA0, + 11598: 0x7DA1, + 11599: 0x7DA2, + 11600: 0x7DA3, + 11601: 0x7DA4, + 11602: 0x7DA5, + 11603: 0x7DA7, + 11604: 0x7DA8, + 11605: 0x7DA9, + 11606: 0x7DAA, + 11607: 0x7DAB, + 11608: 0x7DAC, + 11609: 0x7DAD, + 11610: 0x7DAF, + 11611: 0x7DB0, + 11612: 0x7DB1, + 11613: 0x7DB2, + 11614: 0x7DB3, + 11615: 0x7DB4, + 11616: 0x7DB5, + 11617: 0x7DB6, + 11618: 0x7DB7, + 11619: 0x7DB8, + 11620: 0x7DB9, + 11621: 0x7DBA, + 11622: 0x7DBB, + 11623: 0x7DBC, + 11624: 0x7DBD, + 11625: 0x7DBE, + 11626: 0x7DBF, + 11627: 0x7DC0, + 11628: 0x7DC1, + 11629: 0x7DC2, + 11630: 0x7DC3, + 11631: 0x7DC4, + 11632: 0x7DC5, + 11633: 0x7DC6, + 11634: 0x7DC7, + 11635: 0x7DC8, + 11636: 0x7DC9, + 11637: 0x7DCA, + 11638: 0x7DCB, + 11639: 0x7DCC, + 11640: 0x7DCD, + 11641: 0x7DCE, + 11642: 0x7DCF, + 11643: 0x7DD0, + 11644: 0x7DD1, + 11645: 0x7DD2, + 11646: 0x7DD3, + 11647: 0x7DD4, + 11648: 0x7DD5, + 11649: 0x7DD6, + 11650: 0x7DD7, + 11651: 0x7DD8, + 11652: 0x7DD9, + 11653: 0x7DDA, + 11654: 0x7DDB, + 11655: 0x7DDC, + 11656: 0x7DDD, + 11657: 0x7DDE, + 11658: 0x7DDF, + 11659: 0x7DE0, + 11660: 0x7DE1, + 11661: 0x7DE2, + 11662: 0x7DE3, + 11663: 0x7DE4, + 11664: 0x7DE5, + 11665: 0x7DE6, + 11666: 0x7DE7, + 11667: 0x7DE8, + 11668: 0x7DE9, + 11669: 0x7DEA, + 11670: 0x7DEB, + 11671: 0x7DEC, + 11672: 0x7DED, + 11673: 0x7DEE, + 11674: 0x7DEF, + 11675: 0x7DF0, + 11676: 0x7DF1, + 11677: 0x7DF2, + 11678: 0x7DF3, + 11679: 0x7DF4, + 11680: 0x7DF5, + 11681: 0x7DF6, + 11682: 0x7DF7, + 11683: 0x7DF8, + 11684: 0x7DF9, + 11685: 0x7DFA, + 11686: 0x5C3D, + 11687: 0x52B2, + 11688: 0x8346, + 11689: 0x5162, + 11690: 0x830E, + 11691: 0x775B, + 11692: 0x6676, + 11693: 0x9CB8, + 11694: 0x4EAC, + 11695: 0x60CA, + 11696: 0x7CBE, + 11697: 0x7CB3, + 11698: 0x7ECF, + 11699: 0x4E95, + 11700: 0x8B66, + 11701: 0x666F, + 11702: 0x9888, + 11703: 0x9759, + 11704: 0x5883, + 11705: 0x656C, + 11706: 0x955C, + 11707: 0x5F84, + 11708: 0x75C9, + 11709: 0x9756, + 11710: 0x7ADF, + 11711: 0x7ADE, + 11712: 0x51C0, + 11713: 0x70AF, + 11714: 0x7A98, + 11715: 0x63EA, + 11716: 0x7A76, + 11717: 0x7EA0, + 11718: 0x7396, + 11719: 0x97ED, + 11720: 0x4E45, + 11721: 0x7078, + 11722: 0x4E5D, + 11723: 0x9152, + 11724: 0x53A9, + 11725: 0x6551, + 11726: 0x65E7, + 11727: 0x81FC, + 11728: 0x8205, + 11729: 0x548E, + 11730: 0x5C31, + 11731: 0x759A, + 11732: 0x97A0, + 11733: 0x62D8, + 11734: 0x72D9, + 11735: 0x75BD, + 11736: 0x5C45, + 11737: 0x9A79, + 11738: 0x83CA, + 11739: 0x5C40, + 11740: 0x5480, + 11741: 0x77E9, + 11742: 0x4E3E, + 11743: 0x6CAE, + 11744: 0x805A, + 11745: 0x62D2, + 11746: 0x636E, + 11747: 0x5DE8, + 11748: 0x5177, + 11749: 0x8DDD, + 11750: 0x8E1E, + 11751: 0x952F, + 11752: 0x4FF1, + 11753: 0x53E5, + 11754: 0x60E7, + 11755: 0x70AC, + 11756: 0x5267, + 11757: 0x6350, + 11758: 0x9E43, + 11759: 0x5A1F, + 11760: 0x5026, + 11761: 0x7737, + 11762: 0x5377, + 11763: 0x7EE2, + 11764: 0x6485, + 11765: 0x652B, + 11766: 0x6289, + 11767: 0x6398, + 11768: 0x5014, + 11769: 0x7235, + 11770: 0x89C9, + 11771: 0x51B3, + 11772: 0x8BC0, + 11773: 0x7EDD, + 11774: 0x5747, + 11775: 0x83CC, + 11776: 0x94A7, + 11777: 0x519B, + 11778: 0x541B, + 11779: 0x5CFB, + 11780: 0x7DFB, + 11781: 0x7DFC, + 11782: 0x7DFD, + 11783: 0x7DFE, + 11784: 0x7DFF, + 11785: 0x7E00, + 11786: 0x7E01, + 11787: 0x7E02, + 11788: 0x7E03, + 11789: 0x7E04, + 11790: 0x7E05, + 11791: 0x7E06, + 11792: 0x7E07, + 11793: 0x7E08, + 11794: 0x7E09, + 11795: 0x7E0A, + 11796: 0x7E0B, + 11797: 0x7E0C, + 11798: 0x7E0D, + 11799: 0x7E0E, + 11800: 0x7E0F, + 11801: 0x7E10, + 11802: 0x7E11, + 11803: 0x7E12, + 11804: 0x7E13, + 11805: 0x7E14, + 11806: 0x7E15, + 11807: 0x7E16, + 11808: 0x7E17, + 11809: 0x7E18, + 11810: 0x7E19, + 11811: 0x7E1A, + 11812: 0x7E1B, + 11813: 0x7E1C, + 11814: 0x7E1D, + 11815: 0x7E1E, + 11816: 0x7E1F, + 11817: 0x7E20, + 11818: 0x7E21, + 11819: 0x7E22, + 11820: 0x7E23, + 11821: 0x7E24, + 11822: 0x7E25, + 11823: 0x7E26, + 11824: 0x7E27, + 11825: 0x7E28, + 11826: 0x7E29, + 11827: 0x7E2A, + 11828: 0x7E2B, + 11829: 0x7E2C, + 11830: 0x7E2D, + 11831: 0x7E2E, + 11832: 0x7E2F, + 11833: 0x7E30, + 11834: 0x7E31, + 11835: 0x7E32, + 11836: 0x7E33, + 11837: 0x7E34, + 11838: 0x7E35, + 11839: 0x7E36, + 11840: 0x7E37, + 11841: 0x7E38, + 11842: 0x7E39, + 11843: 0x7E3A, + 11844: 0x7E3C, + 11845: 0x7E3D, + 11846: 0x7E3E, + 11847: 0x7E3F, + 11848: 0x7E40, + 11849: 0x7E42, + 11850: 0x7E43, + 11851: 0x7E44, + 11852: 0x7E45, + 11853: 0x7E46, + 11854: 0x7E48, + 11855: 0x7E49, + 11856: 0x7E4A, + 11857: 0x7E4B, + 11858: 0x7E4C, + 11859: 0x7E4D, + 11860: 0x7E4E, + 11861: 0x7E4F, + 11862: 0x7E50, + 11863: 0x7E51, + 11864: 0x7E52, + 11865: 0x7E53, + 11866: 0x7E54, + 11867: 0x7E55, + 11868: 0x7E56, + 11869: 0x7E57, + 11870: 0x7E58, + 11871: 0x7E59, + 11872: 0x7E5A, + 11873: 0x7E5B, + 11874: 0x7E5C, + 11875: 0x7E5D, + 11876: 0x4FCA, + 11877: 0x7AE3, + 11878: 0x6D5A, + 11879: 0x90E1, + 11880: 0x9A8F, + 11881: 0x5580, + 11882: 0x5496, + 11883: 0x5361, + 11884: 0x54AF, + 11885: 0x5F00, + 11886: 0x63E9, + 11887: 0x6977, + 11888: 0x51EF, + 11889: 0x6168, + 11890: 0x520A, + 11891: 0x582A, + 11892: 0x52D8, + 11893: 0x574E, + 11894: 0x780D, + 11895: 0x770B, + 11896: 0x5EB7, + 11897: 0x6177, + 11898: 0x7CE0, + 11899: 0x625B, + 11900: 0x6297, + 11901: 0x4EA2, + 11902: 0x7095, + 11903: 0x8003, + 11904: 0x62F7, + 11905: 0x70E4, + 11906: 0x9760, + 11907: 0x5777, + 11908: 0x82DB, + 11909: 0x67EF, + 11910: 0x68F5, + 11911: 0x78D5, + 11912: 0x9897, + 11913: 0x79D1, + 11914: 0x58F3, + 11915: 0x54B3, + 11916: 0x53EF, + 11917: 0x6E34, + 11918: 0x514B, + 11919: 0x523B, + 11920: 0x5BA2, + 11921: 0x8BFE, + 11922: 0x80AF, + 11923: 0x5543, + 11924: 0x57A6, + 11925: 0x6073, + 11926: 0x5751, + 11927: 0x542D, + 11928: 0x7A7A, + 11929: 0x6050, + 11930: 0x5B54, + 11931: 0x63A7, + 11932: 0x62A0, + 11933: 0x53E3, + 11934: 0x6263, + 11935: 0x5BC7, + 11936: 0x67AF, + 11937: 0x54ED, + 11938: 0x7A9F, + 11939: 0x82E6, + 11940: 0x9177, + 11941: 0x5E93, + 11942: 0x88E4, + 11943: 0x5938, + 11944: 0x57AE, + 11945: 0x630E, + 11946: 0x8DE8, + 11947: 0x80EF, + 11948: 0x5757, + 11949: 0x7B77, + 11950: 0x4FA9, + 11951: 0x5FEB, + 11952: 0x5BBD, + 11953: 0x6B3E, + 11954: 0x5321, + 11955: 0x7B50, + 11956: 0x72C2, + 11957: 0x6846, + 11958: 0x77FF, + 11959: 0x7736, + 11960: 0x65F7, + 11961: 0x51B5, + 11962: 0x4E8F, + 11963: 0x76D4, + 11964: 0x5CBF, + 11965: 0x7AA5, + 11966: 0x8475, + 11967: 0x594E, + 11968: 0x9B41, + 11969: 0x5080, + 11970: 0x7E5E, + 11971: 0x7E5F, + 11972: 0x7E60, + 11973: 0x7E61, + 11974: 0x7E62, + 11975: 0x7E63, + 11976: 0x7E64, + 11977: 0x7E65, + 11978: 0x7E66, + 11979: 0x7E67, + 11980: 0x7E68, + 11981: 0x7E69, + 11982: 0x7E6A, + 11983: 0x7E6B, + 11984: 0x7E6C, + 11985: 0x7E6D, + 11986: 0x7E6E, + 11987: 0x7E6F, + 11988: 0x7E70, + 11989: 0x7E71, + 11990: 0x7E72, + 11991: 0x7E73, + 11992: 0x7E74, + 11993: 0x7E75, + 11994: 0x7E76, + 11995: 0x7E77, + 11996: 0x7E78, + 11997: 0x7E79, + 11998: 0x7E7A, + 11999: 0x7E7B, + 12000: 0x7E7C, + 12001: 0x7E7D, + 12002: 0x7E7E, + 12003: 0x7E7F, + 12004: 0x7E80, + 12005: 0x7E81, + 12006: 0x7E83, + 12007: 0x7E84, + 12008: 0x7E85, + 12009: 0x7E86, + 12010: 0x7E87, + 12011: 0x7E88, + 12012: 0x7E89, + 12013: 0x7E8A, + 12014: 0x7E8B, + 12015: 0x7E8C, + 12016: 0x7E8D, + 12017: 0x7E8E, + 12018: 0x7E8F, + 12019: 0x7E90, + 12020: 0x7E91, + 12021: 0x7E92, + 12022: 0x7E93, + 12023: 0x7E94, + 12024: 0x7E95, + 12025: 0x7E96, + 12026: 0x7E97, + 12027: 0x7E98, + 12028: 0x7E99, + 12029: 0x7E9A, + 12030: 0x7E9C, + 12031: 0x7E9D, + 12032: 0x7E9E, + 12033: 0x7EAE, + 12034: 0x7EB4, + 12035: 0x7EBB, + 12036: 0x7EBC, + 12037: 0x7ED6, + 12038: 0x7EE4, + 12039: 0x7EEC, + 12040: 0x7EF9, + 12041: 0x7F0A, + 12042: 0x7F10, + 12043: 0x7F1E, + 12044: 0x7F37, + 12045: 0x7F39, + 12046: 0x7F3B, + 12047: 0x7F3C, + 12048: 0x7F3D, + 12049: 0x7F3E, + 12050: 0x7F3F, + 12051: 0x7F40, + 12052: 0x7F41, + 12053: 0x7F43, + 12054: 0x7F46, + 12055: 0x7F47, + 12056: 0x7F48, + 12057: 0x7F49, + 12058: 0x7F4A, + 12059: 0x7F4B, + 12060: 0x7F4C, + 12061: 0x7F4D, + 12062: 0x7F4E, + 12063: 0x7F4F, + 12064: 0x7F52, + 12065: 0x7F53, + 12066: 0x9988, + 12067: 0x6127, + 12068: 0x6E83, + 12069: 0x5764, + 12070: 0x6606, + 12071: 0x6346, + 12072: 0x56F0, + 12073: 0x62EC, + 12074: 0x6269, + 12075: 0x5ED3, + 12076: 0x9614, + 12077: 0x5783, + 12078: 0x62C9, + 12079: 0x5587, + 12080: 0x8721, + 12081: 0x814A, + 12082: 0x8FA3, + 12083: 0x5566, + 12084: 0x83B1, + 12085: 0x6765, + 12086: 0x8D56, + 12087: 0x84DD, + 12088: 0x5A6A, + 12089: 0x680F, + 12090: 0x62E6, + 12091: 0x7BEE, + 12092: 0x9611, + 12093: 0x5170, + 12094: 0x6F9C, + 12095: 0x8C30, + 12096: 0x63FD, + 12097: 0x89C8, + 12098: 0x61D2, + 12099: 0x7F06, + 12100: 0x70C2, + 12101: 0x6EE5, + 12102: 0x7405, + 12103: 0x6994, + 12104: 0x72FC, + 12105: 0x5ECA, + 12106: 0x90CE, + 12107: 0x6717, + 12108: 0x6D6A, + 12109: 0x635E, + 12110: 0x52B3, + 12111: 0x7262, + 12112: 0x8001, + 12113: 0x4F6C, + 12114: 0x59E5, + 12115: 0x916A, + 12116: 0x70D9, + 12117: 0x6D9D, + 12118: 0x52D2, + 12119: 0x4E50, + 12120: 0x96F7, + 12121: 0x956D, + 12122: 0x857E, + 12123: 0x78CA, + 12124: 0x7D2F, + 12125: 0x5121, + 12126: 0x5792, + 12127: 0x64C2, + 12128: 0x808B, + 12129: 0x7C7B, + 12130: 0x6CEA, + 12131: 0x68F1, + 12132: 0x695E, + 12133: 0x51B7, + 12134: 0x5398, + 12135: 0x68A8, + 12136: 0x7281, + 12137: 0x9ECE, + 12138: 0x7BF1, + 12139: 0x72F8, + 12140: 0x79BB, + 12141: 0x6F13, + 12142: 0x7406, + 12143: 0x674E, + 12144: 0x91CC, + 12145: 0x9CA4, + 12146: 0x793C, + 12147: 0x8389, + 12148: 0x8354, + 12149: 0x540F, + 12150: 0x6817, + 12151: 0x4E3D, + 12152: 0x5389, + 12153: 0x52B1, + 12154: 0x783E, + 12155: 0x5386, + 12156: 0x5229, + 12157: 0x5088, + 12158: 0x4F8B, + 12159: 0x4FD0, + 12160: 0x7F56, + 12161: 0x7F59, + 12162: 0x7F5B, + 12163: 0x7F5C, + 12164: 0x7F5D, + 12165: 0x7F5E, + 12166: 0x7F60, + 12167: 0x7F63, + 12168: 0x7F64, + 12169: 0x7F65, + 12170: 0x7F66, + 12171: 0x7F67, + 12172: 0x7F6B, + 12173: 0x7F6C, + 12174: 0x7F6D, + 12175: 0x7F6F, + 12176: 0x7F70, + 12177: 0x7F73, + 12178: 0x7F75, + 12179: 0x7F76, + 12180: 0x7F77, + 12181: 0x7F78, + 12182: 0x7F7A, + 12183: 0x7F7B, + 12184: 0x7F7C, + 12185: 0x7F7D, + 12186: 0x7F7F, + 12187: 0x7F80, + 12188: 0x7F82, + 12189: 0x7F83, + 12190: 0x7F84, + 12191: 0x7F85, + 12192: 0x7F86, + 12193: 0x7F87, + 12194: 0x7F88, + 12195: 0x7F89, + 12196: 0x7F8B, + 12197: 0x7F8D, + 12198: 0x7F8F, + 12199: 0x7F90, + 12200: 0x7F91, + 12201: 0x7F92, + 12202: 0x7F93, + 12203: 0x7F95, + 12204: 0x7F96, + 12205: 0x7F97, + 12206: 0x7F98, + 12207: 0x7F99, + 12208: 0x7F9B, + 12209: 0x7F9C, + 12210: 0x7FA0, + 12211: 0x7FA2, + 12212: 0x7FA3, + 12213: 0x7FA5, + 12214: 0x7FA6, + 12215: 0x7FA8, + 12216: 0x7FA9, + 12217: 0x7FAA, + 12218: 0x7FAB, + 12219: 0x7FAC, + 12220: 0x7FAD, + 12221: 0x7FAE, + 12222: 0x7FB1, + 12223: 0x7FB3, + 12224: 0x7FB4, + 12225: 0x7FB5, + 12226: 0x7FB6, + 12227: 0x7FB7, + 12228: 0x7FBA, + 12229: 0x7FBB, + 12230: 0x7FBE, + 12231: 0x7FC0, + 12232: 0x7FC2, + 12233: 0x7FC3, + 12234: 0x7FC4, + 12235: 0x7FC6, + 12236: 0x7FC7, + 12237: 0x7FC8, + 12238: 0x7FC9, + 12239: 0x7FCB, + 12240: 0x7FCD, + 12241: 0x7FCF, + 12242: 0x7FD0, + 12243: 0x7FD1, + 12244: 0x7FD2, + 12245: 0x7FD3, + 12246: 0x7FD6, + 12247: 0x7FD7, + 12248: 0x7FD9, + 12249: 0x7FDA, + 12250: 0x7FDB, + 12251: 0x7FDC, + 12252: 0x7FDD, + 12253: 0x7FDE, + 12254: 0x7FE2, + 12255: 0x7FE3, + 12256: 0x75E2, + 12257: 0x7ACB, + 12258: 0x7C92, + 12259: 0x6CA5, + 12260: 0x96B6, + 12261: 0x529B, + 12262: 0x7483, + 12263: 0x54E9, + 12264: 0x4FE9, + 12265: 0x8054, + 12266: 0x83B2, + 12267: 0x8FDE, + 12268: 0x9570, + 12269: 0x5EC9, + 12270: 0x601C, + 12271: 0x6D9F, + 12272: 0x5E18, + 12273: 0x655B, + 12274: 0x8138, + 12275: 0x94FE, + 12276: 0x604B, + 12277: 0x70BC, + 12278: 0x7EC3, + 12279: 0x7CAE, + 12280: 0x51C9, + 12281: 0x6881, + 12282: 0x7CB1, + 12283: 0x826F, + 12284: 0x4E24, + 12285: 0x8F86, + 12286: 0x91CF, + 12287: 0x667E, + 12288: 0x4EAE, + 12289: 0x8C05, + 12290: 0x64A9, + 12291: 0x804A, + 12292: 0x50DA, + 12293: 0x7597, + 12294: 0x71CE, + 12295: 0x5BE5, + 12296: 0x8FBD, + 12297: 0x6F66, + 12298: 0x4E86, + 12299: 0x6482, + 12300: 0x9563, + 12301: 0x5ED6, + 12302: 0x6599, + 12303: 0x5217, + 12304: 0x88C2, + 12305: 0x70C8, + 12306: 0x52A3, + 12307: 0x730E, + 12308: 0x7433, + 12309: 0x6797, + 12310: 0x78F7, + 12311: 0x9716, + 12312: 0x4E34, + 12313: 0x90BB, + 12314: 0x9CDE, + 12315: 0x6DCB, + 12316: 0x51DB, + 12317: 0x8D41, + 12318: 0x541D, + 12319: 0x62CE, + 12320: 0x73B2, + 12321: 0x83F1, + 12322: 0x96F6, + 12323: 0x9F84, + 12324: 0x94C3, + 12325: 0x4F36, + 12326: 0x7F9A, + 12327: 0x51CC, + 12328: 0x7075, + 12329: 0x9675, + 12330: 0x5CAD, + 12331: 0x9886, + 12332: 0x53E6, + 12333: 0x4EE4, + 12334: 0x6E9C, + 12335: 0x7409, + 12336: 0x69B4, + 12337: 0x786B, + 12338: 0x998F, + 12339: 0x7559, + 12340: 0x5218, + 12341: 0x7624, + 12342: 0x6D41, + 12343: 0x67F3, + 12344: 0x516D, + 12345: 0x9F99, + 12346: 0x804B, + 12347: 0x5499, + 12348: 0x7B3C, + 12349: 0x7ABF, + 12350: 0x7FE4, + 12351: 0x7FE7, + 12352: 0x7FE8, + 12353: 0x7FEA, + 12354: 0x7FEB, + 12355: 0x7FEC, + 12356: 0x7FED, + 12357: 0x7FEF, + 12358: 0x7FF2, + 12359: 0x7FF4, + 12360: 0x7FF5, + 12361: 0x7FF6, + 12362: 0x7FF7, + 12363: 0x7FF8, + 12364: 0x7FF9, + 12365: 0x7FFA, + 12366: 0x7FFD, + 12367: 0x7FFE, + 12368: 0x7FFF, + 12369: 0x8002, + 12370: 0x8007, + 12371: 0x8008, + 12372: 0x8009, + 12373: 0x800A, + 12374: 0x800E, + 12375: 0x800F, + 12376: 0x8011, + 12377: 0x8013, + 12378: 0x801A, + 12379: 0x801B, + 12380: 0x801D, + 12381: 0x801E, + 12382: 0x801F, + 12383: 0x8021, + 12384: 0x8023, + 12385: 0x8024, + 12386: 0x802B, + 12387: 0x802C, + 12388: 0x802D, + 12389: 0x802E, + 12390: 0x802F, + 12391: 0x8030, + 12392: 0x8032, + 12393: 0x8034, + 12394: 0x8039, + 12395: 0x803A, + 12396: 0x803C, + 12397: 0x803E, + 12398: 0x8040, + 12399: 0x8041, + 12400: 0x8044, + 12401: 0x8045, + 12402: 0x8047, + 12403: 0x8048, + 12404: 0x8049, + 12405: 0x804E, + 12406: 0x804F, + 12407: 0x8050, + 12408: 0x8051, + 12409: 0x8053, + 12410: 0x8055, + 12411: 0x8056, + 12412: 0x8057, + 12413: 0x8059, + 12414: 0x805B, + 12415: 0x805C, + 12416: 0x805D, + 12417: 0x805E, + 12418: 0x805F, + 12419: 0x8060, + 12420: 0x8061, + 12421: 0x8062, + 12422: 0x8063, + 12423: 0x8064, + 12424: 0x8065, + 12425: 0x8066, + 12426: 0x8067, + 12427: 0x8068, + 12428: 0x806B, + 12429: 0x806C, + 12430: 0x806D, + 12431: 0x806E, + 12432: 0x806F, + 12433: 0x8070, + 12434: 0x8072, + 12435: 0x8073, + 12436: 0x8074, + 12437: 0x8075, + 12438: 0x8076, + 12439: 0x8077, + 12440: 0x8078, + 12441: 0x8079, + 12442: 0x807A, + 12443: 0x807B, + 12444: 0x807C, + 12445: 0x807D, + 12446: 0x9686, + 12447: 0x5784, + 12448: 0x62E2, + 12449: 0x9647, + 12450: 0x697C, + 12451: 0x5A04, + 12452: 0x6402, + 12453: 0x7BD3, + 12454: 0x6F0F, + 12455: 0x964B, + 12456: 0x82A6, + 12457: 0x5362, + 12458: 0x9885, + 12459: 0x5E90, + 12460: 0x7089, + 12461: 0x63B3, + 12462: 0x5364, + 12463: 0x864F, + 12464: 0x9C81, + 12465: 0x9E93, + 12466: 0x788C, + 12467: 0x9732, + 12468: 0x8DEF, + 12469: 0x8D42, + 12470: 0x9E7F, + 12471: 0x6F5E, + 12472: 0x7984, + 12473: 0x5F55, + 12474: 0x9646, + 12475: 0x622E, + 12476: 0x9A74, + 12477: 0x5415, + 12478: 0x94DD, + 12479: 0x4FA3, + 12480: 0x65C5, + 12481: 0x5C65, + 12482: 0x5C61, + 12483: 0x7F15, + 12484: 0x8651, + 12485: 0x6C2F, + 12486: 0x5F8B, + 12487: 0x7387, + 12488: 0x6EE4, + 12489: 0x7EFF, + 12490: 0x5CE6, + 12491: 0x631B, + 12492: 0x5B6A, + 12493: 0x6EE6, + 12494: 0x5375, + 12495: 0x4E71, + 12496: 0x63A0, + 12497: 0x7565, + 12498: 0x62A1, + 12499: 0x8F6E, + 12500: 0x4F26, + 12501: 0x4ED1, + 12502: 0x6CA6, + 12503: 0x7EB6, + 12504: 0x8BBA, + 12505: 0x841D, + 12506: 0x87BA, + 12507: 0x7F57, + 12508: 0x903B, + 12509: 0x9523, + 12510: 0x7BA9, + 12511: 0x9AA1, + 12512: 0x88F8, + 12513: 0x843D, + 12514: 0x6D1B, + 12515: 0x9A86, + 12516: 0x7EDC, + 12517: 0x5988, + 12518: 0x9EBB, + 12519: 0x739B, + 12520: 0x7801, + 12521: 0x8682, + 12522: 0x9A6C, + 12523: 0x9A82, + 12524: 0x561B, + 12525: 0x5417, + 12526: 0x57CB, + 12527: 0x4E70, + 12528: 0x9EA6, + 12529: 0x5356, + 12530: 0x8FC8, + 12531: 0x8109, + 12532: 0x7792, + 12533: 0x9992, + 12534: 0x86EE, + 12535: 0x6EE1, + 12536: 0x8513, + 12537: 0x66FC, + 12538: 0x6162, + 12539: 0x6F2B, + 12540: 0x807E, + 12541: 0x8081, + 12542: 0x8082, + 12543: 0x8085, + 12544: 0x8088, + 12545: 0x808A, + 12546: 0x808D, + 12547: 0x808E, + 12548: 0x808F, + 12549: 0x8090, + 12550: 0x8091, + 12551: 0x8092, + 12552: 0x8094, + 12553: 0x8095, + 12554: 0x8097, + 12555: 0x8099, + 12556: 0x809E, + 12557: 0x80A3, + 12558: 0x80A6, + 12559: 0x80A7, + 12560: 0x80A8, + 12561: 0x80AC, + 12562: 0x80B0, + 12563: 0x80B3, + 12564: 0x80B5, + 12565: 0x80B6, + 12566: 0x80B8, + 12567: 0x80B9, + 12568: 0x80BB, + 12569: 0x80C5, + 12570: 0x80C7, + 12571: 0x80C8, + 12572: 0x80C9, + 12573: 0x80CA, + 12574: 0x80CB, + 12575: 0x80CF, + 12576: 0x80D0, + 12577: 0x80D1, + 12578: 0x80D2, + 12579: 0x80D3, + 12580: 0x80D4, + 12581: 0x80D5, + 12582: 0x80D8, + 12583: 0x80DF, + 12584: 0x80E0, + 12585: 0x80E2, + 12586: 0x80E3, + 12587: 0x80E6, + 12588: 0x80EE, + 12589: 0x80F5, + 12590: 0x80F7, + 12591: 0x80F9, + 12592: 0x80FB, + 12593: 0x80FE, + 12594: 0x80FF, + 12595: 0x8100, + 12596: 0x8101, + 12597: 0x8103, + 12598: 0x8104, + 12599: 0x8105, + 12600: 0x8107, + 12601: 0x8108, + 12602: 0x810B, + 12603: 0x810C, + 12604: 0x8115, + 12605: 0x8117, + 12606: 0x8119, + 12607: 0x811B, + 12608: 0x811C, + 12609: 0x811D, + 12610: 0x811F, + 12611: 0x8120, + 12612: 0x8121, + 12613: 0x8122, + 12614: 0x8123, + 12615: 0x8124, + 12616: 0x8125, + 12617: 0x8126, + 12618: 0x8127, + 12619: 0x8128, + 12620: 0x8129, + 12621: 0x812A, + 12622: 0x812B, + 12623: 0x812D, + 12624: 0x812E, + 12625: 0x8130, + 12626: 0x8133, + 12627: 0x8134, + 12628: 0x8135, + 12629: 0x8137, + 12630: 0x8139, + 12631: 0x813A, + 12632: 0x813B, + 12633: 0x813C, + 12634: 0x813D, + 12635: 0x813F, + 12636: 0x8C29, + 12637: 0x8292, + 12638: 0x832B, + 12639: 0x76F2, + 12640: 0x6C13, + 12641: 0x5FD9, + 12642: 0x83BD, + 12643: 0x732B, + 12644: 0x8305, + 12645: 0x951A, + 12646: 0x6BDB, + 12647: 0x77DB, + 12648: 0x94C6, + 12649: 0x536F, + 12650: 0x8302, + 12651: 0x5192, + 12652: 0x5E3D, + 12653: 0x8C8C, + 12654: 0x8D38, + 12655: 0x4E48, + 12656: 0x73AB, + 12657: 0x679A, + 12658: 0x6885, + 12659: 0x9176, + 12660: 0x9709, + 12661: 0x7164, + 12662: 0x6CA1, + 12663: 0x7709, + 12664: 0x5A92, + 12665: 0x9541, + 12666: 0x6BCF, + 12667: 0x7F8E, + 12668: 0x6627, + 12669: 0x5BD0, + 12670: 0x59B9, + 12671: 0x5A9A, + 12672: 0x95E8, + 12673: 0x95F7, + 12674: 0x4EEC, + 12675: 0x840C, + 12676: 0x8499, + 12677: 0x6AAC, + 12678: 0x76DF, + 12679: 0x9530, + 12680: 0x731B, + 12681: 0x68A6, + 12682: 0x5B5F, + 12683: 0x772F, + 12684: 0x919A, + 12685: 0x9761, + 12686: 0x7CDC, + 12687: 0x8FF7, + 12688: 0x8C1C, + 12689: 0x5F25, + 12690: 0x7C73, + 12691: 0x79D8, + 12692: 0x89C5, + 12693: 0x6CCC, + 12694: 0x871C, + 12695: 0x5BC6, + 12696: 0x5E42, + 12697: 0x68C9, + 12698: 0x7720, + 12699: 0x7EF5, + 12700: 0x5195, + 12701: 0x514D, + 12702: 0x52C9, + 12703: 0x5A29, + 12704: 0x7F05, + 12705: 0x9762, + 12706: 0x82D7, + 12707: 0x63CF, + 12708: 0x7784, + 12709: 0x85D0, + 12710: 0x79D2, + 12711: 0x6E3A, + 12712: 0x5E99, + 12713: 0x5999, + 12714: 0x8511, + 12715: 0x706D, + 12716: 0x6C11, + 12717: 0x62BF, + 12718: 0x76BF, + 12719: 0x654F, + 12720: 0x60AF, + 12721: 0x95FD, + 12722: 0x660E, + 12723: 0x879F, + 12724: 0x9E23, + 12725: 0x94ED, + 12726: 0x540D, + 12727: 0x547D, + 12728: 0x8C2C, + 12729: 0x6478, + 12730: 0x8140, + 12731: 0x8141, + 12732: 0x8142, + 12733: 0x8143, + 12734: 0x8144, + 12735: 0x8145, + 12736: 0x8147, + 12737: 0x8149, + 12738: 0x814D, + 12739: 0x814E, + 12740: 0x814F, + 12741: 0x8152, + 12742: 0x8156, + 12743: 0x8157, + 12744: 0x8158, + 12745: 0x815B, + 12746: 0x815C, + 12747: 0x815D, + 12748: 0x815E, + 12749: 0x815F, + 12750: 0x8161, + 12751: 0x8162, + 12752: 0x8163, + 12753: 0x8164, + 12754: 0x8166, + 12755: 0x8168, + 12756: 0x816A, + 12757: 0x816B, + 12758: 0x816C, + 12759: 0x816F, + 12760: 0x8172, + 12761: 0x8173, + 12762: 0x8175, + 12763: 0x8176, + 12764: 0x8177, + 12765: 0x8178, + 12766: 0x8181, + 12767: 0x8183, + 12768: 0x8184, + 12769: 0x8185, + 12770: 0x8186, + 12771: 0x8187, + 12772: 0x8189, + 12773: 0x818B, + 12774: 0x818C, + 12775: 0x818D, + 12776: 0x818E, + 12777: 0x8190, + 12778: 0x8192, + 12779: 0x8193, + 12780: 0x8194, + 12781: 0x8195, + 12782: 0x8196, + 12783: 0x8197, + 12784: 0x8199, + 12785: 0x819A, + 12786: 0x819E, + 12787: 0x819F, + 12788: 0x81A0, + 12789: 0x81A1, + 12790: 0x81A2, + 12791: 0x81A4, + 12792: 0x81A5, + 12793: 0x81A7, + 12794: 0x81A9, + 12795: 0x81AB, + 12796: 0x81AC, + 12797: 0x81AD, + 12798: 0x81AE, + 12799: 0x81AF, + 12800: 0x81B0, + 12801: 0x81B1, + 12802: 0x81B2, + 12803: 0x81B4, + 12804: 0x81B5, + 12805: 0x81B6, + 12806: 0x81B7, + 12807: 0x81B8, + 12808: 0x81B9, + 12809: 0x81BC, + 12810: 0x81BD, + 12811: 0x81BE, + 12812: 0x81BF, + 12813: 0x81C4, + 12814: 0x81C5, + 12815: 0x81C7, + 12816: 0x81C8, + 12817: 0x81C9, + 12818: 0x81CB, + 12819: 0x81CD, + 12820: 0x81CE, + 12821: 0x81CF, + 12822: 0x81D0, + 12823: 0x81D1, + 12824: 0x81D2, + 12825: 0x81D3, + 12826: 0x6479, + 12827: 0x8611, + 12828: 0x6A21, + 12829: 0x819C, + 12830: 0x78E8, + 12831: 0x6469, + 12832: 0x9B54, + 12833: 0x62B9, + 12834: 0x672B, + 12835: 0x83AB, + 12836: 0x58A8, + 12837: 0x9ED8, + 12838: 0x6CAB, + 12839: 0x6F20, + 12840: 0x5BDE, + 12841: 0x964C, + 12842: 0x8C0B, + 12843: 0x725F, + 12844: 0x67D0, + 12845: 0x62C7, + 12846: 0x7261, + 12847: 0x4EA9, + 12848: 0x59C6, + 12849: 0x6BCD, + 12850: 0x5893, + 12851: 0x66AE, + 12852: 0x5E55, + 12853: 0x52DF, + 12854: 0x6155, + 12855: 0x6728, + 12856: 0x76EE, + 12857: 0x7766, + 12858: 0x7267, + 12859: 0x7A46, + 12860: 0x62FF, + 12861: 0x54EA, + 12862: 0x5450, + 12863: 0x94A0, + 12864: 0x90A3, + 12865: 0x5A1C, + 12866: 0x7EB3, + 12867: 0x6C16, + 12868: 0x4E43, + 12869: 0x5976, + 12870: 0x8010, + 12871: 0x5948, + 12872: 0x5357, + 12873: 0x7537, + 12874: 0x96BE, + 12875: 0x56CA, + 12876: 0x6320, + 12877: 0x8111, + 12878: 0x607C, + 12879: 0x95F9, + 12880: 0x6DD6, + 12881: 0x5462, + 12882: 0x9981, + 12883: 0x5185, + 12884: 0x5AE9, + 12885: 0x80FD, + 12886: 0x59AE, + 12887: 0x9713, + 12888: 0x502A, + 12889: 0x6CE5, + 12890: 0x5C3C, + 12891: 0x62DF, + 12892: 0x4F60, + 12893: 0x533F, + 12894: 0x817B, + 12895: 0x9006, + 12896: 0x6EBA, + 12897: 0x852B, + 12898: 0x62C8, + 12899: 0x5E74, + 12900: 0x78BE, + 12901: 0x64B5, + 12902: 0x637B, + 12903: 0x5FF5, + 12904: 0x5A18, + 12905: 0x917F, + 12906: 0x9E1F, + 12907: 0x5C3F, + 12908: 0x634F, + 12909: 0x8042, + 12910: 0x5B7D, + 12911: 0x556E, + 12912: 0x954A, + 12913: 0x954D, + 12914: 0x6D85, + 12915: 0x60A8, + 12916: 0x67E0, + 12917: 0x72DE, + 12918: 0x51DD, + 12919: 0x5B81, + 12920: 0x81D4, + 12921: 0x81D5, + 12922: 0x81D6, + 12923: 0x81D7, + 12924: 0x81D8, + 12925: 0x81D9, + 12926: 0x81DA, + 12927: 0x81DB, + 12928: 0x81DC, + 12929: 0x81DD, + 12930: 0x81DE, + 12931: 0x81DF, + 12932: 0x81E0, + 12933: 0x81E1, + 12934: 0x81E2, + 12935: 0x81E4, + 12936: 0x81E5, + 12937: 0x81E6, + 12938: 0x81E8, + 12939: 0x81E9, + 12940: 0x81EB, + 12941: 0x81EE, + 12942: 0x81EF, + 12943: 0x81F0, + 12944: 0x81F1, + 12945: 0x81F2, + 12946: 0x81F5, + 12947: 0x81F6, + 12948: 0x81F7, + 12949: 0x81F8, + 12950: 0x81F9, + 12951: 0x81FA, + 12952: 0x81FD, + 12953: 0x81FF, + 12954: 0x8203, + 12955: 0x8207, + 12956: 0x8208, + 12957: 0x8209, + 12958: 0x820A, + 12959: 0x820B, + 12960: 0x820E, + 12961: 0x820F, + 12962: 0x8211, + 12963: 0x8213, + 12964: 0x8215, + 12965: 0x8216, + 12966: 0x8217, + 12967: 0x8218, + 12968: 0x8219, + 12969: 0x821A, + 12970: 0x821D, + 12971: 0x8220, + 12972: 0x8224, + 12973: 0x8225, + 12974: 0x8226, + 12975: 0x8227, + 12976: 0x8229, + 12977: 0x822E, + 12978: 0x8232, + 12979: 0x823A, + 12980: 0x823C, + 12981: 0x823D, + 12982: 0x823F, + 12983: 0x8240, + 12984: 0x8241, + 12985: 0x8242, + 12986: 0x8243, + 12987: 0x8245, + 12988: 0x8246, + 12989: 0x8248, + 12990: 0x824A, + 12991: 0x824C, + 12992: 0x824D, + 12993: 0x824E, + 12994: 0x8250, + 12995: 0x8251, + 12996: 0x8252, + 12997: 0x8253, + 12998: 0x8254, + 12999: 0x8255, + 13000: 0x8256, + 13001: 0x8257, + 13002: 0x8259, + 13003: 0x825B, + 13004: 0x825C, + 13005: 0x825D, + 13006: 0x825E, + 13007: 0x8260, + 13008: 0x8261, + 13009: 0x8262, + 13010: 0x8263, + 13011: 0x8264, + 13012: 0x8265, + 13013: 0x8266, + 13014: 0x8267, + 13015: 0x8269, + 13016: 0x62E7, + 13017: 0x6CDE, + 13018: 0x725B, + 13019: 0x626D, + 13020: 0x94AE, + 13021: 0x7EBD, + 13022: 0x8113, + 13023: 0x6D53, + 13024: 0x519C, + 13025: 0x5F04, + 13026: 0x5974, + 13027: 0x52AA, + 13028: 0x6012, + 13029: 0x5973, + 13030: 0x6696, + 13031: 0x8650, + 13032: 0x759F, + 13033: 0x632A, + 13034: 0x61E6, + 13035: 0x7CEF, + 13036: 0x8BFA, + 13037: 0x54E6, + 13038: 0x6B27, + 13039: 0x9E25, + 13040: 0x6BB4, + 13041: 0x85D5, + 13042: 0x5455, + 13043: 0x5076, + 13044: 0x6CA4, + 13045: 0x556A, + 13046: 0x8DB4, + 13047: 0x722C, + 13048: 0x5E15, + 13049: 0x6015, + 13050: 0x7436, + 13051: 0x62CD, + 13052: 0x6392, + 13053: 0x724C, + 13054: 0x5F98, + 13055: 0x6E43, + 13056: 0x6D3E, + 13057: 0x6500, + 13058: 0x6F58, + 13059: 0x76D8, + 13060: 0x78D0, + 13061: 0x76FC, + 13062: 0x7554, + 13063: 0x5224, + 13064: 0x53DB, + 13065: 0x4E53, + 13066: 0x5E9E, + 13067: 0x65C1, + 13068: 0x802A, + 13069: 0x80D6, + 13070: 0x629B, + 13071: 0x5486, + 13072: 0x5228, + 13073: 0x70AE, + 13074: 0x888D, + 13075: 0x8DD1, + 13076: 0x6CE1, + 13077: 0x5478, + 13078: 0x80DA, + 13079: 0x57F9, + 13080: 0x88F4, + 13081: 0x8D54, + 13082: 0x966A, + 13083: 0x914D, + 13084: 0x4F69, + 13085: 0x6C9B, + 13086: 0x55B7, + 13087: 0x76C6, + 13088: 0x7830, + 13089: 0x62A8, + 13090: 0x70F9, + 13091: 0x6F8E, + 13092: 0x5F6D, + 13093: 0x84EC, + 13094: 0x68DA, + 13095: 0x787C, + 13096: 0x7BF7, + 13097: 0x81A8, + 13098: 0x670B, + 13099: 0x9E4F, + 13100: 0x6367, + 13101: 0x78B0, + 13102: 0x576F, + 13103: 0x7812, + 13104: 0x9739, + 13105: 0x6279, + 13106: 0x62AB, + 13107: 0x5288, + 13108: 0x7435, + 13109: 0x6BD7, + 13110: 0x826A, + 13111: 0x826B, + 13112: 0x826C, + 13113: 0x826D, + 13114: 0x8271, + 13115: 0x8275, + 13116: 0x8276, + 13117: 0x8277, + 13118: 0x8278, + 13119: 0x827B, + 13120: 0x827C, + 13121: 0x8280, + 13122: 0x8281, + 13123: 0x8283, + 13124: 0x8285, + 13125: 0x8286, + 13126: 0x8287, + 13127: 0x8289, + 13128: 0x828C, + 13129: 0x8290, + 13130: 0x8293, + 13131: 0x8294, + 13132: 0x8295, + 13133: 0x8296, + 13134: 0x829A, + 13135: 0x829B, + 13136: 0x829E, + 13137: 0x82A0, + 13138: 0x82A2, + 13139: 0x82A3, + 13140: 0x82A7, + 13141: 0x82B2, + 13142: 0x82B5, + 13143: 0x82B6, + 13144: 0x82BA, + 13145: 0x82BB, + 13146: 0x82BC, + 13147: 0x82BF, + 13148: 0x82C0, + 13149: 0x82C2, + 13150: 0x82C3, + 13151: 0x82C5, + 13152: 0x82C6, + 13153: 0x82C9, + 13154: 0x82D0, + 13155: 0x82D6, + 13156: 0x82D9, + 13157: 0x82DA, + 13158: 0x82DD, + 13159: 0x82E2, + 13160: 0x82E7, + 13161: 0x82E8, + 13162: 0x82E9, + 13163: 0x82EA, + 13164: 0x82EC, + 13165: 0x82ED, + 13166: 0x82EE, + 13167: 0x82F0, + 13168: 0x82F2, + 13169: 0x82F3, + 13170: 0x82F5, + 13171: 0x82F6, + 13172: 0x82F8, + 13173: 0x82FA, + 13174: 0x82FC, + 13175: 0x82FD, + 13176: 0x82FE, + 13177: 0x82FF, + 13178: 0x8300, + 13179: 0x830A, + 13180: 0x830B, + 13181: 0x830D, + 13182: 0x8310, + 13183: 0x8312, + 13184: 0x8313, + 13185: 0x8316, + 13186: 0x8318, + 13187: 0x8319, + 13188: 0x831D, + 13189: 0x831E, + 13190: 0x831F, + 13191: 0x8320, + 13192: 0x8321, + 13193: 0x8322, + 13194: 0x8323, + 13195: 0x8324, + 13196: 0x8325, + 13197: 0x8326, + 13198: 0x8329, + 13199: 0x832A, + 13200: 0x832E, + 13201: 0x8330, + 13202: 0x8332, + 13203: 0x8337, + 13204: 0x833B, + 13205: 0x833D, + 13206: 0x5564, + 13207: 0x813E, + 13208: 0x75B2, + 13209: 0x76AE, + 13210: 0x5339, + 13211: 0x75DE, + 13212: 0x50FB, + 13213: 0x5C41, + 13214: 0x8B6C, + 13215: 0x7BC7, + 13216: 0x504F, + 13217: 0x7247, + 13218: 0x9A97, + 13219: 0x98D8, + 13220: 0x6F02, + 13221: 0x74E2, + 13222: 0x7968, + 13223: 0x6487, + 13224: 0x77A5, + 13225: 0x62FC, + 13226: 0x9891, + 13227: 0x8D2B, + 13228: 0x54C1, + 13229: 0x8058, + 13230: 0x4E52, + 13231: 0x576A, + 13232: 0x82F9, + 13233: 0x840D, + 13234: 0x5E73, + 13235: 0x51ED, + 13236: 0x74F6, + 13237: 0x8BC4, + 13238: 0x5C4F, + 13239: 0x5761, + 13240: 0x6CFC, + 13241: 0x9887, + 13242: 0x5A46, + 13243: 0x7834, + 13244: 0x9B44, + 13245: 0x8FEB, + 13246: 0x7C95, + 13247: 0x5256, + 13248: 0x6251, + 13249: 0x94FA, + 13250: 0x4EC6, + 13251: 0x8386, + 13252: 0x8461, + 13253: 0x83E9, + 13254: 0x84B2, + 13255: 0x57D4, + 13256: 0x6734, + 13257: 0x5703, + 13258: 0x666E, + 13259: 0x6D66, + 13260: 0x8C31, + 13261: 0x66DD, + 13262: 0x7011, + 13263: 0x671F, + 13264: 0x6B3A, + 13265: 0x6816, + 13266: 0x621A, + 13267: 0x59BB, + 13268: 0x4E03, + 13269: 0x51C4, + 13270: 0x6F06, + 13271: 0x67D2, + 13272: 0x6C8F, + 13273: 0x5176, + 13274: 0x68CB, + 13275: 0x5947, + 13276: 0x6B67, + 13277: 0x7566, + 13278: 0x5D0E, + 13279: 0x8110, + 13280: 0x9F50, + 13281: 0x65D7, + 13282: 0x7948, + 13283: 0x7941, + 13284: 0x9A91, + 13285: 0x8D77, + 13286: 0x5C82, + 13287: 0x4E5E, + 13288: 0x4F01, + 13289: 0x542F, + 13290: 0x5951, + 13291: 0x780C, + 13292: 0x5668, + 13293: 0x6C14, + 13294: 0x8FC4, + 13295: 0x5F03, + 13296: 0x6C7D, + 13297: 0x6CE3, + 13298: 0x8BAB, + 13299: 0x6390, + 13300: 0x833E, + 13301: 0x833F, + 13302: 0x8341, + 13303: 0x8342, + 13304: 0x8344, + 13305: 0x8345, + 13306: 0x8348, + 13307: 0x834A, + 13308: 0x834B, + 13309: 0x834C, + 13310: 0x834D, + 13311: 0x834E, + 13312: 0x8353, + 13313: 0x8355, + 13314: 0x8356, + 13315: 0x8357, + 13316: 0x8358, + 13317: 0x8359, + 13318: 0x835D, + 13319: 0x8362, + 13320: 0x8370, + 13321: 0x8371, + 13322: 0x8372, + 13323: 0x8373, + 13324: 0x8374, + 13325: 0x8375, + 13326: 0x8376, + 13327: 0x8379, + 13328: 0x837A, + 13329: 0x837E, + 13330: 0x837F, + 13331: 0x8380, + 13332: 0x8381, + 13333: 0x8382, + 13334: 0x8383, + 13335: 0x8384, + 13336: 0x8387, + 13337: 0x8388, + 13338: 0x838A, + 13339: 0x838B, + 13340: 0x838C, + 13341: 0x838D, + 13342: 0x838F, + 13343: 0x8390, + 13344: 0x8391, + 13345: 0x8394, + 13346: 0x8395, + 13347: 0x8396, + 13348: 0x8397, + 13349: 0x8399, + 13350: 0x839A, + 13351: 0x839D, + 13352: 0x839F, + 13353: 0x83A1, + 13354: 0x83A2, + 13355: 0x83A3, + 13356: 0x83A4, + 13357: 0x83A5, + 13358: 0x83A6, + 13359: 0x83A7, + 13360: 0x83AC, + 13361: 0x83AD, + 13362: 0x83AE, + 13363: 0x83AF, + 13364: 0x83B5, + 13365: 0x83BB, + 13366: 0x83BE, + 13367: 0x83BF, + 13368: 0x83C2, + 13369: 0x83C3, + 13370: 0x83C4, + 13371: 0x83C6, + 13372: 0x83C8, + 13373: 0x83C9, + 13374: 0x83CB, + 13375: 0x83CD, + 13376: 0x83CE, + 13377: 0x83D0, + 13378: 0x83D1, + 13379: 0x83D2, + 13380: 0x83D3, + 13381: 0x83D5, + 13382: 0x83D7, + 13383: 0x83D9, + 13384: 0x83DA, + 13385: 0x83DB, + 13386: 0x83DE, + 13387: 0x83E2, + 13388: 0x83E3, + 13389: 0x83E4, + 13390: 0x83E6, + 13391: 0x83E7, + 13392: 0x83E8, + 13393: 0x83EB, + 13394: 0x83EC, + 13395: 0x83ED, + 13396: 0x6070, + 13397: 0x6D3D, + 13398: 0x7275, + 13399: 0x6266, + 13400: 0x948E, + 13401: 0x94C5, + 13402: 0x5343, + 13403: 0x8FC1, + 13404: 0x7B7E, + 13405: 0x4EDF, + 13406: 0x8C26, + 13407: 0x4E7E, + 13408: 0x9ED4, + 13409: 0x94B1, + 13410: 0x94B3, + 13411: 0x524D, + 13412: 0x6F5C, + 13413: 0x9063, + 13414: 0x6D45, + 13415: 0x8C34, + 13416: 0x5811, + 13417: 0x5D4C, + 13418: 0x6B20, + 13419: 0x6B49, + 13420: 0x67AA, + 13421: 0x545B, + 13422: 0x8154, + 13423: 0x7F8C, + 13424: 0x5899, + 13425: 0x8537, + 13426: 0x5F3A, + 13427: 0x62A2, + 13428: 0x6A47, + 13429: 0x9539, + 13430: 0x6572, + 13431: 0x6084, + 13432: 0x6865, + 13433: 0x77A7, + 13434: 0x4E54, + 13435: 0x4FA8, + 13436: 0x5DE7, + 13437: 0x9798, + 13438: 0x64AC, + 13439: 0x7FD8, + 13440: 0x5CED, + 13441: 0x4FCF, + 13442: 0x7A8D, + 13443: 0x5207, + 13444: 0x8304, + 13445: 0x4E14, + 13446: 0x602F, + 13447: 0x7A83, + 13448: 0x94A6, + 13449: 0x4FB5, + 13450: 0x4EB2, + 13451: 0x79E6, + 13452: 0x7434, + 13453: 0x52E4, + 13454: 0x82B9, + 13455: 0x64D2, + 13456: 0x79BD, + 13457: 0x5BDD, + 13458: 0x6C81, + 13459: 0x9752, + 13460: 0x8F7B, + 13461: 0x6C22, + 13462: 0x503E, + 13463: 0x537F, + 13464: 0x6E05, + 13465: 0x64CE, + 13466: 0x6674, + 13467: 0x6C30, + 13468: 0x60C5, + 13469: 0x9877, + 13470: 0x8BF7, + 13471: 0x5E86, + 13472: 0x743C, + 13473: 0x7A77, + 13474: 0x79CB, + 13475: 0x4E18, + 13476: 0x90B1, + 13477: 0x7403, + 13478: 0x6C42, + 13479: 0x56DA, + 13480: 0x914B, + 13481: 0x6CC5, + 13482: 0x8D8B, + 13483: 0x533A, + 13484: 0x86C6, + 13485: 0x66F2, + 13486: 0x8EAF, + 13487: 0x5C48, + 13488: 0x9A71, + 13489: 0x6E20, + 13490: 0x83EE, + 13491: 0x83EF, + 13492: 0x83F3, + 13493: 0x83F4, + 13494: 0x83F5, + 13495: 0x83F6, + 13496: 0x83F7, + 13497: 0x83FA, + 13498: 0x83FB, + 13499: 0x83FC, + 13500: 0x83FE, + 13501: 0x83FF, + 13502: 0x8400, + 13503: 0x8402, + 13504: 0x8405, + 13505: 0x8407, + 13506: 0x8408, + 13507: 0x8409, + 13508: 0x840A, + 13509: 0x8410, + 13510: 0x8412, + 13511: 0x8413, + 13512: 0x8414, + 13513: 0x8415, + 13514: 0x8416, + 13515: 0x8417, + 13516: 0x8419, + 13517: 0x841A, + 13518: 0x841B, + 13519: 0x841E, + 13520: 0x841F, + 13521: 0x8420, + 13522: 0x8421, + 13523: 0x8422, + 13524: 0x8423, + 13525: 0x8429, + 13526: 0x842A, + 13527: 0x842B, + 13528: 0x842C, + 13529: 0x842D, + 13530: 0x842E, + 13531: 0x842F, + 13532: 0x8430, + 13533: 0x8432, + 13534: 0x8433, + 13535: 0x8434, + 13536: 0x8435, + 13537: 0x8436, + 13538: 0x8437, + 13539: 0x8439, + 13540: 0x843A, + 13541: 0x843B, + 13542: 0x843E, + 13543: 0x843F, + 13544: 0x8440, + 13545: 0x8441, + 13546: 0x8442, + 13547: 0x8443, + 13548: 0x8444, + 13549: 0x8445, + 13550: 0x8447, + 13551: 0x8448, + 13552: 0x8449, + 13553: 0x844A, + 13554: 0x844B, + 13555: 0x844C, + 13556: 0x844D, + 13557: 0x844E, + 13558: 0x844F, + 13559: 0x8450, + 13560: 0x8452, + 13561: 0x8453, + 13562: 0x8454, + 13563: 0x8455, + 13564: 0x8456, + 13565: 0x8458, + 13566: 0x845D, + 13567: 0x845E, + 13568: 0x845F, + 13569: 0x8460, + 13570: 0x8462, + 13571: 0x8464, + 13572: 0x8465, + 13573: 0x8466, + 13574: 0x8467, + 13575: 0x8468, + 13576: 0x846A, + 13577: 0x846E, + 13578: 0x846F, + 13579: 0x8470, + 13580: 0x8472, + 13581: 0x8474, + 13582: 0x8477, + 13583: 0x8479, + 13584: 0x847B, + 13585: 0x847C, + 13586: 0x53D6, + 13587: 0x5A36, + 13588: 0x9F8B, + 13589: 0x8DA3, + 13590: 0x53BB, + 13591: 0x5708, + 13592: 0x98A7, + 13593: 0x6743, + 13594: 0x919B, + 13595: 0x6CC9, + 13596: 0x5168, + 13597: 0x75CA, + 13598: 0x62F3, + 13599: 0x72AC, + 13600: 0x5238, + 13601: 0x529D, + 13602: 0x7F3A, + 13603: 0x7094, + 13604: 0x7638, + 13605: 0x5374, + 13606: 0x9E4A, + 13607: 0x69B7, + 13608: 0x786E, + 13609: 0x96C0, + 13610: 0x88D9, + 13611: 0x7FA4, + 13612: 0x7136, + 13613: 0x71C3, + 13614: 0x5189, + 13615: 0x67D3, + 13616: 0x74E4, + 13617: 0x58E4, + 13618: 0x6518, + 13619: 0x56B7, + 13620: 0x8BA9, + 13621: 0x9976, + 13622: 0x6270, + 13623: 0x7ED5, + 13624: 0x60F9, + 13625: 0x70ED, + 13626: 0x58EC, + 13627: 0x4EC1, + 13628: 0x4EBA, + 13629: 0x5FCD, + 13630: 0x97E7, + 13631: 0x4EFB, + 13632: 0x8BA4, + 13633: 0x5203, + 13634: 0x598A, + 13635: 0x7EAB, + 13636: 0x6254, + 13637: 0x4ECD, + 13638: 0x65E5, + 13639: 0x620E, + 13640: 0x8338, + 13641: 0x84C9, + 13642: 0x8363, + 13643: 0x878D, + 13644: 0x7194, + 13645: 0x6EB6, + 13646: 0x5BB9, + 13647: 0x7ED2, + 13648: 0x5197, + 13649: 0x63C9, + 13650: 0x67D4, + 13651: 0x8089, + 13652: 0x8339, + 13653: 0x8815, + 13654: 0x5112, + 13655: 0x5B7A, + 13656: 0x5982, + 13657: 0x8FB1, + 13658: 0x4E73, + 13659: 0x6C5D, + 13660: 0x5165, + 13661: 0x8925, + 13662: 0x8F6F, + 13663: 0x962E, + 13664: 0x854A, + 13665: 0x745E, + 13666: 0x9510, + 13667: 0x95F0, + 13668: 0x6DA6, + 13669: 0x82E5, + 13670: 0x5F31, + 13671: 0x6492, + 13672: 0x6D12, + 13673: 0x8428, + 13674: 0x816E, + 13675: 0x9CC3, + 13676: 0x585E, + 13677: 0x8D5B, + 13678: 0x4E09, + 13679: 0x53C1, + 13680: 0x847D, + 13681: 0x847E, + 13682: 0x847F, + 13683: 0x8480, + 13684: 0x8481, + 13685: 0x8483, + 13686: 0x8484, + 13687: 0x8485, + 13688: 0x8486, + 13689: 0x848A, + 13690: 0x848D, + 13691: 0x848F, + 13692: 0x8490, + 13693: 0x8491, + 13694: 0x8492, + 13695: 0x8493, + 13696: 0x8494, + 13697: 0x8495, + 13698: 0x8496, + 13699: 0x8498, + 13700: 0x849A, + 13701: 0x849B, + 13702: 0x849D, + 13703: 0x849E, + 13704: 0x849F, + 13705: 0x84A0, + 13706: 0x84A2, + 13707: 0x84A3, + 13708: 0x84A4, + 13709: 0x84A5, + 13710: 0x84A6, + 13711: 0x84A7, + 13712: 0x84A8, + 13713: 0x84A9, + 13714: 0x84AA, + 13715: 0x84AB, + 13716: 0x84AC, + 13717: 0x84AD, + 13718: 0x84AE, + 13719: 0x84B0, + 13720: 0x84B1, + 13721: 0x84B3, + 13722: 0x84B5, + 13723: 0x84B6, + 13724: 0x84B7, + 13725: 0x84BB, + 13726: 0x84BC, + 13727: 0x84BE, + 13728: 0x84C0, + 13729: 0x84C2, + 13730: 0x84C3, + 13731: 0x84C5, + 13732: 0x84C6, + 13733: 0x84C7, + 13734: 0x84C8, + 13735: 0x84CB, + 13736: 0x84CC, + 13737: 0x84CE, + 13738: 0x84CF, + 13739: 0x84D2, + 13740: 0x84D4, + 13741: 0x84D5, + 13742: 0x84D7, + 13743: 0x84D8, + 13744: 0x84D9, + 13745: 0x84DA, + 13746: 0x84DB, + 13747: 0x84DC, + 13748: 0x84DE, + 13749: 0x84E1, + 13750: 0x84E2, + 13751: 0x84E4, + 13752: 0x84E7, + 13753: 0x84E8, + 13754: 0x84E9, + 13755: 0x84EA, + 13756: 0x84EB, + 13757: 0x84ED, + 13758: 0x84EE, + 13759: 0x84EF, + 13760: 0x84F1, + 13761: 0x84F2, + 13762: 0x84F3, + 13763: 0x84F4, + 13764: 0x84F5, + 13765: 0x84F6, + 13766: 0x84F7, + 13767: 0x84F8, + 13768: 0x84F9, + 13769: 0x84FA, + 13770: 0x84FB, + 13771: 0x84FD, + 13772: 0x84FE, + 13773: 0x8500, + 13774: 0x8501, + 13775: 0x8502, + 13776: 0x4F1E, + 13777: 0x6563, + 13778: 0x6851, + 13779: 0x55D3, + 13780: 0x4E27, + 13781: 0x6414, + 13782: 0x9A9A, + 13783: 0x626B, + 13784: 0x5AC2, + 13785: 0x745F, + 13786: 0x8272, + 13787: 0x6DA9, + 13788: 0x68EE, + 13789: 0x50E7, + 13790: 0x838E, + 13791: 0x7802, + 13792: 0x6740, + 13793: 0x5239, + 13794: 0x6C99, + 13795: 0x7EB1, + 13796: 0x50BB, + 13797: 0x5565, + 13798: 0x715E, + 13799: 0x7B5B, + 13800: 0x6652, + 13801: 0x73CA, + 13802: 0x82EB, + 13803: 0x6749, + 13804: 0x5C71, + 13805: 0x5220, + 13806: 0x717D, + 13807: 0x886B, + 13808: 0x95EA, + 13809: 0x9655, + 13810: 0x64C5, + 13811: 0x8D61, + 13812: 0x81B3, + 13813: 0x5584, + 13814: 0x6C55, + 13815: 0x6247, + 13816: 0x7F2E, + 13817: 0x5892, + 13818: 0x4F24, + 13819: 0x5546, + 13820: 0x8D4F, + 13821: 0x664C, + 13822: 0x4E0A, + 13823: 0x5C1A, + 13824: 0x88F3, + 13825: 0x68A2, + 13826: 0x634E, + 13827: 0x7A0D, + 13828: 0x70E7, + 13829: 0x828D, + 13830: 0x52FA, + 13831: 0x97F6, + 13832: 0x5C11, + 13833: 0x54E8, + 13834: 0x90B5, + 13835: 0x7ECD, + 13836: 0x5962, + 13837: 0x8D4A, + 13838: 0x86C7, + 13839: 0x820C, + 13840: 0x820D, + 13841: 0x8D66, + 13842: 0x6444, + 13843: 0x5C04, + 13844: 0x6151, + 13845: 0x6D89, + 13846: 0x793E, + 13847: 0x8BBE, + 13848: 0x7837, + 13849: 0x7533, + 13850: 0x547B, + 13851: 0x4F38, + 13852: 0x8EAB, + 13853: 0x6DF1, + 13854: 0x5A20, + 13855: 0x7EC5, + 13856: 0x795E, + 13857: 0x6C88, + 13858: 0x5BA1, + 13859: 0x5A76, + 13860: 0x751A, + 13861: 0x80BE, + 13862: 0x614E, + 13863: 0x6E17, + 13864: 0x58F0, + 13865: 0x751F, + 13866: 0x7525, + 13867: 0x7272, + 13868: 0x5347, + 13869: 0x7EF3, + 13870: 0x8503, + 13871: 0x8504, + 13872: 0x8505, + 13873: 0x8506, + 13874: 0x8507, + 13875: 0x8508, + 13876: 0x8509, + 13877: 0x850A, + 13878: 0x850B, + 13879: 0x850D, + 13880: 0x850E, + 13881: 0x850F, + 13882: 0x8510, + 13883: 0x8512, + 13884: 0x8514, + 13885: 0x8515, + 13886: 0x8516, + 13887: 0x8518, + 13888: 0x8519, + 13889: 0x851B, + 13890: 0x851C, + 13891: 0x851D, + 13892: 0x851E, + 13893: 0x8520, + 13894: 0x8522, + 13895: 0x8523, + 13896: 0x8524, + 13897: 0x8525, + 13898: 0x8526, + 13899: 0x8527, + 13900: 0x8528, + 13901: 0x8529, + 13902: 0x852A, + 13903: 0x852D, + 13904: 0x852E, + 13905: 0x852F, + 13906: 0x8530, + 13907: 0x8531, + 13908: 0x8532, + 13909: 0x8533, + 13910: 0x8534, + 13911: 0x8535, + 13912: 0x8536, + 13913: 0x853E, + 13914: 0x853F, + 13915: 0x8540, + 13916: 0x8541, + 13917: 0x8542, + 13918: 0x8544, + 13919: 0x8545, + 13920: 0x8546, + 13921: 0x8547, + 13922: 0x854B, + 13923: 0x854C, + 13924: 0x854D, + 13925: 0x854E, + 13926: 0x854F, + 13927: 0x8550, + 13928: 0x8551, + 13929: 0x8552, + 13930: 0x8553, + 13931: 0x8554, + 13932: 0x8555, + 13933: 0x8557, + 13934: 0x8558, + 13935: 0x855A, + 13936: 0x855B, + 13937: 0x855C, + 13938: 0x855D, + 13939: 0x855F, + 13940: 0x8560, + 13941: 0x8561, + 13942: 0x8562, + 13943: 0x8563, + 13944: 0x8565, + 13945: 0x8566, + 13946: 0x8567, + 13947: 0x8569, + 13948: 0x856A, + 13949: 0x856B, + 13950: 0x856C, + 13951: 0x856D, + 13952: 0x856E, + 13953: 0x856F, + 13954: 0x8570, + 13955: 0x8571, + 13956: 0x8573, + 13957: 0x8575, + 13958: 0x8576, + 13959: 0x8577, + 13960: 0x8578, + 13961: 0x857C, + 13962: 0x857D, + 13963: 0x857F, + 13964: 0x8580, + 13965: 0x8581, + 13966: 0x7701, + 13967: 0x76DB, + 13968: 0x5269, + 13969: 0x80DC, + 13970: 0x5723, + 13971: 0x5E08, + 13972: 0x5931, + 13973: 0x72EE, + 13974: 0x65BD, + 13975: 0x6E7F, + 13976: 0x8BD7, + 13977: 0x5C38, + 13978: 0x8671, + 13979: 0x5341, + 13980: 0x77F3, + 13981: 0x62FE, + 13982: 0x65F6, + 13983: 0x4EC0, + 13984: 0x98DF, + 13985: 0x8680, + 13986: 0x5B9E, + 13987: 0x8BC6, + 13988: 0x53F2, + 13989: 0x77E2, + 13990: 0x4F7F, + 13991: 0x5C4E, + 13992: 0x9A76, + 13993: 0x59CB, + 13994: 0x5F0F, + 13995: 0x793A, + 13996: 0x58EB, + 13997: 0x4E16, + 13998: 0x67FF, + 13999: 0x4E8B, + 14000: 0x62ED, + 14001: 0x8A93, + 14002: 0x901D, + 14003: 0x52BF, + 14004: 0x662F, + 14005: 0x55DC, + 14006: 0x566C, + 14007: 0x9002, + 14008: 0x4ED5, + 14009: 0x4F8D, + 14010: 0x91CA, + 14011: 0x9970, + 14012: 0x6C0F, + 14013: 0x5E02, + 14014: 0x6043, + 14015: 0x5BA4, + 14016: 0x89C6, + 14017: 0x8BD5, + 14018: 0x6536, + 14019: 0x624B, + 14020: 0x9996, + 14021: 0x5B88, + 14022: 0x5BFF, + 14023: 0x6388, + 14024: 0x552E, + 14025: 0x53D7, + 14026: 0x7626, + 14027: 0x517D, + 14028: 0x852C, + 14029: 0x67A2, + 14030: 0x68B3, + 14031: 0x6B8A, + 14032: 0x6292, + 14033: 0x8F93, + 14034: 0x53D4, + 14035: 0x8212, + 14036: 0x6DD1, + 14037: 0x758F, + 14038: 0x4E66, + 14039: 0x8D4E, + 14040: 0x5B70, + 14041: 0x719F, + 14042: 0x85AF, + 14043: 0x6691, + 14044: 0x66D9, + 14045: 0x7F72, + 14046: 0x8700, + 14047: 0x9ECD, + 14048: 0x9F20, + 14049: 0x5C5E, + 14050: 0x672F, + 14051: 0x8FF0, + 14052: 0x6811, + 14053: 0x675F, + 14054: 0x620D, + 14055: 0x7AD6, + 14056: 0x5885, + 14057: 0x5EB6, + 14058: 0x6570, + 14059: 0x6F31, + 14060: 0x8582, + 14061: 0x8583, + 14062: 0x8586, + 14063: 0x8588, + 14064: 0x8589, + 14065: 0x858A, + 14066: 0x858B, + 14067: 0x858C, + 14068: 0x858D, + 14069: 0x858E, + 14070: 0x8590, + 14071: 0x8591, + 14072: 0x8592, + 14073: 0x8593, + 14074: 0x8594, + 14075: 0x8595, + 14076: 0x8596, + 14077: 0x8597, + 14078: 0x8598, + 14079: 0x8599, + 14080: 0x859A, + 14081: 0x859D, + 14082: 0x859E, + 14083: 0x859F, + 14084: 0x85A0, + 14085: 0x85A1, + 14086: 0x85A2, + 14087: 0x85A3, + 14088: 0x85A5, + 14089: 0x85A6, + 14090: 0x85A7, + 14091: 0x85A9, + 14092: 0x85AB, + 14093: 0x85AC, + 14094: 0x85AD, + 14095: 0x85B1, + 14096: 0x85B2, + 14097: 0x85B3, + 14098: 0x85B4, + 14099: 0x85B5, + 14100: 0x85B6, + 14101: 0x85B8, + 14102: 0x85BA, + 14103: 0x85BB, + 14104: 0x85BC, + 14105: 0x85BD, + 14106: 0x85BE, + 14107: 0x85BF, + 14108: 0x85C0, + 14109: 0x85C2, + 14110: 0x85C3, + 14111: 0x85C4, + 14112: 0x85C5, + 14113: 0x85C6, + 14114: 0x85C7, + 14115: 0x85C8, + 14116: 0x85CA, + 14117: 0x85CB, + 14118: 0x85CC, + 14119: 0x85CD, + 14120: 0x85CE, + 14121: 0x85D1, + 14122: 0x85D2, + 14123: 0x85D4, + 14124: 0x85D6, + 14125: 0x85D7, + 14126: 0x85D8, + 14127: 0x85D9, + 14128: 0x85DA, + 14129: 0x85DB, + 14130: 0x85DD, + 14131: 0x85DE, + 14132: 0x85DF, + 14133: 0x85E0, + 14134: 0x85E1, + 14135: 0x85E2, + 14136: 0x85E3, + 14137: 0x85E5, + 14138: 0x85E6, + 14139: 0x85E7, + 14140: 0x85E8, + 14141: 0x85EA, + 14142: 0x85EB, + 14143: 0x85EC, + 14144: 0x85ED, + 14145: 0x85EE, + 14146: 0x85EF, + 14147: 0x85F0, + 14148: 0x85F1, + 14149: 0x85F2, + 14150: 0x85F3, + 14151: 0x85F4, + 14152: 0x85F5, + 14153: 0x85F6, + 14154: 0x85F7, + 14155: 0x85F8, + 14156: 0x6055, + 14157: 0x5237, + 14158: 0x800D, + 14159: 0x6454, + 14160: 0x8870, + 14161: 0x7529, + 14162: 0x5E05, + 14163: 0x6813, + 14164: 0x62F4, + 14165: 0x971C, + 14166: 0x53CC, + 14167: 0x723D, + 14168: 0x8C01, + 14169: 0x6C34, + 14170: 0x7761, + 14171: 0x7A0E, + 14172: 0x542E, + 14173: 0x77AC, + 14174: 0x987A, + 14175: 0x821C, + 14176: 0x8BF4, + 14177: 0x7855, + 14178: 0x6714, + 14179: 0x70C1, + 14180: 0x65AF, + 14181: 0x6495, + 14182: 0x5636, + 14183: 0x601D, + 14184: 0x79C1, + 14185: 0x53F8, + 14186: 0x4E1D, + 14187: 0x6B7B, + 14188: 0x8086, + 14189: 0x5BFA, + 14190: 0x55E3, + 14191: 0x56DB, + 14192: 0x4F3A, + 14193: 0x4F3C, + 14194: 0x9972, + 14195: 0x5DF3, + 14196: 0x677E, + 14197: 0x8038, + 14198: 0x6002, + 14199: 0x9882, + 14200: 0x9001, + 14201: 0x5B8B, + 14202: 0x8BBC, + 14203: 0x8BF5, + 14204: 0x641C, + 14205: 0x8258, + 14206: 0x64DE, + 14207: 0x55FD, + 14208: 0x82CF, + 14209: 0x9165, + 14210: 0x4FD7, + 14211: 0x7D20, + 14212: 0x901F, + 14213: 0x7C9F, + 14214: 0x50F3, + 14215: 0x5851, + 14216: 0x6EAF, + 14217: 0x5BBF, + 14218: 0x8BC9, + 14219: 0x8083, + 14220: 0x9178, + 14221: 0x849C, + 14222: 0x7B97, + 14223: 0x867D, + 14224: 0x968B, + 14225: 0x968F, + 14226: 0x7EE5, + 14227: 0x9AD3, + 14228: 0x788E, + 14229: 0x5C81, + 14230: 0x7A57, + 14231: 0x9042, + 14232: 0x96A7, + 14233: 0x795F, + 14234: 0x5B59, + 14235: 0x635F, + 14236: 0x7B0B, + 14237: 0x84D1, + 14238: 0x68AD, + 14239: 0x5506, + 14240: 0x7F29, + 14241: 0x7410, + 14242: 0x7D22, + 14243: 0x9501, + 14244: 0x6240, + 14245: 0x584C, + 14246: 0x4ED6, + 14247: 0x5B83, + 14248: 0x5979, + 14249: 0x5854, + 14250: 0x85F9, + 14251: 0x85FA, + 14252: 0x85FC, + 14253: 0x85FD, + 14254: 0x85FE, + 14255: 0x8600, + 14256: 0x8601, + 14257: 0x8602, + 14258: 0x8603, + 14259: 0x8604, + 14260: 0x8606, + 14261: 0x8607, + 14262: 0x8608, + 14263: 0x8609, + 14264: 0x860A, + 14265: 0x860B, + 14266: 0x860C, + 14267: 0x860D, + 14268: 0x860E, + 14269: 0x860F, + 14270: 0x8610, + 14271: 0x8612, + 14272: 0x8613, + 14273: 0x8614, + 14274: 0x8615, + 14275: 0x8617, + 14276: 0x8618, + 14277: 0x8619, + 14278: 0x861A, + 14279: 0x861B, + 14280: 0x861C, + 14281: 0x861D, + 14282: 0x861E, + 14283: 0x861F, + 14284: 0x8620, + 14285: 0x8621, + 14286: 0x8622, + 14287: 0x8623, + 14288: 0x8624, + 14289: 0x8625, + 14290: 0x8626, + 14291: 0x8628, + 14292: 0x862A, + 14293: 0x862B, + 14294: 0x862C, + 14295: 0x862D, + 14296: 0x862E, + 14297: 0x862F, + 14298: 0x8630, + 14299: 0x8631, + 14300: 0x8632, + 14301: 0x8633, + 14302: 0x8634, + 14303: 0x8635, + 14304: 0x8636, + 14305: 0x8637, + 14306: 0x8639, + 14307: 0x863A, + 14308: 0x863B, + 14309: 0x863D, + 14310: 0x863E, + 14311: 0x863F, + 14312: 0x8640, + 14313: 0x8641, + 14314: 0x8642, + 14315: 0x8643, + 14316: 0x8644, + 14317: 0x8645, + 14318: 0x8646, + 14319: 0x8647, + 14320: 0x8648, + 14321: 0x8649, + 14322: 0x864A, + 14323: 0x864B, + 14324: 0x864C, + 14325: 0x8652, + 14326: 0x8653, + 14327: 0x8655, + 14328: 0x8656, + 14329: 0x8657, + 14330: 0x8658, + 14331: 0x8659, + 14332: 0x865B, + 14333: 0x865C, + 14334: 0x865D, + 14335: 0x865F, + 14336: 0x8660, + 14337: 0x8661, + 14338: 0x8663, + 14339: 0x8664, + 14340: 0x8665, + 14341: 0x8666, + 14342: 0x8667, + 14343: 0x8668, + 14344: 0x8669, + 14345: 0x866A, + 14346: 0x736D, + 14347: 0x631E, + 14348: 0x8E4B, + 14349: 0x8E0F, + 14350: 0x80CE, + 14351: 0x82D4, + 14352: 0x62AC, + 14353: 0x53F0, + 14354: 0x6CF0, + 14355: 0x915E, + 14356: 0x592A, + 14357: 0x6001, + 14358: 0x6C70, + 14359: 0x574D, + 14360: 0x644A, + 14361: 0x8D2A, + 14362: 0x762B, + 14363: 0x6EE9, + 14364: 0x575B, + 14365: 0x6A80, + 14366: 0x75F0, + 14367: 0x6F6D, + 14368: 0x8C2D, + 14369: 0x8C08, + 14370: 0x5766, + 14371: 0x6BEF, + 14372: 0x8892, + 14373: 0x78B3, + 14374: 0x63A2, + 14375: 0x53F9, + 14376: 0x70AD, + 14377: 0x6C64, + 14378: 0x5858, + 14379: 0x642A, + 14380: 0x5802, + 14381: 0x68E0, + 14382: 0x819B, + 14383: 0x5510, + 14384: 0x7CD6, + 14385: 0x5018, + 14386: 0x8EBA, + 14387: 0x6DCC, + 14388: 0x8D9F, + 14389: 0x70EB, + 14390: 0x638F, + 14391: 0x6D9B, + 14392: 0x6ED4, + 14393: 0x7EE6, + 14394: 0x8404, + 14395: 0x6843, + 14396: 0x9003, + 14397: 0x6DD8, + 14398: 0x9676, + 14399: 0x8BA8, + 14400: 0x5957, + 14401: 0x7279, + 14402: 0x85E4, + 14403: 0x817E, + 14404: 0x75BC, + 14405: 0x8A8A, + 14406: 0x68AF, + 14407: 0x5254, + 14408: 0x8E22, + 14409: 0x9511, + 14410: 0x63D0, + 14411: 0x9898, + 14412: 0x8E44, + 14413: 0x557C, + 14414: 0x4F53, + 14415: 0x66FF, + 14416: 0x568F, + 14417: 0x60D5, + 14418: 0x6D95, + 14419: 0x5243, + 14420: 0x5C49, + 14421: 0x5929, + 14422: 0x6DFB, + 14423: 0x586B, + 14424: 0x7530, + 14425: 0x751C, + 14426: 0x606C, + 14427: 0x8214, + 14428: 0x8146, + 14429: 0x6311, + 14430: 0x6761, + 14431: 0x8FE2, + 14432: 0x773A, + 14433: 0x8DF3, + 14434: 0x8D34, + 14435: 0x94C1, + 14436: 0x5E16, + 14437: 0x5385, + 14438: 0x542C, + 14439: 0x70C3, + 14440: 0x866D, + 14441: 0x866F, + 14442: 0x8670, + 14443: 0x8672, + 14444: 0x8673, + 14445: 0x8674, + 14446: 0x8675, + 14447: 0x8676, + 14448: 0x8677, + 14449: 0x8678, + 14450: 0x8683, + 14451: 0x8684, + 14452: 0x8685, + 14453: 0x8686, + 14454: 0x8687, + 14455: 0x8688, + 14456: 0x8689, + 14457: 0x868E, + 14458: 0x868F, + 14459: 0x8690, + 14460: 0x8691, + 14461: 0x8692, + 14462: 0x8694, + 14463: 0x8696, + 14464: 0x8697, + 14465: 0x8698, + 14466: 0x8699, + 14467: 0x869A, + 14468: 0x869B, + 14469: 0x869E, + 14470: 0x869F, + 14471: 0x86A0, + 14472: 0x86A1, + 14473: 0x86A2, + 14474: 0x86A5, + 14475: 0x86A6, + 14476: 0x86AB, + 14477: 0x86AD, + 14478: 0x86AE, + 14479: 0x86B2, + 14480: 0x86B3, + 14481: 0x86B7, + 14482: 0x86B8, + 14483: 0x86B9, + 14484: 0x86BB, + 14485: 0x86BC, + 14486: 0x86BD, + 14487: 0x86BE, + 14488: 0x86BF, + 14489: 0x86C1, + 14490: 0x86C2, + 14491: 0x86C3, + 14492: 0x86C5, + 14493: 0x86C8, + 14494: 0x86CC, + 14495: 0x86CD, + 14496: 0x86D2, + 14497: 0x86D3, + 14498: 0x86D5, + 14499: 0x86D6, + 14500: 0x86D7, + 14501: 0x86DA, + 14502: 0x86DC, + 14503: 0x86DD, + 14504: 0x86E0, + 14505: 0x86E1, + 14506: 0x86E2, + 14507: 0x86E3, + 14508: 0x86E5, + 14509: 0x86E6, + 14510: 0x86E7, + 14511: 0x86E8, + 14512: 0x86EA, + 14513: 0x86EB, + 14514: 0x86EC, + 14515: 0x86EF, + 14516: 0x86F5, + 14517: 0x86F6, + 14518: 0x86F7, + 14519: 0x86FA, + 14520: 0x86FB, + 14521: 0x86FC, + 14522: 0x86FD, + 14523: 0x86FF, + 14524: 0x8701, + 14525: 0x8704, + 14526: 0x8705, + 14527: 0x8706, + 14528: 0x870B, + 14529: 0x870C, + 14530: 0x870E, + 14531: 0x870F, + 14532: 0x8710, + 14533: 0x8711, + 14534: 0x8714, + 14535: 0x8716, + 14536: 0x6C40, + 14537: 0x5EF7, + 14538: 0x505C, + 14539: 0x4EAD, + 14540: 0x5EAD, + 14541: 0x633A, + 14542: 0x8247, + 14543: 0x901A, + 14544: 0x6850, + 14545: 0x916E, + 14546: 0x77B3, + 14547: 0x540C, + 14548: 0x94DC, + 14549: 0x5F64, + 14550: 0x7AE5, + 14551: 0x6876, + 14552: 0x6345, + 14553: 0x7B52, + 14554: 0x7EDF, + 14555: 0x75DB, + 14556: 0x5077, + 14557: 0x6295, + 14558: 0x5934, + 14559: 0x900F, + 14560: 0x51F8, + 14561: 0x79C3, + 14562: 0x7A81, + 14563: 0x56FE, + 14564: 0x5F92, + 14565: 0x9014, + 14566: 0x6D82, + 14567: 0x5C60, + 14568: 0x571F, + 14569: 0x5410, + 14570: 0x5154, + 14571: 0x6E4D, + 14572: 0x56E2, + 14573: 0x63A8, + 14574: 0x9893, + 14575: 0x817F, + 14576: 0x8715, + 14577: 0x892A, + 14578: 0x9000, + 14579: 0x541E, + 14580: 0x5C6F, + 14581: 0x81C0, + 14582: 0x62D6, + 14583: 0x6258, + 14584: 0x8131, + 14585: 0x9E35, + 14586: 0x9640, + 14587: 0x9A6E, + 14588: 0x9A7C, + 14589: 0x692D, + 14590: 0x59A5, + 14591: 0x62D3, + 14592: 0x553E, + 14593: 0x6316, + 14594: 0x54C7, + 14595: 0x86D9, + 14596: 0x6D3C, + 14597: 0x5A03, + 14598: 0x74E6, + 14599: 0x889C, + 14600: 0x6B6A, + 14601: 0x5916, + 14602: 0x8C4C, + 14603: 0x5F2F, + 14604: 0x6E7E, + 14605: 0x73A9, + 14606: 0x987D, + 14607: 0x4E38, + 14608: 0x70F7, + 14609: 0x5B8C, + 14610: 0x7897, + 14611: 0x633D, + 14612: 0x665A, + 14613: 0x7696, + 14614: 0x60CB, + 14615: 0x5B9B, + 14616: 0x5A49, + 14617: 0x4E07, + 14618: 0x8155, + 14619: 0x6C6A, + 14620: 0x738B, + 14621: 0x4EA1, + 14622: 0x6789, + 14623: 0x7F51, + 14624: 0x5F80, + 14625: 0x65FA, + 14626: 0x671B, + 14627: 0x5FD8, + 14628: 0x5984, + 14629: 0x5A01, + 14630: 0x8719, + 14631: 0x871B, + 14632: 0x871D, + 14633: 0x871F, + 14634: 0x8720, + 14635: 0x8724, + 14636: 0x8726, + 14637: 0x8727, + 14638: 0x8728, + 14639: 0x872A, + 14640: 0x872B, + 14641: 0x872C, + 14642: 0x872D, + 14643: 0x872F, + 14644: 0x8730, + 14645: 0x8732, + 14646: 0x8733, + 14647: 0x8735, + 14648: 0x8736, + 14649: 0x8738, + 14650: 0x8739, + 14651: 0x873A, + 14652: 0x873C, + 14653: 0x873D, + 14654: 0x8740, + 14655: 0x8741, + 14656: 0x8742, + 14657: 0x8743, + 14658: 0x8744, + 14659: 0x8745, + 14660: 0x8746, + 14661: 0x874A, + 14662: 0x874B, + 14663: 0x874D, + 14664: 0x874F, + 14665: 0x8750, + 14666: 0x8751, + 14667: 0x8752, + 14668: 0x8754, + 14669: 0x8755, + 14670: 0x8756, + 14671: 0x8758, + 14672: 0x875A, + 14673: 0x875B, + 14674: 0x875C, + 14675: 0x875D, + 14676: 0x875E, + 14677: 0x875F, + 14678: 0x8761, + 14679: 0x8762, + 14680: 0x8766, + 14681: 0x8767, + 14682: 0x8768, + 14683: 0x8769, + 14684: 0x876A, + 14685: 0x876B, + 14686: 0x876C, + 14687: 0x876D, + 14688: 0x876F, + 14689: 0x8771, + 14690: 0x8772, + 14691: 0x8773, + 14692: 0x8775, + 14693: 0x8777, + 14694: 0x8778, + 14695: 0x8779, + 14696: 0x877A, + 14697: 0x877F, + 14698: 0x8780, + 14699: 0x8781, + 14700: 0x8784, + 14701: 0x8786, + 14702: 0x8787, + 14703: 0x8789, + 14704: 0x878A, + 14705: 0x878C, + 14706: 0x878E, + 14707: 0x878F, + 14708: 0x8790, + 14709: 0x8791, + 14710: 0x8792, + 14711: 0x8794, + 14712: 0x8795, + 14713: 0x8796, + 14714: 0x8798, + 14715: 0x8799, + 14716: 0x879A, + 14717: 0x879B, + 14718: 0x879C, + 14719: 0x879D, + 14720: 0x879E, + 14721: 0x87A0, + 14722: 0x87A1, + 14723: 0x87A2, + 14724: 0x87A3, + 14725: 0x87A4, + 14726: 0x5DCD, + 14727: 0x5FAE, + 14728: 0x5371, + 14729: 0x97E6, + 14730: 0x8FDD, + 14731: 0x6845, + 14732: 0x56F4, + 14733: 0x552F, + 14734: 0x60DF, + 14735: 0x4E3A, + 14736: 0x6F4D, + 14737: 0x7EF4, + 14738: 0x82C7, + 14739: 0x840E, + 14740: 0x59D4, + 14741: 0x4F1F, + 14742: 0x4F2A, + 14743: 0x5C3E, + 14744: 0x7EAC, + 14745: 0x672A, + 14746: 0x851A, + 14747: 0x5473, + 14748: 0x754F, + 14749: 0x80C3, + 14750: 0x5582, + 14751: 0x9B4F, + 14752: 0x4F4D, + 14753: 0x6E2D, + 14754: 0x8C13, + 14755: 0x5C09, + 14756: 0x6170, + 14757: 0x536B, + 14758: 0x761F, + 14759: 0x6E29, + 14760: 0x868A, + 14761: 0x6587, + 14762: 0x95FB, + 14763: 0x7EB9, + 14764: 0x543B, + 14765: 0x7A33, + 14766: 0x7D0A, + 14767: 0x95EE, + 14768: 0x55E1, + 14769: 0x7FC1, + 14770: 0x74EE, + 14771: 0x631D, + 14772: 0x8717, + 14773: 0x6DA1, + 14774: 0x7A9D, + 14775: 0x6211, + 14776: 0x65A1, + 14777: 0x5367, + 14778: 0x63E1, + 14779: 0x6C83, + 14780: 0x5DEB, + 14781: 0x545C, + 14782: 0x94A8, + 14783: 0x4E4C, + 14784: 0x6C61, + 14785: 0x8BEC, + 14786: 0x5C4B, + 14787: 0x65E0, + 14788: 0x829C, + 14789: 0x68A7, + 14790: 0x543E, + 14791: 0x5434, + 14792: 0x6BCB, + 14793: 0x6B66, + 14794: 0x4E94, + 14795: 0x6342, + 14796: 0x5348, + 14797: 0x821E, + 14798: 0x4F0D, + 14799: 0x4FAE, + 14800: 0x575E, + 14801: 0x620A, + 14802: 0x96FE, + 14803: 0x6664, + 14804: 0x7269, + 14805: 0x52FF, + 14806: 0x52A1, + 14807: 0x609F, + 14808: 0x8BEF, + 14809: 0x6614, + 14810: 0x7199, + 14811: 0x6790, + 14812: 0x897F, + 14813: 0x7852, + 14814: 0x77FD, + 14815: 0x6670, + 14816: 0x563B, + 14817: 0x5438, + 14818: 0x9521, + 14819: 0x727A, + 14820: 0x87A5, + 14821: 0x87A6, + 14822: 0x87A7, + 14823: 0x87A9, + 14824: 0x87AA, + 14825: 0x87AE, + 14826: 0x87B0, + 14827: 0x87B1, + 14828: 0x87B2, + 14829: 0x87B4, + 14830: 0x87B6, + 14831: 0x87B7, + 14832: 0x87B8, + 14833: 0x87B9, + 14834: 0x87BB, + 14835: 0x87BC, + 14836: 0x87BE, + 14837: 0x87BF, + 14838: 0x87C1, + 14839: 0x87C2, + 14840: 0x87C3, + 14841: 0x87C4, + 14842: 0x87C5, + 14843: 0x87C7, + 14844: 0x87C8, + 14845: 0x87C9, + 14846: 0x87CC, + 14847: 0x87CD, + 14848: 0x87CE, + 14849: 0x87CF, + 14850: 0x87D0, + 14851: 0x87D4, + 14852: 0x87D5, + 14853: 0x87D6, + 14854: 0x87D7, + 14855: 0x87D8, + 14856: 0x87D9, + 14857: 0x87DA, + 14858: 0x87DC, + 14859: 0x87DD, + 14860: 0x87DE, + 14861: 0x87DF, + 14862: 0x87E1, + 14863: 0x87E2, + 14864: 0x87E3, + 14865: 0x87E4, + 14866: 0x87E6, + 14867: 0x87E7, + 14868: 0x87E8, + 14869: 0x87E9, + 14870: 0x87EB, + 14871: 0x87EC, + 14872: 0x87ED, + 14873: 0x87EF, + 14874: 0x87F0, + 14875: 0x87F1, + 14876: 0x87F2, + 14877: 0x87F3, + 14878: 0x87F4, + 14879: 0x87F5, + 14880: 0x87F6, + 14881: 0x87F7, + 14882: 0x87F8, + 14883: 0x87FA, + 14884: 0x87FB, + 14885: 0x87FC, + 14886: 0x87FD, + 14887: 0x87FF, + 14888: 0x8800, + 14889: 0x8801, + 14890: 0x8802, + 14891: 0x8804, + 14892: 0x8805, + 14893: 0x8806, + 14894: 0x8807, + 14895: 0x8808, + 14896: 0x8809, + 14897: 0x880B, + 14898: 0x880C, + 14899: 0x880D, + 14900: 0x880E, + 14901: 0x880F, + 14902: 0x8810, + 14903: 0x8811, + 14904: 0x8812, + 14905: 0x8814, + 14906: 0x8817, + 14907: 0x8818, + 14908: 0x8819, + 14909: 0x881A, + 14910: 0x881C, + 14911: 0x881D, + 14912: 0x881E, + 14913: 0x881F, + 14914: 0x8820, + 14915: 0x8823, + 14916: 0x7A00, + 14917: 0x606F, + 14918: 0x5E0C, + 14919: 0x6089, + 14920: 0x819D, + 14921: 0x5915, + 14922: 0x60DC, + 14923: 0x7184, + 14924: 0x70EF, + 14925: 0x6EAA, + 14926: 0x6C50, + 14927: 0x7280, + 14928: 0x6A84, + 14929: 0x88AD, + 14930: 0x5E2D, + 14931: 0x4E60, + 14932: 0x5AB3, + 14933: 0x559C, + 14934: 0x94E3, + 14935: 0x6D17, + 14936: 0x7CFB, + 14937: 0x9699, + 14938: 0x620F, + 14939: 0x7EC6, + 14940: 0x778E, + 14941: 0x867E, + 14942: 0x5323, + 14943: 0x971E, + 14944: 0x8F96, + 14945: 0x6687, + 14946: 0x5CE1, + 14947: 0x4FA0, + 14948: 0x72ED, + 14949: 0x4E0B, + 14950: 0x53A6, + 14951: 0x590F, + 14952: 0x5413, + 14953: 0x6380, + 14954: 0x9528, + 14955: 0x5148, + 14956: 0x4ED9, + 14957: 0x9C9C, + 14958: 0x7EA4, + 14959: 0x54B8, + 14960: 0x8D24, + 14961: 0x8854, + 14962: 0x8237, + 14963: 0x95F2, + 14964: 0x6D8E, + 14965: 0x5F26, + 14966: 0x5ACC, + 14967: 0x663E, + 14968: 0x9669, + 14969: 0x73B0, + 14970: 0x732E, + 14971: 0x53BF, + 14972: 0x817A, + 14973: 0x9985, + 14974: 0x7FA1, + 14975: 0x5BAA, + 14976: 0x9677, + 14977: 0x9650, + 14978: 0x7EBF, + 14979: 0x76F8, + 14980: 0x53A2, + 14981: 0x9576, + 14982: 0x9999, + 14983: 0x7BB1, + 14984: 0x8944, + 14985: 0x6E58, + 14986: 0x4E61, + 14987: 0x7FD4, + 14988: 0x7965, + 14989: 0x8BE6, + 14990: 0x60F3, + 14991: 0x54CD, + 14992: 0x4EAB, + 14993: 0x9879, + 14994: 0x5DF7, + 14995: 0x6A61, + 14996: 0x50CF, + 14997: 0x5411, + 14998: 0x8C61, + 14999: 0x8427, + 15000: 0x785D, + 15001: 0x9704, + 15002: 0x524A, + 15003: 0x54EE, + 15004: 0x56A3, + 15005: 0x9500, + 15006: 0x6D88, + 15007: 0x5BB5, + 15008: 0x6DC6, + 15009: 0x6653, + 15010: 0x8824, + 15011: 0x8825, + 15012: 0x8826, + 15013: 0x8827, + 15014: 0x8828, + 15015: 0x8829, + 15016: 0x882A, + 15017: 0x882B, + 15018: 0x882C, + 15019: 0x882D, + 15020: 0x882E, + 15021: 0x882F, + 15022: 0x8830, + 15023: 0x8831, + 15024: 0x8833, + 15025: 0x8834, + 15026: 0x8835, + 15027: 0x8836, + 15028: 0x8837, + 15029: 0x8838, + 15030: 0x883A, + 15031: 0x883B, + 15032: 0x883D, + 15033: 0x883E, + 15034: 0x883F, + 15035: 0x8841, + 15036: 0x8842, + 15037: 0x8843, + 15038: 0x8846, + 15039: 0x8847, + 15040: 0x8848, + 15041: 0x8849, + 15042: 0x884A, + 15043: 0x884B, + 15044: 0x884E, + 15045: 0x884F, + 15046: 0x8850, + 15047: 0x8851, + 15048: 0x8852, + 15049: 0x8853, + 15050: 0x8855, + 15051: 0x8856, + 15052: 0x8858, + 15053: 0x885A, + 15054: 0x885B, + 15055: 0x885C, + 15056: 0x885D, + 15057: 0x885E, + 15058: 0x885F, + 15059: 0x8860, + 15060: 0x8866, + 15061: 0x8867, + 15062: 0x886A, + 15063: 0x886D, + 15064: 0x886F, + 15065: 0x8871, + 15066: 0x8873, + 15067: 0x8874, + 15068: 0x8875, + 15069: 0x8876, + 15070: 0x8878, + 15071: 0x8879, + 15072: 0x887A, + 15073: 0x887B, + 15074: 0x887C, + 15075: 0x8880, + 15076: 0x8883, + 15077: 0x8886, + 15078: 0x8887, + 15079: 0x8889, + 15080: 0x888A, + 15081: 0x888C, + 15082: 0x888E, + 15083: 0x888F, + 15084: 0x8890, + 15085: 0x8891, + 15086: 0x8893, + 15087: 0x8894, + 15088: 0x8895, + 15089: 0x8897, + 15090: 0x8898, + 15091: 0x8899, + 15092: 0x889A, + 15093: 0x889B, + 15094: 0x889D, + 15095: 0x889E, + 15096: 0x889F, + 15097: 0x88A0, + 15098: 0x88A1, + 15099: 0x88A3, + 15100: 0x88A5, + 15101: 0x88A6, + 15102: 0x88A7, + 15103: 0x88A8, + 15104: 0x88A9, + 15105: 0x88AA, + 15106: 0x5C0F, + 15107: 0x5B5D, + 15108: 0x6821, + 15109: 0x8096, + 15110: 0x5578, + 15111: 0x7B11, + 15112: 0x6548, + 15113: 0x6954, + 15114: 0x4E9B, + 15115: 0x6B47, + 15116: 0x874E, + 15117: 0x978B, + 15118: 0x534F, + 15119: 0x631F, + 15120: 0x643A, + 15121: 0x90AA, + 15122: 0x659C, + 15123: 0x80C1, + 15124: 0x8C10, + 15125: 0x5199, + 15126: 0x68B0, + 15127: 0x5378, + 15128: 0x87F9, + 15129: 0x61C8, + 15130: 0x6CC4, + 15131: 0x6CFB, + 15132: 0x8C22, + 15133: 0x5C51, + 15134: 0x85AA, + 15135: 0x82AF, + 15136: 0x950C, + 15137: 0x6B23, + 15138: 0x8F9B, + 15139: 0x65B0, + 15140: 0x5FFB, + 15141: 0x5FC3, + 15142: 0x4FE1, + 15143: 0x8845, + 15144: 0x661F, + 15145: 0x8165, + 15146: 0x7329, + 15147: 0x60FA, + 15148: 0x5174, + 15149: 0x5211, + 15150: 0x578B, + 15151: 0x5F62, + 15152: 0x90A2, + 15153: 0x884C, + 15154: 0x9192, + 15155: 0x5E78, + 15156: 0x674F, + 15157: 0x6027, + 15158: 0x59D3, + 15159: 0x5144, + 15160: 0x51F6, + 15161: 0x80F8, + 15162: 0x5308, + 15163: 0x6C79, + 15164: 0x96C4, + 15165: 0x718A, + 15166: 0x4F11, + 15167: 0x4FEE, + 15168: 0x7F9E, + 15169: 0x673D, + 15170: 0x55C5, + 15171: 0x9508, + 15172: 0x79C0, + 15173: 0x8896, + 15174: 0x7EE3, + 15175: 0x589F, + 15176: 0x620C, + 15177: 0x9700, + 15178: 0x865A, + 15179: 0x5618, + 15180: 0x987B, + 15181: 0x5F90, + 15182: 0x8BB8, + 15183: 0x84C4, + 15184: 0x9157, + 15185: 0x53D9, + 15186: 0x65ED, + 15187: 0x5E8F, + 15188: 0x755C, + 15189: 0x6064, + 15190: 0x7D6E, + 15191: 0x5A7F, + 15192: 0x7EEA, + 15193: 0x7EED, + 15194: 0x8F69, + 15195: 0x55A7, + 15196: 0x5BA3, + 15197: 0x60AC, + 15198: 0x65CB, + 15199: 0x7384, + 15200: 0x88AC, + 15201: 0x88AE, + 15202: 0x88AF, + 15203: 0x88B0, + 15204: 0x88B2, + 15205: 0x88B3, + 15206: 0x88B4, + 15207: 0x88B5, + 15208: 0x88B6, + 15209: 0x88B8, + 15210: 0x88B9, + 15211: 0x88BA, + 15212: 0x88BB, + 15213: 0x88BD, + 15214: 0x88BE, + 15215: 0x88BF, + 15216: 0x88C0, + 15217: 0x88C3, + 15218: 0x88C4, + 15219: 0x88C7, + 15220: 0x88C8, + 15221: 0x88CA, + 15222: 0x88CB, + 15223: 0x88CC, + 15224: 0x88CD, + 15225: 0x88CF, + 15226: 0x88D0, + 15227: 0x88D1, + 15228: 0x88D3, + 15229: 0x88D6, + 15230: 0x88D7, + 15231: 0x88DA, + 15232: 0x88DB, + 15233: 0x88DC, + 15234: 0x88DD, + 15235: 0x88DE, + 15236: 0x88E0, + 15237: 0x88E1, + 15238: 0x88E6, + 15239: 0x88E7, + 15240: 0x88E9, + 15241: 0x88EA, + 15242: 0x88EB, + 15243: 0x88EC, + 15244: 0x88ED, + 15245: 0x88EE, + 15246: 0x88EF, + 15247: 0x88F2, + 15248: 0x88F5, + 15249: 0x88F6, + 15250: 0x88F7, + 15251: 0x88FA, + 15252: 0x88FB, + 15253: 0x88FD, + 15254: 0x88FF, + 15255: 0x8900, + 15256: 0x8901, + 15257: 0x8903, + 15258: 0x8904, + 15259: 0x8905, + 15260: 0x8906, + 15261: 0x8907, + 15262: 0x8908, + 15263: 0x8909, + 15264: 0x890B, + 15265: 0x890C, + 15266: 0x890D, + 15267: 0x890E, + 15268: 0x890F, + 15269: 0x8911, + 15270: 0x8914, + 15271: 0x8915, + 15272: 0x8916, + 15273: 0x8917, + 15274: 0x8918, + 15275: 0x891C, + 15276: 0x891D, + 15277: 0x891E, + 15278: 0x891F, + 15279: 0x8920, + 15280: 0x8922, + 15281: 0x8923, + 15282: 0x8924, + 15283: 0x8926, + 15284: 0x8927, + 15285: 0x8928, + 15286: 0x8929, + 15287: 0x892C, + 15288: 0x892D, + 15289: 0x892E, + 15290: 0x892F, + 15291: 0x8931, + 15292: 0x8932, + 15293: 0x8933, + 15294: 0x8935, + 15295: 0x8937, + 15296: 0x9009, + 15297: 0x7663, + 15298: 0x7729, + 15299: 0x7EDA, + 15300: 0x9774, + 15301: 0x859B, + 15302: 0x5B66, + 15303: 0x7A74, + 15304: 0x96EA, + 15305: 0x8840, + 15306: 0x52CB, + 15307: 0x718F, + 15308: 0x5FAA, + 15309: 0x65EC, + 15310: 0x8BE2, + 15311: 0x5BFB, + 15312: 0x9A6F, + 15313: 0x5DE1, + 15314: 0x6B89, + 15315: 0x6C5B, + 15316: 0x8BAD, + 15317: 0x8BAF, + 15318: 0x900A, + 15319: 0x8FC5, + 15320: 0x538B, + 15321: 0x62BC, + 15322: 0x9E26, + 15323: 0x9E2D, + 15324: 0x5440, + 15325: 0x4E2B, + 15326: 0x82BD, + 15327: 0x7259, + 15328: 0x869C, + 15329: 0x5D16, + 15330: 0x8859, + 15331: 0x6DAF, + 15332: 0x96C5, + 15333: 0x54D1, + 15334: 0x4E9A, + 15335: 0x8BB6, + 15336: 0x7109, + 15337: 0x54BD, + 15338: 0x9609, + 15339: 0x70DF, + 15340: 0x6DF9, + 15341: 0x76D0, + 15342: 0x4E25, + 15343: 0x7814, + 15344: 0x8712, + 15345: 0x5CA9, + 15346: 0x5EF6, + 15347: 0x8A00, + 15348: 0x989C, + 15349: 0x960E, + 15350: 0x708E, + 15351: 0x6CBF, + 15352: 0x5944, + 15353: 0x63A9, + 15354: 0x773C, + 15355: 0x884D, + 15356: 0x6F14, + 15357: 0x8273, + 15358: 0x5830, + 15359: 0x71D5, + 15360: 0x538C, + 15361: 0x781A, + 15362: 0x96C1, + 15363: 0x5501, + 15364: 0x5F66, + 15365: 0x7130, + 15366: 0x5BB4, + 15367: 0x8C1A, + 15368: 0x9A8C, + 15369: 0x6B83, + 15370: 0x592E, + 15371: 0x9E2F, + 15372: 0x79E7, + 15373: 0x6768, + 15374: 0x626C, + 15375: 0x4F6F, + 15376: 0x75A1, + 15377: 0x7F8A, + 15378: 0x6D0B, + 15379: 0x9633, + 15380: 0x6C27, + 15381: 0x4EF0, + 15382: 0x75D2, + 15383: 0x517B, + 15384: 0x6837, + 15385: 0x6F3E, + 15386: 0x9080, + 15387: 0x8170, + 15388: 0x5996, + 15389: 0x7476, + 15390: 0x8938, + 15391: 0x8939, + 15392: 0x893A, + 15393: 0x893B, + 15394: 0x893C, + 15395: 0x893D, + 15396: 0x893E, + 15397: 0x893F, + 15398: 0x8940, + 15399: 0x8942, + 15400: 0x8943, + 15401: 0x8945, + 15402: 0x8946, + 15403: 0x8947, + 15404: 0x8948, + 15405: 0x8949, + 15406: 0x894A, + 15407: 0x894B, + 15408: 0x894C, + 15409: 0x894D, + 15410: 0x894E, + 15411: 0x894F, + 15412: 0x8950, + 15413: 0x8951, + 15414: 0x8952, + 15415: 0x8953, + 15416: 0x8954, + 15417: 0x8955, + 15418: 0x8956, + 15419: 0x8957, + 15420: 0x8958, + 15421: 0x8959, + 15422: 0x895A, + 15423: 0x895B, + 15424: 0x895C, + 15425: 0x895D, + 15426: 0x8960, + 15427: 0x8961, + 15428: 0x8962, + 15429: 0x8963, + 15430: 0x8964, + 15431: 0x8965, + 15432: 0x8967, + 15433: 0x8968, + 15434: 0x8969, + 15435: 0x896A, + 15436: 0x896B, + 15437: 0x896C, + 15438: 0x896D, + 15439: 0x896E, + 15440: 0x896F, + 15441: 0x8970, + 15442: 0x8971, + 15443: 0x8972, + 15444: 0x8973, + 15445: 0x8974, + 15446: 0x8975, + 15447: 0x8976, + 15448: 0x8977, + 15449: 0x8978, + 15450: 0x8979, + 15451: 0x897A, + 15452: 0x897C, + 15453: 0x897D, + 15454: 0x897E, + 15455: 0x8980, + 15456: 0x8982, + 15457: 0x8984, + 15458: 0x8985, + 15459: 0x8987, + 15460: 0x8988, + 15461: 0x8989, + 15462: 0x898A, + 15463: 0x898B, + 15464: 0x898C, + 15465: 0x898D, + 15466: 0x898E, + 15467: 0x898F, + 15468: 0x8990, + 15469: 0x8991, + 15470: 0x8992, + 15471: 0x8993, + 15472: 0x8994, + 15473: 0x8995, + 15474: 0x8996, + 15475: 0x8997, + 15476: 0x8998, + 15477: 0x8999, + 15478: 0x899A, + 15479: 0x899B, + 15480: 0x899C, + 15481: 0x899D, + 15482: 0x899E, + 15483: 0x899F, + 15484: 0x89A0, + 15485: 0x89A1, + 15486: 0x6447, + 15487: 0x5C27, + 15488: 0x9065, + 15489: 0x7A91, + 15490: 0x8C23, + 15491: 0x59DA, + 15492: 0x54AC, + 15493: 0x8200, + 15494: 0x836F, + 15495: 0x8981, + 15496: 0x8000, + 15497: 0x6930, + 15498: 0x564E, + 15499: 0x8036, + 15500: 0x7237, + 15501: 0x91CE, + 15502: 0x51B6, + 15503: 0x4E5F, + 15504: 0x9875, + 15505: 0x6396, + 15506: 0x4E1A, + 15507: 0x53F6, + 15508: 0x66F3, + 15509: 0x814B, + 15510: 0x591C, + 15511: 0x6DB2, + 15512: 0x4E00, + 15513: 0x58F9, + 15514: 0x533B, + 15515: 0x63D6, + 15516: 0x94F1, + 15517: 0x4F9D, + 15518: 0x4F0A, + 15519: 0x8863, + 15520: 0x9890, + 15521: 0x5937, + 15522: 0x9057, + 15523: 0x79FB, + 15524: 0x4EEA, + 15525: 0x80F0, + 15526: 0x7591, + 15527: 0x6C82, + 15528: 0x5B9C, + 15529: 0x59E8, + 15530: 0x5F5D, + 15531: 0x6905, + 15532: 0x8681, + 15533: 0x501A, + 15534: 0x5DF2, + 15535: 0x4E59, + 15536: 0x77E3, + 15537: 0x4EE5, + 15538: 0x827A, + 15539: 0x6291, + 15540: 0x6613, + 15541: 0x9091, + 15542: 0x5C79, + 15543: 0x4EBF, + 15544: 0x5F79, + 15545: 0x81C6, + 15546: 0x9038, + 15547: 0x8084, + 15548: 0x75AB, + 15549: 0x4EA6, + 15550: 0x88D4, + 15551: 0x610F, + 15552: 0x6BC5, + 15553: 0x5FC6, + 15554: 0x4E49, + 15555: 0x76CA, + 15556: 0x6EA2, + 15557: 0x8BE3, + 15558: 0x8BAE, + 15559: 0x8C0A, + 15560: 0x8BD1, + 15561: 0x5F02, + 15562: 0x7FFC, + 15563: 0x7FCC, + 15564: 0x7ECE, + 15565: 0x8335, + 15566: 0x836B, + 15567: 0x56E0, + 15568: 0x6BB7, + 15569: 0x97F3, + 15570: 0x9634, + 15571: 0x59FB, + 15572: 0x541F, + 15573: 0x94F6, + 15574: 0x6DEB, + 15575: 0x5BC5, + 15576: 0x996E, + 15577: 0x5C39, + 15578: 0x5F15, + 15579: 0x9690, + 15580: 0x89A2, + 15581: 0x89A3, + 15582: 0x89A4, + 15583: 0x89A5, + 15584: 0x89A6, + 15585: 0x89A7, + 15586: 0x89A8, + 15587: 0x89A9, + 15588: 0x89AA, + 15589: 0x89AB, + 15590: 0x89AC, + 15591: 0x89AD, + 15592: 0x89AE, + 15593: 0x89AF, + 15594: 0x89B0, + 15595: 0x89B1, + 15596: 0x89B2, + 15597: 0x89B3, + 15598: 0x89B4, + 15599: 0x89B5, + 15600: 0x89B6, + 15601: 0x89B7, + 15602: 0x89B8, + 15603: 0x89B9, + 15604: 0x89BA, + 15605: 0x89BB, + 15606: 0x89BC, + 15607: 0x89BD, + 15608: 0x89BE, + 15609: 0x89BF, + 15610: 0x89C0, + 15611: 0x89C3, + 15612: 0x89CD, + 15613: 0x89D3, + 15614: 0x89D4, + 15615: 0x89D5, + 15616: 0x89D7, + 15617: 0x89D8, + 15618: 0x89D9, + 15619: 0x89DB, + 15620: 0x89DD, + 15621: 0x89DF, + 15622: 0x89E0, + 15623: 0x89E1, + 15624: 0x89E2, + 15625: 0x89E4, + 15626: 0x89E7, + 15627: 0x89E8, + 15628: 0x89E9, + 15629: 0x89EA, + 15630: 0x89EC, + 15631: 0x89ED, + 15632: 0x89EE, + 15633: 0x89F0, + 15634: 0x89F1, + 15635: 0x89F2, + 15636: 0x89F4, + 15637: 0x89F5, + 15638: 0x89F6, + 15639: 0x89F7, + 15640: 0x89F8, + 15641: 0x89F9, + 15642: 0x89FA, + 15643: 0x89FB, + 15644: 0x89FC, + 15645: 0x89FD, + 15646: 0x89FE, + 15647: 0x89FF, + 15648: 0x8A01, + 15649: 0x8A02, + 15650: 0x8A03, + 15651: 0x8A04, + 15652: 0x8A05, + 15653: 0x8A06, + 15654: 0x8A08, + 15655: 0x8A09, + 15656: 0x8A0A, + 15657: 0x8A0B, + 15658: 0x8A0C, + 15659: 0x8A0D, + 15660: 0x8A0E, + 15661: 0x8A0F, + 15662: 0x8A10, + 15663: 0x8A11, + 15664: 0x8A12, + 15665: 0x8A13, + 15666: 0x8A14, + 15667: 0x8A15, + 15668: 0x8A16, + 15669: 0x8A17, + 15670: 0x8A18, + 15671: 0x8A19, + 15672: 0x8A1A, + 15673: 0x8A1B, + 15674: 0x8A1C, + 15675: 0x8A1D, + 15676: 0x5370, + 15677: 0x82F1, + 15678: 0x6A31, + 15679: 0x5A74, + 15680: 0x9E70, + 15681: 0x5E94, + 15682: 0x7F28, + 15683: 0x83B9, + 15684: 0x8424, + 15685: 0x8425, + 15686: 0x8367, + 15687: 0x8747, + 15688: 0x8FCE, + 15689: 0x8D62, + 15690: 0x76C8, + 15691: 0x5F71, + 15692: 0x9896, + 15693: 0x786C, + 15694: 0x6620, + 15695: 0x54DF, + 15696: 0x62E5, + 15697: 0x4F63, + 15698: 0x81C3, + 15699: 0x75C8, + 15700: 0x5EB8, + 15701: 0x96CD, + 15702: 0x8E0A, + 15703: 0x86F9, + 15704: 0x548F, + 15705: 0x6CF3, + 15706: 0x6D8C, + 15707: 0x6C38, + 15708: 0x607F, + 15709: 0x52C7, + 15710: 0x7528, + 15711: 0x5E7D, + 15712: 0x4F18, + 15713: 0x60A0, + 15714: 0x5FE7, + 15715: 0x5C24, + 15716: 0x7531, + 15717: 0x90AE, + 15718: 0x94C0, + 15719: 0x72B9, + 15720: 0x6CB9, + 15721: 0x6E38, + 15722: 0x9149, + 15723: 0x6709, + 15724: 0x53CB, + 15725: 0x53F3, + 15726: 0x4F51, + 15727: 0x91C9, + 15728: 0x8BF1, + 15729: 0x53C8, + 15730: 0x5E7C, + 15731: 0x8FC2, + 15732: 0x6DE4, + 15733: 0x4E8E, + 15734: 0x76C2, + 15735: 0x6986, + 15736: 0x865E, + 15737: 0x611A, + 15738: 0x8206, + 15739: 0x4F59, + 15740: 0x4FDE, + 15741: 0x903E, + 15742: 0x9C7C, + 15743: 0x6109, + 15744: 0x6E1D, + 15745: 0x6E14, + 15746: 0x9685, + 15747: 0x4E88, + 15748: 0x5A31, + 15749: 0x96E8, + 15750: 0x4E0E, + 15751: 0x5C7F, + 15752: 0x79B9, + 15753: 0x5B87, + 15754: 0x8BED, + 15755: 0x7FBD, + 15756: 0x7389, + 15757: 0x57DF, + 15758: 0x828B, + 15759: 0x90C1, + 15760: 0x5401, + 15761: 0x9047, + 15762: 0x55BB, + 15763: 0x5CEA, + 15764: 0x5FA1, + 15765: 0x6108, + 15766: 0x6B32, + 15767: 0x72F1, + 15768: 0x80B2, + 15769: 0x8A89, + 15770: 0x8A1E, + 15771: 0x8A1F, + 15772: 0x8A20, + 15773: 0x8A21, + 15774: 0x8A22, + 15775: 0x8A23, + 15776: 0x8A24, + 15777: 0x8A25, + 15778: 0x8A26, + 15779: 0x8A27, + 15780: 0x8A28, + 15781: 0x8A29, + 15782: 0x8A2A, + 15783: 0x8A2B, + 15784: 0x8A2C, + 15785: 0x8A2D, + 15786: 0x8A2E, + 15787: 0x8A2F, + 15788: 0x8A30, + 15789: 0x8A31, + 15790: 0x8A32, + 15791: 0x8A33, + 15792: 0x8A34, + 15793: 0x8A35, + 15794: 0x8A36, + 15795: 0x8A37, + 15796: 0x8A38, + 15797: 0x8A39, + 15798: 0x8A3A, + 15799: 0x8A3B, + 15800: 0x8A3C, + 15801: 0x8A3D, + 15802: 0x8A3F, + 15803: 0x8A40, + 15804: 0x8A41, + 15805: 0x8A42, + 15806: 0x8A43, + 15807: 0x8A44, + 15808: 0x8A45, + 15809: 0x8A46, + 15810: 0x8A47, + 15811: 0x8A49, + 15812: 0x8A4A, + 15813: 0x8A4B, + 15814: 0x8A4C, + 15815: 0x8A4D, + 15816: 0x8A4E, + 15817: 0x8A4F, + 15818: 0x8A50, + 15819: 0x8A51, + 15820: 0x8A52, + 15821: 0x8A53, + 15822: 0x8A54, + 15823: 0x8A55, + 15824: 0x8A56, + 15825: 0x8A57, + 15826: 0x8A58, + 15827: 0x8A59, + 15828: 0x8A5A, + 15829: 0x8A5B, + 15830: 0x8A5C, + 15831: 0x8A5D, + 15832: 0x8A5E, + 15833: 0x8A5F, + 15834: 0x8A60, + 15835: 0x8A61, + 15836: 0x8A62, + 15837: 0x8A63, + 15838: 0x8A64, + 15839: 0x8A65, + 15840: 0x8A66, + 15841: 0x8A67, + 15842: 0x8A68, + 15843: 0x8A69, + 15844: 0x8A6A, + 15845: 0x8A6B, + 15846: 0x8A6C, + 15847: 0x8A6D, + 15848: 0x8A6E, + 15849: 0x8A6F, + 15850: 0x8A70, + 15851: 0x8A71, + 15852: 0x8A72, + 15853: 0x8A73, + 15854: 0x8A74, + 15855: 0x8A75, + 15856: 0x8A76, + 15857: 0x8A77, + 15858: 0x8A78, + 15859: 0x8A7A, + 15860: 0x8A7B, + 15861: 0x8A7C, + 15862: 0x8A7D, + 15863: 0x8A7E, + 15864: 0x8A7F, + 15865: 0x8A80, + 15866: 0x6D74, + 15867: 0x5BD3, + 15868: 0x88D5, + 15869: 0x9884, + 15870: 0x8C6B, + 15871: 0x9A6D, + 15872: 0x9E33, + 15873: 0x6E0A, + 15874: 0x51A4, + 15875: 0x5143, + 15876: 0x57A3, + 15877: 0x8881, + 15878: 0x539F, + 15879: 0x63F4, + 15880: 0x8F95, + 15881: 0x56ED, + 15882: 0x5458, + 15883: 0x5706, + 15884: 0x733F, + 15885: 0x6E90, + 15886: 0x7F18, + 15887: 0x8FDC, + 15888: 0x82D1, + 15889: 0x613F, + 15890: 0x6028, + 15891: 0x9662, + 15892: 0x66F0, + 15893: 0x7EA6, + 15894: 0x8D8A, + 15895: 0x8DC3, + 15896: 0x94A5, + 15897: 0x5CB3, + 15898: 0x7CA4, + 15899: 0x6708, + 15900: 0x60A6, + 15901: 0x9605, + 15902: 0x8018, + 15903: 0x4E91, + 15904: 0x90E7, + 15905: 0x5300, + 15906: 0x9668, + 15907: 0x5141, + 15908: 0x8FD0, + 15909: 0x8574, + 15910: 0x915D, + 15911: 0x6655, + 15912: 0x97F5, + 15913: 0x5B55, + 15914: 0x531D, + 15915: 0x7838, + 15916: 0x6742, + 15917: 0x683D, + 15918: 0x54C9, + 15919: 0x707E, + 15920: 0x5BB0, + 15921: 0x8F7D, + 15922: 0x518D, + 15923: 0x5728, + 15924: 0x54B1, + 15925: 0x6512, + 15926: 0x6682, + 15927: 0x8D5E, + 15928: 0x8D43, + 15929: 0x810F, + 15930: 0x846C, + 15931: 0x906D, + 15932: 0x7CDF, + 15933: 0x51FF, + 15934: 0x85FB, + 15935: 0x67A3, + 15936: 0x65E9, + 15937: 0x6FA1, + 15938: 0x86A4, + 15939: 0x8E81, + 15940: 0x566A, + 15941: 0x9020, + 15942: 0x7682, + 15943: 0x7076, + 15944: 0x71E5, + 15945: 0x8D23, + 15946: 0x62E9, + 15947: 0x5219, + 15948: 0x6CFD, + 15949: 0x8D3C, + 15950: 0x600E, + 15951: 0x589E, + 15952: 0x618E, + 15953: 0x66FE, + 15954: 0x8D60, + 15955: 0x624E, + 15956: 0x55B3, + 15957: 0x6E23, + 15958: 0x672D, + 15959: 0x8F67, + 15960: 0x8A81, + 15961: 0x8A82, + 15962: 0x8A83, + 15963: 0x8A84, + 15964: 0x8A85, + 15965: 0x8A86, + 15966: 0x8A87, + 15967: 0x8A88, + 15968: 0x8A8B, + 15969: 0x8A8C, + 15970: 0x8A8D, + 15971: 0x8A8E, + 15972: 0x8A8F, + 15973: 0x8A90, + 15974: 0x8A91, + 15975: 0x8A92, + 15976: 0x8A94, + 15977: 0x8A95, + 15978: 0x8A96, + 15979: 0x8A97, + 15980: 0x8A98, + 15981: 0x8A99, + 15982: 0x8A9A, + 15983: 0x8A9B, + 15984: 0x8A9C, + 15985: 0x8A9D, + 15986: 0x8A9E, + 15987: 0x8A9F, + 15988: 0x8AA0, + 15989: 0x8AA1, + 15990: 0x8AA2, + 15991: 0x8AA3, + 15992: 0x8AA4, + 15993: 0x8AA5, + 15994: 0x8AA6, + 15995: 0x8AA7, + 15996: 0x8AA8, + 15997: 0x8AA9, + 15998: 0x8AAA, + 15999: 0x8AAB, + 16000: 0x8AAC, + 16001: 0x8AAD, + 16002: 0x8AAE, + 16003: 0x8AAF, + 16004: 0x8AB0, + 16005: 0x8AB1, + 16006: 0x8AB2, + 16007: 0x8AB3, + 16008: 0x8AB4, + 16009: 0x8AB5, + 16010: 0x8AB6, + 16011: 0x8AB7, + 16012: 0x8AB8, + 16013: 0x8AB9, + 16014: 0x8ABA, + 16015: 0x8ABB, + 16016: 0x8ABC, + 16017: 0x8ABD, + 16018: 0x8ABE, + 16019: 0x8ABF, + 16020: 0x8AC0, + 16021: 0x8AC1, + 16022: 0x8AC2, + 16023: 0x8AC3, + 16024: 0x8AC4, + 16025: 0x8AC5, + 16026: 0x8AC6, + 16027: 0x8AC7, + 16028: 0x8AC8, + 16029: 0x8AC9, + 16030: 0x8ACA, + 16031: 0x8ACB, + 16032: 0x8ACC, + 16033: 0x8ACD, + 16034: 0x8ACE, + 16035: 0x8ACF, + 16036: 0x8AD0, + 16037: 0x8AD1, + 16038: 0x8AD2, + 16039: 0x8AD3, + 16040: 0x8AD4, + 16041: 0x8AD5, + 16042: 0x8AD6, + 16043: 0x8AD7, + 16044: 0x8AD8, + 16045: 0x8AD9, + 16046: 0x8ADA, + 16047: 0x8ADB, + 16048: 0x8ADC, + 16049: 0x8ADD, + 16050: 0x8ADE, + 16051: 0x8ADF, + 16052: 0x8AE0, + 16053: 0x8AE1, + 16054: 0x8AE2, + 16055: 0x8AE3, + 16056: 0x94E1, + 16057: 0x95F8, + 16058: 0x7728, + 16059: 0x6805, + 16060: 0x69A8, + 16061: 0x548B, + 16062: 0x4E4D, + 16063: 0x70B8, + 16064: 0x8BC8, + 16065: 0x6458, + 16066: 0x658B, + 16067: 0x5B85, + 16068: 0x7A84, + 16069: 0x503A, + 16070: 0x5BE8, + 16071: 0x77BB, + 16072: 0x6BE1, + 16073: 0x8A79, + 16074: 0x7C98, + 16075: 0x6CBE, + 16076: 0x76CF, + 16077: 0x65A9, + 16078: 0x8F97, + 16079: 0x5D2D, + 16080: 0x5C55, + 16081: 0x8638, + 16082: 0x6808, + 16083: 0x5360, + 16084: 0x6218, + 16085: 0x7AD9, + 16086: 0x6E5B, + 16087: 0x7EFD, + 16088: 0x6A1F, + 16089: 0x7AE0, + 16090: 0x5F70, + 16091: 0x6F33, + 16092: 0x5F20, + 16093: 0x638C, + 16094: 0x6DA8, + 16095: 0x6756, + 16096: 0x4E08, + 16097: 0x5E10, + 16098: 0x8D26, + 16099: 0x4ED7, + 16100: 0x80C0, + 16101: 0x7634, + 16102: 0x969C, + 16103: 0x62DB, + 16104: 0x662D, + 16105: 0x627E, + 16106: 0x6CBC, + 16107: 0x8D75, + 16108: 0x7167, + 16109: 0x7F69, + 16110: 0x5146, + 16111: 0x8087, + 16112: 0x53EC, + 16113: 0x906E, + 16114: 0x6298, + 16115: 0x54F2, + 16116: 0x86F0, + 16117: 0x8F99, + 16118: 0x8005, + 16119: 0x9517, + 16120: 0x8517, + 16121: 0x8FD9, + 16122: 0x6D59, + 16123: 0x73CD, + 16124: 0x659F, + 16125: 0x771F, + 16126: 0x7504, + 16127: 0x7827, + 16128: 0x81FB, + 16129: 0x8D1E, + 16130: 0x9488, + 16131: 0x4FA6, + 16132: 0x6795, + 16133: 0x75B9, + 16134: 0x8BCA, + 16135: 0x9707, + 16136: 0x632F, + 16137: 0x9547, + 16138: 0x9635, + 16139: 0x84B8, + 16140: 0x6323, + 16141: 0x7741, + 16142: 0x5F81, + 16143: 0x72F0, + 16144: 0x4E89, + 16145: 0x6014, + 16146: 0x6574, + 16147: 0x62EF, + 16148: 0x6B63, + 16149: 0x653F, + 16150: 0x8AE4, + 16151: 0x8AE5, + 16152: 0x8AE6, + 16153: 0x8AE7, + 16154: 0x8AE8, + 16155: 0x8AE9, + 16156: 0x8AEA, + 16157: 0x8AEB, + 16158: 0x8AEC, + 16159: 0x8AED, + 16160: 0x8AEE, + 16161: 0x8AEF, + 16162: 0x8AF0, + 16163: 0x8AF1, + 16164: 0x8AF2, + 16165: 0x8AF3, + 16166: 0x8AF4, + 16167: 0x8AF5, + 16168: 0x8AF6, + 16169: 0x8AF7, + 16170: 0x8AF8, + 16171: 0x8AF9, + 16172: 0x8AFA, + 16173: 0x8AFB, + 16174: 0x8AFC, + 16175: 0x8AFD, + 16176: 0x8AFE, + 16177: 0x8AFF, + 16178: 0x8B00, + 16179: 0x8B01, + 16180: 0x8B02, + 16181: 0x8B03, + 16182: 0x8B04, + 16183: 0x8B05, + 16184: 0x8B06, + 16185: 0x8B08, + 16186: 0x8B09, + 16187: 0x8B0A, + 16188: 0x8B0B, + 16189: 0x8B0C, + 16190: 0x8B0D, + 16191: 0x8B0E, + 16192: 0x8B0F, + 16193: 0x8B10, + 16194: 0x8B11, + 16195: 0x8B12, + 16196: 0x8B13, + 16197: 0x8B14, + 16198: 0x8B15, + 16199: 0x8B16, + 16200: 0x8B17, + 16201: 0x8B18, + 16202: 0x8B19, + 16203: 0x8B1A, + 16204: 0x8B1B, + 16205: 0x8B1C, + 16206: 0x8B1D, + 16207: 0x8B1E, + 16208: 0x8B1F, + 16209: 0x8B20, + 16210: 0x8B21, + 16211: 0x8B22, + 16212: 0x8B23, + 16213: 0x8B24, + 16214: 0x8B25, + 16215: 0x8B27, + 16216: 0x8B28, + 16217: 0x8B29, + 16218: 0x8B2A, + 16219: 0x8B2B, + 16220: 0x8B2C, + 16221: 0x8B2D, + 16222: 0x8B2E, + 16223: 0x8B2F, + 16224: 0x8B30, + 16225: 0x8B31, + 16226: 0x8B32, + 16227: 0x8B33, + 16228: 0x8B34, + 16229: 0x8B35, + 16230: 0x8B36, + 16231: 0x8B37, + 16232: 0x8B38, + 16233: 0x8B39, + 16234: 0x8B3A, + 16235: 0x8B3B, + 16236: 0x8B3C, + 16237: 0x8B3D, + 16238: 0x8B3E, + 16239: 0x8B3F, + 16240: 0x8B40, + 16241: 0x8B41, + 16242: 0x8B42, + 16243: 0x8B43, + 16244: 0x8B44, + 16245: 0x8B45, + 16246: 0x5E27, + 16247: 0x75C7, + 16248: 0x90D1, + 16249: 0x8BC1, + 16250: 0x829D, + 16251: 0x679D, + 16252: 0x652F, + 16253: 0x5431, + 16254: 0x8718, + 16255: 0x77E5, + 16256: 0x80A2, + 16257: 0x8102, + 16258: 0x6C41, + 16259: 0x4E4B, + 16260: 0x7EC7, + 16261: 0x804C, + 16262: 0x76F4, + 16263: 0x690D, + 16264: 0x6B96, + 16265: 0x6267, + 16266: 0x503C, + 16267: 0x4F84, + 16268: 0x5740, + 16269: 0x6307, + 16270: 0x6B62, + 16271: 0x8DBE, + 16272: 0x53EA, + 16273: 0x65E8, + 16274: 0x7EB8, + 16275: 0x5FD7, + 16276: 0x631A, + 16277: 0x63B7, + 16278: 0x81F3, + 16279: 0x81F4, + 16280: 0x7F6E, + 16281: 0x5E1C, + 16282: 0x5CD9, + 16283: 0x5236, + 16284: 0x667A, + 16285: 0x79E9, + 16286: 0x7A1A, + 16287: 0x8D28, + 16288: 0x7099, + 16289: 0x75D4, + 16290: 0x6EDE, + 16291: 0x6CBB, + 16292: 0x7A92, + 16293: 0x4E2D, + 16294: 0x76C5, + 16295: 0x5FE0, + 16296: 0x949F, + 16297: 0x8877, + 16298: 0x7EC8, + 16299: 0x79CD, + 16300: 0x80BF, + 16301: 0x91CD, + 16302: 0x4EF2, + 16303: 0x4F17, + 16304: 0x821F, + 16305: 0x5468, + 16306: 0x5DDE, + 16307: 0x6D32, + 16308: 0x8BCC, + 16309: 0x7CA5, + 16310: 0x8F74, + 16311: 0x8098, + 16312: 0x5E1A, + 16313: 0x5492, + 16314: 0x76B1, + 16315: 0x5B99, + 16316: 0x663C, + 16317: 0x9AA4, + 16318: 0x73E0, + 16319: 0x682A, + 16320: 0x86DB, + 16321: 0x6731, + 16322: 0x732A, + 16323: 0x8BF8, + 16324: 0x8BDB, + 16325: 0x9010, + 16326: 0x7AF9, + 16327: 0x70DB, + 16328: 0x716E, + 16329: 0x62C4, + 16330: 0x77A9, + 16331: 0x5631, + 16332: 0x4E3B, + 16333: 0x8457, + 16334: 0x67F1, + 16335: 0x52A9, + 16336: 0x86C0, + 16337: 0x8D2E, + 16338: 0x94F8, + 16339: 0x7B51, + 16340: 0x8B46, + 16341: 0x8B47, + 16342: 0x8B48, + 16343: 0x8B49, + 16344: 0x8B4A, + 16345: 0x8B4B, + 16346: 0x8B4C, + 16347: 0x8B4D, + 16348: 0x8B4E, + 16349: 0x8B4F, + 16350: 0x8B50, + 16351: 0x8B51, + 16352: 0x8B52, + 16353: 0x8B53, + 16354: 0x8B54, + 16355: 0x8B55, + 16356: 0x8B56, + 16357: 0x8B57, + 16358: 0x8B58, + 16359: 0x8B59, + 16360: 0x8B5A, + 16361: 0x8B5B, + 16362: 0x8B5C, + 16363: 0x8B5D, + 16364: 0x8B5E, + 16365: 0x8B5F, + 16366: 0x8B60, + 16367: 0x8B61, + 16368: 0x8B62, + 16369: 0x8B63, + 16370: 0x8B64, + 16371: 0x8B65, + 16372: 0x8B67, + 16373: 0x8B68, + 16374: 0x8B69, + 16375: 0x8B6A, + 16376: 0x8B6B, + 16377: 0x8B6D, + 16378: 0x8B6E, + 16379: 0x8B6F, + 16380: 0x8B70, + 16381: 0x8B71, + 16382: 0x8B72, + 16383: 0x8B73, + 16384: 0x8B74, + 16385: 0x8B75, + 16386: 0x8B76, + 16387: 0x8B77, + 16388: 0x8B78, + 16389: 0x8B79, + 16390: 0x8B7A, + 16391: 0x8B7B, + 16392: 0x8B7C, + 16393: 0x8B7D, + 16394: 0x8B7E, + 16395: 0x8B7F, + 16396: 0x8B80, + 16397: 0x8B81, + 16398: 0x8B82, + 16399: 0x8B83, + 16400: 0x8B84, + 16401: 0x8B85, + 16402: 0x8B86, + 16403: 0x8B87, + 16404: 0x8B88, + 16405: 0x8B89, + 16406: 0x8B8A, + 16407: 0x8B8B, + 16408: 0x8B8C, + 16409: 0x8B8D, + 16410: 0x8B8E, + 16411: 0x8B8F, + 16412: 0x8B90, + 16413: 0x8B91, + 16414: 0x8B92, + 16415: 0x8B93, + 16416: 0x8B94, + 16417: 0x8B95, + 16418: 0x8B96, + 16419: 0x8B97, + 16420: 0x8B98, + 16421: 0x8B99, + 16422: 0x8B9A, + 16423: 0x8B9B, + 16424: 0x8B9C, + 16425: 0x8B9D, + 16426: 0x8B9E, + 16427: 0x8B9F, + 16428: 0x8BAC, + 16429: 0x8BB1, + 16430: 0x8BBB, + 16431: 0x8BC7, + 16432: 0x8BD0, + 16433: 0x8BEA, + 16434: 0x8C09, + 16435: 0x8C1E, + 16436: 0x4F4F, + 16437: 0x6CE8, + 16438: 0x795D, + 16439: 0x9A7B, + 16440: 0x6293, + 16441: 0x722A, + 16442: 0x62FD, + 16443: 0x4E13, + 16444: 0x7816, + 16445: 0x8F6C, + 16446: 0x64B0, + 16447: 0x8D5A, + 16448: 0x7BC6, + 16449: 0x6869, + 16450: 0x5E84, + 16451: 0x88C5, + 16452: 0x5986, + 16453: 0x649E, + 16454: 0x58EE, + 16455: 0x72B6, + 16456: 0x690E, + 16457: 0x9525, + 16458: 0x8FFD, + 16459: 0x8D58, + 16460: 0x5760, + 16461: 0x7F00, + 16462: 0x8C06, + 16463: 0x51C6, + 16464: 0x6349, + 16465: 0x62D9, + 16466: 0x5353, + 16467: 0x684C, + 16468: 0x7422, + 16469: 0x8301, + 16470: 0x914C, + 16471: 0x5544, + 16472: 0x7740, + 16473: 0x707C, + 16474: 0x6D4A, + 16475: 0x5179, + 16476: 0x54A8, + 16477: 0x8D44, + 16478: 0x59FF, + 16479: 0x6ECB, + 16480: 0x6DC4, + 16481: 0x5B5C, + 16482: 0x7D2B, + 16483: 0x4ED4, + 16484: 0x7C7D, + 16485: 0x6ED3, + 16486: 0x5B50, + 16487: 0x81EA, + 16488: 0x6E0D, + 16489: 0x5B57, + 16490: 0x9B03, + 16491: 0x68D5, + 16492: 0x8E2A, + 16493: 0x5B97, + 16494: 0x7EFC, + 16495: 0x603B, + 16496: 0x7EB5, + 16497: 0x90B9, + 16498: 0x8D70, + 16499: 0x594F, + 16500: 0x63CD, + 16501: 0x79DF, + 16502: 0x8DB3, + 16503: 0x5352, + 16504: 0x65CF, + 16505: 0x7956, + 16506: 0x8BC5, + 16507: 0x963B, + 16508: 0x7EC4, + 16509: 0x94BB, + 16510: 0x7E82, + 16511: 0x5634, + 16512: 0x9189, + 16513: 0x6700, + 16514: 0x7F6A, + 16515: 0x5C0A, + 16516: 0x9075, + 16517: 0x6628, + 16518: 0x5DE6, + 16519: 0x4F50, + 16520: 0x67DE, + 16521: 0x505A, + 16522: 0x4F5C, + 16523: 0x5750, + 16524: 0x5EA7, + 16530: 0x8C38, + 16531: 0x8C39, + 16532: 0x8C3A, + 16533: 0x8C3B, + 16534: 0x8C3C, + 16535: 0x8C3D, + 16536: 0x8C3E, + 16537: 0x8C3F, + 16538: 0x8C40, + 16539: 0x8C42, + 16540: 0x8C43, + 16541: 0x8C44, + 16542: 0x8C45, + 16543: 0x8C48, + 16544: 0x8C4A, + 16545: 0x8C4B, + 16546: 0x8C4D, + 16547: 0x8C4E, + 16548: 0x8C4F, + 16549: 0x8C50, + 16550: 0x8C51, + 16551: 0x8C52, + 16552: 0x8C53, + 16553: 0x8C54, + 16554: 0x8C56, + 16555: 0x8C57, + 16556: 0x8C58, + 16557: 0x8C59, + 16558: 0x8C5B, + 16559: 0x8C5C, + 16560: 0x8C5D, + 16561: 0x8C5E, + 16562: 0x8C5F, + 16563: 0x8C60, + 16564: 0x8C63, + 16565: 0x8C64, + 16566: 0x8C65, + 16567: 0x8C66, + 16568: 0x8C67, + 16569: 0x8C68, + 16570: 0x8C69, + 16571: 0x8C6C, + 16572: 0x8C6D, + 16573: 0x8C6E, + 16574: 0x8C6F, + 16575: 0x8C70, + 16576: 0x8C71, + 16577: 0x8C72, + 16578: 0x8C74, + 16579: 0x8C75, + 16580: 0x8C76, + 16581: 0x8C77, + 16582: 0x8C7B, + 16583: 0x8C7C, + 16584: 0x8C7D, + 16585: 0x8C7E, + 16586: 0x8C7F, + 16587: 0x8C80, + 16588: 0x8C81, + 16589: 0x8C83, + 16590: 0x8C84, + 16591: 0x8C86, + 16592: 0x8C87, + 16593: 0x8C88, + 16594: 0x8C8B, + 16595: 0x8C8D, + 16596: 0x8C8E, + 16597: 0x8C8F, + 16598: 0x8C90, + 16599: 0x8C91, + 16600: 0x8C92, + 16601: 0x8C93, + 16602: 0x8C95, + 16603: 0x8C96, + 16604: 0x8C97, + 16605: 0x8C99, + 16606: 0x8C9A, + 16607: 0x8C9B, + 16608: 0x8C9C, + 16609: 0x8C9D, + 16610: 0x8C9E, + 16611: 0x8C9F, + 16612: 0x8CA0, + 16613: 0x8CA1, + 16614: 0x8CA2, + 16615: 0x8CA3, + 16616: 0x8CA4, + 16617: 0x8CA5, + 16618: 0x8CA6, + 16619: 0x8CA7, + 16620: 0x8CA8, + 16621: 0x8CA9, + 16622: 0x8CAA, + 16623: 0x8CAB, + 16624: 0x8CAC, + 16625: 0x8CAD, + 16626: 0x4E8D, + 16627: 0x4E0C, + 16628: 0x5140, + 16629: 0x4E10, + 16630: 0x5EFF, + 16631: 0x5345, + 16632: 0x4E15, + 16633: 0x4E98, + 16634: 0x4E1E, + 16635: 0x9B32, + 16636: 0x5B6C, + 16637: 0x5669, + 16638: 0x4E28, + 16639: 0x79BA, + 16640: 0x4E3F, + 16641: 0x5315, + 16642: 0x4E47, + 16643: 0x592D, + 16644: 0x723B, + 16645: 0x536E, + 16646: 0x6C10, + 16647: 0x56DF, + 16648: 0x80E4, + 16649: 0x9997, + 16650: 0x6BD3, + 16651: 0x777E, + 16652: 0x9F17, + 16653: 0x4E36, + 16654: 0x4E9F, + 16655: 0x9F10, + 16656: 0x4E5C, + 16657: 0x4E69, + 16658: 0x4E93, + 16659: 0x8288, + 16660: 0x5B5B, + 16661: 0x556C, + 16662: 0x560F, + 16663: 0x4EC4, + 16664: 0x538D, + 16665: 0x539D, + 16666: 0x53A3, + 16667: 0x53A5, + 16668: 0x53AE, + 16669: 0x9765, + 16670: 0x8D5D, + 16671: 0x531A, + 16672: 0x53F5, + 16673: 0x5326, + 16674: 0x532E, + 16675: 0x533E, + 16676: 0x8D5C, + 16677: 0x5366, + 16678: 0x5363, + 16679: 0x5202, + 16680: 0x5208, + 16681: 0x520E, + 16682: 0x522D, + 16683: 0x5233, + 16684: 0x523F, + 16685: 0x5240, + 16686: 0x524C, + 16687: 0x525E, + 16688: 0x5261, + 16689: 0x525C, + 16690: 0x84AF, + 16691: 0x527D, + 16692: 0x5282, + 16693: 0x5281, + 16694: 0x5290, + 16695: 0x5293, + 16696: 0x5182, + 16697: 0x7F54, + 16698: 0x4EBB, + 16699: 0x4EC3, + 16700: 0x4EC9, + 16701: 0x4EC2, + 16702: 0x4EE8, + 16703: 0x4EE1, + 16704: 0x4EEB, + 16705: 0x4EDE, + 16706: 0x4F1B, + 16707: 0x4EF3, + 16708: 0x4F22, + 16709: 0x4F64, + 16710: 0x4EF5, + 16711: 0x4F25, + 16712: 0x4F27, + 16713: 0x4F09, + 16714: 0x4F2B, + 16715: 0x4F5E, + 16716: 0x4F67, + 16717: 0x6538, + 16718: 0x4F5A, + 16719: 0x4F5D, + 16720: 0x8CAE, + 16721: 0x8CAF, + 16722: 0x8CB0, + 16723: 0x8CB1, + 16724: 0x8CB2, + 16725: 0x8CB3, + 16726: 0x8CB4, + 16727: 0x8CB5, + 16728: 0x8CB6, + 16729: 0x8CB7, + 16730: 0x8CB8, + 16731: 0x8CB9, + 16732: 0x8CBA, + 16733: 0x8CBB, + 16734: 0x8CBC, + 16735: 0x8CBD, + 16736: 0x8CBE, + 16737: 0x8CBF, + 16738: 0x8CC0, + 16739: 0x8CC1, + 16740: 0x8CC2, + 16741: 0x8CC3, + 16742: 0x8CC4, + 16743: 0x8CC5, + 16744: 0x8CC6, + 16745: 0x8CC7, + 16746: 0x8CC8, + 16747: 0x8CC9, + 16748: 0x8CCA, + 16749: 0x8CCB, + 16750: 0x8CCC, + 16751: 0x8CCD, + 16752: 0x8CCE, + 16753: 0x8CCF, + 16754: 0x8CD0, + 16755: 0x8CD1, + 16756: 0x8CD2, + 16757: 0x8CD3, + 16758: 0x8CD4, + 16759: 0x8CD5, + 16760: 0x8CD6, + 16761: 0x8CD7, + 16762: 0x8CD8, + 16763: 0x8CD9, + 16764: 0x8CDA, + 16765: 0x8CDB, + 16766: 0x8CDC, + 16767: 0x8CDD, + 16768: 0x8CDE, + 16769: 0x8CDF, + 16770: 0x8CE0, + 16771: 0x8CE1, + 16772: 0x8CE2, + 16773: 0x8CE3, + 16774: 0x8CE4, + 16775: 0x8CE5, + 16776: 0x8CE6, + 16777: 0x8CE7, + 16778: 0x8CE8, + 16779: 0x8CE9, + 16780: 0x8CEA, + 16781: 0x8CEB, + 16782: 0x8CEC, + 16783: 0x8CED, + 16784: 0x8CEE, + 16785: 0x8CEF, + 16786: 0x8CF0, + 16787: 0x8CF1, + 16788: 0x8CF2, + 16789: 0x8CF3, + 16790: 0x8CF4, + 16791: 0x8CF5, + 16792: 0x8CF6, + 16793: 0x8CF7, + 16794: 0x8CF8, + 16795: 0x8CF9, + 16796: 0x8CFA, + 16797: 0x8CFB, + 16798: 0x8CFC, + 16799: 0x8CFD, + 16800: 0x8CFE, + 16801: 0x8CFF, + 16802: 0x8D00, + 16803: 0x8D01, + 16804: 0x8D02, + 16805: 0x8D03, + 16806: 0x8D04, + 16807: 0x8D05, + 16808: 0x8D06, + 16809: 0x8D07, + 16810: 0x8D08, + 16811: 0x8D09, + 16812: 0x8D0A, + 16813: 0x8D0B, + 16814: 0x8D0C, + 16815: 0x8D0D, + 16816: 0x4F5F, + 16817: 0x4F57, + 16818: 0x4F32, + 16819: 0x4F3D, + 16820: 0x4F76, + 16821: 0x4F74, + 16822: 0x4F91, + 16823: 0x4F89, + 16824: 0x4F83, + 16825: 0x4F8F, + 16826: 0x4F7E, + 16827: 0x4F7B, + 16828: 0x4FAA, + 16829: 0x4F7C, + 16830: 0x4FAC, + 16831: 0x4F94, + 16832: 0x4FE6, + 16833: 0x4FE8, + 16834: 0x4FEA, + 16835: 0x4FC5, + 16836: 0x4FDA, + 16837: 0x4FE3, + 16838: 0x4FDC, + 16839: 0x4FD1, + 16840: 0x4FDF, + 16841: 0x4FF8, + 16842: 0x5029, + 16843: 0x504C, + 16844: 0x4FF3, + 16845: 0x502C, + 16846: 0x500F, + 16847: 0x502E, + 16848: 0x502D, + 16849: 0x4FFE, + 16850: 0x501C, + 16851: 0x500C, + 16852: 0x5025, + 16853: 0x5028, + 16854: 0x507E, + 16855: 0x5043, + 16856: 0x5055, + 16857: 0x5048, + 16858: 0x504E, + 16859: 0x506C, + 16860: 0x507B, + 16861: 0x50A5, + 16862: 0x50A7, + 16863: 0x50A9, + 16864: 0x50BA, + 16865: 0x50D6, + 16866: 0x5106, + 16867: 0x50ED, + 16868: 0x50EC, + 16869: 0x50E6, + 16870: 0x50EE, + 16871: 0x5107, + 16872: 0x510B, + 16873: 0x4EDD, + 16874: 0x6C3D, + 16875: 0x4F58, + 16876: 0x4F65, + 16877: 0x4FCE, + 16878: 0x9FA0, + 16879: 0x6C46, + 16880: 0x7C74, + 16881: 0x516E, + 16882: 0x5DFD, + 16883: 0x9EC9, + 16884: 0x9998, + 16885: 0x5181, + 16886: 0x5914, + 16887: 0x52F9, + 16888: 0x530D, + 16889: 0x8A07, + 16890: 0x5310, + 16891: 0x51EB, + 16892: 0x5919, + 16893: 0x5155, + 16894: 0x4EA0, + 16895: 0x5156, + 16896: 0x4EB3, + 16897: 0x886E, + 16898: 0x88A4, + 16899: 0x4EB5, + 16900: 0x8114, + 16901: 0x88D2, + 16902: 0x7980, + 16903: 0x5B34, + 16904: 0x8803, + 16905: 0x7FB8, + 16906: 0x51AB, + 16907: 0x51B1, + 16908: 0x51BD, + 16909: 0x51BC, + 16910: 0x8D0E, + 16911: 0x8D0F, + 16912: 0x8D10, + 16913: 0x8D11, + 16914: 0x8D12, + 16915: 0x8D13, + 16916: 0x8D14, + 16917: 0x8D15, + 16918: 0x8D16, + 16919: 0x8D17, + 16920: 0x8D18, + 16921: 0x8D19, + 16922: 0x8D1A, + 16923: 0x8D1B, + 16924: 0x8D1C, + 16925: 0x8D20, + 16926: 0x8D51, + 16927: 0x8D52, + 16928: 0x8D57, + 16929: 0x8D5F, + 16930: 0x8D65, + 16931: 0x8D68, + 16932: 0x8D69, + 16933: 0x8D6A, + 16934: 0x8D6C, + 16935: 0x8D6E, + 16936: 0x8D6F, + 16937: 0x8D71, + 16938: 0x8D72, + 16939: 0x8D78, + 16940: 0x8D79, + 16941: 0x8D7A, + 16942: 0x8D7B, + 16943: 0x8D7C, + 16944: 0x8D7D, + 16945: 0x8D7E, + 16946: 0x8D7F, + 16947: 0x8D80, + 16948: 0x8D82, + 16949: 0x8D83, + 16950: 0x8D86, + 16951: 0x8D87, + 16952: 0x8D88, + 16953: 0x8D89, + 16954: 0x8D8C, + 16955: 0x8D8D, + 16956: 0x8D8E, + 16957: 0x8D8F, + 16958: 0x8D90, + 16959: 0x8D92, + 16960: 0x8D93, + 16961: 0x8D95, + 16962: 0x8D96, + 16963: 0x8D97, + 16964: 0x8D98, + 16965: 0x8D99, + 16966: 0x8D9A, + 16967: 0x8D9B, + 16968: 0x8D9C, + 16969: 0x8D9D, + 16970: 0x8D9E, + 16971: 0x8DA0, + 16972: 0x8DA1, + 16973: 0x8DA2, + 16974: 0x8DA4, + 16975: 0x8DA5, + 16976: 0x8DA6, + 16977: 0x8DA7, + 16978: 0x8DA8, + 16979: 0x8DA9, + 16980: 0x8DAA, + 16981: 0x8DAB, + 16982: 0x8DAC, + 16983: 0x8DAD, + 16984: 0x8DAE, + 16985: 0x8DAF, + 16986: 0x8DB0, + 16987: 0x8DB2, + 16988: 0x8DB6, + 16989: 0x8DB7, + 16990: 0x8DB9, + 16991: 0x8DBB, + 16992: 0x8DBD, + 16993: 0x8DC0, + 16994: 0x8DC1, + 16995: 0x8DC2, + 16996: 0x8DC5, + 16997: 0x8DC7, + 16998: 0x8DC8, + 16999: 0x8DC9, + 17000: 0x8DCA, + 17001: 0x8DCD, + 17002: 0x8DD0, + 17003: 0x8DD2, + 17004: 0x8DD3, + 17005: 0x8DD4, + 17006: 0x51C7, + 17007: 0x5196, + 17008: 0x51A2, + 17009: 0x51A5, + 17010: 0x8BA0, + 17011: 0x8BA6, + 17012: 0x8BA7, + 17013: 0x8BAA, + 17014: 0x8BB4, + 17015: 0x8BB5, + 17016: 0x8BB7, + 17017: 0x8BC2, + 17018: 0x8BC3, + 17019: 0x8BCB, + 17020: 0x8BCF, + 17021: 0x8BCE, + 17022: 0x8BD2, + 17023: 0x8BD3, + 17024: 0x8BD4, + 17025: 0x8BD6, + 17026: 0x8BD8, + 17027: 0x8BD9, + 17028: 0x8BDC, + 17029: 0x8BDF, + 17030: 0x8BE0, + 17031: 0x8BE4, + 17032: 0x8BE8, + 17033: 0x8BE9, + 17034: 0x8BEE, + 17035: 0x8BF0, + 17036: 0x8BF3, + 17037: 0x8BF6, + 17038: 0x8BF9, + 17039: 0x8BFC, + 17040: 0x8BFF, + 17041: 0x8C00, + 17042: 0x8C02, + 17043: 0x8C04, + 17044: 0x8C07, + 17045: 0x8C0C, + 17046: 0x8C0F, + 17047: 0x8C11, + 17048: 0x8C12, + 17049: 0x8C14, + 17050: 0x8C15, + 17051: 0x8C16, + 17052: 0x8C19, + 17053: 0x8C1B, + 17054: 0x8C18, + 17055: 0x8C1D, + 17056: 0x8C1F, + 17057: 0x8C20, + 17058: 0x8C21, + 17059: 0x8C25, + 17060: 0x8C27, + 17061: 0x8C2A, + 17062: 0x8C2B, + 17063: 0x8C2E, + 17064: 0x8C2F, + 17065: 0x8C32, + 17066: 0x8C33, + 17067: 0x8C35, + 17068: 0x8C36, + 17069: 0x5369, + 17070: 0x537A, + 17071: 0x961D, + 17072: 0x9622, + 17073: 0x9621, + 17074: 0x9631, + 17075: 0x962A, + 17076: 0x963D, + 17077: 0x963C, + 17078: 0x9642, + 17079: 0x9649, + 17080: 0x9654, + 17081: 0x965F, + 17082: 0x9667, + 17083: 0x966C, + 17084: 0x9672, + 17085: 0x9674, + 17086: 0x9688, + 17087: 0x968D, + 17088: 0x9697, + 17089: 0x96B0, + 17090: 0x9097, + 17091: 0x909B, + 17092: 0x909D, + 17093: 0x9099, + 17094: 0x90AC, + 17095: 0x90A1, + 17096: 0x90B4, + 17097: 0x90B3, + 17098: 0x90B6, + 17099: 0x90BA, + 17100: 0x8DD5, + 17101: 0x8DD8, + 17102: 0x8DD9, + 17103: 0x8DDC, + 17104: 0x8DE0, + 17105: 0x8DE1, + 17106: 0x8DE2, + 17107: 0x8DE5, + 17108: 0x8DE6, + 17109: 0x8DE7, + 17110: 0x8DE9, + 17111: 0x8DED, + 17112: 0x8DEE, + 17113: 0x8DF0, + 17114: 0x8DF1, + 17115: 0x8DF2, + 17116: 0x8DF4, + 17117: 0x8DF6, + 17118: 0x8DFC, + 17119: 0x8DFE, + 17120: 0x8DFF, + 17121: 0x8E00, + 17122: 0x8E01, + 17123: 0x8E02, + 17124: 0x8E03, + 17125: 0x8E04, + 17126: 0x8E06, + 17127: 0x8E07, + 17128: 0x8E08, + 17129: 0x8E0B, + 17130: 0x8E0D, + 17131: 0x8E0E, + 17132: 0x8E10, + 17133: 0x8E11, + 17134: 0x8E12, + 17135: 0x8E13, + 17136: 0x8E15, + 17137: 0x8E16, + 17138: 0x8E17, + 17139: 0x8E18, + 17140: 0x8E19, + 17141: 0x8E1A, + 17142: 0x8E1B, + 17143: 0x8E1C, + 17144: 0x8E20, + 17145: 0x8E21, + 17146: 0x8E24, + 17147: 0x8E25, + 17148: 0x8E26, + 17149: 0x8E27, + 17150: 0x8E28, + 17151: 0x8E2B, + 17152: 0x8E2D, + 17153: 0x8E30, + 17154: 0x8E32, + 17155: 0x8E33, + 17156: 0x8E34, + 17157: 0x8E36, + 17158: 0x8E37, + 17159: 0x8E38, + 17160: 0x8E3B, + 17161: 0x8E3C, + 17162: 0x8E3E, + 17163: 0x8E3F, + 17164: 0x8E43, + 17165: 0x8E45, + 17166: 0x8E46, + 17167: 0x8E4C, + 17168: 0x8E4D, + 17169: 0x8E4E, + 17170: 0x8E4F, + 17171: 0x8E50, + 17172: 0x8E53, + 17173: 0x8E54, + 17174: 0x8E55, + 17175: 0x8E56, + 17176: 0x8E57, + 17177: 0x8E58, + 17178: 0x8E5A, + 17179: 0x8E5B, + 17180: 0x8E5C, + 17181: 0x8E5D, + 17182: 0x8E5E, + 17183: 0x8E5F, + 17184: 0x8E60, + 17185: 0x8E61, + 17186: 0x8E62, + 17187: 0x8E63, + 17188: 0x8E64, + 17189: 0x8E65, + 17190: 0x8E67, + 17191: 0x8E68, + 17192: 0x8E6A, + 17193: 0x8E6B, + 17194: 0x8E6E, + 17195: 0x8E71, + 17196: 0x90B8, + 17197: 0x90B0, + 17198: 0x90CF, + 17199: 0x90C5, + 17200: 0x90BE, + 17201: 0x90D0, + 17202: 0x90C4, + 17203: 0x90C7, + 17204: 0x90D3, + 17205: 0x90E6, + 17206: 0x90E2, + 17207: 0x90DC, + 17208: 0x90D7, + 17209: 0x90DB, + 17210: 0x90EB, + 17211: 0x90EF, + 17212: 0x90FE, + 17213: 0x9104, + 17214: 0x9122, + 17215: 0x911E, + 17216: 0x9123, + 17217: 0x9131, + 17218: 0x912F, + 17219: 0x9139, + 17220: 0x9143, + 17221: 0x9146, + 17222: 0x520D, + 17223: 0x5942, + 17224: 0x52A2, + 17225: 0x52AC, + 17226: 0x52AD, + 17227: 0x52BE, + 17228: 0x54FF, + 17229: 0x52D0, + 17230: 0x52D6, + 17231: 0x52F0, + 17232: 0x53DF, + 17233: 0x71EE, + 17234: 0x77CD, + 17235: 0x5EF4, + 17236: 0x51F5, + 17237: 0x51FC, + 17238: 0x9B2F, + 17239: 0x53B6, + 17240: 0x5F01, + 17241: 0x755A, + 17242: 0x5DEF, + 17243: 0x574C, + 17244: 0x57A9, + 17245: 0x57A1, + 17246: 0x587E, + 17247: 0x58BC, + 17248: 0x58C5, + 17249: 0x58D1, + 17250: 0x5729, + 17251: 0x572C, + 17252: 0x572A, + 17253: 0x5733, + 17254: 0x5739, + 17255: 0x572E, + 17256: 0x572F, + 17257: 0x575C, + 17258: 0x573B, + 17259: 0x5742, + 17260: 0x5769, + 17261: 0x5785, + 17262: 0x576B, + 17263: 0x5786, + 17264: 0x577C, + 17265: 0x577B, + 17266: 0x5768, + 17267: 0x576D, + 17268: 0x5776, + 17269: 0x5773, + 17270: 0x57AD, + 17271: 0x57A4, + 17272: 0x578C, + 17273: 0x57B2, + 17274: 0x57CF, + 17275: 0x57A7, + 17276: 0x57B4, + 17277: 0x5793, + 17278: 0x57A0, + 17279: 0x57D5, + 17280: 0x57D8, + 17281: 0x57DA, + 17282: 0x57D9, + 17283: 0x57D2, + 17284: 0x57B8, + 17285: 0x57F4, + 17286: 0x57EF, + 17287: 0x57F8, + 17288: 0x57E4, + 17289: 0x57DD, + 17290: 0x8E73, + 17291: 0x8E75, + 17292: 0x8E77, + 17293: 0x8E78, + 17294: 0x8E79, + 17295: 0x8E7A, + 17296: 0x8E7B, + 17297: 0x8E7D, + 17298: 0x8E7E, + 17299: 0x8E80, + 17300: 0x8E82, + 17301: 0x8E83, + 17302: 0x8E84, + 17303: 0x8E86, + 17304: 0x8E88, + 17305: 0x8E89, + 17306: 0x8E8A, + 17307: 0x8E8B, + 17308: 0x8E8C, + 17309: 0x8E8D, + 17310: 0x8E8E, + 17311: 0x8E91, + 17312: 0x8E92, + 17313: 0x8E93, + 17314: 0x8E95, + 17315: 0x8E96, + 17316: 0x8E97, + 17317: 0x8E98, + 17318: 0x8E99, + 17319: 0x8E9A, + 17320: 0x8E9B, + 17321: 0x8E9D, + 17322: 0x8E9F, + 17323: 0x8EA0, + 17324: 0x8EA1, + 17325: 0x8EA2, + 17326: 0x8EA3, + 17327: 0x8EA4, + 17328: 0x8EA5, + 17329: 0x8EA6, + 17330: 0x8EA7, + 17331: 0x8EA8, + 17332: 0x8EA9, + 17333: 0x8EAA, + 17334: 0x8EAD, + 17335: 0x8EAE, + 17336: 0x8EB0, + 17337: 0x8EB1, + 17338: 0x8EB3, + 17339: 0x8EB4, + 17340: 0x8EB5, + 17341: 0x8EB6, + 17342: 0x8EB7, + 17343: 0x8EB8, + 17344: 0x8EB9, + 17345: 0x8EBB, + 17346: 0x8EBC, + 17347: 0x8EBD, + 17348: 0x8EBE, + 17349: 0x8EBF, + 17350: 0x8EC0, + 17351: 0x8EC1, + 17352: 0x8EC2, + 17353: 0x8EC3, + 17354: 0x8EC4, + 17355: 0x8EC5, + 17356: 0x8EC6, + 17357: 0x8EC7, + 17358: 0x8EC8, + 17359: 0x8EC9, + 17360: 0x8ECA, + 17361: 0x8ECB, + 17362: 0x8ECC, + 17363: 0x8ECD, + 17364: 0x8ECF, + 17365: 0x8ED0, + 17366: 0x8ED1, + 17367: 0x8ED2, + 17368: 0x8ED3, + 17369: 0x8ED4, + 17370: 0x8ED5, + 17371: 0x8ED6, + 17372: 0x8ED7, + 17373: 0x8ED8, + 17374: 0x8ED9, + 17375: 0x8EDA, + 17376: 0x8EDB, + 17377: 0x8EDC, + 17378: 0x8EDD, + 17379: 0x8EDE, + 17380: 0x8EDF, + 17381: 0x8EE0, + 17382: 0x8EE1, + 17383: 0x8EE2, + 17384: 0x8EE3, + 17385: 0x8EE4, + 17386: 0x580B, + 17387: 0x580D, + 17388: 0x57FD, + 17389: 0x57ED, + 17390: 0x5800, + 17391: 0x581E, + 17392: 0x5819, + 17393: 0x5844, + 17394: 0x5820, + 17395: 0x5865, + 17396: 0x586C, + 17397: 0x5881, + 17398: 0x5889, + 17399: 0x589A, + 17400: 0x5880, + 17401: 0x99A8, + 17402: 0x9F19, + 17403: 0x61FF, + 17404: 0x8279, + 17405: 0x827D, + 17406: 0x827F, + 17407: 0x828F, + 17408: 0x828A, + 17409: 0x82A8, + 17410: 0x8284, + 17411: 0x828E, + 17412: 0x8291, + 17413: 0x8297, + 17414: 0x8299, + 17415: 0x82AB, + 17416: 0x82B8, + 17417: 0x82BE, + 17418: 0x82B0, + 17419: 0x82C8, + 17420: 0x82CA, + 17421: 0x82E3, + 17422: 0x8298, + 17423: 0x82B7, + 17424: 0x82AE, + 17425: 0x82CB, + 17426: 0x82CC, + 17427: 0x82C1, + 17428: 0x82A9, + 17429: 0x82B4, + 17430: 0x82A1, + 17431: 0x82AA, + 17432: 0x829F, + 17433: 0x82C4, + 17434: 0x82CE, + 17435: 0x82A4, + 17436: 0x82E1, + 17437: 0x8309, + 17438: 0x82F7, + 17439: 0x82E4, + 17440: 0x830F, + 17441: 0x8307, + 17442: 0x82DC, + 17443: 0x82F4, + 17444: 0x82D2, + 17445: 0x82D8, + 17446: 0x830C, + 17447: 0x82FB, + 17448: 0x82D3, + 17449: 0x8311, + 17450: 0x831A, + 17451: 0x8306, + 17452: 0x8314, + 17453: 0x8315, + 17454: 0x82E0, + 17455: 0x82D5, + 17456: 0x831C, + 17457: 0x8351, + 17458: 0x835B, + 17459: 0x835C, + 17460: 0x8308, + 17461: 0x8392, + 17462: 0x833C, + 17463: 0x8334, + 17464: 0x8331, + 17465: 0x839B, + 17466: 0x835E, + 17467: 0x832F, + 17468: 0x834F, + 17469: 0x8347, + 17470: 0x8343, + 17471: 0x835F, + 17472: 0x8340, + 17473: 0x8317, + 17474: 0x8360, + 17475: 0x832D, + 17476: 0x833A, + 17477: 0x8333, + 17478: 0x8366, + 17479: 0x8365, + 17480: 0x8EE5, + 17481: 0x8EE6, + 17482: 0x8EE7, + 17483: 0x8EE8, + 17484: 0x8EE9, + 17485: 0x8EEA, + 17486: 0x8EEB, + 17487: 0x8EEC, + 17488: 0x8EED, + 17489: 0x8EEE, + 17490: 0x8EEF, + 17491: 0x8EF0, + 17492: 0x8EF1, + 17493: 0x8EF2, + 17494: 0x8EF3, + 17495: 0x8EF4, + 17496: 0x8EF5, + 17497: 0x8EF6, + 17498: 0x8EF7, + 17499: 0x8EF8, + 17500: 0x8EF9, + 17501: 0x8EFA, + 17502: 0x8EFB, + 17503: 0x8EFC, + 17504: 0x8EFD, + 17505: 0x8EFE, + 17506: 0x8EFF, + 17507: 0x8F00, + 17508: 0x8F01, + 17509: 0x8F02, + 17510: 0x8F03, + 17511: 0x8F04, + 17512: 0x8F05, + 17513: 0x8F06, + 17514: 0x8F07, + 17515: 0x8F08, + 17516: 0x8F09, + 17517: 0x8F0A, + 17518: 0x8F0B, + 17519: 0x8F0C, + 17520: 0x8F0D, + 17521: 0x8F0E, + 17522: 0x8F0F, + 17523: 0x8F10, + 17524: 0x8F11, + 17525: 0x8F12, + 17526: 0x8F13, + 17527: 0x8F14, + 17528: 0x8F15, + 17529: 0x8F16, + 17530: 0x8F17, + 17531: 0x8F18, + 17532: 0x8F19, + 17533: 0x8F1A, + 17534: 0x8F1B, + 17535: 0x8F1C, + 17536: 0x8F1D, + 17537: 0x8F1E, + 17538: 0x8F1F, + 17539: 0x8F20, + 17540: 0x8F21, + 17541: 0x8F22, + 17542: 0x8F23, + 17543: 0x8F24, + 17544: 0x8F25, + 17545: 0x8F26, + 17546: 0x8F27, + 17547: 0x8F28, + 17548: 0x8F29, + 17549: 0x8F2A, + 17550: 0x8F2B, + 17551: 0x8F2C, + 17552: 0x8F2D, + 17553: 0x8F2E, + 17554: 0x8F2F, + 17555: 0x8F30, + 17556: 0x8F31, + 17557: 0x8F32, + 17558: 0x8F33, + 17559: 0x8F34, + 17560: 0x8F35, + 17561: 0x8F36, + 17562: 0x8F37, + 17563: 0x8F38, + 17564: 0x8F39, + 17565: 0x8F3A, + 17566: 0x8F3B, + 17567: 0x8F3C, + 17568: 0x8F3D, + 17569: 0x8F3E, + 17570: 0x8F3F, + 17571: 0x8F40, + 17572: 0x8F41, + 17573: 0x8F42, + 17574: 0x8F43, + 17575: 0x8F44, + 17576: 0x8368, + 17577: 0x831B, + 17578: 0x8369, + 17579: 0x836C, + 17580: 0x836A, + 17581: 0x836D, + 17582: 0x836E, + 17583: 0x83B0, + 17584: 0x8378, + 17585: 0x83B3, + 17586: 0x83B4, + 17587: 0x83A0, + 17588: 0x83AA, + 17589: 0x8393, + 17590: 0x839C, + 17591: 0x8385, + 17592: 0x837C, + 17593: 0x83B6, + 17594: 0x83A9, + 17595: 0x837D, + 17596: 0x83B8, + 17597: 0x837B, + 17598: 0x8398, + 17599: 0x839E, + 17600: 0x83A8, + 17601: 0x83BA, + 17602: 0x83BC, + 17603: 0x83C1, + 17604: 0x8401, + 17605: 0x83E5, + 17606: 0x83D8, + 17607: 0x5807, + 17608: 0x8418, + 17609: 0x840B, + 17610: 0x83DD, + 17611: 0x83FD, + 17612: 0x83D6, + 17613: 0x841C, + 17614: 0x8438, + 17615: 0x8411, + 17616: 0x8406, + 17617: 0x83D4, + 17618: 0x83DF, + 17619: 0x840F, + 17620: 0x8403, + 17621: 0x83F8, + 17622: 0x83F9, + 17623: 0x83EA, + 17624: 0x83C5, + 17625: 0x83C0, + 17626: 0x8426, + 17627: 0x83F0, + 17628: 0x83E1, + 17629: 0x845C, + 17630: 0x8451, + 17631: 0x845A, + 17632: 0x8459, + 17633: 0x8473, + 17634: 0x8487, + 17635: 0x8488, + 17636: 0x847A, + 17637: 0x8489, + 17638: 0x8478, + 17639: 0x843C, + 17640: 0x8446, + 17641: 0x8469, + 17642: 0x8476, + 17643: 0x848C, + 17644: 0x848E, + 17645: 0x8431, + 17646: 0x846D, + 17647: 0x84C1, + 17648: 0x84CD, + 17649: 0x84D0, + 17650: 0x84E6, + 17651: 0x84BD, + 17652: 0x84D3, + 17653: 0x84CA, + 17654: 0x84BF, + 17655: 0x84BA, + 17656: 0x84E0, + 17657: 0x84A1, + 17658: 0x84B9, + 17659: 0x84B4, + 17660: 0x8497, + 17661: 0x84E5, + 17662: 0x84E3, + 17663: 0x850C, + 17664: 0x750D, + 17665: 0x8538, + 17666: 0x84F0, + 17667: 0x8539, + 17668: 0x851F, + 17669: 0x853A, + 17670: 0x8F45, + 17671: 0x8F46, + 17672: 0x8F47, + 17673: 0x8F48, + 17674: 0x8F49, + 17675: 0x8F4A, + 17676: 0x8F4B, + 17677: 0x8F4C, + 17678: 0x8F4D, + 17679: 0x8F4E, + 17680: 0x8F4F, + 17681: 0x8F50, + 17682: 0x8F51, + 17683: 0x8F52, + 17684: 0x8F53, + 17685: 0x8F54, + 17686: 0x8F55, + 17687: 0x8F56, + 17688: 0x8F57, + 17689: 0x8F58, + 17690: 0x8F59, + 17691: 0x8F5A, + 17692: 0x8F5B, + 17693: 0x8F5C, + 17694: 0x8F5D, + 17695: 0x8F5E, + 17696: 0x8F5F, + 17697: 0x8F60, + 17698: 0x8F61, + 17699: 0x8F62, + 17700: 0x8F63, + 17701: 0x8F64, + 17702: 0x8F65, + 17703: 0x8F6A, + 17704: 0x8F80, + 17705: 0x8F8C, + 17706: 0x8F92, + 17707: 0x8F9D, + 17708: 0x8FA0, + 17709: 0x8FA1, + 17710: 0x8FA2, + 17711: 0x8FA4, + 17712: 0x8FA5, + 17713: 0x8FA6, + 17714: 0x8FA7, + 17715: 0x8FAA, + 17716: 0x8FAC, + 17717: 0x8FAD, + 17718: 0x8FAE, + 17719: 0x8FAF, + 17720: 0x8FB2, + 17721: 0x8FB3, + 17722: 0x8FB4, + 17723: 0x8FB5, + 17724: 0x8FB7, + 17725: 0x8FB8, + 17726: 0x8FBA, + 17727: 0x8FBB, + 17728: 0x8FBC, + 17729: 0x8FBF, + 17730: 0x8FC0, + 17731: 0x8FC3, + 17732: 0x8FC6, + 17733: 0x8FC9, + 17734: 0x8FCA, + 17735: 0x8FCB, + 17736: 0x8FCC, + 17737: 0x8FCD, + 17738: 0x8FCF, + 17739: 0x8FD2, + 17740: 0x8FD6, + 17741: 0x8FD7, + 17742: 0x8FDA, + 17743: 0x8FE0, + 17744: 0x8FE1, + 17745: 0x8FE3, + 17746: 0x8FE7, + 17747: 0x8FEC, + 17748: 0x8FEF, + 17749: 0x8FF1, + 17750: 0x8FF2, + 17751: 0x8FF4, + 17752: 0x8FF5, + 17753: 0x8FF6, + 17754: 0x8FFA, + 17755: 0x8FFB, + 17756: 0x8FFC, + 17757: 0x8FFE, + 17758: 0x8FFF, + 17759: 0x9007, + 17760: 0x9008, + 17761: 0x900C, + 17762: 0x900E, + 17763: 0x9013, + 17764: 0x9015, + 17765: 0x9018, + 17766: 0x8556, + 17767: 0x853B, + 17768: 0x84FF, + 17769: 0x84FC, + 17770: 0x8559, + 17771: 0x8548, + 17772: 0x8568, + 17773: 0x8564, + 17774: 0x855E, + 17775: 0x857A, + 17776: 0x77A2, + 17777: 0x8543, + 17778: 0x8572, + 17779: 0x857B, + 17780: 0x85A4, + 17781: 0x85A8, + 17782: 0x8587, + 17783: 0x858F, + 17784: 0x8579, + 17785: 0x85AE, + 17786: 0x859C, + 17787: 0x8585, + 17788: 0x85B9, + 17789: 0x85B7, + 17790: 0x85B0, + 17791: 0x85D3, + 17792: 0x85C1, + 17793: 0x85DC, + 17794: 0x85FF, + 17795: 0x8627, + 17796: 0x8605, + 17797: 0x8629, + 17798: 0x8616, + 17799: 0x863C, + 17800: 0x5EFE, + 17801: 0x5F08, + 17802: 0x593C, + 17803: 0x5941, + 17804: 0x8037, + 17805: 0x5955, + 17806: 0x595A, + 17807: 0x5958, + 17808: 0x530F, + 17809: 0x5C22, + 17810: 0x5C25, + 17811: 0x5C2C, + 17812: 0x5C34, + 17813: 0x624C, + 17814: 0x626A, + 17815: 0x629F, + 17816: 0x62BB, + 17817: 0x62CA, + 17818: 0x62DA, + 17819: 0x62D7, + 17820: 0x62EE, + 17821: 0x6322, + 17822: 0x62F6, + 17823: 0x6339, + 17824: 0x634B, + 17825: 0x6343, + 17826: 0x63AD, + 17827: 0x63F6, + 17828: 0x6371, + 17829: 0x637A, + 17830: 0x638E, + 17831: 0x63B4, + 17832: 0x636D, + 17833: 0x63AC, + 17834: 0x638A, + 17835: 0x6369, + 17836: 0x63AE, + 17837: 0x63BC, + 17838: 0x63F2, + 17839: 0x63F8, + 17840: 0x63E0, + 17841: 0x63FF, + 17842: 0x63C4, + 17843: 0x63DE, + 17844: 0x63CE, + 17845: 0x6452, + 17846: 0x63C6, + 17847: 0x63BE, + 17848: 0x6445, + 17849: 0x6441, + 17850: 0x640B, + 17851: 0x641B, + 17852: 0x6420, + 17853: 0x640C, + 17854: 0x6426, + 17855: 0x6421, + 17856: 0x645E, + 17857: 0x6484, + 17858: 0x646D, + 17859: 0x6496, + 17860: 0x9019, + 17861: 0x901C, + 17862: 0x9023, + 17863: 0x9024, + 17864: 0x9025, + 17865: 0x9027, + 17866: 0x9028, + 17867: 0x9029, + 17868: 0x902A, + 17869: 0x902B, + 17870: 0x902C, + 17871: 0x9030, + 17872: 0x9031, + 17873: 0x9032, + 17874: 0x9033, + 17875: 0x9034, + 17876: 0x9037, + 17877: 0x9039, + 17878: 0x903A, + 17879: 0x903D, + 17880: 0x903F, + 17881: 0x9040, + 17882: 0x9043, + 17883: 0x9045, + 17884: 0x9046, + 17885: 0x9048, + 17886: 0x9049, + 17887: 0x904A, + 17888: 0x904B, + 17889: 0x904C, + 17890: 0x904E, + 17891: 0x9054, + 17892: 0x9055, + 17893: 0x9056, + 17894: 0x9059, + 17895: 0x905A, + 17896: 0x905C, + 17897: 0x905D, + 17898: 0x905E, + 17899: 0x905F, + 17900: 0x9060, + 17901: 0x9061, + 17902: 0x9064, + 17903: 0x9066, + 17904: 0x9067, + 17905: 0x9069, + 17906: 0x906A, + 17907: 0x906B, + 17908: 0x906C, + 17909: 0x906F, + 17910: 0x9070, + 17911: 0x9071, + 17912: 0x9072, + 17913: 0x9073, + 17914: 0x9076, + 17915: 0x9077, + 17916: 0x9078, + 17917: 0x9079, + 17918: 0x907A, + 17919: 0x907B, + 17920: 0x907C, + 17921: 0x907E, + 17922: 0x9081, + 17923: 0x9084, + 17924: 0x9085, + 17925: 0x9086, + 17926: 0x9087, + 17927: 0x9089, + 17928: 0x908A, + 17929: 0x908C, + 17930: 0x908D, + 17931: 0x908E, + 17932: 0x908F, + 17933: 0x9090, + 17934: 0x9092, + 17935: 0x9094, + 17936: 0x9096, + 17937: 0x9098, + 17938: 0x909A, + 17939: 0x909C, + 17940: 0x909E, + 17941: 0x909F, + 17942: 0x90A0, + 17943: 0x90A4, + 17944: 0x90A5, + 17945: 0x90A7, + 17946: 0x90A8, + 17947: 0x90A9, + 17948: 0x90AB, + 17949: 0x90AD, + 17950: 0x90B2, + 17951: 0x90B7, + 17952: 0x90BC, + 17953: 0x90BD, + 17954: 0x90BF, + 17955: 0x90C0, + 17956: 0x647A, + 17957: 0x64B7, + 17958: 0x64B8, + 17959: 0x6499, + 17960: 0x64BA, + 17961: 0x64C0, + 17962: 0x64D0, + 17963: 0x64D7, + 17964: 0x64E4, + 17965: 0x64E2, + 17966: 0x6509, + 17967: 0x6525, + 17968: 0x652E, + 17969: 0x5F0B, + 17970: 0x5FD2, + 17971: 0x7519, + 17972: 0x5F11, + 17973: 0x535F, + 17974: 0x53F1, + 17975: 0x53FD, + 17976: 0x53E9, + 17977: 0x53E8, + 17978: 0x53FB, + 17979: 0x5412, + 17980: 0x5416, + 17981: 0x5406, + 17982: 0x544B, + 17983: 0x5452, + 17984: 0x5453, + 17985: 0x5454, + 17986: 0x5456, + 17987: 0x5443, + 17988: 0x5421, + 17989: 0x5457, + 17990: 0x5459, + 17991: 0x5423, + 17992: 0x5432, + 17993: 0x5482, + 17994: 0x5494, + 17995: 0x5477, + 17996: 0x5471, + 17997: 0x5464, + 17998: 0x549A, + 17999: 0x549B, + 18000: 0x5484, + 18001: 0x5476, + 18002: 0x5466, + 18003: 0x549D, + 18004: 0x54D0, + 18005: 0x54AD, + 18006: 0x54C2, + 18007: 0x54B4, + 18008: 0x54D2, + 18009: 0x54A7, + 18010: 0x54A6, + 18011: 0x54D3, + 18012: 0x54D4, + 18013: 0x5472, + 18014: 0x54A3, + 18015: 0x54D5, + 18016: 0x54BB, + 18017: 0x54BF, + 18018: 0x54CC, + 18019: 0x54D9, + 18020: 0x54DA, + 18021: 0x54DC, + 18022: 0x54A9, + 18023: 0x54AA, + 18024: 0x54A4, + 18025: 0x54DD, + 18026: 0x54CF, + 18027: 0x54DE, + 18028: 0x551B, + 18029: 0x54E7, + 18030: 0x5520, + 18031: 0x54FD, + 18032: 0x5514, + 18033: 0x54F3, + 18034: 0x5522, + 18035: 0x5523, + 18036: 0x550F, + 18037: 0x5511, + 18038: 0x5527, + 18039: 0x552A, + 18040: 0x5567, + 18041: 0x558F, + 18042: 0x55B5, + 18043: 0x5549, + 18044: 0x556D, + 18045: 0x5541, + 18046: 0x5555, + 18047: 0x553F, + 18048: 0x5550, + 18049: 0x553C, + 18050: 0x90C2, + 18051: 0x90C3, + 18052: 0x90C6, + 18053: 0x90C8, + 18054: 0x90C9, + 18055: 0x90CB, + 18056: 0x90CC, + 18057: 0x90CD, + 18058: 0x90D2, + 18059: 0x90D4, + 18060: 0x90D5, + 18061: 0x90D6, + 18062: 0x90D8, + 18063: 0x90D9, + 18064: 0x90DA, + 18065: 0x90DE, + 18066: 0x90DF, + 18067: 0x90E0, + 18068: 0x90E3, + 18069: 0x90E4, + 18070: 0x90E5, + 18071: 0x90E9, + 18072: 0x90EA, + 18073: 0x90EC, + 18074: 0x90EE, + 18075: 0x90F0, + 18076: 0x90F1, + 18077: 0x90F2, + 18078: 0x90F3, + 18079: 0x90F5, + 18080: 0x90F6, + 18081: 0x90F7, + 18082: 0x90F9, + 18083: 0x90FA, + 18084: 0x90FB, + 18085: 0x90FC, + 18086: 0x90FF, + 18087: 0x9100, + 18088: 0x9101, + 18089: 0x9103, + 18090: 0x9105, + 18091: 0x9106, + 18092: 0x9107, + 18093: 0x9108, + 18094: 0x9109, + 18095: 0x910A, + 18096: 0x910B, + 18097: 0x910C, + 18098: 0x910D, + 18099: 0x910E, + 18100: 0x910F, + 18101: 0x9110, + 18102: 0x9111, + 18103: 0x9112, + 18104: 0x9113, + 18105: 0x9114, + 18106: 0x9115, + 18107: 0x9116, + 18108: 0x9117, + 18109: 0x9118, + 18110: 0x911A, + 18111: 0x911B, + 18112: 0x911C, + 18113: 0x911D, + 18114: 0x911F, + 18115: 0x9120, + 18116: 0x9121, + 18117: 0x9124, + 18118: 0x9125, + 18119: 0x9126, + 18120: 0x9127, + 18121: 0x9128, + 18122: 0x9129, + 18123: 0x912A, + 18124: 0x912B, + 18125: 0x912C, + 18126: 0x912D, + 18127: 0x912E, + 18128: 0x9130, + 18129: 0x9132, + 18130: 0x9133, + 18131: 0x9134, + 18132: 0x9135, + 18133: 0x9136, + 18134: 0x9137, + 18135: 0x9138, + 18136: 0x913A, + 18137: 0x913B, + 18138: 0x913C, + 18139: 0x913D, + 18140: 0x913E, + 18141: 0x913F, + 18142: 0x9140, + 18143: 0x9141, + 18144: 0x9142, + 18145: 0x9144, + 18146: 0x5537, + 18147: 0x5556, + 18148: 0x5575, + 18149: 0x5576, + 18150: 0x5577, + 18151: 0x5533, + 18152: 0x5530, + 18153: 0x555C, + 18154: 0x558B, + 18155: 0x55D2, + 18156: 0x5583, + 18157: 0x55B1, + 18158: 0x55B9, + 18159: 0x5588, + 18160: 0x5581, + 18161: 0x559F, + 18162: 0x557E, + 18163: 0x55D6, + 18164: 0x5591, + 18165: 0x557B, + 18166: 0x55DF, + 18167: 0x55BD, + 18168: 0x55BE, + 18169: 0x5594, + 18170: 0x5599, + 18171: 0x55EA, + 18172: 0x55F7, + 18173: 0x55C9, + 18174: 0x561F, + 18175: 0x55D1, + 18176: 0x55EB, + 18177: 0x55EC, + 18178: 0x55D4, + 18179: 0x55E6, + 18180: 0x55DD, + 18181: 0x55C4, + 18182: 0x55EF, + 18183: 0x55E5, + 18184: 0x55F2, + 18185: 0x55F3, + 18186: 0x55CC, + 18187: 0x55CD, + 18188: 0x55E8, + 18189: 0x55F5, + 18190: 0x55E4, + 18191: 0x8F94, + 18192: 0x561E, + 18193: 0x5608, + 18194: 0x560C, + 18195: 0x5601, + 18196: 0x5624, + 18197: 0x5623, + 18198: 0x55FE, + 18199: 0x5600, + 18200: 0x5627, + 18201: 0x562D, + 18202: 0x5658, + 18203: 0x5639, + 18204: 0x5657, + 18205: 0x562C, + 18206: 0x564D, + 18207: 0x5662, + 18208: 0x5659, + 18209: 0x565C, + 18210: 0x564C, + 18211: 0x5654, + 18212: 0x5686, + 18213: 0x5664, + 18214: 0x5671, + 18215: 0x566B, + 18216: 0x567B, + 18217: 0x567C, + 18218: 0x5685, + 18219: 0x5693, + 18220: 0x56AF, + 18221: 0x56D4, + 18222: 0x56D7, + 18223: 0x56DD, + 18224: 0x56E1, + 18225: 0x56F5, + 18226: 0x56EB, + 18227: 0x56F9, + 18228: 0x56FF, + 18229: 0x5704, + 18230: 0x570A, + 18231: 0x5709, + 18232: 0x571C, + 18233: 0x5E0F, + 18234: 0x5E19, + 18235: 0x5E14, + 18236: 0x5E11, + 18237: 0x5E31, + 18238: 0x5E3B, + 18239: 0x5E3C, + 18240: 0x9145, + 18241: 0x9147, + 18242: 0x9148, + 18243: 0x9151, + 18244: 0x9153, + 18245: 0x9154, + 18246: 0x9155, + 18247: 0x9156, + 18248: 0x9158, + 18249: 0x9159, + 18250: 0x915B, + 18251: 0x915C, + 18252: 0x915F, + 18253: 0x9160, + 18254: 0x9166, + 18255: 0x9167, + 18256: 0x9168, + 18257: 0x916B, + 18258: 0x916D, + 18259: 0x9173, + 18260: 0x917A, + 18261: 0x917B, + 18262: 0x917C, + 18263: 0x9180, + 18264: 0x9181, + 18265: 0x9182, + 18266: 0x9183, + 18267: 0x9184, + 18268: 0x9186, + 18269: 0x9188, + 18270: 0x918A, + 18271: 0x918E, + 18272: 0x918F, + 18273: 0x9193, + 18274: 0x9194, + 18275: 0x9195, + 18276: 0x9196, + 18277: 0x9197, + 18278: 0x9198, + 18279: 0x9199, + 18280: 0x919C, + 18281: 0x919D, + 18282: 0x919E, + 18283: 0x919F, + 18284: 0x91A0, + 18285: 0x91A1, + 18286: 0x91A4, + 18287: 0x91A5, + 18288: 0x91A6, + 18289: 0x91A7, + 18290: 0x91A8, + 18291: 0x91A9, + 18292: 0x91AB, + 18293: 0x91AC, + 18294: 0x91B0, + 18295: 0x91B1, + 18296: 0x91B2, + 18297: 0x91B3, + 18298: 0x91B6, + 18299: 0x91B7, + 18300: 0x91B8, + 18301: 0x91B9, + 18302: 0x91BB, + 18303: 0x91BC, + 18304: 0x91BD, + 18305: 0x91BE, + 18306: 0x91BF, + 18307: 0x91C0, + 18308: 0x91C1, + 18309: 0x91C2, + 18310: 0x91C3, + 18311: 0x91C4, + 18312: 0x91C5, + 18313: 0x91C6, + 18314: 0x91C8, + 18315: 0x91CB, + 18316: 0x91D0, + 18317: 0x91D2, + 18318: 0x91D3, + 18319: 0x91D4, + 18320: 0x91D5, + 18321: 0x91D6, + 18322: 0x91D7, + 18323: 0x91D8, + 18324: 0x91D9, + 18325: 0x91DA, + 18326: 0x91DB, + 18327: 0x91DD, + 18328: 0x91DE, + 18329: 0x91DF, + 18330: 0x91E0, + 18331: 0x91E1, + 18332: 0x91E2, + 18333: 0x91E3, + 18334: 0x91E4, + 18335: 0x91E5, + 18336: 0x5E37, + 18337: 0x5E44, + 18338: 0x5E54, + 18339: 0x5E5B, + 18340: 0x5E5E, + 18341: 0x5E61, + 18342: 0x5C8C, + 18343: 0x5C7A, + 18344: 0x5C8D, + 18345: 0x5C90, + 18346: 0x5C96, + 18347: 0x5C88, + 18348: 0x5C98, + 18349: 0x5C99, + 18350: 0x5C91, + 18351: 0x5C9A, + 18352: 0x5C9C, + 18353: 0x5CB5, + 18354: 0x5CA2, + 18355: 0x5CBD, + 18356: 0x5CAC, + 18357: 0x5CAB, + 18358: 0x5CB1, + 18359: 0x5CA3, + 18360: 0x5CC1, + 18361: 0x5CB7, + 18362: 0x5CC4, + 18363: 0x5CD2, + 18364: 0x5CE4, + 18365: 0x5CCB, + 18366: 0x5CE5, + 18367: 0x5D02, + 18368: 0x5D03, + 18369: 0x5D27, + 18370: 0x5D26, + 18371: 0x5D2E, + 18372: 0x5D24, + 18373: 0x5D1E, + 18374: 0x5D06, + 18375: 0x5D1B, + 18376: 0x5D58, + 18377: 0x5D3E, + 18378: 0x5D34, + 18379: 0x5D3D, + 18380: 0x5D6C, + 18381: 0x5D5B, + 18382: 0x5D6F, + 18383: 0x5D5D, + 18384: 0x5D6B, + 18385: 0x5D4B, + 18386: 0x5D4A, + 18387: 0x5D69, + 18388: 0x5D74, + 18389: 0x5D82, + 18390: 0x5D99, + 18391: 0x5D9D, + 18392: 0x8C73, + 18393: 0x5DB7, + 18394: 0x5DC5, + 18395: 0x5F73, + 18396: 0x5F77, + 18397: 0x5F82, + 18398: 0x5F87, + 18399: 0x5F89, + 18400: 0x5F8C, + 18401: 0x5F95, + 18402: 0x5F99, + 18403: 0x5F9C, + 18404: 0x5FA8, + 18405: 0x5FAD, + 18406: 0x5FB5, + 18407: 0x5FBC, + 18408: 0x8862, + 18409: 0x5F61, + 18410: 0x72AD, + 18411: 0x72B0, + 18412: 0x72B4, + 18413: 0x72B7, + 18414: 0x72B8, + 18415: 0x72C3, + 18416: 0x72C1, + 18417: 0x72CE, + 18418: 0x72CD, + 18419: 0x72D2, + 18420: 0x72E8, + 18421: 0x72EF, + 18422: 0x72E9, + 18423: 0x72F2, + 18424: 0x72F4, + 18425: 0x72F7, + 18426: 0x7301, + 18427: 0x72F3, + 18428: 0x7303, + 18429: 0x72FA, + 18430: 0x91E6, + 18431: 0x91E7, + 18432: 0x91E8, + 18433: 0x91E9, + 18434: 0x91EA, + 18435: 0x91EB, + 18436: 0x91EC, + 18437: 0x91ED, + 18438: 0x91EE, + 18439: 0x91EF, + 18440: 0x91F0, + 18441: 0x91F1, + 18442: 0x91F2, + 18443: 0x91F3, + 18444: 0x91F4, + 18445: 0x91F5, + 18446: 0x91F6, + 18447: 0x91F7, + 18448: 0x91F8, + 18449: 0x91F9, + 18450: 0x91FA, + 18451: 0x91FB, + 18452: 0x91FC, + 18453: 0x91FD, + 18454: 0x91FE, + 18455: 0x91FF, + 18456: 0x9200, + 18457: 0x9201, + 18458: 0x9202, + 18459: 0x9203, + 18460: 0x9204, + 18461: 0x9205, + 18462: 0x9206, + 18463: 0x9207, + 18464: 0x9208, + 18465: 0x9209, + 18466: 0x920A, + 18467: 0x920B, + 18468: 0x920C, + 18469: 0x920D, + 18470: 0x920E, + 18471: 0x920F, + 18472: 0x9210, + 18473: 0x9211, + 18474: 0x9212, + 18475: 0x9213, + 18476: 0x9214, + 18477: 0x9215, + 18478: 0x9216, + 18479: 0x9217, + 18480: 0x9218, + 18481: 0x9219, + 18482: 0x921A, + 18483: 0x921B, + 18484: 0x921C, + 18485: 0x921D, + 18486: 0x921E, + 18487: 0x921F, + 18488: 0x9220, + 18489: 0x9221, + 18490: 0x9222, + 18491: 0x9223, + 18492: 0x9224, + 18493: 0x9225, + 18494: 0x9226, + 18495: 0x9227, + 18496: 0x9228, + 18497: 0x9229, + 18498: 0x922A, + 18499: 0x922B, + 18500: 0x922C, + 18501: 0x922D, + 18502: 0x922E, + 18503: 0x922F, + 18504: 0x9230, + 18505: 0x9231, + 18506: 0x9232, + 18507: 0x9233, + 18508: 0x9234, + 18509: 0x9235, + 18510: 0x9236, + 18511: 0x9237, + 18512: 0x9238, + 18513: 0x9239, + 18514: 0x923A, + 18515: 0x923B, + 18516: 0x923C, + 18517: 0x923D, + 18518: 0x923E, + 18519: 0x923F, + 18520: 0x9240, + 18521: 0x9241, + 18522: 0x9242, + 18523: 0x9243, + 18524: 0x9244, + 18525: 0x9245, + 18526: 0x72FB, + 18527: 0x7317, + 18528: 0x7313, + 18529: 0x7321, + 18530: 0x730A, + 18531: 0x731E, + 18532: 0x731D, + 18533: 0x7315, + 18534: 0x7322, + 18535: 0x7339, + 18536: 0x7325, + 18537: 0x732C, + 18538: 0x7338, + 18539: 0x7331, + 18540: 0x7350, + 18541: 0x734D, + 18542: 0x7357, + 18543: 0x7360, + 18544: 0x736C, + 18545: 0x736F, + 18546: 0x737E, + 18547: 0x821B, + 18548: 0x5925, + 18549: 0x98E7, + 18550: 0x5924, + 18551: 0x5902, + 18552: 0x9963, + 18553: 0x9967, + 18554: 0x9968, + 18555: 0x9969, + 18556: 0x996A, + 18557: 0x996B, + 18558: 0x996C, + 18559: 0x9974, + 18560: 0x9977, + 18561: 0x997D, + 18562: 0x9980, + 18563: 0x9984, + 18564: 0x9987, + 18565: 0x998A, + 18566: 0x998D, + 18567: 0x9990, + 18568: 0x9991, + 18569: 0x9993, + 18570: 0x9994, + 18571: 0x9995, + 18572: 0x5E80, + 18573: 0x5E91, + 18574: 0x5E8B, + 18575: 0x5E96, + 18576: 0x5EA5, + 18577: 0x5EA0, + 18578: 0x5EB9, + 18579: 0x5EB5, + 18580: 0x5EBE, + 18581: 0x5EB3, + 18582: 0x8D53, + 18583: 0x5ED2, + 18584: 0x5ED1, + 18585: 0x5EDB, + 18586: 0x5EE8, + 18587: 0x5EEA, + 18588: 0x81BA, + 18589: 0x5FC4, + 18590: 0x5FC9, + 18591: 0x5FD6, + 18592: 0x5FCF, + 18593: 0x6003, + 18594: 0x5FEE, + 18595: 0x6004, + 18596: 0x5FE1, + 18597: 0x5FE4, + 18598: 0x5FFE, + 18599: 0x6005, + 18600: 0x6006, + 18601: 0x5FEA, + 18602: 0x5FED, + 18603: 0x5FF8, + 18604: 0x6019, + 18605: 0x6035, + 18606: 0x6026, + 18607: 0x601B, + 18608: 0x600F, + 18609: 0x600D, + 18610: 0x6029, + 18611: 0x602B, + 18612: 0x600A, + 18613: 0x603F, + 18614: 0x6021, + 18615: 0x6078, + 18616: 0x6079, + 18617: 0x607B, + 18618: 0x607A, + 18619: 0x6042, + 18620: 0x9246, + 18621: 0x9247, + 18622: 0x9248, + 18623: 0x9249, + 18624: 0x924A, + 18625: 0x924B, + 18626: 0x924C, + 18627: 0x924D, + 18628: 0x924E, + 18629: 0x924F, + 18630: 0x9250, + 18631: 0x9251, + 18632: 0x9252, + 18633: 0x9253, + 18634: 0x9254, + 18635: 0x9255, + 18636: 0x9256, + 18637: 0x9257, + 18638: 0x9258, + 18639: 0x9259, + 18640: 0x925A, + 18641: 0x925B, + 18642: 0x925C, + 18643: 0x925D, + 18644: 0x925E, + 18645: 0x925F, + 18646: 0x9260, + 18647: 0x9261, + 18648: 0x9262, + 18649: 0x9263, + 18650: 0x9264, + 18651: 0x9265, + 18652: 0x9266, + 18653: 0x9267, + 18654: 0x9268, + 18655: 0x9269, + 18656: 0x926A, + 18657: 0x926B, + 18658: 0x926C, + 18659: 0x926D, + 18660: 0x926E, + 18661: 0x926F, + 18662: 0x9270, + 18663: 0x9271, + 18664: 0x9272, + 18665: 0x9273, + 18666: 0x9275, + 18667: 0x9276, + 18668: 0x9277, + 18669: 0x9278, + 18670: 0x9279, + 18671: 0x927A, + 18672: 0x927B, + 18673: 0x927C, + 18674: 0x927D, + 18675: 0x927E, + 18676: 0x927F, + 18677: 0x9280, + 18678: 0x9281, + 18679: 0x9282, + 18680: 0x9283, + 18681: 0x9284, + 18682: 0x9285, + 18683: 0x9286, + 18684: 0x9287, + 18685: 0x9288, + 18686: 0x9289, + 18687: 0x928A, + 18688: 0x928B, + 18689: 0x928C, + 18690: 0x928D, + 18691: 0x928F, + 18692: 0x9290, + 18693: 0x9291, + 18694: 0x9292, + 18695: 0x9293, + 18696: 0x9294, + 18697: 0x9295, + 18698: 0x9296, + 18699: 0x9297, + 18700: 0x9298, + 18701: 0x9299, + 18702: 0x929A, + 18703: 0x929B, + 18704: 0x929C, + 18705: 0x929D, + 18706: 0x929E, + 18707: 0x929F, + 18708: 0x92A0, + 18709: 0x92A1, + 18710: 0x92A2, + 18711: 0x92A3, + 18712: 0x92A4, + 18713: 0x92A5, + 18714: 0x92A6, + 18715: 0x92A7, + 18716: 0x606A, + 18717: 0x607D, + 18718: 0x6096, + 18719: 0x609A, + 18720: 0x60AD, + 18721: 0x609D, + 18722: 0x6083, + 18723: 0x6092, + 18724: 0x608C, + 18725: 0x609B, + 18726: 0x60EC, + 18727: 0x60BB, + 18728: 0x60B1, + 18729: 0x60DD, + 18730: 0x60D8, + 18731: 0x60C6, + 18732: 0x60DA, + 18733: 0x60B4, + 18734: 0x6120, + 18735: 0x6126, + 18736: 0x6115, + 18737: 0x6123, + 18738: 0x60F4, + 18739: 0x6100, + 18740: 0x610E, + 18741: 0x612B, + 18742: 0x614A, + 18743: 0x6175, + 18744: 0x61AC, + 18745: 0x6194, + 18746: 0x61A7, + 18747: 0x61B7, + 18748: 0x61D4, + 18749: 0x61F5, + 18750: 0x5FDD, + 18751: 0x96B3, + 18752: 0x95E9, + 18753: 0x95EB, + 18754: 0x95F1, + 18755: 0x95F3, + 18756: 0x95F5, + 18757: 0x95F6, + 18758: 0x95FC, + 18759: 0x95FE, + 18760: 0x9603, + 18761: 0x9604, + 18762: 0x9606, + 18763: 0x9608, + 18764: 0x960A, + 18765: 0x960B, + 18766: 0x960C, + 18767: 0x960D, + 18768: 0x960F, + 18769: 0x9612, + 18770: 0x9615, + 18771: 0x9616, + 18772: 0x9617, + 18773: 0x9619, + 18774: 0x961A, + 18775: 0x4E2C, + 18776: 0x723F, + 18777: 0x6215, + 18778: 0x6C35, + 18779: 0x6C54, + 18780: 0x6C5C, + 18781: 0x6C4A, + 18782: 0x6CA3, + 18783: 0x6C85, + 18784: 0x6C90, + 18785: 0x6C94, + 18786: 0x6C8C, + 18787: 0x6C68, + 18788: 0x6C69, + 18789: 0x6C74, + 18790: 0x6C76, + 18791: 0x6C86, + 18792: 0x6CA9, + 18793: 0x6CD0, + 18794: 0x6CD4, + 18795: 0x6CAD, + 18796: 0x6CF7, + 18797: 0x6CF8, + 18798: 0x6CF1, + 18799: 0x6CD7, + 18800: 0x6CB2, + 18801: 0x6CE0, + 18802: 0x6CD6, + 18803: 0x6CFA, + 18804: 0x6CEB, + 18805: 0x6CEE, + 18806: 0x6CB1, + 18807: 0x6CD3, + 18808: 0x6CEF, + 18809: 0x6CFE, + 18810: 0x92A8, + 18811: 0x92A9, + 18812: 0x92AA, + 18813: 0x92AB, + 18814: 0x92AC, + 18815: 0x92AD, + 18816: 0x92AF, + 18817: 0x92B0, + 18818: 0x92B1, + 18819: 0x92B2, + 18820: 0x92B3, + 18821: 0x92B4, + 18822: 0x92B5, + 18823: 0x92B6, + 18824: 0x92B7, + 18825: 0x92B8, + 18826: 0x92B9, + 18827: 0x92BA, + 18828: 0x92BB, + 18829: 0x92BC, + 18830: 0x92BD, + 18831: 0x92BE, + 18832: 0x92BF, + 18833: 0x92C0, + 18834: 0x92C1, + 18835: 0x92C2, + 18836: 0x92C3, + 18837: 0x92C4, + 18838: 0x92C5, + 18839: 0x92C6, + 18840: 0x92C7, + 18841: 0x92C9, + 18842: 0x92CA, + 18843: 0x92CB, + 18844: 0x92CC, + 18845: 0x92CD, + 18846: 0x92CE, + 18847: 0x92CF, + 18848: 0x92D0, + 18849: 0x92D1, + 18850: 0x92D2, + 18851: 0x92D3, + 18852: 0x92D4, + 18853: 0x92D5, + 18854: 0x92D6, + 18855: 0x92D7, + 18856: 0x92D8, + 18857: 0x92D9, + 18858: 0x92DA, + 18859: 0x92DB, + 18860: 0x92DC, + 18861: 0x92DD, + 18862: 0x92DE, + 18863: 0x92DF, + 18864: 0x92E0, + 18865: 0x92E1, + 18866: 0x92E2, + 18867: 0x92E3, + 18868: 0x92E4, + 18869: 0x92E5, + 18870: 0x92E6, + 18871: 0x92E7, + 18872: 0x92E8, + 18873: 0x92E9, + 18874: 0x92EA, + 18875: 0x92EB, + 18876: 0x92EC, + 18877: 0x92ED, + 18878: 0x92EE, + 18879: 0x92EF, + 18880: 0x92F0, + 18881: 0x92F1, + 18882: 0x92F2, + 18883: 0x92F3, + 18884: 0x92F4, + 18885: 0x92F5, + 18886: 0x92F6, + 18887: 0x92F7, + 18888: 0x92F8, + 18889: 0x92F9, + 18890: 0x92FA, + 18891: 0x92FB, + 18892: 0x92FC, + 18893: 0x92FD, + 18894: 0x92FE, + 18895: 0x92FF, + 18896: 0x9300, + 18897: 0x9301, + 18898: 0x9302, + 18899: 0x9303, + 18900: 0x9304, + 18901: 0x9305, + 18902: 0x9306, + 18903: 0x9307, + 18904: 0x9308, + 18905: 0x9309, + 18906: 0x6D39, + 18907: 0x6D27, + 18908: 0x6D0C, + 18909: 0x6D43, + 18910: 0x6D48, + 18911: 0x6D07, + 18912: 0x6D04, + 18913: 0x6D19, + 18914: 0x6D0E, + 18915: 0x6D2B, + 18916: 0x6D4D, + 18917: 0x6D2E, + 18918: 0x6D35, + 18919: 0x6D1A, + 18920: 0x6D4F, + 18921: 0x6D52, + 18922: 0x6D54, + 18923: 0x6D33, + 18924: 0x6D91, + 18925: 0x6D6F, + 18926: 0x6D9E, + 18927: 0x6DA0, + 18928: 0x6D5E, + 18929: 0x6D93, + 18930: 0x6D94, + 18931: 0x6D5C, + 18932: 0x6D60, + 18933: 0x6D7C, + 18934: 0x6D63, + 18935: 0x6E1A, + 18936: 0x6DC7, + 18937: 0x6DC5, + 18938: 0x6DDE, + 18939: 0x6E0E, + 18940: 0x6DBF, + 18941: 0x6DE0, + 18942: 0x6E11, + 18943: 0x6DE6, + 18944: 0x6DDD, + 18945: 0x6DD9, + 18946: 0x6E16, + 18947: 0x6DAB, + 18948: 0x6E0C, + 18949: 0x6DAE, + 18950: 0x6E2B, + 18951: 0x6E6E, + 18952: 0x6E4E, + 18953: 0x6E6B, + 18954: 0x6EB2, + 18955: 0x6E5F, + 18956: 0x6E86, + 18957: 0x6E53, + 18958: 0x6E54, + 18959: 0x6E32, + 18960: 0x6E25, + 18961: 0x6E44, + 18962: 0x6EDF, + 18963: 0x6EB1, + 18964: 0x6E98, + 18965: 0x6EE0, + 18966: 0x6F2D, + 18967: 0x6EE2, + 18968: 0x6EA5, + 18969: 0x6EA7, + 18970: 0x6EBD, + 18971: 0x6EBB, + 18972: 0x6EB7, + 18973: 0x6ED7, + 18974: 0x6EB4, + 18975: 0x6ECF, + 18976: 0x6E8F, + 18977: 0x6EC2, + 18978: 0x6E9F, + 18979: 0x6F62, + 18980: 0x6F46, + 18981: 0x6F47, + 18982: 0x6F24, + 18983: 0x6F15, + 18984: 0x6EF9, + 18985: 0x6F2F, + 18986: 0x6F36, + 18987: 0x6F4B, + 18988: 0x6F74, + 18989: 0x6F2A, + 18990: 0x6F09, + 18991: 0x6F29, + 18992: 0x6F89, + 18993: 0x6F8D, + 18994: 0x6F8C, + 18995: 0x6F78, + 18996: 0x6F72, + 18997: 0x6F7C, + 18998: 0x6F7A, + 18999: 0x6FD1, + 19000: 0x930A, + 19001: 0x930B, + 19002: 0x930C, + 19003: 0x930D, + 19004: 0x930E, + 19005: 0x930F, + 19006: 0x9310, + 19007: 0x9311, + 19008: 0x9312, + 19009: 0x9313, + 19010: 0x9314, + 19011: 0x9315, + 19012: 0x9316, + 19013: 0x9317, + 19014: 0x9318, + 19015: 0x9319, + 19016: 0x931A, + 19017: 0x931B, + 19018: 0x931C, + 19019: 0x931D, + 19020: 0x931E, + 19021: 0x931F, + 19022: 0x9320, + 19023: 0x9321, + 19024: 0x9322, + 19025: 0x9323, + 19026: 0x9324, + 19027: 0x9325, + 19028: 0x9326, + 19029: 0x9327, + 19030: 0x9328, + 19031: 0x9329, + 19032: 0x932A, + 19033: 0x932B, + 19034: 0x932C, + 19035: 0x932D, + 19036: 0x932E, + 19037: 0x932F, + 19038: 0x9330, + 19039: 0x9331, + 19040: 0x9332, + 19041: 0x9333, + 19042: 0x9334, + 19043: 0x9335, + 19044: 0x9336, + 19045: 0x9337, + 19046: 0x9338, + 19047: 0x9339, + 19048: 0x933A, + 19049: 0x933B, + 19050: 0x933C, + 19051: 0x933D, + 19052: 0x933F, + 19053: 0x9340, + 19054: 0x9341, + 19055: 0x9342, + 19056: 0x9343, + 19057: 0x9344, + 19058: 0x9345, + 19059: 0x9346, + 19060: 0x9347, + 19061: 0x9348, + 19062: 0x9349, + 19063: 0x934A, + 19064: 0x934B, + 19065: 0x934C, + 19066: 0x934D, + 19067: 0x934E, + 19068: 0x934F, + 19069: 0x9350, + 19070: 0x9351, + 19071: 0x9352, + 19072: 0x9353, + 19073: 0x9354, + 19074: 0x9355, + 19075: 0x9356, + 19076: 0x9357, + 19077: 0x9358, + 19078: 0x9359, + 19079: 0x935A, + 19080: 0x935B, + 19081: 0x935C, + 19082: 0x935D, + 19083: 0x935E, + 19084: 0x935F, + 19085: 0x9360, + 19086: 0x9361, + 19087: 0x9362, + 19088: 0x9363, + 19089: 0x9364, + 19090: 0x9365, + 19091: 0x9366, + 19092: 0x9367, + 19093: 0x9368, + 19094: 0x9369, + 19095: 0x936B, + 19096: 0x6FC9, + 19097: 0x6FA7, + 19098: 0x6FB9, + 19099: 0x6FB6, + 19100: 0x6FC2, + 19101: 0x6FE1, + 19102: 0x6FEE, + 19103: 0x6FDE, + 19104: 0x6FE0, + 19105: 0x6FEF, + 19106: 0x701A, + 19107: 0x7023, + 19108: 0x701B, + 19109: 0x7039, + 19110: 0x7035, + 19111: 0x704F, + 19112: 0x705E, + 19113: 0x5B80, + 19114: 0x5B84, + 19115: 0x5B95, + 19116: 0x5B93, + 19117: 0x5BA5, + 19118: 0x5BB8, + 19119: 0x752F, + 19120: 0x9A9E, + 19121: 0x6434, + 19122: 0x5BE4, + 19123: 0x5BEE, + 19124: 0x8930, + 19125: 0x5BF0, + 19126: 0x8E47, + 19127: 0x8B07, + 19128: 0x8FB6, + 19129: 0x8FD3, + 19130: 0x8FD5, + 19131: 0x8FE5, + 19132: 0x8FEE, + 19133: 0x8FE4, + 19134: 0x8FE9, + 19135: 0x8FE6, + 19136: 0x8FF3, + 19137: 0x8FE8, + 19138: 0x9005, + 19139: 0x9004, + 19140: 0x900B, + 19141: 0x9026, + 19142: 0x9011, + 19143: 0x900D, + 19144: 0x9016, + 19145: 0x9021, + 19146: 0x9035, + 19147: 0x9036, + 19148: 0x902D, + 19149: 0x902F, + 19150: 0x9044, + 19151: 0x9051, + 19152: 0x9052, + 19153: 0x9050, + 19154: 0x9068, + 19155: 0x9058, + 19156: 0x9062, + 19157: 0x905B, + 19158: 0x66B9, + 19159: 0x9074, + 19160: 0x907D, + 19161: 0x9082, + 19162: 0x9088, + 19163: 0x9083, + 19164: 0x908B, + 19165: 0x5F50, + 19166: 0x5F57, + 19167: 0x5F56, + 19168: 0x5F58, + 19169: 0x5C3B, + 19170: 0x54AB, + 19171: 0x5C50, + 19172: 0x5C59, + 19173: 0x5B71, + 19174: 0x5C63, + 19175: 0x5C66, + 19176: 0x7FBC, + 19177: 0x5F2A, + 19178: 0x5F29, + 19179: 0x5F2D, + 19180: 0x8274, + 19181: 0x5F3C, + 19182: 0x9B3B, + 19183: 0x5C6E, + 19184: 0x5981, + 19185: 0x5983, + 19186: 0x598D, + 19187: 0x59A9, + 19188: 0x59AA, + 19189: 0x59A3, + 19190: 0x936C, + 19191: 0x936D, + 19192: 0x936E, + 19193: 0x936F, + 19194: 0x9370, + 19195: 0x9371, + 19196: 0x9372, + 19197: 0x9373, + 19198: 0x9374, + 19199: 0x9375, + 19200: 0x9376, + 19201: 0x9377, + 19202: 0x9378, + 19203: 0x9379, + 19204: 0x937A, + 19205: 0x937B, + 19206: 0x937C, + 19207: 0x937D, + 19208: 0x937E, + 19209: 0x937F, + 19210: 0x9380, + 19211: 0x9381, + 19212: 0x9382, + 19213: 0x9383, + 19214: 0x9384, + 19215: 0x9385, + 19216: 0x9386, + 19217: 0x9387, + 19218: 0x9388, + 19219: 0x9389, + 19220: 0x938A, + 19221: 0x938B, + 19222: 0x938C, + 19223: 0x938D, + 19224: 0x938E, + 19225: 0x9390, + 19226: 0x9391, + 19227: 0x9392, + 19228: 0x9393, + 19229: 0x9394, + 19230: 0x9395, + 19231: 0x9396, + 19232: 0x9397, + 19233: 0x9398, + 19234: 0x9399, + 19235: 0x939A, + 19236: 0x939B, + 19237: 0x939C, + 19238: 0x939D, + 19239: 0x939E, + 19240: 0x939F, + 19241: 0x93A0, + 19242: 0x93A1, + 19243: 0x93A2, + 19244: 0x93A3, + 19245: 0x93A4, + 19246: 0x93A5, + 19247: 0x93A6, + 19248: 0x93A7, + 19249: 0x93A8, + 19250: 0x93A9, + 19251: 0x93AA, + 19252: 0x93AB, + 19253: 0x93AC, + 19254: 0x93AD, + 19255: 0x93AE, + 19256: 0x93AF, + 19257: 0x93B0, + 19258: 0x93B1, + 19259: 0x93B2, + 19260: 0x93B3, + 19261: 0x93B4, + 19262: 0x93B5, + 19263: 0x93B6, + 19264: 0x93B7, + 19265: 0x93B8, + 19266: 0x93B9, + 19267: 0x93BA, + 19268: 0x93BB, + 19269: 0x93BC, + 19270: 0x93BD, + 19271: 0x93BE, + 19272: 0x93BF, + 19273: 0x93C0, + 19274: 0x93C1, + 19275: 0x93C2, + 19276: 0x93C3, + 19277: 0x93C4, + 19278: 0x93C5, + 19279: 0x93C6, + 19280: 0x93C7, + 19281: 0x93C8, + 19282: 0x93C9, + 19283: 0x93CB, + 19284: 0x93CC, + 19285: 0x93CD, + 19286: 0x5997, + 19287: 0x59CA, + 19288: 0x59AB, + 19289: 0x599E, + 19290: 0x59A4, + 19291: 0x59D2, + 19292: 0x59B2, + 19293: 0x59AF, + 19294: 0x59D7, + 19295: 0x59BE, + 19296: 0x5A05, + 19297: 0x5A06, + 19298: 0x59DD, + 19299: 0x5A08, + 19300: 0x59E3, + 19301: 0x59D8, + 19302: 0x59F9, + 19303: 0x5A0C, + 19304: 0x5A09, + 19305: 0x5A32, + 19306: 0x5A34, + 19307: 0x5A11, + 19308: 0x5A23, + 19309: 0x5A13, + 19310: 0x5A40, + 19311: 0x5A67, + 19312: 0x5A4A, + 19313: 0x5A55, + 19314: 0x5A3C, + 19315: 0x5A62, + 19316: 0x5A75, + 19317: 0x80EC, + 19318: 0x5AAA, + 19319: 0x5A9B, + 19320: 0x5A77, + 19321: 0x5A7A, + 19322: 0x5ABE, + 19323: 0x5AEB, + 19324: 0x5AB2, + 19325: 0x5AD2, + 19326: 0x5AD4, + 19327: 0x5AB8, + 19328: 0x5AE0, + 19329: 0x5AE3, + 19330: 0x5AF1, + 19331: 0x5AD6, + 19332: 0x5AE6, + 19333: 0x5AD8, + 19334: 0x5ADC, + 19335: 0x5B09, + 19336: 0x5B17, + 19337: 0x5B16, + 19338: 0x5B32, + 19339: 0x5B37, + 19340: 0x5B40, + 19341: 0x5C15, + 19342: 0x5C1C, + 19343: 0x5B5A, + 19344: 0x5B65, + 19345: 0x5B73, + 19346: 0x5B51, + 19347: 0x5B53, + 19348: 0x5B62, + 19349: 0x9A75, + 19350: 0x9A77, + 19351: 0x9A78, + 19352: 0x9A7A, + 19353: 0x9A7F, + 19354: 0x9A7D, + 19355: 0x9A80, + 19356: 0x9A81, + 19357: 0x9A85, + 19358: 0x9A88, + 19359: 0x9A8A, + 19360: 0x9A90, + 19361: 0x9A92, + 19362: 0x9A93, + 19363: 0x9A96, + 19364: 0x9A98, + 19365: 0x9A9B, + 19366: 0x9A9C, + 19367: 0x9A9D, + 19368: 0x9A9F, + 19369: 0x9AA0, + 19370: 0x9AA2, + 19371: 0x9AA3, + 19372: 0x9AA5, + 19373: 0x9AA7, + 19374: 0x7E9F, + 19375: 0x7EA1, + 19376: 0x7EA3, + 19377: 0x7EA5, + 19378: 0x7EA8, + 19379: 0x7EA9, + 19380: 0x93CE, + 19381: 0x93CF, + 19382: 0x93D0, + 19383: 0x93D1, + 19384: 0x93D2, + 19385: 0x93D3, + 19386: 0x93D4, + 19387: 0x93D5, + 19388: 0x93D7, + 19389: 0x93D8, + 19390: 0x93D9, + 19391: 0x93DA, + 19392: 0x93DB, + 19393: 0x93DC, + 19394: 0x93DD, + 19395: 0x93DE, + 19396: 0x93DF, + 19397: 0x93E0, + 19398: 0x93E1, + 19399: 0x93E2, + 19400: 0x93E3, + 19401: 0x93E4, + 19402: 0x93E5, + 19403: 0x93E6, + 19404: 0x93E7, + 19405: 0x93E8, + 19406: 0x93E9, + 19407: 0x93EA, + 19408: 0x93EB, + 19409: 0x93EC, + 19410: 0x93ED, + 19411: 0x93EE, + 19412: 0x93EF, + 19413: 0x93F0, + 19414: 0x93F1, + 19415: 0x93F2, + 19416: 0x93F3, + 19417: 0x93F4, + 19418: 0x93F5, + 19419: 0x93F6, + 19420: 0x93F7, + 19421: 0x93F8, + 19422: 0x93F9, + 19423: 0x93FA, + 19424: 0x93FB, + 19425: 0x93FC, + 19426: 0x93FD, + 19427: 0x93FE, + 19428: 0x93FF, + 19429: 0x9400, + 19430: 0x9401, + 19431: 0x9402, + 19432: 0x9403, + 19433: 0x9404, + 19434: 0x9405, + 19435: 0x9406, + 19436: 0x9407, + 19437: 0x9408, + 19438: 0x9409, + 19439: 0x940A, + 19440: 0x940B, + 19441: 0x940C, + 19442: 0x940D, + 19443: 0x940E, + 19444: 0x940F, + 19445: 0x9410, + 19446: 0x9411, + 19447: 0x9412, + 19448: 0x9413, + 19449: 0x9414, + 19450: 0x9415, + 19451: 0x9416, + 19452: 0x9417, + 19453: 0x9418, + 19454: 0x9419, + 19455: 0x941A, + 19456: 0x941B, + 19457: 0x941C, + 19458: 0x941D, + 19459: 0x941E, + 19460: 0x941F, + 19461: 0x9420, + 19462: 0x9421, + 19463: 0x9422, + 19464: 0x9423, + 19465: 0x9424, + 19466: 0x9425, + 19467: 0x9426, + 19468: 0x9427, + 19469: 0x9428, + 19470: 0x9429, + 19471: 0x942A, + 19472: 0x942B, + 19473: 0x942C, + 19474: 0x942D, + 19475: 0x942E, + 19476: 0x7EAD, + 19477: 0x7EB0, + 19478: 0x7EBE, + 19479: 0x7EC0, + 19480: 0x7EC1, + 19481: 0x7EC2, + 19482: 0x7EC9, + 19483: 0x7ECB, + 19484: 0x7ECC, + 19485: 0x7ED0, + 19486: 0x7ED4, + 19487: 0x7ED7, + 19488: 0x7EDB, + 19489: 0x7EE0, + 19490: 0x7EE1, + 19491: 0x7EE8, + 19492: 0x7EEB, + 19493: 0x7EEE, + 19494: 0x7EEF, + 19495: 0x7EF1, + 19496: 0x7EF2, + 19497: 0x7F0D, + 19498: 0x7EF6, + 19499: 0x7EFA, + 19500: 0x7EFB, + 19501: 0x7EFE, + 19502: 0x7F01, + 19503: 0x7F02, + 19504: 0x7F03, + 19505: 0x7F07, + 19506: 0x7F08, + 19507: 0x7F0B, + 19508: 0x7F0C, + 19509: 0x7F0F, + 19510: 0x7F11, + 19511: 0x7F12, + 19512: 0x7F17, + 19513: 0x7F19, + 19514: 0x7F1C, + 19515: 0x7F1B, + 19516: 0x7F1F, + 19517: 0x7F21, + 19518: 0x7F22, + 19519: 0x7F23, + 19520: 0x7F24, + 19521: 0x7F25, + 19522: 0x7F26, + 19523: 0x7F27, + 19524: 0x7F2A, + 19525: 0x7F2B, + 19526: 0x7F2C, + 19527: 0x7F2D, + 19528: 0x7F2F, + 19529: 0x7F30, + 19530: 0x7F31, + 19531: 0x7F32, + 19532: 0x7F33, + 19533: 0x7F35, + 19534: 0x5E7A, + 19535: 0x757F, + 19536: 0x5DDB, + 19537: 0x753E, + 19538: 0x9095, + 19539: 0x738E, + 19540: 0x7391, + 19541: 0x73AE, + 19542: 0x73A2, + 19543: 0x739F, + 19544: 0x73CF, + 19545: 0x73C2, + 19546: 0x73D1, + 19547: 0x73B7, + 19548: 0x73B3, + 19549: 0x73C0, + 19550: 0x73C9, + 19551: 0x73C8, + 19552: 0x73E5, + 19553: 0x73D9, + 19554: 0x987C, + 19555: 0x740A, + 19556: 0x73E9, + 19557: 0x73E7, + 19558: 0x73DE, + 19559: 0x73BA, + 19560: 0x73F2, + 19561: 0x740F, + 19562: 0x742A, + 19563: 0x745B, + 19564: 0x7426, + 19565: 0x7425, + 19566: 0x7428, + 19567: 0x7430, + 19568: 0x742E, + 19569: 0x742C, + 19570: 0x942F, + 19571: 0x9430, + 19572: 0x9431, + 19573: 0x9432, + 19574: 0x9433, + 19575: 0x9434, + 19576: 0x9435, + 19577: 0x9436, + 19578: 0x9437, + 19579: 0x9438, + 19580: 0x9439, + 19581: 0x943A, + 19582: 0x943B, + 19583: 0x943C, + 19584: 0x943D, + 19585: 0x943F, + 19586: 0x9440, + 19587: 0x9441, + 19588: 0x9442, + 19589: 0x9443, + 19590: 0x9444, + 19591: 0x9445, + 19592: 0x9446, + 19593: 0x9447, + 19594: 0x9448, + 19595: 0x9449, + 19596: 0x944A, + 19597: 0x944B, + 19598: 0x944C, + 19599: 0x944D, + 19600: 0x944E, + 19601: 0x944F, + 19602: 0x9450, + 19603: 0x9451, + 19604: 0x9452, + 19605: 0x9453, + 19606: 0x9454, + 19607: 0x9455, + 19608: 0x9456, + 19609: 0x9457, + 19610: 0x9458, + 19611: 0x9459, + 19612: 0x945A, + 19613: 0x945B, + 19614: 0x945C, + 19615: 0x945D, + 19616: 0x945E, + 19617: 0x945F, + 19618: 0x9460, + 19619: 0x9461, + 19620: 0x9462, + 19621: 0x9463, + 19622: 0x9464, + 19623: 0x9465, + 19624: 0x9466, + 19625: 0x9467, + 19626: 0x9468, + 19627: 0x9469, + 19628: 0x946A, + 19629: 0x946C, + 19630: 0x946D, + 19631: 0x946E, + 19632: 0x946F, + 19633: 0x9470, + 19634: 0x9471, + 19635: 0x9472, + 19636: 0x9473, + 19637: 0x9474, + 19638: 0x9475, + 19639: 0x9476, + 19640: 0x9477, + 19641: 0x9478, + 19642: 0x9479, + 19643: 0x947A, + 19644: 0x947B, + 19645: 0x947C, + 19646: 0x947D, + 19647: 0x947E, + 19648: 0x947F, + 19649: 0x9480, + 19650: 0x9481, + 19651: 0x9482, + 19652: 0x9483, + 19653: 0x9484, + 19654: 0x9491, + 19655: 0x9496, + 19656: 0x9498, + 19657: 0x94C7, + 19658: 0x94CF, + 19659: 0x94D3, + 19660: 0x94D4, + 19661: 0x94DA, + 19662: 0x94E6, + 19663: 0x94FB, + 19664: 0x951C, + 19665: 0x9520, + 19666: 0x741B, + 19667: 0x741A, + 19668: 0x7441, + 19669: 0x745C, + 19670: 0x7457, + 19671: 0x7455, + 19672: 0x7459, + 19673: 0x7477, + 19674: 0x746D, + 19675: 0x747E, + 19676: 0x749C, + 19677: 0x748E, + 19678: 0x7480, + 19679: 0x7481, + 19680: 0x7487, + 19681: 0x748B, + 19682: 0x749E, + 19683: 0x74A8, + 19684: 0x74A9, + 19685: 0x7490, + 19686: 0x74A7, + 19687: 0x74D2, + 19688: 0x74BA, + 19689: 0x97EA, + 19690: 0x97EB, + 19691: 0x97EC, + 19692: 0x674C, + 19693: 0x6753, + 19694: 0x675E, + 19695: 0x6748, + 19696: 0x6769, + 19697: 0x67A5, + 19698: 0x6787, + 19699: 0x676A, + 19700: 0x6773, + 19701: 0x6798, + 19702: 0x67A7, + 19703: 0x6775, + 19704: 0x67A8, + 19705: 0x679E, + 19706: 0x67AD, + 19707: 0x678B, + 19708: 0x6777, + 19709: 0x677C, + 19710: 0x67F0, + 19711: 0x6809, + 19712: 0x67D8, + 19713: 0x680A, + 19714: 0x67E9, + 19715: 0x67B0, + 19716: 0x680C, + 19717: 0x67D9, + 19718: 0x67B5, + 19719: 0x67DA, + 19720: 0x67B3, + 19721: 0x67DD, + 19722: 0x6800, + 19723: 0x67C3, + 19724: 0x67B8, + 19725: 0x67E2, + 19726: 0x680E, + 19727: 0x67C1, + 19728: 0x67FD, + 19729: 0x6832, + 19730: 0x6833, + 19731: 0x6860, + 19732: 0x6861, + 19733: 0x684E, + 19734: 0x6862, + 19735: 0x6844, + 19736: 0x6864, + 19737: 0x6883, + 19738: 0x681D, + 19739: 0x6855, + 19740: 0x6866, + 19741: 0x6841, + 19742: 0x6867, + 19743: 0x6840, + 19744: 0x683E, + 19745: 0x684A, + 19746: 0x6849, + 19747: 0x6829, + 19748: 0x68B5, + 19749: 0x688F, + 19750: 0x6874, + 19751: 0x6877, + 19752: 0x6893, + 19753: 0x686B, + 19754: 0x68C2, + 19755: 0x696E, + 19756: 0x68FC, + 19757: 0x691F, + 19758: 0x6920, + 19759: 0x68F9, + 19760: 0x9527, + 19761: 0x9533, + 19762: 0x953D, + 19763: 0x9543, + 19764: 0x9548, + 19765: 0x954B, + 19766: 0x9555, + 19767: 0x955A, + 19768: 0x9560, + 19769: 0x956E, + 19770: 0x9574, + 19771: 0x9575, + 19772: 0x9577, + 19773: 0x9578, + 19774: 0x9579, + 19775: 0x957A, + 19776: 0x957B, + 19777: 0x957C, + 19778: 0x957D, + 19779: 0x957E, + 19780: 0x9580, + 19781: 0x9581, + 19782: 0x9582, + 19783: 0x9583, + 19784: 0x9584, + 19785: 0x9585, + 19786: 0x9586, + 19787: 0x9587, + 19788: 0x9588, + 19789: 0x9589, + 19790: 0x958A, + 19791: 0x958B, + 19792: 0x958C, + 19793: 0x958D, + 19794: 0x958E, + 19795: 0x958F, + 19796: 0x9590, + 19797: 0x9591, + 19798: 0x9592, + 19799: 0x9593, + 19800: 0x9594, + 19801: 0x9595, + 19802: 0x9596, + 19803: 0x9597, + 19804: 0x9598, + 19805: 0x9599, + 19806: 0x959A, + 19807: 0x959B, + 19808: 0x959C, + 19809: 0x959D, + 19810: 0x959E, + 19811: 0x959F, + 19812: 0x95A0, + 19813: 0x95A1, + 19814: 0x95A2, + 19815: 0x95A3, + 19816: 0x95A4, + 19817: 0x95A5, + 19818: 0x95A6, + 19819: 0x95A7, + 19820: 0x95A8, + 19821: 0x95A9, + 19822: 0x95AA, + 19823: 0x95AB, + 19824: 0x95AC, + 19825: 0x95AD, + 19826: 0x95AE, + 19827: 0x95AF, + 19828: 0x95B0, + 19829: 0x95B1, + 19830: 0x95B2, + 19831: 0x95B3, + 19832: 0x95B4, + 19833: 0x95B5, + 19834: 0x95B6, + 19835: 0x95B7, + 19836: 0x95B8, + 19837: 0x95B9, + 19838: 0x95BA, + 19839: 0x95BB, + 19840: 0x95BC, + 19841: 0x95BD, + 19842: 0x95BE, + 19843: 0x95BF, + 19844: 0x95C0, + 19845: 0x95C1, + 19846: 0x95C2, + 19847: 0x95C3, + 19848: 0x95C4, + 19849: 0x95C5, + 19850: 0x95C6, + 19851: 0x95C7, + 19852: 0x95C8, + 19853: 0x95C9, + 19854: 0x95CA, + 19855: 0x95CB, + 19856: 0x6924, + 19857: 0x68F0, + 19858: 0x690B, + 19859: 0x6901, + 19860: 0x6957, + 19861: 0x68E3, + 19862: 0x6910, + 19863: 0x6971, + 19864: 0x6939, + 19865: 0x6960, + 19866: 0x6942, + 19867: 0x695D, + 19868: 0x6984, + 19869: 0x696B, + 19870: 0x6980, + 19871: 0x6998, + 19872: 0x6978, + 19873: 0x6934, + 19874: 0x69CC, + 19875: 0x6987, + 19876: 0x6988, + 19877: 0x69CE, + 19878: 0x6989, + 19879: 0x6966, + 19880: 0x6963, + 19881: 0x6979, + 19882: 0x699B, + 19883: 0x69A7, + 19884: 0x69BB, + 19885: 0x69AB, + 19886: 0x69AD, + 19887: 0x69D4, + 19888: 0x69B1, + 19889: 0x69C1, + 19890: 0x69CA, + 19891: 0x69DF, + 19892: 0x6995, + 19893: 0x69E0, + 19894: 0x698D, + 19895: 0x69FF, + 19896: 0x6A2F, + 19897: 0x69ED, + 19898: 0x6A17, + 19899: 0x6A18, + 19900: 0x6A65, + 19901: 0x69F2, + 19902: 0x6A44, + 19903: 0x6A3E, + 19904: 0x6AA0, + 19905: 0x6A50, + 19906: 0x6A5B, + 19907: 0x6A35, + 19908: 0x6A8E, + 19909: 0x6A79, + 19910: 0x6A3D, + 19911: 0x6A28, + 19912: 0x6A58, + 19913: 0x6A7C, + 19914: 0x6A91, + 19915: 0x6A90, + 19916: 0x6AA9, + 19917: 0x6A97, + 19918: 0x6AAB, + 19919: 0x7337, + 19920: 0x7352, + 19921: 0x6B81, + 19922: 0x6B82, + 19923: 0x6B87, + 19924: 0x6B84, + 19925: 0x6B92, + 19926: 0x6B93, + 19927: 0x6B8D, + 19928: 0x6B9A, + 19929: 0x6B9B, + 19930: 0x6BA1, + 19931: 0x6BAA, + 19932: 0x8F6B, + 19933: 0x8F6D, + 19934: 0x8F71, + 19935: 0x8F72, + 19936: 0x8F73, + 19937: 0x8F75, + 19938: 0x8F76, + 19939: 0x8F78, + 19940: 0x8F77, + 19941: 0x8F79, + 19942: 0x8F7A, + 19943: 0x8F7C, + 19944: 0x8F7E, + 19945: 0x8F81, + 19946: 0x8F82, + 19947: 0x8F84, + 19948: 0x8F87, + 19949: 0x8F8B, + 19950: 0x95CC, + 19951: 0x95CD, + 19952: 0x95CE, + 19953: 0x95CF, + 19954: 0x95D0, + 19955: 0x95D1, + 19956: 0x95D2, + 19957: 0x95D3, + 19958: 0x95D4, + 19959: 0x95D5, + 19960: 0x95D6, + 19961: 0x95D7, + 19962: 0x95D8, + 19963: 0x95D9, + 19964: 0x95DA, + 19965: 0x95DB, + 19966: 0x95DC, + 19967: 0x95DD, + 19968: 0x95DE, + 19969: 0x95DF, + 19970: 0x95E0, + 19971: 0x95E1, + 19972: 0x95E2, + 19973: 0x95E3, + 19974: 0x95E4, + 19975: 0x95E5, + 19976: 0x95E6, + 19977: 0x95E7, + 19978: 0x95EC, + 19979: 0x95FF, + 19980: 0x9607, + 19981: 0x9613, + 19982: 0x9618, + 19983: 0x961B, + 19984: 0x961E, + 19985: 0x9620, + 19986: 0x9623, + 19987: 0x9624, + 19988: 0x9625, + 19989: 0x9626, + 19990: 0x9627, + 19991: 0x9628, + 19992: 0x9629, + 19993: 0x962B, + 19994: 0x962C, + 19995: 0x962D, + 19996: 0x962F, + 19997: 0x9630, + 19998: 0x9637, + 19999: 0x9638, + 20000: 0x9639, + 20001: 0x963A, + 20002: 0x963E, + 20003: 0x9641, + 20004: 0x9643, + 20005: 0x964A, + 20006: 0x964E, + 20007: 0x964F, + 20008: 0x9651, + 20009: 0x9652, + 20010: 0x9653, + 20011: 0x9656, + 20012: 0x9657, + 20013: 0x9658, + 20014: 0x9659, + 20015: 0x965A, + 20016: 0x965C, + 20017: 0x965D, + 20018: 0x965E, + 20019: 0x9660, + 20020: 0x9663, + 20021: 0x9665, + 20022: 0x9666, + 20023: 0x966B, + 20024: 0x966D, + 20025: 0x966E, + 20026: 0x966F, + 20027: 0x9670, + 20028: 0x9671, + 20029: 0x9673, + 20030: 0x9678, + 20031: 0x9679, + 20032: 0x967A, + 20033: 0x967B, + 20034: 0x967C, + 20035: 0x967D, + 20036: 0x967E, + 20037: 0x967F, + 20038: 0x9680, + 20039: 0x9681, + 20040: 0x9682, + 20041: 0x9683, + 20042: 0x9684, + 20043: 0x9687, + 20044: 0x9689, + 20045: 0x968A, + 20046: 0x8F8D, + 20047: 0x8F8E, + 20048: 0x8F8F, + 20049: 0x8F98, + 20050: 0x8F9A, + 20051: 0x8ECE, + 20052: 0x620B, + 20053: 0x6217, + 20054: 0x621B, + 20055: 0x621F, + 20056: 0x6222, + 20057: 0x6221, + 20058: 0x6225, + 20059: 0x6224, + 20060: 0x622C, + 20061: 0x81E7, + 20062: 0x74EF, + 20063: 0x74F4, + 20064: 0x74FF, + 20065: 0x750F, + 20066: 0x7511, + 20067: 0x7513, + 20068: 0x6534, + 20069: 0x65EE, + 20070: 0x65EF, + 20071: 0x65F0, + 20072: 0x660A, + 20073: 0x6619, + 20074: 0x6772, + 20075: 0x6603, + 20076: 0x6615, + 20077: 0x6600, + 20078: 0x7085, + 20079: 0x66F7, + 20080: 0x661D, + 20081: 0x6634, + 20082: 0x6631, + 20083: 0x6636, + 20084: 0x6635, + 20085: 0x8006, + 20086: 0x665F, + 20087: 0x6654, + 20088: 0x6641, + 20089: 0x664F, + 20090: 0x6656, + 20091: 0x6661, + 20092: 0x6657, + 20093: 0x6677, + 20094: 0x6684, + 20095: 0x668C, + 20096: 0x66A7, + 20097: 0x669D, + 20098: 0x66BE, + 20099: 0x66DB, + 20100: 0x66DC, + 20101: 0x66E6, + 20102: 0x66E9, + 20103: 0x8D32, + 20104: 0x8D33, + 20105: 0x8D36, + 20106: 0x8D3B, + 20107: 0x8D3D, + 20108: 0x8D40, + 20109: 0x8D45, + 20110: 0x8D46, + 20111: 0x8D48, + 20112: 0x8D49, + 20113: 0x8D47, + 20114: 0x8D4D, + 20115: 0x8D55, + 20116: 0x8D59, + 20117: 0x89C7, + 20118: 0x89CA, + 20119: 0x89CB, + 20120: 0x89CC, + 20121: 0x89CE, + 20122: 0x89CF, + 20123: 0x89D0, + 20124: 0x89D1, + 20125: 0x726E, + 20126: 0x729F, + 20127: 0x725D, + 20128: 0x7266, + 20129: 0x726F, + 20130: 0x727E, + 20131: 0x727F, + 20132: 0x7284, + 20133: 0x728B, + 20134: 0x728D, + 20135: 0x728F, + 20136: 0x7292, + 20137: 0x6308, + 20138: 0x6332, + 20139: 0x63B0, + 20140: 0x968C, + 20141: 0x968E, + 20142: 0x9691, + 20143: 0x9692, + 20144: 0x9693, + 20145: 0x9695, + 20146: 0x9696, + 20147: 0x969A, + 20148: 0x969B, + 20149: 0x969D, + 20150: 0x969E, + 20151: 0x969F, + 20152: 0x96A0, + 20153: 0x96A1, + 20154: 0x96A2, + 20155: 0x96A3, + 20156: 0x96A4, + 20157: 0x96A5, + 20158: 0x96A6, + 20159: 0x96A8, + 20160: 0x96A9, + 20161: 0x96AA, + 20162: 0x96AB, + 20163: 0x96AC, + 20164: 0x96AD, + 20165: 0x96AE, + 20166: 0x96AF, + 20167: 0x96B1, + 20168: 0x96B2, + 20169: 0x96B4, + 20170: 0x96B5, + 20171: 0x96B7, + 20172: 0x96B8, + 20173: 0x96BA, + 20174: 0x96BB, + 20175: 0x96BF, + 20176: 0x96C2, + 20177: 0x96C3, + 20178: 0x96C8, + 20179: 0x96CA, + 20180: 0x96CB, + 20181: 0x96D0, + 20182: 0x96D1, + 20183: 0x96D3, + 20184: 0x96D4, + 20185: 0x96D6, + 20186: 0x96D7, + 20187: 0x96D8, + 20188: 0x96D9, + 20189: 0x96DA, + 20190: 0x96DB, + 20191: 0x96DC, + 20192: 0x96DD, + 20193: 0x96DE, + 20194: 0x96DF, + 20195: 0x96E1, + 20196: 0x96E2, + 20197: 0x96E3, + 20198: 0x96E4, + 20199: 0x96E5, + 20200: 0x96E6, + 20201: 0x96E7, + 20202: 0x96EB, + 20203: 0x96EC, + 20204: 0x96ED, + 20205: 0x96EE, + 20206: 0x96F0, + 20207: 0x96F1, + 20208: 0x96F2, + 20209: 0x96F4, + 20210: 0x96F5, + 20211: 0x96F8, + 20212: 0x96FA, + 20213: 0x96FB, + 20214: 0x96FC, + 20215: 0x96FD, + 20216: 0x96FF, + 20217: 0x9702, + 20218: 0x9703, + 20219: 0x9705, + 20220: 0x970A, + 20221: 0x970B, + 20222: 0x970C, + 20223: 0x9710, + 20224: 0x9711, + 20225: 0x9712, + 20226: 0x9714, + 20227: 0x9715, + 20228: 0x9717, + 20229: 0x9718, + 20230: 0x9719, + 20231: 0x971A, + 20232: 0x971B, + 20233: 0x971D, + 20234: 0x971F, + 20235: 0x9720, + 20236: 0x643F, + 20237: 0x64D8, + 20238: 0x8004, + 20239: 0x6BEA, + 20240: 0x6BF3, + 20241: 0x6BFD, + 20242: 0x6BF5, + 20243: 0x6BF9, + 20244: 0x6C05, + 20245: 0x6C07, + 20246: 0x6C06, + 20247: 0x6C0D, + 20248: 0x6C15, + 20249: 0x6C18, + 20250: 0x6C19, + 20251: 0x6C1A, + 20252: 0x6C21, + 20253: 0x6C29, + 20254: 0x6C24, + 20255: 0x6C2A, + 20256: 0x6C32, + 20257: 0x6535, + 20258: 0x6555, + 20259: 0x656B, + 20260: 0x724D, + 20261: 0x7252, + 20262: 0x7256, + 20263: 0x7230, + 20264: 0x8662, + 20265: 0x5216, + 20266: 0x809F, + 20267: 0x809C, + 20268: 0x8093, + 20269: 0x80BC, + 20270: 0x670A, + 20271: 0x80BD, + 20272: 0x80B1, + 20273: 0x80AB, + 20274: 0x80AD, + 20275: 0x80B4, + 20276: 0x80B7, + 20277: 0x80E7, + 20278: 0x80E8, + 20279: 0x80E9, + 20280: 0x80EA, + 20281: 0x80DB, + 20282: 0x80C2, + 20283: 0x80C4, + 20284: 0x80D9, + 20285: 0x80CD, + 20286: 0x80D7, + 20287: 0x6710, + 20288: 0x80DD, + 20289: 0x80EB, + 20290: 0x80F1, + 20291: 0x80F4, + 20292: 0x80ED, + 20293: 0x810D, + 20294: 0x810E, + 20295: 0x80F2, + 20296: 0x80FC, + 20297: 0x6715, + 20298: 0x8112, + 20299: 0x8C5A, + 20300: 0x8136, + 20301: 0x811E, + 20302: 0x812C, + 20303: 0x8118, + 20304: 0x8132, + 20305: 0x8148, + 20306: 0x814C, + 20307: 0x8153, + 20308: 0x8174, + 20309: 0x8159, + 20310: 0x815A, + 20311: 0x8171, + 20312: 0x8160, + 20313: 0x8169, + 20314: 0x817C, + 20315: 0x817D, + 20316: 0x816D, + 20317: 0x8167, + 20318: 0x584D, + 20319: 0x5AB5, + 20320: 0x8188, + 20321: 0x8182, + 20322: 0x8191, + 20323: 0x6ED5, + 20324: 0x81A3, + 20325: 0x81AA, + 20326: 0x81CC, + 20327: 0x6726, + 20328: 0x81CA, + 20329: 0x81BB, + 20330: 0x9721, + 20331: 0x9722, + 20332: 0x9723, + 20333: 0x9724, + 20334: 0x9725, + 20335: 0x9726, + 20336: 0x9727, + 20337: 0x9728, + 20338: 0x9729, + 20339: 0x972B, + 20340: 0x972C, + 20341: 0x972E, + 20342: 0x972F, + 20343: 0x9731, + 20344: 0x9733, + 20345: 0x9734, + 20346: 0x9735, + 20347: 0x9736, + 20348: 0x9737, + 20349: 0x973A, + 20350: 0x973B, + 20351: 0x973C, + 20352: 0x973D, + 20353: 0x973F, + 20354: 0x9740, + 20355: 0x9741, + 20356: 0x9742, + 20357: 0x9743, + 20358: 0x9744, + 20359: 0x9745, + 20360: 0x9746, + 20361: 0x9747, + 20362: 0x9748, + 20363: 0x9749, + 20364: 0x974A, + 20365: 0x974B, + 20366: 0x974C, + 20367: 0x974D, + 20368: 0x974E, + 20369: 0x974F, + 20370: 0x9750, + 20371: 0x9751, + 20372: 0x9754, + 20373: 0x9755, + 20374: 0x9757, + 20375: 0x9758, + 20376: 0x975A, + 20377: 0x975C, + 20378: 0x975D, + 20379: 0x975F, + 20380: 0x9763, + 20381: 0x9764, + 20382: 0x9766, + 20383: 0x9767, + 20384: 0x9768, + 20385: 0x976A, + 20386: 0x976B, + 20387: 0x976C, + 20388: 0x976D, + 20389: 0x976E, + 20390: 0x976F, + 20391: 0x9770, + 20392: 0x9771, + 20393: 0x9772, + 20394: 0x9775, + 20395: 0x9777, + 20396: 0x9778, + 20397: 0x9779, + 20398: 0x977A, + 20399: 0x977B, + 20400: 0x977D, + 20401: 0x977E, + 20402: 0x977F, + 20403: 0x9780, + 20404: 0x9781, + 20405: 0x9782, + 20406: 0x9783, + 20407: 0x9784, + 20408: 0x9786, + 20409: 0x9787, + 20410: 0x9788, + 20411: 0x9789, + 20412: 0x978A, + 20413: 0x978C, + 20414: 0x978E, + 20415: 0x978F, + 20416: 0x9790, + 20417: 0x9793, + 20418: 0x9795, + 20419: 0x9796, + 20420: 0x9797, + 20421: 0x9799, + 20422: 0x979A, + 20423: 0x979B, + 20424: 0x979C, + 20425: 0x979D, + 20426: 0x81C1, + 20427: 0x81A6, + 20428: 0x6B24, + 20429: 0x6B37, + 20430: 0x6B39, + 20431: 0x6B43, + 20432: 0x6B46, + 20433: 0x6B59, + 20434: 0x98D1, + 20435: 0x98D2, + 20436: 0x98D3, + 20437: 0x98D5, + 20438: 0x98D9, + 20439: 0x98DA, + 20440: 0x6BB3, + 20441: 0x5F40, + 20442: 0x6BC2, + 20443: 0x89F3, + 20444: 0x6590, + 20445: 0x9F51, + 20446: 0x6593, + 20447: 0x65BC, + 20448: 0x65C6, + 20449: 0x65C4, + 20450: 0x65C3, + 20451: 0x65CC, + 20452: 0x65CE, + 20453: 0x65D2, + 20454: 0x65D6, + 20455: 0x7080, + 20456: 0x709C, + 20457: 0x7096, + 20458: 0x709D, + 20459: 0x70BB, + 20460: 0x70C0, + 20461: 0x70B7, + 20462: 0x70AB, + 20463: 0x70B1, + 20464: 0x70E8, + 20465: 0x70CA, + 20466: 0x7110, + 20467: 0x7113, + 20468: 0x7116, + 20469: 0x712F, + 20470: 0x7131, + 20471: 0x7173, + 20472: 0x715C, + 20473: 0x7168, + 20474: 0x7145, + 20475: 0x7172, + 20476: 0x714A, + 20477: 0x7178, + 20478: 0x717A, + 20479: 0x7198, + 20480: 0x71B3, + 20481: 0x71B5, + 20482: 0x71A8, + 20483: 0x71A0, + 20484: 0x71E0, + 20485: 0x71D4, + 20486: 0x71E7, + 20487: 0x71F9, + 20488: 0x721D, + 20489: 0x7228, + 20490: 0x706C, + 20491: 0x7118, + 20492: 0x7166, + 20493: 0x71B9, + 20494: 0x623E, + 20495: 0x623D, + 20496: 0x6243, + 20497: 0x6248, + 20498: 0x6249, + 20499: 0x793B, + 20500: 0x7940, + 20501: 0x7946, + 20502: 0x7949, + 20503: 0x795B, + 20504: 0x795C, + 20505: 0x7953, + 20506: 0x795A, + 20507: 0x7962, + 20508: 0x7957, + 20509: 0x7960, + 20510: 0x796F, + 20511: 0x7967, + 20512: 0x797A, + 20513: 0x7985, + 20514: 0x798A, + 20515: 0x799A, + 20516: 0x79A7, + 20517: 0x79B3, + 20518: 0x5FD1, + 20519: 0x5FD0, + 20520: 0x979E, + 20521: 0x979F, + 20522: 0x97A1, + 20523: 0x97A2, + 20524: 0x97A4, + 20525: 0x97A5, + 20526: 0x97A6, + 20527: 0x97A7, + 20528: 0x97A8, + 20529: 0x97A9, + 20530: 0x97AA, + 20531: 0x97AC, + 20532: 0x97AE, + 20533: 0x97B0, + 20534: 0x97B1, + 20535: 0x97B3, + 20536: 0x97B5, + 20537: 0x97B6, + 20538: 0x97B7, + 20539: 0x97B8, + 20540: 0x97B9, + 20541: 0x97BA, + 20542: 0x97BB, + 20543: 0x97BC, + 20544: 0x97BD, + 20545: 0x97BE, + 20546: 0x97BF, + 20547: 0x97C0, + 20548: 0x97C1, + 20549: 0x97C2, + 20550: 0x97C3, + 20551: 0x97C4, + 20552: 0x97C5, + 20553: 0x97C6, + 20554: 0x97C7, + 20555: 0x97C8, + 20556: 0x97C9, + 20557: 0x97CA, + 20558: 0x97CB, + 20559: 0x97CC, + 20560: 0x97CD, + 20561: 0x97CE, + 20562: 0x97CF, + 20563: 0x97D0, + 20564: 0x97D1, + 20565: 0x97D2, + 20566: 0x97D3, + 20567: 0x97D4, + 20568: 0x97D5, + 20569: 0x97D6, + 20570: 0x97D7, + 20571: 0x97D8, + 20572: 0x97D9, + 20573: 0x97DA, + 20574: 0x97DB, + 20575: 0x97DC, + 20576: 0x97DD, + 20577: 0x97DE, + 20578: 0x97DF, + 20579: 0x97E0, + 20580: 0x97E1, + 20581: 0x97E2, + 20582: 0x97E3, + 20583: 0x97E4, + 20584: 0x97E5, + 20585: 0x97E8, + 20586: 0x97EE, + 20587: 0x97EF, + 20588: 0x97F0, + 20589: 0x97F1, + 20590: 0x97F2, + 20591: 0x97F4, + 20592: 0x97F7, + 20593: 0x97F8, + 20594: 0x97F9, + 20595: 0x97FA, + 20596: 0x97FB, + 20597: 0x97FC, + 20598: 0x97FD, + 20599: 0x97FE, + 20600: 0x97FF, + 20601: 0x9800, + 20602: 0x9801, + 20603: 0x9802, + 20604: 0x9803, + 20605: 0x9804, + 20606: 0x9805, + 20607: 0x9806, + 20608: 0x9807, + 20609: 0x9808, + 20610: 0x9809, + 20611: 0x980A, + 20612: 0x980B, + 20613: 0x980C, + 20614: 0x980D, + 20615: 0x980E, + 20616: 0x603C, + 20617: 0x605D, + 20618: 0x605A, + 20619: 0x6067, + 20620: 0x6041, + 20621: 0x6059, + 20622: 0x6063, + 20623: 0x60AB, + 20624: 0x6106, + 20625: 0x610D, + 20626: 0x615D, + 20627: 0x61A9, + 20628: 0x619D, + 20629: 0x61CB, + 20630: 0x61D1, + 20631: 0x6206, + 20632: 0x8080, + 20633: 0x807F, + 20634: 0x6C93, + 20635: 0x6CF6, + 20636: 0x6DFC, + 20637: 0x77F6, + 20638: 0x77F8, + 20639: 0x7800, + 20640: 0x7809, + 20641: 0x7817, + 20642: 0x7818, + 20643: 0x7811, + 20644: 0x65AB, + 20645: 0x782D, + 20646: 0x781C, + 20647: 0x781D, + 20648: 0x7839, + 20649: 0x783A, + 20650: 0x783B, + 20651: 0x781F, + 20652: 0x783C, + 20653: 0x7825, + 20654: 0x782C, + 20655: 0x7823, + 20656: 0x7829, + 20657: 0x784E, + 20658: 0x786D, + 20659: 0x7856, + 20660: 0x7857, + 20661: 0x7826, + 20662: 0x7850, + 20663: 0x7847, + 20664: 0x784C, + 20665: 0x786A, + 20666: 0x789B, + 20667: 0x7893, + 20668: 0x789A, + 20669: 0x7887, + 20670: 0x789C, + 20671: 0x78A1, + 20672: 0x78A3, + 20673: 0x78B2, + 20674: 0x78B9, + 20675: 0x78A5, + 20676: 0x78D4, + 20677: 0x78D9, + 20678: 0x78C9, + 20679: 0x78EC, + 20680: 0x78F2, + 20681: 0x7905, + 20682: 0x78F4, + 20683: 0x7913, + 20684: 0x7924, + 20685: 0x791E, + 20686: 0x7934, + 20687: 0x9F9B, + 20688: 0x9EF9, + 20689: 0x9EFB, + 20690: 0x9EFC, + 20691: 0x76F1, + 20692: 0x7704, + 20693: 0x770D, + 20694: 0x76F9, + 20695: 0x7707, + 20696: 0x7708, + 20697: 0x771A, + 20698: 0x7722, + 20699: 0x7719, + 20700: 0x772D, + 20701: 0x7726, + 20702: 0x7735, + 20703: 0x7738, + 20704: 0x7750, + 20705: 0x7751, + 20706: 0x7747, + 20707: 0x7743, + 20708: 0x775A, + 20709: 0x7768, + 20710: 0x980F, + 20711: 0x9810, + 20712: 0x9811, + 20713: 0x9812, + 20714: 0x9813, + 20715: 0x9814, + 20716: 0x9815, + 20717: 0x9816, + 20718: 0x9817, + 20719: 0x9818, + 20720: 0x9819, + 20721: 0x981A, + 20722: 0x981B, + 20723: 0x981C, + 20724: 0x981D, + 20725: 0x981E, + 20726: 0x981F, + 20727: 0x9820, + 20728: 0x9821, + 20729: 0x9822, + 20730: 0x9823, + 20731: 0x9824, + 20732: 0x9825, + 20733: 0x9826, + 20734: 0x9827, + 20735: 0x9828, + 20736: 0x9829, + 20737: 0x982A, + 20738: 0x982B, + 20739: 0x982C, + 20740: 0x982D, + 20741: 0x982E, + 20742: 0x982F, + 20743: 0x9830, + 20744: 0x9831, + 20745: 0x9832, + 20746: 0x9833, + 20747: 0x9834, + 20748: 0x9835, + 20749: 0x9836, + 20750: 0x9837, + 20751: 0x9838, + 20752: 0x9839, + 20753: 0x983A, + 20754: 0x983B, + 20755: 0x983C, + 20756: 0x983D, + 20757: 0x983E, + 20758: 0x983F, + 20759: 0x9840, + 20760: 0x9841, + 20761: 0x9842, + 20762: 0x9843, + 20763: 0x9844, + 20764: 0x9845, + 20765: 0x9846, + 20766: 0x9847, + 20767: 0x9848, + 20768: 0x9849, + 20769: 0x984A, + 20770: 0x984B, + 20771: 0x984C, + 20772: 0x984D, + 20773: 0x984E, + 20774: 0x984F, + 20775: 0x9850, + 20776: 0x9851, + 20777: 0x9852, + 20778: 0x9853, + 20779: 0x9854, + 20780: 0x9855, + 20781: 0x9856, + 20782: 0x9857, + 20783: 0x9858, + 20784: 0x9859, + 20785: 0x985A, + 20786: 0x985B, + 20787: 0x985C, + 20788: 0x985D, + 20789: 0x985E, + 20790: 0x985F, + 20791: 0x9860, + 20792: 0x9861, + 20793: 0x9862, + 20794: 0x9863, + 20795: 0x9864, + 20796: 0x9865, + 20797: 0x9866, + 20798: 0x9867, + 20799: 0x9868, + 20800: 0x9869, + 20801: 0x986A, + 20802: 0x986B, + 20803: 0x986C, + 20804: 0x986D, + 20805: 0x986E, + 20806: 0x7762, + 20807: 0x7765, + 20808: 0x777F, + 20809: 0x778D, + 20810: 0x777D, + 20811: 0x7780, + 20812: 0x778C, + 20813: 0x7791, + 20814: 0x779F, + 20815: 0x77A0, + 20816: 0x77B0, + 20817: 0x77B5, + 20818: 0x77BD, + 20819: 0x753A, + 20820: 0x7540, + 20821: 0x754E, + 20822: 0x754B, + 20823: 0x7548, + 20824: 0x755B, + 20825: 0x7572, + 20826: 0x7579, + 20827: 0x7583, + 20828: 0x7F58, + 20829: 0x7F61, + 20830: 0x7F5F, + 20831: 0x8A48, + 20832: 0x7F68, + 20833: 0x7F74, + 20834: 0x7F71, + 20835: 0x7F79, + 20836: 0x7F81, + 20837: 0x7F7E, + 20838: 0x76CD, + 20839: 0x76E5, + 20840: 0x8832, + 20841: 0x9485, + 20842: 0x9486, + 20843: 0x9487, + 20844: 0x948B, + 20845: 0x948A, + 20846: 0x948C, + 20847: 0x948D, + 20848: 0x948F, + 20849: 0x9490, + 20850: 0x9494, + 20851: 0x9497, + 20852: 0x9495, + 20853: 0x949A, + 20854: 0x949B, + 20855: 0x949C, + 20856: 0x94A3, + 20857: 0x94A4, + 20858: 0x94AB, + 20859: 0x94AA, + 20860: 0x94AD, + 20861: 0x94AC, + 20862: 0x94AF, + 20863: 0x94B0, + 20864: 0x94B2, + 20865: 0x94B4, + 20866: 0x94B6, + 20867: 0x94B7, + 20868: 0x94B8, + 20869: 0x94B9, + 20870: 0x94BA, + 20871: 0x94BC, + 20872: 0x94BD, + 20873: 0x94BF, + 20874: 0x94C4, + 20875: 0x94C8, + 20876: 0x94C9, + 20877: 0x94CA, + 20878: 0x94CB, + 20879: 0x94CC, + 20880: 0x94CD, + 20881: 0x94CE, + 20882: 0x94D0, + 20883: 0x94D1, + 20884: 0x94D2, + 20885: 0x94D5, + 20886: 0x94D6, + 20887: 0x94D7, + 20888: 0x94D9, + 20889: 0x94D8, + 20890: 0x94DB, + 20891: 0x94DE, + 20892: 0x94DF, + 20893: 0x94E0, + 20894: 0x94E2, + 20895: 0x94E4, + 20896: 0x94E5, + 20897: 0x94E7, + 20898: 0x94E8, + 20899: 0x94EA, + 20900: 0x986F, + 20901: 0x9870, + 20902: 0x9871, + 20903: 0x9872, + 20904: 0x9873, + 20905: 0x9874, + 20906: 0x988B, + 20907: 0x988E, + 20908: 0x9892, + 20909: 0x9895, + 20910: 0x9899, + 20911: 0x98A3, + 20912: 0x98A8, + 20913: 0x98A9, + 20914: 0x98AA, + 20915: 0x98AB, + 20916: 0x98AC, + 20917: 0x98AD, + 20918: 0x98AE, + 20919: 0x98AF, + 20920: 0x98B0, + 20921: 0x98B1, + 20922: 0x98B2, + 20923: 0x98B3, + 20924: 0x98B4, + 20925: 0x98B5, + 20926: 0x98B6, + 20927: 0x98B7, + 20928: 0x98B8, + 20929: 0x98B9, + 20930: 0x98BA, + 20931: 0x98BB, + 20932: 0x98BC, + 20933: 0x98BD, + 20934: 0x98BE, + 20935: 0x98BF, + 20936: 0x98C0, + 20937: 0x98C1, + 20938: 0x98C2, + 20939: 0x98C3, + 20940: 0x98C4, + 20941: 0x98C5, + 20942: 0x98C6, + 20943: 0x98C7, + 20944: 0x98C8, + 20945: 0x98C9, + 20946: 0x98CA, + 20947: 0x98CB, + 20948: 0x98CC, + 20949: 0x98CD, + 20950: 0x98CF, + 20951: 0x98D0, + 20952: 0x98D4, + 20953: 0x98D6, + 20954: 0x98D7, + 20955: 0x98DB, + 20956: 0x98DC, + 20957: 0x98DD, + 20958: 0x98E0, + 20959: 0x98E1, + 20960: 0x98E2, + 20961: 0x98E3, + 20962: 0x98E4, + 20963: 0x98E5, + 20964: 0x98E6, + 20965: 0x98E9, + 20966: 0x98EA, + 20967: 0x98EB, + 20968: 0x98EC, + 20969: 0x98ED, + 20970: 0x98EE, + 20971: 0x98EF, + 20972: 0x98F0, + 20973: 0x98F1, + 20974: 0x98F2, + 20975: 0x98F3, + 20976: 0x98F4, + 20977: 0x98F5, + 20978: 0x98F6, + 20979: 0x98F7, + 20980: 0x98F8, + 20981: 0x98F9, + 20982: 0x98FA, + 20983: 0x98FB, + 20984: 0x98FC, + 20985: 0x98FD, + 20986: 0x98FE, + 20987: 0x98FF, + 20988: 0x9900, + 20989: 0x9901, + 20990: 0x9902, + 20991: 0x9903, + 20992: 0x9904, + 20993: 0x9905, + 20994: 0x9906, + 20995: 0x9907, + 20996: 0x94E9, + 20997: 0x94EB, + 20998: 0x94EE, + 20999: 0x94EF, + 21000: 0x94F3, + 21001: 0x94F4, + 21002: 0x94F5, + 21003: 0x94F7, + 21004: 0x94F9, + 21005: 0x94FC, + 21006: 0x94FD, + 21007: 0x94FF, + 21008: 0x9503, + 21009: 0x9502, + 21010: 0x9506, + 21011: 0x9507, + 21012: 0x9509, + 21013: 0x950A, + 21014: 0x950D, + 21015: 0x950E, + 21016: 0x950F, + 21017: 0x9512, + 21018: 0x9513, + 21019: 0x9514, + 21020: 0x9515, + 21021: 0x9516, + 21022: 0x9518, + 21023: 0x951B, + 21024: 0x951D, + 21025: 0x951E, + 21026: 0x951F, + 21027: 0x9522, + 21028: 0x952A, + 21029: 0x952B, + 21030: 0x9529, + 21031: 0x952C, + 21032: 0x9531, + 21033: 0x9532, + 21034: 0x9534, + 21035: 0x9536, + 21036: 0x9537, + 21037: 0x9538, + 21038: 0x953C, + 21039: 0x953E, + 21040: 0x953F, + 21041: 0x9542, + 21042: 0x9535, + 21043: 0x9544, + 21044: 0x9545, + 21045: 0x9546, + 21046: 0x9549, + 21047: 0x954C, + 21048: 0x954E, + 21049: 0x954F, + 21050: 0x9552, + 21051: 0x9553, + 21052: 0x9554, + 21053: 0x9556, + 21054: 0x9557, + 21055: 0x9558, + 21056: 0x9559, + 21057: 0x955B, + 21058: 0x955E, + 21059: 0x955F, + 21060: 0x955D, + 21061: 0x9561, + 21062: 0x9562, + 21063: 0x9564, + 21064: 0x9565, + 21065: 0x9566, + 21066: 0x9567, + 21067: 0x9568, + 21068: 0x9569, + 21069: 0x956A, + 21070: 0x956B, + 21071: 0x956C, + 21072: 0x956F, + 21073: 0x9571, + 21074: 0x9572, + 21075: 0x9573, + 21076: 0x953A, + 21077: 0x77E7, + 21078: 0x77EC, + 21079: 0x96C9, + 21080: 0x79D5, + 21081: 0x79ED, + 21082: 0x79E3, + 21083: 0x79EB, + 21084: 0x7A06, + 21085: 0x5D47, + 21086: 0x7A03, + 21087: 0x7A02, + 21088: 0x7A1E, + 21089: 0x7A14, + 21090: 0x9908, + 21091: 0x9909, + 21092: 0x990A, + 21093: 0x990B, + 21094: 0x990C, + 21095: 0x990E, + 21096: 0x990F, + 21097: 0x9911, + 21098: 0x9912, + 21099: 0x9913, + 21100: 0x9914, + 21101: 0x9915, + 21102: 0x9916, + 21103: 0x9917, + 21104: 0x9918, + 21105: 0x9919, + 21106: 0x991A, + 21107: 0x991B, + 21108: 0x991C, + 21109: 0x991D, + 21110: 0x991E, + 21111: 0x991F, + 21112: 0x9920, + 21113: 0x9921, + 21114: 0x9922, + 21115: 0x9923, + 21116: 0x9924, + 21117: 0x9925, + 21118: 0x9926, + 21119: 0x9927, + 21120: 0x9928, + 21121: 0x9929, + 21122: 0x992A, + 21123: 0x992B, + 21124: 0x992C, + 21125: 0x992D, + 21126: 0x992F, + 21127: 0x9930, + 21128: 0x9931, + 21129: 0x9932, + 21130: 0x9933, + 21131: 0x9934, + 21132: 0x9935, + 21133: 0x9936, + 21134: 0x9937, + 21135: 0x9938, + 21136: 0x9939, + 21137: 0x993A, + 21138: 0x993B, + 21139: 0x993C, + 21140: 0x993D, + 21141: 0x993E, + 21142: 0x993F, + 21143: 0x9940, + 21144: 0x9941, + 21145: 0x9942, + 21146: 0x9943, + 21147: 0x9944, + 21148: 0x9945, + 21149: 0x9946, + 21150: 0x9947, + 21151: 0x9948, + 21152: 0x9949, + 21153: 0x994A, + 21154: 0x994B, + 21155: 0x994C, + 21156: 0x994D, + 21157: 0x994E, + 21158: 0x994F, + 21159: 0x9950, + 21160: 0x9951, + 21161: 0x9952, + 21162: 0x9953, + 21163: 0x9956, + 21164: 0x9957, + 21165: 0x9958, + 21166: 0x9959, + 21167: 0x995A, + 21168: 0x995B, + 21169: 0x995C, + 21170: 0x995D, + 21171: 0x995E, + 21172: 0x995F, + 21173: 0x9960, + 21174: 0x9961, + 21175: 0x9962, + 21176: 0x9964, + 21177: 0x9966, + 21178: 0x9973, + 21179: 0x9978, + 21180: 0x9979, + 21181: 0x997B, + 21182: 0x997E, + 21183: 0x9982, + 21184: 0x9983, + 21185: 0x9989, + 21186: 0x7A39, + 21187: 0x7A37, + 21188: 0x7A51, + 21189: 0x9ECF, + 21190: 0x99A5, + 21191: 0x7A70, + 21192: 0x7688, + 21193: 0x768E, + 21194: 0x7693, + 21195: 0x7699, + 21196: 0x76A4, + 21197: 0x74DE, + 21198: 0x74E0, + 21199: 0x752C, + 21200: 0x9E20, + 21201: 0x9E22, + 21202: 0x9E28, + 21203: 0x9E29, + 21204: 0x9E2A, + 21205: 0x9E2B, + 21206: 0x9E2C, + 21207: 0x9E32, + 21208: 0x9E31, + 21209: 0x9E36, + 21210: 0x9E38, + 21211: 0x9E37, + 21212: 0x9E39, + 21213: 0x9E3A, + 21214: 0x9E3E, + 21215: 0x9E41, + 21216: 0x9E42, + 21217: 0x9E44, + 21218: 0x9E46, + 21219: 0x9E47, + 21220: 0x9E48, + 21221: 0x9E49, + 21222: 0x9E4B, + 21223: 0x9E4C, + 21224: 0x9E4E, + 21225: 0x9E51, + 21226: 0x9E55, + 21227: 0x9E57, + 21228: 0x9E5A, + 21229: 0x9E5B, + 21230: 0x9E5C, + 21231: 0x9E5E, + 21232: 0x9E63, + 21233: 0x9E66, + 21234: 0x9E67, + 21235: 0x9E68, + 21236: 0x9E69, + 21237: 0x9E6A, + 21238: 0x9E6B, + 21239: 0x9E6C, + 21240: 0x9E71, + 21241: 0x9E6D, + 21242: 0x9E73, + 21243: 0x7592, + 21244: 0x7594, + 21245: 0x7596, + 21246: 0x75A0, + 21247: 0x759D, + 21248: 0x75AC, + 21249: 0x75A3, + 21250: 0x75B3, + 21251: 0x75B4, + 21252: 0x75B8, + 21253: 0x75C4, + 21254: 0x75B1, + 21255: 0x75B0, + 21256: 0x75C3, + 21257: 0x75C2, + 21258: 0x75D6, + 21259: 0x75CD, + 21260: 0x75E3, + 21261: 0x75E8, + 21262: 0x75E6, + 21263: 0x75E4, + 21264: 0x75EB, + 21265: 0x75E7, + 21266: 0x7603, + 21267: 0x75F1, + 21268: 0x75FC, + 21269: 0x75FF, + 21270: 0x7610, + 21271: 0x7600, + 21272: 0x7605, + 21273: 0x760C, + 21274: 0x7617, + 21275: 0x760A, + 21276: 0x7625, + 21277: 0x7618, + 21278: 0x7615, + 21279: 0x7619, + 21280: 0x998C, + 21281: 0x998E, + 21282: 0x999A, + 21283: 0x999B, + 21284: 0x999C, + 21285: 0x999D, + 21286: 0x999E, + 21287: 0x999F, + 21288: 0x99A0, + 21289: 0x99A1, + 21290: 0x99A2, + 21291: 0x99A3, + 21292: 0x99A4, + 21293: 0x99A6, + 21294: 0x99A7, + 21295: 0x99A9, + 21296: 0x99AA, + 21297: 0x99AB, + 21298: 0x99AC, + 21299: 0x99AD, + 21300: 0x99AE, + 21301: 0x99AF, + 21302: 0x99B0, + 21303: 0x99B1, + 21304: 0x99B2, + 21305: 0x99B3, + 21306: 0x99B4, + 21307: 0x99B5, + 21308: 0x99B6, + 21309: 0x99B7, + 21310: 0x99B8, + 21311: 0x99B9, + 21312: 0x99BA, + 21313: 0x99BB, + 21314: 0x99BC, + 21315: 0x99BD, + 21316: 0x99BE, + 21317: 0x99BF, + 21318: 0x99C0, + 21319: 0x99C1, + 21320: 0x99C2, + 21321: 0x99C3, + 21322: 0x99C4, + 21323: 0x99C5, + 21324: 0x99C6, + 21325: 0x99C7, + 21326: 0x99C8, + 21327: 0x99C9, + 21328: 0x99CA, + 21329: 0x99CB, + 21330: 0x99CC, + 21331: 0x99CD, + 21332: 0x99CE, + 21333: 0x99CF, + 21334: 0x99D0, + 21335: 0x99D1, + 21336: 0x99D2, + 21337: 0x99D3, + 21338: 0x99D4, + 21339: 0x99D5, + 21340: 0x99D6, + 21341: 0x99D7, + 21342: 0x99D8, + 21343: 0x99D9, + 21344: 0x99DA, + 21345: 0x99DB, + 21346: 0x99DC, + 21347: 0x99DD, + 21348: 0x99DE, + 21349: 0x99DF, + 21350: 0x99E0, + 21351: 0x99E1, + 21352: 0x99E2, + 21353: 0x99E3, + 21354: 0x99E4, + 21355: 0x99E5, + 21356: 0x99E6, + 21357: 0x99E7, + 21358: 0x99E8, + 21359: 0x99E9, + 21360: 0x99EA, + 21361: 0x99EB, + 21362: 0x99EC, + 21363: 0x99ED, + 21364: 0x99EE, + 21365: 0x99EF, + 21366: 0x99F0, + 21367: 0x99F1, + 21368: 0x99F2, + 21369: 0x99F3, + 21370: 0x99F4, + 21371: 0x99F5, + 21372: 0x99F6, + 21373: 0x99F7, + 21374: 0x99F8, + 21375: 0x99F9, + 21376: 0x761B, + 21377: 0x763C, + 21378: 0x7622, + 21379: 0x7620, + 21380: 0x7640, + 21381: 0x762D, + 21382: 0x7630, + 21383: 0x763F, + 21384: 0x7635, + 21385: 0x7643, + 21386: 0x763E, + 21387: 0x7633, + 21388: 0x764D, + 21389: 0x765E, + 21390: 0x7654, + 21391: 0x765C, + 21392: 0x7656, + 21393: 0x766B, + 21394: 0x766F, + 21395: 0x7FCA, + 21396: 0x7AE6, + 21397: 0x7A78, + 21398: 0x7A79, + 21399: 0x7A80, + 21400: 0x7A86, + 21401: 0x7A88, + 21402: 0x7A95, + 21403: 0x7AA6, + 21404: 0x7AA0, + 21405: 0x7AAC, + 21406: 0x7AA8, + 21407: 0x7AAD, + 21408: 0x7AB3, + 21409: 0x8864, + 21410: 0x8869, + 21411: 0x8872, + 21412: 0x887D, + 21413: 0x887F, + 21414: 0x8882, + 21415: 0x88A2, + 21416: 0x88C6, + 21417: 0x88B7, + 21418: 0x88BC, + 21419: 0x88C9, + 21420: 0x88E2, + 21421: 0x88CE, + 21422: 0x88E3, + 21423: 0x88E5, + 21424: 0x88F1, + 21425: 0x891A, + 21426: 0x88FC, + 21427: 0x88E8, + 21428: 0x88FE, + 21429: 0x88F0, + 21430: 0x8921, + 21431: 0x8919, + 21432: 0x8913, + 21433: 0x891B, + 21434: 0x890A, + 21435: 0x8934, + 21436: 0x892B, + 21437: 0x8936, + 21438: 0x8941, + 21439: 0x8966, + 21440: 0x897B, + 21441: 0x758B, + 21442: 0x80E5, + 21443: 0x76B2, + 21444: 0x76B4, + 21445: 0x77DC, + 21446: 0x8012, + 21447: 0x8014, + 21448: 0x8016, + 21449: 0x801C, + 21450: 0x8020, + 21451: 0x8022, + 21452: 0x8025, + 21453: 0x8026, + 21454: 0x8027, + 21455: 0x8029, + 21456: 0x8028, + 21457: 0x8031, + 21458: 0x800B, + 21459: 0x8035, + 21460: 0x8043, + 21461: 0x8046, + 21462: 0x804D, + 21463: 0x8052, + 21464: 0x8069, + 21465: 0x8071, + 21466: 0x8983, + 21467: 0x9878, + 21468: 0x9880, + 21469: 0x9883, + 21470: 0x99FA, + 21471: 0x99FB, + 21472: 0x99FC, + 21473: 0x99FD, + 21474: 0x99FE, + 21475: 0x99FF, + 21476: 0x9A00, + 21477: 0x9A01, + 21478: 0x9A02, + 21479: 0x9A03, + 21480: 0x9A04, + 21481: 0x9A05, + 21482: 0x9A06, + 21483: 0x9A07, + 21484: 0x9A08, + 21485: 0x9A09, + 21486: 0x9A0A, + 21487: 0x9A0B, + 21488: 0x9A0C, + 21489: 0x9A0D, + 21490: 0x9A0E, + 21491: 0x9A0F, + 21492: 0x9A10, + 21493: 0x9A11, + 21494: 0x9A12, + 21495: 0x9A13, + 21496: 0x9A14, + 21497: 0x9A15, + 21498: 0x9A16, + 21499: 0x9A17, + 21500: 0x9A18, + 21501: 0x9A19, + 21502: 0x9A1A, + 21503: 0x9A1B, + 21504: 0x9A1C, + 21505: 0x9A1D, + 21506: 0x9A1E, + 21507: 0x9A1F, + 21508: 0x9A20, + 21509: 0x9A21, + 21510: 0x9A22, + 21511: 0x9A23, + 21512: 0x9A24, + 21513: 0x9A25, + 21514: 0x9A26, + 21515: 0x9A27, + 21516: 0x9A28, + 21517: 0x9A29, + 21518: 0x9A2A, + 21519: 0x9A2B, + 21520: 0x9A2C, + 21521: 0x9A2D, + 21522: 0x9A2E, + 21523: 0x9A2F, + 21524: 0x9A30, + 21525: 0x9A31, + 21526: 0x9A32, + 21527: 0x9A33, + 21528: 0x9A34, + 21529: 0x9A35, + 21530: 0x9A36, + 21531: 0x9A37, + 21532: 0x9A38, + 21533: 0x9A39, + 21534: 0x9A3A, + 21535: 0x9A3B, + 21536: 0x9A3C, + 21537: 0x9A3D, + 21538: 0x9A3E, + 21539: 0x9A3F, + 21540: 0x9A40, + 21541: 0x9A41, + 21542: 0x9A42, + 21543: 0x9A43, + 21544: 0x9A44, + 21545: 0x9A45, + 21546: 0x9A46, + 21547: 0x9A47, + 21548: 0x9A48, + 21549: 0x9A49, + 21550: 0x9A4A, + 21551: 0x9A4B, + 21552: 0x9A4C, + 21553: 0x9A4D, + 21554: 0x9A4E, + 21555: 0x9A4F, + 21556: 0x9A50, + 21557: 0x9A51, + 21558: 0x9A52, + 21559: 0x9A53, + 21560: 0x9A54, + 21561: 0x9A55, + 21562: 0x9A56, + 21563: 0x9A57, + 21564: 0x9A58, + 21565: 0x9A59, + 21566: 0x9889, + 21567: 0x988C, + 21568: 0x988D, + 21569: 0x988F, + 21570: 0x9894, + 21571: 0x989A, + 21572: 0x989B, + 21573: 0x989E, + 21574: 0x989F, + 21575: 0x98A1, + 21576: 0x98A2, + 21577: 0x98A5, + 21578: 0x98A6, + 21579: 0x864D, + 21580: 0x8654, + 21581: 0x866C, + 21582: 0x866E, + 21583: 0x867F, + 21584: 0x867A, + 21585: 0x867C, + 21586: 0x867B, + 21587: 0x86A8, + 21588: 0x868D, + 21589: 0x868B, + 21590: 0x86AC, + 21591: 0x869D, + 21592: 0x86A7, + 21593: 0x86A3, + 21594: 0x86AA, + 21595: 0x8693, + 21596: 0x86A9, + 21597: 0x86B6, + 21598: 0x86C4, + 21599: 0x86B5, + 21600: 0x86CE, + 21601: 0x86B0, + 21602: 0x86BA, + 21603: 0x86B1, + 21604: 0x86AF, + 21605: 0x86C9, + 21606: 0x86CF, + 21607: 0x86B4, + 21608: 0x86E9, + 21609: 0x86F1, + 21610: 0x86F2, + 21611: 0x86ED, + 21612: 0x86F3, + 21613: 0x86D0, + 21614: 0x8713, + 21615: 0x86DE, + 21616: 0x86F4, + 21617: 0x86DF, + 21618: 0x86D8, + 21619: 0x86D1, + 21620: 0x8703, + 21621: 0x8707, + 21622: 0x86F8, + 21623: 0x8708, + 21624: 0x870A, + 21625: 0x870D, + 21626: 0x8709, + 21627: 0x8723, + 21628: 0x873B, + 21629: 0x871E, + 21630: 0x8725, + 21631: 0x872E, + 21632: 0x871A, + 21633: 0x873E, + 21634: 0x8748, + 21635: 0x8734, + 21636: 0x8731, + 21637: 0x8729, + 21638: 0x8737, + 21639: 0x873F, + 21640: 0x8782, + 21641: 0x8722, + 21642: 0x877D, + 21643: 0x877E, + 21644: 0x877B, + 21645: 0x8760, + 21646: 0x8770, + 21647: 0x874C, + 21648: 0x876E, + 21649: 0x878B, + 21650: 0x8753, + 21651: 0x8763, + 21652: 0x877C, + 21653: 0x8764, + 21654: 0x8759, + 21655: 0x8765, + 21656: 0x8793, + 21657: 0x87AF, + 21658: 0x87A8, + 21659: 0x87D2, + 21660: 0x9A5A, + 21661: 0x9A5B, + 21662: 0x9A5C, + 21663: 0x9A5D, + 21664: 0x9A5E, + 21665: 0x9A5F, + 21666: 0x9A60, + 21667: 0x9A61, + 21668: 0x9A62, + 21669: 0x9A63, + 21670: 0x9A64, + 21671: 0x9A65, + 21672: 0x9A66, + 21673: 0x9A67, + 21674: 0x9A68, + 21675: 0x9A69, + 21676: 0x9A6A, + 21677: 0x9A6B, + 21678: 0x9A72, + 21679: 0x9A83, + 21680: 0x9A89, + 21681: 0x9A8D, + 21682: 0x9A8E, + 21683: 0x9A94, + 21684: 0x9A95, + 21685: 0x9A99, + 21686: 0x9AA6, + 21687: 0x9AA9, + 21688: 0x9AAA, + 21689: 0x9AAB, + 21690: 0x9AAC, + 21691: 0x9AAD, + 21692: 0x9AAE, + 21693: 0x9AAF, + 21694: 0x9AB2, + 21695: 0x9AB3, + 21696: 0x9AB4, + 21697: 0x9AB5, + 21698: 0x9AB9, + 21699: 0x9ABB, + 21700: 0x9ABD, + 21701: 0x9ABE, + 21702: 0x9ABF, + 21703: 0x9AC3, + 21704: 0x9AC4, + 21705: 0x9AC6, + 21706: 0x9AC7, + 21707: 0x9AC8, + 21708: 0x9AC9, + 21709: 0x9ACA, + 21710: 0x9ACD, + 21711: 0x9ACE, + 21712: 0x9ACF, + 21713: 0x9AD0, + 21714: 0x9AD2, + 21715: 0x9AD4, + 21716: 0x9AD5, + 21717: 0x9AD6, + 21718: 0x9AD7, + 21719: 0x9AD9, + 21720: 0x9ADA, + 21721: 0x9ADB, + 21722: 0x9ADC, + 21723: 0x9ADD, + 21724: 0x9ADE, + 21725: 0x9AE0, + 21726: 0x9AE2, + 21727: 0x9AE3, + 21728: 0x9AE4, + 21729: 0x9AE5, + 21730: 0x9AE7, + 21731: 0x9AE8, + 21732: 0x9AE9, + 21733: 0x9AEA, + 21734: 0x9AEC, + 21735: 0x9AEE, + 21736: 0x9AF0, + 21737: 0x9AF1, + 21738: 0x9AF2, + 21739: 0x9AF3, + 21740: 0x9AF4, + 21741: 0x9AF5, + 21742: 0x9AF6, + 21743: 0x9AF7, + 21744: 0x9AF8, + 21745: 0x9AFA, + 21746: 0x9AFC, + 21747: 0x9AFD, + 21748: 0x9AFE, + 21749: 0x9AFF, + 21750: 0x9B00, + 21751: 0x9B01, + 21752: 0x9B02, + 21753: 0x9B04, + 21754: 0x9B05, + 21755: 0x9B06, + 21756: 0x87C6, + 21757: 0x8788, + 21758: 0x8785, + 21759: 0x87AD, + 21760: 0x8797, + 21761: 0x8783, + 21762: 0x87AB, + 21763: 0x87E5, + 21764: 0x87AC, + 21765: 0x87B5, + 21766: 0x87B3, + 21767: 0x87CB, + 21768: 0x87D3, + 21769: 0x87BD, + 21770: 0x87D1, + 21771: 0x87C0, + 21772: 0x87CA, + 21773: 0x87DB, + 21774: 0x87EA, + 21775: 0x87E0, + 21776: 0x87EE, + 21777: 0x8816, + 21778: 0x8813, + 21779: 0x87FE, + 21780: 0x880A, + 21781: 0x881B, + 21782: 0x8821, + 21783: 0x8839, + 21784: 0x883C, + 21785: 0x7F36, + 21786: 0x7F42, + 21787: 0x7F44, + 21788: 0x7F45, + 21789: 0x8210, + 21790: 0x7AFA, + 21791: 0x7AFD, + 21792: 0x7B08, + 21793: 0x7B03, + 21794: 0x7B04, + 21795: 0x7B15, + 21796: 0x7B0A, + 21797: 0x7B2B, + 21798: 0x7B0F, + 21799: 0x7B47, + 21800: 0x7B38, + 21801: 0x7B2A, + 21802: 0x7B19, + 21803: 0x7B2E, + 21804: 0x7B31, + 21805: 0x7B20, + 21806: 0x7B25, + 21807: 0x7B24, + 21808: 0x7B33, + 21809: 0x7B3E, + 21810: 0x7B1E, + 21811: 0x7B58, + 21812: 0x7B5A, + 21813: 0x7B45, + 21814: 0x7B75, + 21815: 0x7B4C, + 21816: 0x7B5D, + 21817: 0x7B60, + 21818: 0x7B6E, + 21819: 0x7B7B, + 21820: 0x7B62, + 21821: 0x7B72, + 21822: 0x7B71, + 21823: 0x7B90, + 21824: 0x7BA6, + 21825: 0x7BA7, + 21826: 0x7BB8, + 21827: 0x7BAC, + 21828: 0x7B9D, + 21829: 0x7BA8, + 21830: 0x7B85, + 21831: 0x7BAA, + 21832: 0x7B9C, + 21833: 0x7BA2, + 21834: 0x7BAB, + 21835: 0x7BB4, + 21836: 0x7BD1, + 21837: 0x7BC1, + 21838: 0x7BCC, + 21839: 0x7BDD, + 21840: 0x7BDA, + 21841: 0x7BE5, + 21842: 0x7BE6, + 21843: 0x7BEA, + 21844: 0x7C0C, + 21845: 0x7BFE, + 21846: 0x7BFC, + 21847: 0x7C0F, + 21848: 0x7C16, + 21849: 0x7C0B, + 21850: 0x9B07, + 21851: 0x9B09, + 21852: 0x9B0A, + 21853: 0x9B0B, + 21854: 0x9B0C, + 21855: 0x9B0D, + 21856: 0x9B0E, + 21857: 0x9B10, + 21858: 0x9B11, + 21859: 0x9B12, + 21860: 0x9B14, + 21861: 0x9B15, + 21862: 0x9B16, + 21863: 0x9B17, + 21864: 0x9B18, + 21865: 0x9B19, + 21866: 0x9B1A, + 21867: 0x9B1B, + 21868: 0x9B1C, + 21869: 0x9B1D, + 21870: 0x9B1E, + 21871: 0x9B20, + 21872: 0x9B21, + 21873: 0x9B22, + 21874: 0x9B24, + 21875: 0x9B25, + 21876: 0x9B26, + 21877: 0x9B27, + 21878: 0x9B28, + 21879: 0x9B29, + 21880: 0x9B2A, + 21881: 0x9B2B, + 21882: 0x9B2C, + 21883: 0x9B2D, + 21884: 0x9B2E, + 21885: 0x9B30, + 21886: 0x9B31, + 21887: 0x9B33, + 21888: 0x9B34, + 21889: 0x9B35, + 21890: 0x9B36, + 21891: 0x9B37, + 21892: 0x9B38, + 21893: 0x9B39, + 21894: 0x9B3A, + 21895: 0x9B3D, + 21896: 0x9B3E, + 21897: 0x9B3F, + 21898: 0x9B40, + 21899: 0x9B46, + 21900: 0x9B4A, + 21901: 0x9B4B, + 21902: 0x9B4C, + 21903: 0x9B4E, + 21904: 0x9B50, + 21905: 0x9B52, + 21906: 0x9B53, + 21907: 0x9B55, + 21908: 0x9B56, + 21909: 0x9B57, + 21910: 0x9B58, + 21911: 0x9B59, + 21912: 0x9B5A, + 21913: 0x9B5B, + 21914: 0x9B5C, + 21915: 0x9B5D, + 21916: 0x9B5E, + 21917: 0x9B5F, + 21918: 0x9B60, + 21919: 0x9B61, + 21920: 0x9B62, + 21921: 0x9B63, + 21922: 0x9B64, + 21923: 0x9B65, + 21924: 0x9B66, + 21925: 0x9B67, + 21926: 0x9B68, + 21927: 0x9B69, + 21928: 0x9B6A, + 21929: 0x9B6B, + 21930: 0x9B6C, + 21931: 0x9B6D, + 21932: 0x9B6E, + 21933: 0x9B6F, + 21934: 0x9B70, + 21935: 0x9B71, + 21936: 0x9B72, + 21937: 0x9B73, + 21938: 0x9B74, + 21939: 0x9B75, + 21940: 0x9B76, + 21941: 0x9B77, + 21942: 0x9B78, + 21943: 0x9B79, + 21944: 0x9B7A, + 21945: 0x9B7B, + 21946: 0x7C1F, + 21947: 0x7C2A, + 21948: 0x7C26, + 21949: 0x7C38, + 21950: 0x7C41, + 21951: 0x7C40, + 21952: 0x81FE, + 21953: 0x8201, + 21954: 0x8202, + 21955: 0x8204, + 21956: 0x81EC, + 21957: 0x8844, + 21958: 0x8221, + 21959: 0x8222, + 21960: 0x8223, + 21961: 0x822D, + 21962: 0x822F, + 21963: 0x8228, + 21964: 0x822B, + 21965: 0x8238, + 21966: 0x823B, + 21967: 0x8233, + 21968: 0x8234, + 21969: 0x823E, + 21970: 0x8244, + 21971: 0x8249, + 21972: 0x824B, + 21973: 0x824F, + 21974: 0x825A, + 21975: 0x825F, + 21976: 0x8268, + 21977: 0x887E, + 21978: 0x8885, + 21979: 0x8888, + 21980: 0x88D8, + 21981: 0x88DF, + 21982: 0x895E, + 21983: 0x7F9D, + 21984: 0x7F9F, + 21985: 0x7FA7, + 21986: 0x7FAF, + 21987: 0x7FB0, + 21988: 0x7FB2, + 21989: 0x7C7C, + 21990: 0x6549, + 21991: 0x7C91, + 21992: 0x7C9D, + 21993: 0x7C9C, + 21994: 0x7C9E, + 21995: 0x7CA2, + 21996: 0x7CB2, + 21997: 0x7CBC, + 21998: 0x7CBD, + 21999: 0x7CC1, + 22000: 0x7CC7, + 22001: 0x7CCC, + 22002: 0x7CCD, + 22003: 0x7CC8, + 22004: 0x7CC5, + 22005: 0x7CD7, + 22006: 0x7CE8, + 22007: 0x826E, + 22008: 0x66A8, + 22009: 0x7FBF, + 22010: 0x7FCE, + 22011: 0x7FD5, + 22012: 0x7FE5, + 22013: 0x7FE1, + 22014: 0x7FE6, + 22015: 0x7FE9, + 22016: 0x7FEE, + 22017: 0x7FF3, + 22018: 0x7CF8, + 22019: 0x7D77, + 22020: 0x7DA6, + 22021: 0x7DAE, + 22022: 0x7E47, + 22023: 0x7E9B, + 22024: 0x9EB8, + 22025: 0x9EB4, + 22026: 0x8D73, + 22027: 0x8D84, + 22028: 0x8D94, + 22029: 0x8D91, + 22030: 0x8DB1, + 22031: 0x8D67, + 22032: 0x8D6D, + 22033: 0x8C47, + 22034: 0x8C49, + 22035: 0x914A, + 22036: 0x9150, + 22037: 0x914E, + 22038: 0x914F, + 22039: 0x9164, + 22040: 0x9B7C, + 22041: 0x9B7D, + 22042: 0x9B7E, + 22043: 0x9B7F, + 22044: 0x9B80, + 22045: 0x9B81, + 22046: 0x9B82, + 22047: 0x9B83, + 22048: 0x9B84, + 22049: 0x9B85, + 22050: 0x9B86, + 22051: 0x9B87, + 22052: 0x9B88, + 22053: 0x9B89, + 22054: 0x9B8A, + 22055: 0x9B8B, + 22056: 0x9B8C, + 22057: 0x9B8D, + 22058: 0x9B8E, + 22059: 0x9B8F, + 22060: 0x9B90, + 22061: 0x9B91, + 22062: 0x9B92, + 22063: 0x9B93, + 22064: 0x9B94, + 22065: 0x9B95, + 22066: 0x9B96, + 22067: 0x9B97, + 22068: 0x9B98, + 22069: 0x9B99, + 22070: 0x9B9A, + 22071: 0x9B9B, + 22072: 0x9B9C, + 22073: 0x9B9D, + 22074: 0x9B9E, + 22075: 0x9B9F, + 22076: 0x9BA0, + 22077: 0x9BA1, + 22078: 0x9BA2, + 22079: 0x9BA3, + 22080: 0x9BA4, + 22081: 0x9BA5, + 22082: 0x9BA6, + 22083: 0x9BA7, + 22084: 0x9BA8, + 22085: 0x9BA9, + 22086: 0x9BAA, + 22087: 0x9BAB, + 22088: 0x9BAC, + 22089: 0x9BAD, + 22090: 0x9BAE, + 22091: 0x9BAF, + 22092: 0x9BB0, + 22093: 0x9BB1, + 22094: 0x9BB2, + 22095: 0x9BB3, + 22096: 0x9BB4, + 22097: 0x9BB5, + 22098: 0x9BB6, + 22099: 0x9BB7, + 22100: 0x9BB8, + 22101: 0x9BB9, + 22102: 0x9BBA, + 22103: 0x9BBB, + 22104: 0x9BBC, + 22105: 0x9BBD, + 22106: 0x9BBE, + 22107: 0x9BBF, + 22108: 0x9BC0, + 22109: 0x9BC1, + 22110: 0x9BC2, + 22111: 0x9BC3, + 22112: 0x9BC4, + 22113: 0x9BC5, + 22114: 0x9BC6, + 22115: 0x9BC7, + 22116: 0x9BC8, + 22117: 0x9BC9, + 22118: 0x9BCA, + 22119: 0x9BCB, + 22120: 0x9BCC, + 22121: 0x9BCD, + 22122: 0x9BCE, + 22123: 0x9BCF, + 22124: 0x9BD0, + 22125: 0x9BD1, + 22126: 0x9BD2, + 22127: 0x9BD3, + 22128: 0x9BD4, + 22129: 0x9BD5, + 22130: 0x9BD6, + 22131: 0x9BD7, + 22132: 0x9BD8, + 22133: 0x9BD9, + 22134: 0x9BDA, + 22135: 0x9BDB, + 22136: 0x9162, + 22137: 0x9161, + 22138: 0x9170, + 22139: 0x9169, + 22140: 0x916F, + 22141: 0x917D, + 22142: 0x917E, + 22143: 0x9172, + 22144: 0x9174, + 22145: 0x9179, + 22146: 0x918C, + 22147: 0x9185, + 22148: 0x9190, + 22149: 0x918D, + 22150: 0x9191, + 22151: 0x91A2, + 22152: 0x91A3, + 22153: 0x91AA, + 22154: 0x91AD, + 22155: 0x91AE, + 22156: 0x91AF, + 22157: 0x91B5, + 22158: 0x91B4, + 22159: 0x91BA, + 22160: 0x8C55, + 22161: 0x9E7E, + 22162: 0x8DB8, + 22163: 0x8DEB, + 22164: 0x8E05, + 22165: 0x8E59, + 22166: 0x8E69, + 22167: 0x8DB5, + 22168: 0x8DBF, + 22169: 0x8DBC, + 22170: 0x8DBA, + 22171: 0x8DC4, + 22172: 0x8DD6, + 22173: 0x8DD7, + 22174: 0x8DDA, + 22175: 0x8DDE, + 22176: 0x8DCE, + 22177: 0x8DCF, + 22178: 0x8DDB, + 22179: 0x8DC6, + 22180: 0x8DEC, + 22181: 0x8DF7, + 22182: 0x8DF8, + 22183: 0x8DE3, + 22184: 0x8DF9, + 22185: 0x8DFB, + 22186: 0x8DE4, + 22187: 0x8E09, + 22188: 0x8DFD, + 22189: 0x8E14, + 22190: 0x8E1D, + 22191: 0x8E1F, + 22192: 0x8E2C, + 22193: 0x8E2E, + 22194: 0x8E23, + 22195: 0x8E2F, + 22196: 0x8E3A, + 22197: 0x8E40, + 22198: 0x8E39, + 22199: 0x8E35, + 22200: 0x8E3D, + 22201: 0x8E31, + 22202: 0x8E49, + 22203: 0x8E41, + 22204: 0x8E42, + 22205: 0x8E51, + 22206: 0x8E52, + 22207: 0x8E4A, + 22208: 0x8E70, + 22209: 0x8E76, + 22210: 0x8E7C, + 22211: 0x8E6F, + 22212: 0x8E74, + 22213: 0x8E85, + 22214: 0x8E8F, + 22215: 0x8E94, + 22216: 0x8E90, + 22217: 0x8E9C, + 22218: 0x8E9E, + 22219: 0x8C78, + 22220: 0x8C82, + 22221: 0x8C8A, + 22222: 0x8C85, + 22223: 0x8C98, + 22224: 0x8C94, + 22225: 0x659B, + 22226: 0x89D6, + 22227: 0x89DE, + 22228: 0x89DA, + 22229: 0x89DC, + 22230: 0x9BDC, + 22231: 0x9BDD, + 22232: 0x9BDE, + 22233: 0x9BDF, + 22234: 0x9BE0, + 22235: 0x9BE1, + 22236: 0x9BE2, + 22237: 0x9BE3, + 22238: 0x9BE4, + 22239: 0x9BE5, + 22240: 0x9BE6, + 22241: 0x9BE7, + 22242: 0x9BE8, + 22243: 0x9BE9, + 22244: 0x9BEA, + 22245: 0x9BEB, + 22246: 0x9BEC, + 22247: 0x9BED, + 22248: 0x9BEE, + 22249: 0x9BEF, + 22250: 0x9BF0, + 22251: 0x9BF1, + 22252: 0x9BF2, + 22253: 0x9BF3, + 22254: 0x9BF4, + 22255: 0x9BF5, + 22256: 0x9BF6, + 22257: 0x9BF7, + 22258: 0x9BF8, + 22259: 0x9BF9, + 22260: 0x9BFA, + 22261: 0x9BFB, + 22262: 0x9BFC, + 22263: 0x9BFD, + 22264: 0x9BFE, + 22265: 0x9BFF, + 22266: 0x9C00, + 22267: 0x9C01, + 22268: 0x9C02, + 22269: 0x9C03, + 22270: 0x9C04, + 22271: 0x9C05, + 22272: 0x9C06, + 22273: 0x9C07, + 22274: 0x9C08, + 22275: 0x9C09, + 22276: 0x9C0A, + 22277: 0x9C0B, + 22278: 0x9C0C, + 22279: 0x9C0D, + 22280: 0x9C0E, + 22281: 0x9C0F, + 22282: 0x9C10, + 22283: 0x9C11, + 22284: 0x9C12, + 22285: 0x9C13, + 22286: 0x9C14, + 22287: 0x9C15, + 22288: 0x9C16, + 22289: 0x9C17, + 22290: 0x9C18, + 22291: 0x9C19, + 22292: 0x9C1A, + 22293: 0x9C1B, + 22294: 0x9C1C, + 22295: 0x9C1D, + 22296: 0x9C1E, + 22297: 0x9C1F, + 22298: 0x9C20, + 22299: 0x9C21, + 22300: 0x9C22, + 22301: 0x9C23, + 22302: 0x9C24, + 22303: 0x9C25, + 22304: 0x9C26, + 22305: 0x9C27, + 22306: 0x9C28, + 22307: 0x9C29, + 22308: 0x9C2A, + 22309: 0x9C2B, + 22310: 0x9C2C, + 22311: 0x9C2D, + 22312: 0x9C2E, + 22313: 0x9C2F, + 22314: 0x9C30, + 22315: 0x9C31, + 22316: 0x9C32, + 22317: 0x9C33, + 22318: 0x9C34, + 22319: 0x9C35, + 22320: 0x9C36, + 22321: 0x9C37, + 22322: 0x9C38, + 22323: 0x9C39, + 22324: 0x9C3A, + 22325: 0x9C3B, + 22326: 0x89E5, + 22327: 0x89EB, + 22328: 0x89EF, + 22329: 0x8A3E, + 22330: 0x8B26, + 22331: 0x9753, + 22332: 0x96E9, + 22333: 0x96F3, + 22334: 0x96EF, + 22335: 0x9706, + 22336: 0x9701, + 22337: 0x9708, + 22338: 0x970F, + 22339: 0x970E, + 22340: 0x972A, + 22341: 0x972D, + 22342: 0x9730, + 22343: 0x973E, + 22344: 0x9F80, + 22345: 0x9F83, + 22346: 0x9F85, + 22347: 0x9F86, + 22348: 0x9F87, + 22349: 0x9F88, + 22350: 0x9F89, + 22351: 0x9F8A, + 22352: 0x9F8C, + 22353: 0x9EFE, + 22354: 0x9F0B, + 22355: 0x9F0D, + 22356: 0x96B9, + 22357: 0x96BC, + 22358: 0x96BD, + 22359: 0x96CE, + 22360: 0x96D2, + 22361: 0x77BF, + 22362: 0x96E0, + 22363: 0x928E, + 22364: 0x92AE, + 22365: 0x92C8, + 22366: 0x933E, + 22367: 0x936A, + 22368: 0x93CA, + 22369: 0x938F, + 22370: 0x943E, + 22371: 0x946B, + 22372: 0x9C7F, + 22373: 0x9C82, + 22374: 0x9C85, + 22375: 0x9C86, + 22376: 0x9C87, + 22377: 0x9C88, + 22378: 0x7A23, + 22379: 0x9C8B, + 22380: 0x9C8E, + 22381: 0x9C90, + 22382: 0x9C91, + 22383: 0x9C92, + 22384: 0x9C94, + 22385: 0x9C95, + 22386: 0x9C9A, + 22387: 0x9C9B, + 22388: 0x9C9E, + 22389: 0x9C9F, + 22390: 0x9CA0, + 22391: 0x9CA1, + 22392: 0x9CA2, + 22393: 0x9CA3, + 22394: 0x9CA5, + 22395: 0x9CA6, + 22396: 0x9CA7, + 22397: 0x9CA8, + 22398: 0x9CA9, + 22399: 0x9CAB, + 22400: 0x9CAD, + 22401: 0x9CAE, + 22402: 0x9CB0, + 22403: 0x9CB1, + 22404: 0x9CB2, + 22405: 0x9CB3, + 22406: 0x9CB4, + 22407: 0x9CB5, + 22408: 0x9CB6, + 22409: 0x9CB7, + 22410: 0x9CBA, + 22411: 0x9CBB, + 22412: 0x9CBC, + 22413: 0x9CBD, + 22414: 0x9CC4, + 22415: 0x9CC5, + 22416: 0x9CC6, + 22417: 0x9CC7, + 22418: 0x9CCA, + 22419: 0x9CCB, + 22420: 0x9C3C, + 22421: 0x9C3D, + 22422: 0x9C3E, + 22423: 0x9C3F, + 22424: 0x9C40, + 22425: 0x9C41, + 22426: 0x9C42, + 22427: 0x9C43, + 22428: 0x9C44, + 22429: 0x9C45, + 22430: 0x9C46, + 22431: 0x9C47, + 22432: 0x9C48, + 22433: 0x9C49, + 22434: 0x9C4A, + 22435: 0x9C4B, + 22436: 0x9C4C, + 22437: 0x9C4D, + 22438: 0x9C4E, + 22439: 0x9C4F, + 22440: 0x9C50, + 22441: 0x9C51, + 22442: 0x9C52, + 22443: 0x9C53, + 22444: 0x9C54, + 22445: 0x9C55, + 22446: 0x9C56, + 22447: 0x9C57, + 22448: 0x9C58, + 22449: 0x9C59, + 22450: 0x9C5A, + 22451: 0x9C5B, + 22452: 0x9C5C, + 22453: 0x9C5D, + 22454: 0x9C5E, + 22455: 0x9C5F, + 22456: 0x9C60, + 22457: 0x9C61, + 22458: 0x9C62, + 22459: 0x9C63, + 22460: 0x9C64, + 22461: 0x9C65, + 22462: 0x9C66, + 22463: 0x9C67, + 22464: 0x9C68, + 22465: 0x9C69, + 22466: 0x9C6A, + 22467: 0x9C6B, + 22468: 0x9C6C, + 22469: 0x9C6D, + 22470: 0x9C6E, + 22471: 0x9C6F, + 22472: 0x9C70, + 22473: 0x9C71, + 22474: 0x9C72, + 22475: 0x9C73, + 22476: 0x9C74, + 22477: 0x9C75, + 22478: 0x9C76, + 22479: 0x9C77, + 22480: 0x9C78, + 22481: 0x9C79, + 22482: 0x9C7A, + 22483: 0x9C7B, + 22484: 0x9C7D, + 22485: 0x9C7E, + 22486: 0x9C80, + 22487: 0x9C83, + 22488: 0x9C84, + 22489: 0x9C89, + 22490: 0x9C8A, + 22491: 0x9C8C, + 22492: 0x9C8F, + 22493: 0x9C93, + 22494: 0x9C96, + 22495: 0x9C97, + 22496: 0x9C98, + 22497: 0x9C99, + 22498: 0x9C9D, + 22499: 0x9CAA, + 22500: 0x9CAC, + 22501: 0x9CAF, + 22502: 0x9CB9, + 22503: 0x9CBE, + 22504: 0x9CBF, + 22505: 0x9CC0, + 22506: 0x9CC1, + 22507: 0x9CC2, + 22508: 0x9CC8, + 22509: 0x9CC9, + 22510: 0x9CD1, + 22511: 0x9CD2, + 22512: 0x9CDA, + 22513: 0x9CDB, + 22514: 0x9CE0, + 22515: 0x9CE1, + 22516: 0x9CCC, + 22517: 0x9CCD, + 22518: 0x9CCE, + 22519: 0x9CCF, + 22520: 0x9CD0, + 22521: 0x9CD3, + 22522: 0x9CD4, + 22523: 0x9CD5, + 22524: 0x9CD7, + 22525: 0x9CD8, + 22526: 0x9CD9, + 22527: 0x9CDC, + 22528: 0x9CDD, + 22529: 0x9CDF, + 22530: 0x9CE2, + 22531: 0x977C, + 22532: 0x9785, + 22533: 0x9791, + 22534: 0x9792, + 22535: 0x9794, + 22536: 0x97AF, + 22537: 0x97AB, + 22538: 0x97A3, + 22539: 0x97B2, + 22540: 0x97B4, + 22541: 0x9AB1, + 22542: 0x9AB0, + 22543: 0x9AB7, + 22544: 0x9E58, + 22545: 0x9AB6, + 22546: 0x9ABA, + 22547: 0x9ABC, + 22548: 0x9AC1, + 22549: 0x9AC0, + 22550: 0x9AC5, + 22551: 0x9AC2, + 22552: 0x9ACB, + 22553: 0x9ACC, + 22554: 0x9AD1, + 22555: 0x9B45, + 22556: 0x9B43, + 22557: 0x9B47, + 22558: 0x9B49, + 22559: 0x9B48, + 22560: 0x9B4D, + 22561: 0x9B51, + 22562: 0x98E8, + 22563: 0x990D, + 22564: 0x992E, + 22565: 0x9955, + 22566: 0x9954, + 22567: 0x9ADF, + 22568: 0x9AE1, + 22569: 0x9AE6, + 22570: 0x9AEF, + 22571: 0x9AEB, + 22572: 0x9AFB, + 22573: 0x9AED, + 22574: 0x9AF9, + 22575: 0x9B08, + 22576: 0x9B0F, + 22577: 0x9B13, + 22578: 0x9B1F, + 22579: 0x9B23, + 22580: 0x9EBD, + 22581: 0x9EBE, + 22582: 0x7E3B, + 22583: 0x9E82, + 22584: 0x9E87, + 22585: 0x9E88, + 22586: 0x9E8B, + 22587: 0x9E92, + 22588: 0x93D6, + 22589: 0x9E9D, + 22590: 0x9E9F, + 22591: 0x9EDB, + 22592: 0x9EDC, + 22593: 0x9EDD, + 22594: 0x9EE0, + 22595: 0x9EDF, + 22596: 0x9EE2, + 22597: 0x9EE9, + 22598: 0x9EE7, + 22599: 0x9EE5, + 22600: 0x9EEA, + 22601: 0x9EEF, + 22602: 0x9F22, + 22603: 0x9F2C, + 22604: 0x9F2F, + 22605: 0x9F39, + 22606: 0x9F37, + 22607: 0x9F3D, + 22608: 0x9F3E, + 22609: 0x9F44, + 22610: 0x9CE3, + 22611: 0x9CE4, + 22612: 0x9CE5, + 22613: 0x9CE6, + 22614: 0x9CE7, + 22615: 0x9CE8, + 22616: 0x9CE9, + 22617: 0x9CEA, + 22618: 0x9CEB, + 22619: 0x9CEC, + 22620: 0x9CED, + 22621: 0x9CEE, + 22622: 0x9CEF, + 22623: 0x9CF0, + 22624: 0x9CF1, + 22625: 0x9CF2, + 22626: 0x9CF3, + 22627: 0x9CF4, + 22628: 0x9CF5, + 22629: 0x9CF6, + 22630: 0x9CF7, + 22631: 0x9CF8, + 22632: 0x9CF9, + 22633: 0x9CFA, + 22634: 0x9CFB, + 22635: 0x9CFC, + 22636: 0x9CFD, + 22637: 0x9CFE, + 22638: 0x9CFF, + 22639: 0x9D00, + 22640: 0x9D01, + 22641: 0x9D02, + 22642: 0x9D03, + 22643: 0x9D04, + 22644: 0x9D05, + 22645: 0x9D06, + 22646: 0x9D07, + 22647: 0x9D08, + 22648: 0x9D09, + 22649: 0x9D0A, + 22650: 0x9D0B, + 22651: 0x9D0C, + 22652: 0x9D0D, + 22653: 0x9D0E, + 22654: 0x9D0F, + 22655: 0x9D10, + 22656: 0x9D11, + 22657: 0x9D12, + 22658: 0x9D13, + 22659: 0x9D14, + 22660: 0x9D15, + 22661: 0x9D16, + 22662: 0x9D17, + 22663: 0x9D18, + 22664: 0x9D19, + 22665: 0x9D1A, + 22666: 0x9D1B, + 22667: 0x9D1C, + 22668: 0x9D1D, + 22669: 0x9D1E, + 22670: 0x9D1F, + 22671: 0x9D20, + 22672: 0x9D21, + 22673: 0x9D22, + 22674: 0x9D23, + 22675: 0x9D24, + 22676: 0x9D25, + 22677: 0x9D26, + 22678: 0x9D27, + 22679: 0x9D28, + 22680: 0x9D29, + 22681: 0x9D2A, + 22682: 0x9D2B, + 22683: 0x9D2C, + 22684: 0x9D2D, + 22685: 0x9D2E, + 22686: 0x9D2F, + 22687: 0x9D30, + 22688: 0x9D31, + 22689: 0x9D32, + 22690: 0x9D33, + 22691: 0x9D34, + 22692: 0x9D35, + 22693: 0x9D36, + 22694: 0x9D37, + 22695: 0x9D38, + 22696: 0x9D39, + 22697: 0x9D3A, + 22698: 0x9D3B, + 22699: 0x9D3C, + 22700: 0x9D3D, + 22701: 0x9D3E, + 22702: 0x9D3F, + 22703: 0x9D40, + 22704: 0x9D41, + 22705: 0x9D42, + 22800: 0x9D43, + 22801: 0x9D44, + 22802: 0x9D45, + 22803: 0x9D46, + 22804: 0x9D47, + 22805: 0x9D48, + 22806: 0x9D49, + 22807: 0x9D4A, + 22808: 0x9D4B, + 22809: 0x9D4C, + 22810: 0x9D4D, + 22811: 0x9D4E, + 22812: 0x9D4F, + 22813: 0x9D50, + 22814: 0x9D51, + 22815: 0x9D52, + 22816: 0x9D53, + 22817: 0x9D54, + 22818: 0x9D55, + 22819: 0x9D56, + 22820: 0x9D57, + 22821: 0x9D58, + 22822: 0x9D59, + 22823: 0x9D5A, + 22824: 0x9D5B, + 22825: 0x9D5C, + 22826: 0x9D5D, + 22827: 0x9D5E, + 22828: 0x9D5F, + 22829: 0x9D60, + 22830: 0x9D61, + 22831: 0x9D62, + 22832: 0x9D63, + 22833: 0x9D64, + 22834: 0x9D65, + 22835: 0x9D66, + 22836: 0x9D67, + 22837: 0x9D68, + 22838: 0x9D69, + 22839: 0x9D6A, + 22840: 0x9D6B, + 22841: 0x9D6C, + 22842: 0x9D6D, + 22843: 0x9D6E, + 22844: 0x9D6F, + 22845: 0x9D70, + 22846: 0x9D71, + 22847: 0x9D72, + 22848: 0x9D73, + 22849: 0x9D74, + 22850: 0x9D75, + 22851: 0x9D76, + 22852: 0x9D77, + 22853: 0x9D78, + 22854: 0x9D79, + 22855: 0x9D7A, + 22856: 0x9D7B, + 22857: 0x9D7C, + 22858: 0x9D7D, + 22859: 0x9D7E, + 22860: 0x9D7F, + 22861: 0x9D80, + 22862: 0x9D81, + 22863: 0x9D82, + 22864: 0x9D83, + 22865: 0x9D84, + 22866: 0x9D85, + 22867: 0x9D86, + 22868: 0x9D87, + 22869: 0x9D88, + 22870: 0x9D89, + 22871: 0x9D8A, + 22872: 0x9D8B, + 22873: 0x9D8C, + 22874: 0x9D8D, + 22875: 0x9D8E, + 22876: 0x9D8F, + 22877: 0x9D90, + 22878: 0x9D91, + 22879: 0x9D92, + 22880: 0x9D93, + 22881: 0x9D94, + 22882: 0x9D95, + 22883: 0x9D96, + 22884: 0x9D97, + 22885: 0x9D98, + 22886: 0x9D99, + 22887: 0x9D9A, + 22888: 0x9D9B, + 22889: 0x9D9C, + 22890: 0x9D9D, + 22891: 0x9D9E, + 22892: 0x9D9F, + 22893: 0x9DA0, + 22894: 0x9DA1, + 22895: 0x9DA2, + 22990: 0x9DA3, + 22991: 0x9DA4, + 22992: 0x9DA5, + 22993: 0x9DA6, + 22994: 0x9DA7, + 22995: 0x9DA8, + 22996: 0x9DA9, + 22997: 0x9DAA, + 22998: 0x9DAB, + 22999: 0x9DAC, + 23000: 0x9DAD, + 23001: 0x9DAE, + 23002: 0x9DAF, + 23003: 0x9DB0, + 23004: 0x9DB1, + 23005: 0x9DB2, + 23006: 0x9DB3, + 23007: 0x9DB4, + 23008: 0x9DB5, + 23009: 0x9DB6, + 23010: 0x9DB7, + 23011: 0x9DB8, + 23012: 0x9DB9, + 23013: 0x9DBA, + 23014: 0x9DBB, + 23015: 0x9DBC, + 23016: 0x9DBD, + 23017: 0x9DBE, + 23018: 0x9DBF, + 23019: 0x9DC0, + 23020: 0x9DC1, + 23021: 0x9DC2, + 23022: 0x9DC3, + 23023: 0x9DC4, + 23024: 0x9DC5, + 23025: 0x9DC6, + 23026: 0x9DC7, + 23027: 0x9DC8, + 23028: 0x9DC9, + 23029: 0x9DCA, + 23030: 0x9DCB, + 23031: 0x9DCC, + 23032: 0x9DCD, + 23033: 0x9DCE, + 23034: 0x9DCF, + 23035: 0x9DD0, + 23036: 0x9DD1, + 23037: 0x9DD2, + 23038: 0x9DD3, + 23039: 0x9DD4, + 23040: 0x9DD5, + 23041: 0x9DD6, + 23042: 0x9DD7, + 23043: 0x9DD8, + 23044: 0x9DD9, + 23045: 0x9DDA, + 23046: 0x9DDB, + 23047: 0x9DDC, + 23048: 0x9DDD, + 23049: 0x9DDE, + 23050: 0x9DDF, + 23051: 0x9DE0, + 23052: 0x9DE1, + 23053: 0x9DE2, + 23054: 0x9DE3, + 23055: 0x9DE4, + 23056: 0x9DE5, + 23057: 0x9DE6, + 23058: 0x9DE7, + 23059: 0x9DE8, + 23060: 0x9DE9, + 23061: 0x9DEA, + 23062: 0x9DEB, + 23063: 0x9DEC, + 23064: 0x9DED, + 23065: 0x9DEE, + 23066: 0x9DEF, + 23067: 0x9DF0, + 23068: 0x9DF1, + 23069: 0x9DF2, + 23070: 0x9DF3, + 23071: 0x9DF4, + 23072: 0x9DF5, + 23073: 0x9DF6, + 23074: 0x9DF7, + 23075: 0x9DF8, + 23076: 0x9DF9, + 23077: 0x9DFA, + 23078: 0x9DFB, + 23079: 0x9DFC, + 23080: 0x9DFD, + 23081: 0x9DFE, + 23082: 0x9DFF, + 23083: 0x9E00, + 23084: 0x9E01, + 23085: 0x9E02, + 23180: 0x9E03, + 23181: 0x9E04, + 23182: 0x9E05, + 23183: 0x9E06, + 23184: 0x9E07, + 23185: 0x9E08, + 23186: 0x9E09, + 23187: 0x9E0A, + 23188: 0x9E0B, + 23189: 0x9E0C, + 23190: 0x9E0D, + 23191: 0x9E0E, + 23192: 0x9E0F, + 23193: 0x9E10, + 23194: 0x9E11, + 23195: 0x9E12, + 23196: 0x9E13, + 23197: 0x9E14, + 23198: 0x9E15, + 23199: 0x9E16, + 23200: 0x9E17, + 23201: 0x9E18, + 23202: 0x9E19, + 23203: 0x9E1A, + 23204: 0x9E1B, + 23205: 0x9E1C, + 23206: 0x9E1D, + 23207: 0x9E1E, + 23208: 0x9E24, + 23209: 0x9E27, + 23210: 0x9E2E, + 23211: 0x9E30, + 23212: 0x9E34, + 23213: 0x9E3B, + 23214: 0x9E3C, + 23215: 0x9E40, + 23216: 0x9E4D, + 23217: 0x9E50, + 23218: 0x9E52, + 23219: 0x9E53, + 23220: 0x9E54, + 23221: 0x9E56, + 23222: 0x9E59, + 23223: 0x9E5D, + 23224: 0x9E5F, + 23225: 0x9E60, + 23226: 0x9E61, + 23227: 0x9E62, + 23228: 0x9E65, + 23229: 0x9E6E, + 23230: 0x9E6F, + 23231: 0x9E72, + 23232: 0x9E74, + 23233: 0x9E75, + 23234: 0x9E76, + 23235: 0x9E77, + 23236: 0x9E78, + 23237: 0x9E79, + 23238: 0x9E7A, + 23239: 0x9E7B, + 23240: 0x9E7C, + 23241: 0x9E7D, + 23242: 0x9E80, + 23243: 0x9E81, + 23244: 0x9E83, + 23245: 0x9E84, + 23246: 0x9E85, + 23247: 0x9E86, + 23248: 0x9E89, + 23249: 0x9E8A, + 23250: 0x9E8C, + 23251: 0x9E8D, + 23252: 0x9E8E, + 23253: 0x9E8F, + 23254: 0x9E90, + 23255: 0x9E91, + 23256: 0x9E94, + 23257: 0x9E95, + 23258: 0x9E96, + 23259: 0x9E97, + 23260: 0x9E98, + 23261: 0x9E99, + 23262: 0x9E9A, + 23263: 0x9E9B, + 23264: 0x9E9C, + 23265: 0x9E9E, + 23266: 0x9EA0, + 23267: 0x9EA1, + 23268: 0x9EA2, + 23269: 0x9EA3, + 23270: 0x9EA4, + 23271: 0x9EA5, + 23272: 0x9EA7, + 23273: 0x9EA8, + 23274: 0x9EA9, + 23275: 0x9EAA, + 23370: 0x9EAB, + 23371: 0x9EAC, + 23372: 0x9EAD, + 23373: 0x9EAE, + 23374: 0x9EAF, + 23375: 0x9EB0, + 23376: 0x9EB1, + 23377: 0x9EB2, + 23378: 0x9EB3, + 23379: 0x9EB5, + 23380: 0x9EB6, + 23381: 0x9EB7, + 23382: 0x9EB9, + 23383: 0x9EBA, + 23384: 0x9EBC, + 23385: 0x9EBF, + 23386: 0x9EC0, + 23387: 0x9EC1, + 23388: 0x9EC2, + 23389: 0x9EC3, + 23390: 0x9EC5, + 23391: 0x9EC6, + 23392: 0x9EC7, + 23393: 0x9EC8, + 23394: 0x9ECA, + 23395: 0x9ECB, + 23396: 0x9ECC, + 23397: 0x9ED0, + 23398: 0x9ED2, + 23399: 0x9ED3, + 23400: 0x9ED5, + 23401: 0x9ED6, + 23402: 0x9ED7, + 23403: 0x9ED9, + 23404: 0x9EDA, + 23405: 0x9EDE, + 23406: 0x9EE1, + 23407: 0x9EE3, + 23408: 0x9EE4, + 23409: 0x9EE6, + 23410: 0x9EE8, + 23411: 0x9EEB, + 23412: 0x9EEC, + 23413: 0x9EED, + 23414: 0x9EEE, + 23415: 0x9EF0, + 23416: 0x9EF1, + 23417: 0x9EF2, + 23418: 0x9EF3, + 23419: 0x9EF4, + 23420: 0x9EF5, + 23421: 0x9EF6, + 23422: 0x9EF7, + 23423: 0x9EF8, + 23424: 0x9EFA, + 23425: 0x9EFD, + 23426: 0x9EFF, + 23427: 0x9F00, + 23428: 0x9F01, + 23429: 0x9F02, + 23430: 0x9F03, + 23431: 0x9F04, + 23432: 0x9F05, + 23433: 0x9F06, + 23434: 0x9F07, + 23435: 0x9F08, + 23436: 0x9F09, + 23437: 0x9F0A, + 23438: 0x9F0C, + 23439: 0x9F0F, + 23440: 0x9F11, + 23441: 0x9F12, + 23442: 0x9F14, + 23443: 0x9F15, + 23444: 0x9F16, + 23445: 0x9F18, + 23446: 0x9F1A, + 23447: 0x9F1B, + 23448: 0x9F1C, + 23449: 0x9F1D, + 23450: 0x9F1E, + 23451: 0x9F1F, + 23452: 0x9F21, + 23453: 0x9F23, + 23454: 0x9F24, + 23455: 0x9F25, + 23456: 0x9F26, + 23457: 0x9F27, + 23458: 0x9F28, + 23459: 0x9F29, + 23460: 0x9F2A, + 23461: 0x9F2B, + 23462: 0x9F2D, + 23463: 0x9F2E, + 23464: 0x9F30, + 23465: 0x9F31, + 23560: 0x9F32, + 23561: 0x9F33, + 23562: 0x9F34, + 23563: 0x9F35, + 23564: 0x9F36, + 23565: 0x9F38, + 23566: 0x9F3A, + 23567: 0x9F3C, + 23568: 0x9F3F, + 23569: 0x9F40, + 23570: 0x9F41, + 23571: 0x9F42, + 23572: 0x9F43, + 23573: 0x9F45, + 23574: 0x9F46, + 23575: 0x9F47, + 23576: 0x9F48, + 23577: 0x9F49, + 23578: 0x9F4A, + 23579: 0x9F4B, + 23580: 0x9F4C, + 23581: 0x9F4D, + 23582: 0x9F4E, + 23583: 0x9F4F, + 23584: 0x9F52, + 23585: 0x9F53, + 23586: 0x9F54, + 23587: 0x9F55, + 23588: 0x9F56, + 23589: 0x9F57, + 23590: 0x9F58, + 23591: 0x9F59, + 23592: 0x9F5A, + 23593: 0x9F5B, + 23594: 0x9F5C, + 23595: 0x9F5D, + 23596: 0x9F5E, + 23597: 0x9F5F, + 23598: 0x9F60, + 23599: 0x9F61, + 23600: 0x9F62, + 23601: 0x9F63, + 23602: 0x9F64, + 23603: 0x9F65, + 23604: 0x9F66, + 23605: 0x9F67, + 23606: 0x9F68, + 23607: 0x9F69, + 23608: 0x9F6A, + 23609: 0x9F6B, + 23610: 0x9F6C, + 23611: 0x9F6D, + 23612: 0x9F6E, + 23613: 0x9F6F, + 23614: 0x9F70, + 23615: 0x9F71, + 23616: 0x9F72, + 23617: 0x9F73, + 23618: 0x9F74, + 23619: 0x9F75, + 23620: 0x9F76, + 23621: 0x9F77, + 23622: 0x9F78, + 23623: 0x9F79, + 23624: 0x9F7A, + 23625: 0x9F7B, + 23626: 0x9F7C, + 23627: 0x9F7D, + 23628: 0x9F7E, + 23629: 0x9F81, + 23630: 0x9F82, + 23631: 0x9F8D, + 23632: 0x9F8E, + 23633: 0x9F8F, + 23634: 0x9F90, + 23635: 0x9F91, + 23636: 0x9F92, + 23637: 0x9F93, + 23638: 0x9F94, + 23639: 0x9F95, + 23640: 0x9F96, + 23641: 0x9F97, + 23642: 0x9F98, + 23643: 0x9F9C, + 23644: 0x9F9D, + 23645: 0x9F9E, + 23646: 0x9FA1, + 23647: 0x9FA2, + 23648: 0x9FA3, + 23649: 0x9FA4, + 23650: 0x9FA5, + 23651: 0xF92C, + 23652: 0xF979, + 23653: 0xF995, + 23654: 0xF9E7, + 23655: 0xF9F1, + 23750: 0xFA0C, + 23751: 0xFA0D, + 23752: 0xFA0E, + 23753: 0xFA0F, + 23754: 0xFA11, + 23755: 0xFA13, + 23756: 0xFA14, + 23757: 0xFA18, + 23758: 0xFA1F, + 23759: 0xFA20, + 23760: 0xFA21, + 23761: 0xFA23, + 23762: 0xFA24, + 23763: 0xFA27, + 23764: 0xFA28, + 23765: 0xFA29, + 23766: 0x2E81, + 23770: 0x2E84, + 23771: 0x3473, + 23772: 0x3447, + 23773: 0x2E88, + 23774: 0x2E8B, + 23776: 0x359E, + 23777: 0x361A, + 23778: 0x360E, + 23779: 0x2E8C, + 23780: 0x2E97, + 23781: 0x396E, + 23782: 0x3918, + 23784: 0x39CF, + 23785: 0x39DF, + 23786: 0x3A73, + 23787: 0x39D0, + 23790: 0x3B4E, + 23791: 0x3C6E, + 23792: 0x3CE0, + 23793: 0x2EA7, + 23796: 0x2EAA, + 23797: 0x4056, + 23798: 0x415F, + 23799: 0x2EAE, + 23800: 0x4337, + 23801: 0x2EB3, + 23802: 0x2EB6, + 23803: 0x2EB7, + 23805: 0x43B1, + 23806: 0x43AC, + 23807: 0x2EBB, + 23808: 0x43DD, + 23809: 0x44D6, + 23810: 0x4661, + 23811: 0x464C, + 23813: 0x4723, + 23814: 0x4729, + 23815: 0x477C, + 23816: 0x478D, + 23817: 0x2ECA, + 23818: 0x4947, + 23819: 0x497A, + 23820: 0x497D, + 23821: 0x4982, + 23822: 0x4983, + 23823: 0x4985, + 23824: 0x4986, + 23825: 0x499F, + 23826: 0x499B, + 23827: 0x49B7, + 23828: 0x49B6, + 23831: 0x4CA3, + 23832: 0x4C9F, + 23833: 0x4CA0, + 23834: 0x4CA1, + 23835: 0x4C77, + 23836: 0x4CA2, + 23837: 0x4D13, + 23838: 0x4D14, + 23839: 0x4D15, + 23840: 0x4D16, + 23841: 0x4D17, + 23842: 0x4D18, + 23843: 0x4D19, + 23844: 0x4DAE, +} + +const numEncodeTables = 5 + +// encodeX are the encoding tables from Unicode to GBK code, +// sorted by decreasing length. +// encode0: 28965 entries for runes in [11905, 40870). +// encode1: 1587 entries for runes in [ 8208, 9795). +// encode2: 942 entries for runes in [ 164, 1106). +// encode3: 438 entries for runes in [65072, 65510). +// encode4: 254 entries for runes in [63788, 64042). + +const encode0Low, encode0High = 11905, 40870 + +var encode0 = [...]uint16{ + 11905 - 11905: 0xFE50, + 11908 - 11905: 0xFE54, + 11912 - 11905: 0xFE57, + 11915 - 11905: 0xFE58, + 11916 - 11905: 0xFE5D, + 11927 - 11905: 0xFE5E, + 11943 - 11905: 0xFE6B, + 11946 - 11905: 0xFE6E, + 11950 - 11905: 0xFE71, + 11955 - 11905: 0xFE73, + 11958 - 11905: 0xFE74, + 11959 - 11905: 0xFE75, + 11963 - 11905: 0xFE79, + 11978 - 11905: 0xFE84, + 12272 - 11905: 0xA98A, + 12273 - 11905: 0xA98B, + 12274 - 11905: 0xA98C, + 12275 - 11905: 0xA98D, + 12276 - 11905: 0xA98E, + 12277 - 11905: 0xA98F, + 12278 - 11905: 0xA990, + 12279 - 11905: 0xA991, + 12280 - 11905: 0xA992, + 12281 - 11905: 0xA993, + 12282 - 11905: 0xA994, + 12283 - 11905: 0xA995, + 12288 - 11905: 0xA1A1, + 12289 - 11905: 0xA1A2, + 12290 - 11905: 0xA1A3, + 12291 - 11905: 0xA1A8, + 12293 - 11905: 0xA1A9, + 12294 - 11905: 0xA965, + 12295 - 11905: 0xA996, + 12296 - 11905: 0xA1B4, + 12297 - 11905: 0xA1B5, + 12298 - 11905: 0xA1B6, + 12299 - 11905: 0xA1B7, + 12300 - 11905: 0xA1B8, + 12301 - 11905: 0xA1B9, + 12302 - 11905: 0xA1BA, + 12303 - 11905: 0xA1BB, + 12304 - 11905: 0xA1BE, + 12305 - 11905: 0xA1BF, + 12306 - 11905: 0xA893, + 12307 - 11905: 0xA1FE, + 12308 - 11905: 0xA1B2, + 12309 - 11905: 0xA1B3, + 12310 - 11905: 0xA1BC, + 12311 - 11905: 0xA1BD, + 12317 - 11905: 0xA894, + 12318 - 11905: 0xA895, + 12321 - 11905: 0xA940, + 12322 - 11905: 0xA941, + 12323 - 11905: 0xA942, + 12324 - 11905: 0xA943, + 12325 - 11905: 0xA944, + 12326 - 11905: 0xA945, + 12327 - 11905: 0xA946, + 12328 - 11905: 0xA947, + 12329 - 11905: 0xA948, + 12350 - 11905: 0xA989, + 12353 - 11905: 0xA4A1, + 12354 - 11905: 0xA4A2, + 12355 - 11905: 0xA4A3, + 12356 - 11905: 0xA4A4, + 12357 - 11905: 0xA4A5, + 12358 - 11905: 0xA4A6, + 12359 - 11905: 0xA4A7, + 12360 - 11905: 0xA4A8, + 12361 - 11905: 0xA4A9, + 12362 - 11905: 0xA4AA, + 12363 - 11905: 0xA4AB, + 12364 - 11905: 0xA4AC, + 12365 - 11905: 0xA4AD, + 12366 - 11905: 0xA4AE, + 12367 - 11905: 0xA4AF, + 12368 - 11905: 0xA4B0, + 12369 - 11905: 0xA4B1, + 12370 - 11905: 0xA4B2, + 12371 - 11905: 0xA4B3, + 12372 - 11905: 0xA4B4, + 12373 - 11905: 0xA4B5, + 12374 - 11905: 0xA4B6, + 12375 - 11905: 0xA4B7, + 12376 - 11905: 0xA4B8, + 12377 - 11905: 0xA4B9, + 12378 - 11905: 0xA4BA, + 12379 - 11905: 0xA4BB, + 12380 - 11905: 0xA4BC, + 12381 - 11905: 0xA4BD, + 12382 - 11905: 0xA4BE, + 12383 - 11905: 0xA4BF, + 12384 - 11905: 0xA4C0, + 12385 - 11905: 0xA4C1, + 12386 - 11905: 0xA4C2, + 12387 - 11905: 0xA4C3, + 12388 - 11905: 0xA4C4, + 12389 - 11905: 0xA4C5, + 12390 - 11905: 0xA4C6, + 12391 - 11905: 0xA4C7, + 12392 - 11905: 0xA4C8, + 12393 - 11905: 0xA4C9, + 12394 - 11905: 0xA4CA, + 12395 - 11905: 0xA4CB, + 12396 - 11905: 0xA4CC, + 12397 - 11905: 0xA4CD, + 12398 - 11905: 0xA4CE, + 12399 - 11905: 0xA4CF, + 12400 - 11905: 0xA4D0, + 12401 - 11905: 0xA4D1, + 12402 - 11905: 0xA4D2, + 12403 - 11905: 0xA4D3, + 12404 - 11905: 0xA4D4, + 12405 - 11905: 0xA4D5, + 12406 - 11905: 0xA4D6, + 12407 - 11905: 0xA4D7, + 12408 - 11905: 0xA4D8, + 12409 - 11905: 0xA4D9, + 12410 - 11905: 0xA4DA, + 12411 - 11905: 0xA4DB, + 12412 - 11905: 0xA4DC, + 12413 - 11905: 0xA4DD, + 12414 - 11905: 0xA4DE, + 12415 - 11905: 0xA4DF, + 12416 - 11905: 0xA4E0, + 12417 - 11905: 0xA4E1, + 12418 - 11905: 0xA4E2, + 12419 - 11905: 0xA4E3, + 12420 - 11905: 0xA4E4, + 12421 - 11905: 0xA4E5, + 12422 - 11905: 0xA4E6, + 12423 - 11905: 0xA4E7, + 12424 - 11905: 0xA4E8, + 12425 - 11905: 0xA4E9, + 12426 - 11905: 0xA4EA, + 12427 - 11905: 0xA4EB, + 12428 - 11905: 0xA4EC, + 12429 - 11905: 0xA4ED, + 12430 - 11905: 0xA4EE, + 12431 - 11905: 0xA4EF, + 12432 - 11905: 0xA4F0, + 12433 - 11905: 0xA4F1, + 12434 - 11905: 0xA4F2, + 12435 - 11905: 0xA4F3, + 12443 - 11905: 0xA961, + 12444 - 11905: 0xA962, + 12445 - 11905: 0xA966, + 12446 - 11905: 0xA967, + 12449 - 11905: 0xA5A1, + 12450 - 11905: 0xA5A2, + 12451 - 11905: 0xA5A3, + 12452 - 11905: 0xA5A4, + 12453 - 11905: 0xA5A5, + 12454 - 11905: 0xA5A6, + 12455 - 11905: 0xA5A7, + 12456 - 11905: 0xA5A8, + 12457 - 11905: 0xA5A9, + 12458 - 11905: 0xA5AA, + 12459 - 11905: 0xA5AB, + 12460 - 11905: 0xA5AC, + 12461 - 11905: 0xA5AD, + 12462 - 11905: 0xA5AE, + 12463 - 11905: 0xA5AF, + 12464 - 11905: 0xA5B0, + 12465 - 11905: 0xA5B1, + 12466 - 11905: 0xA5B2, + 12467 - 11905: 0xA5B3, + 12468 - 11905: 0xA5B4, + 12469 - 11905: 0xA5B5, + 12470 - 11905: 0xA5B6, + 12471 - 11905: 0xA5B7, + 12472 - 11905: 0xA5B8, + 12473 - 11905: 0xA5B9, + 12474 - 11905: 0xA5BA, + 12475 - 11905: 0xA5BB, + 12476 - 11905: 0xA5BC, + 12477 - 11905: 0xA5BD, + 12478 - 11905: 0xA5BE, + 12479 - 11905: 0xA5BF, + 12480 - 11905: 0xA5C0, + 12481 - 11905: 0xA5C1, + 12482 - 11905: 0xA5C2, + 12483 - 11905: 0xA5C3, + 12484 - 11905: 0xA5C4, + 12485 - 11905: 0xA5C5, + 12486 - 11905: 0xA5C6, + 12487 - 11905: 0xA5C7, + 12488 - 11905: 0xA5C8, + 12489 - 11905: 0xA5C9, + 12490 - 11905: 0xA5CA, + 12491 - 11905: 0xA5CB, + 12492 - 11905: 0xA5CC, + 12493 - 11905: 0xA5CD, + 12494 - 11905: 0xA5CE, + 12495 - 11905: 0xA5CF, + 12496 - 11905: 0xA5D0, + 12497 - 11905: 0xA5D1, + 12498 - 11905: 0xA5D2, + 12499 - 11905: 0xA5D3, + 12500 - 11905: 0xA5D4, + 12501 - 11905: 0xA5D5, + 12502 - 11905: 0xA5D6, + 12503 - 11905: 0xA5D7, + 12504 - 11905: 0xA5D8, + 12505 - 11905: 0xA5D9, + 12506 - 11905: 0xA5DA, + 12507 - 11905: 0xA5DB, + 12508 - 11905: 0xA5DC, + 12509 - 11905: 0xA5DD, + 12510 - 11905: 0xA5DE, + 12511 - 11905: 0xA5DF, + 12512 - 11905: 0xA5E0, + 12513 - 11905: 0xA5E1, + 12514 - 11905: 0xA5E2, + 12515 - 11905: 0xA5E3, + 12516 - 11905: 0xA5E4, + 12517 - 11905: 0xA5E5, + 12518 - 11905: 0xA5E6, + 12519 - 11905: 0xA5E7, + 12520 - 11905: 0xA5E8, + 12521 - 11905: 0xA5E9, + 12522 - 11905: 0xA5EA, + 12523 - 11905: 0xA5EB, + 12524 - 11905: 0xA5EC, + 12525 - 11905: 0xA5ED, + 12526 - 11905: 0xA5EE, + 12527 - 11905: 0xA5EF, + 12528 - 11905: 0xA5F0, + 12529 - 11905: 0xA5F1, + 12530 - 11905: 0xA5F2, + 12531 - 11905: 0xA5F3, + 12532 - 11905: 0xA5F4, + 12533 - 11905: 0xA5F5, + 12534 - 11905: 0xA5F6, + 12540 - 11905: 0xA960, + 12541 - 11905: 0xA963, + 12542 - 11905: 0xA964, + 12549 - 11905: 0xA8C5, + 12550 - 11905: 0xA8C6, + 12551 - 11905: 0xA8C7, + 12552 - 11905: 0xA8C8, + 12553 - 11905: 0xA8C9, + 12554 - 11905: 0xA8CA, + 12555 - 11905: 0xA8CB, + 12556 - 11905: 0xA8CC, + 12557 - 11905: 0xA8CD, + 12558 - 11905: 0xA8CE, + 12559 - 11905: 0xA8CF, + 12560 - 11905: 0xA8D0, + 12561 - 11905: 0xA8D1, + 12562 - 11905: 0xA8D2, + 12563 - 11905: 0xA8D3, + 12564 - 11905: 0xA8D4, + 12565 - 11905: 0xA8D5, + 12566 - 11905: 0xA8D6, + 12567 - 11905: 0xA8D7, + 12568 - 11905: 0xA8D8, + 12569 - 11905: 0xA8D9, + 12570 - 11905: 0xA8DA, + 12571 - 11905: 0xA8DB, + 12572 - 11905: 0xA8DC, + 12573 - 11905: 0xA8DD, + 12574 - 11905: 0xA8DE, + 12575 - 11905: 0xA8DF, + 12576 - 11905: 0xA8E0, + 12577 - 11905: 0xA8E1, + 12578 - 11905: 0xA8E2, + 12579 - 11905: 0xA8E3, + 12580 - 11905: 0xA8E4, + 12581 - 11905: 0xA8E5, + 12582 - 11905: 0xA8E6, + 12583 - 11905: 0xA8E7, + 12584 - 11905: 0xA8E8, + 12585 - 11905: 0xA8E9, + 12832 - 11905: 0xA2E5, + 12833 - 11905: 0xA2E6, + 12834 - 11905: 0xA2E7, + 12835 - 11905: 0xA2E8, + 12836 - 11905: 0xA2E9, + 12837 - 11905: 0xA2EA, + 12838 - 11905: 0xA2EB, + 12839 - 11905: 0xA2EC, + 12840 - 11905: 0xA2ED, + 12841 - 11905: 0xA2EE, + 12849 - 11905: 0xA95A, + 12963 - 11905: 0xA949, + 13198 - 11905: 0xA94A, + 13199 - 11905: 0xA94B, + 13212 - 11905: 0xA94C, + 13213 - 11905: 0xA94D, + 13214 - 11905: 0xA94E, + 13217 - 11905: 0xA94F, + 13252 - 11905: 0xA950, + 13262 - 11905: 0xA951, + 13265 - 11905: 0xA952, + 13266 - 11905: 0xA953, + 13269 - 11905: 0xA954, + 13383 - 11905: 0xFE56, + 13427 - 11905: 0xFE55, + 13726 - 11905: 0xFE5A, + 13838 - 11905: 0xFE5C, + 13850 - 11905: 0xFE5B, + 14616 - 11905: 0xFE60, + 14702 - 11905: 0xFE5F, + 14799 - 11905: 0xFE62, + 14800 - 11905: 0xFE65, + 14815 - 11905: 0xFE63, + 14963 - 11905: 0xFE64, + 15182 - 11905: 0xFE68, + 15470 - 11905: 0xFE69, + 15584 - 11905: 0xFE6A, + 16470 - 11905: 0xFE6F, + 16735 - 11905: 0xFE70, + 17207 - 11905: 0xFE72, + 17324 - 11905: 0xFE78, + 17329 - 11905: 0xFE77, + 17373 - 11905: 0xFE7A, + 17622 - 11905: 0xFE7B, + 17996 - 11905: 0xFE7D, + 18017 - 11905: 0xFE7C, + 18211 - 11905: 0xFE80, + 18217 - 11905: 0xFE81, + 18300 - 11905: 0xFE82, + 18317 - 11905: 0xFE83, + 18759 - 11905: 0xFE85, + 18810 - 11905: 0xFE86, + 18813 - 11905: 0xFE87, + 18818 - 11905: 0xFE88, + 18819 - 11905: 0xFE89, + 18821 - 11905: 0xFE8A, + 18822 - 11905: 0xFE8B, + 18843 - 11905: 0xFE8D, + 18847 - 11905: 0xFE8C, + 18870 - 11905: 0xFE8F, + 18871 - 11905: 0xFE8E, + 19575 - 11905: 0xFE96, + 19615 - 11905: 0xFE93, + 19616 - 11905: 0xFE94, + 19617 - 11905: 0xFE95, + 19618 - 11905: 0xFE97, + 19619 - 11905: 0xFE92, + 19731 - 11905: 0xFE98, + 19732 - 11905: 0xFE99, + 19733 - 11905: 0xFE9A, + 19734 - 11905: 0xFE9B, + 19735 - 11905: 0xFE9C, + 19736 - 11905: 0xFE9D, + 19737 - 11905: 0xFE9E, + 19886 - 11905: 0xFE9F, + 19968 - 11905: 0xD2BB, + 19969 - 11905: 0xB6A1, + 19970 - 11905: 0x8140, + 19971 - 11905: 0xC6DF, + 19972 - 11905: 0x8141, + 19973 - 11905: 0x8142, + 19974 - 11905: 0x8143, + 19975 - 11905: 0xCDF2, + 19976 - 11905: 0xD5C9, + 19977 - 11905: 0xC8FD, + 19978 - 11905: 0xC9CF, + 19979 - 11905: 0xCFC2, + 19980 - 11905: 0xD8A2, + 19981 - 11905: 0xB2BB, + 19982 - 11905: 0xD3EB, + 19983 - 11905: 0x8144, + 19984 - 11905: 0xD8A4, + 19985 - 11905: 0xB3F3, + 19986 - 11905: 0x8145, + 19987 - 11905: 0xD7A8, + 19988 - 11905: 0xC7D2, + 19989 - 11905: 0xD8A7, + 19990 - 11905: 0xCAC0, + 19991 - 11905: 0x8146, + 19992 - 11905: 0xC7F0, + 19993 - 11905: 0xB1FB, + 19994 - 11905: 0xD2B5, + 19995 - 11905: 0xB4D4, + 19996 - 11905: 0xB6AB, + 19997 - 11905: 0xCBBF, + 19998 - 11905: 0xD8A9, + 19999 - 11905: 0x8147, + 20000 - 11905: 0x8148, + 20001 - 11905: 0x8149, + 20002 - 11905: 0xB6AA, + 20003 - 11905: 0x814A, + 20004 - 11905: 0xC1BD, + 20005 - 11905: 0xD1CF, + 20006 - 11905: 0x814B, + 20007 - 11905: 0xC9A5, + 20008 - 11905: 0xD8AD, + 20009 - 11905: 0x814C, + 20010 - 11905: 0xB8F6, + 20011 - 11905: 0xD1BE, + 20012 - 11905: 0xE3DC, + 20013 - 11905: 0xD6D0, + 20014 - 11905: 0x814D, + 20015 - 11905: 0x814E, + 20016 - 11905: 0xB7E1, + 20017 - 11905: 0x814F, + 20018 - 11905: 0xB4AE, + 20019 - 11905: 0x8150, + 20020 - 11905: 0xC1D9, + 20021 - 11905: 0x8151, + 20022 - 11905: 0xD8BC, + 20023 - 11905: 0x8152, + 20024 - 11905: 0xCDE8, + 20025 - 11905: 0xB5A4, + 20026 - 11905: 0xCEAA, + 20027 - 11905: 0xD6F7, + 20028 - 11905: 0x8153, + 20029 - 11905: 0xC0F6, + 20030 - 11905: 0xBED9, + 20031 - 11905: 0xD8AF, + 20032 - 11905: 0x8154, + 20033 - 11905: 0x8155, + 20034 - 11905: 0x8156, + 20035 - 11905: 0xC4CB, + 20036 - 11905: 0x8157, + 20037 - 11905: 0xBEC3, + 20038 - 11905: 0x8158, + 20039 - 11905: 0xD8B1, + 20040 - 11905: 0xC3B4, + 20041 - 11905: 0xD2E5, + 20042 - 11905: 0x8159, + 20043 - 11905: 0xD6AE, + 20044 - 11905: 0xCEDA, + 20045 - 11905: 0xD5A7, + 20046 - 11905: 0xBAF5, + 20047 - 11905: 0xB7A6, + 20048 - 11905: 0xC0D6, + 20049 - 11905: 0x815A, + 20050 - 11905: 0xC6B9, + 20051 - 11905: 0xC5D2, + 20052 - 11905: 0xC7C7, + 20053 - 11905: 0x815B, + 20054 - 11905: 0xB9D4, + 20055 - 11905: 0x815C, + 20056 - 11905: 0xB3CB, + 20057 - 11905: 0xD2D2, + 20058 - 11905: 0x815D, + 20059 - 11905: 0x815E, + 20060 - 11905: 0xD8BF, + 20061 - 11905: 0xBEC5, + 20062 - 11905: 0xC6F2, + 20063 - 11905: 0xD2B2, + 20064 - 11905: 0xCFB0, + 20065 - 11905: 0xCFE7, + 20066 - 11905: 0x815F, + 20067 - 11905: 0x8160, + 20068 - 11905: 0x8161, + 20069 - 11905: 0x8162, + 20070 - 11905: 0xCAE9, + 20071 - 11905: 0x8163, + 20072 - 11905: 0x8164, + 20073 - 11905: 0xD8C0, + 20074 - 11905: 0x8165, + 20075 - 11905: 0x8166, + 20076 - 11905: 0x8167, + 20077 - 11905: 0x8168, + 20078 - 11905: 0x8169, + 20079 - 11905: 0x816A, + 20080 - 11905: 0xC2F2, + 20081 - 11905: 0xC2D2, + 20082 - 11905: 0x816B, + 20083 - 11905: 0xC8E9, + 20084 - 11905: 0x816C, + 20085 - 11905: 0x816D, + 20086 - 11905: 0x816E, + 20087 - 11905: 0x816F, + 20088 - 11905: 0x8170, + 20089 - 11905: 0x8171, + 20090 - 11905: 0x8172, + 20091 - 11905: 0x8173, + 20092 - 11905: 0x8174, + 20093 - 11905: 0x8175, + 20094 - 11905: 0xC7AC, + 20095 - 11905: 0x8176, + 20096 - 11905: 0x8177, + 20097 - 11905: 0x8178, + 20098 - 11905: 0x8179, + 20099 - 11905: 0x817A, + 20100 - 11905: 0x817B, + 20101 - 11905: 0x817C, + 20102 - 11905: 0xC1CB, + 20103 - 11905: 0x817D, + 20104 - 11905: 0xD3E8, + 20105 - 11905: 0xD5F9, + 20106 - 11905: 0x817E, + 20107 - 11905: 0xCAC2, + 20108 - 11905: 0xB6FE, + 20109 - 11905: 0xD8A1, + 20110 - 11905: 0xD3DA, + 20111 - 11905: 0xBFF7, + 20112 - 11905: 0x8180, + 20113 - 11905: 0xD4C6, + 20114 - 11905: 0xBBA5, + 20115 - 11905: 0xD8C1, + 20116 - 11905: 0xCEE5, + 20117 - 11905: 0xBEAE, + 20118 - 11905: 0x8181, + 20119 - 11905: 0x8182, + 20120 - 11905: 0xD8A8, + 20121 - 11905: 0x8183, + 20122 - 11905: 0xD1C7, + 20123 - 11905: 0xD0A9, + 20124 - 11905: 0x8184, + 20125 - 11905: 0x8185, + 20126 - 11905: 0x8186, + 20127 - 11905: 0xD8BD, + 20128 - 11905: 0xD9EF, + 20129 - 11905: 0xCDF6, + 20130 - 11905: 0xBFBA, + 20131 - 11905: 0x8187, + 20132 - 11905: 0xBDBB, + 20133 - 11905: 0xBAA5, + 20134 - 11905: 0xD2E0, + 20135 - 11905: 0xB2FA, + 20136 - 11905: 0xBAE0, + 20137 - 11905: 0xC4B6, + 20138 - 11905: 0x8188, + 20139 - 11905: 0xCFED, + 20140 - 11905: 0xBEA9, + 20141 - 11905: 0xCDA4, + 20142 - 11905: 0xC1C1, + 20143 - 11905: 0x8189, + 20144 - 11905: 0x818A, + 20145 - 11905: 0x818B, + 20146 - 11905: 0xC7D7, + 20147 - 11905: 0xD9F1, + 20148 - 11905: 0x818C, + 20149 - 11905: 0xD9F4, + 20150 - 11905: 0x818D, + 20151 - 11905: 0x818E, + 20152 - 11905: 0x818F, + 20153 - 11905: 0x8190, + 20154 - 11905: 0xC8CB, + 20155 - 11905: 0xD8E9, + 20156 - 11905: 0x8191, + 20157 - 11905: 0x8192, + 20158 - 11905: 0x8193, + 20159 - 11905: 0xD2DA, + 20160 - 11905: 0xCAB2, + 20161 - 11905: 0xC8CA, + 20162 - 11905: 0xD8EC, + 20163 - 11905: 0xD8EA, + 20164 - 11905: 0xD8C6, + 20165 - 11905: 0xBDF6, + 20166 - 11905: 0xC6CD, + 20167 - 11905: 0xB3F0, + 20168 - 11905: 0x8194, + 20169 - 11905: 0xD8EB, + 20170 - 11905: 0xBDF1, + 20171 - 11905: 0xBDE9, + 20172 - 11905: 0x8195, + 20173 - 11905: 0xC8D4, + 20174 - 11905: 0xB4D3, + 20175 - 11905: 0x8196, + 20176 - 11905: 0x8197, + 20177 - 11905: 0xC2D8, + 20178 - 11905: 0x8198, + 20179 - 11905: 0xB2D6, + 20180 - 11905: 0xD7D0, + 20181 - 11905: 0xCACB, + 20182 - 11905: 0xCBFB, + 20183 - 11905: 0xD5CC, + 20184 - 11905: 0xB8B6, + 20185 - 11905: 0xCFC9, + 20186 - 11905: 0x8199, + 20187 - 11905: 0x819A, + 20188 - 11905: 0x819B, + 20189 - 11905: 0xD9DA, + 20190 - 11905: 0xD8F0, + 20191 - 11905: 0xC7AA, + 20192 - 11905: 0x819C, + 20193 - 11905: 0xD8EE, + 20194 - 11905: 0x819D, + 20195 - 11905: 0xB4FA, + 20196 - 11905: 0xC1EE, + 20197 - 11905: 0xD2D4, + 20198 - 11905: 0x819E, + 20199 - 11905: 0x819F, + 20200 - 11905: 0xD8ED, + 20201 - 11905: 0x81A0, + 20202 - 11905: 0xD2C7, + 20203 - 11905: 0xD8EF, + 20204 - 11905: 0xC3C7, + 20205 - 11905: 0x81A1, + 20206 - 11905: 0x81A2, + 20207 - 11905: 0x81A3, + 20208 - 11905: 0xD1F6, + 20209 - 11905: 0x81A4, + 20210 - 11905: 0xD6D9, + 20211 - 11905: 0xD8F2, + 20212 - 11905: 0x81A5, + 20213 - 11905: 0xD8F5, + 20214 - 11905: 0xBCFE, + 20215 - 11905: 0xBCDB, + 20216 - 11905: 0x81A6, + 20217 - 11905: 0x81A7, + 20218 - 11905: 0x81A8, + 20219 - 11905: 0xC8CE, + 20220 - 11905: 0x81A9, + 20221 - 11905: 0xB7DD, + 20222 - 11905: 0x81AA, + 20223 - 11905: 0xB7C2, + 20224 - 11905: 0x81AB, + 20225 - 11905: 0xC6F3, + 20226 - 11905: 0x81AC, + 20227 - 11905: 0x81AD, + 20228 - 11905: 0x81AE, + 20229 - 11905: 0x81AF, + 20230 - 11905: 0x81B0, + 20231 - 11905: 0x81B1, + 20232 - 11905: 0x81B2, + 20233 - 11905: 0xD8F8, + 20234 - 11905: 0xD2C1, + 20235 - 11905: 0x81B3, + 20236 - 11905: 0x81B4, + 20237 - 11905: 0xCEE9, + 20238 - 11905: 0xBCBF, + 20239 - 11905: 0xB7FC, + 20240 - 11905: 0xB7A5, + 20241 - 11905: 0xD0DD, + 20242 - 11905: 0x81B5, + 20243 - 11905: 0x81B6, + 20244 - 11905: 0x81B7, + 20245 - 11905: 0x81B8, + 20246 - 11905: 0x81B9, + 20247 - 11905: 0xD6DA, + 20248 - 11905: 0xD3C5, + 20249 - 11905: 0xBBEF, + 20250 - 11905: 0xBBE1, + 20251 - 11905: 0xD8F1, + 20252 - 11905: 0x81BA, + 20253 - 11905: 0x81BB, + 20254 - 11905: 0xC9A1, + 20255 - 11905: 0xCEB0, + 20256 - 11905: 0xB4AB, + 20257 - 11905: 0x81BC, + 20258 - 11905: 0xD8F3, + 20259 - 11905: 0x81BD, + 20260 - 11905: 0xC9CB, + 20261 - 11905: 0xD8F6, + 20262 - 11905: 0xC2D7, + 20263 - 11905: 0xD8F7, + 20264 - 11905: 0x81BE, + 20265 - 11905: 0x81BF, + 20266 - 11905: 0xCEB1, + 20267 - 11905: 0xD8F9, + 20268 - 11905: 0x81C0, + 20269 - 11905: 0x81C1, + 20270 - 11905: 0x81C2, + 20271 - 11905: 0xB2AE, + 20272 - 11905: 0xB9C0, + 20273 - 11905: 0x81C3, + 20274 - 11905: 0xD9A3, + 20275 - 11905: 0x81C4, + 20276 - 11905: 0xB0E9, + 20277 - 11905: 0x81C5, + 20278 - 11905: 0xC1E6, + 20279 - 11905: 0x81C6, + 20280 - 11905: 0xC9EC, + 20281 - 11905: 0x81C7, + 20282 - 11905: 0xCBC5, + 20283 - 11905: 0x81C8, + 20284 - 11905: 0xCBC6, + 20285 - 11905: 0xD9A4, + 20286 - 11905: 0x81C9, + 20287 - 11905: 0x81CA, + 20288 - 11905: 0x81CB, + 20289 - 11905: 0x81CC, + 20290 - 11905: 0x81CD, + 20291 - 11905: 0xB5E8, + 20292 - 11905: 0x81CE, + 20293 - 11905: 0x81CF, + 20294 - 11905: 0xB5AB, + 20295 - 11905: 0x81D0, + 20296 - 11905: 0x81D1, + 20297 - 11905: 0x81D2, + 20298 - 11905: 0x81D3, + 20299 - 11905: 0x81D4, + 20300 - 11905: 0x81D5, + 20301 - 11905: 0xCEBB, + 20302 - 11905: 0xB5CD, + 20303 - 11905: 0xD7A1, + 20304 - 11905: 0xD7F4, + 20305 - 11905: 0xD3D3, + 20306 - 11905: 0x81D6, + 20307 - 11905: 0xCCE5, + 20308 - 11905: 0x81D7, + 20309 - 11905: 0xBACE, + 20310 - 11905: 0x81D8, + 20311 - 11905: 0xD9A2, + 20312 - 11905: 0xD9DC, + 20313 - 11905: 0xD3E0, + 20314 - 11905: 0xD8FD, + 20315 - 11905: 0xB7F0, + 20316 - 11905: 0xD7F7, + 20317 - 11905: 0xD8FE, + 20318 - 11905: 0xD8FA, + 20319 - 11905: 0xD9A1, + 20320 - 11905: 0xC4E3, + 20321 - 11905: 0x81D9, + 20322 - 11905: 0x81DA, + 20323 - 11905: 0xD3B6, + 20324 - 11905: 0xD8F4, + 20325 - 11905: 0xD9DD, + 20326 - 11905: 0x81DB, + 20327 - 11905: 0xD8FB, + 20328 - 11905: 0x81DC, + 20329 - 11905: 0xC5E5, + 20330 - 11905: 0x81DD, + 20331 - 11905: 0x81DE, + 20332 - 11905: 0xC0D0, + 20333 - 11905: 0x81DF, + 20334 - 11905: 0x81E0, + 20335 - 11905: 0xD1F0, + 20336 - 11905: 0xB0DB, + 20337 - 11905: 0x81E1, + 20338 - 11905: 0x81E2, + 20339 - 11905: 0xBCD1, + 20340 - 11905: 0xD9A6, + 20341 - 11905: 0x81E3, + 20342 - 11905: 0xD9A5, + 20343 - 11905: 0x81E4, + 20344 - 11905: 0x81E5, + 20345 - 11905: 0x81E6, + 20346 - 11905: 0x81E7, + 20347 - 11905: 0xD9AC, + 20348 - 11905: 0xD9AE, + 20349 - 11905: 0x81E8, + 20350 - 11905: 0xD9AB, + 20351 - 11905: 0xCAB9, + 20352 - 11905: 0x81E9, + 20353 - 11905: 0x81EA, + 20354 - 11905: 0x81EB, + 20355 - 11905: 0xD9A9, + 20356 - 11905: 0xD6B6, + 20357 - 11905: 0x81EC, + 20358 - 11905: 0x81ED, + 20359 - 11905: 0x81EE, + 20360 - 11905: 0xB3DE, + 20361 - 11905: 0xD9A8, + 20362 - 11905: 0x81EF, + 20363 - 11905: 0xC0FD, + 20364 - 11905: 0x81F0, + 20365 - 11905: 0xCACC, + 20366 - 11905: 0x81F1, + 20367 - 11905: 0xD9AA, + 20368 - 11905: 0x81F2, + 20369 - 11905: 0xD9A7, + 20370 - 11905: 0x81F3, + 20371 - 11905: 0x81F4, + 20372 - 11905: 0xD9B0, + 20373 - 11905: 0x81F5, + 20374 - 11905: 0x81F6, + 20375 - 11905: 0xB6B1, + 20376 - 11905: 0x81F7, + 20377 - 11905: 0x81F8, + 20378 - 11905: 0x81F9, + 20379 - 11905: 0xB9A9, + 20380 - 11905: 0x81FA, + 20381 - 11905: 0xD2C0, + 20382 - 11905: 0x81FB, + 20383 - 11905: 0x81FC, + 20384 - 11905: 0xCFC0, + 20385 - 11905: 0x81FD, + 20386 - 11905: 0x81FE, + 20387 - 11905: 0xC2C2, + 20388 - 11905: 0x8240, + 20389 - 11905: 0xBDC4, + 20390 - 11905: 0xD5EC, + 20391 - 11905: 0xB2E0, + 20392 - 11905: 0xC7C8, + 20393 - 11905: 0xBFEB, + 20394 - 11905: 0xD9AD, + 20395 - 11905: 0x8241, + 20396 - 11905: 0xD9AF, + 20397 - 11905: 0x8242, + 20398 - 11905: 0xCEEA, + 20399 - 11905: 0xBAEE, + 20400 - 11905: 0x8243, + 20401 - 11905: 0x8244, + 20402 - 11905: 0x8245, + 20403 - 11905: 0x8246, + 20404 - 11905: 0x8247, + 20405 - 11905: 0xC7D6, + 20406 - 11905: 0x8248, + 20407 - 11905: 0x8249, + 20408 - 11905: 0x824A, + 20409 - 11905: 0x824B, + 20410 - 11905: 0x824C, + 20411 - 11905: 0x824D, + 20412 - 11905: 0x824E, + 20413 - 11905: 0x824F, + 20414 - 11905: 0x8250, + 20415 - 11905: 0xB1E3, + 20416 - 11905: 0x8251, + 20417 - 11905: 0x8252, + 20418 - 11905: 0x8253, + 20419 - 11905: 0xB4D9, + 20420 - 11905: 0xB6ED, + 20421 - 11905: 0xD9B4, + 20422 - 11905: 0x8254, + 20423 - 11905: 0x8255, + 20424 - 11905: 0x8256, + 20425 - 11905: 0x8257, + 20426 - 11905: 0xBFA1, + 20427 - 11905: 0x8258, + 20428 - 11905: 0x8259, + 20429 - 11905: 0x825A, + 20430 - 11905: 0xD9DE, + 20431 - 11905: 0xC7CE, + 20432 - 11905: 0xC0FE, + 20433 - 11905: 0xD9B8, + 20434 - 11905: 0x825B, + 20435 - 11905: 0x825C, + 20436 - 11905: 0x825D, + 20437 - 11905: 0x825E, + 20438 - 11905: 0x825F, + 20439 - 11905: 0xCBD7, + 20440 - 11905: 0xB7FD, + 20441 - 11905: 0x8260, + 20442 - 11905: 0xD9B5, + 20443 - 11905: 0x8261, + 20444 - 11905: 0xD9B7, + 20445 - 11905: 0xB1A3, + 20446 - 11905: 0xD3E1, + 20447 - 11905: 0xD9B9, + 20448 - 11905: 0x8262, + 20449 - 11905: 0xD0C5, + 20450 - 11905: 0x8263, + 20451 - 11905: 0xD9B6, + 20452 - 11905: 0x8264, + 20453 - 11905: 0x8265, + 20454 - 11905: 0xD9B1, + 20455 - 11905: 0x8266, + 20456 - 11905: 0xD9B2, + 20457 - 11905: 0xC1A9, + 20458 - 11905: 0xD9B3, + 20459 - 11905: 0x8267, + 20460 - 11905: 0x8268, + 20461 - 11905: 0xBCF3, + 20462 - 11905: 0xD0DE, + 20463 - 11905: 0xB8A9, + 20464 - 11905: 0x8269, + 20465 - 11905: 0xBEE3, + 20466 - 11905: 0x826A, + 20467 - 11905: 0xD9BD, + 20468 - 11905: 0x826B, + 20469 - 11905: 0x826C, + 20470 - 11905: 0x826D, + 20471 - 11905: 0x826E, + 20472 - 11905: 0xD9BA, + 20473 - 11905: 0x826F, + 20474 - 11905: 0xB0B3, + 20475 - 11905: 0x8270, + 20476 - 11905: 0x8271, + 20477 - 11905: 0x8272, + 20478 - 11905: 0xD9C2, + 20479 - 11905: 0x8273, + 20480 - 11905: 0x8274, + 20481 - 11905: 0x8275, + 20482 - 11905: 0x8276, + 20483 - 11905: 0x8277, + 20484 - 11905: 0x8278, + 20485 - 11905: 0x8279, + 20486 - 11905: 0x827A, + 20487 - 11905: 0x827B, + 20488 - 11905: 0x827C, + 20489 - 11905: 0x827D, + 20490 - 11905: 0x827E, + 20491 - 11905: 0x8280, + 20492 - 11905: 0xD9C4, + 20493 - 11905: 0xB1B6, + 20494 - 11905: 0x8281, + 20495 - 11905: 0xD9BF, + 20496 - 11905: 0x8282, + 20497 - 11905: 0x8283, + 20498 - 11905: 0xB5B9, + 20499 - 11905: 0x8284, + 20500 - 11905: 0xBEF3, + 20501 - 11905: 0x8285, + 20502 - 11905: 0x8286, + 20503 - 11905: 0x8287, + 20504 - 11905: 0xCCC8, + 20505 - 11905: 0xBAF2, + 20506 - 11905: 0xD2D0, + 20507 - 11905: 0x8288, + 20508 - 11905: 0xD9C3, + 20509 - 11905: 0x8289, + 20510 - 11905: 0x828A, + 20511 - 11905: 0xBDE8, + 20512 - 11905: 0x828B, + 20513 - 11905: 0xB3AB, + 20514 - 11905: 0x828C, + 20515 - 11905: 0x828D, + 20516 - 11905: 0x828E, + 20517 - 11905: 0xD9C5, + 20518 - 11905: 0xBEEB, + 20519 - 11905: 0x828F, + 20520 - 11905: 0xD9C6, + 20521 - 11905: 0xD9BB, + 20522 - 11905: 0xC4DF, + 20523 - 11905: 0x8290, + 20524 - 11905: 0xD9BE, + 20525 - 11905: 0xD9C1, + 20526 - 11905: 0xD9C0, + 20527 - 11905: 0x8291, + 20528 - 11905: 0x8292, + 20529 - 11905: 0x8293, + 20530 - 11905: 0x8294, + 20531 - 11905: 0x8295, + 20532 - 11905: 0x8296, + 20533 - 11905: 0x8297, + 20534 - 11905: 0x8298, + 20535 - 11905: 0x8299, + 20536 - 11905: 0x829A, + 20537 - 11905: 0x829B, + 20538 - 11905: 0xD5AE, + 20539 - 11905: 0x829C, + 20540 - 11905: 0xD6B5, + 20541 - 11905: 0x829D, + 20542 - 11905: 0xC7E3, + 20543 - 11905: 0x829E, + 20544 - 11905: 0x829F, + 20545 - 11905: 0x82A0, + 20546 - 11905: 0x82A1, + 20547 - 11905: 0xD9C8, + 20548 - 11905: 0x82A2, + 20549 - 11905: 0x82A3, + 20550 - 11905: 0x82A4, + 20551 - 11905: 0xBCD9, + 20552 - 11905: 0xD9CA, + 20553 - 11905: 0x82A5, + 20554 - 11905: 0x82A6, + 20555 - 11905: 0x82A7, + 20556 - 11905: 0xD9BC, + 20557 - 11905: 0x82A8, + 20558 - 11905: 0xD9CB, + 20559 - 11905: 0xC6AB, + 20560 - 11905: 0x82A9, + 20561 - 11905: 0x82AA, + 20562 - 11905: 0x82AB, + 20563 - 11905: 0x82AC, + 20564 - 11905: 0x82AD, + 20565 - 11905: 0xD9C9, + 20566 - 11905: 0x82AE, + 20567 - 11905: 0x82AF, + 20568 - 11905: 0x82B0, + 20569 - 11905: 0x82B1, + 20570 - 11905: 0xD7F6, + 20571 - 11905: 0x82B2, + 20572 - 11905: 0xCDA3, + 20573 - 11905: 0x82B3, + 20574 - 11905: 0x82B4, + 20575 - 11905: 0x82B5, + 20576 - 11905: 0x82B6, + 20577 - 11905: 0x82B7, + 20578 - 11905: 0x82B8, + 20579 - 11905: 0x82B9, + 20580 - 11905: 0x82BA, + 20581 - 11905: 0xBDA1, + 20582 - 11905: 0x82BB, + 20583 - 11905: 0x82BC, + 20584 - 11905: 0x82BD, + 20585 - 11905: 0x82BE, + 20586 - 11905: 0x82BF, + 20587 - 11905: 0x82C0, + 20588 - 11905: 0xD9CC, + 20589 - 11905: 0x82C1, + 20590 - 11905: 0x82C2, + 20591 - 11905: 0x82C3, + 20592 - 11905: 0x82C4, + 20593 - 11905: 0x82C5, + 20594 - 11905: 0x82C6, + 20595 - 11905: 0x82C7, + 20596 - 11905: 0x82C8, + 20597 - 11905: 0x82C9, + 20598 - 11905: 0xC5BC, + 20599 - 11905: 0xCDB5, + 20600 - 11905: 0x82CA, + 20601 - 11905: 0x82CB, + 20602 - 11905: 0x82CC, + 20603 - 11905: 0xD9CD, + 20604 - 11905: 0x82CD, + 20605 - 11905: 0x82CE, + 20606 - 11905: 0xD9C7, + 20607 - 11905: 0xB3A5, + 20608 - 11905: 0xBFFE, + 20609 - 11905: 0x82CF, + 20610 - 11905: 0x82D0, + 20611 - 11905: 0x82D1, + 20612 - 11905: 0x82D2, + 20613 - 11905: 0xB8B5, + 20614 - 11905: 0x82D3, + 20615 - 11905: 0x82D4, + 20616 - 11905: 0xC0FC, + 20617 - 11905: 0x82D5, + 20618 - 11905: 0x82D6, + 20619 - 11905: 0x82D7, + 20620 - 11905: 0x82D8, + 20621 - 11905: 0xB0F8, + 20622 - 11905: 0x82D9, + 20623 - 11905: 0x82DA, + 20624 - 11905: 0x82DB, + 20625 - 11905: 0x82DC, + 20626 - 11905: 0x82DD, + 20627 - 11905: 0x82DE, + 20628 - 11905: 0x82DF, + 20629 - 11905: 0x82E0, + 20630 - 11905: 0x82E1, + 20631 - 11905: 0x82E2, + 20632 - 11905: 0x82E3, + 20633 - 11905: 0x82E4, + 20634 - 11905: 0x82E5, + 20635 - 11905: 0x82E6, + 20636 - 11905: 0x82E7, + 20637 - 11905: 0x82E8, + 20638 - 11905: 0x82E9, + 20639 - 11905: 0x82EA, + 20640 - 11905: 0x82EB, + 20641 - 11905: 0x82EC, + 20642 - 11905: 0x82ED, + 20643 - 11905: 0xB4F6, + 20644 - 11905: 0x82EE, + 20645 - 11905: 0xD9CE, + 20646 - 11905: 0x82EF, + 20647 - 11905: 0xD9CF, + 20648 - 11905: 0xB4A2, + 20649 - 11905: 0xD9D0, + 20650 - 11905: 0x82F0, + 20651 - 11905: 0x82F1, + 20652 - 11905: 0xB4DF, + 20653 - 11905: 0x82F2, + 20654 - 11905: 0x82F3, + 20655 - 11905: 0x82F4, + 20656 - 11905: 0x82F5, + 20657 - 11905: 0x82F6, + 20658 - 11905: 0xB0C1, + 20659 - 11905: 0x82F7, + 20660 - 11905: 0x82F8, + 20661 - 11905: 0x82F9, + 20662 - 11905: 0x82FA, + 20663 - 11905: 0x82FB, + 20664 - 11905: 0x82FC, + 20665 - 11905: 0x82FD, + 20666 - 11905: 0xD9D1, + 20667 - 11905: 0xC9B5, + 20668 - 11905: 0x82FE, + 20669 - 11905: 0x8340, + 20670 - 11905: 0x8341, + 20671 - 11905: 0x8342, + 20672 - 11905: 0x8343, + 20673 - 11905: 0x8344, + 20674 - 11905: 0x8345, + 20675 - 11905: 0x8346, + 20676 - 11905: 0x8347, + 20677 - 11905: 0x8348, + 20678 - 11905: 0x8349, + 20679 - 11905: 0x834A, + 20680 - 11905: 0x834B, + 20681 - 11905: 0x834C, + 20682 - 11905: 0x834D, + 20683 - 11905: 0x834E, + 20684 - 11905: 0x834F, + 20685 - 11905: 0x8350, + 20686 - 11905: 0x8351, + 20687 - 11905: 0xCFF1, + 20688 - 11905: 0x8352, + 20689 - 11905: 0x8353, + 20690 - 11905: 0x8354, + 20691 - 11905: 0x8355, + 20692 - 11905: 0x8356, + 20693 - 11905: 0x8357, + 20694 - 11905: 0xD9D2, + 20695 - 11905: 0x8358, + 20696 - 11905: 0x8359, + 20697 - 11905: 0x835A, + 20698 - 11905: 0xC1C5, + 20699 - 11905: 0x835B, + 20700 - 11905: 0x835C, + 20701 - 11905: 0x835D, + 20702 - 11905: 0x835E, + 20703 - 11905: 0x835F, + 20704 - 11905: 0x8360, + 20705 - 11905: 0x8361, + 20706 - 11905: 0x8362, + 20707 - 11905: 0x8363, + 20708 - 11905: 0x8364, + 20709 - 11905: 0x8365, + 20710 - 11905: 0xD9D6, + 20711 - 11905: 0xC9AE, + 20712 - 11905: 0x8366, + 20713 - 11905: 0x8367, + 20714 - 11905: 0x8368, + 20715 - 11905: 0x8369, + 20716 - 11905: 0xD9D5, + 20717 - 11905: 0xD9D4, + 20718 - 11905: 0xD9D7, + 20719 - 11905: 0x836A, + 20720 - 11905: 0x836B, + 20721 - 11905: 0x836C, + 20722 - 11905: 0x836D, + 20723 - 11905: 0xCBDB, + 20724 - 11905: 0x836E, + 20725 - 11905: 0xBDA9, + 20726 - 11905: 0x836F, + 20727 - 11905: 0x8370, + 20728 - 11905: 0x8371, + 20729 - 11905: 0x8372, + 20730 - 11905: 0x8373, + 20731 - 11905: 0xC6A7, + 20732 - 11905: 0x8374, + 20733 - 11905: 0x8375, + 20734 - 11905: 0x8376, + 20735 - 11905: 0x8377, + 20736 - 11905: 0x8378, + 20737 - 11905: 0x8379, + 20738 - 11905: 0x837A, + 20739 - 11905: 0x837B, + 20740 - 11905: 0x837C, + 20741 - 11905: 0x837D, + 20742 - 11905: 0xD9D3, + 20743 - 11905: 0xD9D8, + 20744 - 11905: 0x837E, + 20745 - 11905: 0x8380, + 20746 - 11905: 0x8381, + 20747 - 11905: 0xD9D9, + 20748 - 11905: 0x8382, + 20749 - 11905: 0x8383, + 20750 - 11905: 0x8384, + 20751 - 11905: 0x8385, + 20752 - 11905: 0x8386, + 20753 - 11905: 0x8387, + 20754 - 11905: 0xC8E5, + 20755 - 11905: 0x8388, + 20756 - 11905: 0x8389, + 20757 - 11905: 0x838A, + 20758 - 11905: 0x838B, + 20759 - 11905: 0x838C, + 20760 - 11905: 0x838D, + 20761 - 11905: 0x838E, + 20762 - 11905: 0x838F, + 20763 - 11905: 0x8390, + 20764 - 11905: 0x8391, + 20765 - 11905: 0x8392, + 20766 - 11905: 0x8393, + 20767 - 11905: 0x8394, + 20768 - 11905: 0x8395, + 20769 - 11905: 0xC0DC, + 20770 - 11905: 0x8396, + 20771 - 11905: 0x8397, + 20772 - 11905: 0x8398, + 20773 - 11905: 0x8399, + 20774 - 11905: 0x839A, + 20775 - 11905: 0x839B, + 20776 - 11905: 0x839C, + 20777 - 11905: 0x839D, + 20778 - 11905: 0x839E, + 20779 - 11905: 0x839F, + 20780 - 11905: 0x83A0, + 20781 - 11905: 0x83A1, + 20782 - 11905: 0x83A2, + 20783 - 11905: 0x83A3, + 20784 - 11905: 0x83A4, + 20785 - 11905: 0x83A5, + 20786 - 11905: 0x83A6, + 20787 - 11905: 0x83A7, + 20788 - 11905: 0x83A8, + 20789 - 11905: 0x83A9, + 20790 - 11905: 0x83AA, + 20791 - 11905: 0x83AB, + 20792 - 11905: 0x83AC, + 20793 - 11905: 0x83AD, + 20794 - 11905: 0x83AE, + 20795 - 11905: 0x83AF, + 20796 - 11905: 0x83B0, + 20797 - 11905: 0x83B1, + 20798 - 11905: 0x83B2, + 20799 - 11905: 0xB6F9, + 20800 - 11905: 0xD8A3, + 20801 - 11905: 0xD4CA, + 20802 - 11905: 0x83B3, + 20803 - 11905: 0xD4AA, + 20804 - 11905: 0xD0D6, + 20805 - 11905: 0xB3E4, + 20806 - 11905: 0xD5D7, + 20807 - 11905: 0x83B4, + 20808 - 11905: 0xCFC8, + 20809 - 11905: 0xB9E2, + 20810 - 11905: 0x83B5, + 20811 - 11905: 0xBFCB, + 20812 - 11905: 0x83B6, + 20813 - 11905: 0xC3E2, + 20814 - 11905: 0x83B7, + 20815 - 11905: 0x83B8, + 20816 - 11905: 0x83B9, + 20817 - 11905: 0xB6D2, + 20818 - 11905: 0x83BA, + 20819 - 11905: 0x83BB, + 20820 - 11905: 0xCDC3, + 20821 - 11905: 0xD9EE, + 20822 - 11905: 0xD9F0, + 20823 - 11905: 0x83BC, + 20824 - 11905: 0x83BD, + 20825 - 11905: 0x83BE, + 20826 - 11905: 0xB5B3, + 20827 - 11905: 0x83BF, + 20828 - 11905: 0xB6B5, + 20829 - 11905: 0x83C0, + 20830 - 11905: 0x83C1, + 20831 - 11905: 0x83C2, + 20832 - 11905: 0x83C3, + 20833 - 11905: 0x83C4, + 20834 - 11905: 0xBEA4, + 20835 - 11905: 0x83C5, + 20836 - 11905: 0x83C6, + 20837 - 11905: 0xC8EB, + 20838 - 11905: 0x83C7, + 20839 - 11905: 0x83C8, + 20840 - 11905: 0xC8AB, + 20841 - 11905: 0x83C9, + 20842 - 11905: 0x83CA, + 20843 - 11905: 0xB0CB, + 20844 - 11905: 0xB9AB, + 20845 - 11905: 0xC1F9, + 20846 - 11905: 0xD9E2, + 20847 - 11905: 0x83CB, + 20848 - 11905: 0xC0BC, + 20849 - 11905: 0xB9B2, + 20850 - 11905: 0x83CC, + 20851 - 11905: 0xB9D8, + 20852 - 11905: 0xD0CB, + 20853 - 11905: 0xB1F8, + 20854 - 11905: 0xC6E4, + 20855 - 11905: 0xBEDF, + 20856 - 11905: 0xB5E4, + 20857 - 11905: 0xD7C8, + 20858 - 11905: 0x83CD, + 20859 - 11905: 0xD1F8, + 20860 - 11905: 0xBCE6, + 20861 - 11905: 0xCADE, + 20862 - 11905: 0x83CE, + 20863 - 11905: 0x83CF, + 20864 - 11905: 0xBCBD, + 20865 - 11905: 0xD9E6, + 20866 - 11905: 0xD8E7, + 20867 - 11905: 0x83D0, + 20868 - 11905: 0x83D1, + 20869 - 11905: 0xC4DA, + 20870 - 11905: 0x83D2, + 20871 - 11905: 0x83D3, + 20872 - 11905: 0xB8D4, + 20873 - 11905: 0xC8BD, + 20874 - 11905: 0x83D4, + 20875 - 11905: 0x83D5, + 20876 - 11905: 0xB2E1, + 20877 - 11905: 0xD4D9, + 20878 - 11905: 0x83D6, + 20879 - 11905: 0x83D7, + 20880 - 11905: 0x83D8, + 20881 - 11905: 0x83D9, + 20882 - 11905: 0xC3B0, + 20883 - 11905: 0x83DA, + 20884 - 11905: 0x83DB, + 20885 - 11905: 0xC3E1, + 20886 - 11905: 0xDAA2, + 20887 - 11905: 0xC8DF, + 20888 - 11905: 0x83DC, + 20889 - 11905: 0xD0B4, + 20890 - 11905: 0x83DD, + 20891 - 11905: 0xBEFC, + 20892 - 11905: 0xC5A9, + 20893 - 11905: 0x83DE, + 20894 - 11905: 0x83DF, + 20895 - 11905: 0x83E0, + 20896 - 11905: 0xB9DA, + 20897 - 11905: 0x83E1, + 20898 - 11905: 0xDAA3, + 20899 - 11905: 0x83E2, + 20900 - 11905: 0xD4A9, + 20901 - 11905: 0xDAA4, + 20902 - 11905: 0x83E3, + 20903 - 11905: 0x83E4, + 20904 - 11905: 0x83E5, + 20905 - 11905: 0x83E6, + 20906 - 11905: 0x83E7, + 20907 - 11905: 0xD9FB, + 20908 - 11905: 0xB6AC, + 20909 - 11905: 0x83E8, + 20910 - 11905: 0x83E9, + 20911 - 11905: 0xB7EB, + 20912 - 11905: 0xB1F9, + 20913 - 11905: 0xD9FC, + 20914 - 11905: 0xB3E5, + 20915 - 11905: 0xBEF6, + 20916 - 11905: 0x83EA, + 20917 - 11905: 0xBFF6, + 20918 - 11905: 0xD2B1, + 20919 - 11905: 0xC0E4, + 20920 - 11905: 0x83EB, + 20921 - 11905: 0x83EC, + 20922 - 11905: 0x83ED, + 20923 - 11905: 0xB6B3, + 20924 - 11905: 0xD9FE, + 20925 - 11905: 0xD9FD, + 20926 - 11905: 0x83EE, + 20927 - 11905: 0x83EF, + 20928 - 11905: 0xBEBB, + 20929 - 11905: 0x83F0, + 20930 - 11905: 0x83F1, + 20931 - 11905: 0x83F2, + 20932 - 11905: 0xC6E0, + 20933 - 11905: 0x83F3, + 20934 - 11905: 0xD7BC, + 20935 - 11905: 0xDAA1, + 20936 - 11905: 0x83F4, + 20937 - 11905: 0xC1B9, + 20938 - 11905: 0x83F5, + 20939 - 11905: 0xB5F2, + 20940 - 11905: 0xC1E8, + 20941 - 11905: 0x83F6, + 20942 - 11905: 0x83F7, + 20943 - 11905: 0xBCF5, + 20944 - 11905: 0x83F8, + 20945 - 11905: 0xB4D5, + 20946 - 11905: 0x83F9, + 20947 - 11905: 0x83FA, + 20948 - 11905: 0x83FB, + 20949 - 11905: 0x83FC, + 20950 - 11905: 0x83FD, + 20951 - 11905: 0x83FE, + 20952 - 11905: 0x8440, + 20953 - 11905: 0x8441, + 20954 - 11905: 0x8442, + 20955 - 11905: 0xC1DD, + 20956 - 11905: 0x8443, + 20957 - 11905: 0xC4FD, + 20958 - 11905: 0x8444, + 20959 - 11905: 0x8445, + 20960 - 11905: 0xBCB8, + 20961 - 11905: 0xB7B2, + 20962 - 11905: 0x8446, + 20963 - 11905: 0x8447, + 20964 - 11905: 0xB7EF, + 20965 - 11905: 0x8448, + 20966 - 11905: 0x8449, + 20967 - 11905: 0x844A, + 20968 - 11905: 0x844B, + 20969 - 11905: 0x844C, + 20970 - 11905: 0x844D, + 20971 - 11905: 0xD9EC, + 20972 - 11905: 0x844E, + 20973 - 11905: 0xC6BE, + 20974 - 11905: 0x844F, + 20975 - 11905: 0xBFAD, + 20976 - 11905: 0xBBCB, + 20977 - 11905: 0x8450, + 20978 - 11905: 0x8451, + 20979 - 11905: 0xB5CA, + 20980 - 11905: 0x8452, + 20981 - 11905: 0xDBC9, + 20982 - 11905: 0xD0D7, + 20983 - 11905: 0x8453, + 20984 - 11905: 0xCDB9, + 20985 - 11905: 0xB0BC, + 20986 - 11905: 0xB3F6, + 20987 - 11905: 0xBBF7, + 20988 - 11905: 0xDBCA, + 20989 - 11905: 0xBAAF, + 20990 - 11905: 0x8454, + 20991 - 11905: 0xD4E4, + 20992 - 11905: 0xB5B6, + 20993 - 11905: 0xB5F3, + 20994 - 11905: 0xD8D6, + 20995 - 11905: 0xC8D0, + 20996 - 11905: 0x8455, + 20997 - 11905: 0x8456, + 20998 - 11905: 0xB7D6, + 20999 - 11905: 0xC7D0, + 21000 - 11905: 0xD8D7, + 21001 - 11905: 0x8457, + 21002 - 11905: 0xBFAF, + 21003 - 11905: 0x8458, + 21004 - 11905: 0x8459, + 21005 - 11905: 0xDBBB, + 21006 - 11905: 0xD8D8, + 21007 - 11905: 0x845A, + 21008 - 11905: 0x845B, + 21009 - 11905: 0xD0CC, + 21010 - 11905: 0xBBAE, + 21011 - 11905: 0x845C, + 21012 - 11905: 0x845D, + 21013 - 11905: 0x845E, + 21014 - 11905: 0xEBBE, + 21015 - 11905: 0xC1D0, + 21016 - 11905: 0xC1F5, + 21017 - 11905: 0xD4F2, + 21018 - 11905: 0xB8D5, + 21019 - 11905: 0xB4B4, + 21020 - 11905: 0x845F, + 21021 - 11905: 0xB3F5, + 21022 - 11905: 0x8460, + 21023 - 11905: 0x8461, + 21024 - 11905: 0xC9BE, + 21025 - 11905: 0x8462, + 21026 - 11905: 0x8463, + 21027 - 11905: 0x8464, + 21028 - 11905: 0xC5D0, + 21029 - 11905: 0x8465, + 21030 - 11905: 0x8466, + 21031 - 11905: 0x8467, + 21032 - 11905: 0xC5D9, + 21033 - 11905: 0xC0FB, + 21034 - 11905: 0x8468, + 21035 - 11905: 0xB1F0, + 21036 - 11905: 0x8469, + 21037 - 11905: 0xD8D9, + 21038 - 11905: 0xB9CE, + 21039 - 11905: 0x846A, + 21040 - 11905: 0xB5BD, + 21041 - 11905: 0x846B, + 21042 - 11905: 0x846C, + 21043 - 11905: 0xD8DA, + 21044 - 11905: 0x846D, + 21045 - 11905: 0x846E, + 21046 - 11905: 0xD6C6, + 21047 - 11905: 0xCBA2, + 21048 - 11905: 0xC8AF, + 21049 - 11905: 0xC9B2, + 21050 - 11905: 0xB4CC, + 21051 - 11905: 0xBFCC, + 21052 - 11905: 0x846F, + 21053 - 11905: 0xB9F4, + 21054 - 11905: 0x8470, + 21055 - 11905: 0xD8DB, + 21056 - 11905: 0xD8DC, + 21057 - 11905: 0xB6E7, + 21058 - 11905: 0xBCC1, + 21059 - 11905: 0xCCEA, + 21060 - 11905: 0x8471, + 21061 - 11905: 0x8472, + 21062 - 11905: 0x8473, + 21063 - 11905: 0x8474, + 21064 - 11905: 0x8475, + 21065 - 11905: 0x8476, + 21066 - 11905: 0xCFF7, + 21067 - 11905: 0x8477, + 21068 - 11905: 0xD8DD, + 21069 - 11905: 0xC7B0, + 21070 - 11905: 0x8478, + 21071 - 11905: 0x8479, + 21072 - 11905: 0xB9D0, + 21073 - 11905: 0xBDA3, + 21074 - 11905: 0x847A, + 21075 - 11905: 0x847B, + 21076 - 11905: 0xCCDE, + 21077 - 11905: 0x847C, + 21078 - 11905: 0xC6CA, + 21079 - 11905: 0x847D, + 21080 - 11905: 0x847E, + 21081 - 11905: 0x8480, + 21082 - 11905: 0x8481, + 21083 - 11905: 0x8482, + 21084 - 11905: 0xD8E0, + 21085 - 11905: 0x8483, + 21086 - 11905: 0xD8DE, + 21087 - 11905: 0x8484, + 21088 - 11905: 0x8485, + 21089 - 11905: 0xD8DF, + 21090 - 11905: 0x8486, + 21091 - 11905: 0x8487, + 21092 - 11905: 0x8488, + 21093 - 11905: 0xB0FE, + 21094 - 11905: 0x8489, + 21095 - 11905: 0xBEE7, + 21096 - 11905: 0x848A, + 21097 - 11905: 0xCAA3, + 21098 - 11905: 0xBCF4, + 21099 - 11905: 0x848B, + 21100 - 11905: 0x848C, + 21101 - 11905: 0x848D, + 21102 - 11905: 0x848E, + 21103 - 11905: 0xB8B1, + 21104 - 11905: 0x848F, + 21105 - 11905: 0x8490, + 21106 - 11905: 0xB8EE, + 21107 - 11905: 0x8491, + 21108 - 11905: 0x8492, + 21109 - 11905: 0x8493, + 21110 - 11905: 0x8494, + 21111 - 11905: 0x8495, + 21112 - 11905: 0x8496, + 21113 - 11905: 0x8497, + 21114 - 11905: 0x8498, + 21115 - 11905: 0x8499, + 21116 - 11905: 0x849A, + 21117 - 11905: 0xD8E2, + 21118 - 11905: 0x849B, + 21119 - 11905: 0xBDCB, + 21120 - 11905: 0x849C, + 21121 - 11905: 0xD8E4, + 21122 - 11905: 0xD8E3, + 21123 - 11905: 0x849D, + 21124 - 11905: 0x849E, + 21125 - 11905: 0x849F, + 21126 - 11905: 0x84A0, + 21127 - 11905: 0x84A1, + 21128 - 11905: 0xC5FC, + 21129 - 11905: 0x84A2, + 21130 - 11905: 0x84A3, + 21131 - 11905: 0x84A4, + 21132 - 11905: 0x84A5, + 21133 - 11905: 0x84A6, + 21134 - 11905: 0x84A7, + 21135 - 11905: 0x84A8, + 21136 - 11905: 0xD8E5, + 21137 - 11905: 0x84A9, + 21138 - 11905: 0x84AA, + 21139 - 11905: 0xD8E6, + 21140 - 11905: 0x84AB, + 21141 - 11905: 0x84AC, + 21142 - 11905: 0x84AD, + 21143 - 11905: 0x84AE, + 21144 - 11905: 0x84AF, + 21145 - 11905: 0x84B0, + 21146 - 11905: 0x84B1, + 21147 - 11905: 0xC1A6, + 21148 - 11905: 0x84B2, + 21149 - 11905: 0xC8B0, + 21150 - 11905: 0xB0EC, + 21151 - 11905: 0xB9A6, + 21152 - 11905: 0xBCD3, + 21153 - 11905: 0xCEF1, + 21154 - 11905: 0xDBBD, + 21155 - 11905: 0xC1D3, + 21156 - 11905: 0x84B3, + 21157 - 11905: 0x84B4, + 21158 - 11905: 0x84B5, + 21159 - 11905: 0x84B6, + 21160 - 11905: 0xB6AF, + 21161 - 11905: 0xD6FA, + 21162 - 11905: 0xC5AC, + 21163 - 11905: 0xBDD9, + 21164 - 11905: 0xDBBE, + 21165 - 11905: 0xDBBF, + 21166 - 11905: 0x84B7, + 21167 - 11905: 0x84B8, + 21168 - 11905: 0x84B9, + 21169 - 11905: 0xC0F8, + 21170 - 11905: 0xBEA2, + 21171 - 11905: 0xC0CD, + 21172 - 11905: 0x84BA, + 21173 - 11905: 0x84BB, + 21174 - 11905: 0x84BC, + 21175 - 11905: 0x84BD, + 21176 - 11905: 0x84BE, + 21177 - 11905: 0x84BF, + 21178 - 11905: 0x84C0, + 21179 - 11905: 0x84C1, + 21180 - 11905: 0x84C2, + 21181 - 11905: 0x84C3, + 21182 - 11905: 0xDBC0, + 21183 - 11905: 0xCAC6, + 21184 - 11905: 0x84C4, + 21185 - 11905: 0x84C5, + 21186 - 11905: 0x84C6, + 21187 - 11905: 0xB2AA, + 21188 - 11905: 0x84C7, + 21189 - 11905: 0x84C8, + 21190 - 11905: 0x84C9, + 21191 - 11905: 0xD3C2, + 21192 - 11905: 0x84CA, + 21193 - 11905: 0xC3E3, + 21194 - 11905: 0x84CB, + 21195 - 11905: 0xD1AB, + 21196 - 11905: 0x84CC, + 21197 - 11905: 0x84CD, + 21198 - 11905: 0x84CE, + 21199 - 11905: 0x84CF, + 21200 - 11905: 0xDBC2, + 21201 - 11905: 0x84D0, + 21202 - 11905: 0xC0D5, + 21203 - 11905: 0x84D1, + 21204 - 11905: 0x84D2, + 21205 - 11905: 0x84D3, + 21206 - 11905: 0xDBC3, + 21207 - 11905: 0x84D4, + 21208 - 11905: 0xBFB1, + 21209 - 11905: 0x84D5, + 21210 - 11905: 0x84D6, + 21211 - 11905: 0x84D7, + 21212 - 11905: 0x84D8, + 21213 - 11905: 0x84D9, + 21214 - 11905: 0x84DA, + 21215 - 11905: 0xC4BC, + 21216 - 11905: 0x84DB, + 21217 - 11905: 0x84DC, + 21218 - 11905: 0x84DD, + 21219 - 11905: 0x84DE, + 21220 - 11905: 0xC7DA, + 21221 - 11905: 0x84DF, + 21222 - 11905: 0x84E0, + 21223 - 11905: 0x84E1, + 21224 - 11905: 0x84E2, + 21225 - 11905: 0x84E3, + 21226 - 11905: 0x84E4, + 21227 - 11905: 0x84E5, + 21228 - 11905: 0x84E6, + 21229 - 11905: 0x84E7, + 21230 - 11905: 0x84E8, + 21231 - 11905: 0x84E9, + 21232 - 11905: 0xDBC4, + 21233 - 11905: 0x84EA, + 21234 - 11905: 0x84EB, + 21235 - 11905: 0x84EC, + 21236 - 11905: 0x84ED, + 21237 - 11905: 0x84EE, + 21238 - 11905: 0x84EF, + 21239 - 11905: 0x84F0, + 21240 - 11905: 0x84F1, + 21241 - 11905: 0xD9E8, + 21242 - 11905: 0xC9D7, + 21243 - 11905: 0x84F2, + 21244 - 11905: 0x84F3, + 21245 - 11905: 0x84F4, + 21246 - 11905: 0xB9B4, + 21247 - 11905: 0xCEF0, + 21248 - 11905: 0xD4C8, + 21249 - 11905: 0x84F5, + 21250 - 11905: 0x84F6, + 21251 - 11905: 0x84F7, + 21252 - 11905: 0x84F8, + 21253 - 11905: 0xB0FC, + 21254 - 11905: 0xB4D2, + 21255 - 11905: 0x84F9, + 21256 - 11905: 0xD0D9, + 21257 - 11905: 0x84FA, + 21258 - 11905: 0x84FB, + 21259 - 11905: 0x84FC, + 21260 - 11905: 0x84FD, + 21261 - 11905: 0xD9E9, + 21262 - 11905: 0x84FE, + 21263 - 11905: 0xDECB, + 21264 - 11905: 0xD9EB, + 21265 - 11905: 0x8540, + 21266 - 11905: 0x8541, + 21267 - 11905: 0x8542, + 21268 - 11905: 0x8543, + 21269 - 11905: 0xD8B0, + 21270 - 11905: 0xBBAF, + 21271 - 11905: 0xB1B1, + 21272 - 11905: 0x8544, + 21273 - 11905: 0xB3D7, + 21274 - 11905: 0xD8CE, + 21275 - 11905: 0x8545, + 21276 - 11905: 0x8546, + 21277 - 11905: 0xD4D1, + 21278 - 11905: 0x8547, + 21279 - 11905: 0x8548, + 21280 - 11905: 0xBDB3, + 21281 - 11905: 0xBFEF, + 21282 - 11905: 0x8549, + 21283 - 11905: 0xCFBB, + 21284 - 11905: 0x854A, + 21285 - 11905: 0x854B, + 21286 - 11905: 0xD8D0, + 21287 - 11905: 0x854C, + 21288 - 11905: 0x854D, + 21289 - 11905: 0x854E, + 21290 - 11905: 0xB7CB, + 21291 - 11905: 0x854F, + 21292 - 11905: 0x8550, + 21293 - 11905: 0x8551, + 21294 - 11905: 0xD8D1, + 21295 - 11905: 0x8552, + 21296 - 11905: 0x8553, + 21297 - 11905: 0x8554, + 21298 - 11905: 0x8555, + 21299 - 11905: 0x8556, + 21300 - 11905: 0x8557, + 21301 - 11905: 0x8558, + 21302 - 11905: 0x8559, + 21303 - 11905: 0x855A, + 21304 - 11905: 0x855B, + 21305 - 11905: 0xC6A5, + 21306 - 11905: 0xC7F8, + 21307 - 11905: 0xD2BD, + 21308 - 11905: 0x855C, + 21309 - 11905: 0x855D, + 21310 - 11905: 0xD8D2, + 21311 - 11905: 0xC4E4, + 21312 - 11905: 0x855E, + 21313 - 11905: 0xCAAE, + 21314 - 11905: 0x855F, + 21315 - 11905: 0xC7A7, + 21316 - 11905: 0x8560, + 21317 - 11905: 0xD8A6, + 21318 - 11905: 0x8561, + 21319 - 11905: 0xC9FD, + 21320 - 11905: 0xCEE7, + 21321 - 11905: 0xBBDC, + 21322 - 11905: 0xB0EB, + 21323 - 11905: 0x8562, + 21324 - 11905: 0x8563, + 21325 - 11905: 0x8564, + 21326 - 11905: 0xBBAA, + 21327 - 11905: 0xD0AD, + 21328 - 11905: 0x8565, + 21329 - 11905: 0xB1B0, + 21330 - 11905: 0xD7E4, + 21331 - 11905: 0xD7BF, + 21332 - 11905: 0x8566, + 21333 - 11905: 0xB5A5, + 21334 - 11905: 0xC2F4, + 21335 - 11905: 0xC4CF, + 21336 - 11905: 0x8567, + 21337 - 11905: 0x8568, + 21338 - 11905: 0xB2A9, + 21339 - 11905: 0x8569, + 21340 - 11905: 0xB2B7, + 21341 - 11905: 0x856A, + 21342 - 11905: 0xB1E5, + 21343 - 11905: 0xDFB2, + 21344 - 11905: 0xD5BC, + 21345 - 11905: 0xBFA8, + 21346 - 11905: 0xC2AC, + 21347 - 11905: 0xD8D5, + 21348 - 11905: 0xC2B1, + 21349 - 11905: 0x856B, + 21350 - 11905: 0xD8D4, + 21351 - 11905: 0xCED4, + 21352 - 11905: 0x856C, + 21353 - 11905: 0xDAE0, + 21354 - 11905: 0x856D, + 21355 - 11905: 0xCEC0, + 21356 - 11905: 0x856E, + 21357 - 11905: 0x856F, + 21358 - 11905: 0xD8B4, + 21359 - 11905: 0xC3AE, + 21360 - 11905: 0xD3A1, + 21361 - 11905: 0xCEA3, + 21362 - 11905: 0x8570, + 21363 - 11905: 0xBCB4, + 21364 - 11905: 0xC8B4, + 21365 - 11905: 0xC2D1, + 21366 - 11905: 0x8571, + 21367 - 11905: 0xBEED, + 21368 - 11905: 0xD0B6, + 21369 - 11905: 0x8572, + 21370 - 11905: 0xDAE1, + 21371 - 11905: 0x8573, + 21372 - 11905: 0x8574, + 21373 - 11905: 0x8575, + 21374 - 11905: 0x8576, + 21375 - 11905: 0xC7E4, + 21376 - 11905: 0x8577, + 21377 - 11905: 0x8578, + 21378 - 11905: 0xB3A7, + 21379 - 11905: 0x8579, + 21380 - 11905: 0xB6F2, + 21381 - 11905: 0xCCFC, + 21382 - 11905: 0xC0FA, + 21383 - 11905: 0x857A, + 21384 - 11905: 0x857B, + 21385 - 11905: 0xC0F7, + 21386 - 11905: 0x857C, + 21387 - 11905: 0xD1B9, + 21388 - 11905: 0xD1E1, + 21389 - 11905: 0xD8C7, + 21390 - 11905: 0x857D, + 21391 - 11905: 0x857E, + 21392 - 11905: 0x8580, + 21393 - 11905: 0x8581, + 21394 - 11905: 0x8582, + 21395 - 11905: 0x8583, + 21396 - 11905: 0x8584, + 21397 - 11905: 0xB2DE, + 21398 - 11905: 0x8585, + 21399 - 11905: 0x8586, + 21400 - 11905: 0xC0E5, + 21401 - 11905: 0x8587, + 21402 - 11905: 0xBAF1, + 21403 - 11905: 0x8588, + 21404 - 11905: 0x8589, + 21405 - 11905: 0xD8C8, + 21406 - 11905: 0x858A, + 21407 - 11905: 0xD4AD, + 21408 - 11905: 0x858B, + 21409 - 11905: 0x858C, + 21410 - 11905: 0xCFE1, + 21411 - 11905: 0xD8C9, + 21412 - 11905: 0x858D, + 21413 - 11905: 0xD8CA, + 21414 - 11905: 0xCFC3, + 21415 - 11905: 0x858E, + 21416 - 11905: 0xB3F8, + 21417 - 11905: 0xBEC7, + 21418 - 11905: 0x858F, + 21419 - 11905: 0x8590, + 21420 - 11905: 0x8591, + 21421 - 11905: 0x8592, + 21422 - 11905: 0xD8CB, + 21423 - 11905: 0x8593, + 21424 - 11905: 0x8594, + 21425 - 11905: 0x8595, + 21426 - 11905: 0x8596, + 21427 - 11905: 0x8597, + 21428 - 11905: 0x8598, + 21429 - 11905: 0x8599, + 21430 - 11905: 0xDBCC, + 21431 - 11905: 0x859A, + 21432 - 11905: 0x859B, + 21433 - 11905: 0x859C, + 21434 - 11905: 0x859D, + 21435 - 11905: 0xC8A5, + 21436 - 11905: 0x859E, + 21437 - 11905: 0x859F, + 21438 - 11905: 0x85A0, + 21439 - 11905: 0xCFD8, + 21440 - 11905: 0x85A1, + 21441 - 11905: 0xC8FE, + 21442 - 11905: 0xB2CE, + 21443 - 11905: 0x85A2, + 21444 - 11905: 0x85A3, + 21445 - 11905: 0x85A4, + 21446 - 11905: 0x85A5, + 21447 - 11905: 0x85A6, + 21448 - 11905: 0xD3D6, + 21449 - 11905: 0xB2E6, + 21450 - 11905: 0xBCB0, + 21451 - 11905: 0xD3D1, + 21452 - 11905: 0xCBAB, + 21453 - 11905: 0xB7B4, + 21454 - 11905: 0x85A7, + 21455 - 11905: 0x85A8, + 21456 - 11905: 0x85A9, + 21457 - 11905: 0xB7A2, + 21458 - 11905: 0x85AA, + 21459 - 11905: 0x85AB, + 21460 - 11905: 0xCAE5, + 21461 - 11905: 0x85AC, + 21462 - 11905: 0xC8A1, + 21463 - 11905: 0xCADC, + 21464 - 11905: 0xB1E4, + 21465 - 11905: 0xD0F0, + 21466 - 11905: 0x85AD, + 21467 - 11905: 0xC5D1, + 21468 - 11905: 0x85AE, + 21469 - 11905: 0x85AF, + 21470 - 11905: 0x85B0, + 21471 - 11905: 0xDBC5, + 21472 - 11905: 0xB5FE, + 21473 - 11905: 0x85B1, + 21474 - 11905: 0x85B2, + 21475 - 11905: 0xBFDA, + 21476 - 11905: 0xB9C5, + 21477 - 11905: 0xBEE4, + 21478 - 11905: 0xC1ED, + 21479 - 11905: 0x85B3, + 21480 - 11905: 0xDFB6, + 21481 - 11905: 0xDFB5, + 21482 - 11905: 0xD6BB, + 21483 - 11905: 0xBDD0, + 21484 - 11905: 0xD5D9, + 21485 - 11905: 0xB0C8, + 21486 - 11905: 0xB6A3, + 21487 - 11905: 0xBFC9, + 21488 - 11905: 0xCCA8, + 21489 - 11905: 0xDFB3, + 21490 - 11905: 0xCAB7, + 21491 - 11905: 0xD3D2, + 21492 - 11905: 0x85B4, + 21493 - 11905: 0xD8CF, + 21494 - 11905: 0xD2B6, + 21495 - 11905: 0xBAC5, + 21496 - 11905: 0xCBBE, + 21497 - 11905: 0xCCBE, + 21498 - 11905: 0x85B5, + 21499 - 11905: 0xDFB7, + 21500 - 11905: 0xB5F0, + 21501 - 11905: 0xDFB4, + 21502 - 11905: 0x85B6, + 21503 - 11905: 0x85B7, + 21504 - 11905: 0x85B8, + 21505 - 11905: 0xD3F5, + 21506 - 11905: 0x85B9, + 21507 - 11905: 0xB3D4, + 21508 - 11905: 0xB8F7, + 21509 - 11905: 0x85BA, + 21510 - 11905: 0xDFBA, + 21511 - 11905: 0x85BB, + 21512 - 11905: 0xBACF, + 21513 - 11905: 0xBCAA, + 21514 - 11905: 0xB5F5, + 21515 - 11905: 0x85BC, + 21516 - 11905: 0xCDAC, + 21517 - 11905: 0xC3FB, + 21518 - 11905: 0xBAF3, + 21519 - 11905: 0xC0F4, + 21520 - 11905: 0xCDC2, + 21521 - 11905: 0xCFF2, + 21522 - 11905: 0xDFB8, + 21523 - 11905: 0xCFC5, + 21524 - 11905: 0x85BD, + 21525 - 11905: 0xC2C0, + 21526 - 11905: 0xDFB9, + 21527 - 11905: 0xC2F0, + 21528 - 11905: 0x85BE, + 21529 - 11905: 0x85BF, + 21530 - 11905: 0x85C0, + 21531 - 11905: 0xBEFD, + 21532 - 11905: 0x85C1, + 21533 - 11905: 0xC1DF, + 21534 - 11905: 0xCDCC, + 21535 - 11905: 0xD2F7, + 21536 - 11905: 0xB7CD, + 21537 - 11905: 0xDFC1, + 21538 - 11905: 0x85C2, + 21539 - 11905: 0xDFC4, + 21540 - 11905: 0x85C3, + 21541 - 11905: 0x85C4, + 21542 - 11905: 0xB7F1, + 21543 - 11905: 0xB0C9, + 21544 - 11905: 0xB6D6, + 21545 - 11905: 0xB7D4, + 21546 - 11905: 0x85C5, + 21547 - 11905: 0xBAAC, + 21548 - 11905: 0xCCFD, + 21549 - 11905: 0xBFD4, + 21550 - 11905: 0xCBB1, + 21551 - 11905: 0xC6F4, + 21552 - 11905: 0x85C6, + 21553 - 11905: 0xD6A8, + 21554 - 11905: 0xDFC5, + 21555 - 11905: 0x85C7, + 21556 - 11905: 0xCEE2, + 21557 - 11905: 0xB3B3, + 21558 - 11905: 0x85C8, + 21559 - 11905: 0x85C9, + 21560 - 11905: 0xCEFC, + 21561 - 11905: 0xB4B5, + 21562 - 11905: 0x85CA, + 21563 - 11905: 0xCEC7, + 21564 - 11905: 0xBAF0, + 21565 - 11905: 0x85CB, + 21566 - 11905: 0xCEE1, + 21567 - 11905: 0x85CC, + 21568 - 11905: 0xD1BD, + 21569 - 11905: 0x85CD, + 21570 - 11905: 0x85CE, + 21571 - 11905: 0xDFC0, + 21572 - 11905: 0x85CF, + 21573 - 11905: 0x85D0, + 21574 - 11905: 0xB4F4, + 21575 - 11905: 0x85D1, + 21576 - 11905: 0xB3CA, + 21577 - 11905: 0x85D2, + 21578 - 11905: 0xB8E6, + 21579 - 11905: 0xDFBB, + 21580 - 11905: 0x85D3, + 21581 - 11905: 0x85D4, + 21582 - 11905: 0x85D5, + 21583 - 11905: 0x85D6, + 21584 - 11905: 0xC4C5, + 21585 - 11905: 0x85D7, + 21586 - 11905: 0xDFBC, + 21587 - 11905: 0xDFBD, + 21588 - 11905: 0xDFBE, + 21589 - 11905: 0xC5BB, + 21590 - 11905: 0xDFBF, + 21591 - 11905: 0xDFC2, + 21592 - 11905: 0xD4B1, + 21593 - 11905: 0xDFC3, + 21594 - 11905: 0x85D8, + 21595 - 11905: 0xC7BA, + 21596 - 11905: 0xCED8, + 21597 - 11905: 0x85D9, + 21598 - 11905: 0x85DA, + 21599 - 11905: 0x85DB, + 21600 - 11905: 0x85DC, + 21601 - 11905: 0x85DD, + 21602 - 11905: 0xC4D8, + 21603 - 11905: 0x85DE, + 21604 - 11905: 0xDFCA, + 21605 - 11905: 0x85DF, + 21606 - 11905: 0xDFCF, + 21607 - 11905: 0x85E0, + 21608 - 11905: 0xD6DC, + 21609 - 11905: 0x85E1, + 21610 - 11905: 0x85E2, + 21611 - 11905: 0x85E3, + 21612 - 11905: 0x85E4, + 21613 - 11905: 0x85E5, + 21614 - 11905: 0x85E6, + 21615 - 11905: 0x85E7, + 21616 - 11905: 0x85E8, + 21617 - 11905: 0xDFC9, + 21618 - 11905: 0xDFDA, + 21619 - 11905: 0xCEB6, + 21620 - 11905: 0x85E9, + 21621 - 11905: 0xBAC7, + 21622 - 11905: 0xDFCE, + 21623 - 11905: 0xDFC8, + 21624 - 11905: 0xC5DE, + 21625 - 11905: 0x85EA, + 21626 - 11905: 0x85EB, + 21627 - 11905: 0xC9EB, + 21628 - 11905: 0xBAF4, + 21629 - 11905: 0xC3FC, + 21630 - 11905: 0x85EC, + 21631 - 11905: 0x85ED, + 21632 - 11905: 0xBED7, + 21633 - 11905: 0x85EE, + 21634 - 11905: 0xDFC6, + 21635 - 11905: 0x85EF, + 21636 - 11905: 0xDFCD, + 21637 - 11905: 0x85F0, + 21638 - 11905: 0xC5D8, + 21639 - 11905: 0x85F1, + 21640 - 11905: 0x85F2, + 21641 - 11905: 0x85F3, + 21642 - 11905: 0x85F4, + 21643 - 11905: 0xD5A6, + 21644 - 11905: 0xBACD, + 21645 - 11905: 0x85F5, + 21646 - 11905: 0xBECC, + 21647 - 11905: 0xD3BD, + 21648 - 11905: 0xB8C0, + 21649 - 11905: 0x85F6, + 21650 - 11905: 0xD6E4, + 21651 - 11905: 0x85F7, + 21652 - 11905: 0xDFC7, + 21653 - 11905: 0xB9BE, + 21654 - 11905: 0xBFA7, + 21655 - 11905: 0x85F8, + 21656 - 11905: 0x85F9, + 21657 - 11905: 0xC1FC, + 21658 - 11905: 0xDFCB, + 21659 - 11905: 0xDFCC, + 21660 - 11905: 0x85FA, + 21661 - 11905: 0xDFD0, + 21662 - 11905: 0x85FB, + 21663 - 11905: 0x85FC, + 21664 - 11905: 0x85FD, + 21665 - 11905: 0x85FE, + 21666 - 11905: 0x8640, + 21667 - 11905: 0xDFDB, + 21668 - 11905: 0xDFE5, + 21669 - 11905: 0x8641, + 21670 - 11905: 0xDFD7, + 21671 - 11905: 0xDFD6, + 21672 - 11905: 0xD7C9, + 21673 - 11905: 0xDFE3, + 21674 - 11905: 0xDFE4, + 21675 - 11905: 0xE5EB, + 21676 - 11905: 0xD2A7, + 21677 - 11905: 0xDFD2, + 21678 - 11905: 0x8642, + 21679 - 11905: 0xBFA9, + 21680 - 11905: 0x8643, + 21681 - 11905: 0xD4DB, + 21682 - 11905: 0x8644, + 21683 - 11905: 0xBFC8, + 21684 - 11905: 0xDFD4, + 21685 - 11905: 0x8645, + 21686 - 11905: 0x8646, + 21687 - 11905: 0x8647, + 21688 - 11905: 0xCFCC, + 21689 - 11905: 0x8648, + 21690 - 11905: 0x8649, + 21691 - 11905: 0xDFDD, + 21692 - 11905: 0x864A, + 21693 - 11905: 0xD1CA, + 21694 - 11905: 0x864B, + 21695 - 11905: 0xDFDE, + 21696 - 11905: 0xB0A7, + 21697 - 11905: 0xC6B7, + 21698 - 11905: 0xDFD3, + 21699 - 11905: 0x864C, + 21700 - 11905: 0xBAE5, + 21701 - 11905: 0x864D, + 21702 - 11905: 0xB6DF, + 21703 - 11905: 0xCDDB, + 21704 - 11905: 0xB9FE, + 21705 - 11905: 0xD4D5, + 21706 - 11905: 0x864E, + 21707 - 11905: 0x864F, + 21708 - 11905: 0xDFDF, + 21709 - 11905: 0xCFEC, + 21710 - 11905: 0xB0A5, + 21711 - 11905: 0xDFE7, + 21712 - 11905: 0xDFD1, + 21713 - 11905: 0xD1C6, + 21714 - 11905: 0xDFD5, + 21715 - 11905: 0xDFD8, + 21716 - 11905: 0xDFD9, + 21717 - 11905: 0xDFDC, + 21718 - 11905: 0x8650, + 21719 - 11905: 0xBBA9, + 21720 - 11905: 0x8651, + 21721 - 11905: 0xDFE0, + 21722 - 11905: 0xDFE1, + 21723 - 11905: 0x8652, + 21724 - 11905: 0xDFE2, + 21725 - 11905: 0xDFE6, + 21726 - 11905: 0xDFE8, + 21727 - 11905: 0xD3B4, + 21728 - 11905: 0x8653, + 21729 - 11905: 0x8654, + 21730 - 11905: 0x8655, + 21731 - 11905: 0x8656, + 21732 - 11905: 0x8657, + 21733 - 11905: 0xB8E7, + 21734 - 11905: 0xC5B6, + 21735 - 11905: 0xDFEA, + 21736 - 11905: 0xC9DA, + 21737 - 11905: 0xC1A8, + 21738 - 11905: 0xC4C4, + 21739 - 11905: 0x8658, + 21740 - 11905: 0x8659, + 21741 - 11905: 0xBFDE, + 21742 - 11905: 0xCFF8, + 21743 - 11905: 0x865A, + 21744 - 11905: 0x865B, + 21745 - 11905: 0x865C, + 21746 - 11905: 0xD5DC, + 21747 - 11905: 0xDFEE, + 21748 - 11905: 0x865D, + 21749 - 11905: 0x865E, + 21750 - 11905: 0x865F, + 21751 - 11905: 0x8660, + 21752 - 11905: 0x8661, + 21753 - 11905: 0x8662, + 21754 - 11905: 0xB2B8, + 21755 - 11905: 0x8663, + 21756 - 11905: 0xBADF, + 21757 - 11905: 0xDFEC, + 21758 - 11905: 0x8664, + 21759 - 11905: 0xDBC1, + 21760 - 11905: 0x8665, + 21761 - 11905: 0xD1E4, + 21762 - 11905: 0x8666, + 21763 - 11905: 0x8667, + 21764 - 11905: 0x8668, + 21765 - 11905: 0x8669, + 21766 - 11905: 0xCBF4, + 21767 - 11905: 0xB4BD, + 21768 - 11905: 0x866A, + 21769 - 11905: 0xB0A6, + 21770 - 11905: 0x866B, + 21771 - 11905: 0x866C, + 21772 - 11905: 0x866D, + 21773 - 11905: 0x866E, + 21774 - 11905: 0x866F, + 21775 - 11905: 0xDFF1, + 21776 - 11905: 0xCCC6, + 21777 - 11905: 0xDFF2, + 21778 - 11905: 0x8670, + 21779 - 11905: 0x8671, + 21780 - 11905: 0xDFED, + 21781 - 11905: 0x8672, + 21782 - 11905: 0x8673, + 21783 - 11905: 0x8674, + 21784 - 11905: 0x8675, + 21785 - 11905: 0x8676, + 21786 - 11905: 0x8677, + 21787 - 11905: 0xDFE9, + 21788 - 11905: 0x8678, + 21789 - 11905: 0x8679, + 21790 - 11905: 0x867A, + 21791 - 11905: 0x867B, + 21792 - 11905: 0xDFEB, + 21793 - 11905: 0x867C, + 21794 - 11905: 0xDFEF, + 21795 - 11905: 0xDFF0, + 21796 - 11905: 0xBBBD, + 21797 - 11905: 0x867D, + 21798 - 11905: 0x867E, + 21799 - 11905: 0xDFF3, + 21800 - 11905: 0x8680, + 21801 - 11905: 0x8681, + 21802 - 11905: 0xDFF4, + 21803 - 11905: 0x8682, + 21804 - 11905: 0xBBA3, + 21805 - 11905: 0x8683, + 21806 - 11905: 0xCADB, + 21807 - 11905: 0xCEA8, + 21808 - 11905: 0xE0A7, + 21809 - 11905: 0xB3AA, + 21810 - 11905: 0x8684, + 21811 - 11905: 0xE0A6, + 21812 - 11905: 0x8685, + 21813 - 11905: 0x8686, + 21814 - 11905: 0x8687, + 21815 - 11905: 0xE0A1, + 21816 - 11905: 0x8688, + 21817 - 11905: 0x8689, + 21818 - 11905: 0x868A, + 21819 - 11905: 0x868B, + 21820 - 11905: 0xDFFE, + 21821 - 11905: 0x868C, + 21822 - 11905: 0xCDD9, + 21823 - 11905: 0xDFFC, + 21824 - 11905: 0x868D, + 21825 - 11905: 0xDFFA, + 21826 - 11905: 0x868E, + 21827 - 11905: 0xBFD0, + 21828 - 11905: 0xD7C4, + 21829 - 11905: 0x868F, + 21830 - 11905: 0xC9CC, + 21831 - 11905: 0x8690, + 21832 - 11905: 0x8691, + 21833 - 11905: 0xDFF8, + 21834 - 11905: 0xB0A1, + 21835 - 11905: 0x8692, + 21836 - 11905: 0x8693, + 21837 - 11905: 0x8694, + 21838 - 11905: 0x8695, + 21839 - 11905: 0x8696, + 21840 - 11905: 0xDFFD, + 21841 - 11905: 0x8697, + 21842 - 11905: 0x8698, + 21843 - 11905: 0x8699, + 21844 - 11905: 0x869A, + 21845 - 11905: 0xDFFB, + 21846 - 11905: 0xE0A2, + 21847 - 11905: 0x869B, + 21848 - 11905: 0x869C, + 21849 - 11905: 0x869D, + 21850 - 11905: 0x869E, + 21851 - 11905: 0x869F, + 21852 - 11905: 0xE0A8, + 21853 - 11905: 0x86A0, + 21854 - 11905: 0x86A1, + 21855 - 11905: 0x86A2, + 21856 - 11905: 0x86A3, + 21857 - 11905: 0xB7C8, + 21858 - 11905: 0x86A4, + 21859 - 11905: 0x86A5, + 21860 - 11905: 0xC6A1, + 21861 - 11905: 0xC9B6, + 21862 - 11905: 0xC0B2, + 21863 - 11905: 0xDFF5, + 21864 - 11905: 0x86A6, + 21865 - 11905: 0x86A7, + 21866 - 11905: 0xC5BE, + 21867 - 11905: 0x86A8, + 21868 - 11905: 0xD8C4, + 21869 - 11905: 0xDFF9, + 21870 - 11905: 0xC4F6, + 21871 - 11905: 0x86A9, + 21872 - 11905: 0x86AA, + 21873 - 11905: 0x86AB, + 21874 - 11905: 0x86AC, + 21875 - 11905: 0x86AD, + 21876 - 11905: 0x86AE, + 21877 - 11905: 0xE0A3, + 21878 - 11905: 0xE0A4, + 21879 - 11905: 0xE0A5, + 21880 - 11905: 0xD0A5, + 21881 - 11905: 0x86AF, + 21882 - 11905: 0x86B0, + 21883 - 11905: 0xE0B4, + 21884 - 11905: 0xCCE4, + 21885 - 11905: 0x86B1, + 21886 - 11905: 0xE0B1, + 21887 - 11905: 0x86B2, + 21888 - 11905: 0xBFA6, + 21889 - 11905: 0xE0AF, + 21890 - 11905: 0xCEB9, + 21891 - 11905: 0xE0AB, + 21892 - 11905: 0xC9C6, + 21893 - 11905: 0x86B3, + 21894 - 11905: 0x86B4, + 21895 - 11905: 0xC0AE, + 21896 - 11905: 0xE0AE, + 21897 - 11905: 0xBAED, + 21898 - 11905: 0xBAB0, + 21899 - 11905: 0xE0A9, + 21900 - 11905: 0x86B5, + 21901 - 11905: 0x86B6, + 21902 - 11905: 0x86B7, + 21903 - 11905: 0xDFF6, + 21904 - 11905: 0x86B8, + 21905 - 11905: 0xE0B3, + 21906 - 11905: 0x86B9, + 21907 - 11905: 0x86BA, + 21908 - 11905: 0xE0B8, + 21909 - 11905: 0x86BB, + 21910 - 11905: 0x86BC, + 21911 - 11905: 0x86BD, + 21912 - 11905: 0xB4AD, + 21913 - 11905: 0xE0B9, + 21914 - 11905: 0x86BE, + 21915 - 11905: 0x86BF, + 21916 - 11905: 0xCFB2, + 21917 - 11905: 0xBAC8, + 21918 - 11905: 0x86C0, + 21919 - 11905: 0xE0B0, + 21920 - 11905: 0x86C1, + 21921 - 11905: 0x86C2, + 21922 - 11905: 0x86C3, + 21923 - 11905: 0x86C4, + 21924 - 11905: 0x86C5, + 21925 - 11905: 0x86C6, + 21926 - 11905: 0x86C7, + 21927 - 11905: 0xD0FA, + 21928 - 11905: 0x86C8, + 21929 - 11905: 0x86C9, + 21930 - 11905: 0x86CA, + 21931 - 11905: 0x86CB, + 21932 - 11905: 0x86CC, + 21933 - 11905: 0x86CD, + 21934 - 11905: 0x86CE, + 21935 - 11905: 0x86CF, + 21936 - 11905: 0x86D0, + 21937 - 11905: 0xE0AC, + 21938 - 11905: 0x86D1, + 21939 - 11905: 0xD4FB, + 21940 - 11905: 0x86D2, + 21941 - 11905: 0xDFF7, + 21942 - 11905: 0x86D3, + 21943 - 11905: 0xC5E7, + 21944 - 11905: 0x86D4, + 21945 - 11905: 0xE0AD, + 21946 - 11905: 0x86D5, + 21947 - 11905: 0xD3F7, + 21948 - 11905: 0x86D6, + 21949 - 11905: 0xE0B6, + 21950 - 11905: 0xE0B7, + 21951 - 11905: 0x86D7, + 21952 - 11905: 0x86D8, + 21953 - 11905: 0x86D9, + 21954 - 11905: 0x86DA, + 21955 - 11905: 0x86DB, + 21956 - 11905: 0xE0C4, + 21957 - 11905: 0xD0E1, + 21958 - 11905: 0x86DC, + 21959 - 11905: 0x86DD, + 21960 - 11905: 0x86DE, + 21961 - 11905: 0xE0BC, + 21962 - 11905: 0x86DF, + 21963 - 11905: 0x86E0, + 21964 - 11905: 0xE0C9, + 21965 - 11905: 0xE0CA, + 21966 - 11905: 0x86E1, + 21967 - 11905: 0x86E2, + 21968 - 11905: 0x86E3, + 21969 - 11905: 0xE0BE, + 21970 - 11905: 0xE0AA, + 21971 - 11905: 0xC9A4, + 21972 - 11905: 0xE0C1, + 21973 - 11905: 0x86E4, + 21974 - 11905: 0xE0B2, + 21975 - 11905: 0x86E5, + 21976 - 11905: 0x86E6, + 21977 - 11905: 0x86E7, + 21978 - 11905: 0x86E8, + 21979 - 11905: 0x86E9, + 21980 - 11905: 0xCAC8, + 21981 - 11905: 0xE0C3, + 21982 - 11905: 0x86EA, + 21983 - 11905: 0xE0B5, + 21984 - 11905: 0x86EB, + 21985 - 11905: 0xCECB, + 21986 - 11905: 0x86EC, + 21987 - 11905: 0xCBC3, + 21988 - 11905: 0xE0CD, + 21989 - 11905: 0xE0C6, + 21990 - 11905: 0xE0C2, + 21991 - 11905: 0x86ED, + 21992 - 11905: 0xE0CB, + 21993 - 11905: 0x86EE, + 21994 - 11905: 0xE0BA, + 21995 - 11905: 0xE0BF, + 21996 - 11905: 0xE0C0, + 21997 - 11905: 0x86EF, + 21998 - 11905: 0x86F0, + 21999 - 11905: 0xE0C5, + 22000 - 11905: 0x86F1, + 22001 - 11905: 0x86F2, + 22002 - 11905: 0xE0C7, + 22003 - 11905: 0xE0C8, + 22004 - 11905: 0x86F3, + 22005 - 11905: 0xE0CC, + 22006 - 11905: 0x86F4, + 22007 - 11905: 0xE0BB, + 22008 - 11905: 0x86F5, + 22009 - 11905: 0x86F6, + 22010 - 11905: 0x86F7, + 22011 - 11905: 0x86F8, + 22012 - 11905: 0x86F9, + 22013 - 11905: 0xCBD4, + 22014 - 11905: 0xE0D5, + 22015 - 11905: 0x86FA, + 22016 - 11905: 0xE0D6, + 22017 - 11905: 0xE0D2, + 22018 - 11905: 0x86FB, + 22019 - 11905: 0x86FC, + 22020 - 11905: 0x86FD, + 22021 - 11905: 0x86FE, + 22022 - 11905: 0x8740, + 22023 - 11905: 0x8741, + 22024 - 11905: 0xE0D0, + 22025 - 11905: 0xBCCE, + 22026 - 11905: 0x8742, + 22027 - 11905: 0x8743, + 22028 - 11905: 0xE0D1, + 22029 - 11905: 0x8744, + 22030 - 11905: 0xB8C2, + 22031 - 11905: 0xD8C5, + 22032 - 11905: 0x8745, + 22033 - 11905: 0x8746, + 22034 - 11905: 0x8747, + 22035 - 11905: 0x8748, + 22036 - 11905: 0x8749, + 22037 - 11905: 0x874A, + 22038 - 11905: 0x874B, + 22039 - 11905: 0x874C, + 22040 - 11905: 0xD0EA, + 22041 - 11905: 0x874D, + 22042 - 11905: 0x874E, + 22043 - 11905: 0xC2EF, + 22044 - 11905: 0x874F, + 22045 - 11905: 0x8750, + 22046 - 11905: 0xE0CF, + 22047 - 11905: 0xE0BD, + 22048 - 11905: 0x8751, + 22049 - 11905: 0x8752, + 22050 - 11905: 0x8753, + 22051 - 11905: 0xE0D4, + 22052 - 11905: 0xE0D3, + 22053 - 11905: 0x8754, + 22054 - 11905: 0x8755, + 22055 - 11905: 0xE0D7, + 22056 - 11905: 0x8756, + 22057 - 11905: 0x8757, + 22058 - 11905: 0x8758, + 22059 - 11905: 0x8759, + 22060 - 11905: 0xE0DC, + 22061 - 11905: 0xE0D8, + 22062 - 11905: 0x875A, + 22063 - 11905: 0x875B, + 22064 - 11905: 0x875C, + 22065 - 11905: 0xD6F6, + 22066 - 11905: 0xB3B0, + 22067 - 11905: 0x875D, + 22068 - 11905: 0xD7EC, + 22069 - 11905: 0x875E, + 22070 - 11905: 0xCBBB, + 22071 - 11905: 0x875F, + 22072 - 11905: 0x8760, + 22073 - 11905: 0xE0DA, + 22074 - 11905: 0x8761, + 22075 - 11905: 0xCEFB, + 22076 - 11905: 0x8762, + 22077 - 11905: 0x8763, + 22078 - 11905: 0x8764, + 22079 - 11905: 0xBAD9, + 22080 - 11905: 0x8765, + 22081 - 11905: 0x8766, + 22082 - 11905: 0x8767, + 22083 - 11905: 0x8768, + 22084 - 11905: 0x8769, + 22085 - 11905: 0x876A, + 22086 - 11905: 0x876B, + 22087 - 11905: 0x876C, + 22088 - 11905: 0x876D, + 22089 - 11905: 0x876E, + 22090 - 11905: 0x876F, + 22091 - 11905: 0x8770, + 22092 - 11905: 0xE0E1, + 22093 - 11905: 0xE0DD, + 22094 - 11905: 0xD2AD, + 22095 - 11905: 0x8771, + 22096 - 11905: 0x8772, + 22097 - 11905: 0x8773, + 22098 - 11905: 0x8774, + 22099 - 11905: 0x8775, + 22100 - 11905: 0xE0E2, + 22101 - 11905: 0x8776, + 22102 - 11905: 0x8777, + 22103 - 11905: 0xE0DB, + 22104 - 11905: 0xE0D9, + 22105 - 11905: 0xE0DF, + 22106 - 11905: 0x8778, + 22107 - 11905: 0x8779, + 22108 - 11905: 0xE0E0, + 22109 - 11905: 0x877A, + 22110 - 11905: 0x877B, + 22111 - 11905: 0x877C, + 22112 - 11905: 0x877D, + 22113 - 11905: 0x877E, + 22114 - 11905: 0xE0DE, + 22115 - 11905: 0x8780, + 22116 - 11905: 0xE0E4, + 22117 - 11905: 0x8781, + 22118 - 11905: 0x8782, + 22119 - 11905: 0x8783, + 22120 - 11905: 0xC6F7, + 22121 - 11905: 0xD8AC, + 22122 - 11905: 0xD4EB, + 22123 - 11905: 0xE0E6, + 22124 - 11905: 0xCAC9, + 22125 - 11905: 0x8784, + 22126 - 11905: 0x8785, + 22127 - 11905: 0x8786, + 22128 - 11905: 0x8787, + 22129 - 11905: 0xE0E5, + 22130 - 11905: 0x8788, + 22131 - 11905: 0x8789, + 22132 - 11905: 0x878A, + 22133 - 11905: 0x878B, + 22134 - 11905: 0xB8C1, + 22135 - 11905: 0x878C, + 22136 - 11905: 0x878D, + 22137 - 11905: 0x878E, + 22138 - 11905: 0x878F, + 22139 - 11905: 0xE0E7, + 22140 - 11905: 0xE0E8, + 22141 - 11905: 0x8790, + 22142 - 11905: 0x8791, + 22143 - 11905: 0x8792, + 22144 - 11905: 0x8793, + 22145 - 11905: 0x8794, + 22146 - 11905: 0x8795, + 22147 - 11905: 0x8796, + 22148 - 11905: 0x8797, + 22149 - 11905: 0xE0E9, + 22150 - 11905: 0xE0E3, + 22151 - 11905: 0x8798, + 22152 - 11905: 0x8799, + 22153 - 11905: 0x879A, + 22154 - 11905: 0x879B, + 22155 - 11905: 0x879C, + 22156 - 11905: 0x879D, + 22157 - 11905: 0x879E, + 22158 - 11905: 0xBABF, + 22159 - 11905: 0xCCE7, + 22160 - 11905: 0x879F, + 22161 - 11905: 0x87A0, + 22162 - 11905: 0x87A1, + 22163 - 11905: 0xE0EA, + 22164 - 11905: 0x87A2, + 22165 - 11905: 0x87A3, + 22166 - 11905: 0x87A4, + 22167 - 11905: 0x87A5, + 22168 - 11905: 0x87A6, + 22169 - 11905: 0x87A7, + 22170 - 11905: 0x87A8, + 22171 - 11905: 0x87A9, + 22172 - 11905: 0x87AA, + 22173 - 11905: 0x87AB, + 22174 - 11905: 0x87AC, + 22175 - 11905: 0x87AD, + 22176 - 11905: 0x87AE, + 22177 - 11905: 0x87AF, + 22178 - 11905: 0x87B0, + 22179 - 11905: 0xCFF9, + 22180 - 11905: 0x87B1, + 22181 - 11905: 0x87B2, + 22182 - 11905: 0x87B3, + 22183 - 11905: 0x87B4, + 22184 - 11905: 0x87B5, + 22185 - 11905: 0x87B6, + 22186 - 11905: 0x87B7, + 22187 - 11905: 0x87B8, + 22188 - 11905: 0x87B9, + 22189 - 11905: 0x87BA, + 22190 - 11905: 0x87BB, + 22191 - 11905: 0xE0EB, + 22192 - 11905: 0x87BC, + 22193 - 11905: 0x87BD, + 22194 - 11905: 0x87BE, + 22195 - 11905: 0x87BF, + 22196 - 11905: 0x87C0, + 22197 - 11905: 0x87C1, + 22198 - 11905: 0x87C2, + 22199 - 11905: 0xC8C2, + 22200 - 11905: 0x87C3, + 22201 - 11905: 0x87C4, + 22202 - 11905: 0x87C5, + 22203 - 11905: 0x87C6, + 22204 - 11905: 0xBDC0, + 22205 - 11905: 0x87C7, + 22206 - 11905: 0x87C8, + 22207 - 11905: 0x87C9, + 22208 - 11905: 0x87CA, + 22209 - 11905: 0x87CB, + 22210 - 11905: 0x87CC, + 22211 - 11905: 0x87CD, + 22212 - 11905: 0x87CE, + 22213 - 11905: 0x87CF, + 22214 - 11905: 0x87D0, + 22215 - 11905: 0x87D1, + 22216 - 11905: 0x87D2, + 22217 - 11905: 0x87D3, + 22218 - 11905: 0xC4D2, + 22219 - 11905: 0x87D4, + 22220 - 11905: 0x87D5, + 22221 - 11905: 0x87D6, + 22222 - 11905: 0x87D7, + 22223 - 11905: 0x87D8, + 22224 - 11905: 0x87D9, + 22225 - 11905: 0x87DA, + 22226 - 11905: 0x87DB, + 22227 - 11905: 0x87DC, + 22228 - 11905: 0xE0EC, + 22229 - 11905: 0x87DD, + 22230 - 11905: 0x87DE, + 22231 - 11905: 0xE0ED, + 22232 - 11905: 0x87DF, + 22233 - 11905: 0x87E0, + 22234 - 11905: 0xC7F4, + 22235 - 11905: 0xCBC4, + 22236 - 11905: 0x87E1, + 22237 - 11905: 0xE0EE, + 22238 - 11905: 0xBBD8, + 22239 - 11905: 0xD8B6, + 22240 - 11905: 0xD2F2, + 22241 - 11905: 0xE0EF, + 22242 - 11905: 0xCDC5, + 22243 - 11905: 0x87E2, + 22244 - 11905: 0xB6DA, + 22245 - 11905: 0x87E3, + 22246 - 11905: 0x87E4, + 22247 - 11905: 0x87E5, + 22248 - 11905: 0x87E6, + 22249 - 11905: 0x87E7, + 22250 - 11905: 0x87E8, + 22251 - 11905: 0xE0F1, + 22252 - 11905: 0x87E9, + 22253 - 11905: 0xD4B0, + 22254 - 11905: 0x87EA, + 22255 - 11905: 0x87EB, + 22256 - 11905: 0xC0A7, + 22257 - 11905: 0xB4D1, + 22258 - 11905: 0x87EC, + 22259 - 11905: 0x87ED, + 22260 - 11905: 0xCEA7, + 22261 - 11905: 0xE0F0, + 22262 - 11905: 0x87EE, + 22263 - 11905: 0x87EF, + 22264 - 11905: 0x87F0, + 22265 - 11905: 0xE0F2, + 22266 - 11905: 0xB9CC, + 22267 - 11905: 0x87F1, + 22268 - 11905: 0x87F2, + 22269 - 11905: 0xB9FA, + 22270 - 11905: 0xCDBC, + 22271 - 11905: 0xE0F3, + 22272 - 11905: 0x87F3, + 22273 - 11905: 0x87F4, + 22274 - 11905: 0x87F5, + 22275 - 11905: 0xC6D4, + 22276 - 11905: 0xE0F4, + 22277 - 11905: 0x87F6, + 22278 - 11905: 0xD4B2, + 22279 - 11905: 0x87F7, + 22280 - 11905: 0xC8A6, + 22281 - 11905: 0xE0F6, + 22282 - 11905: 0xE0F5, + 22283 - 11905: 0x87F8, + 22284 - 11905: 0x87F9, + 22285 - 11905: 0x87FA, + 22286 - 11905: 0x87FB, + 22287 - 11905: 0x87FC, + 22288 - 11905: 0x87FD, + 22289 - 11905: 0x87FE, + 22290 - 11905: 0x8840, + 22291 - 11905: 0x8841, + 22292 - 11905: 0x8842, + 22293 - 11905: 0x8843, + 22294 - 11905: 0x8844, + 22295 - 11905: 0x8845, + 22296 - 11905: 0x8846, + 22297 - 11905: 0x8847, + 22298 - 11905: 0x8848, + 22299 - 11905: 0x8849, + 22300 - 11905: 0xE0F7, + 22301 - 11905: 0x884A, + 22302 - 11905: 0x884B, + 22303 - 11905: 0xCDC1, + 22304 - 11905: 0x884C, + 22305 - 11905: 0x884D, + 22306 - 11905: 0x884E, + 22307 - 11905: 0xCAA5, + 22308 - 11905: 0x884F, + 22309 - 11905: 0x8850, + 22310 - 11905: 0x8851, + 22311 - 11905: 0x8852, + 22312 - 11905: 0xD4DA, + 22313 - 11905: 0xDBD7, + 22314 - 11905: 0xDBD9, + 22315 - 11905: 0x8853, + 22316 - 11905: 0xDBD8, + 22317 - 11905: 0xB9E7, + 22318 - 11905: 0xDBDC, + 22319 - 11905: 0xDBDD, + 22320 - 11905: 0xB5D8, + 22321 - 11905: 0x8854, + 22322 - 11905: 0x8855, + 22323 - 11905: 0xDBDA, + 22324 - 11905: 0x8856, + 22325 - 11905: 0x8857, + 22326 - 11905: 0x8858, + 22327 - 11905: 0x8859, + 22328 - 11905: 0x885A, + 22329 - 11905: 0xDBDB, + 22330 - 11905: 0xB3A1, + 22331 - 11905: 0xDBDF, + 22332 - 11905: 0x885B, + 22333 - 11905: 0x885C, + 22334 - 11905: 0xBBF8, + 22335 - 11905: 0x885D, + 22336 - 11905: 0xD6B7, + 22337 - 11905: 0x885E, + 22338 - 11905: 0xDBE0, + 22339 - 11905: 0x885F, + 22340 - 11905: 0x8860, + 22341 - 11905: 0x8861, + 22342 - 11905: 0x8862, + 22343 - 11905: 0xBEF9, + 22344 - 11905: 0x8863, + 22345 - 11905: 0x8864, + 22346 - 11905: 0xB7BB, + 22347 - 11905: 0x8865, + 22348 - 11905: 0xDBD0, + 22349 - 11905: 0xCCAE, + 22350 - 11905: 0xBFB2, + 22351 - 11905: 0xBBB5, + 22352 - 11905: 0xD7F8, + 22353 - 11905: 0xBFD3, + 22354 - 11905: 0x8866, + 22355 - 11905: 0x8867, + 22356 - 11905: 0x8868, + 22357 - 11905: 0x8869, + 22358 - 11905: 0x886A, + 22359 - 11905: 0xBFE9, + 22360 - 11905: 0x886B, + 22361 - 11905: 0x886C, + 22362 - 11905: 0xBCE1, + 22363 - 11905: 0xCCB3, + 22364 - 11905: 0xDBDE, + 22365 - 11905: 0xB0D3, + 22366 - 11905: 0xCEEB, + 22367 - 11905: 0xB7D8, + 22368 - 11905: 0xD7B9, + 22369 - 11905: 0xC6C2, + 22370 - 11905: 0x886D, + 22371 - 11905: 0x886E, + 22372 - 11905: 0xC0A4, + 22373 - 11905: 0x886F, + 22374 - 11905: 0xCCB9, + 22375 - 11905: 0x8870, + 22376 - 11905: 0xDBE7, + 22377 - 11905: 0xDBE1, + 22378 - 11905: 0xC6BA, + 22379 - 11905: 0xDBE3, + 22380 - 11905: 0x8871, + 22381 - 11905: 0xDBE8, + 22382 - 11905: 0x8872, + 22383 - 11905: 0xC5F7, + 22384 - 11905: 0x8873, + 22385 - 11905: 0x8874, + 22386 - 11905: 0x8875, + 22387 - 11905: 0xDBEA, + 22388 - 11905: 0x8876, + 22389 - 11905: 0x8877, + 22390 - 11905: 0xDBE9, + 22391 - 11905: 0xBFC0, + 22392 - 11905: 0x8878, + 22393 - 11905: 0x8879, + 22394 - 11905: 0x887A, + 22395 - 11905: 0xDBE6, + 22396 - 11905: 0xDBE5, + 22397 - 11905: 0x887B, + 22398 - 11905: 0x887C, + 22399 - 11905: 0x887D, + 22400 - 11905: 0x887E, + 22401 - 11905: 0x8880, + 22402 - 11905: 0xB4B9, + 22403 - 11905: 0xC0AC, + 22404 - 11905: 0xC2A2, + 22405 - 11905: 0xDBE2, + 22406 - 11905: 0xDBE4, + 22407 - 11905: 0x8881, + 22408 - 11905: 0x8882, + 22409 - 11905: 0x8883, + 22410 - 11905: 0x8884, + 22411 - 11905: 0xD0CD, + 22412 - 11905: 0xDBED, + 22413 - 11905: 0x8885, + 22414 - 11905: 0x8886, + 22415 - 11905: 0x8887, + 22416 - 11905: 0x8888, + 22417 - 11905: 0x8889, + 22418 - 11905: 0xC0DD, + 22419 - 11905: 0xDBF2, + 22420 - 11905: 0x888A, + 22421 - 11905: 0x888B, + 22422 - 11905: 0x888C, + 22423 - 11905: 0x888D, + 22424 - 11905: 0x888E, + 22425 - 11905: 0x888F, + 22426 - 11905: 0x8890, + 22427 - 11905: 0xB6E2, + 22428 - 11905: 0x8891, + 22429 - 11905: 0x8892, + 22430 - 11905: 0x8893, + 22431 - 11905: 0x8894, + 22432 - 11905: 0xDBF3, + 22433 - 11905: 0xDBD2, + 22434 - 11905: 0xB9B8, + 22435 - 11905: 0xD4AB, + 22436 - 11905: 0xDBEC, + 22437 - 11905: 0x8895, + 22438 - 11905: 0xBFD1, + 22439 - 11905: 0xDBF0, + 22440 - 11905: 0x8896, + 22441 - 11905: 0xDBD1, + 22442 - 11905: 0x8897, + 22443 - 11905: 0xB5E6, + 22444 - 11905: 0x8898, + 22445 - 11905: 0xDBEB, + 22446 - 11905: 0xBFE5, + 22447 - 11905: 0x8899, + 22448 - 11905: 0x889A, + 22449 - 11905: 0x889B, + 22450 - 11905: 0xDBEE, + 22451 - 11905: 0x889C, + 22452 - 11905: 0xDBF1, + 22453 - 11905: 0x889D, + 22454 - 11905: 0x889E, + 22455 - 11905: 0x889F, + 22456 - 11905: 0xDBF9, + 22457 - 11905: 0x88A0, + 22458 - 11905: 0x88A1, + 22459 - 11905: 0x88A2, + 22460 - 11905: 0x88A3, + 22461 - 11905: 0x88A4, + 22462 - 11905: 0x88A5, + 22463 - 11905: 0x88A6, + 22464 - 11905: 0x88A7, + 22465 - 11905: 0x88A8, + 22466 - 11905: 0xB9A1, + 22467 - 11905: 0xB0A3, + 22468 - 11905: 0x88A9, + 22469 - 11905: 0x88AA, + 22470 - 11905: 0x88AB, + 22471 - 11905: 0x88AC, + 22472 - 11905: 0x88AD, + 22473 - 11905: 0x88AE, + 22474 - 11905: 0x88AF, + 22475 - 11905: 0xC2F1, + 22476 - 11905: 0x88B0, + 22477 - 11905: 0x88B1, + 22478 - 11905: 0xB3C7, + 22479 - 11905: 0xDBEF, + 22480 - 11905: 0x88B2, + 22481 - 11905: 0x88B3, + 22482 - 11905: 0xDBF8, + 22483 - 11905: 0x88B4, + 22484 - 11905: 0xC6D2, + 22485 - 11905: 0xDBF4, + 22486 - 11905: 0x88B5, + 22487 - 11905: 0x88B6, + 22488 - 11905: 0xDBF5, + 22489 - 11905: 0xDBF7, + 22490 - 11905: 0xDBF6, + 22491 - 11905: 0x88B7, + 22492 - 11905: 0x88B8, + 22493 - 11905: 0xDBFE, + 22494 - 11905: 0x88B9, + 22495 - 11905: 0xD3F2, + 22496 - 11905: 0xB2BA, + 22497 - 11905: 0x88BA, + 22498 - 11905: 0x88BB, + 22499 - 11905: 0x88BC, + 22500 - 11905: 0xDBFD, + 22501 - 11905: 0x88BD, + 22502 - 11905: 0x88BE, + 22503 - 11905: 0x88BF, + 22504 - 11905: 0x88C0, + 22505 - 11905: 0x88C1, + 22506 - 11905: 0x88C2, + 22507 - 11905: 0x88C3, + 22508 - 11905: 0x88C4, + 22509 - 11905: 0xDCA4, + 22510 - 11905: 0x88C5, + 22511 - 11905: 0xDBFB, + 22512 - 11905: 0x88C6, + 22513 - 11905: 0x88C7, + 22514 - 11905: 0x88C8, + 22515 - 11905: 0x88C9, + 22516 - 11905: 0xDBFA, + 22517 - 11905: 0x88CA, + 22518 - 11905: 0x88CB, + 22519 - 11905: 0x88CC, + 22520 - 11905: 0xDBFC, + 22521 - 11905: 0xC5E0, + 22522 - 11905: 0xBBF9, + 22523 - 11905: 0x88CD, + 22524 - 11905: 0x88CE, + 22525 - 11905: 0xDCA3, + 22526 - 11905: 0x88CF, + 22527 - 11905: 0x88D0, + 22528 - 11905: 0xDCA5, + 22529 - 11905: 0x88D1, + 22530 - 11905: 0xCCC3, + 22531 - 11905: 0x88D2, + 22532 - 11905: 0x88D3, + 22533 - 11905: 0x88D4, + 22534 - 11905: 0xB6D1, + 22535 - 11905: 0xDDC0, + 22536 - 11905: 0x88D5, + 22537 - 11905: 0x88D6, + 22538 - 11905: 0x88D7, + 22539 - 11905: 0xDCA1, + 22540 - 11905: 0x88D8, + 22541 - 11905: 0xDCA2, + 22542 - 11905: 0x88D9, + 22543 - 11905: 0x88DA, + 22544 - 11905: 0x88DB, + 22545 - 11905: 0xC7B5, + 22546 - 11905: 0x88DC, + 22547 - 11905: 0x88DD, + 22548 - 11905: 0x88DE, + 22549 - 11905: 0xB6E9, + 22550 - 11905: 0x88DF, + 22551 - 11905: 0x88E0, + 22552 - 11905: 0x88E1, + 22553 - 11905: 0xDCA7, + 22554 - 11905: 0x88E2, + 22555 - 11905: 0x88E3, + 22556 - 11905: 0x88E4, + 22557 - 11905: 0x88E5, + 22558 - 11905: 0xDCA6, + 22559 - 11905: 0x88E6, + 22560 - 11905: 0xDCA9, + 22561 - 11905: 0xB1A4, + 22562 - 11905: 0x88E7, + 22563 - 11905: 0x88E8, + 22564 - 11905: 0xB5CC, + 22565 - 11905: 0x88E9, + 22566 - 11905: 0x88EA, + 22567 - 11905: 0x88EB, + 22568 - 11905: 0x88EC, + 22569 - 11905: 0x88ED, + 22570 - 11905: 0xBFB0, + 22571 - 11905: 0x88EE, + 22572 - 11905: 0x88EF, + 22573 - 11905: 0x88F0, + 22574 - 11905: 0x88F1, + 22575 - 11905: 0x88F2, + 22576 - 11905: 0xD1DF, + 22577 - 11905: 0x88F3, + 22578 - 11905: 0x88F4, + 22579 - 11905: 0x88F5, + 22580 - 11905: 0x88F6, + 22581 - 11905: 0xB6C2, + 22582 - 11905: 0x88F7, + 22583 - 11905: 0x88F8, + 22584 - 11905: 0x88F9, + 22585 - 11905: 0x88FA, + 22586 - 11905: 0x88FB, + 22587 - 11905: 0x88FC, + 22588 - 11905: 0x88FD, + 22589 - 11905: 0x88FE, + 22590 - 11905: 0x8940, + 22591 - 11905: 0x8941, + 22592 - 11905: 0x8942, + 22593 - 11905: 0x8943, + 22594 - 11905: 0x8944, + 22595 - 11905: 0x8945, + 22596 - 11905: 0xDCA8, + 22597 - 11905: 0x8946, + 22598 - 11905: 0x8947, + 22599 - 11905: 0x8948, + 22600 - 11905: 0x8949, + 22601 - 11905: 0x894A, + 22602 - 11905: 0x894B, + 22603 - 11905: 0x894C, + 22604 - 11905: 0xCBFA, + 22605 - 11905: 0xEBF3, + 22606 - 11905: 0x894D, + 22607 - 11905: 0x894E, + 22608 - 11905: 0x894F, + 22609 - 11905: 0xCBDC, + 22610 - 11905: 0x8950, + 22611 - 11905: 0x8951, + 22612 - 11905: 0xCBFE, + 22613 - 11905: 0x8952, + 22614 - 11905: 0x8953, + 22615 - 11905: 0x8954, + 22616 - 11905: 0xCCC1, + 22617 - 11905: 0x8955, + 22618 - 11905: 0x8956, + 22619 - 11905: 0x8957, + 22620 - 11905: 0x8958, + 22621 - 11905: 0x8959, + 22622 - 11905: 0xC8FB, + 22623 - 11905: 0x895A, + 22624 - 11905: 0x895B, + 22625 - 11905: 0x895C, + 22626 - 11905: 0x895D, + 22627 - 11905: 0x895E, + 22628 - 11905: 0x895F, + 22629 - 11905: 0xDCAA, + 22630 - 11905: 0x8960, + 22631 - 11905: 0x8961, + 22632 - 11905: 0x8962, + 22633 - 11905: 0x8963, + 22634 - 11905: 0x8964, + 22635 - 11905: 0xCCEE, + 22636 - 11905: 0xDCAB, + 22637 - 11905: 0x8965, + 22638 - 11905: 0x8966, + 22639 - 11905: 0x8967, + 22640 - 11905: 0x8968, + 22641 - 11905: 0x8969, + 22642 - 11905: 0x896A, + 22643 - 11905: 0x896B, + 22644 - 11905: 0x896C, + 22645 - 11905: 0x896D, + 22646 - 11905: 0x896E, + 22647 - 11905: 0x896F, + 22648 - 11905: 0x8970, + 22649 - 11905: 0x8971, + 22650 - 11905: 0x8972, + 22651 - 11905: 0x8973, + 22652 - 11905: 0x8974, + 22653 - 11905: 0x8975, + 22654 - 11905: 0xDBD3, + 22655 - 11905: 0x8976, + 22656 - 11905: 0xDCAF, + 22657 - 11905: 0xDCAC, + 22658 - 11905: 0x8977, + 22659 - 11905: 0xBEB3, + 22660 - 11905: 0x8978, + 22661 - 11905: 0xCAFB, + 22662 - 11905: 0x8979, + 22663 - 11905: 0x897A, + 22664 - 11905: 0x897B, + 22665 - 11905: 0xDCAD, + 22666 - 11905: 0x897C, + 22667 - 11905: 0x897D, + 22668 - 11905: 0x897E, + 22669 - 11905: 0x8980, + 22670 - 11905: 0x8981, + 22671 - 11905: 0x8982, + 22672 - 11905: 0x8983, + 22673 - 11905: 0x8984, + 22674 - 11905: 0xC9CA, + 22675 - 11905: 0xC4B9, + 22676 - 11905: 0x8985, + 22677 - 11905: 0x8986, + 22678 - 11905: 0x8987, + 22679 - 11905: 0x8988, + 22680 - 11905: 0x8989, + 22681 - 11905: 0xC7BD, + 22682 - 11905: 0xDCAE, + 22683 - 11905: 0x898A, + 22684 - 11905: 0x898B, + 22685 - 11905: 0x898C, + 22686 - 11905: 0xD4F6, + 22687 - 11905: 0xD0E6, + 22688 - 11905: 0x898D, + 22689 - 11905: 0x898E, + 22690 - 11905: 0x898F, + 22691 - 11905: 0x8990, + 22692 - 11905: 0x8991, + 22693 - 11905: 0x8992, + 22694 - 11905: 0x8993, + 22695 - 11905: 0x8994, + 22696 - 11905: 0xC4AB, + 22697 - 11905: 0xB6D5, + 22698 - 11905: 0x8995, + 22699 - 11905: 0x8996, + 22700 - 11905: 0x8997, + 22701 - 11905: 0x8998, + 22702 - 11905: 0x8999, + 22703 - 11905: 0x899A, + 22704 - 11905: 0x899B, + 22705 - 11905: 0x899C, + 22706 - 11905: 0x899D, + 22707 - 11905: 0x899E, + 22708 - 11905: 0x899F, + 22709 - 11905: 0x89A0, + 22710 - 11905: 0x89A1, + 22711 - 11905: 0x89A2, + 22712 - 11905: 0x89A3, + 22713 - 11905: 0x89A4, + 22714 - 11905: 0x89A5, + 22715 - 11905: 0x89A6, + 22716 - 11905: 0xDBD4, + 22717 - 11905: 0x89A7, + 22718 - 11905: 0x89A8, + 22719 - 11905: 0x89A9, + 22720 - 11905: 0x89AA, + 22721 - 11905: 0xB1DA, + 22722 - 11905: 0x89AB, + 22723 - 11905: 0x89AC, + 22724 - 11905: 0x89AD, + 22725 - 11905: 0xDBD5, + 22726 - 11905: 0x89AE, + 22727 - 11905: 0x89AF, + 22728 - 11905: 0x89B0, + 22729 - 11905: 0x89B1, + 22730 - 11905: 0x89B2, + 22731 - 11905: 0x89B3, + 22732 - 11905: 0x89B4, + 22733 - 11905: 0x89B5, + 22734 - 11905: 0x89B6, + 22735 - 11905: 0x89B7, + 22736 - 11905: 0x89B8, + 22737 - 11905: 0xDBD6, + 22738 - 11905: 0x89B9, + 22739 - 11905: 0x89BA, + 22740 - 11905: 0x89BB, + 22741 - 11905: 0xBABE, + 22742 - 11905: 0x89BC, + 22743 - 11905: 0x89BD, + 22744 - 11905: 0x89BE, + 22745 - 11905: 0x89BF, + 22746 - 11905: 0x89C0, + 22747 - 11905: 0x89C1, + 22748 - 11905: 0x89C2, + 22749 - 11905: 0x89C3, + 22750 - 11905: 0x89C4, + 22751 - 11905: 0x89C5, + 22752 - 11905: 0x89C6, + 22753 - 11905: 0x89C7, + 22754 - 11905: 0x89C8, + 22755 - 11905: 0x89C9, + 22756 - 11905: 0xC8C0, + 22757 - 11905: 0x89CA, + 22758 - 11905: 0x89CB, + 22759 - 11905: 0x89CC, + 22760 - 11905: 0x89CD, + 22761 - 11905: 0x89CE, + 22762 - 11905: 0x89CF, + 22763 - 11905: 0xCABF, + 22764 - 11905: 0xC8C9, + 22765 - 11905: 0x89D0, + 22766 - 11905: 0xD7B3, + 22767 - 11905: 0x89D1, + 22768 - 11905: 0xC9F9, + 22769 - 11905: 0x89D2, + 22770 - 11905: 0x89D3, + 22771 - 11905: 0xBFC7, + 22772 - 11905: 0x89D4, + 22773 - 11905: 0x89D5, + 22774 - 11905: 0xBAF8, + 22775 - 11905: 0x89D6, + 22776 - 11905: 0x89D7, + 22777 - 11905: 0xD2BC, + 22778 - 11905: 0x89D8, + 22779 - 11905: 0x89D9, + 22780 - 11905: 0x89DA, + 22781 - 11905: 0x89DB, + 22782 - 11905: 0x89DC, + 22783 - 11905: 0x89DD, + 22784 - 11905: 0x89DE, + 22785 - 11905: 0x89DF, + 22786 - 11905: 0xE2BA, + 22787 - 11905: 0x89E0, + 22788 - 11905: 0xB4A6, + 22789 - 11905: 0x89E1, + 22790 - 11905: 0x89E2, + 22791 - 11905: 0xB1B8, + 22792 - 11905: 0x89E3, + 22793 - 11905: 0x89E4, + 22794 - 11905: 0x89E5, + 22795 - 11905: 0x89E6, + 22796 - 11905: 0x89E7, + 22797 - 11905: 0xB8B4, + 22798 - 11905: 0x89E8, + 22799 - 11905: 0xCFC4, + 22800 - 11905: 0x89E9, + 22801 - 11905: 0x89EA, + 22802 - 11905: 0x89EB, + 22803 - 11905: 0x89EC, + 22804 - 11905: 0xD9E7, + 22805 - 11905: 0xCFA6, + 22806 - 11905: 0xCDE2, + 22807 - 11905: 0x89ED, + 22808 - 11905: 0x89EE, + 22809 - 11905: 0xD9ED, + 22810 - 11905: 0xB6E0, + 22811 - 11905: 0x89EF, + 22812 - 11905: 0xD2B9, + 22813 - 11905: 0x89F0, + 22814 - 11905: 0x89F1, + 22815 - 11905: 0xB9BB, + 22816 - 11905: 0x89F2, + 22817 - 11905: 0x89F3, + 22818 - 11905: 0x89F4, + 22819 - 11905: 0x89F5, + 22820 - 11905: 0xE2B9, + 22821 - 11905: 0xE2B7, + 22822 - 11905: 0x89F6, + 22823 - 11905: 0xB4F3, + 22824 - 11905: 0x89F7, + 22825 - 11905: 0xCCEC, + 22826 - 11905: 0xCCAB, + 22827 - 11905: 0xB7F2, + 22828 - 11905: 0x89F8, + 22829 - 11905: 0xD8B2, + 22830 - 11905: 0xD1EB, + 22831 - 11905: 0xBABB, + 22832 - 11905: 0x89F9, + 22833 - 11905: 0xCAA7, + 22834 - 11905: 0x89FA, + 22835 - 11905: 0x89FB, + 22836 - 11905: 0xCDB7, + 22837 - 11905: 0x89FC, + 22838 - 11905: 0x89FD, + 22839 - 11905: 0xD2C4, + 22840 - 11905: 0xBFE4, + 22841 - 11905: 0xBCD0, + 22842 - 11905: 0xB6E1, + 22843 - 11905: 0x89FE, + 22844 - 11905: 0xDEC5, + 22845 - 11905: 0x8A40, + 22846 - 11905: 0x8A41, + 22847 - 11905: 0x8A42, + 22848 - 11905: 0x8A43, + 22849 - 11905: 0xDEC6, + 22850 - 11905: 0xDBBC, + 22851 - 11905: 0x8A44, + 22852 - 11905: 0xD1D9, + 22853 - 11905: 0x8A45, + 22854 - 11905: 0x8A46, + 22855 - 11905: 0xC6E6, + 22856 - 11905: 0xC4CE, + 22857 - 11905: 0xB7EE, + 22858 - 11905: 0x8A47, + 22859 - 11905: 0xB7DC, + 22860 - 11905: 0x8A48, + 22861 - 11905: 0x8A49, + 22862 - 11905: 0xBFFC, + 22863 - 11905: 0xD7E0, + 22864 - 11905: 0x8A4A, + 22865 - 11905: 0xC6F5, + 22866 - 11905: 0x8A4B, + 22867 - 11905: 0x8A4C, + 22868 - 11905: 0xB1BC, + 22869 - 11905: 0xDEC8, + 22870 - 11905: 0xBDB1, + 22871 - 11905: 0xCCD7, + 22872 - 11905: 0xDECA, + 22873 - 11905: 0x8A4D, + 22874 - 11905: 0xDEC9, + 22875 - 11905: 0x8A4E, + 22876 - 11905: 0x8A4F, + 22877 - 11905: 0x8A50, + 22878 - 11905: 0x8A51, + 22879 - 11905: 0x8A52, + 22880 - 11905: 0xB5EC, + 22881 - 11905: 0x8A53, + 22882 - 11905: 0xC9DD, + 22883 - 11905: 0x8A54, + 22884 - 11905: 0x8A55, + 22885 - 11905: 0xB0C2, + 22886 - 11905: 0x8A56, + 22887 - 11905: 0x8A57, + 22888 - 11905: 0x8A58, + 22889 - 11905: 0x8A59, + 22890 - 11905: 0x8A5A, + 22891 - 11905: 0x8A5B, + 22892 - 11905: 0x8A5C, + 22893 - 11905: 0x8A5D, + 22894 - 11905: 0x8A5E, + 22895 - 11905: 0x8A5F, + 22896 - 11905: 0x8A60, + 22897 - 11905: 0x8A61, + 22898 - 11905: 0x8A62, + 22899 - 11905: 0xC5AE, + 22900 - 11905: 0xC5AB, + 22901 - 11905: 0x8A63, + 22902 - 11905: 0xC4CC, + 22903 - 11905: 0x8A64, + 22904 - 11905: 0xBCE9, + 22905 - 11905: 0xCBFD, + 22906 - 11905: 0x8A65, + 22907 - 11905: 0x8A66, + 22908 - 11905: 0x8A67, + 22909 - 11905: 0xBAC3, + 22910 - 11905: 0x8A68, + 22911 - 11905: 0x8A69, + 22912 - 11905: 0x8A6A, + 22913 - 11905: 0xE5F9, + 22914 - 11905: 0xC8E7, + 22915 - 11905: 0xE5FA, + 22916 - 11905: 0xCDFD, + 22917 - 11905: 0x8A6B, + 22918 - 11905: 0xD7B1, + 22919 - 11905: 0xB8BE, + 22920 - 11905: 0xC2E8, + 22921 - 11905: 0x8A6C, + 22922 - 11905: 0xC8D1, + 22923 - 11905: 0x8A6D, + 22924 - 11905: 0x8A6E, + 22925 - 11905: 0xE5FB, + 22926 - 11905: 0x8A6F, + 22927 - 11905: 0x8A70, + 22928 - 11905: 0x8A71, + 22929 - 11905: 0x8A72, + 22930 - 11905: 0xB6CA, + 22931 - 11905: 0xBCCB, + 22932 - 11905: 0x8A73, + 22933 - 11905: 0x8A74, + 22934 - 11905: 0xD1FD, + 22935 - 11905: 0xE6A1, + 22936 - 11905: 0x8A75, + 22937 - 11905: 0xC3EE, + 22938 - 11905: 0x8A76, + 22939 - 11905: 0x8A77, + 22940 - 11905: 0x8A78, + 22941 - 11905: 0x8A79, + 22942 - 11905: 0xE6A4, + 22943 - 11905: 0x8A7A, + 22944 - 11905: 0x8A7B, + 22945 - 11905: 0x8A7C, + 22946 - 11905: 0x8A7D, + 22947 - 11905: 0xE5FE, + 22948 - 11905: 0xE6A5, + 22949 - 11905: 0xCDD7, + 22950 - 11905: 0x8A7E, + 22951 - 11905: 0x8A80, + 22952 - 11905: 0xB7C1, + 22953 - 11905: 0xE5FC, + 22954 - 11905: 0xE5FD, + 22955 - 11905: 0xE6A3, + 22956 - 11905: 0x8A81, + 22957 - 11905: 0x8A82, + 22958 - 11905: 0xC4DD, + 22959 - 11905: 0xE6A8, + 22960 - 11905: 0x8A83, + 22961 - 11905: 0x8A84, + 22962 - 11905: 0xE6A7, + 22963 - 11905: 0x8A85, + 22964 - 11905: 0x8A86, + 22965 - 11905: 0x8A87, + 22966 - 11905: 0x8A88, + 22967 - 11905: 0x8A89, + 22968 - 11905: 0x8A8A, + 22969 - 11905: 0xC3C3, + 22970 - 11905: 0x8A8B, + 22971 - 11905: 0xC6DE, + 22972 - 11905: 0x8A8C, + 22973 - 11905: 0x8A8D, + 22974 - 11905: 0xE6AA, + 22975 - 11905: 0x8A8E, + 22976 - 11905: 0x8A8F, + 22977 - 11905: 0x8A90, + 22978 - 11905: 0x8A91, + 22979 - 11905: 0x8A92, + 22980 - 11905: 0x8A93, + 22981 - 11905: 0x8A94, + 22982 - 11905: 0xC4B7, + 22983 - 11905: 0x8A95, + 22984 - 11905: 0x8A96, + 22985 - 11905: 0x8A97, + 22986 - 11905: 0xE6A2, + 22987 - 11905: 0xCABC, + 22988 - 11905: 0x8A98, + 22989 - 11905: 0x8A99, + 22990 - 11905: 0x8A9A, + 22991 - 11905: 0x8A9B, + 22992 - 11905: 0xBDE3, + 22993 - 11905: 0xB9C3, + 22994 - 11905: 0xE6A6, + 22995 - 11905: 0xD0D5, + 22996 - 11905: 0xCEAF, + 22997 - 11905: 0x8A9C, + 22998 - 11905: 0x8A9D, + 22999 - 11905: 0xE6A9, + 23000 - 11905: 0xE6B0, + 23001 - 11905: 0x8A9E, + 23002 - 11905: 0xD2A6, + 23003 - 11905: 0x8A9F, + 23004 - 11905: 0xBDAA, + 23005 - 11905: 0xE6AD, + 23006 - 11905: 0x8AA0, + 23007 - 11905: 0x8AA1, + 23008 - 11905: 0x8AA2, + 23009 - 11905: 0x8AA3, + 23010 - 11905: 0x8AA4, + 23011 - 11905: 0xE6AF, + 23012 - 11905: 0x8AA5, + 23013 - 11905: 0xC0D1, + 23014 - 11905: 0x8AA6, + 23015 - 11905: 0x8AA7, + 23016 - 11905: 0xD2CC, + 23017 - 11905: 0x8AA8, + 23018 - 11905: 0x8AA9, + 23019 - 11905: 0x8AAA, + 23020 - 11905: 0xBCA7, + 23021 - 11905: 0x8AAB, + 23022 - 11905: 0x8AAC, + 23023 - 11905: 0x8AAD, + 23024 - 11905: 0x8AAE, + 23025 - 11905: 0x8AAF, + 23026 - 11905: 0x8AB0, + 23027 - 11905: 0x8AB1, + 23028 - 11905: 0x8AB2, + 23029 - 11905: 0x8AB3, + 23030 - 11905: 0x8AB4, + 23031 - 11905: 0x8AB5, + 23032 - 11905: 0x8AB6, + 23033 - 11905: 0xE6B1, + 23034 - 11905: 0x8AB7, + 23035 - 11905: 0xD2F6, + 23036 - 11905: 0x8AB8, + 23037 - 11905: 0x8AB9, + 23038 - 11905: 0x8ABA, + 23039 - 11905: 0xD7CB, + 23040 - 11905: 0x8ABB, + 23041 - 11905: 0xCDFE, + 23042 - 11905: 0x8ABC, + 23043 - 11905: 0xCDDE, + 23044 - 11905: 0xC2A6, + 23045 - 11905: 0xE6AB, + 23046 - 11905: 0xE6AC, + 23047 - 11905: 0xBDBF, + 23048 - 11905: 0xE6AE, + 23049 - 11905: 0xE6B3, + 23050 - 11905: 0x8ABD, + 23051 - 11905: 0x8ABE, + 23052 - 11905: 0xE6B2, + 23053 - 11905: 0x8ABF, + 23054 - 11905: 0x8AC0, + 23055 - 11905: 0x8AC1, + 23056 - 11905: 0x8AC2, + 23057 - 11905: 0xE6B6, + 23058 - 11905: 0x8AC3, + 23059 - 11905: 0xE6B8, + 23060 - 11905: 0x8AC4, + 23061 - 11905: 0x8AC5, + 23062 - 11905: 0x8AC6, + 23063 - 11905: 0x8AC7, + 23064 - 11905: 0xC4EF, + 23065 - 11905: 0x8AC8, + 23066 - 11905: 0x8AC9, + 23067 - 11905: 0x8ACA, + 23068 - 11905: 0xC4C8, + 23069 - 11905: 0x8ACB, + 23070 - 11905: 0x8ACC, + 23071 - 11905: 0xBEEA, + 23072 - 11905: 0xC9EF, + 23073 - 11905: 0x8ACD, + 23074 - 11905: 0x8ACE, + 23075 - 11905: 0xE6B7, + 23076 - 11905: 0x8ACF, + 23077 - 11905: 0xB6F0, + 23078 - 11905: 0x8AD0, + 23079 - 11905: 0x8AD1, + 23080 - 11905: 0x8AD2, + 23081 - 11905: 0xC3E4, + 23082 - 11905: 0x8AD3, + 23083 - 11905: 0x8AD4, + 23084 - 11905: 0x8AD5, + 23085 - 11905: 0x8AD6, + 23086 - 11905: 0x8AD7, + 23087 - 11905: 0x8AD8, + 23088 - 11905: 0x8AD9, + 23089 - 11905: 0xD3E9, + 23090 - 11905: 0xE6B4, + 23091 - 11905: 0x8ADA, + 23092 - 11905: 0xE6B5, + 23093 - 11905: 0x8ADB, + 23094 - 11905: 0xC8A2, + 23095 - 11905: 0x8ADC, + 23096 - 11905: 0x8ADD, + 23097 - 11905: 0x8ADE, + 23098 - 11905: 0x8ADF, + 23099 - 11905: 0x8AE0, + 23100 - 11905: 0xE6BD, + 23101 - 11905: 0x8AE1, + 23102 - 11905: 0x8AE2, + 23103 - 11905: 0x8AE3, + 23104 - 11905: 0xE6B9, + 23105 - 11905: 0x8AE4, + 23106 - 11905: 0x8AE5, + 23107 - 11905: 0x8AE6, + 23108 - 11905: 0x8AE7, + 23109 - 11905: 0x8AE8, + 23110 - 11905: 0xC6C5, + 23111 - 11905: 0x8AE9, + 23112 - 11905: 0x8AEA, + 23113 - 11905: 0xCDF1, + 23114 - 11905: 0xE6BB, + 23115 - 11905: 0x8AEB, + 23116 - 11905: 0x8AEC, + 23117 - 11905: 0x8AED, + 23118 - 11905: 0x8AEE, + 23119 - 11905: 0x8AEF, + 23120 - 11905: 0x8AF0, + 23121 - 11905: 0x8AF1, + 23122 - 11905: 0x8AF2, + 23123 - 11905: 0x8AF3, + 23124 - 11905: 0x8AF4, + 23125 - 11905: 0xE6BC, + 23126 - 11905: 0x8AF5, + 23127 - 11905: 0x8AF6, + 23128 - 11905: 0x8AF7, + 23129 - 11905: 0x8AF8, + 23130 - 11905: 0xBBE9, + 23131 - 11905: 0x8AF9, + 23132 - 11905: 0x8AFA, + 23133 - 11905: 0x8AFB, + 23134 - 11905: 0x8AFC, + 23135 - 11905: 0x8AFD, + 23136 - 11905: 0x8AFE, + 23137 - 11905: 0x8B40, + 23138 - 11905: 0xE6BE, + 23139 - 11905: 0x8B41, + 23140 - 11905: 0x8B42, + 23141 - 11905: 0x8B43, + 23142 - 11905: 0x8B44, + 23143 - 11905: 0xE6BA, + 23144 - 11905: 0x8B45, + 23145 - 11905: 0x8B46, + 23146 - 11905: 0xC0B7, + 23147 - 11905: 0x8B47, + 23148 - 11905: 0x8B48, + 23149 - 11905: 0x8B49, + 23150 - 11905: 0x8B4A, + 23151 - 11905: 0x8B4B, + 23152 - 11905: 0x8B4C, + 23153 - 11905: 0x8B4D, + 23154 - 11905: 0x8B4E, + 23155 - 11905: 0x8B4F, + 23156 - 11905: 0xD3A4, + 23157 - 11905: 0xE6BF, + 23158 - 11905: 0xC9F4, + 23159 - 11905: 0xE6C3, + 23160 - 11905: 0x8B50, + 23161 - 11905: 0x8B51, + 23162 - 11905: 0xE6C4, + 23163 - 11905: 0x8B52, + 23164 - 11905: 0x8B53, + 23165 - 11905: 0x8B54, + 23166 - 11905: 0x8B55, + 23167 - 11905: 0xD0F6, + 23168 - 11905: 0x8B56, + 23169 - 11905: 0x8B57, + 23170 - 11905: 0x8B58, + 23171 - 11905: 0x8B59, + 23172 - 11905: 0x8B5A, + 23173 - 11905: 0x8B5B, + 23174 - 11905: 0x8B5C, + 23175 - 11905: 0x8B5D, + 23176 - 11905: 0x8B5E, + 23177 - 11905: 0x8B5F, + 23178 - 11905: 0x8B60, + 23179 - 11905: 0x8B61, + 23180 - 11905: 0x8B62, + 23181 - 11905: 0x8B63, + 23182 - 11905: 0x8B64, + 23183 - 11905: 0x8B65, + 23184 - 11905: 0x8B66, + 23185 - 11905: 0x8B67, + 23186 - 11905: 0xC3BD, + 23187 - 11905: 0x8B68, + 23188 - 11905: 0x8B69, + 23189 - 11905: 0x8B6A, + 23190 - 11905: 0x8B6B, + 23191 - 11905: 0x8B6C, + 23192 - 11905: 0x8B6D, + 23193 - 11905: 0x8B6E, + 23194 - 11905: 0xC3C4, + 23195 - 11905: 0xE6C2, + 23196 - 11905: 0x8B6F, + 23197 - 11905: 0x8B70, + 23198 - 11905: 0x8B71, + 23199 - 11905: 0x8B72, + 23200 - 11905: 0x8B73, + 23201 - 11905: 0x8B74, + 23202 - 11905: 0x8B75, + 23203 - 11905: 0x8B76, + 23204 - 11905: 0x8B77, + 23205 - 11905: 0x8B78, + 23206 - 11905: 0x8B79, + 23207 - 11905: 0x8B7A, + 23208 - 11905: 0x8B7B, + 23209 - 11905: 0x8B7C, + 23210 - 11905: 0xE6C1, + 23211 - 11905: 0x8B7D, + 23212 - 11905: 0x8B7E, + 23213 - 11905: 0x8B80, + 23214 - 11905: 0x8B81, + 23215 - 11905: 0x8B82, + 23216 - 11905: 0x8B83, + 23217 - 11905: 0x8B84, + 23218 - 11905: 0xE6C7, + 23219 - 11905: 0xCFB1, + 23220 - 11905: 0x8B85, + 23221 - 11905: 0xEBF4, + 23222 - 11905: 0x8B86, + 23223 - 11905: 0x8B87, + 23224 - 11905: 0xE6CA, + 23225 - 11905: 0x8B88, + 23226 - 11905: 0x8B89, + 23227 - 11905: 0x8B8A, + 23228 - 11905: 0x8B8B, + 23229 - 11905: 0x8B8C, + 23230 - 11905: 0xE6C5, + 23231 - 11905: 0x8B8D, + 23232 - 11905: 0x8B8E, + 23233 - 11905: 0xBCDE, + 23234 - 11905: 0xC9A9, + 23235 - 11905: 0x8B8F, + 23236 - 11905: 0x8B90, + 23237 - 11905: 0x8B91, + 23238 - 11905: 0x8B92, + 23239 - 11905: 0x8B93, + 23240 - 11905: 0x8B94, + 23241 - 11905: 0xBCB5, + 23242 - 11905: 0x8B95, + 23243 - 11905: 0x8B96, + 23244 - 11905: 0xCFD3, + 23245 - 11905: 0x8B97, + 23246 - 11905: 0x8B98, + 23247 - 11905: 0x8B99, + 23248 - 11905: 0x8B9A, + 23249 - 11905: 0x8B9B, + 23250 - 11905: 0xE6C8, + 23251 - 11905: 0x8B9C, + 23252 - 11905: 0xE6C9, + 23253 - 11905: 0x8B9D, + 23254 - 11905: 0xE6CE, + 23255 - 11905: 0x8B9E, + 23256 - 11905: 0xE6D0, + 23257 - 11905: 0x8B9F, + 23258 - 11905: 0x8BA0, + 23259 - 11905: 0x8BA1, + 23260 - 11905: 0xE6D1, + 23261 - 11905: 0x8BA2, + 23262 - 11905: 0x8BA3, + 23263 - 11905: 0x8BA4, + 23264 - 11905: 0xE6CB, + 23265 - 11905: 0xB5D5, + 23266 - 11905: 0x8BA5, + 23267 - 11905: 0xE6CC, + 23268 - 11905: 0x8BA6, + 23269 - 11905: 0x8BA7, + 23270 - 11905: 0xE6CF, + 23271 - 11905: 0x8BA8, + 23272 - 11905: 0x8BA9, + 23273 - 11905: 0xC4DB, + 23274 - 11905: 0x8BAA, + 23275 - 11905: 0xE6C6, + 23276 - 11905: 0x8BAB, + 23277 - 11905: 0x8BAC, + 23278 - 11905: 0x8BAD, + 23279 - 11905: 0x8BAE, + 23280 - 11905: 0x8BAF, + 23281 - 11905: 0xE6CD, + 23282 - 11905: 0x8BB0, + 23283 - 11905: 0x8BB1, + 23284 - 11905: 0x8BB2, + 23285 - 11905: 0x8BB3, + 23286 - 11905: 0x8BB4, + 23287 - 11905: 0x8BB5, + 23288 - 11905: 0x8BB6, + 23289 - 11905: 0x8BB7, + 23290 - 11905: 0x8BB8, + 23291 - 11905: 0x8BB9, + 23292 - 11905: 0x8BBA, + 23293 - 11905: 0x8BBB, + 23294 - 11905: 0x8BBC, + 23295 - 11905: 0x8BBD, + 23296 - 11905: 0x8BBE, + 23297 - 11905: 0x8BBF, + 23298 - 11905: 0x8BC0, + 23299 - 11905: 0x8BC1, + 23300 - 11905: 0x8BC2, + 23301 - 11905: 0x8BC3, + 23302 - 11905: 0x8BC4, + 23303 - 11905: 0x8BC5, + 23304 - 11905: 0x8BC6, + 23305 - 11905: 0xE6D2, + 23306 - 11905: 0x8BC7, + 23307 - 11905: 0x8BC8, + 23308 - 11905: 0x8BC9, + 23309 - 11905: 0x8BCA, + 23310 - 11905: 0x8BCB, + 23311 - 11905: 0x8BCC, + 23312 - 11905: 0x8BCD, + 23313 - 11905: 0x8BCE, + 23314 - 11905: 0x8BCF, + 23315 - 11905: 0x8BD0, + 23316 - 11905: 0x8BD1, + 23317 - 11905: 0x8BD2, + 23318 - 11905: 0xE6D4, + 23319 - 11905: 0xE6D3, + 23320 - 11905: 0x8BD3, + 23321 - 11905: 0x8BD4, + 23322 - 11905: 0x8BD5, + 23323 - 11905: 0x8BD6, + 23324 - 11905: 0x8BD7, + 23325 - 11905: 0x8BD8, + 23326 - 11905: 0x8BD9, + 23327 - 11905: 0x8BDA, + 23328 - 11905: 0x8BDB, + 23329 - 11905: 0x8BDC, + 23330 - 11905: 0x8BDD, + 23331 - 11905: 0x8BDE, + 23332 - 11905: 0x8BDF, + 23333 - 11905: 0x8BE0, + 23334 - 11905: 0x8BE1, + 23335 - 11905: 0x8BE2, + 23336 - 11905: 0x8BE3, + 23337 - 11905: 0x8BE4, + 23338 - 11905: 0x8BE5, + 23339 - 11905: 0x8BE6, + 23340 - 11905: 0x8BE7, + 23341 - 11905: 0x8BE8, + 23342 - 11905: 0x8BE9, + 23343 - 11905: 0x8BEA, + 23344 - 11905: 0x8BEB, + 23345 - 11905: 0x8BEC, + 23346 - 11905: 0xE6D5, + 23347 - 11905: 0x8BED, + 23348 - 11905: 0xD9F8, + 23349 - 11905: 0x8BEE, + 23350 - 11905: 0x8BEF, + 23351 - 11905: 0xE6D6, + 23352 - 11905: 0x8BF0, + 23353 - 11905: 0x8BF1, + 23354 - 11905: 0x8BF2, + 23355 - 11905: 0x8BF3, + 23356 - 11905: 0x8BF4, + 23357 - 11905: 0x8BF5, + 23358 - 11905: 0x8BF6, + 23359 - 11905: 0x8BF7, + 23360 - 11905: 0xE6D7, + 23361 - 11905: 0x8BF8, + 23362 - 11905: 0x8BF9, + 23363 - 11905: 0x8BFA, + 23364 - 11905: 0x8BFB, + 23365 - 11905: 0x8BFC, + 23366 - 11905: 0x8BFD, + 23367 - 11905: 0x8BFE, + 23368 - 11905: 0x8C40, + 23369 - 11905: 0x8C41, + 23370 - 11905: 0x8C42, + 23371 - 11905: 0x8C43, + 23372 - 11905: 0x8C44, + 23373 - 11905: 0x8C45, + 23374 - 11905: 0x8C46, + 23375 - 11905: 0x8C47, + 23376 - 11905: 0xD7D3, + 23377 - 11905: 0xE6DD, + 23378 - 11905: 0x8C48, + 23379 - 11905: 0xE6DE, + 23380 - 11905: 0xBFD7, + 23381 - 11905: 0xD4D0, + 23382 - 11905: 0x8C49, + 23383 - 11905: 0xD7D6, + 23384 - 11905: 0xB4E6, + 23385 - 11905: 0xCBEF, + 23386 - 11905: 0xE6DA, + 23387 - 11905: 0xD8C3, + 23388 - 11905: 0xD7CE, + 23389 - 11905: 0xD0A2, + 23390 - 11905: 0x8C4A, + 23391 - 11905: 0xC3CF, + 23392 - 11905: 0x8C4B, + 23393 - 11905: 0x8C4C, + 23394 - 11905: 0xE6DF, + 23395 - 11905: 0xBCBE, + 23396 - 11905: 0xB9C2, + 23397 - 11905: 0xE6DB, + 23398 - 11905: 0xD1A7, + 23399 - 11905: 0x8C4D, + 23400 - 11905: 0x8C4E, + 23401 - 11905: 0xBAA2, + 23402 - 11905: 0xC2CF, + 23403 - 11905: 0x8C4F, + 23404 - 11905: 0xD8AB, + 23405 - 11905: 0x8C50, + 23406 - 11905: 0x8C51, + 23407 - 11905: 0x8C52, + 23408 - 11905: 0xCAEB, + 23409 - 11905: 0xE5EE, + 23410 - 11905: 0x8C53, + 23411 - 11905: 0xE6DC, + 23412 - 11905: 0x8C54, + 23413 - 11905: 0xB7F5, + 23414 - 11905: 0x8C55, + 23415 - 11905: 0x8C56, + 23416 - 11905: 0x8C57, + 23417 - 11905: 0x8C58, + 23418 - 11905: 0xC8E6, + 23419 - 11905: 0x8C59, + 23420 - 11905: 0x8C5A, + 23421 - 11905: 0xC4F5, + 23422 - 11905: 0x8C5B, + 23423 - 11905: 0x8C5C, + 23424 - 11905: 0xE5B2, + 23425 - 11905: 0xC4FE, + 23426 - 11905: 0x8C5D, + 23427 - 11905: 0xCBFC, + 23428 - 11905: 0xE5B3, + 23429 - 11905: 0xD5AC, + 23430 - 11905: 0x8C5E, + 23431 - 11905: 0xD3EE, + 23432 - 11905: 0xCAD8, + 23433 - 11905: 0xB0B2, + 23434 - 11905: 0x8C5F, + 23435 - 11905: 0xCBCE, + 23436 - 11905: 0xCDEA, + 23437 - 11905: 0x8C60, + 23438 - 11905: 0x8C61, + 23439 - 11905: 0xBAEA, + 23440 - 11905: 0x8C62, + 23441 - 11905: 0x8C63, + 23442 - 11905: 0x8C64, + 23443 - 11905: 0xE5B5, + 23444 - 11905: 0x8C65, + 23445 - 11905: 0xE5B4, + 23446 - 11905: 0x8C66, + 23447 - 11905: 0xD7DA, + 23448 - 11905: 0xB9D9, + 23449 - 11905: 0xD6E6, + 23450 - 11905: 0xB6A8, + 23451 - 11905: 0xCDF0, + 23452 - 11905: 0xD2CB, + 23453 - 11905: 0xB1A6, + 23454 - 11905: 0xCAB5, + 23455 - 11905: 0x8C67, + 23456 - 11905: 0xB3E8, + 23457 - 11905: 0xC9F3, + 23458 - 11905: 0xBFCD, + 23459 - 11905: 0xD0FB, + 23460 - 11905: 0xCAD2, + 23461 - 11905: 0xE5B6, + 23462 - 11905: 0xBBC2, + 23463 - 11905: 0x8C68, + 23464 - 11905: 0x8C69, + 23465 - 11905: 0x8C6A, + 23466 - 11905: 0xCFDC, + 23467 - 11905: 0xB9AC, + 23468 - 11905: 0x8C6B, + 23469 - 11905: 0x8C6C, + 23470 - 11905: 0x8C6D, + 23471 - 11905: 0x8C6E, + 23472 - 11905: 0xD4D7, + 23473 - 11905: 0x8C6F, + 23474 - 11905: 0x8C70, + 23475 - 11905: 0xBAA6, + 23476 - 11905: 0xD1E7, + 23477 - 11905: 0xCFFC, + 23478 - 11905: 0xBCD2, + 23479 - 11905: 0x8C71, + 23480 - 11905: 0xE5B7, + 23481 - 11905: 0xC8DD, + 23482 - 11905: 0x8C72, + 23483 - 11905: 0x8C73, + 23484 - 11905: 0x8C74, + 23485 - 11905: 0xBFED, + 23486 - 11905: 0xB1F6, + 23487 - 11905: 0xCBDE, + 23488 - 11905: 0x8C75, + 23489 - 11905: 0x8C76, + 23490 - 11905: 0xBCC5, + 23491 - 11905: 0x8C77, + 23492 - 11905: 0xBCC4, + 23493 - 11905: 0xD2FA, + 23494 - 11905: 0xC3DC, + 23495 - 11905: 0xBFDC, + 23496 - 11905: 0x8C78, + 23497 - 11905: 0x8C79, + 23498 - 11905: 0x8C7A, + 23499 - 11905: 0x8C7B, + 23500 - 11905: 0xB8BB, + 23501 - 11905: 0x8C7C, + 23502 - 11905: 0x8C7D, + 23503 - 11905: 0x8C7E, + 23504 - 11905: 0xC3C2, + 23505 - 11905: 0x8C80, + 23506 - 11905: 0xBAAE, + 23507 - 11905: 0xD4A2, + 23508 - 11905: 0x8C81, + 23509 - 11905: 0x8C82, + 23510 - 11905: 0x8C83, + 23511 - 11905: 0x8C84, + 23512 - 11905: 0x8C85, + 23513 - 11905: 0x8C86, + 23514 - 11905: 0x8C87, + 23515 - 11905: 0x8C88, + 23516 - 11905: 0x8C89, + 23517 - 11905: 0xC7DE, + 23518 - 11905: 0xC4AF, + 23519 - 11905: 0xB2EC, + 23520 - 11905: 0x8C8A, + 23521 - 11905: 0xB9D1, + 23522 - 11905: 0x8C8B, + 23523 - 11905: 0x8C8C, + 23524 - 11905: 0xE5BB, + 23525 - 11905: 0xC1C8, + 23526 - 11905: 0x8C8D, + 23527 - 11905: 0x8C8E, + 23528 - 11905: 0xD5AF, + 23529 - 11905: 0x8C8F, + 23530 - 11905: 0x8C90, + 23531 - 11905: 0x8C91, + 23532 - 11905: 0x8C92, + 23533 - 11905: 0x8C93, + 23534 - 11905: 0xE5BC, + 23535 - 11905: 0x8C94, + 23536 - 11905: 0xE5BE, + 23537 - 11905: 0x8C95, + 23538 - 11905: 0x8C96, + 23539 - 11905: 0x8C97, + 23540 - 11905: 0x8C98, + 23541 - 11905: 0x8C99, + 23542 - 11905: 0x8C9A, + 23543 - 11905: 0x8C9B, + 23544 - 11905: 0xB4E7, + 23545 - 11905: 0xB6D4, + 23546 - 11905: 0xCBC2, + 23547 - 11905: 0xD1B0, + 23548 - 11905: 0xB5BC, + 23549 - 11905: 0x8C9C, + 23550 - 11905: 0x8C9D, + 23551 - 11905: 0xCAD9, + 23552 - 11905: 0x8C9E, + 23553 - 11905: 0xB7E2, + 23554 - 11905: 0x8C9F, + 23555 - 11905: 0x8CA0, + 23556 - 11905: 0xC9E4, + 23557 - 11905: 0x8CA1, + 23558 - 11905: 0xBDAB, + 23559 - 11905: 0x8CA2, + 23560 - 11905: 0x8CA3, + 23561 - 11905: 0xCEBE, + 23562 - 11905: 0xD7F0, + 23563 - 11905: 0x8CA4, + 23564 - 11905: 0x8CA5, + 23565 - 11905: 0x8CA6, + 23566 - 11905: 0x8CA7, + 23567 - 11905: 0xD0A1, + 23568 - 11905: 0x8CA8, + 23569 - 11905: 0xC9D9, + 23570 - 11905: 0x8CA9, + 23571 - 11905: 0x8CAA, + 23572 - 11905: 0xB6FB, + 23573 - 11905: 0xE6D8, + 23574 - 11905: 0xBCE2, + 23575 - 11905: 0x8CAB, + 23576 - 11905: 0xB3BE, + 23577 - 11905: 0x8CAC, + 23578 - 11905: 0xC9D0, + 23579 - 11905: 0x8CAD, + 23580 - 11905: 0xE6D9, + 23581 - 11905: 0xB3A2, + 23582 - 11905: 0x8CAE, + 23583 - 11905: 0x8CAF, + 23584 - 11905: 0x8CB0, + 23585 - 11905: 0x8CB1, + 23586 - 11905: 0xDECC, + 23587 - 11905: 0x8CB2, + 23588 - 11905: 0xD3C8, + 23589 - 11905: 0xDECD, + 23590 - 11905: 0x8CB3, + 23591 - 11905: 0xD2A2, + 23592 - 11905: 0x8CB4, + 23593 - 11905: 0x8CB5, + 23594 - 11905: 0x8CB6, + 23595 - 11905: 0x8CB7, + 23596 - 11905: 0xDECE, + 23597 - 11905: 0x8CB8, + 23598 - 11905: 0x8CB9, + 23599 - 11905: 0x8CBA, + 23600 - 11905: 0x8CBB, + 23601 - 11905: 0xBECD, + 23602 - 11905: 0x8CBC, + 23603 - 11905: 0x8CBD, + 23604 - 11905: 0xDECF, + 23605 - 11905: 0x8CBE, + 23606 - 11905: 0x8CBF, + 23607 - 11905: 0x8CC0, + 23608 - 11905: 0xCAAC, + 23609 - 11905: 0xD2FC, + 23610 - 11905: 0xB3DF, + 23611 - 11905: 0xE5EA, + 23612 - 11905: 0xC4E1, + 23613 - 11905: 0xBEA1, + 23614 - 11905: 0xCEB2, + 23615 - 11905: 0xC4F2, + 23616 - 11905: 0xBED6, + 23617 - 11905: 0xC6A8, + 23618 - 11905: 0xB2E3, + 23619 - 11905: 0x8CC1, + 23620 - 11905: 0x8CC2, + 23621 - 11905: 0xBED3, + 23622 - 11905: 0x8CC3, + 23623 - 11905: 0x8CC4, + 23624 - 11905: 0xC7FC, + 23625 - 11905: 0xCCEB, + 23626 - 11905: 0xBDEC, + 23627 - 11905: 0xCEDD, + 23628 - 11905: 0x8CC5, + 23629 - 11905: 0x8CC6, + 23630 - 11905: 0xCABA, + 23631 - 11905: 0xC6C1, + 23632 - 11905: 0xE5EC, + 23633 - 11905: 0xD0BC, + 23634 - 11905: 0x8CC7, + 23635 - 11905: 0x8CC8, + 23636 - 11905: 0x8CC9, + 23637 - 11905: 0xD5B9, + 23638 - 11905: 0x8CCA, + 23639 - 11905: 0x8CCB, + 23640 - 11905: 0x8CCC, + 23641 - 11905: 0xE5ED, + 23642 - 11905: 0x8CCD, + 23643 - 11905: 0x8CCE, + 23644 - 11905: 0x8CCF, + 23645 - 11905: 0x8CD0, + 23646 - 11905: 0xCAF4, + 23647 - 11905: 0x8CD1, + 23648 - 11905: 0xCDC0, + 23649 - 11905: 0xC2C5, + 23650 - 11905: 0x8CD2, + 23651 - 11905: 0xE5EF, + 23652 - 11905: 0x8CD3, + 23653 - 11905: 0xC2C4, + 23654 - 11905: 0xE5F0, + 23655 - 11905: 0x8CD4, + 23656 - 11905: 0x8CD5, + 23657 - 11905: 0x8CD6, + 23658 - 11905: 0x8CD7, + 23659 - 11905: 0x8CD8, + 23660 - 11905: 0x8CD9, + 23661 - 11905: 0x8CDA, + 23662 - 11905: 0xE5F8, + 23663 - 11905: 0xCDCD, + 23664 - 11905: 0x8CDB, + 23665 - 11905: 0xC9BD, + 23666 - 11905: 0x8CDC, + 23667 - 11905: 0x8CDD, + 23668 - 11905: 0x8CDE, + 23669 - 11905: 0x8CDF, + 23670 - 11905: 0x8CE0, + 23671 - 11905: 0x8CE1, + 23672 - 11905: 0x8CE2, + 23673 - 11905: 0xD2D9, + 23674 - 11905: 0xE1A8, + 23675 - 11905: 0x8CE3, + 23676 - 11905: 0x8CE4, + 23677 - 11905: 0x8CE5, + 23678 - 11905: 0x8CE6, + 23679 - 11905: 0xD3EC, + 23680 - 11905: 0x8CE7, + 23681 - 11905: 0xCBEA, + 23682 - 11905: 0xC6F1, + 23683 - 11905: 0x8CE8, + 23684 - 11905: 0x8CE9, + 23685 - 11905: 0x8CEA, + 23686 - 11905: 0x8CEB, + 23687 - 11905: 0x8CEC, + 23688 - 11905: 0xE1AC, + 23689 - 11905: 0x8CED, + 23690 - 11905: 0x8CEE, + 23691 - 11905: 0x8CEF, + 23692 - 11905: 0xE1A7, + 23693 - 11905: 0xE1A9, + 23694 - 11905: 0x8CF0, + 23695 - 11905: 0x8CF1, + 23696 - 11905: 0xE1AA, + 23697 - 11905: 0xE1AF, + 23698 - 11905: 0x8CF2, + 23699 - 11905: 0x8CF3, + 23700 - 11905: 0xB2ED, + 23701 - 11905: 0x8CF4, + 23702 - 11905: 0xE1AB, + 23703 - 11905: 0xB8DA, + 23704 - 11905: 0xE1AD, + 23705 - 11905: 0xE1AE, + 23706 - 11905: 0xE1B0, + 23707 - 11905: 0xB5BA, + 23708 - 11905: 0xE1B1, + 23709 - 11905: 0x8CF5, + 23710 - 11905: 0x8CF6, + 23711 - 11905: 0x8CF7, + 23712 - 11905: 0x8CF8, + 23713 - 11905: 0x8CF9, + 23714 - 11905: 0xE1B3, + 23715 - 11905: 0xE1B8, + 23716 - 11905: 0x8CFA, + 23717 - 11905: 0x8CFB, + 23718 - 11905: 0x8CFC, + 23719 - 11905: 0x8CFD, + 23720 - 11905: 0x8CFE, + 23721 - 11905: 0xD1D2, + 23722 - 11905: 0x8D40, + 23723 - 11905: 0xE1B6, + 23724 - 11905: 0xE1B5, + 23725 - 11905: 0xC1EB, + 23726 - 11905: 0x8D41, + 23727 - 11905: 0x8D42, + 23728 - 11905: 0x8D43, + 23729 - 11905: 0xE1B7, + 23730 - 11905: 0x8D44, + 23731 - 11905: 0xD4C0, + 23732 - 11905: 0x8D45, + 23733 - 11905: 0xE1B2, + 23734 - 11905: 0x8D46, + 23735 - 11905: 0xE1BA, + 23736 - 11905: 0xB0B6, + 23737 - 11905: 0x8D47, + 23738 - 11905: 0x8D48, + 23739 - 11905: 0x8D49, + 23740 - 11905: 0x8D4A, + 23741 - 11905: 0xE1B4, + 23742 - 11905: 0x8D4B, + 23743 - 11905: 0xBFF9, + 23744 - 11905: 0x8D4C, + 23745 - 11905: 0xE1B9, + 23746 - 11905: 0x8D4D, + 23747 - 11905: 0x8D4E, + 23748 - 11905: 0xE1BB, + 23749 - 11905: 0x8D4F, + 23750 - 11905: 0x8D50, + 23751 - 11905: 0x8D51, + 23752 - 11905: 0x8D52, + 23753 - 11905: 0x8D53, + 23754 - 11905: 0x8D54, + 23755 - 11905: 0xE1BE, + 23756 - 11905: 0x8D55, + 23757 - 11905: 0x8D56, + 23758 - 11905: 0x8D57, + 23759 - 11905: 0x8D58, + 23760 - 11905: 0x8D59, + 23761 - 11905: 0x8D5A, + 23762 - 11905: 0xE1BC, + 23763 - 11905: 0x8D5B, + 23764 - 11905: 0x8D5C, + 23765 - 11905: 0x8D5D, + 23766 - 11905: 0x8D5E, + 23767 - 11905: 0x8D5F, + 23768 - 11905: 0x8D60, + 23769 - 11905: 0xD6C5, + 23770 - 11905: 0x8D61, + 23771 - 11905: 0x8D62, + 23772 - 11905: 0x8D63, + 23773 - 11905: 0x8D64, + 23774 - 11905: 0x8D65, + 23775 - 11905: 0x8D66, + 23776 - 11905: 0x8D67, + 23777 - 11905: 0xCFBF, + 23778 - 11905: 0x8D68, + 23779 - 11905: 0x8D69, + 23780 - 11905: 0xE1BD, + 23781 - 11905: 0xE1BF, + 23782 - 11905: 0xC2CD, + 23783 - 11905: 0x8D6A, + 23784 - 11905: 0xB6EB, + 23785 - 11905: 0x8D6B, + 23786 - 11905: 0xD3F8, + 23787 - 11905: 0x8D6C, + 23788 - 11905: 0x8D6D, + 23789 - 11905: 0xC7CD, + 23790 - 11905: 0x8D6E, + 23791 - 11905: 0x8D6F, + 23792 - 11905: 0xB7E5, + 23793 - 11905: 0x8D70, + 23794 - 11905: 0x8D71, + 23795 - 11905: 0x8D72, + 23796 - 11905: 0x8D73, + 23797 - 11905: 0x8D74, + 23798 - 11905: 0x8D75, + 23799 - 11905: 0x8D76, + 23800 - 11905: 0x8D77, + 23801 - 11905: 0x8D78, + 23802 - 11905: 0x8D79, + 23803 - 11905: 0xBEFE, + 23804 - 11905: 0x8D7A, + 23805 - 11905: 0x8D7B, + 23806 - 11905: 0x8D7C, + 23807 - 11905: 0x8D7D, + 23808 - 11905: 0x8D7E, + 23809 - 11905: 0x8D80, + 23810 - 11905: 0xE1C0, + 23811 - 11905: 0xE1C1, + 23812 - 11905: 0x8D81, + 23813 - 11905: 0x8D82, + 23814 - 11905: 0xE1C7, + 23815 - 11905: 0xB3E7, + 23816 - 11905: 0x8D83, + 23817 - 11905: 0x8D84, + 23818 - 11905: 0x8D85, + 23819 - 11905: 0x8D86, + 23820 - 11905: 0x8D87, + 23821 - 11905: 0x8D88, + 23822 - 11905: 0xC6E9, + 23823 - 11905: 0x8D89, + 23824 - 11905: 0x8D8A, + 23825 - 11905: 0x8D8B, + 23826 - 11905: 0x8D8C, + 23827 - 11905: 0x8D8D, + 23828 - 11905: 0xB4DE, + 23829 - 11905: 0x8D8E, + 23830 - 11905: 0xD1C2, + 23831 - 11905: 0x8D8F, + 23832 - 11905: 0x8D90, + 23833 - 11905: 0x8D91, + 23834 - 11905: 0x8D92, + 23835 - 11905: 0xE1C8, + 23836 - 11905: 0x8D93, + 23837 - 11905: 0x8D94, + 23838 - 11905: 0xE1C6, + 23839 - 11905: 0x8D95, + 23840 - 11905: 0x8D96, + 23841 - 11905: 0x8D97, + 23842 - 11905: 0x8D98, + 23843 - 11905: 0x8D99, + 23844 - 11905: 0xE1C5, + 23845 - 11905: 0x8D9A, + 23846 - 11905: 0xE1C3, + 23847 - 11905: 0xE1C2, + 23848 - 11905: 0x8D9B, + 23849 - 11905: 0xB1C0, + 23850 - 11905: 0x8D9C, + 23851 - 11905: 0x8D9D, + 23852 - 11905: 0x8D9E, + 23853 - 11905: 0xD5B8, + 23854 - 11905: 0xE1C4, + 23855 - 11905: 0x8D9F, + 23856 - 11905: 0x8DA0, + 23857 - 11905: 0x8DA1, + 23858 - 11905: 0x8DA2, + 23859 - 11905: 0x8DA3, + 23860 - 11905: 0xE1CB, + 23861 - 11905: 0x8DA4, + 23862 - 11905: 0x8DA5, + 23863 - 11905: 0x8DA6, + 23864 - 11905: 0x8DA7, + 23865 - 11905: 0x8DA8, + 23866 - 11905: 0x8DA9, + 23867 - 11905: 0x8DAA, + 23868 - 11905: 0x8DAB, + 23869 - 11905: 0xE1CC, + 23870 - 11905: 0xE1CA, + 23871 - 11905: 0x8DAC, + 23872 - 11905: 0x8DAD, + 23873 - 11905: 0x8DAE, + 23874 - 11905: 0x8DAF, + 23875 - 11905: 0x8DB0, + 23876 - 11905: 0x8DB1, + 23877 - 11905: 0x8DB2, + 23878 - 11905: 0x8DB3, + 23879 - 11905: 0xEFFA, + 23880 - 11905: 0x8DB4, + 23881 - 11905: 0x8DB5, + 23882 - 11905: 0xE1D3, + 23883 - 11905: 0xE1D2, + 23884 - 11905: 0xC7B6, + 23885 - 11905: 0x8DB6, + 23886 - 11905: 0x8DB7, + 23887 - 11905: 0x8DB8, + 23888 - 11905: 0x8DB9, + 23889 - 11905: 0x8DBA, + 23890 - 11905: 0x8DBB, + 23891 - 11905: 0x8DBC, + 23892 - 11905: 0x8DBD, + 23893 - 11905: 0x8DBE, + 23894 - 11905: 0x8DBF, + 23895 - 11905: 0x8DC0, + 23896 - 11905: 0xE1C9, + 23897 - 11905: 0x8DC1, + 23898 - 11905: 0x8DC2, + 23899 - 11905: 0xE1CE, + 23900 - 11905: 0x8DC3, + 23901 - 11905: 0xE1D0, + 23902 - 11905: 0x8DC4, + 23903 - 11905: 0x8DC5, + 23904 - 11905: 0x8DC6, + 23905 - 11905: 0x8DC7, + 23906 - 11905: 0x8DC8, + 23907 - 11905: 0x8DC9, + 23908 - 11905: 0x8DCA, + 23909 - 11905: 0x8DCB, + 23910 - 11905: 0x8DCC, + 23911 - 11905: 0x8DCD, + 23912 - 11905: 0x8DCE, + 23913 - 11905: 0xE1D4, + 23914 - 11905: 0x8DCF, + 23915 - 11905: 0xE1D1, + 23916 - 11905: 0xE1CD, + 23917 - 11905: 0x8DD0, + 23918 - 11905: 0x8DD1, + 23919 - 11905: 0xE1CF, + 23920 - 11905: 0x8DD2, + 23921 - 11905: 0x8DD3, + 23922 - 11905: 0x8DD4, + 23923 - 11905: 0x8DD5, + 23924 - 11905: 0xE1D5, + 23925 - 11905: 0x8DD6, + 23926 - 11905: 0x8DD7, + 23927 - 11905: 0x8DD8, + 23928 - 11905: 0x8DD9, + 23929 - 11905: 0x8DDA, + 23930 - 11905: 0x8DDB, + 23931 - 11905: 0x8DDC, + 23932 - 11905: 0x8DDD, + 23933 - 11905: 0x8DDE, + 23934 - 11905: 0x8DDF, + 23935 - 11905: 0x8DE0, + 23936 - 11905: 0x8DE1, + 23937 - 11905: 0x8DE2, + 23938 - 11905: 0xE1D6, + 23939 - 11905: 0x8DE3, + 23940 - 11905: 0x8DE4, + 23941 - 11905: 0x8DE5, + 23942 - 11905: 0x8DE6, + 23943 - 11905: 0x8DE7, + 23944 - 11905: 0x8DE8, + 23945 - 11905: 0x8DE9, + 23946 - 11905: 0x8DEA, + 23947 - 11905: 0x8DEB, + 23948 - 11905: 0x8DEC, + 23949 - 11905: 0x8DED, + 23950 - 11905: 0x8DEE, + 23951 - 11905: 0x8DEF, + 23952 - 11905: 0x8DF0, + 23953 - 11905: 0x8DF1, + 23954 - 11905: 0x8DF2, + 23955 - 11905: 0x8DF3, + 23956 - 11905: 0x8DF4, + 23957 - 11905: 0x8DF5, + 23958 - 11905: 0x8DF6, + 23959 - 11905: 0x8DF7, + 23960 - 11905: 0x8DF8, + 23961 - 11905: 0xE1D7, + 23962 - 11905: 0x8DF9, + 23963 - 11905: 0x8DFA, + 23964 - 11905: 0x8DFB, + 23965 - 11905: 0xE1D8, + 23966 - 11905: 0x8DFC, + 23967 - 11905: 0x8DFD, + 23968 - 11905: 0x8DFE, + 23969 - 11905: 0x8E40, + 23970 - 11905: 0x8E41, + 23971 - 11905: 0x8E42, + 23972 - 11905: 0x8E43, + 23973 - 11905: 0x8E44, + 23974 - 11905: 0x8E45, + 23975 - 11905: 0x8E46, + 23976 - 11905: 0x8E47, + 23977 - 11905: 0x8E48, + 23978 - 11905: 0x8E49, + 23979 - 11905: 0x8E4A, + 23980 - 11905: 0x8E4B, + 23981 - 11905: 0x8E4C, + 23982 - 11905: 0x8E4D, + 23983 - 11905: 0x8E4E, + 23984 - 11905: 0x8E4F, + 23985 - 11905: 0x8E50, + 23986 - 11905: 0x8E51, + 23987 - 11905: 0x8E52, + 23988 - 11905: 0x8E53, + 23989 - 11905: 0x8E54, + 23990 - 11905: 0x8E55, + 23991 - 11905: 0xE1DA, + 23992 - 11905: 0x8E56, + 23993 - 11905: 0x8E57, + 23994 - 11905: 0x8E58, + 23995 - 11905: 0x8E59, + 23996 - 11905: 0x8E5A, + 23997 - 11905: 0x8E5B, + 23998 - 11905: 0x8E5C, + 23999 - 11905: 0x8E5D, + 24000 - 11905: 0x8E5E, + 24001 - 11905: 0x8E5F, + 24002 - 11905: 0x8E60, + 24003 - 11905: 0x8E61, + 24004 - 11905: 0x8E62, + 24005 - 11905: 0xE1DB, + 24006 - 11905: 0x8E63, + 24007 - 11905: 0x8E64, + 24008 - 11905: 0x8E65, + 24009 - 11905: 0x8E66, + 24010 - 11905: 0x8E67, + 24011 - 11905: 0x8E68, + 24012 - 11905: 0x8E69, + 24013 - 11905: 0xCEA1, + 24014 - 11905: 0x8E6A, + 24015 - 11905: 0x8E6B, + 24016 - 11905: 0x8E6C, + 24017 - 11905: 0x8E6D, + 24018 - 11905: 0x8E6E, + 24019 - 11905: 0x8E6F, + 24020 - 11905: 0x8E70, + 24021 - 11905: 0x8E71, + 24022 - 11905: 0x8E72, + 24023 - 11905: 0x8E73, + 24024 - 11905: 0x8E74, + 24025 - 11905: 0x8E75, + 24026 - 11905: 0x8E76, + 24027 - 11905: 0xE7DD, + 24028 - 11905: 0x8E77, + 24029 - 11905: 0xB4A8, + 24030 - 11905: 0xD6DD, + 24031 - 11905: 0x8E78, + 24032 - 11905: 0x8E79, + 24033 - 11905: 0xD1B2, + 24034 - 11905: 0xB3B2, + 24035 - 11905: 0x8E7A, + 24036 - 11905: 0x8E7B, + 24037 - 11905: 0xB9A4, + 24038 - 11905: 0xD7F3, + 24039 - 11905: 0xC7C9, + 24040 - 11905: 0xBEDE, + 24041 - 11905: 0xB9AE, + 24042 - 11905: 0x8E7C, + 24043 - 11905: 0xCED7, + 24044 - 11905: 0x8E7D, + 24045 - 11905: 0x8E7E, + 24046 - 11905: 0xB2EE, + 24047 - 11905: 0xDBCF, + 24048 - 11905: 0x8E80, + 24049 - 11905: 0xBCBA, + 24050 - 11905: 0xD2D1, + 24051 - 11905: 0xCBC8, + 24052 - 11905: 0xB0CD, + 24053 - 11905: 0x8E81, + 24054 - 11905: 0x8E82, + 24055 - 11905: 0xCFEF, + 24056 - 11905: 0x8E83, + 24057 - 11905: 0x8E84, + 24058 - 11905: 0x8E85, + 24059 - 11905: 0x8E86, + 24060 - 11905: 0x8E87, + 24061 - 11905: 0xD9E3, + 24062 - 11905: 0xBDED, + 24063 - 11905: 0x8E88, + 24064 - 11905: 0x8E89, + 24065 - 11905: 0xB1D2, + 24066 - 11905: 0xCAD0, + 24067 - 11905: 0xB2BC, + 24068 - 11905: 0x8E8A, + 24069 - 11905: 0xCBA7, + 24070 - 11905: 0xB7AB, + 24071 - 11905: 0x8E8B, + 24072 - 11905: 0xCAA6, + 24073 - 11905: 0x8E8C, + 24074 - 11905: 0x8E8D, + 24075 - 11905: 0x8E8E, + 24076 - 11905: 0xCFA3, + 24077 - 11905: 0x8E8F, + 24078 - 11905: 0x8E90, + 24079 - 11905: 0xE0F8, + 24080 - 11905: 0xD5CA, + 24081 - 11905: 0xE0FB, + 24082 - 11905: 0x8E91, + 24083 - 11905: 0x8E92, + 24084 - 11905: 0xE0FA, + 24085 - 11905: 0xC5C1, + 24086 - 11905: 0xCCFB, + 24087 - 11905: 0x8E93, + 24088 - 11905: 0xC1B1, + 24089 - 11905: 0xE0F9, + 24090 - 11905: 0xD6E3, + 24091 - 11905: 0xB2AF, + 24092 - 11905: 0xD6C4, + 24093 - 11905: 0xB5DB, + 24094 - 11905: 0x8E94, + 24095 - 11905: 0x8E95, + 24096 - 11905: 0x8E96, + 24097 - 11905: 0x8E97, + 24098 - 11905: 0x8E98, + 24099 - 11905: 0x8E99, + 24100 - 11905: 0x8E9A, + 24101 - 11905: 0x8E9B, + 24102 - 11905: 0xB4F8, + 24103 - 11905: 0xD6A1, + 24104 - 11905: 0x8E9C, + 24105 - 11905: 0x8E9D, + 24106 - 11905: 0x8E9E, + 24107 - 11905: 0x8E9F, + 24108 - 11905: 0x8EA0, + 24109 - 11905: 0xCFAF, + 24110 - 11905: 0xB0EF, + 24111 - 11905: 0x8EA1, + 24112 - 11905: 0x8EA2, + 24113 - 11905: 0xE0FC, + 24114 - 11905: 0x8EA3, + 24115 - 11905: 0x8EA4, + 24116 - 11905: 0x8EA5, + 24117 - 11905: 0x8EA6, + 24118 - 11905: 0x8EA7, + 24119 - 11905: 0xE1A1, + 24120 - 11905: 0xB3A3, + 24121 - 11905: 0x8EA8, + 24122 - 11905: 0x8EA9, + 24123 - 11905: 0xE0FD, + 24124 - 11905: 0xE0FE, + 24125 - 11905: 0xC3B1, + 24126 - 11905: 0x8EAA, + 24127 - 11905: 0x8EAB, + 24128 - 11905: 0x8EAC, + 24129 - 11905: 0x8EAD, + 24130 - 11905: 0xC3DD, + 24131 - 11905: 0x8EAE, + 24132 - 11905: 0xE1A2, + 24133 - 11905: 0xB7F9, + 24134 - 11905: 0x8EAF, + 24135 - 11905: 0x8EB0, + 24136 - 11905: 0x8EB1, + 24137 - 11905: 0x8EB2, + 24138 - 11905: 0x8EB3, + 24139 - 11905: 0x8EB4, + 24140 - 11905: 0xBBCF, + 24141 - 11905: 0x8EB5, + 24142 - 11905: 0x8EB6, + 24143 - 11905: 0x8EB7, + 24144 - 11905: 0x8EB8, + 24145 - 11905: 0x8EB9, + 24146 - 11905: 0x8EBA, + 24147 - 11905: 0x8EBB, + 24148 - 11905: 0xE1A3, + 24149 - 11905: 0xC4BB, + 24150 - 11905: 0x8EBC, + 24151 - 11905: 0x8EBD, + 24152 - 11905: 0x8EBE, + 24153 - 11905: 0x8EBF, + 24154 - 11905: 0x8EC0, + 24155 - 11905: 0xE1A4, + 24156 - 11905: 0x8EC1, + 24157 - 11905: 0x8EC2, + 24158 - 11905: 0xE1A5, + 24159 - 11905: 0x8EC3, + 24160 - 11905: 0x8EC4, + 24161 - 11905: 0xE1A6, + 24162 - 11905: 0xB4B1, + 24163 - 11905: 0x8EC5, + 24164 - 11905: 0x8EC6, + 24165 - 11905: 0x8EC7, + 24166 - 11905: 0x8EC8, + 24167 - 11905: 0x8EC9, + 24168 - 11905: 0x8ECA, + 24169 - 11905: 0x8ECB, + 24170 - 11905: 0x8ECC, + 24171 - 11905: 0x8ECD, + 24172 - 11905: 0x8ECE, + 24173 - 11905: 0x8ECF, + 24174 - 11905: 0x8ED0, + 24175 - 11905: 0x8ED1, + 24176 - 11905: 0x8ED2, + 24177 - 11905: 0x8ED3, + 24178 - 11905: 0xB8C9, + 24179 - 11905: 0xC6BD, + 24180 - 11905: 0xC4EA, + 24181 - 11905: 0x8ED4, + 24182 - 11905: 0xB2A2, + 24183 - 11905: 0x8ED5, + 24184 - 11905: 0xD0D2, + 24185 - 11905: 0x8ED6, + 24186 - 11905: 0xE7DB, + 24187 - 11905: 0xBBC3, + 24188 - 11905: 0xD3D7, + 24189 - 11905: 0xD3C4, + 24190 - 11905: 0x8ED7, + 24191 - 11905: 0xB9E3, + 24192 - 11905: 0xE2CF, + 24193 - 11905: 0x8ED8, + 24194 - 11905: 0x8ED9, + 24195 - 11905: 0x8EDA, + 24196 - 11905: 0xD7AF, + 24197 - 11905: 0x8EDB, + 24198 - 11905: 0xC7EC, + 24199 - 11905: 0xB1D3, + 24200 - 11905: 0x8EDC, + 24201 - 11905: 0x8EDD, + 24202 - 11905: 0xB4B2, + 24203 - 11905: 0xE2D1, + 24204 - 11905: 0x8EDE, + 24205 - 11905: 0x8EDF, + 24206 - 11905: 0x8EE0, + 24207 - 11905: 0xD0F2, + 24208 - 11905: 0xC2AE, + 24209 - 11905: 0xE2D0, + 24210 - 11905: 0x8EE1, + 24211 - 11905: 0xBFE2, + 24212 - 11905: 0xD3A6, + 24213 - 11905: 0xB5D7, + 24214 - 11905: 0xE2D2, + 24215 - 11905: 0xB5EA, + 24216 - 11905: 0x8EE2, + 24217 - 11905: 0xC3ED, + 24218 - 11905: 0xB8FD, + 24219 - 11905: 0x8EE3, + 24220 - 11905: 0xB8AE, + 24221 - 11905: 0x8EE4, + 24222 - 11905: 0xC5D3, + 24223 - 11905: 0xB7CF, + 24224 - 11905: 0xE2D4, + 24225 - 11905: 0x8EE5, + 24226 - 11905: 0x8EE6, + 24227 - 11905: 0x8EE7, + 24228 - 11905: 0x8EE8, + 24229 - 11905: 0xE2D3, + 24230 - 11905: 0xB6C8, + 24231 - 11905: 0xD7F9, + 24232 - 11905: 0x8EE9, + 24233 - 11905: 0x8EEA, + 24234 - 11905: 0x8EEB, + 24235 - 11905: 0x8EEC, + 24236 - 11905: 0x8EED, + 24237 - 11905: 0xCDA5, + 24238 - 11905: 0x8EEE, + 24239 - 11905: 0x8EEF, + 24240 - 11905: 0x8EF0, + 24241 - 11905: 0x8EF1, + 24242 - 11905: 0x8EF2, + 24243 - 11905: 0xE2D8, + 24244 - 11905: 0x8EF3, + 24245 - 11905: 0xE2D6, + 24246 - 11905: 0xCAFC, + 24247 - 11905: 0xBFB5, + 24248 - 11905: 0xD3B9, + 24249 - 11905: 0xE2D5, + 24250 - 11905: 0x8EF4, + 24251 - 11905: 0x8EF5, + 24252 - 11905: 0x8EF6, + 24253 - 11905: 0x8EF7, + 24254 - 11905: 0xE2D7, + 24255 - 11905: 0x8EF8, + 24256 - 11905: 0x8EF9, + 24257 - 11905: 0x8EFA, + 24258 - 11905: 0x8EFB, + 24259 - 11905: 0x8EFC, + 24260 - 11905: 0x8EFD, + 24261 - 11905: 0x8EFE, + 24262 - 11905: 0x8F40, + 24263 - 11905: 0x8F41, + 24264 - 11905: 0x8F42, + 24265 - 11905: 0xC1AE, + 24266 - 11905: 0xC0C8, + 24267 - 11905: 0x8F43, + 24268 - 11905: 0x8F44, + 24269 - 11905: 0x8F45, + 24270 - 11905: 0x8F46, + 24271 - 11905: 0x8F47, + 24272 - 11905: 0x8F48, + 24273 - 11905: 0xE2DB, + 24274 - 11905: 0xE2DA, + 24275 - 11905: 0xC0AA, + 24276 - 11905: 0x8F49, + 24277 - 11905: 0x8F4A, + 24278 - 11905: 0xC1CE, + 24279 - 11905: 0x8F4B, + 24280 - 11905: 0x8F4C, + 24281 - 11905: 0x8F4D, + 24282 - 11905: 0x8F4E, + 24283 - 11905: 0xE2DC, + 24284 - 11905: 0x8F4F, + 24285 - 11905: 0x8F50, + 24286 - 11905: 0x8F51, + 24287 - 11905: 0x8F52, + 24288 - 11905: 0x8F53, + 24289 - 11905: 0x8F54, + 24290 - 11905: 0x8F55, + 24291 - 11905: 0x8F56, + 24292 - 11905: 0x8F57, + 24293 - 11905: 0x8F58, + 24294 - 11905: 0x8F59, + 24295 - 11905: 0x8F5A, + 24296 - 11905: 0xE2DD, + 24297 - 11905: 0x8F5B, + 24298 - 11905: 0xE2DE, + 24299 - 11905: 0x8F5C, + 24300 - 11905: 0x8F5D, + 24301 - 11905: 0x8F5E, + 24302 - 11905: 0x8F5F, + 24303 - 11905: 0x8F60, + 24304 - 11905: 0x8F61, + 24305 - 11905: 0x8F62, + 24306 - 11905: 0x8F63, + 24307 - 11905: 0x8F64, + 24308 - 11905: 0xDBC8, + 24309 - 11905: 0x8F65, + 24310 - 11905: 0xD1D3, + 24311 - 11905: 0xCDA2, + 24312 - 11905: 0x8F66, + 24313 - 11905: 0x8F67, + 24314 - 11905: 0xBDA8, + 24315 - 11905: 0x8F68, + 24316 - 11905: 0x8F69, + 24317 - 11905: 0x8F6A, + 24318 - 11905: 0xDEC3, + 24319 - 11905: 0xD8A5, + 24320 - 11905: 0xBFAA, + 24321 - 11905: 0xDBCD, + 24322 - 11905: 0xD2EC, + 24323 - 11905: 0xC6FA, + 24324 - 11905: 0xC5AA, + 24325 - 11905: 0x8F6B, + 24326 - 11905: 0x8F6C, + 24327 - 11905: 0x8F6D, + 24328 - 11905: 0xDEC4, + 24329 - 11905: 0x8F6E, + 24330 - 11905: 0xB1D7, + 24331 - 11905: 0xDFAE, + 24332 - 11905: 0x8F6F, + 24333 - 11905: 0x8F70, + 24334 - 11905: 0x8F71, + 24335 - 11905: 0xCABD, + 24336 - 11905: 0x8F72, + 24337 - 11905: 0xDFB1, + 24338 - 11905: 0x8F73, + 24339 - 11905: 0xB9AD, + 24340 - 11905: 0x8F74, + 24341 - 11905: 0xD2FD, + 24342 - 11905: 0x8F75, + 24343 - 11905: 0xB8A5, + 24344 - 11905: 0xBAEB, + 24345 - 11905: 0x8F76, + 24346 - 11905: 0x8F77, + 24347 - 11905: 0xB3DA, + 24348 - 11905: 0x8F78, + 24349 - 11905: 0x8F79, + 24350 - 11905: 0x8F7A, + 24351 - 11905: 0xB5DC, + 24352 - 11905: 0xD5C5, + 24353 - 11905: 0x8F7B, + 24354 - 11905: 0x8F7C, + 24355 - 11905: 0x8F7D, + 24356 - 11905: 0x8F7E, + 24357 - 11905: 0xC3D6, + 24358 - 11905: 0xCFD2, + 24359 - 11905: 0xBBA1, + 24360 - 11905: 0x8F80, + 24361 - 11905: 0xE5F3, + 24362 - 11905: 0xE5F2, + 24363 - 11905: 0x8F81, + 24364 - 11905: 0x8F82, + 24365 - 11905: 0xE5F4, + 24366 - 11905: 0x8F83, + 24367 - 11905: 0xCDE4, + 24368 - 11905: 0x8F84, + 24369 - 11905: 0xC8F5, + 24370 - 11905: 0x8F85, + 24371 - 11905: 0x8F86, + 24372 - 11905: 0x8F87, + 24373 - 11905: 0x8F88, + 24374 - 11905: 0x8F89, + 24375 - 11905: 0x8F8A, + 24376 - 11905: 0x8F8B, + 24377 - 11905: 0xB5AF, + 24378 - 11905: 0xC7BF, + 24379 - 11905: 0x8F8C, + 24380 - 11905: 0xE5F6, + 24381 - 11905: 0x8F8D, + 24382 - 11905: 0x8F8E, + 24383 - 11905: 0x8F8F, + 24384 - 11905: 0xECB0, + 24385 - 11905: 0x8F90, + 24386 - 11905: 0x8F91, + 24387 - 11905: 0x8F92, + 24388 - 11905: 0x8F93, + 24389 - 11905: 0x8F94, + 24390 - 11905: 0x8F95, + 24391 - 11905: 0x8F96, + 24392 - 11905: 0x8F97, + 24393 - 11905: 0x8F98, + 24394 - 11905: 0x8F99, + 24395 - 11905: 0x8F9A, + 24396 - 11905: 0x8F9B, + 24397 - 11905: 0x8F9C, + 24398 - 11905: 0x8F9D, + 24399 - 11905: 0x8F9E, + 24400 - 11905: 0xE5E6, + 24401 - 11905: 0x8F9F, + 24402 - 11905: 0xB9E9, + 24403 - 11905: 0xB5B1, + 24404 - 11905: 0x8FA0, + 24405 - 11905: 0xC2BC, + 24406 - 11905: 0xE5E8, + 24407 - 11905: 0xE5E7, + 24408 - 11905: 0xE5E9, + 24409 - 11905: 0x8FA1, + 24410 - 11905: 0x8FA2, + 24411 - 11905: 0x8FA3, + 24412 - 11905: 0x8FA4, + 24413 - 11905: 0xD2CD, + 24414 - 11905: 0x8FA5, + 24415 - 11905: 0x8FA6, + 24416 - 11905: 0x8FA7, + 24417 - 11905: 0xE1EA, + 24418 - 11905: 0xD0CE, + 24419 - 11905: 0x8FA8, + 24420 - 11905: 0xCDAE, + 24421 - 11905: 0x8FA9, + 24422 - 11905: 0xD1E5, + 24423 - 11905: 0x8FAA, + 24424 - 11905: 0x8FAB, + 24425 - 11905: 0xB2CA, + 24426 - 11905: 0xB1EB, + 24427 - 11905: 0x8FAC, + 24428 - 11905: 0xB1F2, + 24429 - 11905: 0xC5ED, + 24430 - 11905: 0x8FAD, + 24431 - 11905: 0x8FAE, + 24432 - 11905: 0xD5C3, + 24433 - 11905: 0xD3B0, + 24434 - 11905: 0x8FAF, + 24435 - 11905: 0xE1DC, + 24436 - 11905: 0x8FB0, + 24437 - 11905: 0x8FB1, + 24438 - 11905: 0x8FB2, + 24439 - 11905: 0xE1DD, + 24440 - 11905: 0x8FB3, + 24441 - 11905: 0xD2DB, + 24442 - 11905: 0x8FB4, + 24443 - 11905: 0xB3B9, + 24444 - 11905: 0xB1CB, + 24445 - 11905: 0x8FB5, + 24446 - 11905: 0x8FB6, + 24447 - 11905: 0x8FB7, + 24448 - 11905: 0xCDF9, + 24449 - 11905: 0xD5F7, + 24450 - 11905: 0xE1DE, + 24451 - 11905: 0x8FB8, + 24452 - 11905: 0xBEB6, + 24453 - 11905: 0xB4FD, + 24454 - 11905: 0x8FB9, + 24455 - 11905: 0xE1DF, + 24456 - 11905: 0xBADC, + 24457 - 11905: 0xE1E0, + 24458 - 11905: 0xBBB2, + 24459 - 11905: 0xC2C9, + 24460 - 11905: 0xE1E1, + 24461 - 11905: 0x8FBA, + 24462 - 11905: 0x8FBB, + 24463 - 11905: 0x8FBC, + 24464 - 11905: 0xD0EC, + 24465 - 11905: 0x8FBD, + 24466 - 11905: 0xCDBD, + 24467 - 11905: 0x8FBE, + 24468 - 11905: 0x8FBF, + 24469 - 11905: 0xE1E2, + 24470 - 11905: 0x8FC0, + 24471 - 11905: 0xB5C3, + 24472 - 11905: 0xC5C7, + 24473 - 11905: 0xE1E3, + 24474 - 11905: 0x8FC1, + 24475 - 11905: 0x8FC2, + 24476 - 11905: 0xE1E4, + 24477 - 11905: 0x8FC3, + 24478 - 11905: 0x8FC4, + 24479 - 11905: 0x8FC5, + 24480 - 11905: 0x8FC6, + 24481 - 11905: 0xD3F9, + 24482 - 11905: 0x8FC7, + 24483 - 11905: 0x8FC8, + 24484 - 11905: 0x8FC9, + 24485 - 11905: 0x8FCA, + 24486 - 11905: 0x8FCB, + 24487 - 11905: 0x8FCC, + 24488 - 11905: 0xE1E5, + 24489 - 11905: 0x8FCD, + 24490 - 11905: 0xD1AD, + 24491 - 11905: 0x8FCE, + 24492 - 11905: 0x8FCF, + 24493 - 11905: 0xE1E6, + 24494 - 11905: 0xCEA2, + 24495 - 11905: 0x8FD0, + 24496 - 11905: 0x8FD1, + 24497 - 11905: 0x8FD2, + 24498 - 11905: 0x8FD3, + 24499 - 11905: 0x8FD4, + 24500 - 11905: 0x8FD5, + 24501 - 11905: 0xE1E7, + 24502 - 11905: 0x8FD6, + 24503 - 11905: 0xB5C2, + 24504 - 11905: 0x8FD7, + 24505 - 11905: 0x8FD8, + 24506 - 11905: 0x8FD9, + 24507 - 11905: 0x8FDA, + 24508 - 11905: 0xE1E8, + 24509 - 11905: 0xBBD5, + 24510 - 11905: 0x8FDB, + 24511 - 11905: 0x8FDC, + 24512 - 11905: 0x8FDD, + 24513 - 11905: 0x8FDE, + 24514 - 11905: 0x8FDF, + 24515 - 11905: 0xD0C4, + 24516 - 11905: 0xE2E0, + 24517 - 11905: 0xB1D8, + 24518 - 11905: 0xD2E4, + 24519 - 11905: 0x8FE0, + 24520 - 11905: 0x8FE1, + 24521 - 11905: 0xE2E1, + 24522 - 11905: 0x8FE2, + 24523 - 11905: 0x8FE3, + 24524 - 11905: 0xBCC9, + 24525 - 11905: 0xC8CC, + 24526 - 11905: 0x8FE4, + 24527 - 11905: 0xE2E3, + 24528 - 11905: 0xECFE, + 24529 - 11905: 0xECFD, + 24530 - 11905: 0xDFAF, + 24531 - 11905: 0x8FE5, + 24532 - 11905: 0x8FE6, + 24533 - 11905: 0x8FE7, + 24534 - 11905: 0xE2E2, + 24535 - 11905: 0xD6BE, + 24536 - 11905: 0xCDFC, + 24537 - 11905: 0xC3A6, + 24538 - 11905: 0x8FE8, + 24539 - 11905: 0x8FE9, + 24540 - 11905: 0x8FEA, + 24541 - 11905: 0xE3C3, + 24542 - 11905: 0x8FEB, + 24543 - 11905: 0x8FEC, + 24544 - 11905: 0xD6D2, + 24545 - 11905: 0xE2E7, + 24546 - 11905: 0x8FED, + 24547 - 11905: 0x8FEE, + 24548 - 11905: 0xE2E8, + 24549 - 11905: 0x8FEF, + 24550 - 11905: 0x8FF0, + 24551 - 11905: 0xD3C7, + 24552 - 11905: 0x8FF1, + 24553 - 11905: 0x8FF2, + 24554 - 11905: 0xE2EC, + 24555 - 11905: 0xBFEC, + 24556 - 11905: 0x8FF3, + 24557 - 11905: 0xE2ED, + 24558 - 11905: 0xE2E5, + 24559 - 11905: 0x8FF4, + 24560 - 11905: 0x8FF5, + 24561 - 11905: 0xB3C0, + 24562 - 11905: 0x8FF6, + 24563 - 11905: 0x8FF7, + 24564 - 11905: 0x8FF8, + 24565 - 11905: 0xC4EE, + 24566 - 11905: 0x8FF9, + 24567 - 11905: 0x8FFA, + 24568 - 11905: 0xE2EE, + 24569 - 11905: 0x8FFB, + 24570 - 11905: 0x8FFC, + 24571 - 11905: 0xD0C3, + 24572 - 11905: 0x8FFD, + 24573 - 11905: 0xBAF6, + 24574 - 11905: 0xE2E9, + 24575 - 11905: 0xB7DE, + 24576 - 11905: 0xBBB3, + 24577 - 11905: 0xCCAC, + 24578 - 11905: 0xCBCB, + 24579 - 11905: 0xE2E4, + 24580 - 11905: 0xE2E6, + 24581 - 11905: 0xE2EA, + 24582 - 11905: 0xE2EB, + 24583 - 11905: 0x8FFE, + 24584 - 11905: 0x9040, + 24585 - 11905: 0x9041, + 24586 - 11905: 0xE2F7, + 24587 - 11905: 0x9042, + 24588 - 11905: 0x9043, + 24589 - 11905: 0xE2F4, + 24590 - 11905: 0xD4F5, + 24591 - 11905: 0xE2F3, + 24592 - 11905: 0x9044, + 24593 - 11905: 0x9045, + 24594 - 11905: 0xC5AD, + 24595 - 11905: 0x9046, + 24596 - 11905: 0xD5FA, + 24597 - 11905: 0xC5C2, + 24598 - 11905: 0xB2C0, + 24599 - 11905: 0x9047, + 24600 - 11905: 0x9048, + 24601 - 11905: 0xE2EF, + 24602 - 11905: 0x9049, + 24603 - 11905: 0xE2F2, + 24604 - 11905: 0xC1AF, + 24605 - 11905: 0xCBBC, + 24606 - 11905: 0x904A, + 24607 - 11905: 0x904B, + 24608 - 11905: 0xB5A1, + 24609 - 11905: 0xE2F9, + 24610 - 11905: 0x904C, + 24611 - 11905: 0x904D, + 24612 - 11905: 0x904E, + 24613 - 11905: 0xBCB1, + 24614 - 11905: 0xE2F1, + 24615 - 11905: 0xD0D4, + 24616 - 11905: 0xD4B9, + 24617 - 11905: 0xE2F5, + 24618 - 11905: 0xB9D6, + 24619 - 11905: 0xE2F6, + 24620 - 11905: 0x904F, + 24621 - 11905: 0x9050, + 24622 - 11905: 0x9051, + 24623 - 11905: 0xC7D3, + 24624 - 11905: 0x9052, + 24625 - 11905: 0x9053, + 24626 - 11905: 0x9054, + 24627 - 11905: 0x9055, + 24628 - 11905: 0x9056, + 24629 - 11905: 0xE2F0, + 24630 - 11905: 0x9057, + 24631 - 11905: 0x9058, + 24632 - 11905: 0x9059, + 24633 - 11905: 0x905A, + 24634 - 11905: 0x905B, + 24635 - 11905: 0xD7DC, + 24636 - 11905: 0xEDA1, + 24637 - 11905: 0x905C, + 24638 - 11905: 0x905D, + 24639 - 11905: 0xE2F8, + 24640 - 11905: 0x905E, + 24641 - 11905: 0xEDA5, + 24642 - 11905: 0xE2FE, + 24643 - 11905: 0xCAD1, + 24644 - 11905: 0x905F, + 24645 - 11905: 0x9060, + 24646 - 11905: 0x9061, + 24647 - 11905: 0x9062, + 24648 - 11905: 0x9063, + 24649 - 11905: 0x9064, + 24650 - 11905: 0x9065, + 24651 - 11905: 0xC1B5, + 24652 - 11905: 0x9066, + 24653 - 11905: 0xBBD0, + 24654 - 11905: 0x9067, + 24655 - 11905: 0x9068, + 24656 - 11905: 0xBFD6, + 24657 - 11905: 0x9069, + 24658 - 11905: 0xBAE3, + 24659 - 11905: 0x906A, + 24660 - 11905: 0x906B, + 24661 - 11905: 0xCBA1, + 24662 - 11905: 0x906C, + 24663 - 11905: 0x906D, + 24664 - 11905: 0x906E, + 24665 - 11905: 0xEDA6, + 24666 - 11905: 0xEDA3, + 24667 - 11905: 0x906F, + 24668 - 11905: 0x9070, + 24669 - 11905: 0xEDA2, + 24670 - 11905: 0x9071, + 24671 - 11905: 0x9072, + 24672 - 11905: 0x9073, + 24673 - 11905: 0x9074, + 24674 - 11905: 0xBBD6, + 24675 - 11905: 0xEDA7, + 24676 - 11905: 0xD0F4, + 24677 - 11905: 0x9075, + 24678 - 11905: 0x9076, + 24679 - 11905: 0xEDA4, + 24680 - 11905: 0xBADE, + 24681 - 11905: 0xB6F7, + 24682 - 11905: 0xE3A1, + 24683 - 11905: 0xB6B2, + 24684 - 11905: 0xCCF1, + 24685 - 11905: 0xB9A7, + 24686 - 11905: 0x9077, + 24687 - 11905: 0xCFA2, + 24688 - 11905: 0xC7A1, + 24689 - 11905: 0x9078, + 24690 - 11905: 0x9079, + 24691 - 11905: 0xBFD2, + 24692 - 11905: 0x907A, + 24693 - 11905: 0x907B, + 24694 - 11905: 0xB6F1, + 24695 - 11905: 0x907C, + 24696 - 11905: 0xE2FA, + 24697 - 11905: 0xE2FB, + 24698 - 11905: 0xE2FD, + 24699 - 11905: 0xE2FC, + 24700 - 11905: 0xC4D5, + 24701 - 11905: 0xE3A2, + 24702 - 11905: 0x907D, + 24703 - 11905: 0xD3C1, + 24704 - 11905: 0x907E, + 24705 - 11905: 0x9080, + 24706 - 11905: 0x9081, + 24707 - 11905: 0xE3A7, + 24708 - 11905: 0xC7C4, + 24709 - 11905: 0x9082, + 24710 - 11905: 0x9083, + 24711 - 11905: 0x9084, + 24712 - 11905: 0x9085, + 24713 - 11905: 0xCFA4, + 24714 - 11905: 0x9086, + 24715 - 11905: 0x9087, + 24716 - 11905: 0xE3A9, + 24717 - 11905: 0xBAB7, + 24718 - 11905: 0x9088, + 24719 - 11905: 0x9089, + 24720 - 11905: 0x908A, + 24721 - 11905: 0x908B, + 24722 - 11905: 0xE3A8, + 24723 - 11905: 0x908C, + 24724 - 11905: 0xBBDA, + 24725 - 11905: 0x908D, + 24726 - 11905: 0xE3A3, + 24727 - 11905: 0x908E, + 24728 - 11905: 0x908F, + 24729 - 11905: 0x9090, + 24730 - 11905: 0xE3A4, + 24731 - 11905: 0xE3AA, + 24732 - 11905: 0x9091, + 24733 - 11905: 0xE3A6, + 24734 - 11905: 0x9092, + 24735 - 11905: 0xCEF2, + 24736 - 11905: 0xD3C6, + 24737 - 11905: 0x9093, + 24738 - 11905: 0x9094, + 24739 - 11905: 0xBBBC, + 24740 - 11905: 0x9095, + 24741 - 11905: 0x9096, + 24742 - 11905: 0xD4C3, + 24743 - 11905: 0x9097, + 24744 - 11905: 0xC4FA, + 24745 - 11905: 0x9098, + 24746 - 11905: 0x9099, + 24747 - 11905: 0xEDA8, + 24748 - 11905: 0xD0FC, + 24749 - 11905: 0xE3A5, + 24750 - 11905: 0x909A, + 24751 - 11905: 0xC3F5, + 24752 - 11905: 0x909B, + 24753 - 11905: 0xE3AD, + 24754 - 11905: 0xB1AF, + 24755 - 11905: 0x909C, + 24756 - 11905: 0xE3B2, + 24757 - 11905: 0x909D, + 24758 - 11905: 0x909E, + 24759 - 11905: 0x909F, + 24760 - 11905: 0xBCC2, + 24761 - 11905: 0x90A0, + 24762 - 11905: 0x90A1, + 24763 - 11905: 0xE3AC, + 24764 - 11905: 0xB5BF, + 24765 - 11905: 0x90A2, + 24766 - 11905: 0x90A3, + 24767 - 11905: 0x90A4, + 24768 - 11905: 0x90A5, + 24769 - 11905: 0x90A6, + 24770 - 11905: 0x90A7, + 24771 - 11905: 0x90A8, + 24772 - 11905: 0x90A9, + 24773 - 11905: 0xC7E9, + 24774 - 11905: 0xE3B0, + 24775 - 11905: 0x90AA, + 24776 - 11905: 0x90AB, + 24777 - 11905: 0x90AC, + 24778 - 11905: 0xBEAA, + 24779 - 11905: 0xCDEF, + 24780 - 11905: 0x90AD, + 24781 - 11905: 0x90AE, + 24782 - 11905: 0x90AF, + 24783 - 11905: 0x90B0, + 24784 - 11905: 0x90B1, + 24785 - 11905: 0xBBF3, + 24786 - 11905: 0x90B2, + 24787 - 11905: 0x90B3, + 24788 - 11905: 0x90B4, + 24789 - 11905: 0xCCE8, + 24790 - 11905: 0x90B5, + 24791 - 11905: 0x90B6, + 24792 - 11905: 0xE3AF, + 24793 - 11905: 0x90B7, + 24794 - 11905: 0xE3B1, + 24795 - 11905: 0x90B8, + 24796 - 11905: 0xCFA7, + 24797 - 11905: 0xE3AE, + 24798 - 11905: 0x90B9, + 24799 - 11905: 0xCEA9, + 24800 - 11905: 0xBBDD, + 24801 - 11905: 0x90BA, + 24802 - 11905: 0x90BB, + 24803 - 11905: 0x90BC, + 24804 - 11905: 0x90BD, + 24805 - 11905: 0x90BE, + 24806 - 11905: 0xB5EB, + 24807 - 11905: 0xBEE5, + 24808 - 11905: 0xB2D2, + 24809 - 11905: 0xB3CD, + 24810 - 11905: 0x90BF, + 24811 - 11905: 0xB1B9, + 24812 - 11905: 0xE3AB, + 24813 - 11905: 0xB2D1, + 24814 - 11905: 0xB5AC, + 24815 - 11905: 0xB9DF, + 24816 - 11905: 0xB6E8, + 24817 - 11905: 0x90C0, + 24818 - 11905: 0x90C1, + 24819 - 11905: 0xCFEB, + 24820 - 11905: 0xE3B7, + 24821 - 11905: 0x90C2, + 24822 - 11905: 0xBBCC, + 24823 - 11905: 0x90C3, + 24824 - 11905: 0x90C4, + 24825 - 11905: 0xC8C7, + 24826 - 11905: 0xD0CA, + 24827 - 11905: 0x90C5, + 24828 - 11905: 0x90C6, + 24829 - 11905: 0x90C7, + 24830 - 11905: 0x90C8, + 24831 - 11905: 0x90C9, + 24832 - 11905: 0xE3B8, + 24833 - 11905: 0xB3EE, + 24834 - 11905: 0x90CA, + 24835 - 11905: 0x90CB, + 24836 - 11905: 0x90CC, + 24837 - 11905: 0x90CD, + 24838 - 11905: 0xEDA9, + 24839 - 11905: 0x90CE, + 24840 - 11905: 0xD3FA, + 24841 - 11905: 0xD3E4, + 24842 - 11905: 0x90CF, + 24843 - 11905: 0x90D0, + 24844 - 11905: 0x90D1, + 24845 - 11905: 0xEDAA, + 24846 - 11905: 0xE3B9, + 24847 - 11905: 0xD2E2, + 24848 - 11905: 0x90D2, + 24849 - 11905: 0x90D3, + 24850 - 11905: 0x90D4, + 24851 - 11905: 0x90D5, + 24852 - 11905: 0x90D6, + 24853 - 11905: 0xE3B5, + 24854 - 11905: 0x90D7, + 24855 - 11905: 0x90D8, + 24856 - 11905: 0x90D9, + 24857 - 11905: 0x90DA, + 24858 - 11905: 0xD3DE, + 24859 - 11905: 0x90DB, + 24860 - 11905: 0x90DC, + 24861 - 11905: 0x90DD, + 24862 - 11905: 0x90DE, + 24863 - 11905: 0xB8D0, + 24864 - 11905: 0xE3B3, + 24865 - 11905: 0x90DF, + 24866 - 11905: 0x90E0, + 24867 - 11905: 0xE3B6, + 24868 - 11905: 0xB7DF, + 24869 - 11905: 0x90E1, + 24870 - 11905: 0xE3B4, + 24871 - 11905: 0xC0A2, + 24872 - 11905: 0x90E2, + 24873 - 11905: 0x90E3, + 24874 - 11905: 0x90E4, + 24875 - 11905: 0xE3BA, + 24876 - 11905: 0x90E5, + 24877 - 11905: 0x90E6, + 24878 - 11905: 0x90E7, + 24879 - 11905: 0x90E8, + 24880 - 11905: 0x90E9, + 24881 - 11905: 0x90EA, + 24882 - 11905: 0x90EB, + 24883 - 11905: 0x90EC, + 24884 - 11905: 0x90ED, + 24885 - 11905: 0x90EE, + 24886 - 11905: 0x90EF, + 24887 - 11905: 0x90F0, + 24888 - 11905: 0x90F1, + 24889 - 11905: 0x90F2, + 24890 - 11905: 0x90F3, + 24891 - 11905: 0x90F4, + 24892 - 11905: 0x90F5, + 24893 - 11905: 0x90F6, + 24894 - 11905: 0x90F7, + 24895 - 11905: 0xD4B8, + 24896 - 11905: 0x90F8, + 24897 - 11905: 0x90F9, + 24898 - 11905: 0x90FA, + 24899 - 11905: 0x90FB, + 24900 - 11905: 0x90FC, + 24901 - 11905: 0x90FD, + 24902 - 11905: 0x90FE, + 24903 - 11905: 0x9140, + 24904 - 11905: 0xB4C8, + 24905 - 11905: 0x9141, + 24906 - 11905: 0xE3BB, + 24907 - 11905: 0x9142, + 24908 - 11905: 0xBBC5, + 24909 - 11905: 0x9143, + 24910 - 11905: 0xC9F7, + 24911 - 11905: 0x9144, + 24912 - 11905: 0x9145, + 24913 - 11905: 0xC9E5, + 24914 - 11905: 0x9146, + 24915 - 11905: 0x9147, + 24916 - 11905: 0x9148, + 24917 - 11905: 0xC4BD, + 24918 - 11905: 0x9149, + 24919 - 11905: 0x914A, + 24920 - 11905: 0x914B, + 24921 - 11905: 0x914C, + 24922 - 11905: 0x914D, + 24923 - 11905: 0x914E, + 24924 - 11905: 0x914F, + 24925 - 11905: 0xEDAB, + 24926 - 11905: 0x9150, + 24927 - 11905: 0x9151, + 24928 - 11905: 0x9152, + 24929 - 11905: 0x9153, + 24930 - 11905: 0xC2FD, + 24931 - 11905: 0x9154, + 24932 - 11905: 0x9155, + 24933 - 11905: 0x9156, + 24934 - 11905: 0x9157, + 24935 - 11905: 0xBBDB, + 24936 - 11905: 0xBFAE, + 24937 - 11905: 0x9158, + 24938 - 11905: 0x9159, + 24939 - 11905: 0x915A, + 24940 - 11905: 0x915B, + 24941 - 11905: 0x915C, + 24942 - 11905: 0x915D, + 24943 - 11905: 0x915E, + 24944 - 11905: 0xCEBF, + 24945 - 11905: 0x915F, + 24946 - 11905: 0x9160, + 24947 - 11905: 0x9161, + 24948 - 11905: 0x9162, + 24949 - 11905: 0xE3BC, + 24950 - 11905: 0x9163, + 24951 - 11905: 0xBFB6, + 24952 - 11905: 0x9164, + 24953 - 11905: 0x9165, + 24954 - 11905: 0x9166, + 24955 - 11905: 0x9167, + 24956 - 11905: 0x9168, + 24957 - 11905: 0x9169, + 24958 - 11905: 0x916A, + 24959 - 11905: 0x916B, + 24960 - 11905: 0x916C, + 24961 - 11905: 0x916D, + 24962 - 11905: 0x916E, + 24963 - 11905: 0x916F, + 24964 - 11905: 0x9170, + 24965 - 11905: 0x9171, + 24966 - 11905: 0x9172, + 24967 - 11905: 0x9173, + 24968 - 11905: 0x9174, + 24969 - 11905: 0x9175, + 24970 - 11905: 0x9176, + 24971 - 11905: 0xB1EF, + 24972 - 11905: 0x9177, + 24973 - 11905: 0x9178, + 24974 - 11905: 0xD4F7, + 24975 - 11905: 0x9179, + 24976 - 11905: 0x917A, + 24977 - 11905: 0x917B, + 24978 - 11905: 0x917C, + 24979 - 11905: 0x917D, + 24980 - 11905: 0xE3BE, + 24981 - 11905: 0x917E, + 24982 - 11905: 0x9180, + 24983 - 11905: 0x9181, + 24984 - 11905: 0x9182, + 24985 - 11905: 0x9183, + 24986 - 11905: 0x9184, + 24987 - 11905: 0x9185, + 24988 - 11905: 0x9186, + 24989 - 11905: 0xEDAD, + 24990 - 11905: 0x9187, + 24991 - 11905: 0x9188, + 24992 - 11905: 0x9189, + 24993 - 11905: 0x918A, + 24994 - 11905: 0x918B, + 24995 - 11905: 0x918C, + 24996 - 11905: 0x918D, + 24997 - 11905: 0x918E, + 24998 - 11905: 0x918F, + 24999 - 11905: 0xE3BF, + 25000 - 11905: 0xBAA9, + 25001 - 11905: 0xEDAC, + 25002 - 11905: 0x9190, + 25003 - 11905: 0x9191, + 25004 - 11905: 0xE3BD, + 25005 - 11905: 0x9192, + 25006 - 11905: 0x9193, + 25007 - 11905: 0x9194, + 25008 - 11905: 0x9195, + 25009 - 11905: 0x9196, + 25010 - 11905: 0x9197, + 25011 - 11905: 0x9198, + 25012 - 11905: 0x9199, + 25013 - 11905: 0x919A, + 25014 - 11905: 0x919B, + 25015 - 11905: 0xE3C0, + 25016 - 11905: 0x919C, + 25017 - 11905: 0x919D, + 25018 - 11905: 0x919E, + 25019 - 11905: 0x919F, + 25020 - 11905: 0x91A0, + 25021 - 11905: 0x91A1, + 25022 - 11905: 0xBAB6, + 25023 - 11905: 0x91A2, + 25024 - 11905: 0x91A3, + 25025 - 11905: 0x91A4, + 25026 - 11905: 0xB6AE, + 25027 - 11905: 0x91A5, + 25028 - 11905: 0x91A6, + 25029 - 11905: 0x91A7, + 25030 - 11905: 0x91A8, + 25031 - 11905: 0x91A9, + 25032 - 11905: 0xD0B8, + 25033 - 11905: 0x91AA, + 25034 - 11905: 0xB0C3, + 25035 - 11905: 0xEDAE, + 25036 - 11905: 0x91AB, + 25037 - 11905: 0x91AC, + 25038 - 11905: 0x91AD, + 25039 - 11905: 0x91AE, + 25040 - 11905: 0x91AF, + 25041 - 11905: 0xEDAF, + 25042 - 11905: 0xC0C1, + 25043 - 11905: 0x91B0, + 25044 - 11905: 0xE3C1, + 25045 - 11905: 0x91B1, + 25046 - 11905: 0x91B2, + 25047 - 11905: 0x91B3, + 25048 - 11905: 0x91B4, + 25049 - 11905: 0x91B5, + 25050 - 11905: 0x91B6, + 25051 - 11905: 0x91B7, + 25052 - 11905: 0x91B8, + 25053 - 11905: 0x91B9, + 25054 - 11905: 0x91BA, + 25055 - 11905: 0x91BB, + 25056 - 11905: 0x91BC, + 25057 - 11905: 0x91BD, + 25058 - 11905: 0x91BE, + 25059 - 11905: 0x91BF, + 25060 - 11905: 0x91C0, + 25061 - 11905: 0x91C1, + 25062 - 11905: 0xC5B3, + 25063 - 11905: 0x91C2, + 25064 - 11905: 0x91C3, + 25065 - 11905: 0x91C4, + 25066 - 11905: 0x91C5, + 25067 - 11905: 0x91C6, + 25068 - 11905: 0x91C7, + 25069 - 11905: 0x91C8, + 25070 - 11905: 0x91C9, + 25071 - 11905: 0x91CA, + 25072 - 11905: 0x91CB, + 25073 - 11905: 0x91CC, + 25074 - 11905: 0x91CD, + 25075 - 11905: 0x91CE, + 25076 - 11905: 0x91CF, + 25077 - 11905: 0xE3C2, + 25078 - 11905: 0x91D0, + 25079 - 11905: 0x91D1, + 25080 - 11905: 0x91D2, + 25081 - 11905: 0x91D3, + 25082 - 11905: 0x91D4, + 25083 - 11905: 0x91D5, + 25084 - 11905: 0x91D6, + 25085 - 11905: 0x91D7, + 25086 - 11905: 0x91D8, + 25087 - 11905: 0xDCB2, + 25088 - 11905: 0x91D9, + 25089 - 11905: 0x91DA, + 25090 - 11905: 0x91DB, + 25091 - 11905: 0x91DC, + 25092 - 11905: 0x91DD, + 25093 - 11905: 0x91DE, + 25094 - 11905: 0xEDB0, + 25095 - 11905: 0x91DF, + 25096 - 11905: 0xB8EA, + 25097 - 11905: 0x91E0, + 25098 - 11905: 0xCEEC, + 25099 - 11905: 0xEAA7, + 25100 - 11905: 0xD0E7, + 25101 - 11905: 0xCAF9, + 25102 - 11905: 0xC8D6, + 25103 - 11905: 0xCFB7, + 25104 - 11905: 0xB3C9, + 25105 - 11905: 0xCED2, + 25106 - 11905: 0xBDE4, + 25107 - 11905: 0x91E1, + 25108 - 11905: 0x91E2, + 25109 - 11905: 0xE3DE, + 25110 - 11905: 0xBBF2, + 25111 - 11905: 0xEAA8, + 25112 - 11905: 0xD5BD, + 25113 - 11905: 0x91E3, + 25114 - 11905: 0xC6DD, + 25115 - 11905: 0xEAA9, + 25116 - 11905: 0x91E4, + 25117 - 11905: 0x91E5, + 25118 - 11905: 0x91E6, + 25119 - 11905: 0xEAAA, + 25120 - 11905: 0x91E7, + 25121 - 11905: 0xEAAC, + 25122 - 11905: 0xEAAB, + 25123 - 11905: 0x91E8, + 25124 - 11905: 0xEAAE, + 25125 - 11905: 0xEAAD, + 25126 - 11905: 0x91E9, + 25127 - 11905: 0x91EA, + 25128 - 11905: 0x91EB, + 25129 - 11905: 0x91EC, + 25130 - 11905: 0xBDD8, + 25131 - 11905: 0x91ED, + 25132 - 11905: 0xEAAF, + 25133 - 11905: 0x91EE, + 25134 - 11905: 0xC2BE, + 25135 - 11905: 0x91EF, + 25136 - 11905: 0x91F0, + 25137 - 11905: 0x91F1, + 25138 - 11905: 0x91F2, + 25139 - 11905: 0xB4C1, + 25140 - 11905: 0xB4F7, + 25141 - 11905: 0x91F3, + 25142 - 11905: 0x91F4, + 25143 - 11905: 0xBBA7, + 25144 - 11905: 0x91F5, + 25145 - 11905: 0x91F6, + 25146 - 11905: 0x91F7, + 25147 - 11905: 0x91F8, + 25148 - 11905: 0x91F9, + 25149 - 11905: 0xECE6, + 25150 - 11905: 0xECE5, + 25151 - 11905: 0xB7BF, + 25152 - 11905: 0xCBF9, + 25153 - 11905: 0xB1E2, + 25154 - 11905: 0x91FA, + 25155 - 11905: 0xECE7, + 25156 - 11905: 0x91FB, + 25157 - 11905: 0x91FC, + 25158 - 11905: 0x91FD, + 25159 - 11905: 0xC9C8, + 25160 - 11905: 0xECE8, + 25161 - 11905: 0xECE9, + 25162 - 11905: 0x91FE, + 25163 - 11905: 0xCAD6, + 25164 - 11905: 0xDED0, + 25165 - 11905: 0xB2C5, + 25166 - 11905: 0xD4FA, + 25167 - 11905: 0x9240, + 25168 - 11905: 0x9241, + 25169 - 11905: 0xC6CB, + 25170 - 11905: 0xB0C7, + 25171 - 11905: 0xB4F2, + 25172 - 11905: 0xC8D3, + 25173 - 11905: 0x9242, + 25174 - 11905: 0x9243, + 25175 - 11905: 0x9244, + 25176 - 11905: 0xCDD0, + 25177 - 11905: 0x9245, + 25178 - 11905: 0x9246, + 25179 - 11905: 0xBFB8, + 25180 - 11905: 0x9247, + 25181 - 11905: 0x9248, + 25182 - 11905: 0x9249, + 25183 - 11905: 0x924A, + 25184 - 11905: 0x924B, + 25185 - 11905: 0x924C, + 25186 - 11905: 0x924D, + 25187 - 11905: 0xBFDB, + 25188 - 11905: 0x924E, + 25189 - 11905: 0x924F, + 25190 - 11905: 0xC7A4, + 25191 - 11905: 0xD6B4, + 25192 - 11905: 0x9250, + 25193 - 11905: 0xC0A9, + 25194 - 11905: 0xDED1, + 25195 - 11905: 0xC9A8, + 25196 - 11905: 0xD1EF, + 25197 - 11905: 0xC5A4, + 25198 - 11905: 0xB0E7, + 25199 - 11905: 0xB3B6, + 25200 - 11905: 0xC8C5, + 25201 - 11905: 0x9251, + 25202 - 11905: 0x9252, + 25203 - 11905: 0xB0E2, + 25204 - 11905: 0x9253, + 25205 - 11905: 0x9254, + 25206 - 11905: 0xB7F6, + 25207 - 11905: 0x9255, + 25208 - 11905: 0x9256, + 25209 - 11905: 0xC5FA, + 25210 - 11905: 0x9257, + 25211 - 11905: 0x9258, + 25212 - 11905: 0xB6F3, + 25213 - 11905: 0x9259, + 25214 - 11905: 0xD5D2, + 25215 - 11905: 0xB3D0, + 25216 - 11905: 0xBCBC, + 25217 - 11905: 0x925A, + 25218 - 11905: 0x925B, + 25219 - 11905: 0x925C, + 25220 - 11905: 0xB3AD, + 25221 - 11905: 0x925D, + 25222 - 11905: 0x925E, + 25223 - 11905: 0x925F, + 25224 - 11905: 0x9260, + 25225 - 11905: 0xBEF1, + 25226 - 11905: 0xB0D1, + 25227 - 11905: 0x9261, + 25228 - 11905: 0x9262, + 25229 - 11905: 0x9263, + 25230 - 11905: 0x9264, + 25231 - 11905: 0x9265, + 25232 - 11905: 0x9266, + 25233 - 11905: 0xD2D6, + 25234 - 11905: 0xCAE3, + 25235 - 11905: 0xD7A5, + 25236 - 11905: 0x9267, + 25237 - 11905: 0xCDB6, + 25238 - 11905: 0xB6B6, + 25239 - 11905: 0xBFB9, + 25240 - 11905: 0xD5DB, + 25241 - 11905: 0x9268, + 25242 - 11905: 0xB8A7, + 25243 - 11905: 0xC5D7, + 25244 - 11905: 0x9269, + 25245 - 11905: 0x926A, + 25246 - 11905: 0x926B, + 25247 - 11905: 0xDED2, + 25248 - 11905: 0xBFD9, + 25249 - 11905: 0xC2D5, + 25250 - 11905: 0xC7C0, + 25251 - 11905: 0x926C, + 25252 - 11905: 0xBBA4, + 25253 - 11905: 0xB1A8, + 25254 - 11905: 0x926D, + 25255 - 11905: 0x926E, + 25256 - 11905: 0xC5EA, + 25257 - 11905: 0x926F, + 25258 - 11905: 0x9270, + 25259 - 11905: 0xC5FB, + 25260 - 11905: 0xCCA7, + 25261 - 11905: 0x9271, + 25262 - 11905: 0x9272, + 25263 - 11905: 0x9273, + 25264 - 11905: 0x9274, + 25265 - 11905: 0xB1A7, + 25266 - 11905: 0x9275, + 25267 - 11905: 0x9276, + 25268 - 11905: 0x9277, + 25269 - 11905: 0xB5D6, + 25270 - 11905: 0x9278, + 25271 - 11905: 0x9279, + 25272 - 11905: 0x927A, + 25273 - 11905: 0xC4A8, + 25274 - 11905: 0x927B, + 25275 - 11905: 0xDED3, + 25276 - 11905: 0xD1BA, + 25277 - 11905: 0xB3E9, + 25278 - 11905: 0x927C, + 25279 - 11905: 0xC3F2, + 25280 - 11905: 0x927D, + 25281 - 11905: 0x927E, + 25282 - 11905: 0xB7F7, + 25283 - 11905: 0x9280, + 25284 - 11905: 0xD6F4, + 25285 - 11905: 0xB5A3, + 25286 - 11905: 0xB2F0, + 25287 - 11905: 0xC4B4, + 25288 - 11905: 0xC4E9, + 25289 - 11905: 0xC0AD, + 25290 - 11905: 0xDED4, + 25291 - 11905: 0x9281, + 25292 - 11905: 0xB0E8, + 25293 - 11905: 0xC5C4, + 25294 - 11905: 0xC1E0, + 25295 - 11905: 0x9282, + 25296 - 11905: 0xB9D5, + 25297 - 11905: 0x9283, + 25298 - 11905: 0xBEDC, + 25299 - 11905: 0xCDD8, + 25300 - 11905: 0xB0CE, + 25301 - 11905: 0x9284, + 25302 - 11905: 0xCDCF, + 25303 - 11905: 0xDED6, + 25304 - 11905: 0xBED0, + 25305 - 11905: 0xD7BE, + 25306 - 11905: 0xDED5, + 25307 - 11905: 0xD5D0, + 25308 - 11905: 0xB0DD, + 25309 - 11905: 0x9285, + 25310 - 11905: 0x9286, + 25311 - 11905: 0xC4E2, + 25312 - 11905: 0x9287, + 25313 - 11905: 0x9288, + 25314 - 11905: 0xC2A3, + 25315 - 11905: 0xBCF0, + 25316 - 11905: 0x9289, + 25317 - 11905: 0xD3B5, + 25318 - 11905: 0xC0B9, + 25319 - 11905: 0xC5A1, + 25320 - 11905: 0xB2A6, + 25321 - 11905: 0xD4F1, + 25322 - 11905: 0x928A, + 25323 - 11905: 0x928B, + 25324 - 11905: 0xC0A8, + 25325 - 11905: 0xCAC3, + 25326 - 11905: 0xDED7, + 25327 - 11905: 0xD5FC, + 25328 - 11905: 0x928C, + 25329 - 11905: 0xB9B0, + 25330 - 11905: 0x928D, + 25331 - 11905: 0xC8AD, + 25332 - 11905: 0xCBA9, + 25333 - 11905: 0x928E, + 25334 - 11905: 0xDED9, + 25335 - 11905: 0xBFBD, + 25336 - 11905: 0x928F, + 25337 - 11905: 0x9290, + 25338 - 11905: 0x9291, + 25339 - 11905: 0x9292, + 25340 - 11905: 0xC6B4, + 25341 - 11905: 0xD7A7, + 25342 - 11905: 0xCAB0, + 25343 - 11905: 0xC4C3, + 25344 - 11905: 0x9293, + 25345 - 11905: 0xB3D6, + 25346 - 11905: 0xB9D2, + 25347 - 11905: 0x9294, + 25348 - 11905: 0x9295, + 25349 - 11905: 0x9296, + 25350 - 11905: 0x9297, + 25351 - 11905: 0xD6B8, + 25352 - 11905: 0xEAFC, + 25353 - 11905: 0xB0B4, + 25354 - 11905: 0x9298, + 25355 - 11905: 0x9299, + 25356 - 11905: 0x929A, + 25357 - 11905: 0x929B, + 25358 - 11905: 0xBFE6, + 25359 - 11905: 0x929C, + 25360 - 11905: 0x929D, + 25361 - 11905: 0xCCF4, + 25362 - 11905: 0x929E, + 25363 - 11905: 0x929F, + 25364 - 11905: 0x92A0, + 25365 - 11905: 0x92A1, + 25366 - 11905: 0xCDDA, + 25367 - 11905: 0x92A2, + 25368 - 11905: 0x92A3, + 25369 - 11905: 0x92A4, + 25370 - 11905: 0xD6BF, + 25371 - 11905: 0xC2CE, + 25372 - 11905: 0x92A5, + 25373 - 11905: 0xCECE, + 25374 - 11905: 0xCCA2, + 25375 - 11905: 0xD0AE, + 25376 - 11905: 0xC4D3, + 25377 - 11905: 0xB5B2, + 25378 - 11905: 0xDED8, + 25379 - 11905: 0xD5F5, + 25380 - 11905: 0xBCB7, + 25381 - 11905: 0xBBD3, + 25382 - 11905: 0x92A6, + 25383 - 11905: 0x92A7, + 25384 - 11905: 0xB0A4, + 25385 - 11905: 0x92A8, + 25386 - 11905: 0xC5B2, + 25387 - 11905: 0xB4EC, + 25388 - 11905: 0x92A9, + 25389 - 11905: 0x92AA, + 25390 - 11905: 0x92AB, + 25391 - 11905: 0xD5F1, + 25392 - 11905: 0x92AC, + 25393 - 11905: 0x92AD, + 25394 - 11905: 0xEAFD, + 25395 - 11905: 0x92AE, + 25396 - 11905: 0x92AF, + 25397 - 11905: 0x92B0, + 25398 - 11905: 0x92B1, + 25399 - 11905: 0x92B2, + 25400 - 11905: 0x92B3, + 25401 - 11905: 0xDEDA, + 25402 - 11905: 0xCDA6, + 25403 - 11905: 0x92B4, + 25404 - 11905: 0x92B5, + 25405 - 11905: 0xCDEC, + 25406 - 11905: 0x92B6, + 25407 - 11905: 0x92B7, + 25408 - 11905: 0x92B8, + 25409 - 11905: 0x92B9, + 25410 - 11905: 0xCEE6, + 25411 - 11905: 0xDEDC, + 25412 - 11905: 0x92BA, + 25413 - 11905: 0xCDB1, + 25414 - 11905: 0xC0A6, + 25415 - 11905: 0x92BB, + 25416 - 11905: 0x92BC, + 25417 - 11905: 0xD7BD, + 25418 - 11905: 0x92BD, + 25419 - 11905: 0xDEDB, + 25420 - 11905: 0xB0C6, + 25421 - 11905: 0xBAB4, + 25422 - 11905: 0xC9D3, + 25423 - 11905: 0xC4F3, + 25424 - 11905: 0xBEE8, + 25425 - 11905: 0x92BE, + 25426 - 11905: 0x92BF, + 25427 - 11905: 0x92C0, + 25428 - 11905: 0x92C1, + 25429 - 11905: 0xB2B6, + 25430 - 11905: 0x92C2, + 25431 - 11905: 0x92C3, + 25432 - 11905: 0x92C4, + 25433 - 11905: 0x92C5, + 25434 - 11905: 0x92C6, + 25435 - 11905: 0x92C7, + 25436 - 11905: 0x92C8, + 25437 - 11905: 0x92C9, + 25438 - 11905: 0xC0CC, + 25439 - 11905: 0xCBF0, + 25440 - 11905: 0x92CA, + 25441 - 11905: 0xBCF1, + 25442 - 11905: 0xBBBB, + 25443 - 11905: 0xB5B7, + 25444 - 11905: 0x92CB, + 25445 - 11905: 0x92CC, + 25446 - 11905: 0x92CD, + 25447 - 11905: 0xC5F5, + 25448 - 11905: 0x92CE, + 25449 - 11905: 0xDEE6, + 25450 - 11905: 0x92CF, + 25451 - 11905: 0x92D0, + 25452 - 11905: 0x92D1, + 25453 - 11905: 0xDEE3, + 25454 - 11905: 0xBEDD, + 25455 - 11905: 0x92D2, + 25456 - 11905: 0x92D3, + 25457 - 11905: 0xDEDF, + 25458 - 11905: 0x92D4, + 25459 - 11905: 0x92D5, + 25460 - 11905: 0x92D6, + 25461 - 11905: 0x92D7, + 25462 - 11905: 0xB4B7, + 25463 - 11905: 0xBDDD, + 25464 - 11905: 0x92D8, + 25465 - 11905: 0x92D9, + 25466 - 11905: 0xDEE0, + 25467 - 11905: 0xC4ED, + 25468 - 11905: 0x92DA, + 25469 - 11905: 0x92DB, + 25470 - 11905: 0x92DC, + 25471 - 11905: 0x92DD, + 25472 - 11905: 0xCFC6, + 25473 - 11905: 0x92DE, + 25474 - 11905: 0xB5E0, + 25475 - 11905: 0x92DF, + 25476 - 11905: 0x92E0, + 25477 - 11905: 0x92E1, + 25478 - 11905: 0x92E2, + 25479 - 11905: 0xB6DE, + 25480 - 11905: 0xCADA, + 25481 - 11905: 0xB5F4, + 25482 - 11905: 0xDEE5, + 25483 - 11905: 0x92E3, + 25484 - 11905: 0xD5C6, + 25485 - 11905: 0x92E4, + 25486 - 11905: 0xDEE1, + 25487 - 11905: 0xCCCD, + 25488 - 11905: 0xC6FE, + 25489 - 11905: 0x92E5, + 25490 - 11905: 0xC5C5, + 25491 - 11905: 0x92E6, + 25492 - 11905: 0x92E7, + 25493 - 11905: 0x92E8, + 25494 - 11905: 0xD2B4, + 25495 - 11905: 0x92E9, + 25496 - 11905: 0xBEF2, + 25497 - 11905: 0x92EA, + 25498 - 11905: 0x92EB, + 25499 - 11905: 0x92EC, + 25500 - 11905: 0x92ED, + 25501 - 11905: 0x92EE, + 25502 - 11905: 0x92EF, + 25503 - 11905: 0x92F0, + 25504 - 11905: 0xC2D3, + 25505 - 11905: 0x92F1, + 25506 - 11905: 0xCCBD, + 25507 - 11905: 0xB3B8, + 25508 - 11905: 0x92F2, + 25509 - 11905: 0xBDD3, + 25510 - 11905: 0x92F3, + 25511 - 11905: 0xBFD8, + 25512 - 11905: 0xCDC6, + 25513 - 11905: 0xD1DA, + 25514 - 11905: 0xB4EB, + 25515 - 11905: 0x92F4, + 25516 - 11905: 0xDEE4, + 25517 - 11905: 0xDEDD, + 25518 - 11905: 0xDEE7, + 25519 - 11905: 0x92F5, + 25520 - 11905: 0xEAFE, + 25521 - 11905: 0x92F6, + 25522 - 11905: 0x92F7, + 25523 - 11905: 0xC2B0, + 25524 - 11905: 0xDEE2, + 25525 - 11905: 0x92F8, + 25526 - 11905: 0x92F9, + 25527 - 11905: 0xD6C0, + 25528 - 11905: 0xB5A7, + 25529 - 11905: 0x92FA, + 25530 - 11905: 0xB2F4, + 25531 - 11905: 0x92FB, + 25532 - 11905: 0xDEE8, + 25533 - 11905: 0x92FC, + 25534 - 11905: 0xDEF2, + 25535 - 11905: 0x92FD, + 25536 - 11905: 0x92FE, + 25537 - 11905: 0x9340, + 25538 - 11905: 0x9341, + 25539 - 11905: 0x9342, + 25540 - 11905: 0xDEED, + 25541 - 11905: 0x9343, + 25542 - 11905: 0xDEF1, + 25543 - 11905: 0x9344, + 25544 - 11905: 0x9345, + 25545 - 11905: 0xC8E0, + 25546 - 11905: 0x9346, + 25547 - 11905: 0x9347, + 25548 - 11905: 0x9348, + 25549 - 11905: 0xD7E1, + 25550 - 11905: 0xDEEF, + 25551 - 11905: 0xC3E8, + 25552 - 11905: 0xCCE1, + 25553 - 11905: 0x9349, + 25554 - 11905: 0xB2E5, + 25555 - 11905: 0x934A, + 25556 - 11905: 0x934B, + 25557 - 11905: 0x934C, + 25558 - 11905: 0xD2BE, + 25559 - 11905: 0x934D, + 25560 - 11905: 0x934E, + 25561 - 11905: 0x934F, + 25562 - 11905: 0x9350, + 25563 - 11905: 0x9351, + 25564 - 11905: 0x9352, + 25565 - 11905: 0x9353, + 25566 - 11905: 0xDEEE, + 25567 - 11905: 0x9354, + 25568 - 11905: 0xDEEB, + 25569 - 11905: 0xCED5, + 25570 - 11905: 0x9355, + 25571 - 11905: 0xB4A7, + 25572 - 11905: 0x9356, + 25573 - 11905: 0x9357, + 25574 - 11905: 0x9358, + 25575 - 11905: 0x9359, + 25576 - 11905: 0x935A, + 25577 - 11905: 0xBFAB, + 25578 - 11905: 0xBEBE, + 25579 - 11905: 0x935B, + 25580 - 11905: 0x935C, + 25581 - 11905: 0xBDD2, + 25582 - 11905: 0x935D, + 25583 - 11905: 0x935E, + 25584 - 11905: 0x935F, + 25585 - 11905: 0x9360, + 25586 - 11905: 0xDEE9, + 25587 - 11905: 0x9361, + 25588 - 11905: 0xD4AE, + 25589 - 11905: 0x9362, + 25590 - 11905: 0xDEDE, + 25591 - 11905: 0x9363, + 25592 - 11905: 0xDEEA, + 25593 - 11905: 0x9364, + 25594 - 11905: 0x9365, + 25595 - 11905: 0x9366, + 25596 - 11905: 0x9367, + 25597 - 11905: 0xC0BF, + 25598 - 11905: 0x9368, + 25599 - 11905: 0xDEEC, + 25600 - 11905: 0xB2F3, + 25601 - 11905: 0xB8E9, + 25602 - 11905: 0xC2A7, + 25603 - 11905: 0x9369, + 25604 - 11905: 0x936A, + 25605 - 11905: 0xBDC1, + 25606 - 11905: 0x936B, + 25607 - 11905: 0x936C, + 25608 - 11905: 0x936D, + 25609 - 11905: 0x936E, + 25610 - 11905: 0x936F, + 25611 - 11905: 0xDEF5, + 25612 - 11905: 0xDEF8, + 25613 - 11905: 0x9370, + 25614 - 11905: 0x9371, + 25615 - 11905: 0xB2AB, + 25616 - 11905: 0xB4A4, + 25617 - 11905: 0x9372, + 25618 - 11905: 0x9373, + 25619 - 11905: 0xB4EA, + 25620 - 11905: 0xC9A6, + 25621 - 11905: 0x9374, + 25622 - 11905: 0x9375, + 25623 - 11905: 0x9376, + 25624 - 11905: 0x9377, + 25625 - 11905: 0x9378, + 25626 - 11905: 0x9379, + 25627 - 11905: 0xDEF6, + 25628 - 11905: 0xCBD1, + 25629 - 11905: 0x937A, + 25630 - 11905: 0xB8E3, + 25631 - 11905: 0x937B, + 25632 - 11905: 0xDEF7, + 25633 - 11905: 0xDEFA, + 25634 - 11905: 0x937C, + 25635 - 11905: 0x937D, + 25636 - 11905: 0x937E, + 25637 - 11905: 0x9380, + 25638 - 11905: 0xDEF9, + 25639 - 11905: 0x9381, + 25640 - 11905: 0x9382, + 25641 - 11905: 0x9383, + 25642 - 11905: 0xCCC2, + 25643 - 11905: 0x9384, + 25644 - 11905: 0xB0E1, + 25645 - 11905: 0xB4EE, + 25646 - 11905: 0x9385, + 25647 - 11905: 0x9386, + 25648 - 11905: 0x9387, + 25649 - 11905: 0x9388, + 25650 - 11905: 0x9389, + 25651 - 11905: 0x938A, + 25652 - 11905: 0xE5BA, + 25653 - 11905: 0x938B, + 25654 - 11905: 0x938C, + 25655 - 11905: 0x938D, + 25656 - 11905: 0x938E, + 25657 - 11905: 0x938F, + 25658 - 11905: 0xD0AF, + 25659 - 11905: 0x9390, + 25660 - 11905: 0x9391, + 25661 - 11905: 0xB2EB, + 25662 - 11905: 0x9392, + 25663 - 11905: 0xEBA1, + 25664 - 11905: 0x9393, + 25665 - 11905: 0xDEF4, + 25666 - 11905: 0x9394, + 25667 - 11905: 0x9395, + 25668 - 11905: 0xC9E3, + 25669 - 11905: 0xDEF3, + 25670 - 11905: 0xB0DA, + 25671 - 11905: 0xD2A1, + 25672 - 11905: 0xB1F7, + 25673 - 11905: 0x9396, + 25674 - 11905: 0xCCAF, + 25675 - 11905: 0x9397, + 25676 - 11905: 0x9398, + 25677 - 11905: 0x9399, + 25678 - 11905: 0x939A, + 25679 - 11905: 0x939B, + 25680 - 11905: 0x939C, + 25681 - 11905: 0x939D, + 25682 - 11905: 0xDEF0, + 25683 - 11905: 0x939E, + 25684 - 11905: 0xCBA4, + 25685 - 11905: 0x939F, + 25686 - 11905: 0x93A0, + 25687 - 11905: 0x93A1, + 25688 - 11905: 0xD5AA, + 25689 - 11905: 0x93A2, + 25690 - 11905: 0x93A3, + 25691 - 11905: 0x93A4, + 25692 - 11905: 0x93A5, + 25693 - 11905: 0x93A6, + 25694 - 11905: 0xDEFB, + 25695 - 11905: 0x93A7, + 25696 - 11905: 0x93A8, + 25697 - 11905: 0x93A9, + 25698 - 11905: 0x93AA, + 25699 - 11905: 0x93AB, + 25700 - 11905: 0x93AC, + 25701 - 11905: 0x93AD, + 25702 - 11905: 0x93AE, + 25703 - 11905: 0xB4DD, + 25704 - 11905: 0x93AF, + 25705 - 11905: 0xC4A6, + 25706 - 11905: 0x93B0, + 25707 - 11905: 0x93B1, + 25708 - 11905: 0x93B2, + 25709 - 11905: 0xDEFD, + 25710 - 11905: 0x93B3, + 25711 - 11905: 0x93B4, + 25712 - 11905: 0x93B5, + 25713 - 11905: 0x93B6, + 25714 - 11905: 0x93B7, + 25715 - 11905: 0x93B8, + 25716 - 11905: 0x93B9, + 25717 - 11905: 0x93BA, + 25718 - 11905: 0x93BB, + 25719 - 11905: 0x93BC, + 25720 - 11905: 0xC3FE, + 25721 - 11905: 0xC4A1, + 25722 - 11905: 0xDFA1, + 25723 - 11905: 0x93BD, + 25724 - 11905: 0x93BE, + 25725 - 11905: 0x93BF, + 25726 - 11905: 0x93C0, + 25727 - 11905: 0x93C1, + 25728 - 11905: 0x93C2, + 25729 - 11905: 0x93C3, + 25730 - 11905: 0xC1CC, + 25731 - 11905: 0x93C4, + 25732 - 11905: 0xDEFC, + 25733 - 11905: 0xBEEF, + 25734 - 11905: 0x93C5, + 25735 - 11905: 0xC6B2, + 25736 - 11905: 0x93C6, + 25737 - 11905: 0x93C7, + 25738 - 11905: 0x93C8, + 25739 - 11905: 0x93C9, + 25740 - 11905: 0x93CA, + 25741 - 11905: 0x93CB, + 25742 - 11905: 0x93CC, + 25743 - 11905: 0x93CD, + 25744 - 11905: 0x93CE, + 25745 - 11905: 0xB3C5, + 25746 - 11905: 0xC8F6, + 25747 - 11905: 0x93CF, + 25748 - 11905: 0x93D0, + 25749 - 11905: 0xCBBA, + 25750 - 11905: 0xDEFE, + 25751 - 11905: 0x93D1, + 25752 - 11905: 0x93D2, + 25753 - 11905: 0xDFA4, + 25754 - 11905: 0x93D3, + 25755 - 11905: 0x93D4, + 25756 - 11905: 0x93D5, + 25757 - 11905: 0x93D6, + 25758 - 11905: 0xD7B2, + 25759 - 11905: 0x93D7, + 25760 - 11905: 0x93D8, + 25761 - 11905: 0x93D9, + 25762 - 11905: 0x93DA, + 25763 - 11905: 0x93DB, + 25764 - 11905: 0xB3B7, + 25765 - 11905: 0x93DC, + 25766 - 11905: 0x93DD, + 25767 - 11905: 0x93DE, + 25768 - 11905: 0x93DF, + 25769 - 11905: 0xC1C3, + 25770 - 11905: 0x93E0, + 25771 - 11905: 0x93E1, + 25772 - 11905: 0xC7CB, + 25773 - 11905: 0xB2A5, + 25774 - 11905: 0xB4E9, + 25775 - 11905: 0x93E2, + 25776 - 11905: 0xD7AB, + 25777 - 11905: 0x93E3, + 25778 - 11905: 0x93E4, + 25779 - 11905: 0x93E5, + 25780 - 11905: 0x93E6, + 25781 - 11905: 0xC4EC, + 25782 - 11905: 0x93E7, + 25783 - 11905: 0xDFA2, + 25784 - 11905: 0xDFA3, + 25785 - 11905: 0x93E8, + 25786 - 11905: 0xDFA5, + 25787 - 11905: 0x93E9, + 25788 - 11905: 0xBAB3, + 25789 - 11905: 0x93EA, + 25790 - 11905: 0x93EB, + 25791 - 11905: 0x93EC, + 25792 - 11905: 0xDFA6, + 25793 - 11905: 0x93ED, + 25794 - 11905: 0xC0DE, + 25795 - 11905: 0x93EE, + 25796 - 11905: 0x93EF, + 25797 - 11905: 0xC9C3, + 25798 - 11905: 0x93F0, + 25799 - 11905: 0x93F1, + 25800 - 11905: 0x93F2, + 25801 - 11905: 0x93F3, + 25802 - 11905: 0x93F4, + 25803 - 11905: 0x93F5, + 25804 - 11905: 0x93F6, + 25805 - 11905: 0xB2D9, + 25806 - 11905: 0xC7E6, + 25807 - 11905: 0x93F7, + 25808 - 11905: 0xDFA7, + 25809 - 11905: 0x93F8, + 25810 - 11905: 0xC7DC, + 25811 - 11905: 0x93F9, + 25812 - 11905: 0x93FA, + 25813 - 11905: 0x93FB, + 25814 - 11905: 0x93FC, + 25815 - 11905: 0xDFA8, + 25816 - 11905: 0xEBA2, + 25817 - 11905: 0x93FD, + 25818 - 11905: 0x93FE, + 25819 - 11905: 0x9440, + 25820 - 11905: 0x9441, + 25821 - 11905: 0x9442, + 25822 - 11905: 0xCBD3, + 25823 - 11905: 0x9443, + 25824 - 11905: 0x9444, + 25825 - 11905: 0x9445, + 25826 - 11905: 0xDFAA, + 25827 - 11905: 0x9446, + 25828 - 11905: 0xDFA9, + 25829 - 11905: 0x9447, + 25830 - 11905: 0xB2C1, + 25831 - 11905: 0x9448, + 25832 - 11905: 0x9449, + 25833 - 11905: 0x944A, + 25834 - 11905: 0x944B, + 25835 - 11905: 0x944C, + 25836 - 11905: 0x944D, + 25837 - 11905: 0x944E, + 25838 - 11905: 0x944F, + 25839 - 11905: 0x9450, + 25840 - 11905: 0x9451, + 25841 - 11905: 0x9452, + 25842 - 11905: 0x9453, + 25843 - 11905: 0x9454, + 25844 - 11905: 0x9455, + 25845 - 11905: 0x9456, + 25846 - 11905: 0x9457, + 25847 - 11905: 0x9458, + 25848 - 11905: 0x9459, + 25849 - 11905: 0x945A, + 25850 - 11905: 0x945B, + 25851 - 11905: 0x945C, + 25852 - 11905: 0x945D, + 25853 - 11905: 0x945E, + 25854 - 11905: 0x945F, + 25855 - 11905: 0x9460, + 25856 - 11905: 0xC5CA, + 25857 - 11905: 0x9461, + 25858 - 11905: 0x9462, + 25859 - 11905: 0x9463, + 25860 - 11905: 0x9464, + 25861 - 11905: 0x9465, + 25862 - 11905: 0x9466, + 25863 - 11905: 0x9467, + 25864 - 11905: 0x9468, + 25865 - 11905: 0xDFAB, + 25866 - 11905: 0x9469, + 25867 - 11905: 0x946A, + 25868 - 11905: 0x946B, + 25869 - 11905: 0x946C, + 25870 - 11905: 0x946D, + 25871 - 11905: 0x946E, + 25872 - 11905: 0x946F, + 25873 - 11905: 0x9470, + 25874 - 11905: 0xD4DC, + 25875 - 11905: 0x9471, + 25876 - 11905: 0x9472, + 25877 - 11905: 0x9473, + 25878 - 11905: 0x9474, + 25879 - 11905: 0x9475, + 25880 - 11905: 0xC8C1, + 25881 - 11905: 0x9476, + 25882 - 11905: 0x9477, + 25883 - 11905: 0x9478, + 25884 - 11905: 0x9479, + 25885 - 11905: 0x947A, + 25886 - 11905: 0x947B, + 25887 - 11905: 0x947C, + 25888 - 11905: 0x947D, + 25889 - 11905: 0x947E, + 25890 - 11905: 0x9480, + 25891 - 11905: 0x9481, + 25892 - 11905: 0x9482, + 25893 - 11905: 0xDFAC, + 25894 - 11905: 0x9483, + 25895 - 11905: 0x9484, + 25896 - 11905: 0x9485, + 25897 - 11905: 0x9486, + 25898 - 11905: 0x9487, + 25899 - 11905: 0xBEF0, + 25900 - 11905: 0x9488, + 25901 - 11905: 0x9489, + 25902 - 11905: 0xDFAD, + 25903 - 11905: 0xD6A7, + 25904 - 11905: 0x948A, + 25905 - 11905: 0x948B, + 25906 - 11905: 0x948C, + 25907 - 11905: 0x948D, + 25908 - 11905: 0xEAB7, + 25909 - 11905: 0xEBB6, + 25910 - 11905: 0xCAD5, + 25911 - 11905: 0x948E, + 25912 - 11905: 0xD8FC, + 25913 - 11905: 0xB8C4, + 25914 - 11905: 0x948F, + 25915 - 11905: 0xB9A5, + 25916 - 11905: 0x9490, + 25917 - 11905: 0x9491, + 25918 - 11905: 0xB7C5, + 25919 - 11905: 0xD5FE, + 25920 - 11905: 0x9492, + 25921 - 11905: 0x9493, + 25922 - 11905: 0x9494, + 25923 - 11905: 0x9495, + 25924 - 11905: 0x9496, + 25925 - 11905: 0xB9CA, + 25926 - 11905: 0x9497, + 25927 - 11905: 0x9498, + 25928 - 11905: 0xD0A7, + 25929 - 11905: 0xF4CD, + 25930 - 11905: 0x9499, + 25931 - 11905: 0x949A, + 25932 - 11905: 0xB5D0, + 25933 - 11905: 0x949B, + 25934 - 11905: 0x949C, + 25935 - 11905: 0xC3F4, + 25936 - 11905: 0x949D, + 25937 - 11905: 0xBEC8, + 25938 - 11905: 0x949E, + 25939 - 11905: 0x949F, + 25940 - 11905: 0x94A0, + 25941 - 11905: 0xEBB7, + 25942 - 11905: 0xB0BD, + 25943 - 11905: 0x94A1, + 25944 - 11905: 0x94A2, + 25945 - 11905: 0xBDCC, + 25946 - 11905: 0x94A3, + 25947 - 11905: 0xC1B2, + 25948 - 11905: 0x94A4, + 25949 - 11905: 0xB1D6, + 25950 - 11905: 0xB3A8, + 25951 - 11905: 0x94A5, + 25952 - 11905: 0x94A6, + 25953 - 11905: 0x94A7, + 25954 - 11905: 0xB8D2, + 25955 - 11905: 0xC9A2, + 25956 - 11905: 0x94A8, + 25957 - 11905: 0x94A9, + 25958 - 11905: 0xB6D8, + 25959 - 11905: 0x94AA, + 25960 - 11905: 0x94AB, + 25961 - 11905: 0x94AC, + 25962 - 11905: 0x94AD, + 25963 - 11905: 0xEBB8, + 25964 - 11905: 0xBEB4, + 25965 - 11905: 0x94AE, + 25966 - 11905: 0x94AF, + 25967 - 11905: 0x94B0, + 25968 - 11905: 0xCAFD, + 25969 - 11905: 0x94B1, + 25970 - 11905: 0xC7C3, + 25971 - 11905: 0x94B2, + 25972 - 11905: 0xD5FB, + 25973 - 11905: 0x94B3, + 25974 - 11905: 0x94B4, + 25975 - 11905: 0xB7F3, + 25976 - 11905: 0x94B5, + 25977 - 11905: 0x94B6, + 25978 - 11905: 0x94B7, + 25979 - 11905: 0x94B8, + 25980 - 11905: 0x94B9, + 25981 - 11905: 0x94BA, + 25982 - 11905: 0x94BB, + 25983 - 11905: 0x94BC, + 25984 - 11905: 0x94BD, + 25985 - 11905: 0x94BE, + 25986 - 11905: 0x94BF, + 25987 - 11905: 0x94C0, + 25988 - 11905: 0x94C1, + 25989 - 11905: 0x94C2, + 25990 - 11905: 0x94C3, + 25991 - 11905: 0xCEC4, + 25992 - 11905: 0x94C4, + 25993 - 11905: 0x94C5, + 25994 - 11905: 0x94C6, + 25995 - 11905: 0xD5AB, + 25996 - 11905: 0xB1F3, + 25997 - 11905: 0x94C7, + 25998 - 11905: 0x94C8, + 25999 - 11905: 0x94C9, + 26000 - 11905: 0xECB3, + 26001 - 11905: 0xB0DF, + 26002 - 11905: 0x94CA, + 26003 - 11905: 0xECB5, + 26004 - 11905: 0x94CB, + 26005 - 11905: 0x94CC, + 26006 - 11905: 0x94CD, + 26007 - 11905: 0xB6B7, + 26008 - 11905: 0x94CE, + 26009 - 11905: 0xC1CF, + 26010 - 11905: 0x94CF, + 26011 - 11905: 0xF5FA, + 26012 - 11905: 0xD0B1, + 26013 - 11905: 0x94D0, + 26014 - 11905: 0x94D1, + 26015 - 11905: 0xD5E5, + 26016 - 11905: 0x94D2, + 26017 - 11905: 0xCED3, + 26018 - 11905: 0x94D3, + 26019 - 11905: 0x94D4, + 26020 - 11905: 0xBDEF, + 26021 - 11905: 0xB3E2, + 26022 - 11905: 0x94D5, + 26023 - 11905: 0xB8AB, + 26024 - 11905: 0x94D6, + 26025 - 11905: 0xD5B6, + 26026 - 11905: 0x94D7, + 26027 - 11905: 0xEDBD, + 26028 - 11905: 0x94D8, + 26029 - 11905: 0xB6CF, + 26030 - 11905: 0x94D9, + 26031 - 11905: 0xCBB9, + 26032 - 11905: 0xD0C2, + 26033 - 11905: 0x94DA, + 26034 - 11905: 0x94DB, + 26035 - 11905: 0x94DC, + 26036 - 11905: 0x94DD, + 26037 - 11905: 0x94DE, + 26038 - 11905: 0x94DF, + 26039 - 11905: 0x94E0, + 26040 - 11905: 0x94E1, + 26041 - 11905: 0xB7BD, + 26042 - 11905: 0x94E2, + 26043 - 11905: 0x94E3, + 26044 - 11905: 0xECB6, + 26045 - 11905: 0xCAA9, + 26046 - 11905: 0x94E4, + 26047 - 11905: 0x94E5, + 26048 - 11905: 0x94E6, + 26049 - 11905: 0xC5D4, + 26050 - 11905: 0x94E7, + 26051 - 11905: 0xECB9, + 26052 - 11905: 0xECB8, + 26053 - 11905: 0xC2C3, + 26054 - 11905: 0xECB7, + 26055 - 11905: 0x94E8, + 26056 - 11905: 0x94E9, + 26057 - 11905: 0x94EA, + 26058 - 11905: 0x94EB, + 26059 - 11905: 0xD0FD, + 26060 - 11905: 0xECBA, + 26061 - 11905: 0x94EC, + 26062 - 11905: 0xECBB, + 26063 - 11905: 0xD7E5, + 26064 - 11905: 0x94ED, + 26065 - 11905: 0x94EE, + 26066 - 11905: 0xECBC, + 26067 - 11905: 0x94EF, + 26068 - 11905: 0x94F0, + 26069 - 11905: 0x94F1, + 26070 - 11905: 0xECBD, + 26071 - 11905: 0xC6EC, + 26072 - 11905: 0x94F2, + 26073 - 11905: 0x94F3, + 26074 - 11905: 0x94F4, + 26075 - 11905: 0x94F5, + 26076 - 11905: 0x94F6, + 26077 - 11905: 0x94F7, + 26078 - 11905: 0x94F8, + 26079 - 11905: 0x94F9, + 26080 - 11905: 0xCEDE, + 26081 - 11905: 0x94FA, + 26082 - 11905: 0xBCC8, + 26083 - 11905: 0x94FB, + 26084 - 11905: 0x94FC, + 26085 - 11905: 0xC8D5, + 26086 - 11905: 0xB5A9, + 26087 - 11905: 0xBEC9, + 26088 - 11905: 0xD6BC, + 26089 - 11905: 0xD4E7, + 26090 - 11905: 0x94FD, + 26091 - 11905: 0x94FE, + 26092 - 11905: 0xD1AE, + 26093 - 11905: 0xD0F1, + 26094 - 11905: 0xEAB8, + 26095 - 11905: 0xEAB9, + 26096 - 11905: 0xEABA, + 26097 - 11905: 0xBAB5, + 26098 - 11905: 0x9540, + 26099 - 11905: 0x9541, + 26100 - 11905: 0x9542, + 26101 - 11905: 0x9543, + 26102 - 11905: 0xCAB1, + 26103 - 11905: 0xBFF5, + 26104 - 11905: 0x9544, + 26105 - 11905: 0x9545, + 26106 - 11905: 0xCDFA, + 26107 - 11905: 0x9546, + 26108 - 11905: 0x9547, + 26109 - 11905: 0x9548, + 26110 - 11905: 0x9549, + 26111 - 11905: 0x954A, + 26112 - 11905: 0xEAC0, + 26113 - 11905: 0x954B, + 26114 - 11905: 0xB0BA, + 26115 - 11905: 0xEABE, + 26116 - 11905: 0x954C, + 26117 - 11905: 0x954D, + 26118 - 11905: 0xC0A5, + 26119 - 11905: 0x954E, + 26120 - 11905: 0x954F, + 26121 - 11905: 0x9550, + 26122 - 11905: 0xEABB, + 26123 - 11905: 0x9551, + 26124 - 11905: 0xB2FD, + 26125 - 11905: 0x9552, + 26126 - 11905: 0xC3F7, + 26127 - 11905: 0xBBE8, + 26128 - 11905: 0x9553, + 26129 - 11905: 0x9554, + 26130 - 11905: 0x9555, + 26131 - 11905: 0xD2D7, + 26132 - 11905: 0xCEF4, + 26133 - 11905: 0xEABF, + 26134 - 11905: 0x9556, + 26135 - 11905: 0x9557, + 26136 - 11905: 0x9558, + 26137 - 11905: 0xEABC, + 26138 - 11905: 0x9559, + 26139 - 11905: 0x955A, + 26140 - 11905: 0x955B, + 26141 - 11905: 0xEAC3, + 26142 - 11905: 0x955C, + 26143 - 11905: 0xD0C7, + 26144 - 11905: 0xD3B3, + 26145 - 11905: 0x955D, + 26146 - 11905: 0x955E, + 26147 - 11905: 0x955F, + 26148 - 11905: 0x9560, + 26149 - 11905: 0xB4BA, + 26150 - 11905: 0x9561, + 26151 - 11905: 0xC3C1, + 26152 - 11905: 0xD7F2, + 26153 - 11905: 0x9562, + 26154 - 11905: 0x9563, + 26155 - 11905: 0x9564, + 26156 - 11905: 0x9565, + 26157 - 11905: 0xD5D1, + 26158 - 11905: 0x9566, + 26159 - 11905: 0xCAC7, + 26160 - 11905: 0x9567, + 26161 - 11905: 0xEAC5, + 26162 - 11905: 0x9568, + 26163 - 11905: 0x9569, + 26164 - 11905: 0xEAC4, + 26165 - 11905: 0xEAC7, + 26166 - 11905: 0xEAC6, + 26167 - 11905: 0x956A, + 26168 - 11905: 0x956B, + 26169 - 11905: 0x956C, + 26170 - 11905: 0x956D, + 26171 - 11905: 0x956E, + 26172 - 11905: 0xD6E7, + 26173 - 11905: 0x956F, + 26174 - 11905: 0xCFD4, + 26175 - 11905: 0x9570, + 26176 - 11905: 0x9571, + 26177 - 11905: 0xEACB, + 26178 - 11905: 0x9572, + 26179 - 11905: 0xBBCE, + 26180 - 11905: 0x9573, + 26181 - 11905: 0x9574, + 26182 - 11905: 0x9575, + 26183 - 11905: 0x9576, + 26184 - 11905: 0x9577, + 26185 - 11905: 0x9578, + 26186 - 11905: 0x9579, + 26187 - 11905: 0xBDFA, + 26188 - 11905: 0xC9CE, + 26189 - 11905: 0x957A, + 26190 - 11905: 0x957B, + 26191 - 11905: 0xEACC, + 26192 - 11905: 0x957C, + 26193 - 11905: 0x957D, + 26194 - 11905: 0xC9B9, + 26195 - 11905: 0xCFFE, + 26196 - 11905: 0xEACA, + 26197 - 11905: 0xD4CE, + 26198 - 11905: 0xEACD, + 26199 - 11905: 0xEACF, + 26200 - 11905: 0x957E, + 26201 - 11905: 0x9580, + 26202 - 11905: 0xCDED, + 26203 - 11905: 0x9581, + 26204 - 11905: 0x9582, + 26205 - 11905: 0x9583, + 26206 - 11905: 0x9584, + 26207 - 11905: 0xEAC9, + 26208 - 11905: 0x9585, + 26209 - 11905: 0xEACE, + 26210 - 11905: 0x9586, + 26211 - 11905: 0x9587, + 26212 - 11905: 0xCEEE, + 26213 - 11905: 0x9588, + 26214 - 11905: 0xBBDE, + 26215 - 11905: 0x9589, + 26216 - 11905: 0xB3BF, + 26217 - 11905: 0x958A, + 26218 - 11905: 0x958B, + 26219 - 11905: 0x958C, + 26220 - 11905: 0x958D, + 26221 - 11905: 0x958E, + 26222 - 11905: 0xC6D5, + 26223 - 11905: 0xBEB0, + 26224 - 11905: 0xCEFA, + 26225 - 11905: 0x958F, + 26226 - 11905: 0x9590, + 26227 - 11905: 0x9591, + 26228 - 11905: 0xC7E7, + 26229 - 11905: 0x9592, + 26230 - 11905: 0xBEA7, + 26231 - 11905: 0xEAD0, + 26232 - 11905: 0x9593, + 26233 - 11905: 0x9594, + 26234 - 11905: 0xD6C7, + 26235 - 11905: 0x9595, + 26236 - 11905: 0x9596, + 26237 - 11905: 0x9597, + 26238 - 11905: 0xC1C0, + 26239 - 11905: 0x9598, + 26240 - 11905: 0x9599, + 26241 - 11905: 0x959A, + 26242 - 11905: 0xD4DD, + 26243 - 11905: 0x959B, + 26244 - 11905: 0xEAD1, + 26245 - 11905: 0x959C, + 26246 - 11905: 0x959D, + 26247 - 11905: 0xCFBE, + 26248 - 11905: 0x959E, + 26249 - 11905: 0x959F, + 26250 - 11905: 0x95A0, + 26251 - 11905: 0x95A1, + 26252 - 11905: 0xEAD2, + 26253 - 11905: 0x95A2, + 26254 - 11905: 0x95A3, + 26255 - 11905: 0x95A4, + 26256 - 11905: 0x95A5, + 26257 - 11905: 0xCAEE, + 26258 - 11905: 0x95A6, + 26259 - 11905: 0x95A7, + 26260 - 11905: 0x95A8, + 26261 - 11905: 0x95A9, + 26262 - 11905: 0xC5AF, + 26263 - 11905: 0xB0B5, + 26264 - 11905: 0x95AA, + 26265 - 11905: 0x95AB, + 26266 - 11905: 0x95AC, + 26267 - 11905: 0x95AD, + 26268 - 11905: 0x95AE, + 26269 - 11905: 0xEAD4, + 26270 - 11905: 0x95AF, + 26271 - 11905: 0x95B0, + 26272 - 11905: 0x95B1, + 26273 - 11905: 0x95B2, + 26274 - 11905: 0x95B3, + 26275 - 11905: 0x95B4, + 26276 - 11905: 0x95B5, + 26277 - 11905: 0x95B6, + 26278 - 11905: 0x95B7, + 26279 - 11905: 0xEAD3, + 26280 - 11905: 0xF4DF, + 26281 - 11905: 0x95B8, + 26282 - 11905: 0x95B9, + 26283 - 11905: 0x95BA, + 26284 - 11905: 0x95BB, + 26285 - 11905: 0x95BC, + 26286 - 11905: 0xC4BA, + 26287 - 11905: 0x95BD, + 26288 - 11905: 0x95BE, + 26289 - 11905: 0x95BF, + 26290 - 11905: 0x95C0, + 26291 - 11905: 0x95C1, + 26292 - 11905: 0xB1A9, + 26293 - 11905: 0x95C2, + 26294 - 11905: 0x95C3, + 26295 - 11905: 0x95C4, + 26296 - 11905: 0x95C5, + 26297 - 11905: 0xE5DF, + 26298 - 11905: 0x95C6, + 26299 - 11905: 0x95C7, + 26300 - 11905: 0x95C8, + 26301 - 11905: 0x95C9, + 26302 - 11905: 0xEAD5, + 26303 - 11905: 0x95CA, + 26304 - 11905: 0x95CB, + 26305 - 11905: 0x95CC, + 26306 - 11905: 0x95CD, + 26307 - 11905: 0x95CE, + 26308 - 11905: 0x95CF, + 26309 - 11905: 0x95D0, + 26310 - 11905: 0x95D1, + 26311 - 11905: 0x95D2, + 26312 - 11905: 0x95D3, + 26313 - 11905: 0x95D4, + 26314 - 11905: 0x95D5, + 26315 - 11905: 0x95D6, + 26316 - 11905: 0x95D7, + 26317 - 11905: 0x95D8, + 26318 - 11905: 0x95D9, + 26319 - 11905: 0x95DA, + 26320 - 11905: 0x95DB, + 26321 - 11905: 0x95DC, + 26322 - 11905: 0x95DD, + 26323 - 11905: 0x95DE, + 26324 - 11905: 0x95DF, + 26325 - 11905: 0x95E0, + 26326 - 11905: 0x95E1, + 26327 - 11905: 0x95E2, + 26328 - 11905: 0x95E3, + 26329 - 11905: 0xCAEF, + 26330 - 11905: 0x95E4, + 26331 - 11905: 0xEAD6, + 26332 - 11905: 0xEAD7, + 26333 - 11905: 0xC6D8, + 26334 - 11905: 0x95E5, + 26335 - 11905: 0x95E6, + 26336 - 11905: 0x95E7, + 26337 - 11905: 0x95E8, + 26338 - 11905: 0x95E9, + 26339 - 11905: 0x95EA, + 26340 - 11905: 0x95EB, + 26341 - 11905: 0x95EC, + 26342 - 11905: 0xEAD8, + 26343 - 11905: 0x95ED, + 26344 - 11905: 0x95EE, + 26345 - 11905: 0xEAD9, + 26346 - 11905: 0x95EF, + 26347 - 11905: 0x95F0, + 26348 - 11905: 0x95F1, + 26349 - 11905: 0x95F2, + 26350 - 11905: 0x95F3, + 26351 - 11905: 0x95F4, + 26352 - 11905: 0xD4BB, + 26353 - 11905: 0x95F5, + 26354 - 11905: 0xC7FA, + 26355 - 11905: 0xD2B7, + 26356 - 11905: 0xB8FC, + 26357 - 11905: 0x95F6, + 26358 - 11905: 0x95F7, + 26359 - 11905: 0xEAC2, + 26360 - 11905: 0x95F8, + 26361 - 11905: 0xB2DC, + 26362 - 11905: 0x95F9, + 26363 - 11905: 0x95FA, + 26364 - 11905: 0xC2FC, + 26365 - 11905: 0x95FB, + 26366 - 11905: 0xD4F8, + 26367 - 11905: 0xCCE6, + 26368 - 11905: 0xD7EE, + 26369 - 11905: 0x95FC, + 26370 - 11905: 0x95FD, + 26371 - 11905: 0x95FE, + 26372 - 11905: 0x9640, + 26373 - 11905: 0x9641, + 26374 - 11905: 0x9642, + 26375 - 11905: 0x9643, + 26376 - 11905: 0xD4C2, + 26377 - 11905: 0xD3D0, + 26378 - 11905: 0xEBC3, + 26379 - 11905: 0xC5F3, + 26380 - 11905: 0x9644, + 26381 - 11905: 0xB7FE, + 26382 - 11905: 0x9645, + 26383 - 11905: 0x9646, + 26384 - 11905: 0xEBD4, + 26385 - 11905: 0x9647, + 26386 - 11905: 0x9648, + 26387 - 11905: 0x9649, + 26388 - 11905: 0xCBB7, + 26389 - 11905: 0xEBDE, + 26390 - 11905: 0x964A, + 26391 - 11905: 0xC0CA, + 26392 - 11905: 0x964B, + 26393 - 11905: 0x964C, + 26394 - 11905: 0x964D, + 26395 - 11905: 0xCDFB, + 26396 - 11905: 0x964E, + 26397 - 11905: 0xB3AF, + 26398 - 11905: 0x964F, + 26399 - 11905: 0xC6DA, + 26400 - 11905: 0x9650, + 26401 - 11905: 0x9651, + 26402 - 11905: 0x9652, + 26403 - 11905: 0x9653, + 26404 - 11905: 0x9654, + 26405 - 11905: 0x9655, + 26406 - 11905: 0xEBFC, + 26407 - 11905: 0x9656, + 26408 - 11905: 0xC4BE, + 26409 - 11905: 0x9657, + 26410 - 11905: 0xCEB4, + 26411 - 11905: 0xC4A9, + 26412 - 11905: 0xB1BE, + 26413 - 11905: 0xD4FD, + 26414 - 11905: 0x9658, + 26415 - 11905: 0xCAF5, + 26416 - 11905: 0x9659, + 26417 - 11905: 0xD6EC, + 26418 - 11905: 0x965A, + 26419 - 11905: 0x965B, + 26420 - 11905: 0xC6D3, + 26421 - 11905: 0xB6E4, + 26422 - 11905: 0x965C, + 26423 - 11905: 0x965D, + 26424 - 11905: 0x965E, + 26425 - 11905: 0x965F, + 26426 - 11905: 0xBBFA, + 26427 - 11905: 0x9660, + 26428 - 11905: 0x9661, + 26429 - 11905: 0xD0E0, + 26430 - 11905: 0x9662, + 26431 - 11905: 0x9663, + 26432 - 11905: 0xC9B1, + 26433 - 11905: 0x9664, + 26434 - 11905: 0xD4D3, + 26435 - 11905: 0xC8A8, + 26436 - 11905: 0x9665, + 26437 - 11905: 0x9666, + 26438 - 11905: 0xB8CB, + 26439 - 11905: 0x9667, + 26440 - 11905: 0xE8BE, + 26441 - 11905: 0xC9BC, + 26442 - 11905: 0x9668, + 26443 - 11905: 0x9669, + 26444 - 11905: 0xE8BB, + 26445 - 11905: 0x966A, + 26446 - 11905: 0xC0EE, + 26447 - 11905: 0xD0D3, + 26448 - 11905: 0xB2C4, + 26449 - 11905: 0xB4E5, + 26450 - 11905: 0x966B, + 26451 - 11905: 0xE8BC, + 26452 - 11905: 0x966C, + 26453 - 11905: 0x966D, + 26454 - 11905: 0xD5C8, + 26455 - 11905: 0x966E, + 26456 - 11905: 0x966F, + 26457 - 11905: 0x9670, + 26458 - 11905: 0x9671, + 26459 - 11905: 0x9672, + 26460 - 11905: 0xB6C5, + 26461 - 11905: 0x9673, + 26462 - 11905: 0xE8BD, + 26463 - 11905: 0xCAF8, + 26464 - 11905: 0xB8DC, + 26465 - 11905: 0xCCF5, + 26466 - 11905: 0x9674, + 26467 - 11905: 0x9675, + 26468 - 11905: 0x9676, + 26469 - 11905: 0xC0B4, + 26470 - 11905: 0x9677, + 26471 - 11905: 0x9678, + 26472 - 11905: 0xD1EE, + 26473 - 11905: 0xE8BF, + 26474 - 11905: 0xE8C2, + 26475 - 11905: 0x9679, + 26476 - 11905: 0x967A, + 26477 - 11905: 0xBABC, + 26478 - 11905: 0x967B, + 26479 - 11905: 0xB1AD, + 26480 - 11905: 0xBDDC, + 26481 - 11905: 0x967C, + 26482 - 11905: 0xEABD, + 26483 - 11905: 0xE8C3, + 26484 - 11905: 0x967D, + 26485 - 11905: 0xE8C6, + 26486 - 11905: 0x967E, + 26487 - 11905: 0xE8CB, + 26488 - 11905: 0x9680, + 26489 - 11905: 0x9681, + 26490 - 11905: 0x9682, + 26491 - 11905: 0x9683, + 26492 - 11905: 0xE8CC, + 26493 - 11905: 0x9684, + 26494 - 11905: 0xCBC9, + 26495 - 11905: 0xB0E5, + 26496 - 11905: 0x9685, + 26497 - 11905: 0xBCAB, + 26498 - 11905: 0x9686, + 26499 - 11905: 0x9687, + 26500 - 11905: 0xB9B9, + 26501 - 11905: 0x9688, + 26502 - 11905: 0x9689, + 26503 - 11905: 0xE8C1, + 26504 - 11905: 0x968A, + 26505 - 11905: 0xCDF7, + 26506 - 11905: 0x968B, + 26507 - 11905: 0xE8CA, + 26508 - 11905: 0x968C, + 26509 - 11905: 0x968D, + 26510 - 11905: 0x968E, + 26511 - 11905: 0x968F, + 26512 - 11905: 0xCEF6, + 26513 - 11905: 0x9690, + 26514 - 11905: 0x9691, + 26515 - 11905: 0x9692, + 26516 - 11905: 0x9693, + 26517 - 11905: 0xD5ED, + 26518 - 11905: 0x9694, + 26519 - 11905: 0xC1D6, + 26520 - 11905: 0xE8C4, + 26521 - 11905: 0x9695, + 26522 - 11905: 0xC3B6, + 26523 - 11905: 0x9696, + 26524 - 11905: 0xB9FB, + 26525 - 11905: 0xD6A6, + 26526 - 11905: 0xE8C8, + 26527 - 11905: 0x9697, + 26528 - 11905: 0x9698, + 26529 - 11905: 0x9699, + 26530 - 11905: 0xCAE0, + 26531 - 11905: 0xD4E6, + 26532 - 11905: 0x969A, + 26533 - 11905: 0xE8C0, + 26534 - 11905: 0x969B, + 26535 - 11905: 0xE8C5, + 26536 - 11905: 0xE8C7, + 26537 - 11905: 0x969C, + 26538 - 11905: 0xC7B9, + 26539 - 11905: 0xB7E3, + 26540 - 11905: 0x969D, + 26541 - 11905: 0xE8C9, + 26542 - 11905: 0x969E, + 26543 - 11905: 0xBFDD, + 26544 - 11905: 0xE8D2, + 26545 - 11905: 0x969F, + 26546 - 11905: 0x96A0, + 26547 - 11905: 0xE8D7, + 26548 - 11905: 0x96A1, + 26549 - 11905: 0xE8D5, + 26550 - 11905: 0xBCDC, + 26551 - 11905: 0xBCCF, + 26552 - 11905: 0xE8DB, + 26553 - 11905: 0x96A2, + 26554 - 11905: 0x96A3, + 26555 - 11905: 0x96A4, + 26556 - 11905: 0x96A5, + 26557 - 11905: 0x96A6, + 26558 - 11905: 0x96A7, + 26559 - 11905: 0x96A8, + 26560 - 11905: 0x96A9, + 26561 - 11905: 0xE8DE, + 26562 - 11905: 0x96AA, + 26563 - 11905: 0xE8DA, + 26564 - 11905: 0xB1FA, + 26565 - 11905: 0x96AB, + 26566 - 11905: 0x96AC, + 26567 - 11905: 0x96AD, + 26568 - 11905: 0x96AE, + 26569 - 11905: 0x96AF, + 26570 - 11905: 0x96B0, + 26571 - 11905: 0x96B1, + 26572 - 11905: 0x96B2, + 26573 - 11905: 0x96B3, + 26574 - 11905: 0x96B4, + 26575 - 11905: 0xB0D8, + 26576 - 11905: 0xC4B3, + 26577 - 11905: 0xB8CC, + 26578 - 11905: 0xC6E2, + 26579 - 11905: 0xC8BE, + 26580 - 11905: 0xC8E1, + 26581 - 11905: 0x96B5, + 26582 - 11905: 0x96B6, + 26583 - 11905: 0x96B7, + 26584 - 11905: 0xE8CF, + 26585 - 11905: 0xE8D4, + 26586 - 11905: 0xE8D6, + 26587 - 11905: 0x96B8, + 26588 - 11905: 0xB9F1, + 26589 - 11905: 0xE8D8, + 26590 - 11905: 0xD7F5, + 26591 - 11905: 0x96B9, + 26592 - 11905: 0xC4FB, + 26593 - 11905: 0x96BA, + 26594 - 11905: 0xE8DC, + 26595 - 11905: 0x96BB, + 26596 - 11905: 0x96BC, + 26597 - 11905: 0xB2E9, + 26598 - 11905: 0x96BD, + 26599 - 11905: 0x96BE, + 26600 - 11905: 0x96BF, + 26601 - 11905: 0xE8D1, + 26602 - 11905: 0x96C0, + 26603 - 11905: 0x96C1, + 26604 - 11905: 0xBCED, + 26605 - 11905: 0x96C2, + 26606 - 11905: 0x96C3, + 26607 - 11905: 0xBFC2, + 26608 - 11905: 0xE8CD, + 26609 - 11905: 0xD6F9, + 26610 - 11905: 0x96C4, + 26611 - 11905: 0xC1F8, + 26612 - 11905: 0xB2F1, + 26613 - 11905: 0x96C5, + 26614 - 11905: 0x96C6, + 26615 - 11905: 0x96C7, + 26616 - 11905: 0x96C8, + 26617 - 11905: 0x96C9, + 26618 - 11905: 0x96CA, + 26619 - 11905: 0x96CB, + 26620 - 11905: 0x96CC, + 26621 - 11905: 0xE8DF, + 26622 - 11905: 0x96CD, + 26623 - 11905: 0xCAC1, + 26624 - 11905: 0xE8D9, + 26625 - 11905: 0x96CE, + 26626 - 11905: 0x96CF, + 26627 - 11905: 0x96D0, + 26628 - 11905: 0x96D1, + 26629 - 11905: 0xD5A4, + 26630 - 11905: 0x96D2, + 26631 - 11905: 0xB1EA, + 26632 - 11905: 0xD5BB, + 26633 - 11905: 0xE8CE, + 26634 - 11905: 0xE8D0, + 26635 - 11905: 0xB6B0, + 26636 - 11905: 0xE8D3, + 26637 - 11905: 0x96D3, + 26638 - 11905: 0xE8DD, + 26639 - 11905: 0xC0B8, + 26640 - 11905: 0x96D4, + 26641 - 11905: 0xCAF7, + 26642 - 11905: 0x96D5, + 26643 - 11905: 0xCBA8, + 26644 - 11905: 0x96D6, + 26645 - 11905: 0x96D7, + 26646 - 11905: 0xC6DC, + 26647 - 11905: 0xC0F5, + 26648 - 11905: 0x96D8, + 26649 - 11905: 0x96D9, + 26650 - 11905: 0x96DA, + 26651 - 11905: 0x96DB, + 26652 - 11905: 0x96DC, + 26653 - 11905: 0xE8E9, + 26654 - 11905: 0x96DD, + 26655 - 11905: 0x96DE, + 26656 - 11905: 0x96DF, + 26657 - 11905: 0xD0A3, + 26658 - 11905: 0x96E0, + 26659 - 11905: 0x96E1, + 26660 - 11905: 0x96E2, + 26661 - 11905: 0x96E3, + 26662 - 11905: 0x96E4, + 26663 - 11905: 0x96E5, + 26664 - 11905: 0x96E6, + 26665 - 11905: 0xE8F2, + 26666 - 11905: 0xD6EA, + 26667 - 11905: 0x96E7, + 26668 - 11905: 0x96E8, + 26669 - 11905: 0x96E9, + 26670 - 11905: 0x96EA, + 26671 - 11905: 0x96EB, + 26672 - 11905: 0x96EC, + 26673 - 11905: 0x96ED, + 26674 - 11905: 0xE8E0, + 26675 - 11905: 0xE8E1, + 26676 - 11905: 0x96EE, + 26677 - 11905: 0x96EF, + 26678 - 11905: 0x96F0, + 26679 - 11905: 0xD1F9, + 26680 - 11905: 0xBACB, + 26681 - 11905: 0xB8F9, + 26682 - 11905: 0x96F1, + 26683 - 11905: 0x96F2, + 26684 - 11905: 0xB8F1, + 26685 - 11905: 0xD4D4, + 26686 - 11905: 0xE8EF, + 26687 - 11905: 0x96F3, + 26688 - 11905: 0xE8EE, + 26689 - 11905: 0xE8EC, + 26690 - 11905: 0xB9F0, + 26691 - 11905: 0xCCD2, + 26692 - 11905: 0xE8E6, + 26693 - 11905: 0xCEA6, + 26694 - 11905: 0xBFF2, + 26695 - 11905: 0x96F4, + 26696 - 11905: 0xB0B8, + 26697 - 11905: 0xE8F1, + 26698 - 11905: 0xE8F0, + 26699 - 11905: 0x96F5, + 26700 - 11905: 0xD7C0, + 26701 - 11905: 0x96F6, + 26702 - 11905: 0xE8E4, + 26703 - 11905: 0x96F7, + 26704 - 11905: 0xCDA9, + 26705 - 11905: 0xC9A3, + 26706 - 11905: 0x96F8, + 26707 - 11905: 0xBBB8, + 26708 - 11905: 0xBDDB, + 26709 - 11905: 0xE8EA, + 26710 - 11905: 0x96F9, + 26711 - 11905: 0x96FA, + 26712 - 11905: 0x96FB, + 26713 - 11905: 0x96FC, + 26714 - 11905: 0x96FD, + 26715 - 11905: 0x96FE, + 26716 - 11905: 0x9740, + 26717 - 11905: 0x9741, + 26718 - 11905: 0x9742, + 26719 - 11905: 0x9743, + 26720 - 11905: 0xE8E2, + 26721 - 11905: 0xE8E3, + 26722 - 11905: 0xE8E5, + 26723 - 11905: 0xB5B5, + 26724 - 11905: 0xE8E7, + 26725 - 11905: 0xC7C5, + 26726 - 11905: 0xE8EB, + 26727 - 11905: 0xE8ED, + 26728 - 11905: 0xBDB0, + 26729 - 11905: 0xD7AE, + 26730 - 11905: 0x9744, + 26731 - 11905: 0xE8F8, + 26732 - 11905: 0x9745, + 26733 - 11905: 0x9746, + 26734 - 11905: 0x9747, + 26735 - 11905: 0x9748, + 26736 - 11905: 0x9749, + 26737 - 11905: 0x974A, + 26738 - 11905: 0x974B, + 26739 - 11905: 0x974C, + 26740 - 11905: 0xE8F5, + 26741 - 11905: 0x974D, + 26742 - 11905: 0xCDB0, + 26743 - 11905: 0xE8F6, + 26744 - 11905: 0x974E, + 26745 - 11905: 0x974F, + 26746 - 11905: 0x9750, + 26747 - 11905: 0x9751, + 26748 - 11905: 0x9752, + 26749 - 11905: 0x9753, + 26750 - 11905: 0x9754, + 26751 - 11905: 0x9755, + 26752 - 11905: 0x9756, + 26753 - 11905: 0xC1BA, + 26754 - 11905: 0x9757, + 26755 - 11905: 0xE8E8, + 26756 - 11905: 0x9758, + 26757 - 11905: 0xC3B7, + 26758 - 11905: 0xB0F0, + 26759 - 11905: 0x9759, + 26760 - 11905: 0x975A, + 26761 - 11905: 0x975B, + 26762 - 11905: 0x975C, + 26763 - 11905: 0x975D, + 26764 - 11905: 0x975E, + 26765 - 11905: 0x975F, + 26766 - 11905: 0x9760, + 26767 - 11905: 0xE8F4, + 26768 - 11905: 0x9761, + 26769 - 11905: 0x9762, + 26770 - 11905: 0x9763, + 26771 - 11905: 0xE8F7, + 26772 - 11905: 0x9764, + 26773 - 11905: 0x9765, + 26774 - 11905: 0x9766, + 26775 - 11905: 0xB9A3, + 26776 - 11905: 0x9767, + 26777 - 11905: 0x9768, + 26778 - 11905: 0x9769, + 26779 - 11905: 0x976A, + 26780 - 11905: 0x976B, + 26781 - 11905: 0x976C, + 26782 - 11905: 0x976D, + 26783 - 11905: 0x976E, + 26784 - 11905: 0x976F, + 26785 - 11905: 0x9770, + 26786 - 11905: 0xC9D2, + 26787 - 11905: 0x9771, + 26788 - 11905: 0x9772, + 26789 - 11905: 0x9773, + 26790 - 11905: 0xC3CE, + 26791 - 11905: 0xCEE0, + 26792 - 11905: 0xC0E6, + 26793 - 11905: 0x9774, + 26794 - 11905: 0x9775, + 26795 - 11905: 0x9776, + 26796 - 11905: 0x9777, + 26797 - 11905: 0xCBF3, + 26798 - 11905: 0x9778, + 26799 - 11905: 0xCCDD, + 26800 - 11905: 0xD0B5, + 26801 - 11905: 0x9779, + 26802 - 11905: 0x977A, + 26803 - 11905: 0xCAE1, + 26804 - 11905: 0x977B, + 26805 - 11905: 0xE8F3, + 26806 - 11905: 0x977C, + 26807 - 11905: 0x977D, + 26808 - 11905: 0x977E, + 26809 - 11905: 0x9780, + 26810 - 11905: 0x9781, + 26811 - 11905: 0x9782, + 26812 - 11905: 0x9783, + 26813 - 11905: 0x9784, + 26814 - 11905: 0x9785, + 26815 - 11905: 0x9786, + 26816 - 11905: 0xBCEC, + 26817 - 11905: 0x9787, + 26818 - 11905: 0xE8F9, + 26819 - 11905: 0x9788, + 26820 - 11905: 0x9789, + 26821 - 11905: 0x978A, + 26822 - 11905: 0x978B, + 26823 - 11905: 0x978C, + 26824 - 11905: 0x978D, + 26825 - 11905: 0xC3DE, + 26826 - 11905: 0x978E, + 26827 - 11905: 0xC6E5, + 26828 - 11905: 0x978F, + 26829 - 11905: 0xB9F7, + 26830 - 11905: 0x9790, + 26831 - 11905: 0x9791, + 26832 - 11905: 0x9792, + 26833 - 11905: 0x9793, + 26834 - 11905: 0xB0F4, + 26835 - 11905: 0x9794, + 26836 - 11905: 0x9795, + 26837 - 11905: 0xD7D8, + 26838 - 11905: 0x9796, + 26839 - 11905: 0x9797, + 26840 - 11905: 0xBCAC, + 26841 - 11905: 0x9798, + 26842 - 11905: 0xC5EF, + 26843 - 11905: 0x9799, + 26844 - 11905: 0x979A, + 26845 - 11905: 0x979B, + 26846 - 11905: 0x979C, + 26847 - 11905: 0x979D, + 26848 - 11905: 0xCCC4, + 26849 - 11905: 0x979E, + 26850 - 11905: 0x979F, + 26851 - 11905: 0xE9A6, + 26852 - 11905: 0x97A0, + 26853 - 11905: 0x97A1, + 26854 - 11905: 0x97A2, + 26855 - 11905: 0x97A3, + 26856 - 11905: 0x97A4, + 26857 - 11905: 0x97A5, + 26858 - 11905: 0x97A6, + 26859 - 11905: 0x97A7, + 26860 - 11905: 0x97A8, + 26861 - 11905: 0x97A9, + 26862 - 11905: 0xC9AD, + 26863 - 11905: 0x97AA, + 26864 - 11905: 0xE9A2, + 26865 - 11905: 0xC0E2, + 26866 - 11905: 0x97AB, + 26867 - 11905: 0x97AC, + 26868 - 11905: 0x97AD, + 26869 - 11905: 0xBFC3, + 26870 - 11905: 0x97AE, + 26871 - 11905: 0x97AF, + 26872 - 11905: 0x97B0, + 26873 - 11905: 0xE8FE, + 26874 - 11905: 0xB9D7, + 26875 - 11905: 0x97B1, + 26876 - 11905: 0xE8FB, + 26877 - 11905: 0x97B2, + 26878 - 11905: 0x97B3, + 26879 - 11905: 0x97B4, + 26880 - 11905: 0x97B5, + 26881 - 11905: 0xE9A4, + 26882 - 11905: 0x97B6, + 26883 - 11905: 0x97B7, + 26884 - 11905: 0x97B8, + 26885 - 11905: 0xD2CE, + 26886 - 11905: 0x97B9, + 26887 - 11905: 0x97BA, + 26888 - 11905: 0x97BB, + 26889 - 11905: 0x97BC, + 26890 - 11905: 0x97BD, + 26891 - 11905: 0xE9A3, + 26892 - 11905: 0x97BE, + 26893 - 11905: 0xD6B2, + 26894 - 11905: 0xD7B5, + 26895 - 11905: 0x97BF, + 26896 - 11905: 0xE9A7, + 26897 - 11905: 0x97C0, + 26898 - 11905: 0xBDB7, + 26899 - 11905: 0x97C1, + 26900 - 11905: 0x97C2, + 26901 - 11905: 0x97C3, + 26902 - 11905: 0x97C4, + 26903 - 11905: 0x97C5, + 26904 - 11905: 0x97C6, + 26905 - 11905: 0x97C7, + 26906 - 11905: 0x97C8, + 26907 - 11905: 0x97C9, + 26908 - 11905: 0x97CA, + 26909 - 11905: 0x97CB, + 26910 - 11905: 0x97CC, + 26911 - 11905: 0xE8FC, + 26912 - 11905: 0xE8FD, + 26913 - 11905: 0x97CD, + 26914 - 11905: 0x97CE, + 26915 - 11905: 0x97CF, + 26916 - 11905: 0xE9A1, + 26917 - 11905: 0x97D0, + 26918 - 11905: 0x97D1, + 26919 - 11905: 0x97D2, + 26920 - 11905: 0x97D3, + 26921 - 11905: 0x97D4, + 26922 - 11905: 0x97D5, + 26923 - 11905: 0x97D6, + 26924 - 11905: 0x97D7, + 26925 - 11905: 0xCDD6, + 26926 - 11905: 0x97D8, + 26927 - 11905: 0x97D9, + 26928 - 11905: 0xD2AC, + 26929 - 11905: 0x97DA, + 26930 - 11905: 0x97DB, + 26931 - 11905: 0x97DC, + 26932 - 11905: 0xE9B2, + 26933 - 11905: 0x97DD, + 26934 - 11905: 0x97DE, + 26935 - 11905: 0x97DF, + 26936 - 11905: 0x97E0, + 26937 - 11905: 0xE9A9, + 26938 - 11905: 0x97E1, + 26939 - 11905: 0x97E2, + 26940 - 11905: 0x97E3, + 26941 - 11905: 0xB4AA, + 26942 - 11905: 0x97E4, + 26943 - 11905: 0xB4BB, + 26944 - 11905: 0x97E5, + 26945 - 11905: 0x97E6, + 26946 - 11905: 0xE9AB, + 26947 - 11905: 0x97E7, + 26948 - 11905: 0x97E8, + 26949 - 11905: 0x97E9, + 26950 - 11905: 0x97EA, + 26951 - 11905: 0x97EB, + 26952 - 11905: 0x97EC, + 26953 - 11905: 0x97ED, + 26954 - 11905: 0x97EE, + 26955 - 11905: 0x97EF, + 26956 - 11905: 0x97F0, + 26957 - 11905: 0x97F1, + 26958 - 11905: 0x97F2, + 26959 - 11905: 0x97F3, + 26960 - 11905: 0x97F4, + 26961 - 11905: 0x97F5, + 26962 - 11905: 0x97F6, + 26963 - 11905: 0x97F7, + 26964 - 11905: 0xD0A8, + 26965 - 11905: 0x97F8, + 26966 - 11905: 0x97F9, + 26967 - 11905: 0xE9A5, + 26968 - 11905: 0x97FA, + 26969 - 11905: 0x97FB, + 26970 - 11905: 0xB3FE, + 26971 - 11905: 0x97FC, + 26972 - 11905: 0x97FD, + 26973 - 11905: 0xE9AC, + 26974 - 11905: 0xC0E3, + 26975 - 11905: 0x97FE, + 26976 - 11905: 0xE9AA, + 26977 - 11905: 0x9840, + 26978 - 11905: 0x9841, + 26979 - 11905: 0xE9B9, + 26980 - 11905: 0x9842, + 26981 - 11905: 0x9843, + 26982 - 11905: 0xE9B8, + 26983 - 11905: 0x9844, + 26984 - 11905: 0x9845, + 26985 - 11905: 0x9846, + 26986 - 11905: 0x9847, + 26987 - 11905: 0xE9AE, + 26988 - 11905: 0x9848, + 26989 - 11905: 0x9849, + 26990 - 11905: 0xE8FA, + 26991 - 11905: 0x984A, + 26992 - 11905: 0x984B, + 26993 - 11905: 0xE9A8, + 26994 - 11905: 0x984C, + 26995 - 11905: 0x984D, + 26996 - 11905: 0x984E, + 26997 - 11905: 0x984F, + 26998 - 11905: 0x9850, + 26999 - 11905: 0xBFAC, + 27000 - 11905: 0xE9B1, + 27001 - 11905: 0xE9BA, + 27002 - 11905: 0x9851, + 27003 - 11905: 0x9852, + 27004 - 11905: 0xC2A5, + 27005 - 11905: 0x9853, + 27006 - 11905: 0x9854, + 27007 - 11905: 0x9855, + 27008 - 11905: 0xE9AF, + 27009 - 11905: 0x9856, + 27010 - 11905: 0xB8C5, + 27011 - 11905: 0x9857, + 27012 - 11905: 0xE9AD, + 27013 - 11905: 0x9858, + 27014 - 11905: 0xD3DC, + 27015 - 11905: 0xE9B4, + 27016 - 11905: 0xE9B5, + 27017 - 11905: 0xE9B7, + 27018 - 11905: 0x9859, + 27019 - 11905: 0x985A, + 27020 - 11905: 0x985B, + 27021 - 11905: 0xE9C7, + 27022 - 11905: 0x985C, + 27023 - 11905: 0x985D, + 27024 - 11905: 0x985E, + 27025 - 11905: 0x985F, + 27026 - 11905: 0x9860, + 27027 - 11905: 0x9861, + 27028 - 11905: 0xC0C6, + 27029 - 11905: 0xE9C5, + 27030 - 11905: 0x9862, + 27031 - 11905: 0x9863, + 27032 - 11905: 0xE9B0, + 27033 - 11905: 0x9864, + 27034 - 11905: 0x9865, + 27035 - 11905: 0xE9BB, + 27036 - 11905: 0xB0F1, + 27037 - 11905: 0x9866, + 27038 - 11905: 0x9867, + 27039 - 11905: 0x9868, + 27040 - 11905: 0x9869, + 27041 - 11905: 0x986A, + 27042 - 11905: 0x986B, + 27043 - 11905: 0x986C, + 27044 - 11905: 0x986D, + 27045 - 11905: 0x986E, + 27046 - 11905: 0x986F, + 27047 - 11905: 0xE9BC, + 27048 - 11905: 0xD5A5, + 27049 - 11905: 0x9870, + 27050 - 11905: 0x9871, + 27051 - 11905: 0xE9BE, + 27052 - 11905: 0x9872, + 27053 - 11905: 0xE9BF, + 27054 - 11905: 0x9873, + 27055 - 11905: 0x9874, + 27056 - 11905: 0x9875, + 27057 - 11905: 0xE9C1, + 27058 - 11905: 0x9876, + 27059 - 11905: 0x9877, + 27060 - 11905: 0xC1F1, + 27061 - 11905: 0x9878, + 27062 - 11905: 0x9879, + 27063 - 11905: 0xC8B6, + 27064 - 11905: 0x987A, + 27065 - 11905: 0x987B, + 27066 - 11905: 0x987C, + 27067 - 11905: 0xE9BD, + 27068 - 11905: 0x987D, + 27069 - 11905: 0x987E, + 27070 - 11905: 0x9880, + 27071 - 11905: 0x9881, + 27072 - 11905: 0x9882, + 27073 - 11905: 0xE9C2, + 27074 - 11905: 0x9883, + 27075 - 11905: 0x9884, + 27076 - 11905: 0x9885, + 27077 - 11905: 0x9886, + 27078 - 11905: 0x9887, + 27079 - 11905: 0x9888, + 27080 - 11905: 0x9889, + 27081 - 11905: 0x988A, + 27082 - 11905: 0xE9C3, + 27083 - 11905: 0x988B, + 27084 - 11905: 0xE9B3, + 27085 - 11905: 0x988C, + 27086 - 11905: 0xE9B6, + 27087 - 11905: 0x988D, + 27088 - 11905: 0xBBB1, + 27089 - 11905: 0x988E, + 27090 - 11905: 0x988F, + 27091 - 11905: 0x9890, + 27092 - 11905: 0xE9C0, + 27093 - 11905: 0x9891, + 27094 - 11905: 0x9892, + 27095 - 11905: 0x9893, + 27096 - 11905: 0x9894, + 27097 - 11905: 0x9895, + 27098 - 11905: 0x9896, + 27099 - 11905: 0xBCF7, + 27100 - 11905: 0x9897, + 27101 - 11905: 0x9898, + 27102 - 11905: 0x9899, + 27103 - 11905: 0xE9C4, + 27104 - 11905: 0xE9C6, + 27105 - 11905: 0x989A, + 27106 - 11905: 0x989B, + 27107 - 11905: 0x989C, + 27108 - 11905: 0x989D, + 27109 - 11905: 0x989E, + 27110 - 11905: 0x989F, + 27111 - 11905: 0x98A0, + 27112 - 11905: 0x98A1, + 27113 - 11905: 0x98A2, + 27114 - 11905: 0x98A3, + 27115 - 11905: 0x98A4, + 27116 - 11905: 0x98A5, + 27117 - 11905: 0xE9CA, + 27118 - 11905: 0x98A6, + 27119 - 11905: 0x98A7, + 27120 - 11905: 0x98A8, + 27121 - 11905: 0x98A9, + 27122 - 11905: 0xE9CE, + 27123 - 11905: 0x98AA, + 27124 - 11905: 0x98AB, + 27125 - 11905: 0x98AC, + 27126 - 11905: 0x98AD, + 27127 - 11905: 0x98AE, + 27128 - 11905: 0x98AF, + 27129 - 11905: 0x98B0, + 27130 - 11905: 0x98B1, + 27131 - 11905: 0x98B2, + 27132 - 11905: 0x98B3, + 27133 - 11905: 0xB2DB, + 27134 - 11905: 0x98B4, + 27135 - 11905: 0xE9C8, + 27136 - 11905: 0x98B5, + 27137 - 11905: 0x98B6, + 27138 - 11905: 0x98B7, + 27139 - 11905: 0x98B8, + 27140 - 11905: 0x98B9, + 27141 - 11905: 0x98BA, + 27142 - 11905: 0x98BB, + 27143 - 11905: 0x98BC, + 27144 - 11905: 0x98BD, + 27145 - 11905: 0x98BE, + 27146 - 11905: 0xB7AE, + 27147 - 11905: 0x98BF, + 27148 - 11905: 0x98C0, + 27149 - 11905: 0x98C1, + 27150 - 11905: 0x98C2, + 27151 - 11905: 0x98C3, + 27152 - 11905: 0x98C4, + 27153 - 11905: 0x98C5, + 27154 - 11905: 0x98C6, + 27155 - 11905: 0x98C7, + 27156 - 11905: 0x98C8, + 27157 - 11905: 0x98C9, + 27158 - 11905: 0x98CA, + 27159 - 11905: 0xE9CB, + 27160 - 11905: 0xE9CC, + 27161 - 11905: 0x98CB, + 27162 - 11905: 0x98CC, + 27163 - 11905: 0x98CD, + 27164 - 11905: 0x98CE, + 27165 - 11905: 0x98CF, + 27166 - 11905: 0x98D0, + 27167 - 11905: 0xD5C1, + 27168 - 11905: 0x98D1, + 27169 - 11905: 0xC4A3, + 27170 - 11905: 0x98D2, + 27171 - 11905: 0x98D3, + 27172 - 11905: 0x98D4, + 27173 - 11905: 0x98D5, + 27174 - 11905: 0x98D6, + 27175 - 11905: 0x98D7, + 27176 - 11905: 0xE9D8, + 27177 - 11905: 0x98D8, + 27178 - 11905: 0xBAE1, + 27179 - 11905: 0x98D9, + 27180 - 11905: 0x98DA, + 27181 - 11905: 0x98DB, + 27182 - 11905: 0x98DC, + 27183 - 11905: 0xE9C9, + 27184 - 11905: 0x98DD, + 27185 - 11905: 0xD3A3, + 27186 - 11905: 0x98DE, + 27187 - 11905: 0x98DF, + 27188 - 11905: 0x98E0, + 27189 - 11905: 0xE9D4, + 27190 - 11905: 0x98E1, + 27191 - 11905: 0x98E2, + 27192 - 11905: 0x98E3, + 27193 - 11905: 0x98E4, + 27194 - 11905: 0x98E5, + 27195 - 11905: 0x98E6, + 27196 - 11905: 0x98E7, + 27197 - 11905: 0xE9D7, + 27198 - 11905: 0xE9D0, + 27199 - 11905: 0x98E8, + 27200 - 11905: 0x98E9, + 27201 - 11905: 0x98EA, + 27202 - 11905: 0x98EB, + 27203 - 11905: 0x98EC, + 27204 - 11905: 0xE9CF, + 27205 - 11905: 0x98ED, + 27206 - 11905: 0x98EE, + 27207 - 11905: 0xC7C1, + 27208 - 11905: 0x98EF, + 27209 - 11905: 0x98F0, + 27210 - 11905: 0x98F1, + 27211 - 11905: 0x98F2, + 27212 - 11905: 0x98F3, + 27213 - 11905: 0x98F4, + 27214 - 11905: 0x98F5, + 27215 - 11905: 0x98F6, + 27216 - 11905: 0xE9D2, + 27217 - 11905: 0x98F7, + 27218 - 11905: 0x98F8, + 27219 - 11905: 0x98F9, + 27220 - 11905: 0x98FA, + 27221 - 11905: 0x98FB, + 27222 - 11905: 0x98FC, + 27223 - 11905: 0x98FD, + 27224 - 11905: 0xE9D9, + 27225 - 11905: 0xB3C8, + 27226 - 11905: 0x98FE, + 27227 - 11905: 0xE9D3, + 27228 - 11905: 0x9940, + 27229 - 11905: 0x9941, + 27230 - 11905: 0x9942, + 27231 - 11905: 0x9943, + 27232 - 11905: 0x9944, + 27233 - 11905: 0xCFF0, + 27234 - 11905: 0x9945, + 27235 - 11905: 0x9946, + 27236 - 11905: 0x9947, + 27237 - 11905: 0xE9CD, + 27238 - 11905: 0x9948, + 27239 - 11905: 0x9949, + 27240 - 11905: 0x994A, + 27241 - 11905: 0x994B, + 27242 - 11905: 0x994C, + 27243 - 11905: 0x994D, + 27244 - 11905: 0x994E, + 27245 - 11905: 0x994F, + 27246 - 11905: 0x9950, + 27247 - 11905: 0x9951, + 27248 - 11905: 0x9952, + 27249 - 11905: 0xB3F7, + 27250 - 11905: 0x9953, + 27251 - 11905: 0x9954, + 27252 - 11905: 0x9955, + 27253 - 11905: 0x9956, + 27254 - 11905: 0x9957, + 27255 - 11905: 0x9958, + 27256 - 11905: 0x9959, + 27257 - 11905: 0xE9D6, + 27258 - 11905: 0x995A, + 27259 - 11905: 0x995B, + 27260 - 11905: 0xE9DA, + 27261 - 11905: 0x995C, + 27262 - 11905: 0x995D, + 27263 - 11905: 0x995E, + 27264 - 11905: 0xCCB4, + 27265 - 11905: 0x995F, + 27266 - 11905: 0x9960, + 27267 - 11905: 0x9961, + 27268 - 11905: 0xCFAD, + 27269 - 11905: 0x9962, + 27270 - 11905: 0x9963, + 27271 - 11905: 0x9964, + 27272 - 11905: 0x9965, + 27273 - 11905: 0x9966, + 27274 - 11905: 0x9967, + 27275 - 11905: 0x9968, + 27276 - 11905: 0x9969, + 27277 - 11905: 0x996A, + 27278 - 11905: 0xE9D5, + 27279 - 11905: 0x996B, + 27280 - 11905: 0xE9DC, + 27281 - 11905: 0xE9DB, + 27282 - 11905: 0x996C, + 27283 - 11905: 0x996D, + 27284 - 11905: 0x996E, + 27285 - 11905: 0x996F, + 27286 - 11905: 0x9970, + 27287 - 11905: 0xE9DE, + 27288 - 11905: 0x9971, + 27289 - 11905: 0x9972, + 27290 - 11905: 0x9973, + 27291 - 11905: 0x9974, + 27292 - 11905: 0x9975, + 27293 - 11905: 0x9976, + 27294 - 11905: 0x9977, + 27295 - 11905: 0x9978, + 27296 - 11905: 0xE9D1, + 27297 - 11905: 0x9979, + 27298 - 11905: 0x997A, + 27299 - 11905: 0x997B, + 27300 - 11905: 0x997C, + 27301 - 11905: 0x997D, + 27302 - 11905: 0x997E, + 27303 - 11905: 0x9980, + 27304 - 11905: 0x9981, + 27305 - 11905: 0xE9DD, + 27306 - 11905: 0x9982, + 27307 - 11905: 0xE9DF, + 27308 - 11905: 0xC3CA, + 27309 - 11905: 0x9983, + 27310 - 11905: 0x9984, + 27311 - 11905: 0x9985, + 27312 - 11905: 0x9986, + 27313 - 11905: 0x9987, + 27314 - 11905: 0x9988, + 27315 - 11905: 0x9989, + 27316 - 11905: 0x998A, + 27317 - 11905: 0x998B, + 27318 - 11905: 0x998C, + 27319 - 11905: 0x998D, + 27320 - 11905: 0x998E, + 27321 - 11905: 0x998F, + 27322 - 11905: 0x9990, + 27323 - 11905: 0x9991, + 27324 - 11905: 0x9992, + 27325 - 11905: 0x9993, + 27326 - 11905: 0x9994, + 27327 - 11905: 0x9995, + 27328 - 11905: 0x9996, + 27329 - 11905: 0x9997, + 27330 - 11905: 0x9998, + 27331 - 11905: 0x9999, + 27332 - 11905: 0x999A, + 27333 - 11905: 0x999B, + 27334 - 11905: 0x999C, + 27335 - 11905: 0x999D, + 27336 - 11905: 0x999E, + 27337 - 11905: 0x999F, + 27338 - 11905: 0x99A0, + 27339 - 11905: 0x99A1, + 27340 - 11905: 0x99A2, + 27341 - 11905: 0x99A3, + 27342 - 11905: 0x99A4, + 27343 - 11905: 0x99A5, + 27344 - 11905: 0x99A6, + 27345 - 11905: 0x99A7, + 27346 - 11905: 0x99A8, + 27347 - 11905: 0x99A9, + 27348 - 11905: 0x99AA, + 27349 - 11905: 0x99AB, + 27350 - 11905: 0x99AC, + 27351 - 11905: 0x99AD, + 27352 - 11905: 0x99AE, + 27353 - 11905: 0x99AF, + 27354 - 11905: 0x99B0, + 27355 - 11905: 0x99B1, + 27356 - 11905: 0x99B2, + 27357 - 11905: 0x99B3, + 27358 - 11905: 0x99B4, + 27359 - 11905: 0x99B5, + 27360 - 11905: 0x99B6, + 27361 - 11905: 0x99B7, + 27362 - 11905: 0x99B8, + 27363 - 11905: 0x99B9, + 27364 - 11905: 0x99BA, + 27365 - 11905: 0x99BB, + 27366 - 11905: 0x99BC, + 27367 - 11905: 0x99BD, + 27368 - 11905: 0x99BE, + 27369 - 11905: 0x99BF, + 27370 - 11905: 0x99C0, + 27371 - 11905: 0x99C1, + 27372 - 11905: 0x99C2, + 27373 - 11905: 0x99C3, + 27374 - 11905: 0x99C4, + 27375 - 11905: 0x99C5, + 27376 - 11905: 0x99C6, + 27377 - 11905: 0x99C7, + 27378 - 11905: 0x99C8, + 27379 - 11905: 0x99C9, + 27380 - 11905: 0x99CA, + 27381 - 11905: 0x99CB, + 27382 - 11905: 0x99CC, + 27383 - 11905: 0x99CD, + 27384 - 11905: 0x99CE, + 27385 - 11905: 0x99CF, + 27386 - 11905: 0x99D0, + 27387 - 11905: 0x99D1, + 27388 - 11905: 0x99D2, + 27389 - 11905: 0x99D3, + 27390 - 11905: 0x99D4, + 27391 - 11905: 0x99D5, + 27392 - 11905: 0x99D6, + 27393 - 11905: 0x99D7, + 27394 - 11905: 0x99D8, + 27395 - 11905: 0x99D9, + 27396 - 11905: 0x99DA, + 27397 - 11905: 0x99DB, + 27398 - 11905: 0x99DC, + 27399 - 11905: 0x99DD, + 27400 - 11905: 0x99DE, + 27401 - 11905: 0x99DF, + 27402 - 11905: 0x99E0, + 27403 - 11905: 0x99E1, + 27404 - 11905: 0x99E2, + 27405 - 11905: 0x99E3, + 27406 - 11905: 0x99E4, + 27407 - 11905: 0x99E5, + 27408 - 11905: 0x99E6, + 27409 - 11905: 0x99E7, + 27410 - 11905: 0x99E8, + 27411 - 11905: 0x99E9, + 27412 - 11905: 0x99EA, + 27413 - 11905: 0x99EB, + 27414 - 11905: 0x99EC, + 27415 - 11905: 0x99ED, + 27416 - 11905: 0x99EE, + 27417 - 11905: 0x99EF, + 27418 - 11905: 0x99F0, + 27419 - 11905: 0x99F1, + 27420 - 11905: 0x99F2, + 27421 - 11905: 0x99F3, + 27422 - 11905: 0x99F4, + 27423 - 11905: 0x99F5, + 27424 - 11905: 0xC7B7, + 27425 - 11905: 0xB4CE, + 27426 - 11905: 0xBBB6, + 27427 - 11905: 0xD0C0, + 27428 - 11905: 0xECA3, + 27429 - 11905: 0x99F6, + 27430 - 11905: 0x99F7, + 27431 - 11905: 0xC5B7, + 27432 - 11905: 0x99F8, + 27433 - 11905: 0x99F9, + 27434 - 11905: 0x99FA, + 27435 - 11905: 0x99FB, + 27436 - 11905: 0x99FC, + 27437 - 11905: 0x99FD, + 27438 - 11905: 0x99FE, + 27439 - 11905: 0x9A40, + 27440 - 11905: 0x9A41, + 27441 - 11905: 0x9A42, + 27442 - 11905: 0xD3FB, + 27443 - 11905: 0x9A43, + 27444 - 11905: 0x9A44, + 27445 - 11905: 0x9A45, + 27446 - 11905: 0x9A46, + 27447 - 11905: 0xECA4, + 27448 - 11905: 0x9A47, + 27449 - 11905: 0xECA5, + 27450 - 11905: 0xC6DB, + 27451 - 11905: 0x9A48, + 27452 - 11905: 0x9A49, + 27453 - 11905: 0x9A4A, + 27454 - 11905: 0xBFEE, + 27455 - 11905: 0x9A4B, + 27456 - 11905: 0x9A4C, + 27457 - 11905: 0x9A4D, + 27458 - 11905: 0x9A4E, + 27459 - 11905: 0xECA6, + 27460 - 11905: 0x9A4F, + 27461 - 11905: 0x9A50, + 27462 - 11905: 0xECA7, + 27463 - 11905: 0xD0AA, + 27464 - 11905: 0x9A51, + 27465 - 11905: 0xC7B8, + 27466 - 11905: 0x9A52, + 27467 - 11905: 0x9A53, + 27468 - 11905: 0xB8E8, + 27469 - 11905: 0x9A54, + 27470 - 11905: 0x9A55, + 27471 - 11905: 0x9A56, + 27472 - 11905: 0x9A57, + 27473 - 11905: 0x9A58, + 27474 - 11905: 0x9A59, + 27475 - 11905: 0x9A5A, + 27476 - 11905: 0x9A5B, + 27477 - 11905: 0x9A5C, + 27478 - 11905: 0x9A5D, + 27479 - 11905: 0x9A5E, + 27480 - 11905: 0x9A5F, + 27481 - 11905: 0xECA8, + 27482 - 11905: 0x9A60, + 27483 - 11905: 0x9A61, + 27484 - 11905: 0x9A62, + 27485 - 11905: 0x9A63, + 27486 - 11905: 0x9A64, + 27487 - 11905: 0x9A65, + 27488 - 11905: 0x9A66, + 27489 - 11905: 0x9A67, + 27490 - 11905: 0xD6B9, + 27491 - 11905: 0xD5FD, + 27492 - 11905: 0xB4CB, + 27493 - 11905: 0xB2BD, + 27494 - 11905: 0xCEE4, + 27495 - 11905: 0xC6E7, + 27496 - 11905: 0x9A68, + 27497 - 11905: 0x9A69, + 27498 - 11905: 0xCDE1, + 27499 - 11905: 0x9A6A, + 27500 - 11905: 0x9A6B, + 27501 - 11905: 0x9A6C, + 27502 - 11905: 0x9A6D, + 27503 - 11905: 0x9A6E, + 27504 - 11905: 0x9A6F, + 27505 - 11905: 0x9A70, + 27506 - 11905: 0x9A71, + 27507 - 11905: 0x9A72, + 27508 - 11905: 0x9A73, + 27509 - 11905: 0x9A74, + 27510 - 11905: 0x9A75, + 27511 - 11905: 0x9A76, + 27512 - 11905: 0x9A77, + 27513 - 11905: 0xB4F5, + 27514 - 11905: 0x9A78, + 27515 - 11905: 0xCBC0, + 27516 - 11905: 0xBCDF, + 27517 - 11905: 0x9A79, + 27518 - 11905: 0x9A7A, + 27519 - 11905: 0x9A7B, + 27520 - 11905: 0x9A7C, + 27521 - 11905: 0xE9E2, + 27522 - 11905: 0xE9E3, + 27523 - 11905: 0xD1EA, + 27524 - 11905: 0xE9E5, + 27525 - 11905: 0x9A7D, + 27526 - 11905: 0xB4F9, + 27527 - 11905: 0xE9E4, + 27528 - 11905: 0x9A7E, + 27529 - 11905: 0xD1B3, + 27530 - 11905: 0xCAE2, + 27531 - 11905: 0xB2D0, + 27532 - 11905: 0x9A80, + 27533 - 11905: 0xE9E8, + 27534 - 11905: 0x9A81, + 27535 - 11905: 0x9A82, + 27536 - 11905: 0x9A83, + 27537 - 11905: 0x9A84, + 27538 - 11905: 0xE9E6, + 27539 - 11905: 0xE9E7, + 27540 - 11905: 0x9A85, + 27541 - 11905: 0x9A86, + 27542 - 11905: 0xD6B3, + 27543 - 11905: 0x9A87, + 27544 - 11905: 0x9A88, + 27545 - 11905: 0x9A89, + 27546 - 11905: 0xE9E9, + 27547 - 11905: 0xE9EA, + 27548 - 11905: 0x9A8A, + 27549 - 11905: 0x9A8B, + 27550 - 11905: 0x9A8C, + 27551 - 11905: 0x9A8D, + 27552 - 11905: 0x9A8E, + 27553 - 11905: 0xE9EB, + 27554 - 11905: 0x9A8F, + 27555 - 11905: 0x9A90, + 27556 - 11905: 0x9A91, + 27557 - 11905: 0x9A92, + 27558 - 11905: 0x9A93, + 27559 - 11905: 0x9A94, + 27560 - 11905: 0x9A95, + 27561 - 11905: 0x9A96, + 27562 - 11905: 0xE9EC, + 27563 - 11905: 0x9A97, + 27564 - 11905: 0x9A98, + 27565 - 11905: 0x9A99, + 27566 - 11905: 0x9A9A, + 27567 - 11905: 0x9A9B, + 27568 - 11905: 0x9A9C, + 27569 - 11905: 0x9A9D, + 27570 - 11905: 0x9A9E, + 27571 - 11905: 0xECAF, + 27572 - 11905: 0xC5B9, + 27573 - 11905: 0xB6CE, + 27574 - 11905: 0x9A9F, + 27575 - 11905: 0xD2F3, + 27576 - 11905: 0x9AA0, + 27577 - 11905: 0x9AA1, + 27578 - 11905: 0x9AA2, + 27579 - 11905: 0x9AA3, + 27580 - 11905: 0x9AA4, + 27581 - 11905: 0x9AA5, + 27582 - 11905: 0x9AA6, + 27583 - 11905: 0xB5EE, + 27584 - 11905: 0x9AA7, + 27585 - 11905: 0xBBD9, + 27586 - 11905: 0xECB1, + 27587 - 11905: 0x9AA8, + 27588 - 11905: 0x9AA9, + 27589 - 11905: 0xD2E3, + 27590 - 11905: 0x9AAA, + 27591 - 11905: 0x9AAB, + 27592 - 11905: 0x9AAC, + 27593 - 11905: 0x9AAD, + 27594 - 11905: 0x9AAE, + 27595 - 11905: 0xCEE3, + 27596 - 11905: 0x9AAF, + 27597 - 11905: 0xC4B8, + 27598 - 11905: 0x9AB0, + 27599 - 11905: 0xC3BF, + 27600 - 11905: 0x9AB1, + 27601 - 11905: 0x9AB2, + 27602 - 11905: 0xB6BE, + 27603 - 11905: 0xD8B9, + 27604 - 11905: 0xB1C8, + 27605 - 11905: 0xB1CF, + 27606 - 11905: 0xB1D1, + 27607 - 11905: 0xC5FE, + 27608 - 11905: 0x9AB3, + 27609 - 11905: 0xB1D0, + 27610 - 11905: 0x9AB4, + 27611 - 11905: 0xC3AB, + 27612 - 11905: 0x9AB5, + 27613 - 11905: 0x9AB6, + 27614 - 11905: 0x9AB7, + 27615 - 11905: 0x9AB8, + 27616 - 11905: 0x9AB9, + 27617 - 11905: 0xD5B1, + 27618 - 11905: 0x9ABA, + 27619 - 11905: 0x9ABB, + 27620 - 11905: 0x9ABC, + 27621 - 11905: 0x9ABD, + 27622 - 11905: 0x9ABE, + 27623 - 11905: 0x9ABF, + 27624 - 11905: 0x9AC0, + 27625 - 11905: 0x9AC1, + 27626 - 11905: 0xEBA4, + 27627 - 11905: 0xBAC1, + 27628 - 11905: 0x9AC2, + 27629 - 11905: 0x9AC3, + 27630 - 11905: 0x9AC4, + 27631 - 11905: 0xCCBA, + 27632 - 11905: 0x9AC5, + 27633 - 11905: 0x9AC6, + 27634 - 11905: 0x9AC7, + 27635 - 11905: 0xEBA5, + 27636 - 11905: 0x9AC8, + 27637 - 11905: 0xEBA7, + 27638 - 11905: 0x9AC9, + 27639 - 11905: 0x9ACA, + 27640 - 11905: 0x9ACB, + 27641 - 11905: 0xEBA8, + 27642 - 11905: 0x9ACC, + 27643 - 11905: 0x9ACD, + 27644 - 11905: 0x9ACE, + 27645 - 11905: 0xEBA6, + 27646 - 11905: 0x9ACF, + 27647 - 11905: 0x9AD0, + 27648 - 11905: 0x9AD1, + 27649 - 11905: 0x9AD2, + 27650 - 11905: 0x9AD3, + 27651 - 11905: 0x9AD4, + 27652 - 11905: 0x9AD5, + 27653 - 11905: 0xEBA9, + 27654 - 11905: 0xEBAB, + 27655 - 11905: 0xEBAA, + 27656 - 11905: 0x9AD6, + 27657 - 11905: 0x9AD7, + 27658 - 11905: 0x9AD8, + 27659 - 11905: 0x9AD9, + 27660 - 11905: 0x9ADA, + 27661 - 11905: 0xEBAC, + 27662 - 11905: 0x9ADB, + 27663 - 11905: 0xCACF, + 27664 - 11905: 0xD8B5, + 27665 - 11905: 0xC3F1, + 27666 - 11905: 0x9ADC, + 27667 - 11905: 0xC3A5, + 27668 - 11905: 0xC6F8, + 27669 - 11905: 0xEBAD, + 27670 - 11905: 0xC4CA, + 27671 - 11905: 0x9ADD, + 27672 - 11905: 0xEBAE, + 27673 - 11905: 0xEBAF, + 27674 - 11905: 0xEBB0, + 27675 - 11905: 0xB7D5, + 27676 - 11905: 0x9ADE, + 27677 - 11905: 0x9ADF, + 27678 - 11905: 0x9AE0, + 27679 - 11905: 0xB7FA, + 27680 - 11905: 0x9AE1, + 27681 - 11905: 0xEBB1, + 27682 - 11905: 0xC7E2, + 27683 - 11905: 0x9AE2, + 27684 - 11905: 0xEBB3, + 27685 - 11905: 0x9AE3, + 27686 - 11905: 0xBAA4, + 27687 - 11905: 0xD1F5, + 27688 - 11905: 0xB0B1, + 27689 - 11905: 0xEBB2, + 27690 - 11905: 0xEBB4, + 27691 - 11905: 0x9AE4, + 27692 - 11905: 0x9AE5, + 27693 - 11905: 0x9AE6, + 27694 - 11905: 0xB5AA, + 27695 - 11905: 0xC2C8, + 27696 - 11905: 0xC7E8, + 27697 - 11905: 0x9AE7, + 27698 - 11905: 0xEBB5, + 27699 - 11905: 0x9AE8, + 27700 - 11905: 0xCBAE, + 27701 - 11905: 0xE3DF, + 27702 - 11905: 0x9AE9, + 27703 - 11905: 0x9AEA, + 27704 - 11905: 0xD3C0, + 27705 - 11905: 0x9AEB, + 27706 - 11905: 0x9AEC, + 27707 - 11905: 0x9AED, + 27708 - 11905: 0x9AEE, + 27709 - 11905: 0xD9DB, + 27710 - 11905: 0x9AEF, + 27711 - 11905: 0x9AF0, + 27712 - 11905: 0xCDA1, + 27713 - 11905: 0xD6AD, + 27714 - 11905: 0xC7F3, + 27715 - 11905: 0x9AF1, + 27716 - 11905: 0x9AF2, + 27717 - 11905: 0x9AF3, + 27718 - 11905: 0xD9E0, + 27719 - 11905: 0xBBE3, + 27720 - 11905: 0x9AF4, + 27721 - 11905: 0xBABA, + 27722 - 11905: 0xE3E2, + 27723 - 11905: 0x9AF5, + 27724 - 11905: 0x9AF6, + 27725 - 11905: 0x9AF7, + 27726 - 11905: 0x9AF8, + 27727 - 11905: 0x9AF9, + 27728 - 11905: 0xCFAB, + 27729 - 11905: 0x9AFA, + 27730 - 11905: 0x9AFB, + 27731 - 11905: 0x9AFC, + 27732 - 11905: 0xE3E0, + 27733 - 11905: 0xC9C7, + 27734 - 11905: 0x9AFD, + 27735 - 11905: 0xBAB9, + 27736 - 11905: 0x9AFE, + 27737 - 11905: 0x9B40, + 27738 - 11905: 0x9B41, + 27739 - 11905: 0xD1B4, + 27740 - 11905: 0xE3E1, + 27741 - 11905: 0xC8EA, + 27742 - 11905: 0xB9AF, + 27743 - 11905: 0xBDAD, + 27744 - 11905: 0xB3D8, + 27745 - 11905: 0xCEDB, + 27746 - 11905: 0x9B42, + 27747 - 11905: 0x9B43, + 27748 - 11905: 0xCCC0, + 27749 - 11905: 0x9B44, + 27750 - 11905: 0x9B45, + 27751 - 11905: 0x9B46, + 27752 - 11905: 0xE3E8, + 27753 - 11905: 0xE3E9, + 27754 - 11905: 0xCDF4, + 27755 - 11905: 0x9B47, + 27756 - 11905: 0x9B48, + 27757 - 11905: 0x9B49, + 27758 - 11905: 0x9B4A, + 27759 - 11905: 0x9B4B, + 27760 - 11905: 0xCCAD, + 27761 - 11905: 0x9B4C, + 27762 - 11905: 0xBCB3, + 27763 - 11905: 0x9B4D, + 27764 - 11905: 0xE3EA, + 27765 - 11905: 0x9B4E, + 27766 - 11905: 0xE3EB, + 27767 - 11905: 0x9B4F, + 27768 - 11905: 0x9B50, + 27769 - 11905: 0xD0DA, + 27770 - 11905: 0x9B51, + 27771 - 11905: 0x9B52, + 27772 - 11905: 0x9B53, + 27773 - 11905: 0xC6FB, + 27774 - 11905: 0xB7DA, + 27775 - 11905: 0x9B54, + 27776 - 11905: 0x9B55, + 27777 - 11905: 0xC7DF, + 27778 - 11905: 0xD2CA, + 27779 - 11905: 0xCED6, + 27780 - 11905: 0x9B56, + 27781 - 11905: 0xE3E4, + 27782 - 11905: 0xE3EC, + 27783 - 11905: 0x9B57, + 27784 - 11905: 0xC9F2, + 27785 - 11905: 0xB3C1, + 27786 - 11905: 0x9B58, + 27787 - 11905: 0x9B59, + 27788 - 11905: 0xE3E7, + 27789 - 11905: 0x9B5A, + 27790 - 11905: 0x9B5B, + 27791 - 11905: 0xC6E3, + 27792 - 11905: 0xE3E5, + 27793 - 11905: 0x9B5C, + 27794 - 11905: 0x9B5D, + 27795 - 11905: 0xEDB3, + 27796 - 11905: 0xE3E6, + 27797 - 11905: 0x9B5E, + 27798 - 11905: 0x9B5F, + 27799 - 11905: 0x9B60, + 27800 - 11905: 0x9B61, + 27801 - 11905: 0xC9B3, + 27802 - 11905: 0x9B62, + 27803 - 11905: 0xC5E6, + 27804 - 11905: 0x9B63, + 27805 - 11905: 0x9B64, + 27806 - 11905: 0x9B65, + 27807 - 11905: 0xB9B5, + 27808 - 11905: 0x9B66, + 27809 - 11905: 0xC3BB, + 27810 - 11905: 0x9B67, + 27811 - 11905: 0xE3E3, + 27812 - 11905: 0xC5BD, + 27813 - 11905: 0xC1A4, + 27814 - 11905: 0xC2D9, + 27815 - 11905: 0xB2D7, + 27816 - 11905: 0x9B68, + 27817 - 11905: 0xE3ED, + 27818 - 11905: 0xBBA6, + 27819 - 11905: 0xC4AD, + 27820 - 11905: 0x9B69, + 27821 - 11905: 0xE3F0, + 27822 - 11905: 0xBEDA, + 27823 - 11905: 0x9B6A, + 27824 - 11905: 0x9B6B, + 27825 - 11905: 0xE3FB, + 27826 - 11905: 0xE3F5, + 27827 - 11905: 0xBAD3, + 27828 - 11905: 0x9B6C, + 27829 - 11905: 0x9B6D, + 27830 - 11905: 0x9B6E, + 27831 - 11905: 0x9B6F, + 27832 - 11905: 0xB7D0, + 27833 - 11905: 0xD3CD, + 27834 - 11905: 0x9B70, + 27835 - 11905: 0xD6CE, + 27836 - 11905: 0xD5D3, + 27837 - 11905: 0xB9C1, + 27838 - 11905: 0xD5B4, + 27839 - 11905: 0xD1D8, + 27840 - 11905: 0x9B71, + 27841 - 11905: 0x9B72, + 27842 - 11905: 0x9B73, + 27843 - 11905: 0x9B74, + 27844 - 11905: 0xD0B9, + 27845 - 11905: 0xC7F6, + 27846 - 11905: 0x9B75, + 27847 - 11905: 0x9B76, + 27848 - 11905: 0x9B77, + 27849 - 11905: 0xC8AA, + 27850 - 11905: 0xB2B4, + 27851 - 11905: 0x9B78, + 27852 - 11905: 0xC3DA, + 27853 - 11905: 0x9B79, + 27854 - 11905: 0x9B7A, + 27855 - 11905: 0x9B7B, + 27856 - 11905: 0xE3EE, + 27857 - 11905: 0x9B7C, + 27858 - 11905: 0x9B7D, + 27859 - 11905: 0xE3FC, + 27860 - 11905: 0xE3EF, + 27861 - 11905: 0xB7A8, + 27862 - 11905: 0xE3F7, + 27863 - 11905: 0xE3F4, + 27864 - 11905: 0x9B7E, + 27865 - 11905: 0x9B80, + 27866 - 11905: 0x9B81, + 27867 - 11905: 0xB7BA, + 27868 - 11905: 0x9B82, + 27869 - 11905: 0x9B83, + 27870 - 11905: 0xC5A2, + 27871 - 11905: 0x9B84, + 27872 - 11905: 0xE3F6, + 27873 - 11905: 0xC5DD, + 27874 - 11905: 0xB2A8, + 27875 - 11905: 0xC6FC, + 27876 - 11905: 0x9B85, + 27877 - 11905: 0xC4E0, + 27878 - 11905: 0x9B86, + 27879 - 11905: 0x9B87, + 27880 - 11905: 0xD7A2, + 27881 - 11905: 0x9B88, + 27882 - 11905: 0xC0E1, + 27883 - 11905: 0xE3F9, + 27884 - 11905: 0x9B89, + 27885 - 11905: 0x9B8A, + 27886 - 11905: 0xE3FA, + 27887 - 11905: 0xE3FD, + 27888 - 11905: 0xCCA9, + 27889 - 11905: 0xE3F3, + 27890 - 11905: 0x9B8B, + 27891 - 11905: 0xD3BE, + 27892 - 11905: 0x9B8C, + 27893 - 11905: 0xB1C3, + 27894 - 11905: 0xEDB4, + 27895 - 11905: 0xE3F1, + 27896 - 11905: 0xE3F2, + 27897 - 11905: 0x9B8D, + 27898 - 11905: 0xE3F8, + 27899 - 11905: 0xD0BA, + 27900 - 11905: 0xC6C3, + 27901 - 11905: 0xD4F3, + 27902 - 11905: 0xE3FE, + 27903 - 11905: 0x9B8E, + 27904 - 11905: 0x9B8F, + 27905 - 11905: 0xBDE0, + 27906 - 11905: 0x9B90, + 27907 - 11905: 0x9B91, + 27908 - 11905: 0xE4A7, + 27909 - 11905: 0x9B92, + 27910 - 11905: 0x9B93, + 27911 - 11905: 0xE4A6, + 27912 - 11905: 0x9B94, + 27913 - 11905: 0x9B95, + 27914 - 11905: 0x9B96, + 27915 - 11905: 0xD1F3, + 27916 - 11905: 0xE4A3, + 27917 - 11905: 0x9B97, + 27918 - 11905: 0xE4A9, + 27919 - 11905: 0x9B98, + 27920 - 11905: 0x9B99, + 27921 - 11905: 0x9B9A, + 27922 - 11905: 0xC8F7, + 27923 - 11905: 0x9B9B, + 27924 - 11905: 0x9B9C, + 27925 - 11905: 0x9B9D, + 27926 - 11905: 0x9B9E, + 27927 - 11905: 0xCFB4, + 27928 - 11905: 0x9B9F, + 27929 - 11905: 0xE4A8, + 27930 - 11905: 0xE4AE, + 27931 - 11905: 0xC2E5, + 27932 - 11905: 0x9BA0, + 27933 - 11905: 0x9BA1, + 27934 - 11905: 0xB6B4, + 27935 - 11905: 0x9BA2, + 27936 - 11905: 0x9BA3, + 27937 - 11905: 0x9BA4, + 27938 - 11905: 0x9BA5, + 27939 - 11905: 0x9BA6, + 27940 - 11905: 0x9BA7, + 27941 - 11905: 0xBDF2, + 27942 - 11905: 0x9BA8, + 27943 - 11905: 0xE4A2, + 27944 - 11905: 0x9BA9, + 27945 - 11905: 0x9BAA, + 27946 - 11905: 0xBAE9, + 27947 - 11905: 0xE4AA, + 27948 - 11905: 0x9BAB, + 27949 - 11905: 0x9BAC, + 27950 - 11905: 0xE4AC, + 27951 - 11905: 0x9BAD, + 27952 - 11905: 0x9BAE, + 27953 - 11905: 0xB6FD, + 27954 - 11905: 0xD6DE, + 27955 - 11905: 0xE4B2, + 27956 - 11905: 0x9BAF, + 27957 - 11905: 0xE4AD, + 27958 - 11905: 0x9BB0, + 27959 - 11905: 0x9BB1, + 27960 - 11905: 0x9BB2, + 27961 - 11905: 0xE4A1, + 27962 - 11905: 0x9BB3, + 27963 - 11905: 0xBBEE, + 27964 - 11905: 0xCDDD, + 27965 - 11905: 0xC7A2, + 27966 - 11905: 0xC5C9, + 27967 - 11905: 0x9BB4, + 27968 - 11905: 0x9BB5, + 27969 - 11905: 0xC1F7, + 27970 - 11905: 0x9BB6, + 27971 - 11905: 0xE4A4, + 27972 - 11905: 0x9BB7, + 27973 - 11905: 0xC7B3, + 27974 - 11905: 0xBDAC, + 27975 - 11905: 0xBDBD, + 27976 - 11905: 0xE4A5, + 27977 - 11905: 0x9BB8, + 27978 - 11905: 0xD7C7, + 27979 - 11905: 0xB2E2, + 27980 - 11905: 0x9BB9, + 27981 - 11905: 0xE4AB, + 27982 - 11905: 0xBCC3, + 27983 - 11905: 0xE4AF, + 27984 - 11905: 0x9BBA, + 27985 - 11905: 0xBBEB, + 27986 - 11905: 0xE4B0, + 27987 - 11905: 0xC5A8, + 27988 - 11905: 0xE4B1, + 27989 - 11905: 0x9BBB, + 27990 - 11905: 0x9BBC, + 27991 - 11905: 0x9BBD, + 27992 - 11905: 0x9BBE, + 27993 - 11905: 0xD5E3, + 27994 - 11905: 0xBFA3, + 27995 - 11905: 0x9BBF, + 27996 - 11905: 0xE4BA, + 27997 - 11905: 0x9BC0, + 27998 - 11905: 0xE4B7, + 27999 - 11905: 0x9BC1, + 28000 - 11905: 0xE4BB, + 28001 - 11905: 0x9BC2, + 28002 - 11905: 0x9BC3, + 28003 - 11905: 0xE4BD, + 28004 - 11905: 0x9BC4, + 28005 - 11905: 0x9BC5, + 28006 - 11905: 0xC6D6, + 28007 - 11905: 0x9BC6, + 28008 - 11905: 0x9BC7, + 28009 - 11905: 0xBAC6, + 28010 - 11905: 0xC0CB, + 28011 - 11905: 0x9BC8, + 28012 - 11905: 0x9BC9, + 28013 - 11905: 0x9BCA, + 28014 - 11905: 0xB8A1, + 28015 - 11905: 0xE4B4, + 28016 - 11905: 0x9BCB, + 28017 - 11905: 0x9BCC, + 28018 - 11905: 0x9BCD, + 28019 - 11905: 0x9BCE, + 28020 - 11905: 0xD4A1, + 28021 - 11905: 0x9BCF, + 28022 - 11905: 0x9BD0, + 28023 - 11905: 0xBAA3, + 28024 - 11905: 0xBDFE, + 28025 - 11905: 0x9BD1, + 28026 - 11905: 0x9BD2, + 28027 - 11905: 0x9BD3, + 28028 - 11905: 0xE4BC, + 28029 - 11905: 0x9BD4, + 28030 - 11905: 0x9BD5, + 28031 - 11905: 0x9BD6, + 28032 - 11905: 0x9BD7, + 28033 - 11905: 0x9BD8, + 28034 - 11905: 0xCDBF, + 28035 - 11905: 0x9BD9, + 28036 - 11905: 0x9BDA, + 28037 - 11905: 0xC4F9, + 28038 - 11905: 0x9BDB, + 28039 - 11905: 0x9BDC, + 28040 - 11905: 0xCFFB, + 28041 - 11905: 0xC9E6, + 28042 - 11905: 0x9BDD, + 28043 - 11905: 0x9BDE, + 28044 - 11905: 0xD3BF, + 28045 - 11905: 0x9BDF, + 28046 - 11905: 0xCFD1, + 28047 - 11905: 0x9BE0, + 28048 - 11905: 0x9BE1, + 28049 - 11905: 0xE4B3, + 28050 - 11905: 0x9BE2, + 28051 - 11905: 0xE4B8, + 28052 - 11905: 0xE4B9, + 28053 - 11905: 0xCCE9, + 28054 - 11905: 0x9BE3, + 28055 - 11905: 0x9BE4, + 28056 - 11905: 0x9BE5, + 28057 - 11905: 0x9BE6, + 28058 - 11905: 0x9BE7, + 28059 - 11905: 0xCCCE, + 28060 - 11905: 0x9BE8, + 28061 - 11905: 0xC0D4, + 28062 - 11905: 0xE4B5, + 28063 - 11905: 0xC1B0, + 28064 - 11905: 0xE4B6, + 28065 - 11905: 0xCED0, + 28066 - 11905: 0x9BE9, + 28067 - 11905: 0xBBC1, + 28068 - 11905: 0xB5D3, + 28069 - 11905: 0x9BEA, + 28070 - 11905: 0xC8F3, + 28071 - 11905: 0xBDA7, + 28072 - 11905: 0xD5C7, + 28073 - 11905: 0xC9AC, + 28074 - 11905: 0xB8A2, + 28075 - 11905: 0xE4CA, + 28076 - 11905: 0x9BEB, + 28077 - 11905: 0x9BEC, + 28078 - 11905: 0xE4CC, + 28079 - 11905: 0xD1C4, + 28080 - 11905: 0x9BED, + 28081 - 11905: 0x9BEE, + 28082 - 11905: 0xD2BA, + 28083 - 11905: 0x9BEF, + 28084 - 11905: 0x9BF0, + 28085 - 11905: 0xBAAD, + 28086 - 11905: 0x9BF1, + 28087 - 11905: 0x9BF2, + 28088 - 11905: 0xBAD4, + 28089 - 11905: 0x9BF3, + 28090 - 11905: 0x9BF4, + 28091 - 11905: 0x9BF5, + 28092 - 11905: 0x9BF6, + 28093 - 11905: 0x9BF7, + 28094 - 11905: 0x9BF8, + 28095 - 11905: 0xE4C3, + 28096 - 11905: 0xB5ED, + 28097 - 11905: 0x9BF9, + 28098 - 11905: 0x9BFA, + 28099 - 11905: 0x9BFB, + 28100 - 11905: 0xD7CD, + 28101 - 11905: 0xE4C0, + 28102 - 11905: 0xCFFD, + 28103 - 11905: 0xE4BF, + 28104 - 11905: 0x9BFC, + 28105 - 11905: 0x9BFD, + 28106 - 11905: 0x9BFE, + 28107 - 11905: 0xC1DC, + 28108 - 11905: 0xCCCA, + 28109 - 11905: 0x9C40, + 28110 - 11905: 0x9C41, + 28111 - 11905: 0x9C42, + 28112 - 11905: 0x9C43, + 28113 - 11905: 0xCAE7, + 28114 - 11905: 0x9C44, + 28115 - 11905: 0x9C45, + 28116 - 11905: 0x9C46, + 28117 - 11905: 0x9C47, + 28118 - 11905: 0xC4D7, + 28119 - 11905: 0x9C48, + 28120 - 11905: 0xCCD4, + 28121 - 11905: 0xE4C8, + 28122 - 11905: 0x9C49, + 28123 - 11905: 0x9C4A, + 28124 - 11905: 0x9C4B, + 28125 - 11905: 0xE4C7, + 28126 - 11905: 0xE4C1, + 28127 - 11905: 0x9C4C, + 28128 - 11905: 0xE4C4, + 28129 - 11905: 0xB5AD, + 28130 - 11905: 0x9C4D, + 28131 - 11905: 0x9C4E, + 28132 - 11905: 0xD3D9, + 28133 - 11905: 0x9C4F, + 28134 - 11905: 0xE4C6, + 28135 - 11905: 0x9C50, + 28136 - 11905: 0x9C51, + 28137 - 11905: 0x9C52, + 28138 - 11905: 0x9C53, + 28139 - 11905: 0xD2F9, + 28140 - 11905: 0xB4E3, + 28141 - 11905: 0x9C54, + 28142 - 11905: 0xBBB4, + 28143 - 11905: 0x9C55, + 28144 - 11905: 0x9C56, + 28145 - 11905: 0xC9EE, + 28146 - 11905: 0x9C57, + 28147 - 11905: 0xB4BE, + 28148 - 11905: 0x9C58, + 28149 - 11905: 0x9C59, + 28150 - 11905: 0x9C5A, + 28151 - 11905: 0xBBEC, + 28152 - 11905: 0x9C5B, + 28153 - 11905: 0xD1CD, + 28154 - 11905: 0x9C5C, + 28155 - 11905: 0xCCED, + 28156 - 11905: 0xEDB5, + 28157 - 11905: 0x9C5D, + 28158 - 11905: 0x9C5E, + 28159 - 11905: 0x9C5F, + 28160 - 11905: 0x9C60, + 28161 - 11905: 0x9C61, + 28162 - 11905: 0x9C62, + 28163 - 11905: 0x9C63, + 28164 - 11905: 0x9C64, + 28165 - 11905: 0xC7E5, + 28166 - 11905: 0x9C65, + 28167 - 11905: 0x9C66, + 28168 - 11905: 0x9C67, + 28169 - 11905: 0x9C68, + 28170 - 11905: 0xD4A8, + 28171 - 11905: 0x9C69, + 28172 - 11905: 0xE4CB, + 28173 - 11905: 0xD7D5, + 28174 - 11905: 0xE4C2, + 28175 - 11905: 0x9C6A, + 28176 - 11905: 0xBDA5, + 28177 - 11905: 0xE4C5, + 28178 - 11905: 0x9C6B, + 28179 - 11905: 0x9C6C, + 28180 - 11905: 0xD3E6, + 28181 - 11905: 0x9C6D, + 28182 - 11905: 0xE4C9, + 28183 - 11905: 0xC9F8, + 28184 - 11905: 0x9C6E, + 28185 - 11905: 0x9C6F, + 28186 - 11905: 0xE4BE, + 28187 - 11905: 0x9C70, + 28188 - 11905: 0x9C71, + 28189 - 11905: 0xD3E5, + 28190 - 11905: 0x9C72, + 28191 - 11905: 0x9C73, + 28192 - 11905: 0xC7FE, + 28193 - 11905: 0xB6C9, + 28194 - 11905: 0x9C74, + 28195 - 11905: 0xD4FC, + 28196 - 11905: 0xB2B3, + 28197 - 11905: 0xE4D7, + 28198 - 11905: 0x9C75, + 28199 - 11905: 0x9C76, + 28200 - 11905: 0x9C77, + 28201 - 11905: 0xCEC2, + 28202 - 11905: 0x9C78, + 28203 - 11905: 0xE4CD, + 28204 - 11905: 0x9C79, + 28205 - 11905: 0xCEBC, + 28206 - 11905: 0x9C7A, + 28207 - 11905: 0xB8DB, + 28208 - 11905: 0x9C7B, + 28209 - 11905: 0x9C7C, + 28210 - 11905: 0xE4D6, + 28211 - 11905: 0x9C7D, + 28212 - 11905: 0xBFCA, + 28213 - 11905: 0x9C7E, + 28214 - 11905: 0x9C80, + 28215 - 11905: 0x9C81, + 28216 - 11905: 0xD3CE, + 28217 - 11905: 0x9C82, + 28218 - 11905: 0xC3EC, + 28219 - 11905: 0x9C83, + 28220 - 11905: 0x9C84, + 28221 - 11905: 0x9C85, + 28222 - 11905: 0x9C86, + 28223 - 11905: 0x9C87, + 28224 - 11905: 0x9C88, + 28225 - 11905: 0x9C89, + 28226 - 11905: 0x9C8A, + 28227 - 11905: 0xC5C8, + 28228 - 11905: 0xE4D8, + 28229 - 11905: 0x9C8B, + 28230 - 11905: 0x9C8C, + 28231 - 11905: 0x9C8D, + 28232 - 11905: 0x9C8E, + 28233 - 11905: 0x9C8F, + 28234 - 11905: 0x9C90, + 28235 - 11905: 0x9C91, + 28236 - 11905: 0x9C92, + 28237 - 11905: 0xCDC4, + 28238 - 11905: 0xE4CF, + 28239 - 11905: 0x9C93, + 28240 - 11905: 0x9C94, + 28241 - 11905: 0x9C95, + 28242 - 11905: 0x9C96, + 28243 - 11905: 0xE4D4, + 28244 - 11905: 0xE4D5, + 28245 - 11905: 0x9C97, + 28246 - 11905: 0xBAFE, + 28247 - 11905: 0x9C98, + 28248 - 11905: 0xCFE6, + 28249 - 11905: 0x9C99, + 28250 - 11905: 0x9C9A, + 28251 - 11905: 0xD5BF, + 28252 - 11905: 0x9C9B, + 28253 - 11905: 0x9C9C, + 28254 - 11905: 0x9C9D, + 28255 - 11905: 0xE4D2, + 28256 - 11905: 0x9C9E, + 28257 - 11905: 0x9C9F, + 28258 - 11905: 0x9CA0, + 28259 - 11905: 0x9CA1, + 28260 - 11905: 0x9CA2, + 28261 - 11905: 0x9CA3, + 28262 - 11905: 0x9CA4, + 28263 - 11905: 0x9CA5, + 28264 - 11905: 0x9CA6, + 28265 - 11905: 0x9CA7, + 28266 - 11905: 0x9CA8, + 28267 - 11905: 0xE4D0, + 28268 - 11905: 0x9CA9, + 28269 - 11905: 0x9CAA, + 28270 - 11905: 0xE4CE, + 28271 - 11905: 0x9CAB, + 28272 - 11905: 0x9CAC, + 28273 - 11905: 0x9CAD, + 28274 - 11905: 0x9CAE, + 28275 - 11905: 0x9CAF, + 28276 - 11905: 0x9CB0, + 28277 - 11905: 0x9CB1, + 28278 - 11905: 0x9CB2, + 28279 - 11905: 0x9CB3, + 28280 - 11905: 0x9CB4, + 28281 - 11905: 0x9CB5, + 28282 - 11905: 0x9CB6, + 28283 - 11905: 0x9CB7, + 28284 - 11905: 0x9CB8, + 28285 - 11905: 0x9CB9, + 28286 - 11905: 0xCDE5, + 28287 - 11905: 0xCAAA, + 28288 - 11905: 0x9CBA, + 28289 - 11905: 0x9CBB, + 28290 - 11905: 0x9CBC, + 28291 - 11905: 0xC0A3, + 28292 - 11905: 0x9CBD, + 28293 - 11905: 0xBDA6, + 28294 - 11905: 0xE4D3, + 28295 - 11905: 0x9CBE, + 28296 - 11905: 0x9CBF, + 28297 - 11905: 0xB8C8, + 28298 - 11905: 0x9CC0, + 28299 - 11905: 0x9CC1, + 28300 - 11905: 0x9CC2, + 28301 - 11905: 0x9CC3, + 28302 - 11905: 0x9CC4, + 28303 - 11905: 0xE4E7, + 28304 - 11905: 0xD4B4, + 28305 - 11905: 0x9CC5, + 28306 - 11905: 0x9CC6, + 28307 - 11905: 0x9CC7, + 28308 - 11905: 0x9CC8, + 28309 - 11905: 0x9CC9, + 28310 - 11905: 0x9CCA, + 28311 - 11905: 0x9CCB, + 28312 - 11905: 0xE4DB, + 28313 - 11905: 0x9CCC, + 28314 - 11905: 0x9CCD, + 28315 - 11905: 0x9CCE, + 28316 - 11905: 0xC1EF, + 28317 - 11905: 0x9CCF, + 28318 - 11905: 0x9CD0, + 28319 - 11905: 0xE4E9, + 28320 - 11905: 0x9CD1, + 28321 - 11905: 0x9CD2, + 28322 - 11905: 0xD2E7, + 28323 - 11905: 0x9CD3, + 28324 - 11905: 0x9CD4, + 28325 - 11905: 0xE4DF, + 28326 - 11905: 0x9CD5, + 28327 - 11905: 0xE4E0, + 28328 - 11905: 0x9CD6, + 28329 - 11905: 0x9CD7, + 28330 - 11905: 0xCFAA, + 28331 - 11905: 0x9CD8, + 28332 - 11905: 0x9CD9, + 28333 - 11905: 0x9CDA, + 28334 - 11905: 0x9CDB, + 28335 - 11905: 0xCBDD, + 28336 - 11905: 0x9CDC, + 28337 - 11905: 0xE4DA, + 28338 - 11905: 0xE4D1, + 28339 - 11905: 0x9CDD, + 28340 - 11905: 0xE4E5, + 28341 - 11905: 0x9CDE, + 28342 - 11905: 0xC8DC, + 28343 - 11905: 0xE4E3, + 28344 - 11905: 0x9CDF, + 28345 - 11905: 0x9CE0, + 28346 - 11905: 0xC4E7, + 28347 - 11905: 0xE4E2, + 28348 - 11905: 0x9CE1, + 28349 - 11905: 0xE4E1, + 28350 - 11905: 0x9CE2, + 28351 - 11905: 0x9CE3, + 28352 - 11905: 0x9CE4, + 28353 - 11905: 0xB3FC, + 28354 - 11905: 0xE4E8, + 28355 - 11905: 0x9CE5, + 28356 - 11905: 0x9CE6, + 28357 - 11905: 0x9CE7, + 28358 - 11905: 0x9CE8, + 28359 - 11905: 0xB5E1, + 28360 - 11905: 0x9CE9, + 28361 - 11905: 0x9CEA, + 28362 - 11905: 0x9CEB, + 28363 - 11905: 0xD7CC, + 28364 - 11905: 0x9CEC, + 28365 - 11905: 0x9CED, + 28366 - 11905: 0x9CEE, + 28367 - 11905: 0xE4E6, + 28368 - 11905: 0x9CEF, + 28369 - 11905: 0xBBAC, + 28370 - 11905: 0x9CF0, + 28371 - 11905: 0xD7D2, + 28372 - 11905: 0xCCCF, + 28373 - 11905: 0xEBF8, + 28374 - 11905: 0x9CF1, + 28375 - 11905: 0xE4E4, + 28376 - 11905: 0x9CF2, + 28377 - 11905: 0x9CF3, + 28378 - 11905: 0xB9F6, + 28379 - 11905: 0x9CF4, + 28380 - 11905: 0x9CF5, + 28381 - 11905: 0x9CF6, + 28382 - 11905: 0xD6CD, + 28383 - 11905: 0xE4D9, + 28384 - 11905: 0xE4DC, + 28385 - 11905: 0xC2FA, + 28386 - 11905: 0xE4DE, + 28387 - 11905: 0x9CF7, + 28388 - 11905: 0xC2CB, + 28389 - 11905: 0xC0C4, + 28390 - 11905: 0xC2D0, + 28391 - 11905: 0x9CF8, + 28392 - 11905: 0xB1F5, + 28393 - 11905: 0xCCB2, + 28394 - 11905: 0x9CF9, + 28395 - 11905: 0x9CFA, + 28396 - 11905: 0x9CFB, + 28397 - 11905: 0x9CFC, + 28398 - 11905: 0x9CFD, + 28399 - 11905: 0x9CFE, + 28400 - 11905: 0x9D40, + 28401 - 11905: 0x9D41, + 28402 - 11905: 0x9D42, + 28403 - 11905: 0x9D43, + 28404 - 11905: 0xB5CE, + 28405 - 11905: 0x9D44, + 28406 - 11905: 0x9D45, + 28407 - 11905: 0x9D46, + 28408 - 11905: 0x9D47, + 28409 - 11905: 0xE4EF, + 28410 - 11905: 0x9D48, + 28411 - 11905: 0x9D49, + 28412 - 11905: 0x9D4A, + 28413 - 11905: 0x9D4B, + 28414 - 11905: 0x9D4C, + 28415 - 11905: 0x9D4D, + 28416 - 11905: 0x9D4E, + 28417 - 11905: 0x9D4F, + 28418 - 11905: 0xC6AF, + 28419 - 11905: 0x9D50, + 28420 - 11905: 0x9D51, + 28421 - 11905: 0x9D52, + 28422 - 11905: 0xC6E1, + 28423 - 11905: 0x9D53, + 28424 - 11905: 0x9D54, + 28425 - 11905: 0xE4F5, + 28426 - 11905: 0x9D55, + 28427 - 11905: 0x9D56, + 28428 - 11905: 0x9D57, + 28429 - 11905: 0x9D58, + 28430 - 11905: 0x9D59, + 28431 - 11905: 0xC2A9, + 28432 - 11905: 0x9D5A, + 28433 - 11905: 0x9D5B, + 28434 - 11905: 0x9D5C, + 28435 - 11905: 0xC0EC, + 28436 - 11905: 0xD1DD, + 28437 - 11905: 0xE4EE, + 28438 - 11905: 0x9D5D, + 28439 - 11905: 0x9D5E, + 28440 - 11905: 0x9D5F, + 28441 - 11905: 0x9D60, + 28442 - 11905: 0x9D61, + 28443 - 11905: 0x9D62, + 28444 - 11905: 0x9D63, + 28445 - 11905: 0x9D64, + 28446 - 11905: 0x9D65, + 28447 - 11905: 0x9D66, + 28448 - 11905: 0xC4AE, + 28449 - 11905: 0x9D67, + 28450 - 11905: 0x9D68, + 28451 - 11905: 0x9D69, + 28452 - 11905: 0xE4ED, + 28453 - 11905: 0x9D6A, + 28454 - 11905: 0x9D6B, + 28455 - 11905: 0x9D6C, + 28456 - 11905: 0x9D6D, + 28457 - 11905: 0xE4F6, + 28458 - 11905: 0xE4F4, + 28459 - 11905: 0xC2FE, + 28460 - 11905: 0x9D6E, + 28461 - 11905: 0xE4DD, + 28462 - 11905: 0x9D6F, + 28463 - 11905: 0xE4F0, + 28464 - 11905: 0x9D70, + 28465 - 11905: 0xCAFE, + 28466 - 11905: 0x9D71, + 28467 - 11905: 0xD5C4, + 28468 - 11905: 0x9D72, + 28469 - 11905: 0x9D73, + 28470 - 11905: 0xE4F1, + 28471 - 11905: 0x9D74, + 28472 - 11905: 0x9D75, + 28473 - 11905: 0x9D76, + 28474 - 11905: 0x9D77, + 28475 - 11905: 0x9D78, + 28476 - 11905: 0x9D79, + 28477 - 11905: 0x9D7A, + 28478 - 11905: 0xD1FA, + 28479 - 11905: 0x9D7B, + 28480 - 11905: 0x9D7C, + 28481 - 11905: 0x9D7D, + 28482 - 11905: 0x9D7E, + 28483 - 11905: 0x9D80, + 28484 - 11905: 0x9D81, + 28485 - 11905: 0x9D82, + 28486 - 11905: 0xE4EB, + 28487 - 11905: 0xE4EC, + 28488 - 11905: 0x9D83, + 28489 - 11905: 0x9D84, + 28490 - 11905: 0x9D85, + 28491 - 11905: 0xE4F2, + 28492 - 11905: 0x9D86, + 28493 - 11905: 0xCEAB, + 28494 - 11905: 0x9D87, + 28495 - 11905: 0x9D88, + 28496 - 11905: 0x9D89, + 28497 - 11905: 0x9D8A, + 28498 - 11905: 0x9D8B, + 28499 - 11905: 0x9D8C, + 28500 - 11905: 0x9D8D, + 28501 - 11905: 0x9D8E, + 28502 - 11905: 0x9D8F, + 28503 - 11905: 0x9D90, + 28504 - 11905: 0xC5CB, + 28505 - 11905: 0x9D91, + 28506 - 11905: 0x9D92, + 28507 - 11905: 0x9D93, + 28508 - 11905: 0xC7B1, + 28509 - 11905: 0x9D94, + 28510 - 11905: 0xC2BA, + 28511 - 11905: 0x9D95, + 28512 - 11905: 0x9D96, + 28513 - 11905: 0x9D97, + 28514 - 11905: 0xE4EA, + 28515 - 11905: 0x9D98, + 28516 - 11905: 0x9D99, + 28517 - 11905: 0x9D9A, + 28518 - 11905: 0xC1CA, + 28519 - 11905: 0x9D9B, + 28520 - 11905: 0x9D9C, + 28521 - 11905: 0x9D9D, + 28522 - 11905: 0x9D9E, + 28523 - 11905: 0x9D9F, + 28524 - 11905: 0x9DA0, + 28525 - 11905: 0xCCB6, + 28526 - 11905: 0xB3B1, + 28527 - 11905: 0x9DA1, + 28528 - 11905: 0x9DA2, + 28529 - 11905: 0x9DA3, + 28530 - 11905: 0xE4FB, + 28531 - 11905: 0x9DA4, + 28532 - 11905: 0xE4F3, + 28533 - 11905: 0x9DA5, + 28534 - 11905: 0x9DA6, + 28535 - 11905: 0x9DA7, + 28536 - 11905: 0xE4FA, + 28537 - 11905: 0x9DA8, + 28538 - 11905: 0xE4FD, + 28539 - 11905: 0x9DA9, + 28540 - 11905: 0xE4FC, + 28541 - 11905: 0x9DAA, + 28542 - 11905: 0x9DAB, + 28543 - 11905: 0x9DAC, + 28544 - 11905: 0x9DAD, + 28545 - 11905: 0x9DAE, + 28546 - 11905: 0x9DAF, + 28547 - 11905: 0x9DB0, + 28548 - 11905: 0xB3CE, + 28549 - 11905: 0x9DB1, + 28550 - 11905: 0x9DB2, + 28551 - 11905: 0x9DB3, + 28552 - 11905: 0xB3BA, + 28553 - 11905: 0xE4F7, + 28554 - 11905: 0x9DB4, + 28555 - 11905: 0x9DB5, + 28556 - 11905: 0xE4F9, + 28557 - 11905: 0xE4F8, + 28558 - 11905: 0xC5EC, + 28559 - 11905: 0x9DB6, + 28560 - 11905: 0x9DB7, + 28561 - 11905: 0x9DB8, + 28562 - 11905: 0x9DB9, + 28563 - 11905: 0x9DBA, + 28564 - 11905: 0x9DBB, + 28565 - 11905: 0x9DBC, + 28566 - 11905: 0x9DBD, + 28567 - 11905: 0x9DBE, + 28568 - 11905: 0x9DBF, + 28569 - 11905: 0x9DC0, + 28570 - 11905: 0x9DC1, + 28571 - 11905: 0x9DC2, + 28572 - 11905: 0xC0BD, + 28573 - 11905: 0x9DC3, + 28574 - 11905: 0x9DC4, + 28575 - 11905: 0x9DC5, + 28576 - 11905: 0x9DC6, + 28577 - 11905: 0xD4E8, + 28578 - 11905: 0x9DC7, + 28579 - 11905: 0x9DC8, + 28580 - 11905: 0x9DC9, + 28581 - 11905: 0x9DCA, + 28582 - 11905: 0x9DCB, + 28583 - 11905: 0xE5A2, + 28584 - 11905: 0x9DCC, + 28585 - 11905: 0x9DCD, + 28586 - 11905: 0x9DCE, + 28587 - 11905: 0x9DCF, + 28588 - 11905: 0x9DD0, + 28589 - 11905: 0x9DD1, + 28590 - 11905: 0x9DD2, + 28591 - 11905: 0x9DD3, + 28592 - 11905: 0x9DD4, + 28593 - 11905: 0x9DD5, + 28594 - 11905: 0x9DD6, + 28595 - 11905: 0xB0C4, + 28596 - 11905: 0x9DD7, + 28597 - 11905: 0x9DD8, + 28598 - 11905: 0xE5A4, + 28599 - 11905: 0x9DD9, + 28600 - 11905: 0x9DDA, + 28601 - 11905: 0xE5A3, + 28602 - 11905: 0x9DDB, + 28603 - 11905: 0x9DDC, + 28604 - 11905: 0x9DDD, + 28605 - 11905: 0x9DDE, + 28606 - 11905: 0x9DDF, + 28607 - 11905: 0x9DE0, + 28608 - 11905: 0xBCA4, + 28609 - 11905: 0x9DE1, + 28610 - 11905: 0xE5A5, + 28611 - 11905: 0x9DE2, + 28612 - 11905: 0x9DE3, + 28613 - 11905: 0x9DE4, + 28614 - 11905: 0x9DE5, + 28615 - 11905: 0x9DE6, + 28616 - 11905: 0x9DE7, + 28617 - 11905: 0xE5A1, + 28618 - 11905: 0x9DE8, + 28619 - 11905: 0x9DE9, + 28620 - 11905: 0x9DEA, + 28621 - 11905: 0x9DEB, + 28622 - 11905: 0x9DEC, + 28623 - 11905: 0x9DED, + 28624 - 11905: 0x9DEE, + 28625 - 11905: 0xE4FE, + 28626 - 11905: 0xB1F4, + 28627 - 11905: 0x9DEF, + 28628 - 11905: 0x9DF0, + 28629 - 11905: 0x9DF1, + 28630 - 11905: 0x9DF2, + 28631 - 11905: 0x9DF3, + 28632 - 11905: 0x9DF4, + 28633 - 11905: 0x9DF5, + 28634 - 11905: 0x9DF6, + 28635 - 11905: 0x9DF7, + 28636 - 11905: 0x9DF8, + 28637 - 11905: 0x9DF9, + 28638 - 11905: 0xE5A8, + 28639 - 11905: 0x9DFA, + 28640 - 11905: 0xE5A9, + 28641 - 11905: 0xE5A6, + 28642 - 11905: 0x9DFB, + 28643 - 11905: 0x9DFC, + 28644 - 11905: 0x9DFD, + 28645 - 11905: 0x9DFE, + 28646 - 11905: 0x9E40, + 28647 - 11905: 0x9E41, + 28648 - 11905: 0x9E42, + 28649 - 11905: 0x9E43, + 28650 - 11905: 0x9E44, + 28651 - 11905: 0x9E45, + 28652 - 11905: 0x9E46, + 28653 - 11905: 0x9E47, + 28654 - 11905: 0xE5A7, + 28655 - 11905: 0xE5AA, + 28656 - 11905: 0x9E48, + 28657 - 11905: 0x9E49, + 28658 - 11905: 0x9E4A, + 28659 - 11905: 0x9E4B, + 28660 - 11905: 0x9E4C, + 28661 - 11905: 0x9E4D, + 28662 - 11905: 0x9E4E, + 28663 - 11905: 0x9E4F, + 28664 - 11905: 0x9E50, + 28665 - 11905: 0x9E51, + 28666 - 11905: 0x9E52, + 28667 - 11905: 0x9E53, + 28668 - 11905: 0x9E54, + 28669 - 11905: 0x9E55, + 28670 - 11905: 0x9E56, + 28671 - 11905: 0x9E57, + 28672 - 11905: 0x9E58, + 28673 - 11905: 0x9E59, + 28674 - 11905: 0x9E5A, + 28675 - 11905: 0x9E5B, + 28676 - 11905: 0x9E5C, + 28677 - 11905: 0x9E5D, + 28678 - 11905: 0x9E5E, + 28679 - 11905: 0x9E5F, + 28680 - 11905: 0x9E60, + 28681 - 11905: 0x9E61, + 28682 - 11905: 0x9E62, + 28683 - 11905: 0x9E63, + 28684 - 11905: 0x9E64, + 28685 - 11905: 0x9E65, + 28686 - 11905: 0x9E66, + 28687 - 11905: 0x9E67, + 28688 - 11905: 0x9E68, + 28689 - 11905: 0xC6D9, + 28690 - 11905: 0x9E69, + 28691 - 11905: 0x9E6A, + 28692 - 11905: 0x9E6B, + 28693 - 11905: 0x9E6C, + 28694 - 11905: 0x9E6D, + 28695 - 11905: 0x9E6E, + 28696 - 11905: 0x9E6F, + 28697 - 11905: 0x9E70, + 28698 - 11905: 0xE5AB, + 28699 - 11905: 0xE5AD, + 28700 - 11905: 0x9E71, + 28701 - 11905: 0x9E72, + 28702 - 11905: 0x9E73, + 28703 - 11905: 0x9E74, + 28704 - 11905: 0x9E75, + 28705 - 11905: 0x9E76, + 28706 - 11905: 0x9E77, + 28707 - 11905: 0xE5AC, + 28708 - 11905: 0x9E78, + 28709 - 11905: 0x9E79, + 28710 - 11905: 0x9E7A, + 28711 - 11905: 0x9E7B, + 28712 - 11905: 0x9E7C, + 28713 - 11905: 0x9E7D, + 28714 - 11905: 0x9E7E, + 28715 - 11905: 0x9E80, + 28716 - 11905: 0x9E81, + 28717 - 11905: 0x9E82, + 28718 - 11905: 0x9E83, + 28719 - 11905: 0x9E84, + 28720 - 11905: 0x9E85, + 28721 - 11905: 0x9E86, + 28722 - 11905: 0x9E87, + 28723 - 11905: 0x9E88, + 28724 - 11905: 0x9E89, + 28725 - 11905: 0xE5AF, + 28726 - 11905: 0x9E8A, + 28727 - 11905: 0x9E8B, + 28728 - 11905: 0x9E8C, + 28729 - 11905: 0xE5AE, + 28730 - 11905: 0x9E8D, + 28731 - 11905: 0x9E8E, + 28732 - 11905: 0x9E8F, + 28733 - 11905: 0x9E90, + 28734 - 11905: 0x9E91, + 28735 - 11905: 0x9E92, + 28736 - 11905: 0x9E93, + 28737 - 11905: 0x9E94, + 28738 - 11905: 0x9E95, + 28739 - 11905: 0x9E96, + 28740 - 11905: 0x9E97, + 28741 - 11905: 0x9E98, + 28742 - 11905: 0x9E99, + 28743 - 11905: 0x9E9A, + 28744 - 11905: 0x9E9B, + 28745 - 11905: 0x9E9C, + 28746 - 11905: 0x9E9D, + 28747 - 11905: 0x9E9E, + 28748 - 11905: 0xB9E0, + 28749 - 11905: 0x9E9F, + 28750 - 11905: 0x9EA0, + 28751 - 11905: 0xE5B0, + 28752 - 11905: 0x9EA1, + 28753 - 11905: 0x9EA2, + 28754 - 11905: 0x9EA3, + 28755 - 11905: 0x9EA4, + 28756 - 11905: 0x9EA5, + 28757 - 11905: 0x9EA6, + 28758 - 11905: 0x9EA7, + 28759 - 11905: 0x9EA8, + 28760 - 11905: 0x9EA9, + 28761 - 11905: 0x9EAA, + 28762 - 11905: 0x9EAB, + 28763 - 11905: 0x9EAC, + 28764 - 11905: 0x9EAD, + 28765 - 11905: 0x9EAE, + 28766 - 11905: 0xE5B1, + 28767 - 11905: 0x9EAF, + 28768 - 11905: 0x9EB0, + 28769 - 11905: 0x9EB1, + 28770 - 11905: 0x9EB2, + 28771 - 11905: 0x9EB3, + 28772 - 11905: 0x9EB4, + 28773 - 11905: 0x9EB5, + 28774 - 11905: 0x9EB6, + 28775 - 11905: 0x9EB7, + 28776 - 11905: 0x9EB8, + 28777 - 11905: 0x9EB9, + 28778 - 11905: 0x9EBA, + 28779 - 11905: 0xBBF0, + 28780 - 11905: 0xECE1, + 28781 - 11905: 0xC3F0, + 28782 - 11905: 0x9EBB, + 28783 - 11905: 0xB5C6, + 28784 - 11905: 0xBBD2, + 28785 - 11905: 0x9EBC, + 28786 - 11905: 0x9EBD, + 28787 - 11905: 0x9EBE, + 28788 - 11905: 0x9EBF, + 28789 - 11905: 0xC1E9, + 28790 - 11905: 0xD4EE, + 28791 - 11905: 0x9EC0, + 28792 - 11905: 0xBEC4, + 28793 - 11905: 0x9EC1, + 28794 - 11905: 0x9EC2, + 28795 - 11905: 0x9EC3, + 28796 - 11905: 0xD7C6, + 28797 - 11905: 0x9EC4, + 28798 - 11905: 0xD4D6, + 28799 - 11905: 0xB2D3, + 28800 - 11905: 0xECBE, + 28801 - 11905: 0x9EC5, + 28802 - 11905: 0x9EC6, + 28803 - 11905: 0x9EC7, + 28804 - 11905: 0x9EC8, + 28805 - 11905: 0xEAC1, + 28806 - 11905: 0x9EC9, + 28807 - 11905: 0x9ECA, + 28808 - 11905: 0x9ECB, + 28809 - 11905: 0xC2AF, + 28810 - 11905: 0xB4B6, + 28811 - 11905: 0x9ECC, + 28812 - 11905: 0x9ECD, + 28813 - 11905: 0x9ECE, + 28814 - 11905: 0xD1D7, + 28815 - 11905: 0x9ECF, + 28816 - 11905: 0x9ED0, + 28817 - 11905: 0x9ED1, + 28818 - 11905: 0xB3B4, + 28819 - 11905: 0x9ED2, + 28820 - 11905: 0xC8B2, + 28821 - 11905: 0xBFBB, + 28822 - 11905: 0xECC0, + 28823 - 11905: 0x9ED3, + 28824 - 11905: 0x9ED4, + 28825 - 11905: 0xD6CB, + 28826 - 11905: 0x9ED5, + 28827 - 11905: 0x9ED6, + 28828 - 11905: 0xECBF, + 28829 - 11905: 0xECC1, + 28830 - 11905: 0x9ED7, + 28831 - 11905: 0x9ED8, + 28832 - 11905: 0x9ED9, + 28833 - 11905: 0x9EDA, + 28834 - 11905: 0x9EDB, + 28835 - 11905: 0x9EDC, + 28836 - 11905: 0x9EDD, + 28837 - 11905: 0x9EDE, + 28838 - 11905: 0x9EDF, + 28839 - 11905: 0x9EE0, + 28840 - 11905: 0x9EE1, + 28841 - 11905: 0x9EE2, + 28842 - 11905: 0x9EE3, + 28843 - 11905: 0xECC5, + 28844 - 11905: 0xBEE6, + 28845 - 11905: 0xCCBF, + 28846 - 11905: 0xC5DA, + 28847 - 11905: 0xBEBC, + 28848 - 11905: 0x9EE4, + 28849 - 11905: 0xECC6, + 28850 - 11905: 0x9EE5, + 28851 - 11905: 0xB1FE, + 28852 - 11905: 0x9EE6, + 28853 - 11905: 0x9EE7, + 28854 - 11905: 0x9EE8, + 28855 - 11905: 0xECC4, + 28856 - 11905: 0xD5A8, + 28857 - 11905: 0xB5E3, + 28858 - 11905: 0x9EE9, + 28859 - 11905: 0xECC2, + 28860 - 11905: 0xC1B6, + 28861 - 11905: 0xB3E3, + 28862 - 11905: 0x9EEA, + 28863 - 11905: 0x9EEB, + 28864 - 11905: 0xECC3, + 28865 - 11905: 0xCBB8, + 28866 - 11905: 0xC0C3, + 28867 - 11905: 0xCCFE, + 28868 - 11905: 0x9EEC, + 28869 - 11905: 0x9EED, + 28870 - 11905: 0x9EEE, + 28871 - 11905: 0x9EEF, + 28872 - 11905: 0xC1D2, + 28873 - 11905: 0x9EF0, + 28874 - 11905: 0xECC8, + 28875 - 11905: 0x9EF1, + 28876 - 11905: 0x9EF2, + 28877 - 11905: 0x9EF3, + 28878 - 11905: 0x9EF4, + 28879 - 11905: 0x9EF5, + 28880 - 11905: 0x9EF6, + 28881 - 11905: 0x9EF7, + 28882 - 11905: 0x9EF8, + 28883 - 11905: 0x9EF9, + 28884 - 11905: 0x9EFA, + 28885 - 11905: 0x9EFB, + 28886 - 11905: 0x9EFC, + 28887 - 11905: 0x9EFD, + 28888 - 11905: 0xBAE6, + 28889 - 11905: 0xC0D3, + 28890 - 11905: 0x9EFE, + 28891 - 11905: 0xD6F2, + 28892 - 11905: 0x9F40, + 28893 - 11905: 0x9F41, + 28894 - 11905: 0x9F42, + 28895 - 11905: 0xD1CC, + 28896 - 11905: 0x9F43, + 28897 - 11905: 0x9F44, + 28898 - 11905: 0x9F45, + 28899 - 11905: 0x9F46, + 28900 - 11905: 0xBFBE, + 28901 - 11905: 0x9F47, + 28902 - 11905: 0xB7B3, + 28903 - 11905: 0xC9D5, + 28904 - 11905: 0xECC7, + 28905 - 11905: 0xBBE2, + 28906 - 11905: 0x9F48, + 28907 - 11905: 0xCCCC, + 28908 - 11905: 0xBDFD, + 28909 - 11905: 0xC8C8, + 28910 - 11905: 0x9F49, + 28911 - 11905: 0xCFA9, + 28912 - 11905: 0x9F4A, + 28913 - 11905: 0x9F4B, + 28914 - 11905: 0x9F4C, + 28915 - 11905: 0x9F4D, + 28916 - 11905: 0x9F4E, + 28917 - 11905: 0x9F4F, + 28918 - 11905: 0x9F50, + 28919 - 11905: 0xCDE9, + 28920 - 11905: 0x9F51, + 28921 - 11905: 0xC5EB, + 28922 - 11905: 0x9F52, + 28923 - 11905: 0x9F53, + 28924 - 11905: 0x9F54, + 28925 - 11905: 0xB7E9, + 28926 - 11905: 0x9F55, + 28927 - 11905: 0x9F56, + 28928 - 11905: 0x9F57, + 28929 - 11905: 0x9F58, + 28930 - 11905: 0x9F59, + 28931 - 11905: 0x9F5A, + 28932 - 11905: 0x9F5B, + 28933 - 11905: 0x9F5C, + 28934 - 11905: 0x9F5D, + 28935 - 11905: 0x9F5E, + 28936 - 11905: 0x9F5F, + 28937 - 11905: 0xD1C9, + 28938 - 11905: 0xBAB8, + 28939 - 11905: 0x9F60, + 28940 - 11905: 0x9F61, + 28941 - 11905: 0x9F62, + 28942 - 11905: 0x9F63, + 28943 - 11905: 0x9F64, + 28944 - 11905: 0xECC9, + 28945 - 11905: 0x9F65, + 28946 - 11905: 0x9F66, + 28947 - 11905: 0xECCA, + 28948 - 11905: 0x9F67, + 28949 - 11905: 0xBBC0, + 28950 - 11905: 0xECCB, + 28951 - 11905: 0x9F68, + 28952 - 11905: 0xECE2, + 28953 - 11905: 0xB1BA, + 28954 - 11905: 0xB7D9, + 28955 - 11905: 0x9F69, + 28956 - 11905: 0x9F6A, + 28957 - 11905: 0x9F6B, + 28958 - 11905: 0x9F6C, + 28959 - 11905: 0x9F6D, + 28960 - 11905: 0x9F6E, + 28961 - 11905: 0x9F6F, + 28962 - 11905: 0x9F70, + 28963 - 11905: 0x9F71, + 28964 - 11905: 0x9F72, + 28965 - 11905: 0x9F73, + 28966 - 11905: 0xBDB9, + 28967 - 11905: 0x9F74, + 28968 - 11905: 0x9F75, + 28969 - 11905: 0x9F76, + 28970 - 11905: 0x9F77, + 28971 - 11905: 0x9F78, + 28972 - 11905: 0x9F79, + 28973 - 11905: 0x9F7A, + 28974 - 11905: 0x9F7B, + 28975 - 11905: 0xECCC, + 28976 - 11905: 0xD1E6, + 28977 - 11905: 0xECCD, + 28978 - 11905: 0x9F7C, + 28979 - 11905: 0x9F7D, + 28980 - 11905: 0x9F7E, + 28981 - 11905: 0x9F80, + 28982 - 11905: 0xC8BB, + 28983 - 11905: 0x9F81, + 28984 - 11905: 0x9F82, + 28985 - 11905: 0x9F83, + 28986 - 11905: 0x9F84, + 28987 - 11905: 0x9F85, + 28988 - 11905: 0x9F86, + 28989 - 11905: 0x9F87, + 28990 - 11905: 0x9F88, + 28991 - 11905: 0x9F89, + 28992 - 11905: 0x9F8A, + 28993 - 11905: 0x9F8B, + 28994 - 11905: 0x9F8C, + 28995 - 11905: 0x9F8D, + 28996 - 11905: 0x9F8E, + 28997 - 11905: 0xECD1, + 28998 - 11905: 0x9F8F, + 28999 - 11905: 0x9F90, + 29000 - 11905: 0x9F91, + 29001 - 11905: 0x9F92, + 29002 - 11905: 0xECD3, + 29003 - 11905: 0x9F93, + 29004 - 11905: 0xBBCD, + 29005 - 11905: 0x9F94, + 29006 - 11905: 0xBCE5, + 29007 - 11905: 0x9F95, + 29008 - 11905: 0x9F96, + 29009 - 11905: 0x9F97, + 29010 - 11905: 0x9F98, + 29011 - 11905: 0x9F99, + 29012 - 11905: 0x9F9A, + 29013 - 11905: 0x9F9B, + 29014 - 11905: 0x9F9C, + 29015 - 11905: 0x9F9D, + 29016 - 11905: 0x9F9E, + 29017 - 11905: 0x9F9F, + 29018 - 11905: 0x9FA0, + 29019 - 11905: 0x9FA1, + 29020 - 11905: 0xECCF, + 29021 - 11905: 0x9FA2, + 29022 - 11905: 0xC9B7, + 29023 - 11905: 0x9FA3, + 29024 - 11905: 0x9FA4, + 29025 - 11905: 0x9FA5, + 29026 - 11905: 0x9FA6, + 29027 - 11905: 0x9FA7, + 29028 - 11905: 0xC3BA, + 29029 - 11905: 0x9FA8, + 29030 - 11905: 0xECE3, + 29031 - 11905: 0xD5D5, + 29032 - 11905: 0xECD0, + 29033 - 11905: 0x9FA9, + 29034 - 11905: 0x9FAA, + 29035 - 11905: 0x9FAB, + 29036 - 11905: 0x9FAC, + 29037 - 11905: 0x9FAD, + 29038 - 11905: 0xD6F3, + 29039 - 11905: 0x9FAE, + 29040 - 11905: 0x9FAF, + 29041 - 11905: 0x9FB0, + 29042 - 11905: 0xECD2, + 29043 - 11905: 0xECCE, + 29044 - 11905: 0x9FB1, + 29045 - 11905: 0x9FB2, + 29046 - 11905: 0x9FB3, + 29047 - 11905: 0x9FB4, + 29048 - 11905: 0xECD4, + 29049 - 11905: 0x9FB5, + 29050 - 11905: 0xECD5, + 29051 - 11905: 0x9FB6, + 29052 - 11905: 0x9FB7, + 29053 - 11905: 0xC9BF, + 29054 - 11905: 0x9FB8, + 29055 - 11905: 0x9FB9, + 29056 - 11905: 0x9FBA, + 29057 - 11905: 0x9FBB, + 29058 - 11905: 0x9FBC, + 29059 - 11905: 0x9FBD, + 29060 - 11905: 0xCFA8, + 29061 - 11905: 0x9FBE, + 29062 - 11905: 0x9FBF, + 29063 - 11905: 0x9FC0, + 29064 - 11905: 0x9FC1, + 29065 - 11905: 0x9FC2, + 29066 - 11905: 0xD0DC, + 29067 - 11905: 0x9FC3, + 29068 - 11905: 0x9FC4, + 29069 - 11905: 0x9FC5, + 29070 - 11905: 0x9FC6, + 29071 - 11905: 0xD1AC, + 29072 - 11905: 0x9FC7, + 29073 - 11905: 0x9FC8, + 29074 - 11905: 0x9FC9, + 29075 - 11905: 0x9FCA, + 29076 - 11905: 0xC8DB, + 29077 - 11905: 0x9FCB, + 29078 - 11905: 0x9FCC, + 29079 - 11905: 0x9FCD, + 29080 - 11905: 0xECD6, + 29081 - 11905: 0xCEF5, + 29082 - 11905: 0x9FCE, + 29083 - 11905: 0x9FCF, + 29084 - 11905: 0x9FD0, + 29085 - 11905: 0x9FD1, + 29086 - 11905: 0x9FD2, + 29087 - 11905: 0xCAEC, + 29088 - 11905: 0xECDA, + 29089 - 11905: 0x9FD3, + 29090 - 11905: 0x9FD4, + 29091 - 11905: 0x9FD5, + 29092 - 11905: 0x9FD6, + 29093 - 11905: 0x9FD7, + 29094 - 11905: 0x9FD8, + 29095 - 11905: 0x9FD9, + 29096 - 11905: 0xECD9, + 29097 - 11905: 0x9FDA, + 29098 - 11905: 0x9FDB, + 29099 - 11905: 0x9FDC, + 29100 - 11905: 0xB0BE, + 29101 - 11905: 0x9FDD, + 29102 - 11905: 0x9FDE, + 29103 - 11905: 0x9FDF, + 29104 - 11905: 0x9FE0, + 29105 - 11905: 0x9FE1, + 29106 - 11905: 0x9FE2, + 29107 - 11905: 0xECD7, + 29108 - 11905: 0x9FE3, + 29109 - 11905: 0xECD8, + 29110 - 11905: 0x9FE4, + 29111 - 11905: 0x9FE5, + 29112 - 11905: 0x9FE6, + 29113 - 11905: 0xECE4, + 29114 - 11905: 0x9FE7, + 29115 - 11905: 0x9FE8, + 29116 - 11905: 0x9FE9, + 29117 - 11905: 0x9FEA, + 29118 - 11905: 0x9FEB, + 29119 - 11905: 0x9FEC, + 29120 - 11905: 0x9FED, + 29121 - 11905: 0x9FEE, + 29122 - 11905: 0x9FEF, + 29123 - 11905: 0xC8BC, + 29124 - 11905: 0x9FF0, + 29125 - 11905: 0x9FF1, + 29126 - 11905: 0x9FF2, + 29127 - 11905: 0x9FF3, + 29128 - 11905: 0x9FF4, + 29129 - 11905: 0x9FF5, + 29130 - 11905: 0x9FF6, + 29131 - 11905: 0x9FF7, + 29132 - 11905: 0x9FF8, + 29133 - 11905: 0x9FF9, + 29134 - 11905: 0xC1C7, + 29135 - 11905: 0x9FFA, + 29136 - 11905: 0x9FFB, + 29137 - 11905: 0x9FFC, + 29138 - 11905: 0x9FFD, + 29139 - 11905: 0x9FFE, + 29140 - 11905: 0xECDC, + 29141 - 11905: 0xD1E0, + 29142 - 11905: 0xA040, + 29143 - 11905: 0xA041, + 29144 - 11905: 0xA042, + 29145 - 11905: 0xA043, + 29146 - 11905: 0xA044, + 29147 - 11905: 0xA045, + 29148 - 11905: 0xA046, + 29149 - 11905: 0xA047, + 29150 - 11905: 0xA048, + 29151 - 11905: 0xA049, + 29152 - 11905: 0xECDB, + 29153 - 11905: 0xA04A, + 29154 - 11905: 0xA04B, + 29155 - 11905: 0xA04C, + 29156 - 11905: 0xA04D, + 29157 - 11905: 0xD4EF, + 29158 - 11905: 0xA04E, + 29159 - 11905: 0xECDD, + 29160 - 11905: 0xA04F, + 29161 - 11905: 0xA050, + 29162 - 11905: 0xA051, + 29163 - 11905: 0xA052, + 29164 - 11905: 0xA053, + 29165 - 11905: 0xA054, + 29166 - 11905: 0xDBC6, + 29167 - 11905: 0xA055, + 29168 - 11905: 0xA056, + 29169 - 11905: 0xA057, + 29170 - 11905: 0xA058, + 29171 - 11905: 0xA059, + 29172 - 11905: 0xA05A, + 29173 - 11905: 0xA05B, + 29174 - 11905: 0xA05C, + 29175 - 11905: 0xA05D, + 29176 - 11905: 0xA05E, + 29177 - 11905: 0xECDE, + 29178 - 11905: 0xA05F, + 29179 - 11905: 0xA060, + 29180 - 11905: 0xA061, + 29181 - 11905: 0xA062, + 29182 - 11905: 0xA063, + 29183 - 11905: 0xA064, + 29184 - 11905: 0xA065, + 29185 - 11905: 0xA066, + 29186 - 11905: 0xA067, + 29187 - 11905: 0xA068, + 29188 - 11905: 0xA069, + 29189 - 11905: 0xA06A, + 29190 - 11905: 0xB1AC, + 29191 - 11905: 0xA06B, + 29192 - 11905: 0xA06C, + 29193 - 11905: 0xA06D, + 29194 - 11905: 0xA06E, + 29195 - 11905: 0xA06F, + 29196 - 11905: 0xA070, + 29197 - 11905: 0xA071, + 29198 - 11905: 0xA072, + 29199 - 11905: 0xA073, + 29200 - 11905: 0xA074, + 29201 - 11905: 0xA075, + 29202 - 11905: 0xA076, + 29203 - 11905: 0xA077, + 29204 - 11905: 0xA078, + 29205 - 11905: 0xA079, + 29206 - 11905: 0xA07A, + 29207 - 11905: 0xA07B, + 29208 - 11905: 0xA07C, + 29209 - 11905: 0xA07D, + 29210 - 11905: 0xA07E, + 29211 - 11905: 0xA080, + 29212 - 11905: 0xA081, + 29213 - 11905: 0xECDF, + 29214 - 11905: 0xA082, + 29215 - 11905: 0xA083, + 29216 - 11905: 0xA084, + 29217 - 11905: 0xA085, + 29218 - 11905: 0xA086, + 29219 - 11905: 0xA087, + 29220 - 11905: 0xA088, + 29221 - 11905: 0xA089, + 29222 - 11905: 0xA08A, + 29223 - 11905: 0xA08B, + 29224 - 11905: 0xECE0, + 29225 - 11905: 0xA08C, + 29226 - 11905: 0xD7A6, + 29227 - 11905: 0xA08D, + 29228 - 11905: 0xC5C0, + 29229 - 11905: 0xA08E, + 29230 - 11905: 0xA08F, + 29231 - 11905: 0xA090, + 29232 - 11905: 0xEBBC, + 29233 - 11905: 0xB0AE, + 29234 - 11905: 0xA091, + 29235 - 11905: 0xA092, + 29236 - 11905: 0xA093, + 29237 - 11905: 0xBEF4, + 29238 - 11905: 0xB8B8, + 29239 - 11905: 0xD2AF, + 29240 - 11905: 0xB0D6, + 29241 - 11905: 0xB5F9, + 29242 - 11905: 0xA094, + 29243 - 11905: 0xD8B3, + 29244 - 11905: 0xA095, + 29245 - 11905: 0xCBAC, + 29246 - 11905: 0xA096, + 29247 - 11905: 0xE3DD, + 29248 - 11905: 0xA097, + 29249 - 11905: 0xA098, + 29250 - 11905: 0xA099, + 29251 - 11905: 0xA09A, + 29252 - 11905: 0xA09B, + 29253 - 11905: 0xA09C, + 29254 - 11905: 0xA09D, + 29255 - 11905: 0xC6AC, + 29256 - 11905: 0xB0E6, + 29257 - 11905: 0xA09E, + 29258 - 11905: 0xA09F, + 29259 - 11905: 0xA0A0, + 29260 - 11905: 0xC5C6, + 29261 - 11905: 0xEBB9, + 29262 - 11905: 0xA0A1, + 29263 - 11905: 0xA0A2, + 29264 - 11905: 0xA0A3, + 29265 - 11905: 0xA0A4, + 29266 - 11905: 0xEBBA, + 29267 - 11905: 0xA0A5, + 29268 - 11905: 0xA0A6, + 29269 - 11905: 0xA0A7, + 29270 - 11905: 0xEBBB, + 29271 - 11905: 0xA0A8, + 29272 - 11905: 0xA0A9, + 29273 - 11905: 0xD1C0, + 29274 - 11905: 0xA0AA, + 29275 - 11905: 0xC5A3, + 29276 - 11905: 0xA0AB, + 29277 - 11905: 0xEAF2, + 29278 - 11905: 0xA0AC, + 29279 - 11905: 0xC4B2, + 29280 - 11905: 0xA0AD, + 29281 - 11905: 0xC4B5, + 29282 - 11905: 0xC0CE, + 29283 - 11905: 0xA0AE, + 29284 - 11905: 0xA0AF, + 29285 - 11905: 0xA0B0, + 29286 - 11905: 0xEAF3, + 29287 - 11905: 0xC4C1, + 29288 - 11905: 0xA0B1, + 29289 - 11905: 0xCEEF, + 29290 - 11905: 0xA0B2, + 29291 - 11905: 0xA0B3, + 29292 - 11905: 0xA0B4, + 29293 - 11905: 0xA0B5, + 29294 - 11905: 0xEAF0, + 29295 - 11905: 0xEAF4, + 29296 - 11905: 0xA0B6, + 29297 - 11905: 0xA0B7, + 29298 - 11905: 0xC9FC, + 29299 - 11905: 0xA0B8, + 29300 - 11905: 0xA0B9, + 29301 - 11905: 0xC7A3, + 29302 - 11905: 0xA0BA, + 29303 - 11905: 0xA0BB, + 29304 - 11905: 0xA0BC, + 29305 - 11905: 0xCCD8, + 29306 - 11905: 0xCEFE, + 29307 - 11905: 0xA0BD, + 29308 - 11905: 0xA0BE, + 29309 - 11905: 0xA0BF, + 29310 - 11905: 0xEAF5, + 29311 - 11905: 0xEAF6, + 29312 - 11905: 0xCFAC, + 29313 - 11905: 0xC0E7, + 29314 - 11905: 0xA0C0, + 29315 - 11905: 0xA0C1, + 29316 - 11905: 0xEAF7, + 29317 - 11905: 0xA0C2, + 29318 - 11905: 0xA0C3, + 29319 - 11905: 0xA0C4, + 29320 - 11905: 0xA0C5, + 29321 - 11905: 0xA0C6, + 29322 - 11905: 0xB6BF, + 29323 - 11905: 0xEAF8, + 29324 - 11905: 0xA0C7, + 29325 - 11905: 0xEAF9, + 29326 - 11905: 0xA0C8, + 29327 - 11905: 0xEAFA, + 29328 - 11905: 0xA0C9, + 29329 - 11905: 0xA0CA, + 29330 - 11905: 0xEAFB, + 29331 - 11905: 0xA0CB, + 29332 - 11905: 0xA0CC, + 29333 - 11905: 0xA0CD, + 29334 - 11905: 0xA0CE, + 29335 - 11905: 0xA0CF, + 29336 - 11905: 0xA0D0, + 29337 - 11905: 0xA0D1, + 29338 - 11905: 0xA0D2, + 29339 - 11905: 0xA0D3, + 29340 - 11905: 0xA0D4, + 29341 - 11905: 0xA0D5, + 29342 - 11905: 0xA0D6, + 29343 - 11905: 0xEAF1, + 29344 - 11905: 0xA0D7, + 29345 - 11905: 0xA0D8, + 29346 - 11905: 0xA0D9, + 29347 - 11905: 0xA0DA, + 29348 - 11905: 0xA0DB, + 29349 - 11905: 0xA0DC, + 29350 - 11905: 0xA0DD, + 29351 - 11905: 0xA0DE, + 29352 - 11905: 0xA0DF, + 29353 - 11905: 0xA0E0, + 29354 - 11905: 0xA0E1, + 29355 - 11905: 0xA0E2, + 29356 - 11905: 0xC8AE, + 29357 - 11905: 0xE1EB, + 29358 - 11905: 0xA0E3, + 29359 - 11905: 0xB7B8, + 29360 - 11905: 0xE1EC, + 29361 - 11905: 0xA0E4, + 29362 - 11905: 0xA0E5, + 29363 - 11905: 0xA0E6, + 29364 - 11905: 0xE1ED, + 29365 - 11905: 0xA0E7, + 29366 - 11905: 0xD7B4, + 29367 - 11905: 0xE1EE, + 29368 - 11905: 0xE1EF, + 29369 - 11905: 0xD3CC, + 29370 - 11905: 0xA0E8, + 29371 - 11905: 0xA0E9, + 29372 - 11905: 0xA0EA, + 29373 - 11905: 0xA0EB, + 29374 - 11905: 0xA0EC, + 29375 - 11905: 0xA0ED, + 29376 - 11905: 0xA0EE, + 29377 - 11905: 0xE1F1, + 29378 - 11905: 0xBFF1, + 29379 - 11905: 0xE1F0, + 29380 - 11905: 0xB5D2, + 29381 - 11905: 0xA0EF, + 29382 - 11905: 0xA0F0, + 29383 - 11905: 0xA0F1, + 29384 - 11905: 0xB1B7, + 29385 - 11905: 0xA0F2, + 29386 - 11905: 0xA0F3, + 29387 - 11905: 0xA0F4, + 29388 - 11905: 0xA0F5, + 29389 - 11905: 0xE1F3, + 29390 - 11905: 0xE1F2, + 29391 - 11905: 0xA0F6, + 29392 - 11905: 0xBAFC, + 29393 - 11905: 0xA0F7, + 29394 - 11905: 0xE1F4, + 29395 - 11905: 0xA0F8, + 29396 - 11905: 0xA0F9, + 29397 - 11905: 0xA0FA, + 29398 - 11905: 0xA0FB, + 29399 - 11905: 0xB9B7, + 29400 - 11905: 0xA0FC, + 29401 - 11905: 0xBED1, + 29402 - 11905: 0xA0FD, + 29403 - 11905: 0xA0FE, + 29404 - 11905: 0xAA40, + 29405 - 11905: 0xAA41, + 29406 - 11905: 0xC4FC, + 29407 - 11905: 0xAA42, + 29408 - 11905: 0xBADD, + 29409 - 11905: 0xBDC6, + 29410 - 11905: 0xAA43, + 29411 - 11905: 0xAA44, + 29412 - 11905: 0xAA45, + 29413 - 11905: 0xAA46, + 29414 - 11905: 0xAA47, + 29415 - 11905: 0xAA48, + 29416 - 11905: 0xE1F5, + 29417 - 11905: 0xE1F7, + 29418 - 11905: 0xAA49, + 29419 - 11905: 0xAA4A, + 29420 - 11905: 0xB6C0, + 29421 - 11905: 0xCFC1, + 29422 - 11905: 0xCAA8, + 29423 - 11905: 0xE1F6, + 29424 - 11905: 0xD5F8, + 29425 - 11905: 0xD3FC, + 29426 - 11905: 0xE1F8, + 29427 - 11905: 0xE1FC, + 29428 - 11905: 0xE1F9, + 29429 - 11905: 0xAA4B, + 29430 - 11905: 0xAA4C, + 29431 - 11905: 0xE1FA, + 29432 - 11905: 0xC0EA, + 29433 - 11905: 0xAA4D, + 29434 - 11905: 0xE1FE, + 29435 - 11905: 0xE2A1, + 29436 - 11905: 0xC0C7, + 29437 - 11905: 0xAA4E, + 29438 - 11905: 0xAA4F, + 29439 - 11905: 0xAA50, + 29440 - 11905: 0xAA51, + 29441 - 11905: 0xE1FB, + 29442 - 11905: 0xAA52, + 29443 - 11905: 0xE1FD, + 29444 - 11905: 0xAA53, + 29445 - 11905: 0xAA54, + 29446 - 11905: 0xAA55, + 29447 - 11905: 0xAA56, + 29448 - 11905: 0xAA57, + 29449 - 11905: 0xAA58, + 29450 - 11905: 0xE2A5, + 29451 - 11905: 0xAA59, + 29452 - 11905: 0xAA5A, + 29453 - 11905: 0xAA5B, + 29454 - 11905: 0xC1D4, + 29455 - 11905: 0xAA5C, + 29456 - 11905: 0xAA5D, + 29457 - 11905: 0xAA5E, + 29458 - 11905: 0xAA5F, + 29459 - 11905: 0xE2A3, + 29460 - 11905: 0xAA60, + 29461 - 11905: 0xE2A8, + 29462 - 11905: 0xB2FE, + 29463 - 11905: 0xE2A2, + 29464 - 11905: 0xAA61, + 29465 - 11905: 0xAA62, + 29466 - 11905: 0xAA63, + 29467 - 11905: 0xC3CD, + 29468 - 11905: 0xB2C2, + 29469 - 11905: 0xE2A7, + 29470 - 11905: 0xE2A6, + 29471 - 11905: 0xAA64, + 29472 - 11905: 0xAA65, + 29473 - 11905: 0xE2A4, + 29474 - 11905: 0xE2A9, + 29475 - 11905: 0xAA66, + 29476 - 11905: 0xAA67, + 29477 - 11905: 0xE2AB, + 29478 - 11905: 0xAA68, + 29479 - 11905: 0xAA69, + 29480 - 11905: 0xAA6A, + 29481 - 11905: 0xD0C9, + 29482 - 11905: 0xD6ED, + 29483 - 11905: 0xC3A8, + 29484 - 11905: 0xE2AC, + 29485 - 11905: 0xAA6B, + 29486 - 11905: 0xCFD7, + 29487 - 11905: 0xAA6C, + 29488 - 11905: 0xAA6D, + 29489 - 11905: 0xE2AE, + 29490 - 11905: 0xAA6E, + 29491 - 11905: 0xAA6F, + 29492 - 11905: 0xBAEF, + 29493 - 11905: 0xAA70, + 29494 - 11905: 0xAA71, + 29495 - 11905: 0xE9E0, + 29496 - 11905: 0xE2AD, + 29497 - 11905: 0xE2AA, + 29498 - 11905: 0xAA72, + 29499 - 11905: 0xAA73, + 29500 - 11905: 0xAA74, + 29501 - 11905: 0xAA75, + 29502 - 11905: 0xBBAB, + 29503 - 11905: 0xD4B3, + 29504 - 11905: 0xAA76, + 29505 - 11905: 0xAA77, + 29506 - 11905: 0xAA78, + 29507 - 11905: 0xAA79, + 29508 - 11905: 0xAA7A, + 29509 - 11905: 0xAA7B, + 29510 - 11905: 0xAA7C, + 29511 - 11905: 0xAA7D, + 29512 - 11905: 0xAA7E, + 29513 - 11905: 0xAA80, + 29514 - 11905: 0xAA81, + 29515 - 11905: 0xAA82, + 29516 - 11905: 0xAA83, + 29517 - 11905: 0xE2B0, + 29518 - 11905: 0xAA84, + 29519 - 11905: 0xAA85, + 29520 - 11905: 0xE2AF, + 29521 - 11905: 0xAA86, + 29522 - 11905: 0xE9E1, + 29523 - 11905: 0xAA87, + 29524 - 11905: 0xAA88, + 29525 - 11905: 0xAA89, + 29526 - 11905: 0xAA8A, + 29527 - 11905: 0xE2B1, + 29528 - 11905: 0xAA8B, + 29529 - 11905: 0xAA8C, + 29530 - 11905: 0xAA8D, + 29531 - 11905: 0xAA8E, + 29532 - 11905: 0xAA8F, + 29533 - 11905: 0xAA90, + 29534 - 11905: 0xAA91, + 29535 - 11905: 0xAA92, + 29536 - 11905: 0xE2B2, + 29537 - 11905: 0xAA93, + 29538 - 11905: 0xAA94, + 29539 - 11905: 0xAA95, + 29540 - 11905: 0xAA96, + 29541 - 11905: 0xAA97, + 29542 - 11905: 0xAA98, + 29543 - 11905: 0xAA99, + 29544 - 11905: 0xAA9A, + 29545 - 11905: 0xAA9B, + 29546 - 11905: 0xAA9C, + 29547 - 11905: 0xAA9D, + 29548 - 11905: 0xE2B3, + 29549 - 11905: 0xCCA1, + 29550 - 11905: 0xAA9E, + 29551 - 11905: 0xE2B4, + 29552 - 11905: 0xAA9F, + 29553 - 11905: 0xAAA0, + 29554 - 11905: 0xAB40, + 29555 - 11905: 0xAB41, + 29556 - 11905: 0xAB42, + 29557 - 11905: 0xAB43, + 29558 - 11905: 0xAB44, + 29559 - 11905: 0xAB45, + 29560 - 11905: 0xAB46, + 29561 - 11905: 0xAB47, + 29562 - 11905: 0xAB48, + 29563 - 11905: 0xAB49, + 29564 - 11905: 0xAB4A, + 29565 - 11905: 0xAB4B, + 29566 - 11905: 0xE2B5, + 29567 - 11905: 0xAB4C, + 29568 - 11905: 0xAB4D, + 29569 - 11905: 0xAB4E, + 29570 - 11905: 0xAB4F, + 29571 - 11905: 0xAB50, + 29572 - 11905: 0xD0FE, + 29573 - 11905: 0xAB51, + 29574 - 11905: 0xAB52, + 29575 - 11905: 0xC2CA, + 29576 - 11905: 0xAB53, + 29577 - 11905: 0xD3F1, + 29578 - 11905: 0xAB54, + 29579 - 11905: 0xCDF5, + 29580 - 11905: 0xAB55, + 29581 - 11905: 0xAB56, + 29582 - 11905: 0xE7E0, + 29583 - 11905: 0xAB57, + 29584 - 11905: 0xAB58, + 29585 - 11905: 0xE7E1, + 29586 - 11905: 0xAB59, + 29587 - 11905: 0xAB5A, + 29588 - 11905: 0xAB5B, + 29589 - 11905: 0xAB5C, + 29590 - 11905: 0xBEC1, + 29591 - 11905: 0xAB5D, + 29592 - 11905: 0xAB5E, + 29593 - 11905: 0xAB5F, + 29594 - 11905: 0xAB60, + 29595 - 11905: 0xC2EA, + 29596 - 11905: 0xAB61, + 29597 - 11905: 0xAB62, + 29598 - 11905: 0xAB63, + 29599 - 11905: 0xE7E4, + 29600 - 11905: 0xAB64, + 29601 - 11905: 0xAB65, + 29602 - 11905: 0xE7E3, + 29603 - 11905: 0xAB66, + 29604 - 11905: 0xAB67, + 29605 - 11905: 0xAB68, + 29606 - 11905: 0xAB69, + 29607 - 11905: 0xAB6A, + 29608 - 11905: 0xAB6B, + 29609 - 11905: 0xCDE6, + 29610 - 11905: 0xAB6C, + 29611 - 11905: 0xC3B5, + 29612 - 11905: 0xAB6D, + 29613 - 11905: 0xAB6E, + 29614 - 11905: 0xE7E2, + 29615 - 11905: 0xBBB7, + 29616 - 11905: 0xCFD6, + 29617 - 11905: 0xAB6F, + 29618 - 11905: 0xC1E1, + 29619 - 11905: 0xE7E9, + 29620 - 11905: 0xAB70, + 29621 - 11905: 0xAB71, + 29622 - 11905: 0xAB72, + 29623 - 11905: 0xE7E8, + 29624 - 11905: 0xAB73, + 29625 - 11905: 0xAB74, + 29626 - 11905: 0xE7F4, + 29627 - 11905: 0xB2A3, + 29628 - 11905: 0xAB75, + 29629 - 11905: 0xAB76, + 29630 - 11905: 0xAB77, + 29631 - 11905: 0xAB78, + 29632 - 11905: 0xE7EA, + 29633 - 11905: 0xAB79, + 29634 - 11905: 0xE7E6, + 29635 - 11905: 0xAB7A, + 29636 - 11905: 0xAB7B, + 29637 - 11905: 0xAB7C, + 29638 - 11905: 0xAB7D, + 29639 - 11905: 0xAB7E, + 29640 - 11905: 0xE7EC, + 29641 - 11905: 0xE7EB, + 29642 - 11905: 0xC9BA, + 29643 - 11905: 0xAB80, + 29644 - 11905: 0xAB81, + 29645 - 11905: 0xD5E4, + 29646 - 11905: 0xAB82, + 29647 - 11905: 0xE7E5, + 29648 - 11905: 0xB7A9, + 29649 - 11905: 0xE7E7, + 29650 - 11905: 0xAB83, + 29651 - 11905: 0xAB84, + 29652 - 11905: 0xAB85, + 29653 - 11905: 0xAB86, + 29654 - 11905: 0xAB87, + 29655 - 11905: 0xAB88, + 29656 - 11905: 0xAB89, + 29657 - 11905: 0xE7EE, + 29658 - 11905: 0xAB8A, + 29659 - 11905: 0xAB8B, + 29660 - 11905: 0xAB8C, + 29661 - 11905: 0xAB8D, + 29662 - 11905: 0xE7F3, + 29663 - 11905: 0xAB8E, + 29664 - 11905: 0xD6E9, + 29665 - 11905: 0xAB8F, + 29666 - 11905: 0xAB90, + 29667 - 11905: 0xAB91, + 29668 - 11905: 0xAB92, + 29669 - 11905: 0xE7ED, + 29670 - 11905: 0xAB93, + 29671 - 11905: 0xE7F2, + 29672 - 11905: 0xAB94, + 29673 - 11905: 0xE7F1, + 29674 - 11905: 0xAB95, + 29675 - 11905: 0xAB96, + 29676 - 11905: 0xAB97, + 29677 - 11905: 0xB0E0, + 29678 - 11905: 0xAB98, + 29679 - 11905: 0xAB99, + 29680 - 11905: 0xAB9A, + 29681 - 11905: 0xAB9B, + 29682 - 11905: 0xE7F5, + 29683 - 11905: 0xAB9C, + 29684 - 11905: 0xAB9D, + 29685 - 11905: 0xAB9E, + 29686 - 11905: 0xAB9F, + 29687 - 11905: 0xABA0, + 29688 - 11905: 0xAC40, + 29689 - 11905: 0xAC41, + 29690 - 11905: 0xAC42, + 29691 - 11905: 0xAC43, + 29692 - 11905: 0xAC44, + 29693 - 11905: 0xAC45, + 29694 - 11905: 0xAC46, + 29695 - 11905: 0xAC47, + 29696 - 11905: 0xAC48, + 29697 - 11905: 0xAC49, + 29698 - 11905: 0xAC4A, + 29699 - 11905: 0xC7F2, + 29700 - 11905: 0xAC4B, + 29701 - 11905: 0xC0C5, + 29702 - 11905: 0xC0ED, + 29703 - 11905: 0xAC4C, + 29704 - 11905: 0xAC4D, + 29705 - 11905: 0xC1F0, + 29706 - 11905: 0xE7F0, + 29707 - 11905: 0xAC4E, + 29708 - 11905: 0xAC4F, + 29709 - 11905: 0xAC50, + 29710 - 11905: 0xAC51, + 29711 - 11905: 0xE7F6, + 29712 - 11905: 0xCBF6, + 29713 - 11905: 0xAC52, + 29714 - 11905: 0xAC53, + 29715 - 11905: 0xAC54, + 29716 - 11905: 0xAC55, + 29717 - 11905: 0xAC56, + 29718 - 11905: 0xAC57, + 29719 - 11905: 0xAC58, + 29720 - 11905: 0xAC59, + 29721 - 11905: 0xAC5A, + 29722 - 11905: 0xE8A2, + 29723 - 11905: 0xE8A1, + 29724 - 11905: 0xAC5B, + 29725 - 11905: 0xAC5C, + 29726 - 11905: 0xAC5D, + 29727 - 11905: 0xAC5E, + 29728 - 11905: 0xAC5F, + 29729 - 11905: 0xAC60, + 29730 - 11905: 0xD7C1, + 29731 - 11905: 0xAC61, + 29732 - 11905: 0xAC62, + 29733 - 11905: 0xE7FA, + 29734 - 11905: 0xE7F9, + 29735 - 11905: 0xAC63, + 29736 - 11905: 0xE7FB, + 29737 - 11905: 0xAC64, + 29738 - 11905: 0xE7F7, + 29739 - 11905: 0xAC65, + 29740 - 11905: 0xE7FE, + 29741 - 11905: 0xAC66, + 29742 - 11905: 0xE7FD, + 29743 - 11905: 0xAC67, + 29744 - 11905: 0xE7FC, + 29745 - 11905: 0xAC68, + 29746 - 11905: 0xAC69, + 29747 - 11905: 0xC1D5, + 29748 - 11905: 0xC7D9, + 29749 - 11905: 0xC5FD, + 29750 - 11905: 0xC5C3, + 29751 - 11905: 0xAC6A, + 29752 - 11905: 0xAC6B, + 29753 - 11905: 0xAC6C, + 29754 - 11905: 0xAC6D, + 29755 - 11905: 0xAC6E, + 29756 - 11905: 0xC7ED, + 29757 - 11905: 0xAC6F, + 29758 - 11905: 0xAC70, + 29759 - 11905: 0xAC71, + 29760 - 11905: 0xAC72, + 29761 - 11905: 0xE8A3, + 29762 - 11905: 0xAC73, + 29763 - 11905: 0xAC74, + 29764 - 11905: 0xAC75, + 29765 - 11905: 0xAC76, + 29766 - 11905: 0xAC77, + 29767 - 11905: 0xAC78, + 29768 - 11905: 0xAC79, + 29769 - 11905: 0xAC7A, + 29770 - 11905: 0xAC7B, + 29771 - 11905: 0xAC7C, + 29772 - 11905: 0xAC7D, + 29773 - 11905: 0xAC7E, + 29774 - 11905: 0xAC80, + 29775 - 11905: 0xAC81, + 29776 - 11905: 0xAC82, + 29777 - 11905: 0xAC83, + 29778 - 11905: 0xAC84, + 29779 - 11905: 0xAC85, + 29780 - 11905: 0xAC86, + 29781 - 11905: 0xE8A6, + 29782 - 11905: 0xAC87, + 29783 - 11905: 0xE8A5, + 29784 - 11905: 0xAC88, + 29785 - 11905: 0xE8A7, + 29786 - 11905: 0xBAF7, + 29787 - 11905: 0xE7F8, + 29788 - 11905: 0xE8A4, + 29789 - 11905: 0xAC89, + 29790 - 11905: 0xC8F0, + 29791 - 11905: 0xC9AA, + 29792 - 11905: 0xAC8A, + 29793 - 11905: 0xAC8B, + 29794 - 11905: 0xAC8C, + 29795 - 11905: 0xAC8D, + 29796 - 11905: 0xAC8E, + 29797 - 11905: 0xAC8F, + 29798 - 11905: 0xAC90, + 29799 - 11905: 0xAC91, + 29800 - 11905: 0xAC92, + 29801 - 11905: 0xAC93, + 29802 - 11905: 0xAC94, + 29803 - 11905: 0xAC95, + 29804 - 11905: 0xAC96, + 29805 - 11905: 0xE8A9, + 29806 - 11905: 0xAC97, + 29807 - 11905: 0xAC98, + 29808 - 11905: 0xB9E5, + 29809 - 11905: 0xAC99, + 29810 - 11905: 0xAC9A, + 29811 - 11905: 0xAC9B, + 29812 - 11905: 0xAC9C, + 29813 - 11905: 0xAC9D, + 29814 - 11905: 0xD1FE, + 29815 - 11905: 0xE8A8, + 29816 - 11905: 0xAC9E, + 29817 - 11905: 0xAC9F, + 29818 - 11905: 0xACA0, + 29819 - 11905: 0xAD40, + 29820 - 11905: 0xAD41, + 29821 - 11905: 0xAD42, + 29822 - 11905: 0xE8AA, + 29823 - 11905: 0xAD43, + 29824 - 11905: 0xE8AD, + 29825 - 11905: 0xE8AE, + 29826 - 11905: 0xAD44, + 29827 - 11905: 0xC1A7, + 29828 - 11905: 0xAD45, + 29829 - 11905: 0xAD46, + 29830 - 11905: 0xAD47, + 29831 - 11905: 0xE8AF, + 29832 - 11905: 0xAD48, + 29833 - 11905: 0xAD49, + 29834 - 11905: 0xAD4A, + 29835 - 11905: 0xE8B0, + 29836 - 11905: 0xAD4B, + 29837 - 11905: 0xAD4C, + 29838 - 11905: 0xE8AC, + 29839 - 11905: 0xAD4D, + 29840 - 11905: 0xE8B4, + 29841 - 11905: 0xAD4E, + 29842 - 11905: 0xAD4F, + 29843 - 11905: 0xAD50, + 29844 - 11905: 0xAD51, + 29845 - 11905: 0xAD52, + 29846 - 11905: 0xAD53, + 29847 - 11905: 0xAD54, + 29848 - 11905: 0xAD55, + 29849 - 11905: 0xAD56, + 29850 - 11905: 0xAD57, + 29851 - 11905: 0xAD58, + 29852 - 11905: 0xE8AB, + 29853 - 11905: 0xAD59, + 29854 - 11905: 0xE8B1, + 29855 - 11905: 0xAD5A, + 29856 - 11905: 0xAD5B, + 29857 - 11905: 0xAD5C, + 29858 - 11905: 0xAD5D, + 29859 - 11905: 0xAD5E, + 29860 - 11905: 0xAD5F, + 29861 - 11905: 0xAD60, + 29862 - 11905: 0xAD61, + 29863 - 11905: 0xE8B5, + 29864 - 11905: 0xE8B2, + 29865 - 11905: 0xE8B3, + 29866 - 11905: 0xAD62, + 29867 - 11905: 0xAD63, + 29868 - 11905: 0xAD64, + 29869 - 11905: 0xAD65, + 29870 - 11905: 0xAD66, + 29871 - 11905: 0xAD67, + 29872 - 11905: 0xAD68, + 29873 - 11905: 0xAD69, + 29874 - 11905: 0xAD6A, + 29875 - 11905: 0xAD6B, + 29876 - 11905: 0xAD6C, + 29877 - 11905: 0xAD6D, + 29878 - 11905: 0xAD6E, + 29879 - 11905: 0xAD6F, + 29880 - 11905: 0xAD70, + 29881 - 11905: 0xAD71, + 29882 - 11905: 0xE8B7, + 29883 - 11905: 0xAD72, + 29884 - 11905: 0xAD73, + 29885 - 11905: 0xAD74, + 29886 - 11905: 0xAD75, + 29887 - 11905: 0xAD76, + 29888 - 11905: 0xAD77, + 29889 - 11905: 0xAD78, + 29890 - 11905: 0xAD79, + 29891 - 11905: 0xAD7A, + 29892 - 11905: 0xAD7B, + 29893 - 11905: 0xAD7C, + 29894 - 11905: 0xAD7D, + 29895 - 11905: 0xAD7E, + 29896 - 11905: 0xAD80, + 29897 - 11905: 0xAD81, + 29898 - 11905: 0xAD82, + 29899 - 11905: 0xAD83, + 29900 - 11905: 0xAD84, + 29901 - 11905: 0xAD85, + 29902 - 11905: 0xAD86, + 29903 - 11905: 0xAD87, + 29904 - 11905: 0xAD88, + 29905 - 11905: 0xAD89, + 29906 - 11905: 0xE8B6, + 29907 - 11905: 0xAD8A, + 29908 - 11905: 0xAD8B, + 29909 - 11905: 0xAD8C, + 29910 - 11905: 0xAD8D, + 29911 - 11905: 0xAD8E, + 29912 - 11905: 0xAD8F, + 29913 - 11905: 0xAD90, + 29914 - 11905: 0xAD91, + 29915 - 11905: 0xAD92, + 29916 - 11905: 0xB9CF, + 29917 - 11905: 0xAD93, + 29918 - 11905: 0xF0AC, + 29919 - 11905: 0xAD94, + 29920 - 11905: 0xF0AD, + 29921 - 11905: 0xAD95, + 29922 - 11905: 0xC6B0, + 29923 - 11905: 0xB0EA, + 29924 - 11905: 0xC8BF, + 29925 - 11905: 0xAD96, + 29926 - 11905: 0xCDDF, + 29927 - 11905: 0xAD97, + 29928 - 11905: 0xAD98, + 29929 - 11905: 0xAD99, + 29930 - 11905: 0xAD9A, + 29931 - 11905: 0xAD9B, + 29932 - 11905: 0xAD9C, + 29933 - 11905: 0xAD9D, + 29934 - 11905: 0xCECD, + 29935 - 11905: 0xEAB1, + 29936 - 11905: 0xAD9E, + 29937 - 11905: 0xAD9F, + 29938 - 11905: 0xADA0, + 29939 - 11905: 0xAE40, + 29940 - 11905: 0xEAB2, + 29941 - 11905: 0xAE41, + 29942 - 11905: 0xC6BF, + 29943 - 11905: 0xB4C9, + 29944 - 11905: 0xAE42, + 29945 - 11905: 0xAE43, + 29946 - 11905: 0xAE44, + 29947 - 11905: 0xAE45, + 29948 - 11905: 0xAE46, + 29949 - 11905: 0xAE47, + 29950 - 11905: 0xAE48, + 29951 - 11905: 0xEAB3, + 29952 - 11905: 0xAE49, + 29953 - 11905: 0xAE4A, + 29954 - 11905: 0xAE4B, + 29955 - 11905: 0xAE4C, + 29956 - 11905: 0xD5E7, + 29957 - 11905: 0xAE4D, + 29958 - 11905: 0xAE4E, + 29959 - 11905: 0xAE4F, + 29960 - 11905: 0xAE50, + 29961 - 11905: 0xAE51, + 29962 - 11905: 0xAE52, + 29963 - 11905: 0xAE53, + 29964 - 11905: 0xAE54, + 29965 - 11905: 0xDDF9, + 29966 - 11905: 0xAE55, + 29967 - 11905: 0xEAB4, + 29968 - 11905: 0xAE56, + 29969 - 11905: 0xEAB5, + 29970 - 11905: 0xAE57, + 29971 - 11905: 0xEAB6, + 29972 - 11905: 0xAE58, + 29973 - 11905: 0xAE59, + 29974 - 11905: 0xAE5A, + 29975 - 11905: 0xAE5B, + 29976 - 11905: 0xB8CA, + 29977 - 11905: 0xDFB0, + 29978 - 11905: 0xC9F5, + 29979 - 11905: 0xAE5C, + 29980 - 11905: 0xCCF0, + 29981 - 11905: 0xAE5D, + 29982 - 11905: 0xAE5E, + 29983 - 11905: 0xC9FA, + 29984 - 11905: 0xAE5F, + 29985 - 11905: 0xAE60, + 29986 - 11905: 0xAE61, + 29987 - 11905: 0xAE62, + 29988 - 11905: 0xAE63, + 29989 - 11905: 0xC9FB, + 29990 - 11905: 0xAE64, + 29991 - 11905: 0xAE65, + 29992 - 11905: 0xD3C3, + 29993 - 11905: 0xCBA6, + 29994 - 11905: 0xAE66, + 29995 - 11905: 0xB8A6, + 29996 - 11905: 0xF0AE, + 29997 - 11905: 0xB1C2, + 29998 - 11905: 0xAE67, + 29999 - 11905: 0xE5B8, + 30000 - 11905: 0xCCEF, + 30001 - 11905: 0xD3C9, + 30002 - 11905: 0xBCD7, + 30003 - 11905: 0xC9EA, + 30004 - 11905: 0xAE68, + 30005 - 11905: 0xB5E7, + 30006 - 11905: 0xAE69, + 30007 - 11905: 0xC4D0, + 30008 - 11905: 0xB5E9, + 30009 - 11905: 0xAE6A, + 30010 - 11905: 0xEEAE, + 30011 - 11905: 0xBBAD, + 30012 - 11905: 0xAE6B, + 30013 - 11905: 0xAE6C, + 30014 - 11905: 0xE7DE, + 30015 - 11905: 0xAE6D, + 30016 - 11905: 0xEEAF, + 30017 - 11905: 0xAE6E, + 30018 - 11905: 0xAE6F, + 30019 - 11905: 0xAE70, + 30020 - 11905: 0xAE71, + 30021 - 11905: 0xB3A9, + 30022 - 11905: 0xAE72, + 30023 - 11905: 0xAE73, + 30024 - 11905: 0xEEB2, + 30025 - 11905: 0xAE74, + 30026 - 11905: 0xAE75, + 30027 - 11905: 0xEEB1, + 30028 - 11905: 0xBDE7, + 30029 - 11905: 0xAE76, + 30030 - 11905: 0xEEB0, + 30031 - 11905: 0xCEB7, + 30032 - 11905: 0xAE77, + 30033 - 11905: 0xAE78, + 30034 - 11905: 0xAE79, + 30035 - 11905: 0xAE7A, + 30036 - 11905: 0xC5CF, + 30037 - 11905: 0xAE7B, + 30038 - 11905: 0xAE7C, + 30039 - 11905: 0xAE7D, + 30040 - 11905: 0xAE7E, + 30041 - 11905: 0xC1F4, + 30042 - 11905: 0xDBCE, + 30043 - 11905: 0xEEB3, + 30044 - 11905: 0xD0F3, + 30045 - 11905: 0xAE80, + 30046 - 11905: 0xAE81, + 30047 - 11905: 0xAE82, + 30048 - 11905: 0xAE83, + 30049 - 11905: 0xAE84, + 30050 - 11905: 0xAE85, + 30051 - 11905: 0xAE86, + 30052 - 11905: 0xAE87, + 30053 - 11905: 0xC2D4, + 30054 - 11905: 0xC6E8, + 30055 - 11905: 0xAE88, + 30056 - 11905: 0xAE89, + 30057 - 11905: 0xAE8A, + 30058 - 11905: 0xB7AC, + 30059 - 11905: 0xAE8B, + 30060 - 11905: 0xAE8C, + 30061 - 11905: 0xAE8D, + 30062 - 11905: 0xAE8E, + 30063 - 11905: 0xAE8F, + 30064 - 11905: 0xAE90, + 30065 - 11905: 0xAE91, + 30066 - 11905: 0xEEB4, + 30067 - 11905: 0xAE92, + 30068 - 11905: 0xB3EB, + 30069 - 11905: 0xAE93, + 30070 - 11905: 0xAE94, + 30071 - 11905: 0xAE95, + 30072 - 11905: 0xBBFB, + 30073 - 11905: 0xEEB5, + 30074 - 11905: 0xAE96, + 30075 - 11905: 0xAE97, + 30076 - 11905: 0xAE98, + 30077 - 11905: 0xAE99, + 30078 - 11905: 0xAE9A, + 30079 - 11905: 0xE7DC, + 30080 - 11905: 0xAE9B, + 30081 - 11905: 0xAE9C, + 30082 - 11905: 0xAE9D, + 30083 - 11905: 0xEEB6, + 30084 - 11905: 0xAE9E, + 30085 - 11905: 0xAE9F, + 30086 - 11905: 0xBDAE, + 30087 - 11905: 0xAEA0, + 30088 - 11905: 0xAF40, + 30089 - 11905: 0xAF41, + 30090 - 11905: 0xAF42, + 30091 - 11905: 0xF1E2, + 30092 - 11905: 0xAF43, + 30093 - 11905: 0xAF44, + 30094 - 11905: 0xAF45, + 30095 - 11905: 0xCAE8, + 30096 - 11905: 0xAF46, + 30097 - 11905: 0xD2C9, + 30098 - 11905: 0xF0DA, + 30099 - 11905: 0xAF47, + 30100 - 11905: 0xF0DB, + 30101 - 11905: 0xAF48, + 30102 - 11905: 0xF0DC, + 30103 - 11905: 0xC1C6, + 30104 - 11905: 0xAF49, + 30105 - 11905: 0xB8ED, + 30106 - 11905: 0xBECE, + 30107 - 11905: 0xAF4A, + 30108 - 11905: 0xAF4B, + 30109 - 11905: 0xF0DE, + 30110 - 11905: 0xAF4C, + 30111 - 11905: 0xC5B1, + 30112 - 11905: 0xF0DD, + 30113 - 11905: 0xD1F1, + 30114 - 11905: 0xAF4D, + 30115 - 11905: 0xF0E0, + 30116 - 11905: 0xB0CC, + 30117 - 11905: 0xBDEA, + 30118 - 11905: 0xAF4E, + 30119 - 11905: 0xAF4F, + 30120 - 11905: 0xAF50, + 30121 - 11905: 0xAF51, + 30122 - 11905: 0xAF52, + 30123 - 11905: 0xD2DF, + 30124 - 11905: 0xF0DF, + 30125 - 11905: 0xAF53, + 30126 - 11905: 0xB4AF, + 30127 - 11905: 0xB7E8, + 30128 - 11905: 0xF0E6, + 30129 - 11905: 0xF0E5, + 30130 - 11905: 0xC6A3, + 30131 - 11905: 0xF0E1, + 30132 - 11905: 0xF0E2, + 30133 - 11905: 0xB4C3, + 30134 - 11905: 0xAF54, + 30135 - 11905: 0xAF55, + 30136 - 11905: 0xF0E3, + 30137 - 11905: 0xD5EE, + 30138 - 11905: 0xAF56, + 30139 - 11905: 0xAF57, + 30140 - 11905: 0xCCDB, + 30141 - 11905: 0xBED2, + 30142 - 11905: 0xBCB2, + 30143 - 11905: 0xAF58, + 30144 - 11905: 0xAF59, + 30145 - 11905: 0xAF5A, + 30146 - 11905: 0xF0E8, + 30147 - 11905: 0xF0E7, + 30148 - 11905: 0xF0E4, + 30149 - 11905: 0xB2A1, + 30150 - 11905: 0xAF5B, + 30151 - 11905: 0xD6A2, + 30152 - 11905: 0xD3B8, + 30153 - 11905: 0xBEB7, + 30154 - 11905: 0xC8AC, + 30155 - 11905: 0xAF5C, + 30156 - 11905: 0xAF5D, + 30157 - 11905: 0xF0EA, + 30158 - 11905: 0xAF5E, + 30159 - 11905: 0xAF5F, + 30160 - 11905: 0xAF60, + 30161 - 11905: 0xAF61, + 30162 - 11905: 0xD1F7, + 30163 - 11905: 0xAF62, + 30164 - 11905: 0xD6CC, + 30165 - 11905: 0xBADB, + 30166 - 11905: 0xF0E9, + 30167 - 11905: 0xAF63, + 30168 - 11905: 0xB6BB, + 30169 - 11905: 0xAF64, + 30170 - 11905: 0xAF65, + 30171 - 11905: 0xCDB4, + 30172 - 11905: 0xAF66, + 30173 - 11905: 0xAF67, + 30174 - 11905: 0xC6A6, + 30175 - 11905: 0xAF68, + 30176 - 11905: 0xAF69, + 30177 - 11905: 0xAF6A, + 30178 - 11905: 0xC1A1, + 30179 - 11905: 0xF0EB, + 30180 - 11905: 0xF0EE, + 30181 - 11905: 0xAF6B, + 30182 - 11905: 0xF0ED, + 30183 - 11905: 0xF0F0, + 30184 - 11905: 0xF0EC, + 30185 - 11905: 0xAF6C, + 30186 - 11905: 0xBBBE, + 30187 - 11905: 0xF0EF, + 30188 - 11905: 0xAF6D, + 30189 - 11905: 0xAF6E, + 30190 - 11905: 0xAF6F, + 30191 - 11905: 0xAF70, + 30192 - 11905: 0xCCB5, + 30193 - 11905: 0xF0F2, + 30194 - 11905: 0xAF71, + 30195 - 11905: 0xAF72, + 30196 - 11905: 0xB3D5, + 30197 - 11905: 0xAF73, + 30198 - 11905: 0xAF74, + 30199 - 11905: 0xAF75, + 30200 - 11905: 0xAF76, + 30201 - 11905: 0xB1D4, + 30202 - 11905: 0xAF77, + 30203 - 11905: 0xAF78, + 30204 - 11905: 0xF0F3, + 30205 - 11905: 0xAF79, + 30206 - 11905: 0xAF7A, + 30207 - 11905: 0xF0F4, + 30208 - 11905: 0xF0F6, + 30209 - 11905: 0xB4E1, + 30210 - 11905: 0xAF7B, + 30211 - 11905: 0xF0F1, + 30212 - 11905: 0xAF7C, + 30213 - 11905: 0xF0F7, + 30214 - 11905: 0xAF7D, + 30215 - 11905: 0xAF7E, + 30216 - 11905: 0xAF80, + 30217 - 11905: 0xAF81, + 30218 - 11905: 0xF0FA, + 30219 - 11905: 0xAF82, + 30220 - 11905: 0xF0F8, + 30221 - 11905: 0xAF83, + 30222 - 11905: 0xAF84, + 30223 - 11905: 0xAF85, + 30224 - 11905: 0xF0F5, + 30225 - 11905: 0xAF86, + 30226 - 11905: 0xAF87, + 30227 - 11905: 0xAF88, + 30228 - 11905: 0xAF89, + 30229 - 11905: 0xF0FD, + 30230 - 11905: 0xAF8A, + 30231 - 11905: 0xF0F9, + 30232 - 11905: 0xF0FC, + 30233 - 11905: 0xF0FE, + 30234 - 11905: 0xAF8B, + 30235 - 11905: 0xF1A1, + 30236 - 11905: 0xAF8C, + 30237 - 11905: 0xAF8D, + 30238 - 11905: 0xAF8E, + 30239 - 11905: 0xCEC1, + 30240 - 11905: 0xF1A4, + 30241 - 11905: 0xAF8F, + 30242 - 11905: 0xF1A3, + 30243 - 11905: 0xAF90, + 30244 - 11905: 0xC1F6, + 30245 - 11905: 0xF0FB, + 30246 - 11905: 0xCADD, + 30247 - 11905: 0xAF91, + 30248 - 11905: 0xAF92, + 30249 - 11905: 0xB4F1, + 30250 - 11905: 0xB1F1, + 30251 - 11905: 0xCCB1, + 30252 - 11905: 0xAF93, + 30253 - 11905: 0xF1A6, + 30254 - 11905: 0xAF94, + 30255 - 11905: 0xAF95, + 30256 - 11905: 0xF1A7, + 30257 - 11905: 0xAF96, + 30258 - 11905: 0xAF97, + 30259 - 11905: 0xF1AC, + 30260 - 11905: 0xD5CE, + 30261 - 11905: 0xF1A9, + 30262 - 11905: 0xAF98, + 30263 - 11905: 0xAF99, + 30264 - 11905: 0xC8B3, + 30265 - 11905: 0xAF9A, + 30266 - 11905: 0xAF9B, + 30267 - 11905: 0xAF9C, + 30268 - 11905: 0xF1A2, + 30269 - 11905: 0xAF9D, + 30270 - 11905: 0xF1AB, + 30271 - 11905: 0xF1A8, + 30272 - 11905: 0xF1A5, + 30273 - 11905: 0xAF9E, + 30274 - 11905: 0xAF9F, + 30275 - 11905: 0xF1AA, + 30276 - 11905: 0xAFA0, + 30277 - 11905: 0xB040, + 30278 - 11905: 0xB041, + 30279 - 11905: 0xB042, + 30280 - 11905: 0xB043, + 30281 - 11905: 0xB044, + 30282 - 11905: 0xB045, + 30283 - 11905: 0xB046, + 30284 - 11905: 0xB0A9, + 30285 - 11905: 0xF1AD, + 30286 - 11905: 0xB047, + 30287 - 11905: 0xB048, + 30288 - 11905: 0xB049, + 30289 - 11905: 0xB04A, + 30290 - 11905: 0xB04B, + 30291 - 11905: 0xB04C, + 30292 - 11905: 0xF1AF, + 30293 - 11905: 0xB04D, + 30294 - 11905: 0xF1B1, + 30295 - 11905: 0xB04E, + 30296 - 11905: 0xB04F, + 30297 - 11905: 0xB050, + 30298 - 11905: 0xB051, + 30299 - 11905: 0xB052, + 30300 - 11905: 0xF1B0, + 30301 - 11905: 0xB053, + 30302 - 11905: 0xF1AE, + 30303 - 11905: 0xB054, + 30304 - 11905: 0xB055, + 30305 - 11905: 0xB056, + 30306 - 11905: 0xB057, + 30307 - 11905: 0xD1A2, + 30308 - 11905: 0xB058, + 30309 - 11905: 0xB059, + 30310 - 11905: 0xB05A, + 30311 - 11905: 0xB05B, + 30312 - 11905: 0xB05C, + 30313 - 11905: 0xB05D, + 30314 - 11905: 0xB05E, + 30315 - 11905: 0xF1B2, + 30316 - 11905: 0xB05F, + 30317 - 11905: 0xB060, + 30318 - 11905: 0xB061, + 30319 - 11905: 0xF1B3, + 30320 - 11905: 0xB062, + 30321 - 11905: 0xB063, + 30322 - 11905: 0xB064, + 30323 - 11905: 0xB065, + 30324 - 11905: 0xB066, + 30325 - 11905: 0xB067, + 30326 - 11905: 0xB068, + 30327 - 11905: 0xB069, + 30328 - 11905: 0xB9EF, + 30329 - 11905: 0xB06A, + 30330 - 11905: 0xB06B, + 30331 - 11905: 0xB5C7, + 30332 - 11905: 0xB06C, + 30333 - 11905: 0xB0D7, + 30334 - 11905: 0xB0D9, + 30335 - 11905: 0xB06D, + 30336 - 11905: 0xB06E, + 30337 - 11905: 0xB06F, + 30338 - 11905: 0xD4ED, + 30339 - 11905: 0xB070, + 30340 - 11905: 0xB5C4, + 30341 - 11905: 0xB071, + 30342 - 11905: 0xBDD4, + 30343 - 11905: 0xBBCA, + 30344 - 11905: 0xF0A7, + 30345 - 11905: 0xB072, + 30346 - 11905: 0xB073, + 30347 - 11905: 0xB8DE, + 30348 - 11905: 0xB074, + 30349 - 11905: 0xB075, + 30350 - 11905: 0xF0A8, + 30351 - 11905: 0xB076, + 30352 - 11905: 0xB077, + 30353 - 11905: 0xB0A8, + 30354 - 11905: 0xB078, + 30355 - 11905: 0xF0A9, + 30356 - 11905: 0xB079, + 30357 - 11905: 0xB07A, + 30358 - 11905: 0xCDEE, + 30359 - 11905: 0xB07B, + 30360 - 11905: 0xB07C, + 30361 - 11905: 0xF0AA, + 30362 - 11905: 0xB07D, + 30363 - 11905: 0xB07E, + 30364 - 11905: 0xB080, + 30365 - 11905: 0xB081, + 30366 - 11905: 0xB082, + 30367 - 11905: 0xB083, + 30368 - 11905: 0xB084, + 30369 - 11905: 0xB085, + 30370 - 11905: 0xB086, + 30371 - 11905: 0xB087, + 30372 - 11905: 0xF0AB, + 30373 - 11905: 0xB088, + 30374 - 11905: 0xB089, + 30375 - 11905: 0xB08A, + 30376 - 11905: 0xB08B, + 30377 - 11905: 0xB08C, + 30378 - 11905: 0xB08D, + 30379 - 11905: 0xB08E, + 30380 - 11905: 0xB08F, + 30381 - 11905: 0xB090, + 30382 - 11905: 0xC6A4, + 30383 - 11905: 0xB091, + 30384 - 11905: 0xB092, + 30385 - 11905: 0xD6E5, + 30386 - 11905: 0xF1E4, + 30387 - 11905: 0xB093, + 30388 - 11905: 0xF1E5, + 30389 - 11905: 0xB094, + 30390 - 11905: 0xB095, + 30391 - 11905: 0xB096, + 30392 - 11905: 0xB097, + 30393 - 11905: 0xB098, + 30394 - 11905: 0xB099, + 30395 - 11905: 0xB09A, + 30396 - 11905: 0xB09B, + 30397 - 11905: 0xB09C, + 30398 - 11905: 0xB09D, + 30399 - 11905: 0xC3F3, + 30400 - 11905: 0xB09E, + 30401 - 11905: 0xB09F, + 30402 - 11905: 0xD3DB, + 30403 - 11905: 0xB0A0, + 30404 - 11905: 0xB140, + 30405 - 11905: 0xD6D1, + 30406 - 11905: 0xC5E8, + 30407 - 11905: 0xB141, + 30408 - 11905: 0xD3AF, + 30409 - 11905: 0xB142, + 30410 - 11905: 0xD2E6, + 30411 - 11905: 0xB143, + 30412 - 11905: 0xB144, + 30413 - 11905: 0xEEC1, + 30414 - 11905: 0xB0BB, + 30415 - 11905: 0xD5B5, + 30416 - 11905: 0xD1CE, + 30417 - 11905: 0xBCE0, + 30418 - 11905: 0xBAD0, + 30419 - 11905: 0xB145, + 30420 - 11905: 0xBFF8, + 30421 - 11905: 0xB146, + 30422 - 11905: 0xB8C7, + 30423 - 11905: 0xB5C1, + 30424 - 11905: 0xC5CC, + 30425 - 11905: 0xB147, + 30426 - 11905: 0xB148, + 30427 - 11905: 0xCAA2, + 30428 - 11905: 0xB149, + 30429 - 11905: 0xB14A, + 30430 - 11905: 0xB14B, + 30431 - 11905: 0xC3CB, + 30432 - 11905: 0xB14C, + 30433 - 11905: 0xB14D, + 30434 - 11905: 0xB14E, + 30435 - 11905: 0xB14F, + 30436 - 11905: 0xB150, + 30437 - 11905: 0xEEC2, + 30438 - 11905: 0xB151, + 30439 - 11905: 0xB152, + 30440 - 11905: 0xB153, + 30441 - 11905: 0xB154, + 30442 - 11905: 0xB155, + 30443 - 11905: 0xB156, + 30444 - 11905: 0xB157, + 30445 - 11905: 0xB158, + 30446 - 11905: 0xC4BF, + 30447 - 11905: 0xB6A2, + 30448 - 11905: 0xB159, + 30449 - 11905: 0xEDEC, + 30450 - 11905: 0xC3A4, + 30451 - 11905: 0xB15A, + 30452 - 11905: 0xD6B1, + 30453 - 11905: 0xB15B, + 30454 - 11905: 0xB15C, + 30455 - 11905: 0xB15D, + 30456 - 11905: 0xCFE0, + 30457 - 11905: 0xEDEF, + 30458 - 11905: 0xB15E, + 30459 - 11905: 0xB15F, + 30460 - 11905: 0xC5CE, + 30461 - 11905: 0xB160, + 30462 - 11905: 0xB6DC, + 30463 - 11905: 0xB161, + 30464 - 11905: 0xB162, + 30465 - 11905: 0xCAA1, + 30466 - 11905: 0xB163, + 30467 - 11905: 0xB164, + 30468 - 11905: 0xEDED, + 30469 - 11905: 0xB165, + 30470 - 11905: 0xB166, + 30471 - 11905: 0xEDF0, + 30472 - 11905: 0xEDF1, + 30473 - 11905: 0xC3BC, + 30474 - 11905: 0xB167, + 30475 - 11905: 0xBFB4, + 30476 - 11905: 0xB168, + 30477 - 11905: 0xEDEE, + 30478 - 11905: 0xB169, + 30479 - 11905: 0xB16A, + 30480 - 11905: 0xB16B, + 30481 - 11905: 0xB16C, + 30482 - 11905: 0xB16D, + 30483 - 11905: 0xB16E, + 30484 - 11905: 0xB16F, + 30485 - 11905: 0xB170, + 30486 - 11905: 0xB171, + 30487 - 11905: 0xB172, + 30488 - 11905: 0xB173, + 30489 - 11905: 0xEDF4, + 30490 - 11905: 0xEDF2, + 30491 - 11905: 0xB174, + 30492 - 11905: 0xB175, + 30493 - 11905: 0xB176, + 30494 - 11905: 0xB177, + 30495 - 11905: 0xD5E6, + 30496 - 11905: 0xC3DF, + 30497 - 11905: 0xB178, + 30498 - 11905: 0xEDF3, + 30499 - 11905: 0xB179, + 30500 - 11905: 0xB17A, + 30501 - 11905: 0xB17B, + 30502 - 11905: 0xEDF6, + 30503 - 11905: 0xB17C, + 30504 - 11905: 0xD5A3, + 30505 - 11905: 0xD1A3, + 30506 - 11905: 0xB17D, + 30507 - 11905: 0xB17E, + 30508 - 11905: 0xB180, + 30509 - 11905: 0xEDF5, + 30510 - 11905: 0xB181, + 30511 - 11905: 0xC3D0, + 30512 - 11905: 0xB182, + 30513 - 11905: 0xB183, + 30514 - 11905: 0xB184, + 30515 - 11905: 0xB185, + 30516 - 11905: 0xB186, + 30517 - 11905: 0xEDF7, + 30518 - 11905: 0xBFF4, + 30519 - 11905: 0xBEEC, + 30520 - 11905: 0xEDF8, + 30521 - 11905: 0xB187, + 30522 - 11905: 0xCCF7, + 30523 - 11905: 0xB188, + 30524 - 11905: 0xD1DB, + 30525 - 11905: 0xB189, + 30526 - 11905: 0xB18A, + 30527 - 11905: 0xB18B, + 30528 - 11905: 0xD7C5, + 30529 - 11905: 0xD5F6, + 30530 - 11905: 0xB18C, + 30531 - 11905: 0xEDFC, + 30532 - 11905: 0xB18D, + 30533 - 11905: 0xB18E, + 30534 - 11905: 0xB18F, + 30535 - 11905: 0xEDFB, + 30536 - 11905: 0xB190, + 30537 - 11905: 0xB191, + 30538 - 11905: 0xB192, + 30539 - 11905: 0xB193, + 30540 - 11905: 0xB194, + 30541 - 11905: 0xB195, + 30542 - 11905: 0xB196, + 30543 - 11905: 0xB197, + 30544 - 11905: 0xEDF9, + 30545 - 11905: 0xEDFA, + 30546 - 11905: 0xB198, + 30547 - 11905: 0xB199, + 30548 - 11905: 0xB19A, + 30549 - 11905: 0xB19B, + 30550 - 11905: 0xB19C, + 30551 - 11905: 0xB19D, + 30552 - 11905: 0xB19E, + 30553 - 11905: 0xB19F, + 30554 - 11905: 0xEDFD, + 30555 - 11905: 0xBEA6, + 30556 - 11905: 0xB1A0, + 30557 - 11905: 0xB240, + 30558 - 11905: 0xB241, + 30559 - 11905: 0xB242, + 30560 - 11905: 0xB243, + 30561 - 11905: 0xCBAF, + 30562 - 11905: 0xEEA1, + 30563 - 11905: 0xB6BD, + 30564 - 11905: 0xB244, + 30565 - 11905: 0xEEA2, + 30566 - 11905: 0xC4C0, + 30567 - 11905: 0xB245, + 30568 - 11905: 0xEDFE, + 30569 - 11905: 0xB246, + 30570 - 11905: 0xB247, + 30571 - 11905: 0xBDDE, + 30572 - 11905: 0xB2C7, + 30573 - 11905: 0xB248, + 30574 - 11905: 0xB249, + 30575 - 11905: 0xB24A, + 30576 - 11905: 0xB24B, + 30577 - 11905: 0xB24C, + 30578 - 11905: 0xB24D, + 30579 - 11905: 0xB24E, + 30580 - 11905: 0xB24F, + 30581 - 11905: 0xB250, + 30582 - 11905: 0xB251, + 30583 - 11905: 0xB252, + 30584 - 11905: 0xB253, + 30585 - 11905: 0xB6C3, + 30586 - 11905: 0xB254, + 30587 - 11905: 0xB255, + 30588 - 11905: 0xB256, + 30589 - 11905: 0xEEA5, + 30590 - 11905: 0xD8BA, + 30591 - 11905: 0xEEA3, + 30592 - 11905: 0xEEA6, + 30593 - 11905: 0xB257, + 30594 - 11905: 0xB258, + 30595 - 11905: 0xB259, + 30596 - 11905: 0xC3E9, + 30597 - 11905: 0xB3F2, + 30598 - 11905: 0xB25A, + 30599 - 11905: 0xB25B, + 30600 - 11905: 0xB25C, + 30601 - 11905: 0xB25D, + 30602 - 11905: 0xB25E, + 30603 - 11905: 0xB25F, + 30604 - 11905: 0xEEA7, + 30605 - 11905: 0xEEA4, + 30606 - 11905: 0xCFB9, + 30607 - 11905: 0xB260, + 30608 - 11905: 0xB261, + 30609 - 11905: 0xEEA8, + 30610 - 11905: 0xC2F7, + 30611 - 11905: 0xB262, + 30612 - 11905: 0xB263, + 30613 - 11905: 0xB264, + 30614 - 11905: 0xB265, + 30615 - 11905: 0xB266, + 30616 - 11905: 0xB267, + 30617 - 11905: 0xB268, + 30618 - 11905: 0xB269, + 30619 - 11905: 0xB26A, + 30620 - 11905: 0xB26B, + 30621 - 11905: 0xB26C, + 30622 - 11905: 0xB26D, + 30623 - 11905: 0xEEA9, + 30624 - 11905: 0xEEAA, + 30625 - 11905: 0xB26E, + 30626 - 11905: 0xDEAB, + 30627 - 11905: 0xB26F, + 30628 - 11905: 0xB270, + 30629 - 11905: 0xC6B3, + 30630 - 11905: 0xB271, + 30631 - 11905: 0xC7C6, + 30632 - 11905: 0xB272, + 30633 - 11905: 0xD6F5, + 30634 - 11905: 0xB5C9, + 30635 - 11905: 0xB273, + 30636 - 11905: 0xCBB2, + 30637 - 11905: 0xB274, + 30638 - 11905: 0xB275, + 30639 - 11905: 0xB276, + 30640 - 11905: 0xEEAB, + 30641 - 11905: 0xB277, + 30642 - 11905: 0xB278, + 30643 - 11905: 0xCDAB, + 30644 - 11905: 0xB279, + 30645 - 11905: 0xEEAC, + 30646 - 11905: 0xB27A, + 30647 - 11905: 0xB27B, + 30648 - 11905: 0xB27C, + 30649 - 11905: 0xB27D, + 30650 - 11905: 0xB27E, + 30651 - 11905: 0xD5B0, + 30652 - 11905: 0xB280, + 30653 - 11905: 0xEEAD, + 30654 - 11905: 0xB281, + 30655 - 11905: 0xF6C4, + 30656 - 11905: 0xB282, + 30657 - 11905: 0xB283, + 30658 - 11905: 0xB284, + 30659 - 11905: 0xB285, + 30660 - 11905: 0xB286, + 30661 - 11905: 0xB287, + 30662 - 11905: 0xB288, + 30663 - 11905: 0xB289, + 30664 - 11905: 0xB28A, + 30665 - 11905: 0xB28B, + 30666 - 11905: 0xB28C, + 30667 - 11905: 0xB28D, + 30668 - 11905: 0xB28E, + 30669 - 11905: 0xDBC7, + 30670 - 11905: 0xB28F, + 30671 - 11905: 0xB290, + 30672 - 11905: 0xB291, + 30673 - 11905: 0xB292, + 30674 - 11905: 0xB293, + 30675 - 11905: 0xB294, + 30676 - 11905: 0xB295, + 30677 - 11905: 0xB296, + 30678 - 11905: 0xB297, + 30679 - 11905: 0xB4A3, + 30680 - 11905: 0xB298, + 30681 - 11905: 0xB299, + 30682 - 11905: 0xB29A, + 30683 - 11905: 0xC3AC, + 30684 - 11905: 0xF1E6, + 30685 - 11905: 0xB29B, + 30686 - 11905: 0xB29C, + 30687 - 11905: 0xB29D, + 30688 - 11905: 0xB29E, + 30689 - 11905: 0xB29F, + 30690 - 11905: 0xCAB8, + 30691 - 11905: 0xD2D3, + 30692 - 11905: 0xB2A0, + 30693 - 11905: 0xD6AA, + 30694 - 11905: 0xB340, + 30695 - 11905: 0xEFF2, + 30696 - 11905: 0xB341, + 30697 - 11905: 0xBED8, + 30698 - 11905: 0xB342, + 30699 - 11905: 0xBDC3, + 30700 - 11905: 0xEFF3, + 30701 - 11905: 0xB6CC, + 30702 - 11905: 0xB0AB, + 30703 - 11905: 0xB343, + 30704 - 11905: 0xB344, + 30705 - 11905: 0xB345, + 30706 - 11905: 0xB346, + 30707 - 11905: 0xCAAF, + 30708 - 11905: 0xB347, + 30709 - 11905: 0xB348, + 30710 - 11905: 0xEDB6, + 30711 - 11905: 0xB349, + 30712 - 11905: 0xEDB7, + 30713 - 11905: 0xB34A, + 30714 - 11905: 0xB34B, + 30715 - 11905: 0xB34C, + 30716 - 11905: 0xB34D, + 30717 - 11905: 0xCEF9, + 30718 - 11905: 0xB7AF, + 30719 - 11905: 0xBFF3, + 30720 - 11905: 0xEDB8, + 30721 - 11905: 0xC2EB, + 30722 - 11905: 0xC9B0, + 30723 - 11905: 0xB34E, + 30724 - 11905: 0xB34F, + 30725 - 11905: 0xB350, + 30726 - 11905: 0xB351, + 30727 - 11905: 0xB352, + 30728 - 11905: 0xB353, + 30729 - 11905: 0xEDB9, + 30730 - 11905: 0xB354, + 30731 - 11905: 0xB355, + 30732 - 11905: 0xC6F6, + 30733 - 11905: 0xBFB3, + 30734 - 11905: 0xB356, + 30735 - 11905: 0xB357, + 30736 - 11905: 0xB358, + 30737 - 11905: 0xEDBC, + 30738 - 11905: 0xC5F8, + 30739 - 11905: 0xB359, + 30740 - 11905: 0xD1D0, + 30741 - 11905: 0xB35A, + 30742 - 11905: 0xD7A9, + 30743 - 11905: 0xEDBA, + 30744 - 11905: 0xEDBB, + 30745 - 11905: 0xB35B, + 30746 - 11905: 0xD1E2, + 30747 - 11905: 0xB35C, + 30748 - 11905: 0xEDBF, + 30749 - 11905: 0xEDC0, + 30750 - 11905: 0xB35D, + 30751 - 11905: 0xEDC4, + 30752 - 11905: 0xB35E, + 30753 - 11905: 0xB35F, + 30754 - 11905: 0xB360, + 30755 - 11905: 0xEDC8, + 30756 - 11905: 0xB361, + 30757 - 11905: 0xEDC6, + 30758 - 11905: 0xEDCE, + 30759 - 11905: 0xD5E8, + 30760 - 11905: 0xB362, + 30761 - 11905: 0xEDC9, + 30762 - 11905: 0xB363, + 30763 - 11905: 0xB364, + 30764 - 11905: 0xEDC7, + 30765 - 11905: 0xEDBE, + 30766 - 11905: 0xB365, + 30767 - 11905: 0xB366, + 30768 - 11905: 0xC5E9, + 30769 - 11905: 0xB367, + 30770 - 11905: 0xB368, + 30771 - 11905: 0xB369, + 30772 - 11905: 0xC6C6, + 30773 - 11905: 0xB36A, + 30774 - 11905: 0xB36B, + 30775 - 11905: 0xC9E9, + 30776 - 11905: 0xD4D2, + 30777 - 11905: 0xEDC1, + 30778 - 11905: 0xEDC2, + 30779 - 11905: 0xEDC3, + 30780 - 11905: 0xEDC5, + 30781 - 11905: 0xB36C, + 30782 - 11905: 0xC0F9, + 30783 - 11905: 0xB36D, + 30784 - 11905: 0xB4A1, + 30785 - 11905: 0xB36E, + 30786 - 11905: 0xB36F, + 30787 - 11905: 0xB370, + 30788 - 11905: 0xB371, + 30789 - 11905: 0xB9E8, + 30790 - 11905: 0xB372, + 30791 - 11905: 0xEDD0, + 30792 - 11905: 0xB373, + 30793 - 11905: 0xB374, + 30794 - 11905: 0xB375, + 30795 - 11905: 0xB376, + 30796 - 11905: 0xEDD1, + 30797 - 11905: 0xB377, + 30798 - 11905: 0xEDCA, + 30799 - 11905: 0xB378, + 30800 - 11905: 0xEDCF, + 30801 - 11905: 0xB379, + 30802 - 11905: 0xCEF8, + 30803 - 11905: 0xB37A, + 30804 - 11905: 0xB37B, + 30805 - 11905: 0xCBB6, + 30806 - 11905: 0xEDCC, + 30807 - 11905: 0xEDCD, + 30808 - 11905: 0xB37C, + 30809 - 11905: 0xB37D, + 30810 - 11905: 0xB37E, + 30811 - 11905: 0xB380, + 30812 - 11905: 0xB381, + 30813 - 11905: 0xCFF5, + 30814 - 11905: 0xB382, + 30815 - 11905: 0xB383, + 30816 - 11905: 0xB384, + 30817 - 11905: 0xB385, + 30818 - 11905: 0xB386, + 30819 - 11905: 0xB387, + 30820 - 11905: 0xB388, + 30821 - 11905: 0xB389, + 30822 - 11905: 0xB38A, + 30823 - 11905: 0xB38B, + 30824 - 11905: 0xB38C, + 30825 - 11905: 0xB38D, + 30826 - 11905: 0xEDD2, + 30827 - 11905: 0xC1F2, + 30828 - 11905: 0xD3B2, + 30829 - 11905: 0xEDCB, + 30830 - 11905: 0xC8B7, + 30831 - 11905: 0xB38E, + 30832 - 11905: 0xB38F, + 30833 - 11905: 0xB390, + 30834 - 11905: 0xB391, + 30835 - 11905: 0xB392, + 30836 - 11905: 0xB393, + 30837 - 11905: 0xB394, + 30838 - 11905: 0xB395, + 30839 - 11905: 0xBCEF, + 30840 - 11905: 0xB396, + 30841 - 11905: 0xB397, + 30842 - 11905: 0xB398, + 30843 - 11905: 0xB399, + 30844 - 11905: 0xC5F0, + 30845 - 11905: 0xB39A, + 30846 - 11905: 0xB39B, + 30847 - 11905: 0xB39C, + 30848 - 11905: 0xB39D, + 30849 - 11905: 0xB39E, + 30850 - 11905: 0xB39F, + 30851 - 11905: 0xB3A0, + 30852 - 11905: 0xB440, + 30853 - 11905: 0xB441, + 30854 - 11905: 0xB442, + 30855 - 11905: 0xEDD6, + 30856 - 11905: 0xB443, + 30857 - 11905: 0xB5EF, + 30858 - 11905: 0xB444, + 30859 - 11905: 0xB445, + 30860 - 11905: 0xC2B5, + 30861 - 11905: 0xB0AD, + 30862 - 11905: 0xCBE9, + 30863 - 11905: 0xB446, + 30864 - 11905: 0xB447, + 30865 - 11905: 0xB1AE, + 30866 - 11905: 0xB448, + 30867 - 11905: 0xEDD4, + 30868 - 11905: 0xB449, + 30869 - 11905: 0xB44A, + 30870 - 11905: 0xB44B, + 30871 - 11905: 0xCDEB, + 30872 - 11905: 0xB5E2, + 30873 - 11905: 0xB44C, + 30874 - 11905: 0xEDD5, + 30875 - 11905: 0xEDD3, + 30876 - 11905: 0xEDD7, + 30877 - 11905: 0xB44D, + 30878 - 11905: 0xB44E, + 30879 - 11905: 0xB5FA, + 30880 - 11905: 0xB44F, + 30881 - 11905: 0xEDD8, + 30882 - 11905: 0xB450, + 30883 - 11905: 0xEDD9, + 30884 - 11905: 0xB451, + 30885 - 11905: 0xEDDC, + 30886 - 11905: 0xB452, + 30887 - 11905: 0xB1CC, + 30888 - 11905: 0xB453, + 30889 - 11905: 0xB454, + 30890 - 11905: 0xB455, + 30891 - 11905: 0xB456, + 30892 - 11905: 0xB457, + 30893 - 11905: 0xB458, + 30894 - 11905: 0xB459, + 30895 - 11905: 0xB45A, + 30896 - 11905: 0xC5F6, + 30897 - 11905: 0xBCEE, + 30898 - 11905: 0xEDDA, + 30899 - 11905: 0xCCBC, + 30900 - 11905: 0xB2EA, + 30901 - 11905: 0xB45B, + 30902 - 11905: 0xB45C, + 30903 - 11905: 0xB45D, + 30904 - 11905: 0xB45E, + 30905 - 11905: 0xEDDB, + 30906 - 11905: 0xB45F, + 30907 - 11905: 0xB460, + 30908 - 11905: 0xB461, + 30909 - 11905: 0xB462, + 30910 - 11905: 0xC4EB, + 30911 - 11905: 0xB463, + 30912 - 11905: 0xB464, + 30913 - 11905: 0xB4C5, + 30914 - 11905: 0xB465, + 30915 - 11905: 0xB466, + 30916 - 11905: 0xB467, + 30917 - 11905: 0xB0F5, + 30918 - 11905: 0xB468, + 30919 - 11905: 0xB469, + 30920 - 11905: 0xB46A, + 30921 - 11905: 0xEDDF, + 30922 - 11905: 0xC0DA, + 30923 - 11905: 0xB4E8, + 30924 - 11905: 0xB46B, + 30925 - 11905: 0xB46C, + 30926 - 11905: 0xB46D, + 30927 - 11905: 0xB46E, + 30928 - 11905: 0xC5CD, + 30929 - 11905: 0xB46F, + 30930 - 11905: 0xB470, + 30931 - 11905: 0xB471, + 30932 - 11905: 0xEDDD, + 30933 - 11905: 0xBFC4, + 30934 - 11905: 0xB472, + 30935 - 11905: 0xB473, + 30936 - 11905: 0xB474, + 30937 - 11905: 0xEDDE, + 30938 - 11905: 0xB475, + 30939 - 11905: 0xB476, + 30940 - 11905: 0xB477, + 30941 - 11905: 0xB478, + 30942 - 11905: 0xB479, + 30943 - 11905: 0xB47A, + 30944 - 11905: 0xB47B, + 30945 - 11905: 0xB47C, + 30946 - 11905: 0xB47D, + 30947 - 11905: 0xB47E, + 30948 - 11905: 0xB480, + 30949 - 11905: 0xB481, + 30950 - 11905: 0xB482, + 30951 - 11905: 0xB483, + 30952 - 11905: 0xC4A5, + 30953 - 11905: 0xB484, + 30954 - 11905: 0xB485, + 30955 - 11905: 0xB486, + 30956 - 11905: 0xEDE0, + 30957 - 11905: 0xB487, + 30958 - 11905: 0xB488, + 30959 - 11905: 0xB489, + 30960 - 11905: 0xB48A, + 30961 - 11905: 0xB48B, + 30962 - 11905: 0xEDE1, + 30963 - 11905: 0xB48C, + 30964 - 11905: 0xEDE3, + 30965 - 11905: 0xB48D, + 30966 - 11905: 0xB48E, + 30967 - 11905: 0xC1D7, + 30968 - 11905: 0xB48F, + 30969 - 11905: 0xB490, + 30970 - 11905: 0xBBC7, + 30971 - 11905: 0xB491, + 30972 - 11905: 0xB492, + 30973 - 11905: 0xB493, + 30974 - 11905: 0xB494, + 30975 - 11905: 0xB495, + 30976 - 11905: 0xB496, + 30977 - 11905: 0xBDB8, + 30978 - 11905: 0xB497, + 30979 - 11905: 0xB498, + 30980 - 11905: 0xB499, + 30981 - 11905: 0xEDE2, + 30982 - 11905: 0xB49A, + 30983 - 11905: 0xB49B, + 30984 - 11905: 0xB49C, + 30985 - 11905: 0xB49D, + 30986 - 11905: 0xB49E, + 30987 - 11905: 0xB49F, + 30988 - 11905: 0xB4A0, + 30989 - 11905: 0xB540, + 30990 - 11905: 0xB541, + 30991 - 11905: 0xB542, + 30992 - 11905: 0xB543, + 30993 - 11905: 0xB544, + 30994 - 11905: 0xB545, + 30995 - 11905: 0xEDE4, + 30996 - 11905: 0xB546, + 30997 - 11905: 0xB547, + 30998 - 11905: 0xB548, + 30999 - 11905: 0xB549, + 31000 - 11905: 0xB54A, + 31001 - 11905: 0xB54B, + 31002 - 11905: 0xB54C, + 31003 - 11905: 0xB54D, + 31004 - 11905: 0xB54E, + 31005 - 11905: 0xB54F, + 31006 - 11905: 0xEDE6, + 31007 - 11905: 0xB550, + 31008 - 11905: 0xB551, + 31009 - 11905: 0xB552, + 31010 - 11905: 0xB553, + 31011 - 11905: 0xB554, + 31012 - 11905: 0xEDE5, + 31013 - 11905: 0xB555, + 31014 - 11905: 0xB556, + 31015 - 11905: 0xB557, + 31016 - 11905: 0xB558, + 31017 - 11905: 0xB559, + 31018 - 11905: 0xB55A, + 31019 - 11905: 0xB55B, + 31020 - 11905: 0xB55C, + 31021 - 11905: 0xB55D, + 31022 - 11905: 0xB55E, + 31023 - 11905: 0xB55F, + 31024 - 11905: 0xB560, + 31025 - 11905: 0xB561, + 31026 - 11905: 0xB562, + 31027 - 11905: 0xB563, + 31028 - 11905: 0xEDE7, + 31029 - 11905: 0xB564, + 31030 - 11905: 0xB565, + 31031 - 11905: 0xB566, + 31032 - 11905: 0xB567, + 31033 - 11905: 0xB568, + 31034 - 11905: 0xCABE, + 31035 - 11905: 0xECEA, + 31036 - 11905: 0xC0F1, + 31037 - 11905: 0xB569, + 31038 - 11905: 0xC9E7, + 31039 - 11905: 0xB56A, + 31040 - 11905: 0xECEB, + 31041 - 11905: 0xC6EE, + 31042 - 11905: 0xB56B, + 31043 - 11905: 0xB56C, + 31044 - 11905: 0xB56D, + 31045 - 11905: 0xB56E, + 31046 - 11905: 0xECEC, + 31047 - 11905: 0xB56F, + 31048 - 11905: 0xC6ED, + 31049 - 11905: 0xECED, + 31050 - 11905: 0xB570, + 31051 - 11905: 0xB571, + 31052 - 11905: 0xB572, + 31053 - 11905: 0xB573, + 31054 - 11905: 0xB574, + 31055 - 11905: 0xB575, + 31056 - 11905: 0xB576, + 31057 - 11905: 0xB577, + 31058 - 11905: 0xB578, + 31059 - 11905: 0xECF0, + 31060 - 11905: 0xB579, + 31061 - 11905: 0xB57A, + 31062 - 11905: 0xD7E6, + 31063 - 11905: 0xECF3, + 31064 - 11905: 0xB57B, + 31065 - 11905: 0xB57C, + 31066 - 11905: 0xECF1, + 31067 - 11905: 0xECEE, + 31068 - 11905: 0xECEF, + 31069 - 11905: 0xD7A3, + 31070 - 11905: 0xC9F1, + 31071 - 11905: 0xCBEE, + 31072 - 11905: 0xECF4, + 31073 - 11905: 0xB57D, + 31074 - 11905: 0xECF2, + 31075 - 11905: 0xB57E, + 31076 - 11905: 0xB580, + 31077 - 11905: 0xCFE9, + 31078 - 11905: 0xB581, + 31079 - 11905: 0xECF6, + 31080 - 11905: 0xC6B1, + 31081 - 11905: 0xB582, + 31082 - 11905: 0xB583, + 31083 - 11905: 0xB584, + 31084 - 11905: 0xB585, + 31085 - 11905: 0xBCC0, + 31086 - 11905: 0xB586, + 31087 - 11905: 0xECF5, + 31088 - 11905: 0xB587, + 31089 - 11905: 0xB588, + 31090 - 11905: 0xB589, + 31091 - 11905: 0xB58A, + 31092 - 11905: 0xB58B, + 31093 - 11905: 0xB58C, + 31094 - 11905: 0xB58D, + 31095 - 11905: 0xB5BB, + 31096 - 11905: 0xBBF6, + 31097 - 11905: 0xB58E, + 31098 - 11905: 0xECF7, + 31099 - 11905: 0xB58F, + 31100 - 11905: 0xB590, + 31101 - 11905: 0xB591, + 31102 - 11905: 0xB592, + 31103 - 11905: 0xB593, + 31104 - 11905: 0xD9F7, + 31105 - 11905: 0xBDFB, + 31106 - 11905: 0xB594, + 31107 - 11905: 0xB595, + 31108 - 11905: 0xC2BB, + 31109 - 11905: 0xECF8, + 31110 - 11905: 0xB596, + 31111 - 11905: 0xB597, + 31112 - 11905: 0xB598, + 31113 - 11905: 0xB599, + 31114 - 11905: 0xECF9, + 31115 - 11905: 0xB59A, + 31116 - 11905: 0xB59B, + 31117 - 11905: 0xB59C, + 31118 - 11905: 0xB59D, + 31119 - 11905: 0xB8A3, + 31120 - 11905: 0xB59E, + 31121 - 11905: 0xB59F, + 31122 - 11905: 0xB5A0, + 31123 - 11905: 0xB640, + 31124 - 11905: 0xB641, + 31125 - 11905: 0xB642, + 31126 - 11905: 0xB643, + 31127 - 11905: 0xB644, + 31128 - 11905: 0xB645, + 31129 - 11905: 0xB646, + 31130 - 11905: 0xECFA, + 31131 - 11905: 0xB647, + 31132 - 11905: 0xB648, + 31133 - 11905: 0xB649, + 31134 - 11905: 0xB64A, + 31135 - 11905: 0xB64B, + 31136 - 11905: 0xB64C, + 31137 - 11905: 0xB64D, + 31138 - 11905: 0xB64E, + 31139 - 11905: 0xB64F, + 31140 - 11905: 0xB650, + 31141 - 11905: 0xB651, + 31142 - 11905: 0xB652, + 31143 - 11905: 0xECFB, + 31144 - 11905: 0xB653, + 31145 - 11905: 0xB654, + 31146 - 11905: 0xB655, + 31147 - 11905: 0xB656, + 31148 - 11905: 0xB657, + 31149 - 11905: 0xB658, + 31150 - 11905: 0xB659, + 31151 - 11905: 0xB65A, + 31152 - 11905: 0xB65B, + 31153 - 11905: 0xB65C, + 31154 - 11905: 0xB65D, + 31155 - 11905: 0xECFC, + 31156 - 11905: 0xB65E, + 31157 - 11905: 0xB65F, + 31158 - 11905: 0xB660, + 31159 - 11905: 0xB661, + 31160 - 11905: 0xB662, + 31161 - 11905: 0xD3ED, + 31162 - 11905: 0xD8AE, + 31163 - 11905: 0xC0EB, + 31164 - 11905: 0xB663, + 31165 - 11905: 0xC7DD, + 31166 - 11905: 0xBACC, + 31167 - 11905: 0xB664, + 31168 - 11905: 0xD0E3, + 31169 - 11905: 0xCBBD, + 31170 - 11905: 0xB665, + 31171 - 11905: 0xCDBA, + 31172 - 11905: 0xB666, + 31173 - 11905: 0xB667, + 31174 - 11905: 0xB8D1, + 31175 - 11905: 0xB668, + 31176 - 11905: 0xB669, + 31177 - 11905: 0xB1FC, + 31178 - 11905: 0xB66A, + 31179 - 11905: 0xC7EF, + 31180 - 11905: 0xB66B, + 31181 - 11905: 0xD6D6, + 31182 - 11905: 0xB66C, + 31183 - 11905: 0xB66D, + 31184 - 11905: 0xB66E, + 31185 - 11905: 0xBFC6, + 31186 - 11905: 0xC3EB, + 31187 - 11905: 0xB66F, + 31188 - 11905: 0xB670, + 31189 - 11905: 0xEFF5, + 31190 - 11905: 0xB671, + 31191 - 11905: 0xB672, + 31192 - 11905: 0xC3D8, + 31193 - 11905: 0xB673, + 31194 - 11905: 0xB674, + 31195 - 11905: 0xB675, + 31196 - 11905: 0xB676, + 31197 - 11905: 0xB677, + 31198 - 11905: 0xB678, + 31199 - 11905: 0xD7E2, + 31200 - 11905: 0xB679, + 31201 - 11905: 0xB67A, + 31202 - 11905: 0xB67B, + 31203 - 11905: 0xEFF7, + 31204 - 11905: 0xB3D3, + 31205 - 11905: 0xB67C, + 31206 - 11905: 0xC7D8, + 31207 - 11905: 0xD1ED, + 31208 - 11905: 0xB67D, + 31209 - 11905: 0xD6C8, + 31210 - 11905: 0xB67E, + 31211 - 11905: 0xEFF8, + 31212 - 11905: 0xB680, + 31213 - 11905: 0xEFF6, + 31214 - 11905: 0xB681, + 31215 - 11905: 0xBBFD, + 31216 - 11905: 0xB3C6, + 31217 - 11905: 0xB682, + 31218 - 11905: 0xB683, + 31219 - 11905: 0xB684, + 31220 - 11905: 0xB685, + 31221 - 11905: 0xB686, + 31222 - 11905: 0xB687, + 31223 - 11905: 0xB688, + 31224 - 11905: 0xBDD5, + 31225 - 11905: 0xB689, + 31226 - 11905: 0xB68A, + 31227 - 11905: 0xD2C6, + 31228 - 11905: 0xB68B, + 31229 - 11905: 0xBBE0, + 31230 - 11905: 0xB68C, + 31231 - 11905: 0xB68D, + 31232 - 11905: 0xCFA1, + 31233 - 11905: 0xB68E, + 31234 - 11905: 0xEFFC, + 31235 - 11905: 0xEFFB, + 31236 - 11905: 0xB68F, + 31237 - 11905: 0xB690, + 31238 - 11905: 0xEFF9, + 31239 - 11905: 0xB691, + 31240 - 11905: 0xB692, + 31241 - 11905: 0xB693, + 31242 - 11905: 0xB694, + 31243 - 11905: 0xB3CC, + 31244 - 11905: 0xB695, + 31245 - 11905: 0xC9D4, + 31246 - 11905: 0xCBB0, + 31247 - 11905: 0xB696, + 31248 - 11905: 0xB697, + 31249 - 11905: 0xB698, + 31250 - 11905: 0xB699, + 31251 - 11905: 0xB69A, + 31252 - 11905: 0xEFFE, + 31253 - 11905: 0xB69B, + 31254 - 11905: 0xB69C, + 31255 - 11905: 0xB0DE, + 31256 - 11905: 0xB69D, + 31257 - 11905: 0xB69E, + 31258 - 11905: 0xD6C9, + 31259 - 11905: 0xB69F, + 31260 - 11905: 0xB6A0, + 31261 - 11905: 0xB740, + 31262 - 11905: 0xEFFD, + 31263 - 11905: 0xB741, + 31264 - 11905: 0xB3ED, + 31265 - 11905: 0xB742, + 31266 - 11905: 0xB743, + 31267 - 11905: 0xF6D5, + 31268 - 11905: 0xB744, + 31269 - 11905: 0xB745, + 31270 - 11905: 0xB746, + 31271 - 11905: 0xB747, + 31272 - 11905: 0xB748, + 31273 - 11905: 0xB749, + 31274 - 11905: 0xB74A, + 31275 - 11905: 0xB74B, + 31276 - 11905: 0xB74C, + 31277 - 11905: 0xB74D, + 31278 - 11905: 0xB74E, + 31279 - 11905: 0xB74F, + 31280 - 11905: 0xB750, + 31281 - 11905: 0xB751, + 31282 - 11905: 0xB752, + 31283 - 11905: 0xCEC8, + 31284 - 11905: 0xB753, + 31285 - 11905: 0xB754, + 31286 - 11905: 0xB755, + 31287 - 11905: 0xF0A2, + 31288 - 11905: 0xB756, + 31289 - 11905: 0xF0A1, + 31290 - 11905: 0xB757, + 31291 - 11905: 0xB5BE, + 31292 - 11905: 0xBCDA, + 31293 - 11905: 0xBBFC, + 31294 - 11905: 0xB758, + 31295 - 11905: 0xB8E5, + 31296 - 11905: 0xB759, + 31297 - 11905: 0xB75A, + 31298 - 11905: 0xB75B, + 31299 - 11905: 0xB75C, + 31300 - 11905: 0xB75D, + 31301 - 11905: 0xB75E, + 31302 - 11905: 0xC4C2, + 31303 - 11905: 0xB75F, + 31304 - 11905: 0xB760, + 31305 - 11905: 0xB761, + 31306 - 11905: 0xB762, + 31307 - 11905: 0xB763, + 31308 - 11905: 0xB764, + 31309 - 11905: 0xB765, + 31310 - 11905: 0xB766, + 31311 - 11905: 0xB767, + 31312 - 11905: 0xB768, + 31313 - 11905: 0xF0A3, + 31314 - 11905: 0xB769, + 31315 - 11905: 0xB76A, + 31316 - 11905: 0xB76B, + 31317 - 11905: 0xB76C, + 31318 - 11905: 0xB76D, + 31319 - 11905: 0xCBEB, + 31320 - 11905: 0xB76E, + 31321 - 11905: 0xB76F, + 31322 - 11905: 0xB770, + 31323 - 11905: 0xB771, + 31324 - 11905: 0xB772, + 31325 - 11905: 0xB773, + 31326 - 11905: 0xB774, + 31327 - 11905: 0xB775, + 31328 - 11905: 0xB776, + 31329 - 11905: 0xB777, + 31330 - 11905: 0xB778, + 31331 - 11905: 0xB779, + 31332 - 11905: 0xB77A, + 31333 - 11905: 0xB77B, + 31334 - 11905: 0xB77C, + 31335 - 11905: 0xB77D, + 31336 - 11905: 0xB77E, + 31337 - 11905: 0xB780, + 31338 - 11905: 0xB781, + 31339 - 11905: 0xB782, + 31340 - 11905: 0xB783, + 31341 - 11905: 0xB784, + 31342 - 11905: 0xB785, + 31343 - 11905: 0xB786, + 31344 - 11905: 0xF0A6, + 31345 - 11905: 0xB787, + 31346 - 11905: 0xB788, + 31347 - 11905: 0xB789, + 31348 - 11905: 0xD1A8, + 31349 - 11905: 0xB78A, + 31350 - 11905: 0xBEBF, + 31351 - 11905: 0xC7EE, + 31352 - 11905: 0xF1B6, + 31353 - 11905: 0xF1B7, + 31354 - 11905: 0xBFD5, + 31355 - 11905: 0xB78B, + 31356 - 11905: 0xB78C, + 31357 - 11905: 0xB78D, + 31358 - 11905: 0xB78E, + 31359 - 11905: 0xB4A9, + 31360 - 11905: 0xF1B8, + 31361 - 11905: 0xCDBB, + 31362 - 11905: 0xB78F, + 31363 - 11905: 0xC7D4, + 31364 - 11905: 0xD5AD, + 31365 - 11905: 0xB790, + 31366 - 11905: 0xF1B9, + 31367 - 11905: 0xB791, + 31368 - 11905: 0xF1BA, + 31369 - 11905: 0xB792, + 31370 - 11905: 0xB793, + 31371 - 11905: 0xB794, + 31372 - 11905: 0xB795, + 31373 - 11905: 0xC7CF, + 31374 - 11905: 0xB796, + 31375 - 11905: 0xB797, + 31376 - 11905: 0xB798, + 31377 - 11905: 0xD2A4, + 31378 - 11905: 0xD6CF, + 31379 - 11905: 0xB799, + 31380 - 11905: 0xB79A, + 31381 - 11905: 0xF1BB, + 31382 - 11905: 0xBDD1, + 31383 - 11905: 0xB4B0, + 31384 - 11905: 0xBEBD, + 31385 - 11905: 0xB79B, + 31386 - 11905: 0xB79C, + 31387 - 11905: 0xB79D, + 31388 - 11905: 0xB4DC, + 31389 - 11905: 0xCED1, + 31390 - 11905: 0xB79E, + 31391 - 11905: 0xBFDF, + 31392 - 11905: 0xF1BD, + 31393 - 11905: 0xB79F, + 31394 - 11905: 0xB7A0, + 31395 - 11905: 0xB840, + 31396 - 11905: 0xB841, + 31397 - 11905: 0xBFFA, + 31398 - 11905: 0xF1BC, + 31399 - 11905: 0xB842, + 31400 - 11905: 0xF1BF, + 31401 - 11905: 0xB843, + 31402 - 11905: 0xB844, + 31403 - 11905: 0xB845, + 31404 - 11905: 0xF1BE, + 31405 - 11905: 0xF1C0, + 31406 - 11905: 0xB846, + 31407 - 11905: 0xB847, + 31408 - 11905: 0xB848, + 31409 - 11905: 0xB849, + 31410 - 11905: 0xB84A, + 31411 - 11905: 0xF1C1, + 31412 - 11905: 0xB84B, + 31413 - 11905: 0xB84C, + 31414 - 11905: 0xB84D, + 31415 - 11905: 0xB84E, + 31416 - 11905: 0xB84F, + 31417 - 11905: 0xB850, + 31418 - 11905: 0xB851, + 31419 - 11905: 0xB852, + 31420 - 11905: 0xB853, + 31421 - 11905: 0xB854, + 31422 - 11905: 0xB855, + 31423 - 11905: 0xC1FE, + 31424 - 11905: 0xB856, + 31425 - 11905: 0xB857, + 31426 - 11905: 0xB858, + 31427 - 11905: 0xB859, + 31428 - 11905: 0xB85A, + 31429 - 11905: 0xB85B, + 31430 - 11905: 0xB85C, + 31431 - 11905: 0xB85D, + 31432 - 11905: 0xB85E, + 31433 - 11905: 0xB85F, + 31434 - 11905: 0xB860, + 31435 - 11905: 0xC1A2, + 31436 - 11905: 0xB861, + 31437 - 11905: 0xB862, + 31438 - 11905: 0xB863, + 31439 - 11905: 0xB864, + 31440 - 11905: 0xB865, + 31441 - 11905: 0xB866, + 31442 - 11905: 0xB867, + 31443 - 11905: 0xB868, + 31444 - 11905: 0xB869, + 31445 - 11905: 0xB86A, + 31446 - 11905: 0xCAFA, + 31447 - 11905: 0xB86B, + 31448 - 11905: 0xB86C, + 31449 - 11905: 0xD5BE, + 31450 - 11905: 0xB86D, + 31451 - 11905: 0xB86E, + 31452 - 11905: 0xB86F, + 31453 - 11905: 0xB870, + 31454 - 11905: 0xBEBA, + 31455 - 11905: 0xBEB9, + 31456 - 11905: 0xD5C2, + 31457 - 11905: 0xB871, + 31458 - 11905: 0xB872, + 31459 - 11905: 0xBFA2, + 31460 - 11905: 0xB873, + 31461 - 11905: 0xCDAF, + 31462 - 11905: 0xF1B5, + 31463 - 11905: 0xB874, + 31464 - 11905: 0xB875, + 31465 - 11905: 0xB876, + 31466 - 11905: 0xB877, + 31467 - 11905: 0xB878, + 31468 - 11905: 0xB879, + 31469 - 11905: 0xBDDF, + 31470 - 11905: 0xB87A, + 31471 - 11905: 0xB6CB, + 31472 - 11905: 0xB87B, + 31473 - 11905: 0xB87C, + 31474 - 11905: 0xB87D, + 31475 - 11905: 0xB87E, + 31476 - 11905: 0xB880, + 31477 - 11905: 0xB881, + 31478 - 11905: 0xB882, + 31479 - 11905: 0xB883, + 31480 - 11905: 0xB884, + 31481 - 11905: 0xD6F1, + 31482 - 11905: 0xF3C3, + 31483 - 11905: 0xB885, + 31484 - 11905: 0xB886, + 31485 - 11905: 0xF3C4, + 31486 - 11905: 0xB887, + 31487 - 11905: 0xB8CD, + 31488 - 11905: 0xB888, + 31489 - 11905: 0xB889, + 31490 - 11905: 0xB88A, + 31491 - 11905: 0xF3C6, + 31492 - 11905: 0xF3C7, + 31493 - 11905: 0xB88B, + 31494 - 11905: 0xB0CA, + 31495 - 11905: 0xB88C, + 31496 - 11905: 0xF3C5, + 31497 - 11905: 0xB88D, + 31498 - 11905: 0xF3C9, + 31499 - 11905: 0xCBF1, + 31500 - 11905: 0xB88E, + 31501 - 11905: 0xB88F, + 31502 - 11905: 0xB890, + 31503 - 11905: 0xF3CB, + 31504 - 11905: 0xB891, + 31505 - 11905: 0xD0A6, + 31506 - 11905: 0xB892, + 31507 - 11905: 0xB893, + 31508 - 11905: 0xB1CA, + 31509 - 11905: 0xF3C8, + 31510 - 11905: 0xB894, + 31511 - 11905: 0xB895, + 31512 - 11905: 0xB896, + 31513 - 11905: 0xF3CF, + 31514 - 11905: 0xB897, + 31515 - 11905: 0xB5D1, + 31516 - 11905: 0xB898, + 31517 - 11905: 0xB899, + 31518 - 11905: 0xF3D7, + 31519 - 11905: 0xB89A, + 31520 - 11905: 0xF3D2, + 31521 - 11905: 0xB89B, + 31522 - 11905: 0xB89C, + 31523 - 11905: 0xB89D, + 31524 - 11905: 0xF3D4, + 31525 - 11905: 0xF3D3, + 31526 - 11905: 0xB7FB, + 31527 - 11905: 0xB89E, + 31528 - 11905: 0xB1BF, + 31529 - 11905: 0xB89F, + 31530 - 11905: 0xF3CE, + 31531 - 11905: 0xF3CA, + 31532 - 11905: 0xB5DA, + 31533 - 11905: 0xB8A0, + 31534 - 11905: 0xF3D0, + 31535 - 11905: 0xB940, + 31536 - 11905: 0xB941, + 31537 - 11905: 0xF3D1, + 31538 - 11905: 0xB942, + 31539 - 11905: 0xF3D5, + 31540 - 11905: 0xB943, + 31541 - 11905: 0xB944, + 31542 - 11905: 0xB945, + 31543 - 11905: 0xB946, + 31544 - 11905: 0xF3CD, + 31545 - 11905: 0xB947, + 31546 - 11905: 0xBCE3, + 31547 - 11905: 0xB948, + 31548 - 11905: 0xC1FD, + 31549 - 11905: 0xB949, + 31550 - 11905: 0xF3D6, + 31551 - 11905: 0xB94A, + 31552 - 11905: 0xB94B, + 31553 - 11905: 0xB94C, + 31554 - 11905: 0xB94D, + 31555 - 11905: 0xB94E, + 31556 - 11905: 0xB94F, + 31557 - 11905: 0xF3DA, + 31558 - 11905: 0xB950, + 31559 - 11905: 0xF3CC, + 31560 - 11905: 0xB951, + 31561 - 11905: 0xB5C8, + 31562 - 11905: 0xB952, + 31563 - 11905: 0xBDEE, + 31564 - 11905: 0xF3DC, + 31565 - 11905: 0xB953, + 31566 - 11905: 0xB954, + 31567 - 11905: 0xB7A4, + 31568 - 11905: 0xBFF0, + 31569 - 11905: 0xD6FE, + 31570 - 11905: 0xCDB2, + 31571 - 11905: 0xB955, + 31572 - 11905: 0xB4F0, + 31573 - 11905: 0xB956, + 31574 - 11905: 0xB2DF, + 31575 - 11905: 0xB957, + 31576 - 11905: 0xF3D8, + 31577 - 11905: 0xB958, + 31578 - 11905: 0xF3D9, + 31579 - 11905: 0xC9B8, + 31580 - 11905: 0xB959, + 31581 - 11905: 0xF3DD, + 31582 - 11905: 0xB95A, + 31583 - 11905: 0xB95B, + 31584 - 11905: 0xF3DE, + 31585 - 11905: 0xB95C, + 31586 - 11905: 0xF3E1, + 31587 - 11905: 0xB95D, + 31588 - 11905: 0xB95E, + 31589 - 11905: 0xB95F, + 31590 - 11905: 0xB960, + 31591 - 11905: 0xB961, + 31592 - 11905: 0xB962, + 31593 - 11905: 0xB963, + 31594 - 11905: 0xB964, + 31595 - 11905: 0xB965, + 31596 - 11905: 0xB966, + 31597 - 11905: 0xB967, + 31598 - 11905: 0xF3DF, + 31599 - 11905: 0xB968, + 31600 - 11905: 0xB969, + 31601 - 11905: 0xF3E3, + 31602 - 11905: 0xF3E2, + 31603 - 11905: 0xB96A, + 31604 - 11905: 0xB96B, + 31605 - 11905: 0xF3DB, + 31606 - 11905: 0xB96C, + 31607 - 11905: 0xBFEA, + 31608 - 11905: 0xB96D, + 31609 - 11905: 0xB3EF, + 31610 - 11905: 0xB96E, + 31611 - 11905: 0xF3E0, + 31612 - 11905: 0xB96F, + 31613 - 11905: 0xB970, + 31614 - 11905: 0xC7A9, + 31615 - 11905: 0xB971, + 31616 - 11905: 0xBCF2, + 31617 - 11905: 0xB972, + 31618 - 11905: 0xB973, + 31619 - 11905: 0xB974, + 31620 - 11905: 0xB975, + 31621 - 11905: 0xF3EB, + 31622 - 11905: 0xB976, + 31623 - 11905: 0xB977, + 31624 - 11905: 0xB978, + 31625 - 11905: 0xB979, + 31626 - 11905: 0xB97A, + 31627 - 11905: 0xB97B, + 31628 - 11905: 0xB97C, + 31629 - 11905: 0xB9BF, + 31630 - 11905: 0xB97D, + 31631 - 11905: 0xB97E, + 31632 - 11905: 0xF3E4, + 31633 - 11905: 0xB980, + 31634 - 11905: 0xB981, + 31635 - 11905: 0xB982, + 31636 - 11905: 0xB2AD, + 31637 - 11905: 0xBBFE, + 31638 - 11905: 0xB983, + 31639 - 11905: 0xCBE3, + 31640 - 11905: 0xB984, + 31641 - 11905: 0xB985, + 31642 - 11905: 0xB986, + 31643 - 11905: 0xB987, + 31644 - 11905: 0xF3ED, + 31645 - 11905: 0xF3E9, + 31646 - 11905: 0xB988, + 31647 - 11905: 0xB989, + 31648 - 11905: 0xB98A, + 31649 - 11905: 0xB9DC, + 31650 - 11905: 0xF3EE, + 31651 - 11905: 0xB98B, + 31652 - 11905: 0xB98C, + 31653 - 11905: 0xB98D, + 31654 - 11905: 0xF3E5, + 31655 - 11905: 0xF3E6, + 31656 - 11905: 0xF3EA, + 31657 - 11905: 0xC2E1, + 31658 - 11905: 0xF3EC, + 31659 - 11905: 0xF3EF, + 31660 - 11905: 0xF3E8, + 31661 - 11905: 0xBCFD, + 31662 - 11905: 0xB98E, + 31663 - 11905: 0xB98F, + 31664 - 11905: 0xB990, + 31665 - 11905: 0xCFE4, + 31666 - 11905: 0xB991, + 31667 - 11905: 0xB992, + 31668 - 11905: 0xF3F0, + 31669 - 11905: 0xB993, + 31670 - 11905: 0xB994, + 31671 - 11905: 0xB995, + 31672 - 11905: 0xF3E7, + 31673 - 11905: 0xB996, + 31674 - 11905: 0xB997, + 31675 - 11905: 0xB998, + 31676 - 11905: 0xB999, + 31677 - 11905: 0xB99A, + 31678 - 11905: 0xB99B, + 31679 - 11905: 0xB99C, + 31680 - 11905: 0xB99D, + 31681 - 11905: 0xF3F2, + 31682 - 11905: 0xB99E, + 31683 - 11905: 0xB99F, + 31684 - 11905: 0xB9A0, + 31685 - 11905: 0xBA40, + 31686 - 11905: 0xD7AD, + 31687 - 11905: 0xC6AA, + 31688 - 11905: 0xBA41, + 31689 - 11905: 0xBA42, + 31690 - 11905: 0xBA43, + 31691 - 11905: 0xBA44, + 31692 - 11905: 0xF3F3, + 31693 - 11905: 0xBA45, + 31694 - 11905: 0xBA46, + 31695 - 11905: 0xBA47, + 31696 - 11905: 0xBA48, + 31697 - 11905: 0xF3F1, + 31698 - 11905: 0xBA49, + 31699 - 11905: 0xC2A8, + 31700 - 11905: 0xBA4A, + 31701 - 11905: 0xBA4B, + 31702 - 11905: 0xBA4C, + 31703 - 11905: 0xBA4D, + 31704 - 11905: 0xBA4E, + 31705 - 11905: 0xB8DD, + 31706 - 11905: 0xF3F5, + 31707 - 11905: 0xBA4F, + 31708 - 11905: 0xBA50, + 31709 - 11905: 0xF3F4, + 31710 - 11905: 0xBA51, + 31711 - 11905: 0xBA52, + 31712 - 11905: 0xBA53, + 31713 - 11905: 0xB4DB, + 31714 - 11905: 0xBA54, + 31715 - 11905: 0xBA55, + 31716 - 11905: 0xBA56, + 31717 - 11905: 0xF3F6, + 31718 - 11905: 0xF3F7, + 31719 - 11905: 0xBA57, + 31720 - 11905: 0xBA58, + 31721 - 11905: 0xBA59, + 31722 - 11905: 0xF3F8, + 31723 - 11905: 0xBA5A, + 31724 - 11905: 0xBA5B, + 31725 - 11905: 0xBA5C, + 31726 - 11905: 0xC0BA, + 31727 - 11905: 0xBA5D, + 31728 - 11905: 0xBA5E, + 31729 - 11905: 0xC0E9, + 31730 - 11905: 0xBA5F, + 31731 - 11905: 0xBA60, + 31732 - 11905: 0xBA61, + 31733 - 11905: 0xBA62, + 31734 - 11905: 0xBA63, + 31735 - 11905: 0xC5F1, + 31736 - 11905: 0xBA64, + 31737 - 11905: 0xBA65, + 31738 - 11905: 0xBA66, + 31739 - 11905: 0xBA67, + 31740 - 11905: 0xF3FB, + 31741 - 11905: 0xBA68, + 31742 - 11905: 0xF3FA, + 31743 - 11905: 0xBA69, + 31744 - 11905: 0xBA6A, + 31745 - 11905: 0xBA6B, + 31746 - 11905: 0xBA6C, + 31747 - 11905: 0xBA6D, + 31748 - 11905: 0xBA6E, + 31749 - 11905: 0xBA6F, + 31750 - 11905: 0xBA70, + 31751 - 11905: 0xB4D8, + 31752 - 11905: 0xBA71, + 31753 - 11905: 0xBA72, + 31754 - 11905: 0xBA73, + 31755 - 11905: 0xF3FE, + 31756 - 11905: 0xF3F9, + 31757 - 11905: 0xBA74, + 31758 - 11905: 0xBA75, + 31759 - 11905: 0xF3FC, + 31760 - 11905: 0xBA76, + 31761 - 11905: 0xBA77, + 31762 - 11905: 0xBA78, + 31763 - 11905: 0xBA79, + 31764 - 11905: 0xBA7A, + 31765 - 11905: 0xBA7B, + 31766 - 11905: 0xF3FD, + 31767 - 11905: 0xBA7C, + 31768 - 11905: 0xBA7D, + 31769 - 11905: 0xBA7E, + 31770 - 11905: 0xBA80, + 31771 - 11905: 0xBA81, + 31772 - 11905: 0xBA82, + 31773 - 11905: 0xBA83, + 31774 - 11905: 0xBA84, + 31775 - 11905: 0xF4A1, + 31776 - 11905: 0xBA85, + 31777 - 11905: 0xBA86, + 31778 - 11905: 0xBA87, + 31779 - 11905: 0xBA88, + 31780 - 11905: 0xBA89, + 31781 - 11905: 0xBA8A, + 31782 - 11905: 0xF4A3, + 31783 - 11905: 0xBBC9, + 31784 - 11905: 0xBA8B, + 31785 - 11905: 0xBA8C, + 31786 - 11905: 0xF4A2, + 31787 - 11905: 0xBA8D, + 31788 - 11905: 0xBA8E, + 31789 - 11905: 0xBA8F, + 31790 - 11905: 0xBA90, + 31791 - 11905: 0xBA91, + 31792 - 11905: 0xBA92, + 31793 - 11905: 0xBA93, + 31794 - 11905: 0xBA94, + 31795 - 11905: 0xBA95, + 31796 - 11905: 0xBA96, + 31797 - 11905: 0xBA97, + 31798 - 11905: 0xBA98, + 31799 - 11905: 0xBA99, + 31800 - 11905: 0xF4A4, + 31801 - 11905: 0xBA9A, + 31802 - 11905: 0xBA9B, + 31803 - 11905: 0xBA9C, + 31804 - 11905: 0xBA9D, + 31805 - 11905: 0xBA9E, + 31806 - 11905: 0xBA9F, + 31807 - 11905: 0xB2BE, + 31808 - 11905: 0xF4A6, + 31809 - 11905: 0xF4A5, + 31810 - 11905: 0xBAA0, + 31811 - 11905: 0xBB40, + 31812 - 11905: 0xBB41, + 31813 - 11905: 0xBB42, + 31814 - 11905: 0xBB43, + 31815 - 11905: 0xBB44, + 31816 - 11905: 0xBB45, + 31817 - 11905: 0xBB46, + 31818 - 11905: 0xBB47, + 31819 - 11905: 0xBB48, + 31820 - 11905: 0xBB49, + 31821 - 11905: 0xBCAE, + 31822 - 11905: 0xBB4A, + 31823 - 11905: 0xBB4B, + 31824 - 11905: 0xBB4C, + 31825 - 11905: 0xBB4D, + 31826 - 11905: 0xBB4E, + 31827 - 11905: 0xBB4F, + 31828 - 11905: 0xBB50, + 31829 - 11905: 0xBB51, + 31830 - 11905: 0xBB52, + 31831 - 11905: 0xBB53, + 31832 - 11905: 0xBB54, + 31833 - 11905: 0xBB55, + 31834 - 11905: 0xBB56, + 31835 - 11905: 0xBB57, + 31836 - 11905: 0xBB58, + 31837 - 11905: 0xBB59, + 31838 - 11905: 0xBB5A, + 31839 - 11905: 0xBB5B, + 31840 - 11905: 0xBB5C, + 31841 - 11905: 0xBB5D, + 31842 - 11905: 0xBB5E, + 31843 - 11905: 0xBB5F, + 31844 - 11905: 0xBB60, + 31845 - 11905: 0xBB61, + 31846 - 11905: 0xBB62, + 31847 - 11905: 0xBB63, + 31848 - 11905: 0xBB64, + 31849 - 11905: 0xBB65, + 31850 - 11905: 0xBB66, + 31851 - 11905: 0xBB67, + 31852 - 11905: 0xBB68, + 31853 - 11905: 0xBB69, + 31854 - 11905: 0xBB6A, + 31855 - 11905: 0xBB6B, + 31856 - 11905: 0xBB6C, + 31857 - 11905: 0xBB6D, + 31858 - 11905: 0xBB6E, + 31859 - 11905: 0xC3D7, + 31860 - 11905: 0xD9E1, + 31861 - 11905: 0xBB6F, + 31862 - 11905: 0xBB70, + 31863 - 11905: 0xBB71, + 31864 - 11905: 0xBB72, + 31865 - 11905: 0xBB73, + 31866 - 11905: 0xBB74, + 31867 - 11905: 0xC0E0, + 31868 - 11905: 0xF4CC, + 31869 - 11905: 0xD7D1, + 31870 - 11905: 0xBB75, + 31871 - 11905: 0xBB76, + 31872 - 11905: 0xBB77, + 31873 - 11905: 0xBB78, + 31874 - 11905: 0xBB79, + 31875 - 11905: 0xBB7A, + 31876 - 11905: 0xBB7B, + 31877 - 11905: 0xBB7C, + 31878 - 11905: 0xBB7D, + 31879 - 11905: 0xBB7E, + 31880 - 11905: 0xBB80, + 31881 - 11905: 0xB7DB, + 31882 - 11905: 0xBB81, + 31883 - 11905: 0xBB82, + 31884 - 11905: 0xBB83, + 31885 - 11905: 0xBB84, + 31886 - 11905: 0xBB85, + 31887 - 11905: 0xBB86, + 31888 - 11905: 0xBB87, + 31889 - 11905: 0xF4CE, + 31890 - 11905: 0xC1A3, + 31891 - 11905: 0xBB88, + 31892 - 11905: 0xBB89, + 31893 - 11905: 0xC6C9, + 31894 - 11905: 0xBB8A, + 31895 - 11905: 0xB4D6, + 31896 - 11905: 0xD5B3, + 31897 - 11905: 0xBB8B, + 31898 - 11905: 0xBB8C, + 31899 - 11905: 0xBB8D, + 31900 - 11905: 0xF4D0, + 31901 - 11905: 0xF4CF, + 31902 - 11905: 0xF4D1, + 31903 - 11905: 0xCBDA, + 31904 - 11905: 0xBB8E, + 31905 - 11905: 0xBB8F, + 31906 - 11905: 0xF4D2, + 31907 - 11905: 0xBB90, + 31908 - 11905: 0xD4C1, + 31909 - 11905: 0xD6E0, + 31910 - 11905: 0xBB91, + 31911 - 11905: 0xBB92, + 31912 - 11905: 0xBB93, + 31913 - 11905: 0xBB94, + 31914 - 11905: 0xB7E0, + 31915 - 11905: 0xBB95, + 31916 - 11905: 0xBB96, + 31917 - 11905: 0xBB97, + 31918 - 11905: 0xC1B8, + 31919 - 11905: 0xBB98, + 31920 - 11905: 0xBB99, + 31921 - 11905: 0xC1BB, + 31922 - 11905: 0xF4D3, + 31923 - 11905: 0xBEAC, + 31924 - 11905: 0xBB9A, + 31925 - 11905: 0xBB9B, + 31926 - 11905: 0xBB9C, + 31927 - 11905: 0xBB9D, + 31928 - 11905: 0xBB9E, + 31929 - 11905: 0xB4E2, + 31930 - 11905: 0xBB9F, + 31931 - 11905: 0xBBA0, + 31932 - 11905: 0xF4D4, + 31933 - 11905: 0xF4D5, + 31934 - 11905: 0xBEAB, + 31935 - 11905: 0xBC40, + 31936 - 11905: 0xBC41, + 31937 - 11905: 0xF4D6, + 31938 - 11905: 0xBC42, + 31939 - 11905: 0xBC43, + 31940 - 11905: 0xBC44, + 31941 - 11905: 0xF4DB, + 31942 - 11905: 0xBC45, + 31943 - 11905: 0xF4D7, + 31944 - 11905: 0xF4DA, + 31945 - 11905: 0xBC46, + 31946 - 11905: 0xBAFD, + 31947 - 11905: 0xBC47, + 31948 - 11905: 0xF4D8, + 31949 - 11905: 0xF4D9, + 31950 - 11905: 0xBC48, + 31951 - 11905: 0xBC49, + 31952 - 11905: 0xBC4A, + 31953 - 11905: 0xBC4B, + 31954 - 11905: 0xBC4C, + 31955 - 11905: 0xBC4D, + 31956 - 11905: 0xBC4E, + 31957 - 11905: 0xB8E2, + 31958 - 11905: 0xCCC7, + 31959 - 11905: 0xF4DC, + 31960 - 11905: 0xBC4F, + 31961 - 11905: 0xB2DA, + 31962 - 11905: 0xBC50, + 31963 - 11905: 0xBC51, + 31964 - 11905: 0xC3D3, + 31965 - 11905: 0xBC52, + 31966 - 11905: 0xBC53, + 31967 - 11905: 0xD4E3, + 31968 - 11905: 0xBFB7, + 31969 - 11905: 0xBC54, + 31970 - 11905: 0xBC55, + 31971 - 11905: 0xBC56, + 31972 - 11905: 0xBC57, + 31973 - 11905: 0xBC58, + 31974 - 11905: 0xBC59, + 31975 - 11905: 0xBC5A, + 31976 - 11905: 0xF4DD, + 31977 - 11905: 0xBC5B, + 31978 - 11905: 0xBC5C, + 31979 - 11905: 0xBC5D, + 31980 - 11905: 0xBC5E, + 31981 - 11905: 0xBC5F, + 31982 - 11905: 0xBC60, + 31983 - 11905: 0xC5B4, + 31984 - 11905: 0xBC61, + 31985 - 11905: 0xBC62, + 31986 - 11905: 0xBC63, + 31987 - 11905: 0xBC64, + 31988 - 11905: 0xBC65, + 31989 - 11905: 0xBC66, + 31990 - 11905: 0xBC67, + 31991 - 11905: 0xBC68, + 31992 - 11905: 0xF4E9, + 31993 - 11905: 0xBC69, + 31994 - 11905: 0xBC6A, + 31995 - 11905: 0xCFB5, + 31996 - 11905: 0xBC6B, + 31997 - 11905: 0xBC6C, + 31998 - 11905: 0xBC6D, + 31999 - 11905: 0xBC6E, + 32000 - 11905: 0xBC6F, + 32001 - 11905: 0xBC70, + 32002 - 11905: 0xBC71, + 32003 - 11905: 0xBC72, + 32004 - 11905: 0xBC73, + 32005 - 11905: 0xBC74, + 32006 - 11905: 0xBC75, + 32007 - 11905: 0xBC76, + 32008 - 11905: 0xBC77, + 32009 - 11905: 0xBC78, + 32010 - 11905: 0xCEC9, + 32011 - 11905: 0xBC79, + 32012 - 11905: 0xBC7A, + 32013 - 11905: 0xBC7B, + 32014 - 11905: 0xBC7C, + 32015 - 11905: 0xBC7D, + 32016 - 11905: 0xBC7E, + 32017 - 11905: 0xBC80, + 32018 - 11905: 0xBC81, + 32019 - 11905: 0xBC82, + 32020 - 11905: 0xBC83, + 32021 - 11905: 0xBC84, + 32022 - 11905: 0xBC85, + 32023 - 11905: 0xBC86, + 32024 - 11905: 0xBC87, + 32025 - 11905: 0xBC88, + 32026 - 11905: 0xBC89, + 32027 - 11905: 0xBC8A, + 32028 - 11905: 0xBC8B, + 32029 - 11905: 0xBC8C, + 32030 - 11905: 0xBC8D, + 32031 - 11905: 0xBC8E, + 32032 - 11905: 0xCBD8, + 32033 - 11905: 0xBC8F, + 32034 - 11905: 0xCBF7, + 32035 - 11905: 0xBC90, + 32036 - 11905: 0xBC91, + 32037 - 11905: 0xBC92, + 32038 - 11905: 0xBC93, + 32039 - 11905: 0xBDF4, + 32040 - 11905: 0xBC94, + 32041 - 11905: 0xBC95, + 32042 - 11905: 0xBC96, + 32043 - 11905: 0xD7CF, + 32044 - 11905: 0xBC97, + 32045 - 11905: 0xBC98, + 32046 - 11905: 0xBC99, + 32047 - 11905: 0xC0DB, + 32048 - 11905: 0xBC9A, + 32049 - 11905: 0xBC9B, + 32050 - 11905: 0xBC9C, + 32051 - 11905: 0xBC9D, + 32052 - 11905: 0xBC9E, + 32053 - 11905: 0xBC9F, + 32054 - 11905: 0xBCA0, + 32055 - 11905: 0xBD40, + 32056 - 11905: 0xBD41, + 32057 - 11905: 0xBD42, + 32058 - 11905: 0xBD43, + 32059 - 11905: 0xBD44, + 32060 - 11905: 0xBD45, + 32061 - 11905: 0xBD46, + 32062 - 11905: 0xBD47, + 32063 - 11905: 0xBD48, + 32064 - 11905: 0xBD49, + 32065 - 11905: 0xBD4A, + 32066 - 11905: 0xBD4B, + 32067 - 11905: 0xBD4C, + 32068 - 11905: 0xBD4D, + 32069 - 11905: 0xBD4E, + 32070 - 11905: 0xBD4F, + 32071 - 11905: 0xBD50, + 32072 - 11905: 0xBD51, + 32073 - 11905: 0xBD52, + 32074 - 11905: 0xBD53, + 32075 - 11905: 0xBD54, + 32076 - 11905: 0xBD55, + 32077 - 11905: 0xBD56, + 32078 - 11905: 0xBD57, + 32079 - 11905: 0xBD58, + 32080 - 11905: 0xBD59, + 32081 - 11905: 0xBD5A, + 32082 - 11905: 0xBD5B, + 32083 - 11905: 0xBD5C, + 32084 - 11905: 0xBD5D, + 32085 - 11905: 0xBD5E, + 32086 - 11905: 0xBD5F, + 32087 - 11905: 0xBD60, + 32088 - 11905: 0xBD61, + 32089 - 11905: 0xBD62, + 32090 - 11905: 0xBD63, + 32091 - 11905: 0xBD64, + 32092 - 11905: 0xBD65, + 32093 - 11905: 0xBD66, + 32094 - 11905: 0xBD67, + 32095 - 11905: 0xBD68, + 32096 - 11905: 0xBD69, + 32097 - 11905: 0xBD6A, + 32098 - 11905: 0xBD6B, + 32099 - 11905: 0xBD6C, + 32100 - 11905: 0xBD6D, + 32101 - 11905: 0xBD6E, + 32102 - 11905: 0xBD6F, + 32103 - 11905: 0xBD70, + 32104 - 11905: 0xBD71, + 32105 - 11905: 0xBD72, + 32106 - 11905: 0xBD73, + 32107 - 11905: 0xBD74, + 32108 - 11905: 0xBD75, + 32109 - 11905: 0xBD76, + 32110 - 11905: 0xD0F5, + 32111 - 11905: 0xBD77, + 32112 - 11905: 0xBD78, + 32113 - 11905: 0xBD79, + 32114 - 11905: 0xBD7A, + 32115 - 11905: 0xBD7B, + 32116 - 11905: 0xBD7C, + 32117 - 11905: 0xBD7D, + 32118 - 11905: 0xBD7E, + 32119 - 11905: 0xF4EA, + 32120 - 11905: 0xBD80, + 32121 - 11905: 0xBD81, + 32122 - 11905: 0xBD82, + 32123 - 11905: 0xBD83, + 32124 - 11905: 0xBD84, + 32125 - 11905: 0xBD85, + 32126 - 11905: 0xBD86, + 32127 - 11905: 0xBD87, + 32128 - 11905: 0xBD88, + 32129 - 11905: 0xBD89, + 32130 - 11905: 0xBD8A, + 32131 - 11905: 0xBD8B, + 32132 - 11905: 0xBD8C, + 32133 - 11905: 0xBD8D, + 32134 - 11905: 0xBD8E, + 32135 - 11905: 0xBD8F, + 32136 - 11905: 0xBD90, + 32137 - 11905: 0xBD91, + 32138 - 11905: 0xBD92, + 32139 - 11905: 0xBD93, + 32140 - 11905: 0xBD94, + 32141 - 11905: 0xBD95, + 32142 - 11905: 0xBD96, + 32143 - 11905: 0xBD97, + 32144 - 11905: 0xBD98, + 32145 - 11905: 0xBD99, + 32146 - 11905: 0xBD9A, + 32147 - 11905: 0xBD9B, + 32148 - 11905: 0xBD9C, + 32149 - 11905: 0xBD9D, + 32150 - 11905: 0xBD9E, + 32151 - 11905: 0xBD9F, + 32152 - 11905: 0xBDA0, + 32153 - 11905: 0xBE40, + 32154 - 11905: 0xBE41, + 32155 - 11905: 0xBE42, + 32156 - 11905: 0xBE43, + 32157 - 11905: 0xBE44, + 32158 - 11905: 0xBE45, + 32159 - 11905: 0xBE46, + 32160 - 11905: 0xBE47, + 32161 - 11905: 0xBE48, + 32162 - 11905: 0xBE49, + 32163 - 11905: 0xBE4A, + 32164 - 11905: 0xBE4B, + 32165 - 11905: 0xBE4C, + 32166 - 11905: 0xF4EB, + 32167 - 11905: 0xBE4D, + 32168 - 11905: 0xBE4E, + 32169 - 11905: 0xBE4F, + 32170 - 11905: 0xBE50, + 32171 - 11905: 0xBE51, + 32172 - 11905: 0xBE52, + 32173 - 11905: 0xBE53, + 32174 - 11905: 0xF4EC, + 32175 - 11905: 0xBE54, + 32176 - 11905: 0xBE55, + 32177 - 11905: 0xBE56, + 32178 - 11905: 0xBE57, + 32179 - 11905: 0xBE58, + 32180 - 11905: 0xBE59, + 32181 - 11905: 0xBE5A, + 32182 - 11905: 0xBE5B, + 32183 - 11905: 0xBE5C, + 32184 - 11905: 0xBE5D, + 32185 - 11905: 0xBE5E, + 32186 - 11905: 0xBE5F, + 32187 - 11905: 0xBE60, + 32188 - 11905: 0xBE61, + 32189 - 11905: 0xBE62, + 32190 - 11905: 0xBE63, + 32191 - 11905: 0xBE64, + 32192 - 11905: 0xBE65, + 32193 - 11905: 0xBE66, + 32194 - 11905: 0xBE67, + 32195 - 11905: 0xBE68, + 32196 - 11905: 0xBE69, + 32197 - 11905: 0xBE6A, + 32198 - 11905: 0xBE6B, + 32199 - 11905: 0xBE6C, + 32200 - 11905: 0xBE6D, + 32201 - 11905: 0xBE6E, + 32202 - 11905: 0xBE6F, + 32203 - 11905: 0xBE70, + 32204 - 11905: 0xBE71, + 32205 - 11905: 0xBE72, + 32206 - 11905: 0xBE73, + 32207 - 11905: 0xBE74, + 32208 - 11905: 0xBE75, + 32209 - 11905: 0xBE76, + 32210 - 11905: 0xBE77, + 32211 - 11905: 0xBE78, + 32212 - 11905: 0xBE79, + 32213 - 11905: 0xBE7A, + 32214 - 11905: 0xBE7B, + 32215 - 11905: 0xBE7C, + 32216 - 11905: 0xBE7D, + 32217 - 11905: 0xBE7E, + 32218 - 11905: 0xBE80, + 32219 - 11905: 0xBE81, + 32220 - 11905: 0xBE82, + 32221 - 11905: 0xBE83, + 32222 - 11905: 0xBE84, + 32223 - 11905: 0xBE85, + 32224 - 11905: 0xBE86, + 32225 - 11905: 0xBE87, + 32226 - 11905: 0xBE88, + 32227 - 11905: 0xBE89, + 32228 - 11905: 0xBE8A, + 32229 - 11905: 0xBE8B, + 32230 - 11905: 0xBE8C, + 32231 - 11905: 0xBE8D, + 32232 - 11905: 0xBE8E, + 32233 - 11905: 0xBE8F, + 32234 - 11905: 0xBE90, + 32235 - 11905: 0xBE91, + 32236 - 11905: 0xBE92, + 32237 - 11905: 0xBE93, + 32238 - 11905: 0xBE94, + 32239 - 11905: 0xBE95, + 32240 - 11905: 0xBE96, + 32241 - 11905: 0xBE97, + 32242 - 11905: 0xBE98, + 32243 - 11905: 0xBE99, + 32244 - 11905: 0xBE9A, + 32245 - 11905: 0xBE9B, + 32246 - 11905: 0xBE9C, + 32247 - 11905: 0xBE9D, + 32248 - 11905: 0xBE9E, + 32249 - 11905: 0xBE9F, + 32250 - 11905: 0xBEA0, + 32251 - 11905: 0xBF40, + 32252 - 11905: 0xBF41, + 32253 - 11905: 0xBF42, + 32254 - 11905: 0xBF43, + 32255 - 11905: 0xBF44, + 32256 - 11905: 0xBF45, + 32257 - 11905: 0xBF46, + 32258 - 11905: 0xBF47, + 32259 - 11905: 0xBF48, + 32260 - 11905: 0xBF49, + 32261 - 11905: 0xBF4A, + 32262 - 11905: 0xBF4B, + 32263 - 11905: 0xBF4C, + 32264 - 11905: 0xBF4D, + 32265 - 11905: 0xBF4E, + 32266 - 11905: 0xBF4F, + 32267 - 11905: 0xBF50, + 32268 - 11905: 0xBF51, + 32269 - 11905: 0xBF52, + 32270 - 11905: 0xBF53, + 32271 - 11905: 0xBF54, + 32272 - 11905: 0xBF55, + 32273 - 11905: 0xBF56, + 32274 - 11905: 0xBF57, + 32275 - 11905: 0xBF58, + 32276 - 11905: 0xBF59, + 32277 - 11905: 0xBF5A, + 32278 - 11905: 0xBF5B, + 32279 - 11905: 0xBF5C, + 32280 - 11905: 0xBF5D, + 32281 - 11905: 0xBF5E, + 32282 - 11905: 0xBF5F, + 32283 - 11905: 0xBF60, + 32284 - 11905: 0xBF61, + 32285 - 11905: 0xBF62, + 32286 - 11905: 0xBF63, + 32287 - 11905: 0xBF64, + 32288 - 11905: 0xBF65, + 32289 - 11905: 0xBF66, + 32290 - 11905: 0xBF67, + 32291 - 11905: 0xBF68, + 32292 - 11905: 0xBF69, + 32293 - 11905: 0xBF6A, + 32294 - 11905: 0xBF6B, + 32295 - 11905: 0xBF6C, + 32296 - 11905: 0xBF6D, + 32297 - 11905: 0xBF6E, + 32298 - 11905: 0xBF6F, + 32299 - 11905: 0xBF70, + 32300 - 11905: 0xBF71, + 32301 - 11905: 0xBF72, + 32302 - 11905: 0xBF73, + 32303 - 11905: 0xBF74, + 32304 - 11905: 0xBF75, + 32305 - 11905: 0xBF76, + 32306 - 11905: 0xBF77, + 32307 - 11905: 0xBF78, + 32308 - 11905: 0xBF79, + 32309 - 11905: 0xBF7A, + 32310 - 11905: 0xBF7B, + 32311 - 11905: 0xBF7C, + 32312 - 11905: 0xBF7D, + 32313 - 11905: 0xBF7E, + 32314 - 11905: 0xBF80, + 32315 - 11905: 0xF7E3, + 32316 - 11905: 0xBF81, + 32317 - 11905: 0xBF82, + 32318 - 11905: 0xBF83, + 32319 - 11905: 0xBF84, + 32320 - 11905: 0xBF85, + 32321 - 11905: 0xB7B1, + 32322 - 11905: 0xBF86, + 32323 - 11905: 0xBF87, + 32324 - 11905: 0xBF88, + 32325 - 11905: 0xBF89, + 32326 - 11905: 0xBF8A, + 32327 - 11905: 0xF4ED, + 32328 - 11905: 0xBF8B, + 32329 - 11905: 0xBF8C, + 32330 - 11905: 0xBF8D, + 32331 - 11905: 0xBF8E, + 32332 - 11905: 0xBF8F, + 32333 - 11905: 0xBF90, + 32334 - 11905: 0xBF91, + 32335 - 11905: 0xBF92, + 32336 - 11905: 0xBF93, + 32337 - 11905: 0xBF94, + 32338 - 11905: 0xBF95, + 32339 - 11905: 0xBF96, + 32340 - 11905: 0xBF97, + 32341 - 11905: 0xBF98, + 32342 - 11905: 0xBF99, + 32343 - 11905: 0xBF9A, + 32344 - 11905: 0xBF9B, + 32345 - 11905: 0xBF9C, + 32346 - 11905: 0xBF9D, + 32347 - 11905: 0xBF9E, + 32348 - 11905: 0xBF9F, + 32349 - 11905: 0xBFA0, + 32350 - 11905: 0xC040, + 32351 - 11905: 0xC041, + 32352 - 11905: 0xC042, + 32353 - 11905: 0xC043, + 32354 - 11905: 0xC044, + 32355 - 11905: 0xC045, + 32356 - 11905: 0xC046, + 32357 - 11905: 0xC047, + 32358 - 11905: 0xC048, + 32359 - 11905: 0xC049, + 32360 - 11905: 0xC04A, + 32361 - 11905: 0xC04B, + 32362 - 11905: 0xC04C, + 32363 - 11905: 0xC04D, + 32364 - 11905: 0xC04E, + 32365 - 11905: 0xC04F, + 32366 - 11905: 0xC050, + 32367 - 11905: 0xC051, + 32368 - 11905: 0xC052, + 32369 - 11905: 0xC053, + 32370 - 11905: 0xC054, + 32371 - 11905: 0xC055, + 32372 - 11905: 0xC056, + 32373 - 11905: 0xC057, + 32374 - 11905: 0xC058, + 32375 - 11905: 0xC059, + 32376 - 11905: 0xC05A, + 32377 - 11905: 0xC05B, + 32378 - 11905: 0xC05C, + 32379 - 11905: 0xC05D, + 32380 - 11905: 0xC05E, + 32381 - 11905: 0xC05F, + 32382 - 11905: 0xC060, + 32383 - 11905: 0xC061, + 32384 - 11905: 0xC062, + 32385 - 11905: 0xC063, + 32386 - 11905: 0xD7EB, + 32387 - 11905: 0xC064, + 32388 - 11905: 0xC065, + 32389 - 11905: 0xC066, + 32390 - 11905: 0xC067, + 32391 - 11905: 0xC068, + 32392 - 11905: 0xC069, + 32393 - 11905: 0xC06A, + 32394 - 11905: 0xC06B, + 32395 - 11905: 0xC06C, + 32396 - 11905: 0xC06D, + 32397 - 11905: 0xC06E, + 32398 - 11905: 0xC06F, + 32399 - 11905: 0xC070, + 32400 - 11905: 0xC071, + 32401 - 11905: 0xC072, + 32402 - 11905: 0xC073, + 32403 - 11905: 0xC074, + 32404 - 11905: 0xC075, + 32405 - 11905: 0xC076, + 32406 - 11905: 0xC077, + 32407 - 11905: 0xC078, + 32408 - 11905: 0xC079, + 32409 - 11905: 0xC07A, + 32410 - 11905: 0xC07B, + 32411 - 11905: 0xF4EE, + 32412 - 11905: 0xC07C, + 32413 - 11905: 0xC07D, + 32414 - 11905: 0xC07E, + 32415 - 11905: 0xE6F9, + 32416 - 11905: 0xBEC0, + 32417 - 11905: 0xE6FA, + 32418 - 11905: 0xBAEC, + 32419 - 11905: 0xE6FB, + 32420 - 11905: 0xCFCB, + 32421 - 11905: 0xE6FC, + 32422 - 11905: 0xD4BC, + 32423 - 11905: 0xBCB6, + 32424 - 11905: 0xE6FD, + 32425 - 11905: 0xE6FE, + 32426 - 11905: 0xBCCD, + 32427 - 11905: 0xC8D2, + 32428 - 11905: 0xCEB3, + 32429 - 11905: 0xE7A1, + 32430 - 11905: 0xC080, + 32431 - 11905: 0xB4BF, + 32432 - 11905: 0xE7A2, + 32433 - 11905: 0xC9B4, + 32434 - 11905: 0xB8D9, + 32435 - 11905: 0xC4C9, + 32436 - 11905: 0xC081, + 32437 - 11905: 0xD7DD, + 32438 - 11905: 0xC2DA, + 32439 - 11905: 0xB7D7, + 32440 - 11905: 0xD6BD, + 32441 - 11905: 0xCEC6, + 32442 - 11905: 0xB7C4, + 32443 - 11905: 0xC082, + 32444 - 11905: 0xC083, + 32445 - 11905: 0xC5A6, + 32446 - 11905: 0xE7A3, + 32447 - 11905: 0xCFDF, + 32448 - 11905: 0xE7A4, + 32449 - 11905: 0xE7A5, + 32450 - 11905: 0xE7A6, + 32451 - 11905: 0xC1B7, + 32452 - 11905: 0xD7E9, + 32453 - 11905: 0xC9F0, + 32454 - 11905: 0xCFB8, + 32455 - 11905: 0xD6AF, + 32456 - 11905: 0xD6D5, + 32457 - 11905: 0xE7A7, + 32458 - 11905: 0xB0ED, + 32459 - 11905: 0xE7A8, + 32460 - 11905: 0xE7A9, + 32461 - 11905: 0xC9DC, + 32462 - 11905: 0xD2EF, + 32463 - 11905: 0xBEAD, + 32464 - 11905: 0xE7AA, + 32465 - 11905: 0xB0F3, + 32466 - 11905: 0xC8DE, + 32467 - 11905: 0xBDE1, + 32468 - 11905: 0xE7AB, + 32469 - 11905: 0xC8C6, + 32470 - 11905: 0xC084, + 32471 - 11905: 0xE7AC, + 32472 - 11905: 0xBBE6, + 32473 - 11905: 0xB8F8, + 32474 - 11905: 0xD1A4, + 32475 - 11905: 0xE7AD, + 32476 - 11905: 0xC2E7, + 32477 - 11905: 0xBEF8, + 32478 - 11905: 0xBDCA, + 32479 - 11905: 0xCDB3, + 32480 - 11905: 0xE7AE, + 32481 - 11905: 0xE7AF, + 32482 - 11905: 0xBEEE, + 32483 - 11905: 0xD0E5, + 32484 - 11905: 0xC085, + 32485 - 11905: 0xCBE7, + 32486 - 11905: 0xCCD0, + 32487 - 11905: 0xBCCC, + 32488 - 11905: 0xE7B0, + 32489 - 11905: 0xBCA8, + 32490 - 11905: 0xD0F7, + 32491 - 11905: 0xE7B1, + 32492 - 11905: 0xC086, + 32493 - 11905: 0xD0F8, + 32494 - 11905: 0xE7B2, + 32495 - 11905: 0xE7B3, + 32496 - 11905: 0xB4C2, + 32497 - 11905: 0xE7B4, + 32498 - 11905: 0xE7B5, + 32499 - 11905: 0xC9FE, + 32500 - 11905: 0xCEAC, + 32501 - 11905: 0xC3E0, + 32502 - 11905: 0xE7B7, + 32503 - 11905: 0xB1C1, + 32504 - 11905: 0xB3F1, + 32505 - 11905: 0xC087, + 32506 - 11905: 0xE7B8, + 32507 - 11905: 0xE7B9, + 32508 - 11905: 0xD7DB, + 32509 - 11905: 0xD5C0, + 32510 - 11905: 0xE7BA, + 32511 - 11905: 0xC2CC, + 32512 - 11905: 0xD7BA, + 32513 - 11905: 0xE7BB, + 32514 - 11905: 0xE7BC, + 32515 - 11905: 0xE7BD, + 32516 - 11905: 0xBCEA, + 32517 - 11905: 0xC3E5, + 32518 - 11905: 0xC0C2, + 32519 - 11905: 0xE7BE, + 32520 - 11905: 0xE7BF, + 32521 - 11905: 0xBCA9, + 32522 - 11905: 0xC088, + 32523 - 11905: 0xE7C0, + 32524 - 11905: 0xE7C1, + 32525 - 11905: 0xE7B6, + 32526 - 11905: 0xB6D0, + 32527 - 11905: 0xE7C2, + 32528 - 11905: 0xC089, + 32529 - 11905: 0xE7C3, + 32530 - 11905: 0xE7C4, + 32531 - 11905: 0xBBBA, + 32532 - 11905: 0xB5DE, + 32533 - 11905: 0xC2C6, + 32534 - 11905: 0xB1E0, + 32535 - 11905: 0xE7C5, + 32536 - 11905: 0xD4B5, + 32537 - 11905: 0xE7C6, + 32538 - 11905: 0xB8BF, + 32539 - 11905: 0xE7C8, + 32540 - 11905: 0xE7C7, + 32541 - 11905: 0xB7EC, + 32542 - 11905: 0xC08A, + 32543 - 11905: 0xE7C9, + 32544 - 11905: 0xB2F8, + 32545 - 11905: 0xE7CA, + 32546 - 11905: 0xE7CB, + 32547 - 11905: 0xE7CC, + 32548 - 11905: 0xE7CD, + 32549 - 11905: 0xE7CE, + 32550 - 11905: 0xE7CF, + 32551 - 11905: 0xE7D0, + 32552 - 11905: 0xD3A7, + 32553 - 11905: 0xCBF5, + 32554 - 11905: 0xE7D1, + 32555 - 11905: 0xE7D2, + 32556 - 11905: 0xE7D3, + 32557 - 11905: 0xE7D4, + 32558 - 11905: 0xC9C9, + 32559 - 11905: 0xE7D5, + 32560 - 11905: 0xE7D6, + 32561 - 11905: 0xE7D7, + 32562 - 11905: 0xE7D8, + 32563 - 11905: 0xE7D9, + 32564 - 11905: 0xBDC9, + 32565 - 11905: 0xE7DA, + 32566 - 11905: 0xF3BE, + 32567 - 11905: 0xC08B, + 32568 - 11905: 0xB8D7, + 32569 - 11905: 0xC08C, + 32570 - 11905: 0xC8B1, + 32571 - 11905: 0xC08D, + 32572 - 11905: 0xC08E, + 32573 - 11905: 0xC08F, + 32574 - 11905: 0xC090, + 32575 - 11905: 0xC091, + 32576 - 11905: 0xC092, + 32577 - 11905: 0xC093, + 32578 - 11905: 0xF3BF, + 32579 - 11905: 0xC094, + 32580 - 11905: 0xF3C0, + 32581 - 11905: 0xF3C1, + 32582 - 11905: 0xC095, + 32583 - 11905: 0xC096, + 32584 - 11905: 0xC097, + 32585 - 11905: 0xC098, + 32586 - 11905: 0xC099, + 32587 - 11905: 0xC09A, + 32588 - 11905: 0xC09B, + 32589 - 11905: 0xC09C, + 32590 - 11905: 0xC09D, + 32591 - 11905: 0xC09E, + 32592 - 11905: 0xB9DE, + 32593 - 11905: 0xCDF8, + 32594 - 11905: 0xC09F, + 32595 - 11905: 0xC0A0, + 32596 - 11905: 0xD8E8, + 32597 - 11905: 0xBAB1, + 32598 - 11905: 0xC140, + 32599 - 11905: 0xC2DE, + 32600 - 11905: 0xEEB7, + 32601 - 11905: 0xC141, + 32602 - 11905: 0xB7A3, + 32603 - 11905: 0xC142, + 32604 - 11905: 0xC143, + 32605 - 11905: 0xC144, + 32606 - 11905: 0xC145, + 32607 - 11905: 0xEEB9, + 32608 - 11905: 0xC146, + 32609 - 11905: 0xEEB8, + 32610 - 11905: 0xB0D5, + 32611 - 11905: 0xC147, + 32612 - 11905: 0xC148, + 32613 - 11905: 0xC149, + 32614 - 11905: 0xC14A, + 32615 - 11905: 0xC14B, + 32616 - 11905: 0xEEBB, + 32617 - 11905: 0xD5D6, + 32618 - 11905: 0xD7EF, + 32619 - 11905: 0xC14C, + 32620 - 11905: 0xC14D, + 32621 - 11905: 0xC14E, + 32622 - 11905: 0xD6C3, + 32623 - 11905: 0xC14F, + 32624 - 11905: 0xC150, + 32625 - 11905: 0xEEBD, + 32626 - 11905: 0xCAF0, + 32627 - 11905: 0xC151, + 32628 - 11905: 0xEEBC, + 32629 - 11905: 0xC152, + 32630 - 11905: 0xC153, + 32631 - 11905: 0xC154, + 32632 - 11905: 0xC155, + 32633 - 11905: 0xEEBE, + 32634 - 11905: 0xC156, + 32635 - 11905: 0xC157, + 32636 - 11905: 0xC158, + 32637 - 11905: 0xC159, + 32638 - 11905: 0xEEC0, + 32639 - 11905: 0xC15A, + 32640 - 11905: 0xC15B, + 32641 - 11905: 0xEEBF, + 32642 - 11905: 0xC15C, + 32643 - 11905: 0xC15D, + 32644 - 11905: 0xC15E, + 32645 - 11905: 0xC15F, + 32646 - 11905: 0xC160, + 32647 - 11905: 0xC161, + 32648 - 11905: 0xC162, + 32649 - 11905: 0xC163, + 32650 - 11905: 0xD1F2, + 32651 - 11905: 0xC164, + 32652 - 11905: 0xC7BC, + 32653 - 11905: 0xC165, + 32654 - 11905: 0xC3C0, + 32655 - 11905: 0xC166, + 32656 - 11905: 0xC167, + 32657 - 11905: 0xC168, + 32658 - 11905: 0xC169, + 32659 - 11905: 0xC16A, + 32660 - 11905: 0xB8E1, + 32661 - 11905: 0xC16B, + 32662 - 11905: 0xC16C, + 32663 - 11905: 0xC16D, + 32664 - 11905: 0xC16E, + 32665 - 11905: 0xC16F, + 32666 - 11905: 0xC1E7, + 32667 - 11905: 0xC170, + 32668 - 11905: 0xC171, + 32669 - 11905: 0xF4C6, + 32670 - 11905: 0xD0DF, + 32671 - 11905: 0xF4C7, + 32672 - 11905: 0xC172, + 32673 - 11905: 0xCFDB, + 32674 - 11905: 0xC173, + 32675 - 11905: 0xC174, + 32676 - 11905: 0xC8BA, + 32677 - 11905: 0xC175, + 32678 - 11905: 0xC176, + 32679 - 11905: 0xF4C8, + 32680 - 11905: 0xC177, + 32681 - 11905: 0xC178, + 32682 - 11905: 0xC179, + 32683 - 11905: 0xC17A, + 32684 - 11905: 0xC17B, + 32685 - 11905: 0xC17C, + 32686 - 11905: 0xC17D, + 32687 - 11905: 0xF4C9, + 32688 - 11905: 0xF4CA, + 32689 - 11905: 0xC17E, + 32690 - 11905: 0xF4CB, + 32691 - 11905: 0xC180, + 32692 - 11905: 0xC181, + 32693 - 11905: 0xC182, + 32694 - 11905: 0xC183, + 32695 - 11905: 0xC184, + 32696 - 11905: 0xD9FA, + 32697 - 11905: 0xB8FE, + 32698 - 11905: 0xC185, + 32699 - 11905: 0xC186, + 32700 - 11905: 0xE5F1, + 32701 - 11905: 0xD3F0, + 32702 - 11905: 0xC187, + 32703 - 11905: 0xF4E0, + 32704 - 11905: 0xC188, + 32705 - 11905: 0xCECC, + 32706 - 11905: 0xC189, + 32707 - 11905: 0xC18A, + 32708 - 11905: 0xC18B, + 32709 - 11905: 0xB3E1, + 32710 - 11905: 0xC18C, + 32711 - 11905: 0xC18D, + 32712 - 11905: 0xC18E, + 32713 - 11905: 0xC18F, + 32714 - 11905: 0xF1B4, + 32715 - 11905: 0xC190, + 32716 - 11905: 0xD2EE, + 32717 - 11905: 0xC191, + 32718 - 11905: 0xF4E1, + 32719 - 11905: 0xC192, + 32720 - 11905: 0xC193, + 32721 - 11905: 0xC194, + 32722 - 11905: 0xC195, + 32723 - 11905: 0xC196, + 32724 - 11905: 0xCFE8, + 32725 - 11905: 0xF4E2, + 32726 - 11905: 0xC197, + 32727 - 11905: 0xC198, + 32728 - 11905: 0xC7CC, + 32729 - 11905: 0xC199, + 32730 - 11905: 0xC19A, + 32731 - 11905: 0xC19B, + 32732 - 11905: 0xC19C, + 32733 - 11905: 0xC19D, + 32734 - 11905: 0xC19E, + 32735 - 11905: 0xB5D4, + 32736 - 11905: 0xB4E4, + 32737 - 11905: 0xF4E4, + 32738 - 11905: 0xC19F, + 32739 - 11905: 0xC1A0, + 32740 - 11905: 0xC240, + 32741 - 11905: 0xF4E3, + 32742 - 11905: 0xF4E5, + 32743 - 11905: 0xC241, + 32744 - 11905: 0xC242, + 32745 - 11905: 0xF4E6, + 32746 - 11905: 0xC243, + 32747 - 11905: 0xC244, + 32748 - 11905: 0xC245, + 32749 - 11905: 0xC246, + 32750 - 11905: 0xF4E7, + 32751 - 11905: 0xC247, + 32752 - 11905: 0xBAB2, + 32753 - 11905: 0xB0BF, + 32754 - 11905: 0xC248, + 32755 - 11905: 0xF4E8, + 32756 - 11905: 0xC249, + 32757 - 11905: 0xC24A, + 32758 - 11905: 0xC24B, + 32759 - 11905: 0xC24C, + 32760 - 11905: 0xC24D, + 32761 - 11905: 0xC24E, + 32762 - 11905: 0xC24F, + 32763 - 11905: 0xB7AD, + 32764 - 11905: 0xD2ED, + 32765 - 11905: 0xC250, + 32766 - 11905: 0xC251, + 32767 - 11905: 0xC252, + 32768 - 11905: 0xD2AB, + 32769 - 11905: 0xC0CF, + 32770 - 11905: 0xC253, + 32771 - 11905: 0xBFBC, + 32772 - 11905: 0xEBA3, + 32773 - 11905: 0xD5DF, + 32774 - 11905: 0xEAC8, + 32775 - 11905: 0xC254, + 32776 - 11905: 0xC255, + 32777 - 11905: 0xC256, + 32778 - 11905: 0xC257, + 32779 - 11905: 0xF1F3, + 32780 - 11905: 0xB6F8, + 32781 - 11905: 0xCBA3, + 32782 - 11905: 0xC258, + 32783 - 11905: 0xC259, + 32784 - 11905: 0xC4CD, + 32785 - 11905: 0xC25A, + 32786 - 11905: 0xF1E7, + 32787 - 11905: 0xC25B, + 32788 - 11905: 0xF1E8, + 32789 - 11905: 0xB8FB, + 32790 - 11905: 0xF1E9, + 32791 - 11905: 0xBAC4, + 32792 - 11905: 0xD4C5, + 32793 - 11905: 0xB0D2, + 32794 - 11905: 0xC25C, + 32795 - 11905: 0xC25D, + 32796 - 11905: 0xF1EA, + 32797 - 11905: 0xC25E, + 32798 - 11905: 0xC25F, + 32799 - 11905: 0xC260, + 32800 - 11905: 0xF1EB, + 32801 - 11905: 0xC261, + 32802 - 11905: 0xF1EC, + 32803 - 11905: 0xC262, + 32804 - 11905: 0xC263, + 32805 - 11905: 0xF1ED, + 32806 - 11905: 0xF1EE, + 32807 - 11905: 0xF1EF, + 32808 - 11905: 0xF1F1, + 32809 - 11905: 0xF1F0, + 32810 - 11905: 0xC5D5, + 32811 - 11905: 0xC264, + 32812 - 11905: 0xC265, + 32813 - 11905: 0xC266, + 32814 - 11905: 0xC267, + 32815 - 11905: 0xC268, + 32816 - 11905: 0xC269, + 32817 - 11905: 0xF1F2, + 32818 - 11905: 0xC26A, + 32819 - 11905: 0xB6FA, + 32820 - 11905: 0xC26B, + 32821 - 11905: 0xF1F4, + 32822 - 11905: 0xD2AE, + 32823 - 11905: 0xDEC7, + 32824 - 11905: 0xCBCA, + 32825 - 11905: 0xC26C, + 32826 - 11905: 0xC26D, + 32827 - 11905: 0xB3DC, + 32828 - 11905: 0xC26E, + 32829 - 11905: 0xB5A2, + 32830 - 11905: 0xC26F, + 32831 - 11905: 0xB9A2, + 32832 - 11905: 0xC270, + 32833 - 11905: 0xC271, + 32834 - 11905: 0xC4F4, + 32835 - 11905: 0xF1F5, + 32836 - 11905: 0xC272, + 32837 - 11905: 0xC273, + 32838 - 11905: 0xF1F6, + 32839 - 11905: 0xC274, + 32840 - 11905: 0xC275, + 32841 - 11905: 0xC276, + 32842 - 11905: 0xC1C4, + 32843 - 11905: 0xC1FB, + 32844 - 11905: 0xD6B0, + 32845 - 11905: 0xF1F7, + 32846 - 11905: 0xC277, + 32847 - 11905: 0xC278, + 32848 - 11905: 0xC279, + 32849 - 11905: 0xC27A, + 32850 - 11905: 0xF1F8, + 32851 - 11905: 0xC27B, + 32852 - 11905: 0xC1AA, + 32853 - 11905: 0xC27C, + 32854 - 11905: 0xC27D, + 32855 - 11905: 0xC27E, + 32856 - 11905: 0xC6B8, + 32857 - 11905: 0xC280, + 32858 - 11905: 0xBEDB, + 32859 - 11905: 0xC281, + 32860 - 11905: 0xC282, + 32861 - 11905: 0xC283, + 32862 - 11905: 0xC284, + 32863 - 11905: 0xC285, + 32864 - 11905: 0xC286, + 32865 - 11905: 0xC287, + 32866 - 11905: 0xC288, + 32867 - 11905: 0xC289, + 32868 - 11905: 0xC28A, + 32869 - 11905: 0xC28B, + 32870 - 11905: 0xC28C, + 32871 - 11905: 0xC28D, + 32872 - 11905: 0xC28E, + 32873 - 11905: 0xF1F9, + 32874 - 11905: 0xB4CF, + 32875 - 11905: 0xC28F, + 32876 - 11905: 0xC290, + 32877 - 11905: 0xC291, + 32878 - 11905: 0xC292, + 32879 - 11905: 0xC293, + 32880 - 11905: 0xC294, + 32881 - 11905: 0xF1FA, + 32882 - 11905: 0xC295, + 32883 - 11905: 0xC296, + 32884 - 11905: 0xC297, + 32885 - 11905: 0xC298, + 32886 - 11905: 0xC299, + 32887 - 11905: 0xC29A, + 32888 - 11905: 0xC29B, + 32889 - 11905: 0xC29C, + 32890 - 11905: 0xC29D, + 32891 - 11905: 0xC29E, + 32892 - 11905: 0xC29F, + 32893 - 11905: 0xC2A0, + 32894 - 11905: 0xC340, + 32895 - 11905: 0xEDB2, + 32896 - 11905: 0xEDB1, + 32897 - 11905: 0xC341, + 32898 - 11905: 0xC342, + 32899 - 11905: 0xCBE0, + 32900 - 11905: 0xD2DE, + 32901 - 11905: 0xC343, + 32902 - 11905: 0xCBC1, + 32903 - 11905: 0xD5D8, + 32904 - 11905: 0xC344, + 32905 - 11905: 0xC8E2, + 32906 - 11905: 0xC345, + 32907 - 11905: 0xC0DF, + 32908 - 11905: 0xBCA1, + 32909 - 11905: 0xC346, + 32910 - 11905: 0xC347, + 32911 - 11905: 0xC348, + 32912 - 11905: 0xC349, + 32913 - 11905: 0xC34A, + 32914 - 11905: 0xC34B, + 32915 - 11905: 0xEBC1, + 32916 - 11905: 0xC34C, + 32917 - 11905: 0xC34D, + 32918 - 11905: 0xD0A4, + 32919 - 11905: 0xC34E, + 32920 - 11905: 0xD6E2, + 32921 - 11905: 0xC34F, + 32922 - 11905: 0xB6C7, + 32923 - 11905: 0xB8D8, + 32924 - 11905: 0xEBC0, + 32925 - 11905: 0xB8CE, + 32926 - 11905: 0xC350, + 32927 - 11905: 0xEBBF, + 32928 - 11905: 0xB3A6, + 32929 - 11905: 0xB9C9, + 32930 - 11905: 0xD6AB, + 32931 - 11905: 0xC351, + 32932 - 11905: 0xB7F4, + 32933 - 11905: 0xB7CA, + 32934 - 11905: 0xC352, + 32935 - 11905: 0xC353, + 32936 - 11905: 0xC354, + 32937 - 11905: 0xBCE7, + 32938 - 11905: 0xB7BE, + 32939 - 11905: 0xEBC6, + 32940 - 11905: 0xC355, + 32941 - 11905: 0xEBC7, + 32942 - 11905: 0xB0B9, + 32943 - 11905: 0xBFCF, + 32944 - 11905: 0xC356, + 32945 - 11905: 0xEBC5, + 32946 - 11905: 0xD3FD, + 32947 - 11905: 0xC357, + 32948 - 11905: 0xEBC8, + 32949 - 11905: 0xC358, + 32950 - 11905: 0xC359, + 32951 - 11905: 0xEBC9, + 32952 - 11905: 0xC35A, + 32953 - 11905: 0xC35B, + 32954 - 11905: 0xB7CE, + 32955 - 11905: 0xC35C, + 32956 - 11905: 0xEBC2, + 32957 - 11905: 0xEBC4, + 32958 - 11905: 0xC9F6, + 32959 - 11905: 0xD6D7, + 32960 - 11905: 0xD5CD, + 32961 - 11905: 0xD0B2, + 32962 - 11905: 0xEBCF, + 32963 - 11905: 0xCEB8, + 32964 - 11905: 0xEBD0, + 32965 - 11905: 0xC35D, + 32966 - 11905: 0xB5A8, + 32967 - 11905: 0xC35E, + 32968 - 11905: 0xC35F, + 32969 - 11905: 0xC360, + 32970 - 11905: 0xC361, + 32971 - 11905: 0xC362, + 32972 - 11905: 0xB1B3, + 32973 - 11905: 0xEBD2, + 32974 - 11905: 0xCCA5, + 32975 - 11905: 0xC363, + 32976 - 11905: 0xC364, + 32977 - 11905: 0xC365, + 32978 - 11905: 0xC366, + 32979 - 11905: 0xC367, + 32980 - 11905: 0xC368, + 32981 - 11905: 0xC369, + 32982 - 11905: 0xC5D6, + 32983 - 11905: 0xEBD3, + 32984 - 11905: 0xC36A, + 32985 - 11905: 0xEBD1, + 32986 - 11905: 0xC5DF, + 32987 - 11905: 0xEBCE, + 32988 - 11905: 0xCAA4, + 32989 - 11905: 0xEBD5, + 32990 - 11905: 0xB0FB, + 32991 - 11905: 0xC36B, + 32992 - 11905: 0xC36C, + 32993 - 11905: 0xBAFA, + 32994 - 11905: 0xC36D, + 32995 - 11905: 0xC36E, + 32996 - 11905: 0xD8B7, + 32997 - 11905: 0xF1E3, + 32998 - 11905: 0xC36F, + 32999 - 11905: 0xEBCA, + 33000 - 11905: 0xEBCB, + 33001 - 11905: 0xEBCC, + 33002 - 11905: 0xEBCD, + 33003 - 11905: 0xEBD6, + 33004 - 11905: 0xE6C0, + 33005 - 11905: 0xEBD9, + 33006 - 11905: 0xC370, + 33007 - 11905: 0xBFE8, + 33008 - 11905: 0xD2C8, + 33009 - 11905: 0xEBD7, + 33010 - 11905: 0xEBDC, + 33011 - 11905: 0xB8EC, + 33012 - 11905: 0xEBD8, + 33013 - 11905: 0xC371, + 33014 - 11905: 0xBDBA, + 33015 - 11905: 0xC372, + 33016 - 11905: 0xD0D8, + 33017 - 11905: 0xC373, + 33018 - 11905: 0xB0B7, + 33019 - 11905: 0xC374, + 33020 - 11905: 0xEBDD, + 33021 - 11905: 0xC4DC, + 33022 - 11905: 0xC375, + 33023 - 11905: 0xC376, + 33024 - 11905: 0xC377, + 33025 - 11905: 0xC378, + 33026 - 11905: 0xD6AC, + 33027 - 11905: 0xC379, + 33028 - 11905: 0xC37A, + 33029 - 11905: 0xC37B, + 33030 - 11905: 0xB4E0, + 33031 - 11905: 0xC37C, + 33032 - 11905: 0xC37D, + 33033 - 11905: 0xC2F6, + 33034 - 11905: 0xBCB9, + 33035 - 11905: 0xC37E, + 33036 - 11905: 0xC380, + 33037 - 11905: 0xEBDA, + 33038 - 11905: 0xEBDB, + 33039 - 11905: 0xD4E0, + 33040 - 11905: 0xC6EA, + 33041 - 11905: 0xC4D4, + 33042 - 11905: 0xEBDF, + 33043 - 11905: 0xC5A7, + 33044 - 11905: 0xD9F5, + 33045 - 11905: 0xC381, + 33046 - 11905: 0xB2B1, + 33047 - 11905: 0xC382, + 33048 - 11905: 0xEBE4, + 33049 - 11905: 0xC383, + 33050 - 11905: 0xBDC5, + 33051 - 11905: 0xC384, + 33052 - 11905: 0xC385, + 33053 - 11905: 0xC386, + 33054 - 11905: 0xEBE2, + 33055 - 11905: 0xC387, + 33056 - 11905: 0xC388, + 33057 - 11905: 0xC389, + 33058 - 11905: 0xC38A, + 33059 - 11905: 0xC38B, + 33060 - 11905: 0xC38C, + 33061 - 11905: 0xC38D, + 33062 - 11905: 0xC38E, + 33063 - 11905: 0xC38F, + 33064 - 11905: 0xC390, + 33065 - 11905: 0xC391, + 33066 - 11905: 0xC392, + 33067 - 11905: 0xC393, + 33068 - 11905: 0xEBE3, + 33069 - 11905: 0xC394, + 33070 - 11905: 0xC395, + 33071 - 11905: 0xB8AC, + 33072 - 11905: 0xC396, + 33073 - 11905: 0xCDD1, + 33074 - 11905: 0xEBE5, + 33075 - 11905: 0xC397, + 33076 - 11905: 0xC398, + 33077 - 11905: 0xC399, + 33078 - 11905: 0xEBE1, + 33079 - 11905: 0xC39A, + 33080 - 11905: 0xC1B3, + 33081 - 11905: 0xC39B, + 33082 - 11905: 0xC39C, + 33083 - 11905: 0xC39D, + 33084 - 11905: 0xC39E, + 33085 - 11905: 0xC39F, + 33086 - 11905: 0xC6A2, + 33087 - 11905: 0xC3A0, + 33088 - 11905: 0xC440, + 33089 - 11905: 0xC441, + 33090 - 11905: 0xC442, + 33091 - 11905: 0xC443, + 33092 - 11905: 0xC444, + 33093 - 11905: 0xC445, + 33094 - 11905: 0xCCF3, + 33095 - 11905: 0xC446, + 33096 - 11905: 0xEBE6, + 33097 - 11905: 0xC447, + 33098 - 11905: 0xC0B0, + 33099 - 11905: 0xD2B8, + 33100 - 11905: 0xEBE7, + 33101 - 11905: 0xC448, + 33102 - 11905: 0xC449, + 33103 - 11905: 0xC44A, + 33104 - 11905: 0xB8AF, + 33105 - 11905: 0xB8AD, + 33106 - 11905: 0xC44B, + 33107 - 11905: 0xEBE8, + 33108 - 11905: 0xC7BB, + 33109 - 11905: 0xCDF3, + 33110 - 11905: 0xC44C, + 33111 - 11905: 0xC44D, + 33112 - 11905: 0xC44E, + 33113 - 11905: 0xEBEA, + 33114 - 11905: 0xEBEB, + 33115 - 11905: 0xC44F, + 33116 - 11905: 0xC450, + 33117 - 11905: 0xC451, + 33118 - 11905: 0xC452, + 33119 - 11905: 0xC453, + 33120 - 11905: 0xEBED, + 33121 - 11905: 0xC454, + 33122 - 11905: 0xC455, + 33123 - 11905: 0xC456, + 33124 - 11905: 0xC457, + 33125 - 11905: 0xD0C8, + 33126 - 11905: 0xC458, + 33127 - 11905: 0xEBF2, + 33128 - 11905: 0xC459, + 33129 - 11905: 0xEBEE, + 33130 - 11905: 0xC45A, + 33131 - 11905: 0xC45B, + 33132 - 11905: 0xC45C, + 33133 - 11905: 0xEBF1, + 33134 - 11905: 0xC8F9, + 33135 - 11905: 0xC45D, + 33136 - 11905: 0xD1FC, + 33137 - 11905: 0xEBEC, + 33138 - 11905: 0xC45E, + 33139 - 11905: 0xC45F, + 33140 - 11905: 0xEBE9, + 33141 - 11905: 0xC460, + 33142 - 11905: 0xC461, + 33143 - 11905: 0xC462, + 33144 - 11905: 0xC463, + 33145 - 11905: 0xB8B9, + 33146 - 11905: 0xCFD9, + 33147 - 11905: 0xC4E5, + 33148 - 11905: 0xEBEF, + 33149 - 11905: 0xEBF0, + 33150 - 11905: 0xCCDA, + 33151 - 11905: 0xCDC8, + 33152 - 11905: 0xB0F2, + 33153 - 11905: 0xC464, + 33154 - 11905: 0xEBF6, + 33155 - 11905: 0xC465, + 33156 - 11905: 0xC466, + 33157 - 11905: 0xC467, + 33158 - 11905: 0xC468, + 33159 - 11905: 0xC469, + 33160 - 11905: 0xEBF5, + 33161 - 11905: 0xC46A, + 33162 - 11905: 0xB2B2, + 33163 - 11905: 0xC46B, + 33164 - 11905: 0xC46C, + 33165 - 11905: 0xC46D, + 33166 - 11905: 0xC46E, + 33167 - 11905: 0xB8E0, + 33168 - 11905: 0xC46F, + 33169 - 11905: 0xEBF7, + 33170 - 11905: 0xC470, + 33171 - 11905: 0xC471, + 33172 - 11905: 0xC472, + 33173 - 11905: 0xC473, + 33174 - 11905: 0xC474, + 33175 - 11905: 0xC475, + 33176 - 11905: 0xB1EC, + 33177 - 11905: 0xC476, + 33178 - 11905: 0xC477, + 33179 - 11905: 0xCCC5, + 33180 - 11905: 0xC4A4, + 33181 - 11905: 0xCFA5, + 33182 - 11905: 0xC478, + 33183 - 11905: 0xC479, + 33184 - 11905: 0xC47A, + 33185 - 11905: 0xC47B, + 33186 - 11905: 0xC47C, + 33187 - 11905: 0xEBF9, + 33188 - 11905: 0xC47D, + 33189 - 11905: 0xC47E, + 33190 - 11905: 0xECA2, + 33191 - 11905: 0xC480, + 33192 - 11905: 0xC5F2, + 33193 - 11905: 0xC481, + 33194 - 11905: 0xEBFA, + 33195 - 11905: 0xC482, + 33196 - 11905: 0xC483, + 33197 - 11905: 0xC484, + 33198 - 11905: 0xC485, + 33199 - 11905: 0xC486, + 33200 - 11905: 0xC487, + 33201 - 11905: 0xC488, + 33202 - 11905: 0xC489, + 33203 - 11905: 0xC9C5, + 33204 - 11905: 0xC48A, + 33205 - 11905: 0xC48B, + 33206 - 11905: 0xC48C, + 33207 - 11905: 0xC48D, + 33208 - 11905: 0xC48E, + 33209 - 11905: 0xC48F, + 33210 - 11905: 0xE2DF, + 33211 - 11905: 0xEBFE, + 33212 - 11905: 0xC490, + 33213 - 11905: 0xC491, + 33214 - 11905: 0xC492, + 33215 - 11905: 0xC493, + 33216 - 11905: 0xCDCE, + 33217 - 11905: 0xECA1, + 33218 - 11905: 0xB1DB, + 33219 - 11905: 0xD3B7, + 33220 - 11905: 0xC494, + 33221 - 11905: 0xC495, + 33222 - 11905: 0xD2DC, + 33223 - 11905: 0xC496, + 33224 - 11905: 0xC497, + 33225 - 11905: 0xC498, + 33226 - 11905: 0xEBFD, + 33227 - 11905: 0xC499, + 33228 - 11905: 0xEBFB, + 33229 - 11905: 0xC49A, + 33230 - 11905: 0xC49B, + 33231 - 11905: 0xC49C, + 33232 - 11905: 0xC49D, + 33233 - 11905: 0xC49E, + 33234 - 11905: 0xC49F, + 33235 - 11905: 0xC4A0, + 33236 - 11905: 0xC540, + 33237 - 11905: 0xC541, + 33238 - 11905: 0xC542, + 33239 - 11905: 0xC543, + 33240 - 11905: 0xC544, + 33241 - 11905: 0xC545, + 33242 - 11905: 0xC546, + 33243 - 11905: 0xC547, + 33244 - 11905: 0xC548, + 33245 - 11905: 0xC549, + 33246 - 11905: 0xC54A, + 33247 - 11905: 0xC54B, + 33248 - 11905: 0xC54C, + 33249 - 11905: 0xC54D, + 33250 - 11905: 0xC54E, + 33251 - 11905: 0xB3BC, + 33252 - 11905: 0xC54F, + 33253 - 11905: 0xC550, + 33254 - 11905: 0xC551, + 33255 - 11905: 0xEAB0, + 33256 - 11905: 0xC552, + 33257 - 11905: 0xC553, + 33258 - 11905: 0xD7D4, + 33259 - 11905: 0xC554, + 33260 - 11905: 0xF4AB, + 33261 - 11905: 0xB3F4, + 33262 - 11905: 0xC555, + 33263 - 11905: 0xC556, + 33264 - 11905: 0xC557, + 33265 - 11905: 0xC558, + 33266 - 11905: 0xC559, + 33267 - 11905: 0xD6C1, + 33268 - 11905: 0xD6C2, + 33269 - 11905: 0xC55A, + 33270 - 11905: 0xC55B, + 33271 - 11905: 0xC55C, + 33272 - 11905: 0xC55D, + 33273 - 11905: 0xC55E, + 33274 - 11905: 0xC55F, + 33275 - 11905: 0xD5E9, + 33276 - 11905: 0xBECA, + 33277 - 11905: 0xC560, + 33278 - 11905: 0xF4A7, + 33279 - 11905: 0xC561, + 33280 - 11905: 0xD2A8, + 33281 - 11905: 0xF4A8, + 33282 - 11905: 0xF4A9, + 33283 - 11905: 0xC562, + 33284 - 11905: 0xF4AA, + 33285 - 11905: 0xBECB, + 33286 - 11905: 0xD3DF, + 33287 - 11905: 0xC563, + 33288 - 11905: 0xC564, + 33289 - 11905: 0xC565, + 33290 - 11905: 0xC566, + 33291 - 11905: 0xC567, + 33292 - 11905: 0xC9E0, + 33293 - 11905: 0xC9E1, + 33294 - 11905: 0xC568, + 33295 - 11905: 0xC569, + 33296 - 11905: 0xF3C2, + 33297 - 11905: 0xC56A, + 33298 - 11905: 0xCAE6, + 33299 - 11905: 0xC56B, + 33300 - 11905: 0xCCF2, + 33301 - 11905: 0xC56C, + 33302 - 11905: 0xC56D, + 33303 - 11905: 0xC56E, + 33304 - 11905: 0xC56F, + 33305 - 11905: 0xC570, + 33306 - 11905: 0xC571, + 33307 - 11905: 0xE2B6, + 33308 - 11905: 0xCBB4, + 33309 - 11905: 0xC572, + 33310 - 11905: 0xCEE8, + 33311 - 11905: 0xD6DB, + 33312 - 11905: 0xC573, + 33313 - 11905: 0xF4AD, + 33314 - 11905: 0xF4AE, + 33315 - 11905: 0xF4AF, + 33316 - 11905: 0xC574, + 33317 - 11905: 0xC575, + 33318 - 11905: 0xC576, + 33319 - 11905: 0xC577, + 33320 - 11905: 0xF4B2, + 33321 - 11905: 0xC578, + 33322 - 11905: 0xBABD, + 33323 - 11905: 0xF4B3, + 33324 - 11905: 0xB0E3, + 33325 - 11905: 0xF4B0, + 33326 - 11905: 0xC579, + 33327 - 11905: 0xF4B1, + 33328 - 11905: 0xBDA2, + 33329 - 11905: 0xB2D5, + 33330 - 11905: 0xC57A, + 33331 - 11905: 0xF4B6, + 33332 - 11905: 0xF4B7, + 33333 - 11905: 0xB6E6, + 33334 - 11905: 0xB2B0, + 33335 - 11905: 0xCFCF, + 33336 - 11905: 0xF4B4, + 33337 - 11905: 0xB4AC, + 33338 - 11905: 0xC57B, + 33339 - 11905: 0xF4B5, + 33340 - 11905: 0xC57C, + 33341 - 11905: 0xC57D, + 33342 - 11905: 0xF4B8, + 33343 - 11905: 0xC57E, + 33344 - 11905: 0xC580, + 33345 - 11905: 0xC581, + 33346 - 11905: 0xC582, + 33347 - 11905: 0xC583, + 33348 - 11905: 0xF4B9, + 33349 - 11905: 0xC584, + 33350 - 11905: 0xC585, + 33351 - 11905: 0xCDA7, + 33352 - 11905: 0xC586, + 33353 - 11905: 0xF4BA, + 33354 - 11905: 0xC587, + 33355 - 11905: 0xF4BB, + 33356 - 11905: 0xC588, + 33357 - 11905: 0xC589, + 33358 - 11905: 0xC58A, + 33359 - 11905: 0xF4BC, + 33360 - 11905: 0xC58B, + 33361 - 11905: 0xC58C, + 33362 - 11905: 0xC58D, + 33363 - 11905: 0xC58E, + 33364 - 11905: 0xC58F, + 33365 - 11905: 0xC590, + 33366 - 11905: 0xC591, + 33367 - 11905: 0xC592, + 33368 - 11905: 0xCBD2, + 33369 - 11905: 0xC593, + 33370 - 11905: 0xF4BD, + 33371 - 11905: 0xC594, + 33372 - 11905: 0xC595, + 33373 - 11905: 0xC596, + 33374 - 11905: 0xC597, + 33375 - 11905: 0xF4BE, + 33376 - 11905: 0xC598, + 33377 - 11905: 0xC599, + 33378 - 11905: 0xC59A, + 33379 - 11905: 0xC59B, + 33380 - 11905: 0xC59C, + 33381 - 11905: 0xC59D, + 33382 - 11905: 0xC59E, + 33383 - 11905: 0xC59F, + 33384 - 11905: 0xF4BF, + 33385 - 11905: 0xC5A0, + 33386 - 11905: 0xC640, + 33387 - 11905: 0xC641, + 33388 - 11905: 0xC642, + 33389 - 11905: 0xC643, + 33390 - 11905: 0xF4DE, + 33391 - 11905: 0xC1BC, + 33392 - 11905: 0xBCE8, + 33393 - 11905: 0xC644, + 33394 - 11905: 0xC9AB, + 33395 - 11905: 0xD1DE, + 33396 - 11905: 0xE5F5, + 33397 - 11905: 0xC645, + 33398 - 11905: 0xC646, + 33399 - 11905: 0xC647, + 33400 - 11905: 0xC648, + 33401 - 11905: 0xDCB3, + 33402 - 11905: 0xD2D5, + 33403 - 11905: 0xC649, + 33404 - 11905: 0xC64A, + 33405 - 11905: 0xDCB4, + 33406 - 11905: 0xB0AC, + 33407 - 11905: 0xDCB5, + 33408 - 11905: 0xC64B, + 33409 - 11905: 0xC64C, + 33410 - 11905: 0xBDDA, + 33411 - 11905: 0xC64D, + 33412 - 11905: 0xDCB9, + 33413 - 11905: 0xC64E, + 33414 - 11905: 0xC64F, + 33415 - 11905: 0xC650, + 33416 - 11905: 0xD8C2, + 33417 - 11905: 0xC651, + 33418 - 11905: 0xDCB7, + 33419 - 11905: 0xD3F3, + 33420 - 11905: 0xC652, + 33421 - 11905: 0xC9D6, + 33422 - 11905: 0xDCBA, + 33423 - 11905: 0xDCB6, + 33424 - 11905: 0xC653, + 33425 - 11905: 0xDCBB, + 33426 - 11905: 0xC3A2, + 33427 - 11905: 0xC654, + 33428 - 11905: 0xC655, + 33429 - 11905: 0xC656, + 33430 - 11905: 0xC657, + 33431 - 11905: 0xDCBC, + 33432 - 11905: 0xDCC5, + 33433 - 11905: 0xDCBD, + 33434 - 11905: 0xC658, + 33435 - 11905: 0xC659, + 33436 - 11905: 0xCEDF, + 33437 - 11905: 0xD6A5, + 33438 - 11905: 0xC65A, + 33439 - 11905: 0xDCCF, + 33440 - 11905: 0xC65B, + 33441 - 11905: 0xDCCD, + 33442 - 11905: 0xC65C, + 33443 - 11905: 0xC65D, + 33444 - 11905: 0xDCD2, + 33445 - 11905: 0xBDE6, + 33446 - 11905: 0xC2AB, + 33447 - 11905: 0xC65E, + 33448 - 11905: 0xDCB8, + 33449 - 11905: 0xDCCB, + 33450 - 11905: 0xDCCE, + 33451 - 11905: 0xDCBE, + 33452 - 11905: 0xB7D2, + 33453 - 11905: 0xB0C5, + 33454 - 11905: 0xDCC7, + 33455 - 11905: 0xD0BE, + 33456 - 11905: 0xDCC1, + 33457 - 11905: 0xBBA8, + 33458 - 11905: 0xC65F, + 33459 - 11905: 0xB7BC, + 33460 - 11905: 0xDCCC, + 33461 - 11905: 0xC660, + 33462 - 11905: 0xC661, + 33463 - 11905: 0xDCC6, + 33464 - 11905: 0xDCBF, + 33465 - 11905: 0xC7DB, + 33466 - 11905: 0xC662, + 33467 - 11905: 0xC663, + 33468 - 11905: 0xC664, + 33469 - 11905: 0xD1BF, + 33470 - 11905: 0xDCC0, + 33471 - 11905: 0xC665, + 33472 - 11905: 0xC666, + 33473 - 11905: 0xDCCA, + 33474 - 11905: 0xC667, + 33475 - 11905: 0xC668, + 33476 - 11905: 0xDCD0, + 33477 - 11905: 0xC669, + 33478 - 11905: 0xC66A, + 33479 - 11905: 0xCEAD, + 33480 - 11905: 0xDCC2, + 33481 - 11905: 0xC66B, + 33482 - 11905: 0xDCC3, + 33483 - 11905: 0xDCC8, + 33484 - 11905: 0xDCC9, + 33485 - 11905: 0xB2D4, + 33486 - 11905: 0xDCD1, + 33487 - 11905: 0xCBD5, + 33488 - 11905: 0xC66C, + 33489 - 11905: 0xD4B7, + 33490 - 11905: 0xDCDB, + 33491 - 11905: 0xDCDF, + 33492 - 11905: 0xCCA6, + 33493 - 11905: 0xDCE6, + 33494 - 11905: 0xC66D, + 33495 - 11905: 0xC3E7, + 33496 - 11905: 0xDCDC, + 33497 - 11905: 0xC66E, + 33498 - 11905: 0xC66F, + 33499 - 11905: 0xBFC1, + 33500 - 11905: 0xDCD9, + 33501 - 11905: 0xC670, + 33502 - 11905: 0xB0FA, + 33503 - 11905: 0xB9B6, + 33504 - 11905: 0xDCE5, + 33505 - 11905: 0xDCD3, + 33506 - 11905: 0xC671, + 33507 - 11905: 0xDCC4, + 33508 - 11905: 0xDCD6, + 33509 - 11905: 0xC8F4, + 33510 - 11905: 0xBFE0, + 33511 - 11905: 0xC672, + 33512 - 11905: 0xC673, + 33513 - 11905: 0xC674, + 33514 - 11905: 0xC675, + 33515 - 11905: 0xC9BB, + 33516 - 11905: 0xC676, + 33517 - 11905: 0xC677, + 33518 - 11905: 0xC678, + 33519 - 11905: 0xB1BD, + 33520 - 11905: 0xC679, + 33521 - 11905: 0xD3A2, + 33522 - 11905: 0xC67A, + 33523 - 11905: 0xC67B, + 33524 - 11905: 0xDCDA, + 33525 - 11905: 0xC67C, + 33526 - 11905: 0xC67D, + 33527 - 11905: 0xDCD5, + 33528 - 11905: 0xC67E, + 33529 - 11905: 0xC6BB, + 33530 - 11905: 0xC680, + 33531 - 11905: 0xDCDE, + 33532 - 11905: 0xC681, + 33533 - 11905: 0xC682, + 33534 - 11905: 0xC683, + 33535 - 11905: 0xC684, + 33536 - 11905: 0xC685, + 33537 - 11905: 0xD7C2, + 33538 - 11905: 0xC3AF, + 33539 - 11905: 0xB7B6, + 33540 - 11905: 0xC7D1, + 33541 - 11905: 0xC3A9, + 33542 - 11905: 0xDCE2, + 33543 - 11905: 0xDCD8, + 33544 - 11905: 0xDCEB, + 33545 - 11905: 0xDCD4, + 33546 - 11905: 0xC686, + 33547 - 11905: 0xC687, + 33548 - 11905: 0xDCDD, + 33549 - 11905: 0xC688, + 33550 - 11905: 0xBEA5, + 33551 - 11905: 0xDCD7, + 33552 - 11905: 0xC689, + 33553 - 11905: 0xDCE0, + 33554 - 11905: 0xC68A, + 33555 - 11905: 0xC68B, + 33556 - 11905: 0xDCE3, + 33557 - 11905: 0xDCE4, + 33558 - 11905: 0xC68C, + 33559 - 11905: 0xDCF8, + 33560 - 11905: 0xC68D, + 33561 - 11905: 0xC68E, + 33562 - 11905: 0xDCE1, + 33563 - 11905: 0xDDA2, + 33564 - 11905: 0xDCE7, + 33565 - 11905: 0xC68F, + 33566 - 11905: 0xC690, + 33567 - 11905: 0xC691, + 33568 - 11905: 0xC692, + 33569 - 11905: 0xC693, + 33570 - 11905: 0xC694, + 33571 - 11905: 0xC695, + 33572 - 11905: 0xC696, + 33573 - 11905: 0xC697, + 33574 - 11905: 0xC698, + 33575 - 11905: 0xBCEB, + 33576 - 11905: 0xB4C4, + 33577 - 11905: 0xC699, + 33578 - 11905: 0xC69A, + 33579 - 11905: 0xC3A3, + 33580 - 11905: 0xB2E7, + 33581 - 11905: 0xDCFA, + 33582 - 11905: 0xC69B, + 33583 - 11905: 0xDCF2, + 33584 - 11905: 0xC69C, + 33585 - 11905: 0xDCEF, + 33586 - 11905: 0xC69D, + 33587 - 11905: 0xDCFC, + 33588 - 11905: 0xDCEE, + 33589 - 11905: 0xD2F0, + 33590 - 11905: 0xB2E8, + 33591 - 11905: 0xC69E, + 33592 - 11905: 0xC8D7, + 33593 - 11905: 0xC8E3, + 33594 - 11905: 0xDCFB, + 33595 - 11905: 0xC69F, + 33596 - 11905: 0xDCED, + 33597 - 11905: 0xC6A0, + 33598 - 11905: 0xC740, + 33599 - 11905: 0xC741, + 33600 - 11905: 0xDCF7, + 33601 - 11905: 0xC742, + 33602 - 11905: 0xC743, + 33603 - 11905: 0xDCF5, + 33604 - 11905: 0xC744, + 33605 - 11905: 0xC745, + 33606 - 11905: 0xBEA3, + 33607 - 11905: 0xDCF4, + 33608 - 11905: 0xC746, + 33609 - 11905: 0xB2DD, + 33610 - 11905: 0xC747, + 33611 - 11905: 0xC748, + 33612 - 11905: 0xC749, + 33613 - 11905: 0xC74A, + 33614 - 11905: 0xC74B, + 33615 - 11905: 0xDCF3, + 33616 - 11905: 0xBCF6, + 33617 - 11905: 0xDCE8, + 33618 - 11905: 0xBBC4, + 33619 - 11905: 0xC74C, + 33620 - 11905: 0xC0F3, + 33621 - 11905: 0xC74D, + 33622 - 11905: 0xC74E, + 33623 - 11905: 0xC74F, + 33624 - 11905: 0xC750, + 33625 - 11905: 0xC751, + 33626 - 11905: 0xBCD4, + 33627 - 11905: 0xDCE9, + 33628 - 11905: 0xDCEA, + 33629 - 11905: 0xC752, + 33630 - 11905: 0xDCF1, + 33631 - 11905: 0xDCF6, + 33632 - 11905: 0xDCF9, + 33633 - 11905: 0xB5B4, + 33634 - 11905: 0xC753, + 33635 - 11905: 0xC8D9, + 33636 - 11905: 0xBBE7, + 33637 - 11905: 0xDCFE, + 33638 - 11905: 0xDCFD, + 33639 - 11905: 0xD3AB, + 33640 - 11905: 0xDDA1, + 33641 - 11905: 0xDDA3, + 33642 - 11905: 0xDDA5, + 33643 - 11905: 0xD2F1, + 33644 - 11905: 0xDDA4, + 33645 - 11905: 0xDDA6, + 33646 - 11905: 0xDDA7, + 33647 - 11905: 0xD2A9, + 33648 - 11905: 0xC754, + 33649 - 11905: 0xC755, + 33650 - 11905: 0xC756, + 33651 - 11905: 0xC757, + 33652 - 11905: 0xC758, + 33653 - 11905: 0xC759, + 33654 - 11905: 0xC75A, + 33655 - 11905: 0xBAC9, + 33656 - 11905: 0xDDA9, + 33657 - 11905: 0xC75B, + 33658 - 11905: 0xC75C, + 33659 - 11905: 0xDDB6, + 33660 - 11905: 0xDDB1, + 33661 - 11905: 0xDDB4, + 33662 - 11905: 0xC75D, + 33663 - 11905: 0xC75E, + 33664 - 11905: 0xC75F, + 33665 - 11905: 0xC760, + 33666 - 11905: 0xC761, + 33667 - 11905: 0xC762, + 33668 - 11905: 0xC763, + 33669 - 11905: 0xDDB0, + 33670 - 11905: 0xC6CE, + 33671 - 11905: 0xC764, + 33672 - 11905: 0xC765, + 33673 - 11905: 0xC0F2, + 33674 - 11905: 0xC766, + 33675 - 11905: 0xC767, + 33676 - 11905: 0xC768, + 33677 - 11905: 0xC769, + 33678 - 11905: 0xC9AF, + 33679 - 11905: 0xC76A, + 33680 - 11905: 0xC76B, + 33681 - 11905: 0xC76C, + 33682 - 11905: 0xDCEC, + 33683 - 11905: 0xDDAE, + 33684 - 11905: 0xC76D, + 33685 - 11905: 0xC76E, + 33686 - 11905: 0xC76F, + 33687 - 11905: 0xC770, + 33688 - 11905: 0xDDB7, + 33689 - 11905: 0xC771, + 33690 - 11905: 0xC772, + 33691 - 11905: 0xDCF0, + 33692 - 11905: 0xDDAF, + 33693 - 11905: 0xC773, + 33694 - 11905: 0xDDB8, + 33695 - 11905: 0xC774, + 33696 - 11905: 0xDDAC, + 33697 - 11905: 0xC775, + 33698 - 11905: 0xC776, + 33699 - 11905: 0xC777, + 33700 - 11905: 0xC778, + 33701 - 11905: 0xC779, + 33702 - 11905: 0xC77A, + 33703 - 11905: 0xC77B, + 33704 - 11905: 0xDDB9, + 33705 - 11905: 0xDDB3, + 33706 - 11905: 0xDDAD, + 33707 - 11905: 0xC4AA, + 33708 - 11905: 0xC77C, + 33709 - 11905: 0xC77D, + 33710 - 11905: 0xC77E, + 33711 - 11905: 0xC780, + 33712 - 11905: 0xDDA8, + 33713 - 11905: 0xC0B3, + 33714 - 11905: 0xC1AB, + 33715 - 11905: 0xDDAA, + 33716 - 11905: 0xDDAB, + 33717 - 11905: 0xC781, + 33718 - 11905: 0xDDB2, + 33719 - 11905: 0xBBF1, + 33720 - 11905: 0xDDB5, + 33721 - 11905: 0xD3A8, + 33722 - 11905: 0xDDBA, + 33723 - 11905: 0xC782, + 33724 - 11905: 0xDDBB, + 33725 - 11905: 0xC3A7, + 33726 - 11905: 0xC783, + 33727 - 11905: 0xC784, + 33728 - 11905: 0xDDD2, + 33729 - 11905: 0xDDBC, + 33730 - 11905: 0xC785, + 33731 - 11905: 0xC786, + 33732 - 11905: 0xC787, + 33733 - 11905: 0xDDD1, + 33734 - 11905: 0xC788, + 33735 - 11905: 0xB9BD, + 33736 - 11905: 0xC789, + 33737 - 11905: 0xC78A, + 33738 - 11905: 0xBED5, + 33739 - 11905: 0xC78B, + 33740 - 11905: 0xBEFA, + 33741 - 11905: 0xC78C, + 33742 - 11905: 0xC78D, + 33743 - 11905: 0xBACA, + 33744 - 11905: 0xC78E, + 33745 - 11905: 0xC78F, + 33746 - 11905: 0xC790, + 33747 - 11905: 0xC791, + 33748 - 11905: 0xDDCA, + 33749 - 11905: 0xC792, + 33750 - 11905: 0xDDC5, + 33751 - 11905: 0xC793, + 33752 - 11905: 0xDDBF, + 33753 - 11905: 0xC794, + 33754 - 11905: 0xC795, + 33755 - 11905: 0xC796, + 33756 - 11905: 0xB2CB, + 33757 - 11905: 0xDDC3, + 33758 - 11905: 0xC797, + 33759 - 11905: 0xDDCB, + 33760 - 11905: 0xB2A4, + 33761 - 11905: 0xDDD5, + 33762 - 11905: 0xC798, + 33763 - 11905: 0xC799, + 33764 - 11905: 0xC79A, + 33765 - 11905: 0xDDBE, + 33766 - 11905: 0xC79B, + 33767 - 11905: 0xC79C, + 33768 - 11905: 0xC79D, + 33769 - 11905: 0xC6D0, + 33770 - 11905: 0xDDD0, + 33771 - 11905: 0xC79E, + 33772 - 11905: 0xC79F, + 33773 - 11905: 0xC7A0, + 33774 - 11905: 0xC840, + 33775 - 11905: 0xC841, + 33776 - 11905: 0xDDD4, + 33777 - 11905: 0xC1E2, + 33778 - 11905: 0xB7C6, + 33779 - 11905: 0xC842, + 33780 - 11905: 0xC843, + 33781 - 11905: 0xC844, + 33782 - 11905: 0xC845, + 33783 - 11905: 0xC846, + 33784 - 11905: 0xDDCE, + 33785 - 11905: 0xDDCF, + 33786 - 11905: 0xC847, + 33787 - 11905: 0xC848, + 33788 - 11905: 0xC849, + 33789 - 11905: 0xDDC4, + 33790 - 11905: 0xC84A, + 33791 - 11905: 0xC84B, + 33792 - 11905: 0xC84C, + 33793 - 11905: 0xDDBD, + 33794 - 11905: 0xC84D, + 33795 - 11905: 0xDDCD, + 33796 - 11905: 0xCCD1, + 33797 - 11905: 0xC84E, + 33798 - 11905: 0xDDC9, + 33799 - 11905: 0xC84F, + 33800 - 11905: 0xC850, + 33801 - 11905: 0xC851, + 33802 - 11905: 0xC852, + 33803 - 11905: 0xDDC2, + 33804 - 11905: 0xC3C8, + 33805 - 11905: 0xC6BC, + 33806 - 11905: 0xCEAE, + 33807 - 11905: 0xDDCC, + 33808 - 11905: 0xC853, + 33809 - 11905: 0xDDC8, + 33810 - 11905: 0xC854, + 33811 - 11905: 0xC855, + 33812 - 11905: 0xC856, + 33813 - 11905: 0xC857, + 33814 - 11905: 0xC858, + 33815 - 11905: 0xC859, + 33816 - 11905: 0xDDC1, + 33817 - 11905: 0xC85A, + 33818 - 11905: 0xC85B, + 33819 - 11905: 0xC85C, + 33820 - 11905: 0xDDC6, + 33821 - 11905: 0xC2DC, + 33822 - 11905: 0xC85D, + 33823 - 11905: 0xC85E, + 33824 - 11905: 0xC85F, + 33825 - 11905: 0xC860, + 33826 - 11905: 0xC861, + 33827 - 11905: 0xC862, + 33828 - 11905: 0xD3A9, + 33829 - 11905: 0xD3AA, + 33830 - 11905: 0xDDD3, + 33831 - 11905: 0xCFF4, + 33832 - 11905: 0xC8F8, + 33833 - 11905: 0xC863, + 33834 - 11905: 0xC864, + 33835 - 11905: 0xC865, + 33836 - 11905: 0xC866, + 33837 - 11905: 0xC867, + 33838 - 11905: 0xC868, + 33839 - 11905: 0xC869, + 33840 - 11905: 0xC86A, + 33841 - 11905: 0xDDE6, + 33842 - 11905: 0xC86B, + 33843 - 11905: 0xC86C, + 33844 - 11905: 0xC86D, + 33845 - 11905: 0xC86E, + 33846 - 11905: 0xC86F, + 33847 - 11905: 0xC870, + 33848 - 11905: 0xDDC7, + 33849 - 11905: 0xC871, + 33850 - 11905: 0xC872, + 33851 - 11905: 0xC873, + 33852 - 11905: 0xDDE0, + 33853 - 11905: 0xC2E4, + 33854 - 11905: 0xC874, + 33855 - 11905: 0xC875, + 33856 - 11905: 0xC876, + 33857 - 11905: 0xC877, + 33858 - 11905: 0xC878, + 33859 - 11905: 0xC879, + 33860 - 11905: 0xC87A, + 33861 - 11905: 0xC87B, + 33862 - 11905: 0xDDE1, + 33863 - 11905: 0xC87C, + 33864 - 11905: 0xC87D, + 33865 - 11905: 0xC87E, + 33866 - 11905: 0xC880, + 33867 - 11905: 0xC881, + 33868 - 11905: 0xC882, + 33869 - 11905: 0xC883, + 33870 - 11905: 0xC884, + 33871 - 11905: 0xC885, + 33872 - 11905: 0xC886, + 33873 - 11905: 0xDDD7, + 33874 - 11905: 0xC887, + 33875 - 11905: 0xC888, + 33876 - 11905: 0xC889, + 33877 - 11905: 0xC88A, + 33878 - 11905: 0xC88B, + 33879 - 11905: 0xD6F8, + 33880 - 11905: 0xC88C, + 33881 - 11905: 0xDDD9, + 33882 - 11905: 0xDDD8, + 33883 - 11905: 0xB8F0, + 33884 - 11905: 0xDDD6, + 33885 - 11905: 0xC88D, + 33886 - 11905: 0xC88E, + 33887 - 11905: 0xC88F, + 33888 - 11905: 0xC890, + 33889 - 11905: 0xC6CF, + 33890 - 11905: 0xC891, + 33891 - 11905: 0xB6AD, + 33892 - 11905: 0xC892, + 33893 - 11905: 0xC893, + 33894 - 11905: 0xC894, + 33895 - 11905: 0xC895, + 33896 - 11905: 0xC896, + 33897 - 11905: 0xDDE2, + 33898 - 11905: 0xC897, + 33899 - 11905: 0xBAF9, + 33900 - 11905: 0xD4E1, + 33901 - 11905: 0xDDE7, + 33902 - 11905: 0xC898, + 33903 - 11905: 0xC899, + 33904 - 11905: 0xC89A, + 33905 - 11905: 0xB4D0, + 33906 - 11905: 0xC89B, + 33907 - 11905: 0xDDDA, + 33908 - 11905: 0xC89C, + 33909 - 11905: 0xBFFB, + 33910 - 11905: 0xDDE3, + 33911 - 11905: 0xC89D, + 33912 - 11905: 0xDDDF, + 33913 - 11905: 0xC89E, + 33914 - 11905: 0xDDDD, + 33915 - 11905: 0xC89F, + 33916 - 11905: 0xC8A0, + 33917 - 11905: 0xC940, + 33918 - 11905: 0xC941, + 33919 - 11905: 0xC942, + 33920 - 11905: 0xC943, + 33921 - 11905: 0xC944, + 33922 - 11905: 0xB5D9, + 33923 - 11905: 0xC945, + 33924 - 11905: 0xC946, + 33925 - 11905: 0xC947, + 33926 - 11905: 0xC948, + 33927 - 11905: 0xDDDB, + 33928 - 11905: 0xDDDC, + 33929 - 11905: 0xDDDE, + 33930 - 11905: 0xC949, + 33931 - 11905: 0xBDAF, + 33932 - 11905: 0xDDE4, + 33933 - 11905: 0xC94A, + 33934 - 11905: 0xDDE5, + 33935 - 11905: 0xC94B, + 33936 - 11905: 0xC94C, + 33937 - 11905: 0xC94D, + 33938 - 11905: 0xC94E, + 33939 - 11905: 0xC94F, + 33940 - 11905: 0xC950, + 33941 - 11905: 0xC951, + 33942 - 11905: 0xC952, + 33943 - 11905: 0xDDF5, + 33944 - 11905: 0xC953, + 33945 - 11905: 0xC3C9, + 33946 - 11905: 0xC954, + 33947 - 11905: 0xC955, + 33948 - 11905: 0xCBE2, + 33949 - 11905: 0xC956, + 33950 - 11905: 0xC957, + 33951 - 11905: 0xC958, + 33952 - 11905: 0xC959, + 33953 - 11905: 0xDDF2, + 33954 - 11905: 0xC95A, + 33955 - 11905: 0xC95B, + 33956 - 11905: 0xC95C, + 33957 - 11905: 0xC95D, + 33958 - 11905: 0xC95E, + 33959 - 11905: 0xC95F, + 33960 - 11905: 0xC960, + 33961 - 11905: 0xC961, + 33962 - 11905: 0xC962, + 33963 - 11905: 0xC963, + 33964 - 11905: 0xC964, + 33965 - 11905: 0xC965, + 33966 - 11905: 0xC966, + 33967 - 11905: 0xD8E1, + 33968 - 11905: 0xC967, + 33969 - 11905: 0xC968, + 33970 - 11905: 0xC6D1, + 33971 - 11905: 0xC969, + 33972 - 11905: 0xDDF4, + 33973 - 11905: 0xC96A, + 33974 - 11905: 0xC96B, + 33975 - 11905: 0xC96C, + 33976 - 11905: 0xD5F4, + 33977 - 11905: 0xDDF3, + 33978 - 11905: 0xDDF0, + 33979 - 11905: 0xC96D, + 33980 - 11905: 0xC96E, + 33981 - 11905: 0xDDEC, + 33982 - 11905: 0xC96F, + 33983 - 11905: 0xDDEF, + 33984 - 11905: 0xC970, + 33985 - 11905: 0xDDE8, + 33986 - 11905: 0xC971, + 33987 - 11905: 0xC972, + 33988 - 11905: 0xD0EE, + 33989 - 11905: 0xC973, + 33990 - 11905: 0xC974, + 33991 - 11905: 0xC975, + 33992 - 11905: 0xC976, + 33993 - 11905: 0xC8D8, + 33994 - 11905: 0xDDEE, + 33995 - 11905: 0xC977, + 33996 - 11905: 0xC978, + 33997 - 11905: 0xDDE9, + 33998 - 11905: 0xC979, + 33999 - 11905: 0xC97A, + 34000 - 11905: 0xDDEA, + 34001 - 11905: 0xCBF2, + 34002 - 11905: 0xC97B, + 34003 - 11905: 0xDDED, + 34004 - 11905: 0xC97C, + 34005 - 11905: 0xC97D, + 34006 - 11905: 0xB1CD, + 34007 - 11905: 0xC97E, + 34008 - 11905: 0xC980, + 34009 - 11905: 0xC981, + 34010 - 11905: 0xC982, + 34011 - 11905: 0xC983, + 34012 - 11905: 0xC984, + 34013 - 11905: 0xC0B6, + 34014 - 11905: 0xC985, + 34015 - 11905: 0xBCBB, + 34016 - 11905: 0xDDF1, + 34017 - 11905: 0xC986, + 34018 - 11905: 0xC987, + 34019 - 11905: 0xDDF7, + 34020 - 11905: 0xC988, + 34021 - 11905: 0xDDF6, + 34022 - 11905: 0xDDEB, + 34023 - 11905: 0xC989, + 34024 - 11905: 0xC98A, + 34025 - 11905: 0xC98B, + 34026 - 11905: 0xC98C, + 34027 - 11905: 0xC98D, + 34028 - 11905: 0xC5EE, + 34029 - 11905: 0xC98E, + 34030 - 11905: 0xC98F, + 34031 - 11905: 0xC990, + 34032 - 11905: 0xDDFB, + 34033 - 11905: 0xC991, + 34034 - 11905: 0xC992, + 34035 - 11905: 0xC993, + 34036 - 11905: 0xC994, + 34037 - 11905: 0xC995, + 34038 - 11905: 0xC996, + 34039 - 11905: 0xC997, + 34040 - 11905: 0xC998, + 34041 - 11905: 0xC999, + 34042 - 11905: 0xC99A, + 34043 - 11905: 0xC99B, + 34044 - 11905: 0xDEA4, + 34045 - 11905: 0xC99C, + 34046 - 11905: 0xC99D, + 34047 - 11905: 0xDEA3, + 34048 - 11905: 0xC99E, + 34049 - 11905: 0xC99F, + 34050 - 11905: 0xC9A0, + 34051 - 11905: 0xCA40, + 34052 - 11905: 0xCA41, + 34053 - 11905: 0xCA42, + 34054 - 11905: 0xCA43, + 34055 - 11905: 0xCA44, + 34056 - 11905: 0xCA45, + 34057 - 11905: 0xCA46, + 34058 - 11905: 0xCA47, + 34059 - 11905: 0xCA48, + 34060 - 11905: 0xDDF8, + 34061 - 11905: 0xCA49, + 34062 - 11905: 0xCA4A, + 34063 - 11905: 0xCA4B, + 34064 - 11905: 0xCA4C, + 34065 - 11905: 0xC3EF, + 34066 - 11905: 0xCA4D, + 34067 - 11905: 0xC2FB, + 34068 - 11905: 0xCA4E, + 34069 - 11905: 0xCA4F, + 34070 - 11905: 0xCA50, + 34071 - 11905: 0xD5E1, + 34072 - 11905: 0xCA51, + 34073 - 11905: 0xCA52, + 34074 - 11905: 0xCEB5, + 34075 - 11905: 0xCA53, + 34076 - 11905: 0xCA54, + 34077 - 11905: 0xCA55, + 34078 - 11905: 0xCA56, + 34079 - 11905: 0xDDFD, + 34080 - 11905: 0xCA57, + 34081 - 11905: 0xB2CC, + 34082 - 11905: 0xCA58, + 34083 - 11905: 0xCA59, + 34084 - 11905: 0xCA5A, + 34085 - 11905: 0xCA5B, + 34086 - 11905: 0xCA5C, + 34087 - 11905: 0xCA5D, + 34088 - 11905: 0xCA5E, + 34089 - 11905: 0xCA5F, + 34090 - 11905: 0xCA60, + 34091 - 11905: 0xC4E8, + 34092 - 11905: 0xCADF, + 34093 - 11905: 0xCA61, + 34094 - 11905: 0xCA62, + 34095 - 11905: 0xCA63, + 34096 - 11905: 0xCA64, + 34097 - 11905: 0xCA65, + 34098 - 11905: 0xCA66, + 34099 - 11905: 0xCA67, + 34100 - 11905: 0xCA68, + 34101 - 11905: 0xCA69, + 34102 - 11905: 0xCA6A, + 34103 - 11905: 0xC7BE, + 34104 - 11905: 0xDDFA, + 34105 - 11905: 0xDDFC, + 34106 - 11905: 0xDDFE, + 34107 - 11905: 0xDEA2, + 34108 - 11905: 0xB0AA, + 34109 - 11905: 0xB1CE, + 34110 - 11905: 0xCA6B, + 34111 - 11905: 0xCA6C, + 34112 - 11905: 0xCA6D, + 34113 - 11905: 0xCA6E, + 34114 - 11905: 0xCA6F, + 34115 - 11905: 0xDEAC, + 34116 - 11905: 0xCA70, + 34117 - 11905: 0xCA71, + 34118 - 11905: 0xCA72, + 34119 - 11905: 0xCA73, + 34120 - 11905: 0xDEA6, + 34121 - 11905: 0xBDB6, + 34122 - 11905: 0xC8EF, + 34123 - 11905: 0xCA74, + 34124 - 11905: 0xCA75, + 34125 - 11905: 0xCA76, + 34126 - 11905: 0xCA77, + 34127 - 11905: 0xCA78, + 34128 - 11905: 0xCA79, + 34129 - 11905: 0xCA7A, + 34130 - 11905: 0xCA7B, + 34131 - 11905: 0xCA7C, + 34132 - 11905: 0xCA7D, + 34133 - 11905: 0xCA7E, + 34134 - 11905: 0xDEA1, + 34135 - 11905: 0xCA80, + 34136 - 11905: 0xCA81, + 34137 - 11905: 0xDEA5, + 34138 - 11905: 0xCA82, + 34139 - 11905: 0xCA83, + 34140 - 11905: 0xCA84, + 34141 - 11905: 0xCA85, + 34142 - 11905: 0xDEA9, + 34143 - 11905: 0xCA86, + 34144 - 11905: 0xCA87, + 34145 - 11905: 0xCA88, + 34146 - 11905: 0xCA89, + 34147 - 11905: 0xCA8A, + 34148 - 11905: 0xDEA8, + 34149 - 11905: 0xCA8B, + 34150 - 11905: 0xCA8C, + 34151 - 11905: 0xCA8D, + 34152 - 11905: 0xDEA7, + 34153 - 11905: 0xCA8E, + 34154 - 11905: 0xCA8F, + 34155 - 11905: 0xCA90, + 34156 - 11905: 0xCA91, + 34157 - 11905: 0xCA92, + 34158 - 11905: 0xCA93, + 34159 - 11905: 0xCA94, + 34160 - 11905: 0xCA95, + 34161 - 11905: 0xCA96, + 34162 - 11905: 0xDEAD, + 34163 - 11905: 0xCA97, + 34164 - 11905: 0xD4CC, + 34165 - 11905: 0xCA98, + 34166 - 11905: 0xCA99, + 34167 - 11905: 0xCA9A, + 34168 - 11905: 0xCA9B, + 34169 - 11905: 0xDEB3, + 34170 - 11905: 0xDEAA, + 34171 - 11905: 0xDEAE, + 34172 - 11905: 0xCA9C, + 34173 - 11905: 0xCA9D, + 34174 - 11905: 0xC0D9, + 34175 - 11905: 0xCA9E, + 34176 - 11905: 0xCA9F, + 34177 - 11905: 0xCAA0, + 34178 - 11905: 0xCB40, + 34179 - 11905: 0xCB41, + 34180 - 11905: 0xB1A1, + 34181 - 11905: 0xDEB6, + 34182 - 11905: 0xCB42, + 34183 - 11905: 0xDEB1, + 34184 - 11905: 0xCB43, + 34185 - 11905: 0xCB44, + 34186 - 11905: 0xCB45, + 34187 - 11905: 0xCB46, + 34188 - 11905: 0xCB47, + 34189 - 11905: 0xCB48, + 34190 - 11905: 0xCB49, + 34191 - 11905: 0xDEB2, + 34192 - 11905: 0xCB4A, + 34193 - 11905: 0xCB4B, + 34194 - 11905: 0xCB4C, + 34195 - 11905: 0xCB4D, + 34196 - 11905: 0xCB4E, + 34197 - 11905: 0xCB4F, + 34198 - 11905: 0xCB50, + 34199 - 11905: 0xCB51, + 34200 - 11905: 0xCB52, + 34201 - 11905: 0xCB53, + 34202 - 11905: 0xCB54, + 34203 - 11905: 0xD1A6, + 34204 - 11905: 0xDEB5, + 34205 - 11905: 0xCB55, + 34206 - 11905: 0xCB56, + 34207 - 11905: 0xCB57, + 34208 - 11905: 0xCB58, + 34209 - 11905: 0xCB59, + 34210 - 11905: 0xCB5A, + 34211 - 11905: 0xCB5B, + 34212 - 11905: 0xDEAF, + 34213 - 11905: 0xCB5C, + 34214 - 11905: 0xCB5D, + 34215 - 11905: 0xCB5E, + 34216 - 11905: 0xDEB0, + 34217 - 11905: 0xCB5F, + 34218 - 11905: 0xD0BD, + 34219 - 11905: 0xCB60, + 34220 - 11905: 0xCB61, + 34221 - 11905: 0xCB62, + 34222 - 11905: 0xDEB4, + 34223 - 11905: 0xCAED, + 34224 - 11905: 0xDEB9, + 34225 - 11905: 0xCB63, + 34226 - 11905: 0xCB64, + 34227 - 11905: 0xCB65, + 34228 - 11905: 0xCB66, + 34229 - 11905: 0xCB67, + 34230 - 11905: 0xCB68, + 34231 - 11905: 0xDEB8, + 34232 - 11905: 0xCB69, + 34233 - 11905: 0xDEB7, + 34234 - 11905: 0xCB6A, + 34235 - 11905: 0xCB6B, + 34236 - 11905: 0xCB6C, + 34237 - 11905: 0xCB6D, + 34238 - 11905: 0xCB6E, + 34239 - 11905: 0xCB6F, + 34240 - 11905: 0xCB70, + 34241 - 11905: 0xDEBB, + 34242 - 11905: 0xCB71, + 34243 - 11905: 0xCB72, + 34244 - 11905: 0xCB73, + 34245 - 11905: 0xCB74, + 34246 - 11905: 0xCB75, + 34247 - 11905: 0xCB76, + 34248 - 11905: 0xCB77, + 34249 - 11905: 0xBDE5, + 34250 - 11905: 0xCB78, + 34251 - 11905: 0xCB79, + 34252 - 11905: 0xCB7A, + 34253 - 11905: 0xCB7B, + 34254 - 11905: 0xCB7C, + 34255 - 11905: 0xB2D8, + 34256 - 11905: 0xC3EA, + 34257 - 11905: 0xCB7D, + 34258 - 11905: 0xCB7E, + 34259 - 11905: 0xDEBA, + 34260 - 11905: 0xCB80, + 34261 - 11905: 0xC5BA, + 34262 - 11905: 0xCB81, + 34263 - 11905: 0xCB82, + 34264 - 11905: 0xCB83, + 34265 - 11905: 0xCB84, + 34266 - 11905: 0xCB85, + 34267 - 11905: 0xCB86, + 34268 - 11905: 0xDEBC, + 34269 - 11905: 0xCB87, + 34270 - 11905: 0xCB88, + 34271 - 11905: 0xCB89, + 34272 - 11905: 0xCB8A, + 34273 - 11905: 0xCB8B, + 34274 - 11905: 0xCB8C, + 34275 - 11905: 0xCB8D, + 34276 - 11905: 0xCCD9, + 34277 - 11905: 0xCB8E, + 34278 - 11905: 0xCB8F, + 34279 - 11905: 0xCB90, + 34280 - 11905: 0xCB91, + 34281 - 11905: 0xB7AA, + 34282 - 11905: 0xCB92, + 34283 - 11905: 0xCB93, + 34284 - 11905: 0xCB94, + 34285 - 11905: 0xCB95, + 34286 - 11905: 0xCB96, + 34287 - 11905: 0xCB97, + 34288 - 11905: 0xCB98, + 34289 - 11905: 0xCB99, + 34290 - 11905: 0xCB9A, + 34291 - 11905: 0xCB9B, + 34292 - 11905: 0xCB9C, + 34293 - 11905: 0xCB9D, + 34294 - 11905: 0xCB9E, + 34295 - 11905: 0xCB9F, + 34296 - 11905: 0xCBA0, + 34297 - 11905: 0xCC40, + 34298 - 11905: 0xCC41, + 34299 - 11905: 0xD4E5, + 34300 - 11905: 0xCC42, + 34301 - 11905: 0xCC43, + 34302 - 11905: 0xCC44, + 34303 - 11905: 0xDEBD, + 34304 - 11905: 0xCC45, + 34305 - 11905: 0xCC46, + 34306 - 11905: 0xCC47, + 34307 - 11905: 0xCC48, + 34308 - 11905: 0xCC49, + 34309 - 11905: 0xDEBF, + 34310 - 11905: 0xCC4A, + 34311 - 11905: 0xCC4B, + 34312 - 11905: 0xCC4C, + 34313 - 11905: 0xCC4D, + 34314 - 11905: 0xCC4E, + 34315 - 11905: 0xCC4F, + 34316 - 11905: 0xCC50, + 34317 - 11905: 0xCC51, + 34318 - 11905: 0xCC52, + 34319 - 11905: 0xCC53, + 34320 - 11905: 0xCC54, + 34321 - 11905: 0xC4A2, + 34322 - 11905: 0xCC55, + 34323 - 11905: 0xCC56, + 34324 - 11905: 0xCC57, + 34325 - 11905: 0xCC58, + 34326 - 11905: 0xDEC1, + 34327 - 11905: 0xCC59, + 34328 - 11905: 0xCC5A, + 34329 - 11905: 0xCC5B, + 34330 - 11905: 0xCC5C, + 34331 - 11905: 0xCC5D, + 34332 - 11905: 0xCC5E, + 34333 - 11905: 0xCC5F, + 34334 - 11905: 0xCC60, + 34335 - 11905: 0xCC61, + 34336 - 11905: 0xCC62, + 34337 - 11905: 0xCC63, + 34338 - 11905: 0xCC64, + 34339 - 11905: 0xCC65, + 34340 - 11905: 0xCC66, + 34341 - 11905: 0xCC67, + 34342 - 11905: 0xCC68, + 34343 - 11905: 0xDEBE, + 34344 - 11905: 0xCC69, + 34345 - 11905: 0xDEC0, + 34346 - 11905: 0xCC6A, + 34347 - 11905: 0xCC6B, + 34348 - 11905: 0xCC6C, + 34349 - 11905: 0xCC6D, + 34350 - 11905: 0xCC6E, + 34351 - 11905: 0xCC6F, + 34352 - 11905: 0xCC70, + 34353 - 11905: 0xCC71, + 34354 - 11905: 0xCC72, + 34355 - 11905: 0xCC73, + 34356 - 11905: 0xCC74, + 34357 - 11905: 0xCC75, + 34358 - 11905: 0xCC76, + 34359 - 11905: 0xCC77, + 34360 - 11905: 0xD5BA, + 34361 - 11905: 0xCC78, + 34362 - 11905: 0xCC79, + 34363 - 11905: 0xCC7A, + 34364 - 11905: 0xDEC2, + 34365 - 11905: 0xCC7B, + 34366 - 11905: 0xCC7C, + 34367 - 11905: 0xCC7D, + 34368 - 11905: 0xCC7E, + 34369 - 11905: 0xCC80, + 34370 - 11905: 0xCC81, + 34371 - 11905: 0xCC82, + 34372 - 11905: 0xCC83, + 34373 - 11905: 0xCC84, + 34374 - 11905: 0xCC85, + 34375 - 11905: 0xCC86, + 34376 - 11905: 0xCC87, + 34377 - 11905: 0xCC88, + 34378 - 11905: 0xCC89, + 34379 - 11905: 0xCC8A, + 34380 - 11905: 0xCC8B, + 34381 - 11905: 0xF2AE, + 34382 - 11905: 0xBBA2, + 34383 - 11905: 0xC2B2, + 34384 - 11905: 0xC5B0, + 34385 - 11905: 0xC2C7, + 34386 - 11905: 0xCC8C, + 34387 - 11905: 0xCC8D, + 34388 - 11905: 0xF2AF, + 34389 - 11905: 0xCC8E, + 34390 - 11905: 0xCC8F, + 34391 - 11905: 0xCC90, + 34392 - 11905: 0xCC91, + 34393 - 11905: 0xCC92, + 34394 - 11905: 0xD0E9, + 34395 - 11905: 0xCC93, + 34396 - 11905: 0xCC94, + 34397 - 11905: 0xCC95, + 34398 - 11905: 0xD3DD, + 34399 - 11905: 0xCC96, + 34400 - 11905: 0xCC97, + 34401 - 11905: 0xCC98, + 34402 - 11905: 0xEBBD, + 34403 - 11905: 0xCC99, + 34404 - 11905: 0xCC9A, + 34405 - 11905: 0xCC9B, + 34406 - 11905: 0xCC9C, + 34407 - 11905: 0xCC9D, + 34408 - 11905: 0xCC9E, + 34409 - 11905: 0xCC9F, + 34410 - 11905: 0xCCA0, + 34411 - 11905: 0xB3E6, + 34412 - 11905: 0xF2B0, + 34413 - 11905: 0xCD40, + 34414 - 11905: 0xF2B1, + 34415 - 11905: 0xCD41, + 34416 - 11905: 0xCD42, + 34417 - 11905: 0xCAAD, + 34418 - 11905: 0xCD43, + 34419 - 11905: 0xCD44, + 34420 - 11905: 0xCD45, + 34421 - 11905: 0xCD46, + 34422 - 11905: 0xCD47, + 34423 - 11905: 0xCD48, + 34424 - 11905: 0xCD49, + 34425 - 11905: 0xBAE7, + 34426 - 11905: 0xF2B3, + 34427 - 11905: 0xF2B5, + 34428 - 11905: 0xF2B4, + 34429 - 11905: 0xCBE4, + 34430 - 11905: 0xCFBA, + 34431 - 11905: 0xF2B2, + 34432 - 11905: 0xCAB4, + 34433 - 11905: 0xD2CF, + 34434 - 11905: 0xC2EC, + 34435 - 11905: 0xCD4A, + 34436 - 11905: 0xCD4B, + 34437 - 11905: 0xCD4C, + 34438 - 11905: 0xCD4D, + 34439 - 11905: 0xCD4E, + 34440 - 11905: 0xCD4F, + 34441 - 11905: 0xCD50, + 34442 - 11905: 0xCEC3, + 34443 - 11905: 0xF2B8, + 34444 - 11905: 0xB0F6, + 34445 - 11905: 0xF2B7, + 34446 - 11905: 0xCD51, + 34447 - 11905: 0xCD52, + 34448 - 11905: 0xCD53, + 34449 - 11905: 0xCD54, + 34450 - 11905: 0xCD55, + 34451 - 11905: 0xF2BE, + 34452 - 11905: 0xCD56, + 34453 - 11905: 0xB2CF, + 34454 - 11905: 0xCD57, + 34455 - 11905: 0xCD58, + 34456 - 11905: 0xCD59, + 34457 - 11905: 0xCD5A, + 34458 - 11905: 0xCD5B, + 34459 - 11905: 0xCD5C, + 34460 - 11905: 0xD1C1, + 34461 - 11905: 0xF2BA, + 34462 - 11905: 0xCD5D, + 34463 - 11905: 0xCD5E, + 34464 - 11905: 0xCD5F, + 34465 - 11905: 0xCD60, + 34466 - 11905: 0xCD61, + 34467 - 11905: 0xF2BC, + 34468 - 11905: 0xD4E9, + 34469 - 11905: 0xCD62, + 34470 - 11905: 0xCD63, + 34471 - 11905: 0xF2BB, + 34472 - 11905: 0xF2B6, + 34473 - 11905: 0xF2BF, + 34474 - 11905: 0xF2BD, + 34475 - 11905: 0xCD64, + 34476 - 11905: 0xF2B9, + 34477 - 11905: 0xCD65, + 34478 - 11905: 0xCD66, + 34479 - 11905: 0xF2C7, + 34480 - 11905: 0xF2C4, + 34481 - 11905: 0xF2C6, + 34482 - 11905: 0xCD67, + 34483 - 11905: 0xCD68, + 34484 - 11905: 0xF2CA, + 34485 - 11905: 0xF2C2, + 34486 - 11905: 0xF2C0, + 34487 - 11905: 0xCD69, + 34488 - 11905: 0xCD6A, + 34489 - 11905: 0xCD6B, + 34490 - 11905: 0xF2C5, + 34491 - 11905: 0xCD6C, + 34492 - 11905: 0xCD6D, + 34493 - 11905: 0xCD6E, + 34494 - 11905: 0xCD6F, + 34495 - 11905: 0xCD70, + 34496 - 11905: 0xD6FB, + 34497 - 11905: 0xCD71, + 34498 - 11905: 0xCD72, + 34499 - 11905: 0xCD73, + 34500 - 11905: 0xF2C1, + 34501 - 11905: 0xCD74, + 34502 - 11905: 0xC7F9, + 34503 - 11905: 0xC9DF, + 34504 - 11905: 0xCD75, + 34505 - 11905: 0xF2C8, + 34506 - 11905: 0xB9C6, + 34507 - 11905: 0xB5B0, + 34508 - 11905: 0xCD76, + 34509 - 11905: 0xCD77, + 34510 - 11905: 0xF2C3, + 34511 - 11905: 0xF2C9, + 34512 - 11905: 0xF2D0, + 34513 - 11905: 0xF2D6, + 34514 - 11905: 0xCD78, + 34515 - 11905: 0xCD79, + 34516 - 11905: 0xBBD7, + 34517 - 11905: 0xCD7A, + 34518 - 11905: 0xCD7B, + 34519 - 11905: 0xCD7C, + 34520 - 11905: 0xF2D5, + 34521 - 11905: 0xCDDC, + 34522 - 11905: 0xCD7D, + 34523 - 11905: 0xD6EB, + 34524 - 11905: 0xCD7E, + 34525 - 11905: 0xCD80, + 34526 - 11905: 0xF2D2, + 34527 - 11905: 0xF2D4, + 34528 - 11905: 0xCD81, + 34529 - 11905: 0xCD82, + 34530 - 11905: 0xCD83, + 34531 - 11905: 0xCD84, + 34532 - 11905: 0xB8F2, + 34533 - 11905: 0xCD85, + 34534 - 11905: 0xCD86, + 34535 - 11905: 0xCD87, + 34536 - 11905: 0xCD88, + 34537 - 11905: 0xF2CB, + 34538 - 11905: 0xCD89, + 34539 - 11905: 0xCD8A, + 34540 - 11905: 0xCD8B, + 34541 - 11905: 0xF2CE, + 34542 - 11905: 0xC2F9, + 34543 - 11905: 0xCD8C, + 34544 - 11905: 0xD5DD, + 34545 - 11905: 0xF2CC, + 34546 - 11905: 0xF2CD, + 34547 - 11905: 0xF2CF, + 34548 - 11905: 0xF2D3, + 34549 - 11905: 0xCD8D, + 34550 - 11905: 0xCD8E, + 34551 - 11905: 0xCD8F, + 34552 - 11905: 0xF2D9, + 34553 - 11905: 0xD3BC, + 34554 - 11905: 0xCD90, + 34555 - 11905: 0xCD91, + 34556 - 11905: 0xCD92, + 34557 - 11905: 0xCD93, + 34558 - 11905: 0xB6EA, + 34559 - 11905: 0xCD94, + 34560 - 11905: 0xCAF1, + 34561 - 11905: 0xCD95, + 34562 - 11905: 0xB7E4, + 34563 - 11905: 0xF2D7, + 34564 - 11905: 0xCD96, + 34565 - 11905: 0xCD97, + 34566 - 11905: 0xCD98, + 34567 - 11905: 0xF2D8, + 34568 - 11905: 0xF2DA, + 34569 - 11905: 0xF2DD, + 34570 - 11905: 0xF2DB, + 34571 - 11905: 0xCD99, + 34572 - 11905: 0xCD9A, + 34573 - 11905: 0xF2DC, + 34574 - 11905: 0xCD9B, + 34575 - 11905: 0xCD9C, + 34576 - 11905: 0xCD9D, + 34577 - 11905: 0xCD9E, + 34578 - 11905: 0xD1D1, + 34579 - 11905: 0xF2D1, + 34580 - 11905: 0xCD9F, + 34581 - 11905: 0xCDC9, + 34582 - 11905: 0xCDA0, + 34583 - 11905: 0xCECF, + 34584 - 11905: 0xD6A9, + 34585 - 11905: 0xCE40, + 34586 - 11905: 0xF2E3, + 34587 - 11905: 0xCE41, + 34588 - 11905: 0xC3DB, + 34589 - 11905: 0xCE42, + 34590 - 11905: 0xF2E0, + 34591 - 11905: 0xCE43, + 34592 - 11905: 0xCE44, + 34593 - 11905: 0xC0AF, + 34594 - 11905: 0xF2EC, + 34595 - 11905: 0xF2DE, + 34596 - 11905: 0xCE45, + 34597 - 11905: 0xF2E1, + 34598 - 11905: 0xCE46, + 34599 - 11905: 0xCE47, + 34600 - 11905: 0xCE48, + 34601 - 11905: 0xF2E8, + 34602 - 11905: 0xCE49, + 34603 - 11905: 0xCE4A, + 34604 - 11905: 0xCE4B, + 34605 - 11905: 0xCE4C, + 34606 - 11905: 0xF2E2, + 34607 - 11905: 0xCE4D, + 34608 - 11905: 0xCE4E, + 34609 - 11905: 0xF2E7, + 34610 - 11905: 0xCE4F, + 34611 - 11905: 0xCE50, + 34612 - 11905: 0xF2E6, + 34613 - 11905: 0xCE51, + 34614 - 11905: 0xCE52, + 34615 - 11905: 0xF2E9, + 34616 - 11905: 0xCE53, + 34617 - 11905: 0xCE54, + 34618 - 11905: 0xCE55, + 34619 - 11905: 0xF2DF, + 34620 - 11905: 0xCE56, + 34621 - 11905: 0xCE57, + 34622 - 11905: 0xF2E4, + 34623 - 11905: 0xF2EA, + 34624 - 11905: 0xCE58, + 34625 - 11905: 0xCE59, + 34626 - 11905: 0xCE5A, + 34627 - 11905: 0xCE5B, + 34628 - 11905: 0xCE5C, + 34629 - 11905: 0xCE5D, + 34630 - 11905: 0xCE5E, + 34631 - 11905: 0xD3AC, + 34632 - 11905: 0xF2E5, + 34633 - 11905: 0xB2F5, + 34634 - 11905: 0xCE5F, + 34635 - 11905: 0xCE60, + 34636 - 11905: 0xF2F2, + 34637 - 11905: 0xCE61, + 34638 - 11905: 0xD0AB, + 34639 - 11905: 0xCE62, + 34640 - 11905: 0xCE63, + 34641 - 11905: 0xCE64, + 34642 - 11905: 0xCE65, + 34643 - 11905: 0xF2F5, + 34644 - 11905: 0xCE66, + 34645 - 11905: 0xCE67, + 34646 - 11905: 0xCE68, + 34647 - 11905: 0xBBC8, + 34648 - 11905: 0xCE69, + 34649 - 11905: 0xF2F9, + 34650 - 11905: 0xCE6A, + 34651 - 11905: 0xCE6B, + 34652 - 11905: 0xCE6C, + 34653 - 11905: 0xCE6D, + 34654 - 11905: 0xCE6E, + 34655 - 11905: 0xCE6F, + 34656 - 11905: 0xF2F0, + 34657 - 11905: 0xCE70, + 34658 - 11905: 0xCE71, + 34659 - 11905: 0xF2F6, + 34660 - 11905: 0xF2F8, + 34661 - 11905: 0xF2FA, + 34662 - 11905: 0xCE72, + 34663 - 11905: 0xCE73, + 34664 - 11905: 0xCE74, + 34665 - 11905: 0xCE75, + 34666 - 11905: 0xCE76, + 34667 - 11905: 0xCE77, + 34668 - 11905: 0xCE78, + 34669 - 11905: 0xCE79, + 34670 - 11905: 0xF2F3, + 34671 - 11905: 0xCE7A, + 34672 - 11905: 0xF2F1, + 34673 - 11905: 0xCE7B, + 34674 - 11905: 0xCE7C, + 34675 - 11905: 0xCE7D, + 34676 - 11905: 0xBAFB, + 34677 - 11905: 0xCE7E, + 34678 - 11905: 0xB5FB, + 34679 - 11905: 0xCE80, + 34680 - 11905: 0xCE81, + 34681 - 11905: 0xCE82, + 34682 - 11905: 0xCE83, + 34683 - 11905: 0xF2EF, + 34684 - 11905: 0xF2F7, + 34685 - 11905: 0xF2ED, + 34686 - 11905: 0xF2EE, + 34687 - 11905: 0xCE84, + 34688 - 11905: 0xCE85, + 34689 - 11905: 0xCE86, + 34690 - 11905: 0xF2EB, + 34691 - 11905: 0xF3A6, + 34692 - 11905: 0xCE87, + 34693 - 11905: 0xF3A3, + 34694 - 11905: 0xCE88, + 34695 - 11905: 0xCE89, + 34696 - 11905: 0xF3A2, + 34697 - 11905: 0xCE8A, + 34698 - 11905: 0xCE8B, + 34699 - 11905: 0xF2F4, + 34700 - 11905: 0xCE8C, + 34701 - 11905: 0xC8DA, + 34702 - 11905: 0xCE8D, + 34703 - 11905: 0xCE8E, + 34704 - 11905: 0xCE8F, + 34705 - 11905: 0xCE90, + 34706 - 11905: 0xCE91, + 34707 - 11905: 0xF2FB, + 34708 - 11905: 0xCE92, + 34709 - 11905: 0xCE93, + 34710 - 11905: 0xCE94, + 34711 - 11905: 0xF3A5, + 34712 - 11905: 0xCE95, + 34713 - 11905: 0xCE96, + 34714 - 11905: 0xCE97, + 34715 - 11905: 0xCE98, + 34716 - 11905: 0xCE99, + 34717 - 11905: 0xCE9A, + 34718 - 11905: 0xCE9B, + 34719 - 11905: 0xC3F8, + 34720 - 11905: 0xCE9C, + 34721 - 11905: 0xCE9D, + 34722 - 11905: 0xCE9E, + 34723 - 11905: 0xCE9F, + 34724 - 11905: 0xCEA0, + 34725 - 11905: 0xCF40, + 34726 - 11905: 0xCF41, + 34727 - 11905: 0xCF42, + 34728 - 11905: 0xF2FD, + 34729 - 11905: 0xCF43, + 34730 - 11905: 0xCF44, + 34731 - 11905: 0xF3A7, + 34732 - 11905: 0xF3A9, + 34733 - 11905: 0xF3A4, + 34734 - 11905: 0xCF45, + 34735 - 11905: 0xF2FC, + 34736 - 11905: 0xCF46, + 34737 - 11905: 0xCF47, + 34738 - 11905: 0xCF48, + 34739 - 11905: 0xF3AB, + 34740 - 11905: 0xCF49, + 34741 - 11905: 0xF3AA, + 34742 - 11905: 0xCF4A, + 34743 - 11905: 0xCF4B, + 34744 - 11905: 0xCF4C, + 34745 - 11905: 0xCF4D, + 34746 - 11905: 0xC2DD, + 34747 - 11905: 0xCF4E, + 34748 - 11905: 0xCF4F, + 34749 - 11905: 0xF3AE, + 34750 - 11905: 0xCF50, + 34751 - 11905: 0xCF51, + 34752 - 11905: 0xF3B0, + 34753 - 11905: 0xCF52, + 34754 - 11905: 0xCF53, + 34755 - 11905: 0xCF54, + 34756 - 11905: 0xCF55, + 34757 - 11905: 0xCF56, + 34758 - 11905: 0xF3A1, + 34759 - 11905: 0xCF57, + 34760 - 11905: 0xCF58, + 34761 - 11905: 0xCF59, + 34762 - 11905: 0xF3B1, + 34763 - 11905: 0xF3AC, + 34764 - 11905: 0xCF5A, + 34765 - 11905: 0xCF5B, + 34766 - 11905: 0xCF5C, + 34767 - 11905: 0xCF5D, + 34768 - 11905: 0xCF5E, + 34769 - 11905: 0xF3AF, + 34770 - 11905: 0xF2FE, + 34771 - 11905: 0xF3AD, + 34772 - 11905: 0xCF5F, + 34773 - 11905: 0xCF60, + 34774 - 11905: 0xCF61, + 34775 - 11905: 0xCF62, + 34776 - 11905: 0xCF63, + 34777 - 11905: 0xCF64, + 34778 - 11905: 0xCF65, + 34779 - 11905: 0xF3B2, + 34780 - 11905: 0xCF66, + 34781 - 11905: 0xCF67, + 34782 - 11905: 0xCF68, + 34783 - 11905: 0xCF69, + 34784 - 11905: 0xF3B4, + 34785 - 11905: 0xCF6A, + 34786 - 11905: 0xCF6B, + 34787 - 11905: 0xCF6C, + 34788 - 11905: 0xCF6D, + 34789 - 11905: 0xF3A8, + 34790 - 11905: 0xCF6E, + 34791 - 11905: 0xCF6F, + 34792 - 11905: 0xCF70, + 34793 - 11905: 0xCF71, + 34794 - 11905: 0xF3B3, + 34795 - 11905: 0xCF72, + 34796 - 11905: 0xCF73, + 34797 - 11905: 0xCF74, + 34798 - 11905: 0xF3B5, + 34799 - 11905: 0xCF75, + 34800 - 11905: 0xCF76, + 34801 - 11905: 0xCF77, + 34802 - 11905: 0xCF78, + 34803 - 11905: 0xCF79, + 34804 - 11905: 0xCF7A, + 34805 - 11905: 0xCF7B, + 34806 - 11905: 0xCF7C, + 34807 - 11905: 0xCF7D, + 34808 - 11905: 0xCF7E, + 34809 - 11905: 0xD0B7, + 34810 - 11905: 0xCF80, + 34811 - 11905: 0xCF81, + 34812 - 11905: 0xCF82, + 34813 - 11905: 0xCF83, + 34814 - 11905: 0xF3B8, + 34815 - 11905: 0xCF84, + 34816 - 11905: 0xCF85, + 34817 - 11905: 0xCF86, + 34818 - 11905: 0xCF87, + 34819 - 11905: 0xD9F9, + 34820 - 11905: 0xCF88, + 34821 - 11905: 0xCF89, + 34822 - 11905: 0xCF8A, + 34823 - 11905: 0xCF8B, + 34824 - 11905: 0xCF8C, + 34825 - 11905: 0xCF8D, + 34826 - 11905: 0xF3B9, + 34827 - 11905: 0xCF8E, + 34828 - 11905: 0xCF8F, + 34829 - 11905: 0xCF90, + 34830 - 11905: 0xCF91, + 34831 - 11905: 0xCF92, + 34832 - 11905: 0xCF93, + 34833 - 11905: 0xCF94, + 34834 - 11905: 0xCF95, + 34835 - 11905: 0xF3B7, + 34836 - 11905: 0xCF96, + 34837 - 11905: 0xC8E4, + 34838 - 11905: 0xF3B6, + 34839 - 11905: 0xCF97, + 34840 - 11905: 0xCF98, + 34841 - 11905: 0xCF99, + 34842 - 11905: 0xCF9A, + 34843 - 11905: 0xF3BA, + 34844 - 11905: 0xCF9B, + 34845 - 11905: 0xCF9C, + 34846 - 11905: 0xCF9D, + 34847 - 11905: 0xCF9E, + 34848 - 11905: 0xCF9F, + 34849 - 11905: 0xF3BB, + 34850 - 11905: 0xB4C0, + 34851 - 11905: 0xCFA0, + 34852 - 11905: 0xD040, + 34853 - 11905: 0xD041, + 34854 - 11905: 0xD042, + 34855 - 11905: 0xD043, + 34856 - 11905: 0xD044, + 34857 - 11905: 0xD045, + 34858 - 11905: 0xD046, + 34859 - 11905: 0xD047, + 34860 - 11905: 0xD048, + 34861 - 11905: 0xD049, + 34862 - 11905: 0xD04A, + 34863 - 11905: 0xD04B, + 34864 - 11905: 0xD04C, + 34865 - 11905: 0xD04D, + 34866 - 11905: 0xEEC3, + 34867 - 11905: 0xD04E, + 34868 - 11905: 0xD04F, + 34869 - 11905: 0xD050, + 34870 - 11905: 0xD051, + 34871 - 11905: 0xD052, + 34872 - 11905: 0xD053, + 34873 - 11905: 0xF3BC, + 34874 - 11905: 0xD054, + 34875 - 11905: 0xD055, + 34876 - 11905: 0xF3BD, + 34877 - 11905: 0xD056, + 34878 - 11905: 0xD057, + 34879 - 11905: 0xD058, + 34880 - 11905: 0xD1AA, + 34881 - 11905: 0xD059, + 34882 - 11905: 0xD05A, + 34883 - 11905: 0xD05B, + 34884 - 11905: 0xF4AC, + 34885 - 11905: 0xD0C6, + 34886 - 11905: 0xD05C, + 34887 - 11905: 0xD05D, + 34888 - 11905: 0xD05E, + 34889 - 11905: 0xD05F, + 34890 - 11905: 0xD060, + 34891 - 11905: 0xD061, + 34892 - 11905: 0xD0D0, + 34893 - 11905: 0xD1DC, + 34894 - 11905: 0xD062, + 34895 - 11905: 0xD063, + 34896 - 11905: 0xD064, + 34897 - 11905: 0xD065, + 34898 - 11905: 0xD066, + 34899 - 11905: 0xD067, + 34900 - 11905: 0xCFCE, + 34901 - 11905: 0xD068, + 34902 - 11905: 0xD069, + 34903 - 11905: 0xBDD6, + 34904 - 11905: 0xD06A, + 34905 - 11905: 0xD1C3, + 34906 - 11905: 0xD06B, + 34907 - 11905: 0xD06C, + 34908 - 11905: 0xD06D, + 34909 - 11905: 0xD06E, + 34910 - 11905: 0xD06F, + 34911 - 11905: 0xD070, + 34912 - 11905: 0xD071, + 34913 - 11905: 0xBAE2, + 34914 - 11905: 0xE1E9, + 34915 - 11905: 0xD2C2, + 34916 - 11905: 0xF1C2, + 34917 - 11905: 0xB2B9, + 34918 - 11905: 0xD072, + 34919 - 11905: 0xD073, + 34920 - 11905: 0xB1ED, + 34921 - 11905: 0xF1C3, + 34922 - 11905: 0xD074, + 34923 - 11905: 0xC9C0, + 34924 - 11905: 0xB3C4, + 34925 - 11905: 0xD075, + 34926 - 11905: 0xD9F2, + 34927 - 11905: 0xD076, + 34928 - 11905: 0xCBA5, + 34929 - 11905: 0xD077, + 34930 - 11905: 0xF1C4, + 34931 - 11905: 0xD078, + 34932 - 11905: 0xD079, + 34933 - 11905: 0xD07A, + 34934 - 11905: 0xD07B, + 34935 - 11905: 0xD6D4, + 34936 - 11905: 0xD07C, + 34937 - 11905: 0xD07D, + 34938 - 11905: 0xD07E, + 34939 - 11905: 0xD080, + 34940 - 11905: 0xD081, + 34941 - 11905: 0xF1C5, + 34942 - 11905: 0xF4C0, + 34943 - 11905: 0xF1C6, + 34944 - 11905: 0xD082, + 34945 - 11905: 0xD4AC, + 34946 - 11905: 0xF1C7, + 34947 - 11905: 0xD083, + 34948 - 11905: 0xB0C0, + 34949 - 11905: 0xF4C1, + 34950 - 11905: 0xD084, + 34951 - 11905: 0xD085, + 34952 - 11905: 0xF4C2, + 34953 - 11905: 0xD086, + 34954 - 11905: 0xD087, + 34955 - 11905: 0xB4FC, + 34956 - 11905: 0xD088, + 34957 - 11905: 0xC5DB, + 34958 - 11905: 0xD089, + 34959 - 11905: 0xD08A, + 34960 - 11905: 0xD08B, + 34961 - 11905: 0xD08C, + 34962 - 11905: 0xCCBB, + 34963 - 11905: 0xD08D, + 34964 - 11905: 0xD08E, + 34965 - 11905: 0xD08F, + 34966 - 11905: 0xD0E4, + 34967 - 11905: 0xD090, + 34968 - 11905: 0xD091, + 34969 - 11905: 0xD092, + 34970 - 11905: 0xD093, + 34971 - 11905: 0xD094, + 34972 - 11905: 0xCDE0, + 34973 - 11905: 0xD095, + 34974 - 11905: 0xD096, + 34975 - 11905: 0xD097, + 34976 - 11905: 0xD098, + 34977 - 11905: 0xD099, + 34978 - 11905: 0xF1C8, + 34979 - 11905: 0xD09A, + 34980 - 11905: 0xD9F3, + 34981 - 11905: 0xD09B, + 34982 - 11905: 0xD09C, + 34983 - 11905: 0xD09D, + 34984 - 11905: 0xD09E, + 34985 - 11905: 0xD09F, + 34986 - 11905: 0xD0A0, + 34987 - 11905: 0xB1BB, + 34988 - 11905: 0xD140, + 34989 - 11905: 0xCFAE, + 34990 - 11905: 0xD141, + 34991 - 11905: 0xD142, + 34992 - 11905: 0xD143, + 34993 - 11905: 0xB8A4, + 34994 - 11905: 0xD144, + 34995 - 11905: 0xD145, + 34996 - 11905: 0xD146, + 34997 - 11905: 0xD147, + 34998 - 11905: 0xD148, + 34999 - 11905: 0xF1CA, + 35000 - 11905: 0xD149, + 35001 - 11905: 0xD14A, + 35002 - 11905: 0xD14B, + 35003 - 11905: 0xD14C, + 35004 - 11905: 0xF1CB, + 35005 - 11905: 0xD14D, + 35006 - 11905: 0xD14E, + 35007 - 11905: 0xD14F, + 35008 - 11905: 0xD150, + 35009 - 11905: 0xB2C3, + 35010 - 11905: 0xC1D1, + 35011 - 11905: 0xD151, + 35012 - 11905: 0xD152, + 35013 - 11905: 0xD7B0, + 35014 - 11905: 0xF1C9, + 35015 - 11905: 0xD153, + 35016 - 11905: 0xD154, + 35017 - 11905: 0xF1CC, + 35018 - 11905: 0xD155, + 35019 - 11905: 0xD156, + 35020 - 11905: 0xD157, + 35021 - 11905: 0xD158, + 35022 - 11905: 0xF1CE, + 35023 - 11905: 0xD159, + 35024 - 11905: 0xD15A, + 35025 - 11905: 0xD15B, + 35026 - 11905: 0xD9F6, + 35027 - 11905: 0xD15C, + 35028 - 11905: 0xD2E1, + 35029 - 11905: 0xD4A3, + 35030 - 11905: 0xD15D, + 35031 - 11905: 0xD15E, + 35032 - 11905: 0xF4C3, + 35033 - 11905: 0xC8B9, + 35034 - 11905: 0xD15F, + 35035 - 11905: 0xD160, + 35036 - 11905: 0xD161, + 35037 - 11905: 0xD162, + 35038 - 11905: 0xD163, + 35039 - 11905: 0xF4C4, + 35040 - 11905: 0xD164, + 35041 - 11905: 0xD165, + 35042 - 11905: 0xF1CD, + 35043 - 11905: 0xF1CF, + 35044 - 11905: 0xBFE3, + 35045 - 11905: 0xF1D0, + 35046 - 11905: 0xD166, + 35047 - 11905: 0xD167, + 35048 - 11905: 0xF1D4, + 35049 - 11905: 0xD168, + 35050 - 11905: 0xD169, + 35051 - 11905: 0xD16A, + 35052 - 11905: 0xD16B, + 35053 - 11905: 0xD16C, + 35054 - 11905: 0xD16D, + 35055 - 11905: 0xD16E, + 35056 - 11905: 0xF1D6, + 35057 - 11905: 0xF1D1, + 35058 - 11905: 0xD16F, + 35059 - 11905: 0xC9D1, + 35060 - 11905: 0xC5E1, + 35061 - 11905: 0xD170, + 35062 - 11905: 0xD171, + 35063 - 11905: 0xD172, + 35064 - 11905: 0xC2E3, + 35065 - 11905: 0xB9FC, + 35066 - 11905: 0xD173, + 35067 - 11905: 0xD174, + 35068 - 11905: 0xF1D3, + 35069 - 11905: 0xD175, + 35070 - 11905: 0xF1D5, + 35071 - 11905: 0xD176, + 35072 - 11905: 0xD177, + 35073 - 11905: 0xD178, + 35074 - 11905: 0xB9D3, + 35075 - 11905: 0xD179, + 35076 - 11905: 0xD17A, + 35077 - 11905: 0xD17B, + 35078 - 11905: 0xD17C, + 35079 - 11905: 0xD17D, + 35080 - 11905: 0xD17E, + 35081 - 11905: 0xD180, + 35082 - 11905: 0xF1DB, + 35083 - 11905: 0xD181, + 35084 - 11905: 0xD182, + 35085 - 11905: 0xD183, + 35086 - 11905: 0xD184, + 35087 - 11905: 0xD185, + 35088 - 11905: 0xBAD6, + 35089 - 11905: 0xD186, + 35090 - 11905: 0xB0FD, + 35091 - 11905: 0xF1D9, + 35092 - 11905: 0xD187, + 35093 - 11905: 0xD188, + 35094 - 11905: 0xD189, + 35095 - 11905: 0xD18A, + 35096 - 11905: 0xD18B, + 35097 - 11905: 0xF1D8, + 35098 - 11905: 0xF1D2, + 35099 - 11905: 0xF1DA, + 35100 - 11905: 0xD18C, + 35101 - 11905: 0xD18D, + 35102 - 11905: 0xD18E, + 35103 - 11905: 0xD18F, + 35104 - 11905: 0xD190, + 35105 - 11905: 0xF1D7, + 35106 - 11905: 0xD191, + 35107 - 11905: 0xD192, + 35108 - 11905: 0xD193, + 35109 - 11905: 0xC8EC, + 35110 - 11905: 0xD194, + 35111 - 11905: 0xD195, + 35112 - 11905: 0xD196, + 35113 - 11905: 0xD197, + 35114 - 11905: 0xCDCA, + 35115 - 11905: 0xF1DD, + 35116 - 11905: 0xD198, + 35117 - 11905: 0xD199, + 35118 - 11905: 0xD19A, + 35119 - 11905: 0xD19B, + 35120 - 11905: 0xE5BD, + 35121 - 11905: 0xD19C, + 35122 - 11905: 0xD19D, + 35123 - 11905: 0xD19E, + 35124 - 11905: 0xF1DC, + 35125 - 11905: 0xD19F, + 35126 - 11905: 0xF1DE, + 35127 - 11905: 0xD1A0, + 35128 - 11905: 0xD240, + 35129 - 11905: 0xD241, + 35130 - 11905: 0xD242, + 35131 - 11905: 0xD243, + 35132 - 11905: 0xD244, + 35133 - 11905: 0xD245, + 35134 - 11905: 0xD246, + 35135 - 11905: 0xD247, + 35136 - 11905: 0xD248, + 35137 - 11905: 0xF1DF, + 35138 - 11905: 0xD249, + 35139 - 11905: 0xD24A, + 35140 - 11905: 0xCFE5, + 35141 - 11905: 0xD24B, + 35142 - 11905: 0xD24C, + 35143 - 11905: 0xD24D, + 35144 - 11905: 0xD24E, + 35145 - 11905: 0xD24F, + 35146 - 11905: 0xD250, + 35147 - 11905: 0xD251, + 35148 - 11905: 0xD252, + 35149 - 11905: 0xD253, + 35150 - 11905: 0xD254, + 35151 - 11905: 0xD255, + 35152 - 11905: 0xD256, + 35153 - 11905: 0xD257, + 35154 - 11905: 0xD258, + 35155 - 11905: 0xD259, + 35156 - 11905: 0xD25A, + 35157 - 11905: 0xD25B, + 35158 - 11905: 0xD25C, + 35159 - 11905: 0xD25D, + 35160 - 11905: 0xD25E, + 35161 - 11905: 0xD25F, + 35162 - 11905: 0xD260, + 35163 - 11905: 0xD261, + 35164 - 11905: 0xD262, + 35165 - 11905: 0xD263, + 35166 - 11905: 0xF4C5, + 35167 - 11905: 0xBDF3, + 35168 - 11905: 0xD264, + 35169 - 11905: 0xD265, + 35170 - 11905: 0xD266, + 35171 - 11905: 0xD267, + 35172 - 11905: 0xD268, + 35173 - 11905: 0xD269, + 35174 - 11905: 0xF1E0, + 35175 - 11905: 0xD26A, + 35176 - 11905: 0xD26B, + 35177 - 11905: 0xD26C, + 35178 - 11905: 0xD26D, + 35179 - 11905: 0xD26E, + 35180 - 11905: 0xD26F, + 35181 - 11905: 0xD270, + 35182 - 11905: 0xD271, + 35183 - 11905: 0xD272, + 35184 - 11905: 0xD273, + 35185 - 11905: 0xD274, + 35186 - 11905: 0xD275, + 35187 - 11905: 0xD276, + 35188 - 11905: 0xD277, + 35189 - 11905: 0xD278, + 35190 - 11905: 0xD279, + 35191 - 11905: 0xD27A, + 35192 - 11905: 0xD27B, + 35193 - 11905: 0xD27C, + 35194 - 11905: 0xD27D, + 35195 - 11905: 0xF1E1, + 35196 - 11905: 0xD27E, + 35197 - 11905: 0xD280, + 35198 - 11905: 0xD281, + 35199 - 11905: 0xCEF7, + 35200 - 11905: 0xD282, + 35201 - 11905: 0xD2AA, + 35202 - 11905: 0xD283, + 35203 - 11905: 0xF1FB, + 35204 - 11905: 0xD284, + 35205 - 11905: 0xD285, + 35206 - 11905: 0xB8B2, + 35207 - 11905: 0xD286, + 35208 - 11905: 0xD287, + 35209 - 11905: 0xD288, + 35210 - 11905: 0xD289, + 35211 - 11905: 0xD28A, + 35212 - 11905: 0xD28B, + 35213 - 11905: 0xD28C, + 35214 - 11905: 0xD28D, + 35215 - 11905: 0xD28E, + 35216 - 11905: 0xD28F, + 35217 - 11905: 0xD290, + 35218 - 11905: 0xD291, + 35219 - 11905: 0xD292, + 35220 - 11905: 0xD293, + 35221 - 11905: 0xD294, + 35222 - 11905: 0xD295, + 35223 - 11905: 0xD296, + 35224 - 11905: 0xD297, + 35225 - 11905: 0xD298, + 35226 - 11905: 0xD299, + 35227 - 11905: 0xD29A, + 35228 - 11905: 0xD29B, + 35229 - 11905: 0xD29C, + 35230 - 11905: 0xD29D, + 35231 - 11905: 0xD29E, + 35232 - 11905: 0xD29F, + 35233 - 11905: 0xD2A0, + 35234 - 11905: 0xD340, + 35235 - 11905: 0xD341, + 35236 - 11905: 0xD342, + 35237 - 11905: 0xD343, + 35238 - 11905: 0xD344, + 35239 - 11905: 0xD345, + 35240 - 11905: 0xD346, + 35241 - 11905: 0xD347, + 35242 - 11905: 0xD348, + 35243 - 11905: 0xD349, + 35244 - 11905: 0xD34A, + 35245 - 11905: 0xD34B, + 35246 - 11905: 0xD34C, + 35247 - 11905: 0xD34D, + 35248 - 11905: 0xD34E, + 35249 - 11905: 0xD34F, + 35250 - 11905: 0xD350, + 35251 - 11905: 0xD351, + 35252 - 11905: 0xD352, + 35253 - 11905: 0xD353, + 35254 - 11905: 0xD354, + 35255 - 11905: 0xD355, + 35256 - 11905: 0xD356, + 35257 - 11905: 0xD357, + 35258 - 11905: 0xD358, + 35259 - 11905: 0xD359, + 35260 - 11905: 0xD35A, + 35261 - 11905: 0xD35B, + 35262 - 11905: 0xD35C, + 35263 - 11905: 0xD35D, + 35264 - 11905: 0xD35E, + 35265 - 11905: 0xBCFB, + 35266 - 11905: 0xB9DB, + 35267 - 11905: 0xD35F, + 35268 - 11905: 0xB9E6, + 35269 - 11905: 0xC3D9, + 35270 - 11905: 0xCAD3, + 35271 - 11905: 0xEAE8, + 35272 - 11905: 0xC0C0, + 35273 - 11905: 0xBEF5, + 35274 - 11905: 0xEAE9, + 35275 - 11905: 0xEAEA, + 35276 - 11905: 0xEAEB, + 35277 - 11905: 0xD360, + 35278 - 11905: 0xEAEC, + 35279 - 11905: 0xEAED, + 35280 - 11905: 0xEAEE, + 35281 - 11905: 0xEAEF, + 35282 - 11905: 0xBDC7, + 35283 - 11905: 0xD361, + 35284 - 11905: 0xD362, + 35285 - 11905: 0xD363, + 35286 - 11905: 0xF5FB, + 35287 - 11905: 0xD364, + 35288 - 11905: 0xD365, + 35289 - 11905: 0xD366, + 35290 - 11905: 0xF5FD, + 35291 - 11905: 0xD367, + 35292 - 11905: 0xF5FE, + 35293 - 11905: 0xD368, + 35294 - 11905: 0xF5FC, + 35295 - 11905: 0xD369, + 35296 - 11905: 0xD36A, + 35297 - 11905: 0xD36B, + 35298 - 11905: 0xD36C, + 35299 - 11905: 0xBDE2, + 35300 - 11905: 0xD36D, + 35301 - 11905: 0xF6A1, + 35302 - 11905: 0xB4A5, + 35303 - 11905: 0xD36E, + 35304 - 11905: 0xD36F, + 35305 - 11905: 0xD370, + 35306 - 11905: 0xD371, + 35307 - 11905: 0xF6A2, + 35308 - 11905: 0xD372, + 35309 - 11905: 0xD373, + 35310 - 11905: 0xD374, + 35311 - 11905: 0xF6A3, + 35312 - 11905: 0xD375, + 35313 - 11905: 0xD376, + 35314 - 11905: 0xD377, + 35315 - 11905: 0xECB2, + 35316 - 11905: 0xD378, + 35317 - 11905: 0xD379, + 35318 - 11905: 0xD37A, + 35319 - 11905: 0xD37B, + 35320 - 11905: 0xD37C, + 35321 - 11905: 0xD37D, + 35322 - 11905: 0xD37E, + 35323 - 11905: 0xD380, + 35324 - 11905: 0xD381, + 35325 - 11905: 0xD382, + 35326 - 11905: 0xD383, + 35327 - 11905: 0xD384, + 35328 - 11905: 0xD1D4, + 35329 - 11905: 0xD385, + 35330 - 11905: 0xD386, + 35331 - 11905: 0xD387, + 35332 - 11905: 0xD388, + 35333 - 11905: 0xD389, + 35334 - 11905: 0xD38A, + 35335 - 11905: 0xD9EA, + 35336 - 11905: 0xD38B, + 35337 - 11905: 0xD38C, + 35338 - 11905: 0xD38D, + 35339 - 11905: 0xD38E, + 35340 - 11905: 0xD38F, + 35341 - 11905: 0xD390, + 35342 - 11905: 0xD391, + 35343 - 11905: 0xD392, + 35344 - 11905: 0xD393, + 35345 - 11905: 0xD394, + 35346 - 11905: 0xD395, + 35347 - 11905: 0xD396, + 35348 - 11905: 0xD397, + 35349 - 11905: 0xD398, + 35350 - 11905: 0xD399, + 35351 - 11905: 0xD39A, + 35352 - 11905: 0xD39B, + 35353 - 11905: 0xD39C, + 35354 - 11905: 0xD39D, + 35355 - 11905: 0xD39E, + 35356 - 11905: 0xD39F, + 35357 - 11905: 0xD3A0, + 35358 - 11905: 0xD440, + 35359 - 11905: 0xD441, + 35360 - 11905: 0xD442, + 35361 - 11905: 0xD443, + 35362 - 11905: 0xD444, + 35363 - 11905: 0xD445, + 35364 - 11905: 0xD446, + 35365 - 11905: 0xD447, + 35366 - 11905: 0xD448, + 35367 - 11905: 0xD449, + 35368 - 11905: 0xD44A, + 35369 - 11905: 0xD44B, + 35370 - 11905: 0xD44C, + 35371 - 11905: 0xD44D, + 35372 - 11905: 0xD44E, + 35373 - 11905: 0xD44F, + 35374 - 11905: 0xD450, + 35375 - 11905: 0xD451, + 35376 - 11905: 0xD452, + 35377 - 11905: 0xD453, + 35378 - 11905: 0xD454, + 35379 - 11905: 0xD455, + 35380 - 11905: 0xD456, + 35381 - 11905: 0xD457, + 35382 - 11905: 0xD458, + 35383 - 11905: 0xD459, + 35384 - 11905: 0xD45A, + 35385 - 11905: 0xD45B, + 35386 - 11905: 0xD45C, + 35387 - 11905: 0xD45D, + 35388 - 11905: 0xD45E, + 35389 - 11905: 0xD45F, + 35390 - 11905: 0xF6A4, + 35391 - 11905: 0xD460, + 35392 - 11905: 0xD461, + 35393 - 11905: 0xD462, + 35394 - 11905: 0xD463, + 35395 - 11905: 0xD464, + 35396 - 11905: 0xD465, + 35397 - 11905: 0xD466, + 35398 - 11905: 0xD467, + 35399 - 11905: 0xD468, + 35400 - 11905: 0xEEBA, + 35401 - 11905: 0xD469, + 35402 - 11905: 0xD46A, + 35403 - 11905: 0xD46B, + 35404 - 11905: 0xD46C, + 35405 - 11905: 0xD46D, + 35406 - 11905: 0xD46E, + 35407 - 11905: 0xD46F, + 35408 - 11905: 0xD470, + 35409 - 11905: 0xD471, + 35410 - 11905: 0xD472, + 35411 - 11905: 0xD473, + 35412 - 11905: 0xD474, + 35413 - 11905: 0xD475, + 35414 - 11905: 0xD476, + 35415 - 11905: 0xD477, + 35416 - 11905: 0xD478, + 35417 - 11905: 0xD479, + 35418 - 11905: 0xD47A, + 35419 - 11905: 0xD47B, + 35420 - 11905: 0xD47C, + 35421 - 11905: 0xD47D, + 35422 - 11905: 0xD47E, + 35423 - 11905: 0xD480, + 35424 - 11905: 0xD481, + 35425 - 11905: 0xD482, + 35426 - 11905: 0xD483, + 35427 - 11905: 0xD484, + 35428 - 11905: 0xD485, + 35429 - 11905: 0xD486, + 35430 - 11905: 0xD487, + 35431 - 11905: 0xD488, + 35432 - 11905: 0xD489, + 35433 - 11905: 0xD48A, + 35434 - 11905: 0xD48B, + 35435 - 11905: 0xD48C, + 35436 - 11905: 0xD48D, + 35437 - 11905: 0xD48E, + 35438 - 11905: 0xD48F, + 35439 - 11905: 0xD490, + 35440 - 11905: 0xD491, + 35441 - 11905: 0xD492, + 35442 - 11905: 0xD493, + 35443 - 11905: 0xD494, + 35444 - 11905: 0xD495, + 35445 - 11905: 0xD496, + 35446 - 11905: 0xD497, + 35447 - 11905: 0xD498, + 35448 - 11905: 0xD499, + 35449 - 11905: 0xD5B2, + 35450 - 11905: 0xD49A, + 35451 - 11905: 0xD49B, + 35452 - 11905: 0xD49C, + 35453 - 11905: 0xD49D, + 35454 - 11905: 0xD49E, + 35455 - 11905: 0xD49F, + 35456 - 11905: 0xD4A0, + 35457 - 11905: 0xD540, + 35458 - 11905: 0xD541, + 35459 - 11905: 0xD542, + 35460 - 11905: 0xD543, + 35461 - 11905: 0xD544, + 35462 - 11905: 0xD545, + 35463 - 11905: 0xD546, + 35464 - 11905: 0xD547, + 35465 - 11905: 0xD3FE, + 35466 - 11905: 0xCCDC, + 35467 - 11905: 0xD548, + 35468 - 11905: 0xD549, + 35469 - 11905: 0xD54A, + 35470 - 11905: 0xD54B, + 35471 - 11905: 0xD54C, + 35472 - 11905: 0xD54D, + 35473 - 11905: 0xD54E, + 35474 - 11905: 0xD54F, + 35475 - 11905: 0xCAC4, + 35476 - 11905: 0xD550, + 35477 - 11905: 0xD551, + 35478 - 11905: 0xD552, + 35479 - 11905: 0xD553, + 35480 - 11905: 0xD554, + 35481 - 11905: 0xD555, + 35482 - 11905: 0xD556, + 35483 - 11905: 0xD557, + 35484 - 11905: 0xD558, + 35485 - 11905: 0xD559, + 35486 - 11905: 0xD55A, + 35487 - 11905: 0xD55B, + 35488 - 11905: 0xD55C, + 35489 - 11905: 0xD55D, + 35490 - 11905: 0xD55E, + 35491 - 11905: 0xD55F, + 35492 - 11905: 0xD560, + 35493 - 11905: 0xD561, + 35494 - 11905: 0xD562, + 35495 - 11905: 0xD563, + 35496 - 11905: 0xD564, + 35497 - 11905: 0xD565, + 35498 - 11905: 0xD566, + 35499 - 11905: 0xD567, + 35500 - 11905: 0xD568, + 35501 - 11905: 0xD569, + 35502 - 11905: 0xD56A, + 35503 - 11905: 0xD56B, + 35504 - 11905: 0xD56C, + 35505 - 11905: 0xD56D, + 35506 - 11905: 0xD56E, + 35507 - 11905: 0xD56F, + 35508 - 11905: 0xD570, + 35509 - 11905: 0xD571, + 35510 - 11905: 0xD572, + 35511 - 11905: 0xD573, + 35512 - 11905: 0xD574, + 35513 - 11905: 0xD575, + 35514 - 11905: 0xD576, + 35515 - 11905: 0xD577, + 35516 - 11905: 0xD578, + 35517 - 11905: 0xD579, + 35518 - 11905: 0xD57A, + 35519 - 11905: 0xD57B, + 35520 - 11905: 0xD57C, + 35521 - 11905: 0xD57D, + 35522 - 11905: 0xD57E, + 35523 - 11905: 0xD580, + 35524 - 11905: 0xD581, + 35525 - 11905: 0xD582, + 35526 - 11905: 0xD583, + 35527 - 11905: 0xD584, + 35528 - 11905: 0xD585, + 35529 - 11905: 0xD586, + 35530 - 11905: 0xD587, + 35531 - 11905: 0xD588, + 35532 - 11905: 0xD589, + 35533 - 11905: 0xD58A, + 35534 - 11905: 0xD58B, + 35535 - 11905: 0xD58C, + 35536 - 11905: 0xD58D, + 35537 - 11905: 0xD58E, + 35538 - 11905: 0xD58F, + 35539 - 11905: 0xD590, + 35540 - 11905: 0xD591, + 35541 - 11905: 0xD592, + 35542 - 11905: 0xD593, + 35543 - 11905: 0xD594, + 35544 - 11905: 0xD595, + 35545 - 11905: 0xD596, + 35546 - 11905: 0xD597, + 35547 - 11905: 0xD598, + 35548 - 11905: 0xD599, + 35549 - 11905: 0xD59A, + 35550 - 11905: 0xD59B, + 35551 - 11905: 0xD59C, + 35552 - 11905: 0xD59D, + 35553 - 11905: 0xD59E, + 35554 - 11905: 0xD59F, + 35555 - 11905: 0xD5A0, + 35556 - 11905: 0xD640, + 35557 - 11905: 0xD641, + 35558 - 11905: 0xD642, + 35559 - 11905: 0xD643, + 35560 - 11905: 0xD644, + 35561 - 11905: 0xD645, + 35562 - 11905: 0xD646, + 35563 - 11905: 0xD647, + 35564 - 11905: 0xD648, + 35565 - 11905: 0xD649, + 35566 - 11905: 0xD64A, + 35567 - 11905: 0xD64B, + 35568 - 11905: 0xD64C, + 35569 - 11905: 0xD64D, + 35570 - 11905: 0xD64E, + 35571 - 11905: 0xD64F, + 35572 - 11905: 0xD650, + 35573 - 11905: 0xD651, + 35574 - 11905: 0xD652, + 35575 - 11905: 0xD653, + 35576 - 11905: 0xD654, + 35577 - 11905: 0xD655, + 35578 - 11905: 0xD656, + 35579 - 11905: 0xD657, + 35580 - 11905: 0xD658, + 35581 - 11905: 0xD659, + 35582 - 11905: 0xD65A, + 35583 - 11905: 0xD65B, + 35584 - 11905: 0xD65C, + 35585 - 11905: 0xD65D, + 35586 - 11905: 0xD65E, + 35587 - 11905: 0xD65F, + 35588 - 11905: 0xD660, + 35589 - 11905: 0xD661, + 35590 - 11905: 0xD662, + 35591 - 11905: 0xE5C0, + 35592 - 11905: 0xD663, + 35593 - 11905: 0xD664, + 35594 - 11905: 0xD665, + 35595 - 11905: 0xD666, + 35596 - 11905: 0xD667, + 35597 - 11905: 0xD668, + 35598 - 11905: 0xD669, + 35599 - 11905: 0xD66A, + 35600 - 11905: 0xD66B, + 35601 - 11905: 0xD66C, + 35602 - 11905: 0xD66D, + 35603 - 11905: 0xD66E, + 35604 - 11905: 0xD66F, + 35605 - 11905: 0xD670, + 35606 - 11905: 0xD671, + 35607 - 11905: 0xD672, + 35608 - 11905: 0xD673, + 35609 - 11905: 0xD674, + 35610 - 11905: 0xD675, + 35611 - 11905: 0xD676, + 35612 - 11905: 0xD677, + 35613 - 11905: 0xD678, + 35614 - 11905: 0xD679, + 35615 - 11905: 0xD67A, + 35616 - 11905: 0xD67B, + 35617 - 11905: 0xD67C, + 35618 - 11905: 0xD67D, + 35619 - 11905: 0xD67E, + 35620 - 11905: 0xD680, + 35621 - 11905: 0xD681, + 35622 - 11905: 0xF6A5, + 35623 - 11905: 0xD682, + 35624 - 11905: 0xD683, + 35625 - 11905: 0xD684, + 35626 - 11905: 0xD685, + 35627 - 11905: 0xD686, + 35628 - 11905: 0xD687, + 35629 - 11905: 0xD688, + 35630 - 11905: 0xD689, + 35631 - 11905: 0xD68A, + 35632 - 11905: 0xD68B, + 35633 - 11905: 0xD68C, + 35634 - 11905: 0xD68D, + 35635 - 11905: 0xD68E, + 35636 - 11905: 0xD68F, + 35637 - 11905: 0xD690, + 35638 - 11905: 0xD691, + 35639 - 11905: 0xD692, + 35640 - 11905: 0xD693, + 35641 - 11905: 0xD694, + 35642 - 11905: 0xD695, + 35643 - 11905: 0xD696, + 35644 - 11905: 0xD697, + 35645 - 11905: 0xD698, + 35646 - 11905: 0xD699, + 35647 - 11905: 0xD69A, + 35648 - 11905: 0xD69B, + 35649 - 11905: 0xD69C, + 35650 - 11905: 0xD69D, + 35651 - 11905: 0xD69E, + 35652 - 11905: 0xD69F, + 35653 - 11905: 0xD6A0, + 35654 - 11905: 0xD740, + 35655 - 11905: 0xD741, + 35656 - 11905: 0xD742, + 35657 - 11905: 0xD743, + 35658 - 11905: 0xD744, + 35659 - 11905: 0xD745, + 35660 - 11905: 0xD746, + 35661 - 11905: 0xD747, + 35662 - 11905: 0xD748, + 35663 - 11905: 0xD749, + 35664 - 11905: 0xD74A, + 35665 - 11905: 0xD74B, + 35666 - 11905: 0xD74C, + 35667 - 11905: 0xD74D, + 35668 - 11905: 0xD74E, + 35669 - 11905: 0xD74F, + 35670 - 11905: 0xD750, + 35671 - 11905: 0xD751, + 35672 - 11905: 0xD752, + 35673 - 11905: 0xD753, + 35674 - 11905: 0xD754, + 35675 - 11905: 0xD755, + 35676 - 11905: 0xD756, + 35677 - 11905: 0xD757, + 35678 - 11905: 0xD758, + 35679 - 11905: 0xD759, + 35680 - 11905: 0xD75A, + 35681 - 11905: 0xD75B, + 35682 - 11905: 0xD75C, + 35683 - 11905: 0xD75D, + 35684 - 11905: 0xD75E, + 35685 - 11905: 0xD75F, + 35686 - 11905: 0xBEAF, + 35687 - 11905: 0xD760, + 35688 - 11905: 0xD761, + 35689 - 11905: 0xD762, + 35690 - 11905: 0xD763, + 35691 - 11905: 0xD764, + 35692 - 11905: 0xC6A9, + 35693 - 11905: 0xD765, + 35694 - 11905: 0xD766, + 35695 - 11905: 0xD767, + 35696 - 11905: 0xD768, + 35697 - 11905: 0xD769, + 35698 - 11905: 0xD76A, + 35699 - 11905: 0xD76B, + 35700 - 11905: 0xD76C, + 35701 - 11905: 0xD76D, + 35702 - 11905: 0xD76E, + 35703 - 11905: 0xD76F, + 35704 - 11905: 0xD770, + 35705 - 11905: 0xD771, + 35706 - 11905: 0xD772, + 35707 - 11905: 0xD773, + 35708 - 11905: 0xD774, + 35709 - 11905: 0xD775, + 35710 - 11905: 0xD776, + 35711 - 11905: 0xD777, + 35712 - 11905: 0xD778, + 35713 - 11905: 0xD779, + 35714 - 11905: 0xD77A, + 35715 - 11905: 0xD77B, + 35716 - 11905: 0xD77C, + 35717 - 11905: 0xD77D, + 35718 - 11905: 0xD77E, + 35719 - 11905: 0xD780, + 35720 - 11905: 0xD781, + 35721 - 11905: 0xD782, + 35722 - 11905: 0xD783, + 35723 - 11905: 0xD784, + 35724 - 11905: 0xD785, + 35725 - 11905: 0xD786, + 35726 - 11905: 0xD787, + 35727 - 11905: 0xD788, + 35728 - 11905: 0xD789, + 35729 - 11905: 0xD78A, + 35730 - 11905: 0xD78B, + 35731 - 11905: 0xD78C, + 35732 - 11905: 0xD78D, + 35733 - 11905: 0xD78E, + 35734 - 11905: 0xD78F, + 35735 - 11905: 0xD790, + 35736 - 11905: 0xD791, + 35737 - 11905: 0xD792, + 35738 - 11905: 0xD793, + 35739 - 11905: 0xD794, + 35740 - 11905: 0xD795, + 35741 - 11905: 0xD796, + 35742 - 11905: 0xD797, + 35743 - 11905: 0xD798, + 35744 - 11905: 0xDAA5, + 35745 - 11905: 0xBCC6, + 35746 - 11905: 0xB6A9, + 35747 - 11905: 0xB8BC, + 35748 - 11905: 0xC8CF, + 35749 - 11905: 0xBCA5, + 35750 - 11905: 0xDAA6, + 35751 - 11905: 0xDAA7, + 35752 - 11905: 0xCCD6, + 35753 - 11905: 0xC8C3, + 35754 - 11905: 0xDAA8, + 35755 - 11905: 0xC6FD, + 35756 - 11905: 0xD799, + 35757 - 11905: 0xD1B5, + 35758 - 11905: 0xD2E9, + 35759 - 11905: 0xD1B6, + 35760 - 11905: 0xBCC7, + 35761 - 11905: 0xD79A, + 35762 - 11905: 0xBDB2, + 35763 - 11905: 0xBBE4, + 35764 - 11905: 0xDAA9, + 35765 - 11905: 0xDAAA, + 35766 - 11905: 0xD1C8, + 35767 - 11905: 0xDAAB, + 35768 - 11905: 0xD0ED, + 35769 - 11905: 0xB6EF, + 35770 - 11905: 0xC2DB, + 35771 - 11905: 0xD79B, + 35772 - 11905: 0xCBCF, + 35773 - 11905: 0xB7ED, + 35774 - 11905: 0xC9E8, + 35775 - 11905: 0xB7C3, + 35776 - 11905: 0xBEF7, + 35777 - 11905: 0xD6A4, + 35778 - 11905: 0xDAAC, + 35779 - 11905: 0xDAAD, + 35780 - 11905: 0xC6C0, + 35781 - 11905: 0xD7E7, + 35782 - 11905: 0xCAB6, + 35783 - 11905: 0xD79C, + 35784 - 11905: 0xD5A9, + 35785 - 11905: 0xCBDF, + 35786 - 11905: 0xD5EF, + 35787 - 11905: 0xDAAE, + 35788 - 11905: 0xD6DF, + 35789 - 11905: 0xB4CA, + 35790 - 11905: 0xDAB0, + 35791 - 11905: 0xDAAF, + 35792 - 11905: 0xD79D, + 35793 - 11905: 0xD2EB, + 35794 - 11905: 0xDAB1, + 35795 - 11905: 0xDAB2, + 35796 - 11905: 0xDAB3, + 35797 - 11905: 0xCAD4, + 35798 - 11905: 0xDAB4, + 35799 - 11905: 0xCAAB, + 35800 - 11905: 0xDAB5, + 35801 - 11905: 0xDAB6, + 35802 - 11905: 0xB3CF, + 35803 - 11905: 0xD6EF, + 35804 - 11905: 0xDAB7, + 35805 - 11905: 0xBBB0, + 35806 - 11905: 0xB5AE, + 35807 - 11905: 0xDAB8, + 35808 - 11905: 0xDAB9, + 35809 - 11905: 0xB9EE, + 35810 - 11905: 0xD1AF, + 35811 - 11905: 0xD2E8, + 35812 - 11905: 0xDABA, + 35813 - 11905: 0xB8C3, + 35814 - 11905: 0xCFEA, + 35815 - 11905: 0xB2EF, + 35816 - 11905: 0xDABB, + 35817 - 11905: 0xDABC, + 35818 - 11905: 0xD79E, + 35819 - 11905: 0xBDEB, + 35820 - 11905: 0xCEDC, + 35821 - 11905: 0xD3EF, + 35822 - 11905: 0xDABD, + 35823 - 11905: 0xCEF3, + 35824 - 11905: 0xDABE, + 35825 - 11905: 0xD3D5, + 35826 - 11905: 0xBBE5, + 35827 - 11905: 0xDABF, + 35828 - 11905: 0xCBB5, + 35829 - 11905: 0xCBD0, + 35830 - 11905: 0xDAC0, + 35831 - 11905: 0xC7EB, + 35832 - 11905: 0xD6EE, + 35833 - 11905: 0xDAC1, + 35834 - 11905: 0xC5B5, + 35835 - 11905: 0xB6C1, + 35836 - 11905: 0xDAC2, + 35837 - 11905: 0xB7CC, + 35838 - 11905: 0xBFCE, + 35839 - 11905: 0xDAC3, + 35840 - 11905: 0xDAC4, + 35841 - 11905: 0xCBAD, + 35842 - 11905: 0xDAC5, + 35843 - 11905: 0xB5F7, + 35844 - 11905: 0xDAC6, + 35845 - 11905: 0xC1C2, + 35846 - 11905: 0xD7BB, + 35847 - 11905: 0xDAC7, + 35848 - 11905: 0xCCB8, + 35849 - 11905: 0xD79F, + 35850 - 11905: 0xD2EA, + 35851 - 11905: 0xC4B1, + 35852 - 11905: 0xDAC8, + 35853 - 11905: 0xB5FD, + 35854 - 11905: 0xBBD1, + 35855 - 11905: 0xDAC9, + 35856 - 11905: 0xD0B3, + 35857 - 11905: 0xDACA, + 35858 - 11905: 0xDACB, + 35859 - 11905: 0xCEBD, + 35860 - 11905: 0xDACC, + 35861 - 11905: 0xDACD, + 35862 - 11905: 0xDACE, + 35863 - 11905: 0xB2F7, + 35864 - 11905: 0xDAD1, + 35865 - 11905: 0xDACF, + 35866 - 11905: 0xD1E8, + 35867 - 11905: 0xDAD0, + 35868 - 11905: 0xC3D5, + 35869 - 11905: 0xDAD2, + 35870 - 11905: 0xD7A0, + 35871 - 11905: 0xDAD3, + 35872 - 11905: 0xDAD4, + 35873 - 11905: 0xDAD5, + 35874 - 11905: 0xD0BB, + 35875 - 11905: 0xD2A5, + 35876 - 11905: 0xB0F9, + 35877 - 11905: 0xDAD6, + 35878 - 11905: 0xC7AB, + 35879 - 11905: 0xDAD7, + 35880 - 11905: 0xBDF7, + 35881 - 11905: 0xC3A1, + 35882 - 11905: 0xDAD8, + 35883 - 11905: 0xDAD9, + 35884 - 11905: 0xC3FD, + 35885 - 11905: 0xCCB7, + 35886 - 11905: 0xDADA, + 35887 - 11905: 0xDADB, + 35888 - 11905: 0xC0BE, + 35889 - 11905: 0xC6D7, + 35890 - 11905: 0xDADC, + 35891 - 11905: 0xDADD, + 35892 - 11905: 0xC7B4, + 35893 - 11905: 0xDADE, + 35894 - 11905: 0xDADF, + 35895 - 11905: 0xB9C8, + 35896 - 11905: 0xD840, + 35897 - 11905: 0xD841, + 35898 - 11905: 0xD842, + 35899 - 11905: 0xD843, + 35900 - 11905: 0xD844, + 35901 - 11905: 0xD845, + 35902 - 11905: 0xD846, + 35903 - 11905: 0xD847, + 35904 - 11905: 0xD848, + 35905 - 11905: 0xBBED, + 35906 - 11905: 0xD849, + 35907 - 11905: 0xD84A, + 35908 - 11905: 0xD84B, + 35909 - 11905: 0xD84C, + 35910 - 11905: 0xB6B9, + 35911 - 11905: 0xF4F8, + 35912 - 11905: 0xD84D, + 35913 - 11905: 0xF4F9, + 35914 - 11905: 0xD84E, + 35915 - 11905: 0xD84F, + 35916 - 11905: 0xCDE3, + 35917 - 11905: 0xD850, + 35918 - 11905: 0xD851, + 35919 - 11905: 0xD852, + 35920 - 11905: 0xD853, + 35921 - 11905: 0xD854, + 35922 - 11905: 0xD855, + 35923 - 11905: 0xD856, + 35924 - 11905: 0xD857, + 35925 - 11905: 0xF5B9, + 35926 - 11905: 0xD858, + 35927 - 11905: 0xD859, + 35928 - 11905: 0xD85A, + 35929 - 11905: 0xD85B, + 35930 - 11905: 0xEBE0, + 35931 - 11905: 0xD85C, + 35932 - 11905: 0xD85D, + 35933 - 11905: 0xD85E, + 35934 - 11905: 0xD85F, + 35935 - 11905: 0xD860, + 35936 - 11905: 0xD861, + 35937 - 11905: 0xCFF3, + 35938 - 11905: 0xBBBF, + 35939 - 11905: 0xD862, + 35940 - 11905: 0xD863, + 35941 - 11905: 0xD864, + 35942 - 11905: 0xD865, + 35943 - 11905: 0xD866, + 35944 - 11905: 0xD867, + 35945 - 11905: 0xD868, + 35946 - 11905: 0xBAC0, + 35947 - 11905: 0xD4A5, + 35948 - 11905: 0xD869, + 35949 - 11905: 0xD86A, + 35950 - 11905: 0xD86B, + 35951 - 11905: 0xD86C, + 35952 - 11905: 0xD86D, + 35953 - 11905: 0xD86E, + 35954 - 11905: 0xD86F, + 35955 - 11905: 0xE1D9, + 35956 - 11905: 0xD870, + 35957 - 11905: 0xD871, + 35958 - 11905: 0xD872, + 35959 - 11905: 0xD873, + 35960 - 11905: 0xF5F4, + 35961 - 11905: 0xB1AA, + 35962 - 11905: 0xB2F2, + 35963 - 11905: 0xD874, + 35964 - 11905: 0xD875, + 35965 - 11905: 0xD876, + 35966 - 11905: 0xD877, + 35967 - 11905: 0xD878, + 35968 - 11905: 0xD879, + 35969 - 11905: 0xD87A, + 35970 - 11905: 0xF5F5, + 35971 - 11905: 0xD87B, + 35972 - 11905: 0xD87C, + 35973 - 11905: 0xF5F7, + 35974 - 11905: 0xD87D, + 35975 - 11905: 0xD87E, + 35976 - 11905: 0xD880, + 35977 - 11905: 0xBAD1, + 35978 - 11905: 0xF5F6, + 35979 - 11905: 0xD881, + 35980 - 11905: 0xC3B2, + 35981 - 11905: 0xD882, + 35982 - 11905: 0xD883, + 35983 - 11905: 0xD884, + 35984 - 11905: 0xD885, + 35985 - 11905: 0xD886, + 35986 - 11905: 0xD887, + 35987 - 11905: 0xD888, + 35988 - 11905: 0xF5F9, + 35989 - 11905: 0xD889, + 35990 - 11905: 0xD88A, + 35991 - 11905: 0xD88B, + 35992 - 11905: 0xF5F8, + 35993 - 11905: 0xD88C, + 35994 - 11905: 0xD88D, + 35995 - 11905: 0xD88E, + 35996 - 11905: 0xD88F, + 35997 - 11905: 0xD890, + 35998 - 11905: 0xD891, + 35999 - 11905: 0xD892, + 36000 - 11905: 0xD893, + 36001 - 11905: 0xD894, + 36002 - 11905: 0xD895, + 36003 - 11905: 0xD896, + 36004 - 11905: 0xD897, + 36005 - 11905: 0xD898, + 36006 - 11905: 0xD899, + 36007 - 11905: 0xD89A, + 36008 - 11905: 0xD89B, + 36009 - 11905: 0xD89C, + 36010 - 11905: 0xD89D, + 36011 - 11905: 0xD89E, + 36012 - 11905: 0xD89F, + 36013 - 11905: 0xD8A0, + 36014 - 11905: 0xD940, + 36015 - 11905: 0xD941, + 36016 - 11905: 0xD942, + 36017 - 11905: 0xD943, + 36018 - 11905: 0xD944, + 36019 - 11905: 0xD945, + 36020 - 11905: 0xD946, + 36021 - 11905: 0xD947, + 36022 - 11905: 0xD948, + 36023 - 11905: 0xD949, + 36024 - 11905: 0xD94A, + 36025 - 11905: 0xD94B, + 36026 - 11905: 0xD94C, + 36027 - 11905: 0xD94D, + 36028 - 11905: 0xD94E, + 36029 - 11905: 0xD94F, + 36030 - 11905: 0xD950, + 36031 - 11905: 0xD951, + 36032 - 11905: 0xD952, + 36033 - 11905: 0xD953, + 36034 - 11905: 0xD954, + 36035 - 11905: 0xD955, + 36036 - 11905: 0xD956, + 36037 - 11905: 0xD957, + 36038 - 11905: 0xD958, + 36039 - 11905: 0xD959, + 36040 - 11905: 0xD95A, + 36041 - 11905: 0xD95B, + 36042 - 11905: 0xD95C, + 36043 - 11905: 0xD95D, + 36044 - 11905: 0xD95E, + 36045 - 11905: 0xD95F, + 36046 - 11905: 0xD960, + 36047 - 11905: 0xD961, + 36048 - 11905: 0xD962, + 36049 - 11905: 0xD963, + 36050 - 11905: 0xD964, + 36051 - 11905: 0xD965, + 36052 - 11905: 0xD966, + 36053 - 11905: 0xD967, + 36054 - 11905: 0xD968, + 36055 - 11905: 0xD969, + 36056 - 11905: 0xD96A, + 36057 - 11905: 0xD96B, + 36058 - 11905: 0xD96C, + 36059 - 11905: 0xD96D, + 36060 - 11905: 0xD96E, + 36061 - 11905: 0xD96F, + 36062 - 11905: 0xD970, + 36063 - 11905: 0xD971, + 36064 - 11905: 0xD972, + 36065 - 11905: 0xD973, + 36066 - 11905: 0xD974, + 36067 - 11905: 0xD975, + 36068 - 11905: 0xD976, + 36069 - 11905: 0xD977, + 36070 - 11905: 0xD978, + 36071 - 11905: 0xD979, + 36072 - 11905: 0xD97A, + 36073 - 11905: 0xD97B, + 36074 - 11905: 0xD97C, + 36075 - 11905: 0xD97D, + 36076 - 11905: 0xD97E, + 36077 - 11905: 0xD980, + 36078 - 11905: 0xD981, + 36079 - 11905: 0xD982, + 36080 - 11905: 0xD983, + 36081 - 11905: 0xD984, + 36082 - 11905: 0xD985, + 36083 - 11905: 0xD986, + 36084 - 11905: 0xD987, + 36085 - 11905: 0xD988, + 36086 - 11905: 0xD989, + 36087 - 11905: 0xD98A, + 36088 - 11905: 0xD98B, + 36089 - 11905: 0xD98C, + 36090 - 11905: 0xD98D, + 36091 - 11905: 0xD98E, + 36092 - 11905: 0xD98F, + 36093 - 11905: 0xD990, + 36094 - 11905: 0xD991, + 36095 - 11905: 0xD992, + 36096 - 11905: 0xD993, + 36097 - 11905: 0xD994, + 36098 - 11905: 0xD995, + 36099 - 11905: 0xD996, + 36100 - 11905: 0xD997, + 36101 - 11905: 0xD998, + 36102 - 11905: 0xD999, + 36103 - 11905: 0xD99A, + 36104 - 11905: 0xD99B, + 36105 - 11905: 0xD99C, + 36106 - 11905: 0xD99D, + 36107 - 11905: 0xD99E, + 36108 - 11905: 0xD99F, + 36109 - 11905: 0xD9A0, + 36110 - 11905: 0xDA40, + 36111 - 11905: 0xDA41, + 36112 - 11905: 0xDA42, + 36113 - 11905: 0xDA43, + 36114 - 11905: 0xDA44, + 36115 - 11905: 0xDA45, + 36116 - 11905: 0xDA46, + 36117 - 11905: 0xDA47, + 36118 - 11905: 0xDA48, + 36119 - 11905: 0xDA49, + 36120 - 11905: 0xDA4A, + 36121 - 11905: 0xDA4B, + 36122 - 11905: 0xDA4C, + 36123 - 11905: 0xDA4D, + 36124 - 11905: 0xDA4E, + 36125 - 11905: 0xB1B4, + 36126 - 11905: 0xD5EA, + 36127 - 11905: 0xB8BA, + 36128 - 11905: 0xDA4F, + 36129 - 11905: 0xB9B1, + 36130 - 11905: 0xB2C6, + 36131 - 11905: 0xD4F0, + 36132 - 11905: 0xCFCD, + 36133 - 11905: 0xB0DC, + 36134 - 11905: 0xD5CB, + 36135 - 11905: 0xBBF5, + 36136 - 11905: 0xD6CA, + 36137 - 11905: 0xB7B7, + 36138 - 11905: 0xCCB0, + 36139 - 11905: 0xC6B6, + 36140 - 11905: 0xB1E1, + 36141 - 11905: 0xB9BA, + 36142 - 11905: 0xD6FC, + 36143 - 11905: 0xB9E1, + 36144 - 11905: 0xB7A1, + 36145 - 11905: 0xBCFA, + 36146 - 11905: 0xEADA, + 36147 - 11905: 0xEADB, + 36148 - 11905: 0xCCF9, + 36149 - 11905: 0xB9F3, + 36150 - 11905: 0xEADC, + 36151 - 11905: 0xB4FB, + 36152 - 11905: 0xC3B3, + 36153 - 11905: 0xB7D1, + 36154 - 11905: 0xBAD8, + 36155 - 11905: 0xEADD, + 36156 - 11905: 0xD4F4, + 36157 - 11905: 0xEADE, + 36158 - 11905: 0xBCD6, + 36159 - 11905: 0xBBDF, + 36160 - 11905: 0xEADF, + 36161 - 11905: 0xC1DE, + 36162 - 11905: 0xC2B8, + 36163 - 11905: 0xD4DF, + 36164 - 11905: 0xD7CA, + 36165 - 11905: 0xEAE0, + 36166 - 11905: 0xEAE1, + 36167 - 11905: 0xEAE4, + 36168 - 11905: 0xEAE2, + 36169 - 11905: 0xEAE3, + 36170 - 11905: 0xC9DE, + 36171 - 11905: 0xB8B3, + 36172 - 11905: 0xB6C4, + 36173 - 11905: 0xEAE5, + 36174 - 11905: 0xCAEA, + 36175 - 11905: 0xC9CD, + 36176 - 11905: 0xB4CD, + 36177 - 11905: 0xDA50, + 36178 - 11905: 0xDA51, + 36179 - 11905: 0xE2D9, + 36180 - 11905: 0xC5E2, + 36181 - 11905: 0xEAE6, + 36182 - 11905: 0xC0B5, + 36183 - 11905: 0xDA52, + 36184 - 11905: 0xD7B8, + 36185 - 11905: 0xEAE7, + 36186 - 11905: 0xD7AC, + 36187 - 11905: 0xC8FC, + 36188 - 11905: 0xD8D3, + 36189 - 11905: 0xD8CD, + 36190 - 11905: 0xD4DE, + 36191 - 11905: 0xDA53, + 36192 - 11905: 0xD4F9, + 36193 - 11905: 0xC9C4, + 36194 - 11905: 0xD3AE, + 36195 - 11905: 0xB8D3, + 36196 - 11905: 0xB3E0, + 36197 - 11905: 0xDA54, + 36198 - 11905: 0xC9E2, + 36199 - 11905: 0xF4F6, + 36200 - 11905: 0xDA55, + 36201 - 11905: 0xDA56, + 36202 - 11905: 0xDA57, + 36203 - 11905: 0xBAD5, + 36204 - 11905: 0xDA58, + 36205 - 11905: 0xF4F7, + 36206 - 11905: 0xDA59, + 36207 - 11905: 0xDA5A, + 36208 - 11905: 0xD7DF, + 36209 - 11905: 0xDA5B, + 36210 - 11905: 0xDA5C, + 36211 - 11905: 0xF4F1, + 36212 - 11905: 0xB8B0, + 36213 - 11905: 0xD5D4, + 36214 - 11905: 0xB8CF, + 36215 - 11905: 0xC6F0, + 36216 - 11905: 0xDA5D, + 36217 - 11905: 0xDA5E, + 36218 - 11905: 0xDA5F, + 36219 - 11905: 0xDA60, + 36220 - 11905: 0xDA61, + 36221 - 11905: 0xDA62, + 36222 - 11905: 0xDA63, + 36223 - 11905: 0xDA64, + 36224 - 11905: 0xDA65, + 36225 - 11905: 0xB3C3, + 36226 - 11905: 0xDA66, + 36227 - 11905: 0xDA67, + 36228 - 11905: 0xF4F2, + 36229 - 11905: 0xB3AC, + 36230 - 11905: 0xDA68, + 36231 - 11905: 0xDA69, + 36232 - 11905: 0xDA6A, + 36233 - 11905: 0xDA6B, + 36234 - 11905: 0xD4BD, + 36235 - 11905: 0xC7F7, + 36236 - 11905: 0xDA6C, + 36237 - 11905: 0xDA6D, + 36238 - 11905: 0xDA6E, + 36239 - 11905: 0xDA6F, + 36240 - 11905: 0xDA70, + 36241 - 11905: 0xF4F4, + 36242 - 11905: 0xDA71, + 36243 - 11905: 0xDA72, + 36244 - 11905: 0xF4F3, + 36245 - 11905: 0xDA73, + 36246 - 11905: 0xDA74, + 36247 - 11905: 0xDA75, + 36248 - 11905: 0xDA76, + 36249 - 11905: 0xDA77, + 36250 - 11905: 0xDA78, + 36251 - 11905: 0xDA79, + 36252 - 11905: 0xDA7A, + 36253 - 11905: 0xDA7B, + 36254 - 11905: 0xDA7C, + 36255 - 11905: 0xCCCB, + 36256 - 11905: 0xDA7D, + 36257 - 11905: 0xDA7E, + 36258 - 11905: 0xDA80, + 36259 - 11905: 0xC8A4, + 36260 - 11905: 0xDA81, + 36261 - 11905: 0xDA82, + 36262 - 11905: 0xDA83, + 36263 - 11905: 0xDA84, + 36264 - 11905: 0xDA85, + 36265 - 11905: 0xDA86, + 36266 - 11905: 0xDA87, + 36267 - 11905: 0xDA88, + 36268 - 11905: 0xDA89, + 36269 - 11905: 0xDA8A, + 36270 - 11905: 0xDA8B, + 36271 - 11905: 0xDA8C, + 36272 - 11905: 0xDA8D, + 36273 - 11905: 0xF4F5, + 36274 - 11905: 0xDA8E, + 36275 - 11905: 0xD7E3, + 36276 - 11905: 0xC5BF, + 36277 - 11905: 0xF5C0, + 36278 - 11905: 0xDA8F, + 36279 - 11905: 0xDA90, + 36280 - 11905: 0xF5BB, + 36281 - 11905: 0xDA91, + 36282 - 11905: 0xF5C3, + 36283 - 11905: 0xDA92, + 36284 - 11905: 0xF5C2, + 36285 - 11905: 0xDA93, + 36286 - 11905: 0xD6BA, + 36287 - 11905: 0xF5C1, + 36288 - 11905: 0xDA94, + 36289 - 11905: 0xDA95, + 36290 - 11905: 0xDA96, + 36291 - 11905: 0xD4BE, + 36292 - 11905: 0xF5C4, + 36293 - 11905: 0xDA97, + 36294 - 11905: 0xF5CC, + 36295 - 11905: 0xDA98, + 36296 - 11905: 0xDA99, + 36297 - 11905: 0xDA9A, + 36298 - 11905: 0xDA9B, + 36299 - 11905: 0xB0CF, + 36300 - 11905: 0xB5F8, + 36301 - 11905: 0xDA9C, + 36302 - 11905: 0xF5C9, + 36303 - 11905: 0xF5CA, + 36304 - 11905: 0xDA9D, + 36305 - 11905: 0xC5DC, + 36306 - 11905: 0xDA9E, + 36307 - 11905: 0xDA9F, + 36308 - 11905: 0xDAA0, + 36309 - 11905: 0xDB40, + 36310 - 11905: 0xF5C5, + 36311 - 11905: 0xF5C6, + 36312 - 11905: 0xDB41, + 36313 - 11905: 0xDB42, + 36314 - 11905: 0xF5C7, + 36315 - 11905: 0xF5CB, + 36316 - 11905: 0xDB43, + 36317 - 11905: 0xBEE0, + 36318 - 11905: 0xF5C8, + 36319 - 11905: 0xB8FA, + 36320 - 11905: 0xDB44, + 36321 - 11905: 0xDB45, + 36322 - 11905: 0xDB46, + 36323 - 11905: 0xF5D0, + 36324 - 11905: 0xF5D3, + 36325 - 11905: 0xDB47, + 36326 - 11905: 0xDB48, + 36327 - 11905: 0xDB49, + 36328 - 11905: 0xBFE7, + 36329 - 11905: 0xDB4A, + 36330 - 11905: 0xB9F2, + 36331 - 11905: 0xF5BC, + 36332 - 11905: 0xF5CD, + 36333 - 11905: 0xDB4B, + 36334 - 11905: 0xDB4C, + 36335 - 11905: 0xC2B7, + 36336 - 11905: 0xDB4D, + 36337 - 11905: 0xDB4E, + 36338 - 11905: 0xDB4F, + 36339 - 11905: 0xCCF8, + 36340 - 11905: 0xDB50, + 36341 - 11905: 0xBCF9, + 36342 - 11905: 0xDB51, + 36343 - 11905: 0xF5CE, + 36344 - 11905: 0xF5CF, + 36345 - 11905: 0xF5D1, + 36346 - 11905: 0xB6E5, + 36347 - 11905: 0xF5D2, + 36348 - 11905: 0xDB52, + 36349 - 11905: 0xF5D5, + 36350 - 11905: 0xDB53, + 36351 - 11905: 0xDB54, + 36352 - 11905: 0xDB55, + 36353 - 11905: 0xDB56, + 36354 - 11905: 0xDB57, + 36355 - 11905: 0xDB58, + 36356 - 11905: 0xDB59, + 36357 - 11905: 0xF5BD, + 36358 - 11905: 0xDB5A, + 36359 - 11905: 0xDB5B, + 36360 - 11905: 0xDB5C, + 36361 - 11905: 0xF5D4, + 36362 - 11905: 0xD3BB, + 36363 - 11905: 0xDB5D, + 36364 - 11905: 0xB3EC, + 36365 - 11905: 0xDB5E, + 36366 - 11905: 0xDB5F, + 36367 - 11905: 0xCCA4, + 36368 - 11905: 0xDB60, + 36369 - 11905: 0xDB61, + 36370 - 11905: 0xDB62, + 36371 - 11905: 0xDB63, + 36372 - 11905: 0xF5D6, + 36373 - 11905: 0xDB64, + 36374 - 11905: 0xDB65, + 36375 - 11905: 0xDB66, + 36376 - 11905: 0xDB67, + 36377 - 11905: 0xDB68, + 36378 - 11905: 0xDB69, + 36379 - 11905: 0xDB6A, + 36380 - 11905: 0xDB6B, + 36381 - 11905: 0xF5D7, + 36382 - 11905: 0xBEE1, + 36383 - 11905: 0xF5D8, + 36384 - 11905: 0xDB6C, + 36385 - 11905: 0xDB6D, + 36386 - 11905: 0xCCDF, + 36387 - 11905: 0xF5DB, + 36388 - 11905: 0xDB6E, + 36389 - 11905: 0xDB6F, + 36390 - 11905: 0xDB70, + 36391 - 11905: 0xDB71, + 36392 - 11905: 0xDB72, + 36393 - 11905: 0xB2C8, + 36394 - 11905: 0xD7D9, + 36395 - 11905: 0xDB73, + 36396 - 11905: 0xF5D9, + 36397 - 11905: 0xDB74, + 36398 - 11905: 0xF5DA, + 36399 - 11905: 0xF5DC, + 36400 - 11905: 0xDB75, + 36401 - 11905: 0xF5E2, + 36402 - 11905: 0xDB76, + 36403 - 11905: 0xDB77, + 36404 - 11905: 0xDB78, + 36405 - 11905: 0xF5E0, + 36406 - 11905: 0xDB79, + 36407 - 11905: 0xDB7A, + 36408 - 11905: 0xDB7B, + 36409 - 11905: 0xF5DF, + 36410 - 11905: 0xF5DD, + 36411 - 11905: 0xDB7C, + 36412 - 11905: 0xDB7D, + 36413 - 11905: 0xF5E1, + 36414 - 11905: 0xDB7E, + 36415 - 11905: 0xDB80, + 36416 - 11905: 0xF5DE, + 36417 - 11905: 0xF5E4, + 36418 - 11905: 0xF5E5, + 36419 - 11905: 0xDB81, + 36420 - 11905: 0xCCE3, + 36421 - 11905: 0xDB82, + 36422 - 11905: 0xDB83, + 36423 - 11905: 0xE5BF, + 36424 - 11905: 0xB5B8, + 36425 - 11905: 0xF5E3, + 36426 - 11905: 0xF5E8, + 36427 - 11905: 0xCCA3, + 36428 - 11905: 0xDB84, + 36429 - 11905: 0xDB85, + 36430 - 11905: 0xDB86, + 36431 - 11905: 0xDB87, + 36432 - 11905: 0xDB88, + 36433 - 11905: 0xF5E6, + 36434 - 11905: 0xF5E7, + 36435 - 11905: 0xDB89, + 36436 - 11905: 0xDB8A, + 36437 - 11905: 0xDB8B, + 36438 - 11905: 0xDB8C, + 36439 - 11905: 0xDB8D, + 36440 - 11905: 0xDB8E, + 36441 - 11905: 0xF5BE, + 36442 - 11905: 0xDB8F, + 36443 - 11905: 0xDB90, + 36444 - 11905: 0xDB91, + 36445 - 11905: 0xDB92, + 36446 - 11905: 0xDB93, + 36447 - 11905: 0xDB94, + 36448 - 11905: 0xDB95, + 36449 - 11905: 0xDB96, + 36450 - 11905: 0xDB97, + 36451 - 11905: 0xDB98, + 36452 - 11905: 0xDB99, + 36453 - 11905: 0xDB9A, + 36454 - 11905: 0xB1C4, + 36455 - 11905: 0xDB9B, + 36456 - 11905: 0xDB9C, + 36457 - 11905: 0xF5BF, + 36458 - 11905: 0xDB9D, + 36459 - 11905: 0xDB9E, + 36460 - 11905: 0xB5C5, + 36461 - 11905: 0xB2E4, + 36462 - 11905: 0xDB9F, + 36463 - 11905: 0xF5EC, + 36464 - 11905: 0xF5E9, + 36465 - 11905: 0xDBA0, + 36466 - 11905: 0xB6D7, + 36467 - 11905: 0xDC40, + 36468 - 11905: 0xF5ED, + 36469 - 11905: 0xDC41, + 36470 - 11905: 0xF5EA, + 36471 - 11905: 0xDC42, + 36472 - 11905: 0xDC43, + 36473 - 11905: 0xDC44, + 36474 - 11905: 0xDC45, + 36475 - 11905: 0xDC46, + 36476 - 11905: 0xF5EB, + 36477 - 11905: 0xDC47, + 36478 - 11905: 0xDC48, + 36479 - 11905: 0xB4DA, + 36480 - 11905: 0xDC49, + 36481 - 11905: 0xD4EA, + 36482 - 11905: 0xDC4A, + 36483 - 11905: 0xDC4B, + 36484 - 11905: 0xDC4C, + 36485 - 11905: 0xF5EE, + 36486 - 11905: 0xDC4D, + 36487 - 11905: 0xB3F9, + 36488 - 11905: 0xDC4E, + 36489 - 11905: 0xDC4F, + 36490 - 11905: 0xDC50, + 36491 - 11905: 0xDC51, + 36492 - 11905: 0xDC52, + 36493 - 11905: 0xDC53, + 36494 - 11905: 0xDC54, + 36495 - 11905: 0xF5EF, + 36496 - 11905: 0xF5F1, + 36497 - 11905: 0xDC55, + 36498 - 11905: 0xDC56, + 36499 - 11905: 0xDC57, + 36500 - 11905: 0xF5F0, + 36501 - 11905: 0xDC58, + 36502 - 11905: 0xDC59, + 36503 - 11905: 0xDC5A, + 36504 - 11905: 0xDC5B, + 36505 - 11905: 0xDC5C, + 36506 - 11905: 0xDC5D, + 36507 - 11905: 0xDC5E, + 36508 - 11905: 0xF5F2, + 36509 - 11905: 0xDC5F, + 36510 - 11905: 0xF5F3, + 36511 - 11905: 0xDC60, + 36512 - 11905: 0xDC61, + 36513 - 11905: 0xDC62, + 36514 - 11905: 0xDC63, + 36515 - 11905: 0xDC64, + 36516 - 11905: 0xDC65, + 36517 - 11905: 0xDC66, + 36518 - 11905: 0xDC67, + 36519 - 11905: 0xDC68, + 36520 - 11905: 0xDC69, + 36521 - 11905: 0xDC6A, + 36522 - 11905: 0xDC6B, + 36523 - 11905: 0xC9ED, + 36524 - 11905: 0xB9AA, + 36525 - 11905: 0xDC6C, + 36526 - 11905: 0xDC6D, + 36527 - 11905: 0xC7FB, + 36528 - 11905: 0xDC6E, + 36529 - 11905: 0xDC6F, + 36530 - 11905: 0xB6E3, + 36531 - 11905: 0xDC70, + 36532 - 11905: 0xDC71, + 36533 - 11905: 0xDC72, + 36534 - 11905: 0xDC73, + 36535 - 11905: 0xDC74, + 36536 - 11905: 0xDC75, + 36537 - 11905: 0xDC76, + 36538 - 11905: 0xCCC9, + 36539 - 11905: 0xDC77, + 36540 - 11905: 0xDC78, + 36541 - 11905: 0xDC79, + 36542 - 11905: 0xDC7A, + 36543 - 11905: 0xDC7B, + 36544 - 11905: 0xDC7C, + 36545 - 11905: 0xDC7D, + 36546 - 11905: 0xDC7E, + 36547 - 11905: 0xDC80, + 36548 - 11905: 0xDC81, + 36549 - 11905: 0xDC82, + 36550 - 11905: 0xDC83, + 36551 - 11905: 0xDC84, + 36552 - 11905: 0xDC85, + 36553 - 11905: 0xDC86, + 36554 - 11905: 0xDC87, + 36555 - 11905: 0xDC88, + 36556 - 11905: 0xDC89, + 36557 - 11905: 0xDC8A, + 36558 - 11905: 0xEAA6, + 36559 - 11905: 0xDC8B, + 36560 - 11905: 0xDC8C, + 36561 - 11905: 0xDC8D, + 36562 - 11905: 0xDC8E, + 36563 - 11905: 0xDC8F, + 36564 - 11905: 0xDC90, + 36565 - 11905: 0xDC91, + 36566 - 11905: 0xDC92, + 36567 - 11905: 0xDC93, + 36568 - 11905: 0xDC94, + 36569 - 11905: 0xDC95, + 36570 - 11905: 0xDC96, + 36571 - 11905: 0xDC97, + 36572 - 11905: 0xDC98, + 36573 - 11905: 0xDC99, + 36574 - 11905: 0xDC9A, + 36575 - 11905: 0xDC9B, + 36576 - 11905: 0xDC9C, + 36577 - 11905: 0xDC9D, + 36578 - 11905: 0xDC9E, + 36579 - 11905: 0xDC9F, + 36580 - 11905: 0xDCA0, + 36581 - 11905: 0xDD40, + 36582 - 11905: 0xDD41, + 36583 - 11905: 0xDD42, + 36584 - 11905: 0xDD43, + 36585 - 11905: 0xDD44, + 36586 - 11905: 0xDD45, + 36587 - 11905: 0xDD46, + 36588 - 11905: 0xDD47, + 36589 - 11905: 0xDD48, + 36590 - 11905: 0xDD49, + 36591 - 11905: 0xDD4A, + 36592 - 11905: 0xDD4B, + 36593 - 11905: 0xDD4C, + 36594 - 11905: 0xDD4D, + 36595 - 11905: 0xDD4E, + 36596 - 11905: 0xDD4F, + 36597 - 11905: 0xDD50, + 36598 - 11905: 0xDD51, + 36599 - 11905: 0xDD52, + 36600 - 11905: 0xDD53, + 36601 - 11905: 0xDD54, + 36602 - 11905: 0xDD55, + 36603 - 11905: 0xDD56, + 36604 - 11905: 0xDD57, + 36605 - 11905: 0xDD58, + 36606 - 11905: 0xDD59, + 36607 - 11905: 0xDD5A, + 36608 - 11905: 0xDD5B, + 36609 - 11905: 0xDD5C, + 36610 - 11905: 0xDD5D, + 36611 - 11905: 0xDD5E, + 36612 - 11905: 0xDD5F, + 36613 - 11905: 0xDD60, + 36614 - 11905: 0xDD61, + 36615 - 11905: 0xDD62, + 36616 - 11905: 0xDD63, + 36617 - 11905: 0xDD64, + 36618 - 11905: 0xDD65, + 36619 - 11905: 0xDD66, + 36620 - 11905: 0xDD67, + 36621 - 11905: 0xDD68, + 36622 - 11905: 0xDD69, + 36623 - 11905: 0xDD6A, + 36624 - 11905: 0xDD6B, + 36625 - 11905: 0xDD6C, + 36626 - 11905: 0xDD6D, + 36627 - 11905: 0xDD6E, + 36628 - 11905: 0xDD6F, + 36629 - 11905: 0xDD70, + 36630 - 11905: 0xDD71, + 36631 - 11905: 0xDD72, + 36632 - 11905: 0xDD73, + 36633 - 11905: 0xDD74, + 36634 - 11905: 0xDD75, + 36635 - 11905: 0xDD76, + 36636 - 11905: 0xDD77, + 36637 - 11905: 0xDD78, + 36638 - 11905: 0xDD79, + 36639 - 11905: 0xDD7A, + 36640 - 11905: 0xDD7B, + 36641 - 11905: 0xDD7C, + 36642 - 11905: 0xDD7D, + 36643 - 11905: 0xDD7E, + 36644 - 11905: 0xDD80, + 36645 - 11905: 0xDD81, + 36646 - 11905: 0xDD82, + 36647 - 11905: 0xDD83, + 36648 - 11905: 0xDD84, + 36649 - 11905: 0xDD85, + 36650 - 11905: 0xDD86, + 36651 - 11905: 0xDD87, + 36652 - 11905: 0xDD88, + 36653 - 11905: 0xDD89, + 36654 - 11905: 0xDD8A, + 36655 - 11905: 0xDD8B, + 36656 - 11905: 0xDD8C, + 36657 - 11905: 0xDD8D, + 36658 - 11905: 0xDD8E, + 36659 - 11905: 0xDD8F, + 36660 - 11905: 0xDD90, + 36661 - 11905: 0xDD91, + 36662 - 11905: 0xDD92, + 36663 - 11905: 0xDD93, + 36664 - 11905: 0xDD94, + 36665 - 11905: 0xDD95, + 36666 - 11905: 0xDD96, + 36667 - 11905: 0xDD97, + 36668 - 11905: 0xDD98, + 36669 - 11905: 0xDD99, + 36670 - 11905: 0xDD9A, + 36671 - 11905: 0xDD9B, + 36672 - 11905: 0xDD9C, + 36673 - 11905: 0xDD9D, + 36674 - 11905: 0xDD9E, + 36675 - 11905: 0xDD9F, + 36676 - 11905: 0xDDA0, + 36677 - 11905: 0xDE40, + 36678 - 11905: 0xDE41, + 36679 - 11905: 0xDE42, + 36680 - 11905: 0xDE43, + 36681 - 11905: 0xDE44, + 36682 - 11905: 0xDE45, + 36683 - 11905: 0xDE46, + 36684 - 11905: 0xDE47, + 36685 - 11905: 0xDE48, + 36686 - 11905: 0xDE49, + 36687 - 11905: 0xDE4A, + 36688 - 11905: 0xDE4B, + 36689 - 11905: 0xDE4C, + 36690 - 11905: 0xDE4D, + 36691 - 11905: 0xDE4E, + 36692 - 11905: 0xDE4F, + 36693 - 11905: 0xDE50, + 36694 - 11905: 0xDE51, + 36695 - 11905: 0xDE52, + 36696 - 11905: 0xDE53, + 36697 - 11905: 0xDE54, + 36698 - 11905: 0xDE55, + 36699 - 11905: 0xDE56, + 36700 - 11905: 0xDE57, + 36701 - 11905: 0xDE58, + 36702 - 11905: 0xDE59, + 36703 - 11905: 0xDE5A, + 36704 - 11905: 0xDE5B, + 36705 - 11905: 0xDE5C, + 36706 - 11905: 0xDE5D, + 36707 - 11905: 0xDE5E, + 36708 - 11905: 0xDE5F, + 36709 - 11905: 0xDE60, + 36710 - 11905: 0xB3B5, + 36711 - 11905: 0xD4FE, + 36712 - 11905: 0xB9EC, + 36713 - 11905: 0xD0F9, + 36714 - 11905: 0xDE61, + 36715 - 11905: 0xE9ED, + 36716 - 11905: 0xD7AA, + 36717 - 11905: 0xE9EE, + 36718 - 11905: 0xC2D6, + 36719 - 11905: 0xC8ED, + 36720 - 11905: 0xBAE4, + 36721 - 11905: 0xE9EF, + 36722 - 11905: 0xE9F0, + 36723 - 11905: 0xE9F1, + 36724 - 11905: 0xD6E1, + 36725 - 11905: 0xE9F2, + 36726 - 11905: 0xE9F3, + 36727 - 11905: 0xE9F5, + 36728 - 11905: 0xE9F4, + 36729 - 11905: 0xE9F6, + 36730 - 11905: 0xE9F7, + 36731 - 11905: 0xC7E1, + 36732 - 11905: 0xE9F8, + 36733 - 11905: 0xD4D8, + 36734 - 11905: 0xE9F9, + 36735 - 11905: 0xBDCE, + 36736 - 11905: 0xDE62, + 36737 - 11905: 0xE9FA, + 36738 - 11905: 0xE9FB, + 36739 - 11905: 0xBDCF, + 36740 - 11905: 0xE9FC, + 36741 - 11905: 0xB8A8, + 36742 - 11905: 0xC1BE, + 36743 - 11905: 0xE9FD, + 36744 - 11905: 0xB1B2, + 36745 - 11905: 0xBBD4, + 36746 - 11905: 0xB9F5, + 36747 - 11905: 0xE9FE, + 36748 - 11905: 0xDE63, + 36749 - 11905: 0xEAA1, + 36750 - 11905: 0xEAA2, + 36751 - 11905: 0xEAA3, + 36752 - 11905: 0xB7F8, + 36753 - 11905: 0xBCAD, + 36754 - 11905: 0xDE64, + 36755 - 11905: 0xCAE4, + 36756 - 11905: 0xE0CE, + 36757 - 11905: 0xD4AF, + 36758 - 11905: 0xCFBD, + 36759 - 11905: 0xD5B7, + 36760 - 11905: 0xEAA4, + 36761 - 11905: 0xD5DE, + 36762 - 11905: 0xEAA5, + 36763 - 11905: 0xD0C1, + 36764 - 11905: 0xB9BC, + 36765 - 11905: 0xDE65, + 36766 - 11905: 0xB4C7, + 36767 - 11905: 0xB1D9, + 36768 - 11905: 0xDE66, + 36769 - 11905: 0xDE67, + 36770 - 11905: 0xDE68, + 36771 - 11905: 0xC0B1, + 36772 - 11905: 0xDE69, + 36773 - 11905: 0xDE6A, + 36774 - 11905: 0xDE6B, + 36775 - 11905: 0xDE6C, + 36776 - 11905: 0xB1E6, + 36777 - 11905: 0xB1E7, + 36778 - 11905: 0xDE6D, + 36779 - 11905: 0xB1E8, + 36780 - 11905: 0xDE6E, + 36781 - 11905: 0xDE6F, + 36782 - 11905: 0xDE70, + 36783 - 11905: 0xDE71, + 36784 - 11905: 0xB3BD, + 36785 - 11905: 0xC8E8, + 36786 - 11905: 0xDE72, + 36787 - 11905: 0xDE73, + 36788 - 11905: 0xDE74, + 36789 - 11905: 0xDE75, + 36790 - 11905: 0xE5C1, + 36791 - 11905: 0xDE76, + 36792 - 11905: 0xDE77, + 36793 - 11905: 0xB1DF, + 36794 - 11905: 0xDE78, + 36795 - 11905: 0xDE79, + 36796 - 11905: 0xDE7A, + 36797 - 11905: 0xC1C9, + 36798 - 11905: 0xB4EF, + 36799 - 11905: 0xDE7B, + 36800 - 11905: 0xDE7C, + 36801 - 11905: 0xC7A8, + 36802 - 11905: 0xD3D8, + 36803 - 11905: 0xDE7D, + 36804 - 11905: 0xC6F9, + 36805 - 11905: 0xD1B8, + 36806 - 11905: 0xDE7E, + 36807 - 11905: 0xB9FD, + 36808 - 11905: 0xC2F5, + 36809 - 11905: 0xDE80, + 36810 - 11905: 0xDE81, + 36811 - 11905: 0xDE82, + 36812 - 11905: 0xDE83, + 36813 - 11905: 0xDE84, + 36814 - 11905: 0xD3AD, + 36815 - 11905: 0xDE85, + 36816 - 11905: 0xD4CB, + 36817 - 11905: 0xBDFC, + 36818 - 11905: 0xDE86, + 36819 - 11905: 0xE5C2, + 36820 - 11905: 0xB7B5, + 36821 - 11905: 0xE5C3, + 36822 - 11905: 0xDE87, + 36823 - 11905: 0xDE88, + 36824 - 11905: 0xBBB9, + 36825 - 11905: 0xD5E2, + 36826 - 11905: 0xDE89, + 36827 - 11905: 0xBDF8, + 36828 - 11905: 0xD4B6, + 36829 - 11905: 0xCEA5, + 36830 - 11905: 0xC1AC, + 36831 - 11905: 0xB3D9, + 36832 - 11905: 0xDE8A, + 36833 - 11905: 0xDE8B, + 36834 - 11905: 0xCCF6, + 36835 - 11905: 0xDE8C, + 36836 - 11905: 0xE5C6, + 36837 - 11905: 0xE5C4, + 36838 - 11905: 0xE5C8, + 36839 - 11905: 0xDE8D, + 36840 - 11905: 0xE5CA, + 36841 - 11905: 0xE5C7, + 36842 - 11905: 0xB5CF, + 36843 - 11905: 0xC6C8, + 36844 - 11905: 0xDE8E, + 36845 - 11905: 0xB5FC, + 36846 - 11905: 0xE5C5, + 36847 - 11905: 0xDE8F, + 36848 - 11905: 0xCAF6, + 36849 - 11905: 0xDE90, + 36850 - 11905: 0xDE91, + 36851 - 11905: 0xE5C9, + 36852 - 11905: 0xDE92, + 36853 - 11905: 0xDE93, + 36854 - 11905: 0xDE94, + 36855 - 11905: 0xC3D4, + 36856 - 11905: 0xB1C5, + 36857 - 11905: 0xBCA3, + 36858 - 11905: 0xDE95, + 36859 - 11905: 0xDE96, + 36860 - 11905: 0xDE97, + 36861 - 11905: 0xD7B7, + 36862 - 11905: 0xDE98, + 36863 - 11905: 0xDE99, + 36864 - 11905: 0xCDCB, + 36865 - 11905: 0xCBCD, + 36866 - 11905: 0xCACA, + 36867 - 11905: 0xCCD3, + 36868 - 11905: 0xE5CC, + 36869 - 11905: 0xE5CB, + 36870 - 11905: 0xC4E6, + 36871 - 11905: 0xDE9A, + 36872 - 11905: 0xDE9B, + 36873 - 11905: 0xD1A1, + 36874 - 11905: 0xD1B7, + 36875 - 11905: 0xE5CD, + 36876 - 11905: 0xDE9C, + 36877 - 11905: 0xE5D0, + 36878 - 11905: 0xDE9D, + 36879 - 11905: 0xCDB8, + 36880 - 11905: 0xD6F0, + 36881 - 11905: 0xE5CF, + 36882 - 11905: 0xB5DD, + 36883 - 11905: 0xDE9E, + 36884 - 11905: 0xCDBE, + 36885 - 11905: 0xDE9F, + 36886 - 11905: 0xE5D1, + 36887 - 11905: 0xB6BA, + 36888 - 11905: 0xDEA0, + 36889 - 11905: 0xDF40, + 36890 - 11905: 0xCDA8, + 36891 - 11905: 0xB9E4, + 36892 - 11905: 0xDF41, + 36893 - 11905: 0xCAC5, + 36894 - 11905: 0xB3D1, + 36895 - 11905: 0xCBD9, + 36896 - 11905: 0xD4EC, + 36897 - 11905: 0xE5D2, + 36898 - 11905: 0xB7EA, + 36899 - 11905: 0xDF42, + 36900 - 11905: 0xDF43, + 36901 - 11905: 0xDF44, + 36902 - 11905: 0xE5CE, + 36903 - 11905: 0xDF45, + 36904 - 11905: 0xDF46, + 36905 - 11905: 0xDF47, + 36906 - 11905: 0xDF48, + 36907 - 11905: 0xDF49, + 36908 - 11905: 0xDF4A, + 36909 - 11905: 0xE5D5, + 36910 - 11905: 0xB4FE, + 36911 - 11905: 0xE5D6, + 36912 - 11905: 0xDF4B, + 36913 - 11905: 0xDF4C, + 36914 - 11905: 0xDF4D, + 36915 - 11905: 0xDF4E, + 36916 - 11905: 0xDF4F, + 36917 - 11905: 0xE5D3, + 36918 - 11905: 0xE5D4, + 36919 - 11905: 0xDF50, + 36920 - 11905: 0xD2DD, + 36921 - 11905: 0xDF51, + 36922 - 11905: 0xDF52, + 36923 - 11905: 0xC2DF, + 36924 - 11905: 0xB1C6, + 36925 - 11905: 0xDF53, + 36926 - 11905: 0xD3E2, + 36927 - 11905: 0xDF54, + 36928 - 11905: 0xDF55, + 36929 - 11905: 0xB6DD, + 36930 - 11905: 0xCBEC, + 36931 - 11905: 0xDF56, + 36932 - 11905: 0xE5D7, + 36933 - 11905: 0xDF57, + 36934 - 11905: 0xDF58, + 36935 - 11905: 0xD3F6, + 36936 - 11905: 0xDF59, + 36937 - 11905: 0xDF5A, + 36938 - 11905: 0xDF5B, + 36939 - 11905: 0xDF5C, + 36940 - 11905: 0xDF5D, + 36941 - 11905: 0xB1E9, + 36942 - 11905: 0xDF5E, + 36943 - 11905: 0xB6F4, + 36944 - 11905: 0xE5DA, + 36945 - 11905: 0xE5D8, + 36946 - 11905: 0xE5D9, + 36947 - 11905: 0xB5C0, + 36948 - 11905: 0xDF5F, + 36949 - 11905: 0xDF60, + 36950 - 11905: 0xDF61, + 36951 - 11905: 0xD2C5, + 36952 - 11905: 0xE5DC, + 36953 - 11905: 0xDF62, + 36954 - 11905: 0xDF63, + 36955 - 11905: 0xE5DE, + 36956 - 11905: 0xDF64, + 36957 - 11905: 0xDF65, + 36958 - 11905: 0xDF66, + 36959 - 11905: 0xDF67, + 36960 - 11905: 0xDF68, + 36961 - 11905: 0xDF69, + 36962 - 11905: 0xE5DD, + 36963 - 11905: 0xC7B2, + 36964 - 11905: 0xDF6A, + 36965 - 11905: 0xD2A3, + 36966 - 11905: 0xDF6B, + 36967 - 11905: 0xDF6C, + 36968 - 11905: 0xE5DB, + 36969 - 11905: 0xDF6D, + 36970 - 11905: 0xDF6E, + 36971 - 11905: 0xDF6F, + 36972 - 11905: 0xDF70, + 36973 - 11905: 0xD4E2, + 36974 - 11905: 0xD5DA, + 36975 - 11905: 0xDF71, + 36976 - 11905: 0xDF72, + 36977 - 11905: 0xDF73, + 36978 - 11905: 0xDF74, + 36979 - 11905: 0xDF75, + 36980 - 11905: 0xE5E0, + 36981 - 11905: 0xD7F1, + 36982 - 11905: 0xDF76, + 36983 - 11905: 0xDF77, + 36984 - 11905: 0xDF78, + 36985 - 11905: 0xDF79, + 36986 - 11905: 0xDF7A, + 36987 - 11905: 0xDF7B, + 36988 - 11905: 0xDF7C, + 36989 - 11905: 0xE5E1, + 36990 - 11905: 0xDF7D, + 36991 - 11905: 0xB1DC, + 36992 - 11905: 0xD1FB, + 36993 - 11905: 0xDF7E, + 36994 - 11905: 0xE5E2, + 36995 - 11905: 0xE5E4, + 36996 - 11905: 0xDF80, + 36997 - 11905: 0xDF81, + 36998 - 11905: 0xDF82, + 36999 - 11905: 0xDF83, + 37000 - 11905: 0xE5E3, + 37001 - 11905: 0xDF84, + 37002 - 11905: 0xDF85, + 37003 - 11905: 0xE5E5, + 37004 - 11905: 0xDF86, + 37005 - 11905: 0xDF87, + 37006 - 11905: 0xDF88, + 37007 - 11905: 0xDF89, + 37008 - 11905: 0xDF8A, + 37009 - 11905: 0xD2D8, + 37010 - 11905: 0xDF8B, + 37011 - 11905: 0xB5CB, + 37012 - 11905: 0xDF8C, + 37013 - 11905: 0xE7DF, + 37014 - 11905: 0xDF8D, + 37015 - 11905: 0xDAF5, + 37016 - 11905: 0xDF8E, + 37017 - 11905: 0xDAF8, + 37018 - 11905: 0xDF8F, + 37019 - 11905: 0xDAF6, + 37020 - 11905: 0xDF90, + 37021 - 11905: 0xDAF7, + 37022 - 11905: 0xDF91, + 37023 - 11905: 0xDF92, + 37024 - 11905: 0xDF93, + 37025 - 11905: 0xDAFA, + 37026 - 11905: 0xD0CF, + 37027 - 11905: 0xC4C7, + 37028 - 11905: 0xDF94, + 37029 - 11905: 0xDF95, + 37030 - 11905: 0xB0EE, + 37031 - 11905: 0xDF96, + 37032 - 11905: 0xDF97, + 37033 - 11905: 0xDF98, + 37034 - 11905: 0xD0B0, + 37035 - 11905: 0xDF99, + 37036 - 11905: 0xDAF9, + 37037 - 11905: 0xDF9A, + 37038 - 11905: 0xD3CA, + 37039 - 11905: 0xBAAA, + 37040 - 11905: 0xDBA2, + 37041 - 11905: 0xC7F1, + 37042 - 11905: 0xDF9B, + 37043 - 11905: 0xDAFC, + 37044 - 11905: 0xDAFB, + 37045 - 11905: 0xC9DB, + 37046 - 11905: 0xDAFD, + 37047 - 11905: 0xDF9C, + 37048 - 11905: 0xDBA1, + 37049 - 11905: 0xD7DE, + 37050 - 11905: 0xDAFE, + 37051 - 11905: 0xC1DA, + 37052 - 11905: 0xDF9D, + 37053 - 11905: 0xDF9E, + 37054 - 11905: 0xDBA5, + 37055 - 11905: 0xDF9F, + 37056 - 11905: 0xDFA0, + 37057 - 11905: 0xD3F4, + 37058 - 11905: 0xE040, + 37059 - 11905: 0xE041, + 37060 - 11905: 0xDBA7, + 37061 - 11905: 0xDBA4, + 37062 - 11905: 0xE042, + 37063 - 11905: 0xDBA8, + 37064 - 11905: 0xE043, + 37065 - 11905: 0xE044, + 37066 - 11905: 0xBDBC, + 37067 - 11905: 0xE045, + 37068 - 11905: 0xE046, + 37069 - 11905: 0xE047, + 37070 - 11905: 0xC0C9, + 37071 - 11905: 0xDBA3, + 37072 - 11905: 0xDBA6, + 37073 - 11905: 0xD6A3, + 37074 - 11905: 0xE048, + 37075 - 11905: 0xDBA9, + 37076 - 11905: 0xE049, + 37077 - 11905: 0xE04A, + 37078 - 11905: 0xE04B, + 37079 - 11905: 0xDBAD, + 37080 - 11905: 0xE04C, + 37081 - 11905: 0xE04D, + 37082 - 11905: 0xE04E, + 37083 - 11905: 0xDBAE, + 37084 - 11905: 0xDBAC, + 37085 - 11905: 0xBAC2, + 37086 - 11905: 0xE04F, + 37087 - 11905: 0xE050, + 37088 - 11905: 0xE051, + 37089 - 11905: 0xBFA4, + 37090 - 11905: 0xDBAB, + 37091 - 11905: 0xE052, + 37092 - 11905: 0xE053, + 37093 - 11905: 0xE054, + 37094 - 11905: 0xDBAA, + 37095 - 11905: 0xD4C7, + 37096 - 11905: 0xB2BF, + 37097 - 11905: 0xE055, + 37098 - 11905: 0xE056, + 37099 - 11905: 0xDBAF, + 37100 - 11905: 0xE057, + 37101 - 11905: 0xB9F9, + 37102 - 11905: 0xE058, + 37103 - 11905: 0xDBB0, + 37104 - 11905: 0xE059, + 37105 - 11905: 0xE05A, + 37106 - 11905: 0xE05B, + 37107 - 11905: 0xE05C, + 37108 - 11905: 0xB3BB, + 37109 - 11905: 0xE05D, + 37110 - 11905: 0xE05E, + 37111 - 11905: 0xE05F, + 37112 - 11905: 0xB5A6, + 37113 - 11905: 0xE060, + 37114 - 11905: 0xE061, + 37115 - 11905: 0xE062, + 37116 - 11905: 0xE063, + 37117 - 11905: 0xB6BC, + 37118 - 11905: 0xDBB1, + 37119 - 11905: 0xE064, + 37120 - 11905: 0xE065, + 37121 - 11905: 0xE066, + 37122 - 11905: 0xB6F5, + 37123 - 11905: 0xE067, + 37124 - 11905: 0xDBB2, + 37125 - 11905: 0xE068, + 37126 - 11905: 0xE069, + 37127 - 11905: 0xE06A, + 37128 - 11905: 0xE06B, + 37129 - 11905: 0xE06C, + 37130 - 11905: 0xE06D, + 37131 - 11905: 0xE06E, + 37132 - 11905: 0xE06F, + 37133 - 11905: 0xE070, + 37134 - 11905: 0xE071, + 37135 - 11905: 0xE072, + 37136 - 11905: 0xE073, + 37137 - 11905: 0xE074, + 37138 - 11905: 0xE075, + 37139 - 11905: 0xE076, + 37140 - 11905: 0xE077, + 37141 - 11905: 0xE078, + 37142 - 11905: 0xE079, + 37143 - 11905: 0xE07A, + 37144 - 11905: 0xE07B, + 37145 - 11905: 0xB1C9, + 37146 - 11905: 0xE07C, + 37147 - 11905: 0xE07D, + 37148 - 11905: 0xE07E, + 37149 - 11905: 0xE080, + 37150 - 11905: 0xDBB4, + 37151 - 11905: 0xE081, + 37152 - 11905: 0xE082, + 37153 - 11905: 0xE083, + 37154 - 11905: 0xDBB3, + 37155 - 11905: 0xDBB5, + 37156 - 11905: 0xE084, + 37157 - 11905: 0xE085, + 37158 - 11905: 0xE086, + 37159 - 11905: 0xE087, + 37160 - 11905: 0xE088, + 37161 - 11905: 0xE089, + 37162 - 11905: 0xE08A, + 37163 - 11905: 0xE08B, + 37164 - 11905: 0xE08C, + 37165 - 11905: 0xE08D, + 37166 - 11905: 0xE08E, + 37167 - 11905: 0xDBB7, + 37168 - 11905: 0xE08F, + 37169 - 11905: 0xDBB6, + 37170 - 11905: 0xE090, + 37171 - 11905: 0xE091, + 37172 - 11905: 0xE092, + 37173 - 11905: 0xE093, + 37174 - 11905: 0xE094, + 37175 - 11905: 0xE095, + 37176 - 11905: 0xE096, + 37177 - 11905: 0xDBB8, + 37178 - 11905: 0xE097, + 37179 - 11905: 0xE098, + 37180 - 11905: 0xE099, + 37181 - 11905: 0xE09A, + 37182 - 11905: 0xE09B, + 37183 - 11905: 0xE09C, + 37184 - 11905: 0xE09D, + 37185 - 11905: 0xE09E, + 37186 - 11905: 0xE09F, + 37187 - 11905: 0xDBB9, + 37188 - 11905: 0xE0A0, + 37189 - 11905: 0xE140, + 37190 - 11905: 0xDBBA, + 37191 - 11905: 0xE141, + 37192 - 11905: 0xE142, + 37193 - 11905: 0xD3CF, + 37194 - 11905: 0xF4FA, + 37195 - 11905: 0xC7F5, + 37196 - 11905: 0xD7C3, + 37197 - 11905: 0xC5E4, + 37198 - 11905: 0xF4FC, + 37199 - 11905: 0xF4FD, + 37200 - 11905: 0xF4FB, + 37201 - 11905: 0xE143, + 37202 - 11905: 0xBEC6, + 37203 - 11905: 0xE144, + 37204 - 11905: 0xE145, + 37205 - 11905: 0xE146, + 37206 - 11905: 0xE147, + 37207 - 11905: 0xD0EF, + 37208 - 11905: 0xE148, + 37209 - 11905: 0xE149, + 37210 - 11905: 0xB7D3, + 37211 - 11905: 0xE14A, + 37212 - 11905: 0xE14B, + 37213 - 11905: 0xD4CD, + 37214 - 11905: 0xCCAA, + 37215 - 11905: 0xE14C, + 37216 - 11905: 0xE14D, + 37217 - 11905: 0xF5A2, + 37218 - 11905: 0xF5A1, + 37219 - 11905: 0xBAA8, + 37220 - 11905: 0xF4FE, + 37221 - 11905: 0xCBD6, + 37222 - 11905: 0xE14E, + 37223 - 11905: 0xE14F, + 37224 - 11905: 0xE150, + 37225 - 11905: 0xF5A4, + 37226 - 11905: 0xC0D2, + 37227 - 11905: 0xE151, + 37228 - 11905: 0xB3EA, + 37229 - 11905: 0xE152, + 37230 - 11905: 0xCDAA, + 37231 - 11905: 0xF5A5, + 37232 - 11905: 0xF5A3, + 37233 - 11905: 0xBDB4, + 37234 - 11905: 0xF5A8, + 37235 - 11905: 0xE153, + 37236 - 11905: 0xF5A9, + 37237 - 11905: 0xBDCD, + 37238 - 11905: 0xC3B8, + 37239 - 11905: 0xBFE1, + 37240 - 11905: 0xCBE1, + 37241 - 11905: 0xF5AA, + 37242 - 11905: 0xE154, + 37243 - 11905: 0xE155, + 37244 - 11905: 0xE156, + 37245 - 11905: 0xF5A6, + 37246 - 11905: 0xF5A7, + 37247 - 11905: 0xC4F0, + 37248 - 11905: 0xE157, + 37249 - 11905: 0xE158, + 37250 - 11905: 0xE159, + 37251 - 11905: 0xE15A, + 37252 - 11905: 0xE15B, + 37253 - 11905: 0xF5AC, + 37254 - 11905: 0xE15C, + 37255 - 11905: 0xB4BC, + 37256 - 11905: 0xE15D, + 37257 - 11905: 0xD7ED, + 37258 - 11905: 0xE15E, + 37259 - 11905: 0xB4D7, + 37260 - 11905: 0xF5AB, + 37261 - 11905: 0xF5AE, + 37262 - 11905: 0xE15F, + 37263 - 11905: 0xE160, + 37264 - 11905: 0xF5AD, + 37265 - 11905: 0xF5AF, + 37266 - 11905: 0xD0D1, + 37267 - 11905: 0xE161, + 37268 - 11905: 0xE162, + 37269 - 11905: 0xE163, + 37270 - 11905: 0xE164, + 37271 - 11905: 0xE165, + 37272 - 11905: 0xE166, + 37273 - 11905: 0xE167, + 37274 - 11905: 0xC3D1, + 37275 - 11905: 0xC8A9, + 37276 - 11905: 0xE168, + 37277 - 11905: 0xE169, + 37278 - 11905: 0xE16A, + 37279 - 11905: 0xE16B, + 37280 - 11905: 0xE16C, + 37281 - 11905: 0xE16D, + 37282 - 11905: 0xF5B0, + 37283 - 11905: 0xF5B1, + 37284 - 11905: 0xE16E, + 37285 - 11905: 0xE16F, + 37286 - 11905: 0xE170, + 37287 - 11905: 0xE171, + 37288 - 11905: 0xE172, + 37289 - 11905: 0xE173, + 37290 - 11905: 0xF5B2, + 37291 - 11905: 0xE174, + 37292 - 11905: 0xE175, + 37293 - 11905: 0xF5B3, + 37294 - 11905: 0xF5B4, + 37295 - 11905: 0xF5B5, + 37296 - 11905: 0xE176, + 37297 - 11905: 0xE177, + 37298 - 11905: 0xE178, + 37299 - 11905: 0xE179, + 37300 - 11905: 0xF5B7, + 37301 - 11905: 0xF5B6, + 37302 - 11905: 0xE17A, + 37303 - 11905: 0xE17B, + 37304 - 11905: 0xE17C, + 37305 - 11905: 0xE17D, + 37306 - 11905: 0xF5B8, + 37307 - 11905: 0xE17E, + 37308 - 11905: 0xE180, + 37309 - 11905: 0xE181, + 37310 - 11905: 0xE182, + 37311 - 11905: 0xE183, + 37312 - 11905: 0xE184, + 37313 - 11905: 0xE185, + 37314 - 11905: 0xE186, + 37315 - 11905: 0xE187, + 37316 - 11905: 0xE188, + 37317 - 11905: 0xE189, + 37318 - 11905: 0xE18A, + 37319 - 11905: 0xB2C9, + 37320 - 11905: 0xE18B, + 37321 - 11905: 0xD3D4, + 37322 - 11905: 0xCACD, + 37323 - 11905: 0xE18C, + 37324 - 11905: 0xC0EF, + 37325 - 11905: 0xD6D8, + 37326 - 11905: 0xD2B0, + 37327 - 11905: 0xC1BF, + 37328 - 11905: 0xE18D, + 37329 - 11905: 0xBDF0, + 37330 - 11905: 0xE18E, + 37331 - 11905: 0xE18F, + 37332 - 11905: 0xE190, + 37333 - 11905: 0xE191, + 37334 - 11905: 0xE192, + 37335 - 11905: 0xE193, + 37336 - 11905: 0xE194, + 37337 - 11905: 0xE195, + 37338 - 11905: 0xE196, + 37339 - 11905: 0xE197, + 37340 - 11905: 0xB8AA, + 37341 - 11905: 0xE198, + 37342 - 11905: 0xE199, + 37343 - 11905: 0xE19A, + 37344 - 11905: 0xE19B, + 37345 - 11905: 0xE19C, + 37346 - 11905: 0xE19D, + 37347 - 11905: 0xE19E, + 37348 - 11905: 0xE19F, + 37349 - 11905: 0xE1A0, + 37350 - 11905: 0xE240, + 37351 - 11905: 0xE241, + 37352 - 11905: 0xE242, + 37353 - 11905: 0xE243, + 37354 - 11905: 0xE244, + 37355 - 11905: 0xE245, + 37356 - 11905: 0xE246, + 37357 - 11905: 0xE247, + 37358 - 11905: 0xE248, + 37359 - 11905: 0xE249, + 37360 - 11905: 0xE24A, + 37361 - 11905: 0xE24B, + 37362 - 11905: 0xE24C, + 37363 - 11905: 0xE24D, + 37364 - 11905: 0xE24E, + 37365 - 11905: 0xE24F, + 37366 - 11905: 0xE250, + 37367 - 11905: 0xE251, + 37368 - 11905: 0xE252, + 37369 - 11905: 0xE253, + 37370 - 11905: 0xE254, + 37371 - 11905: 0xE255, + 37372 - 11905: 0xE256, + 37373 - 11905: 0xE257, + 37374 - 11905: 0xE258, + 37375 - 11905: 0xE259, + 37376 - 11905: 0xE25A, + 37377 - 11905: 0xE25B, + 37378 - 11905: 0xE25C, + 37379 - 11905: 0xE25D, + 37380 - 11905: 0xE25E, + 37381 - 11905: 0xE25F, + 37382 - 11905: 0xE260, + 37383 - 11905: 0xE261, + 37384 - 11905: 0xE262, + 37385 - 11905: 0xE263, + 37386 - 11905: 0xE264, + 37387 - 11905: 0xE265, + 37388 - 11905: 0xE266, + 37389 - 11905: 0xE267, + 37390 - 11905: 0xE268, + 37391 - 11905: 0xE269, + 37392 - 11905: 0xE26A, + 37393 - 11905: 0xE26B, + 37394 - 11905: 0xE26C, + 37395 - 11905: 0xE26D, + 37396 - 11905: 0xE26E, + 37397 - 11905: 0xE26F, + 37398 - 11905: 0xE270, + 37399 - 11905: 0xE271, + 37400 - 11905: 0xE272, + 37401 - 11905: 0xE273, + 37402 - 11905: 0xE274, + 37403 - 11905: 0xE275, + 37404 - 11905: 0xE276, + 37405 - 11905: 0xE277, + 37406 - 11905: 0xE278, + 37407 - 11905: 0xE279, + 37408 - 11905: 0xE27A, + 37409 - 11905: 0xE27B, + 37410 - 11905: 0xE27C, + 37411 - 11905: 0xE27D, + 37412 - 11905: 0xE27E, + 37413 - 11905: 0xE280, + 37414 - 11905: 0xE281, + 37415 - 11905: 0xE282, + 37416 - 11905: 0xE283, + 37417 - 11905: 0xE284, + 37418 - 11905: 0xE285, + 37419 - 11905: 0xE286, + 37420 - 11905: 0xE287, + 37421 - 11905: 0xE288, + 37422 - 11905: 0xE289, + 37423 - 11905: 0xE28A, + 37424 - 11905: 0xE28B, + 37425 - 11905: 0xE28C, + 37426 - 11905: 0xE28D, + 37427 - 11905: 0xE28E, + 37428 - 11905: 0xE28F, + 37429 - 11905: 0xE290, + 37430 - 11905: 0xE291, + 37431 - 11905: 0xE292, + 37432 - 11905: 0xE293, + 37433 - 11905: 0xE294, + 37434 - 11905: 0xE295, + 37435 - 11905: 0xE296, + 37436 - 11905: 0xE297, + 37437 - 11905: 0xE298, + 37438 - 11905: 0xE299, + 37439 - 11905: 0xE29A, + 37440 - 11905: 0xE29B, + 37441 - 11905: 0xE29C, + 37442 - 11905: 0xE29D, + 37443 - 11905: 0xE29E, + 37444 - 11905: 0xE29F, + 37445 - 11905: 0xE2A0, + 37446 - 11905: 0xE340, + 37447 - 11905: 0xE341, + 37448 - 11905: 0xE342, + 37449 - 11905: 0xE343, + 37450 - 11905: 0xE344, + 37451 - 11905: 0xE345, + 37452 - 11905: 0xE346, + 37453 - 11905: 0xE347, + 37454 - 11905: 0xE348, + 37455 - 11905: 0xE349, + 37456 - 11905: 0xE34A, + 37457 - 11905: 0xE34B, + 37458 - 11905: 0xE34C, + 37459 - 11905: 0xE34D, + 37460 - 11905: 0xE34E, + 37461 - 11905: 0xE34F, + 37462 - 11905: 0xE350, + 37463 - 11905: 0xE351, + 37464 - 11905: 0xE352, + 37465 - 11905: 0xE353, + 37466 - 11905: 0xE354, + 37467 - 11905: 0xE355, + 37468 - 11905: 0xE356, + 37469 - 11905: 0xE357, + 37470 - 11905: 0xE358, + 37471 - 11905: 0xE359, + 37472 - 11905: 0xE35A, + 37473 - 11905: 0xE35B, + 37474 - 11905: 0xE35C, + 37475 - 11905: 0xE35D, + 37476 - 11905: 0xE35E, + 37477 - 11905: 0xE35F, + 37478 - 11905: 0xE360, + 37479 - 11905: 0xE361, + 37480 - 11905: 0xE362, + 37481 - 11905: 0xE363, + 37482 - 11905: 0xE364, + 37483 - 11905: 0xE365, + 37484 - 11905: 0xE366, + 37485 - 11905: 0xE367, + 37486 - 11905: 0xE368, + 37487 - 11905: 0xE369, + 37488 - 11905: 0xE36A, + 37489 - 11905: 0xE36B, + 37490 - 11905: 0xE36C, + 37491 - 11905: 0xE36D, + 37492 - 11905: 0xBCF8, + 37493 - 11905: 0xE36E, + 37494 - 11905: 0xE36F, + 37495 - 11905: 0xE370, + 37496 - 11905: 0xE371, + 37497 - 11905: 0xE372, + 37498 - 11905: 0xE373, + 37499 - 11905: 0xE374, + 37500 - 11905: 0xE375, + 37501 - 11905: 0xE376, + 37502 - 11905: 0xE377, + 37503 - 11905: 0xE378, + 37504 - 11905: 0xE379, + 37505 - 11905: 0xE37A, + 37506 - 11905: 0xE37B, + 37507 - 11905: 0xE37C, + 37508 - 11905: 0xE37D, + 37509 - 11905: 0xE37E, + 37510 - 11905: 0xE380, + 37511 - 11905: 0xE381, + 37512 - 11905: 0xE382, + 37513 - 11905: 0xE383, + 37514 - 11905: 0xE384, + 37515 - 11905: 0xE385, + 37516 - 11905: 0xE386, + 37517 - 11905: 0xE387, + 37518 - 11905: 0xF6C6, + 37519 - 11905: 0xE388, + 37520 - 11905: 0xE389, + 37521 - 11905: 0xE38A, + 37522 - 11905: 0xE38B, + 37523 - 11905: 0xE38C, + 37524 - 11905: 0xE38D, + 37525 - 11905: 0xE38E, + 37526 - 11905: 0xE38F, + 37527 - 11905: 0xE390, + 37528 - 11905: 0xE391, + 37529 - 11905: 0xE392, + 37530 - 11905: 0xE393, + 37531 - 11905: 0xE394, + 37532 - 11905: 0xE395, + 37533 - 11905: 0xE396, + 37534 - 11905: 0xE397, + 37535 - 11905: 0xE398, + 37536 - 11905: 0xE399, + 37537 - 11905: 0xE39A, + 37538 - 11905: 0xE39B, + 37539 - 11905: 0xE39C, + 37540 - 11905: 0xE39D, + 37541 - 11905: 0xE39E, + 37542 - 11905: 0xE39F, + 37543 - 11905: 0xE3A0, + 37544 - 11905: 0xE440, + 37545 - 11905: 0xE441, + 37546 - 11905: 0xE442, + 37547 - 11905: 0xE443, + 37548 - 11905: 0xE444, + 37549 - 11905: 0xE445, + 37550 - 11905: 0xF6C7, + 37551 - 11905: 0xE446, + 37552 - 11905: 0xE447, + 37553 - 11905: 0xE448, + 37554 - 11905: 0xE449, + 37555 - 11905: 0xE44A, + 37556 - 11905: 0xE44B, + 37557 - 11905: 0xE44C, + 37558 - 11905: 0xE44D, + 37559 - 11905: 0xE44E, + 37560 - 11905: 0xE44F, + 37561 - 11905: 0xE450, + 37562 - 11905: 0xE451, + 37563 - 11905: 0xE452, + 37564 - 11905: 0xE453, + 37565 - 11905: 0xE454, + 37566 - 11905: 0xE455, + 37567 - 11905: 0xE456, + 37568 - 11905: 0xE457, + 37569 - 11905: 0xE458, + 37570 - 11905: 0xE459, + 37571 - 11905: 0xE45A, + 37572 - 11905: 0xE45B, + 37573 - 11905: 0xE45C, + 37574 - 11905: 0xE45D, + 37575 - 11905: 0xE45E, + 37576 - 11905: 0xF6C8, + 37577 - 11905: 0xE45F, + 37578 - 11905: 0xE460, + 37579 - 11905: 0xE461, + 37580 - 11905: 0xE462, + 37581 - 11905: 0xE463, + 37582 - 11905: 0xE464, + 37583 - 11905: 0xE465, + 37584 - 11905: 0xE466, + 37585 - 11905: 0xE467, + 37586 - 11905: 0xE468, + 37587 - 11905: 0xE469, + 37588 - 11905: 0xE46A, + 37589 - 11905: 0xE46B, + 37590 - 11905: 0xE46C, + 37591 - 11905: 0xE46D, + 37592 - 11905: 0xE46E, + 37593 - 11905: 0xE46F, + 37594 - 11905: 0xE470, + 37595 - 11905: 0xE471, + 37596 - 11905: 0xE472, + 37597 - 11905: 0xE473, + 37598 - 11905: 0xE474, + 37599 - 11905: 0xE475, + 37600 - 11905: 0xE476, + 37601 - 11905: 0xE477, + 37602 - 11905: 0xE478, + 37603 - 11905: 0xE479, + 37604 - 11905: 0xE47A, + 37605 - 11905: 0xE47B, + 37606 - 11905: 0xE47C, + 37607 - 11905: 0xE47D, + 37608 - 11905: 0xE47E, + 37609 - 11905: 0xE480, + 37610 - 11905: 0xE481, + 37611 - 11905: 0xE482, + 37612 - 11905: 0xE483, + 37613 - 11905: 0xE484, + 37614 - 11905: 0xE485, + 37615 - 11905: 0xE486, + 37616 - 11905: 0xE487, + 37617 - 11905: 0xE488, + 37618 - 11905: 0xE489, + 37619 - 11905: 0xE48A, + 37620 - 11905: 0xE48B, + 37621 - 11905: 0xE48C, + 37622 - 11905: 0xE48D, + 37623 - 11905: 0xE48E, + 37624 - 11905: 0xE48F, + 37625 - 11905: 0xE490, + 37626 - 11905: 0xE491, + 37627 - 11905: 0xE492, + 37628 - 11905: 0xE493, + 37629 - 11905: 0xE494, + 37630 - 11905: 0xE495, + 37631 - 11905: 0xE496, + 37632 - 11905: 0xE497, + 37633 - 11905: 0xE498, + 37634 - 11905: 0xE499, + 37635 - 11905: 0xE49A, + 37636 - 11905: 0xE49B, + 37637 - 11905: 0xE49C, + 37638 - 11905: 0xE49D, + 37639 - 11905: 0xE49E, + 37640 - 11905: 0xE49F, + 37641 - 11905: 0xE4A0, + 37642 - 11905: 0xE540, + 37643 - 11905: 0xE541, + 37644 - 11905: 0xE542, + 37645 - 11905: 0xE543, + 37646 - 11905: 0xE544, + 37647 - 11905: 0xE545, + 37648 - 11905: 0xE546, + 37649 - 11905: 0xE547, + 37650 - 11905: 0xE548, + 37651 - 11905: 0xE549, + 37652 - 11905: 0xE54A, + 37653 - 11905: 0xE54B, + 37654 - 11905: 0xE54C, + 37655 - 11905: 0xE54D, + 37656 - 11905: 0xE54E, + 37657 - 11905: 0xE54F, + 37658 - 11905: 0xE550, + 37659 - 11905: 0xE551, + 37660 - 11905: 0xE552, + 37661 - 11905: 0xE553, + 37662 - 11905: 0xE554, + 37663 - 11905: 0xE555, + 37664 - 11905: 0xE556, + 37665 - 11905: 0xE557, + 37666 - 11905: 0xE558, + 37667 - 11905: 0xE559, + 37668 - 11905: 0xE55A, + 37669 - 11905: 0xE55B, + 37670 - 11905: 0xE55C, + 37671 - 11905: 0xE55D, + 37672 - 11905: 0xE55E, + 37673 - 11905: 0xE55F, + 37674 - 11905: 0xE560, + 37675 - 11905: 0xE561, + 37676 - 11905: 0xE562, + 37677 - 11905: 0xE563, + 37678 - 11905: 0xE564, + 37679 - 11905: 0xE565, + 37680 - 11905: 0xE566, + 37681 - 11905: 0xE567, + 37682 - 11905: 0xE568, + 37683 - 11905: 0xE569, + 37684 - 11905: 0xE56A, + 37685 - 11905: 0xE56B, + 37686 - 11905: 0xE56C, + 37687 - 11905: 0xE56D, + 37688 - 11905: 0xE56E, + 37689 - 11905: 0xE56F, + 37690 - 11905: 0xE570, + 37691 - 11905: 0xE571, + 37692 - 11905: 0xE572, + 37693 - 11905: 0xE573, + 37694 - 11905: 0xF6C9, + 37695 - 11905: 0xE574, + 37696 - 11905: 0xE575, + 37697 - 11905: 0xE576, + 37698 - 11905: 0xE577, + 37699 - 11905: 0xE578, + 37700 - 11905: 0xE579, + 37701 - 11905: 0xE57A, + 37702 - 11905: 0xE57B, + 37703 - 11905: 0xE57C, + 37704 - 11905: 0xE57D, + 37705 - 11905: 0xE57E, + 37706 - 11905: 0xE580, + 37707 - 11905: 0xE581, + 37708 - 11905: 0xE582, + 37709 - 11905: 0xE583, + 37710 - 11905: 0xE584, + 37711 - 11905: 0xE585, + 37712 - 11905: 0xE586, + 37713 - 11905: 0xE587, + 37714 - 11905: 0xE588, + 37715 - 11905: 0xE589, + 37716 - 11905: 0xE58A, + 37717 - 11905: 0xE58B, + 37718 - 11905: 0xE58C, + 37719 - 11905: 0xE58D, + 37720 - 11905: 0xE58E, + 37721 - 11905: 0xE58F, + 37722 - 11905: 0xE590, + 37723 - 11905: 0xE591, + 37724 - 11905: 0xE592, + 37725 - 11905: 0xE593, + 37726 - 11905: 0xE594, + 37727 - 11905: 0xE595, + 37728 - 11905: 0xE596, + 37729 - 11905: 0xE597, + 37730 - 11905: 0xE598, + 37731 - 11905: 0xE599, + 37732 - 11905: 0xE59A, + 37733 - 11905: 0xE59B, + 37734 - 11905: 0xE59C, + 37735 - 11905: 0xE59D, + 37736 - 11905: 0xE59E, + 37737 - 11905: 0xE59F, + 37738 - 11905: 0xF6CA, + 37739 - 11905: 0xE5A0, + 37740 - 11905: 0xE640, + 37741 - 11905: 0xE641, + 37742 - 11905: 0xE642, + 37743 - 11905: 0xE643, + 37744 - 11905: 0xE644, + 37745 - 11905: 0xE645, + 37746 - 11905: 0xE646, + 37747 - 11905: 0xE647, + 37748 - 11905: 0xE648, + 37749 - 11905: 0xE649, + 37750 - 11905: 0xE64A, + 37751 - 11905: 0xE64B, + 37752 - 11905: 0xE64C, + 37753 - 11905: 0xE64D, + 37754 - 11905: 0xE64E, + 37755 - 11905: 0xE64F, + 37756 - 11905: 0xE650, + 37757 - 11905: 0xE651, + 37758 - 11905: 0xE652, + 37759 - 11905: 0xE653, + 37760 - 11905: 0xE654, + 37761 - 11905: 0xE655, + 37762 - 11905: 0xE656, + 37763 - 11905: 0xE657, + 37764 - 11905: 0xE658, + 37765 - 11905: 0xE659, + 37766 - 11905: 0xE65A, + 37767 - 11905: 0xE65B, + 37768 - 11905: 0xE65C, + 37769 - 11905: 0xE65D, + 37770 - 11905: 0xE65E, + 37771 - 11905: 0xE65F, + 37772 - 11905: 0xE660, + 37773 - 11905: 0xE661, + 37774 - 11905: 0xE662, + 37775 - 11905: 0xF6CC, + 37776 - 11905: 0xE663, + 37777 - 11905: 0xE664, + 37778 - 11905: 0xE665, + 37779 - 11905: 0xE666, + 37780 - 11905: 0xE667, + 37781 - 11905: 0xE668, + 37782 - 11905: 0xE669, + 37783 - 11905: 0xE66A, + 37784 - 11905: 0xE66B, + 37785 - 11905: 0xE66C, + 37786 - 11905: 0xE66D, + 37787 - 11905: 0xE66E, + 37788 - 11905: 0xE66F, + 37789 - 11905: 0xE670, + 37790 - 11905: 0xE671, + 37791 - 11905: 0xE672, + 37792 - 11905: 0xE673, + 37793 - 11905: 0xE674, + 37794 - 11905: 0xE675, + 37795 - 11905: 0xE676, + 37796 - 11905: 0xE677, + 37797 - 11905: 0xE678, + 37798 - 11905: 0xE679, + 37799 - 11905: 0xE67A, + 37800 - 11905: 0xE67B, + 37801 - 11905: 0xE67C, + 37802 - 11905: 0xE67D, + 37803 - 11905: 0xE67E, + 37804 - 11905: 0xE680, + 37805 - 11905: 0xE681, + 37806 - 11905: 0xE682, + 37807 - 11905: 0xE683, + 37808 - 11905: 0xE684, + 37809 - 11905: 0xE685, + 37810 - 11905: 0xE686, + 37811 - 11905: 0xE687, + 37812 - 11905: 0xE688, + 37813 - 11905: 0xE689, + 37814 - 11905: 0xE68A, + 37815 - 11905: 0xE68B, + 37816 - 11905: 0xE68C, + 37817 - 11905: 0xE68D, + 37818 - 11905: 0xE68E, + 37819 - 11905: 0xE68F, + 37820 - 11905: 0xE690, + 37821 - 11905: 0xE691, + 37822 - 11905: 0xE692, + 37823 - 11905: 0xE693, + 37824 - 11905: 0xE694, + 37825 - 11905: 0xE695, + 37826 - 11905: 0xE696, + 37827 - 11905: 0xE697, + 37828 - 11905: 0xE698, + 37829 - 11905: 0xE699, + 37830 - 11905: 0xE69A, + 37831 - 11905: 0xE69B, + 37832 - 11905: 0xE69C, + 37833 - 11905: 0xE69D, + 37834 - 11905: 0xF6CB, + 37835 - 11905: 0xE69E, + 37836 - 11905: 0xE69F, + 37837 - 11905: 0xE6A0, + 37838 - 11905: 0xE740, + 37839 - 11905: 0xE741, + 37840 - 11905: 0xE742, + 37841 - 11905: 0xE743, + 37842 - 11905: 0xE744, + 37843 - 11905: 0xE745, + 37844 - 11905: 0xE746, + 37845 - 11905: 0xE747, + 37846 - 11905: 0xF7E9, + 37847 - 11905: 0xE748, + 37848 - 11905: 0xE749, + 37849 - 11905: 0xE74A, + 37850 - 11905: 0xE74B, + 37851 - 11905: 0xE74C, + 37852 - 11905: 0xE74D, + 37853 - 11905: 0xE74E, + 37854 - 11905: 0xE74F, + 37855 - 11905: 0xE750, + 37856 - 11905: 0xE751, + 37857 - 11905: 0xE752, + 37858 - 11905: 0xE753, + 37859 - 11905: 0xE754, + 37860 - 11905: 0xE755, + 37861 - 11905: 0xE756, + 37862 - 11905: 0xE757, + 37863 - 11905: 0xE758, + 37864 - 11905: 0xE759, + 37865 - 11905: 0xE75A, + 37866 - 11905: 0xE75B, + 37867 - 11905: 0xE75C, + 37868 - 11905: 0xE75D, + 37869 - 11905: 0xE75E, + 37870 - 11905: 0xE75F, + 37871 - 11905: 0xE760, + 37872 - 11905: 0xE761, + 37873 - 11905: 0xE762, + 37874 - 11905: 0xE763, + 37875 - 11905: 0xE764, + 37876 - 11905: 0xE765, + 37877 - 11905: 0xE766, + 37878 - 11905: 0xE767, + 37879 - 11905: 0xE768, + 37880 - 11905: 0xE769, + 37881 - 11905: 0xE76A, + 37882 - 11905: 0xE76B, + 37883 - 11905: 0xE76C, + 37884 - 11905: 0xE76D, + 37885 - 11905: 0xE76E, + 37886 - 11905: 0xE76F, + 37887 - 11905: 0xE770, + 37888 - 11905: 0xE771, + 37889 - 11905: 0xE772, + 37890 - 11905: 0xE773, + 37891 - 11905: 0xE774, + 37892 - 11905: 0xE775, + 37893 - 11905: 0xE776, + 37894 - 11905: 0xE777, + 37895 - 11905: 0xE778, + 37896 - 11905: 0xE779, + 37897 - 11905: 0xE77A, + 37898 - 11905: 0xE77B, + 37899 - 11905: 0xE77C, + 37900 - 11905: 0xE77D, + 37901 - 11905: 0xE77E, + 37902 - 11905: 0xE780, + 37903 - 11905: 0xE781, + 37904 - 11905: 0xE782, + 37905 - 11905: 0xE783, + 37906 - 11905: 0xE784, + 37907 - 11905: 0xE785, + 37908 - 11905: 0xE786, + 37909 - 11905: 0xE787, + 37910 - 11905: 0xE788, + 37911 - 11905: 0xE789, + 37912 - 11905: 0xE78A, + 37913 - 11905: 0xE78B, + 37914 - 11905: 0xE78C, + 37915 - 11905: 0xE78D, + 37916 - 11905: 0xE78E, + 37917 - 11905: 0xE78F, + 37918 - 11905: 0xE790, + 37919 - 11905: 0xE791, + 37920 - 11905: 0xE792, + 37921 - 11905: 0xE793, + 37922 - 11905: 0xE794, + 37923 - 11905: 0xE795, + 37924 - 11905: 0xE796, + 37925 - 11905: 0xE797, + 37926 - 11905: 0xE798, + 37927 - 11905: 0xE799, + 37928 - 11905: 0xE79A, + 37929 - 11905: 0xE79B, + 37930 - 11905: 0xE79C, + 37931 - 11905: 0xE79D, + 37932 - 11905: 0xE79E, + 37933 - 11905: 0xE79F, + 37934 - 11905: 0xE7A0, + 37935 - 11905: 0xE840, + 37936 - 11905: 0xE841, + 37937 - 11905: 0xE842, + 37938 - 11905: 0xE843, + 37939 - 11905: 0xE844, + 37940 - 11905: 0xE845, + 37941 - 11905: 0xE846, + 37942 - 11905: 0xE847, + 37943 - 11905: 0xE848, + 37944 - 11905: 0xE849, + 37945 - 11905: 0xE84A, + 37946 - 11905: 0xE84B, + 37947 - 11905: 0xE84C, + 37948 - 11905: 0xE84D, + 37949 - 11905: 0xE84E, + 37950 - 11905: 0xF6CD, + 37951 - 11905: 0xE84F, + 37952 - 11905: 0xE850, + 37953 - 11905: 0xE851, + 37954 - 11905: 0xE852, + 37955 - 11905: 0xE853, + 37956 - 11905: 0xE854, + 37957 - 11905: 0xE855, + 37958 - 11905: 0xE856, + 37959 - 11905: 0xE857, + 37960 - 11905: 0xE858, + 37961 - 11905: 0xE859, + 37962 - 11905: 0xE85A, + 37963 - 11905: 0xE85B, + 37964 - 11905: 0xE85C, + 37965 - 11905: 0xE85D, + 37966 - 11905: 0xE85E, + 37967 - 11905: 0xE85F, + 37968 - 11905: 0xE860, + 37969 - 11905: 0xE861, + 37970 - 11905: 0xE862, + 37971 - 11905: 0xE863, + 37972 - 11905: 0xE864, + 37973 - 11905: 0xE865, + 37974 - 11905: 0xE866, + 37975 - 11905: 0xE867, + 37976 - 11905: 0xE868, + 37977 - 11905: 0xE869, + 37978 - 11905: 0xE86A, + 37979 - 11905: 0xE86B, + 37980 - 11905: 0xE86C, + 37981 - 11905: 0xE86D, + 37982 - 11905: 0xE86E, + 37983 - 11905: 0xE86F, + 37984 - 11905: 0xE870, + 37985 - 11905: 0xE871, + 37986 - 11905: 0xE872, + 37987 - 11905: 0xE873, + 37988 - 11905: 0xE874, + 37989 - 11905: 0xE875, + 37990 - 11905: 0xE876, + 37991 - 11905: 0xE877, + 37992 - 11905: 0xE878, + 37993 - 11905: 0xE879, + 37994 - 11905: 0xE87A, + 37995 - 11905: 0xF6CE, + 37996 - 11905: 0xE87B, + 37997 - 11905: 0xE87C, + 37998 - 11905: 0xE87D, + 37999 - 11905: 0xE87E, + 38000 - 11905: 0xE880, + 38001 - 11905: 0xE881, + 38002 - 11905: 0xE882, + 38003 - 11905: 0xE883, + 38004 - 11905: 0xE884, + 38005 - 11905: 0xE885, + 38006 - 11905: 0xE886, + 38007 - 11905: 0xE887, + 38008 - 11905: 0xE888, + 38009 - 11905: 0xE889, + 38010 - 11905: 0xE88A, + 38011 - 11905: 0xE88B, + 38012 - 11905: 0xE88C, + 38013 - 11905: 0xE88D, + 38014 - 11905: 0xE88E, + 38015 - 11905: 0xE88F, + 38016 - 11905: 0xE890, + 38017 - 11905: 0xE891, + 38018 - 11905: 0xE892, + 38019 - 11905: 0xE893, + 38020 - 11905: 0xE894, + 38021 - 11905: 0xEEC4, + 38022 - 11905: 0xEEC5, + 38023 - 11905: 0xEEC6, + 38024 - 11905: 0xD5EB, + 38025 - 11905: 0xB6A4, + 38026 - 11905: 0xEEC8, + 38027 - 11905: 0xEEC7, + 38028 - 11905: 0xEEC9, + 38029 - 11905: 0xEECA, + 38030 - 11905: 0xC7A5, + 38031 - 11905: 0xEECB, + 38032 - 11905: 0xEECC, + 38033 - 11905: 0xE895, + 38034 - 11905: 0xB7B0, + 38035 - 11905: 0xB5F6, + 38036 - 11905: 0xEECD, + 38037 - 11905: 0xEECF, + 38038 - 11905: 0xE896, + 38039 - 11905: 0xEECE, + 38040 - 11905: 0xE897, + 38041 - 11905: 0xB8C6, + 38042 - 11905: 0xEED0, + 38043 - 11905: 0xEED1, + 38044 - 11905: 0xEED2, + 38045 - 11905: 0xB6DB, + 38046 - 11905: 0xB3AE, + 38047 - 11905: 0xD6D3, + 38048 - 11905: 0xC4C6, + 38049 - 11905: 0xB1B5, + 38050 - 11905: 0xB8D6, + 38051 - 11905: 0xEED3, + 38052 - 11905: 0xEED4, + 38053 - 11905: 0xD4BF, + 38054 - 11905: 0xC7D5, + 38055 - 11905: 0xBEFB, + 38056 - 11905: 0xCED9, + 38057 - 11905: 0xB9B3, + 38058 - 11905: 0xEED6, + 38059 - 11905: 0xEED5, + 38060 - 11905: 0xEED8, + 38061 - 11905: 0xEED7, + 38062 - 11905: 0xC5A5, + 38063 - 11905: 0xEED9, + 38064 - 11905: 0xEEDA, + 38065 - 11905: 0xC7AE, + 38066 - 11905: 0xEEDB, + 38067 - 11905: 0xC7AF, + 38068 - 11905: 0xEEDC, + 38069 - 11905: 0xB2A7, + 38070 - 11905: 0xEEDD, + 38071 - 11905: 0xEEDE, + 38072 - 11905: 0xEEDF, + 38073 - 11905: 0xEEE0, + 38074 - 11905: 0xEEE1, + 38075 - 11905: 0xD7EA, + 38076 - 11905: 0xEEE2, + 38077 - 11905: 0xEEE3, + 38078 - 11905: 0xBCD8, + 38079 - 11905: 0xEEE4, + 38080 - 11905: 0xD3CB, + 38081 - 11905: 0xCCFA, + 38082 - 11905: 0xB2AC, + 38083 - 11905: 0xC1E5, + 38084 - 11905: 0xEEE5, + 38085 - 11905: 0xC7A6, + 38086 - 11905: 0xC3AD, + 38087 - 11905: 0xE898, + 38088 - 11905: 0xEEE6, + 38089 - 11905: 0xEEE7, + 38090 - 11905: 0xEEE8, + 38091 - 11905: 0xEEE9, + 38092 - 11905: 0xEEEA, + 38093 - 11905: 0xEEEB, + 38094 - 11905: 0xEEEC, + 38095 - 11905: 0xE899, + 38096 - 11905: 0xEEED, + 38097 - 11905: 0xEEEE, + 38098 - 11905: 0xEEEF, + 38099 - 11905: 0xE89A, + 38100 - 11905: 0xE89B, + 38101 - 11905: 0xEEF0, + 38102 - 11905: 0xEEF1, + 38103 - 11905: 0xEEF2, + 38104 - 11905: 0xEEF4, + 38105 - 11905: 0xEEF3, + 38106 - 11905: 0xE89C, + 38107 - 11905: 0xEEF5, + 38108 - 11905: 0xCDAD, + 38109 - 11905: 0xC2C1, + 38110 - 11905: 0xEEF6, + 38111 - 11905: 0xEEF7, + 38112 - 11905: 0xEEF8, + 38113 - 11905: 0xD5A1, + 38114 - 11905: 0xEEF9, + 38115 - 11905: 0xCFB3, + 38116 - 11905: 0xEEFA, + 38117 - 11905: 0xEEFB, + 38118 - 11905: 0xE89D, + 38119 - 11905: 0xEEFC, + 38120 - 11905: 0xEEFD, + 38121 - 11905: 0xEFA1, + 38122 - 11905: 0xEEFE, + 38123 - 11905: 0xEFA2, + 38124 - 11905: 0xB8F5, + 38125 - 11905: 0xC3FA, + 38126 - 11905: 0xEFA3, + 38127 - 11905: 0xEFA4, + 38128 - 11905: 0xBDC2, + 38129 - 11905: 0xD2BF, + 38130 - 11905: 0xB2F9, + 38131 - 11905: 0xEFA5, + 38132 - 11905: 0xEFA6, + 38133 - 11905: 0xEFA7, + 38134 - 11905: 0xD2F8, + 38135 - 11905: 0xEFA8, + 38136 - 11905: 0xD6FD, + 38137 - 11905: 0xEFA9, + 38138 - 11905: 0xC6CC, + 38139 - 11905: 0xE89E, + 38140 - 11905: 0xEFAA, + 38141 - 11905: 0xEFAB, + 38142 - 11905: 0xC1B4, + 38143 - 11905: 0xEFAC, + 38144 - 11905: 0xCFFA, + 38145 - 11905: 0xCBF8, + 38146 - 11905: 0xEFAE, + 38147 - 11905: 0xEFAD, + 38148 - 11905: 0xB3FA, + 38149 - 11905: 0xB9F8, + 38150 - 11905: 0xEFAF, + 38151 - 11905: 0xEFB0, + 38152 - 11905: 0xD0E2, + 38153 - 11905: 0xEFB1, + 38154 - 11905: 0xEFB2, + 38155 - 11905: 0xB7E6, + 38156 - 11905: 0xD0BF, + 38157 - 11905: 0xEFB3, + 38158 - 11905: 0xEFB4, + 38159 - 11905: 0xEFB5, + 38160 - 11905: 0xC8F1, + 38161 - 11905: 0xCCE0, + 38162 - 11905: 0xEFB6, + 38163 - 11905: 0xEFB7, + 38164 - 11905: 0xEFB8, + 38165 - 11905: 0xEFB9, + 38166 - 11905: 0xEFBA, + 38167 - 11905: 0xD5E0, + 38168 - 11905: 0xEFBB, + 38169 - 11905: 0xB4ED, + 38170 - 11905: 0xC3AA, + 38171 - 11905: 0xEFBC, + 38172 - 11905: 0xE89F, + 38173 - 11905: 0xEFBD, + 38174 - 11905: 0xEFBE, + 38175 - 11905: 0xEFBF, + 38176 - 11905: 0xE8A0, + 38177 - 11905: 0xCEFD, + 38178 - 11905: 0xEFC0, + 38179 - 11905: 0xC2E0, + 38180 - 11905: 0xB4B8, + 38181 - 11905: 0xD7B6, + 38182 - 11905: 0xBDF5, + 38183 - 11905: 0xE940, + 38184 - 11905: 0xCFC7, + 38185 - 11905: 0xEFC3, + 38186 - 11905: 0xEFC1, + 38187 - 11905: 0xEFC2, + 38188 - 11905: 0xEFC4, + 38189 - 11905: 0xB6A7, + 38190 - 11905: 0xBCFC, + 38191 - 11905: 0xBEE2, + 38192 - 11905: 0xC3CC, + 38193 - 11905: 0xEFC5, + 38194 - 11905: 0xEFC6, + 38195 - 11905: 0xE941, + 38196 - 11905: 0xEFC7, + 38197 - 11905: 0xEFCF, + 38198 - 11905: 0xEFC8, + 38199 - 11905: 0xEFC9, + 38200 - 11905: 0xEFCA, + 38201 - 11905: 0xC7C2, + 38202 - 11905: 0xEFF1, + 38203 - 11905: 0xB6CD, + 38204 - 11905: 0xEFCB, + 38205 - 11905: 0xE942, + 38206 - 11905: 0xEFCC, + 38207 - 11905: 0xEFCD, + 38208 - 11905: 0xB6C6, + 38209 - 11905: 0xC3BE, + 38210 - 11905: 0xEFCE, + 38211 - 11905: 0xE943, + 38212 - 11905: 0xEFD0, + 38213 - 11905: 0xEFD1, + 38214 - 11905: 0xEFD2, + 38215 - 11905: 0xD5F2, + 38216 - 11905: 0xE944, + 38217 - 11905: 0xEFD3, + 38218 - 11905: 0xC4F7, + 38219 - 11905: 0xE945, + 38220 - 11905: 0xEFD4, + 38221 - 11905: 0xC4F8, + 38222 - 11905: 0xEFD5, + 38223 - 11905: 0xEFD6, + 38224 - 11905: 0xB8E4, + 38225 - 11905: 0xB0F7, + 38226 - 11905: 0xEFD7, + 38227 - 11905: 0xEFD8, + 38228 - 11905: 0xEFD9, + 38229 - 11905: 0xE946, + 38230 - 11905: 0xEFDA, + 38231 - 11905: 0xEFDB, + 38232 - 11905: 0xEFDC, + 38233 - 11905: 0xEFDD, + 38234 - 11905: 0xE947, + 38235 - 11905: 0xEFDE, + 38236 - 11905: 0xBEB5, + 38237 - 11905: 0xEFE1, + 38238 - 11905: 0xEFDF, + 38239 - 11905: 0xEFE0, + 38240 - 11905: 0xE948, + 38241 - 11905: 0xEFE2, + 38242 - 11905: 0xEFE3, + 38243 - 11905: 0xC1CD, + 38244 - 11905: 0xEFE4, + 38245 - 11905: 0xEFE5, + 38246 - 11905: 0xEFE6, + 38247 - 11905: 0xEFE7, + 38248 - 11905: 0xEFE8, + 38249 - 11905: 0xEFE9, + 38250 - 11905: 0xEFEA, + 38251 - 11905: 0xEFEB, + 38252 - 11905: 0xEFEC, + 38253 - 11905: 0xC0D8, + 38254 - 11905: 0xE949, + 38255 - 11905: 0xEFED, + 38256 - 11905: 0xC1AD, + 38257 - 11905: 0xEFEE, + 38258 - 11905: 0xEFEF, + 38259 - 11905: 0xEFF0, + 38260 - 11905: 0xE94A, + 38261 - 11905: 0xE94B, + 38262 - 11905: 0xCFE2, + 38263 - 11905: 0xE94C, + 38264 - 11905: 0xE94D, + 38265 - 11905: 0xE94E, + 38266 - 11905: 0xE94F, + 38267 - 11905: 0xE950, + 38268 - 11905: 0xE951, + 38269 - 11905: 0xE952, + 38270 - 11905: 0xE953, + 38271 - 11905: 0xB3A4, + 38272 - 11905: 0xE954, + 38273 - 11905: 0xE955, + 38274 - 11905: 0xE956, + 38275 - 11905: 0xE957, + 38276 - 11905: 0xE958, + 38277 - 11905: 0xE959, + 38278 - 11905: 0xE95A, + 38279 - 11905: 0xE95B, + 38280 - 11905: 0xE95C, + 38281 - 11905: 0xE95D, + 38282 - 11905: 0xE95E, + 38283 - 11905: 0xE95F, + 38284 - 11905: 0xE960, + 38285 - 11905: 0xE961, + 38286 - 11905: 0xE962, + 38287 - 11905: 0xE963, + 38288 - 11905: 0xE964, + 38289 - 11905: 0xE965, + 38290 - 11905: 0xE966, + 38291 - 11905: 0xE967, + 38292 - 11905: 0xE968, + 38293 - 11905: 0xE969, + 38294 - 11905: 0xE96A, + 38295 - 11905: 0xE96B, + 38296 - 11905: 0xE96C, + 38297 - 11905: 0xE96D, + 38298 - 11905: 0xE96E, + 38299 - 11905: 0xE96F, + 38300 - 11905: 0xE970, + 38301 - 11905: 0xE971, + 38302 - 11905: 0xE972, + 38303 - 11905: 0xE973, + 38304 - 11905: 0xE974, + 38305 - 11905: 0xE975, + 38306 - 11905: 0xE976, + 38307 - 11905: 0xE977, + 38308 - 11905: 0xE978, + 38309 - 11905: 0xE979, + 38310 - 11905: 0xE97A, + 38311 - 11905: 0xE97B, + 38312 - 11905: 0xE97C, + 38313 - 11905: 0xE97D, + 38314 - 11905: 0xE97E, + 38315 - 11905: 0xE980, + 38316 - 11905: 0xE981, + 38317 - 11905: 0xE982, + 38318 - 11905: 0xE983, + 38319 - 11905: 0xE984, + 38320 - 11905: 0xE985, + 38321 - 11905: 0xE986, + 38322 - 11905: 0xE987, + 38323 - 11905: 0xE988, + 38324 - 11905: 0xE989, + 38325 - 11905: 0xE98A, + 38326 - 11905: 0xE98B, + 38327 - 11905: 0xE98C, + 38328 - 11905: 0xE98D, + 38329 - 11905: 0xE98E, + 38330 - 11905: 0xE98F, + 38331 - 11905: 0xE990, + 38332 - 11905: 0xE991, + 38333 - 11905: 0xE992, + 38334 - 11905: 0xE993, + 38335 - 11905: 0xE994, + 38336 - 11905: 0xE995, + 38337 - 11905: 0xE996, + 38338 - 11905: 0xE997, + 38339 - 11905: 0xE998, + 38340 - 11905: 0xE999, + 38341 - 11905: 0xE99A, + 38342 - 11905: 0xE99B, + 38343 - 11905: 0xE99C, + 38344 - 11905: 0xE99D, + 38345 - 11905: 0xE99E, + 38346 - 11905: 0xE99F, + 38347 - 11905: 0xE9A0, + 38348 - 11905: 0xEA40, + 38349 - 11905: 0xEA41, + 38350 - 11905: 0xEA42, + 38351 - 11905: 0xEA43, + 38352 - 11905: 0xEA44, + 38353 - 11905: 0xEA45, + 38354 - 11905: 0xEA46, + 38355 - 11905: 0xEA47, + 38356 - 11905: 0xEA48, + 38357 - 11905: 0xEA49, + 38358 - 11905: 0xEA4A, + 38359 - 11905: 0xEA4B, + 38360 - 11905: 0xEA4C, + 38361 - 11905: 0xEA4D, + 38362 - 11905: 0xEA4E, + 38363 - 11905: 0xEA4F, + 38364 - 11905: 0xEA50, + 38365 - 11905: 0xEA51, + 38366 - 11905: 0xEA52, + 38367 - 11905: 0xEA53, + 38368 - 11905: 0xEA54, + 38369 - 11905: 0xEA55, + 38370 - 11905: 0xEA56, + 38371 - 11905: 0xEA57, + 38372 - 11905: 0xEA58, + 38373 - 11905: 0xEA59, + 38374 - 11905: 0xEA5A, + 38375 - 11905: 0xEA5B, + 38376 - 11905: 0xC3C5, + 38377 - 11905: 0xE3C5, + 38378 - 11905: 0xC9C1, + 38379 - 11905: 0xE3C6, + 38380 - 11905: 0xEA5C, + 38381 - 11905: 0xB1D5, + 38382 - 11905: 0xCECA, + 38383 - 11905: 0xB4B3, + 38384 - 11905: 0xC8F2, + 38385 - 11905: 0xE3C7, + 38386 - 11905: 0xCFD0, + 38387 - 11905: 0xE3C8, + 38388 - 11905: 0xBCE4, + 38389 - 11905: 0xE3C9, + 38390 - 11905: 0xE3CA, + 38391 - 11905: 0xC3C6, + 38392 - 11905: 0xD5A2, + 38393 - 11905: 0xC4D6, + 38394 - 11905: 0xB9EB, + 38395 - 11905: 0xCEC5, + 38396 - 11905: 0xE3CB, + 38397 - 11905: 0xC3F6, + 38398 - 11905: 0xE3CC, + 38399 - 11905: 0xEA5D, + 38400 - 11905: 0xB7A7, + 38401 - 11905: 0xB8F3, + 38402 - 11905: 0xBAD2, + 38403 - 11905: 0xE3CD, + 38404 - 11905: 0xE3CE, + 38405 - 11905: 0xD4C4, + 38406 - 11905: 0xE3CF, + 38407 - 11905: 0xEA5E, + 38408 - 11905: 0xE3D0, + 38409 - 11905: 0xD1CB, + 38410 - 11905: 0xE3D1, + 38411 - 11905: 0xE3D2, + 38412 - 11905: 0xE3D3, + 38413 - 11905: 0xE3D4, + 38414 - 11905: 0xD1D6, + 38415 - 11905: 0xE3D5, + 38416 - 11905: 0xB2FB, + 38417 - 11905: 0xC0BB, + 38418 - 11905: 0xE3D6, + 38419 - 11905: 0xEA5F, + 38420 - 11905: 0xC0AB, + 38421 - 11905: 0xE3D7, + 38422 - 11905: 0xE3D8, + 38423 - 11905: 0xE3D9, + 38424 - 11905: 0xEA60, + 38425 - 11905: 0xE3DA, + 38426 - 11905: 0xE3DB, + 38427 - 11905: 0xEA61, + 38428 - 11905: 0xB8B7, + 38429 - 11905: 0xDAE2, + 38430 - 11905: 0xEA62, + 38431 - 11905: 0xB6D3, + 38432 - 11905: 0xEA63, + 38433 - 11905: 0xDAE4, + 38434 - 11905: 0xDAE3, + 38435 - 11905: 0xEA64, + 38436 - 11905: 0xEA65, + 38437 - 11905: 0xEA66, + 38438 - 11905: 0xEA67, + 38439 - 11905: 0xEA68, + 38440 - 11905: 0xEA69, + 38441 - 11905: 0xEA6A, + 38442 - 11905: 0xDAE6, + 38443 - 11905: 0xEA6B, + 38444 - 11905: 0xEA6C, + 38445 - 11905: 0xEA6D, + 38446 - 11905: 0xC8EE, + 38447 - 11905: 0xEA6E, + 38448 - 11905: 0xEA6F, + 38449 - 11905: 0xDAE5, + 38450 - 11905: 0xB7C0, + 38451 - 11905: 0xD1F4, + 38452 - 11905: 0xD2F5, + 38453 - 11905: 0xD5F3, + 38454 - 11905: 0xBDD7, + 38455 - 11905: 0xEA70, + 38456 - 11905: 0xEA71, + 38457 - 11905: 0xEA72, + 38458 - 11905: 0xEA73, + 38459 - 11905: 0xD7E8, + 38460 - 11905: 0xDAE8, + 38461 - 11905: 0xDAE7, + 38462 - 11905: 0xEA74, + 38463 - 11905: 0xB0A2, + 38464 - 11905: 0xCDD3, + 38465 - 11905: 0xEA75, + 38466 - 11905: 0xDAE9, + 38467 - 11905: 0xEA76, + 38468 - 11905: 0xB8BD, + 38469 - 11905: 0xBCCA, + 38470 - 11905: 0xC2BD, + 38471 - 11905: 0xC2A4, + 38472 - 11905: 0xB3C2, + 38473 - 11905: 0xDAEA, + 38474 - 11905: 0xEA77, + 38475 - 11905: 0xC2AA, + 38476 - 11905: 0xC4B0, + 38477 - 11905: 0xBDB5, + 38478 - 11905: 0xEA78, + 38479 - 11905: 0xEA79, + 38480 - 11905: 0xCFDE, + 38481 - 11905: 0xEA7A, + 38482 - 11905: 0xEA7B, + 38483 - 11905: 0xEA7C, + 38484 - 11905: 0xDAEB, + 38485 - 11905: 0xC9C2, + 38486 - 11905: 0xEA7D, + 38487 - 11905: 0xEA7E, + 38488 - 11905: 0xEA80, + 38489 - 11905: 0xEA81, + 38490 - 11905: 0xEA82, + 38491 - 11905: 0xB1DD, + 38492 - 11905: 0xEA83, + 38493 - 11905: 0xEA84, + 38494 - 11905: 0xEA85, + 38495 - 11905: 0xDAEC, + 38496 - 11905: 0xEA86, + 38497 - 11905: 0xB6B8, + 38498 - 11905: 0xD4BA, + 38499 - 11905: 0xEA87, + 38500 - 11905: 0xB3FD, + 38501 - 11905: 0xEA88, + 38502 - 11905: 0xEA89, + 38503 - 11905: 0xDAED, + 38504 - 11905: 0xD4C9, + 38505 - 11905: 0xCFD5, + 38506 - 11905: 0xC5E3, + 38507 - 11905: 0xEA8A, + 38508 - 11905: 0xDAEE, + 38509 - 11905: 0xEA8B, + 38510 - 11905: 0xEA8C, + 38511 - 11905: 0xEA8D, + 38512 - 11905: 0xEA8E, + 38513 - 11905: 0xEA8F, + 38514 - 11905: 0xDAEF, + 38515 - 11905: 0xEA90, + 38516 - 11905: 0xDAF0, + 38517 - 11905: 0xC1EA, + 38518 - 11905: 0xCCD5, + 38519 - 11905: 0xCFDD, + 38520 - 11905: 0xEA91, + 38521 - 11905: 0xEA92, + 38522 - 11905: 0xEA93, + 38523 - 11905: 0xEA94, + 38524 - 11905: 0xEA95, + 38525 - 11905: 0xEA96, + 38526 - 11905: 0xEA97, + 38527 - 11905: 0xEA98, + 38528 - 11905: 0xEA99, + 38529 - 11905: 0xEA9A, + 38530 - 11905: 0xEA9B, + 38531 - 11905: 0xEA9C, + 38532 - 11905: 0xEA9D, + 38533 - 11905: 0xD3E7, + 38534 - 11905: 0xC2A1, + 38535 - 11905: 0xEA9E, + 38536 - 11905: 0xDAF1, + 38537 - 11905: 0xEA9F, + 38538 - 11905: 0xEAA0, + 38539 - 11905: 0xCBE5, + 38540 - 11905: 0xEB40, + 38541 - 11905: 0xDAF2, + 38542 - 11905: 0xEB41, + 38543 - 11905: 0xCBE6, + 38544 - 11905: 0xD2FE, + 38545 - 11905: 0xEB42, + 38546 - 11905: 0xEB43, + 38547 - 11905: 0xEB44, + 38548 - 11905: 0xB8F4, + 38549 - 11905: 0xEB45, + 38550 - 11905: 0xEB46, + 38551 - 11905: 0xDAF3, + 38552 - 11905: 0xB0AF, + 38553 - 11905: 0xCFB6, + 38554 - 11905: 0xEB47, + 38555 - 11905: 0xEB48, + 38556 - 11905: 0xD5CF, + 38557 - 11905: 0xEB49, + 38558 - 11905: 0xEB4A, + 38559 - 11905: 0xEB4B, + 38560 - 11905: 0xEB4C, + 38561 - 11905: 0xEB4D, + 38562 - 11905: 0xEB4E, + 38563 - 11905: 0xEB4F, + 38564 - 11905: 0xEB50, + 38565 - 11905: 0xEB51, + 38566 - 11905: 0xEB52, + 38567 - 11905: 0xCBED, + 38568 - 11905: 0xEB53, + 38569 - 11905: 0xEB54, + 38570 - 11905: 0xEB55, + 38571 - 11905: 0xEB56, + 38572 - 11905: 0xEB57, + 38573 - 11905: 0xEB58, + 38574 - 11905: 0xEB59, + 38575 - 11905: 0xEB5A, + 38576 - 11905: 0xDAF4, + 38577 - 11905: 0xEB5B, + 38578 - 11905: 0xEB5C, + 38579 - 11905: 0xE3C4, + 38580 - 11905: 0xEB5D, + 38581 - 11905: 0xEB5E, + 38582 - 11905: 0xC1A5, + 38583 - 11905: 0xEB5F, + 38584 - 11905: 0xEB60, + 38585 - 11905: 0xF6BF, + 38586 - 11905: 0xEB61, + 38587 - 11905: 0xEB62, + 38588 - 11905: 0xF6C0, + 38589 - 11905: 0xF6C1, + 38590 - 11905: 0xC4D1, + 38591 - 11905: 0xEB63, + 38592 - 11905: 0xC8B8, + 38593 - 11905: 0xD1E3, + 38594 - 11905: 0xEB64, + 38595 - 11905: 0xEB65, + 38596 - 11905: 0xD0DB, + 38597 - 11905: 0xD1C5, + 38598 - 11905: 0xBCAF, + 38599 - 11905: 0xB9CD, + 38600 - 11905: 0xEB66, + 38601 - 11905: 0xEFF4, + 38602 - 11905: 0xEB67, + 38603 - 11905: 0xEB68, + 38604 - 11905: 0xB4C6, + 38605 - 11905: 0xD3BA, + 38606 - 11905: 0xF6C2, + 38607 - 11905: 0xB3FB, + 38608 - 11905: 0xEB69, + 38609 - 11905: 0xEB6A, + 38610 - 11905: 0xF6C3, + 38611 - 11905: 0xEB6B, + 38612 - 11905: 0xEB6C, + 38613 - 11905: 0xB5F1, + 38614 - 11905: 0xEB6D, + 38615 - 11905: 0xEB6E, + 38616 - 11905: 0xEB6F, + 38617 - 11905: 0xEB70, + 38618 - 11905: 0xEB71, + 38619 - 11905: 0xEB72, + 38620 - 11905: 0xEB73, + 38621 - 11905: 0xEB74, + 38622 - 11905: 0xEB75, + 38623 - 11905: 0xEB76, + 38624 - 11905: 0xF6C5, + 38625 - 11905: 0xEB77, + 38626 - 11905: 0xEB78, + 38627 - 11905: 0xEB79, + 38628 - 11905: 0xEB7A, + 38629 - 11905: 0xEB7B, + 38630 - 11905: 0xEB7C, + 38631 - 11905: 0xEB7D, + 38632 - 11905: 0xD3EA, + 38633 - 11905: 0xF6A7, + 38634 - 11905: 0xD1A9, + 38635 - 11905: 0xEB7E, + 38636 - 11905: 0xEB80, + 38637 - 11905: 0xEB81, + 38638 - 11905: 0xEB82, + 38639 - 11905: 0xF6A9, + 38640 - 11905: 0xEB83, + 38641 - 11905: 0xEB84, + 38642 - 11905: 0xEB85, + 38643 - 11905: 0xF6A8, + 38644 - 11905: 0xEB86, + 38645 - 11905: 0xEB87, + 38646 - 11905: 0xC1E3, + 38647 - 11905: 0xC0D7, + 38648 - 11905: 0xEB88, + 38649 - 11905: 0xB1A2, + 38650 - 11905: 0xEB89, + 38651 - 11905: 0xEB8A, + 38652 - 11905: 0xEB8B, + 38653 - 11905: 0xEB8C, + 38654 - 11905: 0xCEED, + 38655 - 11905: 0xEB8D, + 38656 - 11905: 0xD0E8, + 38657 - 11905: 0xF6AB, + 38658 - 11905: 0xEB8E, + 38659 - 11905: 0xEB8F, + 38660 - 11905: 0xCFF6, + 38661 - 11905: 0xEB90, + 38662 - 11905: 0xF6AA, + 38663 - 11905: 0xD5F0, + 38664 - 11905: 0xF6AC, + 38665 - 11905: 0xC3B9, + 38666 - 11905: 0xEB91, + 38667 - 11905: 0xEB92, + 38668 - 11905: 0xEB93, + 38669 - 11905: 0xBBF4, + 38670 - 11905: 0xF6AE, + 38671 - 11905: 0xF6AD, + 38672 - 11905: 0xEB94, + 38673 - 11905: 0xEB95, + 38674 - 11905: 0xEB96, + 38675 - 11905: 0xC4DE, + 38676 - 11905: 0xEB97, + 38677 - 11905: 0xEB98, + 38678 - 11905: 0xC1D8, + 38679 - 11905: 0xEB99, + 38680 - 11905: 0xEB9A, + 38681 - 11905: 0xEB9B, + 38682 - 11905: 0xEB9C, + 38683 - 11905: 0xEB9D, + 38684 - 11905: 0xCBAA, + 38685 - 11905: 0xEB9E, + 38686 - 11905: 0xCFBC, + 38687 - 11905: 0xEB9F, + 38688 - 11905: 0xEBA0, + 38689 - 11905: 0xEC40, + 38690 - 11905: 0xEC41, + 38691 - 11905: 0xEC42, + 38692 - 11905: 0xEC43, + 38693 - 11905: 0xEC44, + 38694 - 11905: 0xEC45, + 38695 - 11905: 0xEC46, + 38696 - 11905: 0xEC47, + 38697 - 11905: 0xEC48, + 38698 - 11905: 0xF6AF, + 38699 - 11905: 0xEC49, + 38700 - 11905: 0xEC4A, + 38701 - 11905: 0xF6B0, + 38702 - 11905: 0xEC4B, + 38703 - 11905: 0xEC4C, + 38704 - 11905: 0xF6B1, + 38705 - 11905: 0xEC4D, + 38706 - 11905: 0xC2B6, + 38707 - 11905: 0xEC4E, + 38708 - 11905: 0xEC4F, + 38709 - 11905: 0xEC50, + 38710 - 11905: 0xEC51, + 38711 - 11905: 0xEC52, + 38712 - 11905: 0xB0D4, + 38713 - 11905: 0xC5F9, + 38714 - 11905: 0xEC53, + 38715 - 11905: 0xEC54, + 38716 - 11905: 0xEC55, + 38717 - 11905: 0xEC56, + 38718 - 11905: 0xF6B2, + 38719 - 11905: 0xEC57, + 38720 - 11905: 0xEC58, + 38721 - 11905: 0xEC59, + 38722 - 11905: 0xEC5A, + 38723 - 11905: 0xEC5B, + 38724 - 11905: 0xEC5C, + 38725 - 11905: 0xEC5D, + 38726 - 11905: 0xEC5E, + 38727 - 11905: 0xEC5F, + 38728 - 11905: 0xEC60, + 38729 - 11905: 0xEC61, + 38730 - 11905: 0xEC62, + 38731 - 11905: 0xEC63, + 38732 - 11905: 0xEC64, + 38733 - 11905: 0xEC65, + 38734 - 11905: 0xEC66, + 38735 - 11905: 0xEC67, + 38736 - 11905: 0xEC68, + 38737 - 11905: 0xEC69, + 38738 - 11905: 0xC7E0, + 38739 - 11905: 0xF6A6, + 38740 - 11905: 0xEC6A, + 38741 - 11905: 0xEC6B, + 38742 - 11905: 0xBEB8, + 38743 - 11905: 0xEC6C, + 38744 - 11905: 0xEC6D, + 38745 - 11905: 0xBEB2, + 38746 - 11905: 0xEC6E, + 38747 - 11905: 0xB5E5, + 38748 - 11905: 0xEC6F, + 38749 - 11905: 0xEC70, + 38750 - 11905: 0xB7C7, + 38751 - 11905: 0xEC71, + 38752 - 11905: 0xBFBF, + 38753 - 11905: 0xC3D2, + 38754 - 11905: 0xC3E6, + 38755 - 11905: 0xEC72, + 38756 - 11905: 0xEC73, + 38757 - 11905: 0xD8CC, + 38758 - 11905: 0xEC74, + 38759 - 11905: 0xEC75, + 38760 - 11905: 0xEC76, + 38761 - 11905: 0xB8EF, + 38762 - 11905: 0xEC77, + 38763 - 11905: 0xEC78, + 38764 - 11905: 0xEC79, + 38765 - 11905: 0xEC7A, + 38766 - 11905: 0xEC7B, + 38767 - 11905: 0xEC7C, + 38768 - 11905: 0xEC7D, + 38769 - 11905: 0xEC7E, + 38770 - 11905: 0xEC80, + 38771 - 11905: 0xBDF9, + 38772 - 11905: 0xD1A5, + 38773 - 11905: 0xEC81, + 38774 - 11905: 0xB0D0, + 38775 - 11905: 0xEC82, + 38776 - 11905: 0xEC83, + 38777 - 11905: 0xEC84, + 38778 - 11905: 0xEC85, + 38779 - 11905: 0xEC86, + 38780 - 11905: 0xF7B0, + 38781 - 11905: 0xEC87, + 38782 - 11905: 0xEC88, + 38783 - 11905: 0xEC89, + 38784 - 11905: 0xEC8A, + 38785 - 11905: 0xEC8B, + 38786 - 11905: 0xEC8C, + 38787 - 11905: 0xEC8D, + 38788 - 11905: 0xEC8E, + 38789 - 11905: 0xF7B1, + 38790 - 11905: 0xEC8F, + 38791 - 11905: 0xEC90, + 38792 - 11905: 0xEC91, + 38793 - 11905: 0xEC92, + 38794 - 11905: 0xEC93, + 38795 - 11905: 0xD0AC, + 38796 - 11905: 0xEC94, + 38797 - 11905: 0xB0B0, + 38798 - 11905: 0xEC95, + 38799 - 11905: 0xEC96, + 38800 - 11905: 0xEC97, + 38801 - 11905: 0xF7B2, + 38802 - 11905: 0xF7B3, + 38803 - 11905: 0xEC98, + 38804 - 11905: 0xF7B4, + 38805 - 11905: 0xEC99, + 38806 - 11905: 0xEC9A, + 38807 - 11905: 0xEC9B, + 38808 - 11905: 0xC7CA, + 38809 - 11905: 0xEC9C, + 38810 - 11905: 0xEC9D, + 38811 - 11905: 0xEC9E, + 38812 - 11905: 0xEC9F, + 38813 - 11905: 0xECA0, + 38814 - 11905: 0xED40, + 38815 - 11905: 0xED41, + 38816 - 11905: 0xBECF, + 38817 - 11905: 0xED42, + 38818 - 11905: 0xED43, + 38819 - 11905: 0xF7B7, + 38820 - 11905: 0xED44, + 38821 - 11905: 0xED45, + 38822 - 11905: 0xED46, + 38823 - 11905: 0xED47, + 38824 - 11905: 0xED48, + 38825 - 11905: 0xED49, + 38826 - 11905: 0xED4A, + 38827 - 11905: 0xF7B6, + 38828 - 11905: 0xED4B, + 38829 - 11905: 0xB1DE, + 38830 - 11905: 0xED4C, + 38831 - 11905: 0xF7B5, + 38832 - 11905: 0xED4D, + 38833 - 11905: 0xED4E, + 38834 - 11905: 0xF7B8, + 38835 - 11905: 0xED4F, + 38836 - 11905: 0xF7B9, + 38837 - 11905: 0xED50, + 38838 - 11905: 0xED51, + 38839 - 11905: 0xED52, + 38840 - 11905: 0xED53, + 38841 - 11905: 0xED54, + 38842 - 11905: 0xED55, + 38843 - 11905: 0xED56, + 38844 - 11905: 0xED57, + 38845 - 11905: 0xED58, + 38846 - 11905: 0xED59, + 38847 - 11905: 0xED5A, + 38848 - 11905: 0xED5B, + 38849 - 11905: 0xED5C, + 38850 - 11905: 0xED5D, + 38851 - 11905: 0xED5E, + 38852 - 11905: 0xED5F, + 38853 - 11905: 0xED60, + 38854 - 11905: 0xED61, + 38855 - 11905: 0xED62, + 38856 - 11905: 0xED63, + 38857 - 11905: 0xED64, + 38858 - 11905: 0xED65, + 38859 - 11905: 0xED66, + 38860 - 11905: 0xED67, + 38861 - 11905: 0xED68, + 38862 - 11905: 0xED69, + 38863 - 11905: 0xED6A, + 38864 - 11905: 0xED6B, + 38865 - 11905: 0xED6C, + 38866 - 11905: 0xED6D, + 38867 - 11905: 0xED6E, + 38868 - 11905: 0xED6F, + 38869 - 11905: 0xED70, + 38870 - 11905: 0xED71, + 38871 - 11905: 0xED72, + 38872 - 11905: 0xED73, + 38873 - 11905: 0xED74, + 38874 - 11905: 0xED75, + 38875 - 11905: 0xED76, + 38876 - 11905: 0xED77, + 38877 - 11905: 0xED78, + 38878 - 11905: 0xED79, + 38879 - 11905: 0xED7A, + 38880 - 11905: 0xED7B, + 38881 - 11905: 0xED7C, + 38882 - 11905: 0xED7D, + 38883 - 11905: 0xED7E, + 38884 - 11905: 0xED80, + 38885 - 11905: 0xED81, + 38886 - 11905: 0xCEA4, + 38887 - 11905: 0xC8CD, + 38888 - 11905: 0xED82, + 38889 - 11905: 0xBAAB, + 38890 - 11905: 0xE8B8, + 38891 - 11905: 0xE8B9, + 38892 - 11905: 0xE8BA, + 38893 - 11905: 0xBEC2, + 38894 - 11905: 0xED83, + 38895 - 11905: 0xED84, + 38896 - 11905: 0xED85, + 38897 - 11905: 0xED86, + 38898 - 11905: 0xED87, + 38899 - 11905: 0xD2F4, + 38900 - 11905: 0xED88, + 38901 - 11905: 0xD4CF, + 38902 - 11905: 0xC9D8, + 38903 - 11905: 0xED89, + 38904 - 11905: 0xED8A, + 38905 - 11905: 0xED8B, + 38906 - 11905: 0xED8C, + 38907 - 11905: 0xED8D, + 38908 - 11905: 0xED8E, + 38909 - 11905: 0xED8F, + 38910 - 11905: 0xED90, + 38911 - 11905: 0xED91, + 38912 - 11905: 0xED92, + 38913 - 11905: 0xED93, + 38914 - 11905: 0xED94, + 38915 - 11905: 0xED95, + 38916 - 11905: 0xED96, + 38917 - 11905: 0xED97, + 38918 - 11905: 0xED98, + 38919 - 11905: 0xED99, + 38920 - 11905: 0xED9A, + 38921 - 11905: 0xED9B, + 38922 - 11905: 0xED9C, + 38923 - 11905: 0xED9D, + 38924 - 11905: 0xED9E, + 38925 - 11905: 0xED9F, + 38926 - 11905: 0xEDA0, + 38927 - 11905: 0xEE40, + 38928 - 11905: 0xEE41, + 38929 - 11905: 0xEE42, + 38930 - 11905: 0xEE43, + 38931 - 11905: 0xEE44, + 38932 - 11905: 0xEE45, + 38933 - 11905: 0xEE46, + 38934 - 11905: 0xEE47, + 38935 - 11905: 0xEE48, + 38936 - 11905: 0xEE49, + 38937 - 11905: 0xEE4A, + 38938 - 11905: 0xEE4B, + 38939 - 11905: 0xEE4C, + 38940 - 11905: 0xEE4D, + 38941 - 11905: 0xEE4E, + 38942 - 11905: 0xEE4F, + 38943 - 11905: 0xEE50, + 38944 - 11905: 0xEE51, + 38945 - 11905: 0xEE52, + 38946 - 11905: 0xEE53, + 38947 - 11905: 0xEE54, + 38948 - 11905: 0xEE55, + 38949 - 11905: 0xEE56, + 38950 - 11905: 0xEE57, + 38951 - 11905: 0xEE58, + 38952 - 11905: 0xEE59, + 38953 - 11905: 0xEE5A, + 38954 - 11905: 0xEE5B, + 38955 - 11905: 0xEE5C, + 38956 - 11905: 0xEE5D, + 38957 - 11905: 0xEE5E, + 38958 - 11905: 0xEE5F, + 38959 - 11905: 0xEE60, + 38960 - 11905: 0xEE61, + 38961 - 11905: 0xEE62, + 38962 - 11905: 0xEE63, + 38963 - 11905: 0xEE64, + 38964 - 11905: 0xEE65, + 38965 - 11905: 0xEE66, + 38966 - 11905: 0xEE67, + 38967 - 11905: 0xEE68, + 38968 - 11905: 0xEE69, + 38969 - 11905: 0xEE6A, + 38970 - 11905: 0xEE6B, + 38971 - 11905: 0xEE6C, + 38972 - 11905: 0xEE6D, + 38973 - 11905: 0xEE6E, + 38974 - 11905: 0xEE6F, + 38975 - 11905: 0xEE70, + 38976 - 11905: 0xEE71, + 38977 - 11905: 0xEE72, + 38978 - 11905: 0xEE73, + 38979 - 11905: 0xEE74, + 38980 - 11905: 0xEE75, + 38981 - 11905: 0xEE76, + 38982 - 11905: 0xEE77, + 38983 - 11905: 0xEE78, + 38984 - 11905: 0xEE79, + 38985 - 11905: 0xEE7A, + 38986 - 11905: 0xEE7B, + 38987 - 11905: 0xEE7C, + 38988 - 11905: 0xEE7D, + 38989 - 11905: 0xEE7E, + 38990 - 11905: 0xEE80, + 38991 - 11905: 0xEE81, + 38992 - 11905: 0xEE82, + 38993 - 11905: 0xEE83, + 38994 - 11905: 0xEE84, + 38995 - 11905: 0xEE85, + 38996 - 11905: 0xEE86, + 38997 - 11905: 0xEE87, + 38998 - 11905: 0xEE88, + 38999 - 11905: 0xEE89, + 39000 - 11905: 0xEE8A, + 39001 - 11905: 0xEE8B, + 39002 - 11905: 0xEE8C, + 39003 - 11905: 0xEE8D, + 39004 - 11905: 0xEE8E, + 39005 - 11905: 0xEE8F, + 39006 - 11905: 0xEE90, + 39007 - 11905: 0xEE91, + 39008 - 11905: 0xEE92, + 39009 - 11905: 0xEE93, + 39010 - 11905: 0xEE94, + 39011 - 11905: 0xEE95, + 39012 - 11905: 0xEE96, + 39013 - 11905: 0xEE97, + 39014 - 11905: 0xEE98, + 39015 - 11905: 0xEE99, + 39016 - 11905: 0xEE9A, + 39017 - 11905: 0xEE9B, + 39018 - 11905: 0xEE9C, + 39019 - 11905: 0xEE9D, + 39020 - 11905: 0xEE9E, + 39021 - 11905: 0xEE9F, + 39022 - 11905: 0xEEA0, + 39023 - 11905: 0xEF40, + 39024 - 11905: 0xEF41, + 39025 - 11905: 0xEF42, + 39026 - 11905: 0xEF43, + 39027 - 11905: 0xEF44, + 39028 - 11905: 0xEF45, + 39029 - 11905: 0xD2B3, + 39030 - 11905: 0xB6A5, + 39031 - 11905: 0xC7EA, + 39032 - 11905: 0xF1FC, + 39033 - 11905: 0xCFEE, + 39034 - 11905: 0xCBB3, + 39035 - 11905: 0xD0EB, + 39036 - 11905: 0xE7EF, + 39037 - 11905: 0xCDE7, + 39038 - 11905: 0xB9CB, + 39039 - 11905: 0xB6D9, + 39040 - 11905: 0xF1FD, + 39041 - 11905: 0xB0E4, + 39042 - 11905: 0xCBCC, + 39043 - 11905: 0xF1FE, + 39044 - 11905: 0xD4A4, + 39045 - 11905: 0xC2AD, + 39046 - 11905: 0xC1EC, + 39047 - 11905: 0xC6C4, + 39048 - 11905: 0xBEB1, + 39049 - 11905: 0xF2A1, + 39050 - 11905: 0xBCD5, + 39051 - 11905: 0xEF46, + 39052 - 11905: 0xF2A2, + 39053 - 11905: 0xF2A3, + 39054 - 11905: 0xEF47, + 39055 - 11905: 0xF2A4, + 39056 - 11905: 0xD2C3, + 39057 - 11905: 0xC6B5, + 39058 - 11905: 0xEF48, + 39059 - 11905: 0xCDC7, + 39060 - 11905: 0xF2A5, + 39061 - 11905: 0xEF49, + 39062 - 11905: 0xD3B1, + 39063 - 11905: 0xBFC5, + 39064 - 11905: 0xCCE2, + 39065 - 11905: 0xEF4A, + 39066 - 11905: 0xF2A6, + 39067 - 11905: 0xF2A7, + 39068 - 11905: 0xD1D5, + 39069 - 11905: 0xB6EE, + 39070 - 11905: 0xF2A8, + 39071 - 11905: 0xF2A9, + 39072 - 11905: 0xB5DF, + 39073 - 11905: 0xF2AA, + 39074 - 11905: 0xF2AB, + 39075 - 11905: 0xEF4B, + 39076 - 11905: 0xB2FC, + 39077 - 11905: 0xF2AC, + 39078 - 11905: 0xF2AD, + 39079 - 11905: 0xC8A7, + 39080 - 11905: 0xEF4C, + 39081 - 11905: 0xEF4D, + 39082 - 11905: 0xEF4E, + 39083 - 11905: 0xEF4F, + 39084 - 11905: 0xEF50, + 39085 - 11905: 0xEF51, + 39086 - 11905: 0xEF52, + 39087 - 11905: 0xEF53, + 39088 - 11905: 0xEF54, + 39089 - 11905: 0xEF55, + 39090 - 11905: 0xEF56, + 39091 - 11905: 0xEF57, + 39092 - 11905: 0xEF58, + 39093 - 11905: 0xEF59, + 39094 - 11905: 0xEF5A, + 39095 - 11905: 0xEF5B, + 39096 - 11905: 0xEF5C, + 39097 - 11905: 0xEF5D, + 39098 - 11905: 0xEF5E, + 39099 - 11905: 0xEF5F, + 39100 - 11905: 0xEF60, + 39101 - 11905: 0xEF61, + 39102 - 11905: 0xEF62, + 39103 - 11905: 0xEF63, + 39104 - 11905: 0xEF64, + 39105 - 11905: 0xEF65, + 39106 - 11905: 0xEF66, + 39107 - 11905: 0xEF67, + 39108 - 11905: 0xEF68, + 39109 - 11905: 0xEF69, + 39110 - 11905: 0xEF6A, + 39111 - 11905: 0xEF6B, + 39112 - 11905: 0xEF6C, + 39113 - 11905: 0xEF6D, + 39114 - 11905: 0xEF6E, + 39115 - 11905: 0xEF6F, + 39116 - 11905: 0xEF70, + 39117 - 11905: 0xEF71, + 39118 - 11905: 0xB7E7, + 39119 - 11905: 0xEF72, + 39120 - 11905: 0xEF73, + 39121 - 11905: 0xECA9, + 39122 - 11905: 0xECAA, + 39123 - 11905: 0xECAB, + 39124 - 11905: 0xEF74, + 39125 - 11905: 0xECAC, + 39126 - 11905: 0xEF75, + 39127 - 11905: 0xEF76, + 39128 - 11905: 0xC6AE, + 39129 - 11905: 0xECAD, + 39130 - 11905: 0xECAE, + 39131 - 11905: 0xEF77, + 39132 - 11905: 0xEF78, + 39133 - 11905: 0xEF79, + 39134 - 11905: 0xB7C9, + 39135 - 11905: 0xCAB3, + 39136 - 11905: 0xEF7A, + 39137 - 11905: 0xEF7B, + 39138 - 11905: 0xEF7C, + 39139 - 11905: 0xEF7D, + 39140 - 11905: 0xEF7E, + 39141 - 11905: 0xEF80, + 39142 - 11905: 0xEF81, + 39143 - 11905: 0xE2B8, + 39144 - 11905: 0xF7CF, + 39145 - 11905: 0xEF82, + 39146 - 11905: 0xEF83, + 39147 - 11905: 0xEF84, + 39148 - 11905: 0xEF85, + 39149 - 11905: 0xEF86, + 39150 - 11905: 0xEF87, + 39151 - 11905: 0xEF88, + 39152 - 11905: 0xEF89, + 39153 - 11905: 0xEF8A, + 39154 - 11905: 0xEF8B, + 39155 - 11905: 0xEF8C, + 39156 - 11905: 0xEF8D, + 39157 - 11905: 0xEF8E, + 39158 - 11905: 0xEF8F, + 39159 - 11905: 0xEF90, + 39160 - 11905: 0xEF91, + 39161 - 11905: 0xEF92, + 39162 - 11905: 0xEF93, + 39163 - 11905: 0xEF94, + 39164 - 11905: 0xEF95, + 39165 - 11905: 0xEF96, + 39166 - 11905: 0xEF97, + 39167 - 11905: 0xEF98, + 39168 - 11905: 0xEF99, + 39169 - 11905: 0xEF9A, + 39170 - 11905: 0xEF9B, + 39171 - 11905: 0xEF9C, + 39172 - 11905: 0xEF9D, + 39173 - 11905: 0xEF9E, + 39174 - 11905: 0xEF9F, + 39175 - 11905: 0xEFA0, + 39176 - 11905: 0xF040, + 39177 - 11905: 0xF041, + 39178 - 11905: 0xF042, + 39179 - 11905: 0xF043, + 39180 - 11905: 0xF044, + 39181 - 11905: 0xF7D0, + 39182 - 11905: 0xF045, + 39183 - 11905: 0xF046, + 39184 - 11905: 0xB2CD, + 39185 - 11905: 0xF047, + 39186 - 11905: 0xF048, + 39187 - 11905: 0xF049, + 39188 - 11905: 0xF04A, + 39189 - 11905: 0xF04B, + 39190 - 11905: 0xF04C, + 39191 - 11905: 0xF04D, + 39192 - 11905: 0xF04E, + 39193 - 11905: 0xF04F, + 39194 - 11905: 0xF050, + 39195 - 11905: 0xF051, + 39196 - 11905: 0xF052, + 39197 - 11905: 0xF053, + 39198 - 11905: 0xF054, + 39199 - 11905: 0xF055, + 39200 - 11905: 0xF056, + 39201 - 11905: 0xF057, + 39202 - 11905: 0xF058, + 39203 - 11905: 0xF059, + 39204 - 11905: 0xF05A, + 39205 - 11905: 0xF05B, + 39206 - 11905: 0xF05C, + 39207 - 11905: 0xF05D, + 39208 - 11905: 0xF05E, + 39209 - 11905: 0xF05F, + 39210 - 11905: 0xF060, + 39211 - 11905: 0xF061, + 39212 - 11905: 0xF062, + 39213 - 11905: 0xF063, + 39214 - 11905: 0xF7D1, + 39215 - 11905: 0xF064, + 39216 - 11905: 0xF065, + 39217 - 11905: 0xF066, + 39218 - 11905: 0xF067, + 39219 - 11905: 0xF068, + 39220 - 11905: 0xF069, + 39221 - 11905: 0xF06A, + 39222 - 11905: 0xF06B, + 39223 - 11905: 0xF06C, + 39224 - 11905: 0xF06D, + 39225 - 11905: 0xF06E, + 39226 - 11905: 0xF06F, + 39227 - 11905: 0xF070, + 39228 - 11905: 0xF071, + 39229 - 11905: 0xF072, + 39230 - 11905: 0xF073, + 39231 - 11905: 0xF074, + 39232 - 11905: 0xF075, + 39233 - 11905: 0xF076, + 39234 - 11905: 0xF077, + 39235 - 11905: 0xF078, + 39236 - 11905: 0xF079, + 39237 - 11905: 0xF07A, + 39238 - 11905: 0xF07B, + 39239 - 11905: 0xF07C, + 39240 - 11905: 0xF07D, + 39241 - 11905: 0xF07E, + 39242 - 11905: 0xF080, + 39243 - 11905: 0xF081, + 39244 - 11905: 0xF082, + 39245 - 11905: 0xF083, + 39246 - 11905: 0xF084, + 39247 - 11905: 0xF085, + 39248 - 11905: 0xF086, + 39249 - 11905: 0xF087, + 39250 - 11905: 0xF088, + 39251 - 11905: 0xF089, + 39252 - 11905: 0xF7D3, + 39253 - 11905: 0xF7D2, + 39254 - 11905: 0xF08A, + 39255 - 11905: 0xF08B, + 39256 - 11905: 0xF08C, + 39257 - 11905: 0xF08D, + 39258 - 11905: 0xF08E, + 39259 - 11905: 0xF08F, + 39260 - 11905: 0xF090, + 39261 - 11905: 0xF091, + 39262 - 11905: 0xF092, + 39263 - 11905: 0xF093, + 39264 - 11905: 0xF094, + 39265 - 11905: 0xF095, + 39266 - 11905: 0xF096, + 39267 - 11905: 0xE2BB, + 39268 - 11905: 0xF097, + 39269 - 11905: 0xBCA2, + 39270 - 11905: 0xF098, + 39271 - 11905: 0xE2BC, + 39272 - 11905: 0xE2BD, + 39273 - 11905: 0xE2BE, + 39274 - 11905: 0xE2BF, + 39275 - 11905: 0xE2C0, + 39276 - 11905: 0xE2C1, + 39277 - 11905: 0xB7B9, + 39278 - 11905: 0xD2FB, + 39279 - 11905: 0xBDA4, + 39280 - 11905: 0xCACE, + 39281 - 11905: 0xB1A5, + 39282 - 11905: 0xCBC7, + 39283 - 11905: 0xF099, + 39284 - 11905: 0xE2C2, + 39285 - 11905: 0xB6FC, + 39286 - 11905: 0xC8C4, + 39287 - 11905: 0xE2C3, + 39288 - 11905: 0xF09A, + 39289 - 11905: 0xF09B, + 39290 - 11905: 0xBDC8, + 39291 - 11905: 0xF09C, + 39292 - 11905: 0xB1FD, + 39293 - 11905: 0xE2C4, + 39294 - 11905: 0xF09D, + 39295 - 11905: 0xB6F6, + 39296 - 11905: 0xE2C5, + 39297 - 11905: 0xC4D9, + 39298 - 11905: 0xF09E, + 39299 - 11905: 0xF09F, + 39300 - 11905: 0xE2C6, + 39301 - 11905: 0xCFDA, + 39302 - 11905: 0xB9DD, + 39303 - 11905: 0xE2C7, + 39304 - 11905: 0xC0A1, + 39305 - 11905: 0xF0A0, + 39306 - 11905: 0xE2C8, + 39307 - 11905: 0xB2F6, + 39308 - 11905: 0xF140, + 39309 - 11905: 0xE2C9, + 39310 - 11905: 0xF141, + 39311 - 11905: 0xC1F3, + 39312 - 11905: 0xE2CA, + 39313 - 11905: 0xE2CB, + 39314 - 11905: 0xC2F8, + 39315 - 11905: 0xE2CC, + 39316 - 11905: 0xE2CD, + 39317 - 11905: 0xE2CE, + 39318 - 11905: 0xCAD7, + 39319 - 11905: 0xD8B8, + 39320 - 11905: 0xD9E5, + 39321 - 11905: 0xCFE3, + 39322 - 11905: 0xF142, + 39323 - 11905: 0xF143, + 39324 - 11905: 0xF144, + 39325 - 11905: 0xF145, + 39326 - 11905: 0xF146, + 39327 - 11905: 0xF147, + 39328 - 11905: 0xF148, + 39329 - 11905: 0xF149, + 39330 - 11905: 0xF14A, + 39331 - 11905: 0xF14B, + 39332 - 11905: 0xF14C, + 39333 - 11905: 0xF0A5, + 39334 - 11905: 0xF14D, + 39335 - 11905: 0xF14E, + 39336 - 11905: 0xDCB0, + 39337 - 11905: 0xF14F, + 39338 - 11905: 0xF150, + 39339 - 11905: 0xF151, + 39340 - 11905: 0xF152, + 39341 - 11905: 0xF153, + 39342 - 11905: 0xF154, + 39343 - 11905: 0xF155, + 39344 - 11905: 0xF156, + 39345 - 11905: 0xF157, + 39346 - 11905: 0xF158, + 39347 - 11905: 0xF159, + 39348 - 11905: 0xF15A, + 39349 - 11905: 0xF15B, + 39350 - 11905: 0xF15C, + 39351 - 11905: 0xF15D, + 39352 - 11905: 0xF15E, + 39353 - 11905: 0xF15F, + 39354 - 11905: 0xF160, + 39355 - 11905: 0xF161, + 39356 - 11905: 0xF162, + 39357 - 11905: 0xF163, + 39358 - 11905: 0xF164, + 39359 - 11905: 0xF165, + 39360 - 11905: 0xF166, + 39361 - 11905: 0xF167, + 39362 - 11905: 0xF168, + 39363 - 11905: 0xF169, + 39364 - 11905: 0xF16A, + 39365 - 11905: 0xF16B, + 39366 - 11905: 0xF16C, + 39367 - 11905: 0xF16D, + 39368 - 11905: 0xF16E, + 39369 - 11905: 0xF16F, + 39370 - 11905: 0xF170, + 39371 - 11905: 0xF171, + 39372 - 11905: 0xF172, + 39373 - 11905: 0xF173, + 39374 - 11905: 0xF174, + 39375 - 11905: 0xF175, + 39376 - 11905: 0xF176, + 39377 - 11905: 0xF177, + 39378 - 11905: 0xF178, + 39379 - 11905: 0xF179, + 39380 - 11905: 0xF17A, + 39381 - 11905: 0xF17B, + 39382 - 11905: 0xF17C, + 39383 - 11905: 0xF17D, + 39384 - 11905: 0xF17E, + 39385 - 11905: 0xF180, + 39386 - 11905: 0xF181, + 39387 - 11905: 0xF182, + 39388 - 11905: 0xF183, + 39389 - 11905: 0xF184, + 39390 - 11905: 0xF185, + 39391 - 11905: 0xF186, + 39392 - 11905: 0xF187, + 39393 - 11905: 0xF188, + 39394 - 11905: 0xF189, + 39395 - 11905: 0xF18A, + 39396 - 11905: 0xF18B, + 39397 - 11905: 0xF18C, + 39398 - 11905: 0xF18D, + 39399 - 11905: 0xF18E, + 39400 - 11905: 0xF18F, + 39401 - 11905: 0xF190, + 39402 - 11905: 0xF191, + 39403 - 11905: 0xF192, + 39404 - 11905: 0xF193, + 39405 - 11905: 0xF194, + 39406 - 11905: 0xF195, + 39407 - 11905: 0xF196, + 39408 - 11905: 0xF197, + 39409 - 11905: 0xF198, + 39410 - 11905: 0xF199, + 39411 - 11905: 0xF19A, + 39412 - 11905: 0xF19B, + 39413 - 11905: 0xF19C, + 39414 - 11905: 0xF19D, + 39415 - 11905: 0xF19E, + 39416 - 11905: 0xF19F, + 39417 - 11905: 0xF1A0, + 39418 - 11905: 0xF240, + 39419 - 11905: 0xF241, + 39420 - 11905: 0xF242, + 39421 - 11905: 0xF243, + 39422 - 11905: 0xF244, + 39423 - 11905: 0xF245, + 39424 - 11905: 0xF246, + 39425 - 11905: 0xF247, + 39426 - 11905: 0xF248, + 39427 - 11905: 0xF249, + 39428 - 11905: 0xF24A, + 39429 - 11905: 0xF24B, + 39430 - 11905: 0xF24C, + 39431 - 11905: 0xF24D, + 39432 - 11905: 0xF24E, + 39433 - 11905: 0xF24F, + 39434 - 11905: 0xF250, + 39435 - 11905: 0xF251, + 39436 - 11905: 0xF252, + 39437 - 11905: 0xF253, + 39438 - 11905: 0xF254, + 39439 - 11905: 0xF255, + 39440 - 11905: 0xF256, + 39441 - 11905: 0xF257, + 39442 - 11905: 0xF258, + 39443 - 11905: 0xF259, + 39444 - 11905: 0xF25A, + 39445 - 11905: 0xF25B, + 39446 - 11905: 0xF25C, + 39447 - 11905: 0xF25D, + 39448 - 11905: 0xF25E, + 39449 - 11905: 0xF25F, + 39450 - 11905: 0xF260, + 39451 - 11905: 0xF261, + 39452 - 11905: 0xF262, + 39453 - 11905: 0xF263, + 39454 - 11905: 0xF264, + 39455 - 11905: 0xF265, + 39456 - 11905: 0xF266, + 39457 - 11905: 0xF267, + 39458 - 11905: 0xF268, + 39459 - 11905: 0xF269, + 39460 - 11905: 0xF26A, + 39461 - 11905: 0xF26B, + 39462 - 11905: 0xF26C, + 39463 - 11905: 0xF26D, + 39464 - 11905: 0xF26E, + 39465 - 11905: 0xF26F, + 39466 - 11905: 0xF270, + 39467 - 11905: 0xF271, + 39468 - 11905: 0xF272, + 39469 - 11905: 0xF273, + 39470 - 11905: 0xF274, + 39471 - 11905: 0xF275, + 39472 - 11905: 0xF276, + 39473 - 11905: 0xF277, + 39474 - 11905: 0xF278, + 39475 - 11905: 0xF279, + 39476 - 11905: 0xF27A, + 39477 - 11905: 0xF27B, + 39478 - 11905: 0xF27C, + 39479 - 11905: 0xF27D, + 39480 - 11905: 0xF27E, + 39481 - 11905: 0xF280, + 39482 - 11905: 0xF281, + 39483 - 11905: 0xF282, + 39484 - 11905: 0xF283, + 39485 - 11905: 0xF284, + 39486 - 11905: 0xF285, + 39487 - 11905: 0xF286, + 39488 - 11905: 0xF287, + 39489 - 11905: 0xF288, + 39490 - 11905: 0xF289, + 39491 - 11905: 0xF28A, + 39492 - 11905: 0xF28B, + 39493 - 11905: 0xF28C, + 39494 - 11905: 0xF28D, + 39495 - 11905: 0xF28E, + 39496 - 11905: 0xF28F, + 39497 - 11905: 0xF290, + 39498 - 11905: 0xF291, + 39499 - 11905: 0xF292, + 39500 - 11905: 0xF293, + 39501 - 11905: 0xF294, + 39502 - 11905: 0xF295, + 39503 - 11905: 0xF296, + 39504 - 11905: 0xF297, + 39505 - 11905: 0xF298, + 39506 - 11905: 0xF299, + 39507 - 11905: 0xF29A, + 39508 - 11905: 0xF29B, + 39509 - 11905: 0xF29C, + 39510 - 11905: 0xF29D, + 39511 - 11905: 0xF29E, + 39512 - 11905: 0xF29F, + 39513 - 11905: 0xF2A0, + 39514 - 11905: 0xF340, + 39515 - 11905: 0xF341, + 39516 - 11905: 0xF342, + 39517 - 11905: 0xF343, + 39518 - 11905: 0xF344, + 39519 - 11905: 0xF345, + 39520 - 11905: 0xF346, + 39521 - 11905: 0xF347, + 39522 - 11905: 0xF348, + 39523 - 11905: 0xF349, + 39524 - 11905: 0xF34A, + 39525 - 11905: 0xF34B, + 39526 - 11905: 0xF34C, + 39527 - 11905: 0xF34D, + 39528 - 11905: 0xF34E, + 39529 - 11905: 0xF34F, + 39530 - 11905: 0xF350, + 39531 - 11905: 0xF351, + 39532 - 11905: 0xC2ED, + 39533 - 11905: 0xD4A6, + 39534 - 11905: 0xCDD4, + 39535 - 11905: 0xD1B1, + 39536 - 11905: 0xB3DB, + 39537 - 11905: 0xC7FD, + 39538 - 11905: 0xF352, + 39539 - 11905: 0xB2B5, + 39540 - 11905: 0xC2BF, + 39541 - 11905: 0xE6E0, + 39542 - 11905: 0xCABB, + 39543 - 11905: 0xE6E1, + 39544 - 11905: 0xE6E2, + 39545 - 11905: 0xBED4, + 39546 - 11905: 0xE6E3, + 39547 - 11905: 0xD7A4, + 39548 - 11905: 0xCDD5, + 39549 - 11905: 0xE6E5, + 39550 - 11905: 0xBCDD, + 39551 - 11905: 0xE6E4, + 39552 - 11905: 0xE6E6, + 39553 - 11905: 0xE6E7, + 39554 - 11905: 0xC2EE, + 39555 - 11905: 0xF353, + 39556 - 11905: 0xBDBE, + 39557 - 11905: 0xE6E8, + 39558 - 11905: 0xC2E6, + 39559 - 11905: 0xBAA7, + 39560 - 11905: 0xE6E9, + 39561 - 11905: 0xF354, + 39562 - 11905: 0xE6EA, + 39563 - 11905: 0xB3D2, + 39564 - 11905: 0xD1E9, + 39565 - 11905: 0xF355, + 39566 - 11905: 0xF356, + 39567 - 11905: 0xBFA5, + 39568 - 11905: 0xE6EB, + 39569 - 11905: 0xC6EF, + 39570 - 11905: 0xE6EC, + 39571 - 11905: 0xE6ED, + 39572 - 11905: 0xF357, + 39573 - 11905: 0xF358, + 39574 - 11905: 0xE6EE, + 39575 - 11905: 0xC6AD, + 39576 - 11905: 0xE6EF, + 39577 - 11905: 0xF359, + 39578 - 11905: 0xC9A7, + 39579 - 11905: 0xE6F0, + 39580 - 11905: 0xE6F1, + 39581 - 11905: 0xE6F2, + 39582 - 11905: 0xE5B9, + 39583 - 11905: 0xE6F3, + 39584 - 11905: 0xE6F4, + 39585 - 11905: 0xC2E2, + 39586 - 11905: 0xE6F5, + 39587 - 11905: 0xE6F6, + 39588 - 11905: 0xD6E8, + 39589 - 11905: 0xE6F7, + 39590 - 11905: 0xF35A, + 39591 - 11905: 0xE6F8, + 39592 - 11905: 0xB9C7, + 39593 - 11905: 0xF35B, + 39594 - 11905: 0xF35C, + 39595 - 11905: 0xF35D, + 39596 - 11905: 0xF35E, + 39597 - 11905: 0xF35F, + 39598 - 11905: 0xF360, + 39599 - 11905: 0xF361, + 39600 - 11905: 0xF7BB, + 39601 - 11905: 0xF7BA, + 39602 - 11905: 0xF362, + 39603 - 11905: 0xF363, + 39604 - 11905: 0xF364, + 39605 - 11905: 0xF365, + 39606 - 11905: 0xF7BE, + 39607 - 11905: 0xF7BC, + 39608 - 11905: 0xBAA1, + 39609 - 11905: 0xF366, + 39610 - 11905: 0xF7BF, + 39611 - 11905: 0xF367, + 39612 - 11905: 0xF7C0, + 39613 - 11905: 0xF368, + 39614 - 11905: 0xF369, + 39615 - 11905: 0xF36A, + 39616 - 11905: 0xF7C2, + 39617 - 11905: 0xF7C1, + 39618 - 11905: 0xF7C4, + 39619 - 11905: 0xF36B, + 39620 - 11905: 0xF36C, + 39621 - 11905: 0xF7C3, + 39622 - 11905: 0xF36D, + 39623 - 11905: 0xF36E, + 39624 - 11905: 0xF36F, + 39625 - 11905: 0xF370, + 39626 - 11905: 0xF371, + 39627 - 11905: 0xF7C5, + 39628 - 11905: 0xF7C6, + 39629 - 11905: 0xF372, + 39630 - 11905: 0xF373, + 39631 - 11905: 0xF374, + 39632 - 11905: 0xF375, + 39633 - 11905: 0xF7C7, + 39634 - 11905: 0xF376, + 39635 - 11905: 0xCBE8, + 39636 - 11905: 0xF377, + 39637 - 11905: 0xF378, + 39638 - 11905: 0xF379, + 39639 - 11905: 0xF37A, + 39640 - 11905: 0xB8DF, + 39641 - 11905: 0xF37B, + 39642 - 11905: 0xF37C, + 39643 - 11905: 0xF37D, + 39644 - 11905: 0xF37E, + 39645 - 11905: 0xF380, + 39646 - 11905: 0xF381, + 39647 - 11905: 0xF7D4, + 39648 - 11905: 0xF382, + 39649 - 11905: 0xF7D5, + 39650 - 11905: 0xF383, + 39651 - 11905: 0xF384, + 39652 - 11905: 0xF385, + 39653 - 11905: 0xF386, + 39654 - 11905: 0xF7D6, + 39655 - 11905: 0xF387, + 39656 - 11905: 0xF388, + 39657 - 11905: 0xF389, + 39658 - 11905: 0xF38A, + 39659 - 11905: 0xF7D8, + 39660 - 11905: 0xF38B, + 39661 - 11905: 0xF7DA, + 39662 - 11905: 0xF38C, + 39663 - 11905: 0xF7D7, + 39664 - 11905: 0xF38D, + 39665 - 11905: 0xF38E, + 39666 - 11905: 0xF38F, + 39667 - 11905: 0xF390, + 39668 - 11905: 0xF391, + 39669 - 11905: 0xF392, + 39670 - 11905: 0xF393, + 39671 - 11905: 0xF394, + 39672 - 11905: 0xF395, + 39673 - 11905: 0xF7DB, + 39674 - 11905: 0xF396, + 39675 - 11905: 0xF7D9, + 39676 - 11905: 0xF397, + 39677 - 11905: 0xF398, + 39678 - 11905: 0xF399, + 39679 - 11905: 0xF39A, + 39680 - 11905: 0xF39B, + 39681 - 11905: 0xF39C, + 39682 - 11905: 0xF39D, + 39683 - 11905: 0xD7D7, + 39684 - 11905: 0xF39E, + 39685 - 11905: 0xF39F, + 39686 - 11905: 0xF3A0, + 39687 - 11905: 0xF440, + 39688 - 11905: 0xF7DC, + 39689 - 11905: 0xF441, + 39690 - 11905: 0xF442, + 39691 - 11905: 0xF443, + 39692 - 11905: 0xF444, + 39693 - 11905: 0xF445, + 39694 - 11905: 0xF446, + 39695 - 11905: 0xF7DD, + 39696 - 11905: 0xF447, + 39697 - 11905: 0xF448, + 39698 - 11905: 0xF449, + 39699 - 11905: 0xF7DE, + 39700 - 11905: 0xF44A, + 39701 - 11905: 0xF44B, + 39702 - 11905: 0xF44C, + 39703 - 11905: 0xF44D, + 39704 - 11905: 0xF44E, + 39705 - 11905: 0xF44F, + 39706 - 11905: 0xF450, + 39707 - 11905: 0xF451, + 39708 - 11905: 0xF452, + 39709 - 11905: 0xF453, + 39710 - 11905: 0xF454, + 39711 - 11905: 0xF7DF, + 39712 - 11905: 0xF455, + 39713 - 11905: 0xF456, + 39714 - 11905: 0xF457, + 39715 - 11905: 0xF7E0, + 39716 - 11905: 0xF458, + 39717 - 11905: 0xF459, + 39718 - 11905: 0xF45A, + 39719 - 11905: 0xF45B, + 39720 - 11905: 0xF45C, + 39721 - 11905: 0xF45D, + 39722 - 11905: 0xF45E, + 39723 - 11905: 0xF45F, + 39724 - 11905: 0xF460, + 39725 - 11905: 0xF461, + 39726 - 11905: 0xF462, + 39727 - 11905: 0xDBCB, + 39728 - 11905: 0xF463, + 39729 - 11905: 0xF464, + 39730 - 11905: 0xD8AA, + 39731 - 11905: 0xF465, + 39732 - 11905: 0xF466, + 39733 - 11905: 0xF467, + 39734 - 11905: 0xF468, + 39735 - 11905: 0xF469, + 39736 - 11905: 0xF46A, + 39737 - 11905: 0xF46B, + 39738 - 11905: 0xF46C, + 39739 - 11905: 0xE5F7, + 39740 - 11905: 0xB9ED, + 39741 - 11905: 0xF46D, + 39742 - 11905: 0xF46E, + 39743 - 11905: 0xF46F, + 39744 - 11905: 0xF470, + 39745 - 11905: 0xBFFD, + 39746 - 11905: 0xBBEA, + 39747 - 11905: 0xF7C9, + 39748 - 11905: 0xC6C7, + 39749 - 11905: 0xF7C8, + 39750 - 11905: 0xF471, + 39751 - 11905: 0xF7CA, + 39752 - 11905: 0xF7CC, + 39753 - 11905: 0xF7CB, + 39754 - 11905: 0xF472, + 39755 - 11905: 0xF473, + 39756 - 11905: 0xF474, + 39757 - 11905: 0xF7CD, + 39758 - 11905: 0xF475, + 39759 - 11905: 0xCEBA, + 39760 - 11905: 0xF476, + 39761 - 11905: 0xF7CE, + 39762 - 11905: 0xF477, + 39763 - 11905: 0xF478, + 39764 - 11905: 0xC4A7, + 39765 - 11905: 0xF479, + 39766 - 11905: 0xF47A, + 39767 - 11905: 0xF47B, + 39768 - 11905: 0xF47C, + 39769 - 11905: 0xF47D, + 39770 - 11905: 0xF47E, + 39771 - 11905: 0xF480, + 39772 - 11905: 0xF481, + 39773 - 11905: 0xF482, + 39774 - 11905: 0xF483, + 39775 - 11905: 0xF484, + 39776 - 11905: 0xF485, + 39777 - 11905: 0xF486, + 39778 - 11905: 0xF487, + 39779 - 11905: 0xF488, + 39780 - 11905: 0xF489, + 39781 - 11905: 0xF48A, + 39782 - 11905: 0xF48B, + 39783 - 11905: 0xF48C, + 39784 - 11905: 0xF48D, + 39785 - 11905: 0xF48E, + 39786 - 11905: 0xF48F, + 39787 - 11905: 0xF490, + 39788 - 11905: 0xF491, + 39789 - 11905: 0xF492, + 39790 - 11905: 0xF493, + 39791 - 11905: 0xF494, + 39792 - 11905: 0xF495, + 39793 - 11905: 0xF496, + 39794 - 11905: 0xF497, + 39795 - 11905: 0xF498, + 39796 - 11905: 0xF499, + 39797 - 11905: 0xF49A, + 39798 - 11905: 0xF49B, + 39799 - 11905: 0xF49C, + 39800 - 11905: 0xF49D, + 39801 - 11905: 0xF49E, + 39802 - 11905: 0xF49F, + 39803 - 11905: 0xF4A0, + 39804 - 11905: 0xF540, + 39805 - 11905: 0xF541, + 39806 - 11905: 0xF542, + 39807 - 11905: 0xF543, + 39808 - 11905: 0xF544, + 39809 - 11905: 0xF545, + 39810 - 11905: 0xF546, + 39811 - 11905: 0xF547, + 39812 - 11905: 0xF548, + 39813 - 11905: 0xF549, + 39814 - 11905: 0xF54A, + 39815 - 11905: 0xF54B, + 39816 - 11905: 0xF54C, + 39817 - 11905: 0xF54D, + 39818 - 11905: 0xF54E, + 39819 - 11905: 0xF54F, + 39820 - 11905: 0xF550, + 39821 - 11905: 0xF551, + 39822 - 11905: 0xF552, + 39823 - 11905: 0xF553, + 39824 - 11905: 0xF554, + 39825 - 11905: 0xF555, + 39826 - 11905: 0xF556, + 39827 - 11905: 0xF557, + 39828 - 11905: 0xF558, + 39829 - 11905: 0xF559, + 39830 - 11905: 0xF55A, + 39831 - 11905: 0xF55B, + 39832 - 11905: 0xF55C, + 39833 - 11905: 0xF55D, + 39834 - 11905: 0xF55E, + 39835 - 11905: 0xF55F, + 39836 - 11905: 0xF560, + 39837 - 11905: 0xF561, + 39838 - 11905: 0xF562, + 39839 - 11905: 0xF563, + 39840 - 11905: 0xF564, + 39841 - 11905: 0xF565, + 39842 - 11905: 0xF566, + 39843 - 11905: 0xF567, + 39844 - 11905: 0xF568, + 39845 - 11905: 0xF569, + 39846 - 11905: 0xF56A, + 39847 - 11905: 0xF56B, + 39848 - 11905: 0xF56C, + 39849 - 11905: 0xF56D, + 39850 - 11905: 0xF56E, + 39851 - 11905: 0xF56F, + 39852 - 11905: 0xF570, + 39853 - 11905: 0xF571, + 39854 - 11905: 0xF572, + 39855 - 11905: 0xF573, + 39856 - 11905: 0xF574, + 39857 - 11905: 0xF575, + 39858 - 11905: 0xF576, + 39859 - 11905: 0xF577, + 39860 - 11905: 0xF578, + 39861 - 11905: 0xF579, + 39862 - 11905: 0xF57A, + 39863 - 11905: 0xF57B, + 39864 - 11905: 0xF57C, + 39865 - 11905: 0xF57D, + 39866 - 11905: 0xF57E, + 39867 - 11905: 0xF580, + 39868 - 11905: 0xF581, + 39869 - 11905: 0xF582, + 39870 - 11905: 0xF583, + 39871 - 11905: 0xF584, + 39872 - 11905: 0xF585, + 39873 - 11905: 0xF586, + 39874 - 11905: 0xF587, + 39875 - 11905: 0xF588, + 39876 - 11905: 0xF589, + 39877 - 11905: 0xF58A, + 39878 - 11905: 0xF58B, + 39879 - 11905: 0xF58C, + 39880 - 11905: 0xF58D, + 39881 - 11905: 0xF58E, + 39882 - 11905: 0xF58F, + 39883 - 11905: 0xF590, + 39884 - 11905: 0xF591, + 39885 - 11905: 0xF592, + 39886 - 11905: 0xF593, + 39887 - 11905: 0xF594, + 39888 - 11905: 0xF595, + 39889 - 11905: 0xF596, + 39890 - 11905: 0xF597, + 39891 - 11905: 0xF598, + 39892 - 11905: 0xF599, + 39893 - 11905: 0xF59A, + 39894 - 11905: 0xF59B, + 39895 - 11905: 0xF59C, + 39896 - 11905: 0xF59D, + 39897 - 11905: 0xF59E, + 39898 - 11905: 0xF59F, + 39899 - 11905: 0xF5A0, + 39900 - 11905: 0xF640, + 39901 - 11905: 0xF641, + 39902 - 11905: 0xF642, + 39903 - 11905: 0xF643, + 39904 - 11905: 0xF644, + 39905 - 11905: 0xF645, + 39906 - 11905: 0xF646, + 39907 - 11905: 0xF647, + 39908 - 11905: 0xF648, + 39909 - 11905: 0xF649, + 39910 - 11905: 0xF64A, + 39911 - 11905: 0xF64B, + 39912 - 11905: 0xF64C, + 39913 - 11905: 0xF64D, + 39914 - 11905: 0xF64E, + 39915 - 11905: 0xF64F, + 39916 - 11905: 0xF650, + 39917 - 11905: 0xF651, + 39918 - 11905: 0xF652, + 39919 - 11905: 0xF653, + 39920 - 11905: 0xF654, + 39921 - 11905: 0xF655, + 39922 - 11905: 0xF656, + 39923 - 11905: 0xF657, + 39924 - 11905: 0xF658, + 39925 - 11905: 0xF659, + 39926 - 11905: 0xF65A, + 39927 - 11905: 0xF65B, + 39928 - 11905: 0xF65C, + 39929 - 11905: 0xF65D, + 39930 - 11905: 0xF65E, + 39931 - 11905: 0xF65F, + 39932 - 11905: 0xF660, + 39933 - 11905: 0xF661, + 39934 - 11905: 0xF662, + 39935 - 11905: 0xF663, + 39936 - 11905: 0xF664, + 39937 - 11905: 0xF665, + 39938 - 11905: 0xF666, + 39939 - 11905: 0xF667, + 39940 - 11905: 0xF668, + 39941 - 11905: 0xF669, + 39942 - 11905: 0xF66A, + 39943 - 11905: 0xF66B, + 39944 - 11905: 0xF66C, + 39945 - 11905: 0xF66D, + 39946 - 11905: 0xF66E, + 39947 - 11905: 0xF66F, + 39948 - 11905: 0xF670, + 39949 - 11905: 0xF671, + 39950 - 11905: 0xF672, + 39951 - 11905: 0xF673, + 39952 - 11905: 0xF674, + 39953 - 11905: 0xF675, + 39954 - 11905: 0xF676, + 39955 - 11905: 0xF677, + 39956 - 11905: 0xF678, + 39957 - 11905: 0xF679, + 39958 - 11905: 0xF67A, + 39959 - 11905: 0xF67B, + 39960 - 11905: 0xF67C, + 39961 - 11905: 0xF67D, + 39962 - 11905: 0xF67E, + 39963 - 11905: 0xF680, + 39964 - 11905: 0xF681, + 39965 - 11905: 0xF682, + 39966 - 11905: 0xF683, + 39967 - 11905: 0xF684, + 39968 - 11905: 0xF685, + 39969 - 11905: 0xF686, + 39970 - 11905: 0xF687, + 39971 - 11905: 0xF688, + 39972 - 11905: 0xF689, + 39973 - 11905: 0xF68A, + 39974 - 11905: 0xF68B, + 39975 - 11905: 0xF68C, + 39976 - 11905: 0xF68D, + 39977 - 11905: 0xF68E, + 39978 - 11905: 0xF68F, + 39979 - 11905: 0xF690, + 39980 - 11905: 0xF691, + 39981 - 11905: 0xF692, + 39982 - 11905: 0xF693, + 39983 - 11905: 0xF694, + 39984 - 11905: 0xF695, + 39985 - 11905: 0xF696, + 39986 - 11905: 0xF697, + 39987 - 11905: 0xF698, + 39988 - 11905: 0xF699, + 39989 - 11905: 0xF69A, + 39990 - 11905: 0xF69B, + 39991 - 11905: 0xF69C, + 39992 - 11905: 0xF69D, + 39993 - 11905: 0xF69E, + 39994 - 11905: 0xF69F, + 39995 - 11905: 0xF6A0, + 39996 - 11905: 0xF740, + 39997 - 11905: 0xF741, + 39998 - 11905: 0xF742, + 39999 - 11905: 0xF743, + 40000 - 11905: 0xF744, + 40001 - 11905: 0xF745, + 40002 - 11905: 0xF746, + 40003 - 11905: 0xF747, + 40004 - 11905: 0xF748, + 40005 - 11905: 0xF749, + 40006 - 11905: 0xF74A, + 40007 - 11905: 0xF74B, + 40008 - 11905: 0xF74C, + 40009 - 11905: 0xF74D, + 40010 - 11905: 0xF74E, + 40011 - 11905: 0xF74F, + 40012 - 11905: 0xF750, + 40013 - 11905: 0xF751, + 40014 - 11905: 0xF752, + 40015 - 11905: 0xF753, + 40016 - 11905: 0xF754, + 40017 - 11905: 0xF755, + 40018 - 11905: 0xF756, + 40019 - 11905: 0xF757, + 40020 - 11905: 0xF758, + 40021 - 11905: 0xF759, + 40022 - 11905: 0xF75A, + 40023 - 11905: 0xF75B, + 40024 - 11905: 0xF75C, + 40025 - 11905: 0xF75D, + 40026 - 11905: 0xF75E, + 40027 - 11905: 0xF75F, + 40028 - 11905: 0xF760, + 40029 - 11905: 0xF761, + 40030 - 11905: 0xF762, + 40031 - 11905: 0xF763, + 40032 - 11905: 0xF764, + 40033 - 11905: 0xF765, + 40034 - 11905: 0xF766, + 40035 - 11905: 0xF767, + 40036 - 11905: 0xF768, + 40037 - 11905: 0xF769, + 40038 - 11905: 0xF76A, + 40039 - 11905: 0xF76B, + 40040 - 11905: 0xF76C, + 40041 - 11905: 0xF76D, + 40042 - 11905: 0xF76E, + 40043 - 11905: 0xF76F, + 40044 - 11905: 0xF770, + 40045 - 11905: 0xF771, + 40046 - 11905: 0xF772, + 40047 - 11905: 0xF773, + 40048 - 11905: 0xF774, + 40049 - 11905: 0xF775, + 40050 - 11905: 0xF776, + 40051 - 11905: 0xF777, + 40052 - 11905: 0xF778, + 40053 - 11905: 0xF779, + 40054 - 11905: 0xF77A, + 40055 - 11905: 0xF77B, + 40056 - 11905: 0xF77C, + 40057 - 11905: 0xF77D, + 40058 - 11905: 0xF77E, + 40059 - 11905: 0xF780, + 40060 - 11905: 0xD3E3, + 40061 - 11905: 0xF781, + 40062 - 11905: 0xF782, + 40063 - 11905: 0xF6CF, + 40064 - 11905: 0xF783, + 40065 - 11905: 0xC2B3, + 40066 - 11905: 0xF6D0, + 40067 - 11905: 0xF784, + 40068 - 11905: 0xF785, + 40069 - 11905: 0xF6D1, + 40070 - 11905: 0xF6D2, + 40071 - 11905: 0xF6D3, + 40072 - 11905: 0xF6D4, + 40073 - 11905: 0xF786, + 40074 - 11905: 0xF787, + 40075 - 11905: 0xF6D6, + 40076 - 11905: 0xF788, + 40077 - 11905: 0xB1AB, + 40078 - 11905: 0xF6D7, + 40079 - 11905: 0xF789, + 40080 - 11905: 0xF6D8, + 40081 - 11905: 0xF6D9, + 40082 - 11905: 0xF6DA, + 40083 - 11905: 0xF78A, + 40084 - 11905: 0xF6DB, + 40085 - 11905: 0xF6DC, + 40086 - 11905: 0xF78B, + 40087 - 11905: 0xF78C, + 40088 - 11905: 0xF78D, + 40089 - 11905: 0xF78E, + 40090 - 11905: 0xF6DD, + 40091 - 11905: 0xF6DE, + 40092 - 11905: 0xCFCA, + 40093 - 11905: 0xF78F, + 40094 - 11905: 0xF6DF, + 40095 - 11905: 0xF6E0, + 40096 - 11905: 0xF6E1, + 40097 - 11905: 0xF6E2, + 40098 - 11905: 0xF6E3, + 40099 - 11905: 0xF6E4, + 40100 - 11905: 0xC0F0, + 40101 - 11905: 0xF6E5, + 40102 - 11905: 0xF6E6, + 40103 - 11905: 0xF6E7, + 40104 - 11905: 0xF6E8, + 40105 - 11905: 0xF6E9, + 40106 - 11905: 0xF790, + 40107 - 11905: 0xF6EA, + 40108 - 11905: 0xF791, + 40109 - 11905: 0xF6EB, + 40110 - 11905: 0xF6EC, + 40111 - 11905: 0xF792, + 40112 - 11905: 0xF6ED, + 40113 - 11905: 0xF6EE, + 40114 - 11905: 0xF6EF, + 40115 - 11905: 0xF6F0, + 40116 - 11905: 0xF6F1, + 40117 - 11905: 0xF6F2, + 40118 - 11905: 0xF6F3, + 40119 - 11905: 0xF6F4, + 40120 - 11905: 0xBEA8, + 40121 - 11905: 0xF793, + 40122 - 11905: 0xF6F5, + 40123 - 11905: 0xF6F6, + 40124 - 11905: 0xF6F7, + 40125 - 11905: 0xF6F8, + 40126 - 11905: 0xF794, + 40127 - 11905: 0xF795, + 40128 - 11905: 0xF796, + 40129 - 11905: 0xF797, + 40130 - 11905: 0xF798, + 40131 - 11905: 0xC8FA, + 40132 - 11905: 0xF6F9, + 40133 - 11905: 0xF6FA, + 40134 - 11905: 0xF6FB, + 40135 - 11905: 0xF6FC, + 40136 - 11905: 0xF799, + 40137 - 11905: 0xF79A, + 40138 - 11905: 0xF6FD, + 40139 - 11905: 0xF6FE, + 40140 - 11905: 0xF7A1, + 40141 - 11905: 0xF7A2, + 40142 - 11905: 0xF7A3, + 40143 - 11905: 0xF7A4, + 40144 - 11905: 0xF7A5, + 40145 - 11905: 0xF79B, + 40146 - 11905: 0xF79C, + 40147 - 11905: 0xF7A6, + 40148 - 11905: 0xF7A7, + 40149 - 11905: 0xF7A8, + 40150 - 11905: 0xB1EE, + 40151 - 11905: 0xF7A9, + 40152 - 11905: 0xF7AA, + 40153 - 11905: 0xF7AB, + 40154 - 11905: 0xF79D, + 40155 - 11905: 0xF79E, + 40156 - 11905: 0xF7AC, + 40157 - 11905: 0xF7AD, + 40158 - 11905: 0xC1DB, + 40159 - 11905: 0xF7AE, + 40160 - 11905: 0xF79F, + 40161 - 11905: 0xF7A0, + 40162 - 11905: 0xF7AF, + 40163 - 11905: 0xF840, + 40164 - 11905: 0xF841, + 40165 - 11905: 0xF842, + 40166 - 11905: 0xF843, + 40167 - 11905: 0xF844, + 40168 - 11905: 0xF845, + 40169 - 11905: 0xF846, + 40170 - 11905: 0xF847, + 40171 - 11905: 0xF848, + 40172 - 11905: 0xF849, + 40173 - 11905: 0xF84A, + 40174 - 11905: 0xF84B, + 40175 - 11905: 0xF84C, + 40176 - 11905: 0xF84D, + 40177 - 11905: 0xF84E, + 40178 - 11905: 0xF84F, + 40179 - 11905: 0xF850, + 40180 - 11905: 0xF851, + 40181 - 11905: 0xF852, + 40182 - 11905: 0xF853, + 40183 - 11905: 0xF854, + 40184 - 11905: 0xF855, + 40185 - 11905: 0xF856, + 40186 - 11905: 0xF857, + 40187 - 11905: 0xF858, + 40188 - 11905: 0xF859, + 40189 - 11905: 0xF85A, + 40190 - 11905: 0xF85B, + 40191 - 11905: 0xF85C, + 40192 - 11905: 0xF85D, + 40193 - 11905: 0xF85E, + 40194 - 11905: 0xF85F, + 40195 - 11905: 0xF860, + 40196 - 11905: 0xF861, + 40197 - 11905: 0xF862, + 40198 - 11905: 0xF863, + 40199 - 11905: 0xF864, + 40200 - 11905: 0xF865, + 40201 - 11905: 0xF866, + 40202 - 11905: 0xF867, + 40203 - 11905: 0xF868, + 40204 - 11905: 0xF869, + 40205 - 11905: 0xF86A, + 40206 - 11905: 0xF86B, + 40207 - 11905: 0xF86C, + 40208 - 11905: 0xF86D, + 40209 - 11905: 0xF86E, + 40210 - 11905: 0xF86F, + 40211 - 11905: 0xF870, + 40212 - 11905: 0xF871, + 40213 - 11905: 0xF872, + 40214 - 11905: 0xF873, + 40215 - 11905: 0xF874, + 40216 - 11905: 0xF875, + 40217 - 11905: 0xF876, + 40218 - 11905: 0xF877, + 40219 - 11905: 0xF878, + 40220 - 11905: 0xF879, + 40221 - 11905: 0xF87A, + 40222 - 11905: 0xF87B, + 40223 - 11905: 0xF87C, + 40224 - 11905: 0xF87D, + 40225 - 11905: 0xF87E, + 40226 - 11905: 0xF880, + 40227 - 11905: 0xF881, + 40228 - 11905: 0xF882, + 40229 - 11905: 0xF883, + 40230 - 11905: 0xF884, + 40231 - 11905: 0xF885, + 40232 - 11905: 0xF886, + 40233 - 11905: 0xF887, + 40234 - 11905: 0xF888, + 40235 - 11905: 0xF889, + 40236 - 11905: 0xF88A, + 40237 - 11905: 0xF88B, + 40238 - 11905: 0xF88C, + 40239 - 11905: 0xF88D, + 40240 - 11905: 0xF88E, + 40241 - 11905: 0xF88F, + 40242 - 11905: 0xF890, + 40243 - 11905: 0xF891, + 40244 - 11905: 0xF892, + 40245 - 11905: 0xF893, + 40246 - 11905: 0xF894, + 40247 - 11905: 0xF895, + 40248 - 11905: 0xF896, + 40249 - 11905: 0xF897, + 40250 - 11905: 0xF898, + 40251 - 11905: 0xF899, + 40252 - 11905: 0xF89A, + 40253 - 11905: 0xF89B, + 40254 - 11905: 0xF89C, + 40255 - 11905: 0xF89D, + 40256 - 11905: 0xF89E, + 40257 - 11905: 0xF89F, + 40258 - 11905: 0xF8A0, + 40259 - 11905: 0xF940, + 40260 - 11905: 0xF941, + 40261 - 11905: 0xF942, + 40262 - 11905: 0xF943, + 40263 - 11905: 0xF944, + 40264 - 11905: 0xF945, + 40265 - 11905: 0xF946, + 40266 - 11905: 0xF947, + 40267 - 11905: 0xF948, + 40268 - 11905: 0xF949, + 40269 - 11905: 0xF94A, + 40270 - 11905: 0xF94B, + 40271 - 11905: 0xF94C, + 40272 - 11905: 0xF94D, + 40273 - 11905: 0xF94E, + 40274 - 11905: 0xF94F, + 40275 - 11905: 0xF950, + 40276 - 11905: 0xF951, + 40277 - 11905: 0xF952, + 40278 - 11905: 0xF953, + 40279 - 11905: 0xF954, + 40280 - 11905: 0xF955, + 40281 - 11905: 0xF956, + 40282 - 11905: 0xF957, + 40283 - 11905: 0xF958, + 40284 - 11905: 0xF959, + 40285 - 11905: 0xF95A, + 40286 - 11905: 0xF95B, + 40287 - 11905: 0xF95C, + 40288 - 11905: 0xF95D, + 40289 - 11905: 0xF95E, + 40290 - 11905: 0xF95F, + 40291 - 11905: 0xF960, + 40292 - 11905: 0xF961, + 40293 - 11905: 0xF962, + 40294 - 11905: 0xF963, + 40295 - 11905: 0xF964, + 40296 - 11905: 0xF965, + 40297 - 11905: 0xF966, + 40298 - 11905: 0xF967, + 40299 - 11905: 0xF968, + 40300 - 11905: 0xF969, + 40301 - 11905: 0xF96A, + 40302 - 11905: 0xF96B, + 40303 - 11905: 0xF96C, + 40304 - 11905: 0xF96D, + 40305 - 11905: 0xF96E, + 40306 - 11905: 0xF96F, + 40307 - 11905: 0xF970, + 40308 - 11905: 0xF971, + 40309 - 11905: 0xF972, + 40310 - 11905: 0xF973, + 40311 - 11905: 0xF974, + 40312 - 11905: 0xF975, + 40313 - 11905: 0xF976, + 40314 - 11905: 0xF977, + 40315 - 11905: 0xF978, + 40316 - 11905: 0xF979, + 40317 - 11905: 0xF97A, + 40318 - 11905: 0xF97B, + 40319 - 11905: 0xF97C, + 40320 - 11905: 0xF97D, + 40321 - 11905: 0xF97E, + 40322 - 11905: 0xF980, + 40323 - 11905: 0xF981, + 40324 - 11905: 0xF982, + 40325 - 11905: 0xF983, + 40326 - 11905: 0xF984, + 40327 - 11905: 0xF985, + 40328 - 11905: 0xF986, + 40329 - 11905: 0xF987, + 40330 - 11905: 0xF988, + 40331 - 11905: 0xF989, + 40332 - 11905: 0xF98A, + 40333 - 11905: 0xF98B, + 40334 - 11905: 0xF98C, + 40335 - 11905: 0xF98D, + 40336 - 11905: 0xF98E, + 40337 - 11905: 0xF98F, + 40338 - 11905: 0xF990, + 40339 - 11905: 0xF991, + 40340 - 11905: 0xF992, + 40341 - 11905: 0xF993, + 40342 - 11905: 0xF994, + 40343 - 11905: 0xF995, + 40344 - 11905: 0xF996, + 40345 - 11905: 0xF997, + 40346 - 11905: 0xF998, + 40347 - 11905: 0xF999, + 40348 - 11905: 0xF99A, + 40349 - 11905: 0xF99B, + 40350 - 11905: 0xF99C, + 40351 - 11905: 0xF99D, + 40352 - 11905: 0xF99E, + 40353 - 11905: 0xF99F, + 40354 - 11905: 0xF9A0, + 40355 - 11905: 0xFA40, + 40356 - 11905: 0xFA41, + 40357 - 11905: 0xFA42, + 40358 - 11905: 0xFA43, + 40359 - 11905: 0xFA44, + 40360 - 11905: 0xFA45, + 40361 - 11905: 0xFA46, + 40362 - 11905: 0xFA47, + 40363 - 11905: 0xFA48, + 40364 - 11905: 0xFA49, + 40365 - 11905: 0xFA4A, + 40366 - 11905: 0xFA4B, + 40367 - 11905: 0xFA4C, + 40368 - 11905: 0xFA4D, + 40369 - 11905: 0xFA4E, + 40370 - 11905: 0xFA4F, + 40371 - 11905: 0xFA50, + 40372 - 11905: 0xFA51, + 40373 - 11905: 0xFA52, + 40374 - 11905: 0xFA53, + 40375 - 11905: 0xFA54, + 40376 - 11905: 0xFA55, + 40377 - 11905: 0xFA56, + 40378 - 11905: 0xFA57, + 40379 - 11905: 0xFA58, + 40380 - 11905: 0xFA59, + 40381 - 11905: 0xFA5A, + 40382 - 11905: 0xFA5B, + 40383 - 11905: 0xFA5C, + 40384 - 11905: 0xFA5D, + 40385 - 11905: 0xFA5E, + 40386 - 11905: 0xFA5F, + 40387 - 11905: 0xFA60, + 40388 - 11905: 0xFA61, + 40389 - 11905: 0xFA62, + 40390 - 11905: 0xFA63, + 40391 - 11905: 0xFA64, + 40392 - 11905: 0xFA65, + 40393 - 11905: 0xFA66, + 40394 - 11905: 0xFA67, + 40395 - 11905: 0xFA68, + 40396 - 11905: 0xFA69, + 40397 - 11905: 0xFA6A, + 40398 - 11905: 0xFA6B, + 40399 - 11905: 0xFA6C, + 40400 - 11905: 0xFA6D, + 40401 - 11905: 0xFA6E, + 40402 - 11905: 0xFA6F, + 40403 - 11905: 0xFA70, + 40404 - 11905: 0xFA71, + 40405 - 11905: 0xFA72, + 40406 - 11905: 0xFA73, + 40407 - 11905: 0xFA74, + 40408 - 11905: 0xFA75, + 40409 - 11905: 0xFA76, + 40410 - 11905: 0xFA77, + 40411 - 11905: 0xFA78, + 40412 - 11905: 0xFA79, + 40413 - 11905: 0xFA7A, + 40414 - 11905: 0xFA7B, + 40415 - 11905: 0xFA7C, + 40416 - 11905: 0xFA7D, + 40417 - 11905: 0xFA7E, + 40418 - 11905: 0xFA80, + 40419 - 11905: 0xFA81, + 40420 - 11905: 0xFA82, + 40421 - 11905: 0xFA83, + 40422 - 11905: 0xFA84, + 40423 - 11905: 0xFA85, + 40424 - 11905: 0xFA86, + 40425 - 11905: 0xFA87, + 40426 - 11905: 0xFA88, + 40427 - 11905: 0xFA89, + 40428 - 11905: 0xFA8A, + 40429 - 11905: 0xFA8B, + 40430 - 11905: 0xFA8C, + 40431 - 11905: 0xFA8D, + 40432 - 11905: 0xFA8E, + 40433 - 11905: 0xFA8F, + 40434 - 11905: 0xFA90, + 40435 - 11905: 0xFA91, + 40436 - 11905: 0xFA92, + 40437 - 11905: 0xFA93, + 40438 - 11905: 0xFA94, + 40439 - 11905: 0xFA95, + 40440 - 11905: 0xFA96, + 40441 - 11905: 0xFA97, + 40442 - 11905: 0xFA98, + 40443 - 11905: 0xFA99, + 40444 - 11905: 0xFA9A, + 40445 - 11905: 0xFA9B, + 40446 - 11905: 0xFA9C, + 40447 - 11905: 0xFA9D, + 40448 - 11905: 0xFA9E, + 40449 - 11905: 0xFA9F, + 40450 - 11905: 0xFAA0, + 40451 - 11905: 0xFB40, + 40452 - 11905: 0xFB41, + 40453 - 11905: 0xFB42, + 40454 - 11905: 0xFB43, + 40455 - 11905: 0xFB44, + 40456 - 11905: 0xFB45, + 40457 - 11905: 0xFB46, + 40458 - 11905: 0xFB47, + 40459 - 11905: 0xFB48, + 40460 - 11905: 0xFB49, + 40461 - 11905: 0xFB4A, + 40462 - 11905: 0xFB4B, + 40463 - 11905: 0xFB4C, + 40464 - 11905: 0xFB4D, + 40465 - 11905: 0xFB4E, + 40466 - 11905: 0xFB4F, + 40467 - 11905: 0xFB50, + 40468 - 11905: 0xFB51, + 40469 - 11905: 0xFB52, + 40470 - 11905: 0xFB53, + 40471 - 11905: 0xFB54, + 40472 - 11905: 0xFB55, + 40473 - 11905: 0xFB56, + 40474 - 11905: 0xFB57, + 40475 - 11905: 0xFB58, + 40476 - 11905: 0xFB59, + 40477 - 11905: 0xFB5A, + 40478 - 11905: 0xFB5B, + 40479 - 11905: 0xC4F1, + 40480 - 11905: 0xF0AF, + 40481 - 11905: 0xBCA6, + 40482 - 11905: 0xF0B0, + 40483 - 11905: 0xC3F9, + 40484 - 11905: 0xFB5C, + 40485 - 11905: 0xC5B8, + 40486 - 11905: 0xD1BB, + 40487 - 11905: 0xFB5D, + 40488 - 11905: 0xF0B1, + 40489 - 11905: 0xF0B2, + 40490 - 11905: 0xF0B3, + 40491 - 11905: 0xF0B4, + 40492 - 11905: 0xF0B5, + 40493 - 11905: 0xD1BC, + 40494 - 11905: 0xFB5E, + 40495 - 11905: 0xD1EC, + 40496 - 11905: 0xFB5F, + 40497 - 11905: 0xF0B7, + 40498 - 11905: 0xF0B6, + 40499 - 11905: 0xD4A7, + 40500 - 11905: 0xFB60, + 40501 - 11905: 0xCDD2, + 40502 - 11905: 0xF0B8, + 40503 - 11905: 0xF0BA, + 40504 - 11905: 0xF0B9, + 40505 - 11905: 0xF0BB, + 40506 - 11905: 0xF0BC, + 40507 - 11905: 0xFB61, + 40508 - 11905: 0xFB62, + 40509 - 11905: 0xB8EB, + 40510 - 11905: 0xF0BD, + 40511 - 11905: 0xBAE8, + 40512 - 11905: 0xFB63, + 40513 - 11905: 0xF0BE, + 40514 - 11905: 0xF0BF, + 40515 - 11905: 0xBEE9, + 40516 - 11905: 0xF0C0, + 40517 - 11905: 0xB6EC, + 40518 - 11905: 0xF0C1, + 40519 - 11905: 0xF0C2, + 40520 - 11905: 0xF0C3, + 40521 - 11905: 0xF0C4, + 40522 - 11905: 0xC8B5, + 40523 - 11905: 0xF0C5, + 40524 - 11905: 0xF0C6, + 40525 - 11905: 0xFB64, + 40526 - 11905: 0xF0C7, + 40527 - 11905: 0xC5F4, + 40528 - 11905: 0xFB65, + 40529 - 11905: 0xF0C8, + 40530 - 11905: 0xFB66, + 40531 - 11905: 0xFB67, + 40532 - 11905: 0xFB68, + 40533 - 11905: 0xF0C9, + 40534 - 11905: 0xFB69, + 40535 - 11905: 0xF0CA, + 40536 - 11905: 0xF7BD, + 40537 - 11905: 0xFB6A, + 40538 - 11905: 0xF0CB, + 40539 - 11905: 0xF0CC, + 40540 - 11905: 0xF0CD, + 40541 - 11905: 0xFB6B, + 40542 - 11905: 0xF0CE, + 40543 - 11905: 0xFB6C, + 40544 - 11905: 0xFB6D, + 40545 - 11905: 0xFB6E, + 40546 - 11905: 0xFB6F, + 40547 - 11905: 0xF0CF, + 40548 - 11905: 0xBAD7, + 40549 - 11905: 0xFB70, + 40550 - 11905: 0xF0D0, + 40551 - 11905: 0xF0D1, + 40552 - 11905: 0xF0D2, + 40553 - 11905: 0xF0D3, + 40554 - 11905: 0xF0D4, + 40555 - 11905: 0xF0D5, + 40556 - 11905: 0xF0D6, + 40557 - 11905: 0xF0D8, + 40558 - 11905: 0xFB71, + 40559 - 11905: 0xFB72, + 40560 - 11905: 0xD3A5, + 40561 - 11905: 0xF0D7, + 40562 - 11905: 0xFB73, + 40563 - 11905: 0xF0D9, + 40564 - 11905: 0xFB74, + 40565 - 11905: 0xFB75, + 40566 - 11905: 0xFB76, + 40567 - 11905: 0xFB77, + 40568 - 11905: 0xFB78, + 40569 - 11905: 0xFB79, + 40570 - 11905: 0xFB7A, + 40571 - 11905: 0xFB7B, + 40572 - 11905: 0xFB7C, + 40573 - 11905: 0xFB7D, + 40574 - 11905: 0xF5BA, + 40575 - 11905: 0xC2B9, + 40576 - 11905: 0xFB7E, + 40577 - 11905: 0xFB80, + 40578 - 11905: 0xF7E4, + 40579 - 11905: 0xFB81, + 40580 - 11905: 0xFB82, + 40581 - 11905: 0xFB83, + 40582 - 11905: 0xFB84, + 40583 - 11905: 0xF7E5, + 40584 - 11905: 0xF7E6, + 40585 - 11905: 0xFB85, + 40586 - 11905: 0xFB86, + 40587 - 11905: 0xF7E7, + 40588 - 11905: 0xFB87, + 40589 - 11905: 0xFB88, + 40590 - 11905: 0xFB89, + 40591 - 11905: 0xFB8A, + 40592 - 11905: 0xFB8B, + 40593 - 11905: 0xFB8C, + 40594 - 11905: 0xF7E8, + 40595 - 11905: 0xC2B4, + 40596 - 11905: 0xFB8D, + 40597 - 11905: 0xFB8E, + 40598 - 11905: 0xFB8F, + 40599 - 11905: 0xFB90, + 40600 - 11905: 0xFB91, + 40601 - 11905: 0xFB92, + 40602 - 11905: 0xFB93, + 40603 - 11905: 0xFB94, + 40604 - 11905: 0xFB95, + 40605 - 11905: 0xF7EA, + 40606 - 11905: 0xFB96, + 40607 - 11905: 0xF7EB, + 40608 - 11905: 0xFB97, + 40609 - 11905: 0xFB98, + 40610 - 11905: 0xFB99, + 40611 - 11905: 0xFB9A, + 40612 - 11905: 0xFB9B, + 40613 - 11905: 0xFB9C, + 40614 - 11905: 0xC2F3, + 40615 - 11905: 0xFB9D, + 40616 - 11905: 0xFB9E, + 40617 - 11905: 0xFB9F, + 40618 - 11905: 0xFBA0, + 40619 - 11905: 0xFC40, + 40620 - 11905: 0xFC41, + 40621 - 11905: 0xFC42, + 40622 - 11905: 0xFC43, + 40623 - 11905: 0xFC44, + 40624 - 11905: 0xFC45, + 40625 - 11905: 0xFC46, + 40626 - 11905: 0xFC47, + 40627 - 11905: 0xFC48, + 40628 - 11905: 0xF4F0, + 40629 - 11905: 0xFC49, + 40630 - 11905: 0xFC4A, + 40631 - 11905: 0xFC4B, + 40632 - 11905: 0xF4EF, + 40633 - 11905: 0xFC4C, + 40634 - 11905: 0xFC4D, + 40635 - 11905: 0xC2E9, + 40636 - 11905: 0xFC4E, + 40637 - 11905: 0xF7E1, + 40638 - 11905: 0xF7E2, + 40639 - 11905: 0xFC4F, + 40640 - 11905: 0xFC50, + 40641 - 11905: 0xFC51, + 40642 - 11905: 0xFC52, + 40643 - 11905: 0xFC53, + 40644 - 11905: 0xBBC6, + 40645 - 11905: 0xFC54, + 40646 - 11905: 0xFC55, + 40647 - 11905: 0xFC56, + 40648 - 11905: 0xFC57, + 40649 - 11905: 0xD9E4, + 40650 - 11905: 0xFC58, + 40651 - 11905: 0xFC59, + 40652 - 11905: 0xFC5A, + 40653 - 11905: 0xCAF2, + 40654 - 11905: 0xC0E8, + 40655 - 11905: 0xF0A4, + 40656 - 11905: 0xFC5B, + 40657 - 11905: 0xBADA, + 40658 - 11905: 0xFC5C, + 40659 - 11905: 0xFC5D, + 40660 - 11905: 0xC7AD, + 40661 - 11905: 0xFC5E, + 40662 - 11905: 0xFC5F, + 40663 - 11905: 0xFC60, + 40664 - 11905: 0xC4AC, + 40665 - 11905: 0xFC61, + 40666 - 11905: 0xFC62, + 40667 - 11905: 0xF7EC, + 40668 - 11905: 0xF7ED, + 40669 - 11905: 0xF7EE, + 40670 - 11905: 0xFC63, + 40671 - 11905: 0xF7F0, + 40672 - 11905: 0xF7EF, + 40673 - 11905: 0xFC64, + 40674 - 11905: 0xF7F1, + 40675 - 11905: 0xFC65, + 40676 - 11905: 0xFC66, + 40677 - 11905: 0xF7F4, + 40678 - 11905: 0xFC67, + 40679 - 11905: 0xF7F3, + 40680 - 11905: 0xFC68, + 40681 - 11905: 0xF7F2, + 40682 - 11905: 0xF7F5, + 40683 - 11905: 0xFC69, + 40684 - 11905: 0xFC6A, + 40685 - 11905: 0xFC6B, + 40686 - 11905: 0xFC6C, + 40687 - 11905: 0xF7F6, + 40688 - 11905: 0xFC6D, + 40689 - 11905: 0xFC6E, + 40690 - 11905: 0xFC6F, + 40691 - 11905: 0xFC70, + 40692 - 11905: 0xFC71, + 40693 - 11905: 0xFC72, + 40694 - 11905: 0xFC73, + 40695 - 11905: 0xFC74, + 40696 - 11905: 0xFC75, + 40697 - 11905: 0xEDE9, + 40698 - 11905: 0xFC76, + 40699 - 11905: 0xEDEA, + 40700 - 11905: 0xEDEB, + 40701 - 11905: 0xFC77, + 40702 - 11905: 0xF6BC, + 40703 - 11905: 0xFC78, + 40704 - 11905: 0xFC79, + 40705 - 11905: 0xFC7A, + 40706 - 11905: 0xFC7B, + 40707 - 11905: 0xFC7C, + 40708 - 11905: 0xFC7D, + 40709 - 11905: 0xFC7E, + 40710 - 11905: 0xFC80, + 40711 - 11905: 0xFC81, + 40712 - 11905: 0xFC82, + 40713 - 11905: 0xFC83, + 40714 - 11905: 0xFC84, + 40715 - 11905: 0xF6BD, + 40716 - 11905: 0xFC85, + 40717 - 11905: 0xF6BE, + 40718 - 11905: 0xB6A6, + 40719 - 11905: 0xFC86, + 40720 - 11905: 0xD8BE, + 40721 - 11905: 0xFC87, + 40722 - 11905: 0xFC88, + 40723 - 11905: 0xB9C4, + 40724 - 11905: 0xFC89, + 40725 - 11905: 0xFC8A, + 40726 - 11905: 0xFC8B, + 40727 - 11905: 0xD8BB, + 40728 - 11905: 0xFC8C, + 40729 - 11905: 0xDCB1, + 40730 - 11905: 0xFC8D, + 40731 - 11905: 0xFC8E, + 40732 - 11905: 0xFC8F, + 40733 - 11905: 0xFC90, + 40734 - 11905: 0xFC91, + 40735 - 11905: 0xFC92, + 40736 - 11905: 0xCAF3, + 40737 - 11905: 0xFC93, + 40738 - 11905: 0xF7F7, + 40739 - 11905: 0xFC94, + 40740 - 11905: 0xFC95, + 40741 - 11905: 0xFC96, + 40742 - 11905: 0xFC97, + 40743 - 11905: 0xFC98, + 40744 - 11905: 0xFC99, + 40745 - 11905: 0xFC9A, + 40746 - 11905: 0xFC9B, + 40747 - 11905: 0xFC9C, + 40748 - 11905: 0xF7F8, + 40749 - 11905: 0xFC9D, + 40750 - 11905: 0xFC9E, + 40751 - 11905: 0xF7F9, + 40752 - 11905: 0xFC9F, + 40753 - 11905: 0xFCA0, + 40754 - 11905: 0xFD40, + 40755 - 11905: 0xFD41, + 40756 - 11905: 0xFD42, + 40757 - 11905: 0xFD43, + 40758 - 11905: 0xFD44, + 40759 - 11905: 0xF7FB, + 40760 - 11905: 0xFD45, + 40761 - 11905: 0xF7FA, + 40762 - 11905: 0xFD46, + 40763 - 11905: 0xB1C7, + 40764 - 11905: 0xFD47, + 40765 - 11905: 0xF7FC, + 40766 - 11905: 0xF7FD, + 40767 - 11905: 0xFD48, + 40768 - 11905: 0xFD49, + 40769 - 11905: 0xFD4A, + 40770 - 11905: 0xFD4B, + 40771 - 11905: 0xFD4C, + 40772 - 11905: 0xF7FE, + 40773 - 11905: 0xFD4D, + 40774 - 11905: 0xFD4E, + 40775 - 11905: 0xFD4F, + 40776 - 11905: 0xFD50, + 40777 - 11905: 0xFD51, + 40778 - 11905: 0xFD52, + 40779 - 11905: 0xFD53, + 40780 - 11905: 0xFD54, + 40781 - 11905: 0xFD55, + 40782 - 11905: 0xFD56, + 40783 - 11905: 0xFD57, + 40784 - 11905: 0xC6EB, + 40785 - 11905: 0xECB4, + 40786 - 11905: 0xFD58, + 40787 - 11905: 0xFD59, + 40788 - 11905: 0xFD5A, + 40789 - 11905: 0xFD5B, + 40790 - 11905: 0xFD5C, + 40791 - 11905: 0xFD5D, + 40792 - 11905: 0xFD5E, + 40793 - 11905: 0xFD5F, + 40794 - 11905: 0xFD60, + 40795 - 11905: 0xFD61, + 40796 - 11905: 0xFD62, + 40797 - 11905: 0xFD63, + 40798 - 11905: 0xFD64, + 40799 - 11905: 0xFD65, + 40800 - 11905: 0xFD66, + 40801 - 11905: 0xFD67, + 40802 - 11905: 0xFD68, + 40803 - 11905: 0xFD69, + 40804 - 11905: 0xFD6A, + 40805 - 11905: 0xFD6B, + 40806 - 11905: 0xFD6C, + 40807 - 11905: 0xFD6D, + 40808 - 11905: 0xFD6E, + 40809 - 11905: 0xFD6F, + 40810 - 11905: 0xFD70, + 40811 - 11905: 0xFD71, + 40812 - 11905: 0xFD72, + 40813 - 11905: 0xFD73, + 40814 - 11905: 0xFD74, + 40815 - 11905: 0xFD75, + 40816 - 11905: 0xFD76, + 40817 - 11905: 0xFD77, + 40818 - 11905: 0xFD78, + 40819 - 11905: 0xFD79, + 40820 - 11905: 0xFD7A, + 40821 - 11905: 0xFD7B, + 40822 - 11905: 0xFD7C, + 40823 - 11905: 0xFD7D, + 40824 - 11905: 0xFD7E, + 40825 - 11905: 0xFD80, + 40826 - 11905: 0xFD81, + 40827 - 11905: 0xFD82, + 40828 - 11905: 0xFD83, + 40829 - 11905: 0xFD84, + 40830 - 11905: 0xFD85, + 40831 - 11905: 0xB3DD, + 40832 - 11905: 0xF6B3, + 40833 - 11905: 0xFD86, + 40834 - 11905: 0xFD87, + 40835 - 11905: 0xF6B4, + 40836 - 11905: 0xC1E4, + 40837 - 11905: 0xF6B5, + 40838 - 11905: 0xF6B6, + 40839 - 11905: 0xF6B7, + 40840 - 11905: 0xF6B8, + 40841 - 11905: 0xF6B9, + 40842 - 11905: 0xF6BA, + 40843 - 11905: 0xC8A3, + 40844 - 11905: 0xF6BB, + 40845 - 11905: 0xFD88, + 40846 - 11905: 0xFD89, + 40847 - 11905: 0xFD8A, + 40848 - 11905: 0xFD8B, + 40849 - 11905: 0xFD8C, + 40850 - 11905: 0xFD8D, + 40851 - 11905: 0xFD8E, + 40852 - 11905: 0xFD8F, + 40853 - 11905: 0xFD90, + 40854 - 11905: 0xFD91, + 40855 - 11905: 0xFD92, + 40856 - 11905: 0xFD93, + 40857 - 11905: 0xC1FA, + 40858 - 11905: 0xB9A8, + 40859 - 11905: 0xEDE8, + 40860 - 11905: 0xFD94, + 40861 - 11905: 0xFD95, + 40862 - 11905: 0xFD96, + 40863 - 11905: 0xB9EA, + 40864 - 11905: 0xD9DF, + 40865 - 11905: 0xFD97, + 40866 - 11905: 0xFD98, + 40867 - 11905: 0xFD99, + 40868 - 11905: 0xFD9A, + 40869 - 11905: 0xFD9B, +} + +const encode1Low, encode1High = 8208, 9795 + +var encode1 = [...]uint16{ + 8208 - 8208: 0xA95C, + 8211 - 8208: 0xA843, + 8212 - 8208: 0xA1AA, + 8213 - 8208: 0xA844, + 8214 - 8208: 0xA1AC, + 8216 - 8208: 0xA1AE, + 8217 - 8208: 0xA1AF, + 8220 - 8208: 0xA1B0, + 8221 - 8208: 0xA1B1, + 8229 - 8208: 0xA845, + 8230 - 8208: 0xA1AD, + 8240 - 8208: 0xA1EB, + 8242 - 8208: 0xA1E4, + 8243 - 8208: 0xA1E5, + 8245 - 8208: 0xA846, + 8251 - 8208: 0xA1F9, + 8364 - 8208: 0xA2E3, + 8451 - 8208: 0xA1E6, + 8453 - 8208: 0xA847, + 8457 - 8208: 0xA848, + 8470 - 8208: 0xA1ED, + 8481 - 8208: 0xA959, + 8544 - 8208: 0xA2F1, + 8545 - 8208: 0xA2F2, + 8546 - 8208: 0xA2F3, + 8547 - 8208: 0xA2F4, + 8548 - 8208: 0xA2F5, + 8549 - 8208: 0xA2F6, + 8550 - 8208: 0xA2F7, + 8551 - 8208: 0xA2F8, + 8552 - 8208: 0xA2F9, + 8553 - 8208: 0xA2FA, + 8554 - 8208: 0xA2FB, + 8555 - 8208: 0xA2FC, + 8560 - 8208: 0xA2A1, + 8561 - 8208: 0xA2A2, + 8562 - 8208: 0xA2A3, + 8563 - 8208: 0xA2A4, + 8564 - 8208: 0xA2A5, + 8565 - 8208: 0xA2A6, + 8566 - 8208: 0xA2A7, + 8567 - 8208: 0xA2A8, + 8568 - 8208: 0xA2A9, + 8569 - 8208: 0xA2AA, + 8592 - 8208: 0xA1FB, + 8593 - 8208: 0xA1FC, + 8594 - 8208: 0xA1FA, + 8595 - 8208: 0xA1FD, + 8598 - 8208: 0xA849, + 8599 - 8208: 0xA84A, + 8600 - 8208: 0xA84B, + 8601 - 8208: 0xA84C, + 8712 - 8208: 0xA1CA, + 8719 - 8208: 0xA1C7, + 8721 - 8208: 0xA1C6, + 8725 - 8208: 0xA84D, + 8730 - 8208: 0xA1CC, + 8733 - 8208: 0xA1D8, + 8734 - 8208: 0xA1DE, + 8735 - 8208: 0xA84E, + 8736 - 8208: 0xA1CF, + 8739 - 8208: 0xA84F, + 8741 - 8208: 0xA1CE, + 8743 - 8208: 0xA1C4, + 8744 - 8208: 0xA1C5, + 8745 - 8208: 0xA1C9, + 8746 - 8208: 0xA1C8, + 8747 - 8208: 0xA1D2, + 8750 - 8208: 0xA1D3, + 8756 - 8208: 0xA1E0, + 8757 - 8208: 0xA1DF, + 8758 - 8208: 0xA1C3, + 8759 - 8208: 0xA1CB, + 8765 - 8208: 0xA1D7, + 8776 - 8208: 0xA1D6, + 8780 - 8208: 0xA1D5, + 8786 - 8208: 0xA850, + 8800 - 8208: 0xA1D9, + 8801 - 8208: 0xA1D4, + 8804 - 8208: 0xA1DC, + 8805 - 8208: 0xA1DD, + 8806 - 8208: 0xA851, + 8807 - 8208: 0xA852, + 8814 - 8208: 0xA1DA, + 8815 - 8208: 0xA1DB, + 8853 - 8208: 0xA892, + 8857 - 8208: 0xA1D1, + 8869 - 8208: 0xA1CD, + 8895 - 8208: 0xA853, + 8978 - 8208: 0xA1D0, + 9312 - 8208: 0xA2D9, + 9313 - 8208: 0xA2DA, + 9314 - 8208: 0xA2DB, + 9315 - 8208: 0xA2DC, + 9316 - 8208: 0xA2DD, + 9317 - 8208: 0xA2DE, + 9318 - 8208: 0xA2DF, + 9319 - 8208: 0xA2E0, + 9320 - 8208: 0xA2E1, + 9321 - 8208: 0xA2E2, + 9332 - 8208: 0xA2C5, + 9333 - 8208: 0xA2C6, + 9334 - 8208: 0xA2C7, + 9335 - 8208: 0xA2C8, + 9336 - 8208: 0xA2C9, + 9337 - 8208: 0xA2CA, + 9338 - 8208: 0xA2CB, + 9339 - 8208: 0xA2CC, + 9340 - 8208: 0xA2CD, + 9341 - 8208: 0xA2CE, + 9342 - 8208: 0xA2CF, + 9343 - 8208: 0xA2D0, + 9344 - 8208: 0xA2D1, + 9345 - 8208: 0xA2D2, + 9346 - 8208: 0xA2D3, + 9347 - 8208: 0xA2D4, + 9348 - 8208: 0xA2D5, + 9349 - 8208: 0xA2D6, + 9350 - 8208: 0xA2D7, + 9351 - 8208: 0xA2D8, + 9352 - 8208: 0xA2B1, + 9353 - 8208: 0xA2B2, + 9354 - 8208: 0xA2B3, + 9355 - 8208: 0xA2B4, + 9356 - 8208: 0xA2B5, + 9357 - 8208: 0xA2B6, + 9358 - 8208: 0xA2B7, + 9359 - 8208: 0xA2B8, + 9360 - 8208: 0xA2B9, + 9361 - 8208: 0xA2BA, + 9362 - 8208: 0xA2BB, + 9363 - 8208: 0xA2BC, + 9364 - 8208: 0xA2BD, + 9365 - 8208: 0xA2BE, + 9366 - 8208: 0xA2BF, + 9367 - 8208: 0xA2C0, + 9368 - 8208: 0xA2C1, + 9369 - 8208: 0xA2C2, + 9370 - 8208: 0xA2C3, + 9371 - 8208: 0xA2C4, + 9472 - 8208: 0xA9A4, + 9473 - 8208: 0xA9A5, + 9474 - 8208: 0xA9A6, + 9475 - 8208: 0xA9A7, + 9476 - 8208: 0xA9A8, + 9477 - 8208: 0xA9A9, + 9478 - 8208: 0xA9AA, + 9479 - 8208: 0xA9AB, + 9480 - 8208: 0xA9AC, + 9481 - 8208: 0xA9AD, + 9482 - 8208: 0xA9AE, + 9483 - 8208: 0xA9AF, + 9484 - 8208: 0xA9B0, + 9485 - 8208: 0xA9B1, + 9486 - 8208: 0xA9B2, + 9487 - 8208: 0xA9B3, + 9488 - 8208: 0xA9B4, + 9489 - 8208: 0xA9B5, + 9490 - 8208: 0xA9B6, + 9491 - 8208: 0xA9B7, + 9492 - 8208: 0xA9B8, + 9493 - 8208: 0xA9B9, + 9494 - 8208: 0xA9BA, + 9495 - 8208: 0xA9BB, + 9496 - 8208: 0xA9BC, + 9497 - 8208: 0xA9BD, + 9498 - 8208: 0xA9BE, + 9499 - 8208: 0xA9BF, + 9500 - 8208: 0xA9C0, + 9501 - 8208: 0xA9C1, + 9502 - 8208: 0xA9C2, + 9503 - 8208: 0xA9C3, + 9504 - 8208: 0xA9C4, + 9505 - 8208: 0xA9C5, + 9506 - 8208: 0xA9C6, + 9507 - 8208: 0xA9C7, + 9508 - 8208: 0xA9C8, + 9509 - 8208: 0xA9C9, + 9510 - 8208: 0xA9CA, + 9511 - 8208: 0xA9CB, + 9512 - 8208: 0xA9CC, + 9513 - 8208: 0xA9CD, + 9514 - 8208: 0xA9CE, + 9515 - 8208: 0xA9CF, + 9516 - 8208: 0xA9D0, + 9517 - 8208: 0xA9D1, + 9518 - 8208: 0xA9D2, + 9519 - 8208: 0xA9D3, + 9520 - 8208: 0xA9D4, + 9521 - 8208: 0xA9D5, + 9522 - 8208: 0xA9D6, + 9523 - 8208: 0xA9D7, + 9524 - 8208: 0xA9D8, + 9525 - 8208: 0xA9D9, + 9526 - 8208: 0xA9DA, + 9527 - 8208: 0xA9DB, + 9528 - 8208: 0xA9DC, + 9529 - 8208: 0xA9DD, + 9530 - 8208: 0xA9DE, + 9531 - 8208: 0xA9DF, + 9532 - 8208: 0xA9E0, + 9533 - 8208: 0xA9E1, + 9534 - 8208: 0xA9E2, + 9535 - 8208: 0xA9E3, + 9536 - 8208: 0xA9E4, + 9537 - 8208: 0xA9E5, + 9538 - 8208: 0xA9E6, + 9539 - 8208: 0xA9E7, + 9540 - 8208: 0xA9E8, + 9541 - 8208: 0xA9E9, + 9542 - 8208: 0xA9EA, + 9543 - 8208: 0xA9EB, + 9544 - 8208: 0xA9EC, + 9545 - 8208: 0xA9ED, + 9546 - 8208: 0xA9EE, + 9547 - 8208: 0xA9EF, + 9552 - 8208: 0xA854, + 9553 - 8208: 0xA855, + 9554 - 8208: 0xA856, + 9555 - 8208: 0xA857, + 9556 - 8208: 0xA858, + 9557 - 8208: 0xA859, + 9558 - 8208: 0xA85A, + 9559 - 8208: 0xA85B, + 9560 - 8208: 0xA85C, + 9561 - 8208: 0xA85D, + 9562 - 8208: 0xA85E, + 9563 - 8208: 0xA85F, + 9564 - 8208: 0xA860, + 9565 - 8208: 0xA861, + 9566 - 8208: 0xA862, + 9567 - 8208: 0xA863, + 9568 - 8208: 0xA864, + 9569 - 8208: 0xA865, + 9570 - 8208: 0xA866, + 9571 - 8208: 0xA867, + 9572 - 8208: 0xA868, + 9573 - 8208: 0xA869, + 9574 - 8208: 0xA86A, + 9575 - 8208: 0xA86B, + 9576 - 8208: 0xA86C, + 9577 - 8208: 0xA86D, + 9578 - 8208: 0xA86E, + 9579 - 8208: 0xA86F, + 9580 - 8208: 0xA870, + 9581 - 8208: 0xA871, + 9582 - 8208: 0xA872, + 9583 - 8208: 0xA873, + 9584 - 8208: 0xA874, + 9585 - 8208: 0xA875, + 9586 - 8208: 0xA876, + 9587 - 8208: 0xA877, + 9601 - 8208: 0xA878, + 9602 - 8208: 0xA879, + 9603 - 8208: 0xA87A, + 9604 - 8208: 0xA87B, + 9605 - 8208: 0xA87C, + 9606 - 8208: 0xA87D, + 9607 - 8208: 0xA87E, + 9608 - 8208: 0xA880, + 9609 - 8208: 0xA881, + 9610 - 8208: 0xA882, + 9611 - 8208: 0xA883, + 9612 - 8208: 0xA884, + 9613 - 8208: 0xA885, + 9614 - 8208: 0xA886, + 9615 - 8208: 0xA887, + 9619 - 8208: 0xA888, + 9620 - 8208: 0xA889, + 9621 - 8208: 0xA88A, + 9632 - 8208: 0xA1F6, + 9633 - 8208: 0xA1F5, + 9650 - 8208: 0xA1F8, + 9651 - 8208: 0xA1F7, + 9660 - 8208: 0xA88B, + 9661 - 8208: 0xA88C, + 9670 - 8208: 0xA1F4, + 9671 - 8208: 0xA1F3, + 9675 - 8208: 0xA1F0, + 9678 - 8208: 0xA1F2, + 9679 - 8208: 0xA1F1, + 9698 - 8208: 0xA88D, + 9699 - 8208: 0xA88E, + 9700 - 8208: 0xA88F, + 9701 - 8208: 0xA890, + 9733 - 8208: 0xA1EF, + 9734 - 8208: 0xA1EE, + 9737 - 8208: 0xA891, + 9792 - 8208: 0xA1E2, + 9794 - 8208: 0xA1E1, +} + +const encode2Low, encode2High = 164, 1106 + +var encode2 = [...]uint16{ + 164 - 164: 0xA1E8, + 167 - 164: 0xA1EC, + 168 - 164: 0xA1A7, + 176 - 164: 0xA1E3, + 177 - 164: 0xA1C0, + 183 - 164: 0xA1A4, + 215 - 164: 0xA1C1, + 224 - 164: 0xA8A4, + 225 - 164: 0xA8A2, + 232 - 164: 0xA8A8, + 233 - 164: 0xA8A6, + 234 - 164: 0xA8BA, + 236 - 164: 0xA8AC, + 237 - 164: 0xA8AA, + 242 - 164: 0xA8B0, + 243 - 164: 0xA8AE, + 247 - 164: 0xA1C2, + 249 - 164: 0xA8B4, + 250 - 164: 0xA8B2, + 252 - 164: 0xA8B9, + 257 - 164: 0xA8A1, + 275 - 164: 0xA8A5, + 283 - 164: 0xA8A7, + 299 - 164: 0xA8A9, + 324 - 164: 0xA8BD, + 328 - 164: 0xA8BE, + 333 - 164: 0xA8AD, + 363 - 164: 0xA8B1, + 462 - 164: 0xA8A3, + 464 - 164: 0xA8AB, + 466 - 164: 0xA8AF, + 468 - 164: 0xA8B3, + 470 - 164: 0xA8B5, + 472 - 164: 0xA8B6, + 474 - 164: 0xA8B7, + 476 - 164: 0xA8B8, + 505 - 164: 0xA8BF, + 593 - 164: 0xA8BB, + 609 - 164: 0xA8C0, + 711 - 164: 0xA1A6, + 713 - 164: 0xA1A5, + 714 - 164: 0xA840, + 715 - 164: 0xA841, + 729 - 164: 0xA842, + 913 - 164: 0xA6A1, + 914 - 164: 0xA6A2, + 915 - 164: 0xA6A3, + 916 - 164: 0xA6A4, + 917 - 164: 0xA6A5, + 918 - 164: 0xA6A6, + 919 - 164: 0xA6A7, + 920 - 164: 0xA6A8, + 921 - 164: 0xA6A9, + 922 - 164: 0xA6AA, + 923 - 164: 0xA6AB, + 924 - 164: 0xA6AC, + 925 - 164: 0xA6AD, + 926 - 164: 0xA6AE, + 927 - 164: 0xA6AF, + 928 - 164: 0xA6B0, + 929 - 164: 0xA6B1, + 931 - 164: 0xA6B2, + 932 - 164: 0xA6B3, + 933 - 164: 0xA6B4, + 934 - 164: 0xA6B5, + 935 - 164: 0xA6B6, + 936 - 164: 0xA6B7, + 937 - 164: 0xA6B8, + 945 - 164: 0xA6C1, + 946 - 164: 0xA6C2, + 947 - 164: 0xA6C3, + 948 - 164: 0xA6C4, + 949 - 164: 0xA6C5, + 950 - 164: 0xA6C6, + 951 - 164: 0xA6C7, + 952 - 164: 0xA6C8, + 953 - 164: 0xA6C9, + 954 - 164: 0xA6CA, + 955 - 164: 0xA6CB, + 956 - 164: 0xA6CC, + 957 - 164: 0xA6CD, + 958 - 164: 0xA6CE, + 959 - 164: 0xA6CF, + 960 - 164: 0xA6D0, + 961 - 164: 0xA6D1, + 963 - 164: 0xA6D2, + 964 - 164: 0xA6D3, + 965 - 164: 0xA6D4, + 966 - 164: 0xA6D5, + 967 - 164: 0xA6D6, + 968 - 164: 0xA6D7, + 969 - 164: 0xA6D8, + 1025 - 164: 0xA7A7, + 1040 - 164: 0xA7A1, + 1041 - 164: 0xA7A2, + 1042 - 164: 0xA7A3, + 1043 - 164: 0xA7A4, + 1044 - 164: 0xA7A5, + 1045 - 164: 0xA7A6, + 1046 - 164: 0xA7A8, + 1047 - 164: 0xA7A9, + 1048 - 164: 0xA7AA, + 1049 - 164: 0xA7AB, + 1050 - 164: 0xA7AC, + 1051 - 164: 0xA7AD, + 1052 - 164: 0xA7AE, + 1053 - 164: 0xA7AF, + 1054 - 164: 0xA7B0, + 1055 - 164: 0xA7B1, + 1056 - 164: 0xA7B2, + 1057 - 164: 0xA7B3, + 1058 - 164: 0xA7B4, + 1059 - 164: 0xA7B5, + 1060 - 164: 0xA7B6, + 1061 - 164: 0xA7B7, + 1062 - 164: 0xA7B8, + 1063 - 164: 0xA7B9, + 1064 - 164: 0xA7BA, + 1065 - 164: 0xA7BB, + 1066 - 164: 0xA7BC, + 1067 - 164: 0xA7BD, + 1068 - 164: 0xA7BE, + 1069 - 164: 0xA7BF, + 1070 - 164: 0xA7C0, + 1071 - 164: 0xA7C1, + 1072 - 164: 0xA7D1, + 1073 - 164: 0xA7D2, + 1074 - 164: 0xA7D3, + 1075 - 164: 0xA7D4, + 1076 - 164: 0xA7D5, + 1077 - 164: 0xA7D6, + 1078 - 164: 0xA7D8, + 1079 - 164: 0xA7D9, + 1080 - 164: 0xA7DA, + 1081 - 164: 0xA7DB, + 1082 - 164: 0xA7DC, + 1083 - 164: 0xA7DD, + 1084 - 164: 0xA7DE, + 1085 - 164: 0xA7DF, + 1086 - 164: 0xA7E0, + 1087 - 164: 0xA7E1, + 1088 - 164: 0xA7E2, + 1089 - 164: 0xA7E3, + 1090 - 164: 0xA7E4, + 1091 - 164: 0xA7E5, + 1092 - 164: 0xA7E6, + 1093 - 164: 0xA7E7, + 1094 - 164: 0xA7E8, + 1095 - 164: 0xA7E9, + 1096 - 164: 0xA7EA, + 1097 - 164: 0xA7EB, + 1098 - 164: 0xA7EC, + 1099 - 164: 0xA7ED, + 1100 - 164: 0xA7EE, + 1101 - 164: 0xA7EF, + 1102 - 164: 0xA7F0, + 1103 - 164: 0xA7F1, + 1105 - 164: 0xA7D7, +} + +const encode3Low, encode3High = 65072, 65510 + +var encode3 = [...]uint16{ + 65072 - 65072: 0xA955, + 65073 - 65072: 0xA6F2, + 65075 - 65072: 0xA6F4, + 65076 - 65072: 0xA6F5, + 65077 - 65072: 0xA6E0, + 65078 - 65072: 0xA6E1, + 65079 - 65072: 0xA6F0, + 65080 - 65072: 0xA6F1, + 65081 - 65072: 0xA6E2, + 65082 - 65072: 0xA6E3, + 65083 - 65072: 0xA6EE, + 65084 - 65072: 0xA6EF, + 65085 - 65072: 0xA6E6, + 65086 - 65072: 0xA6E7, + 65087 - 65072: 0xA6E4, + 65088 - 65072: 0xA6E5, + 65089 - 65072: 0xA6E8, + 65090 - 65072: 0xA6E9, + 65091 - 65072: 0xA6EA, + 65092 - 65072: 0xA6EB, + 65097 - 65072: 0xA968, + 65098 - 65072: 0xA969, + 65099 - 65072: 0xA96A, + 65100 - 65072: 0xA96B, + 65101 - 65072: 0xA96C, + 65102 - 65072: 0xA96D, + 65103 - 65072: 0xA96E, + 65104 - 65072: 0xA96F, + 65105 - 65072: 0xA970, + 65106 - 65072: 0xA971, + 65108 - 65072: 0xA972, + 65109 - 65072: 0xA973, + 65110 - 65072: 0xA974, + 65111 - 65072: 0xA975, + 65113 - 65072: 0xA976, + 65114 - 65072: 0xA977, + 65115 - 65072: 0xA978, + 65116 - 65072: 0xA979, + 65117 - 65072: 0xA97A, + 65118 - 65072: 0xA97B, + 65119 - 65072: 0xA97C, + 65120 - 65072: 0xA97D, + 65121 - 65072: 0xA97E, + 65122 - 65072: 0xA980, + 65123 - 65072: 0xA981, + 65124 - 65072: 0xA982, + 65125 - 65072: 0xA983, + 65126 - 65072: 0xA984, + 65128 - 65072: 0xA985, + 65129 - 65072: 0xA986, + 65130 - 65072: 0xA987, + 65131 - 65072: 0xA988, + 65281 - 65072: 0xA3A1, + 65282 - 65072: 0xA3A2, + 65283 - 65072: 0xA3A3, + 65284 - 65072: 0xA1E7, + 65285 - 65072: 0xA3A5, + 65286 - 65072: 0xA3A6, + 65287 - 65072: 0xA3A7, + 65288 - 65072: 0xA3A8, + 65289 - 65072: 0xA3A9, + 65290 - 65072: 0xA3AA, + 65291 - 65072: 0xA3AB, + 65292 - 65072: 0xA3AC, + 65293 - 65072: 0xA3AD, + 65294 - 65072: 0xA3AE, + 65295 - 65072: 0xA3AF, + 65296 - 65072: 0xA3B0, + 65297 - 65072: 0xA3B1, + 65298 - 65072: 0xA3B2, + 65299 - 65072: 0xA3B3, + 65300 - 65072: 0xA3B4, + 65301 - 65072: 0xA3B5, + 65302 - 65072: 0xA3B6, + 65303 - 65072: 0xA3B7, + 65304 - 65072: 0xA3B8, + 65305 - 65072: 0xA3B9, + 65306 - 65072: 0xA3BA, + 65307 - 65072: 0xA3BB, + 65308 - 65072: 0xA3BC, + 65309 - 65072: 0xA3BD, + 65310 - 65072: 0xA3BE, + 65311 - 65072: 0xA3BF, + 65312 - 65072: 0xA3C0, + 65313 - 65072: 0xA3C1, + 65314 - 65072: 0xA3C2, + 65315 - 65072: 0xA3C3, + 65316 - 65072: 0xA3C4, + 65317 - 65072: 0xA3C5, + 65318 - 65072: 0xA3C6, + 65319 - 65072: 0xA3C7, + 65320 - 65072: 0xA3C8, + 65321 - 65072: 0xA3C9, + 65322 - 65072: 0xA3CA, + 65323 - 65072: 0xA3CB, + 65324 - 65072: 0xA3CC, + 65325 - 65072: 0xA3CD, + 65326 - 65072: 0xA3CE, + 65327 - 65072: 0xA3CF, + 65328 - 65072: 0xA3D0, + 65329 - 65072: 0xA3D1, + 65330 - 65072: 0xA3D2, + 65331 - 65072: 0xA3D3, + 65332 - 65072: 0xA3D4, + 65333 - 65072: 0xA3D5, + 65334 - 65072: 0xA3D6, + 65335 - 65072: 0xA3D7, + 65336 - 65072: 0xA3D8, + 65337 - 65072: 0xA3D9, + 65338 - 65072: 0xA3DA, + 65339 - 65072: 0xA3DB, + 65340 - 65072: 0xA3DC, + 65341 - 65072: 0xA3DD, + 65342 - 65072: 0xA3DE, + 65343 - 65072: 0xA3DF, + 65344 - 65072: 0xA3E0, + 65345 - 65072: 0xA3E1, + 65346 - 65072: 0xA3E2, + 65347 - 65072: 0xA3E3, + 65348 - 65072: 0xA3E4, + 65349 - 65072: 0xA3E5, + 65350 - 65072: 0xA3E6, + 65351 - 65072: 0xA3E7, + 65352 - 65072: 0xA3E8, + 65353 - 65072: 0xA3E9, + 65354 - 65072: 0xA3EA, + 65355 - 65072: 0xA3EB, + 65356 - 65072: 0xA3EC, + 65357 - 65072: 0xA3ED, + 65358 - 65072: 0xA3EE, + 65359 - 65072: 0xA3EF, + 65360 - 65072: 0xA3F0, + 65361 - 65072: 0xA3F1, + 65362 - 65072: 0xA3F2, + 65363 - 65072: 0xA3F3, + 65364 - 65072: 0xA3F4, + 65365 - 65072: 0xA3F5, + 65366 - 65072: 0xA3F6, + 65367 - 65072: 0xA3F7, + 65368 - 65072: 0xA3F8, + 65369 - 65072: 0xA3F9, + 65370 - 65072: 0xA3FA, + 65371 - 65072: 0xA3FB, + 65372 - 65072: 0xA3FC, + 65373 - 65072: 0xA3FD, + 65374 - 65072: 0xA1AB, + 65504 - 65072: 0xA1E9, + 65505 - 65072: 0xA1EA, + 65506 - 65072: 0xA956, + 65507 - 65072: 0xA3FE, + 65508 - 65072: 0xA957, + 65509 - 65072: 0xA3A4, +} + +const encode4Low, encode4High = 63788, 64042 + +var encode4 = [...]uint16{ + 63788 - 63788: 0xFD9C, + 63865 - 63788: 0xFD9D, + 63893 - 63788: 0xFD9E, + 63975 - 63788: 0xFD9F, + 63985 - 63788: 0xFDA0, + 64012 - 63788: 0xFE40, + 64013 - 63788: 0xFE41, + 64014 - 63788: 0xFE42, + 64015 - 63788: 0xFE43, + 64017 - 63788: 0xFE44, + 64019 - 63788: 0xFE45, + 64020 - 63788: 0xFE46, + 64024 - 63788: 0xFE47, + 64031 - 63788: 0xFE48, + 64032 - 63788: 0xFE49, + 64033 - 63788: 0xFE4A, + 64035 - 63788: 0xFE4B, + 64036 - 63788: 0xFE4C, + 64039 - 63788: 0xFE4D, + 64040 - 63788: 0xFE4E, + 64041 - 63788: 0xFE4F, +} diff --git a/vendor/golang.org/x/text/encoding/testdata/candide-gb18030.txt b/vendor/golang.org/x/text/encoding/testdata/candide-gb18030.txt new file mode 100644 index 0000000..bd7a572 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/candide-gb18030.txt @@ -0,0 +1,510 @@ +This file was derived from +http://www.gutenberg.org/cache/epub/4650/pg4650.txt +-------- + + CANDIDE, + + ou + + L'OPTIMISME, + + TRADUIT DE L'ALLEMAND + + DE M. LE DOCTEUR RALPH, + + AVEC LES ADDITIONS + + QU'ON A TROUV07ES DANS LA POCHE DU DOCTEUR, LORSQU'IL MOURUT + + 08 MINDEN, L'AN DE GR00CE 1759 + + 1759 + + + +CHAPITRE I. + +Comment Candide fut lev dans un beau ch09teau, et comment il fut +chass d'icelui. + +Il y avait en Vestphalie, dans le ch09teau de M. le baron de +Thunder-ten-tronckh, un jeune gar04on qui la nature avait donn +les moeurs les plus douces. Sa physionomie annon04ait son 09me. +Il avait le jugement assez droit, avec l'esprit le plus simple; +c'est, je crois, pour cette raison qu'on le nommait Candide. Les +anciens domestiques de la maison soup04onnaient qu'il tait fils +de la soeur de monsieur le baron et d'un bon et honnte +gentilhomme du voisinage, que cette demoiselle ne voulut jamais +pouser parce qu'il n'avait pu prouver que soixante et onze +quartiers, et que le reste de son arbre gnalogique avait t +perdu par l'injure du temps. + +Monsieur le baron tait un des plus puissants seigneurs de la +Westphalie, car son ch09teau avait une porte et des fentres. Sa +grande salle mme tait orne d'une tapisserie. Tous les chiens +de ses basses-cours composaient une meute dans le besoin; ses +palefreniers taient ses piqueurs; le vicaire du village tait +son grand-aum00nier. Ils l'appelaient tous monseigneur, et ils +riaient quand il fesait des contes. + +Madame la baronne, qui pesait environ trois cent cinquante +livres, s'attirait par l une trs grande considration, et +fesait les honneurs de la maison avec une dignit qui la rendait +encore plus respectable. Sa fille Cungonde, 09ge de dix-sept +ans, tait haute en couleur, fra06che, grasse, apptissante. Le +fils du baron paraissait en tout digne de son pre. Le +prcepteur Pangloss[1] tait l'oracle de la maison, et le petit +Candide coutait ses le04ons avec toute la bonne foi de son 09ge et +de son caractre. + + [1] De _pan_, tout, et _glossa_, langue. B. + + +Pangloss enseignait la mtaphysico-thologo-cosmolonigologie. Il +prouvait admirablement qu'il n'y a point d'effet sans cause, et +que, dans ce meilleur des mondes possibles, le ch09teau de +monseigneur le baron tait le plus beau des ch09teaux, et madame +la meilleure des baronnes possibles. + +Il est dmontr, disait-il, que les choses ne peuvent tre +autrement; car tout tant fait pour une fin, tout est +ncessairement pour la meilleure fin. Remarquez bien que les nez +ont t faits pour porter des lunettes; aussi avons-nous des +lunettes[2]. Les jambes sont visiblement institues pour tre +chausses, et nous avons des chausses. Les pierres ont t +formes pour tre tailles et pour en faire des ch09teaux; aussi +monseigneur a un trs beau ch09teau: le plus grand baron de la +province doit tre le mieux log; et les cochons tant faits pour +tre mangs, nous mangeons du porc toute l'anne: par consquent, +ceux qui ont avanc que tout est bien ont dit une sottise; il +fallait dire que tout est au mieux. + + [2] Voyez tome XXVII, page 528; et dans les _Mlanges_, anne + 1738, le chapitre XI de la troisime partie des _07lments de la + philosophie de Newton_; et anne 1768, le chapitre X des + _Singularits de la nature_. B. + + +Candide coutait attentivement, et croyait innocemment; car il +trouvait mademoiselle Cungonde extrmement belle, quoiqu'il ne +pr06t jamais la hardiesse de le lui dire. Il concluait qu'aprs +le bonheur d'tre n baron de Thunder-ten-tronckh, le second +degr de bonheur tait d'tre mademoiselle Cungonde; le +troisime, de la voir tous les jours; et le quatrime, d'entendre +ma06tre Pangloss, le plus grand philosophe de la province, et par +consquent de toute la terre. + +Un jour Cungonde, en se promenant auprs du ch09teau, dans le +petit bois qu'on appelait parc, vit entre des broussailles le +docteur Pangloss qui donnait une le04on de physique exprimentale + la femme de chambre de sa mre, petite brune trs jolie et trs +docile. Comme mademoiselle Cungonde avait beaucoup de +disposition pour les sciences, elle observa, sans souffler, les +expriences ritres dont elle fut tmoin; elle vit clairement +la raison suffisante du docteur, les effets et les causes, et +s'en retourna tout agite, toute pensive, toute remplie du dsir +d'tre savante, songeant qu'elle pourrait bien tre la raison +suffisante du jeune Candide, qui pouvait aussi tre la sienne. + +Elle rencontra Candide en revenant au ch09teau, et rougit: Candide +rougit aussi . Elle lui dit bonjour d'une voix entrecoupe; et +Candide lui parla sans savoir ce qu'il disait. Le lendemain, +aprs le d06ner, comme on sortait de table, Cungonde et Candide +se trouvrent derrire un paravent; Cungonde laissa tomber son +mouchoir, Candide le ramassa; elle lui prit innocemment la main; +le jeune homme baisa innocemment la main de la jeune demoiselle +avec une vivacit, une sensibilit, une gr09ce toute particulire; +leurs bouches se rencontrrent, leurs yeux s'enflammrent, leurs +genoux tremblrent, leurs mains s'garrent. M. le baron de +Thunder-ten-tronckh passa auprs du paravent, et voyant cette +cause et cet effet, chassa Candide du ch09teau grands coups de +pied dans le derrire. Cungonde s'vanouit: elle fut soufflete +par madame la baronne ds qu'elle fut revenue elle-mme; et +tout fut constern dans le plus beau et le plus agrable des +ch09teaux possibles. + + + +CHAPITRE II + +Ce que devint Candide parmi les Bulgares. + + +Candide, chass du paradis terrestre, marcha longtemps sans +savoir o, pleurant, levant les yeux au ciel, les tournant +souvent vers le plus beau des ch09teaux qui renfermait la plus +belle des baronnettes; il se coucha sans souper au milieu des +champs entre deux sillons; la neige tombait gros flocons. +Candide, tout transi, se tra06na le lendemain vers la ville +voisine, qui s'appelle _Valdberghoff-trarbk-dikdorff_, n'ayant +point d'argent, mourant de faim et de lassitude. Il s'arrta +tristement la porte d'un cabaret. Deux hommes habills de bleu +le remarqurent: Camarade, dit l'un, voil un jeune homme trs +bien fait, et qui a la taille requise; ils s'avancrent vers +Candide et le prirent d06ner trs civilement.--Messieurs, leur +dit Candide avec une modestie charmante, vous me faites beaucoup +d'honneur, mais je n'ai pas de quoi payer mon cot.--Ah! +monsieur, lui dit un des bleus, les personnes de votre figure et +de votre mrite ne paient jamais rien: n'avez-vous pas cinq pieds +cinq pouces de haut?--Oui, messieurs, c'est ma taille, dit-il en +fesant la rvrence.--Ah! monsieur, mettez-vous table; non +seulement nous vous dfraierons, mais nous ne souffrirons jamais +qu'un homme comme vous manque d'argent; les hommes ne sont faits +que pour se secourir les uns les autres.--Vous avez raison, dit +Candide; c'est ce que M. Pangloss m'a toujours dit, et je vois +bien que tout est au mieux. On le prie d'accepter quelques cus, +il les prend et veut faire son billet; on n'en veut point, on se +met table. N'aimez-vous pas tendrement?....--Oh! oui, +rpond-il, j'aime tendrement mademoiselle Cungonde.--Non, dit +l'un de ces messieurs, nous vous demandons si vous n'aimez pas +tendrement le roi des Bulgares?--Point du tout, dit-il, car je ne +l'ai jamais vu.--Comment! c'est le plus charmant des rois, et il +faut boire sa sant.--Oh! trs volontiers, messieurs. Et il +boit. C'en est assez, lui dit-on, vous voil l'appui, le +soutien, le dfenseur, le hros des Bulgares; votre fortune est +faite, et votre gloire est assure. On lui met sur-le-champ les +fers aux pieds, et on le mne au rgiment. On le fait tourner +droite, gauche, hausser la baguette, remettre la baguette, +coucher en joue, tirer, doubler le pas, et on lui donne trente +coups de b09ton; le lendemain, il fait l'exercice un peu moins +mal, et il ne re04oit que vingt coups; le surlendemain, on ne lui +en donne que dix, et il est regard par ses camarades comme un +prodige. + +Candide, tout stupfait, ne dmlait pas encore trop bien comment +il tait un hros. Il s'avisa un beau jour de printemps de +s'aller promener, marchant tout droit devant lui, croyant que +c'tait un privilge de l'espce humaine, comme de l'espce +animale, de se servir de ses jambes son plaisir. Il n'eut pas +fait deux lieues que voil quatre autres hros de six pieds qui +l'atteignent, qui le lient, qui le mnent dans un cachot. On lui +demanda juridiquement ce qu'il aimait le mieux d'tre fustig +trente-six fois par tout le rgiment, ou de recevoir -la-fois +douze balles de plomb dans la cervelle. Il eut beau dire que les +volonts sont libres, et qu'il ne voulait ni l'un ni l'autre, il +fallut faire un choix; il se dtermina, en vertu du don de Dieu +qu'on nomme _libert_, passer trente-six fois par les +baguettes; il essuya deux promenades. Le rgiment tait compos +de deux mille hommes; cela lui composa quatre mille coups de +baguette, qui, depuis la nuque du cou jusqu'au cul, lui +dcouvrirent les muscles et les nerfs. Comme on allait procder + la troisime course, Candide, n'en pouvant plus, demanda en +gr09ce qu'on voul04t bien avoir la bont de lui casser la tte; il +obtint cette faveur; on lui bande les yeux; on le fait mettre +genoux. Le roi des Bulgares passe dans ce moment, s'informe du +crime du patient; et comme ce roi avait un grand gnie, il +comprit, par tout ce qu'il apprit de Candide, que c'tait un +jeune mtaphysicien fort ignorant des choses de ce monde, et il +lui accorda sa gr09ce avec une clmence qui sera loue dans tous +les journaux et dans tous les sicles. Un brave chirurgien +gurit Candide en trois semaines avec les mollients enseigns +par Dioscoride. Il avait dj un peu de peau et pouvait marcher, +quand le roi des Bulgares livra bataille au roi des Abares. + + + +CHAPITRE III. + +Comment Candide se sauva d'entre les Bulgares, et ce qu'il +devint. + + +Rien n'tait si beau, si leste, si brillant, si bien ordonn que +les deux armes. Les trompettes, les fifres, les hautbois, les +tambours, les canons; formaient une harmonie telle qu'il n'y en +eut jamais en enfer. Les canons renversrent d'abord peu prs +six mille hommes de chaque c00t; ensuite la mousqueterie 00ta du +meilleur des mondes environ neuf dix mille coquins qui en +infectaient la surface. La ba07onnette fut aussi la raison +suffisante de la mort de quelques milliers d'hommes. Le tout +pouvait bien se monter une trentaine de mille 09mes. Candide, +qui tremblait comme un philosophe, se cacha du mieux qu'il put +pendant cette boucherie hro07que. + +Enfin, tandis que les deux rois fesaient chanter des _Te Deum_, +chacun dans son camp, il prit le parti d'aller raisonner ailleurs +des effets et des causes. Il passa par-dessus des tas de morts +et de mourants, et gagna d'abord un village voisin; il tait en +cendres: c'tait un village abare que les Bulgares avaient br04l, +selon les lois du droit public. Ici des vieillards cribls de +coups regardaient mourir leurs femmes gorges, qui tenaient +leurs enfants leurs mamelles sanglantes; l des filles +ventres aprs avoir assouvi les besoins naturels de quelques +hros, rendaient les derniers soupirs; d'autres demi br04les +criaient qu'on achev09t de leur donner la mort. Des cervelles +taient rpandues sur la terre c00t de bras et de jambes +coups. + +Candide s'enfuit au plus vite dans un autre village: il +appartenait des Bulgares, et les hros abares l'avaient trait +de mme. Candide, toujours marchant sur des membres palpitants +ou travers des ruines, arriva enfin hors du th09tre de la +guerre, portant quelques petites provisions dans son bissac, et +n'oubliant jamais mademoiselle Cungonde. Ses provisions lui +manqurent quand il fut en Hollande; mais ayant entendu dire que +tout le monde tait riche dans ce pays-l, et qu'on y tait +chrtien, il ne douta pas qu'on ne le trait09t aussi bien qu'il +l'avait t dans le ch09teau de M. le baron, avant qu'il en e04t +t chass pour les beaux yeux de mademoiselle Cungonde. + +Il demanda l'aum00ne plusieurs graves personnages, qui lui +rpondirent tous que, s'il continuait faire ce mtier, on +l'enfermerait dans une maison de correction pour lui apprendre +vivre. + +Il s'adressa ensuite un homme qui venait de parler tout seul +une heure de suite sur la charit dans une grande assemble. Cet +orateur le regardant de travers lui dit: Que venez-vous faire +ici? y tes-vous pour la bonne cause? Il n'y a point d'effet sans +cause, rpondit modestement Candide; tout est encha06n +ncessairement et arrang pour le mieux. Il a fallu que je fusse +chass d'auprs de mademoiselle Cungonde, que j'aie pass par +les baguettes, et il faut que je demande mon pain, jusqu' ce que +je puisse en gagner; tout cela ne pouvait tre autrement. Mon +ami, lui dit l'orateur, croyez-vous que le pape soit +l'antechrist? Je ne l'avais pas encore entendu dire, rpondit +Candide: mais qu'il le soit, ou qu'il ne le soit pas, je manque +de pain. Tu ne mrites pas d'en manger, dit l'autre: va, coquin, +va, misrable, ne m'approche de ta vie. La femme de l'orateur +ayant mis la tte la fentre, et avisant un homme qui doutait +que le pape f04t antechrist, lui rpandit sur le chef un +plein..... O ciel! quel excs se porte le zle de la religion +dans les dames! + +Un homme qui n'avait point t baptis, un bon anabaptiste, nomm +Jacques, vit la manire cruelle et ignominieuse dont on traitait +ainsi un de ses frres, un tre deux pieds sans plumes, qui +avait une 09me; il l'amena chez lui, le nettoya, lui donna du pain +et de la bire, lui fit prsent de deux florins, et voulut mme +lui apprendre travailler dans ses manufactures aux toffes de +Perse qu'on fabrique en Hollande. Candide se prosternant presque +devant lui, s'criait: Ma06tre Pangloss me l'avait bien dit que +tout est au mieux dans ce monde, car je suis infiniment plus +touch de votre extrme gnrosit que de la duret de ce +monsieur manteau noir, et de madame son pouse. + +Le lendemain, en se promenant, il rencontra un gueux tout couvert +de pustules, les yeux morts, le bout du nez rong, la bouche de +travers, les dents noires, et parlant de la gorge, tourment +d'une toux violente, et crachant une dent chaque effort. + + + +CHAPITRE IV. + +Comment Candide rencontra son ancien ma06tre de philosophie, le +docteur Pangloss, et ce qui en advint. + + +Candide, plus mu encore de compassion que d'horreur, donna cet +pouvantable gueux les deux florins qu'il avait re04us de son +honnte anabaptiste Jacques. Le fant00me le regarda fixement, +versa des larmes, et sauta son cou. Candide effray recule. +Hlas! dit le misrable l'autre misrable, ne reconnaissez-vous +plus votre cher Pangloss? Qu'entends-je? vous, mon cher ma06tre! +vous, dans cet tat horrible! quel malheur vous est-il donc +arriv? pourquoi n'tes-vous plus dans le plus beau des ch09teaux? +qu'est devenue mademoiselle Cungonde, la perle des filles, le +chef-d'oeuvre de la nature? Je n'en peux plus, dit Pangloss. +Aussit00t Candide le mena dans l'table de l'anabaptiste, o il +lui fit manger un peu de pain; et quand Pangloss fut refait: Eh +bien! lui dit-il, Cungonde? Elle est morte, reprit l'autre. +Candide s'vanouit ce mot: son ami rappela ses sens avec un peu +de mauvais vinaigre qui se trouva par hasard dans l'table. +Candide rouvre les yeux. Cungonde est morte! Ah! meilleur des +mondes, o tes-vous? Mais de quelle maladie est-elle morte? ne +serait-ce point de m'avoir vu chasser du beau ch09teau de monsieur +son pre grands coups de pied? Non, dit Pangloss, elle a t +ventre par des soldats bulgares, aprs avoir t viole autant +qu'on peut l'tre; ils ont cass la tte monsieur le baron qui +voulait la dfendre; madame la baronne a t coupe en morceaux; +mon pauvre pupille trait prcisment comme sa soeur; et quant au +ch09teau, il n'est pas rest pierre sur pierre, pas une grange, +pas un mouton, pas un canard, pas un arbre; mais nous avons t +bien vengs, car les Abares en ont fait autant dans une baronnie +voisine qui appartenait un seigneur bulgare. + +A ce discours, Candide s'vanouit encore; mais revenu soi, et +ayant dit tout ce qu'il devait dire, il s'enquit de la cause et +de l'effet, et de la raison suffisante qui avait mis Pangloss +dans un si piteux tat. Hlas! dit l'autre, c'est l'amour: +l'amour, le consolateur du genre humain, le conservateur de +l'univers, l'09me de tous les tres sensibles, le tendre amour. +Hlas! dit Candide, je l'ai connu cet amour, ce souverain des +coeurs, cette 09me de notre 09me; il ne m'a jamais valu qu'un +baiser et vingt coups de pied au cul. Comment cette belle cause +a-t-elle pu produire en vous un effet si abominable? + +Pangloss rpondit en ces termes: O mon cher Candide! vous avez +connu Paquette, cette jolie suivante de notre auguste baronne: +j'ai go04t dans ses bras les dlices du paradis, qui ont produit +ces tourments d'enfer dont vous me voyez dvor; elle en tait +infecte, elle en est peut-tre morte. Paquette tenait ce +prsent d'un cordelier trs savant qui avait remont la source, +car il l'avait eu d'une vieille comtesse, qui l'avait re04u d'un +capitaine de cavalerie, qui le devait une marquise, qui le +tenait d'un page, qui l'avait re04u d'un jsuite, qui, tant +novice, l'avait eu en droite ligne d'un des compagnons de +Christophe Colomb. Pour moi, je ne le donnerai personne, car +je me meurs. + +O Pangloss! s'cria Candide, voil une trange gnalogie! +n'est-ce pas le diable qui en fut la souche? Point du tout, +rpliqua ce grand homme; c'tait une chose indispensable dans le +meilleur des mondes, un ingrdient ncessaire; car si Colomb +n'avait pas attrap dans une 06le de l'Amrique cette maladie[1] +qui empoisonne la source de la gnration, qui souvent mme +empche la gnration, et qui est videmment l'oppos du grand +but de la nature, nous n'aurions ni le chocolat ni la cochenille; +il faut encore observer que jusqu'aujourd'hui, dans notre +continent, cette maladie nous est particulire, comme la +controverse. Les Turcs, les Indiens, les Persans, les Chinois, +les Siamois, les Japonais, ne la connaissent pas encore; mais il +y a une raison suffisante pour qu'ils la connaissent leur tour +dans quelques sicles. En attendant elle a fait un merveilleux +progrs parmi nous, et surtout dans ces grandes armes composes +d'honntes stipendiaires bien levs, qui dcident du destin des +tats; on peut assurer que, quand trente mille hommes combattent +en bataille range contre des troupes gales en nombre, il y a +environ vingt mille vrols de chaque c00t. + + [1] Voyez tome XXXI, page 7. B. + + +Voil qui est admirable, dit Candide; mais il faut vous faire +gurir. Et comment le puis-je? dit Pangloss; je n'ai pas le sou, +mon ami, et dans toute l'tendue de ce globe on ne peut ni se +faire saigner, ni prendre un lavement sans payer, ou sans qu'il y +ait quelqu'un qui paie pour nous. + +Ce dernier discours dtermina Candide; il alla se jeter aux pieds +de son charitable anabaptiste Jacques, et lui fit une peinture si +touchante de l'tat o son ami tait rduit, que le bon-homme +n'hsita pas recueillir le docteur Pangloss; il le fit gurir +ses dpens. Pangloss, dans la cure, ne perdit qu'un oeil et une +oreille. Il crivait bien, et savait parfaitement +l'arithmtique. L'anabaptiste Jacques en fit son teneur de +livres. Au bout de deux mois, tant oblig d'aller Lisbonne +pour les affaires de son commerce, il mena dans son vaisseau ses +deux philosophes. Pangloss lui expliqua comment tout tait on ne +peut mieux. Jacques n'tait pas de cet avis. Il faut bien, +disait-il, que les hommes aient un peu corrompu la nature, car +ils ne sont point ns loups, et ils sont devenus loups. Dieu ne +leur a donn ni canons de vingt-quatre, ni ba07onnettes, et ils se +sont fait des ba07onnettes et des canons pour se dtruire. Je +pourrais mettre en ligne de compte les banqueroutes, et la +justice qui s'empare des biens des banqueroutiers pour en +frustrer les cranciers. Tout cela tait indispensable, +rpliquait le docteur borgne, et les malheurs particuliers font +le bien gnral; de sorte que plus il y a de malheurs +particuliers, et plus tout est bien. Tandis qu'il raisonnait, +l'air s'obscurcit, les vents soufflrent des quatre coins du +monde, et le vaisseau fut assailli de la plus horrible tempte, +la vue du port de Lisbonne. + + +CHAPITRE V. + +Tempte, naufrage, tremblement de terre, et ce qui advint du +docteur Pangloss, de Candide, et de l'anabaptiste Jacques. + +La moiti des passagers affaiblis, expirants de ces angoisses +inconcevables que le roulis d'un vaisseau porte dans les nerfs et +dans toutes les humeurs du corps agites en sens contraires, +n'avait pas mme la force de s'inquiter du danger. L'autre +moiti jetait des cris et fesait des prires; les voiles taient +dchires, les m09ts briss, le vaisseau entr'ouvert. Travaillait +qui pouvait, personne ne s'entendait, personne ne commandait. +L'anabaptiste aidait un peu la manoeuvre; il tait sur le +tillac; un matelot furieux le frappe rudement et l'tend sur les +planches; mais du coup qu'il lui donna, il eut lui-mme une si +violente secousse, qu'il tomba hors du vaisseau, la tte la +premire. Il restait suspendu et accroch une partie de m09t +rompu. Le bon Jacques court son secours, l'aide remonter, et +de l'effort qu'il fait, il est prcipit dans la mer la vue du +matelot, qui le laissa prir sans daigner seulement le regarder. +Candide approche, voit son bienfaiteur qui repara06t un moment, et +qui est englouti pour jamais. Il veut se jeter aprs lui dans la +mer: le philosophe Pangloss l'en empche, en lui prouvant que la +rade de Lisbonne avait t forme exprs pour que cet anabaptiste +s'y noy09t. Tandis qu'il le prouvait _ priori_, le vaisseau +s'entr'ouvre, tout prit la rserve de Pangloss, de Candide, et +de ce brutal de matelot qui avait noy le vertueux anabaptiste; +le coquin nagea heureusement jusqu'au rivage, o Pangloss et +Candide furent ports sur une planche. + +Quand ils furent revenus un peu eux, ils marchrent vers +Lisbonne; il leur restait quelque argent, avec lequel ils +espraient se sauver de la faim aprs avoir chapp la tempte. + +A peine ont-ils mis le pied dans la ville, en pleurant la mort de +leur bienfaiteur, qu'ils sentent la terre trembler sous leurs +pas[1]; la mer s'lve en bouillonnant dans le port, et brise les +vaisseaux qui sont l'ancre. Des tourbillons de flammes et de +cendres couvrent les rues et les places publiques; les maisons +s'croulent, les toits sont renverss sur les fondements, et les +fondements se dispersent; trente mille habitants de tout 09ge et +de tout sexe sont crass sous des ruines. Le matelot disait en +sifflant et en jurant: il y aura quelque chose gagner ici. +Quelle peut tre la raison suffisante de ce phnomne? disait +Pangloss. Voici le dernier jour du monde! s'criait Candide. +Le matelot court incontinent au milieu des dbris, affronte la +mort pour trouver de l'argent, en trouve, s'en empare, s'enivre, +et ayant cuv son vin, achte les faveurs de la premire fille de +bonne volont qu'il rencontre sur les ruines des maisons +dtruites, et au milieu des mourants et des morts. Pangloss le +tirait cependant par la manche: Mon ami, lui disait-il, cela +n'est pas bien, vous manquez la raison universelle, vous prenez +mal votre temps. Tte et sang, rpondit l'autre, je suis matelot +et n Batavia; j'ai march quatre fois sur le crucifix dans +quatre voyages au Japon[2]; tu as bien trouv ton homme avec ta +raison universelle! + + + [1] Le tremblement de terre de Lisbonne est du 1er novembre 1755. + B. + + [2] Voyez tome XVIII, page 470. B. + + +Quelques clats de pierre avaient bless Candide; il tait tendu +dans la rue et couvert de dbris. Il disait Pangloss: Hlas! +procure-moi un peu de vin et d'huile; je me meurs. Ce +tremblement de terre n'est pas une chose nouvelle, rpondit +Pangloss; la ville de Lima prouva les mmes secousses en +Amrique l'anne passe; mmes causes, mmes effets; il y a +certainement une tra06ne de soufre sous terre depuis Lima jusqu' +Lisbonne. Rien n'est plus probable, dit Candide; mais, pour +Dieu, un peu d'huile et de vin. Comment probable? rpliqua le +philosophe, je soutiens que la chose est dmontre. Candide +perdit connaissance, et Pangloss lui apporta un peu d'eau d'une +fontaine voisine. + +Le lendemain, ayant trouv quelques provisions de bouche en se +glissant travers des dcombres, ils rparrent un peu leurs +forces. Ensuite ils travaillrent comme les autres soulager +les habitants chapps la mort. Quelques citoyens, secourus +par eux, leur donnrent un aussi bon d06ner qu'on le pouvait dans +un tel dsastre: il est vrai que le repas tait triste; les +convives arrosaient leur pain de leurs larmes; mais Pangloss les +consola, en les assurant que les choses ne pouvaient tre +autrement: Car, dit-il, tout ceci est ce qu'il y a de mieux; car +s'il y a un volcan Lisbonne, il ne pouvait tre ailleurs; car +il est impossible que les choses ne soient pas o elles sont, car +tout est bien. + +Un petit homme noir, familier de l'inquisition, lequel tait +c00t de lui, prit poliment la parole et dit: Apparemment que +monsieur ne croit pas au pch originel; car si tout est au +mieux, il n'y a donc eu ni chute ni punition. + +Je demande trs humblement pardon votre excellence, rpondit +Pangloss encore plus poliment, car la chute de l'homme et la +maldiction entraient ncessairement dans le meilleur des mondes +possibles. Monsieur ne croit donc pas la libert? dit le +familier. Votre excellence m'excusera, dit Pangloss; la libert +peut subsister avec la ncessit absolue; car il tait ncessaire +que nous fussions libres; car enfin la volont dtermine...... +Pangloss tait au milieu de sa phrase, quand Je familier fit un +signe de tte son estafier qui lui servait boire du vin de +Porto ou d'Oporto. diff --git a/vendor/golang.org/x/text/encoding/testdata/candide-utf-16le.txt b/vendor/golang.org/x/text/encoding/testdata/candide-utf-16le.txt new file mode 100644 index 0000000..820608b Binary files /dev/null and b/vendor/golang.org/x/text/encoding/testdata/candide-utf-16le.txt differ diff --git a/vendor/golang.org/x/text/encoding/testdata/candide-utf-32be.txt b/vendor/golang.org/x/text/encoding/testdata/candide-utf-32be.txt new file mode 100644 index 0000000..c540e20 Binary files /dev/null and b/vendor/golang.org/x/text/encoding/testdata/candide-utf-32be.txt differ diff --git a/vendor/golang.org/x/text/encoding/testdata/candide-utf-8.txt b/vendor/golang.org/x/text/encoding/testdata/candide-utf-8.txt new file mode 100644 index 0000000..a4fd629 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/candide-utf-8.txt @@ -0,0 +1,510 @@ +This file was derived from +http://www.gutenberg.org/cache/epub/4650/pg4650.txt +-------- + + CANDIDE, + + ou + + L'OPTIMISME, + + TRADUIT DE L'ALLEMAND + + DE M. LE DOCTEUR RALPH, + + AVEC LES ADDITIONS + + QU'ON A TROUVÉES DANS LA POCHE DU DOCTEUR, LORSQU'IL MOURUT + + À MINDEN, L'AN DE GRÂCE 1759 + + 1759 + + + +CHAPITRE I. + +Comment Candide fut élevé dans un beau château, et comment il fut +chassé d'icelui. + +Il y avait en Vestphalie, dans le château de M. le baron de +Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné +les moeurs les plus douces. Sa physionomie annonçait son âme. +Il avait le jugement assez droit, avec l'esprit le plus simple; +c'est, je crois, pour cette raison qu'on le nommait Candide. Les +anciens domestiques de la maison soupçonnaient qu'il était fils +de la soeur de monsieur le baron et d'un bon et honnête +gentilhomme du voisinage, que cette demoiselle ne voulut jamais +épouser parce qu'il n'avait pu prouver que soixante et onze +quartiers, et que le reste de son arbre généalogique avait été +perdu par l'injure du temps. + +Monsieur le baron était un des plus puissants seigneurs de la +Westphalie, car son château avait une porte et des fenêtres. Sa +grande salle même était ornée d'une tapisserie. Tous les chiens +de ses basses-cours composaient une meute dans le besoin; ses +palefreniers étaient ses piqueurs; le vicaire du village était +son grand-aumônier. Ils l'appelaient tous monseigneur, et ils +riaient quand il fesait des contes. + +Madame la baronne, qui pesait environ trois cent cinquante +livres, s'attirait par là une très grande considération, et +fesait les honneurs de la maison avec une dignité qui la rendait +encore plus respectable. Sa fille Cunégonde, âgée de dix-sept +ans, était haute en couleur, fraîche, grasse, appétissante. Le +fils du baron paraissait en tout digne de son père. Le +précepteur Pangloss[1] était l'oracle de la maison, et le petit +Candide écoutait ses leçons avec toute la bonne foi de son âge et +de son caractère. + + [1] De _pan_, tout, et _glossa_, langue. B. + + +Pangloss enseignait la métaphysico-théologo-cosmolonigologie. Il +prouvait admirablement qu'il n'y a point d'effet sans cause, et +que, dans ce meilleur des mondes possibles, le château de +monseigneur le baron était le plus beau des châteaux, et madame +la meilleure des baronnes possibles. + +Il est démontré, disait-il, que les choses ne peuvent être +autrement; car tout étant fait pour une fin, tout est +nécessairement pour la meilleure fin. Remarquez bien que les nez +ont été faits pour porter des lunettes; aussi avons-nous des +lunettes[2]. Les jambes sont visiblement instituées pour être +chaussées, et nous avons des chausses. Les pierres ont été +formées pour être taillées et pour en faire des châteaux; aussi +monseigneur a un très beau château: le plus grand baron de la +province doit être le mieux logé; et les cochons étant faits pour +être mangés, nous mangeons du porc toute l'année: par conséquent, +ceux qui ont avancé que tout est bien ont dit une sottise; il +fallait dire que tout est au mieux. + + [2] Voyez tome XXVII, page 528; et dans les _Mélanges_, année + 1738, le chapitre XI de la troisième partie des _Éléments de la + philosophie de Newton_; et année 1768, le chapitre X des + _Singularités de la nature_. B. + + +Candide écoutait attentivement, et croyait innocemment; car il +trouvait mademoiselle Cunégonde extrêmement belle, quoiqu'il ne +prît jamais la hardiesse de le lui dire. Il concluait qu'après +le bonheur d'être né baron de Thunder-ten-tronckh, le second +degré de bonheur était d'être mademoiselle Cunégonde; le +troisième, de la voir tous les jours; et le quatrième, d'entendre +maître Pangloss, le plus grand philosophe de la province, et par +conséquent de toute la terre. + +Un jour Cunégonde, en se promenant auprès du château, dans le +petit bois qu'on appelait parc, vit entre des broussailles le +docteur Pangloss qui donnait une leçon de physique expérimentale +à la femme de chambre de sa mère, petite brune très jolie et très +docile. Comme mademoiselle Cunégonde avait beaucoup de +disposition pour les sciences, elle observa, sans souffler, les +expériences réitérées dont elle fut témoin; elle vit clairement +la raison suffisante du docteur, les effets et les causes, et +s'en retourna tout agitée, toute pensive, toute remplie du désir +d'être savante, songeant qu'elle pourrait bien être la raison +suffisante du jeune Candide, qui pouvait aussi être la sienne. + +Elle rencontra Candide en revenant au château, et rougit: Candide +rougit aussi . Elle lui dit bonjour d'une voix entrecoupée; et +Candide lui parla sans savoir ce qu'il disait. Le lendemain, +après le dîner, comme on sortait de table, Cunégonde et Candide +se trouvèrent derrière un paravent; Cunégonde laissa tomber son +mouchoir, Candide le ramassa; elle lui prit innocemment la main; +le jeune homme baisa innocemment la main de la jeune demoiselle +avec une vivacité, une sensibilité, une grâce toute particulière; +leurs bouches se rencontrèrent, leurs yeux s'enflammèrent, leurs +genoux tremblèrent, leurs mains s'égarèrent. M. le baron de +Thunder-ten-tronckh passa auprès du paravent, et voyant cette +cause et cet effet, chassa Candide du château à grands coups de +pied dans le derrière. Cunégonde s'évanouit: elle fut souffletée +par madame la baronne dès qu'elle fut revenue à elle-même; et +tout fut consterné dans le plus beau et le plus agréable des +châteaux possibles. + + + +CHAPITRE II + +Ce que devint Candide parmi les Bulgares. + + +Candide, chassé du paradis terrestre, marcha longtemps sans +savoir où, pleurant, levant les yeux au ciel, les tournant +souvent vers le plus beau des châteaux qui renfermait la plus +belle des baronnettes; il se coucha sans souper au milieu des +champs entre deux sillons; la neige tombait à gros flocons. +Candide, tout transi, se traîna le lendemain vers la ville +voisine, qui s'appelle _Valdberghoff-trarbk-dikdorff_, n'ayant +point d'argent, mourant de faim et de lassitude. Il s'arrêta +tristement à la porte d'un cabaret. Deux hommes habillés de bleu +le remarquèrent: Camarade, dit l'un, voilà un jeune homme très +bien fait, et qui a la taille requise; ils s'avancèrent vers +Candide et le prièrent à dîner très civilement.--Messieurs, leur +dit Candide avec une modestie charmante, vous me faites beaucoup +d'honneur, mais je n'ai pas de quoi payer mon écot.--Ah! +monsieur, lui dit un des bleus, les personnes de votre figure et +de votre mérite ne paient jamais rien: n'avez-vous pas cinq pieds +cinq pouces de haut?--Oui, messieurs, c'est ma taille, dit-il en +fesant la révérence.--Ah! monsieur, mettez-vous à table; non +seulement nous vous défraierons, mais nous ne souffrirons jamais +qu'un homme comme vous manque d'argent; les hommes ne sont faits +que pour se secourir les uns les autres.--Vous avez raison, dit +Candide; c'est ce que M. Pangloss m'a toujours dit, et je vois +bien que tout est au mieux. On le prie d'accepter quelques écus, +il les prend et veut faire son billet; on n'en veut point, on se +met à table. N'aimez-vous pas tendrement?....--Oh! oui, +répond-il, j'aime tendrement mademoiselle Cunégonde.--Non, dit +l'un de ces messieurs, nous vous demandons si vous n'aimez pas +tendrement le roi des Bulgares?--Point du tout, dit-il, car je ne +l'ai jamais vu.--Comment! c'est le plus charmant des rois, et il +faut boire à sa santé.--Oh! très volontiers, messieurs. Et il +boit. C'en est assez, lui dit-on, vous voilà l'appui, le +soutien, le défenseur, le héros des Bulgares; votre fortune est +faite, et votre gloire est assurée. On lui met sur-le-champ les +fers aux pieds, et on le mène au régiment. On le fait tourner à +droite, à gauche, hausser la baguette, remettre la baguette, +coucher en joue, tirer, doubler le pas, et on lui donne trente +coups de bâton; le lendemain, il fait l'exercice un peu moins +mal, et il ne reçoit que vingt coups; le surlendemain, on ne lui +en donne que dix, et il est regardé par ses camarades comme un +prodige. + +Candide, tout stupéfait, ne démêlait pas encore trop bien comment +il était un héros. Il s'avisa un beau jour de printemps de +s'aller promener, marchant tout droit devant lui, croyant que +c'était un privilège de l'espèce humaine, comme de l'espèce +animale, de se servir de ses jambes à son plaisir. Il n'eut pas +fait deux lieues que voilà quatre autres héros de six pieds qui +l'atteignent, qui le lient, qui le mènent dans un cachot. On lui +demanda juridiquement ce qu'il aimait le mieux d'être fustigé +trente-six fois par tout le régiment, ou de recevoir à-la-fois +douze balles de plomb dans la cervelle. Il eut beau dire que les +volontés sont libres, et qu'il ne voulait ni l'un ni l'autre, il +fallut faire un choix; il se détermina, en vertu du don de Dieu +qu'on nomme _liberté_, à passer trente-six fois par les +baguettes; il essuya deux promenades. Le régiment était composé +de deux mille hommes; cela lui composa quatre mille coups de +baguette, qui, depuis la nuque du cou jusqu'au cul, lui +découvrirent les muscles et les nerfs. Comme on allait procéder +à la troisième course, Candide, n'en pouvant plus, demanda en +grâce qu'on voulût bien avoir la bonté de lui casser la tête; il +obtint cette faveur; on lui bande les yeux; on le fait mettre à +genoux. Le roi des Bulgares passe dans ce moment, s'informe du +crime du patient; et comme ce roi avait un grand génie, il +comprit, par tout ce qu'il apprit de Candide, que c'était un +jeune métaphysicien fort ignorant des choses de ce monde, et il +lui accorda sa grâce avec une clémence qui sera louée dans tous +les journaux et dans tous les siècles. Un brave chirurgien +guérit Candide en trois semaines avec les émollients enseignés +par Dioscoride. Il avait déjà un peu de peau et pouvait marcher, +quand le roi des Bulgares livra bataille au roi des Abares. + + + +CHAPITRE III. + +Comment Candide se sauva d'entre les Bulgares, et ce qu'il +devint. + + +Rien n'était si beau, si leste, si brillant, si bien ordonné que +les deux armées. Les trompettes, les fifres, les hautbois, les +tambours, les canons; formaient une harmonie telle qu'il n'y en +eut jamais en enfer. Les canons renversèrent d'abord à peu près +six mille hommes de chaque côté; ensuite la mousqueterie ôta du +meilleur des mondes environ neuf à dix mille coquins qui en +infectaient la surface. La baïonnette fut aussi la raison +suffisante de la mort de quelques milliers d'hommes. Le tout +pouvait bien se monter à une trentaine de mille âmes. Candide, +qui tremblait comme un philosophe, se cacha du mieux qu'il put +pendant cette boucherie héroïque. + +Enfin, tandis que les deux rois fesaient chanter des _Te Deum_, +chacun dans son camp, il prit le parti d'aller raisonner ailleurs +des effets et des causes. Il passa par-dessus des tas de morts +et de mourants, et gagna d'abord un village voisin; il était en +cendres: c'était un village abare que les Bulgares avaient brûlé, +selon les lois du droit public. Ici des vieillards criblés de +coups regardaient mourir leurs femmes égorgées, qui tenaient +leurs enfants à leurs mamelles sanglantes; là des filles +éventrées après avoir assouvi les besoins naturels de quelques +héros, rendaient les derniers soupirs; d'autres à demi brûlées +criaient qu'on achevât de leur donner la mort. Des cervelles +étaient répandues sur la terre à côté de bras et de jambes +coupés. + +Candide s'enfuit au plus vite dans un autre village: il +appartenait à des Bulgares, et les héros abares l'avaient traité +de même. Candide, toujours marchant sur des membres palpitants +ou à travers des ruines, arriva enfin hors du théâtre de la +guerre, portant quelques petites provisions dans son bissac, et +n'oubliant jamais mademoiselle Cunégonde. Ses provisions lui +manquèrent quand il fut en Hollande; mais ayant entendu dire que +tout le monde était riche dans ce pays-là, et qu'on y était +chrétien, il ne douta pas qu'on ne le traitât aussi bien qu'il +l'avait été dans le château de M. le baron, avant qu'il en eût +été chassé pour les beaux yeux de mademoiselle Cunégonde. + +Il demanda l'aumône à plusieurs graves personnages, qui lui +répondirent tous que, s'il continuait à faire ce métier, on +l'enfermerait dans une maison de correction pour lui apprendre à +vivre. + +Il s'adressa ensuite à un homme qui venait de parler tout seul +une heure de suite sur la charité dans une grande assemblée. Cet +orateur le regardant de travers lui dit: Que venez-vous faire +ici? y êtes-vous pour la bonne cause? Il n'y a point d'effet sans +cause, répondit modestement Candide; tout est enchaîné +nécessairement et arrangé pour le mieux. Il a fallu que je fusse +chassé d'auprès de mademoiselle Cunégonde, que j'aie passé par +les baguettes, et il faut que je demande mon pain, jusqu'à ce que +je puisse en gagner; tout cela ne pouvait être autrement. Mon +ami, lui dit l'orateur, croyez-vous que le pape soit +l'antechrist? Je ne l'avais pas encore entendu dire, répondit +Candide: mais qu'il le soit, ou qu'il ne le soit pas, je manque +de pain. Tu ne mérites pas d'en manger, dit l'autre: va, coquin, +va, misérable, ne m'approche de ta vie. La femme de l'orateur +ayant mis la tête à la fenêtre, et avisant un homme qui doutait +que le pape fût antechrist, lui répandit sur le chef un +plein..... O ciel! à quel excès se porte le zèle de la religion +dans les dames! + +Un homme qui n'avait point été baptisé, un bon anabaptiste, nommé +Jacques, vit la manière cruelle et ignominieuse dont on traitait +ainsi un de ses frères, un être à deux pieds sans plumes, qui +avait une âme; il l'amena chez lui, le nettoya, lui donna du pain +et de la bière, lui fit présent de deux florins, et voulut même +lui apprendre à travailler dans ses manufactures aux étoffes de +Perse qu'on fabrique en Hollande. Candide se prosternant presque +devant lui, s'écriait: Maître Pangloss me l'avait bien dit que +tout est au mieux dans ce monde, car je suis infiniment plus +touché de votre extrême générosité que de la dureté de ce +monsieur à manteau noir, et de madame son épouse. + +Le lendemain, en se promenant, il rencontra un gueux tout couvert +de pustules, les yeux morts, le bout du nez rongé, la bouche de +travers, les dents noires, et parlant de la gorge, tourmenté +d'une toux violente, et crachant une dent à chaque effort. + + + +CHAPITRE IV. + +Comment Candide rencontra son ancien maître de philosophie, le +docteur Pangloss, et ce qui en advint. + + +Candide, plus ému encore de compassion que d'horreur, donna à cet +épouvantable gueux les deux florins qu'il avait reçus de son +honnête anabaptiste Jacques. Le fantôme le regarda fixement, +versa des larmes, et sauta à son cou. Candide effrayé recule. +Hélas! dit le misérable à l'autre misérable, ne reconnaissez-vous +plus votre cher Pangloss? Qu'entends-je? vous, mon cher maître! +vous, dans cet état horrible! quel malheur vous est-il donc +arrivé? pourquoi n'êtes-vous plus dans le plus beau des châteaux? +qu'est devenue mademoiselle Cunégonde, la perle des filles, le +chef-d'oeuvre de la nature? Je n'en peux plus, dit Pangloss. +Aussitôt Candide le mena dans l'étable de l'anabaptiste, où il +lui fit manger un peu de pain; et quand Pangloss fut refait: Eh +bien! lui dit-il, Cunégonde? Elle est morte, reprit l'autre. +Candide s'évanouit à ce mot: son ami rappela ses sens avec un peu +de mauvais vinaigre qui se trouva par hasard dans l'étable. +Candide rouvre les yeux. Cunégonde est morte! Ah! meilleur des +mondes, où êtes-vous? Mais de quelle maladie est-elle morte? ne +serait-ce point de m'avoir vu chasser du beau château de monsieur +son père à grands coups de pied? Non, dit Pangloss, elle a été +éventrée par des soldats bulgares, après avoir été violée autant +qu'on peut l'être; ils ont cassé la tête à monsieur le baron qui +voulait la défendre; madame la baronne a été coupée en morceaux; +mon pauvre pupille traité précisément comme sa soeur; et quant au +château, il n'est pas resté pierre sur pierre, pas une grange, +pas un mouton, pas un canard, pas un arbre; mais nous avons été +bien vengés, car les Abares en ont fait autant dans une baronnie +voisine qui appartenait à un seigneur bulgare. + +A ce discours, Candide s'évanouit encore; mais revenu à soi, et +ayant dit tout ce qu'il devait dire, il s'enquit de la cause et +de l'effet, et de la raison suffisante qui avait mis Pangloss +dans un si piteux état. Hélas! dit l'autre, c'est l'amour: +l'amour, le consolateur du genre humain, le conservateur de +l'univers, l'âme de tous les êtres sensibles, le tendre amour. +Hélas! dit Candide, je l'ai connu cet amour, ce souverain des +coeurs, cette âme de notre âme; il ne m'a jamais valu qu'un +baiser et vingt coups de pied au cul. Comment cette belle cause +a-t-elle pu produire en vous un effet si abominable? + +Pangloss répondit en ces termes: O mon cher Candide! vous avez +connu Paquette, cette jolie suivante de notre auguste baronne: +j'ai goûté dans ses bras les délices du paradis, qui ont produit +ces tourments d'enfer dont vous me voyez dévoré; elle en était +infectée, elle en est peut-être morte. Paquette tenait ce +présent d'un cordelier très savant qui avait remonté à la source, +car il l'avait eu d'une vieille comtesse, qui l'avait reçu d'un +capitaine de cavalerie, qui le devait à une marquise, qui le +tenait d'un page, qui l'avait reçu d'un jésuite, qui, étant +novice, l'avait eu en droite ligne d'un des compagnons de +Christophe Colomb. Pour moi, je ne le donnerai à personne, car +je me meurs. + +O Pangloss! s'écria Candide, voilà une étrange généalogie! +n'est-ce pas le diable qui en fut la souche? Point du tout, +répliqua ce grand homme; c'était une chose indispensable dans le +meilleur des mondes, un ingrédient nécessaire; car si Colomb +n'avait pas attrapé dans une île de l'Amérique cette maladie[1] +qui empoisonne la source de la génération, qui souvent même +empêche la génération, et qui est évidemment l'opposé du grand +but de la nature, nous n'aurions ni le chocolat ni la cochenille; +il faut encore observer que jusqu'aujourd'hui, dans notre +continent, cette maladie nous est particulière, comme la +controverse. Les Turcs, les Indiens, les Persans, les Chinois, +les Siamois, les Japonais, ne la connaissent pas encore; mais il +y a une raison suffisante pour qu'ils la connaissent à leur tour +dans quelques siècles. En attendant elle a fait un merveilleux +progrès parmi nous, et surtout dans ces grandes armées composées +d'honnêtes stipendiaires bien élevés, qui décident du destin des +états; on peut assurer que, quand trente mille hommes combattent +en bataille rangée contre des troupes égales en nombre, il y a +environ vingt mille vérolés de chaque côté. + + [1] Voyez tome XXXI, page 7. B. + + +Voilà qui est admirable, dit Candide; mais il faut vous faire +guérir. Et comment le puis-je? dit Pangloss; je n'ai pas le sou, +mon ami, et dans toute l'étendue de ce globe on ne peut ni se +faire saigner, ni prendre un lavement sans payer, ou sans qu'il y +ait quelqu'un qui paie pour nous. + +Ce dernier discours détermina Candide; il alla se jeter aux pieds +de son charitable anabaptiste Jacques, et lui fit une peinture si +touchante de l'état où son ami était réduit, que le bon-homme +n'hésita pas à recueillir le docteur Pangloss; il le fit guérir à +ses dépens. Pangloss, dans la cure, ne perdit qu'un oeil et une +oreille. Il écrivait bien, et savait parfaitement +l'arithmétique. L'anabaptiste Jacques en fit son teneur de +livres. Au bout de deux mois, étant obligé d'aller à Lisbonne +pour les affaires de son commerce, il mena dans son vaisseau ses +deux philosophes. Pangloss lui expliqua comment tout était on ne +peut mieux. Jacques n'était pas de cet avis. Il faut bien, +disait-il, que les hommes aient un peu corrompu la nature, car +ils ne sont point nés loups, et ils sont devenus loups. Dieu ne +leur a donné ni canons de vingt-quatre, ni baïonnettes, et ils se +sont fait des baïonnettes et des canons pour se détruire. Je +pourrais mettre en ligne de compte les banqueroutes, et la +justice qui s'empare des biens des banqueroutiers pour en +frustrer les créanciers. Tout cela était indispensable, +répliquait le docteur borgne, et les malheurs particuliers font +le bien général; de sorte que plus il y a de malheurs +particuliers, et plus tout est bien. Tandis qu'il raisonnait, +l'air s'obscurcit, les vents soufflèrent des quatre coins du +monde, et le vaisseau fut assailli de la plus horrible tempête, à +la vue du port de Lisbonne. + + +CHAPITRE V. + +Tempête, naufrage, tremblement de terre, et ce qui advint du +docteur Pangloss, de Candide, et de l'anabaptiste Jacques. + +La moitié des passagers affaiblis, expirants de ces angoisses +inconcevables que le roulis d'un vaisseau porte dans les nerfs et +dans toutes les humeurs du corps agitées en sens contraires, +n'avait pas même la force de s'inquiéter du danger. L'autre +moitié jetait des cris et fesait des prières; les voiles étaient +déchirées, les mâts brisés, le vaisseau entr'ouvert. Travaillait +qui pouvait, personne ne s'entendait, personne ne commandait. +L'anabaptiste aidait un peu à la manoeuvre; il était sur le +tillac; un matelot furieux le frappe rudement et l'étend sur les +planches; mais du coup qu'il lui donna, il eut lui-même une si +violente secousse, qu'il tomba hors du vaisseau, la tête la +première. Il restait suspendu et accroché à une partie de mât +rompu. Le bon Jacques court à son secours, l'aide à remonter, et +de l'effort qu'il fait, il est précipité dans la mer à la vue du +matelot, qui le laissa périr sans daigner seulement le regarder. +Candide approche, voit son bienfaiteur qui reparaît un moment, et +qui est englouti pour jamais. Il veut se jeter après lui dans la +mer: le philosophe Pangloss l'en empêche, en lui prouvant que la +rade de Lisbonne avait été formée exprès pour que cet anabaptiste +s'y noyât. Tandis qu'il le prouvait _à priori_, le vaisseau +s'entr'ouvre, tout périt à la réserve de Pangloss, de Candide, et +de ce brutal de matelot qui avait noyé le vertueux anabaptiste; +le coquin nagea heureusement jusqu'au rivage, où Pangloss et +Candide furent portés sur une planche. + +Quand ils furent revenus un peu à eux, ils marchèrent vers +Lisbonne; il leur restait quelque argent, avec lequel ils +espéraient se sauver de la faim après avoir échappé à la tempête. + +A peine ont-ils mis le pied dans la ville, en pleurant la mort de +leur bienfaiteur, qu'ils sentent la terre trembler sous leurs +pas[1]; la mer s'élève en bouillonnant dans le port, et brise les +vaisseaux qui sont à l'ancre. Des tourbillons de flammes et de +cendres couvrent les rues et les places publiques; les maisons +s'écroulent, les toits sont renversés sur les fondements, et les +fondements se dispersent; trente mille habitants de tout âge et +de tout sexe sont écrasés sous des ruines. Le matelot disait en +sifflant et en jurant: il y aura quelque chose à gagner ici. +Quelle peut être la raison suffisante de ce phénomène? disait +Pangloss. Voici le dernier jour du monde! s'écriait Candide. +Le matelot court incontinent au milieu des débris, affronte la +mort pour trouver de l'argent, en trouve, s'en empare, s'enivre, +et ayant cuvé son vin, achète les faveurs de la première fille de +bonne volonté qu'il rencontre sur les ruines des maisons +détruites, et au milieu des mourants et des morts. Pangloss le +tirait cependant par la manche: Mon ami, lui disait-il, cela +n'est pas bien, vous manquez à la raison universelle, vous prenez +mal votre temps. Tête et sang, répondit l'autre, je suis matelot +et né à Batavia; j'ai marché quatre fois sur le crucifix dans +quatre voyages au Japon[2]; tu as bien trouvé ton homme avec ta +raison universelle! + + + [1] Le tremblement de terre de Lisbonne est du 1er novembre 1755. + B. + + [2] Voyez tome XVIII, page 470. B. + + +Quelques éclats de pierre avaient blessé Candide; il était étendu +dans la rue et couvert de débris. Il disait à Pangloss: Hélas! +procure-moi un peu de vin et d'huile; je me meurs. Ce +tremblement de terre n'est pas une chose nouvelle, répondit +Pangloss; la ville de Lima éprouva les mêmes secousses en +Amérique l'année passée; mêmes causes, mêmes effets; il y a +certainement une traînée de soufre sous terre depuis Lima jusqu'à +Lisbonne. Rien n'est plus probable, dit Candide; mais, pour +Dieu, un peu d'huile et de vin. Comment probable? répliqua le +philosophe, je soutiens que la chose est démontrée. Candide +perdit connaissance, et Pangloss lui apporta un peu d'eau d'une +fontaine voisine. + +Le lendemain, ayant trouvé quelques provisions de bouche en se +glissant à travers des décombres, ils réparèrent un peu leurs +forces. Ensuite ils travaillèrent comme les autres à soulager +les habitants échappés à la mort. Quelques citoyens, secourus +par eux, leur donnèrent un aussi bon dîner qu'on le pouvait dans +un tel désastre: il est vrai que le repas était triste; les +convives arrosaient leur pain de leurs larmes; mais Pangloss les +consola, en les assurant que les choses ne pouvaient être +autrement: Car, dit-il, tout ceci est ce qu'il y a de mieux; car +s'il y a un volcan à Lisbonne, il ne pouvait être ailleurs; car +il est impossible que les choses ne soient pas où elles sont, car +tout est bien. + +Un petit homme noir, familier de l'inquisition, lequel était à +côté de lui, prit poliment la parole et dit: Apparemment que +monsieur ne croit pas au péché originel; car si tout est au +mieux, il n'y a donc eu ni chute ni punition. + +Je demande très humblement pardon à votre excellence, répondit +Pangloss encore plus poliment, car la chute de l'homme et la +malédiction entraient nécessairement dans le meilleur des mondes +possibles. Monsieur ne croit donc pas à la liberté? dit le +familier. Votre excellence m'excusera, dit Pangloss; la liberté +peut subsister avec la nécessité absolue; car il était nécessaire +que nous fussions libres; car enfin la volonté déterminée...... +Pangloss était au milieu de sa phrase, quand Je familier fit un +signe de tête à son estafier qui lui servait à boire du vin de +Porto ou d'Oporto. diff --git a/vendor/golang.org/x/text/encoding/testdata/candide-windows-1252.txt b/vendor/golang.org/x/text/encoding/testdata/candide-windows-1252.txt new file mode 100644 index 0000000..1f8f9ea --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/candide-windows-1252.txt @@ -0,0 +1,510 @@ +This file was derived from +http://www.gutenberg.org/cache/epub/4650/pg4650.txt +-------- + + CANDIDE, + + ou + + L'OPTIMISME, + + TRADUIT DE L'ALLEMAND + + DE M. LE DOCTEUR RALPH, + + AVEC LES ADDITIONS + + QU'ON A TROUVES DANS LA POCHE DU DOCTEUR, LORSQU'IL MOURUT + + MINDEN, L'AN DE GRCE 1759 + + 1759 + + + +CHAPITRE I. + +Comment Candide fut lev dans un beau chteau, et comment il fut +chass d'icelui. + +Il y avait en Vestphalie, dans le chteau de M. le baron de +Thunder-ten-tronckh, un jeune garon qui la nature avait donn +les moeurs les plus douces. Sa physionomie annonait son me. +Il avait le jugement assez droit, avec l'esprit le plus simple; +c'est, je crois, pour cette raison qu'on le nommait Candide. Les +anciens domestiques de la maison souponnaient qu'il tait fils +de la soeur de monsieur le baron et d'un bon et honnte +gentilhomme du voisinage, que cette demoiselle ne voulut jamais +pouser parce qu'il n'avait pu prouver que soixante et onze +quartiers, et que le reste de son arbre gnalogique avait t +perdu par l'injure du temps. + +Monsieur le baron tait un des plus puissants seigneurs de la +Westphalie, car son chteau avait une porte et des fentres. Sa +grande salle mme tait orne d'une tapisserie. Tous les chiens +de ses basses-cours composaient une meute dans le besoin; ses +palefreniers taient ses piqueurs; le vicaire du village tait +son grand-aumnier. Ils l'appelaient tous monseigneur, et ils +riaient quand il fesait des contes. + +Madame la baronne, qui pesait environ trois cent cinquante +livres, s'attirait par l une trs grande considration, et +fesait les honneurs de la maison avec une dignit qui la rendait +encore plus respectable. Sa fille Cungonde, ge de dix-sept +ans, tait haute en couleur, frache, grasse, apptissante. Le +fils du baron paraissait en tout digne de son pre. Le +prcepteur Pangloss[1] tait l'oracle de la maison, et le petit +Candide coutait ses leons avec toute la bonne foi de son ge et +de son caractre. + + [1] De _pan_, tout, et _glossa_, langue. B. + + +Pangloss enseignait la mtaphysico-thologo-cosmolonigologie. Il +prouvait admirablement qu'il n'y a point d'effet sans cause, et +que, dans ce meilleur des mondes possibles, le chteau de +monseigneur le baron tait le plus beau des chteaux, et madame +la meilleure des baronnes possibles. + +Il est dmontr, disait-il, que les choses ne peuvent tre +autrement; car tout tant fait pour une fin, tout est +ncessairement pour la meilleure fin. Remarquez bien que les nez +ont t faits pour porter des lunettes; aussi avons-nous des +lunettes[2]. Les jambes sont visiblement institues pour tre +chausses, et nous avons des chausses. Les pierres ont t +formes pour tre tailles et pour en faire des chteaux; aussi +monseigneur a un trs beau chteau: le plus grand baron de la +province doit tre le mieux log; et les cochons tant faits pour +tre mangs, nous mangeons du porc toute l'anne: par consquent, +ceux qui ont avanc que tout est bien ont dit une sottise; il +fallait dire que tout est au mieux. + + [2] Voyez tome XXVII, page 528; et dans les _Mlanges_, anne + 1738, le chapitre XI de la troisime partie des _lments de la + philosophie de Newton_; et anne 1768, le chapitre X des + _Singularits de la nature_. B. + + +Candide coutait attentivement, et croyait innocemment; car il +trouvait mademoiselle Cungonde extrmement belle, quoiqu'il ne +prt jamais la hardiesse de le lui dire. Il concluait qu'aprs +le bonheur d'tre n baron de Thunder-ten-tronckh, le second +degr de bonheur tait d'tre mademoiselle Cungonde; le +troisime, de la voir tous les jours; et le quatrime, d'entendre +matre Pangloss, le plus grand philosophe de la province, et par +consquent de toute la terre. + +Un jour Cungonde, en se promenant auprs du chteau, dans le +petit bois qu'on appelait parc, vit entre des broussailles le +docteur Pangloss qui donnait une leon de physique exprimentale + la femme de chambre de sa mre, petite brune trs jolie et trs +docile. Comme mademoiselle Cungonde avait beaucoup de +disposition pour les sciences, elle observa, sans souffler, les +expriences ritres dont elle fut tmoin; elle vit clairement +la raison suffisante du docteur, les effets et les causes, et +s'en retourna tout agite, toute pensive, toute remplie du dsir +d'tre savante, songeant qu'elle pourrait bien tre la raison +suffisante du jeune Candide, qui pouvait aussi tre la sienne. + +Elle rencontra Candide en revenant au chteau, et rougit: Candide +rougit aussi . Elle lui dit bonjour d'une voix entrecoupe; et +Candide lui parla sans savoir ce qu'il disait. Le lendemain, +aprs le dner, comme on sortait de table, Cungonde et Candide +se trouvrent derrire un paravent; Cungonde laissa tomber son +mouchoir, Candide le ramassa; elle lui prit innocemment la main; +le jeune homme baisa innocemment la main de la jeune demoiselle +avec une vivacit, une sensibilit, une grce toute particulire; +leurs bouches se rencontrrent, leurs yeux s'enflammrent, leurs +genoux tremblrent, leurs mains s'garrent. M. le baron de +Thunder-ten-tronckh passa auprs du paravent, et voyant cette +cause et cet effet, chassa Candide du chteau grands coups de +pied dans le derrire. Cungonde s'vanouit: elle fut soufflete +par madame la baronne ds qu'elle fut revenue elle-mme; et +tout fut constern dans le plus beau et le plus agrable des +chteaux possibles. + + + +CHAPITRE II + +Ce que devint Candide parmi les Bulgares. + + +Candide, chass du paradis terrestre, marcha longtemps sans +savoir o, pleurant, levant les yeux au ciel, les tournant +souvent vers le plus beau des chteaux qui renfermait la plus +belle des baronnettes; il se coucha sans souper au milieu des +champs entre deux sillons; la neige tombait gros flocons. +Candide, tout transi, se trana le lendemain vers la ville +voisine, qui s'appelle _Valdberghoff-trarbk-dikdorff_, n'ayant +point d'argent, mourant de faim et de lassitude. Il s'arrta +tristement la porte d'un cabaret. Deux hommes habills de bleu +le remarqurent: Camarade, dit l'un, voil un jeune homme trs +bien fait, et qui a la taille requise; ils s'avancrent vers +Candide et le prirent dner trs civilement.--Messieurs, leur +dit Candide avec une modestie charmante, vous me faites beaucoup +d'honneur, mais je n'ai pas de quoi payer mon cot.--Ah! +monsieur, lui dit un des bleus, les personnes de votre figure et +de votre mrite ne paient jamais rien: n'avez-vous pas cinq pieds +cinq pouces de haut?--Oui, messieurs, c'est ma taille, dit-il en +fesant la rvrence.--Ah! monsieur, mettez-vous table; non +seulement nous vous dfraierons, mais nous ne souffrirons jamais +qu'un homme comme vous manque d'argent; les hommes ne sont faits +que pour se secourir les uns les autres.--Vous avez raison, dit +Candide; c'est ce que M. Pangloss m'a toujours dit, et je vois +bien que tout est au mieux. On le prie d'accepter quelques cus, +il les prend et veut faire son billet; on n'en veut point, on se +met table. N'aimez-vous pas tendrement?....--Oh! oui, +rpond-il, j'aime tendrement mademoiselle Cungonde.--Non, dit +l'un de ces messieurs, nous vous demandons si vous n'aimez pas +tendrement le roi des Bulgares?--Point du tout, dit-il, car je ne +l'ai jamais vu.--Comment! c'est le plus charmant des rois, et il +faut boire sa sant.--Oh! trs volontiers, messieurs. Et il +boit. C'en est assez, lui dit-on, vous voil l'appui, le +soutien, le dfenseur, le hros des Bulgares; votre fortune est +faite, et votre gloire est assure. On lui met sur-le-champ les +fers aux pieds, et on le mne au rgiment. On le fait tourner +droite, gauche, hausser la baguette, remettre la baguette, +coucher en joue, tirer, doubler le pas, et on lui donne trente +coups de bton; le lendemain, il fait l'exercice un peu moins +mal, et il ne reoit que vingt coups; le surlendemain, on ne lui +en donne que dix, et il est regard par ses camarades comme un +prodige. + +Candide, tout stupfait, ne dmlait pas encore trop bien comment +il tait un hros. Il s'avisa un beau jour de printemps de +s'aller promener, marchant tout droit devant lui, croyant que +c'tait un privilge de l'espce humaine, comme de l'espce +animale, de se servir de ses jambes son plaisir. Il n'eut pas +fait deux lieues que voil quatre autres hros de six pieds qui +l'atteignent, qui le lient, qui le mnent dans un cachot. On lui +demanda juridiquement ce qu'il aimait le mieux d'tre fustig +trente-six fois par tout le rgiment, ou de recevoir -la-fois +douze balles de plomb dans la cervelle. Il eut beau dire que les +volonts sont libres, et qu'il ne voulait ni l'un ni l'autre, il +fallut faire un choix; il se dtermina, en vertu du don de Dieu +qu'on nomme _libert_, passer trente-six fois par les +baguettes; il essuya deux promenades. Le rgiment tait compos +de deux mille hommes; cela lui composa quatre mille coups de +baguette, qui, depuis la nuque du cou jusqu'au cul, lui +dcouvrirent les muscles et les nerfs. Comme on allait procder + la troisime course, Candide, n'en pouvant plus, demanda en +grce qu'on voult bien avoir la bont de lui casser la tte; il +obtint cette faveur; on lui bande les yeux; on le fait mettre +genoux. Le roi des Bulgares passe dans ce moment, s'informe du +crime du patient; et comme ce roi avait un grand gnie, il +comprit, par tout ce qu'il apprit de Candide, que c'tait un +jeune mtaphysicien fort ignorant des choses de ce monde, et il +lui accorda sa grce avec une clmence qui sera loue dans tous +les journaux et dans tous les sicles. Un brave chirurgien +gurit Candide en trois semaines avec les mollients enseigns +par Dioscoride. Il avait dj un peu de peau et pouvait marcher, +quand le roi des Bulgares livra bataille au roi des Abares. + + + +CHAPITRE III. + +Comment Candide se sauva d'entre les Bulgares, et ce qu'il +devint. + + +Rien n'tait si beau, si leste, si brillant, si bien ordonn que +les deux armes. Les trompettes, les fifres, les hautbois, les +tambours, les canons; formaient une harmonie telle qu'il n'y en +eut jamais en enfer. Les canons renversrent d'abord peu prs +six mille hommes de chaque ct; ensuite la mousqueterie ta du +meilleur des mondes environ neuf dix mille coquins qui en +infectaient la surface. La baonnette fut aussi la raison +suffisante de la mort de quelques milliers d'hommes. Le tout +pouvait bien se monter une trentaine de mille mes. Candide, +qui tremblait comme un philosophe, se cacha du mieux qu'il put +pendant cette boucherie hroque. + +Enfin, tandis que les deux rois fesaient chanter des _Te Deum_, +chacun dans son camp, il prit le parti d'aller raisonner ailleurs +des effets et des causes. Il passa par-dessus des tas de morts +et de mourants, et gagna d'abord un village voisin; il tait en +cendres: c'tait un village abare que les Bulgares avaient brl, +selon les lois du droit public. Ici des vieillards cribls de +coups regardaient mourir leurs femmes gorges, qui tenaient +leurs enfants leurs mamelles sanglantes; l des filles +ventres aprs avoir assouvi les besoins naturels de quelques +hros, rendaient les derniers soupirs; d'autres demi brles +criaient qu'on achevt de leur donner la mort. Des cervelles +taient rpandues sur la terre ct de bras et de jambes +coups. + +Candide s'enfuit au plus vite dans un autre village: il +appartenait des Bulgares, et les hros abares l'avaient trait +de mme. Candide, toujours marchant sur des membres palpitants +ou travers des ruines, arriva enfin hors du thtre de la +guerre, portant quelques petites provisions dans son bissac, et +n'oubliant jamais mademoiselle Cungonde. Ses provisions lui +manqurent quand il fut en Hollande; mais ayant entendu dire que +tout le monde tait riche dans ce pays-l, et qu'on y tait +chrtien, il ne douta pas qu'on ne le traitt aussi bien qu'il +l'avait t dans le chteau de M. le baron, avant qu'il en et +t chass pour les beaux yeux de mademoiselle Cungonde. + +Il demanda l'aumne plusieurs graves personnages, qui lui +rpondirent tous que, s'il continuait faire ce mtier, on +l'enfermerait dans une maison de correction pour lui apprendre +vivre. + +Il s'adressa ensuite un homme qui venait de parler tout seul +une heure de suite sur la charit dans une grande assemble. Cet +orateur le regardant de travers lui dit: Que venez-vous faire +ici? y tes-vous pour la bonne cause? Il n'y a point d'effet sans +cause, rpondit modestement Candide; tout est enchan +ncessairement et arrang pour le mieux. Il a fallu que je fusse +chass d'auprs de mademoiselle Cungonde, que j'aie pass par +les baguettes, et il faut que je demande mon pain, jusqu' ce que +je puisse en gagner; tout cela ne pouvait tre autrement. Mon +ami, lui dit l'orateur, croyez-vous que le pape soit +l'antechrist? Je ne l'avais pas encore entendu dire, rpondit +Candide: mais qu'il le soit, ou qu'il ne le soit pas, je manque +de pain. Tu ne mrites pas d'en manger, dit l'autre: va, coquin, +va, misrable, ne m'approche de ta vie. La femme de l'orateur +ayant mis la tte la fentre, et avisant un homme qui doutait +que le pape ft antechrist, lui rpandit sur le chef un +plein..... O ciel! quel excs se porte le zle de la religion +dans les dames! + +Un homme qui n'avait point t baptis, un bon anabaptiste, nomm +Jacques, vit la manire cruelle et ignominieuse dont on traitait +ainsi un de ses frres, un tre deux pieds sans plumes, qui +avait une me; il l'amena chez lui, le nettoya, lui donna du pain +et de la bire, lui fit prsent de deux florins, et voulut mme +lui apprendre travailler dans ses manufactures aux toffes de +Perse qu'on fabrique en Hollande. Candide se prosternant presque +devant lui, s'criait: Matre Pangloss me l'avait bien dit que +tout est au mieux dans ce monde, car je suis infiniment plus +touch de votre extrme gnrosit que de la duret de ce +monsieur manteau noir, et de madame son pouse. + +Le lendemain, en se promenant, il rencontra un gueux tout couvert +de pustules, les yeux morts, le bout du nez rong, la bouche de +travers, les dents noires, et parlant de la gorge, tourment +d'une toux violente, et crachant une dent chaque effort. + + + +CHAPITRE IV. + +Comment Candide rencontra son ancien matre de philosophie, le +docteur Pangloss, et ce qui en advint. + + +Candide, plus mu encore de compassion que d'horreur, donna cet +pouvantable gueux les deux florins qu'il avait reus de son +honnte anabaptiste Jacques. Le fantme le regarda fixement, +versa des larmes, et sauta son cou. Candide effray recule. +Hlas! dit le misrable l'autre misrable, ne reconnaissez-vous +plus votre cher Pangloss? Qu'entends-je? vous, mon cher matre! +vous, dans cet tat horrible! quel malheur vous est-il donc +arriv? pourquoi n'tes-vous plus dans le plus beau des chteaux? +qu'est devenue mademoiselle Cungonde, la perle des filles, le +chef-d'oeuvre de la nature? Je n'en peux plus, dit Pangloss. +Aussitt Candide le mena dans l'table de l'anabaptiste, o il +lui fit manger un peu de pain; et quand Pangloss fut refait: Eh +bien! lui dit-il, Cungonde? Elle est morte, reprit l'autre. +Candide s'vanouit ce mot: son ami rappela ses sens avec un peu +de mauvais vinaigre qui se trouva par hasard dans l'table. +Candide rouvre les yeux. Cungonde est morte! Ah! meilleur des +mondes, o tes-vous? Mais de quelle maladie est-elle morte? ne +serait-ce point de m'avoir vu chasser du beau chteau de monsieur +son pre grands coups de pied? Non, dit Pangloss, elle a t +ventre par des soldats bulgares, aprs avoir t viole autant +qu'on peut l'tre; ils ont cass la tte monsieur le baron qui +voulait la dfendre; madame la baronne a t coupe en morceaux; +mon pauvre pupille trait prcisment comme sa soeur; et quant au +chteau, il n'est pas rest pierre sur pierre, pas une grange, +pas un mouton, pas un canard, pas un arbre; mais nous avons t +bien vengs, car les Abares en ont fait autant dans une baronnie +voisine qui appartenait un seigneur bulgare. + +A ce discours, Candide s'vanouit encore; mais revenu soi, et +ayant dit tout ce qu'il devait dire, il s'enquit de la cause et +de l'effet, et de la raison suffisante qui avait mis Pangloss +dans un si piteux tat. Hlas! dit l'autre, c'est l'amour: +l'amour, le consolateur du genre humain, le conservateur de +l'univers, l'me de tous les tres sensibles, le tendre amour. +Hlas! dit Candide, je l'ai connu cet amour, ce souverain des +coeurs, cette me de notre me; il ne m'a jamais valu qu'un +baiser et vingt coups de pied au cul. Comment cette belle cause +a-t-elle pu produire en vous un effet si abominable? + +Pangloss rpondit en ces termes: O mon cher Candide! vous avez +connu Paquette, cette jolie suivante de notre auguste baronne: +j'ai got dans ses bras les dlices du paradis, qui ont produit +ces tourments d'enfer dont vous me voyez dvor; elle en tait +infecte, elle en est peut-tre morte. Paquette tenait ce +prsent d'un cordelier trs savant qui avait remont la source, +car il l'avait eu d'une vieille comtesse, qui l'avait reu d'un +capitaine de cavalerie, qui le devait une marquise, qui le +tenait d'un page, qui l'avait reu d'un jsuite, qui, tant +novice, l'avait eu en droite ligne d'un des compagnons de +Christophe Colomb. Pour moi, je ne le donnerai personne, car +je me meurs. + +O Pangloss! s'cria Candide, voil une trange gnalogie! +n'est-ce pas le diable qui en fut la souche? Point du tout, +rpliqua ce grand homme; c'tait une chose indispensable dans le +meilleur des mondes, un ingrdient ncessaire; car si Colomb +n'avait pas attrap dans une le de l'Amrique cette maladie[1] +qui empoisonne la source de la gnration, qui souvent mme +empche la gnration, et qui est videmment l'oppos du grand +but de la nature, nous n'aurions ni le chocolat ni la cochenille; +il faut encore observer que jusqu'aujourd'hui, dans notre +continent, cette maladie nous est particulire, comme la +controverse. Les Turcs, les Indiens, les Persans, les Chinois, +les Siamois, les Japonais, ne la connaissent pas encore; mais il +y a une raison suffisante pour qu'ils la connaissent leur tour +dans quelques sicles. En attendant elle a fait un merveilleux +progrs parmi nous, et surtout dans ces grandes armes composes +d'honntes stipendiaires bien levs, qui dcident du destin des +tats; on peut assurer que, quand trente mille hommes combattent +en bataille range contre des troupes gales en nombre, il y a +environ vingt mille vrols de chaque ct. + + [1] Voyez tome XXXI, page 7. B. + + +Voil qui est admirable, dit Candide; mais il faut vous faire +gurir. Et comment le puis-je? dit Pangloss; je n'ai pas le sou, +mon ami, et dans toute l'tendue de ce globe on ne peut ni se +faire saigner, ni prendre un lavement sans payer, ou sans qu'il y +ait quelqu'un qui paie pour nous. + +Ce dernier discours dtermina Candide; il alla se jeter aux pieds +de son charitable anabaptiste Jacques, et lui fit une peinture si +touchante de l'tat o son ami tait rduit, que le bon-homme +n'hsita pas recueillir le docteur Pangloss; il le fit gurir +ses dpens. Pangloss, dans la cure, ne perdit qu'un oeil et une +oreille. Il crivait bien, et savait parfaitement +l'arithmtique. L'anabaptiste Jacques en fit son teneur de +livres. Au bout de deux mois, tant oblig d'aller Lisbonne +pour les affaires de son commerce, il mena dans son vaisseau ses +deux philosophes. Pangloss lui expliqua comment tout tait on ne +peut mieux. Jacques n'tait pas de cet avis. Il faut bien, +disait-il, que les hommes aient un peu corrompu la nature, car +ils ne sont point ns loups, et ils sont devenus loups. Dieu ne +leur a donn ni canons de vingt-quatre, ni baonnettes, et ils se +sont fait des baonnettes et des canons pour se dtruire. Je +pourrais mettre en ligne de compte les banqueroutes, et la +justice qui s'empare des biens des banqueroutiers pour en +frustrer les cranciers. Tout cela tait indispensable, +rpliquait le docteur borgne, et les malheurs particuliers font +le bien gnral; de sorte que plus il y a de malheurs +particuliers, et plus tout est bien. Tandis qu'il raisonnait, +l'air s'obscurcit, les vents soufflrent des quatre coins du +monde, et le vaisseau fut assailli de la plus horrible tempte, +la vue du port de Lisbonne. + + +CHAPITRE V. + +Tempte, naufrage, tremblement de terre, et ce qui advint du +docteur Pangloss, de Candide, et de l'anabaptiste Jacques. + +La moiti des passagers affaiblis, expirants de ces angoisses +inconcevables que le roulis d'un vaisseau porte dans les nerfs et +dans toutes les humeurs du corps agites en sens contraires, +n'avait pas mme la force de s'inquiter du danger. L'autre +moiti jetait des cris et fesait des prires; les voiles taient +dchires, les mts briss, le vaisseau entr'ouvert. Travaillait +qui pouvait, personne ne s'entendait, personne ne commandait. +L'anabaptiste aidait un peu la manoeuvre; il tait sur le +tillac; un matelot furieux le frappe rudement et l'tend sur les +planches; mais du coup qu'il lui donna, il eut lui-mme une si +violente secousse, qu'il tomba hors du vaisseau, la tte la +premire. Il restait suspendu et accroch une partie de mt +rompu. Le bon Jacques court son secours, l'aide remonter, et +de l'effort qu'il fait, il est prcipit dans la mer la vue du +matelot, qui le laissa prir sans daigner seulement le regarder. +Candide approche, voit son bienfaiteur qui reparat un moment, et +qui est englouti pour jamais. Il veut se jeter aprs lui dans la +mer: le philosophe Pangloss l'en empche, en lui prouvant que la +rade de Lisbonne avait t forme exprs pour que cet anabaptiste +s'y noyt. Tandis qu'il le prouvait _ priori_, le vaisseau +s'entr'ouvre, tout prit la rserve de Pangloss, de Candide, et +de ce brutal de matelot qui avait noy le vertueux anabaptiste; +le coquin nagea heureusement jusqu'au rivage, o Pangloss et +Candide furent ports sur une planche. + +Quand ils furent revenus un peu eux, ils marchrent vers +Lisbonne; il leur restait quelque argent, avec lequel ils +espraient se sauver de la faim aprs avoir chapp la tempte. + +A peine ont-ils mis le pied dans la ville, en pleurant la mort de +leur bienfaiteur, qu'ils sentent la terre trembler sous leurs +pas[1]; la mer s'lve en bouillonnant dans le port, et brise les +vaisseaux qui sont l'ancre. Des tourbillons de flammes et de +cendres couvrent les rues et les places publiques; les maisons +s'croulent, les toits sont renverss sur les fondements, et les +fondements se dispersent; trente mille habitants de tout ge et +de tout sexe sont crass sous des ruines. Le matelot disait en +sifflant et en jurant: il y aura quelque chose gagner ici. +Quelle peut tre la raison suffisante de ce phnomne? disait +Pangloss. Voici le dernier jour du monde! s'criait Candide. +Le matelot court incontinent au milieu des dbris, affronte la +mort pour trouver de l'argent, en trouve, s'en empare, s'enivre, +et ayant cuv son vin, achte les faveurs de la premire fille de +bonne volont qu'il rencontre sur les ruines des maisons +dtruites, et au milieu des mourants et des morts. Pangloss le +tirait cependant par la manche: Mon ami, lui disait-il, cela +n'est pas bien, vous manquez la raison universelle, vous prenez +mal votre temps. Tte et sang, rpondit l'autre, je suis matelot +et n Batavia; j'ai march quatre fois sur le crucifix dans +quatre voyages au Japon[2]; tu as bien trouv ton homme avec ta +raison universelle! + + + [1] Le tremblement de terre de Lisbonne est du 1er novembre 1755. + B. + + [2] Voyez tome XVIII, page 470. B. + + +Quelques clats de pierre avaient bless Candide; il tait tendu +dans la rue et couvert de dbris. Il disait Pangloss: Hlas! +procure-moi un peu de vin et d'huile; je me meurs. Ce +tremblement de terre n'est pas une chose nouvelle, rpondit +Pangloss; la ville de Lima prouva les mmes secousses en +Amrique l'anne passe; mmes causes, mmes effets; il y a +certainement une trane de soufre sous terre depuis Lima jusqu' +Lisbonne. Rien n'est plus probable, dit Candide; mais, pour +Dieu, un peu d'huile et de vin. Comment probable? rpliqua le +philosophe, je soutiens que la chose est dmontre. Candide +perdit connaissance, et Pangloss lui apporta un peu d'eau d'une +fontaine voisine. + +Le lendemain, ayant trouv quelques provisions de bouche en se +glissant travers des dcombres, ils rparrent un peu leurs +forces. Ensuite ils travaillrent comme les autres soulager +les habitants chapps la mort. Quelques citoyens, secourus +par eux, leur donnrent un aussi bon dner qu'on le pouvait dans +un tel dsastre: il est vrai que le repas tait triste; les +convives arrosaient leur pain de leurs larmes; mais Pangloss les +consola, en les assurant que les choses ne pouvaient tre +autrement: Car, dit-il, tout ceci est ce qu'il y a de mieux; car +s'il y a un volcan Lisbonne, il ne pouvait tre ailleurs; car +il est impossible que les choses ne soient pas o elles sont, car +tout est bien. + +Un petit homme noir, familier de l'inquisition, lequel tait +ct de lui, prit poliment la parole et dit: Apparemment que +monsieur ne croit pas au pch originel; car si tout est au +mieux, il n'y a donc eu ni chute ni punition. + +Je demande trs humblement pardon votre excellence, rpondit +Pangloss encore plus poliment, car la chute de l'homme et la +maldiction entraient ncessairement dans le meilleur des mondes +possibles. Monsieur ne croit donc pas la libert? dit le +familier. Votre excellence m'excusera, dit Pangloss; la libert +peut subsister avec la ncessit absolue; car il tait ncessaire +que nous fussions libres; car enfin la volont dtermine...... +Pangloss tait au milieu de sa phrase, quand Je familier fit un +signe de tte son estafier qui lui servait boire du vin de +Porto ou d'Oporto. diff --git a/vendor/golang.org/x/text/encoding/testdata/rashomon-euc-jp.txt b/vendor/golang.org/x/text/encoding/testdata/rashomon-euc-jp.txt new file mode 100644 index 0000000..7b03a99 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/rashomon-euc-jp.txt @@ -0,0 +1,178 @@ +This file was derived from +http://www.gutenberg.org/cache/epub/1982/pg1982.txt +-------- + + +ζǷ + +λǤ롣ͤβͤβDZߤԤäƤ +βˤϡˤγï⤤ʤ꡹ðɤ礭ʱˡ꤮ +ꤹɤȤޤäƤ롣礬ϩˤʾϡˤγˤ⡢ +򤹤Խޤ汨˹Ҥ⤦󻰿ͤϤꤽʤΤǤ롣줬ˤγ +ï⤤ʤ +ΤȱȡǯԤˤϡϿ̤ȤȤлȤȤ +ĤŤƵäΤӤϰ̤Ǥʤ쵭ˤȡʩ +ʩǺդơðĤꡢʤϤˤĤꤷڤϩФ +Ĥ߽ŤͤƿŤʤˤäƤȱȤǤ롣椬λǤ뤫顢 +νʤɤϡïΤƤƸܤߤԤʤäȤιӤ̤Ƥ +褤ˤơìʤˤࡣͤࡣȤȤޤˤϡ +ʤͤ򡢤ػäơΤƤƹԤȱ褿ǡ +ʤʤȡïǤⵤ̣򰭤äơζؤ­֤ߤ򤷤ʤˤʤ +ƤޤäΤǤ롣 +褫餫󽸤ޤä褿ָȡȤ +ؤơ⤤ʤӡˤΤޤƤʤ顢ӤޤäƤ롣 +ζͼƤǤʤˤϡ줬ޤ褦ˤϤä긫 +ϡξˤͤߤΤǤ롣⺣ϡ¤ +챩⸫ʤͣ꡹줫äƤܤĹ +Ϥʤξˡʵʤˤ򤯤ӤĤƤΤ롣 +ϼʤʤΰ־ʤ餷βʤˤοơˤ˽ +褿礭⮡ʤˤӡˤ򵤤ˤʤ顢ܤꡢΤդΤįƤΤ +롣 +ԤϤäֲͤߤԤäƤפȽ񤤤ͤϡ +Ǥ̤ɤ褦ȱƤϤʤդʤ顢ͤβȤصĤȦǤ +롣꤬μͤϡ͸˲ˤФ줿ˤ񤤤褦ˡԤ +Įϰ̤ʤ餺ƤβͤǯȤƤͤˤФ +줿Τ⡢οξ;Ȥ˳ʤʤ顢ֲͤߤԤäƤ +ȱ⡢ֱˤդꤳ줿ͤԤ꤬ʤơˤƤפ +ŬǤ롣ξ塢ζͤ⾯ʤ餺ʿīβͤ +Sentimentalisme˱ƶʤˤιﲼ꤫դФϡ̤˾ +뤱ʤǡͤϡƤ⺹뤷ɤˤ +ȤơФɤˤʤʤ򡢤ɤˤ褦ȤơȤȤʤ +򤿤ɤʤ顢äϩˤդ뱫βʹȤʤʹƤ +ĤĤǡ󤯤顢äȱ򤢤ĤƤ롣ͼǤϼ˶ +㤯ơ夲ȡβФˤĤФᰡʤ餫ˤˡŤ +Ť٤Ƥ롣 +ɤˤʤʤ򡢤ɤˤ٤ˤϡʤǤʤȤޡˤϤʤ +ǤСϡʤĤˤβƻФڤξǡʤˡˤ򤹤 +Ǥ롣ơξػäơΤ褦˼ΤƤƤޤФ +Ǥ롣ФʤȤСͤιͤϡ٤Ʊƻˤȶˡä +ζɽذ夷Ρ֤СפϡĤǤäƤ⡢ɡ֤Сפ +äͤϡʤФʤȤꤷʤ⡢Ρ֤СפΤ +Ĥ٤ˡθĤͤˤʤ곰˻ʤפȱ +ѶŪ˹ꤹΡͦФˤΤǤ롣 +ͤ礭ʤˤ򤷤ơ줫顢絷Ω夬äͼ䤨Τ +Ԥϡ⤦вߤδǤ롣Ȥδ֤ͼǤȶ˱θ +ʤ᤭̤롣ðɤˤȤޤäƤ꤮ꤹ⡢⤦ɤعԤäƤޤ + +ͤϡ¤ʤ顢δΡʤߡˤ˽Ťͤβθ⤯ +Τޤ򸫤ޤ路δΤʤܤˤΤʤճڤˤͤ줽 +ʽ꤬СǤȤ⤫⡢ȻפäǤ롣ȡ +ξϰؾ롢ιǷðɤäҤˤĤʤ顢ͤˤ +Ƥ⡢ɤͤФǤ롣ͤϡǹˤʤҤŤˤ +ʤ褦˵Ĥʤ顢Ϥ­򡢤Ҥΰֲʤؤ +ߤ +줫顢ʬθǤ롣ϰξؽФ롢ιҤʤˡ +ˤǭΤ褦˿Ȥ¤ơ©򻦤ʤ顢ƻҤ򱮤äƤϰξ夫 +餵Фθˡˤαˤ̤餷Ƥ롣ûʤҤˤˡ +֤ǿä⮤ΤˤǤ롣ͤϡϤᤫ顢ξˤԤϡͤФ +ȹäƤ줬ҤʾäƸȡǤïФȤܤơ +⤽βФ¶躡ưƤ餷ϡä +򤫤ŷ΢ˡʤǤäΤǡˤΤ줿ΤǤ +롣αˡξǡФȤ⤷Ƥ뤫ϡɤͣμԤǤϤ + +ͤϡܼʤˤΤ褦­̤ǡäȵޤҤ򡢰־ʤ +礦褦ˤƾĤ᤿Τʿˤʤ顢 +ؽФơ붲롢ϰƸ +ȡϰˤϡʹ̤ꡢĤλӳʤˤ̵¤˴Ƥ +뤬ФθεڤϰϤפä궹ΤǡϴĤȤ狼ʤͣ +ܤʤ顢ΤΤϡλӳȡʪ夿ӳȤȱ +롣ˤϽˤޤäƤ餷ơλӳϳ줬 +ʤĤơˡƤʹ֤ȱ¤ڤԤͤ¤äͷ +褦ˡ򳫤ꡢФꤷơξˤäƤ +⡢ȤȤι⤯ʤäƤʬˡܤꤷФθ򤦤ơ㤯ʤä +ʬαƤذŤʤ顢ʵפ˰ʤˤǡۤäƤ +ͤϡλӳ।˻פ鷺ɡäʤäˡ +μϡνִ֤ˤϡ⤦ɡ椦˺Ƥ붯ؼʤۤȤ +ɤȤȤˤˤ̳ФåäƤޤäǤ롣 +ͤδϡλϤơ¶ӳäƤʤޤäƤ˿ʹ +򸫤ȩʤҤϤˤʪؤ㤤餻ȱƬΡΤ褦 +Ϸ̤Ǥ롣Ϸ̤ϡμ˲ФȤ⤷Ҥäơλӳΰ +δ褦įƤȱӤĹ򸫤ȡ¿ʬλӳǤ +ͤϡϻʬζݤȻʬι񿴤ȤươûϸƵۡʤˤ򤹤Τ +˺Ƥ쵭εԤθڤСƬȡʤȤˤӤפ褦˴ +ΤǤ롣ȡϷ̤ϡҤ򡢾Ĥδ֤ޤơ줫顢ޤį +Ƥӳμξ򤫤ȡ١οƤλҤ͡ʤߡˤȤ褦 +ˡĹȱӤܤȴϤ᤿ȱϼ˽äȴ餷 +ȱӤܤȴΤ˽äƲͤοϡݤľäƹԤ +ơƱˡϷ̤ФϤư褿 +䡢Ϸ̤ФȱäƤϡ뤫Τʤǫʤषˡ +밭Фȿʬ˶褿ΤǤ롣λïβͤˡ +äβǤˤͤƤʤˡˤ򤹤뤫ͤˤʤ뤫ȱ +򡢲ƻФ顢餯ͤϡ̤ʤǤ +ۤɡˤΰ࿴ϡϷ̤ξޤҤΤ褦ˡ褯dz +ƤΤǤ롣 +ͤˤϡϷ̤ͤȱӤȴ狼ʤääơŪ +ˤϡβҤŤƤ褤ΤʤäͤˤȤäƤϡ +ˡξǡͤȱӤȴȱǴ˵ +餶밭Ǥäͤϡäʬͤˤʤ뵤Ǥʤϡ +˺ƤΤǤ롣 +ǡͤϡξ­ϤơʤꡢҤӾ夬ä +ʤҤŤˤ˼򤫤ʤ顢ԤϷ̤ߤäϷ̤ +äΤϡʤ +Ϸ̤ϡܲͤ򸫤ȡޤ׸ʤߡˤˤǤƤ줿褦ˡӾ夬 + +֤Τ졢ɤعԤ +ͤϡϷ̤ӳˤĤޤŤʤ顢Ƥդᤤƨ褦ȤԼɤǡ +ͤäϷ̤ϡǤⲼͤĤΤƹԤȤ롣ͤԤ +ޤȤơɤͤϻӳǡá̵ΤޤޡĤ߹ä +ϡϤᤫ顢狼äƤ롣ͤϤȤȤϷ̤ӤĤǡ̵ +ؤͤݤ١ܡʤȤˤεӤΤ褦ʡФӤǤ롣 +ֲ򤷤Ƥ򤷤Ƥ̤ȡ衣 +ͤϡϷ̤Ĥȡʤꡢξʧäơ򤤹ݡʤϤ͡ˤο +δؤĤĤɤ⡢Ϸ̤ۤäƤ롣ξʤʤդ碌ơ +©ڤʤ顢򡢴夬ޤ֤γؽФˤʤơΤ褦 +˼ٹʤ夦͡ˤۤäƤ롣򸫤ȡͤϻϤˤϷ̤ +ʬΰջ֤˻ۤƤȱռơΰռϡ +ޤǤϤdzƤο򲿻ʤġˤδ֤ˤޤƤޤä˻Ĥ +ΤϡͣŻ򤷤ơ줬Ρ¤餫դ­Ȥ +ФǤ롣ǡͤϡϷ̤򡢸ʤ顢Ƥä +ָʤϸȡʤӤˤģͤʤɤǤϤʤβ̤꤫ +ιμԤ餪򤫤ơɤ褦ȱ褦ʻϤʤͣʬ +ξǡ򤷤ƤΤʤäФΤ +ȡϷ̤ϡ򡢰礭ơäȤβͤδ򸫼ä +ޤ֤֤ʤäĻΤ褦ʡԤǸΤǤ롣줫顢Ⲥǡء +ɡȰĤˤʤä򲿤ʪǤǤ褦ư٤ǡäʩ +ưƤΤ롣λι顢ʤ餹ˤƤ褦ä +ͤμä褿 +֤ȱȴƤʡνȱȴƤʡʤĤˤˤ褦Ȼפ +㡣 +ͤϡϷ̤¸ʿޤʤΤ˼˾Ƽ˾Ʊˡ +ΤȰ줷ˡؤϤä褿ȡεʤˤ +ؤ̤ΤǤϷ̤ϡҼˡޤӳƬåʤȡˤäĹȴ +Ӥäʤꡢ걡ʤҤˤΤĤ֤䤯褦ǡʤ顢ʻ򱾤 + +ͤȱӤȴȱϡΤ̡ͤ +¿ϡΰ̤ʻ򡢤Ƥ⤤ʹ֤ФǤ롣ˡʬȱȴ +ʤɤϡؤФꤺĤڤäƴΤ򡢴ʤۤˤȱäơ +ӡʤϤˤοؤ˹Ԥä¤ˤäƻʤʤäʤ顢Ǥ +˹ԤäƤ⤷ʤ⡢ν봳ϡ̣褤ȱΤǡ +Ӥ礫äƤΤǤ롣ʬϡνΤȤ +פʤʤСʤˡˤ򤹤ΤǡʤǤ롣 +顢ʬΤƤⰭȤϻפʤϤꤷʤС +򤹤ΤǡʤǤ롣ơλʤ򡢤褯 +ΤäƤνϡʬΤƤΤˤʤȻפǤ +롣Ϸ̤ϡΤʰ̣λ򱾤ä +ͤϡˤơ򺸤μǤʤ顢Ȥơ +äʹƤμǤϡ֤ˤǿ礭⮡ʤˤӡˤ +ˤʤ顢ʹƤΤǤ롣ǷʹƤˡͤοˤϡ +ͦޤ褿ϡäβǤˤ˷礱ƤͦǤ롣 +ơäξؾʤˤäơϷ̤ᤨͦȤϡ +ȿФưȤͦǤ롣ͤϡ򤹤뤫ͤˤʤ뤫¤ʤ +ФǤϤʤλΤˤο鱾Сʤɤȱϡء +ʤռγɤФƤ +֤äȡ +Ϸ̤äȡͤޡʤˤ褦ǰ򲡤ơ­ +ؽФȡ԰դˡμ⮤ΥơϷ̤ζ߾ʤ꤬ߡˤĤߤʤ顢 +ä +֤ǤϡʤʤҤϤˤ򤷤褦Ⱥޤʡʤ⤽ʤС +ΤʤΤ +ͤϡФ䤯Ϸ̤ʪȤä줫顢­ˤߤĤȤϷ +̤򡢼ӤӳξؽݤҤθޤǤϡϤ˸ФǤ롣 +ͤϡȤäɰȩʪ來ˤơޤ֤˵ޤҤ +ꤿ +á褦ݤƤϷ̤ӳ椫顢Τ򵯤Τϡ +줫֤ʤλǤ롣Ϸ̤ϡĤ֤䤯褦ʡ᤯褦ΩƤʤ顢 +ޤdzƤФθ򤿤ˡҤθޤǡäƹԤäơ顢 +ûȱݡʤޡˤˤơβˤϡͣƶʤ +Ȥˤ뤬ФǤ롣 +ͤϡˡơԤĮضƯ˵ޤǤ diff --git a/vendor/golang.org/x/text/encoding/testdata/rashomon-iso-2022-jp.txt b/vendor/golang.org/x/text/encoding/testdata/rashomon-iso-2022-jp.txt new file mode 100644 index 0000000..0bc24bc --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/rashomon-iso-2022-jp.txt @@ -0,0 +1,178 @@ +This file was derived from +http://www.gutenberg.org/cache/epub/1982/pg1982.txt +-------- +$BMe@8Lg(B + +$B3)@nN6G72p(B + +$B!!0?F|$NJkJ}$N;v$G$"$k!#0l?M$N2<?M$,!"Me@8Lg$N2<$G1+$d$_$rBT$C$F$$$?!#!!9-$$Lg(B +$B$N2<$K$O!"$3$NCK$N30$KC/$b$$$J$$!#$?$@!"=j!9C0EI$NGm$2$?!"Bg$-$J1_Cl$K!"$-$j$.(B +$B$j$9$,0lI$$H$^$C$F$$$k!#Me@8Lg$,!"<k?}BgO)$K$"$k0J>e$O!"$3$NCK$N30$K$b!"1+$d$_(B +$B$r$9$k;T=w3^$dYf1(K9;R$,!"$b$&Fs;0?M$O$"$j$=$&$J$b$N$G$"$k!#$=$l$,!"$3$NCK$N30(B +$B$KC/$b$$$J$$!#(B +$B!!2?8N$+$H1>$&$H!"$3$NFs;0G/!"5~ET$K$O!"CO?L$H$+DTIw$H$+2P;v$H$+q@q<$H$+1>$&:R(B +$B$$$,$D$E$$$F5/$3$C$?!#$=$3$GMlCf$N$5$S$lJ}$O0lDL$j$G$J$$!#5l5-$K$h$k$H!"J)A|$d(B +$BJ)6q$rBG:U$$$F!"$=$NC0$,$D$$$?$j!"6b6d$NGs!J$O$/!K$,$D$$$?$j$7$?LZ$r!"O)$P$?$K(B +$B$D$_=E$M$F?E$NNA!J$7$m!K$KGd$C$F$$$?$H1>$&$3$H$G$"$k!#MlCf$,$=$N;OKv$G$"$k$+$i!"(B +$BMe@8Lg$N=$M}$J$I$O!"85$h$jC/$b<N$F$F8\$_$k<T$,$J$+$C$?!#$9$k$H$=$N9S$l2L$F$?$N(B +$B$r$h$$;v$K$7$F!"8QC,!J$3$j!K$,@3$`!#Ep?M$,@3$`!#$H$&$H$&$7$^$$$K$O!"0z<h$j<j$N(B +$B$J$$;`?M$r!"$3$NLg$X;}$C$FMh$F!"<N$F$F9T$/$H1>$&=,47$5$(=PMh$?!#$=$3$G!"F|$NL\(B +$B$,8+$($J$/$J$k$H!"C/$G$b5$L#$r0-$,$C$F!"$3$NLg$N6a=j$X$OB-$V$_$r$7$J$$;v$K$J$C(B +$B$F$7$^$C$?$N$G$"$k!#(B +$B!!$=$NBe$jKtrm$,2?=h$+$i$+!"$?$/$5$s=8$^$C$FMh$?!#Ck4V8+$k$H!"$=$Nrm$,2?1)$H$J(B +$B$/NX$rIA$$$F!"9b$$rvHx!J$7$S!K$N$^$o$j$rSF$-$J$,$i!"Ht$S$^$o$C$F$$$k!#<l$KLg$N(B +$B>e$N6u$,!"M<>F$1$G$"$+$/$J$k;~$K$O!"$=$l$,8UKc$r$^$$$?$h$&$K$O$C$-$j8+$($?!#rm(B +$B$O!"L^O@!"Lg$N>e$K$"$k;`?M$NFy$r!"Bo$_$KMh$k$N$G$"$k!#!<!<L`$b:#F|$O!"9o8B$,CY(B +$B$$$;$$$+!"0l1)$b8+$($J$$!#M#!"=j!9!"Jx$l$+$+$C$?!"$=$&$7$F$=$NJx$lL\$KD9$$Ap$N(B +$B$O$($?@PCJ$N>e$K!"rm$NJ5!J$/$=!K$,!"E@!9$HGr$/$3$S$j$D$$$F$$$k$N$,8+$($k!#2<?M(B +$B$O<7CJ$"$k@PCJ$N0lHV>e$NCJ$K@v$$$6$i$7$?:0$N2(!J$"$*!K$N?,$r?x$($F!"1&$NKK$K=P(B +$BMh$?!"Bg$-$JLLb.!J$K$-$S!K$r5$$K$7$J$,$i!"$\$s$d$j!"1+$N$U$k$N$rD/$a$F$$$k$N$G(B +$B$"$k!#(B +$B!!:n<T$O$5$C$-!"!V2<?M$,1+$d$_$rBT$C$F$$$?!W$H=q$$$?!#$7$+$7!"2<?M$O!"1+$,$d$s(B +$B$G$b3JJL$I$&$7$h$&$H1>$&Ev$F$O$J$$!#$U$@$s$J$i!"L^O@!"<g?M$N2H$X5"$k2D$-H&$G$"(B +$B$k!#=j$,$=$N<g?M$+$i$O!";M8^F|A0$K2K$r=P$5$l$?!#A0$K$b=q$$$?$h$&$K!"Ev;~5~ET$N(B +$BD.$O0lDL$j$J$i$:?jHy$7$F$$$?!#:#$3$N2<?M$,!"1JG/!";H$o$l$F$$$?<g?M$+$i2K$r=P$5(B +$B$l$?$N$b!"$3$N?jHy$N>.$5$JM>GH$K30$J$i$J$$!#$@$+$i!"!V2<?M$,1+$d$_$rBT$C$F$$$?!W(B +$B$H1>$&$h$j$b!"!V1+$K$U$j$3$a$i$l$?2<?M$,!"9T$-=j$,$J$/$F!"ESJ}$K$/$l$F$$$?!W$H(B +$B1>$&J}$,!"E,Ev$G$"$k!#$=$N>e!":#F|$N6uLOMM$b>/$J$+$i$:$3$NJ?0BD+$N2<?M$N(B +Sentimentalisme$B$K1F6A$7$?!#?=!J$5$k!K$N9o2<$,$j$+$i$U$j=P$7$?1+$O!"L$$@$K>e(B +$B$,$k$1$7$-$,$J$$!#$=$3$G!"2<?M$O!"2?$rA<$$$F$b:9Ev$?$jL@F|$NJk$7$r$I$&$K$+$7$h(B +$B$&$H$7$F!<!<1>$o$P$I$&$K$b$J$i$J$$;v$r!"$I$&$K$+$7$h$&$H$7$F!"$H$j$H$a$b$J$$9M(B +$B$($r$?$I$j$J$,$i!"$5$C$-$+$i<k?}BgO)$K$U$k1+$N2;$rJ9$/$H$b$J$/J9$$$F$$$?!#(B +$B!!1+$OMe@8Lg$r$D$D$s$G!"1s$/$+$i!"$6$"$C$H1>$&2;$r$"$D$a$F$/$k!#M<0G$O<!Bh$K6u(B +$B$rDc$/$7$F!"8+>e$2$k$H!"Lg$N20:,$,!"<P$a$K$D$-=P$7$?a0!J$$$i$+!K$N@h$K!"=E$?$/(B +$B$&$90E$$1@$r;Y$($F$$$k!#(B +$B!!$I$&$K$b$J$i$J$$;v$r!"$I$&$K$+$9$k0Y$K$O!"<jCJ$rA*$s$G$$$kn#!J$$$H$^!K$O$J$$!#(B +$BA*$s$G$$$l$P!"C[CO!J$D$$$8!K$N2<$+!"F;$P$?$NEZ$N>e$G!"q@;`!J$&$($8$K!K$r$9$k$P(B +$B$+$j$G$"$k!#$=$&$7$F!"$3$NLg$N>e$X;}$C$FMh$F!"8$$N$h$&$K<N$F$i$l$F$7$^$&$P$+$j(B +$B$G$"$k!#A*$P$J$$$H$9$l$P!<!<2<?M$N9M$($O!"2?EY$bF1$8F;$rDcWK$7$?MH6g$K!"$d$C$H(B +$B$3$N6I=j$X0)Ce$7$?!#$7$+$7$3$N!V$9$l$P!W$O!"$$$D$b$G$?$C$F$b!"7k6I!V$9$l$P!W$G(B +$B$"$C$?!#2<?M$O!"<jCJ$rA*$P$J$$$H$$$&;v$r9NDj$7$J$,$i$b!"$3$N!V$9$l$P!W$N$+$?$r(B +$B$D$1$k0Y$K!"EvA3!"$3$N8e$KMh$k2D$-!VEp?M$K$J$k$h$j30$K;EJ}$,$J$$!W$H1>$&;v$r!"(B +$B@Q6KE*$K9NDj$9$k$@$1$N!"M&5$$,=P$:$K$$$?$N$G$"$k!#(B +$B!!2<?M$OBg$-$JSj!J$/$5$a!K$r$7$F!"$=$l$+$i!"Bg57$=$&$KN)>e$,$C$?!#M<Nd$($N$9$k(B +$B5~ET$O!"$b$&2P23$,M_$7$$Dx$N4($5$G$"$k!#Iw$OLg$NCl$HCl$H$N4V$r!"M<0G$H6&$K1sN8(B +$B$J$/!"?a$-$L$1$k!#C0EI$NCl$K$H$^$C$F$$$?$-$j$.$j$9$b!"$b$&$I$3$+$X9T$C$F$7$^$C(B +$B$?!#(B +$B!!2<?M$O!"pt$r$A$B$a$J$,$i!";3?a$N4@jN!J$+$6$_!K$K=E$M$?!":0$N2($N8*$r9b$/$7$F(B +$BLg$N$^$o$j$r8+$^$o$7$?!#1+Iw$N45$N$J$$!"?ML\$K$+$+$kW|$N$J$$!"0lHU3Z$K$M$i$l$=(B +$B$&$J=j$,$"$l$P!"$=$3$G$H$b$+$/$b!"Lk$rL@$+$=$&$H;W$C$?$+$i$G$"$k!#$9$k$H!"9,Lg(B +$B$N>e$NO0$X>e$k!"I}$N9-$$!"G7$bC0$rEI$C$?Dt;R$,4c$K$D$$$?!#>e$J$i!"?M$,$$$?$K$7(B +$B$F$b!"$I$&$;;`?M$P$+$j$G$"$k!#2<?M$O!"$=$3$G9x$K$5$2$?@;JA!J$R$8$j$E$+!K$NB@Ea(B +$B$,>dAv$i$J$$$h$&$K5$$r$D$1$J$,$i!"ONApMz$r$O$$$?B-$r!"$=$NDt;R$N0lHV2<$NCJ$X$U(B +$B$_$+$1$?!#(B +$B!!$=$l$+$i!"2?J,$+$N8e$G$"$k!#Me@8Lg$NO0$N>e$X=P$k!"I}$N9-$$Dt;R$NCfCJ$K!"0l?M(B +$B$NCK$,!"G-$N$h$&$K?H$r$A$B$a$F!"B)$r;&$7$J$,$i!">e$NMF;R$r1.$C$F$$$?!#O0$N>e$+(B +$B$i$5$92P$N8w$,!"$+$9$+$K!"$=$NCK$N1&$NKK$r$L$i$7$F$$$k!#C;$$r$!J$R$2!K$NCf$K!"(B +$B@V$/G?$r;}$C$?LLb.$N$"$kKK$G$"$k!#2<?M$O!";O$a$+$i!"$3$N>e$K$$$k<T$O!";`?M$P$+(B +$B$j$@$H9b$r3g$C$F$$$?!#$=$l$,!"Dt;R$rFs;0CJ>e$C$F8+$k$H!">e$G$OC/$+2P$r$H$\$7$F!"(B +$B$7$+$b$=$N2P$rB6=h:!=h$HF0$+$7$F$$$k$i$7$$!#$3$l$O!"$=$NBy$C$?!"2+$$$m$$8w$,!"(B +$B6y!9$KCXia$NAc$r$+$1$?E70fN"$K!"$f$l$J$,$i1G$C$?$N$G!"$9$0$K$=$l$HCN$l$?$N$G$"(B +$B$k!#$3$N1+$NLk$K!"$3$NMe@8Lg$N>e$G!"2P$r$H$b$7$F$$$k$+$i$O!"$I$&$;M#$N<T$G$O$J(B +$B$$!#(B +$B!!2<?M$O!"5\<i!J$d$b$j!K$N$h$&$KB-2;$r$L$9$s$G!"$d$C$H5^$JDt;R$r!"0lHV>e$NCJ$^(B +$B$GGg$&$h$&$K$7$F>e$j$D$a$?!#$=$&$7$FBN$r=PMh$k$@$1!"J?$K$7$J$,$i!"pt$r=PMh$k$@(B +$B$1!"A0$X=P$7$F!"62$k62$k!"O0$NFb$rGA$$$F8+$?!#(B +$B!!8+$k$H!"O0$NFb$K$O!"1=$KJ9$$$?DL$j!"4v$D$+$N;S3<!J$7$,$$!K$,!"L5B$:n$K4~$F$F(B +$B$"$k$,!"2P$N8w$N5Z$VHO0O$,!";W$C$?$h$j69$$$N$G!"?t$O4v$D$H$b$o$+$i$J$$!#M#!"$*(B +$B$\$m$2$J$,$i!"CN$l$k$N$O!"$=$NCf$KMg$N;S3<$H!"CeJ*$rCe$?;S3<$H$,$"$k$H1>$&;v$G(B +$B$"$k!#L^O@!"Cf$K$O=w$bCK$b$^$8$C$F$$$k$i$7$$!#$=$&$7$F!"$=$N;S3<$O3'!"$=$l$,!"(B +$B>(!J$+$D$F!K!"@8$-$F$$$??M4V$@$H1>$&;v<B$5$(5?$o$l$kDx!"EZ$rYT$M$FB$$C$??M7A$N(B +$B$h$&$K!"8}$r3+$$$?$j!"<j$r1d$P$7$?$j$7$F!"$4$m$4$m>2$N>e$K$3$m$,$C$F$$$?!#$7$+(B +$B$b!"8*$H$+6;$H$+$N9b$/$J$C$F$$$kItJ,$K!"$\$s$d$j$7$?2P$N8w$r$&$1$F!"Dc$/$J$C$F(B +$B$$$kItJ,$N1F$r0lAX0E$/$7$J$,$i!"1J5W$K0"!J$*$7!K$NG!$/L[$C$F$$$?!#(B +$B!!2<?M$O!"$=$l$i$N;S3<$NIe`%$7$?=-5$$K;W$o$:!"I!$r1f$C$?!J$*$*$C$?!K!#$7$+$7!"(B +$B$=$N<j$O!"<!$N=V4V$K$O!"$b$&I!$r1f$&;v$rK:$l$F$$$?!#0?$k6/$$46>p$,KX<=!J$[$H$s(B +$B$I$3$H$4$H$/!K$3$NCK$NSL3P$rC%$C$F$7$^$C$?$+$i$G$"$k!#(B +$B!!2<?M$N4c$O!"$=$N;~!"$O$8$a$F!"B6;S3<$NCf$Km-$C$F$$$k!J$&$:$/$^$C$F$$$k!K?M4V(B +$B$r8+$?!#[XH)?'!J$R$O$@$$$m!K$NCeJ*$rCx$?!"GX$NDc$$!"Ai$;$?!"GrH1F,$N!"1n$N$h$&(B +$B$JO7GL$G$"$k!#$=$NO7GL$O!"1&$N<j$K2P$r$H$b$7$?>>$NLZJR$r;}$C$F!"$=$N;S3<$N0l$D(B +$B$N4i$rGA$-$3$`$h$&$KD/$a$F$$$?!#H1$NLS$ND9$$=j$r8+$k$H!"B?J,=w$N;S3<$G$"$m$&!#(B +$B!!2<?M$O!"O;J,$N62I]$H;MJ,$N9%4q?4$H$KF0$+$5$l$F!";C;~$O8F5[!J$$$-!K$r$9$k$N$5(B +$B$(K:$l$F$$$?!#5l5-$N5-<T$N8l$r<Z$j$l$P!"!VF,?H!J$H$&$7$s!K$NLS$bB@$k!W$h$&$K46(B +$B$8$?$N$G$"$k!#$9$k$H!"O7GL$O!">>$NLZJR$r!">2HD$N4V$KA^$7$F!"$=$l$+$i!":#$^$GD/(B +$B$a$F$$$?;S3<$N<s$KN><j$r$+$1$k$H!"CzEY!"1n$N?F$,1n$N;R$NiM!J$7$i$_!K$r$H$k$h$&(B +$B$K!"$=$ND9$$H1$NLS$r0lK\$:$DH4$-$O$8$a$?!#H1$O<j$K=>$C$FH4$1$k$i$7$$!#(B +$B!!$=$NH1$NLS$,!"0lK\$:$DH4$1$k$N$K=>$C$F2<?M$N?4$+$i$O!"62I]$,>/$7$:$D>C$($F9T$C(B +$B$?!#$=$&$7$F!"$=$l$HF1;~$K!"$=$NO7GL$KBP$9$k$O$2$7$$A~0-$,!">/$7$:$DF0$$$FMh$?!#(B +$B$$$d!"$3$NO7GL$KBP$9$k$H1>$C$F$O!"8lJ@$,$"$k$+$bCN$l$J$$!#G+!J$`$7$m!K!"$"$i$f(B +$B$k0-$KBP$9$kH?46$,!"0lJ,Kh$K6/$5$rA}$7$FMh$?$N$G$"$k!#$3$N;~!"C/$+$,$3$N2<?M$K!"(B +$B$5$C$-Lg$N2<$G$3$NCK$,9M$($F$$$?!"q@;`!J$&$($8$K!K$r$9$k$+Ep?M$K$J$k$+$H1>$&Ld(B +$BBj$r!"2~$a$F;}=P$7$?$i!"62$i$/2<?M$O!"2?$NL$N}$b$J$/!"q@;`$rA*$s$@;v$G$"$m$&!#(B +$B$=$l$[$I!"$3$NCK$N0-$rA~$`?4$O!"O7GL$N>2$KA^$7$?>>$NLZJR$N$h$&$K!"@*$h$/G3$(>e(B +$B$,$j$@$7$F$$$?$N$G$"$k!#(B +$B!!2<?M$K$O!"L^O@!"2?8NO7GL$,;`?M$NH1$NLS$rH4$/$+$o$+$i$J$+$C$?!#=>$C$F!"9gM}E*(B +$B$K$O!"$=$l$rA10-$N2?$l$KJR$E$1$F$h$$$+CN$i$J$+$C$?!#$7$+$72<?M$K$H$C$F$O!"$3$N(B +$B1+$NLk$K!"$3$NMe@8Lg$N>e$G!";`?M$NH1$NLS$rH4$/$H1>$&;v$,!"$=$l$@$1$G4{$K5v$92D(B +$B$i$6$k0-$G$"$C$?!#L^O@!!2<?M$O!!$5$C$-Kx<+J,$,!"Ep?M$K$J$k5$$G$$$?;v$J$>$O!!$H(B +$B$&$KK:$l$F$$$k$N$G$"$k!#(B +$B!!$=$3$G!"2<?M$O!"N>B-$KNO$rF~$l$F!"$$$+$J$j!"Dt;R$+$i>e$XHt$S>e$,$C$?!!$=$&$7(B +$B$F@;JA!J$R$8$j$E$+!K$NB@Ea$K<j$r$+$1$J$,$i!"Bg8T$KO7GL$NA0$XJb$_$h$C$?!#O7GL$,(B +$B6C$$$?$N$O!!1>$&Kx$b$J$$!#(B +$B!!O7GL$O!"0lL\2<?M$r8+$k$H!"$^$k$GW8!J$$$7$f$_!K$K$G$bCF$+$l$?$h$&$K!!Ht$S>e$,$C(B +$B$?!#(B +$B!!!V$*$N$l!"$I$3$X9T$/!#!W(B +$B!!2<?M$O!"O7GL$,;S3<$K$D$^$E$-$J$,$i!"92$F$U$?$a$$$FF($2$h$&$H$9$k9T<j$r:I$$$G!"(B +$B$3$&GM$C$?!#O7GL$O!"$=$l$G$b2<?M$r$D$-$N$1$F9T$3$&$H$9$k!#2<?M$OKt!"$=$l$r9T$+(B +$B$9$^$$$H$7$F!"2!$7$b$I$9!#Fs?M$O;S3<$NCf$G!";C!"L58@$N$^$^!"$D$+$_9g$C$?!#$7$+(B +$B$7>!Ii$O!"$O$8$a$+$i!"$o$+$C$F$$$k!#2<?M$O$H$&$H$&!"O7GL$NOS$r$D$+$s$G!"L5M}$K(B +$B$=$3$X$M$8E]$7$?!#CzEY!"7\!J$H$j!K$N5S$N$h$&$J!"9|$HHi$P$+$j$NOS$G$"$k!#(B +$B!!!V2?$r$7$F$$$?!#$5$"2?$r$7$F$$$?!#1>$(!#1>$o$L$H!!$3$l$@$>$h!#!W(B +$B!!2<?M$O!"O7GL$r$D$-J|$9$H!"$$$-$J$j!"B@Ea$N>d$rJ'$C$F!"Gr$$9]!J$O$,$M!K$N?'$r(B +$B$=$N4c$NA0$X$D$-$D$1$?!#$1$l$I$b!"O7GL$OL[$C$F$$$k!#N><j$r$o$J$o$J$U$k$o$;$F!"(B +$B8*$GB)$r@Z$j$J$,$i!"4c$r!"4c5e$,$^$V$?$N30$X=P$=$&$K$J$kDx!"8+3+$$$F!"0"$N$h$&(B +$B$K<9Y9!J$7$e$&$M!K$/L[$C$F$$$k!#$3$l$r8+$k$H!"2<?M$O;O$a$FL@Gr$K$3$NO7GL$N@8;`(B +$B$,!"A4A3!"<+J,$N0U;V$K;YG[$5$l$F$$$k$H1>$&;v$r0U<1$7$?!#$=$&$7$F!"$3$N0U<1$O!"(B +$B:#$^$G$O$2$7$/G3$($F$$$?A~0-$N?4$r2?;~!J$$$D!K$N4V$K$+Nd$^$7$F$7$^$C$?!#8e$K;D$C(B +$B$?$N$O!"M#!"0?;E;v$r$7$F!"$=$l$,1_K~$K@.="$7$?;~$N!"0B$i$+$JF@0U$HK~B-$H$,$"$k(B +$B$P$+$j$G$"$k!#$=$3$G!"2<?M$O!"O7GL$r!"8+2<$2$J$,$i!">/$7@<$r=@$2$F$3$&1>$C$?!#(B +$B!!!V8J$O8!Hs0c;H!J$1$S$$$7!K$ND#$NLr?M$J$I$G$O$J$$!#:#$7J}$3$NLg$N2<$rDL$j$+$+$C(B +$B$?N9$N<T$@!#$@$+$i$*A0$KFl$r$+$1$F!"$I$&$7$h$&$H1>$&$h$&$J;v$O$J$$!#M#:#;~J,!"(B +$B$3$NLg$N>e$G!"2?$r$7$F$$$?$N$@$+!"$=$l$r8J$KOC$5$($9$l$P$$$$$N$@!#!W(B +$B!!$9$k$H!"O7GL$O!"8+3+$$$?4c$r!"0lAXBg$-$/$7$F!"$8$C$H$=$N2<?M$N4i$r8+<i$C$?!#(B +$B$^$V$?$N@V$/$J$C$?!"Fy?)D;$N$h$&$J!"1T$$4c$G8+$?$N$G$"$k!#$=$l$+$i!"b2$G!"KX!"(B +$BI!$H0l$D$K$J$C$??0$r2?$+J*$G$b3z$s$G$$$k$h$&$KF0$+$7$?!#:Y$$9"$G!"@m$C$?9"J)$N(B +$BF0$$$F$$$k$N$,8+$($k!#$=$N;~!"$=$N9"$+$i!"rm!J$+$i$9!K$NSF$/$h$&$J@<$,!"SC$.SC(B +$B$.!"2<?M$N<*$XEA$o$C$FMh$?!#(B +$B!!!V$3$NH1$rH4$$$F$J!"$3$N=w$NH1$rH4$$$F$J!"r#!J$+$D$i!K$K$7$h$&$H;W$&$?$N(B +$B$8$c!#!W(B +$B!!2<?M$O!"O7GL$NEz$,B830!"J?K^$J$N$K<:K>$7$?!#$=$&$7$F<:K>$9$k$HF1;~$K!"KtA0$N(B +$BA~0-$,!"Nd$JInJN$H0l$7$g$K!"?4$NCf$X$O$$$C$FMh$?!#$9$k$H!!$=$N5$?'!J$1$7$-!K$,!"(B +$B@hJ}$X$bDL$8$?$N$G$"$m$&!#O7GL$O!"JR<j$K!"$^$@;S3<$NF,$+$iC%!J$H!K$C$?D9$$H4$1(B +$BLS$r;}$C$?$J$j!"j1!J$R$-!K$N$D$V$d$/$h$&$J@<$G!"8}$4$b$j$J$,$i!"$3$s$J;v$r1>$C(B +$B$?!#(B +$B!!@.Dx!";`?M$NH1$NLS$rH4$/$H1>$&;v$O!"0-$$;v$+$MCN$l$L!#$7$+$7!"$3$&1>$&;`?M$N(B +$BB?$/$O!"3'!!$=$N0L$J;v$r!"$5$l$F$b$$$$?M4V$P$+$j$G$"$k!#8=$K!"<+J,$,:#!"H1$rH4(B +$B$$$?=w$J$I$O!"<X$r;M@#$P$+$j$:$D$K@Z$C$F43$7$?$N$r!"435{!J$[$7$&$*!K$@$H1>$C$F!"(B +$BB@EaBS!J$?$A$O$-!K$N?X$XGd$j$K9T$C$?!#1VIB$K$+$+$C$F;`$J$J$+$C$?$J$i!":#$G$bGd(B +$B$j$K9T$C$F$$$?$+$b$7$l$J$$!#$7$+$b!"$3$N=w$NGd$k435{$O!"L#$,$h$$$H1>$&$N$G!"B@(B +$BEaBS$?$A$,!"7g$+$5$::ZNA$KGc$C$F$$$?$N$G$"$k!#<+J,$O!"$3$N=w$N$7$?;v$,0-$$$H$O(B +$B;W$o$J$$!#$7$J$1$l$P!"q@;`!J$($&$8$K!K$r$9$k$N$G!";EJ}$,$J$/$7$?;v$@$+$i$G$"$k!#(B +$B$@$+$i!"Kt:#!"<+J,$N$7$F$$$?;v$b0-$$;v$H$O;W$o$J$$!#$3$l$b$d$O$j$7$J$1$l$P!"q@(B +$B;`$r$9$k$N$G!";EJ}$,$J$/$9$k;v$@$+$i$G$"$k!#$=$&$7$F!"$=$N;EJ}$,$J$$;v$r!"$h$/(B +$BCN$C$F$$$?$3$N=w$O!"<+J,$N$9$k;v$r5v$7$F$/$l$k$N$K$A$,$$$J$$$H;W$&$+$i$G$"(B +$B$k!#!<!<O7GL$O!"BgBN$3$s$J0UL#$N;v$r1>$C$?!#(B +$B!!2<?M$O!"B@Ea$r>d$K$*$5$a$F!"$=$NB@Ea$NJA$r:8$N<j$G$*$5$($J$,$i!"NdA3$H$7$F!"(B +$B$3$NOC$rJ9$$$F$$$?!#L^O@!"!!1&$N<j$G$O!"@V$/KK$KG?$r;}$?Bg$-$JLLb.!J$K$-$S!K$r(B +$B5$$K$7$J$,$i!"J9$$$F$$$k$N$G$"$k!#$7$+$7!"G7$rJ9$$$F$$$kCf$K!"2<?M$N?4$K$O!"0?(B +$BM&5$$,@8$^$l$FMh$?!#$=$l$O!!$5$C$-!"Lg$N2<$G$3$NCK$K7g$1$F$$$?M&5$$G$"$k!#$=$&(B +$B$7$F!"Kt$5$C$-!"$3$NLg$N>e$X>e!J$"$,!K$C$F!"$=$NO7GL$rJa$($?;~$NM&5$$H$O!"A4A3!"(B +$BH?BP$JJ}8~$KF0$3$&$H$9$kM&5$$G$"$k!#2<?M$O!"q@;`$r$9$k$+Ep?M$K$J$k$+$KLB$o$J$+$C(B +$B$?$P$+$j$G$O$J$$!#$=$N;~$N$3$NCK$N?4$b$A$+$i1>$($P!"q@;`$J$I$H1>$&;v$O!"KX!"9M(B +$B$($k;v$5$(=PMh$J$$Dx!"0U<1$N30$KDI$$=P$5$l$F$$$?!#(B +$B!!!V$-$C$H!"$=$&$+!#!W(B +$B!!O7GL$NOC$,40$k$H!"2<?M$OS^!J$"$6$1!K$k$h$&$J@<$GG0$r2!$7$?!#$=$&$7$F!"0lB-A0(B +$B$X=P$k$H!"IT0U$K!"1&$N<j$rLLb.$+$iN%$7$F!"O7GL$N6_>e!J$($j$,$_!K$r$D$+$_$J$,$i!"(B +$B$3$&1>$C$?!#(B +$B!!!V$G$O!"8J$,0zGm!J$R$O$.!K$r$7$h$&$H:($`$^$$$J!#8J$b$=$&$7$J$1$l$P!"q@;`$r$9(B +$B$kBN$J$N$@!#!W(B +$B!!2<?M$O!"$9$P$d$/!"O7GL$NCeJ*$rGm$.$H$C$?!#$=$l$+$i!"B-$K$7$,$_$D$3$&$H$9$kO7(B +$BGL$r!"<j9S$/;S3<$N>e$X=3E]$7$?!#Dt;R$N8}$^$G$O!"6O$K8^Jb$r?t$($k$P$+$j$G$"$k!#(B +$B2<?M$O!"Gm$.$H$C$?I0H)?'$NCeJ*$r$o$-$K$+$+$($F!"$^$?$?$/4V$K5^$JDt;R$rLk$NDl$X(B +$B$+$12<$j$?!#(B +$B!!;C!";`$s$@$h$&$KE]$l$F$$$?O7GL$,!";S3<$NCf$+$i!"$=$NMg$NBN$r5/$3$7$?$N$O!"$=(B +$B$l$+$i4V$b$J$/$N;v$G$"$k!#O7GL$O!"$D$V$d$/$h$&$J!"$&$a$/$h$&$J@<$rN)$F$J$,$i!"(B +$B$^$@G3$($F$$$k2P$N8w$r$?$h$j$K!"Dt;R$N8}$^$G!"Gg$C$F9T$C$?!#$=$&$7$F!"$=$3$+$i!"(B +$BC;$$GrH1$rE]!J$5$+$5$^!K$K$7$F!"Lg$N2<$rGA$-$3$s$@!#30$K$O!"M#!"9uF6!9!J$3$/$H(B +$B$&$H$&!K$?$kLk$,$"$k$P$+$j$G$"$k!#(B +$B!!2<?M$O!"4{$K!"1+$rKA$7$F!"5~ET$ND.$X6/Ep$rF/$-$K5^$$$G$$$?!#(B diff --git a/vendor/golang.org/x/text/encoding/testdata/rashomon-shift-jis.txt b/vendor/golang.org/x/text/encoding/testdata/rashomon-shift-jis.txt new file mode 100644 index 0000000..7a54b95 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/rashomon-shift-jis.txt @@ -0,0 +1,178 @@ +This file was derived from +http://www.gutenberg.org/cache/epub/1982/pg1982.txt +-------- + + +H열V + +@̎̕łBl̉lẢʼnJ݂҂ĂB@L +̉ɂ́A̒j̊OɒNȂBAXOh̔A傫ȉ~ɁA肬 +肷CƂ܂ĂB傪A鐝Hɂȏ́A̒j̊OɂAJ +s}❆GXqAOl͂肻Ȃ̂łBꂪA̒j̊O +ɒNȂB +@̂Ɖ]ƁA̓ONAsɂ́AnkƂҕƂΎƂ_[Ƃ] +‚ÂċNBŗ̂т͈ʂłȂBLɂƁA +ōӂāA̒O‚A̔i͂j‚肵؂AH΂ +‚ݏd˂Đd̗ijɔĂƉ]ƂłB̎nł邩A +̏CȂǂ́AN̂ĂČڂ݂҂ȂBƂ̍rʂĂ +悢ɂāAϒKijށBlށBƂƂ܂ɂ́A +ȂlA̖֎ėāÂĂčsƉ]KoBŁA̖ +ȂȂƁANłCāA̖̋ߏւ͑Ԃ݂ȂɂȂ +Ă܂̂łB +@̑薔낪炩AW܂ėBԌƁA낪HƂ +ւ`āAiсĵ܂eȂAт܂ĂBɖ +̋󂪁A[ĂłȂ鎞ɂ́AꂪӖ܂悤ɂ͂茩B +́Aܘ_Ȁɂ鎀l̓A݂ɗ̂łB[[ނ́Ax +AHȂBBAXAꂩAĂ̕ڂɒ +͂ΒȉɁA̕ijA_XƔт‚Ă̂Bl +͎iΒïԏ̒iɐ􂢂炵̉ij̐K𐘂āAE̖jɏo +A傫ȖᬁiɂсjCɂȂAڂAĴӂ̂𒭂߂Ă̂ +B +@҂͂AulJ݂҂ĂvƏBAĺAJ +łiʂǂ悤Ɖ]Ă͂ȂBӂȂAܘ_Al̉Ƃ֋A‚ł +B̎ĺAlܓOɉɂoꂽBOɂ悤ɁAs +͈ʂȂ炸ĂB̉lAiNAgĂlɂo +ꂽ̂A̐̏ȗ]gɊOȂȂBAulJ݂҂Ăv +Ɖ]AuJɂӂ肱߂ꂽlAsȂāArɂĂv +]AKłB̏A̋͗lȂ炸̉̕l +SentimentalismeɉeB\ij̍肩ӂoJ́Aɏ +邯ȂBŁAĺA[Ă薾̕邵ǂɂ +Ƃā[[]΂ǂɂȂȂAǂɂ悤ƂāAƂƂ߂Ȃl +ǂȂA鐝HɂӂJ̉𕷂ƂȂĂB +@J͗‚‚ŁAAƉ]‚߂ĂB[ł͎ɋ +ႭāAグƁẢA΂߂ɂ‚oOi炩j̐ɁAd +Â_xĂB +@ǂɂȂȂAǂɂׂɂ́AiIł硁iƂ܁j͂ȂB +Ił΁Azni‚j̉A΂̓y̏ŁA_iɁj +łBāȀ̖֎ėāÂ悤Ɏ̂ĂĂ܂΂ +łBI΂ȂƂ΁[[l̍ĺAxjgɁA +̋ǏֈB́u΁v́A‚łĂAǁu΁v +BĺAiI΂ȂƂm肵ȂÁu΁v̂ +‚ׂɁARǍɗ‚ulɂȂOɎdȂvƉ]A +ϋɓIɍm肷邾́AECoɂ̂łB +@l͑傫Ți߁jāAꂩAVɗオB[₦̂ +śAΉ~̊łB͖̒ƒƂ̊ԂA[łƋɉ +ȂAʂBOh̒ɂƂ܂Ă肬肷Aǂ֍sĂ܂ +B +@ĺA߂ȂAR̊́i݁jɏd˂Ả̌ +̂܂܂킵BJ̊̂ȂAlڂɂ霜̂ȂAӊyɂ˂ꂻ +ȏ΁AłƂA𖾂ƎvłBƁAK +̘̏O֏A̍LAVOhqɂ‚BȂAlɂ +ĂAǂl΂łBĺAōɂiЂÂj̑ +⑖Ȃ悤ɋC‚ȂAm͂A̒q̈ԉ̒iւ +݂B +@ꂩǍłB̘Ȍ֏oA̍Lq̒iɁAl +̒jAL̂悤ɐg߂āAEȂA̗eqMĂBȌォ +炳΂̌AɁA̒j̉E̖jʂ炵ĂBZ颁iЂj̒ɁA +Ԃ^ᬂ̂jłBĺAn߂Ȁɂ҂́Al΂ +肾ƍĂBꂪAqOiČƁAł͒N΂ƂڂāA +̉΂𑴏ƓĂ炵B́ȂA낢A +Xɒw偂̑V䗠ɁAȂf̂ŁAɂƒmꂽ̂ł +B̉J̖ɁȀ̗ŁA΂ƂĂ邩́AǂB̎҂ł͂ +B +@ĺA{iĵ悤ɑʂŁAƋ}ȒqAԏ̒i +Ŕ悤ɂď‚߂Bđ̂o邾AɂȂAo邾 +AO֏oāA鋰AO̓`ČB +@ƁAO̓ɂ́A\ɕʂA‚̎r[ijAɊĂ +邪A΂̌̋yԔ͈͂Av苷̂ŁA͊‚Ƃ킩ȂBBA +ڂ낰ȂAm̂́A̒ɗ̎r[ƁA𒅂r[ƂƉ] +Bܘ_Aɂ͏j܂Ă炵BāA̎r[͊FAꂪA +i‚ājAĂlԂƉ]^Ays˂đl` +悤ɁAJA΂肵āA낲돰̏ɂ낪ĂB +AƂƂ̍ȂĂ镔ɁAڂ肵΂̌āAႭȂ +镔̉ewÂȂAivɈij̔@قĂB +@ĺA̎r[̕ࣂLCɎv킸A@ijBA +̎́ȀuԂɂ́A@YĂB鋭wiقƂ +ǂƂƂj̒j̚koDĂ܂łB +@l̊́A̎A͂߂āAr[̒LĂi܂Ăjl +BwFiЂ͂j̒𒘂Aw̒ႢAÁÂ悤 +ȘVkłB̘VḱAE̎ɉ΂Ƃ̖ؕЂāA̎r[̈ +̊`ނ悤ɒ߂ĂB̖т̒ƁA̎r[ł낤B +@ĺAZ̋|Ǝl̍DSƂɓāAb͌ċziĵ +YĂBL̋L҂̌؂΁AugiƂj̖тv悤Ɋ +̂łBƁAVḱA̖ؕЂA‚̊Ԃɑ}āAꂩA܂Œ +߂Ăr[̎ɗƁAxA̐e̎qli݁jƂ悤 +ɁA̖̒т{”͂߂B͎ɏ]Ĕ炵B +@̖̔тA{”̂ɏ]ĉl̐ŚA|čs +BāAƓɁA̘Vkɑ΂͂A“ėB +A̘Vkɑ΂Ɖ]ẮAꕾ邩mȂBJiނjA +鈫ɑ΂锽Aꕪɋ𑝂ė̂łB̎AN̉lɁA +̉ł̒jlĂA_iɁj邩lɂȂ邩Ɖ] +A߂ĎoA炭ĺA̖ȂA_I񂾎ł낤B +قǁA̒j̈𑞂ސŚAVk̏ɑ}̖ؕЂ̂悤ɁA悭R +肾Ă̂łB +@lɂ́Aܘ_A̘Vkl̖̔т𔲂킩ȂB]āAI +ɂ́AP̉ɕЂÂĂ悢mȂBlɂƂẮA +J̖ɁȀ̗ŁAl̖̔т𔲂Ɖ]AꂾŊɋ +炴鈫łBܘ_@ĺ@AlɂȂCłȂ́@ +ɖYĂ̂łB +@ŁAĺAɗ͂āAȂAq֔яオ@ +ĐiЂÂj̑ɎȂA҂ɘVk̑O݂֕BVk +̂́@]ȂB +@VḱAډlƁA܂ŜWi݁jɂłeꂽ悤Ɂ@яオ +B +@ûAǂ֍sBv +@ĺAVkr[ɂ‚܂ÂȂAQĂӂ߂ē悤ƂsǂŁA +lBVḱAłl‚̂čsƂBl͖As +܂ƂāAǂBl͎r[̒ŁAbÂ܂܁A‚ݍB +́A͂߂A킩ĂBl͂ƂƂAVk̘r‚ŁA +ւ˂|BxA{iƂj̋r̂悤ȁAƔ΂̘rłB +@uĂBĂB]B]ʂƁ@ꂾBv +@ĺAVk‚ƁAȂȀ𕥂āA|i͂ˁj̐F +̊̑Oւ‚‚BǂAVk͖قĂBȂȂӂ킹āA +ő؂ȂAAዅ܂Ԃ̊O֏oɂȂAJāÂ悤 +ɎXiイˁjقĂBƁAl͎n߂Ėɂ̘Vk̐ +ASRÄӎuɎxzĂƉ]ӎBāÄӎ́A +܂ł͂RĂ̐Sij̊Ԃɂ܂Ă܂BɎc +̂́ABAdāAꂪ~ɐÁA炩ȓӂƖƂ +΂łBŁAĺAVkAȂA_Ă]B +@uȂ͌giтj̖̒lȂǂł͂ȂB̖̉ʂ肩 +̎҂B炨OɓāAǂ悤Ɖ]悤Ȏ͂ȂBBA +̖̏ŁAĂ̂AȂɘb΂̂Bv +@ƁAVḱAJAw傫āAƂ̉l̊B +܂Ԃ̐ԂȂAĤ悤ȁAsŌ̂łBꂩAᰂŁAwA +@ƈ‚ɂȂOłł悤ɓBׂAŁAA +Ă̂B̎A̍AAi炷j̚e悤ȐAbb +Al̎֓`ėB +@u̔𔲂ĂȁȀ̔𔲂ĂȁA顁i‚jɂ悤Ǝv +Bv +@ĺAVk̓OA}Ȃ̂Ɏ]BĎ]ƓɁAO +Aȕ̂ƈꂵɁAS̒ւ͂ėBƁ@̋CFijA +ւʂ̂ł낤BVḱAЎɁA܂r[̓DiƁj +тȂA寁iЂĵ‚Ԃ₭悤ȐŁAȂAȎ] +B +@Al̖̔т𔲂Ɖ]́A˒mʁBA]l +́AF@̈ʂȎAĂlԂ΂łBɁAA +Ȃǂ́Aւl΂肸‚ɐ؂Ċ̂AiقjƉ]āA +сi͂j̐w֔ɍsBuaɂĎȂȂȂAł +ɍsĂȂBȀ̔銱́A悢Ɖ]̂ŁA +тAؗɔĂ̂łB́Ȁ̂Ƃ +vȂBȂ΁A_iɁĵŁAdȂłB +AÂĂƂ͎vȂB͂肵Ȃ΁A_ +̂ŁAdȂ鎖łBāA̎dȂA悭 +mĂ̏́Â鎖Ă̂ɂȂƎvł +B[[VḱÂȈӖ̎]B +@ĺAɂ߂āȂ̎̕łȂARƂāA +̘b𕷂ĂBܘ_A@E̎ł́AԂjɔ^傫Ȗᬁiɂсj +CɂȂAĂ̂łBAV𕷂Ă钆ɁAl̐Sɂ́A +EC܂ėB́@Ảł̒jɌĂECłB +āAȀ̖֏ijāA̘Vk߂̗ECƂ́ASRA +΂ȕɓƂECłBĺA_邩lɂȂ邩ɖȂ +΂ł͂ȂB̎̂̒j̐S]΁A_ȂǂƉ]́AwAl +鎖oȂAӎ̊OɒǂoĂB +@uƁABv +@Vk̘bƁAl͚}ij悤ȐŔOBāAꑫO +֏oƁAsӂɁAE̎ᬂ痣āAVk̋ݏi肪݁j‚݂ȂA +]B +@uł́AȂiЂ͂j悤ƍނ܂ȁBȂȂ΁A_ +̂Ȃ̂Bv +@ĺA΂₭AVk̒𔍂ƂBꂩAɂ݂‚ƂV +kArr[̏֏R|Bq̌܂ł́A͂Ɍܕ𐔂΂łB +ĺAƂOF̒킫ɂāA܂Ԃɋ}Ȓq̒ +肽B +@bA񂾂悤ɓ|ĂVkAr[̒Ȃ̗̂N̂́A +ꂩԂȂ̎łBVḱA‚Ԃ₭悤ȁA߂悤Ȑ𗧂ĂȂA +܂RĂ΂̌ɁAq̌܂ŁAčsBāAA +Z|i܁jɂāẢ`񂾁BOɂ́ABAXi +Ƃj邪΂łB +@ĺAɁAJ`āAs̒֋𓭂ɋ}łB diff --git a/vendor/golang.org/x/text/encoding/testdata/rashomon-utf-8.txt b/vendor/golang.org/x/text/encoding/testdata/rashomon-utf-8.txt new file mode 100644 index 0000000..a890328 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/rashomon-utf-8.txt @@ -0,0 +1,178 @@ +This file was derived from +http://www.gutenberg.org/cache/epub/1982/pg1982.txt +-------- +羅生門 + +芥川龍之介 + + 或日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。 広い門 +の下には、この男の外に誰もいない。ただ、所々丹塗の剥げた、大きな円柱に、きりぎ +りすが一匹とまっている。羅生門が、朱雀大路にある以上は、この男の外にも、雨やみ +をする市女笠や揉烏帽子が、もう二三人はありそうなものである。それが、この男の外 +に誰もいない。 + 何故かと云うと、この二三年、京都には、地震とか辻風とか火事とか饑饉とか云う災 +いがつづいて起こった。そこで洛中のさびれ方は一通りでない。旧記によると、仏像や +仏具を打砕いて、その丹がついたり、金銀の箔(はく)がついたりした木を、路ばたに +つみ重ねて薪の料(しろ)に売っていたと云うことである。洛中がその始末であるから、 +羅生門の修理などは、元より誰も捨てて顧みる者がなかった。するとその荒れ果てたの +をよい事にして、狐狸(こり)が棲む。盗人が棲む。とうとうしまいには、引取り手の +ない死人を、この門へ持って来て、捨てて行くと云う習慣さえ出来た。そこで、日の目 +が見えなくなると、誰でも気味を悪がって、この門の近所へは足ぶみをしない事になっ +てしまったのである。 + その代り又鴉が何処からか、たくさん集まって来た。昼間見ると、その鴉が何羽とな +く輪を描いて、高い鴟尾(しび)のまわりを啼きながら、飛びまわっている。殊に門の +上の空が、夕焼けであかくなる時には、それが胡麻をまいたようにはっきり見えた。鴉 +は、勿論、門の上にある死人の肉を、啄みに来るのである。ーー尤も今日は、刻限が遅 +いせいか、一羽も見えない。唯、所々、崩れかかった、そうしてその崩れ目に長い草の +はえた石段の上に、鴉の糞(くそ)が、点々と白くこびりついているのが見える。下人 +は七段ある石段の一番上の段に洗いざらした紺の襖(あお)の尻を据えて、右の頬に出 +来た、大きな面皰(にきび)を気にしながら、ぼんやり、雨のふるのを眺めているので +ある。 + 作者はさっき、「下人が雨やみを待っていた」と書いた。しかし、下人は、雨がやん +でも格別どうしようと云う当てはない。ふだんなら、勿論、主人の家へ帰る可き筈であ +る。所がその主人からは、四五日前に暇を出された。前にも書いたように、当時京都の +町は一通りならず衰微していた。今この下人が、永年、使われていた主人から暇を出さ +れたのも、この衰微の小さな余波に外ならない。だから、「下人が雨やみを待っていた」 +と云うよりも、「雨にふりこめられた下人が、行き所がなくて、途方にくれていた」と +云う方が、適当である。その上、今日の空模様も少なからずこの平安朝の下人の +Sentimentalismeに影響した。申(さる)の刻下がりからふり出した雨は、未だに上 +がるけしきがない。そこで、下人は、何を措いても差当たり明日の暮しをどうにかしよ +うとしてーー云わばどうにもならない事を、どうにかしようとして、とりとめもない考 +えをたどりながら、さっきから朱雀大路にふる雨の音を聞くともなく聞いていた。 + 雨は羅生門をつつんで、遠くから、ざあっと云う音をあつめてくる。夕闇は次第に空 +を低くして、見上げると、門の屋根が、斜めにつき出した甍(いらか)の先に、重たく +うす暗い雲を支えている。 + どうにもならない事を、どうにかする為には、手段を選んでいる遑(いとま)はない。 +選んでいれば、築地(ついじ)の下か、道ばたの土の上で、饑死(うえじに)をするば +かりである。そうして、この門の上へ持って来て、犬のように捨てられてしまうばかり +である。選ばないとすればーー下人の考えは、何度も同じ道を低徊した揚句に、やっと +この局所へ逢着した。しかしこの「すれば」は、いつもでたっても、結局「すれば」で +あった。下人は、手段を選ばないという事を肯定しながらも、この「すれば」のかたを +つける為に、当然、この後に来る可き「盗人になるより外に仕方がない」と云う事を、 +積極的に肯定するだけの、勇気が出ずにいたのである。 + 下人は大きな嚏(くさめ)をして、それから、大儀そうに立上がった。夕冷えのする +京都は、もう火桶が欲しい程の寒さである。風は門の柱と柱との間を、夕闇と共に遠慮 +なく、吹きぬける。丹塗の柱にとまっていたきりぎりすも、もうどこかへ行ってしまっ +た。 + 下人は、頸をちぢめながら、山吹の汗衫(かざみ)に重ねた、紺の襖の肩を高くして +門のまわりを見まわした。雨風の患のない、人目にかかる惧のない、一晩楽にねられそ +うな所があれば、そこでともかくも、夜を明かそうと思ったからである。すると、幸門 +の上の楼へ上る、幅の広い、之も丹を塗った梯子が眼についた。上なら、人がいたにし +ても、どうせ死人ばかりである。下人は、そこで腰にさげた聖柄(ひじりづか)の太刀 +が鞘走らないように気をつけながら、藁草履をはいた足を、その梯子の一番下の段へふ +みかけた。 + それから、何分かの後である。羅生門の楼の上へ出る、幅の広い梯子の中段に、一人 +の男が、猫のように身をちぢめて、息を殺しながら、上の容子を窺っていた。楼の上か +らさす火の光が、かすかに、その男の右の頬をぬらしている。短い鬚(ひげ)の中に、 +赤く膿を持った面皰のある頬である。下人は、始めから、この上にいる者は、死人ばか +りだと高を括っていた。それが、梯子を二三段上って見ると、上では誰か火をとぼして、 +しかもその火を其処此処と動かしているらしい。これは、その濁った、黄いろい光が、 +隅々に蜘蛛の巣をかけた天井裏に、ゆれながら映ったので、すぐにそれと知れたのであ +る。この雨の夜に、この羅生門の上で、火をともしているからは、どうせ唯の者ではな +い。 + 下人は、宮守(やもり)のように足音をぬすんで、やっと急な梯子を、一番上の段ま +で這うようにして上りつめた。そうして体を出来るだけ、平にしながら、頸を出来るだ +け、前へ出して、恐る恐る、楼の内を覗いて見た。 + 見ると、楼の内には、噂に聞いた通り、幾つかの屍骸(しがい)が、無造作に棄てて +あるが、火の光の及ぶ範囲が、思ったより狭いので、数は幾つともわからない。唯、お +ぼろげながら、知れるのは、その中に裸の屍骸と、着物を着た屍骸とがあると云う事で +ある。勿論、中には女も男もまじっているらしい。そうして、その屍骸は皆、それが、 +嘗(かつて)、生きていた人間だと云う事実さえ疑われる程、土を捏ねて造った人形の +ように、口を開いたり、手を延ばしたりして、ごろごろ床の上にころがっていた。しか +も、肩とか胸とかの高くなっている部分に、ぼんやりした火の光をうけて、低くなって +いる部分の影を一層暗くしながら、永久に唖(おし)の如く黙っていた。 + 下人は、それらの屍骸の腐爛した臭気に思わず、鼻を掩った(おおった)。しかし、 +その手は、次の瞬間には、もう鼻を掩う事を忘れていた。或る強い感情が殆悉(ほとん +どことごとく)この男の嗅覚を奪ってしまったからである。 + 下人の眼は、その時、はじめて、其屍骸の中に蹲っている(うずくまっている)人間 +を見た。檜肌色(ひはだいろ)の着物を著た、背の低い、痩せた、白髪頭の、猿のよう +な老婆である。その老婆は、右の手に火をともした松の木片を持って、その屍骸の一つ +の顔を覗きこむように眺めていた。髪の毛の長い所を見ると、多分女の屍骸であろう。 + 下人は、六分の恐怖と四分の好奇心とに動かされて、暫時は呼吸(いき)をするのさ +え忘れていた。旧記の記者の語を借りれば、「頭身(とうしん)の毛も太る」ように感 +じたのである。すると、老婆は、松の木片を、床板の間に挿して、それから、今まで眺 +めていた屍骸の首に両手をかけると、丁度、猿の親が猿の子の虱(しらみ)をとるよう +に、その長い髪の毛を一本ずつ抜きはじめた。髪は手に従って抜けるらしい。 + その髪の毛が、一本ずつ抜けるのに従って下人の心からは、恐怖が少しずつ消えて行っ +た。そうして、それと同時に、その老婆に対するはげしい憎悪が、少しずつ動いて来た。 +いや、この老婆に対すると云っては、語弊があるかも知れない。寧(むしろ)、あらゆ +る悪に対する反感が、一分毎に強さを増して来たのである。この時、誰かがこの下人に、 +さっき門の下でこの男が考えていた、饑死(うえじに)をするか盗人になるかと云う問 +題を、改めて持出したら、恐らく下人は、何の未練もなく、饑死を選んだ事であろう。 +それほど、この男の悪を憎む心は、老婆の床に挿した松の木片のように、勢よく燃え上 +がりだしていたのである。 + 下人には、勿論、何故老婆が死人の髪の毛を抜くかわからなかった。従って、合理的 +には、それを善悪の何れに片づけてよいか知らなかった。しかし下人にとっては、この +雨の夜に、この羅生門の上で、死人の髪の毛を抜くと云う事が、それだけで既に許す可 +らざる悪であった。勿論 下人は さっき迄自分が、盗人になる気でいた事なぞは と +うに忘れているのである。 + そこで、下人は、両足に力を入れて、いかなり、梯子から上へ飛び上がった そうし +て聖柄(ひじりづか)の太刀に手をかけながら、大股に老婆の前へ歩みよった。老婆が +驚いたのは 云う迄もない。 + 老婆は、一目下人を見ると、まるで弩(いしゆみ)にでも弾かれたように 飛び上がっ +た。 + 「おのれ、どこへ行く。」 + 下人は、老婆が屍骸につまづきながら、慌てふためいて逃げようとする行手を塞いで、 +こう罵った。老婆は、それでも下人をつきのけて行こうとする。下人は又、それを行か +すまいとして、押しもどす。二人は屍骸の中で、暫、無言のまま、つかみ合った。しか +し勝負は、はじめから、わかっている。下人はとうとう、老婆の腕をつかんで、無理に +そこへねじ倒した。丁度、鶏(とり)の脚のような、骨と皮ばかりの腕である。 + 「何をしていた。さあ何をしていた。云え。云わぬと これだぞよ。」 + 下人は、老婆をつき放すと、いきなり、太刀の鞘を払って、白い鋼(はがね)の色を +その眼の前へつきつけた。けれども、老婆は黙っている。両手をわなわなふるわせて、 +肩で息を切りながら、眼を、眼球がまぶたの外へ出そうになる程、見開いて、唖のよう +に執拗(しゅうね)く黙っている。これを見ると、下人は始めて明白にこの老婆の生死 +が、全然、自分の意志に支配されていると云う事を意識した。そうして、この意識は、 +今まではげしく燃えていた憎悪の心を何時(いつ)の間にか冷ましてしまった。後に残っ +たのは、唯、或仕事をして、それが円満に成就した時の、安らかな得意と満足とがある +ばかりである。そこで、下人は、老婆を、見下げながら、少し声を柔げてこう云った。 + 「己は検非違使(けびいし)の庁の役人などではない。今し方この門の下を通りかかっ +た旅の者だ。だからお前に縄をかけて、どうしようと云うような事はない。唯今時分、 +この門の上で、何をしていたのだか、それを己に話さえすればいいのだ。」 + すると、老婆は、見開いた眼を、一層大きくして、じっとその下人の顔を見守った。 +まぶたの赤くなった、肉食鳥のような、鋭い眼で見たのである。それから、皺で、殆、 +鼻と一つになった唇を何か物でも噛んでいるように動かした。細い喉で、尖った喉仏の +動いているのが見える。その時、その喉から、鴉(からす)の啼くような声が、喘ぎ喘 +ぎ、下人の耳へ伝わって来た。 + 「この髪を抜いてな、この女の髪を抜いてな、鬘(かつら)にしようと思うたの +じゃ。」 + 下人は、老婆の答が存外、平凡なのに失望した。そうして失望すると同時に、又前の +憎悪が、冷な侮蔑と一しょに、心の中へはいって来た。すると その気色(けしき)が、 +先方へも通じたのであろう。老婆は、片手に、まだ屍骸の頭から奪(と)った長い抜け +毛を持ったなり、蟇(ひき)のつぶやくような声で、口ごもりながら、こんな事を云っ +た。 + 成程、死人の髪の毛を抜くと云う事は、悪い事かね知れぬ。しかし、こう云う死人の +多くは、皆 その位な事を、されてもいい人間ばかりである。現に、自分が今、髪を抜 +いた女などは、蛇を四寸ばかりずつに切って干したのを、干魚(ほしうお)だと云って、 +太刀帯(たちはき)の陣へ売りに行った。疫病にかかって死ななかったなら、今でも売 +りに行っていたかもしれない。しかも、この女の売る干魚は、味がよいと云うので、太 +刀帯たちが、欠かさず菜料に買っていたのである。自分は、この女のした事が悪いとは +思わない。しなければ、饑死(えうじに)をするので、仕方がなくした事だからである。 +だから、又今、自分のしていた事も悪い事とは思わない。これもやはりしなければ、饑 +死をするので、仕方がなくする事だからである。そうして、その仕方がない事を、よく +知っていたこの女は、自分のする事を許してくれるのにちがいないと思うからであ +る。ーー老婆は、大体こんな意味の事を云った。 + 下人は、太刀を鞘におさめて、その太刀の柄を左の手でおさえながら、冷然として、 +この話を聞いていた。勿論、 右の手では、赤く頬に膿を持た大きな面皰(にきび)を +気にしながら、聞いているのである。しかし、之を聞いている中に、下人の心には、或 +勇気が生まれて来た。それは さっき、門の下でこの男に欠けていた勇気である。そう +して、又さっき、この門の上へ上(あが)って、その老婆を捕えた時の勇気とは、全然、 +反対な方向に動こうとする勇気である。下人は、饑死をするか盗人になるかに迷わなかっ +たばかりではない。その時のこの男の心もちから云えば、饑死などと云う事は、殆、考 +える事さえ出来ない程、意識の外に追い出されていた。 + 「きっと、そうか。」 + 老婆の話が完ると、下人は嘲(あざけ)るような声で念を押した。そうして、一足前 +へ出ると、不意に、右の手を面皰から離して、老婆の襟上(えりがみ)をつかみながら、 +こう云った。 + 「では、己が引剥(ひはぎ)をしようと恨むまいな。己もそうしなければ、饑死をす +る体なのだ。」 + 下人は、すばやく、老婆の着物を剥ぎとった。それから、足にしがみつこうとする老 +婆を、手荒く屍骸の上へ蹴倒した。梯子の口までは、僅に五歩を数えるばかりである。 +下人は、剥ぎとった桧肌色の着物をわきにかかえて、またたく間に急な梯子を夜の底へ +かけ下りた。 + 暫、死んだように倒れていた老婆が、屍骸の中から、その裸の体を起こしたのは、そ +れから間もなくの事である。老婆は、つぶやくような、うめくような声を立てながら、 +まだ燃えている火の光をたよりに、梯子の口まで、這って行った。そうして、そこから、 +短い白髪を倒(さかさま)にして、門の下を覗きこんだ。外には、唯、黒洞々(こくと +うとう)たる夜があるばかりである。 + 下人は、既に、雨を冒して、京都の町へ強盗を働きに急いでいた。 diff --git a/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-hz-gb2312.txt b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-hz-gb2312.txt new file mode 100644 index 0000000..5a142ce --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-hz-gb2312.txt @@ -0,0 +1,107 @@ +This file was derived from +http://www.gutenberg.org/files/23864/23864-0.txt +after converting from Traditional Chinese to Simplified Chinese. +-------- +~{J<<F5ZR;~} + +~{KoWST;#:1xU_#,9zV.4sJB#,K@IzV.5X#,4fMvV.5@#,2;?I2;2lR2!#~} + +~{9J>-V.RTNeJB#,P#V.RT<F#,6xKwFdGi#:R;T;5@#,6~T;Ll#,H}T;5X#,KDT;=+#,NeT;7(!#~} + +~{5@U_#,AnCqSkIOM,Rb#,?ISkV.K@#,?ISkV.Iz#,6x2;N7N#R2#;LlU_#,RuQt!":.Jn!"J1VFR2#;5XU_#,T6=|!"OURW!"9cOA!"K@IzR2#;=+U_#,VG!"PE!"HJ!"SB!"QOR2#;7(U_#,GzVF!"9Y5@!"VwSCR2!#724KNeU_#,=+D*2;NE#,V*V.U_J$#,2;V*U_2;J$!#~} + +~{9JP#V.RT<F#,6xKwFdGi#,T;#:VwJkSP5@#?=+JkSPD\#?Ll5XJk5C#?7(AnJkPP#?1x~}?~{JkG?#?J?WdJkA7#?IM7#JkCw#?NaRT4KV*J$8:RS!#~} + +~{=+L}Na<F#,SCV.1XJ$#,AtV.#;=+2;L}Na<F#,SCV.1X0\#,H%V.!#~} + +~{<F@{RTL}#,DK~}?~{V.JF#,RTWtFdMb!#JFU_#,Rr@{6xVFH(R2!#~} + +~{1xU_#,9n5@R2!#9JD\6xJ>V.2;D\#,SC6xJ>V.2;SC#,=|6xJ>V.T6#,T66xJ>V.=|!#@{6xSUV.#,BR6xH!V.#,J56x18V.#,G?6x1\V.#,E-6xDSV.#,106x=>V.#,X}6x@MV.#,GW6x@kV.#,9%FdN^18#,3vFd2;Rb!#4K1x<RV.J$#,2;?IOH4+R2!#~} + +~{7rN4U=6xCmKcJ$U_#,5CKc6`R2#;N4U=6xCmKc2;J$U_#,5CKcIYR2!#6`KcJ$#,IYKc2;J$#,6x?vN^Kc:u#!NaRT4K9[V.#,J$8:<{RS!#~} + +~{WwU=5Z6~~} + +~{KoWST;#:72SC1xV.7(#,3[35G'~}?~{#,8o35G'3K#,4x<WJ.Mr#,G'@o@!A8!#TrDZMbV.7Q#,1v?MV.SC#,=:FaV.2D#,35<WV.7n#,HU7QG'=p#,H;:sJ.MrV.J&>YRS!#~} + +~{FdSCU=R2#,9sJ$#,>CTr6[1x4lHq#,9%3GTrA&G|#,>C1)J&Tr9zSC2;Wc!#7r6[1x4lHq#,G|A&~}?~{;u#,TrVn:n3KFd1W6xFp#,KdSPVGU_#,2;D\IFFd:sRS!#9J1xNEW>KY#,N46CGIV.>CR2!#7r1x>C6x9z@{U_#,N4V.SPR2!#9J2;>!V*SC1xV.:&U_#,Tr2;D\>!V*SC1xV.@{R2!#~} + +~{IFSC1xU_#,R[2;TY<.#,A82;H}TX#,H!SCl69z#,RrA8l65P#,9J>|J3?IWcR2!#9zV.F6l6J&U_T6Jd#,T6JdTr0YPUF6#;=|l6J&U_9sBt#,9sBtTr0YPU=_#,2F=_Tr<1l6GpR[!#A&G|2F~}?~{#,VPT-DZPil6<R#,0YPUV.7Q#,J.H%FdF_#;9+<RV.7Q#,FF>|0UBm#,<WkPJ8es#,j*~}?~{C,~}?~{#,GpE#4s35#,J.H%FdAy!#~} + +~{9JVG=+NqJ3l65P#,J35PR;VS#,51Na6~J.VS#;]=8QR;J/#,51Na6~J.J/!#9JI15PU_#,E-R2#;H!5PV.@{U_#,;uR2!#9J35U=#,5C35J.3KRTIO#,IMFdOH5CU_#,6x8|Fdl:Fl!#35TS6x3KV.#,WdIF6xQxV.#,JGN=J$5P6xRfG?!#~} + +~{9J1x9sJ$#,2;9s>C!#9JV*1xV.=+#,CqV.K>C|!#9z<R02N#V.VwR2!#~} + +~{D19%5ZH}~} + +~{KoWST;#:72SC1xV.7(#,H+9z~}?~{IO#,FF9z4NV.#;H+>|~}?~{IO#,FF>|4NV.#;H+BC~}?~{IO#,FFBC4NV.#;H+Wd~}?~{IO#,FFWd4NV.#;H+Ni~}?~{IO#,FFNi4NV.!#JG9J0YU=0YJ$#,7GIFV.IFU_R2#;2;U=6xG|HKV.1x#,IFV.IFU_R2!#~} + +~{9JIO1x7%D1#,Fd4N7%=;#,Fd4N7%1x#,FdOB9%3G!#9%3GV.7(#,~}?~{2;5CRQ!#P^~}???~{#,>_FwP5#,H}TB6x:s3I#;>`~}?~{#,SVH}TB6x:sRQ!#=+2;J$Fd7^#,6xRO8=V.#,I1J?H}7VV.R;#,6x3G2;0NU_#,4K9%V.TVR2!#~} + +~{9JIFSC1xU_#,G|HKV.1x#,6x7GU=R2#,0NHKV.3G6x7G9%R2#,;YHKV.9z6x7G>CR2#,1XRTH+Uyl6LlOB#,9J1x2;6Y6x@{?IH+#,4KD19%V.7(R2!#~} + +~{9JSC1xV.7(#,J.TrN'V.#,NeTr9%V.#,16Tr7VV.#,5PTrD\U=V.#,IYTrD\LSV.#,2;HtTrD\1\V.!#9JP!5PV.<a#,4s5PV.G\R2!#~} + +~{7r=+U_#,9zV.8(R2!#8(V\Tr9z1XG?#,8(O6Tr9z1XHu!#9J>}V.KyRT;<l6>|U_H}#:2;V*>|V.2;?IRT=x6xN=V.=x#,2;V*>|V.2;?IRTMK6xN=V.MK#,JGN=wc>|#;2;V*H}>|V.JB#,6xM,H}>|V.U~#,Tr>|J?;sRS#;2;V*H}>|V.H(#,6xM,H}>|V.HN#,Tr>|J?RIRS!#H}>|<H;sGRRI#,TrVn:nV.DQVARS!#JGN=BR>|R}J$!#~} + +~{9JV*J$SPNe#:V*?IRTU=Sk2;?IRTU=U_#,J$!#J6~}?~{9QV.SCU_#,J$!#IOOBM,S{U_#,J$!#RTS]4}2;S]U_#,J$!#=+D\6x>}2;SyU_#,J$!#4KNeU_#,V*J$V.5@R2!#~} + +~{9JT;#:V*<:V*1K#,0YU=2;~}?~{#;2;V*1K6xV*<:#,R;J$R;8:#;2;V*1K2;V*<:#,C?U=1X0\!#~} + +~{>|PN5ZKD~} + +~{KoWST;#:NtV.IFU=U_#,OH~}?~{2;?IJ$#,RT4}5PV.?IJ$!#2;?IJ$TZ<:#,?IJ$TZ5P!#9JIFU=U_#,D\~}?~{2;?IJ$#,2;D\J95P1X?IJ$!#9JT;#:J$?IV*#,6x2;?I~}?~{!#~} + +~{2;?IJ$U_#,JXR2#;?IJ$U_#,9%R2!#JXTr2;Wc#,9%TrSP~}?~{!#IFJXU_#,2Xl6>E5XV.OB#,IF9%U_#,6/l6>ELlV.IO#,9JD\WT1#6xH+J$R2!#~} + +~{<{J$2;9}~}?~{HKV.KyV*#,7GIFV.IFU_R2#;U=J$6xLlOBT;IF#,7GIFV.IFU_R2!#9J>YGo:A2;~}?~{6`A&#,<{HUTB2;~}?~{CwD?#,NE@Wv*2;~}?~{4O6z!#9EV.IFU=U_#,J$l6RWJ$U_R2!#9JIFU=U_V.J$R2#,N^VGC{#,N^SB9&#,9JFdU=J$2;_/!#2;_/U_#,FdKy4k1XJ$#,J$RQ0\U_R2!#9JIFU=U_#,OHA"l62;0\V.5X#,6x2;J'5PV.0\R2!#JG9JJ$1xOHJ$#,6x:sGsU=#,0\1xOHU=6x:sGsJ$!#IFSC1xU_#,P^5@6x1#7(#,9JD\~}?~{J$0\V.U~!#~} + +~{1x7(#:R;T;6H#,6~T;A?#,H}T;J}#,KDT;3F#,NeT;J$!#5XIz6H#,6HIzA?#,A?IzJ}#,J}Iz3F#,3FIzJ$!#9JJ$1xHtRT~}?~{3F~}?~{#,0\1xHtRT~}?~{3F~}?~{!#J$U_V.U=#,Ht>v;}K.l6G'XpV.~}?~{U_#,PNR2!#~} + +~{1xJF5ZNe~} + +~{KoWST;#:72VN~}?~{HgVN9Q#,7VJ}JGR2#;67~}?~{Hg679Q#,PNC{JGR2#;H}>|V.~}?~{#,?IJ91XJ\5P6xN^0\U_#,FfU}JGR2#;1xV.Ky<S#,HgRT~}?~{M6BQU_#,PiJ5JGR2!#~} + +~{72U=U_#,RTU}:O#,RTFfJ$!#9JIF3vFfU_#,N^GnHgLl5X#,2;=_Hg=-:#!#VU6x84J<#,HUTBJGR2!#K@6x~}?~{Iz#,KDJ1JGR2!#Iy2;9}Ne#,NeIyV.1d#,2;?IJ$L}R2#;I+2;9}Ne#,NeI+V.1d#,2;?IJ$9[R2#;N62;9}Ne#,NeN6V.1d#,2;?IJ$3"R2#;U=JF#,2;9}FfU}#,FfU}V.1d#,2;?IJ$GnR2!#FfU}O`Iz#,HgQ-;7V.N^6K#,JlD\GnV.TU#?~} + +~{<$K.V.<2#,VAl6F/J/U_#,JFR2#;~}?~{DqV.<2#,VAl6;YU[U_#,=ZR2!#JG9JIFU=U_#,FdJFOU#,Fd=Z6L!#JFHgUEes#,=ZHg7";z!#~} + +~{7W7W~}??~{#,67BR6x2;?IBRR2#;;k;kcgcg#,PNT26x2;?I0\R2!#BRIzl6VN#,GSIzl6SB#,HuIzl6G?!#VNBR#,J}R2#;SBGS#,JFR2#;G?Hu#,PNR2!#9JIF6/5PU_#,PNV.#,5P1X4SV.#;ShV.#,5P1XH!V.!#RT@{6/V.#,RTWd4}V.!#~} + +~{9JIFU=U_#,GsV.l6JF#,2;Tpl6HK#;9JD\TqHK6xHNJF!#HNJFU_#,FdU=HKR2#,HgW*D>J/!#D>J/V.PT#,02Tr>2#,N#Tr6/#,7=TrV9#,T2TrPP!#9JIFU=HKV.JF#,HgW*T2J/l6G'XpV.I=U_#,JFR2!#~} + +~{PiJ55ZAy~} + +~{KoWST;#:72OH4&U=5X6x4}5PU_X}#,:s4&U=5X6xGwU=U_@M!#~} + +~{9JIFU=U_#,VBHK6x2;VBl6HK!#D\J95PHKWTVAU_#,@{V.R2#;D\J95PHK2;5CVAU_#,:&V.R2!#9J5PX}D\@MV.#,1%D\<"V.#,02D\6/V.!#3vFdKy1XGw#,GwFdKy2;Rb!#PPG'@o6x2;@MU_#,PPl6N^HKV.5XR2#;9%6x1XH!U_#,9%FdKy2;JXR2!#JX6x1X9LU_#,JXFdKy2;9%R2!#~} + +~{9JIF9%U_#,5P2;V*FdKyJX#;IFJXU_#,5P2;V*FdKy9%!#N":uN":u#,VAl6N^PN#;Iq:uIq:u#,VAl6N^Iy#,9JD\~}?~{5PV.K>C|!#=x6x2;?ISyU_#,3eFdPiR2#;MK6x2;?IW7U_#,KY6x2;?I<0R2!#9JNRS{U=#,5PKd8_@]In95#,2;5C2;SkNRU=U_#,9%FdKy1X>HR2#;NR2;S{U=#,Kd;-5X6xJXV.#,5P2;5CSkNRU=U_#,9TFdKyV.R2!#9JPNHK6xNRN^PN#,TrNRW(6x5P7V!#NRW(~}?~{R;#,5P7V~}?~{J.#,JGRTJ.9%FdR;R2!#TrNR~}?~{5P9Q#,D\RT~}?~{;w9QU_#,TrNaV.KySkU=U_T<RS!#NaKySkU=V.5X2;?IV*#,2;?IV*Tr5PKy18U_6`#,5PKy18U_6`#,TrNaKySkU=U_9QRS!#9J18G0Tr:s9Q#,18:sTrG09Q#,18WsTrSR9Q#,18SRTrWs9Q#,N^Ky2;18#,TrN^Ky2;9Q!#9QU_#,18HKU_R2#;~}?~{U_#,J9HK18<:U_R2!#9JV*U=V.5X#,V*U=V.HU#,Tr?IG'@o6x;aU=#;2;V*U=V.5X#,2;V*U=HU#,TrWs2;D\>HSR#,SR2;D\>HWs#,G02;D\>H:s#,:s2;D\>HG0#,6x?vT6U_J}J.@o#,=|U_J}@o:u#!RTNa6HV.#,T=HKV.1xKd6`#,R`^IRfl6J$TU#!9JT;#:J$?I~}?~{R2!#5PKd~}?~{#,?IJ9N^67!#9J2_V.6xV*5CJ'V.<F#,:rV.6xV*6/>2V.@m#,PNV.6xV*K@IzV.5X#,=GV.6xV*SP~}?~{2;WcV.4&!#9JPN1xV.<+#,VAl6N^PN!#N^PNTrIn<d2;D\?z#,VGU_2;D\D1!#RrPN6x4kJ$l6~}?~{#,~}?~{2;D\V*!#HK=TV*NRKyRTJ$V.PN#,6xD*V*NaKyRTVFJ$V.PN!#9JFdU=J$2;~}?~{#,6xS&PNl6N^Gn!#7r1xPNOsK.#,K.V.PP1\8_6xGwOB#,1xV.PN1\J56x;wPi#;K.Rr5X6xVFAw#,1xRr5P6xVFJ$!#9J1xN^3#JF#,K.N^3#PN!#D\Rr5P1d;/6xH!J$U_#,N=V.Iq!#9JNePPN^3#J$#,KDJ1N^3#N;#,HUSP6L3$#,TBSPK@Iz!#~} + +~{>|Uy5ZF_~} + +~{KoWST;#:~} ~{72SC1xV.7(#,=+J\C|l6>}#,:O>|>[~}?~{#,=;:M6xIa#,D*DQl6>|Uy!#>|UyV.DQU_#,RTSX~}?~{V1#,RT;<~}?~{@{!#9JSXFdM>#,6xSUV.RT@{#,:sHK7"#,OHHKVA#,4KV*SXV1V.<FU_R2!#>|Uy~}?~{@{#,>|Uy~}?~{N#!#>Y>|6xUy@{Tr2;<0#,N/>|6xUy@{Tr~}?~{VX>h!#JG9J~}?~{<W6xGw#,HUR92;4&#,165@<fPP#,0Y~}?~{6xUy@{#,TrG\H}=+>|#,>"U_OH#,F#U_:s#,Fd7(J.R;6xVA#;NeJ.@o6xUy@{#,TrujIO=+>|#,Fd7(0kVA#;H}J.@o6xUy@{#,TrH}7VV.6~VA!#JG9J>|N^~}?~{VXTrMv#,N^A8J3TrMv#,N^N/;}TrMv!#9J2;V*Vn:nV.D1U_#,2;D\T%=;#;2;V*I=AV!"OUWh!">ZTsV.PNU_#,2;D\PP>|#;2;SCOg5<U_#,2;D\5C5X@{!#9J1xRTU)A"#,RT@{6/#,RT7V:M~}?~{1dU_R2!#9JFd<2Hg7g#,FdPlHgAV#,GVBSHg;p#,2;6/HgI=#,DQV*HgRu#,6/Hg@WUp!#BSOg7V~}?~{#,@*5X7V@{#,P|H(6x6/!#OHV*SXV1V.<FU_J$#,4K>|UyV.7(R2!#!6>|U~!7T;#:!0QT2;O`NE#,9J~}?~{V.=p9D#;JS2;O`<{#,9J~}?~{V.l:Fl!#!17r=p9Dl:FlU_#,KyRTR;CqV.6zD?R2!#Cq<HW(R;#,TrSBU_2;5C6@=x#,GSU_2;5C6@MK#,4KSC~}?~{V.7(R2!#9JR9U=6`=p9D#,VgU=6`l:Fl#,KyRT1dHKV.6zD?R2!#H}>|?I6aFx#,=+>|?I6aPD!#JG9J3/FxHq#,VgFx6h#,D:Fx9i!#IFSC1xU_#,1\FdHqFx#,;wFd6h9i#,4KVNFxU_R2!#RTVN4}BR#,RT>24};)#,4KVNPDU_R2!#RT=|4}T6#,RTX}4}@M#,RT1%4}<"#,4KVNA&U_R2!#N^Q{U}U}V.Fl#,N^;wLCLCV.3B#,4KVN1dU_R2!#9JSC1xV.7(#,8_AjNpOr#,13GpNpDf#,Qp11Np4S#,HqWdNp9%#,6|1xNpJ3#,9iJ&Np6t#,N'J&RE~}?~{#,Gn?\NpFH#,4KSC1xV.7(R2!#~} + +~{>E1d5Z0K~} + +~{KoWST;#:~} ~{72SC1xV.7(#,=+J\C|l6>}#,:O>|>[:O!#7:5XN^Ia#,ai5X:O=;#,>x5XN^At#,N'5XTrD1#,K@5XTrU=#,M>SPKy2;SI#,>|SPKy2;;w#,3GSPKy2;9%#,5XSPKy2;Uy#,>}C|SPKy2;J\!#9J=+M(l6>E1dV.@{U_#,V*SC1xRS#;=+2;M(>E1dV.@{#,KdV*5XPN#,2;D\5C5XV.@{RS#;VN1x2;V*>E1dV.Ju#,KdV*Ne@{#,2;D\5CHKV.SCRS!#JG9JVGU_V.BG#,1XTSl6@{:&#,TSl6@{6xNq?IPER2#,TSl6:&6x;<?I=bR2!#JG9JG|Vn:nU_RT:&#,R[Vn:nU_RTR5#,GwVn:nU_RT@{!#9JSC1xV.7(#,N^JQFd2;@4#,JQNaSPRT4}V.#;N^JQFd2;9%#,JQNaSPKy2;?I9%R2!#9J=+SPNeN##,1XK@?II1#,1XIz?IB2#,7^KY?INj#,A.=`?IHh#,0.Cq?I73!#724KNeU_#,=+V.9}R2#,SC1xV.TVR2!#82>|I1=+#,1XRTNeN##,2;?I2;2lR2!#~} + +~{PP>|5Z>E~} + +~{KoWST;#:724&>|O`5P#,>xI=R@~}?~{#,JSIz4&8_#,U=B!N^5G#,4K4&I=V.>|R2!#>xK.1XT6K.#,?M>xK.6x@4#,NpS-V.l6K.DZ#,An0k6I6x;wV.@{#,S{U=U_#,N^8=l6K.6xS-?M#,JSIz4&8_#,N^S-K.Aw#,4K4&K.IOV.>|R2!#>x3bTs#,N(X=H%N^At#,Ht=;>|l63bTsV.VP#,1XR@K.2]6x13~}?~{Jw#,4K4&3bTsV.>|R2!#F=B=4&RW#,SR138_#,G0K@:sIz#,4K4&F=B=V.>|R2!#724KKD>|V.@{#,;F5[V.KyRTJ$KD5[R2!#72>|:C8_6x6qOB#,9sQt6x<zRu#,QxIz6x4&J5#,>|N^0Y<2#,JGN=1XJ$!#GpAj5L7@#,1X4&FdQt6xSR13V.#,4K1xV.@{#,5XV.VzR2!#IOSjK.AwVA#,S{IfU_#,4}Fd6(R2!#725XSP>x='!"Ll>.!"Ll@N!"LlB^!"LlO]!"LlO6#,1XX=H%V.#,Np=|R2!#NaT6V.#,5P=|V.#;NaS-V.#,5P13V.!#>|ETSPOUWh!"dj>.!"]s]g!"P!AV!"~}??~{U_#,1X=w82KwV.#,4K7|~}?~{V.Ky4&R2!#5P=|6x>2U_#,JQFdOUR2#;T66xLtU=U_#,S{HKV.=xR2#;FdKy>SRWU_#,@{R2#;~}?~{Jw6/U_#,@4R2#;~}?~{2]6`UOU_#,RIR2#;DqFpU_#,7|R2#;J^:'U_#,82R2#;3>8_6xHqU_#,35@4R2#;106x9cU_#,M=@4R2#;I"6xLu4oU_#,iT~}?~{R2#;IY6xMy@4U_#,S*>|R2#;4G106x18U_#,=xR2#;4GG?6x=xG}U_#,MKR2#;Ga35OH3v>SFd2`U_#,3BR2#;N^T<6xGk:MU_#,D1R2#;1<W_6x3B1xU_#,FZR2#;0k=x0kMKU_#,SUR2#;UH6xA"U_#,<"R2#;<36xOHR{U_#,?JR2#;<{@{6x2;=xU_#,@MR2#;Dq</U_#,PiR2#;R9:tU_#,?VR2#;>|HEU_#,=+2;VXR2#;l:Fl6/U_#,BRR2#;@tE-U_#,>kR2#;I1BmHbJ3U_#,>|N^A8R2#;P|~}?~{2;75FdIaU_#,Gn?\R2#;W;W;tbtb#,PlSkHKQTU_#,J'~}?~{R2#;J}IMU_#,>=R2#;J}7#U_#,@'R2#;OH1)6x:sN7Fd~}?~{U_#,2;>+V.VAR2#;@4N/P;U_#,S{P]O"R2!#1xE-6xO`S-#,>C6x2;:O#,SV2;O`H%#,1X=w2lV.!#1x7G9sRf6`R2#,N)N^Nd=x#,WcRT2"A&AO5PH!HK6xRQ!#7rN)N^BG6xRW5PU_#,1XG\l6HK!#WdN4GW6x7#V.#,Tr2;7~#,2;7~TrDQSC!#WdRQGW8=6x7#2;PP#,Tr2;?ISC!#9J:OV.RTND#,FkV.RTNd#,JGN=1XH!!#AnKXPPRT=LFdCq#,TrCq7~#;AnKX2;PPRT=LFdCq#,TrCq2;7~!#AnKXPPU_#,Sk~}?~{O`5CR2!#~} + +~{5XPN5ZJ.~} + +~{KoWST;#:5XPNSPM(U_!"SP~}?~{U_!"SPV'U_!"SP0/U_!"SPOUU_!"SPT6U_!#NR?IRTMy#,1K?IRT@4#,T;M(!#M(PNU_#,OH>S8_Qt#,@{A85@#,RTU=Tr@{!#?IRTMy#,DQRT75#,T;~}?~{!#~}?~{PNU_#,5PN^18#,3v6xJ$V.#,5PHtSP18#,3v6x2;J$#,DQRT75#,2;@{!#NR3v6x2;@{#,1K3v6x2;@{#,T;V'!#V'PNU_#,5PKd@{NR#,NRN^3vR2#,R}6xH%V.#,An5P0k3v6x;wV.@{!#0/PNU_#,NROH>SV.#,1XS/V.RT4}5P!#Ht5POH>SV.#,S/6xNp4S#,2;S/6x4SV.!#OUPNU_#,NROH>SV.#,1X>S8_QtRT4}5P#;Ht5POH>SV.#,R}6xH%V.#,Np4SR2!#T6PNU_#,JF>yDQRTLtU=#,U=6x2;@{!#724KAyU_#,5XV.5@R2#,=+V.VAHN#,2;?I2;2lR2!#721xSPW_U_!"SP3[U_!"SPO]U_!"SP1@U_!"SPBRU_!"SP11U_!#724KAyU_#,7GLl5XV.TV#,=+V.9}R2!#7rJF>y#,RTR;;wJ.#,T;W_#;WdG?@tHu#,T;3[#;@tG?WdHu#,T;O]#;4s@tE-6x2;7~#,Sv5P~}?~{6xWTU=#,=+2;V*FdD\#,T;1@#;=+Hu2;QO#,=L5@2;Cw#,@tWdN^3##,3B1xW]:a#,T;BR#;=+2;D\AO5P#,RTIY:O~}?~{#,RTHu;wG?#,1xN^Q!7f#,T;11!#724KAyU_#,0\V.5@R2#,=+V.VAHN#,2;?I2;2lR2!#7r5XPNU_#,1xV.VzR2!#AO5PVFJ$#,<FOU0/T6=|#,IO=+V.5@R2!#V*4K6xSCU=U_1XJ$#,2;V*4K6xSCU=U_1X0\!#9JU=5@1XJ$#,VwT;N^U=#,1XU=?IR2#;U=5@2;J$#,VwT;1XU=#,N^U=?IR2!#9J=x2;GsC{#,MK2;1\Wo#,N(CqJG1##,6x@{l6Vw#,9zV.1&R2!#JSWdHgS$6y#,9J?IRTSkV.80InO*#;JSWdHg0.WS#,9J?ISkV.>cK@!#:q6x2;D\J9#,0.6x2;D\An#,BR6x2;D\VN#,F)Ht=>WS#,2;?ISCR2!#V*NaWdV.?IRT;w#,6x2;V*5PV.2;?I;w#,J$V.0kR2#;V*5PV.?I;w#,6x2;V*NaWdV.2;?IRT;w#,J$V.0kR2#;V*5PV.?I;w#,V*NaWdV.?IRT;w#,6x2;V*5XPNV.2;?IRTU=#,J$V.0kR2!#9JV*1xU_#,6/6x2;CT#,>Y6x2;Gn!#9JT;#:V*1KV*<:#,J$DK2;4y#;V*LlV*5X#,J$DK?IH+!#~} + +~{>E5X5ZJ.R;~} + +~{KoWST;#:SC1xV.7(#,SPI"5X#,SPGa5X#,SPUy5X#,SP=;5X#,SPai5X#,SPVX5X#,SP7:5X#,SPN'5X#,SPK@5X!#Vn:nWTU=Fd5XU_#,~}?~{I"5X#;HkHKV.5X2;InU_#,~}?~{Ga5X#;NR5CR`@{#,1K5CR`@{U_#,~}?~{Uy5X#;NR?IRTMy#,1K?IRT@4U_#,~}?~{=;5X#;Vn:nV.5XH}Jt#,OHVA6x5CLlOB~}?~{U_#,~}?~{ai5X#;HkHKV.5XIn#,133GRX6`U_#,~}?~{VX5X#;I=AV!"OUWh!">ZTs#,72DQPPV.5@U_#,~}?~{7:5X#;KySIHkU_0/#,Ky4S9iU_SX#,1K9Q?IRT;wNaV.~}?~{U_#,~}?~{N'5X#;<2U=Tr4f#,2;<2U=TrMvU_#,~}?~{K@5X!#JG9JI"5XTrN^U=#,Ga5XTrN^V9#,Uy5XTrN^9%#,=;5XTrN^>x#,ai5XTr:O=;#,VX5XTrBS#,7:5XTrPP#,N'5XTrD1#,K@5XTrU=!#9EV.IFSC1xU_#,D\J95PHKG0:s2;O`<0#,~}?~{9Q2;O`JQ#,9s<z2;O`>H#,IOOB2;O`JU#,Wd@k6x2;</#,1x:O6x2;Fk!#:Ol6@{6x6/#,2;:Ol6@{6xV9!#8RNJ5P~}?~{6xU{=+@4#,4}V.Ht:NT;#:OH6aFdKy0.TrL}RS!#1xV.GiVwKY#,3KHKV.2;<0!#SI2;S]V.5@#,9%FdKy2;=dR2!#72~}?~{?MV.5@#,InHkTrW(!#VwHK2;?K#,BSl6HDR0#,H}>|WcJ3!#=wQx6xNp@M#,2"Fx;}A&#,TK1x<FD1#,~}?~{2;?I2b!#M6V.N^KyMy#,K@GR2;11!#K@QI2;5C#,J?HK>!A&!#1xJ?IuO]Tr2;>e#,N^KyMyTr9L#,InHkTr>P#,2;5CRQTr67!#JG9JFd1x2;P^6x=d#,2;Gs6x5C#,2;T<6xGW#,2;An6xPE#,={OiH%RI#,VAK@N^KyV.!#NaJ?N^~}?~{2F#,7G6q;uR2#;N^~}?~{C|#,7G6qJYR2!#An7"V.HU#,J?WdWxU_LiU4=s#,YHNTU_Li=;RC#,M6V.N^KyMy#,Vn!"~}?~{V.SBR2!#9JIFSC1xU_#,F)HgBJH;!#BJH;U_#,3#I=V.I_R2!#;wFdJWTrN2VA#,;wFdN2TrJWVA#,;wFdVPTrJWN2>cVA!#8RNJ1x?IJ9HgBJH;:u#?T;?I!#7rNbHKSkT=HKO`6qR2#,51FdM,V[6x<C6xSv7g#,FdO`>HR2HgWsSRJV!#JG9J7=BmBqBV#,N4WcJQR2#;FkSBHgR;#,U~V.5@R2#;8UHa=T5C#,5XV.@mR2!#9JIFSC1xU_#,P/JVHtJ9R;HK#,2;5CRQR2!#=+>|V.JB#,>2RTSD#,U}RTVN#,D\S^J?WdV.6zD?#,J9V.N^V*#;RWFdJB#,8oFdD1#,J9HKN^J6#;RWFd>S#,SXFdM>#,J9Cq2;5CBG!#K'SkV.FZ#,Hg5G8_6xH%FdL]#;K'SkV.InHkVn:nV.5X#,6x7"Fd;z!#HtG}H:Qr#,G}6xMy#,G}6x@4#,D*V*KyV.!#>[H}>|V.~}?~{#,M6V.l6OU#,4KN==+>|V.JBR2!#>E5XV.1d#,G|IlV.A&#,HKGiV.@m#,2;?I2;2lR2!#72~}?~{?MV.5@#,InTrW(#,G3TrI"!#H%9zT=>36xJ&U_#,>x5XR2#;KD39U_#,ai5XR2#;HkInU_#,VX5XR2#;HkG3U_#,Ga5XR2#;139LG00/U_#,N'5XR2#;N^KyMyU_#,K@5XR2!#JG9JI"5XNa=+R;FdV>#,Ga5XNa=+J9V.Jt#,Uy5XNa=+GwFd:s#,=;5XNa=+=wFdJX#,=;5XNa=+9LFd=a#,ai5XNa=+=wFdJQ#,VX5XNa=+<LFdJ3#,7:5XNa=+=xFdM>#,N'5XNa=+H{Fd~}?~{#,K@5XNa=+J>V.RT2;;n!#9J1xV.Gi#:N'TrSy#,2;5CRQTr67#,9}Tr4S!#JG9J2;V*Vn:nV.D1U_#,2;D\T$=;#;2;V*I=AV!"OUWh!">ZTsV.PNU_#,2;D\PP>|#;2;SCOg5<#,2;D\5C5X@{!#KDNeU_#,R;2;V*#,7G0TMuV.1xR2!#7r0TMuV.1x#,7%4s9z#,TrFd~}?~{2;5C>[#;M~<Sl65P#,TrFd=;2;5C:O!#JG9J2;UyLlOBV.=;#,2;QxLlOBV.H(#,PE<:V.K=#,M~<Sl65P#,TrFd3G?I0N#,Fd9z?IcD!#J)N^7(V.IM#,P|N^U~V.An!#78H}>|V.~}?~{#,HtJ9R;HK!#78V.RTJB#,Np8fRTQT#;78V.RT:&#,Np8fRT@{!#M6V.Mv5XH;:s4f#,O]V.K@5XH;:sIz!#7r~}?~{O]l6:&#,H;:sD\~}?~{J$0\!#9J~}?~{1xV.JB#,TZK3Oj5PV.Rb#,2"5PR;Or#,G'@oI1=+#,JGN=GID\3IJB!#JG9JU~>YV.HU#,RD9XU[7{#,N^M(FdJ9#,@wl6@HCmV.IO#,RTVoFdJB!#5PHK?*~}?~{#,1XX=HkV.#,OHFdKy0.#,N"SkV.FZ#,<yD+Kf5P#,RT>vU=JB!#JG9JJ<Hg4&E.#,5PHK?*;'#;:sHgMQMC#,5P2;<0>\!#~} + +~{;p9%5ZJ.6~~} + +~{KoWST;#:72;p9%SPNe#:R;T;;pHK#,6~T;;p;}#,H}T;;p~}?~{#,KDT;;p?b#,NeT;;p6S!#PP;p1XSPRr#,Rr1XKX>_!#7";pSPJ1#,Fp;pSPHU!#J1U_#,LlV.ToR2!#HUU_#,TBTZ;~!"1Z!"Rm!"~}?~{R2!#724KKDK^U_#,7gFpV.HUR2!#72;p9%#,1XRrNe;pV.1d6xS&V.#:;p7"l6DZ#,TrTgS&V.l6Mb#;;p7"6xFd1x>2U_#,4}6xNp9%#,<+Fd;pA&#,?I4S6x4SV.#,2;?I4STrIO!#;p?I7"l6Mb#,N^4}l6DZ#,RTJ17"V.#,;p7"IO7g#,N^9%OB7g#,Vg7g>C#,R97gV9!#72>|1XV*Ne;pV.1d#,RTJ}JXV.!#9JRT;pWt9%U_Cw#,RTK.Wt9%U_G?!#K.?IRT>x#,2;?IRT6a!#7rU=J$9%H!6x2;6hFd9&U_PW#,C|T;!07QAt!1!#9JT;#:CwVwBGV.#,A<=+6hV.#,7G@{2;6/#,7G5C2;SC#,7GN#2;U=!#Vw2;?IRTE-6xPKJ&#,=+2;?IRT~}?~{6x9%U=!#:Ol6@{6x6/#,2;:Ol6@{6xIO!#E-?IRT84O2#,~}?~{?IRT84K5#,Mv9z2;?IRT844f#,K@U_2;?IRT84Iz!#9JCwVwIwV.#,A<=+>/V.!#4K029zH+>|V.5@R2!#~} + +~{SC<d5ZJ.H}~} + +~{KoWST;#:~} ~{72PKJ&J.Mr#,3vUwG'@o#,0YPUV.7Q#,9+<RV.7n#,HU7QG'=p#,DZMbI'6/#,5!l65@B7#,2;5C2YJBU_#,F_J.Mr<R!#O`JXJ}Dj#,RTUyR;HUV.J$#,6x0.>tB;0Y=p#,2;V*5PV.GiU_#,2;HJV.VAR2#,7GCqV.=+R2#,7GVwV.WtR2#,7GJ$V.VwR2!#9JCw>}OM=+KyRT6/6xJ$HK#,3I9&3vl6~}?~{U_#,OHV*R2!#OHV*U_#,2;?IH!l69mIq#,2;?IOsl6JB#,2;?IQil66H#,1XH!l6HK#,V*5PV.GiU_R2!#9JSC<dSPNe#:SPRr<d#,SPDZ<d#,SP74<d#,SPK@<d#,SPIz<d!#Ne<d>cFp#,D*V*Fd5@#,JGN=Iq<M#,HK>}V.1&R2!#Og<dU_#,RrFdOgHK6xSCV.#;DZ<dU_#,RrFd9YHK6xSCV.#;74<dU_#,RrFd5P<d6xSCV.#;K@<dU_#,~}??~{JBl6Mb#,AnNaNEV*V.6x4+l65P<dR2#;Iz<dU_#,741(R2!#9JH}>|V.JB#,D*GWl6<d#,IMD*:ql6<d#,JBD*C\l6<d#,7GJ%OM2;D\SC<d#,7GHJRe2;D\J9<d#,7GN"Cn2;D\5C<dV.J5!#N"TUN"TU#!N^Ky2;SC<dR2!#<dJBN47"6xOHNEU_#,<dSkKy8fU_<fK@!#72>|V.KyS{;w#,3GV.KyS{9%#,HKV.KyS{I1#,1XOHV*FdJX=+!"WsSR!"~}?~{U_!"CEU_!"IaHKV.PUC{#,AnNa<d1XKwV*V.!#5P<dV.@4<dNRU_#,Rr6x@{V.#,5<6xIaV.#,9J74<d?I5C6xSCR2#;RrJG6xV*V.#,9JOg<d!"DZ<d?I5C6xJ9R2#;RrJG6xV*V.#,9JK@<d~}??~{JB#,?IJ98f5P#;RrJG6xV*V.#,9JIz<d?IJ9HgFZ!#Ne<dV.JB#,Vw1XV*V.#,V*V.1XTZl674<d#,9J74<d2;?I2;:qR2!#NtRsV.PKR2#,RAV?TZOD#;V\V.PKR2#,B@Q@TZRs!#9JCw>}OM=+#,D\RTIOVG~}?~{<dU_#,1X3I4s9&!#4K1xV.R*#,H}>|V.KyJQ6x6/R2!#~} diff --git a/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-utf-8.txt b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-utf-8.txt new file mode 100644 index 0000000..e15fe5c --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-utf-8.txt @@ -0,0 +1,107 @@ +This file was derived from +http://www.gutenberg.org/files/23864/23864-0.txt +after converting from Traditional Chinese to Simplified Chinese. +-------- +始计第一 + +孙子曰:兵者,国之大事,死生之地,存亡之道,不可不察也。 + +故经之以五事,校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五曰法。 + +道者,令民与上同意,可与之死,可与之生,而不畏危也;天者,阴阳、寒暑、时制也;地者,远近、险易、广狭、死生也;将者,智、信、仁、勇、严也;法者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知者不胜。 + +故校之以计,而索其情,曰:主孰有道?将孰有能?天地孰得?法令孰行?兵?孰强?士卒孰练?赏罚孰明?吾以此知胜负矣。 + +将听吾计,用之必胜,留之;将不听吾计,用之必败,去之。 + +计利以听,乃?之势,以佐其外。势者,因利而制权也。 + +兵者,诡道也。故能而示之不能,用而示之不用,近而示之远,远而示之近。利而诱之,乱而取之,实而备之,强而避之,怒而挠之,卑而骄之,佚而劳之,亲而离之,攻其无备,出其不意。此兵家之胜,不可先传也。 + +夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜,少算不胜,而况无算乎!吾以此观之,胜负见矣。 + +作战第二 + +孙子曰:凡用兵之法,驰车千?,革车千乘,带甲十万,千里馈粮。则内外之费,宾客之用,胶漆之材,车甲之奉,日费千金,然后十万之师举矣。 + +其用战也,贵胜,久则钝兵挫锐,攻城则力屈,久暴师则国用不足。夫钝兵挫锐,屈力?货,则诸侯乘其弊而起,虽有智者,不能善其后矣。故兵闻拙速,未睹巧之久也。夫兵久而国利者,未之有也。故不尽知用兵之害者,则不能尽知用兵之利也。 + +善用兵者,役不再籍,粮不三载,取用於国,因粮於敌,故军食可足也。国之贫於师者远输,远输则百姓贫;近於师者贵卖,贵卖则百姓竭,财竭则急於丘役。力屈财?,中原内虚於家,百姓之费,十去其七;公家之费,破军罢马,甲胄矢弩,戟?矛?,丘牛大车,十去其六。 + +故智将务食於敌,食敌一钟,当吾二十钟;萁秆一石,当吾二十石。故杀敌者,怒也;取敌之利者,货也。故车战,得车十乘以上,赏其先得者,而更其旌旗。车杂而乘之,卒善而养之,是谓胜敌而益强。 + +故兵贵胜,不贵久。故知兵之将,民之司命。国家安危之主也。 + +谋攻第三 + +孙子曰:凡用兵之法,全国?上,破国次之;全军?上,破军次之;全旅?上,破旅次之;全卒?上,破卒次之;全伍?上,破伍次之。是故百战百胜,非善之善者也;不战而屈人之兵,善之善者也。 + +故上兵伐谋,其次伐交,其次伐兵,其下攻城。攻城之法,?不得已。修???,具器械,三月而后成;距?,又三月而后已。将不胜其忿,而蚁附之,杀士三分之一,而城不拔者,此攻之灾也。 + +故善用兵者,屈人之兵,而非战也,拔人之城而非攻也,毁人之国而非久也,必以全争於天下,故兵不顿而利可全,此谋攻之法也。 + +故用兵之法,十则围之,五则攻之,倍则分之,敌则能战之,少则能逃之,不若则能避之。故小敌之坚,大敌之擒也。 + +夫将者,国之辅也。辅周则国必强,辅隙则国必弱。故君之所以患於军者三:不知军之不可以进而谓之进,不知军之不可以退而谓之退,是谓縻军;不知三军之事,而同三军之政,则军士惑矣;不知三军之权,而同三军之任,则军士疑矣。三军既惑且疑,则诸侯之难至矣。是谓乱军引胜。 + +故知胜有五:知可以战与不可以战者,胜。识?寡之用者,胜。上下同欲者,胜。以虞待不虞者,胜。将能而君不御者,胜。此五者,知胜之道也。 + +故曰:知己知彼,百战不?;不知彼而知己,一胜一负;不知彼不知己,每战必败。 + +军形第四 + +孙子曰:昔之善战者,先?不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能?不可胜,不能使敌必可胜。故曰:胜可知,而不可?。 + +不可胜者,守也;可胜者,攻也。守则不足,攻则有?。善守者,藏於九地之下,善攻者,动於九天之上,故能自保而全胜也。 + +见胜不过?人之所知,非善之善者也;战胜而天下曰善,非善之善者也。故举秋毫不?多力,见日月不?明目,闻雷霆不?聪耳。古之善战者,胜於易胜者也。故善战者之胜也,无智名,无勇功,故其战胜不忒。不忒者,其所措必胜,胜已败者也。故善战者,先立於不败之地,而不失敌之败也。是故胜兵先胜,而后求战,败兵先战而后求胜。善用兵者,修道而保法,故能?胜败之政。 + +兵法:一曰度,二曰量,三曰数,四曰称,五曰胜。地生度,度生量,量生数,数生称,称生胜。故胜兵若以?称?,败兵若以?称?。胜者之战,若决积水於千仞之?者,形也。 + +兵势第五 + +孙子曰:凡治?如治寡,分数是也;斗?如斗寡,形名是也;三军之?,可使必受敌而无败者,奇正是也;兵之所加,如以?投卵者,虚实是也。 + +凡战者,以正合,以奇胜。故善出奇者,无穷如天地,不竭如江海。终而复始,日月是也。死而?生,四时是也。声不过五,五声之变,不可胜听也;色不过五,五色之变,不可胜观也;味不过五,五味之变,不可胜尝也;战势,不过奇正,奇正之变,不可胜穷也。奇正相生,如循环之无端,熟能穷之哉? + +激水之疾,至於漂石者,势也;?鸟之疾,至於毁折者,节也。是故善战者,其势险,其节短。势如张弩,节如发机。 + +纷纷??,斗乱而不可乱也;浑浑沌沌,形圆而不可败也。乱生於治,怯生於勇,弱生於强。治乱,数也;勇怯,势也;强弱,形也。故善动敌者,形之,敌必从之;予之,敌必取之。以利动之,以卒待之。 + +故善战者,求之於势,不责於人;故能择人而任势。任势者,其战人也,如转木石。木石之性,安则静,危则动,方则止,圆则行。故善战人之势,如转圆石於千仞之山者,势也。 + +虚实第六 + +孙子曰:凡先处战地而待敌者佚,后处战地而趋战者劳。 + +故善战者,致人而不致於人。能使敌人自至者,利之也;能使敌人不得至者,害之也。故敌佚能劳之,饱能饥之,安能动之。出其所必趋,趋其所不意。行千里而不劳者,行於无人之地也;攻而必取者,攻其所不守也。守而必固者,守其所不攻也。 + +故善攻者,敌不知其所守;善守者,敌不知其所攻。微乎微乎,至於无形;神乎神乎,至於无声,故能?敌之司命。进而不可御者,冲其虚也;退而不可追者,速而不可及也。故我欲战,敌虽高垒深沟,不得不与我战者,攻其所必救也;我不欲战,虽画地而守之,敌不得与我战者,乖其所之也。故形人而我无形,则我专而敌分。我专?一,敌分?十,是以十攻其一也。则我?敌寡,能以?击寡者,则吾之所与战者约矣。吾所与战之地不可知,不可知则敌所备者多,敌所备者多,则吾所与战者寡矣。故备前则后寡,备后则前寡,备左则右寡,备右则左寡,无所不备,则无所不寡。寡者,备人者也;?者,使人备己者也。故知战之地,知战之日,则可千里而会战;不知战之地,不知战日,则左不能救右,右不能救左,前不能救后,后不能救前,而况远者数十里,近者数里乎!以吾度之,越人之兵虽多,亦奚益於胜哉!故曰:胜可?也。敌虽?,可使无斗。故策之而知得失之计,候之而知动静之理,形之而知死生之地,角之而知有?不足之处。故形兵之极,至於无形。无形则深间不能窥,智者不能谋。因形而措胜於?,?不能知。人皆知我所以胜之形,而莫知吾所以制胜之形。故其战胜不?,而应形於无穷。夫兵形象水,水之行避高而趋下,兵之形避实而击虚;水因地而制流,兵因敌而制胜。故兵无常势,水无常形。能因敌变化而取胜者,谓之神。故五行无常胜,四时无常位,日有短长,月有死生。 + +军争第七 + +孙子曰: 凡用兵之法,将受命於君,合军聚?,交和而舍,莫难於军争。军争之难者,以迂?直,以患?利。故迂其途,而诱之以利,后人发,先人至,此知迂直之计者也。军争?利,军争?危。举军而争利则不及,委军而争利则?重捐。是故?甲而趋,日夜不处,倍道兼行,百?而争利,则擒三将军,劲者先,疲者后,其法十一而至;五十里而争利,则蹶上将军,其法半至;三十里而争利,则三分之二至。是故军无?重则亡,无粮食则亡,无委积则亡。故不知诸侯之谋者,不能豫交;不知山林、险阻、沮泽之形者,不能行军;不用乡导者,不能得地利。故兵以诈立,以利动,以分和?变者也。故其疾如风,其徐如林,侵掠如火,不动如山,难知如阴,动如雷震。掠乡分?,廓地分利,悬权而动。先知迂直之计者胜,此军争之法也。《军政》曰:“言不相闻,故?之金鼓;视不相见,故?之旌旗。”夫金鼓旌旗者,所以一民之耳目也。民既专一,则勇者不得独进,怯者不得独退,此用?之法也。故夜战多金鼓,昼战多旌旗,所以变人之耳目也。三军可夺气,将军可夺心。是故朝气锐,昼气惰,暮气归。善用兵者,避其锐气,击其惰归,此治气者也。以治待乱,以静待哗,此治心者也。以近待远,以佚待劳,以饱待饥,此治力者也。无邀正正之旗,无击堂堂之陈,此治变者也。故用兵之法,高陵勿向,背丘勿逆,佯北勿从,锐卒勿攻,饵兵勿食,归师勿遏,围师遗?,穷寇勿迫,此用兵之法也。 + +九变第八 + +孙子曰: 凡用兵之法,将受命於君,合军聚合。泛地无舍,衢地合交,绝地无留,围地则谋,死地则战,途有所不由,军有所不击,城有所不攻,地有所不争,君命有所不受。故将通於九变之利者,知用兵矣;将不通九变之利,虽知地形,不能得地之利矣;治兵不知九变之术,虽知五利,不能得人之用矣。是故智者之虑,必杂於利害,杂於利而务可信也,杂於害而患可解也。是故屈诸侯者以害,役诸侯者以业,趋诸侯者以利。故用兵之法,无恃其不来,恃吾有以待之;无恃其不攻,恃吾有所不可攻也。故将有五危,必死可杀,必生可虏,忿速可侮,廉洁可辱,爱民可烦。凡此五者,将之过也,用兵之灾也。覆军杀将,必以五危,不可不察也。 + +行军第九 + +孙子曰:凡处军相敌,绝山依?,视生处高,战隆无登,此处山之军也。绝水必远水,客绝水而来,勿迎之於水内,令半渡而击之利,欲战者,无附於水而迎客,视生处高,无迎水流,此处水上之军也。绝斥泽,唯亟去无留,若交军於斥泽之中,必依水草而背?树,此处斥泽之军也。平陆处易,右背高,前死后生,此处平陆之军也。凡此四军之利,黄帝之所以胜四帝也。凡军好高而恶下,贵阳而贱阴,养生而处实,军无百疾,是谓必胜。丘陵堤防,必处其阳而右背之,此兵之利,地之助也。上雨水流至,欲涉者,待其定也。凡地有绝涧、天井、天牢、天罗、天陷、天隙,必亟去之,勿近也。吾远之,敌近之;吾迎之,敌背之。军旁有险阻、潢井、蒹葭、小林、??者,必谨覆索之,此伏?之所处也。敌近而静者,恃其险也;远而挑战者,欲人之进也;其所居易者,利也;?树动者,来也;?草多障者,疑也;鸟起者,伏也;兽骇者,覆也;尘高而锐者,车来也;卑而广者,徒来也;散而条达者,樵?也;少而往来者,营军也;辞卑而备者,进也;辞强而进驱者,退也;轻车先出居其侧者,陈也;无约而请和者,谋也;奔走而陈兵者,期也;半进半退者,诱也;杖而立者,饥也;汲而先饮者,渴也;见利而不进者,劳也;鸟集者,虚也;夜呼者,恐也;军扰者,将不重也;旌旗动者,乱也;吏怒者,倦也;杀马肉食者,军无粮也;悬?不返其舍者,穷寇也;谆谆翕翕,徐与人言者,失?也;数赏者,窘也;数罚者,困也;先暴而后畏其?者,不精之至也;来委谢者,欲休息也。兵怒而相迎,久而不合,又不相去,必谨察之。兵非贵益多也,惟无武进,足以并力料敌取人而已。夫惟无虑而易敌者,必擒於人。卒未亲而罚之,则不服,不服则难用。卒已亲附而罚不行,则不可用。故合之以文,齐之以武,是谓必取。令素行以教其民,则民服;令素不行以教其民,则民不服。令素行者,与?相得也。 + +地形第十 + +孙子曰:地形有通者、有?者、有支者、有隘者、有险者、有远者。我可以往,彼可以来,曰通。通形者,先居高阳,利粮道,以战则利。可以往,难以返,曰?。?形者,敌无备,出而胜之,敌若有备,出而不胜,难以返,不利。我出而不利,彼出而不利,曰支。支形者,敌虽利我,我无出也,引而去之,令敌半出而击之利。隘形者,我先居之,必盈之以待敌。若敌先居之,盈而勿从,不盈而从之。险形者,我先居之,必居高阳以待敌;若敌先居之,引而去之,勿从也。远形者,势均难以挑战,战而不利。凡此六者,地之道也,将之至任,不可不察也。凡兵有走者、有驰者、有陷者、有崩者、有乱者、有北者。凡此六者,非天地之灾,将之过也。夫势均,以一击十,曰走;卒强吏弱,曰驰;吏强卒弱,曰陷;大吏怒而不服,遇敌?而自战,将不知其能,曰崩;将弱不严,教道不明,吏卒无常,陈兵纵横,曰乱;将不能料敌,以少合?,以弱击强,兵无选锋,曰北。凡此六者,败之道也,将之至任,不可不察也。夫地形者,兵之助也。料敌制胜,计险隘远近,上将之道也。知此而用战者必胜,不知此而用战者必败。故战道必胜,主曰无战,必战可也;战道不胜,主曰必战,无战可也。故进不求名,退不避罪,唯民是保,而利於主,国之宝也。视卒如婴儿,故可以与之赴深溪;视卒如爱子,故可与之俱死。厚而不能使,爱而不能令,乱而不能治,譬若骄子,不可用也。知吾卒之可以击,而不知敌之不可击,胜之半也;知敌之可击,而不知吾卒之不可以击,胜之半也;知敌之可击,知吾卒之可以击,而不知地形之不可以战,胜之半也。故知兵者,动而不迷,举而不穷。故曰:知彼知己,胜乃不殆;知天知地,胜乃可全。 + +九地第十一 + +孙子曰:用兵之法,有散地,有轻地,有争地,有交地,有衢地,有重地,有泛地,有围地,有死地。诸侯自战其地者,?散地;入人之地不深者,?轻地;我得亦利,彼得亦利者,?争地;我可以往,彼可以来者,?交地;诸侯之地三属,先至而得天下?者,?衢地;入人之地深,背城邑多者,?重地;山林、险阻、沮泽,凡难行之道者,?泛地;所由入者隘,所从归者迂,彼寡可以击吾之?者,?围地;疾战则存,不疾战则亡者,?死地。是故散地则无战,轻地则无止,争地则无攻,交地则无绝,衢地则合交,重地则掠,泛地则行,围地则谋,死地则战。古之善用兵者,能使敌人前后不相及,?寡不相恃,贵贱不相救,上下不相收,卒离而不集,兵合而不齐。合於利而动,不合於利而止。敢问敌?而整将来,待之若何曰:先夺其所爱则听矣。兵之情主速,乘人之不及。由不虞之道,攻其所不戒也。凡?客之道,深入则专。主人不克,掠於饶野,三军足食。谨养而勿劳,并气积力,运兵计谋,?不可测。投之无所往,死且不北。死焉不得,士人尽力。兵士甚陷则不惧,无所往则固,深入则拘,不得已则斗。是故其兵不修而戒,不求而得,不约而亲,不令而信,禁祥去疑,至死无所之。吾士无?财,非恶货也;无?命,非恶寿也。令发之日,士卒坐者涕沾襟,偃卧者涕交颐,投之无所往,诸、?之勇也。故善用兵者,譬如率然。率然者,常山之蛇也。击其首则尾至,击其尾则首至,击其中则首尾俱至。敢问兵可使如率然乎?曰可。夫吴人与越人相恶也,当其同舟而济而遇风,其相救也如左右手。是故方马埋轮,未足恃也;齐勇如一,政之道也;刚柔皆得,地之理也。故善用兵者,携手若使一人,不得已也。将军之事,静以幽,正以治,能愚士卒之耳目,使之无知;易其事,革其谋,使人无识;易其居,迂其途,使民不得虑。帅与之期,如登高而去其梯;帅与之深入诸侯之地,而发其机。若驱群羊,驱而往,驱而来,莫知所之。聚三军之?,投之於险,此谓将军之事也。九地之变,屈伸之力,人情之理,不可不察也。凡?客之道,深则专,浅则散。去国越境而师者,绝地也;四彻者,衢地也;入深者,重地也;入浅者,轻地也;背固前隘者,围地也;无所往者,死地也。是故散地吾将一其志,轻地吾将使之属,争地吾将趋其后,交地吾将谨其守,交地吾将固其结,衢地吾将谨其恃,重地吾将继其食,泛地吾将进其途,围地吾将塞其?,死地吾将示之以不活。故兵之情:围则御,不得已则斗,过则从。是故不知诸侯之谋者,不能预交;不知山林、险阻、沮泽之形者,不能行军;不用乡导,不能得地利。四五者,一不知,非霸王之兵也。夫霸王之兵,伐大国,则其?不得聚;威加於敌,则其交不得合。是故不争天下之交,不养天下之权,信己之私,威加於敌,则其城可拔,其国可隳。施无法之赏,悬无政之令。犯三军之?,若使一人。犯之以事,勿告以言;犯之以害,勿告以利。投之亡地然后存,陷之死地然后生。夫?陷於害,然后能?胜败。故?兵之事,在顺详敌之意,并敌一向,千里杀将,是谓巧能成事。是故政举之日,夷关折符,无通其使,厉於廊庙之上,以诛其事。敌人开?,必亟入之,先其所爱,微与之期,践墨随敌,以决战事。是故始如处女,敌人开户;后如脱兔,敌不及拒。 + +火攻第十二 + +孙子曰:凡火攻有五:一曰火人,二曰火积,三曰火?,四曰火库,五曰火队。行火必有因,因必素具。发火有时,起火有日。时者,天之燥也。日者,月在箕、壁、翼、?也。凡此四宿者,风起之日也。凡火攻,必因五火之变而应之:火发於内,则早应之於外;火发而其兵静者,待而勿攻,极其火力,可从而从之,不可从则上。火可发於外,无待於内,以时发之,火发上风,无攻下风,昼风久,夜风止。凡军必知五火之变,以数守之。故以火佐攻者明,以水佐攻者强。水可以绝,不可以夺。夫战胜攻取而不惰其功者凶,命曰“费留”。故曰:明主虑之,良将惰之,非利不动,非得不用,非危不战。主不可以怒而兴师,将不可以?而攻战。合於利而动,不合於利而上。怒可以复喜,?可以复说,亡国不可以复存,死者不可以复生。故明主慎之,良将警之。此安国全军之道也。 + +用间第十三 + +孙子曰: 凡兴师十万,出征千里,百姓之费,公家之奉,日费千金,内外骚动,怠於道路,不得操事者,七十万家。相守数年,以争一日之胜,而爱爵禄百金,不知敌之情者,不仁之至也,非民之将也,非主之佐也,非胜之主也。故明君贤将所以动而胜人,成功出於?者,先知也。先知者,不可取於鬼神,不可象於事,不可验於度,必取於人,知敌之情者也。故用间有五:有因间,有内间,有反间,有死间,有生间。五间俱起,莫知其道,是谓神纪,人君之宝也。乡间者,因其乡人而用之;内间者,因其官人而用之;反间者,因其敌间而用之;死间者,??事於外,令吾闻知之而传於敌间也;生间者,反报也。故三军之事,莫亲於间,赏莫厚於间,事莫密於间,非圣贤不能用间,非仁义不能使间,非微妙不能得间之实。微哉微哉!无所不用间也。间事未发而先闻者,间与所告者兼死。凡军之所欲击,城之所欲攻,人之所欲杀,必先知其守将、左右、?者、门者、舍人之姓名,令吾间必索知之。敌间之来间我者,因而利之,导而舍之,故反间可得而用也;因是而知之,故乡间、内间可得而使也;因是而知之,故死间??事,可使告敌;因是而知之,故生间可使如期。五间之事,主必知之,知之必在於反间,故反间不可不厚也。昔殷之兴也,伊挚在夏;周之兴也,吕牙在殷。故明君贤将,能以上智?间者,必成大功。此兵之要,三军之所恃而动也。 diff --git a/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-gbk.txt b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-gbk.txt new file mode 100644 index 0000000..ef38e4b --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-gbk.txt @@ -0,0 +1,107 @@ +This file was derived from +http://www.gutenberg.org/files/23864/23864-0.txt +after converting from Traditional Chinese to Simplified Chinese. +-------- +ʼƵһ + +Իߣ֮£֮أ֮ɲҲ + +ʾ֮£У֮Լƣ飺һԻԻ죬ԻأԻԻ + +ߣͬ⣬֮֮ηΣҲߣʱҲߣԶסҲߣǡšʡ¡ҲߣơٵҲߣĪţ֪֮ʤ֪߲ʤ + +У֮Լƣ飬ԻеܣãУǿʿͷԴ֪ʤӡ + +ƣ֮ʤ֮ƣ֮ذܣȥ֮ + +˞֮ƣ⡣ߣȨҲ + +ߣҲܶʾ֮ܣöʾ֮ãʾ֮ԶԶʾ֮֮Ҷȡ֮ʵ֮ǿ֮ŭ֮֮֮׶֮ޱ䲻⡣˱֮ʤȴҲ + +δսʤߣҲδս㲻ʤߣҲʤ㲻ʤԴ˹֮ʤӡ + +սڶ + +Իñ֮۳ǧ񆣬ﳵǧˣʮǧ֮ѣ֮ã֮ģ֮շǧȻʮ֮ʦӡ + +սҲʤ۱񣬹ñʦò㡣۱׶ߣӡʱ׾٣δ֮Ҳöߣδ֮Ҳʲ֪ñ֮ߣܾ֪ñ֮Ҳ + +ñߣ۲ټأȡ춹춵УʾʳҲ֮ƶʦԶ䣬Զƶʦ߹սߣƽۡƚԭ춼ң֮ѣʮȥߣ֮ѣƾʸꪘJìţ󳵣ʮȥ + +ǽʳ춵УʳһӣʮӣݽһʯʮʯɱߣŭҲȡ֮ߣҲʳսóʮϣȵߣ졣Ӷ֮ƶ֮νʤжǿ + +ʱʤá֪֮֮˾ҰΣ֮Ҳ + +ı + +Իñ֮ȫϣƹ֮ȫϣƾ֮ȫÞϣô֮ȫϣ֮ȫϣ֮ǹʰսʤ֮Ҳս֮֮Ҳ + +ϱıηη¹ǡ֮鲻ѡޙMݜе¶ɣ鞣¶ѡʤޣϸ֮ɱʿ֮һDzߣ˹֮Ҳ + +ñߣ֮սҲ֮ǶǹҲ֮ǾҲȫ£ʱٶȫı֮Ҳ + +ñ֮ʮΧ֮֮֮սܱ֮֮֮С֮ᣬ֮Ҳ + +ߣ֮Ҳǿ϶ʾ֮Ի춾֪֮Խν֪֮֮˶ν֮ˣν֪֮£֮ͬʿӣ֪֮Ȩ֮ͬΣʿӡȻɣ֮ӡνҾʤ + +֪ʤ壺֪ս벻սߣʤʶ֮ߣʤͬߣʤݴߣʤܶߣʤߣ֪ʤ֮Ҳ + +Ի֪֪ˣսO֪˶֪һʤһ֪˲֪ÿսذܡ + +ε + +Ի֮սߣȞ鲻ʤԴ֮ʤʤڼʤڵСսߣܞ鲻ʤʹбؿʤԻʤ֪ɞ顣 + +ʤߣҲʤߣҲ㣬Nߣ춾ŵ֮£ƹߣ춾֮ϣԱȫʤҲ + +ʤ֪֮֮ҲսʤԻƣ֮Ҳʾ²Ŀ϶֮սߣʤʤҲս֮ʤҲ¹սʤ߯߯ߣʤʤѰҲսߣ춲֮أʧ֮Ҳǹʤʤսܱսʤñߣ޵ܞʤ֮ + +һԻȣԻԻԻƣԻʤȣƣʤʤ愳㏣ܱ㏳愡ʤ֮սˮǧ֮GߣҲ + +Ƶ + +ԻαιѣҲ綷ѣҲ֮ʹܵжްߣҲ֮ӣԴVͶߣʵҲ + +սߣϣʤƳߣأ罭նʼҲʱҲ壬֮䣬ʤҲɫ壬ɫ֮䣬ʤҲζ壬ζ֮䣬ʤҲսƣ֮䣬ʤҲѭ֮޶ˣ֮գ + +ˮ֮ƯʯߣҲv֮춻ߣҲǹսߣգڶ̡󣬽緢 + +׷׼ҶҲ磬ԲɰҲΣ£ǿңҲӣҲǿҲƶߣ֮бش֮֮бȡ֮֮֮ + +սߣ֮ƣˣ˶ơߣսҲתľʯľʯ֮ԣ򾲣Σ򶯣ֹԲСս֮ƣתԲʯǧ֮ɽߣҲ + +ʵ + +Իȴսضսضս͡ + +սߣ˶ˡʹߣ֮Ҳʹ˲ߣ֮Ҳʵܼ֮֮֮ܶ⡣ǧߣ֮ҲȡߣҲضعߣҲ + +ƹߣв֪أߣв֪΢΢Σܞ֮˾ߣҲ˶׷ߣٶɼҲսòսߣؾҲҲս仭ض֮вսߣ֮Ҳ˶Σרз֡רһз֞ʮʮһҲұйѣԱߣ֮սԼӡս֮ز֪֪߶࣬߶࣬ս߹ӡʱǰѣǰѣҹѣѣѡߣҲߣʹ˱Ҳ֪ս֮أ֪ս֮գǧս֪ս֮أ֪սգܾңҲܾǰܾȺ󣬺ܾǰԶʮ֮Խ֮࣬ʤգԻʤɞҲ䱊ʹ޶ʲ֪֮ʧ֮ƣ֪֪֮֮֮֮أ֪֮N֮α֮Ρ䲻߲ܿıζʤ춱֪˽֪ʤ֮ΣĪ֪ʤ֮ΡսʤͣӦˮˮ֮бܸ߶£֮αʵ飻ˮضжʤʱ޳ƣˮ޳Ρб仯ȡʤߣν֮񡣹޳ʤʱ޳λж̳ + + + +Ի ñ֮춾Ͼ۱ͶᣬĪ춾֮ߣ؞ֱԻ;֮˷ֱ֪֮ҲΣپ򲻼ίwؾ衣ǹʒԼ׶ҹУeȣƣߺ䷨ʮһʮϽ䷨ʮ֮ǹʾwʳίʲ֪֮ıߣԥ֪ɽ֡衢֮ߣо絼ߣܵõʱթԷֺ͞Ҳ伲磬֣𣬲ɽֱ֪طȨֱ֪֮ʤ˾֮ҲԻԲţʞ֮ģӲʞ֮졣ߣһ֮ĿҲרһ߲ö߲öˣñ֮Ҳҹսģս죬Ա֮ĿҲɶɶġǹʳ裬ĺ顣ñߣ飬ҲδңԾҲԽԶͣԱҲ֮죬޻֮£αҲñ֮򣬱棬ӣ𹥣ʳʦΧʦIȣñ֮Ҳ + +űڰ + +Ի ñ֮춾ϾۺϡᣬغϽΧıս;ɣܡʽͨ춾ű֮ߣ֪ñӣͨű֪֮Σܵõ֮ӣα֪ű֪֮֮ܵӡǹ֮ǣҲ춺ɽҲǹԺҵñ֮䲻Դ֮䲻ɹҲʽΣɱ²ٿ꣬裬ɷߣ֮Ҳñ֮ҲɱΣɲҲ + +оھ + +ԻУɽYߣս¡޵ǣ˴ɽ֮ҲˮԶˮ;ˮӭ֮ˮڣɶ֮սߣ޸ˮӭͣߣӭˮ˴ˮ֮ҲΨؽȥ춳֮Уˮݶ˴֮Ҳƽ½ףұߣǰ˴ƽ½֮Ҳľ֮Ƶ֮ʤĵҲø߶£ʵްټνʤ̷شұ֮˱֮֮Ҳˮߣ䶨Ҳо쾮Ρޡݡ϶ؽȥ֮ҲԶ֮н֮ӭ֮б֮衢꾮硢С֡[Cߣؽ֮˷֮ҲнߣҲԶսߣ֮ҲߣҲߣҲݶߣҲߣҲ޺ߣҲ߶ߣҲߣͽҲɢߣԒҲٶߣӪҲDZߣҲǿߣҲᳵȳߣҲԼߣıҲ߶±ߣҲߣҲȶߣҲߣҲߣҲߣҲҹߣҲߣҲ춯ߣҲŭߣҲɱʳߣҲIߣҲ׻׻⣬ߣʧҲߣҲߣҲȱη䱊ߣ֮ҲίлߣϢҲŭӭöϣֲȥؽ֮ǹҲΩԲϵȡ˶ѡΩǶ׵ߣˡδ׶֮򲻷á׸У򲻿áʺ֮ģ֮䣬νȡԽزԽ񲻷ߣ뱊Ҳ + +εʮ + +ԻͨߡВߡ֧ߡаߡߡԶߡҿ˿ԻͨͨߣȾӸսԷԻ졣ߣޱʤ֮бʤԷҳ˳Ի֧֧ߣң޳Ҳȥ֮а֮ߣȾ֮ӯ֮ԴСȾ֮ӯӣӯ֮ߣȾ֮ؾӸԴУȾ֮ȥ֮ҲԶߣƾսսߣ֮Ҳ֮ΣɲҲߡгߡߡбߡߡбߡߣ֣֮֮ҲƾһʮԻߣǿԻۣǿԻݣŭБս֪ܣԻϣ̵޳±ݺᣬԻңϵУٺϱǿѡ棬Իߣ֮Ҳ֮ΣɲҲߣ֮ҲϵʤհԶϽ֮Ҳ֪˶ս߱ʤ֪˶ս߱ذܡսʤԻսսҲսʤԻսսҲʽ˲ΨDZ֮ҲӤʿ֮Ϫ簮ӣʿ֮ʹҶΣƩӣҲ֪֮Ի֪֮ɻʤ֮Ҳ֪֮ɻ֪֮Իʤ֮Ҳ֪֮ɻ֪֮Ի֪֮սʤ֮Ҳ֪ߣԣٶԻ֪֪ʤ˲֪֪أʤ˿ȫ + +ŵصʮһ + +Իñ֮ɢأأأнأأصأзأΧأءսߣɢأ֮زߣأҵ˵ߣأҿ˿ߣ齻أ֮±ߣأ֮ضߣصأɽ֡衢󣬷֮ߣ鷺أ߰ӹأ˹ѿԻ֮ߣΧأս棬սߣءǹɢսֹ޹޾ϽصӣУΧıս֮ñߣʹǰ༰Ѳѣȣ²գ϶롣ֹʵб֮Իȶӡ֮٣֮ɲ֮Ҳ֮ר˲ˣҰʳͣ˱ı鲻ɲ⡣Ͷ֮Ҳɲãʿ˾ʿ򲻾壬̣У򶷡ǹ޶䣬ãԼףţȥɣ֮ʿNƣǶҲNǶҲ֮գʿմ齻ãͶ֮֮ҲñߣƩȻȻߣɽ֮ҲβββʱʹȻԻɡԽҲͬ۶ö磬Ҳ֡ǹʷ֣δҲһ֮ҲԵã֮ҲñߣЯʹһˣҲ֮£ģΣʿ֮Ŀʹ֪֮£ıʹʶӣ;ʹ񲻵ǡ˧֮ڣǸ߶ȥݣ˧֮֮أȺĪ֪֮֮Ͷ֮գν֮Ҳŵ֮䣬֮֮ɲҲ֮רdzɢȥԽʦߣҲijߣҲߣصҲdzߣҲǰߣΧҲߣҲǹɢὫһ־Ὣʹ֮Ὣ󣬽ὫأὫᣬὫѣصὫʳὫ;ΧὫIὫʾ֮Բʱ֮飺Χ򶷣ӡǹʲ֪֮ıߣԤ֪ɽ֡衢֮ߣо絼ܵõߣһ֪ǰ֮Ҳ֮䱊þۣ춵У佻úϡǹʲ֮֮Ȩż֮˽춵УǿɰΣġʩ޷֮֮ͣ֮ʹһˡ֮£ԣ֮ԺͶ֮Ȼ棬֮Ȼ춺Ȼܞʤܡʞ֮£˳֮⣬һǧɱνܳ¡ǹ֮գĹ۷ͨʹ֮ϣ¡˿Hؽ֮΢֮ڣīУԾս¡ǹʼ紦Ů˿ãвܡ + +𹥵ʮ + +Ի壺һԻˣԻԻwԻ⣬Իӡлؾߡʱաʱߣ֮ҲߣڻڡFҲߣ֮Ҳ𹥣֮Ӧ֮ڣӦ֮⣻𷢶ߣ𹥣ɴӶ֮ɴϡɷ⣬޴ڣʱ֮Ϸ磬޹·磬ãҹֹ֪֮䣬֮ԻˮǿˮԾԶᡣսʤȡ书ףԻԻ֮֮ǵòãΣսŭʦԑCսϡŭԸϲCԸ˵Ը棬߲Ը֮֮˰ȫ֮Ҳ + +üʮ + +Ի ʦʮ򣬳ǧ֮ѣ֮շǧɧ춵·òߣʮҡ꣬һ֮ʤ»ٽ𣬲֪֮ߣ֮Ҳ֮Ҳ֮Ҳʤ֮ҲͽԶʤˣɹ춱ߣ֪Ҳ֪ߣȡ춹񣬲£춶ȣȡˣ֪֮Ҳü壺䣬ڼ䣬з䣬䣬䡣Ī֪νͣ˾֮Ҳߣ˶֮ڼߣ˶֮ߣм֮ߣN⣬֪֮춵мҲߣҲ֮£Ī춼䣬Ī춼䣬Ī춼䣬ʥͲü䣬岻ʹ䣬΢ܵü֮ʵ΢΢գüҲδߣ߼֮֮֮ɱ֪ؽҡ]ߡߡ֪֮֮м֮ߣ֮֮ʷɵöҲǶ֪֮䡢ڼɵöʹҲǶ֪֮N£ʹУǶ֪֮ʹڡ֮£֪֪֮֮춷䣬ʷ䲻ɲҲ֮Ҳֿģ֮Ҳ󡣹ͽǞߣسɴ󹦡˱֮Ҫ֮ѶҲ diff --git a/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-utf-8.txt b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-utf-8.txt new file mode 100644 index 0000000..375e1ad --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-utf-8.txt @@ -0,0 +1,107 @@ +This file was derived from +http://www.gutenberg.org/files/23864/23864-0.txt +after converting from Traditional Chinese to Simplified Chinese. +-------- +始计第一 + +孙子曰:兵者,国之大事,死生之地,存亡之道,不可不察也。 + +故经之以五事,校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五曰法。 + +道者,令民与上同意,可与之死,可与之生,而不畏危也;天者,阴阳、寒暑、时制也;地者,远近、险易、广狭、死生也;将者,智、信、仁、勇、严也;法者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知者不胜。 + +故校之以计,而索其情,曰:主孰有道?将孰有能?天地孰得?法令孰行?兵眾孰强?士卒孰练?赏罚孰明?吾以此知胜负矣。 + +将听吾计,用之必胜,留之;将不听吾计,用之必败,去之。 + +计利以听,乃為之势,以佐其外。势者,因利而制权也。 + +兵者,诡道也。故能而示之不能,用而示之不用,近而示之远,远而示之近。利而诱之,乱而取之,实而备之,强而避之,怒而挠之,卑而骄之,佚而劳之,亲而离之,攻其无备,出其不意。此兵家之胜,不可先传也。 + +夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜,少算不胜,而况无算乎!吾以此观之,胜负见矣。 + +作战第二 + +孙子曰:凡用兵之法,驰车千駟,革车千乘,带甲十万,千里馈粮。则内外之费,宾客之用,胶漆之材,车甲之奉,日费千金,然后十万之师举矣。 + +其用战也,贵胜,久则钝兵挫锐,攻城则力屈,久暴师则国用不足。夫钝兵挫锐,屈力殫货,则诸侯乘其弊而起,虽有智者,不能善其后矣。故兵闻拙速,未睹巧之久也。夫兵久而国利者,未之有也。故不尽知用兵之害者,则不能尽知用兵之利也。 + +善用兵者,役不再籍,粮不三载,取用於国,因粮於敌,故军食可足也。国之贫於师者远输,远输则百姓贫;近於师者贵卖,贵卖则百姓竭,财竭则急於丘役。力屈财殫,中原内虚於家,百姓之费,十去其七;公家之费,破军罢马,甲胄矢弩,戟楯矛櫓,丘牛大车,十去其六。 + +故智将务食於敌,食敌一钟,当吾二十钟;萁秆一石,当吾二十石。故杀敌者,怒也;取敌之利者,货也。故车战,得车十乘以上,赏其先得者,而更其旌旗。车杂而乘之,卒善而养之,是谓胜敌而益强。 + +故兵贵胜,不贵久。故知兵之将,民之司命。国家安危之主也。 + +谋攻第三 + +孙子曰:凡用兵之法,全国為上,破国次之;全军為上,破军次之;全旅為上,破旅次之;全卒為上,破卒次之;全伍為上,破伍次之。是故百战百胜,非善之善者也;不战而屈人之兵,善之善者也。 + +故上兵伐谋,其次伐交,其次伐兵,其下攻城。攻城之法,為不得已。修櫓轒轀,具器械,三月而后成;距闉,又三月而后已。将不胜其忿,而蚁附之,杀士三分之一,而城不拔者,此攻之灾也。 + +故善用兵者,屈人之兵,而非战也,拔人之城而非攻也,毁人之国而非久也,必以全争於天下,故兵不顿而利可全,此谋攻之法也。 + +故用兵之法,十则围之,五则攻之,倍则分之,敌则能战之,少则能逃之,不若则能避之。故小敌之坚,大敌之擒也。 + +夫将者,国之辅也。辅周则国必强,辅隙则国必弱。故君之所以患於军者三:不知军之不可以进而谓之进,不知军之不可以退而谓之退,是谓縻军;不知三军之事,而同三军之政,则军士惑矣;不知三军之权,而同三军之任,则军士疑矣。三军既惑且疑,则诸侯之难至矣。是谓乱军引胜。 + +故知胜有五:知可以战与不可以战者,胜。识眾寡之用者,胜。上下同欲者,胜。以虞待不虞者,胜。将能而君不御者,胜。此五者,知胜之道也。 + +故曰:知己知彼,百战不貽;不知彼而知己,一胜一负;不知彼不知己,每战必败。 + +军形第四 + +孙子曰:昔之善战者,先為不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能為不可胜,不能使敌必可胜。故曰:胜可知,而不可為。 + +不可胜者,守也;可胜者,攻也。守则不足,攻则有餘。善守者,藏於九地之下,善攻者,动於九天之上,故能自保而全胜也。 + +见胜不过眾人之所知,非善之善者也;战胜而天下曰善,非善之善者也。故举秋毫不為多力,见日月不為明目,闻雷霆不為聪耳。古之善战者,胜於易胜者也。故善战者之胜也,无智名,无勇功,故其战胜不忒。不忒者,其所措必胜,胜已败者也。故善战者,先立於不败之地,而不失敌之败也。是故胜兵先胜,而后求战,败兵先战而后求胜。善用兵者,修道而保法,故能為胜败之政。 + +兵法:一曰度,二曰量,三曰数,四曰称,五曰胜。地生度,度生量,量生数,数生称,称生胜。故胜兵若以鎰称銖,败兵若以銖称鎰。胜者之战,若决积水於千仞之谿者,形也。 + +兵势第五 + +孙子曰:凡治眾如治寡,分数是也;斗眾如斗寡,形名是也;三军之眾,可使必受敌而无败者,奇正是也;兵之所加,如以碫投卵者,虚实是也。 + +凡战者,以正合,以奇胜。故善出奇者,无穷如天地,不竭如江海。终而复始,日月是也。死而復生,四时是也。声不过五,五声之变,不可胜听也;色不过五,五色之变,不可胜观也;味不过五,五味之变,不可胜尝也;战势,不过奇正,奇正之变,不可胜穷也。奇正相生,如循环之无端,熟能穷之哉? + +激水之疾,至於漂石者,势也;鷙鸟之疾,至於毁折者,节也。是故善战者,其势险,其节短。势如张弩,节如发机。 + +纷纷紜紜,斗乱而不可乱也;浑浑沌沌,形圆而不可败也。乱生於治,怯生於勇,弱生於强。治乱,数也;勇怯,势也;强弱,形也。故善动敌者,形之,敌必从之;予之,敌必取之。以利动之,以卒待之。 + +故善战者,求之於势,不责於人;故能择人而任势。任势者,其战人也,如转木石。木石之性,安则静,危则动,方则止,圆则行。故善战人之势,如转圆石於千仞之山者,势也。 + +虚实第六 + +孙子曰:凡先处战地而待敌者佚,后处战地而趋战者劳。 + +故善战者,致人而不致於人。能使敌人自至者,利之也;能使敌人不得至者,害之也。故敌佚能劳之,饱能饥之,安能动之。出其所必趋,趋其所不意。行千里而不劳者,行於无人之地也;攻而必取者,攻其所不守也。守而必固者,守其所不攻也。 + +故善攻者,敌不知其所守;善守者,敌不知其所攻。微乎微乎,至於无形;神乎神乎,至於无声,故能為敌之司命。进而不可御者,冲其虚也;退而不可追者,速而不可及也。故我欲战,敌虽高垒深沟,不得不与我战者,攻其所必救也;我不欲战,虽画地而守之,敌不得与我战者,乖其所之也。故形人而我无形,则我专而敌分。我专為一,敌分為十,是以十攻其一也。则我眾敌寡,能以眾击寡者,则吾之所与战者约矣。吾所与战之地不可知,不可知则敌所备者多,敌所备者多,则吾所与战者寡矣。故备前则后寡,备后则前寡,备左则右寡,备右则左寡,无所不备,则无所不寡。寡者,备人者也;眾者,使人备己者也。故知战之地,知战之日,则可千里而会战;不知战之地,不知战日,则左不能救右,右不能救左,前不能救后,后不能救前,而况远者数十里,近者数里乎!以吾度之,越人之兵虽多,亦奚益於胜哉!故曰:胜可為也。敌虽眾,可使无斗。故策之而知得失之计,候之而知动静之理,形之而知死生之地,角之而知有餘不足之处。故形兵之极,至於无形。无形则深间不能窥,智者不能谋。因形而措胜於眾,眾不能知。人皆知我所以胜之形,而莫知吾所以制胜之形。故其战胜不復,而应形於无穷。夫兵形象水,水之行避高而趋下,兵之形避实而击虚;水因地而制流,兵因敌而制胜。故兵无常势,水无常形。能因敌变化而取胜者,谓之神。故五行无常胜,四时无常位,日有短长,月有死生。 + +军争第七 + +孙子曰: 凡用兵之法,将受命於君,合军聚眾,交和而舍,莫难於军争。军争之难者,以迂為直,以患為利。故迂其途,而诱之以利,后人发,先人至,此知迂直之计者也。军争為利,军争為危。举军而争利则不及,委军而争利则輜重捐。是故捲甲而趋,日夜不处,倍道兼行,百裡而争利,则擒三将军,劲者先,疲者后,其法十一而至;五十里而争利,则蹶上将军,其法半至;三十里而争利,则三分之二至。是故军无輜重则亡,无粮食则亡,无委积则亡。故不知诸侯之谋者,不能豫交;不知山林、险阻、沮泽之形者,不能行军;不用乡导者,不能得地利。故兵以诈立,以利动,以分和為变者也。故其疾如风,其徐如林,侵掠如火,不动如山,难知如阴,动如雷震。掠乡分眾,廓地分利,悬权而动。先知迂直之计者胜,此军争之法也。《军政》曰:“言不相闻,故為之金鼓;视不相见,故為之旌旗。”夫金鼓旌旗者,所以一民之耳目也。民既专一,则勇者不得独进,怯者不得独退,此用眾之法也。故夜战多金鼓,昼战多旌旗,所以变人之耳目也。三军可夺气,将军可夺心。是故朝气锐,昼气惰,暮气归。善用兵者,避其锐气,击其惰归,此治气者也。以治待乱,以静待哗,此治心者也。以近待远,以佚待劳,以饱待饥,此治力者也。无邀正正之旗,无击堂堂之陈,此治变者也。故用兵之法,高陵勿向,背丘勿逆,佯北勿从,锐卒勿攻,饵兵勿食,归师勿遏,围师遗闕,穷寇勿迫,此用兵之法也。 + +九变第八 + +孙子曰: 凡用兵之法,将受命於君,合军聚合。泛地无舍,衢地合交,绝地无留,围地则谋,死地则战,途有所不由,军有所不击,城有所不攻,地有所不争,君命有所不受。故将通於九变之利者,知用兵矣;将不通九变之利,虽知地形,不能得地之利矣;治兵不知九变之术,虽知五利,不能得人之用矣。是故智者之虑,必杂於利害,杂於利而务可信也,杂於害而患可解也。是故屈诸侯者以害,役诸侯者以业,趋诸侯者以利。故用兵之法,无恃其不来,恃吾有以待之;无恃其不攻,恃吾有所不可攻也。故将有五危,必死可杀,必生可虏,忿速可侮,廉洁可辱,爱民可烦。凡此五者,将之过也,用兵之灾也。覆军杀将,必以五危,不可不察也。 + +行军第九 + +孙子曰:凡处军相敌,绝山依穀,视生处高,战隆无登,此处山之军也。绝水必远水,客绝水而来,勿迎之於水内,令半渡而击之利,欲战者,无附於水而迎客,视生处高,无迎水流,此处水上之军也。绝斥泽,唯亟去无留,若交军於斥泽之中,必依水草而背眾树,此处斥泽之军也。平陆处易,右背高,前死后生,此处平陆之军也。凡此四军之利,黄帝之所以胜四帝也。凡军好高而恶下,贵阳而贱阴,养生而处实,军无百疾,是谓必胜。丘陵堤防,必处其阳而右背之,此兵之利,地之助也。上雨水流至,欲涉者,待其定也。凡地有绝涧、天井、天牢、天罗、天陷、天隙,必亟去之,勿近也。吾远之,敌近之;吾迎之,敌背之。军旁有险阻、潢井、蒹葭、小林、蘙薈者,必谨覆索之,此伏姦之所处也。敌近而静者,恃其险也;远而挑战者,欲人之进也;其所居易者,利也;眾树动者,来也;眾草多障者,疑也;鸟起者,伏也;兽骇者,覆也;尘高而锐者,车来也;卑而广者,徒来也;散而条达者,樵採也;少而往来者,营军也;辞卑而备者,进也;辞强而进驱者,退也;轻车先出居其侧者,陈也;无约而请和者,谋也;奔走而陈兵者,期也;半进半退者,诱也;杖而立者,饥也;汲而先饮者,渴也;见利而不进者,劳也;鸟集者,虚也;夜呼者,恐也;军扰者,将不重也;旌旗动者,乱也;吏怒者,倦也;杀马肉食者,军无粮也;悬甀不返其舍者,穷寇也;谆谆翕翕,徐与人言者,失眾也;数赏者,窘也;数罚者,困也;先暴而后畏其眾者,不精之至也;来委谢者,欲休息也。兵怒而相迎,久而不合,又不相去,必谨察之。兵非贵益多也,惟无武进,足以并力料敌取人而已。夫惟无虑而易敌者,必擒於人。卒未亲而罚之,则不服,不服则难用。卒已亲附而罚不行,则不可用。故合之以文,齐之以武,是谓必取。令素行以教其民,则民服;令素不行以教其民,则民不服。令素行者,与眾相得也。 + +地形第十 + +孙子曰:地形有通者、有掛者、有支者、有隘者、有险者、有远者。我可以往,彼可以来,曰通。通形者,先居高阳,利粮道,以战则利。可以往,难以返,曰掛。掛形者,敌无备,出而胜之,敌若有备,出而不胜,难以返,不利。我出而不利,彼出而不利,曰支。支形者,敌虽利我,我无出也,引而去之,令敌半出而击之利。隘形者,我先居之,必盈之以待敌。若敌先居之,盈而勿从,不盈而从之。险形者,我先居之,必居高阳以待敌;若敌先居之,引而去之,勿从也。远形者,势均难以挑战,战而不利。凡此六者,地之道也,将之至任,不可不察也。凡兵有走者、有驰者、有陷者、有崩者、有乱者、有北者。凡此六者,非天地之灾,将之过也。夫势均,以一击十,曰走;卒强吏弱,曰驰;吏强卒弱,曰陷;大吏怒而不服,遇敌懟而自战,将不知其能,曰崩;将弱不严,教道不明,吏卒无常,陈兵纵横,曰乱;将不能料敌,以少合眾,以弱击强,兵无选锋,曰北。凡此六者,败之道也,将之至任,不可不察也。夫地形者,兵之助也。料敌制胜,计险隘远近,上将之道也。知此而用战者必胜,不知此而用战者必败。故战道必胜,主曰无战,必战可也;战道不胜,主曰必战,无战可也。故进不求名,退不避罪,唯民是保,而利於主,国之宝也。视卒如婴儿,故可以与之赴深溪;视卒如爱子,故可与之俱死。厚而不能使,爱而不能令,乱而不能治,譬若骄子,不可用也。知吾卒之可以击,而不知敌之不可击,胜之半也;知敌之可击,而不知吾卒之不可以击,胜之半也;知敌之可击,知吾卒之可以击,而不知地形之不可以战,胜之半也。故知兵者,动而不迷,举而不穷。故曰:知彼知己,胜乃不殆;知天知地,胜乃可全。 + +九地第十一 + +孙子曰:用兵之法,有散地,有轻地,有争地,有交地,有衢地,有重地,有泛地,有围地,有死地。诸侯自战其地者,為散地;入人之地不深者,為轻地;我得亦利,彼得亦利者,為争地;我可以往,彼可以来者,為交地;诸侯之地三属,先至而得天下眾者,為衢地;入人之地深,背城邑多者,為重地;山林、险阻、沮泽,凡难行之道者,為泛地;所由入者隘,所从归者迂,彼寡可以击吾之眾者,為围地;疾战则存,不疾战则亡者,為死地。是故散地则无战,轻地则无止,争地则无攻,交地则无绝,衢地则合交,重地则掠,泛地则行,围地则谋,死地则战。古之善用兵者,能使敌人前后不相及,眾寡不相恃,贵贱不相救,上下不相收,卒离而不集,兵合而不齐。合於利而动,不合於利而止。敢问敌眾而整将来,待之若何曰:先夺其所爱则听矣。兵之情主速,乘人之不及。由不虞之道,攻其所不戒也。凡為客之道,深入则专。主人不克,掠於饶野,三军足食。谨养而勿劳,并气积力,运兵计谋,為不可测。投之无所往,死且不北。死焉不得,士人尽力。兵士甚陷则不惧,无所往则固,深入则拘,不得已则斗。是故其兵不修而戒,不求而得,不约而亲,不令而信,禁祥去疑,至死无所之。吾士无餘财,非恶货也;无餘命,非恶寿也。令发之日,士卒坐者涕沾襟,偃卧者涕交颐,投之无所往,诸、劌之勇也。故善用兵者,譬如率然。率然者,常山之蛇也。击其首则尾至,击其尾则首至,击其中则首尾俱至。敢问兵可使如率然乎?曰可。夫吴人与越人相恶也,当其同舟而济而遇风,其相救也如左右手。是故方马埋轮,未足恃也;齐勇如一,政之道也;刚柔皆得,地之理也。故善用兵者,携手若使一人,不得已也。将军之事,静以幽,正以治,能愚士卒之耳目,使之无知;易其事,革其谋,使人无识;易其居,迂其途,使民不得虑。帅与之期,如登高而去其梯;帅与之深入诸侯之地,而发其机。若驱群羊,驱而往,驱而来,莫知所之。聚三军之眾,投之於险,此谓将军之事也。九地之变,屈伸之力,人情之理,不可不察也。凡為客之道,深则专,浅则散。去国越境而师者,绝地也;四彻者,衢地也;入深者,重地也;入浅者,轻地也;背固前隘者,围地也;无所往者,死地也。是故散地吾将一其志,轻地吾将使之属,争地吾将趋其后,交地吾将谨其守,交地吾将固其结,衢地吾将谨其恃,重地吾将继其食,泛地吾将进其途,围地吾将塞其闕,死地吾将示之以不活。故兵之情:围则御,不得已则斗,过则从。是故不知诸侯之谋者,不能预交;不知山林、险阻、沮泽之形者,不能行军;不用乡导,不能得地利。四五者,一不知,非霸王之兵也。夫霸王之兵,伐大国,则其眾不得聚;威加於敌,则其交不得合。是故不争天下之交,不养天下之权,信己之私,威加於敌,则其城可拔,其国可隳。施无法之赏,悬无政之令。犯三军之眾,若使一人。犯之以事,勿告以言;犯之以害,勿告以利。投之亡地然后存,陷之死地然后生。夫眾陷於害,然后能為胜败。故為兵之事,在顺详敌之意,并敌一向,千里杀将,是谓巧能成事。是故政举之日,夷关折符,无通其使,厉於廊庙之上,以诛其事。敌人开闔,必亟入之,先其所爱,微与之期,践墨随敌,以决战事。是故始如处女,敌人开户;后如脱兔,敌不及拒。 + +火攻第十二 + +孙子曰:凡火攻有五:一曰火人,二曰火积,三曰火輜,四曰火库,五曰火队。行火必有因,因必素具。发火有时,起火有日。时者,天之燥也。日者,月在箕、壁、翼、軫也。凡此四宿者,风起之日也。凡火攻,必因五火之变而应之:火发於内,则早应之於外;火发而其兵静者,待而勿攻,极其火力,可从而从之,不可从则上。火可发於外,无待於内,以时发之,火发上风,无攻下风,昼风久,夜风止。凡军必知五火之变,以数守之。故以火佐攻者明,以水佐攻者强。水可以绝,不可以夺。夫战胜攻取而不惰其功者凶,命曰“费留”。故曰:明主虑之,良将惰之,非利不动,非得不用,非危不战。主不可以怒而兴师,将不可以慍而攻战。合於利而动,不合於利而上。怒可以复喜,慍可以复说,亡国不可以复存,死者不可以复生。故明主慎之,良将警之。此安国全军之道也。 + +用间第十三 + +孙子曰: 凡兴师十万,出征千里,百姓之费,公家之奉,日费千金,内外骚动,怠於道路,不得操事者,七十万家。相守数年,以争一日之胜,而爱爵禄百金,不知敌之情者,不仁之至也,非民之将也,非主之佐也,非胜之主也。故明君贤将所以动而胜人,成功出於眾者,先知也。先知者,不可取於鬼神,不可象於事,不可验於度,必取於人,知敌之情者也。故用间有五:有因间,有内间,有反间,有死间,有生间。五间俱起,莫知其道,是谓神纪,人君之宝也。乡间者,因其乡人而用之;内间者,因其官人而用之;反间者,因其敌间而用之;死间者,為誑事於外,令吾闻知之而传於敌间也;生间者,反报也。故三军之事,莫亲於间,赏莫厚於间,事莫密於间,非圣贤不能用间,非仁义不能使间,非微妙不能得间之实。微哉微哉!无所不用间也。间事未发而先闻者,间与所告者兼死。凡军之所欲击,城之所欲攻,人之所欲杀,必先知其守将、左右、謁者、门者、舍人之姓名,令吾间必索知之。敌间之来间我者,因而利之,导而舍之,故反间可得而用也;因是而知之,故乡间、内间可得而使也;因是而知之,故死间為誑事,可使告敌;因是而知之,故生间可使如期。五间之事,主必知之,知之必在於反间,故反间不可不厚也。昔殷之兴也,伊挚在夏;周之兴也,吕牙在殷。故明君贤将,能以上智為间者,必成大功。此兵之要,三军之所恃而动也。 diff --git a/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-big5.txt b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-big5.txt new file mode 100644 index 0000000..1918c8f --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-big5.txt @@ -0,0 +1,106 @@ +This file was derived from +http://www.gutenberg.org/files/23864/23864-0.txt +-------- +lpĤ@ + +]lGL̡AꤧjơAͤaAs`DAi]C + +GgHơAդHpAӯ䱡G@DAGѡATaA|NAkC + +D̡AOPWPNAiPAiP͡AӤȦM]FѪ̡ABHBɨ]Fa̡ABIBsUBͤ]FN̡ABHBBiBY]Fk̡ABxDBDΤ]CZ̡ANDA̳ӡA̤ӡC + +GդHpAӯ䱡AGDEDHNEHѦaEoHkOEHLEjHhEmH@EH^HӭtoC + +Nť^pAΤӡAdFNť^pAΤѡAhC + +pQHťADաAH~Cժ̡A]QӨv]C + +L̡A޹D]CGӥܤAΦӥܤΡAӥܤAӥܤCQӻAæӨAӳƤAjפAӼAźAHӳҤA˦ALơAX䤣NCLaӡAiǤ]C + +ҥԦӼqӪ̡Aoh]FԦӼq⤣Ӫ̡Ao֤]ChӡAֺ⤣ӡAӪpLGI^H[AӭtoC + +@ԲĤG + +]lGZΧLkAdoAdAaҤQUAdX³Ch~OAȤΡAAҤ^AOdAMQUv|oC + +ξԤ]AQӡA[hwLUA𫰫hO}A[ɮvhΤCҶwLUA}OfAhѫJӰ_A̡AൽoCGLDtA@[]CҧL[ӰQ̡A]CGɪΧL`̡AhɪΧLQ]C + +ΧL̡AФAyA³TAΩA]³ġAGxi]Cꤧhv̻AhʩmhFv̶QAQhʩmܡA]ܫhCСCO}]A줺aAʩmOAQhCFaOA}x}AҭHکAurACjAQh䤻C + +GNȭġAĤ@A^GQFmz@ۡA^GQۡCGĪ̡A]FĤQ̡Af]CGԡAoQHWAo̡AӧܺXCӭA򵽦ӾiAO׳ӼĦӯqjC + +GLQӡAQ[CGLNAqRCawMD]C + +ѧĤT + +]lGZΧLkAꬰWA}ꦸFxWA}xFȬWA}ȦF򬰤WA}򦸤FWA}COGʾԦʳӡAD̤]FԦө}HLA̤]C + +GWLѡA䦸A䦸LAU𫰡C𫰤kAowCrVA㾹ATӫᦨFZASTӫwCNӨAƪAhT@Aӫު̡A𤧨a]C + +GΧL̡A}HLAӫDԤ]AޤHӫD]AHӫD[]AHѤUAGLyӧQiAѧ𤧪k]C + +GΧLkAQh򤧡Ah𤧡AhAīhԤA֫hkAYhפCGpĤAjĤ]C + +ұN̡Aꤧ]CPhꥲjAثhꥲzCGgҥHwx̤TGxiHiӿפiAxiHhӿפhAOݭxFTxơAӦPTxFAhxhboFTxvAӦPTxAhxhèoCTxJbBáAhѫJܨoCO׶íx޳ӡC + +GӦGiHԻPiHԪ̡AӡCѲ褧Ϊ̡AӡCWUP̡AӡCHݤ̡AӡCNӧgs̡AӡC̡AӤD]C + +GGvAʾԤMFӪvA@Ӥ@tFvACԥѡC + +xβĥ| + +]lGԪ̡AiӡAHݼĤiӡCiӦbvAiӦbġCGԪ̡AରiӡAϼĥiӡCGGӥiAӤiC + +iӪ̡Au]FiӪ̡A]CuhAhlCu̡AéEaUA̡AʩEѤWAG۫OӥӤ]C + +ӤLHҪAD̤]FԳӦӤѤU굽AD̤]CG|@hOA뤣ءADp^oաCjԪ̡AөӪ̤]CGԪ̤Ӥ]ALWALi\AGԳӤ֡C̡֪AұӡAӤwѪ̤]CGԪ̡Aߩ󤣱ѤaAӤĤѤ]COGӧLӡAӫDԡAѧLԦӫDӡCΧL̡A׹DӫOkAGରӱѤFC + +LkG@סAGqATơA|١AӡCaͫסAץͶqAqͼơAƥͺ١A٥ͳӡCGӧLYHٻˡAѧLYH˺CӪ̤ԡAYMndQƪ̡AΤ]C + +LղĤ + +]lGZvpvAƬO]FpAΦWO]FTxAiϥĦӵLѪ̡A_O]FLҥ[ApHZ̡AO]C + +ZԪ̡AHXAH_ӡCGX_̡ALapѦaAܦpCצӽƩlAO]CӴ_͡A|ɬO]CnLAnܡAiť]F⤣LA⤧ܡAi[]FLAܡAiӹ]FԶաAL_A_ܡAiӽa]C_ۥ͡Ap`LݡAavH + +EeAܩ}̡۪Aդ]FeAܩ󷴧̡A`]COGԪ̡AIA`uCզpiA`poC + +ɯɯƯơAæӤiä]FPPAζӤiѤ]CåͩvAĥͩiAzͩjCváAƤ]FiġAդ]FjzAΤ]CGʼĪ̡AΤAĥqFAĥCHQʤAHݤC + +GԪ̡ADաAdHFGܤHӥաCժ̡AԤH]ApۡCۤʡAwhRAMhʡAhAhCGԤHաAp۩dQs̡Aդ]C + +Ĥ + +]lGZBԦaӫݼĪ̧HABԦa;Ԫ̳ҡC + +GԪ̡APHӤPHCϼĤHۦܪ̡AQ]FϼĤHoܪ̡A`]CGħHҤAȤAwʤCXҥ͡AͨҤNCdӤҪ̡ALHa]Fӥ̡AҤu]CuӥT̡AuҤ]C + +G̡AĤҦuFu̡AĤҧCLGLGAܩLΡFGGAܩLnAGରĤqRCiӤim̡AR]FhӤil̡AtӤiΤ]CGڱԡAS`AoPھԪ̡AҥϤ]FڤԡAeaӦuAĤoPھԪ̡AĨҤ]CGΤHӧڵLΡAhڱMӼĤCڱM@AĤQAOHQ@]ChڲĹAH̡Ah^һPԪ̬oC^һPԤaiAihĩҳƪ̦hAĩҳƪ̦hAh^һPԪ̹oCGƫehAƫheAƥhkAƥkhALҤơAhLҤC̡AƤH̤]F̡AϤHƤv̤]CGԤaAԤAhidӷ|ԡFԤaAԤAhϥkAkϥAeϫAᤣϫeAӪp̼ƤQءA̼إGIH^פAVHLhAOqӫvIGGӥi]CAiϵLCGӪopAԤӪRzAΤӪͤaAӪlBCGΧLAܩLΡCLΫh`sA̤ѡC]Φӱө󲳡AાCHҪکҥHӤΡAӲ^ҥHӤΡCGԳӤ_AΩLaCҧLζHAװͤUAL׹F]aӨyAL]ĦӨӡCGLL`աAL`ΡC]ܤƦӨӪ̡AפCGL`ӡA|ɵL`A馳uA릳͡C + +xĤC + +]lG ZΧLkANRgAXxEAMӪ١AxCx̡AHAHwQCG~AӻHQAHoAHܡAp̤]CxQAxMC|xӪQhΡAexӪQhCOGҦ͡A]BADݦAʸ̦ӪQAhTNxAl̥Ah̫AkQ@ӦܡFQئӪQAhݤWNxAkbܡFTQئӪQAhTGܡCOGxLh`AL³h`ALenh`CGѫJѪ̡AݥFsLBIBqAΪ̡AxFζmɪ̡AoaQCGLHBߡAHQʡAHMܪ̤]CGepA}pLAIpAʦpsApAʦpp_CmAaQAavӰʡCp̳ӡAxk]CmxFnGۻDAGFۨAGܺXCҪܺX̡AҥH@եؤ]CJM@Ahi̤oWiAĪ̤oWhAβk]CG]ԦhA޾ԦhܺXAҥHܤHեؤ]CTxiܮANxiܤߡCOG®UAޮkAǮkCΧL̡AרUAkkAv̤]CHvݶáAHRݼMAvߪ̤]CHݻAHHݳҡAHȡAvO̤]CLܥXAL󤧳Avܪ̤]CGΧLkAŦVAICŰfA˥_űqAUŧALŭAkvŹKAvAaFŭAΧLk]C + +EܲĤK + +]lG ZΧLkANRgAXxEXCxaL١AaXAaLdAahѡAahԡA~ҤѡAxҤAҤAaҤAgRҤCGNqEܤQ̡AΧLoFNqEܤQAaΡAoaQoFvLEܤNAQAoHΨoCOG̤{AQ`AQӰȥiH]A`ӱwiѤ]COG}ѫJ̥H`AнѫJ̥H~AͽѫJ̥HQCGΧLkAL䤣ӡA^HݤFL䤣A^Ҥi]CGNMAiAͥiAtiVAGidARiСCZ̡ANL]AΧLa]CЭxNAHMAi]C + +xĤE + +]lGZBxۼġAs̽\AͳBAԶLnABsx]CAȵӨӡAŪ蠟AObQAԪ̡ALӪȡAͳBALyABWx]CAA߫EhLdAYx󥸿AA̤ӭIABAx]CBAkIAe͡ABx]CZ|xQAҤҥHӥ|Ҥ]CZxnӴcUAQӽ⳱AiͦӳBAxLʯeAOץӡCCAB䶧ӥkIALQAaU]CWByܡAA̡Aݨw]CZaBѤBѨcBùBѳBѻءAEhAŪ]C^AĪ񤧡F^蠟AĭICxǦIBCB㶸BpLBP̡AЯAҳB]CĪR̡AI]FӬDԪ̡AHi]Fҩ~̡AQ]Fʪ̡AӤ]Fh٪̡Aä]F_̡A]F~b̡AФ]FаӾU̡AӤ]FӼs̡A{Ӥ]FӱF̡AĤ]F֦өӪ̡Ax]Fӳƪ̡Ai]FjӶiX̡Ah]FX~䰼̡A]FLӽЩM̡AѤ]FbӳL̡A]Fbibh̡A]Fӥߪ̡AȤ]FVӥ̡A]FQӤi̡AҤ]F̡A]F]I̡A]FxZ̡AN]FܺXʪ̡Aä]FO̡A¤]F׭̡AxL³]Faդ٪̡AaF]FνεA}PH̡A]Fƽ̡A~]Fƻ@̡Ax]FɦӫȨ䲳̡A뤧ܤ]Fөeª̡A𮧤]CLӬ۪A[ӤXASۥhAԹCLDQqh]ALZiAHäOƼĨHӤwCұL{өĪ̡AHC򥼿˦ӻ@AhAAAhΡCw˪ӻ@AhiΡCGXHAHZAOץCOHШAhAFOHШAhACO̡AP۱o]C + +aβĤQ + +]lGaΦq̡B̡B̡Bi̡BI̡B̡CڥiHAiHӡAqCqΪ̡A~AQ³DAHԫhQCiHAHA걾CΪ̡AĵLơAXӳӤAĭYơAXӤӡAHAQCڥXӤQAXӤQACΪ̡AQڡAڵLX]AަӥhAOĥbXQCiΪ̡Aڥ~AդHݼġCYĥ~AզӤűqAզӱqCIΪ̡Aڥ~A~HݼġFYĥ~AަӥhAűq]CΪ̡AէHDԡAԦӤQCZ̡AaD]ANܥAi]CZL̡B̡B̡BY̡Bê̡B_̡CZ̡ADѦaaANL]CҶէAH@QAꨫFjOzA깣FOjzA곴FjOӤAAJȦӦ۾ԡANAYFNzYAйDAOL`ALaAáFNƼġAH֦XAHzjALLWA_CZ̡AѤD]ANܥAi]CҦaΪ̡ALU]CƼĨӡApIiAWND]CӥξԪ̥ӡAӥξԪ̥ѡCGԹDӡADLԡAԥi]FԹDӡADꥲԡALԥi]CGiDWAh׸oAߥOOAӧQDAꤧ_]CpAGiHPu`ˡFpRlAGiPѦCpӤϡARӤOAæӤvAĴYźlAiΤ]C^򤧥iHAӤĤiAӤb]FĤiAӤ^򤧤iHAӤb]FĤiA^򤧥iHAӤaΤiHԡAӤb]CGL̡AʦӤgA|ӤaCGGvAӤDpFѪaAӤDiC + +EaĤQ@ + +]lGΧLkAaAaAaAaAaAaAxaAaAaCѫJ۾Ԩa̡AaFJHa`̡AaFڱoQAoQ̡AaFڥiHAiHӪ̡AaFѫJaTݡAܦӱoѤU̡AaFJHa`AIh̡AaFsLBIBqAAZ椧D̡AxaFҥѤJ̹iAұqk̨AiH^̡AaFeԫhsAeԫh`̡AaCOGahLԡAahLAahLAahLAahXAahAxahAahѡAahԡCjΧL̡AϼĤHeᤣۤΡA褣۫AQ⤣۱ϡAWUۦAӤALXӤCXQӰʡAXQӤCݼIJӾNӡAݤYGܨҷRhťoCLDtAHΡCѤDAҤ٤]CZȤDA`JhMCDHJAdzATxCԾiӤųҡAînOABLpѡAiC뤧LҩAB_CjoAhHɤOCLhƳhߡALҩhTA`JhAowhCOGLצӧ١ADӱoAӿˡAOӫHATháAܦLҤC^hLl]ADcf]FLlRADcؤ]COoAh򧤪̮g̡Aת̮[A뤧LҩAѡB󤧫i]CGΧL̡AĴpvMCvM̡A`sD]C䭺hܡAhܡA䤤hѦܡCݧLiϦpvMGHiCҧdHPVH۴c]AP٦ӹJA۱Ϥ]pkCOG谨IA]Fip@AFD]FXұoAaz]CGΧL̡AYϤ@HAow]CNxơARHաAHvAMh򤧦եءAϤLFơAѡAϤHLѡF~A~Aϥo{CӻPApnӥhFӻP`JѫJaAӵoCYXsϡAXөAXӨӡAҤCETxA뤧IAױNxƤ]CEaܡA}OAHzAi]CZȤDA`hMALhChVҦӮv̡Aa]F|̡Aa]FJ`̡Aa]FJL̡Aa]FITei̡Aa]FLҩ̡Aa]COGa^N@ӡAa^NϤݡAa^NͨAa^NԨuAa^NT䵲Aa^NԨAa^N~䭹Axa^Ni~Aa^NAa^NܤHCGLGhmAowhALhqCOGѫJѪ̡AwFsLBIBqAΪ̡AxFζmɡAoaQC|̡A@ADQL]CQLAjAh䲳oEF¥[ġAh椣oXCOGѤUAiѤUvAHvpA¥[ġAh䫰iޡAioCILkAaLFOCǤTxAYϤ@HCǤHơAŧiHFǤH`AŧiHQC뤧`aMsAaM͡CҲ`AMରӱѡCGLơAbԼĤNAüĤ@VAdNAOץনơCOGF|AišALqϡAFYqWAHݨơCĤH}AEJAҷRALPAHġAHMԨơCOGlpBkAĤH}FpߡAĤΩڡC + +ĤQG + +]lGZ𦳤G@HAGnATA|wAC]A]CoɡA_Cɪ̡AѤ]C̡AbߡBBlBH]CZ|J̡A_]CZA]ܦGo󤺡Ah~FoӨLR̡AݦӤŧAOAiqӱqAiqhWCio~ALݩ󤺡AHɵoAoWALUAޭ[A]CZxܡAHƦuCGH̩AH̱jCiHAiHܡCҾԳӧӤk\̤ARꡧOdCGGD{A}NkADQʡADoΡADMԡCDiHӿvANiHYӧԡCXQӰʡAXQӤWCiHƳߡAYiHƻA`ꤣiHƦsA̤iHƥ͡CGDVA}NĵCwxD]C + +ζĤQT + +]lG ZvQUAXdAʩmOAa^AOdA~̰ʡADAoިƪ̡ACQUaCۦuƦ~AH@餧ӡAӷRSʪAĤ̡Aܤ]ADN]ADD]ADӤD]CGgNҥHʦӳӤHA\X󲳪̡A]C̡Ai󰭯AiHơAiסAHAĤ̤]CGζG]AA϶AAͶCѰ_ADAOׯAHg_]Cm̡A]mHӥΤF̡A]xHӥΤF϶̡A]ĶӥΤF̡AƩ~AO^DӶǩĶ]FͶ̡Aϳ]CGTxơA˩󶡡Ap󶡡AƲK󶡡ADt夣ζADq϶ADLoCLvLvILҤζ]CƥoӥD̡APҧi̭ݦCZxұAұAHұAuNBkB̡֪B̡B٤HmWAO^CĶӶڪ̡A]ӧQAɦӪ٤AG϶ioӥΤ]F]OӪAGmBioӨϤ]F]OӪAGơAiϧiġF]OӪAGͶiϦpCơADAb϶AG϶ip]C蠟]A켰bLFP]AfbCGgNAHW̡Aj\CLnATxҫӰʤ]C diff --git a/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-utf-8.txt b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-utf-8.txt new file mode 100644 index 0000000..5797b37 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-utf-8.txt @@ -0,0 +1,106 @@ +This file was derived from +http://www.gutenberg.org/files/23864/23864-0.txt +-------- +始計第一 + +孫子曰:兵者,國之大事,死生之地,存亡之道,不可不察也。 + +故經之以五事,校之以計,而索其情:一曰道,二曰天,三曰地,四曰將,五曰法。 + +道者,令民與上同意,可與之死,可與之生,而不畏危也;天者,陰陽、寒暑、時制也;地者,遠近、險易、廣狹、死生也;將者,智、信、仁、勇、嚴也;法者,曲制、官道、主用也。凡此五者,將莫不聞,知之者勝,不知者不勝。 + +故校之以計,而索其情,曰:主孰有道?將孰有能?天地孰得?法令孰行?兵眾孰強?士卒孰練?賞罰孰明?吾以此知勝負矣。 + +將聽吾計,用之必勝,留之;將不聽吾計,用之必敗,去之。 + +計利以聽,乃為之勢,以佐其外。勢者,因利而制權也。 + +兵者,詭道也。故能而示之不能,用而示之不用,近而示之遠,遠而示之近。利而誘之,亂而取之,實而備之,強而避之,怒而撓之,卑而驕之,佚而勞之,親而離之,攻其無備,出其不意。此兵家之勝,不可先傳也。 + +夫未戰而廟算勝者,得算多也;未戰而廟算不勝者,得算少也。多算勝,少算不勝,而況無算乎!吾以此觀之,勝負見矣。 + +作戰第二 + +孫子曰:凡用兵之法,馳車千駟,革車千乘,帶甲十萬,千里饋糧。則內外之費,賓客之用,膠漆之材,車甲之奉,日費千金,然後十萬之師舉矣。 + +其用戰也,貴勝,久則鈍兵挫銳,攻城則力屈,久暴師則國用不足。夫鈍兵挫銳,屈力殫貨,則諸侯乘其弊而起,雖有智者,不能善其後矣。故兵聞拙速,未睹巧之久也。夫兵久而國利者,未之有也。故不盡知用兵之害者,則不能盡知用兵之利也。 + +善用兵者,役不再籍,糧不三載,取用於國,因糧於敵,故軍食可足也。國之貧於師者遠輸,遠輸則百姓貧;近於師者貴賣,貴賣則百姓竭,財竭則急於丘役。力屈財殫,中原內虛於家,百姓之費,十去其七;公家之費,破軍罷馬,甲胄矢弩,戟楯矛櫓,丘牛大車,十去其六。 + +故智將務食於敵,食敵一鍾,當吾二十鍾;萁稈一石,當吾二十石。故殺敵者,怒也;取敵之利者,貨也。故車戰,得車十乘以上,賞其先得者,而更其旌旗。車雜而乘之,卒善而養之,是謂勝敵而益強。 + +故兵貴勝,不貴久。故知兵之將,民之司命。國家安危之主也。 + +謀攻第三 + +孫子曰:凡用兵之法,全國為上,破國次之;全軍為上,破軍次之;全旅為上,破旅次之;全卒為上,破卒次之;全伍為上,破伍次之。是故百戰百勝,非善之善者也;不戰而屈人之兵,善之善者也。 + +故上兵伐謀,其次伐交,其次伐兵,其下攻城。攻城之法,為不得已。修櫓轒轀,具器械,三月而後成;距闉,又三月而後已。將不勝其忿,而蟻附之,殺士三分之一,而城不拔者,此攻之災也。 + +故善用兵者,屈人之兵,而非戰也,拔人之城而非攻也,毀人之國而非久也,必以全爭於天下,故兵不頓而利可全,此謀攻之法也。 + +故用兵之法,十則圍之,五則攻之,倍則分之,敵則能戰之,少則能逃之,不若則能避之。故小敵之堅,大敵之擒也。 + +夫將者,國之輔也。輔周則國必強,輔隙則國必弱。故君之所以患於軍者三:不知軍之不可以進而謂之進,不知軍之不可以退而謂之退,是謂縻軍;不知三軍之事,而同三軍之政,則軍士惑矣;不知三軍之權,而同三軍之任,則軍士疑矣。三軍既惑且疑,則諸侯之難至矣。是謂亂軍引勝。 + +故知勝有五:知可以戰與不可以戰者,勝。識眾寡之用者,勝。上下同欲者,勝。以虞待不虞者,勝。將能而君不御者,勝。此五者,知勝之道也。 + +故曰:知己知彼,百戰不貽;不知彼而知己,一勝一負;不知彼不知己,每戰必敗。 + +軍形第四 + +孫子曰:昔之善戰者,先為不可勝,以待敵之可勝。不可勝在己,可勝在敵。故善戰者,能為不可勝,不能使敵必可勝。故曰:勝可知,而不可為。 + +不可勝者,守也;可勝者,攻也。守則不足,攻則有餘。善守者,藏於九地之下,善攻者,動於九天之上,故能自保而全勝也。 + +見勝不過眾人之所知,非善之善者也;戰勝而天下曰善,非善之善者也。故舉秋毫不為多力,見日月不為明目,聞雷霆不為聰耳。古之善戰者,勝於易勝者也。故善戰者之勝也,無智名,無勇功,故其戰勝不忒。不忒者,其所措必勝,勝已敗者也。故善戰者,先立於不敗之地,而不失敵之敗也。是故勝兵先勝,而後求戰,敗兵先戰而後求勝。善用兵者,修道而保法,故能為勝敗之政。 + +兵法:一曰度,二曰量,三曰數,四曰稱,五曰勝。地生度,度生量,量生數,數生稱,稱生勝。故勝兵若以鎰稱銖,敗兵若以銖稱鎰。勝者之戰,若決積水於千仞之谿者,形也。 + +兵勢第五 + +孫子曰:凡治眾如治寡,分數是也;鬥眾如鬥寡,形名是也;三軍之眾,可使必受敵而無敗者,奇正是也;兵之所加,如以碫投卵者,虛實是也。 + +凡戰者,以正合,以奇勝。故善出奇者,無窮如天地,不竭如江海。終而複始,日月是也。死而復生,四時是也。聲不過五,五聲之變,不可勝聽也;色不過五,五色之變,不可勝觀也;味不過五,五味之變,不可勝嘗也;戰勢,不過奇正,奇正之變,不可勝窮也。奇正相生,如循環之無端,熟能窮之哉? + +激水之疾,至於漂石者,勢也;鷙鳥之疾,至於毀折者,節也。是故善戰者,其勢險,其節短。勢如張弩,節如發機。 + +紛紛紜紜,鬥亂而不可亂也;渾渾沌沌,形圓而不可敗也。亂生於治,怯生於勇,弱生於強。治亂,數也;勇怯,勢也;強弱,形也。故善動敵者,形之,敵必從之;予之,敵必取之。以利動之,以卒待之。 + +故善戰者,求之於勢,不責於人;故能擇人而任勢。任勢者,其戰人也,如轉木石。木石之性,安則靜,危則動,方則止,圓則行。故善戰人之勢,如轉圓石於千仞之山者,勢也。 + +虛實第六 + +孫子曰:凡先處戰地而待敵者佚,後處戰地而趨戰者勞。 + +故善戰者,致人而不致於人。能使敵人自至者,利之也;能使敵人不得至者,害之也。故敵佚能勞之,飽能饑之,安能動之。出其所必趨,趨其所不意。行千里而不勞者,行於無人之地也;攻而必取者,攻其所不守也。守而必固者,守其所不攻也。 + +故善攻者,敵不知其所守;善守者,敵不知其所攻。微乎微乎,至於無形;神乎神乎,至於無聲,故能為敵之司命。進而不可禦者,沖其虛也;退而不可追者,速而不可及也。故我欲戰,敵雖高壘深溝,不得不與我戰者,攻其所必救也;我不欲戰,雖畫地而守之,敵不得與我戰者,乖其所之也。故形人而我無形,則我專而敵分。我專為一,敵分為十,是以十攻其一也。則我眾敵寡,能以眾擊寡者,則吾之所與戰者約矣。吾所與戰之地不可知,不可知則敵所備者多,敵所備者多,則吾所與戰者寡矣。故備前則後寡,備後則前寡,備左則右寡,備右則左寡,無所不備,則無所不寡。寡者,備人者也;眾者,使人備己者也。故知戰之地,知戰之日,則可千里而會戰;不知戰之地,不知戰日,則左不能救右,右不能救左,前不能救後,後不能救前,而況遠者數十裏,近者數裏乎!以吾度之,越人之兵雖多,亦奚益於勝哉!故曰:勝可為也。敵雖眾,可使無鬥。故策之而知得失之計,候之而知動靜之理,形之而知死生之地,角之而知有餘不足之處。故形兵之極,至於無形。無形則深間不能窺,智者不能謀。因形而措勝於眾,眾不能知。人皆知我所以勝之形,而莫知吾所以制勝之形。故其戰勝不復,而應形於無窮。夫兵形象水,水之行避高而趨下,兵之形避實而擊虛;水因地而制流,兵因敵而制勝。故兵無常勢,水無常形。能因敵變化而取勝者,謂之神。故五行無常勝,四時無常位,日有短長,月有死生。 + +軍爭第七 + +孫子曰: 凡用兵之法,將受命於君,合軍聚眾,交和而舍,莫難於軍爭。軍爭之難者,以迂為直,以患為利。故迂其途,而誘之以利,後人發,先人至,此知迂直之計者也。軍爭為利,軍爭為危。舉軍而爭利則不及,委軍而爭利則輜重捐。是故捲甲而趨,日夜不處,倍道兼行,百裡而爭利,則擒三將軍,勁者先,疲者後,其法十一而至;五十裏而爭利,則蹶上將軍,其法半至;三十裏而爭利,則三分之二至。是故軍無輜重則亡,無糧食則亡,無委積則亡。故不知諸侯之謀者,不能豫交;不知山林、險阻、沮澤之形者,不能行軍;不用鄉導者,不能得地利。故兵以詐立,以利動,以分和為變者也。故其疾如風,其徐如林,侵掠如火,不動如山,難知如陰,動如雷震。掠鄉分眾,廓地分利,懸權而動。先知迂直之計者勝,此軍爭之法也。《軍政》曰:“言不相聞,故為之金鼓;視不相見,故為之旌旗。”夫金鼓旌旗者,所以一民之耳目也。民既專一,則勇者不得獨進,怯者不得獨退,此用眾之法也。故夜戰多金鼓,晝戰多旌旗,所以變人之耳目也。三軍可奪氣,將軍可奪心。是故朝氣銳,晝氣惰,暮氣歸。善用兵者,避其銳氣,擊其惰歸,此治氣者也。以治待亂,以靜待嘩,此治心者也。以近待遠,以佚待勞,以飽待饑,此治力者也。無邀正正之旗,無擊堂堂之陳,此治變者也。故用兵之法,高陵勿向,背丘勿逆,佯北勿從,銳卒勿攻,餌兵勿食,歸師勿遏,圍師遺闕,窮寇勿迫,此用兵之法也。 + +九變第八 + +孫子曰: 凡用兵之法,將受命於君,合軍聚合。泛地無舍,衢地合交,絕地無留,圍地則謀,死地則戰,途有所不由,軍有所不擊,城有所不攻,地有所不爭,君命有所不受。故將通於九變之利者,知用兵矣;將不通九變之利,雖知地形,不能得地之利矣;治兵不知九變之術,雖知五利,不能得人之用矣。是故智者之慮,必雜於利害,雜於利而務可信也,雜於害而患可解也。是故屈諸侯者以害,役諸侯者以業,趨諸侯者以利。故用兵之法,無恃其不來,恃吾有以待之;無恃其不攻,恃吾有所不可攻也。故將有五危,必死可殺,必生可虜,忿速可侮,廉潔可辱,愛民可煩。凡此五者,將之過也,用兵之災也。覆軍殺將,必以五危,不可不察也。 + +行軍第九 + +孫子曰:凡處軍相敵,絕山依穀,視生處高,戰隆無登,此處山之軍也。絕水必遠水,客絕水而來,勿迎之於水內,令半渡而擊之利,欲戰者,無附於水而迎客,視生處高,無迎水流,此處水上之軍也。絕斥澤,唯亟去無留,若交軍於斥澤之中,必依水草而背眾樹,此處斥澤之軍也。平陸處易,右背高,前死後生,此處平陸之軍也。凡此四軍之利,黃帝之所以勝四帝也。凡軍好高而惡下,貴陽而賤陰,養生而處實,軍無百疾,是謂必勝。丘陵堤防,必處其陽而右背之,此兵之利,地之助也。上雨水流至,欲涉者,待其定也。凡地有絕澗、天井、天牢、天羅、天陷、天隙,必亟去之,勿近也。吾遠之,敵近之;吾迎之,敵背之。軍旁有險阻、潢井、蒹葭、小林、蘙薈者,必謹覆索之,此伏姦之所處也。敵近而靜者,恃其險也;遠而挑戰者,欲人之進也;其所居易者,利也;眾樹動者,來也;眾草多障者,疑也;鳥起者,伏也;獸駭者,覆也;塵高而銳者,車來也;卑而廣者,徒來也;散而條達者,樵採也;少而往來者,營軍也;辭卑而備者,進也;辭強而進驅者,退也;輕車先出居其側者,陳也;無約而請和者,謀也;奔走而陳兵者,期也;半進半退者,誘也;杖而立者,饑也;汲而先飲者,渴也;見利而不進者,勞也;鳥集者,虛也;夜呼者,恐也;軍擾者,將不重也;旌旗動者,亂也;吏怒者,倦也;殺馬肉食者,軍無糧也;懸甀不返其舍者,窮寇也;諄諄翕翕,徐與人言者,失眾也;數賞者,窘也;數罰者,困也;先暴而後畏其眾者,不精之至也;來委謝者,欲休息也。兵怒而相迎,久而不合,又不相去,必謹察之。兵非貴益多也,惟無武進,足以並力料敵取人而已。夫惟無慮而易敵者,必擒於人。卒未親而罰之,則不服,不服則難用。卒已親附而罰不行,則不可用。故合之以文,齊之以武,是謂必取。令素行以教其民,則民服;令素不行以教其民,則民不服。令素行者,與眾相得也。 + +地形第十 + +孫子曰:地形有通者、有掛者、有支者、有隘者、有險者、有遠者。我可以往,彼可以來,曰通。通形者,先居高陽,利糧道,以戰則利。可以往,難以返,曰掛。掛形者,敵無備,出而勝之,敵若有備,出而不勝,難以返,不利。我出而不利,彼出而不利,曰支。支形者,敵雖利我,我無出也,引而去之,令敵半出而擊之利。隘形者,我先居之,必盈之以待敵。若敵先居之,盈而勿從,不盈而從之。險形者,我先居之,必居高陽以待敵;若敵先居之,引而去之,勿從也。遠形者,勢均難以挑戰,戰而不利。凡此六者,地之道也,將之至任,不可不察也。凡兵有走者、有馳者、有陷者、有崩者、有亂者、有北者。凡此六者,非天地之災,將之過也。夫勢均,以一擊十,曰走;卒強吏弱,曰馳;吏強卒弱,曰陷;大吏怒而不服,遇敵懟而自戰,將不知其能,曰崩;將弱不嚴,教道不明,吏卒無常,陳兵縱橫,曰亂;將不能料敵,以少合眾,以弱擊強,兵無選鋒,曰北。凡此六者,敗之道也,將之至任,不可不察也。夫地形者,兵之助也。料敵制勝,計險隘遠近,上將之道也。知此而用戰者必勝,不知此而用戰者必敗。故戰道必勝,主曰無戰,必戰可也;戰道不勝,主曰必戰,無戰可也。故進不求名,退不避罪,唯民是保,而利於主,國之寶也。視卒如嬰兒,故可以與之赴深溪;視卒如愛子,故可與之俱死。厚而不能使,愛而不能令,亂而不能治,譬若驕子,不可用也。知吾卒之可以擊,而不知敵之不可擊,勝之半也;知敵之可擊,而不知吾卒之不可以擊,勝之半也;知敵之可擊,知吾卒之可以擊,而不知地形之不可以戰,勝之半也。故知兵者,動而不迷,舉而不窮。故曰:知彼知己,勝乃不殆;知天知地,勝乃可全。 + +九地第十一 + +孫子曰:用兵之法,有散地,有輕地,有爭地,有交地,有衢地,有重地,有泛地,有圍地,有死地。諸侯自戰其地者,為散地;入人之地不深者,為輕地;我得亦利,彼得亦利者,為爭地;我可以往,彼可以來者,為交地;諸侯之地三屬,先至而得天下眾者,為衢地;入人之地深,背城邑多者,為重地;山林、險阻、沮澤,凡難行之道者,為泛地;所由入者隘,所從歸者迂,彼寡可以擊吾之眾者,為圍地;疾戰則存,不疾戰則亡者,為死地。是故散地則無戰,輕地則無止,爭地則無攻,交地則無絕,衢地則合交,重地則掠,泛地則行,圍地則謀,死地則戰。古之善用兵者,能使敵人前後不相及,眾寡不相恃,貴賤不相救,上下不相收,卒離而不集,兵合而不齊。合於利而動,不合於利而止。敢問敵眾而整將來,待之若何曰:先奪其所愛則聽矣。兵之情主速,乘人之不及。由不虞之道,攻其所不戒也。凡為客之道,深入則專。主人不克,掠於饒野,三軍足食。謹養而勿勞,並氣積力,運兵計謀,為不可測。投之無所往,死且不北。死焉不得,士人盡力。兵士甚陷則不懼,無所往則固,深入則拘,不得已則鬥。是故其兵不修而戒,不求而得,不約而親,不令而信,禁祥去疑,至死無所之。吾士無餘財,非惡貨也;無餘命,非惡壽也。令發之日,士卒坐者涕沾襟,偃臥者涕交頤,投之無所往,諸、劌之勇也。故善用兵者,譬如率然。率然者,常山之蛇也。擊其首則尾至,擊其尾則首至,擊其中則首尾俱至。敢問兵可使如率然乎?曰可。夫吳人與越人相惡也,當其同舟而濟而遇風,其相救也如左右手。是故方馬埋輪,未足恃也;齊勇如一,政之道也;剛柔皆得,地之理也。故善用兵者,攜手若使一人,不得已也。將軍之事,靜以幽,正以治,能愚士卒之耳目,使之無知;易其事,革其謀,使人無識;易其居,迂其途,使民不得慮。帥與之期,如登高而去其梯;帥與之深入諸侯之地,而發其機。若驅群羊,驅而往,驅而來,莫知所之。聚三軍之眾,投之於險,此謂將軍之事也。九地之變,屈伸之力,人情之理,不可不察也。凡為客之道,深則專,淺則散。去國越境而師者,絕地也;四徹者,衢地也;入深者,重地也;入淺者,輕地也;背固前隘者,圍地也;無所往者,死地也。是故散地吾將一其志,輕地吾將使之屬,爭地吾將趨其後,交地吾將謹其守,交地吾將固其結,衢地吾將謹其恃,重地吾將繼其食,泛地吾將進其途,圍地吾將塞其闕,死地吾將示之以不活。故兵之情:圍則禦,不得已則鬥,過則從。是故不知諸侯之謀者,不能預交;不知山林、險阻、沮澤之形者,不能行軍;不用鄉導,不能得地利。四五者,一不知,非霸王之兵也。夫霸王之兵,伐大國,則其眾不得聚;威加於敵,則其交不得合。是故不爭天下之交,不養天下之權,信己之私,威加於敵,則其城可拔,其國可隳。施無法之賞,懸無政之令。犯三軍之眾,若使一人。犯之以事,勿告以言;犯之以害,勿告以利。投之亡地然後存,陷之死地然後生。夫眾陷於害,然後能為勝敗。故為兵之事,在順詳敵之意,並敵一向,千里殺將,是謂巧能成事。是故政舉之日,夷關折符,無通其使,厲於廊廟之上,以誅其事。敵人開闔,必亟入之,先其所愛,微與之期,踐墨隨敵,以決戰事。是故始如處女,敵人開戶;後如脫兔,敵不及拒。 + +火攻第十二 + +孫子曰:凡火攻有五:一曰火人,二曰火積,三曰火輜,四曰火庫,五曰火隊。行火必有因,因必素具。發火有時,起火有日。時者,天之燥也。日者,月在箕、壁、翼、軫也。凡此四宿者,風起之日也。凡火攻,必因五火之變而應之:火發於內,則早應之於外;火發而其兵靜者,待而勿攻,極其火力,可從而從之,不可從則上。火可發於外,無待於內,以時發之,火發上風,無攻下風,晝風久,夜風止。凡軍必知五火之變,以數守之。故以火佐攻者明,以水佐攻者強。水可以絕,不可以奪。夫戰勝攻取而不惰其功者凶,命曰“費留”。故曰:明主慮之,良將惰之,非利不動,非得不用,非危不戰。主不可以怒而興師,將不可以慍而攻戰。合於利而動,不合於利而上。怒可以複喜,慍可以複說,亡國不可以複存,死者不可以複生。故明主慎之,良將警之。此安國全軍之道也。 + +用間第十三 + +孫子曰: 凡興師十萬,出征千里,百姓之費,公家之奉,日費千金,內外騷動,怠於道路,不得操事者,七十萬家。相守數年,以爭一日之勝,而愛爵祿百金,不知敵之情者,不仁之至也,非民之將也,非主之佐也,非勝之主也。故明君賢將所以動而勝人,成功出於眾者,先知也。先知者,不可取於鬼神,不可象於事,不可驗於度,必取於人,知敵之情者也。故用間有五:有因間,有內間,有反間,有死間,有生間。五間俱起,莫知其道,是謂神紀,人君之寶也。鄉間者,因其鄉人而用之;內間者,因其官人而用之;反間者,因其敵間而用之;死間者,為誑事於外,令吾聞知之而傳於敵間也;生間者,反報也。故三軍之事,莫親於間,賞莫厚於間,事莫密於間,非聖賢不能用間,非仁義不能使間,非微妙不能得間之實。微哉微哉!無所不用間也。間事未發而先聞者,間與所告者兼死。凡軍之所欲擊,城之所欲攻,人之所欲殺,必先知其守將、左右、謁者、門者、舍人之姓名,令吾間必索知之。敵間之來間我者,因而利之,導而舍之,故反間可得而用也;因是而知之,故鄉間、內間可得而使也;因是而知之,故死間為誑事,可使告敵;因是而知之,故生間可使如期。五間之事,主必知之,知之必在於反間,故反間不可不厚也。昔殷之興也,伊摯在夏;周之興也,呂牙在殷。故明君賢將,能以上智為間者,必成大功。此兵之要,三軍之所恃而動也。 diff --git a/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-euc-kr.txt b/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-euc-kr.txt new file mode 100644 index 0000000..c9ba04c --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-euc-kr.txt @@ -0,0 +1,175 @@ +This file was derived from +http://www.ibrary.co.kr/index.php/book-list/short-stories/34-short-stories-korean/150-2008-04-20-13-22-32 +-------- +[Ұ] + ̷ ΰ ϰ Ѵ. 츮 ִ ̶ 巯 . ϱ ̷ , ¦ 츮 ķ ̷ 츮 տ 𸥴. յ 鿡Դ ڽ ü ٽ δٴ ׷ ⵵ ִ... + +ٽ о . Ĺ ô Ͽ , . 21⸦ 츮鿡 ׷ ƿ ο ó ̴. ׷ ׷? ̷ 𸣰 ְ, ƴ ̴. 쿬 ̴. Ƴ ڴϴ ÷ ... Ƣ ڰ, ׷ ִ. + +[۰ Ұ] + (, 1900-1943) : Ҽ. ѱ Ҽ Ʋ ۰̴. (). ȣ (޻). 1920 ݱ⿡ Ұ üҼ <ó> < ϴ ȸ>, () ٷ <B簨 극> < > 1920 ߹ Ŀ <ǾƳ> <> <> <> ¿ ɰ Ĺ Ȳ ν ε巯 ǰ ǥߴ. < > ̷ 迭 ϴ ǰ̴. 1930 Ŀ ǽİ а ٰ Ҽ ߽ <ž> <ġ()> <ȭ> Ҽ ǥߴ. + +ħϰ 帰 ǰ ϴ ƴ ٰ . + +̳̾߸ ҹ ȿ η°Ų 븩 ϴ ÷Դ ģ ̾. ȿ(ű⵵ ƴ) ô Ŵ 帰 ࿩ մ ϰ 忡 ϸ ϳϳ ִٰ ħ 纹̸ б() ¿ ֱ Ǿ. + +ù , ° - ħ ٶ ׸ ġ ̾. ׾߸ Ⱥپ 浵 ÷ ¥ ȭ Ǭ, Ǵ ټ Ǭ ϰ չٴڿ 긱 ŭ ⻼. ̳ ̶ Ƚ ̶ ׿ 󸶳 . ܵ ְŴϿ ׺ٵ δ Ƴ ׸ ̴. + + Ƴ ħ 𷰰Ÿ Ѿ. 䵵 ⸦ Դٽ ϴ ̴ ø . ¿ ٵ ƴϷε ״ ̶ 𿡰 ־ ̸ ٿ ڲ ´ٴ ڱ () Ͽ. ǻ翡 ݵ , Ͼ ε ° . ̴뵵 ԰ ü ̴. + +׶ ÷  ǿ ¥ ־ ÷ ϸ õ(۰) . ϰ ұ ʾ ä ΰ Ѽ ָԵ Ȥ Ұ ó ϴϸ ׳ , 谡 бٰ ȩ߰ Ͽ. ׶ ÷ ȭ , + +, , պ , Ծ , Ծ , ¼ ̾! ٷ !ϰ ÷ δ ķ. ȩ ٷǸ ̽ . ÷ ÿﵵ ߲߲Ͽ. + + ȯڰ ׷ Դ ʾҴ. ð ʹٰ . + +̷ ! 䵵 Դ , ó԰ ϰ., ߴ ĺҰǸ, ִ ÿġ ʾҴ. + + ִ. δ 翡 ä ( ) ִ. - Ƚ տ ÷ ǬǬϿ. ׷ װɷ ġ ʾҴ. 帣 ̸ ⸧ָӴϰ ָ , б Ƴ . ڿ <η°!> ϰ θ Ҹ . ڱ⸦ ҷ б л ÷ ־. л ¥¥, 빮 󸶿?, . + +Ƹ б 翡 ִ ̷ ̿Ͽ Ϸ ̸. ϿǸ , ְ ؼ 𸣴ٰ ħ ÷ پ̸. ׷ θ ä ؼ , <> 纹ϸ ̷ ÷ Ѿ . + +빮 Դϱ.ϰ ÷ Ͽ. ״ ߿ 嵵 öŸ Ⱑ Ⱦϱ? ó , ° ׸ Ͽϱ? ƴϴ, ƴϴ. ̻ϰԵ ¹ տ ̴.׸ Ƴ Ź б. - ׼ θ 󱼿 ޸ ũ ְϴ , ƿ. п پ־. ̷ µ, Ҹ ߾Ÿ ɱ׷ɱ׷ Ͽ. + +׶ ÷ , д, , Ҹ ϳ. ºٵ ɾ Կ 츱 ˾.ϰ, ½ پϱ ȯڴ , ׷, ׷ Ϳ.ϰ, Ҹ ڸ . + + , ޸ ŭ , Ƴ ÷ տ Ͽ. ׷ 빮 󸶶 ̿?ϰ л η°Ų ٶ󺸸 ȥ㸻, õ ְ, ̵簡., ߾Ÿ. + + ݽÿ. ̿ Ҿ ÷ Կ . θ û ׼ . Ѳ ̷ ݾ ҷ 󸶸ΰ! ׷ Ⱑ ڿ 縣 Ҵ.  ;. ִ ģ ͺٵ ĥ Ͽ. + + ʹ ѵ. ̷ ϸ л Ͽ. + +ƴϿýô. ռ ġ ⼭ űⰡ ÿ Ѵ´ϴ. ̷ ּž.ϰ ۺ 󱼿 귶. + +׷ ޶ ̴ .  մ ׷ ʵ ԰ ìⷯ . + + л ¿ ÷ ٸ ̻ϰ ŻϿ. ѴٴϺ Ͽ.  ٴϺ ġ ij <Ʈ> ̲ Ͽ. ̲⵵ Ͽ. + + ٸ ſ. ڱ ٴٸ ̴. コ . < ƿ. ̷ µ!> ̷ Ϳ ȴ. ׸  ϴ ڱ⸦ 븮 Ͽ. ׷ ϰ  ʹ. ϰ Ҹ ʹ. ̸, ġڱ.ϰ ź θ¢ Ϳ Դ. ÷ η°Ÿ ä Ѻǿ . + +, .ϰ, ÷ Ǵٽ Ͽ. ־ ÷ ٽñ Ͽ. ٸ ߸ ڱ Ӹ ٽɰ . + + ְ ¦ տ 翡, Ǵ ¾ ܰŸ ƴϰ, Դ. γ ⻼. ڽ ۿ ȵǴ  մԿ 㸮 , ȳ ٳɽÿ. ƴ. + +׷ η°Ÿ аŸ ߿ ư ޹̾. 뵿 Ͽ 帥 ľ ָ âڿ, 帣 ʿ  ѱⰡ ھƳ ϸ ̶ 󸶳 ο . ߱ ϳ . ¸ ˼۱׷ ڸ Ͼ Ҵ. + + ! η°Ÿ аŸ Ƹ . ̷ , ҹ̸ ! + +״ ȱ ̳ ϴ ԰ɰŷȴ. ׷ Ӹ ο Ƴ װ <̷ ƴ϶ ó ⸦ ٸ մ ¿ ɴ > ̾. ϰԵ ϱ ׷ ѹ Ϸ. ڱ⸦ ٸ ִٰ ⸦ ص Ǿ. ׷ٰ η°Ų տ . + +׷ ״ غ ̶ ٷ 忡 , ٴϴ ƴ η°Ÿ ڱ ó ϱ Ͽ. 󸶸 ԰, ̳ Ǵ Դ. ߿ մ ϴ ÷ Ӹ θ Ű <> θ , л . ״ ٽ ٰ. + +ƾ, η° ƴ Ÿöÿ? + + л ſ Ȱ Լ ٹ ä ÷ ŵ鶰 ʾҴ. ÷ ϴ ؿ Ǹ, ƾ, ֵ麸 ΰ Ŵ 帮ϴ. Ű.ϰ, ߱߱ϰԵ ִ Ϻ ¦ . + + ̷, ġʰ. Ҹ ° Ƽ. ÷ ÿ ϰ . + + Դ. ÷ Ÿ ̸ 븮 ־. ׷ () Ʋ ʾҴ. ϰ ư ̱ Ͽ Ÿ ϳ ־. ϰ ū ִ° Ƹ պ ȿ ũ Ͽ 忡 з ġ. ÷ . + +η°Ÿ Ÿöÿ. + +ѵ °̸ ϴٰ λ絿 ¿ֱ Ͽ. η°Ű ſ ̻ϰԵ ׸ η°Ű ٽñ ſǸ ̹ ´. ڲ տ Ÿ ٶ . ̳ ٸ ¢ ٴ ۿ . + + η°ű ذ , ϸŭ ȲϿ. 帮 ϴ ħħϰ Ȳȥ ϴ. â ձ ٴ޾Ƽ ״ ο Ҵ. Ϳü ϰ ׷. ׷ ׷ Ƚɿ ƴϿ, ڱ⸦ ģ ƴ ˰ ڵ ηϴ ̴. + +״ ࿡ ٴġ ð ̶ ø ŷȴ. () ̸ Ͽٴ ϰ ;. ״ θθ Ǿ. ġ ڱ - ϰ ޷ ٸ δ ٰ, ٰ ϴ Ͽ. + +׷ ħ 氡 ģ ġ̰ ´. ۿ 󱼿 ȫ , ΰ Ŀݰ Ŵ, 븣 ¦ а, ִ ιؿ ġ ̸ Ųٷ ٿ ÷ dzäϰ ־. + + ÷, ڳ  ϼ׷. ״ . + +׶׺ ̸ ÿ θ¢. Ҹ ϰ ϽϿ. ÷ ģ  ݰ . ڱ⸦ ̳ ⵵ Ͽ. + +ڳ״ ϼ׷. ڳ׵ ̰ ƺ.ϰ, ÷ 켭 . + +д, ٰ . ׷ , ڳ ޸ ° ?  ̸ . + + ϰ ߶Ͽ. ߾ ̴ ܶѲ Թ , 迡 ʺƴ ̸ ̸ ̸ ̸ Ͼ 붱 ϰ þ Źڿ ÷ ڱ ߵ . ̸ ű ִ ̸ ׸ ѵ ÿġ ʾҴ. ϵ ̴ з 붱 ̱⵵ ϰ ߾ ׸ ûϿ. + +ָ âڴ ĸ ڲڲ ̶̶ Ͽ. İ κο ̲ٸ ׸ ׳ Ű Ҵ. ° ׸ ޾Ƶ . ġ̿ ̶ ϰ âڿ ȭϿ. ̴. + + ÷ Ǯ Ͽ. 迡  ҷŸ ξ Ͽ. + +ġ Ǿ ÷ , ״ٴ, 츮 ܾ Ծ, ϼ. ǽ״. + +Ƶ ̳, ׸ ϳ. . Ҵ. + +׷ 󸶸 ΰ? + + , ! ̷ Ⱥξ , Ծ . ̰ µ. + +, ߱, ׸μ. + +̳, ̰ ԰ ,  Ծ.ϰ ġ ͸ ä ̴ θ¢. ׸ ״ ټ ߴ밡Է ޷, ̳, , ʾ. ߴ ƴ. ߴ밡 ġ ϴ Ͽ. ġ ˾ƺ ȭ , ̸ , ̳ ˰.ڸ 㸮 ĩĩ ϴ ¥ ߴ밡 տ ½ . ǰ Ǭ ߱׶ ϸ . + + , . ̷ ϸ Ϻ ݴ´. ÷ ߿ ó Ǵ ũ ٺٰ ҽÿ ϴ ʹ ٴ ҽġ , ! , , ٸٱ .ϰ ġ ִֿ ޾, ! ø !ϸ鼭, Ǯ ģ. ¾ ٽ ̴ Ǭ Ÿ ´´ٴ ¸ϰ . + + ξ ܸ Ҵ. ÷ Լ Ƶ̰ ſ ٵ, ξ, ξ., ƴ. + + ԰ ÷ ġ ġ ´. Ҹ  Ǵ ִ ÷Է . ̴ , ġ, 콺 ̾߱ ϳ ұ. ° 忡 ʾҰڳ. + +׷. + +ٰ Ⱑ Ƶ׷. ׷ 忡 ϸ մ ϳ ¿ ø ʾҳ. ű ħ ̽ л̽ - ٴϿ ư ִ - <> θ ° ְ. ٽ η° Ÿöÿ ϰ հ ϱ Ź Ѹġ ȴ Ƽϸ < ̷ !> Ҹ߸ Ҳ Ҹ, ! + + ÷ ϰԵ Ҳ Ҹ . Ͻÿ . + + , ¼, < !> ̱ Ҹ óŵ , . + + Ҹ . ׷ Ҹ ÷ ½½ Ͽ. + +ġ ̾ ̸ ٶ󺸸, ݹ ϴ ΰ. + + ÷ ڸ 鿩ø, 츮 ׾ٳ. + +, ״ٴ, ? + +̳ . . + + ģ , . + + , ׾, ... ü ij Դٴ, ̾, ̾.ϰ ÷ Ҹ . + +ġ 󱼷, , ϳ ϳ. ׷ , .ϰ ƴ. + +ġ Ѹġ ÷ ۽۽ ̱׷ ´. + +ױ ׾.ϰ ǰ . + +ױ ׾, Ƹ ִܴ. . ӾҴ.ϰ  ջ ġ ´. + + ƴ ΰ. ָճװ δ´ µ.ϰ, ġ̵ Ҿ ÷ ư Ͽ. + + ׾, ׾뵵׷. + + ÷ ȱ Ȯְ Ҹ Ҹ ־ ־. ġ ä ܾ ԰ Դ. ǿ . + + ÷ ߿ 簡 ٴ޾Ҵ. ̶ ص ̿, ü ƴ϶ Ȱ Ҷ ε ޿ ̴. ÷ ֱ⸦ ʾҴ 빮 鿩 װ ϴ ù () - dz찡 ٴ ٸ . + +Ÿ ħ Ҹ . ׸Ÿ Ҹ . ٸ ħ ߸ - ߸ٴϺ ħ ϰ ұϰ ϴ ϴ Ҹ,  Ҹ ̴. û() Ҹ ̿, ܶܶ ϰ Ѿ Ҹ ٴ ͵ Ҵ 𸣸. + +Ȥ ÷ ұ ħ ߴ 𸥴. ׷ 빮 ڸ , , µ ͺ ʾ, .̶ ģ ϴ. ̾߸ ؿ ù Ѿƹ 强() ̴. + +Ͽ ÷ 湮 Ĭ . ϴ ߱ - ڸ ؿ , Ϳ ˳ ܳ, ʳ, ߱Ⱑ ÷ ڸ 񷶴. + +ȿ  ѱ ̵ û ִ ȣ ƴ. + +̷ , ־õ() ̾! ͵ Ͼ . Ҹ Բ ߱ ٸ á. ׷ ߱濡 ä̴ ƴϰ ɰ ־. ̶ Ҹ Ҹ Ͽ. ̰ . 뵵 ׷ ٿ, ٴ ǥ ̴. Ҹ Կ ƴϰ ġ ӿ Ͽ. ٰ ٰ . + +߷ Ƴ Ӹ ޷ ׾߸ ġ ȯ Ӹ , , , ! پ, ! + + + +, ̰ , ƹ . + + +̳, ׾ ̳, . + + + +. , ׾. + +̷ٰ â , ġ ˾ƺڸ, ! ! ٶ ϰ õ , .ϴ ޾. ׷ þ. ÷ ĥ 󱼿 ߾ŷȴ. + + ٳҴµ ϴ, ϴ... ϰԵ ! ϸ... diff --git a/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-utf-8.txt b/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-utf-8.txt new file mode 100644 index 0000000..e10a3d4 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-utf-8.txt @@ -0,0 +1,175 @@ +This file was derived from +http://www.ibrary.co.kr/index.php/book-list/short-stories/34-short-stories-korean/150-2008-04-20-13-22-32 +-------- +[소개] +잔인한 운명은 이렇게 인간을 조롱하곤 한다. 우리가 평소 마음 속 저 깊은 곳에 움켜쥐고 있던 자존심 따위는 어느 한 순간 전혀 무용지물이란 것이 드러나고 만다. 하기야 이렇게 삶의 한 순간, 눈 깜짝할 새에 우리를 후려 갈기고 지나가는 그 진실이 미래의 어느날에는 또 남김없이 우리 눈 앞에 펼쳐질지도 모른다. 죽음을 앞둔 사람들에게는 자신의 삶 전체가 한 순간에 다시 보인다는 그런 얘기도 있던데... + +다시 읽어보니 끔찍한 생각도 든다. 식민지 시대의 암울한 삶, 그 끈끈한 냄새를 피할 수 없다. 21세기를 사는 우리들에겐 그런 냄새는 아예 인연이 없는 것처럼 느껴질 수도 있을 것이다. 그러나 과연 그럴까? 이런 냄새를 모르고 평생 사는 사람도 있겠지만, 전혀 관련이 없는 것은 아닐 것이다. 그저 우연일 뿐이다. 아내를 박대하는 김 첨지의 모습... 요새 같으면 간이 배 밖으로 튀어나온 남자겠지만, 그래도 그 애정은 더 진한 것일 수도 있다. + +[작가 소개] +현 진 건(玄鎭健, 1900-1943) : 소설가. 한국 사실주의 단편소설의 기틀을 다진 작가이다. 본관은 연주(延州). 아호는 빙허(憑虛). 1920년대 전반기에는 자전적 요소가 강한 개인적 체험소설인 <빈처> <술 권하는 사회>, 성(性)의 문제와 애정문제를 다룬 <B사감과 러브레터> <새빨간 웃음> 등이 있으며 1920년대 중반 이후에는 <피아노> <우편국에서> <불> <고향> 등 세태에의 관심과 식민지 상황하의 현실인식이 두드러진 작품을 많이 발표했다. <운수 좋은 날>도 이러한 계열에 속하는 작품이다. 1930년대 이후에는 역사의식과 예언주의적 문학관에 근거한 역사소설 중심의 <무영탑> <흑치상지(黑齒常之)> <선화공주> 등 장편소설을 발표했다. + +새침하게 흐린 품이 눈이 올 듯하더니 눈은 아니 오고 얼다가 만 비가 추적추적 내리었다. + +이날이야말로 동소문 안에서 인력거꾼 노릇을 하는 김 첨지에게는 오래간만에도 닥친 운수 좋은 날이었다. 문안에(거기도 문밖은 아니지만) 들어간답시는 앞집 마나님을 전찻길까지 모셔다 드린 것을 비롯으로 행여나 손님이 있을까 하고 정류장에서 어정어정하며 내리는 사람 하나하나에게 거의 비는 듯한 눈결을 보내고 있다가 마침내 교원인 듯한 양복장이를 동광학교(東光學校)까지 태워다 주기로 되었다. + +첫번에 삼십 전, 둘째 번에 오십 전 - 아침 댓바람에 그리 흔치 않은 일이었다. 그야말로 재수가 옴붙어서 근 열흘 동안 돈 구경도 못한 김 첨지는 십 전짜리 백통화 서 푼, 또는 다섯 푼이 찰깍하고 손바닥에 떨어질 제 거의 눈물을 흘릴 만큼 기뻤었다. 더구나 이날 이때에 이 팔십 전이라는 돈이 그에게 얼마나 유용한지 몰랐다. 컬컬한 목에 모주 한 잔도 적실 수 있거니와 그보다도 앓는 아내에게 설렁탕 한 그릇도 사다줄 수 있음이다. + +그의 아내가 기침으로 쿨럭거리기는 벌써 달포가 넘었다. 조밥도 굶기를 먹다시피 하는 형편이니 물론 약 한 첩 써 본 일이 없다. 구태여 쓰려면 못 쓸 바도 아니로되 그는 병이란 놈에게 약을 주어 보내면 재미를 붙여서 자꾸 온다는 자기의 신조(信條)에 어디까지 충실하였다. 따라서 의사에게 보인 적이 없으니 무슨 병인지는 알 수 없으되 반듯이 누워 가지고, 일어나기는 새로 모로도 못 눕는걸 보면 중증은 중증인 듯. 병이 이대도록 심해지기는 열흘 전에 조밥을 먹고 체한 때문이다. + +그때도 김 첨지가 오래간만에 돈을 얻어서 좁쌀 한 되와 십 전짜리 나무 한 단을 사다 주었더니 김 첨지의 말에 의지하면 그 오라질 년이 천방지축(天方地軸)으로 남비에 대고 끓였다. 마음은 급하고 불길은 달지 않아 채 익지도 않은 것을 그 오라질 년이 숟가락은 고만두고 손으로 움켜서 두 뺨에 주먹덩이 같은 혹이 불거지도록 누가 빼앗을 듯이 처박질 하더니만 그날 저녁부터 가슴이 땅긴다, 배가 켕긴다고 눈을 홉뜨고 지랄병을 하였다. 그때 김 첨지는 열화와 같이 성을 내며, + +“에이, 오라질 년, 조롱복은 할 수가 없어, 못 먹어 병, 먹어서 병, 어쩌란 말이야! 왜 눈을 바루 뜨지 못해!”하고 김 첨지는 앓는 이의 뺨을 한 번 후려갈겼다. 홉뜬 눈은 조금 바루어졌건만 이슬이 맺히었다. 김 첨지의 눈시울도 뜨끈뜨끈하였다. + +이 환자가 그러고도 먹는 데는 물리지 않았다. 사흘 전부터 설렁탕 국물이 마시고 싶다고 남편을 졸랐다. + +“이런 오라질 년! 조밥도 못 먹는 년이 설렁탕은, 또 처먹고 지랄병을 하게.”라고, 야단을 쳐보았건만, 못 사주는 마음이 시원치는 않았다. + +인제 설렁탕을 사줄 수도 있다. 앓는 어미 곁에서 배고파 보채는 개똥이(세 살먹이)에게 죽을 사줄 수도 있다. - 팔십 전을 손에 쥔 김 첨지의 마음은 푼푼하였다. 그러나 그의 행운은 그걸로 그치지 않았다. 땀과 빗물이 섞여 흐르는 목덜미를 기름주머니가 다 된 왜목 수건으로 닦으며, 그 학교 문을 돌아나올 때였다. 뒤에서 <인력거!> 하고 부르는 소리가 난다. 자기를 불러 멈춘 사람이 그 학교 학생인 줄 김 첨지는 한 번 보고 짐작할 수 있었다. 그 학생은 다짜고짜로, “남대문 정거장까지 얼마요?”라고, 물었다. + +아마도 그 학교 기숙사에 있는 이로 동기방학을 이용하여 귀향하려 함이리라. 오늘 가기로 작정은 하였건만 비는 오고, 짐은 있고 해서 어찌할 줄 모르다가 마침 김 첨지를 보고 뛰어나왔음이리라. 그렇지 않으면 왜 구두를 채 신지 못해서 질질 끌고, 비록 <고구라> 양복일망정 노박이로 비를 맞으며 김첨지를 뒤쫓아 나왔으랴. + +“남대문 정거장까지 말씀입니까.”하고 김 첨지는 잠깐 주저하였다. 그는 이 우중에 우장도 없이 그 먼 곳을 철벅거리고 가기가 싫었음일까? 처음 것, 둘째 것으로 그만 만족하였음일까? 아니다, 결코 아니다. 이상하게도 꼬리를 맞물고 덤비는 이 행운 앞에 조금 겁이 났음이다.그리고 집을 나올 제 아내의 부탁이 마음에 켕기었다. - 앞집 마나님한테서 부르러 왔을 제 병인은 그 뼈만 남은 얼굴에 유일의 생물 같은 유달리 크고 움폭한 눈에 애걸하는 빛을 띠우며, “오늘은 나가지 말아요. 제발 덕분에 집에 붙어있어요. 내가 이렇게 아픈데……”라고, 모기 소리같이 중얼거리고 숨을 걸그렁걸그렁 하였다. + +그때에 김 첨지는 대수롭지 않은 듯이, “압다, 젠장맞을 년, 별 빌어먹을 소리를 다 하네. 맞붙들고 앉았으면 누가 먹여 살릴 줄 알아.”하고, 훌쩍 뛰어나오려니까 환자는 붙잡을 듯이 팔을 내저으며, “나가지 말라도 그래, 그러면 일찌기 들어와요.”하고, 목메인 소리가 뒤를 따랐다. + +정거장까지 가잔 말을 들은 순간에 경련적으로 떠는 손, 유달리 큼직한 눈, 울 듯한 아내의 얼굴이 김 첨지의 눈앞에 어른어른하였다. “그래 남대문 정거장까지 얼마란 말이요?”하고 학생은 초조한 듯이 인력거꾼의 얼굴을 바라보며 혼잣말같이, “인천 차가 열 한 점에 있고, 그 다음에는 새로 두 점이든가.”라고, 중얼거린다. + +“일 원 오십 전만 줍시요.” 이 말이 저도 모를 사이에 불쑥 김 첨지의 입에서 떨어졌다. 제 입으로 부르고도 스스로 그 엄청난 돈 액수에 놀래었다. 한꺼번에 이런 금액을 불러라도 본 지가 그 얼마만인가! 그러자 그 돈 벌 용기가 병자에 대한 염려를 사르고 말았다. 설마 오늘 내로 어떠랴 싶었다. 무슨 일이 있더라도 제일 제이의 행운을 곱친 것보다도 오히려 갑절이 많은 이 행운을 놓칠 수 없다 하였다. + +“일 원 오십 전은 너무 과한데.” 이런 말을 하며 학생은 고개를 기웃하였다. + +“아니올시다. 잇수로 치면 여기서 거기가 시오리가 넘는답니다. 또 이런 진 날에 좀더 주셔야지요.”하고 빙글빙글 웃는 차부의 얼굴에는 숨길 수 없는 기쁨이 넘쳐 흘렀다. + +“그러면 달라는 대로 줄 터이니 빨리 가요.” 관대한 어린 손님은 그런 말을 남기고 총총히 옷도 입고 짐도 챙기러 갈 데로 갔다. + +그 학생을 태우고 나선 김 첨지의 다리는 이상하게 거뿐하였다. 달음질을 한다느니보다 거의 나는 듯하였다. 바퀴도 어떻게 속히 도는지 군다느니보다 마치 얼음을 지쳐나가는 <스케이트> 모양으로 미끄러져 가는 듯하였다. 얼은 땅에 비가 내려 미끄럽기도 하였지만. + +이윽고 끄는 이의 다리는 무거워졌다. 자기 집 가까이 다다른 까닭이다. 새삼스러운 염려가 그의 가슴을 눌렀다. <오늘은 나가지 말아요. 내가 이렇게 아픈데!> 이런 말이 잉잉 그의 귀에 울렸다. 그리고 병자의 움쑥 들어간 눈이 원망하는 듯이 자기를 노리는 듯하였다. 그러자 엉엉하고 우는 개똥이의 곡성을 들은 듯싶다. 딸국딸국 하고 숨 모으는 소리도 나는 듯싶다.“왜 이리우, 기차 놓치겠구먼.”하고 탄 이의 초조한 부르짖음이 간신히 그의 귀에 들어왔다. 언뜻 깨달으니 김 첨지는 인력거를 쥔 채 길 한복판에 엉거주춤 멈춰있지 않은가. + +“예, 예.”하고, 김 첨지는 또다시 달음질하였다. 집이 차차 멀어갈수록 김 첨지의 걸음에는 다시금 신이 나기 시작하였다. 다리를 재게 놀려야만 쉴새없이 자기의 머리에 떠오르는 모든 근심과 걱정을 잊을 듯이. + +정거장까지 끌어다주고 그 깜짝 놀란 일 원 오십 전을 정말 제 손에 쥠에, 제 말마따나 십 리나 되는 길을 비를 맞아 가며 질퍽거리고 온 생각은 아니하고, 거저나 얻은 듯이 고마왔다. 졸부나 된 듯이 기뻤다. 제자식 뻘밖에 안되는 어린 손님에게 몇 번 허리를 굽히며, “안녕히 다녀옵시요.”라고 깍듯이 재우쳤다. + +그러나 빈 인력거를 털털거리며 이 우중에 돌아갈 일이 꿈밖이었다. 노동으로 하여 흐른 땀이 식어지자 굶주린 창자에서, 물 흐르는 옷에서 어슬어슬 한기가 솟아나기 비롯하매 일 원 오십 전이란 돈이 얼마나 괜찮고 괴로운 것인 줄 절절히 느끼었다. 정거장을 떠나는 그의 발길은 힘 하나 없었다. 온몸이 옹송그려지며 당장 그 자리에 엎어져 못 일어날 것 같았다. + +“젠장맞을 것! 이 비를 맞으며 빈 인력거를 털털거리고 돌아를 간담. 이런 빌어먹을, 제 할미를 붙을 비가 왜 남의 상판을 딱딱 때려!” + +그는 몹시 홧증을 내며 누구에게 반항이나 하는 듯이 게걸거렸다. 그럴 즈음에 그의 머리엔 또 새로운 광명이 비쳤나니 그것은 <이러구 갈 게 아니라 이 근처를 빙빙 돌며 차 오기를 기다리면 또 손님을 태우게 될는지도 몰라>란 생각이었다. 오늘 운수가 괴상하게도 좋으니까 그런 요행이 또한번 없으리라고 누가 보증하랴. 꼬리를 굴리는 행운이 꼭 자기를 기다리고 있다고 내기를 해도 좋을 만한 믿음을 얻게 되었다. 그렇다고 정거장 인력거꾼의 등살이 무서우니 정거장 앞에 섰을 수는 없었다. + +그래 그는 이전에도 여러 번 해본 일이라 바로 정거장 앞 전차 정류장에서 조금 떨어지게, 사람 다니는 길과 전찻길 틈에 인력거를 세워놓고 자기는 그 근처를 빙빙 돌며 형세를 관망하기로 하였다. 얼마만에 기차는 왔고, 수십 명이나 되는 손이 정류장으로 쏟아져 나왔다. 그 중에서 손님을 물색하는 김 첨지의 눈엔 양머리에 뒤축 높은 구두를 신고 <망토>까지 두른 기생 퇴물인 듯, 난봉 여학생인 듯한 여편네의 모양이 띄었다. 그는 슬근슬근 그 여자의 곁으로 다가들었다. + +“아씨, 인력거 아니 타시랍시요?” + +그 여학생인지 뭔지가 한참은 매우 탯갈을 빼며 입술을 꼭 다문 채 김 첨지를 거들떠보지도 않았다. 김 첨지는 구걸하는 거지나 무엇같이 연해연방 그의 기색을 살피며, “아씨, 정거장 애들보담 아주 싸게 모셔다 드리겠읍니다. 댁이 어디신가요.”하고, 추근추근하게도 그 여자의 들고 있는 일본식 버들고리짝에 제 손을 대었다. + +“왜 이래, 남 귀치않게.” 소리를 벽력같이 지르고는 돌아선다. 김 첨지는 어랍시요 하고 물러섰다. + +전차는 왔다. 김 첨지는 원망스럽게 전차 타는 이를 노리고 있었다. 그러나 그의 예감(豫感)은 틀리지 않았다. 전차가 빡빡하게 사람을 싣고 움직이기 시작하였을 때 타고 남은 손 하나이 있었다. 굉장하게 큰 가방을 들고 있는걸 보면 아마 붐비는 차 안에 짐이 크다 하여 차장에게 밀려내려온 눈치였다. 김 첨지는 대어섰다. + +“인력거를 타시랍시요.” + +한동안 값으로 승강이를 하다가 육십 전에 인사동까지 태워다주기로 하였다. 인력거가 무거워지매 그의 몸은 이상하게도 가벼워졌고 그리고 또 인력거가 가벼워지니 몸은 다시금 무거워졌건만 이번에는 마음조차 초조해 온다. 집의 광경이 자꾸 눈앞에 어른거리어 인제 요행을 바랄 여유도 없었다. 나무 등걸이나 무엇 같고 제 것 같지도 않은 다리를 연해 꾸짖으며 갈팡질팡 뛰는 수밖에 없었다. + +저놈의 인력거군이 저렇게 술이 취해가지고 이 진 땅에 어찌 가노, 라고 길 가는 사람이 걱정을 하리만큼 그의 걸음은 황급하였다. 흐리고 비오는 하늘은 어둠침침하게 벌써 황혼에 가까운 듯하다. 창경원 앞까지 다달아서야 그는 턱에 닿은 숨을 돌리고 걸음도 늦추잡았다. 한 걸음 두 걸음 집이 가까와올수록 그의 마음조차 괴상하게 누그러웠다. 그런데 이 누그러움은 안심에서 오는 게 아니요, 자기를 덮친 무서운 불행을 빈틈없이 알게 될 때가 박두한 것을 두려워하는 마음에서 오는 것이다. + +그는 불행에 다닥치기 전 시간을 얼마쯤이라도 늘리려고 버르적거렸다. 기적(奇蹟)에 가까운 벌이를 하였다는 기쁨을 할 수 있으면 오래 지니고 싶었다. 그는 두리번두리번 사면을 살피었다. 그 모양은 마치 자기 집 - 곧 불행을 향하고 달려가는 제 다리를 제 힘으로는 도저히 어찌할 수 없으니 누구든지 나를 좀 잡아 다고, 구해 다고 하는 듯하였다. + +그럴 즈음에 마침 길가 선술집에서 그의 친구 치삼이가 나온다. 그의 우글우글 살찐 얼굴에 주홍이 돋는 듯, 온 턱과 뺨을 시커멓게 구레나룻이 덮였거늘, 노르탱탱한 얼굴이 바짝 말라서 여기저기 고랑이 패고, 수염도 있대야 턱밑에만 마치 솔잎 송이를 거꾸로 붙여놓은 듯한 김 첨지의 풍채하고는 기이한 대상을 짓고 있었다. + +“여보게 김 첨지, 자네 문안 들어갔다 오는 모양일세그려. 돈 많이 벌었을 테니 한 잔 빨리게.” + +뚱뚱보는 말라깽이를 보든 맡에 부르짖었다. 그 목소리는 몸짓과 딴판으로 연하고 싹싹하였다. 김 첨지는 이 친구를 만난 게 어떻게 반가운지 몰랐다. 자기를 살려준 은인이나 무엇같이 고맙기도 하였다. + +“자네는 벌써 한잔 한 모양일세그려. 자네도 오늘 재미가 좋아보이.”하고, 김 첨지는 얼굴을 펴서 웃었다. + +“압다, 재미 안 좋다고 술 못 먹을 낸가. 그런데 여보게, 자네 왼몸이 어째 물독에 빠진 새앙쥐 같은가? 어서 이리 들어와 말리게.” + +선술집은 훈훈하고 뜨뜻하였다. 추어탕을 끓이는 솥뚜껑을 열 적마다 뭉게뭉게 떠오르는 흰 김, 석쇠에서 뻐지짓뻐지짓 구워지는 너비아니 구이며 제육이며 간이며 콩팥이며 북어며 빈대떡……이 너저분하게 늘어놓인 안주 탁자에 김 첨지는 갑자기 속이 쓰려서 견딜 수 없었다. 마음대로 할 양이면 거기 있는 모든 먹음 먹이를 모조리 깡그리 집어삼켜도 시원치 않았다. 하되 배고픈 이는 위선 분량 많은 빈대떡 두 개를 쪼이기도 하고 추어탕을 한 그릇 청하였다. + +주린 창자는 음식맛을 보더니 더욱더욱 비어지며 자꾸자꾸 들이라들이라 하였다. 순식간에 두부와 미꾸리 든 국 한 그릇을 그냥 물같이 들이키고 말았다. 세째 그릇을 받아들었을 제 데우던 막걸이 곱배기 두 잔이 더웠다. 치삼이와 같이 마시자 원원히 비었던 속이라 찌르르하고 창자에 퍼지며 얼굴이 화끈하였다. 눌러 곱배기 한 잔을 또 마셨다. + +김 첨지의 눈은 벌써 개개 풀리기 시작하였다. 석쇠에 얹힌 떡 두 개를 숭덩숭덩 썰어서 볼을 불룩거리며 또 곱배기 두 잔을 부어라 하였다. + +치삼은 의아한 듯이 김 첨지를 보며, “여보게 또 붓다니, 벌써 우리가 넉 잔씩 먹었네, 돈이 사십 전일세.”라고 주의시켰다. + +“아따 이놈아, 사십 전이 그리 끔찍하냐. 오늘 내가 돈을 막 벌었어. 참 오늘 운수가 좋았느니.” + +“그래 얼마를 벌었단 말인가?” + +“삼십 원을 벌었어, 삼십 원을! 이런 젠장맞을 술을 왜 안부어……괜찮다 괜찮다, 막 먹어도 상관이 없어. 오늘 돈 산더미같이 벌었는데.” + +“어, 이 사람 취했군, 그만두세.” + +“이놈아, 이걸 먹고 취할 내냐, 어서 더 먹어.”하고는 치삼의 귀를 잡아채며 취한 이는 부르짖었다. 그리고 술을 붓는 열 다섯 살 됨직한 중대가리에게로 달려들며, “이놈, 오라질 놈, 왜 술을 붓지 않어.”라고 야단을 쳤다. 중대가리는 히히 웃고 치삼을 보며 문의하는 듯이 눈짓을 하였다. 주정꾼이 눈치를 알아보고 화를 버럭내며, “에미를 붙을 이 오라질 놈들 같으니, 이놈 내가 돈이 없을 줄 알고.”하자마자 허리춤을 훔칫훔칫 하더니 일 원짜리 한 장을 꺼내어 중대가리 앞에 펄쩍 집어던졌다. 그 사품에 몇 푼 은전이 잘그랑 하며 떨어진다. + +“여보게 돈 떨어졌네, 왜 돈을 막 끼얹나.” 이런 말을 하며 일변 돈을 줍는다. 김 첨지는 취한 중에도 돈의 거처를 살피는 듯이 눈을 크게 떠서 땅을 내려다보다가 불시에 제 하는 짓이 너무 더럽다는 듯이 고개를 소스라치자 더욱 성을 내며, “봐라 봐! 이 더러운 놈들아, 내가 돈이 없나, 다리뼉다구를 꺾어놓을 놈들 같으니.”하고 치삼의 주워주는 돈을 받아, “이 원수엣 돈! 이 육시를 할 돈!”하면서, 풀매질을 친다. 벽에 맞아 떨어진 돈은 다시 술 끓이는 양푼에 떨어지며 정당한 매를 맞는다는 듯이 쨍하고 울었다. + +곱배기 두 잔은 또 부어질 겨를도 없이 말려가고 말았다. 김 첨지는 입술과 수염에 붙은 술을 빨아들이고 나서 매우 만족한 듯이 그 솔잎 송이 수염을 쓰다듬으며, “또 부어, 또 부어.”라고, 외쳤다. + +또 한 잔 먹고 나서 김 첨지는 치삼의 어깨를 치며 문득 껄껄 웃는다. 그 웃음 소리가 어떻게 컸는지 술집에 있는 이의 눈은 모두 김 첨지에게로 몰리었다. 웃는 이는 더욱 웃으며, “여보게 치삼이, 내 우스운 이야기 하나 할까. 오늘 손을 태고 정거장에까지 가지 않았겠나.” + +“그래서.” + +“갔다가 그저 오기가 안 됐데그려. 그래 전차 정류장에서 어름어름하며 손님 하나를 태울 궁리를 하지 않았나. 거기 마침 마나님이신지 여학생님이신지 - 요새야 어디 논다니와 아가씨를 구별할 수가 있던가 - <망토>를 두르고 비를 맞고 서 있겠지. 슬근슬근 가까이 가서 인력거 타시랍시요 하고 손가방을 받으랴니까 내 손을 탁 뿌리치고 홱 돌아서더니만 <왜 남을 이렇게 귀찮게 굴어!> 그 소리야말로 꾀꼬리 소리지, 허허!” + +김 첨지는 교묘하게도 정말 꾀꼬리 같은 소리를 내었다. 모든 사람은 일시에 웃었다. + +“빌어먹을 깍쟁이 같은 년, 누가 저를 어쩌나, <왜 남을 귀찮게 굴어!> 어이구 소리가 처신도 없지, 허허.” + +웃음 소리들은 높아졌다. 그러나 그 웃음 소리들이 사라지기 전에 김 첨지는 훌쩍훌쩍 울기 시작하였다. + +치삼은 어이없이 주정뱅이를 바라보며, “금방 웃고 지랄을 하더니 우는 건 또 무슨 일인가.” + +김 첨지는 연해 코를 들여마시며, “우리 마누라가 죽었다네.” + +“뭐, 마누라가 죽다니, 언제?” + +“이놈아 언제는. 오늘이지.” + +“엑기 미친 놈, 거짓말 말아.” + +“거짓말은 왜, 참말로 죽었어, 참말로... 마누라 시체를 집어 뻐들쳐놓고 내가 술을 먹다니, 내가 죽일 놈이야, 죽일 놈이야.”하고 김 첨지는 엉엉 소리를 내어 운다. + +치삼은 흥이 조금 깨어지는 얼굴로, “원 이 사람이, 참말을 하나 거짓말을 하나. 그러면 집으로 가세, 가.”하고 우는 이의 팔을 잡아당기었다. + +치삼의 끄는 손을 뿌리치더니 김 첨지는 눈물이 글썽글썽한 눈으로 싱그레 웃는다. + +“죽기는 누가 죽어.”하고 득의가 양양. + +“죽기는 왜 죽어, 생때같이 살아만 있단다. 그 오라질 년이 밥을 죽이지. 인제 나한테 속았다.”하고 어린애 모양으로 손뼉을 치며 웃는다. + +“이 사람이 정말 미쳤단 말인가. 나도 아주먼네가 앓는단 말은 들었는데.”하고, 치삼이도 어느 불안을 느끼는 듯이 김 첨지에게 또 돌아가라고 권하였다. + +“안 죽었어, 안 죽었대도그래.” + +김 첨지는 홧증을 내며 확신있게 소리를 질렀으되 그 소리엔 안 죽은 것을 믿으려고 애쓰는 가락이 있었다. 기어이 일 원어치를 채워서 곱배기 한 잔씩 더 먹고 나왔다. 궂은 비는 의연히 추적추적 내린다. + +김 첨지는 취중에도 설렁탕을 사가지고 집에 다달았다. 집이라 해도 물론 셋집이요, 또 집 전체를 세든 게 아니라 안과 뚝떨어진 행랑방 한 간을 빌려 든 것인데 물을 길어대고 한 달에 일 원씩 내는 터이다. 만일 김 첨지가 주기를 띠지 않았던들 한 발을 대문에 들여놓았을 제 그곳을 지배하는 무시무시한 정적(靜寂) - 폭풍우가 지나간 뒤의 바다 같은 정적에 다리가 떨렸으리라. + +쿨룩거리는 기침 소리도 들을 수 없다. 그르렁거리는 숨소리조차 들을 수 없다. 다만 이 무덤같은 침묵을 깨뜨리는 - 깨뜨린다느니보다 한층 더 침묵을 깊게 하고 불길하게 하는 빡빡하는 그윽한 소리, 어린애의 젖 빠는 소리가 날 뿐이다. 만일 청각(聽覺)이 예민한 이 같으면 그 빡빡 소리는 빨 따름이요, 꿀떡꿀떡 하고 젖 넘어가는 소리가 없으니 빈 젖을 빤다는 것도 짐작할는지 모르리라. + +혹은 김 첨지도 이 불길한 침묵을 짐작했는지도 모른다. 그렇지 않으면 대문에 들어서자마자 전에 없이, “이 난장 맞을 년, 남편이 들어오는데 나와보지도 않아, 이 오라질 년.”이라고 고함을 친 게 수상하다. 이 고함이야말로 제 몸을 엄습해오는 무시무시한 증을 쫓아버리려는 허장성세(虛張聲勢)인 까닭이다. + +하여간 김 첨지는 방문을 왈칵 열었다. 구역을 나게 하는 추기 - 떨어진 삿자리 밑에서 나온 먼지내, 빨지 않은 기저귀에서 나는 똥내와 오줌내, 가지각색 때가 케케히 앉은 옷내, 병인의 땀 썩은 내가 섞인 추기가 무딘 김 첨지의 코를 찔렀다. + +방안에 들어서며 설렁탕을 한구석에 놓을 사이도 없이 주정군은 목청을 있는 대로 다 내어 호통을 쳤다. + +“이런 오라질 년, 주야장천(晝夜長川) 누워만 있으면 제일이야! 남편이 와도 일어나지를 못해.”라는 소리와 함께 발길로 누운 이의 다리를 몹시 찼다. 그러나 발길에 채이는 건 사람의 살이 아니고 나무등걸과 같은 느낌이 있었다. 이때에 빽빽 소리가 응아 소리로 변하였다. 개똥이가 물었던 젖을 빼어놓고 운다. 운대도 온 얼굴을 찡그려 붙여서, 운다는 표정을 할 뿐이다. 응아 소리도 입에서 나는 게 아니고 마치 뱃속에서 나는 듯하였다. 울다가 울다가 목도 잠겼고 또 울 기운조차 시진한 것 같다. + +발로 차도 그 보람이 없는 걸 보자 남편은 아내의 머리맡으로 달려들어 그야말로 까치집 같은 환자의 머리를 꺼들어 흔들며, “이 년아, 말을 해, 말을! 입이 붙었어, 이 오라질 년!” + +“…” + +“으응, 이것 봐, 아무 말이 없네.” +“…” + +“이년아, 죽었단 말이냐, 왜 말이 없어.” + +“…” + +“으응. 또 대답이 없네, 정말 죽었나버이.” + +이러다가 누운 이의 흰 창을 덮은, 위로 치뜬 눈을 알아보자마자, “이 눈깔! 이 눈깔! 왜 나를 바라보지 못하고 천정만 보느냐, 응.”하는 말 끝엔 목이 메었다. 그러자 산 사람의 눈에서 떨어진 닭의 똥 같은 눈물이 죽은 이의 뻣뻣한 얼굴을 어룽어룽 적시었다. 문득 김 첨지는 미칠 듯이 제 얼굴을 죽은 이의 얼굴에 한테 비비대며 중얼거렸다. + +“설렁탕을 사다놓았는데 왜 먹지를 못하니, 왜 먹지를 못하니... 괴상하게도 오늘은! 운수가 좋더니만... ” diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/all_test.go b/vendor/golang.org/x/text/encoding/traditionalchinese/all_test.go new file mode 100644 index 0000000..3825c76 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/traditionalchinese/all_test.go @@ -0,0 +1,114 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package traditionalchinese + +import ( + "fmt" + "io/ioutil" + "strings" + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/enctest" + "golang.org/x/text/transform" +) + +func dec(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Decode", e.NewDecoder(), nil +} +func enc(e encoding.Encoding) (dir string, t transform.Transformer, err error) { + return "Encode", e.NewEncoder(), internal.ErrASCIIReplacement +} + +func TestNonRepertoire(t *testing.T) { + testCases := []struct { + init func(e encoding.Encoding) (string, transform.Transformer, error) + e encoding.Encoding + src, want string + }{ + {dec, Big5, "\x80", "\ufffd"}, + {dec, Big5, "\x81", "\ufffd"}, + {dec, Big5, "\x81\x30", "\ufffd\x30"}, + {dec, Big5, "\x81\x40", "\ufffd"}, + {dec, Big5, "\x81\xa0", "\ufffd"}, + {dec, Big5, "\xff", "\ufffd"}, + + {enc, Big5, "갂", ""}, + {enc, Big5, "a갂", "a"}, + {enc, Big5, "\u43f0갂", "\x87@"}, + } + for _, tc := range testCases { + dir, tr, wantErr := tc.init(tc.e) + t.Run(fmt.Sprintf("%s/%v/%q", dir, tc.e, tc.src), func(t *testing.T) { + dst := make([]byte, 100) + src := []byte(tc.src) + for i := 0; i <= len(tc.src); i++ { + nDst, nSrc, err := tr.Transform(dst, src[:i], false) + if err != nil && err != transform.ErrShortSrc && err != wantErr { + t.Fatalf("error on first call to Transform: %v", err) + } + n, _, err := tr.Transform(dst[nDst:], src[nSrc:], true) + nDst += n + if err != wantErr { + t.Fatalf("(%q|%q): got %v; want %v", tc.src[:i], tc.src[i:], err, wantErr) + } + if got := string(dst[:nDst]); got != tc.want { + t.Errorf("(%q|%q):\ngot %q\nwant %q", tc.src[:i], tc.src[i:], got, tc.want) + } + } + }) + } +} + +func TestBasics(t *testing.T) { + // The encoded forms can be verified by the iconv program: + // $ echo 月日は百代 | iconv -f UTF-8 -t SHIFT-JIS | xxd + testCases := []struct { + e encoding.Encoding + encPrefix string + encSuffix string + encoded string + utf8 string + }{{ + e: Big5, + encoded: "A\x87\x40\x87\x41\x87\x45\xa1\x40\xfe\xfd\xfe\xfeZ\xa3\xe1", + utf8: "A\u43f0\u4c32\U00027267\u3000\U0002910d\u79d4Z€", + }, { + e: Big5, + encoded: "\xaa\xe1\xb6\xa1\xa4\x40\xb3\xfd\xb0\x73\xa1\x41\xbf\x57\xb0\x75" + + "\xb5\x4c\xac\xdb\xbf\xcb\xa1\x43", + utf8: "花間一壺酒,獨酌無相親。", + }} + + for _, tc := range testCases { + enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, "", "") + } +} + +func TestFiles(t *testing.T) { enctest.TestFile(t, Big5) } + +func BenchmarkEncoding(b *testing.B) { enctest.Benchmark(b, Big5) } + +// TestBig5CircumflexAndMacron tests the special cases listed in +// http://encoding.spec.whatwg.org/#big5 +// Note that these special cases aren't preserved by round-tripping through +// decoding and encoding (since +// http://encoding.spec.whatwg.org/index-big5.txt does not have an entry for +// U+0304 or U+030C), so we can't test this in TestBasics. +func TestBig5CircumflexAndMacron(t *testing.T) { + src := "\x88\x5f\x88\x60\x88\x61\x88\x62\x88\x63\x88\x64\x88\x65\x88\x66 " + + "\x88\xa2\x88\xa3\x88\xa4\x88\xa5\x88\xa6" + want := "ÓǑÒ\u00ca\u0304Ế\u00ca\u030cỀÊ " + + "ü\u00ea\u0304ế\u00ea\u030cề" + dst, err := ioutil.ReadAll(transform.NewReader( + strings.NewReader(src), Big5.NewDecoder())) + if err != nil { + t.Fatal(err) + } + if got := string(dst); got != want { + t.Fatalf("\ngot %q\nwant %q", got, want) + } +} diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go b/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go new file mode 100644 index 0000000..1fcddde --- /dev/null +++ b/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go @@ -0,0 +1,199 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package traditionalchinese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// All is a list of all defined encodings in this package. +var All = []encoding.Encoding{Big5} + +// Big5 is the Big5 encoding, also known as Code Page 950. +var Big5 encoding.Encoding = &big5 + +var big5 = internal.Encoding{ + &internal.SimpleEncoding{big5Decoder{}, big5Encoder{}}, + "Big5", + identifier.Big5, +} + +type big5Decoder struct{ transform.NopResetter } + +func (big5Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size, s := rune(0), 0, "" +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + case 0x81 <= c0 && c0 < 0xff: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + goto write + } + c1 := src[nSrc+1] + switch { + case 0x40 <= c1 && c1 < 0x7f: + c1 -= 0x40 + case 0xa1 <= c1 && c1 < 0xff: + c1 -= 0x62 + case c1 < 0x40: + r, size = utf8.RuneError, 1 + goto write + default: + r, size = utf8.RuneError, 2 + goto write + } + r, size = '\ufffd', 2 + if i := int(c0-0x81)*157 + int(c1); i < len(decode) { + if 1133 <= i && i < 1167 { + // The two-rune special cases for LATIN CAPITAL / SMALL E WITH CIRCUMFLEX + // AND MACRON / CARON are from http://encoding.spec.whatwg.org/#big5 + switch i { + case 1133: + s = "\u00CA\u0304" + goto writeStr + case 1135: + s = "\u00CA\u030C" + goto writeStr + case 1164: + s = "\u00EA\u0304" + goto writeStr + case 1166: + s = "\u00EA\u030C" + goto writeStr + } + } + r = rune(decode[i]) + if r == 0 { + r = '\ufffd' + } + } + + default: + r, size = utf8.RuneError, 1 + } + + write: + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + continue loop + + writeStr: + if nDst+len(s) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += copy(dst[nDst:], s) + continue loop + } + return nDst, nSrc, err +} + +type big5Encoder struct{ transform.NopResetter } + +func (big5Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + } + + if r >= utf8.RuneSelf { + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r != 0 { + goto write2 + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r != 0 { + goto write2 + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r != 0 { + goto write2 + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r != 0 { + goto write2 + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r != 0 { + goto write2 + } + case encode5Low <= r && r < encode5High: + if r = rune(encode5[r-encode5Low]); r != 0 { + goto write2 + } + case encode6Low <= r && r < encode6High: + if r = rune(encode6[r-encode6Low]); r != 0 { + goto write2 + } + case encode7Low <= r && r < encode7High: + if r = rune(encode7[r-encode7Low]); r != 0 { + goto write2 + } + } + err = internal.ErrASCIIReplacement + break + } + + write2: + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = uint8(r >> 8) + dst[nDst+1] = uint8(r) + nDst += 2 + continue + } + return nDst, nSrc, err +} + +func init() { + // Check that the hard-coded encode switch covers all tables. + if numEncodeTables != 8 { + panic("bad numEncodeTables") + } +} diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go b/vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go new file mode 100644 index 0000000..cf7fdb3 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go @@ -0,0 +1,140 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This program generates tables.go: +// go run maketables.go | gofmt > tables.go + +import ( + "bufio" + "fmt" + "log" + "net/http" + "sort" + "strings" +) + +func main() { + fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n") + fmt.Printf("// Package traditionalchinese provides Traditional Chinese encodings such as Big5.\n") + fmt.Printf(`package traditionalchinese // import "golang.org/x/text/encoding/traditionalchinese"` + "\n\n") + + res, err := http.Get("http://encoding.spec.whatwg.org/index-big5.txt") + if err != nil { + log.Fatalf("Get: %v", err) + } + defer res.Body.Close() + + mapping := [65536]uint32{} + reverse := [65536 * 4]uint16{} + + scanner := bufio.NewScanner(res.Body) + for scanner.Scan() { + s := strings.TrimSpace(scanner.Text()) + if s == "" || s[0] == '#' { + continue + } + x, y := uint16(0), uint32(0) + if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil { + log.Fatalf("could not parse %q", s) + } + if x < 0 || 126*157 <= x { + log.Fatalf("Big5 code %d is out of range", x) + } + mapping[x] = y + + // The WHATWG spec http://encoding.spec.whatwg.org/#indexes says that + // "The index pointer for code point in index is the first pointer + // corresponding to code point in index", which would normally mean + // that the code below should be guarded by "if reverse[y] == 0", but + // last instead of first seems to match the behavior of + // "iconv -f UTF-8 -t BIG5". For example, U+8005 者 occurs twice in + // http://encoding.spec.whatwg.org/index-big5.txt, as index 2148 + // (encoded as "\x8e\xcd") and index 6543 (encoded as "\xaa\xcc") + // and "echo 者 | iconv -f UTF-8 -t BIG5 | xxd" gives "\xaa\xcc". + c0, c1 := x/157, x%157 + if c1 < 0x3f { + c1 += 0x40 + } else { + c1 += 0x62 + } + reverse[y] = (0x81+c0)<<8 | c1 + } + if err := scanner.Err(); err != nil { + log.Fatalf("scanner error: %v", err) + } + + fmt.Printf("// decode is the decoding table from Big5 code to Unicode.\n") + fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-big5.txt\n") + fmt.Printf("var decode = [...]uint32{\n") + for i, v := range mapping { + if v != 0 { + fmt.Printf("\t%d: 0x%08X,\n", i, v) + } + } + fmt.Printf("}\n\n") + + // Any run of at least separation continuous zero entries in the reverse map will + // be a separate encode table. + const separation = 1024 + + intervals := []interval(nil) + low, high := -1, -1 + for i, v := range reverse { + if v == 0 { + continue + } + if low < 0 { + low = i + } else if i-high >= separation { + if high >= 0 { + intervals = append(intervals, interval{low, high}) + } + low = i + } + high = i + 1 + } + if high >= 0 { + intervals = append(intervals, interval{low, high}) + } + sort.Sort(byDecreasingLength(intervals)) + + fmt.Printf("const numEncodeTables = %d\n\n", len(intervals)) + fmt.Printf("// encodeX are the encoding tables from Unicode to Big5 code,\n") + fmt.Printf("// sorted by decreasing length.\n") + for i, v := range intervals { + fmt.Printf("// encode%d: %5d entries for runes in [%6d, %6d).\n", i, v.len(), v.low, v.high) + } + fmt.Printf("\n") + + for i, v := range intervals { + fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high) + fmt.Printf("var encode%d = [...]uint16{\n", i) + for j := v.low; j < v.high; j++ { + x := reverse[j] + if x == 0 { + continue + } + fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x) + } + fmt.Printf("}\n\n") + } +} + +// interval is a half-open interval [low, high). +type interval struct { + low, high int +} + +func (i interval) len() int { return i.high - i.low } + +// byDecreasingLength sorts intervals by decreasing length. +type byDecreasingLength []interval + +func (b byDecreasingLength) Len() int { return len(b) } +func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() } +func (b byDecreasingLength) Swap(i, j int) { b[i], b[j] = b[j], b[i] } diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go b/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go new file mode 100644 index 0000000..d909e38 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go @@ -0,0 +1,37142 @@ +// generated by go run maketables.go; DO NOT EDIT + +// Package traditionalchinese provides Traditional Chinese encodings such as Big5. +package traditionalchinese // import "golang.org/x/text/encoding/traditionalchinese" + +// decode is the decoding table from Big5 code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-big5.txt +var decode = [...]uint32{ + 942: 0x000043F0, + 943: 0x00004C32, + 944: 0x00004603, + 945: 0x000045A6, + 946: 0x00004578, + 947: 0x00027267, + 948: 0x00004D77, + 949: 0x000045B3, + 950: 0x00027CB1, + 951: 0x00004CE2, + 952: 0x00027CC5, + 953: 0x00003B95, + 954: 0x00004736, + 955: 0x00004744, + 956: 0x00004C47, + 957: 0x00004C40, + 958: 0x000242BF, + 959: 0x00023617, + 960: 0x00027352, + 961: 0x00026E8B, + 962: 0x000270D2, + 963: 0x00004C57, + 964: 0x0002A351, + 965: 0x0000474F, + 966: 0x000045DA, + 967: 0x00004C85, + 968: 0x00027C6C, + 969: 0x00004D07, + 970: 0x00004AA4, + 971: 0x000046A1, + 972: 0x00026B23, + 973: 0x00007225, + 974: 0x00025A54, + 975: 0x00021A63, + 976: 0x00023E06, + 977: 0x00023F61, + 978: 0x0000664D, + 979: 0x000056FB, + 981: 0x00007D95, + 982: 0x0000591D, + 983: 0x00028BB9, + 984: 0x00003DF4, + 985: 0x00009734, + 986: 0x00027BEF, + 987: 0x00005BDB, + 988: 0x00021D5E, + 989: 0x00005AA4, + 990: 0x00003625, + 991: 0x00029EB0, + 992: 0x00005AD1, + 993: 0x00005BB7, + 994: 0x00005CFC, + 995: 0x0000676E, + 996: 0x00008593, + 997: 0x00029945, + 998: 0x00007461, + 999: 0x0000749D, + 1000: 0x00003875, + 1001: 0x00021D53, + 1002: 0x0002369E, + 1003: 0x00026021, + 1004: 0x00003EEC, + 1005: 0x000258DE, + 1006: 0x00003AF5, + 1007: 0x00007AFC, + 1008: 0x00009F97, + 1009: 0x00024161, + 1010: 0x0002890D, + 1011: 0x000231EA, + 1012: 0x00020A8A, + 1013: 0x0002325E, + 1014: 0x0000430A, + 1015: 0x00008484, + 1016: 0x00009F96, + 1017: 0x0000942F, + 1018: 0x00004930, + 1019: 0x00008613, + 1020: 0x00005896, + 1021: 0x0000974A, + 1022: 0x00009218, + 1023: 0x000079D0, + 1024: 0x00007A32, + 1025: 0x00006660, + 1026: 0x00006A29, + 1027: 0x0000889D, + 1028: 0x0000744C, + 1029: 0x00007BC5, + 1030: 0x00006782, + 1031: 0x00007A2C, + 1032: 0x0000524F, + 1033: 0x00009046, + 1034: 0x000034E6, + 1035: 0x000073C4, + 1036: 0x00025DB9, + 1037: 0x000074C6, + 1038: 0x00009FC7, + 1039: 0x000057B3, + 1040: 0x0000492F, + 1041: 0x0000544C, + 1042: 0x00004131, + 1043: 0x0002368E, + 1044: 0x00005818, + 1045: 0x00007A72, + 1046: 0x00027B65, + 1047: 0x00008B8F, + 1048: 0x000046AE, + 1049: 0x00026E88, + 1050: 0x00004181, + 1051: 0x00025D99, + 1052: 0x00007BAE, + 1053: 0x000224BC, + 1054: 0x00009FC8, + 1055: 0x000224C1, + 1056: 0x000224C9, + 1057: 0x000224CC, + 1058: 0x00009FC9, + 1059: 0x00008504, + 1060: 0x000235BB, + 1061: 0x000040B4, + 1062: 0x00009FCA, + 1063: 0x000044E1, + 1064: 0x0002ADFF, + 1065: 0x000062C1, + 1066: 0x0000706E, + 1067: 0x00009FCB, + 1099: 0x000031C0, + 1100: 0x000031C1, + 1101: 0x000031C2, + 1102: 0x000031C3, + 1103: 0x000031C4, + 1104: 0x0002010C, + 1105: 0x000031C5, + 1106: 0x000200D1, + 1107: 0x000200CD, + 1108: 0x000031C6, + 1109: 0x000031C7, + 1110: 0x000200CB, + 1111: 0x00021FE8, + 1112: 0x000031C8, + 1113: 0x000200CA, + 1114: 0x000031C9, + 1115: 0x000031CA, + 1116: 0x000031CB, + 1117: 0x000031CC, + 1118: 0x0002010E, + 1119: 0x000031CD, + 1120: 0x000031CE, + 1121: 0x00000100, + 1122: 0x000000C1, + 1123: 0x000001CD, + 1124: 0x000000C0, + 1125: 0x00000112, + 1126: 0x000000C9, + 1127: 0x0000011A, + 1128: 0x000000C8, + 1129: 0x0000014C, + 1130: 0x000000D3, + 1131: 0x000001D1, + 1132: 0x000000D2, + 1134: 0x00001EBE, + 1136: 0x00001EC0, + 1137: 0x000000CA, + 1138: 0x00000101, + 1139: 0x000000E1, + 1140: 0x000001CE, + 1141: 0x000000E0, + 1142: 0x00000251, + 1143: 0x00000113, + 1144: 0x000000E9, + 1145: 0x0000011B, + 1146: 0x000000E8, + 1147: 0x0000012B, + 1148: 0x000000ED, + 1149: 0x000001D0, + 1150: 0x000000EC, + 1151: 0x0000014D, + 1152: 0x000000F3, + 1153: 0x000001D2, + 1154: 0x000000F2, + 1155: 0x0000016B, + 1156: 0x000000FA, + 1157: 0x000001D4, + 1158: 0x000000F9, + 1159: 0x000001D6, + 1160: 0x000001D8, + 1161: 0x000001DA, + 1162: 0x000001DC, + 1163: 0x000000FC, + 1165: 0x00001EBF, + 1167: 0x00001EC1, + 1168: 0x000000EA, + 1169: 0x00000261, + 1170: 0x000023DA, + 1171: 0x000023DB, + 1256: 0x0002A3A9, + 1257: 0x00021145, + 1259: 0x0000650A, + 1262: 0x00004E3D, + 1263: 0x00006EDD, + 1264: 0x00009D4E, + 1265: 0x000091DF, + 1268: 0x00027735, + 1269: 0x00006491, + 1270: 0x00004F1A, + 1271: 0x00004F28, + 1272: 0x00004FA8, + 1273: 0x00005156, + 1274: 0x00005174, + 1275: 0x0000519C, + 1276: 0x000051E4, + 1277: 0x000052A1, + 1278: 0x000052A8, + 1279: 0x0000533B, + 1280: 0x0000534E, + 1281: 0x000053D1, + 1282: 0x000053D8, + 1283: 0x000056E2, + 1284: 0x000058F0, + 1285: 0x00005904, + 1286: 0x00005907, + 1287: 0x00005932, + 1288: 0x00005934, + 1289: 0x00005B66, + 1290: 0x00005B9E, + 1291: 0x00005B9F, + 1292: 0x00005C9A, + 1293: 0x00005E86, + 1294: 0x0000603B, + 1295: 0x00006589, + 1296: 0x000067FE, + 1297: 0x00006804, + 1298: 0x00006865, + 1299: 0x00006D4E, + 1300: 0x000070BC, + 1301: 0x00007535, + 1302: 0x00007EA4, + 1303: 0x00007EAC, + 1304: 0x00007EBA, + 1305: 0x00007EC7, + 1306: 0x00007ECF, + 1307: 0x00007EDF, + 1308: 0x00007F06, + 1309: 0x00007F37, + 1310: 0x0000827A, + 1311: 0x000082CF, + 1312: 0x0000836F, + 1313: 0x000089C6, + 1314: 0x00008BBE, + 1315: 0x00008BE2, + 1316: 0x00008F66, + 1317: 0x00008F67, + 1318: 0x00008F6E, + 1319: 0x00007411, + 1320: 0x00007CFC, + 1321: 0x00007DCD, + 1322: 0x00006946, + 1323: 0x00007AC9, + 1324: 0x00005227, + 1329: 0x0000918C, + 1330: 0x000078B8, + 1331: 0x0000915E, + 1332: 0x000080BC, + 1334: 0x00008D0B, + 1335: 0x000080F6, + 1336: 0x000209E7, + 1339: 0x0000809F, + 1340: 0x00009EC7, + 1341: 0x00004CCD, + 1342: 0x00009DC9, + 1343: 0x00009E0C, + 1344: 0x00004C3E, + 1345: 0x00029DF6, + 1346: 0x0002700E, + 1347: 0x00009E0A, + 1348: 0x0002A133, + 1349: 0x000035C1, + 1351: 0x00006E9A, + 1352: 0x0000823E, + 1353: 0x00007519, + 1355: 0x00004911, + 1356: 0x00009A6C, + 1357: 0x00009A8F, + 1358: 0x00009F99, + 1359: 0x00007987, + 1360: 0x0002846C, + 1361: 0x00021DCA, + 1362: 0x000205D0, + 1363: 0x00022AE6, + 1364: 0x00004E24, + 1365: 0x00004E81, + 1366: 0x00004E80, + 1367: 0x00004E87, + 1368: 0x00004EBF, + 1369: 0x00004EEB, + 1370: 0x00004F37, + 1371: 0x0000344C, + 1372: 0x00004FBD, + 1373: 0x00003E48, + 1374: 0x00005003, + 1375: 0x00005088, + 1376: 0x0000347D, + 1377: 0x00003493, + 1378: 0x000034A5, + 1379: 0x00005186, + 1380: 0x00005905, + 1381: 0x000051DB, + 1382: 0x000051FC, + 1383: 0x00005205, + 1384: 0x00004E89, + 1385: 0x00005279, + 1386: 0x00005290, + 1387: 0x00005327, + 1388: 0x000035C7, + 1389: 0x000053A9, + 1390: 0x00003551, + 1391: 0x000053B0, + 1392: 0x00003553, + 1393: 0x000053C2, + 1394: 0x00005423, + 1395: 0x0000356D, + 1396: 0x00003572, + 1397: 0x00003681, + 1398: 0x00005493, + 1399: 0x000054A3, + 1400: 0x000054B4, + 1401: 0x000054B9, + 1402: 0x000054D0, + 1403: 0x000054EF, + 1404: 0x00005518, + 1405: 0x00005523, + 1406: 0x00005528, + 1407: 0x00003598, + 1408: 0x0000553F, + 1409: 0x000035A5, + 1410: 0x000035BF, + 1411: 0x000055D7, + 1412: 0x000035C5, + 1413: 0x00027D84, + 1414: 0x00005525, + 1416: 0x00020C42, + 1417: 0x00020D15, + 1418: 0x0002512B, + 1419: 0x00005590, + 1420: 0x00022CC6, + 1421: 0x000039EC, + 1422: 0x00020341, + 1423: 0x00008E46, + 1424: 0x00024DB8, + 1425: 0x000294E5, + 1426: 0x00004053, + 1427: 0x000280BE, + 1428: 0x0000777A, + 1429: 0x00022C38, + 1430: 0x00003A34, + 1431: 0x000047D5, + 1432: 0x0002815D, + 1433: 0x000269F2, + 1434: 0x00024DEA, + 1435: 0x000064DD, + 1436: 0x00020D7C, + 1437: 0x00020FB4, + 1438: 0x00020CD5, + 1439: 0x000210F4, + 1440: 0x0000648D, + 1441: 0x00008E7E, + 1442: 0x00020E96, + 1443: 0x00020C0B, + 1444: 0x00020F64, + 1445: 0x00022CA9, + 1446: 0x00028256, + 1447: 0x000244D3, + 1449: 0x00020D46, + 1450: 0x00029A4D, + 1451: 0x000280E9, + 1452: 0x000047F4, + 1453: 0x00024EA7, + 1454: 0x00022CC2, + 1455: 0x00009AB2, + 1456: 0x00003A67, + 1457: 0x000295F4, + 1458: 0x00003FED, + 1459: 0x00003506, + 1460: 0x000252C7, + 1461: 0x000297D4, + 1462: 0x000278C8, + 1463: 0x00022D44, + 1464: 0x00009D6E, + 1465: 0x00009815, + 1467: 0x000043D9, + 1468: 0x000260A5, + 1469: 0x000064B4, + 1470: 0x000054E3, + 1471: 0x00022D4C, + 1472: 0x00022BCA, + 1473: 0x00021077, + 1474: 0x000039FB, + 1475: 0x0002106F, + 1476: 0x000266DA, + 1477: 0x00026716, + 1478: 0x000279A0, + 1479: 0x000064EA, + 1480: 0x00025052, + 1481: 0x00020C43, + 1482: 0x00008E68, + 1483: 0x000221A1, + 1484: 0x00028B4C, + 1485: 0x00020731, + 1487: 0x0000480B, + 1488: 0x000201A9, + 1489: 0x00003FFA, + 1490: 0x00005873, + 1491: 0x00022D8D, + 1493: 0x000245C8, + 1494: 0x000204FC, + 1495: 0x00026097, + 1496: 0x00020F4C, + 1497: 0x00020D96, + 1498: 0x00005579, + 1499: 0x000040BB, + 1500: 0x000043BA, + 1502: 0x00004AB4, + 1503: 0x00022A66, + 1504: 0x0002109D, + 1505: 0x000081AA, + 1506: 0x000098F5, + 1507: 0x00020D9C, + 1508: 0x00006379, + 1509: 0x000039FE, + 1510: 0x00022775, + 1511: 0x00008DC0, + 1512: 0x000056A1, + 1513: 0x0000647C, + 1514: 0x00003E43, + 1516: 0x0002A601, + 1517: 0x00020E09, + 1518: 0x00022ACF, + 1519: 0x00022CC9, + 1521: 0x000210C8, + 1522: 0x000239C2, + 1523: 0x00003992, + 1524: 0x00003A06, + 1525: 0x0002829B, + 1526: 0x00003578, + 1527: 0x00025E49, + 1528: 0x000220C7, + 1529: 0x00005652, + 1530: 0x00020F31, + 1531: 0x00022CB2, + 1532: 0x00029720, + 1533: 0x000034BC, + 1534: 0x00006C3D, + 1535: 0x00024E3B, + 1538: 0x00027574, + 1539: 0x00022E8B, + 1540: 0x00022208, + 1541: 0x0002A65B, + 1542: 0x00028CCD, + 1543: 0x00020E7A, + 1544: 0x00020C34, + 1545: 0x0002681C, + 1546: 0x00007F93, + 1547: 0x000210CF, + 1548: 0x00022803, + 1549: 0x00022939, + 1550: 0x000035FB, + 1551: 0x000251E3, + 1552: 0x00020E8C, + 1553: 0x00020F8D, + 1554: 0x00020EAA, + 1555: 0x00003F93, + 1556: 0x00020F30, + 1557: 0x00020D47, + 1558: 0x0002114F, + 1559: 0x00020E4C, + 1561: 0x00020EAB, + 1562: 0x00020BA9, + 1563: 0x00020D48, + 1564: 0x000210C0, + 1565: 0x0002113D, + 1566: 0x00003FF9, + 1567: 0x00022696, + 1568: 0x00006432, + 1569: 0x00020FAD, + 1570: 0x000233F4, + 1571: 0x00027639, + 1572: 0x00022BCE, + 1573: 0x00020D7E, + 1574: 0x00020D7F, + 1575: 0x00022C51, + 1576: 0x00022C55, + 1577: 0x00003A18, + 1578: 0x00020E98, + 1579: 0x000210C7, + 1580: 0x00020F2E, + 1581: 0x0002A632, + 1582: 0x00026B50, + 1583: 0x00028CD2, + 1584: 0x00028D99, + 1585: 0x00028CCA, + 1586: 0x000095AA, + 1587: 0x000054CC, + 1588: 0x000082C4, + 1589: 0x000055B9, + 1591: 0x00029EC3, + 1592: 0x00009C26, + 1593: 0x00009AB6, + 1594: 0x0002775E, + 1595: 0x00022DEE, + 1596: 0x00007140, + 1597: 0x0000816D, + 1598: 0x000080EC, + 1599: 0x00005C1C, + 1600: 0x00026572, + 1601: 0x00008134, + 1602: 0x00003797, + 1603: 0x0000535F, + 1604: 0x000280BD, + 1605: 0x000091B6, + 1606: 0x00020EFA, + 1607: 0x00020E0F, + 1608: 0x00020E77, + 1609: 0x00020EFB, + 1610: 0x000035DD, + 1611: 0x00024DEB, + 1612: 0x00003609, + 1613: 0x00020CD6, + 1614: 0x000056AF, + 1615: 0x000227B5, + 1616: 0x000210C9, + 1617: 0x00020E10, + 1618: 0x00020E78, + 1619: 0x00021078, + 1620: 0x00021148, + 1621: 0x00028207, + 1622: 0x00021455, + 1623: 0x00020E79, + 1624: 0x00024E50, + 1625: 0x00022DA4, + 1626: 0x00005A54, + 1627: 0x0002101D, + 1628: 0x0002101E, + 1629: 0x000210F5, + 1630: 0x000210F6, + 1631: 0x0000579C, + 1632: 0x00020E11, + 1633: 0x00027694, + 1634: 0x000282CD, + 1635: 0x00020FB5, + 1636: 0x00020E7B, + 1637: 0x0002517E, + 1638: 0x00003703, + 1639: 0x00020FB6, + 1640: 0x00021180, + 1641: 0x000252D8, + 1642: 0x0002A2BD, + 1643: 0x000249DA, + 1644: 0x0002183A, + 1645: 0x00024177, + 1646: 0x0002827C, + 1647: 0x00005899, + 1648: 0x00005268, + 1649: 0x0000361A, + 1650: 0x0002573D, + 1651: 0x00007BB2, + 1652: 0x00005B68, + 1653: 0x00004800, + 1654: 0x00004B2C, + 1655: 0x00009F27, + 1656: 0x000049E7, + 1657: 0x00009C1F, + 1658: 0x00009B8D, + 1659: 0x00025B74, + 1660: 0x0002313D, + 1661: 0x000055FB, + 1662: 0x000035F2, + 1663: 0x00005689, + 1664: 0x00004E28, + 1665: 0x00005902, + 1666: 0x00021BC1, + 1667: 0x0002F878, + 1668: 0x00009751, + 1669: 0x00020086, + 1670: 0x00004E5B, + 1671: 0x00004EBB, + 1672: 0x0000353E, + 1673: 0x00005C23, + 1674: 0x00005F51, + 1675: 0x00005FC4, + 1676: 0x000038FA, + 1677: 0x0000624C, + 1678: 0x00006535, + 1679: 0x00006B7A, + 1680: 0x00006C35, + 1681: 0x00006C3A, + 1682: 0x0000706C, + 1683: 0x0000722B, + 1684: 0x00004E2C, + 1685: 0x000072AD, + 1686: 0x000248E9, + 1687: 0x00007F52, + 1688: 0x0000793B, + 1689: 0x00007CF9, + 1690: 0x00007F53, + 1691: 0x0002626A, + 1692: 0x000034C1, + 1694: 0x0002634B, + 1695: 0x00008002, + 1696: 0x00008080, + 1697: 0x00026612, + 1698: 0x00026951, + 1699: 0x0000535D, + 1700: 0x00008864, + 1701: 0x000089C1, + 1702: 0x000278B2, + 1703: 0x00008BA0, + 1704: 0x00008D1D, + 1705: 0x00009485, + 1706: 0x00009578, + 1707: 0x0000957F, + 1708: 0x000095E8, + 1709: 0x00028E0F, + 1710: 0x000097E6, + 1711: 0x00009875, + 1712: 0x000098CE, + 1713: 0x000098DE, + 1714: 0x00009963, + 1715: 0x00029810, + 1716: 0x00009C7C, + 1717: 0x00009E1F, + 1718: 0x00009EC4, + 1719: 0x00006B6F, + 1720: 0x0000F907, + 1721: 0x00004E37, + 1722: 0x00020087, + 1723: 0x0000961D, + 1724: 0x00006237, + 1725: 0x000094A2, + 1727: 0x0000503B, + 1728: 0x00006DFE, + 1729: 0x00029C73, + 1730: 0x00009FA6, + 1731: 0x00003DC9, + 1732: 0x0000888F, + 1733: 0x0002414E, + 1734: 0x00007077, + 1735: 0x00005CF5, + 1736: 0x00004B20, + 1737: 0x000251CD, + 1738: 0x00003559, + 1739: 0x00025D30, + 1740: 0x00006122, + 1741: 0x00028A32, + 1742: 0x00008FA7, + 1743: 0x000091F6, + 1744: 0x00007191, + 1745: 0x00006719, + 1746: 0x000073BA, + 1747: 0x00023281, + 1748: 0x0002A107, + 1749: 0x00003C8B, + 1750: 0x00021980, + 1751: 0x00004B10, + 1752: 0x000078E4, + 1753: 0x00007402, + 1754: 0x000051AE, + 1755: 0x0002870F, + 1756: 0x00004009, + 1757: 0x00006A63, + 1758: 0x0002A2BA, + 1759: 0x00004223, + 1760: 0x0000860F, + 1761: 0x00020A6F, + 1762: 0x00007A2A, + 1763: 0x00029947, + 1764: 0x00028AEA, + 1765: 0x00009755, + 1766: 0x0000704D, + 1767: 0x00005324, + 1768: 0x0002207E, + 1769: 0x000093F4, + 1770: 0x000076D9, + 1771: 0x000289E3, + 1772: 0x00009FA7, + 1773: 0x000077DD, + 1774: 0x00004EA3, + 1775: 0x00004FF0, + 1776: 0x000050BC, + 1777: 0x00004E2F, + 1778: 0x00004F17, + 1779: 0x00009FA8, + 1780: 0x00005434, + 1781: 0x00007D8B, + 1782: 0x00005892, + 1783: 0x000058D0, + 1784: 0x00021DB6, + 1785: 0x00005E92, + 1786: 0x00005E99, + 1787: 0x00005FC2, + 1788: 0x00022712, + 1789: 0x0000658B, + 1790: 0x000233F9, + 1791: 0x00006919, + 1792: 0x00006A43, + 1793: 0x00023C63, + 1794: 0x00006CFF, + 1796: 0x00007200, + 1797: 0x00024505, + 1798: 0x0000738C, + 1799: 0x00003EDB, + 1800: 0x00024A13, + 1801: 0x00005B15, + 1802: 0x000074B9, + 1803: 0x00008B83, + 1804: 0x00025CA4, + 1805: 0x00025695, + 1806: 0x00007A93, + 1807: 0x00007BEC, + 1808: 0x00007CC3, + 1809: 0x00007E6C, + 1810: 0x000082F8, + 1811: 0x00008597, + 1812: 0x00009FA9, + 1813: 0x00008890, + 1814: 0x00009FAA, + 1815: 0x00008EB9, + 1816: 0x00009FAB, + 1817: 0x00008FCF, + 1818: 0x0000855F, + 1819: 0x000099E0, + 1820: 0x00009221, + 1821: 0x00009FAC, + 1822: 0x00028DB9, + 1823: 0x0002143F, + 1824: 0x00004071, + 1825: 0x000042A2, + 1826: 0x00005A1A, + 1830: 0x00009868, + 1831: 0x0000676B, + 1832: 0x00004276, + 1833: 0x0000573D, + 1835: 0x000085D6, + 1836: 0x0002497B, + 1837: 0x000082BF, + 1838: 0x0002710D, + 1839: 0x00004C81, + 1840: 0x00026D74, + 1841: 0x00005D7B, + 1842: 0x00026B15, + 1843: 0x00026FBE, + 1844: 0x00009FAD, + 1845: 0x00009FAE, + 1846: 0x00005B96, + 1847: 0x00009FAF, + 1848: 0x000066E7, + 1849: 0x00007E5B, + 1850: 0x00006E57, + 1851: 0x000079CA, + 1852: 0x00003D88, + 1853: 0x000044C3, + 1854: 0x00023256, + 1855: 0x00022796, + 1856: 0x0000439A, + 1857: 0x00004536, + 1859: 0x00005CD5, + 1860: 0x00023B1A, + 1861: 0x00008AF9, + 1862: 0x00005C78, + 1863: 0x00003D12, + 1864: 0x00023551, + 1865: 0x00005D78, + 1866: 0x00009FB2, + 1867: 0x00007157, + 1868: 0x00004558, + 1869: 0x000240EC, + 1870: 0x00021E23, + 1871: 0x00004C77, + 1872: 0x00003978, + 1873: 0x0000344A, + 1874: 0x000201A4, + 1875: 0x00026C41, + 1876: 0x00008ACC, + 1877: 0x00004FB4, + 1878: 0x00020239, + 1879: 0x000059BF, + 1880: 0x0000816C, + 1881: 0x00009856, + 1882: 0x000298FA, + 1883: 0x00005F3B, + 1884: 0x00020B9F, + 1886: 0x000221C1, + 1887: 0x0002896D, + 1888: 0x00004102, + 1889: 0x000046BB, + 1890: 0x00029079, + 1891: 0x00003F07, + 1892: 0x00009FB3, + 1893: 0x0002A1B5, + 1894: 0x000040F8, + 1895: 0x000037D6, + 1896: 0x000046F7, + 1897: 0x00026C46, + 1898: 0x0000417C, + 1899: 0x000286B2, + 1900: 0x000273FF, + 1901: 0x0000456D, + 1902: 0x000038D4, + 1903: 0x0002549A, + 1904: 0x00004561, + 1905: 0x0000451B, + 1906: 0x00004D89, + 1907: 0x00004C7B, + 1908: 0x00004D76, + 1909: 0x000045EA, + 1910: 0x00003FC8, + 1911: 0x00024B0F, + 1912: 0x00003661, + 1913: 0x000044DE, + 1914: 0x000044BD, + 1915: 0x000041ED, + 1916: 0x00005D3E, + 1917: 0x00005D48, + 1918: 0x00005D56, + 1919: 0x00003DFC, + 1920: 0x0000380F, + 1921: 0x00005DA4, + 1922: 0x00005DB9, + 1923: 0x00003820, + 1924: 0x00003838, + 1925: 0x00005E42, + 1926: 0x00005EBD, + 1927: 0x00005F25, + 1928: 0x00005F83, + 1929: 0x00003908, + 1930: 0x00003914, + 1931: 0x0000393F, + 1932: 0x0000394D, + 1933: 0x000060D7, + 1934: 0x0000613D, + 1935: 0x00005CE5, + 1936: 0x00003989, + 1937: 0x000061B7, + 1938: 0x000061B9, + 1939: 0x000061CF, + 1940: 0x000039B8, + 1941: 0x0000622C, + 1942: 0x00006290, + 1943: 0x000062E5, + 1944: 0x00006318, + 1945: 0x000039F8, + 1946: 0x000056B1, + 1947: 0x00003A03, + 1948: 0x000063E2, + 1949: 0x000063FB, + 1950: 0x00006407, + 1951: 0x0000645A, + 1952: 0x00003A4B, + 1953: 0x000064C0, + 1954: 0x00005D15, + 1955: 0x00005621, + 1956: 0x00009F9F, + 1957: 0x00003A97, + 1958: 0x00006586, + 1959: 0x00003ABD, + 1960: 0x000065FF, + 1961: 0x00006653, + 1962: 0x00003AF2, + 1963: 0x00006692, + 1964: 0x00003B22, + 1965: 0x00006716, + 1966: 0x00003B42, + 1967: 0x000067A4, + 1968: 0x00006800, + 1969: 0x00003B58, + 1970: 0x0000684A, + 1971: 0x00006884, + 1972: 0x00003B72, + 1973: 0x00003B71, + 1974: 0x00003B7B, + 1975: 0x00006909, + 1976: 0x00006943, + 1977: 0x0000725C, + 1978: 0x00006964, + 1979: 0x0000699F, + 1980: 0x00006985, + 1981: 0x00003BBC, + 1982: 0x000069D6, + 1983: 0x00003BDD, + 1984: 0x00006A65, + 1985: 0x00006A74, + 1986: 0x00006A71, + 1987: 0x00006A82, + 1988: 0x00003BEC, + 1989: 0x00006A99, + 1990: 0x00003BF2, + 1991: 0x00006AAB, + 1992: 0x00006AB5, + 1993: 0x00006AD4, + 1994: 0x00006AF6, + 1995: 0x00006B81, + 1996: 0x00006BC1, + 1997: 0x00006BEA, + 1998: 0x00006C75, + 1999: 0x00006CAA, + 2000: 0x00003CCB, + 2001: 0x00006D02, + 2002: 0x00006D06, + 2003: 0x00006D26, + 2004: 0x00006D81, + 2005: 0x00003CEF, + 2006: 0x00006DA4, + 2007: 0x00006DB1, + 2008: 0x00006E15, + 2009: 0x00006E18, + 2010: 0x00006E29, + 2011: 0x00006E86, + 2012: 0x000289C0, + 2013: 0x00006EBB, + 2014: 0x00006EE2, + 2015: 0x00006EDA, + 2016: 0x00009F7F, + 2017: 0x00006EE8, + 2018: 0x00006EE9, + 2019: 0x00006F24, + 2020: 0x00006F34, + 2021: 0x00003D46, + 2022: 0x00023F41, + 2023: 0x00006F81, + 2024: 0x00006FBE, + 2025: 0x00003D6A, + 2026: 0x00003D75, + 2027: 0x000071B7, + 2028: 0x00005C99, + 2029: 0x00003D8A, + 2030: 0x0000702C, + 2031: 0x00003D91, + 2032: 0x00007050, + 2033: 0x00007054, + 2034: 0x0000706F, + 2035: 0x0000707F, + 2036: 0x00007089, + 2037: 0x00020325, + 2038: 0x000043C1, + 2039: 0x000035F1, + 2040: 0x00020ED8, + 2041: 0x00023ED7, + 2042: 0x000057BE, + 2043: 0x00026ED3, + 2044: 0x0000713E, + 2045: 0x000257E0, + 2046: 0x0000364E, + 2047: 0x000069A2, + 2048: 0x00028BE9, + 2049: 0x00005B74, + 2050: 0x00007A49, + 2051: 0x000258E1, + 2052: 0x000294D9, + 2053: 0x00007A65, + 2054: 0x00007A7D, + 2055: 0x000259AC, + 2056: 0x00007ABB, + 2057: 0x00007AB0, + 2058: 0x00007AC2, + 2059: 0x00007AC3, + 2060: 0x000071D1, + 2061: 0x0002648D, + 2062: 0x000041CA, + 2063: 0x00007ADA, + 2064: 0x00007ADD, + 2065: 0x00007AEA, + 2066: 0x000041EF, + 2067: 0x000054B2, + 2068: 0x00025C01, + 2069: 0x00007B0B, + 2070: 0x00007B55, + 2071: 0x00007B29, + 2072: 0x0002530E, + 2073: 0x00025CFE, + 2074: 0x00007BA2, + 2075: 0x00007B6F, + 2076: 0x0000839C, + 2077: 0x00025BB4, + 2078: 0x00026C7F, + 2079: 0x00007BD0, + 2080: 0x00008421, + 2081: 0x00007B92, + 2082: 0x00007BB8, + 2083: 0x00025D20, + 2084: 0x00003DAD, + 2085: 0x00025C65, + 2086: 0x00008492, + 2087: 0x00007BFA, + 2088: 0x00007C06, + 2089: 0x00007C35, + 2090: 0x00025CC1, + 2091: 0x00007C44, + 2092: 0x00007C83, + 2093: 0x00024882, + 2094: 0x00007CA6, + 2095: 0x0000667D, + 2096: 0x00024578, + 2097: 0x00007CC9, + 2098: 0x00007CC7, + 2099: 0x00007CE6, + 2100: 0x00007C74, + 2101: 0x00007CF3, + 2102: 0x00007CF5, + 2103: 0x00007CCE, + 2104: 0x00007E67, + 2105: 0x0000451D, + 2106: 0x00026E44, + 2107: 0x00007D5D, + 2108: 0x00026ED6, + 2109: 0x0000748D, + 2110: 0x00007D89, + 2111: 0x00007DAB, + 2112: 0x00007135, + 2113: 0x00007DB3, + 2114: 0x00007DD2, + 2115: 0x00024057, + 2116: 0x00026029, + 2117: 0x00007DE4, + 2118: 0x00003D13, + 2119: 0x00007DF5, + 2120: 0x000217F9, + 2121: 0x00007DE5, + 2122: 0x0002836D, + 2123: 0x00007E1D, + 2124: 0x00026121, + 2125: 0x0002615A, + 2126: 0x00007E6E, + 2127: 0x00007E92, + 2128: 0x0000432B, + 2129: 0x0000946C, + 2130: 0x00007E27, + 2131: 0x00007F40, + 2132: 0x00007F41, + 2133: 0x00007F47, + 2134: 0x00007936, + 2135: 0x000262D0, + 2136: 0x000099E1, + 2137: 0x00007F97, + 2138: 0x00026351, + 2139: 0x00007FA3, + 2140: 0x00021661, + 2141: 0x00020068, + 2142: 0x0000455C, + 2143: 0x00023766, + 2144: 0x00004503, + 2145: 0x0002833A, + 2146: 0x00007FFA, + 2147: 0x00026489, + 2148: 0x00008005, + 2149: 0x00008008, + 2150: 0x0000801D, + 2151: 0x00008028, + 2152: 0x0000802F, + 2153: 0x0002A087, + 2154: 0x00026CC3, + 2155: 0x0000803B, + 2156: 0x0000803C, + 2157: 0x00008061, + 2158: 0x00022714, + 2159: 0x00004989, + 2160: 0x00026626, + 2161: 0x00023DE3, + 2162: 0x000266E8, + 2163: 0x00006725, + 2164: 0x000080A7, + 2165: 0x00028A48, + 2166: 0x00008107, + 2167: 0x0000811A, + 2168: 0x000058B0, + 2169: 0x000226F6, + 2170: 0x00006C7F, + 2171: 0x00026498, + 2172: 0x00024FB8, + 2173: 0x000064E7, + 2174: 0x0002148A, + 2175: 0x00008218, + 2176: 0x0002185E, + 2177: 0x00006A53, + 2178: 0x00024A65, + 2179: 0x00024A95, + 2180: 0x0000447A, + 2181: 0x00008229, + 2182: 0x00020B0D, + 2183: 0x00026A52, + 2184: 0x00023D7E, + 2185: 0x00004FF9, + 2186: 0x000214FD, + 2187: 0x000084E2, + 2188: 0x00008362, + 2189: 0x00026B0A, + 2190: 0x000249A7, + 2191: 0x00023530, + 2192: 0x00021773, + 2193: 0x00023DF8, + 2194: 0x000082AA, + 2195: 0x0000691B, + 2196: 0x0002F994, + 2197: 0x000041DB, + 2198: 0x0000854B, + 2199: 0x000082D0, + 2200: 0x0000831A, + 2201: 0x00020E16, + 2202: 0x000217B4, + 2203: 0x000036C1, + 2204: 0x0002317D, + 2205: 0x0002355A, + 2206: 0x0000827B, + 2207: 0x000082E2, + 2208: 0x00008318, + 2209: 0x00023E8B, + 2210: 0x00026DA3, + 2211: 0x00026B05, + 2212: 0x00026B97, + 2213: 0x000235CE, + 2214: 0x00003DBF, + 2215: 0x0000831D, + 2216: 0x000055EC, + 2217: 0x00008385, + 2218: 0x0000450B, + 2219: 0x00026DA5, + 2220: 0x000083AC, + 2221: 0x000083C1, + 2222: 0x000083D3, + 2223: 0x0000347E, + 2224: 0x00026ED4, + 2225: 0x00006A57, + 2226: 0x0000855A, + 2227: 0x00003496, + 2228: 0x00026E42, + 2229: 0x00022EEF, + 2230: 0x00008458, + 2231: 0x00025BE4, + 2232: 0x00008471, + 2233: 0x00003DD3, + 2234: 0x000044E4, + 2235: 0x00006AA7, + 2236: 0x0000844A, + 2237: 0x00023CB5, + 2238: 0x00007958, + 2239: 0x000084A8, + 2240: 0x00026B96, + 2241: 0x00026E77, + 2242: 0x00026E43, + 2243: 0x000084DE, + 2244: 0x0000840F, + 2245: 0x00008391, + 2246: 0x000044A0, + 2247: 0x00008493, + 2248: 0x000084E4, + 2249: 0x00025C91, + 2250: 0x00004240, + 2251: 0x00025CC0, + 2252: 0x00004543, + 2253: 0x00008534, + 2254: 0x00005AF2, + 2255: 0x00026E99, + 2256: 0x00004527, + 2257: 0x00008573, + 2258: 0x00004516, + 2259: 0x000067BF, + 2260: 0x00008616, + 2261: 0x00028625, + 2262: 0x0002863B, + 2263: 0x000085C1, + 2264: 0x00027088, + 2265: 0x00008602, + 2266: 0x00021582, + 2267: 0x000270CD, + 2268: 0x0002F9B2, + 2269: 0x0000456A, + 2270: 0x00008628, + 2271: 0x00003648, + 2272: 0x000218A2, + 2273: 0x000053F7, + 2274: 0x0002739A, + 2275: 0x0000867E, + 2276: 0x00008771, + 2277: 0x0002A0F8, + 2278: 0x000087EE, + 2279: 0x00022C27, + 2280: 0x000087B1, + 2281: 0x000087DA, + 2282: 0x0000880F, + 2283: 0x00005661, + 2284: 0x0000866C, + 2285: 0x00006856, + 2286: 0x0000460F, + 2287: 0x00008845, + 2288: 0x00008846, + 2289: 0x000275E0, + 2290: 0x00023DB9, + 2291: 0x000275E4, + 2292: 0x0000885E, + 2293: 0x0000889C, + 2294: 0x0000465B, + 2295: 0x000088B4, + 2296: 0x000088B5, + 2297: 0x000063C1, + 2298: 0x000088C5, + 2299: 0x00007777, + 2300: 0x0002770F, + 2301: 0x00008987, + 2302: 0x0000898A, + 2303: 0x000089A6, + 2304: 0x000089A9, + 2305: 0x000089A7, + 2306: 0x000089BC, + 2307: 0x00028A25, + 2308: 0x000089E7, + 2309: 0x00027924, + 2310: 0x00027ABD, + 2311: 0x00008A9C, + 2312: 0x00007793, + 2313: 0x000091FE, + 2314: 0x00008A90, + 2315: 0x00027A59, + 2316: 0x00007AE9, + 2317: 0x00027B3A, + 2318: 0x00023F8F, + 2319: 0x00004713, + 2320: 0x00027B38, + 2321: 0x0000717C, + 2322: 0x00008B0C, + 2323: 0x00008B1F, + 2324: 0x00025430, + 2325: 0x00025565, + 2326: 0x00008B3F, + 2327: 0x00008B4C, + 2328: 0x00008B4D, + 2329: 0x00008AA9, + 2330: 0x00024A7A, + 2331: 0x00008B90, + 2332: 0x00008B9B, + 2333: 0x00008AAF, + 2334: 0x000216DF, + 2335: 0x00004615, + 2336: 0x0000884F, + 2337: 0x00008C9B, + 2338: 0x00027D54, + 2339: 0x00027D8F, + 2340: 0x0002F9D4, + 2341: 0x00003725, + 2342: 0x00027D53, + 2343: 0x00008CD6, + 2344: 0x00027D98, + 2345: 0x00027DBD, + 2346: 0x00008D12, + 2347: 0x00008D03, + 2348: 0x00021910, + 2349: 0x00008CDB, + 2350: 0x0000705C, + 2351: 0x00008D11, + 2352: 0x00024CC9, + 2353: 0x00003ED0, + 2354: 0x00008D77, + 2355: 0x00008DA9, + 2356: 0x00028002, + 2357: 0x00021014, + 2358: 0x0002498A, + 2359: 0x00003B7C, + 2360: 0x000281BC, + 2361: 0x0002710C, + 2362: 0x00007AE7, + 2363: 0x00008EAD, + 2364: 0x00008EB6, + 2365: 0x00008EC3, + 2366: 0x000092D4, + 2367: 0x00008F19, + 2368: 0x00008F2D, + 2369: 0x00028365, + 2370: 0x00028412, + 2371: 0x00008FA5, + 2372: 0x00009303, + 2373: 0x0002A29F, + 2374: 0x00020A50, + 2375: 0x00008FB3, + 2376: 0x0000492A, + 2377: 0x000289DE, + 2378: 0x0002853D, + 2379: 0x00023DBB, + 2380: 0x00005EF8, + 2381: 0x00023262, + 2382: 0x00008FF9, + 2383: 0x0002A014, + 2384: 0x000286BC, + 2385: 0x00028501, + 2386: 0x00022325, + 2387: 0x00003980, + 2388: 0x00026ED7, + 2389: 0x00009037, + 2390: 0x0002853C, + 2391: 0x00027ABE, + 2392: 0x00009061, + 2393: 0x0002856C, + 2394: 0x0002860B, + 2395: 0x000090A8, + 2396: 0x00028713, + 2397: 0x000090C4, + 2398: 0x000286E6, + 2399: 0x000090AE, + 2400: 0x000090FD, + 2401: 0x00009167, + 2402: 0x00003AF0, + 2403: 0x000091A9, + 2404: 0x000091C4, + 2405: 0x00007CAC, + 2406: 0x00028933, + 2407: 0x00021E89, + 2408: 0x0000920E, + 2409: 0x00006C9F, + 2410: 0x00009241, + 2411: 0x00009262, + 2412: 0x000255B9, + 2413: 0x000092B9, + 2414: 0x00028AC6, + 2415: 0x00023C9B, + 2416: 0x00028B0C, + 2417: 0x000255DB, + 2418: 0x00020D31, + 2419: 0x0000932C, + 2420: 0x0000936B, + 2421: 0x00028AE1, + 2422: 0x00028BEB, + 2423: 0x0000708F, + 2424: 0x00005AC3, + 2425: 0x00028AE2, + 2426: 0x00028AE5, + 2427: 0x00004965, + 2428: 0x00009244, + 2429: 0x00028BEC, + 2430: 0x00028C39, + 2431: 0x00028BFF, + 2432: 0x00009373, + 2433: 0x0000945B, + 2434: 0x00008EBC, + 2435: 0x00009585, + 2436: 0x000095A6, + 2437: 0x00009426, + 2438: 0x000095A0, + 2439: 0x00006FF6, + 2440: 0x000042B9, + 2441: 0x0002267A, + 2442: 0x000286D8, + 2443: 0x0002127C, + 2444: 0x00023E2E, + 2445: 0x000049DF, + 2446: 0x00006C1C, + 2447: 0x0000967B, + 2448: 0x00009696, + 2449: 0x0000416C, + 2450: 0x000096A3, + 2451: 0x00026ED5, + 2452: 0x000061DA, + 2453: 0x000096B6, + 2454: 0x000078F5, + 2455: 0x00028AE0, + 2456: 0x000096BD, + 2457: 0x000053CC, + 2458: 0x000049A1, + 2459: 0x00026CB8, + 2460: 0x00020274, + 2461: 0x00026410, + 2462: 0x000290AF, + 2463: 0x000290E5, + 2464: 0x00024AD1, + 2465: 0x00021915, + 2466: 0x0002330A, + 2467: 0x00009731, + 2468: 0x00008642, + 2469: 0x00009736, + 2470: 0x00004A0F, + 2471: 0x0000453D, + 2472: 0x00004585, + 2473: 0x00024AE9, + 2474: 0x00007075, + 2475: 0x00005B41, + 2476: 0x0000971B, + 2477: 0x0000975C, + 2478: 0x000291D5, + 2479: 0x00009757, + 2480: 0x00005B4A, + 2481: 0x000291EB, + 2482: 0x0000975F, + 2483: 0x00009425, + 2484: 0x000050D0, + 2485: 0x000230B7, + 2486: 0x000230BC, + 2487: 0x00009789, + 2488: 0x0000979F, + 2489: 0x000097B1, + 2490: 0x000097BE, + 2491: 0x000097C0, + 2492: 0x000097D2, + 2493: 0x000097E0, + 2494: 0x0002546C, + 2495: 0x000097EE, + 2496: 0x0000741C, + 2497: 0x00029433, + 2498: 0x000097FF, + 2499: 0x000097F5, + 2500: 0x0002941D, + 2501: 0x0002797A, + 2502: 0x00004AD1, + 2503: 0x00009834, + 2504: 0x00009833, + 2505: 0x0000984B, + 2506: 0x00009866, + 2507: 0x00003B0E, + 2508: 0x00027175, + 2509: 0x00003D51, + 2510: 0x00020630, + 2511: 0x0002415C, + 2512: 0x00025706, + 2513: 0x000098CA, + 2514: 0x000098B7, + 2515: 0x000098C8, + 2516: 0x000098C7, + 2517: 0x00004AFF, + 2518: 0x00026D27, + 2519: 0x000216D3, + 2520: 0x000055B0, + 2521: 0x000098E1, + 2522: 0x000098E6, + 2523: 0x000098EC, + 2524: 0x00009378, + 2525: 0x00009939, + 2526: 0x00024A29, + 2527: 0x00004B72, + 2528: 0x00029857, + 2529: 0x00029905, + 2530: 0x000099F5, + 2531: 0x00009A0C, + 2532: 0x00009A3B, + 2533: 0x00009A10, + 2534: 0x00009A58, + 2535: 0x00025725, + 2536: 0x000036C4, + 2537: 0x000290B1, + 2538: 0x00029BD5, + 2539: 0x00009AE0, + 2540: 0x00009AE2, + 2541: 0x00029B05, + 2542: 0x00009AF4, + 2543: 0x00004C0E, + 2544: 0x00009B14, + 2545: 0x00009B2D, + 2546: 0x00028600, + 2547: 0x00005034, + 2548: 0x00009B34, + 2549: 0x000269A8, + 2550: 0x000038C3, + 2551: 0x0002307D, + 2552: 0x00009B50, + 2553: 0x00009B40, + 2554: 0x00029D3E, + 2555: 0x00005A45, + 2556: 0x00021863, + 2557: 0x00009B8E, + 2558: 0x0002424B, + 2559: 0x00009C02, + 2560: 0x00009BFF, + 2561: 0x00009C0C, + 2562: 0x00029E68, + 2563: 0x00009DD4, + 2564: 0x00029FB7, + 2565: 0x0002A192, + 2566: 0x0002A1AB, + 2567: 0x0002A0E1, + 2568: 0x0002A123, + 2569: 0x0002A1DF, + 2570: 0x00009D7E, + 2571: 0x00009D83, + 2572: 0x0002A134, + 2573: 0x00009E0E, + 2574: 0x00006888, + 2575: 0x00009DC4, + 2576: 0x0002215B, + 2577: 0x0002A193, + 2578: 0x0002A220, + 2579: 0x0002193B, + 2580: 0x0002A233, + 2581: 0x00009D39, + 2582: 0x0002A0B9, + 2583: 0x0002A2B4, + 2584: 0x00009E90, + 2585: 0x00009E95, + 2586: 0x00009E9E, + 2587: 0x00009EA2, + 2588: 0x00004D34, + 2589: 0x00009EAA, + 2590: 0x00009EAF, + 2591: 0x00024364, + 2592: 0x00009EC1, + 2593: 0x00003B60, + 2594: 0x000039E5, + 2595: 0x00003D1D, + 2596: 0x00004F32, + 2597: 0x000037BE, + 2598: 0x00028C2B, + 2599: 0x00009F02, + 2600: 0x00009F08, + 2601: 0x00004B96, + 2602: 0x00009424, + 2603: 0x00026DA2, + 2604: 0x00009F17, + 2605: 0x00009F16, + 2606: 0x00009F39, + 2607: 0x0000569F, + 2608: 0x0000568A, + 2609: 0x00009F45, + 2610: 0x000099B8, + 2611: 0x0002908B, + 2612: 0x000097F2, + 2613: 0x0000847F, + 2614: 0x00009F62, + 2615: 0x00009F69, + 2616: 0x00007ADC, + 2617: 0x00009F8E, + 2618: 0x00007216, + 2619: 0x00004BBE, + 2620: 0x00024975, + 2621: 0x000249BB, + 2622: 0x00007177, + 2623: 0x000249F8, + 2624: 0x00024348, + 2625: 0x00024A51, + 2626: 0x0000739E, + 2627: 0x00028BDA, + 2628: 0x000218FA, + 2629: 0x0000799F, + 2630: 0x0002897E, + 2631: 0x00028E36, + 2632: 0x00009369, + 2633: 0x000093F3, + 2634: 0x00028A44, + 2635: 0x000092EC, + 2636: 0x00009381, + 2637: 0x000093CB, + 2638: 0x0002896C, + 2639: 0x000244B9, + 2640: 0x00007217, + 2641: 0x00003EEB, + 2642: 0x00007772, + 2643: 0x00007A43, + 2644: 0x000070D0, + 2645: 0x00024473, + 2646: 0x000243F8, + 2647: 0x0000717E, + 2648: 0x000217EF, + 2649: 0x000070A3, + 2650: 0x000218BE, + 2651: 0x00023599, + 2652: 0x00003EC7, + 2653: 0x00021885, + 2654: 0x0002542F, + 2655: 0x000217F8, + 2656: 0x00003722, + 2657: 0x000216FB, + 2658: 0x00021839, + 2659: 0x000036E1, + 2660: 0x00021774, + 2661: 0x000218D1, + 2662: 0x00025F4B, + 2663: 0x00003723, + 2664: 0x000216C0, + 2665: 0x0000575B, + 2666: 0x00024A25, + 2667: 0x000213FE, + 2668: 0x000212A8, + 2669: 0x000213C6, + 2670: 0x000214B6, + 2671: 0x00008503, + 2672: 0x000236A6, + 2673: 0x00008503, + 2674: 0x00008455, + 2675: 0x00024994, + 2676: 0x00027165, + 2677: 0x00023E31, + 2678: 0x0002555C, + 2679: 0x00023EFB, + 2680: 0x00027052, + 2681: 0x000044F4, + 2682: 0x000236EE, + 2683: 0x0002999D, + 2684: 0x00026F26, + 2685: 0x000067F9, + 2686: 0x00003733, + 2687: 0x00003C15, + 2688: 0x00003DE7, + 2689: 0x0000586C, + 2690: 0x00021922, + 2691: 0x00006810, + 2692: 0x00004057, + 2693: 0x0002373F, + 2694: 0x000240E1, + 2695: 0x0002408B, + 2696: 0x0002410F, + 2697: 0x00026C21, + 2698: 0x000054CB, + 2699: 0x0000569E, + 2700: 0x000266B1, + 2701: 0x00005692, + 2702: 0x00020FDF, + 2703: 0x00020BA8, + 2704: 0x00020E0D, + 2705: 0x000093C6, + 2706: 0x00028B13, + 2707: 0x0000939C, + 2708: 0x00004EF8, + 2709: 0x0000512B, + 2710: 0x00003819, + 2711: 0x00024436, + 2712: 0x00004EBC, + 2713: 0x00020465, + 2714: 0x0002037F, + 2715: 0x00004F4B, + 2716: 0x00004F8A, + 2717: 0x00025651, + 2718: 0x00005A68, + 2719: 0x000201AB, + 2720: 0x000203CB, + 2721: 0x00003999, + 2722: 0x0002030A, + 2723: 0x00020414, + 2724: 0x00003435, + 2725: 0x00004F29, + 2726: 0x000202C0, + 2727: 0x00028EB3, + 2728: 0x00020275, + 2729: 0x00008ADA, + 2730: 0x0002020C, + 2731: 0x00004E98, + 2732: 0x000050CD, + 2733: 0x0000510D, + 2734: 0x00004FA2, + 2735: 0x00004F03, + 2736: 0x00024A0E, + 2737: 0x00023E8A, + 2738: 0x00004F42, + 2739: 0x0000502E, + 2740: 0x0000506C, + 2741: 0x00005081, + 2742: 0x00004FCC, + 2743: 0x00004FE5, + 2744: 0x00005058, + 2745: 0x000050FC, + 2746: 0x00005159, + 2747: 0x0000515B, + 2748: 0x0000515D, + 2749: 0x0000515E, + 2750: 0x00006E76, + 2751: 0x00023595, + 2752: 0x00023E39, + 2753: 0x00023EBF, + 2754: 0x00006D72, + 2755: 0x00021884, + 2756: 0x00023E89, + 2757: 0x000051A8, + 2758: 0x000051C3, + 2759: 0x000205E0, + 2760: 0x000044DD, + 2761: 0x000204A3, + 2762: 0x00020492, + 2763: 0x00020491, + 2764: 0x00008D7A, + 2765: 0x00028A9C, + 2766: 0x0002070E, + 2767: 0x00005259, + 2768: 0x000052A4, + 2769: 0x00020873, + 2770: 0x000052E1, + 2771: 0x0000936E, + 2772: 0x0000467A, + 2773: 0x0000718C, + 2774: 0x0002438C, + 2775: 0x00020C20, + 2776: 0x000249AC, + 2777: 0x000210E4, + 2778: 0x000069D1, + 2779: 0x00020E1D, + 2780: 0x00007479, + 2781: 0x00003EDE, + 2782: 0x00007499, + 2783: 0x00007414, + 2784: 0x00007456, + 2785: 0x00007398, + 2786: 0x00004B8E, + 2787: 0x00024ABC, + 2788: 0x0002408D, + 2789: 0x000053D0, + 2790: 0x00003584, + 2791: 0x0000720F, + 2792: 0x000240C9, + 2793: 0x000055B4, + 2794: 0x00020345, + 2795: 0x000054CD, + 2796: 0x00020BC6, + 2797: 0x0000571D, + 2798: 0x0000925D, + 2799: 0x000096F4, + 2800: 0x00009366, + 2801: 0x000057DD, + 2802: 0x0000578D, + 2803: 0x0000577F, + 2804: 0x0000363E, + 2805: 0x000058CB, + 2806: 0x00005A99, + 2807: 0x00028A46, + 2808: 0x000216FA, + 2809: 0x0002176F, + 2810: 0x00021710, + 2811: 0x00005A2C, + 2812: 0x000059B8, + 2813: 0x0000928F, + 2814: 0x00005A7E, + 2815: 0x00005ACF, + 2816: 0x00005A12, + 2817: 0x00025946, + 2818: 0x000219F3, + 2819: 0x00021861, + 2820: 0x00024295, + 2821: 0x000036F5, + 2822: 0x00006D05, + 2823: 0x00007443, + 2824: 0x00005A21, + 2825: 0x00025E83, + 2826: 0x00005A81, + 2827: 0x00028BD7, + 2828: 0x00020413, + 2829: 0x000093E0, + 2830: 0x0000748C, + 2831: 0x00021303, + 2832: 0x00007105, + 2833: 0x00004972, + 2834: 0x00009408, + 2835: 0x000289FB, + 2836: 0x000093BD, + 2837: 0x000037A0, + 2838: 0x00005C1E, + 2839: 0x00005C9E, + 2840: 0x00005E5E, + 2841: 0x00005E48, + 2842: 0x00021996, + 2843: 0x0002197C, + 2844: 0x00023AEE, + 2845: 0x00005ECD, + 2846: 0x00005B4F, + 2847: 0x00021903, + 2848: 0x00021904, + 2849: 0x00003701, + 2850: 0x000218A0, + 2851: 0x000036DD, + 2852: 0x000216FE, + 2853: 0x000036D3, + 2854: 0x0000812A, + 2855: 0x00028A47, + 2856: 0x00021DBA, + 2857: 0x00023472, + 2858: 0x000289A8, + 2859: 0x00005F0C, + 2860: 0x00005F0E, + 2861: 0x00021927, + 2862: 0x000217AB, + 2863: 0x00005A6B, + 2864: 0x0002173B, + 2865: 0x00005B44, + 2866: 0x00008614, + 2867: 0x000275FD, + 2868: 0x00008860, + 2869: 0x0000607E, + 2870: 0x00022860, + 2871: 0x0002262B, + 2872: 0x00005FDB, + 2873: 0x00003EB8, + 2874: 0x000225AF, + 2875: 0x000225BE, + 2876: 0x00029088, + 2877: 0x00026F73, + 2878: 0x000061C0, + 2879: 0x0002003E, + 2880: 0x00020046, + 2881: 0x0002261B, + 2882: 0x00006199, + 2883: 0x00006198, + 2884: 0x00006075, + 2885: 0x00022C9B, + 2886: 0x00022D07, + 2887: 0x000246D4, + 2888: 0x0002914D, + 2889: 0x00006471, + 2890: 0x00024665, + 2891: 0x00022B6A, + 2892: 0x00003A29, + 2893: 0x00022B22, + 2894: 0x00023450, + 2895: 0x000298EA, + 2896: 0x00022E78, + 2897: 0x00006337, + 2898: 0x0002A45B, + 2899: 0x000064B6, + 2900: 0x00006331, + 2901: 0x000063D1, + 2902: 0x000249E3, + 2903: 0x00022D67, + 2904: 0x000062A4, + 2905: 0x00022CA1, + 2906: 0x0000643B, + 2907: 0x0000656B, + 2908: 0x00006972, + 2909: 0x00003BF4, + 2910: 0x0002308E, + 2911: 0x000232AD, + 2912: 0x00024989, + 2913: 0x000232AB, + 2914: 0x0000550D, + 2915: 0x000232E0, + 2916: 0x000218D9, + 2917: 0x0002943F, + 2918: 0x000066CE, + 2919: 0x00023289, + 2920: 0x000231B3, + 2921: 0x00003AE0, + 2922: 0x00004190, + 2923: 0x00025584, + 2924: 0x00028B22, + 2925: 0x0002558F, + 2926: 0x000216FC, + 2927: 0x0002555B, + 2928: 0x00025425, + 2929: 0x000078EE, + 2930: 0x00023103, + 2931: 0x0002182A, + 2932: 0x00023234, + 2933: 0x00003464, + 2934: 0x0002320F, + 2935: 0x00023182, + 2936: 0x000242C9, + 2937: 0x0000668E, + 2938: 0x00026D24, + 2939: 0x0000666B, + 2940: 0x00004B93, + 2941: 0x00006630, + 2942: 0x00027870, + 2943: 0x00021DEB, + 2944: 0x00006663, + 2945: 0x000232D2, + 2946: 0x000232E1, + 2947: 0x0000661E, + 2948: 0x00025872, + 2949: 0x000038D1, + 2950: 0x0002383A, + 2951: 0x000237BC, + 2952: 0x00003B99, + 2953: 0x000237A2, + 2954: 0x000233FE, + 2955: 0x000074D0, + 2956: 0x00003B96, + 2957: 0x0000678F, + 2958: 0x0002462A, + 2959: 0x000068B6, + 2960: 0x0000681E, + 2961: 0x00003BC4, + 2962: 0x00006ABE, + 2963: 0x00003863, + 2964: 0x000237D5, + 2965: 0x00024487, + 2966: 0x00006A33, + 2967: 0x00006A52, + 2968: 0x00006AC9, + 2969: 0x00006B05, + 2970: 0x00021912, + 2971: 0x00006511, + 2972: 0x00006898, + 2973: 0x00006A4C, + 2974: 0x00003BD7, + 2975: 0x00006A7A, + 2976: 0x00006B57, + 2977: 0x00023FC0, + 2978: 0x00023C9A, + 2979: 0x000093A0, + 2980: 0x000092F2, + 2981: 0x00028BEA, + 2982: 0x00028ACB, + 2983: 0x00009289, + 2984: 0x0002801E, + 2985: 0x000289DC, + 2986: 0x00009467, + 2987: 0x00006DA5, + 2988: 0x00006F0B, + 2989: 0x000249EC, + 2990: 0x00006D67, + 2991: 0x00023F7F, + 2992: 0x00003D8F, + 2993: 0x00006E04, + 2994: 0x0002403C, + 2995: 0x00005A3D, + 2996: 0x00006E0A, + 2997: 0x00005847, + 2998: 0x00006D24, + 2999: 0x00007842, + 3000: 0x0000713B, + 3001: 0x0002431A, + 3002: 0x00024276, + 3003: 0x000070F1, + 3004: 0x00007250, + 3005: 0x00007287, + 3006: 0x00007294, + 3007: 0x0002478F, + 3008: 0x00024725, + 3009: 0x00005179, + 3010: 0x00024AA4, + 3011: 0x000205EB, + 3012: 0x0000747A, + 3013: 0x00023EF8, + 3014: 0x0002365F, + 3015: 0x00024A4A, + 3016: 0x00024917, + 3017: 0x00025FE1, + 3018: 0x00003F06, + 3019: 0x00003EB1, + 3020: 0x00024ADF, + 3021: 0x00028C23, + 3022: 0x00023F35, + 3023: 0x000060A7, + 3024: 0x00003EF3, + 3025: 0x000074CC, + 3026: 0x0000743C, + 3027: 0x00009387, + 3028: 0x00007437, + 3029: 0x0000449F, + 3030: 0x00026DEA, + 3031: 0x00004551, + 3032: 0x00007583, + 3033: 0x00003F63, + 3034: 0x00024CD9, + 3035: 0x00024D06, + 3036: 0x00003F58, + 3037: 0x00007555, + 3038: 0x00007673, + 3039: 0x0002A5C6, + 3040: 0x00003B19, + 3041: 0x00007468, + 3042: 0x00028ACC, + 3043: 0x000249AB, + 3044: 0x0002498E, + 3045: 0x00003AFB, + 3046: 0x00003DCD, + 3047: 0x00024A4E, + 3048: 0x00003EFF, + 3049: 0x000249C5, + 3050: 0x000248F3, + 3051: 0x000091FA, + 3052: 0x00005732, + 3053: 0x00009342, + 3054: 0x00028AE3, + 3055: 0x00021864, + 3056: 0x000050DF, + 3057: 0x00025221, + 3058: 0x000251E7, + 3059: 0x00007778, + 3060: 0x00023232, + 3061: 0x0000770E, + 3062: 0x0000770F, + 3063: 0x0000777B, + 3064: 0x00024697, + 3065: 0x00023781, + 3066: 0x00003A5E, + 3067: 0x000248F0, + 3068: 0x00007438, + 3069: 0x0000749B, + 3070: 0x00003EBF, + 3071: 0x00024ABA, + 3072: 0x00024AC7, + 3073: 0x000040C8, + 3074: 0x00024A96, + 3075: 0x000261AE, + 3076: 0x00009307, + 3077: 0x00025581, + 3078: 0x0000781E, + 3079: 0x0000788D, + 3080: 0x00007888, + 3081: 0x000078D2, + 3082: 0x000073D0, + 3083: 0x00007959, + 3084: 0x00027741, + 3085: 0x000256E3, + 3086: 0x0000410E, + 3087: 0x0000799B, + 3088: 0x00008496, + 3089: 0x000079A5, + 3090: 0x00006A2D, + 3091: 0x00023EFA, + 3092: 0x00007A3A, + 3093: 0x000079F4, + 3094: 0x0000416E, + 3095: 0x000216E6, + 3096: 0x00004132, + 3097: 0x00009235, + 3098: 0x000079F1, + 3099: 0x00020D4C, + 3100: 0x0002498C, + 3101: 0x00020299, + 3102: 0x00023DBA, + 3103: 0x0002176E, + 3104: 0x00003597, + 3105: 0x0000556B, + 3106: 0x00003570, + 3107: 0x000036AA, + 3108: 0x000201D4, + 3109: 0x00020C0D, + 3110: 0x00007AE2, + 3111: 0x00005A59, + 3112: 0x000226F5, + 3113: 0x00025AAF, + 3114: 0x00025A9C, + 3115: 0x00005A0D, + 3116: 0x0002025B, + 3117: 0x000078F0, + 3118: 0x00005A2A, + 3119: 0x00025BC6, + 3120: 0x00007AFE, + 3121: 0x000041F9, + 3122: 0x00007C5D, + 3123: 0x00007C6D, + 3124: 0x00004211, + 3125: 0x00025BB3, + 3126: 0x00025EBC, + 3127: 0x00025EA6, + 3128: 0x00007CCD, + 3129: 0x000249F9, + 3130: 0x000217B0, + 3131: 0x00007C8E, + 3132: 0x00007C7C, + 3133: 0x00007CAE, + 3134: 0x00006AB2, + 3135: 0x00007DDC, + 3136: 0x00007E07, + 3137: 0x00007DD3, + 3138: 0x00007F4E, + 3139: 0x00026261, + 3140: 0x0002615C, + 3141: 0x00027B48, + 3142: 0x00007D97, + 3143: 0x00025E82, + 3144: 0x0000426A, + 3145: 0x00026B75, + 3146: 0x00020916, + 3147: 0x000067D6, + 3148: 0x0002004E, + 3149: 0x000235CF, + 3150: 0x000057C4, + 3151: 0x00026412, + 3152: 0x000263F8, + 3153: 0x00024962, + 3154: 0x00007FDD, + 3155: 0x00007B27, + 3156: 0x0002082C, + 3157: 0x00025AE9, + 3158: 0x00025D43, + 3159: 0x00007B0C, + 3160: 0x00025E0E, + 3161: 0x000099E6, + 3162: 0x00008645, + 3163: 0x00009A63, + 3164: 0x00006A1C, + 3165: 0x0002343F, + 3166: 0x000039E2, + 3167: 0x000249F7, + 3168: 0x000265AD, + 3169: 0x00009A1F, + 3170: 0x000265A0, + 3171: 0x00008480, + 3172: 0x00027127, + 3173: 0x00026CD1, + 3174: 0x000044EA, + 3175: 0x00008137, + 3176: 0x00004402, + 3177: 0x000080C6, + 3178: 0x00008109, + 3179: 0x00008142, + 3180: 0x000267B4, + 3181: 0x000098C3, + 3182: 0x00026A42, + 3183: 0x00008262, + 3184: 0x00008265, + 3185: 0x00026A51, + 3186: 0x00008453, + 3187: 0x00026DA7, + 3188: 0x00008610, + 3189: 0x0002721B, + 3190: 0x00005A86, + 3191: 0x0000417F, + 3192: 0x00021840, + 3193: 0x00005B2B, + 3194: 0x000218A1, + 3195: 0x00005AE4, + 3196: 0x000218D8, + 3197: 0x000086A0, + 3198: 0x0002F9BC, + 3199: 0x00023D8F, + 3200: 0x0000882D, + 3201: 0x00027422, + 3202: 0x00005A02, + 3203: 0x0000886E, + 3204: 0x00004F45, + 3205: 0x00008887, + 3206: 0x000088BF, + 3207: 0x000088E6, + 3208: 0x00008965, + 3209: 0x0000894D, + 3210: 0x00025683, + 3211: 0x00008954, + 3212: 0x00027785, + 3213: 0x00027784, + 3214: 0x00028BF5, + 3215: 0x00028BD9, + 3216: 0x00028B9C, + 3217: 0x000289F9, + 3218: 0x00003EAD, + 3219: 0x000084A3, + 3220: 0x000046F5, + 3221: 0x000046CF, + 3222: 0x000037F2, + 3223: 0x00008A3D, + 3224: 0x00008A1C, + 3225: 0x00029448, + 3226: 0x00005F4D, + 3227: 0x0000922B, + 3228: 0x00024284, + 3229: 0x000065D4, + 3230: 0x00007129, + 3231: 0x000070C4, + 3232: 0x00021845, + 3233: 0x00009D6D, + 3234: 0x00008C9F, + 3235: 0x00008CE9, + 3236: 0x00027DDC, + 3237: 0x0000599A, + 3238: 0x000077C3, + 3239: 0x000059F0, + 3240: 0x0000436E, + 3241: 0x000036D4, + 3242: 0x00008E2A, + 3243: 0x00008EA7, + 3244: 0x00024C09, + 3245: 0x00008F30, + 3246: 0x00008F4A, + 3247: 0x000042F4, + 3248: 0x00006C58, + 3249: 0x00006FBB, + 3250: 0x00022321, + 3251: 0x0000489B, + 3252: 0x00006F79, + 3253: 0x00006E8B, + 3254: 0x000217DA, + 3255: 0x00009BE9, + 3256: 0x000036B5, + 3257: 0x0002492F, + 3258: 0x000090BB, + 3259: 0x00009097, + 3260: 0x00005571, + 3261: 0x00004906, + 3262: 0x000091BB, + 3263: 0x00009404, + 3264: 0x00028A4B, + 3265: 0x00004062, + 3266: 0x00028AFC, + 3267: 0x00009427, + 3268: 0x00028C1D, + 3269: 0x00028C3B, + 3270: 0x000084E5, + 3271: 0x00008A2B, + 3272: 0x00009599, + 3273: 0x000095A7, + 3274: 0x00009597, + 3275: 0x00009596, + 3276: 0x00028D34, + 3277: 0x00007445, + 3278: 0x00003EC2, + 3279: 0x000248FF, + 3280: 0x00024A42, + 3281: 0x000243EA, + 3282: 0x00003EE7, + 3283: 0x00023225, + 3284: 0x0000968F, + 3285: 0x00028EE7, + 3286: 0x00028E66, + 3287: 0x00028E65, + 3288: 0x00003ECC, + 3289: 0x000249ED, + 3290: 0x00024A78, + 3291: 0x00023FEE, + 3292: 0x00007412, + 3293: 0x0000746B, + 3294: 0x00003EFC, + 3295: 0x00009741, + 3296: 0x000290B0, + 3297: 0x00006847, + 3298: 0x00004A1D, + 3299: 0x00029093, + 3300: 0x000257DF, + 3301: 0x0000975D, + 3302: 0x00009368, + 3303: 0x00028989, + 3304: 0x00028C26, + 3305: 0x00028B2F, + 3306: 0x000263BE, + 3307: 0x000092BA, + 3308: 0x00005B11, + 3309: 0x00008B69, + 3310: 0x0000493C, + 3311: 0x000073F9, + 3312: 0x0002421B, + 3313: 0x0000979B, + 3314: 0x00009771, + 3315: 0x00009938, + 3316: 0x00020F26, + 3317: 0x00005DC1, + 3318: 0x00028BC5, + 3319: 0x00024AB2, + 3320: 0x0000981F, + 3321: 0x000294DA, + 3322: 0x000092F6, + 3323: 0x000295D7, + 3324: 0x000091E5, + 3325: 0x000044C0, + 3326: 0x00028B50, + 3327: 0x00024A67, + 3328: 0x00028B64, + 3329: 0x000098DC, + 3330: 0x00028A45, + 3331: 0x00003F00, + 3332: 0x0000922A, + 3333: 0x00004925, + 3334: 0x00008414, + 3335: 0x0000993B, + 3336: 0x0000994D, + 3337: 0x00027B06, + 3338: 0x00003DFD, + 3339: 0x0000999B, + 3340: 0x00004B6F, + 3341: 0x000099AA, + 3342: 0x00009A5C, + 3343: 0x00028B65, + 3344: 0x000258C8, + 3345: 0x00006A8F, + 3346: 0x00009A21, + 3347: 0x00005AFE, + 3348: 0x00009A2F, + 3349: 0x000298F1, + 3350: 0x00004B90, + 3351: 0x00029948, + 3352: 0x000099BC, + 3353: 0x00004BBD, + 3354: 0x00004B97, + 3355: 0x0000937D, + 3356: 0x00005872, + 3357: 0x00021302, + 3358: 0x00005822, + 3359: 0x000249B8, + 3360: 0x000214E8, + 3361: 0x00007844, + 3362: 0x0002271F, + 3363: 0x00023DB8, + 3364: 0x000068C5, + 3365: 0x00003D7D, + 3366: 0x00009458, + 3367: 0x00003927, + 3368: 0x00006150, + 3369: 0x00022781, + 3370: 0x0002296B, + 3371: 0x00006107, + 3372: 0x00009C4F, + 3373: 0x00009C53, + 3374: 0x00009C7B, + 3375: 0x00009C35, + 3376: 0x00009C10, + 3377: 0x00009B7F, + 3378: 0x00009BCF, + 3379: 0x00029E2D, + 3380: 0x00009B9F, + 3381: 0x0002A1F5, + 3382: 0x0002A0FE, + 3383: 0x00009D21, + 3384: 0x00004CAE, + 3385: 0x00024104, + 3386: 0x00009E18, + 3387: 0x00004CB0, + 3388: 0x00009D0C, + 3389: 0x0002A1B4, + 3390: 0x0002A0ED, + 3391: 0x0002A0F3, + 3392: 0x0002992F, + 3393: 0x00009DA5, + 3394: 0x000084BD, + 3395: 0x00026E12, + 3396: 0x00026FDF, + 3397: 0x00026B82, + 3398: 0x000085FC, + 3399: 0x00004533, + 3400: 0x00026DA4, + 3401: 0x00026E84, + 3402: 0x00026DF0, + 3403: 0x00008420, + 3404: 0x000085EE, + 3405: 0x00026E00, + 3406: 0x000237D7, + 3407: 0x00026064, + 3408: 0x000079E2, + 3409: 0x0002359C, + 3410: 0x00023640, + 3411: 0x0000492D, + 3412: 0x000249DE, + 3413: 0x00003D62, + 3414: 0x000093DB, + 3415: 0x000092BE, + 3416: 0x00009348, + 3417: 0x000202BF, + 3418: 0x000078B9, + 3419: 0x00009277, + 3420: 0x0000944D, + 3421: 0x00004FE4, + 3422: 0x00003440, + 3423: 0x00009064, + 3424: 0x0002555D, + 3425: 0x0000783D, + 3426: 0x00007854, + 3427: 0x000078B6, + 3428: 0x0000784B, + 3429: 0x00021757, + 3430: 0x000231C9, + 3431: 0x00024941, + 3432: 0x0000369A, + 3433: 0x00004F72, + 3434: 0x00006FDA, + 3435: 0x00006FD9, + 3436: 0x0000701E, + 3437: 0x0000701E, + 3438: 0x00005414, + 3439: 0x000241B5, + 3440: 0x000057BB, + 3441: 0x000058F3, + 3442: 0x0000578A, + 3443: 0x00009D16, + 3444: 0x000057D7, + 3445: 0x00007134, + 3446: 0x000034AF, + 3447: 0x000241AC, + 3448: 0x000071EB, + 3449: 0x00026C40, + 3450: 0x00024F97, + 3451: 0x00005B28, + 3452: 0x000217B5, + 3453: 0x00028A49, + 3454: 0x0000610C, + 3455: 0x00005ACE, + 3456: 0x00005A0B, + 3457: 0x000042BC, + 3458: 0x00024488, + 3459: 0x0000372C, + 3460: 0x00004B7B, + 3461: 0x000289FC, + 3462: 0x000093BB, + 3463: 0x000093B8, + 3464: 0x000218D6, + 3465: 0x00020F1D, + 3466: 0x00008472, + 3467: 0x00026CC0, + 3468: 0x00021413, + 3469: 0x000242FA, + 3470: 0x00022C26, + 3471: 0x000243C1, + 3472: 0x00005994, + 3473: 0x00023DB7, + 3474: 0x00026741, + 3475: 0x00007DA8, + 3476: 0x0002615B, + 3477: 0x000260A4, + 3478: 0x000249B9, + 3479: 0x0002498B, + 3480: 0x000289FA, + 3481: 0x000092E5, + 3482: 0x000073E2, + 3483: 0x00003EE9, + 3484: 0x000074B4, + 3485: 0x00028B63, + 3486: 0x0002189F, + 3487: 0x00003EE1, + 3488: 0x00024AB3, + 3489: 0x00006AD8, + 3490: 0x000073F3, + 3491: 0x000073FB, + 3492: 0x00003ED6, + 3493: 0x00024A3E, + 3494: 0x00024A94, + 3495: 0x000217D9, + 3496: 0x00024A66, + 3497: 0x000203A7, + 3498: 0x00021424, + 3499: 0x000249E5, + 3500: 0x00007448, + 3501: 0x00024916, + 3502: 0x000070A5, + 3503: 0x00024976, + 3504: 0x00009284, + 3505: 0x000073E6, + 3506: 0x0000935F, + 3507: 0x000204FE, + 3508: 0x00009331, + 3509: 0x00028ACE, + 3510: 0x00028A16, + 3511: 0x00009386, + 3512: 0x00028BE7, + 3513: 0x000255D5, + 3514: 0x00004935, + 3515: 0x00028A82, + 3516: 0x0000716B, + 3517: 0x00024943, + 3518: 0x00020CFF, + 3519: 0x000056A4, + 3520: 0x0002061A, + 3521: 0x00020BEB, + 3522: 0x00020CB8, + 3523: 0x00005502, + 3524: 0x000079C4, + 3525: 0x000217FA, + 3526: 0x00007DFE, + 3527: 0x000216C2, + 3528: 0x00024A50, + 3529: 0x00021852, + 3530: 0x0000452E, + 3531: 0x00009401, + 3532: 0x0000370A, + 3533: 0x00028AC0, + 3534: 0x000249AD, + 3535: 0x000059B0, + 3536: 0x000218BF, + 3537: 0x00021883, + 3538: 0x00027484, + 3539: 0x00005AA1, + 3540: 0x000036E2, + 3541: 0x00023D5B, + 3542: 0x000036B0, + 3543: 0x0000925F, + 3544: 0x00005A79, + 3545: 0x00028A81, + 3546: 0x00021862, + 3547: 0x00009374, + 3548: 0x00003CCD, + 3549: 0x00020AB4, + 3550: 0x00004A96, + 3551: 0x0000398A, + 3552: 0x000050F4, + 3553: 0x00003D69, + 3554: 0x00003D4C, + 3555: 0x0002139C, + 3556: 0x00007175, + 3557: 0x000042FB, + 3558: 0x00028218, + 3559: 0x00006E0F, + 3560: 0x000290E4, + 3561: 0x000044EB, + 3562: 0x00006D57, + 3563: 0x00027E4F, + 3564: 0x00007067, + 3565: 0x00006CAF, + 3566: 0x00003CD6, + 3567: 0x00023FED, + 3568: 0x00023E2D, + 3569: 0x00006E02, + 3570: 0x00006F0C, + 3571: 0x00003D6F, + 3572: 0x000203F5, + 3573: 0x00007551, + 3574: 0x000036BC, + 3575: 0x000034C8, + 3576: 0x00004680, + 3577: 0x00003EDA, + 3578: 0x00004871, + 3579: 0x000059C4, + 3580: 0x0000926E, + 3581: 0x0000493E, + 3582: 0x00008F41, + 3583: 0x00028C1C, + 3584: 0x00026BC0, + 3585: 0x00005812, + 3586: 0x000057C8, + 3587: 0x000036D6, + 3588: 0x00021452, + 3589: 0x000070FE, + 3590: 0x00024362, + 3591: 0x00024A71, + 3592: 0x00022FE3, + 3593: 0x000212B0, + 3594: 0x000223BD, + 3595: 0x000068B9, + 3596: 0x00006967, + 3597: 0x00021398, + 3598: 0x000234E5, + 3599: 0x00027BF4, + 3600: 0x000236DF, + 3601: 0x00028A83, + 3602: 0x000237D6, + 3603: 0x000233FA, + 3604: 0x00024C9F, + 3605: 0x00006A1A, + 3606: 0x000236AD, + 3607: 0x00026CB7, + 3608: 0x0000843E, + 3609: 0x000044DF, + 3610: 0x000044CE, + 3611: 0x00026D26, + 3612: 0x00026D51, + 3613: 0x00026C82, + 3614: 0x00026FDE, + 3615: 0x00006F17, + 3616: 0x00027109, + 3617: 0x0000833D, + 3618: 0x0002173A, + 3619: 0x000083ED, + 3620: 0x00026C80, + 3621: 0x00027053, + 3622: 0x000217DB, + 3623: 0x00005989, + 3624: 0x00005A82, + 3625: 0x000217B3, + 3626: 0x00005A61, + 3627: 0x00005A71, + 3628: 0x00021905, + 3629: 0x000241FC, + 3630: 0x0000372D, + 3631: 0x000059EF, + 3632: 0x0002173C, + 3633: 0x000036C7, + 3634: 0x0000718E, + 3635: 0x00009390, + 3636: 0x0000669A, + 3637: 0x000242A5, + 3638: 0x00005A6E, + 3639: 0x00005A2B, + 3640: 0x00024293, + 3641: 0x00006A2B, + 3642: 0x00023EF9, + 3643: 0x00027736, + 3644: 0x0002445B, + 3645: 0x000242CA, + 3646: 0x0000711D, + 3647: 0x00024259, + 3648: 0x000289E1, + 3649: 0x00004FB0, + 3650: 0x00026D28, + 3651: 0x00005CC2, + 3652: 0x000244CE, + 3653: 0x00027E4D, + 3654: 0x000243BD, + 3655: 0x00006A0C, + 3656: 0x00024256, + 3657: 0x00021304, + 3658: 0x000070A6, + 3659: 0x00007133, + 3660: 0x000243E9, + 3661: 0x00003DA5, + 3662: 0x00006CDF, + 3663: 0x0002F825, + 3664: 0x00024A4F, + 3665: 0x00007E65, + 3666: 0x000059EB, + 3667: 0x00005D2F, + 3668: 0x00003DF3, + 3669: 0x00005F5C, + 3670: 0x00024A5D, + 3671: 0x000217DF, + 3672: 0x00007DA4, + 3673: 0x00008426, + 3674: 0x00005485, + 3675: 0x00023AFA, + 3676: 0x00023300, + 3677: 0x00020214, + 3678: 0x0000577E, + 3679: 0x000208D5, + 3680: 0x00020619, + 3681: 0x00003FE5, + 3682: 0x00021F9E, + 3683: 0x0002A2B6, + 3684: 0x00007003, + 3685: 0x0002915B, + 3686: 0x00005D70, + 3687: 0x0000738F, + 3688: 0x00007CD3, + 3689: 0x00028A59, + 3690: 0x00029420, + 3691: 0x00004FC8, + 3692: 0x00007FE7, + 3693: 0x000072CD, + 3694: 0x00007310, + 3695: 0x00027AF4, + 3696: 0x00007338, + 3697: 0x00007339, + 3698: 0x000256F6, + 3699: 0x00007341, + 3700: 0x00007348, + 3701: 0x00003EA9, + 3702: 0x00027B18, + 3703: 0x0000906C, + 3704: 0x000071F5, + 3705: 0x000248F2, + 3706: 0x000073E1, + 3707: 0x000081F6, + 3708: 0x00003ECA, + 3709: 0x0000770C, + 3710: 0x00003ED1, + 3711: 0x00006CA2, + 3712: 0x000056FD, + 3713: 0x00007419, + 3714: 0x0000741E, + 3715: 0x0000741F, + 3716: 0x00003EE2, + 3717: 0x00003EF0, + 3718: 0x00003EF4, + 3719: 0x00003EFA, + 3720: 0x000074D3, + 3721: 0x00003F0E, + 3722: 0x00003F53, + 3723: 0x00007542, + 3724: 0x0000756D, + 3725: 0x00007572, + 3726: 0x0000758D, + 3727: 0x00003F7C, + 3728: 0x000075C8, + 3729: 0x000075DC, + 3730: 0x00003FC0, + 3731: 0x0000764D, + 3732: 0x00003FD7, + 3733: 0x00007674, + 3734: 0x00003FDC, + 3735: 0x0000767A, + 3736: 0x00024F5C, + 3737: 0x00007188, + 3738: 0x00005623, + 3739: 0x00008980, + 3740: 0x00005869, + 3741: 0x0000401D, + 3742: 0x00007743, + 3743: 0x00004039, + 3744: 0x00006761, + 3745: 0x00004045, + 3746: 0x000035DB, + 3747: 0x00007798, + 3748: 0x0000406A, + 3749: 0x0000406F, + 3750: 0x00005C5E, + 3751: 0x000077BE, + 3752: 0x000077CB, + 3753: 0x000058F2, + 3754: 0x00007818, + 3755: 0x000070B9, + 3756: 0x0000781C, + 3757: 0x000040A8, + 3758: 0x00007839, + 3759: 0x00007847, + 3760: 0x00007851, + 3761: 0x00007866, + 3762: 0x00008448, + 3763: 0x00025535, + 3764: 0x00007933, + 3765: 0x00006803, + 3766: 0x00007932, + 3767: 0x00004103, + 3768: 0x00004109, + 3769: 0x00007991, + 3770: 0x00007999, + 3771: 0x00008FBB, + 3772: 0x00007A06, + 3773: 0x00008FBC, + 3774: 0x00004167, + 3775: 0x00007A91, + 3776: 0x000041B2, + 3777: 0x00007ABC, + 3778: 0x00008279, + 3779: 0x000041C4, + 3780: 0x00007ACF, + 3781: 0x00007ADB, + 3782: 0x000041CF, + 3783: 0x00004E21, + 3784: 0x00007B62, + 3785: 0x00007B6C, + 3786: 0x00007B7B, + 3787: 0x00007C12, + 3788: 0x00007C1B, + 3789: 0x00004260, + 3790: 0x0000427A, + 3791: 0x00007C7B, + 3792: 0x00007C9C, + 3793: 0x0000428C, + 3794: 0x00007CB8, + 3795: 0x00004294, + 3796: 0x00007CED, + 3797: 0x00008F93, + 3798: 0x000070C0, + 3799: 0x00020CCF, + 3800: 0x00007DCF, + 3801: 0x00007DD4, + 3802: 0x00007DD0, + 3803: 0x00007DFD, + 3804: 0x00007FAE, + 3805: 0x00007FB4, + 3806: 0x0000729F, + 3807: 0x00004397, + 3808: 0x00008020, + 3809: 0x00008025, + 3810: 0x00007B39, + 3811: 0x0000802E, + 3812: 0x00008031, + 3813: 0x00008054, + 3814: 0x00003DCC, + 3815: 0x000057B4, + 3816: 0x000070A0, + 3817: 0x000080B7, + 3818: 0x000080E9, + 3819: 0x000043ED, + 3820: 0x0000810C, + 3821: 0x0000732A, + 3822: 0x0000810E, + 3823: 0x00008112, + 3824: 0x00007560, + 3825: 0x00008114, + 3826: 0x00004401, + 3827: 0x00003B39, + 3828: 0x00008156, + 3829: 0x00008159, + 3830: 0x0000815A, + 3831: 0x00004413, + 3832: 0x0000583A, + 3833: 0x0000817C, + 3834: 0x00008184, + 3835: 0x00004425, + 3836: 0x00008193, + 3837: 0x0000442D, + 3838: 0x000081A5, + 3839: 0x000057EF, + 3840: 0x000081C1, + 3841: 0x000081E4, + 3842: 0x00008254, + 3843: 0x0000448F, + 3844: 0x000082A6, + 3845: 0x00008276, + 3846: 0x000082CA, + 3847: 0x000082D8, + 3848: 0x000082FF, + 3849: 0x000044B0, + 3850: 0x00008357, + 3851: 0x00009669, + 3852: 0x0000698A, + 3853: 0x00008405, + 3854: 0x000070F5, + 3855: 0x00008464, + 3856: 0x000060E3, + 3857: 0x00008488, + 3858: 0x00004504, + 3859: 0x000084BE, + 3860: 0x000084E1, + 3861: 0x000084F8, + 3862: 0x00008510, + 3863: 0x00008538, + 3864: 0x00008552, + 3865: 0x0000453B, + 3866: 0x0000856F, + 3867: 0x00008570, + 3868: 0x000085E0, + 3869: 0x00004577, + 3870: 0x00008672, + 3871: 0x00008692, + 3872: 0x000086B2, + 3873: 0x000086EF, + 3874: 0x00009645, + 3875: 0x0000878B, + 3876: 0x00004606, + 3877: 0x00004617, + 3878: 0x000088AE, + 3879: 0x000088FF, + 3880: 0x00008924, + 3881: 0x00008947, + 3882: 0x00008991, + 3883: 0x00027967, + 3884: 0x00008A29, + 3885: 0x00008A38, + 3886: 0x00008A94, + 3887: 0x00008AB4, + 3888: 0x00008C51, + 3889: 0x00008CD4, + 3890: 0x00008CF2, + 3891: 0x00008D1C, + 3892: 0x00004798, + 3893: 0x0000585F, + 3894: 0x00008DC3, + 3895: 0x000047ED, + 3896: 0x00004EEE, + 3897: 0x00008E3A, + 3898: 0x000055D8, + 3899: 0x00005754, + 3900: 0x00008E71, + 3901: 0x000055F5, + 3902: 0x00008EB0, + 3903: 0x00004837, + 3904: 0x00008ECE, + 3905: 0x00008EE2, + 3906: 0x00008EE4, + 3907: 0x00008EED, + 3908: 0x00008EF2, + 3909: 0x00008FB7, + 3910: 0x00008FC1, + 3911: 0x00008FCA, + 3912: 0x00008FCC, + 3913: 0x00009033, + 3914: 0x000099C4, + 3915: 0x000048AD, + 3916: 0x000098E0, + 3917: 0x00009213, + 3918: 0x0000491E, + 3919: 0x00009228, + 3920: 0x00009258, + 3921: 0x0000926B, + 3922: 0x000092B1, + 3923: 0x000092AE, + 3924: 0x000092BF, + 3925: 0x000092E3, + 3926: 0x000092EB, + 3927: 0x000092F3, + 3928: 0x000092F4, + 3929: 0x000092FD, + 3930: 0x00009343, + 3931: 0x00009384, + 3932: 0x000093AD, + 3933: 0x00004945, + 3934: 0x00004951, + 3935: 0x00009EBF, + 3936: 0x00009417, + 3937: 0x00005301, + 3938: 0x0000941D, + 3939: 0x0000942D, + 3940: 0x0000943E, + 3941: 0x0000496A, + 3942: 0x00009454, + 3943: 0x00009479, + 3944: 0x0000952D, + 3945: 0x000095A2, + 3946: 0x000049A7, + 3947: 0x000095F4, + 3948: 0x00009633, + 3949: 0x000049E5, + 3950: 0x000067A0, + 3951: 0x00004A24, + 3952: 0x00009740, + 3953: 0x00004A35, + 3954: 0x000097B2, + 3955: 0x000097C2, + 3956: 0x00005654, + 3957: 0x00004AE4, + 3958: 0x000060E8, + 3959: 0x000098B9, + 3960: 0x00004B19, + 3961: 0x000098F1, + 3962: 0x00005844, + 3963: 0x0000990E, + 3964: 0x00009919, + 3965: 0x000051B4, + 3966: 0x0000991C, + 3967: 0x00009937, + 3968: 0x00009942, + 3969: 0x0000995D, + 3970: 0x00009962, + 3971: 0x00004B70, + 3972: 0x000099C5, + 3973: 0x00004B9D, + 3974: 0x00009A3C, + 3975: 0x00009B0F, + 3976: 0x00007A83, + 3977: 0x00009B69, + 3978: 0x00009B81, + 3979: 0x00009BDD, + 3980: 0x00009BF1, + 3981: 0x00009BF4, + 3982: 0x00004C6D, + 3983: 0x00009C20, + 3984: 0x0000376F, + 3985: 0x00021BC2, + 3986: 0x00009D49, + 3987: 0x00009C3A, + 3988: 0x00009EFE, + 3989: 0x00005650, + 3990: 0x00009D93, + 3991: 0x00009DBD, + 3992: 0x00009DC0, + 3993: 0x00009DFC, + 3994: 0x000094F6, + 3995: 0x00008FB6, + 3996: 0x00009E7B, + 3997: 0x00009EAC, + 3998: 0x00009EB1, + 3999: 0x00009EBD, + 4000: 0x00009EC6, + 4001: 0x000094DC, + 4002: 0x00009EE2, + 4003: 0x00009EF1, + 4004: 0x00009EF8, + 4005: 0x00007AC8, + 4006: 0x00009F44, + 4007: 0x00020094, + 4008: 0x000202B7, + 4009: 0x000203A0, + 4010: 0x0000691A, + 4011: 0x000094C3, + 4012: 0x000059AC, + 4013: 0x000204D7, + 4014: 0x00005840, + 4015: 0x000094C1, + 4016: 0x000037B9, + 4017: 0x000205D5, + 4018: 0x00020615, + 4019: 0x00020676, + 4020: 0x000216BA, + 4021: 0x00005757, + 4022: 0x00007173, + 4023: 0x00020AC2, + 4024: 0x00020ACD, + 4025: 0x00020BBF, + 4026: 0x0000546A, + 4027: 0x0002F83B, + 4028: 0x00020BCB, + 4029: 0x0000549E, + 4030: 0x00020BFB, + 4031: 0x00020C3B, + 4032: 0x00020C53, + 4033: 0x00020C65, + 4034: 0x00020C7C, + 4035: 0x000060E7, + 4036: 0x00020C8D, + 4037: 0x0000567A, + 4038: 0x00020CB5, + 4039: 0x00020CDD, + 4040: 0x00020CED, + 4041: 0x00020D6F, + 4042: 0x00020DB2, + 4043: 0x00020DC8, + 4044: 0x00006955, + 4045: 0x00009C2F, + 4046: 0x000087A5, + 4047: 0x00020E04, + 4048: 0x00020E0E, + 4049: 0x00020ED7, + 4050: 0x00020F90, + 4051: 0x00020F2D, + 4052: 0x00020E73, + 4053: 0x00005C20, + 4054: 0x00020FBC, + 4055: 0x00005E0B, + 4056: 0x0002105C, + 4057: 0x0002104F, + 4058: 0x00021076, + 4059: 0x0000671E, + 4060: 0x0002107B, + 4061: 0x00021088, + 4062: 0x00021096, + 4063: 0x00003647, + 4064: 0x000210BF, + 4065: 0x000210D3, + 4066: 0x0002112F, + 4067: 0x0002113B, + 4068: 0x00005364, + 4069: 0x000084AD, + 4070: 0x000212E3, + 4071: 0x00021375, + 4072: 0x00021336, + 4073: 0x00008B81, + 4074: 0x00021577, + 4075: 0x00021619, + 4076: 0x000217C3, + 4077: 0x000217C7, + 4078: 0x00004E78, + 4079: 0x000070BB, + 4080: 0x0002182D, + 4081: 0x0002196A, + 4082: 0x00021A2D, + 4083: 0x00021A45, + 4084: 0x00021C2A, + 4085: 0x00021C70, + 4086: 0x00021CAC, + 4087: 0x00021EC8, + 4088: 0x000062C3, + 4089: 0x00021ED5, + 4090: 0x00021F15, + 4091: 0x00007198, + 4092: 0x00006855, + 4093: 0x00022045, + 4094: 0x000069E9, + 4095: 0x000036C8, + 4096: 0x0002227C, + 4097: 0x000223D7, + 4098: 0x000223FA, + 4099: 0x0002272A, + 4100: 0x00022871, + 4101: 0x0002294F, + 4102: 0x000082FD, + 4103: 0x00022967, + 4104: 0x00022993, + 4105: 0x00022AD5, + 4106: 0x000089A5, + 4107: 0x00022AE8, + 4108: 0x00008FA0, + 4109: 0x00022B0E, + 4110: 0x000097B8, + 4111: 0x00022B3F, + 4112: 0x00009847, + 4113: 0x00009ABD, + 4114: 0x00022C4C, + 4116: 0x00022C88, + 4117: 0x00022CB7, + 4118: 0x00025BE8, + 4119: 0x00022D08, + 4120: 0x00022D12, + 4121: 0x00022DB7, + 4122: 0x00022D95, + 4123: 0x00022E42, + 4124: 0x00022F74, + 4125: 0x00022FCC, + 4126: 0x00023033, + 4127: 0x00023066, + 4128: 0x0002331F, + 4129: 0x000233DE, + 4130: 0x00005FB1, + 4131: 0x00006648, + 4132: 0x000066BF, + 4133: 0x00027A79, + 4134: 0x00023567, + 4135: 0x000235F3, + 4136: 0x00007201, + 4137: 0x000249BA, + 4138: 0x000077D7, + 4139: 0x0002361A, + 4140: 0x00023716, + 4141: 0x00007E87, + 4142: 0x00020346, + 4143: 0x000058B5, + 4144: 0x0000670E, + 4145: 0x00006918, + 4146: 0x00023AA7, + 4147: 0x00027657, + 4148: 0x00025FE2, + 4149: 0x00023E11, + 4150: 0x00023EB9, + 4151: 0x000275FE, + 4152: 0x0002209A, + 4153: 0x000048D0, + 4154: 0x00004AB8, + 4155: 0x00024119, + 4156: 0x00028A9A, + 4157: 0x000242EE, + 4158: 0x0002430D, + 4159: 0x0002403B, + 4160: 0x00024334, + 4161: 0x00024396, + 4162: 0x00024A45, + 4163: 0x000205CA, + 4164: 0x000051D2, + 4165: 0x00020611, + 4166: 0x0000599F, + 4167: 0x00021EA8, + 4168: 0x00003BBE, + 4169: 0x00023CFF, + 4170: 0x00024404, + 4171: 0x000244D6, + 4172: 0x00005788, + 4173: 0x00024674, + 4174: 0x0000399B, + 4175: 0x0002472F, + 4176: 0x000285E8, + 4177: 0x000299C9, + 4178: 0x00003762, + 4179: 0x000221C3, + 4180: 0x00008B5E, + 4181: 0x00028B4E, + 4182: 0x000099D6, + 4183: 0x00024812, + 4184: 0x000248FB, + 4185: 0x00024A15, + 4186: 0x00007209, + 4187: 0x00024AC0, + 4188: 0x00020C78, + 4189: 0x00005965, + 4190: 0x00024EA5, + 4191: 0x00024F86, + 4192: 0x00020779, + 4193: 0x00008EDA, + 4194: 0x0002502C, + 4195: 0x0000528F, + 4196: 0x0000573F, + 4197: 0x00007171, + 4198: 0x00025299, + 4199: 0x00025419, + 4200: 0x00023F4A, + 4201: 0x00024AA7, + 4202: 0x000055BC, + 4203: 0x00025446, + 4204: 0x0002546E, + 4205: 0x00026B52, + 4206: 0x000091D4, + 4207: 0x00003473, + 4208: 0x0002553F, + 4209: 0x00027632, + 4210: 0x0002555E, + 4211: 0x00004718, + 4212: 0x00025562, + 4213: 0x00025566, + 4214: 0x000257C7, + 4215: 0x0002493F, + 4216: 0x0002585D, + 4217: 0x00005066, + 4218: 0x000034FB, + 4219: 0x000233CC, + 4220: 0x000060DE, + 4221: 0x00025903, + 4222: 0x0000477C, + 4223: 0x00028948, + 4224: 0x00025AAE, + 4225: 0x00025B89, + 4226: 0x00025C06, + 4227: 0x00021D90, + 4228: 0x000057A1, + 4229: 0x00007151, + 4230: 0x00006FB6, + 4231: 0x00026102, + 4232: 0x00027C12, + 4233: 0x00009056, + 4234: 0x000261B2, + 4235: 0x00024F9A, + 4236: 0x00008B62, + 4237: 0x00026402, + 4238: 0x0002644A, + 4239: 0x00005D5B, + 4240: 0x00026BF7, + 4241: 0x00008F36, + 4242: 0x00026484, + 4243: 0x0002191C, + 4244: 0x00008AEA, + 4245: 0x000249F6, + 4246: 0x00026488, + 4247: 0x00023FEF, + 4248: 0x00026512, + 4249: 0x00004BC0, + 4250: 0x000265BF, + 4251: 0x000266B5, + 4252: 0x0002271B, + 4253: 0x00009465, + 4254: 0x000257E1, + 4255: 0x00006195, + 4256: 0x00005A27, + 4257: 0x0002F8CD, + 4258: 0x00004FBB, + 4259: 0x000056B9, + 4260: 0x00024521, + 4261: 0x000266FC, + 4262: 0x00004E6A, + 4263: 0x00024934, + 4264: 0x00009656, + 4265: 0x00006D8F, + 4266: 0x00026CBD, + 4267: 0x00003618, + 4268: 0x00008977, + 4269: 0x00026799, + 4270: 0x0002686E, + 4271: 0x00026411, + 4272: 0x0002685E, + 4273: 0x000071DF, + 4274: 0x000268C7, + 4275: 0x00007B42, + 4276: 0x000290C0, + 4277: 0x00020A11, + 4278: 0x00026926, + 4279: 0x00009104, + 4280: 0x00026939, + 4281: 0x00007A45, + 4282: 0x00009DF0, + 4283: 0x000269FA, + 4284: 0x00009A26, + 4285: 0x00026A2D, + 4286: 0x0000365F, + 4287: 0x00026469, + 4288: 0x00020021, + 4289: 0x00007983, + 4290: 0x00026A34, + 4291: 0x00026B5B, + 4292: 0x00005D2C, + 4293: 0x00023519, + 4294: 0x000083CF, + 4295: 0x00026B9D, + 4296: 0x000046D0, + 4297: 0x00026CA4, + 4298: 0x0000753B, + 4299: 0x00008865, + 4300: 0x00026DAE, + 4301: 0x000058B6, + 4302: 0x0000371C, + 4303: 0x0002258D, + 4304: 0x0002704B, + 4305: 0x000271CD, + 4306: 0x00003C54, + 4307: 0x00027280, + 4308: 0x00027285, + 4309: 0x00009281, + 4310: 0x0002217A, + 4311: 0x0002728B, + 4312: 0x00009330, + 4313: 0x000272E6, + 4314: 0x000249D0, + 4315: 0x00006C39, + 4316: 0x0000949F, + 4317: 0x00027450, + 4318: 0x00020EF8, + 4319: 0x00008827, + 4320: 0x000088F5, + 4321: 0x00022926, + 4322: 0x00028473, + 4323: 0x000217B1, + 4324: 0x00006EB8, + 4325: 0x00024A2A, + 4326: 0x00021820, + 4327: 0x000039A4, + 4328: 0x000036B9, + 4329: 0x00005C10, + 4330: 0x000079E3, + 4331: 0x0000453F, + 4332: 0x000066B6, + 4333: 0x00029CAD, + 4334: 0x000298A4, + 4335: 0x00008943, + 4336: 0x000277CC, + 4337: 0x00027858, + 4338: 0x000056D6, + 4339: 0x000040DF, + 4340: 0x0002160A, + 4341: 0x000039A1, + 4342: 0x0002372F, + 4343: 0x000280E8, + 4344: 0x000213C5, + 4345: 0x000071AD, + 4346: 0x00008366, + 4347: 0x000279DD, + 4348: 0x000291A8, + 4349: 0x00005A67, + 4350: 0x00004CB7, + 4351: 0x000270AF, + 4352: 0x000289AB, + 4353: 0x000279FD, + 4354: 0x00027A0A, + 4355: 0x00027B0B, + 4356: 0x00027D66, + 4357: 0x0002417A, + 4358: 0x00007B43, + 4359: 0x0000797E, + 4360: 0x00028009, + 4361: 0x00006FB5, + 4362: 0x0002A2DF, + 4363: 0x00006A03, + 4364: 0x00028318, + 4365: 0x000053A2, + 4366: 0x00026E07, + 4367: 0x000093BF, + 4368: 0x00006836, + 4369: 0x0000975D, + 4370: 0x0002816F, + 4371: 0x00028023, + 4372: 0x000269B5, + 4373: 0x000213ED, + 4374: 0x0002322F, + 4375: 0x00028048, + 4376: 0x00005D85, + 4377: 0x00028C30, + 4378: 0x00028083, + 4379: 0x00005715, + 4380: 0x00009823, + 4381: 0x00028949, + 4382: 0x00005DAB, + 4383: 0x00024988, + 4384: 0x000065BE, + 4385: 0x000069D5, + 4386: 0x000053D2, + 4387: 0x00024AA5, + 4388: 0x00023F81, + 4389: 0x00003C11, + 4390: 0x00006736, + 4391: 0x00028090, + 4392: 0x000280F4, + 4393: 0x0002812E, + 4394: 0x00021FA1, + 4395: 0x0002814F, + 4396: 0x00028189, + 4397: 0x000281AF, + 4398: 0x0002821A, + 4399: 0x00028306, + 4400: 0x0002832F, + 4401: 0x0002838A, + 4402: 0x000035CA, + 4403: 0x00028468, + 4404: 0x000286AA, + 4405: 0x000048FA, + 4406: 0x000063E6, + 4407: 0x00028956, + 4408: 0x00007808, + 4409: 0x00009255, + 4410: 0x000289B8, + 4411: 0x000043F2, + 4412: 0x000289E7, + 4413: 0x000043DF, + 4414: 0x000289E8, + 4415: 0x00028B46, + 4416: 0x00028BD4, + 4417: 0x000059F8, + 4418: 0x00028C09, + 4419: 0x00008F0B, + 4420: 0x00028FC5, + 4421: 0x000290EC, + 4422: 0x00007B51, + 4423: 0x00029110, + 4424: 0x0002913C, + 4425: 0x00003DF7, + 4426: 0x0002915E, + 4427: 0x00024ACA, + 4428: 0x00008FD0, + 4429: 0x0000728F, + 4430: 0x0000568B, + 4431: 0x000294E7, + 4432: 0x000295E9, + 4433: 0x000295B0, + 4434: 0x000295B8, + 4435: 0x00029732, + 4436: 0x000298D1, + 4437: 0x00029949, + 4438: 0x0002996A, + 4439: 0x000299C3, + 4440: 0x00029A28, + 4441: 0x00029B0E, + 4442: 0x00029D5A, + 4443: 0x00029D9B, + 4444: 0x00007E9F, + 4445: 0x00029EF8, + 4446: 0x00029F23, + 4447: 0x00004CA4, + 4448: 0x00009547, + 4449: 0x0002A293, + 4450: 0x000071A2, + 4451: 0x0002A2FF, + 4452: 0x00004D91, + 4453: 0x00009012, + 4454: 0x0002A5CB, + 4455: 0x00004D9C, + 4456: 0x00020C9C, + 4457: 0x00008FBE, + 4458: 0x000055C1, + 4459: 0x00008FBA, + 4460: 0x000224B0, + 4461: 0x00008FB9, + 4462: 0x00024A93, + 4463: 0x00004509, + 4464: 0x00007E7F, + 4465: 0x00006F56, + 4466: 0x00006AB1, + 4467: 0x00004EEA, + 4468: 0x000034E4, + 4469: 0x00028B2C, + 4470: 0x0002789D, + 4471: 0x0000373A, + 4472: 0x00008E80, + 4473: 0x000217F5, + 4474: 0x00028024, + 4475: 0x00028B6C, + 4476: 0x00028B99, + 4477: 0x00027A3E, + 4478: 0x000266AF, + 4479: 0x00003DEB, + 4480: 0x00027655, + 4481: 0x00023CB7, + 4482: 0x00025635, + 4483: 0x00025956, + 4484: 0x00004E9A, + 4485: 0x00025E81, + 4486: 0x00026258, + 4487: 0x000056BF, + 4488: 0x00020E6D, + 4489: 0x00008E0E, + 4490: 0x00005B6D, + 4491: 0x00023E88, + 4492: 0x00024C9E, + 4493: 0x000063DE, + 4494: 0x000062D0, + 4495: 0x000217F6, + 4496: 0x0002187B, + 4497: 0x00006530, + 4498: 0x0000562D, + 4499: 0x00025C4A, + 4500: 0x0000541A, + 4501: 0x00025311, + 4502: 0x00003DC6, + 4503: 0x00029D98, + 4504: 0x00004C7D, + 4505: 0x00005622, + 4506: 0x0000561E, + 4507: 0x00007F49, + 4508: 0x00025ED8, + 4509: 0x00005975, + 4510: 0x00023D40, + 4511: 0x00008770, + 4512: 0x00004E1C, + 4513: 0x00020FEA, + 4514: 0x00020D49, + 4515: 0x000236BA, + 4516: 0x00008117, + 4517: 0x00009D5E, + 4518: 0x00008D18, + 4519: 0x0000763B, + 4520: 0x00009C45, + 4521: 0x0000764E, + 4522: 0x000077B9, + 4523: 0x00009345, + 4524: 0x00005432, + 4525: 0x00008148, + 4526: 0x000082F7, + 4527: 0x00005625, + 4528: 0x00008132, + 4529: 0x00008418, + 4530: 0x000080BD, + 4531: 0x000055EA, + 4532: 0x00007962, + 4533: 0x00005643, + 4534: 0x00005416, + 4535: 0x00020E9D, + 4536: 0x000035CE, + 4537: 0x00005605, + 4538: 0x000055F1, + 4539: 0x000066F1, + 4540: 0x000282E2, + 4541: 0x0000362D, + 4542: 0x00007534, + 4543: 0x000055F0, + 4544: 0x000055BA, + 4545: 0x00005497, + 4546: 0x00005572, + 4547: 0x00020C41, + 4548: 0x00020C96, + 4549: 0x00005ED0, + 4550: 0x00025148, + 4551: 0x00020E76, + 4552: 0x00022C62, + 4553: 0x00020EA2, + 4554: 0x00009EAB, + 4555: 0x00007D5A, + 4556: 0x000055DE, + 4557: 0x00021075, + 4558: 0x0000629D, + 4559: 0x0000976D, + 4560: 0x00005494, + 4561: 0x00008CCD, + 4562: 0x000071F6, + 4563: 0x00009176, + 4564: 0x000063FC, + 4565: 0x000063B9, + 4566: 0x000063FE, + 4567: 0x00005569, + 4568: 0x00022B43, + 4569: 0x00009C72, + 4570: 0x00022EB3, + 4571: 0x0000519A, + 4572: 0x000034DF, + 4573: 0x00020DA7, + 4574: 0x000051A7, + 4575: 0x0000544D, + 4576: 0x0000551E, + 4577: 0x00005513, + 4578: 0x00007666, + 4579: 0x00008E2D, + 4580: 0x0002688A, + 4581: 0x000075B1, + 4582: 0x000080B6, + 4583: 0x00008804, + 4584: 0x00008786, + 4585: 0x000088C7, + 4586: 0x000081B6, + 4587: 0x0000841C, + 4588: 0x000210C1, + 4589: 0x000044EC, + 4590: 0x00007304, + 4591: 0x00024706, + 4592: 0x00005B90, + 4593: 0x0000830B, + 4594: 0x00026893, + 4595: 0x0000567B, + 4596: 0x000226F4, + 4597: 0x00027D2F, + 4598: 0x000241A3, + 4599: 0x00027D73, + 4600: 0x00026ED0, + 4601: 0x000272B6, + 4602: 0x00009170, + 4603: 0x000211D9, + 4604: 0x00009208, + 4605: 0x00023CFC, + 4606: 0x0002A6A9, + 4607: 0x00020EAC, + 4608: 0x00020EF9, + 4609: 0x00007266, + 4610: 0x00021CA2, + 4611: 0x0000474E, + 4612: 0x00024FC2, + 4613: 0x00027FF9, + 4614: 0x00020FEB, + 4615: 0x000040FA, + 4616: 0x00009C5D, + 4617: 0x0000651F, + 4618: 0x00022DA0, + 4619: 0x000048F3, + 4620: 0x000247E0, + 4621: 0x00029D7C, + 4622: 0x00020FEC, + 4623: 0x00020E0A, + 4624: 0x00006062, + 4625: 0x000275A3, + 4626: 0x00020FED, + 4628: 0x00026048, + 4629: 0x00021187, + 4630: 0x000071A3, + 4631: 0x00007E8E, + 4632: 0x00009D50, + 4633: 0x00004E1A, + 4634: 0x00004E04, + 4635: 0x00003577, + 4636: 0x00005B0D, + 4637: 0x00006CB2, + 4638: 0x00005367, + 4639: 0x000036AC, + 4640: 0x000039DC, + 4641: 0x0000537D, + 4642: 0x000036A5, + 4643: 0x00024618, + 4644: 0x0000589A, + 4645: 0x00024B6E, + 4646: 0x0000822D, + 4647: 0x0000544B, + 4648: 0x000057AA, + 4649: 0x00025A95, + 4650: 0x00020979, + 4652: 0x00003A52, + 4653: 0x00022465, + 4654: 0x00007374, + 4655: 0x00029EAC, + 4656: 0x00004D09, + 4657: 0x00009BED, + 4658: 0x00023CFE, + 4659: 0x00029F30, + 4660: 0x00004C5B, + 4661: 0x00024FA9, + 4662: 0x0002959E, + 4663: 0x00029FDE, + 4664: 0x0000845C, + 4665: 0x00023DB6, + 4666: 0x000272B2, + 4667: 0x000267B3, + 4668: 0x00023720, + 4669: 0x0000632E, + 4670: 0x00007D25, + 4671: 0x00023EF7, + 4672: 0x00023E2C, + 4673: 0x00003A2A, + 4674: 0x00009008, + 4675: 0x000052CC, + 4676: 0x00003E74, + 4677: 0x0000367A, + 4678: 0x000045E9, + 4679: 0x0002048E, + 4680: 0x00007640, + 4681: 0x00005AF0, + 4682: 0x00020EB6, + 4683: 0x0000787A, + 4684: 0x00027F2E, + 4685: 0x000058A7, + 4686: 0x000040BF, + 4687: 0x0000567C, + 4688: 0x00009B8B, + 4689: 0x00005D74, + 4690: 0x00007654, + 4691: 0x0002A434, + 4692: 0x00009E85, + 4693: 0x00004CE1, + 4694: 0x000075F9, + 4695: 0x000037FB, + 4696: 0x00006119, + 4697: 0x000230DA, + 4698: 0x000243F2, + 4700: 0x0000565D, + 4701: 0x000212A9, + 4702: 0x000057A7, + 4703: 0x00024963, + 4704: 0x00029E06, + 4705: 0x00005234, + 4706: 0x000270AE, + 4707: 0x000035AD, + 4708: 0x00006C4A, + 4709: 0x00009D7C, + 4710: 0x00007C56, + 4711: 0x00009B39, + 4712: 0x000057DE, + 4713: 0x0002176C, + 4714: 0x00005C53, + 4715: 0x000064D3, + 4716: 0x000294D0, + 4717: 0x00026335, + 4718: 0x00027164, + 4719: 0x000086AD, + 4720: 0x00020D28, + 4721: 0x00026D22, + 4722: 0x00024AE2, + 4723: 0x00020D71, + 4725: 0x000051FE, + 4726: 0x00021F0F, + 4727: 0x00005D8E, + 4728: 0x00009703, + 4729: 0x00021DD1, + 4730: 0x00009E81, + 4731: 0x0000904C, + 4732: 0x00007B1F, + 4733: 0x00009B02, + 4734: 0x00005CD1, + 4735: 0x00007BA3, + 4736: 0x00006268, + 4737: 0x00006335, + 4738: 0x00009AFF, + 4739: 0x00007BCF, + 4740: 0x00009B2A, + 4741: 0x00007C7E, + 4742: 0x00009B2E, + 4743: 0x00007C42, + 4744: 0x00007C86, + 4745: 0x00009C15, + 4746: 0x00007BFC, + 4747: 0x00009B09, + 4748: 0x00009F17, + 4749: 0x00009C1B, + 4750: 0x0002493E, + 4751: 0x00009F5A, + 4752: 0x00005573, + 4753: 0x00005BC3, + 4754: 0x00004FFD, + 4755: 0x00009E98, + 4756: 0x00004FF2, + 4757: 0x00005260, + 4758: 0x00003E06, + 4759: 0x000052D1, + 4760: 0x00005767, + 4761: 0x00005056, + 4762: 0x000059B7, + 4763: 0x00005E12, + 4764: 0x000097C8, + 4765: 0x00009DAB, + 4766: 0x00008F5C, + 4767: 0x00005469, + 4768: 0x000097B4, + 4769: 0x00009940, + 4770: 0x000097BA, + 4771: 0x0000532C, + 4772: 0x00006130, + 4773: 0x0000692C, + 4774: 0x000053DA, + 4775: 0x00009C0A, + 4776: 0x00009D02, + 4777: 0x00004C3B, + 4778: 0x00009641, + 4779: 0x00006980, + 4780: 0x000050A6, + 4781: 0x00007546, + 4782: 0x0002176D, + 4783: 0x000099DA, + 4784: 0x00005273, + 4786: 0x00009159, + 4787: 0x00009681, + 4788: 0x0000915C, + 4790: 0x00009151, + 4791: 0x00028E97, + 4792: 0x0000637F, + 4793: 0x00026D23, + 4794: 0x00006ACA, + 4795: 0x00005611, + 4796: 0x0000918E, + 4797: 0x0000757A, + 4798: 0x00006285, + 4799: 0x000203FC, + 4800: 0x0000734F, + 4801: 0x00007C70, + 4802: 0x00025C21, + 4803: 0x00023CFD, + 4805: 0x00024919, + 4806: 0x000076D6, + 4807: 0x00009B9D, + 4808: 0x00004E2A, + 4809: 0x00020CD4, + 4810: 0x000083BE, + 4811: 0x00008842, + 4813: 0x00005C4A, + 4814: 0x000069C0, + 4815: 0x000050ED, + 4816: 0x0000577A, + 4817: 0x0000521F, + 4818: 0x00005DF5, + 4819: 0x00004ECE, + 4820: 0x00006C31, + 4821: 0x000201F2, + 4822: 0x00004F39, + 4823: 0x0000549C, + 4824: 0x000054DA, + 4825: 0x0000529A, + 4826: 0x00008D82, + 4827: 0x000035FE, + 4828: 0x00005F0C, + 4829: 0x000035F3, + 4831: 0x00006B52, + 4832: 0x0000917C, + 4833: 0x00009FA5, + 4834: 0x00009B97, + 4835: 0x0000982E, + 4836: 0x000098B4, + 4837: 0x00009ABA, + 4838: 0x00009EA8, + 4839: 0x00009E84, + 4840: 0x0000717A, + 4841: 0x00007B14, + 4843: 0x00006BFA, + 4844: 0x00008818, + 4845: 0x00007F78, + 4847: 0x00005620, + 4848: 0x0002A64A, + 4849: 0x00008E77, + 4850: 0x00009F53, + 4852: 0x00008DD4, + 4853: 0x00008E4F, + 4854: 0x00009E1C, + 4855: 0x00008E01, + 4856: 0x00006282, + 4857: 0x0002837D, + 4858: 0x00008E28, + 4859: 0x00008E75, + 4860: 0x00007AD3, + 4861: 0x00024A77, + 4862: 0x00007A3E, + 4863: 0x000078D8, + 4864: 0x00006CEA, + 4865: 0x00008A67, + 4866: 0x00007607, + 4867: 0x00028A5A, + 4868: 0x00009F26, + 4869: 0x00006CCE, + 4870: 0x000087D6, + 4871: 0x000075C3, + 4872: 0x0002A2B2, + 4873: 0x00007853, + 4874: 0x0002F840, + 4875: 0x00008D0C, + 4876: 0x000072E2, + 4877: 0x00007371, + 4878: 0x00008B2D, + 4879: 0x00007302, + 4880: 0x000074F1, + 4881: 0x00008CEB, + 4882: 0x00024ABB, + 4883: 0x0000862F, + 4884: 0x00005FBA, + 4885: 0x000088A0, + 4886: 0x000044B7, + 4888: 0x0002183B, + 4889: 0x00026E05, + 4891: 0x00008A7E, + 4892: 0x0002251B, + 4894: 0x000060FD, + 4895: 0x00007667, + 4896: 0x00009AD7, + 4897: 0x00009D44, + 4898: 0x0000936E, + 4899: 0x00009B8F, + 4900: 0x000087F5, + 4902: 0x0000880F, + 4903: 0x00008CF7, + 4904: 0x0000732C, + 4905: 0x00009721, + 4906: 0x00009BB0, + 4907: 0x000035D6, + 4908: 0x000072B2, + 4909: 0x00004C07, + 4910: 0x00007C51, + 4911: 0x0000994A, + 4912: 0x00026159, + 4913: 0x00006159, + 4914: 0x00004C04, + 4915: 0x00009E96, + 4916: 0x0000617D, + 4918: 0x0000575F, + 4919: 0x0000616F, + 4920: 0x000062A6, + 4921: 0x00006239, + 4922: 0x000062CE, + 4923: 0x00003A5C, + 4924: 0x000061E2, + 4925: 0x000053AA, + 4926: 0x000233F5, + 4927: 0x00006364, + 4928: 0x00006802, + 4929: 0x000035D2, + 4930: 0x00005D57, + 4931: 0x00028BC2, + 4932: 0x00008FDA, + 4933: 0x00028E39, + 4935: 0x000050D9, + 4936: 0x00021D46, + 4937: 0x00007906, + 4938: 0x00005332, + 4939: 0x00009638, + 4940: 0x00020F3B, + 4941: 0x00004065, + 4943: 0x000077FE, + 4945: 0x00007CC2, + 4946: 0x00025F1A, + 4947: 0x00007CDA, + 4948: 0x00007A2D, + 4949: 0x00008066, + 4950: 0x00008063, + 4951: 0x00007D4D, + 4952: 0x00007505, + 4953: 0x000074F2, + 4954: 0x00008994, + 4955: 0x0000821A, + 4956: 0x0000670C, + 4957: 0x00008062, + 4958: 0x00027486, + 4959: 0x0000805B, + 4960: 0x000074F0, + 4961: 0x00008103, + 4962: 0x00007724, + 4963: 0x00008989, + 4964: 0x000267CC, + 4965: 0x00007553, + 4966: 0x00026ED1, + 4967: 0x000087A9, + 4968: 0x000087CE, + 4969: 0x000081C8, + 4970: 0x0000878C, + 4971: 0x00008A49, + 4972: 0x00008CAD, + 4973: 0x00008B43, + 4974: 0x0000772B, + 4975: 0x000074F8, + 4976: 0x000084DA, + 4977: 0x00003635, + 4978: 0x000069B2, + 4979: 0x00008DA6, + 4981: 0x000089A9, + 4982: 0x00007468, + 4983: 0x00006DB9, + 4984: 0x000087C1, + 4985: 0x00024011, + 4986: 0x000074E7, + 4987: 0x00003DDB, + 4988: 0x00007176, + 4989: 0x000060A4, + 4990: 0x0000619C, + 4991: 0x00003CD1, + 4992: 0x00007162, + 4993: 0x00006077, + 4995: 0x00007F71, + 4996: 0x00028B2D, + 4997: 0x00007250, + 4998: 0x000060E9, + 4999: 0x00004B7E, + 5000: 0x00005220, + 5001: 0x00003C18, + 5002: 0x00023CC7, + 5003: 0x00025ED7, + 5004: 0x00027656, + 5005: 0x00025531, + 5006: 0x00021944, + 5007: 0x000212FE, + 5008: 0x00029903, + 5009: 0x00026DDC, + 5010: 0x000270AD, + 5011: 0x00005CC1, + 5012: 0x000261AD, + 5013: 0x00028A0F, + 5014: 0x00023677, + 5015: 0x000200EE, + 5016: 0x00026846, + 5017: 0x00024F0E, + 5018: 0x00004562, + 5019: 0x00005B1F, + 5020: 0x0002634C, + 5021: 0x00009F50, + 5022: 0x00009EA6, + 5023: 0x0002626B, + 5024: 0x00003000, + 5025: 0x0000FF0C, + 5026: 0x00003001, + 5027: 0x00003002, + 5028: 0x0000FF0E, + 5029: 0x00002027, + 5030: 0x0000FF1B, + 5031: 0x0000FF1A, + 5032: 0x0000FF1F, + 5033: 0x0000FF01, + 5034: 0x0000FE30, + 5035: 0x00002026, + 5036: 0x00002025, + 5037: 0x0000FE50, + 5038: 0x0000FE51, + 5039: 0x0000FE52, + 5040: 0x000000B7, + 5041: 0x0000FE54, + 5042: 0x0000FE55, + 5043: 0x0000FE56, + 5044: 0x0000FE57, + 5045: 0x0000FF5C, + 5046: 0x00002013, + 5047: 0x0000FE31, + 5048: 0x00002014, + 5049: 0x0000FE33, + 5050: 0x00002574, + 5051: 0x0000FE34, + 5052: 0x0000FE4F, + 5053: 0x0000FF08, + 5054: 0x0000FF09, + 5055: 0x0000FE35, + 5056: 0x0000FE36, + 5057: 0x0000FF5B, + 5058: 0x0000FF5D, + 5059: 0x0000FE37, + 5060: 0x0000FE38, + 5061: 0x00003014, + 5062: 0x00003015, + 5063: 0x0000FE39, + 5064: 0x0000FE3A, + 5065: 0x00003010, + 5066: 0x00003011, + 5067: 0x0000FE3B, + 5068: 0x0000FE3C, + 5069: 0x0000300A, + 5070: 0x0000300B, + 5071: 0x0000FE3D, + 5072: 0x0000FE3E, + 5073: 0x00003008, + 5074: 0x00003009, + 5075: 0x0000FE3F, + 5076: 0x0000FE40, + 5077: 0x0000300C, + 5078: 0x0000300D, + 5079: 0x0000FE41, + 5080: 0x0000FE42, + 5081: 0x0000300E, + 5082: 0x0000300F, + 5083: 0x0000FE43, + 5084: 0x0000FE44, + 5085: 0x0000FE59, + 5086: 0x0000FE5A, + 5087: 0x0000FE5B, + 5088: 0x0000FE5C, + 5089: 0x0000FE5D, + 5090: 0x0000FE5E, + 5091: 0x00002018, + 5092: 0x00002019, + 5093: 0x0000201C, + 5094: 0x0000201D, + 5095: 0x0000301D, + 5096: 0x0000301E, + 5097: 0x00002035, + 5098: 0x00002032, + 5099: 0x0000FF03, + 5100: 0x0000FF06, + 5101: 0x0000FF0A, + 5102: 0x0000203B, + 5103: 0x000000A7, + 5104: 0x00003003, + 5105: 0x000025CB, + 5106: 0x000025CF, + 5107: 0x000025B3, + 5108: 0x000025B2, + 5109: 0x000025CE, + 5110: 0x00002606, + 5111: 0x00002605, + 5112: 0x000025C7, + 5113: 0x000025C6, + 5114: 0x000025A1, + 5115: 0x000025A0, + 5116: 0x000025BD, + 5117: 0x000025BC, + 5118: 0x000032A3, + 5119: 0x00002105, + 5120: 0x000000AF, + 5121: 0x0000FFE3, + 5122: 0x0000FF3F, + 5123: 0x000002CD, + 5124: 0x0000FE49, + 5125: 0x0000FE4A, + 5126: 0x0000FE4D, + 5127: 0x0000FE4E, + 5128: 0x0000FE4B, + 5129: 0x0000FE4C, + 5130: 0x0000FE5F, + 5131: 0x0000FE60, + 5132: 0x0000FE61, + 5133: 0x0000FF0B, + 5134: 0x0000FF0D, + 5135: 0x000000D7, + 5136: 0x000000F7, + 5137: 0x000000B1, + 5138: 0x0000221A, + 5139: 0x0000FF1C, + 5140: 0x0000FF1E, + 5141: 0x0000FF1D, + 5142: 0x00002266, + 5143: 0x00002267, + 5144: 0x00002260, + 5145: 0x0000221E, + 5146: 0x00002252, + 5147: 0x00002261, + 5148: 0x0000FE62, + 5149: 0x0000FE63, + 5150: 0x0000FE64, + 5151: 0x0000FE65, + 5152: 0x0000FE66, + 5153: 0x0000FF5E, + 5154: 0x00002229, + 5155: 0x0000222A, + 5156: 0x000022A5, + 5157: 0x00002220, + 5158: 0x0000221F, + 5159: 0x000022BF, + 5160: 0x000033D2, + 5161: 0x000033D1, + 5162: 0x0000222B, + 5163: 0x0000222E, + 5164: 0x00002235, + 5165: 0x00002234, + 5166: 0x00002640, + 5167: 0x00002642, + 5168: 0x00002295, + 5169: 0x00002299, + 5170: 0x00002191, + 5171: 0x00002193, + 5172: 0x00002190, + 5173: 0x00002192, + 5174: 0x00002196, + 5175: 0x00002197, + 5176: 0x00002199, + 5177: 0x00002198, + 5178: 0x00002225, + 5179: 0x00002223, + 5180: 0x0000FF0F, + 5181: 0x0000FF3C, + 5182: 0x00002215, + 5183: 0x0000FE68, + 5184: 0x0000FF04, + 5185: 0x0000FFE5, + 5186: 0x00003012, + 5187: 0x0000FFE0, + 5188: 0x0000FFE1, + 5189: 0x0000FF05, + 5190: 0x0000FF20, + 5191: 0x00002103, + 5192: 0x00002109, + 5193: 0x0000FE69, + 5194: 0x0000FE6A, + 5195: 0x0000FE6B, + 5196: 0x000033D5, + 5197: 0x0000339C, + 5198: 0x0000339D, + 5199: 0x0000339E, + 5200: 0x000033CE, + 5201: 0x000033A1, + 5202: 0x0000338E, + 5203: 0x0000338F, + 5204: 0x000033C4, + 5205: 0x000000B0, + 5206: 0x00005159, + 5207: 0x0000515B, + 5208: 0x0000515E, + 5209: 0x0000515D, + 5210: 0x00005161, + 5211: 0x00005163, + 5212: 0x000055E7, + 5213: 0x000074E9, + 5214: 0x00007CCE, + 5215: 0x00002581, + 5216: 0x00002582, + 5217: 0x00002583, + 5218: 0x00002584, + 5219: 0x00002585, + 5220: 0x00002586, + 5221: 0x00002587, + 5222: 0x00002588, + 5223: 0x0000258F, + 5224: 0x0000258E, + 5225: 0x0000258D, + 5226: 0x0000258C, + 5227: 0x0000258B, + 5228: 0x0000258A, + 5229: 0x00002589, + 5230: 0x0000253C, + 5231: 0x00002534, + 5232: 0x0000252C, + 5233: 0x00002524, + 5234: 0x0000251C, + 5235: 0x00002594, + 5236: 0x00002500, + 5237: 0x00002502, + 5238: 0x00002595, + 5239: 0x0000250C, + 5240: 0x00002510, + 5241: 0x00002514, + 5242: 0x00002518, + 5243: 0x0000256D, + 5244: 0x0000256E, + 5245: 0x00002570, + 5246: 0x0000256F, + 5247: 0x00002550, + 5248: 0x0000255E, + 5249: 0x0000256A, + 5250: 0x00002561, + 5251: 0x000025E2, + 5252: 0x000025E3, + 5253: 0x000025E5, + 5254: 0x000025E4, + 5255: 0x00002571, + 5256: 0x00002572, + 5257: 0x00002573, + 5258: 0x0000FF10, + 5259: 0x0000FF11, + 5260: 0x0000FF12, + 5261: 0x0000FF13, + 5262: 0x0000FF14, + 5263: 0x0000FF15, + 5264: 0x0000FF16, + 5265: 0x0000FF17, + 5266: 0x0000FF18, + 5267: 0x0000FF19, + 5268: 0x00002160, + 5269: 0x00002161, + 5270: 0x00002162, + 5271: 0x00002163, + 5272: 0x00002164, + 5273: 0x00002165, + 5274: 0x00002166, + 5275: 0x00002167, + 5276: 0x00002168, + 5277: 0x00002169, + 5278: 0x00003021, + 5279: 0x00003022, + 5280: 0x00003023, + 5281: 0x00003024, + 5282: 0x00003025, + 5283: 0x00003026, + 5284: 0x00003027, + 5285: 0x00003028, + 5286: 0x00003029, + 5287: 0x00005341, + 5288: 0x00005344, + 5289: 0x00005345, + 5290: 0x0000FF21, + 5291: 0x0000FF22, + 5292: 0x0000FF23, + 5293: 0x0000FF24, + 5294: 0x0000FF25, + 5295: 0x0000FF26, + 5296: 0x0000FF27, + 5297: 0x0000FF28, + 5298: 0x0000FF29, + 5299: 0x0000FF2A, + 5300: 0x0000FF2B, + 5301: 0x0000FF2C, + 5302: 0x0000FF2D, + 5303: 0x0000FF2E, + 5304: 0x0000FF2F, + 5305: 0x0000FF30, + 5306: 0x0000FF31, + 5307: 0x0000FF32, + 5308: 0x0000FF33, + 5309: 0x0000FF34, + 5310: 0x0000FF35, + 5311: 0x0000FF36, + 5312: 0x0000FF37, + 5313: 0x0000FF38, + 5314: 0x0000FF39, + 5315: 0x0000FF3A, + 5316: 0x0000FF41, + 5317: 0x0000FF42, + 5318: 0x0000FF43, + 5319: 0x0000FF44, + 5320: 0x0000FF45, + 5321: 0x0000FF46, + 5322: 0x0000FF47, + 5323: 0x0000FF48, + 5324: 0x0000FF49, + 5325: 0x0000FF4A, + 5326: 0x0000FF4B, + 5327: 0x0000FF4C, + 5328: 0x0000FF4D, + 5329: 0x0000FF4E, + 5330: 0x0000FF4F, + 5331: 0x0000FF50, + 5332: 0x0000FF51, + 5333: 0x0000FF52, + 5334: 0x0000FF53, + 5335: 0x0000FF54, + 5336: 0x0000FF55, + 5337: 0x0000FF56, + 5338: 0x0000FF57, + 5339: 0x0000FF58, + 5340: 0x0000FF59, + 5341: 0x0000FF5A, + 5342: 0x00000391, + 5343: 0x00000392, + 5344: 0x00000393, + 5345: 0x00000394, + 5346: 0x00000395, + 5347: 0x00000396, + 5348: 0x00000397, + 5349: 0x00000398, + 5350: 0x00000399, + 5351: 0x0000039A, + 5352: 0x0000039B, + 5353: 0x0000039C, + 5354: 0x0000039D, + 5355: 0x0000039E, + 5356: 0x0000039F, + 5357: 0x000003A0, + 5358: 0x000003A1, + 5359: 0x000003A3, + 5360: 0x000003A4, + 5361: 0x000003A5, + 5362: 0x000003A6, + 5363: 0x000003A7, + 5364: 0x000003A8, + 5365: 0x000003A9, + 5366: 0x000003B1, + 5367: 0x000003B2, + 5368: 0x000003B3, + 5369: 0x000003B4, + 5370: 0x000003B5, + 5371: 0x000003B6, + 5372: 0x000003B7, + 5373: 0x000003B8, + 5374: 0x000003B9, + 5375: 0x000003BA, + 5376: 0x000003BB, + 5377: 0x000003BC, + 5378: 0x000003BD, + 5379: 0x000003BE, + 5380: 0x000003BF, + 5381: 0x000003C0, + 5382: 0x000003C1, + 5383: 0x000003C3, + 5384: 0x000003C4, + 5385: 0x000003C5, + 5386: 0x000003C6, + 5387: 0x000003C7, + 5388: 0x000003C8, + 5389: 0x000003C9, + 5390: 0x00003105, + 5391: 0x00003106, + 5392: 0x00003107, + 5393: 0x00003108, + 5394: 0x00003109, + 5395: 0x0000310A, + 5396: 0x0000310B, + 5397: 0x0000310C, + 5398: 0x0000310D, + 5399: 0x0000310E, + 5400: 0x0000310F, + 5401: 0x00003110, + 5402: 0x00003111, + 5403: 0x00003112, + 5404: 0x00003113, + 5405: 0x00003114, + 5406: 0x00003115, + 5407: 0x00003116, + 5408: 0x00003117, + 5409: 0x00003118, + 5410: 0x00003119, + 5411: 0x0000311A, + 5412: 0x0000311B, + 5413: 0x0000311C, + 5414: 0x0000311D, + 5415: 0x0000311E, + 5416: 0x0000311F, + 5417: 0x00003120, + 5418: 0x00003121, + 5419: 0x00003122, + 5420: 0x00003123, + 5421: 0x00003124, + 5422: 0x00003125, + 5423: 0x00003126, + 5424: 0x00003127, + 5425: 0x00003128, + 5426: 0x00003129, + 5427: 0x000002D9, + 5428: 0x000002C9, + 5429: 0x000002CA, + 5430: 0x000002C7, + 5431: 0x000002CB, + 5432: 0x00002400, + 5433: 0x00002401, + 5434: 0x00002402, + 5435: 0x00002403, + 5436: 0x00002404, + 5437: 0x00002405, + 5438: 0x00002406, + 5439: 0x00002407, + 5440: 0x00002408, + 5441: 0x00002409, + 5442: 0x0000240A, + 5443: 0x0000240B, + 5444: 0x0000240C, + 5445: 0x0000240D, + 5446: 0x0000240E, + 5447: 0x0000240F, + 5448: 0x00002410, + 5449: 0x00002411, + 5450: 0x00002412, + 5451: 0x00002413, + 5452: 0x00002414, + 5453: 0x00002415, + 5454: 0x00002416, + 5455: 0x00002417, + 5456: 0x00002418, + 5457: 0x00002419, + 5458: 0x0000241A, + 5459: 0x0000241B, + 5460: 0x0000241C, + 5461: 0x0000241D, + 5462: 0x0000241E, + 5463: 0x0000241F, + 5464: 0x00002421, + 5465: 0x000020AC, + 5495: 0x00004E00, + 5496: 0x00004E59, + 5497: 0x00004E01, + 5498: 0x00004E03, + 5499: 0x00004E43, + 5500: 0x00004E5D, + 5501: 0x00004E86, + 5502: 0x00004E8C, + 5503: 0x00004EBA, + 5504: 0x0000513F, + 5505: 0x00005165, + 5506: 0x0000516B, + 5507: 0x000051E0, + 5508: 0x00005200, + 5509: 0x00005201, + 5510: 0x0000529B, + 5511: 0x00005315, + 5512: 0x00005341, + 5513: 0x0000535C, + 5514: 0x000053C8, + 5515: 0x00004E09, + 5516: 0x00004E0B, + 5517: 0x00004E08, + 5518: 0x00004E0A, + 5519: 0x00004E2B, + 5520: 0x00004E38, + 5521: 0x000051E1, + 5522: 0x00004E45, + 5523: 0x00004E48, + 5524: 0x00004E5F, + 5525: 0x00004E5E, + 5526: 0x00004E8E, + 5527: 0x00004EA1, + 5528: 0x00005140, + 5529: 0x00005203, + 5530: 0x000052FA, + 5531: 0x00005343, + 5532: 0x000053C9, + 5533: 0x000053E3, + 5534: 0x0000571F, + 5535: 0x000058EB, + 5536: 0x00005915, + 5537: 0x00005927, + 5538: 0x00005973, + 5539: 0x00005B50, + 5540: 0x00005B51, + 5541: 0x00005B53, + 5542: 0x00005BF8, + 5543: 0x00005C0F, + 5544: 0x00005C22, + 5545: 0x00005C38, + 5546: 0x00005C71, + 5547: 0x00005DDD, + 5548: 0x00005DE5, + 5549: 0x00005DF1, + 5550: 0x00005DF2, + 5551: 0x00005DF3, + 5552: 0x00005DFE, + 5553: 0x00005E72, + 5554: 0x00005EFE, + 5555: 0x00005F0B, + 5556: 0x00005F13, + 5557: 0x0000624D, + 5558: 0x00004E11, + 5559: 0x00004E10, + 5560: 0x00004E0D, + 5561: 0x00004E2D, + 5562: 0x00004E30, + 5563: 0x00004E39, + 5564: 0x00004E4B, + 5565: 0x00005C39, + 5566: 0x00004E88, + 5567: 0x00004E91, + 5568: 0x00004E95, + 5569: 0x00004E92, + 5570: 0x00004E94, + 5571: 0x00004EA2, + 5572: 0x00004EC1, + 5573: 0x00004EC0, + 5574: 0x00004EC3, + 5575: 0x00004EC6, + 5576: 0x00004EC7, + 5577: 0x00004ECD, + 5578: 0x00004ECA, + 5579: 0x00004ECB, + 5580: 0x00004EC4, + 5581: 0x00005143, + 5582: 0x00005141, + 5583: 0x00005167, + 5584: 0x0000516D, + 5585: 0x0000516E, + 5586: 0x0000516C, + 5587: 0x00005197, + 5588: 0x000051F6, + 5589: 0x00005206, + 5590: 0x00005207, + 5591: 0x00005208, + 5592: 0x000052FB, + 5593: 0x000052FE, + 5594: 0x000052FF, + 5595: 0x00005316, + 5596: 0x00005339, + 5597: 0x00005348, + 5598: 0x00005347, + 5599: 0x00005345, + 5600: 0x0000535E, + 5601: 0x00005384, + 5602: 0x000053CB, + 5603: 0x000053CA, + 5604: 0x000053CD, + 5605: 0x000058EC, + 5606: 0x00005929, + 5607: 0x0000592B, + 5608: 0x0000592A, + 5609: 0x0000592D, + 5610: 0x00005B54, + 5611: 0x00005C11, + 5612: 0x00005C24, + 5613: 0x00005C3A, + 5614: 0x00005C6F, + 5615: 0x00005DF4, + 5616: 0x00005E7B, + 5617: 0x00005EFF, + 5618: 0x00005F14, + 5619: 0x00005F15, + 5620: 0x00005FC3, + 5621: 0x00006208, + 5622: 0x00006236, + 5623: 0x0000624B, + 5624: 0x0000624E, + 5625: 0x0000652F, + 5626: 0x00006587, + 5627: 0x00006597, + 5628: 0x000065A4, + 5629: 0x000065B9, + 5630: 0x000065E5, + 5631: 0x000066F0, + 5632: 0x00006708, + 5633: 0x00006728, + 5634: 0x00006B20, + 5635: 0x00006B62, + 5636: 0x00006B79, + 5637: 0x00006BCB, + 5638: 0x00006BD4, + 5639: 0x00006BDB, + 5640: 0x00006C0F, + 5641: 0x00006C34, + 5642: 0x0000706B, + 5643: 0x0000722A, + 5644: 0x00007236, + 5645: 0x0000723B, + 5646: 0x00007247, + 5647: 0x00007259, + 5648: 0x0000725B, + 5649: 0x000072AC, + 5650: 0x0000738B, + 5651: 0x00004E19, + 5652: 0x00004E16, + 5653: 0x00004E15, + 5654: 0x00004E14, + 5655: 0x00004E18, + 5656: 0x00004E3B, + 5657: 0x00004E4D, + 5658: 0x00004E4F, + 5659: 0x00004E4E, + 5660: 0x00004EE5, + 5661: 0x00004ED8, + 5662: 0x00004ED4, + 5663: 0x00004ED5, + 5664: 0x00004ED6, + 5665: 0x00004ED7, + 5666: 0x00004EE3, + 5667: 0x00004EE4, + 5668: 0x00004ED9, + 5669: 0x00004EDE, + 5670: 0x00005145, + 5671: 0x00005144, + 5672: 0x00005189, + 5673: 0x0000518A, + 5674: 0x000051AC, + 5675: 0x000051F9, + 5676: 0x000051FA, + 5677: 0x000051F8, + 5678: 0x0000520A, + 5679: 0x000052A0, + 5680: 0x0000529F, + 5681: 0x00005305, + 5682: 0x00005306, + 5683: 0x00005317, + 5684: 0x0000531D, + 5685: 0x00004EDF, + 5686: 0x0000534A, + 5687: 0x00005349, + 5688: 0x00005361, + 5689: 0x00005360, + 5690: 0x0000536F, + 5691: 0x0000536E, + 5692: 0x000053BB, + 5693: 0x000053EF, + 5694: 0x000053E4, + 5695: 0x000053F3, + 5696: 0x000053EC, + 5697: 0x000053EE, + 5698: 0x000053E9, + 5699: 0x000053E8, + 5700: 0x000053FC, + 5701: 0x000053F8, + 5702: 0x000053F5, + 5703: 0x000053EB, + 5704: 0x000053E6, + 5705: 0x000053EA, + 5706: 0x000053F2, + 5707: 0x000053F1, + 5708: 0x000053F0, + 5709: 0x000053E5, + 5710: 0x000053ED, + 5711: 0x000053FB, + 5712: 0x000056DB, + 5713: 0x000056DA, + 5714: 0x00005916, + 5715: 0x0000592E, + 5716: 0x00005931, + 5717: 0x00005974, + 5718: 0x00005976, + 5719: 0x00005B55, + 5720: 0x00005B83, + 5721: 0x00005C3C, + 5722: 0x00005DE8, + 5723: 0x00005DE7, + 5724: 0x00005DE6, + 5725: 0x00005E02, + 5726: 0x00005E03, + 5727: 0x00005E73, + 5728: 0x00005E7C, + 5729: 0x00005F01, + 5730: 0x00005F18, + 5731: 0x00005F17, + 5732: 0x00005FC5, + 5733: 0x0000620A, + 5734: 0x00006253, + 5735: 0x00006254, + 5736: 0x00006252, + 5737: 0x00006251, + 5738: 0x000065A5, + 5739: 0x000065E6, + 5740: 0x0000672E, + 5741: 0x0000672C, + 5742: 0x0000672A, + 5743: 0x0000672B, + 5744: 0x0000672D, + 5745: 0x00006B63, + 5746: 0x00006BCD, + 5747: 0x00006C11, + 5748: 0x00006C10, + 5749: 0x00006C38, + 5750: 0x00006C41, + 5751: 0x00006C40, + 5752: 0x00006C3E, + 5753: 0x000072AF, + 5754: 0x00007384, + 5755: 0x00007389, + 5756: 0x000074DC, + 5757: 0x000074E6, + 5758: 0x00007518, + 5759: 0x0000751F, + 5760: 0x00007528, + 5761: 0x00007529, + 5762: 0x00007530, + 5763: 0x00007531, + 5764: 0x00007532, + 5765: 0x00007533, + 5766: 0x0000758B, + 5767: 0x0000767D, + 5768: 0x000076AE, + 5769: 0x000076BF, + 5770: 0x000076EE, + 5771: 0x000077DB, + 5772: 0x000077E2, + 5773: 0x000077F3, + 5774: 0x0000793A, + 5775: 0x000079BE, + 5776: 0x00007A74, + 5777: 0x00007ACB, + 5778: 0x00004E1E, + 5779: 0x00004E1F, + 5780: 0x00004E52, + 5781: 0x00004E53, + 5782: 0x00004E69, + 5783: 0x00004E99, + 5784: 0x00004EA4, + 5785: 0x00004EA6, + 5786: 0x00004EA5, + 5787: 0x00004EFF, + 5788: 0x00004F09, + 5789: 0x00004F19, + 5790: 0x00004F0A, + 5791: 0x00004F15, + 5792: 0x00004F0D, + 5793: 0x00004F10, + 5794: 0x00004F11, + 5795: 0x00004F0F, + 5796: 0x00004EF2, + 5797: 0x00004EF6, + 5798: 0x00004EFB, + 5799: 0x00004EF0, + 5800: 0x00004EF3, + 5801: 0x00004EFD, + 5802: 0x00004F01, + 5803: 0x00004F0B, + 5804: 0x00005149, + 5805: 0x00005147, + 5806: 0x00005146, + 5807: 0x00005148, + 5808: 0x00005168, + 5809: 0x00005171, + 5810: 0x0000518D, + 5811: 0x000051B0, + 5812: 0x00005217, + 5813: 0x00005211, + 5814: 0x00005212, + 5815: 0x0000520E, + 5816: 0x00005216, + 5817: 0x000052A3, + 5818: 0x00005308, + 5819: 0x00005321, + 5820: 0x00005320, + 5821: 0x00005370, + 5822: 0x00005371, + 5823: 0x00005409, + 5824: 0x0000540F, + 5825: 0x0000540C, + 5826: 0x0000540A, + 5827: 0x00005410, + 5828: 0x00005401, + 5829: 0x0000540B, + 5830: 0x00005404, + 5831: 0x00005411, + 5832: 0x0000540D, + 5833: 0x00005408, + 5834: 0x00005403, + 5835: 0x0000540E, + 5836: 0x00005406, + 5837: 0x00005412, + 5838: 0x000056E0, + 5839: 0x000056DE, + 5840: 0x000056DD, + 5841: 0x00005733, + 5842: 0x00005730, + 5843: 0x00005728, + 5844: 0x0000572D, + 5845: 0x0000572C, + 5846: 0x0000572F, + 5847: 0x00005729, + 5848: 0x00005919, + 5849: 0x0000591A, + 5850: 0x00005937, + 5851: 0x00005938, + 5852: 0x00005984, + 5853: 0x00005978, + 5854: 0x00005983, + 5855: 0x0000597D, + 5856: 0x00005979, + 5857: 0x00005982, + 5858: 0x00005981, + 5859: 0x00005B57, + 5860: 0x00005B58, + 5861: 0x00005B87, + 5862: 0x00005B88, + 5863: 0x00005B85, + 5864: 0x00005B89, + 5865: 0x00005BFA, + 5866: 0x00005C16, + 5867: 0x00005C79, + 5868: 0x00005DDE, + 5869: 0x00005E06, + 5870: 0x00005E76, + 5871: 0x00005E74, + 5872: 0x00005F0F, + 5873: 0x00005F1B, + 5874: 0x00005FD9, + 5875: 0x00005FD6, + 5876: 0x0000620E, + 5877: 0x0000620C, + 5878: 0x0000620D, + 5879: 0x00006210, + 5880: 0x00006263, + 5881: 0x0000625B, + 5882: 0x00006258, + 5883: 0x00006536, + 5884: 0x000065E9, + 5885: 0x000065E8, + 5886: 0x000065EC, + 5887: 0x000065ED, + 5888: 0x000066F2, + 5889: 0x000066F3, + 5890: 0x00006709, + 5891: 0x0000673D, + 5892: 0x00006734, + 5893: 0x00006731, + 5894: 0x00006735, + 5895: 0x00006B21, + 5896: 0x00006B64, + 5897: 0x00006B7B, + 5898: 0x00006C16, + 5899: 0x00006C5D, + 5900: 0x00006C57, + 5901: 0x00006C59, + 5902: 0x00006C5F, + 5903: 0x00006C60, + 5904: 0x00006C50, + 5905: 0x00006C55, + 5906: 0x00006C61, + 5907: 0x00006C5B, + 5908: 0x00006C4D, + 5909: 0x00006C4E, + 5910: 0x00007070, + 5911: 0x0000725F, + 5912: 0x0000725D, + 5913: 0x0000767E, + 5914: 0x00007AF9, + 5915: 0x00007C73, + 5916: 0x00007CF8, + 5917: 0x00007F36, + 5918: 0x00007F8A, + 5919: 0x00007FBD, + 5920: 0x00008001, + 5921: 0x00008003, + 5922: 0x0000800C, + 5923: 0x00008012, + 5924: 0x00008033, + 5925: 0x0000807F, + 5926: 0x00008089, + 5927: 0x0000808B, + 5928: 0x0000808C, + 5929: 0x000081E3, + 5930: 0x000081EA, + 5931: 0x000081F3, + 5932: 0x000081FC, + 5933: 0x0000820C, + 5934: 0x0000821B, + 5935: 0x0000821F, + 5936: 0x0000826E, + 5937: 0x00008272, + 5938: 0x0000827E, + 5939: 0x0000866B, + 5940: 0x00008840, + 5941: 0x0000884C, + 5942: 0x00008863, + 5943: 0x0000897F, + 5944: 0x00009621, + 5945: 0x00004E32, + 5946: 0x00004EA8, + 5947: 0x00004F4D, + 5948: 0x00004F4F, + 5949: 0x00004F47, + 5950: 0x00004F57, + 5951: 0x00004F5E, + 5952: 0x00004F34, + 5953: 0x00004F5B, + 5954: 0x00004F55, + 5955: 0x00004F30, + 5956: 0x00004F50, + 5957: 0x00004F51, + 5958: 0x00004F3D, + 5959: 0x00004F3A, + 5960: 0x00004F38, + 5961: 0x00004F43, + 5962: 0x00004F54, + 5963: 0x00004F3C, + 5964: 0x00004F46, + 5965: 0x00004F63, + 5966: 0x00004F5C, + 5967: 0x00004F60, + 5968: 0x00004F2F, + 5969: 0x00004F4E, + 5970: 0x00004F36, + 5971: 0x00004F59, + 5972: 0x00004F5D, + 5973: 0x00004F48, + 5974: 0x00004F5A, + 5975: 0x0000514C, + 5976: 0x0000514B, + 5977: 0x0000514D, + 5978: 0x00005175, + 5979: 0x000051B6, + 5980: 0x000051B7, + 5981: 0x00005225, + 5982: 0x00005224, + 5983: 0x00005229, + 5984: 0x0000522A, + 5985: 0x00005228, + 5986: 0x000052AB, + 5987: 0x000052A9, + 5988: 0x000052AA, + 5989: 0x000052AC, + 5990: 0x00005323, + 5991: 0x00005373, + 5992: 0x00005375, + 5993: 0x0000541D, + 5994: 0x0000542D, + 5995: 0x0000541E, + 5996: 0x0000543E, + 5997: 0x00005426, + 5998: 0x0000544E, + 5999: 0x00005427, + 6000: 0x00005446, + 6001: 0x00005443, + 6002: 0x00005433, + 6003: 0x00005448, + 6004: 0x00005442, + 6005: 0x0000541B, + 6006: 0x00005429, + 6007: 0x0000544A, + 6008: 0x00005439, + 6009: 0x0000543B, + 6010: 0x00005438, + 6011: 0x0000542E, + 6012: 0x00005435, + 6013: 0x00005436, + 6014: 0x00005420, + 6015: 0x0000543C, + 6016: 0x00005440, + 6017: 0x00005431, + 6018: 0x0000542B, + 6019: 0x0000541F, + 6020: 0x0000542C, + 6021: 0x000056EA, + 6022: 0x000056F0, + 6023: 0x000056E4, + 6024: 0x000056EB, + 6025: 0x0000574A, + 6026: 0x00005751, + 6027: 0x00005740, + 6028: 0x0000574D, + 6029: 0x00005747, + 6030: 0x0000574E, + 6031: 0x0000573E, + 6032: 0x00005750, + 6033: 0x0000574F, + 6034: 0x0000573B, + 6035: 0x000058EF, + 6036: 0x0000593E, + 6037: 0x0000599D, + 6038: 0x00005992, + 6039: 0x000059A8, + 6040: 0x0000599E, + 6041: 0x000059A3, + 6042: 0x00005999, + 6043: 0x00005996, + 6044: 0x0000598D, + 6045: 0x000059A4, + 6046: 0x00005993, + 6047: 0x0000598A, + 6048: 0x000059A5, + 6049: 0x00005B5D, + 6050: 0x00005B5C, + 6051: 0x00005B5A, + 6052: 0x00005B5B, + 6053: 0x00005B8C, + 6054: 0x00005B8B, + 6055: 0x00005B8F, + 6056: 0x00005C2C, + 6057: 0x00005C40, + 6058: 0x00005C41, + 6059: 0x00005C3F, + 6060: 0x00005C3E, + 6061: 0x00005C90, + 6062: 0x00005C91, + 6063: 0x00005C94, + 6064: 0x00005C8C, + 6065: 0x00005DEB, + 6066: 0x00005E0C, + 6067: 0x00005E8F, + 6068: 0x00005E87, + 6069: 0x00005E8A, + 6070: 0x00005EF7, + 6071: 0x00005F04, + 6072: 0x00005F1F, + 6073: 0x00005F64, + 6074: 0x00005F62, + 6075: 0x00005F77, + 6076: 0x00005F79, + 6077: 0x00005FD8, + 6078: 0x00005FCC, + 6079: 0x00005FD7, + 6080: 0x00005FCD, + 6081: 0x00005FF1, + 6082: 0x00005FEB, + 6083: 0x00005FF8, + 6084: 0x00005FEA, + 6085: 0x00006212, + 6086: 0x00006211, + 6087: 0x00006284, + 6088: 0x00006297, + 6089: 0x00006296, + 6090: 0x00006280, + 6091: 0x00006276, + 6092: 0x00006289, + 6093: 0x0000626D, + 6094: 0x0000628A, + 6095: 0x0000627C, + 6096: 0x0000627E, + 6097: 0x00006279, + 6098: 0x00006273, + 6099: 0x00006292, + 6100: 0x0000626F, + 6101: 0x00006298, + 6102: 0x0000626E, + 6103: 0x00006295, + 6104: 0x00006293, + 6105: 0x00006291, + 6106: 0x00006286, + 6107: 0x00006539, + 6108: 0x0000653B, + 6109: 0x00006538, + 6110: 0x000065F1, + 6111: 0x000066F4, + 6112: 0x0000675F, + 6113: 0x0000674E, + 6114: 0x0000674F, + 6115: 0x00006750, + 6116: 0x00006751, + 6117: 0x0000675C, + 6118: 0x00006756, + 6119: 0x0000675E, + 6120: 0x00006749, + 6121: 0x00006746, + 6122: 0x00006760, + 6123: 0x00006753, + 6124: 0x00006757, + 6125: 0x00006B65, + 6126: 0x00006BCF, + 6127: 0x00006C42, + 6128: 0x00006C5E, + 6129: 0x00006C99, + 6130: 0x00006C81, + 6131: 0x00006C88, + 6132: 0x00006C89, + 6133: 0x00006C85, + 6134: 0x00006C9B, + 6135: 0x00006C6A, + 6136: 0x00006C7A, + 6137: 0x00006C90, + 6138: 0x00006C70, + 6139: 0x00006C8C, + 6140: 0x00006C68, + 6141: 0x00006C96, + 6142: 0x00006C92, + 6143: 0x00006C7D, + 6144: 0x00006C83, + 6145: 0x00006C72, + 6146: 0x00006C7E, + 6147: 0x00006C74, + 6148: 0x00006C86, + 6149: 0x00006C76, + 6150: 0x00006C8D, + 6151: 0x00006C94, + 6152: 0x00006C98, + 6153: 0x00006C82, + 6154: 0x00007076, + 6155: 0x0000707C, + 6156: 0x0000707D, + 6157: 0x00007078, + 6158: 0x00007262, + 6159: 0x00007261, + 6160: 0x00007260, + 6161: 0x000072C4, + 6162: 0x000072C2, + 6163: 0x00007396, + 6164: 0x0000752C, + 6165: 0x0000752B, + 6166: 0x00007537, + 6167: 0x00007538, + 6168: 0x00007682, + 6169: 0x000076EF, + 6170: 0x000077E3, + 6171: 0x000079C1, + 6172: 0x000079C0, + 6173: 0x000079BF, + 6174: 0x00007A76, + 6175: 0x00007CFB, + 6176: 0x00007F55, + 6177: 0x00008096, + 6178: 0x00008093, + 6179: 0x0000809D, + 6180: 0x00008098, + 6181: 0x0000809B, + 6182: 0x0000809A, + 6183: 0x000080B2, + 6184: 0x0000826F, + 6185: 0x00008292, + 6186: 0x0000828B, + 6187: 0x0000828D, + 6188: 0x0000898B, + 6189: 0x000089D2, + 6190: 0x00008A00, + 6191: 0x00008C37, + 6192: 0x00008C46, + 6193: 0x00008C55, + 6194: 0x00008C9D, + 6195: 0x00008D64, + 6196: 0x00008D70, + 6197: 0x00008DB3, + 6198: 0x00008EAB, + 6199: 0x00008ECA, + 6200: 0x00008F9B, + 6201: 0x00008FB0, + 6202: 0x00008FC2, + 6203: 0x00008FC6, + 6204: 0x00008FC5, + 6205: 0x00008FC4, + 6206: 0x00005DE1, + 6207: 0x00009091, + 6208: 0x000090A2, + 6209: 0x000090AA, + 6210: 0x000090A6, + 6211: 0x000090A3, + 6212: 0x00009149, + 6213: 0x000091C6, + 6214: 0x000091CC, + 6215: 0x00009632, + 6216: 0x0000962E, + 6217: 0x00009631, + 6218: 0x0000962A, + 6219: 0x0000962C, + 6220: 0x00004E26, + 6221: 0x00004E56, + 6222: 0x00004E73, + 6223: 0x00004E8B, + 6224: 0x00004E9B, + 6225: 0x00004E9E, + 6226: 0x00004EAB, + 6227: 0x00004EAC, + 6228: 0x00004F6F, + 6229: 0x00004F9D, + 6230: 0x00004F8D, + 6231: 0x00004F73, + 6232: 0x00004F7F, + 6233: 0x00004F6C, + 6234: 0x00004F9B, + 6235: 0x00004F8B, + 6236: 0x00004F86, + 6237: 0x00004F83, + 6238: 0x00004F70, + 6239: 0x00004F75, + 6240: 0x00004F88, + 6241: 0x00004F69, + 6242: 0x00004F7B, + 6243: 0x00004F96, + 6244: 0x00004F7E, + 6245: 0x00004F8F, + 6246: 0x00004F91, + 6247: 0x00004F7A, + 6248: 0x00005154, + 6249: 0x00005152, + 6250: 0x00005155, + 6251: 0x00005169, + 6252: 0x00005177, + 6253: 0x00005176, + 6254: 0x00005178, + 6255: 0x000051BD, + 6256: 0x000051FD, + 6257: 0x0000523B, + 6258: 0x00005238, + 6259: 0x00005237, + 6260: 0x0000523A, + 6261: 0x00005230, + 6262: 0x0000522E, + 6263: 0x00005236, + 6264: 0x00005241, + 6265: 0x000052BE, + 6266: 0x000052BB, + 6267: 0x00005352, + 6268: 0x00005354, + 6269: 0x00005353, + 6270: 0x00005351, + 6271: 0x00005366, + 6272: 0x00005377, + 6273: 0x00005378, + 6274: 0x00005379, + 6275: 0x000053D6, + 6276: 0x000053D4, + 6277: 0x000053D7, + 6278: 0x00005473, + 6279: 0x00005475, + 6280: 0x00005496, + 6281: 0x00005478, + 6282: 0x00005495, + 6283: 0x00005480, + 6284: 0x0000547B, + 6285: 0x00005477, + 6286: 0x00005484, + 6287: 0x00005492, + 6288: 0x00005486, + 6289: 0x0000547C, + 6290: 0x00005490, + 6291: 0x00005471, + 6292: 0x00005476, + 6293: 0x0000548C, + 6294: 0x0000549A, + 6295: 0x00005462, + 6296: 0x00005468, + 6297: 0x0000548B, + 6298: 0x0000547D, + 6299: 0x0000548E, + 6300: 0x000056FA, + 6301: 0x00005783, + 6302: 0x00005777, + 6303: 0x0000576A, + 6304: 0x00005769, + 6305: 0x00005761, + 6306: 0x00005766, + 6307: 0x00005764, + 6308: 0x0000577C, + 6309: 0x0000591C, + 6310: 0x00005949, + 6311: 0x00005947, + 6312: 0x00005948, + 6313: 0x00005944, + 6314: 0x00005954, + 6315: 0x000059BE, + 6316: 0x000059BB, + 6317: 0x000059D4, + 6318: 0x000059B9, + 6319: 0x000059AE, + 6320: 0x000059D1, + 6321: 0x000059C6, + 6322: 0x000059D0, + 6323: 0x000059CD, + 6324: 0x000059CB, + 6325: 0x000059D3, + 6326: 0x000059CA, + 6327: 0x000059AF, + 6328: 0x000059B3, + 6329: 0x000059D2, + 6330: 0x000059C5, + 6331: 0x00005B5F, + 6332: 0x00005B64, + 6333: 0x00005B63, + 6334: 0x00005B97, + 6335: 0x00005B9A, + 6336: 0x00005B98, + 6337: 0x00005B9C, + 6338: 0x00005B99, + 6339: 0x00005B9B, + 6340: 0x00005C1A, + 6341: 0x00005C48, + 6342: 0x00005C45, + 6343: 0x00005C46, + 6344: 0x00005CB7, + 6345: 0x00005CA1, + 6346: 0x00005CB8, + 6347: 0x00005CA9, + 6348: 0x00005CAB, + 6349: 0x00005CB1, + 6350: 0x00005CB3, + 6351: 0x00005E18, + 6352: 0x00005E1A, + 6353: 0x00005E16, + 6354: 0x00005E15, + 6355: 0x00005E1B, + 6356: 0x00005E11, + 6357: 0x00005E78, + 6358: 0x00005E9A, + 6359: 0x00005E97, + 6360: 0x00005E9C, + 6361: 0x00005E95, + 6362: 0x00005E96, + 6363: 0x00005EF6, + 6364: 0x00005F26, + 6365: 0x00005F27, + 6366: 0x00005F29, + 6367: 0x00005F80, + 6368: 0x00005F81, + 6369: 0x00005F7F, + 6370: 0x00005F7C, + 6371: 0x00005FDD, + 6372: 0x00005FE0, + 6373: 0x00005FFD, + 6374: 0x00005FF5, + 6375: 0x00005FFF, + 6376: 0x0000600F, + 6377: 0x00006014, + 6378: 0x0000602F, + 6379: 0x00006035, + 6380: 0x00006016, + 6381: 0x0000602A, + 6382: 0x00006015, + 6383: 0x00006021, + 6384: 0x00006027, + 6385: 0x00006029, + 6386: 0x0000602B, + 6387: 0x0000601B, + 6388: 0x00006216, + 6389: 0x00006215, + 6390: 0x0000623F, + 6391: 0x0000623E, + 6392: 0x00006240, + 6393: 0x0000627F, + 6394: 0x000062C9, + 6395: 0x000062CC, + 6396: 0x000062C4, + 6397: 0x000062BF, + 6398: 0x000062C2, + 6399: 0x000062B9, + 6400: 0x000062D2, + 6401: 0x000062DB, + 6402: 0x000062AB, + 6403: 0x000062D3, + 6404: 0x000062D4, + 6405: 0x000062CB, + 6406: 0x000062C8, + 6407: 0x000062A8, + 6408: 0x000062BD, + 6409: 0x000062BC, + 6410: 0x000062D0, + 6411: 0x000062D9, + 6412: 0x000062C7, + 6413: 0x000062CD, + 6414: 0x000062B5, + 6415: 0x000062DA, + 6416: 0x000062B1, + 6417: 0x000062D8, + 6418: 0x000062D6, + 6419: 0x000062D7, + 6420: 0x000062C6, + 6421: 0x000062AC, + 6422: 0x000062CE, + 6423: 0x0000653E, + 6424: 0x000065A7, + 6425: 0x000065BC, + 6426: 0x000065FA, + 6427: 0x00006614, + 6428: 0x00006613, + 6429: 0x0000660C, + 6430: 0x00006606, + 6431: 0x00006602, + 6432: 0x0000660E, + 6433: 0x00006600, + 6434: 0x0000660F, + 6435: 0x00006615, + 6436: 0x0000660A, + 6437: 0x00006607, + 6438: 0x0000670D, + 6439: 0x0000670B, + 6440: 0x0000676D, + 6441: 0x0000678B, + 6442: 0x00006795, + 6443: 0x00006771, + 6444: 0x0000679C, + 6445: 0x00006773, + 6446: 0x00006777, + 6447: 0x00006787, + 6448: 0x0000679D, + 6449: 0x00006797, + 6450: 0x0000676F, + 6451: 0x00006770, + 6452: 0x0000677F, + 6453: 0x00006789, + 6454: 0x0000677E, + 6455: 0x00006790, + 6456: 0x00006775, + 6457: 0x0000679A, + 6458: 0x00006793, + 6459: 0x0000677C, + 6460: 0x0000676A, + 6461: 0x00006772, + 6462: 0x00006B23, + 6463: 0x00006B66, + 6464: 0x00006B67, + 6465: 0x00006B7F, + 6466: 0x00006C13, + 6467: 0x00006C1B, + 6468: 0x00006CE3, + 6469: 0x00006CE8, + 6470: 0x00006CF3, + 6471: 0x00006CB1, + 6472: 0x00006CCC, + 6473: 0x00006CE5, + 6474: 0x00006CB3, + 6475: 0x00006CBD, + 6476: 0x00006CBE, + 6477: 0x00006CBC, + 6478: 0x00006CE2, + 6479: 0x00006CAB, + 6480: 0x00006CD5, + 6481: 0x00006CD3, + 6482: 0x00006CB8, + 6483: 0x00006CC4, + 6484: 0x00006CB9, + 6485: 0x00006CC1, + 6486: 0x00006CAE, + 6487: 0x00006CD7, + 6488: 0x00006CC5, + 6489: 0x00006CF1, + 6490: 0x00006CBF, + 6491: 0x00006CBB, + 6492: 0x00006CE1, + 6493: 0x00006CDB, + 6494: 0x00006CCA, + 6495: 0x00006CAC, + 6496: 0x00006CEF, + 6497: 0x00006CDC, + 6498: 0x00006CD6, + 6499: 0x00006CE0, + 6500: 0x00007095, + 6501: 0x0000708E, + 6502: 0x00007092, + 6503: 0x0000708A, + 6504: 0x00007099, + 6505: 0x0000722C, + 6506: 0x0000722D, + 6507: 0x00007238, + 6508: 0x00007248, + 6509: 0x00007267, + 6510: 0x00007269, + 6511: 0x000072C0, + 6512: 0x000072CE, + 6513: 0x000072D9, + 6514: 0x000072D7, + 6515: 0x000072D0, + 6516: 0x000073A9, + 6517: 0x000073A8, + 6518: 0x0000739F, + 6519: 0x000073AB, + 6520: 0x000073A5, + 6521: 0x0000753D, + 6522: 0x0000759D, + 6523: 0x00007599, + 6524: 0x0000759A, + 6525: 0x00007684, + 6526: 0x000076C2, + 6527: 0x000076F2, + 6528: 0x000076F4, + 6529: 0x000077E5, + 6530: 0x000077FD, + 6531: 0x0000793E, + 6532: 0x00007940, + 6533: 0x00007941, + 6534: 0x000079C9, + 6535: 0x000079C8, + 6536: 0x00007A7A, + 6537: 0x00007A79, + 6538: 0x00007AFA, + 6539: 0x00007CFE, + 6540: 0x00007F54, + 6541: 0x00007F8C, + 6542: 0x00007F8B, + 6543: 0x00008005, + 6544: 0x000080BA, + 6545: 0x000080A5, + 6546: 0x000080A2, + 6547: 0x000080B1, + 6548: 0x000080A1, + 6549: 0x000080AB, + 6550: 0x000080A9, + 6551: 0x000080B4, + 6552: 0x000080AA, + 6553: 0x000080AF, + 6554: 0x000081E5, + 6555: 0x000081FE, + 6556: 0x0000820D, + 6557: 0x000082B3, + 6558: 0x0000829D, + 6559: 0x00008299, + 6560: 0x000082AD, + 6561: 0x000082BD, + 6562: 0x0000829F, + 6563: 0x000082B9, + 6564: 0x000082B1, + 6565: 0x000082AC, + 6566: 0x000082A5, + 6567: 0x000082AF, + 6568: 0x000082B8, + 6569: 0x000082A3, + 6570: 0x000082B0, + 6571: 0x000082BE, + 6572: 0x000082B7, + 6573: 0x0000864E, + 6574: 0x00008671, + 6575: 0x0000521D, + 6576: 0x00008868, + 6577: 0x00008ECB, + 6578: 0x00008FCE, + 6579: 0x00008FD4, + 6580: 0x00008FD1, + 6581: 0x000090B5, + 6582: 0x000090B8, + 6583: 0x000090B1, + 6584: 0x000090B6, + 6585: 0x000091C7, + 6586: 0x000091D1, + 6587: 0x00009577, + 6588: 0x00009580, + 6589: 0x0000961C, + 6590: 0x00009640, + 6591: 0x0000963F, + 6592: 0x0000963B, + 6593: 0x00009644, + 6594: 0x00009642, + 6595: 0x000096B9, + 6596: 0x000096E8, + 6597: 0x00009752, + 6598: 0x0000975E, + 6599: 0x00004E9F, + 6600: 0x00004EAD, + 6601: 0x00004EAE, + 6602: 0x00004FE1, + 6603: 0x00004FB5, + 6604: 0x00004FAF, + 6605: 0x00004FBF, + 6606: 0x00004FE0, + 6607: 0x00004FD1, + 6608: 0x00004FCF, + 6609: 0x00004FDD, + 6610: 0x00004FC3, + 6611: 0x00004FB6, + 6612: 0x00004FD8, + 6613: 0x00004FDF, + 6614: 0x00004FCA, + 6615: 0x00004FD7, + 6616: 0x00004FAE, + 6617: 0x00004FD0, + 6618: 0x00004FC4, + 6619: 0x00004FC2, + 6620: 0x00004FDA, + 6621: 0x00004FCE, + 6622: 0x00004FDE, + 6623: 0x00004FB7, + 6624: 0x00005157, + 6625: 0x00005192, + 6626: 0x00005191, + 6627: 0x000051A0, + 6628: 0x0000524E, + 6629: 0x00005243, + 6630: 0x0000524A, + 6631: 0x0000524D, + 6632: 0x0000524C, + 6633: 0x0000524B, + 6634: 0x00005247, + 6635: 0x000052C7, + 6636: 0x000052C9, + 6637: 0x000052C3, + 6638: 0x000052C1, + 6639: 0x0000530D, + 6640: 0x00005357, + 6641: 0x0000537B, + 6642: 0x0000539A, + 6643: 0x000053DB, + 6644: 0x000054AC, + 6645: 0x000054C0, + 6646: 0x000054A8, + 6647: 0x000054CE, + 6648: 0x000054C9, + 6649: 0x000054B8, + 6650: 0x000054A6, + 6651: 0x000054B3, + 6652: 0x000054C7, + 6653: 0x000054C2, + 6654: 0x000054BD, + 6655: 0x000054AA, + 6656: 0x000054C1, + 6657: 0x000054C4, + 6658: 0x000054C8, + 6659: 0x000054AF, + 6660: 0x000054AB, + 6661: 0x000054B1, + 6662: 0x000054BB, + 6663: 0x000054A9, + 6664: 0x000054A7, + 6665: 0x000054BF, + 6666: 0x000056FF, + 6667: 0x00005782, + 6668: 0x0000578B, + 6669: 0x000057A0, + 6670: 0x000057A3, + 6671: 0x000057A2, + 6672: 0x000057CE, + 6673: 0x000057AE, + 6674: 0x00005793, + 6675: 0x00005955, + 6676: 0x00005951, + 6677: 0x0000594F, + 6678: 0x0000594E, + 6679: 0x00005950, + 6680: 0x000059DC, + 6681: 0x000059D8, + 6682: 0x000059FF, + 6683: 0x000059E3, + 6684: 0x000059E8, + 6685: 0x00005A03, + 6686: 0x000059E5, + 6687: 0x000059EA, + 6688: 0x000059DA, + 6689: 0x000059E6, + 6690: 0x00005A01, + 6691: 0x000059FB, + 6692: 0x00005B69, + 6693: 0x00005BA3, + 6694: 0x00005BA6, + 6695: 0x00005BA4, + 6696: 0x00005BA2, + 6697: 0x00005BA5, + 6698: 0x00005C01, + 6699: 0x00005C4E, + 6700: 0x00005C4F, + 6701: 0x00005C4D, + 6702: 0x00005C4B, + 6703: 0x00005CD9, + 6704: 0x00005CD2, + 6705: 0x00005DF7, + 6706: 0x00005E1D, + 6707: 0x00005E25, + 6708: 0x00005E1F, + 6709: 0x00005E7D, + 6710: 0x00005EA0, + 6711: 0x00005EA6, + 6712: 0x00005EFA, + 6713: 0x00005F08, + 6714: 0x00005F2D, + 6715: 0x00005F65, + 6716: 0x00005F88, + 6717: 0x00005F85, + 6718: 0x00005F8A, + 6719: 0x00005F8B, + 6720: 0x00005F87, + 6721: 0x00005F8C, + 6722: 0x00005F89, + 6723: 0x00006012, + 6724: 0x0000601D, + 6725: 0x00006020, + 6726: 0x00006025, + 6727: 0x0000600E, + 6728: 0x00006028, + 6729: 0x0000604D, + 6730: 0x00006070, + 6731: 0x00006068, + 6732: 0x00006062, + 6733: 0x00006046, + 6734: 0x00006043, + 6735: 0x0000606C, + 6736: 0x0000606B, + 6737: 0x0000606A, + 6738: 0x00006064, + 6739: 0x00006241, + 6740: 0x000062DC, + 6741: 0x00006316, + 6742: 0x00006309, + 6743: 0x000062FC, + 6744: 0x000062ED, + 6745: 0x00006301, + 6746: 0x000062EE, + 6747: 0x000062FD, + 6748: 0x00006307, + 6749: 0x000062F1, + 6750: 0x000062F7, + 6751: 0x000062EF, + 6752: 0x000062EC, + 6753: 0x000062FE, + 6754: 0x000062F4, + 6755: 0x00006311, + 6756: 0x00006302, + 6757: 0x0000653F, + 6758: 0x00006545, + 6759: 0x000065AB, + 6760: 0x000065BD, + 6761: 0x000065E2, + 6762: 0x00006625, + 6763: 0x0000662D, + 6764: 0x00006620, + 6765: 0x00006627, + 6766: 0x0000662F, + 6767: 0x0000661F, + 6768: 0x00006628, + 6769: 0x00006631, + 6770: 0x00006624, + 6771: 0x000066F7, + 6772: 0x000067FF, + 6773: 0x000067D3, + 6774: 0x000067F1, + 6775: 0x000067D4, + 6776: 0x000067D0, + 6777: 0x000067EC, + 6778: 0x000067B6, + 6779: 0x000067AF, + 6780: 0x000067F5, + 6781: 0x000067E9, + 6782: 0x000067EF, + 6783: 0x000067C4, + 6784: 0x000067D1, + 6785: 0x000067B4, + 6786: 0x000067DA, + 6787: 0x000067E5, + 6788: 0x000067B8, + 6789: 0x000067CF, + 6790: 0x000067DE, + 6791: 0x000067F3, + 6792: 0x000067B0, + 6793: 0x000067D9, + 6794: 0x000067E2, + 6795: 0x000067DD, + 6796: 0x000067D2, + 6797: 0x00006B6A, + 6798: 0x00006B83, + 6799: 0x00006B86, + 6800: 0x00006BB5, + 6801: 0x00006BD2, + 6802: 0x00006BD7, + 6803: 0x00006C1F, + 6804: 0x00006CC9, + 6805: 0x00006D0B, + 6806: 0x00006D32, + 6807: 0x00006D2A, + 6808: 0x00006D41, + 6809: 0x00006D25, + 6810: 0x00006D0C, + 6811: 0x00006D31, + 6812: 0x00006D1E, + 6813: 0x00006D17, + 6814: 0x00006D3B, + 6815: 0x00006D3D, + 6816: 0x00006D3E, + 6817: 0x00006D36, + 6818: 0x00006D1B, + 6819: 0x00006CF5, + 6820: 0x00006D39, + 6821: 0x00006D27, + 6822: 0x00006D38, + 6823: 0x00006D29, + 6824: 0x00006D2E, + 6825: 0x00006D35, + 6826: 0x00006D0E, + 6827: 0x00006D2B, + 6828: 0x000070AB, + 6829: 0x000070BA, + 6830: 0x000070B3, + 6831: 0x000070AC, + 6832: 0x000070AF, + 6833: 0x000070AD, + 6834: 0x000070B8, + 6835: 0x000070AE, + 6836: 0x000070A4, + 6837: 0x00007230, + 6838: 0x00007272, + 6839: 0x0000726F, + 6840: 0x00007274, + 6841: 0x000072E9, + 6842: 0x000072E0, + 6843: 0x000072E1, + 6844: 0x000073B7, + 6845: 0x000073CA, + 6846: 0x000073BB, + 6847: 0x000073B2, + 6848: 0x000073CD, + 6849: 0x000073C0, + 6850: 0x000073B3, + 6851: 0x0000751A, + 6852: 0x0000752D, + 6853: 0x0000754F, + 6854: 0x0000754C, + 6855: 0x0000754E, + 6856: 0x0000754B, + 6857: 0x000075AB, + 6858: 0x000075A4, + 6859: 0x000075A5, + 6860: 0x000075A2, + 6861: 0x000075A3, + 6862: 0x00007678, + 6863: 0x00007686, + 6864: 0x00007687, + 6865: 0x00007688, + 6866: 0x000076C8, + 6867: 0x000076C6, + 6868: 0x000076C3, + 6869: 0x000076C5, + 6870: 0x00007701, + 6871: 0x000076F9, + 6872: 0x000076F8, + 6873: 0x00007709, + 6874: 0x0000770B, + 6875: 0x000076FE, + 6876: 0x000076FC, + 6877: 0x00007707, + 6878: 0x000077DC, + 6879: 0x00007802, + 6880: 0x00007814, + 6881: 0x0000780C, + 6882: 0x0000780D, + 6883: 0x00007946, + 6884: 0x00007949, + 6885: 0x00007948, + 6886: 0x00007947, + 6887: 0x000079B9, + 6888: 0x000079BA, + 6889: 0x000079D1, + 6890: 0x000079D2, + 6891: 0x000079CB, + 6892: 0x00007A7F, + 6893: 0x00007A81, + 6894: 0x00007AFF, + 6895: 0x00007AFD, + 6896: 0x00007C7D, + 6897: 0x00007D02, + 6898: 0x00007D05, + 6899: 0x00007D00, + 6900: 0x00007D09, + 6901: 0x00007D07, + 6902: 0x00007D04, + 6903: 0x00007D06, + 6904: 0x00007F38, + 6905: 0x00007F8E, + 6906: 0x00007FBF, + 6907: 0x00008004, + 6908: 0x00008010, + 6909: 0x0000800D, + 6910: 0x00008011, + 6911: 0x00008036, + 6912: 0x000080D6, + 6913: 0x000080E5, + 6914: 0x000080DA, + 6915: 0x000080C3, + 6916: 0x000080C4, + 6917: 0x000080CC, + 6918: 0x000080E1, + 6919: 0x000080DB, + 6920: 0x000080CE, + 6921: 0x000080DE, + 6922: 0x000080E4, + 6923: 0x000080DD, + 6924: 0x000081F4, + 6925: 0x00008222, + 6926: 0x000082E7, + 6927: 0x00008303, + 6928: 0x00008305, + 6929: 0x000082E3, + 6930: 0x000082DB, + 6931: 0x000082E6, + 6932: 0x00008304, + 6933: 0x000082E5, + 6934: 0x00008302, + 6935: 0x00008309, + 6936: 0x000082D2, + 6937: 0x000082D7, + 6938: 0x000082F1, + 6939: 0x00008301, + 6940: 0x000082DC, + 6941: 0x000082D4, + 6942: 0x000082D1, + 6943: 0x000082DE, + 6944: 0x000082D3, + 6945: 0x000082DF, + 6946: 0x000082EF, + 6947: 0x00008306, + 6948: 0x00008650, + 6949: 0x00008679, + 6950: 0x0000867B, + 6951: 0x0000867A, + 6952: 0x0000884D, + 6953: 0x0000886B, + 6954: 0x00008981, + 6955: 0x000089D4, + 6956: 0x00008A08, + 6957: 0x00008A02, + 6958: 0x00008A03, + 6959: 0x00008C9E, + 6960: 0x00008CA0, + 6961: 0x00008D74, + 6962: 0x00008D73, + 6963: 0x00008DB4, + 6964: 0x00008ECD, + 6965: 0x00008ECC, + 6966: 0x00008FF0, + 6967: 0x00008FE6, + 6968: 0x00008FE2, + 6969: 0x00008FEA, + 6970: 0x00008FE5, + 6971: 0x00008FED, + 6972: 0x00008FEB, + 6973: 0x00008FE4, + 6974: 0x00008FE8, + 6975: 0x000090CA, + 6976: 0x000090CE, + 6977: 0x000090C1, + 6978: 0x000090C3, + 6979: 0x0000914B, + 6980: 0x0000914A, + 6981: 0x000091CD, + 6982: 0x00009582, + 6983: 0x00009650, + 6984: 0x0000964B, + 6985: 0x0000964C, + 6986: 0x0000964D, + 6987: 0x00009762, + 6988: 0x00009769, + 6989: 0x000097CB, + 6990: 0x000097ED, + 6991: 0x000097F3, + 6992: 0x00009801, + 6993: 0x000098A8, + 6994: 0x000098DB, + 6995: 0x000098DF, + 6996: 0x00009996, + 6997: 0x00009999, + 6998: 0x00004E58, + 6999: 0x00004EB3, + 7000: 0x0000500C, + 7001: 0x0000500D, + 7002: 0x00005023, + 7003: 0x00004FEF, + 7004: 0x00005026, + 7005: 0x00005025, + 7006: 0x00004FF8, + 7007: 0x00005029, + 7008: 0x00005016, + 7009: 0x00005006, + 7010: 0x0000503C, + 7011: 0x0000501F, + 7012: 0x0000501A, + 7013: 0x00005012, + 7014: 0x00005011, + 7015: 0x00004FFA, + 7016: 0x00005000, + 7017: 0x00005014, + 7018: 0x00005028, + 7019: 0x00004FF1, + 7020: 0x00005021, + 7021: 0x0000500B, + 7022: 0x00005019, + 7023: 0x00005018, + 7024: 0x00004FF3, + 7025: 0x00004FEE, + 7026: 0x0000502D, + 7027: 0x0000502A, + 7028: 0x00004FFE, + 7029: 0x0000502B, + 7030: 0x00005009, + 7031: 0x0000517C, + 7032: 0x000051A4, + 7033: 0x000051A5, + 7034: 0x000051A2, + 7035: 0x000051CD, + 7036: 0x000051CC, + 7037: 0x000051C6, + 7038: 0x000051CB, + 7039: 0x00005256, + 7040: 0x0000525C, + 7041: 0x00005254, + 7042: 0x0000525B, + 7043: 0x0000525D, + 7044: 0x0000532A, + 7045: 0x0000537F, + 7046: 0x0000539F, + 7047: 0x0000539D, + 7048: 0x000053DF, + 7049: 0x000054E8, + 7050: 0x00005510, + 7051: 0x00005501, + 7052: 0x00005537, + 7053: 0x000054FC, + 7054: 0x000054E5, + 7055: 0x000054F2, + 7056: 0x00005506, + 7057: 0x000054FA, + 7058: 0x00005514, + 7059: 0x000054E9, + 7060: 0x000054ED, + 7061: 0x000054E1, + 7062: 0x00005509, + 7063: 0x000054EE, + 7064: 0x000054EA, + 7065: 0x000054E6, + 7066: 0x00005527, + 7067: 0x00005507, + 7068: 0x000054FD, + 7069: 0x0000550F, + 7070: 0x00005703, + 7071: 0x00005704, + 7072: 0x000057C2, + 7073: 0x000057D4, + 7074: 0x000057CB, + 7075: 0x000057C3, + 7076: 0x00005809, + 7077: 0x0000590F, + 7078: 0x00005957, + 7079: 0x00005958, + 7080: 0x0000595A, + 7081: 0x00005A11, + 7082: 0x00005A18, + 7083: 0x00005A1C, + 7084: 0x00005A1F, + 7085: 0x00005A1B, + 7086: 0x00005A13, + 7087: 0x000059EC, + 7088: 0x00005A20, + 7089: 0x00005A23, + 7090: 0x00005A29, + 7091: 0x00005A25, + 7092: 0x00005A0C, + 7093: 0x00005A09, + 7094: 0x00005B6B, + 7095: 0x00005C58, + 7096: 0x00005BB0, + 7097: 0x00005BB3, + 7098: 0x00005BB6, + 7099: 0x00005BB4, + 7100: 0x00005BAE, + 7101: 0x00005BB5, + 7102: 0x00005BB9, + 7103: 0x00005BB8, + 7104: 0x00005C04, + 7105: 0x00005C51, + 7106: 0x00005C55, + 7107: 0x00005C50, + 7108: 0x00005CED, + 7109: 0x00005CFD, + 7110: 0x00005CFB, + 7111: 0x00005CEA, + 7112: 0x00005CE8, + 7113: 0x00005CF0, + 7114: 0x00005CF6, + 7115: 0x00005D01, + 7116: 0x00005CF4, + 7117: 0x00005DEE, + 7118: 0x00005E2D, + 7119: 0x00005E2B, + 7120: 0x00005EAB, + 7121: 0x00005EAD, + 7122: 0x00005EA7, + 7123: 0x00005F31, + 7124: 0x00005F92, + 7125: 0x00005F91, + 7126: 0x00005F90, + 7127: 0x00006059, + 7128: 0x00006063, + 7129: 0x00006065, + 7130: 0x00006050, + 7131: 0x00006055, + 7132: 0x0000606D, + 7133: 0x00006069, + 7134: 0x0000606F, + 7135: 0x00006084, + 7136: 0x0000609F, + 7137: 0x0000609A, + 7138: 0x0000608D, + 7139: 0x00006094, + 7140: 0x0000608C, + 7141: 0x00006085, + 7142: 0x00006096, + 7143: 0x00006247, + 7144: 0x000062F3, + 7145: 0x00006308, + 7146: 0x000062FF, + 7147: 0x0000634E, + 7148: 0x0000633E, + 7149: 0x0000632F, + 7150: 0x00006355, + 7151: 0x00006342, + 7152: 0x00006346, + 7153: 0x0000634F, + 7154: 0x00006349, + 7155: 0x0000633A, + 7156: 0x00006350, + 7157: 0x0000633D, + 7158: 0x0000632A, + 7159: 0x0000632B, + 7160: 0x00006328, + 7161: 0x0000634D, + 7162: 0x0000634C, + 7163: 0x00006548, + 7164: 0x00006549, + 7165: 0x00006599, + 7166: 0x000065C1, + 7167: 0x000065C5, + 7168: 0x00006642, + 7169: 0x00006649, + 7170: 0x0000664F, + 7171: 0x00006643, + 7172: 0x00006652, + 7173: 0x0000664C, + 7174: 0x00006645, + 7175: 0x00006641, + 7176: 0x000066F8, + 7177: 0x00006714, + 7178: 0x00006715, + 7179: 0x00006717, + 7180: 0x00006821, + 7181: 0x00006838, + 7182: 0x00006848, + 7183: 0x00006846, + 7184: 0x00006853, + 7185: 0x00006839, + 7186: 0x00006842, + 7187: 0x00006854, + 7188: 0x00006829, + 7189: 0x000068B3, + 7190: 0x00006817, + 7191: 0x0000684C, + 7192: 0x00006851, + 7193: 0x0000683D, + 7194: 0x000067F4, + 7195: 0x00006850, + 7196: 0x00006840, + 7197: 0x0000683C, + 7198: 0x00006843, + 7199: 0x0000682A, + 7200: 0x00006845, + 7201: 0x00006813, + 7202: 0x00006818, + 7203: 0x00006841, + 7204: 0x00006B8A, + 7205: 0x00006B89, + 7206: 0x00006BB7, + 7207: 0x00006C23, + 7208: 0x00006C27, + 7209: 0x00006C28, + 7210: 0x00006C26, + 7211: 0x00006C24, + 7212: 0x00006CF0, + 7213: 0x00006D6A, + 7214: 0x00006D95, + 7215: 0x00006D88, + 7216: 0x00006D87, + 7217: 0x00006D66, + 7218: 0x00006D78, + 7219: 0x00006D77, + 7220: 0x00006D59, + 7221: 0x00006D93, + 7222: 0x00006D6C, + 7223: 0x00006D89, + 7224: 0x00006D6E, + 7225: 0x00006D5A, + 7226: 0x00006D74, + 7227: 0x00006D69, + 7228: 0x00006D8C, + 7229: 0x00006D8A, + 7230: 0x00006D79, + 7231: 0x00006D85, + 7232: 0x00006D65, + 7233: 0x00006D94, + 7234: 0x000070CA, + 7235: 0x000070D8, + 7236: 0x000070E4, + 7237: 0x000070D9, + 7238: 0x000070C8, + 7239: 0x000070CF, + 7240: 0x00007239, + 7241: 0x00007279, + 7242: 0x000072FC, + 7243: 0x000072F9, + 7244: 0x000072FD, + 7245: 0x000072F8, + 7246: 0x000072F7, + 7247: 0x00007386, + 7248: 0x000073ED, + 7249: 0x00007409, + 7250: 0x000073EE, + 7251: 0x000073E0, + 7252: 0x000073EA, + 7253: 0x000073DE, + 7254: 0x00007554, + 7255: 0x0000755D, + 7256: 0x0000755C, + 7257: 0x0000755A, + 7258: 0x00007559, + 7259: 0x000075BE, + 7260: 0x000075C5, + 7261: 0x000075C7, + 7262: 0x000075B2, + 7263: 0x000075B3, + 7264: 0x000075BD, + 7265: 0x000075BC, + 7266: 0x000075B9, + 7267: 0x000075C2, + 7268: 0x000075B8, + 7269: 0x0000768B, + 7270: 0x000076B0, + 7271: 0x000076CA, + 7272: 0x000076CD, + 7273: 0x000076CE, + 7274: 0x00007729, + 7275: 0x0000771F, + 7276: 0x00007720, + 7277: 0x00007728, + 7278: 0x000077E9, + 7279: 0x00007830, + 7280: 0x00007827, + 7281: 0x00007838, + 7282: 0x0000781D, + 7283: 0x00007834, + 7284: 0x00007837, + 7285: 0x00007825, + 7286: 0x0000782D, + 7287: 0x00007820, + 7288: 0x0000781F, + 7289: 0x00007832, + 7290: 0x00007955, + 7291: 0x00007950, + 7292: 0x00007960, + 7293: 0x0000795F, + 7294: 0x00007956, + 7295: 0x0000795E, + 7296: 0x0000795D, + 7297: 0x00007957, + 7298: 0x0000795A, + 7299: 0x000079E4, + 7300: 0x000079E3, + 7301: 0x000079E7, + 7302: 0x000079DF, + 7303: 0x000079E6, + 7304: 0x000079E9, + 7305: 0x000079D8, + 7306: 0x00007A84, + 7307: 0x00007A88, + 7308: 0x00007AD9, + 7309: 0x00007B06, + 7310: 0x00007B11, + 7311: 0x00007C89, + 7312: 0x00007D21, + 7313: 0x00007D17, + 7314: 0x00007D0B, + 7315: 0x00007D0A, + 7316: 0x00007D20, + 7317: 0x00007D22, + 7318: 0x00007D14, + 7319: 0x00007D10, + 7320: 0x00007D15, + 7321: 0x00007D1A, + 7322: 0x00007D1C, + 7323: 0x00007D0D, + 7324: 0x00007D19, + 7325: 0x00007D1B, + 7326: 0x00007F3A, + 7327: 0x00007F5F, + 7328: 0x00007F94, + 7329: 0x00007FC5, + 7330: 0x00007FC1, + 7331: 0x00008006, + 7332: 0x00008018, + 7333: 0x00008015, + 7334: 0x00008019, + 7335: 0x00008017, + 7336: 0x0000803D, + 7337: 0x0000803F, + 7338: 0x000080F1, + 7339: 0x00008102, + 7340: 0x000080F0, + 7341: 0x00008105, + 7342: 0x000080ED, + 7343: 0x000080F4, + 7344: 0x00008106, + 7345: 0x000080F8, + 7346: 0x000080F3, + 7347: 0x00008108, + 7348: 0x000080FD, + 7349: 0x0000810A, + 7350: 0x000080FC, + 7351: 0x000080EF, + 7352: 0x000081ED, + 7353: 0x000081EC, + 7354: 0x00008200, + 7355: 0x00008210, + 7356: 0x0000822A, + 7357: 0x0000822B, + 7358: 0x00008228, + 7359: 0x0000822C, + 7360: 0x000082BB, + 7361: 0x0000832B, + 7362: 0x00008352, + 7363: 0x00008354, + 7364: 0x0000834A, + 7365: 0x00008338, + 7366: 0x00008350, + 7367: 0x00008349, + 7368: 0x00008335, + 7369: 0x00008334, + 7370: 0x0000834F, + 7371: 0x00008332, + 7372: 0x00008339, + 7373: 0x00008336, + 7374: 0x00008317, + 7375: 0x00008340, + 7376: 0x00008331, + 7377: 0x00008328, + 7378: 0x00008343, + 7379: 0x00008654, + 7380: 0x0000868A, + 7381: 0x000086AA, + 7382: 0x00008693, + 7383: 0x000086A4, + 7384: 0x000086A9, + 7385: 0x0000868C, + 7386: 0x000086A3, + 7387: 0x0000869C, + 7388: 0x00008870, + 7389: 0x00008877, + 7390: 0x00008881, + 7391: 0x00008882, + 7392: 0x0000887D, + 7393: 0x00008879, + 7394: 0x00008A18, + 7395: 0x00008A10, + 7396: 0x00008A0E, + 7397: 0x00008A0C, + 7398: 0x00008A15, + 7399: 0x00008A0A, + 7400: 0x00008A17, + 7401: 0x00008A13, + 7402: 0x00008A16, + 7403: 0x00008A0F, + 7404: 0x00008A11, + 7405: 0x00008C48, + 7406: 0x00008C7A, + 7407: 0x00008C79, + 7408: 0x00008CA1, + 7409: 0x00008CA2, + 7410: 0x00008D77, + 7411: 0x00008EAC, + 7412: 0x00008ED2, + 7413: 0x00008ED4, + 7414: 0x00008ECF, + 7415: 0x00008FB1, + 7416: 0x00009001, + 7417: 0x00009006, + 7418: 0x00008FF7, + 7419: 0x00009000, + 7420: 0x00008FFA, + 7421: 0x00008FF4, + 7422: 0x00009003, + 7423: 0x00008FFD, + 7424: 0x00009005, + 7425: 0x00008FF8, + 7426: 0x00009095, + 7427: 0x000090E1, + 7428: 0x000090DD, + 7429: 0x000090E2, + 7430: 0x00009152, + 7431: 0x0000914D, + 7432: 0x0000914C, + 7433: 0x000091D8, + 7434: 0x000091DD, + 7435: 0x000091D7, + 7436: 0x000091DC, + 7437: 0x000091D9, + 7438: 0x00009583, + 7439: 0x00009662, + 7440: 0x00009663, + 7441: 0x00009661, + 7442: 0x0000965B, + 7443: 0x0000965D, + 7444: 0x00009664, + 7445: 0x00009658, + 7446: 0x0000965E, + 7447: 0x000096BB, + 7448: 0x000098E2, + 7449: 0x000099AC, + 7450: 0x00009AA8, + 7451: 0x00009AD8, + 7452: 0x00009B25, + 7453: 0x00009B32, + 7454: 0x00009B3C, + 7455: 0x00004E7E, + 7456: 0x0000507A, + 7457: 0x0000507D, + 7458: 0x0000505C, + 7459: 0x00005047, + 7460: 0x00005043, + 7461: 0x0000504C, + 7462: 0x0000505A, + 7463: 0x00005049, + 7464: 0x00005065, + 7465: 0x00005076, + 7466: 0x0000504E, + 7467: 0x00005055, + 7468: 0x00005075, + 7469: 0x00005074, + 7470: 0x00005077, + 7471: 0x0000504F, + 7472: 0x0000500F, + 7473: 0x0000506F, + 7474: 0x0000506D, + 7475: 0x0000515C, + 7476: 0x00005195, + 7477: 0x000051F0, + 7478: 0x0000526A, + 7479: 0x0000526F, + 7480: 0x000052D2, + 7481: 0x000052D9, + 7482: 0x000052D8, + 7483: 0x000052D5, + 7484: 0x00005310, + 7485: 0x0000530F, + 7486: 0x00005319, + 7487: 0x0000533F, + 7488: 0x00005340, + 7489: 0x0000533E, + 7490: 0x000053C3, + 7491: 0x000066FC, + 7492: 0x00005546, + 7493: 0x0000556A, + 7494: 0x00005566, + 7495: 0x00005544, + 7496: 0x0000555E, + 7497: 0x00005561, + 7498: 0x00005543, + 7499: 0x0000554A, + 7500: 0x00005531, + 7501: 0x00005556, + 7502: 0x0000554F, + 7503: 0x00005555, + 7504: 0x0000552F, + 7505: 0x00005564, + 7506: 0x00005538, + 7507: 0x0000552E, + 7508: 0x0000555C, + 7509: 0x0000552C, + 7510: 0x00005563, + 7511: 0x00005533, + 7512: 0x00005541, + 7513: 0x00005557, + 7514: 0x00005708, + 7515: 0x0000570B, + 7516: 0x00005709, + 7517: 0x000057DF, + 7518: 0x00005805, + 7519: 0x0000580A, + 7520: 0x00005806, + 7521: 0x000057E0, + 7522: 0x000057E4, + 7523: 0x000057FA, + 7524: 0x00005802, + 7525: 0x00005835, + 7526: 0x000057F7, + 7527: 0x000057F9, + 7528: 0x00005920, + 7529: 0x00005962, + 7530: 0x00005A36, + 7531: 0x00005A41, + 7532: 0x00005A49, + 7533: 0x00005A66, + 7534: 0x00005A6A, + 7535: 0x00005A40, + 7536: 0x00005A3C, + 7537: 0x00005A62, + 7538: 0x00005A5A, + 7539: 0x00005A46, + 7540: 0x00005A4A, + 7541: 0x00005B70, + 7542: 0x00005BC7, + 7543: 0x00005BC5, + 7544: 0x00005BC4, + 7545: 0x00005BC2, + 7546: 0x00005BBF, + 7547: 0x00005BC6, + 7548: 0x00005C09, + 7549: 0x00005C08, + 7550: 0x00005C07, + 7551: 0x00005C60, + 7552: 0x00005C5C, + 7553: 0x00005C5D, + 7554: 0x00005D07, + 7555: 0x00005D06, + 7556: 0x00005D0E, + 7557: 0x00005D1B, + 7558: 0x00005D16, + 7559: 0x00005D22, + 7560: 0x00005D11, + 7561: 0x00005D29, + 7562: 0x00005D14, + 7563: 0x00005D19, + 7564: 0x00005D24, + 7565: 0x00005D27, + 7566: 0x00005D17, + 7567: 0x00005DE2, + 7568: 0x00005E38, + 7569: 0x00005E36, + 7570: 0x00005E33, + 7571: 0x00005E37, + 7572: 0x00005EB7, + 7573: 0x00005EB8, + 7574: 0x00005EB6, + 7575: 0x00005EB5, + 7576: 0x00005EBE, + 7577: 0x00005F35, + 7578: 0x00005F37, + 7579: 0x00005F57, + 7580: 0x00005F6C, + 7581: 0x00005F69, + 7582: 0x00005F6B, + 7583: 0x00005F97, + 7584: 0x00005F99, + 7585: 0x00005F9E, + 7586: 0x00005F98, + 7587: 0x00005FA1, + 7588: 0x00005FA0, + 7589: 0x00005F9C, + 7590: 0x0000607F, + 7591: 0x000060A3, + 7592: 0x00006089, + 7593: 0x000060A0, + 7594: 0x000060A8, + 7595: 0x000060CB, + 7596: 0x000060B4, + 7597: 0x000060E6, + 7598: 0x000060BD, + 7599: 0x000060C5, + 7600: 0x000060BB, + 7601: 0x000060B5, + 7602: 0x000060DC, + 7603: 0x000060BC, + 7604: 0x000060D8, + 7605: 0x000060D5, + 7606: 0x000060C6, + 7607: 0x000060DF, + 7608: 0x000060B8, + 7609: 0x000060DA, + 7610: 0x000060C7, + 7611: 0x0000621A, + 7612: 0x0000621B, + 7613: 0x00006248, + 7614: 0x000063A0, + 7615: 0x000063A7, + 7616: 0x00006372, + 7617: 0x00006396, + 7618: 0x000063A2, + 7619: 0x000063A5, + 7620: 0x00006377, + 7621: 0x00006367, + 7622: 0x00006398, + 7623: 0x000063AA, + 7624: 0x00006371, + 7625: 0x000063A9, + 7626: 0x00006389, + 7627: 0x00006383, + 7628: 0x0000639B, + 7629: 0x0000636B, + 7630: 0x000063A8, + 7631: 0x00006384, + 7632: 0x00006388, + 7633: 0x00006399, + 7634: 0x000063A1, + 7635: 0x000063AC, + 7636: 0x00006392, + 7637: 0x0000638F, + 7638: 0x00006380, + 7639: 0x0000637B, + 7640: 0x00006369, + 7641: 0x00006368, + 7642: 0x0000637A, + 7643: 0x0000655D, + 7644: 0x00006556, + 7645: 0x00006551, + 7646: 0x00006559, + 7647: 0x00006557, + 7648: 0x0000555F, + 7649: 0x0000654F, + 7650: 0x00006558, + 7651: 0x00006555, + 7652: 0x00006554, + 7653: 0x0000659C, + 7654: 0x0000659B, + 7655: 0x000065AC, + 7656: 0x000065CF, + 7657: 0x000065CB, + 7658: 0x000065CC, + 7659: 0x000065CE, + 7660: 0x0000665D, + 7661: 0x0000665A, + 7662: 0x00006664, + 7663: 0x00006668, + 7664: 0x00006666, + 7665: 0x0000665E, + 7666: 0x000066F9, + 7667: 0x000052D7, + 7668: 0x0000671B, + 7669: 0x00006881, + 7670: 0x000068AF, + 7671: 0x000068A2, + 7672: 0x00006893, + 7673: 0x000068B5, + 7674: 0x0000687F, + 7675: 0x00006876, + 7676: 0x000068B1, + 7677: 0x000068A7, + 7678: 0x00006897, + 7679: 0x000068B0, + 7680: 0x00006883, + 7681: 0x000068C4, + 7682: 0x000068AD, + 7683: 0x00006886, + 7684: 0x00006885, + 7685: 0x00006894, + 7686: 0x0000689D, + 7687: 0x000068A8, + 7688: 0x0000689F, + 7689: 0x000068A1, + 7690: 0x00006882, + 7691: 0x00006B32, + 7692: 0x00006BBA, + 7693: 0x00006BEB, + 7694: 0x00006BEC, + 7695: 0x00006C2B, + 7696: 0x00006D8E, + 7697: 0x00006DBC, + 7698: 0x00006DF3, + 7699: 0x00006DD9, + 7700: 0x00006DB2, + 7701: 0x00006DE1, + 7702: 0x00006DCC, + 7703: 0x00006DE4, + 7704: 0x00006DFB, + 7705: 0x00006DFA, + 7706: 0x00006E05, + 7707: 0x00006DC7, + 7708: 0x00006DCB, + 7709: 0x00006DAF, + 7710: 0x00006DD1, + 7711: 0x00006DAE, + 7712: 0x00006DDE, + 7713: 0x00006DF9, + 7714: 0x00006DB8, + 7715: 0x00006DF7, + 7716: 0x00006DF5, + 7717: 0x00006DC5, + 7718: 0x00006DD2, + 7719: 0x00006E1A, + 7720: 0x00006DB5, + 7721: 0x00006DDA, + 7722: 0x00006DEB, + 7723: 0x00006DD8, + 7724: 0x00006DEA, + 7725: 0x00006DF1, + 7726: 0x00006DEE, + 7727: 0x00006DE8, + 7728: 0x00006DC6, + 7729: 0x00006DC4, + 7730: 0x00006DAA, + 7731: 0x00006DEC, + 7732: 0x00006DBF, + 7733: 0x00006DE6, + 7734: 0x000070F9, + 7735: 0x00007109, + 7736: 0x0000710A, + 7737: 0x000070FD, + 7738: 0x000070EF, + 7739: 0x0000723D, + 7740: 0x0000727D, + 7741: 0x00007281, + 7742: 0x0000731C, + 7743: 0x0000731B, + 7744: 0x00007316, + 7745: 0x00007313, + 7746: 0x00007319, + 7747: 0x00007387, + 7748: 0x00007405, + 7749: 0x0000740A, + 7750: 0x00007403, + 7751: 0x00007406, + 7752: 0x000073FE, + 7753: 0x0000740D, + 7754: 0x000074E0, + 7755: 0x000074F6, + 7756: 0x000074F7, + 7757: 0x0000751C, + 7758: 0x00007522, + 7759: 0x00007565, + 7760: 0x00007566, + 7761: 0x00007562, + 7762: 0x00007570, + 7763: 0x0000758F, + 7764: 0x000075D4, + 7765: 0x000075D5, + 7766: 0x000075B5, + 7767: 0x000075CA, + 7768: 0x000075CD, + 7769: 0x0000768E, + 7770: 0x000076D4, + 7771: 0x000076D2, + 7772: 0x000076DB, + 7773: 0x00007737, + 7774: 0x0000773E, + 7775: 0x0000773C, + 7776: 0x00007736, + 7777: 0x00007738, + 7778: 0x0000773A, + 7779: 0x0000786B, + 7780: 0x00007843, + 7781: 0x0000784E, + 7782: 0x00007965, + 7783: 0x00007968, + 7784: 0x0000796D, + 7785: 0x000079FB, + 7786: 0x00007A92, + 7787: 0x00007A95, + 7788: 0x00007B20, + 7789: 0x00007B28, + 7790: 0x00007B1B, + 7791: 0x00007B2C, + 7792: 0x00007B26, + 7793: 0x00007B19, + 7794: 0x00007B1E, + 7795: 0x00007B2E, + 7796: 0x00007C92, + 7797: 0x00007C97, + 7798: 0x00007C95, + 7799: 0x00007D46, + 7800: 0x00007D43, + 7801: 0x00007D71, + 7802: 0x00007D2E, + 7803: 0x00007D39, + 7804: 0x00007D3C, + 7805: 0x00007D40, + 7806: 0x00007D30, + 7807: 0x00007D33, + 7808: 0x00007D44, + 7809: 0x00007D2F, + 7810: 0x00007D42, + 7811: 0x00007D32, + 7812: 0x00007D31, + 7813: 0x00007F3D, + 7814: 0x00007F9E, + 7815: 0x00007F9A, + 7816: 0x00007FCC, + 7817: 0x00007FCE, + 7818: 0x00007FD2, + 7819: 0x0000801C, + 7820: 0x0000804A, + 7821: 0x00008046, + 7822: 0x0000812F, + 7823: 0x00008116, + 7824: 0x00008123, + 7825: 0x0000812B, + 7826: 0x00008129, + 7827: 0x00008130, + 7828: 0x00008124, + 7829: 0x00008202, + 7830: 0x00008235, + 7831: 0x00008237, + 7832: 0x00008236, + 7833: 0x00008239, + 7834: 0x0000838E, + 7835: 0x0000839E, + 7836: 0x00008398, + 7837: 0x00008378, + 7838: 0x000083A2, + 7839: 0x00008396, + 7840: 0x000083BD, + 7841: 0x000083AB, + 7842: 0x00008392, + 7843: 0x0000838A, + 7844: 0x00008393, + 7845: 0x00008389, + 7846: 0x000083A0, + 7847: 0x00008377, + 7848: 0x0000837B, + 7849: 0x0000837C, + 7850: 0x00008386, + 7851: 0x000083A7, + 7852: 0x00008655, + 7853: 0x00005F6A, + 7854: 0x000086C7, + 7855: 0x000086C0, + 7856: 0x000086B6, + 7857: 0x000086C4, + 7858: 0x000086B5, + 7859: 0x000086C6, + 7860: 0x000086CB, + 7861: 0x000086B1, + 7862: 0x000086AF, + 7863: 0x000086C9, + 7864: 0x00008853, + 7865: 0x0000889E, + 7866: 0x00008888, + 7867: 0x000088AB, + 7868: 0x00008892, + 7869: 0x00008896, + 7870: 0x0000888D, + 7871: 0x0000888B, + 7872: 0x00008993, + 7873: 0x0000898F, + 7874: 0x00008A2A, + 7875: 0x00008A1D, + 7876: 0x00008A23, + 7877: 0x00008A25, + 7878: 0x00008A31, + 7879: 0x00008A2D, + 7880: 0x00008A1F, + 7881: 0x00008A1B, + 7882: 0x00008A22, + 7883: 0x00008C49, + 7884: 0x00008C5A, + 7885: 0x00008CA9, + 7886: 0x00008CAC, + 7887: 0x00008CAB, + 7888: 0x00008CA8, + 7889: 0x00008CAA, + 7890: 0x00008CA7, + 7891: 0x00008D67, + 7892: 0x00008D66, + 7893: 0x00008DBE, + 7894: 0x00008DBA, + 7895: 0x00008EDB, + 7896: 0x00008EDF, + 7897: 0x00009019, + 7898: 0x0000900D, + 7899: 0x0000901A, + 7900: 0x00009017, + 7901: 0x00009023, + 7902: 0x0000901F, + 7903: 0x0000901D, + 7904: 0x00009010, + 7905: 0x00009015, + 7906: 0x0000901E, + 7907: 0x00009020, + 7908: 0x0000900F, + 7909: 0x00009022, + 7910: 0x00009016, + 7911: 0x0000901B, + 7912: 0x00009014, + 7913: 0x000090E8, + 7914: 0x000090ED, + 7915: 0x000090FD, + 7916: 0x00009157, + 7917: 0x000091CE, + 7918: 0x000091F5, + 7919: 0x000091E6, + 7920: 0x000091E3, + 7921: 0x000091E7, + 7922: 0x000091ED, + 7923: 0x000091E9, + 7924: 0x00009589, + 7925: 0x0000966A, + 7926: 0x00009675, + 7927: 0x00009673, + 7928: 0x00009678, + 7929: 0x00009670, + 7930: 0x00009674, + 7931: 0x00009676, + 7932: 0x00009677, + 7933: 0x0000966C, + 7934: 0x000096C0, + 7935: 0x000096EA, + 7936: 0x000096E9, + 7937: 0x00007AE0, + 7938: 0x00007ADF, + 7939: 0x00009802, + 7940: 0x00009803, + 7941: 0x00009B5A, + 7942: 0x00009CE5, + 7943: 0x00009E75, + 7944: 0x00009E7F, + 7945: 0x00009EA5, + 7946: 0x00009EBB, + 7947: 0x000050A2, + 7948: 0x0000508D, + 7949: 0x00005085, + 7950: 0x00005099, + 7951: 0x00005091, + 7952: 0x00005080, + 7953: 0x00005096, + 7954: 0x00005098, + 7955: 0x0000509A, + 7956: 0x00006700, + 7957: 0x000051F1, + 7958: 0x00005272, + 7959: 0x00005274, + 7960: 0x00005275, + 7961: 0x00005269, + 7962: 0x000052DE, + 7963: 0x000052DD, + 7964: 0x000052DB, + 7965: 0x0000535A, + 7966: 0x000053A5, + 7967: 0x0000557B, + 7968: 0x00005580, + 7969: 0x000055A7, + 7970: 0x0000557C, + 7971: 0x0000558A, + 7972: 0x0000559D, + 7973: 0x00005598, + 7974: 0x00005582, + 7975: 0x0000559C, + 7976: 0x000055AA, + 7977: 0x00005594, + 7978: 0x00005587, + 7979: 0x0000558B, + 7980: 0x00005583, + 7981: 0x000055B3, + 7982: 0x000055AE, + 7983: 0x0000559F, + 7984: 0x0000553E, + 7985: 0x000055B2, + 7986: 0x0000559A, + 7987: 0x000055BB, + 7988: 0x000055AC, + 7989: 0x000055B1, + 7990: 0x0000557E, + 7991: 0x00005589, + 7992: 0x000055AB, + 7993: 0x00005599, + 7994: 0x0000570D, + 7995: 0x0000582F, + 7996: 0x0000582A, + 7997: 0x00005834, + 7998: 0x00005824, + 7999: 0x00005830, + 8000: 0x00005831, + 8001: 0x00005821, + 8002: 0x0000581D, + 8003: 0x00005820, + 8004: 0x000058F9, + 8005: 0x000058FA, + 8006: 0x00005960, + 8007: 0x00005A77, + 8008: 0x00005A9A, + 8009: 0x00005A7F, + 8010: 0x00005A92, + 8011: 0x00005A9B, + 8012: 0x00005AA7, + 8013: 0x00005B73, + 8014: 0x00005B71, + 8015: 0x00005BD2, + 8016: 0x00005BCC, + 8017: 0x00005BD3, + 8018: 0x00005BD0, + 8019: 0x00005C0A, + 8020: 0x00005C0B, + 8021: 0x00005C31, + 8022: 0x00005D4C, + 8023: 0x00005D50, + 8024: 0x00005D34, + 8025: 0x00005D47, + 8026: 0x00005DFD, + 8027: 0x00005E45, + 8028: 0x00005E3D, + 8029: 0x00005E40, + 8030: 0x00005E43, + 8031: 0x00005E7E, + 8032: 0x00005ECA, + 8033: 0x00005EC1, + 8034: 0x00005EC2, + 8035: 0x00005EC4, + 8036: 0x00005F3C, + 8037: 0x00005F6D, + 8038: 0x00005FA9, + 8039: 0x00005FAA, + 8040: 0x00005FA8, + 8041: 0x000060D1, + 8042: 0x000060E1, + 8043: 0x000060B2, + 8044: 0x000060B6, + 8045: 0x000060E0, + 8046: 0x0000611C, + 8047: 0x00006123, + 8048: 0x000060FA, + 8049: 0x00006115, + 8050: 0x000060F0, + 8051: 0x000060FB, + 8052: 0x000060F4, + 8053: 0x00006168, + 8054: 0x000060F1, + 8055: 0x0000610E, + 8056: 0x000060F6, + 8057: 0x00006109, + 8058: 0x00006100, + 8059: 0x00006112, + 8060: 0x0000621F, + 8061: 0x00006249, + 8062: 0x000063A3, + 8063: 0x0000638C, + 8064: 0x000063CF, + 8065: 0x000063C0, + 8066: 0x000063E9, + 8067: 0x000063C9, + 8068: 0x000063C6, + 8069: 0x000063CD, + 8070: 0x000063D2, + 8071: 0x000063E3, + 8072: 0x000063D0, + 8073: 0x000063E1, + 8074: 0x000063D6, + 8075: 0x000063ED, + 8076: 0x000063EE, + 8077: 0x00006376, + 8078: 0x000063F4, + 8079: 0x000063EA, + 8080: 0x000063DB, + 8081: 0x00006452, + 8082: 0x000063DA, + 8083: 0x000063F9, + 8084: 0x0000655E, + 8085: 0x00006566, + 8086: 0x00006562, + 8087: 0x00006563, + 8088: 0x00006591, + 8089: 0x00006590, + 8090: 0x000065AF, + 8091: 0x0000666E, + 8092: 0x00006670, + 8093: 0x00006674, + 8094: 0x00006676, + 8095: 0x0000666F, + 8096: 0x00006691, + 8097: 0x0000667A, + 8098: 0x0000667E, + 8099: 0x00006677, + 8100: 0x000066FE, + 8101: 0x000066FF, + 8102: 0x0000671F, + 8103: 0x0000671D, + 8104: 0x000068FA, + 8105: 0x000068D5, + 8106: 0x000068E0, + 8107: 0x000068D8, + 8108: 0x000068D7, + 8109: 0x00006905, + 8110: 0x000068DF, + 8111: 0x000068F5, + 8112: 0x000068EE, + 8113: 0x000068E7, + 8114: 0x000068F9, + 8115: 0x000068D2, + 8116: 0x000068F2, + 8117: 0x000068E3, + 8118: 0x000068CB, + 8119: 0x000068CD, + 8120: 0x0000690D, + 8121: 0x00006912, + 8122: 0x0000690E, + 8123: 0x000068C9, + 8124: 0x000068DA, + 8125: 0x0000696E, + 8126: 0x000068FB, + 8127: 0x00006B3E, + 8128: 0x00006B3A, + 8129: 0x00006B3D, + 8130: 0x00006B98, + 8131: 0x00006B96, + 8132: 0x00006BBC, + 8133: 0x00006BEF, + 8134: 0x00006C2E, + 8135: 0x00006C2F, + 8136: 0x00006C2C, + 8137: 0x00006E2F, + 8138: 0x00006E38, + 8139: 0x00006E54, + 8140: 0x00006E21, + 8141: 0x00006E32, + 8142: 0x00006E67, + 8143: 0x00006E4A, + 8144: 0x00006E20, + 8145: 0x00006E25, + 8146: 0x00006E23, + 8147: 0x00006E1B, + 8148: 0x00006E5B, + 8149: 0x00006E58, + 8150: 0x00006E24, + 8151: 0x00006E56, + 8152: 0x00006E6E, + 8153: 0x00006E2D, + 8154: 0x00006E26, + 8155: 0x00006E6F, + 8156: 0x00006E34, + 8157: 0x00006E4D, + 8158: 0x00006E3A, + 8159: 0x00006E2C, + 8160: 0x00006E43, + 8161: 0x00006E1D, + 8162: 0x00006E3E, + 8163: 0x00006ECB, + 8164: 0x00006E89, + 8165: 0x00006E19, + 8166: 0x00006E4E, + 8167: 0x00006E63, + 8168: 0x00006E44, + 8169: 0x00006E72, + 8170: 0x00006E69, + 8171: 0x00006E5F, + 8172: 0x00007119, + 8173: 0x0000711A, + 8174: 0x00007126, + 8175: 0x00007130, + 8176: 0x00007121, + 8177: 0x00007136, + 8178: 0x0000716E, + 8179: 0x0000711C, + 8180: 0x0000724C, + 8181: 0x00007284, + 8182: 0x00007280, + 8183: 0x00007336, + 8184: 0x00007325, + 8185: 0x00007334, + 8186: 0x00007329, + 8187: 0x0000743A, + 8188: 0x0000742A, + 8189: 0x00007433, + 8190: 0x00007422, + 8191: 0x00007425, + 8192: 0x00007435, + 8193: 0x00007436, + 8194: 0x00007434, + 8195: 0x0000742F, + 8196: 0x0000741B, + 8197: 0x00007426, + 8198: 0x00007428, + 8199: 0x00007525, + 8200: 0x00007526, + 8201: 0x0000756B, + 8202: 0x0000756A, + 8203: 0x000075E2, + 8204: 0x000075DB, + 8205: 0x000075E3, + 8206: 0x000075D9, + 8207: 0x000075D8, + 8208: 0x000075DE, + 8209: 0x000075E0, + 8210: 0x0000767B, + 8211: 0x0000767C, + 8212: 0x00007696, + 8213: 0x00007693, + 8214: 0x000076B4, + 8215: 0x000076DC, + 8216: 0x0000774F, + 8217: 0x000077ED, + 8218: 0x0000785D, + 8219: 0x0000786C, + 8220: 0x0000786F, + 8221: 0x00007A0D, + 8222: 0x00007A08, + 8223: 0x00007A0B, + 8224: 0x00007A05, + 8225: 0x00007A00, + 8226: 0x00007A98, + 8227: 0x00007A97, + 8228: 0x00007A96, + 8229: 0x00007AE5, + 8230: 0x00007AE3, + 8231: 0x00007B49, + 8232: 0x00007B56, + 8233: 0x00007B46, + 8234: 0x00007B50, + 8235: 0x00007B52, + 8236: 0x00007B54, + 8237: 0x00007B4D, + 8238: 0x00007B4B, + 8239: 0x00007B4F, + 8240: 0x00007B51, + 8241: 0x00007C9F, + 8242: 0x00007CA5, + 8243: 0x00007D5E, + 8244: 0x00007D50, + 8245: 0x00007D68, + 8246: 0x00007D55, + 8247: 0x00007D2B, + 8248: 0x00007D6E, + 8249: 0x00007D72, + 8250: 0x00007D61, + 8251: 0x00007D66, + 8252: 0x00007D62, + 8253: 0x00007D70, + 8254: 0x00007D73, + 8255: 0x00005584, + 8256: 0x00007FD4, + 8257: 0x00007FD5, + 8258: 0x0000800B, + 8259: 0x00008052, + 8260: 0x00008085, + 8261: 0x00008155, + 8262: 0x00008154, + 8263: 0x0000814B, + 8264: 0x00008151, + 8265: 0x0000814E, + 8266: 0x00008139, + 8267: 0x00008146, + 8268: 0x0000813E, + 8269: 0x0000814C, + 8270: 0x00008153, + 8271: 0x00008174, + 8272: 0x00008212, + 8273: 0x0000821C, + 8274: 0x000083E9, + 8275: 0x00008403, + 8276: 0x000083F8, + 8277: 0x0000840D, + 8278: 0x000083E0, + 8279: 0x000083C5, + 8280: 0x0000840B, + 8281: 0x000083C1, + 8282: 0x000083EF, + 8283: 0x000083F1, + 8284: 0x000083F4, + 8285: 0x00008457, + 8286: 0x0000840A, + 8287: 0x000083F0, + 8288: 0x0000840C, + 8289: 0x000083CC, + 8290: 0x000083FD, + 8291: 0x000083F2, + 8292: 0x000083CA, + 8293: 0x00008438, + 8294: 0x0000840E, + 8295: 0x00008404, + 8296: 0x000083DC, + 8297: 0x00008407, + 8298: 0x000083D4, + 8299: 0x000083DF, + 8300: 0x0000865B, + 8301: 0x000086DF, + 8302: 0x000086D9, + 8303: 0x000086ED, + 8304: 0x000086D4, + 8305: 0x000086DB, + 8306: 0x000086E4, + 8307: 0x000086D0, + 8308: 0x000086DE, + 8309: 0x00008857, + 8310: 0x000088C1, + 8311: 0x000088C2, + 8312: 0x000088B1, + 8313: 0x00008983, + 8314: 0x00008996, + 8315: 0x00008A3B, + 8316: 0x00008A60, + 8317: 0x00008A55, + 8318: 0x00008A5E, + 8319: 0x00008A3C, + 8320: 0x00008A41, + 8321: 0x00008A54, + 8322: 0x00008A5B, + 8323: 0x00008A50, + 8324: 0x00008A46, + 8325: 0x00008A34, + 8326: 0x00008A3A, + 8327: 0x00008A36, + 8328: 0x00008A56, + 8329: 0x00008C61, + 8330: 0x00008C82, + 8331: 0x00008CAF, + 8332: 0x00008CBC, + 8333: 0x00008CB3, + 8334: 0x00008CBD, + 8335: 0x00008CC1, + 8336: 0x00008CBB, + 8337: 0x00008CC0, + 8338: 0x00008CB4, + 8339: 0x00008CB7, + 8340: 0x00008CB6, + 8341: 0x00008CBF, + 8342: 0x00008CB8, + 8343: 0x00008D8A, + 8344: 0x00008D85, + 8345: 0x00008D81, + 8346: 0x00008DCE, + 8347: 0x00008DDD, + 8348: 0x00008DCB, + 8349: 0x00008DDA, + 8350: 0x00008DD1, + 8351: 0x00008DCC, + 8352: 0x00008DDB, + 8353: 0x00008DC6, + 8354: 0x00008EFB, + 8355: 0x00008EF8, + 8356: 0x00008EFC, + 8357: 0x00008F9C, + 8358: 0x0000902E, + 8359: 0x00009035, + 8360: 0x00009031, + 8361: 0x00009038, + 8362: 0x00009032, + 8363: 0x00009036, + 8364: 0x00009102, + 8365: 0x000090F5, + 8366: 0x00009109, + 8367: 0x000090FE, + 8368: 0x00009163, + 8369: 0x00009165, + 8370: 0x000091CF, + 8371: 0x00009214, + 8372: 0x00009215, + 8373: 0x00009223, + 8374: 0x00009209, + 8375: 0x0000921E, + 8376: 0x0000920D, + 8377: 0x00009210, + 8378: 0x00009207, + 8379: 0x00009211, + 8380: 0x00009594, + 8381: 0x0000958F, + 8382: 0x0000958B, + 8383: 0x00009591, + 8384: 0x00009593, + 8385: 0x00009592, + 8386: 0x0000958E, + 8387: 0x0000968A, + 8388: 0x0000968E, + 8389: 0x0000968B, + 8390: 0x0000967D, + 8391: 0x00009685, + 8392: 0x00009686, + 8393: 0x0000968D, + 8394: 0x00009672, + 8395: 0x00009684, + 8396: 0x000096C1, + 8397: 0x000096C5, + 8398: 0x000096C4, + 8399: 0x000096C6, + 8400: 0x000096C7, + 8401: 0x000096EF, + 8402: 0x000096F2, + 8403: 0x000097CC, + 8404: 0x00009805, + 8405: 0x00009806, + 8406: 0x00009808, + 8407: 0x000098E7, + 8408: 0x000098EA, + 8409: 0x000098EF, + 8410: 0x000098E9, + 8411: 0x000098F2, + 8412: 0x000098ED, + 8413: 0x000099AE, + 8414: 0x000099AD, + 8415: 0x00009EC3, + 8416: 0x00009ECD, + 8417: 0x00009ED1, + 8418: 0x00004E82, + 8419: 0x000050AD, + 8420: 0x000050B5, + 8421: 0x000050B2, + 8422: 0x000050B3, + 8423: 0x000050C5, + 8424: 0x000050BE, + 8425: 0x000050AC, + 8426: 0x000050B7, + 8427: 0x000050BB, + 8428: 0x000050AF, + 8429: 0x000050C7, + 8430: 0x0000527F, + 8431: 0x00005277, + 8432: 0x0000527D, + 8433: 0x000052DF, + 8434: 0x000052E6, + 8435: 0x000052E4, + 8436: 0x000052E2, + 8437: 0x000052E3, + 8438: 0x0000532F, + 8439: 0x000055DF, + 8440: 0x000055E8, + 8441: 0x000055D3, + 8442: 0x000055E6, + 8443: 0x000055CE, + 8444: 0x000055DC, + 8445: 0x000055C7, + 8446: 0x000055D1, + 8447: 0x000055E3, + 8448: 0x000055E4, + 8449: 0x000055EF, + 8450: 0x000055DA, + 8451: 0x000055E1, + 8452: 0x000055C5, + 8453: 0x000055C6, + 8454: 0x000055E5, + 8455: 0x000055C9, + 8456: 0x00005712, + 8457: 0x00005713, + 8458: 0x0000585E, + 8459: 0x00005851, + 8460: 0x00005858, + 8461: 0x00005857, + 8462: 0x0000585A, + 8463: 0x00005854, + 8464: 0x0000586B, + 8465: 0x0000584C, + 8466: 0x0000586D, + 8467: 0x0000584A, + 8468: 0x00005862, + 8469: 0x00005852, + 8470: 0x0000584B, + 8471: 0x00005967, + 8472: 0x00005AC1, + 8473: 0x00005AC9, + 8474: 0x00005ACC, + 8475: 0x00005ABE, + 8476: 0x00005ABD, + 8477: 0x00005ABC, + 8478: 0x00005AB3, + 8479: 0x00005AC2, + 8480: 0x00005AB2, + 8481: 0x00005D69, + 8482: 0x00005D6F, + 8483: 0x00005E4C, + 8484: 0x00005E79, + 8485: 0x00005EC9, + 8486: 0x00005EC8, + 8487: 0x00005F12, + 8488: 0x00005F59, + 8489: 0x00005FAC, + 8490: 0x00005FAE, + 8491: 0x0000611A, + 8492: 0x0000610F, + 8493: 0x00006148, + 8494: 0x0000611F, + 8495: 0x000060F3, + 8496: 0x0000611B, + 8497: 0x000060F9, + 8498: 0x00006101, + 8499: 0x00006108, + 8500: 0x0000614E, + 8501: 0x0000614C, + 8502: 0x00006144, + 8503: 0x0000614D, + 8504: 0x0000613E, + 8505: 0x00006134, + 8506: 0x00006127, + 8507: 0x0000610D, + 8508: 0x00006106, + 8509: 0x00006137, + 8510: 0x00006221, + 8511: 0x00006222, + 8512: 0x00006413, + 8513: 0x0000643E, + 8514: 0x0000641E, + 8515: 0x0000642A, + 8516: 0x0000642D, + 8517: 0x0000643D, + 8518: 0x0000642C, + 8519: 0x0000640F, + 8520: 0x0000641C, + 8521: 0x00006414, + 8522: 0x0000640D, + 8523: 0x00006436, + 8524: 0x00006416, + 8525: 0x00006417, + 8526: 0x00006406, + 8527: 0x0000656C, + 8528: 0x0000659F, + 8529: 0x000065B0, + 8530: 0x00006697, + 8531: 0x00006689, + 8532: 0x00006687, + 8533: 0x00006688, + 8534: 0x00006696, + 8535: 0x00006684, + 8536: 0x00006698, + 8537: 0x0000668D, + 8538: 0x00006703, + 8539: 0x00006994, + 8540: 0x0000696D, + 8541: 0x0000695A, + 8542: 0x00006977, + 8543: 0x00006960, + 8544: 0x00006954, + 8545: 0x00006975, + 8546: 0x00006930, + 8547: 0x00006982, + 8548: 0x0000694A, + 8549: 0x00006968, + 8550: 0x0000696B, + 8551: 0x0000695E, + 8552: 0x00006953, + 8553: 0x00006979, + 8554: 0x00006986, + 8555: 0x0000695D, + 8556: 0x00006963, + 8557: 0x0000695B, + 8558: 0x00006B47, + 8559: 0x00006B72, + 8560: 0x00006BC0, + 8561: 0x00006BBF, + 8562: 0x00006BD3, + 8563: 0x00006BFD, + 8564: 0x00006EA2, + 8565: 0x00006EAF, + 8566: 0x00006ED3, + 8567: 0x00006EB6, + 8568: 0x00006EC2, + 8569: 0x00006E90, + 8570: 0x00006E9D, + 8571: 0x00006EC7, + 8572: 0x00006EC5, + 8573: 0x00006EA5, + 8574: 0x00006E98, + 8575: 0x00006EBC, + 8576: 0x00006EBA, + 8577: 0x00006EAB, + 8578: 0x00006ED1, + 8579: 0x00006E96, + 8580: 0x00006E9C, + 8581: 0x00006EC4, + 8582: 0x00006ED4, + 8583: 0x00006EAA, + 8584: 0x00006EA7, + 8585: 0x00006EB4, + 8586: 0x0000714E, + 8587: 0x00007159, + 8588: 0x00007169, + 8589: 0x00007164, + 8590: 0x00007149, + 8591: 0x00007167, + 8592: 0x0000715C, + 8593: 0x0000716C, + 8594: 0x00007166, + 8595: 0x0000714C, + 8596: 0x00007165, + 8597: 0x0000715E, + 8598: 0x00007146, + 8599: 0x00007168, + 8600: 0x00007156, + 8601: 0x0000723A, + 8602: 0x00007252, + 8603: 0x00007337, + 8604: 0x00007345, + 8605: 0x0000733F, + 8606: 0x0000733E, + 8607: 0x0000746F, + 8608: 0x0000745A, + 8609: 0x00007455, + 8610: 0x0000745F, + 8611: 0x0000745E, + 8612: 0x00007441, + 8613: 0x0000743F, + 8614: 0x00007459, + 8615: 0x0000745B, + 8616: 0x0000745C, + 8617: 0x00007576, + 8618: 0x00007578, + 8619: 0x00007600, + 8620: 0x000075F0, + 8621: 0x00007601, + 8622: 0x000075F2, + 8623: 0x000075F1, + 8624: 0x000075FA, + 8625: 0x000075FF, + 8626: 0x000075F4, + 8627: 0x000075F3, + 8628: 0x000076DE, + 8629: 0x000076DF, + 8630: 0x0000775B, + 8631: 0x0000776B, + 8632: 0x00007766, + 8633: 0x0000775E, + 8634: 0x00007763, + 8635: 0x00007779, + 8636: 0x0000776A, + 8637: 0x0000776C, + 8638: 0x0000775C, + 8639: 0x00007765, + 8640: 0x00007768, + 8641: 0x00007762, + 8642: 0x000077EE, + 8643: 0x0000788E, + 8644: 0x000078B0, + 8645: 0x00007897, + 8646: 0x00007898, + 8647: 0x0000788C, + 8648: 0x00007889, + 8649: 0x0000787C, + 8650: 0x00007891, + 8651: 0x00007893, + 8652: 0x0000787F, + 8653: 0x0000797A, + 8654: 0x0000797F, + 8655: 0x00007981, + 8656: 0x0000842C, + 8657: 0x000079BD, + 8658: 0x00007A1C, + 8659: 0x00007A1A, + 8660: 0x00007A20, + 8661: 0x00007A14, + 8662: 0x00007A1F, + 8663: 0x00007A1E, + 8664: 0x00007A9F, + 8665: 0x00007AA0, + 8666: 0x00007B77, + 8667: 0x00007BC0, + 8668: 0x00007B60, + 8669: 0x00007B6E, + 8670: 0x00007B67, + 8671: 0x00007CB1, + 8672: 0x00007CB3, + 8673: 0x00007CB5, + 8674: 0x00007D93, + 8675: 0x00007D79, + 8676: 0x00007D91, + 8677: 0x00007D81, + 8678: 0x00007D8F, + 8679: 0x00007D5B, + 8680: 0x00007F6E, + 8681: 0x00007F69, + 8682: 0x00007F6A, + 8683: 0x00007F72, + 8684: 0x00007FA9, + 8685: 0x00007FA8, + 8686: 0x00007FA4, + 8687: 0x00008056, + 8688: 0x00008058, + 8689: 0x00008086, + 8690: 0x00008084, + 8691: 0x00008171, + 8692: 0x00008170, + 8693: 0x00008178, + 8694: 0x00008165, + 8695: 0x0000816E, + 8696: 0x00008173, + 8697: 0x0000816B, + 8698: 0x00008179, + 8699: 0x0000817A, + 8700: 0x00008166, + 8701: 0x00008205, + 8702: 0x00008247, + 8703: 0x00008482, + 8704: 0x00008477, + 8705: 0x0000843D, + 8706: 0x00008431, + 8707: 0x00008475, + 8708: 0x00008466, + 8709: 0x0000846B, + 8710: 0x00008449, + 8711: 0x0000846C, + 8712: 0x0000845B, + 8713: 0x0000843C, + 8714: 0x00008435, + 8715: 0x00008461, + 8716: 0x00008463, + 8717: 0x00008469, + 8718: 0x0000846D, + 8719: 0x00008446, + 8720: 0x0000865E, + 8721: 0x0000865C, + 8722: 0x0000865F, + 8723: 0x000086F9, + 8724: 0x00008713, + 8725: 0x00008708, + 8726: 0x00008707, + 8727: 0x00008700, + 8728: 0x000086FE, + 8729: 0x000086FB, + 8730: 0x00008702, + 8731: 0x00008703, + 8732: 0x00008706, + 8733: 0x0000870A, + 8734: 0x00008859, + 8735: 0x000088DF, + 8736: 0x000088D4, + 8737: 0x000088D9, + 8738: 0x000088DC, + 8739: 0x000088D8, + 8740: 0x000088DD, + 8741: 0x000088E1, + 8742: 0x000088CA, + 8743: 0x000088D5, + 8744: 0x000088D2, + 8745: 0x0000899C, + 8746: 0x000089E3, + 8747: 0x00008A6B, + 8748: 0x00008A72, + 8749: 0x00008A73, + 8750: 0x00008A66, + 8751: 0x00008A69, + 8752: 0x00008A70, + 8753: 0x00008A87, + 8754: 0x00008A7C, + 8755: 0x00008A63, + 8756: 0x00008AA0, + 8757: 0x00008A71, + 8758: 0x00008A85, + 8759: 0x00008A6D, + 8760: 0x00008A62, + 8761: 0x00008A6E, + 8762: 0x00008A6C, + 8763: 0x00008A79, + 8764: 0x00008A7B, + 8765: 0x00008A3E, + 8766: 0x00008A68, + 8767: 0x00008C62, + 8768: 0x00008C8A, + 8769: 0x00008C89, + 8770: 0x00008CCA, + 8771: 0x00008CC7, + 8772: 0x00008CC8, + 8773: 0x00008CC4, + 8774: 0x00008CB2, + 8775: 0x00008CC3, + 8776: 0x00008CC2, + 8777: 0x00008CC5, + 8778: 0x00008DE1, + 8779: 0x00008DDF, + 8780: 0x00008DE8, + 8781: 0x00008DEF, + 8782: 0x00008DF3, + 8783: 0x00008DFA, + 8784: 0x00008DEA, + 8785: 0x00008DE4, + 8786: 0x00008DE6, + 8787: 0x00008EB2, + 8788: 0x00008F03, + 8789: 0x00008F09, + 8790: 0x00008EFE, + 8791: 0x00008F0A, + 8792: 0x00008F9F, + 8793: 0x00008FB2, + 8794: 0x0000904B, + 8795: 0x0000904A, + 8796: 0x00009053, + 8797: 0x00009042, + 8798: 0x00009054, + 8799: 0x0000903C, + 8800: 0x00009055, + 8801: 0x00009050, + 8802: 0x00009047, + 8803: 0x0000904F, + 8804: 0x0000904E, + 8805: 0x0000904D, + 8806: 0x00009051, + 8807: 0x0000903E, + 8808: 0x00009041, + 8809: 0x00009112, + 8810: 0x00009117, + 8811: 0x0000916C, + 8812: 0x0000916A, + 8813: 0x00009169, + 8814: 0x000091C9, + 8815: 0x00009237, + 8816: 0x00009257, + 8817: 0x00009238, + 8818: 0x0000923D, + 8819: 0x00009240, + 8820: 0x0000923E, + 8821: 0x0000925B, + 8822: 0x0000924B, + 8823: 0x00009264, + 8824: 0x00009251, + 8825: 0x00009234, + 8826: 0x00009249, + 8827: 0x0000924D, + 8828: 0x00009245, + 8829: 0x00009239, + 8830: 0x0000923F, + 8831: 0x0000925A, + 8832: 0x00009598, + 8833: 0x00009698, + 8834: 0x00009694, + 8835: 0x00009695, + 8836: 0x000096CD, + 8837: 0x000096CB, + 8838: 0x000096C9, + 8839: 0x000096CA, + 8840: 0x000096F7, + 8841: 0x000096FB, + 8842: 0x000096F9, + 8843: 0x000096F6, + 8844: 0x00009756, + 8845: 0x00009774, + 8846: 0x00009776, + 8847: 0x00009810, + 8848: 0x00009811, + 8849: 0x00009813, + 8850: 0x0000980A, + 8851: 0x00009812, + 8852: 0x0000980C, + 8853: 0x000098FC, + 8854: 0x000098F4, + 8855: 0x000098FD, + 8856: 0x000098FE, + 8857: 0x000099B3, + 8858: 0x000099B1, + 8859: 0x000099B4, + 8860: 0x00009AE1, + 8861: 0x00009CE9, + 8862: 0x00009E82, + 8863: 0x00009F0E, + 8864: 0x00009F13, + 8865: 0x00009F20, + 8866: 0x000050E7, + 8867: 0x000050EE, + 8868: 0x000050E5, + 8869: 0x000050D6, + 8870: 0x000050ED, + 8871: 0x000050DA, + 8872: 0x000050D5, + 8873: 0x000050CF, + 8874: 0x000050D1, + 8875: 0x000050F1, + 8876: 0x000050CE, + 8877: 0x000050E9, + 8878: 0x00005162, + 8879: 0x000051F3, + 8880: 0x00005283, + 8881: 0x00005282, + 8882: 0x00005331, + 8883: 0x000053AD, + 8884: 0x000055FE, + 8885: 0x00005600, + 8886: 0x0000561B, + 8887: 0x00005617, + 8888: 0x000055FD, + 8889: 0x00005614, + 8890: 0x00005606, + 8891: 0x00005609, + 8892: 0x0000560D, + 8893: 0x0000560E, + 8894: 0x000055F7, + 8895: 0x00005616, + 8896: 0x0000561F, + 8897: 0x00005608, + 8898: 0x00005610, + 8899: 0x000055F6, + 8900: 0x00005718, + 8901: 0x00005716, + 8902: 0x00005875, + 8903: 0x0000587E, + 8904: 0x00005883, + 8905: 0x00005893, + 8906: 0x0000588A, + 8907: 0x00005879, + 8908: 0x00005885, + 8909: 0x0000587D, + 8910: 0x000058FD, + 8911: 0x00005925, + 8912: 0x00005922, + 8913: 0x00005924, + 8914: 0x0000596A, + 8915: 0x00005969, + 8916: 0x00005AE1, + 8917: 0x00005AE6, + 8918: 0x00005AE9, + 8919: 0x00005AD7, + 8920: 0x00005AD6, + 8921: 0x00005AD8, + 8922: 0x00005AE3, + 8923: 0x00005B75, + 8924: 0x00005BDE, + 8925: 0x00005BE7, + 8926: 0x00005BE1, + 8927: 0x00005BE5, + 8928: 0x00005BE6, + 8929: 0x00005BE8, + 8930: 0x00005BE2, + 8931: 0x00005BE4, + 8932: 0x00005BDF, + 8933: 0x00005C0D, + 8934: 0x00005C62, + 8935: 0x00005D84, + 8936: 0x00005D87, + 8937: 0x00005E5B, + 8938: 0x00005E63, + 8939: 0x00005E55, + 8940: 0x00005E57, + 8941: 0x00005E54, + 8942: 0x00005ED3, + 8943: 0x00005ED6, + 8944: 0x00005F0A, + 8945: 0x00005F46, + 8946: 0x00005F70, + 8947: 0x00005FB9, + 8948: 0x00006147, + 8949: 0x0000613F, + 8950: 0x0000614B, + 8951: 0x00006177, + 8952: 0x00006162, + 8953: 0x00006163, + 8954: 0x0000615F, + 8955: 0x0000615A, + 8956: 0x00006158, + 8957: 0x00006175, + 8958: 0x0000622A, + 8959: 0x00006487, + 8960: 0x00006458, + 8961: 0x00006454, + 8962: 0x000064A4, + 8963: 0x00006478, + 8964: 0x0000645F, + 8965: 0x0000647A, + 8966: 0x00006451, + 8967: 0x00006467, + 8968: 0x00006434, + 8969: 0x0000646D, + 8970: 0x0000647B, + 8971: 0x00006572, + 8972: 0x000065A1, + 8973: 0x000065D7, + 8974: 0x000065D6, + 8975: 0x000066A2, + 8976: 0x000066A8, + 8977: 0x0000669D, + 8978: 0x0000699C, + 8979: 0x000069A8, + 8980: 0x00006995, + 8981: 0x000069C1, + 8982: 0x000069AE, + 8983: 0x000069D3, + 8984: 0x000069CB, + 8985: 0x0000699B, + 8986: 0x000069B7, + 8987: 0x000069BB, + 8988: 0x000069AB, + 8989: 0x000069B4, + 8990: 0x000069D0, + 8991: 0x000069CD, + 8992: 0x000069AD, + 8993: 0x000069CC, + 8994: 0x000069A6, + 8995: 0x000069C3, + 8996: 0x000069A3, + 8997: 0x00006B49, + 8998: 0x00006B4C, + 8999: 0x00006C33, + 9000: 0x00006F33, + 9001: 0x00006F14, + 9002: 0x00006EFE, + 9003: 0x00006F13, + 9004: 0x00006EF4, + 9005: 0x00006F29, + 9006: 0x00006F3E, + 9007: 0x00006F20, + 9008: 0x00006F2C, + 9009: 0x00006F0F, + 9010: 0x00006F02, + 9011: 0x00006F22, + 9012: 0x00006EFF, + 9013: 0x00006EEF, + 9014: 0x00006F06, + 9015: 0x00006F31, + 9016: 0x00006F38, + 9017: 0x00006F32, + 9018: 0x00006F23, + 9019: 0x00006F15, + 9020: 0x00006F2B, + 9021: 0x00006F2F, + 9022: 0x00006F88, + 9023: 0x00006F2A, + 9024: 0x00006EEC, + 9025: 0x00006F01, + 9026: 0x00006EF2, + 9027: 0x00006ECC, + 9028: 0x00006EF7, + 9029: 0x00007194, + 9030: 0x00007199, + 9031: 0x0000717D, + 9032: 0x0000718A, + 9033: 0x00007184, + 9034: 0x00007192, + 9035: 0x0000723E, + 9036: 0x00007292, + 9037: 0x00007296, + 9038: 0x00007344, + 9039: 0x00007350, + 9040: 0x00007464, + 9041: 0x00007463, + 9042: 0x0000746A, + 9043: 0x00007470, + 9044: 0x0000746D, + 9045: 0x00007504, + 9046: 0x00007591, + 9047: 0x00007627, + 9048: 0x0000760D, + 9049: 0x0000760B, + 9050: 0x00007609, + 9051: 0x00007613, + 9052: 0x000076E1, + 9053: 0x000076E3, + 9054: 0x00007784, + 9055: 0x0000777D, + 9056: 0x0000777F, + 9057: 0x00007761, + 9058: 0x000078C1, + 9059: 0x0000789F, + 9060: 0x000078A7, + 9061: 0x000078B3, + 9062: 0x000078A9, + 9063: 0x000078A3, + 9064: 0x0000798E, + 9065: 0x0000798F, + 9066: 0x0000798D, + 9067: 0x00007A2E, + 9068: 0x00007A31, + 9069: 0x00007AAA, + 9070: 0x00007AA9, + 9071: 0x00007AED, + 9072: 0x00007AEF, + 9073: 0x00007BA1, + 9074: 0x00007B95, + 9075: 0x00007B8B, + 9076: 0x00007B75, + 9077: 0x00007B97, + 9078: 0x00007B9D, + 9079: 0x00007B94, + 9080: 0x00007B8F, + 9081: 0x00007BB8, + 9082: 0x00007B87, + 9083: 0x00007B84, + 9084: 0x00007CB9, + 9085: 0x00007CBD, + 9086: 0x00007CBE, + 9087: 0x00007DBB, + 9088: 0x00007DB0, + 9089: 0x00007D9C, + 9090: 0x00007DBD, + 9091: 0x00007DBE, + 9092: 0x00007DA0, + 9093: 0x00007DCA, + 9094: 0x00007DB4, + 9095: 0x00007DB2, + 9096: 0x00007DB1, + 9097: 0x00007DBA, + 9098: 0x00007DA2, + 9099: 0x00007DBF, + 9100: 0x00007DB5, + 9101: 0x00007DB8, + 9102: 0x00007DAD, + 9103: 0x00007DD2, + 9104: 0x00007DC7, + 9105: 0x00007DAC, + 9106: 0x00007F70, + 9107: 0x00007FE0, + 9108: 0x00007FE1, + 9109: 0x00007FDF, + 9110: 0x0000805E, + 9111: 0x0000805A, + 9112: 0x00008087, + 9113: 0x00008150, + 9114: 0x00008180, + 9115: 0x0000818F, + 9116: 0x00008188, + 9117: 0x0000818A, + 9118: 0x0000817F, + 9119: 0x00008182, + 9120: 0x000081E7, + 9121: 0x000081FA, + 9122: 0x00008207, + 9123: 0x00008214, + 9124: 0x0000821E, + 9125: 0x0000824B, + 9126: 0x000084C9, + 9127: 0x000084BF, + 9128: 0x000084C6, + 9129: 0x000084C4, + 9130: 0x00008499, + 9131: 0x0000849E, + 9132: 0x000084B2, + 9133: 0x0000849C, + 9134: 0x000084CB, + 9135: 0x000084B8, + 9136: 0x000084C0, + 9137: 0x000084D3, + 9138: 0x00008490, + 9139: 0x000084BC, + 9140: 0x000084D1, + 9141: 0x000084CA, + 9142: 0x0000873F, + 9143: 0x0000871C, + 9144: 0x0000873B, + 9145: 0x00008722, + 9146: 0x00008725, + 9147: 0x00008734, + 9148: 0x00008718, + 9149: 0x00008755, + 9150: 0x00008737, + 9151: 0x00008729, + 9152: 0x000088F3, + 9153: 0x00008902, + 9154: 0x000088F4, + 9155: 0x000088F9, + 9156: 0x000088F8, + 9157: 0x000088FD, + 9158: 0x000088E8, + 9159: 0x0000891A, + 9160: 0x000088EF, + 9161: 0x00008AA6, + 9162: 0x00008A8C, + 9163: 0x00008A9E, + 9164: 0x00008AA3, + 9165: 0x00008A8D, + 9166: 0x00008AA1, + 9167: 0x00008A93, + 9168: 0x00008AA4, + 9169: 0x00008AAA, + 9170: 0x00008AA5, + 9171: 0x00008AA8, + 9172: 0x00008A98, + 9173: 0x00008A91, + 9174: 0x00008A9A, + 9175: 0x00008AA7, + 9176: 0x00008C6A, + 9177: 0x00008C8D, + 9178: 0x00008C8C, + 9179: 0x00008CD3, + 9180: 0x00008CD1, + 9181: 0x00008CD2, + 9182: 0x00008D6B, + 9183: 0x00008D99, + 9184: 0x00008D95, + 9185: 0x00008DFC, + 9186: 0x00008F14, + 9187: 0x00008F12, + 9188: 0x00008F15, + 9189: 0x00008F13, + 9190: 0x00008FA3, + 9191: 0x00009060, + 9192: 0x00009058, + 9193: 0x0000905C, + 9194: 0x00009063, + 9195: 0x00009059, + 9196: 0x0000905E, + 9197: 0x00009062, + 9198: 0x0000905D, + 9199: 0x0000905B, + 9200: 0x00009119, + 9201: 0x00009118, + 9202: 0x0000911E, + 9203: 0x00009175, + 9204: 0x00009178, + 9205: 0x00009177, + 9206: 0x00009174, + 9207: 0x00009278, + 9208: 0x00009280, + 9209: 0x00009285, + 9210: 0x00009298, + 9211: 0x00009296, + 9212: 0x0000927B, + 9213: 0x00009293, + 9214: 0x0000929C, + 9215: 0x000092A8, + 9216: 0x0000927C, + 9217: 0x00009291, + 9218: 0x000095A1, + 9219: 0x000095A8, + 9220: 0x000095A9, + 9221: 0x000095A3, + 9222: 0x000095A5, + 9223: 0x000095A4, + 9224: 0x00009699, + 9225: 0x0000969C, + 9226: 0x0000969B, + 9227: 0x000096CC, + 9228: 0x000096D2, + 9229: 0x00009700, + 9230: 0x0000977C, + 9231: 0x00009785, + 9232: 0x000097F6, + 9233: 0x00009817, + 9234: 0x00009818, + 9235: 0x000098AF, + 9236: 0x000098B1, + 9237: 0x00009903, + 9238: 0x00009905, + 9239: 0x0000990C, + 9240: 0x00009909, + 9241: 0x000099C1, + 9242: 0x00009AAF, + 9243: 0x00009AB0, + 9244: 0x00009AE6, + 9245: 0x00009B41, + 9246: 0x00009B42, + 9247: 0x00009CF4, + 9248: 0x00009CF6, + 9249: 0x00009CF3, + 9250: 0x00009EBC, + 9251: 0x00009F3B, + 9252: 0x00009F4A, + 9253: 0x00005104, + 9254: 0x00005100, + 9255: 0x000050FB, + 9256: 0x000050F5, + 9257: 0x000050F9, + 9258: 0x00005102, + 9259: 0x00005108, + 9260: 0x00005109, + 9261: 0x00005105, + 9262: 0x000051DC, + 9263: 0x00005287, + 9264: 0x00005288, + 9265: 0x00005289, + 9266: 0x0000528D, + 9267: 0x0000528A, + 9268: 0x000052F0, + 9269: 0x000053B2, + 9270: 0x0000562E, + 9271: 0x0000563B, + 9272: 0x00005639, + 9273: 0x00005632, + 9274: 0x0000563F, + 9275: 0x00005634, + 9276: 0x00005629, + 9277: 0x00005653, + 9278: 0x0000564E, + 9279: 0x00005657, + 9280: 0x00005674, + 9281: 0x00005636, + 9282: 0x0000562F, + 9283: 0x00005630, + 9284: 0x00005880, + 9285: 0x0000589F, + 9286: 0x0000589E, + 9287: 0x000058B3, + 9288: 0x0000589C, + 9289: 0x000058AE, + 9290: 0x000058A9, + 9291: 0x000058A6, + 9292: 0x0000596D, + 9293: 0x00005B09, + 9294: 0x00005AFB, + 9295: 0x00005B0B, + 9296: 0x00005AF5, + 9297: 0x00005B0C, + 9298: 0x00005B08, + 9299: 0x00005BEE, + 9300: 0x00005BEC, + 9301: 0x00005BE9, + 9302: 0x00005BEB, + 9303: 0x00005C64, + 9304: 0x00005C65, + 9305: 0x00005D9D, + 9306: 0x00005D94, + 9307: 0x00005E62, + 9308: 0x00005E5F, + 9309: 0x00005E61, + 9310: 0x00005EE2, + 9311: 0x00005EDA, + 9312: 0x00005EDF, + 9313: 0x00005EDD, + 9314: 0x00005EE3, + 9315: 0x00005EE0, + 9316: 0x00005F48, + 9317: 0x00005F71, + 9318: 0x00005FB7, + 9319: 0x00005FB5, + 9320: 0x00006176, + 9321: 0x00006167, + 9322: 0x0000616E, + 9323: 0x0000615D, + 9324: 0x00006155, + 9325: 0x00006182, + 9326: 0x0000617C, + 9327: 0x00006170, + 9328: 0x0000616B, + 9329: 0x0000617E, + 9330: 0x000061A7, + 9331: 0x00006190, + 9332: 0x000061AB, + 9333: 0x0000618E, + 9334: 0x000061AC, + 9335: 0x0000619A, + 9336: 0x000061A4, + 9337: 0x00006194, + 9338: 0x000061AE, + 9339: 0x0000622E, + 9340: 0x00006469, + 9341: 0x0000646F, + 9342: 0x00006479, + 9343: 0x0000649E, + 9344: 0x000064B2, + 9345: 0x00006488, + 9346: 0x00006490, + 9347: 0x000064B0, + 9348: 0x000064A5, + 9349: 0x00006493, + 9350: 0x00006495, + 9351: 0x000064A9, + 9352: 0x00006492, + 9353: 0x000064AE, + 9354: 0x000064AD, + 9355: 0x000064AB, + 9356: 0x0000649A, + 9357: 0x000064AC, + 9358: 0x00006499, + 9359: 0x000064A2, + 9360: 0x000064B3, + 9361: 0x00006575, + 9362: 0x00006577, + 9363: 0x00006578, + 9364: 0x000066AE, + 9365: 0x000066AB, + 9366: 0x000066B4, + 9367: 0x000066B1, + 9368: 0x00006A23, + 9369: 0x00006A1F, + 9370: 0x000069E8, + 9371: 0x00006A01, + 9372: 0x00006A1E, + 9373: 0x00006A19, + 9374: 0x000069FD, + 9375: 0x00006A21, + 9376: 0x00006A13, + 9377: 0x00006A0A, + 9378: 0x000069F3, + 9379: 0x00006A02, + 9380: 0x00006A05, + 9381: 0x000069ED, + 9382: 0x00006A11, + 9383: 0x00006B50, + 9384: 0x00006B4E, + 9385: 0x00006BA4, + 9386: 0x00006BC5, + 9387: 0x00006BC6, + 9388: 0x00006F3F, + 9389: 0x00006F7C, + 9390: 0x00006F84, + 9391: 0x00006F51, + 9392: 0x00006F66, + 9393: 0x00006F54, + 9394: 0x00006F86, + 9395: 0x00006F6D, + 9396: 0x00006F5B, + 9397: 0x00006F78, + 9398: 0x00006F6E, + 9399: 0x00006F8E, + 9400: 0x00006F7A, + 9401: 0x00006F70, + 9402: 0x00006F64, + 9403: 0x00006F97, + 9404: 0x00006F58, + 9405: 0x00006ED5, + 9406: 0x00006F6F, + 9407: 0x00006F60, + 9408: 0x00006F5F, + 9409: 0x0000719F, + 9410: 0x000071AC, + 9411: 0x000071B1, + 9412: 0x000071A8, + 9413: 0x00007256, + 9414: 0x0000729B, + 9415: 0x0000734E, + 9416: 0x00007357, + 9417: 0x00007469, + 9418: 0x0000748B, + 9419: 0x00007483, + 9420: 0x0000747E, + 9421: 0x00007480, + 9422: 0x0000757F, + 9423: 0x00007620, + 9424: 0x00007629, + 9425: 0x0000761F, + 9426: 0x00007624, + 9427: 0x00007626, + 9428: 0x00007621, + 9429: 0x00007622, + 9430: 0x0000769A, + 9431: 0x000076BA, + 9432: 0x000076E4, + 9433: 0x0000778E, + 9434: 0x00007787, + 9435: 0x0000778C, + 9436: 0x00007791, + 9437: 0x0000778B, + 9438: 0x000078CB, + 9439: 0x000078C5, + 9440: 0x000078BA, + 9441: 0x000078CA, + 9442: 0x000078BE, + 9443: 0x000078D5, + 9444: 0x000078BC, + 9445: 0x000078D0, + 9446: 0x00007A3F, + 9447: 0x00007A3C, + 9448: 0x00007A40, + 9449: 0x00007A3D, + 9450: 0x00007A37, + 9451: 0x00007A3B, + 9452: 0x00007AAF, + 9453: 0x00007AAE, + 9454: 0x00007BAD, + 9455: 0x00007BB1, + 9456: 0x00007BC4, + 9457: 0x00007BB4, + 9458: 0x00007BC6, + 9459: 0x00007BC7, + 9460: 0x00007BC1, + 9461: 0x00007BA0, + 9462: 0x00007BCC, + 9463: 0x00007CCA, + 9464: 0x00007DE0, + 9465: 0x00007DF4, + 9466: 0x00007DEF, + 9467: 0x00007DFB, + 9468: 0x00007DD8, + 9469: 0x00007DEC, + 9470: 0x00007DDD, + 9471: 0x00007DE8, + 9472: 0x00007DE3, + 9473: 0x00007DDA, + 9474: 0x00007DDE, + 9475: 0x00007DE9, + 9476: 0x00007D9E, + 9477: 0x00007DD9, + 9478: 0x00007DF2, + 9479: 0x00007DF9, + 9480: 0x00007F75, + 9481: 0x00007F77, + 9482: 0x00007FAF, + 9483: 0x00007FE9, + 9484: 0x00008026, + 9485: 0x0000819B, + 9486: 0x0000819C, + 9487: 0x0000819D, + 9488: 0x000081A0, + 9489: 0x0000819A, + 9490: 0x00008198, + 9491: 0x00008517, + 9492: 0x0000853D, + 9493: 0x0000851A, + 9494: 0x000084EE, + 9495: 0x0000852C, + 9496: 0x0000852D, + 9497: 0x00008513, + 9498: 0x00008511, + 9499: 0x00008523, + 9500: 0x00008521, + 9501: 0x00008514, + 9502: 0x000084EC, + 9503: 0x00008525, + 9504: 0x000084FF, + 9505: 0x00008506, + 9506: 0x00008782, + 9507: 0x00008774, + 9508: 0x00008776, + 9509: 0x00008760, + 9510: 0x00008766, + 9511: 0x00008778, + 9512: 0x00008768, + 9513: 0x00008759, + 9514: 0x00008757, + 9515: 0x0000874C, + 9516: 0x00008753, + 9517: 0x0000885B, + 9518: 0x0000885D, + 9519: 0x00008910, + 9520: 0x00008907, + 9521: 0x00008912, + 9522: 0x00008913, + 9523: 0x00008915, + 9524: 0x0000890A, + 9525: 0x00008ABC, + 9526: 0x00008AD2, + 9527: 0x00008AC7, + 9528: 0x00008AC4, + 9529: 0x00008A95, + 9530: 0x00008ACB, + 9531: 0x00008AF8, + 9532: 0x00008AB2, + 9533: 0x00008AC9, + 9534: 0x00008AC2, + 9535: 0x00008ABF, + 9536: 0x00008AB0, + 9537: 0x00008AD6, + 9538: 0x00008ACD, + 9539: 0x00008AB6, + 9540: 0x00008AB9, + 9541: 0x00008ADB, + 9542: 0x00008C4C, + 9543: 0x00008C4E, + 9544: 0x00008C6C, + 9545: 0x00008CE0, + 9546: 0x00008CDE, + 9547: 0x00008CE6, + 9548: 0x00008CE4, + 9549: 0x00008CEC, + 9550: 0x00008CED, + 9551: 0x00008CE2, + 9552: 0x00008CE3, + 9553: 0x00008CDC, + 9554: 0x00008CEA, + 9555: 0x00008CE1, + 9556: 0x00008D6D, + 9557: 0x00008D9F, + 9558: 0x00008DA3, + 9559: 0x00008E2B, + 9560: 0x00008E10, + 9561: 0x00008E1D, + 9562: 0x00008E22, + 9563: 0x00008E0F, + 9564: 0x00008E29, + 9565: 0x00008E1F, + 9566: 0x00008E21, + 9567: 0x00008E1E, + 9568: 0x00008EBA, + 9569: 0x00008F1D, + 9570: 0x00008F1B, + 9571: 0x00008F1F, + 9572: 0x00008F29, + 9573: 0x00008F26, + 9574: 0x00008F2A, + 9575: 0x00008F1C, + 9576: 0x00008F1E, + 9577: 0x00008F25, + 9578: 0x00009069, + 9579: 0x0000906E, + 9580: 0x00009068, + 9581: 0x0000906D, + 9582: 0x00009077, + 9583: 0x00009130, + 9584: 0x0000912D, + 9585: 0x00009127, + 9586: 0x00009131, + 9587: 0x00009187, + 9588: 0x00009189, + 9589: 0x0000918B, + 9590: 0x00009183, + 9591: 0x000092C5, + 9592: 0x000092BB, + 9593: 0x000092B7, + 9594: 0x000092EA, + 9595: 0x000092AC, + 9596: 0x000092E4, + 9597: 0x000092C1, + 9598: 0x000092B3, + 9599: 0x000092BC, + 9600: 0x000092D2, + 9601: 0x000092C7, + 9602: 0x000092F0, + 9603: 0x000092B2, + 9604: 0x000095AD, + 9605: 0x000095B1, + 9606: 0x00009704, + 9607: 0x00009706, + 9608: 0x00009707, + 9609: 0x00009709, + 9610: 0x00009760, + 9611: 0x0000978D, + 9612: 0x0000978B, + 9613: 0x0000978F, + 9614: 0x00009821, + 9615: 0x0000982B, + 9616: 0x0000981C, + 9617: 0x000098B3, + 9618: 0x0000990A, + 9619: 0x00009913, + 9620: 0x00009912, + 9621: 0x00009918, + 9622: 0x000099DD, + 9623: 0x000099D0, + 9624: 0x000099DF, + 9625: 0x000099DB, + 9626: 0x000099D1, + 9627: 0x000099D5, + 9628: 0x000099D2, + 9629: 0x000099D9, + 9630: 0x00009AB7, + 9631: 0x00009AEE, + 9632: 0x00009AEF, + 9633: 0x00009B27, + 9634: 0x00009B45, + 9635: 0x00009B44, + 9636: 0x00009B77, + 9637: 0x00009B6F, + 9638: 0x00009D06, + 9639: 0x00009D09, + 9640: 0x00009D03, + 9641: 0x00009EA9, + 9642: 0x00009EBE, + 9643: 0x00009ECE, + 9644: 0x000058A8, + 9645: 0x00009F52, + 9646: 0x00005112, + 9647: 0x00005118, + 9648: 0x00005114, + 9649: 0x00005110, + 9650: 0x00005115, + 9651: 0x00005180, + 9652: 0x000051AA, + 9653: 0x000051DD, + 9654: 0x00005291, + 9655: 0x00005293, + 9656: 0x000052F3, + 9657: 0x00005659, + 9658: 0x0000566B, + 9659: 0x00005679, + 9660: 0x00005669, + 9661: 0x00005664, + 9662: 0x00005678, + 9663: 0x0000566A, + 9664: 0x00005668, + 9665: 0x00005665, + 9666: 0x00005671, + 9667: 0x0000566F, + 9668: 0x0000566C, + 9669: 0x00005662, + 9670: 0x00005676, + 9671: 0x000058C1, + 9672: 0x000058BE, + 9673: 0x000058C7, + 9674: 0x000058C5, + 9675: 0x0000596E, + 9676: 0x00005B1D, + 9677: 0x00005B34, + 9678: 0x00005B78, + 9679: 0x00005BF0, + 9680: 0x00005C0E, + 9681: 0x00005F4A, + 9682: 0x000061B2, + 9683: 0x00006191, + 9684: 0x000061A9, + 9685: 0x0000618A, + 9686: 0x000061CD, + 9687: 0x000061B6, + 9688: 0x000061BE, + 9689: 0x000061CA, + 9690: 0x000061C8, + 9691: 0x00006230, + 9692: 0x000064C5, + 9693: 0x000064C1, + 9694: 0x000064CB, + 9695: 0x000064BB, + 9696: 0x000064BC, + 9697: 0x000064DA, + 9698: 0x000064C4, + 9699: 0x000064C7, + 9700: 0x000064C2, + 9701: 0x000064CD, + 9702: 0x000064BF, + 9703: 0x000064D2, + 9704: 0x000064D4, + 9705: 0x000064BE, + 9706: 0x00006574, + 9707: 0x000066C6, + 9708: 0x000066C9, + 9709: 0x000066B9, + 9710: 0x000066C4, + 9711: 0x000066C7, + 9712: 0x000066B8, + 9713: 0x00006A3D, + 9714: 0x00006A38, + 9715: 0x00006A3A, + 9716: 0x00006A59, + 9717: 0x00006A6B, + 9718: 0x00006A58, + 9719: 0x00006A39, + 9720: 0x00006A44, + 9721: 0x00006A62, + 9722: 0x00006A61, + 9723: 0x00006A4B, + 9724: 0x00006A47, + 9725: 0x00006A35, + 9726: 0x00006A5F, + 9727: 0x00006A48, + 9728: 0x00006B59, + 9729: 0x00006B77, + 9730: 0x00006C05, + 9731: 0x00006FC2, + 9732: 0x00006FB1, + 9733: 0x00006FA1, + 9734: 0x00006FC3, + 9735: 0x00006FA4, + 9736: 0x00006FC1, + 9737: 0x00006FA7, + 9738: 0x00006FB3, + 9739: 0x00006FC0, + 9740: 0x00006FB9, + 9741: 0x00006FB6, + 9742: 0x00006FA6, + 9743: 0x00006FA0, + 9744: 0x00006FB4, + 9745: 0x000071BE, + 9746: 0x000071C9, + 9747: 0x000071D0, + 9748: 0x000071D2, + 9749: 0x000071C8, + 9750: 0x000071D5, + 9751: 0x000071B9, + 9752: 0x000071CE, + 9753: 0x000071D9, + 9754: 0x000071DC, + 9755: 0x000071C3, + 9756: 0x000071C4, + 9757: 0x00007368, + 9758: 0x0000749C, + 9759: 0x000074A3, + 9760: 0x00007498, + 9761: 0x0000749F, + 9762: 0x0000749E, + 9763: 0x000074E2, + 9764: 0x0000750C, + 9765: 0x0000750D, + 9766: 0x00007634, + 9767: 0x00007638, + 9768: 0x0000763A, + 9769: 0x000076E7, + 9770: 0x000076E5, + 9771: 0x000077A0, + 9772: 0x0000779E, + 9773: 0x0000779F, + 9774: 0x000077A5, + 9775: 0x000078E8, + 9776: 0x000078DA, + 9777: 0x000078EC, + 9778: 0x000078E7, + 9779: 0x000079A6, + 9780: 0x00007A4D, + 9781: 0x00007A4E, + 9782: 0x00007A46, + 9783: 0x00007A4C, + 9784: 0x00007A4B, + 9785: 0x00007ABA, + 9786: 0x00007BD9, + 9787: 0x00007C11, + 9788: 0x00007BC9, + 9789: 0x00007BE4, + 9790: 0x00007BDB, + 9791: 0x00007BE1, + 9792: 0x00007BE9, + 9793: 0x00007BE6, + 9794: 0x00007CD5, + 9795: 0x00007CD6, + 9796: 0x00007E0A, + 9797: 0x00007E11, + 9798: 0x00007E08, + 9799: 0x00007E1B, + 9800: 0x00007E23, + 9801: 0x00007E1E, + 9802: 0x00007E1D, + 9803: 0x00007E09, + 9804: 0x00007E10, + 9805: 0x00007F79, + 9806: 0x00007FB2, + 9807: 0x00007FF0, + 9808: 0x00007FF1, + 9809: 0x00007FEE, + 9810: 0x00008028, + 9811: 0x000081B3, + 9812: 0x000081A9, + 9813: 0x000081A8, + 9814: 0x000081FB, + 9815: 0x00008208, + 9816: 0x00008258, + 9817: 0x00008259, + 9818: 0x0000854A, + 9819: 0x00008559, + 9820: 0x00008548, + 9821: 0x00008568, + 9822: 0x00008569, + 9823: 0x00008543, + 9824: 0x00008549, + 9825: 0x0000856D, + 9826: 0x0000856A, + 9827: 0x0000855E, + 9828: 0x00008783, + 9829: 0x0000879F, + 9830: 0x0000879E, + 9831: 0x000087A2, + 9832: 0x0000878D, + 9833: 0x00008861, + 9834: 0x0000892A, + 9835: 0x00008932, + 9836: 0x00008925, + 9837: 0x0000892B, + 9838: 0x00008921, + 9839: 0x000089AA, + 9840: 0x000089A6, + 9841: 0x00008AE6, + 9842: 0x00008AFA, + 9843: 0x00008AEB, + 9844: 0x00008AF1, + 9845: 0x00008B00, + 9846: 0x00008ADC, + 9847: 0x00008AE7, + 9848: 0x00008AEE, + 9849: 0x00008AFE, + 9850: 0x00008B01, + 9851: 0x00008B02, + 9852: 0x00008AF7, + 9853: 0x00008AED, + 9854: 0x00008AF3, + 9855: 0x00008AF6, + 9856: 0x00008AFC, + 9857: 0x00008C6B, + 9858: 0x00008C6D, + 9859: 0x00008C93, + 9860: 0x00008CF4, + 9861: 0x00008E44, + 9862: 0x00008E31, + 9863: 0x00008E34, + 9864: 0x00008E42, + 9865: 0x00008E39, + 9866: 0x00008E35, + 9867: 0x00008F3B, + 9868: 0x00008F2F, + 9869: 0x00008F38, + 9870: 0x00008F33, + 9871: 0x00008FA8, + 9872: 0x00008FA6, + 9873: 0x00009075, + 9874: 0x00009074, + 9875: 0x00009078, + 9876: 0x00009072, + 9877: 0x0000907C, + 9878: 0x0000907A, + 9879: 0x00009134, + 9880: 0x00009192, + 9881: 0x00009320, + 9882: 0x00009336, + 9883: 0x000092F8, + 9884: 0x00009333, + 9885: 0x0000932F, + 9886: 0x00009322, + 9887: 0x000092FC, + 9888: 0x0000932B, + 9889: 0x00009304, + 9890: 0x0000931A, + 9891: 0x00009310, + 9892: 0x00009326, + 9893: 0x00009321, + 9894: 0x00009315, + 9895: 0x0000932E, + 9896: 0x00009319, + 9897: 0x000095BB, + 9898: 0x000096A7, + 9899: 0x000096A8, + 9900: 0x000096AA, + 9901: 0x000096D5, + 9902: 0x0000970E, + 9903: 0x00009711, + 9904: 0x00009716, + 9905: 0x0000970D, + 9906: 0x00009713, + 9907: 0x0000970F, + 9908: 0x0000975B, + 9909: 0x0000975C, + 9910: 0x00009766, + 9911: 0x00009798, + 9912: 0x00009830, + 9913: 0x00009838, + 9914: 0x0000983B, + 9915: 0x00009837, + 9916: 0x0000982D, + 9917: 0x00009839, + 9918: 0x00009824, + 9919: 0x00009910, + 9920: 0x00009928, + 9921: 0x0000991E, + 9922: 0x0000991B, + 9923: 0x00009921, + 9924: 0x0000991A, + 9925: 0x000099ED, + 9926: 0x000099E2, + 9927: 0x000099F1, + 9928: 0x00009AB8, + 9929: 0x00009ABC, + 9930: 0x00009AFB, + 9931: 0x00009AED, + 9932: 0x00009B28, + 9933: 0x00009B91, + 9934: 0x00009D15, + 9935: 0x00009D23, + 9936: 0x00009D26, + 9937: 0x00009D28, + 9938: 0x00009D12, + 9939: 0x00009D1B, + 9940: 0x00009ED8, + 9941: 0x00009ED4, + 9942: 0x00009F8D, + 9943: 0x00009F9C, + 9944: 0x0000512A, + 9945: 0x0000511F, + 9946: 0x00005121, + 9947: 0x00005132, + 9948: 0x000052F5, + 9949: 0x0000568E, + 9950: 0x00005680, + 9951: 0x00005690, + 9952: 0x00005685, + 9953: 0x00005687, + 9954: 0x0000568F, + 9955: 0x000058D5, + 9956: 0x000058D3, + 9957: 0x000058D1, + 9958: 0x000058CE, + 9959: 0x00005B30, + 9960: 0x00005B2A, + 9961: 0x00005B24, + 9962: 0x00005B7A, + 9963: 0x00005C37, + 9964: 0x00005C68, + 9965: 0x00005DBC, + 9966: 0x00005DBA, + 9967: 0x00005DBD, + 9968: 0x00005DB8, + 9969: 0x00005E6B, + 9970: 0x00005F4C, + 9971: 0x00005FBD, + 9972: 0x000061C9, + 9973: 0x000061C2, + 9974: 0x000061C7, + 9975: 0x000061E6, + 9976: 0x000061CB, + 9977: 0x00006232, + 9978: 0x00006234, + 9979: 0x000064CE, + 9980: 0x000064CA, + 9981: 0x000064D8, + 9982: 0x000064E0, + 9983: 0x000064F0, + 9984: 0x000064E6, + 9985: 0x000064EC, + 9986: 0x000064F1, + 9987: 0x000064E2, + 9988: 0x000064ED, + 9989: 0x00006582, + 9990: 0x00006583, + 9991: 0x000066D9, + 9992: 0x000066D6, + 9993: 0x00006A80, + 9994: 0x00006A94, + 9995: 0x00006A84, + 9996: 0x00006AA2, + 9997: 0x00006A9C, + 9998: 0x00006ADB, + 9999: 0x00006AA3, + 10000: 0x00006A7E, + 10001: 0x00006A97, + 10002: 0x00006A90, + 10003: 0x00006AA0, + 10004: 0x00006B5C, + 10005: 0x00006BAE, + 10006: 0x00006BDA, + 10007: 0x00006C08, + 10008: 0x00006FD8, + 10009: 0x00006FF1, + 10010: 0x00006FDF, + 10011: 0x00006FE0, + 10012: 0x00006FDB, + 10013: 0x00006FE4, + 10014: 0x00006FEB, + 10015: 0x00006FEF, + 10016: 0x00006F80, + 10017: 0x00006FEC, + 10018: 0x00006FE1, + 10019: 0x00006FE9, + 10020: 0x00006FD5, + 10021: 0x00006FEE, + 10022: 0x00006FF0, + 10023: 0x000071E7, + 10024: 0x000071DF, + 10025: 0x000071EE, + 10026: 0x000071E6, + 10027: 0x000071E5, + 10028: 0x000071ED, + 10029: 0x000071EC, + 10030: 0x000071F4, + 10031: 0x000071E0, + 10032: 0x00007235, + 10033: 0x00007246, + 10034: 0x00007370, + 10035: 0x00007372, + 10036: 0x000074A9, + 10037: 0x000074B0, + 10038: 0x000074A6, + 10039: 0x000074A8, + 10040: 0x00007646, + 10041: 0x00007642, + 10042: 0x0000764C, + 10043: 0x000076EA, + 10044: 0x000077B3, + 10045: 0x000077AA, + 10046: 0x000077B0, + 10047: 0x000077AC, + 10048: 0x000077A7, + 10049: 0x000077AD, + 10050: 0x000077EF, + 10051: 0x000078F7, + 10052: 0x000078FA, + 10053: 0x000078F4, + 10054: 0x000078EF, + 10055: 0x00007901, + 10056: 0x000079A7, + 10057: 0x000079AA, + 10058: 0x00007A57, + 10059: 0x00007ABF, + 10060: 0x00007C07, + 10061: 0x00007C0D, + 10062: 0x00007BFE, + 10063: 0x00007BF7, + 10064: 0x00007C0C, + 10065: 0x00007BE0, + 10066: 0x00007CE0, + 10067: 0x00007CDC, + 10068: 0x00007CDE, + 10069: 0x00007CE2, + 10070: 0x00007CDF, + 10071: 0x00007CD9, + 10072: 0x00007CDD, + 10073: 0x00007E2E, + 10074: 0x00007E3E, + 10075: 0x00007E46, + 10076: 0x00007E37, + 10077: 0x00007E32, + 10078: 0x00007E43, + 10079: 0x00007E2B, + 10080: 0x00007E3D, + 10081: 0x00007E31, + 10082: 0x00007E45, + 10083: 0x00007E41, + 10084: 0x00007E34, + 10085: 0x00007E39, + 10086: 0x00007E48, + 10087: 0x00007E35, + 10088: 0x00007E3F, + 10089: 0x00007E2F, + 10090: 0x00007F44, + 10091: 0x00007FF3, + 10092: 0x00007FFC, + 10093: 0x00008071, + 10094: 0x00008072, + 10095: 0x00008070, + 10096: 0x0000806F, + 10097: 0x00008073, + 10098: 0x000081C6, + 10099: 0x000081C3, + 10100: 0x000081BA, + 10101: 0x000081C2, + 10102: 0x000081C0, + 10103: 0x000081BF, + 10104: 0x000081BD, + 10105: 0x000081C9, + 10106: 0x000081BE, + 10107: 0x000081E8, + 10108: 0x00008209, + 10109: 0x00008271, + 10110: 0x000085AA, + 10111: 0x00008584, + 10112: 0x0000857E, + 10113: 0x0000859C, + 10114: 0x00008591, + 10115: 0x00008594, + 10116: 0x000085AF, + 10117: 0x0000859B, + 10118: 0x00008587, + 10119: 0x000085A8, + 10120: 0x0000858A, + 10121: 0x00008667, + 10122: 0x000087C0, + 10123: 0x000087D1, + 10124: 0x000087B3, + 10125: 0x000087D2, + 10126: 0x000087C6, + 10127: 0x000087AB, + 10128: 0x000087BB, + 10129: 0x000087BA, + 10130: 0x000087C8, + 10131: 0x000087CB, + 10132: 0x0000893B, + 10133: 0x00008936, + 10134: 0x00008944, + 10135: 0x00008938, + 10136: 0x0000893D, + 10137: 0x000089AC, + 10138: 0x00008B0E, + 10139: 0x00008B17, + 10140: 0x00008B19, + 10141: 0x00008B1B, + 10142: 0x00008B0A, + 10143: 0x00008B20, + 10144: 0x00008B1D, + 10145: 0x00008B04, + 10146: 0x00008B10, + 10147: 0x00008C41, + 10148: 0x00008C3F, + 10149: 0x00008C73, + 10150: 0x00008CFA, + 10151: 0x00008CFD, + 10152: 0x00008CFC, + 10153: 0x00008CF8, + 10154: 0x00008CFB, + 10155: 0x00008DA8, + 10156: 0x00008E49, + 10157: 0x00008E4B, + 10158: 0x00008E48, + 10159: 0x00008E4A, + 10160: 0x00008F44, + 10161: 0x00008F3E, + 10162: 0x00008F42, + 10163: 0x00008F45, + 10164: 0x00008F3F, + 10165: 0x0000907F, + 10166: 0x0000907D, + 10167: 0x00009084, + 10168: 0x00009081, + 10169: 0x00009082, + 10170: 0x00009080, + 10171: 0x00009139, + 10172: 0x000091A3, + 10173: 0x0000919E, + 10174: 0x0000919C, + 10175: 0x0000934D, + 10176: 0x00009382, + 10177: 0x00009328, + 10178: 0x00009375, + 10179: 0x0000934A, + 10180: 0x00009365, + 10181: 0x0000934B, + 10182: 0x00009318, + 10183: 0x0000937E, + 10184: 0x0000936C, + 10185: 0x0000935B, + 10186: 0x00009370, + 10187: 0x0000935A, + 10188: 0x00009354, + 10189: 0x000095CA, + 10190: 0x000095CB, + 10191: 0x000095CC, + 10192: 0x000095C8, + 10193: 0x000095C6, + 10194: 0x000096B1, + 10195: 0x000096B8, + 10196: 0x000096D6, + 10197: 0x0000971C, + 10198: 0x0000971E, + 10199: 0x000097A0, + 10200: 0x000097D3, + 10201: 0x00009846, + 10202: 0x000098B6, + 10203: 0x00009935, + 10204: 0x00009A01, + 10205: 0x000099FF, + 10206: 0x00009BAE, + 10207: 0x00009BAB, + 10208: 0x00009BAA, + 10209: 0x00009BAD, + 10210: 0x00009D3B, + 10211: 0x00009D3F, + 10212: 0x00009E8B, + 10213: 0x00009ECF, + 10214: 0x00009EDE, + 10215: 0x00009EDC, + 10216: 0x00009EDD, + 10217: 0x00009EDB, + 10218: 0x00009F3E, + 10219: 0x00009F4B, + 10220: 0x000053E2, + 10221: 0x00005695, + 10222: 0x000056AE, + 10223: 0x000058D9, + 10224: 0x000058D8, + 10225: 0x00005B38, + 10226: 0x00005F5D, + 10227: 0x000061E3, + 10228: 0x00006233, + 10229: 0x000064F4, + 10230: 0x000064F2, + 10231: 0x000064FE, + 10232: 0x00006506, + 10233: 0x000064FA, + 10234: 0x000064FB, + 10235: 0x000064F7, + 10236: 0x000065B7, + 10237: 0x000066DC, + 10238: 0x00006726, + 10239: 0x00006AB3, + 10240: 0x00006AAC, + 10241: 0x00006AC3, + 10242: 0x00006ABB, + 10243: 0x00006AB8, + 10244: 0x00006AC2, + 10245: 0x00006AAE, + 10246: 0x00006AAF, + 10247: 0x00006B5F, + 10248: 0x00006B78, + 10249: 0x00006BAF, + 10250: 0x00007009, + 10251: 0x0000700B, + 10252: 0x00006FFE, + 10253: 0x00007006, + 10254: 0x00006FFA, + 10255: 0x00007011, + 10256: 0x0000700F, + 10257: 0x000071FB, + 10258: 0x000071FC, + 10259: 0x000071FE, + 10260: 0x000071F8, + 10261: 0x00007377, + 10262: 0x00007375, + 10263: 0x000074A7, + 10264: 0x000074BF, + 10265: 0x00007515, + 10266: 0x00007656, + 10267: 0x00007658, + 10268: 0x00007652, + 10269: 0x000077BD, + 10270: 0x000077BF, + 10271: 0x000077BB, + 10272: 0x000077BC, + 10273: 0x0000790E, + 10274: 0x000079AE, + 10275: 0x00007A61, + 10276: 0x00007A62, + 10277: 0x00007A60, + 10278: 0x00007AC4, + 10279: 0x00007AC5, + 10280: 0x00007C2B, + 10281: 0x00007C27, + 10282: 0x00007C2A, + 10283: 0x00007C1E, + 10284: 0x00007C23, + 10285: 0x00007C21, + 10286: 0x00007CE7, + 10287: 0x00007E54, + 10288: 0x00007E55, + 10289: 0x00007E5E, + 10290: 0x00007E5A, + 10291: 0x00007E61, + 10292: 0x00007E52, + 10293: 0x00007E59, + 10294: 0x00007F48, + 10295: 0x00007FF9, + 10296: 0x00007FFB, + 10297: 0x00008077, + 10298: 0x00008076, + 10299: 0x000081CD, + 10300: 0x000081CF, + 10301: 0x0000820A, + 10302: 0x000085CF, + 10303: 0x000085A9, + 10304: 0x000085CD, + 10305: 0x000085D0, + 10306: 0x000085C9, + 10307: 0x000085B0, + 10308: 0x000085BA, + 10309: 0x000085B9, + 10310: 0x000085A6, + 10311: 0x000087EF, + 10312: 0x000087EC, + 10313: 0x000087F2, + 10314: 0x000087E0, + 10315: 0x00008986, + 10316: 0x000089B2, + 10317: 0x000089F4, + 10318: 0x00008B28, + 10319: 0x00008B39, + 10320: 0x00008B2C, + 10321: 0x00008B2B, + 10322: 0x00008C50, + 10323: 0x00008D05, + 10324: 0x00008E59, + 10325: 0x00008E63, + 10326: 0x00008E66, + 10327: 0x00008E64, + 10328: 0x00008E5F, + 10329: 0x00008E55, + 10330: 0x00008EC0, + 10331: 0x00008F49, + 10332: 0x00008F4D, + 10333: 0x00009087, + 10334: 0x00009083, + 10335: 0x00009088, + 10336: 0x000091AB, + 10337: 0x000091AC, + 10338: 0x000091D0, + 10339: 0x00009394, + 10340: 0x0000938A, + 10341: 0x00009396, + 10342: 0x000093A2, + 10343: 0x000093B3, + 10344: 0x000093AE, + 10345: 0x000093AC, + 10346: 0x000093B0, + 10347: 0x00009398, + 10348: 0x0000939A, + 10349: 0x00009397, + 10350: 0x000095D4, + 10351: 0x000095D6, + 10352: 0x000095D0, + 10353: 0x000095D5, + 10354: 0x000096E2, + 10355: 0x000096DC, + 10356: 0x000096D9, + 10357: 0x000096DB, + 10358: 0x000096DE, + 10359: 0x00009724, + 10360: 0x000097A3, + 10361: 0x000097A6, + 10362: 0x000097AD, + 10363: 0x000097F9, + 10364: 0x0000984D, + 10365: 0x0000984F, + 10366: 0x0000984C, + 10367: 0x0000984E, + 10368: 0x00009853, + 10369: 0x000098BA, + 10370: 0x0000993E, + 10371: 0x0000993F, + 10372: 0x0000993D, + 10373: 0x0000992E, + 10374: 0x000099A5, + 10375: 0x00009A0E, + 10376: 0x00009AC1, + 10377: 0x00009B03, + 10378: 0x00009B06, + 10379: 0x00009B4F, + 10380: 0x00009B4E, + 10381: 0x00009B4D, + 10382: 0x00009BCA, + 10383: 0x00009BC9, + 10384: 0x00009BFD, + 10385: 0x00009BC8, + 10386: 0x00009BC0, + 10387: 0x00009D51, + 10388: 0x00009D5D, + 10389: 0x00009D60, + 10390: 0x00009EE0, + 10391: 0x00009F15, + 10392: 0x00009F2C, + 10393: 0x00005133, + 10394: 0x000056A5, + 10395: 0x000058DE, + 10396: 0x000058DF, + 10397: 0x000058E2, + 10398: 0x00005BF5, + 10399: 0x00009F90, + 10400: 0x00005EEC, + 10401: 0x000061F2, + 10402: 0x000061F7, + 10403: 0x000061F6, + 10404: 0x000061F5, + 10405: 0x00006500, + 10406: 0x0000650F, + 10407: 0x000066E0, + 10408: 0x000066DD, + 10409: 0x00006AE5, + 10410: 0x00006ADD, + 10411: 0x00006ADA, + 10412: 0x00006AD3, + 10413: 0x0000701B, + 10414: 0x0000701F, + 10415: 0x00007028, + 10416: 0x0000701A, + 10417: 0x0000701D, + 10418: 0x00007015, + 10419: 0x00007018, + 10420: 0x00007206, + 10421: 0x0000720D, + 10422: 0x00007258, + 10423: 0x000072A2, + 10424: 0x00007378, + 10425: 0x0000737A, + 10426: 0x000074BD, + 10427: 0x000074CA, + 10428: 0x000074E3, + 10429: 0x00007587, + 10430: 0x00007586, + 10431: 0x0000765F, + 10432: 0x00007661, + 10433: 0x000077C7, + 10434: 0x00007919, + 10435: 0x000079B1, + 10436: 0x00007A6B, + 10437: 0x00007A69, + 10438: 0x00007C3E, + 10439: 0x00007C3F, + 10440: 0x00007C38, + 10441: 0x00007C3D, + 10442: 0x00007C37, + 10443: 0x00007C40, + 10444: 0x00007E6B, + 10445: 0x00007E6D, + 10446: 0x00007E79, + 10447: 0x00007E69, + 10448: 0x00007E6A, + 10449: 0x00007F85, + 10450: 0x00007E73, + 10451: 0x00007FB6, + 10452: 0x00007FB9, + 10453: 0x00007FB8, + 10454: 0x000081D8, + 10455: 0x000085E9, + 10456: 0x000085DD, + 10457: 0x000085EA, + 10458: 0x000085D5, + 10459: 0x000085E4, + 10460: 0x000085E5, + 10461: 0x000085F7, + 10462: 0x000087FB, + 10463: 0x00008805, + 10464: 0x0000880D, + 10465: 0x000087F9, + 10466: 0x000087FE, + 10467: 0x00008960, + 10468: 0x0000895F, + 10469: 0x00008956, + 10470: 0x0000895E, + 10471: 0x00008B41, + 10472: 0x00008B5C, + 10473: 0x00008B58, + 10474: 0x00008B49, + 10475: 0x00008B5A, + 10476: 0x00008B4E, + 10477: 0x00008B4F, + 10478: 0x00008B46, + 10479: 0x00008B59, + 10480: 0x00008D08, + 10481: 0x00008D0A, + 10482: 0x00008E7C, + 10483: 0x00008E72, + 10484: 0x00008E87, + 10485: 0x00008E76, + 10486: 0x00008E6C, + 10487: 0x00008E7A, + 10488: 0x00008E74, + 10489: 0x00008F54, + 10490: 0x00008F4E, + 10491: 0x00008FAD, + 10492: 0x0000908A, + 10493: 0x0000908B, + 10494: 0x000091B1, + 10495: 0x000091AE, + 10496: 0x000093E1, + 10497: 0x000093D1, + 10498: 0x000093DF, + 10499: 0x000093C3, + 10500: 0x000093C8, + 10501: 0x000093DC, + 10502: 0x000093DD, + 10503: 0x000093D6, + 10504: 0x000093E2, + 10505: 0x000093CD, + 10506: 0x000093D8, + 10507: 0x000093E4, + 10508: 0x000093D7, + 10509: 0x000093E8, + 10510: 0x000095DC, + 10511: 0x000096B4, + 10512: 0x000096E3, + 10513: 0x0000972A, + 10514: 0x00009727, + 10515: 0x00009761, + 10516: 0x000097DC, + 10517: 0x000097FB, + 10518: 0x0000985E, + 10519: 0x00009858, + 10520: 0x0000985B, + 10521: 0x000098BC, + 10522: 0x00009945, + 10523: 0x00009949, + 10524: 0x00009A16, + 10525: 0x00009A19, + 10526: 0x00009B0D, + 10527: 0x00009BE8, + 10528: 0x00009BE7, + 10529: 0x00009BD6, + 10530: 0x00009BDB, + 10531: 0x00009D89, + 10532: 0x00009D61, + 10533: 0x00009D72, + 10534: 0x00009D6A, + 10535: 0x00009D6C, + 10536: 0x00009E92, + 10537: 0x00009E97, + 10538: 0x00009E93, + 10539: 0x00009EB4, + 10540: 0x000052F8, + 10541: 0x000056A8, + 10542: 0x000056B7, + 10543: 0x000056B6, + 10544: 0x000056B4, + 10545: 0x000056BC, + 10546: 0x000058E4, + 10547: 0x00005B40, + 10548: 0x00005B43, + 10549: 0x00005B7D, + 10550: 0x00005BF6, + 10551: 0x00005DC9, + 10552: 0x000061F8, + 10553: 0x000061FA, + 10554: 0x00006518, + 10555: 0x00006514, + 10556: 0x00006519, + 10557: 0x000066E6, + 10558: 0x00006727, + 10559: 0x00006AEC, + 10560: 0x0000703E, + 10561: 0x00007030, + 10562: 0x00007032, + 10563: 0x00007210, + 10564: 0x0000737B, + 10565: 0x000074CF, + 10566: 0x00007662, + 10567: 0x00007665, + 10568: 0x00007926, + 10569: 0x0000792A, + 10570: 0x0000792C, + 10571: 0x0000792B, + 10572: 0x00007AC7, + 10573: 0x00007AF6, + 10574: 0x00007C4C, + 10575: 0x00007C43, + 10576: 0x00007C4D, + 10577: 0x00007CEF, + 10578: 0x00007CF0, + 10579: 0x00008FAE, + 10580: 0x00007E7D, + 10581: 0x00007E7C, + 10582: 0x00007E82, + 10583: 0x00007F4C, + 10584: 0x00008000, + 10585: 0x000081DA, + 10586: 0x00008266, + 10587: 0x000085FB, + 10588: 0x000085F9, + 10589: 0x00008611, + 10590: 0x000085FA, + 10591: 0x00008606, + 10592: 0x0000860B, + 10593: 0x00008607, + 10594: 0x0000860A, + 10595: 0x00008814, + 10596: 0x00008815, + 10597: 0x00008964, + 10598: 0x000089BA, + 10599: 0x000089F8, + 10600: 0x00008B70, + 10601: 0x00008B6C, + 10602: 0x00008B66, + 10603: 0x00008B6F, + 10604: 0x00008B5F, + 10605: 0x00008B6B, + 10606: 0x00008D0F, + 10607: 0x00008D0D, + 10608: 0x00008E89, + 10609: 0x00008E81, + 10610: 0x00008E85, + 10611: 0x00008E82, + 10612: 0x000091B4, + 10613: 0x000091CB, + 10614: 0x00009418, + 10615: 0x00009403, + 10616: 0x000093FD, + 10617: 0x000095E1, + 10618: 0x00009730, + 10619: 0x000098C4, + 10620: 0x00009952, + 10621: 0x00009951, + 10622: 0x000099A8, + 10623: 0x00009A2B, + 10624: 0x00009A30, + 10625: 0x00009A37, + 10626: 0x00009A35, + 10627: 0x00009C13, + 10628: 0x00009C0D, + 10629: 0x00009E79, + 10630: 0x00009EB5, + 10631: 0x00009EE8, + 10632: 0x00009F2F, + 10633: 0x00009F5F, + 10634: 0x00009F63, + 10635: 0x00009F61, + 10636: 0x00005137, + 10637: 0x00005138, + 10638: 0x000056C1, + 10639: 0x000056C0, + 10640: 0x000056C2, + 10641: 0x00005914, + 10642: 0x00005C6C, + 10643: 0x00005DCD, + 10644: 0x000061FC, + 10645: 0x000061FE, + 10646: 0x0000651D, + 10647: 0x0000651C, + 10648: 0x00006595, + 10649: 0x000066E9, + 10650: 0x00006AFB, + 10651: 0x00006B04, + 10652: 0x00006AFA, + 10653: 0x00006BB2, + 10654: 0x0000704C, + 10655: 0x0000721B, + 10656: 0x000072A7, + 10657: 0x000074D6, + 10658: 0x000074D4, + 10659: 0x00007669, + 10660: 0x000077D3, + 10661: 0x00007C50, + 10662: 0x00007E8F, + 10663: 0x00007E8C, + 10664: 0x00007FBC, + 10665: 0x00008617, + 10666: 0x0000862D, + 10667: 0x0000861A, + 10668: 0x00008823, + 10669: 0x00008822, + 10670: 0x00008821, + 10671: 0x0000881F, + 10672: 0x0000896A, + 10673: 0x0000896C, + 10674: 0x000089BD, + 10675: 0x00008B74, + 10676: 0x00008B77, + 10677: 0x00008B7D, + 10678: 0x00008D13, + 10679: 0x00008E8A, + 10680: 0x00008E8D, + 10681: 0x00008E8B, + 10682: 0x00008F5F, + 10683: 0x00008FAF, + 10684: 0x000091BA, + 10685: 0x0000942E, + 10686: 0x00009433, + 10687: 0x00009435, + 10688: 0x0000943A, + 10689: 0x00009438, + 10690: 0x00009432, + 10691: 0x0000942B, + 10692: 0x000095E2, + 10693: 0x00009738, + 10694: 0x00009739, + 10695: 0x00009732, + 10696: 0x000097FF, + 10697: 0x00009867, + 10698: 0x00009865, + 10699: 0x00009957, + 10700: 0x00009A45, + 10701: 0x00009A43, + 10702: 0x00009A40, + 10703: 0x00009A3E, + 10704: 0x00009ACF, + 10705: 0x00009B54, + 10706: 0x00009B51, + 10707: 0x00009C2D, + 10708: 0x00009C25, + 10709: 0x00009DAF, + 10710: 0x00009DB4, + 10711: 0x00009DC2, + 10712: 0x00009DB8, + 10713: 0x00009E9D, + 10714: 0x00009EEF, + 10715: 0x00009F19, + 10716: 0x00009F5C, + 10717: 0x00009F66, + 10718: 0x00009F67, + 10719: 0x0000513C, + 10720: 0x0000513B, + 10721: 0x000056C8, + 10722: 0x000056CA, + 10723: 0x000056C9, + 10724: 0x00005B7F, + 10725: 0x00005DD4, + 10726: 0x00005DD2, + 10727: 0x00005F4E, + 10728: 0x000061FF, + 10729: 0x00006524, + 10730: 0x00006B0A, + 10731: 0x00006B61, + 10732: 0x00007051, + 10733: 0x00007058, + 10734: 0x00007380, + 10735: 0x000074E4, + 10736: 0x0000758A, + 10737: 0x0000766E, + 10738: 0x0000766C, + 10739: 0x000079B3, + 10740: 0x00007C60, + 10741: 0x00007C5F, + 10742: 0x0000807E, + 10743: 0x0000807D, + 10744: 0x000081DF, + 10745: 0x00008972, + 10746: 0x0000896F, + 10747: 0x000089FC, + 10748: 0x00008B80, + 10749: 0x00008D16, + 10750: 0x00008D17, + 10751: 0x00008E91, + 10752: 0x00008E93, + 10753: 0x00008F61, + 10754: 0x00009148, + 10755: 0x00009444, + 10756: 0x00009451, + 10757: 0x00009452, + 10758: 0x0000973D, + 10759: 0x0000973E, + 10760: 0x000097C3, + 10761: 0x000097C1, + 10762: 0x0000986B, + 10763: 0x00009955, + 10764: 0x00009A55, + 10765: 0x00009A4D, + 10766: 0x00009AD2, + 10767: 0x00009B1A, + 10768: 0x00009C49, + 10769: 0x00009C31, + 10770: 0x00009C3E, + 10771: 0x00009C3B, + 10772: 0x00009DD3, + 10773: 0x00009DD7, + 10774: 0x00009F34, + 10775: 0x00009F6C, + 10776: 0x00009F6A, + 10777: 0x00009F94, + 10778: 0x000056CC, + 10779: 0x00005DD6, + 10780: 0x00006200, + 10781: 0x00006523, + 10782: 0x0000652B, + 10783: 0x0000652A, + 10784: 0x000066EC, + 10785: 0x00006B10, + 10786: 0x000074DA, + 10787: 0x00007ACA, + 10788: 0x00007C64, + 10789: 0x00007C63, + 10790: 0x00007C65, + 10791: 0x00007E93, + 10792: 0x00007E96, + 10793: 0x00007E94, + 10794: 0x000081E2, + 10795: 0x00008638, + 10796: 0x0000863F, + 10797: 0x00008831, + 10798: 0x00008B8A, + 10799: 0x00009090, + 10800: 0x0000908F, + 10801: 0x00009463, + 10802: 0x00009460, + 10803: 0x00009464, + 10804: 0x00009768, + 10805: 0x0000986F, + 10806: 0x0000995C, + 10807: 0x00009A5A, + 10808: 0x00009A5B, + 10809: 0x00009A57, + 10810: 0x00009AD3, + 10811: 0x00009AD4, + 10812: 0x00009AD1, + 10813: 0x00009C54, + 10814: 0x00009C57, + 10815: 0x00009C56, + 10816: 0x00009DE5, + 10817: 0x00009E9F, + 10818: 0x00009EF4, + 10819: 0x000056D1, + 10820: 0x000058E9, + 10821: 0x0000652C, + 10822: 0x0000705E, + 10823: 0x00007671, + 10824: 0x00007672, + 10825: 0x000077D7, + 10826: 0x00007F50, + 10827: 0x00007F88, + 10828: 0x00008836, + 10829: 0x00008839, + 10830: 0x00008862, + 10831: 0x00008B93, + 10832: 0x00008B92, + 10833: 0x00008B96, + 10834: 0x00008277, + 10835: 0x00008D1B, + 10836: 0x000091C0, + 10837: 0x0000946A, + 10838: 0x00009742, + 10839: 0x00009748, + 10840: 0x00009744, + 10841: 0x000097C6, + 10842: 0x00009870, + 10843: 0x00009A5F, + 10844: 0x00009B22, + 10845: 0x00009B58, + 10846: 0x00009C5F, + 10847: 0x00009DF9, + 10848: 0x00009DFA, + 10849: 0x00009E7C, + 10850: 0x00009E7D, + 10851: 0x00009F07, + 10852: 0x00009F77, + 10853: 0x00009F72, + 10854: 0x00005EF3, + 10855: 0x00006B16, + 10856: 0x00007063, + 10857: 0x00007C6C, + 10858: 0x00007C6E, + 10859: 0x0000883B, + 10860: 0x000089C0, + 10861: 0x00008EA1, + 10862: 0x000091C1, + 10863: 0x00009472, + 10864: 0x00009470, + 10865: 0x00009871, + 10866: 0x0000995E, + 10867: 0x00009AD6, + 10868: 0x00009B23, + 10869: 0x00009ECC, + 10870: 0x00007064, + 10871: 0x000077DA, + 10872: 0x00008B9A, + 10873: 0x00009477, + 10874: 0x000097C9, + 10875: 0x00009A62, + 10876: 0x00009A65, + 10877: 0x00007E9C, + 10878: 0x00008B9C, + 10879: 0x00008EAA, + 10880: 0x000091C5, + 10881: 0x0000947D, + 10882: 0x0000947E, + 10883: 0x0000947C, + 10884: 0x00009C77, + 10885: 0x00009C78, + 10886: 0x00009EF7, + 10887: 0x00008C54, + 10888: 0x0000947F, + 10889: 0x00009E1A, + 10890: 0x00007228, + 10891: 0x00009A6A, + 10892: 0x00009B31, + 10893: 0x00009E1B, + 10894: 0x00009E1E, + 10895: 0x00007C72, + 10896: 0x00002460, + 10897: 0x00002461, + 10898: 0x00002462, + 10899: 0x00002463, + 10900: 0x00002464, + 10901: 0x00002465, + 10902: 0x00002466, + 10903: 0x00002467, + 10904: 0x00002468, + 10905: 0x00002469, + 10906: 0x00002474, + 10907: 0x00002475, + 10908: 0x00002476, + 10909: 0x00002477, + 10910: 0x00002478, + 10911: 0x00002479, + 10912: 0x0000247A, + 10913: 0x0000247B, + 10914: 0x0000247C, + 10915: 0x0000247D, + 10916: 0x00002170, + 10917: 0x00002171, + 10918: 0x00002172, + 10919: 0x00002173, + 10920: 0x00002174, + 10921: 0x00002175, + 10922: 0x00002176, + 10923: 0x00002177, + 10924: 0x00002178, + 10925: 0x00002179, + 10926: 0x00004E36, + 10927: 0x00004E3F, + 10928: 0x00004E85, + 10929: 0x00004EA0, + 10930: 0x00005182, + 10931: 0x00005196, + 10932: 0x000051AB, + 10933: 0x000052F9, + 10934: 0x00005338, + 10935: 0x00005369, + 10936: 0x000053B6, + 10937: 0x0000590A, + 10938: 0x00005B80, + 10939: 0x00005DDB, + 10940: 0x00002F33, + 10941: 0x00005E7F, + 10942: 0x00005EF4, + 10943: 0x00005F50, + 10944: 0x00005F61, + 10945: 0x00006534, + 10946: 0x000065E0, + 10947: 0x00007592, + 10948: 0x00007676, + 10949: 0x00008FB5, + 10950: 0x000096B6, + 10951: 0x000000A8, + 10952: 0x000002C6, + 10953: 0x000030FD, + 10954: 0x000030FE, + 10955: 0x0000309D, + 10956: 0x0000309E, + 10957: 0x00003003, + 10958: 0x00004EDD, + 10959: 0x00003005, + 10960: 0x00003006, + 10961: 0x00003007, + 10962: 0x000030FC, + 10963: 0x0000FF3B, + 10964: 0x0000FF3D, + 10965: 0x0000273D, + 10966: 0x00003041, + 10967: 0x00003042, + 10968: 0x00003043, + 10969: 0x00003044, + 10970: 0x00003045, + 10971: 0x00003046, + 10972: 0x00003047, + 10973: 0x00003048, + 10974: 0x00003049, + 10975: 0x0000304A, + 10976: 0x0000304B, + 10977: 0x0000304C, + 10978: 0x0000304D, + 10979: 0x0000304E, + 10980: 0x0000304F, + 10981: 0x00003050, + 10982: 0x00003051, + 10983: 0x00003052, + 10984: 0x00003053, + 10985: 0x00003054, + 10986: 0x00003055, + 10987: 0x00003056, + 10988: 0x00003057, + 10989: 0x00003058, + 10990: 0x00003059, + 10991: 0x0000305A, + 10992: 0x0000305B, + 10993: 0x0000305C, + 10994: 0x0000305D, + 10995: 0x0000305E, + 10996: 0x0000305F, + 10997: 0x00003060, + 10998: 0x00003061, + 10999: 0x00003062, + 11000: 0x00003063, + 11001: 0x00003064, + 11002: 0x00003065, + 11003: 0x00003066, + 11004: 0x00003067, + 11005: 0x00003068, + 11006: 0x00003069, + 11007: 0x0000306A, + 11008: 0x0000306B, + 11009: 0x0000306C, + 11010: 0x0000306D, + 11011: 0x0000306E, + 11012: 0x0000306F, + 11013: 0x00003070, + 11014: 0x00003071, + 11015: 0x00003072, + 11016: 0x00003073, + 11017: 0x00003074, + 11018: 0x00003075, + 11019: 0x00003076, + 11020: 0x00003077, + 11021: 0x00003078, + 11022: 0x00003079, + 11023: 0x0000307A, + 11024: 0x0000307B, + 11025: 0x0000307C, + 11026: 0x0000307D, + 11027: 0x0000307E, + 11028: 0x0000307F, + 11029: 0x00003080, + 11030: 0x00003081, + 11031: 0x00003082, + 11032: 0x00003083, + 11033: 0x00003084, + 11034: 0x00003085, + 11035: 0x00003086, + 11036: 0x00003087, + 11037: 0x00003088, + 11038: 0x00003089, + 11039: 0x0000308A, + 11040: 0x0000308B, + 11041: 0x0000308C, + 11042: 0x0000308D, + 11043: 0x0000308E, + 11044: 0x0000308F, + 11045: 0x00003090, + 11046: 0x00003091, + 11047: 0x00003092, + 11048: 0x00003093, + 11049: 0x000030A1, + 11050: 0x000030A2, + 11051: 0x000030A3, + 11052: 0x000030A4, + 11053: 0x000030A5, + 11054: 0x000030A6, + 11055: 0x000030A7, + 11056: 0x000030A8, + 11057: 0x000030A9, + 11058: 0x000030AA, + 11059: 0x000030AB, + 11060: 0x000030AC, + 11061: 0x000030AD, + 11062: 0x000030AE, + 11063: 0x000030AF, + 11064: 0x000030B0, + 11065: 0x000030B1, + 11066: 0x000030B2, + 11067: 0x000030B3, + 11068: 0x000030B4, + 11069: 0x000030B5, + 11070: 0x000030B6, + 11071: 0x000030B7, + 11072: 0x000030B8, + 11073: 0x000030B9, + 11074: 0x000030BA, + 11075: 0x000030BB, + 11076: 0x000030BC, + 11077: 0x000030BD, + 11078: 0x000030BE, + 11079: 0x000030BF, + 11080: 0x000030C0, + 11081: 0x000030C1, + 11082: 0x000030C2, + 11083: 0x000030C3, + 11084: 0x000030C4, + 11085: 0x000030C5, + 11086: 0x000030C6, + 11087: 0x000030C7, + 11088: 0x000030C8, + 11089: 0x000030C9, + 11090: 0x000030CA, + 11091: 0x000030CB, + 11092: 0x000030CC, + 11093: 0x000030CD, + 11094: 0x000030CE, + 11095: 0x000030CF, + 11096: 0x000030D0, + 11097: 0x000030D1, + 11098: 0x000030D2, + 11099: 0x000030D3, + 11100: 0x000030D4, + 11101: 0x000030D5, + 11102: 0x000030D6, + 11103: 0x000030D7, + 11104: 0x000030D8, + 11105: 0x000030D9, + 11106: 0x000030DA, + 11107: 0x000030DB, + 11108: 0x000030DC, + 11109: 0x000030DD, + 11110: 0x000030DE, + 11111: 0x000030DF, + 11112: 0x000030E0, + 11113: 0x000030E1, + 11114: 0x000030E2, + 11115: 0x000030E3, + 11116: 0x000030E4, + 11117: 0x000030E5, + 11118: 0x000030E6, + 11119: 0x000030E7, + 11120: 0x000030E8, + 11121: 0x000030E9, + 11122: 0x000030EA, + 11123: 0x000030EB, + 11124: 0x000030EC, + 11125: 0x000030ED, + 11126: 0x000030EE, + 11127: 0x000030EF, + 11128: 0x000030F0, + 11129: 0x000030F1, + 11130: 0x000030F2, + 11131: 0x000030F3, + 11132: 0x000030F4, + 11133: 0x000030F5, + 11134: 0x000030F6, + 11135: 0x00000410, + 11136: 0x00000411, + 11137: 0x00000412, + 11138: 0x00000413, + 11139: 0x00000414, + 11140: 0x00000415, + 11141: 0x00000401, + 11142: 0x00000416, + 11143: 0x00000417, + 11144: 0x00000418, + 11145: 0x00000419, + 11146: 0x0000041A, + 11147: 0x0000041B, + 11148: 0x0000041C, + 11149: 0x0000041D, + 11150: 0x0000041E, + 11151: 0x0000041F, + 11152: 0x00000420, + 11153: 0x00000421, + 11154: 0x00000422, + 11155: 0x00000423, + 11156: 0x00000424, + 11157: 0x00000425, + 11158: 0x00000426, + 11159: 0x00000427, + 11160: 0x00000428, + 11161: 0x00000429, + 11162: 0x0000042A, + 11163: 0x0000042B, + 11164: 0x0000042C, + 11165: 0x0000042D, + 11166: 0x0000042E, + 11167: 0x0000042F, + 11168: 0x00000430, + 11169: 0x00000431, + 11170: 0x00000432, + 11171: 0x00000433, + 11172: 0x00000434, + 11173: 0x00000435, + 11174: 0x00000451, + 11175: 0x00000436, + 11176: 0x00000437, + 11177: 0x00000438, + 11178: 0x00000439, + 11179: 0x0000043A, + 11180: 0x0000043B, + 11181: 0x0000043C, + 11182: 0x0000043D, + 11183: 0x0000043E, + 11184: 0x0000043F, + 11185: 0x00000440, + 11186: 0x00000441, + 11187: 0x00000442, + 11188: 0x00000443, + 11189: 0x00000444, + 11190: 0x00000445, + 11191: 0x00000446, + 11192: 0x00000447, + 11193: 0x00000448, + 11194: 0x00000449, + 11195: 0x0000044A, + 11196: 0x0000044B, + 11197: 0x0000044C, + 11198: 0x0000044D, + 11199: 0x0000044E, + 11200: 0x0000044F, + 11201: 0x000021E7, + 11202: 0x000021B8, + 11203: 0x000021B9, + 11204: 0x000031CF, + 11205: 0x000200CC, + 11206: 0x00004E5A, + 11207: 0x0002008A, + 11208: 0x00005202, + 11209: 0x00004491, + 11210: 0x00009FB0, + 11211: 0x00005188, + 11212: 0x00009FB1, + 11213: 0x00027607, + 11254: 0x0000FFE2, + 11255: 0x0000FFE4, + 11256: 0x0000FF07, + 11257: 0x0000FF02, + 11258: 0x00003231, + 11259: 0x00002116, + 11260: 0x00002121, + 11261: 0x0000309B, + 11262: 0x0000309C, + 11263: 0x00002E80, + 11264: 0x00002E84, + 11265: 0x00002E86, + 11266: 0x00002E87, + 11267: 0x00002E88, + 11268: 0x00002E8A, + 11269: 0x00002E8C, + 11270: 0x00002E8D, + 11271: 0x00002E95, + 11272: 0x00002E9C, + 11273: 0x00002E9D, + 11274: 0x00002EA5, + 11275: 0x00002EA7, + 11276: 0x00002EAA, + 11277: 0x00002EAC, + 11278: 0x00002EAE, + 11279: 0x00002EB6, + 11280: 0x00002EBC, + 11281: 0x00002EBE, + 11282: 0x00002EC6, + 11283: 0x00002ECA, + 11284: 0x00002ECC, + 11285: 0x00002ECD, + 11286: 0x00002ECF, + 11287: 0x00002ED6, + 11288: 0x00002ED7, + 11289: 0x00002EDE, + 11290: 0x00002EE3, + 11294: 0x00000283, + 11295: 0x00000250, + 11296: 0x0000025B, + 11297: 0x00000254, + 11298: 0x00000275, + 11299: 0x00000153, + 11300: 0x000000F8, + 11301: 0x0000014B, + 11302: 0x0000028A, + 11303: 0x0000026A, + 11304: 0x00004E42, + 11305: 0x00004E5C, + 11306: 0x000051F5, + 11307: 0x0000531A, + 11308: 0x00005382, + 11309: 0x00004E07, + 11310: 0x00004E0C, + 11311: 0x00004E47, + 11312: 0x00004E8D, + 11313: 0x000056D7, + 11314: 0x0000FA0C, + 11315: 0x00005C6E, + 11316: 0x00005F73, + 11317: 0x00004E0F, + 11318: 0x00005187, + 11319: 0x00004E0E, + 11320: 0x00004E2E, + 11321: 0x00004E93, + 11322: 0x00004EC2, + 11323: 0x00004EC9, + 11324: 0x00004EC8, + 11325: 0x00005198, + 11326: 0x000052FC, + 11327: 0x0000536C, + 11328: 0x000053B9, + 11329: 0x00005720, + 11330: 0x00005903, + 11331: 0x0000592C, + 11332: 0x00005C10, + 11333: 0x00005DFF, + 11334: 0x000065E1, + 11335: 0x00006BB3, + 11336: 0x00006BCC, + 11337: 0x00006C14, + 11338: 0x0000723F, + 11339: 0x00004E31, + 11340: 0x00004E3C, + 11341: 0x00004EE8, + 11342: 0x00004EDC, + 11343: 0x00004EE9, + 11344: 0x00004EE1, + 11345: 0x00004EDD, + 11346: 0x00004EDA, + 11347: 0x0000520C, + 11348: 0x0000531C, + 11349: 0x0000534C, + 11350: 0x00005722, + 11351: 0x00005723, + 11352: 0x00005917, + 11353: 0x0000592F, + 11354: 0x00005B81, + 11355: 0x00005B84, + 11356: 0x00005C12, + 11357: 0x00005C3B, + 11358: 0x00005C74, + 11359: 0x00005C73, + 11360: 0x00005E04, + 11361: 0x00005E80, + 11362: 0x00005E82, + 11363: 0x00005FC9, + 11364: 0x00006209, + 11365: 0x00006250, + 11366: 0x00006C15, + 11367: 0x00006C36, + 11368: 0x00006C43, + 11369: 0x00006C3F, + 11370: 0x00006C3B, + 11371: 0x000072AE, + 11372: 0x000072B0, + 11373: 0x0000738A, + 11374: 0x000079B8, + 11375: 0x0000808A, + 11376: 0x0000961E, + 11377: 0x00004F0E, + 11378: 0x00004F18, + 11379: 0x00004F2C, + 11380: 0x00004EF5, + 11381: 0x00004F14, + 11382: 0x00004EF1, + 11383: 0x00004F00, + 11384: 0x00004EF7, + 11385: 0x00004F08, + 11386: 0x00004F1D, + 11387: 0x00004F02, + 11388: 0x00004F05, + 11389: 0x00004F22, + 11390: 0x00004F13, + 11391: 0x00004F04, + 11392: 0x00004EF4, + 11393: 0x00004F12, + 11394: 0x000051B1, + 11395: 0x00005213, + 11396: 0x00005209, + 11397: 0x00005210, + 11398: 0x000052A6, + 11399: 0x00005322, + 11400: 0x0000531F, + 11401: 0x0000534D, + 11402: 0x0000538A, + 11403: 0x00005407, + 11404: 0x000056E1, + 11405: 0x000056DF, + 11406: 0x0000572E, + 11407: 0x0000572A, + 11408: 0x00005734, + 11409: 0x0000593C, + 11410: 0x00005980, + 11411: 0x0000597C, + 11412: 0x00005985, + 11413: 0x0000597B, + 11414: 0x0000597E, + 11415: 0x00005977, + 11416: 0x0000597F, + 11417: 0x00005B56, + 11418: 0x00005C15, + 11419: 0x00005C25, + 11420: 0x00005C7C, + 11421: 0x00005C7A, + 11422: 0x00005C7B, + 11423: 0x00005C7E, + 11424: 0x00005DDF, + 11425: 0x00005E75, + 11426: 0x00005E84, + 11427: 0x00005F02, + 11428: 0x00005F1A, + 11429: 0x00005F74, + 11430: 0x00005FD5, + 11431: 0x00005FD4, + 11432: 0x00005FCF, + 11433: 0x0000625C, + 11434: 0x0000625E, + 11435: 0x00006264, + 11436: 0x00006261, + 11437: 0x00006266, + 11438: 0x00006262, + 11439: 0x00006259, + 11440: 0x00006260, + 11441: 0x0000625A, + 11442: 0x00006265, + 11443: 0x000065EF, + 11444: 0x000065EE, + 11445: 0x0000673E, + 11446: 0x00006739, + 11447: 0x00006738, + 11448: 0x0000673B, + 11449: 0x0000673A, + 11450: 0x0000673F, + 11451: 0x0000673C, + 11452: 0x00006733, + 11453: 0x00006C18, + 11454: 0x00006C46, + 11455: 0x00006C52, + 11456: 0x00006C5C, + 11457: 0x00006C4F, + 11458: 0x00006C4A, + 11459: 0x00006C54, + 11460: 0x00006C4B, + 11461: 0x00006C4C, + 11462: 0x00007071, + 11463: 0x0000725E, + 11464: 0x000072B4, + 11465: 0x000072B5, + 11466: 0x0000738E, + 11467: 0x0000752A, + 11468: 0x0000767F, + 11469: 0x00007A75, + 11470: 0x00007F51, + 11471: 0x00008278, + 11472: 0x0000827C, + 11473: 0x00008280, + 11474: 0x0000827D, + 11475: 0x0000827F, + 11476: 0x0000864D, + 11477: 0x0000897E, + 11478: 0x00009099, + 11479: 0x00009097, + 11480: 0x00009098, + 11481: 0x0000909B, + 11482: 0x00009094, + 11483: 0x00009622, + 11484: 0x00009624, + 11485: 0x00009620, + 11486: 0x00009623, + 11487: 0x00004F56, + 11488: 0x00004F3B, + 11489: 0x00004F62, + 11490: 0x00004F49, + 11491: 0x00004F53, + 11492: 0x00004F64, + 11493: 0x00004F3E, + 11494: 0x00004F67, + 11495: 0x00004F52, + 11496: 0x00004F5F, + 11497: 0x00004F41, + 11498: 0x00004F58, + 11499: 0x00004F2D, + 11500: 0x00004F33, + 11501: 0x00004F3F, + 11502: 0x00004F61, + 11503: 0x0000518F, + 11504: 0x000051B9, + 11505: 0x0000521C, + 11506: 0x0000521E, + 11507: 0x00005221, + 11508: 0x000052AD, + 11509: 0x000052AE, + 11510: 0x00005309, + 11511: 0x00005363, + 11512: 0x00005372, + 11513: 0x0000538E, + 11514: 0x0000538F, + 11515: 0x00005430, + 11516: 0x00005437, + 11517: 0x0000542A, + 11518: 0x00005454, + 11519: 0x00005445, + 11520: 0x00005419, + 11521: 0x0000541C, + 11522: 0x00005425, + 11523: 0x00005418, + 11524: 0x0000543D, + 11525: 0x0000544F, + 11526: 0x00005441, + 11527: 0x00005428, + 11528: 0x00005424, + 11529: 0x00005447, + 11530: 0x000056EE, + 11531: 0x000056E7, + 11532: 0x000056E5, + 11533: 0x00005741, + 11534: 0x00005745, + 11535: 0x0000574C, + 11536: 0x00005749, + 11537: 0x0000574B, + 11538: 0x00005752, + 11539: 0x00005906, + 11540: 0x00005940, + 11541: 0x000059A6, + 11542: 0x00005998, + 11543: 0x000059A0, + 11544: 0x00005997, + 11545: 0x0000598E, + 11546: 0x000059A2, + 11547: 0x00005990, + 11548: 0x0000598F, + 11549: 0x000059A7, + 11550: 0x000059A1, + 11551: 0x00005B8E, + 11552: 0x00005B92, + 11553: 0x00005C28, + 11554: 0x00005C2A, + 11555: 0x00005C8D, + 11556: 0x00005C8F, + 11557: 0x00005C88, + 11558: 0x00005C8B, + 11559: 0x00005C89, + 11560: 0x00005C92, + 11561: 0x00005C8A, + 11562: 0x00005C86, + 11563: 0x00005C93, + 11564: 0x00005C95, + 11565: 0x00005DE0, + 11566: 0x00005E0A, + 11567: 0x00005E0E, + 11568: 0x00005E8B, + 11569: 0x00005E89, + 11570: 0x00005E8C, + 11571: 0x00005E88, + 11572: 0x00005E8D, + 11573: 0x00005F05, + 11574: 0x00005F1D, + 11575: 0x00005F78, + 11576: 0x00005F76, + 11577: 0x00005FD2, + 11578: 0x00005FD1, + 11579: 0x00005FD0, + 11580: 0x00005FED, + 11581: 0x00005FE8, + 11582: 0x00005FEE, + 11583: 0x00005FF3, + 11584: 0x00005FE1, + 11585: 0x00005FE4, + 11586: 0x00005FE3, + 11587: 0x00005FFA, + 11588: 0x00005FEF, + 11589: 0x00005FF7, + 11590: 0x00005FFB, + 11591: 0x00006000, + 11592: 0x00005FF4, + 11593: 0x0000623A, + 11594: 0x00006283, + 11595: 0x0000628C, + 11596: 0x0000628E, + 11597: 0x0000628F, + 11598: 0x00006294, + 11599: 0x00006287, + 11600: 0x00006271, + 11601: 0x0000627B, + 11602: 0x0000627A, + 11603: 0x00006270, + 11604: 0x00006281, + 11605: 0x00006288, + 11606: 0x00006277, + 11607: 0x0000627D, + 11608: 0x00006272, + 11609: 0x00006274, + 11610: 0x00006537, + 11611: 0x000065F0, + 11612: 0x000065F4, + 11613: 0x000065F3, + 11614: 0x000065F2, + 11615: 0x000065F5, + 11616: 0x00006745, + 11617: 0x00006747, + 11618: 0x00006759, + 11619: 0x00006755, + 11620: 0x0000674C, + 11621: 0x00006748, + 11622: 0x0000675D, + 11623: 0x0000674D, + 11624: 0x0000675A, + 11625: 0x0000674B, + 11626: 0x00006BD0, + 11627: 0x00006C19, + 11628: 0x00006C1A, + 11629: 0x00006C78, + 11630: 0x00006C67, + 11631: 0x00006C6B, + 11632: 0x00006C84, + 11633: 0x00006C8B, + 11634: 0x00006C8F, + 11635: 0x00006C71, + 11636: 0x00006C6F, + 11637: 0x00006C69, + 11638: 0x00006C9A, + 11639: 0x00006C6D, + 11640: 0x00006C87, + 11641: 0x00006C95, + 11642: 0x00006C9C, + 11643: 0x00006C66, + 11644: 0x00006C73, + 11645: 0x00006C65, + 11646: 0x00006C7B, + 11647: 0x00006C8E, + 11648: 0x00007074, + 11649: 0x0000707A, + 11650: 0x00007263, + 11651: 0x000072BF, + 11652: 0x000072BD, + 11653: 0x000072C3, + 11654: 0x000072C6, + 11655: 0x000072C1, + 11656: 0x000072BA, + 11657: 0x000072C5, + 11658: 0x00007395, + 11659: 0x00007397, + 11660: 0x00007393, + 11661: 0x00007394, + 11662: 0x00007392, + 11663: 0x0000753A, + 11664: 0x00007539, + 11665: 0x00007594, + 11666: 0x00007595, + 11667: 0x00007681, + 11668: 0x0000793D, + 11669: 0x00008034, + 11670: 0x00008095, + 11671: 0x00008099, + 11672: 0x00008090, + 11673: 0x00008092, + 11674: 0x0000809C, + 11675: 0x00008290, + 11676: 0x0000828F, + 11677: 0x00008285, + 11678: 0x0000828E, + 11679: 0x00008291, + 11680: 0x00008293, + 11681: 0x0000828A, + 11682: 0x00008283, + 11683: 0x00008284, + 11684: 0x00008C78, + 11685: 0x00008FC9, + 11686: 0x00008FBF, + 11687: 0x0000909F, + 11688: 0x000090A1, + 11689: 0x000090A5, + 11690: 0x0000909E, + 11691: 0x000090A7, + 11692: 0x000090A0, + 11693: 0x00009630, + 11694: 0x00009628, + 11695: 0x0000962F, + 11696: 0x0000962D, + 11697: 0x00004E33, + 11698: 0x00004F98, + 11699: 0x00004F7C, + 11700: 0x00004F85, + 11701: 0x00004F7D, + 11702: 0x00004F80, + 11703: 0x00004F87, + 11704: 0x00004F76, + 11705: 0x00004F74, + 11706: 0x00004F89, + 11707: 0x00004F84, + 11708: 0x00004F77, + 11709: 0x00004F4C, + 11710: 0x00004F97, + 11711: 0x00004F6A, + 11712: 0x00004F9A, + 11713: 0x00004F79, + 11714: 0x00004F81, + 11715: 0x00004F78, + 11716: 0x00004F90, + 11717: 0x00004F9C, + 11718: 0x00004F94, + 11719: 0x00004F9E, + 11720: 0x00004F92, + 11721: 0x00004F82, + 11722: 0x00004F95, + 11723: 0x00004F6B, + 11724: 0x00004F6E, + 11725: 0x0000519E, + 11726: 0x000051BC, + 11727: 0x000051BE, + 11728: 0x00005235, + 11729: 0x00005232, + 11730: 0x00005233, + 11731: 0x00005246, + 11732: 0x00005231, + 11733: 0x000052BC, + 11734: 0x0000530A, + 11735: 0x0000530B, + 11736: 0x0000533C, + 11737: 0x00005392, + 11738: 0x00005394, + 11739: 0x00005487, + 11740: 0x0000547F, + 11741: 0x00005481, + 11742: 0x00005491, + 11743: 0x00005482, + 11744: 0x00005488, + 11745: 0x0000546B, + 11746: 0x0000547A, + 11747: 0x0000547E, + 11748: 0x00005465, + 11749: 0x0000546C, + 11750: 0x00005474, + 11751: 0x00005466, + 11752: 0x0000548D, + 11753: 0x0000546F, + 11754: 0x00005461, + 11755: 0x00005460, + 11756: 0x00005498, + 11757: 0x00005463, + 11758: 0x00005467, + 11759: 0x00005464, + 11760: 0x000056F7, + 11761: 0x000056F9, + 11762: 0x0000576F, + 11763: 0x00005772, + 11764: 0x0000576D, + 11765: 0x0000576B, + 11766: 0x00005771, + 11767: 0x00005770, + 11768: 0x00005776, + 11769: 0x00005780, + 11770: 0x00005775, + 11771: 0x0000577B, + 11772: 0x00005773, + 11773: 0x00005774, + 11774: 0x00005762, + 11775: 0x00005768, + 11776: 0x0000577D, + 11777: 0x0000590C, + 11778: 0x00005945, + 11779: 0x000059B5, + 11780: 0x000059BA, + 11781: 0x000059CF, + 11782: 0x000059CE, + 11783: 0x000059B2, + 11784: 0x000059CC, + 11785: 0x000059C1, + 11786: 0x000059B6, + 11787: 0x000059BC, + 11788: 0x000059C3, + 11789: 0x000059D6, + 11790: 0x000059B1, + 11791: 0x000059BD, + 11792: 0x000059C0, + 11793: 0x000059C8, + 11794: 0x000059B4, + 11795: 0x000059C7, + 11796: 0x00005B62, + 11797: 0x00005B65, + 11798: 0x00005B93, + 11799: 0x00005B95, + 11800: 0x00005C44, + 11801: 0x00005C47, + 11802: 0x00005CAE, + 11803: 0x00005CA4, + 11804: 0x00005CA0, + 11805: 0x00005CB5, + 11806: 0x00005CAF, + 11807: 0x00005CA8, + 11808: 0x00005CAC, + 11809: 0x00005C9F, + 11810: 0x00005CA3, + 11811: 0x00005CAD, + 11812: 0x00005CA2, + 11813: 0x00005CAA, + 11814: 0x00005CA7, + 11815: 0x00005C9D, + 11816: 0x00005CA5, + 11817: 0x00005CB6, + 11818: 0x00005CB0, + 11819: 0x00005CA6, + 11820: 0x00005E17, + 11821: 0x00005E14, + 11822: 0x00005E19, + 11823: 0x00005F28, + 11824: 0x00005F22, + 11825: 0x00005F23, + 11826: 0x00005F24, + 11827: 0x00005F54, + 11828: 0x00005F82, + 11829: 0x00005F7E, + 11830: 0x00005F7D, + 11831: 0x00005FDE, + 11832: 0x00005FE5, + 11833: 0x0000602D, + 11834: 0x00006026, + 11835: 0x00006019, + 11836: 0x00006032, + 11837: 0x0000600B, + 11838: 0x00006034, + 11839: 0x0000600A, + 11840: 0x00006017, + 11841: 0x00006033, + 11842: 0x0000601A, + 11843: 0x0000601E, + 11844: 0x0000602C, + 11845: 0x00006022, + 11846: 0x0000600D, + 11847: 0x00006010, + 11848: 0x0000602E, + 11849: 0x00006013, + 11850: 0x00006011, + 11851: 0x0000600C, + 11852: 0x00006009, + 11853: 0x0000601C, + 11854: 0x00006214, + 11855: 0x0000623D, + 11856: 0x000062AD, + 11857: 0x000062B4, + 11858: 0x000062D1, + 11859: 0x000062BE, + 11860: 0x000062AA, + 11861: 0x000062B6, + 11862: 0x000062CA, + 11863: 0x000062AE, + 11864: 0x000062B3, + 11865: 0x000062AF, + 11866: 0x000062BB, + 11867: 0x000062A9, + 11868: 0x000062B0, + 11869: 0x000062B8, + 11870: 0x0000653D, + 11871: 0x000065A8, + 11872: 0x000065BB, + 11873: 0x00006609, + 11874: 0x000065FC, + 11875: 0x00006604, + 11876: 0x00006612, + 11877: 0x00006608, + 11878: 0x000065FB, + 11879: 0x00006603, + 11880: 0x0000660B, + 11881: 0x0000660D, + 11882: 0x00006605, + 11883: 0x000065FD, + 11884: 0x00006611, + 11885: 0x00006610, + 11886: 0x000066F6, + 11887: 0x0000670A, + 11888: 0x00006785, + 11889: 0x0000676C, + 11890: 0x0000678E, + 11891: 0x00006792, + 11892: 0x00006776, + 11893: 0x0000677B, + 11894: 0x00006798, + 11895: 0x00006786, + 11896: 0x00006784, + 11897: 0x00006774, + 11898: 0x0000678D, + 11899: 0x0000678C, + 11900: 0x0000677A, + 11901: 0x0000679F, + 11902: 0x00006791, + 11903: 0x00006799, + 11904: 0x00006783, + 11905: 0x0000677D, + 11906: 0x00006781, + 11907: 0x00006778, + 11908: 0x00006779, + 11909: 0x00006794, + 11910: 0x00006B25, + 11911: 0x00006B80, + 11912: 0x00006B7E, + 11913: 0x00006BDE, + 11914: 0x00006C1D, + 11915: 0x00006C93, + 11916: 0x00006CEC, + 11917: 0x00006CEB, + 11918: 0x00006CEE, + 11919: 0x00006CD9, + 11920: 0x00006CB6, + 11921: 0x00006CD4, + 11922: 0x00006CAD, + 11923: 0x00006CE7, + 11924: 0x00006CB7, + 11925: 0x00006CD0, + 11926: 0x00006CC2, + 11927: 0x00006CBA, + 11928: 0x00006CC3, + 11929: 0x00006CC6, + 11930: 0x00006CED, + 11931: 0x00006CF2, + 11932: 0x00006CD2, + 11933: 0x00006CDD, + 11934: 0x00006CB4, + 11935: 0x00006C8A, + 11936: 0x00006C9D, + 11937: 0x00006C80, + 11938: 0x00006CDE, + 11939: 0x00006CC0, + 11940: 0x00006D30, + 11941: 0x00006CCD, + 11942: 0x00006CC7, + 11943: 0x00006CB0, + 11944: 0x00006CF9, + 11945: 0x00006CCF, + 11946: 0x00006CE9, + 11947: 0x00006CD1, + 11948: 0x00007094, + 11949: 0x00007098, + 11950: 0x00007085, + 11951: 0x00007093, + 11952: 0x00007086, + 11953: 0x00007084, + 11954: 0x00007091, + 11955: 0x00007096, + 11956: 0x00007082, + 11957: 0x0000709A, + 11958: 0x00007083, + 11959: 0x0000726A, + 11960: 0x000072D6, + 11961: 0x000072CB, + 11962: 0x000072D8, + 11963: 0x000072C9, + 11964: 0x000072DC, + 11965: 0x000072D2, + 11966: 0x000072D4, + 11967: 0x000072DA, + 11968: 0x000072CC, + 11969: 0x000072D1, + 11970: 0x000073A4, + 11971: 0x000073A1, + 11972: 0x000073AD, + 11973: 0x000073A6, + 11974: 0x000073A2, + 11975: 0x000073A0, + 11976: 0x000073AC, + 11977: 0x0000739D, + 11978: 0x000074DD, + 11979: 0x000074E8, + 11980: 0x0000753F, + 11981: 0x00007540, + 11982: 0x0000753E, + 11983: 0x0000758C, + 11984: 0x00007598, + 11985: 0x000076AF, + 11986: 0x000076F3, + 11987: 0x000076F1, + 11988: 0x000076F0, + 11989: 0x000076F5, + 11990: 0x000077F8, + 11991: 0x000077FC, + 11992: 0x000077F9, + 11993: 0x000077FB, + 11994: 0x000077FA, + 11995: 0x000077F7, + 11996: 0x00007942, + 11997: 0x0000793F, + 11998: 0x000079C5, + 11999: 0x00007A78, + 12000: 0x00007A7B, + 12001: 0x00007AFB, + 12002: 0x00007C75, + 12003: 0x00007CFD, + 12004: 0x00008035, + 12005: 0x0000808F, + 12006: 0x000080AE, + 12007: 0x000080A3, + 12008: 0x000080B8, + 12009: 0x000080B5, + 12010: 0x000080AD, + 12011: 0x00008220, + 12012: 0x000082A0, + 12013: 0x000082C0, + 12014: 0x000082AB, + 12015: 0x0000829A, + 12016: 0x00008298, + 12017: 0x0000829B, + 12018: 0x000082B5, + 12019: 0x000082A7, + 12020: 0x000082AE, + 12021: 0x000082BC, + 12022: 0x0000829E, + 12023: 0x000082BA, + 12024: 0x000082B4, + 12025: 0x000082A8, + 12026: 0x000082A1, + 12027: 0x000082A9, + 12028: 0x000082C2, + 12029: 0x000082A4, + 12030: 0x000082C3, + 12031: 0x000082B6, + 12032: 0x000082A2, + 12033: 0x00008670, + 12034: 0x0000866F, + 12035: 0x0000866D, + 12036: 0x0000866E, + 12037: 0x00008C56, + 12038: 0x00008FD2, + 12039: 0x00008FCB, + 12040: 0x00008FD3, + 12041: 0x00008FCD, + 12042: 0x00008FD6, + 12043: 0x00008FD5, + 12044: 0x00008FD7, + 12045: 0x000090B2, + 12046: 0x000090B4, + 12047: 0x000090AF, + 12048: 0x000090B3, + 12049: 0x000090B0, + 12050: 0x00009639, + 12051: 0x0000963D, + 12052: 0x0000963C, + 12053: 0x0000963A, + 12054: 0x00009643, + 12055: 0x00004FCD, + 12056: 0x00004FC5, + 12057: 0x00004FD3, + 12058: 0x00004FB2, + 12059: 0x00004FC9, + 12060: 0x00004FCB, + 12061: 0x00004FC1, + 12062: 0x00004FD4, + 12063: 0x00004FDC, + 12064: 0x00004FD9, + 12065: 0x00004FBB, + 12066: 0x00004FB3, + 12067: 0x00004FDB, + 12068: 0x00004FC7, + 12069: 0x00004FD6, + 12070: 0x00004FBA, + 12071: 0x00004FC0, + 12072: 0x00004FB9, + 12073: 0x00004FEC, + 12074: 0x00005244, + 12075: 0x00005249, + 12076: 0x000052C0, + 12077: 0x000052C2, + 12078: 0x0000533D, + 12079: 0x0000537C, + 12080: 0x00005397, + 12081: 0x00005396, + 12082: 0x00005399, + 12083: 0x00005398, + 12084: 0x000054BA, + 12085: 0x000054A1, + 12086: 0x000054AD, + 12087: 0x000054A5, + 12088: 0x000054CF, + 12089: 0x000054C3, + 12090: 0x0000830D, + 12091: 0x000054B7, + 12092: 0x000054AE, + 12093: 0x000054D6, + 12094: 0x000054B6, + 12095: 0x000054C5, + 12096: 0x000054C6, + 12097: 0x000054A0, + 12098: 0x00005470, + 12099: 0x000054BC, + 12100: 0x000054A2, + 12101: 0x000054BE, + 12102: 0x00005472, + 12103: 0x000054DE, + 12104: 0x000054B0, + 12105: 0x000057B5, + 12106: 0x0000579E, + 12107: 0x0000579F, + 12108: 0x000057A4, + 12109: 0x0000578C, + 12110: 0x00005797, + 12111: 0x0000579D, + 12112: 0x0000579B, + 12113: 0x00005794, + 12114: 0x00005798, + 12115: 0x0000578F, + 12116: 0x00005799, + 12117: 0x000057A5, + 12118: 0x0000579A, + 12119: 0x00005795, + 12120: 0x000058F4, + 12121: 0x0000590D, + 12122: 0x00005953, + 12123: 0x000059E1, + 12124: 0x000059DE, + 12125: 0x000059EE, + 12126: 0x00005A00, + 12127: 0x000059F1, + 12128: 0x000059DD, + 12129: 0x000059FA, + 12130: 0x000059FD, + 12131: 0x000059FC, + 12132: 0x000059F6, + 12133: 0x000059E4, + 12134: 0x000059F2, + 12135: 0x000059F7, + 12136: 0x000059DB, + 12137: 0x000059E9, + 12138: 0x000059F3, + 12139: 0x000059F5, + 12140: 0x000059E0, + 12141: 0x000059FE, + 12142: 0x000059F4, + 12143: 0x000059ED, + 12144: 0x00005BA8, + 12145: 0x00005C4C, + 12146: 0x00005CD0, + 12147: 0x00005CD8, + 12148: 0x00005CCC, + 12149: 0x00005CD7, + 12150: 0x00005CCB, + 12151: 0x00005CDB, + 12152: 0x00005CDE, + 12153: 0x00005CDA, + 12154: 0x00005CC9, + 12155: 0x00005CC7, + 12156: 0x00005CCA, + 12157: 0x00005CD6, + 12158: 0x00005CD3, + 12159: 0x00005CD4, + 12160: 0x00005CCF, + 12161: 0x00005CC8, + 12162: 0x00005CC6, + 12163: 0x00005CCE, + 12164: 0x00005CDF, + 12165: 0x00005CF8, + 12166: 0x00005DF9, + 12167: 0x00005E21, + 12168: 0x00005E22, + 12169: 0x00005E23, + 12170: 0x00005E20, + 12171: 0x00005E24, + 12172: 0x00005EB0, + 12173: 0x00005EA4, + 12174: 0x00005EA2, + 12175: 0x00005E9B, + 12176: 0x00005EA3, + 12177: 0x00005EA5, + 12178: 0x00005F07, + 12179: 0x00005F2E, + 12180: 0x00005F56, + 12181: 0x00005F86, + 12182: 0x00006037, + 12183: 0x00006039, + 12184: 0x00006054, + 12185: 0x00006072, + 12186: 0x0000605E, + 12187: 0x00006045, + 12188: 0x00006053, + 12189: 0x00006047, + 12190: 0x00006049, + 12191: 0x0000605B, + 12192: 0x0000604C, + 12193: 0x00006040, + 12194: 0x00006042, + 12195: 0x0000605F, + 12196: 0x00006024, + 12197: 0x00006044, + 12198: 0x00006058, + 12199: 0x00006066, + 12200: 0x0000606E, + 12201: 0x00006242, + 12202: 0x00006243, + 12203: 0x000062CF, + 12204: 0x0000630D, + 12205: 0x0000630B, + 12206: 0x000062F5, + 12207: 0x0000630E, + 12208: 0x00006303, + 12209: 0x000062EB, + 12210: 0x000062F9, + 12211: 0x0000630F, + 12212: 0x0000630C, + 12213: 0x000062F8, + 12214: 0x000062F6, + 12215: 0x00006300, + 12216: 0x00006313, + 12217: 0x00006314, + 12218: 0x000062FA, + 12219: 0x00006315, + 12220: 0x000062FB, + 12221: 0x000062F0, + 12222: 0x00006541, + 12223: 0x00006543, + 12224: 0x000065AA, + 12225: 0x000065BF, + 12226: 0x00006636, + 12227: 0x00006621, + 12228: 0x00006632, + 12229: 0x00006635, + 12230: 0x0000661C, + 12231: 0x00006626, + 12232: 0x00006622, + 12233: 0x00006633, + 12234: 0x0000662B, + 12235: 0x0000663A, + 12236: 0x0000661D, + 12237: 0x00006634, + 12238: 0x00006639, + 12239: 0x0000662E, + 12240: 0x0000670F, + 12241: 0x00006710, + 12242: 0x000067C1, + 12243: 0x000067F2, + 12244: 0x000067C8, + 12245: 0x000067BA, + 12246: 0x000067DC, + 12247: 0x000067BB, + 12248: 0x000067F8, + 12249: 0x000067D8, + 12250: 0x000067C0, + 12251: 0x000067B7, + 12252: 0x000067C5, + 12253: 0x000067EB, + 12254: 0x000067E4, + 12255: 0x000067DF, + 12256: 0x000067B5, + 12257: 0x000067CD, + 12258: 0x000067B3, + 12259: 0x000067F7, + 12260: 0x000067F6, + 12261: 0x000067EE, + 12262: 0x000067E3, + 12263: 0x000067C2, + 12264: 0x000067B9, + 12265: 0x000067CE, + 12266: 0x000067E7, + 12267: 0x000067F0, + 12268: 0x000067B2, + 12269: 0x000067FC, + 12270: 0x000067C6, + 12271: 0x000067ED, + 12272: 0x000067CC, + 12273: 0x000067AE, + 12274: 0x000067E6, + 12275: 0x000067DB, + 12276: 0x000067FA, + 12277: 0x000067C9, + 12278: 0x000067CA, + 12279: 0x000067C3, + 12280: 0x000067EA, + 12281: 0x000067CB, + 12282: 0x00006B28, + 12283: 0x00006B82, + 12284: 0x00006B84, + 12285: 0x00006BB6, + 12286: 0x00006BD6, + 12287: 0x00006BD8, + 12288: 0x00006BE0, + 12289: 0x00006C20, + 12290: 0x00006C21, + 12291: 0x00006D28, + 12292: 0x00006D34, + 12293: 0x00006D2D, + 12294: 0x00006D1F, + 12295: 0x00006D3C, + 12296: 0x00006D3F, + 12297: 0x00006D12, + 12298: 0x00006D0A, + 12299: 0x00006CDA, + 12300: 0x00006D33, + 12301: 0x00006D04, + 12302: 0x00006D19, + 12303: 0x00006D3A, + 12304: 0x00006D1A, + 12305: 0x00006D11, + 12306: 0x00006D00, + 12307: 0x00006D1D, + 12308: 0x00006D42, + 12309: 0x00006D01, + 12310: 0x00006D18, + 12311: 0x00006D37, + 12312: 0x00006D03, + 12313: 0x00006D0F, + 12314: 0x00006D40, + 12315: 0x00006D07, + 12316: 0x00006D20, + 12317: 0x00006D2C, + 12318: 0x00006D08, + 12319: 0x00006D22, + 12320: 0x00006D09, + 12321: 0x00006D10, + 12322: 0x000070B7, + 12323: 0x0000709F, + 12324: 0x000070BE, + 12325: 0x000070B1, + 12326: 0x000070B0, + 12327: 0x000070A1, + 12328: 0x000070B4, + 12329: 0x000070B5, + 12330: 0x000070A9, + 12331: 0x00007241, + 12332: 0x00007249, + 12333: 0x0000724A, + 12334: 0x0000726C, + 12335: 0x00007270, + 12336: 0x00007273, + 12337: 0x0000726E, + 12338: 0x000072CA, + 12339: 0x000072E4, + 12340: 0x000072E8, + 12341: 0x000072EB, + 12342: 0x000072DF, + 12343: 0x000072EA, + 12344: 0x000072E6, + 12345: 0x000072E3, + 12346: 0x00007385, + 12347: 0x000073CC, + 12348: 0x000073C2, + 12349: 0x000073C8, + 12350: 0x000073C5, + 12351: 0x000073B9, + 12352: 0x000073B6, + 12353: 0x000073B5, + 12354: 0x000073B4, + 12355: 0x000073EB, + 12356: 0x000073BF, + 12357: 0x000073C7, + 12358: 0x000073BE, + 12359: 0x000073C3, + 12360: 0x000073C6, + 12361: 0x000073B8, + 12362: 0x000073CB, + 12363: 0x000074EC, + 12364: 0x000074EE, + 12365: 0x0000752E, + 12366: 0x00007547, + 12367: 0x00007548, + 12368: 0x000075A7, + 12369: 0x000075AA, + 12370: 0x00007679, + 12371: 0x000076C4, + 12372: 0x00007708, + 12373: 0x00007703, + 12374: 0x00007704, + 12375: 0x00007705, + 12376: 0x0000770A, + 12377: 0x000076F7, + 12378: 0x000076FB, + 12379: 0x000076FA, + 12380: 0x000077E7, + 12381: 0x000077E8, + 12382: 0x00007806, + 12383: 0x00007811, + 12384: 0x00007812, + 12385: 0x00007805, + 12386: 0x00007810, + 12387: 0x0000780F, + 12388: 0x0000780E, + 12389: 0x00007809, + 12390: 0x00007803, + 12391: 0x00007813, + 12392: 0x0000794A, + 12393: 0x0000794C, + 12394: 0x0000794B, + 12395: 0x00007945, + 12396: 0x00007944, + 12397: 0x000079D5, + 12398: 0x000079CD, + 12399: 0x000079CF, + 12400: 0x000079D6, + 12401: 0x000079CE, + 12402: 0x00007A80, + 12403: 0x00007A7E, + 12404: 0x00007AD1, + 12405: 0x00007B00, + 12406: 0x00007B01, + 12407: 0x00007C7A, + 12408: 0x00007C78, + 12409: 0x00007C79, + 12410: 0x00007C7F, + 12411: 0x00007C80, + 12412: 0x00007C81, + 12413: 0x00007D03, + 12414: 0x00007D08, + 12415: 0x00007D01, + 12416: 0x00007F58, + 12417: 0x00007F91, + 12418: 0x00007F8D, + 12419: 0x00007FBE, + 12420: 0x00008007, + 12421: 0x0000800E, + 12422: 0x0000800F, + 12423: 0x00008014, + 12424: 0x00008037, + 12425: 0x000080D8, + 12426: 0x000080C7, + 12427: 0x000080E0, + 12428: 0x000080D1, + 12429: 0x000080C8, + 12430: 0x000080C2, + 12431: 0x000080D0, + 12432: 0x000080C5, + 12433: 0x000080E3, + 12434: 0x000080D9, + 12435: 0x000080DC, + 12436: 0x000080CA, + 12437: 0x000080D5, + 12438: 0x000080C9, + 12439: 0x000080CF, + 12440: 0x000080D7, + 12441: 0x000080E6, + 12442: 0x000080CD, + 12443: 0x000081FF, + 12444: 0x00008221, + 12445: 0x00008294, + 12446: 0x000082D9, + 12447: 0x000082FE, + 12448: 0x000082F9, + 12449: 0x00008307, + 12450: 0x000082E8, + 12451: 0x00008300, + 12452: 0x000082D5, + 12453: 0x0000833A, + 12454: 0x000082EB, + 12455: 0x000082D6, + 12456: 0x000082F4, + 12457: 0x000082EC, + 12458: 0x000082E1, + 12459: 0x000082F2, + 12460: 0x000082F5, + 12461: 0x0000830C, + 12462: 0x000082FB, + 12463: 0x000082F6, + 12464: 0x000082F0, + 12465: 0x000082EA, + 12466: 0x000082E4, + 12467: 0x000082E0, + 12468: 0x000082FA, + 12469: 0x000082F3, + 12470: 0x000082ED, + 12471: 0x00008677, + 12472: 0x00008674, + 12473: 0x0000867C, + 12474: 0x00008673, + 12475: 0x00008841, + 12476: 0x0000884E, + 12477: 0x00008867, + 12478: 0x0000886A, + 12479: 0x00008869, + 12480: 0x000089D3, + 12481: 0x00008A04, + 12482: 0x00008A07, + 12483: 0x00008D72, + 12484: 0x00008FE3, + 12485: 0x00008FE1, + 12486: 0x00008FEE, + 12487: 0x00008FE0, + 12488: 0x000090F1, + 12489: 0x000090BD, + 12490: 0x000090BF, + 12491: 0x000090D5, + 12492: 0x000090C5, + 12493: 0x000090BE, + 12494: 0x000090C7, + 12495: 0x000090CB, + 12496: 0x000090C8, + 12497: 0x000091D4, + 12498: 0x000091D3, + 12499: 0x00009654, + 12500: 0x0000964F, + 12501: 0x00009651, + 12502: 0x00009653, + 12503: 0x0000964A, + 12504: 0x0000964E, + 12505: 0x0000501E, + 12506: 0x00005005, + 12507: 0x00005007, + 12508: 0x00005013, + 12509: 0x00005022, + 12510: 0x00005030, + 12511: 0x0000501B, + 12512: 0x00004FF5, + 12513: 0x00004FF4, + 12514: 0x00005033, + 12515: 0x00005037, + 12516: 0x0000502C, + 12517: 0x00004FF6, + 12518: 0x00004FF7, + 12519: 0x00005017, + 12520: 0x0000501C, + 12521: 0x00005020, + 12522: 0x00005027, + 12523: 0x00005035, + 12524: 0x0000502F, + 12525: 0x00005031, + 12526: 0x0000500E, + 12527: 0x0000515A, + 12528: 0x00005194, + 12529: 0x00005193, + 12530: 0x000051CA, + 12531: 0x000051C4, + 12532: 0x000051C5, + 12533: 0x000051C8, + 12534: 0x000051CE, + 12535: 0x00005261, + 12536: 0x0000525A, + 12537: 0x00005252, + 12538: 0x0000525E, + 12539: 0x0000525F, + 12540: 0x00005255, + 12541: 0x00005262, + 12542: 0x000052CD, + 12543: 0x0000530E, + 12544: 0x0000539E, + 12545: 0x00005526, + 12546: 0x000054E2, + 12547: 0x00005517, + 12548: 0x00005512, + 12549: 0x000054E7, + 12550: 0x000054F3, + 12551: 0x000054E4, + 12552: 0x0000551A, + 12553: 0x000054FF, + 12554: 0x00005504, + 12555: 0x00005508, + 12556: 0x000054EB, + 12557: 0x00005511, + 12558: 0x00005505, + 12559: 0x000054F1, + 12560: 0x0000550A, + 12561: 0x000054FB, + 12562: 0x000054F7, + 12563: 0x000054F8, + 12564: 0x000054E0, + 12565: 0x0000550E, + 12566: 0x00005503, + 12567: 0x0000550B, + 12568: 0x00005701, + 12569: 0x00005702, + 12570: 0x000057CC, + 12571: 0x00005832, + 12572: 0x000057D5, + 12573: 0x000057D2, + 12574: 0x000057BA, + 12575: 0x000057C6, + 12576: 0x000057BD, + 12577: 0x000057BC, + 12578: 0x000057B8, + 12579: 0x000057B6, + 12580: 0x000057BF, + 12581: 0x000057C7, + 12582: 0x000057D0, + 12583: 0x000057B9, + 12584: 0x000057C1, + 12585: 0x0000590E, + 12586: 0x0000594A, + 12587: 0x00005A19, + 12588: 0x00005A16, + 12589: 0x00005A2D, + 12590: 0x00005A2E, + 12591: 0x00005A15, + 12592: 0x00005A0F, + 12593: 0x00005A17, + 12594: 0x00005A0A, + 12595: 0x00005A1E, + 12596: 0x00005A33, + 12597: 0x00005B6C, + 12598: 0x00005BA7, + 12599: 0x00005BAD, + 12600: 0x00005BAC, + 12601: 0x00005C03, + 12602: 0x00005C56, + 12603: 0x00005C54, + 12604: 0x00005CEC, + 12605: 0x00005CFF, + 12606: 0x00005CEE, + 12607: 0x00005CF1, + 12608: 0x00005CF7, + 12609: 0x00005D00, + 12610: 0x00005CF9, + 12611: 0x00005E29, + 12612: 0x00005E28, + 12613: 0x00005EA8, + 12614: 0x00005EAE, + 12615: 0x00005EAA, + 12616: 0x00005EAC, + 12617: 0x00005F33, + 12618: 0x00005F30, + 12619: 0x00005F67, + 12620: 0x0000605D, + 12621: 0x0000605A, + 12622: 0x00006067, + 12623: 0x00006041, + 12624: 0x000060A2, + 12625: 0x00006088, + 12626: 0x00006080, + 12627: 0x00006092, + 12628: 0x00006081, + 12629: 0x0000609D, + 12630: 0x00006083, + 12631: 0x00006095, + 12632: 0x0000609B, + 12633: 0x00006097, + 12634: 0x00006087, + 12635: 0x0000609C, + 12636: 0x0000608E, + 12637: 0x00006219, + 12638: 0x00006246, + 12639: 0x000062F2, + 12640: 0x00006310, + 12641: 0x00006356, + 12642: 0x0000632C, + 12643: 0x00006344, + 12644: 0x00006345, + 12645: 0x00006336, + 12646: 0x00006343, + 12647: 0x000063E4, + 12648: 0x00006339, + 12649: 0x0000634B, + 12650: 0x0000634A, + 12651: 0x0000633C, + 12652: 0x00006329, + 12653: 0x00006341, + 12654: 0x00006334, + 12655: 0x00006358, + 12656: 0x00006354, + 12657: 0x00006359, + 12658: 0x0000632D, + 12659: 0x00006347, + 12660: 0x00006333, + 12661: 0x0000635A, + 12662: 0x00006351, + 12663: 0x00006338, + 12664: 0x00006357, + 12665: 0x00006340, + 12666: 0x00006348, + 12667: 0x0000654A, + 12668: 0x00006546, + 12669: 0x000065C6, + 12670: 0x000065C3, + 12671: 0x000065C4, + 12672: 0x000065C2, + 12673: 0x0000664A, + 12674: 0x0000665F, + 12675: 0x00006647, + 12676: 0x00006651, + 12677: 0x00006712, + 12678: 0x00006713, + 12679: 0x0000681F, + 12680: 0x0000681A, + 12681: 0x00006849, + 12682: 0x00006832, + 12683: 0x00006833, + 12684: 0x0000683B, + 12685: 0x0000684B, + 12686: 0x0000684F, + 12687: 0x00006816, + 12688: 0x00006831, + 12689: 0x0000681C, + 12690: 0x00006835, + 12691: 0x0000682B, + 12692: 0x0000682D, + 12693: 0x0000682F, + 12694: 0x0000684E, + 12695: 0x00006844, + 12696: 0x00006834, + 12697: 0x0000681D, + 12698: 0x00006812, + 12699: 0x00006814, + 12700: 0x00006826, + 12701: 0x00006828, + 12702: 0x0000682E, + 12703: 0x0000684D, + 12704: 0x0000683A, + 12705: 0x00006825, + 12706: 0x00006820, + 12707: 0x00006B2C, + 12708: 0x00006B2F, + 12709: 0x00006B2D, + 12710: 0x00006B31, + 12711: 0x00006B34, + 12712: 0x00006B6D, + 12713: 0x00008082, + 12714: 0x00006B88, + 12715: 0x00006BE6, + 12716: 0x00006BE4, + 12717: 0x00006BE8, + 12718: 0x00006BE3, + 12719: 0x00006BE2, + 12720: 0x00006BE7, + 12721: 0x00006C25, + 12722: 0x00006D7A, + 12723: 0x00006D63, + 12724: 0x00006D64, + 12725: 0x00006D76, + 12726: 0x00006D0D, + 12727: 0x00006D61, + 12728: 0x00006D92, + 12729: 0x00006D58, + 12730: 0x00006D62, + 12731: 0x00006D6D, + 12732: 0x00006D6F, + 12733: 0x00006D91, + 12734: 0x00006D8D, + 12735: 0x00006DEF, + 12736: 0x00006D7F, + 12737: 0x00006D86, + 12738: 0x00006D5E, + 12739: 0x00006D67, + 12740: 0x00006D60, + 12741: 0x00006D97, + 12742: 0x00006D70, + 12743: 0x00006D7C, + 12744: 0x00006D5F, + 12745: 0x00006D82, + 12746: 0x00006D98, + 12747: 0x00006D2F, + 12748: 0x00006D68, + 12749: 0x00006D8B, + 12750: 0x00006D7E, + 12751: 0x00006D80, + 12752: 0x00006D84, + 12753: 0x00006D16, + 12754: 0x00006D83, + 12755: 0x00006D7B, + 12756: 0x00006D7D, + 12757: 0x00006D75, + 12758: 0x00006D90, + 12759: 0x000070DC, + 12760: 0x000070D3, + 12761: 0x000070D1, + 12762: 0x000070DD, + 12763: 0x000070CB, + 12764: 0x00007F39, + 12765: 0x000070E2, + 12766: 0x000070D7, + 12767: 0x000070D2, + 12768: 0x000070DE, + 12769: 0x000070E0, + 12770: 0x000070D4, + 12771: 0x000070CD, + 12772: 0x000070C5, + 12773: 0x000070C6, + 12774: 0x000070C7, + 12775: 0x000070DA, + 12776: 0x000070CE, + 12777: 0x000070E1, + 12778: 0x00007242, + 12779: 0x00007278, + 12780: 0x00007277, + 12781: 0x00007276, + 12782: 0x00007300, + 12783: 0x000072FA, + 12784: 0x000072F4, + 12785: 0x000072FE, + 12786: 0x000072F6, + 12787: 0x000072F3, + 12788: 0x000072FB, + 12789: 0x00007301, + 12790: 0x000073D3, + 12791: 0x000073D9, + 12792: 0x000073E5, + 12793: 0x000073D6, + 12794: 0x000073BC, + 12795: 0x000073E7, + 12796: 0x000073E3, + 12797: 0x000073E9, + 12798: 0x000073DC, + 12799: 0x000073D2, + 12800: 0x000073DB, + 12801: 0x000073D4, + 12802: 0x000073DD, + 12803: 0x000073DA, + 12804: 0x000073D7, + 12805: 0x000073D8, + 12806: 0x000073E8, + 12807: 0x000074DE, + 12808: 0x000074DF, + 12809: 0x000074F4, + 12810: 0x000074F5, + 12811: 0x00007521, + 12812: 0x0000755B, + 12813: 0x0000755F, + 12814: 0x000075B0, + 12815: 0x000075C1, + 12816: 0x000075BB, + 12817: 0x000075C4, + 12818: 0x000075C0, + 12819: 0x000075BF, + 12820: 0x000075B6, + 12821: 0x000075BA, + 12822: 0x0000768A, + 12823: 0x000076C9, + 12824: 0x0000771D, + 12825: 0x0000771B, + 12826: 0x00007710, + 12827: 0x00007713, + 12828: 0x00007712, + 12829: 0x00007723, + 12830: 0x00007711, + 12831: 0x00007715, + 12832: 0x00007719, + 12833: 0x0000771A, + 12834: 0x00007722, + 12835: 0x00007727, + 12836: 0x00007823, + 12837: 0x0000782C, + 12838: 0x00007822, + 12839: 0x00007835, + 12840: 0x0000782F, + 12841: 0x00007828, + 12842: 0x0000782E, + 12843: 0x0000782B, + 12844: 0x00007821, + 12845: 0x00007829, + 12846: 0x00007833, + 12847: 0x0000782A, + 12848: 0x00007831, + 12849: 0x00007954, + 12850: 0x0000795B, + 12851: 0x0000794F, + 12852: 0x0000795C, + 12853: 0x00007953, + 12854: 0x00007952, + 12855: 0x00007951, + 12856: 0x000079EB, + 12857: 0x000079EC, + 12858: 0x000079E0, + 12859: 0x000079EE, + 12860: 0x000079ED, + 12861: 0x000079EA, + 12862: 0x000079DC, + 12863: 0x000079DE, + 12864: 0x000079DD, + 12865: 0x00007A86, + 12866: 0x00007A89, + 12867: 0x00007A85, + 12868: 0x00007A8B, + 12869: 0x00007A8C, + 12870: 0x00007A8A, + 12871: 0x00007A87, + 12872: 0x00007AD8, + 12873: 0x00007B10, + 12874: 0x00007B04, + 12875: 0x00007B13, + 12876: 0x00007B05, + 12877: 0x00007B0F, + 12878: 0x00007B08, + 12879: 0x00007B0A, + 12880: 0x00007B0E, + 12881: 0x00007B09, + 12882: 0x00007B12, + 12883: 0x00007C84, + 12884: 0x00007C91, + 12885: 0x00007C8A, + 12886: 0x00007C8C, + 12887: 0x00007C88, + 12888: 0x00007C8D, + 12889: 0x00007C85, + 12890: 0x00007D1E, + 12891: 0x00007D1D, + 12892: 0x00007D11, + 12893: 0x00007D0E, + 12894: 0x00007D18, + 12895: 0x00007D16, + 12896: 0x00007D13, + 12897: 0x00007D1F, + 12898: 0x00007D12, + 12899: 0x00007D0F, + 12900: 0x00007D0C, + 12901: 0x00007F5C, + 12902: 0x00007F61, + 12903: 0x00007F5E, + 12904: 0x00007F60, + 12905: 0x00007F5D, + 12906: 0x00007F5B, + 12907: 0x00007F96, + 12908: 0x00007F92, + 12909: 0x00007FC3, + 12910: 0x00007FC2, + 12911: 0x00007FC0, + 12912: 0x00008016, + 12913: 0x0000803E, + 12914: 0x00008039, + 12915: 0x000080FA, + 12916: 0x000080F2, + 12917: 0x000080F9, + 12918: 0x000080F5, + 12919: 0x00008101, + 12920: 0x000080FB, + 12921: 0x00008100, + 12922: 0x00008201, + 12923: 0x0000822F, + 12924: 0x00008225, + 12925: 0x00008333, + 12926: 0x0000832D, + 12927: 0x00008344, + 12928: 0x00008319, + 12929: 0x00008351, + 12930: 0x00008325, + 12931: 0x00008356, + 12932: 0x0000833F, + 12933: 0x00008341, + 12934: 0x00008326, + 12935: 0x0000831C, + 12936: 0x00008322, + 12937: 0x00008342, + 12938: 0x0000834E, + 12939: 0x0000831B, + 12940: 0x0000832A, + 12941: 0x00008308, + 12942: 0x0000833C, + 12943: 0x0000834D, + 12944: 0x00008316, + 12945: 0x00008324, + 12946: 0x00008320, + 12947: 0x00008337, + 12948: 0x0000832F, + 12949: 0x00008329, + 12950: 0x00008347, + 12951: 0x00008345, + 12952: 0x0000834C, + 12953: 0x00008353, + 12954: 0x0000831E, + 12955: 0x0000832C, + 12956: 0x0000834B, + 12957: 0x00008327, + 12958: 0x00008348, + 12959: 0x00008653, + 12960: 0x00008652, + 12961: 0x000086A2, + 12962: 0x000086A8, + 12963: 0x00008696, + 12964: 0x0000868D, + 12965: 0x00008691, + 12966: 0x0000869E, + 12967: 0x00008687, + 12968: 0x00008697, + 12969: 0x00008686, + 12970: 0x0000868B, + 12971: 0x0000869A, + 12972: 0x00008685, + 12973: 0x000086A5, + 12974: 0x00008699, + 12975: 0x000086A1, + 12976: 0x000086A7, + 12977: 0x00008695, + 12978: 0x00008698, + 12979: 0x0000868E, + 12980: 0x0000869D, + 12981: 0x00008690, + 12982: 0x00008694, + 12983: 0x00008843, + 12984: 0x00008844, + 12985: 0x0000886D, + 12986: 0x00008875, + 12987: 0x00008876, + 12988: 0x00008872, + 12989: 0x00008880, + 12990: 0x00008871, + 12991: 0x0000887F, + 12992: 0x0000886F, + 12993: 0x00008883, + 12994: 0x0000887E, + 12995: 0x00008874, + 12996: 0x0000887C, + 12997: 0x00008A12, + 12998: 0x00008C47, + 12999: 0x00008C57, + 13000: 0x00008C7B, + 13001: 0x00008CA4, + 13002: 0x00008CA3, + 13003: 0x00008D76, + 13004: 0x00008D78, + 13005: 0x00008DB5, + 13006: 0x00008DB7, + 13007: 0x00008DB6, + 13008: 0x00008ED1, + 13009: 0x00008ED3, + 13010: 0x00008FFE, + 13011: 0x00008FF5, + 13012: 0x00009002, + 13013: 0x00008FFF, + 13014: 0x00008FFB, + 13015: 0x00009004, + 13016: 0x00008FFC, + 13017: 0x00008FF6, + 13018: 0x000090D6, + 13019: 0x000090E0, + 13020: 0x000090D9, + 13021: 0x000090DA, + 13022: 0x000090E3, + 13023: 0x000090DF, + 13024: 0x000090E5, + 13025: 0x000090D8, + 13026: 0x000090DB, + 13027: 0x000090D7, + 13028: 0x000090DC, + 13029: 0x000090E4, + 13030: 0x00009150, + 13031: 0x0000914E, + 13032: 0x0000914F, + 13033: 0x000091D5, + 13034: 0x000091E2, + 13035: 0x000091DA, + 13036: 0x0000965C, + 13037: 0x0000965F, + 13038: 0x000096BC, + 13039: 0x000098E3, + 13040: 0x00009ADF, + 13041: 0x00009B2F, + 13042: 0x00004E7F, + 13043: 0x00005070, + 13044: 0x0000506A, + 13045: 0x00005061, + 13046: 0x0000505E, + 13047: 0x00005060, + 13048: 0x00005053, + 13049: 0x0000504B, + 13050: 0x0000505D, + 13051: 0x00005072, + 13052: 0x00005048, + 13053: 0x0000504D, + 13054: 0x00005041, + 13055: 0x0000505B, + 13056: 0x0000504A, + 13057: 0x00005062, + 13058: 0x00005015, + 13059: 0x00005045, + 13060: 0x0000505F, + 13061: 0x00005069, + 13062: 0x0000506B, + 13063: 0x00005063, + 13064: 0x00005064, + 13065: 0x00005046, + 13066: 0x00005040, + 13067: 0x0000506E, + 13068: 0x00005073, + 13069: 0x00005057, + 13070: 0x00005051, + 13071: 0x000051D0, + 13072: 0x0000526B, + 13073: 0x0000526D, + 13074: 0x0000526C, + 13075: 0x0000526E, + 13076: 0x000052D6, + 13077: 0x000052D3, + 13078: 0x0000532D, + 13079: 0x0000539C, + 13080: 0x00005575, + 13081: 0x00005576, + 13082: 0x0000553C, + 13083: 0x0000554D, + 13084: 0x00005550, + 13085: 0x00005534, + 13086: 0x0000552A, + 13087: 0x00005551, + 13088: 0x00005562, + 13089: 0x00005536, + 13090: 0x00005535, + 13091: 0x00005530, + 13092: 0x00005552, + 13093: 0x00005545, + 13094: 0x0000550C, + 13095: 0x00005532, + 13096: 0x00005565, + 13097: 0x0000554E, + 13098: 0x00005539, + 13099: 0x00005548, + 13100: 0x0000552D, + 13101: 0x0000553B, + 13102: 0x00005540, + 13103: 0x0000554B, + 13104: 0x0000570A, + 13105: 0x00005707, + 13106: 0x000057FB, + 13107: 0x00005814, + 13108: 0x000057E2, + 13109: 0x000057F6, + 13110: 0x000057DC, + 13111: 0x000057F4, + 13112: 0x00005800, + 13113: 0x000057ED, + 13114: 0x000057FD, + 13115: 0x00005808, + 13116: 0x000057F8, + 13117: 0x0000580B, + 13118: 0x000057F3, + 13119: 0x000057CF, + 13120: 0x00005807, + 13121: 0x000057EE, + 13122: 0x000057E3, + 13123: 0x000057F2, + 13124: 0x000057E5, + 13125: 0x000057EC, + 13126: 0x000057E1, + 13127: 0x0000580E, + 13128: 0x000057FC, + 13129: 0x00005810, + 13130: 0x000057E7, + 13131: 0x00005801, + 13132: 0x0000580C, + 13133: 0x000057F1, + 13134: 0x000057E9, + 13135: 0x000057F0, + 13136: 0x0000580D, + 13137: 0x00005804, + 13138: 0x0000595C, + 13139: 0x00005A60, + 13140: 0x00005A58, + 13141: 0x00005A55, + 13142: 0x00005A67, + 13143: 0x00005A5E, + 13144: 0x00005A38, + 13145: 0x00005A35, + 13146: 0x00005A6D, + 13147: 0x00005A50, + 13148: 0x00005A5F, + 13149: 0x00005A65, + 13150: 0x00005A6C, + 13151: 0x00005A53, + 13152: 0x00005A64, + 13153: 0x00005A57, + 13154: 0x00005A43, + 13155: 0x00005A5D, + 13156: 0x00005A52, + 13157: 0x00005A44, + 13158: 0x00005A5B, + 13159: 0x00005A48, + 13160: 0x00005A8E, + 13161: 0x00005A3E, + 13162: 0x00005A4D, + 13163: 0x00005A39, + 13164: 0x00005A4C, + 13165: 0x00005A70, + 13166: 0x00005A69, + 13167: 0x00005A47, + 13168: 0x00005A51, + 13169: 0x00005A56, + 13170: 0x00005A42, + 13171: 0x00005A5C, + 13172: 0x00005B72, + 13173: 0x00005B6E, + 13174: 0x00005BC1, + 13175: 0x00005BC0, + 13176: 0x00005C59, + 13177: 0x00005D1E, + 13178: 0x00005D0B, + 13179: 0x00005D1D, + 13180: 0x00005D1A, + 13181: 0x00005D20, + 13182: 0x00005D0C, + 13183: 0x00005D28, + 13184: 0x00005D0D, + 13185: 0x00005D26, + 13186: 0x00005D25, + 13187: 0x00005D0F, + 13188: 0x00005D30, + 13189: 0x00005D12, + 13190: 0x00005D23, + 13191: 0x00005D1F, + 13192: 0x00005D2E, + 13193: 0x00005E3E, + 13194: 0x00005E34, + 13195: 0x00005EB1, + 13196: 0x00005EB4, + 13197: 0x00005EB9, + 13198: 0x00005EB2, + 13199: 0x00005EB3, + 13200: 0x00005F36, + 13201: 0x00005F38, + 13202: 0x00005F9B, + 13203: 0x00005F96, + 13204: 0x00005F9F, + 13205: 0x0000608A, + 13206: 0x00006090, + 13207: 0x00006086, + 13208: 0x000060BE, + 13209: 0x000060B0, + 13210: 0x000060BA, + 13211: 0x000060D3, + 13212: 0x000060D4, + 13213: 0x000060CF, + 13214: 0x000060E4, + 13215: 0x000060D9, + 13216: 0x000060DD, + 13217: 0x000060C8, + 13218: 0x000060B1, + 13219: 0x000060DB, + 13220: 0x000060B7, + 13221: 0x000060CA, + 13222: 0x000060BF, + 13223: 0x000060C3, + 13224: 0x000060CD, + 13225: 0x000060C0, + 13226: 0x00006332, + 13227: 0x00006365, + 13228: 0x0000638A, + 13229: 0x00006382, + 13230: 0x0000637D, + 13231: 0x000063BD, + 13232: 0x0000639E, + 13233: 0x000063AD, + 13234: 0x0000639D, + 13235: 0x00006397, + 13236: 0x000063AB, + 13237: 0x0000638E, + 13238: 0x0000636F, + 13239: 0x00006387, + 13240: 0x00006390, + 13241: 0x0000636E, + 13242: 0x000063AF, + 13243: 0x00006375, + 13244: 0x0000639C, + 13245: 0x0000636D, + 13246: 0x000063AE, + 13247: 0x0000637C, + 13248: 0x000063A4, + 13249: 0x0000633B, + 13250: 0x0000639F, + 13251: 0x00006378, + 13252: 0x00006385, + 13253: 0x00006381, + 13254: 0x00006391, + 13255: 0x0000638D, + 13256: 0x00006370, + 13257: 0x00006553, + 13258: 0x000065CD, + 13259: 0x00006665, + 13260: 0x00006661, + 13261: 0x0000665B, + 13262: 0x00006659, + 13263: 0x0000665C, + 13264: 0x00006662, + 13265: 0x00006718, + 13266: 0x00006879, + 13267: 0x00006887, + 13268: 0x00006890, + 13269: 0x0000689C, + 13270: 0x0000686D, + 13271: 0x0000686E, + 13272: 0x000068AE, + 13273: 0x000068AB, + 13274: 0x00006956, + 13275: 0x0000686F, + 13276: 0x000068A3, + 13277: 0x000068AC, + 13278: 0x000068A9, + 13279: 0x00006875, + 13280: 0x00006874, + 13281: 0x000068B2, + 13282: 0x0000688F, + 13283: 0x00006877, + 13284: 0x00006892, + 13285: 0x0000687C, + 13286: 0x0000686B, + 13287: 0x00006872, + 13288: 0x000068AA, + 13289: 0x00006880, + 13290: 0x00006871, + 13291: 0x0000687E, + 13292: 0x0000689B, + 13293: 0x00006896, + 13294: 0x0000688B, + 13295: 0x000068A0, + 13296: 0x00006889, + 13297: 0x000068A4, + 13298: 0x00006878, + 13299: 0x0000687B, + 13300: 0x00006891, + 13301: 0x0000688C, + 13302: 0x0000688A, + 13303: 0x0000687D, + 13304: 0x00006B36, + 13305: 0x00006B33, + 13306: 0x00006B37, + 13307: 0x00006B38, + 13308: 0x00006B91, + 13309: 0x00006B8F, + 13310: 0x00006B8D, + 13311: 0x00006B8E, + 13312: 0x00006B8C, + 13313: 0x00006C2A, + 13314: 0x00006DC0, + 13315: 0x00006DAB, + 13316: 0x00006DB4, + 13317: 0x00006DB3, + 13318: 0x00006E74, + 13319: 0x00006DAC, + 13320: 0x00006DE9, + 13321: 0x00006DE2, + 13322: 0x00006DB7, + 13323: 0x00006DF6, + 13324: 0x00006DD4, + 13325: 0x00006E00, + 13326: 0x00006DC8, + 13327: 0x00006DE0, + 13328: 0x00006DDF, + 13329: 0x00006DD6, + 13330: 0x00006DBE, + 13331: 0x00006DE5, + 13332: 0x00006DDC, + 13333: 0x00006DDD, + 13334: 0x00006DDB, + 13335: 0x00006DF4, + 13336: 0x00006DCA, + 13337: 0x00006DBD, + 13338: 0x00006DED, + 13339: 0x00006DF0, + 13340: 0x00006DBA, + 13341: 0x00006DD5, + 13342: 0x00006DC2, + 13343: 0x00006DCF, + 13344: 0x00006DC9, + 13345: 0x00006DD0, + 13346: 0x00006DF2, + 13347: 0x00006DD3, + 13348: 0x00006DFD, + 13349: 0x00006DD7, + 13350: 0x00006DCD, + 13351: 0x00006DE3, + 13352: 0x00006DBB, + 13353: 0x000070FA, + 13354: 0x0000710D, + 13355: 0x000070F7, + 13356: 0x00007117, + 13357: 0x000070F4, + 13358: 0x0000710C, + 13359: 0x000070F0, + 13360: 0x00007104, + 13361: 0x000070F3, + 13362: 0x00007110, + 13363: 0x000070FC, + 13364: 0x000070FF, + 13365: 0x00007106, + 13366: 0x00007113, + 13367: 0x00007100, + 13368: 0x000070F8, + 13369: 0x000070F6, + 13370: 0x0000710B, + 13371: 0x00007102, + 13372: 0x0000710E, + 13373: 0x0000727E, + 13374: 0x0000727B, + 13375: 0x0000727C, + 13376: 0x0000727F, + 13377: 0x0000731D, + 13378: 0x00007317, + 13379: 0x00007307, + 13380: 0x00007311, + 13381: 0x00007318, + 13382: 0x0000730A, + 13383: 0x00007308, + 13384: 0x000072FF, + 13385: 0x0000730F, + 13386: 0x0000731E, + 13387: 0x00007388, + 13388: 0x000073F6, + 13389: 0x000073F8, + 13390: 0x000073F5, + 13391: 0x00007404, + 13392: 0x00007401, + 13393: 0x000073FD, + 13394: 0x00007407, + 13395: 0x00007400, + 13396: 0x000073FA, + 13397: 0x000073FC, + 13398: 0x000073FF, + 13399: 0x0000740C, + 13400: 0x0000740B, + 13401: 0x000073F4, + 13402: 0x00007408, + 13403: 0x00007564, + 13404: 0x00007563, + 13405: 0x000075CE, + 13406: 0x000075D2, + 13407: 0x000075CF, + 13408: 0x000075CB, + 13409: 0x000075CC, + 13410: 0x000075D1, + 13411: 0x000075D0, + 13412: 0x0000768F, + 13413: 0x00007689, + 13414: 0x000076D3, + 13415: 0x00007739, + 13416: 0x0000772F, + 13417: 0x0000772D, + 13418: 0x00007731, + 13419: 0x00007732, + 13420: 0x00007734, + 13421: 0x00007733, + 13422: 0x0000773D, + 13423: 0x00007725, + 13424: 0x0000773B, + 13425: 0x00007735, + 13426: 0x00007848, + 13427: 0x00007852, + 13428: 0x00007849, + 13429: 0x0000784D, + 13430: 0x0000784A, + 13431: 0x0000784C, + 13432: 0x00007826, + 13433: 0x00007845, + 13434: 0x00007850, + 13435: 0x00007964, + 13436: 0x00007967, + 13437: 0x00007969, + 13438: 0x0000796A, + 13439: 0x00007963, + 13440: 0x0000796B, + 13441: 0x00007961, + 13442: 0x000079BB, + 13443: 0x000079FA, + 13444: 0x000079F8, + 13445: 0x000079F6, + 13446: 0x000079F7, + 13447: 0x00007A8F, + 13448: 0x00007A94, + 13449: 0x00007A90, + 13450: 0x00007B35, + 13451: 0x00007B47, + 13452: 0x00007B34, + 13453: 0x00007B25, + 13454: 0x00007B30, + 13455: 0x00007B22, + 13456: 0x00007B24, + 13457: 0x00007B33, + 13458: 0x00007B18, + 13459: 0x00007B2A, + 13460: 0x00007B1D, + 13461: 0x00007B31, + 13462: 0x00007B2B, + 13463: 0x00007B2D, + 13464: 0x00007B2F, + 13465: 0x00007B32, + 13466: 0x00007B38, + 13467: 0x00007B1A, + 13468: 0x00007B23, + 13469: 0x00007C94, + 13470: 0x00007C98, + 13471: 0x00007C96, + 13472: 0x00007CA3, + 13473: 0x00007D35, + 13474: 0x00007D3D, + 13475: 0x00007D38, + 13476: 0x00007D36, + 13477: 0x00007D3A, + 13478: 0x00007D45, + 13479: 0x00007D2C, + 13480: 0x00007D29, + 13481: 0x00007D41, + 13482: 0x00007D47, + 13483: 0x00007D3E, + 13484: 0x00007D3F, + 13485: 0x00007D4A, + 13486: 0x00007D3B, + 13487: 0x00007D28, + 13488: 0x00007F63, + 13489: 0x00007F95, + 13490: 0x00007F9C, + 13491: 0x00007F9D, + 13492: 0x00007F9B, + 13493: 0x00007FCA, + 13494: 0x00007FCB, + 13495: 0x00007FCD, + 13496: 0x00007FD0, + 13497: 0x00007FD1, + 13498: 0x00007FC7, + 13499: 0x00007FCF, + 13500: 0x00007FC9, + 13501: 0x0000801F, + 13502: 0x0000801E, + 13503: 0x0000801B, + 13504: 0x00008047, + 13505: 0x00008043, + 13506: 0x00008048, + 13507: 0x00008118, + 13508: 0x00008125, + 13509: 0x00008119, + 13510: 0x0000811B, + 13511: 0x0000812D, + 13512: 0x0000811F, + 13513: 0x0000812C, + 13514: 0x0000811E, + 13515: 0x00008121, + 13516: 0x00008115, + 13517: 0x00008127, + 13518: 0x0000811D, + 13519: 0x00008122, + 13520: 0x00008211, + 13521: 0x00008238, + 13522: 0x00008233, + 13523: 0x0000823A, + 13524: 0x00008234, + 13525: 0x00008232, + 13526: 0x00008274, + 13527: 0x00008390, + 13528: 0x000083A3, + 13529: 0x000083A8, + 13530: 0x0000838D, + 13531: 0x0000837A, + 13532: 0x00008373, + 13533: 0x000083A4, + 13534: 0x00008374, + 13535: 0x0000838F, + 13536: 0x00008381, + 13537: 0x00008395, + 13538: 0x00008399, + 13539: 0x00008375, + 13540: 0x00008394, + 13541: 0x000083A9, + 13542: 0x0000837D, + 13543: 0x00008383, + 13544: 0x0000838C, + 13545: 0x0000839D, + 13546: 0x0000839B, + 13547: 0x000083AA, + 13548: 0x0000838B, + 13549: 0x0000837E, + 13550: 0x000083A5, + 13551: 0x000083AF, + 13552: 0x00008388, + 13553: 0x00008397, + 13554: 0x000083B0, + 13555: 0x0000837F, + 13556: 0x000083A6, + 13557: 0x00008387, + 13558: 0x000083AE, + 13559: 0x00008376, + 13560: 0x0000839A, + 13561: 0x00008659, + 13562: 0x00008656, + 13563: 0x000086BF, + 13564: 0x000086B7, + 13565: 0x000086C2, + 13566: 0x000086C1, + 13567: 0x000086C5, + 13568: 0x000086BA, + 13569: 0x000086B0, + 13570: 0x000086C8, + 13571: 0x000086B9, + 13572: 0x000086B3, + 13573: 0x000086B8, + 13574: 0x000086CC, + 13575: 0x000086B4, + 13576: 0x000086BB, + 13577: 0x000086BC, + 13578: 0x000086C3, + 13579: 0x000086BD, + 13580: 0x000086BE, + 13581: 0x00008852, + 13582: 0x00008889, + 13583: 0x00008895, + 13584: 0x000088A8, + 13585: 0x000088A2, + 13586: 0x000088AA, + 13587: 0x0000889A, + 13588: 0x00008891, + 13589: 0x000088A1, + 13590: 0x0000889F, + 13591: 0x00008898, + 13592: 0x000088A7, + 13593: 0x00008899, + 13594: 0x0000889B, + 13595: 0x00008897, + 13596: 0x000088A4, + 13597: 0x000088AC, + 13598: 0x0000888C, + 13599: 0x00008893, + 13600: 0x0000888E, + 13601: 0x00008982, + 13602: 0x000089D6, + 13603: 0x000089D9, + 13604: 0x000089D5, + 13605: 0x00008A30, + 13606: 0x00008A27, + 13607: 0x00008A2C, + 13608: 0x00008A1E, + 13609: 0x00008C39, + 13610: 0x00008C3B, + 13611: 0x00008C5C, + 13612: 0x00008C5D, + 13613: 0x00008C7D, + 13614: 0x00008CA5, + 13615: 0x00008D7D, + 13616: 0x00008D7B, + 13617: 0x00008D79, + 13618: 0x00008DBC, + 13619: 0x00008DC2, + 13620: 0x00008DB9, + 13621: 0x00008DBF, + 13622: 0x00008DC1, + 13623: 0x00008ED8, + 13624: 0x00008EDE, + 13625: 0x00008EDD, + 13626: 0x00008EDC, + 13627: 0x00008ED7, + 13628: 0x00008EE0, + 13629: 0x00008EE1, + 13630: 0x00009024, + 13631: 0x0000900B, + 13632: 0x00009011, + 13633: 0x0000901C, + 13634: 0x0000900C, + 13635: 0x00009021, + 13636: 0x000090EF, + 13637: 0x000090EA, + 13638: 0x000090F0, + 13639: 0x000090F4, + 13640: 0x000090F2, + 13641: 0x000090F3, + 13642: 0x000090D4, + 13643: 0x000090EB, + 13644: 0x000090EC, + 13645: 0x000090E9, + 13646: 0x00009156, + 13647: 0x00009158, + 13648: 0x0000915A, + 13649: 0x00009153, + 13650: 0x00009155, + 13651: 0x000091EC, + 13652: 0x000091F4, + 13653: 0x000091F1, + 13654: 0x000091F3, + 13655: 0x000091F8, + 13656: 0x000091E4, + 13657: 0x000091F9, + 13658: 0x000091EA, + 13659: 0x000091EB, + 13660: 0x000091F7, + 13661: 0x000091E8, + 13662: 0x000091EE, + 13663: 0x0000957A, + 13664: 0x00009586, + 13665: 0x00009588, + 13666: 0x0000967C, + 13667: 0x0000966D, + 13668: 0x0000966B, + 13669: 0x00009671, + 13670: 0x0000966F, + 13671: 0x000096BF, + 13672: 0x0000976A, + 13673: 0x00009804, + 13674: 0x000098E5, + 13675: 0x00009997, + 13676: 0x0000509B, + 13677: 0x00005095, + 13678: 0x00005094, + 13679: 0x0000509E, + 13680: 0x0000508B, + 13681: 0x000050A3, + 13682: 0x00005083, + 13683: 0x0000508C, + 13684: 0x0000508E, + 13685: 0x0000509D, + 13686: 0x00005068, + 13687: 0x0000509C, + 13688: 0x00005092, + 13689: 0x00005082, + 13690: 0x00005087, + 13691: 0x0000515F, + 13692: 0x000051D4, + 13693: 0x00005312, + 13694: 0x00005311, + 13695: 0x000053A4, + 13696: 0x000053A7, + 13697: 0x00005591, + 13698: 0x000055A8, + 13699: 0x000055A5, + 13700: 0x000055AD, + 13701: 0x00005577, + 13702: 0x00005645, + 13703: 0x000055A2, + 13704: 0x00005593, + 13705: 0x00005588, + 13706: 0x0000558F, + 13707: 0x000055B5, + 13708: 0x00005581, + 13709: 0x000055A3, + 13710: 0x00005592, + 13711: 0x000055A4, + 13712: 0x0000557D, + 13713: 0x0000558C, + 13714: 0x000055A6, + 13715: 0x0000557F, + 13716: 0x00005595, + 13717: 0x000055A1, + 13718: 0x0000558E, + 13719: 0x0000570C, + 13720: 0x00005829, + 13721: 0x00005837, + 13722: 0x00005819, + 13723: 0x0000581E, + 13724: 0x00005827, + 13725: 0x00005823, + 13726: 0x00005828, + 13727: 0x000057F5, + 13728: 0x00005848, + 13729: 0x00005825, + 13730: 0x0000581C, + 13731: 0x0000581B, + 13732: 0x00005833, + 13733: 0x0000583F, + 13734: 0x00005836, + 13735: 0x0000582E, + 13736: 0x00005839, + 13737: 0x00005838, + 13738: 0x0000582D, + 13739: 0x0000582C, + 13740: 0x0000583B, + 13741: 0x00005961, + 13742: 0x00005AAF, + 13743: 0x00005A94, + 13744: 0x00005A9F, + 13745: 0x00005A7A, + 13746: 0x00005AA2, + 13747: 0x00005A9E, + 13748: 0x00005A78, + 13749: 0x00005AA6, + 13750: 0x00005A7C, + 13751: 0x00005AA5, + 13752: 0x00005AAC, + 13753: 0x00005A95, + 13754: 0x00005AAE, + 13755: 0x00005A37, + 13756: 0x00005A84, + 13757: 0x00005A8A, + 13758: 0x00005A97, + 13759: 0x00005A83, + 13760: 0x00005A8B, + 13761: 0x00005AA9, + 13762: 0x00005A7B, + 13763: 0x00005A7D, + 13764: 0x00005A8C, + 13765: 0x00005A9C, + 13766: 0x00005A8F, + 13767: 0x00005A93, + 13768: 0x00005A9D, + 13769: 0x00005BEA, + 13770: 0x00005BCD, + 13771: 0x00005BCB, + 13772: 0x00005BD4, + 13773: 0x00005BD1, + 13774: 0x00005BCA, + 13775: 0x00005BCE, + 13776: 0x00005C0C, + 13777: 0x00005C30, + 13778: 0x00005D37, + 13779: 0x00005D43, + 13780: 0x00005D6B, + 13781: 0x00005D41, + 13782: 0x00005D4B, + 13783: 0x00005D3F, + 13784: 0x00005D35, + 13785: 0x00005D51, + 13786: 0x00005D4E, + 13787: 0x00005D55, + 13788: 0x00005D33, + 13789: 0x00005D3A, + 13790: 0x00005D52, + 13791: 0x00005D3D, + 13792: 0x00005D31, + 13793: 0x00005D59, + 13794: 0x00005D42, + 13795: 0x00005D39, + 13796: 0x00005D49, + 13797: 0x00005D38, + 13798: 0x00005D3C, + 13799: 0x00005D32, + 13800: 0x00005D36, + 13801: 0x00005D40, + 13802: 0x00005D45, + 13803: 0x00005E44, + 13804: 0x00005E41, + 13805: 0x00005F58, + 13806: 0x00005FA6, + 13807: 0x00005FA5, + 13808: 0x00005FAB, + 13809: 0x000060C9, + 13810: 0x000060B9, + 13811: 0x000060CC, + 13812: 0x000060E2, + 13813: 0x000060CE, + 13814: 0x000060C4, + 13815: 0x00006114, + 13816: 0x000060F2, + 13817: 0x0000610A, + 13818: 0x00006116, + 13819: 0x00006105, + 13820: 0x000060F5, + 13821: 0x00006113, + 13822: 0x000060F8, + 13823: 0x000060FC, + 13824: 0x000060FE, + 13825: 0x000060C1, + 13826: 0x00006103, + 13827: 0x00006118, + 13828: 0x0000611D, + 13829: 0x00006110, + 13830: 0x000060FF, + 13831: 0x00006104, + 13832: 0x0000610B, + 13833: 0x0000624A, + 13834: 0x00006394, + 13835: 0x000063B1, + 13836: 0x000063B0, + 13837: 0x000063CE, + 13838: 0x000063E5, + 13839: 0x000063E8, + 13840: 0x000063EF, + 13841: 0x000063C3, + 13842: 0x0000649D, + 13843: 0x000063F3, + 13844: 0x000063CA, + 13845: 0x000063E0, + 13846: 0x000063F6, + 13847: 0x000063D5, + 13848: 0x000063F2, + 13849: 0x000063F5, + 13850: 0x00006461, + 13851: 0x000063DF, + 13852: 0x000063BE, + 13853: 0x000063DD, + 13854: 0x000063DC, + 13855: 0x000063C4, + 13856: 0x000063D8, + 13857: 0x000063D3, + 13858: 0x000063C2, + 13859: 0x000063C7, + 13860: 0x000063CC, + 13861: 0x000063CB, + 13862: 0x000063C8, + 13863: 0x000063F0, + 13864: 0x000063D7, + 13865: 0x000063D9, + 13866: 0x00006532, + 13867: 0x00006567, + 13868: 0x0000656A, + 13869: 0x00006564, + 13870: 0x0000655C, + 13871: 0x00006568, + 13872: 0x00006565, + 13873: 0x0000658C, + 13874: 0x0000659D, + 13875: 0x0000659E, + 13876: 0x000065AE, + 13877: 0x000065D0, + 13878: 0x000065D2, + 13879: 0x0000667C, + 13880: 0x0000666C, + 13881: 0x0000667B, + 13882: 0x00006680, + 13883: 0x00006671, + 13884: 0x00006679, + 13885: 0x0000666A, + 13886: 0x00006672, + 13887: 0x00006701, + 13888: 0x0000690C, + 13889: 0x000068D3, + 13890: 0x00006904, + 13891: 0x000068DC, + 13892: 0x0000692A, + 13893: 0x000068EC, + 13894: 0x000068EA, + 13895: 0x000068F1, + 13896: 0x0000690F, + 13897: 0x000068D6, + 13898: 0x000068F7, + 13899: 0x000068EB, + 13900: 0x000068E4, + 13901: 0x000068F6, + 13902: 0x00006913, + 13903: 0x00006910, + 13904: 0x000068F3, + 13905: 0x000068E1, + 13906: 0x00006907, + 13907: 0x000068CC, + 13908: 0x00006908, + 13909: 0x00006970, + 13910: 0x000068B4, + 13911: 0x00006911, + 13912: 0x000068EF, + 13913: 0x000068C6, + 13914: 0x00006914, + 13915: 0x000068F8, + 13916: 0x000068D0, + 13917: 0x000068FD, + 13918: 0x000068FC, + 13919: 0x000068E8, + 13920: 0x0000690B, + 13921: 0x0000690A, + 13922: 0x00006917, + 13923: 0x000068CE, + 13924: 0x000068C8, + 13925: 0x000068DD, + 13926: 0x000068DE, + 13927: 0x000068E6, + 13928: 0x000068F4, + 13929: 0x000068D1, + 13930: 0x00006906, + 13931: 0x000068D4, + 13932: 0x000068E9, + 13933: 0x00006915, + 13934: 0x00006925, + 13935: 0x000068C7, + 13936: 0x00006B39, + 13937: 0x00006B3B, + 13938: 0x00006B3F, + 13939: 0x00006B3C, + 13940: 0x00006B94, + 13941: 0x00006B97, + 13942: 0x00006B99, + 13943: 0x00006B95, + 13944: 0x00006BBD, + 13945: 0x00006BF0, + 13946: 0x00006BF2, + 13947: 0x00006BF3, + 13948: 0x00006C30, + 13949: 0x00006DFC, + 13950: 0x00006E46, + 13951: 0x00006E47, + 13952: 0x00006E1F, + 13953: 0x00006E49, + 13954: 0x00006E88, + 13955: 0x00006E3C, + 13956: 0x00006E3D, + 13957: 0x00006E45, + 13958: 0x00006E62, + 13959: 0x00006E2B, + 13960: 0x00006E3F, + 13961: 0x00006E41, + 13962: 0x00006E5D, + 13963: 0x00006E73, + 13964: 0x00006E1C, + 13965: 0x00006E33, + 13966: 0x00006E4B, + 13967: 0x00006E40, + 13968: 0x00006E51, + 13969: 0x00006E3B, + 13970: 0x00006E03, + 13971: 0x00006E2E, + 13972: 0x00006E5E, + 13973: 0x00006E68, + 13974: 0x00006E5C, + 13975: 0x00006E61, + 13976: 0x00006E31, + 13977: 0x00006E28, + 13978: 0x00006E60, + 13979: 0x00006E71, + 13980: 0x00006E6B, + 13981: 0x00006E39, + 13982: 0x00006E22, + 13983: 0x00006E30, + 13984: 0x00006E53, + 13985: 0x00006E65, + 13986: 0x00006E27, + 13987: 0x00006E78, + 13988: 0x00006E64, + 13989: 0x00006E77, + 13990: 0x00006E55, + 13991: 0x00006E79, + 13992: 0x00006E52, + 13993: 0x00006E66, + 13994: 0x00006E35, + 13995: 0x00006E36, + 13996: 0x00006E5A, + 13997: 0x00007120, + 13998: 0x0000711E, + 13999: 0x0000712F, + 14000: 0x000070FB, + 14001: 0x0000712E, + 14002: 0x00007131, + 14003: 0x00007123, + 14004: 0x00007125, + 14005: 0x00007122, + 14006: 0x00007132, + 14007: 0x0000711F, + 14008: 0x00007128, + 14009: 0x0000713A, + 14010: 0x0000711B, + 14011: 0x0000724B, + 14012: 0x0000725A, + 14013: 0x00007288, + 14014: 0x00007289, + 14015: 0x00007286, + 14016: 0x00007285, + 14017: 0x0000728B, + 14018: 0x00007312, + 14019: 0x0000730B, + 14020: 0x00007330, + 14021: 0x00007322, + 14022: 0x00007331, + 14023: 0x00007333, + 14024: 0x00007327, + 14025: 0x00007332, + 14026: 0x0000732D, + 14027: 0x00007326, + 14028: 0x00007323, + 14029: 0x00007335, + 14030: 0x0000730C, + 14031: 0x0000742E, + 14032: 0x0000742C, + 14033: 0x00007430, + 14034: 0x0000742B, + 14035: 0x00007416, + 14036: 0x0000741A, + 14037: 0x00007421, + 14038: 0x0000742D, + 14039: 0x00007431, + 14040: 0x00007424, + 14041: 0x00007423, + 14042: 0x0000741D, + 14043: 0x00007429, + 14044: 0x00007420, + 14045: 0x00007432, + 14046: 0x000074FB, + 14047: 0x0000752F, + 14048: 0x0000756F, + 14049: 0x0000756C, + 14050: 0x000075E7, + 14051: 0x000075DA, + 14052: 0x000075E1, + 14053: 0x000075E6, + 14054: 0x000075DD, + 14055: 0x000075DF, + 14056: 0x000075E4, + 14057: 0x000075D7, + 14058: 0x00007695, + 14059: 0x00007692, + 14060: 0x000076DA, + 14061: 0x00007746, + 14062: 0x00007747, + 14063: 0x00007744, + 14064: 0x0000774D, + 14065: 0x00007745, + 14066: 0x0000774A, + 14067: 0x0000774E, + 14068: 0x0000774B, + 14069: 0x0000774C, + 14070: 0x000077DE, + 14071: 0x000077EC, + 14072: 0x00007860, + 14073: 0x00007864, + 14074: 0x00007865, + 14075: 0x0000785C, + 14076: 0x0000786D, + 14077: 0x00007871, + 14078: 0x0000786A, + 14079: 0x0000786E, + 14080: 0x00007870, + 14081: 0x00007869, + 14082: 0x00007868, + 14083: 0x0000785E, + 14084: 0x00007862, + 14085: 0x00007974, + 14086: 0x00007973, + 14087: 0x00007972, + 14088: 0x00007970, + 14089: 0x00007A02, + 14090: 0x00007A0A, + 14091: 0x00007A03, + 14092: 0x00007A0C, + 14093: 0x00007A04, + 14094: 0x00007A99, + 14095: 0x00007AE6, + 14096: 0x00007AE4, + 14097: 0x00007B4A, + 14098: 0x00007B3B, + 14099: 0x00007B44, + 14100: 0x00007B48, + 14101: 0x00007B4C, + 14102: 0x00007B4E, + 14103: 0x00007B40, + 14104: 0x00007B58, + 14105: 0x00007B45, + 14106: 0x00007CA2, + 14107: 0x00007C9E, + 14108: 0x00007CA8, + 14109: 0x00007CA1, + 14110: 0x00007D58, + 14111: 0x00007D6F, + 14112: 0x00007D63, + 14113: 0x00007D53, + 14114: 0x00007D56, + 14115: 0x00007D67, + 14116: 0x00007D6A, + 14117: 0x00007D4F, + 14118: 0x00007D6D, + 14119: 0x00007D5C, + 14120: 0x00007D6B, + 14121: 0x00007D52, + 14122: 0x00007D54, + 14123: 0x00007D69, + 14124: 0x00007D51, + 14125: 0x00007D5F, + 14126: 0x00007D4E, + 14127: 0x00007F3E, + 14128: 0x00007F3F, + 14129: 0x00007F65, + 14130: 0x00007F66, + 14131: 0x00007FA2, + 14132: 0x00007FA0, + 14133: 0x00007FA1, + 14134: 0x00007FD7, + 14135: 0x00008051, + 14136: 0x0000804F, + 14137: 0x00008050, + 14138: 0x000080FE, + 14139: 0x000080D4, + 14140: 0x00008143, + 14141: 0x0000814A, + 14142: 0x00008152, + 14143: 0x0000814F, + 14144: 0x00008147, + 14145: 0x0000813D, + 14146: 0x0000814D, + 14147: 0x0000813A, + 14148: 0x000081E6, + 14149: 0x000081EE, + 14150: 0x000081F7, + 14151: 0x000081F8, + 14152: 0x000081F9, + 14153: 0x00008204, + 14154: 0x0000823C, + 14155: 0x0000823D, + 14156: 0x0000823F, + 14157: 0x00008275, + 14158: 0x0000833B, + 14159: 0x000083CF, + 14160: 0x000083F9, + 14161: 0x00008423, + 14162: 0x000083C0, + 14163: 0x000083E8, + 14164: 0x00008412, + 14165: 0x000083E7, + 14166: 0x000083E4, + 14167: 0x000083FC, + 14168: 0x000083F6, + 14169: 0x00008410, + 14170: 0x000083C6, + 14171: 0x000083C8, + 14172: 0x000083EB, + 14173: 0x000083E3, + 14174: 0x000083BF, + 14175: 0x00008401, + 14176: 0x000083DD, + 14177: 0x000083E5, + 14178: 0x000083D8, + 14179: 0x000083FF, + 14180: 0x000083E1, + 14181: 0x000083CB, + 14182: 0x000083CE, + 14183: 0x000083D6, + 14184: 0x000083F5, + 14185: 0x000083C9, + 14186: 0x00008409, + 14187: 0x0000840F, + 14188: 0x000083DE, + 14189: 0x00008411, + 14190: 0x00008406, + 14191: 0x000083C2, + 14192: 0x000083F3, + 14193: 0x000083D5, + 14194: 0x000083FA, + 14195: 0x000083C7, + 14196: 0x000083D1, + 14197: 0x000083EA, + 14198: 0x00008413, + 14199: 0x000083C3, + 14200: 0x000083EC, + 14201: 0x000083EE, + 14202: 0x000083C4, + 14203: 0x000083FB, + 14204: 0x000083D7, + 14205: 0x000083E2, + 14206: 0x0000841B, + 14207: 0x000083DB, + 14208: 0x000083FE, + 14209: 0x000086D8, + 14210: 0x000086E2, + 14211: 0x000086E6, + 14212: 0x000086D3, + 14213: 0x000086E3, + 14214: 0x000086DA, + 14215: 0x000086EA, + 14216: 0x000086DD, + 14217: 0x000086EB, + 14218: 0x000086DC, + 14219: 0x000086EC, + 14220: 0x000086E9, + 14221: 0x000086D7, + 14222: 0x000086E8, + 14223: 0x000086D1, + 14224: 0x00008848, + 14225: 0x00008856, + 14226: 0x00008855, + 14227: 0x000088BA, + 14228: 0x000088D7, + 14229: 0x000088B9, + 14230: 0x000088B8, + 14231: 0x000088C0, + 14232: 0x000088BE, + 14233: 0x000088B6, + 14234: 0x000088BC, + 14235: 0x000088B7, + 14236: 0x000088BD, + 14237: 0x000088B2, + 14238: 0x00008901, + 14239: 0x000088C9, + 14240: 0x00008995, + 14241: 0x00008998, + 14242: 0x00008997, + 14243: 0x000089DD, + 14244: 0x000089DA, + 14245: 0x000089DB, + 14246: 0x00008A4E, + 14247: 0x00008A4D, + 14248: 0x00008A39, + 14249: 0x00008A59, + 14250: 0x00008A40, + 14251: 0x00008A57, + 14252: 0x00008A58, + 14253: 0x00008A44, + 14254: 0x00008A45, + 14255: 0x00008A52, + 14256: 0x00008A48, + 14257: 0x00008A51, + 14258: 0x00008A4A, + 14259: 0x00008A4C, + 14260: 0x00008A4F, + 14261: 0x00008C5F, + 14262: 0x00008C81, + 14263: 0x00008C80, + 14264: 0x00008CBA, + 14265: 0x00008CBE, + 14266: 0x00008CB0, + 14267: 0x00008CB9, + 14268: 0x00008CB5, + 14269: 0x00008D84, + 14270: 0x00008D80, + 14271: 0x00008D89, + 14272: 0x00008DD8, + 14273: 0x00008DD3, + 14274: 0x00008DCD, + 14275: 0x00008DC7, + 14276: 0x00008DD6, + 14277: 0x00008DDC, + 14278: 0x00008DCF, + 14279: 0x00008DD5, + 14280: 0x00008DD9, + 14281: 0x00008DC8, + 14282: 0x00008DD7, + 14283: 0x00008DC5, + 14284: 0x00008EEF, + 14285: 0x00008EF7, + 14286: 0x00008EFA, + 14287: 0x00008EF9, + 14288: 0x00008EE6, + 14289: 0x00008EEE, + 14290: 0x00008EE5, + 14291: 0x00008EF5, + 14292: 0x00008EE7, + 14293: 0x00008EE8, + 14294: 0x00008EF6, + 14295: 0x00008EEB, + 14296: 0x00008EF1, + 14297: 0x00008EEC, + 14298: 0x00008EF4, + 14299: 0x00008EE9, + 14300: 0x0000902D, + 14301: 0x00009034, + 14302: 0x0000902F, + 14303: 0x00009106, + 14304: 0x0000912C, + 14305: 0x00009104, + 14306: 0x000090FF, + 14307: 0x000090FC, + 14308: 0x00009108, + 14309: 0x000090F9, + 14310: 0x000090FB, + 14311: 0x00009101, + 14312: 0x00009100, + 14313: 0x00009107, + 14314: 0x00009105, + 14315: 0x00009103, + 14316: 0x00009161, + 14317: 0x00009164, + 14318: 0x0000915F, + 14319: 0x00009162, + 14320: 0x00009160, + 14321: 0x00009201, + 14322: 0x0000920A, + 14323: 0x00009225, + 14324: 0x00009203, + 14325: 0x0000921A, + 14326: 0x00009226, + 14327: 0x0000920F, + 14328: 0x0000920C, + 14329: 0x00009200, + 14330: 0x00009212, + 14331: 0x000091FF, + 14332: 0x000091FD, + 14333: 0x00009206, + 14334: 0x00009204, + 14335: 0x00009227, + 14336: 0x00009202, + 14337: 0x0000921C, + 14338: 0x00009224, + 14339: 0x00009219, + 14340: 0x00009217, + 14341: 0x00009205, + 14342: 0x00009216, + 14343: 0x0000957B, + 14344: 0x0000958D, + 14345: 0x0000958C, + 14346: 0x00009590, + 14347: 0x00009687, + 14348: 0x0000967E, + 14349: 0x00009688, + 14350: 0x00009689, + 14351: 0x00009683, + 14352: 0x00009680, + 14353: 0x000096C2, + 14354: 0x000096C8, + 14355: 0x000096C3, + 14356: 0x000096F1, + 14357: 0x000096F0, + 14358: 0x0000976C, + 14359: 0x00009770, + 14360: 0x0000976E, + 14361: 0x00009807, + 14362: 0x000098A9, + 14363: 0x000098EB, + 14364: 0x00009CE6, + 14365: 0x00009EF9, + 14366: 0x00004E83, + 14367: 0x00004E84, + 14368: 0x00004EB6, + 14369: 0x000050BD, + 14370: 0x000050BF, + 14371: 0x000050C6, + 14372: 0x000050AE, + 14373: 0x000050C4, + 14374: 0x000050CA, + 14375: 0x000050B4, + 14376: 0x000050C8, + 14377: 0x000050C2, + 14378: 0x000050B0, + 14379: 0x000050C1, + 14380: 0x000050BA, + 14381: 0x000050B1, + 14382: 0x000050CB, + 14383: 0x000050C9, + 14384: 0x000050B6, + 14385: 0x000050B8, + 14386: 0x000051D7, + 14387: 0x0000527A, + 14388: 0x00005278, + 14389: 0x0000527B, + 14390: 0x0000527C, + 14391: 0x000055C3, + 14392: 0x000055DB, + 14393: 0x000055CC, + 14394: 0x000055D0, + 14395: 0x000055CB, + 14396: 0x000055CA, + 14397: 0x000055DD, + 14398: 0x000055C0, + 14399: 0x000055D4, + 14400: 0x000055C4, + 14401: 0x000055E9, + 14402: 0x000055BF, + 14403: 0x000055D2, + 14404: 0x0000558D, + 14405: 0x000055CF, + 14406: 0x000055D5, + 14407: 0x000055E2, + 14408: 0x000055D6, + 14409: 0x000055C8, + 14410: 0x000055F2, + 14411: 0x000055CD, + 14412: 0x000055D9, + 14413: 0x000055C2, + 14414: 0x00005714, + 14415: 0x00005853, + 14416: 0x00005868, + 14417: 0x00005864, + 14418: 0x0000584F, + 14419: 0x0000584D, + 14420: 0x00005849, + 14421: 0x0000586F, + 14422: 0x00005855, + 14423: 0x0000584E, + 14424: 0x0000585D, + 14425: 0x00005859, + 14426: 0x00005865, + 14427: 0x0000585B, + 14428: 0x0000583D, + 14429: 0x00005863, + 14430: 0x00005871, + 14431: 0x000058FC, + 14432: 0x00005AC7, + 14433: 0x00005AC4, + 14434: 0x00005ACB, + 14435: 0x00005ABA, + 14436: 0x00005AB8, + 14437: 0x00005AB1, + 14438: 0x00005AB5, + 14439: 0x00005AB0, + 14440: 0x00005ABF, + 14441: 0x00005AC8, + 14442: 0x00005ABB, + 14443: 0x00005AC6, + 14444: 0x00005AB7, + 14445: 0x00005AC0, + 14446: 0x00005ACA, + 14447: 0x00005AB4, + 14448: 0x00005AB6, + 14449: 0x00005ACD, + 14450: 0x00005AB9, + 14451: 0x00005A90, + 14452: 0x00005BD6, + 14453: 0x00005BD8, + 14454: 0x00005BD9, + 14455: 0x00005C1F, + 14456: 0x00005C33, + 14457: 0x00005D71, + 14458: 0x00005D63, + 14459: 0x00005D4A, + 14460: 0x00005D65, + 14461: 0x00005D72, + 14462: 0x00005D6C, + 14463: 0x00005D5E, + 14464: 0x00005D68, + 14465: 0x00005D67, + 14466: 0x00005D62, + 14467: 0x00005DF0, + 14468: 0x00005E4F, + 14469: 0x00005E4E, + 14470: 0x00005E4A, + 14471: 0x00005E4D, + 14472: 0x00005E4B, + 14473: 0x00005EC5, + 14474: 0x00005ECC, + 14475: 0x00005EC6, + 14476: 0x00005ECB, + 14477: 0x00005EC7, + 14478: 0x00005F40, + 14479: 0x00005FAF, + 14480: 0x00005FAD, + 14481: 0x000060F7, + 14482: 0x00006149, + 14483: 0x0000614A, + 14484: 0x0000612B, + 14485: 0x00006145, + 14486: 0x00006136, + 14487: 0x00006132, + 14488: 0x0000612E, + 14489: 0x00006146, + 14490: 0x0000612F, + 14491: 0x0000614F, + 14492: 0x00006129, + 14493: 0x00006140, + 14494: 0x00006220, + 14495: 0x00009168, + 14496: 0x00006223, + 14497: 0x00006225, + 14498: 0x00006224, + 14499: 0x000063C5, + 14500: 0x000063F1, + 14501: 0x000063EB, + 14502: 0x00006410, + 14503: 0x00006412, + 14504: 0x00006409, + 14505: 0x00006420, + 14506: 0x00006424, + 14507: 0x00006433, + 14508: 0x00006443, + 14509: 0x0000641F, + 14510: 0x00006415, + 14511: 0x00006418, + 14512: 0x00006439, + 14513: 0x00006437, + 14514: 0x00006422, + 14515: 0x00006423, + 14516: 0x0000640C, + 14517: 0x00006426, + 14518: 0x00006430, + 14519: 0x00006428, + 14520: 0x00006441, + 14521: 0x00006435, + 14522: 0x0000642F, + 14523: 0x0000640A, + 14524: 0x0000641A, + 14525: 0x00006440, + 14526: 0x00006425, + 14527: 0x00006427, + 14528: 0x0000640B, + 14529: 0x000063E7, + 14530: 0x0000641B, + 14531: 0x0000642E, + 14532: 0x00006421, + 14533: 0x0000640E, + 14534: 0x0000656F, + 14535: 0x00006592, + 14536: 0x000065D3, + 14537: 0x00006686, + 14538: 0x0000668C, + 14539: 0x00006695, + 14540: 0x00006690, + 14541: 0x0000668B, + 14542: 0x0000668A, + 14543: 0x00006699, + 14544: 0x00006694, + 14545: 0x00006678, + 14546: 0x00006720, + 14547: 0x00006966, + 14548: 0x0000695F, + 14549: 0x00006938, + 14550: 0x0000694E, + 14551: 0x00006962, + 14552: 0x00006971, + 14553: 0x0000693F, + 14554: 0x00006945, + 14555: 0x0000696A, + 14556: 0x00006939, + 14557: 0x00006942, + 14558: 0x00006957, + 14559: 0x00006959, + 14560: 0x0000697A, + 14561: 0x00006948, + 14562: 0x00006949, + 14563: 0x00006935, + 14564: 0x0000696C, + 14565: 0x00006933, + 14566: 0x0000693D, + 14567: 0x00006965, + 14568: 0x000068F0, + 14569: 0x00006978, + 14570: 0x00006934, + 14571: 0x00006969, + 14572: 0x00006940, + 14573: 0x0000696F, + 14574: 0x00006944, + 14575: 0x00006976, + 14576: 0x00006958, + 14577: 0x00006941, + 14578: 0x00006974, + 14579: 0x0000694C, + 14580: 0x0000693B, + 14581: 0x0000694B, + 14582: 0x00006937, + 14583: 0x0000695C, + 14584: 0x0000694F, + 14585: 0x00006951, + 14586: 0x00006932, + 14587: 0x00006952, + 14588: 0x0000692F, + 14589: 0x0000697B, + 14590: 0x0000693C, + 14591: 0x00006B46, + 14592: 0x00006B45, + 14593: 0x00006B43, + 14594: 0x00006B42, + 14595: 0x00006B48, + 14596: 0x00006B41, + 14597: 0x00006B9B, + 14598: 0x0000FA0D, + 14599: 0x00006BFB, + 14600: 0x00006BFC, + 14601: 0x00006BF9, + 14602: 0x00006BF7, + 14603: 0x00006BF8, + 14604: 0x00006E9B, + 14605: 0x00006ED6, + 14606: 0x00006EC8, + 14607: 0x00006E8F, + 14608: 0x00006EC0, + 14609: 0x00006E9F, + 14610: 0x00006E93, + 14611: 0x00006E94, + 14612: 0x00006EA0, + 14613: 0x00006EB1, + 14614: 0x00006EB9, + 14615: 0x00006EC6, + 14616: 0x00006ED2, + 14617: 0x00006EBD, + 14618: 0x00006EC1, + 14619: 0x00006E9E, + 14620: 0x00006EC9, + 14621: 0x00006EB7, + 14622: 0x00006EB0, + 14623: 0x00006ECD, + 14624: 0x00006EA6, + 14625: 0x00006ECF, + 14626: 0x00006EB2, + 14627: 0x00006EBE, + 14628: 0x00006EC3, + 14629: 0x00006EDC, + 14630: 0x00006ED8, + 14631: 0x00006E99, + 14632: 0x00006E92, + 14633: 0x00006E8E, + 14634: 0x00006E8D, + 14635: 0x00006EA4, + 14636: 0x00006EA1, + 14637: 0x00006EBF, + 14638: 0x00006EB3, + 14639: 0x00006ED0, + 14640: 0x00006ECA, + 14641: 0x00006E97, + 14642: 0x00006EAE, + 14643: 0x00006EA3, + 14644: 0x00007147, + 14645: 0x00007154, + 14646: 0x00007152, + 14647: 0x00007163, + 14648: 0x00007160, + 14649: 0x00007141, + 14650: 0x0000715D, + 14651: 0x00007162, + 14652: 0x00007172, + 14653: 0x00007178, + 14654: 0x0000716A, + 14655: 0x00007161, + 14656: 0x00007142, + 14657: 0x00007158, + 14658: 0x00007143, + 14659: 0x0000714B, + 14660: 0x00007170, + 14661: 0x0000715F, + 14662: 0x00007150, + 14663: 0x00007153, + 14664: 0x00007144, + 14665: 0x0000714D, + 14666: 0x0000715A, + 14667: 0x0000724F, + 14668: 0x0000728D, + 14669: 0x0000728C, + 14670: 0x00007291, + 14671: 0x00007290, + 14672: 0x0000728E, + 14673: 0x0000733C, + 14674: 0x00007342, + 14675: 0x0000733B, + 14676: 0x0000733A, + 14677: 0x00007340, + 14678: 0x0000734A, + 14679: 0x00007349, + 14680: 0x00007444, + 14681: 0x0000744A, + 14682: 0x0000744B, + 14683: 0x00007452, + 14684: 0x00007451, + 14685: 0x00007457, + 14686: 0x00007440, + 14687: 0x0000744F, + 14688: 0x00007450, + 14689: 0x0000744E, + 14690: 0x00007442, + 14691: 0x00007446, + 14692: 0x0000744D, + 14693: 0x00007454, + 14694: 0x000074E1, + 14695: 0x000074FF, + 14696: 0x000074FE, + 14697: 0x000074FD, + 14698: 0x0000751D, + 14699: 0x00007579, + 14700: 0x00007577, + 14701: 0x00006983, + 14702: 0x000075EF, + 14703: 0x0000760F, + 14704: 0x00007603, + 14705: 0x000075F7, + 14706: 0x000075FE, + 14707: 0x000075FC, + 14708: 0x000075F9, + 14709: 0x000075F8, + 14710: 0x00007610, + 14711: 0x000075FB, + 14712: 0x000075F6, + 14713: 0x000075ED, + 14714: 0x000075F5, + 14715: 0x000075FD, + 14716: 0x00007699, + 14717: 0x000076B5, + 14718: 0x000076DD, + 14719: 0x00007755, + 14720: 0x0000775F, + 14721: 0x00007760, + 14722: 0x00007752, + 14723: 0x00007756, + 14724: 0x0000775A, + 14725: 0x00007769, + 14726: 0x00007767, + 14727: 0x00007754, + 14728: 0x00007759, + 14729: 0x0000776D, + 14730: 0x000077E0, + 14731: 0x00007887, + 14732: 0x0000789A, + 14733: 0x00007894, + 14734: 0x0000788F, + 14735: 0x00007884, + 14736: 0x00007895, + 14737: 0x00007885, + 14738: 0x00007886, + 14739: 0x000078A1, + 14740: 0x00007883, + 14741: 0x00007879, + 14742: 0x00007899, + 14743: 0x00007880, + 14744: 0x00007896, + 14745: 0x0000787B, + 14746: 0x0000797C, + 14747: 0x00007982, + 14748: 0x0000797D, + 14749: 0x00007979, + 14750: 0x00007A11, + 14751: 0x00007A18, + 14752: 0x00007A19, + 14753: 0x00007A12, + 14754: 0x00007A17, + 14755: 0x00007A15, + 14756: 0x00007A22, + 14757: 0x00007A13, + 14758: 0x00007A1B, + 14759: 0x00007A10, + 14760: 0x00007AA3, + 14761: 0x00007AA2, + 14762: 0x00007A9E, + 14763: 0x00007AEB, + 14764: 0x00007B66, + 14765: 0x00007B64, + 14766: 0x00007B6D, + 14767: 0x00007B74, + 14768: 0x00007B69, + 14769: 0x00007B72, + 14770: 0x00007B65, + 14771: 0x00007B73, + 14772: 0x00007B71, + 14773: 0x00007B70, + 14774: 0x00007B61, + 14775: 0x00007B78, + 14776: 0x00007B76, + 14777: 0x00007B63, + 14778: 0x00007CB2, + 14779: 0x00007CB4, + 14780: 0x00007CAF, + 14781: 0x00007D88, + 14782: 0x00007D86, + 14783: 0x00007D80, + 14784: 0x00007D8D, + 14785: 0x00007D7F, + 14786: 0x00007D85, + 14787: 0x00007D7A, + 14788: 0x00007D8E, + 14789: 0x00007D7B, + 14790: 0x00007D83, + 14791: 0x00007D7C, + 14792: 0x00007D8C, + 14793: 0x00007D94, + 14794: 0x00007D84, + 14795: 0x00007D7D, + 14796: 0x00007D92, + 14797: 0x00007F6D, + 14798: 0x00007F6B, + 14799: 0x00007F67, + 14800: 0x00007F68, + 14801: 0x00007F6C, + 14802: 0x00007FA6, + 14803: 0x00007FA5, + 14804: 0x00007FA7, + 14805: 0x00007FDB, + 14806: 0x00007FDC, + 14807: 0x00008021, + 14808: 0x00008164, + 14809: 0x00008160, + 14810: 0x00008177, + 14811: 0x0000815C, + 14812: 0x00008169, + 14813: 0x0000815B, + 14814: 0x00008162, + 14815: 0x00008172, + 14816: 0x00006721, + 14817: 0x0000815E, + 14818: 0x00008176, + 14819: 0x00008167, + 14820: 0x0000816F, + 14821: 0x00008144, + 14822: 0x00008161, + 14823: 0x0000821D, + 14824: 0x00008249, + 14825: 0x00008244, + 14826: 0x00008240, + 14827: 0x00008242, + 14828: 0x00008245, + 14829: 0x000084F1, + 14830: 0x0000843F, + 14831: 0x00008456, + 14832: 0x00008476, + 14833: 0x00008479, + 14834: 0x0000848F, + 14835: 0x0000848D, + 14836: 0x00008465, + 14837: 0x00008451, + 14838: 0x00008440, + 14839: 0x00008486, + 14840: 0x00008467, + 14841: 0x00008430, + 14842: 0x0000844D, + 14843: 0x0000847D, + 14844: 0x0000845A, + 14845: 0x00008459, + 14846: 0x00008474, + 14847: 0x00008473, + 14848: 0x0000845D, + 14849: 0x00008507, + 14850: 0x0000845E, + 14851: 0x00008437, + 14852: 0x0000843A, + 14853: 0x00008434, + 14854: 0x0000847A, + 14855: 0x00008443, + 14856: 0x00008478, + 14857: 0x00008432, + 14858: 0x00008445, + 14859: 0x00008429, + 14860: 0x000083D9, + 14861: 0x0000844B, + 14862: 0x0000842F, + 14863: 0x00008442, + 14864: 0x0000842D, + 14865: 0x0000845F, + 14866: 0x00008470, + 14867: 0x00008439, + 14868: 0x0000844E, + 14869: 0x0000844C, + 14870: 0x00008452, + 14871: 0x0000846F, + 14872: 0x000084C5, + 14873: 0x0000848E, + 14874: 0x0000843B, + 14875: 0x00008447, + 14876: 0x00008436, + 14877: 0x00008433, + 14878: 0x00008468, + 14879: 0x0000847E, + 14880: 0x00008444, + 14881: 0x0000842B, + 14882: 0x00008460, + 14883: 0x00008454, + 14884: 0x0000846E, + 14885: 0x00008450, + 14886: 0x0000870B, + 14887: 0x00008704, + 14888: 0x000086F7, + 14889: 0x0000870C, + 14890: 0x000086FA, + 14891: 0x000086D6, + 14892: 0x000086F5, + 14893: 0x0000874D, + 14894: 0x000086F8, + 14895: 0x0000870E, + 14896: 0x00008709, + 14897: 0x00008701, + 14898: 0x000086F6, + 14899: 0x0000870D, + 14900: 0x00008705, + 14901: 0x000088D6, + 14902: 0x000088CB, + 14903: 0x000088CD, + 14904: 0x000088CE, + 14905: 0x000088DE, + 14906: 0x000088DB, + 14907: 0x000088DA, + 14908: 0x000088CC, + 14909: 0x000088D0, + 14910: 0x00008985, + 14911: 0x0000899B, + 14912: 0x000089DF, + 14913: 0x000089E5, + 14914: 0x000089E4, + 14915: 0x000089E1, + 14916: 0x000089E0, + 14917: 0x000089E2, + 14918: 0x000089DC, + 14919: 0x000089E6, + 14920: 0x00008A76, + 14921: 0x00008A86, + 14922: 0x00008A7F, + 14923: 0x00008A61, + 14924: 0x00008A3F, + 14925: 0x00008A77, + 14926: 0x00008A82, + 14927: 0x00008A84, + 14928: 0x00008A75, + 14929: 0x00008A83, + 14930: 0x00008A81, + 14931: 0x00008A74, + 14932: 0x00008A7A, + 14933: 0x00008C3C, + 14934: 0x00008C4B, + 14935: 0x00008C4A, + 14936: 0x00008C65, + 14937: 0x00008C64, + 14938: 0x00008C66, + 14939: 0x00008C86, + 14940: 0x00008C84, + 14941: 0x00008C85, + 14942: 0x00008CCC, + 14943: 0x00008D68, + 14944: 0x00008D69, + 14945: 0x00008D91, + 14946: 0x00008D8C, + 14947: 0x00008D8E, + 14948: 0x00008D8F, + 14949: 0x00008D8D, + 14950: 0x00008D93, + 14951: 0x00008D94, + 14952: 0x00008D90, + 14953: 0x00008D92, + 14954: 0x00008DF0, + 14955: 0x00008DE0, + 14956: 0x00008DEC, + 14957: 0x00008DF1, + 14958: 0x00008DEE, + 14959: 0x00008DD0, + 14960: 0x00008DE9, + 14961: 0x00008DE3, + 14962: 0x00008DE2, + 14963: 0x00008DE7, + 14964: 0x00008DF2, + 14965: 0x00008DEB, + 14966: 0x00008DF4, + 14967: 0x00008F06, + 14968: 0x00008EFF, + 14969: 0x00008F01, + 14970: 0x00008F00, + 14971: 0x00008F05, + 14972: 0x00008F07, + 14973: 0x00008F08, + 14974: 0x00008F02, + 14975: 0x00008F0B, + 14976: 0x00009052, + 14977: 0x0000903F, + 14978: 0x00009044, + 14979: 0x00009049, + 14980: 0x0000903D, + 14981: 0x00009110, + 14982: 0x0000910D, + 14983: 0x0000910F, + 14984: 0x00009111, + 14985: 0x00009116, + 14986: 0x00009114, + 14987: 0x0000910B, + 14988: 0x0000910E, + 14989: 0x0000916E, + 14990: 0x0000916F, + 14991: 0x00009248, + 14992: 0x00009252, + 14993: 0x00009230, + 14994: 0x0000923A, + 14995: 0x00009266, + 14996: 0x00009233, + 14997: 0x00009265, + 14998: 0x0000925E, + 14999: 0x00009283, + 15000: 0x0000922E, + 15001: 0x0000924A, + 15002: 0x00009246, + 15003: 0x0000926D, + 15004: 0x0000926C, + 15005: 0x0000924F, + 15006: 0x00009260, + 15007: 0x00009267, + 15008: 0x0000926F, + 15009: 0x00009236, + 15010: 0x00009261, + 15011: 0x00009270, + 15012: 0x00009231, + 15013: 0x00009254, + 15014: 0x00009263, + 15015: 0x00009250, + 15016: 0x00009272, + 15017: 0x0000924E, + 15018: 0x00009253, + 15019: 0x0000924C, + 15020: 0x00009256, + 15021: 0x00009232, + 15022: 0x0000959F, + 15023: 0x0000959C, + 15024: 0x0000959E, + 15025: 0x0000959B, + 15026: 0x00009692, + 15027: 0x00009693, + 15028: 0x00009691, + 15029: 0x00009697, + 15030: 0x000096CE, + 15031: 0x000096FA, + 15032: 0x000096FD, + 15033: 0x000096F8, + 15034: 0x000096F5, + 15035: 0x00009773, + 15036: 0x00009777, + 15037: 0x00009778, + 15038: 0x00009772, + 15039: 0x0000980F, + 15040: 0x0000980D, + 15041: 0x0000980E, + 15042: 0x000098AC, + 15043: 0x000098F6, + 15044: 0x000098F9, + 15045: 0x000099AF, + 15046: 0x000099B2, + 15047: 0x000099B0, + 15048: 0x000099B5, + 15049: 0x00009AAD, + 15050: 0x00009AAB, + 15051: 0x00009B5B, + 15052: 0x00009CEA, + 15053: 0x00009CED, + 15054: 0x00009CE7, + 15055: 0x00009E80, + 15056: 0x00009EFD, + 15057: 0x000050E6, + 15058: 0x000050D4, + 15059: 0x000050D7, + 15060: 0x000050E8, + 15061: 0x000050F3, + 15062: 0x000050DB, + 15063: 0x000050EA, + 15064: 0x000050DD, + 15065: 0x000050E4, + 15066: 0x000050D3, + 15067: 0x000050EC, + 15068: 0x000050F0, + 15069: 0x000050EF, + 15070: 0x000050E3, + 15071: 0x000050E0, + 15072: 0x000051D8, + 15073: 0x00005280, + 15074: 0x00005281, + 15075: 0x000052E9, + 15076: 0x000052EB, + 15077: 0x00005330, + 15078: 0x000053AC, + 15079: 0x00005627, + 15080: 0x00005615, + 15081: 0x0000560C, + 15082: 0x00005612, + 15083: 0x000055FC, + 15084: 0x0000560F, + 15085: 0x0000561C, + 15086: 0x00005601, + 15087: 0x00005613, + 15088: 0x00005602, + 15089: 0x000055FA, + 15090: 0x0000561D, + 15091: 0x00005604, + 15092: 0x000055FF, + 15093: 0x000055F9, + 15094: 0x00005889, + 15095: 0x0000587C, + 15096: 0x00005890, + 15097: 0x00005898, + 15098: 0x00005886, + 15099: 0x00005881, + 15100: 0x0000587F, + 15101: 0x00005874, + 15102: 0x0000588B, + 15103: 0x0000587A, + 15104: 0x00005887, + 15105: 0x00005891, + 15106: 0x0000588E, + 15107: 0x00005876, + 15108: 0x00005882, + 15109: 0x00005888, + 15110: 0x0000587B, + 15111: 0x00005894, + 15112: 0x0000588F, + 15113: 0x000058FE, + 15114: 0x0000596B, + 15115: 0x00005ADC, + 15116: 0x00005AEE, + 15117: 0x00005AE5, + 15118: 0x00005AD5, + 15119: 0x00005AEA, + 15120: 0x00005ADA, + 15121: 0x00005AED, + 15122: 0x00005AEB, + 15123: 0x00005AF3, + 15124: 0x00005AE2, + 15125: 0x00005AE0, + 15126: 0x00005ADB, + 15127: 0x00005AEC, + 15128: 0x00005ADE, + 15129: 0x00005ADD, + 15130: 0x00005AD9, + 15131: 0x00005AE8, + 15132: 0x00005ADF, + 15133: 0x00005B77, + 15134: 0x00005BE0, + 15135: 0x00005BE3, + 15136: 0x00005C63, + 15137: 0x00005D82, + 15138: 0x00005D80, + 15139: 0x00005D7D, + 15140: 0x00005D86, + 15141: 0x00005D7A, + 15142: 0x00005D81, + 15143: 0x00005D77, + 15144: 0x00005D8A, + 15145: 0x00005D89, + 15146: 0x00005D88, + 15147: 0x00005D7E, + 15148: 0x00005D7C, + 15149: 0x00005D8D, + 15150: 0x00005D79, + 15151: 0x00005D7F, + 15152: 0x00005E58, + 15153: 0x00005E59, + 15154: 0x00005E53, + 15155: 0x00005ED8, + 15156: 0x00005ED1, + 15157: 0x00005ED7, + 15158: 0x00005ECE, + 15159: 0x00005EDC, + 15160: 0x00005ED5, + 15161: 0x00005ED9, + 15162: 0x00005ED2, + 15163: 0x00005ED4, + 15164: 0x00005F44, + 15165: 0x00005F43, + 15166: 0x00005F6F, + 15167: 0x00005FB6, + 15168: 0x0000612C, + 15169: 0x00006128, + 15170: 0x00006141, + 15171: 0x0000615E, + 15172: 0x00006171, + 15173: 0x00006173, + 15174: 0x00006152, + 15175: 0x00006153, + 15176: 0x00006172, + 15177: 0x0000616C, + 15178: 0x00006180, + 15179: 0x00006174, + 15180: 0x00006154, + 15181: 0x0000617A, + 15182: 0x0000615B, + 15183: 0x00006165, + 15184: 0x0000613B, + 15185: 0x0000616A, + 15186: 0x00006161, + 15187: 0x00006156, + 15188: 0x00006229, + 15189: 0x00006227, + 15190: 0x0000622B, + 15191: 0x0000642B, + 15192: 0x0000644D, + 15193: 0x0000645B, + 15194: 0x0000645D, + 15195: 0x00006474, + 15196: 0x00006476, + 15197: 0x00006472, + 15198: 0x00006473, + 15199: 0x0000647D, + 15200: 0x00006475, + 15201: 0x00006466, + 15202: 0x000064A6, + 15203: 0x0000644E, + 15204: 0x00006482, + 15205: 0x0000645E, + 15206: 0x0000645C, + 15207: 0x0000644B, + 15208: 0x00006453, + 15209: 0x00006460, + 15210: 0x00006450, + 15211: 0x0000647F, + 15212: 0x0000643F, + 15213: 0x0000646C, + 15214: 0x0000646B, + 15215: 0x00006459, + 15216: 0x00006465, + 15217: 0x00006477, + 15218: 0x00006573, + 15219: 0x000065A0, + 15220: 0x000066A1, + 15221: 0x000066A0, + 15222: 0x0000669F, + 15223: 0x00006705, + 15224: 0x00006704, + 15225: 0x00006722, + 15226: 0x000069B1, + 15227: 0x000069B6, + 15228: 0x000069C9, + 15229: 0x000069A0, + 15230: 0x000069CE, + 15231: 0x00006996, + 15232: 0x000069B0, + 15233: 0x000069AC, + 15234: 0x000069BC, + 15235: 0x00006991, + 15236: 0x00006999, + 15237: 0x0000698E, + 15238: 0x000069A7, + 15239: 0x0000698D, + 15240: 0x000069A9, + 15241: 0x000069BE, + 15242: 0x000069AF, + 15243: 0x000069BF, + 15244: 0x000069C4, + 15245: 0x000069BD, + 15246: 0x000069A4, + 15247: 0x000069D4, + 15248: 0x000069B9, + 15249: 0x000069CA, + 15250: 0x0000699A, + 15251: 0x000069CF, + 15252: 0x000069B3, + 15253: 0x00006993, + 15254: 0x000069AA, + 15255: 0x000069A1, + 15256: 0x0000699E, + 15257: 0x000069D9, + 15258: 0x00006997, + 15259: 0x00006990, + 15260: 0x000069C2, + 15261: 0x000069B5, + 15262: 0x000069A5, + 15263: 0x000069C6, + 15264: 0x00006B4A, + 15265: 0x00006B4D, + 15266: 0x00006B4B, + 15267: 0x00006B9E, + 15268: 0x00006B9F, + 15269: 0x00006BA0, + 15270: 0x00006BC3, + 15271: 0x00006BC4, + 15272: 0x00006BFE, + 15273: 0x00006ECE, + 15274: 0x00006EF5, + 15275: 0x00006EF1, + 15276: 0x00006F03, + 15277: 0x00006F25, + 15278: 0x00006EF8, + 15279: 0x00006F37, + 15280: 0x00006EFB, + 15281: 0x00006F2E, + 15282: 0x00006F09, + 15283: 0x00006F4E, + 15284: 0x00006F19, + 15285: 0x00006F1A, + 15286: 0x00006F27, + 15287: 0x00006F18, + 15288: 0x00006F3B, + 15289: 0x00006F12, + 15290: 0x00006EED, + 15291: 0x00006F0A, + 15292: 0x00006F36, + 15293: 0x00006F73, + 15294: 0x00006EF9, + 15295: 0x00006EEE, + 15296: 0x00006F2D, + 15297: 0x00006F40, + 15298: 0x00006F30, + 15299: 0x00006F3C, + 15300: 0x00006F35, + 15301: 0x00006EEB, + 15302: 0x00006F07, + 15303: 0x00006F0E, + 15304: 0x00006F43, + 15305: 0x00006F05, + 15306: 0x00006EFD, + 15307: 0x00006EF6, + 15308: 0x00006F39, + 15309: 0x00006F1C, + 15310: 0x00006EFC, + 15311: 0x00006F3A, + 15312: 0x00006F1F, + 15313: 0x00006F0D, + 15314: 0x00006F1E, + 15315: 0x00006F08, + 15316: 0x00006F21, + 15317: 0x00007187, + 15318: 0x00007190, + 15319: 0x00007189, + 15320: 0x00007180, + 15321: 0x00007185, + 15322: 0x00007182, + 15323: 0x0000718F, + 15324: 0x0000717B, + 15325: 0x00007186, + 15326: 0x00007181, + 15327: 0x00007197, + 15328: 0x00007244, + 15329: 0x00007253, + 15330: 0x00007297, + 15331: 0x00007295, + 15332: 0x00007293, + 15333: 0x00007343, + 15334: 0x0000734D, + 15335: 0x00007351, + 15336: 0x0000734C, + 15337: 0x00007462, + 15338: 0x00007473, + 15339: 0x00007471, + 15340: 0x00007475, + 15341: 0x00007472, + 15342: 0x00007467, + 15343: 0x0000746E, + 15344: 0x00007500, + 15345: 0x00007502, + 15346: 0x00007503, + 15347: 0x0000757D, + 15348: 0x00007590, + 15349: 0x00007616, + 15350: 0x00007608, + 15351: 0x0000760C, + 15352: 0x00007615, + 15353: 0x00007611, + 15354: 0x0000760A, + 15355: 0x00007614, + 15356: 0x000076B8, + 15357: 0x00007781, + 15358: 0x0000777C, + 15359: 0x00007785, + 15360: 0x00007782, + 15361: 0x0000776E, + 15362: 0x00007780, + 15363: 0x0000776F, + 15364: 0x0000777E, + 15365: 0x00007783, + 15366: 0x000078B2, + 15367: 0x000078AA, + 15368: 0x000078B4, + 15369: 0x000078AD, + 15370: 0x000078A8, + 15371: 0x0000787E, + 15372: 0x000078AB, + 15373: 0x0000789E, + 15374: 0x000078A5, + 15375: 0x000078A0, + 15376: 0x000078AC, + 15377: 0x000078A2, + 15378: 0x000078A4, + 15379: 0x00007998, + 15380: 0x0000798A, + 15381: 0x0000798B, + 15382: 0x00007996, + 15383: 0x00007995, + 15384: 0x00007994, + 15385: 0x00007993, + 15386: 0x00007997, + 15387: 0x00007988, + 15388: 0x00007992, + 15389: 0x00007990, + 15390: 0x00007A2B, + 15391: 0x00007A4A, + 15392: 0x00007A30, + 15393: 0x00007A2F, + 15394: 0x00007A28, + 15395: 0x00007A26, + 15396: 0x00007AA8, + 15397: 0x00007AAB, + 15398: 0x00007AAC, + 15399: 0x00007AEE, + 15400: 0x00007B88, + 15401: 0x00007B9C, + 15402: 0x00007B8A, + 15403: 0x00007B91, + 15404: 0x00007B90, + 15405: 0x00007B96, + 15406: 0x00007B8D, + 15407: 0x00007B8C, + 15408: 0x00007B9B, + 15409: 0x00007B8E, + 15410: 0x00007B85, + 15411: 0x00007B98, + 15412: 0x00005284, + 15413: 0x00007B99, + 15414: 0x00007BA4, + 15415: 0x00007B82, + 15416: 0x00007CBB, + 15417: 0x00007CBF, + 15418: 0x00007CBC, + 15419: 0x00007CBA, + 15420: 0x00007DA7, + 15421: 0x00007DB7, + 15422: 0x00007DC2, + 15423: 0x00007DA3, + 15424: 0x00007DAA, + 15425: 0x00007DC1, + 15426: 0x00007DC0, + 15427: 0x00007DC5, + 15428: 0x00007D9D, + 15429: 0x00007DCE, + 15430: 0x00007DC4, + 15431: 0x00007DC6, + 15432: 0x00007DCB, + 15433: 0x00007DCC, + 15434: 0x00007DAF, + 15435: 0x00007DB9, + 15436: 0x00007D96, + 15437: 0x00007DBC, + 15438: 0x00007D9F, + 15439: 0x00007DA6, + 15440: 0x00007DAE, + 15441: 0x00007DA9, + 15442: 0x00007DA1, + 15443: 0x00007DC9, + 15444: 0x00007F73, + 15445: 0x00007FE2, + 15446: 0x00007FE3, + 15447: 0x00007FE5, + 15448: 0x00007FDE, + 15449: 0x00008024, + 15450: 0x0000805D, + 15451: 0x0000805C, + 15452: 0x00008189, + 15453: 0x00008186, + 15454: 0x00008183, + 15455: 0x00008187, + 15456: 0x0000818D, + 15457: 0x0000818C, + 15458: 0x0000818B, + 15459: 0x00008215, + 15460: 0x00008497, + 15461: 0x000084A4, + 15462: 0x000084A1, + 15463: 0x0000849F, + 15464: 0x000084BA, + 15465: 0x000084CE, + 15466: 0x000084C2, + 15467: 0x000084AC, + 15468: 0x000084AE, + 15469: 0x000084AB, + 15470: 0x000084B9, + 15471: 0x000084B4, + 15472: 0x000084C1, + 15473: 0x000084CD, + 15474: 0x000084AA, + 15475: 0x0000849A, + 15476: 0x000084B1, + 15477: 0x000084D0, + 15478: 0x0000849D, + 15479: 0x000084A7, + 15480: 0x000084BB, + 15481: 0x000084A2, + 15482: 0x00008494, + 15483: 0x000084C7, + 15484: 0x000084CC, + 15485: 0x0000849B, + 15486: 0x000084A9, + 15487: 0x000084AF, + 15488: 0x000084A8, + 15489: 0x000084D6, + 15490: 0x00008498, + 15491: 0x000084B6, + 15492: 0x000084CF, + 15493: 0x000084A0, + 15494: 0x000084D7, + 15495: 0x000084D4, + 15496: 0x000084D2, + 15497: 0x000084DB, + 15498: 0x000084B0, + 15499: 0x00008491, + 15500: 0x00008661, + 15501: 0x00008733, + 15502: 0x00008723, + 15503: 0x00008728, + 15504: 0x0000876B, + 15505: 0x00008740, + 15506: 0x0000872E, + 15507: 0x0000871E, + 15508: 0x00008721, + 15509: 0x00008719, + 15510: 0x0000871B, + 15511: 0x00008743, + 15512: 0x0000872C, + 15513: 0x00008741, + 15514: 0x0000873E, + 15515: 0x00008746, + 15516: 0x00008720, + 15517: 0x00008732, + 15518: 0x0000872A, + 15519: 0x0000872D, + 15520: 0x0000873C, + 15521: 0x00008712, + 15522: 0x0000873A, + 15523: 0x00008731, + 15524: 0x00008735, + 15525: 0x00008742, + 15526: 0x00008726, + 15527: 0x00008727, + 15528: 0x00008738, + 15529: 0x00008724, + 15530: 0x0000871A, + 15531: 0x00008730, + 15532: 0x00008711, + 15533: 0x000088F7, + 15534: 0x000088E7, + 15535: 0x000088F1, + 15536: 0x000088F2, + 15537: 0x000088FA, + 15538: 0x000088FE, + 15539: 0x000088EE, + 15540: 0x000088FC, + 15541: 0x000088F6, + 15542: 0x000088FB, + 15543: 0x000088F0, + 15544: 0x000088EC, + 15545: 0x000088EB, + 15546: 0x0000899D, + 15547: 0x000089A1, + 15548: 0x0000899F, + 15549: 0x0000899E, + 15550: 0x000089E9, + 15551: 0x000089EB, + 15552: 0x000089E8, + 15553: 0x00008AAB, + 15554: 0x00008A99, + 15555: 0x00008A8B, + 15556: 0x00008A92, + 15557: 0x00008A8F, + 15558: 0x00008A96, + 15559: 0x00008C3D, + 15560: 0x00008C68, + 15561: 0x00008C69, + 15562: 0x00008CD5, + 15563: 0x00008CCF, + 15564: 0x00008CD7, + 15565: 0x00008D96, + 15566: 0x00008E09, + 15567: 0x00008E02, + 15568: 0x00008DFF, + 15569: 0x00008E0D, + 15570: 0x00008DFD, + 15571: 0x00008E0A, + 15572: 0x00008E03, + 15573: 0x00008E07, + 15574: 0x00008E06, + 15575: 0x00008E05, + 15576: 0x00008DFE, + 15577: 0x00008E00, + 15578: 0x00008E04, + 15579: 0x00008F10, + 15580: 0x00008F11, + 15581: 0x00008F0E, + 15582: 0x00008F0D, + 15583: 0x00009123, + 15584: 0x0000911C, + 15585: 0x00009120, + 15586: 0x00009122, + 15587: 0x0000911F, + 15588: 0x0000911D, + 15589: 0x0000911A, + 15590: 0x00009124, + 15591: 0x00009121, + 15592: 0x0000911B, + 15593: 0x0000917A, + 15594: 0x00009172, + 15595: 0x00009179, + 15596: 0x00009173, + 15597: 0x000092A5, + 15598: 0x000092A4, + 15599: 0x00009276, + 15600: 0x0000929B, + 15601: 0x0000927A, + 15602: 0x000092A0, + 15603: 0x00009294, + 15604: 0x000092AA, + 15605: 0x0000928D, + 15606: 0x000092A6, + 15607: 0x0000929A, + 15608: 0x000092AB, + 15609: 0x00009279, + 15610: 0x00009297, + 15611: 0x0000927F, + 15612: 0x000092A3, + 15613: 0x000092EE, + 15614: 0x0000928E, + 15615: 0x00009282, + 15616: 0x00009295, + 15617: 0x000092A2, + 15618: 0x0000927D, + 15619: 0x00009288, + 15620: 0x000092A1, + 15621: 0x0000928A, + 15622: 0x00009286, + 15623: 0x0000928C, + 15624: 0x00009299, + 15625: 0x000092A7, + 15626: 0x0000927E, + 15627: 0x00009287, + 15628: 0x000092A9, + 15629: 0x0000929D, + 15630: 0x0000928B, + 15631: 0x0000922D, + 15632: 0x0000969E, + 15633: 0x000096A1, + 15634: 0x000096FF, + 15635: 0x00009758, + 15636: 0x0000977D, + 15637: 0x0000977A, + 15638: 0x0000977E, + 15639: 0x00009783, + 15640: 0x00009780, + 15641: 0x00009782, + 15642: 0x0000977B, + 15643: 0x00009784, + 15644: 0x00009781, + 15645: 0x0000977F, + 15646: 0x000097CE, + 15647: 0x000097CD, + 15648: 0x00009816, + 15649: 0x000098AD, + 15650: 0x000098AE, + 15651: 0x00009902, + 15652: 0x00009900, + 15653: 0x00009907, + 15654: 0x0000999D, + 15655: 0x0000999C, + 15656: 0x000099C3, + 15657: 0x000099B9, + 15658: 0x000099BB, + 15659: 0x000099BA, + 15660: 0x000099C2, + 15661: 0x000099BD, + 15662: 0x000099C7, + 15663: 0x00009AB1, + 15664: 0x00009AE3, + 15665: 0x00009AE7, + 15666: 0x00009B3E, + 15667: 0x00009B3F, + 15668: 0x00009B60, + 15669: 0x00009B61, + 15670: 0x00009B5F, + 15671: 0x00009CF1, + 15672: 0x00009CF2, + 15673: 0x00009CF5, + 15674: 0x00009EA7, + 15675: 0x000050FF, + 15676: 0x00005103, + 15677: 0x00005130, + 15678: 0x000050F8, + 15679: 0x00005106, + 15680: 0x00005107, + 15681: 0x000050F6, + 15682: 0x000050FE, + 15683: 0x0000510B, + 15684: 0x0000510C, + 15685: 0x000050FD, + 15686: 0x0000510A, + 15687: 0x0000528B, + 15688: 0x0000528C, + 15689: 0x000052F1, + 15690: 0x000052EF, + 15691: 0x00005648, + 15692: 0x00005642, + 15693: 0x0000564C, + 15694: 0x00005635, + 15695: 0x00005641, + 15696: 0x0000564A, + 15697: 0x00005649, + 15698: 0x00005646, + 15699: 0x00005658, + 15700: 0x0000565A, + 15701: 0x00005640, + 15702: 0x00005633, + 15703: 0x0000563D, + 15704: 0x0000562C, + 15705: 0x0000563E, + 15706: 0x00005638, + 15707: 0x0000562A, + 15708: 0x0000563A, + 15709: 0x0000571A, + 15710: 0x000058AB, + 15711: 0x0000589D, + 15712: 0x000058B1, + 15713: 0x000058A0, + 15714: 0x000058A3, + 15715: 0x000058AF, + 15716: 0x000058AC, + 15717: 0x000058A5, + 15718: 0x000058A1, + 15719: 0x000058FF, + 15720: 0x00005AFF, + 15721: 0x00005AF4, + 15722: 0x00005AFD, + 15723: 0x00005AF7, + 15724: 0x00005AF6, + 15725: 0x00005B03, + 15726: 0x00005AF8, + 15727: 0x00005B02, + 15728: 0x00005AF9, + 15729: 0x00005B01, + 15730: 0x00005B07, + 15731: 0x00005B05, + 15732: 0x00005B0F, + 15733: 0x00005C67, + 15734: 0x00005D99, + 15735: 0x00005D97, + 15736: 0x00005D9F, + 15737: 0x00005D92, + 15738: 0x00005DA2, + 15739: 0x00005D93, + 15740: 0x00005D95, + 15741: 0x00005DA0, + 15742: 0x00005D9C, + 15743: 0x00005DA1, + 15744: 0x00005D9A, + 15745: 0x00005D9E, + 15746: 0x00005E69, + 15747: 0x00005E5D, + 15748: 0x00005E60, + 15749: 0x00005E5C, + 15750: 0x00007DF3, + 15751: 0x00005EDB, + 15752: 0x00005EDE, + 15753: 0x00005EE1, + 15754: 0x00005F49, + 15755: 0x00005FB2, + 15756: 0x0000618B, + 15757: 0x00006183, + 15758: 0x00006179, + 15759: 0x000061B1, + 15760: 0x000061B0, + 15761: 0x000061A2, + 15762: 0x00006189, + 15763: 0x0000619B, + 15764: 0x00006193, + 15765: 0x000061AF, + 15766: 0x000061AD, + 15767: 0x0000619F, + 15768: 0x00006192, + 15769: 0x000061AA, + 15770: 0x000061A1, + 15771: 0x0000618D, + 15772: 0x00006166, + 15773: 0x000061B3, + 15774: 0x0000622D, + 15775: 0x0000646E, + 15776: 0x00006470, + 15777: 0x00006496, + 15778: 0x000064A0, + 15779: 0x00006485, + 15780: 0x00006497, + 15781: 0x0000649C, + 15782: 0x0000648F, + 15783: 0x0000648B, + 15784: 0x0000648A, + 15785: 0x0000648C, + 15786: 0x000064A3, + 15787: 0x0000649F, + 15788: 0x00006468, + 15789: 0x000064B1, + 15790: 0x00006498, + 15791: 0x00006576, + 15792: 0x0000657A, + 15793: 0x00006579, + 15794: 0x0000657B, + 15795: 0x000065B2, + 15796: 0x000065B3, + 15797: 0x000066B5, + 15798: 0x000066B0, + 15799: 0x000066A9, + 15800: 0x000066B2, + 15801: 0x000066B7, + 15802: 0x000066AA, + 15803: 0x000066AF, + 15804: 0x00006A00, + 15805: 0x00006A06, + 15806: 0x00006A17, + 15807: 0x000069E5, + 15808: 0x000069F8, + 15809: 0x00006A15, + 15810: 0x000069F1, + 15811: 0x000069E4, + 15812: 0x00006A20, + 15813: 0x000069FF, + 15814: 0x000069EC, + 15815: 0x000069E2, + 15816: 0x00006A1B, + 15817: 0x00006A1D, + 15818: 0x000069FE, + 15819: 0x00006A27, + 15820: 0x000069F2, + 15821: 0x000069EE, + 15822: 0x00006A14, + 15823: 0x000069F7, + 15824: 0x000069E7, + 15825: 0x00006A40, + 15826: 0x00006A08, + 15827: 0x000069E6, + 15828: 0x000069FB, + 15829: 0x00006A0D, + 15830: 0x000069FC, + 15831: 0x000069EB, + 15832: 0x00006A09, + 15833: 0x00006A04, + 15834: 0x00006A18, + 15835: 0x00006A25, + 15836: 0x00006A0F, + 15837: 0x000069F6, + 15838: 0x00006A26, + 15839: 0x00006A07, + 15840: 0x000069F4, + 15841: 0x00006A16, + 15842: 0x00006B51, + 15843: 0x00006BA5, + 15844: 0x00006BA3, + 15845: 0x00006BA2, + 15846: 0x00006BA6, + 15847: 0x00006C01, + 15848: 0x00006C00, + 15849: 0x00006BFF, + 15850: 0x00006C02, + 15851: 0x00006F41, + 15852: 0x00006F26, + 15853: 0x00006F7E, + 15854: 0x00006F87, + 15855: 0x00006FC6, + 15856: 0x00006F92, + 15857: 0x00006F8D, + 15858: 0x00006F89, + 15859: 0x00006F8C, + 15860: 0x00006F62, + 15861: 0x00006F4F, + 15862: 0x00006F85, + 15863: 0x00006F5A, + 15864: 0x00006F96, + 15865: 0x00006F76, + 15866: 0x00006F6C, + 15867: 0x00006F82, + 15868: 0x00006F55, + 15869: 0x00006F72, + 15870: 0x00006F52, + 15871: 0x00006F50, + 15872: 0x00006F57, + 15873: 0x00006F94, + 15874: 0x00006F93, + 15875: 0x00006F5D, + 15876: 0x00006F00, + 15877: 0x00006F61, + 15878: 0x00006F6B, + 15879: 0x00006F7D, + 15880: 0x00006F67, + 15881: 0x00006F90, + 15882: 0x00006F53, + 15883: 0x00006F8B, + 15884: 0x00006F69, + 15885: 0x00006F7F, + 15886: 0x00006F95, + 15887: 0x00006F63, + 15888: 0x00006F77, + 15889: 0x00006F6A, + 15890: 0x00006F7B, + 15891: 0x000071B2, + 15892: 0x000071AF, + 15893: 0x0000719B, + 15894: 0x000071B0, + 15895: 0x000071A0, + 15896: 0x0000719A, + 15897: 0x000071A9, + 15898: 0x000071B5, + 15899: 0x0000719D, + 15900: 0x000071A5, + 15901: 0x0000719E, + 15902: 0x000071A4, + 15903: 0x000071A1, + 15904: 0x000071AA, + 15905: 0x0000719C, + 15906: 0x000071A7, + 15907: 0x000071B3, + 15908: 0x00007298, + 15909: 0x0000729A, + 15910: 0x00007358, + 15911: 0x00007352, + 15912: 0x0000735E, + 15913: 0x0000735F, + 15914: 0x00007360, + 15915: 0x0000735D, + 15916: 0x0000735B, + 15917: 0x00007361, + 15918: 0x0000735A, + 15919: 0x00007359, + 15920: 0x00007362, + 15921: 0x00007487, + 15922: 0x00007489, + 15923: 0x0000748A, + 15924: 0x00007486, + 15925: 0x00007481, + 15926: 0x0000747D, + 15927: 0x00007485, + 15928: 0x00007488, + 15929: 0x0000747C, + 15930: 0x00007479, + 15931: 0x00007508, + 15932: 0x00007507, + 15933: 0x0000757E, + 15934: 0x00007625, + 15935: 0x0000761E, + 15936: 0x00007619, + 15937: 0x0000761D, + 15938: 0x0000761C, + 15939: 0x00007623, + 15940: 0x0000761A, + 15941: 0x00007628, + 15942: 0x0000761B, + 15943: 0x0000769C, + 15944: 0x0000769D, + 15945: 0x0000769E, + 15946: 0x0000769B, + 15947: 0x0000778D, + 15948: 0x0000778F, + 15949: 0x00007789, + 15950: 0x00007788, + 15951: 0x000078CD, + 15952: 0x000078BB, + 15953: 0x000078CF, + 15954: 0x000078CC, + 15955: 0x000078D1, + 15956: 0x000078CE, + 15957: 0x000078D4, + 15958: 0x000078C8, + 15959: 0x000078C3, + 15960: 0x000078C4, + 15961: 0x000078C9, + 15962: 0x0000799A, + 15963: 0x000079A1, + 15964: 0x000079A0, + 15965: 0x0000799C, + 15966: 0x000079A2, + 15967: 0x0000799B, + 15968: 0x00006B76, + 15969: 0x00007A39, + 15970: 0x00007AB2, + 15971: 0x00007AB4, + 15972: 0x00007AB3, + 15973: 0x00007BB7, + 15974: 0x00007BCB, + 15975: 0x00007BBE, + 15976: 0x00007BAC, + 15977: 0x00007BCE, + 15978: 0x00007BAF, + 15979: 0x00007BB9, + 15980: 0x00007BCA, + 15981: 0x00007BB5, + 15982: 0x00007CC5, + 15983: 0x00007CC8, + 15984: 0x00007CCC, + 15985: 0x00007CCB, + 15986: 0x00007DF7, + 15987: 0x00007DDB, + 15988: 0x00007DEA, + 15989: 0x00007DE7, + 15990: 0x00007DD7, + 15991: 0x00007DE1, + 15992: 0x00007E03, + 15993: 0x00007DFA, + 15994: 0x00007DE6, + 15995: 0x00007DF6, + 15996: 0x00007DF1, + 15997: 0x00007DF0, + 15998: 0x00007DEE, + 15999: 0x00007DDF, + 16000: 0x00007F76, + 16001: 0x00007FAC, + 16002: 0x00007FB0, + 16003: 0x00007FAD, + 16004: 0x00007FED, + 16005: 0x00007FEB, + 16006: 0x00007FEA, + 16007: 0x00007FEC, + 16008: 0x00007FE6, + 16009: 0x00007FE8, + 16010: 0x00008064, + 16011: 0x00008067, + 16012: 0x000081A3, + 16013: 0x0000819F, + 16014: 0x0000819E, + 16015: 0x00008195, + 16016: 0x000081A2, + 16017: 0x00008199, + 16018: 0x00008197, + 16019: 0x00008216, + 16020: 0x0000824F, + 16021: 0x00008253, + 16022: 0x00008252, + 16023: 0x00008250, + 16024: 0x0000824E, + 16025: 0x00008251, + 16026: 0x00008524, + 16027: 0x0000853B, + 16028: 0x0000850F, + 16029: 0x00008500, + 16030: 0x00008529, + 16031: 0x0000850E, + 16032: 0x00008509, + 16033: 0x0000850D, + 16034: 0x0000851F, + 16035: 0x0000850A, + 16036: 0x00008527, + 16037: 0x0000851C, + 16038: 0x000084FB, + 16039: 0x0000852B, + 16040: 0x000084FA, + 16041: 0x00008508, + 16042: 0x0000850C, + 16043: 0x000084F4, + 16044: 0x0000852A, + 16045: 0x000084F2, + 16046: 0x00008515, + 16047: 0x000084F7, + 16048: 0x000084EB, + 16049: 0x000084F3, + 16050: 0x000084FC, + 16051: 0x00008512, + 16052: 0x000084EA, + 16053: 0x000084E9, + 16054: 0x00008516, + 16055: 0x000084FE, + 16056: 0x00008528, + 16057: 0x0000851D, + 16058: 0x0000852E, + 16059: 0x00008502, + 16060: 0x000084FD, + 16061: 0x0000851E, + 16062: 0x000084F6, + 16063: 0x00008531, + 16064: 0x00008526, + 16065: 0x000084E7, + 16066: 0x000084E8, + 16067: 0x000084F0, + 16068: 0x000084EF, + 16069: 0x000084F9, + 16070: 0x00008518, + 16071: 0x00008520, + 16072: 0x00008530, + 16073: 0x0000850B, + 16074: 0x00008519, + 16075: 0x0000852F, + 16076: 0x00008662, + 16077: 0x00008756, + 16078: 0x00008763, + 16079: 0x00008764, + 16080: 0x00008777, + 16081: 0x000087E1, + 16082: 0x00008773, + 16083: 0x00008758, + 16084: 0x00008754, + 16085: 0x0000875B, + 16086: 0x00008752, + 16087: 0x00008761, + 16088: 0x0000875A, + 16089: 0x00008751, + 16090: 0x0000875E, + 16091: 0x0000876D, + 16092: 0x0000876A, + 16093: 0x00008750, + 16094: 0x0000874E, + 16095: 0x0000875F, + 16096: 0x0000875D, + 16097: 0x0000876F, + 16098: 0x0000876C, + 16099: 0x0000877A, + 16100: 0x0000876E, + 16101: 0x0000875C, + 16102: 0x00008765, + 16103: 0x0000874F, + 16104: 0x0000877B, + 16105: 0x00008775, + 16106: 0x00008762, + 16107: 0x00008767, + 16108: 0x00008769, + 16109: 0x0000885A, + 16110: 0x00008905, + 16111: 0x0000890C, + 16112: 0x00008914, + 16113: 0x0000890B, + 16114: 0x00008917, + 16115: 0x00008918, + 16116: 0x00008919, + 16117: 0x00008906, + 16118: 0x00008916, + 16119: 0x00008911, + 16120: 0x0000890E, + 16121: 0x00008909, + 16122: 0x000089A2, + 16123: 0x000089A4, + 16124: 0x000089A3, + 16125: 0x000089ED, + 16126: 0x000089F0, + 16127: 0x000089EC, + 16128: 0x00008ACF, + 16129: 0x00008AC6, + 16130: 0x00008AB8, + 16131: 0x00008AD3, + 16132: 0x00008AD1, + 16133: 0x00008AD4, + 16134: 0x00008AD5, + 16135: 0x00008ABB, + 16136: 0x00008AD7, + 16137: 0x00008ABE, + 16138: 0x00008AC0, + 16139: 0x00008AC5, + 16140: 0x00008AD8, + 16141: 0x00008AC3, + 16142: 0x00008ABA, + 16143: 0x00008ABD, + 16144: 0x00008AD9, + 16145: 0x00008C3E, + 16146: 0x00008C4D, + 16147: 0x00008C8F, + 16148: 0x00008CE5, + 16149: 0x00008CDF, + 16150: 0x00008CD9, + 16151: 0x00008CE8, + 16152: 0x00008CDA, + 16153: 0x00008CDD, + 16154: 0x00008CE7, + 16155: 0x00008DA0, + 16156: 0x00008D9C, + 16157: 0x00008DA1, + 16158: 0x00008D9B, + 16159: 0x00008E20, + 16160: 0x00008E23, + 16161: 0x00008E25, + 16162: 0x00008E24, + 16163: 0x00008E2E, + 16164: 0x00008E15, + 16165: 0x00008E1B, + 16166: 0x00008E16, + 16167: 0x00008E11, + 16168: 0x00008E19, + 16169: 0x00008E26, + 16170: 0x00008E27, + 16171: 0x00008E14, + 16172: 0x00008E12, + 16173: 0x00008E18, + 16174: 0x00008E13, + 16175: 0x00008E1C, + 16176: 0x00008E17, + 16177: 0x00008E1A, + 16178: 0x00008F2C, + 16179: 0x00008F24, + 16180: 0x00008F18, + 16181: 0x00008F1A, + 16182: 0x00008F20, + 16183: 0x00008F23, + 16184: 0x00008F16, + 16185: 0x00008F17, + 16186: 0x00009073, + 16187: 0x00009070, + 16188: 0x0000906F, + 16189: 0x00009067, + 16190: 0x0000906B, + 16191: 0x0000912F, + 16192: 0x0000912B, + 16193: 0x00009129, + 16194: 0x0000912A, + 16195: 0x00009132, + 16196: 0x00009126, + 16197: 0x0000912E, + 16198: 0x00009185, + 16199: 0x00009186, + 16200: 0x0000918A, + 16201: 0x00009181, + 16202: 0x00009182, + 16203: 0x00009184, + 16204: 0x00009180, + 16205: 0x000092D0, + 16206: 0x000092C3, + 16207: 0x000092C4, + 16208: 0x000092C0, + 16209: 0x000092D9, + 16210: 0x000092B6, + 16211: 0x000092CF, + 16212: 0x000092F1, + 16213: 0x000092DF, + 16214: 0x000092D8, + 16215: 0x000092E9, + 16216: 0x000092D7, + 16217: 0x000092DD, + 16218: 0x000092CC, + 16219: 0x000092EF, + 16220: 0x000092C2, + 16221: 0x000092E8, + 16222: 0x000092CA, + 16223: 0x000092C8, + 16224: 0x000092CE, + 16225: 0x000092E6, + 16226: 0x000092CD, + 16227: 0x000092D5, + 16228: 0x000092C9, + 16229: 0x000092E0, + 16230: 0x000092DE, + 16231: 0x000092E7, + 16232: 0x000092D1, + 16233: 0x000092D3, + 16234: 0x000092B5, + 16235: 0x000092E1, + 16236: 0x000092C6, + 16237: 0x000092B4, + 16238: 0x0000957C, + 16239: 0x000095AC, + 16240: 0x000095AB, + 16241: 0x000095AE, + 16242: 0x000095B0, + 16243: 0x000096A4, + 16244: 0x000096A2, + 16245: 0x000096D3, + 16246: 0x00009705, + 16247: 0x00009708, + 16248: 0x00009702, + 16249: 0x0000975A, + 16250: 0x0000978A, + 16251: 0x0000978E, + 16252: 0x00009788, + 16253: 0x000097D0, + 16254: 0x000097CF, + 16255: 0x0000981E, + 16256: 0x0000981D, + 16257: 0x00009826, + 16258: 0x00009829, + 16259: 0x00009828, + 16260: 0x00009820, + 16261: 0x0000981B, + 16262: 0x00009827, + 16263: 0x000098B2, + 16264: 0x00009908, + 16265: 0x000098FA, + 16266: 0x00009911, + 16267: 0x00009914, + 16268: 0x00009916, + 16269: 0x00009917, + 16270: 0x00009915, + 16271: 0x000099DC, + 16272: 0x000099CD, + 16273: 0x000099CF, + 16274: 0x000099D3, + 16275: 0x000099D4, + 16276: 0x000099CE, + 16277: 0x000099C9, + 16278: 0x000099D6, + 16279: 0x000099D8, + 16280: 0x000099CB, + 16281: 0x000099D7, + 16282: 0x000099CC, + 16283: 0x00009AB3, + 16284: 0x00009AEC, + 16285: 0x00009AEB, + 16286: 0x00009AF3, + 16287: 0x00009AF2, + 16288: 0x00009AF1, + 16289: 0x00009B46, + 16290: 0x00009B43, + 16291: 0x00009B67, + 16292: 0x00009B74, + 16293: 0x00009B71, + 16294: 0x00009B66, + 16295: 0x00009B76, + 16296: 0x00009B75, + 16297: 0x00009B70, + 16298: 0x00009B68, + 16299: 0x00009B64, + 16300: 0x00009B6C, + 16301: 0x00009CFC, + 16302: 0x00009CFA, + 16303: 0x00009CFD, + 16304: 0x00009CFF, + 16305: 0x00009CF7, + 16306: 0x00009D07, + 16307: 0x00009D00, + 16308: 0x00009CF9, + 16309: 0x00009CFB, + 16310: 0x00009D08, + 16311: 0x00009D05, + 16312: 0x00009D04, + 16313: 0x00009E83, + 16314: 0x00009ED3, + 16315: 0x00009F0F, + 16316: 0x00009F10, + 16317: 0x0000511C, + 16318: 0x00005113, + 16319: 0x00005117, + 16320: 0x0000511A, + 16321: 0x00005111, + 16322: 0x000051DE, + 16323: 0x00005334, + 16324: 0x000053E1, + 16325: 0x00005670, + 16326: 0x00005660, + 16327: 0x0000566E, + 16328: 0x00005673, + 16329: 0x00005666, + 16330: 0x00005663, + 16331: 0x0000566D, + 16332: 0x00005672, + 16333: 0x0000565E, + 16334: 0x00005677, + 16335: 0x0000571C, + 16336: 0x0000571B, + 16337: 0x000058C8, + 16338: 0x000058BD, + 16339: 0x000058C9, + 16340: 0x000058BF, + 16341: 0x000058BA, + 16342: 0x000058C2, + 16343: 0x000058BC, + 16344: 0x000058C6, + 16345: 0x00005B17, + 16346: 0x00005B19, + 16347: 0x00005B1B, + 16348: 0x00005B21, + 16349: 0x00005B14, + 16350: 0x00005B13, + 16351: 0x00005B10, + 16352: 0x00005B16, + 16353: 0x00005B28, + 16354: 0x00005B1A, + 16355: 0x00005B20, + 16356: 0x00005B1E, + 16357: 0x00005BEF, + 16358: 0x00005DAC, + 16359: 0x00005DB1, + 16360: 0x00005DA9, + 16361: 0x00005DA7, + 16362: 0x00005DB5, + 16363: 0x00005DB0, + 16364: 0x00005DAE, + 16365: 0x00005DAA, + 16366: 0x00005DA8, + 16367: 0x00005DB2, + 16368: 0x00005DAD, + 16369: 0x00005DAF, + 16370: 0x00005DB4, + 16371: 0x00005E67, + 16372: 0x00005E68, + 16373: 0x00005E66, + 16374: 0x00005E6F, + 16375: 0x00005EE9, + 16376: 0x00005EE7, + 16377: 0x00005EE6, + 16378: 0x00005EE8, + 16379: 0x00005EE5, + 16380: 0x00005F4B, + 16381: 0x00005FBC, + 16382: 0x0000619D, + 16383: 0x000061A8, + 16384: 0x00006196, + 16385: 0x000061C5, + 16386: 0x000061B4, + 16387: 0x000061C6, + 16388: 0x000061C1, + 16389: 0x000061CC, + 16390: 0x000061BA, + 16391: 0x000061BF, + 16392: 0x000061B8, + 16393: 0x0000618C, + 16394: 0x000064D7, + 16395: 0x000064D6, + 16396: 0x000064D0, + 16397: 0x000064CF, + 16398: 0x000064C9, + 16399: 0x000064BD, + 16400: 0x00006489, + 16401: 0x000064C3, + 16402: 0x000064DB, + 16403: 0x000064F3, + 16404: 0x000064D9, + 16405: 0x00006533, + 16406: 0x0000657F, + 16407: 0x0000657C, + 16408: 0x000065A2, + 16409: 0x000066C8, + 16410: 0x000066BE, + 16411: 0x000066C0, + 16412: 0x000066CA, + 16413: 0x000066CB, + 16414: 0x000066CF, + 16415: 0x000066BD, + 16416: 0x000066BB, + 16417: 0x000066BA, + 16418: 0x000066CC, + 16419: 0x00006723, + 16420: 0x00006A34, + 16421: 0x00006A66, + 16422: 0x00006A49, + 16423: 0x00006A67, + 16424: 0x00006A32, + 16425: 0x00006A68, + 16426: 0x00006A3E, + 16427: 0x00006A5D, + 16428: 0x00006A6D, + 16429: 0x00006A76, + 16430: 0x00006A5B, + 16431: 0x00006A51, + 16432: 0x00006A28, + 16433: 0x00006A5A, + 16434: 0x00006A3B, + 16435: 0x00006A3F, + 16436: 0x00006A41, + 16437: 0x00006A6A, + 16438: 0x00006A64, + 16439: 0x00006A50, + 16440: 0x00006A4F, + 16441: 0x00006A54, + 16442: 0x00006A6F, + 16443: 0x00006A69, + 16444: 0x00006A60, + 16445: 0x00006A3C, + 16446: 0x00006A5E, + 16447: 0x00006A56, + 16448: 0x00006A55, + 16449: 0x00006A4D, + 16450: 0x00006A4E, + 16451: 0x00006A46, + 16452: 0x00006B55, + 16453: 0x00006B54, + 16454: 0x00006B56, + 16455: 0x00006BA7, + 16456: 0x00006BAA, + 16457: 0x00006BAB, + 16458: 0x00006BC8, + 16459: 0x00006BC7, + 16460: 0x00006C04, + 16461: 0x00006C03, + 16462: 0x00006C06, + 16463: 0x00006FAD, + 16464: 0x00006FCB, + 16465: 0x00006FA3, + 16466: 0x00006FC7, + 16467: 0x00006FBC, + 16468: 0x00006FCE, + 16469: 0x00006FC8, + 16470: 0x00006F5E, + 16471: 0x00006FC4, + 16472: 0x00006FBD, + 16473: 0x00006F9E, + 16474: 0x00006FCA, + 16475: 0x00006FA8, + 16476: 0x00007004, + 16477: 0x00006FA5, + 16478: 0x00006FAE, + 16479: 0x00006FBA, + 16480: 0x00006FAC, + 16481: 0x00006FAA, + 16482: 0x00006FCF, + 16483: 0x00006FBF, + 16484: 0x00006FB8, + 16485: 0x00006FA2, + 16486: 0x00006FC9, + 16487: 0x00006FAB, + 16488: 0x00006FCD, + 16489: 0x00006FAF, + 16490: 0x00006FB2, + 16491: 0x00006FB0, + 16492: 0x000071C5, + 16493: 0x000071C2, + 16494: 0x000071BF, + 16495: 0x000071B8, + 16496: 0x000071D6, + 16497: 0x000071C0, + 16498: 0x000071C1, + 16499: 0x000071CB, + 16500: 0x000071D4, + 16501: 0x000071CA, + 16502: 0x000071C7, + 16503: 0x000071CF, + 16504: 0x000071BD, + 16505: 0x000071D8, + 16506: 0x000071BC, + 16507: 0x000071C6, + 16508: 0x000071DA, + 16509: 0x000071DB, + 16510: 0x0000729D, + 16511: 0x0000729E, + 16512: 0x00007369, + 16513: 0x00007366, + 16514: 0x00007367, + 16515: 0x0000736C, + 16516: 0x00007365, + 16517: 0x0000736B, + 16518: 0x0000736A, + 16519: 0x0000747F, + 16520: 0x0000749A, + 16521: 0x000074A0, + 16522: 0x00007494, + 16523: 0x00007492, + 16524: 0x00007495, + 16525: 0x000074A1, + 16526: 0x0000750B, + 16527: 0x00007580, + 16528: 0x0000762F, + 16529: 0x0000762D, + 16530: 0x00007631, + 16531: 0x0000763D, + 16532: 0x00007633, + 16533: 0x0000763C, + 16534: 0x00007635, + 16535: 0x00007632, + 16536: 0x00007630, + 16537: 0x000076BB, + 16538: 0x000076E6, + 16539: 0x0000779A, + 16540: 0x0000779D, + 16541: 0x000077A1, + 16542: 0x0000779C, + 16543: 0x0000779B, + 16544: 0x000077A2, + 16545: 0x000077A3, + 16546: 0x00007795, + 16547: 0x00007799, + 16548: 0x00007797, + 16549: 0x000078DD, + 16550: 0x000078E9, + 16551: 0x000078E5, + 16552: 0x000078EA, + 16553: 0x000078DE, + 16554: 0x000078E3, + 16555: 0x000078DB, + 16556: 0x000078E1, + 16557: 0x000078E2, + 16558: 0x000078ED, + 16559: 0x000078DF, + 16560: 0x000078E0, + 16561: 0x000079A4, + 16562: 0x00007A44, + 16563: 0x00007A48, + 16564: 0x00007A47, + 16565: 0x00007AB6, + 16566: 0x00007AB8, + 16567: 0x00007AB5, + 16568: 0x00007AB1, + 16569: 0x00007AB7, + 16570: 0x00007BDE, + 16571: 0x00007BE3, + 16572: 0x00007BE7, + 16573: 0x00007BDD, + 16574: 0x00007BD5, + 16575: 0x00007BE5, + 16576: 0x00007BDA, + 16577: 0x00007BE8, + 16578: 0x00007BF9, + 16579: 0x00007BD4, + 16580: 0x00007BEA, + 16581: 0x00007BE2, + 16582: 0x00007BDC, + 16583: 0x00007BEB, + 16584: 0x00007BD8, + 16585: 0x00007BDF, + 16586: 0x00007CD2, + 16587: 0x00007CD4, + 16588: 0x00007CD7, + 16589: 0x00007CD0, + 16590: 0x00007CD1, + 16591: 0x00007E12, + 16592: 0x00007E21, + 16593: 0x00007E17, + 16594: 0x00007E0C, + 16595: 0x00007E1F, + 16596: 0x00007E20, + 16597: 0x00007E13, + 16598: 0x00007E0E, + 16599: 0x00007E1C, + 16600: 0x00007E15, + 16601: 0x00007E1A, + 16602: 0x00007E22, + 16603: 0x00007E0B, + 16604: 0x00007E0F, + 16605: 0x00007E16, + 16606: 0x00007E0D, + 16607: 0x00007E14, + 16608: 0x00007E25, + 16609: 0x00007E24, + 16610: 0x00007F43, + 16611: 0x00007F7B, + 16612: 0x00007F7C, + 16613: 0x00007F7A, + 16614: 0x00007FB1, + 16615: 0x00007FEF, + 16616: 0x0000802A, + 16617: 0x00008029, + 16618: 0x0000806C, + 16619: 0x000081B1, + 16620: 0x000081A6, + 16621: 0x000081AE, + 16622: 0x000081B9, + 16623: 0x000081B5, + 16624: 0x000081AB, + 16625: 0x000081B0, + 16626: 0x000081AC, + 16627: 0x000081B4, + 16628: 0x000081B2, + 16629: 0x000081B7, + 16630: 0x000081A7, + 16631: 0x000081F2, + 16632: 0x00008255, + 16633: 0x00008256, + 16634: 0x00008257, + 16635: 0x00008556, + 16636: 0x00008545, + 16637: 0x0000856B, + 16638: 0x0000854D, + 16639: 0x00008553, + 16640: 0x00008561, + 16641: 0x00008558, + 16642: 0x00008540, + 16643: 0x00008546, + 16644: 0x00008564, + 16645: 0x00008541, + 16646: 0x00008562, + 16647: 0x00008544, + 16648: 0x00008551, + 16649: 0x00008547, + 16650: 0x00008563, + 16651: 0x0000853E, + 16652: 0x0000855B, + 16653: 0x00008571, + 16654: 0x0000854E, + 16655: 0x0000856E, + 16656: 0x00008575, + 16657: 0x00008555, + 16658: 0x00008567, + 16659: 0x00008560, + 16660: 0x0000858C, + 16661: 0x00008566, + 16662: 0x0000855D, + 16663: 0x00008554, + 16664: 0x00008565, + 16665: 0x0000856C, + 16666: 0x00008663, + 16667: 0x00008665, + 16668: 0x00008664, + 16669: 0x0000879B, + 16670: 0x0000878F, + 16671: 0x00008797, + 16672: 0x00008793, + 16673: 0x00008792, + 16674: 0x00008788, + 16675: 0x00008781, + 16676: 0x00008796, + 16677: 0x00008798, + 16678: 0x00008779, + 16679: 0x00008787, + 16680: 0x000087A3, + 16681: 0x00008785, + 16682: 0x00008790, + 16683: 0x00008791, + 16684: 0x0000879D, + 16685: 0x00008784, + 16686: 0x00008794, + 16687: 0x0000879C, + 16688: 0x0000879A, + 16689: 0x00008789, + 16690: 0x0000891E, + 16691: 0x00008926, + 16692: 0x00008930, + 16693: 0x0000892D, + 16694: 0x0000892E, + 16695: 0x00008927, + 16696: 0x00008931, + 16697: 0x00008922, + 16698: 0x00008929, + 16699: 0x00008923, + 16700: 0x0000892F, + 16701: 0x0000892C, + 16702: 0x0000891F, + 16703: 0x000089F1, + 16704: 0x00008AE0, + 16705: 0x00008AE2, + 16706: 0x00008AF2, + 16707: 0x00008AF4, + 16708: 0x00008AF5, + 16709: 0x00008ADD, + 16710: 0x00008B14, + 16711: 0x00008AE4, + 16712: 0x00008ADF, + 16713: 0x00008AF0, + 16714: 0x00008AC8, + 16715: 0x00008ADE, + 16716: 0x00008AE1, + 16717: 0x00008AE8, + 16718: 0x00008AFF, + 16719: 0x00008AEF, + 16720: 0x00008AFB, + 16721: 0x00008C91, + 16722: 0x00008C92, + 16723: 0x00008C90, + 16724: 0x00008CF5, + 16725: 0x00008CEE, + 16726: 0x00008CF1, + 16727: 0x00008CF0, + 16728: 0x00008CF3, + 16729: 0x00008D6C, + 16730: 0x00008D6E, + 16731: 0x00008DA5, + 16732: 0x00008DA7, + 16733: 0x00008E33, + 16734: 0x00008E3E, + 16735: 0x00008E38, + 16736: 0x00008E40, + 16737: 0x00008E45, + 16738: 0x00008E36, + 16739: 0x00008E3C, + 16740: 0x00008E3D, + 16741: 0x00008E41, + 16742: 0x00008E30, + 16743: 0x00008E3F, + 16744: 0x00008EBD, + 16745: 0x00008F36, + 16746: 0x00008F2E, + 16747: 0x00008F35, + 16748: 0x00008F32, + 16749: 0x00008F39, + 16750: 0x00008F37, + 16751: 0x00008F34, + 16752: 0x00009076, + 16753: 0x00009079, + 16754: 0x0000907B, + 16755: 0x00009086, + 16756: 0x000090FA, + 16757: 0x00009133, + 16758: 0x00009135, + 16759: 0x00009136, + 16760: 0x00009193, + 16761: 0x00009190, + 16762: 0x00009191, + 16763: 0x0000918D, + 16764: 0x0000918F, + 16765: 0x00009327, + 16766: 0x0000931E, + 16767: 0x00009308, + 16768: 0x0000931F, + 16769: 0x00009306, + 16770: 0x0000930F, + 16771: 0x0000937A, + 16772: 0x00009338, + 16773: 0x0000933C, + 16774: 0x0000931B, + 16775: 0x00009323, + 16776: 0x00009312, + 16777: 0x00009301, + 16778: 0x00009346, + 16779: 0x0000932D, + 16780: 0x0000930E, + 16781: 0x0000930D, + 16782: 0x000092CB, + 16783: 0x0000931D, + 16784: 0x000092FA, + 16785: 0x00009325, + 16786: 0x00009313, + 16787: 0x000092F9, + 16788: 0x000092F7, + 16789: 0x00009334, + 16790: 0x00009302, + 16791: 0x00009324, + 16792: 0x000092FF, + 16793: 0x00009329, + 16794: 0x00009339, + 16795: 0x00009335, + 16796: 0x0000932A, + 16797: 0x00009314, + 16798: 0x0000930C, + 16799: 0x0000930B, + 16800: 0x000092FE, + 16801: 0x00009309, + 16802: 0x00009300, + 16803: 0x000092FB, + 16804: 0x00009316, + 16805: 0x000095BC, + 16806: 0x000095CD, + 16807: 0x000095BE, + 16808: 0x000095B9, + 16809: 0x000095BA, + 16810: 0x000095B6, + 16811: 0x000095BF, + 16812: 0x000095B5, + 16813: 0x000095BD, + 16814: 0x000096A9, + 16815: 0x000096D4, + 16816: 0x0000970B, + 16817: 0x00009712, + 16818: 0x00009710, + 16819: 0x00009799, + 16820: 0x00009797, + 16821: 0x00009794, + 16822: 0x000097F0, + 16823: 0x000097F8, + 16824: 0x00009835, + 16825: 0x0000982F, + 16826: 0x00009832, + 16827: 0x00009924, + 16828: 0x0000991F, + 16829: 0x00009927, + 16830: 0x00009929, + 16831: 0x0000999E, + 16832: 0x000099EE, + 16833: 0x000099EC, + 16834: 0x000099E5, + 16835: 0x000099E4, + 16836: 0x000099F0, + 16837: 0x000099E3, + 16838: 0x000099EA, + 16839: 0x000099E9, + 16840: 0x000099E7, + 16841: 0x00009AB9, + 16842: 0x00009ABF, + 16843: 0x00009AB4, + 16844: 0x00009ABB, + 16845: 0x00009AF6, + 16846: 0x00009AFA, + 16847: 0x00009AF9, + 16848: 0x00009AF7, + 16849: 0x00009B33, + 16850: 0x00009B80, + 16851: 0x00009B85, + 16852: 0x00009B87, + 16853: 0x00009B7C, + 16854: 0x00009B7E, + 16855: 0x00009B7B, + 16856: 0x00009B82, + 16857: 0x00009B93, + 16858: 0x00009B92, + 16859: 0x00009B90, + 16860: 0x00009B7A, + 16861: 0x00009B95, + 16862: 0x00009B7D, + 16863: 0x00009B88, + 16864: 0x00009D25, + 16865: 0x00009D17, + 16866: 0x00009D20, + 16867: 0x00009D1E, + 16868: 0x00009D14, + 16869: 0x00009D29, + 16870: 0x00009D1D, + 16871: 0x00009D18, + 16872: 0x00009D22, + 16873: 0x00009D10, + 16874: 0x00009D19, + 16875: 0x00009D1F, + 16876: 0x00009E88, + 16877: 0x00009E86, + 16878: 0x00009E87, + 16879: 0x00009EAE, + 16880: 0x00009EAD, + 16881: 0x00009ED5, + 16882: 0x00009ED6, + 16883: 0x00009EFA, + 16884: 0x00009F12, + 16885: 0x00009F3D, + 16886: 0x00005126, + 16887: 0x00005125, + 16888: 0x00005122, + 16889: 0x00005124, + 16890: 0x00005120, + 16891: 0x00005129, + 16892: 0x000052F4, + 16893: 0x00005693, + 16894: 0x0000568C, + 16895: 0x0000568D, + 16896: 0x00005686, + 16897: 0x00005684, + 16898: 0x00005683, + 16899: 0x0000567E, + 16900: 0x00005682, + 16901: 0x0000567F, + 16902: 0x00005681, + 16903: 0x000058D6, + 16904: 0x000058D4, + 16905: 0x000058CF, + 16906: 0x000058D2, + 16907: 0x00005B2D, + 16908: 0x00005B25, + 16909: 0x00005B32, + 16910: 0x00005B23, + 16911: 0x00005B2C, + 16912: 0x00005B27, + 16913: 0x00005B26, + 16914: 0x00005B2F, + 16915: 0x00005B2E, + 16916: 0x00005B7B, + 16917: 0x00005BF1, + 16918: 0x00005BF2, + 16919: 0x00005DB7, + 16920: 0x00005E6C, + 16921: 0x00005E6A, + 16922: 0x00005FBE, + 16923: 0x00005FBB, + 16924: 0x000061C3, + 16925: 0x000061B5, + 16926: 0x000061BC, + 16927: 0x000061E7, + 16928: 0x000061E0, + 16929: 0x000061E5, + 16930: 0x000061E4, + 16931: 0x000061E8, + 16932: 0x000061DE, + 16933: 0x000064EF, + 16934: 0x000064E9, + 16935: 0x000064E3, + 16936: 0x000064EB, + 16937: 0x000064E4, + 16938: 0x000064E8, + 16939: 0x00006581, + 16940: 0x00006580, + 16941: 0x000065B6, + 16942: 0x000065DA, + 16943: 0x000066D2, + 16944: 0x00006A8D, + 16945: 0x00006A96, + 16946: 0x00006A81, + 16947: 0x00006AA5, + 16948: 0x00006A89, + 16949: 0x00006A9F, + 16950: 0x00006A9B, + 16951: 0x00006AA1, + 16952: 0x00006A9E, + 16953: 0x00006A87, + 16954: 0x00006A93, + 16955: 0x00006A8E, + 16956: 0x00006A95, + 16957: 0x00006A83, + 16958: 0x00006AA8, + 16959: 0x00006AA4, + 16960: 0x00006A91, + 16961: 0x00006A7F, + 16962: 0x00006AA6, + 16963: 0x00006A9A, + 16964: 0x00006A85, + 16965: 0x00006A8C, + 16966: 0x00006A92, + 16967: 0x00006B5B, + 16968: 0x00006BAD, + 16969: 0x00006C09, + 16970: 0x00006FCC, + 16971: 0x00006FA9, + 16972: 0x00006FF4, + 16973: 0x00006FD4, + 16974: 0x00006FE3, + 16975: 0x00006FDC, + 16976: 0x00006FED, + 16977: 0x00006FE7, + 16978: 0x00006FE6, + 16979: 0x00006FDE, + 16980: 0x00006FF2, + 16981: 0x00006FDD, + 16982: 0x00006FE2, + 16983: 0x00006FE8, + 16984: 0x000071E1, + 16985: 0x000071F1, + 16986: 0x000071E8, + 16987: 0x000071F2, + 16988: 0x000071E4, + 16989: 0x000071F0, + 16990: 0x000071E2, + 16991: 0x00007373, + 16992: 0x0000736E, + 16993: 0x0000736F, + 16994: 0x00007497, + 16995: 0x000074B2, + 16996: 0x000074AB, + 16997: 0x00007490, + 16998: 0x000074AA, + 16999: 0x000074AD, + 17000: 0x000074B1, + 17001: 0x000074A5, + 17002: 0x000074AF, + 17003: 0x00007510, + 17004: 0x00007511, + 17005: 0x00007512, + 17006: 0x0000750F, + 17007: 0x00007584, + 17008: 0x00007643, + 17009: 0x00007648, + 17010: 0x00007649, + 17011: 0x00007647, + 17012: 0x000076A4, + 17013: 0x000076E9, + 17014: 0x000077B5, + 17015: 0x000077AB, + 17016: 0x000077B2, + 17017: 0x000077B7, + 17018: 0x000077B6, + 17019: 0x000077B4, + 17020: 0x000077B1, + 17021: 0x000077A8, + 17022: 0x000077F0, + 17023: 0x000078F3, + 17024: 0x000078FD, + 17025: 0x00007902, + 17026: 0x000078FB, + 17027: 0x000078FC, + 17028: 0x000078F2, + 17029: 0x00007905, + 17030: 0x000078F9, + 17031: 0x000078FE, + 17032: 0x00007904, + 17033: 0x000079AB, + 17034: 0x000079A8, + 17035: 0x00007A5C, + 17036: 0x00007A5B, + 17037: 0x00007A56, + 17038: 0x00007A58, + 17039: 0x00007A54, + 17040: 0x00007A5A, + 17041: 0x00007ABE, + 17042: 0x00007AC0, + 17043: 0x00007AC1, + 17044: 0x00007C05, + 17045: 0x00007C0F, + 17046: 0x00007BF2, + 17047: 0x00007C00, + 17048: 0x00007BFF, + 17049: 0x00007BFB, + 17050: 0x00007C0E, + 17051: 0x00007BF4, + 17052: 0x00007C0B, + 17053: 0x00007BF3, + 17054: 0x00007C02, + 17055: 0x00007C09, + 17056: 0x00007C03, + 17057: 0x00007C01, + 17058: 0x00007BF8, + 17059: 0x00007BFD, + 17060: 0x00007C06, + 17061: 0x00007BF0, + 17062: 0x00007BF1, + 17063: 0x00007C10, + 17064: 0x00007C0A, + 17065: 0x00007CE8, + 17066: 0x00007E2D, + 17067: 0x00007E3C, + 17068: 0x00007E42, + 17069: 0x00007E33, + 17070: 0x00009848, + 17071: 0x00007E38, + 17072: 0x00007E2A, + 17073: 0x00007E49, + 17074: 0x00007E40, + 17075: 0x00007E47, + 17076: 0x00007E29, + 17077: 0x00007E4C, + 17078: 0x00007E30, + 17079: 0x00007E3B, + 17080: 0x00007E36, + 17081: 0x00007E44, + 17082: 0x00007E3A, + 17083: 0x00007F45, + 17084: 0x00007F7F, + 17085: 0x00007F7E, + 17086: 0x00007F7D, + 17087: 0x00007FF4, + 17088: 0x00007FF2, + 17089: 0x0000802C, + 17090: 0x000081BB, + 17091: 0x000081C4, + 17092: 0x000081CC, + 17093: 0x000081CA, + 17094: 0x000081C5, + 17095: 0x000081C7, + 17096: 0x000081BC, + 17097: 0x000081E9, + 17098: 0x0000825B, + 17099: 0x0000825A, + 17100: 0x0000825C, + 17101: 0x00008583, + 17102: 0x00008580, + 17103: 0x0000858F, + 17104: 0x000085A7, + 17105: 0x00008595, + 17106: 0x000085A0, + 17107: 0x0000858B, + 17108: 0x000085A3, + 17109: 0x0000857B, + 17110: 0x000085A4, + 17111: 0x0000859A, + 17112: 0x0000859E, + 17113: 0x00008577, + 17114: 0x0000857C, + 17115: 0x00008589, + 17116: 0x000085A1, + 17117: 0x0000857A, + 17118: 0x00008578, + 17119: 0x00008557, + 17120: 0x0000858E, + 17121: 0x00008596, + 17122: 0x00008586, + 17123: 0x0000858D, + 17124: 0x00008599, + 17125: 0x0000859D, + 17126: 0x00008581, + 17127: 0x000085A2, + 17128: 0x00008582, + 17129: 0x00008588, + 17130: 0x00008585, + 17131: 0x00008579, + 17132: 0x00008576, + 17133: 0x00008598, + 17134: 0x00008590, + 17135: 0x0000859F, + 17136: 0x00008668, + 17137: 0x000087BE, + 17138: 0x000087AA, + 17139: 0x000087AD, + 17140: 0x000087C5, + 17141: 0x000087B0, + 17142: 0x000087AC, + 17143: 0x000087B9, + 17144: 0x000087B5, + 17145: 0x000087BC, + 17146: 0x000087AE, + 17147: 0x000087C9, + 17148: 0x000087C3, + 17149: 0x000087C2, + 17150: 0x000087CC, + 17151: 0x000087B7, + 17152: 0x000087AF, + 17153: 0x000087C4, + 17154: 0x000087CA, + 17155: 0x000087B4, + 17156: 0x000087B6, + 17157: 0x000087BF, + 17158: 0x000087B8, + 17159: 0x000087BD, + 17160: 0x000087DE, + 17161: 0x000087B2, + 17162: 0x00008935, + 17163: 0x00008933, + 17164: 0x0000893C, + 17165: 0x0000893E, + 17166: 0x00008941, + 17167: 0x00008952, + 17168: 0x00008937, + 17169: 0x00008942, + 17170: 0x000089AD, + 17171: 0x000089AF, + 17172: 0x000089AE, + 17173: 0x000089F2, + 17174: 0x000089F3, + 17175: 0x00008B1E, + 17176: 0x00008B18, + 17177: 0x00008B16, + 17178: 0x00008B11, + 17179: 0x00008B05, + 17180: 0x00008B0B, + 17181: 0x00008B22, + 17182: 0x00008B0F, + 17183: 0x00008B12, + 17184: 0x00008B15, + 17185: 0x00008B07, + 17186: 0x00008B0D, + 17187: 0x00008B08, + 17188: 0x00008B06, + 17189: 0x00008B1C, + 17190: 0x00008B13, + 17191: 0x00008B1A, + 17192: 0x00008C4F, + 17193: 0x00008C70, + 17194: 0x00008C72, + 17195: 0x00008C71, + 17196: 0x00008C6F, + 17197: 0x00008C95, + 17198: 0x00008C94, + 17199: 0x00008CF9, + 17200: 0x00008D6F, + 17201: 0x00008E4E, + 17202: 0x00008E4D, + 17203: 0x00008E53, + 17204: 0x00008E50, + 17205: 0x00008E4C, + 17206: 0x00008E47, + 17207: 0x00008F43, + 17208: 0x00008F40, + 17209: 0x00009085, + 17210: 0x0000907E, + 17211: 0x00009138, + 17212: 0x0000919A, + 17213: 0x000091A2, + 17214: 0x0000919B, + 17215: 0x00009199, + 17216: 0x0000919F, + 17217: 0x000091A1, + 17218: 0x0000919D, + 17219: 0x000091A0, + 17220: 0x000093A1, + 17221: 0x00009383, + 17222: 0x000093AF, + 17223: 0x00009364, + 17224: 0x00009356, + 17225: 0x00009347, + 17226: 0x0000937C, + 17227: 0x00009358, + 17228: 0x0000935C, + 17229: 0x00009376, + 17230: 0x00009349, + 17231: 0x00009350, + 17232: 0x00009351, + 17233: 0x00009360, + 17234: 0x0000936D, + 17235: 0x0000938F, + 17236: 0x0000934C, + 17237: 0x0000936A, + 17238: 0x00009379, + 17239: 0x00009357, + 17240: 0x00009355, + 17241: 0x00009352, + 17242: 0x0000934F, + 17243: 0x00009371, + 17244: 0x00009377, + 17245: 0x0000937B, + 17246: 0x00009361, + 17247: 0x0000935E, + 17248: 0x00009363, + 17249: 0x00009367, + 17250: 0x00009380, + 17251: 0x0000934E, + 17252: 0x00009359, + 17253: 0x000095C7, + 17254: 0x000095C0, + 17255: 0x000095C9, + 17256: 0x000095C3, + 17257: 0x000095C5, + 17258: 0x000095B7, + 17259: 0x000096AE, + 17260: 0x000096B0, + 17261: 0x000096AC, + 17262: 0x00009720, + 17263: 0x0000971F, + 17264: 0x00009718, + 17265: 0x0000971D, + 17266: 0x00009719, + 17267: 0x0000979A, + 17268: 0x000097A1, + 17269: 0x0000979C, + 17270: 0x0000979E, + 17271: 0x0000979D, + 17272: 0x000097D5, + 17273: 0x000097D4, + 17274: 0x000097F1, + 17275: 0x00009841, + 17276: 0x00009844, + 17277: 0x0000984A, + 17278: 0x00009849, + 17279: 0x00009845, + 17280: 0x00009843, + 17281: 0x00009925, + 17282: 0x0000992B, + 17283: 0x0000992C, + 17284: 0x0000992A, + 17285: 0x00009933, + 17286: 0x00009932, + 17287: 0x0000992F, + 17288: 0x0000992D, + 17289: 0x00009931, + 17290: 0x00009930, + 17291: 0x00009998, + 17292: 0x000099A3, + 17293: 0x000099A1, + 17294: 0x00009A02, + 17295: 0x000099FA, + 17296: 0x000099F4, + 17297: 0x000099F7, + 17298: 0x000099F9, + 17299: 0x000099F8, + 17300: 0x000099F6, + 17301: 0x000099FB, + 17302: 0x000099FD, + 17303: 0x000099FE, + 17304: 0x000099FC, + 17305: 0x00009A03, + 17306: 0x00009ABE, + 17307: 0x00009AFE, + 17308: 0x00009AFD, + 17309: 0x00009B01, + 17310: 0x00009AFC, + 17311: 0x00009B48, + 17312: 0x00009B9A, + 17313: 0x00009BA8, + 17314: 0x00009B9E, + 17315: 0x00009B9B, + 17316: 0x00009BA6, + 17317: 0x00009BA1, + 17318: 0x00009BA5, + 17319: 0x00009BA4, + 17320: 0x00009B86, + 17321: 0x00009BA2, + 17322: 0x00009BA0, + 17323: 0x00009BAF, + 17324: 0x00009D33, + 17325: 0x00009D41, + 17326: 0x00009D67, + 17327: 0x00009D36, + 17328: 0x00009D2E, + 17329: 0x00009D2F, + 17330: 0x00009D31, + 17331: 0x00009D38, + 17332: 0x00009D30, + 17333: 0x00009D45, + 17334: 0x00009D42, + 17335: 0x00009D43, + 17336: 0x00009D3E, + 17337: 0x00009D37, + 17338: 0x00009D40, + 17339: 0x00009D3D, + 17340: 0x00007FF5, + 17341: 0x00009D2D, + 17342: 0x00009E8A, + 17343: 0x00009E89, + 17344: 0x00009E8D, + 17345: 0x00009EB0, + 17346: 0x00009EC8, + 17347: 0x00009EDA, + 17348: 0x00009EFB, + 17349: 0x00009EFF, + 17350: 0x00009F24, + 17351: 0x00009F23, + 17352: 0x00009F22, + 17353: 0x00009F54, + 17354: 0x00009FA0, + 17355: 0x00005131, + 17356: 0x0000512D, + 17357: 0x0000512E, + 17358: 0x00005698, + 17359: 0x0000569C, + 17360: 0x00005697, + 17361: 0x0000569A, + 17362: 0x0000569D, + 17363: 0x00005699, + 17364: 0x00005970, + 17365: 0x00005B3C, + 17366: 0x00005C69, + 17367: 0x00005C6A, + 17368: 0x00005DC0, + 17369: 0x00005E6D, + 17370: 0x00005E6E, + 17371: 0x000061D8, + 17372: 0x000061DF, + 17373: 0x000061ED, + 17374: 0x000061EE, + 17375: 0x000061F1, + 17376: 0x000061EA, + 17377: 0x000061F0, + 17378: 0x000061EB, + 17379: 0x000061D6, + 17380: 0x000061E9, + 17381: 0x000064FF, + 17382: 0x00006504, + 17383: 0x000064FD, + 17384: 0x000064F8, + 17385: 0x00006501, + 17386: 0x00006503, + 17387: 0x000064FC, + 17388: 0x00006594, + 17389: 0x000065DB, + 17390: 0x000066DA, + 17391: 0x000066DB, + 17392: 0x000066D8, + 17393: 0x00006AC5, + 17394: 0x00006AB9, + 17395: 0x00006ABD, + 17396: 0x00006AE1, + 17397: 0x00006AC6, + 17398: 0x00006ABA, + 17399: 0x00006AB6, + 17400: 0x00006AB7, + 17401: 0x00006AC7, + 17402: 0x00006AB4, + 17403: 0x00006AAD, + 17404: 0x00006B5E, + 17405: 0x00006BC9, + 17406: 0x00006C0B, + 17407: 0x00007007, + 17408: 0x0000700C, + 17409: 0x0000700D, + 17410: 0x00007001, + 17411: 0x00007005, + 17412: 0x00007014, + 17413: 0x0000700E, + 17414: 0x00006FFF, + 17415: 0x00007000, + 17416: 0x00006FFB, + 17417: 0x00007026, + 17418: 0x00006FFC, + 17419: 0x00006FF7, + 17420: 0x0000700A, + 17421: 0x00007201, + 17422: 0x000071FF, + 17423: 0x000071F9, + 17424: 0x00007203, + 17425: 0x000071FD, + 17426: 0x00007376, + 17427: 0x000074B8, + 17428: 0x000074C0, + 17429: 0x000074B5, + 17430: 0x000074C1, + 17431: 0x000074BE, + 17432: 0x000074B6, + 17433: 0x000074BB, + 17434: 0x000074C2, + 17435: 0x00007514, + 17436: 0x00007513, + 17437: 0x0000765C, + 17438: 0x00007664, + 17439: 0x00007659, + 17440: 0x00007650, + 17441: 0x00007653, + 17442: 0x00007657, + 17443: 0x0000765A, + 17444: 0x000076A6, + 17445: 0x000076BD, + 17446: 0x000076EC, + 17447: 0x000077C2, + 17448: 0x000077BA, + 17449: 0x000078FF, + 17450: 0x0000790C, + 17451: 0x00007913, + 17452: 0x00007914, + 17453: 0x00007909, + 17454: 0x00007910, + 17455: 0x00007912, + 17456: 0x00007911, + 17457: 0x000079AD, + 17458: 0x000079AC, + 17459: 0x00007A5F, + 17460: 0x00007C1C, + 17461: 0x00007C29, + 17462: 0x00007C19, + 17463: 0x00007C20, + 17464: 0x00007C1F, + 17465: 0x00007C2D, + 17466: 0x00007C1D, + 17467: 0x00007C26, + 17468: 0x00007C28, + 17469: 0x00007C22, + 17470: 0x00007C25, + 17471: 0x00007C30, + 17472: 0x00007E5C, + 17473: 0x00007E50, + 17474: 0x00007E56, + 17475: 0x00007E63, + 17476: 0x00007E58, + 17477: 0x00007E62, + 17478: 0x00007E5F, + 17479: 0x00007E51, + 17480: 0x00007E60, + 17481: 0x00007E57, + 17482: 0x00007E53, + 17483: 0x00007FB5, + 17484: 0x00007FB3, + 17485: 0x00007FF7, + 17486: 0x00007FF8, + 17487: 0x00008075, + 17488: 0x000081D1, + 17489: 0x000081D2, + 17490: 0x000081D0, + 17491: 0x0000825F, + 17492: 0x0000825E, + 17493: 0x000085B4, + 17494: 0x000085C6, + 17495: 0x000085C0, + 17496: 0x000085C3, + 17497: 0x000085C2, + 17498: 0x000085B3, + 17499: 0x000085B5, + 17500: 0x000085BD, + 17501: 0x000085C7, + 17502: 0x000085C4, + 17503: 0x000085BF, + 17504: 0x000085CB, + 17505: 0x000085CE, + 17506: 0x000085C8, + 17507: 0x000085C5, + 17508: 0x000085B1, + 17509: 0x000085B6, + 17510: 0x000085D2, + 17511: 0x00008624, + 17512: 0x000085B8, + 17513: 0x000085B7, + 17514: 0x000085BE, + 17515: 0x00008669, + 17516: 0x000087E7, + 17517: 0x000087E6, + 17518: 0x000087E2, + 17519: 0x000087DB, + 17520: 0x000087EB, + 17521: 0x000087EA, + 17522: 0x000087E5, + 17523: 0x000087DF, + 17524: 0x000087F3, + 17525: 0x000087E4, + 17526: 0x000087D4, + 17527: 0x000087DC, + 17528: 0x000087D3, + 17529: 0x000087ED, + 17530: 0x000087D8, + 17531: 0x000087E3, + 17532: 0x000087A4, + 17533: 0x000087D7, + 17534: 0x000087D9, + 17535: 0x00008801, + 17536: 0x000087F4, + 17537: 0x000087E8, + 17538: 0x000087DD, + 17539: 0x00008953, + 17540: 0x0000894B, + 17541: 0x0000894F, + 17542: 0x0000894C, + 17543: 0x00008946, + 17544: 0x00008950, + 17545: 0x00008951, + 17546: 0x00008949, + 17547: 0x00008B2A, + 17548: 0x00008B27, + 17549: 0x00008B23, + 17550: 0x00008B33, + 17551: 0x00008B30, + 17552: 0x00008B35, + 17553: 0x00008B47, + 17554: 0x00008B2F, + 17555: 0x00008B3C, + 17556: 0x00008B3E, + 17557: 0x00008B31, + 17558: 0x00008B25, + 17559: 0x00008B37, + 17560: 0x00008B26, + 17561: 0x00008B36, + 17562: 0x00008B2E, + 17563: 0x00008B24, + 17564: 0x00008B3B, + 17565: 0x00008B3D, + 17566: 0x00008B3A, + 17567: 0x00008C42, + 17568: 0x00008C75, + 17569: 0x00008C99, + 17570: 0x00008C98, + 17571: 0x00008C97, + 17572: 0x00008CFE, + 17573: 0x00008D04, + 17574: 0x00008D02, + 17575: 0x00008D00, + 17576: 0x00008E5C, + 17577: 0x00008E62, + 17578: 0x00008E60, + 17579: 0x00008E57, + 17580: 0x00008E56, + 17581: 0x00008E5E, + 17582: 0x00008E65, + 17583: 0x00008E67, + 17584: 0x00008E5B, + 17585: 0x00008E5A, + 17586: 0x00008E61, + 17587: 0x00008E5D, + 17588: 0x00008E69, + 17589: 0x00008E54, + 17590: 0x00008F46, + 17591: 0x00008F47, + 17592: 0x00008F48, + 17593: 0x00008F4B, + 17594: 0x00009128, + 17595: 0x0000913A, + 17596: 0x0000913B, + 17597: 0x0000913E, + 17598: 0x000091A8, + 17599: 0x000091A5, + 17600: 0x000091A7, + 17601: 0x000091AF, + 17602: 0x000091AA, + 17603: 0x000093B5, + 17604: 0x0000938C, + 17605: 0x00009392, + 17606: 0x000093B7, + 17607: 0x0000939B, + 17608: 0x0000939D, + 17609: 0x00009389, + 17610: 0x000093A7, + 17611: 0x0000938E, + 17612: 0x000093AA, + 17613: 0x0000939E, + 17614: 0x000093A6, + 17615: 0x00009395, + 17616: 0x00009388, + 17617: 0x00009399, + 17618: 0x0000939F, + 17619: 0x0000938D, + 17620: 0x000093B1, + 17621: 0x00009391, + 17622: 0x000093B2, + 17623: 0x000093A4, + 17624: 0x000093A8, + 17625: 0x000093B4, + 17626: 0x000093A3, + 17627: 0x000093A5, + 17628: 0x000095D2, + 17629: 0x000095D3, + 17630: 0x000095D1, + 17631: 0x000096B3, + 17632: 0x000096D7, + 17633: 0x000096DA, + 17634: 0x00005DC2, + 17635: 0x000096DF, + 17636: 0x000096D8, + 17637: 0x000096DD, + 17638: 0x00009723, + 17639: 0x00009722, + 17640: 0x00009725, + 17641: 0x000097AC, + 17642: 0x000097AE, + 17643: 0x000097A8, + 17644: 0x000097AB, + 17645: 0x000097A4, + 17646: 0x000097AA, + 17647: 0x000097A2, + 17648: 0x000097A5, + 17649: 0x000097D7, + 17650: 0x000097D9, + 17651: 0x000097D6, + 17652: 0x000097D8, + 17653: 0x000097FA, + 17654: 0x00009850, + 17655: 0x00009851, + 17656: 0x00009852, + 17657: 0x000098B8, + 17658: 0x00009941, + 17659: 0x0000993C, + 17660: 0x0000993A, + 17661: 0x00009A0F, + 17662: 0x00009A0B, + 17663: 0x00009A09, + 17664: 0x00009A0D, + 17665: 0x00009A04, + 17666: 0x00009A11, + 17667: 0x00009A0A, + 17668: 0x00009A05, + 17669: 0x00009A07, + 17670: 0x00009A06, + 17671: 0x00009AC0, + 17672: 0x00009ADC, + 17673: 0x00009B08, + 17674: 0x00009B04, + 17675: 0x00009B05, + 17676: 0x00009B29, + 17677: 0x00009B35, + 17678: 0x00009B4A, + 17679: 0x00009B4C, + 17680: 0x00009B4B, + 17681: 0x00009BC7, + 17682: 0x00009BC6, + 17683: 0x00009BC3, + 17684: 0x00009BBF, + 17685: 0x00009BC1, + 17686: 0x00009BB5, + 17687: 0x00009BB8, + 17688: 0x00009BD3, + 17689: 0x00009BB6, + 17690: 0x00009BC4, + 17691: 0x00009BB9, + 17692: 0x00009BBD, + 17693: 0x00009D5C, + 17694: 0x00009D53, + 17695: 0x00009D4F, + 17696: 0x00009D4A, + 17697: 0x00009D5B, + 17698: 0x00009D4B, + 17699: 0x00009D59, + 17700: 0x00009D56, + 17701: 0x00009D4C, + 17702: 0x00009D57, + 17703: 0x00009D52, + 17704: 0x00009D54, + 17705: 0x00009D5F, + 17706: 0x00009D58, + 17707: 0x00009D5A, + 17708: 0x00009E8E, + 17709: 0x00009E8C, + 17710: 0x00009EDF, + 17711: 0x00009F01, + 17712: 0x00009F00, + 17713: 0x00009F16, + 17714: 0x00009F25, + 17715: 0x00009F2B, + 17716: 0x00009F2A, + 17717: 0x00009F29, + 17718: 0x00009F28, + 17719: 0x00009F4C, + 17720: 0x00009F55, + 17721: 0x00005134, + 17722: 0x00005135, + 17723: 0x00005296, + 17724: 0x000052F7, + 17725: 0x000053B4, + 17726: 0x000056AB, + 17727: 0x000056AD, + 17728: 0x000056A6, + 17729: 0x000056A7, + 17730: 0x000056AA, + 17731: 0x000056AC, + 17732: 0x000058DA, + 17733: 0x000058DD, + 17734: 0x000058DB, + 17735: 0x00005912, + 17736: 0x00005B3D, + 17737: 0x00005B3E, + 17738: 0x00005B3F, + 17739: 0x00005DC3, + 17740: 0x00005E70, + 17741: 0x00005FBF, + 17742: 0x000061FB, + 17743: 0x00006507, + 17744: 0x00006510, + 17745: 0x0000650D, + 17746: 0x00006509, + 17747: 0x0000650C, + 17748: 0x0000650E, + 17749: 0x00006584, + 17750: 0x000065DE, + 17751: 0x000065DD, + 17752: 0x000066DE, + 17753: 0x00006AE7, + 17754: 0x00006AE0, + 17755: 0x00006ACC, + 17756: 0x00006AD1, + 17757: 0x00006AD9, + 17758: 0x00006ACB, + 17759: 0x00006ADF, + 17760: 0x00006ADC, + 17761: 0x00006AD0, + 17762: 0x00006AEB, + 17763: 0x00006ACF, + 17764: 0x00006ACD, + 17765: 0x00006ADE, + 17766: 0x00006B60, + 17767: 0x00006BB0, + 17768: 0x00006C0C, + 17769: 0x00007019, + 17770: 0x00007027, + 17771: 0x00007020, + 17772: 0x00007016, + 17773: 0x0000702B, + 17774: 0x00007021, + 17775: 0x00007022, + 17776: 0x00007023, + 17777: 0x00007029, + 17778: 0x00007017, + 17779: 0x00007024, + 17780: 0x0000701C, + 17781: 0x0000702A, + 17782: 0x0000720C, + 17783: 0x0000720A, + 17784: 0x00007207, + 17785: 0x00007202, + 17786: 0x00007205, + 17787: 0x000072A5, + 17788: 0x000072A6, + 17789: 0x000072A4, + 17790: 0x000072A3, + 17791: 0x000072A1, + 17792: 0x000074CB, + 17793: 0x000074C5, + 17794: 0x000074B7, + 17795: 0x000074C3, + 17796: 0x00007516, + 17797: 0x00007660, + 17798: 0x000077C9, + 17799: 0x000077CA, + 17800: 0x000077C4, + 17801: 0x000077F1, + 17802: 0x0000791D, + 17803: 0x0000791B, + 17804: 0x00007921, + 17805: 0x0000791C, + 17806: 0x00007917, + 17807: 0x0000791E, + 17808: 0x000079B0, + 17809: 0x00007A67, + 17810: 0x00007A68, + 17811: 0x00007C33, + 17812: 0x00007C3C, + 17813: 0x00007C39, + 17814: 0x00007C2C, + 17815: 0x00007C3B, + 17816: 0x00007CEC, + 17817: 0x00007CEA, + 17818: 0x00007E76, + 17819: 0x00007E75, + 17820: 0x00007E78, + 17821: 0x00007E70, + 17822: 0x00007E77, + 17823: 0x00007E6F, + 17824: 0x00007E7A, + 17825: 0x00007E72, + 17826: 0x00007E74, + 17827: 0x00007E68, + 17828: 0x00007F4B, + 17829: 0x00007F4A, + 17830: 0x00007F83, + 17831: 0x00007F86, + 17832: 0x00007FB7, + 17833: 0x00007FFD, + 17834: 0x00007FFE, + 17835: 0x00008078, + 17836: 0x000081D7, + 17837: 0x000081D5, + 17838: 0x00008264, + 17839: 0x00008261, + 17840: 0x00008263, + 17841: 0x000085EB, + 17842: 0x000085F1, + 17843: 0x000085ED, + 17844: 0x000085D9, + 17845: 0x000085E1, + 17846: 0x000085E8, + 17847: 0x000085DA, + 17848: 0x000085D7, + 17849: 0x000085EC, + 17850: 0x000085F2, + 17851: 0x000085F8, + 17852: 0x000085D8, + 17853: 0x000085DF, + 17854: 0x000085E3, + 17855: 0x000085DC, + 17856: 0x000085D1, + 17857: 0x000085F0, + 17858: 0x000085E6, + 17859: 0x000085EF, + 17860: 0x000085DE, + 17861: 0x000085E2, + 17862: 0x00008800, + 17863: 0x000087FA, + 17864: 0x00008803, + 17865: 0x000087F6, + 17866: 0x000087F7, + 17867: 0x00008809, + 17868: 0x0000880C, + 17869: 0x0000880B, + 17870: 0x00008806, + 17871: 0x000087FC, + 17872: 0x00008808, + 17873: 0x000087FF, + 17874: 0x0000880A, + 17875: 0x00008802, + 17876: 0x00008962, + 17877: 0x0000895A, + 17878: 0x0000895B, + 17879: 0x00008957, + 17880: 0x00008961, + 17881: 0x0000895C, + 17882: 0x00008958, + 17883: 0x0000895D, + 17884: 0x00008959, + 17885: 0x00008988, + 17886: 0x000089B7, + 17887: 0x000089B6, + 17888: 0x000089F6, + 17889: 0x00008B50, + 17890: 0x00008B48, + 17891: 0x00008B4A, + 17892: 0x00008B40, + 17893: 0x00008B53, + 17894: 0x00008B56, + 17895: 0x00008B54, + 17896: 0x00008B4B, + 17897: 0x00008B55, + 17898: 0x00008B51, + 17899: 0x00008B42, + 17900: 0x00008B52, + 17901: 0x00008B57, + 17902: 0x00008C43, + 17903: 0x00008C77, + 17904: 0x00008C76, + 17905: 0x00008C9A, + 17906: 0x00008D06, + 17907: 0x00008D07, + 17908: 0x00008D09, + 17909: 0x00008DAC, + 17910: 0x00008DAA, + 17911: 0x00008DAD, + 17912: 0x00008DAB, + 17913: 0x00008E6D, + 17914: 0x00008E78, + 17915: 0x00008E73, + 17916: 0x00008E6A, + 17917: 0x00008E6F, + 17918: 0x00008E7B, + 17919: 0x00008EC2, + 17920: 0x00008F52, + 17921: 0x00008F51, + 17922: 0x00008F4F, + 17923: 0x00008F50, + 17924: 0x00008F53, + 17925: 0x00008FB4, + 17926: 0x00009140, + 17927: 0x0000913F, + 17928: 0x000091B0, + 17929: 0x000091AD, + 17930: 0x000093DE, + 17931: 0x000093C7, + 17932: 0x000093CF, + 17933: 0x000093C2, + 17934: 0x000093DA, + 17935: 0x000093D0, + 17936: 0x000093F9, + 17937: 0x000093EC, + 17938: 0x000093CC, + 17939: 0x000093D9, + 17940: 0x000093A9, + 17941: 0x000093E6, + 17942: 0x000093CA, + 17943: 0x000093D4, + 17944: 0x000093EE, + 17945: 0x000093E3, + 17946: 0x000093D5, + 17947: 0x000093C4, + 17948: 0x000093CE, + 17949: 0x000093C0, + 17950: 0x000093D2, + 17951: 0x000093E7, + 17952: 0x0000957D, + 17953: 0x000095DA, + 17954: 0x000095DB, + 17955: 0x000096E1, + 17956: 0x00009729, + 17957: 0x0000972B, + 17958: 0x0000972C, + 17959: 0x00009728, + 17960: 0x00009726, + 17961: 0x000097B3, + 17962: 0x000097B7, + 17963: 0x000097B6, + 17964: 0x000097DD, + 17965: 0x000097DE, + 17966: 0x000097DF, + 17967: 0x0000985C, + 17968: 0x00009859, + 17969: 0x0000985D, + 17970: 0x00009857, + 17971: 0x000098BF, + 17972: 0x000098BD, + 17973: 0x000098BB, + 17974: 0x000098BE, + 17975: 0x00009948, + 17976: 0x00009947, + 17977: 0x00009943, + 17978: 0x000099A6, + 17979: 0x000099A7, + 17980: 0x00009A1A, + 17981: 0x00009A15, + 17982: 0x00009A25, + 17983: 0x00009A1D, + 17984: 0x00009A24, + 17985: 0x00009A1B, + 17986: 0x00009A22, + 17987: 0x00009A20, + 17988: 0x00009A27, + 17989: 0x00009A23, + 17990: 0x00009A1E, + 17991: 0x00009A1C, + 17992: 0x00009A14, + 17993: 0x00009AC2, + 17994: 0x00009B0B, + 17995: 0x00009B0A, + 17996: 0x00009B0E, + 17997: 0x00009B0C, + 17998: 0x00009B37, + 17999: 0x00009BEA, + 18000: 0x00009BEB, + 18001: 0x00009BE0, + 18002: 0x00009BDE, + 18003: 0x00009BE4, + 18004: 0x00009BE6, + 18005: 0x00009BE2, + 18006: 0x00009BF0, + 18007: 0x00009BD4, + 18008: 0x00009BD7, + 18009: 0x00009BEC, + 18010: 0x00009BDC, + 18011: 0x00009BD9, + 18012: 0x00009BE5, + 18013: 0x00009BD5, + 18014: 0x00009BE1, + 18015: 0x00009BDA, + 18016: 0x00009D77, + 18017: 0x00009D81, + 18018: 0x00009D8A, + 18019: 0x00009D84, + 18020: 0x00009D88, + 18021: 0x00009D71, + 18022: 0x00009D80, + 18023: 0x00009D78, + 18024: 0x00009D86, + 18025: 0x00009D8B, + 18026: 0x00009D8C, + 18027: 0x00009D7D, + 18028: 0x00009D6B, + 18029: 0x00009D74, + 18030: 0x00009D75, + 18031: 0x00009D70, + 18032: 0x00009D69, + 18033: 0x00009D85, + 18034: 0x00009D73, + 18035: 0x00009D7B, + 18036: 0x00009D82, + 18037: 0x00009D6F, + 18038: 0x00009D79, + 18039: 0x00009D7F, + 18040: 0x00009D87, + 18041: 0x00009D68, + 18042: 0x00009E94, + 18043: 0x00009E91, + 18044: 0x00009EC0, + 18045: 0x00009EFC, + 18046: 0x00009F2D, + 18047: 0x00009F40, + 18048: 0x00009F41, + 18049: 0x00009F4D, + 18050: 0x00009F56, + 18051: 0x00009F57, + 18052: 0x00009F58, + 18053: 0x00005337, + 18054: 0x000056B2, + 18055: 0x000056B5, + 18056: 0x000056B3, + 18057: 0x000058E3, + 18058: 0x00005B45, + 18059: 0x00005DC6, + 18060: 0x00005DC7, + 18061: 0x00005EEE, + 18062: 0x00005EEF, + 18063: 0x00005FC0, + 18064: 0x00005FC1, + 18065: 0x000061F9, + 18066: 0x00006517, + 18067: 0x00006516, + 18068: 0x00006515, + 18069: 0x00006513, + 18070: 0x000065DF, + 18071: 0x000066E8, + 18072: 0x000066E3, + 18073: 0x000066E4, + 18074: 0x00006AF3, + 18075: 0x00006AF0, + 18076: 0x00006AEA, + 18077: 0x00006AE8, + 18078: 0x00006AF9, + 18079: 0x00006AF1, + 18080: 0x00006AEE, + 18081: 0x00006AEF, + 18082: 0x0000703C, + 18083: 0x00007035, + 18084: 0x0000702F, + 18085: 0x00007037, + 18086: 0x00007034, + 18087: 0x00007031, + 18088: 0x00007042, + 18089: 0x00007038, + 18090: 0x0000703F, + 18091: 0x0000703A, + 18092: 0x00007039, + 18093: 0x00007040, + 18094: 0x0000703B, + 18095: 0x00007033, + 18096: 0x00007041, + 18097: 0x00007213, + 18098: 0x00007214, + 18099: 0x000072A8, + 18100: 0x0000737D, + 18101: 0x0000737C, + 18102: 0x000074BA, + 18103: 0x000076AB, + 18104: 0x000076AA, + 18105: 0x000076BE, + 18106: 0x000076ED, + 18107: 0x000077CC, + 18108: 0x000077CE, + 18109: 0x000077CF, + 18110: 0x000077CD, + 18111: 0x000077F2, + 18112: 0x00007925, + 18113: 0x00007923, + 18114: 0x00007927, + 18115: 0x00007928, + 18116: 0x00007924, + 18117: 0x00007929, + 18118: 0x000079B2, + 18119: 0x00007A6E, + 18120: 0x00007A6C, + 18121: 0x00007A6D, + 18122: 0x00007AF7, + 18123: 0x00007C49, + 18124: 0x00007C48, + 18125: 0x00007C4A, + 18126: 0x00007C47, + 18127: 0x00007C45, + 18128: 0x00007CEE, + 18129: 0x00007E7B, + 18130: 0x00007E7E, + 18131: 0x00007E81, + 18132: 0x00007E80, + 18133: 0x00007FBA, + 18134: 0x00007FFF, + 18135: 0x00008079, + 18136: 0x000081DB, + 18137: 0x000081D9, + 18138: 0x0000820B, + 18139: 0x00008268, + 18140: 0x00008269, + 18141: 0x00008622, + 18142: 0x000085FF, + 18143: 0x00008601, + 18144: 0x000085FE, + 18145: 0x0000861B, + 18146: 0x00008600, + 18147: 0x000085F6, + 18148: 0x00008604, + 18149: 0x00008609, + 18150: 0x00008605, + 18151: 0x0000860C, + 18152: 0x000085FD, + 18153: 0x00008819, + 18154: 0x00008810, + 18155: 0x00008811, + 18156: 0x00008817, + 18157: 0x00008813, + 18158: 0x00008816, + 18159: 0x00008963, + 18160: 0x00008966, + 18161: 0x000089B9, + 18162: 0x000089F7, + 18163: 0x00008B60, + 18164: 0x00008B6A, + 18165: 0x00008B5D, + 18166: 0x00008B68, + 18167: 0x00008B63, + 18168: 0x00008B65, + 18169: 0x00008B67, + 18170: 0x00008B6D, + 18171: 0x00008DAE, + 18172: 0x00008E86, + 18173: 0x00008E88, + 18174: 0x00008E84, + 18175: 0x00008F59, + 18176: 0x00008F56, + 18177: 0x00008F57, + 18178: 0x00008F55, + 18179: 0x00008F58, + 18180: 0x00008F5A, + 18181: 0x0000908D, + 18182: 0x00009143, + 18183: 0x00009141, + 18184: 0x000091B7, + 18185: 0x000091B5, + 18186: 0x000091B2, + 18187: 0x000091B3, + 18188: 0x0000940B, + 18189: 0x00009413, + 18190: 0x000093FB, + 18191: 0x00009420, + 18192: 0x0000940F, + 18193: 0x00009414, + 18194: 0x000093FE, + 18195: 0x00009415, + 18196: 0x00009410, + 18197: 0x00009428, + 18198: 0x00009419, + 18199: 0x0000940D, + 18200: 0x000093F5, + 18201: 0x00009400, + 18202: 0x000093F7, + 18203: 0x00009407, + 18204: 0x0000940E, + 18205: 0x00009416, + 18206: 0x00009412, + 18207: 0x000093FA, + 18208: 0x00009409, + 18209: 0x000093F8, + 18210: 0x0000940A, + 18211: 0x000093FF, + 18212: 0x000093FC, + 18213: 0x0000940C, + 18214: 0x000093F6, + 18215: 0x00009411, + 18216: 0x00009406, + 18217: 0x000095DE, + 18218: 0x000095E0, + 18219: 0x000095DF, + 18220: 0x0000972E, + 18221: 0x0000972F, + 18222: 0x000097B9, + 18223: 0x000097BB, + 18224: 0x000097FD, + 18225: 0x000097FE, + 18226: 0x00009860, + 18227: 0x00009862, + 18228: 0x00009863, + 18229: 0x0000985F, + 18230: 0x000098C1, + 18231: 0x000098C2, + 18232: 0x00009950, + 18233: 0x0000994E, + 18234: 0x00009959, + 18235: 0x0000994C, + 18236: 0x0000994B, + 18237: 0x00009953, + 18238: 0x00009A32, + 18239: 0x00009A34, + 18240: 0x00009A31, + 18241: 0x00009A2C, + 18242: 0x00009A2A, + 18243: 0x00009A36, + 18244: 0x00009A29, + 18245: 0x00009A2E, + 18246: 0x00009A38, + 18247: 0x00009A2D, + 18248: 0x00009AC7, + 18249: 0x00009ACA, + 18250: 0x00009AC6, + 18251: 0x00009B10, + 18252: 0x00009B12, + 18253: 0x00009B11, + 18254: 0x00009C0B, + 18255: 0x00009C08, + 18256: 0x00009BF7, + 18257: 0x00009C05, + 18258: 0x00009C12, + 18259: 0x00009BF8, + 18260: 0x00009C40, + 18261: 0x00009C07, + 18262: 0x00009C0E, + 18263: 0x00009C06, + 18264: 0x00009C17, + 18265: 0x00009C14, + 18266: 0x00009C09, + 18267: 0x00009D9F, + 18268: 0x00009D99, + 18269: 0x00009DA4, + 18270: 0x00009D9D, + 18271: 0x00009D92, + 18272: 0x00009D98, + 18273: 0x00009D90, + 18274: 0x00009D9B, + 18275: 0x00009DA0, + 18276: 0x00009D94, + 18277: 0x00009D9C, + 18278: 0x00009DAA, + 18279: 0x00009D97, + 18280: 0x00009DA1, + 18281: 0x00009D9A, + 18282: 0x00009DA2, + 18283: 0x00009DA8, + 18284: 0x00009D9E, + 18285: 0x00009DA3, + 18286: 0x00009DBF, + 18287: 0x00009DA9, + 18288: 0x00009D96, + 18289: 0x00009DA6, + 18290: 0x00009DA7, + 18291: 0x00009E99, + 18292: 0x00009E9B, + 18293: 0x00009E9A, + 18294: 0x00009EE5, + 18295: 0x00009EE4, + 18296: 0x00009EE7, + 18297: 0x00009EE6, + 18298: 0x00009F30, + 18299: 0x00009F2E, + 18300: 0x00009F5B, + 18301: 0x00009F60, + 18302: 0x00009F5E, + 18303: 0x00009F5D, + 18304: 0x00009F59, + 18305: 0x00009F91, + 18306: 0x0000513A, + 18307: 0x00005139, + 18308: 0x00005298, + 18309: 0x00005297, + 18310: 0x000056C3, + 18311: 0x000056BD, + 18312: 0x000056BE, + 18313: 0x00005B48, + 18314: 0x00005B47, + 18315: 0x00005DCB, + 18316: 0x00005DCF, + 18317: 0x00005EF1, + 18318: 0x000061FD, + 18319: 0x0000651B, + 18320: 0x00006B02, + 18321: 0x00006AFC, + 18322: 0x00006B03, + 18323: 0x00006AF8, + 18324: 0x00006B00, + 18325: 0x00007043, + 18326: 0x00007044, + 18327: 0x0000704A, + 18328: 0x00007048, + 18329: 0x00007049, + 18330: 0x00007045, + 18331: 0x00007046, + 18332: 0x0000721D, + 18333: 0x0000721A, + 18334: 0x00007219, + 18335: 0x0000737E, + 18336: 0x00007517, + 18337: 0x0000766A, + 18338: 0x000077D0, + 18339: 0x0000792D, + 18340: 0x00007931, + 18341: 0x0000792F, + 18342: 0x00007C54, + 18343: 0x00007C53, + 18344: 0x00007CF2, + 18345: 0x00007E8A, + 18346: 0x00007E87, + 18347: 0x00007E88, + 18348: 0x00007E8B, + 18349: 0x00007E86, + 18350: 0x00007E8D, + 18351: 0x00007F4D, + 18352: 0x00007FBB, + 18353: 0x00008030, + 18354: 0x000081DD, + 18355: 0x00008618, + 18356: 0x0000862A, + 18357: 0x00008626, + 18358: 0x0000861F, + 18359: 0x00008623, + 18360: 0x0000861C, + 18361: 0x00008619, + 18362: 0x00008627, + 18363: 0x0000862E, + 18364: 0x00008621, + 18365: 0x00008620, + 18366: 0x00008629, + 18367: 0x0000861E, + 18368: 0x00008625, + 18369: 0x00008829, + 18370: 0x0000881D, + 18371: 0x0000881B, + 18372: 0x00008820, + 18373: 0x00008824, + 18374: 0x0000881C, + 18375: 0x0000882B, + 18376: 0x0000884A, + 18377: 0x0000896D, + 18378: 0x00008969, + 18379: 0x0000896E, + 18380: 0x0000896B, + 18381: 0x000089FA, + 18382: 0x00008B79, + 18383: 0x00008B78, + 18384: 0x00008B45, + 18385: 0x00008B7A, + 18386: 0x00008B7B, + 18387: 0x00008D10, + 18388: 0x00008D14, + 18389: 0x00008DAF, + 18390: 0x00008E8E, + 18391: 0x00008E8C, + 18392: 0x00008F5E, + 18393: 0x00008F5B, + 18394: 0x00008F5D, + 18395: 0x00009146, + 18396: 0x00009144, + 18397: 0x00009145, + 18398: 0x000091B9, + 18399: 0x0000943F, + 18400: 0x0000943B, + 18401: 0x00009436, + 18402: 0x00009429, + 18403: 0x0000943D, + 18404: 0x0000943C, + 18405: 0x00009430, + 18406: 0x00009439, + 18407: 0x0000942A, + 18408: 0x00009437, + 18409: 0x0000942C, + 18410: 0x00009440, + 18411: 0x00009431, + 18412: 0x000095E5, + 18413: 0x000095E4, + 18414: 0x000095E3, + 18415: 0x00009735, + 18416: 0x0000973A, + 18417: 0x000097BF, + 18418: 0x000097E1, + 18419: 0x00009864, + 18420: 0x000098C9, + 18421: 0x000098C6, + 18422: 0x000098C0, + 18423: 0x00009958, + 18424: 0x00009956, + 18425: 0x00009A39, + 18426: 0x00009A3D, + 18427: 0x00009A46, + 18428: 0x00009A44, + 18429: 0x00009A42, + 18430: 0x00009A41, + 18431: 0x00009A3A, + 18432: 0x00009A3F, + 18433: 0x00009ACD, + 18434: 0x00009B15, + 18435: 0x00009B17, + 18436: 0x00009B18, + 18437: 0x00009B16, + 18438: 0x00009B3A, + 18439: 0x00009B52, + 18440: 0x00009C2B, + 18441: 0x00009C1D, + 18442: 0x00009C1C, + 18443: 0x00009C2C, + 18444: 0x00009C23, + 18445: 0x00009C28, + 18446: 0x00009C29, + 18447: 0x00009C24, + 18448: 0x00009C21, + 18449: 0x00009DB7, + 18450: 0x00009DB6, + 18451: 0x00009DBC, + 18452: 0x00009DC1, + 18453: 0x00009DC7, + 18454: 0x00009DCA, + 18455: 0x00009DCF, + 18456: 0x00009DBE, + 18457: 0x00009DC5, + 18458: 0x00009DC3, + 18459: 0x00009DBB, + 18460: 0x00009DB5, + 18461: 0x00009DCE, + 18462: 0x00009DB9, + 18463: 0x00009DBA, + 18464: 0x00009DAC, + 18465: 0x00009DC8, + 18466: 0x00009DB1, + 18467: 0x00009DAD, + 18468: 0x00009DCC, + 18469: 0x00009DB3, + 18470: 0x00009DCD, + 18471: 0x00009DB2, + 18472: 0x00009E7A, + 18473: 0x00009E9C, + 18474: 0x00009EEB, + 18475: 0x00009EEE, + 18476: 0x00009EED, + 18477: 0x00009F1B, + 18478: 0x00009F18, + 18479: 0x00009F1A, + 18480: 0x00009F31, + 18481: 0x00009F4E, + 18482: 0x00009F65, + 18483: 0x00009F64, + 18484: 0x00009F92, + 18485: 0x00004EB9, + 18486: 0x000056C6, + 18487: 0x000056C5, + 18488: 0x000056CB, + 18489: 0x00005971, + 18490: 0x00005B4B, + 18491: 0x00005B4C, + 18492: 0x00005DD5, + 18493: 0x00005DD1, + 18494: 0x00005EF2, + 18495: 0x00006521, + 18496: 0x00006520, + 18497: 0x00006526, + 18498: 0x00006522, + 18499: 0x00006B0B, + 18500: 0x00006B08, + 18501: 0x00006B09, + 18502: 0x00006C0D, + 18503: 0x00007055, + 18504: 0x00007056, + 18505: 0x00007057, + 18506: 0x00007052, + 18507: 0x0000721E, + 18508: 0x0000721F, + 18509: 0x000072A9, + 18510: 0x0000737F, + 18511: 0x000074D8, + 18512: 0x000074D5, + 18513: 0x000074D9, + 18514: 0x000074D7, + 18515: 0x0000766D, + 18516: 0x000076AD, + 18517: 0x00007935, + 18518: 0x000079B4, + 18519: 0x00007A70, + 18520: 0x00007A71, + 18521: 0x00007C57, + 18522: 0x00007C5C, + 18523: 0x00007C59, + 18524: 0x00007C5B, + 18525: 0x00007C5A, + 18526: 0x00007CF4, + 18527: 0x00007CF1, + 18528: 0x00007E91, + 18529: 0x00007F4F, + 18530: 0x00007F87, + 18531: 0x000081DE, + 18532: 0x0000826B, + 18533: 0x00008634, + 18534: 0x00008635, + 18535: 0x00008633, + 18536: 0x0000862C, + 18537: 0x00008632, + 18538: 0x00008636, + 18539: 0x0000882C, + 18540: 0x00008828, + 18541: 0x00008826, + 18542: 0x0000882A, + 18543: 0x00008825, + 18544: 0x00008971, + 18545: 0x000089BF, + 18546: 0x000089BE, + 18547: 0x000089FB, + 18548: 0x00008B7E, + 18549: 0x00008B84, + 18550: 0x00008B82, + 18551: 0x00008B86, + 18552: 0x00008B85, + 18553: 0x00008B7F, + 18554: 0x00008D15, + 18555: 0x00008E95, + 18556: 0x00008E94, + 18557: 0x00008E9A, + 18558: 0x00008E92, + 18559: 0x00008E90, + 18560: 0x00008E96, + 18561: 0x00008E97, + 18562: 0x00008F60, + 18563: 0x00008F62, + 18564: 0x00009147, + 18565: 0x0000944C, + 18566: 0x00009450, + 18567: 0x0000944A, + 18568: 0x0000944B, + 18569: 0x0000944F, + 18570: 0x00009447, + 18571: 0x00009445, + 18572: 0x00009448, + 18573: 0x00009449, + 18574: 0x00009446, + 18575: 0x0000973F, + 18576: 0x000097E3, + 18577: 0x0000986A, + 18578: 0x00009869, + 18579: 0x000098CB, + 18580: 0x00009954, + 18581: 0x0000995B, + 18582: 0x00009A4E, + 18583: 0x00009A53, + 18584: 0x00009A54, + 18585: 0x00009A4C, + 18586: 0x00009A4F, + 18587: 0x00009A48, + 18588: 0x00009A4A, + 18589: 0x00009A49, + 18590: 0x00009A52, + 18591: 0x00009A50, + 18592: 0x00009AD0, + 18593: 0x00009B19, + 18594: 0x00009B2B, + 18595: 0x00009B3B, + 18596: 0x00009B56, + 18597: 0x00009B55, + 18598: 0x00009C46, + 18599: 0x00009C48, + 18600: 0x00009C3F, + 18601: 0x00009C44, + 18602: 0x00009C39, + 18603: 0x00009C33, + 18604: 0x00009C41, + 18605: 0x00009C3C, + 18606: 0x00009C37, + 18607: 0x00009C34, + 18608: 0x00009C32, + 18609: 0x00009C3D, + 18610: 0x00009C36, + 18611: 0x00009DDB, + 18612: 0x00009DD2, + 18613: 0x00009DDE, + 18614: 0x00009DDA, + 18615: 0x00009DCB, + 18616: 0x00009DD0, + 18617: 0x00009DDC, + 18618: 0x00009DD1, + 18619: 0x00009DDF, + 18620: 0x00009DE9, + 18621: 0x00009DD9, + 18622: 0x00009DD8, + 18623: 0x00009DD6, + 18624: 0x00009DF5, + 18625: 0x00009DD5, + 18626: 0x00009DDD, + 18627: 0x00009EB6, + 18628: 0x00009EF0, + 18629: 0x00009F35, + 18630: 0x00009F33, + 18631: 0x00009F32, + 18632: 0x00009F42, + 18633: 0x00009F6B, + 18634: 0x00009F95, + 18635: 0x00009FA2, + 18636: 0x0000513D, + 18637: 0x00005299, + 18638: 0x000058E8, + 18639: 0x000058E7, + 18640: 0x00005972, + 18641: 0x00005B4D, + 18642: 0x00005DD8, + 18643: 0x0000882F, + 18644: 0x00005F4F, + 18645: 0x00006201, + 18646: 0x00006203, + 18647: 0x00006204, + 18648: 0x00006529, + 18649: 0x00006525, + 18650: 0x00006596, + 18651: 0x000066EB, + 18652: 0x00006B11, + 18653: 0x00006B12, + 18654: 0x00006B0F, + 18655: 0x00006BCA, + 18656: 0x0000705B, + 18657: 0x0000705A, + 18658: 0x00007222, + 18659: 0x00007382, + 18660: 0x00007381, + 18661: 0x00007383, + 18662: 0x00007670, + 18663: 0x000077D4, + 18664: 0x00007C67, + 18665: 0x00007C66, + 18666: 0x00007E95, + 18667: 0x0000826C, + 18668: 0x0000863A, + 18669: 0x00008640, + 18670: 0x00008639, + 18671: 0x0000863C, + 18672: 0x00008631, + 18673: 0x0000863B, + 18674: 0x0000863E, + 18675: 0x00008830, + 18676: 0x00008832, + 18677: 0x0000882E, + 18678: 0x00008833, + 18679: 0x00008976, + 18680: 0x00008974, + 18681: 0x00008973, + 18682: 0x000089FE, + 18683: 0x00008B8C, + 18684: 0x00008B8E, + 18685: 0x00008B8B, + 18686: 0x00008B88, + 18687: 0x00008C45, + 18688: 0x00008D19, + 18689: 0x00008E98, + 18690: 0x00008F64, + 18691: 0x00008F63, + 18692: 0x000091BC, + 18693: 0x00009462, + 18694: 0x00009455, + 18695: 0x0000945D, + 18696: 0x00009457, + 18697: 0x0000945E, + 18698: 0x000097C4, + 18699: 0x000097C5, + 18700: 0x00009800, + 18701: 0x00009A56, + 18702: 0x00009A59, + 18703: 0x00009B1E, + 18704: 0x00009B1F, + 18705: 0x00009B20, + 18706: 0x00009C52, + 18707: 0x00009C58, + 18708: 0x00009C50, + 18709: 0x00009C4A, + 18710: 0x00009C4D, + 18711: 0x00009C4B, + 18712: 0x00009C55, + 18713: 0x00009C59, + 18714: 0x00009C4C, + 18715: 0x00009C4E, + 18716: 0x00009DFB, + 18717: 0x00009DF7, + 18718: 0x00009DEF, + 18719: 0x00009DE3, + 18720: 0x00009DEB, + 18721: 0x00009DF8, + 18722: 0x00009DE4, + 18723: 0x00009DF6, + 18724: 0x00009DE1, + 18725: 0x00009DEE, + 18726: 0x00009DE6, + 18727: 0x00009DF2, + 18728: 0x00009DF0, + 18729: 0x00009DE2, + 18730: 0x00009DEC, + 18731: 0x00009DF4, + 18732: 0x00009DF3, + 18733: 0x00009DE8, + 18734: 0x00009DED, + 18735: 0x00009EC2, + 18736: 0x00009ED0, + 18737: 0x00009EF2, + 18738: 0x00009EF3, + 18739: 0x00009F06, + 18740: 0x00009F1C, + 18741: 0x00009F38, + 18742: 0x00009F37, + 18743: 0x00009F36, + 18744: 0x00009F43, + 18745: 0x00009F4F, + 18746: 0x00009F71, + 18747: 0x00009F70, + 18748: 0x00009F6E, + 18749: 0x00009F6F, + 18750: 0x000056D3, + 18751: 0x000056CD, + 18752: 0x00005B4E, + 18753: 0x00005C6D, + 18754: 0x0000652D, + 18755: 0x000066ED, + 18756: 0x000066EE, + 18757: 0x00006B13, + 18758: 0x0000705F, + 18759: 0x00007061, + 18760: 0x0000705D, + 18761: 0x00007060, + 18762: 0x00007223, + 18763: 0x000074DB, + 18764: 0x000074E5, + 18765: 0x000077D5, + 18766: 0x00007938, + 18767: 0x000079B7, + 18768: 0x000079B6, + 18769: 0x00007C6A, + 18770: 0x00007E97, + 18771: 0x00007F89, + 18772: 0x0000826D, + 18773: 0x00008643, + 18774: 0x00008838, + 18775: 0x00008837, + 18776: 0x00008835, + 18777: 0x0000884B, + 18778: 0x00008B94, + 18779: 0x00008B95, + 18780: 0x00008E9E, + 18781: 0x00008E9F, + 18782: 0x00008EA0, + 18783: 0x00008E9D, + 18784: 0x000091BE, + 18785: 0x000091BD, + 18786: 0x000091C2, + 18787: 0x0000946B, + 18788: 0x00009468, + 18789: 0x00009469, + 18790: 0x000096E5, + 18791: 0x00009746, + 18792: 0x00009743, + 18793: 0x00009747, + 18794: 0x000097C7, + 18795: 0x000097E5, + 18796: 0x00009A5E, + 18797: 0x00009AD5, + 18798: 0x00009B59, + 18799: 0x00009C63, + 18800: 0x00009C67, + 18801: 0x00009C66, + 18802: 0x00009C62, + 18803: 0x00009C5E, + 18804: 0x00009C60, + 18805: 0x00009E02, + 18806: 0x00009DFE, + 18807: 0x00009E07, + 18808: 0x00009E03, + 18809: 0x00009E06, + 18810: 0x00009E05, + 18811: 0x00009E00, + 18812: 0x00009E01, + 18813: 0x00009E09, + 18814: 0x00009DFF, + 18815: 0x00009DFD, + 18816: 0x00009E04, + 18817: 0x00009EA0, + 18818: 0x00009F1E, + 18819: 0x00009F46, + 18820: 0x00009F74, + 18821: 0x00009F75, + 18822: 0x00009F76, + 18823: 0x000056D4, + 18824: 0x0000652E, + 18825: 0x000065B8, + 18826: 0x00006B18, + 18827: 0x00006B19, + 18828: 0x00006B17, + 18829: 0x00006B1A, + 18830: 0x00007062, + 18831: 0x00007226, + 18832: 0x000072AA, + 18833: 0x000077D8, + 18834: 0x000077D9, + 18835: 0x00007939, + 18836: 0x00007C69, + 18837: 0x00007C6B, + 18838: 0x00007CF6, + 18839: 0x00007E9A, + 18840: 0x00007E98, + 18841: 0x00007E9B, + 18842: 0x00007E99, + 18843: 0x000081E0, + 18844: 0x000081E1, + 18845: 0x00008646, + 18846: 0x00008647, + 18847: 0x00008648, + 18848: 0x00008979, + 18849: 0x0000897A, + 18850: 0x0000897C, + 18851: 0x0000897B, + 18852: 0x000089FF, + 18853: 0x00008B98, + 18854: 0x00008B99, + 18855: 0x00008EA5, + 18856: 0x00008EA4, + 18857: 0x00008EA3, + 18858: 0x0000946E, + 18859: 0x0000946D, + 18860: 0x0000946F, + 18861: 0x00009471, + 18862: 0x00009473, + 18863: 0x00009749, + 18864: 0x00009872, + 18865: 0x0000995F, + 18866: 0x00009C68, + 18867: 0x00009C6E, + 18868: 0x00009C6D, + 18869: 0x00009E0B, + 18870: 0x00009E0D, + 18871: 0x00009E10, + 18872: 0x00009E0F, + 18873: 0x00009E12, + 18874: 0x00009E11, + 18875: 0x00009EA1, + 18876: 0x00009EF5, + 18877: 0x00009F09, + 18878: 0x00009F47, + 18879: 0x00009F78, + 18880: 0x00009F7B, + 18881: 0x00009F7A, + 18882: 0x00009F79, + 18883: 0x0000571E, + 18884: 0x00007066, + 18885: 0x00007C6F, + 18886: 0x0000883C, + 18887: 0x00008DB2, + 18888: 0x00008EA6, + 18889: 0x000091C3, + 18890: 0x00009474, + 18891: 0x00009478, + 18892: 0x00009476, + 18893: 0x00009475, + 18894: 0x00009A60, + 18895: 0x00009C74, + 18896: 0x00009C73, + 18897: 0x00009C71, + 18898: 0x00009C75, + 18899: 0x00009E14, + 18900: 0x00009E13, + 18901: 0x00009EF6, + 18902: 0x00009F0A, + 18903: 0x00009FA4, + 18904: 0x00007068, + 18905: 0x00007065, + 18906: 0x00007CF7, + 18907: 0x0000866A, + 18908: 0x0000883E, + 18909: 0x0000883D, + 18910: 0x0000883F, + 18911: 0x00008B9E, + 18912: 0x00008C9C, + 18913: 0x00008EA9, + 18914: 0x00008EC9, + 18915: 0x0000974B, + 18916: 0x00009873, + 18917: 0x00009874, + 18918: 0x000098CC, + 18919: 0x00009961, + 18920: 0x000099AB, + 18921: 0x00009A64, + 18922: 0x00009A66, + 18923: 0x00009A67, + 18924: 0x00009B24, + 18925: 0x00009E15, + 18926: 0x00009E17, + 18927: 0x00009F48, + 18928: 0x00006207, + 18929: 0x00006B1E, + 18930: 0x00007227, + 18931: 0x0000864C, + 18932: 0x00008EA8, + 18933: 0x00009482, + 18934: 0x00009480, + 18935: 0x00009481, + 18936: 0x00009A69, + 18937: 0x00009A68, + 18938: 0x00009B2E, + 18939: 0x00009E19, + 18940: 0x00007229, + 18941: 0x0000864B, + 18942: 0x00008B9F, + 18943: 0x00009483, + 18944: 0x00009C79, + 18945: 0x00009EB7, + 18946: 0x00007675, + 18947: 0x00009A6B, + 18948: 0x00009C7A, + 18949: 0x00009E1D, + 18950: 0x00007069, + 18951: 0x0000706A, + 18952: 0x00009EA4, + 18953: 0x00009F7E, + 18954: 0x00009F49, + 18955: 0x00009F98, + 18956: 0x00007881, + 18957: 0x000092B9, + 18958: 0x000088CF, + 18959: 0x000058BB, + 18960: 0x00006052, + 18961: 0x00007CA7, + 18962: 0x00005AFA, + 18963: 0x00002554, + 18964: 0x00002566, + 18965: 0x00002557, + 18966: 0x00002560, + 18967: 0x0000256C, + 18968: 0x00002563, + 18969: 0x0000255A, + 18970: 0x00002569, + 18971: 0x0000255D, + 18972: 0x00002552, + 18973: 0x00002564, + 18974: 0x00002555, + 18975: 0x0000255E, + 18976: 0x0000256A, + 18977: 0x00002561, + 18978: 0x00002558, + 18979: 0x00002567, + 18980: 0x0000255B, + 18981: 0x00002553, + 18982: 0x00002565, + 18983: 0x00002556, + 18984: 0x0000255F, + 18985: 0x0000256B, + 18986: 0x00002562, + 18987: 0x00002559, + 18988: 0x00002568, + 18989: 0x0000255C, + 18990: 0x00002551, + 18991: 0x00002550, + 18992: 0x0000256D, + 18993: 0x0000256E, + 18994: 0x00002570, + 18995: 0x0000256F, + 18996: 0x0000FFED, + 18997: 0x00020547, + 18998: 0x000092DB, + 18999: 0x000205DF, + 19000: 0x00023FC5, + 19001: 0x0000854C, + 19002: 0x000042B5, + 19003: 0x000073EF, + 19004: 0x000051B5, + 19005: 0x00003649, + 19006: 0x00024942, + 19007: 0x000289E4, + 19008: 0x00009344, + 19009: 0x000219DB, + 19010: 0x000082EE, + 19011: 0x00023CC8, + 19012: 0x0000783C, + 19013: 0x00006744, + 19014: 0x000062DF, + 19015: 0x00024933, + 19016: 0x000289AA, + 19017: 0x000202A0, + 19018: 0x00026BB3, + 19019: 0x00021305, + 19020: 0x00004FAB, + 19021: 0x000224ED, + 19022: 0x00005008, + 19023: 0x00026D29, + 19024: 0x00027A84, + 19025: 0x00023600, + 19026: 0x00024AB1, + 19027: 0x00022513, + 19028: 0x00005029, + 19029: 0x0002037E, + 19030: 0x00005FA4, + 19031: 0x00020380, + 19032: 0x00020347, + 19033: 0x00006EDB, + 19034: 0x0002041F, + 19035: 0x0000507D, + 19036: 0x00005101, + 19037: 0x0000347A, + 19038: 0x0000510E, + 19039: 0x0000986C, + 19040: 0x00003743, + 19041: 0x00008416, + 19042: 0x000249A4, + 19043: 0x00020487, + 19044: 0x00005160, + 19045: 0x000233B4, + 19046: 0x0000516A, + 19047: 0x00020BFF, + 19048: 0x000220FC, + 19049: 0x000202E5, + 19050: 0x00022530, + 19051: 0x0002058E, + 19052: 0x00023233, + 19053: 0x00021983, + 19054: 0x00005B82, + 19055: 0x0000877D, + 19056: 0x000205B3, + 19057: 0x00023C99, + 19058: 0x000051B2, + 19059: 0x000051B8, + 19060: 0x00009D34, + 19061: 0x000051C9, + 19062: 0x000051CF, + 19063: 0x000051D1, + 19064: 0x00003CDC, + 19065: 0x000051D3, + 19066: 0x00024AA6, + 19067: 0x000051B3, + 19068: 0x000051E2, + 19069: 0x00005342, + 19070: 0x000051ED, + 19071: 0x000083CD, + 19072: 0x0000693E, + 19073: 0x0002372D, + 19074: 0x00005F7B, + 19075: 0x0000520B, + 19076: 0x00005226, + 19077: 0x0000523C, + 19078: 0x000052B5, + 19079: 0x00005257, + 19080: 0x00005294, + 19081: 0x000052B9, + 19082: 0x000052C5, + 19083: 0x00007C15, + 19084: 0x00008542, + 19085: 0x000052E0, + 19086: 0x0000860D, + 19087: 0x00026B13, + 19088: 0x00005305, + 19089: 0x00028ADE, + 19090: 0x00005549, + 19091: 0x00006ED9, + 19092: 0x00023F80, + 19093: 0x00020954, + 19094: 0x00023FEC, + 19095: 0x00005333, + 19096: 0x00005344, + 19097: 0x00020BE2, + 19098: 0x00006CCB, + 19099: 0x00021726, + 19100: 0x0000681B, + 19101: 0x000073D5, + 19102: 0x0000604A, + 19103: 0x00003EAA, + 19104: 0x000038CC, + 19105: 0x000216E8, + 19106: 0x000071DD, + 19107: 0x000044A2, + 19108: 0x0000536D, + 19109: 0x00005374, + 19110: 0x000286AB, + 19111: 0x0000537E, + 19112: 0x0000537F, + 19113: 0x00021596, + 19114: 0x00021613, + 19115: 0x000077E6, + 19116: 0x00005393, + 19117: 0x00028A9B, + 19118: 0x000053A0, + 19119: 0x000053AB, + 19120: 0x000053AE, + 19121: 0x000073A7, + 19122: 0x00025772, + 19123: 0x00003F59, + 19124: 0x0000739C, + 19125: 0x000053C1, + 19126: 0x000053C5, + 19127: 0x00006C49, + 19128: 0x00004E49, + 19129: 0x000057FE, + 19130: 0x000053D9, + 19131: 0x00003AAB, + 19132: 0x00020B8F, + 19133: 0x000053E0, + 19134: 0x00023FEB, + 19135: 0x00022DA3, + 19136: 0x000053F6, + 19137: 0x00020C77, + 19138: 0x00005413, + 19139: 0x00007079, + 19140: 0x0000552B, + 19141: 0x00006657, + 19142: 0x00006D5B, + 19143: 0x0000546D, + 19144: 0x00026B53, + 19145: 0x00020D74, + 19146: 0x0000555D, + 19147: 0x0000548F, + 19148: 0x000054A4, + 19149: 0x000047A6, + 19150: 0x0002170D, + 19151: 0x00020EDD, + 19152: 0x00003DB4, + 19153: 0x00020D4D, + 19154: 0x000289BC, + 19155: 0x00022698, + 19156: 0x00005547, + 19157: 0x00004CED, + 19158: 0x0000542F, + 19159: 0x00007417, + 19160: 0x00005586, + 19161: 0x000055A9, + 19162: 0x00005605, + 19163: 0x000218D7, + 19164: 0x0002403A, + 19165: 0x00004552, + 19166: 0x00024435, + 19167: 0x000066B3, + 19168: 0x000210B4, + 19169: 0x00005637, + 19170: 0x000066CD, + 19171: 0x0002328A, + 19172: 0x000066A4, + 19173: 0x000066AD, + 19174: 0x0000564D, + 19175: 0x0000564F, + 19176: 0x000078F1, + 19177: 0x000056F1, + 19178: 0x00009787, + 19179: 0x000053FE, + 19180: 0x00005700, + 19181: 0x000056EF, + 19182: 0x000056ED, + 19183: 0x00028B66, + 19184: 0x00003623, + 19185: 0x0002124F, + 19186: 0x00005746, + 19187: 0x000241A5, + 19188: 0x00006C6E, + 19189: 0x0000708B, + 19190: 0x00005742, + 19191: 0x000036B1, + 19192: 0x00026C7E, + 19193: 0x000057E6, + 19194: 0x00021416, + 19195: 0x00005803, + 19196: 0x00021454, + 19197: 0x00024363, + 19198: 0x00005826, + 19199: 0x00024BF5, + 19200: 0x0000585C, + 19201: 0x000058AA, + 19202: 0x00003561, + 19203: 0x000058E0, + 19204: 0x000058DC, + 19205: 0x0002123C, + 19206: 0x000058FB, + 19207: 0x00005BFF, + 19208: 0x00005743, + 19209: 0x0002A150, + 19210: 0x00024278, + 19211: 0x000093D3, + 19212: 0x000035A1, + 19213: 0x0000591F, + 19214: 0x000068A6, + 19215: 0x000036C3, + 19216: 0x00006E59, + 19217: 0x0002163E, + 19218: 0x00005A24, + 19219: 0x00005553, + 19220: 0x00021692, + 19221: 0x00008505, + 19222: 0x000059C9, + 19223: 0x00020D4E, + 19224: 0x00026C81, + 19225: 0x00026D2A, + 19226: 0x000217DC, + 19227: 0x000059D9, + 19228: 0x000217FB, + 19229: 0x000217B2, + 19230: 0x00026DA6, + 19231: 0x00006D71, + 19232: 0x00021828, + 19233: 0x000216D5, + 19234: 0x000059F9, + 19235: 0x00026E45, + 19236: 0x00005AAB, + 19237: 0x00005A63, + 19238: 0x000036E6, + 19239: 0x000249A9, + 19240: 0x00005A77, + 19241: 0x00003708, + 19242: 0x00005A96, + 19243: 0x00007465, + 19244: 0x00005AD3, + 19245: 0x00026FA1, + 19246: 0x00022554, + 19247: 0x00003D85, + 19248: 0x00021911, + 19249: 0x00003732, + 19250: 0x000216B8, + 19251: 0x00005E83, + 19252: 0x000052D0, + 19253: 0x00005B76, + 19254: 0x00006588, + 19255: 0x00005B7C, + 19256: 0x00027A0E, + 19257: 0x00004004, + 19258: 0x0000485D, + 19259: 0x00020204, + 19260: 0x00005BD5, + 19261: 0x00006160, + 19262: 0x00021A34, + 19263: 0x000259CC, + 19264: 0x000205A5, + 19265: 0x00005BF3, + 19266: 0x00005B9D, + 19267: 0x00004D10, + 19268: 0x00005C05, + 19269: 0x00021B44, + 19270: 0x00005C13, + 19271: 0x000073CE, + 19272: 0x00005C14, + 19273: 0x00021CA5, + 19274: 0x00026B28, + 19275: 0x00005C49, + 19276: 0x000048DD, + 19277: 0x00005C85, + 19278: 0x00005CE9, + 19279: 0x00005CEF, + 19280: 0x00005D8B, + 19281: 0x00021DF9, + 19282: 0x00021E37, + 19283: 0x00005D10, + 19284: 0x00005D18, + 19285: 0x00005D46, + 19286: 0x00021EA4, + 19287: 0x00005CBA, + 19288: 0x00005DD7, + 19289: 0x000082FC, + 19290: 0x0000382D, + 19291: 0x00024901, + 19292: 0x00022049, + 19293: 0x00022173, + 19294: 0x00008287, + 19295: 0x00003836, + 19296: 0x00003BC2, + 19297: 0x00005E2E, + 19298: 0x00006A8A, + 19299: 0x00005E75, + 19300: 0x00005E7A, + 19301: 0x000244BC, + 19302: 0x00020CD3, + 19303: 0x000053A6, + 19304: 0x00004EB7, + 19305: 0x00005ED0, + 19306: 0x000053A8, + 19307: 0x00021771, + 19308: 0x00005E09, + 19309: 0x00005EF4, + 19310: 0x00028482, + 19311: 0x00005EF9, + 19312: 0x00005EFB, + 19313: 0x000038A0, + 19314: 0x00005EFC, + 19315: 0x0000683E, + 19316: 0x0000941B, + 19317: 0x00005F0D, + 19318: 0x000201C1, + 19319: 0x0002F894, + 19320: 0x00003ADE, + 19321: 0x000048AE, + 19322: 0x0002133A, + 19323: 0x00005F3A, + 19324: 0x00026888, + 19325: 0x000223D0, + 19326: 0x00005F58, + 19327: 0x00022471, + 19328: 0x00005F63, + 19329: 0x000097BD, + 19330: 0x00026E6E, + 19331: 0x00005F72, + 19332: 0x00009340, + 19333: 0x00028A36, + 19334: 0x00005FA7, + 19335: 0x00005DB6, + 19336: 0x00003D5F, + 19337: 0x00025250, + 19338: 0x00021F6A, + 19339: 0x000270F8, + 19340: 0x00022668, + 19341: 0x000091D6, + 19342: 0x0002029E, + 19343: 0x00028A29, + 19344: 0x00006031, + 19345: 0x00006685, + 19346: 0x00021877, + 19347: 0x00003963, + 19348: 0x00003DC7, + 19349: 0x00003639, + 19350: 0x00005790, + 19351: 0x000227B4, + 19352: 0x00007971, + 19353: 0x00003E40, + 19354: 0x0000609E, + 19355: 0x000060A4, + 19356: 0x000060B3, + 19357: 0x00024982, + 19358: 0x0002498F, + 19359: 0x00027A53, + 19360: 0x000074A4, + 19361: 0x000050E1, + 19362: 0x00005AA0, + 19363: 0x00006164, + 19364: 0x00008424, + 19365: 0x00006142, + 19366: 0x0002F8A6, + 19367: 0x00026ED2, + 19368: 0x00006181, + 19369: 0x000051F4, + 19370: 0x00020656, + 19371: 0x00006187, + 19372: 0x00005BAA, + 19373: 0x00023FB7, + 19374: 0x0002285F, + 19375: 0x000061D3, + 19376: 0x00028B9D, + 19377: 0x0002995D, + 19378: 0x000061D0, + 19379: 0x00003932, + 19380: 0x00022980, + 19381: 0x000228C1, + 19382: 0x00006023, + 19383: 0x0000615C, + 19384: 0x0000651E, + 19385: 0x0000638B, + 19386: 0x00020118, + 19387: 0x000062C5, + 19388: 0x00021770, + 19389: 0x000062D5, + 19390: 0x00022E0D, + 19391: 0x0000636C, + 19392: 0x000249DF, + 19393: 0x00003A17, + 19394: 0x00006438, + 19395: 0x000063F8, + 19396: 0x0002138E, + 19397: 0x000217FC, + 19398: 0x00006490, + 19399: 0x00006F8A, + 19400: 0x00022E36, + 19401: 0x00009814, + 19402: 0x0002408C, + 19403: 0x0002571D, + 19404: 0x000064E1, + 19405: 0x000064E5, + 19406: 0x0000947B, + 19407: 0x00003A66, + 19408: 0x0000643A, + 19409: 0x00003A57, + 19410: 0x0000654D, + 19411: 0x00006F16, + 19412: 0x00024A28, + 19413: 0x00024A23, + 19414: 0x00006585, + 19415: 0x0000656D, + 19416: 0x0000655F, + 19417: 0x0002307E, + 19418: 0x000065B5, + 19419: 0x00024940, + 19420: 0x00004B37, + 19421: 0x000065D1, + 19422: 0x000040D8, + 19423: 0x00021829, + 19424: 0x000065E0, + 19425: 0x000065E3, + 19426: 0x00005FDF, + 19427: 0x00023400, + 19428: 0x00006618, + 19429: 0x000231F7, + 19430: 0x000231F8, + 19431: 0x00006644, + 19432: 0x000231A4, + 19433: 0x000231A5, + 19434: 0x0000664B, + 19435: 0x00020E75, + 19436: 0x00006667, + 19437: 0x000251E6, + 19438: 0x00006673, + 19439: 0x00006674, + 19440: 0x00021E3D, + 19441: 0x00023231, + 19442: 0x000285F4, + 19443: 0x000231C8, + 19444: 0x00025313, + 19445: 0x000077C5, + 19446: 0x000228F7, + 19447: 0x000099A4, + 19448: 0x00006702, + 19449: 0x0002439C, + 19450: 0x00024A21, + 19451: 0x00003B2B, + 19452: 0x000069FA, + 19453: 0x000237C2, + 19454: 0x0000675E, + 19455: 0x00006767, + 19456: 0x00006762, + 19457: 0x000241CD, + 19458: 0x000290ED, + 19459: 0x000067D7, + 19460: 0x000044E9, + 19461: 0x00006822, + 19462: 0x00006E50, + 19463: 0x0000923C, + 19464: 0x00006801, + 19465: 0x000233E6, + 19466: 0x00026DA0, + 19467: 0x0000685D, + 19468: 0x0002346F, + 19469: 0x000069E1, + 19470: 0x00006A0B, + 19471: 0x00028ADF, + 19472: 0x00006973, + 19473: 0x000068C3, + 19474: 0x000235CD, + 19475: 0x00006901, + 19476: 0x00006900, + 19477: 0x00003D32, + 19478: 0x00003A01, + 19479: 0x0002363C, + 19480: 0x00003B80, + 19481: 0x000067AC, + 19482: 0x00006961, + 19483: 0x00028A4A, + 19484: 0x000042FC, + 19485: 0x00006936, + 19486: 0x00006998, + 19487: 0x00003BA1, + 19488: 0x000203C9, + 19489: 0x00008363, + 19490: 0x00005090, + 19491: 0x000069F9, + 19492: 0x00023659, + 19493: 0x0002212A, + 19494: 0x00006A45, + 19495: 0x00023703, + 19496: 0x00006A9D, + 19497: 0x00003BF3, + 19498: 0x000067B1, + 19499: 0x00006AC8, + 19500: 0x0002919C, + 19501: 0x00003C0D, + 19502: 0x00006B1D, + 19503: 0x00020923, + 19504: 0x000060DE, + 19505: 0x00006B35, + 19506: 0x00006B74, + 19507: 0x000227CD, + 19508: 0x00006EB5, + 19509: 0x00023ADB, + 19510: 0x000203B5, + 19511: 0x00021958, + 19512: 0x00003740, + 19513: 0x00005421, + 19514: 0x00023B5A, + 19515: 0x00006BE1, + 19516: 0x00023EFC, + 19517: 0x00006BDC, + 19518: 0x00006C37, + 19519: 0x0002248B, + 19520: 0x000248F1, + 19521: 0x00026B51, + 19522: 0x00006C5A, + 19523: 0x00008226, + 19524: 0x00006C79, + 19525: 0x00023DBC, + 19526: 0x000044C5, + 19527: 0x00023DBD, + 19528: 0x000241A4, + 19529: 0x0002490C, + 19530: 0x00024900, + 19531: 0x00023CC9, + 19532: 0x000036E5, + 19533: 0x00003CEB, + 19534: 0x00020D32, + 19535: 0x00009B83, + 19536: 0x000231F9, + 19537: 0x00022491, + 19538: 0x00007F8F, + 19539: 0x00006837, + 19540: 0x00026D25, + 19541: 0x00026DA1, + 19542: 0x00026DEB, + 19543: 0x00006D96, + 19544: 0x00006D5C, + 19545: 0x00006E7C, + 19546: 0x00006F04, + 19547: 0x0002497F, + 19548: 0x00024085, + 19549: 0x00026E72, + 19550: 0x00008533, + 19551: 0x00026F74, + 19552: 0x000051C7, + 19553: 0x00006C9C, + 19554: 0x00006E1D, + 19555: 0x0000842E, + 19556: 0x00028B21, + 19557: 0x00006E2F, + 19558: 0x00023E2F, + 19559: 0x00007453, + 19560: 0x00023F82, + 19561: 0x000079CC, + 19562: 0x00006E4F, + 19563: 0x00005A91, + 19564: 0x0002304B, + 19565: 0x00006FF8, + 19566: 0x0000370D, + 19567: 0x00006F9D, + 19568: 0x00023E30, + 19569: 0x00006EFA, + 19570: 0x00021497, + 19571: 0x0002403D, + 19572: 0x00004555, + 19573: 0x000093F0, + 19574: 0x00006F44, + 19575: 0x00006F5C, + 19576: 0x00003D4E, + 19577: 0x00006F74, + 19578: 0x00029170, + 19579: 0x00003D3B, + 19580: 0x00006F9F, + 19581: 0x00024144, + 19582: 0x00006FD3, + 19583: 0x00024091, + 19584: 0x00024155, + 19585: 0x00024039, + 19586: 0x00023FF0, + 19587: 0x00023FB4, + 19588: 0x0002413F, + 19589: 0x000051DF, + 19590: 0x00024156, + 19591: 0x00024157, + 19592: 0x00024140, + 19593: 0x000261DD, + 19594: 0x0000704B, + 19595: 0x0000707E, + 19596: 0x000070A7, + 19597: 0x00007081, + 19598: 0x000070CC, + 19599: 0x000070D5, + 19600: 0x000070D6, + 19601: 0x000070DF, + 19602: 0x00004104, + 19603: 0x00003DE8, + 19604: 0x000071B4, + 19605: 0x00007196, + 19606: 0x00024277, + 19607: 0x0000712B, + 19608: 0x00007145, + 19609: 0x00005A88, + 19610: 0x0000714A, + 19611: 0x0000716E, + 19612: 0x00005C9C, + 19613: 0x00024365, + 19614: 0x0000714F, + 19615: 0x00009362, + 19616: 0x000242C1, + 19617: 0x0000712C, + 19618: 0x0002445A, + 19619: 0x00024A27, + 19620: 0x00024A22, + 19621: 0x000071BA, + 19622: 0x00028BE8, + 19623: 0x000070BD, + 19624: 0x0000720E, + 19625: 0x00009442, + 19626: 0x00007215, + 19627: 0x00005911, + 19628: 0x00009443, + 19629: 0x00007224, + 19630: 0x00009341, + 19631: 0x00025605, + 19632: 0x0000722E, + 19633: 0x00007240, + 19634: 0x00024974, + 19635: 0x000068BD, + 19636: 0x00007255, + 19637: 0x00007257, + 19638: 0x00003E55, + 19639: 0x00023044, + 19640: 0x0000680D, + 19641: 0x00006F3D, + 19642: 0x00007282, + 19643: 0x0000732A, + 19644: 0x0000732B, + 19645: 0x00024823, + 19646: 0x0002882B, + 19647: 0x000048ED, + 19648: 0x00028804, + 19649: 0x00007328, + 19650: 0x0000732E, + 19651: 0x000073CF, + 19652: 0x000073AA, + 19653: 0x00020C3A, + 19654: 0x00026A2E, + 19655: 0x000073C9, + 19656: 0x00007449, + 19657: 0x000241E2, + 19658: 0x000216E7, + 19659: 0x00024A24, + 19660: 0x00006623, + 19661: 0x000036C5, + 19662: 0x000249B7, + 19663: 0x0002498D, + 19664: 0x000249FB, + 19665: 0x000073F7, + 19666: 0x00007415, + 19667: 0x00006903, + 19668: 0x00024A26, + 19669: 0x00007439, + 19670: 0x000205C3, + 19671: 0x00003ED7, + 19672: 0x0000745C, + 19673: 0x000228AD, + 19674: 0x00007460, + 19675: 0x00028EB2, + 19676: 0x00007447, + 19677: 0x000073E4, + 19678: 0x00007476, + 19679: 0x000083B9, + 19680: 0x0000746C, + 19681: 0x00003730, + 19682: 0x00007474, + 19683: 0x000093F1, + 19684: 0x00006A2C, + 19685: 0x00007482, + 19686: 0x00004953, + 19687: 0x00024A8C, + 19688: 0x0002415F, + 19689: 0x00024A79, + 19690: 0x00028B8F, + 19691: 0x00005B46, + 19692: 0x00028C03, + 19693: 0x0002189E, + 19694: 0x000074C8, + 19695: 0x00021988, + 19696: 0x0000750E, + 19697: 0x000074E9, + 19698: 0x0000751E, + 19699: 0x00028ED9, + 19700: 0x00021A4B, + 19701: 0x00005BD7, + 19702: 0x00028EAC, + 19703: 0x00009385, + 19704: 0x0000754D, + 19705: 0x0000754A, + 19706: 0x00007567, + 19707: 0x0000756E, + 19708: 0x00024F82, + 19709: 0x00003F04, + 19710: 0x00024D13, + 19711: 0x0000758E, + 19712: 0x0000745D, + 19713: 0x0000759E, + 19714: 0x000075B4, + 19715: 0x00007602, + 19716: 0x0000762C, + 19717: 0x00007651, + 19718: 0x0000764F, + 19719: 0x0000766F, + 19720: 0x00007676, + 19721: 0x000263F5, + 19722: 0x00007690, + 19723: 0x000081EF, + 19724: 0x000037F8, + 19725: 0x00026911, + 19726: 0x0002690E, + 19727: 0x000076A1, + 19728: 0x000076A5, + 19729: 0x000076B7, + 19730: 0x000076CC, + 19731: 0x00026F9F, + 19732: 0x00008462, + 19733: 0x0002509D, + 19734: 0x0002517D, + 19735: 0x00021E1C, + 19736: 0x0000771E, + 19737: 0x00007726, + 19738: 0x00007740, + 19739: 0x000064AF, + 19740: 0x00025220, + 19741: 0x00007758, + 19742: 0x000232AC, + 19743: 0x000077AF, + 19744: 0x00028964, + 19745: 0x00028968, + 19746: 0x000216C1, + 19747: 0x000077F4, + 19748: 0x00007809, + 19749: 0x00021376, + 19750: 0x00024A12, + 19751: 0x000068CA, + 19752: 0x000078AF, + 19753: 0x000078C7, + 19754: 0x000078D3, + 19755: 0x000096A5, + 19756: 0x0000792E, + 19757: 0x000255E0, + 19758: 0x000078D7, + 19759: 0x00007934, + 19760: 0x000078B1, + 19761: 0x0002760C, + 19762: 0x00008FB8, + 19763: 0x00008884, + 19764: 0x00028B2B, + 19765: 0x00026083, + 19766: 0x0002261C, + 19767: 0x00007986, + 19768: 0x00008900, + 19769: 0x00006902, + 19770: 0x00007980, + 19771: 0x00025857, + 19772: 0x0000799D, + 19773: 0x00027B39, + 19774: 0x0000793C, + 19775: 0x000079A9, + 19776: 0x00006E2A, + 19777: 0x00027126, + 19778: 0x00003EA8, + 19779: 0x000079C6, + 19780: 0x0002910D, + 19781: 0x000079D4, +} + +const numEncodeTables = 8 + +// encodeX are the encoding tables from Unicode to Big5 code, +// sorted by decreasing length. +// encode0: 42633 entries for runes in [131105, 173738). +// encode1: 29004 entries for runes in [ 11904, 40908). +// encode2: 2176 entries for runes in [ 7870, 10046). +// encode3: 939 entries for runes in [ 167, 1106). +// encode4: 446 entries for runes in [ 65072, 65518). +// encode5: 432 entries for runes in [194597, 195029). +// encode6: 263 entries for runes in [ 63751, 64014). +// encode7: 1 entries for runes in [175615, 175616). + +const encode0Low, encode0High = 131105, 173738 + +var encode0 = [...]uint16{ + 131105 - 131105: 0x9C71, + 131134 - 131105: 0x9375, + 131142 - 131105: 0x9376, + 131150 - 131105: 0x9548, + 131176 - 131105: 0x8EC6, + 131206 - 131105: 0x8BC5, + 131207 - 131105: 0x8BFA, + 131210 - 131105: 0xC87C, + 131220 - 131105: 0x9AB4, + 131274 - 131105: 0x884E, + 131275 - 131105: 0x884B, + 131276 - 131105: 0xC87A, + 131277 - 131105: 0x8848, + 131281 - 131105: 0x8847, + 131310 - 131105: 0xA0F6, + 131340 - 131105: 0x8845, + 131342 - 131105: 0x8853, + 131352 - 131105: 0xFCAD, + 131492 - 131105: 0x8CF5, + 131497 - 131105: 0x8AAD, + 131499 - 131105: 0x9272, + 131521 - 131105: 0xFC47, + 131540 - 131105: 0x94DF, + 131570 - 131105: 0x9FD1, + 131588 - 131105: 0xFBCB, + 131596 - 131105: 0x927D, + 131604 - 131105: 0x98A4, + 131641 - 131105: 0x8CF9, + 131675 - 131105: 0x94E7, + 131700 - 131105: 0x90CB, + 131701 - 131105: 0x927B, + 131737 - 131105: 0x94D8, + 131742 - 131105: 0xFC5F, + 131744 - 131105: 0xFA54, + 131767 - 131105: 0x9AB5, + 131775 - 131105: 0x96DA, + 131776 - 131105: 0x9279, + 131813 - 131105: 0xFA74, + 131850 - 131105: 0x9275, + 131877 - 131105: 0x8DFB, + 131905 - 131105: 0x8A49, + 131909 - 131105: 0x92DF, + 131910 - 131105: 0x9B7C, + 131911 - 131105: 0xFA63, + 131966 - 131105: 0xFA60, + 131967 - 131105: 0x926D, + 131968 - 131105: 0xFA62, + 132000 - 131105: 0x9AB6, + 132007 - 131105: 0x976B, + 132021 - 131105: 0xFD6A, + 132041 - 131105: 0xFD54, + 132043 - 131105: 0x9273, + 132085 - 131105: 0x97D8, + 132092 - 131105: 0x9FBB, + 132115 - 131105: 0x9342, + 132116 - 131105: 0x9276, + 132127 - 131105: 0xFA65, + 132197 - 131105: 0x926C, + 132231 - 131105: 0xFA6E, + 132238 - 131105: 0x9EE0, + 132241 - 131105: 0x92C0, + 132242 - 131105: 0x92BF, + 132259 - 131105: 0x92BE, + 132311 - 131105: 0x9ABA, + 132348 - 131105: 0x8AB3, + 132350 - 131105: 0x9775, + 132423 - 131105: 0xFA40, + 132494 - 131105: 0xFA76, + 132517 - 131105: 0xFBD0, + 132531 - 131105: 0xFA7B, + 132547 - 131105: 0xFE6D, + 132554 - 131105: 0x9BB3, + 132560 - 131105: 0x89CC, + 132565 - 131105: 0x9ABE, + 132575 - 131105: 0xFA42, + 132576 - 131105: 0x92BC, + 132587 - 131105: 0x945C, + 132625 - 131105: 0x9BB5, + 132629 - 131105: 0x9ABF, + 132633 - 131105: 0x98A7, + 132634 - 131105: 0x97A4, + 132656 - 131105: 0x90FD, + 132694 - 131105: 0xFC7B, + 132726 - 131105: 0x9AC0, + 132878 - 131105: 0x92C3, + 132913 - 131105: 0x8AAA, + 132985 - 131105: 0x9BD0, + 133164 - 131105: 0x9550, + 133235 - 131105: 0x92C6, + 133333 - 131105: 0x98A6, + 133398 - 131105: 0x9546, + 133411 - 131105: 0xFD63, + 133460 - 131105: 0xFAC2, + 133497 - 131105: 0x9EC3, + 133607 - 131105: 0x89B2, + 133649 - 131105: 0x9C66, + 133712 - 131105: 0x9053, + 133743 - 131105: 0x8C62, + 133770 - 131105: 0x87A8, + 133812 - 131105: 0x97C1, + 133826 - 131105: 0x9AC4, + 133837 - 131105: 0x9AC5, + 133901 - 131105: 0x8EEF, + 134031 - 131105: 0xFAE9, + 134047 - 131105: 0x8D40, + 134056 - 131105: 0x9262, + 134057 - 131105: 0x8AF7, + 134079 - 131105: 0x9AC6, + 134086 - 131105: 0x92E1, + 134091 - 131105: 0x9AC9, + 134114 - 131105: 0xFAC6, + 134123 - 131105: 0x97A5, + 134139 - 131105: 0x9ACB, + 134143 - 131105: 0xFA72, + 134155 - 131105: 0x8A5E, + 134157 - 131105: 0x94E0, + 134176 - 131105: 0x92CC, + 134196 - 131105: 0x8AE5, + 134202 - 131105: 0xFE5C, + 134203 - 131105: 0x9ACC, + 134209 - 131105: 0x9DF9, + 134210 - 131105: 0x8A43, + 134211 - 131105: 0x8AA6, + 134227 - 131105: 0x9ACD, + 134245 - 131105: 0x9ACE, + 134263 - 131105: 0xFAEE, + 134264 - 131105: 0x9BCC, + 134268 - 131105: 0x9ACF, + 134285 - 131105: 0x9AD1, + 134294 - 131105: 0x9DFA, + 134300 - 131105: 0x9D7C, + 134325 - 131105: 0x9AD3, + 134328 - 131105: 0x97A6, + 134351 - 131105: 0x995F, + 134355 - 131105: 0xFBF6, + 134356 - 131105: 0x9FC5, + 134357 - 131105: 0x8A59, + 134358 - 131105: 0x8B6B, + 134365 - 131105: 0x9AD4, + 134381 - 131105: 0x9AD5, + 134399 - 131105: 0x97A2, + 134421 - 131105: 0x8A44, + 134440 - 131105: 0x9F4A, + 134449 - 131105: 0x90A1, + 134450 - 131105: 0xFDA4, + 134470 - 131105: 0x8A64, + 134471 - 131105: 0x8AF2, + 134472 - 131105: 0x8AF8, + 134473 - 131105: 0x9DD8, + 134476 - 131105: 0x94D6, + 134477 - 131105: 0xFAFE, + 134478 - 131105: 0xFBA7, + 134511 - 131105: 0x9AD6, + 134513 - 131105: 0x9F4D, + 134516 - 131105: 0xFAF6, + 134524 - 131105: 0x8A57, + 134526 - 131105: 0x8B43, + 134527 - 131105: 0x8B44, + 134550 - 131105: 0x8AB6, + 134556 - 131105: 0x8AC0, + 134567 - 131105: 0x9E54, + 134578 - 131105: 0x9AD7, + 134600 - 131105: 0x9AD8, + 134660 - 131105: 0x9ADC, + 134665 - 131105: 0x8ACA, + 134666 - 131105: 0x9EA8, + 134669 - 131105: 0x9263, + 134670 - 131105: 0x9ADD, + 134671 - 131105: 0x8B65, + 134672 - 131105: 0x8B6F, + 134673 - 131105: 0x8B7E, + 134678 - 131105: 0x8F43, + 134685 - 131105: 0x92D0, + 134732 - 131105: 0x8AF4, + 134765 - 131105: 0x9DBE, + 134771 - 131105: 0x9AE1, + 134773 - 131105: 0xFCDE, + 134774 - 131105: 0x9DFD, + 134775 - 131105: 0x8B66, + 134776 - 131105: 0x8B70, + 134777 - 131105: 0x8B75, + 134778 - 131105: 0x8AE4, + 134779 - 131105: 0x8BA4, + 134796 - 131105: 0x8AED, + 134806 - 131105: 0x8A5D, + 134808 - 131105: 0x8B48, + 134813 - 131105: 0x9DED, + 134818 - 131105: 0x9E40, + 134826 - 131105: 0x8AEF, + 134827 - 131105: 0x8AF6, + 134828 - 131105: 0x9E76, + 134838 - 131105: 0x9EE3, + 134871 - 131105: 0x9ADE, + 134872 - 131105: 0x8DFE, + 134877 - 131105: 0xFAFC, + 134904 - 131105: 0x9CB1, + 134905 - 131105: 0x9E77, + 134906 - 131105: 0x8B64, + 134907 - 131105: 0x8B67, + 134941 - 131105: 0x974B, + 134950 - 131105: 0x9653, + 134957 - 131105: 0x9AE0, + 134958 - 131105: 0x8B4A, + 134960 - 131105: 0x8AF1, + 134961 - 131105: 0x8AD7, + 134971 - 131105: 0xA0AB, + 134988 - 131105: 0x8AB5, + 135012 - 131105: 0x8A5F, + 135053 - 131105: 0x8AEE, + 135056 - 131105: 0x9ADF, + 135085 - 131105: 0x8AFE, + 135092 - 131105: 0x8A58, + 135093 - 131105: 0x8BA3, + 135094 - 131105: 0x8BA7, + 135100 - 131105: 0x9AE3, + 135135 - 131105: 0x9261, + 135146 - 131105: 0x9DD7, + 135147 - 131105: 0x9E7D, + 135148 - 131105: 0x9EA7, + 135149 - 131105: 0x9EAB, + 135188 - 131105: 0x9042, + 135197 - 131105: 0x8B79, + 135198 - 131105: 0x8B7A, + 135247 - 131105: 0x9AE6, + 135260 - 131105: 0x9AE5, + 135279 - 131105: 0x8A7E, + 135285 - 131105: 0x9E44, + 135286 - 131105: 0x9AE7, + 135287 - 131105: 0x8A7C, + 135288 - 131105: 0x8B71, + 135291 - 131105: 0x9AE9, + 135304 - 131105: 0x9AEA, + 135318 - 131105: 0x9AEB, + 135325 - 131105: 0x8ABD, + 135348 - 131105: 0xFB4E, + 135359 - 131105: 0x9AED, + 135360 - 131105: 0x8AF9, + 135361 - 131105: 0x9E63, + 135367 - 131105: 0x8B49, + 135368 - 131105: 0x8ACE, + 135369 - 131105: 0x8B6E, + 135375 - 131105: 0x8AE8, + 135379 - 131105: 0x9AEE, + 135396 - 131105: 0x92CE, + 135412 - 131105: 0x8A5A, + 135413 - 131105: 0x8B7B, + 135414 - 131105: 0x8B7C, + 135471 - 131105: 0x9AEF, + 135483 - 131105: 0x9AF0, + 135485 - 131105: 0x8AFA, + 135493 - 131105: 0x8941, + 135496 - 131105: 0x8B72, + 135503 - 131105: 0x8AF3, + 135552 - 131105: 0x8BA8, + 135559 - 131105: 0x9EAE, + 135641 - 131105: 0x9E72, + 135740 - 131105: 0xFB73, + 135759 - 131105: 0xFB5F, + 135804 - 131105: 0x90BA, + 135848 - 131105: 0x91FE, + 135849 - 131105: 0x9EF6, + 135856 - 131105: 0x97ED, + 135907 - 131105: 0x9AF3, + 135934 - 131105: 0xA0EE, + 135938 - 131105: 0x967C, + 135939 - 131105: 0x9345, + 135940 - 131105: 0x986E, + 135941 - 131105: 0xFA56, + 135990 - 131105: 0x9AF5, + 135994 - 131105: 0xFC4B, + 136053 - 131105: 0x9AF4, + 136054 - 131105: 0xFEDE, + 136078 - 131105: 0xFCB7, + 136088 - 131105: 0x97F1, + 136092 - 131105: 0x97C7, + 136133 - 131105: 0x9CCB, + 136134 - 131105: 0x9240, + 136173 - 131105: 0x9CE8, + 136190 - 131105: 0x91FD, + 136211 - 131105: 0x974E, + 136214 - 131105: 0xFB68, + 136228 - 131105: 0x976C, + 136255 - 131105: 0x8CC2, + 136274 - 131105: 0x97E8, + 136276 - 131105: 0xFB6A, + 136277 - 131105: 0x8B74, + 136330 - 131105: 0x8EE7, + 136343 - 131105: 0xFDC8, + 136374 - 131105: 0x9241, + 136424 - 131105: 0x96A1, + 136445 - 131105: 0x8EF3, + 136567 - 131105: 0x9AF7, + 136578 - 131105: 0x8FA6, + 136598 - 131105: 0xFAD6, + 136714 - 131105: 0x9CC7, + 136723 - 131105: 0xFAD7, + 136729 - 131105: 0x9AF8, + 136766 - 131105: 0xFBA1, + 136801 - 131105: 0x8EC5, + 136850 - 131105: 0xFBA4, + 136888 - 131105: 0xFBC2, + 136890 - 131105: 0x9AC1, + 136896 - 131105: 0x91FA, + 136897 - 131105: 0xFEDB, + 136898 - 131105: 0x97AB, + 136915 - 131105: 0x9147, + 136917 - 131105: 0xFBB1, + 136927 - 131105: 0x8FEA, + 136934 - 131105: 0x94D2, + 136935 - 131105: 0xFE61, + 136936 - 131105: 0xFACE, + 136954 - 131105: 0x92ED, + 136955 - 131105: 0x91F3, + 136956 - 131105: 0x93C6, + 136958 - 131105: 0x935A, + 136973 - 131105: 0xFAFB, + 136976 - 131105: 0x92EF, + 136998 - 131105: 0xFAC8, + 137018 - 131105: 0x9847, + 137019 - 131105: 0x9366, + 137020 - 131105: 0x9855, + 137047 - 131105: 0x96E6, + 137068 - 131105: 0x9F43, + 137069 - 131105: 0x9FAA, + 137070 - 131105: 0x94DA, + 137071 - 131105: 0x92EE, + 137072 - 131105: 0xFCAF, + 137073 - 131105: 0xFBFB, + 137075 - 131105: 0x8EF9, + 137076 - 131105: 0x91F6, + 137131 - 131105: 0x9364, + 137136 - 131105: 0x94F5, + 137137 - 131105: 0x9CB6, + 137138 - 131105: 0xFBAD, + 137139 - 131105: 0x984E, + 137140 - 131105: 0x8F44, + 137141 - 131105: 0x96FD, + 137155 - 131105: 0x9AF9, + 137159 - 131105: 0x9AFA, + 137177 - 131105: 0x9769, + 137178 - 131105: 0x95D4, + 137179 - 131105: 0x984B, + 137180 - 131105: 0xFBAA, + 137183 - 131105: 0x987C, + 137199 - 131105: 0x91EA, + 137205 - 131105: 0x9DAF, + 137206 - 131105: 0x9DC5, + 137208 - 131105: 0x91F1, + 137209 - 131105: 0x8EB1, + 137210 - 131105: 0x97A9, + 137211 - 131105: 0xFBAC, + 137212 - 131105: 0xFCB8, + 137248 - 131105: 0x9CB9, + 137256 - 131105: 0xFBB0, + 137257 - 131105: 0xFCD2, + 137258 - 131105: 0x93CB, + 137261 - 131105: 0x9AFD, + 137273 - 131105: 0x91F4, + 137274 - 131105: 0x8BAC, + 137275 - 131105: 0xA055, + 137280 - 131105: 0x9574, + 137285 - 131105: 0x95BE, + 137298 - 131105: 0x97AD, + 137310 - 131105: 0x8EE9, + 137313 - 131105: 0x92F8, + 137314 - 131105: 0x97BE, + 137315 - 131105: 0x916C, + 137316 - 131105: 0x94AA, + 137335 - 131105: 0xFC63, + 137339 - 131105: 0x9DC6, + 137347 - 131105: 0x97B5, + 137348 - 131105: 0x92B8, + 137349 - 131105: 0x91EF, + 137374 - 131105: 0xFEA6, + 137375 - 131105: 0x9760, + 137376 - 131105: 0x9358, + 137377 - 131105: 0x9576, + 137378 - 131105: 0x8FAC, + 137406 - 131105: 0x91EC, + 137407 - 131105: 0x97B4, + 137425 - 131105: 0x91F7, + 137430 - 131105: 0x974A, + 137431 - 131105: 0xFB49, + 137432 - 131105: 0x9578, + 137433 - 131105: 0x93BC, + 137466 - 131105: 0x91D6, + 137475 - 131105: 0x9355, + 137476 - 131105: 0x9356, + 137477 - 131105: 0x9851, + 137488 - 131105: 0x8FF8, + 137489 - 131105: 0xFBC0, + 137490 - 131105: 0x93F2, + 137493 - 131105: 0x90D0, + 137500 - 131105: 0x9C44, + 137506 - 131105: 0x9255, + 137511 - 131105: 0x9363, + 137531 - 131105: 0x91A5, + 137540 - 131105: 0xA0ED, + 137560 - 131105: 0xFD6B, + 137578 - 131105: 0x9AFE, + 137596 - 131105: 0x9351, + 137600 - 131105: 0x8C57, + 137603 - 131105: 0xFA78, + 137608 - 131105: 0xFEA8, + 137622 - 131105: 0x9350, + 137691 - 131105: 0xFA4C, + 137715 - 131105: 0x92F7, + 137773 - 131105: 0x9B40, + 137780 - 131105: 0xFBCE, + 137797 - 131105: 0x9B41, + 137803 - 131105: 0xFEAD, + 137827 - 131105: 0x8761, + 138052 - 131105: 0xFBD5, + 138177 - 131105: 0x8BC2, + 138178 - 131105: 0x9A7C, + 138282 - 131105: 0x9B42, + 138352 - 131105: 0x9B43, + 138402 - 131105: 0x9E79, + 138405 - 131105: 0xFBD9, + 138412 - 131105: 0x9B44, + 138566 - 131105: 0xA0A7, + 138579 - 131105: 0x877B, + 138590 - 131105: 0x876E, + 138640 - 131105: 0x9BF3, + 138678 - 131105: 0x8C79, + 138682 - 131105: 0x935E, + 138698 - 131105: 0x89CB, + 138705 - 131105: 0x9F53, + 138731 - 131105: 0x93D7, + 138745 - 131105: 0xFBE1, + 138780 - 131105: 0xFED0, + 138787 - 131105: 0x8CF1, + 138807 - 131105: 0xFBE2, + 138813 - 131105: 0xFCE3, + 138889 - 131105: 0x9074, + 138916 - 131105: 0xFBE6, + 138920 - 131105: 0x9BB7, + 138952 - 131105: 0x9B45, + 138965 - 131105: 0x9B47, + 139023 - 131105: 0x9F50, + 139029 - 131105: 0x9B48, + 139114 - 131105: 0xFC5B, + 139166 - 131105: 0x98A9, + 139169 - 131105: 0x9CFD, + 139240 - 131105: 0x884C, + 139333 - 131105: 0x9B4B, + 139337 - 131105: 0xFBEC, + 139390 - 131105: 0x8C69, + 139418 - 131105: 0x9BA8, + 139463 - 131105: 0x8AD5, + 139516 - 131105: 0xFA73, + 139562 - 131105: 0xFD59, + 139611 - 131105: 0x91A2, + 139635 - 131105: 0xFBED, + 139642 - 131105: 0x9CA9, + 139681 - 131105: 0x8AA8, + 139713 - 131105: 0x8D42, + 139715 - 131105: 0x9BC3, + 139784 - 131105: 0x8AE1, + 139900 - 131105: 0x9B4E, + 140065 - 131105: 0x95D0, + 140069 - 131105: 0x905F, + 140221 - 131105: 0x97EE, + 140240 - 131105: 0xFC4E, + 140247 - 131105: 0x9B4F, + 140282 - 131105: 0x9B50, + 140389 - 131105: 0x9EC6, + 140401 - 131105: 0xFC50, + 140427 - 131105: 0xFD73, + 140433 - 131105: 0xFDA7, + 140464 - 131105: 0x9DA2, + 140476 - 131105: 0x87D1, + 140481 - 131105: 0x87D3, + 140489 - 131105: 0x87D4, + 140492 - 131105: 0x87D5, + 140525 - 131105: 0xFA58, + 140563 - 131105: 0xFA5E, + 140571 - 131105: 0xA059, + 140592 - 131105: 0xFA75, + 140628 - 131105: 0xFBBE, + 140685 - 131105: 0x9CA2, + 140719 - 131105: 0x9370, + 140734 - 131105: 0x9371, + 140827 - 131105: 0x9377, + 140828 - 131105: 0xFEEF, + 140843 - 131105: 0x936D, + 140904 - 131105: 0xFC5D, + 140922 - 131105: 0x90B8, + 140950 - 131105: 0x8AFC, + 140952 - 131105: 0xFB41, + 141044 - 131105: 0x9E6B, + 141045 - 131105: 0x94E3, + 141046 - 131105: 0x8EE2, + 141074 - 131105: 0x8C7D, + 141076 - 131105: 0x8ED7, + 141083 - 131105: 0x9C4D, + 141087 - 131105: 0x96A3, + 141098 - 131105: 0x9B51, + 141173 - 131105: 0x8AC3, + 141185 - 131105: 0x96AA, + 141206 - 131105: 0x8CE2, + 141236 - 131105: 0xFC68, + 141237 - 131105: 0x8B6D, + 141261 - 131105: 0xFD67, + 141315 - 131105: 0x8AE9, + 141407 - 131105: 0xFCA1, + 141408 - 131105: 0x936C, + 141425 - 131105: 0x9B52, + 141485 - 131105: 0xFE70, + 141505 - 131105: 0xFCA8, + 141559 - 131105: 0xFCE9, + 141606 - 131105: 0x9CB4, + 141625 - 131105: 0x8AEA, + 141647 - 131105: 0x9B53, + 141671 - 131105: 0x9B55, + 141675 - 131105: 0x96AB, + 141696 - 131105: 0xFCA7, + 141715 - 131105: 0x9B56, + 141926 - 131105: 0x8ABC, + 142031 - 131105: 0x8ACB, + 142037 - 131105: 0x9B57, + 142054 - 131105: 0x89CD, + 142056 - 131105: 0x9B59, + 142094 - 131105: 0x9B5B, + 142114 - 131105: 0x93A5, + 142143 - 131105: 0x9B5D, + 142147 - 131105: 0x9E4F, + 142186 - 131105: 0x93A3, + 142282 - 131105: 0x8A7B, + 142286 - 131105: 0x8B42, + 142374 - 131105: 0x9750, + 142375 - 131105: 0x8FB3, + 142392 - 131105: 0x8A50, + 142412 - 131105: 0x9B60, + 142417 - 131105: 0x8B45, + 142421 - 131105: 0x8B46, + 142434 - 131105: 0x9DFE, + 142472 - 131105: 0x9B62, + 142491 - 131105: 0x937B, + 142497 - 131105: 0x93B1, + 142505 - 131105: 0x8A60, + 142514 - 131105: 0x8AD8, + 142519 - 131105: 0x9B63, + 142530 - 131105: 0x8A69, + 142534 - 131105: 0x8A47, + 142537 - 131105: 0x8ACC, + 142599 - 131105: 0x937C, + 142600 - 131105: 0x9B65, + 142610 - 131105: 0x9B66, + 142660 - 131105: 0x8A72, + 142668 - 131105: 0x8A7A, + 142695 - 131105: 0x93AF, + 142733 - 131105: 0x8AB0, + 142741 - 131105: 0x9B68, + 142752 - 131105: 0x9EA3, + 142755 - 131105: 0xFAEC, + 142756 - 131105: 0x8B77, + 142775 - 131105: 0x9B67, + 142830 - 131105: 0x8B59, + 142861 - 131105: 0xFCB1, + 142902 - 131105: 0xFCBB, + 142914 - 131105: 0x9B69, + 142968 - 131105: 0x93A8, + 142987 - 131105: 0x8AE0, + 143027 - 131105: 0x9E51, + 143087 - 131105: 0x8F5F, + 143220 - 131105: 0x9B6A, + 143308 - 131105: 0x9B6B, + 143331 - 131105: 0x97EC, + 143411 - 131105: 0x9B6C, + 143428 - 131105: 0xFE4E, + 143435 - 131105: 0xFDC2, + 143462 - 131105: 0x9B6D, + 143485 - 131105: 0x9167, + 143486 - 131105: 0xFCCC, + 143502 - 131105: 0x93B6, + 143543 - 131105: 0x90E4, + 143548 - 131105: 0x90E5, + 143578 - 131105: 0x9EF2, + 143619 - 131105: 0x93CA, + 143677 - 131105: 0x8BBC, + 143741 - 131105: 0x8F46, + 143746 - 131105: 0x93CF, + 143780 - 131105: 0xFCDB, + 143781 - 131105: 0xFCDC, + 143795 - 131105: 0x93C0, + 143816 - 131105: 0xFCE6, + 143817 - 131105: 0x96E7, + 143850 - 131105: 0x87A7, + 143863 - 131105: 0xFCD8, + 143864 - 131105: 0xFCD9, + 143865 - 131105: 0xFDA6, + 143887 - 131105: 0x93CE, + 143909 - 131105: 0x95F1, + 143919 - 131105: 0x9CE9, + 143921 - 131105: 0xFCE4, + 143922 - 131105: 0x94AF, + 143923 - 131105: 0xFA77, + 143924 - 131105: 0x93CC, + 143958 - 131105: 0x8CE1, + 143966 - 131105: 0x87A9, + 143970 - 131105: 0x905A, + 144001 - 131105: 0x8C54, + 144009 - 131105: 0x93BF, + 144010 - 131105: 0xFB51, + 144043 - 131105: 0x93B9, + 144044 - 131105: 0xFED7, + 144045 - 131105: 0x93B7, + 144082 - 131105: 0x93D9, + 144096 - 131105: 0x93BB, + 144097 - 131105: 0x93DA, + 144128 - 131105: 0x98A3, + 144138 - 131105: 0x90D1, + 144159 - 131105: 0x9B6E, + 144308 - 131105: 0xFA70, + 144332 - 131105: 0x9BEB, + 144350 - 131105: 0x9B6F, + 144358 - 131105: 0xFCFC, + 144372 - 131105: 0x8B40, + 144373 - 131105: 0xA07B, + 144377 - 131105: 0x8CA1, + 144378 - 131105: 0x97F7, + 144382 - 131105: 0x93E2, + 144384 - 131105: 0xFCD6, + 144447 - 131105: 0x9559, + 144464 - 131105: 0x93A6, + 144495 - 131105: 0xFD40, + 144498 - 131105: 0x935F, + 144613 - 131105: 0x97F2, + 144665 - 131105: 0x9C76, + 144688 - 131105: 0x8EF8, + 144721 - 131105: 0x8CEB, + 144730 - 131105: 0x8F47, + 144743 - 131105: 0x9B74, + 144789 - 131105: 0x92B4, + 144793 - 131105: 0x91ED, + 144796 - 131105: 0x96D2, + 144827 - 131105: 0x87D8, + 144845 - 131105: 0xFD46, + 144846 - 131105: 0x8F4F, + 144847 - 131105: 0x9549, + 144883 - 131105: 0x9B75, + 144896 - 131105: 0xFA5C, + 144919 - 131105: 0x8751, + 144922 - 131105: 0x9B79, + 144956 - 131105: 0xFD4B, + 144960 - 131105: 0x96D3, + 144985 - 131105: 0xFD58, + 144991 - 131105: 0x945F, + 145015 - 131105: 0xA0F5, + 145038 - 131105: 0x87C7, + 145054 - 131105: 0x877C, + 145062 - 131105: 0x9243, + 145069 - 131105: 0x97FA, + 145082 - 131105: 0x9DD9, + 145119 - 131105: 0x97F4, + 145134 - 131105: 0x924D, + 145155 - 131105: 0xFD5B, + 145174 - 131105: 0x9B7A, + 145184 - 131105: 0x9ED5, + 145197 - 131105: 0xFAAE, + 145199 - 131105: 0x9CC9, + 145215 - 131105: 0x9258, + 145254 - 131105: 0x8EC8, + 145281 - 131105: 0x94B4, + 145314 - 131105: 0x93E1, + 145340 - 131105: 0x93DF, + 145346 - 131105: 0xFCF0, + 145365 - 131105: 0x93EC, + 145366 - 131105: 0x97F6, + 145367 - 131105: 0x96CF, + 145466 - 131105: 0x93DE, + 145858 - 131105: 0x8ACF, + 146087 - 131105: 0x9BA2, + 146139 - 131105: 0xFD69, + 146158 - 131105: 0x9352, + 146170 - 131105: 0x98A2, + 146202 - 131105: 0x8CE7, + 146266 - 131105: 0xFD6E, + 146531 - 131105: 0x8CA4, + 146585 - 131105: 0xFA7C, + 146586 - 131105: 0x93FA, + 146587 - 131105: 0x907C, + 146613 - 131105: 0x8F67, + 146615 - 131105: 0x9DB7, + 146631 - 131105: 0xA0E9, + 146632 - 131105: 0xFA4E, + 146633 - 131105: 0xFDA1, + 146684 - 131105: 0x9E74, + 146685 - 131105: 0x9FBF, + 146686 - 131105: 0x9ECB, + 146687 - 131105: 0x9BB9, + 146752 - 131105: 0x9DD4, + 146779 - 131105: 0x97B9, + 146814 - 131105: 0x8EF1, + 146831 - 131105: 0x957B, + 146870 - 131105: 0x9ED2, + 146871 - 131105: 0x9753, + 146872 - 131105: 0x96A4, + 146873 - 131105: 0x8FBE, + 146874 - 131105: 0x94D9, + 146875 - 131105: 0x9058, + 146876 - 131105: 0xFD79, + 146877 - 131105: 0xFD7B, + 146915 - 131105: 0x8EDA, + 146936 - 131105: 0x8EFA, + 146950 - 131105: 0x8762, + 146961 - 131105: 0x9BA5, + 146988 - 131105: 0x9ED9, + 146989 - 131105: 0x97D4, + 146990 - 131105: 0x90BB, + 146991 - 131105: 0xFDBC, + 146992 - 131105: 0xFDC6, + 146993 - 131105: 0x9248, + 147001 - 131105: 0x92B5, + 147080 - 131105: 0x9DC1, + 147081 - 131105: 0x92B9, + 147082 - 131105: 0x92A6, + 147083 - 131105: 0x8F4B, + 147129 - 131105: 0x9BA6, + 147135 - 131105: 0x92B6, + 147159 - 131105: 0x8E40, + 147191 - 131105: 0x9ED8, + 147192 - 131105: 0x945E, + 147193 - 131105: 0x985F, + 147194 - 131105: 0x94CE, + 147195 - 131105: 0x924A, + 147196 - 131105: 0xFD70, + 147253 - 131105: 0x9467, + 147265 - 131105: 0x8DEC, + 147274 - 131105: 0x9BD8, + 147297 - 131105: 0x8763, + 147327 - 131105: 0x9448, + 147328 - 131105: 0xFAC1, + 147329 - 131105: 0x9CF7, + 147330 - 131105: 0xFDBE, + 147343 - 131105: 0x8FDA, + 147380 - 131105: 0xFDD9, + 147383 - 131105: 0xFC7E, + 147392 - 131105: 0x93F9, + 147397 - 131105: 0xFA43, + 147435 - 131105: 0xFAEB, + 147436 - 131105: 0xFAC3, + 147437 - 131105: 0x97D3, + 147438 - 131105: 0x95F9, + 147439 - 131105: 0x9C48, + 147440 - 131105: 0xFDD8, + 147473 - 131105: 0xA0D8, + 147513 - 131105: 0xFDD7, + 147514 - 131105: 0xFB4A, + 147515 - 131105: 0x9BAF, + 147516 - 131105: 0x944B, + 147517 - 131105: 0xFDC9, + 147543 - 131105: 0x8EAC, + 147589 - 131105: 0xFDB2, + 147595 - 131105: 0x925A, + 147596 - 131105: 0xFCBD, + 147597 - 131105: 0x92D9, + 147601 - 131105: 0xFDD5, + 147657 - 131105: 0x92DD, + 147681 - 131105: 0x9259, + 147692 - 131105: 0x8CF0, + 147716 - 131105: 0x96BA, + 147727 - 131105: 0x925B, + 147737 - 131105: 0x9BAB, + 147775 - 131105: 0xFDDA, + 147776 - 131105: 0xFDDE, + 147780 - 131105: 0xFDD3, + 147790 - 131105: 0x8C46, + 147797 - 131105: 0xFDD6, + 147798 - 131105: 0xFDDC, + 147799 - 131105: 0xFDDD, + 147804 - 131105: 0x90FE, + 147807 - 131105: 0xFEA1, + 147809 - 131105: 0x87A5, + 147831 - 131105: 0x8BAD, + 147834 - 131105: 0x9CD8, + 147875 - 131105: 0x9E6D, + 147876 - 131105: 0xFD7C, + 147877 - 131105: 0xFB61, + 147884 - 131105: 0x96F8, + 147893 - 131105: 0x96F0, + 147917 - 131105: 0xFCF4, + 147938 - 131105: 0xFE60, + 147964 - 131105: 0x9852, + 147995 - 131105: 0x964F, + 148043 - 131105: 0x916E, + 148054 - 131105: 0x986D, + 148057 - 131105: 0x9864, + 148086 - 131105: 0x9453, + 148087 - 131105: 0xFDEC, + 148088 - 131105: 0xFB78, + 148100 - 131105: 0x95BA, + 148115 - 131105: 0x985D, + 148117 - 131105: 0x92F9, + 148133 - 131105: 0x985A, + 148159 - 131105: 0x8750, + 148161 - 131105: 0xFDF6, + 148169 - 131105: 0x93D0, + 148170 - 131105: 0x9862, + 148206 - 131105: 0x9BAD, + 148218 - 131105: 0x974F, + 148237 - 131105: 0x9BAE, + 148250 - 131105: 0x9452, + 148276 - 131105: 0x9BB0, + 148296 - 131105: 0x91D2, + 148322 - 131105: 0x97EA, + 148323 - 131105: 0xFB6B, + 148324 - 131105: 0x91B1, + 148325 - 131105: 0xFDF3, + 148364 - 131105: 0x92CB, + 148374 - 131105: 0x9BB1, + 148380 - 131105: 0xFCEC, + 148413 - 131105: 0x986B, + 148417 - 131105: 0x9751, + 148457 - 131105: 0x9871, + 148458 - 131105: 0x95EF, + 148466 - 131105: 0x9EF3, + 148472 - 131105: 0x91E8, + 148484 - 131105: 0x9BBA, + 148533 - 131105: 0xFB4C, + 148534 - 131105: 0x926A, + 148570 - 131105: 0xFDF8, + 148571 - 131105: 0x9861, + 148595 - 131105: 0x91E7, + 148615 - 131105: 0x93ED, + 148616 - 131105: 0x9744, + 148665 - 131105: 0x91E1, + 148668 - 131105: 0xFBF5, + 148686 - 131105: 0x9869, + 148691 - 131105: 0x8A62, + 148694 - 131105: 0x9BBB, + 148741 - 131105: 0x8CA8, + 148769 - 131105: 0x9C55, + 148856 - 131105: 0x8E77, + 148936 - 131105: 0x8AB2, + 149016 - 131105: 0x9EBC, + 149034 - 131105: 0x93E6, + 149093 - 131105: 0x93A2, + 149108 - 131105: 0x9BBD, + 149143 - 131105: 0x94B3, + 149204 - 131105: 0x937D, + 149254 - 131105: 0x9E66, + 149285 - 131105: 0x9459, + 149295 - 131105: 0x9BBF, + 149391 - 131105: 0x9458, + 149472 - 131105: 0x9EA5, + 149522 - 131105: 0x9BC7, + 149539 - 131105: 0xFE54, + 149634 - 131105: 0x8E74, + 149737 - 131105: 0x8BD6, + 149744 - 131105: 0x94B6, + 149745 - 131105: 0xFD74, + 149746 - 131105: 0x98C0, + 149747 - 131105: 0x94A5, + 149755 - 131105: 0x9BC8, + 149759 - 131105: 0x95ED, + 149760 - 131105: 0xFD7E, + 149761 - 131105: 0xFBEB, + 149772 - 131105: 0xFD7D, + 149782 - 131105: 0x976F, + 149783 - 131105: 0x9461, + 149785 - 131105: 0x9FC1, + 149807 - 131105: 0x95D7, + 149811 - 131105: 0xFA52, + 149812 - 131105: 0x9C58, + 149822 - 131105: 0x9F68, + 149823 - 131105: 0x9BE7, + 149824 - 131105: 0xFCCE, + 149825 - 131105: 0x96E8, + 149826 - 131105: 0xFA49, + 149827 - 131105: 0x97A1, + 149858 - 131105: 0x954D, + 149859 - 131105: 0x9EF8, + 149876 - 131105: 0xFE49, + 149877 - 131105: 0x91CE, + 149878 - 131105: 0x9771, + 149883 - 131105: 0x8CCF, + 149887 - 131105: 0xFDB1, + 149890 - 131105: 0xFC6E, + 149896 - 131105: 0x9CF2, + 149897 - 131105: 0x93B8, + 149898 - 131105: 0x9043, + 149899 - 131105: 0x9759, + 149900 - 131105: 0x94D7, + 149901 - 131105: 0xFE66, + 149902 - 131105: 0x947D, + 149903 - 131105: 0xFC6F, + 149908 - 131105: 0x9246, + 149924 - 131105: 0xFA6D, + 149927 - 131105: 0x8EF7, + 149929 - 131105: 0xFBB7, + 149931 - 131105: 0x947C, + 149932 - 131105: 0x92CD, + 149933 - 131105: 0x97B2, + 149943 - 131105: 0xFE65, + 149944 - 131105: 0x967E, + 149945 - 131105: 0x9758, + 149946 - 131105: 0x9B77, + 149947 - 131105: 0x91CF, + 149957 - 131105: 0x94A4, + 149968 - 131105: 0x9CAD, + 149978 - 131105: 0x8BAB, + 149982 - 131105: 0x96D5, + 149983 - 131105: 0xFCB3, + 149987 - 131105: 0x93AE, + 149989 - 131105: 0x976D, + 149996 - 131105: 0x9446, + 149997 - 131105: 0x95F7, + 150006 - 131105: 0x9C46, + 150007 - 131105: 0x955B, + 150008 - 131105: 0x91D1, + 150009 - 131105: 0x94F4, + 150011 - 131105: 0xFE67, + 150030 - 131105: 0x92A5, + 150034 - 131105: 0xFEDF, + 150035 - 131105: 0x8CAB, + 150037 - 131105: 0x9BC9, + 150049 - 131105: 0xFCED, + 150050 - 131105: 0xFDFA, + 150051 - 131105: 0xFCC8, + 150052 - 131105: 0xFE62, + 150053 - 131105: 0x91FC, + 150054 - 131105: 0xFE6B, + 150055 - 131105: 0xFDF9, + 150056 - 131105: 0xFCC7, + 150057 - 131105: 0x914E, + 150058 - 131105: 0x9CB8, + 150078 - 131105: 0x9767, + 150082 - 131105: 0x95EE, + 150085 - 131105: 0x9BB2, + 150090 - 131105: 0x9460, + 150094 - 131105: 0x94A2, + 150095 - 131105: 0x9875, + 150096 - 131105: 0x97AC, + 150097 - 131105: 0x91D3, + 150109 - 131105: 0x987B, + 150117 - 131105: 0x8EEB, + 150118 - 131105: 0x976A, + 150119 - 131105: 0x965E, + 150129 - 131105: 0x97EB, + 150135 - 131105: 0x9FF9, + 150136 - 131105: 0x95F8, + 150137 - 131105: 0xFEA2, + 150138 - 131105: 0x8FE6, + 150156 - 131105: 0xFE7E, + 150163 - 131105: 0x9DA4, + 150164 - 131105: 0x9768, + 150165 - 131105: 0x8EEC, + 150166 - 131105: 0x94BD, + 150180 - 131105: 0x945B, + 150181 - 131105: 0x9CF6, + 150182 - 131105: 0xFAA7, + 150183 - 131105: 0x9BD9, + 150193 - 131105: 0xFA5D, + 150194 - 131105: 0x9656, + 150195 - 131105: 0x9762, + 150202 - 131105: 0x94BA, + 150203 - 131105: 0xA04F, + 150204 - 131105: 0x92D8, + 150208 - 131105: 0x9BCB, + 150215 - 131105: 0x94BB, + 150218 - 131105: 0x9D5F, + 150225 - 131105: 0x90CF, + 150239 - 131105: 0x9465, + 150242 - 131105: 0x9F4C, + 150249 - 131105: 0x90D8, + 150287 - 131105: 0x8D5B, + 150382 - 131105: 0x9EBE, + 150517 - 131105: 0xFB6D, + 150537 - 131105: 0x95CA, + 150686 - 131105: 0x9DC2, + 150687 - 131105: 0x97F8, + 150729 - 131105: 0x8FFC, + 150745 - 131105: 0x9473, + 150790 - 131105: 0x9474, + 150803 - 131105: 0xFEB7, + 150968 - 131105: 0x8A4B, + 151018 - 131105: 0x8A55, + 151019 - 131105: 0x8B69, + 151099 - 131105: 0x8ADC, + 151120 - 131105: 0x8B76, + 151205 - 131105: 0x9BCE, + 151207 - 131105: 0x8A68, + 151310 - 131105: 0xA0F8, + 151388 - 131105: 0x98DF, + 151426 - 131105: 0xFEB5, + 151430 - 131105: 0x9BCF, + 151447 - 131105: 0x96FB, + 151450 - 131105: 0x9BFB, + 151465 - 131105: 0x9ECE, + 151480 - 131105: 0x8EE5, + 151490 - 131105: 0x9E7B, + 151596 - 131105: 0x9BD2, + 151634 - 131105: 0x8AA5, + 151709 - 131105: 0xFECE, + 151851 - 131105: 0x8A45, + 151880 - 131105: 0x9DFC, + 151933 - 131105: 0xFECF, + 151934 - 131105: 0x8BA5, + 152013 - 131105: 0x8C4A, + 152035 - 131105: 0x8AEC, + 152038 - 131105: 0xFCE0, + 152039 - 131105: 0x94AD, + 152096 - 131105: 0xFED5, + 152097 - 131105: 0x94AC, + 152144 - 131105: 0xFC5A, + 152217 - 131105: 0x9BD6, + 152263 - 131105: 0x8A6F, + 152280 - 131105: 0x8BA9, + 152334 - 131105: 0x8E5F, + 152337 - 131105: 0x9DCB, + 152339 - 131105: 0xFCE7, + 152601 - 131105: 0x9BD7, + 152613 - 131105: 0x93C8, + 152623 - 131105: 0x91F0, + 152624 - 131105: 0x8FE0, + 152646 - 131105: 0x9BDB, + 152684 - 131105: 0x90ED, + 152686 - 131105: 0x9BDC, + 152730 - 131105: 0x8D53, + 152881 - 131105: 0xA0EC, + 152885 - 131105: 0x98FA, + 152895 - 131105: 0x9BE0, + 152923 - 131105: 0x93C7, + 152924 - 131105: 0x9249, + 152925 - 131105: 0x96E1, + 152926 - 131105: 0x9BE2, + 152930 - 131105: 0x9BE4, + 152933 - 131105: 0x8FE1, + 152934 - 131105: 0x9BE5, + 152961 - 131105: 0x94C0, + 152964 - 131105: 0x93C3, + 152975 - 131105: 0x93C5, + 153017 - 131105: 0x9079, + 153045 - 131105: 0x977B, + 153051 - 131105: 0x907E, + 153056 - 131105: 0xFEE6, + 153093 - 131105: 0xFE46, + 153141 - 131105: 0x9DB8, + 153169 - 131105: 0x9270, + 153219 - 131105: 0x95A8, + 153237 - 131105: 0x8CB0, + 153315 - 131105: 0x94C8, + 153334 - 131105: 0x98B9, + 153350 - 131105: 0x9140, + 153373 - 131105: 0xFCBE, + 153381 - 131105: 0x9157, + 153405 - 131105: 0x8BB2, + 153458 - 131105: 0xFADF, + 153543 - 131105: 0x9BE6, + 153567 - 131105: 0x9643, + 153568 - 131105: 0x8E44, + 153569 - 131105: 0x9C4F, + 153687 - 131105: 0xFEF4, + 153693 - 131105: 0x9BE8, + 153714 - 131105: 0x93DC, + 153800 - 131105: 0x966F, + 153822 - 131105: 0x87A1, + 153825 - 131105: 0x8E4A, + 153859 - 131105: 0x9BED, + 153926 - 131105: 0x92F6, + 153942 - 131105: 0x9DB9, + 154028 - 131105: 0x8E4E, + 154060 - 131105: 0xFBCF, + 154196 - 131105: 0x8760, + 154261 - 131105: 0x9EC2, + 154268 - 131105: 0x94E5, + 154286 - 131105: 0x9BF0, + 154287 - 131105: 0x94E4, + 154345 - 131105: 0x9551, + 154484 - 131105: 0x8BBB, + 154505 - 131105: 0x9BF1, + 154547 - 131105: 0x94F0, + 154548 - 131105: 0x8E64, + 154566 - 131105: 0x94EA, + 154596 - 131105: 0x8F61, + 154600 - 131105: 0x9B64, + 154625 - 131105: 0x8E5B, + 154630 - 131105: 0x9BF2, + 154657 - 131105: 0x9FBE, + 154698 - 131105: 0x9DC9, + 154725 - 131105: 0x8E6C, + 154769 - 131105: 0x8F73, + 154788 - 131105: 0x8CAF, + 154816 - 131105: 0x8F75, + 154817 - 131105: 0x8E71, + 154878 - 131105: 0x8E60, + 154912 - 131105: 0x8E6A, + 154928 - 131105: 0x8C4C, + 154947 - 131105: 0x9552, + 155033 - 131105: 0x87CF, + 155065 - 131105: 0x87C0, + 155150 - 131105: 0x9554, + 155209 - 131105: 0x8AD4, + 155265 - 131105: 0x9DBB, + 155266 - 131105: 0x9543, + 155267 - 131105: 0x92FE, + 155302 - 131105: 0x94F2, + 155324 - 131105: 0x94F1, + 155351 - 131105: 0xA0EA, + 155352 - 131105: 0x9DD2, + 155418 - 131105: 0xA0B1, + 155467 - 131105: 0x91F8, + 155617 - 131105: 0x9462, + 155618 - 131105: 0x9BA4, + 155681 - 131105: 0x877D, + 155689 - 131105: 0x8EAD, + 155720 - 131105: 0x9EAD, + 155748 - 131105: 0x96D0, + 155779 - 131105: 0xFEEE, + 155799 - 131105: 0x8AB4, + 155812 - 131105: 0x9757, + 155813 - 131105: 0x8A77, + 155906 - 131105: 0x9BF7, + 155937 - 131105: 0x8EB5, + 155993 - 131105: 0xA06D, + 155994 - 131105: 0x8EB6, + 155995 - 131105: 0x9756, + 155996 - 131105: 0x9540, + 156077 - 131105: 0xA0F3, + 156078 - 131105: 0x94BE, + 156082 - 131105: 0x9BFA, + 156125 - 131105: 0xFDDF, + 156248 - 131105: 0x9DBC, + 156257 - 131105: 0x94FE, + 156266 - 131105: 0x8BDB, + 156267 - 131105: 0xA0FE, + 156368 - 131105: 0x8EC0, + 156469 - 131105: 0x9F47, + 156491 - 131105: 0x8BDE, + 156492 - 131105: 0xA0FB, + 156497 - 131105: 0x8EC3, + 156606 - 131105: 0x9649, + 156661 - 131105: 0xFEC2, + 156664 - 131105: 0x954C, + 156674 - 131105: 0x9BFD, + 156688 - 131105: 0x90CC, + 156689 - 131105: 0x9C60, + 156690 - 131105: 0x954B, + 156746 - 131105: 0x9BFE, + 156777 - 131105: 0x9C70, + 156804 - 131105: 0x9C43, + 156808 - 131105: 0x9C47, + 156809 - 131105: 0x8ECC, + 156813 - 131105: 0x8E54, + 156824 - 131105: 0x8EE4, + 156946 - 131105: 0x9C49, + 157042 - 131105: 0x8B5E, + 157088 - 131105: 0x955E, + 157101 - 131105: 0x955C, + 157119 - 131105: 0x9C4B, + 157202 - 131105: 0x8BE1, + 157222 - 131105: 0x8ED9, + 157359 - 131105: 0x9DB4, + 157361 - 131105: 0x925F, + 157365 - 131105: 0x9C4C, + 157402 - 131105: 0x8AA1, + 157416 - 131105: 0x8EDB, + 157436 - 131105: 0x9C56, + 157462 - 131105: 0x8AA2, + 157505 - 131105: 0x9754, + 157593 - 131105: 0x9C5E, + 157619 - 131105: 0x9ED4, + 157620 - 131105: 0x9568, + 157644 - 131105: 0xA0C3, + 157724 - 131105: 0x8AE6, + 157766 - 131105: 0xA0F7, + 157790 - 131105: 0x9C61, + 157806 - 131105: 0x9C5F, + 157832 - 131105: 0xFC4D, + 157834 - 131105: 0x9E5B, + 157843 - 131105: 0x9E69, + 157895 - 131105: 0x9C63, + 157966 - 131105: 0xFEC7, + 157969 - 131105: 0xFEC6, + 157990 - 131105: 0x9C67, + 158009 - 131105: 0x9C69, + 158033 - 131105: 0x8BE2, + 158120 - 131105: 0x9165, + 158133 - 131105: 0x9CE7, + 158194 - 131105: 0x8A54, + 158202 - 131105: 0x9C6C, + 158253 - 131105: 0x9C6E, + 158254 - 131105: 0xFE5D, + 158260 - 131105: 0x9C73, + 158274 - 131105: 0x956A, + 158289 - 131105: 0x956D, + 158290 - 131105: 0x8EF0, + 158469 - 131105: 0x8F4D, + 158474 - 131105: 0x8EF6, + 158483 - 131105: 0xFABC, + 158485 - 131105: 0x8CD5, + 158499 - 131105: 0x875E, + 158504 - 131105: 0xFBDA, + 158544 - 131105: 0x8B4C, + 158545 - 131105: 0xFD75, + 158546 - 131105: 0x9BDD, + 158547 - 131105: 0xFAF5, + 158555 - 131105: 0x9C74, + 158581 - 131105: 0x9545, + 158594 - 131105: 0x96C6, + 158614 - 131105: 0x8F6A, + 158615 - 131105: 0x8F4E, + 158621 - 131105: 0x9C78, + 158643 - 131105: 0xFA55, + 158656 - 131105: 0x97E4, + 158711 - 131105: 0x9C41, + 158753 - 131105: 0x925C, + 158784 - 131105: 0x96FA, + 158785 - 131105: 0x8CF6, + 158790 - 131105: 0x8D4D, + 158846 - 131105: 0xFB66, + 158847 - 131105: 0x8E65, + 158848 - 131105: 0x9849, + 158849 - 131105: 0xFBA8, + 158850 - 131105: 0x9842, + 158884 - 131105: 0x9C7A, + 158903 - 131105: 0x97FB, + 158904 - 131105: 0x90CA, + 158909 - 131105: 0x9C5B, + 158912 - 131105: 0x974D, + 158915 - 131105: 0x8ED3, + 158929 - 131105: 0x9561, + 159010 - 131105: 0x9F4B, + 159011 - 131105: 0x9FB5, + 159012 - 131105: 0x93D2, + 159013 - 131105: 0xFDAA, + 159014 - 131105: 0x9840, + 159015 - 131105: 0x9146, + 159016 - 131105: 0x9867, + 159017 - 131105: 0xFA5A, + 159018 - 131105: 0xFBA9, + 159057 - 131105: 0x9841, + 159092 - 131105: 0x8CD3, + 159136 - 131105: 0xFCFD, + 159137 - 131105: 0xFDAB, + 159138 - 131105: 0x91BD, + 159139 - 131105: 0x8F4C, + 159140 - 131105: 0x96C9, + 159141 - 131105: 0x8F55, + 159142 - 131105: 0xFBAE, + 159143 - 131105: 0x956F, + 159150 - 131105: 0x9C7D, + 159196 - 131105: 0xA0F0, + 159210 - 131105: 0x946F, + 159211 - 131105: 0xFDAC, + 159216 - 131105: 0x96CB, + 159232 - 131105: 0x96CE, + 159237 - 131105: 0xA056, + 159239 - 131105: 0x9CE1, + 159250 - 131105: 0x96C4, + 159298 - 131105: 0x8F5E, + 159299 - 131105: 0x8F6C, + 159300 - 131105: 0x8EA3, + 159301 - 131105: 0xFBB3, + 159342 - 131105: 0xFC53, + 159346 - 131105: 0xFDB3, + 159351 - 131105: 0x8F6B, + 159364 - 131105: 0x96CA, + 159368 - 131105: 0x87CD, + 159371 - 131105: 0x8753, + 159385 - 131105: 0x8F79, + 159440 - 131105: 0x9E6F, + 159441 - 131105: 0xA0C5, + 159442 - 131105: 0xFC78, + 159443 - 131105: 0x8E42, + 159444 - 131105: 0x8F5A, + 159445 - 131105: 0x90C2, + 159446 - 131105: 0x8EA5, + 159447 - 131105: 0x9061, + 159526 - 131105: 0x924F, + 159603 - 131105: 0x9373, + 159604 - 131105: 0xFDB5, + 159647 - 131105: 0xFECC, + 159649 - 131105: 0xFBBD, + 159678 - 131105: 0x8CD6, + 159710 - 131105: 0x9843, + 159711 - 131105: 0x96C5, + 159758 - 131105: 0x89BC, + 159819 - 131105: 0x9CA3, + 159826 - 131105: 0x924B, + 159827 - 131105: 0x984A, + 159880 - 131105: 0x8FA4, + 159917 - 131105: 0xA0F1, + 159918 - 131105: 0x9EFB, + 159919 - 131105: 0x9CD2, + 159949 - 131105: 0x8FA7, + 159954 - 131105: 0x8754, + 159992 - 131105: 0xFC5C, + 160009 - 131105: 0x9845, + 160012 - 131105: 0x9046, + 160013 - 131105: 0x8CD1, + 160038 - 131105: 0xFEFA, + 160039 - 131105: 0x9560, + 160100 - 131105: 0x9F48, + 160101 - 131105: 0x9247, + 160117 - 131105: 0x90FB, + 160205 - 131105: 0x9CA4, + 160283 - 131105: 0x9571, + 160359 - 131105: 0x8745, + 160384 - 131105: 0x9CA6, + 160389 - 131105: 0x9CA7, + 160395 - 131105: 0x9CAA, + 160434 - 131105: 0x9ED3, + 160438 - 131105: 0x9E70, + 160486 - 131105: 0x9CAC, + 160594 - 131105: 0x8752, + 160666 - 131105: 0x8FAE, + 160767 - 131105: 0x8D50, + 160802 - 131105: 0x957D, + 160848 - 131105: 0x9CB0, + 160900 - 131105: 0x97B6, + 160902 - 131105: 0xA0BD, + 161140 - 131105: 0x8ADF, + 161187 - 131105: 0x9EAA, + 161248 - 131105: 0x8FBD, + 161252 - 131105: 0x8FBF, + 161277 - 131105: 0x9369, + 161278 - 131105: 0x9BA7, + 161287 - 131105: 0xC8A4, + 161292 - 131105: 0xFEEA, + 161330 - 131105: 0x9BE1, + 161337 - 131105: 0x8B41, + 161365 - 131105: 0x9DB6, + 161366 - 131105: 0xA0EB, + 161367 - 131105: 0x9BA3, + 161428 - 131105: 0x8BA1, + 161551 - 131105: 0x8FC8, + 161589 - 131105: 0x894C, + 161590 - 131105: 0x9860, + 161601 - 131105: 0x94C7, + 161630 - 131105: 0x8B58, + 161668 - 131105: 0x95AB, + 161669 - 131105: 0x95AA, + 161740 - 131105: 0x9CC3, + 161880 - 131105: 0x9CC4, + 161904 - 131105: 0x93D6, + 161949 - 131105: 0x9DAC, + 161970 - 131105: 0x8BE6, + 161992 - 131105: 0x8A71, + 162084 - 131105: 0x8FD1, + 162151 - 131105: 0x99D5, + 162170 - 131105: 0x90F4, + 162208 - 131105: 0x8AA3, + 162269 - 131105: 0x9CCE, + 162301 - 131105: 0x9CD4, + 162314 - 131105: 0x9CD5, + 162318 - 131105: 0xFBC8, + 162366 - 131105: 0x9DB3, + 162387 - 131105: 0xFC70, + 162393 - 131105: 0x8FD7, + 162425 - 131105: 0x9B73, + 162436 - 131105: 0xFA5B, + 162493 - 131105: 0x8FD2, + 162494 - 131105: 0x9064, + 162548 - 131105: 0x98B6, + 162566 - 131105: 0x9668, + 162571 - 131105: 0x9CD6, + 162584 - 131105: 0x98BD, + 162616 - 131105: 0x8FDC, + 162617 - 131105: 0xFEF6, + 162618 - 131105: 0x8FD9, + 162632 - 131105: 0x9541, + 162661 - 131105: 0x87CA, + 162799 - 131105: 0x876C, + 162804 - 131105: 0x97F3, + 162834 - 131105: 0x9BF8, + 162924 - 131105: 0x875A, + 162993 - 131105: 0x8748, + 163013 - 131105: 0x874A, + 163119 - 131105: 0x9E6C, + 163155 - 131105: 0x8FF2, + 163156 - 131105: 0x8FEE, + 163174 - 131105: 0x9CD7, + 163187 - 131105: 0x9E6E, + 163204 - 131105: 0x8A40, + 163215 - 131105: 0x8FEF, + 163224 - 131105: 0x8FF4, + 163261 - 131105: 0x8FF5, + 163292 - 131105: 0x95C2, + 163405 - 131105: 0x986A, + 163407 - 131105: 0x97CF, + 163630 - 131105: 0x9EE5, + 163833 - 131105: 0x9E7C, + 163842 - 131105: 0x9041, + 163849 - 131105: 0x9CDB, + 163870 - 131105: 0x9441, + 163875 - 131105: 0x9CE6, + 163876 - 131105: 0x9DB0, + 163912 - 131105: 0x9CEA, + 163971 - 131105: 0x9CED, + 163984 - 131105: 0x9CFA, + 164029 - 131105: 0x8B62, + 164030 - 131105: 0x8A4E, + 164072 - 131105: 0x9CCA, + 164073 - 131105: 0x8A66, + 164084 - 131105: 0x9CFB, + 164142 - 131105: 0x9CFC, + 164175 - 131105: 0x9CFE, + 164189 - 131105: 0x8A53, + 164207 - 131105: 0x9CE5, + 164233 - 131105: 0x9D40, + 164271 - 131105: 0x9D41, + 164284 - 131105: 0x9045, + 164359 - 131105: 0x8B73, + 164376 - 131105: 0x97CA, + 164378 - 131105: 0x9D42, + 164438 - 131105: 0x8A61, + 164476 - 131105: 0x8BAE, + 164507 - 131105: 0x8AD2, + 164557 - 131105: 0x8BA2, + 164578 - 131105: 0x9DF2, + 164614 - 131105: 0x9D43, + 164632 - 131105: 0x9CDF, + 164655 - 131105: 0x9D44, + 164666 - 131105: 0x8ECA, + 164709 - 131105: 0x904E, + 164717 - 131105: 0x8EB3, + 164733 - 131105: 0x9FF5, + 164746 - 131105: 0x9D45, + 164882 - 131105: 0x904F, + 164968 - 131105: 0x9D47, + 164972 - 131105: 0x89CA, + 164979 - 131105: 0x9CB5, + 164994 - 131105: 0xFBFE, + 165121 - 131105: 0x905E, + 165180 - 131105: 0x9063, + 165181 - 131105: 0x9057, + 165228 - 131105: 0x9066, + 165352 - 131105: 0x9BC0, + 165364 - 131105: 0xFCE5, + 165376 - 131105: 0x9162, + 165387 - 131105: 0x9067, + 165413 - 131105: 0x8FA1, + 165435 - 131105: 0x8FA2, + 165546 - 131105: 0x9D48, + 165547 - 131105: 0xFAD3, + 165554 - 131105: 0x8D4F, + 165564 - 131105: 0x905D, + 165592 - 131105: 0x90B9, + 165606 - 131105: 0x906B, + 165647 - 131105: 0x8C5C, + 165651 - 131105: 0x9069, + 165892 - 131105: 0xFE57, + 165931 - 131105: 0xFE55, + 166157 - 131105: 0x87A6, + 166195 - 131105: 0x9073, + 166216 - 131105: 0x9BEF, + 166217 - 131105: 0x9CF0, + 166230 - 131105: 0x9D4B, + 166244 - 131105: 0xFED9, + 166248 - 131105: 0xFEDA, + 166252 - 131105: 0x91E0, + 166253 - 131105: 0x8D43, + 166270 - 131105: 0x91D8, + 166281 - 131105: 0x9646, + 166312 - 131105: 0x9360, + 166314 - 131105: 0xFA53, + 166315 - 131105: 0x9CD3, + 166328 - 131105: 0x9D4E, + 166332 - 131105: 0xFB40, + 166336 - 131105: 0x8DE2, + 166364 - 131105: 0x9442, + 166366 - 131105: 0x9056, + 166369 - 131105: 0x9865, + 166371 - 131105: 0x8C6C, + 166372 - 131105: 0xFA4A, + 166375 - 131105: 0x9D50, + 166376 - 131105: 0x9D52, + 166393 - 131105: 0x95AF, + 166394 - 131105: 0x975A, + 166395 - 131105: 0x9349, + 166396 - 131105: 0x9747, + 166415 - 131105: 0xA0F4, + 166422 - 131105: 0x9778, + 166437 - 131105: 0x8FCF, + 166441 - 131105: 0xFC60, + 166450 - 131105: 0x8C4E, + 166454 - 131105: 0xFC56, + 166468 - 131105: 0x91DC, + 166469 - 131105: 0x9661, + 166470 - 131105: 0x92EC, + 166471 - 131105: 0x935D, + 166472 - 131105: 0x8EDE, + 166473 - 131105: 0x96FE, + 166474 - 131105: 0xFD4F, + 166475 - 131105: 0x95DE, + 166489 - 131105: 0x98B0, + 166490 - 131105: 0xA040, + 166529 - 131105: 0x97BD, + 166530 - 131105: 0x977D, + 166531 - 131105: 0x97F5, + 166554 - 131105: 0x9BAC, + 166555 - 131105: 0xFADA, + 166556 - 131105: 0x92C2, + 166592 - 131105: 0x97B1, + 166598 - 131105: 0x907B, + 166603 - 131105: 0x93FE, + 166604 - 131105: 0x947B, + 166606 - 131105: 0x9777, + 166622 - 131105: 0xFABE, + 166623 - 131105: 0xFD43, + 166624 - 131105: 0x90C6, + 166625 - 131105: 0x90A4, + 166626 - 131105: 0x90A8, + 166627 - 131105: 0x94A9, + 166629 - 131105: 0x90A9, + 166634 - 131105: 0x8C65, + 166652 - 131105: 0x95E0, + 166668 - 131105: 0x907D, + 166675 - 131105: 0x9265, + 166689 - 131105: 0xFDBA, + 166690 - 131105: 0x93C4, + 166699 - 131105: 0xFEED, + 166700 - 131105: 0x9DAB, + 166701 - 131105: 0xA0E3, + 166703 - 131105: 0x9648, + 166726 - 131105: 0x9D53, + 166732 - 131105: 0x8AA9, + 166734 - 131105: 0x9BC5, + 166736 - 131105: 0x965D, + 166755 - 131105: 0x975F, + 166756 - 131105: 0x965F, + 166757 - 131105: 0x966E, + 166758 - 131105: 0xFB5D, + 166764 - 131105: 0x9DB1, + 166799 - 131105: 0xFEA3, + 166809 - 131105: 0x9DB2, + 166812 - 131105: 0x95AE, + 166813 - 131105: 0xFCA3, + 166841 - 131105: 0x8769, + 166850 - 131105: 0xA0A2, + 166853 - 131105: 0x9655, + 166868 - 131105: 0x9D54, + 166871 - 131105: 0x9341, + 166873 - 131105: 0x95AD, + 166874 - 131105: 0x91D5, + 166887 - 131105: 0x977A, + 166888 - 131105: 0xFDFC, + 166889 - 131105: 0x8E47, + 166890 - 131105: 0x93FD, + 166891 - 131105: 0x90A5, + 166892 - 131105: 0x90AC, + 166901 - 131105: 0x95AC, + 166911 - 131105: 0x90AE, + 166915 - 131105: 0xFEA5, + 166921 - 131105: 0x9D56, + 166940 - 131105: 0x97E3, + 166941 - 131105: 0x95E2, + 166947 - 131105: 0x9466, + 166950 - 131105: 0x9647, + 166955 - 131105: 0x91B8, + 166960 - 131105: 0x9CEC, + 166969 - 131105: 0x90AD, + 166971 - 131105: 0x95E3, + 167114 - 131105: 0x8B4F, + 167117 - 131105: 0x8AE3, + 167122 - 131105: 0x8B4D, + 167220 - 131105: 0x95EA, + 167321 - 131105: 0x8B4E, + 167353 - 131105: 0x8CC1, + 167439 - 131105: 0x8BED, + 167478 - 131105: 0x91D9, + 167481 - 131105: 0xA0A4, + 167525 - 131105: 0x95F5, + 167526 - 131105: 0x95F4, + 167575 - 131105: 0x9FB3, + 167596 - 131105: 0xFEAF, + 167602 - 131105: 0xFE72, + 167603 - 131105: 0x927A, + 167641 - 131105: 0xFEAC, + 167655 - 131105: 0x95F3, + 167877 - 131105: 0x9D58, + 168057 - 131105: 0x8D46, + 168072 - 131105: 0x9372, + 168075 - 131105: 0x91C5, + 168083 - 131105: 0x9642, + 168111 - 131105: 0x90CD, + 168112 - 131105: 0x95FE, + 168113 - 131105: 0x9159, + 168128 - 131105: 0x9C65, + 168164 - 131105: 0x97CC, + 168165 - 131105: 0x90CE, + 168172 - 131105: 0x9D59, + 168173 - 131105: 0xFCF5, + 168205 - 131105: 0xFEFD, + 168208 - 131105: 0x9D5B, + 168252 - 131105: 0x9D5C, + 168269 - 131105: 0x937E, + 168283 - 131105: 0x98AC, + 168286 - 131105: 0x9D5E, + 168304 - 131105: 0xFDD0, + 168348 - 131105: 0xFD60, + 168360 - 131105: 0x9CCF, + 168405 - 131105: 0x90DD, + 168427 - 131105: 0x90E0, + 168989 - 131105: 0x90F3, + 168992 - 131105: 0x98B1, + 169011 - 131105: 0x90F0, + 169023 - 131105: 0x93BD, + 169032 - 131105: 0x95B7, + 169168 - 131105: 0x9F46, + 169177 - 131105: 0x8E4B, + 169178 - 131105: 0x9658, + 169189 - 131105: 0x8A4C, + 169191 - 131105: 0x9D63, + 169374 - 131105: 0x9ECF, + 169392 - 131105: 0x9D65, + 169400 - 131105: 0x9D66, + 169431 - 131105: 0x965A, + 169449 - 131105: 0x9D64, + 169460 - 131105: 0x8A6C, + 169760 - 131105: 0x8AD9, + 169778 - 131105: 0x9D67, + 169940 - 131105: 0x8A70, + 170000 - 131105: 0x8BF3, + 170071 - 131105: 0x9150, + 170148 - 131105: 0x9CC1, + 170193 - 131105: 0x9D68, + 170218 - 131105: 0x93A7, + 170225 - 131105: 0x9674, + 170234 - 131105: 0x8CFD, + 170243 - 131105: 0xA0EF, + 170245 - 131105: 0x9151, + 170287 - 131105: 0x96C1, + 170309 - 131105: 0x8777, + 170311 - 131105: 0x8C64, + 170312 - 131105: 0x9676, + 170313 - 131105: 0x9D69, + 170333 - 131105: 0xFCA4, + 170346 - 131105: 0x9D6A, + 170397 - 131105: 0x924E, + 170435 - 131105: 0x9D6B, + 170441 - 131105: 0x9BC1, + 170536 - 131105: 0x9D6C, + 170573 - 131105: 0x8A65, + 170757 - 131105: 0x915D, + 170766 - 131105: 0x9D6D, + 170965 - 131105: 0x915A, + 171123 - 131105: 0x8C42, + 171181 - 131105: 0x9CC0, + 171326 - 131105: 0x916A, + 171354 - 131105: 0x9D6E, + 171388 - 131105: 0x9EA6, + 171416 - 131105: 0x9DCD, + 171419 - 131105: 0x9D6F, + 171510 - 131105: 0x89BB, + 171526 - 131105: 0x9EF9, + 171565 - 131105: 0x96B4, + 171624 - 131105: 0x9172, + 171692 - 131105: 0x9EC8, + 171696 - 131105: 0x8771, + 171715 - 131105: 0x8B55, + 171768 - 131105: 0x9D71, + 171811 - 131105: 0x9D72, + 171824 - 131105: 0x9ECC, + 171959 - 131105: 0x9174, + 171998 - 131105: 0x9ED0, + 172052 - 131105: 0x905C, + 172167 - 131105: 0x8ED2, + 172217 - 131105: 0x91A8, + 172257 - 131105: 0x9177, + 172269 - 131105: 0x96BF, + 172275 - 131105: 0x96C0, + 172280 - 131105: 0x8FB1, + 172286 - 131105: 0x96B7, + 172295 - 131105: 0x8C55, + 172323 - 131105: 0x9178, + 172339 - 131105: 0x89BE, + 172340 - 131105: 0x917C, + 172368 - 131105: 0xFB77, + 172434 - 131105: 0x9175, + 172435 - 131105: 0x91A3, + 172459 - 131105: 0x9176, + 172468 - 131105: 0x96BE, + 172469 - 131105: 0x8D49, + 172511 - 131105: 0x9179, + 172533 - 131105: 0x96B6, + 172576 - 131105: 0x91A4, + 172595 - 131105: 0x91A6, + 172691 - 131105: 0x9D75, + 172703 - 131105: 0x9052, + 172722 - 131105: 0xA045, + 172724 - 131105: 0x91A9, + 172726 - 131105: 0x98AA, + 172730 - 131105: 0x8C5F, + 172733 - 131105: 0x8BAA, + 172767 - 131105: 0x9CDD, + 172799 - 131105: 0x9D77, + 172881 - 131105: 0x8756, + 172969 - 131105: 0x8940, + 173108 - 131105: 0x9EEC, + 173147 - 131105: 0x93AA, + 173510 - 131105: 0x9478, + 173515 - 131105: 0x9D7A, + 173569 - 131105: 0x8AC9, + 173618 - 131105: 0x8B4B, + 173642 - 131105: 0x9FEC, + 173659 - 131105: 0x8AE2, + 173737 - 131105: 0x9E75, +} + +const encode1Low, encode1High = 11904, 40908 + +var encode1 = [...]uint16{ + 11904 - 11904: 0xC8D6, + 11908 - 11904: 0xC8D7, + 11910 - 11904: 0xC8D8, + 11911 - 11904: 0xC8D9, + 11912 - 11904: 0xC8DA, + 11914 - 11904: 0xC8DB, + 11916 - 11904: 0xC8DC, + 11917 - 11904: 0xC8DD, + 11925 - 11904: 0xC8DE, + 11932 - 11904: 0xC8DF, + 11933 - 11904: 0xC8E0, + 11941 - 11904: 0xC8E1, + 11943 - 11904: 0xC8E2, + 11946 - 11904: 0xC8E3, + 11948 - 11904: 0xC8E4, + 11950 - 11904: 0xC8E5, + 11958 - 11904: 0xC8E6, + 11964 - 11904: 0xC8E7, + 11966 - 11904: 0xC8E8, + 11974 - 11904: 0xC8E9, + 11978 - 11904: 0xC8EA, + 11980 - 11904: 0xC8EB, + 11981 - 11904: 0xC8EC, + 11983 - 11904: 0xC8ED, + 11990 - 11904: 0xC8EE, + 11991 - 11904: 0xC8EF, + 11998 - 11904: 0xC8F0, + 12003 - 11904: 0xC8F1, + 12083 - 11904: 0xC6CD, + 12288 - 11904: 0xA140, + 12289 - 11904: 0xA142, + 12290 - 11904: 0xA143, + 12291 - 11904: 0xC6DE, + 12293 - 11904: 0xC6E0, + 12294 - 11904: 0xC6E1, + 12295 - 11904: 0xC6E2, + 12296 - 11904: 0xA171, + 12297 - 11904: 0xA172, + 12298 - 11904: 0xA16D, + 12299 - 11904: 0xA16E, + 12300 - 11904: 0xA175, + 12301 - 11904: 0xA176, + 12302 - 11904: 0xA179, + 12303 - 11904: 0xA17A, + 12304 - 11904: 0xA169, + 12305 - 11904: 0xA16A, + 12306 - 11904: 0xA245, + 12308 - 11904: 0xA165, + 12309 - 11904: 0xA166, + 12317 - 11904: 0xA1A9, + 12318 - 11904: 0xA1AA, + 12321 - 11904: 0xA2C3, + 12322 - 11904: 0xA2C4, + 12323 - 11904: 0xA2C5, + 12324 - 11904: 0xA2C6, + 12325 - 11904: 0xA2C7, + 12326 - 11904: 0xA2C8, + 12327 - 11904: 0xA2C9, + 12328 - 11904: 0xA2CA, + 12329 - 11904: 0xA2CB, + 12353 - 11904: 0xC6E7, + 12354 - 11904: 0xC6E8, + 12355 - 11904: 0xC6E9, + 12356 - 11904: 0xC6EA, + 12357 - 11904: 0xC6EB, + 12358 - 11904: 0xC6EC, + 12359 - 11904: 0xC6ED, + 12360 - 11904: 0xC6EE, + 12361 - 11904: 0xC6EF, + 12362 - 11904: 0xC6F0, + 12363 - 11904: 0xC6F1, + 12364 - 11904: 0xC6F2, + 12365 - 11904: 0xC6F3, + 12366 - 11904: 0xC6F4, + 12367 - 11904: 0xC6F5, + 12368 - 11904: 0xC6F6, + 12369 - 11904: 0xC6F7, + 12370 - 11904: 0xC6F8, + 12371 - 11904: 0xC6F9, + 12372 - 11904: 0xC6FA, + 12373 - 11904: 0xC6FB, + 12374 - 11904: 0xC6FC, + 12375 - 11904: 0xC6FD, + 12376 - 11904: 0xC6FE, + 12377 - 11904: 0xC740, + 12378 - 11904: 0xC741, + 12379 - 11904: 0xC742, + 12380 - 11904: 0xC743, + 12381 - 11904: 0xC744, + 12382 - 11904: 0xC745, + 12383 - 11904: 0xC746, + 12384 - 11904: 0xC747, + 12385 - 11904: 0xC748, + 12386 - 11904: 0xC749, + 12387 - 11904: 0xC74A, + 12388 - 11904: 0xC74B, + 12389 - 11904: 0xC74C, + 12390 - 11904: 0xC74D, + 12391 - 11904: 0xC74E, + 12392 - 11904: 0xC74F, + 12393 - 11904: 0xC750, + 12394 - 11904: 0xC751, + 12395 - 11904: 0xC752, + 12396 - 11904: 0xC753, + 12397 - 11904: 0xC754, + 12398 - 11904: 0xC755, + 12399 - 11904: 0xC756, + 12400 - 11904: 0xC757, + 12401 - 11904: 0xC758, + 12402 - 11904: 0xC759, + 12403 - 11904: 0xC75A, + 12404 - 11904: 0xC75B, + 12405 - 11904: 0xC75C, + 12406 - 11904: 0xC75D, + 12407 - 11904: 0xC75E, + 12408 - 11904: 0xC75F, + 12409 - 11904: 0xC760, + 12410 - 11904: 0xC761, + 12411 - 11904: 0xC762, + 12412 - 11904: 0xC763, + 12413 - 11904: 0xC764, + 12414 - 11904: 0xC765, + 12415 - 11904: 0xC766, + 12416 - 11904: 0xC767, + 12417 - 11904: 0xC768, + 12418 - 11904: 0xC769, + 12419 - 11904: 0xC76A, + 12420 - 11904: 0xC76B, + 12421 - 11904: 0xC76C, + 12422 - 11904: 0xC76D, + 12423 - 11904: 0xC76E, + 12424 - 11904: 0xC76F, + 12425 - 11904: 0xC770, + 12426 - 11904: 0xC771, + 12427 - 11904: 0xC772, + 12428 - 11904: 0xC773, + 12429 - 11904: 0xC774, + 12430 - 11904: 0xC775, + 12431 - 11904: 0xC776, + 12432 - 11904: 0xC777, + 12433 - 11904: 0xC778, + 12434 - 11904: 0xC779, + 12435 - 11904: 0xC77A, + 12443 - 11904: 0xC8D4, + 12444 - 11904: 0xC8D5, + 12445 - 11904: 0xC6DC, + 12446 - 11904: 0xC6DD, + 12449 - 11904: 0xC77B, + 12450 - 11904: 0xC77C, + 12451 - 11904: 0xC77D, + 12452 - 11904: 0xC77E, + 12453 - 11904: 0xC7A1, + 12454 - 11904: 0xC7A2, + 12455 - 11904: 0xC7A3, + 12456 - 11904: 0xC7A4, + 12457 - 11904: 0xC7A5, + 12458 - 11904: 0xC7A6, + 12459 - 11904: 0xC7A7, + 12460 - 11904: 0xC7A8, + 12461 - 11904: 0xC7A9, + 12462 - 11904: 0xC7AA, + 12463 - 11904: 0xC7AB, + 12464 - 11904: 0xC7AC, + 12465 - 11904: 0xC7AD, + 12466 - 11904: 0xC7AE, + 12467 - 11904: 0xC7AF, + 12468 - 11904: 0xC7B0, + 12469 - 11904: 0xC7B1, + 12470 - 11904: 0xC7B2, + 12471 - 11904: 0xC7B3, + 12472 - 11904: 0xC7B4, + 12473 - 11904: 0xC7B5, + 12474 - 11904: 0xC7B6, + 12475 - 11904: 0xC7B7, + 12476 - 11904: 0xC7B8, + 12477 - 11904: 0xC7B9, + 12478 - 11904: 0xC7BA, + 12479 - 11904: 0xC7BB, + 12480 - 11904: 0xC7BC, + 12481 - 11904: 0xC7BD, + 12482 - 11904: 0xC7BE, + 12483 - 11904: 0xC7BF, + 12484 - 11904: 0xC7C0, + 12485 - 11904: 0xC7C1, + 12486 - 11904: 0xC7C2, + 12487 - 11904: 0xC7C3, + 12488 - 11904: 0xC7C4, + 12489 - 11904: 0xC7C5, + 12490 - 11904: 0xC7C6, + 12491 - 11904: 0xC7C7, + 12492 - 11904: 0xC7C8, + 12493 - 11904: 0xC7C9, + 12494 - 11904: 0xC7CA, + 12495 - 11904: 0xC7CB, + 12496 - 11904: 0xC7CC, + 12497 - 11904: 0xC7CD, + 12498 - 11904: 0xC7CE, + 12499 - 11904: 0xC7CF, + 12500 - 11904: 0xC7D0, + 12501 - 11904: 0xC7D1, + 12502 - 11904: 0xC7D2, + 12503 - 11904: 0xC7D3, + 12504 - 11904: 0xC7D4, + 12505 - 11904: 0xC7D5, + 12506 - 11904: 0xC7D6, + 12507 - 11904: 0xC7D7, + 12508 - 11904: 0xC7D8, + 12509 - 11904: 0xC7D9, + 12510 - 11904: 0xC7DA, + 12511 - 11904: 0xC7DB, + 12512 - 11904: 0xC7DC, + 12513 - 11904: 0xC7DD, + 12514 - 11904: 0xC7DE, + 12515 - 11904: 0xC7DF, + 12516 - 11904: 0xC7E0, + 12517 - 11904: 0xC7E1, + 12518 - 11904: 0xC7E2, + 12519 - 11904: 0xC7E3, + 12520 - 11904: 0xC7E4, + 12521 - 11904: 0xC7E5, + 12522 - 11904: 0xC7E6, + 12523 - 11904: 0xC7E7, + 12524 - 11904: 0xC7E8, + 12525 - 11904: 0xC7E9, + 12526 - 11904: 0xC7EA, + 12527 - 11904: 0xC7EB, + 12528 - 11904: 0xC7EC, + 12529 - 11904: 0xC7ED, + 12530 - 11904: 0xC7EE, + 12531 - 11904: 0xC7EF, + 12532 - 11904: 0xC7F0, + 12533 - 11904: 0xC7F1, + 12534 - 11904: 0xC7F2, + 12540 - 11904: 0xC6E3, + 12541 - 11904: 0xC6DA, + 12542 - 11904: 0xC6DB, + 12549 - 11904: 0xA374, + 12550 - 11904: 0xA375, + 12551 - 11904: 0xA376, + 12552 - 11904: 0xA377, + 12553 - 11904: 0xA378, + 12554 - 11904: 0xA379, + 12555 - 11904: 0xA37A, + 12556 - 11904: 0xA37B, + 12557 - 11904: 0xA37C, + 12558 - 11904: 0xA37D, + 12559 - 11904: 0xA37E, + 12560 - 11904: 0xA3A1, + 12561 - 11904: 0xA3A2, + 12562 - 11904: 0xA3A3, + 12563 - 11904: 0xA3A4, + 12564 - 11904: 0xA3A5, + 12565 - 11904: 0xA3A6, + 12566 - 11904: 0xA3A7, + 12567 - 11904: 0xA3A8, + 12568 - 11904: 0xA3A9, + 12569 - 11904: 0xA3AA, + 12570 - 11904: 0xA3AB, + 12571 - 11904: 0xA3AC, + 12572 - 11904: 0xA3AD, + 12573 - 11904: 0xA3AE, + 12574 - 11904: 0xA3AF, + 12575 - 11904: 0xA3B0, + 12576 - 11904: 0xA3B1, + 12577 - 11904: 0xA3B2, + 12578 - 11904: 0xA3B3, + 12579 - 11904: 0xA3B4, + 12580 - 11904: 0xA3B5, + 12581 - 11904: 0xA3B6, + 12582 - 11904: 0xA3B7, + 12583 - 11904: 0xA3B8, + 12584 - 11904: 0xA3B9, + 12585 - 11904: 0xA3BA, + 12736 - 11904: 0x8840, + 12737 - 11904: 0x8841, + 12738 - 11904: 0x8842, + 12739 - 11904: 0x8843, + 12740 - 11904: 0x8844, + 12741 - 11904: 0x8846, + 12742 - 11904: 0x8849, + 12743 - 11904: 0x884A, + 12744 - 11904: 0x884D, + 12745 - 11904: 0x884F, + 12746 - 11904: 0x8850, + 12747 - 11904: 0x8851, + 12748 - 11904: 0x8852, + 12749 - 11904: 0x8854, + 12750 - 11904: 0x8855, + 12751 - 11904: 0xC879, + 12849 - 11904: 0xC8D1, + 12963 - 11904: 0xA1C0, + 13198 - 11904: 0xA255, + 13199 - 11904: 0xA256, + 13212 - 11904: 0xA250, + 13213 - 11904: 0xA251, + 13214 - 11904: 0xA252, + 13217 - 11904: 0xA254, + 13252 - 11904: 0xA257, + 13262 - 11904: 0xA253, + 13265 - 11904: 0xA1EB, + 13266 - 11904: 0xA1EA, + 13269 - 11904: 0xA24F, + 13365 - 11904: 0x9277, + 13376 - 11904: 0x96DF, + 13386 - 11904: 0x8CF4, + 13388 - 11904: 0x89D5, + 13412 - 11904: 0x93CD, + 13427 - 11904: 0x9BDF, + 13434 - 11904: 0xFA68, + 13437 - 11904: 0x89DA, + 13438 - 11904: 0x8F59, + 13459 - 11904: 0x89DB, + 13462 - 11904: 0x8F5D, + 13477 - 11904: 0x89DC, + 13487 - 11904: 0x96F7, + 13500 - 11904: 0x8ADA, + 13505 - 11904: 0x8BDC, + 13512 - 11904: 0x97DB, + 13535 - 11904: 0x9E53, + 13540 - 11904: 0x9DAA, + 13542 - 11904: 0x87BE, + 13563 - 11904: 0x9BEA, + 13574 - 11904: 0x8A6E, + 13630 - 11904: 0x8BC8, + 13649 - 11904: 0x89E8, + 13651 - 11904: 0x89EA, + 13657 - 11904: 0x8C4B, + 13665 - 11904: 0xFB70, + 13677 - 11904: 0x89ED, + 13680 - 11904: 0x94DD, + 13682 - 11904: 0x89EE, + 13687 - 11904: 0x9EB4, + 13688 - 11904: 0x8AD3, + 13700 - 11904: 0x92DB, + 13719 - 11904: 0x94DB, + 13720 - 11904: 0x89F9, + 13729 - 11904: 0xFB7A, + 13733 - 11904: 0x89FB, + 13741 - 11904: 0x9EFC, + 13759 - 11904: 0x89FC, + 13761 - 11904: 0x89BF, + 13765 - 11904: 0x89FE, + 13767 - 11904: 0x89E6, + 13770 - 11904: 0x9D46, + 13774 - 11904: 0x9DEE, + 13778 - 11904: 0xA07E, + 13782 - 11904: 0xA068, + 13787 - 11904: 0x98E9, + 13789 - 11904: 0x8B68, + 13809 - 11904: 0x8DFD, + 13810 - 11904: 0x8BBE, + 13811 - 11904: 0x9FD9, + 13819 - 11904: 0x8AEB, + 13822 - 11904: 0x9FD7, + 13833 - 11904: 0x8B6A, + 13848 - 11904: 0x9C5C, + 13850 - 11904: 0x8BB1, + 13859 - 11904: 0xFB5E, + 13861 - 11904: 0x8770, + 13869 - 11904: 0x9DF3, + 13877 - 11904: 0xA0D0, + 13881 - 11904: 0xFC66, + 13886 - 11904: 0x92E9, + 13895 - 11904: 0x9AEC, + 13896 - 11904: 0x8FAB, + 13897 - 11904: 0xFA48, + 13902 - 11904: 0x8E45, + 13919 - 11904: 0x9C6F, + 13921 - 11904: 0x8D5C, + 13946 - 11904: 0x9EDE, + 13953 - 11904: 0x89EF, + 13978 - 11904: 0x96E9, + 13989 - 11904: 0x9EBB, + 13994 - 11904: 0x94DE, + 13996 - 11904: 0x9EB8, + 14000 - 11904: 0x97BA, + 14001 - 11904: 0xFB65, + 14005 - 11904: 0x95D6, + 14009 - 11904: 0x9CBB, + 14012 - 11904: 0x97DA, + 14017 - 11904: 0x8F45, + 14019 - 11904: 0xFB7D, + 14020 - 11904: 0x9158, + 14021 - 11904: 0xFE64, + 14023 - 11904: 0x9856, + 14024 - 11904: 0x9B4D, + 14035 - 11904: 0x935B, + 14036 - 11904: 0x95C7, + 14038 - 11904: 0x97E7, + 14045 - 11904: 0x9359, + 14049 - 11904: 0x91F5, + 14050 - 11904: 0x97B8, + 14053 - 11904: 0xFDA2, + 14054 - 11904: 0xFBB6, + 14069 - 11904: 0x92FA, + 14081 - 11904: 0x9357, + 14083 - 11904: 0x8BA6, + 14088 - 11904: 0xFBB9, + 14090 - 11904: 0x97B0, + 14093 - 11904: 0xFDC4, + 14108 - 11904: 0x9CA1, + 14114 - 11904: 0x91F2, + 14115 - 11904: 0x91F9, + 14117 - 11904: 0x8FF1, + 14124 - 11904: 0x9745, + 14125 - 11904: 0x9853, + 14128 - 11904: 0xFE78, + 14130 - 11904: 0xFBC1, + 14131 - 11904: 0x9251, + 14138 - 11904: 0x9DAD, + 14144 - 11904: 0xFD6C, + 14147 - 11904: 0xFA6B, + 14178 - 11904: 0x9BC2, + 14191 - 11904: 0x9A7B, + 14231 - 11904: 0x8B60, + 14240 - 11904: 0x934B, + 14265 - 11904: 0x9ABD, + 14270 - 11904: 0x91B7, + 14294 - 11904: 0x8D4B, + 14322 - 11904: 0x95B4, + 14328 - 11904: 0xFEC5, + 14331 - 11904: 0x9EF0, + 14351 - 11904: 0x8D64, + 14361 - 11904: 0x9269, + 14368 - 11904: 0x8D67, + 14381 - 11904: 0xFBEA, + 14390 - 11904: 0xFBEF, + 14392 - 11904: 0x8D68, + 14435 - 11904: 0x93EB, + 14453 - 11904: 0x877A, + 14496 - 11904: 0xFC42, + 14531 - 11904: 0x9166, + 14540 - 11904: 0xFACD, + 14545 - 11904: 0x93DD, + 14548 - 11904: 0x8D52, + 14586 - 11904: 0x8BCC, + 14600 - 11904: 0x8D6D, + 14612 - 11904: 0x8D6E, + 14631 - 11904: 0x96A8, + 14642 - 11904: 0xFCA6, + 14655 - 11904: 0x8D6F, + 14669 - 11904: 0x8D70, + 14691 - 11904: 0xFC64, + 14712 - 11904: 0x8CF3, + 14720 - 11904: 0x9060, + 14729 - 11904: 0x8D74, + 14730 - 11904: 0x97C3, + 14738 - 11904: 0x8AD0, + 14745 - 11904: 0x9274, + 14747 - 11904: 0x9BBE, + 14753 - 11904: 0x9CC8, + 14756 - 11904: 0x9CBA, + 14776 - 11904: 0x8D78, + 14812 - 11904: 0x9EB9, + 14818 - 11904: 0x955A, + 14821 - 11904: 0x91B4, + 14828 - 11904: 0x8A48, + 14840 - 11904: 0x8D7D, + 14843 - 11904: 0x8A7D, + 14846 - 11904: 0x8AC2, + 14849 - 11904: 0xFD4A, + 14851 - 11904: 0x8DA1, + 14854 - 11904: 0x8AD1, + 14871 - 11904: 0xFCB4, + 14872 - 11904: 0x8B47, + 14889 - 11904: 0x93A4, + 14890 - 11904: 0x9EDA, + 14900 - 11904: 0x8A51, + 14923 - 11904: 0x8DA6, + 14930 - 11904: 0x9EC5, + 14935 - 11904: 0xFCC4, + 14940 - 11904: 0xA078, + 14942 - 11904: 0x94B5, + 14950 - 11904: 0xFCC2, + 14951 - 11904: 0x8A6B, + 14999 - 11904: 0x8DAB, + 15019 - 11904: 0xFAE8, + 15037 - 11904: 0x8DAD, + 15070 - 11904: 0xFC49, + 15072 - 11904: 0x93C1, + 15088 - 11904: 0x906F, + 15090 - 11904: 0x8DB0, + 15093 - 11904: 0x87A2, + 15099 - 11904: 0x947E, + 15118 - 11904: 0x90FA, + 15129 - 11904: 0x9479, + 15138 - 11904: 0x8DB2, + 15147 - 11904: 0xFCEE, + 15161 - 11904: 0x997B, + 15170 - 11904: 0x8DB4, + 15192 - 11904: 0x8DB7, + 15200 - 11904: 0x91B3, + 15217 - 11904: 0x8DBB, + 15218 - 11904: 0x8DBA, + 15227 - 11904: 0x8DBC, + 15228 - 11904: 0x9044, + 15232 - 11904: 0xFD4C, + 15253 - 11904: 0x874B, + 15254 - 11904: 0x93E4, + 15257 - 11904: 0x93E0, + 15265 - 11904: 0xFD53, + 15292 - 11904: 0x8DC3, + 15294 - 11904: 0x9BB8, + 15298 - 11904: 0xFBF0, + 15300 - 11904: 0x93E9, + 15319 - 11904: 0x93F6, + 15325 - 11904: 0x8DC5, + 15340 - 11904: 0x8DCA, + 15346 - 11904: 0x8DCC, + 15347 - 11904: 0xFD5D, + 15348 - 11904: 0x93B5, + 15373 - 11904: 0xFD61, + 15377 - 11904: 0x9CF8, + 15381 - 11904: 0x9252, + 15384 - 11904: 0xA0E8, + 15444 - 11904: 0x9CA5, + 15499 - 11904: 0x8C56, + 15563 - 11904: 0x8DD6, + 15565 - 11904: 0x97C0, + 15569 - 11904: 0xA0DE, + 15574 - 11904: 0x97D2, + 15580 - 11904: 0xFAA5, + 15595 - 11904: 0xFDA3, + 15599 - 11904: 0x8DDB, + 15634 - 11904: 0x8CEA, + 15635 - 11904: 0x8EAF, + 15645 - 11904: 0x91B5, + 15666 - 11904: 0xFD49, + 15675 - 11904: 0xFDD1, + 15686 - 11904: 0x8DEB, + 15692 - 11904: 0x97C6, + 15694 - 11904: 0xFDCE, + 15697 - 11904: 0x90FC, + 15711 - 11904: 0xFC59, + 15714 - 11904: 0x96D6, + 15721 - 11904: 0x97C5, + 15722 - 11904: 0x8DEF, + 15727 - 11904: 0x97D7, + 15733 - 11904: 0x8DF0, + 15741 - 11904: 0x96A6, + 15749 - 11904: 0xFBBF, + 15752 - 11904: 0x8CDF, + 15754 - 11904: 0x8DF3, + 15759 - 11904: 0x9449, + 15761 - 11904: 0x8DF5, + 15781 - 11904: 0x9872, + 15789 - 11904: 0x8E6B, + 15796 - 11904: 0xFAFD, + 15807 - 11904: 0x8F50, + 15814 - 11904: 0x9DCC, + 15815 - 11904: 0xFC65, + 15817 - 11904: 0x8C44, + 15820 - 11904: 0x996E, + 15821 - 11904: 0x94A1, + 15827 - 11904: 0x8F63, + 15835 - 11904: 0xA0DA, + 15847 - 11904: 0x9253, + 15848 - 11904: 0xFDE9, + 15851 - 11904: 0x9DB5, + 15859 - 11904: 0x9879, + 15860 - 11904: 0x876A, + 15863 - 11904: 0x9D5D, + 15868 - 11904: 0x8D63, + 15869 - 11904: 0x9669, + 15878 - 11904: 0x9F70, + 15936 - 11904: 0xFC6A, + 15939 - 11904: 0x8AC7, + 15944 - 11904: 0x89D7, + 15957 - 11904: 0xFE4D, + 15988 - 11904: 0x9EDD, + 16040 - 11904: 0xFEFB, + 16041 - 11904: 0x98BC, + 16042 - 11904: 0xFACC, + 16045 - 11904: 0x95B0, + 16049 - 11904: 0x9464, + 16056 - 11904: 0x936F, + 16063 - 11904: 0x94B9, + 16066 - 11904: 0x95EC, + 16071 - 11904: 0x91EE, + 16074 - 11904: 0x98C3, + 16076 - 11904: 0x95F6, + 16080 - 11904: 0x8FFD, + 16081 - 11904: 0x98C5, + 16086 - 11904: 0x9766, + 16087 - 11904: 0xFE6E, + 16090 - 11904: 0x97DD, + 16091 - 11904: 0x8CAA, + 16094 - 11904: 0x92D2, + 16097 - 11904: 0x9761, + 16098 - 11904: 0x98CB, + 16103 - 11904: 0x95F0, + 16105 - 11904: 0x975D, + 16107 - 11904: 0x91E3, + 16108 - 11904: 0x877E, + 16112 - 11904: 0x98CC, + 16115 - 11904: 0x9469, + 16116 - 11904: 0x98CD, + 16122 - 11904: 0x98CE, + 16124 - 11904: 0x95FC, + 16127 - 11904: 0x94A3, + 16128 - 11904: 0x9662, + 16132 - 11904: 0xFEB6, + 16134 - 11904: 0x9463, + 16135 - 11904: 0x8D47, + 16142 - 11904: 0x98D0, + 16211 - 11904: 0x98D1, + 16216 - 11904: 0x9475, + 16217 - 11904: 0xFAE0, + 16227 - 11904: 0x9472, + 16252 - 11904: 0x98D6, + 16275 - 11904: 0x8AF0, + 16320 - 11904: 0x98D9, + 16328 - 11904: 0x8D5A, + 16343 - 11904: 0x98DB, + 16348 - 11904: 0x98DD, + 16357 - 11904: 0x98A8, + 16365 - 11904: 0x8A6D, + 16377 - 11904: 0x8AFB, + 16378 - 11904: 0x8AAE, + 16388 - 11904: 0xFBC9, + 16393 - 11904: 0x8C5D, + 16413 - 11904: 0x98E4, + 16441 - 11904: 0x98E6, + 16453 - 11904: 0x98E8, + 16467 - 11904: 0x8A4D, + 16471 - 11904: 0x9257, + 16482 - 11904: 0x95DF, + 16485 - 11904: 0xA0AC, + 16490 - 11904: 0x98EB, + 16495 - 11904: 0x98EC, + 16497 - 11904: 0x8CC3, + 16552 - 11904: 0x98F4, + 16564 - 11904: 0x87D9, + 16571 - 11904: 0x8AB8, + 16575 - 11904: 0x9EE7, + 16584 - 11904: 0x94BC, + 16600 - 11904: 0xFCD1, + 16607 - 11904: 0x9CC6, + 16632 - 11904: 0x8D4A, + 16634 - 11904: 0x9E7E, + 16642 - 11904: 0x8D44, + 16643 - 11904: 0x98FE, + 16644 - 11904: 0xFDE8, + 16649 - 11904: 0x9940, + 16654 - 11904: 0x94C9, + 16689 - 11904: 0x87C6, + 16690 - 11904: 0x94D3, + 16743 - 11904: 0x9946, + 16748 - 11904: 0x90C0, + 16750 - 11904: 0x94D1, + 16764 - 11904: 0x8D4E, + 16767 - 11904: 0x9573, + 16769 - 11904: 0x87CE, + 16784 - 11904: 0x93C2, + 16818 - 11904: 0x9948, + 16836 - 11904: 0x994B, + 16842 - 11904: 0x8E55, + 16847 - 11904: 0x994E, + 16859 - 11904: 0x8EFE, + 16877 - 11904: 0x8D5F, + 16879 - 11904: 0x8E59, + 16889 - 11904: 0x94EC, + 16913 - 11904: 0x94EF, + 16931 - 11904: 0x8C60, + 16960 - 11904: 0x8F74, + 16992 - 11904: 0x9955, + 17002 - 11904: 0x9544, + 17014 - 11904: 0x8CCB, + 17018 - 11904: 0x9956, + 17036 - 11904: 0x9959, + 17044 - 11904: 0x995B, + 17058 - 11904: 0x8CC4, + 17077 - 11904: 0xFA45, + 17081 - 11904: 0x90B7, + 17084 - 11904: 0x9743, + 17140 - 11904: 0x95CD, + 17147 - 11904: 0x97C9, + 17148 - 11904: 0xFD50, + 17162 - 11904: 0x87AA, + 17195 - 11904: 0x8EB9, + 17262 - 11904: 0x95C6, + 17303 - 11904: 0x9967, + 17306 - 11904: 0x8CE3, + 17338 - 11904: 0x8AB9, + 17345 - 11904: 0x8DFC, + 17369 - 11904: 0x8A76, + 17375 - 11904: 0x9D51, + 17389 - 11904: 0x9973, + 17392 - 11904: 0x8740, + 17394 - 11904: 0x9D4F, + 17409 - 11904: 0x997A, + 17410 - 11904: 0x9564, + 17427 - 11904: 0x99A1, + 17445 - 11904: 0x99A5, + 17453 - 11904: 0x99A7, + 17530 - 11904: 0x8EED, + 17551 - 11904: 0x99AD, + 17553 - 11904: 0xC87E, + 17567 - 11904: 0x946E, + 17568 - 11904: 0x8F70, + 17570 - 11904: 0xFAD0, + 17584 - 11904: 0x99B3, + 17591 - 11904: 0xA053, + 17597 - 11904: 0x8D5E, + 17600 - 11904: 0x965C, + 17603 - 11904: 0x8CE0, + 17605 - 11904: 0xFD7A, + 17614 - 11904: 0x97FE, + 17629 - 11904: 0x92BD, + 17630 - 11904: 0x8D5D, + 17631 - 11904: 0x97FD, + 17633 - 11904: 0x87DB, + 17636 - 11904: 0x8F64, + 17641 - 11904: 0xFCF7, + 17642 - 11904: 0x9562, + 17643 - 11904: 0x97CD, + 17644 - 11904: 0x9E64, + 17652 - 11904: 0x924C, + 17667 - 11904: 0x8EC9, + 17668 - 11904: 0x99BC, + 17673 - 11904: 0x9DA5, + 17675 - 11904: 0x8F54, + 17686 - 11904: 0x8F7C, + 17691 - 11904: 0x8D55, + 17693 - 11904: 0x8EA2, + 17703 - 11904: 0x8F7A, + 17710 - 11904: 0x97AE, + 17715 - 11904: 0x96C8, + 17718 - 11904: 0x8CE4, + 17723 - 11904: 0x99C3, + 17725 - 11904: 0x90D6, + 17727 - 11904: 0x9CBE, + 17731 - 11904: 0x8F76, + 17745 - 11904: 0x9470, + 17746 - 11904: 0xFB4B, + 17749 - 11904: 0xFDCA, + 17752 - 11904: 0x8CEF, + 17756 - 11904: 0x8EC7, + 17761 - 11904: 0x8D54, + 17762 - 11904: 0xA0F9, + 17770 - 11904: 0x8FA9, + 17773 - 11904: 0x8D51, + 17783 - 11904: 0x99C7, + 17784 - 11904: 0x8744, + 17797 - 11904: 0x90D7, + 17830 - 11904: 0x8743, + 17843 - 11904: 0x8747, + 17882 - 11904: 0x8758, + 17897 - 11904: 0x9EDF, + 17898 - 11904: 0x8D59, + 17923 - 11904: 0x8742, + 17926 - 11904: 0x99CE, + 17935 - 11904: 0x8FBA, + 17941 - 11904: 0x8FEB, + 17943 - 11904: 0x99CF, + 18011 - 11904: 0x8FC2, + 18042 - 11904: 0x92C9, + 18048 - 11904: 0x97DC, + 18081 - 11904: 0x875D, + 18094 - 11904: 0x87CC, + 18107 - 11904: 0x8D45, + 18127 - 11904: 0x95B3, + 18128 - 11904: 0x9C79, + 18165 - 11904: 0x95B2, + 18167 - 11904: 0x8D4C, + 18195 - 11904: 0x8FDB, + 18200 - 11904: 0x9BE3, + 18230 - 11904: 0x874C, + 18244 - 11904: 0x874D, + 18254 - 11904: 0x9E7A, + 18255 - 11904: 0x8757, + 18300 - 11904: 0x9BEE, + 18328 - 11904: 0x99DE, + 18342 - 11904: 0xFAFA, + 18389 - 11904: 0x8A52, + 18413 - 11904: 0x99E1, + 18420 - 11904: 0x8A67, + 18432 - 11904: 0x8BB5, + 18443 - 11904: 0x8AAC, + 18487 - 11904: 0x99E9, + 18525 - 11904: 0xFBCA, + 18545 - 11904: 0x97DE, + 18587 - 11904: 0x95D1, + 18605 - 11904: 0x99F5, + 18606 - 11904: 0xFC4A, + 18640 - 11904: 0x9BA9, + 18653 - 11904: 0xFBDC, + 18669 - 11904: 0xFE56, + 18675 - 11904: 0x9EA4, + 18682 - 11904: 0x9D49, + 18694 - 11904: 0x95DB, + 18705 - 11904: 0x89C5, + 18718 - 11904: 0x99F8, + 18725 - 11904: 0x9664, + 18730 - 11904: 0x9055, + 18733 - 11904: 0x96D4, + 18735 - 11904: 0x87C4, + 18736 - 11904: 0x87AE, + 18741 - 11904: 0x977C, + 18748 - 11904: 0x964D, + 18750 - 11904: 0x97E1, + 18757 - 11904: 0x9A48, + 18769 - 11904: 0x9A49, + 18771 - 11904: 0xFE7D, + 18789 - 11904: 0x90AA, + 18794 - 11904: 0x9A50, + 18802 - 11904: 0x9347, + 18825 - 11904: 0x8ED8, + 18849 - 11904: 0x90C9, + 18855 - 11904: 0x9A55, + 18911 - 11904: 0x90BC, + 18917 - 11904: 0x9A58, + 18919 - 11904: 0x8BB8, + 18959 - 11904: 0x90D5, + 18973 - 11904: 0x9641, + 18980 - 11904: 0x9A5A, + 18997 - 11904: 0x9A5C, + 19094 - 11904: 0x97C2, + 19108 - 11904: 0x875C, + 19124 - 11904: 0x8ABB, + 19128 - 11904: 0x9BAA, + 19153 - 11904: 0x90F5, + 19172 - 11904: 0x9A60, + 19199 - 11904: 0x9145, + 19216 - 11904: 0x8C58, + 19225 - 11904: 0x9A63, + 19232 - 11904: 0x8C49, + 19244 - 11904: 0x8BB6, + 19255 - 11904: 0xFCCF, + 19311 - 11904: 0x966B, + 19312 - 11904: 0x9A6E, + 19314 - 11904: 0x914F, + 19323 - 11904: 0x9746, + 19326 - 11904: 0xA0E6, + 19342 - 11904: 0x92D7, + 19344 - 11904: 0x9675, + 19347 - 11904: 0x93D4, + 19350 - 11904: 0x91BB, + 19351 - 11904: 0x9679, + 19357 - 11904: 0x9A70, + 19389 - 11904: 0x9678, + 19390 - 11904: 0x91CD, + 19392 - 11904: 0x9C4A, + 19460 - 11904: 0xA06F, + 19463 - 11904: 0xA06A, + 19470 - 11904: 0x915F, + 19506 - 11904: 0x8741, + 19515 - 11904: 0x9FA5, + 19518 - 11904: 0x89BA, + 19520 - 11904: 0x874F, + 19527 - 11904: 0x874E, + 19543 - 11904: 0x8755, + 19547 - 11904: 0x9ECD, + 19565 - 11904: 0x9A79, + 19575 - 11904: 0x8CF2, + 19579 - 11904: 0x8D57, + 19581 - 11904: 0x9DCE, + 19585 - 11904: 0x8CD2, + 19589 - 11904: 0x8759, + 19620 - 11904: 0x9D73, + 19630 - 11904: 0x96B9, + 19632 - 11904: 0x96BC, + 19639 - 11904: 0x9CD1, + 19661 - 11904: 0x89B7, + 19681 - 11904: 0x9EEE, + 19682 - 11904: 0x8749, + 19693 - 11904: 0xFB43, + 19719 - 11904: 0x875B, + 19721 - 11904: 0x9EC9, + 19728 - 11904: 0xFBD3, + 19764 - 11904: 0x91AE, + 19830 - 11904: 0x8D58, + 19831 - 11904: 0x8746, + 19849 - 11904: 0x8D56, + 19857 - 11904: 0x9D78, + 19868 - 11904: 0x9D7B, + 19968 - 11904: 0xA440, + 19969 - 11904: 0xA442, + 19971 - 11904: 0xA443, + 19972 - 11904: 0x9EB3, + 19975 - 11904: 0xC945, + 19976 - 11904: 0xA456, + 19977 - 11904: 0xA454, + 19978 - 11904: 0xA457, + 19979 - 11904: 0xA455, + 19980 - 11904: 0xC946, + 19981 - 11904: 0xA4A3, + 19982 - 11904: 0xC94F, + 19983 - 11904: 0xC94D, + 19984 - 11904: 0xA4A2, + 19985 - 11904: 0xA4A1, + 19988 - 11904: 0xA542, + 19989 - 11904: 0xA541, + 19990 - 11904: 0xA540, + 19992 - 11904: 0xA543, + 19993 - 11904: 0xA4FE, + 19994 - 11904: 0x9EB2, + 19996 - 11904: 0x9DD6, + 19998 - 11904: 0xA5E0, + 19999 - 11904: 0xA5E1, + 20001 - 11904: 0x994F, + 20004 - 11904: 0x89CE, + 20006 - 11904: 0xA8C3, + 20008 - 11904: 0x8BC0, + 20010 - 11904: 0x9FC4, + 20011 - 11904: 0xA458, + 20012 - 11904: 0x8BD4, + 20013 - 11904: 0xA4A4, + 20014 - 11904: 0xC950, + 20015 - 11904: 0x8C72, + 20016 - 11904: 0xA4A5, + 20017 - 11904: 0xC963, + 20018 - 11904: 0xA6EA, + 20019 - 11904: 0xCBB1, + 20022 - 11904: 0xC6BF, + 20023 - 11904: 0x8BF9, + 20024 - 11904: 0xA459, + 20025 - 11904: 0xA4A6, + 20027 - 11904: 0xA544, + 20028 - 11904: 0xC964, + 20029 - 11904: 0x8946, + 20031 - 11904: 0xC6C0, + 20034 - 11904: 0xC940, + 20035 - 11904: 0xA444, + 20037 - 11904: 0xA45B, + 20039 - 11904: 0xC947, + 20040 - 11904: 0xA45C, + 20041 - 11904: 0xFAE5, + 20043 - 11904: 0xA4A7, + 20045 - 11904: 0xA545, + 20046 - 11904: 0xA547, + 20047 - 11904: 0xA546, + 20050 - 11904: 0xA5E2, + 20051 - 11904: 0xA5E3, + 20054 - 11904: 0xA8C4, + 20056 - 11904: 0xADBC, + 20057 - 11904: 0xA441, + 20058 - 11904: 0xC87B, + 20059 - 11904: 0x8BC6, + 20060 - 11904: 0xC941, + 20061 - 11904: 0xA445, + 20062 - 11904: 0xA45E, + 20063 - 11904: 0xA45D, + 20073 - 11904: 0xA5E4, + 20074 - 11904: 0x9C57, + 20083 - 11904: 0xA8C5, + 20088 - 11904: 0x9AFB, + 20094 - 11904: 0xB0AE, + 20095 - 11904: 0xD44B, + 20096 - 11904: 0x89D0, + 20097 - 11904: 0x89CF, + 20098 - 11904: 0xB6C3, + 20099 - 11904: 0xDCB1, + 20100 - 11904: 0xDCB2, + 20101 - 11904: 0xC6C1, + 20102 - 11904: 0xA446, + 20103 - 11904: 0x89D1, + 20104 - 11904: 0xA4A9, + 20105 - 11904: 0x89E2, + 20107 - 11904: 0xA8C6, + 20108 - 11904: 0xA447, + 20109 - 11904: 0xC948, + 20110 - 11904: 0xA45F, + 20113 - 11904: 0xA4AA, + 20114 - 11904: 0xA4AC, + 20115 - 11904: 0xC951, + 20116 - 11904: 0xA4AD, + 20117 - 11904: 0xA4AB, + 20120 - 11904: 0x927E, + 20121 - 11904: 0xA5E5, + 20122 - 11904: 0x9DBA, + 20123 - 11904: 0xA8C7, + 20126 - 11904: 0xA8C8, + 20127 - 11904: 0xAB45, + 20128 - 11904: 0xC6C2, + 20129 - 11904: 0xA460, + 20130 - 11904: 0xA4AE, + 20131 - 11904: 0x8C6F, + 20132 - 11904: 0xA5E6, + 20133 - 11904: 0xA5E8, + 20134 - 11904: 0xA5E7, + 20136 - 11904: 0xA6EB, + 20139 - 11904: 0xA8C9, + 20140 - 11904: 0xA8CA, + 20141 - 11904: 0xAB46, + 20142 - 11904: 0xAB47, + 20147 - 11904: 0xADBD, + 20150 - 11904: 0xDCB3, + 20151 - 11904: 0xFBF8, + 20153 - 11904: 0xF6D6, + 20154 - 11904: 0xA448, + 20155 - 11904: 0x8BC7, + 20156 - 11904: 0x926B, + 20159 - 11904: 0x89D2, + 20160 - 11904: 0xA4B0, + 20161 - 11904: 0xA4AF, + 20162 - 11904: 0xC952, + 20163 - 11904: 0xA4B1, + 20164 - 11904: 0xA4B7, + 20166 - 11904: 0xA4B2, + 20167 - 11904: 0xA4B3, + 20168 - 11904: 0xC954, + 20169 - 11904: 0xC953, + 20170 - 11904: 0xA4B5, + 20171 - 11904: 0xA4B6, + 20173 - 11904: 0xA4B4, + 20174 - 11904: 0x9FCF, + 20180 - 11904: 0xA54A, + 20181 - 11904: 0xA54B, + 20182 - 11904: 0xA54C, + 20183 - 11904: 0xA54D, + 20184 - 11904: 0xA549, + 20185 - 11904: 0xA550, + 20186 - 11904: 0xC96A, + 20188 - 11904: 0xC966, + 20189 - 11904: 0xC969, + 20190 - 11904: 0xA551, + 20191 - 11904: 0xA561, + 20193 - 11904: 0xC968, + 20195 - 11904: 0xA54E, + 20196 - 11904: 0xA54F, + 20197 - 11904: 0xA548, + 20200 - 11904: 0xC965, + 20201 - 11904: 0xC967, + 20202 - 11904: 0x9DA9, + 20203 - 11904: 0x89D3, + 20206 - 11904: 0x99E2, + 20208 - 11904: 0xA5F5, + 20209 - 11904: 0xC9B0, + 20210 - 11904: 0xA5F2, + 20211 - 11904: 0xA5F6, + 20212 - 11904: 0xC9BA, + 20213 - 11904: 0xC9AE, + 20214 - 11904: 0xA5F3, + 20215 - 11904: 0xC9B2, + 20216 - 11904: 0x9267, + 20219 - 11904: 0xA5F4, + 20221 - 11904: 0xA5F7, + 20223 - 11904: 0xA5E9, + 20224 - 11904: 0xC9B1, + 20225 - 11904: 0xA5F8, + 20226 - 11904: 0xC9B5, + 20227 - 11904: 0x92A4, + 20228 - 11904: 0xC9B9, + 20229 - 11904: 0xC9B6, + 20232 - 11904: 0xC9B3, + 20233 - 11904: 0xA5EA, + 20234 - 11904: 0xA5EC, + 20235 - 11904: 0xA5F9, + 20237 - 11904: 0xA5EE, + 20238 - 11904: 0xC9AB, + 20239 - 11904: 0xA5F1, + 20240 - 11904: 0xA5EF, + 20241 - 11904: 0xA5F0, + 20242 - 11904: 0xC9BB, + 20243 - 11904: 0xC9B8, + 20244 - 11904: 0xC9AF, + 20245 - 11904: 0xA5ED, + 20247 - 11904: 0x8C73, + 20248 - 11904: 0xC9AC, + 20249 - 11904: 0xA5EB, + 20250 - 11904: 0x894E, + 20253 - 11904: 0xC9B4, + 20258 - 11904: 0xC9B7, + 20264 - 11904: 0x894F, + 20265 - 11904: 0x9278, + 20268 - 11904: 0xC9AD, + 20269 - 11904: 0xCA66, + 20271 - 11904: 0xA742, + 20272 - 11904: 0xA6F4, + 20274 - 11904: 0x91B6, + 20275 - 11904: 0xCA67, + 20276 - 11904: 0xA6F1, + 20278 - 11904: 0xA744, + 20279 - 11904: 0x89D4, + 20280 - 11904: 0xA6F9, + 20281 - 11904: 0x9FD2, + 20282 - 11904: 0xA6F8, + 20283 - 11904: 0xCA5B, + 20284 - 11904: 0xA6FC, + 20285 - 11904: 0xA6F7, + 20286 - 11904: 0xCA60, + 20287 - 11904: 0xCA68, + 20289 - 11904: 0xCA64, + 20290 - 11904: 0x92A7, + 20291 - 11904: 0xA6FA, + 20293 - 11904: 0x95A2, + 20294 - 11904: 0xA6FD, + 20295 - 11904: 0xA6EE, + 20296 - 11904: 0xA747, + 20297 - 11904: 0xCA5D, + 20299 - 11904: 0x926E, + 20300 - 11904: 0xCBBD, + 20301 - 11904: 0xA6EC, + 20302 - 11904: 0xA743, + 20303 - 11904: 0xA6ED, + 20304 - 11904: 0xA6F5, + 20305 - 11904: 0xA6F6, + 20306 - 11904: 0xCA62, + 20307 - 11904: 0xCA5E, + 20308 - 11904: 0xA6FB, + 20309 - 11904: 0xA6F3, + 20310 - 11904: 0xCA5A, + 20311 - 11904: 0xA6EF, + 20312 - 11904: 0xCA65, + 20313 - 11904: 0xA745, + 20314 - 11904: 0xA748, + 20315 - 11904: 0xA6F2, + 20316 - 11904: 0xA740, + 20317 - 11904: 0xA746, + 20318 - 11904: 0xA6F0, + 20319 - 11904: 0xCA63, + 20320 - 11904: 0xA741, + 20321 - 11904: 0xCA69, + 20322 - 11904: 0xCA5C, + 20323 - 11904: 0xA6FE, + 20324 - 11904: 0xCA5F, + 20327 - 11904: 0xCA61, + 20329 - 11904: 0xA8D8, + 20330 - 11904: 0xCBBF, + 20331 - 11904: 0xCBCB, + 20332 - 11904: 0xA8D0, + 20334 - 11904: 0xCBCC, + 20335 - 11904: 0xA8CB, + 20336 - 11904: 0xA8D5, + 20338 - 11904: 0x96EA, + 20339 - 11904: 0xA8CE, + 20340 - 11904: 0xCBB9, + 20341 - 11904: 0xA8D6, + 20342 - 11904: 0xCBB8, + 20343 - 11904: 0xCBBC, + 20344 - 11904: 0xCBC3, + 20345 - 11904: 0xCBC1, + 20346 - 11904: 0xA8DE, + 20347 - 11904: 0xA8D9, + 20348 - 11904: 0xCBB3, + 20349 - 11904: 0xCBB5, + 20350 - 11904: 0xA8DB, + 20351 - 11904: 0xA8CF, + 20352 - 11904: 0xCBB6, + 20353 - 11904: 0xCBC2, + 20354 - 11904: 0xCBC9, + 20355 - 11904: 0xA8D4, + 20356 - 11904: 0xCBBB, + 20357 - 11904: 0xCBB4, + 20358 - 11904: 0xA8D3, + 20359 - 11904: 0xCBB7, + 20360 - 11904: 0xA8D7, + 20361 - 11904: 0xCBBA, + 20362 - 11904: 0x926F, + 20363 - 11904: 0xA8D2, + 20365 - 11904: 0xA8CD, + 20367 - 11904: 0xA8DC, + 20368 - 11904: 0xCBC4, + 20369 - 11904: 0xA8DD, + 20370 - 11904: 0xCBC8, + 20372 - 11904: 0xCBC6, + 20373 - 11904: 0xCBCA, + 20374 - 11904: 0xA8DA, + 20375 - 11904: 0xCBBE, + 20376 - 11904: 0xCBB2, + 20378 - 11904: 0xCBC0, + 20379 - 11904: 0xA8D1, + 20380 - 11904: 0xCBC5, + 20381 - 11904: 0xA8CC, + 20382 - 11904: 0xCBC7, + 20386 - 11904: 0x92A3, + 20392 - 11904: 0x8950, + 20395 - 11904: 0xFA57, + 20398 - 11904: 0xAB56, + 20399 - 11904: 0xAB4A, + 20400 - 11904: 0x9866, + 20402 - 11904: 0xCDE0, + 20403 - 11904: 0xCDE8, + 20404 - 11904: 0x8CF8, + 20405 - 11904: 0xAB49, + 20406 - 11904: 0xAB51, + 20407 - 11904: 0xAB5D, + 20409 - 11904: 0xCDEE, + 20410 - 11904: 0xCDEC, + 20411 - 11904: 0xCDE7, + 20413 - 11904: 0x89D6, + 20415 - 11904: 0xAB4B, + 20416 - 11904: 0xCDED, + 20417 - 11904: 0xCDE3, + 20418 - 11904: 0xAB59, + 20419 - 11904: 0xAB50, + 20420 - 11904: 0xAB58, + 20421 - 11904: 0xCDDE, + 20423 - 11904: 0xCDEA, + 20424 - 11904: 0x98B2, + 20425 - 11904: 0xCDE1, + 20426 - 11904: 0xAB54, + 20427 - 11904: 0xCDE2, + 20428 - 11904: 0x92AB, + 20429 - 11904: 0xCDDD, + 20430 - 11904: 0xAB5B, + 20431 - 11904: 0xAB4E, + 20432 - 11904: 0xAB57, + 20433 - 11904: 0xAB4D, + 20435 - 11904: 0xCDDF, + 20436 - 11904: 0xCDE4, + 20438 - 11904: 0xCDEB, + 20439 - 11904: 0xAB55, + 20440 - 11904: 0xAB52, + 20441 - 11904: 0xCDE6, + 20442 - 11904: 0xAB5A, + 20443 - 11904: 0xCDE9, + 20444 - 11904: 0xCDE5, + 20445 - 11904: 0xAB4F, + 20446 - 11904: 0xAB5C, + 20447 - 11904: 0xAB53, + 20448 - 11904: 0xAB4C, + 20449 - 11904: 0xAB48, + 20452 - 11904: 0x96DE, + 20453 - 11904: 0x92AC, + 20460 - 11904: 0xCDEF, + 20462 - 11904: 0xADD7, + 20463 - 11904: 0xADC1, + 20464 - 11904: 0x8C70, + 20465 - 11904: 0xADD1, + 20466 - 11904: 0x9F6E, + 20467 - 11904: 0xADD6, + 20468 - 11904: 0xD0D0, + 20469 - 11904: 0xD0CF, + 20470 - 11904: 0xD0D4, + 20471 - 11904: 0xD0D5, + 20472 - 11904: 0xADC4, + 20473 - 11904: 0x8EF2, + 20474 - 11904: 0xADCD, + 20477 - 11904: 0x9F6C, + 20478 - 11904: 0xADDA, + 20480 - 11904: 0xADCE, + 20483 - 11904: 0x89D8, + 20485 - 11904: 0xD0C9, + 20486 - 11904: 0xADC7, + 20487 - 11904: 0xD0CA, + 20488 - 11904: 0xFA59, + 20489 - 11904: 0xADDC, + 20491 - 11904: 0xADD3, + 20492 - 11904: 0xADBE, + 20493 - 11904: 0xADBF, + 20494 - 11904: 0xD0DD, + 20495 - 11904: 0xB0BF, + 20497 - 11904: 0xADCC, + 20498 - 11904: 0xADCB, + 20499 - 11904: 0xD0CB, + 20500 - 11904: 0xADCF, + 20501 - 11904: 0xD45B, + 20502 - 11904: 0xADC6, + 20503 - 11904: 0xD0D6, + 20504 - 11904: 0xADD5, + 20505 - 11904: 0xADD4, + 20506 - 11904: 0xADCA, + 20507 - 11904: 0xD0CE, + 20508 - 11904: 0xD0D7, + 20510 - 11904: 0xD0C8, + 20511 - 11904: 0xADC9, + 20512 - 11904: 0xD0D8, + 20513 - 11904: 0xADD2, + 20514 - 11904: 0xD0CC, + 20515 - 11904: 0xADC0, + 20517 - 11904: 0xADC3, + 20518 - 11904: 0xADC2, + 20519 - 11904: 0xD0D9, + 20520 - 11904: 0xADD0, + 20521 - 11904: 0xFA5F, + 20522 - 11904: 0xADD9, + 20523 - 11904: 0xADDB, + 20524 - 11904: 0xD0D3, + 20525 - 11904: 0xADD8, + 20526 - 11904: 0x92A8, + 20527 - 11904: 0xD0DB, + 20528 - 11904: 0xD0CD, + 20529 - 11904: 0xD0DC, + 20531 - 11904: 0xD0D1, + 20532 - 11904: 0x9163, + 20533 - 11904: 0xD0DA, + 20535 - 11904: 0xD0D2, + 20539 - 11904: 0x8C40, + 20540 - 11904: 0xADC8, + 20544 - 11904: 0xD463, + 20545 - 11904: 0xD457, + 20547 - 11904: 0xB0B3, + 20549 - 11904: 0xD45C, + 20550 - 11904: 0xD462, + 20551 - 11904: 0xB0B2, + 20552 - 11904: 0xD455, + 20553 - 11904: 0xB0B6, + 20554 - 11904: 0xD459, + 20555 - 11904: 0xD452, + 20556 - 11904: 0xB0B4, + 20557 - 11904: 0xD456, + 20558 - 11904: 0xB0B9, + 20559 - 11904: 0xB0BE, + 20561 - 11904: 0xD467, + 20563 - 11904: 0xD451, + 20565 - 11904: 0xB0BA, + 20566 - 11904: 0x9F73, + 20567 - 11904: 0xD466, + 20568 - 11904: 0x92AD, + 20570 - 11904: 0xB0B5, + 20571 - 11904: 0xD458, + 20572 - 11904: 0xB0B1, + 20573 - 11904: 0xD453, + 20574 - 11904: 0xD44F, + 20575 - 11904: 0xD45D, + 20576 - 11904: 0xD450, + 20577 - 11904: 0xD44E, + 20578 - 11904: 0xD45A, + 20579 - 11904: 0xD460, + 20580 - 11904: 0xD461, + 20581 - 11904: 0xB0B7, + 20582 - 11904: 0x9BE9, + 20584 - 11904: 0xD85B, + 20585 - 11904: 0xD45E, + 20586 - 11904: 0xD44D, + 20587 - 11904: 0xD45F, + 20588 - 11904: 0x92A9, + 20589 - 11904: 0xB0C1, + 20590 - 11904: 0xD464, + 20591 - 11904: 0xB0C0, + 20592 - 11904: 0xD44C, + 20594 - 11904: 0xD454, + 20595 - 11904: 0xD465, + 20596 - 11904: 0xB0BC, + 20597 - 11904: 0xB0BB, + 20598 - 11904: 0xB0B8, + 20599 - 11904: 0xB0BD, + 20602 - 11904: 0xB0AF, + 20605 - 11904: 0xFA66, + 20608 - 11904: 0xB3C8, + 20609 - 11904: 0x92AA, + 20610 - 11904: 0xD85E, + 20611 - 11904: 0xD857, + 20613 - 11904: 0xB3C5, + 20615 - 11904: 0xD85F, + 20616 - 11904: 0x89D9, + 20619 - 11904: 0xD855, + 20620 - 11904: 0xD858, + 20621 - 11904: 0xB3C4, + 20622 - 11904: 0xD859, + 20624 - 11904: 0xFD56, + 20625 - 11904: 0xB3C7, + 20626 - 11904: 0xD85D, + 20628 - 11904: 0xD853, + 20629 - 11904: 0xD852, + 20630 - 11904: 0xB3C9, + 20632 - 11904: 0xB3CA, + 20633 - 11904: 0xB3C6, + 20634 - 11904: 0xB3CB, + 20635 - 11904: 0xD851, + 20636 - 11904: 0xD85C, + 20637 - 11904: 0xD85A, + 20638 - 11904: 0xD854, + 20642 - 11904: 0xB3C3, + 20643 - 11904: 0xD856, + 20646 - 11904: 0x9FA8, + 20652 - 11904: 0xB6CA, + 20653 - 11904: 0xB6C4, + 20654 - 11904: 0xDCB7, + 20655 - 11904: 0xB6CD, + 20656 - 11904: 0xDCBD, + 20657 - 11904: 0xDCC0, + 20658 - 11904: 0xB6C6, + 20659 - 11904: 0xB6C7, + 20660 - 11904: 0xDCBA, + 20661 - 11904: 0xB6C5, + 20662 - 11904: 0xDCC3, + 20663 - 11904: 0xB6CB, + 20664 - 11904: 0xDCC4, + 20666 - 11904: 0xDCBF, + 20667 - 11904: 0xB6CC, + 20668 - 11904: 0x8C71, + 20669 - 11904: 0xDCB4, + 20670 - 11904: 0xB6C9, + 20671 - 11904: 0xDCB5, + 20673 - 11904: 0xDCBE, + 20674 - 11904: 0xDCBC, + 20676 - 11904: 0xDCB8, + 20677 - 11904: 0xB6C8, + 20678 - 11904: 0xDCB6, + 20679 - 11904: 0xB6CE, + 20680 - 11904: 0xDCBB, + 20681 - 11904: 0xDCC2, + 20682 - 11904: 0xDCB9, + 20683 - 11904: 0xDCC1, + 20685 - 11904: 0x92A1, + 20686 - 11904: 0xB9B6, + 20687 - 11904: 0xB9B3, + 20688 - 11904: 0x90E3, + 20689 - 11904: 0xB9B4, + 20691 - 11904: 0xE0F9, + 20692 - 11904: 0xE0F1, + 20693 - 11904: 0xB9B2, + 20694 - 11904: 0xB9AF, + 20695 - 11904: 0xE0F2, + 20697 - 11904: 0xA0A6, + 20698 - 11904: 0xB9B1, + 20699 - 11904: 0xE0F5, + 20701 - 11904: 0xE0F7, + 20703 - 11904: 0x94AB, + 20704 - 11904: 0xE0FE, + 20705 - 11904: 0xFC72, + 20707 - 11904: 0xE0FD, + 20708 - 11904: 0xE0F8, + 20709 - 11904: 0xB9AE, + 20710 - 11904: 0xE0F0, + 20711 - 11904: 0xB9AC, + 20712 - 11904: 0xE0F3, + 20713 - 11904: 0xB9B7, + 20714 - 11904: 0xE0F6, + 20716 - 11904: 0xE0FA, + 20717 - 11904: 0xB9B0, + 20718 - 11904: 0xB9AD, + 20719 - 11904: 0xE0FC, + 20720 - 11904: 0xE0FB, + 20721 - 11904: 0xB9B5, + 20723 - 11904: 0xE0F4, + 20724 - 11904: 0x97C4, + 20725 - 11904: 0xBBF8, + 20726 - 11904: 0xE4EC, + 20728 - 11904: 0xE4E9, + 20729 - 11904: 0xBBF9, + 20731 - 11904: 0xBBF7, + 20732 - 11904: 0x92AE, + 20733 - 11904: 0xE4F0, + 20734 - 11904: 0xE4ED, + 20735 - 11904: 0xE4E6, + 20736 - 11904: 0xBBF6, + 20737 - 11904: 0xFA67, + 20738 - 11904: 0xBBFA, + 20739 - 11904: 0xE4E7, + 20740 - 11904: 0xBBF5, + 20741 - 11904: 0xBBFD, + 20742 - 11904: 0xE4EA, + 20743 - 11904: 0xE4EB, + 20744 - 11904: 0xBBFB, + 20745 - 11904: 0xBBFC, + 20746 - 11904: 0xE4F1, + 20747 - 11904: 0xE4EE, + 20748 - 11904: 0xE4EF, + 20749 - 11904: 0x92A2, + 20750 - 11904: 0xFA69, + 20752 - 11904: 0xBEAA, + 20753 - 11904: 0xE8F8, + 20754 - 11904: 0xBEA7, + 20755 - 11904: 0xE8F5, + 20756 - 11904: 0xBEA9, + 20757 - 11904: 0xBEAB, + 20759 - 11904: 0xE8F6, + 20760 - 11904: 0xBEA8, + 20762 - 11904: 0xE8F7, + 20764 - 11904: 0xE8F4, + 20767 - 11904: 0xC076, + 20768 - 11904: 0xECBD, + 20769 - 11904: 0xC077, + 20770 - 11904: 0xECBB, + 20772 - 11904: 0xECBC, + 20773 - 11904: 0xECBA, + 20774 - 11904: 0xECB9, + 20777 - 11904: 0xECBE, + 20778 - 11904: 0xC075, + 20779 - 11904: 0x9268, + 20781 - 11904: 0xEFB8, + 20782 - 11904: 0xEFB9, + 20784 - 11904: 0xE4E8, + 20785 - 11904: 0xEFB7, + 20786 - 11904: 0xC078, + 20787 - 11904: 0xC35F, + 20788 - 11904: 0xF1EB, + 20789 - 11904: 0xF1EC, + 20791 - 11904: 0xC4D7, + 20792 - 11904: 0xC4D8, + 20793 - 11904: 0xF5C1, + 20794 - 11904: 0xF5C0, + 20795 - 11904: 0xC56C, + 20796 - 11904: 0xC56B, + 20797 - 11904: 0xF7D0, + 20799 - 11904: 0xA449, + 20800 - 11904: 0xA461, + 20801 - 11904: 0xA4B9, + 20803 - 11904: 0xA4B8, + 20804 - 11904: 0xA553, + 20805 - 11904: 0xA552, + 20806 - 11904: 0xA5FC, + 20807 - 11904: 0xA5FB, + 20808 - 11904: 0xA5FD, + 20809 - 11904: 0xA5FA, + 20811 - 11904: 0xA74A, + 20812 - 11904: 0xA749, + 20813 - 11904: 0xA74B, + 20818 - 11904: 0xA8E0, + 20820 - 11904: 0xA8DF, + 20821 - 11904: 0xA8E1, + 20822 - 11904: 0x8951, + 20823 - 11904: 0xAB5E, + 20825 - 11904: 0xA259, + 20826 - 11904: 0xD0DE, + 20827 - 11904: 0xA25A, + 20828 - 11904: 0xB0C2, + 20829 - 11904: 0xA25C, + 20830 - 11904: 0xA25B, + 20831 - 11904: 0xD860, + 20832 - 11904: 0xFA6F, + 20833 - 11904: 0xA25D, + 20834 - 11904: 0xB9B8, + 20835 - 11904: 0xA25E, + 20837 - 11904: 0xA44A, + 20839 - 11904: 0xA4BA, + 20840 - 11904: 0xA5FE, + 20841 - 11904: 0xA8E2, + 20842 - 11904: 0xFA71, + 20843 - 11904: 0xA44B, + 20844 - 11904: 0xA4BD, + 20845 - 11904: 0xA4BB, + 20846 - 11904: 0xA4BC, + 20849 - 11904: 0xA640, + 20852 - 11904: 0x8952, + 20853 - 11904: 0xA74C, + 20854 - 11904: 0xA8E4, + 20855 - 11904: 0xA8E3, + 20856 - 11904: 0xA8E5, + 20857 - 11904: 0x945A, + 20860 - 11904: 0xADDD, + 20864 - 11904: 0xBEAC, + 20866 - 11904: 0xC6C3, + 20870 - 11904: 0x89DD, + 20871 - 11904: 0xC94E, + 20872 - 11904: 0xC8A2, + 20873 - 11904: 0xA554, + 20874 - 11904: 0xA555, + 20877 - 11904: 0xA641, + 20879 - 11904: 0xCA6A, + 20881 - 11904: 0xAB60, + 20882 - 11904: 0xAB5F, + 20883 - 11904: 0xD0E0, + 20884 - 11904: 0xD0DF, + 20885 - 11904: 0xB0C3, + 20886 - 11904: 0xC6C4, + 20887 - 11904: 0xA4BE, + 20888 - 11904: 0xC955, + 20890 - 11904: 0x9E52, + 20892 - 11904: 0x8953, + 20894 - 11904: 0xCBCD, + 20896 - 11904: 0xAB61, + 20898 - 11904: 0xADE0, + 20900 - 11904: 0xADDE, + 20901 - 11904: 0xADDF, + 20903 - 11904: 0x9E55, + 20904 - 11904: 0x92BA, + 20906 - 11904: 0xBEAD, + 20907 - 11904: 0xC6C5, + 20908 - 11904: 0xA556, + 20910 - 11904: 0x8C5B, + 20912 - 11904: 0xA642, + 20913 - 11904: 0xC9BC, + 20914 - 11904: 0xFA7D, + 20915 - 11904: 0xFAA8, + 20916 - 11904: 0x9A68, + 20917 - 11904: 0xFA47, + 20918 - 11904: 0xA74D, + 20919 - 11904: 0xA74E, + 20920 - 11904: 0xFA7E, + 20921 - 11904: 0xCA6B, + 20924 - 11904: 0xCBCE, + 20925 - 11904: 0xA8E6, + 20926 - 11904: 0xCBCF, + 20931 - 11904: 0x92BB, + 20932 - 11904: 0xD0E2, + 20933 - 11904: 0xD0E3, + 20934 - 11904: 0xADE3, + 20935 - 11904: 0xFDB6, + 20936 - 11904: 0xD0E4, + 20937 - 11904: 0xFAA2, + 20938 - 11904: 0xD0E1, + 20939 - 11904: 0xADE4, + 20940 - 11904: 0xADE2, + 20941 - 11904: 0xADE1, + 20942 - 11904: 0xD0E5, + 20943 - 11904: 0xFAA3, + 20944 - 11904: 0xD468, + 20945 - 11904: 0xFAA4, + 20946 - 11904: 0x9BB4, + 20947 - 11904: 0xFAA6, + 20948 - 11904: 0xD861, + 20951 - 11904: 0xDCC5, + 20952 - 11904: 0xE140, + 20955 - 11904: 0x89DF, + 20956 - 11904: 0xBBFE, + 20957 - 11904: 0xBEAE, + 20958 - 11904: 0xE8F9, + 20959 - 11904: 0xFDDB, + 20960 - 11904: 0xA44C, + 20961 - 11904: 0xA45A, + 20962 - 11904: 0xFAA9, + 20964 - 11904: 0x8954, + 20973 - 11904: 0xFAAB, + 20976 - 11904: 0xB0C4, + 20977 - 11904: 0xB3CD, + 20979 - 11904: 0xB9B9, + 20980 - 11904: 0xFC7A, + 20981 - 11904: 0xC942, + 20982 - 11904: 0xA4BF, + 20984 - 11904: 0xA559, + 20985 - 11904: 0xA557, + 20986 - 11904: 0xA558, + 20988 - 11904: 0x89E0, + 20989 - 11904: 0xA8E7, + 20990 - 11904: 0x9F4F, + 20992 - 11904: 0xA44D, + 20993 - 11904: 0xA44E, + 20994 - 11904: 0xC87D, + 20995 - 11904: 0xA462, + 20997 - 11904: 0x89E1, + 20998 - 11904: 0xA4C0, + 20999 - 11904: 0xA4C1, + 21000 - 11904: 0xA4C2, + 21001 - 11904: 0xC9BE, + 21002 - 11904: 0xA55A, + 21003 - 11904: 0xFAB0, + 21004 - 11904: 0xC96B, + 21006 - 11904: 0xA646, + 21008 - 11904: 0xC9BF, + 21009 - 11904: 0xA644, + 21010 - 11904: 0xA645, + 21011 - 11904: 0xC9BD, + 21014 - 11904: 0xA647, + 21015 - 11904: 0xA643, + 21020 - 11904: 0xCA6C, + 21021 - 11904: 0xAAEC, + 21022 - 11904: 0xCA6D, + 21023 - 11904: 0x9FCD, + 21024 - 11904: 0xA0E7, + 21025 - 11904: 0xCA6E, + 21028 - 11904: 0xA750, + 21029 - 11904: 0xA74F, + 21030 - 11904: 0xFAB1, + 21031 - 11904: 0x89A6, + 21032 - 11904: 0xA753, + 21033 - 11904: 0xA751, + 21034 - 11904: 0xA752, + 21038 - 11904: 0xA8ED, + 21040 - 11904: 0xA8EC, + 21041 - 11904: 0xCBD4, + 21042 - 11904: 0xCBD1, + 21043 - 11904: 0xCBD2, + 21044 - 11904: 0x9EFA, + 21045 - 11904: 0xCBD0, + 21046 - 11904: 0xA8EE, + 21047 - 11904: 0xA8EA, + 21048 - 11904: 0xA8E9, + 21050 - 11904: 0xA8EB, + 21051 - 11904: 0xA8E8, + 21052 - 11904: 0xFAB2, + 21057 - 11904: 0xA8EF, + 21059 - 11904: 0xAB63, + 21060 - 11904: 0xCDF0, + 21062 - 11904: 0xCBD3, + 21063 - 11904: 0xAB68, + 21065 - 11904: 0xCDF1, + 21066 - 11904: 0xAB64, + 21067 - 11904: 0xAB67, + 21068 - 11904: 0xAB66, + 21069 - 11904: 0xAB65, + 21070 - 11904: 0xAB62, + 21071 - 11904: 0x87BC, + 21074 - 11904: 0xD0E8, + 21076 - 11904: 0xADE7, + 21077 - 11904: 0xD0EB, + 21078 - 11904: 0xADE5, + 21079 - 11904: 0xFAB4, + 21081 - 11904: 0x92C4, + 21082 - 11904: 0xD0E7, + 21083 - 11904: 0xADE8, + 21084 - 11904: 0xADE6, + 21085 - 11904: 0xADE9, + 21086 - 11904: 0xD0E9, + 21087 - 11904: 0xD0EA, + 21088 - 11904: 0x9F6F, + 21089 - 11904: 0xD0E6, + 21090 - 11904: 0xD0EC, + 21096 - 11904: 0x8BB0, + 21097 - 11904: 0xB3D1, + 21098 - 11904: 0xB0C5, + 21099 - 11904: 0xD469, + 21100 - 11904: 0xD46B, + 21101 - 11904: 0xD46A, + 21102 - 11904: 0xD46C, + 21103 - 11904: 0xB0C6, + 21106 - 11904: 0xB3CE, + 21107 - 11904: 0x9FAC, + 21108 - 11904: 0xB3CF, + 21109 - 11904: 0xB3D0, + 21111 - 11904: 0xB6D0, + 21112 - 11904: 0xDCC7, + 21113 - 11904: 0x89E3, + 21114 - 11904: 0xDCC6, + 21115 - 11904: 0xDCC8, + 21116 - 11904: 0xDCC9, + 21117 - 11904: 0xB6D1, + 21119 - 11904: 0xB6CF, + 21120 - 11904: 0xE141, + 21121 - 11904: 0xE142, + 21122 - 11904: 0xB9BB, + 21123 - 11904: 0xB9BA, + 21124 - 11904: 0xE35A, + 21127 - 11904: 0xBC40, + 21128 - 11904: 0xBC41, + 21129 - 11904: 0xBC42, + 21130 - 11904: 0xBC44, + 21131 - 11904: 0xE4F2, + 21132 - 11904: 0xE4F3, + 21133 - 11904: 0xBC43, + 21135 - 11904: 0x9BD3, + 21136 - 11904: 0x89E4, + 21137 - 11904: 0xBEAF, + 21139 - 11904: 0xBEB0, + 21140 - 11904: 0xFAB5, + 21142 - 11904: 0xF1ED, + 21143 - 11904: 0xF5C3, + 21144 - 11904: 0xF5C2, + 21145 - 11904: 0xF7D1, + 21146 - 11904: 0x9FD5, + 21147 - 11904: 0xA44F, + 21151 - 11904: 0xA55C, + 21152 - 11904: 0xA55B, + 21153 - 11904: 0x8955, + 21155 - 11904: 0xA648, + 21156 - 11904: 0x92C5, + 21158 - 11904: 0xC9C0, + 21160 - 11904: 0x8956, + 21161 - 11904: 0xA755, + 21162 - 11904: 0xA756, + 21163 - 11904: 0xA754, + 21164 - 11904: 0xA757, + 21165 - 11904: 0xCA6F, + 21166 - 11904: 0xCA70, + 21173 - 11904: 0xFAB3, + 21177 - 11904: 0xFAB6, + 21179 - 11904: 0xA8F1, + 21180 - 11904: 0xCBD5, + 21182 - 11904: 0xA8F0, + 21184 - 11904: 0xCDF2, + 21185 - 11904: 0xAB6C, + 21186 - 11904: 0xCDF3, + 21187 - 11904: 0xAB6B, + 21189 - 11904: 0xFAB7, + 21191 - 11904: 0xAB69, + 21193 - 11904: 0xAB6A, + 21196 - 11904: 0x9EDC, + 21197 - 11904: 0xD0ED, + 21200 - 11904: 0xFBC4, + 21201 - 11904: 0x9F71, + 21202 - 11904: 0xB0C7, + 21203 - 11904: 0xD46E, + 21205 - 11904: 0xB0CA, + 21206 - 11904: 0xD46D, + 21207 - 11904: 0xB1E5, + 21208 - 11904: 0xB0C9, + 21209 - 11904: 0xB0C8, + 21211 - 11904: 0xB3D4, + 21213 - 11904: 0xB3D3, + 21214 - 11904: 0xB3D2, + 21215 - 11904: 0xB6D2, + 21216 - 11904: 0xFABA, + 21217 - 11904: 0x92C7, + 21218 - 11904: 0xB6D5, + 21219 - 11904: 0xB6D6, + 21220 - 11904: 0xB6D4, + 21222 - 11904: 0xB6D3, + 21225 - 11904: 0xE143, + 21227 - 11904: 0xE144, + 21231 - 11904: 0xE4F5, + 21232 - 11904: 0xBC45, + 21233 - 11904: 0xE4F4, + 21235 - 11904: 0xBEB1, + 21236 - 11904: 0xECBF, + 21237 - 11904: 0xC079, + 21239 - 11904: 0xF1EE, + 21240 - 11904: 0xC455, + 21241 - 11904: 0xC6C6, + 21242 - 11904: 0xA463, + 21243 - 11904: 0xA4C3, + 21244 - 11904: 0xC956, + 21246 - 11904: 0xA4C4, + 21247 - 11904: 0xA4C5, + 21249 - 11904: 0x9A4C, + 21253 - 11904: 0xFABD, + 21254 - 11904: 0xA55E, + 21256 - 11904: 0xA649, + 21257 - 11904: 0xCA71, + 21258 - 11904: 0xCBD6, + 21259 - 11904: 0xCBD7, + 21261 - 11904: 0xAB6D, + 21262 - 11904: 0xD0EE, + 21263 - 11904: 0xB0CC, + 21264 - 11904: 0xB0CB, + 21265 - 11904: 0xD863, + 21266 - 11904: 0xD862, + 21269 - 11904: 0xA450, + 21270 - 11904: 0xA4C6, + 21271 - 11904: 0xA55F, + 21273 - 11904: 0xB0CD, + 21274 - 11904: 0xC943, + 21276 - 11904: 0xC96C, + 21277 - 11904: 0xA560, + 21279 - 11904: 0xC9C2, + 21280 - 11904: 0xA64B, + 21281 - 11904: 0xA64A, + 21282 - 11904: 0xC9C1, + 21283 - 11904: 0xA758, + 21284 - 11904: 0x8C68, + 21287 - 11904: 0x89E5, + 21290 - 11904: 0xADEA, + 21292 - 11904: 0x9F7D, + 21293 - 11904: 0xD46F, + 21295 - 11904: 0xB6D7, + 21296 - 11904: 0xE145, + 21297 - 11904: 0xB9BC, + 21298 - 11904: 0xA0A9, + 21299 - 11904: 0xFAC4, + 21300 - 11904: 0xE8FA, + 21303 - 11904: 0xF3FD, + 21304 - 11904: 0xC6C7, + 21305 - 11904: 0xA4C7, + 21307 - 11904: 0x8957, + 21308 - 11904: 0xCBD8, + 21309 - 11904: 0xCDF4, + 21310 - 11904: 0xB0D0, + 21311 - 11904: 0xB0CE, + 21312 - 11904: 0xB0CF, + 21313 - 11904: 0xA451, + 21314 - 11904: 0xFAAA, + 21315 - 11904: 0xA464, + 21316 - 11904: 0xFAC5, + 21317 - 11904: 0xA4CA, + 21319 - 11904: 0xA4C9, + 21320 - 11904: 0xA4C8, + 21321 - 11904: 0xA563, + 21322 - 11904: 0xA562, + 21324 - 11904: 0xC96D, + 21325 - 11904: 0xC9C3, + 21326 - 11904: 0x8958, + 21329 - 11904: 0xA8F5, + 21330 - 11904: 0xA8F2, + 21331 - 11904: 0xA8F4, + 21332 - 11904: 0xA8F3, + 21335 - 11904: 0xAB6E, + 21338 - 11904: 0xB3D5, + 21340 - 11904: 0xA452, + 21341 - 11904: 0x8BE3, + 21342 - 11904: 0xA4CB, + 21343 - 11904: 0x8B61, + 21344 - 11904: 0xA565, + 21345 - 11904: 0xA564, + 21347 - 11904: 0xCA72, + 21348 - 11904: 0x9AF1, + 21350 - 11904: 0xA8F6, + 21351 - 11904: 0x9EB7, + 21353 - 11904: 0xC6C8, + 21356 - 11904: 0xC957, + 21357 - 11904: 0xFAD1, + 21358 - 11904: 0xA567, + 21359 - 11904: 0xA566, + 21360 - 11904: 0xA64C, + 21361 - 11904: 0xA64D, + 21362 - 11904: 0xCA73, + 21363 - 11904: 0xA759, + 21364 - 11904: 0xFAD2, + 21365 - 11904: 0xA75A, + 21367 - 11904: 0xA8F7, + 21368 - 11904: 0xA8F8, + 21369 - 11904: 0xA8F9, + 21371 - 11904: 0xAB6F, + 21372 - 11904: 0xCDF5, + 21373 - 11904: 0x9EBA, + 21374 - 11904: 0xFAD4, + 21375 - 11904: 0xFAD5, + 21378 - 11904: 0xC944, + 21380 - 11904: 0xA4CC, + 21386 - 11904: 0xC9C4, + 21390 - 11904: 0xCA74, + 21391 - 11904: 0xCA75, + 21394 - 11904: 0xCBD9, + 21395 - 11904: 0xFAD9, + 21396 - 11904: 0xCBDA, + 21398 - 11904: 0xCDF7, + 21399 - 11904: 0xCDF6, + 21400 - 11904: 0xCDF9, + 21401 - 11904: 0xCDF8, + 21402 - 11904: 0xAB70, + 21404 - 11904: 0xD470, + 21405 - 11904: 0xADED, + 21406 - 11904: 0xD0EF, + 21407 - 11904: 0xADEC, + 21408 - 11904: 0xFADB, + 21410 - 11904: 0x9CE0, + 21412 - 11904: 0xD864, + 21413 - 11904: 0xB3D6, + 21414 - 11904: 0xFBF7, + 21415 - 11904: 0xD865, + 21416 - 11904: 0xFBFA, + 21417 - 11904: 0x89E7, + 21418 - 11904: 0xA07A, + 21419 - 11904: 0xFADC, + 21420 - 11904: 0xE146, + 21421 - 11904: 0xB9BD, + 21422 - 11904: 0xFADD, + 21424 - 11904: 0x89E9, + 21426 - 11904: 0xBC46, + 21428 - 11904: 0xF1EF, + 21430 - 11904: 0xC6C9, + 21433 - 11904: 0xC958, + 21435 - 11904: 0xA568, + 21441 - 11904: 0xFAE2, + 21442 - 11904: 0x89EB, + 21443 - 11904: 0xB0D1, + 21445 - 11904: 0xFAE3, + 21448 - 11904: 0xA453, + 21449 - 11904: 0xA465, + 21450 - 11904: 0xA4CE, + 21451 - 11904: 0xA4CD, + 21452 - 11904: 0x90C8, + 21453 - 11904: 0xA4CF, + 21456 - 11904: 0x92DA, + 21457 - 11904: 0x8959, + 21458 - 11904: 0x9CF5, + 21460 - 11904: 0xA8FB, + 21462 - 11904: 0xA8FA, + 21463 - 11904: 0xA8FC, + 21464 - 11904: 0x895A, + 21465 - 11904: 0xFAE7, + 21466 - 11904: 0x9FA2, + 21467 - 11904: 0xAB71, + 21471 - 11904: 0xADEE, + 21472 - 11904: 0xFAEA, + 21473 - 11904: 0xE8FB, + 21474 - 11904: 0xC24F, + 21475 - 11904: 0xA466, + 21476 - 11904: 0xA56A, + 21477 - 11904: 0xA579, + 21478 - 11904: 0xA574, + 21480 - 11904: 0xA56F, + 21481 - 11904: 0xA56E, + 21482 - 11904: 0xA575, + 21483 - 11904: 0xA573, + 21484 - 11904: 0xA56C, + 21485 - 11904: 0xA57A, + 21486 - 11904: 0xA56D, + 21487 - 11904: 0xA569, + 21488 - 11904: 0xA578, + 21489 - 11904: 0xA577, + 21490 - 11904: 0xA576, + 21491 - 11904: 0xA56B, + 21493 - 11904: 0xA572, + 21494 - 11904: 0xFAED, + 21495 - 11904: 0x8FAD, + 21496 - 11904: 0xA571, + 21499 - 11904: 0xA57B, + 21500 - 11904: 0xA570, + 21502 - 11904: 0xFB59, + 21505 - 11904: 0xA653, + 21507 - 11904: 0xA659, + 21508 - 11904: 0xA655, + 21510 - 11904: 0xA65B, + 21511 - 11904: 0xC9C5, + 21512 - 11904: 0xA658, + 21513 - 11904: 0xA64E, + 21514 - 11904: 0xA651, + 21515 - 11904: 0xA654, + 21516 - 11904: 0xA650, + 21517 - 11904: 0xA657, + 21518 - 11904: 0xA65A, + 21519 - 11904: 0xA64F, + 21520 - 11904: 0xA652, + 21521 - 11904: 0xA656, + 21522 - 11904: 0xA65C, + 21523 - 11904: 0xFAEF, + 21524 - 11904: 0x96EF, + 21526 - 11904: 0x9DEC, + 21528 - 11904: 0xCA7E, + 21529 - 11904: 0xCA7B, + 21530 - 11904: 0x9DCA, + 21531 - 11904: 0xA767, + 21532 - 11904: 0xCA7C, + 21533 - 11904: 0xA75B, + 21534 - 11904: 0xA75D, + 21535 - 11904: 0xA775, + 21536 - 11904: 0xA770, + 21537 - 11904: 0xFD6D, + 21539 - 11904: 0x89EC, + 21540 - 11904: 0xCAA5, + 21541 - 11904: 0xCA7D, + 21542 - 11904: 0xA75F, + 21543 - 11904: 0xA761, + 21544 - 11904: 0xCAA4, + 21545 - 11904: 0xA768, + 21546 - 11904: 0xCA78, + 21547 - 11904: 0xA774, + 21548 - 11904: 0xA776, + 21549 - 11904: 0xA75C, + 21550 - 11904: 0xA76D, + 21551 - 11904: 0xFB44, + 21552 - 11904: 0xCA76, + 21553 - 11904: 0xA773, + 21554 - 11904: 0x9DE2, + 21555 - 11904: 0xA764, + 21556 - 11904: 0x8C75, + 21557 - 11904: 0xA76E, + 21558 - 11904: 0xA76F, + 21559 - 11904: 0xCA77, + 21560 - 11904: 0xA76C, + 21561 - 11904: 0xA76A, + 21563 - 11904: 0xA76B, + 21564 - 11904: 0xA771, + 21565 - 11904: 0xCAA1, + 21566 - 11904: 0xA75E, + 21568 - 11904: 0xA772, + 21569 - 11904: 0xCAA3, + 21570 - 11904: 0xA766, + 21571 - 11904: 0xA763, + 21573 - 11904: 0xCA7A, + 21574 - 11904: 0xA762, + 21575 - 11904: 0xCAA6, + 21576 - 11904: 0xA765, + 21578 - 11904: 0xA769, + 21579 - 11904: 0x9EC0, + 21580 - 11904: 0x87C5, + 21581 - 11904: 0x9E56, + 21582 - 11904: 0xA760, + 21583 - 11904: 0xCAA2, + 21588 - 11904: 0xCA79, + 21600 - 11904: 0xCBEB, + 21601 - 11904: 0xCBEA, + 21602 - 11904: 0xA94F, + 21603 - 11904: 0xCBED, + 21604 - 11904: 0xCBEF, + 21605 - 11904: 0xCBE4, + 21606 - 11904: 0xCBE7, + 21607 - 11904: 0xCBEE, + 21608 - 11904: 0xA950, + 21609 - 11904: 0x9F79, + 21610 - 11904: 0x9AC7, + 21611 - 11904: 0xCBE1, + 21612 - 11904: 0xCBE5, + 21613 - 11904: 0xFAF4, + 21615 - 11904: 0xCBE9, + 21616 - 11904: 0xCE49, + 21617 - 11904: 0xA94B, + 21618 - 11904: 0xCE4D, + 21619 - 11904: 0xA8FD, + 21620 - 11904: 0xCBE6, + 21621 - 11904: 0xA8FE, + 21622 - 11904: 0xA94C, + 21623 - 11904: 0xA945, + 21624 - 11904: 0xA941, + 21626 - 11904: 0xCBE2, + 21627 - 11904: 0xA944, + 21628 - 11904: 0xA949, + 21629 - 11904: 0xA952, + 21630 - 11904: 0xCBE3, + 21631 - 11904: 0xCBDC, + 21632 - 11904: 0xA943, + 21633 - 11904: 0xCBDD, + 21634 - 11904: 0xCBDF, + 21636 - 11904: 0xA946, + 21637 - 11904: 0x98A1, + 21638 - 11904: 0xA948, + 21639 - 11904: 0xCBDB, + 21640 - 11904: 0xCBE0, + 21643 - 11904: 0xA951, + 21644 - 11904: 0xA94D, + 21645 - 11904: 0xCBE8, + 21646 - 11904: 0xA953, + 21647 - 11904: 0xFAF8, + 21648 - 11904: 0xA94A, + 21649 - 11904: 0xCBDE, + 21650 - 11904: 0xA947, + 21651 - 11904: 0x89F0, + 21652 - 11904: 0x9E47, + 21653 - 11904: 0xA942, + 21654 - 11904: 0xA940, + 21655 - 11904: 0x9DF7, + 21656 - 11904: 0xCBEC, + 21658 - 11904: 0xA94E, + 21660 - 11904: 0x9FD3, + 21662 - 11904: 0x9ACA, + 21664 - 11904: 0xCE48, + 21665 - 11904: 0xCDFB, + 21666 - 11904: 0xCE4B, + 21667 - 11904: 0x89F1, + 21668 - 11904: 0xFAF9, + 21669 - 11904: 0xCDFD, + 21670 - 11904: 0xAB78, + 21671 - 11904: 0xABA8, + 21672 - 11904: 0xAB74, + 21673 - 11904: 0xABA7, + 21674 - 11904: 0xAB7D, + 21675 - 11904: 0xABA4, + 21676 - 11904: 0xAB72, + 21677 - 11904: 0xCDFC, + 21678 - 11904: 0xCE43, + 21679 - 11904: 0xABA3, + 21680 - 11904: 0xCE4F, + 21681 - 11904: 0xABA5, + 21682 - 11904: 0x8E5A, + 21683 - 11904: 0xAB79, + 21684 - 11904: 0x89F2, + 21686 - 11904: 0xCE45, + 21687 - 11904: 0xCE42, + 21688 - 11904: 0xAB77, + 21689 - 11904: 0x89F3, + 21690 - 11904: 0xCDFA, + 21691 - 11904: 0xABA6, + 21692 - 11904: 0xCE4A, + 21693 - 11904: 0xAB7C, + 21694 - 11904: 0xCE4C, + 21695 - 11904: 0xABA9, + 21696 - 11904: 0xAB73, + 21697 - 11904: 0xAB7E, + 21698 - 11904: 0xAB7B, + 21699 - 11904: 0xCE40, + 21700 - 11904: 0xABA1, + 21701 - 11904: 0xCE46, + 21702 - 11904: 0xCE47, + 21703 - 11904: 0xAB7A, + 21704 - 11904: 0xABA2, + 21705 - 11904: 0xAB76, + 21707 - 11904: 0x925D, + 21708 - 11904: 0x8B51, + 21709 - 11904: 0x92E0, + 21710 - 11904: 0xAB75, + 21711 - 11904: 0xCDFE, + 21712 - 11904: 0x89F4, + 21718 - 11904: 0xCE44, + 21722 - 11904: 0x9FD4, + 21726 - 11904: 0xCE4E, + 21728 - 11904: 0xD144, + 21729 - 11904: 0xADFB, + 21730 - 11904: 0xD0F1, + 21731 - 11904: 0x8A79, + 21732 - 11904: 0xD0F6, + 21733 - 11904: 0xADF4, + 21734 - 11904: 0xAE40, + 21735 - 11904: 0xD0F4, + 21736 - 11904: 0xADEF, + 21737 - 11904: 0xADF9, + 21738 - 11904: 0xADFE, + 21739 - 11904: 0xD0FB, + 21741 - 11904: 0xADFA, + 21742 - 11904: 0xADFD, + 21743 - 11904: 0x89F5, + 21745 - 11904: 0xD0FE, + 21746 - 11904: 0xADF5, + 21747 - 11904: 0xD0F5, + 21751 - 11904: 0xD142, + 21752 - 11904: 0xD143, + 21754 - 11904: 0xADF7, + 21755 - 11904: 0xD141, + 21756 - 11904: 0xADF3, + 21757 - 11904: 0xAE43, + 21759 - 11904: 0xD0F8, + 21761 - 11904: 0xADF1, + 21762 - 11904: 0x97A7, + 21763 - 11904: 0xD146, + 21764 - 11904: 0xD0F9, + 21765 - 11904: 0xD0FD, + 21766 - 11904: 0xADF6, + 21767 - 11904: 0xAE42, + 21768 - 11904: 0xD0FA, + 21769 - 11904: 0xADFC, + 21770 - 11904: 0xD140, + 21771 - 11904: 0xD147, + 21772 - 11904: 0xD4A1, + 21773 - 11904: 0x93BA, + 21774 - 11904: 0xD145, + 21775 - 11904: 0xAE44, + 21776 - 11904: 0xADF0, + 21777 - 11904: 0xD0FC, + 21778 - 11904: 0xD0F3, + 21779 - 11904: 0x9E58, + 21780 - 11904: 0xADF8, + 21783 - 11904: 0xD0F2, + 21784 - 11904: 0x89F6, + 21786 - 11904: 0xD0F7, + 21790 - 11904: 0x9E57, + 21795 - 11904: 0x89F7, + 21797 - 11904: 0x8A41, + 21798 - 11904: 0xD0F0, + 21799 - 11904: 0xAE41, + 21800 - 11904: 0x89F8, + 21802 - 11904: 0xD477, + 21803 - 11904: 0xFAF1, + 21804 - 11904: 0xB0E4, + 21805 - 11904: 0xD4A7, + 21806 - 11904: 0xB0E2, + 21807 - 11904: 0xB0DF, + 21808 - 11904: 0xD47C, + 21809 - 11904: 0xB0DB, + 21810 - 11904: 0xD4A2, + 21811 - 11904: 0xB0E6, + 21812 - 11904: 0xD476, + 21813 - 11904: 0xD47B, + 21814 - 11904: 0xD47A, + 21815 - 11904: 0xADF2, + 21816 - 11904: 0xB0E1, + 21817 - 11904: 0xD4A5, + 21819 - 11904: 0xD4A8, + 21820 - 11904: 0xD473, + 21822 - 11904: 0xB3E8, + 21823 - 11904: 0x89FA, + 21824 - 11904: 0xD4A9, + 21825 - 11904: 0xB0E7, + 21827 - 11904: 0xB0D9, + 21828 - 11904: 0xB0D6, + 21829 - 11904: 0xD47E, + 21830 - 11904: 0xB0D3, + 21831 - 11904: 0xFB42, + 21832 - 11904: 0xD4A6, + 21833 - 11904: 0xFABF, + 21834 - 11904: 0xB0DA, + 21835 - 11904: 0xD4AA, + 21837 - 11904: 0xD474, + 21838 - 11904: 0xD4A4, + 21839 - 11904: 0xB0DD, + 21840 - 11904: 0xD475, + 21841 - 11904: 0xD478, + 21842 - 11904: 0xD47D, + 21843 - 11904: 0xFBA3, + 21845 - 11904: 0xB0DE, + 21846 - 11904: 0xB0DC, + 21847 - 11904: 0xB0E8, + 21852 - 11904: 0xB0E3, + 21853 - 11904: 0xFAF7, + 21854 - 11904: 0xB0D7, + 21855 - 11904: 0xB1D2, + 21857 - 11904: 0xB0D8, + 21858 - 11904: 0xD479, + 21859 - 11904: 0xB0E5, + 21860 - 11904: 0xB0E0, + 21861 - 11904: 0xD4A3, + 21862 - 11904: 0xB0D5, + 21865 - 11904: 0x9E4E, + 21866 - 11904: 0xB0D4, + 21867 - 11904: 0x94DC, + 21873 - 11904: 0x95DA, + 21874 - 11904: 0x9DF8, + 21875 - 11904: 0x9F6A, + 21877 - 11904: 0xD471, + 21878 - 11904: 0xD472, + 21879 - 11904: 0xD86A, + 21881 - 11904: 0x8AB7, + 21883 - 11904: 0xB3D7, + 21884 - 11904: 0xB3DA, + 21885 - 11904: 0xD875, + 21886 - 11904: 0xB3EE, + 21887 - 11904: 0xD878, + 21888 - 11904: 0xB3D8, + 21889 - 11904: 0xD871, + 21890 - 11904: 0xB3DE, + 21891 - 11904: 0xB3E4, + 21892 - 11904: 0xB5BD, + 21894 - 11904: 0xFB46, + 21895 - 11904: 0xB3E2, + 21896 - 11904: 0xD86E, + 21897 - 11904: 0xB3EF, + 21898 - 11904: 0xB3DB, + 21899 - 11904: 0xB3E3, + 21900 - 11904: 0xD876, + 21901 - 11904: 0xDCD7, + 21902 - 11904: 0xD87B, + 21903 - 11904: 0xD86F, + 21904 - 11904: 0x8A46, + 21905 - 11904: 0xD866, + 21906 - 11904: 0xD873, + 21907 - 11904: 0xD86D, + 21908 - 11904: 0xB3E1, + 21909 - 11904: 0xD879, + 21912 - 11904: 0xB3DD, + 21913 - 11904: 0xB3F1, + 21914 - 11904: 0xB3EA, + 21916 - 11904: 0xB3DF, + 21917 - 11904: 0xB3DC, + 21919 - 11904: 0xB3E7, + 21921 - 11904: 0xD87A, + 21922 - 11904: 0xD86C, + 21923 - 11904: 0xD872, + 21924 - 11904: 0xD874, + 21925 - 11904: 0xD868, + 21926 - 11904: 0xD877, + 21927 - 11904: 0xB3D9, + 21928 - 11904: 0xD867, + 21929 - 11904: 0xFB47, + 21930 - 11904: 0xB3E0, + 21931 - 11904: 0xB3F0, + 21932 - 11904: 0xB3EC, + 21933 - 11904: 0xD869, + 21934 - 11904: 0xB3E6, + 21936 - 11904: 0x9148, + 21937 - 11904: 0xB3ED, + 21938 - 11904: 0xB3E9, + 21939 - 11904: 0xB3E5, + 21940 - 11904: 0x92DE, + 21941 - 11904: 0xD870, + 21945 - 11904: 0x8B53, + 21946 - 11904: 0x9DF6, + 21947 - 11904: 0xB3EB, + 21948 - 11904: 0x9BDA, + 21951 - 11904: 0xDCD5, + 21952 - 11904: 0xDCD1, + 21953 - 11904: 0x9D7E, + 21954 - 11904: 0xDCE0, + 21955 - 11904: 0xDCCA, + 21956 - 11904: 0xDCD3, + 21957 - 11904: 0xB6E5, + 21958 - 11904: 0xB6E6, + 21959 - 11904: 0xB6DE, + 21960 - 11904: 0xDCDC, + 21961 - 11904: 0xB6E8, + 21962 - 11904: 0xDCCF, + 21963 - 11904: 0xDCCE, + 21964 - 11904: 0xDCCC, + 21965 - 11904: 0xDCDE, + 21966 - 11904: 0xB6DC, + 21967 - 11904: 0xDCD8, + 21968 - 11904: 0xDCCD, + 21969 - 11904: 0xB6DF, + 21970 - 11904: 0xDCD6, + 21971 - 11904: 0xB6DA, + 21972 - 11904: 0xDCD2, + 21973 - 11904: 0xDCD9, + 21974 - 11904: 0xDCDB, + 21975 - 11904: 0x89FD, + 21976 - 11904: 0x99E4, + 21977 - 11904: 0xDCDF, + 21978 - 11904: 0xB6E3, + 21979 - 11904: 0xDCCB, + 21980 - 11904: 0xB6DD, + 21981 - 11904: 0xDCD0, + 21982 - 11904: 0x9E43, + 21983 - 11904: 0xB6D8, + 21985 - 11904: 0xB6E4, + 21986 - 11904: 0xDCDA, + 21987 - 11904: 0xB6E0, + 21988 - 11904: 0xB6E1, + 21989 - 11904: 0xB6E7, + 21990 - 11904: 0xB6DB, + 21991 - 11904: 0xA25F, + 21992 - 11904: 0xB6D9, + 21993 - 11904: 0xDCD4, + 21994 - 11904: 0x9DE9, + 21996 - 11904: 0x8F52, + 21999 - 11904: 0xB6E2, + 22000 - 11904: 0x9DF5, + 22001 - 11904: 0x9DF0, + 22002 - 11904: 0xDCDD, + 22005 - 11904: 0x99E7, + 22006 - 11904: 0xB9CD, + 22007 - 11904: 0xB9C8, + 22009 - 11904: 0xE155, + 22010 - 11904: 0xE151, + 22011 - 11904: 0x8BBD, + 22012 - 11904: 0xE14B, + 22013 - 11904: 0xB9C2, + 22014 - 11904: 0xB9BE, + 22015 - 11904: 0xE154, + 22016 - 11904: 0xB9BF, + 22017 - 11904: 0xE14E, + 22018 - 11904: 0xE150, + 22020 - 11904: 0xE153, + 22021 - 11904: 0xFB48, + 22022 - 11904: 0xB9C4, + 22024 - 11904: 0xB9CB, + 22025 - 11904: 0xB9C5, + 22028 - 11904: 0xE149, + 22029 - 11904: 0xB9C6, + 22030 - 11904: 0xB9C7, + 22031 - 11904: 0xE14C, + 22032 - 11904: 0xB9CC, + 22033 - 11904: 0x9FB7, + 22034 - 11904: 0xE14A, + 22035 - 11904: 0xE14F, + 22036 - 11904: 0xB9C3, + 22037 - 11904: 0xE148, + 22038 - 11904: 0xB9C9, + 22039 - 11904: 0xB9C1, + 22043 - 11904: 0xB9C0, + 22044 - 11904: 0xE14D, + 22045 - 11904: 0xE152, + 22046 - 11904: 0x9DD0, + 22047 - 11904: 0xB9CA, + 22048 - 11904: 0x9FEB, + 22049 - 11904: 0x8DA9, + 22050 - 11904: 0x9DCF, + 22051 - 11904: 0x98E1, + 22053 - 11904: 0x9DE5, + 22055 - 11904: 0xE147, + 22057 - 11904: 0xBC4D, + 22058 - 11904: 0xE547, + 22060 - 11904: 0xE544, + 22061 - 11904: 0x9DC8, + 22062 - 11904: 0xBC47, + 22063 - 11904: 0xBC53, + 22064 - 11904: 0xBC54, + 22066 - 11904: 0xBC4A, + 22067 - 11904: 0xE542, + 22068 - 11904: 0xBC4C, + 22069 - 11904: 0xE4F9, + 22070 - 11904: 0xBC52, + 22071 - 11904: 0xFB4F, + 22072 - 11904: 0xE546, + 22073 - 11904: 0xBC49, + 22074 - 11904: 0xE548, + 22075 - 11904: 0xBC48, + 22077 - 11904: 0xE543, + 22078 - 11904: 0xE545, + 22079 - 11904: 0xBC4B, + 22080 - 11904: 0xE541, + 22081 - 11904: 0xE4FA, + 22082 - 11904: 0xE4F7, + 22083 - 11904: 0x9DEB, + 22085 - 11904: 0xD86B, + 22086 - 11904: 0xE4FD, + 22088 - 11904: 0xE4F6, + 22089 - 11904: 0xE4FC, + 22090 - 11904: 0xE4FB, + 22092 - 11904: 0xE4F8, + 22093 - 11904: 0xFB54, + 22094 - 11904: 0xBC4F, + 22095 - 11904: 0xFB55, + 22096 - 11904: 0x9AA2, + 22098 - 11904: 0x8AD6, + 22099 - 11904: 0xBC4E, + 22100 - 11904: 0x9A5F, + 22103 - 11904: 0xBC50, + 22104 - 11904: 0xE4FE, + 22105 - 11904: 0xBEB2, + 22106 - 11904: 0xE540, + 22109 - 11904: 0x9EF5, + 22110 - 11904: 0xE945, + 22112 - 11904: 0xE8FD, + 22113 - 11904: 0x8FB7, + 22114 - 11904: 0xBEBE, + 22115 - 11904: 0xE942, + 22116 - 11904: 0xBEB6, + 22117 - 11904: 0xBEBA, + 22118 - 11904: 0xE941, + 22120 - 11904: 0xBEB9, + 22121 - 11904: 0xBEB5, + 22122 - 11904: 0xBEB8, + 22123 - 11904: 0xBEB3, + 22124 - 11904: 0xBEBD, + 22125 - 11904: 0xE943, + 22126 - 11904: 0xE8FE, + 22127 - 11904: 0xBEBC, + 22128 - 11904: 0xE8FC, + 22129 - 11904: 0xBEBB, + 22130 - 11904: 0xE944, + 22131 - 11904: 0xE940, + 22132 - 11904: 0xBC51, + 22134 - 11904: 0xBEBF, + 22135 - 11904: 0xE946, + 22136 - 11904: 0xBEB7, + 22137 - 11904: 0xBEB4, + 22138 - 11904: 0x9AD2, + 22139 - 11904: 0x9E6A, + 22140 - 11904: 0x9EE8, + 22142 - 11904: 0xECC6, + 22143 - 11904: 0xECC8, + 22144 - 11904: 0xC07B, + 22145 - 11904: 0xECC9, + 22146 - 11904: 0xECC7, + 22147 - 11904: 0xECC5, + 22148 - 11904: 0xECC4, + 22149 - 11904: 0xC07D, + 22150 - 11904: 0xECC3, + 22151 - 11904: 0xC07E, + 22153 - 11904: 0x8BBF, + 22154 - 11904: 0x91C2, + 22155 - 11904: 0x9D62, + 22156 - 11904: 0xECC1, + 22157 - 11904: 0xECC2, + 22158 - 11904: 0xC07A, + 22159 - 11904: 0xC0A1, + 22160 - 11904: 0xC07C, + 22162 - 11904: 0x9260, + 22163 - 11904: 0xECC0, + 22165 - 11904: 0xC250, + 22167 - 11904: 0xEFBC, + 22168 - 11904: 0xEFBA, + 22169 - 11904: 0xEFBF, + 22170 - 11904: 0xEFBD, + 22172 - 11904: 0xEFBB, + 22173 - 11904: 0xEFBE, + 22174 - 11904: 0x925E, + 22175 - 11904: 0x91C1, + 22177 - 11904: 0x8AC5, + 22180 - 11904: 0x97A3, + 22181 - 11904: 0xC360, + 22182 - 11904: 0xF1F2, + 22183 - 11904: 0xF1F3, + 22184 - 11904: 0xC456, + 22186 - 11904: 0xF1F4, + 22187 - 11904: 0xF1F0, + 22188 - 11904: 0xF1F5, + 22189 - 11904: 0xF1F1, + 22190 - 11904: 0xC251, + 22191 - 11904: 0x8B6C, + 22193 - 11904: 0x8D7E, + 22194 - 11904: 0xF3FE, + 22195 - 11904: 0xF441, + 22196 - 11904: 0xC459, + 22197 - 11904: 0xF440, + 22198 - 11904: 0xC458, + 22199 - 11904: 0xC457, + 22201 - 11904: 0x9C54, + 22204 - 11904: 0xC45A, + 22205 - 11904: 0xF5C5, + 22206 - 11904: 0xF5C6, + 22207 - 11904: 0x9DBD, + 22208 - 11904: 0xC4DA, + 22209 - 11904: 0xC4D9, + 22210 - 11904: 0xC4DB, + 22211 - 11904: 0xF5C4, + 22213 - 11904: 0xF6D8, + 22214 - 11904: 0xF6D7, + 22216 - 11904: 0xC56D, + 22217 - 11904: 0xC56F, + 22218 - 11904: 0xC56E, + 22219 - 11904: 0xF6D9, + 22220 - 11904: 0xC5C8, + 22221 - 11904: 0xF8A6, + 22225 - 11904: 0xC5F1, + 22227 - 11904: 0xF8A5, + 22228 - 11904: 0xF8EE, + 22230 - 11904: 0x9CC5, + 22231 - 11904: 0xC949, + 22234 - 11904: 0xA57D, + 22235 - 11904: 0xA57C, + 22237 - 11904: 0xA65F, + 22238 - 11904: 0xA65E, + 22239 - 11904: 0xC9C7, + 22240 - 11904: 0xA65D, + 22241 - 11904: 0xC9C6, + 22242 - 11904: 0x895B, + 22244 - 11904: 0xA779, + 22245 - 11904: 0xCAA9, + 22247 - 11904: 0xCAA8, + 22250 - 11904: 0xA777, + 22251 - 11904: 0xA77A, + 22253 - 11904: 0xFB5C, + 22254 - 11904: 0xCAA7, + 22255 - 11904: 0xFB5B, + 22256 - 11904: 0xA778, + 22257 - 11904: 0xFB57, + 22263 - 11904: 0xCBF0, + 22265 - 11904: 0xCBF1, + 22266 - 11904: 0xA954, + 22267 - 11904: 0x8765, + 22269 - 11904: 0x98C7, + 22271 - 11904: 0xABAA, + 22272 - 11904: 0xFB5A, + 22273 - 11904: 0xD148, + 22274 - 11904: 0xD149, + 22275 - 11904: 0xAE45, + 22276 - 11904: 0xAE46, + 22279 - 11904: 0xD4AC, + 22280 - 11904: 0xB0E9, + 22281 - 11904: 0xB0EB, + 22282 - 11904: 0xD4AB, + 22283 - 11904: 0xB0EA, + 22284 - 11904: 0xD87C, + 22285 - 11904: 0xB3F2, + 22290 - 11904: 0xB6E9, + 22291 - 11904: 0xB6EA, + 22292 - 11904: 0xDCE1, + 22293 - 11904: 0x9CEE, + 22294 - 11904: 0xB9CF, + 22296 - 11904: 0xB9CE, + 22298 - 11904: 0xE549, + 22299 - 11904: 0xE948, + 22300 - 11904: 0xE947, + 22301 - 11904: 0x92E2, + 22302 - 11904: 0xF96B, + 22303 - 11904: 0xA467, + 22304 - 11904: 0xC959, + 22306 - 11904: 0xC96E, + 22307 - 11904: 0xC96F, + 22312 - 11904: 0xA662, + 22313 - 11904: 0xA666, + 22314 - 11904: 0xC9C9, + 22316 - 11904: 0xA664, + 22317 - 11904: 0xA663, + 22318 - 11904: 0xC9C8, + 22319 - 11904: 0xA665, + 22320 - 11904: 0xA661, + 22322 - 11904: 0x94A7, + 22323 - 11904: 0xA660, + 22324 - 11904: 0xC9CA, + 22331 - 11904: 0xA7A6, + 22333 - 11904: 0x8CCC, + 22334 - 11904: 0xA7A3, + 22335 - 11904: 0x9BD4, + 22336 - 11904: 0xA77D, + 22337 - 11904: 0xCAAA, + 22338 - 11904: 0xFB64, + 22339 - 11904: 0xFB76, + 22341 - 11904: 0xCAAB, + 22342 - 11904: 0xFB60, + 22343 - 11904: 0xA7A1, + 22345 - 11904: 0xCAAD, + 22346 - 11904: 0xA77B, + 22347 - 11904: 0xCAAE, + 22348 - 11904: 0xCAAC, + 22349 - 11904: 0xA77E, + 22350 - 11904: 0xA7A2, + 22351 - 11904: 0xA7A5, + 22352 - 11904: 0xA7A4, + 22353 - 11904: 0xA77C, + 22354 - 11904: 0xCAAF, + 22356 - 11904: 0x99E5, + 22359 - 11904: 0x9AC2, + 22363 - 11904: 0x91FB, + 22367 - 11904: 0xA073, + 22369 - 11904: 0xA959, + 22370 - 11904: 0xCBFE, + 22372 - 11904: 0xA95B, + 22374 - 11904: 0xA95A, + 22375 - 11904: 0x9F72, + 22376 - 11904: 0xCC40, + 22377 - 11904: 0xA958, + 22378 - 11904: 0xA957, + 22379 - 11904: 0xCBF5, + 22381 - 11904: 0xCBF4, + 22383 - 11904: 0xCBF2, + 22384 - 11904: 0xCBF7, + 22385 - 11904: 0xCBF6, + 22386 - 11904: 0xCBF3, + 22387 - 11904: 0xCBFC, + 22388 - 11904: 0xCBFD, + 22389 - 11904: 0xCBFA, + 22390 - 11904: 0xCBF8, + 22391 - 11904: 0xA956, + 22394 - 11904: 0x9FCC, + 22395 - 11904: 0xCBFB, + 22396 - 11904: 0xA95C, + 22397 - 11904: 0xCC41, + 22398 - 11904: 0x98A5, + 22399 - 11904: 0x92E8, + 22400 - 11904: 0xCBF9, + 22402 - 11904: 0xABAB, + 22403 - 11904: 0xA955, + 22408 - 11904: 0x9BBC, + 22410 - 11904: 0x96F3, + 22411 - 11904: 0xABAC, + 22412 - 11904: 0xCE54, + 22413 - 11904: 0x92E7, + 22415 - 11904: 0xCE5A, + 22416 - 11904: 0xFC67, + 22419 - 11904: 0xABB2, + 22420 - 11904: 0xCE58, + 22421 - 11904: 0xCE5E, + 22423 - 11904: 0xCE55, + 22424 - 11904: 0xCE59, + 22425 - 11904: 0xCE5B, + 22426 - 11904: 0xCE5D, + 22427 - 11904: 0xCE57, + 22428 - 11904: 0x8B7D, + 22429 - 11904: 0xCE56, + 22430 - 11904: 0xCE51, + 22431 - 11904: 0xCE52, + 22432 - 11904: 0xABAD, + 22433 - 11904: 0x9BF4, + 22434 - 11904: 0xABAF, + 22435 - 11904: 0xABAE, + 22436 - 11904: 0xCE53, + 22437 - 11904: 0xCE5C, + 22439 - 11904: 0x9EF7, + 22442 - 11904: 0x9EC1, + 22446 - 11904: 0xABB1, + 22451 - 11904: 0x87C3, + 22452 - 11904: 0x996F, + 22453 - 11904: 0xCE50, + 22454 - 11904: 0xD153, + 22456 - 11904: 0xD152, + 22457 - 11904: 0xD157, + 22458 - 11904: 0xD14E, + 22459 - 11904: 0x96F1, + 22460 - 11904: 0xD151, + 22461 - 11904: 0xD150, + 22462 - 11904: 0x8E41, + 22463 - 11904: 0xD154, + 22465 - 11904: 0xD158, + 22466 - 11904: 0xAE47, + 22467 - 11904: 0xAE4A, + 22468 - 11904: 0x954A, + 22470 - 11904: 0xD14F, + 22471 - 11904: 0xD155, + 22472 - 11904: 0x97E6, + 22475 - 11904: 0xAE49, + 22476 - 11904: 0xD14A, + 22478 - 11904: 0xABB0, + 22479 - 11904: 0xD4BA, + 22480 - 11904: 0xD156, + 22482 - 11904: 0xD14D, + 22484 - 11904: 0xAE48, + 22485 - 11904: 0xD14C, + 22487 - 11904: 0x96F5, + 22492 - 11904: 0xD4B1, + 22493 - 11904: 0x92E6, + 22494 - 11904: 0x9F42, + 22495 - 11904: 0xB0EC, + 22496 - 11904: 0xB0F0, + 22497 - 11904: 0xD4C1, + 22498 - 11904: 0xD4AF, + 22499 - 11904: 0xD4BD, + 22500 - 11904: 0xB0F1, + 22501 - 11904: 0xD4BF, + 22502 - 11904: 0xFB67, + 22503 - 11904: 0xD4C5, + 22505 - 11904: 0xD4C9, + 22508 - 11904: 0xD4C0, + 22509 - 11904: 0xD4B4, + 22510 - 11904: 0xD4BC, + 22511 - 11904: 0x99A9, + 22512 - 11904: 0xD4CA, + 22513 - 11904: 0xD4C8, + 22514 - 11904: 0xD4BE, + 22515 - 11904: 0xD4B9, + 22516 - 11904: 0xD4B2, + 22517 - 11904: 0xD8A6, + 22518 - 11904: 0xD4B0, + 22519 - 11904: 0xB0F5, + 22520 - 11904: 0xD4B7, + 22521 - 11904: 0xB0F6, + 22522 - 11904: 0xB0F2, + 22523 - 11904: 0xD4AD, + 22524 - 11904: 0xD4C3, + 22525 - 11904: 0xD4B5, + 22526 - 11904: 0xFAE6, + 22528 - 11904: 0xD4B3, + 22529 - 11904: 0xD4C6, + 22530 - 11904: 0xB0F3, + 22531 - 11904: 0xFB69, + 22532 - 11904: 0xD4CC, + 22533 - 11904: 0xB0ED, + 22534 - 11904: 0xB0EF, + 22535 - 11904: 0xD4BB, + 22536 - 11904: 0xD4B6, + 22537 - 11904: 0xAE4B, + 22538 - 11904: 0xB0EE, + 22539 - 11904: 0xD4B8, + 22540 - 11904: 0xD4C7, + 22541 - 11904: 0xD4CB, + 22542 - 11904: 0xD4C2, + 22544 - 11904: 0xD4C4, + 22546 - 11904: 0x97E5, + 22548 - 11904: 0xD4AE, + 22552 - 11904: 0x87C8, + 22553 - 11904: 0xD8A1, + 22555 - 11904: 0xD8AA, + 22556 - 11904: 0xD8A9, + 22557 - 11904: 0xB3FA, + 22558 - 11904: 0xD8A2, + 22560 - 11904: 0xB3FB, + 22561 - 11904: 0xB3F9, + 22562 - 11904: 0x967D, + 22563 - 11904: 0xD8A4, + 22564 - 11904: 0xB3F6, + 22565 - 11904: 0xD8A8, + 22566 - 11904: 0xFB6C, + 22567 - 11904: 0xD8A3, + 22568 - 11904: 0xD8A5, + 22569 - 11904: 0xD87D, + 22570 - 11904: 0xB3F4, + 22572 - 11904: 0xD8B2, + 22573 - 11904: 0xD8B1, + 22574 - 11904: 0xD8AE, + 22575 - 11904: 0xB3F3, + 22576 - 11904: 0xB3F7, + 22577 - 11904: 0xB3F8, + 22578 - 11904: 0xD14B, + 22579 - 11904: 0xD8AB, + 22580 - 11904: 0xB3F5, + 22581 - 11904: 0xB0F4, + 22582 - 11904: 0xD8AD, + 22583 - 11904: 0xD87E, + 22584 - 11904: 0xD8B0, + 22585 - 11904: 0xD8AF, + 22586 - 11904: 0x99A2, + 22587 - 11904: 0xD8B3, + 22589 - 11904: 0xDCEF, + 22591 - 11904: 0xD8AC, + 22592 - 11904: 0x9ABB, + 22596 - 11904: 0x9A65, + 22599 - 11904: 0x944E, + 22600 - 11904: 0xD8A7, + 22601 - 11904: 0xDCE7, + 22602 - 11904: 0xB6F4, + 22603 - 11904: 0xB6F7, + 22604 - 11904: 0xB6F2, + 22605 - 11904: 0xDCE6, + 22606 - 11904: 0xDCEA, + 22607 - 11904: 0xDCE5, + 22609 - 11904: 0xB6EC, + 22610 - 11904: 0xB6F6, + 22611 - 11904: 0xDCE2, + 22612 - 11904: 0xB6F0, + 22613 - 11904: 0xDCE9, + 22615 - 11904: 0xB6EE, + 22616 - 11904: 0xB6ED, + 22617 - 11904: 0xDCEC, + 22618 - 11904: 0xB6EF, + 22619 - 11904: 0xDCEE, + 22620 - 11904: 0xFB6E, + 22621 - 11904: 0xDCEB, + 22622 - 11904: 0xB6EB, + 22623 - 11904: 0x99DF, + 22626 - 11904: 0xB6F5, + 22627 - 11904: 0xDCF0, + 22628 - 11904: 0xDCE4, + 22629 - 11904: 0xDCED, + 22632 - 11904: 0xDCE3, + 22633 - 11904: 0x98E3, + 22635 - 11904: 0xB6F1, + 22636 - 11904: 0x9254, + 22637 - 11904: 0xB6F3, + 22639 - 11904: 0xDCE8, + 22641 - 11904: 0xDCF1, + 22642 - 11904: 0x967B, + 22643 - 11904: 0x8AAF, + 22644 - 11904: 0xE15D, + 22645 - 11904: 0xB9D0, + 22646 - 11904: 0xE163, + 22649 - 11904: 0xB9D5, + 22650 - 11904: 0xE15F, + 22651 - 11904: 0xE166, + 22652 - 11904: 0xE157, + 22653 - 11904: 0xB9D7, + 22654 - 11904: 0xB9D1, + 22655 - 11904: 0xE15C, + 22656 - 11904: 0xBC55, + 22657 - 11904: 0xE15B, + 22658 - 11904: 0xE164, + 22659 - 11904: 0xB9D2, + 22661 - 11904: 0xB9D6, + 22662 - 11904: 0xE15A, + 22663 - 11904: 0xE160, + 22664 - 11904: 0xE165, + 22665 - 11904: 0xE156, + 22666 - 11904: 0xB9D4, + 22667 - 11904: 0xE15E, + 22670 - 11904: 0xE162, + 22671 - 11904: 0xE168, + 22672 - 11904: 0xE158, + 22673 - 11904: 0xE161, + 22674 - 11904: 0x8C77, + 22675 - 11904: 0xB9D3, + 22676 - 11904: 0xE167, + 22678 - 11904: 0x87B0, + 22680 - 11904: 0xE159, + 22681 - 11904: 0x8BAF, + 22682 - 11904: 0x9EBD, + 22684 - 11904: 0xBC59, + 22685 - 11904: 0xE54B, + 22686 - 11904: 0xBC57, + 22687 - 11904: 0xBC56, + 22688 - 11904: 0xE54D, + 22689 - 11904: 0xE552, + 22691 - 11904: 0xE54E, + 22693 - 11904: 0xE551, + 22694 - 11904: 0xBC5C, + 22695 - 11904: 0x9EE6, + 22696 - 11904: 0xBEA5, + 22697 - 11904: 0xBC5B, + 22698 - 11904: 0xFB6F, + 22699 - 11904: 0xE54A, + 22700 - 11904: 0xE550, + 22702 - 11904: 0xBC5A, + 22703 - 11904: 0xE54F, + 22704 - 11904: 0x8EE1, + 22705 - 11904: 0xE54C, + 22707 - 11904: 0xBC58, + 22709 - 11904: 0x9B7D, + 22710 - 11904: 0x9C7E, + 22714 - 11904: 0xE94D, + 22715 - 11904: 0xF9D9, + 22716 - 11904: 0xE94F, + 22717 - 11904: 0xE94A, + 22718 - 11904: 0xBEC1, + 22719 - 11904: 0xE94C, + 22721 - 11904: 0xBEC0, + 22722 - 11904: 0xE94E, + 22725 - 11904: 0xBEC3, + 22726 - 11904: 0xE950, + 22727 - 11904: 0xBEC2, + 22728 - 11904: 0xE949, + 22729 - 11904: 0xE94B, + 22731 - 11904: 0x92EA, + 22734 - 11904: 0xC0A5, + 22735 - 11904: 0xECCC, + 22736 - 11904: 0x8C78, + 22737 - 11904: 0xC0A4, + 22738 - 11904: 0xECCD, + 22739 - 11904: 0xC0A3, + 22740 - 11904: 0xECCB, + 22741 - 11904: 0xC0A2, + 22742 - 11904: 0xECCA, + 22744 - 11904: 0xC253, + 22745 - 11904: 0xC252, + 22746 - 11904: 0xF1F6, + 22747 - 11904: 0xF1F8, + 22748 - 11904: 0xFB72, + 22749 - 11904: 0xF1F7, + 22750 - 11904: 0xC361, + 22751 - 11904: 0xC362, + 22752 - 11904: 0xFB71, + 22754 - 11904: 0xC363, + 22755 - 11904: 0xF442, + 22756 - 11904: 0xC45B, + 22759 - 11904: 0xF7D3, + 22760 - 11904: 0xF7D2, + 22761 - 11904: 0xC5F2, + 22763 - 11904: 0xA468, + 22764 - 11904: 0xA4D0, + 22767 - 11904: 0xA7A7, + 22768 - 11904: 0x895C, + 22770 - 11904: 0x98F0, + 22771 - 11904: 0x96F2, + 22772 - 11904: 0xCE5F, + 22777 - 11904: 0xB3FC, + 22778 - 11904: 0xB3FD, + 22779 - 11904: 0xFB74, + 22780 - 11904: 0xDCF2, + 22781 - 11904: 0xB9D8, + 22782 - 11904: 0xE169, + 22783 - 11904: 0xE553, + 22786 - 11904: 0x8BC1, + 22787 - 11904: 0xC95A, + 22788 - 11904: 0x895D, + 22789 - 11904: 0x89DE, + 22790 - 11904: 0xCAB0, + 22791 - 11904: 0x895E, + 22794 - 11904: 0xC6CA, + 22796 - 11904: 0xCC42, + 22797 - 11904: 0xCE60, + 22798 - 11904: 0xD159, + 22799 - 11904: 0xAE4C, + 22801 - 11904: 0xFE42, + 22802 - 11904: 0xF1F9, + 22804 - 11904: 0xC4DC, + 22805 - 11904: 0xA469, + 22806 - 11904: 0xA57E, + 22807 - 11904: 0xC970, + 22809 - 11904: 0xA667, + 22810 - 11904: 0xA668, + 22812 - 11904: 0xA95D, + 22813 - 11904: 0x8768, + 22815 - 11904: 0xFB7B, + 22816 - 11904: 0xB0F7, + 22818 - 11904: 0xB9DA, + 22820 - 11904: 0xB9DB, + 22821 - 11904: 0xB9D9, + 22823 - 11904: 0xA46A, + 22825 - 11904: 0xA4D1, + 22826 - 11904: 0xA4D3, + 22827 - 11904: 0xA4D2, + 22828 - 11904: 0xC95B, + 22829 - 11904: 0xA4D4, + 22830 - 11904: 0xA5A1, + 22831 - 11904: 0xC971, + 22833 - 11904: 0xA5A2, + 22834 - 11904: 0x895F, + 22836 - 11904: 0x8960, + 22839 - 11904: 0xA669, + 22840 - 11904: 0xA66A, + 22844 - 11904: 0xC9CB, + 22846 - 11904: 0xA7A8, + 22848 - 11904: 0xCAB1, + 22852 - 11904: 0xA961, + 22853 - 11904: 0xCC43, + 22855 - 11904: 0xA95F, + 22856 - 11904: 0xA960, + 22857 - 11904: 0xA95E, + 22858 - 11904: 0xD15A, + 22862 - 11904: 0xABB6, + 22863 - 11904: 0xABB5, + 22864 - 11904: 0xABB7, + 22865 - 11904: 0xABB4, + 22867 - 11904: 0xCE61, + 22868 - 11904: 0xA962, + 22869 - 11904: 0xABB3, + 22871 - 11904: 0xAE4D, + 22872 - 11904: 0xAE4E, + 22874 - 11904: 0xAE4F, + 22876 - 11904: 0xD4CD, + 22880 - 11904: 0xB3FE, + 22881 - 11904: 0xD8B4, + 22882 - 11904: 0xB0F8, + 22885 - 11904: 0x9BCD, + 22887 - 11904: 0xB6F8, + 22889 - 11904: 0xB9DD, + 22890 - 11904: 0xB9DC, + 22891 - 11904: 0xE16A, + 22893 - 11904: 0xBC5D, + 22894 - 11904: 0xBEC4, + 22896 - 11904: 0xEFC0, + 22897 - 11904: 0xF6DA, + 22898 - 11904: 0xF7D4, + 22899 - 11904: 0xA46B, + 22900 - 11904: 0xA5A3, + 22901 - 11904: 0x9DD3, + 22902 - 11904: 0xA5A4, + 22903 - 11904: 0xC9D1, + 22904 - 11904: 0xA66C, + 22905 - 11904: 0xA66F, + 22907 - 11904: 0xC9CF, + 22908 - 11904: 0xC9CD, + 22909 - 11904: 0xA66E, + 22910 - 11904: 0xC9D0, + 22911 - 11904: 0xC9D2, + 22912 - 11904: 0xC9CC, + 22913 - 11904: 0xA671, + 22914 - 11904: 0xA670, + 22915 - 11904: 0xA66D, + 22916 - 11904: 0xA66B, + 22917 - 11904: 0xC9CE, + 22921 - 11904: 0x984C, + 22922 - 11904: 0xA7B3, + 22925 - 11904: 0xA7B0, + 22926 - 11904: 0xCAB6, + 22927 - 11904: 0xCAB9, + 22928 - 11904: 0xCAB8, + 22930 - 11904: 0xA7AA, + 22931 - 11904: 0xA7B2, + 22932 - 11904: 0x9752, + 22934 - 11904: 0xA7AF, + 22935 - 11904: 0xCAB5, + 22936 - 11904: 0xCAB3, + 22937 - 11904: 0xA7AE, + 22938 - 11904: 0x95C3, + 22941 - 11904: 0xA7A9, + 22942 - 11904: 0xA7AC, + 22943 - 11904: 0x9BB6, + 22944 - 11904: 0xCAB4, + 22945 - 11904: 0xCABB, + 22946 - 11904: 0xCAB7, + 22947 - 11904: 0xA7AD, + 22948 - 11904: 0xA7B1, + 22949 - 11904: 0xA7B4, + 22950 - 11904: 0xCAB2, + 22951 - 11904: 0xCABA, + 22952 - 11904: 0xA7AB, + 22956 - 11904: 0x9AB9, + 22958 - 11904: 0xA967, + 22959 - 11904: 0xA96F, + 22960 - 11904: 0x97B3, + 22961 - 11904: 0xCC4F, + 22962 - 11904: 0xCC48, + 22963 - 11904: 0xA970, + 22964 - 11904: 0xCC53, + 22965 - 11904: 0xCC44, + 22966 - 11904: 0xCC4B, + 22967 - 11904: 0x9F74, + 22968 - 11904: 0x92F1, + 22969 - 11904: 0xA966, + 22970 - 11904: 0xCC45, + 22971 - 11904: 0xA964, + 22972 - 11904: 0xCC4C, + 22973 - 11904: 0xCC50, + 22974 - 11904: 0xA963, + 22975 - 11904: 0x8CFA, + 22976 - 11904: 0xCC51, + 22977 - 11904: 0xCC4A, + 22979 - 11904: 0xCC4D, + 22980 - 11904: 0x97DF, + 22981 - 11904: 0xA972, + 22982 - 11904: 0xA969, + 22983 - 11904: 0xCC54, + 22984 - 11904: 0xCC52, + 22985 - 11904: 0xFBA6, + 22986 - 11904: 0xA96E, + 22987 - 11904: 0xA96C, + 22988 - 11904: 0xCC49, + 22989 - 11904: 0xA96B, + 22990 - 11904: 0xCC47, + 22991 - 11904: 0xCC46, + 22992 - 11904: 0xA96A, + 22993 - 11904: 0xA968, + 22994 - 11904: 0xA971, + 22995 - 11904: 0xA96D, + 22996 - 11904: 0xA965, + 22998 - 11904: 0xCC4E, + 23000 - 11904: 0xABB9, + 23001 - 11904: 0xFBAB, + 23002 - 11904: 0xABC0, + 23003 - 11904: 0xCE6F, + 23004 - 11904: 0xABB8, + 23005 - 11904: 0xCE67, + 23006 - 11904: 0xCE63, + 23008 - 11904: 0xCE73, + 23009 - 11904: 0xCE62, + 23011 - 11904: 0xABBB, + 23012 - 11904: 0xCE6C, + 23013 - 11904: 0xABBE, + 23014 - 11904: 0xABC1, + 23016 - 11904: 0xABBC, + 23017 - 11904: 0xCE70, + 23018 - 11904: 0xABBF, + 23019 - 11904: 0x9877, + 23020 - 11904: 0xAE56, + 23021 - 11904: 0xCE76, + 23022 - 11904: 0xCE64, + 23023 - 11904: 0x9854, + 23024 - 11904: 0x95C5, + 23025 - 11904: 0xCE66, + 23026 - 11904: 0xCE6D, + 23027 - 11904: 0xCE71, + 23028 - 11904: 0xCE75, + 23029 - 11904: 0xCE72, + 23030 - 11904: 0xCE6B, + 23031 - 11904: 0xCE6E, + 23032 - 11904: 0x9D55, + 23033 - 11904: 0xFBB2, + 23034 - 11904: 0xCE68, + 23035 - 11904: 0xABC3, + 23036 - 11904: 0xCE6A, + 23037 - 11904: 0xCE69, + 23038 - 11904: 0xCE74, + 23039 - 11904: 0xABBA, + 23040 - 11904: 0xCE65, + 23041 - 11904: 0xABC2, + 23042 - 11904: 0x957E, + 23043 - 11904: 0xABBD, + 23049 - 11904: 0xAE5C, + 23050 - 11904: 0xD162, + 23051 - 11904: 0x9742, + 23052 - 11904: 0xAE5B, + 23053 - 11904: 0x94E6, + 23055 - 11904: 0xD160, + 23057 - 11904: 0xAE50, + 23058 - 11904: 0x92F5, + 23059 - 11904: 0xAE55, + 23061 - 11904: 0xD15F, + 23062 - 11904: 0xD15C, + 23063 - 11904: 0xD161, + 23064 - 11904: 0xAE51, + 23065 - 11904: 0xD15B, + 23066 - 11904: 0x8CC5, + 23067 - 11904: 0xAE54, + 23068 - 11904: 0xAE52, + 23070 - 11904: 0xD163, + 23071 - 11904: 0xAE53, + 23072 - 11904: 0xAE57, + 23073 - 11904: 0x92FD, + 23075 - 11904: 0xAE58, + 23076 - 11904: 0xFBA2, + 23077 - 11904: 0xAE5A, + 23079 - 11904: 0x9C51, + 23081 - 11904: 0xAE59, + 23082 - 11904: 0x94E9, + 23083 - 11904: 0x985C, + 23084 - 11904: 0x92F0, + 23085 - 11904: 0xD15D, + 23086 - 11904: 0xD15E, + 23091 - 11904: 0xD164, + 23093 - 11904: 0xD4D4, + 23094 - 11904: 0xB0F9, + 23095 - 11904: 0xD8C2, + 23096 - 11904: 0xD4D3, + 23097 - 11904: 0xD4E6, + 23100 - 11904: 0xB140, + 23101 - 11904: 0x944C, + 23102 - 11904: 0xD4E4, + 23104 - 11904: 0xB0FE, + 23105 - 11904: 0xB0FA, + 23106 - 11904: 0xD4ED, + 23107 - 11904: 0xD4DD, + 23108 - 11904: 0xD4E0, + 23109 - 11904: 0x916B, + 23110 - 11904: 0xB143, + 23111 - 11904: 0xD4EA, + 23112 - 11904: 0xD4E2, + 23113 - 11904: 0xB0FB, + 23114 - 11904: 0xB144, + 23116 - 11904: 0xD4E7, + 23117 - 11904: 0xD4E5, + 23120 - 11904: 0xD4D6, + 23121 - 11904: 0xD4EB, + 23122 - 11904: 0xD4DF, + 23123 - 11904: 0xD4DA, + 23124 - 11904: 0x8B78, + 23125 - 11904: 0xD4D0, + 23126 - 11904: 0xD4EC, + 23127 - 11904: 0xD4DC, + 23128 - 11904: 0xD4CF, + 23129 - 11904: 0x94E2, + 23130 - 11904: 0xB142, + 23131 - 11904: 0xD4E1, + 23132 - 11904: 0xD4EE, + 23133 - 11904: 0xD4DE, + 23134 - 11904: 0xD4D2, + 23135 - 11904: 0xD4D7, + 23136 - 11904: 0xD4CE, + 23137 - 11904: 0x984F, + 23138 - 11904: 0xB141, + 23139 - 11904: 0xFBB5, + 23140 - 11904: 0xD4DB, + 23141 - 11904: 0xD4D8, + 23142 - 11904: 0xB0FC, + 23143 - 11904: 0xD4D1, + 23144 - 11904: 0x9271, + 23145 - 11904: 0xD4E9, + 23146 - 11904: 0xB0FD, + 23147 - 11904: 0x9365, + 23148 - 11904: 0xD4D9, + 23149 - 11904: 0xD4D5, + 23150 - 11904: 0x985B, + 23152 - 11904: 0xD4E8, + 23153 - 11904: 0x9850, + 23159 - 11904: 0xFBB8, + 23160 - 11904: 0xD8BB, + 23161 - 11904: 0x97BC, + 23162 - 11904: 0xD8B8, + 23163 - 11904: 0xD8C9, + 23164 - 11904: 0xD8BD, + 23165 - 11904: 0xD8CA, + 23166 - 11904: 0x92F3, + 23167 - 11904: 0xB442, + 23169 - 11904: 0x9340, + 23170 - 11904: 0x984D, + 23171 - 11904: 0xD8C6, + 23172 - 11904: 0xD8C3, + 23174 - 11904: 0x9572, + 23176 - 11904: 0xFDEF, + 23178 - 11904: 0xD8C4, + 23179 - 11904: 0xD8C7, + 23180 - 11904: 0xD8CB, + 23182 - 11904: 0xD4E3, + 23183 - 11904: 0xD8CD, + 23184 - 11904: 0xDD47, + 23185 - 11904: 0xFDC1, + 23186 - 11904: 0xB443, + 23187 - 11904: 0xD8CE, + 23188 - 11904: 0xD8B6, + 23189 - 11904: 0xD8C0, + 23190 - 11904: 0xFBBA, + 23191 - 11904: 0xD8C5, + 23193 - 11904: 0x92EB, + 23194 - 11904: 0xB441, + 23195 - 11904: 0xB444, + 23196 - 11904: 0xD8CC, + 23197 - 11904: 0xD8CF, + 23198 - 11904: 0xD8BA, + 23199 - 11904: 0xD8B7, + 23200 - 11904: 0xFC73, + 23201 - 11904: 0x97B7, + 23202 - 11904: 0xD8B9, + 23204 - 11904: 0x876F, + 23205 - 11904: 0xD8BE, + 23206 - 11904: 0xD8BC, + 23207 - 11904: 0xB445, + 23209 - 11904: 0xD8C8, + 23211 - 11904: 0xFBB4, + 23212 - 11904: 0xD8BF, + 23214 - 11904: 0xD8C1, + 23215 - 11904: 0xD8B5, + 23216 - 11904: 0xDCFA, + 23217 - 11904: 0xDCF8, + 23218 - 11904: 0xB742, + 23219 - 11904: 0xB740, + 23220 - 11904: 0xDD43, + 23221 - 11904: 0xDCF9, + 23222 - 11904: 0xDD44, + 23223 - 11904: 0xDD40, + 23224 - 11904: 0xDCF7, + 23225 - 11904: 0xDD46, + 23226 - 11904: 0xDCF6, + 23227 - 11904: 0xDCFD, + 23228 - 11904: 0xB6FE, + 23229 - 11904: 0xB6FD, + 23230 - 11904: 0xB6FC, + 23231 - 11904: 0xDCFB, + 23232 - 11904: 0xDD41, + 23233 - 11904: 0xB6F9, + 23234 - 11904: 0xB741, + 23235 - 11904: 0x90A7, + 23236 - 11904: 0xDCF4, + 23238 - 11904: 0xDCFE, + 23239 - 11904: 0xDCF3, + 23240 - 11904: 0xDCFC, + 23241 - 11904: 0xB6FA, + 23242 - 11904: 0xDD42, + 23243 - 11904: 0xDCF5, + 23244 - 11904: 0xB6FB, + 23245 - 11904: 0xDD45, + 23246 - 11904: 0x9741, + 23247 - 11904: 0x92F4, + 23249 - 11904: 0x8772, + 23251 - 11904: 0xFBBC, + 23253 - 11904: 0xE16E, + 23254 - 11904: 0xB9E2, + 23255 - 11904: 0xB9E1, + 23256 - 11904: 0xB9E3, + 23257 - 11904: 0xE17A, + 23258 - 11904: 0xE170, + 23259 - 11904: 0xE176, + 23260 - 11904: 0xE16B, + 23261 - 11904: 0xE179, + 23262 - 11904: 0xE178, + 23263 - 11904: 0xE17C, + 23264 - 11904: 0xE175, + 23265 - 11904: 0xB9DE, + 23266 - 11904: 0xE174, + 23267 - 11904: 0xB9E4, + 23268 - 11904: 0x9577, + 23269 - 11904: 0xE16D, + 23270 - 11904: 0xB9DF, + 23272 - 11904: 0xE17B, + 23273 - 11904: 0xB9E0, + 23274 - 11904: 0xE16F, + 23275 - 11904: 0xE172, + 23276 - 11904: 0xE177, + 23277 - 11904: 0xE171, + 23278 - 11904: 0xE16C, + 23280 - 11904: 0x9EE2, + 23282 - 11904: 0x8F78, + 23283 - 11904: 0xE173, + 23284 - 11904: 0xE555, + 23285 - 11904: 0xBC61, + 23286 - 11904: 0xE558, + 23287 - 11904: 0xE557, + 23288 - 11904: 0xE55A, + 23289 - 11904: 0xE55C, + 23290 - 11904: 0xF9DC, + 23291 - 11904: 0xBC5F, + 23293 - 11904: 0xE556, + 23294 - 11904: 0x9672, + 23295 - 11904: 0xE554, + 23297 - 11904: 0xE55D, + 23298 - 11904: 0xE55B, + 23299 - 11904: 0xE559, + 23301 - 11904: 0xE55F, + 23303 - 11904: 0xE55E, + 23304 - 11904: 0xBC63, + 23305 - 11904: 0xBC5E, + 23307 - 11904: 0xBC60, + 23308 - 11904: 0xBC62, + 23309 - 11904: 0x9EB5, + 23311 - 11904: 0xE560, + 23312 - 11904: 0xE957, + 23313 - 11904: 0x964B, + 23315 - 11904: 0xE956, + 23316 - 11904: 0xE955, + 23317 - 11904: 0x8CAC, + 23318 - 11904: 0xE958, + 23319 - 11904: 0xE951, + 23321 - 11904: 0xE952, + 23322 - 11904: 0xE95A, + 23323 - 11904: 0xE953, + 23325 - 11904: 0xBEC5, + 23326 - 11904: 0xE95C, + 23327 - 11904: 0xA0FA, + 23328 - 11904: 0xE95B, + 23329 - 11904: 0xE954, + 23331 - 11904: 0xECD1, + 23332 - 11904: 0xC0A8, + 23333 - 11904: 0xECCF, + 23334 - 11904: 0xECD4, + 23335 - 11904: 0xECD3, + 23336 - 11904: 0xE959, + 23338 - 11904: 0xC0A7, + 23339 - 11904: 0x9575, + 23340 - 11904: 0xECD2, + 23341 - 11904: 0xECCE, + 23342 - 11904: 0xECD6, + 23343 - 11904: 0xECD5, + 23344 - 11904: 0xC0A6, + 23346 - 11904: 0xECD0, + 23348 - 11904: 0xBEC6, + 23352 - 11904: 0xC254, + 23356 - 11904: 0xEFC1, + 23357 - 11904: 0xF1FA, + 23358 - 11904: 0xF1FB, + 23359 - 11904: 0xF1FC, + 23360 - 11904: 0xC45C, + 23361 - 11904: 0x90DA, + 23363 - 11904: 0xC45D, + 23364 - 11904: 0x9367, + 23365 - 11904: 0xF443, + 23366 - 11904: 0xFEA4, + 23367 - 11904: 0xF5C8, + 23368 - 11904: 0xF5C7, + 23370 - 11904: 0x90DF, + 23371 - 11904: 0xF6DB, + 23372 - 11904: 0xF6DC, + 23373 - 11904: 0xF7D5, + 23374 - 11904: 0xF8A7, + 23375 - 11904: 0x9354, + 23376 - 11904: 0xA46C, + 23377 - 11904: 0xA46D, + 23379 - 11904: 0xA46E, + 23380 - 11904: 0xA4D5, + 23381 - 11904: 0xA5A5, + 23382 - 11904: 0xC9D3, + 23383 - 11904: 0xA672, + 23384 - 11904: 0xA673, + 23386 - 11904: 0xA7B7, + 23387 - 11904: 0xA7B8, + 23388 - 11904: 0xA7B6, + 23389 - 11904: 0xA7B5, + 23391 - 11904: 0xA973, + 23394 - 11904: 0xCC55, + 23395 - 11904: 0xA975, + 23396 - 11904: 0xA974, + 23397 - 11904: 0xCC56, + 23398 - 11904: 0x8961, + 23400 - 11904: 0x8BB4, + 23401 - 11904: 0xABC4, + 23403 - 11904: 0xAE5D, + 23404 - 11904: 0xD165, + 23405 - 11904: 0x9DC0, + 23406 - 11904: 0xD4F0, + 23408 - 11904: 0xB145, + 23409 - 11904: 0xB447, + 23410 - 11904: 0xD4EF, + 23411 - 11904: 0xB446, + 23412 - 11904: 0x8E48, + 23413 - 11904: 0xB9E5, + 23414 - 11904: 0xFBC5, + 23415 - 11904: 0xE17D, + 23416 - 11904: 0xBEC7, + 23418 - 11904: 0xC0A9, + 23419 - 11904: 0xECD7, + 23420 - 11904: 0xFBC7, + 23421 - 11904: 0xC45E, + 23423 - 11904: 0xC570, + 23424 - 11904: 0xC6CB, + 23425 - 11904: 0xC972, + 23426 - 11904: 0xFA79, + 23427 - 11904: 0xA5A6, + 23428 - 11904: 0xC973, + 23429 - 11904: 0xA676, + 23431 - 11904: 0xA674, + 23432 - 11904: 0xA675, + 23433 - 11904: 0xA677, + 23435 - 11904: 0xA7BA, + 23436 - 11904: 0xA7B9, + 23438 - 11904: 0xCABC, + 23439 - 11904: 0xA7BB, + 23440 - 11904: 0x9E67, + 23442 - 11904: 0xCABD, + 23443 - 11904: 0xCC57, + 23445 - 11904: 0xCC58, + 23446 - 11904: 0x8CD9, + 23447 - 11904: 0xA976, + 23448 - 11904: 0xA978, + 23449 - 11904: 0xA97A, + 23450 - 11904: 0xA977, + 23451 - 11904: 0xA97B, + 23452 - 11904: 0xA979, + 23453 - 11904: 0xFBD2, + 23454 - 11904: 0x8962, + 23455 - 11904: 0x8963, + 23458 - 11904: 0xABC8, + 23459 - 11904: 0xABC5, + 23460 - 11904: 0xABC7, + 23461 - 11904: 0xABC9, + 23462 - 11904: 0xABC6, + 23463 - 11904: 0xD166, + 23464 - 11904: 0xCE77, + 23466 - 11904: 0xFC7D, + 23468 - 11904: 0xD168, + 23469 - 11904: 0xD167, + 23470 - 11904: 0xAE63, + 23472 - 11904: 0xAE5F, + 23475 - 11904: 0xAE60, + 23476 - 11904: 0xAE62, + 23477 - 11904: 0xAE64, + 23478 - 11904: 0xAE61, + 23479 - 11904: 0x8773, + 23480 - 11904: 0xAE66, + 23481 - 11904: 0xAE65, + 23487 - 11904: 0xB14A, + 23488 - 11904: 0xD4F2, + 23489 - 11904: 0xD4F1, + 23490 - 11904: 0xB149, + 23491 - 11904: 0x9F6B, + 23492 - 11904: 0xB148, + 23493 - 11904: 0xB147, + 23494 - 11904: 0xB14B, + 23495 - 11904: 0xB146, + 23498 - 11904: 0xD8D5, + 23499 - 11904: 0xD8D2, + 23500 - 11904: 0xB449, + 23501 - 11904: 0xD8D1, + 23502 - 11904: 0xD8D6, + 23504 - 11904: 0xB44B, + 23505 - 11904: 0xD8D4, + 23506 - 11904: 0xB448, + 23507 - 11904: 0xB44A, + 23508 - 11904: 0xD8D3, + 23509 - 11904: 0xFBCC, + 23510 - 11904: 0xDD48, + 23511 - 11904: 0xFEAE, + 23512 - 11904: 0xDD49, + 23513 - 11904: 0xDD4A, + 23515 - 11904: 0x876D, + 23518 - 11904: 0xB9E6, + 23519 - 11904: 0xB9EE, + 23520 - 11904: 0xE17E, + 23521 - 11904: 0xB9E8, + 23522 - 11904: 0xB9EC, + 23523 - 11904: 0xE1A1, + 23524 - 11904: 0xB9ED, + 23525 - 11904: 0xB9E9, + 23526 - 11904: 0xB9EA, + 23527 - 11904: 0xB9E7, + 23528 - 11904: 0xB9EB, + 23529 - 11904: 0xBC66, + 23530 - 11904: 0xD8D0, + 23531 - 11904: 0xBC67, + 23532 - 11904: 0xBC65, + 23534 - 11904: 0xBC64, + 23535 - 11904: 0xE95D, + 23536 - 11904: 0xBEC8, + 23537 - 11904: 0xECD8, + 23538 - 11904: 0xECD9, + 23539 - 11904: 0xFBD1, + 23541 - 11904: 0xC364, + 23542 - 11904: 0xC45F, + 23544 - 11904: 0xA46F, + 23546 - 11904: 0xA678, + 23551 - 11904: 0xFB75, + 23553 - 11904: 0xABCA, + 23555 - 11904: 0xD169, + 23556 - 11904: 0xAE67, + 23557 - 11904: 0xFBD4, + 23559 - 11904: 0xB14E, + 23560 - 11904: 0xB14D, + 23561 - 11904: 0xB14C, + 23562 - 11904: 0xB44C, + 23563 - 11904: 0xB44D, + 23564 - 11904: 0xD8D7, + 23565 - 11904: 0xB9EF, + 23566 - 11904: 0xBEC9, + 23567 - 11904: 0xA470, + 23568 - 11904: 0xC95C, + 23569 - 11904: 0xA4D6, + 23570 - 11904: 0xC974, + 23571 - 11904: 0xFBD6, + 23572 - 11904: 0xFBD8, + 23573 - 11904: 0xC9D4, + 23574 - 11904: 0xA679, + 23578 - 11904: 0xA97C, + 23580 - 11904: 0x8B5D, + 23582 - 11904: 0x934C, + 23583 - 11904: 0xDD4B, + 23584 - 11904: 0x9AE2, + 23586 - 11904: 0xA471, + 23587 - 11904: 0x8BC9, + 23588 - 11904: 0xA4D7, + 23589 - 11904: 0xC9D5, + 23592 - 11904: 0xCABE, + 23594 - 11904: 0xCABF, + 23596 - 11904: 0xA7BC, + 23600 - 11904: 0xD8D8, + 23601 - 11904: 0xB44E, + 23603 - 11904: 0xDD4C, + 23607 - 11904: 0xC0AA, + 23608 - 11904: 0xA472, + 23609 - 11904: 0xA4A8, + 23610 - 11904: 0xA4D8, + 23611 - 11904: 0xC975, + 23612 - 11904: 0xA5A7, + 23614 - 11904: 0xA7C0, + 23615 - 11904: 0xA7BF, + 23616 - 11904: 0xA7BD, + 23617 - 11904: 0xA7BE, + 23620 - 11904: 0xCC59, + 23621 - 11904: 0xA97E, + 23622 - 11904: 0xA9A1, + 23623 - 11904: 0xCC5A, + 23624 - 11904: 0xA97D, + 23625 - 11904: 0xFBDB, + 23626 - 11904: 0x9FC9, + 23627 - 11904: 0xABCE, + 23628 - 11904: 0xCE78, + 23629 - 11904: 0xABCD, + 23630 - 11904: 0xABCB, + 23631 - 11904: 0xABCC, + 23632 - 11904: 0xAE6A, + 23633 - 11904: 0xAE68, + 23635 - 11904: 0x9F44, + 23636 - 11904: 0xD16B, + 23637 - 11904: 0xAE69, + 23638 - 11904: 0xD16A, + 23640 - 11904: 0xAE5E, + 23641 - 11904: 0xD4F3, + 23644 - 11904: 0xB150, + 23645 - 11904: 0xB151, + 23646 - 11904: 0x98ED, + 23648 - 11904: 0xB14F, + 23650 - 11904: 0xB9F0, + 23651 - 11904: 0xE1A2, + 23652 - 11904: 0xBC68, + 23653 - 11904: 0xBC69, + 23655 - 11904: 0xE561, + 23656 - 11904: 0xC0AB, + 23657 - 11904: 0xEFC2, + 23658 - 11904: 0xEFC3, + 23660 - 11904: 0xC4DD, + 23661 - 11904: 0xF8A8, + 23662 - 11904: 0xC94B, + 23663 - 11904: 0xA4D9, + 23665 - 11904: 0xA473, + 23667 - 11904: 0xC977, + 23668 - 11904: 0xC976, + 23672 - 11904: 0x8CE9, + 23673 - 11904: 0xA67A, + 23674 - 11904: 0xC9D7, + 23675 - 11904: 0xC9D8, + 23676 - 11904: 0xC9D6, + 23678 - 11904: 0xC9D9, + 23685 - 11904: 0xFBDD, + 23686 - 11904: 0xCAC7, + 23688 - 11904: 0xCAC2, + 23689 - 11904: 0xCAC4, + 23690 - 11904: 0xCAC6, + 23691 - 11904: 0xCAC3, + 23692 - 11904: 0xA7C4, + 23693 - 11904: 0xCAC0, + 23695 - 11904: 0xCAC1, + 23696 - 11904: 0xA7C1, + 23697 - 11904: 0xA7C2, + 23698 - 11904: 0xCAC5, + 23699 - 11904: 0xCAC8, + 23700 - 11904: 0xA7C3, + 23701 - 11904: 0xCAC9, + 23705 - 11904: 0x8DF2, + 23706 - 11904: 0x8964, + 23708 - 11904: 0xFDF2, + 23709 - 11904: 0xCC68, + 23710 - 11904: 0x934D, + 23711 - 11904: 0xCC62, + 23712 - 11904: 0xCC5D, + 23713 - 11904: 0xA9A3, + 23714 - 11904: 0xCC65, + 23715 - 11904: 0xCC63, + 23716 - 11904: 0xCC5C, + 23717 - 11904: 0xCC69, + 23718 - 11904: 0xCC6C, + 23719 - 11904: 0xCC67, + 23720 - 11904: 0xCC60, + 23721 - 11904: 0xA9A5, + 23722 - 11904: 0xCC66, + 23723 - 11904: 0xA9A6, + 23724 - 11904: 0xCC61, + 23725 - 11904: 0xCC64, + 23726 - 11904: 0xCC5B, + 23727 - 11904: 0xCC5F, + 23728 - 11904: 0xCC6B, + 23729 - 11904: 0xA9A7, + 23731 - 11904: 0xA9A8, + 23733 - 11904: 0xCC5E, + 23734 - 11904: 0xCC6A, + 23735 - 11904: 0xA9A2, + 23736 - 11904: 0xA9A4, + 23738 - 11904: 0xFBE7, + 23745 - 11904: 0xA0F2, + 23746 - 11904: 0x9868, + 23750 - 11904: 0xCEAB, + 23751 - 11904: 0xCEA4, + 23752 - 11904: 0xCEAA, + 23753 - 11904: 0xCEA3, + 23754 - 11904: 0xCEA5, + 23755 - 11904: 0xCE7D, + 23756 - 11904: 0xCE7B, + 23758 - 11904: 0xCEAC, + 23759 - 11904: 0xCEA9, + 23760 - 11904: 0xCE79, + 23761 - 11904: 0x9F58, + 23762 - 11904: 0xABD0, + 23763 - 11904: 0xCEA7, + 23764 - 11904: 0xCEA8, + 23765 - 11904: 0x8CE6, + 23766 - 11904: 0xCEA6, + 23767 - 11904: 0xCE7C, + 23768 - 11904: 0xCE7A, + 23769 - 11904: 0xABCF, + 23770 - 11904: 0xCEA2, + 23771 - 11904: 0xCE7E, + 23774 - 11904: 0xCEA1, + 23775 - 11904: 0xCEAD, + 23781 - 11904: 0x8D73, + 23784 - 11904: 0xAE6F, + 23785 - 11904: 0xFBDE, + 23786 - 11904: 0xAE6E, + 23788 - 11904: 0xD16C, + 23789 - 11904: 0xAE6B, + 23790 - 11904: 0xD16E, + 23791 - 11904: 0xFBDF, + 23792 - 11904: 0xAE70, + 23793 - 11904: 0xD16F, + 23796 - 11904: 0xAE73, + 23797 - 11904: 0x8C48, + 23798 - 11904: 0xAE71, + 23799 - 11904: 0xD170, + 23800 - 11904: 0xCEAE, + 23801 - 11904: 0xD172, + 23803 - 11904: 0xAE6D, + 23804 - 11904: 0x8774, + 23805 - 11904: 0xAE6C, + 23807 - 11904: 0xD16D, + 23808 - 11904: 0xD171, + 23809 - 11904: 0xAE72, + 23814 - 11904: 0xB153, + 23815 - 11904: 0xB152, + 23819 - 11904: 0xD4F5, + 23820 - 11904: 0xD4F9, + 23821 - 11904: 0xD4FB, + 23822 - 11904: 0xB154, + 23823 - 11904: 0xD4FE, + 23824 - 11904: 0xFBE3, + 23825 - 11904: 0xB158, + 23826 - 11904: 0xD541, + 23828 - 11904: 0xB15A, + 23829 - 11904: 0x8DA8, + 23830 - 11904: 0xB156, + 23831 - 11904: 0xB15E, + 23832 - 11904: 0xFBE4, + 23833 - 11904: 0xB15B, + 23834 - 11904: 0xD4F7, + 23835 - 11904: 0xB155, + 23837 - 11904: 0xD4F6, + 23838 - 11904: 0xD4F4, + 23839 - 11904: 0xD543, + 23840 - 11904: 0xD4F8, + 23842 - 11904: 0xB157, + 23843 - 11904: 0xD542, + 23844 - 11904: 0xB15C, + 23845 - 11904: 0xD4FD, + 23846 - 11904: 0xD4FC, + 23847 - 11904: 0xB15D, + 23848 - 11904: 0xD4FA, + 23849 - 11904: 0xB159, + 23852 - 11904: 0x9C75, + 23854 - 11904: 0xD544, + 23855 - 11904: 0x9878, + 23856 - 11904: 0xD540, + 23857 - 11904: 0xD8E7, + 23858 - 11904: 0xD8EE, + 23859 - 11904: 0xD8E3, + 23860 - 11904: 0xB451, + 23861 - 11904: 0xD8DF, + 23862 - 11904: 0xD8EF, + 23863 - 11904: 0xD8D9, + 23864 - 11904: 0xD8EC, + 23865 - 11904: 0xD8EA, + 23866 - 11904: 0xD8E4, + 23868 - 11904: 0xD8ED, + 23869 - 11904: 0xD8E6, + 23870 - 11904: 0x8D60, + 23871 - 11904: 0xD8DE, + 23872 - 11904: 0xD8F0, + 23873 - 11904: 0xD8DC, + 23874 - 11904: 0xD8E9, + 23875 - 11904: 0xD8DA, + 23877 - 11904: 0xD8F1, + 23878 - 11904: 0xFBE5, + 23879 - 11904: 0xB452, + 23880 - 11904: 0x8D61, + 23881 - 11904: 0xD8EB, + 23882 - 11904: 0xDD4F, + 23883 - 11904: 0xD8DD, + 23884 - 11904: 0xB44F, + 23886 - 11904: 0xD8E1, + 23888 - 11904: 0xB450, + 23889 - 11904: 0xD8E0, + 23890 - 11904: 0xD8E5, + 23893 - 11904: 0xD8E2, + 23894 - 11904: 0x8D62, + 23895 - 11904: 0xA0A1, + 23897 - 11904: 0xD8E8, + 23899 - 11904: 0x9C40, + 23902 - 11904: 0xDD53, + 23906 - 11904: 0xDD56, + 23907 - 11904: 0xDD4E, + 23909 - 11904: 0xDD50, + 23911 - 11904: 0xDD55, + 23912 - 11904: 0xDD54, + 23913 - 11904: 0xB743, + 23915 - 11904: 0xD8DB, + 23916 - 11904: 0xDD52, + 23919 - 11904: 0xB744, + 23920 - 11904: 0x98AD, + 23921 - 11904: 0xDD4D, + 23922 - 11904: 0xDD51, + 23924 - 11904: 0x9EEA, + 23927 - 11904: 0xE1A9, + 23928 - 11904: 0x8CEC, + 23929 - 11904: 0xE1B0, + 23930 - 11904: 0xE1A7, + 23931 - 11904: 0x8CD4, + 23932 - 11904: 0xE1AE, + 23933 - 11904: 0xE1A5, + 23934 - 11904: 0xE1AD, + 23935 - 11904: 0xE1B1, + 23936 - 11904: 0xE1A4, + 23937 - 11904: 0xE1A8, + 23938 - 11904: 0xE1A3, + 23940 - 11904: 0xB9F1, + 23941 - 11904: 0x9CEB, + 23942 - 11904: 0xE1A6, + 23943 - 11904: 0xB9F2, + 23944 - 11904: 0xE1AC, + 23945 - 11904: 0xE1AB, + 23946 - 11904: 0xE1AA, + 23947 - 11904: 0xFBE0, + 23949 - 11904: 0xE1AF, + 23950 - 11904: 0x9F51, + 23954 - 11904: 0xE565, + 23955 - 11904: 0xE567, + 23956 - 11904: 0xBC6B, + 23957 - 11904: 0xE568, + 23959 - 11904: 0xE563, + 23961 - 11904: 0xE562, + 23962 - 11904: 0xE56C, + 23964 - 11904: 0xE56A, + 23965 - 11904: 0xBC6A, + 23966 - 11904: 0xE56D, + 23967 - 11904: 0xE564, + 23968 - 11904: 0xE569, + 23969 - 11904: 0xE56B, + 23970 - 11904: 0xE566, + 23972 - 11904: 0x8D65, + 23975 - 11904: 0xE961, + 23976 - 11904: 0xE966, + 23977 - 11904: 0xE960, + 23978 - 11904: 0xE965, + 23979 - 11904: 0x9CF1, + 23980 - 11904: 0xE95E, + 23981 - 11904: 0xE968, + 23982 - 11904: 0xE964, + 23983 - 11904: 0xE969, + 23984 - 11904: 0xE963, + 23985 - 11904: 0xE95F, + 23986 - 11904: 0xE967, + 23988 - 11904: 0xE96A, + 23989 - 11904: 0xE962, + 23990 - 11904: 0xFC58, + 23991 - 11904: 0xECDA, + 23992 - 11904: 0xC0AF, + 23993 - 11904: 0x8D66, + 23994 - 11904: 0xC0AD, + 23996 - 11904: 0xC0AC, + 23997 - 11904: 0xC0AE, + 24000 - 11904: 0xEFC4, + 24001 - 11904: 0x9654, + 24002 - 11904: 0xF172, + 24003 - 11904: 0xF1FD, + 24006 - 11904: 0xF444, + 24007 - 11904: 0xF445, + 24009 - 11904: 0xC460, + 24011 - 11904: 0xF5C9, + 24013 - 11904: 0xC4DE, + 24015 - 11904: 0xF5CA, + 24017 - 11904: 0xF6DE, + 24018 - 11904: 0xC572, + 24020 - 11904: 0xC571, + 24021 - 11904: 0xF6DD, + 24022 - 11904: 0xC5C9, + 24023 - 11904: 0xFBE8, + 24024 - 11904: 0xF7D6, + 24027 - 11904: 0xC6CC, + 24029 - 11904: 0xA474, + 24030 - 11904: 0xA67B, + 24031 - 11904: 0xC9DA, + 24032 - 11904: 0xCACA, + 24033 - 11904: 0xA8B5, + 24034 - 11904: 0xB15F, + 24037 - 11904: 0xA475, + 24038 - 11904: 0xA5AA, + 24039 - 11904: 0xA5A9, + 24040 - 11904: 0xA5A8, + 24043 - 11904: 0xA7C5, + 24046 - 11904: 0xAE74, + 24048 - 11904: 0xDD57, + 24049 - 11904: 0xA476, + 24050 - 11904: 0xA477, + 24051 - 11904: 0xA478, + 24052 - 11904: 0xA4DA, + 24053 - 11904: 0x9FCE, + 24055 - 11904: 0xABD1, + 24057 - 11904: 0xCEAF, + 24061 - 11904: 0xB453, + 24062 - 11904: 0xA479, + 24063 - 11904: 0xC95D, + 24066 - 11904: 0xA5AB, + 24067 - 11904: 0xA5AC, + 24068 - 11904: 0xC978, + 24070 - 11904: 0xA67C, + 24073 - 11904: 0xFBFC, + 24074 - 11904: 0xCACB, + 24075 - 11904: 0x9AE4, + 24076 - 11904: 0xA7C6, + 24078 - 11904: 0xCACC, + 24081 - 11904: 0xA9AE, + 24082 - 11904: 0x9F75, + 24084 - 11904: 0xCC6E, + 24085 - 11904: 0xA9AC, + 24086 - 11904: 0xA9AB, + 24087 - 11904: 0xCC6D, + 24088 - 11904: 0xA9A9, + 24089 - 11904: 0xCC6F, + 24090 - 11904: 0xA9AA, + 24091 - 11904: 0xA9AD, + 24093 - 11904: 0xABD2, + 24095 - 11904: 0xABD4, + 24096 - 11904: 0xCEB3, + 24097 - 11904: 0xCEB0, + 24098 - 11904: 0xCEB1, + 24099 - 11904: 0xCEB2, + 24100 - 11904: 0xCEB4, + 24101 - 11904: 0xABD3, + 24104 - 11904: 0xD174, + 24105 - 11904: 0xD173, + 24107 - 11904: 0xAE76, + 24109 - 11904: 0xAE75, + 24110 - 11904: 0xFBF1, + 24115 - 11904: 0xB162, + 24116 - 11904: 0xD546, + 24118 - 11904: 0xB161, + 24119 - 11904: 0xB163, + 24120 - 11904: 0xB160, + 24125 - 11904: 0xB455, + 24126 - 11904: 0xD545, + 24128 - 11904: 0xB456, + 24129 - 11904: 0xD8F3, + 24130 - 11904: 0x8D69, + 24131 - 11904: 0xB457, + 24132 - 11904: 0xD8F2, + 24133 - 11904: 0xB454, + 24136 - 11904: 0x934F, + 24138 - 11904: 0xDD5A, + 24139 - 11904: 0xDD5C, + 24140 - 11904: 0xB745, + 24141 - 11904: 0xDD5B, + 24142 - 11904: 0xDD59, + 24143 - 11904: 0xDD58, + 24147 - 11904: 0xE1B4, + 24148 - 11904: 0xB9F7, + 24149 - 11904: 0xB9F5, + 24151 - 11904: 0xB9F6, + 24152 - 11904: 0xE1B2, + 24153 - 11904: 0xE1B3, + 24155 - 11904: 0xB9F3, + 24156 - 11904: 0xE571, + 24157 - 11904: 0xE56F, + 24158 - 11904: 0x934E, + 24159 - 11904: 0xBC6D, + 24160 - 11904: 0xE570, + 24161 - 11904: 0xBC6E, + 24162 - 11904: 0xBC6C, + 24163 - 11904: 0xB9F4, + 24166 - 11904: 0xE96D, + 24167 - 11904: 0xE96B, + 24168 - 11904: 0xE96C, + 24169 - 11904: 0xE56E, + 24170 - 11904: 0xECDC, + 24171 - 11904: 0xC0B0, + 24172 - 11904: 0xECDB, + 24173 - 11904: 0xEFC5, + 24174 - 11904: 0xEFC6, + 24175 - 11904: 0xE96E, + 24176 - 11904: 0xF1FE, + 24178 - 11904: 0xA47A, + 24179 - 11904: 0xA5AD, + 24180 - 11904: 0xA67E, + 24181 - 11904: 0xFBF3, + 24182 - 11904: 0xA67D, + 24184 - 11904: 0xA9AF, + 24185 - 11904: 0xB746, + 24186 - 11904: 0xFBF4, + 24187 - 11904: 0xA4DB, + 24188 - 11904: 0xA5AE, + 24189 - 11904: 0xABD5, + 24190 - 11904: 0xB458, + 24191 - 11904: 0xC6CE, + 24192 - 11904: 0xC979, + 24194 - 11904: 0xC97A, + 24195 - 11904: 0xFBC3, + 24196 - 11904: 0xC9DC, + 24198 - 11904: 0x8965, + 24199 - 11904: 0xA7C8, + 24200 - 11904: 0xCAD0, + 24201 - 11904: 0xCACE, + 24202 - 11904: 0xA7C9, + 24203 - 11904: 0xCACD, + 24204 - 11904: 0xCACF, + 24205 - 11904: 0xCAD1, + 24207 - 11904: 0xA7C7, + 24210 - 11904: 0x8C7A, + 24213 - 11904: 0xA9B3, + 24214 - 11904: 0xA9B4, + 24215 - 11904: 0xA9B1, + 24217 - 11904: 0x8C7B, + 24218 - 11904: 0xA9B0, + 24219 - 11904: 0xCEB8, + 24220 - 11904: 0xA9B2, + 24224 - 11904: 0xABD6, + 24226 - 11904: 0xCEB7, + 24227 - 11904: 0xCEB9, + 24228 - 11904: 0xCEB6, + 24229 - 11904: 0xCEBA, + 24230 - 11904: 0xABD7, + 24231 - 11904: 0xAE79, + 24232 - 11904: 0xD175, + 24234 - 11904: 0xD177, + 24235 - 11904: 0xAE77, + 24236 - 11904: 0xD178, + 24237 - 11904: 0xAE78, + 24238 - 11904: 0xD176, + 24240 - 11904: 0xCEB5, + 24241 - 11904: 0xD547, + 24242 - 11904: 0xD54A, + 24243 - 11904: 0xD54B, + 24244 - 11904: 0xD548, + 24245 - 11904: 0xB167, + 24246 - 11904: 0xB166, + 24247 - 11904: 0xB164, + 24248 - 11904: 0xB165, + 24249 - 11904: 0xD549, + 24253 - 11904: 0x8D6A, + 24254 - 11904: 0xB168, + 24257 - 11904: 0xB45A, + 24258 - 11904: 0xB45B, + 24260 - 11904: 0xB45C, + 24261 - 11904: 0xDD5D, + 24262 - 11904: 0xDD5F, + 24263 - 11904: 0xDD61, + 24264 - 11904: 0xB748, + 24265 - 11904: 0xB747, + 24266 - 11904: 0xB459, + 24267 - 11904: 0xDD60, + 24268 - 11904: 0xDD5E, + 24269 - 11904: 0x9353, + 24270 - 11904: 0xE1B8, + 24272 - 11904: 0xFBF9, + 24273 - 11904: 0xE1B6, + 24274 - 11904: 0xE1BC, + 24275 - 11904: 0xB9F8, + 24276 - 11904: 0xE1BD, + 24277 - 11904: 0xE1BA, + 24278 - 11904: 0xB9F9, + 24279 - 11904: 0xE1B7, + 24280 - 11904: 0xE1B5, + 24281 - 11904: 0xE1BB, + 24282 - 11904: 0xBC70, + 24283 - 11904: 0xE573, + 24284 - 11904: 0xE1B9, + 24285 - 11904: 0xBC72, + 24286 - 11904: 0xE574, + 24287 - 11904: 0xBC71, + 24288 - 11904: 0xBC74, + 24289 - 11904: 0xE575, + 24290 - 11904: 0xBC6F, + 24291 - 11904: 0xBC73, + 24293 - 11904: 0xE973, + 24294 - 11904: 0xE971, + 24295 - 11904: 0xE970, + 24296 - 11904: 0xE972, + 24297 - 11904: 0xE96F, + 24300 - 11904: 0xC366, + 24302 - 11904: 0xF446, + 24303 - 11904: 0xF447, + 24305 - 11904: 0xF5CB, + 24306 - 11904: 0xF6DF, + 24307 - 11904: 0xC655, + 24308 - 11904: 0xFBFD, + 24310 - 11904: 0xA9B5, + 24311 - 11904: 0xA7CA, + 24312 - 11904: 0x9059, + 24313 - 11904: 0xFC40, + 24314 - 11904: 0xABD8, + 24315 - 11904: 0xFC41, + 24316 - 11904: 0xFC43, + 24318 - 11904: 0xA47B, + 24319 - 11904: 0xA4DC, + 24321 - 11904: 0xA5AF, + 24322 - 11904: 0xC9DD, + 24324 - 11904: 0xA7CB, + 24325 - 11904: 0xCAD2, + 24327 - 11904: 0xCEBB, + 24328 - 11904: 0xABD9, + 24330 - 11904: 0xB9FA, + 24331 - 11904: 0xA47C, + 24332 - 11904: 0x9FD8, + 24333 - 11904: 0xFC46, + 24334 - 11904: 0x9362, + 24335 - 11904: 0xA6A1, + 24338 - 11904: 0xB749, + 24339 - 11904: 0xA47D, + 24340 - 11904: 0xA4DD, + 24341 - 11904: 0xA4DE, + 24343 - 11904: 0xA5B1, + 24344 - 11904: 0xA5B0, + 24346 - 11904: 0xC9DE, + 24347 - 11904: 0xA6A2, + 24349 - 11904: 0xCAD3, + 24351 - 11904: 0xA7CC, + 24354 - 11904: 0xCC71, + 24355 - 11904: 0xCC72, + 24356 - 11904: 0xCC73, + 24357 - 11904: 0x8D6B, + 24358 - 11904: 0xA9B6, + 24359 - 11904: 0xA9B7, + 24360 - 11904: 0xCC70, + 24361 - 11904: 0xA9B8, + 24365 - 11904: 0xABDA, + 24366 - 11904: 0xCEBC, + 24368 - 11904: 0xD17A, + 24369 - 11904: 0xAE7A, + 24371 - 11904: 0xD179, + 24373 - 11904: 0xB169, + 24374 - 11904: 0xD54C, + 24375 - 11904: 0xB16A, + 24376 - 11904: 0xD54D, + 24378 - 11904: 0xFC4C, + 24379 - 11904: 0x8CFE, + 24380 - 11904: 0xB45D, + 24384 - 11904: 0xDD62, + 24387 - 11904: 0xE1BF, + 24388 - 11904: 0xE1BE, + 24390 - 11904: 0xB9FB, + 24392 - 11904: 0xBC75, + 24393 - 11904: 0xE576, + 24394 - 11904: 0xBECA, + 24395 - 11904: 0xE974, + 24396 - 11904: 0xC0B1, + 24397 - 11904: 0x95B8, + 24398 - 11904: 0xC573, + 24399 - 11904: 0xF7D8, + 24400 - 11904: 0xC6D0, + 24401 - 11904: 0x8BCA, + 24404 - 11904: 0xCC74, + 24406 - 11904: 0xCEBD, + 24407 - 11904: 0xB16B, + 24408 - 11904: 0xFC4F, + 24409 - 11904: 0xB74A, + 24412 - 11904: 0x987A, + 24413 - 11904: 0xC255, + 24417 - 11904: 0xC6D1, + 24418 - 11904: 0xA7CE, + 24419 - 11904: 0xFC51, + 24420 - 11904: 0xA7CD, + 24421 - 11904: 0xABDB, + 24423 - 11904: 0xD17B, + 24425 - 11904: 0xB16D, + 24426 - 11904: 0xB343, + 24427 - 11904: 0xB16E, + 24428 - 11904: 0xB16C, + 24429 - 11904: 0xB45E, + 24431 - 11904: 0xE1C0, + 24432 - 11904: 0xB9FC, + 24433 - 11904: 0xBC76, + 24434 - 11904: 0xFC54, + 24435 - 11904: 0xC94C, + 24436 - 11904: 0xC9DF, + 24438 - 11904: 0xCAD5, + 24439 - 11904: 0xA7CF, + 24440 - 11904: 0xCAD4, + 24441 - 11904: 0xA7D0, + 24443 - 11904: 0xFAAF, + 24444 - 11904: 0xA9BC, + 24445 - 11904: 0xCC77, + 24446 - 11904: 0xCC76, + 24447 - 11904: 0xA9BB, + 24448 - 11904: 0xA9B9, + 24449 - 11904: 0xA9BA, + 24450 - 11904: 0xCC75, + 24451 - 11904: 0x8D6C, + 24453 - 11904: 0xABDD, + 24454 - 11904: 0xCEBE, + 24455 - 11904: 0xABE0, + 24456 - 11904: 0xABDC, + 24457 - 11904: 0xABE2, + 24458 - 11904: 0xABDE, + 24459 - 11904: 0xABDF, + 24460 - 11904: 0xABE1, + 24464 - 11904: 0xAE7D, + 24465 - 11904: 0xAE7C, + 24466 - 11904: 0xAE7B, + 24470 - 11904: 0xD54F, + 24471 - 11904: 0xB16F, + 24472 - 11904: 0xB172, + 24473 - 11904: 0xB170, + 24475 - 11904: 0xD54E, + 24476 - 11904: 0xB175, + 24478 - 11904: 0xB171, + 24479 - 11904: 0xD550, + 24480 - 11904: 0xB174, + 24481 - 11904: 0xB173, + 24484 - 11904: 0xFA61, + 24485 - 11904: 0xD8F6, + 24486 - 11904: 0xD8F5, + 24487 - 11904: 0xFC57, + 24488 - 11904: 0xB461, + 24489 - 11904: 0xB45F, + 24490 - 11904: 0xB460, + 24491 - 11904: 0xD8F7, + 24492 - 11904: 0xB74B, + 24493 - 11904: 0xDD64, + 24494 - 11904: 0xB74C, + 24495 - 11904: 0xDD63, + 24497 - 11904: 0x9B70, + 24498 - 11904: 0xE577, + 24501 - 11904: 0xBC78, + 24502 - 11904: 0xE1C1, + 24503 - 11904: 0xBC77, + 24505 - 11904: 0xB9FD, + 24506 - 11904: 0xA051, + 24507 - 11904: 0xECDE, + 24508 - 11904: 0xE975, + 24509 - 11904: 0xC0B2, + 24510 - 11904: 0xECDD, + 24511 - 11904: 0xF240, + 24512 - 11904: 0xF448, + 24513 - 11904: 0xF449, + 24514 - 11904: 0x8C7C, + 24515 - 11904: 0xA4DF, + 24516 - 11904: 0x8BCB, + 24517 - 11904: 0xA5B2, + 24521 - 11904: 0xC97B, + 24524 - 11904: 0xA7D2, + 24525 - 11904: 0xA7D4, + 24527 - 11904: 0xC9E2, + 24528 - 11904: 0xCAD8, + 24529 - 11904: 0xCAD7, + 24530 - 11904: 0xCAD6, + 24532 - 11904: 0xC9E1, + 24533 - 11904: 0xC9E0, + 24534 - 11904: 0xA6A4, + 24535 - 11904: 0xA7D3, + 24536 - 11904: 0xA7D1, + 24537 - 11904: 0xA6A3, + 24539 - 11904: 0x936E, + 24541 - 11904: 0xA9BD, + 24542 - 11904: 0xCC78, + 24543 - 11904: 0xFCD5, + 24544 - 11904: 0xA9BE, + 24545 - 11904: 0xCADD, + 24547 - 11904: 0xCADF, + 24548 - 11904: 0xCADE, + 24549 - 11904: 0xCC79, + 24552 - 11904: 0xCADA, + 24554 - 11904: 0xA7D8, + 24555 - 11904: 0xA7D6, + 24557 - 11904: 0xCAD9, + 24558 - 11904: 0xCADB, + 24559 - 11904: 0xCAE1, + 24561 - 11904: 0xA7D5, + 24563 - 11904: 0xCADC, + 24564 - 11904: 0xCAE5, + 24565 - 11904: 0xA9C0, + 24567 - 11904: 0xCAE2, + 24568 - 11904: 0xA7D7, + 24570 - 11904: 0xCAE0, + 24571 - 11904: 0xCAE3, + 24573 - 11904: 0xA9BF, + 24575 - 11904: 0xA9C1, + 24576 - 11904: 0xCAE4, + 24585 - 11904: 0xCCAF, + 24586 - 11904: 0xCCA2, + 24587 - 11904: 0xCC7E, + 24588 - 11904: 0xCCAE, + 24589 - 11904: 0xCCA9, + 24590 - 11904: 0xABE7, + 24591 - 11904: 0xA9C2, + 24592 - 11904: 0xCCAA, + 24593 - 11904: 0xCCAD, + 24594 - 11904: 0xABE3, + 24595 - 11904: 0xCCAC, + 24596 - 11904: 0xA9C3, + 24597 - 11904: 0xA9C8, + 24598 - 11904: 0xA9C6, + 24599 - 11904: 0xCCA3, + 24601 - 11904: 0xCC7C, + 24602 - 11904: 0xCCA5, + 24603 - 11904: 0xA9CD, + 24604 - 11904: 0xCCB0, + 24605 - 11904: 0xABE4, + 24606 - 11904: 0xCCA6, + 24608 - 11904: 0xABE5, + 24609 - 11904: 0xA9C9, + 24610 - 11904: 0xCCA8, + 24611 - 11904: 0xFCA9, + 24612 - 11904: 0xCECD, + 24613 - 11904: 0xABE6, + 24614 - 11904: 0xCC7B, + 24615 - 11904: 0xA9CA, + 24616 - 11904: 0xABE8, + 24617 - 11904: 0xA9CB, + 24618 - 11904: 0xA9C7, + 24619 - 11904: 0xA9CC, + 24620 - 11904: 0xCCA7, + 24621 - 11904: 0xCC7A, + 24622 - 11904: 0xCCAB, + 24623 - 11904: 0xA9C4, + 24625 - 11904: 0xFC61, + 24626 - 11904: 0xCC7D, + 24627 - 11904: 0xCCA4, + 24628 - 11904: 0xCCA1, + 24629 - 11904: 0xA9C5, + 24631 - 11904: 0xCEBF, + 24633 - 11904: 0xCEC0, + 24635 - 11904: 0x8966, + 24640 - 11904: 0xCECA, + 24641 - 11904: 0xD1A1, + 24642 - 11904: 0xCECB, + 24643 - 11904: 0xABEE, + 24644 - 11904: 0xCECE, + 24645 - 11904: 0xCEC4, + 24646 - 11904: 0xABED, + 24647 - 11904: 0xCEC6, + 24649 - 11904: 0xCEC7, + 24650 - 11904: 0xFACB, + 24652 - 11904: 0xCEC9, + 24653 - 11904: 0xABE9, + 24656 - 11904: 0xAEA3, + 24658 - 11904: 0xF9DA, + 24659 - 11904: 0xCEC5, + 24660 - 11904: 0xCEC1, + 24661 - 11904: 0xAEA4, + 24664 - 11904: 0xCECF, + 24665 - 11904: 0xAE7E, + 24666 - 11904: 0xD17D, + 24667 - 11904: 0xCEC8, + 24669 - 11904: 0xD17C, + 24670 - 11904: 0xCEC3, + 24671 - 11904: 0xCECC, + 24674 - 11904: 0xABEC, + 24675 - 11904: 0xAEA1, + 24676 - 11904: 0xABF2, + 24677 - 11904: 0xAEA2, + 24678 - 11904: 0xCED0, + 24679 - 11904: 0xD17E, + 24680 - 11904: 0xABEB, + 24681 - 11904: 0xAEA6, + 24682 - 11904: 0xABF1, + 24683 - 11904: 0xABF0, + 24684 - 11904: 0xABEF, + 24685 - 11904: 0xAEA5, + 24686 - 11904: 0xCED1, + 24687 - 11904: 0xAEA7, + 24688 - 11904: 0xABEA, + 24690 - 11904: 0xCEC2, + 24693 - 11904: 0x937A, + 24695 - 11904: 0xA0E0, + 24702 - 11904: 0x936B, + 24703 - 11904: 0xB176, + 24704 - 11904: 0xD1A4, + 24705 - 11904: 0xD1A6, + 24707 - 11904: 0xD1A8, + 24708 - 11904: 0xAEA8, + 24709 - 11904: 0xAEAE, + 24710 - 11904: 0xD553, + 24711 - 11904: 0xD1AC, + 24712 - 11904: 0xD1A3, + 24713 - 11904: 0xB178, + 24714 - 11904: 0xD551, + 24716 - 11904: 0xAEAD, + 24717 - 11904: 0xAEAB, + 24718 - 11904: 0xD1AE, + 24720 - 11904: 0xD552, + 24722 - 11904: 0xD1A5, + 24724 - 11904: 0xAEAC, + 24725 - 11904: 0xD1A9, + 24726 - 11904: 0xAEAF, + 24727 - 11904: 0xD1AB, + 24730 - 11904: 0xAEAA, + 24731 - 11904: 0xD1AA, + 24732 - 11904: 0xD1AD, + 24733 - 11904: 0xD1A7, + 24734 - 11904: 0xFC6B, + 24735 - 11904: 0xAEA9, + 24736 - 11904: 0xB179, + 24738 - 11904: 0xD1A2, + 24739 - 11904: 0xB177, + 24740 - 11904: 0xFC6C, + 24743 - 11904: 0x9468, + 24744 - 11904: 0xB17A, + 24752 - 11904: 0xD555, + 24753 - 11904: 0xD55E, + 24754 - 11904: 0xB464, + 24755 - 11904: 0xFC6D, + 24756 - 11904: 0xB17C, + 24757 - 11904: 0xB1A3, + 24758 - 11904: 0xB465, + 24759 - 11904: 0xD560, + 24760 - 11904: 0xB1AA, + 24761 - 11904: 0xD8F9, + 24762 - 11904: 0xD556, + 24763 - 11904: 0xB1A2, + 24764 - 11904: 0xB1A5, + 24765 - 11904: 0xB17E, + 24766 - 11904: 0xD554, + 24767 - 11904: 0xD562, + 24768 - 11904: 0xD565, + 24769 - 11904: 0xD949, + 24771 - 11904: 0xD563, + 24772 - 11904: 0xD8FD, + 24773 - 11904: 0xB1A1, + 24774 - 11904: 0xB1A8, + 24775 - 11904: 0xB1AC, + 24776 - 11904: 0xD55D, + 24777 - 11904: 0xD8F8, + 24778 - 11904: 0xD561, + 24779 - 11904: 0xB17B, + 24780 - 11904: 0xD8FA, + 24781 - 11904: 0xD564, + 24782 - 11904: 0xD8FC, + 24783 - 11904: 0xD559, + 24785 - 11904: 0xB462, + 24787 - 11904: 0xD557, + 24788 - 11904: 0xD558, + 24789 - 11904: 0xB1A7, + 24791 - 11904: 0x8D71, + 24792 - 11904: 0xB1A6, + 24793 - 11904: 0xD55B, + 24794 - 11904: 0xB1AB, + 24795 - 11904: 0xD55F, + 24796 - 11904: 0xB1A4, + 24797 - 11904: 0xD55C, + 24798 - 11904: 0xFD64, + 24799 - 11904: 0xB1A9, + 24800 - 11904: 0xB466, + 24801 - 11904: 0xB463, + 24802 - 11904: 0xD8FB, + 24803 - 11904: 0x99BA, + 24804 - 11904: 0xD55A, + 24806 - 11904: 0xB17D, + 24807 - 11904: 0x9AD0, + 24808 - 11904: 0x9A61, + 24809 - 11904: 0xA0E5, + 24816 - 11904: 0xB46B, + 24817 - 11904: 0xB46F, + 24818 - 11904: 0xD940, + 24819 - 11904: 0xB751, + 24820 - 11904: 0xB46D, + 24821 - 11904: 0xD944, + 24822 - 11904: 0xB471, + 24823 - 11904: 0xDD65, + 24824 - 11904: 0xD946, + 24825 - 11904: 0xB753, + 24826 - 11904: 0xB469, + 24827 - 11904: 0xB46C, + 24828 - 11904: 0xD947, + 24829 - 11904: 0xA05B, + 24830 - 11904: 0xD948, + 24831 - 11904: 0xD94E, + 24832 - 11904: 0xB473, + 24833 - 11904: 0xB754, + 24835 - 11904: 0xD94A, + 24836 - 11904: 0xD94F, + 24837 - 11904: 0xD943, + 24838 - 11904: 0xB75E, + 24839 - 11904: 0x96AC, + 24840 - 11904: 0xB755, + 24841 - 11904: 0xB472, + 24842 - 11904: 0xD941, + 24843 - 11904: 0xD950, + 24844 - 11904: 0x9740, + 24845 - 11904: 0xB75D, + 24846 - 11904: 0xB470, + 24847 - 11904: 0xB74E, + 24848 - 11904: 0xD94D, + 24850 - 11904: 0xB474, + 24851 - 11904: 0xD945, + 24852 - 11904: 0xD8FE, + 24853 - 11904: 0xB46A, + 24854 - 11904: 0xD942, + 24856 - 11904: 0xD94B, + 24857 - 11904: 0x9EF1, + 24858 - 11904: 0xB74D, + 24859 - 11904: 0xB752, + 24860 - 11904: 0xB467, + 24861 - 11904: 0xD94C, + 24863 - 11904: 0xB750, + 24866 - 11904: 0x8C4D, + 24867 - 11904: 0xB468, + 24871 - 11904: 0xB75C, + 24872 - 11904: 0xE1C3, + 24873 - 11904: 0xDD70, + 24875 - 11904: 0xDD68, + 24876 - 11904: 0xE1C2, + 24878 - 11904: 0xDD6C, + 24879 - 11904: 0xDD6E, + 24880 - 11904: 0x9F7E, + 24882 - 11904: 0xDD6B, + 24884 - 11904: 0xB75B, + 24886 - 11904: 0xDD6A, + 24887 - 11904: 0xB75F, + 24891 - 11904: 0xE1D2, + 24893 - 11904: 0x8D72, + 24894 - 11904: 0xB75A, + 24895 - 11904: 0xBA40, + 24896 - 11904: 0xDD71, + 24897 - 11904: 0xE1C4, + 24898 - 11904: 0xFC76, + 24900 - 11904: 0xB758, + 24901 - 11904: 0xDD69, + 24902 - 11904: 0xDD6D, + 24903 - 11904: 0xB9FE, + 24904 - 11904: 0xB74F, + 24905 - 11904: 0xDD66, + 24906 - 11904: 0xDD67, + 24907 - 11904: 0xBA41, + 24908 - 11904: 0xB757, + 24909 - 11904: 0xB759, + 24910 - 11904: 0xB756, + 24911 - 11904: 0xDD6F, + 24912 - 11904: 0x96A9, + 24914 - 11904: 0xE1C8, + 24915 - 11904: 0xE1C9, + 24916 - 11904: 0xE1CE, + 24917 - 11904: 0xBC7D, + 24918 - 11904: 0xE1D5, + 24920 - 11904: 0xBA47, + 24921 - 11904: 0xA06E, + 24922 - 11904: 0xBA46, + 24923 - 11904: 0xE1D0, + 24924 - 11904: 0xFCAA, + 24925 - 11904: 0xBC7C, + 24926 - 11904: 0xE1C5, + 24927 - 11904: 0xBA45, + 24928 - 11904: 0xFBCD, + 24929 - 11904: 0xE1D4, + 24930 - 11904: 0xBA43, + 24931 - 11904: 0xBA44, + 24932 - 11904: 0xFC74, + 24933 - 11904: 0xE1D1, + 24934 - 11904: 0xE5AA, + 24935 - 11904: 0xBC7A, + 24936 - 11904: 0xB46E, + 24938 - 11904: 0xE1D3, + 24939 - 11904: 0xBCA3, + 24940 - 11904: 0xE1CB, + 24942 - 11904: 0xBC7B, + 24943 - 11904: 0xA074, + 24944 - 11904: 0xBCA2, + 24945 - 11904: 0xE1C6, + 24946 - 11904: 0xE1CA, + 24947 - 11904: 0xE1C7, + 24948 - 11904: 0xE1CD, + 24949 - 11904: 0xBA48, + 24950 - 11904: 0xBC79, + 24951 - 11904: 0xBA42, + 24953 - 11904: 0xE57A, + 24954 - 11904: 0xE1CF, + 24956 - 11904: 0xBCA1, + 24957 - 11904: 0xA071, + 24958 - 11904: 0xBCA4, + 24960 - 11904: 0xE1CC, + 24961 - 11904: 0xFC79, + 24962 - 11904: 0xBC7E, + 24963 - 11904: 0xE579, + 24967 - 11904: 0xFC7C, + 24969 - 11904: 0xE57E, + 24970 - 11904: 0xBECE, + 24971 - 11904: 0xE578, + 24972 - 11904: 0xE9A3, + 24973 - 11904: 0xE5A9, + 24974 - 11904: 0xBCA8, + 24976 - 11904: 0xBCA6, + 24977 - 11904: 0xBECC, + 24978 - 11904: 0xE5A6, + 24979 - 11904: 0xE5A2, + 24980 - 11904: 0xBCAC, + 24981 - 11904: 0x9C50, + 24982 - 11904: 0xE978, + 24984 - 11904: 0x9379, + 24985 - 11904: 0x9378, + 24986 - 11904: 0xBCAA, + 24987 - 11904: 0xE5A1, + 24988 - 11904: 0xA0DD, + 24989 - 11904: 0xE976, + 24991 - 11904: 0xE5A5, + 24993 - 11904: 0xE5A8, + 24994 - 11904: 0xE57D, + 24996 - 11904: 0xBCAB, + 24999 - 11904: 0xBCA5, + 25000 - 11904: 0xE977, + 25001 - 11904: 0xBECD, + 25002 - 11904: 0xE5A7, + 25003 - 11904: 0xBCA7, + 25004 - 11904: 0xBCA9, + 25005 - 11904: 0xE5A4, + 25006 - 11904: 0xBCAD, + 25007 - 11904: 0xE5A3, + 25008 - 11904: 0xE57C, + 25009 - 11904: 0xE57B, + 25010 - 11904: 0xBECB, + 25011 - 11904: 0xE5AB, + 25012 - 11904: 0xE97A, + 25013 - 11904: 0xECE0, + 25014 - 11904: 0xBED0, + 25015 - 11904: 0x8D75, + 25016 - 11904: 0xE9A2, + 25017 - 11904: 0x8D76, + 25018 - 11904: 0xE97E, + 25020 - 11904: 0xECE1, + 25022 - 11904: 0xBED1, + 25023 - 11904: 0xE9A1, + 25024 - 11904: 0x9374, + 25025 - 11904: 0xE97C, + 25026 - 11904: 0xC0B4, + 25027 - 11904: 0xECDF, + 25029 - 11904: 0xE979, + 25030 - 11904: 0xE97B, + 25031 - 11904: 0xC0B5, + 25032 - 11904: 0xBED3, + 25033 - 11904: 0xC0B3, + 25034 - 11904: 0xBED2, + 25035 - 11904: 0xC0B7, + 25036 - 11904: 0xE97D, + 25037 - 11904: 0xBECF, + 25039 - 11904: 0x8D77, + 25040 - 11904: 0xFCA5, + 25043 - 11904: 0xFCA2, + 25046 - 11904: 0xEFCF, + 25048 - 11904: 0xEFC7, + 25050 - 11904: 0x90C3, + 25054 - 11904: 0xECE7, + 25055 - 11904: 0xEFC8, + 25056 - 11904: 0xECE3, + 25058 - 11904: 0xA079, + 25059 - 11904: 0xC256, + 25060 - 11904: 0xECE5, + 25061 - 11904: 0xECE4, + 25062 - 11904: 0xC0B6, + 25063 - 11904: 0xECE2, + 25064 - 11904: 0xECE6, + 25065 - 11904: 0xEFD0, + 25066 - 11904: 0xEFCC, + 25067 - 11904: 0xEFCE, + 25069 - 11904: 0xEFC9, + 25070 - 11904: 0xEFCA, + 25072 - 11904: 0xEFCD, + 25073 - 11904: 0xEFCB, + 25074 - 11904: 0xC367, + 25077 - 11904: 0xC36A, + 25078 - 11904: 0xC369, + 25079 - 11904: 0xC368, + 25080 - 11904: 0xC461, + 25081 - 11904: 0xF44A, + 25082 - 11904: 0xC462, + 25083 - 11904: 0xF241, + 25084 - 11904: 0xC4DF, + 25085 - 11904: 0xF5CC, + 25086 - 11904: 0xC4E0, + 25087 - 11904: 0xC574, + 25088 - 11904: 0xC5CA, + 25089 - 11904: 0xF7D9, + 25091 - 11904: 0xF7DA, + 25092 - 11904: 0xF7DB, + 25095 - 11904: 0xF9BA, + 25096 - 11904: 0xA4E0, + 25097 - 11904: 0xC97C, + 25098 - 11904: 0xA5B3, + 25100 - 11904: 0xA6A6, + 25101 - 11904: 0xA6A7, + 25102 - 11904: 0xA6A5, + 25104 - 11904: 0xA6A8, + 25105 - 11904: 0xA7DA, + 25106 - 11904: 0xA7D9, + 25108 - 11904: 0xCCB1, + 25109 - 11904: 0xA9CF, + 25110 - 11904: 0xA9CE, + 25113 - 11904: 0xD1AF, + 25114 - 11904: 0xB1AD, + 25115 - 11904: 0xB1AE, + 25119 - 11904: 0xB475, + 25120 - 11904: 0xDD72, + 25121 - 11904: 0xB760, + 25122 - 11904: 0xB761, + 25123 - 11904: 0xDD74, + 25124 - 11904: 0xDD76, + 25125 - 11904: 0xDD75, + 25127 - 11904: 0xE1D7, + 25129 - 11904: 0xE1D6, + 25130 - 11904: 0xBA49, + 25131 - 11904: 0xE1D8, + 25132 - 11904: 0x8D79, + 25133 - 11904: 0xE5AC, + 25134 - 11904: 0xBCAE, + 25136 - 11904: 0xBED4, + 25138 - 11904: 0xC0B8, + 25139 - 11904: 0xC257, + 25140 - 11904: 0xC0B9, + 25142 - 11904: 0xA4E1, + 25143 - 11904: 0x8BFC, + 25145 - 11904: 0xA076, + 25146 - 11904: 0xCAE6, + 25149 - 11904: 0xCCB2, + 25150 - 11904: 0xA9D1, + 25151 - 11904: 0xA9D0, + 25152 - 11904: 0xA9D2, + 25153 - 11904: 0xABF3, + 25154 - 11904: 0xCED2, + 25155 - 11904: 0xCED3, + 25158 - 11904: 0xD1B0, + 25159 - 11904: 0xAEB0, + 25160 - 11904: 0xB1AF, + 25161 - 11904: 0xB476, + 25162 - 11904: 0xD951, + 25163 - 11904: 0xA4E2, + 25164 - 11904: 0x8BCD, + 25165 - 11904: 0xA47E, + 25166 - 11904: 0xA4E3, + 25168 - 11904: 0xC97D, + 25169 - 11904: 0xA5B7, + 25170 - 11904: 0xA5B6, + 25171 - 11904: 0xA5B4, + 25172 - 11904: 0xA5B5, + 25176 - 11904: 0xA6AB, + 25177 - 11904: 0xC9E9, + 25178 - 11904: 0xC9EB, + 25179 - 11904: 0xA6AA, + 25180 - 11904: 0xC9E3, + 25182 - 11904: 0xC9E4, + 25184 - 11904: 0xC9EA, + 25185 - 11904: 0xC9E6, + 25186 - 11904: 0xC9E8, + 25187 - 11904: 0xA6A9, + 25188 - 11904: 0xC9E5, + 25189 - 11904: 0xC9EC, + 25190 - 11904: 0xC9E7, + 25192 - 11904: 0x9F5A, + 25197 - 11904: 0xA7E1, + 25198 - 11904: 0xA7EA, + 25199 - 11904: 0xA7E8, + 25200 - 11904: 0xCAF0, + 25201 - 11904: 0xCAED, + 25202 - 11904: 0xCAF5, + 25203 - 11904: 0xA7E6, + 25204 - 11904: 0xCAF6, + 25206 - 11904: 0xA7DF, + 25207 - 11904: 0xCAF3, + 25209 - 11904: 0xA7E5, + 25210 - 11904: 0xCAEF, + 25211 - 11904: 0xCAEE, + 25212 - 11904: 0xA7E3, + 25213 - 11904: 0xCAF4, + 25214 - 11904: 0xA7E4, + 25215 - 11904: 0xA9D3, + 25216 - 11904: 0xA7DE, + 25217 - 11904: 0xCAF1, + 25218 - 11904: 0x9FF4, + 25219 - 11904: 0xCAE7, + 25220 - 11904: 0xA7DB, + 25221 - 11904: 0x9FBA, + 25222 - 11904: 0xA7EE, + 25223 - 11904: 0xCAEC, + 25224 - 11904: 0xCAF2, + 25225 - 11904: 0xA7E0, + 25226 - 11904: 0xA7E2, + 25228 - 11904: 0xCAE8, + 25230 - 11904: 0xCAE9, + 25231 - 11904: 0xCAEA, + 25232 - 11904: 0x8D7A, + 25233 - 11904: 0xA7ED, + 25234 - 11904: 0xA7E7, + 25235 - 11904: 0xA7EC, + 25236 - 11904: 0xCAEB, + 25237 - 11904: 0xA7EB, + 25238 - 11904: 0xA7DD, + 25239 - 11904: 0xA7DC, + 25240 - 11904: 0xA7E9, + 25245 - 11904: 0x9E45, + 25252 - 11904: 0x93B0, + 25254 - 11904: 0xA075, + 25256 - 11904: 0xA9E1, + 25257 - 11904: 0xCCBE, + 25258 - 11904: 0xCCB7, + 25259 - 11904: 0xA9DC, + 25260 - 11904: 0xA9EF, + 25261 - 11904: 0xCCB3, + 25262 - 11904: 0xCCBA, + 25263 - 11904: 0xCCBC, + 25264 - 11904: 0xCCBF, + 25265 - 11904: 0xA9EA, + 25267 - 11904: 0xCCBB, + 25268 - 11904: 0xCCB4, + 25269 - 11904: 0xA9E8, + 25270 - 11904: 0xCCB8, + 25272 - 11904: 0xCCC0, + 25273 - 11904: 0xA9D9, + 25275 - 11904: 0xCCBD, + 25276 - 11904: 0xA9E3, + 25277 - 11904: 0xA9E2, + 25278 - 11904: 0xCCB6, + 25279 - 11904: 0xA9D7, + 25281 - 11904: 0x87DD, + 25282 - 11904: 0xA9D8, + 25283 - 11904: 0x9B46, + 25284 - 11904: 0xA9D6, + 25285 - 11904: 0xFCAE, + 25286 - 11904: 0xA9EE, + 25287 - 11904: 0xA9E6, + 25288 - 11904: 0xA9E0, + 25289 - 11904: 0xA9D4, + 25290 - 11904: 0xCCB9, + 25291 - 11904: 0xA9DF, + 25292 - 11904: 0xA9D5, + 25293 - 11904: 0xA9E7, + 25294 - 11904: 0xA9F0, + 25295 - 11904: 0xCED4, + 25296 - 11904: 0xA9E4, + 25297 - 11904: 0xCCB5, + 25298 - 11904: 0xA9DA, + 25299 - 11904: 0xA9DD, + 25300 - 11904: 0xA9DE, + 25301 - 11904: 0xFCB0, + 25302 - 11904: 0xA9EC, + 25303 - 11904: 0xA9ED, + 25304 - 11904: 0xA9EB, + 25305 - 11904: 0xA9E5, + 25306 - 11904: 0xA9E9, + 25307 - 11904: 0xA9DB, + 25308 - 11904: 0xABF4, + 25311 - 11904: 0xFA51, + 25317 - 11904: 0x8D7B, + 25323 - 11904: 0xCEDA, + 25324 - 11904: 0xAC41, + 25325 - 11904: 0xABF8, + 25326 - 11904: 0xABFA, + 25327 - 11904: 0xAC40, + 25328 - 11904: 0xCEE6, + 25329 - 11904: 0xABFD, + 25330 - 11904: 0xD1B1, + 25331 - 11904: 0xAEB1, + 25332 - 11904: 0xAC43, + 25333 - 11904: 0xCED7, + 25334 - 11904: 0xCEDF, + 25335 - 11904: 0xABFE, + 25336 - 11904: 0xCEDE, + 25337 - 11904: 0xCEDB, + 25338 - 11904: 0xCEE3, + 25339 - 11904: 0xCEE5, + 25340 - 11904: 0xABF7, + 25341 - 11904: 0xABFB, + 25342 - 11904: 0xAC42, + 25343 - 11904: 0xAEB3, + 25344 - 11904: 0xCEE0, + 25345 - 11904: 0xABF9, + 25346 - 11904: 0xAC45, + 25347 - 11904: 0xCED9, + 25351 - 11904: 0xABFC, + 25352 - 11904: 0xAEB2, + 25353 - 11904: 0xABF6, + 25355 - 11904: 0xCED6, + 25356 - 11904: 0xCEDD, + 25357 - 11904: 0xCED5, + 25358 - 11904: 0xCED8, + 25359 - 11904: 0xCEDC, + 25360 - 11904: 0xD1B2, + 25361 - 11904: 0xAC44, + 25363 - 11904: 0xCEE1, + 25364 - 11904: 0xCEE2, + 25365 - 11904: 0xCEE4, + 25366 - 11904: 0xABF5, + 25368 - 11904: 0x8D7C, + 25384 - 11904: 0xAEC1, + 25385 - 11904: 0xD1BE, + 25386 - 11904: 0xAEBF, + 25387 - 11904: 0xAEC0, + 25388 - 11904: 0xD1B4, + 25389 - 11904: 0xD1C4, + 25390 - 11904: 0x9ED6, + 25391 - 11904: 0xAEB6, + 25393 - 11904: 0x93AC, + 25394 - 11904: 0xD566, + 25395 - 11904: 0xD1C6, + 25396 - 11904: 0xD1C0, + 25397 - 11904: 0x9F5B, + 25398 - 11904: 0xD1B7, + 25399 - 11904: 0x93A9, + 25400 - 11904: 0xD1C9, + 25401 - 11904: 0xD1BA, + 25402 - 11904: 0xAEBC, + 25403 - 11904: 0xD57D, + 25404 - 11904: 0xD1BD, + 25405 - 11904: 0xAEBE, + 25406 - 11904: 0xAEB5, + 25408 - 11904: 0xD1CB, + 25409 - 11904: 0xD1BF, + 25410 - 11904: 0xAEB8, + 25411 - 11904: 0xD1B8, + 25412 - 11904: 0xD1B5, + 25413 - 11904: 0xD1B6, + 25414 - 11904: 0xAEB9, + 25415 - 11904: 0xD1C5, + 25416 - 11904: 0xD1CC, + 25417 - 11904: 0xAEBB, + 25418 - 11904: 0xD1BC, + 25419 - 11904: 0xD1BB, + 25420 - 11904: 0xAEC3, + 25421 - 11904: 0xAEC2, + 25422 - 11904: 0xAEB4, + 25423 - 11904: 0xAEBA, + 25424 - 11904: 0xAEBD, + 25425 - 11904: 0xD1C8, + 25428 - 11904: 0xD1C2, + 25429 - 11904: 0xAEB7, + 25430 - 11904: 0xD1B3, + 25431 - 11904: 0xD1CA, + 25432 - 11904: 0xD1C1, + 25433 - 11904: 0xD1C3, + 25434 - 11904: 0xD1C7, + 25444 - 11904: 0xA07C, + 25445 - 11904: 0xD567, + 25447 - 11904: 0xB1B7, + 25448 - 11904: 0xB1CB, + 25449 - 11904: 0xB1CA, + 25451 - 11904: 0xB1BF, + 25452 - 11904: 0xFCB2, + 25453 - 11904: 0xD579, + 25454 - 11904: 0xD575, + 25455 - 11904: 0xD572, + 25456 - 11904: 0xD5A6, + 25457 - 11904: 0xB1BA, + 25458 - 11904: 0xB1B2, + 25461 - 11904: 0xD577, + 25462 - 11904: 0xB4A8, + 25463 - 11904: 0xB1B6, + 25464 - 11904: 0xD5A1, + 25465 - 11904: 0x8AC1, + 25466 - 11904: 0xB1CC, + 25467 - 11904: 0xB1C9, + 25468 - 11904: 0xD57B, + 25469 - 11904: 0xD56A, + 25471 - 11904: 0x9FB4, + 25472 - 11904: 0xB1C8, + 25473 - 11904: 0xD5A3, + 25474 - 11904: 0xD569, + 25475 - 11904: 0xB1BD, + 25476 - 11904: 0xB1C1, + 25477 - 11904: 0xD5A2, + 25479 - 11904: 0xD573, + 25480 - 11904: 0xB1C2, + 25481 - 11904: 0xB1BC, + 25482 - 11904: 0xD568, + 25483 - 11904: 0xFCAC, + 25484 - 11904: 0xB478, + 25485 - 11904: 0xD5A5, + 25486 - 11904: 0xD571, + 25487 - 11904: 0xB1C7, + 25488 - 11904: 0xD574, + 25489 - 11904: 0xD5A4, + 25490 - 11904: 0xB1C6, + 25492 - 11904: 0xD952, + 25494 - 11904: 0xB1B3, + 25495 - 11904: 0xD56F, + 25496 - 11904: 0xB1B8, + 25497 - 11904: 0xB1C3, + 25499 - 11904: 0xB1BE, + 25500 - 11904: 0xD578, + 25501 - 11904: 0xD56E, + 25502 - 11904: 0xD56C, + 25503 - 11904: 0xD57E, + 25504 - 11904: 0xB1B0, + 25505 - 11904: 0xB1C4, + 25506 - 11904: 0xB1B4, + 25507 - 11904: 0xB477, + 25508 - 11904: 0xD57C, + 25509 - 11904: 0xB1B5, + 25511 - 11904: 0xB1B1, + 25512 - 11904: 0xB1C0, + 25513 - 11904: 0xB1BB, + 25514 - 11904: 0xB1B9, + 25515 - 11904: 0xD570, + 25516 - 11904: 0xB1C5, + 25517 - 11904: 0xD56D, + 25518 - 11904: 0xD57A, + 25519 - 11904: 0xD576, + 25520 - 11904: 0xD954, + 25521 - 11904: 0xD953, + 25529 - 11904: 0x9E4C, + 25533 - 11904: 0xD56B, + 25534 - 11904: 0xD964, + 25536 - 11904: 0xB47A, + 25537 - 11904: 0x8FC5, + 25538 - 11904: 0xD96A, + 25539 - 11904: 0xD959, + 25540 - 11904: 0xD967, + 25541 - 11904: 0xDD77, + 25542 - 11904: 0xB47D, + 25543 - 11904: 0xD96B, + 25544 - 11904: 0xD96E, + 25545 - 11904: 0xB47C, + 25546 - 11904: 0xD95C, + 25547 - 11904: 0xD96D, + 25548 - 11904: 0xD96C, + 25549 - 11904: 0xB47E, + 25550 - 11904: 0xD955, + 25551 - 11904: 0xB479, + 25552 - 11904: 0xB4A3, + 25553 - 11904: 0x93AD, + 25554 - 11904: 0xB4A1, + 25555 - 11904: 0xD969, + 25557 - 11904: 0xD95F, + 25558 - 11904: 0xB4A5, + 25559 - 11904: 0xD970, + 25560 - 11904: 0xD968, + 25561 - 11904: 0xD971, + 25562 - 11904: 0xB4AD, + 25563 - 11904: 0xB4AB, + 25564 - 11904: 0xD966, + 25565 - 11904: 0xD965, + 25566 - 11904: 0x9DC3, + 25567 - 11904: 0xD963, + 25568 - 11904: 0xD95D, + 25569 - 11904: 0xB4A4, + 25570 - 11904: 0x8DA2, + 25571 - 11904: 0xB4A2, + 25572 - 11904: 0xD1B9, + 25573 - 11904: 0xD956, + 25574 - 11904: 0x9D4A, + 25575 - 11904: 0xDDB7, + 25576 - 11904: 0xD957, + 25577 - 11904: 0xB47B, + 25578 - 11904: 0xB4AA, + 25579 - 11904: 0xDD79, + 25581 - 11904: 0xB4A6, + 25582 - 11904: 0xB4A7, + 25583 - 11904: 0xD958, + 25584 - 11904: 0xD96F, + 25585 - 11904: 0xDD78, + 25586 - 11904: 0xD960, + 25587 - 11904: 0xD95B, + 25588 - 11904: 0xB4A9, + 25589 - 11904: 0xD961, + 25590 - 11904: 0xD95E, + 25592 - 11904: 0xFCB6, + 25593 - 11904: 0xB4AE, + 25595 - 11904: 0x8DA3, + 25596 - 11904: 0x9E4B, + 25598 - 11904: 0x9E4D, + 25606 - 11904: 0xB770, + 25607 - 11904: 0x8DA4, + 25609 - 11904: 0xDD7C, + 25610 - 11904: 0xDDB1, + 25611 - 11904: 0xDDB6, + 25612 - 11904: 0xDDAA, + 25613 - 11904: 0xB76C, + 25614 - 11904: 0xDDBB, + 25615 - 11904: 0xB769, + 25616 - 11904: 0xDD7A, + 25618 - 11904: 0xDD7B, + 25619 - 11904: 0xB762, + 25620 - 11904: 0xB76B, + 25621 - 11904: 0xDDA4, + 25622 - 11904: 0xB76E, + 25623 - 11904: 0xB76F, + 25624 - 11904: 0xDDA5, + 25626 - 11904: 0xDDB2, + 25627 - 11904: 0xDDB8, + 25628 - 11904: 0xB76A, + 25630 - 11904: 0xB764, + 25631 - 11904: 0xDDA3, + 25632 - 11904: 0xDD7D, + 25633 - 11904: 0xDDBA, + 25634 - 11904: 0xDDA8, + 25635 - 11904: 0xDDA9, + 25636 - 11904: 0xDD7E, + 25637 - 11904: 0xDDB4, + 25638 - 11904: 0xDDAB, + 25639 - 11904: 0xDDB5, + 25640 - 11904: 0xDDAD, + 25642 - 11904: 0xB765, + 25643 - 11904: 0xE1D9, + 25644 - 11904: 0xB768, + 25645 - 11904: 0xB766, + 25646 - 11904: 0xDDB9, + 25647 - 11904: 0xDDB0, + 25648 - 11904: 0xDDAC, + 25650 - 11904: 0x8AFD, + 25651 - 11904: 0xDDA1, + 25652 - 11904: 0xBA53, + 25653 - 11904: 0xDDAF, + 25654 - 11904: 0xB76D, + 25655 - 11904: 0xDDA7, + 25656 - 11904: 0xFCB5, + 25657 - 11904: 0xDDA6, + 25658 - 11904: 0xFCC3, + 25659 - 11904: 0x93B2, + 25661 - 11904: 0xB767, + 25662 - 11904: 0xB763, + 25663 - 11904: 0xE1EE, + 25664 - 11904: 0xDDB3, + 25665 - 11904: 0xDDAE, + 25667 - 11904: 0xDDA2, + 25675 - 11904: 0xE1E9, + 25677 - 11904: 0xE1DA, + 25678 - 11904: 0xE1E5, + 25680 - 11904: 0xE1EC, + 25681 - 11904: 0xBA51, + 25682 - 11904: 0xB4AC, + 25683 - 11904: 0xE1EA, + 25684 - 11904: 0xBA4C, + 25688 - 11904: 0xBA4B, + 25689 - 11904: 0xE1F1, + 25690 - 11904: 0x8DA5, + 25691 - 11904: 0xE1DB, + 25692 - 11904: 0xE1E8, + 25693 - 11904: 0xE1DC, + 25694 - 11904: 0xE1E7, + 25695 - 11904: 0xBA4F, + 25696 - 11904: 0xE1EB, + 25697 - 11904: 0xD962, + 25701 - 11904: 0xE1F2, + 25702 - 11904: 0xE1E3, + 25703 - 11904: 0xBA52, + 25704 - 11904: 0xE5BA, + 25705 - 11904: 0xBCAF, + 25707 - 11904: 0xE1F0, + 25708 - 11904: 0xE1EF, + 25709 - 11904: 0xBA54, + 25710 - 11904: 0xE5AD, + 25711 - 11904: 0xBCB0, + 25712 - 11904: 0xE5AE, + 25713 - 11904: 0x93A1, + 25714 - 11904: 0xE1DF, + 25715 - 11904: 0xE1E0, + 25716 - 11904: 0xE1DD, + 25717 - 11904: 0xE1E2, + 25718 - 11904: 0xE1DE, + 25719 - 11904: 0xE1F3, + 25720 - 11904: 0xBA4E, + 25721 - 11904: 0xBCB1, + 25722 - 11904: 0xBA50, + 25723 - 11904: 0xBA55, + 25724 - 11904: 0x8AC6, + 25725 - 11904: 0xE1E1, + 25727 - 11904: 0xE1ED, + 25730 - 11904: 0xE1E6, + 25733 - 11904: 0xE5B1, + 25735 - 11904: 0xBA4A, + 25736 - 11904: 0xBCB4, + 25737 - 11904: 0xE9AA, + 25738 - 11904: 0xE5B6, + 25739 - 11904: 0xE5B5, + 25740 - 11904: 0xE5B7, + 25741 - 11904: 0x8A5B, + 25743 - 11904: 0xE5B4, + 25744 - 11904: 0xFCB9, + 25745 - 11904: 0x894D, + 25746 - 11904: 0xBCBB, + 25747 - 11904: 0xBCB8, + 25749 - 11904: 0xBCB9, + 25750 - 11904: 0xE5AF, + 25751 - 11904: 0xE5B2, + 25752 - 11904: 0xE5BC, + 25753 - 11904: 0xBCC1, + 25754 - 11904: 0xBCBF, + 25756 - 11904: 0xE5B3, + 25757 - 11904: 0xD95A, + 25758 - 11904: 0xBCB2, + 25759 - 11904: 0xE5B9, + 25760 - 11904: 0xE5B0, + 25762 - 11904: 0xBCC2, + 25763 - 11904: 0xE5B8, + 25764 - 11904: 0xBA4D, + 25765 - 11904: 0xBCB7, + 25766 - 11904: 0xE1E4, + 25769 - 11904: 0xBCBA, + 25771 - 11904: 0xBCBE, + 25772 - 11904: 0xBCC0, + 25773 - 11904: 0xBCBD, + 25774 - 11904: 0xBCBC, + 25775 - 11904: 0xFED4, + 25776 - 11904: 0xBCB6, + 25777 - 11904: 0xE5BB, + 25778 - 11904: 0xBCB3, + 25779 - 11904: 0xBCC3, + 25780 - 11904: 0x8A78, + 25782 - 11904: 0x93AB, + 25787 - 11904: 0xBED8, + 25788 - 11904: 0xBED9, + 25789 - 11904: 0xE9A9, + 25790 - 11904: 0xBEE2, + 25791 - 11904: 0xBEDF, + 25792 - 11904: 0x8DA7, + 25793 - 11904: 0xBED6, + 25794 - 11904: 0xBEDD, + 25795 - 11904: 0xE9AB, + 25796 - 11904: 0xBEDB, + 25797 - 11904: 0xBED5, + 25799 - 11904: 0xBEDC, + 25801 - 11904: 0xE9A8, + 25802 - 11904: 0xC0BB, + 25803 - 11904: 0xBED7, + 25805 - 11904: 0xBEDE, + 25806 - 11904: 0xC0BA, + 25807 - 11904: 0xE9A7, + 25808 - 11904: 0xE9A6, + 25810 - 11904: 0xBEE0, + 25811 - 11904: 0x9F45, + 25812 - 11904: 0xBEE1, + 25814 - 11904: 0xE9A5, + 25815 - 11904: 0xE9A4, + 25816 - 11904: 0xC0BC, + 25817 - 11904: 0xE9AE, + 25818 - 11904: 0xBEDA, + 25819 - 11904: 0xE9AC, + 25821 - 11904: 0x8A56, + 25824 - 11904: 0xC0BD, + 25825 - 11904: 0xFCBF, + 25826 - 11904: 0xC0C2, + 25827 - 11904: 0xECEA, + 25828 - 11904: 0xECEC, + 25829 - 11904: 0xFCC0, + 25830 - 11904: 0xC0BF, + 25831 - 11904: 0x8EE6, + 25832 - 11904: 0xECED, + 25833 - 11904: 0xECE9, + 25834 - 11904: 0x8AA4, + 25835 - 11904: 0xECEB, + 25836 - 11904: 0xC0C0, + 25837 - 11904: 0xC0C3, + 25839 - 11904: 0xECE8, + 25840 - 11904: 0xC0BE, + 25841 - 11904: 0xC0C1, + 25842 - 11904: 0xC259, + 25843 - 11904: 0xE9AD, + 25844 - 11904: 0xC258, + 25847 - 11904: 0xC25E, + 25848 - 11904: 0xEFD4, + 25850 - 11904: 0xC25C, + 25851 - 11904: 0xC25D, + 25852 - 11904: 0xEFD7, + 25853 - 11904: 0xEFD3, + 25854 - 11904: 0xC25A, + 25855 - 11904: 0xEFD1, + 25856 - 11904: 0xC36B, + 25857 - 11904: 0xEFD5, + 25859 - 11904: 0xEFD6, + 25860 - 11904: 0xEFD2, + 25862 - 11904: 0xC25B, + 25863 - 11904: 0xF242, + 25865 - 11904: 0xF245, + 25866 - 11904: 0x8943, + 25868 - 11904: 0xF246, + 25869 - 11904: 0xF244, + 25870 - 11904: 0xF247, + 25871 - 11904: 0xC36C, + 25872 - 11904: 0xF243, + 25873 - 11904: 0x93F3, + 25875 - 11904: 0xF44E, + 25876 - 11904: 0xC464, + 25877 - 11904: 0xF44D, + 25878 - 11904: 0xF44C, + 25879 - 11904: 0xF44B, + 25880 - 11904: 0xC463, + 25881 - 11904: 0xC465, + 25883 - 11904: 0xF5CD, + 25884 - 11904: 0xC4E2, + 25885 - 11904: 0xC4E1, + 25886 - 11904: 0xFCAB, + 25887 - 11904: 0x9EA2, + 25888 - 11904: 0xF6E1, + 25889 - 11904: 0xF6E0, + 25890 - 11904: 0xF6E3, + 25891 - 11904: 0xC5CB, + 25892 - 11904: 0xC575, + 25893 - 11904: 0xF7DD, + 25894 - 11904: 0xF6E2, + 25897 - 11904: 0xF7DC, + 25898 - 11904: 0xC5CD, + 25899 - 11904: 0xC5CC, + 25900 - 11904: 0xC5F3, + 25901 - 11904: 0xF8A9, + 25902 - 11904: 0xF8EF, + 25903 - 11904: 0xA4E4, + 25904 - 11904: 0x9DC7, + 25906 - 11904: 0xD972, + 25907 - 11904: 0xE9AF, + 25908 - 11904: 0xC6D2, + 25909 - 11904: 0x8BCE, + 25910 - 11904: 0xA6AC, + 25911 - 11904: 0xCAF7, + 25912 - 11904: 0xA7F1, + 25913 - 11904: 0xA7EF, + 25915 - 11904: 0xA7F0, + 25917 - 11904: 0xCCC1, + 25918 - 11904: 0xA9F1, + 25919 - 11904: 0xAC46, + 25921 - 11904: 0xCEE7, + 25923 - 11904: 0xCEE8, + 25925 - 11904: 0xAC47, + 25926 - 11904: 0xD1CE, + 25928 - 11904: 0xAEC4, + 25929 - 11904: 0xAEC5, + 25930 - 11904: 0xD1CD, + 25933 - 11904: 0xFCC5, + 25935 - 11904: 0xB1D3, + 25937 - 11904: 0xB1CF, + 25939 - 11904: 0xD5A7, + 25940 - 11904: 0xB1D6, + 25941 - 11904: 0xB1D5, + 25942 - 11904: 0xB1CE, + 25943 - 11904: 0xB1D1, + 25944 - 11904: 0xB1D4, + 25945 - 11904: 0xB1D0, + 25948 - 11904: 0xD976, + 25949 - 11904: 0xB1CD, + 25950 - 11904: 0xB4AF, + 25951 - 11904: 0xFCCB, + 25954 - 11904: 0xB4B1, + 25955 - 11904: 0xB4B2, + 25956 - 11904: 0xD975, + 25957 - 11904: 0xD978, + 25958 - 11904: 0xB4B0, + 25959 - 11904: 0xD973, + 25960 - 11904: 0xD977, + 25962 - 11904: 0xD974, + 25963 - 11904: 0x93B3, + 25964 - 11904: 0xB771, + 25965 - 11904: 0xFCCA, + 25967 - 11904: 0xDDBC, + 25970 - 11904: 0xBA56, + 25971 - 11904: 0xE1F4, + 25972 - 11904: 0xBEE3, + 25973 - 11904: 0xBCC4, + 25974 - 11904: 0xE5BD, + 25975 - 11904: 0xBCC5, + 25976 - 11904: 0xBCC6, + 25977 - 11904: 0xE5BF, + 25978 - 11904: 0xE5BE, + 25979 - 11904: 0xE5C0, + 25980 - 11904: 0xE9B1, + 25983 - 11904: 0xE9B0, + 25984 - 11904: 0xECEF, + 25985 - 11904: 0xECEE, + 25986 - 11904: 0xC0C4, + 25987 - 11904: 0xC0C5, + 25988 - 11904: 0xF248, + 25989 - 11904: 0xFCC9, + 25990 - 11904: 0x8DAC, + 25991 - 11904: 0xA4E5, + 25992 - 11904: 0xFBC6, + 25993 - 11904: 0x8967, + 25995 - 11904: 0x8C7E, + 25996 - 11904: 0xD979, + 26000 - 11904: 0xB4B4, + 26001 - 11904: 0xB4B3, + 26002 - 11904: 0xDDBD, + 26004 - 11904: 0xEFD8, + 26005 - 11904: 0xC4E3, + 26006 - 11904: 0xF7DE, + 26007 - 11904: 0xA4E6, + 26009 - 11904: 0xAEC6, + 26011 - 11904: 0xB1D8, + 26012 - 11904: 0xB1D7, + 26013 - 11904: 0xD97A, + 26014 - 11904: 0xD97B, + 26015 - 11904: 0xB772, + 26016 - 11904: 0xE1F5, + 26017 - 11904: 0xBA57, + 26018 - 11904: 0xE9B2, + 26020 - 11904: 0xA4E7, + 26021 - 11904: 0xA5B8, + 26023 - 11904: 0xA9F2, + 26024 - 11904: 0xCCC2, + 26026 - 11904: 0xCEE9, + 26027 - 11904: 0xAC48, + 26028 - 11904: 0xB1D9, + 26030 - 11904: 0xD97C, + 26031 - 11904: 0xB4B5, + 26032 - 11904: 0xB773, + 26034 - 11904: 0xE5C1, + 26035 - 11904: 0xE5C2, + 26037 - 11904: 0xFCCD, + 26038 - 11904: 0xECF0, + 26039 - 11904: 0xC25F, + 26040 - 11904: 0xF8F0, + 26041 - 11904: 0xA4E8, + 26043 - 11904: 0xCCC3, + 26044 - 11904: 0xA9F3, + 26045 - 11904: 0xAC49, + 26046 - 11904: 0x9CF3, + 26047 - 11904: 0xCEEA, + 26049 - 11904: 0xAEC7, + 26050 - 11904: 0xD1D2, + 26051 - 11904: 0xD1D0, + 26052 - 11904: 0xD1D1, + 26053 - 11904: 0xAEC8, + 26054 - 11904: 0xD1CF, + 26059 - 11904: 0xB1DB, + 26060 - 11904: 0xB1DC, + 26061 - 11904: 0xD5A8, + 26062 - 11904: 0xB1DD, + 26063 - 11904: 0xB1DA, + 26064 - 11904: 0xD97D, + 26065 - 11904: 0xFCD0, + 26066 - 11904: 0xD97E, + 26067 - 11904: 0xDDBE, + 26068 - 11904: 0x95BB, + 26070 - 11904: 0xBA59, + 26071 - 11904: 0xBA58, + 26074 - 11904: 0xECF1, + 26075 - 11904: 0xEFD9, + 26077 - 11904: 0xF24A, + 26078 - 11904: 0xF249, + 26079 - 11904: 0xF44F, + 26080 - 11904: 0xFCD3, + 26081 - 11904: 0xC95E, + 26082 - 11904: 0xAC4A, + 26083 - 11904: 0xFCD4, + 26085 - 11904: 0xA4E9, + 26086 - 11904: 0xA5B9, + 26088 - 11904: 0xA6AE, + 26089 - 11904: 0xA6AD, + 26092 - 11904: 0xA6AF, + 26093 - 11904: 0xA6B0, + 26094 - 11904: 0xC9EE, + 26095 - 11904: 0xC9ED, + 26096 - 11904: 0xCAF8, + 26097 - 11904: 0xA7F2, + 26098 - 11904: 0xCAFB, + 26099 - 11904: 0xCAFA, + 26100 - 11904: 0xCAF9, + 26101 - 11904: 0xCAFC, + 26106 - 11904: 0xA9F4, + 26107 - 11904: 0xCCC9, + 26108 - 11904: 0xCCC5, + 26109 - 11904: 0xCCCE, + 26111 - 11904: 0x8DAE, + 26112 - 11904: 0xA9FB, + 26114 - 11904: 0xA9F9, + 26115 - 11904: 0xCCCA, + 26116 - 11904: 0xCCC6, + 26117 - 11904: 0xCCCD, + 26118 - 11904: 0xA9F8, + 26119 - 11904: 0xAA40, + 26120 - 11904: 0xCCC8, + 26121 - 11904: 0xCCC4, + 26122 - 11904: 0xA9FE, + 26123 - 11904: 0xCCCB, + 26124 - 11904: 0xA9F7, + 26125 - 11904: 0xCCCC, + 26126 - 11904: 0xA9FA, + 26127 - 11904: 0xA9FC, + 26128 - 11904: 0xCCD0, + 26129 - 11904: 0xCCCF, + 26130 - 11904: 0xCCC7, + 26131 - 11904: 0xA9F6, + 26132 - 11904: 0xA9F5, + 26133 - 11904: 0xA9FD, + 26136 - 11904: 0xFCD7, + 26140 - 11904: 0xCEEF, + 26141 - 11904: 0xCEF5, + 26142 - 11904: 0x93DB, + 26143 - 11904: 0xAC50, + 26144 - 11904: 0xAC4D, + 26145 - 11904: 0xCEEC, + 26146 - 11904: 0xCEF1, + 26147 - 11904: 0xFE63, + 26148 - 11904: 0xAC53, + 26149 - 11904: 0xAC4B, + 26150 - 11904: 0xCEF0, + 26151 - 11904: 0xAC4E, + 26152 - 11904: 0xAC51, + 26155 - 11904: 0xCEF3, + 26157 - 11904: 0xAC4C, + 26158 - 11904: 0xCEF8, + 26159 - 11904: 0xAC4F, + 26160 - 11904: 0x93D5, + 26161 - 11904: 0xAC52, + 26162 - 11904: 0xCEED, + 26163 - 11904: 0xCEF2, + 26164 - 11904: 0xCEF6, + 26165 - 11904: 0xCEEE, + 26166 - 11904: 0xCEEB, + 26169 - 11904: 0xCEF7, + 26170 - 11904: 0xCEF4, + 26177 - 11904: 0xAED0, + 26178 - 11904: 0xAEC9, + 26179 - 11904: 0xAECC, + 26180 - 11904: 0xFCDA, + 26181 - 11904: 0xAECF, + 26183 - 11904: 0xD1D5, + 26184 - 11904: 0x9B71, + 26185 - 11904: 0xAECA, + 26186 - 11904: 0xD1D3, + 26187 - 11904: 0xFCDD, + 26188 - 11904: 0xAECE, + 26189 - 11904: 0x8764, + 26191 - 11904: 0xAECB, + 26193 - 11904: 0xD1D6, + 26194 - 11904: 0xAECD, + 26195 - 11904: 0x8DAF, + 26199 - 11904: 0xFAF2, + 26201 - 11904: 0xD5AC, + 26202 - 11904: 0xB1DF, + 26203 - 11904: 0xD5AB, + 26204 - 11904: 0xD5AD, + 26205 - 11904: 0xB1DE, + 26206 - 11904: 0xB1E3, + 26207 - 11904: 0xD1D4, + 26208 - 11904: 0x87B5, + 26209 - 11904: 0xD5AA, + 26210 - 11904: 0xD5AE, + 26211 - 11904: 0x93D8, + 26212 - 11904: 0xB1E0, + 26213 - 11904: 0xD5A9, + 26214 - 11904: 0xB1E2, + 26215 - 11904: 0xFCDF, + 26216 - 11904: 0xB1E1, + 26218 - 11904: 0xD9A7, + 26219 - 11904: 0x93D3, + 26220 - 11904: 0xD9A2, + 26222 - 11904: 0xB4B6, + 26223 - 11904: 0xB4BA, + 26224 - 11904: 0xB4B7, + 26225 - 11904: 0xD9A5, + 26226 - 11904: 0xD9A8, + 26227 - 11904: 0xFCE1, + 26228 - 11904: 0xFCE2, + 26230 - 11904: 0xB4B9, + 26231 - 11904: 0xB4BE, + 26232 - 11904: 0xDDC7, + 26233 - 11904: 0xD9A6, + 26234 - 11904: 0xB4BC, + 26235 - 11904: 0xD9A3, + 26236 - 11904: 0xD9A1, + 26237 - 11904: 0x8E76, + 26238 - 11904: 0xB4BD, + 26240 - 11904: 0xD9A4, + 26244 - 11904: 0xB779, + 26245 - 11904: 0xFC62, + 26246 - 11904: 0xDDBF, + 26247 - 11904: 0xB776, + 26248 - 11904: 0xB777, + 26249 - 11904: 0xB775, + 26250 - 11904: 0xDDC4, + 26251 - 11904: 0xDDC3, + 26252 - 11904: 0xDDC0, + 26253 - 11904: 0xB77B, + 26254 - 11904: 0x93D1, + 26256 - 11904: 0xDDC2, + 26257 - 11904: 0xB4BB, + 26258 - 11904: 0x8DB1, + 26260 - 11904: 0xDDC6, + 26261 - 11904: 0xDDC1, + 26262 - 11904: 0xB778, + 26263 - 11904: 0xB774, + 26264 - 11904: 0xB77A, + 26265 - 11904: 0xDDC5, + 26266 - 11904: 0x9859, + 26269 - 11904: 0xBA5C, + 26271 - 11904: 0xE1F8, + 26272 - 11904: 0xE1F7, + 26273 - 11904: 0xE1F6, + 26274 - 11904: 0xBA5A, + 26276 - 11904: 0xFB52, + 26280 - 11904: 0xBA5B, + 26281 - 11904: 0xE5C5, + 26282 - 11904: 0xE5C8, + 26283 - 11904: 0xBCC8, + 26285 - 11904: 0xFB53, + 26286 - 11904: 0xBCC7, + 26287 - 11904: 0xE5C9, + 26288 - 11904: 0xE5C4, + 26289 - 11904: 0xBCCA, + 26290 - 11904: 0xE5C6, + 26291 - 11904: 0xFB4D, + 26292 - 11904: 0xBCC9, + 26293 - 11904: 0xE5C3, + 26294 - 11904: 0x9CBF, + 26295 - 11904: 0xE5C7, + 26296 - 11904: 0xBEE9, + 26297 - 11904: 0xBEE6, + 26298 - 11904: 0xE9BB, + 26299 - 11904: 0xE9BA, + 26301 - 11904: 0xE9B9, + 26302 - 11904: 0xE9B4, + 26303 - 11904: 0x9B72, + 26304 - 11904: 0xE9B5, + 26308 - 11904: 0xBEE7, + 26310 - 11904: 0xBEE4, + 26311 - 11904: 0xBEE8, + 26312 - 11904: 0xE9B3, + 26313 - 11904: 0xBEE5, + 26314 - 11904: 0xE9B6, + 26315 - 11904: 0xE9B7, + 26316 - 11904: 0xE9BC, + 26317 - 11904: 0xFB50, + 26318 - 11904: 0x93BE, + 26319 - 11904: 0xE9B8, + 26322 - 11904: 0xECF2, + 26326 - 11904: 0xC0C7, + 26328 - 11904: 0xEFDC, + 26329 - 11904: 0xC0C6, + 26330 - 11904: 0xEFDA, + 26331 - 11904: 0xEFDB, + 26332 - 11904: 0xC260, + 26333 - 11904: 0xC36E, + 26334 - 11904: 0xF24B, + 26336 - 11904: 0xC36D, + 26339 - 11904: 0xF451, + 26340 - 11904: 0xF452, + 26342 - 11904: 0xC466, + 26343 - 11904: 0x8CDB, + 26344 - 11904: 0xF450, + 26345 - 11904: 0xC4E4, + 26347 - 11904: 0xF7DF, + 26348 - 11904: 0xC5CE, + 26349 - 11904: 0xF8AA, + 26350 - 11904: 0xF8AB, + 26352 - 11904: 0xA4EA, + 26353 - 11904: 0x9DF1, + 26354 - 11904: 0xA6B1, + 26355 - 11904: 0xA6B2, + 26356 - 11904: 0xA7F3, + 26358 - 11904: 0xCCD1, + 26359 - 11904: 0xAC54, + 26360 - 11904: 0xAED1, + 26361 - 11904: 0xB1E4, + 26364 - 11904: 0xB0D2, + 26366 - 11904: 0xB4BF, + 26367 - 11904: 0xB4C0, + 26368 - 11904: 0xB3CC, + 26369 - 11904: 0xD9A9, + 26370 - 11904: 0xFCEB, + 26371 - 11904: 0xB77C, + 26372 - 11904: 0xE1FA, + 26373 - 11904: 0xE1F9, + 26376 - 11904: 0xA4EB, + 26377 - 11904: 0xA6B3, + 26378 - 11904: 0xCCD2, + 26379 - 11904: 0xAA42, + 26380 - 11904: 0xA0BB, + 26381 - 11904: 0xAA41, + 26382 - 11904: 0x9B7E, + 26383 - 11904: 0xCEF9, + 26384 - 11904: 0xCEFA, + 26386 - 11904: 0xD1D7, + 26387 - 11904: 0xD1D8, + 26388 - 11904: 0xAED2, + 26389 - 11904: 0xAED3, + 26390 - 11904: 0x8DB3, + 26391 - 11904: 0xAED4, + 26392 - 11904: 0xD5AF, + 26393 - 11904: 0x8C52, + 26395 - 11904: 0xB1E6, + 26397 - 11904: 0xB4C2, + 26398 - 11904: 0x9AE8, + 26399 - 11904: 0xB4C1, + 26400 - 11904: 0xDDC8, + 26401 - 11904: 0xDF7A, + 26402 - 11904: 0xE1FB, + 26403 - 11904: 0xE9BD, + 26405 - 11904: 0x8EDC, + 26406 - 11904: 0xC261, + 26407 - 11904: 0xC467, + 26408 - 11904: 0xA4EC, + 26410 - 11904: 0xA5BC, + 26411 - 11904: 0xA5BD, + 26412 - 11904: 0xA5BB, + 26413 - 11904: 0xA5BE, + 26414 - 11904: 0xA5BA, + 26417 - 11904: 0xA6B6, + 26419 - 11904: 0xC9F6, + 26420 - 11904: 0xA6B5, + 26421 - 11904: 0xA6B7, + 26422 - 11904: 0x9CF9, + 26424 - 11904: 0xC9F1, + 26425 - 11904: 0xC9F0, + 26426 - 11904: 0xC9F3, + 26427 - 11904: 0xC9F2, + 26428 - 11904: 0xC9F5, + 26429 - 11904: 0xA6B4, + 26430 - 11904: 0xC9EF, + 26431 - 11904: 0xC9F4, + 26436 - 11904: 0xFA50, + 26437 - 11904: 0xCAFD, + 26438 - 11904: 0xA7FD, + 26439 - 11904: 0xCAFE, + 26440 - 11904: 0xCB43, + 26441 - 11904: 0xA7FC, + 26443 - 11904: 0xCB47, + 26444 - 11904: 0xCB42, + 26445 - 11904: 0xCB45, + 26446 - 11904: 0xA7F5, + 26447 - 11904: 0xA7F6, + 26448 - 11904: 0xA7F7, + 26449 - 11904: 0xA7F8, + 26451 - 11904: 0xA840, + 26453 - 11904: 0xCB41, + 26454 - 11904: 0xA7FA, + 26455 - 11904: 0xA841, + 26457 - 11904: 0xCB40, + 26458 - 11904: 0xCB46, + 26460 - 11904: 0xA7F9, + 26461 - 11904: 0xCB44, + 26462 - 11904: 0xFCF1, + 26463 - 11904: 0xA7F4, + 26464 - 11904: 0xA7FE, + 26465 - 11904: 0x98E7, + 26466 - 11904: 0xFCF3, + 26471 - 11904: 0xFCF2, + 26474 - 11904: 0xAA57, + 26475 - 11904: 0x8CCA, + 26476 - 11904: 0xCCD4, + 26477 - 11904: 0xAA43, + 26478 - 11904: 0x8775, + 26479 - 11904: 0xAA4D, + 26480 - 11904: 0xAA4E, + 26481 - 11904: 0xAA46, + 26482 - 11904: 0xAA58, + 26483 - 11904: 0xAA48, + 26484 - 11904: 0xCCDC, + 26485 - 11904: 0xAA53, + 26486 - 11904: 0xCCD7, + 26487 - 11904: 0xAA49, + 26488 - 11904: 0xCCE6, + 26489 - 11904: 0xCCE7, + 26490 - 11904: 0xCCDF, + 26491 - 11904: 0xCCD8, + 26492 - 11904: 0xAA56, + 26493 - 11904: 0xCCE4, + 26494 - 11904: 0xAA51, + 26495 - 11904: 0xAA4F, + 26497 - 11904: 0xCCE5, + 26498 - 11904: 0x87BA, + 26499 - 11904: 0xCCE3, + 26500 - 11904: 0xCCDB, + 26501 - 11904: 0xCCD3, + 26502 - 11904: 0xCCDA, + 26503 - 11904: 0xAA4A, + 26505 - 11904: 0xAA50, + 26507 - 11904: 0xAA44, + 26508 - 11904: 0xCCDE, + 26509 - 11904: 0xCCDD, + 26510 - 11904: 0xCCD5, + 26511 - 11904: 0x93E5, + 26512 - 11904: 0xAA52, + 26513 - 11904: 0xCCE1, + 26514 - 11904: 0xCCD6, + 26515 - 11904: 0xAA55, + 26516 - 11904: 0xCCE8, + 26517 - 11904: 0xAA45, + 26519 - 11904: 0xAA4C, + 26520 - 11904: 0xCCD9, + 26521 - 11904: 0xCCE2, + 26522 - 11904: 0xAA54, + 26524 - 11904: 0xAA47, + 26525 - 11904: 0xAA4B, + 26527 - 11904: 0xCCE0, + 26528 - 11904: 0x9A59, + 26532 - 11904: 0x8DB5, + 26540 - 11904: 0xFD4D, + 26542 - 11904: 0xCF5B, + 26543 - 11904: 0xAC5C, + 26544 - 11904: 0xAC69, + 26545 - 11904: 0xFD5E, + 26546 - 11904: 0xCF56, + 26547 - 11904: 0xCF4C, + 26548 - 11904: 0xAC62, + 26549 - 11904: 0xCF4A, + 26550 - 11904: 0xAC5B, + 26551 - 11904: 0xCF45, + 26552 - 11904: 0xAC65, + 26553 - 11904: 0xCF52, + 26554 - 11904: 0xCEFE, + 26555 - 11904: 0xCF41, + 26559 - 11904: 0x8F7D, + 26560 - 11904: 0xCF44, + 26561 - 11904: 0xCEFB, + 26562 - 11904: 0xCF51, + 26563 - 11904: 0xCF61, + 26564 - 11904: 0xAC60, + 26565 - 11904: 0xCF46, + 26566 - 11904: 0xCF58, + 26568 - 11904: 0xCEFD, + 26569 - 11904: 0xCF5F, + 26570 - 11904: 0xCF60, + 26571 - 11904: 0xCF63, + 26572 - 11904: 0xCF5A, + 26573 - 11904: 0xCF4B, + 26574 - 11904: 0xCF53, + 26575 - 11904: 0xAC66, + 26576 - 11904: 0xAC59, + 26577 - 11904: 0xAC61, + 26578 - 11904: 0xAC6D, + 26579 - 11904: 0xAC56, + 26580 - 11904: 0xAC58, + 26582 - 11904: 0x9547, + 26583 - 11904: 0xFCF6, + 26584 - 11904: 0xCF43, + 26585 - 11904: 0xAC6A, + 26586 - 11904: 0xAC63, + 26587 - 11904: 0xCF5D, + 26588 - 11904: 0xCF40, + 26589 - 11904: 0xAC6C, + 26590 - 11904: 0xAC67, + 26591 - 11904: 0xCF49, + 26594 - 11904: 0xAC6B, + 26595 - 11904: 0xCF50, + 26596 - 11904: 0xCF48, + 26597 - 11904: 0xAC64, + 26598 - 11904: 0xCF5C, + 26599 - 11904: 0xCF54, + 26601 - 11904: 0xAC5E, + 26602 - 11904: 0xCF62, + 26603 - 11904: 0xCF47, + 26604 - 11904: 0xAC5A, + 26605 - 11904: 0xCF59, + 26606 - 11904: 0xCF4F, + 26607 - 11904: 0xAC5F, + 26608 - 11904: 0xCF55, + 26609 - 11904: 0xAC57, + 26610 - 11904: 0xCEFC, + 26611 - 11904: 0xAC68, + 26612 - 11904: 0xAEE3, + 26613 - 11904: 0xAC5D, + 26614 - 11904: 0xCF4E, + 26615 - 11904: 0xCF4D, + 26616 - 11904: 0xCF42, + 26617 - 11904: 0x9250, + 26618 - 11904: 0xCF5E, + 26620 - 11904: 0xCF57, + 26622 - 11904: 0x8968, + 26623 - 11904: 0xAC55, + 26624 - 11904: 0x8DB6, + 26625 - 11904: 0xFCFB, + 26626 - 11904: 0xA07D, + 26627 - 11904: 0x98FC, + 26628 - 11904: 0x8969, + 26637 - 11904: 0xFE4F, + 26640 - 11904: 0x9256, + 26642 - 11904: 0xD1EC, + 26643 - 11904: 0xAEEA, + 26644 - 11904: 0xD1ED, + 26646 - 11904: 0xD1E1, + 26647 - 11904: 0xAEDF, + 26648 - 11904: 0xAEEB, + 26650 - 11904: 0xD1DA, + 26651 - 11904: 0xFAC9, + 26652 - 11904: 0xD1E3, + 26653 - 11904: 0xD1EB, + 26654 - 11904: 0x93E8, + 26655 - 11904: 0xD1D9, + 26656 - 11904: 0xD1F4, + 26657 - 11904: 0xAED5, + 26658 - 11904: 0xFCF8, + 26661 - 11904: 0xD1F3, + 26662 - 11904: 0xD1EE, + 26664 - 11904: 0xD1EF, + 26665 - 11904: 0xAEDD, + 26666 - 11904: 0xAEE8, + 26667 - 11904: 0xD1E5, + 26669 - 11904: 0xD1E6, + 26670 - 11904: 0xD1F0, + 26671 - 11904: 0xD1E7, + 26673 - 11904: 0xD1E2, + 26674 - 11904: 0xD1DC, + 26675 - 11904: 0xD1DD, + 26676 - 11904: 0xD1EA, + 26677 - 11904: 0xD1E4, + 26678 - 11904: 0x9CE3, + 26679 - 11904: 0xFDA9, + 26680 - 11904: 0xAED6, + 26681 - 11904: 0xAEDA, + 26682 - 11904: 0xD1F2, + 26683 - 11904: 0xD1DE, + 26684 - 11904: 0xAEE6, + 26685 - 11904: 0xAEE2, + 26686 - 11904: 0xFC44, + 26688 - 11904: 0xAEE5, + 26689 - 11904: 0xAEEC, + 26690 - 11904: 0xAEDB, + 26691 - 11904: 0xAEE7, + 26692 - 11904: 0xD1E9, + 26693 - 11904: 0xAEE9, + 26694 - 11904: 0xAED8, + 26695 - 11904: 0x9640, + 26696 - 11904: 0xAED7, + 26697 - 11904: 0xD1DB, + 26698 - 11904: 0x8DB8, + 26699 - 11904: 0xD1DF, + 26700 - 11904: 0xAEE0, + 26701 - 11904: 0xD1F1, + 26702 - 11904: 0xD1E8, + 26703 - 11904: 0xD1E0, + 26704 - 11904: 0xAEE4, + 26705 - 11904: 0xAEE1, + 26707 - 11904: 0xAED9, + 26708 - 11904: 0xAEDC, + 26709 - 11904: 0x9B4A, + 26710 - 11904: 0x8FB9, + 26717 - 11904: 0xFCFE, + 26725 - 11904: 0x896A, + 26731 - 11904: 0xD5C4, + 26733 - 11904: 0xD5B4, + 26734 - 11904: 0xD5B5, + 26735 - 11904: 0xD5B9, + 26737 - 11904: 0xD5C8, + 26738 - 11904: 0xD5C5, + 26740 - 11904: 0xD5BE, + 26741 - 11904: 0xD5BD, + 26742 - 11904: 0xB1ED, + 26743 - 11904: 0xD5C1, + 26744 - 11904: 0xD5D0, + 26745 - 11904: 0xD5B0, + 26747 - 11904: 0xD5D1, + 26748 - 11904: 0xD5C3, + 26749 - 11904: 0xD5D5, + 26750 - 11904: 0xD5C9, + 26751 - 11904: 0xB1EC, + 26752 - 11904: 0xD5C7, + 26753 - 11904: 0xB1E7, + 26754 - 11904: 0xB1FC, + 26755 - 11904: 0xB1F2, + 26756 - 11904: 0x8DB9, + 26757 - 11904: 0xB1F6, + 26758 - 11904: 0xB1F5, + 26759 - 11904: 0xD5B1, + 26760 - 11904: 0x917E, + 26761 - 11904: 0xD5CE, + 26762 - 11904: 0xD5D4, + 26763 - 11904: 0xD5CC, + 26764 - 11904: 0xD5D3, + 26767 - 11904: 0xD5C0, + 26768 - 11904: 0xD5B2, + 26769 - 11904: 0xD5D2, + 26770 - 11904: 0xD5C2, + 26771 - 11904: 0xB1EA, + 26772 - 11904: 0xB1F7, + 26774 - 11904: 0xD5CB, + 26775 - 11904: 0xB1F0, + 26776 - 11904: 0x93F4, + 26779 - 11904: 0xD5CA, + 26780 - 11904: 0xD5B3, + 26781 - 11904: 0xB1F8, + 26783 - 11904: 0xB1FA, + 26784 - 11904: 0xD5CD, + 26785 - 11904: 0xB1FB, + 26786 - 11904: 0xB1E9, + 26787 - 11904: 0xD5BA, + 26788 - 11904: 0xD5CF, + 26790 - 11904: 0xFB7C, + 26791 - 11904: 0xB1EF, + 26792 - 11904: 0xB1F9, + 26793 - 11904: 0xD5BC, + 26794 - 11904: 0xD5C6, + 26795 - 11904: 0xD5B7, + 26796 - 11904: 0xD5BB, + 26797 - 11904: 0xB1F4, + 26798 - 11904: 0xD5B6, + 26799 - 11904: 0xB1E8, + 26800 - 11904: 0xB1F1, + 26801 - 11904: 0xB1EE, + 26802 - 11904: 0xD5BF, + 26803 - 11904: 0xAEDE, + 26804 - 11904: 0xD9C0, + 26805 - 11904: 0xB1EB, + 26806 - 11904: 0x93E7, + 26809 - 11904: 0x97EF, + 26813 - 11904: 0xFE4A, + 26819 - 11904: 0xFD45, + 26820 - 11904: 0xB1F3, + 26821 - 11904: 0x96A5, + 26822 - 11904: 0xD9C3, + 26823 - 11904: 0xD9D9, + 26824 - 11904: 0xD9CE, + 26825 - 11904: 0xB4D6, + 26826 - 11904: 0xFEE0, + 26827 - 11904: 0xB4D1, + 26828 - 11904: 0xD9BD, + 26829 - 11904: 0xB4D2, + 26830 - 11904: 0xD9CD, + 26832 - 11904: 0xD9C6, + 26833 - 11904: 0xD9D3, + 26834 - 11904: 0xB4CE, + 26835 - 11904: 0xD9AB, + 26836 - 11904: 0xD9D5, + 26837 - 11904: 0xB4C4, + 26838 - 11904: 0xD9B3, + 26839 - 11904: 0xB4C7, + 26840 - 11904: 0xB4C6, + 26842 - 11904: 0xB4D7, + 26844 - 11904: 0xD9AD, + 26845 - 11904: 0xD9CF, + 26846 - 11904: 0xD9D0, + 26847 - 11904: 0xB4C9, + 26848 - 11904: 0xB4C5, + 26849 - 11904: 0xD9BB, + 26851 - 11904: 0xB4D0, + 26852 - 11904: 0xD9B6, + 26854 - 11904: 0xD9D1, + 26855 - 11904: 0xB4CC, + 26856 - 11904: 0xD9C9, + 26857 - 11904: 0xD9D6, + 26858 - 11904: 0xD9B0, + 26859 - 11904: 0xD9B5, + 26860 - 11904: 0xD9AF, + 26862 - 11904: 0xB4CB, + 26863 - 11904: 0xD9C2, + 26864 - 11904: 0xDDDE, + 26865 - 11904: 0xD9B1, + 26866 - 11904: 0xB4CF, + 26867 - 11904: 0xD9BA, + 26868 - 11904: 0xD9D2, + 26869 - 11904: 0xB4CA, + 26870 - 11904: 0xD9B7, + 26871 - 11904: 0xD9B4, + 26872 - 11904: 0xD9C5, + 26873 - 11904: 0xB4CD, + 26874 - 11904: 0xB4C3, + 26875 - 11904: 0xB4D9, + 26876 - 11904: 0xD9C8, + 26877 - 11904: 0xD9C7, + 26880 - 11904: 0xFD48, + 26881 - 11904: 0xFD47, + 26882 - 11904: 0xFEF2, + 26883 - 11904: 0xFE6A, + 26884 - 11904: 0xD9AC, + 26885 - 11904: 0xB4C8, + 26886 - 11904: 0xD9D4, + 26887 - 11904: 0xD9BC, + 26888 - 11904: 0xD9BE, + 26889 - 11904: 0x8DBD, + 26890 - 11904: 0xD9CB, + 26891 - 11904: 0xD9CA, + 26892 - 11904: 0xD9AA, + 26893 - 11904: 0xB4D3, + 26894 - 11904: 0xB4D5, + 26895 - 11904: 0xD9B2, + 26896 - 11904: 0xD9B9, + 26897 - 11904: 0xD9C1, + 26898 - 11904: 0xB4D4, + 26899 - 11904: 0xD9B8, + 26900 - 11904: 0xD9C4, + 26901 - 11904: 0xD9D7, + 26903 - 11904: 0xD9CC, + 26904 - 11904: 0x9BA1, + 26905 - 11904: 0x8CA2, + 26906 - 11904: 0x9AB7, + 26907 - 11904: 0x8EFC, + 26917 - 11904: 0xD9D8, + 26922 - 11904: 0xD9AE, + 26924 - 11904: 0x9FA1, + 26927 - 11904: 0xDDF2, + 26928 - 11904: 0xB7A6, + 26930 - 11904: 0xDDF0, + 26931 - 11904: 0xDDDB, + 26932 - 11904: 0xDDE0, + 26933 - 11904: 0xDDD9, + 26934 - 11904: 0xFD51, + 26935 - 11904: 0xDDEC, + 26936 - 11904: 0xDDCB, + 26937 - 11904: 0xDDD2, + 26939 - 11904: 0xDDEA, + 26940 - 11904: 0xDDF4, + 26941 - 11904: 0xDDDC, + 26942 - 11904: 0xFAAD, + 26943 - 11904: 0xDDCF, + 26944 - 11904: 0xDDE2, + 26945 - 11904: 0xDDE7, + 26946 - 11904: 0xDDD3, + 26947 - 11904: 0x8DBE, + 26948 - 11904: 0xDDE4, + 26949 - 11904: 0xDDD0, + 26950 - 11904: 0x89A4, + 26952 - 11904: 0xDDD7, + 26953 - 11904: 0xDDD8, + 26954 - 11904: 0xB7A8, + 26955 - 11904: 0xDDEB, + 26956 - 11904: 0xDDE9, + 26958 - 11904: 0xDDCC, + 26959 - 11904: 0xDDEE, + 26961 - 11904: 0xDDEF, + 26962 - 11904: 0xDDF1, + 26963 - 11904: 0xB7AC, + 26964 - 11904: 0xB7A4, + 26965 - 11904: 0x9AD9, + 26966 - 11904: 0xD5B8, + 26967 - 11904: 0xDDD4, + 26968 - 11904: 0xDDE6, + 26969 - 11904: 0xDDD5, + 26970 - 11904: 0xB7A1, + 26971 - 11904: 0xB7B1, + 26972 - 11904: 0xDDED, + 26973 - 11904: 0xB7AF, + 26974 - 11904: 0xB7AB, + 26975 - 11904: 0xDDCA, + 26976 - 11904: 0xB7A3, + 26977 - 11904: 0xFD4E, + 26978 - 11904: 0xDDCD, + 26979 - 11904: 0xB7B0, + 26980 - 11904: 0x8DC0, + 26981 - 11904: 0xDDDD, + 26982 - 11904: 0xDDC9, + 26983 - 11904: 0x97F0, + 26984 - 11904: 0xB7A9, + 26985 - 11904: 0xDDE1, + 26986 - 11904: 0xDDD1, + 26987 - 11904: 0xB7AA, + 26988 - 11904: 0xDDDA, + 26989 - 11904: 0xB77E, + 26990 - 11904: 0xB4D8, + 26991 - 11904: 0xDDE3, + 26992 - 11904: 0xD9BF, + 26993 - 11904: 0xDDCE, + 26994 - 11904: 0x93B4, + 26995 - 11904: 0xFD44, + 26996 - 11904: 0xDDE8, + 26997 - 11904: 0xB7A5, + 26998 - 11904: 0xDDE5, + 26999 - 11904: 0xB7A2, + 27000 - 11904: 0xDDDF, + 27001 - 11904: 0xB7AD, + 27002 - 11904: 0xDDD6, + 27003 - 11904: 0xDDF3, + 27008 - 11904: 0x9FA7, + 27010 - 11904: 0xB7A7, + 27011 - 11904: 0xDEC6, + 27013 - 11904: 0x8DC2, + 27014 - 11904: 0xB7AE, + 27018 - 11904: 0x99B6, + 27021 - 11904: 0xE24A, + 27022 - 11904: 0xE248, + 27024 - 11904: 0xE25E, + 27025 - 11904: 0xE246, + 27027 - 11904: 0xE258, + 27028 - 11904: 0xB77D, + 27029 - 11904: 0xBA5F, + 27030 - 11904: 0xE242, + 27031 - 11904: 0xE25D, + 27032 - 11904: 0xFD52, + 27033 - 11904: 0xE247, + 27034 - 11904: 0xE255, + 27035 - 11904: 0xBA64, + 27036 - 11904: 0xBA5D, + 27038 - 11904: 0xE25B, + 27039 - 11904: 0x8DC1, + 27040 - 11904: 0xE240, + 27041 - 11904: 0xE25A, + 27042 - 11904: 0x8E46, + 27043 - 11904: 0xBA6F, + 27044 - 11904: 0xE251, + 27045 - 11904: 0xE261, + 27046 - 11904: 0xBA6D, + 27047 - 11904: 0xE249, + 27048 - 11904: 0xBA5E, + 27049 - 11904: 0xE24B, + 27050 - 11904: 0xE259, + 27051 - 11904: 0xBA67, + 27052 - 11904: 0xE244, + 27053 - 11904: 0xBA6B, + 27054 - 11904: 0xBA61, + 27055 - 11904: 0xE24D, + 27056 - 11904: 0xE243, + 27057 - 11904: 0xE1FC, + 27058 - 11904: 0xA0D1, + 27059 - 11904: 0xE257, + 27060 - 11904: 0xBA68, + 27061 - 11904: 0xE260, + 27062 - 11904: 0xE1FD, + 27063 - 11904: 0xBA65, + 27065 - 11904: 0xE253, + 27067 - 11904: 0xBA66, + 27068 - 11904: 0xE245, + 27069 - 11904: 0xE250, + 27070 - 11904: 0xE24C, + 27071 - 11904: 0xE24E, + 27072 - 11904: 0x9FCA, + 27073 - 11904: 0xBA60, + 27074 - 11904: 0xE25F, + 27075 - 11904: 0xBA6E, + 27076 - 11904: 0xE24F, + 27078 - 11904: 0xE262, + 27081 - 11904: 0xE1FE, + 27082 - 11904: 0xE254, + 27083 - 11904: 0xBA63, + 27084 - 11904: 0xBA6C, + 27085 - 11904: 0xBA6A, + 27086 - 11904: 0xE241, + 27087 - 11904: 0xE256, + 27088 - 11904: 0xBA69, + 27089 - 11904: 0x92CF, + 27091 - 11904: 0xBA62, + 27092 - 11904: 0xE252, + 27093 - 11904: 0x9CF4, + 27094 - 11904: 0x8DC4, + 27097 - 11904: 0xE25C, + 27105 - 11904: 0xFD41, + 27106 - 11904: 0xE5D5, + 27108 - 11904: 0xE5D1, + 27109 - 11904: 0xE5CD, + 27110 - 11904: 0xE5E1, + 27111 - 11904: 0xE5DE, + 27112 - 11904: 0xBCCD, + 27113 - 11904: 0x9B4C, + 27115 - 11904: 0xE5E5, + 27116 - 11904: 0xE5D4, + 27117 - 11904: 0xBCD8, + 27118 - 11904: 0xE5DB, + 27121 - 11904: 0xE5D0, + 27122 - 11904: 0xE5DA, + 27123 - 11904: 0xBCD5, + 27124 - 11904: 0xE5EE, + 27126 - 11904: 0xE5EB, + 27127 - 11904: 0xE5DD, + 27128 - 11904: 0xE5CE, + 27129 - 11904: 0xFD57, + 27130 - 11904: 0xFCEF, + 27131 - 11904: 0xE5E2, + 27132 - 11904: 0xE5E4, + 27133 - 11904: 0xBCD1, + 27134 - 11904: 0xE5D8, + 27135 - 11904: 0xE5D3, + 27136 - 11904: 0xE5CA, + 27137 - 11904: 0xBCCE, + 27138 - 11904: 0xBCD6, + 27139 - 11904: 0x9CDE, + 27140 - 11904: 0xE5E7, + 27141 - 11904: 0xBCD7, + 27142 - 11904: 0xE5CB, + 27143 - 11904: 0xE5ED, + 27144 - 11904: 0xE5E0, + 27145 - 11904: 0xE5E6, + 27146 - 11904: 0xBCD4, + 27147 - 11904: 0xFD42, + 27148 - 11904: 0x986C, + 27149 - 11904: 0xE5E3, + 27151 - 11904: 0xE5EA, + 27153 - 11904: 0xBCD9, + 27155 - 11904: 0xBCD3, + 27156 - 11904: 0xE5DC, + 27157 - 11904: 0xE5CF, + 27158 - 11904: 0xE5EF, + 27159 - 11904: 0xE5CC, + 27160 - 11904: 0xE5E8, + 27161 - 11904: 0xBCD0, + 27162 - 11904: 0x97F9, + 27163 - 11904: 0xE5D6, + 27164 - 11904: 0x9558, + 27165 - 11904: 0xE5D7, + 27166 - 11904: 0xBCCF, + 27167 - 11904: 0xBCCC, + 27168 - 11904: 0xE5D2, + 27169 - 11904: 0xBCD2, + 27171 - 11904: 0xBCCB, + 27173 - 11904: 0xE5E9, + 27174 - 11904: 0xE5EC, + 27175 - 11904: 0xE5D9, + 27176 - 11904: 0xE9CA, + 27177 - 11904: 0x87B6, + 27179 - 11904: 0x985E, + 27180 - 11904: 0xFE7B, + 27181 - 11904: 0x94CD, + 27186 - 11904: 0xE9C2, + 27187 - 11904: 0x93EE, + 27188 - 11904: 0xE9BE, + 27189 - 11904: 0xBEF6, + 27192 - 11904: 0xBEEB, + 27193 - 11904: 0xBEF0, + 27194 - 11904: 0xBEEC, + 27195 - 11904: 0xE9CC, + 27196 - 11904: 0xE9D7, + 27197 - 11904: 0xBEEA, + 27198 - 11904: 0xE9C4, + 27199 - 11904: 0xE9CD, + 27200 - 11904: 0xE5DF, + 27201 - 11904: 0xE9CE, + 27203 - 11904: 0x8CA3, + 27204 - 11904: 0xBEF1, + 27205 - 11904: 0xFD5A, + 27206 - 11904: 0xE9DD, + 27207 - 11904: 0xBEF5, + 27208 - 11904: 0xBEF8, + 27209 - 11904: 0xE9C0, + 27211 - 11904: 0xBEF4, + 27212 - 11904: 0x93F5, + 27213 - 11904: 0xE9DB, + 27214 - 11904: 0xE9DC, + 27215 - 11904: 0xE9D2, + 27216 - 11904: 0xE9D1, + 27217 - 11904: 0xE9C9, + 27218 - 11904: 0x93EF, + 27219 - 11904: 0x8EEA, + 27220 - 11904: 0xE9D3, + 27221 - 11904: 0xE9DA, + 27222 - 11904: 0xE9D9, + 27223 - 11904: 0x8F5B, + 27224 - 11904: 0xBEEF, + 27225 - 11904: 0xBEED, + 27226 - 11904: 0xE9CB, + 27227 - 11904: 0xE9C8, + 27229 - 11904: 0xE9C5, + 27230 - 11904: 0xE9D8, + 27231 - 11904: 0xBEF7, + 27232 - 11904: 0xE9D6, + 27233 - 11904: 0xBEF3, + 27234 - 11904: 0xBEF2, + 27235 - 11904: 0x8C5E, + 27236 - 11904: 0xE9D0, + 27237 - 11904: 0x8DC6, + 27238 - 11904: 0xE9BF, + 27239 - 11904: 0xE9C1, + 27240 - 11904: 0xE9C3, + 27241 - 11904: 0xE9D5, + 27242 - 11904: 0xE9CF, + 27243 - 11904: 0xBEEE, + 27245 - 11904: 0xE9C6, + 27247 - 11904: 0xE9D4, + 27249 - 11904: 0x8DC8, + 27252 - 11904: 0x8DC7, + 27254 - 11904: 0xE9C7, + 27258 - 11904: 0x93F7, + 27262 - 11904: 0xC0CF, + 27263 - 11904: 0xED45, + 27264 - 11904: 0xC0C8, + 27265 - 11904: 0xECF5, + 27266 - 11904: 0x8DC9, + 27267 - 11904: 0xED41, + 27268 - 11904: 0xC0CA, + 27269 - 11904: 0xED48, + 27271 - 11904: 0xECFC, + 27273 - 11904: 0xECF7, + 27274 - 11904: 0xFBF2, + 27276 - 11904: 0xED49, + 27277 - 11904: 0xECF3, + 27278 - 11904: 0xECFE, + 27279 - 11904: 0x9670, + 27280 - 11904: 0xC0D1, + 27281 - 11904: 0xED44, + 27282 - 11904: 0xED4A, + 27283 - 11904: 0xECFD, + 27284 - 11904: 0xC0C9, + 27285 - 11904: 0xED40, + 27286 - 11904: 0xECF4, + 27287 - 11904: 0xC0D0, + 27289 - 11904: 0x8DCB, + 27290 - 11904: 0xED47, + 27291 - 11904: 0xECF9, + 27292 - 11904: 0xC0CC, + 27293 - 11904: 0xFD5C, + 27294 - 11904: 0xECFB, + 27295 - 11904: 0xECF8, + 27296 - 11904: 0xC0D2, + 27297 - 11904: 0xECFA, + 27298 - 11904: 0xC0CB, + 27299 - 11904: 0xC0CE, + 27300 - 11904: 0xED43, + 27301 - 11904: 0xECF6, + 27302 - 11904: 0xED46, + 27303 - 11904: 0x8F65, + 27304 - 11904: 0xED42, + 27307 - 11904: 0x8DCD, + 27308 - 11904: 0xC263, + 27309 - 11904: 0xEFE7, + 27310 - 11904: 0xC268, + 27311 - 11904: 0xC269, + 27313 - 11904: 0x9DA8, + 27314 - 11904: 0x94F9, + 27315 - 11904: 0xC262, + 27316 - 11904: 0xEFE6, + 27317 - 11904: 0x8DCE, + 27318 - 11904: 0xEFE3, + 27319 - 11904: 0xEFE4, + 27320 - 11904: 0xC266, + 27321 - 11904: 0xEFDE, + 27322 - 11904: 0xEFE2, + 27323 - 11904: 0xC265, + 27325 - 11904: 0xEFDF, + 27326 - 11904: 0x93EA, + 27330 - 11904: 0xC267, + 27331 - 11904: 0xC264, + 27333 - 11904: 0xEFDD, + 27334 - 11904: 0xEFE1, + 27335 - 11904: 0xEFE5, + 27336 - 11904: 0xFD5F, + 27337 - 11904: 0x93F0, + 27338 - 11904: 0x9FB6, + 27339 - 11904: 0xF251, + 27340 - 11904: 0xF24E, + 27341 - 11904: 0xF257, + 27343 - 11904: 0xF256, + 27344 - 11904: 0xF254, + 27345 - 11904: 0xF24F, + 27347 - 11904: 0xC372, + 27348 - 11904: 0x8DCF, + 27352 - 11904: 0x9763, + 27353 - 11904: 0xF250, + 27354 - 11904: 0xC371, + 27355 - 11904: 0xC0CD, + 27356 - 11904: 0xF253, + 27357 - 11904: 0xC370, + 27358 - 11904: 0xF258, + 27359 - 11904: 0xF252, + 27360 - 11904: 0xF24D, + 27361 - 11904: 0xEFE0, + 27365 - 11904: 0xC36F, + 27367 - 11904: 0xF24C, + 27368 - 11904: 0xF456, + 27370 - 11904: 0xF455, + 27371 - 11904: 0xF255, + 27372 - 11904: 0xC468, + 27374 - 11904: 0xF459, + 27375 - 11904: 0xF45A, + 27376 - 11904: 0xF454, + 27377 - 11904: 0xF458, + 27379 - 11904: 0xF453, + 27382 - 11904: 0x8DD0, + 27384 - 11904: 0xF5D1, + 27385 - 11904: 0xF457, + 27386 - 11904: 0xC4E7, + 27387 - 11904: 0xC4E5, + 27388 - 11904: 0xF5CF, + 27392 - 11904: 0xF5D2, + 27394 - 11904: 0xF5CE, + 27395 - 11904: 0xF5D0, + 27396 - 11904: 0xC4E6, + 27397 - 11904: 0x93F1, + 27400 - 11904: 0xF6E5, + 27401 - 11904: 0xF6E6, + 27402 - 11904: 0xC576, + 27403 - 11904: 0xF6E4, + 27407 - 11904: 0xF7E2, + 27408 - 11904: 0xC5CF, + 27409 - 11904: 0xF7E0, + 27410 - 11904: 0xF7E1, + 27411 - 11904: 0xF8AC, + 27414 - 11904: 0xC656, + 27415 - 11904: 0xF8F3, + 27416 - 11904: 0xF8F1, + 27417 - 11904: 0xF8F2, + 27418 - 11904: 0xF8F4, + 27421 - 11904: 0xFD62, + 27422 - 11904: 0xF9BB, + 27424 - 11904: 0xA4ED, + 27425 - 11904: 0xA6B8, + 27427 - 11904: 0xAA59, + 27429 - 11904: 0xCCE9, + 27432 - 11904: 0xCF64, + 27436 - 11904: 0xD1F5, + 27437 - 11904: 0xD1F7, + 27439 - 11904: 0xD1F6, + 27441 - 11904: 0xD1F8, + 27442 - 11904: 0xB1FD, + 27443 - 11904: 0xD5D7, + 27444 - 11904: 0xD1F9, + 27445 - 11904: 0xFD65, + 27446 - 11904: 0xD5D6, + 27447 - 11904: 0xD5D8, + 27448 - 11904: 0xD5D9, + 27449 - 11904: 0xD9DA, + 27450 - 11904: 0xB4DB, + 27451 - 11904: 0xD9DB, + 27452 - 11904: 0xD9DD, + 27453 - 11904: 0xB4DC, + 27454 - 11904: 0xB4DA, + 27455 - 11904: 0xD9DC, + 27457 - 11904: 0xDDFA, + 27458 - 11904: 0xDDF8, + 27459 - 11904: 0xDDF7, + 27461 - 11904: 0xDDF6, + 27462 - 11904: 0xDDF5, + 27463 - 11904: 0xB7B2, + 27464 - 11904: 0xDDF9, + 27465 - 11904: 0xBA70, + 27466 - 11904: 0xE263, + 27467 - 11904: 0xE265, + 27468 - 11904: 0xBA71, + 27469 - 11904: 0xE264, + 27470 - 11904: 0xBCDB, + 27472 - 11904: 0xBCDA, + 27473 - 11904: 0xE5F0, + 27474 - 11904: 0x9FDB, + 27476 - 11904: 0xE9DF, + 27477 - 11904: 0xE9DE, + 27478 - 11904: 0xE9E0, + 27479 - 11904: 0x93F8, + 27481 - 11904: 0xBEF9, + 27483 - 11904: 0xED4B, + 27484 - 11904: 0xC0D3, + 27486 - 11904: 0xEFE8, + 27487 - 11904: 0xC26A, + 27488 - 11904: 0xF259, + 27489 - 11904: 0xC577, + 27490 - 11904: 0xA4EE, + 27491 - 11904: 0xA5BF, + 27492 - 11904: 0xA6B9, + 27493 - 11904: 0xA842, + 27494 - 11904: 0xAA5A, + 27495 - 11904: 0xAA5B, + 27498 - 11904: 0xAC6E, + 27501 - 11904: 0xD1FA, + 27503 - 11904: 0x8BF7, + 27506 - 11904: 0xB7B3, + 27508 - 11904: 0xFD66, + 27510 - 11904: 0xE6D1, + 27511 - 11904: 0xBEFA, + 27512 - 11904: 0xC26B, + 27513 - 11904: 0xA4EF, + 27514 - 11904: 0x8BCF, + 27515 - 11904: 0xA6BA, + 27518 - 11904: 0xCCEB, + 27519 - 11904: 0xAA5C, + 27520 - 11904: 0xCCEA, + 27521 - 11904: 0x8DD1, + 27522 - 11904: 0xCF65, + 27523 - 11904: 0xAC6F, + 27524 - 11904: 0xCF66, + 27526 - 11904: 0xAC70, + 27528 - 11904: 0xD1FC, + 27529 - 11904: 0xAEEE, + 27530 - 11904: 0xAEED, + 27532 - 11904: 0xD5DE, + 27533 - 11904: 0xD5DC, + 27534 - 11904: 0xD5DD, + 27535 - 11904: 0xD5DB, + 27537 - 11904: 0xD5DA, + 27540 - 11904: 0xD9DE, + 27541 - 11904: 0xD9E1, + 27542 - 11904: 0xB4DE, + 27543 - 11904: 0xD9DF, + 27544 - 11904: 0xB4DD, + 27545 - 11904: 0xD9E0, + 27547 - 11904: 0xDDFB, + 27550 - 11904: 0xE266, + 27551 - 11904: 0xE267, + 27552 - 11904: 0xE268, + 27554 - 11904: 0xE5F3, + 27555 - 11904: 0xE5F2, + 27556 - 11904: 0xBCDC, + 27557 - 11904: 0xE5F1, + 27558 - 11904: 0xE5F4, + 27559 - 11904: 0xE9E1, + 27562 - 11904: 0xE9E2, + 27563 - 11904: 0xE9E3, + 27565 - 11904: 0xED4C, + 27566 - 11904: 0xC0D4, + 27567 - 11904: 0xC26C, + 27568 - 11904: 0xF25A, + 27570 - 11904: 0xC4E8, + 27571 - 11904: 0xC95F, + 27573 - 11904: 0xAC71, + 27574 - 11904: 0xCF67, + 27575 - 11904: 0xAEEF, + 27578 - 11904: 0xB1FE, + 27580 - 11904: 0xB4DF, + 27581 - 11904: 0xD9E2, + 27583 - 11904: 0xB7B5, + 27584 - 11904: 0xB7B4, + 27585 - 11904: 0x8DD2, + 27587 - 11904: 0xE269, + 27588 - 11904: 0xE26A, + 27589 - 11904: 0xBCDD, + 27590 - 11904: 0xBCDE, + 27591 - 11904: 0xE9E5, + 27592 - 11904: 0xE9E4, + 27593 - 11904: 0xEFE9, + 27594 - 11904: 0xF7E3, + 27595 - 11904: 0xA4F0, + 27596 - 11904: 0xC960, + 27597 - 11904: 0xA5C0, + 27599 - 11904: 0xA843, + 27600 - 11904: 0xCB48, + 27602 - 11904: 0xAC72, + 27603 - 11904: 0xB7B6, + 27604 - 11904: 0xA4F1, + 27606 - 11904: 0xCF68, + 27607 - 11904: 0xAC73, + 27608 - 11904: 0xCF69, + 27610 - 11904: 0xC0D5, + 27611 - 11904: 0xA4F2, + 27612 - 11904: 0xFD71, + 27614 - 11904: 0xCCEC, + 27616 - 11904: 0xCF6A, + 27617 - 11904: 0xFD6F, + 27618 - 11904: 0xD242, + 27619 - 11904: 0xD241, + 27620 - 11904: 0xD1FE, + 27622 - 11904: 0xD1FD, + 27623 - 11904: 0xD243, + 27624 - 11904: 0xD240, + 27626 - 11904: 0x8DD3, + 27627 - 11904: 0xB240, + 27628 - 11904: 0xB241, + 27631 - 11904: 0xB4E0, + 27632 - 11904: 0xD9E3, + 27634 - 11904: 0xD9E4, + 27635 - 11904: 0xD9E5, + 27639 - 11904: 0xDE41, + 27640 - 11904: 0xDE42, + 27641 - 11904: 0xDE40, + 27642 - 11904: 0x9FE7, + 27643 - 11904: 0xDDFD, + 27644 - 11904: 0xDDFE, + 27645 - 11904: 0xB7B7, + 27646 - 11904: 0xE26B, + 27647 - 11904: 0xE5F7, + 27648 - 11904: 0xE5F6, + 27649 - 11904: 0xE5F5, + 27650 - 11904: 0xE5F8, + 27651 - 11904: 0xE9E7, + 27652 - 11904: 0xE9E6, + 27653 - 11904: 0xBEFB, + 27654 - 11904: 0xE9E8, + 27656 - 11904: 0xC0D6, + 27657 - 11904: 0xED4D, + 27659 - 11904: 0xEFEA, + 27660 - 11904: 0xF25B, + 27661 - 11904: 0xF6E7, + 27663 - 11904: 0xA4F3, + 27664 - 11904: 0xA5C2, + 27665 - 11904: 0xA5C1, + 27667 - 11904: 0xAA5D, + 27668 - 11904: 0xC961, + 27669 - 11904: 0xC97E, + 27670 - 11904: 0xA6BB, + 27672 - 11904: 0xC9F7, + 27673 - 11904: 0xCB49, + 27674 - 11904: 0xCB4A, + 27675 - 11904: 0xAA5E, + 27676 - 11904: 0x90BD, + 27677 - 11904: 0xCCED, + 27679 - 11904: 0xAC74, + 27680 - 11904: 0xCF6B, + 27681 - 11904: 0xCF6C, + 27683 - 11904: 0xAEF0, + 27684 - 11904: 0xAEF4, + 27685 - 11904: 0xD244, + 27686 - 11904: 0xAEF3, + 27687 - 11904: 0xAEF1, + 27688 - 11904: 0xAEF2, + 27690 - 11904: 0xD5DF, + 27691 - 11904: 0xB242, + 27692 - 11904: 0xB4E3, + 27694 - 11904: 0xB4E1, + 27695 - 11904: 0xB4E2, + 27696 - 11904: 0xD9E6, + 27697 - 11904: 0x9FD0, + 27699 - 11904: 0xBA72, + 27700 - 11904: 0xA4F4, + 27701 - 11904: 0x8BD0, + 27702 - 11904: 0xC9A1, + 27703 - 11904: 0xFD72, + 27704 - 11904: 0xA5C3, + 27705 - 11904: 0x9CAE, + 27706 - 11904: 0x8BD1, + 27707 - 11904: 0xC9A4, + 27709 - 11904: 0x8ADB, + 27710 - 11904: 0xA5C6, + 27711 - 11904: 0xC9A3, + 27712 - 11904: 0xA5C5, + 27713 - 11904: 0xA5C4, + 27714 - 11904: 0xA844, + 27715 - 11904: 0xC9A2, + 27718 - 11904: 0xC9F8, + 27721 - 11904: 0xFAE4, + 27722 - 11904: 0xC9FC, + 27723 - 11904: 0xC9FE, + 27724 - 11904: 0xCA40, + 27725 - 11904: 0xA6C5, + 27726 - 11904: 0xA6C6, + 27727 - 11904: 0xC9FB, + 27728 - 11904: 0xA6C1, + 27730 - 11904: 0xC9F9, + 27732 - 11904: 0xC9FD, + 27733 - 11904: 0xA6C2, + 27735 - 11904: 0xA6BD, + 27736 - 11904: 0x95CE, + 27737 - 11904: 0xA6BE, + 27738 - 11904: 0xFD76, + 27739 - 11904: 0xA6C4, + 27740 - 11904: 0xC9FA, + 27741 - 11904: 0xA6BC, + 27742 - 11904: 0xA845, + 27743 - 11904: 0xA6BF, + 27744 - 11904: 0xA6C0, + 27745 - 11904: 0xA6C3, + 27749 - 11904: 0xCB5B, + 27750 - 11904: 0xCB59, + 27751 - 11904: 0xCB4C, + 27752 - 11904: 0xA851, + 27753 - 11904: 0xCB53, + 27754 - 11904: 0xA84C, + 27755 - 11904: 0xCB4D, + 27757 - 11904: 0xCB55, + 27758 - 11904: 0xFB62, + 27759 - 11904: 0xCB52, + 27760 - 11904: 0xA84F, + 27761 - 11904: 0xCB51, + 27762 - 11904: 0xA856, + 27763 - 11904: 0xCB5A, + 27764 - 11904: 0xA858, + 27765 - 11904: 0x8DD4, + 27766 - 11904: 0xA85A, + 27768 - 11904: 0xCB4B, + 27769 - 11904: 0xFD78, + 27770 - 11904: 0xA84D, + 27771 - 11904: 0xCB5C, + 27773 - 11904: 0xA854, + 27774 - 11904: 0xA857, + 27775 - 11904: 0x8EE3, + 27776 - 11904: 0xCD45, + 27777 - 11904: 0xA847, + 27778 - 11904: 0xA85E, + 27779 - 11904: 0xA855, + 27780 - 11904: 0xCB4E, + 27781 - 11904: 0xA84A, + 27782 - 11904: 0xA859, + 27783 - 11904: 0xCB56, + 27784 - 11904: 0xA848, + 27785 - 11904: 0xA849, + 27786 - 11904: 0xCD43, + 27787 - 11904: 0xCB4F, + 27788 - 11904: 0xA850, + 27789 - 11904: 0xA85B, + 27790 - 11904: 0xCB5D, + 27791 - 11904: 0xCB50, + 27792 - 11904: 0xA84E, + 27794 - 11904: 0xA853, + 27795 - 11904: 0xCCEE, + 27796 - 11904: 0xA85C, + 27797 - 11904: 0xCB57, + 27798 - 11904: 0xA852, + 27800 - 11904: 0xA85D, + 27801 - 11904: 0xA846, + 27802 - 11904: 0xCB54, + 27803 - 11904: 0xA84B, + 27804 - 11904: 0xFDB7, + 27805 - 11904: 0xCD44, + 27807 - 11904: 0x9076, + 27810 - 11904: 0x98C6, + 27818 - 11904: 0x8DD5, + 27819 - 11904: 0xAA6A, + 27820 - 11904: 0xAA7A, + 27821 - 11904: 0xCCF5, + 27822 - 11904: 0xAA71, + 27823 - 11904: 0x97D1, + 27824 - 11904: 0xCD4B, + 27825 - 11904: 0xAA62, + 27826 - 11904: 0x9EB6, + 27827 - 11904: 0xAA65, + 27828 - 11904: 0xCD42, + 27830 - 11904: 0xCCF3, + 27831 - 11904: 0xCCF7, + 27832 - 11904: 0xAA6D, + 27833 - 11904: 0xAA6F, + 27834 - 11904: 0xCCFA, + 27835 - 11904: 0xAA76, + 27836 - 11904: 0xAA68, + 27837 - 11904: 0xAA66, + 27838 - 11904: 0xAA67, + 27839 - 11904: 0xAA75, + 27840 - 11904: 0xCD47, + 27841 - 11904: 0xAA70, + 27842 - 11904: 0xCCF9, + 27843 - 11904: 0xCCFB, + 27844 - 11904: 0xAA6E, + 27845 - 11904: 0xAA73, + 27846 - 11904: 0xCCFC, + 27847 - 11904: 0xCD4A, + 27849 - 11904: 0xAC75, + 27850 - 11904: 0xAA79, + 27851 - 11904: 0xFAC7, + 27852 - 11904: 0xAA63, + 27853 - 11904: 0xCD49, + 27854 - 11904: 0xA042, + 27855 - 11904: 0xCD4D, + 27856 - 11904: 0xCCF8, + 27857 - 11904: 0xCD4F, + 27858 - 11904: 0xCD40, + 27859 - 11904: 0xAA6C, + 27860 - 11904: 0xCCF4, + 27861 - 11904: 0xAA6B, + 27862 - 11904: 0xAA7D, + 27863 - 11904: 0xAA72, + 27865 - 11904: 0xCCF2, + 27866 - 11904: 0xCF75, + 27867 - 11904: 0xAA78, + 27868 - 11904: 0xAA7C, + 27869 - 11904: 0xCD41, + 27870 - 11904: 0xCD46, + 27871 - 11904: 0x9873, + 27872 - 11904: 0xAA7E, + 27873 - 11904: 0xAA77, + 27874 - 11904: 0xAA69, + 27875 - 11904: 0xAA5F, + 27877 - 11904: 0xAA64, + 27879 - 11904: 0xCCF6, + 27880 - 11904: 0xAA60, + 27881 - 11904: 0xCD4E, + 27882 - 11904: 0x9FFC, + 27883 - 11904: 0xCCF0, + 27884 - 11904: 0xCCEF, + 27885 - 11904: 0xCCFD, + 27886 - 11904: 0xCCF1, + 27887 - 11904: 0xAA7B, + 27888 - 11904: 0xAEF5, + 27889 - 11904: 0xAA74, + 27890 - 11904: 0xCCFE, + 27891 - 11904: 0xAA61, + 27893 - 11904: 0xACA6, + 27897 - 11904: 0xCD4C, + 27903 - 11904: 0x8CA5, + 27904 - 11904: 0xCF7C, + 27905 - 11904: 0xCFA1, + 27906 - 11904: 0x8DD7, + 27907 - 11904: 0xCFA4, + 27908 - 11904: 0xCF77, + 27909 - 11904: 0x92FB, + 27910 - 11904: 0x8DD8, + 27911 - 11904: 0xCFA7, + 27912 - 11904: 0xCFAA, + 27913 - 11904: 0xCFAC, + 27914 - 11904: 0xCF74, + 27915 - 11904: 0xAC76, + 27916 - 11904: 0xAC7B, + 27917 - 11904: 0xD249, + 27918 - 11904: 0xACAD, + 27919 - 11904: 0xCFA5, + 27920 - 11904: 0xCFAD, + 27921 - 11904: 0xCF7B, + 27922 - 11904: 0xCF73, + 27926 - 11904: 0xD264, + 27927 - 11904: 0xAC7E, + 27928 - 11904: 0xCFA2, + 27929 - 11904: 0xCF78, + 27930 - 11904: 0xCF7A, + 27931 - 11904: 0xACA5, + 27933 - 11904: 0xCF7D, + 27934 - 11904: 0xAC7D, + 27935 - 11904: 0xCF70, + 27936 - 11904: 0xCFA8, + 27938 - 11904: 0xCFAB, + 27940 - 11904: 0x944F, + 27941 - 11904: 0xAC7A, + 27942 - 11904: 0x8DD9, + 27943 - 11904: 0xACA8, + 27944 - 11904: 0xCF6D, + 27945 - 11904: 0xACAA, + 27946 - 11904: 0xAC78, + 27947 - 11904: 0xACAE, + 27948 - 11904: 0xCFA9, + 27949 - 11904: 0xCF6F, + 27950 - 11904: 0xACAB, + 27951 - 11904: 0xD25E, + 27952 - 11904: 0xCD48, + 27953 - 11904: 0xAC7C, + 27954 - 11904: 0xAC77, + 27955 - 11904: 0xCF76, + 27956 - 11904: 0xCF6E, + 27957 - 11904: 0xACAC, + 27958 - 11904: 0xACA4, + 27959 - 11904: 0xCFA3, + 27960 - 11904: 0xACA9, + 27961 - 11904: 0xACA7, + 27962 - 11904: 0xCF79, + 27963 - 11904: 0xACA1, + 27964 - 11904: 0xCF71, + 27965 - 11904: 0xACA2, + 27966 - 11904: 0xACA3, + 27967 - 11904: 0xCF72, + 27968 - 11904: 0xCFA6, + 27969 - 11904: 0xAC79, + 27970 - 11904: 0xCF7E, + 27982 - 11904: 0x896B, + 27991 - 11904: 0x97CE, + 27992 - 11904: 0xD24C, + 27993 - 11904: 0xAEFD, + 27994 - 11904: 0xAF43, + 27995 - 11904: 0xFAF3, + 27996 - 11904: 0xFDAE, + 27998 - 11904: 0xD255, + 27999 - 11904: 0xD25B, + 28000 - 11904: 0xD257, + 28001 - 11904: 0xD24A, + 28002 - 11904: 0xD24D, + 28003 - 11904: 0xD246, + 28004 - 11904: 0xD247, + 28005 - 11904: 0xAF4A, + 28006 - 11904: 0xAEFA, + 28007 - 11904: 0xD256, + 28008 - 11904: 0xD25F, + 28009 - 11904: 0xAF45, + 28010 - 11904: 0xAEF6, + 28012 - 11904: 0xAF40, + 28013 - 11904: 0xD24E, + 28014 - 11904: 0xAF42, + 28015 - 11904: 0xD24F, + 28016 - 11904: 0xD259, + 28017 - 11904: 0xFBAF, + 28018 - 11904: 0x92B7, + 28020 - 11904: 0xAF44, + 28021 - 11904: 0xD268, + 28022 - 11904: 0xD248, + 28023 - 11904: 0xAEFC, + 28024 - 11904: 0xAEFB, + 28025 - 11904: 0xAF48, + 28026 - 11904: 0xD245, + 28027 - 11904: 0xD266, + 28028 - 11904: 0xD25A, + 28029 - 11904: 0xD267, + 28030 - 11904: 0xD261, + 28031 - 11904: 0xD253, + 28032 - 11904: 0xD262, + 28033 - 11904: 0x8DDA, + 28034 - 11904: 0xD25C, + 28035 - 11904: 0xD265, + 28036 - 11904: 0xD263, + 28037 - 11904: 0xAF49, + 28038 - 11904: 0xD254, + 28039 - 11904: 0xAEF9, + 28040 - 11904: 0xAEF8, + 28041 - 11904: 0xAF41, + 28042 - 11904: 0xAF47, + 28043 - 11904: 0xD260, + 28044 - 11904: 0xAF46, + 28045 - 11904: 0xD251, + 28046 - 11904: 0xB243, + 28047 - 11904: 0x9C5A, + 28048 - 11904: 0xD269, + 28049 - 11904: 0xD250, + 28050 - 11904: 0xD24B, + 28051 - 11904: 0xAEFE, + 28052 - 11904: 0xAF4B, + 28053 - 11904: 0xAEF7, + 28054 - 11904: 0xFDAD, + 28055 - 11904: 0xD258, + 28056 - 11904: 0xD25D, + 28068 - 11904: 0x8DDC, + 28069 - 11904: 0x9444, + 28074 - 11904: 0xB265, + 28075 - 11904: 0xD5E1, + 28076 - 11904: 0xD5E5, + 28078 - 11904: 0xB252, + 28079 - 11904: 0xB250, + 28081 - 11904: 0x8DDD, + 28082 - 11904: 0xB247, + 28083 - 11904: 0xD5E3, + 28084 - 11904: 0xD5E2, + 28085 - 11904: 0xB25B, + 28087 - 11904: 0xD5E8, + 28088 - 11904: 0xB255, + 28089 - 11904: 0xA0D6, + 28090 - 11904: 0xD5FA, + 28091 - 11904: 0xD647, + 28092 - 11904: 0xB244, + 28093 - 11904: 0xD5F7, + 28094 - 11904: 0xD5F0, + 28095 - 11904: 0xB267, + 28096 - 11904: 0xD5E0, + 28098 - 11904: 0xD5FC, + 28100 - 11904: 0xB264, + 28101 - 11904: 0xB258, + 28102 - 11904: 0xB263, + 28103 - 11904: 0xB24E, + 28104 - 11904: 0xD5EC, + 28105 - 11904: 0xD5FE, + 28106 - 11904: 0xD5F6, + 28107 - 11904: 0xB24F, + 28108 - 11904: 0xB249, + 28109 - 11904: 0xD645, + 28111 - 11904: 0xD5FD, + 28112 - 11904: 0xD640, + 28113 - 11904: 0xB251, + 28114 - 11904: 0xB259, + 28115 - 11904: 0xD642, + 28116 - 11904: 0xD5EA, + 28117 - 11904: 0xD5FB, + 28118 - 11904: 0xD5EF, + 28119 - 11904: 0xD644, + 28120 - 11904: 0xB25E, + 28121 - 11904: 0xB246, + 28122 - 11904: 0xB25C, + 28123 - 11904: 0xD5F4, + 28124 - 11904: 0xD5F2, + 28125 - 11904: 0xD5F3, + 28126 - 11904: 0xB253, + 28127 - 11904: 0xD5EE, + 28128 - 11904: 0xD5ED, + 28129 - 11904: 0xB248, + 28130 - 11904: 0xD5E7, + 28131 - 11904: 0xD646, + 28132 - 11904: 0xB24A, + 28133 - 11904: 0xD5F1, + 28134 - 11904: 0xB268, + 28136 - 11904: 0xB262, + 28137 - 11904: 0xD5E6, + 28138 - 11904: 0xB25F, + 28139 - 11904: 0xB25D, + 28140 - 11904: 0xB266, + 28141 - 11904: 0xD5F8, + 28142 - 11904: 0xB261, + 28143 - 11904: 0xD252, + 28144 - 11904: 0xD5F9, + 28145 - 11904: 0xB260, + 28146 - 11904: 0xD641, + 28147 - 11904: 0xB245, + 28148 - 11904: 0xD5F5, + 28149 - 11904: 0xB257, + 28150 - 11904: 0xD5E9, + 28151 - 11904: 0xB256, + 28153 - 11904: 0xB254, + 28154 - 11904: 0xB24C, + 28155 - 11904: 0xB24B, + 28156 - 11904: 0xD9E7, + 28157 - 11904: 0xD643, + 28158 - 11904: 0x8C41, + 28160 - 11904: 0xD5EB, + 28162 - 11904: 0x97D5, + 28163 - 11904: 0xD9FC, + 28164 - 11904: 0x944A, + 28165 - 11904: 0xB24D, + 28170 - 11904: 0x944D, + 28175 - 11904: 0x97CB, + 28181 - 11904: 0x8DDE, + 28184 - 11904: 0x8DDF, + 28185 - 11904: 0xB541, + 28186 - 11904: 0xB25A, + 28187 - 11904: 0xB4EE, + 28188 - 11904: 0xD9F6, + 28189 - 11904: 0xFDB8, + 28191 - 11904: 0xD9EA, + 28192 - 11904: 0xB4EB, + 28193 - 11904: 0xB4E7, + 28194 - 11904: 0xDA49, + 28195 - 11904: 0xB4ED, + 28196 - 11904: 0xB4F1, + 28197 - 11904: 0xB4EC, + 28198 - 11904: 0xB4F5, + 28199 - 11904: 0xDA4D, + 28200 - 11904: 0xDA44, + 28201 - 11904: 0x8DE0, + 28202 - 11904: 0xFEF9, + 28203 - 11904: 0xD9F1, + 28204 - 11904: 0xB4FA, + 28205 - 11904: 0xB4F4, + 28206 - 11904: 0xD9FD, + 28207 - 11904: 0xFDBB, + 28208 - 11904: 0xDA4A, + 28209 - 11904: 0xDA43, + 28210 - 11904: 0xB4E8, + 28211 - 11904: 0xD9F7, + 28212 - 11904: 0xB4F7, + 28213 - 11904: 0xDA55, + 28214 - 11904: 0xDA56, + 28216 - 11904: 0xB4E5, + 28217 - 11904: 0xDA48, + 28218 - 11904: 0xB4F9, + 28219 - 11904: 0xD9FB, + 28220 - 11904: 0xD9ED, + 28221 - 11904: 0xD9EE, + 28222 - 11904: 0xB4FD, + 28223 - 11904: 0xD9F2, + 28224 - 11904: 0xD9F9, + 28225 - 11904: 0xD9F3, + 28227 - 11904: 0xB4FB, + 28228 - 11904: 0xB544, + 28229 - 11904: 0xD9EF, + 28230 - 11904: 0xD9E8, + 28231 - 11904: 0xD9E9, + 28233 - 11904: 0xD9EB, + 28234 - 11904: 0xB4EA, + 28235 - 11904: 0xD9F8, + 28237 - 11904: 0xB4F8, + 28238 - 11904: 0xB542, + 28239 - 11904: 0xFDC0, + 28240 - 11904: 0xFCF9, + 28241 - 11904: 0xD9FA, + 28242 - 11904: 0xDA53, + 28243 - 11904: 0xDA4B, + 28244 - 11904: 0xB4E6, + 28245 - 11904: 0xDA51, + 28246 - 11904: 0xB4F2, + 28247 - 11904: 0x8CDD, + 28248 - 11904: 0xB4F0, + 28249 - 11904: 0xFB7E, + 28250 - 11904: 0xDA57, + 28251 - 11904: 0xB4EF, + 28252 - 11904: 0xDA41, + 28253 - 11904: 0xD9F4, + 28254 - 11904: 0xD9FE, + 28255 - 11904: 0xB547, + 28256 - 11904: 0xDA45, + 28257 - 11904: 0xDA42, + 28258 - 11904: 0xD9F0, + 28259 - 11904: 0xB543, + 28260 - 11904: 0xDA4F, + 28261 - 11904: 0xDA4C, + 28262 - 11904: 0xDA54, + 28263 - 11904: 0xB4E9, + 28264 - 11904: 0xDA40, + 28265 - 11904: 0xB546, + 28267 - 11904: 0xDA47, + 28270 - 11904: 0xB4F3, + 28271 - 11904: 0xB4F6, + 28273 - 11904: 0xDA46, + 28274 - 11904: 0xB545, + 28275 - 11904: 0xD9F5, + 28276 - 11904: 0xD5E4, + 28278 - 11904: 0x92B3, + 28279 - 11904: 0xDA50, + 28280 - 11904: 0xDA4E, + 28281 - 11904: 0xDA52, + 28284 - 11904: 0xFDAF, + 28294 - 11904: 0x8DE1, + 28296 - 11904: 0xD9EC, + 28297 - 11904: 0xB540, + 28299 - 11904: 0x95D3, + 28301 - 11904: 0xDE61, + 28302 - 11904: 0xDE60, + 28303 - 11904: 0xDE46, + 28304 - 11904: 0xB7BD, + 28306 - 11904: 0xDE5F, + 28307 - 11904: 0xDE49, + 28308 - 11904: 0xDE4A, + 28310 - 11904: 0xB7C7, + 28311 - 11904: 0xDE68, + 28312 - 11904: 0xB7C2, + 28313 - 11904: 0xDE5E, + 28314 - 11904: 0x89C1, + 28315 - 11904: 0xDE43, + 28316 - 11904: 0xB7C8, + 28317 - 11904: 0xB7BE, + 28318 - 11904: 0xDE52, + 28319 - 11904: 0xDE48, + 28320 - 11904: 0xDE4B, + 28321 - 11904: 0xDE63, + 28322 - 11904: 0xB7B8, + 28323 - 11904: 0xDE6A, + 28324 - 11904: 0xDE62, + 28325 - 11904: 0xB7C1, + 28326 - 11904: 0xDE57, + 28327 - 11904: 0xB7CC, + 28330 - 11904: 0xB7CB, + 28331 - 11904: 0xB7C5, + 28334 - 11904: 0xDE69, + 28335 - 11904: 0xB7B9, + 28336 - 11904: 0xDE55, + 28337 - 11904: 0xDE4C, + 28338 - 11904: 0xDE59, + 28339 - 11904: 0xDE65, + 28340 - 11904: 0xB7CD, + 28341 - 11904: 0xFD68, + 28342 - 11904: 0xB7BB, + 28343 - 11904: 0xDE54, + 28344 - 11904: 0x9CB7, + 28345 - 11904: 0xDE4D, + 28346 - 11904: 0xB7C4, + 28347 - 11904: 0x8DE3, + 28348 - 11904: 0xB7C3, + 28349 - 11904: 0xDE50, + 28350 - 11904: 0xDE5A, + 28351 - 11904: 0xDE64, + 28352 - 11904: 0xDE47, + 28353 - 11904: 0xDE51, + 28354 - 11904: 0xB7BC, + 28355 - 11904: 0xDE5B, + 28356 - 11904: 0xB7C9, + 28357 - 11904: 0xB7C0, + 28358 - 11904: 0xDE4E, + 28359 - 11904: 0xB7BF, + 28360 - 11904: 0xDE45, + 28361 - 11904: 0xDE53, + 28362 - 11904: 0xDE67, + 28363 - 11904: 0xB4FE, + 28364 - 11904: 0xBAB0, + 28365 - 11904: 0xDE56, + 28366 - 11904: 0xE26C, + 28367 - 11904: 0xDE58, + 28368 - 11904: 0xDE66, + 28369 - 11904: 0xB7C6, + 28370 - 11904: 0xDE4F, + 28371 - 11904: 0xB7BA, + 28372 - 11904: 0xB7CA, + 28373 - 11904: 0xBCF0, + 28374 - 11904: 0xDE44, + 28376 - 11904: 0xDE5D, + 28377 - 11904: 0xFAC0, + 28378 - 11904: 0x8DE5, + 28379 - 11904: 0xFA64, + 28380 - 11904: 0xDE5C, + 28381 - 11904: 0x8947, + 28386 - 11904: 0x8DE4, + 28392 - 11904: 0x8DE7, + 28393 - 11904: 0x8DE8, + 28395 - 11904: 0xE2AA, + 28396 - 11904: 0xBAAD, + 28397 - 11904: 0xE27D, + 28398 - 11904: 0xE2A4, + 28399 - 11904: 0xBAA2, + 28401 - 11904: 0xE26E, + 28402 - 11904: 0xBAAF, + 28404 - 11904: 0xBA77, + 28405 - 11904: 0xE26D, + 28406 - 11904: 0xE2B0, + 28407 - 11904: 0xBAB1, + 28408 - 11904: 0xE271, + 28409 - 11904: 0xE2A3, + 28410 - 11904: 0xFDC7, + 28411 - 11904: 0xE273, + 28412 - 11904: 0xE2B3, + 28413 - 11904: 0xE2AF, + 28414 - 11904: 0xBA75, + 28415 - 11904: 0xBAA1, + 28416 - 11904: 0xE653, + 28417 - 11904: 0xBAAE, + 28418 - 11904: 0xBA7D, + 28419 - 11904: 0xE26F, + 28420 - 11904: 0xFDB0, + 28421 - 11904: 0xE2AE, + 28422 - 11904: 0xBAA3, + 28423 - 11904: 0xE2AB, + 28424 - 11904: 0xE2B8, + 28425 - 11904: 0xE275, + 28426 - 11904: 0xE27E, + 28427 - 11904: 0x9445, + 28428 - 11904: 0x97D6, + 28429 - 11904: 0xE2B6, + 28430 - 11904: 0xE2AC, + 28431 - 11904: 0xBA7C, + 28434 - 11904: 0xE27C, + 28435 - 11904: 0xBA76, + 28436 - 11904: 0xBA74, + 28437 - 11904: 0xBAA8, + 28438 - 11904: 0xFCC6, + 28439 - 11904: 0x9844, + 28440 - 11904: 0xE27A, + 28441 - 11904: 0xE277, + 28442 - 11904: 0xE278, + 28444 - 11904: 0xE2B2, + 28446 - 11904: 0xE2B7, + 28447 - 11904: 0xE2B5, + 28448 - 11904: 0xBA7A, + 28449 - 11904: 0xE2B9, + 28450 - 11904: 0xBA7E, + 28451 - 11904: 0xBAA7, + 28452 - 11904: 0x8DE9, + 28453 - 11904: 0xE270, + 28454 - 11904: 0xE5FA, + 28455 - 11904: 0xE279, + 28457 - 11904: 0xBA78, + 28458 - 11904: 0xBAAC, + 28459 - 11904: 0xBAA9, + 28460 - 11904: 0xBA7B, + 28461 - 11904: 0xE2A5, + 28462 - 11904: 0xE274, + 28463 - 11904: 0xBAAA, + 28464 - 11904: 0xE2A7, + 28465 - 11904: 0xBAA4, + 28466 - 11904: 0xBAA6, + 28467 - 11904: 0xBA73, + 28468 - 11904: 0x8DEA, + 28469 - 11904: 0xE2A9, + 28470 - 11904: 0xE2A1, + 28471 - 11904: 0xE272, + 28472 - 11904: 0xBAA5, + 28473 - 11904: 0xE2B1, + 28474 - 11904: 0xE2B4, + 28475 - 11904: 0xE27B, + 28476 - 11904: 0xE2A8, + 28477 - 11904: 0xFE50, + 28478 - 11904: 0xBA79, + 28479 - 11904: 0xBCDF, + 28480 - 11904: 0xE2A6, + 28481 - 11904: 0xE5F9, + 28483 - 11904: 0xE2AD, + 28484 - 11904: 0xFDCC, + 28494 - 11904: 0xE276, + 28495 - 11904: 0xE644, + 28496 - 11904: 0xE64E, + 28497 - 11904: 0xBCE2, + 28498 - 11904: 0xE64D, + 28499 - 11904: 0xE659, + 28500 - 11904: 0xBCE4, + 28501 - 11904: 0xE64B, + 28502 - 11904: 0x9DA7, + 28503 - 11904: 0xE64F, + 28504 - 11904: 0xBCEF, + 28506 - 11904: 0xE646, + 28507 - 11904: 0xBCE7, + 28508 - 11904: 0xFDCD, + 28509 - 11904: 0xE652, + 28510 - 11904: 0xE9F0, + 28511 - 11904: 0xBCF3, + 28512 - 11904: 0xBCF2, + 28513 - 11904: 0xE654, + 28514 - 11904: 0xE643, + 28515 - 11904: 0xE65E, + 28516 - 11904: 0xBCED, + 28518 - 11904: 0xBCE3, + 28519 - 11904: 0xE657, + 28521 - 11904: 0xE65B, + 28522 - 11904: 0xE660, + 28523 - 11904: 0xE655, + 28524 - 11904: 0xE649, + 28525 - 11904: 0xBCE6, + 28526 - 11904: 0xBCE9, + 28527 - 11904: 0xBCF1, + 28528 - 11904: 0xBCEC, + 28530 - 11904: 0xE64C, + 28531 - 11904: 0xE2A2, + 28532 - 11904: 0xFDCF, + 28534 - 11904: 0xE648, + 28535 - 11904: 0xE65F, + 28536 - 11904: 0xBCE8, + 28537 - 11904: 0x95D2, + 28538 - 11904: 0xBCEB, + 28539 - 11904: 0xE661, + 28540 - 11904: 0xBCE0, + 28541 - 11904: 0xE656, + 28542 - 11904: 0xE5FB, + 28543 - 11904: 0xE65C, + 28544 - 11904: 0xC0DF, + 28545 - 11904: 0x8DED, + 28546 - 11904: 0xE64A, + 28548 - 11904: 0xBCE1, + 28549 - 11904: 0xE645, + 28550 - 11904: 0xBCE5, + 28551 - 11904: 0xE5FC, + 28552 - 11904: 0xBAAB, + 28553 - 11904: 0xE641, + 28554 - 11904: 0xFCBA, + 28555 - 11904: 0xE65A, + 28556 - 11904: 0xE642, + 28557 - 11904: 0xE640, + 28558 - 11904: 0xBCEA, + 28560 - 11904: 0xE658, + 28562 - 11904: 0xE5FE, + 28563 - 11904: 0xE651, + 28564 - 11904: 0xE650, + 28565 - 11904: 0xE65D, + 28566 - 11904: 0xE647, + 28567 - 11904: 0xBCEE, + 28573 - 11904: 0xFDC5, + 28574 - 11904: 0xE9F3, + 28575 - 11904: 0xFDD2, + 28576 - 11904: 0xBF49, + 28577 - 11904: 0xBEFE, + 28578 - 11904: 0xEA40, + 28579 - 11904: 0xE9EB, + 28580 - 11904: 0xBF41, + 28581 - 11904: 0xE9F7, + 28582 - 11904: 0xBF48, + 28583 - 11904: 0xBF43, + 28584 - 11904: 0xE9F5, + 28585 - 11904: 0xED4F, + 28586 - 11904: 0xE9FB, + 28587 - 11904: 0xEA42, + 28588 - 11904: 0xE9FA, + 28589 - 11904: 0xE9E9, + 28590 - 11904: 0xE9F8, + 28591 - 11904: 0xEA44, + 28592 - 11904: 0xEA46, + 28593 - 11904: 0xBEFD, + 28594 - 11904: 0xEA45, + 28595 - 11904: 0xBF44, + 28596 - 11904: 0xBF4A, + 28597 - 11904: 0x9CDC, + 28598 - 11904: 0xBF47, + 28600 - 11904: 0xE9FE, + 28601 - 11904: 0xBF46, + 28602 - 11904: 0xE9F9, + 28603 - 11904: 0x95CF, + 28604 - 11904: 0xE9ED, + 28605 - 11904: 0xE9F2, + 28606 - 11904: 0x8DEE, + 28607 - 11904: 0xE9FD, + 28608 - 11904: 0xBF45, + 28609 - 11904: 0xBF42, + 28610 - 11904: 0xBEFC, + 28611 - 11904: 0xBF40, + 28612 - 11904: 0xE9F1, + 28614 - 11904: 0xE5FD, + 28615 - 11904: 0xE9EC, + 28616 - 11904: 0xE9EF, + 28617 - 11904: 0xEA41, + 28618 - 11904: 0xE9F4, + 28619 - 11904: 0xE9EA, + 28620 - 11904: 0xED4E, + 28621 - 11904: 0xEA43, + 28622 - 11904: 0xE9EE, + 28623 - 11904: 0xE9FC, + 28627 - 11904: 0xFDD4, + 28628 - 11904: 0xED51, + 28629 - 11904: 0xC0E3, + 28632 - 11904: 0xC0D7, + 28633 - 11904: 0x96EC, + 28634 - 11904: 0x96EB, + 28635 - 11904: 0xC0DB, + 28636 - 11904: 0xED53, + 28637 - 11904: 0xED59, + 28638 - 11904: 0xED57, + 28639 - 11904: 0xC0D9, + 28640 - 11904: 0xC0DA, + 28641 - 11904: 0xC0E1, + 28642 - 11904: 0xED5A, + 28643 - 11904: 0xED52, + 28644 - 11904: 0xC0DC, + 28646 - 11904: 0xED56, + 28647 - 11904: 0xED55, + 28648 - 11904: 0xED5B, + 28649 - 11904: 0xC0E2, + 28651 - 11904: 0xC0DD, + 28652 - 11904: 0xC0E0, + 28653 - 11904: 0xED54, + 28654 - 11904: 0xC0E4, + 28655 - 11904: 0xC0DE, + 28656 - 11904: 0xC0E5, + 28657 - 11904: 0xC0D8, + 28658 - 11904: 0xED58, + 28660 - 11904: 0xED50, + 28662 - 11904: 0x90B6, + 28663 - 11904: 0xEFF7, + 28664 - 11904: 0xFDC3, + 28666 - 11904: 0xC271, + 28667 - 11904: 0xEFF4, + 28668 - 11904: 0xEFF6, + 28670 - 11904: 0xC26F, + 28671 - 11904: 0xEFF2, + 28672 - 11904: 0xEFF3, + 28673 - 11904: 0xEFEE, + 28675 - 11904: 0x98AB, + 28676 - 11904: 0xE9F6, + 28677 - 11904: 0xEFEF, + 28678 - 11904: 0xC270, + 28679 - 11904: 0xEFEB, + 28681 - 11904: 0xC26D, + 28682 - 11904: 0xEFF8, + 28683 - 11904: 0xC26E, + 28684 - 11904: 0xEFEC, + 28685 - 11904: 0xEFED, + 28686 - 11904: 0xEFF1, + 28687 - 11904: 0xC273, + 28689 - 11904: 0xC272, + 28692 - 11904: 0xEFF0, + 28693 - 11904: 0xC378, + 28694 - 11904: 0xF25F, + 28695 - 11904: 0xF265, + 28696 - 11904: 0xC379, + 28697 - 11904: 0xF25C, + 28698 - 11904: 0xC376, + 28699 - 11904: 0xC373, + 28700 - 11904: 0xF267, + 28701 - 11904: 0xC377, + 28702 - 11904: 0x96EE, + 28703 - 11904: 0xC374, + 28704 - 11904: 0xF25E, + 28705 - 11904: 0xF261, + 28706 - 11904: 0xF262, + 28707 - 11904: 0xF263, + 28708 - 11904: 0xF266, + 28710 - 11904: 0xEFF5, + 28711 - 11904: 0xF25D, + 28712 - 11904: 0xC375, + 28713 - 11904: 0xF264, + 28714 - 11904: 0xF268, + 28715 - 11904: 0xF260, + 28716 - 11904: 0x8DF4, + 28719 - 11904: 0xF45D, + 28720 - 11904: 0xC46A, + 28721 - 11904: 0xF460, + 28722 - 11904: 0xC46B, + 28723 - 11904: 0xF468, + 28724 - 11904: 0xF45F, + 28725 - 11904: 0xF45C, + 28727 - 11904: 0xF45E, + 28728 - 11904: 0xF462, + 28729 - 11904: 0xF465, + 28730 - 11904: 0xF464, + 28731 - 11904: 0xF467, + 28732 - 11904: 0xF45B, + 28734 - 11904: 0xC469, + 28735 - 11904: 0xF463, + 28736 - 11904: 0xF466, + 28737 - 11904: 0xF469, + 28738 - 11904: 0xF461, + 28739 - 11904: 0xF5D3, + 28740 - 11904: 0xF5D4, + 28741 - 11904: 0xF5D8, + 28742 - 11904: 0xF5D9, + 28744 - 11904: 0xF5D6, + 28745 - 11904: 0xF5D7, + 28746 - 11904: 0xF5D5, + 28747 - 11904: 0xFDE0, + 28748 - 11904: 0xC4E9, + 28749 - 11904: 0x8C67, + 28752 - 11904: 0x8DF6, + 28753 - 11904: 0xC578, + 28754 - 11904: 0xF6EB, + 28756 - 11904: 0x8DF7, + 28757 - 11904: 0xF6E8, + 28758 - 11904: 0xF6E9, + 28759 - 11904: 0xF6EA, + 28760 - 11904: 0xC579, + 28762 - 11904: 0xF7E5, + 28763 - 11904: 0xF7E4, + 28764 - 11904: 0x8FFA, + 28765 - 11904: 0xF8AF, + 28766 - 11904: 0xC5F4, + 28767 - 11904: 0xF8AD, + 28768 - 11904: 0xF8B0, + 28769 - 11904: 0xF8AE, + 28770 - 11904: 0xF8F5, + 28771 - 11904: 0xC657, + 28772 - 11904: 0xC665, + 28773 - 11904: 0xF9A3, + 28774 - 11904: 0xF96C, + 28775 - 11904: 0x97D0, + 28776 - 11904: 0xF9A2, + 28777 - 11904: 0xF9D0, + 28778 - 11904: 0xF9D1, + 28779 - 11904: 0xA4F5, + 28780 - 11904: 0x8BD2, + 28782 - 11904: 0x87DE, + 28783 - 11904: 0x8DF8, + 28784 - 11904: 0xA6C7, + 28785 - 11904: 0xCA41, + 28788 - 11904: 0xCB5E, + 28789 - 11904: 0x90D9, + 28790 - 11904: 0xA85F, + 28791 - 11904: 0x8C47, + 28792 - 11904: 0xA862, + 28793 - 11904: 0xFAF0, + 28794 - 11904: 0xCB5F, + 28796 - 11904: 0xA860, + 28797 - 11904: 0xA861, + 28798 - 11904: 0xFDE1, + 28799 - 11904: 0x8DF9, + 28801 - 11904: 0xFDE3, + 28802 - 11904: 0xCD58, + 28803 - 11904: 0xCD5A, + 28804 - 11904: 0xCD55, + 28805 - 11904: 0xCD52, + 28806 - 11904: 0xCD54, + 28809 - 11904: 0x8DFA, + 28810 - 11904: 0xAAA4, + 28811 - 11904: 0xFB63, + 28814 - 11904: 0xAAA2, + 28815 - 11904: 0x90A6, + 28817 - 11904: 0xCD56, + 28818 - 11904: 0xAAA3, + 28819 - 11904: 0xCD53, + 28820 - 11904: 0xCD50, + 28821 - 11904: 0xAAA1, + 28822 - 11904: 0xCD57, + 28824 - 11904: 0xCD51, + 28825 - 11904: 0xAAA5, + 28826 - 11904: 0xCD59, + 28831 - 11904: 0xCFAF, + 28832 - 11904: 0x9970, + 28833 - 11904: 0xCFB3, + 28835 - 11904: 0x91EB, + 28836 - 11904: 0xACB7, + 28837 - 11904: 0x9770, + 28838 - 11904: 0x986F, + 28839 - 11904: 0xFDE2, + 28841 - 11904: 0xCFB6, + 28843 - 11904: 0xACAF, + 28844 - 11904: 0xACB2, + 28845 - 11904: 0xACB4, + 28846 - 11904: 0xACB6, + 28847 - 11904: 0xACB3, + 28848 - 11904: 0xCFB2, + 28849 - 11904: 0xCFB1, + 28851 - 11904: 0xACB1, + 28852 - 11904: 0xCFB4, + 28853 - 11904: 0xCFB5, + 28855 - 11904: 0xCFAE, + 28856 - 11904: 0xACB5, + 28857 - 11904: 0x98F2, + 28858 - 11904: 0xACB0, + 28859 - 11904: 0x9AFC, + 28860 - 11904: 0x896C, + 28861 - 11904: 0xFDFD, + 28862 - 11904: 0xCFB0, + 28864 - 11904: 0x995E, + 28868 - 11904: 0x95BD, + 28869 - 11904: 0xD277, + 28870 - 11904: 0xD278, + 28871 - 11904: 0xD279, + 28872 - 11904: 0xAF50, + 28874 - 11904: 0xAF4C, + 28875 - 11904: 0xD26E, + 28876 - 11904: 0xFDE4, + 28877 - 11904: 0xD276, + 28878 - 11904: 0xD27B, + 28879 - 11904: 0xAF51, + 28880 - 11904: 0x91E6, + 28881 - 11904: 0xD26C, + 28882 - 11904: 0xD272, + 28883 - 11904: 0xD26B, + 28884 - 11904: 0xD275, + 28885 - 11904: 0xFDE5, + 28886 - 11904: 0xFDE6, + 28887 - 11904: 0xD271, + 28888 - 11904: 0xAF4D, + 28889 - 11904: 0xAF4F, + 28890 - 11904: 0xD27A, + 28892 - 11904: 0xD26A, + 28893 - 11904: 0xD26D, + 28894 - 11904: 0xD273, + 28895 - 11904: 0xFDE7, + 28896 - 11904: 0xD274, + 28897 - 11904: 0xD27C, + 28898 - 11904: 0xD270, + 28900 - 11904: 0xAF4E, + 28911 - 11904: 0xB26D, + 28912 - 11904: 0xD64E, + 28913 - 11904: 0x9454, + 28915 - 11904: 0xD650, + 28916 - 11904: 0xD64C, + 28917 - 11904: 0x99B8, + 28918 - 11904: 0xD658, + 28919 - 11904: 0xD64A, + 28920 - 11904: 0xD657, + 28921 - 11904: 0xB269, + 28922 - 11904: 0xD648, + 28923 - 11904: 0xDA5B, + 28924 - 11904: 0xD652, + 28925 - 11904: 0xB26C, + 28926 - 11904: 0x97E9, + 28927 - 11904: 0xD653, + 28928 - 11904: 0xD656, + 28930 - 11904: 0xD65A, + 28932 - 11904: 0xD64F, + 28933 - 11904: 0x9346, + 28934 - 11904: 0xD654, + 28937 - 11904: 0xB26A, + 28938 - 11904: 0xB26B, + 28939 - 11904: 0xD659, + 28940 - 11904: 0xD64D, + 28941 - 11904: 0xD649, + 28942 - 11904: 0xD65B, + 28944 - 11904: 0xD651, + 28947 - 11904: 0xD655, + 28951 - 11904: 0xD64B, + 28953 - 11904: 0xB548, + 28954 - 11904: 0xB549, + 28955 - 11904: 0xDA65, + 28956 - 11904: 0xB54F, + 28957 - 11904: 0x9863, + 28958 - 11904: 0xDA59, + 28959 - 11904: 0xDA62, + 28960 - 11904: 0xDA58, + 28961 - 11904: 0xB54C, + 28962 - 11904: 0xDA60, + 28963 - 11904: 0xDA5E, + 28965 - 11904: 0xDA5F, + 28966 - 11904: 0xB54A, + 28968 - 11904: 0xDA63, + 28969 - 11904: 0x95BC, + 28971 - 11904: 0xFDED, + 28972 - 11904: 0xFDF7, + 28974 - 11904: 0xDA5C, + 28975 - 11904: 0xDA5A, + 28976 - 11904: 0xB54B, + 28977 - 11904: 0xDA5D, + 28978 - 11904: 0xDA61, + 28979 - 11904: 0x9870, + 28980 - 11904: 0x96F6, + 28981 - 11904: 0x8EA9, + 28982 - 11904: 0xB54D, + 28986 - 11904: 0xDA64, + 28987 - 11904: 0x9451, + 28990 - 11904: 0x8E43, + 28992 - 11904: 0x8B5A, + 28993 - 11904: 0xDE70, + 28994 - 11904: 0xDE77, + 28995 - 11904: 0xDE79, + 28996 - 11904: 0xDEA1, + 28997 - 11904: 0xFDEE, + 28998 - 11904: 0xB7DA, + 28999 - 11904: 0xDE6B, + 29001 - 11904: 0xB7D2, + 29002 - 11904: 0xFDF0, + 29003 - 11904: 0xDE7A, + 29004 - 11904: 0xB7D7, + 29005 - 11904: 0xDEA2, + 29006 - 11904: 0xB7CE, + 29007 - 11904: 0xFDF4, + 29008 - 11904: 0xDE7D, + 29009 - 11904: 0x9BF5, + 29010 - 11904: 0xDE6D, + 29011 - 11904: 0xDE7E, + 29012 - 11904: 0xDE6C, + 29014 - 11904: 0xB7DC, + 29015 - 11904: 0x8CEE, + 29016 - 11904: 0xDE78, + 29017 - 11904: 0xB7CF, + 29018 - 11904: 0xDEA3, + 29020 - 11904: 0xB7D4, + 29021 - 11904: 0xDE71, + 29022 - 11904: 0xB7D9, + 29023 - 11904: 0xDE7C, + 29024 - 11904: 0xDE6F, + 29025 - 11904: 0xDE76, + 29026 - 11904: 0xDE72, + 29027 - 11904: 0xDE6E, + 29028 - 11904: 0xB7D1, + 29029 - 11904: 0xB7D8, + 29030 - 11904: 0xB7D6, + 29031 - 11904: 0xB7D3, + 29032 - 11904: 0xB7DB, + 29033 - 11904: 0xB7D0, + 29034 - 11904: 0xDE75, + 29035 - 11904: 0x977E, + 29036 - 11904: 0xB7D5, + 29038 - 11904: 0xFDF1, + 29040 - 11904: 0xDE7B, + 29041 - 11904: 0x9BD5, + 29042 - 11904: 0xDE73, + 29043 - 11904: 0x9AC3, + 29045 - 11904: 0x97C8, + 29046 - 11904: 0xA0DB, + 29047 - 11904: 0x91D0, + 29048 - 11904: 0xDE74, + 29050 - 11904: 0x9FE4, + 29051 - 11904: 0xE2C1, + 29052 - 11904: 0x8FDD, + 29053 - 11904: 0xBAB4, + 29054 - 11904: 0x91E9, + 29056 - 11904: 0xE2BD, + 29057 - 11904: 0xE2C3, + 29058 - 11904: 0xE2BF, + 29060 - 11904: 0xBAB6, + 29061 - 11904: 0xE2BE, + 29062 - 11904: 0xE2C2, + 29063 - 11904: 0xE2BA, + 29064 - 11904: 0x98E0, + 29065 - 11904: 0xE2BC, + 29066 - 11904: 0xBAB5, + 29068 - 11904: 0x92CA, + 29070 - 11904: 0x9857, + 29071 - 11904: 0xE2C0, + 29072 - 11904: 0xE2BB, + 29073 - 11904: 0x8C51, + 29074 - 11904: 0xBAB7, + 29076 - 11904: 0xBAB2, + 29078 - 11904: 0xFDEB, + 29079 - 11904: 0xE2C4, + 29080 - 11904: 0x9B49, + 29081 - 11904: 0xBAB3, + 29082 - 11904: 0xE667, + 29083 - 11904: 0xE664, + 29084 - 11904: 0xE670, + 29085 - 11904: 0xE66A, + 29086 - 11904: 0xE66C, + 29087 - 11904: 0xBCF4, + 29088 - 11904: 0xE666, + 29089 - 11904: 0xE66E, + 29090 - 11904: 0x9D76, + 29091 - 11904: 0x9EAF, + 29092 - 11904: 0xE66D, + 29093 - 11904: 0xE66B, + 29095 - 11904: 0xE671, + 29096 - 11904: 0xBCF7, + 29097 - 11904: 0xE668, + 29098 - 11904: 0xE66F, + 29100 - 11904: 0xBCF5, + 29101 - 11904: 0x9CCC, + 29103 - 11904: 0xE663, + 29104 - 11904: 0xE665, + 29105 - 11904: 0xBCF6, + 29106 - 11904: 0xE662, + 29107 - 11904: 0xE672, + 29108 - 11904: 0xFDEA, + 29109 - 11904: 0xE669, + 29111 - 11904: 0x8DF1, + 29112 - 11904: 0xEA4A, + 29113 - 11904: 0xBF51, + 29114 - 11904: 0xFDFB, + 29116 - 11904: 0xEA55, + 29117 - 11904: 0xEA53, + 29118 - 11904: 0xBF4B, + 29119 - 11904: 0xEA49, + 29120 - 11904: 0xEA4C, + 29121 - 11904: 0xEA4D, + 29122 - 11904: 0xEA48, + 29123 - 11904: 0xBF55, + 29124 - 11904: 0xBF56, + 29125 - 11904: 0xEA47, + 29126 - 11904: 0xEA56, + 29127 - 11904: 0xEA51, + 29128 - 11904: 0xBF4F, + 29129 - 11904: 0xBF4C, + 29130 - 11904: 0xEA50, + 29131 - 11904: 0xEA4E, + 29134 - 11904: 0xBF52, + 29135 - 11904: 0xEA52, + 29136 - 11904: 0xBF4D, + 29137 - 11904: 0x8E53, + 29138 - 11904: 0xBF4E, + 29140 - 11904: 0xEA4F, + 29141 - 11904: 0xBF50, + 29142 - 11904: 0xEA4B, + 29144 - 11904: 0xEA54, + 29145 - 11904: 0xBF53, + 29146 - 11904: 0xEA57, + 29147 - 11904: 0xEA58, + 29148 - 11904: 0xBF54, + 29149 - 11904: 0xFACF, + 29151 - 11904: 0xC0E7, + 29152 - 11904: 0xC0EE, + 29153 - 11904: 0xED5C, + 29154 - 11904: 0xED62, + 29156 - 11904: 0xED60, + 29157 - 11904: 0xC0EA, + 29158 - 11904: 0xC0E9, + 29159 - 11904: 0xC0E6, + 29160 - 11904: 0xED5E, + 29163 - 11904: 0x96F9, + 29164 - 11904: 0xC0EC, + 29165 - 11904: 0xC0EB, + 29166 - 11904: 0xC0E8, + 29168 - 11904: 0xED61, + 29169 - 11904: 0xED5D, + 29170 - 11904: 0xED5F, + 29172 - 11904: 0xC0ED, + 29173 - 11904: 0x98BF, + 29174 - 11904: 0x9E49, + 29176 - 11904: 0xC277, + 29177 - 11904: 0xEFFB, + 29179 - 11904: 0xC274, + 29180 - 11904: 0xC275, + 29181 - 11904: 0xEFFD, + 29182 - 11904: 0xC276, + 29183 - 11904: 0xEFFA, + 29184 - 11904: 0x8CA7, + 29185 - 11904: 0xEFF9, + 29186 - 11904: 0xF26C, + 29187 - 11904: 0xEFFC, + 29189 - 11904: 0xF26D, + 29190 - 11904: 0xC37A, + 29191 - 11904: 0xF26B, + 29193 - 11904: 0x9BCA, + 29194 - 11904: 0xF26A, + 29196 - 11904: 0xF269, + 29197 - 11904: 0xC37B, + 29198 - 11904: 0xFDFE, + 29199 - 11904: 0x92DC, + 29200 - 11904: 0xC46C, + 29203 - 11904: 0xF46A, + 29204 - 11904: 0xF46B, + 29205 - 11904: 0xFE41, + 29206 - 11904: 0x91CC, + 29207 - 11904: 0x91E2, + 29209 - 11904: 0xF5DC, + 29210 - 11904: 0xF5DB, + 29211 - 11904: 0xC4EA, + 29213 - 11904: 0xF5DA, + 29214 - 11904: 0xF6EC, + 29215 - 11904: 0xF6ED, + 29218 - 11904: 0xF7E6, + 29219 - 11904: 0xF8B1, + 29220 - 11904: 0xFE44, + 29221 - 11904: 0x875F, + 29222 - 11904: 0xF8F6, + 29223 - 11904: 0xF9BC, + 29224 - 11904: 0xC679, + 29225 - 11904: 0xF9C6, + 29226 - 11904: 0xA4F6, + 29227 - 11904: 0x8BD3, + 29228 - 11904: 0xAAA6, + 29229 - 11904: 0xAAA7, + 29230 - 11904: 0xFE47, + 29232 - 11904: 0xACB8, + 29237 - 11904: 0xC0EF, + 29238 - 11904: 0xA4F7, + 29240 - 11904: 0xAAA8, + 29241 - 11904: 0xAF52, + 29242 - 11904: 0xB7DD, + 29243 - 11904: 0xA4F8, + 29245 - 11904: 0xB26E, + 29246 - 11904: 0xBAB8, + 29247 - 11904: 0xC962, + 29248 - 11904: 0xFE48, + 29249 - 11904: 0xCFB7, + 29250 - 11904: 0xD27D, + 29252 - 11904: 0xE2C5, + 29254 - 11904: 0xC0F0, + 29255 - 11904: 0xA4F9, + 29256 - 11904: 0xAAA9, + 29257 - 11904: 0xCFB8, + 29258 - 11904: 0xCFB9, + 29259 - 11904: 0xDA66, + 29260 - 11904: 0xB550, + 29263 - 11904: 0xDEA4, + 29264 - 11904: 0xA0E4, + 29266 - 11904: 0xB7DE, + 29267 - 11904: 0xE2C6, + 29269 - 11904: 0xFE4B, + 29270 - 11904: 0xBCF8, + 29271 - 11904: 0xFE4C, + 29272 - 11904: 0xC37C, + 29273 - 11904: 0xA4FA, + 29274 - 11904: 0xDA67, + 29275 - 11904: 0xA4FB, + 29276 - 11904: 0x8DBF, + 29277 - 11904: 0xA6C9, + 29278 - 11904: 0xCA42, + 29279 - 11904: 0xA6C8, + 29280 - 11904: 0xA865, + 29281 - 11904: 0xA864, + 29282 - 11904: 0xA863, + 29283 - 11904: 0xCB60, + 29286 - 11904: 0x9E78, + 29287 - 11904: 0xAAAA, + 29289 - 11904: 0xAAAB, + 29290 - 11904: 0xCD5B, + 29292 - 11904: 0xCFBA, + 29294 - 11904: 0xCFBD, + 29295 - 11904: 0xACBA, + 29296 - 11904: 0xCFBB, + 29298 - 11904: 0xACB9, + 29299 - 11904: 0xCFBC, + 29300 - 11904: 0xACBB, + 29302 - 11904: 0xD2A2, + 29303 - 11904: 0xD2A1, + 29304 - 11904: 0xD27E, + 29305 - 11904: 0xAF53, + 29307 - 11904: 0xD65D, + 29308 - 11904: 0xD65E, + 29309 - 11904: 0xB26F, + 29310 - 11904: 0xD65C, + 29311 - 11904: 0xD65F, + 29312 - 11904: 0xB552, + 29313 - 11904: 0xB270, + 29314 - 11904: 0xFE51, + 29316 - 11904: 0xB551, + 29317 - 11904: 0xDA6B, + 29318 - 11904: 0xDA6A, + 29319 - 11904: 0x9456, + 29320 - 11904: 0xDA68, + 29321 - 11904: 0xDA69, + 29323 - 11904: 0xDA6C, + 29324 - 11904: 0xDEA6, + 29325 - 11904: 0xDEA5, + 29326 - 11904: 0xDEA9, + 29327 - 11904: 0x9D61, + 29328 - 11904: 0xDEA8, + 29329 - 11904: 0xDEA7, + 29330 - 11904: 0xBAB9, + 29331 - 11904: 0xE2C9, + 29332 - 11904: 0x9457, + 29333 - 11904: 0xE2C8, + 29334 - 11904: 0xBABA, + 29335 - 11904: 0xE2C7, + 29336 - 11904: 0xE673, + 29338 - 11904: 0xE674, + 29339 - 11904: 0xBCF9, + 29341 - 11904: 0xEA59, + 29342 - 11904: 0xEA5A, + 29343 - 11904: 0x9966, + 29345 - 11904: 0xF272, + 29346 - 11904: 0xC37D, + 29347 - 11904: 0xF271, + 29348 - 11904: 0xF270, + 29349 - 11904: 0xF26E, + 29350 - 11904: 0xF26F, + 29351 - 11904: 0xC4EB, + 29352 - 11904: 0xF46C, + 29353 - 11904: 0xF6EE, + 29354 - 11904: 0xF8F7, + 29356 - 11904: 0xA4FC, + 29357 - 11904: 0x8BD5, + 29358 - 11904: 0xC9A5, + 29359 - 11904: 0xA5C7, + 29360 - 11904: 0xC9A6, + 29362 - 11904: 0xA069, + 29364 - 11904: 0xCA43, + 29365 - 11904: 0xCA44, + 29370 - 11904: 0xCB66, + 29373 - 11904: 0xCB62, + 29375 - 11904: 0xCB61, + 29376 - 11904: 0xAAAC, + 29377 - 11904: 0xCB65, + 29378 - 11904: 0xA867, + 29379 - 11904: 0xCB63, + 29380 - 11904: 0xA866, + 29381 - 11904: 0xCB67, + 29382 - 11904: 0xCB64, + 29385 - 11904: 0xCD5F, + 29386 - 11904: 0xCFBE, + 29387 - 11904: 0xCD5D, + 29388 - 11904: 0xCD64, + 29389 - 11904: 0x98B4, + 29390 - 11904: 0xAAAD, + 29392 - 11904: 0xAAB0, + 29393 - 11904: 0xCD65, + 29394 - 11904: 0xCD61, + 29396 - 11904: 0xCD62, + 29398 - 11904: 0xCD5C, + 29399 - 11904: 0xAAAF, + 29400 - 11904: 0xCD5E, + 29401 - 11904: 0xAAAE, + 29402 - 11904: 0xCD63, + 29404 - 11904: 0xCD60, + 29407 - 11904: 0xCFC2, + 29408 - 11904: 0xACBD, + 29409 - 11904: 0xACBE, + 29410 - 11904: 0xA049, + 29411 - 11904: 0xCFC5, + 29412 - 11904: 0xCFBF, + 29414 - 11904: 0xCFC4, + 29416 - 11904: 0xCFC0, + 29417 - 11904: 0xACBC, + 29418 - 11904: 0xCFC3, + 29419 - 11904: 0xCFC1, + 29427 - 11904: 0xD2A8, + 29428 - 11904: 0xD2A5, + 29430 - 11904: 0xD2A7, + 29431 - 11904: 0xAF58, + 29432 - 11904: 0xAF57, + 29433 - 11904: 0xAF55, + 29434 - 11904: 0xD2A4, + 29435 - 11904: 0xD2A9, + 29436 - 11904: 0xAF54, + 29437 - 11904: 0xAF56, + 29438 - 11904: 0xD2A6, + 29439 - 11904: 0xD667, + 29440 - 11904: 0xD2A3, + 29441 - 11904: 0xD2AA, + 29442 - 11904: 0xA04C, + 29444 - 11904: 0x9E65, + 29447 - 11904: 0xD662, + 29448 - 11904: 0xD666, + 29450 - 11904: 0xD665, + 29451 - 11904: 0xDA6E, + 29452 - 11904: 0xDA79, + 29455 - 11904: 0xD668, + 29456 - 11904: 0x98B5, + 29457 - 11904: 0xD663, + 29458 - 11904: 0xDA6D, + 29459 - 11904: 0xB274, + 29462 - 11904: 0xB273, + 29463 - 11904: 0xD661, + 29464 - 11904: 0xD664, + 29465 - 11904: 0xB275, + 29467 - 11904: 0xB272, + 29468 - 11904: 0xB271, + 29469 - 11904: 0xD660, + 29470 - 11904: 0xD669, + 29474 - 11904: 0xDA70, + 29475 - 11904: 0xDA77, + 29477 - 11904: 0xB554, + 29478 - 11904: 0xDA76, + 29479 - 11904: 0xDA73, + 29480 - 11904: 0xFE58, + 29481 - 11904: 0xB556, + 29482 - 11904: 0xFE52, + 29483 - 11904: 0xFE53, + 29484 - 11904: 0xA065, + 29485 - 11904: 0xDA75, + 29486 - 11904: 0xFE59, + 29488 - 11904: 0xDA6F, + 29489 - 11904: 0xDA71, + 29490 - 11904: 0xDA74, + 29491 - 11904: 0xDA72, + 29492 - 11904: 0xB555, + 29493 - 11904: 0xDA78, + 29494 - 11904: 0xB553, + 29495 - 11904: 0xB7DF, + 29496 - 11904: 0x98B7, + 29497 - 11904: 0x98B8, + 29498 - 11904: 0xDEAD, + 29499 - 11904: 0xDEAC, + 29500 - 11904: 0xDEAA, + 29502 - 11904: 0xB7E2, + 29503 - 11904: 0xB7E1, + 29504 - 11904: 0xDEAE, + 29505 - 11904: 0x98BA, + 29506 - 11904: 0xDEAB, + 29507 - 11904: 0xE2CA, + 29508 - 11904: 0xBABB, + 29509 - 11904: 0xB7E0, + 29512 - 11904: 0x98BB, + 29513 - 11904: 0xDEB0, + 29514 - 11904: 0xDEAF, + 29516 - 11904: 0xE2CD, + 29517 - 11904: 0xE2CB, + 29518 - 11904: 0xBCFA, + 29519 - 11904: 0x9FBC, + 29520 - 11904: 0xBABC, + 29521 - 11904: 0xE2CC, + 29522 - 11904: 0xE676, + 29527 - 11904: 0xBCFB, + 29528 - 11904: 0xE675, + 29529 - 11904: 0xE67E, + 29530 - 11904: 0xE67D, + 29531 - 11904: 0xE67B, + 29533 - 11904: 0xE67A, + 29534 - 11904: 0xE677, + 29535 - 11904: 0xE678, + 29536 - 11904: 0xE679, + 29537 - 11904: 0xE67C, + 29538 - 11904: 0xE6A1, + 29541 - 11904: 0xEA5F, + 29542 - 11904: 0xEA5C, + 29543 - 11904: 0xEA5D, + 29544 - 11904: 0xBF57, + 29545 - 11904: 0xEA5B, + 29546 - 11904: 0xEA61, + 29547 - 11904: 0xEA60, + 29548 - 11904: 0xEA5E, + 29550 - 11904: 0xED64, + 29551 - 11904: 0xED65, + 29552 - 11904: 0xC0F1, + 29553 - 11904: 0xA04A, + 29554 - 11904: 0xC0F2, + 29555 - 11904: 0xED63, + 29556 - 11904: 0x9EC7, + 29557 - 11904: 0xC279, + 29558 - 11904: 0xEFFE, + 29559 - 11904: 0xC278, + 29560 - 11904: 0xC37E, + 29562 - 11904: 0xC3A1, + 29563 - 11904: 0xC46D, + 29564 - 11904: 0xF46E, + 29565 - 11904: 0xF46D, + 29566 - 11904: 0xF5DD, + 29567 - 11904: 0xF6EF, + 29568 - 11904: 0xC57A, + 29569 - 11904: 0xF7E8, + 29570 - 11904: 0xF7E7, + 29571 - 11904: 0xF7E9, + 29572 - 11904: 0xA5C8, + 29573 - 11904: 0xCFC6, + 29574 - 11904: 0xAF59, + 29575 - 11904: 0xB276, + 29576 - 11904: 0xD66A, + 29577 - 11904: 0xA5C9, + 29578 - 11904: 0xC9A7, + 29579 - 11904: 0xA4FD, + 29580 - 11904: 0x8CA9, + 29582 - 11904: 0xCA45, + 29583 - 11904: 0x98AE, + 29586 - 11904: 0xCB6C, + 29587 - 11904: 0xCB6A, + 29588 - 11904: 0xCB6B, + 29589 - 11904: 0xCB68, + 29590 - 11904: 0xA868, + 29591 - 11904: 0xCB69, + 29592 - 11904: 0x92D6, + 29596 - 11904: 0xFAE1, + 29597 - 11904: 0xCD6D, + 29598 - 11904: 0x91D4, + 29599 - 11904: 0xAAB3, + 29600 - 11904: 0xCD6B, + 29601 - 11904: 0xCD67, + 29602 - 11904: 0xCD6A, + 29604 - 11904: 0xCD66, + 29605 - 11904: 0xAAB5, + 29606 - 11904: 0xCD69, + 29607 - 11904: 0xFADE, + 29608 - 11904: 0xAAB2, + 29609 - 11904: 0xAAB1, + 29610 - 11904: 0xFE5B, + 29611 - 11904: 0xAAB4, + 29612 - 11904: 0xCD6C, + 29613 - 11904: 0xCD68, + 29618 - 11904: 0xACC2, + 29619 - 11904: 0xACC5, + 29620 - 11904: 0xCFCE, + 29621 - 11904: 0xCFCD, + 29622 - 11904: 0xCFCC, + 29623 - 11904: 0xACBF, + 29624 - 11904: 0xCFD5, + 29625 - 11904: 0xCFCB, + 29626 - 11904: 0x8C53, + 29627 - 11904: 0xACC1, + 29628 - 11904: 0xD2AF, + 29630 - 11904: 0xCFD2, + 29631 - 11904: 0xCFD0, + 29632 - 11904: 0xACC4, + 29634 - 11904: 0xCFC8, + 29635 - 11904: 0xCFD3, + 29636 - 11904: 0x87BF, + 29637 - 11904: 0xCFCA, + 29638 - 11904: 0xCFD4, + 29639 - 11904: 0xCFD1, + 29640 - 11904: 0xCFC9, + 29641 - 11904: 0xFE5E, + 29642 - 11904: 0xACC0, + 29643 - 11904: 0xCFD6, + 29644 - 11904: 0xCFC7, + 29645 - 11904: 0xACC3, + 29646 - 11904: 0xFBD7, + 29647 - 11904: 0xFE5A, + 29648 - 11904: 0x94C5, + 29650 - 11904: 0xD2B4, + 29651 - 11904: 0xD2AB, + 29652 - 11904: 0xD2B6, + 29653 - 11904: 0xFACA, + 29654 - 11904: 0xD2AE, + 29655 - 11904: 0xD2B9, + 29656 - 11904: 0xD2BA, + 29657 - 11904: 0xD2AC, + 29658 - 11904: 0xD2B8, + 29659 - 11904: 0xD2B5, + 29660 - 11904: 0xD2B3, + 29661 - 11904: 0xD2B7, + 29662 - 11904: 0xAF5F, + 29664 - 11904: 0xAF5D, + 29665 - 11904: 0x98C1, + 29666 - 11904: 0x975C, + 29667 - 11904: 0xD2B1, + 29668 - 11904: 0xFE74, + 29669 - 11904: 0xD2AD, + 29670 - 11904: 0x9773, + 29671 - 11904: 0xD2B0, + 29672 - 11904: 0xD2BB, + 29673 - 11904: 0xD2B2, + 29674 - 11904: 0xAF5E, + 29675 - 11904: 0xCFCF, + 29677 - 11904: 0xAF5A, + 29678 - 11904: 0xAF5C, + 29679 - 11904: 0xFA46, + 29683 - 11904: 0x9764, + 29684 - 11904: 0xD678, + 29685 - 11904: 0xD66D, + 29686 - 11904: 0xD66B, + 29687 - 11904: 0xFE68, + 29688 - 11904: 0xD66C, + 29689 - 11904: 0x964E, + 29690 - 11904: 0xD673, + 29691 - 11904: 0x9765, + 29692 - 11904: 0xD674, + 29693 - 11904: 0xD670, + 29694 - 11904: 0xB27B, + 29695 - 11904: 0xD675, + 29696 - 11904: 0xD672, + 29697 - 11904: 0xD66F, + 29698 - 11904: 0x8C5A, + 29699 - 11904: 0xB279, + 29700 - 11904: 0xD66E, + 29701 - 11904: 0xB277, + 29702 - 11904: 0xB27A, + 29703 - 11904: 0xD671, + 29704 - 11904: 0xD679, + 29705 - 11904: 0xAF5B, + 29706 - 11904: 0xB278, + 29707 - 11904: 0xD677, + 29708 - 11904: 0xD676, + 29709 - 11904: 0xB27C, + 29713 - 11904: 0x89A1, + 29714 - 11904: 0x95FA, + 29716 - 11904: 0x92D4, + 29717 - 11904: 0xFE69, + 29718 - 11904: 0xDA7E, + 29719 - 11904: 0xFB45, + 29721 - 11904: 0x98C8, + 29722 - 11904: 0xDAA1, + 29723 - 11904: 0xB560, + 29724 - 11904: 0x90EF, + 29725 - 11904: 0xDAA7, + 29726 - 11904: 0x98C9, + 29727 - 11904: 0x98CA, + 29728 - 11904: 0xDAA9, + 29729 - 11904: 0xDAA2, + 29730 - 11904: 0xB55A, + 29731 - 11904: 0xDAA6, + 29732 - 11904: 0xDAA5, + 29733 - 11904: 0xB55B, + 29734 - 11904: 0xB561, + 29736 - 11904: 0xB562, + 29737 - 11904: 0xDAA8, + 29738 - 11904: 0xB558, + 29739 - 11904: 0xDA7D, + 29740 - 11904: 0xDA7B, + 29741 - 11904: 0xDAA3, + 29742 - 11904: 0xDA7A, + 29743 - 11904: 0xB55F, + 29744 - 11904: 0xDA7C, + 29745 - 11904: 0xDAA4, + 29746 - 11904: 0xDAAA, + 29747 - 11904: 0xB559, + 29748 - 11904: 0xB55E, + 29749 - 11904: 0xB55C, + 29750 - 11904: 0xB55D, + 29751 - 11904: 0x946D, + 29752 - 11904: 0x94B7, + 29753 - 11904: 0xFE6C, + 29754 - 11904: 0xB557, + 29756 - 11904: 0x946B, + 29759 - 11904: 0xB7E9, + 29760 - 11904: 0xDEB7, + 29761 - 11904: 0xB7E8, + 29762 - 11904: 0xDEBB, + 29763 - 11904: 0x92FC, + 29764 - 11904: 0xDEB1, + 29765 - 11904: 0x95EB, + 29766 - 11904: 0xDEBC, + 29767 - 11904: 0xFE73, + 29768 - 11904: 0x976E, + 29769 - 11904: 0xFE5F, + 29770 - 11904: 0xDEB2, + 29771 - 11904: 0xDEB3, + 29772 - 11904: 0x87B8, + 29773 - 11904: 0xDEBD, + 29774 - 11904: 0xDEBA, + 29775 - 11904: 0xDEB8, + 29776 - 11904: 0xDEB9, + 29777 - 11904: 0xDEB5, + 29778 - 11904: 0xDEB4, + 29779 - 11904: 0xFDBD, + 29780 - 11904: 0xDEBE, + 29781 - 11904: 0xB7E5, + 29782 - 11904: 0x92D5, + 29783 - 11904: 0xDEB6, + 29785 - 11904: 0xB7EA, + 29786 - 11904: 0xB7E4, + 29787 - 11904: 0xB7EB, + 29788 - 11904: 0xFE6F, + 29789 - 11904: 0xFEB9, + 29790 - 11904: 0xB7E7, + 29791 - 11904: 0xB7E6, + 29792 - 11904: 0xFE71, + 29793 - 11904: 0x8778, + 29794 - 11904: 0xE2CE, + 29795 - 11904: 0xBABE, + 29796 - 11904: 0xBABD, + 29797 - 11904: 0xFBBB, + 29799 - 11904: 0xE2D3, + 29800 - 11904: 0xA0D5, + 29801 - 11904: 0xBCFC, + 29802 - 11904: 0xBABF, + 29803 - 11904: 0x95FB, + 29804 - 11904: 0xFE77, + 29805 - 11904: 0xBAC1, + 29806 - 11904: 0xE2D4, + 29807 - 11904: 0xB7E3, + 29808 - 11904: 0xBAC0, + 29809 - 11904: 0xE2D0, + 29810 - 11904: 0xE2D2, + 29811 - 11904: 0xE2CF, + 29812 - 11904: 0xFE79, + 29813 - 11904: 0xE2D1, + 29814 - 11904: 0xFE75, + 29817 - 11904: 0xE6AB, + 29818 - 11904: 0x945D, + 29820 - 11904: 0xE6AA, + 29821 - 11904: 0xE6A7, + 29822 - 11904: 0xBD40, + 29823 - 11904: 0xEA62, + 29824 - 11904: 0xBD41, + 29825 - 11904: 0xE6A6, + 29826 - 11904: 0xFE7C, + 29827 - 11904: 0xBCFE, + 29829 - 11904: 0xE6A8, + 29830 - 11904: 0xE6A5, + 29831 - 11904: 0xE6A2, + 29832 - 11904: 0xE6A9, + 29833 - 11904: 0xE6A3, + 29834 - 11904: 0xE6A4, + 29835 - 11904: 0xBCFD, + 29836 - 11904: 0x9344, + 29837 - 11904: 0x8EA6, + 29840 - 11904: 0xED69, + 29842 - 11904: 0xEA66, + 29844 - 11904: 0xEA65, + 29845 - 11904: 0xEA67, + 29847 - 11904: 0xED66, + 29848 - 11904: 0xBF5A, + 29849 - 11904: 0x92D3, + 29850 - 11904: 0xEA63, + 29851 - 11904: 0x94B8, + 29852 - 11904: 0xBF58, + 29853 - 11904: 0x8779, + 29854 - 11904: 0xBF5C, + 29855 - 11904: 0xBF5B, + 29856 - 11904: 0xEA64, + 29857 - 11904: 0xEA68, + 29859 - 11904: 0xBF59, + 29860 - 11904: 0xFC71, + 29861 - 11904: 0xED6D, + 29862 - 11904: 0xC0F5, + 29863 - 11904: 0xC27A, + 29864 - 11904: 0xC0F6, + 29865 - 11904: 0xC0F3, + 29866 - 11904: 0xED6A, + 29867 - 11904: 0xED68, + 29869 - 11904: 0xED6B, + 29871 - 11904: 0xED6E, + 29872 - 11904: 0xC0F4, + 29873 - 11904: 0xED6C, + 29874 - 11904: 0xED67, + 29876 - 11904: 0x975E, + 29877 - 11904: 0xF042, + 29878 - 11904: 0xF045, + 29879 - 11904: 0xF275, + 29880 - 11904: 0xF040, + 29881 - 11904: 0x8CAD, + 29882 - 11904: 0xF46F, + 29883 - 11904: 0xF046, + 29885 - 11904: 0xC3A2, + 29886 - 11904: 0xF044, + 29887 - 11904: 0xC27B, + 29888 - 11904: 0xF041, + 29889 - 11904: 0xF043, + 29890 - 11904: 0xF047, + 29891 - 11904: 0xF276, + 29893 - 11904: 0xF274, + 29894 - 11904: 0x87C1, + 29896 - 11904: 0xFEA7, + 29898 - 11904: 0xC3A3, + 29899 - 11904: 0xF273, + 29900 - 11904: 0x946A, + 29903 - 11904: 0xC46E, + 29904 - 11904: 0x93E3, + 29907 - 11904: 0x98CF, + 29908 - 11904: 0xC4ED, + 29909 - 11904: 0xF6F1, + 29910 - 11904: 0xC4EC, + 29911 - 11904: 0xF6F3, + 29912 - 11904: 0xF6F0, + 29913 - 11904: 0xF6F2, + 29914 - 11904: 0xC5D0, + 29915 - 11904: 0xF8B2, + 29916 - 11904: 0xA5CA, + 29917 - 11904: 0xCD6E, + 29918 - 11904: 0xD2BC, + 29919 - 11904: 0xD2BD, + 29920 - 11904: 0xB27D, + 29921 - 11904: 0xDEBF, + 29922 - 11904: 0xBF5D, + 29923 - 11904: 0xC3A4, + 29924 - 11904: 0xC57B, + 29925 - 11904: 0xF8B3, + 29926 - 11904: 0xA5CB, + 29927 - 11904: 0xA0D9, + 29928 - 11904: 0xCD6F, + 29929 - 11904: 0xFEAA, + 29932 - 11904: 0xCFD7, + 29934 - 11904: 0xCFD8, + 29936 - 11904: 0xA0BF, + 29937 - 11904: 0xA04D, + 29938 - 11904: 0xA0B8, + 29940 - 11904: 0xD2BE, + 29941 - 11904: 0xD2BF, + 29942 - 11904: 0xB27E, + 29943 - 11904: 0xB2A1, + 29944 - 11904: 0xA0CE, + 29947 - 11904: 0xDAAB, + 29949 - 11904: 0xDEC2, + 29950 - 11904: 0xDEC1, + 29951 - 11904: 0xDEC0, + 29952 - 11904: 0xE2D5, + 29954 - 11904: 0xE2D6, + 29955 - 11904: 0xE2D7, + 29956 - 11904: 0xBAC2, + 29957 - 11904: 0xA0B7, + 29959 - 11904: 0xE6AD, + 29960 - 11904: 0xE6AC, + 29963 - 11904: 0xEA69, + 29964 - 11904: 0xBF5E, + 29965 - 11904: 0xBF5F, + 29966 - 11904: 0xFEA9, + 29967 - 11904: 0xED72, + 29968 - 11904: 0xED6F, + 29969 - 11904: 0xED70, + 29970 - 11904: 0xED71, + 29971 - 11904: 0xF049, + 29972 - 11904: 0xF048, + 29973 - 11904: 0xC27C, + 29974 - 11904: 0xF277, + 29975 - 11904: 0xF5DE, + 29976 - 11904: 0xA5CC, + 29977 - 11904: 0x89C3, + 29978 - 11904: 0xACC6, + 29980 - 11904: 0xB2A2, + 29981 - 11904: 0xDEC3, + 29982 - 11904: 0xFEAB, + 29983 - 11904: 0xA5CD, + 29985 - 11904: 0xD2C0, + 29986 - 11904: 0xB2A3, + 29989 - 11904: 0xB563, + 29990 - 11904: 0xB564, + 29992 - 11904: 0xA5CE, + 29993 - 11904: 0xA5CF, + 29994 - 11904: 0xCA46, + 29995 - 11904: 0xA86A, + 29996 - 11904: 0xA869, + 29997 - 11904: 0xACC7, + 29998 - 11904: 0xCFD9, + 29999 - 11904: 0xDAAC, + 30000 - 11904: 0xA5D0, + 30001 - 11904: 0xA5D1, + 30002 - 11904: 0xA5D2, + 30003 - 11904: 0xA5D3, + 30004 - 11904: 0x9DF4, + 30005 - 11904: 0x896D, + 30007 - 11904: 0xA86B, + 30008 - 11904: 0xA86C, + 30009 - 11904: 0xCB6E, + 30010 - 11904: 0xCB6D, + 30011 - 11904: 0x9C7B, + 30013 - 11904: 0xAAB6, + 30014 - 11904: 0xCD72, + 30015 - 11904: 0xCD70, + 30016 - 11904: 0xCD71, + 30018 - 11904: 0x98D2, + 30022 - 11904: 0x9FA9, + 30023 - 11904: 0xCFDA, + 30024 - 11904: 0xCFDB, + 30026 - 11904: 0xFEB2, + 30027 - 11904: 0xACCB, + 30028 - 11904: 0xACC9, + 30029 - 11904: 0xFEB1, + 30030 - 11904: 0xACCA, + 30031 - 11904: 0xACC8, + 30033 - 11904: 0x97D9, + 30035 - 11904: 0xA0C4, + 30036 - 11904: 0xAF60, + 30037 - 11904: 0x9476, + 30041 - 11904: 0xAF64, + 30042 - 11904: 0xAF63, + 30043 - 11904: 0xD2C1, + 30044 - 11904: 0xAF62, + 30045 - 11904: 0xAF61, + 30047 - 11904: 0xD2C2, + 30048 - 11904: 0x9978, + 30050 - 11904: 0xB2A6, + 30051 - 11904: 0xD67B, + 30052 - 11904: 0xD67A, + 30053 - 11904: 0xB2A4, + 30054 - 11904: 0xB2A5, + 30055 - 11904: 0xFEB3, + 30058 - 11904: 0xB566, + 30059 - 11904: 0xB565, + 30060 - 11904: 0xDAAE, + 30061 - 11904: 0x98D3, + 30062 - 11904: 0xFEB4, + 30063 - 11904: 0xDAAD, + 30064 - 11904: 0xB2A7, + 30066 - 11904: 0x98D4, + 30070 - 11904: 0xB7ED, + 30071 - 11904: 0xDEC5, + 30072 - 11904: 0xB7EE, + 30073 - 11904: 0xDEC4, + 30074 - 11904: 0x9FB9, + 30077 - 11904: 0xE2D8, + 30078 - 11904: 0xE6AE, + 30079 - 11904: 0xBD42, + 30080 - 11904: 0xEA6A, + 30083 - 11904: 0x9471, + 30084 - 11904: 0xED73, + 30086 - 11904: 0xC3A6, + 30087 - 11904: 0xC3A5, + 30090 - 11904: 0xC57C, + 30091 - 11904: 0xA5D4, + 30092 - 11904: 0xCD73, + 30093 - 11904: 0x98D5, + 30094 - 11904: 0xFEB8, + 30095 - 11904: 0xB2A8, + 30096 - 11904: 0xE2D9, + 30097 - 11904: 0xBAC3, + 30098 - 11904: 0xC6D4, + 30100 - 11904: 0xCB6F, + 30101 - 11904: 0xCB70, + 30104 - 11904: 0xCD74, + 30105 - 11904: 0xAAB8, + 30106 - 11904: 0xAAB9, + 30109 - 11904: 0xAAB7, + 30110 - 11904: 0xFEBA, + 30114 - 11904: 0xACCF, + 30115 - 11904: 0xACD0, + 30116 - 11904: 0xACCD, + 30117 - 11904: 0xACCE, + 30119 - 11904: 0xCFDC, + 30122 - 11904: 0xCFDD, + 30123 - 11904: 0xACCC, + 30128 - 11904: 0xD2C3, + 30129 - 11904: 0x9E5C, + 30130 - 11904: 0xAF68, + 30131 - 11904: 0xAF69, + 30132 - 11904: 0xFEBB, + 30133 - 11904: 0xB2AB, + 30134 - 11904: 0xD2C9, + 30136 - 11904: 0xAF6E, + 30137 - 11904: 0xAF6C, + 30138 - 11904: 0xD2CA, + 30139 - 11904: 0xD2C5, + 30140 - 11904: 0xAF6B, + 30141 - 11904: 0xAF6A, + 30142 - 11904: 0xAF65, + 30143 - 11904: 0xD2C8, + 30144 - 11904: 0xD2C7, + 30145 - 11904: 0xD2C4, + 30146 - 11904: 0xAF6D, + 30147 - 11904: 0xA044, + 30148 - 11904: 0xD2C6, + 30149 - 11904: 0xAF66, + 30151 - 11904: 0xAF67, + 30152 - 11904: 0x98D7, + 30154 - 11904: 0xB2AC, + 30155 - 11904: 0xD6A1, + 30156 - 11904: 0xD6A2, + 30157 - 11904: 0xB2AD, + 30158 - 11904: 0xD67C, + 30159 - 11904: 0xD67E, + 30160 - 11904: 0xD6A4, + 30161 - 11904: 0xD6A3, + 30162 - 11904: 0xD67D, + 30164 - 11904: 0xB2A9, + 30165 - 11904: 0xB2AA, + 30167 - 11904: 0xDAB6, + 30168 - 11904: 0xB56B, + 30169 - 11904: 0xB56A, + 30170 - 11904: 0xDAB0, + 30171 - 11904: 0xB568, + 30172 - 11904: 0x98D8, + 30173 - 11904: 0xDAB3, + 30174 - 11904: 0xB56C, + 30175 - 11904: 0xDAB4, + 30176 - 11904: 0xB56D, + 30177 - 11904: 0xDAB1, + 30178 - 11904: 0xB567, + 30179 - 11904: 0xB569, + 30180 - 11904: 0xDAB5, + 30182 - 11904: 0xDAB2, + 30183 - 11904: 0xDAAF, + 30189 - 11904: 0xDED2, + 30191 - 11904: 0xDEC7, + 30192 - 11904: 0xB7F0, + 30193 - 11904: 0xB7F3, + 30194 - 11904: 0xB7F2, + 30195 - 11904: 0xB7F7, + 30196 - 11904: 0xB7F6, + 30197 - 11904: 0xDED3, + 30198 - 11904: 0xDED1, + 30199 - 11904: 0xDECA, + 30200 - 11904: 0xDECE, + 30201 - 11904: 0xDECD, + 30202 - 11904: 0xB7F4, + 30203 - 11904: 0xDED0, + 30204 - 11904: 0xDECC, + 30205 - 11904: 0xDED4, + 30206 - 11904: 0xDECB, + 30207 - 11904: 0xB7F5, + 30208 - 11904: 0xB7EF, + 30209 - 11904: 0xB7F1, + 30210 - 11904: 0xFEBC, + 30211 - 11904: 0xDEC9, + 30215 - 11904: 0x9FFE, + 30216 - 11904: 0xE2DB, + 30217 - 11904: 0xBAC7, + 30218 - 11904: 0xE2DF, + 30219 - 11904: 0xBAC6, + 30220 - 11904: 0xE2DC, + 30221 - 11904: 0xBAC5, + 30223 - 11904: 0xDEC8, + 30224 - 11904: 0xDECF, + 30225 - 11904: 0xE2DE, + 30227 - 11904: 0xBAC8, + 30228 - 11904: 0xE2E0, + 30229 - 11904: 0xE2DD, + 30230 - 11904: 0xE2DA, + 30233 - 11904: 0xE6B1, + 30234 - 11904: 0xE6B5, + 30235 - 11904: 0xE6B7, + 30236 - 11904: 0xE6B3, + 30237 - 11904: 0xE6B2, + 30238 - 11904: 0xE6B0, + 30239 - 11904: 0xBD45, + 30240 - 11904: 0xBD43, + 30241 - 11904: 0xBD48, + 30242 - 11904: 0xBD49, + 30243 - 11904: 0xE6B4, + 30244 - 11904: 0xBD46, + 30245 - 11904: 0xE6AF, + 30246 - 11904: 0xBD47, + 30247 - 11904: 0xBAC4, + 30248 - 11904: 0xE6B6, + 30249 - 11904: 0xBD44, + 30252 - 11904: 0xFEBD, + 30253 - 11904: 0xEA6C, + 30255 - 11904: 0xEA6B, + 30256 - 11904: 0xEA73, + 30257 - 11904: 0xEA6D, + 30258 - 11904: 0xEA72, + 30259 - 11904: 0xEA6F, + 30260 - 11904: 0xBF60, + 30261 - 11904: 0xEA71, + 30264 - 11904: 0xBF61, + 30266 - 11904: 0xBF62, + 30267 - 11904: 0x9DDD, + 30268 - 11904: 0xEA70, + 30269 - 11904: 0xEA6E, + 30272 - 11904: 0x9EE1, + 30274 - 11904: 0xC0F8, + 30275 - 11904: 0xED74, + 30278 - 11904: 0xC0F7, + 30279 - 11904: 0xED77, + 30280 - 11904: 0xED75, + 30281 - 11904: 0xED76, + 30284 - 11904: 0xC0F9, + 30285 - 11904: 0x98DA, + 30286 - 11904: 0x9DDF, + 30287 - 11904: 0xFEBF, + 30288 - 11904: 0xF04D, + 30289 - 11904: 0xFEBE, + 30290 - 11904: 0xC2A1, + 30291 - 11904: 0xF04E, + 30292 - 11904: 0x9EEB, + 30294 - 11904: 0xC27D, + 30295 - 11904: 0xF04F, + 30296 - 11904: 0xC27E, + 30297 - 11904: 0xF04C, + 30298 - 11904: 0xF050, + 30300 - 11904: 0xF04A, + 30303 - 11904: 0xC3A7, + 30304 - 11904: 0xF278, + 30305 - 11904: 0xC3A8, + 30306 - 11904: 0xC46F, + 30308 - 11904: 0xF04B, + 30309 - 11904: 0xC470, + 30310 - 11904: 0x9E59, + 30311 - 11904: 0xA05C, + 30313 - 11904: 0xC4EE, + 30314 - 11904: 0xF5DF, + 30316 - 11904: 0xC57E, + 30317 - 11904: 0xF6F4, + 30318 - 11904: 0xC57D, + 30319 - 11904: 0xFEC0, + 30320 - 11904: 0xF7EA, + 30321 - 11904: 0xC5F5, + 30322 - 11904: 0xC5F6, + 30323 - 11904: 0x9477, + 30324 - 11904: 0x98DC, + 30325 - 11904: 0xF9CC, + 30326 - 11904: 0xFEC1, + 30328 - 11904: 0xACD1, + 30329 - 11904: 0xCFDE, + 30330 - 11904: 0x98DE, + 30331 - 11904: 0xB56E, + 30332 - 11904: 0xB56F, + 30333 - 11904: 0xA5D5, + 30334 - 11904: 0xA6CA, + 30335 - 11904: 0xCA47, + 30337 - 11904: 0xCB71, + 30338 - 11904: 0xA86D, + 30340 - 11904: 0xAABA, + 30342 - 11904: 0xACD2, + 30343 - 11904: 0xACD3, + 30344 - 11904: 0xACD4, + 30345 - 11904: 0xD6A6, + 30346 - 11904: 0xD2CB, + 30347 - 11904: 0xAF6F, + 30350 - 11904: 0xB2AE, + 30351 - 11904: 0xD6A5, + 30352 - 11904: 0xFEC3, + 30354 - 11904: 0xDAB8, + 30355 - 11904: 0xB571, + 30357 - 11904: 0xDAB7, + 30358 - 11904: 0xB570, + 30361 - 11904: 0xDED5, + 30362 - 11904: 0xBD4A, + 30363 - 11904: 0xE6BB, + 30364 - 11904: 0xE6B8, + 30365 - 11904: 0xE6B9, + 30366 - 11904: 0xE6BA, + 30369 - 11904: 0xFEC8, + 30372 - 11904: 0xED78, + 30373 - 11904: 0xFEC9, + 30374 - 11904: 0xF051, + 30378 - 11904: 0xF471, + 30379 - 11904: 0xF470, + 30381 - 11904: 0xF6F5, + 30382 - 11904: 0xA5D6, + 30383 - 11904: 0xCD75, + 30384 - 11904: 0xAF70, + 30388 - 11904: 0xB572, + 30389 - 11904: 0xDED6, + 30391 - 11904: 0xFECA, + 30392 - 11904: 0xE2E1, + 30394 - 11904: 0xBD4B, + 30395 - 11904: 0xEA74, + 30397 - 11904: 0xF052, + 30398 - 11904: 0xF472, + 30399 - 11904: 0xA5D7, + 30402 - 11904: 0xAABB, + 30403 - 11904: 0xACD7, + 30404 - 11904: 0xCFDF, + 30405 - 11904: 0xACD8, + 30406 - 11904: 0xACD6, + 30408 - 11904: 0xACD5, + 30409 - 11904: 0xD2CC, + 30410 - 11904: 0xAF71, + 30412 - 11904: 0xFECB, + 30413 - 11904: 0xAF72, + 30414 - 11904: 0xAF73, + 30418 - 11904: 0xB2B0, + 30419 - 11904: 0xD6A7, + 30420 - 11904: 0xB2AF, + 30422 - 11904: 0x9FC2, + 30425 - 11904: 0x8C6B, + 30426 - 11904: 0xDAB9, + 30427 - 11904: 0xB2B1, + 30428 - 11904: 0xB573, + 30429 - 11904: 0xDED7, + 30430 - 11904: 0xB7F8, + 30431 - 11904: 0xB7F9, + 30433 - 11904: 0xBAC9, + 30435 - 11904: 0xBACA, + 30436 - 11904: 0xBD4C, + 30437 - 11904: 0xBF64, + 30438 - 11904: 0xEA75, + 30439 - 11904: 0xBF63, + 30441 - 11904: 0xED79, + 30442 - 11904: 0xC0FA, + 30444 - 11904: 0xF053, + 30445 - 11904: 0xF473, + 30446 - 11904: 0xA5D8, + 30447 - 11904: 0xA86E, + 30448 - 11904: 0xCD78, + 30449 - 11904: 0xCD77, + 30450 - 11904: 0xAABC, + 30451 - 11904: 0xCD76, + 30452 - 11904: 0xAABD, + 30453 - 11904: 0xCD79, + 30455 - 11904: 0xCFE5, + 30456 - 11904: 0xACDB, + 30457 - 11904: 0xACDA, + 30458 - 11904: 0xCFE7, + 30459 - 11904: 0xCFE6, + 30460 - 11904: 0xACDF, + 30462 - 11904: 0xACDE, + 30465 - 11904: 0xACD9, + 30467 - 11904: 0xCFE1, + 30468 - 11904: 0xCFE2, + 30469 - 11904: 0xCFE3, + 30471 - 11904: 0xACE0, + 30472 - 11904: 0xCFE0, + 30473 - 11904: 0xACDC, + 30474 - 11904: 0xCFE4, + 30475 - 11904: 0xACDD, + 30476 - 11904: 0x98C4, + 30478 - 11904: 0x94B0, + 30479 - 11904: 0x94B1, + 30480 - 11904: 0xD2CF, + 30481 - 11904: 0xD2D3, + 30482 - 11904: 0xD2D1, + 30483 - 11904: 0xD2D0, + 30485 - 11904: 0xD2D4, + 30489 - 11904: 0xD2D5, + 30490 - 11904: 0xD2D6, + 30491 - 11904: 0xD2CE, + 30493 - 11904: 0xD2CD, + 30494 - 11904: 0xFED1, + 30495 - 11904: 0xAF75, + 30496 - 11904: 0xAF76, + 30498 - 11904: 0xD2D7, + 30499 - 11904: 0xD2D2, + 30500 - 11904: 0xA0C1, + 30501 - 11904: 0xD6B0, + 30502 - 11904: 0xFED2, + 30503 - 11904: 0xD2D8, + 30504 - 11904: 0xAF77, + 30505 - 11904: 0xAF74, + 30507 - 11904: 0xA0CD, + 30509 - 11904: 0xD6AA, + 30511 - 11904: 0xD6A9, + 30513 - 11904: 0xD6AB, + 30514 - 11904: 0xD6AC, + 30515 - 11904: 0xD6AE, + 30516 - 11904: 0xD6AD, + 30517 - 11904: 0xD6B2, + 30518 - 11904: 0xB2B5, + 30519 - 11904: 0xB2B2, + 30520 - 11904: 0xB2B6, + 30521 - 11904: 0xD6A8, + 30522 - 11904: 0xB2B7, + 30523 - 11904: 0xD6B1, + 30524 - 11904: 0xB2B4, + 30525 - 11904: 0xD6AF, + 30526 - 11904: 0xB2B3, + 30528 - 11904: 0xFED3, + 30531 - 11904: 0x98E5, + 30532 - 11904: 0xDABC, + 30533 - 11904: 0xDABE, + 30534 - 11904: 0xDABA, + 30535 - 11904: 0xDABB, + 30538 - 11904: 0xDABF, + 30539 - 11904: 0xDAC1, + 30540 - 11904: 0xDAC2, + 30541 - 11904: 0xDABD, + 30542 - 11904: 0xDAC0, + 30543 - 11904: 0xB574, + 30546 - 11904: 0xDEDB, + 30548 - 11904: 0xDEE0, + 30549 - 11904: 0xDED8, + 30550 - 11904: 0xDEDC, + 30552 - 11904: 0xFED6, + 30553 - 11904: 0xDEE1, + 30554 - 11904: 0xDEDD, + 30555 - 11904: 0xB7FA, + 30556 - 11904: 0xB843, + 30558 - 11904: 0xB7FD, + 30559 - 11904: 0xDED9, + 30560 - 11904: 0xDEDA, + 30561 - 11904: 0xBACE, + 30562 - 11904: 0xB846, + 30563 - 11904: 0xB7FE, + 30565 - 11904: 0xB844, + 30566 - 11904: 0xB7FC, + 30567 - 11904: 0xDEDF, + 30568 - 11904: 0xB845, + 30569 - 11904: 0xDEDE, + 30570 - 11904: 0xB841, + 30571 - 11904: 0xB7FB, + 30572 - 11904: 0xB842, + 30573 - 11904: 0xDEE2, + 30574 - 11904: 0xE2E6, + 30575 - 11904: 0xE2E8, + 30578 - 11904: 0x91E4, + 30583 - 11904: 0x8FC7, + 30584 - 11904: 0x94AE, + 30585 - 11904: 0xB840, + 30586 - 11904: 0x8A4F, + 30587 - 11904: 0x94B2, + 30588 - 11904: 0xE2E3, + 30589 - 11904: 0xBACC, + 30590 - 11904: 0xE2E9, + 30591 - 11904: 0xBACD, + 30592 - 11904: 0xE2E7, + 30593 - 11904: 0xE2E2, + 30594 - 11904: 0xE2E5, + 30595 - 11904: 0xE2EA, + 30596 - 11904: 0xBACB, + 30597 - 11904: 0xE2E4, + 30599 - 11904: 0xBD4E, + 30600 - 11904: 0xE6BF, + 30601 - 11904: 0xE6BE, + 30603 - 11904: 0xBD51, + 30604 - 11904: 0xBD4F, + 30605 - 11904: 0xE6BC, + 30606 - 11904: 0xBD4D, + 30607 - 11904: 0xE6BD, + 30609 - 11904: 0xBD50, + 30611 - 11904: 0x8FD4, + 30613 - 11904: 0xEA7D, + 30615 - 11904: 0xEAA1, + 30616 - 11904: 0x98EA, + 30617 - 11904: 0xEA7E, + 30618 - 11904: 0xEA76, + 30619 - 11904: 0xEA7A, + 30620 - 11904: 0xEA79, + 30621 - 11904: 0xEA77, + 30622 - 11904: 0xBF66, + 30623 - 11904: 0xBF67, + 30624 - 11904: 0xBF65, + 30625 - 11904: 0xEA78, + 30626 - 11904: 0xEA7B, + 30627 - 11904: 0xEA7C, + 30629 - 11904: 0xBF68, + 30631 - 11904: 0xC140, + 30632 - 11904: 0xEDA3, + 30634 - 11904: 0xC0FC, + 30635 - 11904: 0xED7B, + 30636 - 11904: 0xC0FE, + 30637 - 11904: 0xC141, + 30639 - 11904: 0xFED8, + 30640 - 11904: 0xC0FD, + 30641 - 11904: 0xEDA2, + 30642 - 11904: 0xED7C, + 30643 - 11904: 0xC0FB, + 30644 - 11904: 0xEDA1, + 30645 - 11904: 0xED7A, + 30646 - 11904: 0xED7E, + 30647 - 11904: 0xED7D, + 30649 - 11904: 0x9DE0, + 30650 - 11904: 0xF055, + 30651 - 11904: 0xC2A4, + 30652 - 11904: 0xC2A5, + 30653 - 11904: 0xC2A2, + 30654 - 11904: 0x98EE, + 30655 - 11904: 0xC2A3, + 30658 - 11904: 0xF054, + 30659 - 11904: 0x95C4, + 30660 - 11904: 0xF27B, + 30661 - 11904: 0xFCE8, + 30663 - 11904: 0xC3A9, + 30665 - 11904: 0xF279, + 30666 - 11904: 0xF27A, + 30667 - 11904: 0x98EF, + 30668 - 11904: 0xF474, + 30669 - 11904: 0xF477, + 30670 - 11904: 0xF475, + 30671 - 11904: 0xF476, + 30672 - 11904: 0xF5E0, + 30675 - 11904: 0xC4EF, + 30676 - 11904: 0xF7EB, + 30677 - 11904: 0xF8B4, + 30679 - 11904: 0xC5F7, + 30680 - 11904: 0xF8F8, + 30681 - 11904: 0xF8F9, + 30682 - 11904: 0xC666, + 30683 - 11904: 0xA5D9, + 30684 - 11904: 0xACE1, + 30685 - 11904: 0x8C6E, + 30686 - 11904: 0xDAC3, + 30688 - 11904: 0xDEE3, + 30690 - 11904: 0xA5DA, + 30691 - 11904: 0xA86F, + 30693 - 11904: 0xAABE, + 30694 - 11904: 0xFAD8, + 30695 - 11904: 0xCFE8, + 30696 - 11904: 0xCFE9, + 30697 - 11904: 0xAF78, + 30700 - 11904: 0xDAC4, + 30701 - 11904: 0xB575, + 30702 - 11904: 0xB847, + 30703 - 11904: 0xC142, + 30704 - 11904: 0xEDA4, + 30705 - 11904: 0xF27C, + 30706 - 11904: 0xF478, + 30707 - 11904: 0xA5DB, + 30708 - 11904: 0xFEDC, + 30711 - 11904: 0xCDA1, + 30712 - 11904: 0xCD7A, + 30713 - 11904: 0xCD7C, + 30714 - 11904: 0xCD7E, + 30715 - 11904: 0xCD7D, + 30716 - 11904: 0xCD7B, + 30717 - 11904: 0xAABF, + 30718 - 11904: 0xA0AE, + 30722 - 11904: 0xACE2, + 30723 - 11904: 0xCFF2, + 30725 - 11904: 0xCFED, + 30726 - 11904: 0xCFEA, + 30728 - 11904: 0x9D4C, + 30729 - 11904: 0xFEDD, + 30732 - 11904: 0xACE4, + 30733 - 11904: 0xACE5, + 30734 - 11904: 0xCFF0, + 30735 - 11904: 0xCFEF, + 30736 - 11904: 0xCFEE, + 30737 - 11904: 0xCFEB, + 30738 - 11904: 0xCFEC, + 30739 - 11904: 0xCFF3, + 30740 - 11904: 0xACE3, + 30744 - 11904: 0x98F1, + 30748 - 11904: 0x98F3, + 30749 - 11904: 0xAF7C, + 30750 - 11904: 0x94C1, + 30751 - 11904: 0xAFA4, + 30752 - 11904: 0xAFA3, + 30753 - 11904: 0xD2E1, + 30754 - 11904: 0xD2DB, + 30755 - 11904: 0xD2D9, + 30757 - 11904: 0xAFA1, + 30758 - 11904: 0xD6B9, + 30759 - 11904: 0xAF7A, + 30760 - 11904: 0xD2DE, + 30761 - 11904: 0xD2E2, + 30762 - 11904: 0xD2E4, + 30763 - 11904: 0xD2E0, + 30764 - 11904: 0xD2DA, + 30765 - 11904: 0xAFA2, + 30766 - 11904: 0xD2DF, + 30767 - 11904: 0xD2DD, + 30768 - 11904: 0xAF79, + 30769 - 11904: 0xD2E5, + 30770 - 11904: 0xAFA5, + 30771 - 11904: 0xD2E3, + 30772 - 11904: 0xAF7D, + 30773 - 11904: 0xD2DC, + 30775 - 11904: 0xAF7E, + 30776 - 11904: 0xAF7B, + 30777 - 11904: 0x98F5, + 30780 - 11904: 0xFA4F, + 30781 - 11904: 0x96E2, + 30786 - 11904: 0x9450, + 30787 - 11904: 0xB2B9, + 30788 - 11904: 0x96A2, + 30789 - 11904: 0xD6BA, + 30791 - 11904: 0x98F6, + 30792 - 11904: 0xD6B3, + 30793 - 11904: 0xD6B5, + 30794 - 11904: 0xD6B7, + 30795 - 11904: 0x96E5, + 30796 - 11904: 0xD6B8, + 30797 - 11904: 0xD6B6, + 30798 - 11904: 0xB2BA, + 30800 - 11904: 0xD6BB, + 30801 - 11904: 0x98F7, + 30802 - 11904: 0xD6B4, + 30803 - 11904: 0xA046, + 30804 - 11904: 0x96E3, + 30812 - 11904: 0xDAC8, + 30813 - 11904: 0xB576, + 30814 - 11904: 0xDAD0, + 30816 - 11904: 0xDAC5, + 30818 - 11904: 0xDAD1, + 30820 - 11904: 0xDAC6, + 30821 - 11904: 0xDAC7, + 30822 - 11904: 0x98F8, + 30824 - 11904: 0xDACF, + 30825 - 11904: 0xDACE, + 30826 - 11904: 0xDACB, + 30827 - 11904: 0xB2B8, + 30828 - 11904: 0xB577, + 30829 - 11904: 0xDAC9, + 30830 - 11904: 0xDACC, + 30831 - 11904: 0xB578, + 30832 - 11904: 0xDACD, + 30833 - 11904: 0xDACA, + 30841 - 11904: 0xDEEE, + 30842 - 11904: 0x9EE4, + 30843 - 11904: 0xDEF2, + 30844 - 11904: 0xB84E, + 30846 - 11904: 0xE2F0, + 30847 - 11904: 0xB851, + 30848 - 11904: 0xDEF0, + 30849 - 11904: 0xF9D6, + 30851 - 11904: 0xDEED, + 30852 - 11904: 0xDEE8, + 30853 - 11904: 0xDEEA, + 30854 - 11904: 0xDEEB, + 30855 - 11904: 0xDEE4, + 30856 - 11904: 0x94C3, + 30857 - 11904: 0xB84D, + 30860 - 11904: 0xB84C, + 30861 - 11904: 0x94C2, + 30862 - 11904: 0xB848, + 30863 - 11904: 0xDEE7, + 30865 - 11904: 0xB84F, + 30867 - 11904: 0xB850, + 30868 - 11904: 0xDEE6, + 30869 - 11904: 0xDEE9, + 30870 - 11904: 0xDEF1, + 30871 - 11904: 0xB84A, + 30872 - 11904: 0xB84B, + 30873 - 11904: 0xDEEF, + 30874 - 11904: 0xDEE5, + 30878 - 11904: 0xE2F2, + 30879 - 11904: 0xBAD0, + 30880 - 11904: 0xE2F4, + 30881 - 11904: 0xDEEC, + 30882 - 11904: 0xE2F6, + 30883 - 11904: 0xBAD4, + 30884 - 11904: 0xE2F7, + 30885 - 11904: 0xE2F3, + 30887 - 11904: 0xBAD1, + 30888 - 11904: 0xE2EF, + 30889 - 11904: 0xBAD3, + 30890 - 11904: 0xE2EC, + 30891 - 11904: 0xE2F1, + 30892 - 11904: 0xE2F5, + 30893 - 11904: 0xE2EE, + 30895 - 11904: 0xFEE1, + 30896 - 11904: 0xB849, + 30897 - 11904: 0xFEE9, + 30898 - 11904: 0xE2EB, + 30899 - 11904: 0xBAD2, + 30900 - 11904: 0xE2ED, + 30902 - 11904: 0x96E4, + 30904 - 11904: 0x89AC, + 30905 - 11904: 0x96DB, + 30906 - 11904: 0xBD54, + 30907 - 11904: 0xE6C1, + 30908 - 11904: 0xBD58, + 30910 - 11904: 0xBD56, + 30913 - 11904: 0xBACF, + 30915 - 11904: 0xE6C8, + 30916 - 11904: 0xE6C9, + 30917 - 11904: 0xBD53, + 30919 - 11904: 0xFEE2, + 30920 - 11904: 0xE6C7, + 30921 - 11904: 0xE6CA, + 30922 - 11904: 0xBD55, + 30923 - 11904: 0xBD52, + 30924 - 11904: 0xE6C3, + 30925 - 11904: 0xE6C0, + 30926 - 11904: 0xE6C5, + 30927 - 11904: 0xE6C2, + 30928 - 11904: 0xBD59, + 30929 - 11904: 0xE6C4, + 30930 - 11904: 0x94C4, + 30931 - 11904: 0xFEE3, + 30932 - 11904: 0xE6C6, + 30933 - 11904: 0xBD57, + 30935 - 11904: 0xFEE7, + 30936 - 11904: 0x9FFB, + 30938 - 11904: 0xBF6A, + 30939 - 11904: 0xEAA8, + 30941 - 11904: 0xEAA2, + 30942 - 11904: 0xEAA6, + 30943 - 11904: 0xEAAC, + 30944 - 11904: 0xEAAD, + 30945 - 11904: 0xEAA9, + 30946 - 11904: 0xEAAA, + 30947 - 11904: 0xEAA7, + 30948 - 11904: 0x8C59, + 30949 - 11904: 0xEAA4, + 30951 - 11904: 0xBF6C, + 30952 - 11904: 0xBF69, + 30953 - 11904: 0xEAA3, + 30954 - 11904: 0xEAA5, + 30956 - 11904: 0xBF6B, + 30957 - 11904: 0xEAAB, + 30958 - 11904: 0x93C9, + 30959 - 11904: 0xC146, + 30960 - 11904: 0x94E8, + 30961 - 11904: 0xFB56, + 30962 - 11904: 0xEDAA, + 30963 - 11904: 0xEDA5, + 30964 - 11904: 0xC145, + 30965 - 11904: 0x90C5, + 30967 - 11904: 0xC143, + 30969 - 11904: 0xEDAC, + 30970 - 11904: 0xC144, + 30971 - 11904: 0xEDA8, + 30972 - 11904: 0xEDA9, + 30973 - 11904: 0xEDA6, + 30974 - 11904: 0xEDAD, + 30975 - 11904: 0xF056, + 30977 - 11904: 0xC147, + 30978 - 11904: 0xEDA7, + 30980 - 11904: 0xEDAE, + 30981 - 11904: 0xEDAB, + 30982 - 11904: 0xA0A8, + 30985 - 11904: 0xF05A, + 30988 - 11904: 0xF057, + 30990 - 11904: 0xC2A6, + 30992 - 11904: 0xF05B, + 30993 - 11904: 0xF05D, + 30994 - 11904: 0xF05C, + 30995 - 11904: 0xF058, + 30996 - 11904: 0xF059, + 30999 - 11904: 0xF2A3, + 31001 - 11904: 0xC3AA, + 31003 - 11904: 0xF27E, + 31004 - 11904: 0xF2A2, + 31005 - 11904: 0xF27D, + 31006 - 11904: 0xF2A4, + 31009 - 11904: 0xF2A1, + 31011 - 11904: 0xF47A, + 31012 - 11904: 0xF47D, + 31013 - 11904: 0xF479, + 31014 - 11904: 0xC471, + 31015 - 11904: 0xF47B, + 31016 - 11904: 0xF47C, + 31017 - 11904: 0xF47E, + 31018 - 11904: 0xC472, + 31019 - 11904: 0xC474, + 31020 - 11904: 0xC473, + 31021 - 11904: 0xF5E1, + 31022 - 11904: 0xFEE5, + 31023 - 11904: 0xF5E3, + 31025 - 11904: 0xF5E2, + 31026 - 11904: 0x98FD, + 31027 - 11904: 0x98FB, + 31028 - 11904: 0xFEE8, + 31029 - 11904: 0xF6F6, + 31030 - 11904: 0x8EBF, + 31032 - 11904: 0xF8B5, + 31033 - 11904: 0xF8FA, + 31034 - 11904: 0xA5DC, + 31035 - 11904: 0x8BD8, + 31036 - 11904: 0xFEF7, + 31037 - 11904: 0xCB72, + 31038 - 11904: 0xAAC0, + 31039 - 11904: 0xCDA3, + 31040 - 11904: 0xAAC1, + 31041 - 11904: 0xAAC2, + 31042 - 11904: 0xCDA2, + 31044 - 11904: 0xCFF8, + 31045 - 11904: 0xCFF7, + 31046 - 11904: 0xACE6, + 31047 - 11904: 0xACE9, + 31048 - 11904: 0xACE8, + 31049 - 11904: 0xACE7, + 31050 - 11904: 0xCFF4, + 31051 - 11904: 0xCFF6, + 31052 - 11904: 0xCFF5, + 31055 - 11904: 0xD2E8, + 31056 - 11904: 0xAFA7, + 31057 - 11904: 0xD2EC, + 31058 - 11904: 0xD2EB, + 31059 - 11904: 0xD2EA, + 31060 - 11904: 0xD2E6, + 31061 - 11904: 0xAFA6, + 31062 - 11904: 0xAFAA, + 31063 - 11904: 0xAFAD, + 31064 - 11904: 0x8F68, + 31065 - 11904: 0x94C6, + 31066 - 11904: 0xAFAE, + 31067 - 11904: 0xD2E7, + 31068 - 11904: 0xD2E9, + 31069 - 11904: 0xAFAC, + 31070 - 11904: 0xAFAB, + 31071 - 11904: 0xAFA9, + 31072 - 11904: 0xAFA8, + 31073 - 11904: 0xD6C2, + 31074 - 11904: 0x9DEA, + 31075 - 11904: 0xD6C0, + 31076 - 11904: 0xD6BC, + 31077 - 11904: 0xB2BB, + 31079 - 11904: 0xD6BD, + 31080 - 11904: 0xB2BC, + 31081 - 11904: 0xD6BE, + 31082 - 11904: 0xD6BF, + 31083 - 11904: 0xD6C1, + 31085 - 11904: 0xB2BD, + 31088 - 11904: 0xDAD5, + 31089 - 11904: 0xFC69, + 31090 - 11904: 0xDAD4, + 31091 - 11904: 0xDAD3, + 31092 - 11904: 0xDAD2, + 31097 - 11904: 0xDEF6, + 31098 - 11904: 0xB852, + 31100 - 11904: 0xDEF3, + 31101 - 11904: 0xDEF5, + 31102 - 11904: 0x9CDA, + 31103 - 11904: 0xB853, + 31104 - 11904: 0xFEF3, + 31105 - 11904: 0xB854, + 31106 - 11904: 0xDEF4, + 31107 - 11904: 0x9C72, + 31110 - 11904: 0xFEF0, + 31111 - 11904: 0x89C9, + 31112 - 11904: 0xE341, + 31114 - 11904: 0xE2F9, + 31115 - 11904: 0xE2FA, + 31117 - 11904: 0xBAD7, + 31118 - 11904: 0xBAD5, + 31119 - 11904: 0xBAD6, + 31120 - 11904: 0xE343, + 31121 - 11904: 0x9941, + 31122 - 11904: 0xE342, + 31123 - 11904: 0xE2FE, + 31124 - 11904: 0xE2FD, + 31125 - 11904: 0xE2FC, + 31126 - 11904: 0xE2FB, + 31127 - 11904: 0xE340, + 31128 - 11904: 0xE2F8, + 31129 - 11904: 0x9942, + 31130 - 11904: 0xE6CB, + 31131 - 11904: 0xE6D0, + 31132 - 11904: 0xE6CE, + 31133 - 11904: 0xFEF5, + 31135 - 11904: 0x91D7, + 31136 - 11904: 0xE6CD, + 31137 - 11904: 0xE6CC, + 31138 - 11904: 0xE6CF, + 31140 - 11904: 0xEAAE, + 31141 - 11904: 0x94CC, + 31142 - 11904: 0xBF6D, + 31143 - 11904: 0xC148, + 31144 - 11904: 0xEDB0, + 31145 - 11904: 0xFEF8, + 31146 - 11904: 0xC149, + 31147 - 11904: 0xEDAF, + 31148 - 11904: 0xF05F, + 31149 - 11904: 0xF05E, + 31150 - 11904: 0xC2A7, + 31152 - 11904: 0xF2A5, + 31153 - 11904: 0xC3AB, + 31154 - 11904: 0xF4A1, + 31155 - 11904: 0xC5A1, + 31156 - 11904: 0xF6F7, + 31158 - 11904: 0xF8B7, + 31159 - 11904: 0xF8B6, + 31160 - 11904: 0xC9A8, + 31161 - 11904: 0xACEA, + 31162 - 11904: 0xACEB, + 31163 - 11904: 0xD6C3, + 31165 - 11904: 0xB856, + 31166 - 11904: 0xA5DD, + 31167 - 11904: 0xA872, + 31168 - 11904: 0xA871, + 31169 - 11904: 0xA870, + 31172 - 11904: 0x97A8, + 31173 - 11904: 0xCDA4, + 31174 - 11904: 0xFEFC, + 31176 - 11904: 0xAAC4, + 31177 - 11904: 0xAAC3, + 31178 - 11904: 0x8CDE, + 31179 - 11904: 0xACEE, + 31180 - 11904: 0xFDBF, + 31181 - 11904: 0xCFFA, + 31182 - 11904: 0xCFFD, + 31183 - 11904: 0xCFFB, + 31184 - 11904: 0x87B3, + 31185 - 11904: 0xACEC, + 31186 - 11904: 0xACED, + 31188 - 11904: 0xFEFE, + 31189 - 11904: 0xCFF9, + 31190 - 11904: 0xCFFC, + 31192 - 11904: 0xAFB5, + 31196 - 11904: 0xD2F3, + 31197 - 11904: 0xD2F5, + 31198 - 11904: 0xD2F4, + 31199 - 11904: 0xAFB2, + 31200 - 11904: 0xD2EF, + 31202 - 11904: 0x96D1, + 31203 - 11904: 0xAFB0, + 31204 - 11904: 0xAFAF, + 31206 - 11904: 0xAFB3, + 31207 - 11904: 0xAFB1, + 31209 - 11904: 0xAFB4, + 31210 - 11904: 0xD2F2, + 31211 - 11904: 0xD2ED, + 31212 - 11904: 0xD2EE, + 31213 - 11904: 0xD2F1, + 31214 - 11904: 0xD2F0, + 31217 - 11904: 0x94D5, + 31220 - 11904: 0x94D0, + 31222 - 11904: 0xD6C6, + 31223 - 11904: 0xD6C7, + 31224 - 11904: 0xD6C5, + 31226 - 11904: 0xD6C4, + 31227 - 11904: 0xB2BE, + 31232 - 11904: 0xB57D, + 31234 - 11904: 0xDAD6, + 31235 - 11904: 0xDAD8, + 31236 - 11904: 0xDADA, + 31237 - 11904: 0xB57C, + 31238 - 11904: 0x9944, + 31240 - 11904: 0xB57A, + 31242 - 11904: 0xDAD7, + 31243 - 11904: 0xB57B, + 31244 - 11904: 0xDAD9, + 31245 - 11904: 0xB579, + 31248 - 11904: 0xDF41, + 31249 - 11904: 0xDEF7, + 31250 - 11904: 0xDEFA, + 31251 - 11904: 0xDEFE, + 31252 - 11904: 0xB85A, + 31253 - 11904: 0xDEFC, + 31255 - 11904: 0xDEFB, + 31256 - 11904: 0xDEF8, + 31257 - 11904: 0xDEF9, + 31258 - 11904: 0xB858, + 31259 - 11904: 0xDF40, + 31260 - 11904: 0xB857, + 31262 - 11904: 0xB85C, + 31263 - 11904: 0xB85B, + 31264 - 11904: 0xB859, + 31266 - 11904: 0xDEFD, + 31270 - 11904: 0xE349, + 31272 - 11904: 0xE348, + 31274 - 11904: 0x8C63, + 31275 - 11904: 0xE344, + 31276 - 11904: 0x87BB, + 31277 - 11904: 0xA0B3, + 31278 - 11904: 0xBAD8, + 31279 - 11904: 0xE347, + 31280 - 11904: 0xE346, + 31281 - 11904: 0xBAD9, + 31282 - 11904: 0x87B4, + 31287 - 11904: 0xBD5E, + 31289 - 11904: 0xE6D2, + 31290 - 11904: 0x94CF, + 31291 - 11904: 0xBD5F, + 31292 - 11904: 0xBD5B, + 31293 - 11904: 0xBD5D, + 31294 - 11904: 0x9FFA, + 31295 - 11904: 0xBD5A, + 31296 - 11904: 0xBD5C, + 31299 - 11904: 0x91E5, + 31300 - 11904: 0xEAAF, + 31301 - 11904: 0x9C6A, + 31302 - 11904: 0xBF70, + 31303 - 11904: 0xEAB1, + 31304 - 11904: 0xEAB0, + 31305 - 11904: 0x8E49, + 31306 - 11904: 0xE345, + 31307 - 11904: 0xBF72, + 31308 - 11904: 0xBF71, + 31309 - 11904: 0xBF6E, + 31310 - 11904: 0xBF6F, + 31316 - 11904: 0xEDB5, + 31318 - 11904: 0xEDB3, + 31319 - 11904: 0xC14A, + 31320 - 11904: 0xEDB4, + 31322 - 11904: 0xEDB6, + 31323 - 11904: 0xEDB2, + 31324 - 11904: 0xEDB1, + 31327 - 11904: 0xF060, + 31328 - 11904: 0xC2AA, + 31329 - 11904: 0xC2A8, + 31330 - 11904: 0xC2A9, + 31333 - 11904: 0x8E4C, + 31335 - 11904: 0xF2A6, + 31336 - 11904: 0xF2A7, + 31337 - 11904: 0xC3AD, + 31339 - 11904: 0xC3AC, + 31340 - 11904: 0xF4A3, + 31341 - 11904: 0xF4A4, + 31342 - 11904: 0xF4A2, + 31344 - 11904: 0xF6F8, + 31345 - 11904: 0xF6F9, + 31346 - 11904: 0x87C9, + 31348 - 11904: 0xA5DE, + 31349 - 11904: 0xCA48, + 31350 - 11904: 0xA873, + 31352 - 11904: 0xCDA5, + 31353 - 11904: 0xAAC6, + 31354 - 11904: 0xAAC5, + 31355 - 11904: 0xCDA6, + 31357 - 11904: 0x8E4D, + 31358 - 11904: 0xD040, + 31359 - 11904: 0xACEF, + 31360 - 11904: 0xCFFE, + 31361 - 11904: 0xACF0, + 31363 - 11904: 0x9A73, + 31364 - 11904: 0xAFB6, + 31365 - 11904: 0xD2F8, + 31366 - 11904: 0xD2F6, + 31367 - 11904: 0xD2FC, + 31368 - 11904: 0xAFB7, + 31369 - 11904: 0xD2F7, + 31370 - 11904: 0xD2FB, + 31371 - 11904: 0xD2F9, + 31372 - 11904: 0xD2FA, + 31375 - 11904: 0xD6C8, + 31376 - 11904: 0xD6CA, + 31377 - 11904: 0x9947, + 31378 - 11904: 0xB2BF, + 31379 - 11904: 0x8CB1, + 31380 - 11904: 0xD6C9, + 31381 - 11904: 0xB2C0, + 31382 - 11904: 0xB5A2, + 31383 - 11904: 0xB5A1, + 31384 - 11904: 0xB57E, + 31385 - 11904: 0xDADB, + 31390 - 11904: 0xDF44, + 31391 - 11904: 0xB85D, + 31392 - 11904: 0xB85E, + 31394 - 11904: 0xDF43, + 31395 - 11904: 0xDF42, + 31400 - 11904: 0xE34A, + 31401 - 11904: 0xBADB, + 31402 - 11904: 0xBADA, + 31403 - 11904: 0xE34B, + 31404 - 11904: 0xE34C, + 31406 - 11904: 0xBD61, + 31407 - 11904: 0xBD60, + 31408 - 11904: 0x8E50, + 31409 - 11904: 0xEAB5, + 31410 - 11904: 0xE6D3, + 31411 - 11904: 0xE6D5, + 31412 - 11904: 0xE6D4, + 31413 - 11904: 0xEAB4, + 31414 - 11904: 0xEAB2, + 31415 - 11904: 0xEAB6, + 31416 - 11904: 0xEAB3, + 31418 - 11904: 0xBF73, + 31419 - 11904: 0x8E4F, + 31420 - 11904: 0x9949, + 31422 - 11904: 0xEDB7, + 31423 - 11904: 0xC14B, + 31424 - 11904: 0xEDB8, + 31425 - 11904: 0xEDB9, + 31426 - 11904: 0x8E51, + 31427 - 11904: 0x8E52, + 31428 - 11904: 0xC2AB, + 31429 - 11904: 0xC2AC, + 31431 - 11904: 0xC475, + 31432 - 11904: 0x9AB2, + 31433 - 11904: 0x89A5, + 31434 - 11904: 0xC5D1, + 31435 - 11904: 0xA5DF, + 31439 - 11904: 0x994C, + 31441 - 11904: 0xD041, + 31443 - 11904: 0x9FF8, + 31448 - 11904: 0xD2FD, + 31449 - 11904: 0xAFB8, + 31450 - 11904: 0x8E56, + 31451 - 11904: 0x994D, + 31452 - 11904: 0x91CA, + 31453 - 11904: 0x8E57, + 31455 - 11904: 0xB3BA, + 31456 - 11904: 0xB3B9, + 31458 - 11904: 0x94E1, + 31459 - 11904: 0xB5A4, + 31460 - 11904: 0xDADD, + 31461 - 11904: 0xB5A3, + 31462 - 11904: 0xDADC, + 31463 - 11904: 0x9047, + 31465 - 11904: 0x8FD8, + 31466 - 11904: 0x8E58, + 31467 - 11904: 0xDF45, + 31469 - 11904: 0xBADC, + 31470 - 11904: 0xE34D, + 31471 - 11904: 0xBADD, + 31478 - 11904: 0xC476, + 31479 - 11904: 0xF4A5, + 31481 - 11904: 0xA6CB, + 31482 - 11904: 0xAAC7, + 31483 - 11904: 0xCDA7, + 31484 - 11904: 0x87A3, + 31485 - 11904: 0xACF2, + 31486 - 11904: 0x94EB, + 31487 - 11904: 0xACF1, + 31488 - 11904: 0xD042, + 31489 - 11904: 0xD043, + 31492 - 11904: 0xD340, + 31493 - 11904: 0xD342, + 31494 - 11904: 0xAFB9, + 31496 - 11904: 0xD344, + 31497 - 11904: 0xD347, + 31498 - 11904: 0xD345, + 31499 - 11904: 0x8E5C, + 31500 - 11904: 0x9553, + 31502 - 11904: 0xD346, + 31503 - 11904: 0xD343, + 31504 - 11904: 0xD2FE, + 31505 - 11904: 0xAFBA, + 31506 - 11904: 0xD348, + 31507 - 11904: 0xD341, + 31508 - 11904: 0x9FE5, + 31512 - 11904: 0xD6D3, + 31513 - 11904: 0xB2C6, + 31514 - 11904: 0xD6DC, + 31515 - 11904: 0xB2C3, + 31517 - 11904: 0xD6D5, + 31518 - 11904: 0xB2C7, + 31519 - 11904: 0x9F56, + 31520 - 11904: 0xB2C1, + 31522 - 11904: 0xD6D0, + 31523 - 11904: 0xD6DD, + 31524 - 11904: 0xD6D1, + 31525 - 11904: 0xD6CE, + 31526 - 11904: 0xB2C5, + 31527 - 11904: 0x954F, + 31528 - 11904: 0xB2C2, + 31529 - 11904: 0x8E5E, + 31530 - 11904: 0xD6D4, + 31531 - 11904: 0xD6D7, + 31532 - 11904: 0xB2C4, + 31533 - 11904: 0xD6D8, + 31534 - 11904: 0xB2C8, + 31535 - 11904: 0xD6D9, + 31536 - 11904: 0xD6CF, + 31537 - 11904: 0xD6D6, + 31538 - 11904: 0xD6DA, + 31539 - 11904: 0xD6D2, + 31540 - 11904: 0xD6CD, + 31541 - 11904: 0xD6CB, + 31544 - 11904: 0xD6DB, + 31545 - 11904: 0x996A, + 31547 - 11904: 0xDADF, + 31552 - 11904: 0xDAE4, + 31554 - 11904: 0x9C64, + 31555 - 11904: 0x9CD9, + 31556 - 11904: 0xDAE0, + 31557 - 11904: 0xDAE6, + 31558 - 11904: 0xB5A7, + 31559 - 11904: 0xD6CC, + 31560 - 11904: 0xDAE1, + 31561 - 11904: 0xB5A5, + 31562 - 11904: 0xDADE, + 31563 - 11904: 0xB5AC, + 31564 - 11904: 0xDAE2, + 31565 - 11904: 0xB5AB, + 31566 - 11904: 0xDAE3, + 31567 - 11904: 0xB5AD, + 31568 - 11904: 0xB5A8, + 31569 - 11904: 0xB5AE, + 31570 - 11904: 0xB5A9, + 31572 - 11904: 0xB5AA, + 31573 - 11904: 0x8E5D, + 31574 - 11904: 0xB5A6, + 31576 - 11904: 0xDAE5, + 31584 - 11904: 0xB861, + 31585 - 11904: 0xDF50, + 31586 - 11904: 0x9950, + 31587 - 11904: 0xDF53, + 31588 - 11904: 0xDF47, + 31589 - 11904: 0xDF4C, + 31590 - 11904: 0xDF46, + 31591 - 11904: 0xB863, + 31593 - 11904: 0xDF4A, + 31596 - 11904: 0x9951, + 31597 - 11904: 0xDF48, + 31598 - 11904: 0xB862, + 31599 - 11904: 0x8E62, + 31600 - 11904: 0xDF4F, + 31601 - 11904: 0xDF4E, + 31602 - 11904: 0xDF4B, + 31603 - 11904: 0xDF4D, + 31604 - 11904: 0xDF49, + 31605 - 11904: 0xBAE1, + 31606 - 11904: 0xDF52, + 31607 - 11904: 0xB85F, + 31608 - 11904: 0xDF51, + 31611 - 11904: 0x9952, + 31618 - 11904: 0xE35D, + 31620 - 11904: 0xBAE8, + 31621 - 11904: 0xE358, + 31623 - 11904: 0xBAE7, + 31624 - 11904: 0xE34E, + 31626 - 11904: 0xE350, + 31627 - 11904: 0xBAE0, + 31628 - 11904: 0xE355, + 31629 - 11904: 0xE354, + 31630 - 11904: 0xE357, + 31631 - 11904: 0xBAE5, + 31632 - 11904: 0xE352, + 31633 - 11904: 0xE351, + 31634 - 11904: 0x8E68, + 31636 - 11904: 0xBAE4, + 31637 - 11904: 0xBADF, + 31638 - 11904: 0xE353, + 31639 - 11904: 0xBAE2, + 31640 - 11904: 0xE359, + 31641 - 11904: 0xE35B, + 31643 - 11904: 0xE356, + 31644 - 11904: 0xE34F, + 31645 - 11904: 0xBAE3, + 31648 - 11904: 0xBD69, + 31649 - 11904: 0xBADE, + 31650 - 11904: 0x8E61, + 31651 - 11904: 0x9F59, + 31652 - 11904: 0xE35C, + 31660 - 11904: 0xE6D9, + 31661 - 11904: 0xBD62, + 31662 - 11904: 0x87D0, + 31663 - 11904: 0xE6DB, + 31665 - 11904: 0xBD63, + 31666 - 11904: 0x8BB3, + 31668 - 11904: 0xBD65, + 31669 - 11904: 0xE6DE, + 31671 - 11904: 0xE6D6, + 31672 - 11904: 0xBAE6, + 31673 - 11904: 0xE6DC, + 31678 - 11904: 0xE6D8, + 31680 - 11904: 0xB860, + 31681 - 11904: 0xBD68, + 31684 - 11904: 0xBD64, + 31685 - 11904: 0x87B9, + 31686 - 11904: 0xBD66, + 31687 - 11904: 0xBD67, + 31689 - 11904: 0xBF76, + 31690 - 11904: 0xE6DD, + 31691 - 11904: 0xE6D7, + 31692 - 11904: 0xBD6A, + 31694 - 11904: 0xE6DA, + 31695 - 11904: 0x9F5D, + 31696 - 11904: 0x8E66, + 31700 - 11904: 0xEAC0, + 31701 - 11904: 0xEABB, + 31704 - 11904: 0xEAC5, + 31705 - 11904: 0xBF74, + 31706 - 11904: 0xEABD, + 31707 - 11904: 0xBF78, + 31708 - 11904: 0xEAC3, + 31709 - 11904: 0xEABA, + 31710 - 11904: 0xEAB7, + 31711 - 11904: 0xEAC6, + 31712 - 11904: 0xC151, + 31713 - 11904: 0xBF79, + 31714 - 11904: 0xEAC2, + 31715 - 11904: 0xEAB8, + 31716 - 11904: 0xBF77, + 31717 - 11904: 0xEABC, + 31718 - 11904: 0xBF7B, + 31719 - 11904: 0xEAB9, + 31720 - 11904: 0xEABE, + 31721 - 11904: 0xBF7A, + 31722 - 11904: 0xEAC1, + 31723 - 11904: 0xEAC4, + 31724 - 11904: 0x8CB2, + 31728 - 11904: 0xEDCB, + 31729 - 11904: 0xEDCC, + 31730 - 11904: 0xEDBC, + 31731 - 11904: 0xEDC3, + 31732 - 11904: 0xEDC1, + 31735 - 11904: 0xC14F, + 31736 - 11904: 0xEDC8, + 31737 - 11904: 0xEABF, + 31738 - 11904: 0x8E6E, + 31739 - 11904: 0xEDBF, + 31740 - 11904: 0x9F64, + 31741 - 11904: 0xEDC9, + 31742 - 11904: 0xC14E, + 31743 - 11904: 0xEDBE, + 31744 - 11904: 0xEDBD, + 31745 - 11904: 0xEDC7, + 31746 - 11904: 0xEDC4, + 31747 - 11904: 0xEDC6, + 31749 - 11904: 0xEDBA, + 31750 - 11904: 0xEDCA, + 31751 - 11904: 0xC14C, + 31753 - 11904: 0xEDC5, + 31754 - 11904: 0xEDCE, + 31755 - 11904: 0xEDC2, + 31756 - 11904: 0xC150, + 31757 - 11904: 0xC14D, + 31758 - 11904: 0xEDC0, + 31759 - 11904: 0xEDBB, + 31760 - 11904: 0xEDCD, + 31761 - 11904: 0xBF75, + 31762 - 11904: 0x9953, + 31765 - 11904: 0xFAB8, + 31769 - 11904: 0xF063, + 31771 - 11904: 0x9954, + 31772 - 11904: 0xF061, + 31773 - 11904: 0xF067, + 31774 - 11904: 0xC2B0, + 31775 - 11904: 0xF065, + 31776 - 11904: 0xF064, + 31777 - 11904: 0xC2B2, + 31778 - 11904: 0xF06A, + 31779 - 11904: 0xC2B1, + 31781 - 11904: 0xF06B, + 31782 - 11904: 0xF068, + 31783 - 11904: 0xC2AE, + 31784 - 11904: 0xF069, + 31785 - 11904: 0xF062, + 31786 - 11904: 0xC2AF, + 31787 - 11904: 0xC2AD, + 31788 - 11904: 0xF2AB, + 31789 - 11904: 0xF066, + 31792 - 11904: 0xF06C, + 31795 - 11904: 0xF2A8, + 31797 - 11904: 0x8E70, + 31799 - 11904: 0xC3B2, + 31800 - 11904: 0xC3B0, + 31801 - 11904: 0xF2AA, + 31803 - 11904: 0xF2AC, + 31804 - 11904: 0xF2A9, + 31805 - 11904: 0xC3B1, + 31806 - 11904: 0xC3AE, + 31807 - 11904: 0xC3AF, + 31808 - 11904: 0xC3B3, + 31810 - 11904: 0x9F61, + 31811 - 11904: 0xC478, + 31812 - 11904: 0x8E72, + 31813 - 11904: 0xF4AA, + 31815 - 11904: 0xF4A9, + 31816 - 11904: 0xF4A7, + 31817 - 11904: 0xF4A6, + 31818 - 11904: 0xF4A8, + 31820 - 11904: 0xC477, + 31821 - 11904: 0xC479, + 31824 - 11904: 0xC4F0, + 31825 - 11904: 0xA06B, + 31827 - 11904: 0xF5E5, + 31828 - 11904: 0xF5E4, + 31830 - 11904: 0x9F40, + 31831 - 11904: 0xF6FA, + 31833 - 11904: 0xF6FC, + 31834 - 11904: 0xF6FE, + 31835 - 11904: 0xF6FD, + 31836 - 11904: 0xF6FB, + 31837 - 11904: 0x94ED, + 31839 - 11904: 0xC5A3, + 31840 - 11904: 0xC5A2, + 31843 - 11904: 0xC5D3, + 31844 - 11904: 0xC5D2, + 31845 - 11904: 0xC5D4, + 31846 - 11904: 0xF7ED, + 31847 - 11904: 0xF7EC, + 31849 - 11904: 0xF8FB, + 31850 - 11904: 0xF8B8, + 31851 - 11904: 0xF8FC, + 31852 - 11904: 0xC658, + 31853 - 11904: 0x94EE, + 31854 - 11904: 0xC659, + 31855 - 11904: 0xF96D, + 31856 - 11904: 0x9FBD, + 31858 - 11904: 0xC67E, + 31859 - 11904: 0xA6CC, + 31860 - 11904: 0x8E7B, + 31861 - 11904: 0xCDA8, + 31864 - 11904: 0xD045, + 31865 - 11904: 0xD046, + 31866 - 11904: 0xD044, + 31867 - 11904: 0x9957, + 31868 - 11904: 0x94F7, + 31869 - 11904: 0xACF3, + 31870 - 11904: 0x9F5F, + 31871 - 11904: 0xD047, + 31872 - 11904: 0xD048, + 31873 - 11904: 0xD049, + 31875 - 11904: 0x8E73, + 31876 - 11904: 0xD349, + 31877 - 11904: 0xD34F, + 31878 - 11904: 0x9F62, + 31880 - 11904: 0xD34D, + 31881 - 11904: 0xAFBB, + 31882 - 11904: 0xD34B, + 31884 - 11904: 0xD34C, + 31885 - 11904: 0xD34E, + 31886 - 11904: 0x94F6, + 31889 - 11904: 0xD34A, + 31890 - 11904: 0xB2C9, + 31892 - 11904: 0xD6DE, + 31893 - 11904: 0xB2CB, + 31894 - 11904: 0xD6E0, + 31895 - 11904: 0xB2CA, + 31896 - 11904: 0xD6DF, + 31900 - 11904: 0x9958, + 31902 - 11904: 0xDAE8, + 31903 - 11904: 0xB5AF, + 31905 - 11904: 0xDAEA, + 31906 - 11904: 0xDAE7, + 31907 - 11904: 0xD6E1, + 31909 - 11904: 0xB5B0, + 31910 - 11904: 0x8E75, + 31911 - 11904: 0xF9DB, + 31912 - 11904: 0xDAE9, + 31916 - 11904: 0x9072, + 31918 - 11904: 0x94F8, + 31919 - 11904: 0xDF56, + 31921 - 11904: 0xB864, + 31922 - 11904: 0xDF54, + 31923 - 11904: 0xB865, + 31924 - 11904: 0xDF55, + 31925 - 11904: 0xB866, + 31928 - 11904: 0x995A, + 31929 - 11904: 0xBAE9, + 31930 - 11904: 0xE361, + 31931 - 11904: 0xE35E, + 31932 - 11904: 0xE360, + 31933 - 11904: 0xBAEA, + 31934 - 11904: 0xBAEB, + 31935 - 11904: 0xE35F, + 31938 - 11904: 0xA0B0, + 31939 - 11904: 0x8CB3, + 31941 - 11904: 0xE6DF, + 31943 - 11904: 0x8E79, + 31944 - 11904: 0xE6E0, + 31945 - 11904: 0x8E78, + 31946 - 11904: 0xBD6B, + 31947 - 11904: 0xE6E2, + 31948 - 11904: 0xE6E1, + 31949 - 11904: 0x94F3, + 31950 - 11904: 0xA261, + 31952 - 11904: 0xEACA, + 31953 - 11904: 0xEACB, + 31954 - 11904: 0xEAC7, + 31955 - 11904: 0x98AF, + 31956 - 11904: 0xEAC8, + 31957 - 11904: 0xBF7C, + 31958 - 11904: 0xBF7D, + 31959 - 11904: 0xEAC9, + 31961 - 11904: 0xC157, + 31962 - 11904: 0xA0B2, + 31964 - 11904: 0xC153, + 31965 - 11904: 0xC158, + 31966 - 11904: 0xC154, + 31967 - 11904: 0xC156, + 31968 - 11904: 0xC152, + 31970 - 11904: 0xC155, + 31974 - 11904: 0x8E7A, + 31975 - 11904: 0xC2B3, + 31976 - 11904: 0xEDCF, + 31978 - 11904: 0xF2AE, + 31980 - 11904: 0xF2AD, + 31981 - 11904: 0x995C, + 31982 - 11904: 0xF4AB, + 31983 - 11904: 0xC47A, + 31984 - 11904: 0xC47B, + 31985 - 11904: 0xF741, + 31986 - 11904: 0xF5E6, + 31987 - 11904: 0x8E7C, + 31988 - 11904: 0xF740, + 31989 - 11904: 0x8E7D, + 31990 - 11904: 0xF8FD, + 31991 - 11904: 0xF9A4, + 31992 - 11904: 0xA6CD, + 31993 - 11904: 0x8BD9, + 31995 - 11904: 0xA874, + 31996 - 11904: 0x89A2, + 31997 - 11904: 0xCDA9, + 31998 - 11904: 0xAAC8, + 32000 - 11904: 0xACF6, + 32001 - 11904: 0xD04C, + 32002 - 11904: 0xACF4, + 32003 - 11904: 0xD04A, + 32004 - 11904: 0xACF9, + 32005 - 11904: 0xACF5, + 32006 - 11904: 0xACFA, + 32007 - 11904: 0xACF8, + 32008 - 11904: 0xD04B, + 32009 - 11904: 0xACF7, + 32010 - 11904: 0xAFBF, + 32011 - 11904: 0xAFBE, + 32012 - 11904: 0xD35A, + 32013 - 11904: 0xAFC7, + 32014 - 11904: 0xD353, + 32015 - 11904: 0xD359, + 32016 - 11904: 0xAFC3, + 32017 - 11904: 0xD352, + 32018 - 11904: 0xD358, + 32019 - 11904: 0xD356, + 32020 - 11904: 0xAFC2, + 32021 - 11904: 0xAFC4, + 32022 - 11904: 0xD355, + 32023 - 11904: 0xAFBD, + 32024 - 11904: 0xD354, + 32025 - 11904: 0xAFC8, + 32026 - 11904: 0xAFC5, + 32027 - 11904: 0xAFC9, + 32028 - 11904: 0xAFC6, + 32029 - 11904: 0xD351, + 32030 - 11904: 0xD350, + 32031 - 11904: 0xD357, + 32032 - 11904: 0xAFC0, + 32033 - 11904: 0xAFBC, + 32034 - 11904: 0xAFC1, + 32037 - 11904: 0x9ED7, + 32040 - 11904: 0xD6F0, + 32041 - 11904: 0xD6E9, + 32043 - 11904: 0xB5B5, + 32044 - 11904: 0xD6E8, + 32046 - 11904: 0xB2CF, + 32047 - 11904: 0xB2D6, + 32048 - 11904: 0xB2D3, + 32049 - 11904: 0xB2D9, + 32050 - 11904: 0xB2D8, + 32051 - 11904: 0xB2D4, + 32053 - 11904: 0xD6E2, + 32054 - 11904: 0xD6E5, + 32056 - 11904: 0xD6E4, + 32057 - 11904: 0xB2D0, + 32058 - 11904: 0xD6E6, + 32059 - 11904: 0xD6EF, + 32060 - 11904: 0xB2D1, + 32061 - 11904: 0xD6E3, + 32062 - 11904: 0xD6EC, + 32063 - 11904: 0xD6ED, + 32064 - 11904: 0xB2D2, + 32065 - 11904: 0xD6EA, + 32066 - 11904: 0xB2D7, + 32067 - 11904: 0xB2CD, + 32068 - 11904: 0xB2D5, + 32069 - 11904: 0xD6E7, + 32070 - 11904: 0xB2CC, + 32071 - 11904: 0xD6EB, + 32074 - 11904: 0xD6EE, + 32077 - 11904: 0xA0B6, + 32078 - 11904: 0xDAFB, + 32079 - 11904: 0xDAF2, + 32080 - 11904: 0xB5B2, + 32081 - 11904: 0xDAF9, + 32082 - 11904: 0xDAF6, + 32083 - 11904: 0xDAEE, + 32084 - 11904: 0xDAF7, + 32085 - 11904: 0xB5B4, + 32086 - 11904: 0xDAEF, + 32088 - 11904: 0xDAEB, + 32090 - 11904: 0x9E42, + 32091 - 11904: 0xB86C, + 32092 - 11904: 0xDAF4, + 32093 - 11904: 0x8EA4, + 32094 - 11904: 0xB5B1, + 32095 - 11904: 0xDAFA, + 32097 - 11904: 0xB5B8, + 32098 - 11904: 0xB5BA, + 32099 - 11904: 0xDAED, + 32102 - 11904: 0xB5B9, + 32103 - 11904: 0xDAF0, + 32104 - 11904: 0xB5B3, + 32105 - 11904: 0xDAF8, + 32106 - 11904: 0xDAF1, + 32107 - 11904: 0xDAF5, + 32109 - 11904: 0xDAF3, + 32110 - 11904: 0xB5B6, + 32111 - 11904: 0xDAEC, + 32112 - 11904: 0xB5BB, + 32113 - 11904: 0xB2CE, + 32114 - 11904: 0xB5B7, + 32115 - 11904: 0xB5BC, + 32121 - 11904: 0xB868, + 32122 - 11904: 0xDF5D, + 32123 - 11904: 0xDF5F, + 32124 - 11904: 0xDF61, + 32125 - 11904: 0xDF65, + 32127 - 11904: 0xDF5B, + 32128 - 11904: 0xDF59, + 32129 - 11904: 0xB86A, + 32131 - 11904: 0xDF60, + 32132 - 11904: 0xDF64, + 32133 - 11904: 0xDF5C, + 32134 - 11904: 0xDF58, + 32136 - 11904: 0xDF57, + 32137 - 11904: 0x8EA7, + 32139 - 11904: 0x8C76, + 32140 - 11904: 0xDF62, + 32141 - 11904: 0xDF5A, + 32142 - 11904: 0xDF5E, + 32143 - 11904: 0xB86B, + 32145 - 11904: 0xB869, + 32146 - 11904: 0xDF66, + 32147 - 11904: 0xB867, + 32148 - 11904: 0xDF63, + 32149 - 11904: 0x8767, + 32150 - 11904: 0xE372, + 32151 - 11904: 0x9542, + 32156 - 11904: 0xBAEE, + 32157 - 11904: 0xE36A, + 32158 - 11904: 0xBD78, + 32159 - 11904: 0xE374, + 32160 - 11904: 0xBAF1, + 32161 - 11904: 0xE378, + 32162 - 11904: 0xBAF7, + 32163 - 11904: 0xE365, + 32164 - 11904: 0x987D, + 32166 - 11904: 0xE375, + 32167 - 11904: 0xE362, + 32168 - 11904: 0x9755, + 32169 - 11904: 0xE377, + 32170 - 11904: 0xE366, + 32171 - 11904: 0x8EA8, + 32172 - 11904: 0xBAFE, + 32173 - 11904: 0xBAFB, + 32174 - 11904: 0xE376, + 32175 - 11904: 0xE370, + 32176 - 11904: 0xBAED, + 32177 - 11904: 0xBAF5, + 32178 - 11904: 0xBAF4, + 32179 - 11904: 0x8EAA, + 32180 - 11904: 0xBAF3, + 32181 - 11904: 0xBAF9, + 32183 - 11904: 0xE363, + 32184 - 11904: 0xBAFA, + 32185 - 11904: 0xE371, + 32186 - 11904: 0xBAF6, + 32187 - 11904: 0xBAEC, + 32188 - 11904: 0xE373, + 32189 - 11904: 0xBAEF, + 32190 - 11904: 0xBAF0, + 32191 - 11904: 0xBAF8, + 32192 - 11904: 0xE368, + 32193 - 11904: 0xE367, + 32194 - 11904: 0xE364, + 32196 - 11904: 0xE36C, + 32197 - 11904: 0xE369, + 32198 - 11904: 0xE36D, + 32199 - 11904: 0xBAFD, + 32201 - 11904: 0xE379, + 32202 - 11904: 0xBAF2, + 32203 - 11904: 0xE36E, + 32204 - 11904: 0xE36F, + 32205 - 11904: 0x89A3, + 32206 - 11904: 0xE36B, + 32207 - 11904: 0x9960, + 32208 - 11904: 0x9962, + 32210 - 11904: 0xBAFC, + 32211 - 11904: 0x94FC, + 32212 - 11904: 0x9961, + 32215 - 11904: 0xE6E7, + 32216 - 11904: 0xBD70, + 32217 - 11904: 0xBD79, + 32218 - 11904: 0xBD75, + 32219 - 11904: 0xE6E4, + 32220 - 11904: 0x94FA, + 32221 - 11904: 0xBD72, + 32222 - 11904: 0xBD76, + 32223 - 11904: 0xE6F0, + 32224 - 11904: 0xBD6C, + 32225 - 11904: 0xE6E8, + 32227 - 11904: 0xBD74, + 32228 - 11904: 0x8EAE, + 32229 - 11904: 0x8EB2, + 32230 - 11904: 0xE6EB, + 32231 - 11904: 0xE6E6, + 32232 - 11904: 0xBD73, + 32233 - 11904: 0xBD77, + 32234 - 11904: 0xE6E5, + 32236 - 11904: 0xBD71, + 32238 - 11904: 0xE6EF, + 32239 - 11904: 0xBD6E, + 32240 - 11904: 0xE6EE, + 32241 - 11904: 0xE6ED, + 32242 - 11904: 0xBD7A, + 32243 - 11904: 0xE572, + 32244 - 11904: 0xBD6D, + 32245 - 11904: 0x8EB0, + 32246 - 11904: 0xE6EC, + 32247 - 11904: 0xE6E3, + 32249 - 11904: 0xBD7B, + 32250 - 11904: 0xE6EA, + 32251 - 11904: 0xBD6F, + 32253 - 11904: 0x9963, + 32254 - 11904: 0x97AA, + 32259 - 11904: 0xE6E9, + 32263 - 11904: 0x94FB, + 32264 - 11904: 0xBFA2, + 32265 - 11904: 0xBFA7, + 32266 - 11904: 0xBF7E, + 32267 - 11904: 0xEAD8, + 32268 - 11904: 0xEACF, + 32269 - 11904: 0xEADB, + 32270 - 11904: 0xEAD3, + 32271 - 11904: 0xEAD9, + 32272 - 11904: 0xBFA8, + 32273 - 11904: 0xBFA1, + 32274 - 11904: 0xEACC, + 32275 - 11904: 0xEAD2, + 32276 - 11904: 0xEADC, + 32277 - 11904: 0xEAD5, + 32278 - 11904: 0xEADA, + 32279 - 11904: 0xEACE, + 32282 - 11904: 0xEAD6, + 32283 - 11904: 0xBFA3, + 32284 - 11904: 0xEAD4, + 32285 - 11904: 0xBFA6, + 32286 - 11904: 0xBFA5, + 32287 - 11904: 0xEAD0, + 32288 - 11904: 0xEAD1, + 32289 - 11904: 0xEACD, + 32290 - 11904: 0xEAD7, + 32291 - 11904: 0xBFA4, + 32292 - 11904: 0xEADE, + 32293 - 11904: 0xEADD, + 32295 - 11904: 0x8EBB, + 32297 - 11904: 0xEDDA, + 32298 - 11904: 0xEDD6, + 32299 - 11904: 0xC15F, + 32301 - 11904: 0xEDD0, + 32302 - 11904: 0xC159, + 32303 - 11904: 0xC169, + 32304 - 11904: 0xEDDC, + 32305 - 11904: 0xC161, + 32306 - 11904: 0xC15D, + 32307 - 11904: 0xEDD3, + 32308 - 11904: 0xC164, + 32309 - 11904: 0xC167, + 32310 - 11904: 0xEDDE, + 32311 - 11904: 0xC15C, + 32312 - 11904: 0xEDD5, + 32313 - 11904: 0xC165, + 32314 - 11904: 0xEDE0, + 32315 - 11904: 0xEDDD, + 32316 - 11904: 0xEDD1, + 32317 - 11904: 0xC160, + 32318 - 11904: 0xC15A, + 32319 - 11904: 0xC168, + 32320 - 11904: 0xEDD8, + 32321 - 11904: 0xC163, + 32322 - 11904: 0xEDD2, + 32323 - 11904: 0xC15E, + 32324 - 11904: 0xEDDF, + 32325 - 11904: 0xC162, + 32326 - 11904: 0xC15B, + 32327 - 11904: 0xEDD9, + 32328 - 11904: 0xC166, + 32329 - 11904: 0xEDD7, + 32332 - 11904: 0xEDDB, + 32336 - 11904: 0xF06E, + 32337 - 11904: 0xF074, + 32338 - 11904: 0xC2B9, + 32339 - 11904: 0xF077, + 32340 - 11904: 0xC2B4, + 32341 - 11904: 0xC2B5, + 32342 - 11904: 0xF06F, + 32343 - 11904: 0xF076, + 32344 - 11904: 0xF071, + 32345 - 11904: 0xC2BA, + 32346 - 11904: 0xC2B7, + 32347 - 11904: 0x8CDC, + 32348 - 11904: 0xF06D, + 32350 - 11904: 0xC2B6, + 32351 - 11904: 0xF073, + 32352 - 11904: 0xF075, + 32353 - 11904: 0xC2B8, + 32354 - 11904: 0xF072, + 32355 - 11904: 0xF070, + 32357 - 11904: 0x9876, + 32359 - 11904: 0x8EA1, + 32360 - 11904: 0xF2B8, + 32361 - 11904: 0xC3B7, + 32362 - 11904: 0xC3B8, + 32363 - 11904: 0xC3B4, + 32364 - 11904: 0x8CB4, + 32365 - 11904: 0xC3B5, + 32366 - 11904: 0x8EB7, + 32367 - 11904: 0xF2B4, + 32368 - 11904: 0xF2B2, + 32370 - 11904: 0xF2B6, + 32371 - 11904: 0xC3BA, + 32372 - 11904: 0xF2B7, + 32373 - 11904: 0xF2B0, + 32374 - 11904: 0xF2AF, + 32375 - 11904: 0xF2B3, + 32376 - 11904: 0xF2B1, + 32377 - 11904: 0xC3B6, + 32378 - 11904: 0xF2B5, + 32379 - 11904: 0xF4AC, + 32380 - 11904: 0xC47E, + 32381 - 11904: 0xC47D, + 32382 - 11904: 0xF4AD, + 32383 - 11904: 0x9DA6, + 32384 - 11904: 0xF4AF, + 32385 - 11904: 0xF4AE, + 32386 - 11904: 0xC4A1, + 32390 - 11904: 0xF5EB, + 32391 - 11904: 0xF5E8, + 32392 - 11904: 0xF5E9, + 32394 - 11904: 0xF5E7, + 32395 - 11904: 0xF5EA, + 32396 - 11904: 0xC4F2, + 32397 - 11904: 0xF5EC, + 32398 - 11904: 0x9EB0, + 32399 - 11904: 0xC4F1, + 32401 - 11904: 0xF742, + 32402 - 11904: 0x8EB8, + 32403 - 11904: 0xC5D5, + 32404 - 11904: 0xC5D7, + 32405 - 11904: 0xF7EE, + 32406 - 11904: 0xC5D6, + 32407 - 11904: 0xF8B9, + 32408 - 11904: 0xF940, + 32409 - 11904: 0xF942, + 32410 - 11904: 0xF8FE, + 32411 - 11904: 0xF941, + 32412 - 11904: 0xC66C, + 32415 - 11904: 0x9D70, + 32420 - 11904: 0x896E, + 32428 - 11904: 0x896F, + 32442 - 11904: 0x8970, + 32455 - 11904: 0x8971, + 32463 - 11904: 0x8972, + 32479 - 11904: 0x8973, + 32518 - 11904: 0x8974, + 32566 - 11904: 0xA6CE, + 32567 - 11904: 0x8975, + 32568 - 11904: 0xACFB, + 32569 - 11904: 0xD26F, + 32570 - 11904: 0xAFCA, + 32573 - 11904: 0xB2DA, + 32574 - 11904: 0xDAFC, + 32575 - 11904: 0xDAFD, + 32576 - 11904: 0x8EBC, + 32577 - 11904: 0x8EBD, + 32579 - 11904: 0xEADF, + 32580 - 11904: 0xC16A, + 32581 - 11904: 0xEDE1, + 32583 - 11904: 0x8EBE, + 32584 - 11904: 0xC2BB, + 32585 - 11904: 0x9DD1, + 32586 - 11904: 0xF2BA, + 32587 - 11904: 0xF2B9, + 32588 - 11904: 0xC4A2, + 32589 - 11904: 0xF5ED, + 32590 - 11904: 0x94FD, + 32591 - 11904: 0xF743, + 32592 - 11904: 0xC5F8, + 32593 - 11904: 0xCA49, + 32594 - 11904: 0x8BD7, + 32595 - 11904: 0x8BDA, + 32596 - 11904: 0xAAC9, + 32597 - 11904: 0xA875, + 32600 - 11904: 0xD04D, + 32603 - 11904: 0xD360, + 32604 - 11904: 0xD35B, + 32605 - 11904: 0xD35F, + 32606 - 11904: 0xD35D, + 32607 - 11904: 0xAFCB, + 32608 - 11904: 0xD35E, + 32609 - 11904: 0xD35C, + 32611 - 11904: 0xD6F1, + 32613 - 11904: 0xDAFE, + 32614 - 11904: 0xDB40, + 32615 - 11904: 0xDF69, + 32616 - 11904: 0xDF6A, + 32617 - 11904: 0xB86E, + 32618 - 11904: 0xB86F, + 32619 - 11904: 0xDF68, + 32620 - 11904: 0xDF6B, + 32621 - 11904: 0xDF67, + 32622 - 11904: 0xB86D, + 32624 - 11904: 0xBB40, + 32625 - 11904: 0xA0E2, + 32626 - 11904: 0xB870, + 32627 - 11904: 0xE37A, + 32629 - 11904: 0xBD7C, + 32630 - 11904: 0xE6F1, + 32631 - 11904: 0xBD7D, + 32632 - 11904: 0x9FE9, + 32633 - 11904: 0xBFA9, + 32634 - 11904: 0xEAE2, + 32635 - 11904: 0xEAE0, + 32636 - 11904: 0xEAE1, + 32637 - 11904: 0xEDE4, + 32638 - 11904: 0xEDE3, + 32639 - 11904: 0xEDE2, + 32643 - 11904: 0xF2BB, + 32645 - 11904: 0xC3B9, + 32646 - 11904: 0xF2BC, + 32647 - 11904: 0xF744, + 32648 - 11904: 0xC5F9, + 32649 - 11904: 0xF8BA, + 32650 - 11904: 0xA6CF, + 32651 - 11904: 0xAACB, + 32652 - 11904: 0xAACA, + 32653 - 11904: 0xD04F, + 32654 - 11904: 0xACFC, + 32655 - 11904: 0xFDA8, + 32657 - 11904: 0xD04E, + 32658 - 11904: 0xD362, + 32659 - 11904: 0x8AE7, + 32660 - 11904: 0xAFCC, + 32661 - 11904: 0xD6F2, + 32662 - 11904: 0xD361, + 32663 - 11904: 0x8EC2, + 32666 - 11904: 0xB2DC, + 32667 - 11904: 0xD6F5, + 32668 - 11904: 0xD6F3, + 32669 - 11904: 0xD6F4, + 32670 - 11904: 0xB2DB, + 32672 - 11904: 0xDB42, + 32673 - 11904: 0xDB43, + 32674 - 11904: 0xDB41, + 32675 - 11904: 0x8EC4, + 32676 - 11904: 0xB873, + 32677 - 11904: 0xDF6D, + 32678 - 11904: 0xDF6C, + 32679 - 11904: 0xDF6E, + 32680 - 11904: 0xB872, + 32681 - 11904: 0xB871, + 32684 - 11904: 0xE6F2, + 32685 - 11904: 0xE6F4, + 32686 - 11904: 0x9964, + 32687 - 11904: 0xBD7E, + 32688 - 11904: 0xE6F3, + 32689 - 11904: 0xEAE3, + 32690 - 11904: 0xBFAA, + 32691 - 11904: 0xF079, + 32692 - 11904: 0x9965, + 32693 - 11904: 0xF078, + 32694 - 11904: 0xC3BB, + 32695 - 11904: 0xF2BD, + 32696 - 11904: 0xC3BD, + 32697 - 11904: 0xC3BC, + 32698 - 11904: 0xF4B0, + 32699 - 11904: 0xF5EE, + 32700 - 11904: 0xC4F3, + 32701 - 11904: 0xA6D0, + 32702 - 11904: 0xD050, + 32703 - 11904: 0xACFD, + 32704 - 11904: 0xD365, + 32705 - 11904: 0xAFCE, + 32706 - 11904: 0xD364, + 32707 - 11904: 0xD363, + 32709 - 11904: 0xAFCD, + 32711 - 11904: 0xD6FB, + 32713 - 11904: 0xD6FD, + 32714 - 11904: 0xD6F6, + 32715 - 11904: 0xD6F7, + 32716 - 11904: 0xB2DD, + 32717 - 11904: 0xD6F8, + 32718 - 11904: 0xB2DE, + 32719 - 11904: 0xD6FC, + 32720 - 11904: 0xD6F9, + 32721 - 11904: 0xD6FA, + 32722 - 11904: 0xB2DF, + 32724 - 11904: 0xB5BE, + 32725 - 11904: 0xB5BF, + 32727 - 11904: 0xDB44, + 32731 - 11904: 0xDF6F, + 32732 - 11904: 0xDF70, + 32733 - 11904: 0x954E, + 32734 - 11904: 0xE37E, + 32735 - 11904: 0xBB43, + 32736 - 11904: 0xBB41, + 32737 - 11904: 0xBB42, + 32738 - 11904: 0xE37B, + 32739 - 11904: 0xE37C, + 32741 - 11904: 0xE37D, + 32742 - 11904: 0xE6F9, + 32743 - 11904: 0x98B3, + 32744 - 11904: 0xE6FA, + 32745 - 11904: 0xBDA1, + 32746 - 11904: 0xE6F7, + 32747 - 11904: 0xE6F6, + 32748 - 11904: 0xE6F8, + 32749 - 11904: 0xE6F5, + 32750 - 11904: 0xBFAD, + 32751 - 11904: 0xEAE4, + 32752 - 11904: 0xBFAB, + 32753 - 11904: 0xBFAC, + 32754 - 11904: 0xEDE6, + 32755 - 11904: 0xC16B, + 32756 - 11904: 0xEDE5, + 32757 - 11904: 0xEFA8, + 32759 - 11904: 0xF07A, + 32760 - 11904: 0xF07B, + 32761 - 11904: 0xC2BC, + 32762 - 11904: 0x8ECB, + 32763 - 11904: 0xC2BD, + 32764 - 11904: 0xC16C, + 32765 - 11904: 0xF2BE, + 32766 - 11904: 0xF2BF, + 32767 - 11904: 0xF4B1, + 32768 - 11904: 0xC4A3, + 32769 - 11904: 0xA6D1, + 32770 - 11904: 0x8BDF, + 32771 - 11904: 0xA6D2, + 32772 - 11904: 0xACFE, + 32773 - 11904: 0xAACC, + 32774 - 11904: 0xAFCF, + 32775 - 11904: 0xD051, + 32776 - 11904: 0x8ECE, + 32779 - 11904: 0xB5C0, + 32780 - 11904: 0xA6D3, + 32781 - 11904: 0xAD41, + 32782 - 11904: 0xD052, + 32783 - 11904: 0xD053, + 32784 - 11904: 0xAD40, + 32785 - 11904: 0xAD42, + 32786 - 11904: 0xA6D4, + 32788 - 11904: 0xD054, + 32789 - 11904: 0xAFD1, + 32790 - 11904: 0xD366, + 32791 - 11904: 0xAFD3, + 32792 - 11904: 0xAFD0, + 32793 - 11904: 0xAFD2, + 32795 - 11904: 0xD741, + 32796 - 11904: 0xB2E0, + 32797 - 11904: 0x8ECF, + 32798 - 11904: 0xD740, + 32799 - 11904: 0xD6FE, + 32800 - 11904: 0x9968, + 32801 - 11904: 0xDF71, + 32804 - 11904: 0xE3A1, + 32805 - 11904: 0x9969, + 32806 - 11904: 0xBDA2, + 32808 - 11904: 0xBFAE, + 32809 - 11904: 0xEAE6, + 32810 - 11904: 0xEAE5, + 32812 - 11904: 0xEDE7, + 32814 - 11904: 0x996B, + 32815 - 11904: 0x8ED1, + 32816 - 11904: 0xF5EF, + 32817 - 11904: 0x996C, + 32819 - 11904: 0xA6D5, + 32820 - 11904: 0xCB73, + 32821 - 11904: 0xCDAA, + 32822 - 11904: 0xAD43, + 32823 - 11904: 0xD055, + 32825 - 11904: 0xD368, + 32827 - 11904: 0x8ED4, + 32828 - 11904: 0x8ED5, + 32829 - 11904: 0xAFD4, + 32830 - 11904: 0xD367, + 32831 - 11904: 0xAFD5, + 32835 - 11904: 0xD743, + 32838 - 11904: 0xB2E2, + 32839 - 11904: 0xD742, + 32840 - 11904: 0xD744, + 32842 - 11904: 0xB2E1, + 32847 - 11904: 0xDB46, + 32848 - 11904: 0xDB47, + 32849 - 11904: 0xDB45, + 32850 - 11904: 0xB5C1, + 32852 - 11904: 0x996D, + 32854 - 11904: 0xB874, + 32856 - 11904: 0xB875, + 32858 - 11904: 0xBB45, + 32859 - 11904: 0xA0BE, + 32860 - 11904: 0xE3A3, + 32861 - 11904: 0xE3A2, + 32862 - 11904: 0xBB44, + 32865 - 11904: 0x8ED6, + 32866 - 11904: 0xA0BC, + 32867 - 11904: 0xA0B5, + 32868 - 11904: 0xE6FB, + 32870 - 11904: 0xA0B4, + 32871 - 11904: 0xE6FC, + 32876 - 11904: 0xEAE7, + 32879 - 11904: 0xC170, + 32880 - 11904: 0xC16F, + 32881 - 11904: 0xC16D, + 32882 - 11904: 0xC16E, + 32883 - 11904: 0xC171, + 32885 - 11904: 0xF07C, + 32886 - 11904: 0xC2BF, + 32887 - 11904: 0xC2BE, + 32888 - 11904: 0xF2C0, + 32889 - 11904: 0xF4B2, + 32893 - 11904: 0xC5A5, + 32894 - 11904: 0xC5A4, + 32895 - 11904: 0xA6D6, + 32896 - 11904: 0x8BE0, + 32898 - 11904: 0xD1FB, + 32900 - 11904: 0xB877, + 32901 - 11904: 0xB5C2, + 32902 - 11904: 0xB876, + 32903 - 11904: 0xBB46, + 32905 - 11904: 0xA6D7, + 32906 - 11904: 0xC9A9, + 32907 - 11904: 0xA6D8, + 32908 - 11904: 0xA6D9, + 32911 - 11904: 0xCDAB, + 32912 - 11904: 0xCB76, + 32914 - 11904: 0xCB77, + 32915 - 11904: 0xA877, + 32917 - 11904: 0xCB74, + 32918 - 11904: 0xA876, + 32920 - 11904: 0xA879, + 32921 - 11904: 0xCB75, + 32922 - 11904: 0xA87B, + 32923 - 11904: 0xA87A, + 32924 - 11904: 0xCB78, + 32925 - 11904: 0xA878, + 32927 - 11904: 0x89B5, + 32929 - 11904: 0xAAD1, + 32930 - 11904: 0xAACF, + 32931 - 11904: 0xCDAD, + 32933 - 11904: 0xAACE, + 32935 - 11904: 0x8EDD, + 32937 - 11904: 0xAAD3, + 32938 - 11904: 0xAAD5, + 32939 - 11904: 0xAAD2, + 32941 - 11904: 0xCDB0, + 32942 - 11904: 0xCDAC, + 32943 - 11904: 0xAAD6, + 32945 - 11904: 0xAAD0, + 32946 - 11904: 0xA87C, + 32948 - 11904: 0xAAD4, + 32949 - 11904: 0xCDAF, + 32950 - 11904: 0x9E5D, + 32951 - 11904: 0x9971, + 32952 - 11904: 0xCDAE, + 32954 - 11904: 0xAACD, + 32956 - 11904: 0x89AE, + 32957 - 11904: 0x9DE8, + 32962 - 11904: 0xD05B, + 32963 - 11904: 0xAD47, + 32964 - 11904: 0xAD48, + 32965 - 11904: 0xD05D, + 32966 - 11904: 0x9565, + 32967 - 11904: 0xD057, + 32968 - 11904: 0xD05A, + 32969 - 11904: 0xD063, + 32970 - 11904: 0xD061, + 32972 - 11904: 0xAD49, + 32973 - 11904: 0xD067, + 32974 - 11904: 0xAD4C, + 32975 - 11904: 0xD064, + 32976 - 11904: 0xD05C, + 32977 - 11904: 0xD059, + 32980 - 11904: 0xDB49, + 32981 - 11904: 0xD062, + 32982 - 11904: 0xAD44, + 32983 - 11904: 0xD065, + 32984 - 11904: 0xD056, + 32985 - 11904: 0xD05F, + 32986 - 11904: 0xAD46, + 32987 - 11904: 0xAD4B, + 32988 - 11904: 0xD060, + 32989 - 11904: 0xAD4F, + 32990 - 11904: 0xAD4D, + 32992 - 11904: 0xD058, + 32993 - 11904: 0xAD4A, + 32995 - 11904: 0xD05E, + 32996 - 11904: 0xAD4E, + 32997 - 11904: 0xAD45, + 32998 - 11904: 0xD066, + 33001 - 11904: 0x9972, + 33004 - 11904: 0x8B5C, + 33005 - 11904: 0xAFDA, + 33007 - 11904: 0xAFE3, + 33008 - 11904: 0xAFD8, + 33009 - 11904: 0xAFD6, + 33010 - 11904: 0xD36A, + 33011 - 11904: 0xAFDE, + 33012 - 11904: 0xAFDB, + 33013 - 11904: 0xD36C, + 33014 - 11904: 0x89B1, + 33016 - 11904: 0xAFDD, + 33017 - 11904: 0xD36B, + 33018 - 11904: 0xD369, + 33019 - 11904: 0xD36E, + 33020 - 11904: 0xAFE2, + 33021 - 11904: 0xAFE0, + 33022 - 11904: 0xDB48, + 33024 - 11904: 0xD36F, + 33025 - 11904: 0xD36D, + 33026 - 11904: 0xAFD7, + 33027 - 11904: 0xA0C0, + 33029 - 11904: 0xAFD9, + 33030 - 11904: 0xAFDC, + 33031 - 11904: 0x8EDF, + 33032 - 11904: 0xAFDF, + 33033 - 11904: 0x9566, + 33034 - 11904: 0xAFE1, + 33036 - 11904: 0x9974, + 33038 - 11904: 0x9976, + 33042 - 11904: 0x9977, + 33044 - 11904: 0x9979, + 33045 - 11904: 0xD74E, + 33046 - 11904: 0xB2E4, + 33047 - 11904: 0x9DDA, + 33048 - 11904: 0xD745, + 33049 - 11904: 0xD747, + 33050 - 11904: 0x8EE0, + 33051 - 11904: 0xD748, + 33053 - 11904: 0xD750, + 33054 - 11904: 0xD74C, + 33055 - 11904: 0xD74A, + 33057 - 11904: 0xD74D, + 33058 - 11904: 0xD751, + 33059 - 11904: 0xB2E5, + 33060 - 11904: 0xB2E9, + 33061 - 11904: 0xD746, + 33063 - 11904: 0xD74F, + 33065 - 11904: 0xB2E7, + 33066 - 11904: 0x935C, + 33067 - 11904: 0xB2E6, + 33068 - 11904: 0xD74B, + 33069 - 11904: 0xD749, + 33071 - 11904: 0xB2E3, + 33072 - 11904: 0xB2E8, + 33074 - 11904: 0x9DE6, + 33076 - 11904: 0x8B5F, + 33079 - 11904: 0x9563, + 33081 - 11904: 0xB5C8, + 33082 - 11904: 0xDB51, + 33085 - 11904: 0xDB4F, + 33086 - 11904: 0xB5CA, + 33090 - 11904: 0x9567, + 33091 - 11904: 0xDB4A, + 33092 - 11904: 0xDFA1, + 33094 - 11904: 0xB5C9, + 33095 - 11904: 0xDB4E, + 33096 - 11904: 0x9DE3, + 33098 - 11904: 0xDB4B, + 33099 - 11904: 0xB5C5, + 33100 - 11904: 0xB5CB, + 33101 - 11904: 0xDB50, + 33102 - 11904: 0xB5C7, + 33103 - 11904: 0xDB4D, + 33104 - 11904: 0xBB47, + 33105 - 11904: 0xB5C6, + 33106 - 11904: 0xDB4C, + 33107 - 11904: 0xB5CC, + 33108 - 11904: 0xB5C4, + 33109 - 11904: 0xB5C3, + 33110 - 11904: 0x997C, + 33113 - 11904: 0x997D, + 33114 - 11904: 0x997E, + 33115 - 11904: 0xDF77, + 33116 - 11904: 0xDF75, + 33118 - 11904: 0xDF7B, + 33120 - 11904: 0xDF73, + 33121 - 11904: 0xDFA2, + 33122 - 11904: 0xDF78, + 33124 - 11904: 0xDF72, + 33125 - 11904: 0xB87B, + 33126 - 11904: 0xB8A3, + 33127 - 11904: 0xDF7D, + 33129 - 11904: 0xDF76, + 33131 - 11904: 0xB87E, + 33132 - 11904: 0x8CFB, + 33133 - 11904: 0x8B5B, + 33134 - 11904: 0xB87C, + 33135 - 11904: 0xDF7E, + 33136 - 11904: 0xB879, + 33137 - 11904: 0xB878, + 33138 - 11904: 0xDF79, + 33139 - 11904: 0xB87D, + 33140 - 11904: 0xB5CD, + 33142 - 11904: 0xDF7C, + 33143 - 11904: 0xDF74, + 33144 - 11904: 0xB87A, + 33145 - 11904: 0xB8A1, + 33146 - 11904: 0xB8A2, + 33148 - 11904: 0x99A3, + 33151 - 11904: 0xBB4C, + 33152 - 11904: 0xBB48, + 33154 - 11904: 0xBB4D, + 33155 - 11904: 0xE3A6, + 33156 - 11904: 0x99A4, + 33158 - 11904: 0xE3A5, + 33159 - 11904: 0xE3A7, + 33160 - 11904: 0xBB4A, + 33161 - 11904: 0xE3A4, + 33162 - 11904: 0xBB4B, + 33163 - 11904: 0xE3AA, + 33164 - 11904: 0xE3A9, + 33165 - 11904: 0xE3A8, + 33167 - 11904: 0xBB49, + 33171 - 11904: 0x99A6, + 33173 - 11904: 0xE741, + 33175 - 11904: 0xE744, + 33176 - 11904: 0xBDA8, + 33177 - 11904: 0xE743, + 33178 - 11904: 0xBDA7, + 33179 - 11904: 0xBDA3, + 33180 - 11904: 0xBDA4, + 33181 - 11904: 0xBDA5, + 33182 - 11904: 0xE740, + 33183 - 11904: 0xE6FE, + 33184 - 11904: 0xBDA6, + 33186 - 11904: 0xE742, + 33187 - 11904: 0xE6FD, + 33189 - 11904: 0x99A8, + 33190 - 11904: 0xEAE9, + 33191 - 11904: 0xEAF3, + 33192 - 11904: 0xBFB1, + 33193 - 11904: 0xBFB0, + 33194 - 11904: 0x8ABE, + 33195 - 11904: 0xEAED, + 33196 - 11904: 0xEAEF, + 33198 - 11904: 0xEAEA, + 33200 - 11904: 0xEAEE, + 33201 - 11904: 0xEAE8, + 33202 - 11904: 0xEAF1, + 33203 - 11904: 0xBFAF, + 33204 - 11904: 0xEAF0, + 33205 - 11904: 0xEAEC, + 33206 - 11904: 0x9E61, + 33207 - 11904: 0xEAF2, + 33209 - 11904: 0xEAEB, + 33210 - 11904: 0xC174, + 33211 - 11904: 0xEDE8, + 33212 - 11904: 0xEDEE, + 33213 - 11904: 0xC178, + 33214 - 11904: 0xC17A, + 33215 - 11904: 0xC177, + 33216 - 11904: 0xC176, + 33217 - 11904: 0x99AA, + 33218 - 11904: 0xC175, + 33219 - 11904: 0xC173, + 33220 - 11904: 0xEDE9, + 33221 - 11904: 0xEDEC, + 33222 - 11904: 0xC172, + 33223 - 11904: 0xEDED, + 33224 - 11904: 0xA0C8, + 33225 - 11904: 0xC179, + 33226 - 11904: 0xEDEB, + 33228 - 11904: 0xEDEA, + 33229 - 11904: 0xC2C0, + 33231 - 11904: 0xC2C1, + 33232 - 11904: 0xF0A1, + 33233 - 11904: 0xF07D, + 33234 - 11904: 0xF07E, + 33237 - 11904: 0xF2C2, + 33239 - 11904: 0xF2C1, + 33240 - 11904: 0xC3BE, + 33241 - 11904: 0xF4B4, + 33242 - 11904: 0xC4A4, + 33243 - 11904: 0xF4B3, + 33245 - 11904: 0xF5F0, + 33246 - 11904: 0xF745, + 33247 - 11904: 0xC5A6, + 33248 - 11904: 0xF943, + 33249 - 11904: 0xF944, + 33250 - 11904: 0xC5D8, + 33251 - 11904: 0xA6DA, + 33252 - 11904: 0x99AB, + 33253 - 11904: 0xAAD7, + 33254 - 11904: 0xDB52, + 33255 - 11904: 0xBB4E, + 33256 - 11904: 0xC17B, + 33257 - 11904: 0xEDEF, + 33258 - 11904: 0xA6DB, + 33260 - 11904: 0xAFE5, + 33261 - 11904: 0xAFE4, + 33262 - 11904: 0xDB53, + 33263 - 11904: 0xFEC4, + 33266 - 11904: 0xEAF4, + 33267 - 11904: 0xA6DC, + 33268 - 11904: 0xAD50, + 33270 - 11904: 0x98C2, + 33271 - 11904: 0xDB54, + 33272 - 11904: 0xDB55, + 33273 - 11904: 0xDB56, + 33274 - 11904: 0xBB4F, + 33275 - 11904: 0xBFB2, + 33276 - 11904: 0xA6DD, + 33278 - 11904: 0xAAD8, + 33279 - 11904: 0xD068, + 33280 - 11904: 0xAFE6, + 33281 - 11904: 0xD370, + 33282 - 11904: 0xB2EA, + 33284 - 11904: 0xDB57, + 33285 - 11904: 0xB8A4, + 33287 - 11904: 0xBB50, + 33288 - 11904: 0xBFB3, + 33289 - 11904: 0xC17C, + 33290 - 11904: 0xC2C2, + 33291 - 11904: 0xF4B5, + 33292 - 11904: 0xA6DE, + 33293 - 11904: 0xAAD9, + 33296 - 11904: 0xAFE7, + 33297 - 11904: 0xD752, + 33298 - 11904: 0xB5CE, + 33300 - 11904: 0xBB51, + 33301 - 11904: 0xE3AB, + 33302 - 11904: 0xE745, + 33304 - 11904: 0x8EE8, + 33306 - 11904: 0xA0BA, + 33307 - 11904: 0xA6DF, + 33308 - 11904: 0xB5CF, + 33309 - 11904: 0xDFA3, + 33310 - 11904: 0xBB52, + 33311 - 11904: 0xA6E0, + 33312 - 11904: 0xCDB1, + 33313 - 11904: 0xD069, + 33314 - 11904: 0xAD51, + 33317 - 11904: 0xD372, + 33318 - 11904: 0xFD77, + 33320 - 11904: 0xAFEA, + 33321 - 11904: 0x8EEE, + 33322 - 11904: 0xAFE8, + 33323 - 11904: 0xAFE9, + 33324 - 11904: 0xAFEB, + 33325 - 11904: 0x9EBF, + 33327 - 11904: 0xD371, + 33330 - 11904: 0xD757, + 33331 - 11904: 0xD754, + 33332 - 11904: 0xD756, + 33333 - 11904: 0xB2EB, + 33334 - 11904: 0xB2ED, + 33335 - 11904: 0xB2EC, + 33336 - 11904: 0xD753, + 33337 - 11904: 0xB2EE, + 33338 - 11904: 0xD755, + 33340 - 11904: 0xDB58, + 33341 - 11904: 0xDB59, + 33342 - 11904: 0x89C2, + 33343 - 11904: 0xDB5A, + 33344 - 11904: 0xDFA6, + 33346 - 11904: 0xDFA7, + 33348 - 11904: 0xDFA5, + 33349 - 11904: 0xDFA8, + 33351 - 11904: 0xB8A5, + 33353 - 11904: 0xDFA4, + 33355 - 11904: 0xBB53, + 33358 - 11904: 0xE74A, + 33359 - 11904: 0xE746, + 33360 - 11904: 0xE749, + 33361 - 11904: 0xE74B, + 33362 - 11904: 0xE748, + 33363 - 11904: 0xE747, + 33364 - 11904: 0x99AC, + 33365 - 11904: 0xEAF5, + 33366 - 11904: 0xEAF6, + 33367 - 11904: 0xEAF7, + 33368 - 11904: 0xBFB4, + 33369 - 11904: 0xBFB5, + 33370 - 11904: 0xEDF1, + 33371 - 11904: 0xEDF0, + 33372 - 11904: 0xEDF2, + 33374 - 11904: 0xF0A3, + 33375 - 11904: 0xF0A2, + 33377 - 11904: 0xF2C4, + 33378 - 11904: 0x956B, + 33379 - 11904: 0xF2C5, + 33380 - 11904: 0xF2C3, + 33381 - 11904: 0x956C, + 33382 - 11904: 0xC4A5, + 33384 - 11904: 0xF4B6, + 33385 - 11904: 0xF4B7, + 33387 - 11904: 0xF746, + 33388 - 11904: 0xF7EF, + 33389 - 11904: 0xF8BB, + 33390 - 11904: 0xA6E1, + 33391 - 11904: 0xA87D, + 33393 - 11904: 0xC17D, + 33394 - 11904: 0xA6E2, + 33396 - 11904: 0xD758, + 33397 - 11904: 0xDB5B, + 33398 - 11904: 0x99AF, + 33399 - 11904: 0xC641, + 33400 - 11904: 0xCA4A, + 33401 - 11904: 0x994A, + 33402 - 11904: 0x8976, + 33403 - 11904: 0x8F48, + 33404 - 11904: 0xCA4B, + 33405 - 11904: 0xCA4D, + 33406 - 11904: 0xA6E3, + 33407 - 11904: 0xCA4E, + 33408 - 11904: 0xCA4C, + 33411 - 11904: 0xCBA2, + 33412 - 11904: 0xCBA3, + 33413 - 11904: 0xCB7B, + 33415 - 11904: 0xFBEE, + 33418 - 11904: 0xCBA1, + 33419 - 11904: 0xA8A1, + 33421 - 11904: 0xA8A2, + 33422 - 11904: 0xCB7C, + 33423 - 11904: 0xCB7A, + 33424 - 11904: 0xCB79, + 33425 - 11904: 0xCB7D, + 33426 - 11904: 0xA87E, + 33427 - 11904: 0xCB7E, + 33428 - 11904: 0xD06A, + 33432 - 11904: 0xCDB6, + 33433 - 11904: 0xAADC, + 33434 - 11904: 0xCDB5, + 33435 - 11904: 0xCDB7, + 33437 - 11904: 0xAADB, + 33438 - 11904: 0xCDBC, + 33439 - 11904: 0xAADF, + 33440 - 11904: 0xCDB2, + 33441 - 11904: 0xCDC0, + 33442 - 11904: 0xCDC6, + 33443 - 11904: 0xAAE6, + 33444 - 11904: 0xCDC3, + 33445 - 11904: 0xAAE3, + 33446 - 11904: 0x99AE, + 33447 - 11904: 0xCDB9, + 33448 - 11904: 0xCDBF, + 33449 - 11904: 0xCDC1, + 33450 - 11904: 0x8EFB, + 33451 - 11904: 0xCDB4, + 33452 - 11904: 0xAAE2, + 33453 - 11904: 0xAADD, + 33454 - 11904: 0xCDBA, + 33455 - 11904: 0xAAE4, + 33456 - 11904: 0xAAE7, + 33457 - 11904: 0xAAE1, + 33459 - 11904: 0xAADA, + 33460 - 11904: 0xCDBE, + 33461 - 11904: 0xCDB8, + 33462 - 11904: 0xCDC5, + 33463 - 11904: 0xAAE9, + 33464 - 11904: 0xAAE5, + 33465 - 11904: 0xAAE0, + 33466 - 11904: 0xCDBD, + 33467 - 11904: 0xAFEC, + 33468 - 11904: 0xCDBB, + 33469 - 11904: 0xAADE, + 33470 - 11904: 0xAAE8, + 33471 - 11904: 0x8CD0, + 33472 - 11904: 0xCDB3, + 33474 - 11904: 0xCDC2, + 33475 - 11904: 0xCDC4, + 33476 - 11904: 0x8B52, + 33482 - 11904: 0x99B0, + 33487 - 11904: 0x8977, + 33488 - 11904: 0x8F41, + 33489 - 11904: 0xAD62, + 33490 - 11904: 0xAD5C, + 33491 - 11904: 0xAD64, + 33492 - 11904: 0xAD61, + 33493 - 11904: 0xD071, + 33494 - 11904: 0xD074, + 33495 - 11904: 0xAD5D, + 33496 - 11904: 0x99B1, + 33497 - 11904: 0xD06B, + 33499 - 11904: 0xAD56, + 33500 - 11904: 0xAD60, + 33502 - 11904: 0xAD63, + 33503 - 11904: 0xAD65, + 33504 - 11904: 0xD0A2, + 33505 - 11904: 0xD077, + 33506 - 11904: 0x8F49, + 33507 - 11904: 0xAD55, + 33508 - 11904: 0xD0A1, + 33509 - 11904: 0xAD59, + 33510 - 11904: 0xAD57, + 33511 - 11904: 0xAD52, + 33512 - 11904: 0xD06F, + 33514 - 11904: 0xD07E, + 33515 - 11904: 0xD073, + 33516 - 11904: 0xD076, + 33517 - 11904: 0xD0A5, + 33518 - 11904: 0xFA4D, + 33519 - 11904: 0xAD66, + 33520 - 11904: 0xD07D, + 33521 - 11904: 0xAD5E, + 33522 - 11904: 0xD078, + 33523 - 11904: 0xD0A4, + 33524 - 11904: 0xD075, + 33525 - 11904: 0xD079, + 33526 - 11904: 0xD07C, + 33527 - 11904: 0x9DE4, + 33528 - 11904: 0x8CB5, + 33529 - 11904: 0xD06D, + 33530 - 11904: 0xD0A3, + 33531 - 11904: 0xD07B, + 33532 - 11904: 0xFBE9, + 33533 - 11904: 0x9B54, + 33534 - 11904: 0xD06C, + 33535 - 11904: 0x99B2, + 33536 - 11904: 0xD070, + 33537 - 11904: 0xAD5F, + 33538 - 11904: 0xAD5A, + 33539 - 11904: 0xAD53, + 33540 - 11904: 0xAD58, + 33541 - 11904: 0xAD54, + 33542 - 11904: 0xAD67, + 33543 - 11904: 0xD06E, + 33544 - 11904: 0xD3A5, + 33545 - 11904: 0xAD5B, + 33547 - 11904: 0x9E68, + 33548 - 11904: 0xD07A, + 33549 - 11904: 0xCE41, + 33558 - 11904: 0xD3A8, + 33559 - 11904: 0xAFFA, + 33560 - 11904: 0x8F4A, + 33561 - 11904: 0xD376, + 33562 - 11904: 0x8F42, + 33563 - 11904: 0xD3A3, + 33564 - 11904: 0xD37D, + 33565 - 11904: 0x8F51, + 33566 - 11904: 0xD3B2, + 33568 - 11904: 0xD3AA, + 33570 - 11904: 0xD37E, + 33572 - 11904: 0xD3A9, + 33573 - 11904: 0xD378, + 33574 - 11904: 0xD37C, + 33575 - 11904: 0xD3B5, + 33576 - 11904: 0xAFFD, + 33577 - 11904: 0xD3AD, + 33578 - 11904: 0xD3A4, + 33579 - 11904: 0xAFED, + 33580 - 11904: 0xD3B3, + 33581 - 11904: 0xD374, + 33583 - 11904: 0xD3AC, + 33585 - 11904: 0xAFFC, + 33586 - 11904: 0xAFF7, + 33587 - 11904: 0xD373, + 33588 - 11904: 0xAFF5, + 33589 - 11904: 0xAFF4, + 33590 - 11904: 0xAFF9, + 33591 - 11904: 0xD3AB, + 33592 - 11904: 0xAFF1, + 33593 - 11904: 0xAFF8, + 33594 - 11904: 0xD072, + 33595 - 11904: 0xDB5C, + 33596 - 11904: 0xD3A6, + 33597 - 11904: 0x9846, + 33599 - 11904: 0xD37A, + 33600 - 11904: 0xAFFB, + 33601 - 11904: 0xD37B, + 33602 - 11904: 0xD3A1, + 33603 - 11904: 0xAFFE, + 33604 - 11904: 0xD375, + 33605 - 11904: 0xD3AF, + 33607 - 11904: 0xD3AE, + 33608 - 11904: 0xD3B6, + 33609 - 11904: 0xAFF3, + 33610 - 11904: 0xAFF0, + 33611 - 11904: 0xD3B4, + 33612 - 11904: 0xD3B0, + 33613 - 11904: 0xD3A7, + 33614 - 11904: 0xD3A2, + 33615 - 11904: 0xAFF6, + 33616 - 11904: 0xAFF2, + 33617 - 11904: 0xD377, + 33618 - 11904: 0xAFEE, + 33619 - 11904: 0xD3B1, + 33620 - 11904: 0xAFEF, + 33622 - 11904: 0xD379, + 33623 - 11904: 0x99B4, + 33634 - 11904: 0x8EF5, + 33635 - 11904: 0xFD55, + 33638 - 11904: 0x9CCD, + 33647 - 11904: 0x8978, + 33651 - 11904: 0xD75E, + 33652 - 11904: 0xD760, + 33653 - 11904: 0xD765, + 33654 - 11904: 0xD779, + 33655 - 11904: 0xB2FC, + 33656 - 11904: 0xB2F2, + 33658 - 11904: 0xD75D, + 33659 - 11904: 0xB2FD, + 33660 - 11904: 0xB2FE, + 33661 - 11904: 0xD768, + 33662 - 11904: 0xD76F, + 33663 - 11904: 0xD775, + 33665 - 11904: 0xD762, + 33667 - 11904: 0xD769, + 33669 - 11904: 0x8F53, + 33670 - 11904: 0xB340, + 33671 - 11904: 0xD777, + 33672 - 11904: 0xD772, + 33673 - 11904: 0xB2FA, + 33674 - 11904: 0xB2F8, + 33675 - 11904: 0xD76E, + 33676 - 11904: 0xD76A, + 33677 - 11904: 0xD75C, + 33678 - 11904: 0xB2EF, + 33679 - 11904: 0xD761, + 33680 - 11904: 0xD759, + 33681 - 11904: 0x8F6F, + 33682 - 11904: 0xB2F7, + 33683 - 11904: 0xB2F9, + 33684 - 11904: 0xD766, + 33685 - 11904: 0xD763, + 33686 - 11904: 0xB2F4, + 33687 - 11904: 0xD773, + 33688 - 11904: 0xB2F1, + 33689 - 11904: 0xD764, + 33690 - 11904: 0xD77A, + 33691 - 11904: 0xD76C, + 33692 - 11904: 0x8E63, + 33693 - 11904: 0xD76B, + 33694 - 11904: 0xB2F0, + 33696 - 11904: 0xB2FB, + 33698 - 11904: 0xB2F3, + 33699 - 11904: 0xD75A, + 33700 - 11904: 0xD75F, + 33701 - 11904: 0xD770, + 33702 - 11904: 0xD776, + 33703 - 11904: 0xB341, + 33704 - 11904: 0xD75B, + 33705 - 11904: 0xD767, + 33706 - 11904: 0xD76D, + 33707 - 11904: 0xB2F6, + 33708 - 11904: 0x8F56, + 33710 - 11904: 0xD778, + 33711 - 11904: 0xD771, + 33712 - 11904: 0xD774, + 33721 - 11904: 0xFE76, + 33725 - 11904: 0xB2F5, + 33726 - 11904: 0x9FC6, + 33727 - 11904: 0xDB6C, + 33728 - 11904: 0xDB60, + 33729 - 11904: 0xB5D7, + 33730 - 11904: 0xDB7D, + 33731 - 11904: 0xDBA7, + 33732 - 11904: 0xDBAA, + 33733 - 11904: 0xB5D5, + 33734 - 11904: 0xDB68, + 33735 - 11904: 0xDBA3, + 33736 - 11904: 0xDB69, + 33737 - 11904: 0xDB77, + 33738 - 11904: 0xB5E2, + 33739 - 11904: 0xDB73, + 33740 - 11904: 0xB5DF, + 33741 - 11904: 0xFAAC, + 33742 - 11904: 0xDB74, + 33743 - 11904: 0xDB5D, + 33745 - 11904: 0xDBA4, + 33747 - 11904: 0x8F58, + 33748 - 11904: 0xB5E8, + 33749 - 11904: 0xDBA1, + 33750 - 11904: 0xDB75, + 33751 - 11904: 0xDBAC, + 33752 - 11904: 0xDB70, + 33753 - 11904: 0xDFC8, + 33755 - 11904: 0xDBAF, + 33756 - 11904: 0xB5E6, + 33757 - 11904: 0xDB6E, + 33758 - 11904: 0xDB7A, + 33759 - 11904: 0xB5E9, + 33760 - 11904: 0xB5D4, + 33761 - 11904: 0xDB72, + 33762 - 11904: 0xDBAD, + 33763 - 11904: 0xDB6B, + 33764 - 11904: 0xDB64, + 33765 - 11904: 0xDB6F, + 33767 - 11904: 0xDB63, + 33768 - 11904: 0xDB61, + 33769 - 11904: 0xB5D0, + 33770 - 11904: 0xDBA5, + 33771 - 11904: 0xDB6A, + 33772 - 11904: 0xDBA8, + 33773 - 11904: 0x9848, + 33774 - 11904: 0xDBA9, + 33775 - 11904: 0xB5D8, + 33776 - 11904: 0xB5DD, + 33777 - 11904: 0xB5D9, + 33778 - 11904: 0xB5E1, + 33779 - 11904: 0xDB7E, + 33780 - 11904: 0xB5DA, + 33781 - 11904: 0xDB76, + 33782 - 11904: 0xDB66, + 33784 - 11904: 0xB5D2, + 33785 - 11904: 0xDB5E, + 33786 - 11904: 0xDBA2, + 33787 - 11904: 0xDBAB, + 33788 - 11904: 0xDB65, + 33789 - 11904: 0xB5E0, + 33790 - 11904: 0xDBB0, + 33791 - 11904: 0xDB71, + 33793 - 11904: 0xDB6D, + 33795 - 11904: 0xB5D1, + 33796 - 11904: 0xB5E5, + 33797 - 11904: 0x99B7, + 33798 - 11904: 0xDB7C, + 33799 - 11904: 0xB5E7, + 33801 - 11904: 0xDB78, + 33802 - 11904: 0xB5DC, + 33803 - 11904: 0xB5D6, + 33804 - 11904: 0xB5DE, + 33805 - 11904: 0xB5D3, + 33806 - 11904: 0xB5E4, + 33807 - 11904: 0xDB79, + 33808 - 11904: 0xDB67, + 33809 - 11904: 0xDB7B, + 33810 - 11904: 0xDB62, + 33811 - 11904: 0xDBA6, + 33812 - 11904: 0x9665, + 33814 - 11904: 0xFA6C, + 33816 - 11904: 0x9DE7, + 33819 - 11904: 0xDBAE, + 33820 - 11904: 0x9E62, + 33824 - 11904: 0x96CC, + 33825 - 11904: 0x8E67, + 33827 - 11904: 0xDB5F, + 33828 - 11904: 0xFC75, + 33830 - 11904: 0x987E, + 33833 - 11904: 0xDFC7, + 33835 - 11904: 0xDFDD, + 33836 - 11904: 0xB855, + 33837 - 11904: 0xDFCC, + 33838 - 11904: 0xFDB9, + 33839 - 11904: 0xDFCA, + 33840 - 11904: 0xDFB5, + 33841 - 11904: 0xB8A9, + 33842 - 11904: 0xDFC5, + 33843 - 11904: 0xDFD9, + 33844 - 11904: 0xDFC1, + 33845 - 11904: 0xB8B1, + 33846 - 11904: 0xDFD8, + 33847 - 11904: 0xDFBF, + 33848 - 11904: 0xB5E3, + 33849 - 11904: 0xDFCF, + 33850 - 11904: 0xDFC0, + 33851 - 11904: 0xDFD6, + 33852 - 11904: 0xB8B0, + 33853 - 11904: 0xB8A8, + 33854 - 11904: 0x97FC, + 33855 - 11904: 0xDFAA, + 33856 - 11904: 0xDFB2, + 33858 - 11904: 0xDFCB, + 33859 - 11904: 0xDFC3, + 33860 - 11904: 0xDFDC, + 33861 - 11904: 0xDFC6, + 33862 - 11904: 0xB8B6, + 33863 - 11904: 0xDFD7, + 33864 - 11904: 0x98F9, + 33865 - 11904: 0xB8AD, + 33866 - 11904: 0x8F66, + 33867 - 11904: 0xDFC9, + 33868 - 11904: 0xDFD1, + 33869 - 11904: 0xDFB6, + 33870 - 11904: 0xDFD0, + 33872 - 11904: 0xDFE1, + 33873 - 11904: 0xDFB1, + 33874 - 11904: 0xDFD2, + 33875 - 11904: 0x956E, + 33876 - 11904: 0xDFDF, + 33877 - 11904: 0x9245, + 33878 - 11904: 0xDFAB, + 33879 - 11904: 0xB5DB, + 33880 - 11904: 0x8F60, + 33881 - 11904: 0xDFB9, + 33882 - 11904: 0xDFB8, + 33883 - 11904: 0xB8AF, + 33884 - 11904: 0x9ED1, + 33885 - 11904: 0xDFBC, + 33886 - 11904: 0xDFBE, + 33887 - 11904: 0xDFCD, + 33888 - 11904: 0xDFDE, + 33889 - 11904: 0xB8B2, + 33890 - 11904: 0xFECD, + 33891 - 11904: 0xB8B3, + 33892 - 11904: 0x99B9, + 33893 - 11904: 0xDFB0, + 33894 - 11904: 0xB8AB, + 33895 - 11904: 0xDFB4, + 33896 - 11904: 0xDFDA, + 33897 - 11904: 0xB8B4, + 33899 - 11904: 0xB8AC, + 33900 - 11904: 0xB8AE, + 33901 - 11904: 0xB8B5, + 33902 - 11904: 0xDFE0, + 33903 - 11904: 0xDFD3, + 33904 - 11904: 0xDFCE, + 33905 - 11904: 0x8F62, + 33906 - 11904: 0x974C, + 33907 - 11904: 0xDFBB, + 33908 - 11904: 0xDFBA, + 33909 - 11904: 0xB8AA, + 33910 - 11904: 0xDFAC, + 33911 - 11904: 0xB8A7, + 33912 - 11904: 0xDFC4, + 33913 - 11904: 0xDFAD, + 33914 - 11904: 0xDFC2, + 33917 - 11904: 0xDFB7, + 33918 - 11904: 0xDFDB, + 33919 - 11904: 0x91C7, + 33920 - 11904: 0x955F, + 33922 - 11904: 0xB8A6, + 33924 - 11904: 0x87AB, + 33926 - 11904: 0xDFB3, + 33928 - 11904: 0x99BB, + 33933 - 11904: 0xDFAF, + 33934 - 11904: 0xDFD5, + 33935 - 11904: 0xDFAE, + 33936 - 11904: 0xBB60, + 33937 - 11904: 0xE3D3, + 33938 - 11904: 0x8E6D, + 33939 - 11904: 0x8F71, + 33940 - 11904: 0xE3C2, + 33942 - 11904: 0x94CB, + 33943 - 11904: 0xE3AC, + 33944 - 11904: 0xE3CA, + 33945 - 11904: 0xBB58, + 33946 - 11904: 0xE3BB, + 33947 - 11904: 0xE3C5, + 33948 - 11904: 0xBB5B, + 33949 - 11904: 0xE3BE, + 33950 - 11904: 0xBB59, + 33951 - 11904: 0xE3AF, + 33952 - 11904: 0xE3CD, + 33953 - 11904: 0xE3AE, + 33954 - 11904: 0xE3C1, + 33955 - 11904: 0x95B1, + 33956 - 11904: 0xE3AD, + 33959 - 11904: 0xE3BF, + 33960 - 11904: 0xE3C8, + 33961 - 11904: 0xE3C6, + 33962 - 11904: 0xE3BA, + 33963 - 11904: 0xE3B5, + 33964 - 11904: 0xE3B3, + 33965 - 11904: 0x9AF2, + 33966 - 11904: 0xE3B4, + 33967 - 11904: 0xE3C7, + 33968 - 11904: 0xE3D2, + 33969 - 11904: 0xE3BC, + 33970 - 11904: 0xBB5A, + 33972 - 11904: 0xE3B7, + 33974 - 11904: 0xE3CB, + 33976 - 11904: 0xBB5D, + 33977 - 11904: 0xE3B6, + 33978 - 11904: 0xE3B0, + 33979 - 11904: 0xE3C0, + 33980 - 11904: 0xBB61, + 33981 - 11904: 0x96C3, + 33982 - 11904: 0x99BD, + 33983 - 11904: 0xBB55, + 33984 - 11904: 0xBB5E, + 33985 - 11904: 0xE3B8, + 33986 - 11904: 0xE3B2, + 33988 - 11904: 0xBB57, + 33989 - 11904: 0xDFD4, + 33990 - 11904: 0xBB56, + 33991 - 11904: 0xE3C3, + 33993 - 11904: 0xBB54, + 33994 - 11904: 0xBB63, + 33995 - 11904: 0xBB5C, + 33996 - 11904: 0xE3C4, + 33997 - 11904: 0xE3B9, + 33998 - 11904: 0xE3B1, + 33999 - 11904: 0xE3CC, + 34000 - 11904: 0xE3BD, + 34001 - 11904: 0xBB62, + 34002 - 11904: 0xE3D0, + 34003 - 11904: 0xBB5F, + 34004 - 11904: 0xE3CF, + 34006 - 11904: 0xE3C9, + 34007 - 11904: 0xE3CE, + 34010 - 11904: 0xA0CF, + 34011 - 11904: 0xE3D1, + 34014 - 11904: 0x8F6D, + 34017 - 11904: 0x99BE, + 34018 - 11904: 0x8EF4, + 34020 - 11904: 0x8F72, + 34021 - 11904: 0x95E4, + 34023 - 11904: 0xE773, + 34024 - 11904: 0xE774, + 34025 - 11904: 0xE767, + 34026 - 11904: 0xE766, + 34027 - 11904: 0xE762, + 34028 - 11904: 0xBDB4, + 34030 - 11904: 0xBDAC, + 34031 - 11904: 0xE776, + 34032 - 11904: 0xE775, + 34033 - 11904: 0xDFA9, + 34034 - 11904: 0xE75F, + 34035 - 11904: 0xE763, + 34036 - 11904: 0xE75D, + 34038 - 11904: 0xE770, + 34039 - 11904: 0xE761, + 34040 - 11904: 0x99BF, + 34041 - 11904: 0xE777, + 34042 - 11904: 0xE75A, + 34043 - 11904: 0xE758, + 34044 - 11904: 0xE764, + 34045 - 11904: 0xE76E, + 34046 - 11904: 0xE769, + 34047 - 11904: 0xBDB6, + 34048 - 11904: 0xE74F, + 34050 - 11904: 0xE76D, + 34051 - 11904: 0x9244, + 34052 - 11904: 0x87D7, + 34053 - 11904: 0xFBA5, + 34054 - 11904: 0xBDB7, + 34055 - 11904: 0xDFBD, + 34056 - 11904: 0xE75B, + 34057 - 11904: 0xE752, + 34058 - 11904: 0xE755, + 34059 - 11904: 0xE77B, + 34060 - 11904: 0xE75C, + 34061 - 11904: 0xE753, + 34062 - 11904: 0xE751, + 34063 - 11904: 0xE74E, + 34064 - 11904: 0x99C0, + 34065 - 11904: 0xBDB0, + 34066 - 11904: 0xE765, + 34067 - 11904: 0xBDAF, + 34068 - 11904: 0xBDB3, + 34069 - 11904: 0xE760, + 34070 - 11904: 0xE768, + 34071 - 11904: 0xBDA9, + 34072 - 11904: 0xE778, + 34073 - 11904: 0xE77C, + 34074 - 11904: 0xBDAB, + 34076 - 11904: 0xE757, + 34077 - 11904: 0xE76B, + 34078 - 11904: 0xE76F, + 34079 - 11904: 0xE754, + 34080 - 11904: 0xE779, + 34081 - 11904: 0xBDB2, + 34083 - 11904: 0xBDB1, + 34084 - 11904: 0xE74C, + 34085 - 11904: 0xBDB5, + 34086 - 11904: 0xE772, + 34087 - 11904: 0xE756, + 34088 - 11904: 0xE76A, + 34089 - 11904: 0xE750, + 34090 - 11904: 0xE75E, + 34091 - 11904: 0xE759, + 34092 - 11904: 0xBDAD, + 34093 - 11904: 0xBDAE, + 34094 - 11904: 0xE76C, + 34095 - 11904: 0xE77D, + 34096 - 11904: 0xE77A, + 34097 - 11904: 0xE771, + 34099 - 11904: 0xFDB4, + 34100 - 11904: 0x8F77, + 34104 - 11904: 0x99C1, + 34107 - 11904: 0xE74D, + 34109 - 11904: 0xBDAA, + 34110 - 11904: 0xEB49, + 34112 - 11904: 0xEB40, + 34113 - 11904: 0xEB43, + 34114 - 11904: 0xFAB9, + 34115 - 11904: 0xBFBB, + 34116 - 11904: 0xEB45, + 34117 - 11904: 0xEAF9, + 34118 - 11904: 0xEB41, + 34119 - 11904: 0xEB47, + 34120 - 11904: 0xBFB8, + 34121 - 11904: 0xBFBC, + 34122 - 11904: 0xBFB6, + 34123 - 11904: 0x8F40, + 34124 - 11904: 0xFA44, + 34125 - 11904: 0xEAFB, + 34126 - 11904: 0xEB4C, + 34129 - 11904: 0xEB46, + 34130 - 11904: 0x99C2, + 34131 - 11904: 0xEAFC, + 34132 - 11904: 0xEB55, + 34133 - 11904: 0xEB4F, + 34134 - 11904: 0xEAF8, + 34135 - 11904: 0xEE46, + 34136 - 11904: 0xEAFE, + 34137 - 11904: 0xBFB7, + 34138 - 11904: 0x8F5C, + 34139 - 11904: 0xEB4A, + 34141 - 11904: 0xEB54, + 34142 - 11904: 0xBFBF, + 34143 - 11904: 0x8CBD, + 34144 - 11904: 0xEB51, + 34145 - 11904: 0xEAFD, + 34146 - 11904: 0xEB44, + 34147 - 11904: 0xEB48, + 34148 - 11904: 0xEB42, + 34149 - 11904: 0xEB56, + 34150 - 11904: 0xEB53, + 34151 - 11904: 0xEB50, + 34152 - 11904: 0xBFB9, + 34153 - 11904: 0xBFBA, + 34154 - 11904: 0xBFBE, + 34155 - 11904: 0xEAFA, + 34156 - 11904: 0xEB57, + 34157 - 11904: 0xBFBD, + 34158 - 11904: 0xEB4D, + 34159 - 11904: 0x99C4, + 34160 - 11904: 0x99C5, + 34161 - 11904: 0xEB4B, + 34163 - 11904: 0x8F7B, + 34165 - 11904: 0xEB4E, + 34166 - 11904: 0xEE53, + 34167 - 11904: 0xEE40, + 34168 - 11904: 0xEE45, + 34169 - 11904: 0xEE52, + 34170 - 11904: 0xEE44, + 34171 - 11904: 0xEDFB, + 34172 - 11904: 0xEE41, + 34174 - 11904: 0xC1A2, + 34176 - 11904: 0xEDF4, + 34177 - 11904: 0xEE4D, + 34178 - 11904: 0xEE4F, + 34179 - 11904: 0xEDF3, + 34180 - 11904: 0xC1A1, + 34181 - 11904: 0xEE51, + 34182 - 11904: 0xEE49, + 34183 - 11904: 0xC1A8, + 34184 - 11904: 0xEE50, + 34185 - 11904: 0xEE42, + 34186 - 11904: 0xC1AA, + 34187 - 11904: 0xEDF9, + 34188 - 11904: 0xEB52, + 34189 - 11904: 0xEE4A, + 34190 - 11904: 0xEE47, + 34191 - 11904: 0xEDF5, + 34192 - 11904: 0xEE55, + 34193 - 11904: 0xC1A4, + 34195 - 11904: 0x8776, + 34196 - 11904: 0xC1A5, + 34197 - 11904: 0xEDF7, + 34198 - 11904: 0xEE48, + 34199 - 11904: 0x8CB6, + 34200 - 11904: 0xEE54, + 34201 - 11904: 0xEE4B, + 34202 - 11904: 0xEDFD, + 34203 - 11904: 0xC1A7, + 34204 - 11904: 0xC1A3, + 34205 - 11904: 0xEE4C, + 34206 - 11904: 0xEDFE, + 34207 - 11904: 0xEE56, + 34208 - 11904: 0xEDF8, + 34209 - 11904: 0xEE43, + 34210 - 11904: 0xEE4E, + 34211 - 11904: 0xEDFA, + 34212 - 11904: 0xEDFC, + 34214 - 11904: 0xC2CB, + 34215 - 11904: 0xEDF6, + 34216 - 11904: 0xC1A9, + 34217 - 11904: 0xC2C4, + 34218 - 11904: 0xC17E, + 34223 - 11904: 0xC1A6, + 34224 - 11904: 0xC2C8, + 34225 - 11904: 0xF0B3, + 34227 - 11904: 0xF0A9, + 34228 - 11904: 0xF0A4, + 34229 - 11904: 0xF0AA, + 34230 - 11904: 0xF0B4, + 34231 - 11904: 0xF0B8, + 34232 - 11904: 0xF0B7, + 34233 - 11904: 0xC2CA, + 34234 - 11904: 0xC2C9, + 34237 - 11904: 0xF0AB, + 34238 - 11904: 0xF0B9, + 34239 - 11904: 0xF0AE, + 34240 - 11904: 0xF0A6, + 34241 - 11904: 0x8FA3, + 34242 - 11904: 0xF0A8, + 34243 - 11904: 0xF0A7, + 34244 - 11904: 0xF0AD, + 34245 - 11904: 0xF0B2, + 34246 - 11904: 0xF0A5, + 34247 - 11904: 0xF0AC, + 34248 - 11904: 0xF0B1, + 34249 - 11904: 0xC2C7, + 34251 - 11904: 0xF0AF, + 34253 - 11904: 0xC2C5, + 34254 - 11904: 0xF0B0, + 34255 - 11904: 0xC2C3, + 34256 - 11904: 0xC2C6, + 34257 - 11904: 0xF2D5, + 34258 - 11904: 0xF0B5, + 34261 - 11904: 0xC3C2, + 34262 - 11904: 0x8CCE, + 34263 - 11904: 0xF2CD, + 34264 - 11904: 0xF2D1, + 34265 - 11904: 0xF2C9, + 34266 - 11904: 0xF2CC, + 34268 - 11904: 0xF2D4, + 34269 - 11904: 0xC3C0, + 34270 - 11904: 0xF2D9, + 34271 - 11904: 0xF2D2, + 34272 - 11904: 0x99C6, + 34273 - 11904: 0xF2CA, + 34274 - 11904: 0xF2DA, + 34275 - 11904: 0xF2D3, + 34276 - 11904: 0xC3C3, + 34277 - 11904: 0xC3C4, + 34278 - 11904: 0xF2D7, + 34280 - 11904: 0xF2CB, + 34281 - 11904: 0xC3BF, + 34282 - 11904: 0xC3C1, + 34283 - 11904: 0xF2C6, + 34284 - 11904: 0xF2CE, + 34285 - 11904: 0xF2C8, + 34286 - 11904: 0x96CD, + 34287 - 11904: 0xF2D8, + 34288 - 11904: 0xF2D6, + 34289 - 11904: 0xF2C7, + 34290 - 11904: 0xF2CF, + 34294 - 11904: 0xF4BE, + 34295 - 11904: 0xC3C5, + 34296 - 11904: 0xF2D0, + 34297 - 11904: 0xC4A7, + 34298 - 11904: 0xC4A9, + 34299 - 11904: 0xC4A6, + 34300 - 11904: 0x96C7, + 34301 - 11904: 0xF4C3, + 34302 - 11904: 0xF4BB, + 34303 - 11904: 0xF4B9, + 34304 - 11904: 0xF4BD, + 34305 - 11904: 0xF4BA, + 34306 - 11904: 0x8FA5, + 34308 - 11904: 0xF4BF, + 34309 - 11904: 0xF4C1, + 34310 - 11904: 0xC4AA, + 34311 - 11904: 0xC4AC, + 34313 - 11904: 0xF4C0, + 34314 - 11904: 0xC4AD, + 34315 - 11904: 0xC4AB, + 34316 - 11904: 0xF4C2, + 34317 - 11904: 0xFABB, + 34319 - 11904: 0x8C61, + 34320 - 11904: 0x9570, + 34321 - 11904: 0xC4A8, + 34323 - 11904: 0x87AF, + 34324 - 11904: 0x9368, + 34326 - 11904: 0x8F7E, + 34327 - 11904: 0xC4F4, + 34328 - 11904: 0xF5F1, + 34329 - 11904: 0xF5F7, + 34330 - 11904: 0xC4F6, + 34331 - 11904: 0xF4BC, + 34332 - 11904: 0xF5F6, + 34334 - 11904: 0xF5FD, + 34335 - 11904: 0xF5F4, + 34336 - 11904: 0xF5FB, + 34337 - 11904: 0xF5FA, + 34338 - 11904: 0xF4B8, + 34339 - 11904: 0xF5F5, + 34340 - 11904: 0xF0B6, + 34341 - 11904: 0xF5FE, + 34342 - 11904: 0xF5F3, + 34343 - 11904: 0xF5F8, + 34344 - 11904: 0x8FAA, + 34345 - 11904: 0xF5FC, + 34346 - 11904: 0xF5F2, + 34348 - 11904: 0xF74A, + 34349 - 11904: 0xC4F5, + 34350 - 11904: 0xF5F9, + 34351 - 11904: 0xA050, + 34353 - 11904: 0xF7F4, + 34354 - 11904: 0xF74B, + 34355 - 11904: 0xF749, + 34356 - 11904: 0xF747, + 34357 - 11904: 0xF748, + 34358 - 11904: 0xF74C, + 34360 - 11904: 0xC5D9, + 34361 - 11904: 0xF7F2, + 34362 - 11904: 0xF7F0, + 34363 - 11904: 0xF7F5, + 34364 - 11904: 0xF7F3, + 34366 - 11904: 0xF7F6, + 34367 - 11904: 0xC5DA, + 34368 - 11904: 0xF7F1, + 34370 - 11904: 0x90D3, + 34371 - 11904: 0xF8BC, + 34373 - 11904: 0x9556, + 34374 - 11904: 0xF945, + 34375 - 11904: 0xF946, + 34376 - 11904: 0xF947, + 34379 - 11904: 0xF9C7, + 34380 - 11904: 0xF9BD, + 34381 - 11904: 0xCA4F, + 34382 - 11904: 0xAAEA, + 34384 - 11904: 0xAD68, + 34386 - 11904: 0xD3B8, + 34387 - 11904: 0xD3B7, + 34388 - 11904: 0xB040, + 34389 - 11904: 0xB342, + 34390 - 11904: 0xD77C, + 34393 - 11904: 0xD77B, + 34395 - 11904: 0xB5EA, + 34396 - 11904: 0xB8B8, + 34398 - 11904: 0xB8B7, + 34399 - 11904: 0xB8B9, + 34401 - 11904: 0xE3D4, + 34402 - 11904: 0xE77E, + 34403 - 11904: 0xEB58, + 34404 - 11904: 0xEB5A, + 34405 - 11904: 0xEB59, + 34407 - 11904: 0xC1AB, + 34408 - 11904: 0xEE57, + 34409 - 11904: 0xF0BA, + 34410 - 11904: 0xF9A5, + 34411 - 11904: 0xA6E4, + 34412 - 11904: 0x8FB8, + 34413 - 11904: 0xCDC9, + 34414 - 11904: 0xCDCA, + 34415 - 11904: 0xCDC8, + 34416 - 11904: 0xCDC7, + 34417 - 11904: 0xAAEB, + 34418 - 11904: 0x99C8, + 34419 - 11904: 0xD0A9, + 34420 - 11904: 0xD0A7, + 34423 - 11904: 0xD0A6, + 34425 - 11904: 0xAD69, + 34426 - 11904: 0xAD6B, + 34427 - 11904: 0xAD6A, + 34428 - 11904: 0xD0A8, + 34430 - 11904: 0x8FAF, + 34437 - 11904: 0xD3C4, + 34438 - 11904: 0xD3C1, + 34439 - 11904: 0xD3BF, + 34442 - 11904: 0xB041, + 34443 - 11904: 0xD3C2, + 34444 - 11904: 0xB046, + 34445 - 11904: 0xD3BC, + 34446 - 11904: 0xD3CB, + 34448 - 11904: 0xD3CD, + 34449 - 11904: 0xD3BD, + 34450 - 11904: 0x99C9, + 34451 - 11904: 0xB043, + 34452 - 11904: 0xD3CE, + 34453 - 11904: 0xD3C9, + 34454 - 11904: 0xD3BB, + 34455 - 11904: 0xD3C0, + 34456 - 11904: 0xD3CA, + 34457 - 11904: 0xD3C6, + 34458 - 11904: 0xD3C3, + 34460 - 11904: 0xB048, + 34461 - 11904: 0xD3CC, + 34462 - 11904: 0xD3BE, + 34464 - 11904: 0x9579, + 34465 - 11904: 0xD3C7, + 34466 - 11904: 0xD3B9, + 34467 - 11904: 0xB047, + 34468 - 11904: 0xB044, + 34469 - 11904: 0xD3C5, + 34471 - 11904: 0xD3C8, + 34472 - 11904: 0xD3BA, + 34473 - 11904: 0xB045, + 34474 - 11904: 0xB042, + 34477 - 11904: 0x9F49, + 34479 - 11904: 0xB34C, + 34480 - 11904: 0xD7A5, + 34481 - 11904: 0xB34B, + 34482 - 11904: 0x99CA, + 34483 - 11904: 0xD7A8, + 34484 - 11904: 0xD7AB, + 34485 - 11904: 0xB348, + 34486 - 11904: 0xB346, + 34487 - 11904: 0xD77E, + 34488 - 11904: 0xD7A9, + 34489 - 11904: 0xD7A7, + 34490 - 11904: 0xD7A4, + 34491 - 11904: 0xD7AC, + 34492 - 11904: 0xD7AD, + 34493 - 11904: 0xD7AF, + 34494 - 11904: 0xD7B0, + 34495 - 11904: 0xD77D, + 34496 - 11904: 0xB345, + 34497 - 11904: 0xD7A2, + 34498 - 11904: 0xD7A1, + 34499 - 11904: 0xD7AE, + 34500 - 11904: 0xB347, + 34501 - 11904: 0xD7A3, + 34502 - 11904: 0xB349, + 34503 - 11904: 0xB344, + 34504 - 11904: 0xD7A6, + 34505 - 11904: 0xB34D, + 34507 - 11904: 0xB34A, + 34508 - 11904: 0xD7AA, + 34512 - 11904: 0xB5F1, + 34513 - 11904: 0xDBBF, + 34515 - 11904: 0xDBB4, + 34516 - 11904: 0xB5EE, + 34518 - 11904: 0xDFE7, + 34519 - 11904: 0xDBBD, + 34520 - 11904: 0xDBB1, + 34521 - 11904: 0xB5EC, + 34522 - 11904: 0xDBB6, + 34523 - 11904: 0xB5EF, + 34524 - 11904: 0xDBBA, + 34525 - 11904: 0xDBB8, + 34526 - 11904: 0xB5F2, + 34527 - 11904: 0xB5EB, + 34530 - 11904: 0xDBB2, + 34531 - 11904: 0xDBB5, + 34532 - 11904: 0xB5F0, + 34534 - 11904: 0xDBB3, + 34536 - 11904: 0xDBBE, + 34537 - 11904: 0xDBBC, + 34538 - 11904: 0xDBB7, + 34539 - 11904: 0xDBB9, + 34540 - 11904: 0xDBBB, + 34541 - 11904: 0xB5ED, + 34543 - 11904: 0x99CB, + 34549 - 11904: 0xDFE8, + 34550 - 11904: 0xDFEE, + 34551 - 11904: 0xDFE4, + 34552 - 11904: 0xDFEA, + 34553 - 11904: 0xB8BA, + 34554 - 11904: 0xDFE6, + 34555 - 11904: 0xB8C0, + 34558 - 11904: 0xB8BF, + 34560 - 11904: 0xB8BE, + 34561 - 11904: 0xDFED, + 34562 - 11904: 0xB8C1, + 34563 - 11904: 0xB8C2, + 34564 - 11904: 0xDFE3, + 34565 - 11904: 0xDFF0, + 34566 - 11904: 0xB8C3, + 34567 - 11904: 0xB8BD, + 34568 - 11904: 0xB8BC, + 34569 - 11904: 0xDFEC, + 34570 - 11904: 0xB8C4, + 34571 - 11904: 0xDFE2, + 34572 - 11904: 0xDFE5, + 34573 - 11904: 0xDFEF, + 34574 - 11904: 0xDFEB, + 34577 - 11904: 0xE3F4, + 34578 - 11904: 0xE3E9, + 34579 - 11904: 0xB8BB, + 34584 - 11904: 0xBB6A, + 34585 - 11904: 0xE3DD, + 34586 - 11904: 0xE3F2, + 34587 - 11904: 0xE3DE, + 34588 - 11904: 0xBB65, + 34590 - 11904: 0xE3DB, + 34592 - 11904: 0xE3E4, + 34593 - 11904: 0xE3DC, + 34594 - 11904: 0xBB67, + 34595 - 11904: 0xE3D6, + 34596 - 11904: 0xE3F1, + 34597 - 11904: 0xBB68, + 34598 - 11904: 0xE3EE, + 34599 - 11904: 0xE3EF, + 34600 - 11904: 0xE3D7, + 34601 - 11904: 0xBB6D, + 34602 - 11904: 0xE3E6, + 34604 - 11904: 0xE3E0, + 34605 - 11904: 0xE3E7, + 34606 - 11904: 0xE3DA, + 34608 - 11904: 0xE3F3, + 34609 - 11904: 0xE3EB, + 34610 - 11904: 0xE3E5, + 34611 - 11904: 0xE3D5, + 34612 - 11904: 0xBB69, + 34613 - 11904: 0xE3EC, + 34615 - 11904: 0xBB6C, + 34616 - 11904: 0xE3F0, + 34618 - 11904: 0xE3EA, + 34619 - 11904: 0xBB66, + 34620 - 11904: 0xE3E8, + 34622 - 11904: 0xE3E2, + 34623 - 11904: 0xBB64, + 34624 - 11904: 0xE3D9, + 34625 - 11904: 0xE3E1, + 34626 - 11904: 0xE3ED, + 34627 - 11904: 0xE3DF, + 34630 - 11904: 0xE3E3, + 34636 - 11904: 0xBDC1, + 34637 - 11904: 0xDFE9, + 34638 - 11904: 0xE7B2, + 34639 - 11904: 0xE7BB, + 34640 - 11904: 0xE7B1, + 34641 - 11904: 0xE7AD, + 34642 - 11904: 0xE7AA, + 34643 - 11904: 0xBDC2, + 34644 - 11904: 0xE7A8, + 34645 - 11904: 0xBB6B, + 34646 - 11904: 0xE7A1, + 34647 - 11904: 0xBDC0, + 34648 - 11904: 0xE7A7, + 34649 - 11904: 0xBDBF, + 34650 - 11904: 0xE7AC, + 34651 - 11904: 0xE7A9, + 34652 - 11904: 0xE7B9, + 34653 - 11904: 0xE7B4, + 34654 - 11904: 0xE7AE, + 34655 - 11904: 0xE7B3, + 34656 - 11904: 0xBDBB, + 34657 - 11904: 0xE7AB, + 34658 - 11904: 0xE7BE, + 34659 - 11904: 0xE7A2, + 34660 - 11904: 0xE7A3, + 34661 - 11904: 0xE7BA, + 34662 - 11904: 0xBDBC, + 34663 - 11904: 0xE7BF, + 34664 - 11904: 0xBDBE, + 34665 - 11904: 0xE7C0, + 34666 - 11904: 0xE7B0, + 34667 - 11904: 0xE3D8, + 34668 - 11904: 0xE7B6, + 34669 - 11904: 0xE7AF, + 34670 - 11904: 0xE7B8, + 34671 - 11904: 0xE7B5, + 34672 - 11904: 0x9DD5, + 34673 - 11904: 0x8FB0, + 34675 - 11904: 0xE7A6, + 34676 - 11904: 0xBDB9, + 34677 - 11904: 0xE7BD, + 34678 - 11904: 0xBDBA, + 34679 - 11904: 0xE7A4, + 34680 - 11904: 0xBDBD, + 34681 - 11904: 0xEB64, + 34682 - 11904: 0xE7B7, + 34683 - 11904: 0xE7BC, + 34685 - 11904: 0xFA7A, + 34689 - 11904: 0xEB61, + 34690 - 11904: 0xBDB8, + 34691 - 11904: 0xBFC0, + 34692 - 11904: 0xEB6B, + 34693 - 11904: 0xEB67, + 34694 - 11904: 0x9E5F, + 34695 - 11904: 0xEB65, + 34696 - 11904: 0xEB60, + 34697 - 11904: 0xEB6F, + 34699 - 11904: 0x99CD, + 34700 - 11904: 0xA0C9, + 34701 - 11904: 0xBFC4, + 34703 - 11904: 0xEB5C, + 34704 - 11904: 0xEB68, + 34705 - 11904: 0xEB69, + 34706 - 11904: 0xEB5F, + 34707 - 11904: 0xEB5E, + 34708 - 11904: 0xEB6C, + 34710 - 11904: 0xEB62, + 34711 - 11904: 0xEB5D, + 34712 - 11904: 0xEB63, + 34714 - 11904: 0xEB6E, + 34715 - 11904: 0xEB5B, + 34716 - 11904: 0xEB6D, + 34717 - 11904: 0xEB6A, + 34718 - 11904: 0xBFC2, + 34719 - 11904: 0xBFC1, + 34722 - 11904: 0xBFC3, + 34723 - 11904: 0xEB66, + 34724 - 11904: 0xF0CB, + 34725 - 11904: 0x9ADB, + 34729 - 11904: 0xA0C6, + 34730 - 11904: 0xEE59, + 34731 - 11904: 0xC1B1, + 34732 - 11904: 0xEE5D, + 34733 - 11904: 0xEE5A, + 34734 - 11904: 0xEE61, + 34735 - 11904: 0xEE67, + 34736 - 11904: 0xEE5C, + 34737 - 11904: 0x8FB4, + 34738 - 11904: 0xEE70, + 34739 - 11904: 0xC1AE, + 34740 - 11904: 0xEE6A, + 34741 - 11904: 0xEE5F, + 34742 - 11904: 0xEE6B, + 34743 - 11904: 0xEE66, + 34744 - 11904: 0xEE6D, + 34745 - 11904: 0xEE5E, + 34746 - 11904: 0xC1B3, + 34747 - 11904: 0xC1B2, + 34748 - 11904: 0xEE60, + 34749 - 11904: 0xEE6E, + 34750 - 11904: 0xEE58, + 34751 - 11904: 0xEE6C, + 34752 - 11904: 0xC1AC, + 34753 - 11904: 0xA0D7, + 34754 - 11904: 0xEE64, + 34755 - 11904: 0xEE63, + 34756 - 11904: 0xEE68, + 34757 - 11904: 0xEE5B, + 34758 - 11904: 0xC1B0, + 34760 - 11904: 0xC1B4, + 34761 - 11904: 0xEE62, + 34762 - 11904: 0xEE69, + 34763 - 11904: 0xC1B5, + 34764 - 11904: 0xEE65, + 34766 - 11904: 0xA0C7, + 34769 - 11904: 0xC1AD, + 34770 - 11904: 0xC1AF, + 34771 - 11904: 0xF0C7, + 34772 - 11904: 0xF0C5, + 34774 - 11904: 0xA043, + 34775 - 11904: 0xF0CC, + 34776 - 11904: 0xF0C9, + 34777 - 11904: 0xF0CD, + 34778 - 11904: 0x8FB5, + 34779 - 11904: 0xF0BE, + 34780 - 11904: 0xF0C6, + 34781 - 11904: 0xF0D1, + 34782 - 11904: 0xEE6F, + 34783 - 11904: 0xF0C2, + 34784 - 11904: 0xC2CF, + 34785 - 11904: 0xE7A5, + 34786 - 11904: 0xF0BD, + 34787 - 11904: 0xF0CA, + 34788 - 11904: 0xF0C4, + 34789 - 11904: 0xF0C1, + 34790 - 11904: 0xF0BC, + 34791 - 11904: 0xF0BB, + 34792 - 11904: 0xF0D0, + 34794 - 11904: 0xF0C0, + 34795 - 11904: 0xF0BF, + 34796 - 11904: 0xC2CD, + 34797 - 11904: 0xF0C8, + 34798 - 11904: 0x8FB2, + 34799 - 11904: 0xC2CC, + 34802 - 11904: 0xC2CE, + 34803 - 11904: 0xF0C3, + 34804 - 11904: 0xF0CF, + 34805 - 11904: 0xA061, + 34806 - 11904: 0xF2DE, + 34807 - 11904: 0xF2DF, + 34809 - 11904: 0xC3C9, + 34810 - 11904: 0xF2DC, + 34811 - 11904: 0xC3C6, + 34812 - 11904: 0xF2E4, + 34814 - 11904: 0xC3CA, + 34815 - 11904: 0xF2E6, + 34816 - 11904: 0xF2DB, + 34817 - 11904: 0xF0CE, + 34818 - 11904: 0xF2E8, + 34819 - 11904: 0xF2DD, + 34820 - 11904: 0x9E5E, + 34821 - 11904: 0xC3C7, + 34822 - 11904: 0xF2E3, + 34824 - 11904: 0xF2E5, + 34825 - 11904: 0xF2E0, + 34826 - 11904: 0xF2E7, + 34827 - 11904: 0xF2E2, + 34828 - 11904: 0xF2E1, + 34829 - 11904: 0xC3C8, + 34831 - 11904: 0xA063, + 34832 - 11904: 0xF4C5, + 34833 - 11904: 0xF4C6, + 34835 - 11904: 0xF4C8, + 34836 - 11904: 0xC4AE, + 34837 - 11904: 0xC4AF, + 34838 - 11904: 0xF4C9, + 34839 - 11904: 0xF4C7, + 34840 - 11904: 0x9FE8, + 34841 - 11904: 0xF4C4, + 34843 - 11904: 0xF642, + 34844 - 11904: 0xF645, + 34845 - 11904: 0xF641, + 34847 - 11904: 0xC4FA, + 34848 - 11904: 0xF643, + 34849 - 11904: 0xC4F9, + 34850 - 11904: 0xC4F8, + 34851 - 11904: 0xC4F7, + 34852 - 11904: 0xF644, + 34853 - 11904: 0xF751, + 34854 - 11904: 0xF74F, + 34855 - 11904: 0x9CB2, + 34856 - 11904: 0xF74E, + 34857 - 11904: 0xF640, + 34858 - 11904: 0xF750, + 34859 - 11904: 0xF646, + 34860 - 11904: 0xF74D, + 34861 - 11904: 0x957C, + 34862 - 11904: 0xF7F9, + 34863 - 11904: 0xF7D7, + 34864 - 11904: 0xF7F7, + 34865 - 11904: 0xC5DB, + 34866 - 11904: 0xF7F8, + 34867 - 11904: 0xF7FA, + 34869 - 11904: 0xF8BF, + 34870 - 11904: 0xC5FA, + 34871 - 11904: 0xF8BE, + 34872 - 11904: 0xF8BD, + 34873 - 11904: 0xC5FB, + 34875 - 11904: 0xC65A, + 34876 - 11904: 0xF96E, + 34877 - 11904: 0xF9A7, + 34878 - 11904: 0xF9A6, + 34879 - 11904: 0xF9A8, + 34880 - 11904: 0xA6E5, + 34881 - 11904: 0xD0AA, + 34882 - 11904: 0x9FC7, + 34883 - 11904: 0xD3CF, + 34884 - 11904: 0xD3D0, + 34885 - 11904: 0x8FBB, + 34886 - 11904: 0x8FBC, + 34888 - 11904: 0xDBC0, + 34890 - 11904: 0xF647, + 34891 - 11904: 0xF8C0, + 34892 - 11904: 0xA6E6, + 34893 - 11904: 0xAD6C, + 34894 - 11904: 0xD0AB, + 34895 - 11904: 0x8FEC, + 34898 - 11904: 0xD7B1, + 34899 - 11904: 0xB34E, + 34901 - 11904: 0xDBC2, + 34902 - 11904: 0xDBC1, + 34903 - 11904: 0xB5F3, + 34905 - 11904: 0xB8C5, + 34906 - 11904: 0xE7C1, + 34907 - 11904: 0xBDC3, + 34909 - 11904: 0xBDC4, + 34910 - 11904: 0x8FC0, + 34912 - 11904: 0x936A, + 34913 - 11904: 0xBFC5, + 34914 - 11904: 0xC5FC, + 34915 - 11904: 0xA6E7, + 34916 - 11904: 0x8BE4, + 34917 - 11904: 0x9C7C, + 34919 - 11904: 0xD0AC, + 34920 - 11904: 0xAAED, + 34921 - 11904: 0xD0AE, + 34922 - 11904: 0xD0AD, + 34923 - 11904: 0xAD6D, + 34925 - 11904: 0xD3D1, + 34926 - 11904: 0x95A1, + 34927 - 11904: 0xD3D8, + 34928 - 11904: 0xB049, + 34929 - 11904: 0xD3D6, + 34930 - 11904: 0xD3D4, + 34932 - 11904: 0xD3DB, + 34933 - 11904: 0xD3D2, + 34934 - 11904: 0xD3D3, + 34935 - 11904: 0xB04A, + 34937 - 11904: 0xB04E, + 34940 - 11904: 0xD3DC, + 34941 - 11904: 0xB04D, + 34942 - 11904: 0xD3DA, + 34943 - 11904: 0xD3D7, + 34944 - 11904: 0xD3D5, + 34945 - 11904: 0xB04B, + 34946 - 11904: 0xB04C, + 34947 - 11904: 0xD3D9, + 34948 - 11904: 0xFEEC, + 34951 - 11904: 0x95A3, + 34952 - 11904: 0xB350, + 34953 - 11904: 0xD7B2, + 34955 - 11904: 0xB355, + 34956 - 11904: 0xD7C2, + 34957 - 11904: 0xB354, + 34958 - 11904: 0xD7C4, + 34959 - 11904: 0x8C45, + 34960 - 11904: 0x8CB8, + 34961 - 11904: 0xD7B8, + 34962 - 11904: 0xB352, + 34963 - 11904: 0xD7C3, + 34965 - 11904: 0xD7B3, + 34966 - 11904: 0xB353, + 34967 - 11904: 0xD7BF, + 34968 - 11904: 0xD7BB, + 34969 - 11904: 0xD7BD, + 34970 - 11904: 0xD7B7, + 34971 - 11904: 0xD7BE, + 34972 - 11904: 0x8FC1, + 34973 - 11904: 0x87B7, + 34974 - 11904: 0xB34F, + 34975 - 11904: 0xD7BA, + 34976 - 11904: 0xA052, + 34977 - 11904: 0xD7B9, + 34978 - 11904: 0xD7B5, + 34980 - 11904: 0xD7C0, + 34983 - 11904: 0xD7BC, + 34984 - 11904: 0xD7B4, + 34986 - 11904: 0xD7B6, + 34987 - 11904: 0xB351, + 34988 - 11904: 0xD7C1, + 34990 - 11904: 0x99D0, + 34993 - 11904: 0xB5F6, + 34994 - 11904: 0xDBCD, + 34996 - 11904: 0x8FC3, + 34997 - 11904: 0x8FC4, + 34998 - 11904: 0xDBC9, + 34999 - 11904: 0xDBCB, + 35000 - 11904: 0xDBC6, + 35001 - 11904: 0xDBC5, + 35002 - 11904: 0xDBC3, + 35004 - 11904: 0xDBCA, + 35005 - 11904: 0xDBCC, + 35006 - 11904: 0xDBC8, + 35007 - 11904: 0x95A4, + 35008 - 11904: 0xDBC7, + 35009 - 11904: 0xB5F4, + 35010 - 11904: 0xB5F5, + 35013 - 11904: 0x8FC6, + 35015 - 11904: 0x9E60, + 35017 - 11904: 0xDBCF, + 35018 - 11904: 0xB8CD, + 35019 - 11904: 0xDFF2, + 35020 - 11904: 0xDFF8, + 35021 - 11904: 0xDFF3, + 35022 - 11904: 0xDFF4, + 35023 - 11904: 0xF9D8, + 35024 - 11904: 0xDFF9, + 35026 - 11904: 0xB8CF, + 35028 - 11904: 0xB8C7, + 35029 - 11904: 0xB8CE, + 35030 - 11904: 0xDFF1, + 35031 - 11904: 0xDBC4, + 35032 - 11904: 0xB8CA, + 35033 - 11904: 0xB8C8, + 35034 - 11904: 0xDFF7, + 35035 - 11904: 0xDFF6, + 35036 - 11904: 0xB8C9, + 35037 - 11904: 0xB8CB, + 35038 - 11904: 0xDFF5, + 35039 - 11904: 0xB8C6, + 35041 - 11904: 0xB8CC, + 35046 - 11904: 0x95A5, + 35047 - 11904: 0xE3F6, + 35048 - 11904: 0xBB74, + 35051 - 11904: 0xE442, + 35052 - 11904: 0xE441, + 35054 - 11904: 0xE3FB, + 35055 - 11904: 0xBB76, + 35056 - 11904: 0xE440, + 35057 - 11904: 0xE3F7, + 35058 - 11904: 0xE3F8, + 35059 - 11904: 0xBB6E, + 35060 - 11904: 0xBB70, + 35061 - 11904: 0x9CB3, + 35062 - 11904: 0xE3FD, + 35063 - 11904: 0xE3F5, + 35064 - 11904: 0xBB72, + 35065 - 11904: 0xBB71, + 35066 - 11904: 0xE3F9, + 35067 - 11904: 0xE3FE, + 35068 - 11904: 0xE3FC, + 35069 - 11904: 0xBB73, + 35070 - 11904: 0xE3FA, + 35071 - 11904: 0x99D1, + 35072 - 11904: 0xFEF1, + 35073 - 11904: 0xDBCE, + 35074 - 11904: 0xBB6F, + 35077 - 11904: 0xE7C2, + 35078 - 11904: 0xE7C9, + 35079 - 11904: 0xBDC6, + 35081 - 11904: 0xE7CD, + 35082 - 11904: 0xBDCA, + 35083 - 11904: 0xE7C5, + 35084 - 11904: 0xE7C3, + 35086 - 11904: 0xE7CC, + 35088 - 11904: 0xBDC5, + 35089 - 11904: 0xE7CB, + 35090 - 11904: 0xBDC7, + 35091 - 11904: 0xBDC8, + 35092 - 11904: 0xE7C4, + 35093 - 11904: 0xBDC9, + 35094 - 11904: 0xE7CA, + 35095 - 11904: 0xE7C6, + 35096 - 11904: 0xE7C7, + 35097 - 11904: 0xE7C8, + 35098 - 11904: 0xBB75, + 35102 - 11904: 0xEB70, + 35103 - 11904: 0xEB7C, + 35105 - 11904: 0xBFCA, + 35106 - 11904: 0xEB77, + 35107 - 11904: 0xEB79, + 35108 - 11904: 0x99D2, + 35109 - 11904: 0xBFC8, + 35110 - 11904: 0xEB71, + 35111 - 11904: 0xEB75, + 35113 - 11904: 0xEB78, + 35114 - 11904: 0xBFC6, + 35115 - 11904: 0xBFC9, + 35116 - 11904: 0xEB7B, + 35117 - 11904: 0xEB73, + 35118 - 11904: 0xEB74, + 35119 - 11904: 0xEB7A, + 35120 - 11904: 0xEB72, + 35121 - 11904: 0xEB76, + 35122 - 11904: 0xBFC7, + 35123 - 11904: 0xEE72, + 35125 - 11904: 0xEE71, + 35126 - 11904: 0xC1B7, + 35127 - 11904: 0xEE77, + 35128 - 11904: 0xC1B9, + 35131 - 11904: 0xC1B6, + 35132 - 11904: 0xEE73, + 35133 - 11904: 0xC1BA, + 35134 - 11904: 0xEE74, + 35137 - 11904: 0xEE75, + 35138 - 11904: 0xEE78, + 35139 - 11904: 0x9CC2, + 35140 - 11904: 0xC1B8, + 35142 - 11904: 0xF0D6, + 35143 - 11904: 0x99D3, + 35145 - 11904: 0xF0D9, + 35147 - 11904: 0xF0D3, + 35148 - 11904: 0xF0D5, + 35149 - 11904: 0x95A7, + 35151 - 11904: 0xF0D4, + 35152 - 11904: 0xF0D7, + 35153 - 11904: 0xF0D8, + 35154 - 11904: 0xEE76, + 35155 - 11904: 0xF0D2, + 35156 - 11904: 0x95A9, + 35158 - 11904: 0xC3CD, + 35159 - 11904: 0xF2EC, + 35160 - 11904: 0xF2EF, + 35161 - 11904: 0xF2F1, + 35162 - 11904: 0xF2EA, + 35163 - 11904: 0xF2EB, + 35164 - 11904: 0xF2EE, + 35165 - 11904: 0xF2F0, + 35166 - 11904: 0xC3CE, + 35167 - 11904: 0xC3CC, + 35168 - 11904: 0xC3CB, + 35169 - 11904: 0xF2ED, + 35170 - 11904: 0xF2E9, + 35171 - 11904: 0xF4CA, + 35172 - 11904: 0xC4B0, + 35173 - 11904: 0x95A6, + 35174 - 11904: 0xF4CB, + 35177 - 11904: 0xF649, + 35178 - 11904: 0xC4FB, + 35179 - 11904: 0xF64B, + 35180 - 11904: 0xC4FC, + 35181 - 11904: 0xF648, + 35182 - 11904: 0xF64A, + 35183 - 11904: 0xC5A8, + 35185 - 11904: 0xF752, + 35186 - 11904: 0xC5A7, + 35187 - 11904: 0xF7FD, + 35188 - 11904: 0xF7FC, + 35190 - 11904: 0xF7FB, + 35191 - 11904: 0x9C5D, + 35193 - 11904: 0xF948, + 35194 - 11904: 0xF949, + 35195 - 11904: 0xF94B, + 35196 - 11904: 0xF94A, + 35198 - 11904: 0xCA50, + 35199 - 11904: 0xA6E8, + 35200 - 11904: 0x98E2, + 35201 - 11904: 0xAD6E, + 35202 - 11904: 0xD7C5, + 35203 - 11904: 0xB5F7, + 35205 - 11904: 0xDFFA, + 35206 - 11904: 0xC2D0, + 35207 - 11904: 0x8FC9, + 35208 - 11904: 0xF2F2, + 35209 - 11904: 0xA0C2, + 35210 - 11904: 0x8FCA, + 35211 - 11904: 0xA8A3, + 35215 - 11904: 0xB357, + 35217 - 11904: 0x99D4, + 35219 - 11904: 0xB356, + 35220 - 11904: 0xA0B9, + 35221 - 11904: 0xDBD0, + 35222 - 11904: 0xB5F8, + 35223 - 11904: 0xDBD2, + 35224 - 11904: 0xDBD1, + 35227 - 11904: 0xDFFB, + 35228 - 11904: 0xB8D0, + 35229 - 11904: 0xE443, + 35230 - 11904: 0xE446, + 35231 - 11904: 0xE445, + 35233 - 11904: 0xE444, + 35234 - 11904: 0xE7CE, + 35235 - 11904: 0xE7D0, + 35236 - 11904: 0xE7CF, + 35237 - 11904: 0x9B58, + 35238 - 11904: 0xBFCC, + 35239 - 11904: 0x8FCD, + 35241 - 11904: 0xA0D4, + 35242 - 11904: 0xBFCB, + 35244 - 11904: 0xC1BB, + 35245 - 11904: 0xEE79, + 35246 - 11904: 0xEE7B, + 35247 - 11904: 0xEE7A, + 35250 - 11904: 0xC2D1, + 35254 - 11904: 0xF2F4, + 35255 - 11904: 0xF2F3, + 35257 - 11904: 0xF4CC, + 35258 - 11904: 0xC4B1, + 35260 - 11904: 0x8FCE, + 35261 - 11904: 0xC4FD, + 35262 - 11904: 0xF754, + 35263 - 11904: 0xF753, + 35264 - 11904: 0xC65B, + 35265 - 11904: 0x8BE5, + 35270 - 11904: 0x8979, + 35282 - 11904: 0xA8A4, + 35283 - 11904: 0xD0AF, + 35284 - 11904: 0xAD6F, + 35285 - 11904: 0xD7C8, + 35286 - 11904: 0xD7C6, + 35289 - 11904: 0xD7C7, + 35290 - 11904: 0xDBD4, + 35291 - 11904: 0xDBD5, + 35292 - 11904: 0xE043, + 35293 - 11904: 0xDBD3, + 35295 - 11904: 0xDFFC, + 35296 - 11904: 0xE041, + 35297 - 11904: 0xE040, + 35298 - 11904: 0xE042, + 35299 - 11904: 0xB8D1, + 35300 - 11904: 0xDFFE, + 35301 - 11904: 0xDFFD, + 35302 - 11904: 0xE044, + 35303 - 11904: 0x8FD0, + 35304 - 11904: 0xE449, + 35305 - 11904: 0xE447, + 35307 - 11904: 0xE448, + 35308 - 11904: 0xE7D3, + 35309 - 11904: 0xE7D1, + 35312 - 11904: 0xE7D2, + 35313 - 11904: 0xEB7D, + 35314 - 11904: 0xEE7C, + 35315 - 11904: 0xEE7D, + 35316 - 11904: 0xC2D2, + 35318 - 11904: 0xF2F5, + 35319 - 11904: 0xF4CD, + 35320 - 11904: 0xC4B2, + 35322 - 11904: 0xF64C, + 35323 - 11904: 0xF755, + 35324 - 11904: 0xC5A9, + 35326 - 11904: 0xF7FE, + 35327 - 11904: 0xF94C, + 35328 - 11904: 0xA8A5, + 35330 - 11904: 0xAD71, + 35331 - 11904: 0xAD72, + 35332 - 11904: 0xD0B0, + 35335 - 11904: 0xD0B1, + 35336 - 11904: 0xAD70, + 35338 - 11904: 0xB054, + 35340 - 11904: 0xB052, + 35342 - 11904: 0xB051, + 35343 - 11904: 0xB058, + 35344 - 11904: 0xB050, + 35345 - 11904: 0xB059, + 35346 - 11904: 0xD3DD, + 35347 - 11904: 0xB056, + 35349 - 11904: 0xB053, + 35350 - 11904: 0xB057, + 35351 - 11904: 0xB055, + 35352 - 11904: 0xB04F, + 35355 - 11904: 0xB35F, + 35356 - 11904: 0x95B6, + 35357 - 11904: 0xB359, + 35358 - 11904: 0xD7CC, + 35359 - 11904: 0xB35E, + 35362 - 11904: 0xB360, + 35363 - 11904: 0xB35A, + 35365 - 11904: 0xB35B, + 35367 - 11904: 0xD7CA, + 35369 - 11904: 0x99D6, + 35370 - 11904: 0xB358, + 35371 - 11904: 0x95E5, + 35372 - 11904: 0xD7CB, + 35373 - 11904: 0xB35D, + 35376 - 11904: 0xD7C9, + 35377 - 11904: 0xB35C, + 35380 - 11904: 0xB644, + 35382 - 11904: 0xB646, + 35384 - 11904: 0x99D7, + 35385 - 11904: 0xDBD8, + 35386 - 11904: 0xB645, + 35387 - 11904: 0xB5F9, + 35388 - 11904: 0xB5FD, + 35389 - 11904: 0x95B5, + 35390 - 11904: 0xB8E4, + 35391 - 11904: 0xE049, + 35392 - 11904: 0xDBDA, + 35393 - 11904: 0xB5FE, + 35396 - 11904: 0xDBDD, + 35397 - 11904: 0xDBDE, + 35398 - 11904: 0xB643, + 35400 - 11904: 0xDBE0, + 35401 - 11904: 0xA0CA, + 35402 - 11904: 0xDBE2, + 35404 - 11904: 0xDBE3, + 35405 - 11904: 0xDBD7, + 35406 - 11904: 0xDBD6, + 35407 - 11904: 0xDBE4, + 35408 - 11904: 0xB642, + 35409 - 11904: 0xDBE1, + 35410 - 11904: 0xDBDF, + 35412 - 11904: 0xB640, + 35413 - 11904: 0xB5FB, + 35414 - 11904: 0xB647, + 35415 - 11904: 0xDBDB, + 35416 - 11904: 0xDBDC, + 35417 - 11904: 0xDBD9, + 35419 - 11904: 0xB641, + 35422 - 11904: 0xB5FC, + 35424 - 11904: 0xB5FA, + 35425 - 11904: 0xE048, + 35426 - 11904: 0xB8DF, + 35427 - 11904: 0xB8DA, + 35430 - 11904: 0xB8D5, + 35431 - 11904: 0x9FFD, + 35432 - 11904: 0xB8E5, + 35433 - 11904: 0xB8D6, + 35435 - 11904: 0xB8D2, + 35436 - 11904: 0xB8E1, + 35437 - 11904: 0xB8DE, + 35438 - 11904: 0xB8E0, + 35440 - 11904: 0xB8D7, + 35441 - 11904: 0xB8DC, + 35442 - 11904: 0xB8D3, + 35443 - 11904: 0xB8D4, + 35444 - 11904: 0xE050, + 35445 - 11904: 0xE04D, + 35446 - 11904: 0xE045, + 35447 - 11904: 0xE04A, + 35449 - 11904: 0xB8E2, + 35450 - 11904: 0xE051, + 35451 - 11904: 0xB8E3, + 35452 - 11904: 0xB8D9, + 35454 - 11904: 0xA058, + 35455 - 11904: 0xE047, + 35457 - 11904: 0xE04F, + 35458 - 11904: 0xE04B, + 35459 - 11904: 0xE04E, + 35460 - 11904: 0xE04C, + 35461 - 11904: 0xB8DD, + 35462 - 11904: 0xE046, + 35463 - 11904: 0xB8D8, + 35467 - 11904: 0xE44C, + 35468 - 11904: 0xBB78, + 35469 - 11904: 0xBB7B, + 35471 - 11904: 0xE44E, + 35472 - 11904: 0x8FD6, + 35473 - 11904: 0xBBA5, + 35474 - 11904: 0xE44D, + 35475 - 11904: 0xBB7D, + 35476 - 11904: 0x99D8, + 35477 - 11904: 0xBDCF, + 35478 - 11904: 0xE44F, + 35480 - 11904: 0xBBA4, + 35481 - 11904: 0xE44B, + 35482 - 11904: 0xBBA6, + 35484 - 11904: 0x8FD3, + 35486 - 11904: 0xBB79, + 35488 - 11904: 0xB8DB, + 35489 - 11904: 0xBB7C, + 35491 - 11904: 0xBB7A, + 35492 - 11904: 0xBB7E, + 35493 - 11904: 0xBBA2, + 35494 - 11904: 0xBB77, + 35495 - 11904: 0xBBA7, + 35496 - 11904: 0xBBA3, + 35497 - 11904: 0x8FE5, + 35498 - 11904: 0xBBA1, + 35499 - 11904: 0xE44A, + 35503 - 11904: 0x8FE9, + 35504 - 11904: 0xBDD6, + 35506 - 11904: 0xBDD2, + 35508 - 11904: 0x99D9, + 35510 - 11904: 0xBDD9, + 35512 - 11904: 0xE7D6, + 35513 - 11904: 0xBDDA, + 35514 - 11904: 0xE7E2, + 35515 - 11904: 0xE7DB, + 35516 - 11904: 0xBDCB, + 35517 - 11904: 0xE7E3, + 35518 - 11904: 0xE7DD, + 35519 - 11904: 0xBDD5, + 35520 - 11904: 0xE7DE, + 35522 - 11904: 0xBDD4, + 35523 - 11904: 0xE7E1, + 35524 - 11904: 0xBDCE, + 35525 - 11904: 0xE7DF, + 35526 - 11904: 0xE7D5, + 35527 - 11904: 0xBDCD, + 35528 - 11904: 0xEBAA, + 35529 - 11904: 0xBDD3, + 35531 - 11904: 0xBDD0, + 35532 - 11904: 0x8CF7, + 35533 - 11904: 0xBDD8, + 35535 - 11904: 0xE7D4, + 35537 - 11904: 0xE7D8, + 35538 - 11904: 0xBDCC, + 35539 - 11904: 0xE7D7, + 35540 - 11904: 0xE7D9, + 35541 - 11904: 0xE7DA, + 35542 - 11904: 0xBDD7, + 35543 - 11904: 0xE7DC, + 35544 - 11904: 0xE7E0, + 35545 - 11904: 0xE7E4, + 35546 - 11904: 0x927C, + 35547 - 11904: 0xBDDB, + 35548 - 11904: 0xBFD2, + 35549 - 11904: 0xEBA5, + 35550 - 11904: 0xEBAB, + 35551 - 11904: 0xEBA8, + 35552 - 11904: 0xEB7E, + 35553 - 11904: 0xEBAC, + 35554 - 11904: 0xEBA1, + 35556 - 11904: 0xEBA7, + 35558 - 11904: 0xBFCD, + 35559 - 11904: 0xBFD3, + 35560 - 11904: 0xEBAD, + 35562 - 11904: 0x9C45, + 35563 - 11904: 0xBFCF, + 35565 - 11904: 0xBFD9, + 35566 - 11904: 0xBFD4, + 35567 - 11904: 0xEBAF, + 35568 - 11904: 0xEBA9, + 35569 - 11904: 0xBFD0, + 35570 - 11904: 0xEBA2, + 35571 - 11904: 0xBFDA, + 35572 - 11904: 0xEBA3, + 35573 - 11904: 0xEBA4, + 35574 - 11904: 0xBFDB, + 35575 - 11904: 0xBFD8, + 35576 - 11904: 0xBDD1, + 35577 - 11904: 0x8CE8, + 35578 - 11904: 0xBFCE, + 35579 - 11904: 0xEBB0, + 35580 - 11904: 0xBFDC, + 35582 - 11904: 0xBFD5, + 35583 - 11904: 0xEBAE, + 35584 - 11904: 0xBFD1, + 35585 - 11904: 0xBFD6, + 35586 - 11904: 0xBFD7, + 35588 - 11904: 0xC1C3, + 35589 - 11904: 0xEEA4, + 35590 - 11904: 0xEEAD, + 35591 - 11904: 0xEEAA, + 35592 - 11904: 0xEEAC, + 35594 - 11904: 0xC1C0, + 35595 - 11904: 0xEEA5, + 35596 - 11904: 0x8FDE, + 35597 - 11904: 0xEEAB, + 35598 - 11904: 0xC1BC, + 35599 - 11904: 0xEEA7, + 35600 - 11904: 0xC1C4, + 35601 - 11904: 0xEEA3, + 35602 - 11904: 0xEEA8, + 35603 - 11904: 0xEEAF, + 35604 - 11904: 0xEBA6, + 35605 - 11904: 0xEEA9, + 35606 - 11904: 0xEEA2, + 35607 - 11904: 0xC1BD, + 35608 - 11904: 0xEEA1, + 35609 - 11904: 0xC1BE, + 35610 - 11904: 0xEEB0, + 35611 - 11904: 0xC1BF, + 35612 - 11904: 0xEEAE, + 35613 - 11904: 0xC1C2, + 35614 - 11904: 0xEE7E, + 35615 - 11904: 0x8FDF, + 35616 - 11904: 0xC1C1, + 35618 - 11904: 0xEEA6, + 35619 - 11904: 0xF0DC, + 35620 - 11904: 0xF0EA, + 35621 - 11904: 0xF0E5, + 35622 - 11904: 0xF0E7, + 35623 - 11904: 0xF0DB, + 35624 - 11904: 0xC2D3, + 35626 - 11904: 0xF0DA, + 35627 - 11904: 0xC2D6, + 35628 - 11904: 0xC2D5, + 35629 - 11904: 0xA04B, + 35630 - 11904: 0xF0E9, + 35631 - 11904: 0xF0E1, + 35632 - 11904: 0xF0DE, + 35633 - 11904: 0xF0E4, + 35635 - 11904: 0xF0DD, + 35637 - 11904: 0xF0DF, + 35638 - 11904: 0xF0E8, + 35639 - 11904: 0xF0E6, + 35641 - 11904: 0xC2D4, + 35642 - 11904: 0xF0ED, + 35643 - 11904: 0xF0EB, + 35644 - 11904: 0xF0E2, + 35645 - 11904: 0xF0EC, + 35646 - 11904: 0xF0E3, + 35647 - 11904: 0x8FE2, + 35648 - 11904: 0xF2F9, + 35649 - 11904: 0xC3CF, + 35650 - 11904: 0xF341, + 35651 - 11904: 0xA0CC, + 35653 - 11904: 0xF64F, + 35654 - 11904: 0xC3D6, + 35655 - 11904: 0xF0E0, + 35656 - 11904: 0xF2F7, + 35657 - 11904: 0xC3D2, + 35658 - 11904: 0xF2F8, + 35659 - 11904: 0xF2FD, + 35660 - 11904: 0x8FE3, + 35661 - 11904: 0x8FE4, + 35662 - 11904: 0xC3D4, + 35663 - 11904: 0xC3D5, + 35664 - 11904: 0xF2F6, + 35665 - 11904: 0xF340, + 35666 - 11904: 0xF342, + 35667 - 11904: 0xF2FA, + 35668 - 11904: 0xF2FC, + 35669 - 11904: 0xF2FE, + 35670 - 11904: 0xF2FB, + 35671 - 11904: 0xF343, + 35672 - 11904: 0xC3D1, + 35673 - 11904: 0xC3D7, + 35674 - 11904: 0xC3D3, + 35676 - 11904: 0xC3D0, + 35677 - 11904: 0xF4D0, + 35678 - 11904: 0x9BC4, + 35679 - 11904: 0xC4B7, + 35680 - 11904: 0xF4CE, + 35682 - 11904: 0x9BFC, + 35683 - 11904: 0xF4D2, + 35685 - 11904: 0xF4D3, + 35686 - 11904: 0xC4B5, + 35687 - 11904: 0xF4D4, + 35688 - 11904: 0xF4D1, + 35689 - 11904: 0x964C, + 35690 - 11904: 0xF4CF, + 35691 - 11904: 0xC4B8, + 35692 - 11904: 0xC4B4, + 35693 - 11904: 0xF4D5, + 35695 - 11904: 0xC4B6, + 35696 - 11904: 0xC4B3, + 35700 - 11904: 0xC4FE, + 35703 - 11904: 0xC540, + 35704 - 11904: 0xF64E, + 35705 - 11904: 0xF64D, + 35706 - 11904: 0xF650, + 35707 - 11904: 0xF651, + 35709 - 11904: 0xC541, + 35710 - 11904: 0xF756, + 35711 - 11904: 0xF75B, + 35712 - 11904: 0xC5AA, + 35713 - 11904: 0x9AF6, + 35714 - 11904: 0xF758, + 35715 - 11904: 0x8CAE, + 35716 - 11904: 0xF757, + 35717 - 11904: 0xF75A, + 35718 - 11904: 0xF759, + 35720 - 11904: 0xF843, + 35722 - 11904: 0xC5DC, + 35723 - 11904: 0xF842, + 35724 - 11904: 0xF840, + 35726 - 11904: 0xF841, + 35727 - 11904: 0x87CB, + 35728 - 11904: 0x8FE7, + 35730 - 11904: 0xC5FE, + 35731 - 11904: 0xC5FD, + 35732 - 11904: 0xF8C1, + 35733 - 11904: 0xF8C2, + 35734 - 11904: 0xC640, + 35736 - 11904: 0xF94D, + 35737 - 11904: 0xF94E, + 35738 - 11904: 0xC667, + 35739 - 11904: 0x8FE8, + 35740 - 11904: 0xC66D, + 35742 - 11904: 0xF9A9, + 35743 - 11904: 0xF9C8, + 35744 - 11904: 0x8BE7, + 35774 - 11904: 0x897A, + 35810 - 11904: 0x897B, + 35895 - 11904: 0xA8A6, + 35897 - 11904: 0xD7CD, + 35899 - 11904: 0xD7CE, + 35900 - 11904: 0xE052, + 35901 - 11904: 0xE450, + 35902 - 11904: 0xE7E5, + 35903 - 11904: 0xC1C6, + 35905 - 11904: 0xC1C5, + 35906 - 11904: 0xF0EE, + 35907 - 11904: 0xF344, + 35909 - 11904: 0xF844, + 35910 - 11904: 0xA8A7, + 35911 - 11904: 0xD3DE, + 35912 - 11904: 0xB05A, + 35913 - 11904: 0xB361, + 35914 - 11904: 0xE054, + 35915 - 11904: 0xE053, + 35916 - 11904: 0xBDDC, + 35917 - 11904: 0xE7E6, + 35918 - 11904: 0xBDDD, + 35919 - 11904: 0xEEB1, + 35920 - 11904: 0xC2D7, + 35921 - 11904: 0x99DA, + 35924 - 11904: 0xC676, + 35925 - 11904: 0xA8A8, + 35926 - 11904: 0xCDCB, + 35927 - 11904: 0xD3DF, + 35930 - 11904: 0xB362, + 35932 - 11904: 0xD7CF, + 35933 - 11904: 0xD7D0, + 35935 - 11904: 0xDBE5, + 35937 - 11904: 0xB648, + 35938 - 11904: 0xB8E6, + 35940 - 11904: 0xE056, + 35941 - 11904: 0xE055, + 35942 - 11904: 0xE057, + 35944 - 11904: 0xE451, + 35945 - 11904: 0xE452, + 35946 - 11904: 0xBBA8, + 35947 - 11904: 0xBFDD, + 35948 - 11904: 0xBDDE, + 35949 - 11904: 0xBFDE, + 35951 - 11904: 0xEEB5, + 35952 - 11904: 0xEEB2, + 35953 - 11904: 0xEEB4, + 35954 - 11904: 0xEEB3, + 35955 - 11904: 0xC1C7, + 35957 - 11904: 0xF0EF, + 35958 - 11904: 0xF346, + 35959 - 11904: 0xF345, + 35960 - 11904: 0xCBA4, + 35961 - 11904: 0xB05C, + 35962 - 11904: 0xB05B, + 35963 - 11904: 0xD3E0, + 35965 - 11904: 0xD7D1, + 35968 - 11904: 0xDBE7, + 35969 - 11904: 0xDBE6, + 35970 - 11904: 0xB649, + 35972 - 11904: 0xE059, + 35973 - 11904: 0xE05A, + 35974 - 11904: 0xE058, + 35977 - 11904: 0xB8E8, + 35978 - 11904: 0xB8E7, + 35980 - 11904: 0xBBAA, + 35981 - 11904: 0xBBA9, + 35983 - 11904: 0xE7E7, + 35984 - 11904: 0xEBB3, + 35985 - 11904: 0xEBB1, + 35986 - 11904: 0xEBB2, + 35987 - 11904: 0xBFDF, + 35988 - 11904: 0xEEB7, + 35989 - 11904: 0xEEB6, + 35991 - 11904: 0xF0F2, + 35992 - 11904: 0xF0F1, + 35993 - 11904: 0xF0F0, + 35994 - 11904: 0xF347, + 35995 - 11904: 0x8FED, + 35996 - 11904: 0xF9AA, + 35997 - 11904: 0xA8A9, + 35998 - 11904: 0xAD73, + 35999 - 11904: 0x95C0, + 36000 - 11904: 0xAD74, + 36001 - 11904: 0xB05D, + 36002 - 11904: 0xB05E, + 36003 - 11904: 0xD3E2, + 36004 - 11904: 0xD3E1, + 36005 - 11904: 0xD7D2, + 36007 - 11904: 0xB368, + 36008 - 11904: 0xB366, + 36009 - 11904: 0xB363, + 36010 - 11904: 0xB367, + 36011 - 11904: 0xB365, + 36012 - 11904: 0xB364, + 36013 - 11904: 0xA0CB, + 36015 - 11904: 0xB64A, + 36016 - 11904: 0xDBEA, + 36018 - 11904: 0xB8ED, + 36019 - 11904: 0xB64C, + 36020 - 11904: 0xB651, + 36021 - 11904: 0xDBEC, + 36022 - 11904: 0xB653, + 36023 - 11904: 0xB652, + 36024 - 11904: 0xB655, + 36025 - 11904: 0xDBEB, + 36026 - 11904: 0xDBE8, + 36027 - 11904: 0xB64F, + 36028 - 11904: 0xB64B, + 36029 - 11904: 0xB64D, + 36030 - 11904: 0xDBE9, + 36031 - 11904: 0xB654, + 36032 - 11904: 0xB650, + 36033 - 11904: 0xB64E, + 36034 - 11904: 0xB8EF, + 36035 - 11904: 0xB8EE, + 36036 - 11904: 0xB8EC, + 36037 - 11904: 0xB8F0, + 36039 - 11904: 0xB8EA, + 36040 - 11904: 0xB8EB, + 36042 - 11904: 0xB8E9, + 36044 - 11904: 0xE05B, + 36045 - 11904: 0x9E48, + 36047 - 11904: 0xE454, + 36049 - 11904: 0xBBAC, + 36050 - 11904: 0xBBAD, + 36051 - 11904: 0xBBAB, + 36052 - 11904: 0x99DB, + 36053 - 11904: 0xE453, + 36054 - 11904: 0x8FF3, + 36055 - 11904: 0xE455, + 36057 - 11904: 0xE7EA, + 36058 - 11904: 0xE7EC, + 36059 - 11904: 0x8FF9, + 36060 - 11904: 0xBDE7, + 36061 - 11904: 0xE7ED, + 36062 - 11904: 0xBDE0, + 36063 - 11904: 0xE7E9, + 36064 - 11904: 0xBDDF, + 36065 - 11904: 0xBDE9, + 36066 - 11904: 0xBDE5, + 36067 - 11904: 0xBDE6, + 36068 - 11904: 0xBDE2, + 36069 - 11904: 0xE7E8, + 36070 - 11904: 0xBDE1, + 36071 - 11904: 0xE7EE, + 36072 - 11904: 0xE7EB, + 36073 - 11904: 0x95C1, + 36074 - 11904: 0xBDE8, + 36075 - 11904: 0xA04E, + 36076 - 11904: 0xBDE3, + 36077 - 11904: 0xBDE4, + 36078 - 11904: 0xEBB5, + 36080 - 11904: 0xEBB7, + 36081 - 11904: 0xEBB6, + 36082 - 11904: 0x99DC, + 36083 - 11904: 0xEBB8, + 36084 - 11904: 0xBFE0, + 36085 - 11904: 0xEBB4, + 36087 - 11904: 0xA064, + 36088 - 11904: 0xC1CB, + 36089 - 11904: 0xEEB8, + 36090 - 11904: 0xC1C8, + 36091 - 11904: 0xC1CC, + 36092 - 11904: 0xC1CA, + 36093 - 11904: 0xC1C9, + 36094 - 11904: 0xF0F3, + 36096 - 11904: 0xF0F6, + 36098 - 11904: 0xF0F5, + 36099 - 11904: 0x8FF7, + 36100 - 11904: 0xF0F4, + 36101 - 11904: 0xC2D8, + 36102 - 11904: 0xF348, + 36103 - 11904: 0xF349, + 36104 - 11904: 0xC3D8, + 36105 - 11904: 0xF34A, + 36106 - 11904: 0xC3D9, + 36107 - 11904: 0x89B0, + 36108 - 11904: 0xA048, + 36109 - 11904: 0xC4BA, + 36111 - 11904: 0xC4B9, + 36112 - 11904: 0xF652, + 36113 - 11904: 0x8FFB, + 36114 - 11904: 0x8FF6, + 36115 - 11904: 0xC542, + 36116 - 11904: 0xF653, + 36117 - 11904: 0xF75C, + 36118 - 11904: 0xC5AB, + 36119 - 11904: 0xC5AC, + 36120 - 11904: 0x9DDC, + 36121 - 11904: 0xF845, + 36123 - 11904: 0xC642, + 36124 - 11904: 0x99DD, + 36125 - 11904: 0x8BE8, + 36196 - 11904: 0xA8AA, + 36198 - 11904: 0xB36A, + 36199 - 11904: 0xB369, + 36200 - 11904: 0xE05C, + 36201 - 11904: 0xE05D, + 36203 - 11904: 0xBBAE, + 36204 - 11904: 0xEBB9, + 36205 - 11904: 0xBDEA, + 36206 - 11904: 0xEBBA, + 36207 - 11904: 0xEEB9, + 36208 - 11904: 0xA8AB, + 36210 - 11904: 0xD0B2, + 36211 - 11904: 0xAD76, + 36212 - 11904: 0xAD75, + 36214 - 11904: 0xD3E3, + 36215 - 11904: 0xB05F, + 36216 - 11904: 0xD3E4, + 36217 - 11904: 0xD7D5, + 36218 - 11904: 0x92C1, + 36219 - 11904: 0xD7D4, + 36221 - 11904: 0xD7D3, + 36224 - 11904: 0xDBEE, + 36225 - 11904: 0xB658, + 36226 - 11904: 0x9FD6, + 36228 - 11904: 0xDBED, + 36229 - 11904: 0xB657, + 36233 - 11904: 0xDBEF, + 36234 - 11904: 0xB656, + 36236 - 11904: 0xE05F, + 36237 - 11904: 0xE062, + 36238 - 11904: 0xE060, + 36239 - 11904: 0xE061, + 36240 - 11904: 0xE065, + 36241 - 11904: 0xE05E, + 36242 - 11904: 0xE066, + 36243 - 11904: 0xE063, + 36244 - 11904: 0xE064, + 36245 - 11904: 0xBBB0, + 36246 - 11904: 0xE456, + 36249 - 11904: 0xBBAF, + 36251 - 11904: 0xE7F2, + 36252 - 11904: 0xE7F0, + 36255 - 11904: 0xBDEB, + 36256 - 11904: 0xE7EF, + 36257 - 11904: 0xE7F1, + 36259 - 11904: 0xBDEC, + 36261 - 11904: 0xEBBB, + 36262 - 11904: 0xA0D2, + 36263 - 11904: 0xEBBC, + 36264 - 11904: 0xC1CD, + 36265 - 11904: 0x9040, + 36266 - 11904: 0xF34C, + 36267 - 11904: 0xF34E, + 36268 - 11904: 0xF34B, + 36269 - 11904: 0xF34D, + 36270 - 11904: 0xF4D6, + 36271 - 11904: 0xF654, + 36274 - 11904: 0xF96F, + 36275 - 11904: 0xA8AC, + 36276 - 11904: 0xAD77, + 36277 - 11904: 0xD3E5, + 36278 - 11904: 0xD3E7, + 36279 - 11904: 0xD3E6, + 36281 - 11904: 0xD7D8, + 36282 - 11904: 0xB36C, + 36284 - 11904: 0xD7D6, + 36286 - 11904: 0xB36B, + 36287 - 11904: 0xD7D9, + 36288 - 11904: 0x8AC4, + 36289 - 11904: 0xD7DA, + 36290 - 11904: 0xD7D7, + 36291 - 11904: 0x99E0, + 36293 - 11904: 0xDBFB, + 36294 - 11904: 0xB660, + 36295 - 11904: 0xDBF3, + 36296 - 11904: 0xDBF9, + 36299 - 11904: 0xB65B, + 36300 - 11904: 0xB65E, + 36301 - 11904: 0xDBF2, + 36302 - 11904: 0xB659, + 36303 - 11904: 0xDBF6, + 36304 - 11904: 0xE06C, + 36305 - 11904: 0xB65D, + 36307 - 11904: 0xDBF1, + 36308 - 11904: 0x9FF0, + 36309 - 11904: 0xDBF7, + 36310 - 11904: 0xDBF4, + 36311 - 11904: 0xDBFA, + 36312 - 11904: 0xDBF0, + 36313 - 11904: 0xDBF8, + 36314 - 11904: 0xB65C, + 36315 - 11904: 0xB65F, + 36316 - 11904: 0xDBF5, + 36317 - 11904: 0xB65A, + 36319 - 11904: 0xB8F2, + 36320 - 11904: 0xE068, + 36321 - 11904: 0xB8F1, + 36322 - 11904: 0xE06F, + 36323 - 11904: 0xE06E, + 36324 - 11904: 0xB8F8, + 36326 - 11904: 0xB8F9, + 36327 - 11904: 0xE070, + 36328 - 11904: 0xB8F3, + 36329 - 11904: 0xE06D, + 36330 - 11904: 0xB8F7, + 36331 - 11904: 0xE072, + 36332 - 11904: 0xE069, + 36334 - 11904: 0xE06B, + 36335 - 11904: 0xB8F4, + 36336 - 11904: 0xE067, + 36337 - 11904: 0xE06A, + 36338 - 11904: 0xE071, + 36339 - 11904: 0xB8F5, + 36340 - 11904: 0xE073, + 36346 - 11904: 0xB8F6, + 36348 - 11904: 0xBBB1, + 36349 - 11904: 0xE45B, + 36350 - 11904: 0xE461, + 36351 - 11904: 0xE459, + 36352 - 11904: 0xE462, + 36353 - 11904: 0x9FF3, + 36354 - 11904: 0xE458, + 36355 - 11904: 0xE45D, + 36356 - 11904: 0xE463, + 36357 - 11904: 0xE460, + 36358 - 11904: 0xE45F, + 36359 - 11904: 0xE45E, + 36361 - 11904: 0xE457, + 36362 - 11904: 0xE45C, + 36365 - 11904: 0xE45A, + 36366 - 11904: 0x9DBF, + 36367 - 11904: 0xBDF1, + 36368 - 11904: 0xBDEE, + 36369 - 11904: 0xE7FB, + 36370 - 11904: 0xE841, + 36371 - 11904: 0xE843, + 36372 - 11904: 0xE840, + 36373 - 11904: 0xE7F8, + 36374 - 11904: 0xE7FA, + 36375 - 11904: 0xE845, + 36376 - 11904: 0xE842, + 36377 - 11904: 0xE7FC, + 36378 - 11904: 0xE846, + 36379 - 11904: 0xE7F9, + 36380 - 11904: 0xE844, + 36381 - 11904: 0xBDEF, + 36382 - 11904: 0xBDF5, + 36383 - 11904: 0xBDF3, + 36384 - 11904: 0xE7F3, + 36385 - 11904: 0xBDF4, + 36386 - 11904: 0xBDF0, + 36387 - 11904: 0xE7F4, + 36388 - 11904: 0xE7F6, + 36389 - 11904: 0xE7F5, + 36390 - 11904: 0xE7FD, + 36391 - 11904: 0xE7FE, + 36392 - 11904: 0x9FF6, + 36393 - 11904: 0xBDF2, + 36394 - 11904: 0x95C8, + 36395 - 11904: 0xBDED, + 36397 - 11904: 0x9E5A, + 36398 - 11904: 0xE7F7, + 36400 - 11904: 0xEBC6, + 36401 - 11904: 0xBFE2, + 36403 - 11904: 0xEBBD, + 36404 - 11904: 0xBFE3, + 36405 - 11904: 0xBFE6, + 36406 - 11904: 0xEBC2, + 36408 - 11904: 0xEBBF, + 36409 - 11904: 0xBFE5, + 36410 - 11904: 0x99E3, + 36412 - 11904: 0xEBC3, + 36413 - 11904: 0xEBC4, + 36414 - 11904: 0xEBBE, + 36415 - 11904: 0xEBC7, + 36416 - 11904: 0xEBC0, + 36417 - 11904: 0xEBC5, + 36418 - 11904: 0xBFE4, + 36420 - 11904: 0xBFE1, + 36421 - 11904: 0xEBC1, + 36422 - 11904: 0x8A4A, + 36423 - 11904: 0xEEBF, + 36424 - 11904: 0xC1D0, + 36425 - 11904: 0xC1CE, + 36426 - 11904: 0xC1D1, + 36427 - 11904: 0xC1CF, + 36428 - 11904: 0xEEBE, + 36429 - 11904: 0xEEBB, + 36430 - 11904: 0xEEBA, + 36431 - 11904: 0x9FF1, + 36432 - 11904: 0xEEBD, + 36435 - 11904: 0xEEBC, + 36436 - 11904: 0xF145, + 36437 - 11904: 0xC2DE, + 36438 - 11904: 0xF0FB, + 36439 - 11904: 0xF0FA, + 36441 - 11904: 0xC2D9, + 36442 - 11904: 0xF141, + 36443 - 11904: 0xF140, + 36444 - 11904: 0xF0F7, + 36445 - 11904: 0xF143, + 36446 - 11904: 0xF0FC, + 36447 - 11904: 0xC2DD, + 36448 - 11904: 0xF0F9, + 36449 - 11904: 0xF142, + 36450 - 11904: 0xF0F8, + 36451 - 11904: 0xC2DA, + 36452 - 11904: 0xC2DC, + 36453 - 11904: 0xF0FD, + 36454 - 11904: 0xC2DB, + 36455 - 11904: 0xF0FE, + 36456 - 11904: 0x8AA7, + 36457 - 11904: 0xF144, + 36458 - 11904: 0xF352, + 36460 - 11904: 0xC3DE, + 36461 - 11904: 0xF34F, + 36463 - 11904: 0xF353, + 36465 - 11904: 0x99E6, + 36466 - 11904: 0xC3DB, + 36467 - 11904: 0xF351, + 36468 - 11904: 0xC3E0, + 36469 - 11904: 0x9FF7, + 36470 - 11904: 0xC3DD, + 36471 - 11904: 0x9FED, + 36472 - 11904: 0xF350, + 36474 - 11904: 0xC3DF, + 36475 - 11904: 0xF354, + 36476 - 11904: 0xC3DA, + 36478 - 11904: 0x8A5C, + 36480 - 11904: 0x9DAE, + 36481 - 11904: 0xC4BC, + 36482 - 11904: 0xC4BE, + 36484 - 11904: 0xF4D9, + 36485 - 11904: 0xC4BD, + 36486 - 11904: 0xF4D7, + 36487 - 11904: 0xC3DC, + 36488 - 11904: 0xF4D8, + 36489 - 11904: 0xC4BB, + 36490 - 11904: 0xC543, + 36491 - 11904: 0xC545, + 36492 - 11904: 0xF656, + 36493 - 11904: 0xC544, + 36494 - 11904: 0xF655, + 36496 - 11904: 0xF761, + 36497 - 11904: 0xC5AD, + 36498 - 11904: 0xF760, + 36499 - 11904: 0xC5AE, + 36500 - 11904: 0xF75E, + 36501 - 11904: 0xF75D, + 36502 - 11904: 0xF762, + 36503 - 11904: 0xF763, + 36504 - 11904: 0xF846, + 36506 - 11904: 0xF75F, + 36509 - 11904: 0xF8C6, + 36510 - 11904: 0xF8C3, + 36511 - 11904: 0xF8C4, + 36512 - 11904: 0xF8C5, + 36513 - 11904: 0xC65C, + 36515 - 11904: 0xF951, + 36516 - 11904: 0xF950, + 36517 - 11904: 0xF94F, + 36518 - 11904: 0xF970, + 36519 - 11904: 0x95C9, + 36520 - 11904: 0xF9BE, + 36521 - 11904: 0xF9AB, + 36522 - 11904: 0xC66E, + 36523 - 11904: 0xA8AD, + 36524 - 11904: 0xB060, + 36525 - 11904: 0x9048, + 36528 - 11904: 0x99E8, + 36530 - 11904: 0xB8FA, + 36534 - 11904: 0x9049, + 36537 - 11904: 0x8CBA, + 36538 - 11904: 0xBDF6, + 36540 - 11904: 0x90B1, + 36541 - 11904: 0xEBC8, + 36544 - 11904: 0xC2DF, + 36546 - 11904: 0xF355, + 36547 - 11904: 0x904A, + 36553 - 11904: 0xF9AC, + 36554 - 11904: 0xA8AE, + 36555 - 11904: 0xAAEE, + 36556 - 11904: 0xAD79, + 36557 - 11904: 0xAD78, + 36558 - 11904: 0x99EA, + 36559 - 11904: 0xB063, + 36561 - 11904: 0xD3E8, + 36562 - 11904: 0xB061, + 36563 - 11904: 0xD3E9, + 36564 - 11904: 0xB062, + 36567 - 11904: 0xD7DF, + 36568 - 11904: 0xD7DB, + 36570 - 11904: 0x9BD1, + 36571 - 11904: 0xB36D, + 36572 - 11904: 0xD7DE, + 36573 - 11904: 0xD7DD, + 36574 - 11904: 0xD7DC, + 36575 - 11904: 0xB36E, + 36576 - 11904: 0xD7E0, + 36577 - 11904: 0xD7E1, + 36578 - 11904: 0x99EB, + 36580 - 11904: 0x99EC, + 36581 - 11904: 0xDC43, + 36582 - 11904: 0xDC41, + 36583 - 11904: 0xDC45, + 36584 - 11904: 0xDC46, + 36585 - 11904: 0xDC4C, + 36587 - 11904: 0xDC48, + 36588 - 11904: 0xDC4A, + 36589 - 11904: 0x99ED, + 36590 - 11904: 0xDC42, + 36591 - 11904: 0xDBFC, + 36593 - 11904: 0xDC49, + 36594 - 11904: 0x99EE, + 36596 - 11904: 0xDC4B, + 36597 - 11904: 0xDC44, + 36598 - 11904: 0xDC47, + 36599 - 11904: 0xDBFD, + 36600 - 11904: 0xB662, + 36601 - 11904: 0xDC40, + 36602 - 11904: 0xDBFE, + 36603 - 11904: 0xB661, + 36604 - 11904: 0xB663, + 36606 - 11904: 0xB8FD, + 36607 - 11904: 0xE075, + 36608 - 11904: 0xE077, + 36609 - 11904: 0xE076, + 36610 - 11904: 0xE07B, + 36611 - 11904: 0xB8FB, + 36613 - 11904: 0xE078, + 36614 - 11904: 0xE074, + 36615 - 11904: 0xE079, + 36616 - 11904: 0xE07A, + 36617 - 11904: 0xB8FC, + 36618 - 11904: 0xB8FE, + 36619 - 11904: 0xE07C, + 36621 - 11904: 0xE467, + 36622 - 11904: 0xE466, + 36624 - 11904: 0xE464, + 36625 - 11904: 0xE465, + 36626 - 11904: 0xBBB3, + 36627 - 11904: 0xBBB5, + 36628 - 11904: 0xBBB2, + 36629 - 11904: 0xBBB4, + 36630 - 11904: 0xE84D, + 36631 - 11904: 0xE84E, + 36632 - 11904: 0xE849, + 36633 - 11904: 0x904C, + 36634 - 11904: 0xE84A, + 36635 - 11904: 0xBDF8, + 36636 - 11904: 0xBDFD, + 36637 - 11904: 0xBDF7, + 36638 - 11904: 0xBDFE, + 36639 - 11904: 0xBDF9, + 36640 - 11904: 0xE84B, + 36643 - 11904: 0xE84C, + 36644 - 11904: 0xE848, + 36645 - 11904: 0xBE40, + 36646 - 11904: 0xBDFB, + 36649 - 11904: 0xBDFA, + 36650 - 11904: 0xBDFC, + 36652 - 11904: 0xE847, + 36653 - 11904: 0x904D, + 36654 - 11904: 0xEBCA, + 36655 - 11904: 0xBFE8, + 36656 - 11904: 0x95CB, + 36658 - 11904: 0xEBCC, + 36659 - 11904: 0xBFEA, + 36660 - 11904: 0xEBCF, + 36661 - 11904: 0xEBCB, + 36662 - 11904: 0xEBC9, + 36663 - 11904: 0xEBCE, + 36664 - 11904: 0xBFE9, + 36665 - 11904: 0xEBCD, + 36667 - 11904: 0xBFE7, + 36670 - 11904: 0xC1D3, + 36671 - 11904: 0xC1D6, + 36672 - 11904: 0xEEC1, + 36673 - 11904: 0x97E2, + 36674 - 11904: 0xC1D4, + 36675 - 11904: 0xEEC0, + 36676 - 11904: 0xC1D2, + 36677 - 11904: 0xC1D5, + 36678 - 11904: 0xF146, + 36679 - 11904: 0xF147, + 36680 - 11904: 0xF148, + 36681 - 11904: 0xC2E0, + 36682 - 11904: 0x95CC, + 36683 - 11904: 0xF149, + 36685 - 11904: 0xC2E1, + 36686 - 11904: 0xC3E2, + 36687 - 11904: 0xF358, + 36688 - 11904: 0xF359, + 36689 - 11904: 0xF357, + 36690 - 11904: 0xF356, + 36691 - 11904: 0xF35A, + 36692 - 11904: 0xC3E1, + 36693 - 11904: 0xF4DD, + 36694 - 11904: 0xF4DB, + 36695 - 11904: 0xF4DC, + 36696 - 11904: 0xF4DE, + 36697 - 11904: 0xF4DA, + 36698 - 11904: 0xF4DF, + 36699 - 11904: 0xF658, + 36700 - 11904: 0x9F78, + 36701 - 11904: 0xF659, + 36702 - 11904: 0xF657, + 36703 - 11904: 0xC546, + 36704 - 11904: 0xF764, + 36705 - 11904: 0xC5AF, + 36706 - 11904: 0xF765, + 36707 - 11904: 0xF848, + 36708 - 11904: 0xF847, + 36710 - 11904: 0x897C, + 36711 - 11904: 0x897D, + 36718 - 11904: 0x897E, + 36755 - 11904: 0x995D, + 36763 - 11904: 0xA8AF, + 36764 - 11904: 0xB664, + 36767 - 11904: 0xB940, + 36768 - 11904: 0x9B5A, + 36771 - 11904: 0xBBB6, + 36773 - 11904: 0x9050, + 36774 - 11904: 0xBFEC, + 36775 - 11904: 0x8C4F, + 36776 - 11904: 0xBFEB, + 36781 - 11904: 0xC3E3, + 36782 - 11904: 0xC47C, + 36783 - 11904: 0xC547, + 36784 - 11904: 0xA8B0, + 36785 - 11904: 0xB064, + 36786 - 11904: 0xB941, + 36787 - 11904: 0x9054, + 36788 - 11904: 0xF35B, + 36789 - 11904: 0xC6D6, + 36790 - 11904: 0x9AA8, + 36791 - 11904: 0x99EF, + 36792 - 11904: 0xFEEB, + 36793 - 11904: 0x9DA3, + 36794 - 11904: 0x9DA1, + 36795 - 11904: 0x9943, + 36796 - 11904: 0x9945, + 36798 - 11904: 0x9D7D, + 36799 - 11904: 0xCBA6, + 36801 - 11904: 0x99F0, + 36802 - 11904: 0xA8B1, + 36804 - 11904: 0xA8B4, + 36805 - 11904: 0xA8B3, + 36806 - 11904: 0xA8B2, + 36809 - 11904: 0xCBA5, + 36810 - 11904: 0x99F1, + 36811 - 11904: 0xCDCD, + 36812 - 11904: 0x99F2, + 36813 - 11904: 0xCDCF, + 36814 - 11904: 0xAAEF, + 36815 - 11904: 0x8CBC, + 36816 - 11904: 0x9D60, + 36817 - 11904: 0xAAF1, + 36818 - 11904: 0xCDCC, + 36819 - 11904: 0xCDCE, + 36820 - 11904: 0xAAF0, + 36821 - 11904: 0xCDD1, + 36822 - 11904: 0xCDD0, + 36823 - 11904: 0xCDD2, + 36826 - 11904: 0xA0A3, + 36832 - 11904: 0xD0B6, + 36833 - 11904: 0xD0B4, + 36834 - 11904: 0xAD7C, + 36835 - 11904: 0xD0B3, + 36836 - 11904: 0xADA3, + 36837 - 11904: 0xAD7E, + 36838 - 11904: 0xAD7B, + 36840 - 11904: 0xADA4, + 36842 - 11904: 0xAD7D, + 36843 - 11904: 0xADA2, + 36845 - 11904: 0xADA1, + 36846 - 11904: 0xD0B5, + 36848 - 11904: 0xAD7A, + 36852 - 11904: 0xB06A, + 36853 - 11904: 0xD3EB, + 36854 - 11904: 0xD3F1, + 36855 - 11904: 0xB067, + 36856 - 11904: 0xB06E, + 36857 - 11904: 0x905B, + 36858 - 11904: 0xB069, + 36859 - 11904: 0xD3EE, + 36860 - 11904: 0xD3F0, + 36861 - 11904: 0xB06C, + 36862 - 11904: 0xD3EA, + 36863 - 11904: 0xD3ED, + 36864 - 11904: 0xB068, + 36865 - 11904: 0xB065, + 36866 - 11904: 0xD3EC, + 36867 - 11904: 0xB06B, + 36868 - 11904: 0xD3EF, + 36869 - 11904: 0xB06D, + 36870 - 11904: 0xB066, + 36872 - 11904: 0x9EDB, + 36875 - 11904: 0xD7E3, + 36876 - 11904: 0xD7E6, + 36877 - 11904: 0xB370, + 36879 - 11904: 0xB37A, + 36880 - 11904: 0xB376, + 36881 - 11904: 0xD7E4, + 36882 - 11904: 0x9D79, + 36884 - 11904: 0xB37E, + 36885 - 11904: 0xB377, + 36886 - 11904: 0xB37C, + 36887 - 11904: 0xB372, + 36889 - 11904: 0xB36F, + 36890 - 11904: 0xB371, + 36891 - 11904: 0xB37D, + 36892 - 11904: 0xD7E5, + 36893 - 11904: 0xB375, + 36894 - 11904: 0xB378, + 36895 - 11904: 0xB374, + 36896 - 11904: 0xB379, + 36897 - 11904: 0xD7E7, + 36898 - 11904: 0xB37B, + 36899 - 11904: 0xB373, + 36900 - 11904: 0xD7E2, + 36909 - 11904: 0xDC4D, + 36910 - 11904: 0xB665, + 36911 - 11904: 0xDC4F, + 36913 - 11904: 0xB667, + 36914 - 11904: 0xB669, + 36915 - 11904: 0x99F3, + 36916 - 11904: 0xDC4E, + 36917 - 11904: 0xB666, + 36918 - 11904: 0xB66A, + 36919 - 11904: 0x9062, + 36920 - 11904: 0xB668, + 36924 - 11904: 0xB947, + 36925 - 11904: 0xE0A3, + 36926 - 11904: 0xB94F, + 36927 - 11904: 0xE07E, + 36929 - 11904: 0xB950, + 36930 - 11904: 0xB945, + 36932 - 11904: 0xE0A1, + 36934 - 11904: 0x87BD, + 36935 - 11904: 0xB94A, + 36937 - 11904: 0xE0A2, + 36938 - 11904: 0xB943, + 36939 - 11904: 0xB942, + 36940 - 11904: 0x9F55, + 36941 - 11904: 0xB94D, + 36942 - 11904: 0xB94C, + 36943 - 11904: 0xB94B, + 36944 - 11904: 0xB949, + 36945 - 11904: 0xB94E, + 36946 - 11904: 0xE07D, + 36947 - 11904: 0xB944, + 36948 - 11904: 0xB946, + 36949 - 11904: 0xB948, + 36950 - 11904: 0x9BF9, + 36952 - 11904: 0xBBB8, + 36953 - 11904: 0xBBBB, + 36955 - 11904: 0xBBBF, + 36956 - 11904: 0xBBB9, + 36957 - 11904: 0xBBBE, + 36958 - 11904: 0xBBBC, + 36960 - 11904: 0xBBB7, + 36961 - 11904: 0x9065, + 36962 - 11904: 0xBBBD, + 36963 - 11904: 0xBBBA, + 36964 - 11904: 0x96E0, + 36967 - 11904: 0xE852, + 36968 - 11904: 0xBE43, + 36969 - 11904: 0xBE41, + 36971 - 11904: 0xE853, + 36972 - 11904: 0x98BE, + 36973 - 11904: 0xBE44, + 36974 - 11904: 0xBE42, + 36975 - 11904: 0xE851, + 36976 - 11904: 0xE850, + 36978 - 11904: 0xBFF0, + 36979 - 11904: 0xE84F, + 36980 - 11904: 0xBFEE, + 36981 - 11904: 0xBFED, + 36982 - 11904: 0xEBD0, + 36983 - 11904: 0xBE45, + 36984 - 11904: 0xBFEF, + 36985 - 11904: 0xEBD1, + 36986 - 11904: 0xBFF2, + 36987 - 11904: 0xEBD2, + 36988 - 11904: 0xBFF1, + 36989 - 11904: 0xC1D8, + 36990 - 11904: 0xEEC3, + 36991 - 11904: 0xC1D7, + 36992 - 11904: 0xC1DC, + 36993 - 11904: 0xC1DA, + 36994 - 11904: 0xC1DB, + 36995 - 11904: 0xC2E3, + 36996 - 11904: 0xC1D9, + 36997 - 11904: 0xEEC2, + 36998 - 11904: 0xEBD3, + 36999 - 11904: 0xC2E2, + 37000 - 11904: 0xC2E4, + 37002 - 11904: 0xC3E4, + 37003 - 11904: 0xC3E5, + 37005 - 11904: 0xF4E0, + 37007 - 11904: 0xC5DE, + 37008 - 11904: 0xC5DD, + 37009 - 11904: 0xA8B6, + 37012 - 11904: 0xCA55, + 37013 - 11904: 0xB06F, + 37015 - 11904: 0xCA52, + 37016 - 11904: 0xCA53, + 37017 - 11904: 0xCA51, + 37019 - 11904: 0xCA54, + 37022 - 11904: 0xCBAA, + 37023 - 11904: 0xCBA7, + 37024 - 11904: 0xCBAC, + 37025 - 11904: 0xCBA8, + 37026 - 11904: 0xA8B7, + 37027 - 11904: 0xA8BA, + 37029 - 11904: 0xCBA9, + 37030 - 11904: 0xA8B9, + 37031 - 11904: 0xCBAB, + 37032 - 11904: 0x9068, + 37034 - 11904: 0xA8B8, + 37038 - 11904: 0x906C, + 37039 - 11904: 0xCDD5, + 37040 - 11904: 0xCDD7, + 37041 - 11904: 0xAAF4, + 37042 - 11904: 0xCDD3, + 37043 - 11904: 0xCDD6, + 37044 - 11904: 0xCDD4, + 37045 - 11904: 0xAAF2, + 37046 - 11904: 0xAAF5, + 37048 - 11904: 0xAAF3, + 37051 - 11904: 0x95D8, + 37053 - 11904: 0xD0B8, + 37054 - 11904: 0xD0BC, + 37055 - 11904: 0xD0B9, + 37057 - 11904: 0xADA7, + 37059 - 11904: 0xADA8, + 37060 - 11904: 0x906A, + 37061 - 11904: 0xD0BB, + 37063 - 11904: 0xD0BD, + 37064 - 11904: 0xD0BF, + 37066 - 11904: 0xADA5, + 37067 - 11904: 0xD0BE, + 37070 - 11904: 0xADA6, + 37076 - 11904: 0xD7EE, + 37077 - 11904: 0xD0BA, + 37078 - 11904: 0xD3F2, + 37079 - 11904: 0xD3FB, + 37080 - 11904: 0xD3F9, + 37081 - 11904: 0xD3F4, + 37082 - 11904: 0xD3F5, + 37083 - 11904: 0xD3FA, + 37084 - 11904: 0xD3FC, + 37085 - 11904: 0xB071, + 37087 - 11904: 0xD3F7, + 37088 - 11904: 0xD3F3, + 37089 - 11904: 0xB070, + 37090 - 11904: 0xB072, + 37091 - 11904: 0xD3F6, + 37092 - 11904: 0xD3FD, + 37093 - 11904: 0xD3F8, + 37096 - 11904: 0xB3A1, + 37097 - 11904: 0xD7F1, + 37098 - 11904: 0xD7E9, + 37099 - 11904: 0xD7EF, + 37100 - 11904: 0xD7F0, + 37101 - 11904: 0xB3A2, + 37103 - 11904: 0xD7E8, + 37104 - 11904: 0xD7EA, + 37105 - 11904: 0xD0B7, + 37106 - 11904: 0xD7EC, + 37107 - 11904: 0xD7ED, + 37108 - 11904: 0xD7EB, + 37109 - 11904: 0xB66C, + 37113 - 11904: 0xDC56, + 37114 - 11904: 0xEBD4, + 37115 - 11904: 0xDC57, + 37116 - 11904: 0xDC54, + 37117 - 11904: 0xB3A3, + 37118 - 11904: 0xB66E, + 37119 - 11904: 0xDC53, + 37120 - 11904: 0xDC59, + 37121 - 11904: 0xDC58, + 37122 - 11904: 0xB66B, + 37123 - 11904: 0xDC5C, + 37124 - 11904: 0xDC52, + 37125 - 11904: 0xDC5B, + 37126 - 11904: 0xDC50, + 37127 - 11904: 0xDC5A, + 37128 - 11904: 0xDC55, + 37129 - 11904: 0xB66D, + 37131 - 11904: 0xE0AA, + 37133 - 11904: 0xE0A5, + 37134 - 11904: 0xE0AB, + 37135 - 11904: 0xE0A6, + 37136 - 11904: 0xE0A4, + 37137 - 11904: 0xE0A7, + 37138 - 11904: 0xB951, + 37140 - 11904: 0xE0A9, + 37142 - 11904: 0xE0A8, + 37143 - 11904: 0xB952, + 37144 - 11904: 0xBBC1, + 37145 - 11904: 0xBBC0, + 37146 - 11904: 0xE46E, + 37147 - 11904: 0xE471, + 37148 - 11904: 0xE469, + 37149 - 11904: 0xE46D, + 37150 - 11904: 0xBBC2, + 37151 - 11904: 0xE46C, + 37152 - 11904: 0xE46A, + 37153 - 11904: 0xE470, + 37154 - 11904: 0xE46B, + 37155 - 11904: 0xE468, + 37156 - 11904: 0xE46F, + 37158 - 11904: 0xE859, + 37159 - 11904: 0xBE48, + 37160 - 11904: 0xF14A, + 37161 - 11904: 0xE856, + 37162 - 11904: 0xE857, + 37163 - 11904: 0xE855, + 37164 - 11904: 0xDC51, + 37165 - 11904: 0xBE47, + 37166 - 11904: 0xE85A, + 37167 - 11904: 0xE854, + 37168 - 11904: 0xBE46, + 37169 - 11904: 0xBE49, + 37170 - 11904: 0xE858, + 37171 - 11904: 0xEBD5, + 37172 - 11904: 0xBFF3, + 37173 - 11904: 0xEBD6, + 37174 - 11904: 0xEBD7, + 37176 - 11904: 0xEEC4, + 37177 - 11904: 0xC1DD, + 37178 - 11904: 0xF14B, + 37179 - 11904: 0xF14C, + 37182 - 11904: 0xF14D, + 37183 - 11904: 0xF35D, + 37184 - 11904: 0xF35C, + 37185 - 11904: 0xF4E2, + 37187 - 11904: 0xF4E1, + 37188 - 11904: 0xF65B, + 37189 - 11904: 0xF65C, + 37190 - 11904: 0xF65A, + 37191 - 11904: 0xF766, + 37192 - 11904: 0xC5B0, + 37193 - 11904: 0xA8BB, + 37194 - 11904: 0xADAA, + 37195 - 11904: 0xADA9, + 37196 - 11904: 0xB075, + 37197 - 11904: 0xB074, + 37198 - 11904: 0xD440, + 37199 - 11904: 0xD441, + 37200 - 11904: 0xD3FE, + 37201 - 11904: 0x9FB2, + 37202 - 11904: 0xB073, + 37203 - 11904: 0xD7F5, + 37205 - 11904: 0xD7F6, + 37206 - 11904: 0xD7F2, + 37207 - 11904: 0xB3A4, + 37208 - 11904: 0xD7F3, + 37209 - 11904: 0x9FAE, + 37210 - 11904: 0xD7F4, + 37212 - 11904: 0x9FB0, + 37214 - 11904: 0x89AD, + 37215 - 11904: 0xDC5F, + 37216 - 11904: 0xDC61, + 37217 - 11904: 0xDC5D, + 37218 - 11904: 0xDC60, + 37219 - 11904: 0xB66F, + 37220 - 11904: 0xDC5E, + 37221 - 11904: 0xB670, + 37223 - 11904: 0x906E, + 37224 - 11904: 0xDD73, + 37225 - 11904: 0xB955, + 37226 - 11904: 0xB954, + 37228 - 11904: 0xB953, + 37230 - 11904: 0xE0AC, + 37231 - 11904: 0xE0AD, + 37232 - 11904: 0x9E71, + 37234 - 11904: 0xE473, + 37235 - 11904: 0xE475, + 37236 - 11904: 0xBBC6, + 37237 - 11904: 0xBBC3, + 37238 - 11904: 0x9E4A, + 37239 - 11904: 0xBBC5, + 37240 - 11904: 0xBBC4, + 37241 - 11904: 0xE474, + 37242 - 11904: 0xE472, + 37244 - 11904: 0x9FDC, + 37248 - 11904: 0xE861, + 37249 - 11904: 0xE85E, + 37250 - 11904: 0xE85F, + 37251 - 11904: 0xBE4D, + 37252 - 11904: 0xE860, + 37253 - 11904: 0xE85B, + 37254 - 11904: 0xE85C, + 37255 - 11904: 0xBE4A, + 37257 - 11904: 0xBE4B, + 37258 - 11904: 0xE85D, + 37259 - 11904: 0xBE4C, + 37260 - 11904: 0x89AB, + 37261 - 11904: 0xEBDB, + 37262 - 11904: 0x9FB8, + 37263 - 11904: 0xEBDC, + 37264 - 11904: 0xEBD9, + 37265 - 11904: 0xEBDA, + 37266 - 11904: 0xBFF4, + 37267 - 11904: 0xEBD8, + 37273 - 11904: 0xEEC8, + 37274 - 11904: 0xEEC5, + 37275 - 11904: 0xEEC7, + 37276 - 11904: 0xC1E0, + 37277 - 11904: 0xEECB, + 37278 - 11904: 0xC1DF, + 37279 - 11904: 0xEEC9, + 37280 - 11904: 0xEECC, + 37281 - 11904: 0xEECA, + 37282 - 11904: 0xEEC6, + 37283 - 11904: 0xC1DE, + 37285 - 11904: 0xF14F, + 37287 - 11904: 0xF150, + 37288 - 11904: 0xF14E, + 37289 - 11904: 0x9070, + 37290 - 11904: 0xF152, + 37291 - 11904: 0xC2E5, + 37292 - 11904: 0xC2E6, + 37293 - 11904: 0xF35F, + 37294 - 11904: 0xC3E7, + 37295 - 11904: 0xF151, + 37296 - 11904: 0xF35E, + 37297 - 11904: 0xC3E6, + 37298 - 11904: 0xF4E5, + 37299 - 11904: 0xF4E6, + 37300 - 11904: 0xC4BF, + 37301 - 11904: 0xF4E4, + 37302 - 11904: 0x8B63, + 37303 - 11904: 0xF4E3, + 37305 - 11904: 0xF65D, + 37306 - 11904: 0xC548, + 37307 - 11904: 0x95DC, + 37308 - 11904: 0xF849, + 37309 - 11904: 0xF8C8, + 37310 - 11904: 0xF8C7, + 37312 - 11904: 0xC643, + 37313 - 11904: 0xC65D, + 37314 - 11904: 0xF8C9, + 37315 - 11904: 0xF971, + 37316 - 11904: 0x9071, + 37317 - 11904: 0xC66F, + 37318 - 11904: 0xA8BC, + 37319 - 11904: 0xAAF6, + 37321 - 11904: 0xB956, + 37323 - 11904: 0xC4C0, + 37324 - 11904: 0xA8BD, + 37325 - 11904: 0xADAB, + 37326 - 11904: 0xB3A5, + 37327 - 11904: 0xB671, + 37328 - 11904: 0xC2E7, + 37329 - 11904: 0xAAF7, + 37331 - 11904: 0xD0C1, + 37332 - 11904: 0xD0C0, + 37333 - 11904: 0xD442, + 37334 - 11904: 0xFC5E, + 37335 - 11904: 0xB078, + 37336 - 11904: 0xB076, + 37337 - 11904: 0xB07A, + 37338 - 11904: 0xD444, + 37340 - 11904: 0xB079, + 37341 - 11904: 0xB077, + 37343 - 11904: 0x8949, + 37346 - 11904: 0xD443, + 37347 - 11904: 0xB3A8, + 37348 - 11904: 0xD7FC, + 37349 - 11904: 0x965B, + 37350 - 11904: 0xB3A7, + 37351 - 11904: 0xB3A9, + 37352 - 11904: 0xD842, + 37353 - 11904: 0xB3AB, + 37354 - 11904: 0xD7FE, + 37355 - 11904: 0xD840, + 37356 - 11904: 0xD7F7, + 37357 - 11904: 0xB3AA, + 37358 - 11904: 0xD843, + 37361 - 11904: 0xD7F9, + 37363 - 11904: 0xD7FA, + 37364 - 11904: 0xD7F8, + 37365 - 11904: 0xB3A6, + 37366 - 11904: 0x8C50, + 37367 - 11904: 0xD841, + 37368 - 11904: 0xD7FB, + 37369 - 11904: 0xD7FD, + 37370 - 11904: 0x94A6, + 37373 - 11904: 0xDC6D, + 37374 - 11904: 0x8FD5, + 37375 - 11904: 0xDC6C, + 37376 - 11904: 0xDC6A, + 37377 - 11904: 0xDC62, + 37378 - 11904: 0xDC71, + 37379 - 11904: 0xDC65, + 37380 - 11904: 0xDC6F, + 37381 - 11904: 0xDC76, + 37382 - 11904: 0xDC6E, + 37383 - 11904: 0xB679, + 37384 - 11904: 0x9E73, + 37385 - 11904: 0xB675, + 37386 - 11904: 0xDC63, + 37388 - 11904: 0xDC69, + 37389 - 11904: 0xB677, + 37390 - 11904: 0x9075, + 37391 - 11904: 0xDC68, + 37392 - 11904: 0xB678, + 37393 - 11904: 0xB67A, + 37394 - 11904: 0xDC6B, + 37395 - 11904: 0x99F7, + 37396 - 11904: 0xB672, + 37397 - 11904: 0xB673, + 37398 - 11904: 0xDC77, + 37399 - 11904: 0xDC75, + 37400 - 11904: 0x87B2, + 37401 - 11904: 0xDC74, + 37402 - 11904: 0xDC66, + 37404 - 11904: 0xDC72, + 37406 - 11904: 0xB676, + 37409 - 11904: 0x8CBF, + 37411 - 11904: 0xB674, + 37412 - 11904: 0xDC73, + 37413 - 11904: 0xDC64, + 37414 - 11904: 0xDC67, + 37415 - 11904: 0xDC70, + 37416 - 11904: 0x99F9, + 37418 - 11904: 0x9663, + 37419 - 11904: 0x95B9, + 37421 - 11904: 0xE4BA, + 37422 - 11904: 0xE0B7, + 37424 - 11904: 0xE0B0, + 37425 - 11904: 0xE0C3, + 37426 - 11904: 0xE0CC, + 37427 - 11904: 0xE0B3, + 37428 - 11904: 0xB961, + 37429 - 11904: 0x94D4, + 37430 - 11904: 0xE0C0, + 37431 - 11904: 0xB957, + 37432 - 11904: 0xB959, + 37433 - 11904: 0xB965, + 37434 - 11904: 0xE0B1, + 37436 - 11904: 0xFCFA, + 37437 - 11904: 0xB95A, + 37438 - 11904: 0xB95C, + 37439 - 11904: 0xB966, + 37440 - 11904: 0xB95B, + 37441 - 11904: 0x9077, + 37444 - 11904: 0x90AB, + 37445 - 11904: 0xB964, + 37446 - 11904: 0xE0B9, + 37448 - 11904: 0xE0AE, + 37449 - 11904: 0xB962, + 37450 - 11904: 0xE0B8, + 37451 - 11904: 0xB95E, + 37452 - 11904: 0xE0CA, + 37453 - 11904: 0xB963, + 37454 - 11904: 0xE0C8, + 37455 - 11904: 0xE0BC, + 37456 - 11904: 0xE0C6, + 37457 - 11904: 0xB960, + 37458 - 11904: 0xE0AF, + 37459 - 11904: 0xE0C9, + 37460 - 11904: 0xE0C4, + 37461 - 11904: 0x9D4D, + 37462 - 11904: 0xE0CB, + 37463 - 11904: 0xB958, + 37464 - 11904: 0x99FA, + 37466 - 11904: 0xB967, + 37467 - 11904: 0xB95D, + 37469 - 11904: 0x92E3, + 37470 - 11904: 0xE0B5, + 37471 - 11904: 0x97BB, + 37472 - 11904: 0xE0BD, + 37473 - 11904: 0xE0C1, + 37474 - 11904: 0x9078, + 37475 - 11904: 0xE0C5, + 37476 - 11904: 0xB95F, + 37477 - 11904: 0xE0B4, + 37478 - 11904: 0xE0B2, + 37479 - 11904: 0xE0BE, + 37483 - 11904: 0x99FB, + 37484 - 11904: 0xE0BB, + 37485 - 11904: 0xE0BA, + 37486 - 11904: 0x97E0, + 37487 - 11904: 0xE0BF, + 37488 - 11904: 0xE0C2, + 37490 - 11904: 0xE0C7, + 37494 - 11904: 0xE478, + 37495 - 11904: 0x96DC, + 37496 - 11904: 0xBBC7, + 37497 - 11904: 0xE4A4, + 37498 - 11904: 0xE47A, + 37499 - 11904: 0xBBCC, + 37500 - 11904: 0xBBD0, + 37501 - 11904: 0xE4AD, + 37502 - 11904: 0xE4B5, + 37503 - 11904: 0xE4A6, + 37504 - 11904: 0xBBC8, + 37505 - 11904: 0x9CA8, + 37506 - 11904: 0xE4AA, + 37507 - 11904: 0xE0B6, + 37508 - 11904: 0x9772, + 37509 - 11904: 0xBBC9, + 37510 - 11904: 0xE4B1, + 37511 - 11904: 0xE4B6, + 37512 - 11904: 0xE4AE, + 37513 - 11904: 0x9440, + 37514 - 11904: 0xE4B0, + 37515 - 11904: 0xE4B9, + 37516 - 11904: 0xE4B2, + 37517 - 11904: 0xE47E, + 37518 - 11904: 0xE4A9, + 37519 - 11904: 0x92F2, + 37521 - 11904: 0xBBD1, + 37523 - 11904: 0xBBCD, + 37524 - 11904: 0xE47C, + 37525 - 11904: 0xE4AB, + 37526 - 11904: 0xBBCB, + 37527 - 11904: 0xE4A5, + 37528 - 11904: 0xBBCA, + 37529 - 11904: 0xE4B3, + 37530 - 11904: 0xE4A2, + 37531 - 11904: 0xE479, + 37532 - 11904: 0xBBCE, + 37533 - 11904: 0xE4B8, + 37536 - 11904: 0xE47B, + 37537 - 11904: 0xE4AF, + 37538 - 11904: 0xE4AC, + 37539 - 11904: 0xE4A7, + 37540 - 11904: 0xE477, + 37541 - 11904: 0xE476, + 37542 - 11904: 0xE4A1, + 37543 - 11904: 0xE4B4, + 37544 - 11904: 0xBBCF, + 37545 - 11904: 0xE4B7, + 37546 - 11904: 0xE47D, + 37547 - 11904: 0xE4A3, + 37548 - 11904: 0xBE52, + 37550 - 11904: 0x99FD, + 37553 - 11904: 0x99FC, + 37554 - 11904: 0xBE5A, + 37555 - 11904: 0xBE55, + 37556 - 11904: 0xE8A4, + 37557 - 11904: 0xE8A1, + 37558 - 11904: 0xE867, + 37559 - 11904: 0xBE50, + 37561 - 11904: 0xF9D7, + 37562 - 11904: 0x964A, + 37563 - 11904: 0xBE4F, + 37564 - 11904: 0xBE56, + 37566 - 11904: 0x96D8, + 37567 - 11904: 0x99FE, + 37568 - 11904: 0xE865, + 37569 - 11904: 0xBE54, + 37570 - 11904: 0xE871, + 37571 - 11904: 0xE863, + 37572 - 11904: 0xE864, + 37573 - 11904: 0xBE4E, + 37574 - 11904: 0xE8A3, + 37575 - 11904: 0xBE58, + 37576 - 11904: 0xE874, + 37577 - 11904: 0xE879, + 37578 - 11904: 0xE873, + 37579 - 11904: 0xEBEE, + 37580 - 11904: 0xE86F, + 37581 - 11904: 0xE877, + 37582 - 11904: 0xE875, + 37583 - 11904: 0xE868, + 37584 - 11904: 0xE862, + 37585 - 11904: 0xE87D, + 37586 - 11904: 0xBE57, + 37587 - 11904: 0xE87E, + 37588 - 11904: 0x904B, + 37589 - 11904: 0xE878, + 37591 - 11904: 0xE86D, + 37592 - 11904: 0xE86B, + 37593 - 11904: 0xE866, + 37595 - 11904: 0xFA41, + 37597 - 11904: 0xE86E, + 37598 - 11904: 0xE87B, + 37599 - 11904: 0xE86A, + 37600 - 11904: 0xE87A, + 37601 - 11904: 0xE8A2, + 37603 - 11904: 0x9A40, + 37604 - 11904: 0xBE53, + 37605 - 11904: 0x975B, + 37606 - 11904: 0xE876, + 37607 - 11904: 0xE87C, + 37608 - 11904: 0xE872, + 37609 - 11904: 0xE86C, + 37610 - 11904: 0xBE51, + 37611 - 11904: 0x9A41, + 37612 - 11904: 0x91DD, + 37614 - 11904: 0xE4A8, + 37615 - 11904: 0xE870, + 37616 - 11904: 0xBE59, + 37617 - 11904: 0xE869, + 37618 - 11904: 0x93FC, + 37619 - 11904: 0x9A42, + 37620 - 11904: 0x9A43, + 37622 - 11904: 0x9659, + 37623 - 11904: 0xEBF4, + 37624 - 11904: 0xBFF7, + 37625 - 11904: 0xEBF3, + 37626 - 11904: 0xEBF0, + 37627 - 11904: 0xEC44, + 37628 - 11904: 0xBFFB, + 37629 - 11904: 0x9A44, + 37630 - 11904: 0xEC41, + 37631 - 11904: 0xEBF8, + 37632 - 11904: 0xEC43, + 37633 - 11904: 0xEBE9, + 37634 - 11904: 0xEBF6, + 37635 - 11904: 0x9051, + 37636 - 11904: 0xBFFD, + 37638 - 11904: 0xEBE1, + 37639 - 11904: 0x94BF, + 37640 - 11904: 0xEBDF, + 37641 - 11904: 0xEC42, + 37643 - 11904: 0xEC40, + 37644 - 11904: 0xEBFE, + 37645 - 11904: 0xEBED, + 37646 - 11904: 0xEBEC, + 37647 - 11904: 0xEBE2, + 37648 - 11904: 0xC040, + 37650 - 11904: 0xEBE8, + 37651 - 11904: 0xEBF2, + 37652 - 11904: 0xEBFD, + 37653 - 11904: 0xC043, + 37654 - 11904: 0xEC45, + 37656 - 11904: 0xC1E8, + 37657 - 11904: 0xC045, + 37658 - 11904: 0xBFFE, + 37659 - 11904: 0xEBE6, + 37661 - 11904: 0xEBEF, + 37662 - 11904: 0xEBDE, + 37663 - 11904: 0xEBE0, + 37664 - 11904: 0xBFF5, + 37665 - 11904: 0xC042, + 37666 - 11904: 0xBFFA, + 37667 - 11904: 0xEBE7, + 37668 - 11904: 0xEBF7, + 37669 - 11904: 0xEBF1, + 37670 - 11904: 0xC041, + 37671 - 11904: 0xEBDD, + 37672 - 11904: 0xC1E3, + 37673 - 11904: 0xEBF9, + 37674 - 11904: 0xEBFC, + 37675 - 11904: 0xBFFC, + 37676 - 11904: 0x90A2, + 37677 - 11904: 0xEBEB, + 37678 - 11904: 0xC044, + 37679 - 11904: 0xBFF9, + 37680 - 11904: 0x9CAB, + 37681 - 11904: 0x9776, + 37683 - 11904: 0xBFF8, + 37684 - 11904: 0xEBF5, + 37685 - 11904: 0xEBFB, + 37686 - 11904: 0xBFF6, + 37688 - 11904: 0xEBE4, + 37689 - 11904: 0xEBFA, + 37692 - 11904: 0xEBE5, + 37696 - 11904: 0xFC55, + 37697 - 11904: 0xFE45, + 37698 - 11904: 0x94A8, + 37699 - 11904: 0x9A45, + 37700 - 11904: 0xFA4B, + 37701 - 11904: 0x9DE1, + 37702 - 11904: 0xEBEA, + 37703 - 11904: 0xEED2, + 37704 - 11904: 0x96D9, + 37705 - 11904: 0xEED7, + 37706 - 11904: 0xC1E5, + 37707 - 11904: 0xC1E7, + 37708 - 11904: 0xEEDD, + 37709 - 11904: 0xC1E1, + 37710 - 11904: 0xEEEC, + 37711 - 11904: 0xEEE3, + 37712 - 11904: 0xEED8, + 37713 - 11904: 0xEED9, + 37714 - 11904: 0xEEE2, + 37716 - 11904: 0xC1EE, + 37717 - 11904: 0xEEE1, + 37718 - 11904: 0xEED1, + 37719 - 11904: 0xEEE0, + 37720 - 11904: 0xEED4, + 37721 - 11904: 0xEEED, + 37722 - 11904: 0xC1ED, + 37723 - 11904: 0xC1EB, + 37724 - 11904: 0xEED5, + 37726 - 11904: 0xEEE8, + 37727 - 11904: 0x9774, + 37728 - 11904: 0xEEDA, + 37729 - 11904: 0xEEE7, + 37730 - 11904: 0xFDF5, + 37731 - 11904: 0xEEE9, + 37732 - 11904: 0xEED0, + 37733 - 11904: 0xC1E6, + 37734 - 11904: 0x92E5, + 37735 - 11904: 0xEEEA, + 37736 - 11904: 0x9645, + 37737 - 11904: 0x91DA, + 37738 - 11904: 0xEEDE, + 37739 - 11904: 0x90A3, + 37740 - 11904: 0xC1EA, + 37741 - 11904: 0xEEDB, + 37742 - 11904: 0xA05F, + 37744 - 11904: 0xC1EC, + 37745 - 11904: 0xEEE4, + 37747 - 11904: 0x90AF, + 37748 - 11904: 0x97BF, + 37749 - 11904: 0xC1E4, + 37750 - 11904: 0xEED6, + 37751 - 11904: 0xEEE5, + 37752 - 11904: 0x914C, + 37753 - 11904: 0xEEDF, + 37754 - 11904: 0xEBE3, + 37755 - 11904: 0xEEE6, + 37756 - 11904: 0xEED3, + 37757 - 11904: 0x967A, + 37758 - 11904: 0xC1E9, + 37760 - 11904: 0xEEEB, + 37761 - 11904: 0x91DE, + 37762 - 11904: 0xC1E2, + 37763 - 11904: 0xEECE, + 37764 - 11904: 0x9A46, + 37765 - 11904: 0xFEB0, + 37766 - 11904: 0x9779, + 37767 - 11904: 0x946C, + 37768 - 11904: 0xF160, + 37769 - 11904: 0xF159, + 37770 - 11904: 0xC2E9, + 37772 - 11904: 0xF154, + 37773 - 11904: 0xF163, + 37774 - 11904: 0xF15B, + 37775 - 11904: 0xEEDC, + 37776 - 11904: 0x9858, + 37777 - 11904: 0xF165, + 37778 - 11904: 0xF155, + 37780 - 11904: 0xC2E8, + 37781 - 11904: 0xF15F, + 37782 - 11904: 0xC2EA, + 37783 - 11904: 0xC2F2, + 37784 - 11904: 0xC2F0, + 37785 - 11904: 0xF161, + 37786 - 11904: 0xC2F1, + 37787 - 11904: 0xF157, + 37788 - 11904: 0x9266, + 37789 - 11904: 0xF158, + 37790 - 11904: 0xF15D, + 37791 - 11904: 0xF162, + 37792 - 11904: 0x93FB, + 37793 - 11904: 0xEECD, + 37794 - 11904: 0xC2EB, + 37795 - 11904: 0xF16A, + 37796 - 11904: 0xF167, + 37797 - 11904: 0xF16B, + 37798 - 11904: 0xF15E, + 37799 - 11904: 0xF15A, + 37800 - 11904: 0xF168, + 37801 - 11904: 0xF36A, + 37802 - 11904: 0xF15C, + 37804 - 11904: 0xC2EE, + 37805 - 11904: 0x9A47, + 37806 - 11904: 0xC2ED, + 37807 - 11904: 0xEECF, + 37808 - 11904: 0xC2EF, + 37809 - 11904: 0xF164, + 37810 - 11904: 0xF166, + 37811 - 11904: 0xC2EC, + 37812 - 11904: 0xF169, + 37813 - 11904: 0xF153, + 37815 - 11904: 0xF156, + 37816 - 11904: 0x9749, + 37819 - 11904: 0x9748, + 37821 - 11904: 0x934A, + 37823 - 11904: 0x9CE2, + 37824 - 11904: 0xF373, + 37826 - 11904: 0xF363, + 37827 - 11904: 0xC3EB, + 37828 - 11904: 0xF371, + 37830 - 11904: 0x9264, + 37831 - 11904: 0xF361, + 37832 - 11904: 0xC3EC, + 37834 - 11904: 0xF36C, + 37835 - 11904: 0x91DF, + 37836 - 11904: 0xF368, + 37837 - 11904: 0xC3F1, + 37838 - 11904: 0xF372, + 37839 - 11904: 0xF362, + 37840 - 11904: 0xF365, + 37841 - 11904: 0xC3E9, + 37842 - 11904: 0xF374, + 37843 - 11904: 0xFB79, + 37844 - 11904: 0xF36D, + 37845 - 11904: 0xF370, + 37846 - 11904: 0xC3EF, + 37847 - 11904: 0xC3F4, + 37848 - 11904: 0xC3F2, + 37849 - 11904: 0xF369, + 37850 - 11904: 0xF364, + 37851 - 11904: 0x96D7, + 37852 - 11904: 0xC3ED, + 37853 - 11904: 0xC3EE, + 37854 - 11904: 0xF360, + 37855 - 11904: 0xC3EA, + 37856 - 11904: 0x9343, + 37857 - 11904: 0xC3E8, + 37858 - 11904: 0xC3F0, + 37859 - 11904: 0xF36F, + 37860 - 11904: 0xC3F3, + 37862 - 11904: 0xF36B, + 37863 - 11904: 0xF375, + 37864 - 11904: 0xC3F5, + 37868 - 11904: 0xF367, + 37870 - 11904: 0xF36E, + 37872 - 11904: 0xFDCB, + 37873 - 11904: 0xFE7A, + 37875 - 11904: 0x91DB, + 37876 - 11904: 0x8C6A, + 37877 - 11904: 0xF4F3, + 37878 - 11904: 0xF542, + 37879 - 11904: 0xF4F5, + 37880 - 11904: 0xF4FC, + 37881 - 11904: 0xF366, + 37882 - 11904: 0xF4FA, + 37883 - 11904: 0xF4E9, + 37884 - 11904: 0xF540, + 37885 - 11904: 0xC4C3, + 37886 - 11904: 0xF4ED, + 37887 - 11904: 0xF4FE, + 37888 - 11904: 0xF4F4, + 37889 - 11904: 0x97AF, + 37891 - 11904: 0xC4C2, + 37892 - 11904: 0x95DD, + 37894 - 11904: 0xF544, + 37895 - 11904: 0xF4F6, + 37896 - 11904: 0x9348, + 37897 - 11904: 0xF4FB, + 37898 - 11904: 0xF4FD, + 37899 - 11904: 0xF4E7, + 37900 - 11904: 0xF541, + 37901 - 11904: 0xF4F2, + 37902 - 11904: 0xF4F7, + 37903 - 11904: 0xF4EB, + 37904 - 11904: 0xF4EF, + 37905 - 11904: 0xF543, + 37906 - 11904: 0xF4F9, + 37907 - 11904: 0xF4E8, + 37908 - 11904: 0xF4EC, + 37909 - 11904: 0xF4EE, + 37910 - 11904: 0xF4F8, + 37911 - 11904: 0x9A4B, + 37912 - 11904: 0xC4C1, + 37913 - 11904: 0xF4F1, + 37915 - 11904: 0xFC45, + 37917 - 11904: 0x9A4D, + 37920 - 11904: 0xF4EA, + 37924 - 11904: 0x91BC, + 37925 - 11904: 0x90E2, + 37926 - 11904: 0x90B4, + 37927 - 11904: 0x95E1, + 37928 - 11904: 0xF4F0, + 37929 - 11904: 0xF661, + 37930 - 11904: 0xF666, + 37931 - 11904: 0xC54F, + 37932 - 11904: 0xF668, + 37933 - 11904: 0x9A4E, + 37934 - 11904: 0xC549, + 37935 - 11904: 0x87AD, + 37936 - 11904: 0xF664, + 37937 - 11904: 0xF66A, + 37938 - 11904: 0xC54E, + 37939 - 11904: 0xC54A, + 37941 - 11904: 0xC54B, + 37942 - 11904: 0xF660, + 37943 - 11904: 0xF667, + 37944 - 11904: 0xC54D, + 37945 - 11904: 0xF665, + 37946 - 11904: 0xC54C, + 37947 - 11904: 0xF65F, + 37948 - 11904: 0xF663, + 37949 - 11904: 0xF662, + 37950 - 11904: 0x9A4F, + 37951 - 11904: 0xF65E, + 37952 - 11904: 0xF669, + 37954 - 11904: 0xFE40, + 37955 - 11904: 0xFE43, + 37956 - 11904: 0xC5B1, + 37957 - 11904: 0xF76D, + 37958 - 11904: 0xF770, + 37959 - 11904: 0xF76C, + 37960 - 11904: 0xF76E, + 37961 - 11904: 0xF76F, + 37962 - 11904: 0xF769, + 37963 - 11904: 0xF76A, + 37964 - 11904: 0xF767, + 37965 - 11904: 0x96DD, + 37967 - 11904: 0xF76B, + 37968 - 11904: 0xF768, + 37969 - 11904: 0xC5B2, + 37970 - 11904: 0xC5B3, + 37972 - 11904: 0x9A51, + 37973 - 11904: 0xF84B, + 37975 - 11904: 0xF84D, + 37976 - 11904: 0x96A7, + 37979 - 11904: 0x90B0, + 37981 - 11904: 0xF84C, + 37982 - 11904: 0xF84E, + 37984 - 11904: 0xC5E0, + 37986 - 11904: 0xF84A, + 37987 - 11904: 0xC5DF, + 37988 - 11904: 0xC5E1, + 37989 - 11904: 0x9C4E, + 37991 - 11904: 0x9443, + 37992 - 11904: 0xF8CB, + 37993 - 11904: 0xF8CC, + 37994 - 11904: 0xC644, + 37995 - 11904: 0xF8CA, + 37996 - 11904: 0x8EBA, + 37997 - 11904: 0xF953, + 37998 - 11904: 0xF952, + 37999 - 11904: 0xF954, + 38000 - 11904: 0xC65F, + 38001 - 11904: 0xF955, + 38002 - 11904: 0xC65E, + 38003 - 11904: 0xF956, + 38004 - 11904: 0xF972, + 38005 - 11904: 0xF975, + 38006 - 11904: 0xF974, + 38007 - 11904: 0xC668, + 38008 - 11904: 0xF973, + 38009 - 11904: 0x9A52, + 38011 - 11904: 0xFCC1, + 38012 - 11904: 0xC672, + 38013 - 11904: 0xC670, + 38014 - 11904: 0xC671, + 38015 - 11904: 0xC677, + 38016 - 11904: 0xF9C0, + 38017 - 11904: 0xF9C1, + 38018 - 11904: 0xF9BF, + 38019 - 11904: 0xF9C9, + 38021 - 11904: 0x8BE9, + 38047 - 11904: 0x9CAF, + 38050 - 11904: 0x8BFD, + 38081 - 11904: 0x9ABC, + 38083 - 11904: 0x9AB8, + 38108 - 11904: 0x9AAE, + 38134 - 11904: 0x9AA7, + 38189 - 11904: 0x9A53, + 38215 - 11904: 0x9D74, + 38263 - 11904: 0xAAF8, + 38264 - 11904: 0x8BEA, + 38266 - 11904: 0xD844, + 38267 - 11904: 0xDC78, + 38268 - 11904: 0xE8A5, + 38269 - 11904: 0xF376, + 38271 - 11904: 0x8BEB, + 38272 - 11904: 0xAAF9, + 38274 - 11904: 0xADAC, + 38275 - 11904: 0xB07B, + 38277 - 11904: 0x90B2, + 38278 - 11904: 0xD845, + 38280 - 11904: 0xD846, + 38281 - 11904: 0xB3AC, + 38283 - 11904: 0xB67D, + 38284 - 11904: 0xDC7A, + 38285 - 11904: 0xDC79, + 38286 - 11904: 0xB6A3, + 38287 - 11904: 0xB67C, + 38288 - 11904: 0xDC7B, + 38289 - 11904: 0xB67E, + 38290 - 11904: 0xB6A2, + 38291 - 11904: 0xB6A1, + 38292 - 11904: 0xB67B, + 38294 - 11904: 0x95E9, + 38295 - 11904: 0x95E8, + 38296 - 11904: 0xB968, + 38297 - 11904: 0x95E6, + 38299 - 11904: 0xE0D0, + 38300 - 11904: 0xE0CE, + 38302 - 11904: 0xE0CF, + 38303 - 11904: 0xE0CD, + 38304 - 11904: 0x90B5, + 38305 - 11904: 0xBBD2, + 38306 - 11904: 0x9A54, + 38307 - 11904: 0xBBD5, + 38308 - 11904: 0xBBD7, + 38309 - 11904: 0xBBD6, + 38310 - 11904: 0x90B3, + 38311 - 11904: 0x95E7, + 38312 - 11904: 0xBBD3, + 38313 - 11904: 0xBBD4, + 38314 - 11904: 0x8B50, + 38315 - 11904: 0xE8A7, + 38316 - 11904: 0xE8A6, + 38317 - 11904: 0xBE5B, + 38318 - 11904: 0xE8A8, + 38320 - 11904: 0xE8A9, + 38321 - 11904: 0xBE5C, + 38325 - 11904: 0xEC4D, + 38326 - 11904: 0xEC4B, + 38327 - 11904: 0xEEF3, + 38329 - 11904: 0xEC49, + 38330 - 11904: 0xEC4A, + 38331 - 11904: 0xC046, + 38332 - 11904: 0xEC46, + 38333 - 11904: 0xEC4E, + 38334 - 11904: 0xEC48, + 38335 - 11904: 0xEC4C, + 38336 - 11904: 0xEEEF, + 38339 - 11904: 0xEEF1, + 38341 - 11904: 0xEEF2, + 38342 - 11904: 0xC1F3, + 38343 - 11904: 0xEEEE, + 38344 - 11904: 0xC1F2, + 38345 - 11904: 0xEEF0, + 38346 - 11904: 0xC1EF, + 38347 - 11904: 0xC1F0, + 38348 - 11904: 0xC1F1, + 38349 - 11904: 0xEC47, + 38352 - 11904: 0xC2F5, + 38353 - 11904: 0xF16E, + 38354 - 11904: 0xF16C, + 38355 - 11904: 0xF16D, + 38356 - 11904: 0xC2F3, + 38357 - 11904: 0xC2F6, + 38358 - 11904: 0xC2F4, + 38362 - 11904: 0xF377, + 38363 - 11904: 0xF378, + 38364 - 11904: 0xC3F6, + 38366 - 11904: 0xF545, + 38367 - 11904: 0xF547, + 38368 - 11904: 0xF546, + 38369 - 11904: 0xC4C4, + 38370 - 11904: 0xC550, + 38371 - 11904: 0xF66D, + 38372 - 11904: 0xF66C, + 38373 - 11904: 0xF66B, + 38376 - 11904: 0x8BEC, + 38388 - 11904: 0x9A56, + 38428 - 11904: 0xAAFA, + 38429 - 11904: 0x8BFB, + 38430 - 11904: 0xC9AA, + 38432 - 11904: 0xCA58, + 38433 - 11904: 0xA6E9, + 38434 - 11904: 0xCA56, + 38435 - 11904: 0xCA59, + 38436 - 11904: 0xCA57, + 38440 - 11904: 0xCBAE, + 38442 - 11904: 0xA8C1, + 38444 - 11904: 0xA8C2, + 38445 - 11904: 0xCBB0, + 38446 - 11904: 0xA8BF, + 38447 - 11904: 0xCBAF, + 38448 - 11904: 0xCBAD, + 38449 - 11904: 0xA8C0, + 38450 - 11904: 0xA8BE, + 38451 - 11904: 0x9A57, + 38456 - 11904: 0xA0AA, + 38457 - 11904: 0xCDD8, + 38458 - 11904: 0xCDDB, + 38459 - 11904: 0xAAFD, + 38460 - 11904: 0xCDDA, + 38461 - 11904: 0xCDD9, + 38463 - 11904: 0xAAFC, + 38464 - 11904: 0xAAFB, + 38465 - 11904: 0x9FA6, + 38466 - 11904: 0xAB40, + 38467 - 11904: 0xCDDC, + 38468 - 11904: 0xAAFE, + 38469 - 11904: 0x99CC, + 38474 - 11904: 0xD0C6, + 38475 - 11904: 0xADAE, + 38476 - 11904: 0xADAF, + 38477 - 11904: 0xADB0, + 38478 - 11904: 0xD0C7, + 38479 - 11904: 0xD0C3, + 38480 - 11904: 0xADAD, + 38481 - 11904: 0xD0C4, + 38483 - 11904: 0xD0C5, + 38484 - 11904: 0xD0C2, + 38486 - 11904: 0x9C59, + 38488 - 11904: 0xB0A4, + 38491 - 11904: 0xB0A1, + 38492 - 11904: 0xD445, + 38493 - 11904: 0xB0A2, + 38494 - 11904: 0xB0A5, + 38495 - 11904: 0xD446, + 38497 - 11904: 0xB07E, + 38498 - 11904: 0xB07C, + 38499 - 11904: 0xB07D, + 38500 - 11904: 0xB0A3, + 38505 - 11904: 0x99B5, + 38506 - 11904: 0xB3AD, + 38507 - 11904: 0xD849, + 38508 - 11904: 0xB3B5, + 38509 - 11904: 0xD848, + 38511 - 11904: 0xD84B, + 38512 - 11904: 0xB3B1, + 38513 - 11904: 0xD84A, + 38514 - 11904: 0xB6AB, + 38515 - 11904: 0xB3AF, + 38516 - 11904: 0xB3B2, + 38517 - 11904: 0xB3AE, + 38518 - 11904: 0xB3B3, + 38519 - 11904: 0xB3B4, + 38520 - 11904: 0xB3B0, + 38523 - 11904: 0x90BE, + 38524 - 11904: 0xD847, + 38525 - 11904: 0xB6A7, + 38526 - 11904: 0xDC7D, + 38528 - 11904: 0xDCA3, + 38529 - 11904: 0x9FAF, + 38531 - 11904: 0xDCA2, + 38532 - 11904: 0xB6AC, + 38533 - 11904: 0xB6A8, + 38534 - 11904: 0xB6A9, + 38535 - 11904: 0xDC7C, + 38536 - 11904: 0xDC7E, + 38537 - 11904: 0xDCA1, + 38538 - 11904: 0xB6A4, + 38539 - 11904: 0xB6A6, + 38541 - 11904: 0xB6AA, + 38542 - 11904: 0xB6A5, + 38543 - 11904: 0x95F2, + 38545 - 11904: 0xE0D3, + 38546 - 11904: 0xE0D1, + 38547 - 11904: 0xE0D2, + 38548 - 11904: 0xB96A, + 38549 - 11904: 0xB96B, + 38550 - 11904: 0x90BF, + 38551 - 11904: 0xE0D4, + 38552 - 11904: 0xB969, + 38553 - 11904: 0xBBD8, + 38555 - 11904: 0xBBDA, + 38556 - 11904: 0xBBD9, + 38558 - 11904: 0xE4BB, + 38561 - 11904: 0xE4BC, + 38562 - 11904: 0xE8AB, + 38563 - 11904: 0x90C1, + 38564 - 11904: 0xE8AA, + 38565 - 11904: 0xFEE4, + 38567 - 11904: 0xC047, + 38568 - 11904: 0xC048, + 38569 - 11904: 0xEC4F, + 38570 - 11904: 0xC049, + 38572 - 11904: 0xEEF6, + 38574 - 11904: 0xEEF4, + 38576 - 11904: 0xEEF5, + 38577 - 11904: 0xC1F4, + 38579 - 11904: 0xF16F, + 38580 - 11904: 0xC3F7, + 38582 - 11904: 0xC6D7, + 38584 - 11904: 0xC1F5, + 38585 - 11904: 0xAB41, + 38587 - 11904: 0xB0A6, + 38588 - 11904: 0xD447, + 38589 - 11904: 0x90C7, + 38591 - 11904: 0xD84C, + 38592 - 11904: 0xB3B6, + 38593 - 11904: 0xB6AD, + 38594 - 11904: 0xDCA4, + 38595 - 11904: 0xDCA6, + 38596 - 11904: 0xB6AF, + 38597 - 11904: 0xB6AE, + 38598 - 11904: 0xB6B0, + 38599 - 11904: 0xB6B1, + 38600 - 11904: 0xDCA5, + 38601 - 11904: 0xB96E, + 38602 - 11904: 0xB96F, + 38603 - 11904: 0xB96D, + 38604 - 11904: 0xBBDB, + 38605 - 11904: 0xB96C, + 38606 - 11904: 0xE0D5, + 38610 - 11904: 0xBBDC, + 38611 - 11904: 0xE8AC, + 38612 - 11904: 0xEC50, + 38613 - 11904: 0xC04A, + 38614 - 11904: 0xC1F6, + 38615 - 11904: 0xF170, + 38616 - 11904: 0xF174, + 38617 - 11904: 0xC2F9, + 38618 - 11904: 0xF171, + 38619 - 11904: 0xC2FA, + 38620 - 11904: 0xC2F8, + 38621 - 11904: 0xF175, + 38622 - 11904: 0xC2FB, + 38623 - 11904: 0xF173, + 38625 - 11904: 0xF379, + 38626 - 11904: 0xC2F7, + 38627 - 11904: 0xC3F8, + 38629 - 11904: 0xF8CD, + 38632 - 11904: 0xAB42, + 38633 - 11904: 0xB3B8, + 38634 - 11904: 0xB3B7, + 38639 - 11904: 0xB6B2, + 38640 - 11904: 0xDCA8, + 38641 - 11904: 0xDCA7, + 38642 - 11904: 0xB6B3, + 38644 - 11904: 0x92E4, + 38645 - 11904: 0xE0D9, + 38646 - 11904: 0xB973, + 38647 - 11904: 0xB970, + 38648 - 11904: 0xE0D8, + 38649 - 11904: 0xB972, + 38650 - 11904: 0xE0D6, + 38651 - 11904: 0xB971, + 38653 - 11904: 0xE0D7, + 38655 - 11904: 0xE4BD, + 38656 - 11904: 0xBBDD, + 38658 - 11904: 0xE8AF, + 38659 - 11904: 0x9F52, + 38660 - 11904: 0xBE5D, + 38661 - 11904: 0xE8AD, + 38662 - 11904: 0xBE5E, + 38663 - 11904: 0xBE5F, + 38664 - 11904: 0xE8AE, + 38665 - 11904: 0xBE60, + 38667 - 11904: 0xEC51, + 38669 - 11904: 0xC04E, + 38670 - 11904: 0xC04B, + 38671 - 11904: 0xC050, + 38672 - 11904: 0xEC53, + 38673 - 11904: 0xC04C, + 38674 - 11904: 0xEC52, + 38675 - 11904: 0xC04F, + 38678 - 11904: 0xC04D, + 38680 - 11904: 0xEEF9, + 38681 - 11904: 0xEEFB, + 38683 - 11904: 0x90DB, + 38684 - 11904: 0xC1F7, + 38685 - 11904: 0xEEFA, + 38686 - 11904: 0xC1F8, + 38687 - 11904: 0xEEF8, + 38688 - 11904: 0xEEF7, + 38689 - 11904: 0xA066, + 38690 - 11904: 0xF177, + 38691 - 11904: 0xF176, + 38692 - 11904: 0xC2FC, + 38693 - 11904: 0xF178, + 38694 - 11904: 0xF37E, + 38695 - 11904: 0xC3FA, + 38696 - 11904: 0xF37D, + 38697 - 11904: 0xF37A, + 38698 - 11904: 0xC3F9, + 38699 - 11904: 0xF37B, + 38700 - 11904: 0xF37C, + 38702 - 11904: 0xF548, + 38703 - 11904: 0xF549, + 38704 - 11904: 0xC4C5, + 38705 - 11904: 0x90D2, + 38706 - 11904: 0xC553, + 38708 - 11904: 0x876B, + 38709 - 11904: 0xF66E, + 38710 - 11904: 0x90D4, + 38712 - 11904: 0xC551, + 38713 - 11904: 0xC552, + 38714 - 11904: 0xF66F, + 38717 - 11904: 0xC5B4, + 38718 - 11904: 0xC5B5, + 38719 - 11904: 0xF771, + 38720 - 11904: 0x9A5B, + 38721 - 11904: 0x95FD, + 38722 - 11904: 0xC645, + 38723 - 11904: 0xF8CF, + 38724 - 11904: 0xC647, + 38726 - 11904: 0xF8CE, + 38727 - 11904: 0xF8D0, + 38728 - 11904: 0xC646, + 38729 - 11904: 0xF957, + 38730 - 11904: 0x87B1, + 38731 - 11904: 0xF9AD, + 38737 - 11904: 0x8BC4, + 38738 - 11904: 0xAB43, + 38741 - 11904: 0x8C66, + 38742 - 11904: 0xB974, + 38743 - 11904: 0x90DE, + 38744 - 11904: 0xE4BE, + 38746 - 11904: 0xE8B0, + 38747 - 11904: 0xC051, + 38748 - 11904: 0xC052, + 38749 - 11904: 0x9CE4, + 38750 - 11904: 0xAB44, + 38751 - 11904: 0x90E1, + 38752 - 11904: 0xBE61, + 38753 - 11904: 0xC3FB, + 38754 - 11904: 0xADB1, + 38758 - 11904: 0xC053, + 38760 - 11904: 0xC5E2, + 38761 - 11904: 0xADB2, + 38762 - 11904: 0xD84D, + 38764 - 11904: 0xDCA9, + 38765 - 11904: 0x9E46, + 38766 - 11904: 0xDCAB, + 38768 - 11904: 0xDCAA, + 38769 - 11904: 0x9651, + 38770 - 11904: 0xE0DD, + 38771 - 11904: 0xE0DA, + 38772 - 11904: 0xB975, + 38774 - 11904: 0xB976, + 38775 - 11904: 0xE0DB, + 38776 - 11904: 0xE0DC, + 38778 - 11904: 0xE4C0, + 38779 - 11904: 0xE4C5, + 38780 - 11904: 0xBBDE, + 38781 - 11904: 0xE4BF, + 38782 - 11904: 0xE4C1, + 38783 - 11904: 0xE4C8, + 38784 - 11904: 0xE4C3, + 38785 - 11904: 0xE4C7, + 38786 - 11904: 0xE4C4, + 38787 - 11904: 0xE4C2, + 38788 - 11904: 0xE4C6, + 38789 - 11904: 0xBBDF, + 38791 - 11904: 0xFB58, + 38792 - 11904: 0xE8B3, + 38793 - 11904: 0x90E6, + 38794 - 11904: 0xE8B1, + 38795 - 11904: 0xBE63, + 38797 - 11904: 0xBE62, + 38798 - 11904: 0xE8B2, + 38799 - 11904: 0xBE64, + 38804 - 11904: 0xEC56, + 38807 - 11904: 0xEC55, + 38808 - 11904: 0xC054, + 38809 - 11904: 0xEC54, + 38810 - 11904: 0xEEFC, + 38811 - 11904: 0x9650, + 38812 - 11904: 0xEEFE, + 38813 - 11904: 0xEF41, + 38814 - 11904: 0xEF40, + 38815 - 11904: 0x90E7, + 38816 - 11904: 0xC1F9, + 38817 - 11904: 0xEEFD, + 38818 - 11904: 0xF1A1, + 38819 - 11904: 0xC2FD, + 38820 - 11904: 0xF17D, + 38821 - 11904: 0xF1A2, + 38822 - 11904: 0xC2FE, + 38824 - 11904: 0xF17B, + 38826 - 11904: 0xF17E, + 38827 - 11904: 0xF17C, + 38828 - 11904: 0xF179, + 38829 - 11904: 0xC340, + 38830 - 11904: 0xF17A, + 38833 - 11904: 0x90E8, + 38834 - 11904: 0x9A5D, + 38835 - 11904: 0xF3A1, + 38836 - 11904: 0x9F7A, + 38838 - 11904: 0xF3A3, + 38839 - 11904: 0xF3A2, + 38840 - 11904: 0x9B5C, + 38841 - 11904: 0xF54A, + 38842 - 11904: 0x9F7C, + 38843 - 11904: 0xF54B, + 38845 - 11904: 0xFC52, + 38846 - 11904: 0x90E9, + 38847 - 11904: 0xF670, + 38848 - 11904: 0x90EA, + 38849 - 11904: 0xC5B7, + 38850 - 11904: 0x9A5E, + 38851 - 11904: 0xC5B6, + 38852 - 11904: 0xF84F, + 38853 - 11904: 0xF850, + 38854 - 11904: 0xC648, + 38855 - 11904: 0xF8D1, + 38856 - 11904: 0x9F76, + 38857 - 11904: 0xC669, + 38859 - 11904: 0xADB3, + 38860 - 11904: 0xB6B4, + 38861 - 11904: 0xE4CA, + 38862 - 11904: 0xE4C9, + 38863 - 11904: 0xE8B5, + 38864 - 11904: 0xE8B4, + 38866 - 11904: 0x90EB, + 38867 - 11904: 0xC1FA, + 38868 - 11904: 0xEF43, + 38869 - 11904: 0xEF42, + 38870 - 11904: 0xF1A5, + 38871 - 11904: 0xF1A3, + 38872 - 11904: 0xF1A6, + 38873 - 11904: 0xF1A4, + 38876 - 11904: 0xC3FC, + 38877 - 11904: 0xF3A4, + 38878 - 11904: 0xF3A5, + 38879 - 11904: 0xF3A6, + 38880 - 11904: 0x90EC, + 38881 - 11904: 0xF671, + 38883 - 11904: 0xF772, + 38885 - 11904: 0xF8D2, + 38886 - 11904: 0x8BEE, + 38893 - 11904: 0xADB4, + 38894 - 11904: 0x90EE, + 38896 - 11904: 0xEC57, + 38897 - 11904: 0xEF44, + 38898 - 11904: 0x91C6, + 38899 - 11904: 0xADB5, + 38901 - 11904: 0x90F2, + 38902 - 11904: 0xBBE0, + 38904 - 11904: 0xEC58, + 38905 - 11904: 0xC341, + 38906 - 11904: 0xF1A7, + 38907 - 11904: 0xC3FD, + 38909 - 11904: 0xF54C, + 38910 - 11904: 0xF54D, + 38911 - 11904: 0xC554, + 38912 - 11904: 0xF851, + 38913 - 11904: 0xADB6, + 38914 - 11904: 0xB3BB, + 38915 - 11904: 0xB3BC, + 38916 - 11904: 0xD84E, + 38917 - 11904: 0xB6B5, + 38918 - 11904: 0xB6B6, + 38919 - 11904: 0xDCAC, + 38920 - 11904: 0xB6B7, + 38922 - 11904: 0xB97A, + 38924 - 11904: 0xB97C, + 38925 - 11904: 0xE0DF, + 38926 - 11904: 0xE0E0, + 38927 - 11904: 0xE0DE, + 38928 - 11904: 0xB977, + 38929 - 11904: 0xB978, + 38930 - 11904: 0xB97B, + 38931 - 11904: 0xB979, + 38932 - 11904: 0xFCBC, + 38933 - 11904: 0x8A74, + 38934 - 11904: 0xE4CB, + 38935 - 11904: 0xBBE1, + 38936 - 11904: 0xBBE2, + 38939 - 11904: 0xE8BC, + 38940 - 11904: 0xBE67, + 38941 - 11904: 0xE8B7, + 38942 - 11904: 0xE8B6, + 38943 - 11904: 0x9657, + 38944 - 11904: 0xE8BB, + 38945 - 11904: 0xBE65, + 38947 - 11904: 0x9CEF, + 38948 - 11904: 0xC05B, + 38950 - 11904: 0xE8B8, + 38951 - 11904: 0xE8BD, + 38952 - 11904: 0xE8BA, + 38953 - 11904: 0xE8B9, + 38955 - 11904: 0xBE66, + 38957 - 11904: 0xC059, + 38958 - 11904: 0x9FDF, + 38959 - 11904: 0xEC5A, + 38960 - 11904: 0xC055, + 38962 - 11904: 0xEC5B, + 38963 - 11904: 0x90F7, + 38964 - 11904: 0x90F6, + 38965 - 11904: 0xEC59, + 38967 - 11904: 0xC058, + 38968 - 11904: 0xC056, + 38969 - 11904: 0xC05A, + 38971 - 11904: 0xC057, + 38977 - 11904: 0xEF45, + 38979 - 11904: 0xEF4A, + 38980 - 11904: 0xEF46, + 38981 - 11904: 0xEF49, + 38982 - 11904: 0xC1FB, + 38983 - 11904: 0x9B5E, + 38984 - 11904: 0xEDD4, + 38985 - 11904: 0xEF48, + 38986 - 11904: 0xEF47, + 38987 - 11904: 0x90F8, + 38988 - 11904: 0xC344, + 38989 - 11904: 0xC342, + 38990 - 11904: 0xC345, + 38991 - 11904: 0xC343, + 38992 - 11904: 0xF1A8, + 38993 - 11904: 0xF1A9, + 38994 - 11904: 0xF1AA, + 38995 - 11904: 0xC346, + 38998 - 11904: 0x8CFC, + 38999 - 11904: 0xF3AA, + 39000 - 11904: 0xC440, + 39001 - 11904: 0xF3A8, + 39003 - 11904: 0xC441, + 39004 - 11904: 0xF3A7, + 39005 - 11904: 0xF3A9, + 39006 - 11904: 0xC3FE, + 39007 - 11904: 0xF551, + 39008 - 11904: 0xF54E, + 39010 - 11904: 0xF54F, + 39011 - 11904: 0xF550, + 39012 - 11904: 0xF672, + 39013 - 11904: 0xC556, + 39014 - 11904: 0x90F9, + 39015 - 11904: 0xC555, + 39016 - 11904: 0x8CC9, + 39017 - 11904: 0xF774, + 39018 - 11904: 0xF773, + 39019 - 11904: 0xC5B8, + 39020 - 11904: 0xFA6A, + 39023 - 11904: 0xC5E3, + 39024 - 11904: 0xC649, + 39025 - 11904: 0xC660, + 39026 - 11904: 0xF958, + 39027 - 11904: 0xF9AE, + 39028 - 11904: 0xF9AF, + 39029 - 11904: 0x8BEF, + 39080 - 11904: 0xADB7, + 39081 - 11904: 0xDCAD, + 39084 - 11904: 0xE0E1, + 39085 - 11904: 0xE4CC, + 39086 - 11904: 0xE4CD, + 39087 - 11904: 0xBBE3, + 39089 - 11904: 0xBBE4, + 39090 - 11904: 0xE8BE, + 39091 - 11904: 0xBE68, + 39092 - 11904: 0x9FE0, + 39094 - 11904: 0xC1FC, + 39095 - 11904: 0x9142, + 39096 - 11904: 0xF1AB, + 39097 - 11904: 0x9A62, + 39098 - 11904: 0xC347, + 39099 - 11904: 0xF3AD, + 39100 - 11904: 0xC442, + 39101 - 11904: 0xF3AC, + 39102 - 11904: 0xF3AE, + 39103 - 11904: 0xF3AB, + 39104 - 11904: 0xF675, + 39105 - 11904: 0xF552, + 39106 - 11904: 0xF553, + 39107 - 11904: 0x9569, + 39108 - 11904: 0xC4C6, + 39110 - 11904: 0xF674, + 39111 - 11904: 0x9144, + 39112 - 11904: 0x9143, + 39113 - 11904: 0xF673, + 39114 - 11904: 0x9141, + 39115 - 11904: 0xF775, + 39116 - 11904: 0xF9B0, + 39118 - 11904: 0x8BF0, + 39131 - 11904: 0xADB8, + 39132 - 11904: 0x9660, + 39134 - 11904: 0x8BF1, + 39135 - 11904: 0xADB9, + 39136 - 11904: 0x99F6, + 39137 - 11904: 0x9149, + 39138 - 11904: 0xB0A7, + 39139 - 11904: 0xD448, + 39141 - 11904: 0xD84F, + 39142 - 11904: 0x914A, + 39143 - 11904: 0xB6B8, + 39145 - 11904: 0xB6BB, + 39146 - 11904: 0xB6B9, + 39147 - 11904: 0xDCAE, + 39148 - 11904: 0x914B, + 39149 - 11904: 0xB6BD, + 39151 - 11904: 0xB6BA, + 39153 - 11904: 0x9A64, + 39154 - 11904: 0xB6BC, + 39156 - 11904: 0xB97E, + 39157 - 11904: 0x8ABF, + 39158 - 11904: 0xE0E2, + 39161 - 11904: 0xE0E3, + 39162 - 11904: 0xE8C0, + 39164 - 11904: 0xB97D, + 39165 - 11904: 0xB9A1, + 39166 - 11904: 0xB9A2, + 39168 - 11904: 0xE4CF, + 39170 - 11904: 0xE4CE, + 39171 - 11904: 0xBBE5, + 39173 - 11904: 0xBBE6, + 39175 - 11904: 0xE4D0, + 39176 - 11904: 0xE8BF, + 39177 - 11904: 0xBBE8, + 39178 - 11904: 0xBE69, + 39180 - 11904: 0xBBE7, + 39182 - 11904: 0x9A66, + 39184 - 11904: 0xC05C, + 39185 - 11904: 0xE8C1, + 39186 - 11904: 0xBE6B, + 39187 - 11904: 0xBE6A, + 39188 - 11904: 0xE8C2, + 39189 - 11904: 0xE8C5, + 39190 - 11904: 0xE8C3, + 39191 - 11904: 0xE8C4, + 39192 - 11904: 0xBE6C, + 39193 - 11904: 0x9A67, + 39194 - 11904: 0xC061, + 39195 - 11904: 0xC05F, + 39196 - 11904: 0x9A69, + 39198 - 11904: 0xC05E, + 39199 - 11904: 0xEC5D, + 39201 - 11904: 0xC060, + 39204 - 11904: 0xEC5C, + 39205 - 11904: 0xEF4B, + 39207 - 11904: 0xEC5E, + 39208 - 11904: 0xC05D, + 39209 - 11904: 0xEC5F, + 39210 - 11904: 0xEF4E, + 39211 - 11904: 0xEF4C, + 39212 - 11904: 0xEF4D, + 39213 - 11904: 0xEF52, + 39214 - 11904: 0xC34B, + 39215 - 11904: 0xEF51, + 39216 - 11904: 0xEF54, + 39217 - 11904: 0xEF53, + 39218 - 11904: 0xEF50, + 39219 - 11904: 0xEF4F, + 39221 - 11904: 0xC1FD, + 39223 - 11904: 0x9A6A, + 39224 - 11904: 0x9652, + 39225 - 11904: 0x914D, + 39226 - 11904: 0xF1AE, + 39227 - 11904: 0x9666, + 39228 - 11904: 0xF1AD, + 39229 - 11904: 0xC34A, + 39230 - 11904: 0xC348, + 39231 - 11904: 0xC349, + 39232 - 11904: 0x9F7B, + 39233 - 11904: 0xF1AC, + 39234 - 11904: 0x9A6B, + 39235 - 11904: 0xF3B1, + 39237 - 11904: 0xC443, + 39239 - 11904: 0xF3B0, + 39240 - 11904: 0xF3AF, + 39241 - 11904: 0xC444, + 39242 - 11904: 0xA06C, + 39243 - 11904: 0xF558, + 39244 - 11904: 0xF557, + 39245 - 11904: 0x9667, + 39246 - 11904: 0xF555, + 39248 - 11904: 0xF554, + 39249 - 11904: 0xC4C8, + 39250 - 11904: 0xC4C7, + 39251 - 11904: 0xF559, + 39252 - 11904: 0xF776, + 39253 - 11904: 0xC5B9, + 39254 - 11904: 0xF677, + 39255 - 11904: 0xC557, + 39256 - 11904: 0xF676, + 39257 - 11904: 0xF556, + 39259 - 11904: 0xF777, + 39260 - 11904: 0xC5E4, + 39261 - 11904: 0x9A6C, + 39262 - 11904: 0xC661, + 39263 - 11904: 0xF959, + 39265 - 11904: 0xF9B1, + 39266 - 11904: 0x9A6D, + 39267 - 11904: 0x8BF2, + 39318 - 11904: 0xADBA, + 39319 - 11904: 0xD850, + 39320 - 11904: 0xEF55, + 39321 - 11904: 0xADBB, + 39323 - 11904: 0x966A, + 39324 - 11904: 0xE4D2, + 39325 - 11904: 0xE4D1, + 39326 - 11904: 0xEC60, + 39329 - 11904: 0xEF57, + 39331 - 11904: 0xEF56, + 39332 - 11904: 0xFCEA, + 39333 - 11904: 0xC34C, + 39334 - 11904: 0xF3B2, + 39335 - 11904: 0xF3B3, + 39336 - 11904: 0xC4C9, + 39338 - 11904: 0x966C, + 39339 - 11904: 0xF9B2, + 39340 - 11904: 0xB0A8, + 39341 - 11904: 0xB6BF, + 39342 - 11904: 0xB6BE, + 39343 - 11904: 0xE0E4, + 39344 - 11904: 0xE0E6, + 39345 - 11904: 0xB9A4, + 39346 - 11904: 0xE0E5, + 39347 - 11904: 0xB9A3, + 39348 - 11904: 0xB9A5, + 39349 - 11904: 0xE0E7, + 39352 - 11904: 0x91C4, + 39353 - 11904: 0xE4D4, + 39354 - 11904: 0xE4D6, + 39355 - 11904: 0xE4D5, + 39356 - 11904: 0x9677, + 39357 - 11904: 0xE4D8, + 39361 - 11904: 0xBBE9, + 39362 - 11904: 0xE4D7, + 39363 - 11904: 0xE4D3, + 39364 - 11904: 0x99F4, + 39365 - 11904: 0x9A6F, + 39367 - 11904: 0xE4D9, + 39369 - 11904: 0xE8CC, + 39371 - 11904: 0xE8CF, + 39372 - 11904: 0xE8D1, + 39373 - 11904: 0xE8C7, + 39374 - 11904: 0xE8CB, + 39375 - 11904: 0xE8C8, + 39376 - 11904: 0xBE6E, + 39377 - 11904: 0xBE71, + 39378 - 11904: 0xBE73, + 39379 - 11904: 0xE8C9, + 39380 - 11904: 0xE8CA, + 39381 - 11904: 0xBE72, + 39382 - 11904: 0xE8CD, + 39383 - 11904: 0xE8D0, + 39384 - 11904: 0xE8CE, + 39385 - 11904: 0xBE74, + 39386 - 11904: 0x9FAB, + 39387 - 11904: 0xBE70, + 39388 - 11904: 0xE8C6, + 39389 - 11904: 0xBE6D, + 39391 - 11904: 0xBE6F, + 39392 - 11904: 0x8CBE, + 39393 - 11904: 0x8EC1, + 39394 - 11904: 0xC063, + 39395 - 11904: 0xEC66, + 39396 - 11904: 0xEC64, + 39397 - 11904: 0xEC63, + 39398 - 11904: 0x9555, + 39399 - 11904: 0xEC69, + 39401 - 11904: 0xEC68, + 39402 - 11904: 0xEC67, + 39404 - 11904: 0xEC62, + 39405 - 11904: 0xC062, + 39406 - 11904: 0xEC61, + 39408 - 11904: 0xEC65, + 39409 - 11904: 0xC064, + 39412 - 11904: 0xEF5A, + 39413 - 11904: 0x9152, + 39414 - 11904: 0xEF5E, + 39415 - 11904: 0xEF5B, + 39416 - 11904: 0xEF5D, + 39417 - 11904: 0xEF5C, + 39418 - 11904: 0xEF59, + 39419 - 11904: 0xEF5F, + 39420 - 11904: 0xEF62, + 39421 - 11904: 0xEF60, + 39422 - 11904: 0xEF61, + 39423 - 11904: 0xC240, + 39425 - 11904: 0xC1FE, + 39426 - 11904: 0xEF58, + 39427 - 11904: 0xEF63, + 39428 - 11904: 0xF1B3, + 39429 - 11904: 0xF1B6, + 39430 - 11904: 0xF1B8, + 39431 - 11904: 0xF1B7, + 39433 - 11904: 0xF1B1, + 39434 - 11904: 0xF1B5, + 39435 - 11904: 0xF1B0, + 39436 - 11904: 0x9153, + 39437 - 11904: 0xF1B2, + 39438 - 11904: 0xC34D, + 39439 - 11904: 0xF1AF, + 39440 - 11904: 0x9155, + 39441 - 11904: 0xF1B4, + 39444 - 11904: 0xF3C0, + 39445 - 11904: 0xF3B5, + 39446 - 11904: 0xC445, + 39449 - 11904: 0xC446, + 39450 - 11904: 0xF3B4, + 39451 - 11904: 0xF3B9, + 39452 - 11904: 0xF3BF, + 39453 - 11904: 0xF3B7, + 39454 - 11904: 0xF3BE, + 39455 - 11904: 0x955D, + 39456 - 11904: 0xF3BB, + 39457 - 11904: 0x9671, + 39458 - 11904: 0xF3BA, + 39459 - 11904: 0xF3BD, + 39460 - 11904: 0xF3B8, + 39461 - 11904: 0xF3B6, + 39462 - 11904: 0x9C6D, + 39463 - 11904: 0xF3BC, + 39465 - 11904: 0xF560, + 39466 - 11904: 0xF55E, + 39467 - 11904: 0xC4CA, + 39468 - 11904: 0xF55D, + 39469 - 11904: 0xF563, + 39470 - 11904: 0xF561, + 39471 - 11904: 0x9673, + 39472 - 11904: 0xC4CB, + 39473 - 11904: 0xF55C, + 39474 - 11904: 0xF55A, + 39476 - 11904: 0xF55B, + 39477 - 11904: 0xC4CD, + 39478 - 11904: 0xF55F, + 39479 - 11904: 0xC4CC, + 39480 - 11904: 0xF562, + 39481 - 11904: 0xF678, + 39482 - 11904: 0xF67E, + 39483 - 11904: 0x9154, + 39484 - 11904: 0x9A71, + 39485 - 11904: 0xF679, + 39486 - 11904: 0xC55B, + 39487 - 11904: 0xF6A1, + 39488 - 11904: 0xC55A, + 39489 - 11904: 0xF67D, + 39490 - 11904: 0xF67C, + 39491 - 11904: 0xC559, + 39492 - 11904: 0xF67B, + 39493 - 11904: 0xC558, + 39494 - 11904: 0xF67A, + 39496 - 11904: 0xF77D, + 39497 - 11904: 0xF7A1, + 39498 - 11904: 0xF77E, + 39500 - 11904: 0xF77B, + 39501 - 11904: 0xC5BB, + 39502 - 11904: 0xF778, + 39503 - 11904: 0xF77C, + 39504 - 11904: 0xF7A3, + 39506 - 11904: 0xF7A2, + 39507 - 11904: 0xF779, + 39508 - 11904: 0xF77A, + 39509 - 11904: 0xC5BA, + 39510 - 11904: 0xF852, + 39511 - 11904: 0xC5E7, + 39512 - 11904: 0x9156, + 39513 - 11904: 0xF853, + 39514 - 11904: 0xC5E5, + 39515 - 11904: 0xC5E6, + 39516 - 11904: 0x966D, + 39518 - 11904: 0xF8D3, + 39519 - 11904: 0xC64A, + 39520 - 11904: 0xF976, + 39522 - 11904: 0xC66A, + 39523 - 11904: 0x9557, + 39524 - 11904: 0xF9B3, + 39525 - 11904: 0xC66B, + 39526 - 11904: 0xF9B4, + 39527 - 11904: 0xF9B5, + 39528 - 11904: 0xF9C3, + 39529 - 11904: 0xF9C2, + 39530 - 11904: 0xC67A, + 39531 - 11904: 0xF9CD, + 39532 - 11904: 0x89C6, + 39567 - 11904: 0x89C7, + 39592 - 11904: 0xB0A9, + 39595 - 11904: 0xE0E9, + 39597 - 11904: 0xE0E8, + 39599 - 11904: 0xBBEA, + 39600 - 11904: 0xBBEB, + 39601 - 11904: 0xE4DA, + 39602 - 11904: 0x8A6A, + 39603 - 11904: 0xE8D2, + 39604 - 11904: 0xEC6C, + 39606 - 11904: 0x8B57, + 39607 - 11904: 0xBE75, + 39608 - 11904: 0xC065, + 39609 - 11904: 0xEC6A, + 39610 - 11904: 0x9FE1, + 39611 - 11904: 0xEC6D, + 39612 - 11904: 0xC066, + 39613 - 11904: 0x9B5F, + 39614 - 11904: 0xEF64, + 39615 - 11904: 0xEC6B, + 39616 - 11904: 0xF1B9, + 39617 - 11904: 0xC34E, + 39618 - 11904: 0xF3C1, + 39622 - 11904: 0xF566, + 39623 - 11904: 0xF564, + 39626 - 11904: 0xF565, + 39629 - 11904: 0xF6A2, + 39631 - 11904: 0xC55C, + 39632 - 11904: 0xF7A4, + 39633 - 11904: 0xC5EA, + 39634 - 11904: 0xC5BC, + 39635 - 11904: 0xC5E8, + 39636 - 11904: 0xC5E9, + 39637 - 11904: 0xF8D4, + 39638 - 11904: 0xC662, + 39639 - 11904: 0xA05D, + 39640 - 11904: 0xB0AA, + 39644 - 11904: 0xF1BA, + 39647 - 11904: 0xD449, + 39648 - 11904: 0x915B, + 39649 - 11904: 0xB9A6, + 39650 - 11904: 0x915C, + 39651 - 11904: 0xE4DB, + 39654 - 11904: 0xBBEC, + 39655 - 11904: 0xE4DC, + 39659 - 11904: 0xE8D4, + 39660 - 11904: 0xE8D3, + 39661 - 11904: 0xC068, + 39662 - 11904: 0xBE76, + 39663 - 11904: 0xBE77, + 39665 - 11904: 0xE8D7, + 39666 - 11904: 0xE8D6, + 39667 - 11904: 0xE8D5, + 39668 - 11904: 0x915E, + 39670 - 11904: 0xEC6E, + 39671 - 11904: 0xEC71, + 39673 - 11904: 0xEC70, + 39674 - 11904: 0xEC6F, + 39675 - 11904: 0xC067, + 39676 - 11904: 0xEF68, + 39677 - 11904: 0xEF66, + 39678 - 11904: 0xEF65, + 39679 - 11904: 0x9F5C, + 39681 - 11904: 0xEF67, + 39682 - 11904: 0x9F57, + 39683 - 11904: 0xC34F, + 39684 - 11904: 0xF1BC, + 39685 - 11904: 0xF1BD, + 39686 - 11904: 0xC350, + 39688 - 11904: 0xF1BB, + 39689 - 11904: 0x9F65, + 39690 - 11904: 0xF3C3, + 39691 - 11904: 0xF3C2, + 39692 - 11904: 0xF3C5, + 39693 - 11904: 0xC447, + 39694 - 11904: 0xF3C4, + 39695 - 11904: 0x9A72, + 39696 - 11904: 0xF567, + 39697 - 11904: 0xF569, + 39698 - 11904: 0xF568, + 39700 - 11904: 0x9160, + 39701 - 11904: 0xF6A3, + 39702 - 11904: 0xF6A6, + 39703 - 11904: 0xF6A4, + 39704 - 11904: 0xF6A5, + 39705 - 11904: 0xF7A5, + 39706 - 11904: 0xC5BD, + 39710 - 11904: 0xF854, + 39711 - 11904: 0xF855, + 39712 - 11904: 0xF856, + 39714 - 11904: 0xC64B, + 39715 - 11904: 0xC663, + 39716 - 11904: 0xF9B6, + 39717 - 11904: 0xB0AB, + 39719 - 11904: 0xBE78, + 39720 - 11904: 0xC069, + 39721 - 11904: 0xF1BE, + 39722 - 11904: 0x9F5E, + 39723 - 11904: 0xF7A6, + 39725 - 11904: 0x9161, + 39726 - 11904: 0xF9C4, + 39727 - 11904: 0xD44A, + 39729 - 11904: 0xC67B, + 39730 - 11904: 0xB0AC, + 39731 - 11904: 0xEC72, + 39732 - 11904: 0x9164, + 39733 - 11904: 0xF1BF, + 39735 - 11904: 0xF3C6, + 39737 - 11904: 0x9F41, + 39738 - 11904: 0xF6A7, + 39739 - 11904: 0xF7A7, + 39740 - 11904: 0xB0AD, + 39742 - 11904: 0xE4DD, + 39743 - 11904: 0xE4DE, + 39744 - 11904: 0x9169, + 39745 - 11904: 0xBBED, + 39746 - 11904: 0xBBEE, + 39747 - 11904: 0xE8D9, + 39748 - 11904: 0xBE7A, + 39749 - 11904: 0xBE79, + 39750 - 11904: 0xE8D8, + 39752 - 11904: 0xEF69, + 39754 - 11904: 0xF1C0, + 39755 - 11904: 0xF1C2, + 39756 - 11904: 0xF1C1, + 39757 - 11904: 0xC353, + 39758 - 11904: 0xC352, + 39759 - 11904: 0xC351, + 39760 - 11904: 0x9168, + 39761 - 11904: 0xC55E, + 39762 - 11904: 0xF6A8, + 39764 - 11904: 0xC55D, + 39765 - 11904: 0xF7A9, + 39766 - 11904: 0xF7A8, + 39768 - 11904: 0xC64C, + 39769 - 11904: 0xF8D5, + 39770 - 11904: 0xB3BD, + 39771 - 11904: 0xE0EA, + 39775 - 11904: 0xE4E1, + 39776 - 11904: 0xE4DF, + 39777 - 11904: 0xE4E0, + 39780 - 11904: 0xE8E2, + 39782 - 11904: 0xE8DD, + 39783 - 11904: 0xE8DA, + 39784 - 11904: 0xE8E1, + 39785 - 11904: 0x9A74, + 39788 - 11904: 0xE8E3, + 39791 - 11904: 0xBE7C, + 39792 - 11904: 0xE8E0, + 39793 - 11904: 0xE8DC, + 39796 - 11904: 0xE8DB, + 39797 - 11904: 0xE8DF, + 39798 - 11904: 0xE8DE, + 39799 - 11904: 0xBE7B, + 39802 - 11904: 0xEC7D, + 39803 - 11904: 0xEC78, + 39804 - 11904: 0xEC76, + 39805 - 11904: 0xECA1, + 39806 - 11904: 0xEC77, + 39807 - 11904: 0x96B2, + 39808 - 11904: 0xEC73, + 39809 - 11904: 0x9A75, + 39810 - 11904: 0xEC79, + 39811 - 11904: 0xFDA5, + 39813 - 11904: 0xEC74, + 39814 - 11904: 0xEF72, + 39815 - 11904: 0xEC75, + 39816 - 11904: 0xECA2, + 39819 - 11904: 0x9EE9, + 39821 - 11904: 0x8BBA, + 39822 - 11904: 0x916D, + 39823 - 11904: 0xA060, + 39824 - 11904: 0xEC7C, + 39825 - 11904: 0xC06A, + 39826 - 11904: 0xEC7B, + 39827 - 11904: 0xEC7A, + 39829 - 11904: 0xEC7E, + 39831 - 11904: 0x9FDE, + 39834 - 11904: 0xEF6A, + 39835 - 11904: 0xEF6D, + 39837 - 11904: 0x9FC3, + 39838 - 11904: 0xEF6C, + 39839 - 11904: 0x96B5, + 39840 - 11904: 0xEF74, + 39841 - 11904: 0xEF6F, + 39842 - 11904: 0xEF73, + 39844 - 11904: 0xEF71, + 39845 - 11904: 0xEF70, + 39846 - 11904: 0xEF6E, + 39848 - 11904: 0xEF6B, + 39850 - 11904: 0xC243, + 39851 - 11904: 0xC242, + 39853 - 11904: 0xC244, + 39854 - 11904: 0xC241, + 39855 - 11904: 0xEF75, + 39856 - 11904: 0xA067, + 39861 - 11904: 0xF1C8, + 39862 - 11904: 0xF1CB, + 39864 - 11904: 0xF1C9, + 39865 - 11904: 0xF1CD, + 39869 - 11904: 0xF1CE, + 39871 - 11904: 0xF1C6, + 39872 - 11904: 0xC358, + 39873 - 11904: 0xF1C7, + 39875 - 11904: 0xF1C5, + 39876 - 11904: 0xF1CC, + 39878 - 11904: 0xF1C4, + 39879 - 11904: 0xF1C3, + 39880 - 11904: 0xC357, + 39881 - 11904: 0xC355, + 39882 - 11904: 0xC354, + 39887 - 11904: 0x96B3, + 39891 - 11904: 0xF1CA, + 39892 - 11904: 0xF3CF, + 39893 - 11904: 0xF3D5, + 39894 - 11904: 0xC44A, + 39895 - 11904: 0xF3D0, + 39897 - 11904: 0xF3D3, + 39898 - 11904: 0xF3D7, + 39899 - 11904: 0xC44B, + 39900 - 11904: 0xF3D2, + 39901 - 11904: 0x9A76, + 39902 - 11904: 0xF3CA, + 39904 - 11904: 0xF3C9, + 39905 - 11904: 0xF3D6, + 39906 - 11904: 0xF3CD, + 39908 - 11904: 0xF3CB, + 39909 - 11904: 0xF3D4, + 39910 - 11904: 0xF3CC, + 39911 - 11904: 0xC449, + 39912 - 11904: 0xC448, + 39913 - 11904: 0x95D5, + 39914 - 11904: 0xF3C7, + 39915 - 11904: 0xF3C8, + 39916 - 11904: 0xF3D1, + 39917 - 11904: 0x9ECA, + 39920 - 11904: 0xF3CE, + 39921 - 11904: 0x9A77, + 39924 - 11904: 0x9A78, + 39927 - 11904: 0xF56C, + 39928 - 11904: 0xF56F, + 39933 - 11904: 0xC356, + 39935 - 11904: 0x9170, + 39938 - 11904: 0x916F, + 39941 - 11904: 0xF56D, + 39942 - 11904: 0xF573, + 39943 - 11904: 0xF571, + 39944 - 11904: 0xF56B, + 39945 - 11904: 0xF576, + 39946 - 11904: 0x9FA3, + 39947 - 11904: 0xF56A, + 39948 - 11904: 0x9171, + 39949 - 11904: 0xC4CF, + 39950 - 11904: 0xF572, + 39952 - 11904: 0x96B1, + 39954 - 11904: 0xF56E, + 39955 - 11904: 0xC4CE, + 39956 - 11904: 0xF575, + 39957 - 11904: 0x9F63, + 39959 - 11904: 0xF574, + 39963 - 11904: 0x9F67, + 39964 - 11904: 0xF6AB, + 39965 - 11904: 0xF6AA, + 39967 - 11904: 0x8BB9, + 39968 - 11904: 0x9A7A, + 39969 - 11904: 0xF6B1, + 39971 - 11904: 0xF6AD, + 39972 - 11904: 0xF6B0, + 39973 - 11904: 0xC560, + 39974 - 11904: 0x8B56, + 39976 - 11904: 0xF6AE, + 39977 - 11904: 0xF6AF, + 39979 - 11904: 0xF6A9, + 39980 - 11904: 0xF6AC, + 39981 - 11904: 0xC55F, + 39983 - 11904: 0x9ADA, + 39985 - 11904: 0xC5BF, + 39986 - 11904: 0xF7B4, + 39987 - 11904: 0xF7AF, + 39988 - 11904: 0xF7B3, + 39989 - 11904: 0x96B0, + 39990 - 11904: 0xF7B6, + 39991 - 11904: 0xF7B2, + 39993 - 11904: 0xF7AE, + 39994 - 11904: 0x9A7E, + 39995 - 11904: 0xC5C1, + 39996 - 11904: 0xF7B1, + 39997 - 11904: 0xF7B5, + 39998 - 11904: 0xC5C0, + 39999 - 11904: 0xF7AC, + 40000 - 11904: 0xF570, + 40001 - 11904: 0xF7B0, + 40004 - 11904: 0xF7AD, + 40005 - 11904: 0x9DDE, + 40006 - 11904: 0xF7AA, + 40008 - 11904: 0xF7AB, + 40009 - 11904: 0xC5BE, + 40010 - 11904: 0xF85A, + 40011 - 11904: 0xF85C, + 40012 - 11904: 0xF85F, + 40013 - 11904: 0xF85B, + 40014 - 11904: 0xF860, + 40015 - 11904: 0x96AD, + 40016 - 11904: 0xF859, + 40018 - 11904: 0xF857, + 40019 - 11904: 0x96AE, + 40020 - 11904: 0xC5EB, + 40021 - 11904: 0xF85D, + 40022 - 11904: 0xC5ED, + 40023 - 11904: 0xC5EC, + 40024 - 11904: 0xF858, + 40025 - 11904: 0xF85E, + 40029 - 11904: 0x9EA1, + 40030 - 11904: 0xF8DA, + 40031 - 11904: 0xC64D, + 40032 - 11904: 0xF8DB, + 40034 - 11904: 0xF8D9, + 40035 - 11904: 0xF8D6, + 40038 - 11904: 0xF8D8, + 40039 - 11904: 0xF8D7, + 40040 - 11904: 0xF95A, + 40045 - 11904: 0xF95C, + 40046 - 11904: 0xF95B, + 40049 - 11904: 0xF979, + 40050 - 11904: 0x9E50, + 40051 - 11904: 0xF978, + 40052 - 11904: 0xF977, + 40053 - 11904: 0xF97A, + 40055 - 11904: 0xC673, + 40056 - 11904: 0xC674, + 40057 - 11904: 0xF9CA, + 40058 - 11904: 0xF9CE, + 40059 - 11904: 0x96AF, + 40060 - 11904: 0x8BF4, + 40165 - 11904: 0xB3BE, + 40166 - 11904: 0xDCAF, + 40167 - 11904: 0xE0ED, + 40169 - 11904: 0xB9A7, + 40170 - 11904: 0xE0EB, + 40173 - 11904: 0xE0EC, + 40177 - 11904: 0xE4E2, + 40178 - 11904: 0xE4E3, + 40179 - 11904: 0xBBF1, + 40180 - 11904: 0xBBEF, + 40181 - 11904: 0xE4E4, + 40182 - 11904: 0xBBF0, + 40183 - 11904: 0xE8E8, + 40185 - 11904: 0xE8EB, + 40186 - 11904: 0xE8E5, + 40187 - 11904: 0xE8EC, + 40188 - 11904: 0xE8E4, + 40189 - 11904: 0xE8E6, + 40191 - 11904: 0xE8E7, + 40192 - 11904: 0xE8EA, + 40194 - 11904: 0x9FA4, + 40195 - 11904: 0xBEA1, + 40196 - 11904: 0xE8EF, + 40197 - 11904: 0xE8EE, + 40198 - 11904: 0xBE7D, + 40199 - 11904: 0xE8E9, + 40200 - 11904: 0xE8ED, + 40201 - 11904: 0xBE7E, + 40204 - 11904: 0x96BD, + 40208 - 11904: 0xECAC, + 40210 - 11904: 0xC06F, + 40212 - 11904: 0xECA7, + 40213 - 11904: 0xC06B, + 40214 - 11904: 0x96F4, + 40215 - 11904: 0xECA4, + 40216 - 11904: 0xECAA, + 40217 - 11904: 0xECAD, + 40219 - 11904: 0xC070, + 40221 - 11904: 0xECA9, + 40222 - 11904: 0xECA6, + 40223 - 11904: 0xECAE, + 40224 - 11904: 0xECA5, + 40225 - 11904: 0x96B8, + 40226 - 11904: 0xECAB, + 40227 - 11904: 0xC06C, + 40229 - 11904: 0xECA3, + 40230 - 11904: 0xC06D, + 40232 - 11904: 0xC06E, + 40233 - 11904: 0xECA8, + 40237 - 11904: 0xEFA9, + 40238 - 11904: 0xEF7A, + 40239 - 11904: 0xEF7B, + 40240 - 11904: 0xEF7E, + 40241 - 11904: 0xEF7C, + 40243 - 11904: 0xEF76, + 40244 - 11904: 0xFAA1, + 40246 - 11904: 0xEF79, + 40247 - 11904: 0xEFA5, + 40248 - 11904: 0xEF7D, + 40249 - 11904: 0x91A7, + 40251 - 11904: 0xC245, + 40253 - 11904: 0xEFA7, + 40254 - 11904: 0xEFA4, + 40255 - 11904: 0xC246, + 40256 - 11904: 0xEFA6, + 40257 - 11904: 0xEF77, + 40258 - 11904: 0xEFA2, + 40259 - 11904: 0xEFA3, + 40260 - 11904: 0xA05E, + 40261 - 11904: 0xEFA1, + 40265 - 11904: 0x9A7D, + 40266 - 11904: 0xF1D2, + 40267 - 11904: 0xF1D4, + 40268 - 11904: 0xF1D7, + 40270 - 11904: 0x8948, + 40271 - 11904: 0xF1D1, + 40272 - 11904: 0x9EB1, + 40273 - 11904: 0xC359, + 40274 - 11904: 0xF1D9, + 40275 - 11904: 0xF1D0, + 40276 - 11904: 0xF1DA, + 40278 - 11904: 0xF1D6, + 40279 - 11904: 0xF1D8, + 40280 - 11904: 0xF1DC, + 40281 - 11904: 0xF1D5, + 40282 - 11904: 0xF1DD, + 40283 - 11904: 0xF1D3, + 40284 - 11904: 0xF1CF, + 40285 - 11904: 0xC35A, + 40286 - 11904: 0x9DDB, + 40287 - 11904: 0xF1DB, + 40288 - 11904: 0xC35B, + 40289 - 11904: 0xC44D, + 40295 - 11904: 0xEF78, + 40296 - 11904: 0xF3F1, + 40297 - 11904: 0xF3E8, + 40298 - 11904: 0xC44F, + 40299 - 11904: 0xF3E4, + 40300 - 11904: 0xC450, + 40301 - 11904: 0x95BF, + 40302 - 11904: 0x8A73, + 40303 - 11904: 0xF3ED, + 40304 - 11904: 0xF3E7, + 40305 - 11904: 0xF3DD, + 40306 - 11904: 0xC44E, + 40307 - 11904: 0xF3EA, + 40308 - 11904: 0xF3E5, + 40309 - 11904: 0xF3E6, + 40311 - 11904: 0xF3D8, + 40312 - 11904: 0xF3DF, + 40313 - 11904: 0xF3EE, + 40315 - 11904: 0xF3EB, + 40316 - 11904: 0x9EFE, + 40317 - 11904: 0xF3E3, + 40318 - 11904: 0x917A, + 40319 - 11904: 0xF3EF, + 40320 - 11904: 0xF3DE, + 40321 - 11904: 0xF3D9, + 40322 - 11904: 0xF3EC, + 40323 - 11904: 0x917B, + 40324 - 11904: 0xF3DB, + 40325 - 11904: 0xF3E9, + 40326 - 11904: 0xF3E0, + 40327 - 11904: 0xF3F0, + 40328 - 11904: 0xF3DC, + 40329 - 11904: 0xC44C, + 40330 - 11904: 0xF3DA, + 40331 - 11904: 0xF3E1, + 40332 - 11904: 0xF3E2, + 40336 - 11904: 0xF57D, + 40338 - 11904: 0xF57B, + 40339 - 11904: 0x9AA3, + 40340 - 11904: 0xF5A2, + 40342 - 11904: 0xF5AE, + 40343 - 11904: 0xF5A5, + 40344 - 11904: 0xF57C, + 40345 - 11904: 0xF578, + 40346 - 11904: 0xF5A7, + 40347 - 11904: 0xF57E, + 40348 - 11904: 0xF5A3, + 40349 - 11904: 0xF57A, + 40350 - 11904: 0xF5AA, + 40351 - 11904: 0xF577, + 40352 - 11904: 0xF5A1, + 40353 - 11904: 0xF5A6, + 40354 - 11904: 0xF5A8, + 40355 - 11904: 0xF5AB, + 40356 - 11904: 0xF579, + 40357 - 11904: 0x96C2, + 40358 - 11904: 0xF5AF, + 40359 - 11904: 0xF5B0, + 40360 - 11904: 0xF5A9, + 40361 - 11904: 0xF5AD, + 40362 - 11904: 0xF5A4, + 40363 - 11904: 0x9F77, + 40364 - 11904: 0xF6C1, + 40365 - 11904: 0xF6C4, + 40367 - 11904: 0xC561, + 40369 - 11904: 0xF6C3, + 40370 - 11904: 0xF6C8, + 40371 - 11904: 0xF6C6, + 40372 - 11904: 0xC562, + 40373 - 11904: 0xF6BD, + 40374 - 11904: 0xF6B3, + 40375 - 11904: 0xF6B2, + 40376 - 11904: 0xC564, + 40377 - 11904: 0xF6BF, + 40378 - 11904: 0xF6C0, + 40379 - 11904: 0xF6BC, + 40380 - 11904: 0xF6B4, + 40381 - 11904: 0x9AA4, + 40382 - 11904: 0xF6B9, + 40383 - 11904: 0xF5AC, + 40384 - 11904: 0x9AA5, + 40385 - 11904: 0xF6B5, + 40386 - 11904: 0xC563, + 40387 - 11904: 0xF6BB, + 40388 - 11904: 0x91A1, + 40389 - 11904: 0xF6BA, + 40391 - 11904: 0xF6B6, + 40392 - 11904: 0xF6C2, + 40393 - 11904: 0x89B8, + 40394 - 11904: 0xF6B7, + 40395 - 11904: 0xF7BB, + 40396 - 11904: 0xF6C5, + 40397 - 11904: 0xF6C7, + 40398 - 11904: 0xF6BE, + 40399 - 11904: 0xF6B8, + 40400 - 11904: 0xF7BC, + 40401 - 11904: 0xF7BE, + 40402 - 11904: 0xF7B8, + 40403 - 11904: 0xC5C2, + 40404 - 11904: 0x9173, + 40405 - 11904: 0xF7C5, + 40406 - 11904: 0xF7C3, + 40407 - 11904: 0xC5C3, + 40408 - 11904: 0xF7C2, + 40409 - 11904: 0xF7C1, + 40410 - 11904: 0xF7BA, + 40411 - 11904: 0xF7B7, + 40412 - 11904: 0xF7BD, + 40413 - 11904: 0xF7C6, + 40414 - 11904: 0xF7B9, + 40415 - 11904: 0xF7BF, + 40417 - 11904: 0xF869, + 40418 - 11904: 0xF86E, + 40419 - 11904: 0xF864, + 40420 - 11904: 0xF867, + 40421 - 11904: 0xC5EE, + 40422 - 11904: 0xF86B, + 40424 - 11904: 0xF872, + 40425 - 11904: 0xF7C0, + 40427 - 11904: 0xF865, + 40428 - 11904: 0xF86F, + 40429 - 11904: 0xF873, + 40430 - 11904: 0xF86A, + 40431 - 11904: 0xF863, + 40432 - 11904: 0xF86D, + 40434 - 11904: 0xF86C, + 40435 - 11904: 0xF871, + 40436 - 11904: 0xF870, + 40437 - 11904: 0xF7C4, + 40438 - 11904: 0xF868, + 40439 - 11904: 0xF862, + 40440 - 11904: 0xF866, + 40441 - 11904: 0xC64E, + 40442 - 11904: 0xC64F, + 40443 - 11904: 0xF861, + 40444 - 11904: 0x9AA6, + 40445 - 11904: 0xF8E6, + 40446 - 11904: 0xF8DD, + 40447 - 11904: 0xF8E5, + 40448 - 11904: 0xF8E2, + 40449 - 11904: 0xF8E3, + 40450 - 11904: 0xF8DC, + 40451 - 11904: 0xF8DF, + 40452 - 11904: 0xF8E7, + 40453 - 11904: 0xF8E1, + 40454 - 11904: 0xF8E0, + 40455 - 11904: 0xF8DE, + 40457 - 11904: 0xF8E4, + 40458 - 11904: 0x89BD, + 40459 - 11904: 0xF95D, + 40460 - 11904: 0x89B9, + 40461 - 11904: 0xF95E, + 40462 - 11904: 0x917D, + 40463 - 11904: 0xF960, + 40464 - 11904: 0xF95F, + 40465 - 11904: 0xF962, + 40466 - 11904: 0xF961, + 40467 - 11904: 0xF97C, + 40468 - 11904: 0xF97B, + 40469 - 11904: 0xF9B7, + 40471 - 11904: 0xF9B8, + 40472 - 11904: 0x96BB, + 40473 - 11904: 0xF9C5, + 40474 - 11904: 0xC678, + 40475 - 11904: 0xC67C, + 40476 - 11904: 0x9FF2, + 40477 - 11904: 0xF9CF, + 40478 - 11904: 0xC67D, + 40479 - 11904: 0x8BF5, + 40565 - 11904: 0xB3BF, + 40569 - 11904: 0xC4D0, + 40570 - 11904: 0xF6C9, + 40571 - 11904: 0x9AA9, + 40572 - 11904: 0xC650, + 40573 - 11904: 0xC651, + 40575 - 11904: 0xB3C0, + 40576 - 11904: 0xE0EE, + 40577 - 11904: 0x9F54, + 40578 - 11904: 0xB9A8, + 40579 - 11904: 0xE8F0, + 40580 - 11904: 0x9FE3, + 40581 - 11904: 0x9EED, + 40582 - 11904: 0xECB0, + 40583 - 11904: 0xECB1, + 40584 - 11904: 0xECAF, + 40585 - 11904: 0xEFAB, + 40586 - 11904: 0xEFAA, + 40587 - 11904: 0xC247, + 40588 - 11904: 0xF1DF, + 40589 - 11904: 0xEFAC, + 40590 - 11904: 0xF1DE, + 40592 - 11904: 0x91AA, + 40593 - 11904: 0xF3F3, + 40594 - 11904: 0xC451, + 40595 - 11904: 0xC453, + 40596 - 11904: 0xF3F2, + 40597 - 11904: 0x91AB, + 40598 - 11904: 0xA070, + 40599 - 11904: 0xC452, + 40600 - 11904: 0x9F6D, + 40601 - 11904: 0xF5B1, + 40602 - 11904: 0xF5B3, + 40603 - 11904: 0xF5B2, + 40604 - 11904: 0xF6CA, + 40605 - 11904: 0xC565, + 40606 - 11904: 0x91AC, + 40607 - 11904: 0xC5EF, + 40608 - 11904: 0xF8E8, + 40609 - 11904: 0xF963, + 40610 - 11904: 0x91AD, + 40612 - 11904: 0xF9D2, + 40613 - 11904: 0xB3C1, + 40614 - 11904: 0xA0FD, + 40615 - 11904: 0xE4E5, + 40616 - 11904: 0x9FE2, + 40617 - 11904: 0xBEA2, + 40618 - 11904: 0x91AF, + 40619 - 11904: 0x9E41, + 40620 - 11904: 0x9AAA, + 40621 - 11904: 0xECB3, + 40622 - 11904: 0xECB2, + 40623 - 11904: 0x91B0, + 40624 - 11904: 0xEFAD, + 40625 - 11904: 0x9AAB, + 40628 - 11904: 0xC454, + 40629 - 11904: 0xC4D1, + 40630 - 11904: 0xF7C7, + 40631 - 11904: 0xF9CB, + 40635 - 11904: 0xB3C2, + 40636 - 11904: 0xBBF2, + 40637 - 11904: 0x9AAC, + 40638 - 11904: 0xBEA3, + 40639 - 11904: 0x9A4A, + 40640 - 11904: 0xF3F4, + 40641 - 11904: 0x91B2, + 40642 - 11904: 0xF874, + 40643 - 11904: 0xB6C0, + 40644 - 11904: 0x8BF6, + 40646 - 11904: 0x9AAD, + 40647 - 11904: 0x89B6, + 40648 - 11904: 0xEFAE, + 40652 - 11904: 0xC664, + 40653 - 11904: 0xB6C1, + 40654 - 11904: 0xBEA4, + 40655 - 11904: 0xC248, + 40656 - 11904: 0xF875, + 40657 - 11904: 0xB6C2, + 40659 - 11904: 0xE8F1, + 40660 - 11904: 0xC072, + 40661 - 11904: 0xECB4, + 40662 - 11904: 0xECB5, + 40664 - 11904: 0xC071, + 40666 - 11904: 0xEFAF, + 40667 - 11904: 0xC24C, + 40668 - 11904: 0xC24A, + 40669 - 11904: 0xC24B, + 40670 - 11904: 0xC249, + 40671 - 11904: 0xF1E0, + 40672 - 11904: 0xC35C, + 40674 - 11904: 0x9AAF, + 40676 - 11904: 0xF5B5, + 40677 - 11904: 0xF5B4, + 40678 - 11904: 0xF5B7, + 40679 - 11904: 0xF5B6, + 40680 - 11904: 0xC4D2, + 40683 - 11904: 0xF6CB, + 40685 - 11904: 0xF6CD, + 40686 - 11904: 0xF6CC, + 40687 - 11904: 0xC566, + 40688 - 11904: 0xF7C8, + 40689 - 11904: 0x9AB0, + 40690 - 11904: 0xF876, + 40691 - 11904: 0xF877, + 40692 - 11904: 0xC5F0, + 40693 - 11904: 0xF964, + 40694 - 11904: 0xF97D, + 40695 - 11904: 0xC675, + 40696 - 11904: 0x9AB1, + 40697 - 11904: 0xDCB0, + 40698 - 11904: 0xECB6, + 40699 - 11904: 0xEFB0, + 40700 - 11904: 0xF3F5, + 40701 - 11904: 0xE0EF, + 40702 - 11904: 0x9AA1, + 40703 - 11904: 0xEFB1, + 40704 - 11904: 0xF1E2, + 40705 - 11904: 0xF1E1, + 40706 - 11904: 0x91B9, + 40710 - 11904: 0xF878, + 40711 - 11904: 0xC652, + 40712 - 11904: 0x91BA, + 40713 - 11904: 0xF965, + 40714 - 11904: 0xF97E, + 40718 - 11904: 0xB9A9, + 40719 - 11904: 0xE8F2, + 40720 - 11904: 0xE8F3, + 40722 - 11904: 0xECB7, + 40723 - 11904: 0xB9AA, + 40725 - 11904: 0xC35D, + 40726 - 11904: 0xF1E3, + 40727 - 11904: 0x9F66, + 40728 - 11904: 0xF6CF, + 40729 - 11904: 0xC567, + 40730 - 11904: 0xF6D0, + 40731 - 11904: 0xF6CE, + 40732 - 11904: 0xF879, + 40734 - 11904: 0xF8E9, + 40736 - 11904: 0xB9AB, + 40738 - 11904: 0xEFB4, + 40739 - 11904: 0xEFB3, + 40740 - 11904: 0xEFB2, + 40741 - 11904: 0xF1E4, + 40742 - 11904: 0xA041, + 40743 - 11904: 0x8BB7, + 40744 - 11904: 0xF1E8, + 40745 - 11904: 0xF1E7, + 40746 - 11904: 0xF1E6, + 40747 - 11904: 0xF1E5, + 40748 - 11904: 0xC35E, + 40749 - 11904: 0xF3F6, + 40750 - 11904: 0xF5B9, + 40751 - 11904: 0xC4D3, + 40752 - 11904: 0xF5B8, + 40753 - 11904: 0xF6D1, + 40754 - 11904: 0xF7CB, + 40755 - 11904: 0xF7CA, + 40756 - 11904: 0xC5C4, + 40757 - 11904: 0xF7C9, + 40758 - 11904: 0xF87C, + 40759 - 11904: 0xF87B, + 40760 - 11904: 0xF87A, + 40761 - 11904: 0x91C0, + 40763 - 11904: 0xBBF3, + 40765 - 11904: 0xECB8, + 40766 - 11904: 0xC24D, + 40768 - 11904: 0xF3F7, + 40769 - 11904: 0xF3F8, + 40770 - 11904: 0xF7CC, + 40771 - 11904: 0xF87D, + 40772 - 11904: 0x9AB3, + 40773 - 11904: 0x91C3, + 40774 - 11904: 0xF8EA, + 40775 - 11904: 0xF966, + 40776 - 11904: 0xF9B9, + 40777 - 11904: 0xF9D4, + 40778 - 11904: 0xBBF4, + 40779 - 11904: 0xC24E, + 40780 - 11904: 0xF1E9, + 40781 - 11904: 0xF3F9, + 40782 - 11904: 0xF6D2, + 40783 - 11904: 0xF87E, + 40784 - 11904: 0xA0FC, + 40786 - 11904: 0xBEA6, + 40787 - 11904: 0x9FEE, + 40788 - 11904: 0xEFB5, + 40789 - 11904: 0xF1EA, + 40790 - 11904: 0xF3FA, + 40791 - 11904: 0xF3FB, + 40792 - 11904: 0xF3FC, + 40793 - 11904: 0xF5BE, + 40794 - 11904: 0x9F69, + 40795 - 11904: 0xF5BA, + 40796 - 11904: 0xC568, + 40797 - 11904: 0xF5BD, + 40798 - 11904: 0xF5BC, + 40799 - 11904: 0xC4D4, + 40800 - 11904: 0xF5BB, + 40801 - 11904: 0xC4D6, + 40802 - 11904: 0x91C8, + 40803 - 11904: 0xC4D5, + 40804 - 11904: 0xF6D4, + 40805 - 11904: 0xF6D3, + 40806 - 11904: 0xC569, + 40807 - 11904: 0xC56A, + 40809 - 11904: 0x91C9, + 40810 - 11904: 0xC5C6, + 40811 - 11904: 0xF7CD, + 40812 - 11904: 0xC5C5, + 40814 - 11904: 0xF8A3, + 40815 - 11904: 0xF8A4, + 40816 - 11904: 0xF8A2, + 40817 - 11904: 0xF8A1, + 40818 - 11904: 0xC654, + 40820 - 11904: 0xF8EB, + 40821 - 11904: 0xF8EC, + 40822 - 11904: 0xF8ED, + 40823 - 11904: 0xC653, + 40824 - 11904: 0xF967, + 40825 - 11904: 0xF96A, + 40826 - 11904: 0xF969, + 40827 - 11904: 0xF968, + 40830 - 11904: 0xF9D3, + 40831 - 11904: 0x8DE6, + 40845 - 11904: 0xC073, + 40846 - 11904: 0x91CB, + 40848 - 11904: 0xC365, + 40849 - 11904: 0xF5BF, + 40850 - 11904: 0xF6D5, + 40852 - 11904: 0xC5C7, + 40853 - 11904: 0xF7CE, + 40854 - 11904: 0x87AC, + 40855 - 11904: 0x87A4, + 40856 - 11904: 0xF9D5, + 40857 - 11904: 0x89C8, + 40860 - 11904: 0xC074, + 40863 - 11904: 0x8DAA, + 40864 - 11904: 0xEFB6, + 40866 - 11904: 0xF7CF, + 40868 - 11904: 0xF9A1, + 40869 - 11904: 0x9FDD, + 40870 - 11904: 0x8C43, + 40871 - 11904: 0x8C6D, + 40872 - 11904: 0x8C74, + 40873 - 11904: 0x8CB7, + 40874 - 11904: 0x8CB9, + 40875 - 11904: 0x8CBB, + 40876 - 11904: 0x8CC0, + 40877 - 11904: 0x8CD7, + 40878 - 11904: 0x8CD8, + 40879 - 11904: 0x8CDA, + 40880 - 11904: 0xC8A1, + 40881 - 11904: 0xC8A3, + 40882 - 11904: 0x8CED, + 40883 - 11904: 0x8D48, + 40903 - 11904: 0x87C2, + 40904 - 11904: 0x87D2, + 40905 - 11904: 0x87D6, + 40906 - 11904: 0x87DA, + 40907 - 11904: 0x87DF, +} + +const encode2Low, encode2High = 7870, 10046 + +var encode2 = [...]uint16{ + 7870 - 7870: 0x8863, + 7871 - 7870: 0x88A4, + 7872 - 7870: 0x8865, + 7873 - 7870: 0x88A6, + 8211 - 7870: 0xA156, + 8212 - 7870: 0xA158, + 8216 - 7870: 0xA1A5, + 8217 - 7870: 0xA1A6, + 8220 - 7870: 0xA1A7, + 8221 - 7870: 0xA1A8, + 8229 - 7870: 0xA14C, + 8230 - 7870: 0xA14B, + 8231 - 7870: 0xA145, + 8242 - 7870: 0xA1AC, + 8245 - 7870: 0xA1AB, + 8251 - 7870: 0xA1B0, + 8364 - 7870: 0xA3E1, + 8451 - 7870: 0xA24A, + 8453 - 7870: 0xA1C1, + 8457 - 7870: 0xA24B, + 8470 - 7870: 0xC8D2, + 8481 - 7870: 0xC8D3, + 8544 - 7870: 0xA2B9, + 8545 - 7870: 0xA2BA, + 8546 - 7870: 0xA2BB, + 8547 - 7870: 0xA2BC, + 8548 - 7870: 0xA2BD, + 8549 - 7870: 0xA2BE, + 8550 - 7870: 0xA2BF, + 8551 - 7870: 0xA2C0, + 8552 - 7870: 0xA2C1, + 8553 - 7870: 0xA2C2, + 8560 - 7870: 0xC6B5, + 8561 - 7870: 0xC6B6, + 8562 - 7870: 0xC6B7, + 8563 - 7870: 0xC6B8, + 8564 - 7870: 0xC6B9, + 8565 - 7870: 0xC6BA, + 8566 - 7870: 0xC6BB, + 8567 - 7870: 0xC6BC, + 8568 - 7870: 0xC6BD, + 8569 - 7870: 0xC6BE, + 8592 - 7870: 0xA1F6, + 8593 - 7870: 0xA1F4, + 8594 - 7870: 0xA1F7, + 8595 - 7870: 0xA1F5, + 8598 - 7870: 0xA1F8, + 8599 - 7870: 0xA1F9, + 8600 - 7870: 0xA1FB, + 8601 - 7870: 0xA1FA, + 8632 - 7870: 0xC877, + 8633 - 7870: 0xC878, + 8679 - 7870: 0xC876, + 8725 - 7870: 0xA241, + 8730 - 7870: 0xA1D4, + 8734 - 7870: 0xA1DB, + 8735 - 7870: 0xA1E8, + 8736 - 7870: 0xA1E7, + 8739 - 7870: 0xA1FD, + 8741 - 7870: 0xA1FC, + 8745 - 7870: 0xA1E4, + 8746 - 7870: 0xA1E5, + 8747 - 7870: 0xA1EC, + 8750 - 7870: 0xA1ED, + 8756 - 7870: 0xA1EF, + 8757 - 7870: 0xA1EE, + 8786 - 7870: 0xA1DC, + 8800 - 7870: 0xA1DA, + 8801 - 7870: 0xA1DD, + 8806 - 7870: 0xA1D8, + 8807 - 7870: 0xA1D9, + 8853 - 7870: 0xA1F2, + 8857 - 7870: 0xA1F3, + 8869 - 7870: 0xA1E6, + 8895 - 7870: 0xA1E9, + 9178 - 7870: 0x88A9, + 9179 - 7870: 0x88AA, + 9216 - 7870: 0xA3C0, + 9217 - 7870: 0xA3C1, + 9218 - 7870: 0xA3C2, + 9219 - 7870: 0xA3C3, + 9220 - 7870: 0xA3C4, + 9221 - 7870: 0xA3C5, + 9222 - 7870: 0xA3C6, + 9223 - 7870: 0xA3C7, + 9224 - 7870: 0xA3C8, + 9225 - 7870: 0xA3C9, + 9226 - 7870: 0xA3CA, + 9227 - 7870: 0xA3CB, + 9228 - 7870: 0xA3CC, + 9229 - 7870: 0xA3CD, + 9230 - 7870: 0xA3CE, + 9231 - 7870: 0xA3CF, + 9232 - 7870: 0xA3D0, + 9233 - 7870: 0xA3D1, + 9234 - 7870: 0xA3D2, + 9235 - 7870: 0xA3D3, + 9236 - 7870: 0xA3D4, + 9237 - 7870: 0xA3D5, + 9238 - 7870: 0xA3D6, + 9239 - 7870: 0xA3D7, + 9240 - 7870: 0xA3D8, + 9241 - 7870: 0xA3D9, + 9242 - 7870: 0xA3DA, + 9243 - 7870: 0xA3DB, + 9244 - 7870: 0xA3DC, + 9245 - 7870: 0xA3DD, + 9246 - 7870: 0xA3DE, + 9247 - 7870: 0xA3DF, + 9249 - 7870: 0xA3E0, + 9312 - 7870: 0xC6A1, + 9313 - 7870: 0xC6A2, + 9314 - 7870: 0xC6A3, + 9315 - 7870: 0xC6A4, + 9316 - 7870: 0xC6A5, + 9317 - 7870: 0xC6A6, + 9318 - 7870: 0xC6A7, + 9319 - 7870: 0xC6A8, + 9320 - 7870: 0xC6A9, + 9321 - 7870: 0xC6AA, + 9332 - 7870: 0xC6AB, + 9333 - 7870: 0xC6AC, + 9334 - 7870: 0xC6AD, + 9335 - 7870: 0xC6AE, + 9336 - 7870: 0xC6AF, + 9337 - 7870: 0xC6B0, + 9338 - 7870: 0xC6B1, + 9339 - 7870: 0xC6B2, + 9340 - 7870: 0xC6B3, + 9341 - 7870: 0xC6B4, + 9472 - 7870: 0xA277, + 9474 - 7870: 0xA278, + 9484 - 7870: 0xA27A, + 9488 - 7870: 0xA27B, + 9492 - 7870: 0xA27C, + 9496 - 7870: 0xA27D, + 9500 - 7870: 0xA275, + 9508 - 7870: 0xA274, + 9516 - 7870: 0xA273, + 9524 - 7870: 0xA272, + 9532 - 7870: 0xA271, + 9552 - 7870: 0xF9F9, + 9553 - 7870: 0xF9F8, + 9554 - 7870: 0xF9E6, + 9555 - 7870: 0xF9EF, + 9556 - 7870: 0xF9DD, + 9557 - 7870: 0xF9E8, + 9558 - 7870: 0xF9F1, + 9559 - 7870: 0xF9DF, + 9560 - 7870: 0xF9EC, + 9561 - 7870: 0xF9F5, + 9562 - 7870: 0xF9E3, + 9563 - 7870: 0xF9EE, + 9564 - 7870: 0xF9F7, + 9565 - 7870: 0xF9E5, + 9566 - 7870: 0xF9E9, + 9567 - 7870: 0xF9F2, + 9568 - 7870: 0xF9E0, + 9569 - 7870: 0xF9EB, + 9570 - 7870: 0xF9F4, + 9571 - 7870: 0xF9E2, + 9572 - 7870: 0xF9E7, + 9573 - 7870: 0xF9F0, + 9574 - 7870: 0xF9DE, + 9575 - 7870: 0xF9ED, + 9576 - 7870: 0xF9F6, + 9577 - 7870: 0xF9E4, + 9578 - 7870: 0xF9EA, + 9579 - 7870: 0xF9F3, + 9580 - 7870: 0xF9E1, + 9581 - 7870: 0xF9FA, + 9582 - 7870: 0xF9FB, + 9583 - 7870: 0xF9FD, + 9584 - 7870: 0xF9FC, + 9585 - 7870: 0xA2AC, + 9586 - 7870: 0xA2AD, + 9587 - 7870: 0xA2AE, + 9588 - 7870: 0xA15A, + 9601 - 7870: 0xA262, + 9602 - 7870: 0xA263, + 9603 - 7870: 0xA264, + 9604 - 7870: 0xA265, + 9605 - 7870: 0xA266, + 9606 - 7870: 0xA267, + 9607 - 7870: 0xA268, + 9608 - 7870: 0xA269, + 9609 - 7870: 0xA270, + 9610 - 7870: 0xA26F, + 9611 - 7870: 0xA26E, + 9612 - 7870: 0xA26D, + 9613 - 7870: 0xA26C, + 9614 - 7870: 0xA26B, + 9615 - 7870: 0xA26A, + 9620 - 7870: 0xA276, + 9621 - 7870: 0xA279, + 9632 - 7870: 0xA1BD, + 9633 - 7870: 0xA1BC, + 9650 - 7870: 0xA1B6, + 9651 - 7870: 0xA1B5, + 9660 - 7870: 0xA1BF, + 9661 - 7870: 0xA1BE, + 9670 - 7870: 0xA1BB, + 9671 - 7870: 0xA1BA, + 9675 - 7870: 0xA1B3, + 9678 - 7870: 0xA1B7, + 9679 - 7870: 0xA1B4, + 9698 - 7870: 0xA2A8, + 9699 - 7870: 0xA2A9, + 9700 - 7870: 0xA2AB, + 9701 - 7870: 0xA2AA, + 9733 - 7870: 0xA1B9, + 9734 - 7870: 0xA1B8, + 9792 - 7870: 0xA1F0, + 9794 - 7870: 0xA1F1, + 10045 - 7870: 0xC6E6, +} + +const encode3Low, encode3High = 167, 1106 + +var encode3 = [...]uint16{ + 167 - 167: 0xA1B1, + 168 - 167: 0xC6D8, + 175 - 167: 0xA1C2, + 176 - 167: 0xA258, + 177 - 167: 0xA1D3, + 183 - 167: 0xA150, + 192 - 167: 0x8859, + 193 - 167: 0x8857, + 200 - 167: 0x885D, + 201 - 167: 0x885B, + 202 - 167: 0x8866, + 210 - 167: 0x8861, + 211 - 167: 0x885F, + 215 - 167: 0xA1D1, + 224 - 167: 0x886A, + 225 - 167: 0x8868, + 232 - 167: 0x886F, + 233 - 167: 0x886D, + 234 - 167: 0x88A7, + 236 - 167: 0x8873, + 237 - 167: 0x8871, + 242 - 167: 0x8877, + 243 - 167: 0x8875, + 247 - 167: 0xA1D2, + 248 - 167: 0xC8FB, + 249 - 167: 0x887B, + 250 - 167: 0x8879, + 252 - 167: 0x88A2, + 256 - 167: 0x8856, + 257 - 167: 0x8867, + 274 - 167: 0x885A, + 275 - 167: 0x886C, + 282 - 167: 0x885C, + 283 - 167: 0x886E, + 299 - 167: 0x8870, + 331 - 167: 0xC8FC, + 332 - 167: 0x885E, + 333 - 167: 0x8874, + 339 - 167: 0xC8FA, + 363 - 167: 0x8878, + 461 - 167: 0x8858, + 462 - 167: 0x8869, + 464 - 167: 0x8872, + 465 - 167: 0x8860, + 466 - 167: 0x8876, + 468 - 167: 0x887A, + 470 - 167: 0x887C, + 472 - 167: 0x887D, + 474 - 167: 0x887E, + 476 - 167: 0x88A1, + 592 - 167: 0xC8F6, + 593 - 167: 0x886B, + 596 - 167: 0xC8F8, + 603 - 167: 0xC8F7, + 609 - 167: 0x88A8, + 618 - 167: 0xC8FE, + 629 - 167: 0xC8F9, + 643 - 167: 0xC8F5, + 650 - 167: 0xC8FD, + 710 - 167: 0xC6D9, + 711 - 167: 0xA3BE, + 713 - 167: 0xA3BC, + 714 - 167: 0xA3BD, + 715 - 167: 0xA3BF, + 717 - 167: 0xA1C5, + 729 - 167: 0xA3BB, + 913 - 167: 0xA344, + 914 - 167: 0xA345, + 915 - 167: 0xA346, + 916 - 167: 0xA347, + 917 - 167: 0xA348, + 918 - 167: 0xA349, + 919 - 167: 0xA34A, + 920 - 167: 0xA34B, + 921 - 167: 0xA34C, + 922 - 167: 0xA34D, + 923 - 167: 0xA34E, + 924 - 167: 0xA34F, + 925 - 167: 0xA350, + 926 - 167: 0xA351, + 927 - 167: 0xA352, + 928 - 167: 0xA353, + 929 - 167: 0xA354, + 931 - 167: 0xA355, + 932 - 167: 0xA356, + 933 - 167: 0xA357, + 934 - 167: 0xA358, + 935 - 167: 0xA359, + 936 - 167: 0xA35A, + 937 - 167: 0xA35B, + 945 - 167: 0xA35C, + 946 - 167: 0xA35D, + 947 - 167: 0xA35E, + 948 - 167: 0xA35F, + 949 - 167: 0xA360, + 950 - 167: 0xA361, + 951 - 167: 0xA362, + 952 - 167: 0xA363, + 953 - 167: 0xA364, + 954 - 167: 0xA365, + 955 - 167: 0xA366, + 956 - 167: 0xA367, + 957 - 167: 0xA368, + 958 - 167: 0xA369, + 959 - 167: 0xA36A, + 960 - 167: 0xA36B, + 961 - 167: 0xA36C, + 963 - 167: 0xA36D, + 964 - 167: 0xA36E, + 965 - 167: 0xA36F, + 966 - 167: 0xA370, + 967 - 167: 0xA371, + 968 - 167: 0xA372, + 969 - 167: 0xA373, + 1025 - 167: 0xC7F9, + 1040 - 167: 0xC7F3, + 1041 - 167: 0xC7F4, + 1042 - 167: 0xC7F5, + 1043 - 167: 0xC7F6, + 1044 - 167: 0xC7F7, + 1045 - 167: 0xC7F8, + 1046 - 167: 0xC7FA, + 1047 - 167: 0xC7FB, + 1048 - 167: 0xC7FC, + 1049 - 167: 0xC7FD, + 1050 - 167: 0xC7FE, + 1051 - 167: 0xC840, + 1052 - 167: 0xC841, + 1053 - 167: 0xC842, + 1054 - 167: 0xC843, + 1055 - 167: 0xC844, + 1056 - 167: 0xC845, + 1057 - 167: 0xC846, + 1058 - 167: 0xC847, + 1059 - 167: 0xC848, + 1060 - 167: 0xC849, + 1061 - 167: 0xC84A, + 1062 - 167: 0xC84B, + 1063 - 167: 0xC84C, + 1064 - 167: 0xC84D, + 1065 - 167: 0xC84E, + 1066 - 167: 0xC84F, + 1067 - 167: 0xC850, + 1068 - 167: 0xC851, + 1069 - 167: 0xC852, + 1070 - 167: 0xC853, + 1071 - 167: 0xC854, + 1072 - 167: 0xC855, + 1073 - 167: 0xC856, + 1074 - 167: 0xC857, + 1075 - 167: 0xC858, + 1076 - 167: 0xC859, + 1077 - 167: 0xC85A, + 1078 - 167: 0xC85C, + 1079 - 167: 0xC85D, + 1080 - 167: 0xC85E, + 1081 - 167: 0xC85F, + 1082 - 167: 0xC860, + 1083 - 167: 0xC861, + 1084 - 167: 0xC862, + 1085 - 167: 0xC863, + 1086 - 167: 0xC864, + 1087 - 167: 0xC865, + 1088 - 167: 0xC866, + 1089 - 167: 0xC867, + 1090 - 167: 0xC868, + 1091 - 167: 0xC869, + 1092 - 167: 0xC86A, + 1093 - 167: 0xC86B, + 1094 - 167: 0xC86C, + 1095 - 167: 0xC86D, + 1096 - 167: 0xC86E, + 1097 - 167: 0xC86F, + 1098 - 167: 0xC870, + 1099 - 167: 0xC871, + 1100 - 167: 0xC872, + 1101 - 167: 0xC873, + 1102 - 167: 0xC874, + 1103 - 167: 0xC875, + 1105 - 167: 0xC85B, +} + +const encode4Low, encode4High = 65072, 65518 + +var encode4 = [...]uint16{ + 65072 - 65072: 0xA14A, + 65073 - 65072: 0xA157, + 65075 - 65072: 0xA159, + 65076 - 65072: 0xA15B, + 65077 - 65072: 0xA15F, + 65078 - 65072: 0xA160, + 65079 - 65072: 0xA163, + 65080 - 65072: 0xA164, + 65081 - 65072: 0xA167, + 65082 - 65072: 0xA168, + 65083 - 65072: 0xA16B, + 65084 - 65072: 0xA16C, + 65085 - 65072: 0xA16F, + 65086 - 65072: 0xA170, + 65087 - 65072: 0xA173, + 65088 - 65072: 0xA174, + 65089 - 65072: 0xA177, + 65090 - 65072: 0xA178, + 65091 - 65072: 0xA17B, + 65092 - 65072: 0xA17C, + 65097 - 65072: 0xA1C6, + 65098 - 65072: 0xA1C7, + 65099 - 65072: 0xA1CA, + 65100 - 65072: 0xA1CB, + 65101 - 65072: 0xA1C8, + 65102 - 65072: 0xA1C9, + 65103 - 65072: 0xA15C, + 65104 - 65072: 0xA14D, + 65105 - 65072: 0xA14E, + 65106 - 65072: 0xA14F, + 65108 - 65072: 0xA151, + 65109 - 65072: 0xA152, + 65110 - 65072: 0xA153, + 65111 - 65072: 0xA154, + 65113 - 65072: 0xA17D, + 65114 - 65072: 0xA17E, + 65115 - 65072: 0xA1A1, + 65116 - 65072: 0xA1A2, + 65117 - 65072: 0xA1A3, + 65118 - 65072: 0xA1A4, + 65119 - 65072: 0xA1CC, + 65120 - 65072: 0xA1CD, + 65121 - 65072: 0xA1CE, + 65122 - 65072: 0xA1DE, + 65123 - 65072: 0xA1DF, + 65124 - 65072: 0xA1E0, + 65125 - 65072: 0xA1E1, + 65126 - 65072: 0xA1E2, + 65128 - 65072: 0xA242, + 65129 - 65072: 0xA24C, + 65130 - 65072: 0xA24D, + 65131 - 65072: 0xA24E, + 65281 - 65072: 0xA149, + 65282 - 65072: 0xC8D0, + 65283 - 65072: 0xA1AD, + 65284 - 65072: 0xA243, + 65285 - 65072: 0xA248, + 65286 - 65072: 0xA1AE, + 65287 - 65072: 0xC8CF, + 65288 - 65072: 0xA15D, + 65289 - 65072: 0xA15E, + 65290 - 65072: 0xA1AF, + 65291 - 65072: 0xA1CF, + 65292 - 65072: 0xA141, + 65293 - 65072: 0xA1D0, + 65294 - 65072: 0xA144, + 65295 - 65072: 0xA1FE, + 65296 - 65072: 0xA2AF, + 65297 - 65072: 0xA2B0, + 65298 - 65072: 0xA2B1, + 65299 - 65072: 0xA2B2, + 65300 - 65072: 0xA2B3, + 65301 - 65072: 0xA2B4, + 65302 - 65072: 0xA2B5, + 65303 - 65072: 0xA2B6, + 65304 - 65072: 0xA2B7, + 65305 - 65072: 0xA2B8, + 65306 - 65072: 0xA147, + 65307 - 65072: 0xA146, + 65308 - 65072: 0xA1D5, + 65309 - 65072: 0xA1D7, + 65310 - 65072: 0xA1D6, + 65311 - 65072: 0xA148, + 65312 - 65072: 0xA249, + 65313 - 65072: 0xA2CF, + 65314 - 65072: 0xA2D0, + 65315 - 65072: 0xA2D1, + 65316 - 65072: 0xA2D2, + 65317 - 65072: 0xA2D3, + 65318 - 65072: 0xA2D4, + 65319 - 65072: 0xA2D5, + 65320 - 65072: 0xA2D6, + 65321 - 65072: 0xA2D7, + 65322 - 65072: 0xA2D8, + 65323 - 65072: 0xA2D9, + 65324 - 65072: 0xA2DA, + 65325 - 65072: 0xA2DB, + 65326 - 65072: 0xA2DC, + 65327 - 65072: 0xA2DD, + 65328 - 65072: 0xA2DE, + 65329 - 65072: 0xA2DF, + 65330 - 65072: 0xA2E0, + 65331 - 65072: 0xA2E1, + 65332 - 65072: 0xA2E2, + 65333 - 65072: 0xA2E3, + 65334 - 65072: 0xA2E4, + 65335 - 65072: 0xA2E5, + 65336 - 65072: 0xA2E6, + 65337 - 65072: 0xA2E7, + 65338 - 65072: 0xA2E8, + 65339 - 65072: 0xC6E4, + 65340 - 65072: 0xA240, + 65341 - 65072: 0xC6E5, + 65343 - 65072: 0xA1C4, + 65345 - 65072: 0xA2E9, + 65346 - 65072: 0xA2EA, + 65347 - 65072: 0xA2EB, + 65348 - 65072: 0xA2EC, + 65349 - 65072: 0xA2ED, + 65350 - 65072: 0xA2EE, + 65351 - 65072: 0xA2EF, + 65352 - 65072: 0xA2F0, + 65353 - 65072: 0xA2F1, + 65354 - 65072: 0xA2F2, + 65355 - 65072: 0xA2F3, + 65356 - 65072: 0xA2F4, + 65357 - 65072: 0xA2F5, + 65358 - 65072: 0xA2F6, + 65359 - 65072: 0xA2F7, + 65360 - 65072: 0xA2F8, + 65361 - 65072: 0xA2F9, + 65362 - 65072: 0xA2FA, + 65363 - 65072: 0xA2FB, + 65364 - 65072: 0xA2FC, + 65365 - 65072: 0xA2FD, + 65366 - 65072: 0xA2FE, + 65367 - 65072: 0xA340, + 65368 - 65072: 0xA341, + 65369 - 65072: 0xA342, + 65370 - 65072: 0xA343, + 65371 - 65072: 0xA161, + 65372 - 65072: 0xA155, + 65373 - 65072: 0xA162, + 65374 - 65072: 0xA1E3, + 65504 - 65072: 0xA246, + 65505 - 65072: 0xA247, + 65506 - 65072: 0xC8CD, + 65507 - 65072: 0xA1C3, + 65508 - 65072: 0xC8CE, + 65509 - 65072: 0xA244, + 65517 - 65072: 0xF9FE, +} + +const encode5Low, encode5High = 194597, 195029 + +var encode5 = [...]uint16{ + 194597 - 194597: 0x9874, + 194619 - 194597: 0x9AC8, + 194624 - 194597: 0xA047, + 194680 - 194597: 0x8BC3, + 194708 - 194597: 0xFC48, + 194726 - 194597: 0xFC77, + 194765 - 194597: 0x9C52, + 194964 - 194597: 0x8EFD, + 194994 - 194597: 0x8FA8, + 195004 - 194597: 0x957A, + 195028 - 194597: 0x8FF0, +} + +const encode6Low, encode6High = 63751, 64014 + +var encode6 = [...]uint16{ + 63751 - 63751: 0x8BF8, + 64012 - 63751: 0xC94A, + 64013 - 63751: 0xDDFC, +} + +const encode7Low, encode7High = 175615, 175616 + +var encode7 = [...]uint16{ + 175615 - 175615: 0x87DC, +} diff --git a/vendor/golang.org/x/text/encoding/unicode/override.go b/vendor/golang.org/x/text/encoding/unicode/override.go new file mode 100644 index 0000000..35d62fc --- /dev/null +++ b/vendor/golang.org/x/text/encoding/unicode/override.go @@ -0,0 +1,82 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unicode + +import ( + "golang.org/x/text/transform" +) + +// BOMOverride returns a new decoder transformer that is identical to fallback, +// except that the presence of a Byte Order Mark at the start of the input +// causes it to switch to the corresponding Unicode decoding. It will only +// consider BOMs for UTF-8, UTF-16BE, and UTF-16LE. +// +// This differs from using ExpectBOM by allowing a BOM to switch to UTF-8, not +// just UTF-16 variants, and allowing falling back to any encoding scheme. +// +// This technique is recommended by the W3C for use in HTML 5: "For +// compatibility with deployed content, the byte order mark (also known as BOM) +// is considered more authoritative than anything else." +// http://www.w3.org/TR/encoding/#specification-hooks +// +// Using BOMOverride is mostly intended for use cases where the first characters +// of a fallback encoding are known to not be a BOM, for example, for valid HTML +// and most encodings. +func BOMOverride(fallback transform.Transformer) transform.Transformer { + // TODO: possibly allow a variadic argument of unicode encodings to allow + // specifying details of which fallbacks are supported as well as + // specifying the details of the implementations. This would also allow for + // support for UTF-32, which should not be supported by default. + return &bomOverride{fallback: fallback} +} + +type bomOverride struct { + fallback transform.Transformer + current transform.Transformer +} + +func (d *bomOverride) Reset() { + d.current = nil + d.fallback.Reset() +} + +var ( + // TODO: we could use decode functions here, instead of allocating a new + // decoder on every NewDecoder as IgnoreBOM decoders can be stateless. + utf16le = UTF16(LittleEndian, IgnoreBOM) + utf16be = UTF16(BigEndian, IgnoreBOM) +) + +const utf8BOM = "\ufeff" + +func (d *bomOverride) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if d.current != nil { + return d.current.Transform(dst, src, atEOF) + } + if len(src) < 3 && !atEOF { + return 0, 0, transform.ErrShortSrc + } + d.current = d.fallback + bomSize := 0 + if len(src) >= 2 { + if src[0] == 0xFF && src[1] == 0xFE { + d.current = utf16le.NewDecoder() + bomSize = 2 + } else if src[0] == 0xFE && src[1] == 0xFF { + d.current = utf16be.NewDecoder() + bomSize = 2 + } else if len(src) >= 3 && + src[0] == utf8BOM[0] && + src[1] == utf8BOM[1] && + src[2] == utf8BOM[2] { + d.current = transform.Nop + bomSize = 3 + } + } + if bomSize < len(src) { + nDst, nSrc, err = d.current.Transform(dst, src[bomSize:], atEOF) + } + return nDst, nSrc + bomSize, err +} diff --git a/vendor/golang.org/x/text/encoding/unicode/unicode.go b/vendor/golang.org/x/text/encoding/unicode/unicode.go new file mode 100644 index 0000000..579cadf --- /dev/null +++ b/vendor/golang.org/x/text/encoding/unicode/unicode.go @@ -0,0 +1,434 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package unicode provides Unicode encodings such as UTF-16. +package unicode // import "golang.org/x/text/encoding/unicode" + +import ( + "errors" + "unicode/utf16" + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/internal/utf8internal" + "golang.org/x/text/runes" + "golang.org/x/text/transform" +) + +// TODO: I think the Transformers really should return errors on unmatched +// surrogate pairs and odd numbers of bytes. This is not required by RFC 2781, +// which leaves it open, but is suggested by WhatWG. It will allow for all error +// modes as defined by WhatWG: fatal, HTML and Replacement. This would require +// the introduction of some kind of error type for conveying the erroneous code +// point. + +// UTF8 is the UTF-8 encoding. +var UTF8 encoding.Encoding = utf8enc + +var utf8enc = &internal.Encoding{ + &internal.SimpleEncoding{utf8Decoder{}, runes.ReplaceIllFormed()}, + "UTF-8", + identifier.UTF8, +} + +type utf8Decoder struct{ transform.NopResetter } + +func (utf8Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + var pSrc int // point from which to start copy in src + var accept utf8internal.AcceptRange + + // The decoder can only make the input larger, not smaller. + n := len(src) + if len(dst) < n { + err = transform.ErrShortDst + n = len(dst) + atEOF = false + } + for nSrc < n { + c := src[nSrc] + if c < utf8.RuneSelf { + nSrc++ + continue + } + first := utf8internal.First[c] + size := int(first & utf8internal.SizeMask) + if first == utf8internal.FirstInvalid { + goto handleInvalid // invalid starter byte + } + accept = utf8internal.AcceptRanges[first>>utf8internal.AcceptShift] + if nSrc+size > n { + if !atEOF { + // We may stop earlier than necessary here if the short sequence + // has invalid bytes. Not checking for this simplifies the code + // and may avoid duplicate computations in certain conditions. + if err == nil { + err = transform.ErrShortSrc + } + break + } + // Determine the maximal subpart of an ill-formed subsequence. + switch { + case nSrc+1 >= n || src[nSrc+1] < accept.Lo || accept.Hi < src[nSrc+1]: + size = 1 + case nSrc+2 >= n || src[nSrc+2] < utf8internal.LoCB || utf8internal.HiCB < src[nSrc+2]: + size = 2 + default: + size = 3 // As we are short, the maximum is 3. + } + goto handleInvalid + } + if c = src[nSrc+1]; c < accept.Lo || accept.Hi < c { + size = 1 + goto handleInvalid // invalid continuation byte + } else if size == 2 { + } else if c = src[nSrc+2]; c < utf8internal.LoCB || utf8internal.HiCB < c { + size = 2 + goto handleInvalid // invalid continuation byte + } else if size == 3 { + } else if c = src[nSrc+3]; c < utf8internal.LoCB || utf8internal.HiCB < c { + size = 3 + goto handleInvalid // invalid continuation byte + } + nSrc += size + continue + + handleInvalid: + // Copy the scanned input so far. + nDst += copy(dst[nDst:], src[pSrc:nSrc]) + + // Append RuneError to the destination. + const runeError = "\ufffd" + if nDst+len(runeError) > len(dst) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += copy(dst[nDst:], runeError) + + // Skip the maximal subpart of an ill-formed subsequence according to + // the W3C standard way instead of the Go way. This Transform is + // probably the only place in the text repo where it is warranted. + nSrc += size + pSrc = nSrc + + // Recompute the maximum source length. + if sz := len(dst) - nDst; sz < len(src)-nSrc { + err = transform.ErrShortDst + n = nSrc + sz + atEOF = false + } + } + return nDst + copy(dst[nDst:], src[pSrc:nSrc]), nSrc, err +} + +// UTF16 returns a UTF-16 Encoding for the given default endianness and byte +// order mark (BOM) policy. +// +// When decoding from UTF-16 to UTF-8, if the BOMPolicy is IgnoreBOM then +// neither BOMs U+FEFF nor noncharacters U+FFFE in the input stream will affect +// the endianness used for decoding, and will instead be output as their +// standard UTF-8 encodings: "\xef\xbb\xbf" and "\xef\xbf\xbe". If the BOMPolicy +// is UseBOM or ExpectBOM a staring BOM is not written to the UTF-8 output. +// Instead, it overrides the default endianness e for the remainder of the +// transformation. Any subsequent BOMs U+FEFF or noncharacters U+FFFE will not +// affect the endianness used, and will instead be output as their standard +// UTF-8 encodings. For UseBOM, if there is no starting BOM, it will proceed +// with the default Endianness. For ExpectBOM, in that case, the transformation +// will return early with an ErrMissingBOM error. +// +// When encoding from UTF-8 to UTF-16, a BOM will be inserted at the start of +// the output if the BOMPolicy is UseBOM or ExpectBOM. Otherwise, a BOM will not +// be inserted. The UTF-8 input does not need to contain a BOM. +// +// There is no concept of a 'native' endianness. If the UTF-16 data is produced +// and consumed in a greater context that implies a certain endianness, use +// IgnoreBOM. Otherwise, use ExpectBOM and always produce and consume a BOM. +// +// In the language of http://www.unicode.org/faq/utf_bom.html#bom10, IgnoreBOM +// corresponds to "Where the precise type of the data stream is known... the +// BOM should not be used" and ExpectBOM corresponds to "A particular +// protocol... may require use of the BOM". +func UTF16(e Endianness, b BOMPolicy) encoding.Encoding { + return utf16Encoding{config{e, b}, mibValue[e][b&bomMask]} +} + +// mibValue maps Endianness and BOMPolicy settings to MIB constants. Note that +// some configurations map to the same MIB identifier. RFC 2781 has requirements +// and recommendations. Some of the "configurations" are merely recommendations, +// so multiple configurations could match. +var mibValue = map[Endianness][numBOMValues]identifier.MIB{ + BigEndian: [numBOMValues]identifier.MIB{ + IgnoreBOM: identifier.UTF16BE, + UseBOM: identifier.UTF16, // BigEnding default is preferred by RFC 2781. + // TODO: acceptBOM | strictBOM would map to UTF16BE as well. + }, + LittleEndian: [numBOMValues]identifier.MIB{ + IgnoreBOM: identifier.UTF16LE, + UseBOM: identifier.UTF16, // LittleEndian default is allowed and preferred on Windows. + // TODO: acceptBOM | strictBOM would map to UTF16LE as well. + }, + // ExpectBOM is not widely used and has no valid MIB identifier. +} + +// All lists a configuration for each IANA-defined UTF-16 variant. +var All = []encoding.Encoding{ + UTF8, + UTF16(BigEndian, UseBOM), + UTF16(BigEndian, IgnoreBOM), + UTF16(LittleEndian, IgnoreBOM), +} + +// BOMPolicy is a UTF-16 encoding's byte order mark policy. +type BOMPolicy uint8 + +const ( + writeBOM BOMPolicy = 0x01 + acceptBOM BOMPolicy = 0x02 + requireBOM BOMPolicy = 0x04 + bomMask BOMPolicy = 0x07 + + // HACK: numBOMValues == 8 triggers a bug in the 1.4 compiler (cannot have a + // map of an array of length 8 of a type that is also used as a key or value + // in another map). See golang.org/issue/11354. + // TODO: consider changing this value back to 8 if the use of 1.4.* has + // been minimized. + numBOMValues = 8 + 1 + + // IgnoreBOM means to ignore any byte order marks. + IgnoreBOM BOMPolicy = 0 + // Common and RFC 2781-compliant interpretation for UTF-16BE/LE. + + // UseBOM means that the UTF-16 form may start with a byte order mark, which + // will be used to override the default encoding. + UseBOM BOMPolicy = writeBOM | acceptBOM + // Common and RFC 2781-compliant interpretation for UTF-16. + + // ExpectBOM means that the UTF-16 form must start with a byte order mark, + // which will be used to override the default encoding. + ExpectBOM BOMPolicy = writeBOM | acceptBOM | requireBOM + // Used in Java as Unicode (not to be confused with Java's UTF-16) and + // ICU's UTF-16,version=1. Not compliant with RFC 2781. + + // TODO (maybe): strictBOM: BOM must match Endianness. This would allow: + // - UTF-16(B|L)E,version=1: writeBOM | acceptBOM | requireBOM | strictBOM + // (UnicodeBig and UnicodeLittle in Java) + // - RFC 2781-compliant, but less common interpretation for UTF-16(B|L)E: + // acceptBOM | strictBOM (e.g. assigned to CheckBOM). + // This addition would be consistent with supporting ExpectBOM. +) + +// Endianness is a UTF-16 encoding's default endianness. +type Endianness bool + +const ( + // BigEndian is UTF-16BE. + BigEndian Endianness = false + // LittleEndian is UTF-16LE. + LittleEndian Endianness = true +) + +// ErrMissingBOM means that decoding UTF-16 input with ExpectBOM did not find a +// starting byte order mark. +var ErrMissingBOM = errors.New("encoding: missing byte order mark") + +type utf16Encoding struct { + config + mib identifier.MIB +} + +type config struct { + endianness Endianness + bomPolicy BOMPolicy +} + +func (u utf16Encoding) NewDecoder() *encoding.Decoder { + return &encoding.Decoder{Transformer: &utf16Decoder{ + initial: u.config, + current: u.config, + }} +} + +func (u utf16Encoding) NewEncoder() *encoding.Encoder { + return &encoding.Encoder{Transformer: &utf16Encoder{ + endianness: u.endianness, + initialBOMPolicy: u.bomPolicy, + currentBOMPolicy: u.bomPolicy, + }} +} + +func (u utf16Encoding) ID() (mib identifier.MIB, other string) { + return u.mib, "" +} + +func (u utf16Encoding) String() string { + e, b := "B", "" + if u.endianness == LittleEndian { + e = "L" + } + switch u.bomPolicy { + case ExpectBOM: + b = "Expect" + case UseBOM: + b = "Use" + case IgnoreBOM: + b = "Ignore" + } + return "UTF-16" + e + "E (" + b + " BOM)" +} + +type utf16Decoder struct { + initial config + current config +} + +func (u *utf16Decoder) Reset() { + u.current = u.initial +} + +func (u *utf16Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if len(src) == 0 { + if atEOF && u.current.bomPolicy&requireBOM != 0 { + return 0, 0, ErrMissingBOM + } + return 0, 0, nil + } + if u.current.bomPolicy&acceptBOM != 0 { + if len(src) < 2 { + return 0, 0, transform.ErrShortSrc + } + switch { + case src[0] == 0xfe && src[1] == 0xff: + u.current.endianness = BigEndian + nSrc = 2 + case src[0] == 0xff && src[1] == 0xfe: + u.current.endianness = LittleEndian + nSrc = 2 + default: + if u.current.bomPolicy&requireBOM != 0 { + return 0, 0, ErrMissingBOM + } + } + u.current.bomPolicy = IgnoreBOM + } + + var r rune + var dSize, sSize int + for nSrc < len(src) { + if nSrc+1 < len(src) { + x := uint16(src[nSrc+0])<<8 | uint16(src[nSrc+1]) + if u.current.endianness == LittleEndian { + x = x>>8 | x<<8 + } + r, sSize = rune(x), 2 + if utf16.IsSurrogate(r) { + if nSrc+3 < len(src) { + x = uint16(src[nSrc+2])<<8 | uint16(src[nSrc+3]) + if u.current.endianness == LittleEndian { + x = x>>8 | x<<8 + } + // Save for next iteration if it is not a high surrogate. + if isHighSurrogate(rune(x)) { + r, sSize = utf16.DecodeRune(r, rune(x)), 4 + } + } else if !atEOF { + err = transform.ErrShortSrc + break + } + } + if dSize = utf8.RuneLen(r); dSize < 0 { + r, dSize = utf8.RuneError, 3 + } + } else if atEOF { + // Single trailing byte. + r, dSize, sSize = utf8.RuneError, 3, 1 + } else { + err = transform.ErrShortSrc + break + } + if nDst+dSize > len(dst) { + err = transform.ErrShortDst + break + } + nDst += utf8.EncodeRune(dst[nDst:], r) + nSrc += sSize + } + return nDst, nSrc, err +} + +func isHighSurrogate(r rune) bool { + return 0xDC00 <= r && r <= 0xDFFF +} + +type utf16Encoder struct { + endianness Endianness + initialBOMPolicy BOMPolicy + currentBOMPolicy BOMPolicy +} + +func (u *utf16Encoder) Reset() { + u.currentBOMPolicy = u.initialBOMPolicy +} + +func (u *utf16Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if u.currentBOMPolicy&writeBOM != 0 { + if len(dst) < 2 { + return 0, 0, transform.ErrShortDst + } + dst[0], dst[1] = 0xfe, 0xff + u.currentBOMPolicy = IgnoreBOM + nDst = 2 + } + + r, size := rune(0), 0 + for nSrc < len(src) { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + } + + if r <= 0xffff { + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = uint8(r >> 8) + dst[nDst+1] = uint8(r) + nDst += 2 + } else { + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + r1, r2 := utf16.EncodeRune(r) + dst[nDst+0] = uint8(r1 >> 8) + dst[nDst+1] = uint8(r1) + dst[nDst+2] = uint8(r2 >> 8) + dst[nDst+3] = uint8(r2) + nDst += 4 + } + nSrc += size + } + + if u.endianness == LittleEndian { + for i := 0; i < nDst; i += 2 { + dst[i], dst[i+1] = dst[i+1], dst[i] + } + } + return nDst, nSrc, err +} diff --git a/vendor/golang.org/x/text/encoding/unicode/unicode_test.go b/vendor/golang.org/x/text/encoding/unicode/unicode_test.go new file mode 100644 index 0000000..51b4712 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/unicode/unicode_test.go @@ -0,0 +1,499 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unicode + +import ( + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/internal/enctest" + "golang.org/x/text/transform" +) + +func TestBasics(t *testing.T) { + testCases := []struct { + e encoding.Encoding + encPrefix string + encSuffix string + encoded string + utf8 string + }{{ + e: utf16BEIB, + encoded: "\x00\x57\x00\xe4\xd8\x35\xdd\x65", + utf8: "\x57\u00e4\U0001d565", + }, { + e: utf16BEEB, + encPrefix: "\xfe\xff", + encoded: "\x00\x57\x00\xe4\xd8\x35\xdd\x65", + utf8: "\x57\u00e4\U0001d565", + }, { + e: utf16LEIB, + encoded: "\x57\x00\xe4\x00\x35\xd8\x65\xdd", + utf8: "\x57\u00e4\U0001d565", + }, { + e: utf16LEEB, + encPrefix: "\xff\xfe", + encoded: "\x57\x00\xe4\x00\x35\xd8\x65\xdd", + utf8: "\x57\u00e4\U0001d565", + }} + + for _, tc := range testCases { + enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, tc.encPrefix, tc.encSuffix) + } +} + +func TestFiles(t *testing.T) { + enctest.TestFile(t, UTF8) + enctest.TestFile(t, utf16LEIB) +} + +func BenchmarkEncoding(b *testing.B) { + enctest.Benchmark(b, UTF8) + enctest.Benchmark(b, utf16LEIB) +} + +var ( + utf16LEIB = UTF16(LittleEndian, IgnoreBOM) // UTF-16LE (atypical interpretation) + utf16LEUB = UTF16(LittleEndian, UseBOM) // UTF-16, LE + utf16LEEB = UTF16(LittleEndian, ExpectBOM) // UTF-16, LE, Expect + utf16BEIB = UTF16(BigEndian, IgnoreBOM) // UTF-16BE (atypical interpretation) + utf16BEUB = UTF16(BigEndian, UseBOM) // UTF-16 default + utf16BEEB = UTF16(BigEndian, ExpectBOM) // UTF-16 Expect +) + +func TestUTF16(t *testing.T) { + testCases := []struct { + desc string + src string + notEOF bool // the inverse of atEOF + sizeDst int + want string + nSrc int + err error + t transform.Transformer + }{{ + desc: "utf-16 IgnoreBOM dec: empty string", + t: utf16BEIB.NewDecoder(), + }, { + desc: "utf-16 UseBOM dec: empty string", + t: utf16BEUB.NewDecoder(), + }, { + desc: "utf-16 ExpectBOM dec: empty string", + err: ErrMissingBOM, + t: utf16BEEB.NewDecoder(), + }, { + desc: "utf-16 dec: BOM determines encoding BE (RFC 2781:3.3)", + src: "\xFE\xFF\xD8\x08\xDF\x45\x00\x3D\x00\x52\x00\x61", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 12, + t: utf16BEUB.NewDecoder(), + }, { + desc: "utf-16 dec: BOM determines encoding LE (RFC 2781:3.3)", + src: "\xFF\xFE\x08\xD8\x45\xDF\x3D\x00\x52\x00\x61\x00", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 12, + t: utf16LEUB.NewDecoder(), + }, { + desc: "utf-16 dec: BOM determines encoding LE, change default (RFC 2781:3.3)", + src: "\xFF\xFE\x08\xD8\x45\xDF\x3D\x00\x52\x00\x61\x00", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 12, + t: utf16BEUB.NewDecoder(), + }, { + desc: "utf-16 dec: Fail on missing BOM when required", + src: "\x08\xD8\x45\xDF\x3D\x00\xFF\xFE\xFE\xFF\x00\x52\x00\x61", + sizeDst: 100, + want: "", + nSrc: 0, + err: ErrMissingBOM, + t: utf16BEEB.NewDecoder(), + }, { + desc: "utf-16 dec: SHOULD interpret text as big-endian when BOM not present (RFC 2781:4.3)", + src: "\xD8\x08\xDF\x45\x00\x3D\x00\x52\x00\x61", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 10, + t: utf16BEUB.NewDecoder(), + }, { + // This is an error according to RFC 2781. But errors in RFC 2781 are + // open to interpretations, so I guess this is fine. + desc: "utf-16le dec: incorrect BOM is an error (RFC 2781:4.1)", + src: "\xFE\xFF\x08\xD8\x45\xDF\x3D\x00\x52\x00\x61\x00", + sizeDst: 100, + want: "\uFFFE\U00012345=Ra", + nSrc: 12, + t: utf16LEIB.NewDecoder(), + }, { + desc: "utf-16 enc: SHOULD write BOM (RFC 2781:3.3)", + src: "\U00012345=Ra", + sizeDst: 100, + want: "\xFF\xFE\x08\xD8\x45\xDF\x3D\x00\x52\x00\x61\x00", + nSrc: 7, + t: utf16LEUB.NewEncoder(), + }, { + desc: "utf-16 enc: SHOULD write BOM (RFC 2781:3.3)", + src: "\U00012345=Ra", + sizeDst: 100, + want: "\xFE\xFF\xD8\x08\xDF\x45\x00\x3D\x00\x52\x00\x61", + nSrc: 7, + t: utf16BEUB.NewEncoder(), + }, { + desc: "utf-16le enc: MUST NOT write BOM (RFC 2781:3.3)", + src: "\U00012345=Ra", + sizeDst: 100, + want: "\x08\xD8\x45\xDF\x3D\x00\x52\x00\x61\x00", + nSrc: 7, + t: utf16LEIB.NewEncoder(), + }, { + desc: "utf-16be dec: incorrect UTF-16: odd bytes", + src: "\x00", + sizeDst: 100, + want: "\uFFFD", + nSrc: 1, + t: utf16BEIB.NewDecoder(), + }, { + desc: "utf-16be dec: unpaired surrogate, odd bytes", + src: "\xD8\x45\x00", + sizeDst: 100, + want: "\uFFFD\uFFFD", + nSrc: 3, + t: utf16BEIB.NewDecoder(), + }, { + desc: "utf-16be dec: unpaired low surrogate + valid text", + src: "\xD8\x45\x00a", + sizeDst: 100, + want: "\uFFFDa", + nSrc: 4, + t: utf16BEIB.NewDecoder(), + }, { + desc: "utf-16be dec: unpaired low surrogate + valid text + single byte", + src: "\xD8\x45\x00ab", + sizeDst: 100, + want: "\uFFFDa\uFFFD", + nSrc: 5, + t: utf16BEIB.NewDecoder(), + }, { + desc: "utf-16le dec: unpaired high surrogate", + src: "\x00\x00\x00\xDC\x12\xD8", + sizeDst: 100, + want: "\x00\uFFFD\uFFFD", + nSrc: 6, + t: utf16LEIB.NewDecoder(), + }, { + desc: "utf-16be dec: two unpaired low surrogates", + src: "\xD8\x45\xD8\x12", + sizeDst: 100, + want: "\uFFFD\uFFFD", + nSrc: 4, + t: utf16BEIB.NewDecoder(), + }, { + desc: "utf-16be dec: short dst", + src: "\x00a", + sizeDst: 0, + want: "", + nSrc: 0, + t: utf16BEIB.NewDecoder(), + err: transform.ErrShortDst, + }, { + desc: "utf-16be dec: short dst surrogate", + src: "\xD8\xF5\xDC\x12", + sizeDst: 3, + want: "", + nSrc: 0, + t: utf16BEIB.NewDecoder(), + err: transform.ErrShortDst, + }, { + desc: "utf-16be dec: short dst trailing byte", + src: "\x00", + sizeDst: 2, + want: "", + nSrc: 0, + t: utf16BEIB.NewDecoder(), + err: transform.ErrShortDst, + }, { + desc: "utf-16be dec: short src", + src: "\x00", + notEOF: true, + sizeDst: 3, + want: "", + nSrc: 0, + t: utf16BEIB.NewDecoder(), + err: transform.ErrShortSrc, + }, { + desc: "utf-16 enc", + src: "\U00012345=Ra", + sizeDst: 100, + want: "\xFE\xFF\xD8\x08\xDF\x45\x00\x3D\x00\x52\x00\x61", + nSrc: 7, + t: utf16BEUB.NewEncoder(), + }, { + desc: "utf-16 enc: short dst normal", + src: "\U00012345=Ra", + sizeDst: 9, + want: "\xD8\x08\xDF\x45\x00\x3D\x00\x52", + nSrc: 6, + t: utf16BEIB.NewEncoder(), + err: transform.ErrShortDst, + }, { + desc: "utf-16 enc: short dst surrogate", + src: "\U00012345=Ra", + sizeDst: 3, + want: "", + nSrc: 0, + t: utf16BEIB.NewEncoder(), + err: transform.ErrShortDst, + }, { + desc: "utf-16 enc: short src", + src: "\U00012345=Ra\xC2", + notEOF: true, + sizeDst: 100, + want: "\xD8\x08\xDF\x45\x00\x3D\x00\x52\x00\x61", + nSrc: 7, + t: utf16BEIB.NewEncoder(), + err: transform.ErrShortSrc, + }, { + desc: "utf-16be dec: don't change byte order mid-stream", + src: "\xFE\xFF\xD8\x08\xDF\x45\x00\x3D\xFF\xFE\x00\x52\x00\x61", + sizeDst: 100, + want: "\U00012345=\ufffeRa", + nSrc: 14, + t: utf16BEUB.NewDecoder(), + }, { + desc: "utf-16le dec: don't change byte order mid-stream", + src: "\xFF\xFE\x08\xD8\x45\xDF\x3D\x00\xFF\xFE\xFE\xFF\x52\x00\x61\x00", + sizeDst: 100, + want: "\U00012345=\ufeff\ufffeRa", + nSrc: 16, + t: utf16LEUB.NewDecoder(), + }} + for i, tc := range testCases { + b := make([]byte, tc.sizeDst) + nDst, nSrc, err := tc.t.Transform(b, []byte(tc.src), !tc.notEOF) + if err != tc.err { + t.Errorf("%d:%s: error was %v; want %v", i, tc.desc, err, tc.err) + } + if got := string(b[:nDst]); got != tc.want { + t.Errorf("%d:%s: result was %q: want %q", i, tc.desc, got, tc.want) + } + if nSrc != tc.nSrc { + t.Errorf("%d:%s: nSrc was %d; want %d", i, tc.desc, nSrc, tc.nSrc) + } + } +} + +func TestUTF8Decoder(t *testing.T) { + testCases := []struct { + desc string + src string + notEOF bool // the inverse of atEOF + sizeDst int + want string + nSrc int + err error + }{{ + desc: "empty string, empty dest buffer", + }, { + desc: "empty string", + sizeDst: 8, + }, { + desc: "empty string, streaming", + notEOF: true, + sizeDst: 8, + }, { + desc: "ascii", + src: "abcde", + sizeDst: 8, + want: "abcde", + nSrc: 5, + }, { + desc: "ascii and error", + src: "ab\x80de", + sizeDst: 7, + want: "ab\ufffdde", + nSrc: 5, + }, { + desc: "valid two-byte sequence", + src: "a\u0300bc", + sizeDst: 7, + want: "a\u0300bc", + nSrc: 5, + }, { + desc: "valid three-byte sequence", + src: "a\u0300中", + sizeDst: 7, + want: "a\u0300中", + nSrc: 6, + }, { + desc: "valid four-byte sequence", + src: "a中\U00016F50", + sizeDst: 8, + want: "a中\U00016F50", + nSrc: 8, + }, { + desc: "short source buffer", + src: "abc\xf0\x90", + notEOF: true, + sizeDst: 10, + want: "abc", + nSrc: 3, + err: transform.ErrShortSrc, + }, { + // We don't check for the maximal subpart of an ill-formed subsequence + // at the end of an open segment. + desc: "complete invalid that looks like short at end", + src: "abc\xf0\x80", + notEOF: true, + sizeDst: 10, + want: "abc", // instead of "abc\ufffd\ufffd", + nSrc: 3, + err: transform.ErrShortSrc, + }, { + desc: "incomplete sequence at end", + src: "a\x80bc\xf0\x90", + sizeDst: 9, + want: "a\ufffdbc\ufffd", + nSrc: 6, + }, { + desc: "invalid second byte", + src: "abc\xf0dddd", + sizeDst: 10, + want: "abc\ufffddddd", + nSrc: 8, + }, { + desc: "invalid second byte at end", + src: "abc\xf0d", + sizeDst: 10, + want: "abc\ufffdd", + nSrc: 5, + }, { + desc: "invalid third byte", + src: "a\u0300bc\xf0\x90dddd", + sizeDst: 12, + want: "a\u0300bc\ufffddddd", + nSrc: 11, + }, { + desc: "invalid third byte at end", + src: "a\u0300bc\xf0\x90d", + sizeDst: 12, + want: "a\u0300bc\ufffdd", + nSrc: 8, + }, { + desc: "invalid fourth byte, tight buffer", + src: "a\u0300bc\xf0\x90\x80d", + sizeDst: 9, + want: "a\u0300bc\ufffdd", + nSrc: 9, + }, { + desc: "invalid fourth byte at end", + src: "a\u0300bc\xf0\x90\x80", + sizeDst: 8, + want: "a\u0300bc\ufffd", + nSrc: 8, + }, { + desc: "invalid fourth byte and short four byte sequence", + src: "a\u0300bc\xf0\x90\x80\xf0\x90\x80", + notEOF: true, + sizeDst: 20, + want: "a\u0300bc\ufffd", + nSrc: 8, + err: transform.ErrShortSrc, + }, { + desc: "valid four-byte sequence overflowing short buffer", + src: "a\u0300bc\xf0\x90\x80\x80", + notEOF: true, + sizeDst: 8, + want: "a\u0300bc", + nSrc: 5, + err: transform.ErrShortDst, + }, { + desc: "invalid fourth byte at end short, but short dst", + src: "a\u0300bc\xf0\x90\x80\xf0\x90\x80", + notEOF: true, + sizeDst: 8, + // More bytes would fit in the buffer, but this seems to require a more + // complicated and slower algorithm. + want: "a\u0300bc", // instead of "a\u0300bc" + nSrc: 5, + err: transform.ErrShortDst, + }, { + desc: "short dst for error", + src: "abc\x80", + notEOF: true, + sizeDst: 5, + want: "abc", + nSrc: 3, + err: transform.ErrShortDst, + }, { + desc: "adjusting short dst buffer", + src: "abc\x80ef", + notEOF: true, + sizeDst: 6, + want: "abc\ufffd", + nSrc: 4, + err: transform.ErrShortDst, + }} + tr := UTF8.NewDecoder() + for i, tc := range testCases { + b := make([]byte, tc.sizeDst) + nDst, nSrc, err := tr.Transform(b, []byte(tc.src), !tc.notEOF) + if err != tc.err { + t.Errorf("%d:%s: error was %v; want %v", i, tc.desc, err, tc.err) + } + if got := string(b[:nDst]); got != tc.want { + t.Errorf("%d:%s: result was %q: want %q", i, tc.desc, got, tc.want) + } + if nSrc != tc.nSrc { + t.Errorf("%d:%s: nSrc was %d; want %d", i, tc.desc, nSrc, tc.nSrc) + } + } +} + +func TestBOMOverride(t *testing.T) { + dec := BOMOverride(charmap.CodePage437.NewDecoder()) + dst := make([]byte, 100) + for i, tc := range []struct { + src string + atEOF bool + dst string + nSrc int + err error + }{ + 0: {"H\x82ll\x93", true, "Héllô", 5, nil}, + 1: {"\uFEFFHéllö", true, "Héllö", 10, nil}, + 2: {"\xFE\xFF\x00H\x00e\x00l\x00l\x00o", true, "Hello", 12, nil}, + 3: {"\xFF\xFEH\x00e\x00l\x00l\x00o\x00", true, "Hello", 12, nil}, + 4: {"\uFEFF", true, "", 3, nil}, + 5: {"\xFE\xFF", true, "", 2, nil}, + 6: {"\xFF\xFE", true, "", 2, nil}, + 7: {"\xEF\xBB", true, "\u2229\u2557", 2, nil}, + 8: {"\xEF", true, "\u2229", 1, nil}, + 9: {"", true, "", 0, nil}, + 10: {"\xFE", true, "\u25a0", 1, nil}, + 11: {"\xFF", true, "\u00a0", 1, nil}, + 12: {"\xEF\xBB", false, "", 0, transform.ErrShortSrc}, + 13: {"\xEF", false, "", 0, transform.ErrShortSrc}, + 14: {"", false, "", 0, transform.ErrShortSrc}, + 15: {"\xFE", false, "", 0, transform.ErrShortSrc}, + 16: {"\xFF", false, "", 0, transform.ErrShortSrc}, + 17: {"\xFF\xFE", false, "", 0, transform.ErrShortSrc}, + } { + dec.Reset() + nDst, nSrc, err := dec.Transform(dst, []byte(tc.src), tc.atEOF) + got := string(dst[:nDst]) + if nSrc != tc.nSrc { + t.Errorf("%d: nSrc: got %d; want %d", i, nSrc, tc.nSrc) + } + if got != tc.dst { + t.Errorf("%d: got %+q; want %+q", i, got, tc.dst) + } + if err != tc.err { + t.Errorf("%d: error: got %v; want %v", i, err, tc.err) + } + } +} diff --git a/vendor/golang.org/x/text/encoding/unicode/utf32/utf32.go b/vendor/golang.org/x/text/encoding/unicode/utf32/utf32.go new file mode 100644 index 0000000..48b2152 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/unicode/utf32/utf32.go @@ -0,0 +1,296 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package utf32 provides the UTF-32 Unicode encoding. +// +// Please note that support for UTF-32 is discouraged as it is a rare and +// inefficient encoding, unfit for use as an interchange format. For use +// on the web, the W3C strongly discourages its use +// (https://www.w3.org/TR/html5/document-metadata.html#charset) +// while WHATWG directly prohibits supporting it +// (https://html.spec.whatwg.org/multipage/syntax.html#character-encodings). +package utf32 // import "golang.org/x/text/encoding/unicode/utf32" + +import ( + "errors" + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// All lists a configuration for each IANA-defined UTF-32 variant. +var All = []encoding.Encoding{ + UTF32(BigEndian, UseBOM), + UTF32(BigEndian, IgnoreBOM), + UTF32(LittleEndian, IgnoreBOM), +} + +// ErrMissingBOM means that decoding UTF-32 input with ExpectBOM did not +// find a starting byte order mark. +var ErrMissingBOM = errors.New("encoding: missing byte order mark") + +// UTF32 returns a UTF-32 Encoding for the given default endianness and +// byte order mark (BOM) policy. +// +// When decoding from UTF-32 to UTF-8, if the BOMPolicy is IgnoreBOM then +// neither BOMs U+FEFF nor ill-formed code units 0xFFFE0000 in the input +// stream will affect the endianness used for decoding. Instead BOMs will +// be output as their standard UTF-8 encoding "\xef\xbb\xbf" while +// 0xFFFE0000 code units will be output as "\xef\xbf\xbd", the standard +// UTF-8 encoding for the Unicode replacement character. If the BOMPolicy +// is UseBOM or ExpectBOM a starting BOM is not written to the UTF-8 +// output. Instead, it overrides the default endianness e for the remainder +// of the transformation. Any subsequent BOMs U+FEFF or ill-formed code +// units 0xFFFE0000 will not affect the endianness used, and will instead +// be output as their standard UTF-8 (replacement) encodings. For UseBOM, +// if there is no starting BOM, it will proceed with the default +// Endianness. For ExpectBOM, in that case, the transformation will return +// early with an ErrMissingBOM error. +// +// When encoding from UTF-8 to UTF-32, a BOM will be inserted at the start +// of the output if the BOMPolicy is UseBOM or ExpectBOM. Otherwise, a BOM +// will not be inserted. The UTF-8 input does not need to contain a BOM. +// +// There is no concept of a 'native' endianness. If the UTF-32 data is +// produced and consumed in a greater context that implies a certain +// endianness, use IgnoreBOM. Otherwise, use ExpectBOM and always produce +// and consume a BOM. +// +// In the language of http://www.unicode.org/faq/utf_bom.html#bom10, +// IgnoreBOM corresponds to "Where the precise type of the data stream is +// known... the BOM should not be used" and ExpectBOM corresponds to "A +// particular protocol... may require use of the BOM". +func UTF32(e Endianness, b BOMPolicy) encoding.Encoding { + return utf32Encoding{config{e, b}, mibValue[e][b&bomMask]} +} + +// mibValue maps Endianness and BOMPolicy settings to MIB constants for UTF-32. +// Note that some configurations map to the same MIB identifier. +var mibValue = map[Endianness][numBOMValues]identifier.MIB{ + BigEndian: [numBOMValues]identifier.MIB{ + IgnoreBOM: identifier.UTF32BE, + UseBOM: identifier.UTF32, + }, + LittleEndian: [numBOMValues]identifier.MIB{ + IgnoreBOM: identifier.UTF32LE, + UseBOM: identifier.UTF32, + }, + // ExpectBOM is not widely used and has no valid MIB identifier. +} + +// BOMPolicy is a UTF-32 encodings's byte order mark policy. +type BOMPolicy uint8 + +const ( + writeBOM BOMPolicy = 0x01 + acceptBOM BOMPolicy = 0x02 + requireBOM BOMPolicy = 0x04 + bomMask BOMPolicy = 0x07 + + // HACK: numBOMValues == 8 triggers a bug in the 1.4 compiler (cannot have a + // map of an array of length 8 of a type that is also used as a key or value + // in another map). See golang.org/issue/11354. + // TODO: consider changing this value back to 8 if the use of 1.4.* has + // been minimized. + numBOMValues = 8 + 1 + + // IgnoreBOM means to ignore any byte order marks. + IgnoreBOM BOMPolicy = 0 + // Unicode-compliant interpretation for UTF-32BE/LE. + + // UseBOM means that the UTF-32 form may start with a byte order mark, + // which will be used to override the default encoding. + UseBOM BOMPolicy = writeBOM | acceptBOM + // Unicode-compliant interpretation for UTF-32. + + // ExpectBOM means that the UTF-32 form must start with a byte order mark, + // which will be used to override the default encoding. + ExpectBOM BOMPolicy = writeBOM | acceptBOM | requireBOM + // Consistent with BOMPolicy definition in golang.org/x/text/encoding/unicode +) + +// Endianness is a UTF-32 encoding's default endianness. +type Endianness bool + +const ( + // BigEndian is UTF-32BE. + BigEndian Endianness = false + // LittleEndian is UTF-32LE. + LittleEndian Endianness = true +) + +type config struct { + endianness Endianness + bomPolicy BOMPolicy +} + +type utf32Encoding struct { + config + mib identifier.MIB +} + +func (u utf32Encoding) NewDecoder() *encoding.Decoder { + return &encoding.Decoder{Transformer: &utf32Decoder{ + initial: u.config, + current: u.config, + }} +} + +func (u utf32Encoding) NewEncoder() *encoding.Encoder { + return &encoding.Encoder{Transformer: &utf32Encoder{ + endianness: u.endianness, + initialBOMPolicy: u.bomPolicy, + currentBOMPolicy: u.bomPolicy, + }} +} + +func (u utf32Encoding) ID() (mib identifier.MIB, other string) { + return u.mib, "" +} + +func (u utf32Encoding) String() string { + e, b := "B", "" + if u.endianness == LittleEndian { + e = "L" + } + switch u.bomPolicy { + case ExpectBOM: + b = "Expect" + case UseBOM: + b = "Use" + case IgnoreBOM: + b = "Ignore" + } + return "UTF-32" + e + "E (" + b + " BOM)" +} + +type utf32Decoder struct { + initial config + current config +} + +func (u *utf32Decoder) Reset() { + u.current = u.initial +} + +func (u *utf32Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if len(src) == 0 { + if atEOF && u.current.bomPolicy&requireBOM != 0 { + return 0, 0, ErrMissingBOM + } + return 0, 0, nil + } + if u.current.bomPolicy&acceptBOM != 0 { + if len(src) < 4 { + return 0, 0, transform.ErrShortSrc + } + switch { + case src[0] == 0x00 && src[1] == 0x00 && src[2] == 0xfe && src[3] == 0xff: + u.current.endianness = BigEndian + nSrc = 4 + case src[0] == 0xff && src[1] == 0xfe && src[2] == 0x00 && src[3] == 0x00: + u.current.endianness = LittleEndian + nSrc = 4 + default: + if u.current.bomPolicy&requireBOM != 0 { + return 0, 0, ErrMissingBOM + } + } + u.current.bomPolicy = IgnoreBOM + } + + var r rune + var dSize, sSize int + for nSrc < len(src) { + if nSrc+3 < len(src) { + x := uint32(src[nSrc+0])<<24 | uint32(src[nSrc+1])<<16 | + uint32(src[nSrc+2])<<8 | uint32(src[nSrc+3]) + if u.current.endianness == LittleEndian { + x = x>>24 | (x >> 8 & 0x0000FF00) | (x << 8 & 0x00FF0000) | x<<24 + } + r, sSize = rune(x), 4 + if dSize = utf8.RuneLen(r); dSize < 0 { + r, dSize = utf8.RuneError, 3 + } + } else if atEOF { + // 1..3 trailing bytes. + r, dSize, sSize = utf8.RuneError, 3, len(src)-nSrc + } else { + err = transform.ErrShortSrc + break + } + if nDst+dSize > len(dst) { + err = transform.ErrShortDst + break + } + nDst += utf8.EncodeRune(dst[nDst:], r) + nSrc += sSize + } + return nDst, nSrc, err +} + +type utf32Encoder struct { + endianness Endianness + initialBOMPolicy BOMPolicy + currentBOMPolicy BOMPolicy +} + +func (u *utf32Encoder) Reset() { + u.currentBOMPolicy = u.initialBOMPolicy +} + +func (u *utf32Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if u.currentBOMPolicy&writeBOM != 0 { + if len(dst) < 4 { + return 0, 0, transform.ErrShortDst + } + dst[0], dst[1], dst[2], dst[3] = 0x00, 0x00, 0xfe, 0xff + u.currentBOMPolicy = IgnoreBOM + nDst = 4 + } + + r, size := rune(0), 0 + for nSrc < len(src) { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + } + + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + + dst[nDst+0] = uint8(r >> 24) + dst[nDst+1] = uint8(r >> 16) + dst[nDst+2] = uint8(r >> 8) + dst[nDst+3] = uint8(r) + nDst += 4 + nSrc += size + } + + if u.endianness == LittleEndian { + for i := 0; i < nDst; i += 4 { + dst[i], dst[i+1], dst[i+2], dst[i+3] = dst[i+3], dst[i+2], dst[i+1], dst[i] + } + } + return nDst, nSrc, err +} diff --git a/vendor/golang.org/x/text/encoding/unicode/utf32/utf32_test.go b/vendor/golang.org/x/text/encoding/unicode/utf32/utf32_test.go new file mode 100644 index 0000000..cd6158e --- /dev/null +++ b/vendor/golang.org/x/text/encoding/unicode/utf32/utf32_test.go @@ -0,0 +1,248 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package utf32 + +import ( + "testing" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/enctest" + "golang.org/x/text/transform" +) + +var ( + utf32LEIB = UTF32(LittleEndian, IgnoreBOM) // UTF-32LE (atypical interpretation) + utf32LEUB = UTF32(LittleEndian, UseBOM) // UTF-32, LE + // utf32LEEB = UTF32(LittleEndian, ExpectBOM) // UTF-32, LE, Expect - covered in encoding_test.go + utf32BEIB = UTF32(BigEndian, IgnoreBOM) // UTF-32BE (atypical interpretation) + utf32BEUB = UTF32(BigEndian, UseBOM) // UTF-32 default + utf32BEEB = UTF32(BigEndian, ExpectBOM) // UTF-32 Expect +) + +func TestBasics(t *testing.T) { + testCases := []struct { + e encoding.Encoding + encPrefix string + encSuffix string + encoded string + utf8 string + }{{ + e: utf32BEIB, + encoded: "\x00\x00\x00\x57\x00\x00\x00\xe4\x00\x01\xd5\x65", + utf8: "\x57\u00e4\U0001d565", + }, { + e: UTF32(BigEndian, ExpectBOM), + encPrefix: "\x00\x00\xfe\xff", + encoded: "\x00\x00\x00\x57\x00\x00\x00\xe4\x00\x01\xd5\x65", + utf8: "\x57\u00e4\U0001d565", + }, { + e: UTF32(LittleEndian, IgnoreBOM), + encoded: "\x57\x00\x00\x00\xe4\x00\x00\x00\x65\xd5\x01\x00", + utf8: "\x57\u00e4\U0001d565", + }, { + e: UTF32(LittleEndian, ExpectBOM), + encPrefix: "\xff\xfe\x00\x00", + encoded: "\x57\x00\x00\x00\xe4\x00\x00\x00\x65\xd5\x01\x00", + utf8: "\x57\u00e4\U0001d565", + }} + + for _, tc := range testCases { + enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, tc.encPrefix, tc.encSuffix) + } +} + +func TestFiles(t *testing.T) { enctest.TestFile(t, utf32BEIB) } + +func BenchmarkEncoding(b *testing.B) { enctest.Benchmark(b, utf32BEIB) } + +func TestUTF32(t *testing.T) { + testCases := []struct { + desc string + src string + notEOF bool // the inverse of atEOF + sizeDst int + want string + nSrc int + err error + t transform.Transformer + }{{ + desc: "utf-32 IgnoreBOM dec: empty string", + t: utf32BEIB.NewDecoder(), + }, { + desc: "utf-32 UseBOM dec: empty string", + t: utf32BEUB.NewDecoder(), + }, { + desc: "utf-32 ExpectBOM dec: empty string", + err: ErrMissingBOM, + t: utf32BEEB.NewDecoder(), + }, { + desc: "utf-32be dec: Doesn't interpret U+FEFF as BOM", + src: "\x00\x00\xFE\xFF\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61", + sizeDst: 100, + want: "\uFEFF\U00012345=Ra", + nSrc: 20, + t: utf32BEIB.NewDecoder(), + }, { + desc: "utf-32be dec: Interprets little endian U+FEFF as invalid", + src: "\xFF\xFE\x00\x00\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61", + sizeDst: 100, + want: "\uFFFD\U00012345=Ra", + nSrc: 20, + t: utf32BEIB.NewDecoder(), + }, { + desc: "utf-32le dec: Doesn't interpret U+FEFF as BOM", + src: "\xFF\xFE\x00\x00\x45\x23\x01\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61\x00\x00\x00", + sizeDst: 100, + want: "\uFEFF\U00012345=Ra", + nSrc: 20, + t: utf32LEIB.NewDecoder(), + }, { + desc: "utf-32le dec: Interprets big endian U+FEFF as invalid", + src: "\x00\x00\xFE\xFF\x45\x23\x01\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61\x00\x00\x00", + sizeDst: 100, + want: "\uFFFD\U00012345=Ra", + nSrc: 20, + t: utf32LEIB.NewDecoder(), + }, { + desc: "utf-32 enc: Writes big-endian BOM", + src: "\U00012345=Ra", + sizeDst: 100, + want: "\x00\x00\xFE\xFF\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61", + nSrc: 7, + t: utf32BEUB.NewEncoder(), + }, { + desc: "utf-32 enc: Writes little-endian BOM", + src: "\U00012345=Ra", + sizeDst: 100, + want: "\xFF\xFE\x00\x00\x45\x23\x01\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61\x00\x00\x00", + nSrc: 7, + t: utf32LEUB.NewEncoder(), + }, { + desc: "utf-32 dec: Interprets text using big-endian default when BOM not present", + src: "\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 16, + t: utf32BEUB.NewDecoder(), + }, { + desc: "utf-32 dec: Interprets text using little-endian default when BOM not present", + src: "\x45\x23\x01\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61\x00\x00\x00", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 16, + t: utf32LEUB.NewDecoder(), + }, { + desc: "utf-32 dec: BOM determines encoding BE", + src: "\x00\x00\xFE\xFF\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 20, + t: utf32BEUB.NewDecoder(), + }, { + desc: "utf-32 dec: BOM determines encoding LE", + src: "\xFF\xFE\x00\x00\x45\x23\x01\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61\x00\x00\x00", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 20, + t: utf32LEUB.NewDecoder(), + }, { + desc: "utf-32 dec: BOM determines encoding LE, change default", + src: "\xFF\xFE\x00\x00\x45\x23\x01\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61\x00\x00\x00", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 20, + t: utf32BEUB.NewDecoder(), + }, { + desc: "utf-32 dec: BOM determines encoding BE, change default", + src: "\x00\x00\xFE\xFF\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61", + sizeDst: 100, + want: "\U00012345=Ra", + nSrc: 20, + t: utf32LEUB.NewDecoder(), + }, { + desc: "utf-32 dec: Don't change big-endian byte order mid-stream", + src: "\x00\x01\x23\x45\x00\x00\x00\x3D\xFF\xFE\x00\x00\x00\x00\xFE\xFF\x00\x00\x00\x52\x00\x00\x00\x61", + sizeDst: 100, + want: "\U00012345=\uFFFD\uFEFFRa", + nSrc: 24, + t: utf32BEUB.NewDecoder(), + }, { + desc: "utf-32 dec: Don't change little-endian byte order mid-stream", + src: "\x45\x23\x01\x00\x3D\x00\x00\x00\x00\x00\xFE\xFF\xFF\xFE\x00\x00\x52\x00\x00\x00\x61\x00\x00\x00", + sizeDst: 100, + want: "\U00012345=\uFFFD\uFEFFRa", + nSrc: 24, + t: utf32LEUB.NewDecoder(), + }, { + desc: "utf-32 dec: Fail on missing BOM when required", + src: "\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61", + sizeDst: 100, + want: "", + nSrc: 0, + err: ErrMissingBOM, + t: utf32BEEB.NewDecoder(), + }, { + desc: "utf-32 enc: Short dst", + src: "\U00012345=Ra", + sizeDst: 15, + want: "\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52", + nSrc: 6, + err: transform.ErrShortDst, + t: utf32BEIB.NewEncoder(), + }, { + desc: "utf-32 enc: Short src", + src: "\U00012345=Ra\xC2", + notEOF: true, + sizeDst: 100, + want: "\x00\x01\x23\x45\x00\x00\x00\x3D\x00\x00\x00\x52\x00\x00\x00\x61", + nSrc: 7, + err: transform.ErrShortSrc, + t: utf32BEIB.NewEncoder(), + }, { + desc: "utf-32 enc: Invalid input", + src: "\x80\xC1\xC2\x7F\xC2", + sizeDst: 100, + want: "\x00\x00\xFF\xFD\x00\x00\xFF\xFD\x00\x00\xFF\xFD\x00\x00\x00\x7F\x00\x00\xFF\xFD", + nSrc: 5, + t: utf32BEIB.NewEncoder(), + }, { + desc: "utf-32 dec: Short dst", + src: "\x00\x00\x00\x41", + sizeDst: 0, + want: "", + nSrc: 0, + err: transform.ErrShortDst, + t: utf32BEIB.NewDecoder(), + }, { + desc: "utf-32 dec: Short src", + src: "\x00\x00\x00", + notEOF: true, + sizeDst: 4, + want: "", + nSrc: 0, + err: transform.ErrShortSrc, + t: utf32BEIB.NewDecoder(), + }, { + desc: "utf-32 dec: Invalid input", + src: "\x00\x00\xD8\x00\x00\x00\xDF\xFF\x00\x11\x00\x00\x00\x00\x00", + sizeDst: 100, + want: "\uFFFD\uFFFD\uFFFD\uFFFD", + nSrc: 15, + t: utf32BEIB.NewDecoder(), + }} + for i, tc := range testCases { + b := make([]byte, tc.sizeDst) + nDst, nSrc, err := tc.t.Transform(b, []byte(tc.src), !tc.notEOF) + if err != tc.err { + t.Errorf("%d:%s: error was %v; want %v", i, tc.desc, err, tc.err) + } + if got := string(b[:nDst]); got != tc.want { + t.Errorf("%d:%s: result was %q: want %q", i, tc.desc, got, tc.want) + } + if nSrc != tc.nSrc { + t.Errorf("%d:%s: nSrc was %d; want %d", i, tc.desc, nSrc, tc.nSrc) + } + } +} diff --git a/vendor/golang.org/x/text/gen.go b/vendor/golang.org/x/text/gen.go new file mode 100644 index 0000000..a694fdd --- /dev/null +++ b/vendor/golang.org/x/text/gen.go @@ -0,0 +1,291 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// gen runs go generate on Unicode- and CLDR-related package in the text +// repositories, taking into account dependencies and versions. +package main + +import ( + "bytes" + "flag" + "fmt" + "go/build" + "go/format" + "io/ioutil" + "os" + "os/exec" + "path" + "path/filepath" + "regexp" + "runtime" + "strings" + "sync" + "unicode" + + "golang.org/x/text/internal/gen" +) + +var ( + verbose = flag.Bool("v", false, "verbose output") + force = flag.Bool("force", false, "ignore failing dependencies") + doCore = flag.Bool("core", false, "force an update to core") + excludeList = flag.String("exclude", "", + "comma-separated list of packages to exclude") + + // The user can specify a selection of packages to build on the command line. + args []string +) + +func exclude(pkg string) bool { + if len(args) > 0 { + return !contains(args, pkg) + } + return contains(strings.Split(*excludeList, ","), pkg) +} + +// TODO: +// - Better version handling. +// - Generate tables for the core unicode package? +// - Add generation for encodings. This requires some retooling here and there. +// - Running repo-wide "long" tests. + +var vprintf = fmt.Printf + +func main() { + gen.Init() + args = flag.Args() + if !*verbose { + // Set vprintf to a no-op. + vprintf = func(string, ...interface{}) (int, error) { return 0, nil } + } + + // TODO: create temporary cache directory to load files and create and set + // a "cache" option if the user did not specify the UNICODE_DIR environment + // variable. This will prevent duplicate downloads and also will enable long + // tests, which really need to be run after each generated package. + + updateCore := *doCore + if gen.UnicodeVersion() != unicode.Version { + fmt.Printf("Requested Unicode version %s; core unicode version is %s.\n", + gen.UnicodeVersion(), + unicode.Version) + // TODO: use collate to compare. Simple comparison will work, though, + // until Unicode reaches version 10. To avoid circular dependencies, we + // could use the NumericWeighter without using package collate using a + // trivial Weighter implementation. + if gen.UnicodeVersion() < unicode.Version && !*force { + os.Exit(2) + } + updateCore = true + } + + var unicode = &dependency{} + if updateCore { + fmt.Printf("Updating core to version %s...\n", gen.UnicodeVersion()) + unicode = generate("unicode") + + // Test some users of the unicode packages, especially the ones that + // keep a mirrored table. These may need to be corrected by hand. + generate("regexp", unicode) + generate("strconv", unicode) // mimics Unicode table + generate("strings", unicode) + generate("testing", unicode) // mimics Unicode table + } + + var ( + cldr = generate("./unicode/cldr", unicode) + language = generate("./language", cldr) + internal = generate("./internal", unicode, language) + norm = generate("./unicode/norm", unicode) + rangetable = generate("./unicode/rangetable", unicode) + cases = generate("./cases", unicode, norm, language, rangetable) + width = generate("./width", unicode) + bidi = generate("./unicode/bidi", unicode, norm, rangetable) + mib = generate("./encoding/internal/identifier", unicode) + _ = generate("./encoding/htmlindex", unicode, language, mib) + _ = generate("./encoding/ianaindex", unicode, language, mib) + _ = generate("./secure/precis", unicode, norm, rangetable, cases, width, bidi) + _ = generate("./currency", unicode, cldr, language, internal) + _ = generate("./internal/number", unicode, cldr, language, internal) + _ = generate("./internal/export/idna", unicode, bidi, norm) + _ = generate("./language/display", unicode, cldr, language, internal) + _ = generate("./collate", unicode, norm, cldr, language, rangetable) + _ = generate("./search", unicode, norm, cldr, language, rangetable) + ) + all.Wait() + + // Copy exported packages to the destination golang.org repo. + copyExported("golang.org/x/net/idna") + + if updateCore { + copyVendored() + } + + if hasErrors { + fmt.Println("FAIL") + os.Exit(1) + } + vprintf("SUCCESS\n") +} + +var ( + all sync.WaitGroup + hasErrors bool +) + +type dependency struct { + sync.WaitGroup + hasErrors bool +} + +func generate(pkg string, deps ...*dependency) *dependency { + var wg dependency + if exclude(pkg) { + return &wg + } + wg.Add(1) + all.Add(1) + go func() { + defer wg.Done() + defer all.Done() + // Wait for dependencies to finish. + for _, d := range deps { + d.Wait() + if d.hasErrors && !*force { + fmt.Printf("--- ABORT: %s\n", pkg) + wg.hasErrors = true + return + } + } + vprintf("=== GENERATE %s\n", pkg) + args := []string{"generate"} + if *verbose { + args = append(args, "-v") + } + args = append(args, pkg) + cmd := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), args...) + w := &bytes.Buffer{} + cmd.Stderr = w + cmd.Stdout = w + if err := cmd.Run(); err != nil { + fmt.Printf("--- FAIL: %s:\n\t%v\n\tError: %v\n", pkg, indent(w), err) + hasErrors = true + wg.hasErrors = true + return + } + + vprintf("=== TEST %s\n", pkg) + args[0] = "test" + cmd = exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), args...) + wt := &bytes.Buffer{} + cmd.Stderr = wt + cmd.Stdout = wt + if err := cmd.Run(); err != nil { + fmt.Printf("--- FAIL: %s:\n\t%v\n\tError: %v\n", pkg, indent(wt), err) + hasErrors = true + wg.hasErrors = true + return + } + vprintf("--- SUCCESS: %s\n\t%v\n", pkg, indent(w)) + fmt.Print(wt.String()) + }() + return &wg +} + +// copyExported copies a package in x/text/internal/export to the +// destination repository. +func copyExported(p string) { + copyPackage( + filepath.Join("internal", "export", path.Base(p)), + filepath.Join("..", filepath.FromSlash(p[len("golang.org/x"):])), + "golang.org/x/text/internal/export/"+path.Base(p), + p) +} + +// copyVendored copies packages used by Go core into the vendored directory. +func copyVendored() { + root := filepath.Join(build.Default.GOROOT, filepath.FromSlash("src/vendor/golang_org/x")) + + err := filepath.Walk(root, func(dir string, info os.FileInfo, err error) error { + if err != nil || !info.IsDir() || root == dir { + return err + } + src := dir[len(root)+1:] + const slash = string(filepath.Separator) + if c := strings.Split(src, slash); c[0] == "text" { + // Copy a text repo package from its normal location. + src = strings.Join(c[1:], slash) + } else { + // Copy the vendored package if it exists in the export directory. + src = filepath.Join("internal", "export", filepath.Base(src)) + } + copyPackage(src, dir, "golang.org", "golang_org") + return nil + }) + if err != nil { + fmt.Printf("Seeding directory %s has failed %v:", root, err) + os.Exit(1) + } +} + +// goGenRE is used to remove go:generate lines. +var goGenRE = regexp.MustCompile("//go:generate[^\n]*\n") + +// copyPackage copies relevant files from a directory in x/text to the +// destination package directory. The destination package is assumed to have +// the same name. For each copied file go:generate lines are removed and +// and package comments are rewritten to the new path. +func copyPackage(dirSrc, dirDst, search, replace string) { + err := filepath.Walk(dirSrc, func(file string, info os.FileInfo, err error) error { + base := filepath.Base(file) + if err != nil || info.IsDir() || + !strings.HasSuffix(base, ".go") || + strings.HasSuffix(base, "_test.go") && !strings.HasPrefix(base, "example") || + // Don't process subdirectories. + filepath.Dir(file) != dirSrc { + return nil + } + b, err := ioutil.ReadFile(file) + if err != nil || bytes.Contains(b, []byte("\n// +build ignore")) { + return err + } + // Fix paths. + b = bytes.Replace(b, []byte(search), []byte(replace), -1) + // Remove go:generate lines. + b = goGenRE.ReplaceAllLiteral(b, nil) + comment := "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n" + if *doCore { + comment = "// Code generated by running \"go run gen.go -core\" in golang.org/x/text. DO NOT EDIT.\n\n" + } + if !bytes.HasPrefix(b, []byte(comment)) { + b = append([]byte(comment), b...) + } + if b, err = format.Source(b); err != nil { + fmt.Println("Failed to format file:", err) + os.Exit(1) + } + file = filepath.Join(dirDst, base) + vprintf("=== COPY %s\n", file) + return ioutil.WriteFile(file, b, 0666) + }) + if err != nil { + fmt.Println("Copying exported files failed:", err) + os.Exit(1) + } +} + +func contains(a []string, s string) bool { + for _, e := range a { + if s == e { + return true + } + } + return false +} + +func indent(b *bytes.Buffer) string { + return strings.Replace(strings.TrimSpace(b.String()), "\n", "\n\t", -1) +} diff --git a/vendor/golang.org/x/text/internal/colltab/collate_test.go b/vendor/golang.org/x/text/internal/colltab/collate_test.go new file mode 100644 index 0000000..580c85c --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/collate_test.go @@ -0,0 +1,121 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab_test + +// This file contains tests which need to import package collate, which causes +// an import cycle when done within package colltab itself. + +import ( + "bytes" + "testing" + "unicode" + + "golang.org/x/text/collate" + "golang.org/x/text/language" + "golang.org/x/text/unicode/rangetable" +) + +// assigned is used to only test runes that are inside the scope of the Unicode +// version used to generation the collation table. +var assigned = rangetable.Assigned(collate.UnicodeVersion) + +func TestNonDigits(t *testing.T) { + c := collate.New(language.English, collate.Loose, collate.Numeric) + + // Verify that all non-digit numbers sort outside of the number range. + for r, hi := rune(unicode.N.R16[0].Lo), rune(unicode.N.R32[0].Hi); r <= hi; r++ { + if unicode.In(r, unicode.Nd) || !unicode.In(r, assigned) { + continue + } + if a := string(r); c.CompareString(a, "0") != -1 && c.CompareString(a, "999999") != 1 { + t.Errorf("%+q non-digit number is collated as digit", a) + } + } +} + +func TestNumericCompare(t *testing.T) { + c := collate.New(language.English, collate.Loose, collate.Numeric) + + // Iterate over all digits. + for _, r16 := range unicode.Nd.R16 { + testDigitCompare(t, c, rune(r16.Lo), rune(r16.Hi)) + } + for _, r32 := range unicode.Nd.R32 { + testDigitCompare(t, c, rune(r32.Lo), rune(r32.Hi)) + } +} + +func testDigitCompare(t *testing.T, c *collate.Collator, zero, nine rune) { + if !unicode.In(zero, assigned) { + return + } + n := int(nine - zero + 1) + if n%10 != 0 { + t.Fatalf("len([%+q, %+q]) = %d; want a multiple of 10", zero, nine, n) + } + for _, tt := range []struct { + prefix string + b [11]string + }{ + { + prefix: "", + b: [11]string{ + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", + }, + }, + { + prefix: "1", + b: [11]string{ + "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", + }, + }, + { + prefix: "0", + b: [11]string{ + "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", + }, + }, + { + prefix: "00", + b: [11]string{ + "000", "001", "002", "003", "004", "005", "006", "007", "008", "009", "010", + }, + }, + { + prefix: "9", + b: [11]string{ + "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", + }, + }, + } { + for k := 0; k <= n; k++ { + i := k % 10 + a := tt.prefix + string(zero+rune(i)) + for j, b := range tt.b { + want := 0 + switch { + case i < j: + want = -1 + case i > j: + want = 1 + } + got := c.CompareString(a, b) + if got != want { + t.Errorf("Compare(%+q, %+q) = %d; want %d", a, b, got, want) + return + } + } + } + } +} + +func BenchmarkNumericWeighter(b *testing.B) { + c := collate.New(language.English, collate.Numeric) + input := bytes.Repeat([]byte("Testing, testing 123..."), 100) + b.SetBytes(int64(2 * len(input))) + for i := 0; i < b.N; i++ { + c.Compare(input, input) + } +} diff --git a/vendor/golang.org/x/text/internal/colltab/collelem.go b/vendor/golang.org/x/text/internal/colltab/collelem.go new file mode 100644 index 0000000..880952c --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/collelem.go @@ -0,0 +1,371 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import ( + "fmt" + "unicode" +) + +// Level identifies the collation comparison level. +// The primary level corresponds to the basic sorting of text. +// The secondary level corresponds to accents and related linguistic elements. +// The tertiary level corresponds to casing and related concepts. +// The quaternary level is derived from the other levels by the +// various algorithms for handling variable elements. +type Level int + +const ( + Primary Level = iota + Secondary + Tertiary + Quaternary + Identity + + NumLevels +) + +const ( + defaultSecondary = 0x20 + defaultTertiary = 0x2 + maxTertiary = 0x1F + MaxQuaternary = 0x1FFFFF // 21 bits. +) + +// Elem is a representation of a collation element. This API provides ways to encode +// and decode Elems. Implementations of collation tables may use values greater +// or equal to PrivateUse for their own purposes. However, these should never be +// returned by AppendNext. +type Elem uint32 + +const ( + maxCE Elem = 0xAFFFFFFF + PrivateUse = minContract + minContract = 0xC0000000 + maxContract = 0xDFFFFFFF + minExpand = 0xE0000000 + maxExpand = 0xEFFFFFFF + minDecomp = 0xF0000000 +) + +type ceType int + +const ( + ceNormal ceType = iota // ceNormal includes implicits (ce == 0) + ceContractionIndex // rune can be a start of a contraction + ceExpansionIndex // rune expands into a sequence of collation elements + ceDecompose // rune expands using NFKC decomposition +) + +func (ce Elem) ctype() ceType { + if ce <= maxCE { + return ceNormal + } + if ce <= maxContract { + return ceContractionIndex + } else { + if ce <= maxExpand { + return ceExpansionIndex + } + return ceDecompose + } + panic("should not reach here") + return ceType(-1) +} + +// For normal collation elements, we assume that a collation element either has +// a primary or non-default secondary value, not both. +// Collation elements with a primary value are of the form +// 01pppppp pppppppp ppppppp0 ssssssss +// - p* is primary collation value +// - s* is the secondary collation value +// 00pppppp pppppppp ppppppps sssttttt, where +// - p* is primary collation value +// - s* offset of secondary from default value. +// - t* is the tertiary collation value +// 100ttttt cccccccc pppppppp pppppppp +// - t* is the tertiar collation value +// - c* is the cannonical combining class +// - p* is the primary collation value +// Collation elements with a secondary value are of the form +// 1010cccc ccccssss ssssssss tttttttt, where +// - c* is the canonical combining class +// - s* is the secondary collation value +// - t* is the tertiary collation value +// 11qqqqqq qqqqqqqq qqqqqqq0 00000000 +// - q* quaternary value +const ( + ceTypeMask = 0xC0000000 + ceTypeMaskExt = 0xE0000000 + ceIgnoreMask = 0xF00FFFFF + ceType1 = 0x40000000 + ceType2 = 0x00000000 + ceType3or4 = 0x80000000 + ceType4 = 0xA0000000 + ceTypeQ = 0xC0000000 + Ignore = ceType4 + firstNonPrimary = 0x80000000 + lastSpecialPrimary = 0xA0000000 + secondaryMask = 0x80000000 + hasTertiaryMask = 0x40000000 + primaryValueMask = 0x3FFFFE00 + maxPrimaryBits = 21 + compactPrimaryBits = 16 + maxSecondaryBits = 12 + maxTertiaryBits = 8 + maxCCCBits = 8 + maxSecondaryCompactBits = 8 + maxSecondaryDiffBits = 4 + maxTertiaryCompactBits = 5 + primaryShift = 9 + compactSecondaryShift = 5 + minCompactSecondary = defaultSecondary - 4 +) + +func makeImplicitCE(primary int) Elem { + return ceType1 | Elem(primary<<primaryShift) | defaultSecondary +} + +// MakeElem returns an Elem for the given values. It will return an error +// if the given combination of values is invalid. +func MakeElem(primary, secondary, tertiary int, ccc uint8) (Elem, error) { + if w := primary; w >= 1<<maxPrimaryBits || w < 0 { + return 0, fmt.Errorf("makeCE: primary weight out of bounds: %x >= %x", w, 1<<maxPrimaryBits) + } + if w := secondary; w >= 1<<maxSecondaryBits || w < 0 { + return 0, fmt.Errorf("makeCE: secondary weight out of bounds: %x >= %x", w, 1<<maxSecondaryBits) + } + if w := tertiary; w >= 1<<maxTertiaryBits || w < 0 { + return 0, fmt.Errorf("makeCE: tertiary weight out of bounds: %x >= %x", w, 1<<maxTertiaryBits) + } + ce := Elem(0) + if primary != 0 { + if ccc != 0 { + if primary >= 1<<compactPrimaryBits { + return 0, fmt.Errorf("makeCE: primary weight with non-zero CCC out of bounds: %x >= %x", primary, 1<<compactPrimaryBits) + } + if secondary != defaultSecondary { + return 0, fmt.Errorf("makeCE: cannot combine non-default secondary value (%x) with non-zero CCC (%x)", secondary, ccc) + } + ce = Elem(tertiary << (compactPrimaryBits + maxCCCBits)) + ce |= Elem(ccc) << compactPrimaryBits + ce |= Elem(primary) + ce |= ceType3or4 + } else if tertiary == defaultTertiary { + if secondary >= 1<<maxSecondaryCompactBits { + return 0, fmt.Errorf("makeCE: secondary weight with non-zero primary out of bounds: %x >= %x", secondary, 1<<maxSecondaryCompactBits) + } + ce = Elem(primary<<(maxSecondaryCompactBits+1) + secondary) + ce |= ceType1 + } else { + d := secondary - defaultSecondary + maxSecondaryDiffBits + if d >= 1<<maxSecondaryDiffBits || d < 0 { + return 0, fmt.Errorf("makeCE: secondary weight diff out of bounds: %x < 0 || %x > %x", d, d, 1<<maxSecondaryDiffBits) + } + if tertiary >= 1<<maxTertiaryCompactBits { + return 0, fmt.Errorf("makeCE: tertiary weight with non-zero primary out of bounds: %x > %x", tertiary, 1<<maxTertiaryCompactBits) + } + ce = Elem(primary<<maxSecondaryDiffBits + d) + ce = ce<<maxTertiaryCompactBits + Elem(tertiary) + } + } else { + ce = Elem(secondary<<maxTertiaryBits + tertiary) + ce += Elem(ccc) << (maxSecondaryBits + maxTertiaryBits) + ce |= ceType4 + } + return ce, nil +} + +// MakeQuaternary returns an Elem with the given quaternary value. +func MakeQuaternary(v int) Elem { + return ceTypeQ | Elem(v<<primaryShift) +} + +// Mask sets weights for any level smaller than l to 0. +// The resulting Elem can be used to test for equality with +// other Elems to which the same mask has been applied. +func (ce Elem) Mask(l Level) uint32 { + return 0 +} + +// CCC returns the canonical combining class associated with the underlying character, +// if applicable, or 0 otherwise. +func (ce Elem) CCC() uint8 { + if ce&ceType3or4 != 0 { + if ce&ceType4 == ceType3or4 { + return uint8(ce >> 16) + } + return uint8(ce >> 20) + } + return 0 +} + +// Primary returns the primary collation weight for ce. +func (ce Elem) Primary() int { + if ce >= firstNonPrimary { + if ce > lastSpecialPrimary { + return 0 + } + return int(uint16(ce)) + } + return int(ce&primaryValueMask) >> primaryShift +} + +// Secondary returns the secondary collation weight for ce. +func (ce Elem) Secondary() int { + switch ce & ceTypeMask { + case ceType1: + return int(uint8(ce)) + case ceType2: + return minCompactSecondary + int((ce>>compactSecondaryShift)&0xF) + case ceType3or4: + if ce < ceType4 { + return defaultSecondary + } + return int(ce>>8) & 0xFFF + case ceTypeQ: + return 0 + } + panic("should not reach here") +} + +// Tertiary returns the tertiary collation weight for ce. +func (ce Elem) Tertiary() uint8 { + if ce&hasTertiaryMask == 0 { + if ce&ceType3or4 == 0 { + return uint8(ce & 0x1F) + } + if ce&ceType4 == ceType4 { + return uint8(ce) + } + return uint8(ce>>24) & 0x1F // type 2 + } else if ce&ceTypeMask == ceType1 { + return defaultTertiary + } + // ce is a quaternary value. + return 0 +} + +func (ce Elem) updateTertiary(t uint8) Elem { + if ce&ceTypeMask == ceType1 { + // convert to type 4 + nce := ce & primaryValueMask + nce |= Elem(uint8(ce)-minCompactSecondary) << compactSecondaryShift + ce = nce + } else if ce&ceTypeMaskExt == ceType3or4 { + ce &= ^Elem(maxTertiary << 24) + return ce | (Elem(t) << 24) + } else { + // type 2 or 4 + ce &= ^Elem(maxTertiary) + } + return ce | Elem(t) +} + +// Quaternary returns the quaternary value if explicitly specified, +// 0 if ce == Ignore, or MaxQuaternary otherwise. +// Quaternary values are used only for shifted variants. +func (ce Elem) Quaternary() int { + if ce&ceTypeMask == ceTypeQ { + return int(ce&primaryValueMask) >> primaryShift + } else if ce&ceIgnoreMask == Ignore { + return 0 + } + return MaxQuaternary +} + +// Weight returns the collation weight for the given level. +func (ce Elem) Weight(l Level) int { + switch l { + case Primary: + return ce.Primary() + case Secondary: + return ce.Secondary() + case Tertiary: + return int(ce.Tertiary()) + case Quaternary: + return ce.Quaternary() + } + return 0 // return 0 (ignore) for undefined levels. +} + +// For contractions, collation elements are of the form +// 110bbbbb bbbbbbbb iiiiiiii iiiinnnn, where +// - n* is the size of the first node in the contraction trie. +// - i* is the index of the first node in the contraction trie. +// - b* is the offset into the contraction collation element table. +// See contract.go for details on the contraction trie. +const ( + maxNBits = 4 + maxTrieIndexBits = 12 + maxContractOffsetBits = 13 +) + +func splitContractIndex(ce Elem) (index, n, offset int) { + n = int(ce & (1<<maxNBits - 1)) + ce >>= maxNBits + index = int(ce & (1<<maxTrieIndexBits - 1)) + ce >>= maxTrieIndexBits + offset = int(ce & (1<<maxContractOffsetBits - 1)) + return +} + +// For expansions, Elems are of the form 11100000 00000000 bbbbbbbb bbbbbbbb, +// where b* is the index into the expansion sequence table. +const maxExpandIndexBits = 16 + +func splitExpandIndex(ce Elem) (index int) { + return int(uint16(ce)) +} + +// Some runes can be expanded using NFKD decomposition. Instead of storing the full +// sequence of collation elements, we decompose the rune and lookup the collation +// elements for each rune in the decomposition and modify the tertiary weights. +// The Elem, in this case, is of the form 11110000 00000000 wwwwwwww vvvvvvvv, where +// - v* is the replacement tertiary weight for the first rune, +// - w* is the replacement tertiary weight for the second rune, +// Tertiary weights of subsequent runes should be replaced with maxTertiary. +// See http://www.unicode.org/reports/tr10/#Compatibility_Decompositions for more details. +func splitDecompose(ce Elem) (t1, t2 uint8) { + return uint8(ce), uint8(ce >> 8) +} + +const ( + // These constants were taken from http://www.unicode.org/versions/Unicode6.0.0/ch12.pdf. + minUnified rune = 0x4E00 + maxUnified = 0x9FFF + minCompatibility = 0xF900 + maxCompatibility = 0xFAFF + minRare = 0x3400 + maxRare = 0x4DBF +) +const ( + commonUnifiedOffset = 0x10000 + rareUnifiedOffset = 0x20000 // largest rune in common is U+FAFF + otherOffset = 0x50000 // largest rune in rare is U+2FA1D + illegalOffset = otherOffset + int(unicode.MaxRune) + maxPrimary = illegalOffset + 1 +) + +// implicitPrimary returns the primary weight for the a rune +// for which there is no entry for the rune in the collation table. +// We take a different approach from the one specified in +// http://unicode.org/reports/tr10/#Implicit_Weights, +// but preserve the resulting relative ordering of the runes. +func implicitPrimary(r rune) int { + if unicode.Is(unicode.Ideographic, r) { + if r >= minUnified && r <= maxUnified { + // The most common case for CJK. + return int(r) + commonUnifiedOffset + } + if r >= minCompatibility && r <= maxCompatibility { + // This will typically not hit. The DUCET explicitly specifies mappings + // for all characters that do not decompose. + return int(r) + commonUnifiedOffset + } + return int(r) + rareUnifiedOffset + } + return int(r) + otherOffset +} diff --git a/vendor/golang.org/x/text/internal/colltab/collelem_test.go b/vendor/golang.org/x/text/internal/colltab/collelem_test.go new file mode 100644 index 0000000..f131ecc --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/collelem_test.go @@ -0,0 +1,183 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import ( + "fmt" + "testing" + "unicode" +) + +func (e Elem) String() string { + q := "" + if v := e.Quaternary(); v == MaxQuaternary { + q = "max" + } else { + q = fmt.Sprint(v) + } + return fmt.Sprintf("[%d, %d, %d, %s]", + e.Primary(), + e.Secondary(), + e.Tertiary(), + q) +} + +type ceTest struct { + f func(inout []int) (Elem, ceType) + arg []int +} + +func makeCE(weights []int) Elem { + ce, _ := MakeElem(weights[0], weights[1], weights[2], uint8(weights[3])) + return ce +} + +var defaultValues = []int{0, defaultSecondary, defaultTertiary, 0} + +func e(w ...int) Elem { + return makeCE(append(w, defaultValues[len(w):]...)) +} + +func makeContractIndex(index, n, offset int) Elem { + const ( + contractID = 0xC0000000 + maxNBits = 4 + maxTrieIndexBits = 12 + maxContractOffsetBits = 13 + ) + ce := Elem(contractID) + ce += Elem(offset << (maxNBits + maxTrieIndexBits)) + ce += Elem(index << maxNBits) + ce += Elem(n) + return ce +} + +func makeExpandIndex(index int) Elem { + const expandID = 0xE0000000 + return expandID + Elem(index) +} + +func makeDecompose(t1, t2 int) Elem { + const decompID = 0xF0000000 + return Elem(t2<<8+t1) + decompID +} + +func normalCE(inout []int) (ce Elem, t ceType) { + ce = makeCE(inout) + inout[0] = ce.Primary() + inout[1] = ce.Secondary() + inout[2] = int(ce.Tertiary()) + inout[3] = int(ce.CCC()) + return ce, ceNormal +} + +func expandCE(inout []int) (ce Elem, t ceType) { + ce = makeExpandIndex(inout[0]) + inout[0] = splitExpandIndex(ce) + return ce, ceExpansionIndex +} + +func contractCE(inout []int) (ce Elem, t ceType) { + ce = makeContractIndex(inout[0], inout[1], inout[2]) + i, n, o := splitContractIndex(ce) + inout[0], inout[1], inout[2] = i, n, o + return ce, ceContractionIndex +} + +func decompCE(inout []int) (ce Elem, t ceType) { + ce = makeDecompose(inout[0], inout[1]) + t1, t2 := splitDecompose(ce) + inout[0], inout[1] = int(t1), int(t2) + return ce, ceDecompose +} + +var ceTests = []ceTest{ + {normalCE, []int{0, 0, 0, 0}}, + {normalCE, []int{0, 30, 3, 0}}, + {normalCE, []int{0, 30, 3, 0xFF}}, + {normalCE, []int{100, defaultSecondary, defaultTertiary, 0}}, + {normalCE, []int{100, defaultSecondary, defaultTertiary, 0xFF}}, + {normalCE, []int{100, defaultSecondary, 3, 0}}, + {normalCE, []int{0x123, defaultSecondary, 8, 0xFF}}, + + {contractCE, []int{0, 0, 0}}, + {contractCE, []int{1, 1, 1}}, + {contractCE, []int{1, (1 << maxNBits) - 1, 1}}, + {contractCE, []int{(1 << maxTrieIndexBits) - 1, 1, 1}}, + {contractCE, []int{1, 1, (1 << maxContractOffsetBits) - 1}}, + + {expandCE, []int{0}}, + {expandCE, []int{5}}, + {expandCE, []int{(1 << maxExpandIndexBits) - 1}}, + + {decompCE, []int{0, 0}}, + {decompCE, []int{1, 1}}, + {decompCE, []int{0x1F, 0x1F}}, +} + +func TestColElem(t *testing.T) { + for i, tt := range ceTests { + inout := make([]int, len(tt.arg)) + copy(inout, tt.arg) + ce, typ := tt.f(inout) + if ce.ctype() != typ { + t.Errorf("%d: type is %d; want %d (ColElem: %X)", i, ce.ctype(), typ, ce) + } + for j, a := range tt.arg { + if inout[j] != a { + t.Errorf("%d: argument %d is %X; want %X (ColElem: %X)", i, j, inout[j], a, ce) + } + } + } +} + +type implicitTest struct { + r rune + p int +} + +var implicitTests = []implicitTest{ + {0x33FF, 0x533FF}, + {0x3400, 0x23400}, + {0x4DC0, 0x54DC0}, + {0x4DFF, 0x54DFF}, + {0x4E00, 0x14E00}, + {0x9FCB, 0x19FCB}, + {0xA000, 0x5A000}, + {0xF8FF, 0x5F8FF}, + {0xF900, 0x1F900}, + {0xFA23, 0x1FA23}, + {0xFAD9, 0x1FAD9}, + {0xFB00, 0x5FB00}, + {0x20000, 0x40000}, + {0x2B81C, 0x4B81C}, + {unicode.MaxRune, 0x15FFFF}, // maximum primary value +} + +func TestImplicit(t *testing.T) { + for _, tt := range implicitTests { + if p := implicitPrimary(tt.r); p != tt.p { + t.Errorf("%U: was %X; want %X", tt.r, p, tt.p) + } + } +} + +func TestUpdateTertiary(t *testing.T) { + tests := []struct { + in, out Elem + t uint8 + }{ + {0x4000FE20, 0x0000FE8A, 0x0A}, + {0x4000FE21, 0x0000FEAA, 0x0A}, + {0x0000FE8B, 0x0000FE83, 0x03}, + {0x82FF0188, 0x9BFF0188, 0x1B}, + {0xAFF0CC02, 0xAFF0CC1B, 0x1B}, + } + for i, tt := range tests { + if out := tt.in.updateTertiary(tt.t); out != tt.out { + t.Errorf("%d: was %X; want %X", i, out, tt.out) + } + } +} diff --git a/vendor/golang.org/x/text/internal/colltab/colltab.go b/vendor/golang.org/x/text/internal/colltab/colltab.go new file mode 100644 index 0000000..02f2247 --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/colltab.go @@ -0,0 +1,105 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package colltab contains functionality related to collation tables. +// It is only to be used by the collate and search packages. +package colltab // import "golang.org/x/text/internal/colltab" + +import ( + "sort" + + "golang.org/x/text/language" +) + +// MatchLang finds the index of t in tags, using a matching algorithm used for +// collation and search. tags[0] must be language.Und, the remaining tags should +// be sorted alphabetically. +// +// Language matching for collation and search is different from the matching +// defined by language.Matcher: the (inferred) base language must be an exact +// match for the relevant fields. For example, "gsw" should not match "de". +// Also the parent relation is different, as a parent may have a different +// script. So usually the parent of zh-Hant is und, whereas for MatchLang it is +// zh. +func MatchLang(t language.Tag, tags []language.Tag) int { + // Canonicalize the values, including collapsing macro languages. + t, _ = language.All.Canonicalize(t) + + base, conf := t.Base() + // Estimate the base language, but only use high-confidence values. + if conf < language.High { + // The root locale supports "search" and "standard". We assume that any + // implementation will only use one of both. + return 0 + } + + // Maximize base and script and normalize the tag. + if _, s, r := t.Raw(); (r != language.Region{}) { + p, _ := language.Raw.Compose(base, s, r) + // Taking the parent forces the script to be maximized. + p = p.Parent() + // Add back region and extensions. + t, _ = language.Raw.Compose(p, r, t.Extensions()) + } else { + // Set the maximized base language. + t, _ = language.Raw.Compose(base, s, t.Extensions()) + } + + // Find start index of the language tag. + start := 1 + sort.Search(len(tags)-1, func(i int) bool { + b, _, _ := tags[i+1].Raw() + return base.String() <= b.String() + }) + if start < len(tags) { + if b, _, _ := tags[start].Raw(); b != base { + return 0 + } + } + + // Besides the base language, script and region, only the collation type and + // the custom variant defined in the 'u' extension are used to distinguish a + // locale. + // Strip all variants and extensions and add back the custom variant. + tdef, _ := language.Raw.Compose(t.Raw()) + tdef, _ = tdef.SetTypeForKey("va", t.TypeForKey("va")) + + // First search for a specialized collation type, if present. + try := []language.Tag{tdef} + if co := t.TypeForKey("co"); co != "" { + tco, _ := tdef.SetTypeForKey("co", co) + try = []language.Tag{tco, tdef} + } + + for _, tx := range try { + for ; tx != language.Und; tx = parent(tx) { + for i, t := range tags[start:] { + if b, _, _ := t.Raw(); b != base { + break + } + if tx == t { + return start + i + } + } + } + } + return 0 +} + +// parent computes the structural parent. This means inheritance may change +// script. So, unlike the CLDR parent, parent(zh-Hant) == zh. +func parent(t language.Tag) language.Tag { + if t.TypeForKey("va") != "" { + t, _ = t.SetTypeForKey("va", "") + return t + } + result := language.Und + if b, s, r := t.Raw(); (r != language.Region{}) { + result, _ = language.Raw.Compose(b, s, t.Extensions()) + } else if (s != language.Script{}) { + result, _ = language.Raw.Compose(b, t.Extensions()) + } else if (b != language.Base{}) { + result, _ = language.Raw.Compose(t.Extensions()) + } + return result +} diff --git a/vendor/golang.org/x/text/internal/colltab/colltab_test.go b/vendor/golang.org/x/text/internal/colltab/colltab_test.go new file mode 100644 index 0000000..c403ac3 --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/colltab_test.go @@ -0,0 +1,64 @@ +package colltab + +import ( + "testing" + + "golang.org/x/text/language" +) + +func TestMatchLang(t *testing.T) { + tags := []language.Tag{ + 0: language.Und, + 1: language.MustParse("bs"), + 2: language.German, + 3: language.English, + 4: language.AmericanEnglish, + 5: language.MustParse("en-US-u-va-posix"), + 6: language.Portuguese, + 7: language.Serbian, + 8: language.MustParse("sr-Latn"), + 9: language.Chinese, + 10: language.MustParse("zh-u-co-stroke"), + 11: language.MustParse("zh-Hant-u-co-pinyin"), + 12: language.TraditionalChinese, + } + for i, tc := range []struct { + x int + t language.Tag + }{ + {0, language.Und}, + {0, language.Persian}, // Default to first element when no match. + {3, language.English}, + {4, language.AmericanEnglish}, + {5, language.MustParse("en-US-u-va-posix")}, // Ext. variant match. + {4, language.MustParse("en-US-u-va-noposix")}, // Ext. variant mismatch. + {3, language.MustParse("en-UK-u-va-noposix")}, // Ext. variant mismatch. + {7, language.Serbian}, + {0, language.Croatian}, // Don't match to close language! + {0, language.MustParse("gsw")}, // Don't match to close language! + {1, language.MustParse("bs-Cyrl")}, // Odd, but correct. + {1, language.MustParse("bs-Latn")}, // Estimated script drops. + {8, language.MustParse("sr-Latn")}, + {9, language.Chinese}, + {9, language.SimplifiedChinese}, + {12, language.TraditionalChinese}, + {11, language.MustParse("zh-Hant-u-co-pinyin")}, + // TODO: should this be 12? Either inherited value (10) or default is + // fine in this case, though. Other locales are not affected. + {10, language.MustParse("zh-Hant-u-co-stroke")}, + // There is no "phonebk" sorting order for zh-Hant, so use default. + {12, language.MustParse("zh-Hant-u-co-phonebk")}, + {10, language.MustParse("zh-u-co-stroke")}, + {12, language.MustParse("und-TW")}, // Infer script and language. + {12, language.MustParse("und-HK")}, // Infer script and language. + {6, language.MustParse("und-BR")}, // Infer script and language. + {6, language.MustParse("und-PT")}, // Infer script and language. + {2, language.MustParse("und-Latn-DE")}, // Infer language. + {0, language.MustParse("und-Jpan-BR")}, // Infers "ja", so no match. + {0, language.MustParse("zu")}, // No match past index. + } { + if x := MatchLang(tc.t, tags); x != tc.x { + t.Errorf("%d: MatchLang(%q, tags) = %d; want %d", i, tc.t, x, tc.x) + } + } +} diff --git a/vendor/golang.org/x/text/internal/colltab/contract.go b/vendor/golang.org/x/text/internal/colltab/contract.go new file mode 100644 index 0000000..25649d4 --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/contract.go @@ -0,0 +1,145 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import "unicode/utf8" + +// For a description of ContractTrieSet, see text/collate/build/contract.go. + +type ContractTrieSet []struct{ L, H, N, I uint8 } + +// ctScanner is used to match a trie to an input sequence. +// A contraction may match a non-contiguous sequence of bytes in an input string. +// For example, if there is a contraction for <a, combining_ring>, it should match +// the sequence <a, combining_cedilla, combining_ring>, as combining_cedilla does +// not block combining_ring. +// ctScanner does not automatically skip over non-blocking non-starters, but rather +// retains the state of the last match and leaves it up to the user to continue +// the match at the appropriate points. +type ctScanner struct { + states ContractTrieSet + s []byte + n int + index int + pindex int + done bool +} + +type ctScannerString struct { + states ContractTrieSet + s string + n int + index int + pindex int + done bool +} + +func (t ContractTrieSet) scanner(index, n int, b []byte) ctScanner { + return ctScanner{s: b, states: t[index:], n: n} +} + +func (t ContractTrieSet) scannerString(index, n int, str string) ctScannerString { + return ctScannerString{s: str, states: t[index:], n: n} +} + +// result returns the offset i and bytes consumed p so far. If no suffix +// matched, i and p will be 0. +func (s *ctScanner) result() (i, p int) { + return s.index, s.pindex +} + +func (s *ctScannerString) result() (i, p int) { + return s.index, s.pindex +} + +const ( + final = 0 + noIndex = 0xFF +) + +// scan matches the longest suffix at the current location in the input +// and returns the number of bytes consumed. +func (s *ctScanner) scan(p int) int { + pr := p // the p at the rune start + str := s.s + states, n := s.states, s.n + for i := 0; i < n && p < len(str); { + e := states[i] + c := str[p] + // TODO: a significant number of contractions are of a form that + // cannot match discontiguous UTF-8 in a normalized string. We could let + // a negative value of e.n mean that we can set s.done = true and avoid + // the need for additional matches. + if c >= e.L { + if e.L == c { + p++ + if e.I != noIndex { + s.index = int(e.I) + s.pindex = p + } + if e.N != final { + i, states, n = 0, states[int(e.H)+n:], int(e.N) + if p >= len(str) || utf8.RuneStart(str[p]) { + s.states, s.n, pr = states, n, p + } + } else { + s.done = true + return p + } + continue + } else if e.N == final && c <= e.H { + p++ + s.done = true + s.index = int(c-e.L) + int(e.I) + s.pindex = p + return p + } + } + i++ + } + return pr +} + +// scan is a verbatim copy of ctScanner.scan. +func (s *ctScannerString) scan(p int) int { + pr := p // the p at the rune start + str := s.s + states, n := s.states, s.n + for i := 0; i < n && p < len(str); { + e := states[i] + c := str[p] + // TODO: a significant number of contractions are of a form that + // cannot match discontiguous UTF-8 in a normalized string. We could let + // a negative value of e.n mean that we can set s.done = true and avoid + // the need for additional matches. + if c >= e.L { + if e.L == c { + p++ + if e.I != noIndex { + s.index = int(e.I) + s.pindex = p + } + if e.N != final { + i, states, n = 0, states[int(e.H)+n:], int(e.N) + if p >= len(str) || utf8.RuneStart(str[p]) { + s.states, s.n, pr = states, n, p + } + } else { + s.done = true + return p + } + continue + } else if e.N == final && c <= e.H { + p++ + s.done = true + s.index = int(c-e.L) + int(e.I) + s.pindex = p + return p + } + } + i++ + } + return pr +} diff --git a/vendor/golang.org/x/text/internal/colltab/contract_test.go b/vendor/golang.org/x/text/internal/colltab/contract_test.go new file mode 100644 index 0000000..ce2871d --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/contract_test.go @@ -0,0 +1,131 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import ( + "testing" +) + +type lookupStrings struct { + str string + offset int + n int // bytes consumed from input +} + +type LookupTest struct { + lookup []lookupStrings + n int + tries ContractTrieSet +} + +var lookupTests = []LookupTest{{ + []lookupStrings{ + {"abc", 1, 3}, + {"a", 0, 0}, + {"b", 0, 0}, + {"c", 0, 0}, + {"d", 0, 0}, + }, + 1, + ContractTrieSet{ + {'a', 0, 1, 0xFF}, + {'b', 0, 1, 0xFF}, + {'c', 'c', 0, 1}, + }, +}, { + []lookupStrings{ + {"abc", 1, 3}, + {"abd", 2, 3}, + {"abe", 3, 3}, + {"a", 0, 0}, + {"ab", 0, 0}, + {"d", 0, 0}, + {"f", 0, 0}, + }, + 1, + ContractTrieSet{ + {'a', 0, 1, 0xFF}, + {'b', 0, 1, 0xFF}, + {'c', 'e', 0, 1}, + }, +}, { + []lookupStrings{ + {"abc", 1, 3}, + {"ab", 2, 2}, + {"a", 3, 1}, + {"abcd", 1, 3}, + {"abe", 2, 2}, + }, + 1, + ContractTrieSet{ + {'a', 0, 1, 3}, + {'b', 0, 1, 2}, + {'c', 'c', 0, 1}, + }, +}, { + []lookupStrings{ + {"abc", 1, 3}, + {"abd", 2, 3}, + {"ab", 3, 2}, + {"ac", 4, 2}, + {"a", 5, 1}, + {"b", 6, 1}, + {"ba", 6, 1}, + }, + 2, + ContractTrieSet{ + {'b', 'b', 0, 6}, + {'a', 0, 2, 5}, + {'c', 'c', 0, 4}, + {'b', 0, 1, 3}, + {'c', 'd', 0, 1}, + }, +}, { + []lookupStrings{ + {"bcde", 2, 4}, + {"bc", 7, 2}, + {"ab", 6, 2}, + {"bcd", 5, 3}, + {"abcd", 1, 4}, + {"abc", 4, 3}, + {"bcdf", 3, 4}, + }, + 2, + ContractTrieSet{ + {'b', 3, 1, 0xFF}, + {'a', 0, 1, 0xFF}, + {'b', 0, 1, 6}, + {'c', 0, 1, 4}, + {'d', 'd', 0, 1}, + {'c', 0, 1, 7}, + {'d', 0, 1, 5}, + {'e', 'f', 0, 2}, + }, +}} + +func lookup(c *ContractTrieSet, nnode int, s []uint8) (i, n int) { + scan := c.scanner(0, nnode, s) + scan.scan(0) + return scan.result() +} + +func TestLookupContraction(t *testing.T) { + for i, tt := range lookupTests { + cts := ContractTrieSet(tt.tries) + for j, lu := range tt.lookup { + str := lu.str + for _, s := range []string{str, str + "X"} { + const msg = `%d:%d: %s of "%s" %v; want %v` + offset, n := lookup(&cts, tt.n, []byte(s)) + if offset != lu.offset { + t.Errorf(msg, i, j, "offset", s, offset, lu.offset) + } + if n != lu.n { + t.Errorf(msg, i, j, "bytes consumed", s, n, len(str)) + } + } + } + } +} diff --git a/vendor/golang.org/x/text/internal/colltab/iter.go b/vendor/golang.org/x/text/internal/colltab/iter.go new file mode 100644 index 0000000..c1b1ba8 --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/iter.go @@ -0,0 +1,178 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +// An Iter incrementally converts chunks of the input text to collation +// elements, while ensuring that the collation elements are in normalized order +// (that is, they are in the order as if the input text were normalized first). +type Iter struct { + Weighter Weighter + Elems []Elem + // N is the number of elements in Elems that will not be reordered on + // subsequent iterations, N <= len(Elems). + N int + + bytes []byte + str string + // Because the Elems buffer may contain collation elements that are needed + // for look-ahead, we need two positions in the text (bytes or str): one for + // the end position in the text for the current iteration and one for the + // start of the next call to appendNext. + pEnd int // end position in text corresponding to N. + pNext int // pEnd <= pNext. +} + +// Reset sets the position in the current input text to p and discards any +// results obtained so far. +func (i *Iter) Reset(p int) { + i.Elems = i.Elems[:0] + i.N = 0 + i.pEnd = p + i.pNext = p +} + +// Len returns the length of the input text. +func (i *Iter) Len() int { + if i.bytes != nil { + return len(i.bytes) + } + return len(i.str) +} + +// Discard removes the collation elements up to N. +func (i *Iter) Discard() { + // TODO: change this such that only modifiers following starters will have + // to be copied. + i.Elems = i.Elems[:copy(i.Elems, i.Elems[i.N:])] + i.N = 0 +} + +// End returns the end position of the input text for which Next has returned +// results. +func (i *Iter) End() int { + return i.pEnd +} + +// SetInput resets i to input s. +func (i *Iter) SetInput(s []byte) { + i.bytes = s + i.str = "" + i.Reset(0) +} + +// SetInputString resets i to input s. +func (i *Iter) SetInputString(s string) { + i.str = s + i.bytes = nil + i.Reset(0) +} + +func (i *Iter) done() bool { + return i.pNext >= len(i.str) && i.pNext >= len(i.bytes) +} + +func (i *Iter) appendNext() bool { + if i.done() { + return false + } + var sz int + if i.bytes == nil { + i.Elems, sz = i.Weighter.AppendNextString(i.Elems, i.str[i.pNext:]) + } else { + i.Elems, sz = i.Weighter.AppendNext(i.Elems, i.bytes[i.pNext:]) + } + if sz == 0 { + sz = 1 + } + i.pNext += sz + return true +} + +// Next appends Elems to the internal array. On each iteration, it will either +// add starters or modifiers. In the majority of cases, an Elem with a primary +// value > 0 will have a CCC of 0. The CCC values of collation elements are also +// used to detect if the input string was not normalized and to adjust the +// result accordingly. +func (i *Iter) Next() bool { + if i.N == len(i.Elems) && !i.appendNext() { + return false + } + + // Check if the current segment starts with a starter. + prevCCC := i.Elems[len(i.Elems)-1].CCC() + if prevCCC == 0 { + i.N = len(i.Elems) + i.pEnd = i.pNext + return true + } else if i.Elems[i.N].CCC() == 0 { + // set i.N to only cover part of i.Elems for which prevCCC == 0 and + // use rest for the next call to next. + for i.N++; i.N < len(i.Elems) && i.Elems[i.N].CCC() == 0; i.N++ { + } + i.pEnd = i.pNext + return true + } + + // The current (partial) segment starts with modifiers. We need to collect + // all successive modifiers to ensure that they are normalized. + for { + p := len(i.Elems) + i.pEnd = i.pNext + if !i.appendNext() { + break + } + + if ccc := i.Elems[p].CCC(); ccc == 0 || len(i.Elems)-i.N > maxCombiningCharacters { + // Leave the starter for the next iteration. This ensures that we + // do not return sequences of collation elements that cross two + // segments. + // + // TODO: handle large number of combining characters by fully + // normalizing the input segment before iteration. This ensures + // results are consistent across the text repo. + i.N = p + return true + } else if ccc < prevCCC { + i.doNorm(p, ccc) // should be rare, never occurs for NFD and FCC. + } else { + prevCCC = ccc + } + } + + done := len(i.Elems) != i.N + i.N = len(i.Elems) + return done +} + +// nextNoNorm is the same as next, but does not "normalize" the collation +// elements. +func (i *Iter) nextNoNorm() bool { + // TODO: remove this function. Using this instead of next does not seem + // to improve performance in any significant way. We retain this until + // later for evaluation purposes. + if i.done() { + return false + } + i.appendNext() + i.N = len(i.Elems) + return true +} + +const maxCombiningCharacters = 30 + +// doNorm reorders the collation elements in i.Elems. +// It assumes that blocks of collation elements added with appendNext +// either start and end with the same CCC or start with CCC == 0. +// This allows for a single insertion point for the entire block. +// The correctness of this assumption is verified in builder.go. +func (i *Iter) doNorm(p int, ccc uint8) { + n := len(i.Elems) + k := p + for p--; p > i.N && ccc < i.Elems[p-1].CCC(); p-- { + } + i.Elems = append(i.Elems, i.Elems[p:k]...) + copy(i.Elems[p:], i.Elems[k:]) + i.Elems = i.Elems[:n] +} diff --git a/vendor/golang.org/x/text/internal/colltab/iter_test.go b/vendor/golang.org/x/text/internal/colltab/iter_test.go new file mode 100644 index 0000000..5783534 --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/iter_test.go @@ -0,0 +1,63 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import ( + "testing" +) + +func TestDoNorm(t *testing.T) { + const div = -1 // The insertion point of the next block. + tests := []struct { + in, out []int + }{{ + in: []int{4, div, 3}, + out: []int{3, 4}, + }, { + in: []int{4, div, 3, 3, 3}, + out: []int{3, 3, 3, 4}, + }, { + in: []int{0, 4, div, 3}, + out: []int{0, 3, 4}, + }, { + in: []int{0, 0, 4, 5, div, 3, 3}, + out: []int{0, 0, 3, 3, 4, 5}, + }, { + in: []int{0, 0, 1, 4, 5, div, 3, 3}, + out: []int{0, 0, 1, 3, 3, 4, 5}, + }, { + in: []int{0, 0, 1, 4, 5, div, 4, 4}, + out: []int{0, 0, 1, 4, 4, 4, 5}, + }, + } + for j, tt := range tests { + i := Iter{} + var w, p int + for k, cc := range tt.in { + + if cc == div { + w = 100 + p = k + continue + } + i.Elems = append(i.Elems, makeCE([]int{w, defaultSecondary, 2, cc})) + } + i.doNorm(p, i.Elems[p].CCC()) + if len(i.Elems) != len(tt.out) { + t.Errorf("%d: length was %d; want %d", j, len(i.Elems), len(tt.out)) + } + prevCCC := uint8(0) + for k, ce := range i.Elems { + if int(ce.CCC()) != tt.out[k] { + t.Errorf("%d:%d: unexpected CCC. Was %d; want %d", j, k, ce.CCC(), tt.out[k]) + } + if k > 0 && ce.CCC() == prevCCC && i.Elems[k-1].Primary() > ce.Primary() { + t.Errorf("%d:%d: normalization crossed across CCC boundary.", j, k) + } + } + } + + // Combining rune overflow is tested in search/pattern_test.go. +} diff --git a/vendor/golang.org/x/text/internal/colltab/numeric.go b/vendor/golang.org/x/text/internal/colltab/numeric.go new file mode 100644 index 0000000..38c255c --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/numeric.go @@ -0,0 +1,236 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import ( + "unicode" + "unicode/utf8" +) + +// NewNumericWeighter wraps w to replace individual digits to sort based on their +// numeric value. +// +// Weighter w must have a free primary weight after the primary weight for 9. +// If this is not the case, numeric value will sort at the same primary level +// as the first primary sorting after 9. +func NewNumericWeighter(w Weighter) Weighter { + getElem := func(s string) Elem { + elems, _ := w.AppendNextString(nil, s) + return elems[0] + } + nine := getElem("9") + + // Numbers should order before zero, but the DUCET has no room for this. + // TODO: move before zero once we use fractional collation elements. + ns, _ := MakeElem(nine.Primary()+1, nine.Secondary(), int(nine.Tertiary()), 0) + + return &numericWeighter{ + Weighter: w, + + // We assume that w sorts digits of different kinds in order of numeric + // value and that the tertiary weight order is preserved. + // + // TODO: evaluate whether it is worth basing the ranges on the Elem + // encoding itself once the move to fractional weights is complete. + zero: getElem("0"), + zeroSpecialLo: getElem("0"), // U+FF10 FULLWIDTH DIGIT ZERO + zeroSpecialHi: getElem("₀"), // U+2080 SUBSCRIPT ZERO + nine: nine, + nineSpecialHi: getElem("₉"), // U+2089 SUBSCRIPT NINE + numberStart: ns, + } +} + +// A numericWeighter translates a stream of digits into a stream of weights +// representing the numeric value. +type numericWeighter struct { + Weighter + + // The Elems below all demarcate boundaries of specific ranges. With the + // current element encoding digits are in two ranges: normal (default + // tertiary value) and special. For most languages, digits have collation + // elements in the normal range. + // + // Note: the range tests are very specific for the element encoding used by + // this implementation. The tests in collate_test.go are designed to fail + // if this code is not updated when an encoding has changed. + + zero Elem // normal digit zero + zeroSpecialLo Elem // special digit zero, low tertiary value + zeroSpecialHi Elem // special digit zero, high tertiary value + nine Elem // normal digit nine + nineSpecialHi Elem // special digit nine + numberStart Elem +} + +// AppendNext calls the namesake of the underlying weigher, but replaces single +// digits with weights representing their value. +func (nw *numericWeighter) AppendNext(buf []Elem, s []byte) (ce []Elem, n int) { + ce, n = nw.Weighter.AppendNext(buf, s) + nc := numberConverter{ + elems: buf, + w: nw, + b: s, + } + isZero, ok := nc.checkNextDigit(ce) + if !ok { + return ce, n + } + // ce might have been grown already, so take it instead of buf. + nc.init(ce, len(buf), isZero) + for n < len(s) { + ce, sz := nw.Weighter.AppendNext(nc.elems, s[n:]) + nc.b = s + n += sz + if !nc.update(ce) { + break + } + } + return nc.result(), n +} + +// AppendNextString calls the namesake of the underlying weigher, but replaces +// single digits with weights representing their value. +func (nw *numericWeighter) AppendNextString(buf []Elem, s string) (ce []Elem, n int) { + ce, n = nw.Weighter.AppendNextString(buf, s) + nc := numberConverter{ + elems: buf, + w: nw, + s: s, + } + isZero, ok := nc.checkNextDigit(ce) + if !ok { + return ce, n + } + nc.init(ce, len(buf), isZero) + for n < len(s) { + ce, sz := nw.Weighter.AppendNextString(nc.elems, s[n:]) + nc.s = s + n += sz + if !nc.update(ce) { + break + } + } + return nc.result(), n +} + +type numberConverter struct { + w *numericWeighter + + elems []Elem + nDigits int + lenIndex int + + s string // set if the input was of type string + b []byte // set if the input was of type []byte +} + +// init completes initialization of a numberConverter and prepares it for adding +// more digits. elems is assumed to have a digit starting at oldLen. +func (nc *numberConverter) init(elems []Elem, oldLen int, isZero bool) { + // Insert a marker indicating the start of a number and and a placeholder + // for the number of digits. + if isZero { + elems = append(elems[:oldLen], nc.w.numberStart, 0) + } else { + elems = append(elems, 0, 0) + copy(elems[oldLen+2:], elems[oldLen:]) + elems[oldLen] = nc.w.numberStart + elems[oldLen+1] = 0 + + nc.nDigits = 1 + } + nc.elems = elems + nc.lenIndex = oldLen + 1 +} + +// checkNextDigit reports whether bufNew adds a single digit relative to the old +// buffer. If it does, it also reports whether this digit is zero. +func (nc *numberConverter) checkNextDigit(bufNew []Elem) (isZero, ok bool) { + if len(nc.elems) >= len(bufNew) { + return false, false + } + e := bufNew[len(nc.elems)] + if e < nc.w.zeroSpecialLo || nc.w.nine < e { + // Not a number. + return false, false + } + if e < nc.w.zero { + if e > nc.w.nineSpecialHi { + // Not a number. + return false, false + } + if !nc.isDigit() { + return false, false + } + isZero = e <= nc.w.zeroSpecialHi + } else { + // This is the common case if we encounter a digit. + isZero = e == nc.w.zero + } + // Test the remaining added collation elements have a zero primary value. + if n := len(bufNew) - len(nc.elems); n > 1 { + for i := len(nc.elems) + 1; i < len(bufNew); i++ { + if bufNew[i].Primary() != 0 { + return false, false + } + } + // In some rare cases, collation elements will encode runes in + // unicode.No as a digit. For example Ethiopic digits (U+1369 - U+1371) + // are not in Nd. Also some digits that clearly belong in unicode.No, + // like U+0C78 TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR, have + // collation elements indistinguishable from normal digits. + // Unfortunately, this means we need to make this check for nearly all + // non-Latin digits. + // + // TODO: check the performance impact and find something better if it is + // an issue. + if !nc.isDigit() { + return false, false + } + } + return isZero, true +} + +func (nc *numberConverter) isDigit() bool { + if nc.b != nil { + r, _ := utf8.DecodeRune(nc.b) + return unicode.In(r, unicode.Nd) + } + r, _ := utf8.DecodeRuneInString(nc.s) + return unicode.In(r, unicode.Nd) +} + +// We currently support a maximum of about 2M digits (the number of primary +// values). Such numbers will compare correctly against small numbers, but their +// comparison against other large numbers is undefined. +// +// TODO: define a proper fallback, such as comparing large numbers textually or +// actually allowing numbers of unlimited length. +// +// TODO: cap this to a lower number (like 100) and maybe allow a larger number +// in an option? +const maxDigits = 1<<maxPrimaryBits - 1 + +func (nc *numberConverter) update(elems []Elem) bool { + isZero, ok := nc.checkNextDigit(elems) + if nc.nDigits == 0 && isZero { + return true + } + nc.elems = elems + if !ok { + return false + } + nc.nDigits++ + return nc.nDigits < maxDigits +} + +// result fills in the length element for the digit sequence and returns the +// completed collation elements. +func (nc *numberConverter) result() []Elem { + e, _ := MakeElem(nc.nDigits, defaultSecondary, defaultTertiary, 0) + nc.elems[nc.lenIndex] = e + return nc.elems +} diff --git a/vendor/golang.org/x/text/internal/colltab/numeric_test.go b/vendor/golang.org/x/text/internal/colltab/numeric_test.go new file mode 100644 index 0000000..e9406ae --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/numeric_test.go @@ -0,0 +1,159 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import ( + "reflect" + "strings" + "testing" + + "golang.org/x/text/internal/testtext" +) + +const ( + digSec = defaultSecondary + digTert = defaultTertiary +) + +var tPlus3 = e(0, 50, digTert+3) + +// numWeighter is a testWeighter used for testing numericWeighter. +var numWeighter = testWeighter{ + "0": p(100), + "0": []Elem{e(100, digSec, digTert+1)}, // U+FF10 FULLWIDTH DIGIT ZERO + "₀": []Elem{e(100, digSec, digTert+5)}, // U+2080 SUBSCRIPT ZERO + + "1": p(101), + // Allow non-primary collation elements to be inserted. + "١": append(p(101), tPlus3), // U+0661 ARABIC-INDIC DIGIT ONE + // Allow varying tertiary weight if the number is Nd. + "1": []Elem{e(101, digSec, digTert+1)}, // U+FF11 FULLWIDTH DIGIT ONE + "2": p(102), + // Allow non-primary collation elements to be inserted. + "٢": append(p(102), tPlus3), // U+0662 ARABIC-INDIC DIGIT TWO + // Varying tertiary weights should be ignored. + "2": []Elem{e(102, digSec, digTert+3)}, // U+FF12 FULLWIDTH DIGIT TWO + "3": p(103), + "4": p(104), + "5": p(105), + "6": p(106), + "7": p(107), + // Weights must be strictly monotonically increasing, but do not need to be + // consecutive. + "8": p(118), + "9": p(119), + // Allow non-primary collation elements to be inserted. + "٩": append(p(119), tPlus3), // U+0669 ARABIC-INDIC DIGIT NINE + // Varying tertiary weights should be ignored. + "9": []Elem{e(119, digSec, digTert+1)}, // U+FF19 FULLWIDTH DIGIT NINE + "₉": []Elem{e(119, digSec, digTert+5)}, // U+2089 SUBSCRIPT NINE + + "a": p(5), + "b": p(6), + "c": p(8, 2), + + "klm": p(99), + + "nop": p(121), + + "x": p(200), + "y": p(201), +} + +func p(w ...int) (elems []Elem) { + for _, x := range w { + e, _ := MakeElem(x, digSec, digTert, 0) + elems = append(elems, e) + } + return elems +} + +func TestNumericAppendNext(t *testing.T) { + for _, tt := range []struct { + in string + w []Elem + }{ + {"a", p(5)}, + {"klm", p(99)}, + {"aa", p(5, 5)}, + {"1", p(120, 1, 101)}, + {"0", p(120, 0)}, + {"01", p(120, 1, 101)}, + {"0001", p(120, 1, 101)}, + {"10", p(120, 2, 101, 100)}, + {"99", p(120, 2, 119, 119)}, + {"9999", p(120, 4, 119, 119, 119, 119)}, + {"1a", p(120, 1, 101, 5)}, + {"0b", p(120, 0, 6)}, + {"01c", p(120, 1, 101, 8, 2)}, + {"10x", p(120, 2, 101, 100, 200)}, + {"99y", p(120, 2, 119, 119, 201)}, + {"9999nop", p(120, 4, 119, 119, 119, 119, 121)}, + + // Allow follow-up collation elements if they have a zero non-primary. + {"١٢٩", []Elem{e(120), e(3), e(101), tPlus3, e(102), tPlus3, e(119), tPlus3}}, + { + "129", + []Elem{ + e(120), e(3), + e(101, digSec, digTert+1), + e(102, digSec, digTert+3), + e(119, digSec, digTert+1), + }, + }, + + // Ensure AppendNext* adds to the given buffer. + {"a10", p(5, 120, 2, 101, 100)}, + } { + nw := NewNumericWeighter(numWeighter) + + b := []byte(tt.in) + got := []Elem(nil) + for n, sz := 0, 0; n < len(b); { + got, sz = nw.AppendNext(got, b[n:]) + n += sz + } + if !reflect.DeepEqual(got, tt.w) { + t.Errorf("AppendNext(%q) =\n%v; want\n%v", tt.in, got, tt.w) + } + + got = nil + for n, sz := 0, 0; n < len(tt.in); { + got, sz = nw.AppendNextString(got, tt.in[n:]) + n += sz + } + if !reflect.DeepEqual(got, tt.w) { + t.Errorf("AppendNextString(%q) =\n%v; want\n%v", tt.in, got, tt.w) + } + } +} + +func TestNumericOverflow(t *testing.T) { + manyDigits := strings.Repeat("9", maxDigits+1) + "a" + + nw := NewNumericWeighter(numWeighter) + + got, n := nw.AppendNextString(nil, manyDigits) + + if n != maxDigits { + t.Errorf("n: got %d; want %d", n, maxDigits) + } + + if got[1].Primary() != maxDigits { + t.Errorf("primary(e[1]): got %d; want %d", n, maxDigits) + } +} + +func TestNumericWeighterAlloc(t *testing.T) { + buf := make([]Elem, 100) + w := NewNumericWeighter(numWeighter) + s := "1234567890a" + + nNormal := testtext.AllocsPerRun(3, func() { numWeighter.AppendNextString(buf, s) }) + nNumeric := testtext.AllocsPerRun(3, func() { w.AppendNextString(buf, s) }) + if n := nNumeric - nNormal; n > 0 { + t.Errorf("got %f; want 0", n) + } +} diff --git a/vendor/golang.org/x/text/internal/colltab/table.go b/vendor/golang.org/x/text/internal/colltab/table.go new file mode 100644 index 0000000..e26e36d --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/table.go @@ -0,0 +1,275 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import ( + "unicode/utf8" + + "golang.org/x/text/unicode/norm" +) + +// Table holds all collation data for a given collation ordering. +type Table struct { + Index Trie // main trie + + // expansion info + ExpandElem []uint32 + + // contraction info + ContractTries ContractTrieSet + ContractElem []uint32 + MaxContractLen int + VariableTop uint32 +} + +func (t *Table) AppendNext(w []Elem, b []byte) (res []Elem, n int) { + return t.appendNext(w, source{bytes: b}) +} + +func (t *Table) AppendNextString(w []Elem, s string) (res []Elem, n int) { + return t.appendNext(w, source{str: s}) +} + +func (t *Table) Start(p int, b []byte) int { + // TODO: implement + panic("not implemented") +} + +func (t *Table) StartString(p int, s string) int { + // TODO: implement + panic("not implemented") +} + +func (t *Table) Domain() []string { + // TODO: implement + panic("not implemented") +} + +func (t *Table) Top() uint32 { + return t.VariableTop +} + +type source struct { + str string + bytes []byte +} + +func (src *source) lookup(t *Table) (ce Elem, sz int) { + if src.bytes == nil { + return t.Index.lookupString(src.str) + } + return t.Index.lookup(src.bytes) +} + +func (src *source) tail(sz int) { + if src.bytes == nil { + src.str = src.str[sz:] + } else { + src.bytes = src.bytes[sz:] + } +} + +func (src *source) nfd(buf []byte, end int) []byte { + if src.bytes == nil { + return norm.NFD.AppendString(buf[:0], src.str[:end]) + } + return norm.NFD.Append(buf[:0], src.bytes[:end]...) +} + +func (src *source) rune() (r rune, sz int) { + if src.bytes == nil { + return utf8.DecodeRuneInString(src.str) + } + return utf8.DecodeRune(src.bytes) +} + +func (src *source) properties(f norm.Form) norm.Properties { + if src.bytes == nil { + return f.PropertiesString(src.str) + } + return f.Properties(src.bytes) +} + +// appendNext appends the weights corresponding to the next rune or +// contraction in s. If a contraction is matched to a discontinuous +// sequence of runes, the weights for the interstitial runes are +// appended as well. It returns a new slice that includes the appended +// weights and the number of bytes consumed from s. +func (t *Table) appendNext(w []Elem, src source) (res []Elem, n int) { + ce, sz := src.lookup(t) + tp := ce.ctype() + if tp == ceNormal { + if ce == 0 { + r, _ := src.rune() + const ( + hangulSize = 3 + firstHangul = 0xAC00 + lastHangul = 0xD7A3 + ) + if r >= firstHangul && r <= lastHangul { + // TODO: performance can be considerably improved here. + n = sz + var buf [16]byte // Used for decomposing Hangul. + for b := src.nfd(buf[:0], hangulSize); len(b) > 0; b = b[sz:] { + ce, sz = t.Index.lookup(b) + w = append(w, ce) + } + return w, n + } + ce = makeImplicitCE(implicitPrimary(r)) + } + w = append(w, ce) + } else if tp == ceExpansionIndex { + w = t.appendExpansion(w, ce) + } else if tp == ceContractionIndex { + n := 0 + src.tail(sz) + if src.bytes == nil { + w, n = t.matchContractionString(w, ce, src.str) + } else { + w, n = t.matchContraction(w, ce, src.bytes) + } + sz += n + } else if tp == ceDecompose { + // Decompose using NFKD and replace tertiary weights. + t1, t2 := splitDecompose(ce) + i := len(w) + nfkd := src.properties(norm.NFKD).Decomposition() + for p := 0; len(nfkd) > 0; nfkd = nfkd[p:] { + w, p = t.appendNext(w, source{bytes: nfkd}) + } + w[i] = w[i].updateTertiary(t1) + if i++; i < len(w) { + w[i] = w[i].updateTertiary(t2) + for i++; i < len(w); i++ { + w[i] = w[i].updateTertiary(maxTertiary) + } + } + } + return w, sz +} + +func (t *Table) appendExpansion(w []Elem, ce Elem) []Elem { + i := splitExpandIndex(ce) + n := int(t.ExpandElem[i]) + i++ + for _, ce := range t.ExpandElem[i : i+n] { + w = append(w, Elem(ce)) + } + return w +} + +func (t *Table) matchContraction(w []Elem, ce Elem, suffix []byte) ([]Elem, int) { + index, n, offset := splitContractIndex(ce) + + scan := t.ContractTries.scanner(index, n, suffix) + buf := [norm.MaxSegmentSize]byte{} + bufp := 0 + p := scan.scan(0) + + if !scan.done && p < len(suffix) && suffix[p] >= utf8.RuneSelf { + // By now we should have filtered most cases. + p0 := p + bufn := 0 + rune := norm.NFD.Properties(suffix[p:]) + p += rune.Size() + if rune.LeadCCC() != 0 { + prevCC := rune.TrailCCC() + // A gap may only occur in the last normalization segment. + // This also ensures that len(scan.s) < norm.MaxSegmentSize. + if end := norm.NFD.FirstBoundary(suffix[p:]); end != -1 { + scan.s = suffix[:p+end] + } + for p < len(suffix) && !scan.done && suffix[p] >= utf8.RuneSelf { + rune = norm.NFD.Properties(suffix[p:]) + if ccc := rune.LeadCCC(); ccc == 0 || prevCC >= ccc { + break + } + prevCC = rune.TrailCCC() + if pp := scan.scan(p); pp != p { + // Copy the interstitial runes for later processing. + bufn += copy(buf[bufn:], suffix[p0:p]) + if scan.pindex == pp { + bufp = bufn + } + p, p0 = pp, pp + } else { + p += rune.Size() + } + } + } + } + // Append weights for the matched contraction, which may be an expansion. + i, n := scan.result() + ce = Elem(t.ContractElem[i+offset]) + if ce.ctype() == ceNormal { + w = append(w, ce) + } else { + w = t.appendExpansion(w, ce) + } + // Append weights for the runes in the segment not part of the contraction. + for b, p := buf[:bufp], 0; len(b) > 0; b = b[p:] { + w, p = t.appendNext(w, source{bytes: b}) + } + return w, n +} + +// TODO: unify the two implementations. This is best done after first simplifying +// the algorithm taking into account the inclusion of both NFC and NFD forms +// in the table. +func (t *Table) matchContractionString(w []Elem, ce Elem, suffix string) ([]Elem, int) { + index, n, offset := splitContractIndex(ce) + + scan := t.ContractTries.scannerString(index, n, suffix) + buf := [norm.MaxSegmentSize]byte{} + bufp := 0 + p := scan.scan(0) + + if !scan.done && p < len(suffix) && suffix[p] >= utf8.RuneSelf { + // By now we should have filtered most cases. + p0 := p + bufn := 0 + rune := norm.NFD.PropertiesString(suffix[p:]) + p += rune.Size() + if rune.LeadCCC() != 0 { + prevCC := rune.TrailCCC() + // A gap may only occur in the last normalization segment. + // This also ensures that len(scan.s) < norm.MaxSegmentSize. + if end := norm.NFD.FirstBoundaryInString(suffix[p:]); end != -1 { + scan.s = suffix[:p+end] + } + for p < len(suffix) && !scan.done && suffix[p] >= utf8.RuneSelf { + rune = norm.NFD.PropertiesString(suffix[p:]) + if ccc := rune.LeadCCC(); ccc == 0 || prevCC >= ccc { + break + } + prevCC = rune.TrailCCC() + if pp := scan.scan(p); pp != p { + // Copy the interstitial runes for later processing. + bufn += copy(buf[bufn:], suffix[p0:p]) + if scan.pindex == pp { + bufp = bufn + } + p, p0 = pp, pp + } else { + p += rune.Size() + } + } + } + } + // Append weights for the matched contraction, which may be an expansion. + i, n := scan.result() + ce = Elem(t.ContractElem[i+offset]) + if ce.ctype() == ceNormal { + w = append(w, ce) + } else { + w = t.appendExpansion(w, ce) + } + // Append weights for the runes in the segment not part of the contraction. + for b, p := buf[:bufp], 0; len(b) > 0; b = b[p:] { + w, p = t.appendNext(w, source{bytes: b}) + } + return w, n +} diff --git a/vendor/golang.org/x/text/internal/colltab/trie.go b/vendor/golang.org/x/text/internal/colltab/trie.go new file mode 100644 index 0000000..a0eaa0d --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/trie.go @@ -0,0 +1,159 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The trie in this file is used to associate the first full character in an +// UTF-8 string to a collation element. All but the last byte in a UTF-8 byte +// sequence are used to lookup offsets in the index table to be used for the +// next byte. The last byte is used to index into a table of collation elements. +// For a full description, see go.text/collate/build/trie.go. + +package colltab + +const blockSize = 64 + +type Trie struct { + Index0 []uint16 // index for first byte (0xC0-0xFF) + Values0 []uint32 // index for first byte (0x00-0x7F) + Index []uint16 + Values []uint32 +} + +const ( + t1 = 0x00 // 0000 0000 + tx = 0x80 // 1000 0000 + t2 = 0xC0 // 1100 0000 + t3 = 0xE0 // 1110 0000 + t4 = 0xF0 // 1111 0000 + t5 = 0xF8 // 1111 1000 + t6 = 0xFC // 1111 1100 + te = 0xFE // 1111 1110 +) + +func (t *Trie) lookupValue(n uint16, b byte) Elem { + return Elem(t.Values[int(n)<<6+int(b)]) +} + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *Trie) lookup(s []byte) (v Elem, sz int) { + c0 := s[0] + switch { + case c0 < tx: + return Elem(t.Values0[c0]), 1 + case c0 < t2: + return 0, 1 + case c0 < t3: + if len(s) < 2 { + return 0, 0 + } + i := t.Index0[c0] + c1 := s[1] + if c1 < tx || t2 <= c1 { + return 0, 1 + } + return t.lookupValue(i, c1), 2 + case c0 < t4: + if len(s) < 3 { + return 0, 0 + } + i := t.Index0[c0] + c1 := s[1] + if c1 < tx || t2 <= c1 { + return 0, 1 + } + o := int(i)<<6 + int(c1) + i = t.Index[o] + c2 := s[2] + if c2 < tx || t2 <= c2 { + return 0, 2 + } + return t.lookupValue(i, c2), 3 + case c0 < t5: + if len(s) < 4 { + return 0, 0 + } + i := t.Index0[c0] + c1 := s[1] + if c1 < tx || t2 <= c1 { + return 0, 1 + } + o := int(i)<<6 + int(c1) + i = t.Index[o] + c2 := s[2] + if c2 < tx || t2 <= c2 { + return 0, 2 + } + o = int(i)<<6 + int(c2) + i = t.Index[o] + c3 := s[3] + if c3 < tx || t2 <= c3 { + return 0, 3 + } + return t.lookupValue(i, c3), 4 + } + // Illegal rune + return 0, 1 +} + +// The body of lookupString is a verbatim copy of that of lookup. +func (t *Trie) lookupString(s string) (v Elem, sz int) { + c0 := s[0] + switch { + case c0 < tx: + return Elem(t.Values0[c0]), 1 + case c0 < t2: + return 0, 1 + case c0 < t3: + if len(s) < 2 { + return 0, 0 + } + i := t.Index0[c0] + c1 := s[1] + if c1 < tx || t2 <= c1 { + return 0, 1 + } + return t.lookupValue(i, c1), 2 + case c0 < t4: + if len(s) < 3 { + return 0, 0 + } + i := t.Index0[c0] + c1 := s[1] + if c1 < tx || t2 <= c1 { + return 0, 1 + } + o := int(i)<<6 + int(c1) + i = t.Index[o] + c2 := s[2] + if c2 < tx || t2 <= c2 { + return 0, 2 + } + return t.lookupValue(i, c2), 3 + case c0 < t5: + if len(s) < 4 { + return 0, 0 + } + i := t.Index0[c0] + c1 := s[1] + if c1 < tx || t2 <= c1 { + return 0, 1 + } + o := int(i)<<6 + int(c1) + i = t.Index[o] + c2 := s[2] + if c2 < tx || t2 <= c2 { + return 0, 2 + } + o = int(i)<<6 + int(c2) + i = t.Index[o] + c3 := s[3] + if c3 < tx || t2 <= c3 { + return 0, 3 + } + return t.lookupValue(i, c3), 4 + } + // Illegal rune + return 0, 1 +} diff --git a/vendor/golang.org/x/text/internal/colltab/trie_test.go b/vendor/golang.org/x/text/internal/colltab/trie_test.go new file mode 100644 index 0000000..b056a81 --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/trie_test.go @@ -0,0 +1,106 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +import ( + "testing" +) + +// We take the smallest, largest and an arbitrary value for each +// of the UTF-8 sequence lengths. +var testRunes = []rune{ + 0x01, 0x0C, 0x7F, // 1-byte sequences + 0x80, 0x100, 0x7FF, // 2-byte sequences + 0x800, 0x999, 0xFFFF, // 3-byte sequences + 0x10000, 0x10101, 0x10FFFF, // 4-byte sequences + 0x200, 0x201, 0x202, 0x210, 0x215, // five entries in one sparse block +} + +// Test cases for illegal runes. +type trietest struct { + size int + bytes []byte +} + +var tests = []trietest{ + // illegal runes + {1, []byte{0x80}}, + {1, []byte{0xFF}}, + {1, []byte{t2, tx - 1}}, + {1, []byte{t2, t2}}, + {2, []byte{t3, tx, tx - 1}}, + {2, []byte{t3, tx, t2}}, + {1, []byte{t3, tx - 1, tx}}, + {3, []byte{t4, tx, tx, tx - 1}}, + {3, []byte{t4, tx, tx, t2}}, + {1, []byte{t4, t2, tx, tx - 1}}, + {2, []byte{t4, tx, t2, tx - 1}}, + + // short runes + {0, []byte{t2}}, + {0, []byte{t3, tx}}, + {0, []byte{t4, tx, tx}}, + + // we only support UTF-8 up to utf8.UTFMax bytes (4 bytes) + {1, []byte{t5, tx, tx, tx, tx}}, + {1, []byte{t6, tx, tx, tx, tx, tx}}, +} + +func TestLookupTrie(t *testing.T) { + for i, r := range testRunes { + b := []byte(string(r)) + v, sz := testTrie.lookup(b) + if int(v) != i { + t.Errorf("lookup(%U): found value %#x, expected %#x", r, v, i) + } + if sz != len(b) { + t.Errorf("lookup(%U): found size %d, expected %d", r, sz, len(b)) + } + } + for i, tt := range tests { + v, sz := testTrie.lookup(tt.bytes) + if int(v) != 0 { + t.Errorf("lookup of illegal rune, case %d: found value %#x, expected 0", i, v) + } + if sz != tt.size { + t.Errorf("lookup of illegal rune, case %d: found size %d, expected %d", i, sz, tt.size) + } + } +} + +// test data is taken from exp/collate/locale/build/trie_test.go +var testValues = [832]uint32{ + 0x000c: 0x00000001, + 0x007f: 0x00000002, + 0x00c0: 0x00000003, + 0x0100: 0x00000004, + 0x0140: 0x0000000c, 0x0141: 0x0000000d, 0x0142: 0x0000000e, + 0x0150: 0x0000000f, + 0x0155: 0x00000010, + 0x01bf: 0x00000005, + 0x01c0: 0x00000006, + 0x0219: 0x00000007, + 0x027f: 0x00000008, + 0x0280: 0x00000009, + 0x02c1: 0x0000000a, + 0x033f: 0x0000000b, +} + +var testLookup = [640]uint16{ + 0x0e0: 0x05, 0x0e6: 0x06, + 0x13f: 0x07, + 0x140: 0x08, 0x144: 0x09, + 0x190: 0x03, + 0x1ff: 0x0a, + 0x20f: 0x05, + 0x242: 0x01, 0x244: 0x02, + 0x248: 0x03, + 0x25f: 0x04, + 0x260: 0x01, + 0x26f: 0x02, + 0x270: 0x04, 0x274: 0x06, +} + +var testTrie = Trie{testLookup[6*blockSize:], testValues[:], testLookup[:], testValues[:]} diff --git a/vendor/golang.org/x/text/internal/colltab/weighter.go b/vendor/golang.org/x/text/internal/colltab/weighter.go new file mode 100644 index 0000000..f1ec45f --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/weighter.go @@ -0,0 +1,31 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab // import "golang.org/x/text/internal/colltab" + +// A Weighter can be used as a source for Collator and Searcher. +type Weighter interface { + // Start finds the start of the segment that includes position p. + Start(p int, b []byte) int + + // StartString finds the start of the segment that includes position p. + StartString(p int, s string) int + + // AppendNext appends Elems to buf corresponding to the longest match + // of a single character or contraction from the start of s. + // It returns the new buf and the number of bytes consumed. + AppendNext(buf []Elem, s []byte) (ce []Elem, n int) + + // AppendNextString appends Elems to buf corresponding to the longest match + // of a single character or contraction from the start of s. + // It returns the new buf and the number of bytes consumed. + AppendNextString(buf []Elem, s string) (ce []Elem, n int) + + // Domain returns a slice of all single characters and contractions for which + // collation elements are defined in this table. + Domain() []string + + // Top returns the highest variable primary value. + Top() uint32 +} diff --git a/vendor/golang.org/x/text/internal/colltab/weighter_test.go b/vendor/golang.org/x/text/internal/colltab/weighter_test.go new file mode 100644 index 0000000..b5f8487 --- /dev/null +++ b/vendor/golang.org/x/text/internal/colltab/weighter_test.go @@ -0,0 +1,42 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package colltab + +// testWeighter is a simple Weighter that returns weights from a user-defined map. +type testWeighter map[string][]Elem + +func (t testWeighter) Start(int, []byte) int { return 0 } +func (t testWeighter) StartString(int, string) int { return 0 } +func (t testWeighter) Domain() []string { return nil } +func (t testWeighter) Top() uint32 { return 0 } + +// maxContractBytes is the maximum length of any key in the map. +const maxContractBytes = 10 + +func (t testWeighter) AppendNext(buf []Elem, s []byte) ([]Elem, int) { + n := len(s) + if n > maxContractBytes { + n = maxContractBytes + } + for i := n; i > 0; i-- { + if e, ok := t[string(s[:i])]; ok { + return append(buf, e...), i + } + } + panic("incomplete testWeighter: could not find " + string(s)) +} + +func (t testWeighter) AppendNextString(buf []Elem, s string) ([]Elem, int) { + n := len(s) + if n > maxContractBytes { + n = maxContractBytes + } + for i := n; i > 0; i-- { + if e, ok := t[s[:i]]; ok { + return append(buf, e...), i + } + } + panic("incomplete testWeighter: could not find " + s) +} diff --git a/vendor/golang.org/x/text/internal/export/README b/vendor/golang.org/x/text/internal/export/README new file mode 100644 index 0000000..350b93d --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/README @@ -0,0 +1,4 @@ +The export directory contains packages that are generated using the x/text +infrastructure, but live elsewhere. +At some point we can expose some of the infrastructure, but for now this +is not done. diff --git a/vendor/golang.org/x/text/internal/export/idna/common_test.go b/vendor/golang.org/x/text/internal/export/idna/common_test.go new file mode 100644 index 0000000..0b07c12 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/common_test.go @@ -0,0 +1,55 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package idna + +// This file contains code that is common between the generation code and the +// package's test code. + +import ( + "log" + + "golang.org/x/text/internal/ucd" +) + +func catFromEntry(p *ucd.Parser) (cat category) { + r := p.Rune(0) + switch s := p.String(1); s { + case "valid": + cat = valid + case "disallowed": + cat = disallowed + case "disallowed_STD3_valid": + cat = disallowedSTD3Valid + case "disallowed_STD3_mapped": + cat = disallowedSTD3Mapped + case "mapped": + cat = mapped + case "deviation": + cat = deviation + case "ignored": + cat = ignored + default: + log.Fatalf("%U: Unknown category %q", r, s) + } + if s := p.String(3); s != "" { + if cat != valid { + log.Fatalf(`%U: %s defined for %q; want "valid"`, r, s, p.String(1)) + } + switch s { + case "NV8": + cat = validNV8 + case "XV8": + cat = validXV8 + default: + log.Fatalf("%U: Unexpected exception %q", r, s) + } + } + return cat +} + +var joinType = map[string]info{ + "L": joiningL, + "D": joiningD, + "T": joiningT, + "R": joiningR, +} diff --git a/vendor/golang.org/x/text/internal/export/idna/example_test.go b/vendor/golang.org/x/text/internal/export/idna/example_test.go new file mode 100644 index 0000000..6e6b872 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/example_test.go @@ -0,0 +1,68 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna_test + +import ( + "fmt" + + "golang.org/x/text/internal/export/idna" +) + +func ExampleProfile() { + // Raw Punycode has no restrictions and does no mappings. + fmt.Println(idna.ToASCII("")) + fmt.Println(idna.ToASCII("*.faß.com")) + fmt.Println(idna.Punycode.ToASCII("*.faß.com")) + + // Rewrite IDN for lookup. This (currently) uses transitional mappings to + // find a balance between IDNA2003 and IDNA2008 compatibility. + fmt.Println(idna.Lookup.ToASCII("")) + fmt.Println(idna.Lookup.ToASCII("www.faß.com")) + + // Convert an IDN to ASCII for registration purposes. This changes the + // encoding, but reports an error if the input was illformed. + fmt.Println(idna.Registration.ToASCII("")) + fmt.Println(idna.Registration.ToASCII("www.faß.com")) + + // Output: + // <nil> + // *.xn--fa-hia.com <nil> + // *.xn--fa-hia.com <nil> + // <nil> + // www.fass.com <nil> + // idna: invalid label "" + // www.xn--fa-hia.com <nil> +} + +func ExampleNew() { + var p *idna.Profile + + // Raw Punycode has no restrictions and does no mappings. + p = idna.New() + fmt.Println(p.ToASCII("*.faß.com")) + + // Do mappings. Note that star is not allowed in a DNS lookup. + p = idna.New( + idna.MapForLookup(), + idna.Transitional(true)) // Map ß -> ss + fmt.Println(p.ToASCII("*.faß.com")) + + // Lookup for registration. Also does not allow '*'. + p = idna.New(idna.ValidateForRegistration()) + fmt.Println(p.ToUnicode("*.faß.com")) + + // Set up a profile maps for lookup, but allows wild cards. + p = idna.New( + idna.MapForLookup(), + idna.Transitional(true), // Map ß -> ss + idna.StrictDomainName(false)) // Set more permissive ASCII rules. + fmt.Println(p.ToASCII("*.faß.com")) + + // Output: + // *.xn--fa-hia.com <nil> + // *.fass.com idna: disallowed rune U+002A + // *.faß.com idna: disallowed rune U+002A + // *.fass.com <nil> +} diff --git a/vendor/golang.org/x/text/internal/export/idna/gen.go b/vendor/golang.org/x/text/internal/export/idna/gen.go new file mode 100644 index 0000000..27a5e1c --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/gen.go @@ -0,0 +1,259 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// This program generates the trie for idna operations. The Unicode casing +// algorithm requires the lookup of various properties and mappings for each +// rune. The table generated by this generator combines several of the most +// frequently used of these into a single trie so that they can be accessed +// with a single lookup. +package main + +import ( + "fmt" + "io" + "log" + "unicode" + "unicode/utf8" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/triegen" + "golang.org/x/text/internal/ucd" +) + +func main() { + gen.Init() + genTables() + gen.Repackage("gen_trieval.go", "trieval.go", "idna") + gen.Repackage("gen_common.go", "common_test.go", "idna") +} + +var runes = map[rune]info{} + +func genTables() { + t := triegen.NewTrie("idna") + + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + + const cccVirama = 9 + if p.Int(ucd.CanonicalCombiningClass) == cccVirama { + runes[p.Rune(0)] = viramaModifier + } + switch { + case unicode.In(r, unicode.Mark): + runes[r] |= modifier + } + }) + + ucd.Parse(gen.OpenUCDFile("extracted/DerivedJoiningType.txt"), func(p *ucd.Parser) { + switch v := p.String(1); v { + case "L", "D", "T", "R": + runes[p.Rune(0)] |= joinType[v] << joinShift + } + }) + + ucd.Parse(gen.OpenUnicodeFile("idna", "", "IdnaMappingTable.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + + // The mappings table explicitly defines surrogates as invalid. + if !utf8.ValidRune(r) { + return + } + + cat := catFromEntry(p) + isMapped := cat == mapped || cat == disallowedSTD3Mapped || cat == deviation + if !isMapped { + // Only include additional category information for non-mapped + // runes. The additional information is only used after mapping and + // the bits would clash with mapping information. + // TODO: it would be possible to inline this data and avoid + // additional lookups. This is quite tedious, though, so let's first + // see if we need this. + cat |= category(runes[r]) + } + + s := string(p.Runes(2)) + if s != "" && !isMapped { + log.Fatalf("%U: Mapping with non-mapping category %d", r, cat) + } + t.Insert(r, uint64(makeEntry(r, s))+uint64(cat)) + }) + + w := gen.NewCodeWriter() + defer w.WriteGoFile("tables.go", "idna") + + gen.WriteUnicodeVersion(w) + + w.WriteVar("mappings", string(mappings)) + w.WriteVar("xorData", string(xorData)) + + sz, err := t.Gen(w, triegen.Compact(&normCompacter{})) + if err != nil { + log.Fatal(err) + } + w.Size += sz +} + +var ( + // mappings contains replacement strings for mapped runes, each prefixed + // with a byte containing the length of the following string. + mappings = []byte{} + mapCache = map[string]int{} + + // xorData is like mappings, except that it contains XOR data. + // We split these two tables so that we don't get an overflow. + xorData = []byte{} + xorCache = map[string]int{} +) + +// makeEntry creates a trie entry. +func makeEntry(r rune, mapped string) info { + orig := string(r) + + if len(orig) != len(mapped) { + // Store the mapped value as is in the mappings table. + index := len(mappings) + if x, ok := mapCache[mapped]; ok { + index = x + } else { + mapCache[mapped] = index + mappings = append(mappings, byte(len(mapped))) + mappings = append(mappings, mapped...) + } + return info(index) << indexShift + } + + // Create per-byte XOR mask. + var b []byte + for i := 0; i < len(orig); i++ { + b = append(b, orig[i]^mapped[i]) + } + + // Remove leading 0 bytes, but keep at least one byte. + for ; len(b) > 1 && b[0] == 0; b = b[1:] { + } + + if len(b) == 1 { + return xorBit | inlineXOR | info(b[0])<<indexShift + } + mapped = string(b) + + // Store the mapped value as is in the mappings table. + index := len(xorData) + if x, ok := xorCache[mapped]; ok { + index = x + } else { + xorCache[mapped] = index + xorData = append(xorData, byte(len(mapped))) + xorData = append(xorData, mapped...) + } + return xorBit | info(index)<<indexShift +} + +// The following code implements a triegen.Compacter that was originally +// designed for normalization. The IDNA table has some similarities with the +// norm table. Using this compacter, together with the XOR pattern approach, +// reduces the table size by roughly 100K. It can probably be compressed further +// by also including elements of the compacter used by cases, but for now it is +// good enough. + +const maxSparseEntries = 16 + +type normCompacter struct { + sparseBlocks [][]uint64 + sparseOffset []uint16 + sparseCount int +} + +func mostFrequentStride(a []uint64) int { + counts := make(map[int]int) + var v int + for _, x := range a { + if stride := int(x) - v; v != 0 && stride >= 0 { + counts[stride]++ + } + v = int(x) + } + var maxs, maxc int + for stride, cnt := range counts { + if cnt > maxc || (cnt == maxc && stride < maxs) { + maxs, maxc = stride, cnt + } + } + return maxs +} + +func countSparseEntries(a []uint64) int { + stride := mostFrequentStride(a) + var v, count int + for _, tv := range a { + if int(tv)-v != stride { + if tv != 0 { + count++ + } + } + v = int(tv) + } + return count +} + +func (c *normCompacter) Size(v []uint64) (sz int, ok bool) { + if n := countSparseEntries(v); n <= maxSparseEntries { + return (n+1)*4 + 2, true + } + return 0, false +} + +func (c *normCompacter) Store(v []uint64) uint32 { + h := uint32(len(c.sparseOffset)) + c.sparseBlocks = append(c.sparseBlocks, v) + c.sparseOffset = append(c.sparseOffset, uint16(c.sparseCount)) + c.sparseCount += countSparseEntries(v) + 1 + return h +} + +func (c *normCompacter) Handler() string { + return "idnaSparse.lookup" +} + +func (c *normCompacter) Print(w io.Writer) (retErr error) { + p := func(f string, x ...interface{}) { + if _, err := fmt.Fprintf(w, f, x...); retErr == nil && err != nil { + retErr = err + } + } + + ls := len(c.sparseBlocks) + p("// idnaSparseOffset: %d entries, %d bytes\n", ls, ls*2) + p("var idnaSparseOffset = %#v\n\n", c.sparseOffset) + + ns := c.sparseCount + p("// idnaSparseValues: %d entries, %d bytes\n", ns, ns*4) + p("var idnaSparseValues = [%d]valueRange {", ns) + for i, b := range c.sparseBlocks { + p("\n// Block %#x, offset %#x", i, c.sparseOffset[i]) + var v int + stride := mostFrequentStride(b) + n := countSparseEntries(b) + p("\n{value:%#04x,lo:%#02x},", stride, uint8(n)) + for i, nv := range b { + if int(nv)-v != stride { + if v != 0 { + p(",hi:%#02x},", 0x80+i-1) + } + if nv != 0 { + p("\n{value:%#04x,lo:%#02x", nv, 0x80+i) + } + } + v = int(nv) + } + if v != 0 { + p(",hi:%#02x},", 0x80+len(b)-1) + } + } + p("\n}\n\n") + return +} diff --git a/vendor/golang.org/x/text/internal/export/idna/gen_common.go b/vendor/golang.org/x/text/internal/export/idna/gen_common.go new file mode 100644 index 0000000..360a02b --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/gen_common.go @@ -0,0 +1,59 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This file contains code that is common between the generation code and the +// package's test code. + +import ( + "log" + + "golang.org/x/text/internal/ucd" +) + +func catFromEntry(p *ucd.Parser) (cat category) { + r := p.Rune(0) + switch s := p.String(1); s { + case "valid": + cat = valid + case "disallowed": + cat = disallowed + case "disallowed_STD3_valid": + cat = disallowedSTD3Valid + case "disallowed_STD3_mapped": + cat = disallowedSTD3Mapped + case "mapped": + cat = mapped + case "deviation": + cat = deviation + case "ignored": + cat = ignored + default: + log.Fatalf("%U: Unknown category %q", r, s) + } + if s := p.String(3); s != "" { + if cat != valid { + log.Fatalf(`%U: %s defined for %q; want "valid"`, r, s, p.String(1)) + } + switch s { + case "NV8": + cat = validNV8 + case "XV8": + cat = validXV8 + default: + log.Fatalf("%U: Unexpected exception %q", r, s) + } + } + return cat +} + +var joinType = map[string]info{ + "L": joiningL, + "D": joiningD, + "T": joiningT, + "R": joiningR, +} diff --git a/vendor/golang.org/x/text/internal/export/idna/gen_test.go b/vendor/golang.org/x/text/internal/export/idna/gen_test.go new file mode 100644 index 0000000..60602ec --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/gen_test.go @@ -0,0 +1,82 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +import ( + "testing" + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/internal/ucd" +) + +func TestTables(t *testing.T) { + testtext.SkipIfNotLong(t) + + lookup := func(r rune) info { + v, _ := trie.lookupString(string(r)) + return info(v) + } + + ucd.Parse(gen.OpenUnicodeFile("idna", "", "IdnaMappingTable.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + if got, want := x.category(), catFromEntry(p); got != want { + t.Errorf("%U:category: got %x; want %x", r, got, want) + } + + mapped := false + switch p.String(1) { + case "mapped", "disallowed_STD3_mapped", "deviation": + mapped = true + } + if x.isMapped() != mapped { + t.Errorf("%U:isMapped: got %v; want %v", r, x.isMapped(), mapped) + } + if !mapped { + return + } + want := string(p.Runes(2)) + got := string(x.appendMapping(nil, string(r))) + if got != want { + t.Errorf("%U:mapping: got %+q; want %+q", r, got, want) + } + + if x.isMapped() { + return + } + wantMark := unicode.In(r, unicode.Mark) + gotMark := x.isModifier() + if gotMark != wantMark { + t.Errorf("IsMark(%U) = %v; want %v", r, gotMark, wantMark) + } + }) + + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + got := x.isViramaModifier() + + const cccVirama = 9 + want := p.Int(ucd.CanonicalCombiningClass) == cccVirama + if got != want { + t.Errorf("IsVirama(%U) = %v; want %v", r, got, want) + } + }) + + ucd.Parse(gen.OpenUCDFile("extracted/DerivedJoiningType.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + if x.isMapped() { + return + } + got := x.joinType() + want := joinType[p.String(1)] + if got != want { + t.Errorf("JoinType(%U) = %x; want %x", r, got, want) + } + }) +} diff --git a/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go b/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go new file mode 100644 index 0000000..3a32296 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go @@ -0,0 +1,118 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This file contains definitions for interpreting the trie value of the idna +// trie generated by "go run gen*.go". It is shared by both the generator +// program and the resultant package. Sharing is achieved by the generator +// copying gen_trieval.go to trieval.go and changing what's above this comment. + +// info holds information from the IDNA mapping table for a single rune. It is +// the value returned by a trie lookup. In most cases, all information fits in +// a 16-bit value. For mappings, this value may contain an index into a slice +// with the mapped string. Such mappings can consist of the actual mapped value +// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the +// input rune. This technique is used by the cases packages and reduces the +// table size significantly. +// +// The per-rune values have the following format: +// +// if mapped { +// if inlinedXOR { +// 15..13 inline XOR marker +// 12..11 unused +// 10..3 inline XOR mask +// } else { +// 15..3 index into xor or mapping table +// } +// } else { +// 15..13 unused +// 12 modifier (including virama) +// 11 virama modifier +// 10..8 joining type +// 7..3 category type +// } +// 2 use xor pattern +// 1..0 mapped category +// +// See the definitions below for a more detailed description of the various +// bits. +type info uint16 + +const ( + catSmallMask = 0x3 + catBigMask = 0xF8 + indexShift = 3 + xorBit = 0x4 // interpret the index as an xor pattern + inlineXOR = 0xE000 // These bits are set if the XOR pattern is inlined. + + joinShift = 8 + joinMask = 0x07 + + viramaModifier = 0x0800 + modifier = 0x1000 +) + +// A category corresponds to a category defined in the IDNA mapping table. +type category uint16 + +const ( + unknown category = 0 // not defined currently in unicode. + mapped category = 1 + disallowedSTD3Mapped category = 2 + deviation category = 3 +) + +const ( + valid category = 0x08 + validNV8 category = 0x18 + validXV8 category = 0x28 + disallowed category = 0x40 + disallowedSTD3Valid category = 0x80 + ignored category = 0xC0 +) + +// join types and additional rune information +const ( + joiningL = (iota + 1) + joiningD + joiningT + joiningR + + //the following types are derived during processing + joinZWJ + joinZWNJ + joinVirama + numJoinTypes +) + +func (c info) isMapped() bool { + return c&0x3 != 0 +} + +func (c info) category() category { + small := c & catSmallMask + if small != 0 { + return category(small) + } + return category(c & catBigMask) +} + +func (c info) joinType() info { + if c.isMapped() { + return 0 + } + return (c >> joinShift) & joinMask +} + +func (c info) isModifier() bool { + return c&(modifier|catSmallMask) == modifier +} + +func (c info) isViramaModifier() bool { + return c&(viramaModifier|catSmallMask) == viramaModifier +} diff --git a/vendor/golang.org/x/text/internal/export/idna/idna.go b/vendor/golang.org/x/text/internal/export/idna/idna.go new file mode 100644 index 0000000..3184fbb --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/idna.go @@ -0,0 +1,665 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go gen_trieval.go gen_common.go + +// Package idna implements IDNA2008 using the compatibility processing +// defined by UTS (Unicode Technical Standard) #46, which defines a standard to +// deal with the transition from IDNA2003. +// +// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC +// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894. +// UTS #46 is defined in http://www.unicode.org/reports/tr46. +// See http://unicode.org/cldr/utility/idna.jsp for a visualization of the +// differences between these two standards. +package idna // import "golang.org/x/text/internal/export/idna" + +import ( + "fmt" + "strings" + "unicode/utf8" + + "golang.org/x/text/secure/bidirule" + "golang.org/x/text/unicode/norm" +) + +// NOTE: Unlike common practice in Go APIs, the functions will return a +// sanitized domain name in case of errors. Browsers sometimes use a partially +// evaluated string as lookup. +// TODO: the current error handling is, in my opinion, the least opinionated. +// Other strategies are also viable, though: +// Option 1) Return an empty string in case of error, but allow the user to +// specify explicitly which errors to ignore. +// Option 2) Return the partially evaluated string if it is itself a valid +// string, otherwise return the empty string in case of error. +// Option 3) Option 1 and 2. +// Option 4) Always return an empty string for now and implement Option 1 as +// needed, and document that the return string may not be empty in case of +// error in the future. +// I think Option 1 is best, but it is quite opinionated. + +// ToASCII is a wrapper for Punycode.ToASCII. +func ToASCII(s string) (string, error) { + return Punycode.process(s, true) +} + +// ToUnicode is a wrapper for Punycode.ToUnicode. +func ToUnicode(s string) (string, error) { + return Punycode.process(s, false) +} + +// An Option configures a Profile at creation time. +type Option func(*options) + +// Transitional sets a Profile to use the Transitional mapping as defined in UTS +// #46. This will cause, for example, "ß" to be mapped to "ss". Using the +// transitional mapping provides a compromise between IDNA2003 and IDNA2008 +// compatibility. It is used by most browsers when resolving domain names. This +// option is only meaningful if combined with MapForLookup. +func Transitional(transitional bool) Option { + return func(o *options) { o.transitional = true } +} + +// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts +// are longer than allowed by the RFC. +func VerifyDNSLength(verify bool) Option { + return func(o *options) { o.verifyDNSLength = verify } +} + +// ValidateLabels sets whether to check the mandatory label validation criteria +// as defined in Section 5.4 of RFC 5891. This includes testing for correct use +// of hyphens ('-'), normalization, validity of runes, and the context rules. +func ValidateLabels(enable bool) Option { + return func(o *options) { + // Don't override existing mappings, but set one that at least checks + // normalization if it is not set. + if o.mapping == nil && enable { + o.mapping = normalize + } + o.trie = trie + o.validateLabels = enable + o.fromPuny = validateFromPunycode + } +} + +// StrictDomainName limits the set of permissable ASCII characters to those +// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the +// hyphen). This is set by default for MapForLookup and ValidateForRegistration. +// +// This option is useful, for instance, for browsers that allow characters +// outside this range, for example a '_' (U+005F LOW LINE). See +// http://www.rfc-editor.org/std/std3.txt for more details This option +// corresponds to the UseSTD3ASCIIRules option in UTS #46. +func StrictDomainName(use bool) Option { + return func(o *options) { + o.trie = trie + o.useSTD3Rules = use + o.fromPuny = validateFromPunycode + } +} + +// NOTE: the following options pull in tables. The tables should not be linked +// in as long as the options are not used. + +// BidiRule enables the Bidi rule as defined in RFC 5893. Any application +// that relies on proper validation of labels should include this rule. +func BidiRule() Option { + return func(o *options) { o.bidirule = bidirule.ValidString } +} + +// ValidateForRegistration sets validation options to verify that a given IDN is +// properly formatted for registration as defined by Section 4 of RFC 5891. +func ValidateForRegistration() Option { + return func(o *options) { + o.mapping = validateRegistration + StrictDomainName(true)(o) + ValidateLabels(true)(o) + VerifyDNSLength(true)(o) + BidiRule()(o) + } +} + +// MapForLookup sets validation and mapping options such that a given IDN is +// transformed for domain name lookup according to the requirements set out in +// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894, +// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option +// to add this check. +// +// The mappings include normalization and mapping case, width and other +// compatibility mappings. +func MapForLookup() Option { + return func(o *options) { + o.mapping = validateAndMap + StrictDomainName(true)(o) + ValidateLabels(true)(o) + } +} + +type options struct { + transitional bool + useSTD3Rules bool + validateLabels bool + verifyDNSLength bool + + trie *idnaTrie + + // fromPuny calls validation rules when converting A-labels to U-labels. + fromPuny func(p *Profile, s string) error + + // mapping implements a validation and mapping step as defined in RFC 5895 + // or UTS 46, tailored to, for example, domain registration or lookup. + mapping func(p *Profile, s string) (string, error) + + // bidirule, if specified, checks whether s conforms to the Bidi Rule + // defined in RFC 5893. + bidirule func(s string) bool +} + +// A Profile defines the configuration of a IDNA mapper. +type Profile struct { + options +} + +func apply(o *options, opts []Option) { + for _, f := range opts { + f(o) + } +} + +// New creates a new Profile. +// +// With no options, the returned Profile is the most permissive and equals the +// Punycode Profile. Options can be passed to further restrict the Profile. The +// MapForLookup and ValidateForRegistration options set a collection of options, +// for lookup and registration purposes respectively, which can be tailored by +// adding more fine-grained options, where later options override earlier +// options. +func New(o ...Option) *Profile { + p := &Profile{} + apply(&p.options, o) + return p +} + +// ToASCII converts a domain or domain label to its ASCII form. For example, +// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and +// ToASCII("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToASCII(s string) (string, error) { + return p.process(s, true) +} + +// ToUnicode converts a domain or domain label to its Unicode form. For example, +// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and +// ToUnicode("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToUnicode(s string) (string, error) { + pp := *p + pp.transitional = false + return pp.process(s, false) +} + +// String reports a string with a description of the profile for debugging +// purposes. The string format may change with different versions. +func (p *Profile) String() string { + s := "" + if p.transitional { + s = "Transitional" + } else { + s = "NonTransitional" + } + if p.useSTD3Rules { + s += ":UseSTD3Rules" + } + if p.validateLabels { + s += ":ValidateLabels" + } + if p.verifyDNSLength { + s += ":VerifyDNSLength" + } + return s +} + +var ( + // Punycode is a Profile that does raw punycode processing with a minimum + // of validation. + Punycode *Profile = punycode + + // Lookup is the recommended profile for looking up domain names, according + // to Section 5 of RFC 5891. The exact configuration of this profile may + // change over time. + Lookup *Profile = lookup + + // Display is the recommended profile for displaying domain names. + // The configuration of this profile may change over time. + Display *Profile = display + + // Registration is the recommended profile for checking whether a given + // IDN is valid for registration, according to Section 4 of RFC 5891. + Registration *Profile = registration + + punycode = &Profile{} + lookup = &Profile{options{ + transitional: true, + useSTD3Rules: true, + validateLabels: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + display = &Profile{options{ + useSTD3Rules: true, + validateLabels: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + registration = &Profile{options{ + useSTD3Rules: true, + validateLabels: true, + verifyDNSLength: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateRegistration, + bidirule: bidirule.ValidString, + }} + + // TODO: profiles + // Register: recommended for approving domain names: don't do any mappings + // but rather reject on invalid input. Bundle or block deviation characters. +) + +type labelError struct{ label, code_ string } + +func (e labelError) code() string { return e.code_ } +func (e labelError) Error() string { + return fmt.Sprintf("idna: invalid label %q", e.label) +} + +type runeError rune + +func (e runeError) code() string { return "P1" } +func (e runeError) Error() string { + return fmt.Sprintf("idna: disallowed rune %U", e) +} + +// process implements the algorithm described in section 4 of UTS #46, +// see http://www.unicode.org/reports/tr46. +func (p *Profile) process(s string, toASCII bool) (string, error) { + var err error + if p.mapping != nil { + s, err = p.mapping(p, s) + } + // Remove leading empty labels. + for ; len(s) > 0 && s[0] == '.'; s = s[1:] { + } + // It seems like we should only create this error on ToASCII, but the + // UTS 46 conformance tests suggests we should always check this. + if err == nil && p.verifyDNSLength && s == "" { + err = &labelError{s, "A4"} + } + labels := labelIter{orig: s} + for ; !labels.done(); labels.next() { + label := labels.label() + if label == "" { + // Empty labels are not okay. The label iterator skips the last + // label if it is empty. + if err == nil && p.verifyDNSLength { + err = &labelError{s, "A4"} + } + continue + } + if strings.HasPrefix(label, acePrefix) { + u, err2 := decode(label[len(acePrefix):]) + if err2 != nil { + if err == nil { + err = err2 + } + // Spec says keep the old label. + continue + } + labels.set(u) + if err == nil && p.validateLabels { + err = p.fromPuny(p, u) + } + if err == nil { + // This should be called on NonTransitional, according to the + // spec, but that currently does not have any effect. Use the + // original profile to preserve options. + err = p.validateLabel(u) + } + } else if err == nil { + err = p.validateLabel(label) + } + } + if toASCII { + for labels.reset(); !labels.done(); labels.next() { + label := labels.label() + if !ascii(label) { + a, err2 := encode(acePrefix, label) + if err == nil { + err = err2 + } + label = a + labels.set(a) + } + n := len(label) + if p.verifyDNSLength && err == nil && (n == 0 || n > 63) { + err = &labelError{label, "A4"} + } + } + } + s = labels.result() + if toASCII && p.verifyDNSLength && err == nil { + // Compute the length of the domain name minus the root label and its dot. + n := len(s) + if n > 0 && s[n-1] == '.' { + n-- + } + if len(s) < 1 || n > 253 { + err = &labelError{s, "A4"} + } + } + return s, err +} + +func normalize(p *Profile, s string) (string, error) { + return norm.NFC.String(s), nil +} + +func validateRegistration(p *Profile, s string) (string, error) { + if !norm.NFC.IsNormalString(s) { + return s, &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + // TODO: handle the NV8 defined in the Unicode idna data set to allow + // for strict conformance to IDNA2008. + case valid, deviation: + case disallowed, mapped, unknown, ignored: + r, _ := utf8.DecodeRuneInString(s[i:]) + return s, runeError(r) + } + i += sz + } + return s, nil +} + +func validateAndMap(p *Profile, s string) (string, error) { + var ( + err error + b []byte + k int + ) + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + start := i + i += sz + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + case valid: + continue + case disallowed: + if err == nil { + r, _ := utf8.DecodeRuneInString(s[start:]) + err = runeError(r) + } + continue + case mapped, deviation: + b = append(b, s[k:start]...) + b = info(v).appendMapping(b, s[start:i]) + case ignored: + b = append(b, s[k:start]...) + // drop the rune + case unknown: + b = append(b, s[k:start]...) + b = append(b, "\ufffd"...) + } + k = i + } + if k == 0 { + // No changes so far. + s = norm.NFC.String(s) + } else { + b = append(b, s[k:]...) + if norm.NFC.QuickSpan(b) != len(b) { + b = norm.NFC.Bytes(b) + } + // TODO: the punycode converters require strings as input. + s = string(b) + } + return s, err +} + +// A labelIter allows iterating over domain name labels. +type labelIter struct { + orig string + slice []string + curStart int + curEnd int + i int +} + +func (l *labelIter) reset() { + l.curStart = 0 + l.curEnd = 0 + l.i = 0 +} + +func (l *labelIter) done() bool { + return l.curStart >= len(l.orig) +} + +func (l *labelIter) result() string { + if l.slice != nil { + return strings.Join(l.slice, ".") + } + return l.orig +} + +func (l *labelIter) label() string { + if l.slice != nil { + return l.slice[l.i] + } + p := strings.IndexByte(l.orig[l.curStart:], '.') + l.curEnd = l.curStart + p + if p == -1 { + l.curEnd = len(l.orig) + } + return l.orig[l.curStart:l.curEnd] +} + +// next sets the value to the next label. It skips the last label if it is empty. +func (l *labelIter) next() { + l.i++ + if l.slice != nil { + if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" { + l.curStart = len(l.orig) + } + } else { + l.curStart = l.curEnd + 1 + if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' { + l.curStart = len(l.orig) + } + } +} + +func (l *labelIter) set(s string) { + if l.slice == nil { + l.slice = strings.Split(l.orig, ".") + } + l.slice[l.i] = s +} + +// acePrefix is the ASCII Compatible Encoding prefix. +const acePrefix = "xn--" + +func (p *Profile) simplify(cat category) category { + switch cat { + case disallowedSTD3Mapped: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = mapped + } + case disallowedSTD3Valid: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = valid + } + case deviation: + if !p.transitional { + cat = valid + } + case validNV8, validXV8: + // TODO: handle V2008 + cat = valid + } + return cat +} + +func validateFromPunycode(p *Profile, s string) error { + if !norm.NFC.IsNormalString(s) { + return &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if c := p.simplify(info(v).category()); c != valid && c != deviation { + return &labelError{s, "V6"} + } + i += sz + } + return nil +} + +const ( + zwnj = "\u200c" + zwj = "\u200d" +) + +type joinState int8 + +const ( + stateStart joinState = iota + stateVirama + stateBefore + stateBeforeVirama + stateAfter + stateFAIL +) + +var joinStates = [][numJoinTypes]joinState{ + stateStart: { + joiningL: stateBefore, + joiningD: stateBefore, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateVirama, + }, + stateVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + }, + stateBefore: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + joinZWNJ: stateAfter, + joinZWJ: stateFAIL, + joinVirama: stateBeforeVirama, + }, + stateBeforeVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + }, + stateAfter: { + joiningL: stateFAIL, + joiningD: stateBefore, + joiningT: stateAfter, + joiningR: stateStart, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateAfter, // no-op as we can't accept joiners here + }, + stateFAIL: { + 0: stateFAIL, + joiningL: stateFAIL, + joiningD: stateFAIL, + joiningT: stateFAIL, + joiningR: stateFAIL, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateFAIL, + }, +} + +// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are +// already implicitly satisfied by the overall implementation. +func (p *Profile) validateLabel(s string) error { + if s == "" { + if p.verifyDNSLength { + return &labelError{s, "A4"} + } + return nil + } + if p.bidirule != nil && !p.bidirule(s) { + return &labelError{s, "B"} + } + if !p.validateLabels { + return nil + } + trie := p.trie // p.validateLabels is only set if trie is set. + if len(s) > 4 && s[2] == '-' && s[3] == '-' { + return &labelError{s, "V2"} + } + if s[0] == '-' || s[len(s)-1] == '-' { + return &labelError{s, "V3"} + } + // TODO: merge the use of this in the trie. + v, sz := trie.lookupString(s) + x := info(v) + if x.isModifier() { + return &labelError{s, "V5"} + } + // Quickly return in the absence of zero-width (non) joiners. + if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 { + return nil + } + st := stateStart + for i := 0; ; { + jt := x.joinType() + if s[i:i+sz] == zwj { + jt = joinZWJ + } else if s[i:i+sz] == zwnj { + jt = joinZWNJ + } + st = joinStates[st][jt] + if x.isViramaModifier() { + st = joinStates[st][joinVirama] + } + if i += sz; i == len(s) { + break + } + v, sz = trie.lookupString(s[i:]) + x = info(v) + } + if st == stateFAIL || st == stateAfter { + return &labelError{s, "C"} + } + return nil +} + +func ascii(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/text/internal/export/idna/idna_test.go b/vendor/golang.org/x/text/internal/export/idna/idna_test.go new file mode 100644 index 0000000..01fd50b --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/idna_test.go @@ -0,0 +1,290 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +import ( + "fmt" + "strconv" + "strings" + "testing" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/internal/ucd" +) + +func TestAllocToUnicode(t *testing.T) { + avg := testtext.AllocsPerRun(1000, func() { + ToUnicode("www.golang.org") + }) + if avg > 0 { + t.Errorf("got %f; want 0", avg) + } +} + +func TestAllocToASCII(t *testing.T) { + avg := testtext.AllocsPerRun(1000, func() { + ToASCII("www.golang.org") + }) + if avg > 0 { + t.Errorf("got %f; want 0", avg) + } +} + +func TestProfiles(t *testing.T) { + testCases := []struct { + name string + want, got *Profile + }{ + {"Punycode", punycode, New()}, + {"Registration", registration, New(ValidateForRegistration())}, + {"Registration", registration, New( + ValidateForRegistration(), + VerifyDNSLength(true), + BidiRule(), + )}, + {"Lookup", lookup, New(MapForLookup(), BidiRule(), Transitional(true))}, + {"Display", display, New(MapForLookup(), BidiRule())}, + } + for _, tc := range testCases { + // Functions are not comparable, but the printed version will include + // their pointers. + got := fmt.Sprintf("%#v", tc.got) + want := fmt.Sprintf("%#v", tc.want) + if got != want { + t.Errorf("%s: \ngot %#v,\nwant %#v", tc.name, got, want) + } + } +} + +// doTest performs a single test f(input) and verifies that the output matches +// out and that the returned error is expected. The errors string contains +// all allowed error codes as categorized in +// http://www.unicode.org/Public/idna/9.0.0/IdnaTest.txt: +// P: Processing +// V: Validity +// A: to ASCII +// B: Bidi +// C: Context J +func doTest(t *testing.T, f func(string) (string, error), name, input, want, errors string) { + errors = strings.Trim(errors, "[]") + test := "ok" + if errors != "" { + test = "err:" + errors + } + // Replace some of the escape sequences to make it easier to single out + // tests on the command name. + in := strings.Trim(strconv.QuoteToASCII(input), `"`) + in = strings.Replace(in, `\u`, "#", -1) + in = strings.Replace(in, `\U`, "#", -1) + name = fmt.Sprintf("%s/%s/%s", name, in, test) + + testtext.Run(t, name, func(t *testing.T) { + got, err := f(input) + + if err != nil { + code := err.(interface { + code() string + }).code() + if strings.Index(errors, code) == -1 { + t.Errorf("error %q not in set of expected errors {%v}", code, errors) + } + } else if errors != "" { + t.Errorf("no errors; want error in {%v}", errors) + } + + if want != "" && got != want { + t.Errorf(`string: got %+q; want %+q`, got, want) + } + }) +} + +// TestLabelErrors tests strings returned in case of error. All results should +// be identical to the reference implementation and can be verified at +// http://unicode.org/cldr/utility/idna.jsp. The reference implementation, +// however, seems to not display Bidi and ContextJ errors. +// +// In some cases the behavior of browsers is added as a comment. In all cases, +// whenever a resolve search returns an error here, Chrome will treat the input +// string as a search string (including those for Bidi and Context J errors), +// unless noted otherwise. +func TestLabelErrors(t *testing.T) { + encode := func(s string) string { s, _ = encode(acePrefix, s); return s } + type kind struct { + name string + f func(string) (string, error) + } + punyA := kind{"PunycodeA", punycode.ToASCII} + resolve := kind{"ToASCII", Lookup.ToASCII} + display := kind{"ToUnicode", Display.ToUnicode} + p := New(VerifyDNSLength(true), MapForLookup(), BidiRule()) + lengthU := kind{"CheckLengthU", p.ToUnicode} + lengthA := kind{"CheckLengthA", p.ToASCII} + p = New(MapForLookup(), StrictDomainName(false)) + std3 := kind{"STD3", p.ToASCII} + + testCases := []struct { + kind + input string + want string + wantErr string + }{ + {lengthU, "", "", "A4"}, // From UTS 46 conformance test. + {lengthA, "", "", "A4"}, + + {lengthU, "xn--", "", "A4"}, + {lengthU, "foo.xn--", "foo.", "A4"}, // TODO: is dropping xn-- correct? + {lengthU, "xn--.foo", ".foo", "A4"}, + {lengthU, "foo.xn--.bar", "foo..bar", "A4"}, + + {display, "xn--", "", ""}, + {display, "foo.xn--", "foo.", ""}, // TODO: is dropping xn-- correct? + {display, "xn--.foo", ".foo", ""}, + {display, "foo.xn--.bar", "foo..bar", ""}, + + {lengthA, "a..b", "a..b", "A4"}, + // Stripping leading empty labels here but not for "empty" punycode + // above seems inconsistent, but seems to be applied by both the + // conformance test and Chrome. Different interpretations would be + // possible, though. + {lengthA, "..b", "b", ""}, + {lengthA, "b..", "b..", ""}, // TODO: remove trailing dots? + + {resolve, "a..b", "a..b", ""}, + {resolve, "..b", "b", ""}, + {resolve, "b..", "b..", ""}, // TODO: remove trailing dots? + + // Raw punycode + {punyA, "", "", ""}, + {punyA, "*.foo.com", "*.foo.com", ""}, + {punyA, "Foo.com", "Foo.com", ""}, + + // STD3 rules + {display, "*.foo.com", "*.foo.com", "P1"}, + {std3, "*.foo.com", "*.foo.com", ""}, + + // Don't map U+2490 (DIGIT NINE FULL STOP). This is the behavior of + // Chrome, Safari, and IE. Firefox will first map ⒐ to 9. and return + // lab9.be. + {resolve, "lab⒐be", "xn--labbe-zh9b", "P1"}, // encode("lab⒐be") + {display, "lab⒐be", "lab⒐be", "P1"}, + + {resolve, "plan⒐faß.de", "xn--planfass-c31e.de", "P1"}, // encode("plan⒐fass") + ".de" + {display, "Plan⒐faß.de", "plan⒐faß.de", "P1"}, + + // Chrome 54.0 recognizes the error and treats this input verbatim as a + // search string. + // Safari 10.0 (non-conform spec) decomposes "⒈" and computes the + // punycode on the result using transitional mapping. + // Firefox 49.0.1 goes haywire on this string and prints a bunch of what + // seems to be nested punycode encodings. + {resolve, "日本⒈co.ßßß.de", "xn--co-wuw5954azlb.ssssss.de", "P1"}, + {display, "日本⒈co.ßßß.de", "日本⒈co.ßßß.de", "P1"}, + + {resolve, "a\u200Cb", "ab", ""}, + {display, "a\u200Cb", "a\u200Cb", "C"}, + + {resolve, encode("a\u200Cb"), encode("a\u200Cb"), "C"}, + {display, "a\u200Cb", "a\u200Cb", "C"}, + + {resolve, "grﻋﺮﺑﻲ.de", "xn--gr-gtd9a1b0g.de", "B"}, + { + // Notice how the string gets transformed, even with an error. + // Chrome will use the original string if it finds an error, so not + // the transformed one. + display, + "gr\ufecb\ufeae\ufe91\ufef2.de", + "gr\u0639\u0631\u0628\u064a.de", + "B", + }, + + {resolve, "\u0671.\u03c3\u07dc", "xn--qib.xn--4xa21s", "B"}, // ٱ.σߜ + {display, "\u0671.\u03c3\u07dc", "\u0671.\u03c3\u07dc", "B"}, + + // normalize input + {resolve, "a\u0323\u0322", "xn--jta191l", ""}, // ạ̢ + {display, "a\u0323\u0322", "\u1ea1\u0322", ""}, + + // Non-normalized strings are not normalized when they originate from + // punycode. Despite the error, Chrome, Safari and Firefox will attempt + // to look up the input punycode. + {resolve, encode("a\u0323\u0322") + ".com", "xn--a-tdbc.com", "V1"}, + {display, encode("a\u0323\u0322") + ".com", "a\u0323\u0322.com", "V1"}, + } + + for _, tc := range testCases { + doTest(t, tc.f, tc.name, tc.input, tc.want, tc.wantErr) + } +} + +func TestConformance(t *testing.T) { + testtext.SkipIfNotLong(t) + + r := gen.OpenUnicodeFile("idna", "", "IdnaTest.txt") + defer r.Close() + + section := "main" + started := false + p := ucd.New(r, ucd.CommentHandler(func(s string) { + if started { + section = strings.ToLower(strings.Split(s, " ")[0]) + } + })) + transitional := New(Transitional(true), VerifyDNSLength(true), BidiRule(), MapForLookup()) + nonTransitional := New(VerifyDNSLength(true), BidiRule(), MapForLookup()) + for p.Next() { + started = true + + // What to test + profiles := []*Profile{} + switch p.String(0) { + case "T": + profiles = append(profiles, transitional) + case "N": + profiles = append(profiles, nonTransitional) + case "B": + profiles = append(profiles, transitional) + profiles = append(profiles, nonTransitional) + } + + src := unescape(p.String(1)) + + wantToUnicode := unescape(p.String(2)) + if wantToUnicode == "" { + wantToUnicode = src + } + wantToASCII := unescape(p.String(3)) + if wantToASCII == "" { + wantToASCII = wantToUnicode + } + wantErrToUnicode := "" + if strings.HasPrefix(wantToUnicode, "[") { + wantErrToUnicode = wantToUnicode + wantToUnicode = "" + } + wantErrToASCII := "" + if strings.HasPrefix(wantToASCII, "[") { + wantErrToASCII = wantToASCII + wantToASCII = "" + } + + // TODO: also do IDNA tests. + // invalidInIDNA2008 := p.String(4) == "NV8" + + for _, p := range profiles { + name := fmt.Sprintf("%s:%s", section, p) + doTest(t, p.ToUnicode, name+":ToUnicode", src, wantToUnicode, wantErrToUnicode) + doTest(t, p.ToASCII, name+":ToASCII", src, wantToASCII, wantErrToASCII) + } + } +} + +func unescape(s string) string { + s, err := strconv.Unquote(`"` + s + `"`) + if err != nil { + panic(err) + } + return s +} diff --git a/vendor/golang.org/x/text/internal/export/idna/punycode.go b/vendor/golang.org/x/text/internal/export/idna/punycode.go new file mode 100644 index 0000000..f0cbd48 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/punycode.go @@ -0,0 +1,201 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +// This file implements the Punycode algorithm from RFC 3492. + +import ( + "math" + "strings" + "unicode/utf8" +) + +// These parameter values are specified in section 5. +// +// All computation is done with int32s, so that overflow behavior is identical +// regardless of whether int is 32-bit or 64-bit. +const ( + base int32 = 36 + damp int32 = 700 + initialBias int32 = 72 + initialN int32 = 128 + skew int32 = 38 + tmax int32 = 26 + tmin int32 = 1 +) + +func punyError(s string) error { return &labelError{s, "A3"} } + +// decode decodes a string as specified in section 6.2. +func decode(encoded string) (string, error) { + if encoded == "" { + return "", nil + } + pos := 1 + strings.LastIndex(encoded, "-") + if pos == 1 { + return "", punyError(encoded) + } + if pos == len(encoded) { + return encoded[:len(encoded)-1], nil + } + output := make([]rune, 0, len(encoded)) + if pos != 0 { + for _, r := range encoded[:pos-1] { + output = append(output, r) + } + } + i, n, bias := int32(0), initialN, initialBias + for pos < len(encoded) { + oldI, w := i, int32(1) + for k := base; ; k += base { + if pos == len(encoded) { + return "", punyError(encoded) + } + digit, ok := decodeDigit(encoded[pos]) + if !ok { + return "", punyError(encoded) + } + pos++ + i += digit * w + if i < 0 { + return "", punyError(encoded) + } + t := k - bias + if t < tmin { + t = tmin + } else if t > tmax { + t = tmax + } + if digit < t { + break + } + w *= base - t + if w >= math.MaxInt32/base { + return "", punyError(encoded) + } + } + x := int32(len(output) + 1) + bias = adapt(i-oldI, x, oldI == 0) + n += i / x + i %= x + if n > utf8.MaxRune || len(output) >= 1024 { + return "", punyError(encoded) + } + output = append(output, 0) + copy(output[i+1:], output[i:]) + output[i] = n + i++ + } + return string(output), nil +} + +// encode encodes a string as specified in section 6.3 and prepends prefix to +// the result. +// +// The "while h < length(input)" line in the specification becomes "for +// remaining != 0" in the Go code, because len(s) in Go is in bytes, not runes. +func encode(prefix, s string) (string, error) { + output := make([]byte, len(prefix), len(prefix)+1+2*len(s)) + copy(output, prefix) + delta, n, bias := int32(0), initialN, initialBias + b, remaining := int32(0), int32(0) + for _, r := range s { + if r < 0x80 { + b++ + output = append(output, byte(r)) + } else { + remaining++ + } + } + h := b + if b > 0 { + output = append(output, '-') + } + for remaining != 0 { + m := int32(0x7fffffff) + for _, r := range s { + if m > r && r >= n { + m = r + } + } + delta += (m - n) * (h + 1) + if delta < 0 { + return "", punyError(s) + } + n = m + for _, r := range s { + if r < n { + delta++ + if delta < 0 { + return "", punyError(s) + } + continue + } + if r > n { + continue + } + q := delta + for k := base; ; k += base { + t := k - bias + if t < tmin { + t = tmin + } else if t > tmax { + t = tmax + } + if q < t { + break + } + output = append(output, encodeDigit(t+(q-t)%(base-t))) + q = (q - t) / (base - t) + } + output = append(output, encodeDigit(q)) + bias = adapt(delta, h+1, h == b) + delta = 0 + h++ + remaining-- + } + delta++ + n++ + } + return string(output), nil +} + +func decodeDigit(x byte) (digit int32, ok bool) { + switch { + case '0' <= x && x <= '9': + return int32(x - ('0' - 26)), true + case 'A' <= x && x <= 'Z': + return int32(x - 'A'), true + case 'a' <= x && x <= 'z': + return int32(x - 'a'), true + } + return 0, false +} + +func encodeDigit(digit int32) byte { + switch { + case 0 <= digit && digit < 26: + return byte(digit + 'a') + case 26 <= digit && digit < 36: + return byte(digit + ('0' - 26)) + } + panic("idna: internal error in punycode encoding") +} + +// adapt is the bias adaptation function specified in section 6.1. +func adapt(delta, numPoints int32, firstTime bool) int32 { + if firstTime { + delta /= damp + } else { + delta /= 2 + } + delta += delta / numPoints + k := int32(0) + for delta > ((base-tmin)*tmax)/2 { + delta /= base - tmin + k += base + } + return k + (base-tmin+1)*delta/(delta+skew) +} diff --git a/vendor/golang.org/x/text/internal/export/idna/punycode_test.go b/vendor/golang.org/x/text/internal/export/idna/punycode_test.go new file mode 100644 index 0000000..2d99239 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/punycode_test.go @@ -0,0 +1,198 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +import ( + "strings" + "testing" +) + +var punycodeTestCases = [...]struct { + s, encoded string +}{ + {"", ""}, + {"-", "--"}, + {"-a", "-a-"}, + {"-a-", "-a--"}, + {"a", "a-"}, + {"a-", "a--"}, + {"a-b", "a-b-"}, + {"books", "books-"}, + {"bücher", "bcher-kva"}, + {"Hello世界", "Hello-ck1hg65u"}, + {"ü", "tda"}, + {"üý", "tdac"}, + + // The test cases below come from RFC 3492 section 7.1 with Errata 3026. + { + // (A) Arabic (Egyptian). + "\u0644\u064A\u0647\u0645\u0627\u0628\u062A\u0643\u0644" + + "\u0645\u0648\u0634\u0639\u0631\u0628\u064A\u061F", + "egbpdaj6bu4bxfgehfvwxn", + }, + { + // (B) Chinese (simplified). + "\u4ED6\u4EEC\u4E3A\u4EC0\u4E48\u4E0D\u8BF4\u4E2D\u6587", + "ihqwcrb4cv8a8dqg056pqjye", + }, + { + // (C) Chinese (traditional). + "\u4ED6\u5011\u7232\u4EC0\u9EBD\u4E0D\u8AAA\u4E2D\u6587", + "ihqwctvzc91f659drss3x8bo0yb", + }, + { + // (D) Czech. + "\u0050\u0072\u006F\u010D\u0070\u0072\u006F\u0073\u0074" + + "\u011B\u006E\u0065\u006D\u006C\u0075\u0076\u00ED\u010D" + + "\u0065\u0073\u006B\u0079", + "Proprostnemluvesky-uyb24dma41a", + }, + { + // (E) Hebrew. + "\u05DC\u05DE\u05D4\u05D4\u05DD\u05E4\u05E9\u05D5\u05D8" + + "\u05DC\u05D0\u05DE\u05D3\u05D1\u05E8\u05D9\u05DD\u05E2" + + "\u05D1\u05E8\u05D9\u05EA", + "4dbcagdahymbxekheh6e0a7fei0b", + }, + { + // (F) Hindi (Devanagari). + "\u092F\u0939\u0932\u094B\u0917\u0939\u093F\u0928\u094D" + + "\u0926\u0940\u0915\u094D\u092F\u094B\u0902\u0928\u0939" + + "\u0940\u0902\u092C\u094B\u0932\u0938\u0915\u0924\u0947" + + "\u0939\u0948\u0902", + "i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd", + }, + { + // (G) Japanese (kanji and hiragana). + "\u306A\u305C\u307F\u3093\u306A\u65E5\u672C\u8A9E\u3092" + + "\u8A71\u3057\u3066\u304F\u308C\u306A\u3044\u306E\u304B", + "n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa", + }, + { + // (H) Korean (Hangul syllables). + "\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774" + + "\uD55C\uAD6D\uC5B4\uB97C\uC774\uD574\uD55C\uB2E4\uBA74" + + "\uC5BC\uB9C8\uB098\uC88B\uC744\uAE4C", + "989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5j" + + "psd879ccm6fea98c", + }, + { + // (I) Russian (Cyrillic). + "\u043F\u043E\u0447\u0435\u043C\u0443\u0436\u0435\u043E" + + "\u043D\u0438\u043D\u0435\u0433\u043E\u0432\u043E\u0440" + + "\u044F\u0442\u043F\u043E\u0440\u0443\u0441\u0441\u043A" + + "\u0438", + "b1abfaaepdrnnbgefbadotcwatmq2g4l", + }, + { + // (J) Spanish. + "\u0050\u006F\u0072\u0071\u0075\u00E9\u006E\u006F\u0070" + + "\u0075\u0065\u0064\u0065\u006E\u0073\u0069\u006D\u0070" + + "\u006C\u0065\u006D\u0065\u006E\u0074\u0065\u0068\u0061" + + "\u0062\u006C\u0061\u0072\u0065\u006E\u0045\u0073\u0070" + + "\u0061\u00F1\u006F\u006C", + "PorqunopuedensimplementehablarenEspaol-fmd56a", + }, + { + // (K) Vietnamese. + "\u0054\u1EA1\u0069\u0073\u0061\u006F\u0068\u1ECD\u006B" + + "\u0068\u00F4\u006E\u0067\u0074\u0068\u1EC3\u0063\u0068" + + "\u1EC9\u006E\u00F3\u0069\u0074\u0069\u1EBF\u006E\u0067" + + "\u0056\u0069\u1EC7\u0074", + "TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g", + }, + { + // (L) 3<nen>B<gumi><kinpachi><sensei>. + "\u0033\u5E74\u0042\u7D44\u91D1\u516B\u5148\u751F", + "3B-ww4c5e180e575a65lsy2b", + }, + { + // (M) <amuro><namie>-with-SUPER-MONKEYS. + "\u5B89\u5BA4\u5948\u7F8E\u6075\u002D\u0077\u0069\u0074" + + "\u0068\u002D\u0053\u0055\u0050\u0045\u0052\u002D\u004D" + + "\u004F\u004E\u004B\u0045\u0059\u0053", + "-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n", + }, + { + // (N) Hello-Another-Way-<sorezore><no><basho>. + "\u0048\u0065\u006C\u006C\u006F\u002D\u0041\u006E\u006F" + + "\u0074\u0068\u0065\u0072\u002D\u0057\u0061\u0079\u002D" + + "\u305D\u308C\u305E\u308C\u306E\u5834\u6240", + "Hello-Another-Way--fc4qua05auwb3674vfr0b", + }, + { + // (O) <hitotsu><yane><no><shita>2. + "\u3072\u3068\u3064\u5C4B\u6839\u306E\u4E0B\u0032", + "2-u9tlzr9756bt3uc0v", + }, + { + // (P) Maji<de>Koi<suru>5<byou><mae> + "\u004D\u0061\u006A\u0069\u3067\u004B\u006F\u0069\u3059" + + "\u308B\u0035\u79D2\u524D", + "MajiKoi5-783gue6qz075azm5e", + }, + { + // (Q) <pafii>de<runba> + "\u30D1\u30D5\u30A3\u30FC\u0064\u0065\u30EB\u30F3\u30D0", + "de-jg4avhby1noc0d", + }, + { + // (R) <sono><supiido><de> + "\u305D\u306E\u30B9\u30D4\u30FC\u30C9\u3067", + "d9juau41awczczp", + }, + { + // (S) -> $1.00 <- + "\u002D\u003E\u0020\u0024\u0031\u002E\u0030\u0030\u0020" + + "\u003C\u002D", + "-> $1.00 <--", + }, +} + +func TestPunycode(t *testing.T) { + for _, tc := range punycodeTestCases { + if got, err := decode(tc.encoded); err != nil { + t.Errorf("decode(%q): %v", tc.encoded, err) + } else if got != tc.s { + t.Errorf("decode(%q): got %q, want %q", tc.encoded, got, tc.s) + } + + if got, err := encode("", tc.s); err != nil { + t.Errorf(`encode("", %q): %v`, tc.s, err) + } else if got != tc.encoded { + t.Errorf(`encode("", %q): got %q, want %q`, tc.s, got, tc.encoded) + } + } +} + +var punycodeErrorTestCases = [...]string{ + "decode -", // A sole '-' is invalid. + "decode foo\x00bar", // '\x00' is not in [0-9A-Za-z]. + "decode foo#bar", // '#' is not in [0-9A-Za-z]. + "decode foo\u00A3bar", // '\u00A3' is not in [0-9A-Za-z]. + "decode 9", // "9a" decodes to codepoint \u00A3; "9" is truncated. + "decode 99999a", // "99999a" decodes to codepoint \U0048A3C1, which is > \U0010FFFF. + "decode 9999999999a", // "9999999999a" overflows the int32 calculation. + + "encode " + strings.Repeat("x", 65536) + "\uff00", // int32 overflow. +} + +func TestPunycodeErrors(t *testing.T) { + for _, tc := range punycodeErrorTestCases { + var err error + switch { + case strings.HasPrefix(tc, "decode "): + _, err = decode(tc[7:]) + case strings.HasPrefix(tc, "encode "): + _, err = encode("", tc[7:]) + } + if err == nil { + if len(tc) > 256 { + tc = tc[:100] + "..." + tc[len(tc)-100:] + } + t.Errorf("no error for %s", tc) + } + } +} diff --git a/vendor/golang.org/x/text/internal/export/idna/tables.go b/vendor/golang.org/x/text/internal/export/idna/tables.go new file mode 100644 index 0000000..d281934 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/tables.go @@ -0,0 +1,4477 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +var mappings string = "" + // Size: 8176 bytes + "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + + "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + + "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + + "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + + "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + + "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + + "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + + "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + + "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + + "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + + "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + + "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + + "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + + "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + + "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + + "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + + "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + + "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + + "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + + "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + + "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + + "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + + "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + + "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + + "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + + "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + + ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + + "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + + "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + + "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + + "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + + "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + + "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + + "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + + "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + + "月\x0511月\x0512月\x02hg\x02ev\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニング\x09" + + "インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー\x09ガロ" + + "ン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0fキロワッ" + + "ト\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル\x0fサンチ" + + "ーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット\x09ハイツ" + + "\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0cフィート" + + "\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ\x0cポイ" + + "ント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク\x0fマ" + + "ンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09ユアン" + + "\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x042点" + + "\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + + "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + + "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + + "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + + "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + + "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + + "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + + "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + + "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + + "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + + "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + + "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x04𤋮\x04𢡊\x04𢡄\x04𣏕\x04𥉉" + + "\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ\x04יִ" + + "\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּׂ\x04א" + + "ַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04ךּ\x04" + + "כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ\x04תּ" + + "\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ\x02ڤ" + + "\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ\x02ڳ" + + "\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ\x02ۅ" + + "\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02ی\x04" + + "ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04تح" + + "\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج\x04حم" + + "\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح\x04ضخ" + + "\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ\x04فم" + + "\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل\x04كم" + + "\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ\x04مم" + + "\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى\x04هي" + + "\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 ٍّ\x05" + + " َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04تر\x04تز" + + "\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04ين\x04ئخ" + + "\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه\x04شم\x04شه" + + "\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي\x04سى\x04سي" + + "\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي\x04ضى\x04ضي" + + "\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06تحج\x06تحم" + + "\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سجح\x06سجى" + + "\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم\x06ضحى" + + "\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي\x06غمى" + + "\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح\x06محج" + + "\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم\x06نحم" + + "\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى\x06تخي" + + "\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي\x06ضحي" + + "\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي\x06كمي" + + "\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي\x06سخي" + + "\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08عليه" + + "\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:\x01!" + + "\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\\x01$" + + "\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ\x02إ" + + "\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز\x02س" + + "\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن\x02ه" + + "\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~\x02¢" + + "\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲\x08𝆹" + + "𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η\x02" + + "κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ\x02ڡ" + + "\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029,\x03(a)" + + "\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)\x03(k)" + + "\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)\x03(u)" + + "\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03ppv\x02w" + + "c\x02mc\x02md\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ\x03二\x03多\x03解" + + "\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終\x03生\x03販\x03声" + + "\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指\x03走\x03打\x03禁" + + "\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔三〕\x09〔二〕\x09〔安" + + "〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03丸\x03乁\x03你\x03" + + "侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03具\x03㒹\x03內\x03" + + "冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03㔕\x03勇\x03勉\x03" + + "勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03灰\x03及\x03叟\x03" + + "叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03啣\x03善\x03喙\x03" + + "喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03埴\x03堍\x03型\x03" + + "堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03姘\x03婦\x03㛮\x03" + + "嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03屮\x03峀\x03岍\x03" + + "嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03㡢\x03㡼\x03庰\x03" + + "庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03忍\x03志\x03忹\x03" + + "悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03憤\x03憯\x03懞\x03" + + "懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03掃\x03揤\x03搢\x03" + + "揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03書\x03晉\x03㬙\x03" + + "暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03朡\x03杞\x03杓\x03" + + "㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03槪\x03檨\x03櫛\x03" + + "㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03汧\x03洖\x03派\x03" + + "海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03淹\x03潮\x03濆\x03" + + "瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03爵\x03牐\x03犀\x03" + + "犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03㼛\x03甤\x03甾\x03" + + "異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03䂖\x03硎\x03碌\x03" + + "磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03築\x03䈧\x03糒\x03" + + "䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03罺\x03羕\x03翺\x03" + + "者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03䑫\x03芑\x03芋\x03" + + "芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03莽\x03菧\x03著\x03" + + "荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03䕫\x03虐\x03虜\x03" + + "虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03蠁\x03䗹\x03衠\x03" + + "衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03豕\x03貫\x03賁\x03" + + "贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03鈸\x03鋗\x03鋘\x03" + + "鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03䩶\x03韠\x03䪲\x03" + + "頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03鳽\x03䳎\x03䳭\x03" + + "鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" + +var xorData string = "" + // Size: 4855 bytes + "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + + "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + + "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + + "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + + "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + + "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + + "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + + "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + + "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + + "\x03\x037 \x03\x0b+\x03\x02\x01\x04\x02\x01\x02\x02\x019\x02\x03\x1c\x02" + + "\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03\xc1r\x02" + + "\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<\x03\xc1s*" + + "\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03\x83\xab" + + "\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96\xe1\xcd" + + "\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03\x9a\xec" + + "\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c!\x03" + + "\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03ʦ\x93" + + "\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7\x03" + + "\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca\xfa" + + "\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e\x03" + + "\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca\xe3" + + "\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99\x03" + + "\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca\xe8" + + "\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03\x0b" + + "\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06\x05" + + "\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03\x0786" + + "\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/\x03" + + "\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f\x03" + + "\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-\x03" + + "\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03\x07" + + "\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03\x07" + + "\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03\x07" + + "\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b\x0a" + + "\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03\x07" + + "\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+\x03" + + "\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03\x04" + + "4\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03\x04+ " + + "\x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!\x22" + + "\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04\x03" + + "\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>\x03" + + "\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03\x054" + + "\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03\x05)" + + ":\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$\x1e" + + "\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226\x03" + + "\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05\x1b" + + "\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05\x03" + + "\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03\x06" + + "\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08\x03" + + "\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03\x0a6" + + "\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a\x1f" + + "\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03\x0a" + + "\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f\x02" + + "\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/\x03" + + "\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a\x00" + + "\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+\x10" + + "\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#<" + + "\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!\x00" + + "\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18.\x03" + + "\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15\x22" + + "\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b\x12" + + "\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05<" + + "\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + + "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + + "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + + "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + + "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + + "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + + "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + + "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + + "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + + "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + + "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + + "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + + "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + + "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + + "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + + "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + + "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + + "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + + "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + + "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + + "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + + "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + + "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + + "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + + "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + + "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + + "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + + "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + + "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + + "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + + "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + + "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + + ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + + "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + + "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + + "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + + "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + + "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + + "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + + "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + + "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + + "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + + "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + + "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + + "(\x04\x023 \x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!\x10\x03\x0b!0" + + "\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b\x03\x09\x1f" + + "\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14\x03\x0a\x01" + + "\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03\x08='\x03" + + "\x08\x1a\x0a\x03\x07</\x03\x07:+\x03\x07\x07*\x03\x06&\x1c\x03\x09\x0c" + + "\x16\x03\x09\x10\x0e\x03\x08'\x0f\x03\x08+\x09\x03\x074%\x03\x06!3\x03" + + "\x06\x03+\x03\x0b\x1e\x19\x03\x0a))\x03\x09\x08\x19\x03\x08,\x05\x03\x07" + + "<2\x03\x06\x1c>\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07\x01\x00" + + "\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03\x09\x11" + + "\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03\x0a/1" + + "\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03\x07<3" + + "\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06\x13\x00" + + "\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(;\x03" + + "\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08\x14$" + + "\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03\x0a" + + "\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19\x01" + + "\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18\x03" + + "\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03\x07" + + "\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03\x0a" + + "\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03\x0b" + + "\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03\x08" + + "\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05\x03" + + "\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11\x03" + + "\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03\x09" + + "\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a." + + "\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + + "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + + "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + + "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + + "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + + "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + + "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + + "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + + "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + + "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + + "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + + "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + + "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + + "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + + "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + + "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + + "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + + "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + + "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + + "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + + "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + + "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + + "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + + "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + + "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + + "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + + "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + + "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + + "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + + "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + + "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + + "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + + "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + + "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + + "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + + "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + + "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + + "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + + "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + + "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + + "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + + "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + + "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + + "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + + "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + + "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + + "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + + "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + + "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + + "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + + "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + + "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + + "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + + "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + + "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + + "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + + "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + + "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + + "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + + "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + + "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + + "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + + "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + + "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + + "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + + "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + + "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + + "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + + "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + + "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + + "\x04\x03\x0c?\x05\x03\x0c<?\x03\x0c=\x00\x03\x0c=\x06\x03\x0c=\x05\x03" + + "\x0c=\x0c\x03\x0c=\x0f\x03\x0c=\x0d\x03\x0c=\x0b\x03\x0c=\x07\x03\x0c=" + + "\x19\x03\x0c=\x15\x03\x0c=\x11\x03\x0c=1\x03\x0c=3\x03\x0c=0\x03\x0c=>" + + "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + + "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + + "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + + "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + + "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + + "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x01\x1e\x03\x0f$!\x03" + + "\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08\x18\x03\x0f" + + "\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$\x03\x0e\x0d)" + + "\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d\x03\x0d. \x03" + + "\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03\x0d\x0d\x0f\x03" + + "\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03\x0c\x09:\x03\x0e" + + "\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18\x03\x0c\x1f\x1c" + + "\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03\x0b<+\x03\x0b8" + + "\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d\x22&\x03\x0b\x1a" + + "\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03\x0a!\x1a\x03\x0a!" + + "7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03\x0a\x00 \x03\x0a" + + "\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a\x1b-\x03\x09-" + + "\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091\x1f\x03\x093" + + "\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(\x16\x03\x09" + + "\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!\x03\x09\x1a" + + "\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03\x08\x02*" + + "\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03\x070\x0c" + + "\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x0671\x03" + + "\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 \x1d\x03" + + "\x05\x22\x05\x03\x050\x1d" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *idnaTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = idnaIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *idnaTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *idnaTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = idnaIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// idnaTrie. Total size: 28496 bytes (27.83 KiB). Checksum: 43288b883596640e. +type idnaTrie struct{} + +func newIdnaTrie(i int) *idnaTrie { + return &idnaTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 123: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 123 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 125 blocks, 8000 entries, 16000 bytes +// The third block is the zero block. +var idnaValues = [8000]uint16{ + // Block 0x0, offset 0x0 + 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, + 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, + 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, + 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, + 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, + 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, + 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, + 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, + 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, + 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, + 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, + // Block 0x1, offset 0x40 + 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, + 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, + 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, + 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, + 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, + 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, + 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, + 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, + 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, + 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, + 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, + 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, + 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, + // Block 0x4, offset 0x100 + 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, + 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, + 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, + 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, + 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, + 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, + 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, + 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, + 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, + // Block 0x5, offset 0x140 + 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, + 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, + 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, + 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, + 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, + 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, + 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, + 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, + // Block 0x6, offset 0x180 + 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, + 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, + 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, + 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, + 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, + 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, + 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, + 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, + 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, + 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, + 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, + 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, + 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, + 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, + 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, + 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, + 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, + 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, + 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, + // Block 0x8, offset 0x200 + 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, + 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, + 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, + 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, + 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, + 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, + 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, + 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, + 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, + // Block 0x9, offset 0x240 + 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, + 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, + 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, + 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, + 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, + 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, + 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, + 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, + 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, + 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, + // Block 0xa, offset 0x280 + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x1308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, + 0x286: 0x1308, 0x287: 0x1308, 0x288: 0x1308, 0x289: 0x1308, 0x28a: 0x1308, 0x28b: 0x1308, + 0x28c: 0x1308, 0x28d: 0x1308, 0x28e: 0x1308, 0x28f: 0x13c0, 0x290: 0x1308, 0x291: 0x1308, + 0x292: 0x1308, 0x293: 0x1308, 0x294: 0x1308, 0x295: 0x1308, 0x296: 0x1308, 0x297: 0x1308, + 0x298: 0x1308, 0x299: 0x1308, 0x29a: 0x1308, 0x29b: 0x1308, 0x29c: 0x1308, 0x29d: 0x1308, + 0x29e: 0x1308, 0x29f: 0x1308, 0x2a0: 0x1308, 0x2a1: 0x1308, 0x2a2: 0x1308, 0x2a3: 0x1308, + 0x2a4: 0x1308, 0x2a5: 0x1308, 0x2a6: 0x1308, 0x2a7: 0x1308, 0x2a8: 0x1308, 0x2a9: 0x1308, + 0x2aa: 0x1308, 0x2ab: 0x1308, 0x2ac: 0x1308, 0x2ad: 0x1308, 0x2ae: 0x1308, 0x2af: 0x1308, + 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, + 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, + 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, + 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, + 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, + 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, + 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, + 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, + 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, + 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, + // Block 0xc, offset 0x300 + 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, + 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, + 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, + 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, + 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, + 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, + 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, + 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, + 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, + 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, + 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, + // Block 0xd, offset 0x340 + 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, + 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, + 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, + 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, + 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, + 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, + 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, + 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, + 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, + 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, + 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, + // Block 0xe, offset 0x380 + 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x1308, 0x384: 0x1308, 0x385: 0x1308, + 0x386: 0x1308, 0x387: 0x1308, 0x388: 0x1318, 0x389: 0x1318, 0x38a: 0xe00d, 0x38b: 0x0008, + 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, + 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, + 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, + 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, + 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, + 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, + 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, + 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, + 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, + 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, + 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, + 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, + 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, + 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, + 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, + 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, + 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, + 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, + 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, + // Block 0x10, offset 0x400 + 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, + 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, + 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, + 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, + 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, + 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, + 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, + 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, + 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, + 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, + 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, + // Block 0x11, offset 0x440 + 0x440: 0x0040, 0x441: 0x0040, 0x442: 0x0040, 0x443: 0x0040, 0x444: 0x0040, 0x445: 0x0040, + 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0018, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0018, + 0x44c: 0x0018, 0x44d: 0x0018, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x1308, 0x451: 0x1308, + 0x452: 0x1308, 0x453: 0x1308, 0x454: 0x1308, 0x455: 0x1308, 0x456: 0x1308, 0x457: 0x1308, + 0x458: 0x1308, 0x459: 0x1308, 0x45a: 0x1308, 0x45b: 0x0018, 0x45c: 0x0340, 0x45d: 0x0040, + 0x45e: 0x0018, 0x45f: 0x0018, 0x460: 0x0208, 0x461: 0x0008, 0x462: 0x0408, 0x463: 0x0408, + 0x464: 0x0408, 0x465: 0x0408, 0x466: 0x0208, 0x467: 0x0408, 0x468: 0x0208, 0x469: 0x0408, + 0x46a: 0x0208, 0x46b: 0x0208, 0x46c: 0x0208, 0x46d: 0x0208, 0x46e: 0x0208, 0x46f: 0x0408, + 0x470: 0x0408, 0x471: 0x0408, 0x472: 0x0408, 0x473: 0x0208, 0x474: 0x0208, 0x475: 0x0208, + 0x476: 0x0208, 0x477: 0x0208, 0x478: 0x0208, 0x479: 0x0208, 0x47a: 0x0208, 0x47b: 0x0208, + 0x47c: 0x0208, 0x47d: 0x0208, 0x47e: 0x0208, 0x47f: 0x0208, + // Block 0x12, offset 0x480 + 0x480: 0x0408, 0x481: 0x0208, 0x482: 0x0208, 0x483: 0x0408, 0x484: 0x0408, 0x485: 0x0408, + 0x486: 0x0408, 0x487: 0x0408, 0x488: 0x0408, 0x489: 0x0408, 0x48a: 0x0408, 0x48b: 0x0408, + 0x48c: 0x0208, 0x48d: 0x0408, 0x48e: 0x0208, 0x48f: 0x0408, 0x490: 0x0208, 0x491: 0x0208, + 0x492: 0x0408, 0x493: 0x0408, 0x494: 0x0018, 0x495: 0x0408, 0x496: 0x1308, 0x497: 0x1308, + 0x498: 0x1308, 0x499: 0x1308, 0x49a: 0x1308, 0x49b: 0x1308, 0x49c: 0x1308, 0x49d: 0x0040, + 0x49e: 0x0018, 0x49f: 0x1308, 0x4a0: 0x1308, 0x4a1: 0x1308, 0x4a2: 0x1308, 0x4a3: 0x1308, + 0x4a4: 0x1308, 0x4a5: 0x0008, 0x4a6: 0x0008, 0x4a7: 0x1308, 0x4a8: 0x1308, 0x4a9: 0x0018, + 0x4aa: 0x1308, 0x4ab: 0x1308, 0x4ac: 0x1308, 0x4ad: 0x1308, 0x4ae: 0x0408, 0x4af: 0x0408, + 0x4b0: 0x0008, 0x4b1: 0x0008, 0x4b2: 0x0008, 0x4b3: 0x0008, 0x4b4: 0x0008, 0x4b5: 0x0008, + 0x4b6: 0x0008, 0x4b7: 0x0008, 0x4b8: 0x0008, 0x4b9: 0x0008, 0x4ba: 0x0208, 0x4bb: 0x0208, + 0x4bc: 0x0208, 0x4bd: 0x0008, 0x4be: 0x0008, 0x4bf: 0x0208, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0018, 0x4c1: 0x0018, 0x4c2: 0x0018, 0x4c3: 0x0018, 0x4c4: 0x0018, 0x4c5: 0x0018, + 0x4c6: 0x0018, 0x4c7: 0x0018, 0x4c8: 0x0018, 0x4c9: 0x0018, 0x4ca: 0x0018, 0x4cb: 0x0018, + 0x4cc: 0x0018, 0x4cd: 0x0018, 0x4ce: 0x0040, 0x4cf: 0x0340, 0x4d0: 0x0408, 0x4d1: 0x1308, + 0x4d2: 0x0208, 0x4d3: 0x0208, 0x4d4: 0x0208, 0x4d5: 0x0408, 0x4d6: 0x0408, 0x4d7: 0x0408, + 0x4d8: 0x0408, 0x4d9: 0x0408, 0x4da: 0x0208, 0x4db: 0x0208, 0x4dc: 0x0208, 0x4dd: 0x0208, + 0x4de: 0x0408, 0x4df: 0x0208, 0x4e0: 0x0208, 0x4e1: 0x0208, 0x4e2: 0x0208, 0x4e3: 0x0208, + 0x4e4: 0x0208, 0x4e5: 0x0208, 0x4e6: 0x0208, 0x4e7: 0x0208, 0x4e8: 0x0408, 0x4e9: 0x0208, + 0x4ea: 0x0408, 0x4eb: 0x0208, 0x4ec: 0x0408, 0x4ed: 0x0208, 0x4ee: 0x0208, 0x4ef: 0x0408, + 0x4f0: 0x1308, 0x4f1: 0x1308, 0x4f2: 0x1308, 0x4f3: 0x1308, 0x4f4: 0x1308, 0x4f5: 0x1308, + 0x4f6: 0x1308, 0x4f7: 0x1308, 0x4f8: 0x1308, 0x4f9: 0x1308, 0x4fa: 0x1308, 0x4fb: 0x1308, + 0x4fc: 0x1308, 0x4fd: 0x1308, 0x4fe: 0x1308, 0x4ff: 0x1308, + // Block 0x14, offset 0x500 + 0x500: 0x1008, 0x501: 0x1308, 0x502: 0x1308, 0x503: 0x1308, 0x504: 0x1308, 0x505: 0x1308, + 0x506: 0x1308, 0x507: 0x1308, 0x508: 0x1308, 0x509: 0x1008, 0x50a: 0x1008, 0x50b: 0x1008, + 0x50c: 0x1008, 0x50d: 0x1b08, 0x50e: 0x1008, 0x50f: 0x1008, 0x510: 0x0008, 0x511: 0x1308, + 0x512: 0x1308, 0x513: 0x1308, 0x514: 0x1308, 0x515: 0x1308, 0x516: 0x1308, 0x517: 0x1308, + 0x518: 0x04c9, 0x519: 0x0501, 0x51a: 0x0539, 0x51b: 0x0571, 0x51c: 0x05a9, 0x51d: 0x05e1, + 0x51e: 0x0619, 0x51f: 0x0651, 0x520: 0x0008, 0x521: 0x0008, 0x522: 0x1308, 0x523: 0x1308, + 0x524: 0x0018, 0x525: 0x0018, 0x526: 0x0008, 0x527: 0x0008, 0x528: 0x0008, 0x529: 0x0008, + 0x52a: 0x0008, 0x52b: 0x0008, 0x52c: 0x0008, 0x52d: 0x0008, 0x52e: 0x0008, 0x52f: 0x0008, + 0x530: 0x0018, 0x531: 0x0008, 0x532: 0x0008, 0x533: 0x0008, 0x534: 0x0008, 0x535: 0x0008, + 0x536: 0x0008, 0x537: 0x0008, 0x538: 0x0008, 0x539: 0x0008, 0x53a: 0x0008, 0x53b: 0x0008, + 0x53c: 0x0008, 0x53d: 0x0008, 0x53e: 0x0008, 0x53f: 0x0008, + // Block 0x15, offset 0x540 + 0x540: 0x0008, 0x541: 0x1308, 0x542: 0x1008, 0x543: 0x1008, 0x544: 0x0040, 0x545: 0x0008, + 0x546: 0x0008, 0x547: 0x0008, 0x548: 0x0008, 0x549: 0x0008, 0x54a: 0x0008, 0x54b: 0x0008, + 0x54c: 0x0008, 0x54d: 0x0040, 0x54e: 0x0040, 0x54f: 0x0008, 0x550: 0x0008, 0x551: 0x0040, + 0x552: 0x0040, 0x553: 0x0008, 0x554: 0x0008, 0x555: 0x0008, 0x556: 0x0008, 0x557: 0x0008, + 0x558: 0x0008, 0x559: 0x0008, 0x55a: 0x0008, 0x55b: 0x0008, 0x55c: 0x0008, 0x55d: 0x0008, + 0x55e: 0x0008, 0x55f: 0x0008, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x0008, 0x563: 0x0008, + 0x564: 0x0008, 0x565: 0x0008, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0040, + 0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008, + 0x570: 0x0008, 0x571: 0x0040, 0x572: 0x0008, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x1308, 0x57d: 0x0008, 0x57e: 0x1008, 0x57f: 0x1008, + // Block 0x16, offset 0x580 + 0x580: 0x1008, 0x581: 0x1308, 0x582: 0x1308, 0x583: 0x1308, 0x584: 0x1308, 0x585: 0x0040, + 0x586: 0x0040, 0x587: 0x1008, 0x588: 0x1008, 0x589: 0x0040, 0x58a: 0x0040, 0x58b: 0x1008, + 0x58c: 0x1008, 0x58d: 0x1b08, 0x58e: 0x0008, 0x58f: 0x0040, 0x590: 0x0040, 0x591: 0x0040, + 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x1008, + 0x598: 0x0040, 0x599: 0x0040, 0x59a: 0x0040, 0x59b: 0x0040, 0x59c: 0x0689, 0x59d: 0x06c1, + 0x59e: 0x0040, 0x59f: 0x06f9, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x1308, 0x5a3: 0x1308, + 0x5a4: 0x0040, 0x5a5: 0x0040, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, + 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, + 0x5b0: 0x0008, 0x5b1: 0x0008, 0x5b2: 0x0018, 0x5b3: 0x0018, 0x5b4: 0x0018, 0x5b5: 0x0018, + 0x5b6: 0x0018, 0x5b7: 0x0018, 0x5b8: 0x0018, 0x5b9: 0x0018, 0x5ba: 0x0018, 0x5bb: 0x0018, + 0x5bc: 0x0040, 0x5bd: 0x0040, 0x5be: 0x0040, 0x5bf: 0x0040, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0040, 0x5c1: 0x1308, 0x5c2: 0x1308, 0x5c3: 0x1008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0040, + 0x5cc: 0x0040, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, + 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, + 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, + 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0731, 0x5f4: 0x0040, 0x5f5: 0x0008, + 0x5f6: 0x0769, 0x5f7: 0x0040, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x1308, 0x5fd: 0x0040, 0x5fe: 0x1008, 0x5ff: 0x1008, + // Block 0x18, offset 0x600 + 0x600: 0x1008, 0x601: 0x1308, 0x602: 0x1308, 0x603: 0x0040, 0x604: 0x0040, 0x605: 0x0040, + 0x606: 0x0040, 0x607: 0x1308, 0x608: 0x1308, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x1308, + 0x60c: 0x1308, 0x60d: 0x1b08, 0x60e: 0x0040, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x1308, + 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x0040, + 0x618: 0x0040, 0x619: 0x07a1, 0x61a: 0x07d9, 0x61b: 0x0811, 0x61c: 0x0008, 0x61d: 0x0040, + 0x61e: 0x0849, 0x61f: 0x0040, 0x620: 0x0040, 0x621: 0x0040, 0x622: 0x0040, 0x623: 0x0040, + 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, + 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, + 0x630: 0x1308, 0x631: 0x1308, 0x632: 0x0008, 0x633: 0x0008, 0x634: 0x0008, 0x635: 0x1308, + 0x636: 0x0040, 0x637: 0x0040, 0x638: 0x0040, 0x639: 0x0040, 0x63a: 0x0040, 0x63b: 0x0040, + 0x63c: 0x0040, 0x63d: 0x0040, 0x63e: 0x0040, 0x63f: 0x0040, + // Block 0x19, offset 0x640 + 0x640: 0x0040, 0x641: 0x1308, 0x642: 0x1308, 0x643: 0x1008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0008, + 0x64c: 0x0008, 0x64d: 0x0008, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0008, + 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, + 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, + 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, + 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, + 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, + 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0040, 0x675: 0x0008, + 0x676: 0x0008, 0x677: 0x0008, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, + 0x67c: 0x1308, 0x67d: 0x0008, 0x67e: 0x1008, 0x67f: 0x1008, + // Block 0x1a, offset 0x680 + 0x680: 0x1008, 0x681: 0x1308, 0x682: 0x1308, 0x683: 0x1308, 0x684: 0x1308, 0x685: 0x1308, + 0x686: 0x0040, 0x687: 0x1308, 0x688: 0x1308, 0x689: 0x1008, 0x68a: 0x0040, 0x68b: 0x1008, + 0x68c: 0x1008, 0x68d: 0x1b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0008, 0x691: 0x0040, + 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, + 0x698: 0x0040, 0x699: 0x0040, 0x69a: 0x0040, 0x69b: 0x0040, 0x69c: 0x0040, 0x69d: 0x0040, + 0x69e: 0x0040, 0x69f: 0x0040, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x1308, 0x6a3: 0x1308, + 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, + 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, + 0x6b0: 0x0018, 0x6b1: 0x0018, 0x6b2: 0x0040, 0x6b3: 0x0040, 0x6b4: 0x0040, 0x6b5: 0x0040, + 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x0040, 0x6c1: 0x1308, 0x6c2: 0x1008, 0x6c3: 0x1008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, + 0x6cc: 0x0008, 0x6cd: 0x0040, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0040, + 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, + 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, + 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, + 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, + 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x1308, 0x6fd: 0x0008, 0x6fe: 0x1008, 0x6ff: 0x1308, + // Block 0x1c, offset 0x700 + 0x700: 0x1008, 0x701: 0x1308, 0x702: 0x1308, 0x703: 0x1308, 0x704: 0x1308, 0x705: 0x0040, + 0x706: 0x0040, 0x707: 0x1008, 0x708: 0x1008, 0x709: 0x0040, 0x70a: 0x0040, 0x70b: 0x1008, + 0x70c: 0x1008, 0x70d: 0x1b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0040, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x1308, 0x717: 0x1008, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0881, 0x71d: 0x08b9, + 0x71e: 0x0040, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x1308, 0x723: 0x1308, + 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0018, 0x731: 0x0008, 0x732: 0x0018, 0x733: 0x0018, 0x734: 0x0018, 0x735: 0x0018, + 0x736: 0x0018, 0x737: 0x0018, 0x738: 0x0040, 0x739: 0x0040, 0x73a: 0x0040, 0x73b: 0x0040, + 0x73c: 0x0040, 0x73d: 0x0040, 0x73e: 0x0040, 0x73f: 0x0040, + // Block 0x1d, offset 0x740 + 0x740: 0x0040, 0x741: 0x0040, 0x742: 0x1308, 0x743: 0x0008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0040, + 0x74c: 0x0040, 0x74d: 0x0040, 0x74e: 0x0008, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0008, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0040, 0x757: 0x0040, + 0x758: 0x0040, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0040, 0x75c: 0x0008, 0x75d: 0x0040, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0040, 0x761: 0x0040, 0x762: 0x0040, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0040, 0x766: 0x0040, 0x767: 0x0040, 0x768: 0x0008, 0x769: 0x0008, + 0x76a: 0x0008, 0x76b: 0x0040, 0x76c: 0x0040, 0x76d: 0x0040, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0008, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0008, 0x775: 0x0008, + 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x1008, 0x77f: 0x1008, + // Block 0x1e, offset 0x780 + 0x780: 0x1308, 0x781: 0x1008, 0x782: 0x1008, 0x783: 0x1008, 0x784: 0x1008, 0x785: 0x0040, + 0x786: 0x1308, 0x787: 0x1308, 0x788: 0x1308, 0x789: 0x0040, 0x78a: 0x1308, 0x78b: 0x1308, + 0x78c: 0x1308, 0x78d: 0x1b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, + 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x1308, 0x796: 0x1308, 0x797: 0x0040, + 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0040, 0x79d: 0x0040, + 0x79e: 0x0040, 0x79f: 0x0040, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x1308, 0x7a3: 0x1308, + 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, + 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, + 0x7b0: 0x0040, 0x7b1: 0x0040, 0x7b2: 0x0040, 0x7b3: 0x0040, 0x7b4: 0x0040, 0x7b5: 0x0040, + 0x7b6: 0x0040, 0x7b7: 0x0040, 0x7b8: 0x0018, 0x7b9: 0x0018, 0x7ba: 0x0018, 0x7bb: 0x0018, + 0x7bc: 0x0018, 0x7bd: 0x0018, 0x7be: 0x0018, 0x7bf: 0x0018, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0008, 0x7c1: 0x1308, 0x7c2: 0x1008, 0x7c3: 0x1008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0008, + 0x7cc: 0x0008, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0008, 0x7d7: 0x0008, + 0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0008, 0x7dc: 0x0008, 0x7dd: 0x0008, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x0008, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0008, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0040, + 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0040, 0x7f5: 0x0008, + 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x1308, 0x7fd: 0x0008, 0x7fe: 0x1008, 0x7ff: 0x1308, + // Block 0x20, offset 0x800 + 0x800: 0x1008, 0x801: 0x1008, 0x802: 0x1008, 0x803: 0x1008, 0x804: 0x1008, 0x805: 0x0040, + 0x806: 0x1308, 0x807: 0x1008, 0x808: 0x1008, 0x809: 0x0040, 0x80a: 0x1008, 0x80b: 0x1008, + 0x80c: 0x1308, 0x80d: 0x1b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x1008, 0x816: 0x1008, 0x817: 0x0040, + 0x818: 0x0040, 0x819: 0x0040, 0x81a: 0x0040, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0008, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x1308, 0x823: 0x1308, + 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0040, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0040, 0x839: 0x0040, 0x83a: 0x0040, 0x83b: 0x0040, + 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x0040, 0x83f: 0x0040, + // Block 0x21, offset 0x840 + 0x840: 0x1008, 0x841: 0x1308, 0x842: 0x1308, 0x843: 0x1308, 0x844: 0x1308, 0x845: 0x0040, + 0x846: 0x1008, 0x847: 0x1008, 0x848: 0x1008, 0x849: 0x0040, 0x84a: 0x1008, 0x84b: 0x1008, + 0x84c: 0x1008, 0x84d: 0x1b08, 0x84e: 0x0008, 0x84f: 0x0018, 0x850: 0x0040, 0x851: 0x0040, + 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x1008, + 0x858: 0x0018, 0x859: 0x0018, 0x85a: 0x0018, 0x85b: 0x0018, 0x85c: 0x0018, 0x85d: 0x0018, + 0x85e: 0x0018, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x1308, 0x863: 0x1308, + 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0018, 0x871: 0x0018, 0x872: 0x0018, 0x873: 0x0018, 0x874: 0x0018, 0x875: 0x0018, + 0x876: 0x0018, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0008, 0x87b: 0x0008, + 0x87c: 0x0008, 0x87d: 0x0008, 0x87e: 0x0008, 0x87f: 0x0008, + // Block 0x22, offset 0x880 + 0x880: 0x0040, 0x881: 0x0008, 0x882: 0x0008, 0x883: 0x0040, 0x884: 0x0008, 0x885: 0x0040, + 0x886: 0x0040, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0040, 0x88a: 0x0008, 0x88b: 0x0040, + 0x88c: 0x0040, 0x88d: 0x0008, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008, + 0x898: 0x0040, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008, + 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0040, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008, + 0x8a4: 0x0040, 0x8a5: 0x0008, 0x8a6: 0x0040, 0x8a7: 0x0008, 0x8a8: 0x0040, 0x8a9: 0x0040, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0040, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0008, 0x8b1: 0x1308, 0x8b2: 0x0008, 0x8b3: 0x0929, 0x8b4: 0x1308, 0x8b5: 0x1308, + 0x8b6: 0x1308, 0x8b7: 0x1308, 0x8b8: 0x1308, 0x8b9: 0x1308, 0x8ba: 0x0040, 0x8bb: 0x1308, + 0x8bc: 0x1308, 0x8bd: 0x0008, 0x8be: 0x0040, 0x8bf: 0x0040, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0008, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x09d1, 0x8c4: 0x0008, 0x8c5: 0x0008, + 0x8c6: 0x0008, 0x8c7: 0x0008, 0x8c8: 0x0040, 0x8c9: 0x0008, 0x8ca: 0x0008, 0x8cb: 0x0008, + 0x8cc: 0x0008, 0x8cd: 0x0a09, 0x8ce: 0x0008, 0x8cf: 0x0008, 0x8d0: 0x0008, 0x8d1: 0x0008, + 0x8d2: 0x0a41, 0x8d3: 0x0008, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0a79, + 0x8d8: 0x0008, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0ab1, 0x8dd: 0x0008, + 0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008, + 0x8e4: 0x0008, 0x8e5: 0x0008, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0ae9, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0040, 0x8ee: 0x0040, 0x8ef: 0x0040, + 0x8f0: 0x0040, 0x8f1: 0x1308, 0x8f2: 0x1308, 0x8f3: 0x0b21, 0x8f4: 0x1308, 0x8f5: 0x0b59, + 0x8f6: 0x0b91, 0x8f7: 0x0bc9, 0x8f8: 0x0c19, 0x8f9: 0x0c51, 0x8fa: 0x1308, 0x8fb: 0x1308, + 0x8fc: 0x1308, 0x8fd: 0x1308, 0x8fe: 0x1308, 0x8ff: 0x1008, + // Block 0x24, offset 0x900 + 0x900: 0x1308, 0x901: 0x0ca1, 0x902: 0x1308, 0x903: 0x1308, 0x904: 0x1b08, 0x905: 0x0018, + 0x906: 0x1308, 0x907: 0x1308, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008, + 0x90c: 0x0008, 0x90d: 0x1308, 0x90e: 0x1308, 0x90f: 0x1308, 0x910: 0x1308, 0x911: 0x1308, + 0x912: 0x1308, 0x913: 0x0cd9, 0x914: 0x1308, 0x915: 0x1308, 0x916: 0x1308, 0x917: 0x1308, + 0x918: 0x0040, 0x919: 0x1308, 0x91a: 0x1308, 0x91b: 0x1308, 0x91c: 0x1308, 0x91d: 0x0d11, + 0x91e: 0x1308, 0x91f: 0x1308, 0x920: 0x1308, 0x921: 0x1308, 0x922: 0x0d49, 0x923: 0x1308, + 0x924: 0x1308, 0x925: 0x1308, 0x926: 0x1308, 0x927: 0x0d81, 0x928: 0x1308, 0x929: 0x1308, + 0x92a: 0x1308, 0x92b: 0x1308, 0x92c: 0x0db9, 0x92d: 0x1308, 0x92e: 0x1308, 0x92f: 0x1308, + 0x930: 0x1308, 0x931: 0x1308, 0x932: 0x1308, 0x933: 0x1308, 0x934: 0x1308, 0x935: 0x1308, + 0x936: 0x1308, 0x937: 0x1308, 0x938: 0x1308, 0x939: 0x0df1, 0x93a: 0x1308, 0x93b: 0x1308, + 0x93c: 0x1308, 0x93d: 0x0040, 0x93e: 0x0018, 0x93f: 0x0018, + // Block 0x25, offset 0x940 + 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0008, 0x944: 0x0008, 0x945: 0x0008, + 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, + 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008, + 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0039, 0x96d: 0x0ed1, 0x96e: 0x0ee9, 0x96f: 0x0008, + 0x970: 0x0ef9, 0x971: 0x0f09, 0x972: 0x0f19, 0x973: 0x0f31, 0x974: 0x0249, 0x975: 0x0f41, + 0x976: 0x0259, 0x977: 0x0f51, 0x978: 0x0359, 0x979: 0x0f61, 0x97a: 0x0f71, 0x97b: 0x0008, + 0x97c: 0x00d9, 0x97d: 0x0f81, 0x97e: 0x0f99, 0x97f: 0x0269, + // Block 0x26, offset 0x980 + 0x980: 0x0fa9, 0x981: 0x0fb9, 0x982: 0x0279, 0x983: 0x0039, 0x984: 0x0fc9, 0x985: 0x0fe1, + 0x986: 0x059d, 0x987: 0x0ee9, 0x988: 0x0ef9, 0x989: 0x0f09, 0x98a: 0x0ff9, 0x98b: 0x1011, + 0x98c: 0x1029, 0x98d: 0x0f31, 0x98e: 0x0008, 0x98f: 0x0f51, 0x990: 0x0f61, 0x991: 0x1041, + 0x992: 0x00d9, 0x993: 0x1059, 0x994: 0x05b5, 0x995: 0x05b5, 0x996: 0x0f99, 0x997: 0x0fa9, + 0x998: 0x0fb9, 0x999: 0x059d, 0x99a: 0x1071, 0x99b: 0x1089, 0x99c: 0x05cd, 0x99d: 0x1099, + 0x99e: 0x10b1, 0x99f: 0x10c9, 0x9a0: 0x10e1, 0x9a1: 0x10f9, 0x9a2: 0x0f41, 0x9a3: 0x0269, + 0x9a4: 0x0fb9, 0x9a5: 0x1089, 0x9a6: 0x1099, 0x9a7: 0x10b1, 0x9a8: 0x1111, 0x9a9: 0x10e1, + 0x9aa: 0x10f9, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0008, 0x9ae: 0x0008, 0x9af: 0x0008, + 0x9b0: 0x0008, 0x9b1: 0x0008, 0x9b2: 0x0008, 0x9b3: 0x0008, 0x9b4: 0x0008, 0x9b5: 0x0008, + 0x9b6: 0x0008, 0x9b7: 0x0008, 0x9b8: 0x1129, 0x9b9: 0x0008, 0x9ba: 0x0008, 0x9bb: 0x0008, + 0x9bc: 0x0008, 0x9bd: 0x0008, 0x9be: 0x0008, 0x9bf: 0x0008, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, + 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, + 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, + 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x1141, 0x9dc: 0x1159, 0x9dd: 0x1169, + 0x9de: 0x1181, 0x9df: 0x1029, 0x9e0: 0x1199, 0x9e1: 0x11a9, 0x9e2: 0x11c1, 0x9e3: 0x11d9, + 0x9e4: 0x11f1, 0x9e5: 0x1209, 0x9e6: 0x1221, 0x9e7: 0x05e5, 0x9e8: 0x1239, 0x9e9: 0x1251, + 0x9ea: 0xe17d, 0x9eb: 0x1269, 0x9ec: 0x1281, 0x9ed: 0x1299, 0x9ee: 0x12b1, 0x9ef: 0x12c9, + 0x9f0: 0x12e1, 0x9f1: 0x12f9, 0x9f2: 0x1311, 0x9f3: 0x1329, 0x9f4: 0x1341, 0x9f5: 0x1359, + 0x9f6: 0x1371, 0x9f7: 0x1389, 0x9f8: 0x05fd, 0x9f9: 0x13a1, 0x9fa: 0x13b9, 0x9fb: 0x13d1, + 0x9fc: 0x13e1, 0x9fd: 0x13f9, 0x9fe: 0x1411, 0x9ff: 0x1429, + // Block 0x28, offset 0xa00 + 0xa00: 0xe00d, 0xa01: 0x0008, 0xa02: 0xe00d, 0xa03: 0x0008, 0xa04: 0xe00d, 0xa05: 0x0008, + 0xa06: 0xe00d, 0xa07: 0x0008, 0xa08: 0xe00d, 0xa09: 0x0008, 0xa0a: 0xe00d, 0xa0b: 0x0008, + 0xa0c: 0xe00d, 0xa0d: 0x0008, 0xa0e: 0xe00d, 0xa0f: 0x0008, 0xa10: 0xe00d, 0xa11: 0x0008, + 0xa12: 0xe00d, 0xa13: 0x0008, 0xa14: 0xe00d, 0xa15: 0x0008, 0xa16: 0xe00d, 0xa17: 0x0008, + 0xa18: 0xe00d, 0xa19: 0x0008, 0xa1a: 0xe00d, 0xa1b: 0x0008, 0xa1c: 0xe00d, 0xa1d: 0x0008, + 0xa1e: 0xe00d, 0xa1f: 0x0008, 0xa20: 0xe00d, 0xa21: 0x0008, 0xa22: 0xe00d, 0xa23: 0x0008, + 0xa24: 0xe00d, 0xa25: 0x0008, 0xa26: 0xe00d, 0xa27: 0x0008, 0xa28: 0xe00d, 0xa29: 0x0008, + 0xa2a: 0xe00d, 0xa2b: 0x0008, 0xa2c: 0xe00d, 0xa2d: 0x0008, 0xa2e: 0xe00d, 0xa2f: 0x0008, + 0xa30: 0xe00d, 0xa31: 0x0008, 0xa32: 0xe00d, 0xa33: 0x0008, 0xa34: 0xe00d, 0xa35: 0x0008, + 0xa36: 0xe00d, 0xa37: 0x0008, 0xa38: 0xe00d, 0xa39: 0x0008, 0xa3a: 0xe00d, 0xa3b: 0x0008, + 0xa3c: 0xe00d, 0xa3d: 0x0008, 0xa3e: 0xe00d, 0xa3f: 0x0008, + // Block 0x29, offset 0xa40 + 0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008, + 0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008, + 0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008, + 0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, + 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0615, 0xa5b: 0x0635, 0xa5c: 0x0008, 0xa5d: 0x0008, + 0xa5e: 0x1441, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008, + 0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008, + 0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008, + 0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008, + 0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008, + 0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008, + 0xa86: 0x0040, 0xa87: 0x0040, 0xa88: 0xe045, 0xa89: 0xe045, 0xa8a: 0xe045, 0xa8b: 0xe045, + 0xa8c: 0xe045, 0xa8d: 0xe045, 0xa8e: 0x0040, 0xa8f: 0x0040, 0xa90: 0x0008, 0xa91: 0x0008, + 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, + 0xa98: 0x0040, 0xa99: 0xe045, 0xa9a: 0x0040, 0xa9b: 0xe045, 0xa9c: 0x0040, 0xa9d: 0xe045, + 0xa9e: 0x0040, 0xa9f: 0xe045, 0xaa0: 0x0008, 0xaa1: 0x0008, 0xaa2: 0x0008, 0xaa3: 0x0008, + 0xaa4: 0x0008, 0xaa5: 0x0008, 0xaa6: 0x0008, 0xaa7: 0x0008, 0xaa8: 0xe045, 0xaa9: 0xe045, + 0xaaa: 0xe045, 0xaab: 0xe045, 0xaac: 0xe045, 0xaad: 0xe045, 0xaae: 0xe045, 0xaaf: 0xe045, + 0xab0: 0x0008, 0xab1: 0x1459, 0xab2: 0x0008, 0xab3: 0x1471, 0xab4: 0x0008, 0xab5: 0x1489, + 0xab6: 0x0008, 0xab7: 0x14a1, 0xab8: 0x0008, 0xab9: 0x14b9, 0xaba: 0x0008, 0xabb: 0x14d1, + 0xabc: 0x0008, 0xabd: 0x14e9, 0xabe: 0x0040, 0xabf: 0x0040, + // Block 0x2b, offset 0xac0 + 0xac0: 0x1501, 0xac1: 0x1531, 0xac2: 0x1561, 0xac3: 0x1591, 0xac4: 0x15c1, 0xac5: 0x15f1, + 0xac6: 0x1621, 0xac7: 0x1651, 0xac8: 0x1501, 0xac9: 0x1531, 0xaca: 0x1561, 0xacb: 0x1591, + 0xacc: 0x15c1, 0xacd: 0x15f1, 0xace: 0x1621, 0xacf: 0x1651, 0xad0: 0x1681, 0xad1: 0x16b1, + 0xad2: 0x16e1, 0xad3: 0x1711, 0xad4: 0x1741, 0xad5: 0x1771, 0xad6: 0x17a1, 0xad7: 0x17d1, + 0xad8: 0x1681, 0xad9: 0x16b1, 0xada: 0x16e1, 0xadb: 0x1711, 0xadc: 0x1741, 0xadd: 0x1771, + 0xade: 0x17a1, 0xadf: 0x17d1, 0xae0: 0x1801, 0xae1: 0x1831, 0xae2: 0x1861, 0xae3: 0x1891, + 0xae4: 0x18c1, 0xae5: 0x18f1, 0xae6: 0x1921, 0xae7: 0x1951, 0xae8: 0x1801, 0xae9: 0x1831, + 0xaea: 0x1861, 0xaeb: 0x1891, 0xaec: 0x18c1, 0xaed: 0x18f1, 0xaee: 0x1921, 0xaef: 0x1951, + 0xaf0: 0x0008, 0xaf1: 0x0008, 0xaf2: 0x1981, 0xaf3: 0x19b1, 0xaf4: 0x19d9, 0xaf5: 0x0040, + 0xaf6: 0x0008, 0xaf7: 0x1a01, 0xaf8: 0xe045, 0xaf9: 0xe045, 0xafa: 0x064d, 0xafb: 0x1459, + 0xafc: 0x19b1, 0xafd: 0x0666, 0xafe: 0x1a31, 0xaff: 0x0686, + // Block 0x2c, offset 0xb00 + 0xb00: 0x06a6, 0xb01: 0x1a4a, 0xb02: 0x1a79, 0xb03: 0x1aa9, 0xb04: 0x1ad1, 0xb05: 0x0040, + 0xb06: 0x0008, 0xb07: 0x1af9, 0xb08: 0x06c5, 0xb09: 0x1471, 0xb0a: 0x06dd, 0xb0b: 0x1489, + 0xb0c: 0x1aa9, 0xb0d: 0x1b2a, 0xb0e: 0x1b5a, 0xb0f: 0x1b8a, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x1bb9, 0xb14: 0x0040, 0xb15: 0x0040, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0xe045, 0xb19: 0xe045, 0xb1a: 0x06f5, 0xb1b: 0x14a1, 0xb1c: 0x0040, 0xb1d: 0x1bd2, + 0xb1e: 0x1c02, 0xb1f: 0x1c32, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x1c61, + 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, + 0xb2a: 0x070d, 0xb2b: 0x14d1, 0xb2c: 0xe04d, 0xb2d: 0x1c7a, 0xb2e: 0x03d2, 0xb2f: 0x1caa, + 0xb30: 0x0040, 0xb31: 0x0040, 0xb32: 0x1cb9, 0xb33: 0x1ce9, 0xb34: 0x1d11, 0xb35: 0x0040, + 0xb36: 0x0008, 0xb37: 0x1d39, 0xb38: 0x0725, 0xb39: 0x14b9, 0xb3a: 0x0515, 0xb3b: 0x14e9, + 0xb3c: 0x1ce9, 0xb3d: 0x073e, 0xb3e: 0x075e, 0xb3f: 0x0040, + // Block 0x2d, offset 0xb40 + 0xb40: 0x000a, 0xb41: 0x000a, 0xb42: 0x000a, 0xb43: 0x000a, 0xb44: 0x000a, 0xb45: 0x000a, + 0xb46: 0x000a, 0xb47: 0x000a, 0xb48: 0x000a, 0xb49: 0x000a, 0xb4a: 0x000a, 0xb4b: 0x03c0, + 0xb4c: 0x0003, 0xb4d: 0x0003, 0xb4e: 0x0340, 0xb4f: 0x0340, 0xb50: 0x0018, 0xb51: 0xe00d, + 0xb52: 0x0018, 0xb53: 0x0018, 0xb54: 0x0018, 0xb55: 0x0018, 0xb56: 0x0018, 0xb57: 0x077e, + 0xb58: 0x0018, 0xb59: 0x0018, 0xb5a: 0x0018, 0xb5b: 0x0018, 0xb5c: 0x0018, 0xb5d: 0x0018, + 0xb5e: 0x0018, 0xb5f: 0x0018, 0xb60: 0x0018, 0xb61: 0x0018, 0xb62: 0x0018, 0xb63: 0x0018, + 0xb64: 0x0040, 0xb65: 0x0040, 0xb66: 0x0040, 0xb67: 0x0018, 0xb68: 0x0040, 0xb69: 0x0040, + 0xb6a: 0x0340, 0xb6b: 0x0340, 0xb6c: 0x0340, 0xb6d: 0x0340, 0xb6e: 0x0340, 0xb6f: 0x000a, + 0xb70: 0x0018, 0xb71: 0x0018, 0xb72: 0x0018, 0xb73: 0x1d69, 0xb74: 0x1da1, 0xb75: 0x0018, + 0xb76: 0x1df1, 0xb77: 0x1e29, 0xb78: 0x0018, 0xb79: 0x0018, 0xb7a: 0x0018, 0xb7b: 0x0018, + 0xb7c: 0x1e7a, 0xb7d: 0x0018, 0xb7e: 0x079e, 0xb7f: 0x0018, + // Block 0x2e, offset 0xb80 + 0xb80: 0x0018, 0xb81: 0x0018, 0xb82: 0x0018, 0xb83: 0x0018, 0xb84: 0x0018, 0xb85: 0x0018, + 0xb86: 0x0018, 0xb87: 0x1e92, 0xb88: 0x1eaa, 0xb89: 0x1ec2, 0xb8a: 0x0018, 0xb8b: 0x0018, + 0xb8c: 0x0018, 0xb8d: 0x0018, 0xb8e: 0x0018, 0xb8f: 0x0018, 0xb90: 0x0018, 0xb91: 0x0018, + 0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x1ed9, + 0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018, + 0xb9e: 0x0018, 0xb9f: 0x000a, 0xba0: 0x03c0, 0xba1: 0x0340, 0xba2: 0x0340, 0xba3: 0x0340, + 0xba4: 0x03c0, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0040, 0xba8: 0x0040, 0xba9: 0x0040, + 0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x0340, + 0xbb0: 0x1f41, 0xbb1: 0x0f41, 0xbb2: 0x0040, 0xbb3: 0x0040, 0xbb4: 0x1f51, 0xbb5: 0x1f61, + 0xbb6: 0x1f71, 0xbb7: 0x1f81, 0xbb8: 0x1f91, 0xbb9: 0x1fa1, 0xbba: 0x1fb2, 0xbbb: 0x07bd, + 0xbbc: 0x1fc2, 0xbbd: 0x1fd2, 0xbbe: 0x1fe2, 0xbbf: 0x0f71, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x1f41, 0xbc1: 0x00c9, 0xbc2: 0x0069, 0xbc3: 0x0079, 0xbc4: 0x1f51, 0xbc5: 0x1f61, + 0xbc6: 0x1f71, 0xbc7: 0x1f81, 0xbc8: 0x1f91, 0xbc9: 0x1fa1, 0xbca: 0x1fb2, 0xbcb: 0x07d5, + 0xbcc: 0x1fc2, 0xbcd: 0x1fd2, 0xbce: 0x1fe2, 0xbcf: 0x0040, 0xbd0: 0x0039, 0xbd1: 0x0f09, + 0xbd2: 0x00d9, 0xbd3: 0x0369, 0xbd4: 0x0ff9, 0xbd5: 0x0249, 0xbd6: 0x0f51, 0xbd7: 0x0359, + 0xbd8: 0x0f61, 0xbd9: 0x0f71, 0xbda: 0x0f99, 0xbdb: 0x01d9, 0xbdc: 0x0fa9, 0xbdd: 0x0040, + 0xbde: 0x0040, 0xbdf: 0x0040, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, + 0xbe4: 0x0018, 0xbe5: 0x0018, 0xbe6: 0x0018, 0xbe7: 0x0018, 0xbe8: 0x1ff1, 0xbe9: 0x0018, + 0xbea: 0x0018, 0xbeb: 0x0018, 0xbec: 0x0018, 0xbed: 0x0018, 0xbee: 0x0018, 0xbef: 0x0018, + 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0018, 0xbf4: 0x0018, 0xbf5: 0x0018, + 0xbf6: 0x0018, 0xbf7: 0x0018, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, + 0xbfc: 0x0018, 0xbfd: 0x0018, 0xbfe: 0x0018, 0xbff: 0x0040, + // Block 0x30, offset 0xc00 + 0xc00: 0x07ee, 0xc01: 0x080e, 0xc02: 0x1159, 0xc03: 0x082d, 0xc04: 0x0018, 0xc05: 0x084e, + 0xc06: 0x086e, 0xc07: 0x1011, 0xc08: 0x0018, 0xc09: 0x088d, 0xc0a: 0x0f31, 0xc0b: 0x0249, + 0xc0c: 0x0249, 0xc0d: 0x0249, 0xc0e: 0x0249, 0xc0f: 0x2009, 0xc10: 0x0f41, 0xc11: 0x0f41, + 0xc12: 0x0359, 0xc13: 0x0359, 0xc14: 0x0018, 0xc15: 0x0f71, 0xc16: 0x2021, 0xc17: 0x0018, + 0xc18: 0x0018, 0xc19: 0x0f99, 0xc1a: 0x2039, 0xc1b: 0x0269, 0xc1c: 0x0269, 0xc1d: 0x0269, + 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x2049, 0xc21: 0x08ad, 0xc22: 0x2061, 0xc23: 0x0018, + 0xc24: 0x13d1, 0xc25: 0x0018, 0xc26: 0x2079, 0xc27: 0x0018, 0xc28: 0x13d1, 0xc29: 0x0018, + 0xc2a: 0x0f51, 0xc2b: 0x2091, 0xc2c: 0x0ee9, 0xc2d: 0x1159, 0xc2e: 0x0018, 0xc2f: 0x0f09, + 0xc30: 0x0f09, 0xc31: 0x1199, 0xc32: 0x0040, 0xc33: 0x0f61, 0xc34: 0x00d9, 0xc35: 0x20a9, + 0xc36: 0x20c1, 0xc37: 0x20d9, 0xc38: 0x20f1, 0xc39: 0x0f41, 0xc3a: 0x0018, 0xc3b: 0x08cd, + 0xc3c: 0x2109, 0xc3d: 0x10b1, 0xc3e: 0x10b1, 0xc3f: 0x2109, + // Block 0x31, offset 0xc40 + 0xc40: 0x08ed, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0ef9, + 0xc46: 0x0ef9, 0xc47: 0x0f09, 0xc48: 0x0f41, 0xc49: 0x0259, 0xc4a: 0x0018, 0xc4b: 0x0018, + 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0008, 0xc4f: 0x0018, 0xc50: 0x2121, 0xc51: 0x2151, + 0xc52: 0x2181, 0xc53: 0x21b9, 0xc54: 0x21e9, 0xc55: 0x2219, 0xc56: 0x2249, 0xc57: 0x2279, + 0xc58: 0x22a9, 0xc59: 0x22d9, 0xc5a: 0x2309, 0xc5b: 0x2339, 0xc5c: 0x2369, 0xc5d: 0x2399, + 0xc5e: 0x23c9, 0xc5f: 0x23f9, 0xc60: 0x0f41, 0xc61: 0x2421, 0xc62: 0x0905, 0xc63: 0x2439, + 0xc64: 0x1089, 0xc65: 0x2451, 0xc66: 0x0925, 0xc67: 0x2469, 0xc68: 0x2491, 0xc69: 0x0369, + 0xc6a: 0x24a9, 0xc6b: 0x0945, 0xc6c: 0x0359, 0xc6d: 0x1159, 0xc6e: 0x0ef9, 0xc6f: 0x0f61, + 0xc70: 0x0f41, 0xc71: 0x2421, 0xc72: 0x0965, 0xc73: 0x2439, 0xc74: 0x1089, 0xc75: 0x2451, + 0xc76: 0x0985, 0xc77: 0x2469, 0xc78: 0x2491, 0xc79: 0x0369, 0xc7a: 0x24a9, 0xc7b: 0x09a5, + 0xc7c: 0x0359, 0xc7d: 0x1159, 0xc7e: 0x0ef9, 0xc7f: 0x0f61, + // Block 0x32, offset 0xc80 + 0xc80: 0x0018, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0018, + 0xc86: 0x0018, 0xc87: 0x0018, 0xc88: 0x0018, 0xc89: 0x0018, 0xc8a: 0x0018, 0xc8b: 0x0040, + 0xc8c: 0x0040, 0xc8d: 0x0040, 0xc8e: 0x0040, 0xc8f: 0x0040, 0xc90: 0x0040, 0xc91: 0x0040, + 0xc92: 0x0040, 0xc93: 0x0040, 0xc94: 0x0040, 0xc95: 0x0040, 0xc96: 0x0040, 0xc97: 0x0040, + 0xc98: 0x0040, 0xc99: 0x0040, 0xc9a: 0x0040, 0xc9b: 0x0040, 0xc9c: 0x0040, 0xc9d: 0x0040, + 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x00c9, 0xca1: 0x0069, 0xca2: 0x0079, 0xca3: 0x1f51, + 0xca4: 0x1f61, 0xca5: 0x1f71, 0xca6: 0x1f81, 0xca7: 0x1f91, 0xca8: 0x1fa1, 0xca9: 0x2601, + 0xcaa: 0x2619, 0xcab: 0x2631, 0xcac: 0x2649, 0xcad: 0x2661, 0xcae: 0x2679, 0xcaf: 0x2691, + 0xcb0: 0x26a9, 0xcb1: 0x26c1, 0xcb2: 0x26d9, 0xcb3: 0x26f1, 0xcb4: 0x0a06, 0xcb5: 0x0a26, + 0xcb6: 0x0a46, 0xcb7: 0x0a66, 0xcb8: 0x0a86, 0xcb9: 0x0aa6, 0xcba: 0x0ac6, 0xcbb: 0x0ae6, + 0xcbc: 0x0b06, 0xcbd: 0x270a, 0xcbe: 0x2732, 0xcbf: 0x275a, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x2782, 0xcc1: 0x27aa, 0xcc2: 0x27d2, 0xcc3: 0x27fa, 0xcc4: 0x2822, 0xcc5: 0x284a, + 0xcc6: 0x2872, 0xcc7: 0x289a, 0xcc8: 0x0040, 0xcc9: 0x0040, 0xcca: 0x0040, 0xccb: 0x0040, + 0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040, + 0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040, + 0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0b26, 0xcdd: 0x0b46, + 0xcde: 0x0b66, 0xcdf: 0x0b86, 0xce0: 0x0ba6, 0xce1: 0x0bc6, 0xce2: 0x0be6, 0xce3: 0x0c06, + 0xce4: 0x0c26, 0xce5: 0x0c46, 0xce6: 0x0c66, 0xce7: 0x0c86, 0xce8: 0x0ca6, 0xce9: 0x0cc6, + 0xcea: 0x0ce6, 0xceb: 0x0d06, 0xcec: 0x0d26, 0xced: 0x0d46, 0xcee: 0x0d66, 0xcef: 0x0d86, + 0xcf0: 0x0da6, 0xcf1: 0x0dc6, 0xcf2: 0x0de6, 0xcf3: 0x0e06, 0xcf4: 0x0e26, 0xcf5: 0x0e46, + 0xcf6: 0x0039, 0xcf7: 0x0ee9, 0xcf8: 0x1159, 0xcf9: 0x0ef9, 0xcfa: 0x0f09, 0xcfb: 0x1199, + 0xcfc: 0x0f31, 0xcfd: 0x0249, 0xcfe: 0x0f41, 0xcff: 0x0259, + // Block 0x34, offset 0xd00 + 0xd00: 0x0f51, 0xd01: 0x0359, 0xd02: 0x0f61, 0xd03: 0x0f71, 0xd04: 0x00d9, 0xd05: 0x0f99, + 0xd06: 0x2039, 0xd07: 0x0269, 0xd08: 0x01d9, 0xd09: 0x0fa9, 0xd0a: 0x0fb9, 0xd0b: 0x1089, + 0xd0c: 0x0279, 0xd0d: 0x0369, 0xd0e: 0x0289, 0xd0f: 0x13d1, 0xd10: 0x0039, 0xd11: 0x0ee9, + 0xd12: 0x1159, 0xd13: 0x0ef9, 0xd14: 0x0f09, 0xd15: 0x1199, 0xd16: 0x0f31, 0xd17: 0x0249, + 0xd18: 0x0f41, 0xd19: 0x0259, 0xd1a: 0x0f51, 0xd1b: 0x0359, 0xd1c: 0x0f61, 0xd1d: 0x0f71, + 0xd1e: 0x00d9, 0xd1f: 0x0f99, 0xd20: 0x2039, 0xd21: 0x0269, 0xd22: 0x01d9, 0xd23: 0x0fa9, + 0xd24: 0x0fb9, 0xd25: 0x1089, 0xd26: 0x0279, 0xd27: 0x0369, 0xd28: 0x0289, 0xd29: 0x13d1, + 0xd2a: 0x1f41, 0xd2b: 0x0018, 0xd2c: 0x0018, 0xd2d: 0x0018, 0xd2e: 0x0018, 0xd2f: 0x0018, + 0xd30: 0x0018, 0xd31: 0x0018, 0xd32: 0x0018, 0xd33: 0x0018, 0xd34: 0x0018, 0xd35: 0x0018, + 0xd36: 0x0018, 0xd37: 0x0018, 0xd38: 0x0018, 0xd39: 0x0018, 0xd3a: 0x0018, 0xd3b: 0x0018, + 0xd3c: 0x0018, 0xd3d: 0x0018, 0xd3e: 0x0018, 0xd3f: 0x0018, + // Block 0x35, offset 0xd40 + 0xd40: 0x0008, 0xd41: 0x0008, 0xd42: 0x0008, 0xd43: 0x0008, 0xd44: 0x0008, 0xd45: 0x0008, + 0xd46: 0x0008, 0xd47: 0x0008, 0xd48: 0x0008, 0xd49: 0x0008, 0xd4a: 0x0008, 0xd4b: 0x0008, + 0xd4c: 0x0008, 0xd4d: 0x0008, 0xd4e: 0x0008, 0xd4f: 0x0008, 0xd50: 0x0008, 0xd51: 0x0008, + 0xd52: 0x0008, 0xd53: 0x0008, 0xd54: 0x0008, 0xd55: 0x0008, 0xd56: 0x0008, 0xd57: 0x0008, + 0xd58: 0x0008, 0xd59: 0x0008, 0xd5a: 0x0008, 0xd5b: 0x0008, 0xd5c: 0x0008, 0xd5d: 0x0008, + 0xd5e: 0x0008, 0xd5f: 0x0040, 0xd60: 0xe00d, 0xd61: 0x0008, 0xd62: 0x2971, 0xd63: 0x0ebd, + 0xd64: 0x2989, 0xd65: 0x0008, 0xd66: 0x0008, 0xd67: 0xe07d, 0xd68: 0x0008, 0xd69: 0xe01d, + 0xd6a: 0x0008, 0xd6b: 0xe03d, 0xd6c: 0x0008, 0xd6d: 0x0fe1, 0xd6e: 0x1281, 0xd6f: 0x0fc9, + 0xd70: 0x1141, 0xd71: 0x0008, 0xd72: 0xe00d, 0xd73: 0x0008, 0xd74: 0x0008, 0xd75: 0xe01d, + 0xd76: 0x0008, 0xd77: 0x0008, 0xd78: 0x0008, 0xd79: 0x0008, 0xd7a: 0x0008, 0xd7b: 0x0008, + 0xd7c: 0x0259, 0xd7d: 0x1089, 0xd7e: 0x29a1, 0xd7f: 0x29b9, + // Block 0x36, offset 0xd80 + 0xd80: 0xe00d, 0xd81: 0x0008, 0xd82: 0xe00d, 0xd83: 0x0008, 0xd84: 0xe00d, 0xd85: 0x0008, + 0xd86: 0xe00d, 0xd87: 0x0008, 0xd88: 0xe00d, 0xd89: 0x0008, 0xd8a: 0xe00d, 0xd8b: 0x0008, + 0xd8c: 0xe00d, 0xd8d: 0x0008, 0xd8e: 0xe00d, 0xd8f: 0x0008, 0xd90: 0xe00d, 0xd91: 0x0008, + 0xd92: 0xe00d, 0xd93: 0x0008, 0xd94: 0xe00d, 0xd95: 0x0008, 0xd96: 0xe00d, 0xd97: 0x0008, + 0xd98: 0xe00d, 0xd99: 0x0008, 0xd9a: 0xe00d, 0xd9b: 0x0008, 0xd9c: 0xe00d, 0xd9d: 0x0008, + 0xd9e: 0xe00d, 0xd9f: 0x0008, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0xe00d, 0xda3: 0x0008, + 0xda4: 0x0008, 0xda5: 0x0018, 0xda6: 0x0018, 0xda7: 0x0018, 0xda8: 0x0018, 0xda9: 0x0018, + 0xdaa: 0x0018, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0xe01d, 0xdae: 0x0008, 0xdaf: 0x1308, + 0xdb0: 0x1308, 0xdb1: 0x1308, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0040, 0xdb5: 0x0040, + 0xdb6: 0x0040, 0xdb7: 0x0040, 0xdb8: 0x0040, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, + 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x26fd, 0xdc1: 0x271d, 0xdc2: 0x273d, 0xdc3: 0x275d, 0xdc4: 0x277d, 0xdc5: 0x279d, + 0xdc6: 0x27bd, 0xdc7: 0x27dd, 0xdc8: 0x27fd, 0xdc9: 0x281d, 0xdca: 0x283d, 0xdcb: 0x285d, + 0xdcc: 0x287d, 0xdcd: 0x289d, 0xdce: 0x28bd, 0xdcf: 0x28dd, 0xdd0: 0x28fd, 0xdd1: 0x291d, + 0xdd2: 0x293d, 0xdd3: 0x295d, 0xdd4: 0x297d, 0xdd5: 0x299d, 0xdd6: 0x0040, 0xdd7: 0x0040, + 0xdd8: 0x0040, 0xdd9: 0x0040, 0xdda: 0x0040, 0xddb: 0x0040, 0xddc: 0x0040, 0xddd: 0x0040, + 0xdde: 0x0040, 0xddf: 0x0040, 0xde0: 0x0040, 0xde1: 0x0040, 0xde2: 0x0040, 0xde3: 0x0040, + 0xde4: 0x0040, 0xde5: 0x0040, 0xde6: 0x0040, 0xde7: 0x0040, 0xde8: 0x0040, 0xde9: 0x0040, + 0xdea: 0x0040, 0xdeb: 0x0040, 0xdec: 0x0040, 0xded: 0x0040, 0xdee: 0x0040, 0xdef: 0x0040, + 0xdf0: 0x0040, 0xdf1: 0x0040, 0xdf2: 0x0040, 0xdf3: 0x0040, 0xdf4: 0x0040, 0xdf5: 0x0040, + 0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0040, 0xdfa: 0x0040, 0xdfb: 0x0040, + 0xdfc: 0x0040, 0xdfd: 0x0040, 0xdfe: 0x0040, 0xdff: 0x0040, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, 0xe01: 0x0018, 0xe02: 0x29d1, 0xe03: 0x0018, 0xe04: 0x0018, 0xe05: 0x0008, + 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0018, 0xe09: 0x0018, 0xe0a: 0x0018, 0xe0b: 0x0018, + 0xe0c: 0x0018, 0xe0d: 0x0018, 0xe0e: 0x0018, 0xe0f: 0x0018, 0xe10: 0x0018, 0xe11: 0x0018, + 0xe12: 0x0018, 0xe13: 0x0018, 0xe14: 0x0018, 0xe15: 0x0018, 0xe16: 0x0018, 0xe17: 0x0018, + 0xe18: 0x0018, 0xe19: 0x0018, 0xe1a: 0x0018, 0xe1b: 0x0018, 0xe1c: 0x0018, 0xe1d: 0x0018, + 0xe1e: 0x0018, 0xe1f: 0x0018, 0xe20: 0x0018, 0xe21: 0x0018, 0xe22: 0x0018, 0xe23: 0x0018, + 0xe24: 0x0018, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x1308, 0xe2b: 0x1308, 0xe2c: 0x1308, 0xe2d: 0x1308, 0xe2e: 0x1018, 0xe2f: 0x1018, + 0xe30: 0x0018, 0xe31: 0x0018, 0xe32: 0x0018, 0xe33: 0x0018, 0xe34: 0x0018, 0xe35: 0x0018, + 0xe36: 0xe125, 0xe37: 0x0018, 0xe38: 0x29bd, 0xe39: 0x29dd, 0xe3a: 0x29fd, 0xe3b: 0x0018, + 0xe3c: 0x0008, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + // Block 0x39, offset 0xe40 + 0xe40: 0x2b3d, 0xe41: 0x2b5d, 0xe42: 0x2b7d, 0xe43: 0x2b9d, 0xe44: 0x2bbd, 0xe45: 0x2bdd, + 0xe46: 0x2bdd, 0xe47: 0x2bdd, 0xe48: 0x2bfd, 0xe49: 0x2bfd, 0xe4a: 0x2bfd, 0xe4b: 0x2bfd, + 0xe4c: 0x2c1d, 0xe4d: 0x2c1d, 0xe4e: 0x2c1d, 0xe4f: 0x2c3d, 0xe50: 0x2c5d, 0xe51: 0x2c5d, + 0xe52: 0x2a7d, 0xe53: 0x2a7d, 0xe54: 0x2c5d, 0xe55: 0x2c5d, 0xe56: 0x2c7d, 0xe57: 0x2c7d, + 0xe58: 0x2c5d, 0xe59: 0x2c5d, 0xe5a: 0x2a7d, 0xe5b: 0x2a7d, 0xe5c: 0x2c5d, 0xe5d: 0x2c5d, + 0xe5e: 0x2c3d, 0xe5f: 0x2c3d, 0xe60: 0x2c9d, 0xe61: 0x2c9d, 0xe62: 0x2cbd, 0xe63: 0x2cbd, + 0xe64: 0x0040, 0xe65: 0x2cdd, 0xe66: 0x2cfd, 0xe67: 0x2d1d, 0xe68: 0x2d1d, 0xe69: 0x2d3d, + 0xe6a: 0x2d5d, 0xe6b: 0x2d7d, 0xe6c: 0x2d9d, 0xe6d: 0x2dbd, 0xe6e: 0x2ddd, 0xe6f: 0x2dfd, + 0xe70: 0x2e1d, 0xe71: 0x2e3d, 0xe72: 0x2e3d, 0xe73: 0x2e5d, 0xe74: 0x2e7d, 0xe75: 0x2e7d, + 0xe76: 0x2e9d, 0xe77: 0x2ebd, 0xe78: 0x2e5d, 0xe79: 0x2edd, 0xe7a: 0x2efd, 0xe7b: 0x2edd, + 0xe7c: 0x2e5d, 0xe7d: 0x2f1d, 0xe7e: 0x2f3d, 0xe7f: 0x2f5d, + // Block 0x3a, offset 0xe80 + 0xe80: 0x2f7d, 0xe81: 0x2f9d, 0xe82: 0x2cfd, 0xe83: 0x2cdd, 0xe84: 0x2fbd, 0xe85: 0x2fdd, + 0xe86: 0x2ffd, 0xe87: 0x301d, 0xe88: 0x303d, 0xe89: 0x305d, 0xe8a: 0x307d, 0xe8b: 0x309d, + 0xe8c: 0x30bd, 0xe8d: 0x30dd, 0xe8e: 0x30fd, 0xe8f: 0x0040, 0xe90: 0x0018, 0xe91: 0x0018, + 0xe92: 0x311d, 0xe93: 0x313d, 0xe94: 0x315d, 0xe95: 0x317d, 0xe96: 0x319d, 0xe97: 0x31bd, + 0xe98: 0x31dd, 0xe99: 0x31fd, 0xe9a: 0x321d, 0xe9b: 0x323d, 0xe9c: 0x315d, 0xe9d: 0x325d, + 0xe9e: 0x327d, 0xe9f: 0x329d, 0xea0: 0x0008, 0xea1: 0x0008, 0xea2: 0x0008, 0xea3: 0x0008, + 0xea4: 0x0008, 0xea5: 0x0008, 0xea6: 0x0008, 0xea7: 0x0008, 0xea8: 0x0008, 0xea9: 0x0008, + 0xeaa: 0x0008, 0xeab: 0x0008, 0xeac: 0x0008, 0xead: 0x0008, 0xeae: 0x0008, 0xeaf: 0x0008, + 0xeb0: 0x0008, 0xeb1: 0x0008, 0xeb2: 0x0008, 0xeb3: 0x0008, 0xeb4: 0x0008, 0xeb5: 0x0008, + 0xeb6: 0x0008, 0xeb7: 0x0008, 0xeb8: 0x0008, 0xeb9: 0x0008, 0xeba: 0x0008, 0xebb: 0x0040, + 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040, + // Block 0x3b, offset 0xec0 + 0xec0: 0x36a2, 0xec1: 0x36d2, 0xec2: 0x3702, 0xec3: 0x3732, 0xec4: 0x32bd, 0xec5: 0x32dd, + 0xec6: 0x32fd, 0xec7: 0x331d, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018, + 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x333d, 0xed1: 0x3761, + 0xed2: 0x3779, 0xed3: 0x3791, 0xed4: 0x37a9, 0xed5: 0x37c1, 0xed6: 0x37d9, 0xed7: 0x37f1, + 0xed8: 0x3809, 0xed9: 0x3821, 0xeda: 0x3839, 0xedb: 0x3851, 0xedc: 0x3869, 0xedd: 0x3881, + 0xede: 0x3899, 0xedf: 0x38b1, 0xee0: 0x335d, 0xee1: 0x337d, 0xee2: 0x339d, 0xee3: 0x33bd, + 0xee4: 0x33dd, 0xee5: 0x33dd, 0xee6: 0x33fd, 0xee7: 0x341d, 0xee8: 0x343d, 0xee9: 0x345d, + 0xeea: 0x347d, 0xeeb: 0x349d, 0xeec: 0x34bd, 0xeed: 0x34dd, 0xeee: 0x34fd, 0xeef: 0x351d, + 0xef0: 0x353d, 0xef1: 0x355d, 0xef2: 0x357d, 0xef3: 0x359d, 0xef4: 0x35bd, 0xef5: 0x35dd, + 0xef6: 0x35fd, 0xef7: 0x361d, 0xef8: 0x363d, 0xef9: 0x365d, 0xefa: 0x367d, 0xefb: 0x369d, + 0xefc: 0x38c9, 0xefd: 0x3901, 0xefe: 0x36bd, 0xeff: 0x0018, + // Block 0x3c, offset 0xf00 + 0xf00: 0x36dd, 0xf01: 0x36fd, 0xf02: 0x371d, 0xf03: 0x373d, 0xf04: 0x375d, 0xf05: 0x377d, + 0xf06: 0x379d, 0xf07: 0x37bd, 0xf08: 0x37dd, 0xf09: 0x37fd, 0xf0a: 0x381d, 0xf0b: 0x383d, + 0xf0c: 0x385d, 0xf0d: 0x387d, 0xf0e: 0x389d, 0xf0f: 0x38bd, 0xf10: 0x38dd, 0xf11: 0x38fd, + 0xf12: 0x391d, 0xf13: 0x393d, 0xf14: 0x395d, 0xf15: 0x397d, 0xf16: 0x399d, 0xf17: 0x39bd, + 0xf18: 0x39dd, 0xf19: 0x39fd, 0xf1a: 0x3a1d, 0xf1b: 0x3a3d, 0xf1c: 0x3a5d, 0xf1d: 0x3a7d, + 0xf1e: 0x3a9d, 0xf1f: 0x3abd, 0xf20: 0x3add, 0xf21: 0x3afd, 0xf22: 0x3b1d, 0xf23: 0x3b3d, + 0xf24: 0x3b5d, 0xf25: 0x3b7d, 0xf26: 0x127d, 0xf27: 0x3b9d, 0xf28: 0x3bbd, 0xf29: 0x3bdd, + 0xf2a: 0x3bfd, 0xf2b: 0x3c1d, 0xf2c: 0x3c3d, 0xf2d: 0x3c5d, 0xf2e: 0x239d, 0xf2f: 0x3c7d, + 0xf30: 0x3c9d, 0xf31: 0x3939, 0xf32: 0x3951, 0xf33: 0x3969, 0xf34: 0x3981, 0xf35: 0x3999, + 0xf36: 0x39b1, 0xf37: 0x39c9, 0xf38: 0x39e1, 0xf39: 0x39f9, 0xf3a: 0x3a11, 0xf3b: 0x3a29, + 0xf3c: 0x3a41, 0xf3d: 0x3a59, 0xf3e: 0x3a71, 0xf3f: 0x3a89, + // Block 0x3d, offset 0xf40 + 0xf40: 0x3aa1, 0xf41: 0x3ac9, 0xf42: 0x3af1, 0xf43: 0x3b19, 0xf44: 0x3b41, 0xf45: 0x3b69, + 0xf46: 0x3b91, 0xf47: 0x3bb9, 0xf48: 0x3be1, 0xf49: 0x3c09, 0xf4a: 0x3c39, 0xf4b: 0x3c69, + 0xf4c: 0x3c99, 0xf4d: 0x3cbd, 0xf4e: 0x3cb1, 0xf4f: 0x3cdd, 0xf50: 0x3cfd, 0xf51: 0x3d15, + 0xf52: 0x3d2d, 0xf53: 0x3d45, 0xf54: 0x3d5d, 0xf55: 0x3d5d, 0xf56: 0x3d45, 0xf57: 0x3d75, + 0xf58: 0x07bd, 0xf59: 0x3d8d, 0xf5a: 0x3da5, 0xf5b: 0x3dbd, 0xf5c: 0x3dd5, 0xf5d: 0x3ded, + 0xf5e: 0x3e05, 0xf5f: 0x3e1d, 0xf60: 0x3e35, 0xf61: 0x3e4d, 0xf62: 0x3e65, 0xf63: 0x3e7d, + 0xf64: 0x3e95, 0xf65: 0x3e95, 0xf66: 0x3ead, 0xf67: 0x3ead, 0xf68: 0x3ec5, 0xf69: 0x3ec5, + 0xf6a: 0x3edd, 0xf6b: 0x3ef5, 0xf6c: 0x3f0d, 0xf6d: 0x3f25, 0xf6e: 0x3f3d, 0xf6f: 0x3f3d, + 0xf70: 0x3f55, 0xf71: 0x3f55, 0xf72: 0x3f55, 0xf73: 0x3f6d, 0xf74: 0x3f85, 0xf75: 0x3f9d, + 0xf76: 0x3fb5, 0xf77: 0x3f9d, 0xf78: 0x3fcd, 0xf79: 0x3fe5, 0xf7a: 0x3f6d, 0xf7b: 0x3ffd, + 0xf7c: 0x4015, 0xf7d: 0x4015, 0xf7e: 0x4015, 0xf7f: 0x0040, + // Block 0x3e, offset 0xf80 + 0xf80: 0x3cc9, 0xf81: 0x3d31, 0xf82: 0x3d99, 0xf83: 0x3e01, 0xf84: 0x3e51, 0xf85: 0x3eb9, + 0xf86: 0x3f09, 0xf87: 0x3f59, 0xf88: 0x3fd9, 0xf89: 0x4041, 0xf8a: 0x4091, 0xf8b: 0x40e1, + 0xf8c: 0x4131, 0xf8d: 0x4199, 0xf8e: 0x4201, 0xf8f: 0x4251, 0xf90: 0x42a1, 0xf91: 0x42d9, + 0xf92: 0x4329, 0xf93: 0x4391, 0xf94: 0x43f9, 0xf95: 0x4431, 0xf96: 0x44b1, 0xf97: 0x4549, + 0xf98: 0x45c9, 0xf99: 0x4619, 0xf9a: 0x4699, 0xf9b: 0x4719, 0xf9c: 0x4781, 0xf9d: 0x47d1, + 0xf9e: 0x4821, 0xf9f: 0x4871, 0xfa0: 0x48d9, 0xfa1: 0x4959, 0xfa2: 0x49c1, 0xfa3: 0x4a11, + 0xfa4: 0x4a61, 0xfa5: 0x4ab1, 0xfa6: 0x4ae9, 0xfa7: 0x4b21, 0xfa8: 0x4b59, 0xfa9: 0x4b91, + 0xfaa: 0x4be1, 0xfab: 0x4c31, 0xfac: 0x4cb1, 0xfad: 0x4d01, 0xfae: 0x4d69, 0xfaf: 0x4de9, + 0xfb0: 0x4e39, 0xfb1: 0x4e71, 0xfb2: 0x4ea9, 0xfb3: 0x4f29, 0xfb4: 0x4f91, 0xfb5: 0x5011, + 0xfb6: 0x5061, 0xfb7: 0x50e1, 0xfb8: 0x5119, 0xfb9: 0x5169, 0xfba: 0x51b9, 0xfbb: 0x5209, + 0xfbc: 0x5259, 0xfbd: 0x52a9, 0xfbe: 0x5311, 0xfbf: 0x5361, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x5399, 0xfc1: 0x53e9, 0xfc2: 0x5439, 0xfc3: 0x5489, 0xfc4: 0x54f1, 0xfc5: 0x5541, + 0xfc6: 0x5591, 0xfc7: 0x55e1, 0xfc8: 0x5661, 0xfc9: 0x56c9, 0xfca: 0x5701, 0xfcb: 0x5781, + 0xfcc: 0x57b9, 0xfcd: 0x5821, 0xfce: 0x5889, 0xfcf: 0x58d9, 0xfd0: 0x5929, 0xfd1: 0x5979, + 0xfd2: 0x59e1, 0xfd3: 0x5a19, 0xfd4: 0x5a69, 0xfd5: 0x5ad1, 0xfd6: 0x5b09, 0xfd7: 0x5b89, + 0xfd8: 0x5bd9, 0xfd9: 0x5c01, 0xfda: 0x5c29, 0xfdb: 0x5c51, 0xfdc: 0x5c79, 0xfdd: 0x5ca1, + 0xfde: 0x5cc9, 0xfdf: 0x5cf1, 0xfe0: 0x5d19, 0xfe1: 0x5d41, 0xfe2: 0x5d69, 0xfe3: 0x5d99, + 0xfe4: 0x5dc9, 0xfe5: 0x5df9, 0xfe6: 0x5e29, 0xfe7: 0x5e59, 0xfe8: 0x5e89, 0xfe9: 0x5eb9, + 0xfea: 0x5ee9, 0xfeb: 0x5f19, 0xfec: 0x5f49, 0xfed: 0x5f79, 0xfee: 0x5fa9, 0xfef: 0x5fd9, + 0xff0: 0x6009, 0xff1: 0x402d, 0xff2: 0x6039, 0xff3: 0x6051, 0xff4: 0x404d, 0xff5: 0x6069, + 0xff6: 0x6081, 0xff7: 0x6099, 0xff8: 0x406d, 0xff9: 0x406d, 0xffa: 0x60b1, 0xffb: 0x60c9, + 0xffc: 0x6101, 0xffd: 0x6139, 0xffe: 0x6171, 0xfff: 0x61a9, + // Block 0x40, offset 0x1000 + 0x1000: 0x6211, 0x1001: 0x6229, 0x1002: 0x408d, 0x1003: 0x6241, 0x1004: 0x6259, 0x1005: 0x6271, + 0x1006: 0x6289, 0x1007: 0x62a1, 0x1008: 0x40ad, 0x1009: 0x62b9, 0x100a: 0x62e1, 0x100b: 0x62f9, + 0x100c: 0x40cd, 0x100d: 0x40cd, 0x100e: 0x6311, 0x100f: 0x6329, 0x1010: 0x6341, 0x1011: 0x40ed, + 0x1012: 0x410d, 0x1013: 0x412d, 0x1014: 0x414d, 0x1015: 0x416d, 0x1016: 0x6359, 0x1017: 0x6371, + 0x1018: 0x6389, 0x1019: 0x63a1, 0x101a: 0x63b9, 0x101b: 0x418d, 0x101c: 0x63d1, 0x101d: 0x63e9, + 0x101e: 0x6401, 0x101f: 0x41ad, 0x1020: 0x41cd, 0x1021: 0x6419, 0x1022: 0x41ed, 0x1023: 0x420d, + 0x1024: 0x422d, 0x1025: 0x6431, 0x1026: 0x424d, 0x1027: 0x6449, 0x1028: 0x6479, 0x1029: 0x6211, + 0x102a: 0x426d, 0x102b: 0x428d, 0x102c: 0x42ad, 0x102d: 0x42cd, 0x102e: 0x64b1, 0x102f: 0x64f1, + 0x1030: 0x6539, 0x1031: 0x6551, 0x1032: 0x42ed, 0x1033: 0x6569, 0x1034: 0x6581, 0x1035: 0x6599, + 0x1036: 0x430d, 0x1037: 0x65b1, 0x1038: 0x65c9, 0x1039: 0x65b1, 0x103a: 0x65e1, 0x103b: 0x65f9, + 0x103c: 0x432d, 0x103d: 0x6611, 0x103e: 0x6629, 0x103f: 0x6611, + // Block 0x41, offset 0x1040 + 0x1040: 0x434d, 0x1041: 0x436d, 0x1042: 0x0040, 0x1043: 0x6641, 0x1044: 0x6659, 0x1045: 0x6671, + 0x1046: 0x6689, 0x1047: 0x0040, 0x1048: 0x66c1, 0x1049: 0x66d9, 0x104a: 0x66f1, 0x104b: 0x6709, + 0x104c: 0x6721, 0x104d: 0x6739, 0x104e: 0x6401, 0x104f: 0x6751, 0x1050: 0x6769, 0x1051: 0x6781, + 0x1052: 0x438d, 0x1053: 0x6799, 0x1054: 0x6289, 0x1055: 0x43ad, 0x1056: 0x43cd, 0x1057: 0x67b1, + 0x1058: 0x0040, 0x1059: 0x43ed, 0x105a: 0x67c9, 0x105b: 0x67e1, 0x105c: 0x67f9, 0x105d: 0x6811, + 0x105e: 0x6829, 0x105f: 0x6859, 0x1060: 0x6889, 0x1061: 0x68b1, 0x1062: 0x68d9, 0x1063: 0x6901, + 0x1064: 0x6929, 0x1065: 0x6951, 0x1066: 0x6979, 0x1067: 0x69a1, 0x1068: 0x69c9, 0x1069: 0x69f1, + 0x106a: 0x6a21, 0x106b: 0x6a51, 0x106c: 0x6a81, 0x106d: 0x6ab1, 0x106e: 0x6ae1, 0x106f: 0x6b11, + 0x1070: 0x6b41, 0x1071: 0x6b71, 0x1072: 0x6ba1, 0x1073: 0x6bd1, 0x1074: 0x6c01, 0x1075: 0x6c31, + 0x1076: 0x6c61, 0x1077: 0x6c91, 0x1078: 0x6cc1, 0x1079: 0x6cf1, 0x107a: 0x6d21, 0x107b: 0x6d51, + 0x107c: 0x6d81, 0x107d: 0x6db1, 0x107e: 0x6de1, 0x107f: 0x440d, + // Block 0x42, offset 0x1080 + 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008, + 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008, + 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008, + 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008, + 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008, + 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008, + 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008, + 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x1308, + 0x10b0: 0x1318, 0x10b1: 0x1318, 0x10b2: 0x1318, 0x10b3: 0x0018, 0x10b4: 0x1308, 0x10b5: 0x1308, + 0x10b6: 0x1308, 0x10b7: 0x1308, 0x10b8: 0x1308, 0x10b9: 0x1308, 0x10ba: 0x1308, 0x10bb: 0x1308, + 0x10bc: 0x1308, 0x10bd: 0x1308, 0x10be: 0x0018, 0x10bf: 0x0008, + // Block 0x43, offset 0x10c0 + 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, + 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, + 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, + 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, + 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x0ea1, 0x10dd: 0x6e11, + 0x10de: 0x1308, 0x10df: 0x1308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008, + 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008, + 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008, + 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008, + 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008, + 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008, + // Block 0x44, offset 0x1100 + 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018, + 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018, + 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018, + 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008, + 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008, + 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008, + 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, + 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008, + 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008, + 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008, + 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008, + // Block 0x45, offset 0x1140 + 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, + 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, + 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, + 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, + 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008, + 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008, + 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, + 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, + 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, + 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d, + 0x117c: 0x0008, 0x117d: 0x442d, 0x117e: 0xe00d, 0x117f: 0x0008, + // Block 0x46, offset 0x1180 + 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, + 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d, + 0x118c: 0x0008, 0x118d: 0x11d9, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, + 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, + 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, + 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, + 0x11aa: 0x6e29, 0x11ab: 0x1029, 0x11ac: 0x11c1, 0x11ad: 0x6e41, 0x11ae: 0x1221, 0x11af: 0x0040, + 0x11b0: 0x6e59, 0x11b1: 0x6e71, 0x11b2: 0x1239, 0x11b3: 0x444d, 0x11b4: 0xe00d, 0x11b5: 0x0008, + 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0x0040, 0x11b9: 0x0040, 0x11ba: 0x0040, 0x11bb: 0x0040, + 0x11bc: 0x0040, 0x11bd: 0x0040, 0x11be: 0x0040, 0x11bf: 0x0040, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x64d5, 0x11c1: 0x64f5, 0x11c2: 0x6515, 0x11c3: 0x6535, 0x11c4: 0x6555, 0x11c5: 0x6575, + 0x11c6: 0x6595, 0x11c7: 0x65b5, 0x11c8: 0x65d5, 0x11c9: 0x65f5, 0x11ca: 0x6615, 0x11cb: 0x6635, + 0x11cc: 0x6655, 0x11cd: 0x6675, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x6695, 0x11d1: 0x0008, + 0x11d2: 0x66b5, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x66d5, 0x11d6: 0x66f5, 0x11d7: 0x6715, + 0x11d8: 0x6735, 0x11d9: 0x6755, 0x11da: 0x6775, 0x11db: 0x6795, 0x11dc: 0x67b5, 0x11dd: 0x67d5, + 0x11de: 0x67f5, 0x11df: 0x0008, 0x11e0: 0x6815, 0x11e1: 0x0008, 0x11e2: 0x6835, 0x11e3: 0x0008, + 0x11e4: 0x0008, 0x11e5: 0x6855, 0x11e6: 0x6875, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008, + 0x11ea: 0x6895, 0x11eb: 0x68b5, 0x11ec: 0x68d5, 0x11ed: 0x68f5, 0x11ee: 0x6915, 0x11ef: 0x6935, + 0x11f0: 0x6955, 0x11f1: 0x6975, 0x11f2: 0x6995, 0x11f3: 0x69b5, 0x11f4: 0x69d5, 0x11f5: 0x69f5, + 0x11f6: 0x6a15, 0x11f7: 0x6a35, 0x11f8: 0x6a55, 0x11f9: 0x6a75, 0x11fa: 0x6a95, 0x11fb: 0x6ab5, + 0x11fc: 0x6ad5, 0x11fd: 0x6af5, 0x11fe: 0x6b15, 0x11ff: 0x6b35, + // Block 0x48, offset 0x1200 + 0x1200: 0x7a95, 0x1201: 0x7ab5, 0x1202: 0x7ad5, 0x1203: 0x7af5, 0x1204: 0x7b15, 0x1205: 0x7b35, + 0x1206: 0x7b55, 0x1207: 0x7b75, 0x1208: 0x7b95, 0x1209: 0x7bb5, 0x120a: 0x7bd5, 0x120b: 0x7bf5, + 0x120c: 0x7c15, 0x120d: 0x7c35, 0x120e: 0x7c55, 0x120f: 0x6ec9, 0x1210: 0x6ef1, 0x1211: 0x6f19, + 0x1212: 0x7c75, 0x1213: 0x7c95, 0x1214: 0x7cb5, 0x1215: 0x6f41, 0x1216: 0x6f69, 0x1217: 0x6f91, + 0x1218: 0x7cd5, 0x1219: 0x7cf5, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, + 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, + 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, + 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, + 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040, + 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, + 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, + // Block 0x49, offset 0x1240 + 0x1240: 0x6fb9, 0x1241: 0x6fd1, 0x1242: 0x6fe9, 0x1243: 0x7d15, 0x1244: 0x7d35, 0x1245: 0x7001, + 0x1246: 0x7001, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040, + 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040, + 0x1252: 0x0040, 0x1253: 0x7019, 0x1254: 0x7041, 0x1255: 0x7069, 0x1256: 0x7091, 0x1257: 0x70b9, + 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x70e1, + 0x125e: 0x1308, 0x125f: 0x7109, 0x1260: 0x7131, 0x1261: 0x20a9, 0x1262: 0x20f1, 0x1263: 0x7149, + 0x1264: 0x7161, 0x1265: 0x7179, 0x1266: 0x7191, 0x1267: 0x71a9, 0x1268: 0x71c1, 0x1269: 0x1fb2, + 0x126a: 0x71d9, 0x126b: 0x7201, 0x126c: 0x7229, 0x126d: 0x7261, 0x126e: 0x7299, 0x126f: 0x72c1, + 0x1270: 0x72e9, 0x1271: 0x7311, 0x1272: 0x7339, 0x1273: 0x7361, 0x1274: 0x7389, 0x1275: 0x73b1, + 0x1276: 0x73d9, 0x1277: 0x0040, 0x1278: 0x7401, 0x1279: 0x7429, 0x127a: 0x7451, 0x127b: 0x7479, + 0x127c: 0x74a1, 0x127d: 0x0040, 0x127e: 0x74c9, 0x127f: 0x0040, + // Block 0x4a, offset 0x1280 + 0x1280: 0x74f1, 0x1281: 0x7519, 0x1282: 0x0040, 0x1283: 0x7541, 0x1284: 0x7569, 0x1285: 0x0040, + 0x1286: 0x7591, 0x1287: 0x75b9, 0x1288: 0x75e1, 0x1289: 0x7609, 0x128a: 0x7631, 0x128b: 0x7659, + 0x128c: 0x7681, 0x128d: 0x76a9, 0x128e: 0x76d1, 0x128f: 0x76f9, 0x1290: 0x7721, 0x1291: 0x7721, + 0x1292: 0x7739, 0x1293: 0x7739, 0x1294: 0x7739, 0x1295: 0x7739, 0x1296: 0x7751, 0x1297: 0x7751, + 0x1298: 0x7751, 0x1299: 0x7751, 0x129a: 0x7769, 0x129b: 0x7769, 0x129c: 0x7769, 0x129d: 0x7769, + 0x129e: 0x7781, 0x129f: 0x7781, 0x12a0: 0x7781, 0x12a1: 0x7781, 0x12a2: 0x7799, 0x12a3: 0x7799, + 0x12a4: 0x7799, 0x12a5: 0x7799, 0x12a6: 0x77b1, 0x12a7: 0x77b1, 0x12a8: 0x77b1, 0x12a9: 0x77b1, + 0x12aa: 0x77c9, 0x12ab: 0x77c9, 0x12ac: 0x77c9, 0x12ad: 0x77c9, 0x12ae: 0x77e1, 0x12af: 0x77e1, + 0x12b0: 0x77e1, 0x12b1: 0x77e1, 0x12b2: 0x77f9, 0x12b3: 0x77f9, 0x12b4: 0x77f9, 0x12b5: 0x77f9, + 0x12b6: 0x7811, 0x12b7: 0x7811, 0x12b8: 0x7811, 0x12b9: 0x7811, 0x12ba: 0x7829, 0x12bb: 0x7829, + 0x12bc: 0x7829, 0x12bd: 0x7829, 0x12be: 0x7841, 0x12bf: 0x7841, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x7841, 0x12c1: 0x7841, 0x12c2: 0x7859, 0x12c3: 0x7859, 0x12c4: 0x7871, 0x12c5: 0x7871, + 0x12c6: 0x7889, 0x12c7: 0x7889, 0x12c8: 0x78a1, 0x12c9: 0x78a1, 0x12ca: 0x78b9, 0x12cb: 0x78b9, + 0x12cc: 0x78d1, 0x12cd: 0x78d1, 0x12ce: 0x78e9, 0x12cf: 0x78e9, 0x12d0: 0x78e9, 0x12d1: 0x78e9, + 0x12d2: 0x7901, 0x12d3: 0x7901, 0x12d4: 0x7901, 0x12d5: 0x7901, 0x12d6: 0x7919, 0x12d7: 0x7919, + 0x12d8: 0x7919, 0x12d9: 0x7919, 0x12da: 0x7931, 0x12db: 0x7931, 0x12dc: 0x7931, 0x12dd: 0x7931, + 0x12de: 0x7949, 0x12df: 0x7949, 0x12e0: 0x7961, 0x12e1: 0x7961, 0x12e2: 0x7961, 0x12e3: 0x7961, + 0x12e4: 0x7979, 0x12e5: 0x7979, 0x12e6: 0x7991, 0x12e7: 0x7991, 0x12e8: 0x7991, 0x12e9: 0x7991, + 0x12ea: 0x79a9, 0x12eb: 0x79a9, 0x12ec: 0x79a9, 0x12ed: 0x79a9, 0x12ee: 0x79c1, 0x12ef: 0x79c1, + 0x12f0: 0x79d9, 0x12f1: 0x79d9, 0x12f2: 0x0018, 0x12f3: 0x0018, 0x12f4: 0x0018, 0x12f5: 0x0018, + 0x12f6: 0x0018, 0x12f7: 0x0018, 0x12f8: 0x0018, 0x12f9: 0x0018, 0x12fa: 0x0018, 0x12fb: 0x0018, + 0x12fc: 0x0018, 0x12fd: 0x0018, 0x12fe: 0x0018, 0x12ff: 0x0018, + // Block 0x4c, offset 0x1300 + 0x1300: 0x0018, 0x1301: 0x0018, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040, + 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040, + 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040, + 0x1312: 0x0040, 0x1313: 0x79f1, 0x1314: 0x79f1, 0x1315: 0x79f1, 0x1316: 0x79f1, 0x1317: 0x7a09, + 0x1318: 0x7a09, 0x1319: 0x7a21, 0x131a: 0x7a21, 0x131b: 0x7a39, 0x131c: 0x7a39, 0x131d: 0x0479, + 0x131e: 0x7a51, 0x131f: 0x7a51, 0x1320: 0x7a69, 0x1321: 0x7a69, 0x1322: 0x7a81, 0x1323: 0x7a81, + 0x1324: 0x7a99, 0x1325: 0x7a99, 0x1326: 0x7a99, 0x1327: 0x7a99, 0x1328: 0x7ab1, 0x1329: 0x7ab1, + 0x132a: 0x7ac9, 0x132b: 0x7ac9, 0x132c: 0x7af1, 0x132d: 0x7af1, 0x132e: 0x7b19, 0x132f: 0x7b19, + 0x1330: 0x7b41, 0x1331: 0x7b41, 0x1332: 0x7b69, 0x1333: 0x7b69, 0x1334: 0x7b91, 0x1335: 0x7b91, + 0x1336: 0x7bb9, 0x1337: 0x7bb9, 0x1338: 0x7bb9, 0x1339: 0x7be1, 0x133a: 0x7be1, 0x133b: 0x7be1, + 0x133c: 0x7c09, 0x133d: 0x7c09, 0x133e: 0x7c09, 0x133f: 0x7c09, + // Block 0x4d, offset 0x1340 + 0x1340: 0x85f9, 0x1341: 0x8621, 0x1342: 0x8649, 0x1343: 0x8671, 0x1344: 0x8699, 0x1345: 0x86c1, + 0x1346: 0x86e9, 0x1347: 0x8711, 0x1348: 0x8739, 0x1349: 0x8761, 0x134a: 0x8789, 0x134b: 0x87b1, + 0x134c: 0x87d9, 0x134d: 0x8801, 0x134e: 0x8829, 0x134f: 0x8851, 0x1350: 0x8879, 0x1351: 0x88a1, + 0x1352: 0x88c9, 0x1353: 0x88f1, 0x1354: 0x8919, 0x1355: 0x8941, 0x1356: 0x8969, 0x1357: 0x8991, + 0x1358: 0x89b9, 0x1359: 0x89e1, 0x135a: 0x8a09, 0x135b: 0x8a31, 0x135c: 0x8a59, 0x135d: 0x8a81, + 0x135e: 0x8aaa, 0x135f: 0x8ada, 0x1360: 0x8b0a, 0x1361: 0x8b3a, 0x1362: 0x8b6a, 0x1363: 0x8b9a, + 0x1364: 0x8bc9, 0x1365: 0x8bf1, 0x1366: 0x7c71, 0x1367: 0x8c19, 0x1368: 0x7be1, 0x1369: 0x7c99, + 0x136a: 0x8c41, 0x136b: 0x8c69, 0x136c: 0x7d39, 0x136d: 0x8c91, 0x136e: 0x7d61, 0x136f: 0x7d89, + 0x1370: 0x8cb9, 0x1371: 0x8ce1, 0x1372: 0x7e29, 0x1373: 0x8d09, 0x1374: 0x7e51, 0x1375: 0x7e79, + 0x1376: 0x8d31, 0x1377: 0x8d59, 0x1378: 0x7ec9, 0x1379: 0x8d81, 0x137a: 0x7ef1, 0x137b: 0x7f19, + 0x137c: 0x83a1, 0x137d: 0x83c9, 0x137e: 0x8441, 0x137f: 0x8469, + // Block 0x4e, offset 0x1380 + 0x1380: 0x8491, 0x1381: 0x8531, 0x1382: 0x8559, 0x1383: 0x8581, 0x1384: 0x85a9, 0x1385: 0x8649, + 0x1386: 0x8671, 0x1387: 0x8699, 0x1388: 0x8da9, 0x1389: 0x8739, 0x138a: 0x8dd1, 0x138b: 0x8df9, + 0x138c: 0x8829, 0x138d: 0x8e21, 0x138e: 0x8851, 0x138f: 0x8879, 0x1390: 0x8a81, 0x1391: 0x8e49, + 0x1392: 0x8e71, 0x1393: 0x89b9, 0x1394: 0x8e99, 0x1395: 0x89e1, 0x1396: 0x8a09, 0x1397: 0x7c21, + 0x1398: 0x7c49, 0x1399: 0x8ec1, 0x139a: 0x7c71, 0x139b: 0x8ee9, 0x139c: 0x7cc1, 0x139d: 0x7ce9, + 0x139e: 0x7d11, 0x139f: 0x7d39, 0x13a0: 0x8f11, 0x13a1: 0x7db1, 0x13a2: 0x7dd9, 0x13a3: 0x7e01, + 0x13a4: 0x7e29, 0x13a5: 0x8f39, 0x13a6: 0x7ec9, 0x13a7: 0x7f41, 0x13a8: 0x7f69, 0x13a9: 0x7f91, + 0x13aa: 0x7fb9, 0x13ab: 0x7fe1, 0x13ac: 0x8031, 0x13ad: 0x8059, 0x13ae: 0x8081, 0x13af: 0x80a9, + 0x13b0: 0x80d1, 0x13b1: 0x80f9, 0x13b2: 0x8f61, 0x13b3: 0x8121, 0x13b4: 0x8149, 0x13b5: 0x8171, + 0x13b6: 0x8199, 0x13b7: 0x81c1, 0x13b8: 0x81e9, 0x13b9: 0x8239, 0x13ba: 0x8261, 0x13bb: 0x8289, + 0x13bc: 0x82b1, 0x13bd: 0x82d9, 0x13be: 0x8301, 0x13bf: 0x8329, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x8351, 0x13c1: 0x8379, 0x13c2: 0x83f1, 0x13c3: 0x8419, 0x13c4: 0x84b9, 0x13c5: 0x84e1, + 0x13c6: 0x8509, 0x13c7: 0x8531, 0x13c8: 0x8559, 0x13c9: 0x85d1, 0x13ca: 0x85f9, 0x13cb: 0x8621, + 0x13cc: 0x8649, 0x13cd: 0x8f89, 0x13ce: 0x86c1, 0x13cf: 0x86e9, 0x13d0: 0x8711, 0x13d1: 0x8739, + 0x13d2: 0x87b1, 0x13d3: 0x87d9, 0x13d4: 0x8801, 0x13d5: 0x8829, 0x13d6: 0x8fb1, 0x13d7: 0x88a1, + 0x13d8: 0x88c9, 0x13d9: 0x8fd9, 0x13da: 0x8941, 0x13db: 0x8969, 0x13dc: 0x8991, 0x13dd: 0x89b9, + 0x13de: 0x9001, 0x13df: 0x7c71, 0x13e0: 0x8ee9, 0x13e1: 0x7d39, 0x13e2: 0x8f11, 0x13e3: 0x7e29, + 0x13e4: 0x8f39, 0x13e5: 0x7ec9, 0x13e6: 0x9029, 0x13e7: 0x80d1, 0x13e8: 0x9051, 0x13e9: 0x9079, + 0x13ea: 0x90a1, 0x13eb: 0x8531, 0x13ec: 0x8559, 0x13ed: 0x8649, 0x13ee: 0x8829, 0x13ef: 0x8fb1, + 0x13f0: 0x89b9, 0x13f1: 0x9001, 0x13f2: 0x90c9, 0x13f3: 0x9101, 0x13f4: 0x9139, 0x13f5: 0x9171, + 0x13f6: 0x9199, 0x13f7: 0x91c1, 0x13f8: 0x91e9, 0x13f9: 0x9211, 0x13fa: 0x9239, 0x13fb: 0x9261, + 0x13fc: 0x9289, 0x13fd: 0x92b1, 0x13fe: 0x92d9, 0x13ff: 0x9301, + // Block 0x50, offset 0x1400 + 0x1400: 0x9329, 0x1401: 0x9351, 0x1402: 0x9379, 0x1403: 0x93a1, 0x1404: 0x93c9, 0x1405: 0x93f1, + 0x1406: 0x9419, 0x1407: 0x9441, 0x1408: 0x9469, 0x1409: 0x9491, 0x140a: 0x94b9, 0x140b: 0x94e1, + 0x140c: 0x9079, 0x140d: 0x9509, 0x140e: 0x9531, 0x140f: 0x9559, 0x1410: 0x9581, 0x1411: 0x9171, + 0x1412: 0x9199, 0x1413: 0x91c1, 0x1414: 0x91e9, 0x1415: 0x9211, 0x1416: 0x9239, 0x1417: 0x9261, + 0x1418: 0x9289, 0x1419: 0x92b1, 0x141a: 0x92d9, 0x141b: 0x9301, 0x141c: 0x9329, 0x141d: 0x9351, + 0x141e: 0x9379, 0x141f: 0x93a1, 0x1420: 0x93c9, 0x1421: 0x93f1, 0x1422: 0x9419, 0x1423: 0x9441, + 0x1424: 0x9469, 0x1425: 0x9491, 0x1426: 0x94b9, 0x1427: 0x94e1, 0x1428: 0x9079, 0x1429: 0x9509, + 0x142a: 0x9531, 0x142b: 0x9559, 0x142c: 0x9581, 0x142d: 0x9491, 0x142e: 0x94b9, 0x142f: 0x94e1, + 0x1430: 0x9079, 0x1431: 0x9051, 0x1432: 0x90a1, 0x1433: 0x8211, 0x1434: 0x8059, 0x1435: 0x8081, + 0x1436: 0x80a9, 0x1437: 0x9491, 0x1438: 0x94b9, 0x1439: 0x94e1, 0x143a: 0x8211, 0x143b: 0x8239, + 0x143c: 0x95a9, 0x143d: 0x95a9, 0x143e: 0x0018, 0x143f: 0x0018, + // Block 0x51, offset 0x1440 + 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040, + 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040, + 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x95d1, 0x1451: 0x9609, + 0x1452: 0x9609, 0x1453: 0x9641, 0x1454: 0x9679, 0x1455: 0x96b1, 0x1456: 0x96e9, 0x1457: 0x9721, + 0x1458: 0x9759, 0x1459: 0x9759, 0x145a: 0x9791, 0x145b: 0x97c9, 0x145c: 0x9801, 0x145d: 0x9839, + 0x145e: 0x9871, 0x145f: 0x98a9, 0x1460: 0x98a9, 0x1461: 0x98e1, 0x1462: 0x9919, 0x1463: 0x9919, + 0x1464: 0x9951, 0x1465: 0x9951, 0x1466: 0x9989, 0x1467: 0x99c1, 0x1468: 0x99c1, 0x1469: 0x99f9, + 0x146a: 0x9a31, 0x146b: 0x9a31, 0x146c: 0x9a69, 0x146d: 0x9a69, 0x146e: 0x9aa1, 0x146f: 0x9ad9, + 0x1470: 0x9ad9, 0x1471: 0x9b11, 0x1472: 0x9b11, 0x1473: 0x9b49, 0x1474: 0x9b81, 0x1475: 0x9bb9, + 0x1476: 0x9bf1, 0x1477: 0x9bf1, 0x1478: 0x9c29, 0x1479: 0x9c61, 0x147a: 0x9c99, 0x147b: 0x9cd1, + 0x147c: 0x9d09, 0x147d: 0x9d09, 0x147e: 0x9d41, 0x147f: 0x9d79, + // Block 0x52, offset 0x1480 + 0x1480: 0xa949, 0x1481: 0xa981, 0x1482: 0xa9b9, 0x1483: 0xa8a1, 0x1484: 0x9bb9, 0x1485: 0x9989, + 0x1486: 0xa9f1, 0x1487: 0xaa29, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, + 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040, + 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040, + 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040, + 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040, + 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040, + 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040, + 0x14b0: 0xaa61, 0x14b1: 0xaa99, 0x14b2: 0xaad1, 0x14b3: 0xab19, 0x14b4: 0xab61, 0x14b5: 0xaba9, + 0x14b6: 0xabf1, 0x14b7: 0xac39, 0x14b8: 0xac81, 0x14b9: 0xacc9, 0x14ba: 0xad02, 0x14bb: 0xae12, + 0x14bc: 0xae91, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x13c0, 0x14c1: 0x13c0, 0x14c2: 0x13c0, 0x14c3: 0x13c0, 0x14c4: 0x13c0, 0x14c5: 0x13c0, + 0x14c6: 0x13c0, 0x14c7: 0x13c0, 0x14c8: 0x13c0, 0x14c9: 0x13c0, 0x14ca: 0x13c0, 0x14cb: 0x13c0, + 0x14cc: 0x13c0, 0x14cd: 0x13c0, 0x14ce: 0x13c0, 0x14cf: 0x13c0, 0x14d0: 0xaeda, 0x14d1: 0x7d55, + 0x14d2: 0x0040, 0x14d3: 0xaeea, 0x14d4: 0x03c2, 0x14d5: 0xaefa, 0x14d6: 0xaf0a, 0x14d7: 0x7d75, + 0x14d8: 0x7d95, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, + 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x1308, 0x14e1: 0x1308, 0x14e2: 0x1308, 0x14e3: 0x1308, + 0x14e4: 0x1308, 0x14e5: 0x1308, 0x14e6: 0x1308, 0x14e7: 0x1308, 0x14e8: 0x1308, 0x14e9: 0x1308, + 0x14ea: 0x1308, 0x14eb: 0x1308, 0x14ec: 0x1308, 0x14ed: 0x1308, 0x14ee: 0x1308, 0x14ef: 0x1308, + 0x14f0: 0x0040, 0x14f1: 0x7db5, 0x14f2: 0x7dd5, 0x14f3: 0xaf1a, 0x14f4: 0xaf1a, 0x14f5: 0x1fd2, + 0x14f6: 0x1fe2, 0x14f7: 0xaf2a, 0x14f8: 0xaf3a, 0x14f9: 0x7df5, 0x14fa: 0x7e15, 0x14fb: 0x7e35, + 0x14fc: 0x7df5, 0x14fd: 0x7e55, 0x14fe: 0x7e75, 0x14ff: 0x7e55, + // Block 0x54, offset 0x1500 + 0x1500: 0x7e95, 0x1501: 0x7eb5, 0x1502: 0x7ed5, 0x1503: 0x7eb5, 0x1504: 0x7ef5, 0x1505: 0x0018, + 0x1506: 0x0018, 0x1507: 0xaf4a, 0x1508: 0xaf5a, 0x1509: 0x7f16, 0x150a: 0x7f36, 0x150b: 0x7f56, + 0x150c: 0x7f76, 0x150d: 0xaf1a, 0x150e: 0xaf1a, 0x150f: 0xaf1a, 0x1510: 0xaeda, 0x1511: 0x7f95, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x03c2, 0x1515: 0xaeea, 0x1516: 0xaf0a, 0x1517: 0xaefa, + 0x1518: 0x7fb5, 0x1519: 0x1fd2, 0x151a: 0x1fe2, 0x151b: 0xaf2a, 0x151c: 0xaf3a, 0x151d: 0x7e95, + 0x151e: 0x7ef5, 0x151f: 0xaf6a, 0x1520: 0xaf7a, 0x1521: 0xaf8a, 0x1522: 0x1fb2, 0x1523: 0xaf99, + 0x1524: 0xafaa, 0x1525: 0xafba, 0x1526: 0x1fc2, 0x1527: 0x0040, 0x1528: 0xafca, 0x1529: 0xafda, + 0x152a: 0xafea, 0x152b: 0xaffa, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0x7fd6, 0x1531: 0xb009, 0x1532: 0x7ff6, 0x1533: 0x0008, 0x1534: 0x8016, 0x1535: 0x0040, + 0x1536: 0x8036, 0x1537: 0xb031, 0x1538: 0x8056, 0x1539: 0xb059, 0x153a: 0x8076, 0x153b: 0xb081, + 0x153c: 0x8096, 0x153d: 0xb0a9, 0x153e: 0x80b6, 0x153f: 0xb0d1, + // Block 0x55, offset 0x1540 + 0x1540: 0xb0f9, 0x1541: 0xb111, 0x1542: 0xb111, 0x1543: 0xb129, 0x1544: 0xb129, 0x1545: 0xb141, + 0x1546: 0xb141, 0x1547: 0xb159, 0x1548: 0xb159, 0x1549: 0xb171, 0x154a: 0xb171, 0x154b: 0xb171, + 0x154c: 0xb171, 0x154d: 0xb189, 0x154e: 0xb189, 0x154f: 0xb1a1, 0x1550: 0xb1a1, 0x1551: 0xb1a1, + 0x1552: 0xb1a1, 0x1553: 0xb1b9, 0x1554: 0xb1b9, 0x1555: 0xb1d1, 0x1556: 0xb1d1, 0x1557: 0xb1d1, + 0x1558: 0xb1d1, 0x1559: 0xb1e9, 0x155a: 0xb1e9, 0x155b: 0xb1e9, 0x155c: 0xb1e9, 0x155d: 0xb201, + 0x155e: 0xb201, 0x155f: 0xb201, 0x1560: 0xb201, 0x1561: 0xb219, 0x1562: 0xb219, 0x1563: 0xb219, + 0x1564: 0xb219, 0x1565: 0xb231, 0x1566: 0xb231, 0x1567: 0xb231, 0x1568: 0xb231, 0x1569: 0xb249, + 0x156a: 0xb249, 0x156b: 0xb261, 0x156c: 0xb261, 0x156d: 0xb279, 0x156e: 0xb279, 0x156f: 0xb291, + 0x1570: 0xb291, 0x1571: 0xb2a9, 0x1572: 0xb2a9, 0x1573: 0xb2a9, 0x1574: 0xb2a9, 0x1575: 0xb2c1, + 0x1576: 0xb2c1, 0x1577: 0xb2c1, 0x1578: 0xb2c1, 0x1579: 0xb2d9, 0x157a: 0xb2d9, 0x157b: 0xb2d9, + 0x157c: 0xb2d9, 0x157d: 0xb2f1, 0x157e: 0xb2f1, 0x157f: 0xb2f1, + // Block 0x56, offset 0x1580 + 0x1580: 0xb2f1, 0x1581: 0xb309, 0x1582: 0xb309, 0x1583: 0xb309, 0x1584: 0xb309, 0x1585: 0xb321, + 0x1586: 0xb321, 0x1587: 0xb321, 0x1588: 0xb321, 0x1589: 0xb339, 0x158a: 0xb339, 0x158b: 0xb339, + 0x158c: 0xb339, 0x158d: 0xb351, 0x158e: 0xb351, 0x158f: 0xb351, 0x1590: 0xb351, 0x1591: 0xb369, + 0x1592: 0xb369, 0x1593: 0xb369, 0x1594: 0xb369, 0x1595: 0xb381, 0x1596: 0xb381, 0x1597: 0xb381, + 0x1598: 0xb381, 0x1599: 0xb399, 0x159a: 0xb399, 0x159b: 0xb399, 0x159c: 0xb399, 0x159d: 0xb3b1, + 0x159e: 0xb3b1, 0x159f: 0xb3b1, 0x15a0: 0xb3b1, 0x15a1: 0xb3c9, 0x15a2: 0xb3c9, 0x15a3: 0xb3c9, + 0x15a4: 0xb3c9, 0x15a5: 0xb3e1, 0x15a6: 0xb3e1, 0x15a7: 0xb3e1, 0x15a8: 0xb3e1, 0x15a9: 0xb3f9, + 0x15aa: 0xb3f9, 0x15ab: 0xb3f9, 0x15ac: 0xb3f9, 0x15ad: 0xb411, 0x15ae: 0xb411, 0x15af: 0x7ab1, + 0x15b0: 0x7ab1, 0x15b1: 0xb429, 0x15b2: 0xb429, 0x15b3: 0xb429, 0x15b4: 0xb429, 0x15b5: 0xb441, + 0x15b6: 0xb441, 0x15b7: 0xb469, 0x15b8: 0xb469, 0x15b9: 0xb491, 0x15ba: 0xb491, 0x15bb: 0xb4b9, + 0x15bc: 0xb4b9, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x0040, 0x15c1: 0xaefa, 0x15c2: 0xb4e2, 0x15c3: 0xaf6a, 0x15c4: 0xafda, 0x15c5: 0xafea, + 0x15c6: 0xaf7a, 0x15c7: 0xb4f2, 0x15c8: 0x1fd2, 0x15c9: 0x1fe2, 0x15ca: 0xaf8a, 0x15cb: 0x1fb2, + 0x15cc: 0xaeda, 0x15cd: 0xaf99, 0x15ce: 0x29d1, 0x15cf: 0xb502, 0x15d0: 0x1f41, 0x15d1: 0x00c9, + 0x15d2: 0x0069, 0x15d3: 0x0079, 0x15d4: 0x1f51, 0x15d5: 0x1f61, 0x15d6: 0x1f71, 0x15d7: 0x1f81, + 0x15d8: 0x1f91, 0x15d9: 0x1fa1, 0x15da: 0xaeea, 0x15db: 0x03c2, 0x15dc: 0xafaa, 0x15dd: 0x1fc2, + 0x15de: 0xafba, 0x15df: 0xaf0a, 0x15e0: 0xaffa, 0x15e1: 0x0039, 0x15e2: 0x0ee9, 0x15e3: 0x1159, + 0x15e4: 0x0ef9, 0x15e5: 0x0f09, 0x15e6: 0x1199, 0x15e7: 0x0f31, 0x15e8: 0x0249, 0x15e9: 0x0f41, + 0x15ea: 0x0259, 0x15eb: 0x0f51, 0x15ec: 0x0359, 0x15ed: 0x0f61, 0x15ee: 0x0f71, 0x15ef: 0x00d9, + 0x15f0: 0x0f99, 0x15f1: 0x2039, 0x15f2: 0x0269, 0x15f3: 0x01d9, 0x15f4: 0x0fa9, 0x15f5: 0x0fb9, + 0x15f6: 0x1089, 0x15f7: 0x0279, 0x15f8: 0x0369, 0x15f9: 0x0289, 0x15fa: 0x13d1, 0x15fb: 0xaf4a, + 0x15fc: 0xafca, 0x15fd: 0xaf5a, 0x15fe: 0xb512, 0x15ff: 0xaf1a, + // Block 0x58, offset 0x1600 + 0x1600: 0x1caa, 0x1601: 0x0039, 0x1602: 0x0ee9, 0x1603: 0x1159, 0x1604: 0x0ef9, 0x1605: 0x0f09, + 0x1606: 0x1199, 0x1607: 0x0f31, 0x1608: 0x0249, 0x1609: 0x0f41, 0x160a: 0x0259, 0x160b: 0x0f51, + 0x160c: 0x0359, 0x160d: 0x0f61, 0x160e: 0x0f71, 0x160f: 0x00d9, 0x1610: 0x0f99, 0x1611: 0x2039, + 0x1612: 0x0269, 0x1613: 0x01d9, 0x1614: 0x0fa9, 0x1615: 0x0fb9, 0x1616: 0x1089, 0x1617: 0x0279, + 0x1618: 0x0369, 0x1619: 0x0289, 0x161a: 0x13d1, 0x161b: 0xaf2a, 0x161c: 0xb522, 0x161d: 0xaf3a, + 0x161e: 0xb532, 0x161f: 0x80d5, 0x1620: 0x80f5, 0x1621: 0x29d1, 0x1622: 0x8115, 0x1623: 0x8115, + 0x1624: 0x8135, 0x1625: 0x8155, 0x1626: 0x8175, 0x1627: 0x8195, 0x1628: 0x81b5, 0x1629: 0x81d5, + 0x162a: 0x81f5, 0x162b: 0x8215, 0x162c: 0x8235, 0x162d: 0x8255, 0x162e: 0x8275, 0x162f: 0x8295, + 0x1630: 0x82b5, 0x1631: 0x82d5, 0x1632: 0x82f5, 0x1633: 0x8315, 0x1634: 0x8335, 0x1635: 0x8355, + 0x1636: 0x8375, 0x1637: 0x8395, 0x1638: 0x83b5, 0x1639: 0x83d5, 0x163a: 0x83f5, 0x163b: 0x8415, + 0x163c: 0x81b5, 0x163d: 0x8435, 0x163e: 0x8455, 0x163f: 0x8215, + // Block 0x59, offset 0x1640 + 0x1640: 0x8475, 0x1641: 0x8495, 0x1642: 0x84b5, 0x1643: 0x84d5, 0x1644: 0x84f5, 0x1645: 0x8515, + 0x1646: 0x8535, 0x1647: 0x8555, 0x1648: 0x84d5, 0x1649: 0x8575, 0x164a: 0x84d5, 0x164b: 0x8595, + 0x164c: 0x8595, 0x164d: 0x85b5, 0x164e: 0x85b5, 0x164f: 0x85d5, 0x1650: 0x8515, 0x1651: 0x85f5, + 0x1652: 0x8615, 0x1653: 0x85f5, 0x1654: 0x8635, 0x1655: 0x8615, 0x1656: 0x8655, 0x1657: 0x8655, + 0x1658: 0x8675, 0x1659: 0x8675, 0x165a: 0x8695, 0x165b: 0x8695, 0x165c: 0x8615, 0x165d: 0x8115, + 0x165e: 0x86b5, 0x165f: 0x86d5, 0x1660: 0x0040, 0x1661: 0x86f5, 0x1662: 0x8715, 0x1663: 0x8735, + 0x1664: 0x8755, 0x1665: 0x8735, 0x1666: 0x8775, 0x1667: 0x8795, 0x1668: 0x87b5, 0x1669: 0x87b5, + 0x166a: 0x87d5, 0x166b: 0x87d5, 0x166c: 0x87f5, 0x166d: 0x87f5, 0x166e: 0x87d5, 0x166f: 0x87d5, + 0x1670: 0x8815, 0x1671: 0x8835, 0x1672: 0x8855, 0x1673: 0x8875, 0x1674: 0x8895, 0x1675: 0x88b5, + 0x1676: 0x88b5, 0x1677: 0x88b5, 0x1678: 0x88d5, 0x1679: 0x88d5, 0x167a: 0x88d5, 0x167b: 0x88d5, + 0x167c: 0x87b5, 0x167d: 0x87b5, 0x167e: 0x87b5, 0x167f: 0x0040, + // Block 0x5a, offset 0x1680 + 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x8715, 0x1683: 0x86f5, 0x1684: 0x88f5, 0x1685: 0x86f5, + 0x1686: 0x8715, 0x1687: 0x86f5, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x8915, 0x168b: 0x8715, + 0x168c: 0x8935, 0x168d: 0x88f5, 0x168e: 0x8935, 0x168f: 0x8715, 0x1690: 0x0040, 0x1691: 0x0040, + 0x1692: 0x8955, 0x1693: 0x8975, 0x1694: 0x8875, 0x1695: 0x8935, 0x1696: 0x88f5, 0x1697: 0x8935, + 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x8995, 0x169b: 0x89b5, 0x169c: 0x8995, 0x169d: 0x0040, + 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0xb541, 0x16a1: 0xb559, 0x16a2: 0xb571, 0x16a3: 0x89d6, + 0x16a4: 0xb589, 0x16a5: 0xb5a1, 0x16a6: 0x89f5, 0x16a7: 0x0040, 0x16a8: 0x8a15, 0x16a9: 0x8a35, + 0x16aa: 0x8a55, 0x16ab: 0x8a35, 0x16ac: 0x8a75, 0x16ad: 0x8a95, 0x16ae: 0x8ab5, 0x16af: 0x0040, + 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040, + 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340, + 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x0208, 0x16c1: 0x0208, 0x16c2: 0x0208, 0x16c3: 0x0208, 0x16c4: 0x0208, 0x16c5: 0x0408, + 0x16c6: 0x0008, 0x16c7: 0x0408, 0x16c8: 0x0018, 0x16c9: 0x0408, 0x16ca: 0x0408, 0x16cb: 0x0008, + 0x16cc: 0x0008, 0x16cd: 0x0108, 0x16ce: 0x0408, 0x16cf: 0x0408, 0x16d0: 0x0408, 0x16d1: 0x0408, + 0x16d2: 0x0408, 0x16d3: 0x0208, 0x16d4: 0x0208, 0x16d5: 0x0208, 0x16d6: 0x0208, 0x16d7: 0x0108, + 0x16d8: 0x0208, 0x16d9: 0x0208, 0x16da: 0x0208, 0x16db: 0x0208, 0x16dc: 0x0208, 0x16dd: 0x0408, + 0x16de: 0x0208, 0x16df: 0x0208, 0x16e0: 0x0208, 0x16e1: 0x0408, 0x16e2: 0x0008, 0x16e3: 0x0008, + 0x16e4: 0x0408, 0x16e5: 0x1308, 0x16e6: 0x1308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040, + 0x16ea: 0x0040, 0x16eb: 0x0218, 0x16ec: 0x0218, 0x16ed: 0x0218, 0x16ee: 0x0218, 0x16ef: 0x0418, + 0x16f0: 0x0018, 0x16f1: 0x0018, 0x16f2: 0x0018, 0x16f3: 0x0018, 0x16f4: 0x0018, 0x16f5: 0x0018, + 0x16f6: 0x0018, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040, + 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0208, 0x1701: 0x0408, 0x1702: 0x0208, 0x1703: 0x0408, 0x1704: 0x0408, 0x1705: 0x0408, + 0x1706: 0x0208, 0x1707: 0x0208, 0x1708: 0x0208, 0x1709: 0x0408, 0x170a: 0x0208, 0x170b: 0x0208, + 0x170c: 0x0408, 0x170d: 0x0208, 0x170e: 0x0408, 0x170f: 0x0408, 0x1710: 0x0208, 0x1711: 0x0408, + 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040, + 0x1718: 0x0040, 0x1719: 0x0018, 0x171a: 0x0018, 0x171b: 0x0018, 0x171c: 0x0018, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040, + 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0418, + 0x172a: 0x0418, 0x172b: 0x0418, 0x172c: 0x0418, 0x172d: 0x0218, 0x172e: 0x0218, 0x172f: 0x0018, + 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, + 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, + // Block 0x5d, offset 0x1740 + 0x1740: 0x1308, 0x1741: 0x1308, 0x1742: 0x1008, 0x1743: 0x1008, 0x1744: 0x0040, 0x1745: 0x0008, + 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, + 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040, + 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, + 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, + 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, + 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040, + 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008, + 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008, + 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x0040, + 0x177c: 0x1308, 0x177d: 0x0008, 0x177e: 0x1008, 0x177f: 0x1008, + // Block 0x5e, offset 0x1780 + 0x1780: 0x1308, 0x1781: 0x1008, 0x1782: 0x1008, 0x1783: 0x1008, 0x1784: 0x1008, 0x1785: 0x0040, + 0x1786: 0x0040, 0x1787: 0x1008, 0x1788: 0x1008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x1008, + 0x178c: 0x1008, 0x178d: 0x1808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040, + 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x1008, + 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008, + 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x1008, 0x17a3: 0x1008, + 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x1308, 0x17a7: 0x1308, 0x17a8: 0x1308, 0x17a9: 0x1308, + 0x17aa: 0x1308, 0x17ab: 0x1308, 0x17ac: 0x1308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040, + 0x17b0: 0x1308, 0x17b1: 0x1308, 0x17b2: 0x1308, 0x17b3: 0x1308, 0x17b4: 0x1308, 0x17b5: 0x0040, + 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, + 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x0039, 0x17c1: 0x0ee9, 0x17c2: 0x1159, 0x17c3: 0x0ef9, 0x17c4: 0x0f09, 0x17c5: 0x1199, + 0x17c6: 0x0f31, 0x17c7: 0x0249, 0x17c8: 0x0f41, 0x17c9: 0x0259, 0x17ca: 0x0f51, 0x17cb: 0x0359, + 0x17cc: 0x0f61, 0x17cd: 0x0f71, 0x17ce: 0x00d9, 0x17cf: 0x0f99, 0x17d0: 0x2039, 0x17d1: 0x0269, + 0x17d2: 0x01d9, 0x17d3: 0x0fa9, 0x17d4: 0x0fb9, 0x17d5: 0x1089, 0x17d6: 0x0279, 0x17d7: 0x0369, + 0x17d8: 0x0289, 0x17d9: 0x13d1, 0x17da: 0x0039, 0x17db: 0x0ee9, 0x17dc: 0x1159, 0x17dd: 0x0ef9, + 0x17de: 0x0f09, 0x17df: 0x1199, 0x17e0: 0x0f31, 0x17e1: 0x0249, 0x17e2: 0x0f41, 0x17e3: 0x0259, + 0x17e4: 0x0f51, 0x17e5: 0x0359, 0x17e6: 0x0f61, 0x17e7: 0x0f71, 0x17e8: 0x00d9, 0x17e9: 0x0f99, + 0x17ea: 0x2039, 0x17eb: 0x0269, 0x17ec: 0x01d9, 0x17ed: 0x0fa9, 0x17ee: 0x0fb9, 0x17ef: 0x1089, + 0x17f0: 0x0279, 0x17f1: 0x0369, 0x17f2: 0x0289, 0x17f3: 0x13d1, 0x17f4: 0x0039, 0x17f5: 0x0ee9, + 0x17f6: 0x1159, 0x17f7: 0x0ef9, 0x17f8: 0x0f09, 0x17f9: 0x1199, 0x17fa: 0x0f31, 0x17fb: 0x0249, + 0x17fc: 0x0f41, 0x17fd: 0x0259, 0x17fe: 0x0f51, 0x17ff: 0x0359, + // Block 0x60, offset 0x1800 + 0x1800: 0x0f61, 0x1801: 0x0f71, 0x1802: 0x00d9, 0x1803: 0x0f99, 0x1804: 0x2039, 0x1805: 0x0269, + 0x1806: 0x01d9, 0x1807: 0x0fa9, 0x1808: 0x0fb9, 0x1809: 0x1089, 0x180a: 0x0279, 0x180b: 0x0369, + 0x180c: 0x0289, 0x180d: 0x13d1, 0x180e: 0x0039, 0x180f: 0x0ee9, 0x1810: 0x1159, 0x1811: 0x0ef9, + 0x1812: 0x0f09, 0x1813: 0x1199, 0x1814: 0x0f31, 0x1815: 0x0040, 0x1816: 0x0f41, 0x1817: 0x0259, + 0x1818: 0x0f51, 0x1819: 0x0359, 0x181a: 0x0f61, 0x181b: 0x0f71, 0x181c: 0x00d9, 0x181d: 0x0f99, + 0x181e: 0x2039, 0x181f: 0x0269, 0x1820: 0x01d9, 0x1821: 0x0fa9, 0x1822: 0x0fb9, 0x1823: 0x1089, + 0x1824: 0x0279, 0x1825: 0x0369, 0x1826: 0x0289, 0x1827: 0x13d1, 0x1828: 0x0039, 0x1829: 0x0ee9, + 0x182a: 0x1159, 0x182b: 0x0ef9, 0x182c: 0x0f09, 0x182d: 0x1199, 0x182e: 0x0f31, 0x182f: 0x0249, + 0x1830: 0x0f41, 0x1831: 0x0259, 0x1832: 0x0f51, 0x1833: 0x0359, 0x1834: 0x0f61, 0x1835: 0x0f71, + 0x1836: 0x00d9, 0x1837: 0x0f99, 0x1838: 0x2039, 0x1839: 0x0269, 0x183a: 0x01d9, 0x183b: 0x0fa9, + 0x183c: 0x0fb9, 0x183d: 0x1089, 0x183e: 0x0279, 0x183f: 0x0369, + // Block 0x61, offset 0x1840 + 0x1840: 0x0289, 0x1841: 0x13d1, 0x1842: 0x0039, 0x1843: 0x0ee9, 0x1844: 0x1159, 0x1845: 0x0ef9, + 0x1846: 0x0f09, 0x1847: 0x1199, 0x1848: 0x0f31, 0x1849: 0x0249, 0x184a: 0x0f41, 0x184b: 0x0259, + 0x184c: 0x0f51, 0x184d: 0x0359, 0x184e: 0x0f61, 0x184f: 0x0f71, 0x1850: 0x00d9, 0x1851: 0x0f99, + 0x1852: 0x2039, 0x1853: 0x0269, 0x1854: 0x01d9, 0x1855: 0x0fa9, 0x1856: 0x0fb9, 0x1857: 0x1089, + 0x1858: 0x0279, 0x1859: 0x0369, 0x185a: 0x0289, 0x185b: 0x13d1, 0x185c: 0x0039, 0x185d: 0x0040, + 0x185e: 0x1159, 0x185f: 0x0ef9, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0f31, 0x1863: 0x0040, + 0x1864: 0x0040, 0x1865: 0x0259, 0x1866: 0x0f51, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0f71, + 0x186a: 0x00d9, 0x186b: 0x0f99, 0x186c: 0x2039, 0x186d: 0x0040, 0x186e: 0x01d9, 0x186f: 0x0fa9, + 0x1870: 0x0fb9, 0x1871: 0x1089, 0x1872: 0x0279, 0x1873: 0x0369, 0x1874: 0x0289, 0x1875: 0x13d1, + 0x1876: 0x0039, 0x1877: 0x0ee9, 0x1878: 0x1159, 0x1879: 0x0ef9, 0x187a: 0x0040, 0x187b: 0x1199, + 0x187c: 0x0040, 0x187d: 0x0249, 0x187e: 0x0f41, 0x187f: 0x0259, + // Block 0x62, offset 0x1880 + 0x1880: 0x0f51, 0x1881: 0x0359, 0x1882: 0x0f61, 0x1883: 0x0f71, 0x1884: 0x0040, 0x1885: 0x0f99, + 0x1886: 0x2039, 0x1887: 0x0269, 0x1888: 0x01d9, 0x1889: 0x0fa9, 0x188a: 0x0fb9, 0x188b: 0x1089, + 0x188c: 0x0279, 0x188d: 0x0369, 0x188e: 0x0289, 0x188f: 0x13d1, 0x1890: 0x0039, 0x1891: 0x0ee9, + 0x1892: 0x1159, 0x1893: 0x0ef9, 0x1894: 0x0f09, 0x1895: 0x1199, 0x1896: 0x0f31, 0x1897: 0x0249, + 0x1898: 0x0f41, 0x1899: 0x0259, 0x189a: 0x0f51, 0x189b: 0x0359, 0x189c: 0x0f61, 0x189d: 0x0f71, + 0x189e: 0x00d9, 0x189f: 0x0f99, 0x18a0: 0x2039, 0x18a1: 0x0269, 0x18a2: 0x01d9, 0x18a3: 0x0fa9, + 0x18a4: 0x0fb9, 0x18a5: 0x1089, 0x18a6: 0x0279, 0x18a7: 0x0369, 0x18a8: 0x0289, 0x18a9: 0x13d1, + 0x18aa: 0x0039, 0x18ab: 0x0ee9, 0x18ac: 0x1159, 0x18ad: 0x0ef9, 0x18ae: 0x0f09, 0x18af: 0x1199, + 0x18b0: 0x0f31, 0x18b1: 0x0249, 0x18b2: 0x0f41, 0x18b3: 0x0259, 0x18b4: 0x0f51, 0x18b5: 0x0359, + 0x18b6: 0x0f61, 0x18b7: 0x0f71, 0x18b8: 0x00d9, 0x18b9: 0x0f99, 0x18ba: 0x2039, 0x18bb: 0x0269, + 0x18bc: 0x01d9, 0x18bd: 0x0fa9, 0x18be: 0x0fb9, 0x18bf: 0x1089, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0279, 0x18c1: 0x0369, 0x18c2: 0x0289, 0x18c3: 0x13d1, 0x18c4: 0x0039, 0x18c5: 0x0ee9, + 0x18c6: 0x0040, 0x18c7: 0x0ef9, 0x18c8: 0x0f09, 0x18c9: 0x1199, 0x18ca: 0x0f31, 0x18cb: 0x0040, + 0x18cc: 0x0040, 0x18cd: 0x0259, 0x18ce: 0x0f51, 0x18cf: 0x0359, 0x18d0: 0x0f61, 0x18d1: 0x0f71, + 0x18d2: 0x00d9, 0x18d3: 0x0f99, 0x18d4: 0x2039, 0x18d5: 0x0040, 0x18d6: 0x01d9, 0x18d7: 0x0fa9, + 0x18d8: 0x0fb9, 0x18d9: 0x1089, 0x18da: 0x0279, 0x18db: 0x0369, 0x18dc: 0x0289, 0x18dd: 0x0040, + 0x18de: 0x0039, 0x18df: 0x0ee9, 0x18e0: 0x1159, 0x18e1: 0x0ef9, 0x18e2: 0x0f09, 0x18e3: 0x1199, + 0x18e4: 0x0f31, 0x18e5: 0x0249, 0x18e6: 0x0f41, 0x18e7: 0x0259, 0x18e8: 0x0f51, 0x18e9: 0x0359, + 0x18ea: 0x0f61, 0x18eb: 0x0f71, 0x18ec: 0x00d9, 0x18ed: 0x0f99, 0x18ee: 0x2039, 0x18ef: 0x0269, + 0x18f0: 0x01d9, 0x18f1: 0x0fa9, 0x18f2: 0x0fb9, 0x18f3: 0x1089, 0x18f4: 0x0279, 0x18f5: 0x0369, + 0x18f6: 0x0289, 0x18f7: 0x13d1, 0x18f8: 0x0039, 0x18f9: 0x0ee9, 0x18fa: 0x0040, 0x18fb: 0x0ef9, + 0x18fc: 0x0f09, 0x18fd: 0x1199, 0x18fe: 0x0f31, 0x18ff: 0x0040, + // Block 0x64, offset 0x1900 + 0x1900: 0x0f41, 0x1901: 0x0259, 0x1902: 0x0f51, 0x1903: 0x0359, 0x1904: 0x0f61, 0x1905: 0x0040, + 0x1906: 0x00d9, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0040, 0x190a: 0x01d9, 0x190b: 0x0fa9, + 0x190c: 0x0fb9, 0x190d: 0x1089, 0x190e: 0x0279, 0x190f: 0x0369, 0x1910: 0x0289, 0x1911: 0x0040, + 0x1912: 0x0039, 0x1913: 0x0ee9, 0x1914: 0x1159, 0x1915: 0x0ef9, 0x1916: 0x0f09, 0x1917: 0x1199, + 0x1918: 0x0f31, 0x1919: 0x0249, 0x191a: 0x0f41, 0x191b: 0x0259, 0x191c: 0x0f51, 0x191d: 0x0359, + 0x191e: 0x0f61, 0x191f: 0x0f71, 0x1920: 0x00d9, 0x1921: 0x0f99, 0x1922: 0x2039, 0x1923: 0x0269, + 0x1924: 0x01d9, 0x1925: 0x0fa9, 0x1926: 0x0fb9, 0x1927: 0x1089, 0x1928: 0x0279, 0x1929: 0x0369, + 0x192a: 0x0289, 0x192b: 0x13d1, 0x192c: 0x0039, 0x192d: 0x0ee9, 0x192e: 0x1159, 0x192f: 0x0ef9, + 0x1930: 0x0f09, 0x1931: 0x1199, 0x1932: 0x0f31, 0x1933: 0x0249, 0x1934: 0x0f41, 0x1935: 0x0259, + 0x1936: 0x0f51, 0x1937: 0x0359, 0x1938: 0x0f61, 0x1939: 0x0f71, 0x193a: 0x00d9, 0x193b: 0x0f99, + 0x193c: 0x2039, 0x193d: 0x0269, 0x193e: 0x01d9, 0x193f: 0x0fa9, + // Block 0x65, offset 0x1940 + 0x1940: 0x0fb9, 0x1941: 0x1089, 0x1942: 0x0279, 0x1943: 0x0369, 0x1944: 0x0289, 0x1945: 0x13d1, + 0x1946: 0x0039, 0x1947: 0x0ee9, 0x1948: 0x1159, 0x1949: 0x0ef9, 0x194a: 0x0f09, 0x194b: 0x1199, + 0x194c: 0x0f31, 0x194d: 0x0249, 0x194e: 0x0f41, 0x194f: 0x0259, 0x1950: 0x0f51, 0x1951: 0x0359, + 0x1952: 0x0f61, 0x1953: 0x0f71, 0x1954: 0x00d9, 0x1955: 0x0f99, 0x1956: 0x2039, 0x1957: 0x0269, + 0x1958: 0x01d9, 0x1959: 0x0fa9, 0x195a: 0x0fb9, 0x195b: 0x1089, 0x195c: 0x0279, 0x195d: 0x0369, + 0x195e: 0x0289, 0x195f: 0x13d1, 0x1960: 0x0039, 0x1961: 0x0ee9, 0x1962: 0x1159, 0x1963: 0x0ef9, + 0x1964: 0x0f09, 0x1965: 0x1199, 0x1966: 0x0f31, 0x1967: 0x0249, 0x1968: 0x0f41, 0x1969: 0x0259, + 0x196a: 0x0f51, 0x196b: 0x0359, 0x196c: 0x0f61, 0x196d: 0x0f71, 0x196e: 0x00d9, 0x196f: 0x0f99, + 0x1970: 0x2039, 0x1971: 0x0269, 0x1972: 0x01d9, 0x1973: 0x0fa9, 0x1974: 0x0fb9, 0x1975: 0x1089, + 0x1976: 0x0279, 0x1977: 0x0369, 0x1978: 0x0289, 0x1979: 0x13d1, 0x197a: 0x0039, 0x197b: 0x0ee9, + 0x197c: 0x1159, 0x197d: 0x0ef9, 0x197e: 0x0f09, 0x197f: 0x1199, + // Block 0x66, offset 0x1980 + 0x1980: 0x0f31, 0x1981: 0x0249, 0x1982: 0x0f41, 0x1983: 0x0259, 0x1984: 0x0f51, 0x1985: 0x0359, + 0x1986: 0x0f61, 0x1987: 0x0f71, 0x1988: 0x00d9, 0x1989: 0x0f99, 0x198a: 0x2039, 0x198b: 0x0269, + 0x198c: 0x01d9, 0x198d: 0x0fa9, 0x198e: 0x0fb9, 0x198f: 0x1089, 0x1990: 0x0279, 0x1991: 0x0369, + 0x1992: 0x0289, 0x1993: 0x13d1, 0x1994: 0x0039, 0x1995: 0x0ee9, 0x1996: 0x1159, 0x1997: 0x0ef9, + 0x1998: 0x0f09, 0x1999: 0x1199, 0x199a: 0x0f31, 0x199b: 0x0249, 0x199c: 0x0f41, 0x199d: 0x0259, + 0x199e: 0x0f51, 0x199f: 0x0359, 0x19a0: 0x0f61, 0x19a1: 0x0f71, 0x19a2: 0x00d9, 0x19a3: 0x0f99, + 0x19a4: 0x2039, 0x19a5: 0x0269, 0x19a6: 0x01d9, 0x19a7: 0x0fa9, 0x19a8: 0x0fb9, 0x19a9: 0x1089, + 0x19aa: 0x0279, 0x19ab: 0x0369, 0x19ac: 0x0289, 0x19ad: 0x13d1, 0x19ae: 0x0039, 0x19af: 0x0ee9, + 0x19b0: 0x1159, 0x19b1: 0x0ef9, 0x19b2: 0x0f09, 0x19b3: 0x1199, 0x19b4: 0x0f31, 0x19b5: 0x0249, + 0x19b6: 0x0f41, 0x19b7: 0x0259, 0x19b8: 0x0f51, 0x19b9: 0x0359, 0x19ba: 0x0f61, 0x19bb: 0x0f71, + 0x19bc: 0x00d9, 0x19bd: 0x0f99, 0x19be: 0x2039, 0x19bf: 0x0269, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x01d9, 0x19c1: 0x0fa9, 0x19c2: 0x0fb9, 0x19c3: 0x1089, 0x19c4: 0x0279, 0x19c5: 0x0369, + 0x19c6: 0x0289, 0x19c7: 0x13d1, 0x19c8: 0x0039, 0x19c9: 0x0ee9, 0x19ca: 0x1159, 0x19cb: 0x0ef9, + 0x19cc: 0x0f09, 0x19cd: 0x1199, 0x19ce: 0x0f31, 0x19cf: 0x0249, 0x19d0: 0x0f41, 0x19d1: 0x0259, + 0x19d2: 0x0f51, 0x19d3: 0x0359, 0x19d4: 0x0f61, 0x19d5: 0x0f71, 0x19d6: 0x00d9, 0x19d7: 0x0f99, + 0x19d8: 0x2039, 0x19d9: 0x0269, 0x19da: 0x01d9, 0x19db: 0x0fa9, 0x19dc: 0x0fb9, 0x19dd: 0x1089, + 0x19de: 0x0279, 0x19df: 0x0369, 0x19e0: 0x0289, 0x19e1: 0x13d1, 0x19e2: 0x0039, 0x19e3: 0x0ee9, + 0x19e4: 0x1159, 0x19e5: 0x0ef9, 0x19e6: 0x0f09, 0x19e7: 0x1199, 0x19e8: 0x0f31, 0x19e9: 0x0249, + 0x19ea: 0x0f41, 0x19eb: 0x0259, 0x19ec: 0x0f51, 0x19ed: 0x0359, 0x19ee: 0x0f61, 0x19ef: 0x0f71, + 0x19f0: 0x00d9, 0x19f1: 0x0f99, 0x19f2: 0x2039, 0x19f3: 0x0269, 0x19f4: 0x01d9, 0x19f5: 0x0fa9, + 0x19f6: 0x0fb9, 0x19f7: 0x1089, 0x19f8: 0x0279, 0x19f9: 0x0369, 0x19fa: 0x0289, 0x19fb: 0x13d1, + 0x19fc: 0x0039, 0x19fd: 0x0ee9, 0x19fe: 0x1159, 0x19ff: 0x0ef9, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0f09, 0x1a01: 0x1199, 0x1a02: 0x0f31, 0x1a03: 0x0249, 0x1a04: 0x0f41, 0x1a05: 0x0259, + 0x1a06: 0x0f51, 0x1a07: 0x0359, 0x1a08: 0x0f61, 0x1a09: 0x0f71, 0x1a0a: 0x00d9, 0x1a0b: 0x0f99, + 0x1a0c: 0x2039, 0x1a0d: 0x0269, 0x1a0e: 0x01d9, 0x1a0f: 0x0fa9, 0x1a10: 0x0fb9, 0x1a11: 0x1089, + 0x1a12: 0x0279, 0x1a13: 0x0369, 0x1a14: 0x0289, 0x1a15: 0x13d1, 0x1a16: 0x0039, 0x1a17: 0x0ee9, + 0x1a18: 0x1159, 0x1a19: 0x0ef9, 0x1a1a: 0x0f09, 0x1a1b: 0x1199, 0x1a1c: 0x0f31, 0x1a1d: 0x0249, + 0x1a1e: 0x0f41, 0x1a1f: 0x0259, 0x1a20: 0x0f51, 0x1a21: 0x0359, 0x1a22: 0x0f61, 0x1a23: 0x0f71, + 0x1a24: 0x00d9, 0x1a25: 0x0f99, 0x1a26: 0x2039, 0x1a27: 0x0269, 0x1a28: 0x01d9, 0x1a29: 0x0fa9, + 0x1a2a: 0x0fb9, 0x1a2b: 0x1089, 0x1a2c: 0x0279, 0x1a2d: 0x0369, 0x1a2e: 0x0289, 0x1a2f: 0x13d1, + 0x1a30: 0x0039, 0x1a31: 0x0ee9, 0x1a32: 0x1159, 0x1a33: 0x0ef9, 0x1a34: 0x0f09, 0x1a35: 0x1199, + 0x1a36: 0x0f31, 0x1a37: 0x0249, 0x1a38: 0x0f41, 0x1a39: 0x0259, 0x1a3a: 0x0f51, 0x1a3b: 0x0359, + 0x1a3c: 0x0f61, 0x1a3d: 0x0f71, 0x1a3e: 0x00d9, 0x1a3f: 0x0f99, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x2039, 0x1a41: 0x0269, 0x1a42: 0x01d9, 0x1a43: 0x0fa9, 0x1a44: 0x0fb9, 0x1a45: 0x1089, + 0x1a46: 0x0279, 0x1a47: 0x0369, 0x1a48: 0x0289, 0x1a49: 0x13d1, 0x1a4a: 0x0039, 0x1a4b: 0x0ee9, + 0x1a4c: 0x1159, 0x1a4d: 0x0ef9, 0x1a4e: 0x0f09, 0x1a4f: 0x1199, 0x1a50: 0x0f31, 0x1a51: 0x0249, + 0x1a52: 0x0f41, 0x1a53: 0x0259, 0x1a54: 0x0f51, 0x1a55: 0x0359, 0x1a56: 0x0f61, 0x1a57: 0x0f71, + 0x1a58: 0x00d9, 0x1a59: 0x0f99, 0x1a5a: 0x2039, 0x1a5b: 0x0269, 0x1a5c: 0x01d9, 0x1a5d: 0x0fa9, + 0x1a5e: 0x0fb9, 0x1a5f: 0x1089, 0x1a60: 0x0279, 0x1a61: 0x0369, 0x1a62: 0x0289, 0x1a63: 0x13d1, + 0x1a64: 0xba81, 0x1a65: 0xba99, 0x1a66: 0x0040, 0x1a67: 0x0040, 0x1a68: 0xbab1, 0x1a69: 0x1099, + 0x1a6a: 0x10b1, 0x1a6b: 0x10c9, 0x1a6c: 0xbac9, 0x1a6d: 0xbae1, 0x1a6e: 0xbaf9, 0x1a6f: 0x1429, + 0x1a70: 0x1a31, 0x1a71: 0xbb11, 0x1a72: 0xbb29, 0x1a73: 0xbb41, 0x1a74: 0xbb59, 0x1a75: 0xbb71, + 0x1a76: 0xbb89, 0x1a77: 0x2109, 0x1a78: 0x1111, 0x1a79: 0x1429, 0x1a7a: 0xbba1, 0x1a7b: 0xbbb9, + 0x1a7c: 0xbbd1, 0x1a7d: 0x10e1, 0x1a7e: 0x10f9, 0x1a7f: 0xbbe9, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x2079, 0x1a81: 0xbc01, 0x1a82: 0xbab1, 0x1a83: 0x1099, 0x1a84: 0x10b1, 0x1a85: 0x10c9, + 0x1a86: 0xbac9, 0x1a87: 0xbae1, 0x1a88: 0xbaf9, 0x1a89: 0x1429, 0x1a8a: 0x1a31, 0x1a8b: 0xbb11, + 0x1a8c: 0xbb29, 0x1a8d: 0xbb41, 0x1a8e: 0xbb59, 0x1a8f: 0xbb71, 0x1a90: 0xbb89, 0x1a91: 0x2109, + 0x1a92: 0x1111, 0x1a93: 0xbba1, 0x1a94: 0xbba1, 0x1a95: 0xbbb9, 0x1a96: 0xbbd1, 0x1a97: 0x10e1, + 0x1a98: 0x10f9, 0x1a99: 0xbbe9, 0x1a9a: 0x2079, 0x1a9b: 0xbc21, 0x1a9c: 0xbac9, 0x1a9d: 0x1429, + 0x1a9e: 0xbb11, 0x1a9f: 0x10e1, 0x1aa0: 0x1111, 0x1aa1: 0x2109, 0x1aa2: 0xbab1, 0x1aa3: 0x1099, + 0x1aa4: 0x10b1, 0x1aa5: 0x10c9, 0x1aa6: 0xbac9, 0x1aa7: 0xbae1, 0x1aa8: 0xbaf9, 0x1aa9: 0x1429, + 0x1aaa: 0x1a31, 0x1aab: 0xbb11, 0x1aac: 0xbb29, 0x1aad: 0xbb41, 0x1aae: 0xbb59, 0x1aaf: 0xbb71, + 0x1ab0: 0xbb89, 0x1ab1: 0x2109, 0x1ab2: 0x1111, 0x1ab3: 0x1429, 0x1ab4: 0xbba1, 0x1ab5: 0xbbb9, + 0x1ab6: 0xbbd1, 0x1ab7: 0x10e1, 0x1ab8: 0x10f9, 0x1ab9: 0xbbe9, 0x1aba: 0x2079, 0x1abb: 0xbc01, + 0x1abc: 0xbab1, 0x1abd: 0x1099, 0x1abe: 0x10b1, 0x1abf: 0x10c9, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0xbac9, 0x1ac1: 0xbae1, 0x1ac2: 0xbaf9, 0x1ac3: 0x1429, 0x1ac4: 0x1a31, 0x1ac5: 0xbb11, + 0x1ac6: 0xbb29, 0x1ac7: 0xbb41, 0x1ac8: 0xbb59, 0x1ac9: 0xbb71, 0x1aca: 0xbb89, 0x1acb: 0x2109, + 0x1acc: 0x1111, 0x1acd: 0xbba1, 0x1ace: 0xbba1, 0x1acf: 0xbbb9, 0x1ad0: 0xbbd1, 0x1ad1: 0x10e1, + 0x1ad2: 0x10f9, 0x1ad3: 0xbbe9, 0x1ad4: 0x2079, 0x1ad5: 0xbc21, 0x1ad6: 0xbac9, 0x1ad7: 0x1429, + 0x1ad8: 0xbb11, 0x1ad9: 0x10e1, 0x1ada: 0x1111, 0x1adb: 0x2109, 0x1adc: 0xbab1, 0x1add: 0x1099, + 0x1ade: 0x10b1, 0x1adf: 0x10c9, 0x1ae0: 0xbac9, 0x1ae1: 0xbae1, 0x1ae2: 0xbaf9, 0x1ae3: 0x1429, + 0x1ae4: 0x1a31, 0x1ae5: 0xbb11, 0x1ae6: 0xbb29, 0x1ae7: 0xbb41, 0x1ae8: 0xbb59, 0x1ae9: 0xbb71, + 0x1aea: 0xbb89, 0x1aeb: 0x2109, 0x1aec: 0x1111, 0x1aed: 0x1429, 0x1aee: 0xbba1, 0x1aef: 0xbbb9, + 0x1af0: 0xbbd1, 0x1af1: 0x10e1, 0x1af2: 0x10f9, 0x1af3: 0xbbe9, 0x1af4: 0x2079, 0x1af5: 0xbc01, + 0x1af6: 0xbab1, 0x1af7: 0x1099, 0x1af8: 0x10b1, 0x1af9: 0x10c9, 0x1afa: 0xbac9, 0x1afb: 0xbae1, + 0x1afc: 0xbaf9, 0x1afd: 0x1429, 0x1afe: 0x1a31, 0x1aff: 0xbb11, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0xbb29, 0x1b01: 0xbb41, 0x1b02: 0xbb59, 0x1b03: 0xbb71, 0x1b04: 0xbb89, 0x1b05: 0x2109, + 0x1b06: 0x1111, 0x1b07: 0xbba1, 0x1b08: 0xbba1, 0x1b09: 0xbbb9, 0x1b0a: 0xbbd1, 0x1b0b: 0x10e1, + 0x1b0c: 0x10f9, 0x1b0d: 0xbbe9, 0x1b0e: 0x2079, 0x1b0f: 0xbc21, 0x1b10: 0xbac9, 0x1b11: 0x1429, + 0x1b12: 0xbb11, 0x1b13: 0x10e1, 0x1b14: 0x1111, 0x1b15: 0x2109, 0x1b16: 0xbab1, 0x1b17: 0x1099, + 0x1b18: 0x10b1, 0x1b19: 0x10c9, 0x1b1a: 0xbac9, 0x1b1b: 0xbae1, 0x1b1c: 0xbaf9, 0x1b1d: 0x1429, + 0x1b1e: 0x1a31, 0x1b1f: 0xbb11, 0x1b20: 0xbb29, 0x1b21: 0xbb41, 0x1b22: 0xbb59, 0x1b23: 0xbb71, + 0x1b24: 0xbb89, 0x1b25: 0x2109, 0x1b26: 0x1111, 0x1b27: 0x1429, 0x1b28: 0xbba1, 0x1b29: 0xbbb9, + 0x1b2a: 0xbbd1, 0x1b2b: 0x10e1, 0x1b2c: 0x10f9, 0x1b2d: 0xbbe9, 0x1b2e: 0x2079, 0x1b2f: 0xbc01, + 0x1b30: 0xbab1, 0x1b31: 0x1099, 0x1b32: 0x10b1, 0x1b33: 0x10c9, 0x1b34: 0xbac9, 0x1b35: 0xbae1, + 0x1b36: 0xbaf9, 0x1b37: 0x1429, 0x1b38: 0x1a31, 0x1b39: 0xbb11, 0x1b3a: 0xbb29, 0x1b3b: 0xbb41, + 0x1b3c: 0xbb59, 0x1b3d: 0xbb71, 0x1b3e: 0xbb89, 0x1b3f: 0x2109, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x1111, 0x1b41: 0xbba1, 0x1b42: 0xbba1, 0x1b43: 0xbbb9, 0x1b44: 0xbbd1, 0x1b45: 0x10e1, + 0x1b46: 0x10f9, 0x1b47: 0xbbe9, 0x1b48: 0x2079, 0x1b49: 0xbc21, 0x1b4a: 0xbac9, 0x1b4b: 0x1429, + 0x1b4c: 0xbb11, 0x1b4d: 0x10e1, 0x1b4e: 0x1111, 0x1b4f: 0x2109, 0x1b50: 0xbab1, 0x1b51: 0x1099, + 0x1b52: 0x10b1, 0x1b53: 0x10c9, 0x1b54: 0xbac9, 0x1b55: 0xbae1, 0x1b56: 0xbaf9, 0x1b57: 0x1429, + 0x1b58: 0x1a31, 0x1b59: 0xbb11, 0x1b5a: 0xbb29, 0x1b5b: 0xbb41, 0x1b5c: 0xbb59, 0x1b5d: 0xbb71, + 0x1b5e: 0xbb89, 0x1b5f: 0x2109, 0x1b60: 0x1111, 0x1b61: 0x1429, 0x1b62: 0xbba1, 0x1b63: 0xbbb9, + 0x1b64: 0xbbd1, 0x1b65: 0x10e1, 0x1b66: 0x10f9, 0x1b67: 0xbbe9, 0x1b68: 0x2079, 0x1b69: 0xbc01, + 0x1b6a: 0xbab1, 0x1b6b: 0x1099, 0x1b6c: 0x10b1, 0x1b6d: 0x10c9, 0x1b6e: 0xbac9, 0x1b6f: 0xbae1, + 0x1b70: 0xbaf9, 0x1b71: 0x1429, 0x1b72: 0x1a31, 0x1b73: 0xbb11, 0x1b74: 0xbb29, 0x1b75: 0xbb41, + 0x1b76: 0xbb59, 0x1b77: 0xbb71, 0x1b78: 0xbb89, 0x1b79: 0x2109, 0x1b7a: 0x1111, 0x1b7b: 0xbba1, + 0x1b7c: 0xbba1, 0x1b7d: 0xbbb9, 0x1b7e: 0xbbd1, 0x1b7f: 0x10e1, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x10f9, 0x1b81: 0xbbe9, 0x1b82: 0x2079, 0x1b83: 0xbc21, 0x1b84: 0xbac9, 0x1b85: 0x1429, + 0x1b86: 0xbb11, 0x1b87: 0x10e1, 0x1b88: 0x1111, 0x1b89: 0x2109, 0x1b8a: 0xbc41, 0x1b8b: 0xbc41, + 0x1b8c: 0x0040, 0x1b8d: 0x0040, 0x1b8e: 0x1f41, 0x1b8f: 0x00c9, 0x1b90: 0x0069, 0x1b91: 0x0079, + 0x1b92: 0x1f51, 0x1b93: 0x1f61, 0x1b94: 0x1f71, 0x1b95: 0x1f81, 0x1b96: 0x1f91, 0x1b97: 0x1fa1, + 0x1b98: 0x1f41, 0x1b99: 0x00c9, 0x1b9a: 0x0069, 0x1b9b: 0x0079, 0x1b9c: 0x1f51, 0x1b9d: 0x1f61, + 0x1b9e: 0x1f71, 0x1b9f: 0x1f81, 0x1ba0: 0x1f91, 0x1ba1: 0x1fa1, 0x1ba2: 0x1f41, 0x1ba3: 0x00c9, + 0x1ba4: 0x0069, 0x1ba5: 0x0079, 0x1ba6: 0x1f51, 0x1ba7: 0x1f61, 0x1ba8: 0x1f71, 0x1ba9: 0x1f81, + 0x1baa: 0x1f91, 0x1bab: 0x1fa1, 0x1bac: 0x1f41, 0x1bad: 0x00c9, 0x1bae: 0x0069, 0x1baf: 0x0079, + 0x1bb0: 0x1f51, 0x1bb1: 0x1f61, 0x1bb2: 0x1f71, 0x1bb3: 0x1f81, 0x1bb4: 0x1f91, 0x1bb5: 0x1fa1, + 0x1bb6: 0x1f41, 0x1bb7: 0x00c9, 0x1bb8: 0x0069, 0x1bb9: 0x0079, 0x1bba: 0x1f51, 0x1bbb: 0x1f61, + 0x1bbc: 0x1f71, 0x1bbd: 0x1f81, 0x1bbe: 0x1f91, 0x1bbf: 0x1fa1, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0xe115, 0x1bc1: 0xe115, 0x1bc2: 0xe135, 0x1bc3: 0xe135, 0x1bc4: 0xe115, 0x1bc5: 0xe115, + 0x1bc6: 0xe175, 0x1bc7: 0xe175, 0x1bc8: 0xe115, 0x1bc9: 0xe115, 0x1bca: 0xe135, 0x1bcb: 0xe135, + 0x1bcc: 0xe115, 0x1bcd: 0xe115, 0x1bce: 0xe1f5, 0x1bcf: 0xe1f5, 0x1bd0: 0xe115, 0x1bd1: 0xe115, + 0x1bd2: 0xe135, 0x1bd3: 0xe135, 0x1bd4: 0xe115, 0x1bd5: 0xe115, 0x1bd6: 0xe175, 0x1bd7: 0xe175, + 0x1bd8: 0xe115, 0x1bd9: 0xe115, 0x1bda: 0xe135, 0x1bdb: 0xe135, 0x1bdc: 0xe115, 0x1bdd: 0xe115, + 0x1bde: 0x8b05, 0x1bdf: 0x8b05, 0x1be0: 0x04b5, 0x1be1: 0x04b5, 0x1be2: 0x0208, 0x1be3: 0x0208, + 0x1be4: 0x0208, 0x1be5: 0x0208, 0x1be6: 0x0208, 0x1be7: 0x0208, 0x1be8: 0x0208, 0x1be9: 0x0208, + 0x1bea: 0x0208, 0x1beb: 0x0208, 0x1bec: 0x0208, 0x1bed: 0x0208, 0x1bee: 0x0208, 0x1bef: 0x0208, + 0x1bf0: 0x0208, 0x1bf1: 0x0208, 0x1bf2: 0x0208, 0x1bf3: 0x0208, 0x1bf4: 0x0208, 0x1bf5: 0x0208, + 0x1bf6: 0x0208, 0x1bf7: 0x0208, 0x1bf8: 0x0208, 0x1bf9: 0x0208, 0x1bfa: 0x0208, 0x1bfb: 0x0208, + 0x1bfc: 0x0208, 0x1bfd: 0x0208, 0x1bfe: 0x0208, 0x1bff: 0x0208, + // Block 0x70, offset 0x1c00 + 0x1c00: 0xb189, 0x1c01: 0xb1a1, 0x1c02: 0xb201, 0x1c03: 0xb249, 0x1c04: 0x0040, 0x1c05: 0xb411, + 0x1c06: 0xb291, 0x1c07: 0xb219, 0x1c08: 0xb309, 0x1c09: 0xb429, 0x1c0a: 0xb399, 0x1c0b: 0xb3b1, + 0x1c0c: 0xb3c9, 0x1c0d: 0xb3e1, 0x1c0e: 0xb2a9, 0x1c0f: 0xb339, 0x1c10: 0xb369, 0x1c11: 0xb2d9, + 0x1c12: 0xb381, 0x1c13: 0xb279, 0x1c14: 0xb2c1, 0x1c15: 0xb1d1, 0x1c16: 0xb1e9, 0x1c17: 0xb231, + 0x1c18: 0xb261, 0x1c19: 0xb2f1, 0x1c1a: 0xb321, 0x1c1b: 0xb351, 0x1c1c: 0xbc59, 0x1c1d: 0x7949, + 0x1c1e: 0xbc71, 0x1c1f: 0xbc89, 0x1c20: 0x0040, 0x1c21: 0xb1a1, 0x1c22: 0xb201, 0x1c23: 0x0040, + 0x1c24: 0xb3f9, 0x1c25: 0x0040, 0x1c26: 0x0040, 0x1c27: 0xb219, 0x1c28: 0x0040, 0x1c29: 0xb429, + 0x1c2a: 0xb399, 0x1c2b: 0xb3b1, 0x1c2c: 0xb3c9, 0x1c2d: 0xb3e1, 0x1c2e: 0xb2a9, 0x1c2f: 0xb339, + 0x1c30: 0xb369, 0x1c31: 0xb2d9, 0x1c32: 0xb381, 0x1c33: 0x0040, 0x1c34: 0xb2c1, 0x1c35: 0xb1d1, + 0x1c36: 0xb1e9, 0x1c37: 0xb231, 0x1c38: 0x0040, 0x1c39: 0xb2f1, 0x1c3a: 0x0040, 0x1c3b: 0xb351, + 0x1c3c: 0x0040, 0x1c3d: 0x0040, 0x1c3e: 0x0040, 0x1c3f: 0x0040, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x0040, 0x1c41: 0x0040, 0x1c42: 0xb201, 0x1c43: 0x0040, 0x1c44: 0x0040, 0x1c45: 0x0040, + 0x1c46: 0x0040, 0x1c47: 0xb219, 0x1c48: 0x0040, 0x1c49: 0xb429, 0x1c4a: 0x0040, 0x1c4b: 0xb3b1, + 0x1c4c: 0x0040, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0x0040, 0x1c51: 0xb2d9, + 0x1c52: 0xb381, 0x1c53: 0x0040, 0x1c54: 0xb2c1, 0x1c55: 0x0040, 0x1c56: 0x0040, 0x1c57: 0xb231, + 0x1c58: 0x0040, 0x1c59: 0xb2f1, 0x1c5a: 0x0040, 0x1c5b: 0xb351, 0x1c5c: 0x0040, 0x1c5d: 0x7949, + 0x1c5e: 0x0040, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040, + 0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0xb309, 0x1c69: 0xb429, + 0x1c6a: 0xb399, 0x1c6b: 0x0040, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339, + 0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1, + 0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0xb321, 0x1c7b: 0xb351, + 0x1c7c: 0xbc59, 0x1c7d: 0x0040, 0x1c7e: 0xbc71, 0x1c7f: 0x0040, + // Block 0x72, offset 0x1c80 + 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0xb3f9, 0x1c85: 0xb411, + 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1, + 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, + 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x0040, + 0x1c9e: 0x0040, 0x1c9f: 0x0040, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0xb249, + 0x1ca4: 0x0040, 0x1ca5: 0xb411, 0x1ca6: 0xb291, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429, + 0x1caa: 0x0040, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0xb279, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0xb261, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351, + 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0040, 0x1cc1: 0xbca2, 0x1cc2: 0xbcba, 0x1cc3: 0xbcd2, 0x1cc4: 0xbcea, 0x1cc5: 0xbd02, + 0x1cc6: 0xbd1a, 0x1cc7: 0xbd32, 0x1cc8: 0xbd4a, 0x1cc9: 0xbd62, 0x1cca: 0xbd7a, 0x1ccb: 0x0018, + 0x1ccc: 0x0018, 0x1ccd: 0x0040, 0x1cce: 0x0040, 0x1ccf: 0x0040, 0x1cd0: 0xbd92, 0x1cd1: 0xbdb2, + 0x1cd2: 0xbdd2, 0x1cd3: 0xbdf2, 0x1cd4: 0xbe12, 0x1cd5: 0xbe32, 0x1cd6: 0xbe52, 0x1cd7: 0xbe72, + 0x1cd8: 0xbe92, 0x1cd9: 0xbeb2, 0x1cda: 0xbed2, 0x1cdb: 0xbef2, 0x1cdc: 0xbf12, 0x1cdd: 0xbf32, + 0x1cde: 0xbf52, 0x1cdf: 0xbf72, 0x1ce0: 0xbf92, 0x1ce1: 0xbfb2, 0x1ce2: 0xbfd2, 0x1ce3: 0xbff2, + 0x1ce4: 0xc012, 0x1ce5: 0xc032, 0x1ce6: 0xc052, 0x1ce7: 0xc072, 0x1ce8: 0xc092, 0x1ce9: 0xc0b2, + 0x1cea: 0xc0d1, 0x1ceb: 0x1159, 0x1cec: 0x0269, 0x1ced: 0x6671, 0x1cee: 0xc111, 0x1cef: 0x0040, + 0x1cf0: 0x0039, 0x1cf1: 0x0ee9, 0x1cf2: 0x1159, 0x1cf3: 0x0ef9, 0x1cf4: 0x0f09, 0x1cf5: 0x1199, + 0x1cf6: 0x0f31, 0x1cf7: 0x0249, 0x1cf8: 0x0f41, 0x1cf9: 0x0259, 0x1cfa: 0x0f51, 0x1cfb: 0x0359, + 0x1cfc: 0x0f61, 0x1cfd: 0x0f71, 0x1cfe: 0x00d9, 0x1cff: 0x0f99, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x2039, 0x1d01: 0x0269, 0x1d02: 0x01d9, 0x1d03: 0x0fa9, 0x1d04: 0x0fb9, 0x1d05: 0x1089, + 0x1d06: 0x0279, 0x1d07: 0x0369, 0x1d08: 0x0289, 0x1d09: 0x13d1, 0x1d0a: 0xc129, 0x1d0b: 0x65b1, + 0x1d0c: 0xc141, 0x1d0d: 0x1441, 0x1d0e: 0xc159, 0x1d0f: 0xc179, 0x1d10: 0x0018, 0x1d11: 0x0018, + 0x1d12: 0x0018, 0x1d13: 0x0018, 0x1d14: 0x0018, 0x1d15: 0x0018, 0x1d16: 0x0018, 0x1d17: 0x0018, + 0x1d18: 0x0018, 0x1d19: 0x0018, 0x1d1a: 0x0018, 0x1d1b: 0x0018, 0x1d1c: 0x0018, 0x1d1d: 0x0018, + 0x1d1e: 0x0018, 0x1d1f: 0x0018, 0x1d20: 0x0018, 0x1d21: 0x0018, 0x1d22: 0x0018, 0x1d23: 0x0018, + 0x1d24: 0x0018, 0x1d25: 0x0018, 0x1d26: 0x0018, 0x1d27: 0x0018, 0x1d28: 0x0018, 0x1d29: 0x0018, + 0x1d2a: 0xc191, 0x1d2b: 0xc1a9, 0x1d2c: 0x0040, 0x1d2d: 0x0040, 0x1d2e: 0x0040, 0x1d2f: 0x0040, + 0x1d30: 0x0018, 0x1d31: 0x0018, 0x1d32: 0x0018, 0x1d33: 0x0018, 0x1d34: 0x0018, 0x1d35: 0x0018, + 0x1d36: 0x0018, 0x1d37: 0x0018, 0x1d38: 0x0018, 0x1d39: 0x0018, 0x1d3a: 0x0018, 0x1d3b: 0x0018, + 0x1d3c: 0x0018, 0x1d3d: 0x0018, 0x1d3e: 0x0018, 0x1d3f: 0x0018, + // Block 0x75, offset 0x1d40 + 0x1d40: 0xc1d9, 0x1d41: 0xc211, 0x1d42: 0xc249, 0x1d43: 0x0040, 0x1d44: 0x0040, 0x1d45: 0x0040, + 0x1d46: 0x0040, 0x1d47: 0x0040, 0x1d48: 0x0040, 0x1d49: 0x0040, 0x1d4a: 0x0040, 0x1d4b: 0x0040, + 0x1d4c: 0x0040, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xc269, 0x1d51: 0xc289, + 0x1d52: 0xc2a9, 0x1d53: 0xc2c9, 0x1d54: 0xc2e9, 0x1d55: 0xc309, 0x1d56: 0xc329, 0x1d57: 0xc349, + 0x1d58: 0xc369, 0x1d59: 0xc389, 0x1d5a: 0xc3a9, 0x1d5b: 0xc3c9, 0x1d5c: 0xc3e9, 0x1d5d: 0xc409, + 0x1d5e: 0xc429, 0x1d5f: 0xc449, 0x1d60: 0xc469, 0x1d61: 0xc489, 0x1d62: 0xc4a9, 0x1d63: 0xc4c9, + 0x1d64: 0xc4e9, 0x1d65: 0xc509, 0x1d66: 0xc529, 0x1d67: 0xc549, 0x1d68: 0xc569, 0x1d69: 0xc589, + 0x1d6a: 0xc5a9, 0x1d6b: 0xc5c9, 0x1d6c: 0xc5e9, 0x1d6d: 0xc609, 0x1d6e: 0xc629, 0x1d6f: 0xc649, + 0x1d70: 0xc669, 0x1d71: 0xc689, 0x1d72: 0xc6a9, 0x1d73: 0xc6c9, 0x1d74: 0xc6e9, 0x1d75: 0xc709, + 0x1d76: 0xc729, 0x1d77: 0xc749, 0x1d78: 0xc769, 0x1d79: 0xc789, 0x1d7a: 0xc7a9, 0x1d7b: 0xc7c9, + 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040, + // Block 0x76, offset 0x1d80 + 0x1d80: 0xcaf9, 0x1d81: 0xcb19, 0x1d82: 0xcb39, 0x1d83: 0x8b1d, 0x1d84: 0xcb59, 0x1d85: 0xcb79, + 0x1d86: 0xcb99, 0x1d87: 0xcbb9, 0x1d88: 0xcbd9, 0x1d89: 0xcbf9, 0x1d8a: 0xcc19, 0x1d8b: 0xcc39, + 0x1d8c: 0xcc59, 0x1d8d: 0x8b3d, 0x1d8e: 0xcc79, 0x1d8f: 0xcc99, 0x1d90: 0xccb9, 0x1d91: 0xccd9, + 0x1d92: 0x8b5d, 0x1d93: 0xccf9, 0x1d94: 0xcd19, 0x1d95: 0xc429, 0x1d96: 0x8b7d, 0x1d97: 0xcd39, + 0x1d98: 0xcd59, 0x1d99: 0xcd79, 0x1d9a: 0xcd99, 0x1d9b: 0xcdb9, 0x1d9c: 0x8b9d, 0x1d9d: 0xcdd9, + 0x1d9e: 0xcdf9, 0x1d9f: 0xce19, 0x1da0: 0xce39, 0x1da1: 0xce59, 0x1da2: 0xc789, 0x1da3: 0xce79, + 0x1da4: 0xce99, 0x1da5: 0xceb9, 0x1da6: 0xced9, 0x1da7: 0xcef9, 0x1da8: 0xcf19, 0x1da9: 0xcf39, + 0x1daa: 0xcf59, 0x1dab: 0xcf79, 0x1dac: 0xcf99, 0x1dad: 0xcfb9, 0x1dae: 0xcfd9, 0x1daf: 0xcff9, + 0x1db0: 0xd019, 0x1db1: 0xd039, 0x1db2: 0xd039, 0x1db3: 0xd039, 0x1db4: 0x8bbd, 0x1db5: 0xd059, + 0x1db6: 0xd079, 0x1db7: 0xd099, 0x1db8: 0x8bdd, 0x1db9: 0xd0b9, 0x1dba: 0xd0d9, 0x1dbb: 0xd0f9, + 0x1dbc: 0xd119, 0x1dbd: 0xd139, 0x1dbe: 0xd159, 0x1dbf: 0xd179, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xd199, 0x1dc1: 0xd1b9, 0x1dc2: 0xd1d9, 0x1dc3: 0xd1f9, 0x1dc4: 0xd219, 0x1dc5: 0xd239, + 0x1dc6: 0xd239, 0x1dc7: 0xd259, 0x1dc8: 0xd279, 0x1dc9: 0xd299, 0x1dca: 0xd2b9, 0x1dcb: 0xd2d9, + 0x1dcc: 0xd2f9, 0x1dcd: 0xd319, 0x1dce: 0xd339, 0x1dcf: 0xd359, 0x1dd0: 0xd379, 0x1dd1: 0xd399, + 0x1dd2: 0xd3b9, 0x1dd3: 0xd3d9, 0x1dd4: 0xd3f9, 0x1dd5: 0xd419, 0x1dd6: 0xd439, 0x1dd7: 0xd459, + 0x1dd8: 0xd479, 0x1dd9: 0x8bfd, 0x1dda: 0xd499, 0x1ddb: 0xd4b9, 0x1ddc: 0xd4d9, 0x1ddd: 0xc309, + 0x1dde: 0xd4f9, 0x1ddf: 0xd519, 0x1de0: 0x8c1d, 0x1de1: 0x8c3d, 0x1de2: 0xd539, 0x1de3: 0xd559, + 0x1de4: 0xd579, 0x1de5: 0xd599, 0x1de6: 0xd5b9, 0x1de7: 0xd5d9, 0x1de8: 0x0040, 0x1de9: 0xd5f9, + 0x1dea: 0xd619, 0x1deb: 0xd619, 0x1dec: 0x8c5d, 0x1ded: 0xd639, 0x1dee: 0xd659, 0x1def: 0xd679, + 0x1df0: 0xd699, 0x1df1: 0x8c7d, 0x1df2: 0xd6b9, 0x1df3: 0xd6d9, 0x1df4: 0x0040, 0x1df5: 0xd6f9, + 0x1df6: 0xd719, 0x1df7: 0xd739, 0x1df8: 0xd759, 0x1df9: 0xd779, 0x1dfa: 0xd799, 0x1dfb: 0x8c9d, + 0x1dfc: 0xd7b9, 0x1dfd: 0x8cbd, 0x1dfe: 0xd7d9, 0x1dff: 0xd7f9, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xd819, 0x1e01: 0xd839, 0x1e02: 0xd859, 0x1e03: 0xd879, 0x1e04: 0xd899, 0x1e05: 0xd8b9, + 0x1e06: 0xd8d9, 0x1e07: 0xd8f9, 0x1e08: 0xd919, 0x1e09: 0x8cdd, 0x1e0a: 0xd939, 0x1e0b: 0xd959, + 0x1e0c: 0xd979, 0x1e0d: 0xd999, 0x1e0e: 0xd9b9, 0x1e0f: 0x8cfd, 0x1e10: 0xd9d9, 0x1e11: 0x8d1d, + 0x1e12: 0x8d3d, 0x1e13: 0xd9f9, 0x1e14: 0xda19, 0x1e15: 0xda19, 0x1e16: 0xda39, 0x1e17: 0x8d5d, + 0x1e18: 0x8d7d, 0x1e19: 0xda59, 0x1e1a: 0xda79, 0x1e1b: 0xda99, 0x1e1c: 0xdab9, 0x1e1d: 0xdad9, + 0x1e1e: 0xdaf9, 0x1e1f: 0xdb19, 0x1e20: 0xdb39, 0x1e21: 0xdb59, 0x1e22: 0xdb79, 0x1e23: 0xdb99, + 0x1e24: 0x8d9d, 0x1e25: 0xdbb9, 0x1e26: 0xdbd9, 0x1e27: 0xdbf9, 0x1e28: 0xdc19, 0x1e29: 0xdbf9, + 0x1e2a: 0xdc39, 0x1e2b: 0xdc59, 0x1e2c: 0xdc79, 0x1e2d: 0xdc99, 0x1e2e: 0xdcb9, 0x1e2f: 0xdcd9, + 0x1e30: 0xdcf9, 0x1e31: 0xdd19, 0x1e32: 0xdd39, 0x1e33: 0xdd59, 0x1e34: 0xdd79, 0x1e35: 0xdd99, + 0x1e36: 0xddb9, 0x1e37: 0xddd9, 0x1e38: 0x8dbd, 0x1e39: 0xddf9, 0x1e3a: 0xde19, 0x1e3b: 0xde39, + 0x1e3c: 0xde59, 0x1e3d: 0xde79, 0x1e3e: 0x8ddd, 0x1e3f: 0xde99, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xe599, 0x1e41: 0xe5b9, 0x1e42: 0xe5d9, 0x1e43: 0xe5f9, 0x1e44: 0xe619, 0x1e45: 0xe639, + 0x1e46: 0x8efd, 0x1e47: 0xe659, 0x1e48: 0xe679, 0x1e49: 0xe699, 0x1e4a: 0xe6b9, 0x1e4b: 0xe6d9, + 0x1e4c: 0xe6f9, 0x1e4d: 0x8f1d, 0x1e4e: 0xe719, 0x1e4f: 0xe739, 0x1e50: 0x8f3d, 0x1e51: 0x8f5d, + 0x1e52: 0xe759, 0x1e53: 0xe779, 0x1e54: 0xe799, 0x1e55: 0xe7b9, 0x1e56: 0xe7d9, 0x1e57: 0xe7f9, + 0x1e58: 0xe819, 0x1e59: 0xe839, 0x1e5a: 0xe859, 0x1e5b: 0x8f7d, 0x1e5c: 0xe879, 0x1e5d: 0x8f9d, + 0x1e5e: 0xe899, 0x1e5f: 0x0040, 0x1e60: 0xe8b9, 0x1e61: 0xe8d9, 0x1e62: 0xe8f9, 0x1e63: 0x8fbd, + 0x1e64: 0xe919, 0x1e65: 0xe939, 0x1e66: 0x8fdd, 0x1e67: 0x8ffd, 0x1e68: 0xe959, 0x1e69: 0xe979, + 0x1e6a: 0xe999, 0x1e6b: 0xe9b9, 0x1e6c: 0xe9d9, 0x1e6d: 0xe9d9, 0x1e6e: 0xe9f9, 0x1e6f: 0xea19, + 0x1e70: 0xea39, 0x1e71: 0xea59, 0x1e72: 0xea79, 0x1e73: 0xea99, 0x1e74: 0xeab9, 0x1e75: 0x901d, + 0x1e76: 0xead9, 0x1e77: 0x903d, 0x1e78: 0xeaf9, 0x1e79: 0x905d, 0x1e7a: 0xeb19, 0x1e7b: 0x907d, + 0x1e7c: 0x909d, 0x1e7d: 0x90bd, 0x1e7e: 0xeb39, 0x1e7f: 0xeb59, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xeb79, 0x1e81: 0x90dd, 0x1e82: 0x90fd, 0x1e83: 0x911d, 0x1e84: 0x913d, 0x1e85: 0xeb99, + 0x1e86: 0xebb9, 0x1e87: 0xebb9, 0x1e88: 0xebd9, 0x1e89: 0xebf9, 0x1e8a: 0xec19, 0x1e8b: 0xec39, + 0x1e8c: 0xec59, 0x1e8d: 0x915d, 0x1e8e: 0xec79, 0x1e8f: 0xec99, 0x1e90: 0xecb9, 0x1e91: 0xecd9, + 0x1e92: 0x917d, 0x1e93: 0xecf9, 0x1e94: 0x919d, 0x1e95: 0x91bd, 0x1e96: 0xed19, 0x1e97: 0xed39, + 0x1e98: 0xed59, 0x1e99: 0xed79, 0x1e9a: 0xed99, 0x1e9b: 0xedb9, 0x1e9c: 0x91dd, 0x1e9d: 0x91fd, + 0x1e9e: 0x921d, 0x1e9f: 0x0040, 0x1ea0: 0xedd9, 0x1ea1: 0x923d, 0x1ea2: 0xedf9, 0x1ea3: 0xee19, + 0x1ea4: 0xee39, 0x1ea5: 0x925d, 0x1ea6: 0xee59, 0x1ea7: 0xee79, 0x1ea8: 0xee99, 0x1ea9: 0xeeb9, + 0x1eaa: 0xeed9, 0x1eab: 0x927d, 0x1eac: 0xeef9, 0x1ead: 0xef19, 0x1eae: 0xef39, 0x1eaf: 0xef59, + 0x1eb0: 0xef79, 0x1eb1: 0xef99, 0x1eb2: 0x929d, 0x1eb3: 0x92bd, 0x1eb4: 0xefb9, 0x1eb5: 0x92dd, + 0x1eb6: 0xefd9, 0x1eb7: 0x92fd, 0x1eb8: 0xeff9, 0x1eb9: 0xf019, 0x1eba: 0xf039, 0x1ebb: 0x931d, + 0x1ebc: 0x933d, 0x1ebd: 0xf059, 0x1ebe: 0x935d, 0x1ebf: 0xf079, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xf6b9, 0x1ec1: 0xf6d9, 0x1ec2: 0xf6f9, 0x1ec3: 0xf719, 0x1ec4: 0xf739, 0x1ec5: 0x951d, + 0x1ec6: 0xf759, 0x1ec7: 0xf779, 0x1ec8: 0xf799, 0x1ec9: 0xf7b9, 0x1eca: 0xf7d9, 0x1ecb: 0x953d, + 0x1ecc: 0x955d, 0x1ecd: 0xf7f9, 0x1ece: 0xf819, 0x1ecf: 0xf839, 0x1ed0: 0xf859, 0x1ed1: 0xf879, + 0x1ed2: 0xf899, 0x1ed3: 0x957d, 0x1ed4: 0xf8b9, 0x1ed5: 0xf8d9, 0x1ed6: 0xf8f9, 0x1ed7: 0xf919, + 0x1ed8: 0x959d, 0x1ed9: 0x95bd, 0x1eda: 0xf939, 0x1edb: 0xf959, 0x1edc: 0xf979, 0x1edd: 0x95dd, + 0x1ede: 0xf999, 0x1edf: 0xf9b9, 0x1ee0: 0x6815, 0x1ee1: 0x95fd, 0x1ee2: 0xf9d9, 0x1ee3: 0xf9f9, + 0x1ee4: 0xfa19, 0x1ee5: 0x961d, 0x1ee6: 0xfa39, 0x1ee7: 0xfa59, 0x1ee8: 0xfa79, 0x1ee9: 0xfa99, + 0x1eea: 0xfab9, 0x1eeb: 0xfad9, 0x1eec: 0xfaf9, 0x1eed: 0x963d, 0x1eee: 0xfb19, 0x1eef: 0xfb39, + 0x1ef0: 0xfb59, 0x1ef1: 0x965d, 0x1ef2: 0xfb79, 0x1ef3: 0xfb99, 0x1ef4: 0xfbb9, 0x1ef5: 0xfbd9, + 0x1ef6: 0x7b35, 0x1ef7: 0x967d, 0x1ef8: 0xfbf9, 0x1ef9: 0xfc19, 0x1efa: 0xfc39, 0x1efb: 0x969d, + 0x1efc: 0xfc59, 0x1efd: 0x96bd, 0x1efe: 0xfc79, 0x1eff: 0xfc79, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xfc99, 0x1f01: 0x96dd, 0x1f02: 0xfcb9, 0x1f03: 0xfcd9, 0x1f04: 0xfcf9, 0x1f05: 0xfd19, + 0x1f06: 0xfd39, 0x1f07: 0xfd59, 0x1f08: 0xfd79, 0x1f09: 0x96fd, 0x1f0a: 0xfd99, 0x1f0b: 0xfdb9, + 0x1f0c: 0xfdd9, 0x1f0d: 0xfdf9, 0x1f0e: 0xfe19, 0x1f0f: 0xfe39, 0x1f10: 0x971d, 0x1f11: 0xfe59, + 0x1f12: 0x973d, 0x1f13: 0x975d, 0x1f14: 0x977d, 0x1f15: 0xfe79, 0x1f16: 0xfe99, 0x1f17: 0xfeb9, + 0x1f18: 0xfed9, 0x1f19: 0xfef9, 0x1f1a: 0xff19, 0x1f1b: 0xff39, 0x1f1c: 0xff59, 0x1f1d: 0x979d, + 0x1f1e: 0x0040, 0x1f1f: 0x0040, 0x1f20: 0x0040, 0x1f21: 0x0040, 0x1f22: 0x0040, 0x1f23: 0x0040, + 0x1f24: 0x0040, 0x1f25: 0x0040, 0x1f26: 0x0040, 0x1f27: 0x0040, 0x1f28: 0x0040, 0x1f29: 0x0040, + 0x1f2a: 0x0040, 0x1f2b: 0x0040, 0x1f2c: 0x0040, 0x1f2d: 0x0040, 0x1f2e: 0x0040, 0x1f2f: 0x0040, + 0x1f30: 0x0040, 0x1f31: 0x0040, 0x1f32: 0x0040, 0x1f33: 0x0040, 0x1f34: 0x0040, 0x1f35: 0x0040, + 0x1f36: 0x0040, 0x1f37: 0x0040, 0x1f38: 0x0040, 0x1f39: 0x0040, 0x1f3a: 0x0040, 0x1f3b: 0x0040, + 0x1f3c: 0x0040, 0x1f3d: 0x0040, 0x1f3e: 0x0040, 0x1f3f: 0x0040, +} + +// idnaIndex: 35 blocks, 2240 entries, 4480 bytes +// Block 0 is the zero block. +var idnaIndex = [2240]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7b, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7c, 0xca: 0x7d, 0xcb: 0x07, 0xcc: 0x7e, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x7f, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x80, 0xd6: 0x81, 0xd7: 0x82, + 0xd8: 0x0f, 0xd9: 0x83, 0xda: 0x84, 0xdb: 0x10, 0xdc: 0x11, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20, + // Block 0x4, offset 0x100 + 0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x12, 0x126: 0x13, 0x127: 0x14, + 0x128: 0x15, 0x129: 0x16, 0x12a: 0x17, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1c, 0x132: 0x1d, 0x133: 0x1e, 0x134: 0x8f, 0x135: 0x1f, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x20, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x21, 0x13e: 0x22, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9b, 0x147: 0x9b, + 0x148: 0x9d, 0x149: 0x9e, 0x14a: 0x9f, 0x14b: 0xa0, 0x14c: 0xa1, 0x14d: 0xa2, 0x14e: 0xa3, 0x14f: 0xa4, + 0x150: 0xa5, 0x151: 0x9d, 0x152: 0x9d, 0x153: 0x9d, 0x154: 0x9d, 0x155: 0x9d, 0x156: 0x9d, 0x157: 0x9d, + 0x158: 0x9d, 0x159: 0xa6, 0x15a: 0xa7, 0x15b: 0xa8, 0x15c: 0xa9, 0x15d: 0xaa, 0x15e: 0xab, 0x15f: 0xac, + 0x160: 0xad, 0x161: 0xae, 0x162: 0xaf, 0x163: 0xb0, 0x164: 0xb1, 0x165: 0xb2, 0x166: 0xb3, 0x167: 0xb4, + 0x168: 0xb5, 0x169: 0xb6, 0x16a: 0xb7, 0x16b: 0xb8, 0x16c: 0xb9, 0x16d: 0xba, 0x16e: 0xbb, 0x16f: 0xbc, + 0x170: 0xbd, 0x171: 0xbe, 0x172: 0xbf, 0x173: 0xc0, 0x174: 0x23, 0x175: 0x24, 0x176: 0x25, 0x177: 0xc1, + 0x178: 0x26, 0x179: 0x26, 0x17a: 0x27, 0x17b: 0x26, 0x17c: 0xc2, 0x17d: 0x28, 0x17e: 0x29, 0x17f: 0x2a, + // Block 0x6, offset 0x180 + 0x180: 0x2b, 0x181: 0x2c, 0x182: 0x2d, 0x183: 0xc3, 0x184: 0x2e, 0x185: 0x2f, 0x186: 0xc4, 0x187: 0x9b, + 0x188: 0xc5, 0x189: 0xc6, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc7, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xc8, + 0x190: 0xc9, 0x191: 0x30, 0x192: 0x31, 0x193: 0x32, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xca, 0x1a9: 0xcb, 0x1aa: 0x9b, 0x1ab: 0xcc, 0x1ac: 0x9b, 0x1ad: 0xcd, 0x1ae: 0xce, 0x1af: 0xcf, + 0x1b0: 0xd0, 0x1b1: 0x33, 0x1b2: 0x26, 0x1b3: 0x34, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4, + 0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x35, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x36, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x37, 0x1c6: 0x38, 0x1c7: 0xe0, + 0x1c8: 0xe1, 0x1c9: 0x39, 0x1ca: 0x3a, 0x1cb: 0x3b, 0x1cc: 0x3c, 0x1cd: 0x3d, 0x1ce: 0x3e, 0x1cf: 0x3f, + 0x1d0: 0x9d, 0x1d1: 0x9d, 0x1d2: 0x9d, 0x1d3: 0x9d, 0x1d4: 0x9d, 0x1d5: 0x9d, 0x1d6: 0x9d, 0x1d7: 0x9d, + 0x1d8: 0x9d, 0x1d9: 0x9d, 0x1da: 0x9d, 0x1db: 0x9d, 0x1dc: 0x9d, 0x1dd: 0x9d, 0x1de: 0x9d, 0x1df: 0x9d, + 0x1e0: 0x9d, 0x1e1: 0x9d, 0x1e2: 0x9d, 0x1e3: 0x9d, 0x1e4: 0x9d, 0x1e5: 0x9d, 0x1e6: 0x9d, 0x1e7: 0x9d, + 0x1e8: 0x9d, 0x1e9: 0x9d, 0x1ea: 0x9d, 0x1eb: 0x9d, 0x1ec: 0x9d, 0x1ed: 0x9d, 0x1ee: 0x9d, 0x1ef: 0x9d, + 0x1f0: 0x9d, 0x1f1: 0x9d, 0x1f2: 0x9d, 0x1f3: 0x9d, 0x1f4: 0x9d, 0x1f5: 0x9d, 0x1f6: 0x9d, 0x1f7: 0x9d, + 0x1f8: 0x9d, 0x1f9: 0x9d, 0x1fa: 0x9d, 0x1fb: 0x9d, 0x1fc: 0x9d, 0x1fd: 0x9d, 0x1fe: 0x9d, 0x1ff: 0x9d, + // Block 0x8, offset 0x200 + 0x200: 0x9d, 0x201: 0x9d, 0x202: 0x9d, 0x203: 0x9d, 0x204: 0x9d, 0x205: 0x9d, 0x206: 0x9d, 0x207: 0x9d, + 0x208: 0x9d, 0x209: 0x9d, 0x20a: 0x9d, 0x20b: 0x9d, 0x20c: 0x9d, 0x20d: 0x9d, 0x20e: 0x9d, 0x20f: 0x9d, + 0x210: 0x9d, 0x211: 0x9d, 0x212: 0x9d, 0x213: 0x9d, 0x214: 0x9d, 0x215: 0x9d, 0x216: 0x9d, 0x217: 0x9d, + 0x218: 0x9d, 0x219: 0x9d, 0x21a: 0x9d, 0x21b: 0x9d, 0x21c: 0x9d, 0x21d: 0x9d, 0x21e: 0x9d, 0x21f: 0x9d, + 0x220: 0x9d, 0x221: 0x9d, 0x222: 0x9d, 0x223: 0x9d, 0x224: 0x9d, 0x225: 0x9d, 0x226: 0x9d, 0x227: 0x9d, + 0x228: 0x9d, 0x229: 0x9d, 0x22a: 0x9d, 0x22b: 0x9d, 0x22c: 0x9d, 0x22d: 0x9d, 0x22e: 0x9d, 0x22f: 0x9d, + 0x230: 0x9d, 0x231: 0x9d, 0x232: 0x9d, 0x233: 0x9d, 0x234: 0x9d, 0x235: 0x9d, 0x236: 0xb0, 0x237: 0x9b, + 0x238: 0x9d, 0x239: 0x9d, 0x23a: 0x9d, 0x23b: 0x9d, 0x23c: 0x9d, 0x23d: 0x9d, 0x23e: 0x9d, 0x23f: 0x9d, + // Block 0x9, offset 0x240 + 0x240: 0x9d, 0x241: 0x9d, 0x242: 0x9d, 0x243: 0x9d, 0x244: 0x9d, 0x245: 0x9d, 0x246: 0x9d, 0x247: 0x9d, + 0x248: 0x9d, 0x249: 0x9d, 0x24a: 0x9d, 0x24b: 0x9d, 0x24c: 0x9d, 0x24d: 0x9d, 0x24e: 0x9d, 0x24f: 0x9d, + 0x250: 0x9d, 0x251: 0x9d, 0x252: 0x9d, 0x253: 0x9d, 0x254: 0x9d, 0x255: 0x9d, 0x256: 0x9d, 0x257: 0x9d, + 0x258: 0x9d, 0x259: 0x9d, 0x25a: 0x9d, 0x25b: 0x9d, 0x25c: 0x9d, 0x25d: 0x9d, 0x25e: 0x9d, 0x25f: 0x9d, + 0x260: 0x9d, 0x261: 0x9d, 0x262: 0x9d, 0x263: 0x9d, 0x264: 0x9d, 0x265: 0x9d, 0x266: 0x9d, 0x267: 0x9d, + 0x268: 0x9d, 0x269: 0x9d, 0x26a: 0x9d, 0x26b: 0x9d, 0x26c: 0x9d, 0x26d: 0x9d, 0x26e: 0x9d, 0x26f: 0x9d, + 0x270: 0x9d, 0x271: 0x9d, 0x272: 0x9d, 0x273: 0x9d, 0x274: 0x9d, 0x275: 0x9d, 0x276: 0x9d, 0x277: 0x9d, + 0x278: 0x9d, 0x279: 0x9d, 0x27a: 0x9d, 0x27b: 0x9d, 0x27c: 0x9d, 0x27d: 0x9d, 0x27e: 0x9d, 0x27f: 0x9d, + // Block 0xa, offset 0x280 + 0x280: 0x9d, 0x281: 0x9d, 0x282: 0x9d, 0x283: 0x9d, 0x284: 0x9d, 0x285: 0x9d, 0x286: 0x9d, 0x287: 0x9d, + 0x288: 0x9d, 0x289: 0x9d, 0x28a: 0x9d, 0x28b: 0x9d, 0x28c: 0x9d, 0x28d: 0x9d, 0x28e: 0x9d, 0x28f: 0x9d, + 0x290: 0x9d, 0x291: 0x9d, 0x292: 0x9d, 0x293: 0x9d, 0x294: 0x9d, 0x295: 0x9d, 0x296: 0x9d, 0x297: 0x9d, + 0x298: 0x9d, 0x299: 0x9d, 0x29a: 0x9d, 0x29b: 0x9d, 0x29c: 0x9d, 0x29d: 0x9d, 0x29e: 0x9d, 0x29f: 0x9d, + 0x2a0: 0x9d, 0x2a1: 0x9d, 0x2a2: 0x9d, 0x2a3: 0x9d, 0x2a4: 0x9d, 0x2a5: 0x9d, 0x2a6: 0x9d, 0x2a7: 0x9d, + 0x2a8: 0x9d, 0x2a9: 0x9d, 0x2aa: 0x9d, 0x2ab: 0x9d, 0x2ac: 0x9d, 0x2ad: 0x9d, 0x2ae: 0x9d, 0x2af: 0x9d, + 0x2b0: 0x9d, 0x2b1: 0x9d, 0x2b2: 0x9d, 0x2b3: 0x9d, 0x2b4: 0x9d, 0x2b5: 0x9d, 0x2b6: 0x9d, 0x2b7: 0x9d, + 0x2b8: 0x9d, 0x2b9: 0x9d, 0x2ba: 0x9d, 0x2bb: 0x9d, 0x2bc: 0x9d, 0x2bd: 0x9d, 0x2be: 0x9d, 0x2bf: 0xe2, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9d, 0x2c1: 0x9d, 0x2c2: 0x9d, 0x2c3: 0x9d, 0x2c4: 0x9d, 0x2c5: 0x9d, 0x2c6: 0x9d, 0x2c7: 0x9d, + 0x2c8: 0x9d, 0x2c9: 0x9d, 0x2ca: 0x9d, 0x2cb: 0x9d, 0x2cc: 0x9d, 0x2cd: 0x9d, 0x2ce: 0x9d, 0x2cf: 0x9d, + 0x2d0: 0x9d, 0x2d1: 0x9d, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9d, 0x2d5: 0x9d, 0x2d6: 0x9d, 0x2d7: 0x9d, + 0x2d8: 0xe5, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe6, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xe7, + 0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef, + 0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7, + 0x2f0: 0x9d, 0x2f1: 0x9d, 0x2f2: 0x9d, 0x2f3: 0x9d, 0x2f4: 0x9d, 0x2f5: 0x9d, 0x2f6: 0x9d, 0x2f7: 0x9d, + 0x2f8: 0x9d, 0x2f9: 0x9d, 0x2fa: 0x9d, 0x2fb: 0x9d, 0x2fc: 0x9d, 0x2fd: 0x9d, 0x2fe: 0x9d, 0x2ff: 0x9d, + // Block 0xc, offset 0x300 + 0x300: 0x9d, 0x301: 0x9d, 0x302: 0x9d, 0x303: 0x9d, 0x304: 0x9d, 0x305: 0x9d, 0x306: 0x9d, 0x307: 0x9d, + 0x308: 0x9d, 0x309: 0x9d, 0x30a: 0x9d, 0x30b: 0x9d, 0x30c: 0x9d, 0x30d: 0x9d, 0x30e: 0x9d, 0x30f: 0x9d, + 0x310: 0x9d, 0x311: 0x9d, 0x312: 0x9d, 0x313: 0x9d, 0x314: 0x9d, 0x315: 0x9d, 0x316: 0x9d, 0x317: 0x9d, + 0x318: 0x9d, 0x319: 0x9d, 0x31a: 0x9d, 0x31b: 0x9d, 0x31c: 0x9d, 0x31d: 0x9d, 0x31e: 0xf8, 0x31f: 0xf9, + // Block 0xd, offset 0x340 + 0x340: 0xb8, 0x341: 0xb8, 0x342: 0xb8, 0x343: 0xb8, 0x344: 0xb8, 0x345: 0xb8, 0x346: 0xb8, 0x347: 0xb8, + 0x348: 0xb8, 0x349: 0xb8, 0x34a: 0xb8, 0x34b: 0xb8, 0x34c: 0xb8, 0x34d: 0xb8, 0x34e: 0xb8, 0x34f: 0xb8, + 0x350: 0xb8, 0x351: 0xb8, 0x352: 0xb8, 0x353: 0xb8, 0x354: 0xb8, 0x355: 0xb8, 0x356: 0xb8, 0x357: 0xb8, + 0x358: 0xb8, 0x359: 0xb8, 0x35a: 0xb8, 0x35b: 0xb8, 0x35c: 0xb8, 0x35d: 0xb8, 0x35e: 0xb8, 0x35f: 0xb8, + 0x360: 0xb8, 0x361: 0xb8, 0x362: 0xb8, 0x363: 0xb8, 0x364: 0xb8, 0x365: 0xb8, 0x366: 0xb8, 0x367: 0xb8, + 0x368: 0xb8, 0x369: 0xb8, 0x36a: 0xb8, 0x36b: 0xb8, 0x36c: 0xb8, 0x36d: 0xb8, 0x36e: 0xb8, 0x36f: 0xb8, + 0x370: 0xb8, 0x371: 0xb8, 0x372: 0xb8, 0x373: 0xb8, 0x374: 0xb8, 0x375: 0xb8, 0x376: 0xb8, 0x377: 0xb8, + 0x378: 0xb8, 0x379: 0xb8, 0x37a: 0xb8, 0x37b: 0xb8, 0x37c: 0xb8, 0x37d: 0xb8, 0x37e: 0xb8, 0x37f: 0xb8, + // Block 0xe, offset 0x380 + 0x380: 0xb8, 0x381: 0xb8, 0x382: 0xb8, 0x383: 0xb8, 0x384: 0xb8, 0x385: 0xb8, 0x386: 0xb8, 0x387: 0xb8, + 0x388: 0xb8, 0x389: 0xb8, 0x38a: 0xb8, 0x38b: 0xb8, 0x38c: 0xb8, 0x38d: 0xb8, 0x38e: 0xb8, 0x38f: 0xb8, + 0x390: 0xb8, 0x391: 0xb8, 0x392: 0xb8, 0x393: 0xb8, 0x394: 0xb8, 0x395: 0xb8, 0x396: 0xb8, 0x397: 0xb8, + 0x398: 0xb8, 0x399: 0xb8, 0x39a: 0xb8, 0x39b: 0xb8, 0x39c: 0xb8, 0x39d: 0xb8, 0x39e: 0xb8, 0x39f: 0xb8, + 0x3a0: 0xb8, 0x3a1: 0xb8, 0x3a2: 0xb8, 0x3a3: 0xb8, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd, + 0x3a8: 0x45, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a, + 0x3b0: 0x100, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x101, 0x3b7: 0x50, + 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9d, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107, + 0x3c8: 0xb8, 0x3c9: 0xb8, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d, + 0x3d0: 0x10e, 0x3d1: 0x9d, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xb8, 0x3d7: 0xb8, + 0x3d8: 0x9d, 0x3d9: 0x9d, 0x3da: 0x9d, 0x3db: 0x9d, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xb8, 0x3df: 0xb8, + 0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xb8, 0x3e6: 0x11a, 0x3e7: 0x11b, + 0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x59, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5a, 0x3ef: 0xb8, + 0x3f0: 0x9d, 0x3f1: 0x121, 0x3f2: 0x122, 0x3f3: 0x123, 0x3f4: 0xb8, 0x3f5: 0xb8, 0x3f6: 0xb8, 0x3f7: 0xb8, + 0x3f8: 0xb8, 0x3f9: 0x124, 0x3fa: 0xb8, 0x3fb: 0xb8, 0x3fc: 0xb8, 0x3fd: 0xb8, 0x3fe: 0xb8, 0x3ff: 0xb8, + // Block 0x10, offset 0x400 + 0x400: 0x125, 0x401: 0x126, 0x402: 0x127, 0x403: 0x128, 0x404: 0x129, 0x405: 0x12a, 0x406: 0x12b, 0x407: 0x12c, + 0x408: 0x12d, 0x409: 0xb8, 0x40a: 0x12e, 0x40b: 0x12f, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xb8, 0x40f: 0xb8, + 0x410: 0x130, 0x411: 0x131, 0x412: 0x132, 0x413: 0x133, 0x414: 0xb8, 0x415: 0xb8, 0x416: 0x134, 0x417: 0x135, + 0x418: 0x136, 0x419: 0x137, 0x41a: 0x138, 0x41b: 0x139, 0x41c: 0x13a, 0x41d: 0xb8, 0x41e: 0xb8, 0x41f: 0xb8, + 0x420: 0xb8, 0x421: 0xb8, 0x422: 0x13b, 0x423: 0x13c, 0x424: 0xb8, 0x425: 0xb8, 0x426: 0xb8, 0x427: 0xb8, + 0x428: 0xb8, 0x429: 0xb8, 0x42a: 0xb8, 0x42b: 0x13d, 0x42c: 0xb8, 0x42d: 0xb8, 0x42e: 0xb8, 0x42f: 0xb8, + 0x430: 0x13e, 0x431: 0x13f, 0x432: 0x140, 0x433: 0xb8, 0x434: 0xb8, 0x435: 0xb8, 0x436: 0xb8, 0x437: 0xb8, + 0x438: 0xb8, 0x439: 0xb8, 0x43a: 0xb8, 0x43b: 0xb8, 0x43c: 0xb8, 0x43d: 0xb8, 0x43e: 0xb8, 0x43f: 0xb8, + // Block 0x11, offset 0x440 + 0x440: 0x9d, 0x441: 0x9d, 0x442: 0x9d, 0x443: 0x9d, 0x444: 0x9d, 0x445: 0x9d, 0x446: 0x9d, 0x447: 0x9d, + 0x448: 0x9d, 0x449: 0x9d, 0x44a: 0x9d, 0x44b: 0x9d, 0x44c: 0x9d, 0x44d: 0x9d, 0x44e: 0x141, 0x44f: 0xb8, + 0x450: 0x9b, 0x451: 0x142, 0x452: 0x9d, 0x453: 0x9d, 0x454: 0x9d, 0x455: 0x143, 0x456: 0xb8, 0x457: 0xb8, + 0x458: 0xb8, 0x459: 0xb8, 0x45a: 0xb8, 0x45b: 0xb8, 0x45c: 0xb8, 0x45d: 0xb8, 0x45e: 0xb8, 0x45f: 0xb8, + 0x460: 0xb8, 0x461: 0xb8, 0x462: 0xb8, 0x463: 0xb8, 0x464: 0xb8, 0x465: 0xb8, 0x466: 0xb8, 0x467: 0xb8, + 0x468: 0xb8, 0x469: 0xb8, 0x46a: 0xb8, 0x46b: 0xb8, 0x46c: 0xb8, 0x46d: 0xb8, 0x46e: 0xb8, 0x46f: 0xb8, + 0x470: 0xb8, 0x471: 0xb8, 0x472: 0xb8, 0x473: 0xb8, 0x474: 0xb8, 0x475: 0xb8, 0x476: 0xb8, 0x477: 0xb8, + 0x478: 0xb8, 0x479: 0xb8, 0x47a: 0xb8, 0x47b: 0xb8, 0x47c: 0xb8, 0x47d: 0xb8, 0x47e: 0xb8, 0x47f: 0xb8, + // Block 0x12, offset 0x480 + 0x480: 0x9d, 0x481: 0x9d, 0x482: 0x9d, 0x483: 0x9d, 0x484: 0x9d, 0x485: 0x9d, 0x486: 0x9d, 0x487: 0x9d, + 0x488: 0x9d, 0x489: 0x9d, 0x48a: 0x9d, 0x48b: 0x9d, 0x48c: 0x9d, 0x48d: 0x9d, 0x48e: 0x9d, 0x48f: 0x9d, + 0x490: 0x144, 0x491: 0xb8, 0x492: 0xb8, 0x493: 0xb8, 0x494: 0xb8, 0x495: 0xb8, 0x496: 0xb8, 0x497: 0xb8, + 0x498: 0xb8, 0x499: 0xb8, 0x49a: 0xb8, 0x49b: 0xb8, 0x49c: 0xb8, 0x49d: 0xb8, 0x49e: 0xb8, 0x49f: 0xb8, + 0x4a0: 0xb8, 0x4a1: 0xb8, 0x4a2: 0xb8, 0x4a3: 0xb8, 0x4a4: 0xb8, 0x4a5: 0xb8, 0x4a6: 0xb8, 0x4a7: 0xb8, + 0x4a8: 0xb8, 0x4a9: 0xb8, 0x4aa: 0xb8, 0x4ab: 0xb8, 0x4ac: 0xb8, 0x4ad: 0xb8, 0x4ae: 0xb8, 0x4af: 0xb8, + 0x4b0: 0xb8, 0x4b1: 0xb8, 0x4b2: 0xb8, 0x4b3: 0xb8, 0x4b4: 0xb8, 0x4b5: 0xb8, 0x4b6: 0xb8, 0x4b7: 0xb8, + 0x4b8: 0xb8, 0x4b9: 0xb8, 0x4ba: 0xb8, 0x4bb: 0xb8, 0x4bc: 0xb8, 0x4bd: 0xb8, 0x4be: 0xb8, 0x4bf: 0xb8, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xb8, 0x4c1: 0xb8, 0x4c2: 0xb8, 0x4c3: 0xb8, 0x4c4: 0xb8, 0x4c5: 0xb8, 0x4c6: 0xb8, 0x4c7: 0xb8, + 0x4c8: 0xb8, 0x4c9: 0xb8, 0x4ca: 0xb8, 0x4cb: 0xb8, 0x4cc: 0xb8, 0x4cd: 0xb8, 0x4ce: 0xb8, 0x4cf: 0xb8, + 0x4d0: 0x9d, 0x4d1: 0x9d, 0x4d2: 0x9d, 0x4d3: 0x9d, 0x4d4: 0x9d, 0x4d5: 0x9d, 0x4d6: 0x9d, 0x4d7: 0x9d, + 0x4d8: 0x9d, 0x4d9: 0x145, 0x4da: 0xb8, 0x4db: 0xb8, 0x4dc: 0xb8, 0x4dd: 0xb8, 0x4de: 0xb8, 0x4df: 0xb8, + 0x4e0: 0xb8, 0x4e1: 0xb8, 0x4e2: 0xb8, 0x4e3: 0xb8, 0x4e4: 0xb8, 0x4e5: 0xb8, 0x4e6: 0xb8, 0x4e7: 0xb8, + 0x4e8: 0xb8, 0x4e9: 0xb8, 0x4ea: 0xb8, 0x4eb: 0xb8, 0x4ec: 0xb8, 0x4ed: 0xb8, 0x4ee: 0xb8, 0x4ef: 0xb8, + 0x4f0: 0xb8, 0x4f1: 0xb8, 0x4f2: 0xb8, 0x4f3: 0xb8, 0x4f4: 0xb8, 0x4f5: 0xb8, 0x4f6: 0xb8, 0x4f7: 0xb8, + 0x4f8: 0xb8, 0x4f9: 0xb8, 0x4fa: 0xb8, 0x4fb: 0xb8, 0x4fc: 0xb8, 0x4fd: 0xb8, 0x4fe: 0xb8, 0x4ff: 0xb8, + // Block 0x14, offset 0x500 + 0x500: 0xb8, 0x501: 0xb8, 0x502: 0xb8, 0x503: 0xb8, 0x504: 0xb8, 0x505: 0xb8, 0x506: 0xb8, 0x507: 0xb8, + 0x508: 0xb8, 0x509: 0xb8, 0x50a: 0xb8, 0x50b: 0xb8, 0x50c: 0xb8, 0x50d: 0xb8, 0x50e: 0xb8, 0x50f: 0xb8, + 0x510: 0xb8, 0x511: 0xb8, 0x512: 0xb8, 0x513: 0xb8, 0x514: 0xb8, 0x515: 0xb8, 0x516: 0xb8, 0x517: 0xb8, + 0x518: 0xb8, 0x519: 0xb8, 0x51a: 0xb8, 0x51b: 0xb8, 0x51c: 0xb8, 0x51d: 0xb8, 0x51e: 0xb8, 0x51f: 0xb8, + 0x520: 0x9d, 0x521: 0x9d, 0x522: 0x9d, 0x523: 0x9d, 0x524: 0x9d, 0x525: 0x9d, 0x526: 0x9d, 0x527: 0x9d, + 0x528: 0x13d, 0x529: 0x146, 0x52a: 0xb8, 0x52b: 0x147, 0x52c: 0x148, 0x52d: 0x149, 0x52e: 0x14a, 0x52f: 0xb8, + 0x530: 0xb8, 0x531: 0xb8, 0x532: 0xb8, 0x533: 0xb8, 0x534: 0xb8, 0x535: 0xb8, 0x536: 0xb8, 0x537: 0xb8, + 0x538: 0xb8, 0x539: 0xb8, 0x53a: 0xb8, 0x53b: 0xb8, 0x53c: 0x9d, 0x53d: 0x14b, 0x53e: 0x14c, 0x53f: 0x14d, + // Block 0x15, offset 0x540 + 0x540: 0x9d, 0x541: 0x9d, 0x542: 0x9d, 0x543: 0x9d, 0x544: 0x9d, 0x545: 0x9d, 0x546: 0x9d, 0x547: 0x9d, + 0x548: 0x9d, 0x549: 0x9d, 0x54a: 0x9d, 0x54b: 0x9d, 0x54c: 0x9d, 0x54d: 0x9d, 0x54e: 0x9d, 0x54f: 0x9d, + 0x550: 0x9d, 0x551: 0x9d, 0x552: 0x9d, 0x553: 0x9d, 0x554: 0x9d, 0x555: 0x9d, 0x556: 0x9d, 0x557: 0x9d, + 0x558: 0x9d, 0x559: 0x9d, 0x55a: 0x9d, 0x55b: 0x9d, 0x55c: 0x9d, 0x55d: 0x9d, 0x55e: 0x9d, 0x55f: 0x14e, + 0x560: 0x9d, 0x561: 0x9d, 0x562: 0x9d, 0x563: 0x9d, 0x564: 0x9d, 0x565: 0x9d, 0x566: 0x9d, 0x567: 0x9d, + 0x568: 0x9d, 0x569: 0x9d, 0x56a: 0x9d, 0x56b: 0x14f, 0x56c: 0xb8, 0x56d: 0xb8, 0x56e: 0xb8, 0x56f: 0xb8, + 0x570: 0xb8, 0x571: 0xb8, 0x572: 0xb8, 0x573: 0xb8, 0x574: 0xb8, 0x575: 0xb8, 0x576: 0xb8, 0x577: 0xb8, + 0x578: 0xb8, 0x579: 0xb8, 0x57a: 0xb8, 0x57b: 0xb8, 0x57c: 0xb8, 0x57d: 0xb8, 0x57e: 0xb8, 0x57f: 0xb8, + // Block 0x16, offset 0x580 + 0x580: 0x150, 0x581: 0xb8, 0x582: 0xb8, 0x583: 0xb8, 0x584: 0xb8, 0x585: 0xb8, 0x586: 0xb8, 0x587: 0xb8, + 0x588: 0xb8, 0x589: 0xb8, 0x58a: 0xb8, 0x58b: 0xb8, 0x58c: 0xb8, 0x58d: 0xb8, 0x58e: 0xb8, 0x58f: 0xb8, + 0x590: 0xb8, 0x591: 0xb8, 0x592: 0xb8, 0x593: 0xb8, 0x594: 0xb8, 0x595: 0xb8, 0x596: 0xb8, 0x597: 0xb8, + 0x598: 0xb8, 0x599: 0xb8, 0x59a: 0xb8, 0x59b: 0xb8, 0x59c: 0xb8, 0x59d: 0xb8, 0x59e: 0xb8, 0x59f: 0xb8, + 0x5a0: 0xb8, 0x5a1: 0xb8, 0x5a2: 0xb8, 0x5a3: 0xb8, 0x5a4: 0xb8, 0x5a5: 0xb8, 0x5a6: 0xb8, 0x5a7: 0xb8, + 0x5a8: 0xb8, 0x5a9: 0xb8, 0x5aa: 0xb8, 0x5ab: 0xb8, 0x5ac: 0xb8, 0x5ad: 0xb8, 0x5ae: 0xb8, 0x5af: 0xb8, + 0x5b0: 0x9d, 0x5b1: 0x151, 0x5b2: 0x152, 0x5b3: 0xb8, 0x5b4: 0xb8, 0x5b5: 0xb8, 0x5b6: 0xb8, 0x5b7: 0xb8, + 0x5b8: 0xb8, 0x5b9: 0xb8, 0x5ba: 0xb8, 0x5bb: 0xb8, 0x5bc: 0xb8, 0x5bd: 0xb8, 0x5be: 0xb8, 0x5bf: 0xb8, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x153, 0x5c4: 0x154, 0x5c5: 0x155, 0x5c6: 0x156, 0x5c7: 0x157, + 0x5c8: 0x9b, 0x5c9: 0x158, 0x5ca: 0xb8, 0x5cb: 0xb8, 0x5cc: 0x9b, 0x5cd: 0x159, 0x5ce: 0xb8, 0x5cf: 0xb8, + 0x5d0: 0x5d, 0x5d1: 0x5e, 0x5d2: 0x5f, 0x5d3: 0x60, 0x5d4: 0x61, 0x5d5: 0x62, 0x5d6: 0x63, 0x5d7: 0x64, + 0x5d8: 0x65, 0x5d9: 0x66, 0x5da: 0x67, 0x5db: 0x68, 0x5dc: 0x69, 0x5dd: 0x6a, 0x5de: 0x6b, 0x5df: 0x6c, + 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x15a, 0x5e9: 0x15b, 0x5ea: 0x15c, 0x5eb: 0xb8, 0x5ec: 0xb8, 0x5ed: 0xb8, 0x5ee: 0xb8, 0x5ef: 0xb8, + 0x5f0: 0xb8, 0x5f1: 0xb8, 0x5f2: 0xb8, 0x5f3: 0xb8, 0x5f4: 0xb8, 0x5f5: 0xb8, 0x5f6: 0xb8, 0x5f7: 0xb8, + 0x5f8: 0xb8, 0x5f9: 0xb8, 0x5fa: 0xb8, 0x5fb: 0xb8, 0x5fc: 0xb8, 0x5fd: 0xb8, 0x5fe: 0xb8, 0x5ff: 0xb8, + // Block 0x18, offset 0x600 + 0x600: 0x15d, 0x601: 0xb8, 0x602: 0xb8, 0x603: 0xb8, 0x604: 0xb8, 0x605: 0xb8, 0x606: 0xb8, 0x607: 0xb8, + 0x608: 0xb8, 0x609: 0xb8, 0x60a: 0xb8, 0x60b: 0xb8, 0x60c: 0xb8, 0x60d: 0xb8, 0x60e: 0xb8, 0x60f: 0xb8, + 0x610: 0xb8, 0x611: 0xb8, 0x612: 0xb8, 0x613: 0xb8, 0x614: 0xb8, 0x615: 0xb8, 0x616: 0xb8, 0x617: 0xb8, + 0x618: 0xb8, 0x619: 0xb8, 0x61a: 0xb8, 0x61b: 0xb8, 0x61c: 0xb8, 0x61d: 0xb8, 0x61e: 0xb8, 0x61f: 0xb8, + 0x620: 0x9d, 0x621: 0x9d, 0x622: 0x9d, 0x623: 0x15e, 0x624: 0x6d, 0x625: 0x15f, 0x626: 0xb8, 0x627: 0xb8, + 0x628: 0xb8, 0x629: 0xb8, 0x62a: 0xb8, 0x62b: 0xb8, 0x62c: 0xb8, 0x62d: 0xb8, 0x62e: 0xb8, 0x62f: 0xb8, + 0x630: 0xb8, 0x631: 0xb8, 0x632: 0xb8, 0x633: 0xb8, 0x634: 0xb8, 0x635: 0xb8, 0x636: 0xb8, 0x637: 0xb8, + 0x638: 0x6e, 0x639: 0x6f, 0x63a: 0x70, 0x63b: 0x160, 0x63c: 0xb8, 0x63d: 0xb8, 0x63e: 0xb8, 0x63f: 0xb8, + // Block 0x19, offset 0x640 + 0x640: 0x161, 0x641: 0x9b, 0x642: 0x162, 0x643: 0x163, 0x644: 0x71, 0x645: 0x72, 0x646: 0x164, 0x647: 0x165, + 0x648: 0x73, 0x649: 0x166, 0x64a: 0xb8, 0x64b: 0xb8, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x167, 0x65c: 0x9b, 0x65d: 0x168, 0x65e: 0x9b, 0x65f: 0x169, + 0x660: 0x16a, 0x661: 0x16b, 0x662: 0x16c, 0x663: 0xb8, 0x664: 0x16d, 0x665: 0x16e, 0x666: 0x16f, 0x667: 0x170, + 0x668: 0xb8, 0x669: 0xb8, 0x66a: 0xb8, 0x66b: 0xb8, 0x66c: 0xb8, 0x66d: 0xb8, 0x66e: 0xb8, 0x66f: 0xb8, + 0x670: 0xb8, 0x671: 0xb8, 0x672: 0xb8, 0x673: 0xb8, 0x674: 0xb8, 0x675: 0xb8, 0x676: 0xb8, 0x677: 0xb8, + 0x678: 0xb8, 0x679: 0xb8, 0x67a: 0xb8, 0x67b: 0xb8, 0x67c: 0xb8, 0x67d: 0xb8, 0x67e: 0xb8, 0x67f: 0xb8, + // Block 0x1a, offset 0x680 + 0x680: 0x9d, 0x681: 0x9d, 0x682: 0x9d, 0x683: 0x9d, 0x684: 0x9d, 0x685: 0x9d, 0x686: 0x9d, 0x687: 0x9d, + 0x688: 0x9d, 0x689: 0x9d, 0x68a: 0x9d, 0x68b: 0x9d, 0x68c: 0x9d, 0x68d: 0x9d, 0x68e: 0x9d, 0x68f: 0x9d, + 0x690: 0x9d, 0x691: 0x9d, 0x692: 0x9d, 0x693: 0x9d, 0x694: 0x9d, 0x695: 0x9d, 0x696: 0x9d, 0x697: 0x9d, + 0x698: 0x9d, 0x699: 0x9d, 0x69a: 0x9d, 0x69b: 0x171, 0x69c: 0x9d, 0x69d: 0x9d, 0x69e: 0x9d, 0x69f: 0x9d, + 0x6a0: 0x9d, 0x6a1: 0x9d, 0x6a2: 0x9d, 0x6a3: 0x9d, 0x6a4: 0x9d, 0x6a5: 0x9d, 0x6a6: 0x9d, 0x6a7: 0x9d, + 0x6a8: 0x9d, 0x6a9: 0x9d, 0x6aa: 0x9d, 0x6ab: 0x9d, 0x6ac: 0x9d, 0x6ad: 0x9d, 0x6ae: 0x9d, 0x6af: 0x9d, + 0x6b0: 0x9d, 0x6b1: 0x9d, 0x6b2: 0x9d, 0x6b3: 0x9d, 0x6b4: 0x9d, 0x6b5: 0x9d, 0x6b6: 0x9d, 0x6b7: 0x9d, + 0x6b8: 0x9d, 0x6b9: 0x9d, 0x6ba: 0x9d, 0x6bb: 0x9d, 0x6bc: 0x9d, 0x6bd: 0x9d, 0x6be: 0x9d, 0x6bf: 0x9d, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9d, 0x6c1: 0x9d, 0x6c2: 0x9d, 0x6c3: 0x9d, 0x6c4: 0x9d, 0x6c5: 0x9d, 0x6c6: 0x9d, 0x6c7: 0x9d, + 0x6c8: 0x9d, 0x6c9: 0x9d, 0x6ca: 0x9d, 0x6cb: 0x9d, 0x6cc: 0x9d, 0x6cd: 0x9d, 0x6ce: 0x9d, 0x6cf: 0x9d, + 0x6d0: 0x9d, 0x6d1: 0x9d, 0x6d2: 0x9d, 0x6d3: 0x9d, 0x6d4: 0x9d, 0x6d5: 0x9d, 0x6d6: 0x9d, 0x6d7: 0x9d, + 0x6d8: 0x9d, 0x6d9: 0x9d, 0x6da: 0x9d, 0x6db: 0x9d, 0x6dc: 0x172, 0x6dd: 0x9d, 0x6de: 0x9d, 0x6df: 0x9d, + 0x6e0: 0x173, 0x6e1: 0x9d, 0x6e2: 0x9d, 0x6e3: 0x9d, 0x6e4: 0x9d, 0x6e5: 0x9d, 0x6e6: 0x9d, 0x6e7: 0x9d, + 0x6e8: 0x9d, 0x6e9: 0x9d, 0x6ea: 0x9d, 0x6eb: 0x9d, 0x6ec: 0x9d, 0x6ed: 0x9d, 0x6ee: 0x9d, 0x6ef: 0x9d, + 0x6f0: 0x9d, 0x6f1: 0x9d, 0x6f2: 0x9d, 0x6f3: 0x9d, 0x6f4: 0x9d, 0x6f5: 0x9d, 0x6f6: 0x9d, 0x6f7: 0x9d, + 0x6f8: 0x9d, 0x6f9: 0x9d, 0x6fa: 0x9d, 0x6fb: 0x9d, 0x6fc: 0x9d, 0x6fd: 0x9d, 0x6fe: 0x9d, 0x6ff: 0x9d, + // Block 0x1c, offset 0x700 + 0x700: 0x9d, 0x701: 0x9d, 0x702: 0x9d, 0x703: 0x9d, 0x704: 0x9d, 0x705: 0x9d, 0x706: 0x9d, 0x707: 0x9d, + 0x708: 0x9d, 0x709: 0x9d, 0x70a: 0x9d, 0x70b: 0x9d, 0x70c: 0x9d, 0x70d: 0x9d, 0x70e: 0x9d, 0x70f: 0x9d, + 0x710: 0x9d, 0x711: 0x9d, 0x712: 0x9d, 0x713: 0x9d, 0x714: 0x9d, 0x715: 0x9d, 0x716: 0x9d, 0x717: 0x9d, + 0x718: 0x9d, 0x719: 0x9d, 0x71a: 0x9d, 0x71b: 0x9d, 0x71c: 0x9d, 0x71d: 0x9d, 0x71e: 0x9d, 0x71f: 0x9d, + 0x720: 0x9d, 0x721: 0x9d, 0x722: 0x9d, 0x723: 0x9d, 0x724: 0x9d, 0x725: 0x9d, 0x726: 0x9d, 0x727: 0x9d, + 0x728: 0x9d, 0x729: 0x9d, 0x72a: 0x9d, 0x72b: 0x9d, 0x72c: 0x9d, 0x72d: 0x9d, 0x72e: 0x9d, 0x72f: 0x9d, + 0x730: 0x9d, 0x731: 0x9d, 0x732: 0x9d, 0x733: 0x9d, 0x734: 0x9d, 0x735: 0x9d, 0x736: 0x9d, 0x737: 0x9d, + 0x738: 0x9d, 0x739: 0x9d, 0x73a: 0x174, 0x73b: 0xb8, 0x73c: 0xb8, 0x73d: 0xb8, 0x73e: 0xb8, 0x73f: 0xb8, + // Block 0x1d, offset 0x740 + 0x740: 0xb8, 0x741: 0xb8, 0x742: 0xb8, 0x743: 0xb8, 0x744: 0xb8, 0x745: 0xb8, 0x746: 0xb8, 0x747: 0xb8, + 0x748: 0xb8, 0x749: 0xb8, 0x74a: 0xb8, 0x74b: 0xb8, 0x74c: 0xb8, 0x74d: 0xb8, 0x74e: 0xb8, 0x74f: 0xb8, + 0x750: 0xb8, 0x751: 0xb8, 0x752: 0xb8, 0x753: 0xb8, 0x754: 0xb8, 0x755: 0xb8, 0x756: 0xb8, 0x757: 0xb8, + 0x758: 0xb8, 0x759: 0xb8, 0x75a: 0xb8, 0x75b: 0xb8, 0x75c: 0xb8, 0x75d: 0xb8, 0x75e: 0xb8, 0x75f: 0xb8, + 0x760: 0x74, 0x761: 0x75, 0x762: 0x76, 0x763: 0x175, 0x764: 0x77, 0x765: 0x78, 0x766: 0x176, 0x767: 0x79, + 0x768: 0x7a, 0x769: 0xb8, 0x76a: 0xb8, 0x76b: 0xb8, 0x76c: 0xb8, 0x76d: 0xb8, 0x76e: 0xb8, 0x76f: 0xb8, + 0x770: 0xb8, 0x771: 0xb8, 0x772: 0xb8, 0x773: 0xb8, 0x774: 0xb8, 0x775: 0xb8, 0x776: 0xb8, 0x777: 0xb8, + 0x778: 0xb8, 0x779: 0xb8, 0x77a: 0xb8, 0x77b: 0xb8, 0x77c: 0xb8, 0x77d: 0xb8, 0x77e: 0xb8, 0x77f: 0xb8, + // Block 0x1e, offset 0x780 + 0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07, + 0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17, + 0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07, + 0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b, + 0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b, + 0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b, + 0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b, + 0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b, + 0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b, + 0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b, + 0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x177, 0x801: 0x178, 0x802: 0xb8, 0x803: 0xb8, 0x804: 0x179, 0x805: 0x179, 0x806: 0x179, 0x807: 0x17a, + 0x808: 0xb8, 0x809: 0xb8, 0x80a: 0xb8, 0x80b: 0xb8, 0x80c: 0xb8, 0x80d: 0xb8, 0x80e: 0xb8, 0x80f: 0xb8, + 0x810: 0xb8, 0x811: 0xb8, 0x812: 0xb8, 0x813: 0xb8, 0x814: 0xb8, 0x815: 0xb8, 0x816: 0xb8, 0x817: 0xb8, + 0x818: 0xb8, 0x819: 0xb8, 0x81a: 0xb8, 0x81b: 0xb8, 0x81c: 0xb8, 0x81d: 0xb8, 0x81e: 0xb8, 0x81f: 0xb8, + 0x820: 0xb8, 0x821: 0xb8, 0x822: 0xb8, 0x823: 0xb8, 0x824: 0xb8, 0x825: 0xb8, 0x826: 0xb8, 0x827: 0xb8, + 0x828: 0xb8, 0x829: 0xb8, 0x82a: 0xb8, 0x82b: 0xb8, 0x82c: 0xb8, 0x82d: 0xb8, 0x82e: 0xb8, 0x82f: 0xb8, + 0x830: 0xb8, 0x831: 0xb8, 0x832: 0xb8, 0x833: 0xb8, 0x834: 0xb8, 0x835: 0xb8, 0x836: 0xb8, 0x837: 0xb8, + 0x838: 0xb8, 0x839: 0xb8, 0x83a: 0xb8, 0x83b: 0xb8, 0x83c: 0xb8, 0x83d: 0xb8, 0x83e: 0xb8, 0x83f: 0xb8, + // Block 0x21, offset 0x840 + 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b, + 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b, + 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b, + 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b, + 0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b, + 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b, + 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b, + 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b, + // Block 0x22, offset 0x880 + 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, +} + +// idnaSparseOffset: 256 entries, 512 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x5c, 0x60, 0x6f, 0x74, 0x7b, 0x87, 0x95, 0xa3, 0xa8, 0xb1, 0xc1, 0xcf, 0xdc, 0xe8, 0xf9, 0x103, 0x10a, 0x117, 0x128, 0x12f, 0x13a, 0x149, 0x157, 0x161, 0x163, 0x167, 0x169, 0x175, 0x180, 0x188, 0x18e, 0x194, 0x199, 0x19e, 0x1a1, 0x1a5, 0x1ab, 0x1b0, 0x1bc, 0x1c6, 0x1cc, 0x1dd, 0x1e7, 0x1ea, 0x1f2, 0x1f5, 0x202, 0x20a, 0x20e, 0x215, 0x21d, 0x22d, 0x239, 0x23b, 0x245, 0x251, 0x25d, 0x269, 0x271, 0x276, 0x280, 0x291, 0x295, 0x2a0, 0x2a4, 0x2ad, 0x2b5, 0x2bb, 0x2c0, 0x2c3, 0x2c6, 0x2ca, 0x2d0, 0x2d4, 0x2d8, 0x2de, 0x2e5, 0x2eb, 0x2f3, 0x2fa, 0x305, 0x30f, 0x313, 0x316, 0x31c, 0x320, 0x322, 0x325, 0x327, 0x32a, 0x334, 0x337, 0x346, 0x34a, 0x34f, 0x352, 0x356, 0x35b, 0x360, 0x366, 0x36c, 0x37b, 0x381, 0x385, 0x394, 0x399, 0x3a1, 0x3ab, 0x3b6, 0x3be, 0x3cf, 0x3d8, 0x3e8, 0x3f5, 0x3ff, 0x404, 0x411, 0x415, 0x41a, 0x41c, 0x420, 0x422, 0x426, 0x42f, 0x435, 0x439, 0x449, 0x453, 0x458, 0x45b, 0x461, 0x468, 0x46d, 0x471, 0x477, 0x47c, 0x485, 0x48a, 0x490, 0x497, 0x49e, 0x4a5, 0x4a9, 0x4ae, 0x4b1, 0x4b6, 0x4c2, 0x4c8, 0x4cd, 0x4d4, 0x4dc, 0x4e1, 0x4e5, 0x4f5, 0x4fc, 0x500, 0x504, 0x50b, 0x50e, 0x511, 0x515, 0x519, 0x51f, 0x528, 0x534, 0x53b, 0x544, 0x54c, 0x553, 0x561, 0x56e, 0x57b, 0x584, 0x588, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5e5, 0x5ea, 0x5ed, 0x5f7, 0x600, 0x60c, 0x60f, 0x614, 0x617, 0x61a, 0x61d, 0x624, 0x62b, 0x62f, 0x63a, 0x63d, 0x643, 0x648, 0x64c, 0x64f, 0x652, 0x655, 0x65a, 0x664, 0x667, 0x66b, 0x67a, 0x686, 0x68a, 0x68f, 0x694, 0x698, 0x69d, 0x6a6, 0x6b1, 0x6b7, 0x6bf, 0x6c3, 0x6c7, 0x6cd, 0x6d3, 0x6d8, 0x6db, 0x6e9, 0x6f0, 0x6f3, 0x6f6, 0x6fa, 0x700, 0x705, 0x70f, 0x714, 0x717, 0x71a, 0x71d, 0x720, 0x724, 0x727, 0x737, 0x748, 0x74d, 0x74f, 0x751} + +// idnaSparseValues: 1876 entries, 7504 bytes +var idnaSparseValues = [1876]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x07}, + {value: 0xe105, lo: 0x80, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x97}, + {value: 0xe105, lo: 0x98, hi: 0x9e}, + {value: 0x001f, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbf}, + // Block 0x1, offset 0x8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0xe01d, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0335, lo: 0x83, hi: 0x83}, + {value: 0x034d, lo: 0x84, hi: 0x84}, + {value: 0x0365, lo: 0x85, hi: 0x85}, + {value: 0xe00d, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0xe00d, lo: 0x88, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x89}, + {value: 0xe00d, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe00d, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0x8d}, + {value: 0xe00d, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0xbf}, + // Block 0x2, offset 0x19 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, lo: 0xb3, hi: 0xb3}, + {value: 0x034d, lo: 0xb4, hi: 0xb4}, + {value: 0x0395, lo: 0xb5, hi: 0xb5}, + {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, + {value: 0x0279, lo: 0xb7, hi: 0xb7}, + {value: 0x0289, lo: 0xb8, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbf}, + // Block 0x3, offset 0x25 + {value: 0x0000, lo: 0x01}, + {value: 0x1308, lo: 0x80, hi: 0xbf}, + // Block 0x4, offset 0x27 + {value: 0x0000, lo: 0x04}, + {value: 0x03f5, lo: 0x80, hi: 0x8f}, + {value: 0xe105, lo: 0x90, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x5, offset 0x2c + {value: 0x0000, lo: 0x07}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x0545, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x6, offset 0x34 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x88}, + {value: 0x0018, lo: 0x89, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x1308, lo: 0x91, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbe}, + {value: 0x1308, lo: 0xbf, hi: 0xbf}, + // Block 0x7, offset 0x3f + {value: 0x0000, lo: 0x0b}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x83}, + {value: 0x1308, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x1308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4b + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0208, lo: 0x81, hi: 0x87}, + {value: 0x0408, lo: 0x88, hi: 0x88}, + {value: 0x0208, lo: 0x89, hi: 0x8a}, + {value: 0x1308, lo: 0x8b, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xad}, + {value: 0x0208, lo: 0xae, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb0}, + {value: 0x0408, lo: 0xb1, hi: 0xb3}, + {value: 0x0008, lo: 0xb4, hi: 0xb4}, + {value: 0x0429, lo: 0xb5, hi: 0xb5}, + {value: 0x0451, lo: 0xb6, hi: 0xb6}, + {value: 0x0479, lo: 0xb7, hi: 0xb7}, + {value: 0x04a1, lo: 0xb8, hi: 0xb8}, + {value: 0x0208, lo: 0xb9, hi: 0xbf}, + // Block 0x9, offset 0x5c + {value: 0x0000, lo: 0x03}, + {value: 0x0208, lo: 0x80, hi: 0x87}, + {value: 0x0408, lo: 0x88, hi: 0x99}, + {value: 0x0208, lo: 0x9a, hi: 0xbf}, + // Block 0xa, offset 0x60 + {value: 0x0000, lo: 0x0e}, + {value: 0x1308, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0408, lo: 0x8d, hi: 0x8d}, + {value: 0x0208, lo: 0x8e, hi: 0x98}, + {value: 0x0408, lo: 0x99, hi: 0x9b}, + {value: 0x0208, lo: 0x9c, hi: 0xaa}, + {value: 0x0408, lo: 0xab, hi: 0xac}, + {value: 0x0208, lo: 0xad, hi: 0xb0}, + {value: 0x0408, lo: 0xb1, hi: 0xb1}, + {value: 0x0208, lo: 0xb2, hi: 0xb2}, + {value: 0x0408, lo: 0xb3, hi: 0xb4}, + {value: 0x0208, lo: 0xb5, hi: 0xb7}, + {value: 0x0408, lo: 0xb8, hi: 0xb9}, + {value: 0x0208, lo: 0xba, hi: 0xbf}, + // Block 0xb, offset 0x6f + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x1308, lo: 0xa6, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xc, offset 0x74 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0208, lo: 0x8a, hi: 0xaa}, + {value: 0x1308, lo: 0xab, hi: 0xb3}, + {value: 0x0008, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0xd, offset 0x7b + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x1308, lo: 0x96, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9a}, + {value: 0x1308, lo: 0x9b, hi: 0xa3}, + {value: 0x0008, lo: 0xa4, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xa8}, + {value: 0x1308, lo: 0xa9, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xe, offset 0x87 + {value: 0x0000, lo: 0x0d}, + {value: 0x0408, lo: 0x80, hi: 0x80}, + {value: 0x0208, lo: 0x81, hi: 0x85}, + {value: 0x0408, lo: 0x86, hi: 0x87}, + {value: 0x0208, lo: 0x88, hi: 0x88}, + {value: 0x0408, lo: 0x89, hi: 0x89}, + {value: 0x0208, lo: 0x8a, hi: 0x93}, + {value: 0x0408, lo: 0x94, hi: 0x94}, + {value: 0x0208, lo: 0x95, hi: 0x95}, + {value: 0x0008, lo: 0x96, hi: 0x98}, + {value: 0x1308, lo: 0x99, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xf, offset 0x95 + {value: 0x0000, lo: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xa9}, + {value: 0x0408, lo: 0xaa, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0408, lo: 0xae, hi: 0xae}, + {value: 0x0208, lo: 0xaf, hi: 0xb0}, + {value: 0x0408, lo: 0xb1, hi: 0xb2}, + {value: 0x0208, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0208, lo: 0xb6, hi: 0xb8}, + {value: 0x0408, lo: 0xb9, hi: 0xb9}, + {value: 0x0208, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x10, offset 0xa3 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x93}, + {value: 0x1308, lo: 0x94, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x1308, lo: 0xa3, hi: 0xbf}, + // Block 0x11, offset 0xa8 + {value: 0x0000, lo: 0x08}, + {value: 0x1308, lo: 0x80, hi: 0x82}, + {value: 0x1008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb9}, + {value: 0x1308, lo: 0xba, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0f}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x1008, lo: 0x81, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x85}, + {value: 0x1008, lo: 0x86, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x1008, lo: 0x8a, hi: 0x8c}, + {value: 0x1b08, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x96}, + {value: 0x1008, lo: 0x97, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x13, offset 0xc1 + {value: 0x0000, lo: 0x0d}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x1008, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x1308, lo: 0xbe, hi: 0xbf}, + // Block 0x14, offset 0xcf + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbf}, + // Block 0x15, offset 0xdc + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x16, offset 0xe8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x89}, + {value: 0x1b08, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x1008, lo: 0x8f, hi: 0x91}, + {value: 0x1308, lo: 0x92, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x95}, + {value: 0x1308, lo: 0x96, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x1008, lo: 0x98, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb1}, + {value: 0x1008, lo: 0xb2, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x17, offset 0xf9 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xb0}, + {value: 0x1308, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x08f1, lo: 0xb3, hi: 0xb3}, + {value: 0x1308, lo: 0xb4, hi: 0xb9}, + {value: 0x1b08, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x18, offset 0x103 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x1308, lo: 0x87, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0xbf}, + // Block 0x19, offset 0x10a + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x1308, lo: 0x88, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0961, lo: 0x9c, hi: 0x9c}, + {value: 0x0999, lo: 0x9d, hi: 0x9d}, + {value: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1a, offset 0x117 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe03d, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x97}, + {value: 0x1308, lo: 0x98, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb4}, + {value: 0x1308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb6}, + {value: 0x1308, lo: 0xb7, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xb8}, + {value: 0x1308, lo: 0xb9, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbf}, + // Block 0x1b, offset 0x128 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x1308, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0x1c, offset 0x12f + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x1008, lo: 0xab, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xb0}, + {value: 0x1008, lo: 0xb1, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb7}, + {value: 0x1008, lo: 0xb8, hi: 0xb8}, + {value: 0x1b08, lo: 0xb9, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbc}, + {value: 0x1308, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x1d, offset 0x13a + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x1008, lo: 0x96, hi: 0x97}, + {value: 0x1308, lo: 0x98, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x1308, lo: 0x9e, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x1008, lo: 0xa2, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xa6}, + {value: 0x1008, lo: 0xa7, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x1308, lo: 0xb1, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbf}, + // Block 0x1e, offset 0x149 + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x1308, lo: 0x82, hi: 0x82}, + {value: 0x1008, lo: 0x83, hi: 0x84}, + {value: 0x1308, lo: 0x85, hi: 0x86}, + {value: 0x1008, lo: 0x87, hi: 0x8c}, + {value: 0x1308, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x1008, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x1008, lo: 0x9a, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1f, offset 0x157 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x86}, + {value: 0x055d, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8c}, + {value: 0x055d, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0xe105, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0x20, offset 0x161 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x21, offset 0x163 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbf}, + // Block 0x22, offset 0x167 + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x23, offset 0x169 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x24, offset 0x175 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x25, offset 0x180 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x26, offset 0x188 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x27, offset 0x18e + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x28, offset 0x194 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x29, offset 0x199 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x2a, offset 0x19e + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2b, offset 0x1a1 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2c, offset 0x1a5 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x2d, offset 0x1ab + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x2e, offset 0x1b0 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x1308, lo: 0x92, hi: 0x93}, + {value: 0x1b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb3}, + {value: 0x1b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2f, offset 0x1bc + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x1308, lo: 0x92, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x30, offset 0x1c6 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xb3}, + {value: 0x1340, lo: 0xb4, hi: 0xb5}, + {value: 0x1008, lo: 0xb6, hi: 0xb6}, + {value: 0x1308, lo: 0xb7, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbf}, + // Block 0x31, offset 0x1cc + {value: 0x0000, lo: 0x10}, + {value: 0x1008, lo: 0x80, hi: 0x85}, + {value: 0x1308, lo: 0x86, hi: 0x86}, + {value: 0x1008, lo: 0x87, hi: 0x88}, + {value: 0x1308, lo: 0x89, hi: 0x91}, + {value: 0x1b08, lo: 0x92, hi: 0x92}, + {value: 0x1308, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0x96}, + {value: 0x0008, lo: 0x97, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x32, offset 0x1dd + {value: 0x0000, lo: 0x09}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x86}, + {value: 0x0218, lo: 0x87, hi: 0x87}, + {value: 0x0018, lo: 0x88, hi: 0x8a}, + {value: 0x13c0, lo: 0x8b, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x33, offset 0x1e7 + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x34, offset 0x1ea + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x1308, lo: 0x85, hi: 0x86}, + {value: 0x0208, lo: 0x87, hi: 0xa8}, + {value: 0x1308, lo: 0xa9, hi: 0xa9}, + {value: 0x0208, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x35, offset 0x1f2 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x36, offset 0x1f5 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x1308, lo: 0xa0, hi: 0xa2}, + {value: 0x1008, lo: 0xa3, hi: 0xa6}, + {value: 0x1308, lo: 0xa7, hi: 0xa8}, + {value: 0x1008, lo: 0xa9, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x1008, lo: 0xb0, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb2}, + {value: 0x1008, lo: 0xb3, hi: 0xb8}, + {value: 0x1308, lo: 0xb9, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x37, offset 0x202 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x38, offset 0x20a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x39, offset 0x20e + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0028, lo: 0x9a, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xbf}, + // Block 0x3a, offset 0x215 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x1308, lo: 0x97, hi: 0x98}, + {value: 0x1008, lo: 0x99, hi: 0x9a}, + {value: 0x1308, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x3b, offset 0x21d + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x94}, + {value: 0x1008, lo: 0x95, hi: 0x95}, + {value: 0x1308, lo: 0x96, hi: 0x96}, + {value: 0x1008, lo: 0x97, hi: 0x97}, + {value: 0x1308, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x1b08, lo: 0xa0, hi: 0xa0}, + {value: 0x1008, lo: 0xa1, hi: 0xa1}, + {value: 0x1308, lo: 0xa2, hi: 0xa2}, + {value: 0x1008, lo: 0xa3, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xac}, + {value: 0x1008, lo: 0xad, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x1308, lo: 0xbf, hi: 0xbf}, + // Block 0x3c, offset 0x22d + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xbd}, + {value: 0x1318, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x239 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3e, offset 0x23b + {value: 0x0000, lo: 0x09}, + {value: 0x1308, lo: 0x80, hi: 0x83}, + {value: 0x1008, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xb3}, + {value: 0x1308, lo: 0xb4, hi: 0xb4}, + {value: 0x1008, lo: 0xb5, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x1008, lo: 0xbd, hi: 0xbf}, + // Block 0x3f, offset 0x245 + {value: 0x0000, lo: 0x0b}, + {value: 0x1008, lo: 0x80, hi: 0x81}, + {value: 0x1308, lo: 0x82, hi: 0x82}, + {value: 0x1008, lo: 0x83, hi: 0x83}, + {value: 0x1808, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xaa}, + {value: 0x1308, lo: 0xab, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x251 + {value: 0x0000, lo: 0x0b}, + {value: 0x1308, lo: 0x80, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa0}, + {value: 0x1008, lo: 0xa1, hi: 0xa1}, + {value: 0x1308, lo: 0xa2, hi: 0xa5}, + {value: 0x1008, lo: 0xa6, hi: 0xa7}, + {value: 0x1308, lo: 0xa8, hi: 0xa9}, + {value: 0x1808, lo: 0xaa, hi: 0xaa}, + {value: 0x1b08, lo: 0xab, hi: 0xab}, + {value: 0x1308, lo: 0xac, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xbf}, + // Block 0x41, offset 0x25d + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x1308, lo: 0xa6, hi: 0xa6}, + {value: 0x1008, lo: 0xa7, hi: 0xa7}, + {value: 0x1308, lo: 0xa8, hi: 0xa9}, + {value: 0x1008, lo: 0xaa, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xad}, + {value: 0x1008, lo: 0xae, hi: 0xae}, + {value: 0x1308, lo: 0xaf, hi: 0xb1}, + {value: 0x1808, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbf}, + // Block 0x42, offset 0x269 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x1008, lo: 0xa4, hi: 0xab}, + {value: 0x1308, lo: 0xac, hi: 0xb3}, + {value: 0x1008, lo: 0xb4, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x43, offset 0x271 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x44, offset 0x276 + {value: 0x0000, lo: 0x09}, + {value: 0x0e29, lo: 0x80, hi: 0x80}, + {value: 0x0e41, lo: 0x81, hi: 0x81}, + {value: 0x0e59, lo: 0x82, hi: 0x82}, + {value: 0x0e71, lo: 0x83, hi: 0x83}, + {value: 0x0e89, lo: 0x84, hi: 0x85}, + {value: 0x0ea1, lo: 0x86, hi: 0x86}, + {value: 0x0eb9, lo: 0x87, hi: 0x87}, + {value: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0x45, offset 0x280 + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x1308, lo: 0x90, hi: 0x92}, + {value: 0x0018, lo: 0x93, hi: 0x93}, + {value: 0x1308, lo: 0x94, hi: 0xa0}, + {value: 0x1008, lo: 0xa1, hi: 0xa1}, + {value: 0x1308, lo: 0xa2, hi: 0xa8}, + {value: 0x0008, lo: 0xa9, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb1}, + {value: 0x1008, lo: 0xb2, hi: 0xb3}, + {value: 0x1308, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x46, offset 0x291 + {value: 0x0000, lo: 0x03}, + {value: 0x1308, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x1308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x295 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x87}, + {value: 0xe045, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0xe045, lo: 0x98, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0xe045, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbf}, + // Block 0x48, offset 0x2a0 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x1318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x2a4 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x24c1, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x4a, offset 0x2ad + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4b, offset 0x2b5 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x9f}, + {value: 0x0080, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xad}, + {value: 0x0080, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x4c, offset 0x2bb + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09c5, lo: 0xa9, hi: 0xa9}, + {value: 0x09e5, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4d, offset 0x2c0 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x4e, offset 0x2c3 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4f, offset 0x2c6 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x50, offset 0x2ca + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e66, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e86, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x51, offset 0x2d0 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x52, offset 0x2d4 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x53, offset 0x2d8 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0018, lo: 0xbd, hi: 0xbf}, + // Block 0x54, offset 0x2de + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xab}, + {value: 0x0018, lo: 0xac, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x55, offset 0x2e5 + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ea5, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x56, offset 0x2eb + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x57, offset 0x2f3 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xae}, + {value: 0xe075, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0x58, offset 0x2fa + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x59, offset 0x305 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x1308, lo: 0xa0, hi: 0xbf}, + // Block 0x5a, offset 0x30f + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x5b, offset 0x313 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0xbf}, + // Block 0x5c, offset 0x316 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0edd, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x5d, offset 0x31c + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0efd, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5e, offset 0x320 + {value: 0x0020, lo: 0x01}, + {value: 0x0f1d, lo: 0x80, hi: 0xbf}, + // Block 0x5f, offset 0x322 + {value: 0x0020, lo: 0x02}, + {value: 0x171d, lo: 0x80, hi: 0x8f}, + {value: 0x18fd, lo: 0x90, hi: 0xbf}, + // Block 0x60, offset 0x325 + {value: 0x0020, lo: 0x01}, + {value: 0x1efd, lo: 0x80, hi: 0xbf}, + // Block 0x61, offset 0x327 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x62, offset 0x32a + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x1308, lo: 0x99, hi: 0x9a}, + {value: 0x29e2, lo: 0x9b, hi: 0x9b}, + {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x63, offset 0x334 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x64, offset 0x337 + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xb0}, + {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, + {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, + {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, + {value: 0x2a7d, lo: 0xb4, hi: 0xb4}, + {value: 0x2a5d, lo: 0xb5, hi: 0xb5}, + {value: 0x2a9d, lo: 0xb6, hi: 0xb6}, + {value: 0x2abd, lo: 0xb7, hi: 0xb7}, + {value: 0x2add, lo: 0xb8, hi: 0xb9}, + {value: 0x2afd, lo: 0xba, hi: 0xbb}, + {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, + {value: 0x2afd, lo: 0xbe, hi: 0xbf}, + // Block 0x65, offset 0x346 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x66, offset 0x34a + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x67, offset 0x34f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x68, offset 0x352 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x69, offset 0x356 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x6a, offset 0x35b + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0x6b, offset 0x360 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb1}, + {value: 0x0018, lo: 0xb2, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6c, offset 0x366 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6d, offset 0x36c + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x1308, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0x85}, + {value: 0x1b08, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x1308, lo: 0x8b, hi: 0x8b}, + {value: 0x0008, lo: 0x8c, hi: 0xa2}, + {value: 0x1008, lo: 0xa3, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xa6}, + {value: 0x1008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6e, offset 0x37b + {value: 0x0000, lo: 0x05}, + {value: 0x0208, lo: 0x80, hi: 0xb1}, + {value: 0x0108, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6f, offset 0x381 + {value: 0x0000, lo: 0x03}, + {value: 0x1008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x1008, lo: 0xb4, hi: 0xbf}, + // Block 0x70, offset 0x385 + {value: 0x0000, lo: 0x0e}, + {value: 0x1008, lo: 0x80, hi: 0x83}, + {value: 0x1b08, lo: 0x84, hi: 0x84}, + {value: 0x1308, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x1308, lo: 0xa0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0008, lo: 0xbb, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x71, offset 0x394 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x1308, lo: 0xa6, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x72, offset 0x399 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x1308, lo: 0x87, hi: 0x91}, + {value: 0x1008, lo: 0x92, hi: 0x92}, + {value: 0x1808, lo: 0x93, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x73, offset 0x3a1 + {value: 0x0000, lo: 0x09}, + {value: 0x1308, lo: 0x80, hi: 0x82}, + {value: 0x1008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xb3}, + {value: 0x1008, lo: 0xb4, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xb9}, + {value: 0x1008, lo: 0xba, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x1008, lo: 0xbd, hi: 0xbf}, + // Block 0x74, offset 0x3ab + {value: 0x0000, lo: 0x0a}, + {value: 0x1808, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x75, offset 0x3b6 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa8}, + {value: 0x1308, lo: 0xa9, hi: 0xae}, + {value: 0x1008, lo: 0xaf, hi: 0xb0}, + {value: 0x1308, lo: 0xb1, hi: 0xb2}, + {value: 0x1008, lo: 0xb3, hi: 0xb4}, + {value: 0x1308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x76, offset 0x3be + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x82}, + {value: 0x1308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8b}, + {value: 0x1308, lo: 0x8c, hi: 0x8c}, + {value: 0x1008, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x1008, lo: 0xbd, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0x77, offset 0x3cf + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x1308, lo: 0xb7, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbd}, + {value: 0x1308, lo: 0xbe, hi: 0xbf}, + // Block 0x78, offset 0x3d8 + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x9a}, + {value: 0x0008, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xaa}, + {value: 0x1008, lo: 0xab, hi: 0xab}, + {value: 0x1308, lo: 0xac, hi: 0xad}, + {value: 0x1008, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb4}, + {value: 0x1008, lo: 0xb5, hi: 0xb5}, + {value: 0x1b08, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x79, offset 0x3e8 + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x90}, + {value: 0x0008, lo: 0x91, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x7a, offset 0x3f5 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x4465, lo: 0x9c, hi: 0x9c}, + {value: 0x447d, lo: 0x9d, hi: 0x9d}, + {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xaf}, + {value: 0x4495, lo: 0xb0, hi: 0xbf}, + // Block 0x7b, offset 0x3ff + {value: 0x0000, lo: 0x04}, + {value: 0x44b5, lo: 0x80, hi: 0x8f}, + {value: 0x44d5, lo: 0x90, hi: 0x9f}, + {value: 0x44f5, lo: 0xa0, hi: 0xaf}, + {value: 0x44d5, lo: 0xb0, hi: 0xbf}, + // Block 0x7c, offset 0x404 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x1008, lo: 0xa3, hi: 0xa4}, + {value: 0x1308, lo: 0xa5, hi: 0xa5}, + {value: 0x1008, lo: 0xa6, hi: 0xa7}, + {value: 0x1308, lo: 0xa8, hi: 0xa8}, + {value: 0x1008, lo: 0xa9, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xab}, + {value: 0x1008, lo: 0xac, hi: 0xac}, + {value: 0x1b08, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x7d, offset 0x411 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7e, offset 0x415 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x7f, offset 0x41a + {value: 0x0020, lo: 0x01}, + {value: 0x4515, lo: 0x80, hi: 0xbf}, + // Block 0x80, offset 0x41c + {value: 0x0020, lo: 0x03}, + {value: 0x4d15, lo: 0x80, hi: 0x94}, + {value: 0x4ad5, lo: 0x95, hi: 0x95}, + {value: 0x4fb5, lo: 0x96, hi: 0xbf}, + // Block 0x81, offset 0x420 + {value: 0x0020, lo: 0x01}, + {value: 0x54f5, lo: 0x80, hi: 0xbf}, + // Block 0x82, offset 0x422 + {value: 0x0020, lo: 0x03}, + {value: 0x5cf5, lo: 0x80, hi: 0x84}, + {value: 0x5655, lo: 0x85, hi: 0x85}, + {value: 0x5d95, lo: 0x86, hi: 0xbf}, + // Block 0x83, offset 0x426 + {value: 0x0020, lo: 0x08}, + {value: 0x6b55, lo: 0x80, hi: 0x8f}, + {value: 0x6d15, lo: 0x90, hi: 0x90}, + {value: 0x6d55, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, lo: 0xac, hi: 0xac}, + {value: 0x70b5, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x70d5, lo: 0xb0, hi: 0xbf}, + // Block 0x84, offset 0x42f + {value: 0x0020, lo: 0x05}, + {value: 0x72d5, lo: 0x80, hi: 0xad}, + {value: 0x6535, lo: 0xae, hi: 0xae}, + {value: 0x7895, lo: 0xaf, hi: 0xb5}, + {value: 0x6f55, lo: 0xb6, hi: 0xb6}, + {value: 0x7975, lo: 0xb7, hi: 0xbf}, + // Block 0x85, offset 0x435 + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x86, offset 0x439 + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x87, offset 0x449 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x88, offset 0x453 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x89, offset 0x458 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x8a, offset 0x45b + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x8b, offset 0x461 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8c, offset 0x468 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbc}, + {value: 0x1308, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x8d, offset 0x46d + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8e, offset 0x471 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x9f}, + {value: 0x1308, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x8f, offset 0x477 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x90, offset 0x47c + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x91, offset 0x485 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x92, offset 0x48a + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x93, offset 0x490 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8ad5, lo: 0x98, hi: 0x9f}, + {value: 0x8aed, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x94, offset 0x497 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x8aed, lo: 0xb0, hi: 0xb7}, + {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, + // Block 0x95, offset 0x49e + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x96, offset 0x4a5 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x97, offset 0x4a9 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xae}, + {value: 0x0018, lo: 0xaf, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x98, offset 0x4ae + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x99, offset 0x4b1 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xbf}, + // Block 0x9a, offset 0x4b6 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x9b, offset 0x4c2 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x9c, offset 0x4c8 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa6}, + {value: 0x0018, lo: 0xa7, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x9d, offset 0x4cd + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb3}, + {value: 0x0008, lo: 0xb4, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x9e, offset 0x4d4 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0018, lo: 0x96, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x9f, offset 0x4dc + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0xa0, offset 0x4e1 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xbf}, + // Block 0xa1, offset 0x4e5 + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x1308, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8b}, + {value: 0x1308, lo: 0x8c, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x94}, + {value: 0x0008, lo: 0x95, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xa2, offset 0x4f5 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbc}, + {value: 0x0018, lo: 0xbd, hi: 0xbf}, + // Block 0xa3, offset 0x4fc + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa4, offset 0x500 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa5, offset 0x504 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbf}, + // Block 0xa6, offset 0x50b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa7, offset 0x50e + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa8, offset 0x511 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xa9, offset 0x515 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xaa, offset 0x519 + {value: 0x0000, lo: 0x05}, + {value: 0x1008, lo: 0x80, hi: 0x80}, + {value: 0x1308, lo: 0x81, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xbf}, + // Block 0xab, offset 0x51f + {value: 0x0000, lo: 0x08}, + {value: 0x1308, lo: 0x80, hi: 0x85}, + {value: 0x1b08, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xac, offset 0x528 + {value: 0x0000, lo: 0x0b}, + {value: 0x1308, lo: 0x80, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xaf}, + {value: 0x1008, lo: 0xb0, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xb6}, + {value: 0x1008, lo: 0xb7, hi: 0xb8}, + {value: 0x1b08, lo: 0xb9, hi: 0xb9}, + {value: 0x1308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbc}, + {value: 0x0340, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xad, offset 0x534 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xae, offset 0x53b + {value: 0x0000, lo: 0x08}, + {value: 0x1308, lo: 0x80, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa6}, + {value: 0x1308, lo: 0xa7, hi: 0xab}, + {value: 0x1008, lo: 0xac, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xb2}, + {value: 0x1b08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xbf}, + // Block 0xaf, offset 0x544 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xb0, offset 0x54c + {value: 0x0000, lo: 0x06}, + {value: 0x1308, lo: 0x80, hi: 0x81}, + {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb2}, + {value: 0x1008, lo: 0xb3, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xbe}, + {value: 0x1008, lo: 0xbf, hi: 0xbf}, + // Block 0xb1, offset 0x553 + {value: 0x0000, lo: 0x0d}, + {value: 0x1808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x89}, + {value: 0x1308, lo: 0x8a, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xb2, offset 0x561 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0xab}, + {value: 0x1008, lo: 0xac, hi: 0xae}, + {value: 0x1308, lo: 0xaf, hi: 0xb1}, + {value: 0x1008, lo: 0xb2, hi: 0xb3}, + {value: 0x1308, lo: 0xb4, hi: 0xb4}, + {value: 0x1808, lo: 0xb5, hi: 0xb5}, + {value: 0x1308, lo: 0xb6, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbd}, + {value: 0x1308, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb3, offset 0x56e + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xb4, offset 0x57b + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x1308, lo: 0x9f, hi: 0x9f}, + {value: 0x1008, lo: 0xa0, hi: 0xa2}, + {value: 0x1308, lo: 0xa3, hi: 0xa9}, + {value: 0x1b08, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb5, offset 0x584 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x1008, lo: 0xb5, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xbf}, + // Block 0xb6, offset 0x588 + {value: 0x0000, lo: 0x0d}, + {value: 0x1008, lo: 0x80, hi: 0x81}, + {value: 0x1b08, lo: 0x82, hi: 0x82}, + {value: 0x1308, lo: 0x83, hi: 0x84}, + {value: 0x1008, lo: 0x85, hi: 0x85}, + {value: 0x1308, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xb7, offset 0x596 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x1008, lo: 0xb0, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xb8}, + {value: 0x1008, lo: 0xb9, hi: 0xb9}, + {value: 0x1308, lo: 0xba, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbe}, + {value: 0x1308, lo: 0xbf, hi: 0xbf}, + // Block 0xb8, offset 0x59e + {value: 0x0000, lo: 0x0a}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x1008, lo: 0x81, hi: 0x81}, + {value: 0x1b08, lo: 0x82, hi: 0x82}, + {value: 0x1308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xb9, offset 0x5a9 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x1008, lo: 0xaf, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x1008, lo: 0xb8, hi: 0xbb}, + {value: 0x1308, lo: 0xbc, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xba, offset 0x5b2 + {value: 0x0000, lo: 0x05}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9b}, + {value: 0x1308, lo: 0x9c, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xbb, offset 0x5b8 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x1008, lo: 0xb0, hi: 0xb2}, + {value: 0x1308, lo: 0xb3, hi: 0xba}, + {value: 0x1008, lo: 0xbb, hi: 0xbc}, + {value: 0x1308, lo: 0xbd, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbc, offset 0x5c0 + {value: 0x0000, lo: 0x08}, + {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xbd, offset 0x5c9 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x1308, lo: 0xab, hi: 0xab}, + {value: 0x1008, lo: 0xac, hi: 0xac}, + {value: 0x1308, lo: 0xad, hi: 0xad}, + {value: 0x1008, lo: 0xae, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb5}, + {value: 0x1808, lo: 0xb6, hi: 0xb6}, + {value: 0x1308, lo: 0xb7, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xbe, offset 0x5d3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xbf, offset 0x5d6 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9f}, + {value: 0x1008, lo: 0xa0, hi: 0xa1}, + {value: 0x1308, lo: 0xa2, hi: 0xa5}, + {value: 0x1008, lo: 0xa6, hi: 0xa6}, + {value: 0x1308, lo: 0xa7, hi: 0xaa}, + {value: 0x1b08, lo: 0xab, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xc0, offset 0x5e2 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc1, offset 0x5e5 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xc2, offset 0x5ea + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc3, offset 0x5ed + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xae}, + {value: 0x1008, lo: 0xaf, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x1308, lo: 0xb8, hi: 0xbd}, + {value: 0x1008, lo: 0xbe, hi: 0xbe}, + {value: 0x1b08, lo: 0xbf, hi: 0xbf}, + // Block 0xc4, offset 0x5f7 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xbf}, + // Block 0xc5, offset 0x600 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x1308, lo: 0x92, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa8}, + {value: 0x1008, lo: 0xa9, hi: 0xa9}, + {value: 0x1308, lo: 0xaa, hi: 0xb0}, + {value: 0x1008, lo: 0xb1, hi: 0xb1}, + {value: 0x1308, lo: 0xb2, hi: 0xb3}, + {value: 0x1008, lo: 0xb4, hi: 0xb4}, + {value: 0x1308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xc6, offset 0x60c + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xc7, offset 0x60f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xc8, offset 0x614 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xc9, offset 0x617 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0xca, offset 0x61a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xcb, offset 0x61d + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xcc, offset 0x624 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xcd, offset 0x62b + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x1308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xce, offset 0x62f + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0xcf, offset 0x63a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xd0, offset 0x63d + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x1008, lo: 0x91, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd1, offset 0x643 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x1308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xd2, offset 0x648 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0xd3, offset 0x64c + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xd4, offset 0x64f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xd5, offset 0x652 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0xbf}, + // Block 0xd6, offset 0x655 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0xd7, offset 0x65a + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9c}, + {value: 0x1308, lo: 0x9d, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x03c0, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xd8, offset 0x664 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xd9, offset 0x667 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xda, offset 0x66b + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, lo: 0xa4, hi: 0xa4}, + {value: 0x1018, lo: 0xa5, hi: 0xa6}, + {value: 0x1318, lo: 0xa7, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xac}, + {value: 0x1018, lo: 0xad, hi: 0xb2}, + {value: 0x0340, lo: 0xb3, hi: 0xba}, + {value: 0x1318, lo: 0xbb, hi: 0xbf}, + // Block 0xdb, offset 0x67a + {value: 0x0000, lo: 0x0b}, + {value: 0x1318, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x84}, + {value: 0x1318, lo: 0x85, hi: 0x8b}, + {value: 0x0018, lo: 0x8c, hi: 0xa9}, + {value: 0x1318, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xba}, + {value: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xdc, offset 0x686 + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xdd, offset 0x68a + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x1318, lo: 0x82, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0xbf}, + // Block 0xde, offset 0x68f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xdf, offset 0x694 + {value: 0x0000, lo: 0x03}, + {value: 0x1308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x1308, lo: 0xbb, hi: 0xbf}, + // Block 0xe0, offset 0x698 + {value: 0x0000, lo: 0x04}, + {value: 0x1308, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xb4}, + {value: 0x1308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0xe1, offset 0x69d + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x1308, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9a}, + {value: 0x1308, lo: 0x9b, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x1308, lo: 0xa1, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xe2, offset 0x6a6 + {value: 0x0000, lo: 0x0a}, + {value: 0x1308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x1308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x1308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x1308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x1308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xe3, offset 0x6b1 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8f}, + {value: 0x1308, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xe4, offset 0x6b7 + {value: 0x0000, lo: 0x07}, + {value: 0x0208, lo: 0x80, hi: 0x83}, + {value: 0x1308, lo: 0x84, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xe5, offset 0x6bf + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe6, offset 0x6c3 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0xe7, offset 0x6c7 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0xe8, offset 0x6cd + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xe9, offset 0x6d3 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1c1, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xea, offset 0x6d8 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0xeb, offset 0x6db + {value: 0x0000, lo: 0x0d}, + {value: 0xc7e9, lo: 0x80, hi: 0x80}, + {value: 0xc839, lo: 0x81, hi: 0x81}, + {value: 0xc889, lo: 0x82, hi: 0x82}, + {value: 0xc8d9, lo: 0x83, hi: 0x83}, + {value: 0xc929, lo: 0x84, hi: 0x84}, + {value: 0xc979, lo: 0x85, hi: 0x85}, + {value: 0xc9c9, lo: 0x86, hi: 0x86}, + {value: 0xca19, lo: 0x87, hi: 0x87}, + {value: 0xca69, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcab9, lo: 0x90, hi: 0x90}, + {value: 0xcad9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xbf}, + // Block 0xec, offset 0x6e9 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xed, offset 0x6f0 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xee, offset 0x6f3 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0xbf}, + // Block 0xef, offset 0x6f6 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0xf0, offset 0x6fa + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0xf1, offset 0x700 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0xf2, offset 0x705 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb2}, + {value: 0x0018, lo: 0xb3, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xf3, offset 0x70f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xf4, offset 0x714 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xbf}, + // Block 0xf5, offset 0x717 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0xbf}, + // Block 0xf6, offset 0x71a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xf7, offset 0x71d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xf8, offset 0x720 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xf9, offset 0x724 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xfa, offset 0x727 + {value: 0x0020, lo: 0x0f}, + {value: 0xdeb9, lo: 0x80, hi: 0x89}, + {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, + {value: 0xdff9, lo: 0x8b, hi: 0x9c}, + {value: 0x8e1d, lo: 0x9d, hi: 0x9d}, + {value: 0xe239, lo: 0x9e, hi: 0xa2}, + {value: 0x8e3d, lo: 0xa3, hi: 0xa3}, + {value: 0xe2d9, lo: 0xa4, hi: 0xab}, + {value: 0x7ed5, lo: 0xac, hi: 0xac}, + {value: 0xe3d9, lo: 0xad, hi: 0xaf}, + {value: 0x8e5d, lo: 0xb0, hi: 0xb0}, + {value: 0xe439, lo: 0xb1, hi: 0xb6}, + {value: 0x8e7d, lo: 0xb7, hi: 0xb9}, + {value: 0xe4f9, lo: 0xba, hi: 0xba}, + {value: 0x8edd, lo: 0xbb, hi: 0xbb}, + {value: 0xe519, lo: 0xbc, hi: 0xbf}, + // Block 0xfb, offset 0x737 + {value: 0x0020, lo: 0x10}, + {value: 0x937d, lo: 0x80, hi: 0x80}, + {value: 0xf099, lo: 0x81, hi: 0x86}, + {value: 0x939d, lo: 0x87, hi: 0x8a}, + {value: 0xd9f9, lo: 0x8b, hi: 0x8b}, + {value: 0xf159, lo: 0x8c, hi: 0x96}, + {value: 0x941d, lo: 0x97, hi: 0x97}, + {value: 0xf2b9, lo: 0x98, hi: 0xa3}, + {value: 0x943d, lo: 0xa4, hi: 0xa6}, + {value: 0xf439, lo: 0xa7, hi: 0xaa}, + {value: 0x949d, lo: 0xab, hi: 0xab}, + {value: 0xf4b9, lo: 0xac, hi: 0xac}, + {value: 0x94bd, lo: 0xad, hi: 0xad}, + {value: 0xf4d9, lo: 0xae, hi: 0xaf}, + {value: 0x94dd, lo: 0xb0, hi: 0xb1}, + {value: 0xf519, lo: 0xb2, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xfc, offset 0x748 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0340, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x9f}, + {value: 0x0340, lo: 0xa0, hi: 0xbf}, + // Block 0xfd, offset 0x74d + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0xfe, offset 0x74f + {value: 0x0000, lo: 0x01}, + {value: 0x13c0, lo: 0x80, hi: 0xbf}, + // Block 0xff, offset 0x751 + {value: 0x0000, lo: 0x02}, + {value: 0x13c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 41559 bytes (40KiB); checksum: F4A1FA4E diff --git a/vendor/golang.org/x/text/internal/export/idna/trie.go b/vendor/golang.org/x/text/internal/export/idna/trie.go new file mode 100644 index 0000000..d909968 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/trie.go @@ -0,0 +1,70 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package idna + +// appendMapping appends the mapping for the respective rune. isMapped must be +// true. A mapping is a categorization of a rune as defined in UTS #46. +func (c info) appendMapping(b []byte, s string) []byte { + index := int(c >> indexShift) + if c&xorBit == 0 { + s := mappings[index:] + return append(b, s[1:s[0]+1]...) + } + b = append(b, s...) + if c&inlineXOR == inlineXOR { + // TODO: support and handle two-byte inline masks + b[len(b)-1] ^= byte(index) + } else { + for p := len(b) - int(xorData[index]); p < len(b); p++ { + index++ + b[p] ^= xorData[index] + } + } + return b +} + +// Sparse block handling code. + +type valueRange struct { + value uint16 // header: value:stride + lo, hi byte // header: lo:n +} + +type sparseBlocks struct { + values []valueRange + offset []uint16 +} + +var idnaSparse = sparseBlocks{ + values: idnaSparseValues[:], + offset: idnaSparseOffset[:], +} + +// Don't use newIdnaTrie to avoid unconditional linking in of the table. +var trie = &idnaTrie{} + +// lookup determines the type of block n and looks up the value for b. +// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block +// is a list of ranges with an accompanying value. Given a matching range r, +// the value for b is by r.value + (b - r.lo) * stride. +func (t *sparseBlocks) lookup(n uint32, b byte) uint16 { + offset := t.offset[n] + header := t.values[offset] + lo := offset + 1 + hi := lo + uint16(header.lo) + for lo < hi { + m := lo + (hi-lo)/2 + r := t.values[m] + if r.lo <= b && b <= r.hi { + return r.value + uint16(b-r.lo)*header.value + } + if b < r.lo { + hi = m + } else { + lo = m + 1 + } + } + return 0 +} diff --git a/vendor/golang.org/x/text/internal/export/idna/trieval.go b/vendor/golang.org/x/text/internal/export/idna/trieval.go new file mode 100644 index 0000000..63cb03b --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/trieval.go @@ -0,0 +1,114 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package idna + +// This file contains definitions for interpreting the trie value of the idna +// trie generated by "go run gen*.go". It is shared by both the generator +// program and the resultant package. Sharing is achieved by the generator +// copying gen_trieval.go to trieval.go and changing what's above this comment. + +// info holds information from the IDNA mapping table for a single rune. It is +// the value returned by a trie lookup. In most cases, all information fits in +// a 16-bit value. For mappings, this value may contain an index into a slice +// with the mapped string. Such mappings can consist of the actual mapped value +// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the +// input rune. This technique is used by the cases packages and reduces the +// table size significantly. +// +// The per-rune values have the following format: +// +// if mapped { +// if inlinedXOR { +// 15..13 inline XOR marker +// 12..11 unused +// 10..3 inline XOR mask +// } else { +// 15..3 index into xor or mapping table +// } +// } else { +// 15..13 unused +// 12 modifier (including virama) +// 11 virama modifier +// 10..8 joining type +// 7..3 category type +// } +// 2 use xor pattern +// 1..0 mapped category +// +// See the definitions below for a more detailed description of the various +// bits. +type info uint16 + +const ( + catSmallMask = 0x3 + catBigMask = 0xF8 + indexShift = 3 + xorBit = 0x4 // interpret the index as an xor pattern + inlineXOR = 0xE000 // These bits are set if the XOR pattern is inlined. + + joinShift = 8 + joinMask = 0x07 + + viramaModifier = 0x0800 + modifier = 0x1000 +) + +// A category corresponds to a category defined in the IDNA mapping table. +type category uint16 + +const ( + unknown category = 0 // not defined currently in unicode. + mapped category = 1 + disallowedSTD3Mapped category = 2 + deviation category = 3 +) + +const ( + valid category = 0x08 + validNV8 category = 0x18 + validXV8 category = 0x28 + disallowed category = 0x40 + disallowedSTD3Valid category = 0x80 + ignored category = 0xC0 +) + +// join types and additional rune information +const ( + joiningL = (iota + 1) + joiningD + joiningT + joiningR + + //the following types are derived during processing + joinZWJ + joinZWNJ + joinVirama + numJoinTypes +) + +func (c info) isMapped() bool { + return c&0x3 != 0 +} + +func (c info) category() category { + small := c & catSmallMask + if small != 0 { + return category(small) + } + return category(c & catBigMask) +} + +func (c info) joinType() info { + if c.isMapped() { + return 0 + } + return (c >> joinShift) & joinMask +} + +func (c info) isModifier() bool { + return c&(modifier|catSmallMask) == modifier +} + +func (c info) isViramaModifier() bool { + return c&(viramaModifier|catSmallMask) == viramaModifier +} diff --git a/vendor/golang.org/x/text/internal/format/format.go b/vendor/golang.org/x/text/internal/format/format.go new file mode 100644 index 0000000..c70bc0f --- /dev/null +++ b/vendor/golang.org/x/text/internal/format/format.go @@ -0,0 +1,43 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package format contains types for defining language-specific formatting of +// values. +// +// This package is internal now, but will eventually be exposed after the API +// settles. +package format // import "golang.org/x/text/internal/format" + +import ( + "fmt" + + "golang.org/x/text/language" +) + +// State represents the printer state passed to custom formatters. It provides +// access to the fmt.State interface and the sentence and language-related +// context. +type State interface { + fmt.State + + // Language reports the requested language in which to render a message. + Language() language.Tag + + // TODO: more info: + // - sentence context + // - user preferences, like measurement systems + // - options +} + +// A Statement is a Var or an Expression. +type Statement interface { + statement() +} + +// A String a literal string format. +type String string + +func (String) statement() {} + +// TODO: Select, Var, Case, StatementSequence diff --git a/vendor/golang.org/x/text/internal/format/plural/plural.go b/vendor/golang.org/x/text/internal/format/plural/plural.go new file mode 100644 index 0000000..524d6aa --- /dev/null +++ b/vendor/golang.org/x/text/internal/format/plural/plural.go @@ -0,0 +1,38 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package plural defines the grammatical plural feature. +// +// The definitions in this package are based on the plural rule handling defined +// in CLDR. See +// http://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules for +// details. +package plural + +import "golang.org/x/text/internal/format" + +// Form defines a plural form. The meaning of plural forms, as well as which +// forms are supported, vary per language. Each language must at least support +// the form "other". +type Form byte + +const ( + Other Form = iota + Zero + One + Two + Few + Many +) + +// Interface is implemented by values that have a plural feature. +type Interface interface { + // PluralForm reports the plural form of a value, depending on the + // language declared by the given state. + PluralForm(s format.State) Form +} + +// TODO +// - Select function +// - Definition for message package. diff --git a/vendor/golang.org/x/text/internal/gen.go b/vendor/golang.org/x/text/internal/gen.go new file mode 100644 index 0000000..1d678af --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen.go @@ -0,0 +1,52 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "log" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +func main() { + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + data, err := d.DecodeZip(r) + if err != nil { + log.Fatalf("DecodeZip: %v", err) + } + + w := gen.NewCodeWriter() + defer w.WriteGoFile("tables.go", "internal") + + // Create parents table. + parents := make([]uint16, language.NumCompactTags) + for _, loc := range data.Locales() { + tag := language.MustParse(loc) + index, ok := language.CompactIndex(tag) + if !ok { + continue + } + parentIndex := 0 // und + for p := tag.Parent(); p != language.Und; p = p.Parent() { + if x, ok := language.CompactIndex(p); ok { + parentIndex = x + break + } + } + parents[index] = uint16(parentIndex) + } + + w.WriteComment(` + Parent maps a compact index of a tag to the compact index of the parent of + this tag.`) + w.WriteVar("Parent", parents) +} diff --git a/vendor/golang.org/x/text/internal/gen/code.go b/vendor/golang.org/x/text/internal/gen/code.go new file mode 100644 index 0000000..d7031b6 --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen/code.go @@ -0,0 +1,351 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gen + +import ( + "bytes" + "encoding/gob" + "fmt" + "hash" + "hash/fnv" + "io" + "log" + "os" + "reflect" + "strings" + "unicode" + "unicode/utf8" +) + +// This file contains utilities for generating code. + +// TODO: other write methods like: +// - slices, maps, types, etc. + +// CodeWriter is a utility for writing structured code. It computes the content +// hash and size of written content. It ensures there are newlines between +// written code blocks. +type CodeWriter struct { + buf bytes.Buffer + Size int + Hash hash.Hash32 // content hash + gob *gob.Encoder + // For comments we skip the usual one-line separator if they are followed by + // a code block. + skipSep bool +} + +func (w *CodeWriter) Write(p []byte) (n int, err error) { + return w.buf.Write(p) +} + +// NewCodeWriter returns a new CodeWriter. +func NewCodeWriter() *CodeWriter { + h := fnv.New32() + return &CodeWriter{Hash: h, gob: gob.NewEncoder(h)} +} + +// WriteGoFile appends the buffer with the total size of all created structures +// and writes it as a Go file to the the given file with the given package name. +func (w *CodeWriter) WriteGoFile(filename, pkg string) { + f, err := os.Create(filename) + if err != nil { + log.Fatalf("Could not create file %s: %v", filename, err) + } + defer f.Close() + if _, err = w.WriteGo(f, pkg); err != nil { + log.Fatalf("Error writing file %s: %v", filename, err) + } +} + +// WriteGo appends the buffer with the total size of all created structures and +// writes it as a Go file to the the given writer with the given package name. +func (w *CodeWriter) WriteGo(out io.Writer, pkg string) (n int, err error) { + sz := w.Size + w.WriteComment("Total table size %d bytes (%dKiB); checksum: %X\n", sz, sz/1024, w.Hash.Sum32()) + defer w.buf.Reset() + return WriteGo(out, pkg, w.buf.Bytes()) +} + +func (w *CodeWriter) printf(f string, x ...interface{}) { + fmt.Fprintf(w, f, x...) +} + +func (w *CodeWriter) insertSep() { + if w.skipSep { + w.skipSep = false + return + } + // Use at least two newlines to ensure a blank space between the previous + // block. WriteGoFile will remove extraneous newlines. + w.printf("\n\n") +} + +// WriteComment writes a comment block. All line starts are prefixed with "//". +// Initial empty lines are gobbled. The indentation for the first line is +// stripped from consecutive lines. +func (w *CodeWriter) WriteComment(comment string, args ...interface{}) { + s := fmt.Sprintf(comment, args...) + s = strings.Trim(s, "\n") + + // Use at least two newlines to ensure a blank space between the previous + // block. WriteGoFile will remove extraneous newlines. + w.printf("\n\n// ") + w.skipSep = true + + // strip first indent level. + sep := "\n" + for ; len(s) > 0 && (s[0] == '\t' || s[0] == ' '); s = s[1:] { + sep += s[:1] + } + + strings.NewReplacer(sep, "\n// ", "\n", "\n// ").WriteString(w, s) + + w.printf("\n") +} + +func (w *CodeWriter) writeSizeInfo(size int) { + w.printf("// Size: %d bytes\n", size) +} + +// WriteConst writes a constant of the given name and value. +func (w *CodeWriter) WriteConst(name string, x interface{}) { + w.insertSep() + v := reflect.ValueOf(x) + + switch v.Type().Kind() { + case reflect.String: + w.printf("const %s %s = ", name, typeName(x)) + w.WriteString(v.String()) + w.printf("\n") + default: + w.printf("const %s = %#v\n", name, x) + } +} + +// WriteVar writes a variable of the given name and value. +func (w *CodeWriter) WriteVar(name string, x interface{}) { + w.insertSep() + v := reflect.ValueOf(x) + oldSize := w.Size + sz := int(v.Type().Size()) + w.Size += sz + + switch v.Type().Kind() { + case reflect.String: + w.printf("var %s %s = ", name, typeName(x)) + w.WriteString(v.String()) + case reflect.Struct: + w.gob.Encode(x) + fallthrough + case reflect.Slice, reflect.Array: + w.printf("var %s = ", name) + w.writeValue(v) + w.writeSizeInfo(w.Size - oldSize) + default: + w.printf("var %s %s = ", name, typeName(x)) + w.gob.Encode(x) + w.writeValue(v) + w.writeSizeInfo(w.Size - oldSize) + } + w.printf("\n") +} + +func (w *CodeWriter) writeValue(v reflect.Value) { + x := v.Interface() + switch v.Kind() { + case reflect.String: + w.WriteString(v.String()) + case reflect.Array: + // Don't double count: callers of WriteArray count on the size being + // added, so we need to discount it here. + w.Size -= int(v.Type().Size()) + w.writeSlice(x, true) + case reflect.Slice: + w.writeSlice(x, false) + case reflect.Struct: + w.printf("%s{\n", typeName(v.Interface())) + t := v.Type() + for i := 0; i < v.NumField(); i++ { + w.printf("%s: ", t.Field(i).Name) + w.writeValue(v.Field(i)) + w.printf(",\n") + } + w.printf("}") + default: + w.printf("%#v", x) + } +} + +// WriteString writes a string literal. +func (w *CodeWriter) WriteString(s string) { + s = strings.Replace(s, `\`, `\\`, -1) + io.WriteString(w.Hash, s) // content hash + w.Size += len(s) + + const maxInline = 40 + if len(s) <= maxInline { + w.printf("%q", s) + return + } + + // We will render the string as a multi-line string. + const maxWidth = 80 - 4 - len(`"`) - len(`" +`) + + // When starting on its own line, go fmt indents line 2+ an extra level. + n, max := maxWidth, maxWidth-4 + + // As per https://golang.org/issue/18078, the compiler has trouble + // compiling the concatenation of many strings, s0 + s1 + s2 + ... + sN, + // for large N. We insert redundant, explicit parentheses to work around + // that, lowering the N at any given step: (s0 + s1 + ... + s63) + (s64 + + // ... + s127) + etc + (etc + ... + sN). + explicitParens, extraComment := len(s) > 128*1024, "" + if explicitParens { + w.printf(`(`) + extraComment = "; the redundant, explicit parens are for https://golang.org/issue/18078" + } + + // Print "" +\n, if a string does not start on its own line. + b := w.buf.Bytes() + if p := len(bytes.TrimRight(b, " \t")); p > 0 && b[p-1] != '\n' { + w.printf("\"\" + // Size: %d bytes%s\n", len(s), extraComment) + n, max = maxWidth, maxWidth + } + + w.printf(`"`) + + for sz, p, nLines := 0, 0, 0; p < len(s); { + var r rune + r, sz = utf8.DecodeRuneInString(s[p:]) + out := s[p : p+sz] + chars := 1 + if !unicode.IsPrint(r) || r == utf8.RuneError || r == '"' { + switch sz { + case 1: + out = fmt.Sprintf("\\x%02x", s[p]) + case 2, 3: + out = fmt.Sprintf("\\u%04x", r) + case 4: + out = fmt.Sprintf("\\U%08x", r) + } + chars = len(out) + } + if n -= chars; n < 0 { + nLines++ + if explicitParens && nLines&63 == 63 { + w.printf("\") + (\"") + } + w.printf("\" +\n\"") + n = max - len(out) + } + w.printf("%s", out) + p += sz + } + w.printf(`"`) + if explicitParens { + w.printf(`)`) + } +} + +// WriteSlice writes a slice value. +func (w *CodeWriter) WriteSlice(x interface{}) { + w.writeSlice(x, false) +} + +// WriteArray writes an array value. +func (w *CodeWriter) WriteArray(x interface{}) { + w.writeSlice(x, true) +} + +func (w *CodeWriter) writeSlice(x interface{}, isArray bool) { + v := reflect.ValueOf(x) + w.gob.Encode(v.Len()) + w.Size += v.Len() * int(v.Type().Elem().Size()) + name := typeName(x) + if isArray { + name = fmt.Sprintf("[%d]%s", v.Len(), name[strings.Index(name, "]")+1:]) + } + if isArray { + w.printf("%s{\n", name) + } else { + w.printf("%s{ // %d elements\n", name, v.Len()) + } + + switch kind := v.Type().Elem().Kind(); kind { + case reflect.String: + for _, s := range x.([]string) { + w.WriteString(s) + w.printf(",\n") + } + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + // nLine and nBlock are the number of elements per line and block. + nLine, nBlock, format := 8, 64, "%d," + switch kind { + case reflect.Uint8: + format = "%#02x," + case reflect.Uint16: + format = "%#04x," + case reflect.Uint32: + nLine, nBlock, format = 4, 32, "%#08x," + case reflect.Uint, reflect.Uint64: + nLine, nBlock, format = 4, 32, "%#016x," + case reflect.Int8: + nLine = 16 + } + n := nLine + for i := 0; i < v.Len(); i++ { + if i%nBlock == 0 && v.Len() > nBlock { + w.printf("// Entry %X - %X\n", i, i+nBlock-1) + } + x := v.Index(i).Interface() + w.gob.Encode(x) + w.printf(format, x) + if n--; n == 0 { + n = nLine + w.printf("\n") + } + } + w.printf("\n") + case reflect.Struct: + zero := reflect.Zero(v.Type().Elem()).Interface() + for i := 0; i < v.Len(); i++ { + x := v.Index(i).Interface() + w.gob.EncodeValue(v) + if !reflect.DeepEqual(zero, x) { + line := fmt.Sprintf("%#v,\n", x) + line = line[strings.IndexByte(line, '{'):] + w.printf("%d: ", i) + w.printf(line) + } + } + case reflect.Array: + for i := 0; i < v.Len(); i++ { + w.printf("%d: %#v,\n", i, v.Index(i).Interface()) + } + default: + panic("gen: slice elem type not supported") + } + w.printf("}") +} + +// WriteType writes a definition of the type of the given value and returns the +// type name. +func (w *CodeWriter) WriteType(x interface{}) string { + t := reflect.TypeOf(x) + w.printf("type %s struct {\n", t.Name()) + for i := 0; i < t.NumField(); i++ { + w.printf("\t%s %s\n", t.Field(i).Name, t.Field(i).Type) + } + w.printf("}\n") + return t.Name() +} + +// typeName returns the name of the go type of x. +func typeName(x interface{}) string { + t := reflect.ValueOf(x).Type() + return strings.Replace(fmt.Sprint(t), "main.", "", 1) +} diff --git a/vendor/golang.org/x/text/internal/gen/gen.go b/vendor/golang.org/x/text/internal/gen/gen.go new file mode 100644 index 0000000..2acb035 --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen/gen.go @@ -0,0 +1,281 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package gen contains common code for the various code generation tools in the +// text repository. Its usage ensures consistency between tools. +// +// This package defines command line flags that are common to most generation +// tools. The flags allow for specifying specific Unicode and CLDR versions +// in the public Unicode data repository (http://www.unicode.org/Public). +// +// A local Unicode data mirror can be set through the flag -local or the +// environment variable UNICODE_DIR. The former takes precedence. The local +// directory should follow the same structure as the public repository. +// +// IANA data can also optionally be mirrored by putting it in the iana directory +// rooted at the top of the local mirror. Beware, though, that IANA data is not +// versioned. So it is up to the developer to use the right version. +package gen // import "golang.org/x/text/internal/gen" + +import ( + "bytes" + "flag" + "fmt" + "go/build" + "go/format" + "io" + "io/ioutil" + "log" + "net/http" + "os" + "path" + "path/filepath" + "sync" + "unicode" + + "golang.org/x/text/unicode/cldr" +) + +var ( + url = flag.String("url", + "http://www.unicode.org/Public", + "URL of Unicode database directory") + iana = flag.String("iana", + "http://www.iana.org", + "URL of the IANA repository") + unicodeVersion = flag.String("unicode", + getEnv("UNICODE_VERSION", unicode.Version), + "unicode version to use") + cldrVersion = flag.String("cldr", + getEnv("CLDR_VERSION", cldr.Version), + "cldr version to use") +) + +func getEnv(name, def string) string { + if v := os.Getenv(name); v != "" { + return v + } + return def +} + +// Init performs common initialization for a gen command. It parses the flags +// and sets up the standard logging parameters. +func Init() { + log.SetPrefix("") + log.SetFlags(log.Lshortfile) + flag.Parse() +} + +const header = `// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package %s + +` + +// UnicodeVersion reports the requested Unicode version. +func UnicodeVersion() string { + return *unicodeVersion +} + +// UnicodeVersion reports the requested CLDR version. +func CLDRVersion() string { + return *cldrVersion +} + +// IsLocal reports whether data files are available locally. +func IsLocal() bool { + dir, err := localReadmeFile() + if err != nil { + return false + } + if _, err = os.Stat(dir); err != nil { + return false + } + return true +} + +// OpenUCDFile opens the requested UCD file. The file is specified relative to +// the public Unicode root directory. It will call log.Fatal if there are any +// errors. +func OpenUCDFile(file string) io.ReadCloser { + return openUnicode(path.Join(*unicodeVersion, "ucd", file)) +} + +// OpenCLDRCoreZip opens the CLDR core zip file. It will call log.Fatal if there +// are any errors. +func OpenCLDRCoreZip() io.ReadCloser { + return OpenUnicodeFile("cldr", *cldrVersion, "core.zip") +} + +// OpenUnicodeFile opens the requested file of the requested category from the +// root of the Unicode data archive. The file is specified relative to the +// public Unicode root directory. If version is "", it will use the default +// Unicode version. It will call log.Fatal if there are any errors. +func OpenUnicodeFile(category, version, file string) io.ReadCloser { + if version == "" { + version = UnicodeVersion() + } + return openUnicode(path.Join(category, version, file)) +} + +// OpenIANAFile opens the requested IANA file. The file is specified relative +// to the IANA root, which is typically either http://www.iana.org or the +// iana directory in the local mirror. It will call log.Fatal if there are any +// errors. +func OpenIANAFile(path string) io.ReadCloser { + return Open(*iana, "iana", path) +} + +var ( + dirMutex sync.Mutex + localDir string +) + +const permissions = 0755 + +func localReadmeFile() (string, error) { + p, err := build.Import("golang.org/x/text", "", build.FindOnly) + if err != nil { + return "", fmt.Errorf("Could not locate package: %v", err) + } + return filepath.Join(p.Dir, "DATA", "README"), nil +} + +func getLocalDir() string { + dirMutex.Lock() + defer dirMutex.Unlock() + + readme, err := localReadmeFile() + if err != nil { + log.Fatal(err) + } + dir := filepath.Dir(readme) + if _, err := os.Stat(readme); err != nil { + if err := os.MkdirAll(dir, permissions); err != nil { + log.Fatalf("Could not create directory: %v", err) + } + ioutil.WriteFile(readme, []byte(readmeTxt), permissions) + } + return dir +} + +const readmeTxt = `Generated by golang.org/x/text/internal/gen. DO NOT EDIT. + +This directory contains downloaded files used to generate the various tables +in the golang.org/x/text subrepo. + +Note that the language subtag repo (iana/assignments/language-subtag-registry) +and all other times in the iana subdirectory are not versioned and will need +to be periodically manually updated. The easiest way to do this is to remove +the entire iana directory. This is mostly of concern when updating the language +package. +` + +// Open opens subdir/path if a local directory is specified and the file exists, +// where subdir is a directory relative to the local root, or fetches it from +// urlRoot/path otherwise. It will call log.Fatal if there are any errors. +func Open(urlRoot, subdir, path string) io.ReadCloser { + file := filepath.Join(getLocalDir(), subdir, filepath.FromSlash(path)) + return open(file, urlRoot, path) +} + +func openUnicode(path string) io.ReadCloser { + file := filepath.Join(getLocalDir(), filepath.FromSlash(path)) + return open(file, *url, path) +} + +// TODO: automatically periodically update non-versioned files. + +func open(file, urlRoot, path string) io.ReadCloser { + if f, err := os.Open(file); err == nil { + return f + } + r := get(urlRoot, path) + defer r.Close() + b, err := ioutil.ReadAll(r) + if err != nil { + log.Fatalf("Could not download file: %v", err) + } + os.MkdirAll(filepath.Dir(file), permissions) + if err := ioutil.WriteFile(file, b, permissions); err != nil { + log.Fatalf("Could not create file: %v", err) + } + return ioutil.NopCloser(bytes.NewReader(b)) +} + +func get(root, path string) io.ReadCloser { + url := root + "/" + path + fmt.Printf("Fetching %s...", url) + defer fmt.Println(" done.") + resp, err := http.Get(url) + if err != nil { + log.Fatalf("HTTP GET: %v", err) + } + if resp.StatusCode != 200 { + log.Fatalf("Bad GET status for %q: %q", url, resp.Status) + } + return resp.Body +} + +// TODO: use Write*Version in all applicable packages. + +// WriteUnicodeVersion writes a constant for the Unicode version from which the +// tables are generated. +func WriteUnicodeVersion(w io.Writer) { + fmt.Fprintf(w, "// UnicodeVersion is the Unicode version from which the tables in this package are derived.\n") + fmt.Fprintf(w, "const UnicodeVersion = %q\n\n", UnicodeVersion()) +} + +// WriteCLDRVersion writes a constant for the CLDR version from which the +// tables are generated. +func WriteCLDRVersion(w io.Writer) { + fmt.Fprintf(w, "// CLDRVersion is the CLDR version from which the tables in this package are derived.\n") + fmt.Fprintf(w, "const CLDRVersion = %q\n\n", CLDRVersion()) +} + +// WriteGoFile prepends a standard file comment and package statement to the +// given bytes, applies gofmt, and writes them to a file with the given name. +// It will call log.Fatal if there are any errors. +func WriteGoFile(filename, pkg string, b []byte) { + w, err := os.Create(filename) + if err != nil { + log.Fatalf("Could not create file %s: %v", filename, err) + } + defer w.Close() + if _, err = WriteGo(w, pkg, b); err != nil { + log.Fatalf("Error writing file %s: %v", filename, err) + } +} + +// WriteGo prepends a standard file comment and package statement to the given +// bytes, applies gofmt, and writes them to w. +func WriteGo(w io.Writer, pkg string, b []byte) (n int, err error) { + src := []byte(fmt.Sprintf(header, pkg)) + src = append(src, b...) + formatted, err := format.Source(src) + if err != nil { + // Print the generated code even in case of an error so that the + // returned error can be meaningfully interpreted. + n, _ = w.Write(src) + return n, err + } + return w.Write(formatted) +} + +// Repackage rewrites a Go file from belonging to package main to belonging to +// the given package. +func Repackage(inFile, outFile, pkg string) { + src, err := ioutil.ReadFile(inFile) + if err != nil { + log.Fatalf("reading %s: %v", inFile, err) + } + const toDelete = "package main\n\n" + i := bytes.Index(src, []byte(toDelete)) + if i < 0 { + log.Fatalf("Could not find %q in %s.", toDelete, inFile) + } + w := &bytes.Buffer{} + w.Write(src[i+len(toDelete):]) + WriteGoFile(outFile, pkg, w.Bytes()) +} diff --git a/vendor/golang.org/x/text/internal/gen_test.go b/vendor/golang.org/x/text/internal/gen_test.go new file mode 100644 index 0000000..a2e1981 --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen_test.go @@ -0,0 +1,38 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "testing" + + "golang.org/x/text/language" +) + +func TestParents(t *testing.T) { + testCases := []struct { + tag, parent string + }{ + {"af", "und"}, + {"en", "und"}, + {"en-001", "en"}, + {"en-AU", "en-001"}, + {"en-US", "en"}, + {"en-US-u-va-posix", "en-US"}, + {"ca-ES-valencia", "ca-ES"}, + } + for _, tc := range testCases { + tag, ok := language.CompactIndex(language.MustParse(tc.tag)) + if !ok { + t.Fatalf("Could not get index of flag %s", tc.tag) + } + want, ok := language.CompactIndex(language.MustParse(tc.parent)) + if !ok { + t.Fatalf("Could not get index of parent %s of tag %s", tc.parent, tc.tag) + } + if got := int(Parent[tag]); got != want { + t.Errorf("Parent[%s] = %d; want %d (%s)", tc.tag, got, want, tc.parent) + } + } +} diff --git a/vendor/golang.org/x/text/internal/internal.go b/vendor/golang.org/x/text/internal/internal.go new file mode 100644 index 0000000..eac8328 --- /dev/null +++ b/vendor/golang.org/x/text/internal/internal.go @@ -0,0 +1,51 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package internal contains non-exported functionality that are used by +// packages in the text repository. +package internal // import "golang.org/x/text/internal" + +import ( + "sort" + + "golang.org/x/text/language" +) + +// SortTags sorts tags in place. +func SortTags(tags []language.Tag) { + sort.Sort(sorter(tags)) +} + +type sorter []language.Tag + +func (s sorter) Len() int { + return len(s) +} + +func (s sorter) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +func (s sorter) Less(i, j int) bool { + return s[i].String() < s[j].String() +} + +// UniqueTags sorts and filters duplicate tags in place and returns a slice with +// only unique tags. +func UniqueTags(tags []language.Tag) []language.Tag { + if len(tags) <= 1 { + return tags + } + SortTags(tags) + k := 0 + for i := 1; i < len(tags); i++ { + if tags[k].String() < tags[i].String() { + k++ + tags[k] = tags[i] + } + } + return tags[:k+1] +} diff --git a/vendor/golang.org/x/text/internal/internal_test.go b/vendor/golang.org/x/text/internal/internal_test.go new file mode 100644 index 0000000..ce1b9a3 --- /dev/null +++ b/vendor/golang.org/x/text/internal/internal_test.go @@ -0,0 +1,38 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "fmt" + "strings" + "testing" + + "golang.org/x/text/language" +) + +func TestUnique(t *testing.T) { + testCases := []struct { + in, want string + }{ + {"", "[]"}, + {"en", "[en]"}, + {"en en", "[en]"}, + {"en en en", "[en]"}, + {"en-u-cu-eur en", "[en en-u-cu-eur]"}, + {"nl en", "[en nl]"}, + {"pt-Pt pt", "[pt pt-PT]"}, + } + for _, tc := range testCases { + tags := []language.Tag{} + for _, s := range strings.Split(tc.in, " ") { + if s != "" { + tags = append(tags, language.MustParse(s)) + } + } + if got := fmt.Sprint(UniqueTags(tags)); got != tc.want { + t.Errorf("Unique(%s) = %s; want %s", tc.in, got, tc.want) + } + } +} diff --git a/vendor/golang.org/x/text/internal/match.go b/vendor/golang.org/x/text/internal/match.go new file mode 100644 index 0000000..a67fcac --- /dev/null +++ b/vendor/golang.org/x/text/internal/match.go @@ -0,0 +1,67 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +// This file contains matchers that implement CLDR inheritance. +// +// See http://unicode.org/reports/tr35/#Locale_Inheritance. +// +// Some of the inheritance described in this document is already handled by +// the cldr package. + +import ( + "golang.org/x/text/language" +) + +// TODO: consider if (some of the) matching algorithm needs to be public after +// getting some feel about what is generic and what is specific. + +// NewInheritanceMatcher returns a matcher that matches based on the inheritance +// chain. +// +// The matcher uses canonicalization and the parent relationship to find a +// match. The resulting match will always be either Und or a language with the +// same language and script as the requested language. It will not match +// languages for which there is understood to be mutual or one-directional +// intelligibility. +// +// A Match will indicate an Exact match if the language matches after +// canonicalization and High if the matched tag is a parent. +func NewInheritanceMatcher(t []language.Tag) *InheritanceMatcher { + tags := &InheritanceMatcher{make(map[language.Tag]int)} + for i, tag := range t { + ct, err := language.All.Canonicalize(tag) + if err != nil { + ct = tag + } + tags.index[ct] = i + } + return tags +} + +type InheritanceMatcher struct { + index map[language.Tag]int +} + +func (m InheritanceMatcher) Match(want ...language.Tag) (language.Tag, int, language.Confidence) { + for _, t := range want { + ct, err := language.All.Canonicalize(t) + if err != nil { + ct = t + } + conf := language.Exact + for { + if index, ok := m.index[ct]; ok { + return ct, index, conf + } + if ct == language.Und { + break + } + ct = ct.Parent() + conf = language.High + } + } + return language.Und, 0, language.No +} diff --git a/vendor/golang.org/x/text/internal/match_test.go b/vendor/golang.org/x/text/internal/match_test.go new file mode 100644 index 0000000..8a3fe65 --- /dev/null +++ b/vendor/golang.org/x/text/internal/match_test.go @@ -0,0 +1,56 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "strings" + "testing" + + "golang.org/x/text/language" +) + +func TestInheritanceMatcher(t *testing.T) { + for i, tt := range []struct { + haveTags string + wantTags string + match string + conf language.Confidence + }{ + {"und,en,en-US", "en-US", "en-US", language.Exact}, // most specific match + {"zh-Hant,zh", "zh-TW", "zh-Hant", language.High}, // zh-TW implies Hant. + {"und,zh", "zh-TW", "und", language.High}, // zh-TW does not match zh. + {"zh", "zh-TW", "und", language.No}, // zh-TW does not match zh. + {"iw,en,nl", "he", "he", language.Exact}, // matches after canonicalization + {"he,en,nl", "iw", "he", language.Exact}, // matches after canonicalization + // Prefer first match over more specific match for various reasons: + // a) consistency of user interface is more important than an exact match, + // b) _if_ und is specified, it should be considered a correct and useful match, + // Note that a call to this Match will almost always be with a single tag. + {"und,en,en-US", "he,en-US", "und", language.High}, + } { + have := parseTags(tt.haveTags) + m := NewInheritanceMatcher(have) + tag, index, conf := m.Match(parseTags(tt.wantTags)...) + want := language.Raw.Make(tt.match) + if tag != want { + t.Errorf("%d:tag: got %q; want %q", i, tag, want) + } + if conf != language.No { + if got, _ := language.All.Canonicalize(have[index]); got != want { + t.Errorf("%d:index: got %q; want %q ", i, got, want) + } + } + if conf != tt.conf { + t.Errorf("%d:conf: got %v; want %v", i, conf, tt.conf) + } + } +} + +func parseTags(list string) (out []language.Tag) { + for _, s := range strings.Split(list, ",") { + out = append(out, language.Raw.Make(strings.TrimSpace(s))) + } + return out +} diff --git a/vendor/golang.org/x/text/internal/number/common.go b/vendor/golang.org/x/text/internal/number/common.go new file mode 100644 index 0000000..a29abe4 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/common.go @@ -0,0 +1,92 @@ +// This file was generated by go generate; DO NOT EDIT + +package number + +import ( + "unicode/utf8" + + "golang.org/x/text/internal/format/plural" +) + +// A system identifies a CLDR numbering system. +type system byte + +type systemData struct { + id system + digitSize byte // number of UTF-8 bytes per digit + zero [utf8.UTFMax]byte // UTF-8 sequence of zero digit. +} + +// A SymbolType identifies a symbol of a specific kind. +type SymbolType int + +const ( + SymDecimal SymbolType = iota + SymGroup + SymList + SymPercentSign + SymPlusSign + SymMinusSign + SymExponential + SymSuperscriptingExponent + SymPerMille + SymInfinity + SymNan + SymTimeSeparator + + NumSymbolTypes +) + +type altSymData struct { + compactTag uint16 + system system + symIndex byte +} + +var countMap = map[string]plural.Form{ + "other": plural.Other, + "zero": plural.Zero, + "one": plural.One, + "two": plural.Two, + "few": plural.Few, + "many": plural.Many, +} + +type pluralCheck struct { + // category: + // 3..7: opID + // 0..2: category + cat byte + setID byte +} + +// opID identifies the type of operand in the plural rule, being i, n or f. +// (v, w, and t are treated as filters in our implementation.) +type opID byte + +const ( + opMod opID = 0x1 // is '%' used? + opNotEqual opID = 0x2 // using "!=" to compare + opI opID = 0 << 2 // integers after taking the absolute value + opN opID = 1 << 2 // full number (must be integer) + opF opID = 2 << 2 // fraction + opV opID = 3 << 2 // number of visible digits + opW opID = 4 << 2 // number of visible digits without trailing zeros + opBretonM opID = 5 << 2 // hard-wired rule for Breton + opItalian800 opID = 6 << 2 // hard-wired rule for Italian + opAzerbaijan00s opID = 7 << 2 // hard-wired rule for Azerbaijan +) +const ( + // Use this plural form to indicate the next rule needs to match as well. + // The last condition in the list will have the correct plural form. + andNext = 0x7 + formMask = 0x7 + + opShift = 3 + + // numN indicates the maximum integer, or maximum mod value, for which we + // have inclusion masks. + numN = 100 + // The common denominator of the modulo that is taken. + maxMod = 100 +) diff --git a/vendor/golang.org/x/text/internal/number/data_test.go b/vendor/golang.org/x/text/internal/number/data_test.go new file mode 100644 index 0000000..350be59 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/data_test.go @@ -0,0 +1,194 @@ +// This file was generated by go generate; DO NOT EDIT + +package number + +import "golang.org/x/text/internal/format/plural" + +type pluralTest struct { + locales string + form plural.Form + integer []string + decimal []string +} + +var ordinalTests = []pluralTest{ // 59 elements + 0: {locales: "af am ar bg bs ce cs da de dsb el es et eu fa fi fy gl he hr hsb id in is iw ja km kn ko ky lt lv ml mn my nb nl pa pl prg pt root ru sh si sk sl sr sw ta te th tr ur uz yue zh zu", form: 0x0, integer: []string{"0~15", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 1: {locales: "sv", form: 0x2, integer: []string{"1", "2", "21", "22", "31", "32", "41", "42", "51", "52", "61", "62", "71", "72", "81", "82", "101", "1001"}, decimal: []string(nil)}, + 2: {locales: "sv", form: 0x0, integer: []string{"0", "3~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 3: {locales: "fil fr ga hy lo mo ms ro tl vi", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 4: {locales: "fil fr ga hy lo mo ms ro tl vi", form: 0x0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 5: {locales: "hu", form: 0x2, integer: []string{"1", "5"}, decimal: []string(nil)}, + 6: {locales: "hu", form: 0x0, integer: []string{"0", "2~4", "6~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 7: {locales: "ne", form: 0x2, integer: []string{"1~4"}, decimal: []string(nil)}, + 8: {locales: "ne", form: 0x0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 9: {locales: "be", form: 0x4, integer: []string{"2", "3", "22", "23", "32", "33", "42", "43", "52", "53", "62", "63", "72", "73", "82", "83", "102", "1002"}, decimal: []string(nil)}, + 10: {locales: "be", form: 0x0, integer: []string{"0", "1", "4~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 11: {locales: "uk", form: 0x4, integer: []string{"3", "23", "33", "43", "53", "63", "73", "83", "103", "1003"}, decimal: []string(nil)}, + 12: {locales: "uk", form: 0x0, integer: []string{"0~2", "4~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 13: {locales: "kk", form: 0x5, integer: []string{"6", "9", "10", "16", "19", "20", "26", "29", "30", "36", "39", "40", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 14: {locales: "kk", form: 0x0, integer: []string{"0~5", "7", "8", "11~15", "17", "18", "21", "101", "1001"}, decimal: []string(nil)}, + 15: {locales: "it", form: 0x5, integer: []string{"8", "11", "80", "800"}, decimal: []string(nil)}, + 16: {locales: "it", form: 0x0, integer: []string{"0~7", "9", "10", "12~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 17: {locales: "ka", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 18: {locales: "ka", form: 0x5, integer: []string{"0", "2~16", "102", "1002"}, decimal: []string(nil)}, + 19: {locales: "ka", form: 0x0, integer: []string{"21~36", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 20: {locales: "sq", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 21: {locales: "sq", form: 0x5, integer: []string{"4", "24", "34", "44", "54", "64", "74", "84", "104", "1004"}, decimal: []string(nil)}, + 22: {locales: "sq", form: 0x0, integer: []string{"0", "2", "3", "5~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 23: {locales: "en", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, + 24: {locales: "en", form: 0x3, integer: []string{"2", "22", "32", "42", "52", "62", "72", "82", "102", "1002"}, decimal: []string(nil)}, + 25: {locales: "en", form: 0x4, integer: []string{"3", "23", "33", "43", "53", "63", "73", "83", "103", "1003"}, decimal: []string(nil)}, + 26: {locales: "en", form: 0x0, integer: []string{"0", "4~18", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 27: {locales: "mr", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 28: {locales: "mr", form: 0x3, integer: []string{"2", "3"}, decimal: []string(nil)}, + 29: {locales: "mr", form: 0x4, integer: []string{"4"}, decimal: []string(nil)}, + 30: {locales: "mr", form: 0x0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 31: {locales: "ca", form: 0x2, integer: []string{"1", "3"}, decimal: []string(nil)}, + 32: {locales: "ca", form: 0x3, integer: []string{"2"}, decimal: []string(nil)}, + 33: {locales: "ca", form: 0x4, integer: []string{"4"}, decimal: []string(nil)}, + 34: {locales: "ca", form: 0x0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 35: {locales: "mk", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, + 36: {locales: "mk", form: 0x3, integer: []string{"2", "22", "32", "42", "52", "62", "72", "82", "102", "1002"}, decimal: []string(nil)}, + 37: {locales: "mk", form: 0x5, integer: []string{"7", "8", "27", "28", "37", "38", "47", "48", "57", "58", "67", "68", "77", "78", "87", "88", "107", "1007"}, decimal: []string(nil)}, + 38: {locales: "mk", form: 0x0, integer: []string{"0", "3~6", "9~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 39: {locales: "az", form: 0x2, integer: []string{"1", "2", "5", "7", "8", "11", "12", "15", "17", "18", "20~22", "25", "101", "1001"}, decimal: []string(nil)}, + 40: {locales: "az", form: 0x4, integer: []string{"3", "4", "13", "14", "23", "24", "33", "34", "43", "44", "53", "54", "63", "64", "73", "74", "100", "1003"}, decimal: []string(nil)}, + 41: {locales: "az", form: 0x5, integer: []string{"0", "6", "16", "26", "36", "40", "46", "56", "106", "1006"}, decimal: []string(nil)}, + 42: {locales: "az", form: 0x0, integer: []string{"9", "10", "19", "29", "30", "39", "49", "59", "69", "79", "109", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 43: {locales: "gu hi", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 44: {locales: "gu hi", form: 0x3, integer: []string{"2", "3"}, decimal: []string(nil)}, + 45: {locales: "gu hi", form: 0x4, integer: []string{"4"}, decimal: []string(nil)}, + 46: {locales: "gu hi", form: 0x5, integer: []string{"6"}, decimal: []string(nil)}, + 47: {locales: "gu hi", form: 0x0, integer: []string{"0", "5", "7~20", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 48: {locales: "as bn", form: 0x2, integer: []string{"1", "5", "7~10"}, decimal: []string(nil)}, + 49: {locales: "as bn", form: 0x3, integer: []string{"2", "3"}, decimal: []string(nil)}, + 50: {locales: "as bn", form: 0x4, integer: []string{"4"}, decimal: []string(nil)}, + 51: {locales: "as bn", form: 0x5, integer: []string{"6"}, decimal: []string(nil)}, + 52: {locales: "as bn", form: 0x0, integer: []string{"0", "11~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 53: {locales: "cy", form: 0x1, integer: []string{"0", "7~9"}, decimal: []string(nil)}, + 54: {locales: "cy", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 55: {locales: "cy", form: 0x3, integer: []string{"2"}, decimal: []string(nil)}, + 56: {locales: "cy", form: 0x4, integer: []string{"3", "4"}, decimal: []string(nil)}, + 57: {locales: "cy", form: 0x5, integer: []string{"5", "6"}, decimal: []string(nil)}, + 58: {locales: "cy", form: 0x0, integer: []string{"10~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, +} // Size: 4272 bytes + +var cardinalTests = []pluralTest{ // 115 elements + 0: {locales: "bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo root sah ses sg th to vi wo yo yue zh", form: 0x0, integer: []string{"0~15", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 1: {locales: "am as bn fa gu hi kn mr zu", form: 0x2, integer: []string{"0", "1"}, decimal: []string{"0.0~1.0", "0.00~0.04"}}, + 2: {locales: "am as bn fa gu hi kn mr zu", form: 0x0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"1.1~2.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 3: {locales: "ff fr hy kab", form: 0x2, integer: []string{"0", "1"}, decimal: []string{"0.0~1.5"}}, + 4: {locales: "ff fr hy kab", form: 0x0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"2.0~3.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 5: {locales: "ast ca de en et fi fy gl it ji nl sv sw ur yi", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 6: {locales: "ast ca de en et fi fy gl it ji nl sv sw ur yi", form: 0x0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 7: {locales: "si", form: 0x2, integer: []string{"0", "1"}, decimal: []string{"0.0", "0.1", "1.0", "0.00", "0.01", "1.00", "0.000", "0.001", "1.000", "0.0000", "0.0001", "1.0000"}}, + 8: {locales: "si", form: 0x0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.2~0.9", "1.1~1.8", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 9: {locales: "ak bh guw ln mg nso pa ti wa", form: 0x2, integer: []string{"0", "1"}, decimal: []string{"0.0", "1.0", "0.00", "1.00", "0.000", "1.000", "0.0000", "1.0000"}}, + 10: {locales: "ak bh guw ln mg nso pa ti wa", form: 0x0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 11: {locales: "tzm", form: 0x2, integer: []string{"0", "1", "11~24"}, decimal: []string{"0.0", "1.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "19.0", "20.0", "21.0", "22.0", "23.0", "24.0"}}, + 12: {locales: "tzm", form: 0x0, integer: []string{"2~10", "100~106", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 13: {locales: "pt", form: 0x2, integer: []string{"0", "1"}, decimal: []string{"0.0", "1.0", "0.00", "1.00", "0.000", "1.000", "0.0000", "1.0000"}}, + 14: {locales: "pt", form: 0x0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 15: {locales: "af asa az bem bez bg brx ce cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq sdh seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog", form: 0x2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 16: {locales: "af asa az bem bez bg brx ce cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq sdh seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog", form: 0x0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 17: {locales: "pt_PT", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 18: {locales: "pt_PT", form: 0x0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 19: {locales: "da", form: 0x2, integer: []string{"1"}, decimal: []string{"0.1~1.6"}}, + 20: {locales: "da", form: 0x0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "2.0~3.4", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 21: {locales: "is", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1~1.6", "10.1", "100.1", "1000.1"}}, + 22: {locales: "is", form: 0x0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 23: {locales: "mk", form: 0x2, integer: []string{"1", "11", "21", "31", "41", "51", "61", "71", "101", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, + 24: {locales: "mk", form: 0x0, integer: []string{"0", "2~10", "12~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.2~1.0", "1.2~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 25: {locales: "fil tl", form: 0x2, integer: []string{"0~3", "5", "7", "8", "10~13", "15", "17", "18", "20", "21", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.3", "0.5", "0.7", "0.8", "1.0~1.3", "1.5", "1.7", "1.8", "2.0", "2.1", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 26: {locales: "fil tl", form: 0x0, integer: []string{"4", "6", "9", "14", "16", "19", "24", "26", "104", "1004"}, decimal: []string{"0.4", "0.6", "0.9", "1.4", "1.6", "1.9", "2.4", "2.6", "10.4", "100.4", "1000.4"}}, + 27: {locales: "lv prg", form: 0x1, integer: []string{"0", "10~20", "30", "40", "50", "60", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 28: {locales: "lv prg", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1", "1.0", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, + 29: {locales: "lv prg", form: 0x0, integer: []string{"2~9", "22~29", "102", "1002"}, decimal: []string{"0.2~0.9", "1.2~1.9", "10.2", "100.2", "1000.2"}}, + 30: {locales: "lag", form: 0x1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, + 31: {locales: "lag", form: 0x2, integer: []string{"1"}, decimal: []string{"0.1~1.6"}}, + 32: {locales: "lag", form: 0x0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"2.0~3.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 33: {locales: "ksh", form: 0x1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, + 34: {locales: "ksh", form: 0x2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 35: {locales: "ksh", form: 0x0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 36: {locales: "iu kw naq se sma smi smj smn sms", form: 0x2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 37: {locales: "iu kw naq se sma smi smj smn sms", form: 0x3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, + 38: {locales: "iu kw naq se sma smi smj smn sms", form: 0x0, integer: []string{"0", "3~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 39: {locales: "shi", form: 0x2, integer: []string{"0", "1"}, decimal: []string{"0.0~1.0", "0.00~0.04"}}, + 40: {locales: "shi", form: 0x4, integer: []string{"2~10"}, decimal: []string{"2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "2.00", "3.00", "4.00", "5.00", "6.00", "7.00", "8.00"}}, + 41: {locales: "shi", form: 0x0, integer: []string{"11~26", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"1.1~1.9", "2.1~2.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 42: {locales: "mo ro", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 43: {locales: "mo ro", form: 0x4, integer: []string{"0", "2~16", "101", "1001"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 44: {locales: "mo ro", form: 0x0, integer: []string{"20~35", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 45: {locales: "bs hr sh sr", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, + 46: {locales: "bs hr sh sr", form: 0x4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string{"0.2~0.4", "1.2~1.4", "2.2~2.4", "3.2~3.4", "4.2~4.4", "5.2", "10.2", "100.2", "1000.2"}}, + 47: {locales: "bs hr sh sr", form: 0x0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.5~1.0", "1.5~2.0", "2.5~2.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 48: {locales: "gd", form: 0x2, integer: []string{"1", "11"}, decimal: []string{"1.0", "11.0", "1.00", "11.00", "1.000", "11.000", "1.0000"}}, + 49: {locales: "gd", form: 0x3, integer: []string{"2", "12"}, decimal: []string{"2.0", "12.0", "2.00", "12.00", "2.000", "12.000", "2.0000"}}, + 50: {locales: "gd", form: 0x4, integer: []string{"3~10", "13~19"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "19.0", "3.00"}}, + 51: {locales: "gd", form: 0x0, integer: []string{"0", "20~34", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 52: {locales: "sl", form: 0x2, integer: []string{"1", "101", "201", "301", "401", "501", "601", "701", "1001"}, decimal: []string(nil)}, + 53: {locales: "sl", form: 0x3, integer: []string{"2", "102", "202", "302", "402", "502", "602", "702", "1002"}, decimal: []string(nil)}, + 54: {locales: "sl", form: 0x4, integer: []string{"3", "4", "103", "104", "203", "204", "303", "304", "403", "404", "503", "504", "603", "604", "703", "704", "1003"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 55: {locales: "sl", form: 0x0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 56: {locales: "dsb hsb", form: 0x2, integer: []string{"1", "101", "201", "301", "401", "501", "601", "701", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, + 57: {locales: "dsb hsb", form: 0x3, integer: []string{"2", "102", "202", "302", "402", "502", "602", "702", "1002"}, decimal: []string{"0.2", "1.2", "2.2", "3.2", "4.2", "5.2", "6.2", "7.2", "10.2", "100.2", "1000.2"}}, + 58: {locales: "dsb hsb", form: 0x4, integer: []string{"3", "4", "103", "104", "203", "204", "303", "304", "403", "404", "503", "504", "603", "604", "703", "704", "1003"}, decimal: []string{"0.3", "0.4", "1.3", "1.4", "2.3", "2.4", "3.3", "3.4", "4.3", "4.4", "5.3", "5.4", "6.3", "6.4", "7.3", "7.4", "10.3", "100.3", "1000.3"}}, + 59: {locales: "dsb hsb", form: 0x0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.5~1.0", "1.5~2.0", "2.5~2.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 60: {locales: "he iw", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 61: {locales: "he iw", form: 0x3, integer: []string{"2"}, decimal: []string(nil)}, + 62: {locales: "he iw", form: 0x5, integer: []string{"20", "30", "40", "50", "60", "70", "80", "90", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 63: {locales: "he iw", form: 0x0, integer: []string{"0", "3~17", "101", "1001"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 64: {locales: "cs sk", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 65: {locales: "cs sk", form: 0x4, integer: []string{"2~4"}, decimal: []string(nil)}, + 66: {locales: "cs sk", form: 0x5, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 67: {locales: "cs sk", form: 0x0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 68: {locales: "pl", form: 0x2, integer: []string{"1"}, decimal: []string(nil)}, + 69: {locales: "pl", form: 0x4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string(nil)}, + 70: {locales: "pl", form: 0x5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 71: {locales: "pl", form: 0x0, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 72: {locales: "be", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "71.0", "81.0", "101.0", "1001.0"}}, + 73: {locales: "be", form: 0x4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string{"2.0", "3.0", "4.0", "22.0", "23.0", "24.0", "32.0", "33.0", "102.0", "1002.0"}}, + 74: {locales: "be", form: 0x5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "11.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 75: {locales: "be", form: 0x0, integer: []string(nil), decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.1", "1000.1"}}, + 76: {locales: "lt", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "71.0", "81.0", "101.0", "1001.0"}}, + 77: {locales: "lt", form: 0x4, integer: []string{"2~9", "22~29", "102", "1002"}, decimal: []string{"2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "22.0", "102.0", "1002.0"}}, + 78: {locales: "lt", form: 0x5, integer: []string(nil), decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.1", "1000.1"}}, + 79: {locales: "lt", form: 0x0, integer: []string{"0", "10~20", "30", "40", "50", "60", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 80: {locales: "mt", form: 0x2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 81: {locales: "mt", form: 0x4, integer: []string{"0", "2~10", "102~107", "1002"}, decimal: []string{"0.0", "2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "10.0", "102.0", "1002.0"}}, + 82: {locales: "mt", form: 0x5, integer: []string{"11~19", "111~117", "1011"}, decimal: []string{"11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "111.0", "1011.0"}}, + 83: {locales: "mt", form: 0x0, integer: []string{"20~35", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 84: {locales: "ru uk", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, + 85: {locales: "ru uk", form: 0x4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string(nil)}, + 86: {locales: "ru uk", form: 0x5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 87: {locales: "ru uk", form: 0x0, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 88: {locales: "br", form: 0x2, integer: []string{"1", "21", "31", "41", "51", "61", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "81.0", "101.0", "1001.0"}}, + 89: {locales: "br", form: 0x3, integer: []string{"2", "22", "32", "42", "52", "62", "82", "102", "1002"}, decimal: []string{"2.0", "22.0", "32.0", "42.0", "52.0", "62.0", "82.0", "102.0", "1002.0"}}, + 90: {locales: "br", form: 0x4, integer: []string{"3", "4", "9", "23", "24", "29", "33", "34", "39", "43", "44", "49", "103", "1003"}, decimal: []string{"3.0", "4.0", "9.0", "23.0", "24.0", "29.0", "33.0", "34.0", "103.0", "1003.0"}}, + 91: {locales: "br", form: 0x5, integer: []string{"1000000"}, decimal: []string{"1000000.0", "1000000.00", "1000000.000"}}, + 92: {locales: "br", form: 0x0, integer: []string{"0", "5~8", "10~20", "100", "1000", "10000", "100000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0"}}, + 93: {locales: "ga", form: 0x2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 94: {locales: "ga", form: 0x3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, + 95: {locales: "ga", form: 0x4, integer: []string{"3~6"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "3.00", "4.00", "5.00", "6.00", "3.000", "4.000", "5.000", "6.000", "3.0000", "4.0000", "5.0000", "6.0000"}}, + 96: {locales: "ga", form: 0x5, integer: []string{"7~10"}, decimal: []string{"7.0", "8.0", "9.0", "10.0", "7.00", "8.00", "9.00", "10.00", "7.000", "8.000", "9.000", "10.000", "7.0000", "8.0000", "9.0000", "10.0000"}}, + 97: {locales: "ga", form: 0x0, integer: []string{"0", "11~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 98: {locales: "gv", form: 0x2, integer: []string{"1", "11", "21", "31", "41", "51", "61", "71", "101", "1001"}, decimal: []string(nil)}, + 99: {locales: "gv", form: 0x3, integer: []string{"2", "12", "22", "32", "42", "52", "62", "72", "102", "1002"}, decimal: []string(nil)}, + 100: {locales: "gv", form: 0x4, integer: []string{"0", "20", "40", "60", "80", "100", "120", "140", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 101: {locales: "gv", form: 0x5, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 102: {locales: "gv", form: 0x0, integer: []string{"3~10", "13~19", "23", "103", "1003"}, decimal: []string(nil)}, + 103: {locales: "ar ars", form: 0x1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, + 104: {locales: "ar ars", form: 0x2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 105: {locales: "ar ars", form: 0x3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, + 106: {locales: "ar ars", form: 0x4, integer: []string{"3~10", "103~110", "1003"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "103.0", "1003.0"}}, + 107: {locales: "ar ars", form: 0x5, integer: []string{"11~26", "111", "1011"}, decimal: []string{"11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "111.0", "1011.0"}}, + 108: {locales: "ar ars", form: 0x0, integer: []string{"100~102", "200~202", "300~302", "400~402", "500~502", "600", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 109: {locales: "cy", form: 0x1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, + 110: {locales: "cy", form: 0x2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 111: {locales: "cy", form: 0x3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, + 112: {locales: "cy", form: 0x4, integer: []string{"3"}, decimal: []string{"3.0", "3.00", "3.000", "3.0000"}}, + 113: {locales: "cy", form: 0x5, integer: []string{"6"}, decimal: []string{"6.0", "6.00", "6.000", "6.0000"}}, + 114: {locales: "cy", form: 0x0, integer: []string{"4", "5", "7~20", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, +} // Size: 8304 bytes + +// Total table size 12576 bytes (12KiB); checksum: 35F73741 diff --git a/vendor/golang.org/x/text/internal/number/decimal.go b/vendor/golang.org/x/text/internal/number/decimal.go new file mode 100644 index 0000000..9c36865 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/decimal.go @@ -0,0 +1,416 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO: use build tags once a low-level public API has been established in +// package strconv. + +// Multiprecision decimal numbers. +// For floating-point formatting only; not general purpose. +// Only operations are assign and (binary) left/right shift. +// Can do binary floating point in multiprecision decimal precisely +// because 2 divides 10; cannot do decimal floating point +// in multiprecision binary precisely. + +package number + +type decimal struct { + d [800]byte // digits, big-endian representation + nd int // number of digits used + dp int // decimal point + neg bool + trunc bool // discarded nonzero digits beyond d[:nd] +} + +func (a *decimal) String() string { + n := 10 + a.nd + if a.dp > 0 { + n += a.dp + } + if a.dp < 0 { + n += -a.dp + } + + buf := make([]byte, n) + w := 0 + switch { + case a.nd == 0: + return "0" + + case a.dp <= 0: + // zeros fill space between decimal point and digits + buf[w] = '0' + w++ + buf[w] = '.' + w++ + w += digitZero(buf[w : w+-a.dp]) + w += copy(buf[w:], a.d[0:a.nd]) + + case a.dp < a.nd: + // decimal point in middle of digits + w += copy(buf[w:], a.d[0:a.dp]) + buf[w] = '.' + w++ + w += copy(buf[w:], a.d[a.dp:a.nd]) + + default: + // zeros fill space between digits and decimal point + w += copy(buf[w:], a.d[0:a.nd]) + w += digitZero(buf[w : w+a.dp-a.nd]) + } + return string(buf[0:w]) +} + +func digitZero(dst []byte) int { + for i := range dst { + dst[i] = '0' + } + return len(dst) +} + +// trim trailing zeros from number. +// (They are meaningless; the decimal point is tracked +// independent of the number of digits.) +func trim(a *decimal) { + for a.nd > 0 && a.d[a.nd-1] == '0' { + a.nd-- + } + if a.nd == 0 { + a.dp = 0 + } +} + +// Assign v to a. +func (a *decimal) Assign(v uint64) { + var buf [24]byte + + // Write reversed decimal in buf. + n := 0 + for v > 0 { + v1 := v / 10 + v -= 10 * v1 + buf[n] = byte(v + '0') + n++ + v = v1 + } + + // Reverse again to produce forward decimal in a.d. + a.nd = 0 + for n--; n >= 0; n-- { + a.d[a.nd] = buf[n] + a.nd++ + } + a.dp = a.nd + trim(a) +} + +// Maximum shift that we can do in one pass without overflow. +// A uint has 32 or 64 bits, and we have to be able to accommodate 9<<k. +const uintSize = 32 << (^uint(0) >> 63) +const maxShift = uintSize - 4 + +// Binary shift right (/ 2) by k bits. k <= maxShift to avoid overflow. +func rightShift(a *decimal, k uint) { + r := 0 // read pointer + w := 0 // write pointer + + // Pick up enough leading digits to cover first shift. + var n uint + for ; n>>k == 0; r++ { + if r >= a.nd { + if n == 0 { + // a == 0; shouldn't get here, but handle anyway. + a.nd = 0 + return + } + for n>>k == 0 { + n = n * 10 + r++ + } + break + } + c := uint(a.d[r]) + n = n*10 + c - '0' + } + a.dp -= r - 1 + + // Pick up a digit, put down a digit. + for ; r < a.nd; r++ { + c := uint(a.d[r]) + dig := n >> k + n -= dig << k + a.d[w] = byte(dig + '0') + w++ + n = n*10 + c - '0' + } + + // Put down extra digits. + for n > 0 { + dig := n >> k + n -= dig << k + if w < len(a.d) { + a.d[w] = byte(dig + '0') + w++ + } else if dig > 0 { + a.trunc = true + } + n = n * 10 + } + + a.nd = w + trim(a) +} + +// Cheat sheet for left shift: table indexed by shift count giving +// number of new digits that will be introduced by that shift. +// +// For example, leftcheats[4] = {2, "625"}. That means that +// if we are shifting by 4 (multiplying by 16), it will add 2 digits +// when the string prefix is "625" through "999", and one fewer digit +// if the string prefix is "000" through "624". +// +// Credit for this trick goes to Ken. + +type leftCheat struct { + delta int // number of new digits + cutoff string // minus one digit if original < a. +} + +var leftcheats = []leftCheat{ + // Leading digits of 1/2^i = 5^i. + // 5^23 is not an exact 64-bit floating point number, + // so have to use bc for the math. + // Go up to 60 to be large enough for 32bit and 64bit platforms. + /* + seq 60 | sed 's/^/5^/' | bc | + awk 'BEGIN{ print "\t{ 0, \"\" }," } + { + log2 = log(2)/log(10) + printf("\t{ %d, \"%s\" },\t// * %d\n", + int(log2*NR+1), $0, 2**NR) + }' + */ + {0, ""}, + {1, "5"}, // * 2 + {1, "25"}, // * 4 + {1, "125"}, // * 8 + {2, "625"}, // * 16 + {2, "3125"}, // * 32 + {2, "15625"}, // * 64 + {3, "78125"}, // * 128 + {3, "390625"}, // * 256 + {3, "1953125"}, // * 512 + {4, "9765625"}, // * 1024 + {4, "48828125"}, // * 2048 + {4, "244140625"}, // * 4096 + {4, "1220703125"}, // * 8192 + {5, "6103515625"}, // * 16384 + {5, "30517578125"}, // * 32768 + {5, "152587890625"}, // * 65536 + {6, "762939453125"}, // * 131072 + {6, "3814697265625"}, // * 262144 + {6, "19073486328125"}, // * 524288 + {7, "95367431640625"}, // * 1048576 + {7, "476837158203125"}, // * 2097152 + {7, "2384185791015625"}, // * 4194304 + {7, "11920928955078125"}, // * 8388608 + {8, "59604644775390625"}, // * 16777216 + {8, "298023223876953125"}, // * 33554432 + {8, "1490116119384765625"}, // * 67108864 + {9, "7450580596923828125"}, // * 134217728 + {9, "37252902984619140625"}, // * 268435456 + {9, "186264514923095703125"}, // * 536870912 + {10, "931322574615478515625"}, // * 1073741824 + {10, "4656612873077392578125"}, // * 2147483648 + {10, "23283064365386962890625"}, // * 4294967296 + {10, "116415321826934814453125"}, // * 8589934592 + {11, "582076609134674072265625"}, // * 17179869184 + {11, "2910383045673370361328125"}, // * 34359738368 + {11, "14551915228366851806640625"}, // * 68719476736 + {12, "72759576141834259033203125"}, // * 137438953472 + {12, "363797880709171295166015625"}, // * 274877906944 + {12, "1818989403545856475830078125"}, // * 549755813888 + {13, "9094947017729282379150390625"}, // * 1099511627776 + {13, "45474735088646411895751953125"}, // * 2199023255552 + {13, "227373675443232059478759765625"}, // * 4398046511104 + {13, "1136868377216160297393798828125"}, // * 8796093022208 + {14, "5684341886080801486968994140625"}, // * 17592186044416 + {14, "28421709430404007434844970703125"}, // * 35184372088832 + {14, "142108547152020037174224853515625"}, // * 70368744177664 + {15, "710542735760100185871124267578125"}, // * 140737488355328 + {15, "3552713678800500929355621337890625"}, // * 281474976710656 + {15, "17763568394002504646778106689453125"}, // * 562949953421312 + {16, "88817841970012523233890533447265625"}, // * 1125899906842624 + {16, "444089209850062616169452667236328125"}, // * 2251799813685248 + {16, "2220446049250313080847263336181640625"}, // * 4503599627370496 + {16, "11102230246251565404236316680908203125"}, // * 9007199254740992 + {17, "55511151231257827021181583404541015625"}, // * 18014398509481984 + {17, "277555756156289135105907917022705078125"}, // * 36028797018963968 + {17, "1387778780781445675529539585113525390625"}, // * 72057594037927936 + {18, "6938893903907228377647697925567626953125"}, // * 144115188075855872 + {18, "34694469519536141888238489627838134765625"}, // * 288230376151711744 + {18, "173472347597680709441192448139190673828125"}, // * 576460752303423488 + {19, "867361737988403547205962240695953369140625"}, // * 1152921504606846976 +} + +// Is the leading prefix of b lexicographically less than s? +func prefixIsLessThan(b []byte, s string) bool { + for i := 0; i < len(s); i++ { + if i >= len(b) { + return true + } + if b[i] != s[i] { + return b[i] < s[i] + } + } + return false +} + +// Binary shift left (* 2) by k bits. k <= maxShift to avoid overflow. +func leftShift(a *decimal, k uint) { + delta := leftcheats[k].delta + if prefixIsLessThan(a.d[0:a.nd], leftcheats[k].cutoff) { + delta-- + } + + r := a.nd // read index + w := a.nd + delta // write index + + // Pick up a digit, put down a digit. + var n uint + for r--; r >= 0; r-- { + n += (uint(a.d[r]) - '0') << k + quo := n / 10 + rem := n - 10*quo + w-- + if w < len(a.d) { + a.d[w] = byte(rem + '0') + } else if rem != 0 { + a.trunc = true + } + n = quo + } + + // Put down extra digits. + for n > 0 { + quo := n / 10 + rem := n - 10*quo + w-- + if w < len(a.d) { + a.d[w] = byte(rem + '0') + } else if rem != 0 { + a.trunc = true + } + n = quo + } + + a.nd += delta + if a.nd >= len(a.d) { + a.nd = len(a.d) + } + a.dp += delta + trim(a) +} + +// Binary shift left (k > 0) or right (k < 0). +func (a *decimal) Shift(k int) { + switch { + case a.nd == 0: + // nothing to do: a == 0 + case k > 0: + for k > maxShift { + leftShift(a, maxShift) + k -= maxShift + } + leftShift(a, uint(k)) + case k < 0: + for k < -maxShift { + rightShift(a, maxShift) + k += maxShift + } + rightShift(a, uint(-k)) + } +} + +// If we chop a at nd digits, should we round up? +func shouldRoundUp(a *decimal, nd int) bool { + if nd < 0 || nd >= a.nd { + return false + } + if a.d[nd] == '5' && nd+1 == a.nd { // exactly halfway - round to even + // if we truncated, a little higher than what's recorded - always round up + if a.trunc { + return true + } + return nd > 0 && (a.d[nd-1]-'0')%2 != 0 + } + // not halfway - digit tells all + return a.d[nd] >= '5' +} + +// Round a to nd digits (or fewer). +// If nd is zero, it means we're rounding +// just to the left of the digits, as in +// 0.09 -> 0.1. +func (a *decimal) Round(nd int) { + if nd < 0 || nd >= a.nd { + return + } + if shouldRoundUp(a, nd) { + a.RoundUp(nd) + } else { + a.RoundDown(nd) + } +} + +// Round a down to nd digits (or fewer). +func (a *decimal) RoundDown(nd int) { + if nd < 0 || nd >= a.nd { + return + } + a.nd = nd + trim(a) +} + +// Round a up to nd digits (or fewer). +func (a *decimal) RoundUp(nd int) { + if nd < 0 || nd >= a.nd { + return + } + + // round up + for i := nd - 1; i >= 0; i-- { + c := a.d[i] + if c < '9' { // can stop after this digit + a.d[i]++ + a.nd = i + 1 + return + } + } + + // Number is all 9s. + // Change to single 1 with adjusted decimal point. + a.d[0] = '1' + a.nd = 1 + a.dp++ +} + +// Extract integer part, rounded appropriately. +// No guarantees about overflow. +func (a *decimal) RoundedInteger() uint64 { + if a.dp > 20 { + return 0xFFFFFFFFFFFFFFFF + } + var i int + n := uint64(0) + for i = 0; i < a.dp && i < a.nd; i++ { + n = n*10 + uint64(a.d[i]-'0') + } + for ; i < a.dp; i++ { + n *= 10 + } + if shouldRoundUp(a, a.dp) { + n++ + } + return n +} diff --git a/vendor/golang.org/x/text/internal/number/extfloat.go b/vendor/golang.org/x/text/internal/number/extfloat.go new file mode 100644 index 0000000..97138e2 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/extfloat.go @@ -0,0 +1,671 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO: use build tags once a low-level public API has been established in +// package strconv. + +package number + +// An extFloat represents an extended floating-point number, with more +// precision than a float64. It does not try to save bits: the +// number represented by the structure is mant*(2^exp), with a negative +// sign if neg is true. +type extFloat struct { + mant uint64 + exp int + neg bool +} + +// Powers of ten taken from double-conversion library. +// http://code.google.com/p/double-conversion/ +const ( + firstPowerOfTen = -348 + stepPowerOfTen = 8 +) + +var smallPowersOfTen = [...]extFloat{ + {1 << 63, -63, false}, // 1 + {0xa << 60, -60, false}, // 1e1 + {0x64 << 57, -57, false}, // 1e2 + {0x3e8 << 54, -54, false}, // 1e3 + {0x2710 << 50, -50, false}, // 1e4 + {0x186a0 << 47, -47, false}, // 1e5 + {0xf4240 << 44, -44, false}, // 1e6 + {0x989680 << 40, -40, false}, // 1e7 +} + +var powersOfTen = [...]extFloat{ + {0xfa8fd5a0081c0288, -1220, false}, // 10^-348 + {0xbaaee17fa23ebf76, -1193, false}, // 10^-340 + {0x8b16fb203055ac76, -1166, false}, // 10^-332 + {0xcf42894a5dce35ea, -1140, false}, // 10^-324 + {0x9a6bb0aa55653b2d, -1113, false}, // 10^-316 + {0xe61acf033d1a45df, -1087, false}, // 10^-308 + {0xab70fe17c79ac6ca, -1060, false}, // 10^-300 + {0xff77b1fcbebcdc4f, -1034, false}, // 10^-292 + {0xbe5691ef416bd60c, -1007, false}, // 10^-284 + {0x8dd01fad907ffc3c, -980, false}, // 10^-276 + {0xd3515c2831559a83, -954, false}, // 10^-268 + {0x9d71ac8fada6c9b5, -927, false}, // 10^-260 + {0xea9c227723ee8bcb, -901, false}, // 10^-252 + {0xaecc49914078536d, -874, false}, // 10^-244 + {0x823c12795db6ce57, -847, false}, // 10^-236 + {0xc21094364dfb5637, -821, false}, // 10^-228 + {0x9096ea6f3848984f, -794, false}, // 10^-220 + {0xd77485cb25823ac7, -768, false}, // 10^-212 + {0xa086cfcd97bf97f4, -741, false}, // 10^-204 + {0xef340a98172aace5, -715, false}, // 10^-196 + {0xb23867fb2a35b28e, -688, false}, // 10^-188 + {0x84c8d4dfd2c63f3b, -661, false}, // 10^-180 + {0xc5dd44271ad3cdba, -635, false}, // 10^-172 + {0x936b9fcebb25c996, -608, false}, // 10^-164 + {0xdbac6c247d62a584, -582, false}, // 10^-156 + {0xa3ab66580d5fdaf6, -555, false}, // 10^-148 + {0xf3e2f893dec3f126, -529, false}, // 10^-140 + {0xb5b5ada8aaff80b8, -502, false}, // 10^-132 + {0x87625f056c7c4a8b, -475, false}, // 10^-124 + {0xc9bcff6034c13053, -449, false}, // 10^-116 + {0x964e858c91ba2655, -422, false}, // 10^-108 + {0xdff9772470297ebd, -396, false}, // 10^-100 + {0xa6dfbd9fb8e5b88f, -369, false}, // 10^-92 + {0xf8a95fcf88747d94, -343, false}, // 10^-84 + {0xb94470938fa89bcf, -316, false}, // 10^-76 + {0x8a08f0f8bf0f156b, -289, false}, // 10^-68 + {0xcdb02555653131b6, -263, false}, // 10^-60 + {0x993fe2c6d07b7fac, -236, false}, // 10^-52 + {0xe45c10c42a2b3b06, -210, false}, // 10^-44 + {0xaa242499697392d3, -183, false}, // 10^-36 + {0xfd87b5f28300ca0e, -157, false}, // 10^-28 + {0xbce5086492111aeb, -130, false}, // 10^-20 + {0x8cbccc096f5088cc, -103, false}, // 10^-12 + {0xd1b71758e219652c, -77, false}, // 10^-4 + {0x9c40000000000000, -50, false}, // 10^4 + {0xe8d4a51000000000, -24, false}, // 10^12 + {0xad78ebc5ac620000, 3, false}, // 10^20 + {0x813f3978f8940984, 30, false}, // 10^28 + {0xc097ce7bc90715b3, 56, false}, // 10^36 + {0x8f7e32ce7bea5c70, 83, false}, // 10^44 + {0xd5d238a4abe98068, 109, false}, // 10^52 + {0x9f4f2726179a2245, 136, false}, // 10^60 + {0xed63a231d4c4fb27, 162, false}, // 10^68 + {0xb0de65388cc8ada8, 189, false}, // 10^76 + {0x83c7088e1aab65db, 216, false}, // 10^84 + {0xc45d1df942711d9a, 242, false}, // 10^92 + {0x924d692ca61be758, 269, false}, // 10^100 + {0xda01ee641a708dea, 295, false}, // 10^108 + {0xa26da3999aef774a, 322, false}, // 10^116 + {0xf209787bb47d6b85, 348, false}, // 10^124 + {0xb454e4a179dd1877, 375, false}, // 10^132 + {0x865b86925b9bc5c2, 402, false}, // 10^140 + {0xc83553c5c8965d3d, 428, false}, // 10^148 + {0x952ab45cfa97a0b3, 455, false}, // 10^156 + {0xde469fbd99a05fe3, 481, false}, // 10^164 + {0xa59bc234db398c25, 508, false}, // 10^172 + {0xf6c69a72a3989f5c, 534, false}, // 10^180 + {0xb7dcbf5354e9bece, 561, false}, // 10^188 + {0x88fcf317f22241e2, 588, false}, // 10^196 + {0xcc20ce9bd35c78a5, 614, false}, // 10^204 + {0x98165af37b2153df, 641, false}, // 10^212 + {0xe2a0b5dc971f303a, 667, false}, // 10^220 + {0xa8d9d1535ce3b396, 694, false}, // 10^228 + {0xfb9b7cd9a4a7443c, 720, false}, // 10^236 + {0xbb764c4ca7a44410, 747, false}, // 10^244 + {0x8bab8eefb6409c1a, 774, false}, // 10^252 + {0xd01fef10a657842c, 800, false}, // 10^260 + {0x9b10a4e5e9913129, 827, false}, // 10^268 + {0xe7109bfba19c0c9d, 853, false}, // 10^276 + {0xac2820d9623bf429, 880, false}, // 10^284 + {0x80444b5e7aa7cf85, 907, false}, // 10^292 + {0xbf21e44003acdd2d, 933, false}, // 10^300 + {0x8e679c2f5e44ff8f, 960, false}, // 10^308 + {0xd433179d9c8cb841, 986, false}, // 10^316 + {0x9e19db92b4e31ba9, 1013, false}, // 10^324 + {0xeb96bf6ebadf77d9, 1039, false}, // 10^332 + {0xaf87023b9bf0ee6b, 1066, false}, // 10^340 +} + +// floatBits returns the bits of the float64 that best approximates +// the extFloat passed as receiver. Overflow is set to true if +// the resulting float64 is ±Inf. +func (f *extFloat) floatBits(flt *floatInfo) (bits uint64, overflow bool) { + f.Normalize() + + exp := f.exp + 63 + + // Exponent too small. + if exp < flt.bias+1 { + n := flt.bias + 1 - exp + f.mant >>= uint(n) + exp += n + } + + // Extract 1+flt.mantbits bits from the 64-bit mantissa. + mant := f.mant >> (63 - flt.mantbits) + if f.mant&(1<<(62-flt.mantbits)) != 0 { + // Round up. + mant += 1 + } + + // Rounding might have added a bit; shift down. + if mant == 2<<flt.mantbits { + mant >>= 1 + exp++ + } + + // Infinities. + if exp-flt.bias >= 1<<flt.expbits-1 { + // ±Inf + mant = 0 + exp = 1<<flt.expbits - 1 + flt.bias + overflow = true + } else if mant&(1<<flt.mantbits) == 0 { + // Denormalized? + exp = flt.bias + } + // Assemble bits. + bits = mant & (uint64(1)<<flt.mantbits - 1) + bits |= uint64((exp-flt.bias)&(1<<flt.expbits-1)) << flt.mantbits + if f.neg { + bits |= 1 << (flt.mantbits + flt.expbits) + } + return +} + +// AssignComputeBounds sets f to the floating point value +// defined by mant, exp and precision given by flt. It returns +// lower, upper such that any number in the closed interval +// [lower, upper] is converted back to the same floating point number. +func (f *extFloat) AssignComputeBounds(mant uint64, exp int, neg bool, flt *floatInfo) (lower, upper extFloat) { + f.mant = mant + f.exp = exp - int(flt.mantbits) + f.neg = neg + if f.exp <= 0 && mant == (mant>>uint(-f.exp))<<uint(-f.exp) { + // An exact integer + f.mant >>= uint(-f.exp) + f.exp = 0 + return *f, *f + } + expBiased := exp - flt.bias + + upper = extFloat{mant: 2*f.mant + 1, exp: f.exp - 1, neg: f.neg} + if mant != 1<<flt.mantbits || expBiased == 1 { + lower = extFloat{mant: 2*f.mant - 1, exp: f.exp - 1, neg: f.neg} + } else { + lower = extFloat{mant: 4*f.mant - 1, exp: f.exp - 2, neg: f.neg} + } + return +} + +// Normalize normalizes f so that the highest bit of the mantissa is +// set, and returns the number by which the mantissa was left-shifted. +func (f *extFloat) Normalize() (shift uint) { + mant, exp := f.mant, f.exp + if mant == 0 { + return 0 + } + if mant>>(64-32) == 0 { + mant <<= 32 + exp -= 32 + } + if mant>>(64-16) == 0 { + mant <<= 16 + exp -= 16 + } + if mant>>(64-8) == 0 { + mant <<= 8 + exp -= 8 + } + if mant>>(64-4) == 0 { + mant <<= 4 + exp -= 4 + } + if mant>>(64-2) == 0 { + mant <<= 2 + exp -= 2 + } + if mant>>(64-1) == 0 { + mant <<= 1 + exp -= 1 + } + shift = uint(f.exp - exp) + f.mant, f.exp = mant, exp + return +} + +// Multiply sets f to the product f*g: the result is correctly rounded, +// but not normalized. +func (f *extFloat) Multiply(g extFloat) { + fhi, flo := f.mant>>32, uint64(uint32(f.mant)) + ghi, glo := g.mant>>32, uint64(uint32(g.mant)) + + // Cross products. + cross1 := fhi * glo + cross2 := flo * ghi + + // f.mant*g.mant is fhi*ghi << 64 + (cross1+cross2) << 32 + flo*glo + f.mant = fhi*ghi + (cross1 >> 32) + (cross2 >> 32) + rem := uint64(uint32(cross1)) + uint64(uint32(cross2)) + ((flo * glo) >> 32) + // Round up. + rem += (1 << 31) + + f.mant += (rem >> 32) + f.exp = f.exp + g.exp + 64 +} + +var uint64pow10 = [...]uint64{ + 1, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, + 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, +} + +// AssignDecimal sets f to an approximate value mantissa*10^exp. It +// reports whether the value represented by f is guaranteed to be the +// best approximation of d after being rounded to a float64 or +// float32 depending on flt. +func (f *extFloat) AssignDecimal(mantissa uint64, exp10 int, neg bool, trunc bool, flt *floatInfo) (ok bool) { + const uint64digits = 19 + const errorscale = 8 + errors := 0 // An upper bound for error, computed in errorscale*ulp. + if trunc { + // the decimal number was truncated. + errors += errorscale / 2 + } + + f.mant = mantissa + f.exp = 0 + f.neg = neg + + // Multiply by powers of ten. + i := (exp10 - firstPowerOfTen) / stepPowerOfTen + if exp10 < firstPowerOfTen || i >= len(powersOfTen) { + return false + } + adjExp := (exp10 - firstPowerOfTen) % stepPowerOfTen + + // We multiply by exp%step + if adjExp < uint64digits && mantissa < uint64pow10[uint64digits-adjExp] { + // We can multiply the mantissa exactly. + f.mant *= uint64pow10[adjExp] + f.Normalize() + } else { + f.Normalize() + f.Multiply(smallPowersOfTen[adjExp]) + errors += errorscale / 2 + } + + // We multiply by 10 to the exp - exp%step. + f.Multiply(powersOfTen[i]) + if errors > 0 { + errors += 1 + } + errors += errorscale / 2 + + // Normalize + shift := f.Normalize() + errors <<= shift + + // Now f is a good approximation of the decimal. + // Check whether the error is too large: that is, if the mantissa + // is perturbated by the error, the resulting float64 will change. + // The 64 bits mantissa is 1 + 52 bits for float64 + 11 extra bits. + // + // In many cases the approximation will be good enough. + denormalExp := flt.bias - 63 + var extrabits uint + if f.exp <= denormalExp { + // f.mant * 2^f.exp is smaller than 2^(flt.bias+1). + extrabits = 63 - flt.mantbits + 1 + uint(denormalExp-f.exp) + } else { + extrabits = 63 - flt.mantbits + } + + halfway := uint64(1) << (extrabits - 1) + mant_extra := f.mant & (1<<extrabits - 1) + + // Do a signed comparison here! If the error estimate could make + // the mantissa round differently for the conversion to double, + // then we can't give a definite answer. + if int64(halfway)-int64(errors) < int64(mant_extra) && + int64(mant_extra) < int64(halfway)+int64(errors) { + return false + } + return true +} + +// Frexp10 is an analogue of math.Frexp for decimal powers. It scales +// f by an approximate power of ten 10^-exp, and returns exp10, so +// that f*10^exp10 has the same value as the old f, up to an ulp, +// as well as the index of 10^-exp in the powersOfTen table. +func (f *extFloat) frexp10() (exp10, index int) { + // The constants expMin and expMax constrain the final value of the + // binary exponent of f. We want a small integral part in the result + // because finding digits of an integer requires divisions, whereas + // digits of the fractional part can be found by repeatedly multiplying + // by 10. + const expMin = -60 + const expMax = -32 + // Find power of ten such that x * 10^n has a binary exponent + // between expMin and expMax. + approxExp10 := ((expMin+expMax)/2 - f.exp) * 28 / 93 // log(10)/log(2) is close to 93/28. + i := (approxExp10 - firstPowerOfTen) / stepPowerOfTen +Loop: + for { + exp := f.exp + powersOfTen[i].exp + 64 + switch { + case exp < expMin: + i++ + case exp > expMax: + i-- + default: + break Loop + } + } + // Apply the desired decimal shift on f. It will have exponent + // in the desired range. This is multiplication by 10^-exp10. + f.Multiply(powersOfTen[i]) + + return -(firstPowerOfTen + i*stepPowerOfTen), i +} + +// frexp10Many applies a common shift by a power of ten to a, b, c. +func frexp10Many(a, b, c *extFloat) (exp10 int) { + exp10, i := c.frexp10() + a.Multiply(powersOfTen[i]) + b.Multiply(powersOfTen[i]) + return +} + +// FixedDecimal stores in d the first n significant digits +// of the decimal representation of f. It returns false +// if it cannot be sure of the answer. +func (f *extFloat) FixedDecimal(d *decimalSlice, n int) bool { + if f.mant == 0 { + d.nd = 0 + d.dp = 0 + d.neg = f.neg + return true + } + if n == 0 { + panic("strconv: internal error: extFloat.FixedDecimal called with n == 0") + } + // Multiply by an appropriate power of ten to have a reasonable + // number to process. + f.Normalize() + exp10, _ := f.frexp10() + + shift := uint(-f.exp) + integer := uint32(f.mant >> shift) + fraction := f.mant - (uint64(integer) << shift) + ε := uint64(1) // ε is the uncertainty we have on the mantissa of f. + + // Write exactly n digits to d. + needed := n // how many digits are left to write. + integerDigits := 0 // the number of decimal digits of integer. + pow10 := uint64(1) // the power of ten by which f was scaled. + for i, pow := 0, uint64(1); i < 20; i++ { + if pow > uint64(integer) { + integerDigits = i + break + } + pow *= 10 + } + rest := integer + if integerDigits > needed { + // the integral part is already large, trim the last digits. + pow10 = uint64pow10[integerDigits-needed] + integer /= uint32(pow10) + rest -= integer * uint32(pow10) + } else { + rest = 0 + } + + // Write the digits of integer: the digits of rest are omitted. + var buf [32]byte + pos := len(buf) + for v := integer; v > 0; { + v1 := v / 10 + v -= 10 * v1 + pos-- + buf[pos] = byte(v + '0') + v = v1 + } + for i := pos; i < len(buf); i++ { + d.d[i-pos] = buf[i] + } + nd := len(buf) - pos + d.nd = nd + d.dp = integerDigits + exp10 + needed -= nd + + if needed > 0 { + if rest != 0 || pow10 != 1 { + panic("strconv: internal error, rest != 0 but needed > 0") + } + // Emit digits for the fractional part. Each time, 10*fraction + // fits in a uint64 without overflow. + for needed > 0 { + fraction *= 10 + ε *= 10 // the uncertainty scales as we multiply by ten. + if 2*ε > 1<<shift { + // the error is so large it could modify which digit to write, abort. + return false + } + digit := fraction >> shift + d.d[nd] = byte(digit + '0') + fraction -= digit << shift + nd++ + needed-- + } + d.nd = nd + } + + // We have written a truncation of f (a numerator / 10^d.dp). The remaining part + // can be interpreted as a small number (< 1) to be added to the last digit of the + // numerator. + // + // If rest > 0, the amount is: + // (rest<<shift | fraction) / (pow10 << shift) + // fraction being known with a ±ε uncertainty. + // The fact that n > 0 guarantees that pow10 << shift does not overflow a uint64. + // + // If rest = 0, pow10 == 1 and the amount is + // fraction / (1 << shift) + // fraction being known with a ±ε uncertainty. + // + // We pass this information to the rounding routine for adjustment. + + ok := adjustLastDigitFixed(d, uint64(rest)<<shift|fraction, pow10, shift, ε) + if !ok { + return false + } + // Trim trailing zeros. + for i := d.nd - 1; i >= 0; i-- { + if d.d[i] != '0' { + d.nd = i + 1 + break + } + } + return true +} + +// adjustLastDigitFixed assumes d contains the representation of the integral part +// of some number, whose fractional part is num / (den << shift). The numerator +// num is only known up to an uncertainty of size ε, assumed to be less than +// (den << shift)/2. +// +// It will increase the last digit by one to account for correct rounding, typically +// when the fractional part is greater than 1/2, and will return false if ε is such +// that no correct answer can be given. +func adjustLastDigitFixed(d *decimalSlice, num, den uint64, shift uint, ε uint64) bool { + if num > den<<shift { + panic("strconv: num > den<<shift in adjustLastDigitFixed") + } + if 2*ε > den<<shift { + panic("strconv: ε > (den<<shift)/2") + } + if 2*(num+ε) < den<<shift { + return true + } + if 2*(num-ε) > den<<shift { + // increment d by 1. + i := d.nd - 1 + for ; i >= 0; i-- { + if d.d[i] == '9' { + d.nd-- + } else { + break + } + } + if i < 0 { + d.d[0] = '1' + d.nd = 1 + d.dp++ + } else { + d.d[i]++ + } + return true + } + return false +} + +// ShortestDecimal stores in d the shortest decimal representation of f +// which belongs to the open interval (lower, upper), where f is supposed +// to lie. It returns false whenever the result is unsure. The implementation +// uses the Grisu3 algorithm. +func (f *extFloat) ShortestDecimal(d *decimalSlice, lower, upper *extFloat) bool { + if f.mant == 0 { + d.nd = 0 + d.dp = 0 + d.neg = f.neg + return true + } + if f.exp == 0 && *lower == *f && *lower == *upper { + // an exact integer. + var buf [24]byte + n := len(buf) - 1 + for v := f.mant; v > 0; { + v1 := v / 10 + v -= 10 * v1 + buf[n] = byte(v + '0') + n-- + v = v1 + } + nd := len(buf) - n - 1 + for i := 0; i < nd; i++ { + d.d[i] = buf[n+1+i] + } + d.nd, d.dp = nd, nd + for d.nd > 0 && d.d[d.nd-1] == '0' { + d.nd-- + } + if d.nd == 0 { + d.dp = 0 + } + d.neg = f.neg + return true + } + upper.Normalize() + // Uniformize exponents. + if f.exp > upper.exp { + f.mant <<= uint(f.exp - upper.exp) + f.exp = upper.exp + } + if lower.exp > upper.exp { + lower.mant <<= uint(lower.exp - upper.exp) + lower.exp = upper.exp + } + + exp10 := frexp10Many(lower, f, upper) + // Take a safety margin due to rounding in frexp10Many, but we lose precision. + upper.mant++ + lower.mant-- + + // The shortest representation of f is either rounded up or down, but + // in any case, it is a truncation of upper. + shift := uint(-upper.exp) + integer := uint32(upper.mant >> shift) + fraction := upper.mant - (uint64(integer) << shift) + + // How far we can go down from upper until the result is wrong. + allowance := upper.mant - lower.mant + // How far we should go to get a very precise result. + targetDiff := upper.mant - f.mant + + // Count integral digits: there are at most 10. + var integerDigits int + for i, pow := 0, uint64(1); i < 20; i++ { + if pow > uint64(integer) { + integerDigits = i + break + } + pow *= 10 + } + for i := 0; i < integerDigits; i++ { + pow := uint64pow10[integerDigits-i-1] + digit := integer / uint32(pow) + d.d[i] = byte(digit + '0') + integer -= digit * uint32(pow) + // evaluate whether we should stop. + if currentDiff := uint64(integer)<<shift + fraction; currentDiff < allowance { + d.nd = i + 1 + d.dp = integerDigits + exp10 + d.neg = f.neg + // Sometimes allowance is so large the last digit might need to be + // decremented to get closer to f. + return adjustLastDigit(d, currentDiff, targetDiff, allowance, pow<<shift, 2) + } + } + d.nd = integerDigits + d.dp = d.nd + exp10 + d.neg = f.neg + + // Compute digits of the fractional part. At each step fraction does not + // overflow. The choice of minExp implies that fraction is less than 2^60. + var digit int + multiplier := uint64(1) + for { + fraction *= 10 + multiplier *= 10 + digit = int(fraction >> shift) + d.d[d.nd] = byte(digit + '0') + d.nd++ + fraction -= uint64(digit) << shift + if fraction < allowance*multiplier { + // We are in the admissible range. Note that if allowance is about to + // overflow, that is, allowance > 2^64/10, the condition is automatically + // true due to the limited range of fraction. + return adjustLastDigit(d, + fraction, targetDiff*multiplier, allowance*multiplier, + 1<<shift, multiplier*2) + } + } +} + +// adjustLastDigit modifies d = x-currentDiff*ε, to get closest to +// d = x-targetDiff*ε, without becoming smaller than x-maxDiff*ε. +// It assumes that a decimal digit is worth ulpDecimal*ε, and that +// all data is known with a error estimate of ulpBinary*ε. +func adjustLastDigit(d *decimalSlice, currentDiff, targetDiff, maxDiff, ulpDecimal, ulpBinary uint64) bool { + if ulpDecimal < 2*ulpBinary { + // Approximation is too wide. + return false + } + for currentDiff+ulpDecimal/2+ulpBinary < targetDiff { + d.d[d.nd-1]-- + currentDiff += ulpDecimal + } + if currentDiff+ulpDecimal <= targetDiff+ulpDecimal/2+ulpBinary { + // we have two choices, and don't know what to do. + return false + } + if currentDiff < ulpBinary || currentDiff > maxDiff-ulpBinary { + // we went too far + return false + } + if d.nd == 1 && d.d[0] == '0' { + // the number has actually reached zero. + d.nd = 0 + d.dp = 0 + } + return true +} diff --git a/vendor/golang.org/x/text/internal/number/ftoa.go b/vendor/golang.org/x/text/internal/number/ftoa.go new file mode 100644 index 0000000..073182e --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/ftoa.go @@ -0,0 +1,448 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO: use build tags once a low-level public API has been established in +// package strconv. + +// Binary to decimal floating point conversion. +// Algorithm: +// 1) store mantissa in multiprecision decimal +// 2) shift decimal by exponent +// 3) read digits out & format + +package number + +import "math" + +var optimize = true + +// TODO: move elsewhere? +type floatInfo struct { + mantbits uint + expbits uint + bias int +} + +var float32info = floatInfo{23, 8, -127} +var float64info = floatInfo{52, 11, -1023} + +// genericFtoa converts the floating-point number f to a string, +// according to the format fmt and precision prec. It rounds the +// result assuming that the original was obtained from a floating-point +// value of bitSize bits (32 for float32, 64 for float64). +// +// The format fmt is one of +// 'b' (-ddddp±ddd, a binary exponent), +// 'e' (-d.dddde±dd, a decimal exponent), +// 'E' (-d.ddddE±dd, a decimal exponent), +// 'f' (-ddd.dddd, no exponent), +// 'g' ('e' for large exponents, 'f' otherwise), or +// 'G' ('E' for large exponents, 'f' otherwise). +// +// The precision prec controls the number of digits +// (excluding the exponent) printed by the 'e', 'E', 'f', 'g', and 'G' formats. +// For 'e', 'E', and 'f' it is the number of digits after the decimal point. +// For 'g' and 'G' it is the total number of digits. +// The special precision -1 uses the smallest number of digits +// necessary such that ParseFloat will return f exactly. +func genericFtoa(dst []byte, val float64, fmt byte, prec, bitSize int) []byte { + var bits uint64 + var flt *floatInfo + switch bitSize { + case 32: + bits = uint64(math.Float32bits(float32(val))) + flt = &float32info + case 64: + bits = math.Float64bits(val) + flt = &float64info + default: + panic("strconv: illegal AppendFloat/FormatFloat bitSize") + } + + neg := bits>>(flt.expbits+flt.mantbits) != 0 + exp := int(bits>>flt.mantbits) & (1<<flt.expbits - 1) + mant := bits & (uint64(1)<<flt.mantbits - 1) + + switch exp { + case 1<<flt.expbits - 1: + // Inf, NaN + var s string + switch { + case mant != 0: + s = "NaN" + case neg: + s = "-Inf" + default: + s = "+Inf" + } + return append(dst, s...) + + case 0: + // denormalized + exp++ + + default: + // add implicit top bit + mant |= uint64(1) << flt.mantbits + } + exp += flt.bias + + // Pick off easy binary format. + if fmt == 'b' { + return fmtB(dst, neg, mant, exp, flt) + } + + if !optimize { + return bigFtoa(dst, prec, fmt, neg, mant, exp, flt) + } + + var digs decimalSlice + ok := false + // Negative precision means "only as much as needed to be exact." + shortest := prec < 0 + if shortest { + // Try Grisu3 algorithm. + f := new(extFloat) + lower, upper := f.AssignComputeBounds(mant, exp, neg, flt) + var buf [32]byte + digs.d = buf[:] + ok = f.ShortestDecimal(&digs, &lower, &upper) + if !ok { + return bigFtoa(dst, prec, fmt, neg, mant, exp, flt) + } + // Precision for shortest representation mode. + switch fmt { + case 'e', 'E': + prec = max(digs.nd-1, 0) + case 'f': + prec = max(digs.nd-digs.dp, 0) + case 'g', 'G': + prec = digs.nd + } + } else if fmt != 'f' { + // Fixed number of digits. + digits := prec + switch fmt { + case 'e', 'E': + digits++ + case 'g', 'G': + if prec == 0 { + prec = 1 + } + digits = prec + } + if digits <= 15 { + // try fast algorithm when the number of digits is reasonable. + var buf [24]byte + digs.d = buf[:] + f := extFloat{mant, exp - int(flt.mantbits), neg} + ok = f.FixedDecimal(&digs, digits) + } + } + if !ok { + return bigFtoa(dst, prec, fmt, neg, mant, exp, flt) + } + return formatDigits(dst, shortest, neg, digs, prec, fmt) +} + +// bigFtoa uses multiprecision computations to format a float. +func bigFtoa(dst []byte, prec int, fmt byte, neg bool, mant uint64, exp int, flt *floatInfo) []byte { + d := new(decimal) + d.Assign(mant) + d.Shift(exp - int(flt.mantbits)) + var digs decimalSlice + shortest := prec < 0 + if shortest { + roundShortest(d, mant, exp, flt) + digs = decimalSlice{d: d.d[:], nd: d.nd, dp: d.dp} + // Precision for shortest representation mode. + switch fmt { + case 'e', 'E': + prec = digs.nd - 1 + case 'f': + prec = max(digs.nd-digs.dp, 0) + case 'g', 'G': + prec = digs.nd + } + } else { + // Round appropriately. + switch fmt { + case 'e', 'E': + d.Round(prec + 1) + case 'f': + d.Round(d.dp + prec) + case 'g', 'G': + if prec == 0 { + prec = 1 + } + d.Round(prec) + } + digs = decimalSlice{d: d.d[:], nd: d.nd, dp: d.dp} + } + return formatDigits(dst, shortest, neg, digs, prec, fmt) +} + +func formatDigits(dst []byte, shortest bool, neg bool, digs decimalSlice, prec int, fmt byte) []byte { + switch fmt { + case 'e', 'E': + return fmtE(dst, neg, digs, prec, fmt) + case 'f': + return fmtF(dst, neg, digs, prec) + case 'g', 'G': + // trailing fractional zeros in 'e' form will be trimmed. + eprec := prec + if eprec > digs.nd && digs.nd >= digs.dp { + eprec = digs.nd + } + // %e is used if the exponent from the conversion + // is less than -4 or greater than or equal to the precision. + // if precision was the shortest possible, use precision 6 for this decision. + if shortest { + eprec = 6 + } + exp := digs.dp - 1 + if exp < -4 || exp >= eprec { + if prec > digs.nd { + prec = digs.nd + } + return fmtE(dst, neg, digs, prec-1, fmt+'e'-'g') + } + if prec > digs.dp { + prec = digs.nd + } + return fmtF(dst, neg, digs, max(prec-digs.dp, 0)) + } + + // unknown format + return append(dst, '%', fmt) +} + +// roundShortest rounds d (= mant * 2^exp) to the shortest number of digits +// that will let the original floating point value be precisely reconstructed. +func roundShortest(d *decimal, mant uint64, exp int, flt *floatInfo) { + // If mantissa is zero, the number is zero; stop now. + if mant == 0 { + d.nd = 0 + return + } + + // Compute upper and lower such that any decimal number + // between upper and lower (possibly inclusive) + // will round to the original floating point number. + + // We may see at once that the number is already shortest. + // + // Suppose d is not denormal, so that 2^exp <= d < 10^dp. + // The closest shorter number is at least 10^(dp-nd) away. + // The lower/upper bounds computed below are at distance + // at most 2^(exp-mantbits). + // + // So the number is already shortest if 10^(dp-nd) > 2^(exp-mantbits), + // or equivalently log2(10)*(dp-nd) > exp-mantbits. + // It is true if 332/100*(dp-nd) >= exp-mantbits (log2(10) > 3.32). + minexp := flt.bias + 1 // minimum possible exponent + if exp > minexp && 332*(d.dp-d.nd) >= 100*(exp-int(flt.mantbits)) { + // The number is already shortest. + return + } + + // d = mant << (exp - mantbits) + // Next highest floating point number is mant+1 << exp-mantbits. + // Our upper bound is halfway between, mant*2+1 << exp-mantbits-1. + upper := new(decimal) + upper.Assign(mant*2 + 1) + upper.Shift(exp - int(flt.mantbits) - 1) + + // d = mant << (exp - mantbits) + // Next lowest floating point number is mant-1 << exp-mantbits, + // unless mant-1 drops the significant bit and exp is not the minimum exp, + // in which case the next lowest is mant*2-1 << exp-mantbits-1. + // Either way, call it mantlo << explo-mantbits. + // Our lower bound is halfway between, mantlo*2+1 << explo-mantbits-1. + var mantlo uint64 + var explo int + if mant > 1<<flt.mantbits || exp == minexp { + mantlo = mant - 1 + explo = exp + } else { + mantlo = mant*2 - 1 + explo = exp - 1 + } + lower := new(decimal) + lower.Assign(mantlo*2 + 1) + lower.Shift(explo - int(flt.mantbits) - 1) + + // The upper and lower bounds are possible outputs only if + // the original mantissa is even, so that IEEE round-to-even + // would round to the original mantissa and not the neighbors. + inclusive := mant%2 == 0 + + // Now we can figure out the minimum number of digits required. + // Walk along until d has distinguished itself from upper and lower. + for i := 0; i < d.nd; i++ { + l := byte('0') // lower digit + if i < lower.nd { + l = lower.d[i] + } + m := d.d[i] // middle digit + u := byte('0') // upper digit + if i < upper.nd { + u = upper.d[i] + } + + // Okay to round down (truncate) if lower has a different digit + // or if lower is inclusive and is exactly the result of rounding + // down (i.e., and we have reached the final digit of lower). + okdown := l != m || inclusive && i+1 == lower.nd + + // Okay to round up if upper has a different digit and either upper + // is inclusive or upper is bigger than the result of rounding up. + okup := m != u && (inclusive || m+1 < u || i+1 < upper.nd) + + // If it's okay to do either, then round to the nearest one. + // If it's okay to do only one, do it. + switch { + case okdown && okup: + d.Round(i + 1) + return + case okdown: + d.RoundDown(i + 1) + return + case okup: + d.RoundUp(i + 1) + return + } + } +} + +type decimalSlice struct { + d []byte + nd, dp int + neg bool +} + +// %e: -d.ddddde±dd +func fmtE(dst []byte, neg bool, d decimalSlice, prec int, fmt byte) []byte { + // sign + if neg { + dst = append(dst, '-') + } + + // first digit + ch := byte('0') + if d.nd != 0 { + ch = d.d[0] + } + dst = append(dst, ch) + + // .moredigits + if prec > 0 { + dst = append(dst, '.') + i := 1 + m := min(d.nd, prec+1) + if i < m { + dst = append(dst, d.d[i:m]...) + i = m + } + for ; i <= prec; i++ { + dst = append(dst, '0') + } + } + + // e± + dst = append(dst, fmt) + exp := d.dp - 1 + if d.nd == 0 { // special case: 0 has exponent 0 + exp = 0 + } + if exp < 0 { + ch = '-' + exp = -exp + } else { + ch = '+' + } + dst = append(dst, ch) + + // dd or ddd + switch { + case exp < 10: + dst = append(dst, '0', byte(exp)+'0') + case exp < 100: + dst = append(dst, byte(exp/10)+'0', byte(exp%10)+'0') + default: + dst = append(dst, byte(exp/100)+'0', byte(exp/10)%10+'0', byte(exp%10)+'0') + } + + return dst +} + +// %f: -ddddddd.ddddd +func fmtF(dst []byte, neg bool, d decimalSlice, prec int) []byte { + // sign + if neg { + dst = append(dst, '-') + } + + // integer, padded with zeros as needed. + if d.dp > 0 { + m := min(d.nd, d.dp) + dst = append(dst, d.d[:m]...) + for ; m < d.dp; m++ { + dst = append(dst, '0') + } + } else { + dst = append(dst, '0') + } + + // fraction + if prec > 0 { + dst = append(dst, '.') + for i := 0; i < prec; i++ { + ch := byte('0') + if j := d.dp + i; 0 <= j && j < d.nd { + ch = d.d[j] + } + dst = append(dst, ch) + } + } + + return dst +} + +// %b: -ddddddddp±ddd +func fmtB(dst []byte, neg bool, mant uint64, exp int, flt *floatInfo) []byte { + // sign + if neg { + dst = append(dst, '-') + } + + // mantissa + dst, _ = formatBits(dst, mant, 10, false, true) + + // p + dst = append(dst, 'p') + + // ±exponent + exp -= int(flt.mantbits) + if exp >= 0 { + dst = append(dst, '+') + } + dst, _ = formatBits(dst, uint64(exp), 10, exp < 0, true) + + return dst +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} diff --git a/vendor/golang.org/x/text/internal/number/gen.go b/vendor/golang.org/x/text/internal/number/gen.go new file mode 100644 index 0000000..0d5f592 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/gen.go @@ -0,0 +1,466 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "flag" + "fmt" + "log" + "reflect" + "strings" + "unicode/utf8" + + "golang.org/x/text/internal" + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/number" + "golang.org/x/text/internal/stringset" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", false, + "test existing tables; can be used to compare web data with package data.") + outputFile = flag.String("output", "tables.go", "output file") + outputTestFile = flag.String("testoutput", "data_test.go", "output file") + + draft = flag.String("draft", + "contributed", + `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`) +) + +func main() { + gen.Init() + + const pkg = "number" + + gen.Repackage("gen_common.go", "common.go", pkg) + // Read the CLDR zip file. + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + d.SetDirFilter("supplemental", "main") + d.SetSectionFilter("numbers", "numberingSystem", "plurals") + data, err := d.DecodeZip(r) + if err != nil { + log.Fatalf("DecodeZip: %v", err) + } + + w := gen.NewCodeWriter() + defer w.WriteGoFile(*outputFile, pkg) + + fmt.Fprintln(w, `import "golang.org/x/text/internal/stringset"`) + + gen.WriteCLDRVersion(w) + + genNumSystem(w, data) + genSymbols(w, data) + genPlurals(w, data) + genFormats(w, data) + + w = gen.NewCodeWriter() + defer w.WriteGoFile(*outputTestFile, pkg) + + fmt.Fprintln(w, `import "golang.org/x/text/internal/format/plural"`) + + genPluralsTests(w, data) +} + +var systemMap = map[string]system{"latn": 0} + +func getNumberSystem(str string) system { + ns, ok := systemMap[str] + if !ok { + log.Fatalf("No index for numbering system %q", str) + } + return ns +} + +func genNumSystem(w *gen.CodeWriter, data *cldr.CLDR) { + numSysData := []systemData{ + {digitSize: 1, zero: [4]byte{'0'}}, + } + + for _, ns := range data.Supplemental().NumberingSystems.NumberingSystem { + if len(ns.Digits) == 0 { + continue + } + switch ns.Id { + case "latn": + // hard-wired + continue + case "hanidec": + // non-consecutive digits: treat as "algorithmic" + continue + } + + zero, sz := utf8.DecodeRuneInString(ns.Digits) + if ns.Digits[sz-1]+9 > 0xBF { // 1011 1111: highest continuation byte + log.Fatalf("Last byte of zero value overflows for %s", ns.Id) + } + + i := rune(0) + for _, r := range ns.Digits { + // Verify that we can do simple math on the UTF-8 byte sequence + // of zero to get the digit. + if zero+i != r { + // Runes not consecutive. + log.Fatalf("Digit %d of %s (%U) is not offset correctly from zero value", i, ns.Id, r) + } + i++ + } + var x [utf8.UTFMax]byte + utf8.EncodeRune(x[:], zero) + id := system(len(numSysData)) + systemMap[ns.Id] = id + numSysData = append(numSysData, systemData{ + id: id, + digitSize: byte(sz), + zero: x, + }) + } + w.WriteVar("numSysData", numSysData) + + algoID := system(len(numSysData)) + fmt.Fprintln(w, "const (") + for _, ns := range data.Supplemental().NumberingSystems.NumberingSystem { + id, ok := systemMap[ns.Id] + if !ok { + id = algoID + systemMap[ns.Id] = id + algoID++ + } + fmt.Fprintf(w, "num%s = %#x\n", strings.Title(ns.Id), id) + } + fmt.Fprintln(w, "numNumberSystems") + fmt.Fprintln(w, ")") + + fmt.Fprintln(w, "var systemMap = map[string]system{") + for _, ns := range data.Supplemental().NumberingSystems.NumberingSystem { + fmt.Fprintf(w, "%q: num%s,\n", ns.Id, strings.Title(ns.Id)) + w.Size += len(ns.Id) + 16 + 1 // very coarse approximation + } + fmt.Fprintln(w, "}") +} + +func genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { + d, err := cldr.ParseDraft(*draft) + if err != nil { + log.Fatalf("invalid draft level: %v", err) + } + + nNumberSystems := system(len(systemMap)) + + type symbols [NumSymbolTypes]string + + type key struct { + tag int // from language.CompactIndex + system system + } + symbolMap := map[key]*symbols{} + + defaults := map[int]system{} + + for _, lang := range data.Locales() { + ldml := data.RawLDML(lang) + if ldml.Numbers == nil { + continue + } + langIndex, ok := language.CompactIndex(language.MustParse(lang)) + if !ok { + log.Fatalf("No compact index for language %s", lang) + } + if d := ldml.Numbers.DefaultNumberingSystem; len(d) > 0 { + defaults[langIndex] = getNumberSystem(d[0].Data()) + } + + syms := cldr.MakeSlice(&ldml.Numbers.Symbols) + syms.SelectDraft(d) + + getFirst := func(name string, x interface{}) string { + v := reflect.ValueOf(x) + slice := cldr.MakeSlice(x) + slice.SelectAnyOf("alt", "", "alt") + if reflect.Indirect(v).Len() == 0 { + return "" + } else if reflect.Indirect(v).Len() > 1 { + log.Fatalf("%s: multiple values of %q within single symbol not supported.", lang, name) + } + return reflect.Indirect(v).Index(0).MethodByName("Data").Call(nil)[0].String() + } + + for _, sym := range ldml.Numbers.Symbols { + if sym.NumberSystem == "" { + // This is just linking the default of root to "latn". + continue + } + symbolMap[key{langIndex, getNumberSystem(sym.NumberSystem)}] = &symbols{ + SymDecimal: getFirst("decimal", &sym.Decimal), + SymGroup: getFirst("group", &sym.Group), + SymList: getFirst("list", &sym.List), + SymPercentSign: getFirst("percentSign", &sym.PercentSign), + SymPlusSign: getFirst("plusSign", &sym.PlusSign), + SymMinusSign: getFirst("minusSign", &sym.MinusSign), + SymExponential: getFirst("exponential", &sym.Exponential), + SymSuperscriptingExponent: getFirst("superscriptingExponent", &sym.SuperscriptingExponent), + SymPerMille: getFirst("perMille", &sym.PerMille), + SymInfinity: getFirst("infinity", &sym.Infinity), + SymNan: getFirst("nan", &sym.Nan), + SymTimeSeparator: getFirst("timeSeparator", &sym.TimeSeparator), + } + } + } + + // Expand all values. + for k, syms := range symbolMap { + for t := SymDecimal; t < NumSymbolTypes; t++ { + p := k.tag + for syms[t] == "" { + p = int(internal.Parent[p]) + if pSyms, ok := symbolMap[key{p, k.system}]; ok && (*pSyms)[t] != "" { + syms[t] = (*pSyms)[t] + break + } + if p == 0 /* und */ { + // Default to root, latn. + syms[t] = (*symbolMap[key{}])[t] + } + } + } + } + + // Unique the symbol sets and write the string data. + m := map[symbols]int{} + sb := stringset.NewBuilder() + + symIndex := [][NumSymbolTypes]byte{} + + for ns := system(0); ns < nNumberSystems; ns++ { + for _, l := range data.Locales() { + langIndex, _ := language.CompactIndex(language.MustParse(l)) + s := symbolMap[key{langIndex, ns}] + if s == nil { + continue + } + if _, ok := m[*s]; !ok { + m[*s] = len(symIndex) + sb.Add(s[:]...) + var x [NumSymbolTypes]byte + for i := SymDecimal; i < NumSymbolTypes; i++ { + x[i] = byte(sb.Index((*s)[i])) + } + symIndex = append(symIndex, x) + } + } + } + w.WriteVar("symIndex", symIndex) + w.WriteVar("symData", sb.Set()) + + // resolveSymbolIndex gets the index from the closest matching locale, + // including the locale itself. + resolveSymbolIndex := func(langIndex int, ns system) byte { + for { + if sym := symbolMap[key{langIndex, ns}]; sym != nil { + return byte(m[*sym]) + } + if langIndex == 0 { + return 0 // und, latn + } + langIndex = int(internal.Parent[langIndex]) + } + } + + // Create an index with the symbols for each locale for the latn numbering + // system. If this is not the default, or the only one, for a locale, we + // will overwrite the value later. + var langToDefaults [language.NumCompactTags]byte + for _, l := range data.Locales() { + langIndex, _ := language.CompactIndex(language.MustParse(l)) + langToDefaults[langIndex] = resolveSymbolIndex(langIndex, 0) + } + + // Delete redundant entries. + for _, l := range data.Locales() { + langIndex, _ := language.CompactIndex(language.MustParse(l)) + def := defaults[langIndex] + syms := symbolMap[key{langIndex, def}] + if syms == nil { + continue + } + for ns := system(0); ns < nNumberSystems; ns++ { + if ns == def { + continue + } + if altSyms, ok := symbolMap[key{langIndex, ns}]; ok && *altSyms == *syms { + delete(symbolMap, key{langIndex, ns}) + } + } + } + + // Create a sorted list of alternatives per language. This will only need to + // be referenced if a user specified an alternative numbering system. + var langToAlt []altSymData + for _, l := range data.Locales() { + langIndex, _ := language.CompactIndex(language.MustParse(l)) + start := len(langToAlt) + if start > 0x7F { + log.Fatal("Number of alternative assignments > 0x7F") + } + // Create the entry for the default value. + def := defaults[langIndex] + langToAlt = append(langToAlt, altSymData{ + compactTag: uint16(langIndex), + system: def, + symIndex: resolveSymbolIndex(langIndex, def), + }) + + for ns := system(0); ns < nNumberSystems; ns++ { + if def == ns { + continue + } + if sym := symbolMap[key{langIndex, ns}]; sym != nil { + langToAlt = append(langToAlt, altSymData{ + compactTag: uint16(langIndex), + system: ns, + symIndex: resolveSymbolIndex(langIndex, ns), + }) + } + } + if def == 0 && len(langToAlt) == start+1 { + // No additional data: erase the entry. + langToAlt = langToAlt[:start] + } else { + // Overwrite the entry in langToDefaults. + langToDefaults[langIndex] = 0x80 | byte(start) + } + } + w.WriteComment(` +langToDefaults maps a compact language index to the default numbering system +and default symbol set`) + w.WriteVar("langToDefaults", langToDefaults) + + w.WriteComment(` +langToAlt is a list of numbering system and symbol set pairs, sorted and +marked by compact language index.`) + w.WriteVar("langToAlt", langToAlt) +} + +// genFormats generates the lookup table for decimal, scientific and percent +// patterns. +// +// CLDR allows for patterns to be different per language for different numbering +// systems. In practice the patterns are set to be consistent for a language +// independent of the numbering system. genFormats verifies that no language +// deviates from this. +func genFormats(w *gen.CodeWriter, data *cldr.CLDR) { + d, err := cldr.ParseDraft(*draft) + if err != nil { + log.Fatalf("invalid draft level: %v", err) + } + + // Fill the first slot with a dummy so we can identify unspecified tags. + formats := []number.Pattern{{}} + patterns := map[string]int{} + + // TODO: It would be possible to eliminate two of these slices by having + // another indirection and store a reference to the combination of patterns. + decimal := make([]byte, language.NumCompactTags) + scientific := make([]byte, language.NumCompactTags) + percent := make([]byte, language.NumCompactTags) + + for _, lang := range data.Locales() { + ldml := data.RawLDML(lang) + if ldml.Numbers == nil { + continue + } + langIndex, ok := language.CompactIndex(language.MustParse(lang)) + if !ok { + log.Fatalf("No compact index for language %s", lang) + } + type patternSlice []*struct { + cldr.Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } + + add := func(name string, tags []byte, ps patternSlice) { + sl := cldr.MakeSlice(&ps) + sl.SelectDraft(d) + if len(ps) == 0 { + return + } + if len(ps) > 2 || len(ps) == 2 && ps[0] != ps[1] { + log.Fatalf("Inconsistent %d patterns for language %s", name, lang) + } + s := ps[0].Data() + + index, ok := patterns[s] + if !ok { + nf, err := number.ParsePattern(s) + if err != nil { + log.Fatal(err) + } + index = len(formats) + patterns[s] = index + formats = append(formats, *nf) + } + tags[langIndex] = byte(index) + } + + for _, df := range ldml.Numbers.DecimalFormats { + for _, l := range df.DecimalFormatLength { + if l.Type != "" { + continue + } + for _, f := range l.DecimalFormat { + add("decimal", decimal, f.Pattern) + } + } + } + for _, df := range ldml.Numbers.ScientificFormats { + for _, l := range df.ScientificFormatLength { + if l.Type != "" { + continue + } + for _, f := range l.ScientificFormat { + add("scientific", scientific, f.Pattern) + } + } + } + for _, df := range ldml.Numbers.PercentFormats { + for _, l := range df.PercentFormatLength { + if l.Type != "" { + continue + } + for _, f := range l.PercentFormat { + add("percent", percent, f.Pattern) + } + } + } + } + + // Complete the parent tag array to reflect inheritance. An index of 0 + // indicates an unspecified value. + for _, data := range [][]byte{decimal, scientific, percent} { + for i := range data { + p := uint16(i) + for ; data[p] == 0; p = internal.Parent[p] { + } + data[i] = data[p] + } + } + w.WriteVar("tagToDecimal", decimal) + w.WriteVar("tagToScientific", scientific) + w.WriteVar("tagToPercent", percent) + + value := strings.Replace(fmt.Sprintf("%#v", formats), "number.", "", -1) + // Break up the lines. This won't give ideal perfect formatting, but it is + // better than one huge line. + value = strings.Replace(value, ", ", ",\n", -1) + fmt.Fprintf(w, "var formats = %s\n", value) +} diff --git a/vendor/golang.org/x/text/internal/number/gen_common.go b/vendor/golang.org/x/text/internal/number/gen_common.go new file mode 100644 index 0000000..b0c71c5 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/gen_common.go @@ -0,0 +1,96 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "unicode/utf8" + + "golang.org/x/text/internal/format/plural" +) + +// A system identifies a CLDR numbering system. +type system byte + +type systemData struct { + id system + digitSize byte // number of UTF-8 bytes per digit + zero [utf8.UTFMax]byte // UTF-8 sequence of zero digit. +} + +// A SymbolType identifies a symbol of a specific kind. +type SymbolType int + +const ( + SymDecimal SymbolType = iota + SymGroup + SymList + SymPercentSign + SymPlusSign + SymMinusSign + SymExponential + SymSuperscriptingExponent + SymPerMille + SymInfinity + SymNan + SymTimeSeparator + + NumSymbolTypes +) + +type altSymData struct { + compactTag uint16 + system system + symIndex byte +} + +var countMap = map[string]plural.Form{ + "other": plural.Other, + "zero": plural.Zero, + "one": plural.One, + "two": plural.Two, + "few": plural.Few, + "many": plural.Many, +} + +type pluralCheck struct { + // category: + // 3..7: opID + // 0..2: category + cat byte + setID byte +} + +// opID identifies the type of operand in the plural rule, being i, n or f. +// (v, w, and t are treated as filters in our implementation.) +type opID byte + +const ( + opMod opID = 0x1 // is '%' used? + opNotEqual opID = 0x2 // using "!=" to compare + opI opID = 0 << 2 // integers after taking the absolute value + opN opID = 1 << 2 // full number (must be integer) + opF opID = 2 << 2 // fraction + opV opID = 3 << 2 // number of visible digits + opW opID = 4 << 2 // number of visible digits without trailing zeros + opBretonM opID = 5 << 2 // hard-wired rule for Breton + opItalian800 opID = 6 << 2 // hard-wired rule for Italian + opAzerbaijan00s opID = 7 << 2 // hard-wired rule for Azerbaijan +) +const ( + // Use this plural form to indicate the next rule needs to match as well. + // The last condition in the list will have the correct plural form. + andNext = 0x7 + formMask = 0x7 + + opShift = 3 + + // numN indicates the maximum integer, or maximum mod value, for which we + // have inclusion masks. + numN = 100 + // The common denominator of the modulo that is taken. + maxMod = 100 +) diff --git a/vendor/golang.org/x/text/internal/number/gen_plural.go b/vendor/golang.org/x/text/internal/number/gen_plural.go new file mode 100644 index 0000000..05a6722 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/gen_plural.go @@ -0,0 +1,471 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This file generates data for the CLDR plural rules, as defined in +// http://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules +// +// We assume a slightly simplified grammar: +// +// condition = and_condition ('or' and_condition)* samples +// and_condition = relation ('and' relation)* +// relation = expr ('=' | '!=') range_list +// expr = operand ('%' '10' '0'* )? +// operand = 'n' | 'i' | 'f' | 't' | 'v' | 'w' +// range_list = (range | value) (',' range_list)* +// range = value'..'value +// value = digit+ +// digit = 0|1|2|3|4|5|6|7|8|9 +// +// samples = ('@integer' sampleList)? +// ('@decimal' sampleList)? +// sampleList = sampleRange (',' sampleRange)* (',' ('…'|'...'))? +// sampleRange = decimalValue ('~' decimalValue)? +// decimalValue = value ('.' value)? +// +// Symbol Value +// n absolute value of the source number (integer and decimals). +// i integer digits of n. +// v number of visible fraction digits in n, with trailing zeros. +// w number of visible fraction digits in n, without trailing zeros. +// f visible fractional digits in n, with trailing zeros. +// t visible fractional digits in n, without trailing zeros. +// +// The algorithm for which the data is generated is based on the following +// observations +// +// - the number of different sets of numbers which the plural rules use to +// test inclusion is limited, +// - most numbers that are tested on are < 100 +// +// This allows us to define a bitmap for each number < 100 where a bit i +// indicates whether this number is included in some defined set i. +// The function matchPlural in plural.go defines how we can subsequently use +// this data to determine inclusion. +// +// There are a few languages for which this doesn't work. For one Italian and +// Azerbaijan, which both test against numbers > 100 for ordinals and Breton, +// which considers whether numbers are multiples of hundreds. The model here +// could be extended to handle Italian and Azerbaijan fairly easily (by +// considering the numbers 100, 200, 300, ..., 800, 900 in addition to the first +// 100), but for now it seems easier to just hard-code these cases. + +import ( + "bufio" + "bytes" + "fmt" + "log" + "strconv" + "strings" + + "golang.org/x/text/internal" + "golang.org/x/text/internal/format/plural" + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +type pluralTest struct { + locales string // space-separated list of locales for this test + form plural.Form + integer []string // Entries of the form \d+ or \d+~\d+ + decimal []string // Entries of the form \f+ or \f+ +~\f+, where f is \d+\.\d+ +} + +func genPluralsTests(w *gen.CodeWriter, data *cldr.CLDR) { + w.WriteType(pluralTest{}) + + for _, plurals := range data.Supplemental().Plurals { + if plurals.Type == "" { + // The empty type is reserved for plural ranges. + continue + } + tests := []pluralTest{} + + for _, pRules := range plurals.PluralRules { + for _, rule := range pRules.PluralRule { + test := pluralTest{ + locales: pRules.Locales, + form: countMap[rule.Count], + } + scan := bufio.NewScanner(strings.NewReader(rule.Data())) + scan.Split(splitTokens) + var p *[]string + for scan.Scan() { + switch t := scan.Text(); t { + case "@integer": + p = &test.integer + case "@decimal": + p = &test.decimal + case ",", "…": + default: + if p != nil { + *p = append(*p, t) + } + } + } + tests = append(tests, test) + } + } + w.WriteVar(plurals.Type+"Tests", tests) + } +} + +func genPlurals(w *gen.CodeWriter, data *cldr.CLDR) { + for _, plurals := range data.Supplemental().Plurals { + if plurals.Type == "" { + continue + } + // Initialize setMap and inclusionMasks. They are already populated with + // a few entries to serve as an example and to assign nice numbers to + // common cases. + + // setMap contains sets of numbers represented by boolean arrays where + // a true value for element i means that the number i is included. + setMap := map[[numN]bool]int{ + // The above init func adds an entry for including all numbers. + [numN]bool{1: true}: 1, // fix {1} to a nice value + [numN]bool{2: true}: 2, // fix {2} to a nice value + [numN]bool{0: true}: 3, // fix {0} to a nice value + } + + // inclusionMasks contains bit masks for every number under numN to + // indicate in which set the number is included. Bit 1 << x will be set + // if it is included in set x. + inclusionMasks := [numN]uint64{ + // Note: these entries are not complete: more bits will be set along the way. + 0: 1 << 3, + 1: 1 << 1, + 2: 1 << 2, + } + + // Create set {0..99}. We will assign this set the identifier 0. + var all [numN]bool + for i := range all { + // Mark number i as being included in the set (which has identifier 0). + inclusionMasks[i] |= 1 << 0 + // Mark number i as included in the set. + all[i] = true + } + // Register the identifier for the set. + setMap[all] = 0 + + rules := []pluralCheck{} + index := []byte{0} + langMap := map[int]byte{0: 0} // From compact language index to index + + for _, pRules := range plurals.PluralRules { + // Parse the rules. + var conds []orCondition + for _, rule := range pRules.PluralRule { + form := countMap[rule.Count] + conds = parsePluralCondition(conds, rule.Data(), form) + } + // Encode the rules. + for _, c := range conds { + // If an or condition only has filters, we create an entry for + // this filter and the set that contains all values. + empty := true + for _, b := range c.used { + empty = empty && !b + } + if empty { + rules = append(rules, pluralCheck{ + cat: byte(opMod<<opShift) | byte(c.form), + setID: 0, // all values + }) + continue + } + // We have some entries with values. + for i, set := range c.set { + if !c.used[i] { + continue + } + index, ok := setMap[set] + if !ok { + index = len(setMap) + setMap[set] = index + for i := range inclusionMasks { + if set[i] { + inclusionMasks[i] |= 1 << uint64(index) + } + } + } + rules = append(rules, pluralCheck{ + cat: byte(i<<opShift | andNext), + setID: byte(index), + }) + } + // Now set the last entry to the plural form the rule matches. + rules[len(rules)-1].cat &^= formMask + rules[len(rules)-1].cat |= byte(c.form) + } + // Point the relevant locales to the created entries. + for _, loc := range strings.Split(pRules.Locales, " ") { + if strings.TrimSpace(loc) == "" { + continue + } + lang, ok := language.CompactIndex(language.MustParse(loc)) + if !ok { + log.Printf("No compact index for locale %q", loc) + } + langMap[lang] = byte(len(index) - 1) + } + index = append(index, byte(len(rules))) + } + w.WriteVar(plurals.Type+"Rules", rules) + w.WriteVar(plurals.Type+"Index", index) + // Expand the values. + langToIndex := make([]byte, language.NumCompactTags) + for i := range langToIndex { + for p := i; ; p = int(internal.Parent[p]) { + if x, ok := langMap[p]; ok { + langToIndex[i] = x + break + } + } + } + w.WriteVar(plurals.Type+"LangToIndex", langToIndex) + // Need to convert array to slice because of golang.org/issue/7651. + // This will allow tables to be dropped when unused. This is especially + // relevant for the ordinal data, which I suspect won't be used as much. + w.WriteVar(plurals.Type+"InclusionMasks", inclusionMasks[:]) + + if len(rules) > 0xFF { + log.Fatalf("Too many entries for rules: %#x", len(rules)) + } + if len(index) > 0xFF { + log.Fatalf("Too many entries for index: %#x", len(index)) + } + if len(setMap) > 64 { // maximum number of bits. + log.Fatalf("Too many entries for setMap: %d", len(setMap)) + } + w.WriteComment( + "Slots used for %s: %X of 0xFF rules; %X of 0xFF indexes; %d of 64 sets", + plurals.Type, len(rules), len(index), len(setMap)) + // Prevent comment from attaching to the next entry. + fmt.Fprint(w, "\n\n") + } +} + +type orCondition struct { + original string // for debugging + + form plural.Form + used [32]bool + set [32][numN]bool +} + +func (o *orCondition) add(op opID, mod int, v []int) (ok bool) { + ok = true + for _, x := range v { + if x >= maxMod { + ok = false + break + } + } + for i := 0; i < numN; i++ { + m := i + if mod != 0 { + m = i % mod + } + if !intIn(m, v) { + o.set[op][i] = false + } + } + if ok { + o.used[op] = true + } + return ok +} + +func intIn(x int, a []int) bool { + for _, y := range a { + if x == y { + return true + } + } + return false +} + +var operandIndex = map[string]opID{ + "i": opI, + "n": opN, + "f": opF, + "v": opV, + "w": opW, +} + +// parsePluralCondition parses the condition of a single pluralRule and appends +// the resulting or conditions to conds. +// +// Example rules: +// // Category "one" in English: only allow 1 with no visible fraction +// i = 1 and v = 0 @integer 1 +// +// // Category "few" in Czech: all numbers with visible fractions +// v != 0 @decimal ... +// +// // Category "zero" in Latvian: all multiples of 10 or the numbers 11-19 or +// // numbers with a fraction 11..19 and no trailing zeros. +// n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer ... +// +// @integer and @decimal are followed by examples and are not relevant for the +// rule itself. The are used here to signal the termination of the rule. +func parsePluralCondition(conds []orCondition, s string, f plural.Form) []orCondition { + scan := bufio.NewScanner(strings.NewReader(s)) + scan.Split(splitTokens) + for { + cond := orCondition{original: s, form: f} + // Set all numbers to be allowed for all number classes and restrict + // from here on. + for i := range cond.set { + for j := range cond.set[i] { + cond.set[i][j] = true + } + } + andLoop: + for { + var token string + scan.Scan() // Must exist. + switch class := scan.Text(); class { + case "t": + class = "w" // equal to w for t == 0 + fallthrough + case "n", "i", "f", "v", "w": + op := scanToken(scan) + opCode := operandIndex[class] + mod := 0 + if op == "%" { + opCode |= opMod + + switch v := scanUint(scan); v { + case 10, 100: + mod = v + case 1000: + // A more general solution would be to allow checking + // against multiples of 100 and include entries for the + // numbers 100..900 in the inclusion masks. At the + // moment this would only help Azerbaijan and Italian. + + // Italian doesn't use '%', so this must be Azerbaijan. + cond.used[opAzerbaijan00s] = true + return append(conds, cond) + + case 1000000: + cond.used[opBretonM] = true + return append(conds, cond) + + default: + log.Fatalf("Modulo value not supported %d", v) + } + op = scanToken(scan) + } + if op != "=" && op != "!=" { + log.Fatalf("Unexpected op %q", op) + } + if op == "!=" { + opCode |= opNotEqual + } + a := []int{} + v := scanUint(scan) + if class == "w" && v != 0 { + log.Fatalf("Must compare against zero for operand type %q", class) + } + token = scanToken(scan) + for { + switch token { + case "..": + end := scanUint(scan) + for ; v <= end; v++ { + a = append(a, v) + } + token = scanToken(scan) + default: // ",", "or", "and", "@..." + a = append(a, v) + } + if token != "," { + break + } + v = scanUint(scan) + token = scanToken(scan) + } + if !cond.add(opCode, mod, a) { + // Detected large numbers. As we ruled out Azerbaijan, this + // must be the many rule for Italian ordinals. + cond.set[opItalian800] = cond.set[opN] + cond.used[opItalian800] = true + } + + case "@integer", "@decimal": // "other" entry: tests only. + return conds + default: + log.Fatalf("Unexpected operand class %q (%s)", class, s) + } + switch token { + case "or": + conds = append(conds, cond) + break andLoop + case "@integer", "@decimal": // examples + // There is always an example in practice, so we always terminate here. + if err := scan.Err(); err != nil { + log.Fatal(err) + } + return append(conds, cond) + case "and": + // keep accumulating + default: + log.Fatalf("Unexpected token %q", token) + } + } + } +} + +func scanToken(scan *bufio.Scanner) string { + scan.Scan() + return scan.Text() +} + +func scanUint(scan *bufio.Scanner) int { + scan.Scan() + val, err := strconv.ParseUint(scan.Text(), 10, 32) + if err != nil { + log.Fatal(err) + } + return int(val) +} + +// splitTokens can be used with bufio.Scanner to tokenize CLDR plural rules. +func splitTokens(data []byte, atEOF bool) (advance int, token []byte, err error) { + condTokens := [][]byte{ + []byte(".."), + []byte(","), + []byte("!="), + []byte("="), + } + advance, token, err = bufio.ScanWords(data, atEOF) + for _, t := range condTokens { + if len(t) >= len(token) { + continue + } + switch p := bytes.Index(token, t); { + case p == -1: + case p == 0: + advance = len(t) + token = token[:len(t)] + return advance - len(token) + len(t), token[:len(t)], err + case p < advance: + // Don't split when "=" overlaps "!=". + if t[0] == '=' && token[p-1] == '!' { + continue + } + advance = p + token = token[:p] + } + } + return advance, token, err +} diff --git a/vendor/golang.org/x/text/internal/number/itoa.go b/vendor/golang.org/x/text/internal/number/itoa.go new file mode 100644 index 0000000..a459a6b --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/itoa.go @@ -0,0 +1,111 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO: use build tags once a low-level public API has been established in +// package strconv. + +package number + +const ( + digits = "0123456789abcdefghijklmnopqrstuvwxyz" +) + +var shifts = [len(digits) + 1]uint{ + 1 << 1: 1, + 1 << 2: 2, + 1 << 3: 3, + 1 << 4: 4, + 1 << 5: 5, +} + +// formatBits computes the string representation of u in the given base. +// If neg is set, u is treated as negative int64 value. If append_ is +// set, the string is appended to dst and the resulting byte slice is +// returned as the first result value; otherwise the string is returned +// as the second result value. +// +func formatBits(dst []byte, u uint64, base int, neg, append_ bool) (d []byte, s string) { + if base < 2 || base > len(digits) { + panic("strconv: illegal AppendInt/FormatInt base") + } + // 2 <= base && base <= len(digits) + + var a [64 + 1]byte // +1 for sign of 64bit value in base 2 + i := len(a) + + if neg { + u = -u + } + + // convert bits + if base == 10 { + // common case: use constants for / because + // the compiler can optimize it into a multiply+shift + + if ^uintptr(0)>>32 == 0 { + for u > uint64(^uintptr(0)) { + q := u / 1e9 + us := uintptr(u - q*1e9) // us % 1e9 fits into a uintptr + for j := 9; j > 0; j-- { + i-- + qs := us / 10 + a[i] = byte(us - qs*10 + '0') + us = qs + } + u = q + } + } + + // u guaranteed to fit into a uintptr + us := uintptr(u) + for us >= 10 { + i-- + q := us / 10 + a[i] = byte(us - q*10 + '0') + us = q + } + // u < 10 + i-- + a[i] = byte(us + '0') + + } else if s := shifts[base]; s > 0 { + // base is power of 2: use shifts and masks instead of / and % + b := uint64(base) + m := uintptr(b) - 1 // == 1<<s - 1 + for u >= b { + i-- + a[i] = digits[uintptr(u)&m] + u >>= s + } + // u < base + i-- + a[i] = digits[uintptr(u)] + + } else { + // general case + b := uint64(base) + for u >= b { + i-- + q := u / b + a[i] = digits[uintptr(u-q*b)] + u = q + } + // u < base + i-- + a[i] = digits[uintptr(u)] + } + + // add sign, if any + if neg { + i-- + a[i] = '-' + } + + if append_ { + d = append(dst, a[i:]...) + return + } + s = string(a[i:]) + return +} diff --git a/vendor/golang.org/x/text/internal/number/number.go b/vendor/golang.org/x/text/internal/number/number.go new file mode 100644 index 0000000..d412194 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/number.go @@ -0,0 +1,145 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go gen_common.go gen_plural.go + +// Package number contains tools and data for formatting numbers. +package number + +import ( + "unicode/utf8" + + "golang.org/x/text/internal" + "golang.org/x/text/language" +) + +// Info holds number formatting configuration data. +type Info struct { + system systemData // numbering system information + symIndex byte // index to symbols +} + +// InfoFromLangID returns a Info for the given compact language identifier and +// numbering system identifier. If system is the empty string, the default +// numbering system will be taken for that language. +func InfoFromLangID(compactIndex int, numberSystem string) Info { + p := langToDefaults[compactIndex] + // Lookup the entry for the language. + pSymIndex := byte(0) // Default: Latin, default symbols + system, ok := systemMap[numberSystem] + if !ok { + // Take the value for the default numbering system. This is by far the + // most common case as an alternative numbering system is hardly used. + if p&0x80 == 0 { + pSymIndex = p + } else { + // Take the first entry from the alternatives list. + data := langToAlt[p&^0x80] + pSymIndex = data.symIndex + system = data.system + } + } else { + langIndex := compactIndex + ns := system + outerLoop: + for { + if p&0x80 == 0 { + if ns == 0 { + // The index directly points to the symbol data. + pSymIndex = p + break + } + // Move to the parent and retry. + langIndex = int(internal.Parent[langIndex]) + } + // The index points to a list of symbol data indexes. + for _, e := range langToAlt[p&^0x80:] { + if int(e.compactTag) != langIndex { + if langIndex == 0 { + // The CLDR root defines full symbol information for all + // numbering systems (even though mostly by means of + // aliases). This means that we will never fall back to + // the default of the language. Also, the loop is + // guaranteed to terminate as a consequence. + ns = numLatn + // Fall back to Latin and start from the original + // language. See + // http://unicode.org/reports/tr35/#Locale_Inheritance. + langIndex = compactIndex + } else { + // Fall back to parent. + langIndex = int(internal.Parent[langIndex]) + } + break + } + if e.system == ns { + pSymIndex = e.symIndex + break outerLoop + } + } + } + } + if int(system) >= len(numSysData) { // algorithmic + // Will generate ASCII digits in case the user inadvertently calls + // WriteDigit or Digit on it. + d := numSysData[0] + d.id = system + return Info{ + system: d, + symIndex: pSymIndex, + } + } + return Info{ + system: numSysData[system], + symIndex: pSymIndex, + } +} + +// InfoFromTag returns a Info for the given language tag. +func InfoFromTag(t language.Tag) Info { + for { + if index, ok := language.CompactIndex(t); ok { + return InfoFromLangID(index, t.TypeForKey("nu")) + } + t = t.Parent() + } +} + +// IsDecimal reports if the numbering system can convert decimal to native +// symbols one-to-one. +func (n Info) IsDecimal() bool { + return int(n.system.id) < len(numSysData) +} + +// WriteDigit writes the UTF-8 sequence for n corresponding to the given ASCII +// digit to dst and reports the number of bytes written. dst must be large +// enough to hold the rune (can be up to utf8.UTFMax bytes). +func (n Info) WriteDigit(dst []byte, asciiDigit rune) int { + copy(dst, n.system.zero[:n.system.digitSize]) + dst[n.system.digitSize-1] += byte(asciiDigit - '0') + return int(n.system.digitSize) +} + +// Digit returns the digit for the numbering system for the corresponding ASCII +// value. For example, ni.Digit('3') could return '三'. Note that the argument +// is the rune constant '3', which equals 51, not the integer constant 3. +func (n Info) Digit(asciiDigit rune) rune { + var x [utf8.UTFMax]byte + n.WriteDigit(x[:], asciiDigit) + r, _ := utf8.DecodeRune(x[:]) + return r +} + +// Symbol returns the string for the given symbol type. +func (n Info) Symbol(t SymbolType) string { + return symData.Elem(int(symIndex[n.symIndex][t])) +} + +func formatForLang(t language.Tag, index []byte) *Pattern { + for ; ; t = t.Parent() { + if x, ok := language.CompactIndex(t); ok { + return &formats[index[x]] + } + } +} diff --git a/vendor/golang.org/x/text/internal/number/number_test.go b/vendor/golang.org/x/text/internal/number/number_test.go new file mode 100644 index 0000000..fc04887 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/number_test.go @@ -0,0 +1,90 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package number + +import ( + "testing" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" +) + +func TestInfo(t *testing.T) { + testCases := []struct { + lang string + sym SymbolType + wantSym string + wantNine rune + }{ + {"und", SymDecimal, ".", '9'}, + {"de", SymGroup, ".", '9'}, + {"de-BE", SymGroup, ".", '9'}, // inherits from de (no number data in CLDR) + {"de-BE-oxendict", SymGroup, ".", '9'}, // inherits from de (no compact index) + + // U+096F DEVANAGARI DIGIT NINE ('९') + {"de-BE-u-nu-deva", SymGroup, ".", '\u096f'}, // miss -> latn -> de + {"de-Cyrl-BE", SymGroup, ",", '9'}, // inherits from root + {"de-CH", SymGroup, "'", '9'}, // overrides values in de + {"de-CH-oxendict", SymGroup, "'", '9'}, // inherits from de-CH (no compact index) + {"de-CH-u-nu-deva", SymGroup, "'", '\u096f'}, // miss -> latn -> de-CH + + {"pa", SymExponential, "E", '9'}, + + // "×۱۰^" -> U+00d7 U+06f1 U+06f0^" + // U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO + // U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE + // U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE + {"pa-u-nu-arabext", SymExponential, "\u00d7\u06f1\u06f0^", '\u06f9'}, + + // "གྲངས་མེད" - > U+0f42 U+0fb2 U+0f44 U+0f66 U+0f0b U+0f58 U+0f7a U+0f51 + // Examples: + // U+0F29 TIBETAN DIGIT NINE (༩) + {"dz", SymInfinity, "\u0f42\u0fb2\u0f44\u0f66\u0f0b\u0f58\u0f7a\u0f51", '\u0f29'}, // defaults to tibt + {"dz-u-nu-latn", SymInfinity, "∞", '9'}, // select alternative + {"dz-u-nu-tibt", SymInfinity, "\u0f42\u0fb2\u0f44\u0f66\u0f0b\u0f58\u0f7a\u0f51", '\u0f29'}, + {"en-u-nu-tibt", SymInfinity, "∞", '\u0f29'}, + + // algorithmic number systems fall back to ASCII if Digits is used. + {"en-u-nu-hanidec", SymPlusSign, "+", '9'}, + {"en-u-nu-roman", SymPlusSign, "+", '9'}, + } + for _, tc := range testCases { + info := InfoFromTag(language.MustParse(tc.lang)) + if got := info.Symbol(tc.sym); got != tc.wantSym { + t.Errorf("%s:%v:sym: got %q; want %q", tc.lang, tc.sym, got, tc.wantSym) + } + if got := info.Digit('9'); got != tc.wantNine { + t.Errorf("%s:%v:nine: got %q; want %q", tc.lang, tc.sym, got, tc.wantNine) + } + } +} + +func TestFormats(t *testing.T) { + testCases := []struct { + lang string + pattern string + index []byte + }{ + {"en", "#,##0.###", tagToDecimal}, + {"de", "#,##0.###", tagToDecimal}, + {"de-CH", "#,##0.###", tagToDecimal}, + {"pa", "#,##,##0.###", tagToDecimal}, + {"pa-Arab", "#,##0.###", tagToDecimal}, // Does NOT inherit from pa! + {"mr", "#,##,##0.###", tagToDecimal}, + {"mr-IN", "#,##,##0.###", tagToDecimal}, // Inherits from mr. + {"nl", "#E0", tagToScientific}, + {"nl-MX", "#E0", tagToScientific}, // Inherits through Tag.Parent. + {"zgh", "#,##0 %", tagToPercent}, + } + for _, tc := range testCases { + testtext.Run(t, tc.lang, func(t *testing.T) { + got := formatForLang(language.MustParse(tc.lang), tc.index) + want, _ := ParsePattern(tc.pattern) + if *got != *want { + t.Errorf("\ngot %#v;\nwant %#v", got, want) + } + }) + } +} diff --git a/vendor/golang.org/x/text/internal/number/pattern.go b/vendor/golang.org/x/text/internal/number/pattern.go new file mode 100644 index 0000000..018cf02 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/pattern.go @@ -0,0 +1,386 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package number + +import ( + "errors" + "unicode/utf8" +) + +// This file contains a parser for the CLDR number patterns as described in +// http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns. +// +// The following BNF is derived from this standard. +// +// pattern := subpattern (';' subpattern)? +// subpattern := affix? number exponent? affix? +// number := decimal | sigDigits +// decimal := '#'* '0'* ('.' fraction)? | '#' | '0' +// fraction := '0'* '#'* +// sigDigits := '#'* '@' '@'* '#'* +// exponent := 'E' '+'? '0'* '0' +// padSpec := '*' \L +// +// Notes: +// - An affix pattern may contain any runes, but runes with special meaning +// should be escaped. +// - Sequences of digits, '#', and '@' in decimal and sigDigits may have +// interstitial commas. + +// TODO: replace special characters in affixes (-, +, ¤) with control codes. + +// Pattern holds information for formatting numbers. It is designed to hold +// information from CLDR number patterns. +// +// This pattern is precompiled for all patterns for all languages. Even though +// the number of patterns is not very large, we want to keep this small. +// +// This type is only intended for internal use. +type Pattern struct { + // TODO: this struct can be packed a lot better than it is now. Should be + // possible to make it 32 bytes. + + Affix string // includes prefix and suffix. First byte is prefix length. + Offset uint16 // Offset into Affix for prefix and suffix + NegOffset uint16 // Offset into Affix for negative prefix and suffix or 0. + + Multiplier uint32 + RoundIncrement uint32 // Use Min*Digits to determine scale + PadRune rune + + FormatWidth uint16 + + GroupingSize [2]uint8 + Flags PatternFlag + + // Number of digits. + MinIntegerDigits uint8 + MaxIntegerDigits uint8 + MinFractionDigits uint8 + MaxFractionDigits uint8 + MinSignificantDigits uint8 + MaxSignificantDigits uint8 + MinExponentDigits uint8 +} + +// A PatternFlag is a bit mask for the flag field of a Format. +type PatternFlag uint8 + +const ( + AlwaysSign PatternFlag = 1 << iota + AlwaysExpSign + AlwaysDecimalSeparator + ParenthesisForNegative // Common pattern. Saves space. + + PadAfterNumber + PadAfterAffix + + PadBeforePrefix = 0 // Default + PadAfterPrefix = PadAfterAffix + PadBeforeSuffix = PadAfterNumber + PadAfterSuffix = PadAfterNumber | PadAfterAffix + PadMask = PadAfterNumber | PadAfterAffix +) + +type parser struct { + *Pattern + + leadingSharps int + + pos int + err error + doNotTerminate bool + groupingCount uint + hasGroup bool + buf []byte +} + +func (p *parser) setError(err error) { + if p.err == nil { + p.err = err + } +} + +func (p *parser) updateGrouping() { + if p.hasGroup && p.groupingCount < 255 { + p.GroupingSize[1] = p.GroupingSize[0] + p.GroupingSize[0] = uint8(p.groupingCount) + } + p.groupingCount = 0 + p.hasGroup = true +} + +var ( + // TODO: more sensible and localizeable error messages. + errMultiplePadSpecifiers = errors.New("format: pattern has multiple pad specifiers") + errInvalidPadSpecifier = errors.New("format: invalid pad specifier") + errInvalidQuote = errors.New("format: invalid quote") + errAffixTooLarge = errors.New("format: prefix or suffix exceeds maximum UTF-8 length of 256 bytes") + errDuplicatePercentSign = errors.New("format: duplicate percent sign") + errDuplicatePermilleSign = errors.New("format: duplicate permille sign") + errUnexpectedEnd = errors.New("format: unexpected end of pattern") +) + +// ParsePattern extracts formatting information from a CLDR number pattern. +// +// See http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns. +func ParsePattern(s string) (f *Pattern, err error) { + p := parser{Pattern: &Pattern{}} + + s = p.parseSubPattern(s) + + if s != "" { + // Parse negative sub pattern. + if s[0] != ';' { + p.setError(errors.New("format: error parsing first sub pattern")) + return nil, p.err + } + neg := parser{Pattern: &Pattern{}} // just for extracting the affixes. + s = neg.parseSubPattern(s[len(";"):]) + p.NegOffset = uint16(len(p.buf)) + p.buf = append(p.buf, neg.buf...) + } + if s != "" { + p.setError(errors.New("format: spurious characters at end of pattern")) + } + if p.err != nil { + return nil, p.err + } + if affix := string(p.buf); affix == "\x00\x00" || affix == "\x00\x00\x00\x00" { + // No prefix or suffixes. + p.NegOffset = 0 + } else { + p.Affix = affix + } + return p.Pattern, nil +} + +func (p *parser) parseSubPattern(s string) string { + s = p.parsePad(s, PadBeforePrefix) + s = p.parseAffix(s) + s = p.parsePad(s, PadAfterPrefix) + + s = p.parse(p.number, s) + + s = p.parsePad(s, PadBeforeSuffix) + s = p.parseAffix(s) + s = p.parsePad(s, PadAfterSuffix) + return s +} + +func (p *parser) parsePad(s string, f PatternFlag) (tail string) { + if len(s) >= 2 && s[0] == '*' { + r, sz := utf8.DecodeRuneInString(s[1:]) + if p.PadRune != 0 { + p.err = errMultiplePadSpecifiers + } else { + p.Flags |= f + p.PadRune = r + } + return s[1+sz:] + } + return s +} + +func (p *parser) parseAffix(s string) string { + x := len(p.buf) + p.buf = append(p.buf, 0) // placeholder for affix length + + s = p.parse(p.affix, s) + + n := len(p.buf) - x - 1 + if n > 0xFF { + p.setError(errAffixTooLarge) + } + p.buf[x] = uint8(n) + return s +} + +// state implements a state transition. It returns the new state. A state +// function may set an error on the parser or may simply return on an incorrect +// token and let the next phase fail. +type state func(r rune) state + +// parse repeatedly applies a state function on the given string until a +// termination condition is reached. +func (p *parser) parse(fn state, s string) (tail string) { + for i, r := range s { + p.doNotTerminate = false + if fn = fn(r); fn == nil || p.err != nil { + return s[i:] + } + p.FormatWidth++ + } + if p.doNotTerminate { + p.setError(errUnexpectedEnd) + } + return "" +} + +func (p *parser) affix(r rune) state { + switch r { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + '#', '@', '.', '*', ',', ';': + return nil + case '\'': + return p.escape + case '%': + if p.Multiplier != 0 { + p.setError(errDuplicatePercentSign) + } + p.Multiplier = 100 + case '\u2030': // ‰ Per mille + if p.Multiplier != 0 { + p.setError(errDuplicatePermilleSign) + } + p.Multiplier = 1000 + // TODO: handle currency somehow: ¤, ¤¤, ¤¤¤, ¤¤¤¤ + } + p.buf = append(p.buf, string(r)...) + return p.affix +} + +func (p *parser) escape(r rune) state { + switch r { + case '\'': + return p.affix + default: + p.buf = append(p.buf, string(r)...) + } + return p.escape +} + +// number parses a number. The BNF says the integer part should always have +// a '0', but that does not appear to be the case according to the rest of the +// documentation. We will allow having only '#' numbers. +func (p *parser) number(r rune) state { + switch r { + case '#': + p.groupingCount++ + p.leadingSharps++ + case '@': + p.groupingCount++ + p.leadingSharps = 0 + return p.sigDigits(r) + case ',': + if p.leadingSharps == 0 { // no leading commas + return nil + } + p.updateGrouping() + case 'E': + p.MaxIntegerDigits = uint8(p.leadingSharps) + return p.exponent + case '.': // allow ".##" etc. + p.updateGrouping() + return p.fraction + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + return p.integer(r) + default: + return nil + } + return p.number +} + +func (p *parser) integer(r rune) state { + if !('0' <= r && r <= '9') { + var next state + switch r { + case 'E': + if p.leadingSharps > 0 { + p.MaxIntegerDigits = uint8(p.leadingSharps) + p.MinIntegerDigits + } + next = p.exponent + case '.': + next = p.fraction + } + p.updateGrouping() + return next + } + p.RoundIncrement = p.RoundIncrement*10 + uint32(r-'0') + p.groupingCount++ + p.MinIntegerDigits++ + return p.integer +} + +func (p *parser) sigDigits(r rune) state { + switch r { + case '@': + p.groupingCount++ + p.MaxSignificantDigits++ + p.MinSignificantDigits++ + case '#': + return p.sigDigitsFinal(r) + case 'E': + p.updateGrouping() + return p.normalizeSigDigitsWithExponent() + default: + p.updateGrouping() + return nil + } + return p.sigDigits +} + +func (p *parser) sigDigitsFinal(r rune) state { + switch r { + case '#': + p.groupingCount++ + p.MaxSignificantDigits++ + case 'E': + p.updateGrouping() + return p.normalizeSigDigitsWithExponent() + default: + p.updateGrouping() + return nil + } + return p.sigDigitsFinal +} + +func (p *parser) normalizeSigDigitsWithExponent() state { + p.MinIntegerDigits, p.MaxIntegerDigits = 1, 1 + p.MinFractionDigits = p.MinSignificantDigits - 1 + p.MaxFractionDigits = p.MaxSignificantDigits - 1 + p.MinSignificantDigits, p.MaxSignificantDigits = 0, 0 + return p.exponent +} + +func (p *parser) fraction(r rune) state { + switch r { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + p.RoundIncrement = p.RoundIncrement*10 + uint32(r-'0') + p.MinFractionDigits++ + p.MaxFractionDigits++ + case '#': + p.MaxFractionDigits++ + case 'E': + if p.leadingSharps > 0 { + p.MaxIntegerDigits = uint8(p.leadingSharps) + p.MinIntegerDigits + } + return p.exponent + default: + return nil + } + return p.fraction +} + +func (p *parser) exponent(r rune) state { + switch r { + case '+': + // Set mode and check it wasn't already set. + if p.Flags&AlwaysExpSign != 0 || p.MinExponentDigits > 0 { + break + } + p.Flags |= AlwaysExpSign + p.doNotTerminate = true + return p.exponent + case '0': + p.MinExponentDigits++ + return p.exponent + } + // termination condition + if p.MinExponentDigits == 0 { + p.setError(errors.New("format: need at least one digit")) + } + return nil +} diff --git a/vendor/golang.org/x/text/internal/number/pattern_test.go b/vendor/golang.org/x/text/internal/number/pattern_test.go new file mode 100644 index 0000000..810b5a8 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/pattern_test.go @@ -0,0 +1,300 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package number + +import ( + "reflect" + "testing" + "unsafe" +) + +var testCases = []struct { + pat string + want *Pattern +}{{ + "#", + &Pattern{ + FormatWidth: 1, + // TODO: Should MinIntegerDigits be 1? + }, +}, { + "0", + &Pattern{ + FormatWidth: 1, + MinIntegerDigits: 1, + }, +}, { + "0000", + &Pattern{ + FormatWidth: 4, + MinIntegerDigits: 4, + }, +}, { + ".#", + &Pattern{ + FormatWidth: 2, + MaxFractionDigits: 1, + }, +}, { + "#0.###", + &Pattern{ + FormatWidth: 6, + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, +}, { + "#0.######", + &Pattern{ + FormatWidth: 9, + MinIntegerDigits: 1, + MaxFractionDigits: 6, + }, +}, { + "#,##0.###", + &Pattern{ + FormatWidth: 9, + GroupingSize: [2]uint8{3, 0}, + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, +}, { + "#,##,##0.###", + &Pattern{ + FormatWidth: 12, + GroupingSize: [2]uint8{3, 2}, + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, +}, { + // Ignore additional separators. + "#,####,##,##0.###", + &Pattern{ + FormatWidth: 17, + GroupingSize: [2]uint8{3, 2}, + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, +}, { + "#E0", + &Pattern{ + FormatWidth: 3, + MaxIntegerDigits: 1, + MinExponentDigits: 1, + }, +}, { + "0E0", + &Pattern{ + FormatWidth: 3, + MinIntegerDigits: 1, + MinExponentDigits: 1, + }, +}, { + "##00.0#E0", + &Pattern{ + FormatWidth: 9, + MinIntegerDigits: 2, + MaxIntegerDigits: 4, + MinFractionDigits: 1, + MaxFractionDigits: 2, + MinExponentDigits: 1, + }, +}, { + "#00.0E+0", + &Pattern{ + FormatWidth: 8, + Flags: AlwaysExpSign, + MinIntegerDigits: 2, + MaxIntegerDigits: 3, + MinFractionDigits: 1, + MaxFractionDigits: 1, + MinExponentDigits: 1, + }, +}, { + "0.0E++0", + nil, +}, { + "#0E+", + nil, +}, { + // significant digits + "@", + &Pattern{ + FormatWidth: 1, + MinSignificantDigits: 1, + MaxSignificantDigits: 1, + }, +}, { + // significant digits + "@@@@", + &Pattern{ + FormatWidth: 4, + MinSignificantDigits: 4, + MaxSignificantDigits: 4, + }, +}, { + "@###", + &Pattern{ + FormatWidth: 4, + MinSignificantDigits: 1, + MaxSignificantDigits: 4, + }, +}, { + // Exponents in significant digits mode gets normalized. + "@@E0", + &Pattern{ + FormatWidth: 4, + MinIntegerDigits: 1, + MaxIntegerDigits: 1, + MinFractionDigits: 1, + MaxFractionDigits: 1, + MinExponentDigits: 1, + }, +}, { + "@###E00", + &Pattern{ + FormatWidth: 7, + MinIntegerDigits: 1, + MaxIntegerDigits: 1, + MinFractionDigits: 0, + MaxFractionDigits: 3, + MinExponentDigits: 2, + }, +}, { + // The significant digits mode does not allow fractions. + "@###.#E0", + nil, +}, { + //alternative negative pattern + "#0.###;(#0.###)", + &Pattern{ + Affix: "\x00\x00\x01(\x01)", + NegOffset: 2, + FormatWidth: 6, + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, +}, { + // Rounding increments + "1.05", + &Pattern{ + RoundIncrement: 105, + FormatWidth: 4, + MinIntegerDigits: 1, + MinFractionDigits: 2, + MaxFractionDigits: 2, + }, +}, { + "0.0%", + &Pattern{ + Affix: "\x00\x01%", + Multiplier: 100, + FormatWidth: 4, + MinIntegerDigits: 1, + MinFractionDigits: 1, + MaxFractionDigits: 1, + }, +}, { + "0.0‰", + &Pattern{ + Affix: "\x00\x03‰", + Multiplier: 1000, + FormatWidth: 4, + MinIntegerDigits: 1, + MinFractionDigits: 1, + MaxFractionDigits: 1, + }, +}, { + "#,##0.00¤", + &Pattern{ + Affix: "\x00\x02¤", + FormatWidth: 9, + GroupingSize: [2]uint8{3, 0}, + MinIntegerDigits: 1, + MinFractionDigits: 2, + MaxFractionDigits: 2, + }, +}, { + "#,##0.00 ¤;(#,##0.00 ¤)", + &Pattern{Affix: "\x00\x04\u00a0¤\x01(\x05\u00a0¤)", + NegOffset: 6, + Multiplier: 0, + FormatWidth: 10, + GroupingSize: [2]uint8{3, 0}, + MinIntegerDigits: 1, + MinFractionDigits: 2, + MaxFractionDigits: 2, + }, +}, { + // padding + "*x#", + &Pattern{ + PadRune: 'x', + FormatWidth: 1, + }, +}, { + // padding + "#*x", + &Pattern{ + PadRune: 'x', + FormatWidth: 1, + Flags: PadBeforeSuffix, + }, +}, { + "*xpre#suf", + &Pattern{ + Affix: "\x03pre\x03suf", + PadRune: 'x', + FormatWidth: 7, + }, +}, { + "pre*x#suf", + &Pattern{ + Affix: "\x03pre\x03suf", + PadRune: 'x', + FormatWidth: 7, + Flags: PadAfterPrefix, + }, +}, { + "pre#*xsuf", + &Pattern{ + Affix: "\x03pre\x03suf", + PadRune: 'x', + FormatWidth: 7, + Flags: PadBeforeSuffix, + }, +}, { + "pre#suf*x", + &Pattern{ + Affix: "\x03pre\x03suf", + PadRune: 'x', + FormatWidth: 7, + Flags: PadAfterSuffix, + }, +}, { + // no duplicate padding + "*xpre#suf*x", nil, +}, { + // no duplicate padding + "*xpre#suf*x", nil, +}} + +func TestParsePattern(t *testing.T) { + for i, tc := range testCases { + f, err := ParsePattern(tc.pat) + if !reflect.DeepEqual(f, tc.want) { + t.Errorf("%d:%s:\ngot %#v;\nwant %#v", i, tc.pat, f, tc.want) + } + if got, want := err != nil, tc.want == nil; got != want { + t.Errorf("%d:%s:error: got %v; want %v", i, tc.pat, err, want) + } + } +} + +func TestPatternSize(t *testing.T) { + if sz := unsafe.Sizeof(Pattern{}); sz > 48 { + t.Errorf("got %d; want 48", sz) + } + +} diff --git a/vendor/golang.org/x/text/internal/number/plural.go b/vendor/golang.org/x/text/internal/number/plural.go new file mode 100644 index 0000000..5714e11 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/plural.go @@ -0,0 +1,119 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package number + +import "golang.org/x/text/internal/format/plural" + +type pluralRules struct { + rules []pluralCheck + index []byte + langToIndex []byte + inclusionMasks []uint64 +} + +var ( + ordinalData = pluralRules{ + ordinalRules, + ordinalIndex, + ordinalLangToIndex, + ordinalInclusionMasks[:], + } + cardinalData = pluralRules{ + cardinalRules, + cardinalIndex, + cardinalLangToIndex, + cardinalInclusionMasks[:], + } +) + +// See gen_plural.go for an explanation of the algorithm. + +func matchPlural(p *pluralRules, index int, n, f, v int) plural.Form { + nMask := p.inclusionMasks[n%maxMod] + // Compute the fMask inline in the rules below, as it is relatively rare. + // fMask := p.inclusionMasks[f%maxMod] + vMask := p.inclusionMasks[v%maxMod] + + // Do the matching + offset := p.langToIndex[index] + rules := p.rules[p.index[offset]:p.index[offset+1]] + for i := 0; i < len(rules); i++ { + rule := rules[i] + setBit := uint64(1 << rule.setID) + var skip bool + switch op := opID(rule.cat >> opShift); op { + case opI: // i = x + skip = n >= numN || nMask&setBit == 0 + + case opI | opNotEqual: // i != x + skip = n < numN && nMask&setBit != 0 + + case opI | opMod: // i % m = x + skip = nMask&setBit == 0 + + case opI | opMod | opNotEqual: // i % m != x + skip = nMask&setBit != 0 + + case opN: // n = x + skip = f != 0 || n >= numN || nMask&setBit == 0 + + case opN | opNotEqual: // n != x + skip = f == 0 && n < numN && nMask&setBit != 0 + + case opN | opMod: // n % m = x + skip = f != 0 || nMask&setBit == 0 + + case opN | opMod | opNotEqual: // n % m != x + skip = f == 0 && nMask&setBit != 0 + + case opF: // f = x + skip = f >= numN || p.inclusionMasks[f%maxMod]&setBit == 0 + + case opF | opNotEqual: // f != x + skip = f < numN && p.inclusionMasks[f%maxMod]&setBit != 0 + + case opF | opMod: // f % m = x + skip = p.inclusionMasks[f%maxMod]&setBit == 0 + + case opF | opMod | opNotEqual: // f % m != x + skip = p.inclusionMasks[f%maxMod]&setBit != 0 + + case opV: // v = x + skip = v < numN && vMask&setBit == 0 + + case opV | opNotEqual: // v != x + skip = v < numN && vMask&setBit != 0 + + case opW: // w == 0 + skip = f != 0 + + case opW | opNotEqual: // w != 0 + skip = f == 0 + + // Hard-wired rules that cannot be handled by our algorithm. + + case opBretonM: + skip = f != 0 || n == 0 || n%1000000 != 0 + + case opAzerbaijan00s: + // 100,200,300,400,500,600,700,800,900 + skip = n == 0 || n >= 1000 || n%100 != 0 + + case opItalian800: + skip = (f != 0 || n >= numN || nMask&setBit == 0) && n != 800 + } + if skip { + // advance over AND entries. + for ; i < len(rules) && rules[i].cat&formMask == andNext; i++ { + } + continue + } + // return if we have a final entry. + if cat := rule.cat & formMask; cat != andNext { + return plural.Form(cat) + } + } + return plural.Other +} diff --git a/vendor/golang.org/x/text/internal/number/plural_test.go b/vendor/golang.org/x/text/internal/number/plural_test.go new file mode 100644 index 0000000..3383d8c --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/plural_test.go @@ -0,0 +1,110 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package number + +import ( + "strconv" + "strings" + "testing" + + "golang.org/x/text/language" +) + +func TestOrdinal(t *testing.T) { + testPlurals(t, &ordinalData, ordinalTests) +} + +func TestCardinal(t *testing.T) { + testPlurals(t, &cardinalData, cardinalTests) +} + +func testPlurals(t *testing.T, p *pluralRules, testCases []pluralTest) { + for _, tc := range testCases { + for _, loc := range strings.Split(tc.locales, " ") { + langIndex, _ := language.CompactIndex(language.MustParse(loc)) + // Test integers + for _, s := range tc.integer { + a := strings.Split(s, "~") + from := parseUint(t, a[0]) + to := from + if len(a) > 1 { + to = parseUint(t, a[1]) + } + for n := from; n <= to; n++ { + if f := matchPlural(p, langIndex, n, 0, 0); f != tc.form { + t.Errorf("%s:int(%d) = %v; want %v", loc, n, f, tc.form) + } + } + } + // Test decimals + for _, s := range tc.decimal { + a := strings.Split(s, "~") + from, scale := parseFixedPoint(t, a[0]) + to := from + if len(a) > 1 { + var toScale int + if to, toScale = parseFixedPoint(t, a[1]); toScale != scale { + t.Fatalf("%s:%s: non-matching scales %d versus %d", loc, s, scale, toScale) + } + } + m := 1 + for i := 0; i < scale; i++ { + m *= 10 + } + for n := from; n <= to; n++ { + if f := matchPlural(p, langIndex, n/m, n%m, scale); f != tc.form { + t.Errorf("%[1]s:dec(%[2]d.%0[4]*[3]d) = %[5]v; want %[6]v", loc, n/m, n%m, scale, f, tc.form) + } + } + } + } + } +} + +func parseUint(t *testing.T, s string) int { + val, err := strconv.ParseUint(s, 10, 32) + if err != nil { + t.Fatal(err) + } + return int(val) +} + +func parseFixedPoint(t *testing.T, s string) (val, scale int) { + p := strings.Index(s, ".") + s = strings.Replace(s, ".", "", 1) + v, err := strconv.ParseUint(s, 10, 32) + if err != nil { + t.Fatal(err) + } + return int(v), len(s) - p +} + +func BenchmarkPluralSimpleCases(b *testing.B) { + p := &cardinalData + en, _ := language.CompactIndex(language.English) + zh, _ := language.CompactIndex(language.Chinese) + for i := 0; i < b.N; i++ { + matchPlural(p, en, 0, 0, 0) // 0 + matchPlural(p, en, 1, 0, 0) // 1 + matchPlural(p, en, 2, 12, 3) // 2.120 + matchPlural(p, zh, 0, 0, 0) // 0 + matchPlural(p, zh, 1, 0, 0) // 1 + matchPlural(p, zh, 2, 12, 3) // 2.120 + } +} + +func BenchmarkPluralComplexCases(b *testing.B) { + p := &cardinalData + ar, _ := language.CompactIndex(language.Arabic) + lv, _ := language.CompactIndex(language.Latvian) + for i := 0; i < b.N; i++ { + matchPlural(p, lv, 0, 19, 2) // 0.19 + matchPlural(p, lv, 11, 0, 3) // 11.000 + matchPlural(p, lv, 100, 123, 4) // 0.1230 + matchPlural(p, ar, 0, 0, 0) // 0 + matchPlural(p, ar, 110, 0, 0) // 110 + matchPlural(p, ar, 99, 99, 2) // 99.99 + } +} diff --git a/vendor/golang.org/x/text/internal/number/tables.go b/vendor/golang.org/x/text/internal/number/tables.go new file mode 100644 index 0000000..845e0b1 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/tables.go @@ -0,0 +1,1652 @@ +// This file was generated by go generate; DO NOT EDIT + +package number + +import "golang.org/x/text/internal/stringset" + +// CLDRVersion is the CLDR version from which the tables in this package are derived. +const CLDRVersion = "30" + +var numSysData = []systemData{ // 58 elements + 0: {id: 0x0, digitSize: 0x1, zero: [4]uint8{0x30, 0x0, 0x0, 0x0}}, + 1: {id: 0x1, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9e, 0xa5, 0x90}}, + 2: {id: 0x2, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x9c, 0xb0}}, + 3: {id: 0x3, digitSize: 0x2, zero: [4]uint8{0xd9, 0xa0, 0x0, 0x0}}, + 4: {id: 0x4, digitSize: 0x2, zero: [4]uint8{0xdb, 0xb0, 0x0, 0x0}}, + 5: {id: 0x5, digitSize: 0x3, zero: [4]uint8{0xe1, 0xad, 0x90, 0x0}}, + 6: {id: 0x6, digitSize: 0x3, zero: [4]uint8{0xe0, 0xa7, 0xa6, 0x0}}, + 7: {id: 0x7, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0xb1, 0x90}}, + 8: {id: 0x8, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x81, 0xa6}}, + 9: {id: 0x9, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x84, 0xb6}}, + 10: {id: 0xa, digitSize: 0x3, zero: [4]uint8{0xea, 0xa9, 0x90, 0x0}}, + 11: {id: 0xb, digitSize: 0x3, zero: [4]uint8{0xe0, 0xa5, 0xa6, 0x0}}, + 12: {id: 0xc, digitSize: 0x3, zero: [4]uint8{0xef, 0xbc, 0x90, 0x0}}, + 13: {id: 0xd, digitSize: 0x3, zero: [4]uint8{0xe0, 0xab, 0xa6, 0x0}}, + 14: {id: 0xe, digitSize: 0x3, zero: [4]uint8{0xe0, 0xa9, 0xa6, 0x0}}, + 15: {id: 0xf, digitSize: 0x4, zero: [4]uint8{0xf0, 0x96, 0xad, 0x90}}, + 16: {id: 0x10, digitSize: 0x3, zero: [4]uint8{0xea, 0xa7, 0x90, 0x0}}, + 17: {id: 0x11, digitSize: 0x3, zero: [4]uint8{0xea, 0xa4, 0x80, 0x0}}, + 18: {id: 0x12, digitSize: 0x3, zero: [4]uint8{0xe1, 0x9f, 0xa0, 0x0}}, + 19: {id: 0x13, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb3, 0xa6, 0x0}}, + 20: {id: 0x14, digitSize: 0x3, zero: [4]uint8{0xe1, 0xaa, 0x80, 0x0}}, + 21: {id: 0x15, digitSize: 0x3, zero: [4]uint8{0xe1, 0xaa, 0x90, 0x0}}, + 22: {id: 0x16, digitSize: 0x3, zero: [4]uint8{0xe0, 0xbb, 0x90, 0x0}}, + 23: {id: 0x17, digitSize: 0x3, zero: [4]uint8{0xe1, 0xb1, 0x80, 0x0}}, + 24: {id: 0x18, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa5, 0x86, 0x0}}, + 25: {id: 0x19, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0x8e}}, + 26: {id: 0x1a, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0x98}}, + 27: {id: 0x1b, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xb6}}, + 28: {id: 0x1c, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xac}}, + 29: {id: 0x1d, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xa2}}, + 30: {id: 0x1e, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb5, 0xa6, 0x0}}, + 31: {id: 0x1f, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x99, 0x90}}, + 32: {id: 0x20, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa0, 0x90, 0x0}}, + 33: {id: 0x21, digitSize: 0x4, zero: [4]uint8{0xf0, 0x96, 0xa9, 0xa0}}, + 34: {id: 0x22, digitSize: 0x3, zero: [4]uint8{0xea, 0xaf, 0xb0, 0x0}}, + 35: {id: 0x23, digitSize: 0x3, zero: [4]uint8{0xe1, 0x81, 0x80, 0x0}}, + 36: {id: 0x24, digitSize: 0x3, zero: [4]uint8{0xe1, 0x82, 0x90, 0x0}}, + 37: {id: 0x25, digitSize: 0x3, zero: [4]uint8{0xea, 0xa7, 0xb0, 0x0}}, + 38: {id: 0x26, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x91, 0x90}}, + 39: {id: 0x27, digitSize: 0x2, zero: [4]uint8{0xdf, 0x80, 0x0, 0x0}}, + 40: {id: 0x28, digitSize: 0x3, zero: [4]uint8{0xe1, 0xb1, 0x90, 0x0}}, + 41: {id: 0x29, digitSize: 0x3, zero: [4]uint8{0xe0, 0xad, 0xa6, 0x0}}, + 42: {id: 0x2a, digitSize: 0x4, zero: [4]uint8{0xf0, 0x90, 0x92, 0xa0}}, + 43: {id: 0x2b, digitSize: 0x3, zero: [4]uint8{0xea, 0xa3, 0x90, 0x0}}, + 44: {id: 0x2c, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x87, 0x90}}, + 45: {id: 0x2d, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x8b, 0xb0}}, + 46: {id: 0x2e, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb7, 0xa6, 0x0}}, + 47: {id: 0x2f, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x83, 0xb0}}, + 48: {id: 0x30, digitSize: 0x3, zero: [4]uint8{0xe1, 0xae, 0xb0, 0x0}}, + 49: {id: 0x31, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x9b, 0x80}}, + 50: {id: 0x32, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa7, 0x90, 0x0}}, + 51: {id: 0x33, digitSize: 0x3, zero: [4]uint8{0xe0, 0xaf, 0xa6, 0x0}}, + 52: {id: 0x34, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb1, 0xa6, 0x0}}, + 53: {id: 0x35, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb9, 0x90, 0x0}}, + 54: {id: 0x36, digitSize: 0x3, zero: [4]uint8{0xe0, 0xbc, 0xa0, 0x0}}, + 55: {id: 0x37, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x93, 0x90}}, + 56: {id: 0x38, digitSize: 0x3, zero: [4]uint8{0xea, 0x98, 0xa0, 0x0}}, + 57: {id: 0x39, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0xa3, 0xa0}}, +} // Size: 372 bytes + +const ( + numAdlm = 0x1 + numAhom = 0x2 + numArab = 0x3 + numArabext = 0x4 + numArmn = 0x3a + numArmnlow = 0x3b + numBali = 0x5 + numBeng = 0x6 + numBhks = 0x7 + numBrah = 0x8 + numCakm = 0x9 + numCham = 0xa + numCyrl = 0x3c + numDeva = 0xb + numEthi = 0x3d + numFullwide = 0xc + numGeor = 0x3e + numGrek = 0x3f + numGreklow = 0x40 + numGujr = 0xd + numGuru = 0xe + numHanidays = 0x41 + numHanidec = 0x42 + numHans = 0x43 + numHansfin = 0x44 + numHant = 0x45 + numHantfin = 0x46 + numHebr = 0x47 + numHmng = 0xf + numJava = 0x10 + numJpan = 0x48 + numJpanfin = 0x49 + numKali = 0x11 + numKhmr = 0x12 + numKnda = 0x13 + numLana = 0x14 + numLanatham = 0x15 + numLaoo = 0x16 + numLatn = 0x0 + numLepc = 0x17 + numLimb = 0x18 + numMathbold = 0x19 + numMathdbl = 0x1a + numMathmono = 0x1b + numMathsanb = 0x1c + numMathsans = 0x1d + numMlym = 0x1e + numModi = 0x1f + numMong = 0x20 + numMroo = 0x21 + numMtei = 0x22 + numMymr = 0x23 + numMymrshan = 0x24 + numMymrtlng = 0x25 + numNewa = 0x26 + numNkoo = 0x27 + numOlck = 0x28 + numOrya = 0x29 + numOsma = 0x2a + numRoman = 0x4a + numRomanlow = 0x4b + numSaur = 0x2b + numShrd = 0x2c + numSind = 0x2d + numSinh = 0x2e + numSora = 0x2f + numSund = 0x30 + numTakr = 0x31 + numTalu = 0x32 + numTaml = 0x4c + numTamldec = 0x33 + numTelu = 0x34 + numThai = 0x35 + numTibt = 0x36 + numTirh = 0x37 + numVaii = 0x38 + numWara = 0x39 + numNumberSystems +) + +var systemMap = map[string]system{ + "adlm": numAdlm, + "ahom": numAhom, + "arab": numArab, + "arabext": numArabext, + "armn": numArmn, + "armnlow": numArmnlow, + "bali": numBali, + "beng": numBeng, + "bhks": numBhks, + "brah": numBrah, + "cakm": numCakm, + "cham": numCham, + "cyrl": numCyrl, + "deva": numDeva, + "ethi": numEthi, + "fullwide": numFullwide, + "geor": numGeor, + "grek": numGrek, + "greklow": numGreklow, + "gujr": numGujr, + "guru": numGuru, + "hanidays": numHanidays, + "hanidec": numHanidec, + "hans": numHans, + "hansfin": numHansfin, + "hant": numHant, + "hantfin": numHantfin, + "hebr": numHebr, + "hmng": numHmng, + "java": numJava, + "jpan": numJpan, + "jpanfin": numJpanfin, + "kali": numKali, + "khmr": numKhmr, + "knda": numKnda, + "lana": numLana, + "lanatham": numLanatham, + "laoo": numLaoo, + "latn": numLatn, + "lepc": numLepc, + "limb": numLimb, + "mathbold": numMathbold, + "mathdbl": numMathdbl, + "mathmono": numMathmono, + "mathsanb": numMathsanb, + "mathsans": numMathsans, + "mlym": numMlym, + "modi": numModi, + "mong": numMong, + "mroo": numMroo, + "mtei": numMtei, + "mymr": numMymr, + "mymrshan": numMymrshan, + "mymrtlng": numMymrtlng, + "newa": numNewa, + "nkoo": numNkoo, + "olck": numOlck, + "orya": numOrya, + "osma": numOsma, + "roman": numRoman, + "romanlow": numRomanlow, + "saur": numSaur, + "shrd": numShrd, + "sind": numSind, + "sinh": numSinh, + "sora": numSora, + "sund": numSund, + "takr": numTakr, + "talu": numTalu, + "taml": numTaml, + "tamldec": numTamldec, + "telu": numTelu, + "thai": numThai, + "tibt": numTibt, + "tirh": numTirh, + "vaii": numVaii, + "wara": numWara, +} + +var symIndex = [][12]uint8{ // 71 elements + 0: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 1: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 2: [12]uint8{0x0, 0x1, 0x2, 0xd, 0xe, 0xf, 0x6, 0x7, 0x8, 0x9, 0x10, 0xb}, + 3: [12]uint8{0x1, 0x0, 0x2, 0xd, 0xe, 0xf, 0x6, 0x7, 0x8, 0x9, 0x10, 0xb}, + 4: [12]uint8{0x0, 0x1, 0x2, 0x11, 0xe, 0xf, 0x6, 0x7, 0x8, 0x9, 0x10, 0xb}, + 5: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x12, 0xb}, + 6: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 7: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x13, 0x8, 0x9, 0xa, 0xb}, + 8: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x14, 0xb}, + 9: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 10: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, + 11: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x13, 0x8, 0x9, 0xa, 0xb}, + 12: [12]uint8{0x0, 0x15, 0x2, 0x3, 0x4, 0x5, 0x6, 0x13, 0x8, 0x9, 0xa, 0xb}, + 13: [12]uint8{0x0, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 14: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x16, 0xb}, + 15: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, + 16: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, + 17: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, + 18: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x18, 0x7, 0x8, 0x9, 0xa, 0xb}, + 19: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x19, 0x1a, 0xa, 0xb}, + 20: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 21: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x7, 0x8, 0x9, 0xa, 0xb}, + 22: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0x1c, 0x6, 0x7, 0x8, 0x9, 0x1d, 0xb}, + 23: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0x1e, 0x0}, + 24: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 25: [12]uint8{0x0, 0x1f, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 26: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 27: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x20, 0xb}, + 28: [12]uint8{0x0, 0x15, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 29: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x21, 0xb}, + 30: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x22, 0xb}, + 31: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x13, 0x8, 0x9, 0x23, 0xb}, + 32: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x7, 0x8, 0x9, 0x23, 0xb}, + 33: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x24, 0xb}, + 34: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x25, 0xb}, + 35: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x26, 0xb}, + 36: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x27, 0xb}, + 37: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x28, 0xb}, + 38: [12]uint8{0x1, 0x0, 0x2, 0x3, 0xe, 0x1c, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 39: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x29, 0xb}, + 40: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2a, 0xb}, + 41: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x2b, 0x13, 0x8, 0x9, 0x23, 0xb}, + 42: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, + 43: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, + 44: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x2c, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, + 45: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2d, 0x0}, + 46: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2e, 0xb}, + 47: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2f, 0xb}, + 48: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x30, 0x7, 0x8, 0x9, 0xa, 0xb}, + 49: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x31, 0xb}, + 50: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x32, 0xb}, + 51: [12]uint8{0x1, 0x1f, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 52: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x33, 0xb}, + 53: [12]uint8{0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x7, 0x3b, 0x9, 0xa, 0xb}, + 54: [12]uint8{0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x7, 0x3b, 0x9, 0x3c, 0xb}, + 55: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x38, 0x39, 0x3a, 0x7, 0x3b, 0x9, 0xa, 0xb}, + 56: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x38, 0x3d, 0x3a, 0x7, 0x3b, 0x9, 0xa, 0xb}, + 57: [12]uint8{0x34, 0xc, 0x36, 0x37, 0x38, 0x3e, 0x3a, 0x7, 0x3b, 0x9, 0xa, 0x0}, + 58: [12]uint8{0x34, 0x35, 0x36, 0x37, 0x38, 0x3e, 0x3a, 0x7, 0x3f, 0x9, 0x23, 0xb}, + 59: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x40, 0x41, 0x42, 0x7, 0x3b, 0x9, 0xa, 0x34}, + 60: [12]uint8{0x34, 0x35, 0x36, 0x43, 0xe, 0x1c, 0x42, 0x7, 0x3b, 0x9, 0x1d, 0xb}, + 61: [12]uint8{0x34, 0x35, 0x36, 0x11, 0xe, 0x1c, 0x42, 0x7, 0x3b, 0x9, 0xa, 0x34}, + 62: [12]uint8{0x1, 0xc, 0x36, 0x11, 0x40, 0x44, 0x42, 0x7, 0x3b, 0x9, 0xa, 0x0}, + 63: [12]uint8{0x34, 0x1, 0x36, 0x11, 0x4, 0x5, 0x42, 0x7, 0x3b, 0x9, 0xa, 0x34}, + 64: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x40, 0x44, 0x42, 0x7, 0x3b, 0x9, 0x23, 0xb}, + 65: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x40, 0x41, 0x42, 0x7, 0x8, 0x9, 0xa, 0x34}, + 66: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x4, 0x5, 0x42, 0x7, 0x3b, 0x9, 0x31, 0x34}, + 67: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x4, 0x5, 0x42, 0x7, 0x3b, 0x9, 0x32, 0x34}, + 68: [12]uint8{0x0, 0x1, 0x45, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x27, 0xb}, + 69: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x46, 0xb}, + 70: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x47, 0x48, 0xb}, +} // Size: 876 bytes + +var symData = stringset.Set{ + Data: "" + // Size: 584 bytes + ".,;%+-E׉∞NaN:\u00a0\u200e%\u200e\u200e+\u200e-ليس\u00a0رقمًا٪ND·Терхьаш" + + "\u00a0дац'mnne×10^0/00INF−\u200e−ناعددepäluku’ՈչԹარ\u00a0არის\u00a0რიცხვ" + + "იсан\u00a0емес¤¤¤сан\u00a0эмесບໍ່\u200bແມ່ນ\u200bໂຕ\u200bເລກNSဂဏန်းမဟု" + + "တ်သောННне\u00a0числочыыһыла\u00a0буотах·10^–epilohosan\u00a0dälTFЕhaqi" + + "qiy\u00a0son\u00a0emasҳақиқий\u00a0сон\u00a0эмас非數值٫٬؛٪\u061c\u061c+" + + "\u061c-اس؉ليس\u00a0رقم\u200f−\u061c−؉\u200f\u200e+\u200e\u200e-\u200e×۱۰" + + "^\u200e٪\u200e−\u200e၊ཨང་མེན་གྲངས་མེདཨང་མད", + Index: []uint16{ // 74 elements + // Entry 0 - 3F + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0009, 0x000c, 0x000f, 0x0012, 0x0013, 0x0015, 0x001c, 0x0020, + 0x0024, 0x0036, 0x0038, 0x003a, 0x003c, 0x0052, 0x0053, 0x0056, + 0x0057, 0x005c, 0x0060, 0x0063, 0x0066, 0x006c, 0x0076, 0x007e, + 0x0081, 0x0087, 0x00af, 0x00bf, 0x00c5, 0x00d5, 0x0102, 0x0104, + 0x012b, 0x012f, 0x013f, 0x015b, 0x0160, 0x0163, 0x016a, 0x0173, + 0x0175, 0x0177, 0x0189, 0x01a9, 0x01b2, 0x01b4, 0x01b6, 0x01b8, + 0x01bc, 0x01bf, 0x01c2, 0x01c6, 0x01c8, 0x01d6, 0x01dc, 0x01e1, + // Entry 40 - 7F + 0x01e6, 0x01ed, 0x01f4, 0x01fb, 0x0200, 0x0209, 0x020c, 0x0221, + 0x0239, 0x0248, + }, +} // Size: 772 bytes + +// langToDefaults maps a compact language index to the default numbering system +// and default symbol set +var langToDefaults = [752]uint8{ + // Entry 0 - 3F + 0x80, 0x06, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x83, 0x02, 0x02, 0x02, + 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, + 0x02, 0x04, 0x02, 0x04, 0x02, 0x02, 0x02, 0x03, + 0x02, 0x00, 0x85, 0x00, 0x00, 0x00, 0x86, 0x05, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, + // Entry 40 - 7F + 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, + 0x8c, 0x01, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x8e, 0x09, 0x09, 0x90, + 0x01, 0x01, 0x01, 0x93, 0x00, 0x0a, 0x0a, 0x0a, + 0x00, 0x00, 0x0b, 0x07, 0x0b, 0x0c, 0x0b, 0x0b, + 0x0c, 0x0b, 0x0d, 0x0d, 0x0b, 0x0b, 0x01, 0x01, + 0x00, 0x01, 0x01, 0x95, 0x00, 0x00, 0x00, 0x0e, + // Entry 80 - BF + 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x0b, 0x10, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0a, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry C0 - FF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x14, + 0x06, 0x00, 0x06, 0x06, 0x00, 0x06, 0x06, 0x01, + 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, + // Entry 100 - 13F + 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, + 0x00, 0x00, 0x06, 0x06, 0x15, 0x15, 0x06, 0x06, + 0x01, 0x01, 0x97, 0x16, 0x16, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x17, 0x17, 0x00, 0x00, 0x18, 0x18, + 0x18, 0x9a, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x0d, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 140 - 17F + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x9d, 0x00, + 0x06, 0x06, 0x19, 0x19, 0x19, 0x19, 0xa0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1a, 0x1a, 0x00, 0x00, 0x06, + 0x06, 0x06, 0x0b, 0x0b, 0x01, 0x01, 0x1b, 0x1b, + 0x0a, 0x0a, 0xa2, 0x00, 0x00, 0x00, 0x06, 0x06, + // Entry 180 - 1BF + 0x06, 0x1c, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x06, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x0d, 0x0d, 0x00, 0x00, 0x1e, 0x1e, 0x06, + 0x06, 0x1f, 0x1f, 0x00, 0x00, 0x06, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x1a, + 0x00, 0x00, 0x01, 0x01, 0x20, 0x20, 0x00, 0x00, + 0x00, 0x21, 0x21, 0x00, 0x00, 0x06, 0x06, 0x00, + // Entry 1C0 - 1FF + 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x22, 0x22, 0xa7, 0x00, 0x00, 0x15, 0x15, 0x06, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x23, 0x23, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x00, 0x00, + 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, + 0x00, 0x00, 0xa9, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x06, 0xaa, 0x24, 0xac, 0x00, + 0x00, 0x00, 0x00, 0xad, 0x14, 0x14, 0x00, 0x00, + // Entry 200 - 23F + 0x06, 0x06, 0x06, 0xb0, 0x00, 0x00, 0xb1, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, + 0x14, 0x14, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0x25, 0x25, 0xb4, 0xb6, 0x1a, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0xb8, + 0x26, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x06, + // Entry 240 - 27F + 0x00, 0x00, 0x19, 0x19, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x00, 0x00, 0x27, 0x27, 0x27, 0x27, 0x27, + 0x27, 0x27, 0x06, 0x06, 0x00, 0x00, 0x28, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x29, 0x29, + 0x29, 0x06, 0x06, 0x0d, 0x0d, 0x06, 0x06, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x2a, 0x2a, 0x2b, 0x2b, + 0x2c, 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x2d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + // Entry 280 - 2BF + 0x01, 0x01, 0x01, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, + 0x00, 0xba, 0x20, 0x20, 0x20, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x00, 0x2f, 0x2f, + 0x06, 0x06, 0x06, 0x00, 0x0d, 0x0d, 0x01, 0x01, + 0x00, 0x00, 0x30, 0x30, 0xbd, 0xbf, 0x1a, 0xc0, + // Entry 2C0 - 2FF + 0xc2, 0x26, 0xc4, 0x32, 0x31, 0x31, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x34, 0x01, 0x01, 0xc6, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x34, 0x34, 0x34, 0x34, 0x00, 0x00, +} // Size: 752 bytes + +// langToAlt is a list of numbering system and symbol set pairs, sorted and +// marked by compact language index. +var langToAlt = []altSymData{ // 73 elements + 1: {compactTag: 0x0, system: 0x3, symIndex: 0x35}, + 2: {compactTag: 0x0, system: 0x4, symIndex: 0x3b}, + 3: {compactTag: 0xc, system: 0x3, symIndex: 0x36}, + 4: {compactTag: 0xc, system: 0x0, symIndex: 0x2}, + 5: {compactTag: 0x2a, system: 0x6, symIndex: 0x0}, + 6: {compactTag: 0x2e, system: 0x0, symIndex: 0x5}, + 7: {compactTag: 0x2e, system: 0x3, symIndex: 0x37}, + 8: {compactTag: 0x2e, system: 0x4, symIndex: 0x3b}, + 9: {compactTag: 0x42, system: 0x6, symIndex: 0x0}, + 10: {compactTag: 0x45, system: 0x0, symIndex: 0x0}, + 11: {compactTag: 0x45, system: 0x36, symIndex: 0x45}, + 12: {compactTag: 0x48, system: 0x0, symIndex: 0x1}, + 13: {compactTag: 0x48, system: 0x3, symIndex: 0x35}, + 14: {compactTag: 0x5c, system: 0x3, symIndex: 0x37}, + 15: {compactTag: 0x5c, system: 0x0, symIndex: 0x9}, + 16: {compactTag: 0x5f, system: 0x0, symIndex: 0x1}, + 17: {compactTag: 0x5f, system: 0x3, symIndex: 0x35}, + 18: {compactTag: 0x5f, system: 0x4, symIndex: 0x3b}, + 19: {compactTag: 0x63, system: 0x0, symIndex: 0x0}, + 20: {compactTag: 0x63, system: 0x3, symIndex: 0x35}, + 21: {compactTag: 0x7b, system: 0x36, symIndex: 0x46}, + 22: {compactTag: 0x7b, system: 0x0, symIndex: 0x0}, + 23: {compactTag: 0x112, system: 0x4, symIndex: 0x3c}, + 24: {compactTag: 0x112, system: 0x0, symIndex: 0x16}, + 25: {compactTag: 0x112, system: 0x3, symIndex: 0x37}, + 26: {compactTag: 0x121, system: 0x0, symIndex: 0x1}, + 27: {compactTag: 0x121, system: 0x3, symIndex: 0x38}, + 28: {compactTag: 0x121, system: 0x4, symIndex: 0x3d}, + 29: {compactTag: 0x156, system: 0x0, symIndex: 0x0}, + 30: {compactTag: 0x156, system: 0x3, symIndex: 0x37}, + 31: {compactTag: 0x156, system: 0x4, symIndex: 0x3b}, + 32: {compactTag: 0x15e, system: 0x0, symIndex: 0x0}, + 33: {compactTag: 0x15e, system: 0x3, symIndex: 0x35}, + 34: {compactTag: 0x17a, system: 0x0, symIndex: 0x0}, + 35: {compactTag: 0x17a, system: 0x3, symIndex: 0x35}, + 36: {compactTag: 0x17a, system: 0x4, symIndex: 0x3b}, + 37: {compactTag: 0x1ae, system: 0x4, symIndex: 0x3b}, + 38: {compactTag: 0x1ae, system: 0x0, symIndex: 0x1a}, + 39: {compactTag: 0x1ca, system: 0x4, symIndex: 0x3b}, + 40: {compactTag: 0x1ca, system: 0x0, symIndex: 0x0}, + 41: {compactTag: 0x1ea, system: 0xb, symIndex: 0x0}, + 42: {compactTag: 0x1f4, system: 0x23, symIndex: 0x44}, + 43: {compactTag: 0x1f4, system: 0x0, symIndex: 0x24}, + 44: {compactTag: 0x1f6, system: 0x4, symIndex: 0x3b}, + 45: {compactTag: 0x1fb, system: 0x0, symIndex: 0x14}, + 46: {compactTag: 0x1fb, system: 0x3, symIndex: 0x39}, + 47: {compactTag: 0x1fb, system: 0x4, symIndex: 0x3e}, + 48: {compactTag: 0x203, system: 0xb, symIndex: 0x0}, + 49: {compactTag: 0x206, system: 0x0, symIndex: 0x6}, + 50: {compactTag: 0x206, system: 0x3, symIndex: 0x35}, + 51: {compactTag: 0x206, system: 0x4, symIndex: 0x3b}, + 52: {compactTag: 0x225, system: 0x0, symIndex: 0x0}, + 53: {compactTag: 0x225, system: 0x4, symIndex: 0x3f}, + 54: {compactTag: 0x226, system: 0x4, symIndex: 0x3b}, + 55: {compactTag: 0x226, system: 0x0, symIndex: 0x1a}, + 56: {compactTag: 0x22f, system: 0x4, symIndex: 0x3b}, + 57: {compactTag: 0x22f, system: 0x0, symIndex: 0x26}, + 58: {compactTag: 0x291, system: 0x0, symIndex: 0x20}, + 59: {compactTag: 0x291, system: 0x3, symIndex: 0x3a}, + 60: {compactTag: 0x291, system: 0x4, symIndex: 0x40}, + 61: {compactTag: 0x2bc, system: 0x0, symIndex: 0x1a}, + 62: {compactTag: 0x2bc, system: 0x4, symIndex: 0x41}, + 63: {compactTag: 0x2bd, system: 0x4, symIndex: 0x41}, + 64: {compactTag: 0x2bf, system: 0x0, symIndex: 0x31}, + 65: {compactTag: 0x2bf, system: 0x4, symIndex: 0x42}, + 66: {compactTag: 0x2c0, system: 0x4, symIndex: 0x3b}, + 67: {compactTag: 0x2c0, system: 0x0, symIndex: 0x26}, + 68: {compactTag: 0x2c2, system: 0x0, symIndex: 0x32}, + 69: {compactTag: 0x2c2, system: 0x4, symIndex: 0x43}, + 70: {compactTag: 0x2e4, system: 0x0, symIndex: 0x0}, + 71: {compactTag: 0x2e4, system: 0x3, symIndex: 0x35}, + 72: {compactTag: 0x2e4, system: 0x4, symIndex: 0x3b}, +} // Size: 316 bytes + +var ordinalRules = []pluralCheck{ // 58 elements + 0: {cat: 0x2f, setID: 0x4}, + 1: {cat: 0x3a, setID: 0x5}, + 2: {cat: 0x22, setID: 0x1}, + 3: {cat: 0x22, setID: 0x6}, + 4: {cat: 0x22, setID: 0x7}, + 5: {cat: 0x2f, setID: 0x8}, + 6: {cat: 0x3c, setID: 0x9}, + 7: {cat: 0x2f, setID: 0xa}, + 8: {cat: 0x3c, setID: 0xb}, + 9: {cat: 0x2d, setID: 0xc}, + 10: {cat: 0x2d, setID: 0xd}, + 11: {cat: 0x2f, setID: 0xe}, + 12: {cat: 0x35, setID: 0x3}, + 13: {cat: 0xc5, setID: 0xf}, + 14: {cat: 0x2, setID: 0x1}, + 15: {cat: 0x5, setID: 0x3}, + 16: {cat: 0xd, setID: 0x10}, + 17: {cat: 0x22, setID: 0x1}, + 18: {cat: 0x2f, setID: 0x11}, + 19: {cat: 0x3d, setID: 0x12}, + 20: {cat: 0x2f, setID: 0x13}, + 21: {cat: 0x3a, setID: 0x14}, + 22: {cat: 0x2f, setID: 0x15}, + 23: {cat: 0x3b, setID: 0x16}, + 24: {cat: 0x2f, setID: 0xa}, + 25: {cat: 0x3c, setID: 0xb}, + 26: {cat: 0x22, setID: 0x1}, + 27: {cat: 0x23, setID: 0x17}, + 28: {cat: 0x24, setID: 0x18}, + 29: {cat: 0x22, setID: 0x19}, + 30: {cat: 0x23, setID: 0x2}, + 31: {cat: 0x24, setID: 0x18}, + 32: {cat: 0xf, setID: 0x13}, + 33: {cat: 0x1a, setID: 0x14}, + 34: {cat: 0xf, setID: 0x15}, + 35: {cat: 0x1b, setID: 0x16}, + 36: {cat: 0xf, setID: 0x1a}, + 37: {cat: 0x1d, setID: 0x1b}, + 38: {cat: 0xa, setID: 0x1c}, + 39: {cat: 0xa, setID: 0x1d}, + 40: {cat: 0xc, setID: 0x1e}, + 41: {cat: 0xe4, setID: 0x0}, + 42: {cat: 0x5, setID: 0x3}, + 43: {cat: 0xd, setID: 0xc}, + 44: {cat: 0xd, setID: 0x1f}, + 45: {cat: 0x22, setID: 0x1}, + 46: {cat: 0x23, setID: 0x17}, + 47: {cat: 0x24, setID: 0x18}, + 48: {cat: 0x25, setID: 0x20}, + 49: {cat: 0x22, setID: 0x21}, + 50: {cat: 0x23, setID: 0x17}, + 51: {cat: 0x24, setID: 0x18}, + 52: {cat: 0x25, setID: 0x20}, + 53: {cat: 0x21, setID: 0x22}, + 54: {cat: 0x22, setID: 0x1}, + 55: {cat: 0x23, setID: 0x2}, + 56: {cat: 0x24, setID: 0x23}, + 57: {cat: 0x25, setID: 0x24}, +} // Size: 140 bytes + +var ordinalIndex = []uint8{ // 20 elements + 0x00, 0x00, 0x02, 0x03, 0x04, 0x05, 0x07, 0x09, + 0x0d, 0x0e, 0x11, 0x14, 0x1a, 0x1d, 0x20, 0x26, + 0x2d, 0x31, 0x35, 0x3a, +} // Size: 44 bytes + +var ordinalLangToIndex = []uint8{ // 752 elements + // Entry 0 - 3F + 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x05, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 40 - 7F + 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x12, 0x12, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 80 - BF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + // Entry C0 - FF + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 100 - 13F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, + 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 140 - 17F + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 180 - 1BF + 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 1C0 - 1FF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x0c, 0x02, 0x02, 0x02, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 200 - 23F + 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 240 - 27F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + // Entry 280 - 2BF + 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, + // Entry 2C0 - 2FF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +} // Size: 776 bytes + +var ordinalInclusionMasks = []uint64{ // 100 elements + // Entry 0 - 1F + 0x0000000400004009, 0x00000002120800d3, 0x0000000010a10195, 0x0000000842810581, + 0x0000000841030081, 0x0000001210010041, 0x0000001100011001, 0x0000000614010001, + 0x0000000614018001, 0x0000000600012001, 0x0000000200014001, 0x0000000010198031, + 0x0000000010610331, 0x0000000040010f01, 0x0000000040070001, 0x0000000010010001, + 0x0000000000011001, 0x000000001c010001, 0x000000001c010001, 0x0000000000012001, + 0x0000000020014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501, + 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001, + 0x0000000014000001, 0x0000000000002001, 0x0000000000004001, 0x0000000010080011, + // Entry 20 - 3F + 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001, + 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001, + 0x0000000080014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501, + 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001, + 0x0000000014000001, 0x0000000000002001, 0x0000000020004001, 0x0000000010080011, + 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001, + 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001, + 0x0000000080014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501, + // Entry 40 - 5F + 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001, + 0x0000000014000001, 0x0000000000002001, 0x0000000020004001, 0x0000000010080011, + 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001, + 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001, + 0x000000002001c001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501, + 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001, + 0x0000000014000001, 0x0000000000002001, 0x0000000080004001, 0x0000000010080011, + 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001, + // Entry 60 - 7F + 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001, +} // Size: 824 bytes + +// Slots used for ordinal: 3A of 0xFF rules; 14 of 0xFF indexes; 37 of 64 sets + +var cardinalRules = []pluralCheck{ // 169 elements + 0: {cat: 0x2, setID: 0x3}, + 1: {cat: 0x22, setID: 0x1}, + 2: {cat: 0x2, setID: 0x4}, + 3: {cat: 0x7, setID: 0x1}, + 4: {cat: 0x62, setID: 0x3}, + 5: {cat: 0x22, setID: 0x4}, + 6: {cat: 0x7, setID: 0x3}, + 7: {cat: 0x42, setID: 0x1}, + 8: {cat: 0x22, setID: 0x4}, + 9: {cat: 0x22, setID: 0x4}, + 10: {cat: 0x22, setID: 0x5}, + 11: {cat: 0x27, setID: 0x6}, + 12: {cat: 0x32, setID: 0x2}, + 13: {cat: 0x22, setID: 0x1}, + 14: {cat: 0x27, setID: 0x1}, + 15: {cat: 0x62, setID: 0x3}, + 16: {cat: 0x22, setID: 0x1}, + 17: {cat: 0x7, setID: 0x4}, + 18: {cat: 0x92, setID: 0x3}, + 19: {cat: 0xf, setID: 0x7}, + 20: {cat: 0x1f, setID: 0x8}, + 21: {cat: 0x82, setID: 0x3}, + 22: {cat: 0x92, setID: 0x3}, + 23: {cat: 0xf, setID: 0x7}, + 24: {cat: 0x62, setID: 0x3}, + 25: {cat: 0x4a, setID: 0x7}, + 26: {cat: 0x7, setID: 0x9}, + 27: {cat: 0x62, setID: 0x3}, + 28: {cat: 0x1f, setID: 0xa}, + 29: {cat: 0x62, setID: 0x3}, + 30: {cat: 0x5f, setID: 0xa}, + 31: {cat: 0x72, setID: 0x3}, + 32: {cat: 0x29, setID: 0xb}, + 33: {cat: 0x29, setID: 0xc}, + 34: {cat: 0x4f, setID: 0xc}, + 35: {cat: 0x61, setID: 0x2}, + 36: {cat: 0x2f, setID: 0x7}, + 37: {cat: 0x3a, setID: 0x8}, + 38: {cat: 0x4f, setID: 0x7}, + 39: {cat: 0x5f, setID: 0x8}, + 40: {cat: 0x62, setID: 0x2}, + 41: {cat: 0x4f, setID: 0x7}, + 42: {cat: 0x72, setID: 0x2}, + 43: {cat: 0x21, setID: 0x3}, + 44: {cat: 0x7, setID: 0x4}, + 45: {cat: 0x32, setID: 0x3}, + 46: {cat: 0x21, setID: 0x3}, + 47: {cat: 0x22, setID: 0x1}, + 48: {cat: 0x22, setID: 0x1}, + 49: {cat: 0x23, setID: 0x2}, + 50: {cat: 0x2, setID: 0x3}, + 51: {cat: 0x22, setID: 0x1}, + 52: {cat: 0x24, setID: 0xd}, + 53: {cat: 0x7, setID: 0x1}, + 54: {cat: 0x62, setID: 0x3}, + 55: {cat: 0x74, setID: 0x3}, + 56: {cat: 0x24, setID: 0x3}, + 57: {cat: 0x2f, setID: 0xe}, + 58: {cat: 0x34, setID: 0x1}, + 59: {cat: 0xf, setID: 0x7}, + 60: {cat: 0x1f, setID: 0x8}, + 61: {cat: 0x62, setID: 0x3}, + 62: {cat: 0x4f, setID: 0x7}, + 63: {cat: 0x5a, setID: 0x8}, + 64: {cat: 0xf, setID: 0xf}, + 65: {cat: 0x1f, setID: 0x10}, + 66: {cat: 0x64, setID: 0x3}, + 67: {cat: 0x4f, setID: 0xf}, + 68: {cat: 0x5c, setID: 0x10}, + 69: {cat: 0x22, setID: 0x11}, + 70: {cat: 0x23, setID: 0x12}, + 71: {cat: 0x24, setID: 0x13}, + 72: {cat: 0xf, setID: 0x1}, + 73: {cat: 0x62, setID: 0x3}, + 74: {cat: 0xf, setID: 0x2}, + 75: {cat: 0x63, setID: 0x3}, + 76: {cat: 0xf, setID: 0x14}, + 77: {cat: 0x64, setID: 0x3}, + 78: {cat: 0x74, setID: 0x3}, + 79: {cat: 0xf, setID: 0x1}, + 80: {cat: 0x62, setID: 0x3}, + 81: {cat: 0x4a, setID: 0x1}, + 82: {cat: 0xf, setID: 0x2}, + 83: {cat: 0x63, setID: 0x3}, + 84: {cat: 0x4b, setID: 0x2}, + 85: {cat: 0xf, setID: 0x14}, + 86: {cat: 0x64, setID: 0x3}, + 87: {cat: 0x4c, setID: 0x14}, + 88: {cat: 0x7, setID: 0x1}, + 89: {cat: 0x62, setID: 0x3}, + 90: {cat: 0x7, setID: 0x2}, + 91: {cat: 0x63, setID: 0x3}, + 92: {cat: 0x2f, setID: 0xb}, + 93: {cat: 0x37, setID: 0x15}, + 94: {cat: 0x65, setID: 0x3}, + 95: {cat: 0x7, setID: 0x1}, + 96: {cat: 0x62, setID: 0x3}, + 97: {cat: 0x7, setID: 0x16}, + 98: {cat: 0x64, setID: 0x3}, + 99: {cat: 0x75, setID: 0x3}, + 100: {cat: 0x7, setID: 0x1}, + 101: {cat: 0x62, setID: 0x3}, + 102: {cat: 0xf, setID: 0xf}, + 103: {cat: 0x1f, setID: 0x10}, + 104: {cat: 0x64, setID: 0x3}, + 105: {cat: 0xf, setID: 0x17}, + 106: {cat: 0x17, setID: 0x1}, + 107: {cat: 0x65, setID: 0x3}, + 108: {cat: 0xf, setID: 0x18}, + 109: {cat: 0x65, setID: 0x3}, + 110: {cat: 0xf, setID: 0x10}, + 111: {cat: 0x65, setID: 0x3}, + 112: {cat: 0x2f, setID: 0x7}, + 113: {cat: 0x3a, setID: 0x8}, + 114: {cat: 0x2f, setID: 0xf}, + 115: {cat: 0x3c, setID: 0x10}, + 116: {cat: 0x2d, setID: 0xb}, + 117: {cat: 0x2d, setID: 0x18}, + 118: {cat: 0x2d, setID: 0x19}, + 119: {cat: 0x2f, setID: 0x7}, + 120: {cat: 0x3a, setID: 0xc}, + 121: {cat: 0x2f, setID: 0x1a}, + 122: {cat: 0x3c, setID: 0xc}, + 123: {cat: 0x55, setID: 0x3}, + 124: {cat: 0x22, setID: 0x1}, + 125: {cat: 0x24, setID: 0x3}, + 126: {cat: 0x2c, setID: 0xd}, + 127: {cat: 0x2d, setID: 0xc}, + 128: {cat: 0xf, setID: 0x7}, + 129: {cat: 0x1f, setID: 0x8}, + 130: {cat: 0x62, setID: 0x3}, + 131: {cat: 0xf, setID: 0xf}, + 132: {cat: 0x1f, setID: 0x10}, + 133: {cat: 0x64, setID: 0x3}, + 134: {cat: 0xf, setID: 0xb}, + 135: {cat: 0x65, setID: 0x3}, + 136: {cat: 0xf, setID: 0x18}, + 137: {cat: 0x65, setID: 0x3}, + 138: {cat: 0xf, setID: 0x19}, + 139: {cat: 0x65, setID: 0x3}, + 140: {cat: 0x2f, setID: 0x7}, + 141: {cat: 0x3a, setID: 0x1b}, + 142: {cat: 0x2f, setID: 0x1c}, + 143: {cat: 0x3b, setID: 0x1d}, + 144: {cat: 0x2f, setID: 0x1e}, + 145: {cat: 0x3c, setID: 0x1f}, + 146: {cat: 0x37, setID: 0x3}, + 147: {cat: 0xa5, setID: 0x0}, + 148: {cat: 0x22, setID: 0x1}, + 149: {cat: 0x23, setID: 0x2}, + 150: {cat: 0x24, setID: 0x20}, + 151: {cat: 0x25, setID: 0x21}, + 152: {cat: 0xf, setID: 0x7}, + 153: {cat: 0x62, setID: 0x3}, + 154: {cat: 0xf, setID: 0x1c}, + 155: {cat: 0x63, setID: 0x3}, + 156: {cat: 0xf, setID: 0x22}, + 157: {cat: 0x64, setID: 0x3}, + 158: {cat: 0x75, setID: 0x3}, + 159: {cat: 0x21, setID: 0x3}, + 160: {cat: 0x22, setID: 0x1}, + 161: {cat: 0x23, setID: 0x2}, + 162: {cat: 0x2c, setID: 0x23}, + 163: {cat: 0x2d, setID: 0x5}, + 164: {cat: 0x21, setID: 0x3}, + 165: {cat: 0x22, setID: 0x1}, + 166: {cat: 0x23, setID: 0x2}, + 167: {cat: 0x24, setID: 0x24}, + 168: {cat: 0x25, setID: 0x25}, +} // Size: 362 bytes + +var cardinalIndex = []uint8{ // 37 elements + 0x00, 0x00, 0x02, 0x03, 0x05, 0x08, 0x09, 0x0b, + 0x0d, 0x0e, 0x10, 0x13, 0x17, 0x1a, 0x20, 0x2b, + 0x2e, 0x30, 0x32, 0x35, 0x3b, 0x45, 0x48, 0x4f, + 0x58, 0x5f, 0x64, 0x70, 0x77, 0x7c, 0x80, 0x8c, + 0x94, 0x98, 0x9f, 0xa4, 0xa9, +} // Size: 61 bytes + +var cardinalLangToIndex = []uint8{ // 752 elements + // Entry 0 - 3F + 0x00, 0x03, 0x03, 0x08, 0x08, 0x08, 0x00, 0x00, + 0x05, 0x05, 0x01, 0x01, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x01, 0x01, 0x08, 0x08, 0x03, 0x03, + 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x1b, + 0x1b, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x05, + // Entry 40 - 7F + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x1f, 0x1f, 0x08, 0x08, 0x14, 0x00, 0x00, 0x14, + 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x19, + 0x19, 0x00, 0x00, 0x23, 0x23, 0x0a, 0x0a, 0x0a, + 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x00, 0x00, 0x17, 0x17, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + // Entry 80 - BF + 0x08, 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + // Entry C0 - FF + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + // Entry 100 - 13F + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x08, 0x08, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x03, 0x03, 0x0d, 0x0d, 0x08, 0x08, + 0x08, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 140 - 17F + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x08, 0x08, 0x03, 0x03, 0x20, 0x20, 0x15, 0x15, + 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x01, 0x01, + 0x05, 0x00, 0x00, 0x21, 0x21, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x18, 0x18, 0x01, 0x01, 0x14, + 0x14, 0x14, 0x17, 0x17, 0x08, 0x08, 0x02, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b, + // Entry 180 - 1BF + 0x03, 0x03, 0x03, 0x03, 0x11, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x02, + 0x02, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x08, 0x11, + 0x11, 0x08, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x08, + // Entry 1C0 - 1FF + 0x08, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x08, + 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, + 0x00, 0x00, 0x08, 0x08, 0x0c, 0x0c, 0x08, 0x08, + 0x08, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x11, 0x11, 0x08, 0x08, 0x08, 0x08, 0x08, + // Entry 200 - 23F + 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x05, + 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x05, 0x00, 0x00, + 0x05, 0x05, 0x08, 0x1a, 0x1a, 0x0e, 0x0e, 0x08, + 0x08, 0x07, 0x09, 0x07, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + // Entry 240 - 27F + 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x13, 0x13, + 0x13, 0x08, 0x08, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x00, 0x00, 0x08, 0x11, 0x11, 0x11, + 0x11, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x12, + 0x00, 0x00, 0x12, 0x12, 0x04, 0x04, 0x19, 0x19, + 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + // Entry 280 - 2BF + 0x08, 0x08, 0x08, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x08, 0x08, + 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x05, + 0x05, 0x05, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x06, 0x06, + 0x08, 0x08, 0x1e, 0x1e, 0x03, 0x03, 0x03, 0x08, + // Entry 2C0 - 2FF + 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, + 0x08, 0x08, 0x05, 0x08, 0x08, 0x00, 0x08, 0x08, + 0x08, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, +} // Size: 776 bytes + +var cardinalInclusionMasks = []uint64{ // 100 elements + // Entry 0 - 1F + 0x0000000400a00859, 0x0000000000a242d3, 0x000000001464e245, 0x000000194478e201, + 0x000000094478e401, 0x0000000905286001, 0x0000002905286401, 0x0000000a05286001, + 0x0000000a05286001, 0x0000000a45286401, 0x0000000a80a86801, 0x000000008a8251a1, + 0x00000000b605d021, 0x00000000c609d021, 0x00000000c609d421, 0x0000000085085021, + 0x0000000085085421, 0x0000000085085021, 0x0000000085085021, 0x00000000c5085421, + 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021, + 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021, + 0x0000000005000021, 0x0000000045000421, 0x0000000000800821, 0x00000000008000a1, + // Entry 20 - 3F + 0x0000000014008021, 0x0000000044008021, 0x0000000044008421, 0x0000000005000021, + 0x0000000005000421, 0x0000000005000021, 0x0000000005000021, 0x0000000045000421, + 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021, + 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021, + 0x0000000005000021, 0x0000000045000421, 0x0000000000800821, 0x00000000008000a1, + 0x0000000014008021, 0x0000000044008021, 0x0000000044008421, 0x0000000005000021, + 0x0000000005000421, 0x0000000005000021, 0x0000000005000021, 0x0000000045000421, + 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021, + // Entry 40 - 5F + 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021, + 0x0000000005000021, 0x0000000045000421, 0x0000000080800821, 0x00000000888000a1, + 0x00000000b4008021, 0x00000000c4008021, 0x00000000c4008421, 0x0000000085000021, + 0x0000000085000421, 0x0000000085000021, 0x0000000085000021, 0x00000000c5000421, + 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021, + 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021, + 0x0000000005000021, 0x0000000045000421, 0x0000000080800821, 0x00000000888000a1, + 0x00000000b4008021, 0x00000000c4008021, 0x00000000c4008421, 0x0000000085000021, + // Entry 60 - 7F + 0x0000000085000421, 0x0000000085000021, 0x0000000085000021, 0x00000000c5000421, +} // Size: 824 bytes + +// Slots used for cardinal: A9 of 0xFF rules; 25 of 0xFF indexes; 38 of 64 sets + +var tagToDecimal = []uint8{ // 752 elements + // Entry 0 - 3F + 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 40 - 7F + 0x01, 0x01, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, + // Entry 80 - BF + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry C0 - FF + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 100 - 13F + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 140 - 17F + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 180 - 1BF + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 1C0 - 1FF + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, + 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 200 - 23F + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x05, 0x05, 0x01, 0x01, 0x01, 0x05, 0x01, 0x01, + 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 240 - 27F + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 280 - 2BF + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 2C0 - 2FF + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +} // Size: 776 bytes + +var tagToScientific = []uint8{ // 752 elements + // Entry 0 - 3F + 0x02, 0x02, 0x09, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 40 - 7F + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 80 - BF + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry C0 - FF + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 100 - 13F + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 140 - 17F + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0d, 0x0d, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x0d, 0x0d, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 180 - 1BF + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 1C0 - 1FF + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x0e, 0x0e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x0d, 0x0d, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 200 - 23F + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x0d, 0x02, 0x02, + 0x0d, 0x0d, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 240 - 27F + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x0e, 0x0e, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 280 - 2BF + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 2C0 - 2FF + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, +} // Size: 776 bytes + +var tagToPercent = []uint8{ // 752 elements + // Entry 0 - 3F + 0x04, 0x04, 0x0a, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + // Entry 40 - 7F + 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, + 0x03, 0x03, 0x06, 0x06, 0x03, 0x04, 0x04, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, + 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, + 0x04, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, + 0x04, 0x04, 0x04, 0x07, 0x07, 0x04, 0x04, 0x04, + // Entry 80 - BF + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x03, 0x04, 0x03, 0x04, 0x04, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + // Entry C0 - FF + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, + 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + // Entry 100 - 13F + 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x0b, 0x0b, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + // Entry 140 - 17F + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x06, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x04, + 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + // Entry 180 - 1BF + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, + 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, + // Entry 1C0 - 1FF + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x04, + // Entry 200 - 23F + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x06, 0x06, 0x04, 0x04, 0x04, 0x06, 0x04, 0x04, + 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, + // Entry 240 - 27F + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, + 0x03, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + // Entry 280 - 2BF + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, + 0x0f, 0x0f, 0x0f, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, + // Entry 2C0 - 2FF + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, +} // Size: 776 bytes + +var formats = []Pattern{Pattern{Affix: "", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x0, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x0, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x0, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x0, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x9, + GroupingSize: [2]uint8{0x3, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x3, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x0, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x3, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x0, + MaxIntegerDigits: 0x1, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x1}, + Pattern{Affix: "\x00\x03\u00a0%", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x64, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x7, + GroupingSize: [2]uint8{0x3, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "\x00\x01%", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x64, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x6, + GroupingSize: [2]uint8{0x3, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x0, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0xc, + GroupingSize: [2]uint8{0x3, + 0x2}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x3, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "\x00\x01%", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x64, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x9, + GroupingSize: [2]uint8{0x3, + 0x2}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "\x00\x03\u00a0%", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x64, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0xa, + GroupingSize: [2]uint8{0x3, + 0x2}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x0, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x9, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x6, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x0, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0xd, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x2, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x6, + MaxFractionDigits: 0x6, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x3}, + Pattern{Affix: "\x00\x01%", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x64, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x3, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "\x03%\u00a0\x00", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x64, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x7, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "\x03%\u00a0\x00\x04%\u00a0-\x00", + Offset: 0x0, + NegOffset: 0x5, + Multiplier: 0x64, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x7, + GroupingSize: [2]uint8{0x3, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "\x01[\x01]", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x0, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x5, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x0, + MaxIntegerDigits: 0x1, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x1}, + Pattern{Affix: "", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x0, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x1, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x0, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}, + Pattern{Affix: "\x01%\x00", + Offset: 0x0, + NegOffset: 0x0, + Multiplier: 0x64, + RoundIncrement: 0x0, + PadRune: 0, + FormatWidth: 0x6, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0, + MinIntegerDigits: 0x1, + MaxIntegerDigits: 0x0, + MinFractionDigits: 0x0, + MaxFractionDigits: 0x0, + MinSignificantDigits: 0x0, + MaxSignificantDigits: 0x0, + MinExponentDigits: 0x0}} + +// Total table size 10908 bytes (10KiB); checksum: B1AF61E6 diff --git a/vendor/golang.org/x/text/internal/number/tables_test.go b/vendor/golang.org/x/text/internal/number/tables_test.go new file mode 100644 index 0000000..054e23d --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/tables_test.go @@ -0,0 +1,125 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package number + +import ( + "flag" + "log" + "reflect" + "testing" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +var draft = flag.String("draft", + "contributed", + `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`) + +func TestNumberSystems(t *testing.T) { + testtext.SkipIfNotLong(t) + + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + d.SetDirFilter("supplemental") + d.SetSectionFilter("numberingSystem") + data, err := d.DecodeZip(r) + if err != nil { + t.Fatalf("DecodeZip: %v", err) + } + + for _, ns := range data.Supplemental().NumberingSystems.NumberingSystem { + n := systemMap[ns.Id] + if int(n) >= len(numSysData) { + continue + } + info := InfoFromLangID(0, ns.Id) + val := '0' + for _, rWant := range ns.Digits { + if rGot := info.Digit(val); rGot != rWant { + t.Errorf("%s:%d: got %U; want %U", ns.Id, val, rGot, rWant) + } + val++ + } + } +} + +func TestSymbols(t *testing.T) { + testtext.SkipIfNotLong(t) + + draft, err := cldr.ParseDraft(*draft) + if err != nil { + log.Fatalf("invalid draft level: %v", err) + } + + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + d.SetDirFilter("main") + d.SetSectionFilter("numbers") + data, err := d.DecodeZip(r) + if err != nil { + t.Fatalf("DecodeZip: %v", err) + } + + for _, lang := range data.Locales() { + ldml := data.RawLDML(lang) + if ldml.Numbers == nil { + continue + } + langIndex, ok := language.CompactIndex(language.MustParse(lang)) + if !ok { + t.Fatalf("No compact index for language %s", lang) + } + + syms := cldr.MakeSlice(&ldml.Numbers.Symbols) + syms.SelectDraft(draft) + + for _, sym := range ldml.Numbers.Symbols { + if sym.NumberSystem == "" { + continue + } + testCases := []struct { + name string + st SymbolType + x interface{} + }{ + {"Decimal", SymDecimal, sym.Decimal}, + {"Group", SymGroup, sym.Group}, + {"List", SymList, sym.List}, + {"PercentSign", SymPercentSign, sym.PercentSign}, + {"PlusSign", SymPlusSign, sym.PlusSign}, + {"MinusSign", SymMinusSign, sym.MinusSign}, + {"Exponential", SymExponential, sym.Exponential}, + {"SuperscriptingExponent", SymSuperscriptingExponent, sym.SuperscriptingExponent}, + {"PerMille", SymPerMille, sym.PerMille}, + {"Infinity", SymInfinity, sym.Infinity}, + {"NaN", SymNan, sym.Nan}, + {"TimeSeparator", SymTimeSeparator, sym.TimeSeparator}, + } + info := InfoFromLangID(langIndex, sym.NumberSystem) + for _, tc := range testCases { + // Extract the wanted value. + v := reflect.ValueOf(tc.x) + if v.Len() == 0 { + return + } + if v.Len() > 1 { + t.Fatalf("Multiple values of %q within single symbol not supported.", tc.name) + } + want := v.Index(0).MethodByName("Data").Call(nil)[0].String() + got := info.Symbol(tc.st) + if got != want { + t.Errorf("%s:%s:%s: got %q; want %q", lang, sym.NumberSystem, tc.name, got, want) + } + } + } + } +} diff --git a/vendor/golang.org/x/text/internal/stringset/set.go b/vendor/golang.org/x/text/internal/stringset/set.go new file mode 100644 index 0000000..bb2fffb --- /dev/null +++ b/vendor/golang.org/x/text/internal/stringset/set.go @@ -0,0 +1,86 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package stringset provides a way to represent a collection of strings +// compactly. +package stringset + +import "sort" + +// A Set holds a collection of strings that can be looked up by an index number. +type Set struct { + // These fields are exported to allow for code generation. + + Data string + Index []uint16 +} + +// Elem returns the string with index i. It panics if i is out of range. +func (s *Set) Elem(i int) string { + return s.Data[s.Index[i]:s.Index[i+1]] +} + +// Len returns the number of strings in the set. +func (s *Set) Len() int { + return len(s.Index) - 1 +} + +// Search returns the index of the given string or -1 if it is not in the set. +// The Set must have been created with strings in sorted order. +func Search(s *Set, str string) int { + // TODO: optimize this if it gets used a lot. + n := len(s.Index) - 1 + p := sort.Search(n, func(i int) bool { + return s.Elem(i) >= str + }) + if p == n || str != s.Elem(p) { + return -1 + } + return p +} + +// A Builder constructs Sets. +type Builder struct { + set Set + index map[string]int +} + +// NewBuilder returns a new and initialized Builder. +func NewBuilder() *Builder { + return &Builder{ + set: Set{ + Index: []uint16{0}, + }, + index: map[string]int{}, + } +} + +// Set creates the set created so far. +func (b *Builder) Set() Set { + return b.set +} + +// Index returns the index for the given string, which must have been added +// before. +func (b *Builder) Index(s string) int { + return b.index[s] +} + +// Add adds a string to the index. Strings that are added by a single Add will +// be stored together, unless they match an existing string. +func (b *Builder) Add(ss ...string) { + // First check if the string already exists. + for _, s := range ss { + if _, ok := b.index[s]; ok { + continue + } + b.index[s] = len(b.set.Index) - 1 + b.set.Data += s + x := len(b.set.Data) + if x > 0xFFFF { + panic("Index too > 0xFFFF") + } + b.set.Index = append(b.set.Index, uint16(x)) + } +} diff --git a/vendor/golang.org/x/text/internal/stringset/set_test.go b/vendor/golang.org/x/text/internal/stringset/set_test.go new file mode 100644 index 0000000..97b9e58 --- /dev/null +++ b/vendor/golang.org/x/text/internal/stringset/set_test.go @@ -0,0 +1,53 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package stringset + +import "testing" + +func TestStringSet(t *testing.T) { + testCases := [][]string{ + {""}, + {"∫"}, + {"a", "b", "c"}, + {"", "a", "bb", "ccc"}, + {" ", "aaa", "bb", "c"}, + } + test := func(tc int, b *Builder) { + set := b.Set() + if set.Len() != len(testCases[tc]) { + t.Errorf("%d:Len() = %d; want %d", tc, set.Len(), len(testCases[tc])) + } + for i, s := range testCases[tc] { + if x := b.Index(s); x != i { + t.Errorf("%d:Index(%q) = %d; want %d", tc, s, x, i) + } + if p := Search(&set, s); p != i { + t.Errorf("%d:Search(%q) = %d; want %d", tc, s, p, i) + } + if set.Elem(i) != s { + t.Errorf("%d:Elem(%d) = %s; want %s", tc, i, set.Elem(i), s) + } + } + if p := Search(&set, "apple"); p != -1 { + t.Errorf(`%d:Search("apple") = %d; want -1`, tc, p) + } + } + for i, tc := range testCases { + b := NewBuilder() + for _, s := range tc { + b.Add(s) + } + b.Add(tc...) + test(i, b) + } + for i, tc := range testCases { + b := NewBuilder() + b.Add(tc...) + for _, s := range tc { + b.Add(s) + } + test(i, b) + } +} diff --git a/vendor/golang.org/x/text/internal/tables.go b/vendor/golang.org/x/text/internal/tables.go new file mode 100644 index 0000000..7fb15f6 --- /dev/null +++ b/vendor/golang.org/x/text/internal/tables.go @@ -0,0 +1,116 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package internal + +// Parent maps a compact index of a tag to the compact index of the parent of +// this tag. +var Parent = []uint16{ // 752 elements + // Entry 0 - 3F + 0x0000, 0x0053, 0x00e5, 0x0000, 0x0003, 0x0003, 0x0000, 0x0006, + 0x0000, 0x0008, 0x0000, 0x000a, 0x0000, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x0000, 0x0000, 0x002a, 0x0000, 0x002c, 0x0000, 0x002e, + 0x0000, 0x0000, 0x0031, 0x0030, 0x0030, 0x0000, 0x0035, 0x0000, + 0x0037, 0x0000, 0x0039, 0x0000, 0x003b, 0x0000, 0x003d, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0040, 0x0000, 0x0042, 0x0042, 0x0000, 0x0045, 0x0045, + 0x0000, 0x0048, 0x0000, 0x004a, 0x0000, 0x0000, 0x004d, 0x004c, + 0x004c, 0x0000, 0x0051, 0x0051, 0x0051, 0x0051, 0x0000, 0x0056, + 0x0000, 0x0058, 0x0000, 0x005a, 0x0000, 0x005c, 0x005c, 0x0000, + 0x005f, 0x0000, 0x0061, 0x0000, 0x0063, 0x0000, 0x0065, 0x0065, + 0x0000, 0x0068, 0x0000, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x0000, 0x0072, 0x0000, 0x0074, 0x0000, 0x0076, + 0x0000, 0x0000, 0x0079, 0x0000, 0x007b, 0x0000, 0x007d, 0x0000, + // Entry 80 - BF + 0x007f, 0x007f, 0x0000, 0x0082, 0x0082, 0x0000, 0x0085, 0x0086, + 0x0086, 0x0086, 0x0085, 0x0087, 0x0086, 0x0086, 0x0086, 0x0085, + 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0087, 0x0086, + 0x0086, 0x0086, 0x0086, 0x0087, 0x0086, 0x0087, 0x0086, 0x0086, + 0x0087, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0086, 0x0086, 0x0085, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0086, 0x0086, 0x0086, 0x0086, 0x0085, 0x0086, 0x0085, 0x0086, + // Entry C0 - FF + 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0087, + 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0085, + 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0087, 0x0086, 0x0086, + 0x0087, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0086, 0x0086, 0x0086, 0x0086, 0x0085, 0x0085, 0x0086, 0x0086, + 0x0085, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0000, 0x00ee, + 0x0000, 0x00f0, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, + 0x00f1, 0x00f1, 0x00f0, 0x00f1, 0x00f0, 0x00f0, 0x00f1, 0x00f1, + // Entry 100 - 13F + 0x00f0, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f0, 0x00f1, 0x00f1, + 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x0000, 0x010c, 0x0000, 0x010e, + 0x0000, 0x0110, 0x0000, 0x0112, 0x0112, 0x0000, 0x0115, 0x0115, + 0x0115, 0x0115, 0x0000, 0x011a, 0x0000, 0x011c, 0x0000, 0x011e, + 0x011e, 0x0000, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + // Entry 140 - 17F + 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + 0x0000, 0x0150, 0x0000, 0x0152, 0x0000, 0x0154, 0x0000, 0x0156, + 0x0000, 0x0158, 0x0000, 0x015a, 0x015a, 0x015a, 0x0000, 0x015e, + 0x0000, 0x0000, 0x0161, 0x0000, 0x0163, 0x0000, 0x0165, 0x0165, + 0x0165, 0x0000, 0x0169, 0x0000, 0x016b, 0x0000, 0x016d, 0x0000, + 0x016f, 0x016f, 0x0000, 0x0172, 0x0000, 0x0174, 0x0000, 0x0176, + 0x0000, 0x0178, 0x0000, 0x017a, 0x0000, 0x017c, 0x0000, 0x017e, + // Entry 180 - 1BF + 0x0000, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000, 0x0185, 0x0000, + 0x0000, 0x0188, 0x0000, 0x018a, 0x0000, 0x0000, 0x018d, 0x0000, + 0x018f, 0x0000, 0x0000, 0x0192, 0x0000, 0x0000, 0x0195, 0x0000, + 0x0197, 0x0000, 0x0199, 0x0000, 0x019b, 0x0000, 0x019d, 0x0000, + 0x019f, 0x0000, 0x01a1, 0x0000, 0x01a3, 0x0000, 0x01a5, 0x0000, + 0x01a7, 0x0000, 0x01a9, 0x01a9, 0x0000, 0x01ac, 0x0000, 0x01ae, + 0x0000, 0x01b0, 0x0000, 0x01b2, 0x0000, 0x01b4, 0x0000, 0x0000, + 0x01b7, 0x0000, 0x01b9, 0x0000, 0x01bb, 0x0000, 0x01bd, 0x0000, + // Entry 1C0 - 1FF + 0x01bf, 0x0000, 0x01c1, 0x0000, 0x01c3, 0x01c3, 0x01c3, 0x01c3, + 0x0000, 0x01c8, 0x0000, 0x01ca, 0x01ca, 0x0000, 0x01cd, 0x0000, + 0x01cf, 0x0000, 0x01d1, 0x0000, 0x01d3, 0x0000, 0x01d5, 0x0000, + 0x01d7, 0x01d7, 0x0000, 0x01da, 0x0000, 0x01dc, 0x0000, 0x01de, + 0x0000, 0x01e0, 0x0000, 0x01e2, 0x0000, 0x01e4, 0x0000, 0x01e6, + 0x0000, 0x01e8, 0x0000, 0x01ea, 0x0000, 0x01ec, 0x01ec, 0x01ec, + 0x0000, 0x01f0, 0x0000, 0x01f2, 0x0000, 0x01f4, 0x0000, 0x01f6, + 0x0000, 0x0000, 0x01f9, 0x0000, 0x01fb, 0x01fb, 0x0000, 0x01fe, + // Entry 200 - 23F + 0x0000, 0x0200, 0x0200, 0x0000, 0x0203, 0x0203, 0x0000, 0x0206, + 0x0206, 0x0206, 0x0206, 0x0206, 0x0206, 0x0206, 0x0000, 0x020e, + 0x0000, 0x0210, 0x0000, 0x0212, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0218, 0x0000, 0x0000, 0x021b, 0x0000, 0x021d, 0x021d, + 0x0000, 0x0220, 0x0000, 0x0222, 0x0222, 0x0000, 0x0000, 0x0226, + 0x0225, 0x0225, 0x0000, 0x0000, 0x022b, 0x0000, 0x022d, 0x0000, + 0x022f, 0x0000, 0x023b, 0x0231, 0x023b, 0x023b, 0x023b, 0x023b, + 0x023b, 0x023b, 0x023b, 0x0231, 0x023b, 0x023b, 0x0000, 0x023e, + // Entry 240 - 27F + 0x023e, 0x023e, 0x0000, 0x0242, 0x0000, 0x0244, 0x0000, 0x0246, + 0x0246, 0x0000, 0x0249, 0x0000, 0x024b, 0x024b, 0x024b, 0x024b, + 0x024b, 0x024b, 0x0000, 0x0252, 0x0000, 0x0254, 0x0000, 0x0256, + 0x0000, 0x0258, 0x0000, 0x025a, 0x0000, 0x0000, 0x025d, 0x025d, + 0x025d, 0x0000, 0x0261, 0x0000, 0x0263, 0x0000, 0x0265, 0x0000, + 0x0000, 0x0268, 0x0267, 0x0267, 0x0000, 0x026c, 0x0000, 0x026e, + 0x0000, 0x0270, 0x0000, 0x0000, 0x0000, 0x0000, 0x0275, 0x0000, + 0x0000, 0x0278, 0x0000, 0x027a, 0x027a, 0x027a, 0x027a, 0x0000, + // Entry 280 - 2BF + 0x027f, 0x027f, 0x027f, 0x0000, 0x0283, 0x0283, 0x0283, 0x0283, + 0x0283, 0x0000, 0x0289, 0x0289, 0x0289, 0x0289, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0291, 0x0291, 0x0291, 0x0000, 0x0295, 0x0295, + 0x0295, 0x0295, 0x0000, 0x0000, 0x029b, 0x029b, 0x029b, 0x029b, + 0x0000, 0x02a0, 0x0000, 0x02a2, 0x02a2, 0x0000, 0x02a5, 0x0000, + 0x02a7, 0x02a7, 0x0000, 0x0000, 0x02ab, 0x0000, 0x0000, 0x02ae, + 0x0000, 0x02b0, 0x02b0, 0x0000, 0x0000, 0x02b4, 0x0000, 0x02b6, + 0x0000, 0x02b8, 0x0000, 0x02ba, 0x0000, 0x02bc, 0x02bc, 0x0000, + // Entry 2C0 - 2FF + 0x0000, 0x02c0, 0x0000, 0x02c2, 0x02bf, 0x02bf, 0x0000, 0x0000, + 0x02c7, 0x02c6, 0x02c6, 0x0000, 0x0000, 0x02cc, 0x0000, 0x02ce, + 0x0000, 0x02d0, 0x0000, 0x0000, 0x02d3, 0x0000, 0x0000, 0x0000, + 0x02d7, 0x0000, 0x02d9, 0x0000, 0x02db, 0x0000, 0x02dd, 0x02dd, + 0x0000, 0x02e0, 0x0000, 0x02e2, 0x0000, 0x02e4, 0x02e4, 0x02e4, + 0x02e4, 0x02e4, 0x0000, 0x02ea, 0x02eb, 0x02ea, 0x0000, 0x02ee, +} // Size: 1528 bytes + +// Total table size 1528 bytes (1KiB); checksum: B99CF952 diff --git a/vendor/golang.org/x/text/internal/tag/tag.go b/vendor/golang.org/x/text/internal/tag/tag.go new file mode 100644 index 0000000..b5d3488 --- /dev/null +++ b/vendor/golang.org/x/text/internal/tag/tag.go @@ -0,0 +1,100 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tag contains functionality handling tags and related data. +package tag // import "golang.org/x/text/internal/tag" + +import "sort" + +// An Index converts tags to a compact numeric value. +// +// All elements are of size 4. Tags may be up to 4 bytes long. Excess bytes can +// be used to store additional information about the tag. +type Index string + +// Elem returns the element data at the given index. +func (s Index) Elem(x int) string { + return string(s[x*4 : x*4+4]) +} + +// Index reports the index of the given key or -1 if it could not be found. +// Only the first len(key) bytes from the start of the 4-byte entries will be +// considered for the search and the first match in Index will be returned. +func (s Index) Index(key []byte) int { + n := len(key) + // search the index of the first entry with an equal or higher value than + // key in s. + index := sort.Search(len(s)/4, func(i int) bool { + return cmp(s[i*4:i*4+n], key) != -1 + }) + i := index * 4 + if cmp(s[i:i+len(key)], key) != 0 { + return -1 + } + return index +} + +// Next finds the next occurrence of key after index x, which must have been +// obtained from a call to Index using the same key. It returns x+1 or -1. +func (s Index) Next(key []byte, x int) int { + if x++; x*4 < len(s) && cmp(s[x*4:x*4+len(key)], key) == 0 { + return x + } + return -1 +} + +// cmp returns an integer comparing a and b lexicographically. +func cmp(a Index, b []byte) int { + n := len(a) + if len(b) < n { + n = len(b) + } + for i, c := range b[:n] { + switch { + case a[i] > c: + return 1 + case a[i] < c: + return -1 + } + } + switch { + case len(a) < len(b): + return -1 + case len(a) > len(b): + return 1 + } + return 0 +} + +// Compare returns an integer comparing a and b lexicographically. +func Compare(a string, b []byte) int { + return cmp(Index(a), b) +} + +// FixCase reformats b to the same pattern of cases as form. +// If returns false if string b is malformed. +func FixCase(form string, b []byte) bool { + if len(form) != len(b) { + return false + } + for i, c := range b { + if form[i] <= 'Z' { + if c >= 'a' { + c -= 'z' - 'Z' + } + if c < 'A' || 'Z' < c { + return false + } + } else { + if c <= 'Z' { + c += 'z' - 'Z' + } + if c < 'a' || 'z' < c { + return false + } + } + b[i] = c + } + return true +} diff --git a/vendor/golang.org/x/text/internal/tag/tag_test.go b/vendor/golang.org/x/text/internal/tag/tag_test.go new file mode 100644 index 0000000..da174a2 --- /dev/null +++ b/vendor/golang.org/x/text/internal/tag/tag_test.go @@ -0,0 +1,67 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tag + +import ( + "strings" + "testing" +) + +var strdata = []string{ + "aa ", + "aaa ", + "aaaa", + "aaab", + "aab ", + "ab ", + "ba ", + "xxxx", + "\xff\xff\xff\xff", +} + +var testCases = map[string]int{ + "a": 0, + "aa": 0, + "aaa": 1, + "aa ": 0, + "aaaa": 2, + "aaab": 3, + "b": 6, + "ba": 6, + " ": -1, + "aaax": -1, + "bbbb": -1, + "zzzz": -1, +} + +func TestIndex(t *testing.T) { + index := Index(strings.Join(strdata, "")) + for k, v := range testCases { + if i := index.Index([]byte(k)); i != v { + t.Errorf("%s: got %d; want %d", k, i, v) + } + } +} + +func TestFixCase(t *testing.T) { + tests := []string{ + "aaaa", "AbCD", "abcd", + "Zzzz", "AbCD", "Abcd", + "Zzzz", "AbC", "", + "XXX", "ab ", "", + "XXX", "usd", "USD", + "cmn", "AB ", "", + "gsw", "CMN", "cmn", + } + for tc := tests; len(tc) > 0; tc = tc[3:] { + b := []byte(tc[1]) + if !FixCase(tc[0], b) { + b = nil + } + if string(b) != tc[2] { + t.Errorf("FixCase(%q, %q) = %q; want %q", tc[0], tc[1], b, tc[2]) + } + } +} diff --git a/vendor/golang.org/x/text/internal/testtext/codesize.go b/vendor/golang.org/x/text/internal/testtext/codesize.go new file mode 100644 index 0000000..5fc5eae --- /dev/null +++ b/vendor/golang.org/x/text/internal/testtext/codesize.go @@ -0,0 +1,53 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testtext + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "runtime" +) + +// CodeSize builds the given code sample and returns the binary size or en error +// if an error occurred. The code sample typically will look like this: +// package main +// import "golang.org/x/text/somepackage" +// func main() { +// somepackage.Func() // reference Func to cause it to be linked in. +// } +// See dict_test.go in the display package for an example. +func CodeSize(s string) (int, error) { + // Write the file. + tmpdir, err := ioutil.TempDir(os.TempDir(), "testtext") + if err != nil { + return 0, fmt.Errorf("testtext: failed to create tmpdir: %v", err) + } + defer os.RemoveAll(tmpdir) + filename := filepath.Join(tmpdir, "main.go") + if err := ioutil.WriteFile(filename, []byte(s), 0644); err != nil { + return 0, fmt.Errorf("testtext: failed to write main.go: %v", err) + } + + // Build the binary. + w := &bytes.Buffer{} + cmd := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), "build", "-o", "main") + cmd.Dir = tmpdir + cmd.Stderr = w + cmd.Stdout = w + if err := cmd.Run(); err != nil { + return 0, fmt.Errorf("testtext: failed to execute command: %v\nmain.go:\n%vErrors:%s", err, s, w) + } + + // Determine the size. + fi, err := os.Stat(filepath.Join(tmpdir, "main")) + if err != nil { + return 0, fmt.Errorf("testtext: failed to get file info: %v", err) + } + return int(fi.Size()), nil +} diff --git a/vendor/golang.org/x/text/internal/testtext/flag.go b/vendor/golang.org/x/text/internal/testtext/flag.go new file mode 100644 index 0000000..45b32b2 --- /dev/null +++ b/vendor/golang.org/x/text/internal/testtext/flag.go @@ -0,0 +1,22 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testtext + +import ( + "flag" + "testing" + + "golang.org/x/text/internal/gen" +) + +var long = flag.Bool("long", false, + "run tests that require fetching data online") + +// SkipIfNotLong returns whether long tests should be performed. +func SkipIfNotLong(t *testing.T) { + if testing.Short() || !(gen.IsLocal() || *long) { + t.Skip("skipping test to prevent downloading; to run use -long or use -local or UNICODE_DIR to specify a local source") + } +} diff --git a/vendor/golang.org/x/text/internal/testtext/gc.go b/vendor/golang.org/x/text/internal/testtext/gc.go new file mode 100644 index 0000000..a54e1bc --- /dev/null +++ b/vendor/golang.org/x/text/internal/testtext/gc.go @@ -0,0 +1,14 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +package testtext + +import "testing" + +// AllocsPerRun wraps testing.AllocsPerRun. +func AllocsPerRun(runs int, f func()) (avg float64) { + return testing.AllocsPerRun(runs, f) +} diff --git a/vendor/golang.org/x/text/internal/testtext/gccgo.go b/vendor/golang.org/x/text/internal/testtext/gccgo.go new file mode 100644 index 0000000..30e98ef --- /dev/null +++ b/vendor/golang.org/x/text/internal/testtext/gccgo.go @@ -0,0 +1,11 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo + +package testtext + +// AllocsPerRun always returns 0 for gccgo until gccgo implements escape +// analysis equal or better to that of gc. +func AllocsPerRun(runs int, f func()) (avg float64) { return 0 } diff --git a/vendor/golang.org/x/text/internal/testtext/go1_6.go b/vendor/golang.org/x/text/internal/testtext/go1_6.go new file mode 100644 index 0000000..7b23847 --- /dev/null +++ b/vendor/golang.org/x/text/internal/testtext/go1_6.go @@ -0,0 +1,23 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7 + +package testtext + +import "testing" + +func Run(t *testing.T, name string, fn func(t *testing.T)) bool { + t.Logf("Running %s...", name) + fn(t) + return t.Failed() +} + +// Bench runs the given benchmark function. This pre-1.7 implementation renders +// the measurement useless, but allows the code to be compiled at least. +func Bench(b *testing.B, name string, fn func(b *testing.B)) bool { + b.Logf("Running %s...", name) + fn(b) + return b.Failed() +} diff --git a/vendor/golang.org/x/text/internal/testtext/go1_7.go b/vendor/golang.org/x/text/internal/testtext/go1_7.go new file mode 100644 index 0000000..66f9cf7 --- /dev/null +++ b/vendor/golang.org/x/text/internal/testtext/go1_7.go @@ -0,0 +1,17 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package testtext + +import "testing" + +func Run(t *testing.T, name string, fn func(t *testing.T)) bool { + return t.Run(name, fn) +} + +func Bench(b *testing.B, name string, fn func(b *testing.B)) bool { + return b.Run(name, fn) +} diff --git a/vendor/golang.org/x/text/internal/testtext/text.go b/vendor/golang.org/x/text/internal/testtext/text.go new file mode 100644 index 0000000..ce40d7e --- /dev/null +++ b/vendor/golang.org/x/text/internal/testtext/text.go @@ -0,0 +1,105 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package testtext contains test data that is of common use to the text +// repository. +package testtext // import "golang.org/x/text/internal/testtext" + +const ( + + // ASCII is an ASCII string containing all letters in the English alphabet. + ASCII = "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + "The quick brown fox jumps over the lazy dog. " + + // Vietnamese is a snippet from http://creativecommons.org/licenses/by-sa/3.0/vn/ + Vietnamese = `Với các điều kiện sau: Ghi nhận công của tác giả. +Nếu bạn sử dụng, chuyển đổi, hoặc xây dựng dự án từ +nội dung được chia sẻ này, bạn phải áp dụng giấy phép này hoặc +một giấy phép khác có các điều khoản tương tự như giấy phép này +cho dự án của bạn. Hiểu rằng: Miễn — Bất kỳ các điều kiện nào +trên đây cũng có thể được miễn bỏ nếu bạn được sự cho phép của +người sở hữu bản quyền. Phạm vi công chúng — Khi tác phẩm hoặc +bất kỳ chương nào của tác phẩm đã trong vùng dành cho công +chúng theo quy định của pháp luật thì tình trạng của nó không +bị ảnh hưởng bởi giấy phép trong bất kỳ trường hợp nào.` + + // Russian is a snippet from http://creativecommons.org/licenses/by-sa/1.0/deed.ru + Russian = `При обязательном соблюдении следующих условий: +Attribution — Вы должны атрибутировать произведение (указывать +автора и источник) в порядке, предусмотренном автором или +лицензиаром (но только так, чтобы никоим образом не подразумевалось, +что они поддерживают вас или использование вами данного произведения). +Υπό τις ακόλουθες προϋποθέσεις:` + + // Greek is a snippet from http://creativecommons.org/licenses/by-sa/3.0/gr/ + Greek = `Αναφορά Δημιουργού — Θα πρέπει να κάνετε την αναφορά στο έργο με τον +τρόπο που έχει οριστεί από το δημιουργό ή το χορηγούντο την άδεια +(χωρίς όμως να εννοείται με οποιονδήποτε τρόπο ότι εγκρίνουν εσάς ή +τη χρήση του έργου από εσάς). Παρόμοια Διανομή — Εάν αλλοιώσετε, +τροποποιήσετε ή δημιουργήσετε περαιτέρω βασισμένοι στο έργο θα +μπορείτε να διανέμετε το έργο που θα προκύψει μόνο με την ίδια ή +παρόμοια άδεια.` + + // Arabic is a snippet from http://creativecommons.org/licenses/by-sa/3.0/deed.ar + Arabic = `بموجب الشروط التالية نسب المصنف — يجب عليك أن +تنسب العمل بالطريقة التي تحددها المؤلف أو المرخص (ولكن ليس بأي حال من +الأحوال أن توحي وتقترح بتحول أو استخدامك للعمل). +المشاركة على قدم المساواة — إذا كنت يعدل ، والتغيير ، أو الاستفادة +من هذا العمل ، قد ينتج عن توزيع العمل إلا في ظل تشابه او تطابق فى واحد +لهذا الترخيص.` + + // Hebrew is a snippet from http://creativecommons.org/licenses/by-sa/1.0/il/ + Hebrew = `בכפוף לתנאים הבאים: ייחוס — עליך לייחס את היצירה (לתת קרדיט) באופן +המצויין על-ידי היוצר או מעניק הרישיון (אך לא בשום אופן המרמז על כך +שהם תומכים בך או בשימוש שלך ביצירה). שיתוף זהה — אם תחליט/י לשנות, +לעבד או ליצור יצירה נגזרת בהסתמך על יצירה זו, תוכל/י להפיץ את יצירתך +החדשה רק תחת אותו הרישיון או רישיון דומה לרישיון זה.` + + TwoByteUTF8 = Russian + Greek + Arabic + Hebrew + + // Thai is a snippet from http://creativecommons.org/licenses/by-sa/3.0/th/ + Thai = `ภายใต้เงื่อนไข ดังต่อไปนี้ : แสดงที่มา — คุณต้องแสดงที่ +มาของงานดังกล่าว ตามรูปแบบที่ผู้สร้างสรรค์หรือผู้อนุญาตกำหนด (แต่ +ไม่ใช่ในลักษณะที่ว่า พวกเขาสนับสนุนคุณหรือสนับสนุนการที่ +คุณนำงานไปใช้) อนุญาตแบบเดียวกัน — หากคุณดัดแปลง เปลี่ยนรูป หรื +อต่อเติมงานนี้ คุณต้องใช้สัญญาอนุญาตแบบเดียวกันหรือแบบที่เหมื +อนกับสัญญาอนุญาตที่ใช้กับงานนี้เท่านั้น` + + ThreeByteUTF8 = Thai + + // Japanese is a snippet from http://creativecommons.org/licenses/by-sa/2.0/jp/ + Japanese = `あなたの従うべき条件は以下の通りです。 +表示 — あなたは原著作者のクレジットを表示しなければなりません。 +継承 — もしあなたがこの作品を改変、変形または加工した場合、 +あなたはその結果生じた作品をこの作品と同一の許諾条件の下でのみ +頒布することができます。` + + // Chinese is a snippet from http://creativecommons.org/licenses/by-sa/2.5/cn/ + Chinese = `您可以自由: 复制、发行、展览、表演、放映、 +广播或通过信息网络传播本作品 创作演绎作品 +对本作品进行商业性使用 惟须遵守下列条件: +署名 — 您必须按照作者或者许可人指定的方式对作品进行署名。 +相同方式共享 — 如果您改变、转换本作品或者以本作品为基础进行创作, +您只能采用与本协议相同的许可协议发布基于本作品的演绎作品。` + + // Korean is a snippet from http://creativecommons.org/licenses/by-sa/2.0/kr/ + Korean = `다음과 같은 조건을 따라야 합니다: 저작자표시 +— 저작자나 이용허락자가 정한 방법으로 저작물의 +원저작자를 표시하여야 합니다(그러나 원저작자가 이용자나 이용자의 +이용을 보증하거나 추천한다는 의미로 표시해서는 안됩니다). +동일조건변경허락 — 이 저작물을 이용하여 만든 이차적 저작물에는 본 +라이선스와 동일한 라이선스를 적용해야 합니다.` + + CJK = Chinese + Japanese + Korean + + All = ASCII + Vietnamese + TwoByteUTF8 + ThreeByteUTF8 + CJK +) diff --git a/vendor/golang.org/x/text/internal/triegen/compact.go b/vendor/golang.org/x/text/internal/triegen/compact.go new file mode 100644 index 0000000..397b975 --- /dev/null +++ b/vendor/golang.org/x/text/internal/triegen/compact.go @@ -0,0 +1,58 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package triegen + +// This file defines Compacter and its implementations. + +import "io" + +// A Compacter generates an alternative, more space-efficient way to store a +// trie value block. A trie value block holds all possible values for the last +// byte of a UTF-8 encoded rune. Excluding ASCII characters, a trie value block +// always has 64 values, as a UTF-8 encoding ends with a byte in [0x80, 0xC0). +type Compacter interface { + // Size returns whether the Compacter could encode the given block as well + // as its size in case it can. len(v) is always 64. + Size(v []uint64) (sz int, ok bool) + + // Store stores the block using the Compacter's compression method. + // It returns a handle with which the block can be retrieved. + // len(v) is always 64. + Store(v []uint64) uint32 + + // Print writes the data structures associated to the given store to w. + Print(w io.Writer) error + + // Handler returns the name of a function that gets called during trie + // lookup for blocks generated by the Compacter. The function should be of + // the form func (n uint32, b byte) uint64, where n is the index returned by + // the Compacter's Store method and b is the last byte of the UTF-8 + // encoding, where 0x80 <= b < 0xC0, for which to do the lookup in the + // block. + Handler() string +} + +// simpleCompacter is the default Compacter used by builder. It implements a +// normal trie block. +type simpleCompacter builder + +func (b *simpleCompacter) Size([]uint64) (sz int, ok bool) { + return blockSize * b.ValueSize, true +} + +func (b *simpleCompacter) Store(v []uint64) uint32 { + h := uint32(len(b.ValueBlocks) - blockOffset) + b.ValueBlocks = append(b.ValueBlocks, v) + return h +} + +func (b *simpleCompacter) Print(io.Writer) error { + // Structures are printed in print.go. + return nil +} + +func (b *simpleCompacter) Handler() string { + panic("Handler should be special-cased for this Compacter") +} diff --git a/vendor/golang.org/x/text/internal/triegen/data_test.go b/vendor/golang.org/x/text/internal/triegen/data_test.go new file mode 100644 index 0000000..91de547 --- /dev/null +++ b/vendor/golang.org/x/text/internal/triegen/data_test.go @@ -0,0 +1,875 @@ +// This file is generated with "go test -tags generate". DO NOT EDIT! +// +build !generate + +package triegen_test + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *randTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return randValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := randIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := randIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = randIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := randIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = randIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = randIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *randTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return randValues[c0] + } + i := randIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = randIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = randIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *randTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return randValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := randIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := randIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = randIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := randIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = randIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = randIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *randTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return randValues[c0] + } + i := randIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = randIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = randIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// randTrie. Total size: 9280 bytes (9.06 KiB). Checksum: 6debd324a8debb8f. +type randTrie struct{} + +func newRandTrie(i int) *randTrie { + return &randTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *randTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(randValues[n<<6+uint32(b)]) + } +} + +// randValues: 56 blocks, 3584 entries, 3584 bytes +// The third block is the zero block. +var randValues = [3584]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc9: 0x0001, + // Block 0x4, offset 0x100 + 0x100: 0x0001, + // Block 0x5, offset 0x140 + 0x155: 0x0001, + // Block 0x6, offset 0x180 + 0x196: 0x0001, + // Block 0x7, offset 0x1c0 + 0x1ef: 0x0001, + // Block 0x8, offset 0x200 + 0x206: 0x0001, + // Block 0x9, offset 0x240 + 0x258: 0x0001, + // Block 0xa, offset 0x280 + 0x288: 0x0001, + // Block 0xb, offset 0x2c0 + 0x2f2: 0x0001, + // Block 0xc, offset 0x300 + 0x304: 0x0001, + // Block 0xd, offset 0x340 + 0x34b: 0x0001, + // Block 0xe, offset 0x380 + 0x3ba: 0x0001, + // Block 0xf, offset 0x3c0 + 0x3f5: 0x0001, + // Block 0x10, offset 0x400 + 0x41d: 0x0001, + // Block 0x11, offset 0x440 + 0x442: 0x0001, + // Block 0x12, offset 0x480 + 0x4bb: 0x0001, + // Block 0x13, offset 0x4c0 + 0x4e9: 0x0001, + // Block 0x14, offset 0x500 + 0x53e: 0x0001, + // Block 0x15, offset 0x540 + 0x55f: 0x0001, + // Block 0x16, offset 0x580 + 0x5b7: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5d9: 0x0001, + // Block 0x18, offset 0x600 + 0x60e: 0x0001, + // Block 0x19, offset 0x640 + 0x652: 0x0001, + // Block 0x1a, offset 0x680 + 0x68f: 0x0001, + // Block 0x1b, offset 0x6c0 + 0x6dc: 0x0001, + // Block 0x1c, offset 0x700 + 0x703: 0x0001, + // Block 0x1d, offset 0x740 + 0x741: 0x0001, + // Block 0x1e, offset 0x780 + 0x79b: 0x0001, + // Block 0x1f, offset 0x7c0 + 0x7f1: 0x0001, + // Block 0x20, offset 0x800 + 0x833: 0x0001, + // Block 0x21, offset 0x840 + 0x853: 0x0001, + // Block 0x22, offset 0x880 + 0x8a2: 0x0001, + // Block 0x23, offset 0x8c0 + 0x8f8: 0x0001, + // Block 0x24, offset 0x900 + 0x917: 0x0001, + // Block 0x25, offset 0x940 + 0x945: 0x0001, + // Block 0x26, offset 0x980 + 0x99e: 0x0001, + // Block 0x27, offset 0x9c0 + 0x9fd: 0x0001, + // Block 0x28, offset 0xa00 + 0xa0d: 0x0001, + // Block 0x29, offset 0xa40 + 0xa66: 0x0001, + // Block 0x2a, offset 0xa80 + 0xaab: 0x0001, + // Block 0x2b, offset 0xac0 + 0xaea: 0x0001, + // Block 0x2c, offset 0xb00 + 0xb2d: 0x0001, + // Block 0x2d, offset 0xb40 + 0xb54: 0x0001, + // Block 0x2e, offset 0xb80 + 0xb90: 0x0001, + // Block 0x2f, offset 0xbc0 + 0xbe5: 0x0001, + // Block 0x30, offset 0xc00 + 0xc28: 0x0001, + // Block 0x31, offset 0xc40 + 0xc7c: 0x0001, + // Block 0x32, offset 0xc80 + 0xcbf: 0x0001, + // Block 0x33, offset 0xcc0 + 0xcc7: 0x0001, + // Block 0x34, offset 0xd00 + 0xd34: 0x0001, + // Block 0x35, offset 0xd40 + 0xd61: 0x0001, + // Block 0x36, offset 0xd80 + 0xdb9: 0x0001, + // Block 0x37, offset 0xdc0 + 0xdda: 0x0001, +} + +// randIndex: 89 blocks, 5696 entries, 5696 bytes +// Block 0 is the zero block. +var randIndex = [5696]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x02, 0xe3: 0x03, 0xe4: 0x04, + 0xea: 0x05, 0xeb: 0x06, 0xec: 0x07, + 0xf0: 0x10, 0xf1: 0x24, 0xf2: 0x3d, 0xf3: 0x4f, 0xf4: 0x56, + // Block 0x4, offset 0x100 + 0x107: 0x01, + // Block 0x5, offset 0x140 + 0x16c: 0x02, + // Block 0x6, offset 0x180 + 0x19c: 0x03, + 0x1ae: 0x04, + // Block 0x7, offset 0x1c0 + 0x1d8: 0x05, + 0x1f7: 0x06, + // Block 0x8, offset 0x200 + 0x20c: 0x07, + // Block 0x9, offset 0x240 + 0x24a: 0x08, + // Block 0xa, offset 0x280 + 0x2b6: 0x09, + // Block 0xb, offset 0x2c0 + 0x2d5: 0x0a, + // Block 0xc, offset 0x300 + 0x31a: 0x0b, + // Block 0xd, offset 0x340 + 0x373: 0x0c, + // Block 0xe, offset 0x380 + 0x38b: 0x0d, + // Block 0xf, offset 0x3c0 + 0x3f0: 0x0e, + // Block 0x10, offset 0x400 + 0x433: 0x0f, + // Block 0x11, offset 0x440 + 0x45d: 0x10, + // Block 0x12, offset 0x480 + 0x491: 0x08, 0x494: 0x09, 0x497: 0x0a, + 0x49b: 0x0b, 0x49c: 0x0c, + 0x4a1: 0x0d, + 0x4ad: 0x0e, + 0x4ba: 0x0f, + // Block 0x13, offset 0x4c0 + 0x4c1: 0x11, + // Block 0x14, offset 0x500 + 0x531: 0x12, + // Block 0x15, offset 0x540 + 0x546: 0x13, + // Block 0x16, offset 0x580 + 0x5ab: 0x14, + // Block 0x17, offset 0x5c0 + 0x5d4: 0x11, + 0x5fe: 0x11, + // Block 0x18, offset 0x600 + 0x618: 0x0a, + // Block 0x19, offset 0x640 + 0x65b: 0x15, + // Block 0x1a, offset 0x680 + 0x6a0: 0x16, + // Block 0x1b, offset 0x6c0 + 0x6d2: 0x17, + 0x6f6: 0x18, + // Block 0x1c, offset 0x700 + 0x711: 0x19, + // Block 0x1d, offset 0x740 + 0x768: 0x1a, + // Block 0x1e, offset 0x780 + 0x783: 0x1b, + // Block 0x1f, offset 0x7c0 + 0x7f9: 0x1c, + // Block 0x20, offset 0x800 + 0x831: 0x1d, + // Block 0x21, offset 0x840 + 0x85e: 0x1e, + // Block 0x22, offset 0x880 + 0x898: 0x1f, + // Block 0x23, offset 0x8c0 + 0x8c7: 0x18, + 0x8d5: 0x14, + 0x8f7: 0x20, + 0x8fe: 0x1f, + // Block 0x24, offset 0x900 + 0x905: 0x21, + // Block 0x25, offset 0x940 + 0x966: 0x03, + // Block 0x26, offset 0x980 + 0x981: 0x07, 0x983: 0x11, + 0x989: 0x12, 0x98a: 0x13, 0x98e: 0x14, 0x98f: 0x15, + 0x992: 0x16, 0x995: 0x17, 0x996: 0x18, + 0x998: 0x19, 0x999: 0x1a, 0x99b: 0x1b, 0x99f: 0x1c, + 0x9a3: 0x1d, + 0x9ad: 0x1e, 0x9af: 0x1f, + 0x9b0: 0x20, 0x9b1: 0x21, + 0x9b8: 0x22, 0x9bd: 0x23, + // Block 0x27, offset 0x9c0 + 0x9cd: 0x22, + // Block 0x28, offset 0xa00 + 0xa0c: 0x08, + // Block 0x29, offset 0xa40 + 0xa6f: 0x1c, + // Block 0x2a, offset 0xa80 + 0xa90: 0x1a, + 0xaaf: 0x23, + // Block 0x2b, offset 0xac0 + 0xae3: 0x19, + 0xae8: 0x24, + 0xafc: 0x25, + // Block 0x2c, offset 0xb00 + 0xb13: 0x26, + // Block 0x2d, offset 0xb40 + 0xb67: 0x1c, + // Block 0x2e, offset 0xb80 + 0xb8f: 0x0b, + // Block 0x2f, offset 0xbc0 + 0xbcb: 0x27, + 0xbe7: 0x26, + // Block 0x30, offset 0xc00 + 0xc34: 0x16, + // Block 0x31, offset 0xc40 + 0xc62: 0x03, + // Block 0x32, offset 0xc80 + 0xcbb: 0x12, + // Block 0x33, offset 0xcc0 + 0xcdf: 0x09, + // Block 0x34, offset 0xd00 + 0xd34: 0x0a, + // Block 0x35, offset 0xd40 + 0xd41: 0x1e, + // Block 0x36, offset 0xd80 + 0xd83: 0x28, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x15, + // Block 0x38, offset 0xe00 + 0xe1a: 0x15, + // Block 0x39, offset 0xe40 + 0xe65: 0x29, + // Block 0x3a, offset 0xe80 + 0xe86: 0x1f, + // Block 0x3b, offset 0xec0 + 0xeec: 0x18, + // Block 0x3c, offset 0xf00 + 0xf28: 0x2a, + // Block 0x3d, offset 0xf40 + 0xf53: 0x08, + // Block 0x3e, offset 0xf80 + 0xfa2: 0x2b, + 0xfaa: 0x17, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x25, 0xfc2: 0x26, + 0xfc9: 0x27, 0xfcd: 0x28, 0xfce: 0x29, + 0xfd5: 0x2a, + 0xfd8: 0x2b, 0xfd9: 0x2c, 0xfdf: 0x2d, + 0xfe1: 0x2e, 0xfe2: 0x2f, 0xfe3: 0x30, 0xfe6: 0x31, + 0xfe9: 0x32, 0xfec: 0x33, 0xfed: 0x34, 0xfef: 0x35, + 0xff1: 0x36, 0xff2: 0x37, 0xff3: 0x38, 0xff4: 0x39, + 0xffa: 0x3a, 0xffc: 0x3b, 0xffe: 0x3c, + // Block 0x40, offset 0x1000 + 0x102c: 0x2c, + // Block 0x41, offset 0x1040 + 0x1074: 0x2c, + // Block 0x42, offset 0x1080 + 0x108c: 0x08, + 0x10a0: 0x2d, + // Block 0x43, offset 0x10c0 + 0x10e8: 0x10, + // Block 0x44, offset 0x1100 + 0x110f: 0x13, + // Block 0x45, offset 0x1140 + 0x114b: 0x2e, + // Block 0x46, offset 0x1180 + 0x118b: 0x23, + 0x119d: 0x0c, + // Block 0x47, offset 0x11c0 + 0x11c3: 0x12, + 0x11f9: 0x0f, + // Block 0x48, offset 0x1200 + 0x121e: 0x1b, + // Block 0x49, offset 0x1240 + 0x1270: 0x2f, + // Block 0x4a, offset 0x1280 + 0x128a: 0x1b, + 0x12a7: 0x02, + // Block 0x4b, offset 0x12c0 + 0x12fb: 0x14, + // Block 0x4c, offset 0x1300 + 0x1333: 0x30, + // Block 0x4d, offset 0x1340 + 0x134d: 0x31, + // Block 0x4e, offset 0x1380 + 0x138e: 0x15, + // Block 0x4f, offset 0x13c0 + 0x13f4: 0x32, + // Block 0x50, offset 0x1400 + 0x141b: 0x33, + // Block 0x51, offset 0x1440 + 0x1448: 0x3e, 0x1449: 0x3f, 0x144a: 0x40, 0x144f: 0x41, + 0x1459: 0x42, 0x145c: 0x43, 0x145e: 0x44, 0x145f: 0x45, + 0x1468: 0x46, 0x1469: 0x47, 0x146c: 0x48, 0x146d: 0x49, 0x146e: 0x4a, + 0x1472: 0x4b, 0x1473: 0x4c, + 0x1479: 0x4d, 0x147b: 0x4e, + // Block 0x52, offset 0x1480 + 0x1480: 0x34, + 0x1499: 0x11, + 0x14b6: 0x2c, + // Block 0x53, offset 0x14c0 + 0x14e4: 0x0d, + // Block 0x54, offset 0x1500 + 0x1527: 0x08, + // Block 0x55, offset 0x1540 + 0x1555: 0x2b, + // Block 0x56, offset 0x1580 + 0x15b2: 0x35, + // Block 0x57, offset 0x15c0 + 0x15f2: 0x1c, 0x15f4: 0x29, + // Block 0x58, offset 0x1600 + 0x1600: 0x50, 0x1603: 0x51, + 0x1608: 0x52, 0x160a: 0x53, 0x160d: 0x54, 0x160e: 0x55, +} + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *multiTrie) lookup(s []byte) (v uint64, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return t.ascii[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := t.utf8Start[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := t.utf8Start[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = multiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := t.utf8Start[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = multiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = multiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *multiTrie) lookupUnsafe(s []byte) uint64 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return t.ascii[c0] + } + i := t.utf8Start[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = multiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = multiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *multiTrie) lookupString(s string) (v uint64, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return t.ascii[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := t.utf8Start[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := t.utf8Start[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = multiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := t.utf8Start[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = multiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = multiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *multiTrie) lookupStringUnsafe(s string) uint64 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return t.ascii[c0] + } + i := t.utf8Start[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = multiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = multiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// multiTrie. Total size: 18250 bytes (17.82 KiB). Checksum: a69a609d8696aa5e. +type multiTrie struct { + ascii []uint64 // index for ASCII bytes + utf8Start []uint8 // index for UTF-8 bytes >= 0xC0 +} + +func newMultiTrie(i int) *multiTrie { + h := multiTrieHandles[i] + return &multiTrie{multiValues[uint32(h.ascii)<<6:], multiIndex[uint32(h.multi)<<6:]} +} + +type multiTrieHandle struct { + ascii, multi uint8 +} + +// multiTrieHandles: 5 handles, 10 bytes +var multiTrieHandles = [5]multiTrieHandle{ + {0, 0}, // 8c1e77823143d35c: all + {0, 23}, // 8fb58ff8243b45b0: ASCII only + {0, 23}, // 8fb58ff8243b45b0: ASCII only 2 + {0, 24}, // 2ccc43994f11046f: BMP only + {30, 25}, // ce448591bdcb4733: No BMP +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *multiTrie) lookupValue(n uint32, b byte) uint64 { + switch { + default: + return uint64(multiValues[n<<6+uint32(b)]) + } +} + +// multiValues: 32 blocks, 2048 entries, 16384 bytes +// The third block is the zero block. +var multiValues = [2048]uint64{ + // Block 0x0, offset 0x0 + 0x03: 0x6e361699800b9fb8, 0x04: 0x52d3935a34f6f0b, 0x05: 0x2948319393e7ef10, + 0x07: 0x20f03b006704f663, 0x08: 0x6c15c0732bb2495f, 0x09: 0xe54e2c59d953551, + 0x0f: 0x33d8a825807d8037, 0x10: 0x6ecd93cb12168b92, 0x11: 0x6a81c9c0ce86e884, + 0x1f: 0xa03e77aac8be79b, 0x20: 0x28591d0e7e486efa, 0x21: 0x716fa3bc398dec8, + 0x3f: 0x4fd3bcfa72bce8b0, + // Block 0x1, offset 0x40 + 0x40: 0x3cbaef3db8ba5f12, 0x41: 0x2d262347c1f56357, + 0x7f: 0x782caa2d25a418a9, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x6bbd1f937b1ff5d2, 0xc1: 0x732e23088d2eb8a4, + // Block 0x4, offset 0x100 + 0x13f: 0x56f8c4c82f5962dc, + // Block 0x5, offset 0x140 + 0x140: 0x57dc4544729a5da2, 0x141: 0x2f62f9cd307ffa0d, + // Block 0x6, offset 0x180 + 0x1bf: 0x7bf4d0ebf302a088, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x1f0d67f249e59931, 0x1c1: 0x3011def73aa550c7, + // Block 0x8, offset 0x200 + 0x23f: 0x5de81c1dff6bf29d, + // Block 0x9, offset 0x240 + 0x240: 0x752c035737b825e8, 0x241: 0x1e793399081e3bb3, + // Block 0xa, offset 0x280 + 0x2bf: 0x6a28f01979cbf059, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x373a4b0f2cbd4c74, 0x2c1: 0x4fd2c288683b767c, + // Block 0xc, offset 0x300 + 0x33f: 0x5a10ffa9e29184fb, + // Block 0xd, offset 0x340 + 0x340: 0x700f9bdb53fff6a5, 0x341: 0xcde93df0427eb79, + // Block 0xe, offset 0x380 + 0x3bf: 0x74071288fff39c76, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x481fc2f510e5268a, 0x3c1: 0x7565c28164204849, + // Block 0x10, offset 0x400 + 0x43f: 0x5676a62fd49c6bec, + // Block 0x11, offset 0x440 + 0x440: 0x2f2d15776cbafc6b, 0x441: 0x4c55e8dc0ff11a3f, + // Block 0x12, offset 0x480 + 0x4bf: 0x69d6f0fe711fafc9, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x33181de28cfb062d, 0x4c1: 0x2ef3adc6bb2f2d02, + // Block 0x14, offset 0x500 + 0x53f: 0xe03b31814c95f8b, + // Block 0x15, offset 0x540 + 0x540: 0x3bf6dc9a1c115603, 0x541: 0x6984ec9b7f51f7fc, + // Block 0x16, offset 0x580 + 0x5bf: 0x3c02ea92fb168559, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x1badfe42e7629494, 0x5c1: 0x6dc4a554005f7645, + // Block 0x18, offset 0x600 + 0x63f: 0x3bb2ed2a72748f4b, + // Block 0x19, offset 0x640 + 0x640: 0x291354cd6767ec10, 0x641: 0x2c3a4715e3c070d6, + // Block 0x1a, offset 0x680 + 0x6bf: 0x352711cfb7236418, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3a59d34fb8bceda, 0x6c1: 0x5e90d8ebedd64fa1, + // Block 0x1c, offset 0x700 + 0x73f: 0x7191a77b28d23110, + // Block 0x1d, offset 0x740 + 0x740: 0x4ca7f0c1623423d8, 0x741: 0x4f7156d996e2d0de, + // Block 0x1e, offset 0x780 + // Block 0x1f, offset 0x7c0 +} + +// multiIndex: 29 blocks, 1856 entries, 1856 bytes +// Block 0 is the zero block. +var multiIndex = [1856]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc7: 0x04, + 0xc8: 0x05, 0xcf: 0x06, + 0xd0: 0x07, + 0xdf: 0x08, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe7: 0x07, + 0xe8: 0x08, 0xef: 0x09, + 0xf0: 0x0e, 0xf1: 0x11, 0xf2: 0x13, 0xf3: 0x15, 0xf4: 0x17, + // Block 0x4, offset 0x100 + 0x120: 0x09, + 0x13f: 0x0a, + // Block 0x5, offset 0x140 + 0x140: 0x0b, + 0x17f: 0x0c, + // Block 0x6, offset 0x180 + 0x180: 0x0d, + // Block 0x7, offset 0x1c0 + 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0f, + // Block 0x9, offset 0x240 + 0x27f: 0x10, + // Block 0xa, offset 0x280 + 0x280: 0x11, + // Block 0xb, offset 0x2c0 + 0x2ff: 0x12, + // Block 0xc, offset 0x300 + 0x300: 0x13, + // Block 0xd, offset 0x340 + 0x37f: 0x14, + // Block 0xe, offset 0x380 + 0x380: 0x15, + // Block 0xf, offset 0x3c0 + 0x3ff: 0x16, + // Block 0x10, offset 0x400 + 0x410: 0x0a, + 0x41f: 0x0b, + 0x420: 0x0c, + 0x43f: 0x0d, + // Block 0x11, offset 0x440 + 0x440: 0x17, + // Block 0x12, offset 0x480 + 0x4bf: 0x18, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0f, + 0x4ff: 0x10, + // Block 0x14, offset 0x500 + 0x500: 0x19, + // Block 0x15, offset 0x540 + 0x540: 0x12, + // Block 0x16, offset 0x580 + 0x5bf: 0x1a, + // Block 0x17, offset 0x5c0 + 0x5ff: 0x14, + // Block 0x18, offset 0x600 + 0x600: 0x1b, + // Block 0x19, offset 0x640 + 0x640: 0x16, + // Block 0x1a, offset 0x680 + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x01, 0x6c3: 0x02, 0x6c4: 0x03, 0x6c7: 0x04, + 0x6c8: 0x05, 0x6cf: 0x06, + 0x6d0: 0x07, + 0x6df: 0x08, + 0x6e0: 0x02, 0x6e1: 0x03, 0x6e2: 0x04, 0x6e3: 0x05, 0x6e4: 0x06, 0x6e7: 0x07, + 0x6e8: 0x08, 0x6ef: 0x09, + // Block 0x1c, offset 0x700 + 0x730: 0x0e, 0x731: 0x11, 0x732: 0x13, 0x733: 0x15, 0x734: 0x17, +} diff --git a/vendor/golang.org/x/text/internal/triegen/example_compact_test.go b/vendor/golang.org/x/text/internal/triegen/example_compact_test.go new file mode 100644 index 0000000..7cf604c --- /dev/null +++ b/vendor/golang.org/x/text/internal/triegen/example_compact_test.go @@ -0,0 +1,71 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package triegen_test + +import ( + "fmt" + "io" + "io/ioutil" + + "golang.org/x/text/internal/triegen" +) + +func ExampleCompacter() { + t := triegen.NewTrie("root") + for r := rune(0); r < 10000; r += 64 { + t.Insert(r, 0x9015BADA55^uint64(r)) + } + sz, _ := t.Gen(ioutil.Discard) + + fmt.Printf("Size normal: %5d\n", sz) + + var c myCompacter + sz, _ = t.Gen(ioutil.Discard, triegen.Compact(&c)) + + fmt.Printf("Size compacted: %5d\n", sz) + + // Output: + // Size normal: 81344 + // Size compacted: 3224 +} + +// A myCompacter accepts a block if only the first value is given. +type myCompacter []uint64 + +func (c *myCompacter) Size(values []uint64) (sz int, ok bool) { + for _, v := range values[1:] { + if v != 0 { + return 0, false + } + } + return 8, true // the size of a uint64 +} + +func (c *myCompacter) Store(v []uint64) uint32 { + x := uint32(len(*c)) + *c = append(*c, v[0]) + return x +} + +func (c *myCompacter) Print(w io.Writer) error { + fmt.Fprintln(w, "var firstValue = []uint64{") + for _, v := range *c { + fmt.Fprintf(w, "\t%#x,\n", v) + } + fmt.Fprintln(w, "}") + return nil +} + +func (c *myCompacter) Handler() string { + return "getFirstValue" + + // Where getFirstValue is included along with the generated code: + // func getFirstValue(n uint32, b byte) uint64 { + // if b == 0x80 { // the first continuation byte + // return firstValue[n] + // } + // return 0 + // } +} diff --git a/vendor/golang.org/x/text/internal/triegen/example_test.go b/vendor/golang.org/x/text/internal/triegen/example_test.go new file mode 100644 index 0000000..557a152 --- /dev/null +++ b/vendor/golang.org/x/text/internal/triegen/example_test.go @@ -0,0 +1,148 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package triegen_test + +import ( + "fmt" + "io/ioutil" + "math/rand" + "unicode" + + "golang.org/x/text/internal/triegen" +) + +const seed = 0x12345 + +var genWriter = ioutil.Discard + +func randomRunes() map[rune]uint8 { + rnd := rand.New(rand.NewSource(seed)) + m := map[rune]uint8{} + for len(m) < 100 { + // Only set our random rune if it is a valid Unicode code point. + if r := rune(rnd.Int31n(unicode.MaxRune + 1)); []rune(string(r))[0] == r { + m[r] = 1 + } + } + return m +} + +// Example_build shows how to build a simple trie. It assigns the value 1 to +// 100 random runes generated by randomRunes. +func Example_build() { + t := triegen.NewTrie("rand") + + for r, _ := range randomRunes() { + t.Insert(r, 1) + } + sz, err := t.Gen(genWriter) + + fmt.Printf("Trie size: %d bytes\n", sz) + fmt.Printf("Error: %v\n", err) + + // Output: + // Trie size: 9280 bytes + // Error: <nil> +} + +// Example_lookup demonstrates how to use the trie generated by Example_build. +func Example_lookup() { + trie := newRandTrie(0) + + // The same set of runes used by Example_build. + runes := randomRunes() + + // Verify the right value is returned for all runes. + for r := rune(0); r <= unicode.MaxRune; r++ { + // Note that the return type of lookup is uint8. + if v, _ := trie.lookupString(string(r)); v != runes[r] { + fmt.Println("FAILURE") + return + } + } + fmt.Println("SUCCESS") + + // Output: + // SUCCESS +} + +// runeValues generates some random values for a set of interesting runes. +func runeValues() map[rune]uint64 { + rnd := rand.New(rand.NewSource(seed)) + m := map[rune]uint64{} + for p := 4; p <= unicode.MaxRune; p <<= 1 { + for d := -1; d <= 1; d++ { + m[rune(p+d)] = uint64(rnd.Int63()) + } + } + return m +} + +// ExampleGen_build demonstrates the creation of multiple tries sharing common +// blocks. ExampleGen_lookup demonstrates how to use the generated tries. +func ExampleGen_build() { + var tries []*triegen.Trie + + rv := runeValues() + for _, c := range []struct { + include func(rune) bool + name string + }{ + {func(r rune) bool { return true }, "all"}, + {func(r rune) bool { return r < 0x80 }, "ASCII only"}, + {func(r rune) bool { return r < 0x80 }, "ASCII only 2"}, + {func(r rune) bool { return r <= 0xFFFF }, "BMP only"}, + {func(r rune) bool { return r > 0xFFFF }, "No BMP"}, + } { + t := triegen.NewTrie(c.name) + tries = append(tries, t) + + for r, v := range rv { + if c.include(r) { + t.Insert(r, v) + } + } + } + sz, err := triegen.Gen(genWriter, "multi", tries) + + fmt.Printf("Trie size: %d bytes\n", sz) + fmt.Printf("Error: %v\n", err) + + // Output: + // Trie size: 18250 bytes + // Error: <nil> +} + +// ExampleGen_lookup shows how to look up values in the trie generated by +// ExampleGen_build. +func ExampleGen_lookup() { + rv := runeValues() + for i, include := range []func(rune) bool{ + func(r rune) bool { return true }, // all + func(r rune) bool { return r < 0x80 }, // ASCII only + func(r rune) bool { return r < 0x80 }, // ASCII only 2 + func(r rune) bool { return r <= 0xFFFF }, // BMP only + func(r rune) bool { return r > 0xFFFF }, // No BMP + } { + t := newMultiTrie(i) + + for r := rune(0); r <= unicode.MaxRune; r++ { + x := uint64(0) + if include(r) { + x = rv[r] + } + // As we convert from a valid rune, we know it is safe to use + // lookupStringUnsafe. + if v := t.lookupStringUnsafe(string(r)); x != v { + fmt.Println("FAILURE") + return + } + } + } + fmt.Println("SUCCESS") + + // Output: + // SUCCESS +} diff --git a/vendor/golang.org/x/text/internal/triegen/gen_test.go b/vendor/golang.org/x/text/internal/triegen/gen_test.go new file mode 100644 index 0000000..831627d --- /dev/null +++ b/vendor/golang.org/x/text/internal/triegen/gen_test.go @@ -0,0 +1,68 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build generate + +package triegen_test + +// The code in this file generates captures and writes the tries generated in +// the examples to data_test.go. To invoke it, run: +// go test -tags=generate +// +// Making the generation code a "test" allows us to link in the necessary test +// code. + +import ( + "log" + "os" + "os/exec" +) + +func init() { + const tmpfile = "tmpout" + const dstfile = "data_test.go" + + f, err := os.Create(tmpfile) + if err != nil { + log.Fatalf("Could not create output file: %v", err) + } + defer os.Remove(tmpfile) + defer f.Close() + + // We exit before this function returns, regardless of success or failure, + // so there's no need to save (and later restore) the existing genWriter + // value. + genWriter = f + + f.Write([]byte(header)) + + Example_build() + ExampleGen_build() + + if err := exec.Command("gofmt", "-w", tmpfile).Run(); err != nil { + log.Fatal(err) + } + os.Remove(dstfile) + os.Rename(tmpfile, dstfile) + + os.Exit(0) +} + +const header = `// This file is generated with "go test -tags generate". DO NOT EDIT! +// +build !generate + +package triegen_test +` + +// Stubs for generated tries. These are needed as we exclude data_test.go if +// the generate flag is set. This will clearly make the tests fail, but that +// is okay. It allows us to bootstrap. + +type trie struct{} + +func (t *trie) lookupString(string) (uint8, int) { return 0, 1 } +func (t *trie) lookupStringUnsafe(string) uint64 { return 0 } + +func newRandTrie(i int) *trie { return &trie{} } +func newMultiTrie(i int) *trie { return &trie{} } diff --git a/vendor/golang.org/x/text/internal/triegen/print.go b/vendor/golang.org/x/text/internal/triegen/print.go new file mode 100644 index 0000000..8d9f120 --- /dev/null +++ b/vendor/golang.org/x/text/internal/triegen/print.go @@ -0,0 +1,251 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package triegen + +import ( + "bytes" + "fmt" + "io" + "strings" + "text/template" +) + +// print writes all the data structures as well as the code necessary to use the +// trie to w. +func (b *builder) print(w io.Writer) error { + b.Stats.NValueEntries = len(b.ValueBlocks) * blockSize + b.Stats.NValueBytes = len(b.ValueBlocks) * blockSize * b.ValueSize + b.Stats.NIndexEntries = len(b.IndexBlocks) * blockSize + b.Stats.NIndexBytes = len(b.IndexBlocks) * blockSize * b.IndexSize + b.Stats.NHandleBytes = len(b.Trie) * 2 * b.IndexSize + + // If we only have one root trie, all starter blocks are at position 0 and + // we can access the arrays directly. + if len(b.Trie) == 1 { + // At this point we cannot refer to the generated tables directly. + b.ASCIIBlock = b.Name + "Values" + b.StarterBlock = b.Name + "Index" + } else { + // Otherwise we need to have explicit starter indexes in the trie + // structure. + b.ASCIIBlock = "t.ascii" + b.StarterBlock = "t.utf8Start" + } + + b.SourceType = "[]byte" + if err := lookupGen.Execute(w, b); err != nil { + return err + } + + b.SourceType = "string" + if err := lookupGen.Execute(w, b); err != nil { + return err + } + + if err := trieGen.Execute(w, b); err != nil { + return err + } + + for _, c := range b.Compactions { + if err := c.c.Print(w); err != nil { + return err + } + } + + return nil +} + +func printValues(n int, values []uint64) string { + w := &bytes.Buffer{} + boff := n * blockSize + fmt.Fprintf(w, "\t// Block %#x, offset %#x", n, boff) + var newline bool + for i, v := range values { + if i%6 == 0 { + newline = true + } + if v != 0 { + if newline { + fmt.Fprintf(w, "\n") + newline = false + } + fmt.Fprintf(w, "\t%#02x:%#04x, ", boff+i, v) + } + } + return w.String() +} + +func printIndex(b *builder, nr int, n *node) string { + w := &bytes.Buffer{} + boff := nr * blockSize + fmt.Fprintf(w, "\t// Block %#x, offset %#x", nr, boff) + var newline bool + for i, c := range n.children { + if i%8 == 0 { + newline = true + } + if c != nil { + v := b.Compactions[c.index.compaction].Offset + uint32(c.index.index) + if v != 0 { + if newline { + fmt.Fprintf(w, "\n") + newline = false + } + fmt.Fprintf(w, "\t%#02x:%#02x, ", boff+i, v) + } + } + } + return w.String() +} + +var ( + trieGen = template.Must(template.New("trie").Funcs(template.FuncMap{ + "printValues": printValues, + "printIndex": printIndex, + "title": strings.Title, + "dec": func(x int) int { return x - 1 }, + "psize": func(n int) string { + return fmt.Sprintf("%d bytes (%.2f KiB)", n, float64(n)/1024) + }, + }).Parse(trieTemplate)) + lookupGen = template.Must(template.New("lookup").Parse(lookupTemplate)) +) + +// TODO: consider the return type of lookup. It could be uint64, even if the +// internal value type is smaller. We will have to verify this with the +// performance of unicode/norm, which is very sensitive to such changes. +const trieTemplate = `{{$b := .}}{{$multi := gt (len .Trie) 1}} +// {{.Name}}Trie. Total size: {{psize .Size}}. Checksum: {{printf "%08x" .Checksum}}. +type {{.Name}}Trie struct { {{if $multi}} + ascii []{{.ValueType}} // index for ASCII bytes + utf8Start []{{.IndexType}} // index for UTF-8 bytes >= 0xC0 +{{end}}} + +func new{{title .Name}}Trie(i int) *{{.Name}}Trie { {{if $multi}} + h := {{.Name}}TrieHandles[i] + return &{{.Name}}Trie{ {{.Name}}Values[uint32(h.ascii)<<6:], {{.Name}}Index[uint32(h.multi)<<6:] } +} + +type {{.Name}}TrieHandle struct { + ascii, multi {{.IndexType}} +} + +// {{.Name}}TrieHandles: {{len .Trie}} handles, {{.Stats.NHandleBytes}} bytes +var {{.Name}}TrieHandles = [{{len .Trie}}]{{.Name}}TrieHandle{ +{{range .Trie}} { {{.ASCIIIndex}}, {{.StarterIndex}} }, // {{printf "%08x" .Checksum}}: {{.Name}} +{{end}}}{{else}} + return &{{.Name}}Trie{} +} +{{end}} +// lookupValue determines the type of block n and looks up the value for b. +func (t *{{.Name}}Trie) lookupValue(n uint32, b byte) {{.ValueType}}{{$last := dec (len .Compactions)}} { + switch { {{range $i, $c := .Compactions}} + {{if eq $i $last}}default{{else}}case n < {{$c.Cutoff}}{{end}}:{{if ne $i 0}} + n -= {{$c.Offset}}{{end}} + return {{print $b.ValueType}}({{$c.Handler}}){{end}} + } +} + +// {{.Name}}Values: {{len .ValueBlocks}} blocks, {{.Stats.NValueEntries}} entries, {{.Stats.NValueBytes}} bytes +// The third block is the zero block. +var {{.Name}}Values = [{{.Stats.NValueEntries}}]{{.ValueType}} { +{{range $i, $v := .ValueBlocks}}{{printValues $i $v}} +{{end}}} + +// {{.Name}}Index: {{len .IndexBlocks}} blocks, {{.Stats.NIndexEntries}} entries, {{.Stats.NIndexBytes}} bytes +// Block 0 is the zero block. +var {{.Name}}Index = [{{.Stats.NIndexEntries}}]{{.IndexType}} { +{{range $i, $v := .IndexBlocks}}{{printIndex $b $i $v}} +{{end}}} +` + +// TODO: consider allowing zero-length strings after evaluating performance with +// unicode/norm. +const lookupTemplate = ` +// lookup{{if eq .SourceType "string"}}String{{end}} returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *{{.Name}}Trie) lookup{{if eq .SourceType "string"}}String{{end}}(s {{.SourceType}}) (v {{.ValueType}}, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return {{.ASCIIBlock}}[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := {{.StarterBlock}}[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := {{.StarterBlock}}[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = {{.Name}}Index[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := {{.StarterBlock}}[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = {{.Name}}Index[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = {{.Name}}Index[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookup{{if eq .SourceType "string"}}String{{end}}Unsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *{{.Name}}Trie) lookup{{if eq .SourceType "string"}}String{{end}}Unsafe(s {{.SourceType}}) {{.ValueType}} { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return {{.ASCIIBlock}}[c0] + } + i := {{.StarterBlock}}[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = {{.Name}}Index[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = {{.Name}}Index[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} +` diff --git a/vendor/golang.org/x/text/internal/triegen/triegen.go b/vendor/golang.org/x/text/internal/triegen/triegen.go new file mode 100644 index 0000000..adb0108 --- /dev/null +++ b/vendor/golang.org/x/text/internal/triegen/triegen.go @@ -0,0 +1,494 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package triegen implements a code generator for a trie for associating +// unsigned integer values with UTF-8 encoded runes. +// +// Many of the go.text packages use tries for storing per-rune information. A +// trie is especially useful if many of the runes have the same value. If this +// is the case, many blocks can be expected to be shared allowing for +// information on many runes to be stored in little space. +// +// As most of the lookups are done directly on []byte slices, the tries use the +// UTF-8 bytes directly for the lookup. This saves a conversion from UTF-8 to +// runes and contributes a little bit to better performance. It also naturally +// provides a fast path for ASCII. +// +// Space is also an issue. There are many code points defined in Unicode and as +// a result tables can get quite large. So every byte counts. The triegen +// package automatically chooses the smallest integer values to represent the +// tables. Compacters allow further compression of the trie by allowing for +// alternative representations of individual trie blocks. +// +// triegen allows generating multiple tries as a single structure. This is +// useful when, for example, one wants to generate tries for several languages +// that have a lot of values in common. Some existing libraries for +// internationalization store all per-language data as a dynamically loadable +// chunk. The go.text packages are designed with the assumption that the user +// typically wants to compile in support for all supported languages, in line +// with the approach common to Go to create a single standalone binary. The +// multi-root trie approach can give significant storage savings in this +// scenario. +// +// triegen generates both tables and code. The code is optimized to use the +// automatically chosen data types. The following code is generated for a Trie +// or multiple Tries named "foo": +// - type fooTrie +// The trie type. +// +// - func newFooTrie(x int) *fooTrie +// Trie constructor, where x is the index of the trie passed to Gen. +// +// - func (t *fooTrie) lookup(s []byte) (v uintX, sz int) +// The lookup method, where uintX is automatically chosen. +// +// - func lookupString, lookupUnsafe and lookupStringUnsafe +// Variants of the above. +// +// - var fooValues and fooIndex and any tables generated by Compacters. +// The core trie data. +// +// - var fooTrieHandles +// Indexes of starter blocks in case of multiple trie roots. +// +// It is recommended that users test the generated trie by checking the returned +// value for every rune. Such exhaustive tests are possible as the the number of +// runes in Unicode is limited. +package triegen // import "golang.org/x/text/internal/triegen" + +// TODO: Arguably, the internally optimized data types would not have to be +// exposed in the generated API. We could also investigate not generating the +// code, but using it through a package. We would have to investigate the impact +// on performance of making such change, though. For packages like unicode/norm, +// small changes like this could tank performance. + +import ( + "encoding/binary" + "fmt" + "hash/crc64" + "io" + "log" + "unicode/utf8" +) + +// builder builds a set of tries for associating values with runes. The set of +// tries can share common index and value blocks. +type builder struct { + Name string + + // ValueType is the type of the trie values looked up. + ValueType string + + // ValueSize is the byte size of the ValueType. + ValueSize int + + // IndexType is the type of trie index values used for all UTF-8 bytes of + // a rune except the last one. + IndexType string + + // IndexSize is the byte size of the IndexType. + IndexSize int + + // SourceType is used when generating the lookup functions. If the user + // requests StringSupport, all lookup functions will be generated for + // string input as well. + SourceType string + + Trie []*Trie + + IndexBlocks []*node + ValueBlocks [][]uint64 + Compactions []compaction + Checksum uint64 + + ASCIIBlock string + StarterBlock string + + indexBlockIdx map[uint64]int + valueBlockIdx map[uint64]nodeIndex + asciiBlockIdx map[uint64]int + + // Stats are used to fill out the template. + Stats struct { + NValueEntries int + NValueBytes int + NIndexEntries int + NIndexBytes int + NHandleBytes int + } + + err error +} + +// A nodeIndex encodes the index of a node, which is defined by the compaction +// which stores it and an index within the compaction. For internal nodes, the +// compaction is always 0. +type nodeIndex struct { + compaction int + index int +} + +// compaction keeps track of stats used for the compaction. +type compaction struct { + c Compacter + blocks []*node + maxHandle uint32 + totalSize int + + // Used by template-based generator and thus exported. + Cutoff uint32 + Offset uint32 + Handler string +} + +func (b *builder) setError(err error) { + if b.err == nil { + b.err = err + } +} + +// An Option can be passed to Gen. +type Option func(b *builder) error + +// Compact configures the trie generator to use the given Compacter. +func Compact(c Compacter) Option { + return func(b *builder) error { + b.Compactions = append(b.Compactions, compaction{ + c: c, + Handler: c.Handler() + "(n, b)"}) + return nil + } +} + +// Gen writes Go code for a shared trie lookup structure to w for the given +// Tries. The generated trie type will be called nameTrie. newNameTrie(x) will +// return the *nameTrie for tries[x]. A value can be looked up by using one of +// the various lookup methods defined on nameTrie. It returns the table size of +// the generated trie. +func Gen(w io.Writer, name string, tries []*Trie, opts ...Option) (sz int, err error) { + // The index contains two dummy blocks, followed by the zero block. The zero + // block is at offset 0x80, so that the offset for the zero block for + // continuation bytes is 0. + b := &builder{ + Name: name, + Trie: tries, + IndexBlocks: []*node{{}, {}, {}}, + Compactions: []compaction{{ + Handler: name + "Values[n<<6+uint32(b)]", + }}, + // The 0 key in indexBlockIdx and valueBlockIdx is the hash of the zero + // block. + indexBlockIdx: map[uint64]int{0: 0}, + valueBlockIdx: map[uint64]nodeIndex{0: {}}, + asciiBlockIdx: map[uint64]int{}, + } + b.Compactions[0].c = (*simpleCompacter)(b) + + for _, f := range opts { + if err := f(b); err != nil { + return 0, err + } + } + b.build() + if b.err != nil { + return 0, b.err + } + if err = b.print(w); err != nil { + return 0, err + } + return b.Size(), nil +} + +// A Trie represents a single root node of a trie. A builder may build several +// overlapping tries at once. +type Trie struct { + root *node + + hiddenTrie +} + +// hiddenTrie contains values we want to be visible to the template generator, +// but hidden from the API documentation. +type hiddenTrie struct { + Name string + Checksum uint64 + ASCIIIndex int + StarterIndex int +} + +// NewTrie returns a new trie root. +func NewTrie(name string) *Trie { + return &Trie{ + &node{ + children: make([]*node, blockSize), + values: make([]uint64, utf8.RuneSelf), + }, + hiddenTrie{Name: name}, + } +} + +// Gen is a convenience wrapper around the Gen func passing t as the only trie +// and uses the name passed to NewTrie. It returns the size of the generated +// tables. +func (t *Trie) Gen(w io.Writer, opts ...Option) (sz int, err error) { + return Gen(w, t.Name, []*Trie{t}, opts...) +} + +// node is a node of the intermediate trie structure. +type node struct { + // children holds this node's children. It is always of length 64. + // A child node may be nil. + children []*node + + // values contains the values of this node. If it is non-nil, this node is + // either a root or leaf node: + // For root nodes, len(values) == 128 and it maps the bytes in [0x00, 0x7F]. + // For leaf nodes, len(values) == 64 and it maps the bytes in [0x80, 0xBF]. + values []uint64 + + index nodeIndex +} + +// Insert associates value with the given rune. Insert will panic if a non-zero +// value is passed for an invalid rune. +func (t *Trie) Insert(r rune, value uint64) { + if value == 0 { + return + } + s := string(r) + if []rune(s)[0] != r && value != 0 { + // Note: The UCD tables will always assign what amounts to a zero value + // to a surrogate. Allowing a zero value for an illegal rune allows + // users to iterate over [0..MaxRune] without having to explicitly + // exclude surrogates, which would be tedious. + panic(fmt.Sprintf("triegen: non-zero value for invalid rune %U", r)) + } + if len(s) == 1 { + // It is a root node value (ASCII). + t.root.values[s[0]] = value + return + } + + n := t.root + for ; len(s) > 1; s = s[1:] { + if n.children == nil { + n.children = make([]*node, blockSize) + } + p := s[0] % blockSize + c := n.children[p] + if c == nil { + c = &node{} + n.children[p] = c + } + if len(s) > 2 && c.values != nil { + log.Fatalf("triegen: insert(%U): found internal node with values", r) + } + n = c + } + if n.values == nil { + n.values = make([]uint64, blockSize) + } + if n.children != nil { + log.Fatalf("triegen: insert(%U): found leaf node that also has child nodes", r) + } + n.values[s[0]-0x80] = value +} + +// Size returns the number of bytes the generated trie will take to store. It +// needs to be exported as it is used in the templates. +func (b *builder) Size() int { + // Index blocks. + sz := len(b.IndexBlocks) * blockSize * b.IndexSize + + // Skip the first compaction, which represents the normal value blocks, as + // its totalSize does not account for the ASCII blocks, which are managed + // separately. + sz += len(b.ValueBlocks) * blockSize * b.ValueSize + for _, c := range b.Compactions[1:] { + sz += c.totalSize + } + + // TODO: this computation does not account for the fixed overhead of a using + // a compaction, either code or data. As for data, though, the typical + // overhead of data is in the order of bytes (2 bytes for cases). Further, + // the savings of using a compaction should anyway be substantial for it to + // be worth it. + + // For multi-root tries, we also need to account for the handles. + if len(b.Trie) > 1 { + sz += 2 * b.IndexSize * len(b.Trie) + } + return sz +} + +func (b *builder) build() { + // Compute the sizes of the values. + var vmax uint64 + for _, t := range b.Trie { + vmax = maxValue(t.root, vmax) + } + b.ValueType, b.ValueSize = getIntType(vmax) + + // Compute all block allocations. + // TODO: first compute the ASCII blocks for all tries and then the other + // nodes. ASCII blocks are more restricted in placement, as they require two + // blocks to be placed consecutively. Processing them first may improve + // sharing (at least one zero block can be expected to be saved.) + for _, t := range b.Trie { + b.Checksum += b.buildTrie(t) + } + + // Compute the offsets for all the Compacters. + offset := uint32(0) + for i := range b.Compactions { + c := &b.Compactions[i] + c.Offset = offset + offset += c.maxHandle + 1 + c.Cutoff = offset + } + + // Compute the sizes of indexes. + // TODO: different byte positions could have different sizes. So far we have + // not found a case where this is beneficial. + imax := uint64(b.Compactions[len(b.Compactions)-1].Cutoff) + for _, ib := range b.IndexBlocks { + if x := uint64(ib.index.index); x > imax { + imax = x + } + } + b.IndexType, b.IndexSize = getIntType(imax) +} + +func maxValue(n *node, max uint64) uint64 { + if n == nil { + return max + } + for _, c := range n.children { + max = maxValue(c, max) + } + for _, v := range n.values { + if max < v { + max = v + } + } + return max +} + +func getIntType(v uint64) (string, int) { + switch { + case v < 1<<8: + return "uint8", 1 + case v < 1<<16: + return "uint16", 2 + case v < 1<<32: + return "uint32", 4 + } + return "uint64", 8 +} + +const ( + blockSize = 64 + + // Subtract two blocks to offset 0x80, the first continuation byte. + blockOffset = 2 + + // Subtract three blocks to offset 0xC0, the first non-ASCII starter. + rootBlockOffset = 3 +) + +var crcTable = crc64.MakeTable(crc64.ISO) + +func (b *builder) buildTrie(t *Trie) uint64 { + n := t.root + + // Get the ASCII offset. For the first trie, the ASCII block will be at + // position 0. + hasher := crc64.New(crcTable) + binary.Write(hasher, binary.BigEndian, n.values) + hash := hasher.Sum64() + + v, ok := b.asciiBlockIdx[hash] + if !ok { + v = len(b.ValueBlocks) + b.asciiBlockIdx[hash] = v + + b.ValueBlocks = append(b.ValueBlocks, n.values[:blockSize], n.values[blockSize:]) + if v == 0 { + // Add the zero block at position 2 so that it will be assigned a + // zero reference in the lookup blocks. + // TODO: always do this? This would allow us to remove a check from + // the trie lookup, but at the expense of extra space. Analyze + // performance for unicode/norm. + b.ValueBlocks = append(b.ValueBlocks, make([]uint64, blockSize)) + } + } + t.ASCIIIndex = v + + // Compute remaining offsets. + t.Checksum = b.computeOffsets(n, true) + // We already subtracted the normal blockOffset from the index. Subtract the + // difference for starter bytes. + t.StarterIndex = n.index.index - (rootBlockOffset - blockOffset) + return t.Checksum +} + +func (b *builder) computeOffsets(n *node, root bool) uint64 { + // For the first trie, the root lookup block will be at position 3, which is + // the offset for UTF-8 non-ASCII starter bytes. + first := len(b.IndexBlocks) == rootBlockOffset + if first { + b.IndexBlocks = append(b.IndexBlocks, n) + } + + // We special-case the cases where all values recursively are 0. This allows + // for the use of a zero block to which all such values can be directed. + hash := uint64(0) + if n.children != nil || n.values != nil { + hasher := crc64.New(crcTable) + for _, c := range n.children { + var v uint64 + if c != nil { + v = b.computeOffsets(c, false) + } + binary.Write(hasher, binary.BigEndian, v) + } + binary.Write(hasher, binary.BigEndian, n.values) + hash = hasher.Sum64() + } + + if first { + b.indexBlockIdx[hash] = rootBlockOffset - blockOffset + } + + // Compacters don't apply to internal nodes. + if n.children != nil { + v, ok := b.indexBlockIdx[hash] + if !ok { + v = len(b.IndexBlocks) - blockOffset + b.IndexBlocks = append(b.IndexBlocks, n) + b.indexBlockIdx[hash] = v + } + n.index = nodeIndex{0, v} + } else { + h, ok := b.valueBlockIdx[hash] + if !ok { + bestI, bestSize := 0, blockSize*b.ValueSize + for i, c := range b.Compactions[1:] { + if sz, ok := c.c.Size(n.values); ok && bestSize > sz { + bestI, bestSize = i+1, sz + } + } + c := &b.Compactions[bestI] + c.totalSize += bestSize + v := c.c.Store(n.values) + if c.maxHandle < v { + c.maxHandle = v + } + h = nodeIndex{bestI, int(v)} + b.valueBlockIdx[hash] = h + } + n.index = h + } + return hash +} diff --git a/vendor/golang.org/x/text/internal/ucd/example_test.go b/vendor/golang.org/x/text/internal/ucd/example_test.go new file mode 100644 index 0000000..338a50d --- /dev/null +++ b/vendor/golang.org/x/text/internal/ucd/example_test.go @@ -0,0 +1,81 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ucd_test + +import ( + "fmt" + "strings" + + "golang.org/x/text/internal/ucd" +) + +func Example() { + // Read rune-by-rune from UnicodeData. + var count int + p := ucd.New(strings.NewReader(unicodeData)) + for p.Next() { + count++ + if lower := p.Runes(ucd.SimpleLowercaseMapping); lower != nil { + fmt.Printf("lower(%U) -> %U\n", p.Rune(0), lower[0]) + } + } + if err := p.Err(); err != nil { + fmt.Println(err) + } + fmt.Println("Number of runes visited:", count) + + // Read raw ranges from Scripts. + p = ucd.New(strings.NewReader(scripts), ucd.KeepRanges) + for p.Next() { + start, end := p.Range(0) + fmt.Printf("%04X..%04X: %s\n", start, end, p.String(1)) + } + if err := p.Err(); err != nil { + fmt.Println(err) + } + + // Output: + // lower(U+00C0) -> U+00E0 + // lower(U+00C1) -> U+00E1 + // lower(U+00C2) -> U+00E2 + // lower(U+00C3) -> U+00E3 + // lower(U+00C4) -> U+00E4 + // Number of runes visited: 6594 + // 0000..001F: Common + // 0020..0020: Common + // 0021..0023: Common + // 0024..0024: Common +} + +// Excerpt from UnicodeData.txt +const unicodeData = ` +00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;; +00BA;MASCULINE ORDINAL INDICATOR;Lo;0;L;<super> 006F;;;;N;;;;; +00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;; +00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; +00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; +00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; +00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; +00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; +00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; +00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; +00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; +00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; + +# A legacy rune range. +3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;; +4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;; +` + +// Excerpt from Scripts.txt +const scripts = ` +# Property: Script +# ================================================ + +0000..001F ; Common # Cc [32] <control-0000>..<control-001F> +0020 ; Common # Zs SPACE +0021..0023 ; Common # Po [3] EXCLAMATION MARK..NUMBER SIGN +0024 ; Common # Sc DOLLAR SIGN +` diff --git a/vendor/golang.org/x/text/internal/ucd/ucd.go b/vendor/golang.org/x/text/internal/ucd/ucd.go new file mode 100644 index 0000000..309e8d8 --- /dev/null +++ b/vendor/golang.org/x/text/internal/ucd/ucd.go @@ -0,0 +1,376 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ucd provides a parser for Unicode Character Database files, the +// format of which is defined in http://www.unicode.org/reports/tr44/. See +// http://www.unicode.org/Public/UCD/latest/ucd/ for example files. +// +// It currently does not support substitutions of missing fields. +package ucd // import "golang.org/x/text/internal/ucd" + +import ( + "bufio" + "bytes" + "errors" + "io" + "log" + "regexp" + "strconv" + "strings" +) + +// UnicodeData.txt fields. +const ( + CodePoint = iota + Name + GeneralCategory + CanonicalCombiningClass + BidiClass + DecompMapping + DecimalValue + DigitValue + NumericValue + BidiMirrored + Unicode1Name + ISOComment + SimpleUppercaseMapping + SimpleLowercaseMapping + SimpleTitlecaseMapping +) + +// Parse calls f for each entry in the given reader of a UCD file. It will close +// the reader upon return. It will call log.Fatal if any error occurred. +// +// This implements the most common usage pattern of using Parser. +func Parse(r io.ReadCloser, f func(p *Parser)) { + defer r.Close() + + p := New(r) + for p.Next() { + f(p) + } + if err := p.Err(); err != nil { + r.Close() // os.Exit will cause defers not to be called. + log.Fatal(err) + } +} + +// An Option is used to configure a Parser. +type Option func(p *Parser) + +func keepRanges(p *Parser) { + p.keepRanges = true +} + +var ( + // KeepRanges prevents the expansion of ranges. The raw ranges can be + // obtained by calling Range(0) on the parser. + KeepRanges Option = keepRanges +) + +// The Part option register a handler for lines starting with a '@'. The text +// after a '@' is available as the first field. Comments are handled as usual. +func Part(f func(p *Parser)) Option { + return func(p *Parser) { + p.partHandler = f + } +} + +// The CommentHandler option passes comments that are on a line by itself to +// a given handler. +func CommentHandler(f func(s string)) Option { + return func(p *Parser) { + p.commentHandler = f + } +} + +// A Parser parses Unicode Character Database (UCD) files. +type Parser struct { + scanner *bufio.Scanner + + keepRanges bool // Don't expand rune ranges in field 0. + + err error + comment []byte + field [][]byte + // parsedRange is needed in case Range(0) is called more than once for one + // field. In some cases this requires scanning ahead. + parsedRange bool + rangeStart, rangeEnd rune + + partHandler func(p *Parser) + commentHandler func(s string) +} + +func (p *Parser) setError(err error) { + if p.err == nil { + p.err = err + } +} + +func (p *Parser) getField(i int) []byte { + if i >= len(p.field) { + return nil + } + return p.field[i] +} + +// Err returns a non-nil error if any error occurred during parsing. +func (p *Parser) Err() error { + return p.err +} + +// New returns a Parser for the given Reader. +func New(r io.Reader, o ...Option) *Parser { + p := &Parser{ + scanner: bufio.NewScanner(r), + } + for _, f := range o { + f(p) + } + return p +} + +// Next parses the next line in the file. It returns true if a line was parsed +// and false if it reached the end of the file. +func (p *Parser) Next() bool { + if !p.keepRanges && p.rangeStart < p.rangeEnd { + p.rangeStart++ + return true + } + p.comment = nil + p.field = p.field[:0] + p.parsedRange = false + + for p.scanner.Scan() { + b := p.scanner.Bytes() + if len(b) == 0 { + continue + } + if b[0] == '#' { + if p.commentHandler != nil { + p.commentHandler(strings.TrimSpace(string(b[1:]))) + } + continue + } + + // Parse line + if i := bytes.IndexByte(b, '#'); i != -1 { + p.comment = bytes.TrimSpace(b[i+1:]) + b = b[:i] + } + if b[0] == '@' { + if p.partHandler != nil { + p.field = append(p.field, bytes.TrimSpace(b[1:])) + p.partHandler(p) + p.field = p.field[:0] + } + p.comment = nil + continue + } + for { + i := bytes.IndexByte(b, ';') + if i == -1 { + p.field = append(p.field, bytes.TrimSpace(b)) + break + } + p.field = append(p.field, bytes.TrimSpace(b[:i])) + b = b[i+1:] + } + if !p.keepRanges { + p.rangeStart, p.rangeEnd = p.getRange(0) + } + return true + } + p.setError(p.scanner.Err()) + return false +} + +func parseRune(b []byte) (rune, error) { + if len(b) > 2 && b[0] == 'U' && b[1] == '+' { + b = b[2:] + } + x, err := strconv.ParseUint(string(b), 16, 32) + return rune(x), err +} + +func (p *Parser) parseRune(b []byte) rune { + x, err := parseRune(b) + p.setError(err) + return x +} + +// Rune parses and returns field i as a rune. +func (p *Parser) Rune(i int) rune { + if i > 0 || p.keepRanges { + return p.parseRune(p.getField(i)) + } + return p.rangeStart +} + +// Runes interprets and returns field i as a sequence of runes. +func (p *Parser) Runes(i int) (runes []rune) { + add := func(b []byte) { + if b = bytes.TrimSpace(b); len(b) > 0 { + runes = append(runes, p.parseRune(b)) + } + } + for b := p.getField(i); ; { + i := bytes.IndexByte(b, ' ') + if i == -1 { + add(b) + break + } + add(b[:i]) + b = b[i+1:] + } + return +} + +var ( + errIncorrectLegacyRange = errors.New("ucd: unmatched <* First>") + + // reRange matches one line of a legacy rune range. + reRange = regexp.MustCompile("^([0-9A-F]*);<([^,]*), ([^>]*)>(.*)$") +) + +// Range parses and returns field i as a rune range. A range is inclusive at +// both ends. If the field only has one rune, first and last will be identical. +// It supports the legacy format for ranges used in UnicodeData.txt. +func (p *Parser) Range(i int) (first, last rune) { + if !p.keepRanges { + return p.rangeStart, p.rangeStart + } + return p.getRange(i) +} + +func (p *Parser) getRange(i int) (first, last rune) { + b := p.getField(i) + if k := bytes.Index(b, []byte("..")); k != -1 { + return p.parseRune(b[:k]), p.parseRune(b[k+2:]) + } + // The first field may not be a rune, in which case we may ignore any error + // and set the range as 0..0. + x, err := parseRune(b) + if err != nil { + // Disable range parsing henceforth. This ensures that an error will be + // returned if the user subsequently will try to parse this field as + // a Rune. + p.keepRanges = true + } + // Special case for UnicodeData that was retained for backwards compatibility. + if i == 0 && len(p.field) > 1 && bytes.HasSuffix(p.field[1], []byte("First>")) { + if p.parsedRange { + return p.rangeStart, p.rangeEnd + } + mf := reRange.FindStringSubmatch(p.scanner.Text()) + if mf == nil || !p.scanner.Scan() { + p.setError(errIncorrectLegacyRange) + return x, x + } + // Using Bytes would be more efficient here, but Text is a lot easier + // and this is not a frequent case. + ml := reRange.FindStringSubmatch(p.scanner.Text()) + if ml == nil || mf[2] != ml[2] || ml[3] != "Last" || mf[4] != ml[4] { + p.setError(errIncorrectLegacyRange) + return x, x + } + p.rangeStart, p.rangeEnd = x, p.parseRune(p.scanner.Bytes()[:len(ml[1])]) + p.parsedRange = true + return p.rangeStart, p.rangeEnd + } + return x, x +} + +// bools recognizes all valid UCD boolean values. +var bools = map[string]bool{ + "": false, + "N": false, + "No": false, + "F": false, + "False": false, + "Y": true, + "Yes": true, + "T": true, + "True": true, +} + +// Bool parses and returns field i as a boolean value. +func (p *Parser) Bool(i int) bool { + b := p.getField(i) + for s, v := range bools { + if bstrEq(b, s) { + return v + } + } + p.setError(strconv.ErrSyntax) + return false +} + +// Int parses and returns field i as an integer value. +func (p *Parser) Int(i int) int { + x, err := strconv.ParseInt(string(p.getField(i)), 10, 64) + p.setError(err) + return int(x) +} + +// Uint parses and returns field i as an unsigned integer value. +func (p *Parser) Uint(i int) uint { + x, err := strconv.ParseUint(string(p.getField(i)), 10, 64) + p.setError(err) + return uint(x) +} + +// Float parses and returns field i as a decimal value. +func (p *Parser) Float(i int) float64 { + x, err := strconv.ParseFloat(string(p.getField(i)), 64) + p.setError(err) + return x +} + +// String parses and returns field i as a string value. +func (p *Parser) String(i int) string { + return string(p.getField(i)) +} + +// Strings parses and returns field i as a space-separated list of strings. +func (p *Parser) Strings(i int) []string { + ss := strings.Split(string(p.getField(i)), " ") + for i, s := range ss { + ss[i] = strings.TrimSpace(s) + } + return ss +} + +// Comment returns the comments for the current line. +func (p *Parser) Comment() string { + return string(p.comment) +} + +var errUndefinedEnum = errors.New("ucd: undefined enum value") + +// Enum interprets and returns field i as a value that must be one of the values +// in enum. +func (p *Parser) Enum(i int, enum ...string) string { + b := p.getField(i) + for _, s := range enum { + if bstrEq(b, s) { + return s + } + } + p.setError(errUndefinedEnum) + return "" +} + +func bstrEq(b []byte, s string) bool { + if len(b) != len(s) { + return false + } + for i, c := range b { + if c != s[i] { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/text/internal/ucd/ucd_test.go b/vendor/golang.org/x/text/internal/ucd/ucd_test.go new file mode 100644 index 0000000..11a6542 --- /dev/null +++ b/vendor/golang.org/x/text/internal/ucd/ucd_test.go @@ -0,0 +1,105 @@ +package ucd + +import ( + "strings" + "testing" +) + +const file = ` +# Comments should be skipped +# rune; bool; uint; int; float; runes; # Y +0..0005; Y; 0; 2; -5.25 ; 0 1 2 3 4 5; +6..0007; Yes ; 6; 1; -4.25 ; 0006 0007; +8; T ; 8 ; 0 ;-3.25 ;;# T +9; True ;9 ; -1;-2.25 ; 0009; + +# more comments to be ignored +@Part0 + +A; N; 10 ; -2; -1.25; ;# N +B; No; 11 ; -3; -0.25; +C; False;12; -4; 0.75; +D; ;13;-5;1.75; + +@Part1 # Another part. +# We test part comments get removed by not commenting the the next line. +E..10FFFF; F; 14 ; -6; 2.75; +` + +var want = []struct { + start, end rune +}{ + {0x00, 0x05}, + {0x06, 0x07}, + {0x08, 0x08}, + {0x09, 0x09}, + {0x0A, 0x0A}, + {0x0B, 0x0B}, + {0x0C, 0x0C}, + {0x0D, 0x0D}, + {0x0E, 0x10FFFF}, +} + +func TestGetters(t *testing.T) { + parts := [][2]string{ + {"Part0", ""}, + {"Part1", "Another part."}, + } + handler := func(p *Parser) { + if len(parts) == 0 { + t.Error("Part handler invoked too many times.") + return + } + want := parts[0] + parts = parts[1:] + if got0, got1 := p.String(0), p.Comment(); got0 != want[0] || got1 != want[1] { + t.Errorf(`part: got %q, %q; want %q"`, got0, got1, want) + } + } + + p := New(strings.NewReader(file), KeepRanges, Part(handler)) + for i := 0; p.Next(); i++ { + start, end := p.Range(0) + w := want[i] + if start != w.start || end != w.end { + t.Fatalf("%d:Range(0); got %#x..%#x; want %#x..%#x", i, start, end, w.start, w.end) + } + if w.start == w.end && p.Rune(0) != w.start { + t.Errorf("%d:Range(0).start: got %U; want %U", i, p.Rune(0), w.start) + } + if got, want := p.Bool(1), w.start <= 9; got != want { + t.Errorf("%d:Bool(1): got %v; want %v", i, got, want) + } + if got := p.Rune(4); got != 0 || p.Err() == nil { + t.Errorf("%d:Rune(%q): got no error; want error", i, p.String(1)) + } + p.err = nil + if got := p.Uint(2); rune(got) != start { + t.Errorf("%d:Uint(2): got %v; want %v", i, got, start) + } + if got, want := p.Int(3), 2-i; got != want { + t.Errorf("%d:Int(3): got %v; want %v", i, got, want) + } + if got, want := p.Float(4), -5.25+float64(i); got != want { + t.Errorf("%d:Int(3): got %v; want %v", i, got, want) + } + if got := p.Runes(5); got == nil { + if p.String(5) != "" { + t.Errorf("%d:Runes(5): expected non-empty list", i) + } + } else { + if got[0] != start || got[len(got)-1] != end { + t.Errorf("%d:Runes(5): got %#x; want %#x..%#x", i, got, start, end) + } + } + if got := p.Comment(); got != "" && got != p.String(1) { + t.Errorf("%d:Comment(): got %v; want %v", i, got, p.String(1)) + } + } + if err := p.Err(); err != nil { + t.Errorf("Parser error: %v", err) + } + if len(parts) != 0 { + t.Errorf("expected %d more invocations of part handler", len(parts)) + } +} diff --git a/vendor/golang.org/x/text/internal/utf8internal/utf8internal.go b/vendor/golang.org/x/text/internal/utf8internal/utf8internal.go new file mode 100644 index 0000000..575cea8 --- /dev/null +++ b/vendor/golang.org/x/text/internal/utf8internal/utf8internal.go @@ -0,0 +1,87 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package utf8internal contains low-level utf8-related constants, tables, etc. +// that are used internally by the text package. +package utf8internal + +// The default lowest and highest continuation byte. +const ( + LoCB = 0x80 // 1000 0000 + HiCB = 0xBF // 1011 1111 +) + +// Constants related to getting information of first bytes of UTF-8 sequences. +const ( + // ASCII identifies a UTF-8 byte as ASCII. + ASCII = as + + // FirstInvalid indicates a byte is invalid as a first byte of a UTF-8 + // sequence. + FirstInvalid = xx + + // SizeMask is a mask for the size bits. Use use x&SizeMask to get the size. + SizeMask = 7 + + // AcceptShift is the right-shift count for the first byte info byte to get + // the index into the AcceptRanges table. See AcceptRanges. + AcceptShift = 4 + + // The names of these constants are chosen to give nice alignment in the + // table below. The first nibble is an index into acceptRanges or F for + // special one-byte cases. The second nibble is the Rune length or the + // Status for the special one-byte case. + xx = 0xF1 // invalid: size 1 + as = 0xF0 // ASCII: size 1 + s1 = 0x02 // accept 0, size 2 + s2 = 0x13 // accept 1, size 3 + s3 = 0x03 // accept 0, size 3 + s4 = 0x23 // accept 2, size 3 + s5 = 0x34 // accept 3, size 4 + s6 = 0x04 // accept 0, size 4 + s7 = 0x44 // accept 4, size 4 +) + +// First is information about the first byte in a UTF-8 sequence. +var First = [256]uint8{ + // 1 2 3 4 5 6 7 8 9 A B C D E F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x00-0x0F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x10-0x1F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x20-0x2F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x30-0x3F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x40-0x4F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x50-0x5F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x60-0x6F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x70-0x7F + // 1 2 3 4 5 6 7 8 9 A B C D E F + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x80-0x8F + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x90-0x9F + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xA0-0xAF + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xB0-0xBF + xx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xC0-0xCF + s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xD0-0xDF + s2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3, // 0xE0-0xEF + s5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xF0-0xFF +} + +// AcceptRange gives the range of valid values for the second byte in a UTF-8 +// sequence for any value for First that is not ASCII or FirstInvalid. +type AcceptRange struct { + Lo uint8 // lowest value for second byte. + Hi uint8 // highest value for second byte. +} + +// AcceptRanges is a slice of AcceptRange values. For a given byte sequence b +// +// AcceptRanges[First[b[0]]>>AcceptShift] +// +// will give the value of AcceptRange for the multi-byte UTF-8 sequence starting +// at b[0]. +var AcceptRanges = [...]AcceptRange{ + 0: {LoCB, HiCB}, + 1: {0xA0, HiCB}, + 2: {LoCB, 0x9F}, + 3: {0x90, HiCB}, + 4: {LoCB, 0x8F}, +} diff --git a/vendor/golang.org/x/text/language/Makefile b/vendor/golang.org/x/text/language/Makefile new file mode 100644 index 0000000..79f0057 --- /dev/null +++ b/vendor/golang.org/x/text/language/Makefile @@ -0,0 +1,16 @@ +# Copyright 2013 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +CLEANFILES+=maketables + +maketables: maketables.go + go build $^ + +tables: maketables + ./maketables > tables.go + gofmt -w -s tables.go + +# Build (but do not run) maketables during testing, +# just to make sure it still compiles. +testshort: maketables diff --git a/vendor/golang.org/x/text/language/common.go b/vendor/golang.org/x/text/language/common.go new file mode 100644 index 0000000..9d86e18 --- /dev/null +++ b/vendor/golang.org/x/text/language/common.go @@ -0,0 +1,16 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package language + +// This file contains code common to the maketables.go and the package code. + +// langAliasType is the type of an alias in langAliasMap. +type langAliasType int8 + +const ( + langDeprecated langAliasType = iota + langMacro + langLegacy + + langAliasTypeUnknown langAliasType = -1 +) diff --git a/vendor/golang.org/x/text/language/coverage.go b/vendor/golang.org/x/text/language/coverage.go new file mode 100644 index 0000000..101fd23 --- /dev/null +++ b/vendor/golang.org/x/text/language/coverage.go @@ -0,0 +1,197 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import ( + "fmt" + "sort" +) + +// The Coverage interface is used to define the level of coverage of an +// internationalization service. Note that not all types are supported by all +// services. As lists may be generated on the fly, it is recommended that users +// of a Coverage cache the results. +type Coverage interface { + // Tags returns the list of supported tags. + Tags() []Tag + + // BaseLanguages returns the list of supported base languages. + BaseLanguages() []Base + + // Scripts returns the list of supported scripts. + Scripts() []Script + + // Regions returns the list of supported regions. + Regions() []Region +} + +var ( + // Supported defines a Coverage that lists all supported subtags. Tags + // always returns nil. + Supported Coverage = allSubtags{} +) + +// TODO: +// - Support Variants, numbering systems. +// - CLDR coverage levels. +// - Set of common tags defined in this package. + +type allSubtags struct{} + +// Regions returns the list of supported regions. As all regions are in a +// consecutive range, it simply returns a slice of numbers in increasing order. +// The "undefined" region is not returned. +func (s allSubtags) Regions() []Region { + reg := make([]Region, numRegions) + for i := range reg { + reg[i] = Region{regionID(i + 1)} + } + return reg +} + +// Scripts returns the list of supported scripts. As all scripts are in a +// consecutive range, it simply returns a slice of numbers in increasing order. +// The "undefined" script is not returned. +func (s allSubtags) Scripts() []Script { + scr := make([]Script, numScripts) + for i := range scr { + scr[i] = Script{scriptID(i + 1)} + } + return scr +} + +// BaseLanguages returns the list of all supported base languages. It generates +// the list by traversing the internal structures. +func (s allSubtags) BaseLanguages() []Base { + base := make([]Base, 0, numLanguages) + for i := 0; i < langNoIndexOffset; i++ { + // We included "und" already for the value 0. + if i != nonCanonicalUnd { + base = append(base, Base{langID(i)}) + } + } + i := langNoIndexOffset + for _, v := range langNoIndex { + for k := 0; k < 8; k++ { + if v&1 == 1 { + base = append(base, Base{langID(i)}) + } + v >>= 1 + i++ + } + } + return base +} + +// Tags always returns nil. +func (s allSubtags) Tags() []Tag { + return nil +} + +// coverage is used used by NewCoverage which is used as a convenient way for +// creating Coverage implementations for partially defined data. Very often a +// package will only need to define a subset of slices. coverage provides a +// convenient way to do this. Moreover, packages using NewCoverage, instead of +// their own implementation, will not break if later new slice types are added. +type coverage struct { + tags func() []Tag + bases func() []Base + scripts func() []Script + regions func() []Region +} + +func (s *coverage) Tags() []Tag { + if s.tags == nil { + return nil + } + return s.tags() +} + +// bases implements sort.Interface and is used to sort base languages. +type bases []Base + +func (b bases) Len() int { + return len(b) +} + +func (b bases) Swap(i, j int) { + b[i], b[j] = b[j], b[i] +} + +func (b bases) Less(i, j int) bool { + return b[i].langID < b[j].langID +} + +// BaseLanguages returns the result from calling s.bases if it is specified or +// otherwise derives the set of supported base languages from tags. +func (s *coverage) BaseLanguages() []Base { + if s.bases == nil { + tags := s.Tags() + if len(tags) == 0 { + return nil + } + a := make([]Base, len(tags)) + for i, t := range tags { + a[i] = Base{langID(t.lang)} + } + sort.Sort(bases(a)) + k := 0 + for i := 1; i < len(a); i++ { + if a[k] != a[i] { + k++ + a[k] = a[i] + } + } + return a[:k+1] + } + return s.bases() +} + +func (s *coverage) Scripts() []Script { + if s.scripts == nil { + return nil + } + return s.scripts() +} + +func (s *coverage) Regions() []Region { + if s.regions == nil { + return nil + } + return s.regions() +} + +// NewCoverage returns a Coverage for the given lists. It is typically used by +// packages providing internationalization services to define their level of +// coverage. A list may be of type []T or func() []T, where T is either Tag, +// Base, Script or Region. The returned Coverage derives the value for Bases +// from Tags if no func or slice for []Base is specified. For other unspecified +// types the returned Coverage will return nil for the respective methods. +func NewCoverage(list ...interface{}) Coverage { + s := &coverage{} + for _, x := range list { + switch v := x.(type) { + case func() []Base: + s.bases = v + case func() []Script: + s.scripts = v + case func() []Region: + s.regions = v + case func() []Tag: + s.tags = v + case []Base: + s.bases = func() []Base { return v } + case []Script: + s.scripts = func() []Script { return v } + case []Region: + s.regions = func() []Region { return v } + case []Tag: + s.tags = func() []Tag { return v } + default: + panic(fmt.Sprintf("language: unsupported set type %T", v)) + } + } + return s +} diff --git a/vendor/golang.org/x/text/language/coverage_test.go b/vendor/golang.org/x/text/language/coverage_test.go new file mode 100644 index 0000000..8e08e5c --- /dev/null +++ b/vendor/golang.org/x/text/language/coverage_test.go @@ -0,0 +1,154 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import ( + "fmt" + "reflect" + "testing" +) + +func TestSupported(t *testing.T) { + // To prove the results are correct for a type, we test that the number of + // results is identical to the number of results on record, that all results + // are distinct and that all results are valid. + tests := map[string]int{ + "BaseLanguages": numLanguages, + "Scripts": numScripts, + "Regions": numRegions, + "Tags": 0, + } + sup := reflect.ValueOf(Supported) + for name, num := range tests { + v := sup.MethodByName(name).Call(nil)[0] + if n := v.Len(); n != num { + t.Errorf("len(%s()) was %d; want %d", name, n, num) + } + dup := make(map[string]bool) + for i := 0; i < v.Len(); i++ { + x := v.Index(i).Interface() + // An invalid value will either cause a crash or result in a + // duplicate when passed to Sprint. + s := fmt.Sprint(x) + if dup[s] { + t.Errorf("%s: duplicate entry %q", name, s) + } + dup[s] = true + } + if len(dup) != v.Len() { + t.Errorf("%s: # unique entries was %d; want %d", name, len(dup), v.Len()) + } + } +} + +func TestNewCoverage(t *testing.T) { + bases := []Base{Base{0}, Base{3}, Base{7}} + scripts := []Script{Script{11}, Script{17}, Script{23}} + regions := []Region{Region{101}, Region{103}, Region{107}} + tags := []Tag{Make("pt"), Make("en"), Make("en-GB"), Make("en-US"), Make("pt-PT")} + fbases := func() []Base { return bases } + fscripts := func() []Script { return scripts } + fregions := func() []Region { return regions } + ftags := func() []Tag { return tags } + + tests := []struct { + desc string + list []interface{} + bases []Base + scripts []Script + regions []Region + tags []Tag + }{ + { + desc: "empty", + }, + { + desc: "bases", + list: []interface{}{bases}, + bases: bases, + }, + { + desc: "scripts", + list: []interface{}{scripts}, + scripts: scripts, + }, + { + desc: "regions", + list: []interface{}{regions}, + regions: regions, + }, + { + desc: "bases derives from tags", + list: []interface{}{tags}, + bases: []Base{Base{_en}, Base{_pt}}, + tags: tags, + }, + { + desc: "tags and bases", + list: []interface{}{tags, bases}, + bases: bases, + tags: tags, + }, + { + desc: "fully specified", + list: []interface{}{tags, bases, scripts, regions}, + bases: bases, + scripts: scripts, + regions: regions, + tags: tags, + }, + { + desc: "bases func", + list: []interface{}{fbases}, + bases: bases, + }, + { + desc: "scripts func", + list: []interface{}{fscripts}, + scripts: scripts, + }, + { + desc: "regions func", + list: []interface{}{fregions}, + regions: regions, + }, + { + desc: "tags func", + list: []interface{}{ftags}, + bases: []Base{Base{_en}, Base{_pt}}, + tags: tags, + }, + { + desc: "tags and bases", + list: []interface{}{ftags, fbases}, + bases: bases, + tags: tags, + }, + { + desc: "fully specified", + list: []interface{}{ftags, fbases, fscripts, fregions}, + bases: bases, + scripts: scripts, + regions: regions, + tags: tags, + }, + } + + for i, tt := range tests { + l := NewCoverage(tt.list...) + if a := l.BaseLanguages(); !reflect.DeepEqual(a, tt.bases) { + t.Errorf("%d:%s: BaseLanguages was %v; want %v", i, tt.desc, a, tt.bases) + } + if a := l.Scripts(); !reflect.DeepEqual(a, tt.scripts) { + t.Errorf("%d:%s: Scripts was %v; want %v", i, tt.desc, a, tt.scripts) + } + if a := l.Regions(); !reflect.DeepEqual(a, tt.regions) { + t.Errorf("%d:%s: Regions was %v; want %v", i, tt.desc, a, tt.regions) + } + if a := l.Tags(); !reflect.DeepEqual(a, tt.tags) { + t.Errorf("%d:%s: Tags was %v; want %v", i, tt.desc, a, tt.tags) + } + } +} diff --git a/vendor/golang.org/x/text/language/data_test.go b/vendor/golang.org/x/text/language/data_test.go new file mode 100644 index 0000000..738df46 --- /dev/null +++ b/vendor/golang.org/x/text/language/data_test.go @@ -0,0 +1,416 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +type matchTest struct { + comment string + supported string + test []struct{ match, desired string } +} + +var matchTests = []matchTest{ + { + "basics", + "fr, en-GB, en", + []struct{ match, desired string }{ + {"en-GB", "en-GB"}, + {"en", "en-US"}, + {"fr", "fr-FR"}, + {"fr", "ja-JP"}, + }, + }, + { + "script fallbacks", + "zh-CN, zh-TW, iw", + []struct{ match, desired string }{ + {"zh-TW", "zh-Hant"}, + {"zh-CN", "zh"}, + {"zh-CN", "zh-Hans-CN"}, + {"zh-TW", "zh-Hant-HK"}, + {"iw", "he-IT"}, + }, + }, + { + "language-specific script fallbacks 1", + "en, sr, nl", + []struct{ match, desired string }{ + {"sr", "sr-Latn"}, + {"en", "sh"}, + {"en", "hr"}, + {"en", "bs"}, + {"en", "nl-Cyrl"}, + }, + }, + { + "language-specific script fallbacks 2", + "en, sh", + []struct{ match, desired string }{ + {"sh", "sr"}, + {"sh", "sr-Cyrl"}, + {"sh", "hr"}, + }, + }, + { + "both deprecated and not", + "fil, tl, iw, he", + []struct{ match, desired string }{ + {"he", "he-IT"}, + {"he", "he"}, + {"iw", "iw"}, + {"fil", "fil-IT"}, + {"fil", "fil"}, + {"tl", "tl"}, + }, + }, + { + "nearby languages", + "en, fil, ro, nn", + []struct{ match, desired string }{ + {"fil", "tl"}, + {"ro", "mo"}, + {"nn", "nb"}, + {"en", "ja"}, // make sure default works + }, + }, + { + "nearby languages: Nynorsk to Bokmål", + "en, nb", + []struct{ match, desired string }{ + {"nb", "nn"}, + }, + }, + { + "nearby languages: Danish does not match nn", + "en, nn", + []struct{ match, desired string }{ + {"en", "da"}, + }, + }, + { + "nearby languages: Danish matches no", + "en, no", + []struct{ match, desired string }{ + {"no", "da"}, + }, + }, + { + "nearby languages: Danish matches nb", + "en, nb", + []struct{ match, desired string }{ + {"nb", "da"}, + }, + }, + { + "prefer matching languages over language variants.", + "nn, en-GB", + []struct{ match, desired string }{ + {"en-GB", "no, en-US"}, + {"en-GB", "nb, en-US"}, + }, + }, + { + "deprecated version is closer than same language with other differences", + "nl, he, en-GB", + []struct{ match, desired string }{ + {"he", "iw, en-US"}, + }, + }, + { + "macro equivalent is closer than same language with other differences", + "nl, zh, en-GB, no", + []struct{ match, desired string }{ + {"zh", "cmn, en-US"}, + {"no", "nb, en-US"}, + }, + }, + { + "legacy equivalent is closer than same language with other differences", + "nl, fil, en-GB", + []struct{ match, desired string }{ + {"fil", "tl, en-US"}, + }, + }, + { + "exact over equivalent", + "en, ro, mo, ro-MD", + []struct{ match, desired string }{ + {"ro", "ro"}, + {"mo", "mo"}, + {"ro-MD", "ro-MD"}, + }, + }, + { + "maximization of legacy", + "sr-Cyrl, sr-Latn, ro, ro-MD", + []struct{ match, desired string }{ + {"sr-Latn", "sh"}, + {"ro-MD", "mo"}, + }, + }, + { + "empty", + "", + []struct{ match, desired string }{ + {"und", "fr"}, + {"und", "en"}, + }, + }, + { + "private use subtags", + "fr, en-GB, x-bork, es-ES, es-419", + []struct{ match, desired string }{ + {"fr", "x-piglatin"}, + {"x-bork", "x-bork"}, + }, + }, + { + "grandfathered codes", + "fr, i-klingon, en-Latn-US", + []struct{ match, desired string }{ + {"en-Latn-US", "en-GB-oed"}, + {"tlh", "i-klingon"}, + }, + }, + { + "exact match", + "fr, en-GB, ja, es-ES, es-MX", + []struct{ match, desired string }{ + {"ja", "ja, de"}, + }, + }, + { + "simple variant match", + "fr, en-GB, ja, es-ES, es-MX", + []struct{ match, desired string }{ + // Intentionally avoiding a perfect-match or two candidates for variant matches. + {"en-GB", "de, en-US"}, + // Fall back. + {"fr", "de, zh"}, + }, + }, + { + "best match for traditional Chinese", + // Scenario: An application that only supports Simplified Chinese (and some + // other languages), but does not support Traditional Chinese. zh-Hans-CN + // could be replaced with zh-CN, zh, or zh-Hans, it wouldn't make much of + // a difference. + "fr, zh-Hans-CN, en-US", + []struct{ match, desired string }{ + {"zh-Hans-CN", "zh-TW"}, + {"zh-Hans-CN", "zh-Hant"}, + // One can avoid a zh-Hant to zh-Hans match by including a second language + // preference which is a better match. + {"en-US", "zh-TW, en"}, + {"en-US", "zh-Hant-CN, en"}, + {"zh-Hans-CN", "zh-Hans, en"}, + }, + }, + // More specific region and script tie-breakers. + { + "more specific script should win in case regions are identical", + "af, af-Latn, af-Arab", + []struct{ match, desired string }{ + {"af", "af"}, + {"af", "af-ZA"}, + {"af-Latn", "af-Latn-ZA"}, + {"af-Latn", "af-Latn"}, + }, + }, + { + "more specific region should win", + "nl, nl-NL, nl-BE", + []struct{ match, desired string }{ + {"nl", "nl"}, + {"nl", "nl-Latn"}, + {"nl-NL", "nl-Latn-NL"}, + {"nl-NL", "nl-NL"}, + }, + }, + { + "more specific region wins over more specific script", + "nl, nl-Latn, nl-NL, nl-BE", + []struct{ match, desired string }{ + {"nl", "nl"}, + {"nl-Latn", "nl-Latn"}, + {"nl-NL", "nl-NL"}, + {"nl-NL", "nl-Latn-NL"}, + }, + }, + // Region distance tie-breakers. + { + "region distance Portuguese", + "pt, pt-PT", + []struct{ match, desired string }{ + {"pt-PT", "pt-ES"}, + }, + }, + { + "region distance French", + "en, fr, fr-CA, fr-CH", + []struct{ match, desired string }{ + {"fr-CA", "fr-US"}, + }, + }, + { + "region distance German", + "de-AT, de-DE, de-CH", + []struct{ match, desired string }{ + {"de-DE", "de"}, + }, + }, + { + "en-AU is closer to en-GB than to en (which is en-US)", + "en, en-GB, es-ES, es-419", + []struct{ match, desired string }{ + {"en-GB", "en-AU"}, + {"es-419", "es-MX"}, + {"es-ES", "es-PT"}, + }, + }, + // Test exceptions with "und". + // When the undefined language doesn't match anything in the list, return the default, as usual. + // max("und") = "en-Latn-US", and since matching is based on maximized tags, the undefined + // language would normally match English. But that would produce the counterintuitive results. + // Matching "und" to "it,en" would be "en" matching "en" to "it,und" would be "und". + // To avoid this max("und") is defined as "und" + { + "undefined", + "it, fr", + []struct{ match, desired string }{ + {"it", "und"}, + }, + }, + { + "und does not match en", + "it, en", + []struct{ match, desired string }{ + {"it", "und"}, + }, + }, + { + "undefined in priority list", + "it, und", + []struct{ match, desired string }{ + {"und", "und"}, + {"it", "en"}, + }, + }, + // Undefined scripts and regions. + { + "undefined", + "it, fr, zh", + []struct{ match, desired string }{ + {"fr", "und-FR"}, + {"zh", "und-CN"}, + {"zh", "und-Hans"}, + {"zh", "und-Hant"}, + {"it", "und-Latn"}, + }, + }, + // Early termination conditions: do not consider all desired strings if + // a match is good enough. + { + "match on maximized tag", + "fr, en-GB, ja, es-ES, es-MX", + []struct{ match, desired string }{ + // ja-JP matches ja on likely subtags, and it's listed first, + // thus it wins over the second preference en-GB. + {"ja", "ja-JP, en-GB"}, + {"ja", "ja-Jpan-JP, en-GB"}, + }, + }, + { + "pick best maximized tag", + "ja, ja-Jpan-US, ja-JP, en, ru", + []struct{ match, desired string }{ + {"ja", "ja-Jpan, ru"}, + {"ja-JP", "ja-JP, ru"}, + {"ja-Jpan-US", "ja-US, ru"}, + }, + }, + { + "termination: pick best maximized match", + "ja, ja-Jpan, ja-JP, en, ru", + []struct{ match, desired string }{ + {"ja-JP", "ja-Jpan-JP, ru"}, + {"ja-Jpan", "ja-Jpan, ru"}, + }, + }, + { + "no match on maximized", + "en, de, fr, ja", + []struct{ match, desired string }{ + // de maximizes to de-DE. + // Pick the exact match for the secondary language instead. + {"fr", "de-CH, fr"}, + }, + }, + + // Test that the CLDR parent relations are correctly preserved by the matcher. + // These matches may change for different CLDR versions. + { + "parent relation preserved", + "en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK", + []struct{ match, desired string }{ + {"en-GB", "en-150"}, + {"en-GB", "en-AU"}, + {"en-GB", "en-BE"}, + {"en-GB", "en-GG"}, + {"en-GB", "en-GI"}, + {"en-GB", "en-HK"}, + {"en-GB", "en-IE"}, + {"en-GB", "en-IM"}, + {"en-GB", "en-IN"}, + {"en-GB", "en-JE"}, + {"en-GB", "en-MT"}, + {"en-GB", "en-NZ"}, + {"en-GB", "en-PK"}, + {"en-GB", "en-SG"}, + {"en-GB", "en-DE"}, + {"en-GB", "en-MT"}, + {"es-419", "es-AR"}, + {"es-419", "es-BO"}, + {"es-419", "es-CL"}, + {"es-419", "es-CO"}, + {"es-419", "es-CR"}, + {"es-419", "es-CU"}, + {"es-419", "es-DO"}, + {"es-419", "es-EC"}, + {"es-419", "es-GT"}, + {"es-419", "es-HN"}, + {"es-419", "es-MX"}, + {"es-419", "es-NI"}, + {"es-419", "es-PA"}, + {"es-419", "es-PE"}, + {"es-419", "es-PR"}, + {"es-419", "es-PY"}, + {"es-419", "es-SV"}, + {"es-419", "es-US"}, + {"es-419", "es-UY"}, + {"es-419", "es-VE"}, + {"pt-PT", "pt-AO"}, + {"pt-PT", "pt-CV"}, + {"pt-PT", "pt-GW"}, + {"pt-PT", "pt-MO"}, + {"pt-PT", "pt-MZ"}, + {"pt-PT", "pt-ST"}, + {"pt-PT", "pt-TL"}, + // TODO for CLDR 24+ + // - en-001 + // - {"zh-Hant-HK", "zh-Hant-MO"}, + }, + }, + // Options and variants are inherited from user-defined settings. + { + "preserve Unicode extension", + "en, de, sl-nedis", + []struct{ match, desired string }{ + {"de-u-co-phonebk", "de-FR-u-co-phonebk"}, + {"sl-nedis-u-cu-eur", "sl-nedis-u-cu-eur"}, + {"sl-nedis-u-cu-eur", "sl-u-cu-eur"}, + {"sl-nedis-u-cu-eur", "sl-HR-nedis-u-cu-eur"}, + }, + }, +} diff --git a/vendor/golang.org/x/text/language/display/dict.go b/vendor/golang.org/x/text/language/display/dict.go new file mode 100644 index 0000000..52c11a9 --- /dev/null +++ b/vendor/golang.org/x/text/language/display/dict.go @@ -0,0 +1,92 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package display + +// This file contains sets of data for specific languages. Users can use these +// to create smaller collections of supported languages and reduce total table +// size. + +// The variable names defined here correspond to those in package language. + +var ( + Afrikaans *Dictionary = &af // af + Amharic *Dictionary = &am // am + Arabic *Dictionary = &ar // ar + ModernStandardArabic *Dictionary = Arabic // ar-001 + Azerbaijani *Dictionary = &az // az + Bulgarian *Dictionary = &bg // bg + Bengali *Dictionary = &bn // bn + Catalan *Dictionary = &ca // ca + Czech *Dictionary = &cs // cs + Danish *Dictionary = &da // da + German *Dictionary = &de // de + Greek *Dictionary = &el // el + English *Dictionary = &en // en + AmericanEnglish *Dictionary = English // en-US + BritishEnglish *Dictionary = English // en-GB + Spanish *Dictionary = &es // es + EuropeanSpanish *Dictionary = Spanish // es-ES + LatinAmericanSpanish *Dictionary = Spanish // es-419 + Estonian *Dictionary = &et // et + Persian *Dictionary = &fa // fa + Finnish *Dictionary = &fi // fi + Filipino *Dictionary = &fil // fil + French *Dictionary = &fr // fr + Gujarati *Dictionary = &gu // gu + Hebrew *Dictionary = &he // he + Hindi *Dictionary = &hi // hi + Croatian *Dictionary = &hr // hr + Hungarian *Dictionary = &hu // hu + Armenian *Dictionary = &hy // hy + Indonesian *Dictionary = &id // id + Icelandic *Dictionary = &is // is + Italian *Dictionary = &it // it + Japanese *Dictionary = &ja // ja + Georgian *Dictionary = &ka // ka + Kazakh *Dictionary = &kk // kk + Khmer *Dictionary = &km // km + Kannada *Dictionary = &kn // kn + Korean *Dictionary = &ko // ko + Kirghiz *Dictionary = &ky // ky + Lao *Dictionary = &lo // lo + Lithuanian *Dictionary = < // lt + Latvian *Dictionary = &lv // lv + Macedonian *Dictionary = &mk // mk + Malayalam *Dictionary = &ml // ml + Mongolian *Dictionary = &mn // mn + Marathi *Dictionary = &mr // mr + Malay *Dictionary = &ms // ms + Burmese *Dictionary = &my // my + Nepali *Dictionary = &ne // ne + Dutch *Dictionary = &nl // nl + Norwegian *Dictionary = &no // no + Punjabi *Dictionary = &pa // pa + Polish *Dictionary = &pl // pl + Portuguese *Dictionary = &pt // pt + BrazilianPortuguese *Dictionary = Portuguese // pt-BR + EuropeanPortuguese *Dictionary = &ptPT // pt-PT + Romanian *Dictionary = &ro // ro + Russian *Dictionary = &ru // ru + Sinhala *Dictionary = &si // si + Slovak *Dictionary = &sk // sk + Slovenian *Dictionary = &sl // sl + Albanian *Dictionary = &sq // sq + Serbian *Dictionary = &sr // sr + SerbianLatin *Dictionary = &srLatn // sr + Swedish *Dictionary = &sv // sv + Swahili *Dictionary = &sw // sw + Tamil *Dictionary = &ta // ta + Telugu *Dictionary = &te // te + Thai *Dictionary = &th // th + Turkish *Dictionary = &tr // tr + Ukrainian *Dictionary = &uk // uk + Urdu *Dictionary = &ur // ur + Uzbek *Dictionary = &uz // uz + Vietnamese *Dictionary = &vi // vi + Chinese *Dictionary = &zh // zh + SimplifiedChinese *Dictionary = Chinese // zh-Hans + TraditionalChinese *Dictionary = &zhHant // zh-Hant + Zulu *Dictionary = &zu // zu +) diff --git a/vendor/golang.org/x/text/language/display/dict_test.go b/vendor/golang.org/x/text/language/display/dict_test.go new file mode 100644 index 0000000..f0b1f78 --- /dev/null +++ b/vendor/golang.org/x/text/language/display/dict_test.go @@ -0,0 +1,39 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package display + +import ( + "fmt" + "testing" + + "golang.org/x/text/internal/testtext" +) + +func TestLinking(t *testing.T) { + base := getSize(t, `display.Tags(language.English).Name(language.English)`) + compact := getSize(t, `display.English.Languages().Name(language.English)`) + + if d := base - compact; d < 1.5*1024*1024 { + t.Errorf("size(base)-size(compact) was %d; want > 1.5MB", base, compact) + } +} + +func getSize(t *testing.T, main string) int { + size, err := testtext.CodeSize(fmt.Sprintf(body, main)) + if err != nil { + t.Skipf("skipping link size test; binary size could not be determined: %v", err) + } + return size +} + +const body = `package main +import ( + "golang.org/x/text/language" + "golang.org/x/text/language/display" +) +func main() { + %s +} +` diff --git a/vendor/golang.org/x/text/language/display/display.go b/vendor/golang.org/x/text/language/display/display.go new file mode 100644 index 0000000..738afa4 --- /dev/null +++ b/vendor/golang.org/x/text/language/display/display.go @@ -0,0 +1,343 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run maketables.go -output tables.go + +// Package display provides display names for languages, scripts and regions in +// a requested language. +// +// The data is based on CLDR's localeDisplayNames. It includes the names of the +// draft level "contributed" or "approved". The resulting tables are quite +// large. The display package is designed so that users can reduce the linked-in +// table sizes by cherry picking the languages one wishes to support. There is a +// Dictionary defined for a selected set of common languages for this purpose. +package display // import "golang.org/x/text/language/display" + +import ( + "strings" + + "golang.org/x/text/language" +) + +/* +TODO: +All fairly low priority at the moment: + - Include alternative and variants as an option (using func options). + - Option for returning the empty string for undefined values. + - Support variants, currencies, time zones, option names and other data + provided in CLDR. + - Do various optimizations: + - Reduce size of offset tables. + - Consider compressing infrequently used languages and decompress on demand. +*/ + +// A Namer is used to get the name for a given value, such as a Tag, Language, +// Script or Region. +type Namer interface { + // Name returns a display string for the given value. A Namer returns an + // empty string for values it does not support. A Namer may support naming + // an unspecified value. For example, when getting the name for a region for + // a tag that does not have a defined Region, it may return the name for an + // unknown region. It is up to the user to filter calls to Name for values + // for which one does not want to have a name string. + Name(x interface{}) string +} + +var ( + // Supported lists the languages for which names are defined. + Supported language.Coverage + + // The set of all possible values for which names are defined. Note that not + // all Namer implementations will cover all the values of a given type. + // A Namer will return the empty string for unsupported values. + Values language.Coverage + + matcher language.Matcher +) + +func init() { + tags := make([]language.Tag, numSupported) + s := supported + for i := range tags { + p := strings.IndexByte(s, '|') + tags[i] = language.Raw.Make(s[:p]) + s = s[p+1:] + } + matcher = language.NewMatcher(tags) + Supported = language.NewCoverage(tags) + + Values = language.NewCoverage(langTagSet.Tags, supportedScripts, supportedRegions) +} + +// Languages returns a Namer for naming languages. It returns nil if there is no +// data for the given tag. The type passed to Name must be either language.Base +// or language.Tag. Note that the result may differ between passing a tag or its +// base language. For example, for English, passing "nl-BE" would return Flemish +// whereas passing "nl" returns "Dutch". +func Languages(t language.Tag) Namer { + if _, index, conf := matcher.Match(t); conf != language.No { + return languageNamer(index) + } + return nil +} + +type languageNamer int + +func (n languageNamer) name(i int) string { + return lookup(langHeaders[:], int(n), i) +} + +// Name implements the Namer interface for language names. +func (n languageNamer) Name(x interface{}) string { + return nameLanguage(n, x) +} + +// nonEmptyIndex walks up the parent chain until a non-empty header is found. +// It returns -1 if no index could be found. +func nonEmptyIndex(h []header, index int) int { + for ; index != -1 && h[index].data == ""; index = int(parents[index]) { + } + return index +} + +// Scripts returns a Namer for naming scripts. It returns nil if there is no +// data for the given tag. The type passed to Name must be either a +// language.Script or a language.Tag. It will not attempt to infer a script for +// tags with an unspecified script. +func Scripts(t language.Tag) Namer { + if _, index, conf := matcher.Match(t); conf != language.No { + if index = nonEmptyIndex(scriptHeaders[:], index); index != -1 { + return scriptNamer(index) + } + } + return nil +} + +type scriptNamer int + +func (n scriptNamer) name(i int) string { + return lookup(scriptHeaders[:], int(n), i) +} + +// Name implements the Namer interface for script names. +func (n scriptNamer) Name(x interface{}) string { + return nameScript(n, x) +} + +// Regions returns a Namer for naming regions. It returns nil if there is no +// data for the given tag. The type passed to Name must be either a +// language.Region or a language.Tag. It will not attempt to infer a region for +// tags with an unspecified region. +func Regions(t language.Tag) Namer { + if _, index, conf := matcher.Match(t); conf != language.No { + if index = nonEmptyIndex(regionHeaders[:], index); index != -1 { + return regionNamer(index) + } + } + return nil +} + +type regionNamer int + +func (n regionNamer) name(i int) string { + return lookup(regionHeaders[:], int(n), i) +} + +// Name implements the Namer interface for region names. +func (n regionNamer) Name(x interface{}) string { + return nameRegion(n, x) +} + +// Tags returns a Namer for giving a full description of a tag. The names of +// scripts and regions that are not already implied by the language name will +// in appended within parentheses. It returns nil if there is not data for the +// given tag. The type passed to Name must be a tag. +func Tags(t language.Tag) Namer { + if _, index, conf := matcher.Match(t); conf != language.No { + return tagNamer(index) + } + return nil +} + +type tagNamer int + +// Name implements the Namer interface for tag names. +func (n tagNamer) Name(x interface{}) string { + return nameTag(languageNamer(n), scriptNamer(n), regionNamer(n), x) +} + +// lookup finds the name for an entry in a global table, traversing the +// inheritance hierarchy if needed. +func lookup(table []header, dict, want int) string { + for dict != -1 { + if s := table[dict].name(want); s != "" { + return s + } + dict = int(parents[dict]) + } + return "" +} + +// A Dictionary holds a collection of Namers for a single language. One can +// reduce the amount of data linked in to a binary by only referencing +// Dictionaries for the languages one needs to support instead of using the +// generic Namer factories. +type Dictionary struct { + parent *Dictionary + lang header + script header + region header +} + +// Tags returns a Namer for giving a full description of a tag. The names of +// scripts and regions that are not already implied by the language name will +// in appended within parentheses. It returns nil if there is not data for the +// given tag. The type passed to Name must be a tag. +func (d *Dictionary) Tags() Namer { + return dictTags{d} +} + +type dictTags struct { + d *Dictionary +} + +// Name implements the Namer interface for tag names. +func (n dictTags) Name(x interface{}) string { + return nameTag(dictLanguages{n.d}, dictScripts{n.d}, dictRegions{n.d}, x) +} + +// Languages returns a Namer for naming languages. It returns nil if there is no +// data for the given tag. The type passed to Name must be either language.Base +// or language.Tag. Note that the result may differ between passing a tag or its +// base language. For example, for English, passing "nl-BE" would return Flemish +// whereas passing "nl" returns "Dutch". +func (d *Dictionary) Languages() Namer { + return dictLanguages{d} +} + +type dictLanguages struct { + d *Dictionary +} + +func (n dictLanguages) name(i int) string { + for d := n.d; d != nil; d = d.parent { + if s := d.lang.name(i); s != "" { + return s + } + } + return "" +} + +// Name implements the Namer interface for language names. +func (n dictLanguages) Name(x interface{}) string { + return nameLanguage(n, x) +} + +// Scripts returns a Namer for naming scripts. It returns nil if there is no +// data for the given tag. The type passed to Name must be either a +// language.Script or a language.Tag. It will not attempt to infer a script for +// tags with an unspecified script. +func (d *Dictionary) Scripts() Namer { + return dictScripts{d} +} + +type dictScripts struct { + d *Dictionary +} + +func (n dictScripts) name(i int) string { + for d := n.d; d != nil; d = d.parent { + if s := d.script.name(i); s != "" { + return s + } + } + return "" +} + +// Name implements the Namer interface for script names. +func (n dictScripts) Name(x interface{}) string { + return nameScript(n, x) +} + +// Regions returns a Namer for naming regions. It returns nil if there is no +// data for the given tag. The type passed to Name must be either a +// language.Region or a language.Tag. It will not attempt to infer a region for +// tags with an unspecified region. +func (d *Dictionary) Regions() Namer { + return dictRegions{d} +} + +type dictRegions struct { + d *Dictionary +} + +func (n dictRegions) name(i int) string { + for d := n.d; d != nil; d = d.parent { + if s := d.region.name(i); s != "" { + return s + } + } + return "" +} + +// Name implements the Namer interface for region names. +func (n dictRegions) Name(x interface{}) string { + return nameRegion(n, x) +} + +// A SelfNamer implements a Namer that returns the name of language in this same +// language. It provides a very compact mechanism to provide a comprehensive +// list of languages to users in their native language. +type SelfNamer struct { + // Supported defines the values supported by this Namer. + Supported language.Coverage +} + +var ( + // Self is a shared instance of a SelfNamer. + Self *SelfNamer = &self + + self = SelfNamer{language.NewCoverage(selfTagSet.Tags)} +) + +// Name returns the name of a given language tag in the language identified by +// this tag. It supports both the language.Base and language.Tag types. +func (n SelfNamer) Name(x interface{}) string { + t, _ := language.All.Compose(x) + base, scr, reg := t.Raw() + baseScript := language.Script{} + if (scr == language.Script{} && reg != language.Region{}) { + // For looking up in the self dictionary, we need to select the + // maximized script. This is even the case if the script isn't + // specified. + s1, _ := t.Script() + if baseScript = getScript(base); baseScript != s1 { + scr = s1 + } + } + + i, scr, reg := selfTagSet.index(base, scr, reg) + if i == -1 { + return "" + } + + // Only return the display name if the script matches the expected script. + if (scr != language.Script{}) { + if (baseScript == language.Script{}) { + baseScript = getScript(base) + } + if baseScript != scr { + return "" + } + } + + return selfHeaders[0].name(i) +} + +// getScript returns the maximized script for a base language. +func getScript(b language.Base) language.Script { + tag, _ := language.Raw.Compose(b) + scr, _ := tag.Script() + return scr +} diff --git a/vendor/golang.org/x/text/language/display/display_test.go b/vendor/golang.org/x/text/language/display/display_test.go new file mode 100644 index 0000000..38aa875 --- /dev/null +++ b/vendor/golang.org/x/text/language/display/display_test.go @@ -0,0 +1,651 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package display + +import ( + "fmt" + "reflect" + "testing" + "unicode" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" +) + +// TODO: test that tables are properly dropped by the linker for various use +// cases. + +var ( + firstLang2aa = language.MustParseBase("aa") + lastLang2zu = language.MustParseBase("zu") + firstLang3ace = language.MustParseBase("ace") + lastLang3zza = language.MustParseBase("zza") + firstTagAr001 = language.MustParse("ar-001") + lastTagZhHant = language.MustParse("zh-Hant") +) + +// TestValues tests that for all languages, regions, and scripts in Values, at +// least one language has a name defined for it by checking it exists in +// English, which is assumed to be the most comprehensive. It is also tested +// that a Namer returns "" for unsupported values. +func TestValues(t *testing.T) { + type testcase struct { + kind string + n Namer + } + // checkDefined checks that a value exists in a Namer. + checkDefined := func(x interface{}, namers []testcase) { + for _, n := range namers { + testtext.Run(t, fmt.Sprintf("%s.Name(%s)", n.kind, x), func(t *testing.T) { + if n.n.Name(x) == "" { + // As of version 28 there is no data for az-Arab in English, + // although there is useful data in other languages. + if x.(fmt.Stringer).String() == "az-Arab" { + return + } + t.Errorf("supported but no result") + } + }) + } + } + // checkUnsupported checks that a value does not exist in a Namer. + checkUnsupported := func(x interface{}, namers []testcase) { + for _, n := range namers { + if got := n.n.Name(x); got != "" { + t.Fatalf("%s.Name(%s): unsupported tag gave non-empty result: %q", n.kind, x, got) + } + } + } + + tags := map[language.Tag]bool{} + namers := []testcase{ + {"Languages(en)", Languages(language.English)}, + {"Tags(en)", Tags(language.English)}, + {"English.Languages()", English.Languages()}, + {"English.Tags()", English.Tags()}, + } + for _, tag := range Values.Tags() { + checkDefined(tag, namers) + tags[tag] = true + } + for _, base := range language.Supported.BaseLanguages() { + tag, _ := language.All.Compose(base) + if !tags[tag] { + checkUnsupported(tag, namers) + } + } + + regions := map[language.Region]bool{} + namers = []testcase{ + {"Regions(en)", Regions(language.English)}, + {"English.Regions()", English.Regions()}, + } + for _, r := range Values.Regions() { + checkDefined(r, namers) + regions[r] = true + } + for _, r := range language.Supported.Regions() { + if r = r.Canonicalize(); !regions[r] { + checkUnsupported(r, namers) + } + } + + scripts := map[language.Script]bool{} + namers = []testcase{ + {"Scripts(en)", Scripts(language.English)}, + {"English.Scripts()", English.Scripts()}, + } + for _, s := range Values.Scripts() { + checkDefined(s, namers) + scripts[s] = true + } + for _, s := range language.Supported.Scripts() { + // Canonicalize the script. + tag, _ := language.DeprecatedScript.Compose(s) + if _, s, _ = tag.Raw(); !scripts[s] { + checkUnsupported(s, namers) + } + } +} + +// TestSupported tests that we have at least some Namers for languages that we +// claim to support. To test the claims in the documentation, it also verifies +// that if a Namer is returned, it will have at least some data. +func TestSupported(t *testing.T) { + supportedTags := Supported.Tags() + if len(supportedTags) != numSupported { + t.Errorf("number of supported was %d; want %d", len(supportedTags), numSupported) + } + + namerFuncs := []struct { + kind string + fn func(language.Tag) Namer + }{ + {"Tags", Tags}, + {"Languages", Languages}, + {"Regions", Regions}, + {"Scripts", Scripts}, + } + + // Verify that we have at least one Namer for all tags we claim to support. + tags := make(map[language.Tag]bool) + for _, tag := range supportedTags { + // Test we have at least one Namer for this supported Tag. + found := false + for _, kind := range namerFuncs { + if defined(t, kind.kind, kind.fn(tag), tag) { + found = true + } + } + if !found { + t.Errorf("%s: supported, but no data available", tag) + } + if tags[tag] { + t.Errorf("%s: included in Supported.Tags more than once", tag) + } + tags[tag] = true + } + + // Verify that we have no Namers for tags we don't claim to support. + for _, base := range language.Supported.BaseLanguages() { + tag, _ := language.All.Compose(base) + // Skip tags that are supported after matching. + if _, _, conf := matcher.Match(tag); conf != language.No { + continue + } + // Test there are no Namers for this tag. + for _, kind := range namerFuncs { + if defined(t, kind.kind, kind.fn(tag), tag) { + t.Errorf("%[1]s(%[2]s) returns a Namer, but %[2]s is not in the set of supported Tags.", kind.kind, tag) + } + } + } +} + +// defined reports whether n is a proper Namer, which means it is non-nil and +// must have at least one non-empty value. +func defined(t *testing.T, kind string, n Namer, tag language.Tag) bool { + if n == nil { + return false + } + switch kind { + case "Tags": + for _, t := range Values.Tags() { + if n.Name(t) != "" { + return true + } + } + case "Languages": + for _, t := range Values.BaseLanguages() { + if n.Name(t) != "" { + return true + } + } + case "Regions": + for _, t := range Values.Regions() { + if n.Name(t) != "" { + return true + } + } + case "Scripts": + for _, t := range Values.Scripts() { + if n.Name(t) != "" { + return true + } + } + } + t.Errorf("%s(%s) returns non-nil Namer without content", kind, tag) + return false +} + +func TestCoverage(t *testing.T) { + en := language.English + tests := []struct { + n Namer + x interface{} + }{ + {Languages(en), Values.Tags()}, + {Scripts(en), Values.Scripts()}, + {Regions(en), Values.Regions()}, + } + for i, tt := range tests { + uniq := make(map[string]interface{}) + + v := reflect.ValueOf(tt.x) + for j := 0; j < v.Len(); j++ { + x := v.Index(j).Interface() + // As of version 28 there is no data for az-Arab in English, + // although there is useful data in other languages. + if x.(fmt.Stringer).String() == "az-Arab" { + continue + } + s := tt.n.Name(x) + if s == "" { + t.Errorf("%d:%d:%s: missing content", i, j, x) + } else if uniq[s] != nil { + t.Errorf("%d:%d:%s: identical return value %q for %v and %v", i, j, x, s, x, uniq[s]) + } + uniq[s] = x + } + } +} + +// TestUpdate tests whether dictionary entries for certain languages need to be +// updated. For some languages, some of the headers may be empty or they may be +// identical to the parent. This code detects if such entries need to be updated +// after a table update. +func TestUpdate(t *testing.T) { + tests := []struct { + d *Dictionary + tag string + }{ + {ModernStandardArabic, "ar-001"}, + {AmericanEnglish, "en-US"}, + {EuropeanSpanish, "es-ES"}, + {BrazilianPortuguese, "pt-BR"}, + {SimplifiedChinese, "zh-Hans"}, + } + + for _, tt := range tests { + _, i, _ := matcher.Match(language.MustParse(tt.tag)) + if !reflect.DeepEqual(tt.d.lang, langHeaders[i]) { + t.Errorf("%s: lang table update needed", tt.tag) + } + if !reflect.DeepEqual(tt.d.script, scriptHeaders[i]) { + t.Errorf("%s: script table update needed", tt.tag) + } + if !reflect.DeepEqual(tt.d.region, regionHeaders[i]) { + t.Errorf("%s: region table update needed", tt.tag) + } + } +} + +func TestIndex(t *testing.T) { + notIn := []string{"aa", "xx", "zz", "aaa", "xxx", "zzz", "Aaaa", "Xxxx", "Zzzz"} + tests := []tagIndex{ + { + "", + "", + "", + }, + { + "bb", + "", + "", + }, + { + "", + "bbb", + "", + }, + { + "", + "", + "Bbbb", + }, + { + "bb", + "bbb", + "Bbbb", + }, + { + "bbccddyy", + "bbbcccdddyyy", + "BbbbCcccDdddYyyy", + }, + } + for i, tt := range tests { + // Create the test set from the tagIndex. + cnt := 0 + for sz := 2; sz <= 4; sz++ { + a := tt[sz-2] + for j := 0; j < len(a); j += sz { + s := a[j : j+sz] + if idx := tt.index(s); idx != cnt { + t.Errorf("%d:%s: index was %d; want %d", i, s, idx, cnt) + } + cnt++ + } + } + if n := tt.len(); n != cnt { + t.Errorf("%d: len was %d; want %d", i, n, cnt) + } + for _, x := range notIn { + if idx := tt.index(x); idx != -1 { + t.Errorf("%d:%s: index was %d; want -1", i, x, idx) + } + } + } +} + +func TestTag(t *testing.T) { + tests := []struct { + dict string + tag string + name string + }{ + {"agq", "sr", ""}, // sr is in Value.Languages(), but is not supported by agq. + {"nl", "nl", "Nederlands"}, + // CLDR 30 dropped Vlaams as the word for nl-BE. It is still called + // Flemish in English, though. TODO: check if this is a CLDR bug. + // {"nl", "nl-BE", "Vlaams"}, + {"nl", "nl-BE", "Nederlands (België)"}, + {"nl", "vls", "West-Vlaams"}, + {"en", "nl-BE", "Flemish"}, + {"en", "en", "English"}, + {"en", "en-GB", "British English"}, + {"en", "en-US", "American English"}, // American English in CLDR 24+ + {"ru", "ru", "русский"}, + {"ru", "ru-RU", "русский (Россия)"}, + {"ru", "ru-Cyrl", "русский (кириллица)"}, + {"en", lastLang2zu.String(), "Zulu"}, + {"en", firstLang2aa.String(), "Afar"}, + {"en", lastLang3zza.String(), "Zaza"}, + {"en", firstLang3ace.String(), "Achinese"}, + {"en", firstTagAr001.String(), "Modern Standard Arabic"}, + {"en", lastTagZhHant.String(), "Traditional Chinese"}, + {"en", "aaa", ""}, + {"en", "zzj", ""}, + // If full tag doesn't match, try without script or region. + {"en", "aa-Hans", "Afar (Simplified Han)"}, + {"en", "af-Arab", "Afrikaans (Arabic)"}, + {"en", "zu-Cyrl", "Zulu (Cyrillic)"}, + {"en", "aa-GB", "Afar (United Kingdom)"}, + {"en", "af-NA", "Afrikaans (Namibia)"}, + {"en", "zu-BR", "Zulu (Brazil)"}, + // Correct inheritance and language selection. + {"zh", "zh-TW", "中文 (台湾)"}, + {"zh", "zh-Hant-TW", "繁体中文 (台湾)"}, + {"zh-Hant", "zh-TW", "中文 (台灣)"}, + {"zh-Hant", "zh-Hant-TW", "繁體中文 (台灣)"}, + // Some rather arbitrary interpretations for Serbian. This is arguably + // correct and consistent with the way zh-[Hant-]TW is handled. It will + // also give results more in line with the expectations if users + // explicitly use "sh". + {"sr-Latn", "sr-ME", "srpski (Crna Gora)"}, + {"sr-Latn", "sr-Latn-ME", "srpskohrvatski (Crna Gora)"}, + // Double script and region + {"nl", "en-Cyrl-BE", "Engels (Cyrillisch, België)"}, + // Canonical equivalents. + {"ro", "ro-MD", "moldovenească"}, + {"ro", "mo", "moldovenească"}, + } + for i, tt := range tests { + d := Tags(language.MustParse(tt.dict)) + if n := d.Name(language.Raw.MustParse(tt.tag)); n != tt.name { + // There are inconsistencies w.r.t. capitalization in the tests + // due to CLDR's update procedure which treats modern and other + // languages differently. + // See http://unicode.org/cldr/trac/ticket/8051. + // TODO: use language capitalization to sanitize the strings. + t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.tag, n, tt.name) + } + } +} + +func TestLanguage(t *testing.T) { + tests := []struct { + dict string + tag string + name string + }{ + {"agq", "sr", ""}, // sr is in Value.Languages(), but is not supported by agq. + // CLDR 30 dropped Vlaams as the word for nl-BE. It is still called + // Flemish in English, though. TODO: this is probably incorrect. + // West-Vlaams (vls) is not Vlaams. West-Vlaams could be considered its + // own language, whereas Vlaams is generally Dutch. So expect to have + // to change these tests back. + {"nl", "nl", "Nederlands"}, + {"nl", "vls", "West-Vlaams"}, + {"nl", "nl-BE", "Nederlands"}, + {"en", "pt", "Portuguese"}, + {"en", "pt-PT", "European Portuguese"}, + {"en", "pt-BR", "Brazilian Portuguese"}, + {"en", "en", "English"}, + {"en", "en-GB", "British English"}, + {"en", "en-US", "American English"}, // American English in CLDR 24+ + {"en", lastLang2zu.String(), "Zulu"}, + {"en", firstLang2aa.String(), "Afar"}, + {"en", lastLang3zza.String(), "Zaza"}, + {"en", firstLang3ace.String(), "Achinese"}, + {"en", firstTagAr001.String(), "Modern Standard Arabic"}, + {"en", lastTagZhHant.String(), "Traditional Chinese"}, + {"en", "aaa", ""}, + {"en", "zzj", ""}, + // If full tag doesn't match, try without script or region. + {"en", "aa-Hans", "Afar"}, + {"en", "af-Arab", "Afrikaans"}, + {"en", "zu-Cyrl", "Zulu"}, + {"en", "aa-GB", "Afar"}, + {"en", "af-NA", "Afrikaans"}, + {"en", "zu-BR", "Zulu"}, + {"agq", "zh-Hant", ""}, + // Canonical equivalents. + {"ro", "ro-MD", "moldovenească"}, + {"ro", "mo", "moldovenească"}, + {"en", "sh", "Serbo-Croatian"}, + {"en", "sr-Latn", "Serbo-Croatian"}, + {"en", "sr", "Serbian"}, + {"en", "sr-ME", "Serbian"}, + {"en", "sr-Latn-ME", "Serbo-Croatian"}, // See comments in TestTag. + } + for i, tt := range tests { + testtext.Run(t, tt.dict+"/"+tt.tag, func(t *testing.T) { + d := Languages(language.Raw.MustParse(tt.dict)) + if n := d.Name(language.Raw.MustParse(tt.tag)); n != tt.name { + t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.tag, n, tt.name) + } + if len(tt.tag) <= 3 { + if n := d.Name(language.MustParseBase(tt.tag)); n != tt.name { + t.Errorf("%d:%s:base(%s): was %q; want %q", i, tt.dict, tt.tag, n, tt.name) + } + } + }) + } +} + +func TestScript(t *testing.T) { + tests := []struct { + dict string + scr string + name string + }{ + {"nl", "Arab", "Arabisch"}, + {"en", "Arab", "Arabic"}, + {"en", "Zzzz", "Unknown Script"}, + {"zh-Hant", "Hang", "韓文字"}, + {"zh-Hant-HK", "Hang", "韓文字"}, + {"zh", "Arab", "阿拉伯文"}, + {"zh-Hans-HK", "Arab", "阿拉伯文"}, // same as zh + {"zh-Hant", "Arab", "阿拉伯文"}, + {"zh-Hant-HK", "Arab", "阿拉伯文"}, // same as zh + // Canonicalized form + {"en", "Qaai", "Inherited"}, // deprecated script, now is Zinh + {"en", "sh", "Unknown Script"}, // sh canonicalizes to sr-Latn + {"en", "en", "Unknown Script"}, + // Don't introduce scripts with canonicalization. + {"en", "sh", "Unknown Script"}, // sh canonicalizes to sr-Latn + } + for i, tt := range tests { + d := Scripts(language.MustParse(tt.dict)) + var x interface{} + if unicode.IsUpper(rune(tt.scr[0])) { + x = language.MustParseScript(tt.scr) + tag, _ := language.Raw.Compose(x) + if n := d.Name(tag); n != tt.name { + t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.scr, n, tt.name) + } + } else { + x = language.Raw.MustParse(tt.scr) + } + if n := d.Name(x); n != tt.name { + t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.scr, n, tt.name) + } + } +} + +func TestRegion(t *testing.T) { + tests := []struct { + dict string + reg string + name string + }{ + {"nl", "NL", "Nederland"}, + {"en", "US", "United States"}, + {"en", "ZZ", "Unknown Region"}, + {"en", "UM", "U.S. Outlying Islands"}, + {"en-GB", "UM", "U.S. Outlying Islands"}, + {"en-GB", "NL", "Netherlands"}, + // Canonical equivalents + {"en", "UK", "United Kingdom"}, + // No region + {"en", "pt", "Unknown Region"}, + {"en", "und", "Unknown Region"}, + // Don't introduce regions with canonicalization. + {"en", "mo", "Unknown Region"}, + } + for i, tt := range tests { + d := Regions(language.MustParse(tt.dict)) + var x interface{} + if unicode.IsUpper(rune(tt.reg[0])) { + // Region + x = language.MustParseRegion(tt.reg) + tag, _ := language.Raw.Compose(x) + if n := d.Name(tag); n != tt.name { + t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.reg, n, tt.name) + } + } else { + // Tag + x = language.Raw.MustParse(tt.reg) + } + if n := d.Name(x); n != tt.name { + t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.reg, n, tt.name) + } + } +} + +func TestSelf(t *testing.T) { + tests := []struct { + tag string + name string + }{ + {"nl", "Nederlands"}, + // CLDR 30 dropped Vlaams as the word for nl-BE. It is still called + // Flemish in English, though. TODO: check if this is a CLDR bug. + // {"nl-BE", "Vlaams"}, + {"nl-BE", "Nederlands"}, + {"en-GB", "British English"}, + {lastLang2zu.String(), "isiZulu"}, + {firstLang2aa.String(), ""}, // not defined + {lastLang3zza.String(), ""}, // not defined + {firstLang3ace.String(), ""}, // not defined + {firstTagAr001.String(), "العربية الرسمية الحديثة"}, + {"ar", "العربية"}, + {lastTagZhHant.String(), "繁體中文"}, + {"aaa", ""}, + {"zzj", ""}, + // Drop entries that are not in the requested script, even if there is + // an entry for the language. + {"aa-Hans", ""}, + {"af-Arab", ""}, + {"zu-Cyrl", ""}, + // Append the country name in the language of the matching language. + {"af-NA", "Afrikaans"}, + {"zh", "中文"}, + // zh-TW should match zh-Hant instead of zh! + {"zh-TW", "繁體中文"}, + {"zh-Hant", "繁體中文"}, + {"zh-Hans", "简体中文"}, + {"zh-Hant-TW", "繁體中文"}, + {"zh-Hans-TW", "简体中文"}, + // Take the entry for sr which has the matching script. + // TODO: Capitalization changed as of CLDR 26, but change seems + // arbitrary. Revisit capitalization with revision 27. See + // http://unicode.org/cldr/trac/ticket/8051. + {"sr", "српски"}, + // TODO: sr-ME should show up as Serbian or Montenegrin, not Serbo- + // Croatian. This is an artifact of the current algorithm, which is the + // way it is to have the preferred behavior for other languages such as + // Chinese. We can hardwire this case in the table generator or package + // code, but we first check if CLDR can be updated. + // {"sr-ME", "Srpski"}, // Is Srpskohrvatski + {"sr-Latn-ME", "srpskohrvatski"}, + {"sr-Cyrl-ME", "српски"}, + {"sr-NL", "српски"}, + // Canonical equivalents. + {"ro-MD", "moldovenească"}, + {"mo", "moldovenească"}, + // NOTE: kk is defined, but in Cyrillic script. For China, Arab is the + // dominant script. We do not have data for kk-Arab and we chose to not + // fall back in such cases. + {"kk-CN", ""}, + } + for i, tt := range tests { + d := Self + if n := d.Name(language.Raw.MustParse(tt.tag)); n != tt.name { + t.Errorf("%d:%s: was %q; want %q", i, tt.tag, n, tt.name) + } + } +} + +func TestDictionaryLang(t *testing.T) { + tests := []struct { + d *Dictionary + tag string + name string + }{ + {English, "en", "English"}, + {Portuguese, "af", "africâner"}, + {EuropeanPortuguese, "af", "africanês"}, + {English, "nl-BE", "Flemish"}, + } + for i, test := range tests { + tag := language.MustParse(test.tag) + if got := test.d.Tags().Name(tag); got != test.name { + t.Errorf("%d:%v: got %s; want %s", i, tag, got, test.name) + } + if base, _ := language.Compose(tag.Base()); base == tag { + if got := test.d.Languages().Name(base); got != test.name { + t.Errorf("%d:%v: got %s; want %s", i, tag, got, test.name) + } + } + } +} + +func TestDictionaryRegion(t *testing.T) { + tests := []struct { + d *Dictionary + region string + name string + }{ + {English, "FR", "France"}, + {Portuguese, "009", "Oceania"}, + {EuropeanPortuguese, "009", "Oceânia"}, + } + for i, test := range tests { + tag := language.MustParseRegion(test.region) + if got := test.d.Regions().Name(tag); got != test.name { + t.Errorf("%d:%v: got %s; want %s", i, tag, got, test.name) + } + } +} + +func TestDictionaryScript(t *testing.T) { + tests := []struct { + d *Dictionary + script string + name string + }{ + {English, "Cyrl", "Cyrillic"}, + {Portuguese, "Gujr", "gujerati"}, + {EuropeanPortuguese, "Gujr", "guzerate"}, + } + for i, test := range tests { + tag := language.MustParseScript(test.script) + if got := test.d.Scripts().Name(tag); got != test.name { + t.Errorf("%d:%v: got %s; want %s", i, tag, got, test.name) + } + } +} diff --git a/vendor/golang.org/x/text/language/display/examples_test.go b/vendor/golang.org/x/text/language/display/examples_test.go new file mode 100644 index 0000000..f392f21 --- /dev/null +++ b/vendor/golang.org/x/text/language/display/examples_test.go @@ -0,0 +1,98 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package display_test + +import ( + "fmt" + + "golang.org/x/text/language" + "golang.org/x/text/language/display" +) + +func ExampleNamer() { + supported := []string{ + "en-US", "en-GB", "ja", "zh", "zh-Hans", "zh-Hant", "pt", "pt-PT", "ko", "ar", "el", "ru", "uk", "pa", + } + + en := display.English.Languages() + + for _, s := range supported { + t := language.MustParse(s) + fmt.Printf("%-20s (%s)\n", en.Name(t), display.Self.Name(t)) + } + + // Output: + // American English (American English) + // British English (British English) + // Japanese (日本語) + // Chinese (中文) + // Simplified Chinese (简体中文) + // Traditional Chinese (繁體中文) + // Portuguese (português) + // European Portuguese (português europeu) + // Korean (한국어) + // Arabic (العربية) + // Greek (Ελληνικά) + // Russian (русский) + // Ukrainian (українська) + // Punjabi (ਪੰਜਾਬੀ) +} + +func ExampleTags() { + n := display.Tags(language.English) + fmt.Println(n.Name(language.Make("nl"))) + fmt.Println(n.Name(language.Make("nl-BE"))) + fmt.Println(n.Name(language.Make("nl-CW"))) + fmt.Println(n.Name(language.Make("nl-Arab"))) + fmt.Println(n.Name(language.Make("nl-Cyrl-RU"))) + + // Output: + // Dutch + // Flemish + // Dutch (Curaçao) + // Dutch (Arabic) + // Dutch (Cyrillic, Russia) +} + +// ExampleDictionary shows how to reduce the amount of data linked into your +// binary by only using the predefined Dictionary variables of the languages you +// wish to support. +func ExampleDictionary() { + tags := []language.Tag{ + language.English, + language.German, + language.Japanese, + language.Russian, + } + dicts := []*display.Dictionary{ + display.English, + display.German, + display.Japanese, + display.Russian, + } + + m := language.NewMatcher(tags) + + getDict := func(t language.Tag) *display.Dictionary { + _, i, confidence := m.Match(t) + // Skip this check if you want to support a fall-back language, which + // will be the first one passed to NewMatcher. + if confidence == language.No { + return nil + } + return dicts[i] + } + + // The matcher will match Swiss German to German. + n := getDict(language.Make("gsw")).Languages() + fmt.Println(n.Name(language.German)) + fmt.Println(n.Name(language.Make("de-CH"))) + fmt.Println(n.Name(language.Make("gsw"))) + + // Output: + // Deutsch + // Schweizer Hochdeutsch + // Schweizerdeutsch +} diff --git a/vendor/golang.org/x/text/language/display/lookup.go b/vendor/golang.org/x/text/language/display/lookup.go new file mode 100644 index 0000000..e6dc0e0 --- /dev/null +++ b/vendor/golang.org/x/text/language/display/lookup.go @@ -0,0 +1,251 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package display + +// This file contains common lookup code that is shared between the various +// implementations of Namer and Dictionaries. + +import ( + "fmt" + "sort" + "strings" + + "golang.org/x/text/language" +) + +type namer interface { + // name gets the string for the given index. It should walk the + // inheritance chain if a value is not present in the base index. + name(idx int) string +} + +func nameLanguage(n namer, x interface{}) string { + t, _ := language.All.Compose(x) + for { + i, _, _ := langTagSet.index(t.Raw()) + if s := n.name(i); s != "" { + return s + } + if t = t.Parent(); t == language.Und { + return "" + } + } +} + +func nameScript(n namer, x interface{}) string { + t, _ := language.DeprecatedScript.Compose(x) + _, s, _ := t.Raw() + return n.name(scriptIndex.index(s.String())) +} + +func nameRegion(n namer, x interface{}) string { + t, _ := language.DeprecatedRegion.Compose(x) + _, _, r := t.Raw() + return n.name(regionIndex.index(r.String())) +} + +func nameTag(langN, scrN, regN namer, x interface{}) string { + t, ok := x.(language.Tag) + if !ok { + return "" + } + const form = language.All &^ language.SuppressScript + if c, err := form.Canonicalize(t); err == nil { + t = c + } + _, sRaw, rRaw := t.Raw() + i, scr, reg := langTagSet.index(t.Raw()) + for i != -1 { + if str := langN.name(i); str != "" { + if hasS, hasR := (scr != language.Script{}), (reg != language.Region{}); hasS || hasR { + ss, sr := "", "" + if hasS { + ss = scrN.name(scriptIndex.index(scr.String())) + } + if hasR { + sr = regN.name(regionIndex.index(reg.String())) + } + // TODO: use patterns in CLDR or at least confirm they are the + // same for all languages. + if ss != "" && sr != "" { + return fmt.Sprintf("%s (%s, %s)", str, ss, sr) + } + if ss != "" || sr != "" { + return fmt.Sprintf("%s (%s%s)", str, ss, sr) + } + } + return str + } + scr, reg = sRaw, rRaw + if t = t.Parent(); t == language.Und { + return "" + } + i, _, _ = langTagSet.index(t.Raw()) + } + return "" +} + +// header contains the data and indexes for a single namer. +// data contains a series of strings concatenated into one. index contains the +// offsets for a string in data. For example, consider a header that defines +// strings for the languages de, el, en, fi, and nl: +// +// header{ +// data: "GermanGreekEnglishDutch", +// index: []uint16{ 0, 6, 11, 18, 18, 23 }, +// } +// +// For a language with index i, the string is defined by +// data[index[i]:index[i+1]]. So the number of elements in index is always one +// greater than the number of languages for which header defines a value. +// A string for a language may be empty, which means the name is undefined. In +// the above example, the name for fi (Finnish) is undefined. +type header struct { + data string + index []uint16 +} + +// name looks up the name for a tag in the dictionary, given its index. +func (h *header) name(i int) string { + if 0 <= i && i < len(h.index)-1 { + return h.data[h.index[i]:h.index[i+1]] + } + return "" +} + +// tagSet is used to find the index of a language in a set of tags. +type tagSet struct { + single tagIndex + long []string +} + +var ( + langTagSet = tagSet{ + single: langIndex, + long: langTagsLong, + } + + // selfTagSet is used for indexing the language strings in their own + // language. + selfTagSet = tagSet{ + single: selfIndex, + long: selfTagsLong, + } + + zzzz = language.MustParseScript("Zzzz") + zz = language.MustParseRegion("ZZ") +) + +// index returns the index of the tag for the given base, script and region or +// its parent if the tag is not available. If the match is for a parent entry, +// the excess script and region are returned. +func (ts *tagSet) index(base language.Base, scr language.Script, reg language.Region) (int, language.Script, language.Region) { + lang := base.String() + index := -1 + if (scr != language.Script{} || reg != language.Region{}) { + if scr == zzzz { + scr = language.Script{} + } + if reg == zz { + reg = language.Region{} + } + + i := sort.SearchStrings(ts.long, lang) + // All entries have either a script or a region and not both. + scrStr, regStr := scr.String(), reg.String() + for ; i < len(ts.long) && strings.HasPrefix(ts.long[i], lang); i++ { + if s := ts.long[i][len(lang)+1:]; s == scrStr { + scr = language.Script{} + index = i + ts.single.len() + break + } else if s == regStr { + reg = language.Region{} + index = i + ts.single.len() + break + } + } + } + if index == -1 { + index = ts.single.index(lang) + } + return index, scr, reg +} + +func (ts *tagSet) Tags() []language.Tag { + tags := make([]language.Tag, 0, ts.single.len()+len(ts.long)) + ts.single.keys(func(s string) { + tags = append(tags, language.Raw.MustParse(s)) + }) + for _, s := range ts.long { + tags = append(tags, language.Raw.MustParse(s)) + } + return tags +} + +func supportedScripts() []language.Script { + scr := make([]language.Script, 0, scriptIndex.len()) + scriptIndex.keys(func(s string) { + scr = append(scr, language.MustParseScript(s)) + }) + return scr +} + +func supportedRegions() []language.Region { + reg := make([]language.Region, 0, regionIndex.len()) + regionIndex.keys(func(s string) { + reg = append(reg, language.MustParseRegion(s)) + }) + return reg +} + +// tagIndex holds a concatenated lists of subtags of length 2 to 4, one string +// for each length, which can be used in combination with binary search to get +// the index associated with a tag. +// For example, a tagIndex{ +// "arenesfrruzh", // 6 2-byte tags. +// "barwae", // 2 3-byte tags. +// "", +// } +// would mean that the 2-byte tag "fr" had an index of 3, and the 3-byte tag +// "wae" had an index of 7. +type tagIndex [3]string + +func (t *tagIndex) index(s string) int { + sz := len(s) + if sz < 2 || 4 < sz { + return -1 + } + a := t[sz-2] + index := sort.Search(len(a)/sz, func(i int) bool { + p := i * sz + return a[p:p+sz] >= s + }) + p := index * sz + if end := p + sz; end > len(a) || a[p:end] != s { + return -1 + } + // Add the number of tags for smaller sizes. + for i := 0; i < sz-2; i++ { + index += len(t[i]) / (i + 2) + } + return index +} + +// len returns the number of tags that are contained in the tagIndex. +func (t *tagIndex) len() (n int) { + for i, s := range t { + n += len(s) / (i + 2) + } + return n +} + +// keys calls f for each tag. +func (t *tagIndex) keys(f func(key string)) { + for i, s := range *t { + for ; s != ""; s = s[i+2:] { + f(s[:i+2]) + } + } +} diff --git a/vendor/golang.org/x/text/language/display/maketables.go b/vendor/golang.org/x/text/language/display/maketables.go new file mode 100644 index 0000000..3fcd9c8 --- /dev/null +++ b/vendor/golang.org/x/text/language/display/maketables.go @@ -0,0 +1,596 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// Generator for display name tables. + +package main + +import ( + "bytes" + "flag" + "fmt" + "log" + "reflect" + "sort" + "strings" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", false, + "test existing tables; can be used to compare web data with package data.") + outputFile = flag.String("output", "tables.go", "output file") + + stats = flag.Bool("stats", false, "prints statistics to stderr") + + short = flag.Bool("short", false, `Use "short" alternatives, when available.`) + draft = flag.String("draft", + "contributed", + `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`) + pkg = flag.String("package", + "display", + "the name of the package in which the generated file is to be included") + + tags = newTagSet("tags", + []language.Tag{}, + "space-separated list of tags to include or empty for all") + dict = newTagSet("dict", + dictTags(), + "space-separated list or tags for which to include a Dictionary. "+ + `"" means the common list from go.text/language.`) +) + +func dictTags() (tag []language.Tag) { + // TODO: replace with language.Common.Tags() once supported. + const str = "af am ar ar-001 az bg bn ca cs da de el en en-US en-GB " + + "es es-ES es-419 et fa fi fil fr fr-CA gu he hi hr hu hy id is it ja " + + "ka kk km kn ko ky lo lt lv mk ml mn mr ms my ne nl no pa pl pt pt-BR " + + "pt-PT ro ru si sk sl sq sr sr-Latn sv sw ta te th tr uk ur uz vi " + + "zh zh-Hans zh-Hant zu" + + for _, s := range strings.Split(str, " ") { + tag = append(tag, language.MustParse(s)) + } + return tag +} + +func main() { + gen.Init() + + // Read the CLDR zip file. + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + d.SetDirFilter("main", "supplemental") + d.SetSectionFilter("localeDisplayNames") + data, err := d.DecodeZip(r) + if err != nil { + log.Fatalf("DecodeZip: %v", err) + } + + w := gen.NewCodeWriter() + defer w.WriteGoFile(*outputFile, "display") + + gen.WriteCLDRVersion(w) + + b := builder{ + w: w, + data: data, + group: make(map[string]*group), + } + b.generate() +} + +const tagForm = language.All + +// tagSet is used to parse command line flags of tags. It implements the +// flag.Value interface. +type tagSet map[language.Tag]bool + +func newTagSet(name string, tags []language.Tag, usage string) tagSet { + f := tagSet(make(map[language.Tag]bool)) + for _, t := range tags { + f[t] = true + } + flag.Var(f, name, usage) + return f +} + +// String implements the String method of the flag.Value interface. +func (f tagSet) String() string { + tags := []string{} + for t := range f { + tags = append(tags, t.String()) + } + sort.Strings(tags) + return strings.Join(tags, " ") +} + +// Set implements Set from the flag.Value interface. +func (f tagSet) Set(s string) error { + if s != "" { + for _, s := range strings.Split(s, " ") { + if s != "" { + tag, err := tagForm.Parse(s) + if err != nil { + return err + } + f[tag] = true + } + } + } + return nil +} + +func (f tagSet) contains(t language.Tag) bool { + if len(f) == 0 { + return true + } + return f[t] +} + +// builder is used to create all tables with display name information. +type builder struct { + w *gen.CodeWriter + + data *cldr.CLDR + + fromLocs []string + + // destination tags for the current locale. + toTags []string + toTagIndex map[string]int + + // list of supported tags + supported []language.Tag + + // key-value pairs per group + group map[string]*group + + // statistics + sizeIndex int // total size of all indexes of headers + sizeData int // total size of all data of headers + totalSize int +} + +type group struct { + // Maps from a given language to the Namer data for this language. + lang map[language.Tag]keyValues + headers []header + + toTags []string + threeStart int + fourPlusStart int +} + +// set sets the typ to the name for locale loc. +func (g *group) set(t language.Tag, typ, name string) { + kv := g.lang[t] + if kv == nil { + kv = make(keyValues) + g.lang[t] = kv + } + if kv[typ] == "" { + kv[typ] = name + } +} + +type keyValues map[string]string + +type header struct { + tag language.Tag + data string + index []uint16 +} + +var versionInfo = `// Version is deprecated. Use CLDRVersion. +const Version = %#v + +` + +var self = language.MustParse("mul") + +// generate builds and writes all tables. +func (b *builder) generate() { + fmt.Fprintf(b.w, versionInfo, cldr.Version) + + b.filter() + b.setData("lang", func(g *group, loc language.Tag, ldn *cldr.LocaleDisplayNames) { + if ldn.Languages != nil { + for _, v := range ldn.Languages.Language { + tag := tagForm.MustParse(v.Type) + if tags.contains(tag) { + g.set(loc, tag.String(), v.Data()) + } + } + } + }) + b.setData("script", func(g *group, loc language.Tag, ldn *cldr.LocaleDisplayNames) { + if ldn.Scripts != nil { + for _, v := range ldn.Scripts.Script { + code := language.MustParseScript(v.Type) + if code.IsPrivateUse() { // Qaaa..Qabx + // TODO: data currently appears to be very meager. + // Reconsider if we have data for English. + if loc == language.English { + log.Fatal("Consider including data for private use scripts.") + } + continue + } + g.set(loc, code.String(), v.Data()) + } + } + }) + b.setData("region", func(g *group, loc language.Tag, ldn *cldr.LocaleDisplayNames) { + if ldn.Territories != nil { + for _, v := range ldn.Territories.Territory { + g.set(loc, language.MustParseRegion(v.Type).String(), v.Data()) + } + } + }) + + b.makeSupported() + + b.writeParents() + + b.writeGroup("lang") + b.writeGroup("script") + b.writeGroup("region") + + b.w.WriteConst("numSupported", len(b.supported)) + buf := bytes.Buffer{} + for _, tag := range b.supported { + fmt.Fprint(&buf, tag.String(), "|") + } + b.w.WriteConst("supported", buf.String()) + + b.writeDictionaries() + + b.supported = []language.Tag{self} + + // Compute the names of locales in their own language. Some of these names + // may be specified in their parent locales. We iterate the maximum depth + // of the parent three times to match successive parents of tags until a + // possible match is found. + for i := 0; i < 4; i++ { + b.setData("self", func(g *group, tag language.Tag, ldn *cldr.LocaleDisplayNames) { + parent := tag + if b, s, r := tag.Raw(); i > 0 && (s != language.Script{} && r == language.Region{}) { + parent, _ = language.Raw.Compose(b) + } + if ldn.Languages != nil { + for _, v := range ldn.Languages.Language { + key := tagForm.MustParse(v.Type) + saved := key + if key == parent { + g.set(self, tag.String(), v.Data()) + } + for k := 0; k < i; k++ { + key = key.Parent() + } + if key == tag { + g.set(self, saved.String(), v.Data()) // set does not overwrite a value. + } + } + } + }) + } + + b.writeGroup("self") +} + +func (b *builder) setData(name string, f func(*group, language.Tag, *cldr.LocaleDisplayNames)) { + b.sizeIndex = 0 + b.sizeData = 0 + b.toTags = nil + b.fromLocs = nil + b.toTagIndex = make(map[string]int) + + g := b.group[name] + if g == nil { + g = &group{lang: make(map[language.Tag]keyValues)} + b.group[name] = g + } + for _, loc := range b.data.Locales() { + // We use RawLDML instead of LDML as we are managing our own inheritance + // in this implementation. + ldml := b.data.RawLDML(loc) + + // We do not support the POSIX variant (it is not a supported BCP 47 + // variant). This locale also doesn't happen to contain any data, so + // we'll skip it by checking for this. + tag, err := tagForm.Parse(loc) + if err != nil { + if ldml.LocaleDisplayNames != nil { + log.Fatalf("setData: %v", err) + } + continue + } + if ldml.LocaleDisplayNames != nil && tags.contains(tag) { + f(g, tag, ldml.LocaleDisplayNames) + } + } +} + +func (b *builder) filter() { + filter := func(s *cldr.Slice) { + if *short { + s.SelectOnePerGroup("alt", []string{"short", ""}) + } else { + s.SelectOnePerGroup("alt", []string{"stand-alone", ""}) + } + d, err := cldr.ParseDraft(*draft) + if err != nil { + log.Fatalf("filter: %v", err) + } + s.SelectDraft(d) + } + for _, loc := range b.data.Locales() { + if ldn := b.data.RawLDML(loc).LocaleDisplayNames; ldn != nil { + if ldn.Languages != nil { + s := cldr.MakeSlice(&ldn.Languages.Language) + if filter(&s); len(ldn.Languages.Language) == 0 { + ldn.Languages = nil + } + } + if ldn.Scripts != nil { + s := cldr.MakeSlice(&ldn.Scripts.Script) + if filter(&s); len(ldn.Scripts.Script) == 0 { + ldn.Scripts = nil + } + } + if ldn.Territories != nil { + s := cldr.MakeSlice(&ldn.Territories.Territory) + if filter(&s); len(ldn.Territories.Territory) == 0 { + ldn.Territories = nil + } + } + } + } +} + +// makeSupported creates a list of all supported locales. +func (b *builder) makeSupported() { + // tags across groups + for _, g := range b.group { + for t, _ := range g.lang { + b.supported = append(b.supported, t) + } + } + b.supported = b.supported[:unique(tagsSorter(b.supported))] + +} + +type tagsSorter []language.Tag + +func (a tagsSorter) Len() int { return len(a) } +func (a tagsSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a tagsSorter) Less(i, j int) bool { return a[i].String() < a[j].String() } + +func (b *builder) writeGroup(name string) { + g := b.group[name] + + for _, kv := range g.lang { + for t, _ := range kv { + g.toTags = append(g.toTags, t) + } + } + g.toTags = g.toTags[:unique(tagsBySize(g.toTags))] + + // Allocate header per supported value. + g.headers = make([]header, len(b.supported)) + for i, sup := range b.supported { + kv, ok := g.lang[sup] + if !ok { + g.headers[i].tag = sup + continue + } + data := []byte{} + index := make([]uint16, len(g.toTags), len(g.toTags)+1) + for j, t := range g.toTags { + index[j] = uint16(len(data)) + data = append(data, kv[t]...) + } + index = append(index, uint16(len(data))) + + // Trim the tail of the index. + // TODO: indexes can be reduced in size quite a bit more. + n := len(index) + for ; n >= 2 && index[n-2] == index[n-1]; n-- { + } + index = index[:n] + + // Workaround for a bug in CLDR 26. + // See http://unicode.org/cldr/trac/ticket/8042. + if cldr.Version == "26" && sup.String() == "hsb" { + data = bytes.Replace(data, []byte{'"'}, nil, 1) + } + g.headers[i] = header{sup, string(data), index} + } + g.writeTable(b.w, name) +} + +type tagsBySize []string + +func (l tagsBySize) Len() int { return len(l) } +func (l tagsBySize) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l tagsBySize) Less(i, j int) bool { + a, b := l[i], l[j] + // Sort single-tag entries based on size first. Otherwise alphabetic. + if len(a) != len(b) && (len(a) <= 4 || len(b) <= 4) { + return len(a) < len(b) + } + return a < b +} + +// parentIndices returns slice a of len(tags) where tags[a[i]] is the parent +// of tags[i]. +func parentIndices(tags []language.Tag) []int16 { + index := make(map[language.Tag]int16) + for i, t := range tags { + index[t] = int16(i) + } + + // Construct default parents. + parents := make([]int16, len(tags)) + for i, t := range tags { + parents[i] = -1 + for t = t.Parent(); t != language.Und; t = t.Parent() { + if j, ok := index[t]; ok { + parents[i] = j + break + } + } + } + return parents +} + +func (b *builder) writeParents() { + parents := parentIndices(b.supported) + fmt.Fprintf(b.w, "var parents = ") + b.w.WriteArray(parents) +} + +// writeKeys writes keys to a special index used by the display package. +// tags are assumed to be sorted by length. +func writeKeys(w *gen.CodeWriter, name string, keys []string) { + w.Size += int(3 * reflect.TypeOf("").Size()) + w.WriteComment("Number of keys: %d", len(keys)) + fmt.Fprintf(w, "var (\n\t%sIndex = tagIndex{\n", name) + for i := 2; i <= 4; i++ { + sub := []string{} + for _, t := range keys { + if len(t) != i { + break + } + sub = append(sub, t) + } + s := strings.Join(sub, "") + w.WriteString(s) + fmt.Fprintf(w, ",\n") + keys = keys[len(sub):] + } + fmt.Fprintln(w, "\t}") + if len(keys) > 0 { + w.Size += int(reflect.TypeOf([]string{}).Size()) + fmt.Fprintf(w, "\t%sTagsLong = ", name) + w.WriteSlice(keys) + } + fmt.Fprintln(w, ")\n") +} + +// identifier creates an identifier from the given tag. +func identifier(t language.Tag) string { + return strings.Replace(t.String(), "-", "", -1) +} + +func (h *header) writeEntry(w *gen.CodeWriter, name string) { + if len(dict) > 0 && dict.contains(h.tag) { + fmt.Fprintf(w, "\t{ // %s\n", h.tag) + fmt.Fprintf(w, "\t\t%[1]s%[2]sStr,\n\t\t%[1]s%[2]sIdx,\n", identifier(h.tag), name) + fmt.Fprintln(w, "\t},") + } else if len(h.data) == 0 { + fmt.Fprintln(w, "\t\t{}, //", h.tag) + } else { + fmt.Fprintf(w, "\t{ // %s\n", h.tag) + w.WriteString(h.data) + fmt.Fprintln(w, ",") + w.WriteSlice(h.index) + fmt.Fprintln(w, ",\n\t},") + } +} + +// write the data for the given header as single entries. The size for this data +// was already accounted for in writeEntry. +func (h *header) writeSingle(w *gen.CodeWriter, name string) { + if len(dict) > 0 && dict.contains(h.tag) { + tag := identifier(h.tag) + w.WriteConst(tag+name+"Str", h.data) + + // Note that we create a slice instead of an array. If we use an array + // we need to refer to it as a[:] in other tables, which will cause the + // array to always be included by the linker. See Issue 7651. + w.WriteVar(tag+name+"Idx", h.index) + } +} + +// WriteTable writes an entry for a single Namer. +func (g *group) writeTable(w *gen.CodeWriter, name string) { + start := w.Size + writeKeys(w, name, g.toTags) + w.Size += len(g.headers) * int(reflect.ValueOf(g.headers[0]).Type().Size()) + + fmt.Fprintf(w, "var %sHeaders = [%d]header{\n", name, len(g.headers)) + + title := strings.Title(name) + for _, h := range g.headers { + h.writeEntry(w, title) + } + fmt.Fprintln(w, "}\n") + + for _, h := range g.headers { + h.writeSingle(w, title) + } + n := w.Size - start + fmt.Fprintf(w, "// Total size for %s: %d bytes (%d KB)\n\n", name, n, n/1000) +} + +func (b *builder) writeDictionaries() { + fmt.Fprintln(b.w, "// Dictionary entries of frequent languages") + fmt.Fprintln(b.w, "var (") + parents := parentIndices(b.supported) + + for i, t := range b.supported { + if dict.contains(t) { + ident := identifier(t) + fmt.Fprintf(b.w, "\t%s = Dictionary{ // %s\n", ident, t) + if p := parents[i]; p == -1 { + fmt.Fprintln(b.w, "\t\tnil,") + } else { + fmt.Fprintf(b.w, "\t\t&%s,\n", identifier(b.supported[p])) + } + fmt.Fprintf(b.w, "\t\theader{%[1]sLangStr, %[1]sLangIdx},\n", ident) + fmt.Fprintf(b.w, "\t\theader{%[1]sScriptStr, %[1]sScriptIdx},\n", ident) + fmt.Fprintf(b.w, "\t\theader{%[1]sRegionStr, %[1]sRegionIdx},\n", ident) + fmt.Fprintln(b.w, "\t}") + } + } + fmt.Fprintln(b.w, ")") + + var s string + var a []uint16 + sz := reflect.TypeOf(s).Size() + sz += reflect.TypeOf(a).Size() + sz *= 3 + sz += reflect.TypeOf(&a).Size() + n := int(sz) * len(dict) + fmt.Fprintf(b.w, "// Total size for %d entries: %d bytes (%d KB)\n\n", len(dict), n, n/1000) + + b.w.Size += n +} + +// unique sorts the given lists and removes duplicate entries by swapping them +// past position k, where k is the number of unique values. It returns k. +func unique(a sort.Interface) int { + if a.Len() == 0 { + return 0 + } + sort.Sort(a) + k := 1 + for i := 1; i < a.Len(); i++ { + if a.Less(k-1, i) { + if k != i { + a.Swap(k, i) + } + k++ + } + } + return k +} diff --git a/vendor/golang.org/x/text/language/display/tables.go b/vendor/golang.org/x/text/language/display/tables.go new file mode 100644 index 0000000..0d7ebd7 --- /dev/null +++ b/vendor/golang.org/x/text/language/display/tables.go @@ -0,0 +1,50345 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package display + +// CLDRVersion is the CLDR version from which the tables in this package are derived. +const CLDRVersion = "30" + +// Version is deprecated. Use CLDRVersion. +const Version = "30" + +var parents = [252]int16{ + // Entry 0 - 3F + -1, -1, -1, -1, -1, 4, 4, 4, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 19, -1, 21, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 36, 36, 36, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 48, 48, -1, -1, 53, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + // Entry 40 - 7F + 54, 54, 54, 54, 54, 54, 54, 54, + 54, -1, -1, -1, -1, 76, -1, -1, + -1, -1, -1, 82, 82, 82, -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, 124, -1, -1, + // Entry 80 - BF + -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, 178, -1, -1, -1, -1, + 183, -1, -1, 186, -1, -1, -1, -1, + // Entry C0 - FF + -1, -1, 193, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 207, 207, 207, -1, 211, 211, 211, -1, + 215, -1, 217, 217, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 231, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 244, -1, -1, + -1, -1, 249, -1, +} + +// Number of keys: 612 +var ( + langIndex = tagIndex{ + "aaabaeafakamanarasavayazbabebgbibmbnbobrbscacechcocrcscucvcydadedvdzeeel" + + "eneoeseteufafffifjfofrfygagdglgngugvhahehihohrhthuhyhziaidieigiiikio" + + "isitiujajvkakgkikjkkklkmknkokrkskukvkwkylalblglilnloltlulvmgmhmimkml" + + "mnmrmsmtmynandnengnlnnnonrnvnyocojomorospapiplpsptqurmrnrorurwsascsd" + + "sesgsiskslsmsnsosqsrssstsusvswtatetgthtitktntotrtstttyugukuruzvevivo" + + "wawoxhyiyozazhzu", + "aceachadaadyaebafhagqainakkakzalealnaltanganparcarnaroarparqarsarwaryarz" + + "asaaseastavkawabalbanbarbasbaxbbcbbjbejbembewbezbfdbfqbgnbhobikbinbj" + + "nbkmblabpybqibrabrhbrxbssbuabugbumbynbyvcadcarcaycchcebcggchbchgchkc" + + "hmchnchochpchrchyckbcopcpscrhcrscsbdakdardavdeldendgrdindjedoidsbdtp" + + "duadumdyodyudzgebuefieglegyekaelxenmesuewoextfanfilfitfonfrcfrmfrofr" + + "pfrrfrsfurgaagaggangaygbagbzgezgilglkgmhgohgomgongorgotgrbgrcgswgucg" + + "urguzgwihaihakhawhifhilhithmnhsbhsnhupibaibbiloinhizhjamjbojgojmcjpr" + + "jrbjutkaakabkackajkamkawkbdkblkcgkdekeakenkfokgpkhakhokhqkhwkiukkjkl" + + "nkmbkoikokkoskpekrckrikrjkrlkruksbksfkshkumkutladlaglahlamlezlfnlijl" + + "ivlktlmolollozlrcltglualuilunluolusluylzhlzzmadmafmagmaimakmanmasmde" + + "mdfmdrmenmermfemgamghmgomicminmncmnimohmosmrjmuamulmusmwlmwrmwvmyemy" + + "vmznnannapnaqndsnewnianiunjonmgnnhnognonnovnqonsonusnwcnymnynnyonzio" + + "saotapagpalpampappaupcdpcmpdcpdtpeopflphnpmspntponprgproqucqugrajrap" + + "rarrgnrifrofromrtmruerugruprwksadsahsamsaqsassatsazsbasbpscnscosdcsd" + + "hseesehseiselsessgasgsshishnshusidslislysmasmjsmnsmssnksogsrnsrrssys" + + "tqsuksussuxswbsycsyrszltcytemteotertettigtivtkltkrtlhtlitlytmhtogtpi" + + "trutrvtsdtsittttumtvltwqtyvtzmudmugaumbundvaivecvepvlsvmfvotvrovunwa" + + "ewalwarwaswbpwuuxalxmfxogyaoyapyavybbyrlyuezapzblzeazenzghzunzxxzza", + "", + } + langTagsLong = []string{ // 23 elements + "ar-001", + "az-Arab", + "de-AT", + "de-CH", + "en-AU", + "en-CA", + "en-GB", + "en-US", + "es-419", + "es-ES", + "es-MX", + "fa-AF", + "fr-CA", + "fr-CH", + "nds-NL", + "nl-BE", + "pt-BR", + "pt-PT", + "ro-MD", + "sr-Latn", + "sw-CD", + "zh-Hans", + "zh-Hant", + } +) + +var langHeaders = [252]header{ + { // af + afLangStr, + afLangIdx, + }, + { // agq + "AkanÀmalìÀlabìBɛ̀làlusànBùugɨlìaBɨ̀ŋgalìChɛ̂Dzamɛ̀Gɨ̀lêʔKɨŋgeleSɨ̀kpanìs" + + "KpɛɛshìaKɨ̀fàlàŋsiKɨtsɔŋkaŋEndìHɔŋgalìaÈndònɛshìaEgbòÈtalìaDzàkpànêD" + + "zàbvànêKɨmɛ̀kùulîaMàlaeBùumɛsɛ̀Nɛ̀kpalìDɔ̂sKpuwndzabìKpɔlìsKpotùwgîi" + + "LùmanyìaLushìaLùwandàSòmalìSuedìsTamìTàeTʉʉkìsÙkɛlɛnìaUudùwVìyɛtnàmê" + + "YulùbaChàenêZulùAghem", + []uint16{ // 188 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000b, 0x000b, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0020, 0x002b, + 0x002b, 0x002b, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, + 0x0037, 0x0037, 0x0037, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x0045, 0x0045, 0x0045, 0x0045, 0x004f, 0x0058, 0x0058, 0x0064, + 0x0064, 0x0064, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x007e, + 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x008b, + 0x008b, 0x0090, 0x0090, 0x0090, 0x0090, 0x009b, 0x009b, 0x009b, + // Entry 40 - 7F + 0x009b, 0x00a9, 0x00a9, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00b6, 0x00b6, 0x00c1, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00cc, 0x00cc, 0x00d4, 0x00d4, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00e2, 0x00e2, 0x00ee, 0x00ee, 0x00ee, + 0x00f9, 0x00f9, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, + 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x010a, 0x010a, 0x0112, + // Entry 80 - BF + 0x0112, 0x011d, 0x011d, 0x011d, 0x011d, 0x0127, 0x012e, 0x0137, + 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, + 0x0137, 0x0137, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x0146, 0x0146, 0x014b, 0x014b, 0x014b, 0x014f, 0x014f, 0x014f, + 0x014f, 0x014f, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0164, + 0x016a, 0x016a, 0x016a, 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, + 0x0177, 0x017e, 0x017e, 0x0186, 0x018b, 0x018b, 0x018b, 0x018b, + 0x018b, 0x018b, 0x018b, 0x0190, + }, + }, + { // ak + "AkanAmarikArabikBelarus kasaBɔlgeria kasaBengali kasaKyɛk kasaGyaamanGre" + + "ek kasaBorɔfoSpain kasaPɛɛhyia kasaFrɛnkyeHausaHindiHangri kasaIndon" + + "ihyia kasaIgboItaly kasaGyapan kasaGyabanis kasaKambodia kasaKorea k" + + "asaMalay kasaBɛɛmis kasaNɛpal kasaDɛɛkyePungyabi kasaPɔland kasaPɔɔt" + + "ugal kasaRomenia kasaRahyia kasaRewanda kasaSomalia kasaSweden kasaT" + + "amil kasaTaeland kasaTɛɛki kasaUkren kasaUrdu kasaViɛtnam kasaYoruba" + + "Kyaena kasaZulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000a, 0x000a, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x001c, 0x002a, + 0x002a, 0x002a, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0051, 0x0058, 0x0058, 0x0062, + 0x0062, 0x0062, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0078, + 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x007d, + 0x007d, 0x0082, 0x0082, 0x0082, 0x0082, 0x008d, 0x008d, 0x008d, + // Entry 40 - 7F + 0x008d, 0x009c, 0x009c, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00aa, 0x00aa, 0x00b5, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + 0x00c2, 0x00c2, 0x00cf, 0x00cf, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00e3, 0x00e3, 0x00f0, 0x00f0, 0x00f0, + 0x00fb, 0x00fb, 0x0103, 0x0103, 0x0103, 0x0103, 0x0103, 0x0103, + 0x0103, 0x0103, 0x0103, 0x0103, 0x0103, 0x0110, 0x0110, 0x011c, + // Entry 80 - BF + 0x011c, 0x012b, 0x012b, 0x012b, 0x012b, 0x0137, 0x0142, 0x014e, + 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, + 0x014e, 0x014e, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, + 0x0165, 0x0165, 0x016f, 0x016f, 0x016f, 0x017b, 0x017b, 0x017b, + 0x017b, 0x017b, 0x0187, 0x0187, 0x0187, 0x0187, 0x0187, 0x0191, + 0x019a, 0x019a, 0x019a, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01ad, 0x01ad, 0x01b8, 0x01bc, + }, + }, + { // am + amLangStr, + amLangIdx, + }, + { // ar + arLangStr, + arLangIdx, + }, + { // ar-EG + "الدنماركية", + []uint16{ // 32 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, + }, + }, + { // ar-LY + "الغورانيةاللاووالسواحيليةالتيغرينيةالمابودونجونيةصوربيا العلياسامي الجنو" + + "بيةالكرواتية الصربيةالسواحيلية الكونغولية", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + // Entry 40 - 7F + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + // Entry 80 - BF + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + // Entry C0 - FF + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + // Entry 100 - 13F + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + // Entry 140 - 17F + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + // Entry 180 - 1BF + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + // Entry 1C0 - 1FF + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + // Entry 200 - 23F + 0x007b, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + // Entry 240 - 27F + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x00b5, 0x00de, + }, + }, + { // ar-SA + "الغورانيةاللاووالأوريةالسواحيليةالتيغرينيةالمابودونجونيةصوربيا العلياسام" + + "ي الجنوبيةالكرواتية الصربيةالسواحيلية الكونغولية", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + // Entry 40 - 7F + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + // Entry 80 - BF + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + // Entry C0 - FF + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + // Entry 100 - 13F + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + // Entry 140 - 17F + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + // Entry 180 - 1BF + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + // Entry 1C0 - 1FF + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + // Entry 200 - 23F + 0x0089, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + // Entry 240 - 27F + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00c3, 0x00ec, + }, + }, + { // as + "অসমীয়া", + []uint16{ // 10 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, + }, + }, + { // asa + "KiakanKiamhariKiarabuKibelarusiKibulgariaKibanglaKichekiKijerumaniKigiri" + + "kiKiingeredhaKihithpaniaKiajemiKifaranthaKihauthaKihindiKihungariKii" + + "ndonethiaKiigboKiitaliaanoKijapaniKijavaKikambodiaKikoreaKimalesiaKi" + + "burmaKinepaliKiholandhiKipunjabiKipolandiKirenoKiromaniaKiruthiKinya" + + "randwaKithomaliKithwidiKitamilKitailandiKiturukiKiukraniaKiurduKivie" + + "tinamuKiyorubaKichinaKidhuluKipare", + []uint16{ // 206 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0042, 0x0042, 0x0042, 0x0042, 0x004a, 0x0055, 0x0055, 0x0060, + 0x0060, 0x0060, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0079, + 0x0079, 0x0080, 0x0080, 0x0080, 0x0080, 0x0089, 0x0089, 0x0089, + // Entry 40 - 7F + 0x0089, 0x0095, 0x0095, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, + 0x00a6, 0x00a6, 0x00ae, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00be, 0x00be, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00ce, 0x00ce, 0x00d5, 0x00d5, 0x00d5, + 0x00dd, 0x00dd, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00f0, 0x00f0, 0x00f9, + // Entry 80 - BF + 0x00f9, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x0108, 0x010f, 0x011a, + 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x011a, 0x011a, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x012b, 0x012b, 0x0132, 0x0132, 0x0132, 0x013c, 0x013c, 0x013c, + 0x013c, 0x013c, 0x0144, 0x0144, 0x0144, 0x0144, 0x0144, 0x014d, + 0x0153, 0x0153, 0x0153, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, + 0x015e, 0x0166, 0x0166, 0x016d, 0x0174, 0x0174, 0x0174, 0x0174, + 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, + // Entry C0 - FF + 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, + 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x017a, + }, + }, + { // ast + "afarabkhazianuavestanínafrikaansakanamháricuaragonésárabeasamésaváricuay" + + "maraazerbaixanubashkirbielorrusubúlgarubislamabambarabengalíntibetan" + + "ubretónbosniucatalánchechenuchamorrocorsucreechecueslávicu eclesiást" + + "icuchuvashgalésdanésalemándivehidzongkhaewegrieguinglésesperantoespa" + + "ñolestoniuvascupersafulahfinlandésfixanuferoésfrancésfrisón occiden" + + "talirlandésgaélicu escocésgalleguguaraníguyaratímanésḥausahebréuhind" + + "ihiri motucroatahaitianuhúngaruarmeniuhererointerlinguaindonesiuinte" + + "rlingueigboyi de Sichuáninupiaqidoislandésitalianuinuktitutxaponésxa" + + "vanésxeorxanukongokikuyukuanyamakazaquistanínkalaallisutḥemercanarés" + + "coreanukanuricachemiréscurdukomicórnicukirguistanínllatínluxemburgué" + + "sgandalimburguéslingalalaosianulituanuluba-katangaletónmalgaxemarsha" + + "llésmaorímacedoniumalayalammongolmarathimalayumaltésbirmanunaurundeb" + + "ele del nortenepalésndonganeerlandésnoruegu Nynorsknoruegu Bokmålnde" + + "bele del surnavajonyanjaoccitanuojibwaoromooriyaoséticupunyabípalipo" + + "lacupashtuportuguésquechuaromancherundirumanurusukinyarwandasánscrit" + + "usardusindhisami del nortesangocingaléseslovacueslovenusamoanushonas" + + "omalínalbanuserbiuswatisotho del sursondanéssuecusuaḥilitamiltelugut" + + "axiquistaníntailandéstigrinyaturcomanutswanatonganuturcutsongatártar" + + "utahitianuuigurucraínurduuzbequistanínvendavietnamínvolapükvalónwolo" + + "fxhosayiddishyorubazhuangchinuzulúachinésacoliadangmeadygheárabe de " + + "Túnezafrihiliaghemainuacadianualabamaaleutgheg d’Albaniaaltai del su" + + "ringlés antiguuangikaaraméumapuchearaonaarapahoárabe d’Arxeliaarawak" + + "árabe de Marruecosárabe d’Exiptuasullingua de signos americanaastur" + + "ianukotavaawadhibaluchibalinésbávarubasaabamunbatak tobaghomalabejab" + + "embabetawibenabafutbadagabalochi occidentalbhojpuribikolbinibanjarko" + + "msiksikabishnupriyabakhtiaribrajbrahuibodoakooseburiatbuginésbulubli" + + "nmedumbacaddocaribecayugaatsamcebuanuchigachibchachagataichuukésmari" + + "xíriga chinookchoctawchipewyanucheroquicheyennekurdu centralcópticuc" + + "apiznonturcu de Crimeafrancés criollu seselwakashubianudakotadargwat" + + "aitadelawareslavedogribdinkazarmadogribaxu sorbiudusun centraldualan" + + "eerlandés mediujola-fonyidyuladazagaembúefikemilianuexipciu antiguue" + + "kajukelamitainglés mediuyupik centralewondoestremeñufangfilipínfinla" + + "ndés de Tornedalenfonfrancés cajunfrancés mediufrancés antiguuarpita" + + "nufrisón del nortefrisón orientalfriulianugagagauzchinu gangayogbaya" + + "dari zoroastrianugeezgilbertésgilakialtualemán mediualtualemán antig" + + "uugoan konkanigondigorontalogóticugrebogriegu antiguualemán de Suiza" + + "wayuufrafragusiigwichʼinhaidachinu hakkahawaianuhindi de Fijihiligay" + + "nonhititahmongaltu sorbiuchinu xianghupaibanibibioilokoingushingrian" + + "uinglés criollu xamaicanulojbanngombamachamexudeo-persaxudeo-árabeju" + + "tlandéskara-kalpakkabileñukachinjjukambakawikabardianukanembutyapmak" + + "ondecabuverdianukenyangkorokaingangkhasikhotanéskoyra chiinikhowarki" + + "rmanjkikakokalenjinkimbundukomi-permyakkonkanikosraeanukpellekaracha" + + "y-balkarkriokinaray-akarelianukurukhshambalabafiacolonianukumykkuten" + + "ailadinolangilahndalambalezghianulingua franca novaligurianulivonian" + + "ulakotalombardumongoloziluri del nortelatgalianuluba-lulualuisenolun" + + "daluomizoluyiachinu lliterariulazmadurésmafamagahimaithilimakasarman" + + "dingomasáimabamokshamandarmendemerumorisyenírlandés mediumakhuwa-mee" + + "ttometa’micmacminangkabaumanchúmanipurimohawkmossimari occidentalmun" + + "dangmúltiples llingüescreekmirandésmarwarimentawaimyeneerzyamazander" + + "anichinu min nannapolitanunamabaxu alemánnewariniasniueanuao nagakwa" + + "siongiemboonnogainoruegu antiguunovialn’kosotho del nortenuernewari " + + "clásicunyamwezinyankolenyoronzimaosageturcu otomanupangasinanpahlavi" + + "pampangapapiamentopalauanupícarunixerianu simplificáualemán de Penns" + + "ylvaniaplautdietschpersa antiguualemán palatinufeniciupiamontéspónti" + + "cupohnpeianuprusianuprovenzal antiguukʼicheʼquichua del altiplanu de" + + " Chimborazorajasthanínrapanuirarotonganuromañolrifianuromboromanírot" + + "umanurusynrovianaaromanianurwasandavéssakhaaraméu samaritanusamburus" + + "asaksantalisaurashtrangambaysangusicilianuscotssardu sassaréskurdu d" + + "el sursénecasenaseriselkupkoyraboro senniirlandés antiguusamogitianu" + + "tachelhitshanárabe chadianusidamobaxu silesianuselayaréssami del sur" + + "lule samiinari samiskolt samisoninkesogdianusranan tongoserersahofri" + + "són de Saterlandsukumasususumeriucomorianusiriacu clásicusiriacusile" + + "sianutulutimnetesoterenatetumtigretivtokelautsakhurklingontlingittal" + + "ixíntamashektonga nyasatok pisinturoyotarokotsakoniutsimshiantati mu" + + "sulmántumbukatuvalutasawaqtuvinianutamazight del Atles centraludmurt" + + "ugaríticuumbundurootvaivenecianuvepsiuflamencu occidentalfranconianu" + + " del Mainvóticuvorovunjowalserwolayttawaraywashowarlpirichinu wucalm" + + "ucomingrelianusogayaoyapésyangbenyembanheengatucantonészapotecasimbó" + + "licu Blisszeelandészenagatamazight estándar de Marruecoszuniensin co" + + "nteníu llingüísticuzazaárabe estándar modernualemán d’Austriaaltuale" + + "mán de Suizainglés d’Australiainglés de Canadáinglés de Gran Bretaña" + + "inglés d’Estaos Xuníosespañol d’América Llatinaespañol européuespaño" + + "l de Méxicufrancés de Canadáfrancés de Suizabaxu saxónflamencuportug" + + "ués del Brasilportugués européumoldavuserbo-croatasuaḥili del Conguc" + + "hinu simplificáuchinu tradicional", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000e, 0x0018, 0x0021, 0x0025, 0x002e, 0x0037, + 0x003d, 0x0044, 0x004c, 0x0052, 0x005d, 0x0064, 0x006e, 0x0076, + 0x007d, 0x0084, 0x008d, 0x0095, 0x009c, 0x00a2, 0x00aa, 0x00b2, + 0x00ba, 0x00bf, 0x00c3, 0x00c8, 0x00df, 0x00e6, 0x00ec, 0x00f2, + 0x00f9, 0x00ff, 0x0107, 0x010a, 0x0110, 0x0117, 0x0120, 0x0128, + 0x012f, 0x0134, 0x0139, 0x013e, 0x0148, 0x014e, 0x0155, 0x015d, + 0x016f, 0x0178, 0x0189, 0x0190, 0x0198, 0x01a1, 0x01a7, 0x01ae, + 0x01b5, 0x01ba, 0x01c3, 0x01c9, 0x01d1, 0x01d9, 0x01e0, 0x01e6, + // Entry 40 - 7F + 0x01f1, 0x01fa, 0x0205, 0x0209, 0x0217, 0x021e, 0x0221, 0x022a, + 0x0232, 0x023b, 0x0243, 0x024b, 0x0253, 0x0258, 0x025e, 0x0266, + 0x0274, 0x027f, 0x0286, 0x028e, 0x0295, 0x029b, 0x02a6, 0x02ab, + 0x02af, 0x02b7, 0x02c4, 0x02cb, 0x02d8, 0x02dd, 0x02e8, 0x02ef, + 0x02f7, 0x02fe, 0x030a, 0x0310, 0x0317, 0x0322, 0x0328, 0x0331, + 0x033a, 0x0340, 0x0347, 0x034d, 0x0354, 0x035b, 0x0360, 0x0371, + 0x0379, 0x037f, 0x038a, 0x0399, 0x03a8, 0x03b7, 0x03bd, 0x03c3, + 0x03cb, 0x03d1, 0x03d6, 0x03db, 0x03e3, 0x03eb, 0x03ef, 0x03f5, + // Entry 80 - BF + 0x03fb, 0x0405, 0x040c, 0x0414, 0x0419, 0x041f, 0x0423, 0x042e, + 0x0438, 0x043d, 0x0443, 0x0451, 0x0456, 0x045f, 0x0467, 0x046f, + 0x0476, 0x047b, 0x0483, 0x0489, 0x048f, 0x0494, 0x04a1, 0x04aa, + 0x04af, 0x04b8, 0x04bd, 0x04c3, 0x04d1, 0x04db, 0x04e3, 0x04ec, + 0x04f2, 0x04f9, 0x04fe, 0x0504, 0x050c, 0x0515, 0x051a, 0x0521, + 0x0525, 0x0533, 0x0538, 0x0542, 0x054a, 0x0550, 0x0555, 0x055a, + 0x0561, 0x0567, 0x056d, 0x0572, 0x0577, 0x057f, 0x0584, 0x058b, + 0x0591, 0x05a1, 0x05a9, 0x05ae, 0x05b2, 0x05ba, 0x05c1, 0x05c6, + // Entry C0 - FF + 0x05d6, 0x05e3, 0x05f2, 0x05f8, 0x05ff, 0x0606, 0x060c, 0x0613, + 0x0625, 0x0625, 0x062b, 0x063e, 0x064f, 0x0652, 0x066d, 0x0676, + 0x067c, 0x0682, 0x0689, 0x0691, 0x0698, 0x069d, 0x06a2, 0x06ac, + 0x06b3, 0x06b7, 0x06bc, 0x06c2, 0x06c6, 0x06cb, 0x06d1, 0x06e3, + 0x06eb, 0x06f0, 0x06f4, 0x06fa, 0x06fd, 0x0704, 0x070f, 0x0718, + 0x071c, 0x0722, 0x0726, 0x072c, 0x0732, 0x073a, 0x073e, 0x0742, + 0x0749, 0x074e, 0x0754, 0x075a, 0x075f, 0x0766, 0x076b, 0x0772, + 0x077a, 0x0782, 0x0786, 0x0795, 0x079c, 0x07a6, 0x07ae, 0x07b6, + // Entry 100 - 13F + 0x07c3, 0x07cb, 0x07d3, 0x07e2, 0x07fa, 0x0804, 0x080a, 0x0810, + 0x0815, 0x081d, 0x0822, 0x0828, 0x082d, 0x0832, 0x0837, 0x0842, + 0x084f, 0x0854, 0x0865, 0x086f, 0x0874, 0x087a, 0x087f, 0x0883, + 0x088b, 0x089a, 0x08a0, 0x08a7, 0x08b4, 0x08c1, 0x08c7, 0x08d1, + 0x08d5, 0x08dd, 0x08f5, 0x08f8, 0x0906, 0x0914, 0x0924, 0x092c, + 0x093d, 0x094d, 0x0956, 0x0958, 0x095e, 0x0967, 0x096b, 0x0970, + 0x0981, 0x0985, 0x098f, 0x0995, 0x09a6, 0x09b9, 0x09c5, 0x09ca, + 0x09d3, 0x09da, 0x09df, 0x09ed, 0x09fd, 0x0a02, 0x0a08, 0x0a0d, + // Entry 140 - 17F + 0x0a16, 0x0a1b, 0x0a26, 0x0a2e, 0x0a3b, 0x0a45, 0x0a4b, 0x0a50, + 0x0a5b, 0x0a66, 0x0a6a, 0x0a6e, 0x0a74, 0x0a79, 0x0a7f, 0x0a87, + 0x0aa0, 0x0aa6, 0x0aac, 0x0ab3, 0x0abe, 0x0aca, 0x0ad4, 0x0adf, + 0x0ae8, 0x0aee, 0x0af1, 0x0af6, 0x0afa, 0x0b04, 0x0b0b, 0x0b0f, + 0x0b16, 0x0b22, 0x0b29, 0x0b2d, 0x0b35, 0x0b3a, 0x0b43, 0x0b4f, + 0x0b55, 0x0b5e, 0x0b62, 0x0b6a, 0x0b72, 0x0b7e, 0x0b85, 0x0b8e, + 0x0b94, 0x0ba3, 0x0ba7, 0x0bb0, 0x0bb9, 0x0bbf, 0x0bc7, 0x0bcc, + 0x0bd5, 0x0bda, 0x0be1, 0x0be7, 0x0bec, 0x0bf2, 0x0bf7, 0x0c00, + // Entry 180 - 1BF + 0x0c12, 0x0c1b, 0x0c24, 0x0c2a, 0x0c32, 0x0c37, 0x0c3b, 0x0c49, + 0x0c53, 0x0c5d, 0x0c64, 0x0c69, 0x0c6c, 0x0c70, 0x0c75, 0x0c85, + 0x0c88, 0x0c90, 0x0c94, 0x0c9a, 0x0ca2, 0x0ca9, 0x0cb1, 0x0cb7, + 0x0cbb, 0x0cc1, 0x0cc7, 0x0ccc, 0x0cd0, 0x0cd8, 0x0ce8, 0x0cf6, + 0x0cfd, 0x0d03, 0x0d0e, 0x0d15, 0x0d1d, 0x0d23, 0x0d28, 0x0d37, + 0x0d3e, 0x0d52, 0x0d57, 0x0d60, 0x0d67, 0x0d6f, 0x0d74, 0x0d79, + 0x0d84, 0x0d91, 0x0d9b, 0x0d9f, 0x0dab, 0x0db1, 0x0db5, 0x0dbc, + 0x0dc3, 0x0dc9, 0x0dd2, 0x0dd7, 0x0de6, 0x0dec, 0x0df2, 0x0e01, + // Entry 1C0 - 1FF + 0x0e05, 0x0e14, 0x0e1c, 0x0e24, 0x0e29, 0x0e2e, 0x0e33, 0x0e40, + 0x0e4a, 0x0e51, 0x0e59, 0x0e63, 0x0e6b, 0x0e72, 0x0e88, 0x0e9f, + 0x0eab, 0x0eb8, 0x0ec8, 0x0ecf, 0x0ed9, 0x0ee1, 0x0eeb, 0x0ef3, + 0x0f04, 0x0f0d, 0x0f30, 0x0f3c, 0x0f43, 0x0f4e, 0x0f56, 0x0f5d, + 0x0f62, 0x0f69, 0x0f71, 0x0f76, 0x0f7d, 0x0f87, 0x0f8a, 0x0f93, + 0x0f98, 0x0faa, 0x0fb1, 0x0fb6, 0x0fbd, 0x0fc7, 0x0fce, 0x0fd3, + 0x0fdc, 0x0fe1, 0x0ff0, 0x0ffd, 0x1004, 0x1008, 0x100c, 0x1012, + 0x1021, 0x1032, 0x103d, 0x1046, 0x104a, 0x1059, 0x105f, 0x106d, + // Entry 200 - 23F + 0x1077, 0x1083, 0x108c, 0x1096, 0x10a0, 0x10a7, 0x10af, 0x10bb, + 0x10c0, 0x10c4, 0x10d8, 0x10de, 0x10e2, 0x10e9, 0x10f2, 0x1102, + 0x1109, 0x1112, 0x1116, 0x111b, 0x111f, 0x1125, 0x112a, 0x112f, + 0x1132, 0x1139, 0x1140, 0x1147, 0x114e, 0x1156, 0x115e, 0x1169, + 0x1172, 0x1178, 0x117e, 0x1186, 0x118f, 0x119d, 0x11a4, 0x11aa, + 0x11b1, 0x11ba, 0x11d5, 0x11db, 0x11e5, 0x11ec, 0x11f0, 0x11f3, + 0x11fc, 0x1202, 0x1215, 0x1229, 0x1230, 0x1234, 0x1239, 0x123f, + 0x1247, 0x124c, 0x1251, 0x1259, 0x1261, 0x1268, 0x1273, 0x1277, + // Entry 240 - 27F + 0x127a, 0x1280, 0x1287, 0x128c, 0x1295, 0x129e, 0x12a6, 0x12b6, + 0x12c0, 0x12c6, 0x12e6, 0x12ea, 0x1308, 0x130c, 0x1324, 0x1324, + 0x1337, 0x134b, 0x1360, 0x1372, 0x138a, 0x13a4, 0x13c1, 0x13d2, + 0x13e5, 0x13e5, 0x13f8, 0x1409, 0x1414, 0x141c, 0x1431, 0x1444, + 0x144b, 0x1457, 0x146a, 0x147c, 0x148d, + }, + }, + { // az + azLangStr, + azLangIdx, + }, + { // az-Cyrl + "афарабхазафрикаансаканамһарарагонәрәбассамаварајмараазәрбајҹанбашгырдбел" + + "арусбулгарбисламабамбарабенгалтибетбретонбосниаккаталанчеченчаморок" + + "орсикачехславјанчувашуелсданимаркаалманмалдивдзонгаевејунанинҝилисе" + + "сперантоиспанестонбаскфарсфулафинфиҹифарерфрансызгәрби фризирландшо" + + "тланд келтгалисијагуаранигуҹаратманксһаусаивритһиндхорватһаити крео" + + "лмаҹарермәниһерероинтерлингвеиндонезијаигбоидоисландиталјанинуктиту" + + "тјапонјаваҝүрҹүкикујукуанјамагазахкалааллисуткхмерканнадакорејакану" + + "рикәшмиркүрдкомикорнгырғызлатынлүксембурггандалимбурглингалалаослит" + + "валуба-катангалатышмалагасмаршалмаоримакедонмалајаламмонголмаратһим" + + "алајмалтабирманнаурушимали ндебеленепалндонгаһолланднүнорск норвечб" + + "окмал норвечҹәнуби ндебеленавајонјанҹаокситаноромоодијаосетинпәнҹаб" + + "полјакпуштупортугалкечуароманшрундирумынрускинјарвандасанскритсарди" + + "нсиндһишимали самисангосинһаласловаксловенсамоашонасомалиалбансербс" + + "ватисесотосунданисвечсуаһилитамилтелугутаҹиктајтигринтүркмәнсванато" + + "нгантүрксонгататартахитиујғурукрајнаурдуөзбәквендавјетнамволапүквал" + + "унволофхосаидишјорубачинзулуакинадангмеадуҝеагһемајнуалеутҹәнуби ал" + + "тајанҝикаарауканҹаарапаһоасуастуријаавадһибаллибасабембабенабхочпур" + + "ибинисиксикәбодобуҝинблинсебуанчигачукизмаричоктаучерокичејенсоранс" + + "ејшел креолудакотадаргватаитадогрибзармаашағы сорбдуаладиоладазагае" + + "мбуефикекаҹукевондофилиппинфонфриулгагезгилбертгоронталоИсвечрә алм" + + "анҹасыгусигвичинһавајһилигајнонмонгјухары сорбһупаибанибибиоилокоин" + + "гушлоғбаннгомбамачамкабилекачинжукамбакабарда-чәркәзтвимакондекабув" + + "ердианкорохазикојра чииникакокаленҹинкимбундуконканикпеллегарачај-б" + + "алкаркарелкурухшамбалабафиакөлнкумыксефардланҝиләзҝилакоталозишимал" + + "и лурилуба-лулуалундалуомизолујиамадуризмагаһимаитилимакасармасајмо" + + "кшамендемеруморисиенмахува-мееттометаʼмикмакминангкабанманипүримоһа" + + "вкмосимундангчохсајлы дилләркрикмирандерзјамазандараннеаполитаннама" + + "невариниаснијуанквасионҝиембоонногајнгошимали сотонуернјанколпангас" + + "инанпампангапапјаментопалајанниҝер креолпрусскичерапануираротонганр" + + "омбоароманруасандавесахасамбурусанталнгамбајсангусиҹилијаскотссенак" + + "ојраборо сеннитачелитшанҹәнуби самилуле самиинари самисколт самисон" + + "инкесранан тонгосаһосукумакоморсуријатимнетесотетумтигреклингонток " + + "писинтарокотумбукатувалутасавагтувинјанМәркәзи Атлас тамазиҹәсиудму" + + "ртумбундурутваивунјоваллесваламоварајкалмыксогајангбенјембакантонта" + + "мазизунидил мәзмуну јохдурзазамүасир стандарт әрәбАвстрија алманҹас" + + "ыИсвечрә јүксәк алманҹасыАвстралија инҝилисҹәсиКанада инҝилисҹәсиБр" + + "итанија инҝилисҹәсиАмерика инҝилисҹәсиЛатын Америкасы испанҹасыКаст" + + "илија испанҹасыМексика испанҹасыКанада франсызҹасыИсвечрә франсызҹа" + + "сыашағы саксонфламандБразилија португалҹасыПортугалија португалҹасы" + + "Конго суаһилиҹәсисадәләшмиш чинәнәнәви чин", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0012, 0x0012, 0x0024, 0x002c, 0x0036, 0x0042, + 0x004a, 0x0054, 0x005c, 0x0068, 0x007c, 0x008a, 0x0098, 0x00a4, + 0x00b2, 0x00c0, 0x00cc, 0x00d6, 0x00e2, 0x00f0, 0x00fe, 0x0108, + 0x0114, 0x0122, 0x0122, 0x0128, 0x0136, 0x0140, 0x0148, 0x015a, + 0x0164, 0x0170, 0x017c, 0x0182, 0x018c, 0x019a, 0x01ac, 0x01b6, + 0x01c0, 0x01c8, 0x01d0, 0x01d8, 0x01de, 0x01e6, 0x01f0, 0x01fe, + 0x0211, 0x021d, 0x0234, 0x0244, 0x0252, 0x0260, 0x026a, 0x0274, + 0x027e, 0x0286, 0x0286, 0x0292, 0x02a7, 0x02b1, 0x02bd, 0x02c9, + // Entry 40 - 7F + 0x02df, 0x02f3, 0x02f3, 0x02fb, 0x02fb, 0x02fb, 0x0301, 0x030d, + 0x031b, 0x032d, 0x0337, 0x033f, 0x0349, 0x0349, 0x0355, 0x0365, + 0x036f, 0x0385, 0x038f, 0x039d, 0x03a9, 0x03b5, 0x03c1, 0x03c9, + 0x03d1, 0x03d9, 0x03e5, 0x03ef, 0x0403, 0x040d, 0x041b, 0x0429, + 0x0431, 0x043b, 0x0452, 0x045c, 0x046a, 0x0476, 0x0480, 0x048e, + 0x04a0, 0x04ac, 0x04ba, 0x04c4, 0x04ce, 0x04da, 0x04e4, 0x04ff, + 0x0509, 0x0515, 0x0523, 0x053e, 0x0557, 0x0572, 0x057e, 0x058a, + 0x0598, 0x0598, 0x05a2, 0x05ac, 0x05b8, 0x05c4, 0x05c4, 0x05d0, + // Entry 80 - BF + 0x05da, 0x05ea, 0x05f4, 0x0600, 0x060a, 0x0614, 0x061a, 0x0630, + 0x0640, 0x064c, 0x0658, 0x066d, 0x0677, 0x0685, 0x0691, 0x069d, + 0x06a7, 0x06af, 0x06bb, 0x06c5, 0x06cd, 0x06d7, 0x06e3, 0x06ef, + 0x06f9, 0x0707, 0x0711, 0x071d, 0x0727, 0x072d, 0x0739, 0x0747, + 0x0751, 0x075d, 0x0765, 0x076f, 0x0779, 0x0785, 0x078f, 0x079d, + 0x07a5, 0x07af, 0x07b9, 0x07c7, 0x07d5, 0x07df, 0x07e9, 0x07f1, + 0x07f9, 0x0805, 0x0805, 0x080b, 0x0813, 0x081b, 0x081b, 0x0829, + 0x0833, 0x0833, 0x0833, 0x083d, 0x0845, 0x0845, 0x0845, 0x084f, + // Entry C0 - FF + 0x084f, 0x0866, 0x0866, 0x0872, 0x0872, 0x0884, 0x0884, 0x0892, + 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x0898, 0x0898, 0x08a8, + 0x08a8, 0x08b4, 0x08b4, 0x08be, 0x08be, 0x08c6, 0x08c6, 0x08c6, + 0x08c6, 0x08c6, 0x08d0, 0x08d0, 0x08d8, 0x08d8, 0x08d8, 0x08d8, + 0x08e8, 0x08e8, 0x08f0, 0x08f0, 0x08f0, 0x08fe, 0x08fe, 0x08fe, + 0x08fe, 0x08fe, 0x0906, 0x0906, 0x0906, 0x0910, 0x0910, 0x0918, + 0x0918, 0x0918, 0x0918, 0x0918, 0x0918, 0x0924, 0x092c, 0x092c, + 0x092c, 0x0936, 0x093e, 0x093e, 0x094a, 0x094a, 0x0956, 0x0960, + // Entry 100 - 13F + 0x096a, 0x096a, 0x096a, 0x096a, 0x0983, 0x0983, 0x098f, 0x099b, + 0x09a5, 0x09a5, 0x09a5, 0x09b1, 0x09b1, 0x09bb, 0x09bb, 0x09ce, + 0x09ce, 0x09d8, 0x09d8, 0x09e2, 0x09e2, 0x09ee, 0x09f6, 0x09fe, + 0x09fe, 0x09fe, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a16, 0x0a16, + 0x0a16, 0x0a26, 0x0a26, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, + 0x0a2c, 0x0a2c, 0x0a36, 0x0a3a, 0x0a3a, 0x0a3a, 0x0a3a, 0x0a3a, + 0x0a3a, 0x0a40, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, + 0x0a60, 0x0a60, 0x0a60, 0x0a60, 0x0a81, 0x0a81, 0x0a81, 0x0a89, + // Entry 140 - 17F + 0x0a95, 0x0a95, 0x0a95, 0x0a9f, 0x0a9f, 0x0ab3, 0x0ab3, 0x0abb, + 0x0ad0, 0x0ad0, 0x0ad8, 0x0ae0, 0x0aec, 0x0af6, 0x0b00, 0x0b00, + 0x0b00, 0x0b0c, 0x0b18, 0x0b22, 0x0b22, 0x0b22, 0x0b22, 0x0b22, + 0x0b2e, 0x0b38, 0x0b3c, 0x0b46, 0x0b46, 0x0b61, 0x0b61, 0x0b67, + 0x0b75, 0x0b8b, 0x0b8b, 0x0b93, 0x0b93, 0x0b9b, 0x0b9b, 0x0bb0, + 0x0bb0, 0x0bb0, 0x0bb8, 0x0bc8, 0x0bd8, 0x0bd8, 0x0be6, 0x0be6, + 0x0bf2, 0x0c0d, 0x0c0d, 0x0c0d, 0x0c17, 0x0c21, 0x0c2f, 0x0c39, + 0x0c41, 0x0c4b, 0x0c4b, 0x0c57, 0x0c61, 0x0c61, 0x0c61, 0x0c6b, + // Entry 180 - 1BF + 0x0c6b, 0x0c6b, 0x0c6b, 0x0c77, 0x0c77, 0x0c77, 0x0c7f, 0x0c94, + 0x0c94, 0x0ca7, 0x0ca7, 0x0cb1, 0x0cb7, 0x0cbf, 0x0cc9, 0x0cc9, + 0x0cc9, 0x0cd7, 0x0cd7, 0x0ce3, 0x0cf1, 0x0cff, 0x0cff, 0x0d09, + 0x0d09, 0x0d13, 0x0d13, 0x0d1d, 0x0d25, 0x0d35, 0x0d35, 0x0d4e, + 0x0d58, 0x0d64, 0x0d7a, 0x0d7a, 0x0d8a, 0x0d96, 0x0d9e, 0x0d9e, + 0x0dac, 0x0dc9, 0x0dd1, 0x0ddd, 0x0ddd, 0x0ddd, 0x0ddd, 0x0de7, + 0x0dfb, 0x0dfb, 0x0e0f, 0x0e17, 0x0e17, 0x0e23, 0x0e2b, 0x0e37, + 0x0e37, 0x0e43, 0x0e55, 0x0e5f, 0x0e5f, 0x0e5f, 0x0e65, 0x0e7a, + // Entry 1C0 - 1FF + 0x0e82, 0x0e82, 0x0e82, 0x0e90, 0x0e90, 0x0e90, 0x0e90, 0x0e90, + 0x0ea4, 0x0ea4, 0x0eb4, 0x0ec8, 0x0ed6, 0x0ed6, 0x0eeb, 0x0eeb, + 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0ef5, + 0x0ef5, 0x0efd, 0x0efd, 0x0efd, 0x0f0b, 0x0f1f, 0x0f1f, 0x0f1f, + 0x0f29, 0x0f29, 0x0f29, 0x0f29, 0x0f29, 0x0f35, 0x0f3b, 0x0f49, + 0x0f51, 0x0f51, 0x0f5f, 0x0f5f, 0x0f6b, 0x0f6b, 0x0f79, 0x0f83, + 0x0f93, 0x0f9d, 0x0f9d, 0x0f9d, 0x0f9d, 0x0fa5, 0x0fa5, 0x0fa5, + 0x0fc2, 0x0fc2, 0x0fc2, 0x0fd0, 0x0fd6, 0x0fd6, 0x0fd6, 0x0fd6, + // Entry 200 - 23F + 0x0fd6, 0x0feb, 0x0ffc, 0x100f, 0x1022, 0x1030, 0x1030, 0x1047, + 0x1047, 0x104f, 0x104f, 0x105b, 0x105b, 0x105b, 0x1065, 0x1065, + 0x1071, 0x1071, 0x1071, 0x107b, 0x1083, 0x1083, 0x108d, 0x1097, + 0x1097, 0x1097, 0x1097, 0x10a5, 0x10a5, 0x10a5, 0x10a5, 0x10a5, + 0x10b6, 0x10b6, 0x10c2, 0x10c2, 0x10c2, 0x10c2, 0x10d0, 0x10dc, + 0x10ea, 0x10fa, 0x1128, 0x1134, 0x1134, 0x1142, 0x1148, 0x114e, + 0x114e, 0x114e, 0x114e, 0x114e, 0x114e, 0x114e, 0x1158, 0x1164, + 0x1170, 0x117a, 0x117a, 0x117a, 0x117a, 0x1186, 0x1186, 0x118e, + // Entry 240 - 27F + 0x118e, 0x118e, 0x119c, 0x11a6, 0x11a6, 0x11b2, 0x11b2, 0x11b2, + 0x11b2, 0x11b2, 0x11be, 0x11c6, 0x11e8, 0x11f0, 0x1216, 0x1216, + 0x1239, 0x1267, 0x1292, 0x12b5, 0x12de, 0x1303, 0x1333, 0x1358, + 0x1379, 0x1379, 0x139c, 0x13c1, 0x13d8, 0x13e6, 0x1411, 0x1440, + 0x1440, 0x1440, 0x1461, 0x147c, 0x1491, + }, + }, + { // bas + "Hɔp u akanHɔp u amhārìkHɔp u arâbHɔp u bièlòrûsHɔp u bûlgârHɔp u bɛŋgàli" + + "Hɔp u cɛ̂kHɔp u jamânHɔp u gri ᷇kyàHɔp u ŋgisìHɔp u panyāHɔp u pɛrsì" + + "àHɔp u pulàsiHɔp u ɓausaHɔp u hindìHɔp u hɔŋgrìiHɔp u indònesìàHɔp " + + "u iɓòHɔp u italìàHɔp u yapànHɔp u yavàHɔp u kmɛ̂rHɔp u kɔrēàHɔp u ma" + + "kɛ᷆Hɔp u birmànHɔp u nepa᷆lHɔp u nlɛ̀ndiHɔp u pɛnjàbiHɔp u pɔlɔ̄nàHɔ" + + "p u pɔtɔ̄kìHɔp u rùmanìàHɔp u ruslàndHɔp u ruāndàHɔp u somàlîHɔp u s" + + "uɛ᷆dHɔp u tamu᷆lHɔp u tâyHɔp u tûrkHɔp u ukrǎnìàHɔp u urdùHɔp u vyɛ̄" + + "dnàmHɔp u yorūbàHɔp u kinàHɔp u zulùƁàsàa", + []uint16{ // 214 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x001b, 0x001b, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0039, 0x0048, + 0x0048, 0x0048, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0085, 0x0093, 0x0093, 0x00a0, + 0x00a0, 0x00a0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00be, + 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00cb, + 0x00cb, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00e9, 0x00e9, 0x00e9, + // Entry 40 - 7F + 0x00e9, 0x00fc, 0x00fc, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, + 0x0117, 0x0117, 0x0124, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, + 0x0130, 0x0130, 0x013e, 0x013e, 0x014d, 0x014d, 0x014d, 0x014d, + 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, + 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, + 0x014d, 0x014d, 0x014d, 0x015c, 0x015c, 0x016a, 0x016a, 0x016a, + 0x0179, 0x0179, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, + 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0199, 0x0199, 0x01ab, + // Entry 80 - BF + 0x01ab, 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01ce, 0x01dd, 0x01ec, + 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, + 0x01ec, 0x01ec, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, + 0x020a, 0x020a, 0x0219, 0x0219, 0x0219, 0x0224, 0x0224, 0x0224, + 0x0224, 0x0224, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0241, + 0x024d, 0x024d, 0x024d, 0x025f, 0x025f, 0x025f, 0x025f, 0x025f, + 0x025f, 0x026e, 0x026e, 0x027a, 0x0286, 0x0286, 0x0286, 0x0286, + 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, + // Entry C0 - FF + 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, + 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, + 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x028e, + }, + }, + { // be + "афарскаяабхазскаяафрыкаансаканамхарскаяарагонскаяарабскаяасамскаяаварска" + + "яаймараазербайджанскаябашкірскаябеларускаябалгарскаябісламабамбараб" + + "енгальскаятыбецкаябрэтонскаябаснійскаякаталанскаячачэнскаячаморакар" + + "сіканскаячэшскаяцаркоўнаславянскаячувашскаявалійскаядацкаянямецкаям" + + "альдыўскаядзонг-кээвегрэчаскаяанглійскаяэсперантаіспанскаяэстонская" + + "баскскаяфарсіфулафінскаяфіджыйскаяфарэрскаяфранцузскаязаходняя фрыз" + + "скаяірландскаяшатландская гэльскаягалісійскаягуаранігуджарацімэнска" + + "яхаусаіўрытхіндзіхарвацкаягаіцянская крэольскаявенгерскаяармянскаяг" + + "ерэраінтэрлінгваінданезійскаяінтэрлінгвэігбасычуаньская йіідаісланд" + + "скаяітальянскаяінуктытутяпонскаяяванскаягрузінскаякікуйюкуаньямаказ" + + "ахскаягрэнландскаякхмерскаяканадакарэйскаяканурыкашмірскаякурдскаяк" + + "омікорнскаякіргізскаялацінскаялюксембургскаягандалімбургскаялінгала" + + "лаоскаялітоўскаялуба-катангалатышскаямалагасійскаямаршальскаямаарым" + + "акедонскаямалаяламмангольскаямаратхімалайскаямальтыйскаябірманскаян" + + "аурупаўночная ндэбеленепальскаяндонганідэрландскаянарвежская (нюнош" + + "к)нарвежская (букмол)паўднёвая ндэбеленаваханьянджааксітанскаяаджыб" + + "вааромаорыяасецінскаяпанджабіпольскаяпуштупартугальскаякечуарэтарам" + + "анскаярундзірумынскаярускаяруандасанскрытсардзінскаясіндхіпаўночнас" + + "аамскаясангасінгальскаяславацкаяславенскаясамоашонасамаліалбанскаяс" + + "ербскаясуаціпаўднёвая сотасундашведскаясуахілітамільскаятэлугутаджы" + + "кскаятайскаятыгрыньятуркменскаятсванатанганскаятурэцкаятсонгататарс" + + "каятаіціуйгурскаяукраінскаяурдуузбекскаявендав’етнамскаявалапюквало" + + "нскаявалофкосаідышёрубакітайскаязулуачэхадангмэадыгейскаяагемайнска" + + "яакадскаяалеуцкаяпаўднёваалтайскаястараанглійскаяангікаарамейскаяма" + + "пудунгунарапахаасуастурыйскаяавадхібалійскаябасаабембабеназаходняя " + + "белуджскаябхаджпурыэдаблэкфутбодабурацкаябугісбіленсебуаначыгачыбча" + + "чуукмарычоктачэрокішэйенцэнтральнакурдскаякопцкаясэсэльвадакотадарг" + + "інскаятаітадогрыбзарманіжнялужыцкаядуаладжола-фоньідазагаэмбуэфікст" + + "аражытнаегіпецкаяэкаджукэвондафіліпінскаяфонстарафранцузскаяфрыульс" + + "каягагагаузскаягеэзкірыбацігаранталастаражытнагрэчаскаяшвейцарская " + + "нямецкаягусіігуіч’інгавайскаяхілігайнонхмонгверхнялужыцкаяхупаібані" + + "бібіяілаканаінгушскаяложбаннгомбамачамбэкабільскаякачынскаядджукамб" + + "акабардзінскаят’япмакондэкабувердыянукоракхасікойра чыінікакокаленд" + + "жынкімбундукомі-пярмяцкаяканканікпелекарачай-балкарскаякарэльскаяку" + + "рухшамбалабафіякёльнскаякумыцкаяладыналангілезгінскаялакотамонгалоз" + + "іпаўночная лурылуба-касаілундалуомізолуйямадурскаямагахімайтхілімак" + + "асармандынгмаасаймакшанскаямендэмерумарысьенмакуўа-меетаметамікмакм" + + "інангкабаумейтэймохакмосімундангнекалькі моўмускогімірандыйскаяэрзя" + + "нскаямазандэранскаянеапалітанскаянаманіжненямецкаянеўарыніасніўэнгу" + + "мбанг’ембоннагайскаястаранарвежскаянкопаўночная сотануэрньянколепан" + + "гасінанпампангапап’яментупалаунігерыйскі піджынстараперсідскаяфінік" + + "ійскаяпрускаястараправансальскаякічэраджастханскаярапануіраратонгро" + + "мбаарумунскаяруасандаўэякуцкаясамбурусанталінгамбайсангусіцылійская" + + "шатландскаяпаўднёвакурдскаясенакайрабора сэністараірландскаяташэльх" + + "ітшанпаўднёвасаамскаялуле-саамскаяінары-саамскаяколта-саамскаясанін" + + "кесранан-тонгасахасукумашумерскаякаморскаясірыйскаятэмнэтэсотэтумты" + + "грэклінганток-пісінтарокатумбукатувалутасаўактувінскаяцэнтральнаатл" + + "аская тамазіхтудмурцкаяумбундукораньваівунджовальшскаяволайтаварайв" + + "арлпірыкалмыцкаясогаянгбэнйембакантонскі дыялект кітайскайсапатэкст" + + "андартная мараканская тамазіхтзуніняма моўнага матэрыялузазакісучас" + + "ная стандартная арабскаяаўстрыйская нямецкаяшвейцарская стандартная" + + " нямецкаяаўстралійская англійскаяканадская англійскаябрытанская англ" + + "ійскаяамерыканская англійскаялацінаамерыканская іспанскаяеўрапейска" + + "я іспанскаямексіканская іспанскаяканадская французскаяшвейцарская ф" + + "ранцузскаяніжнесаксонскаяфламандскаябразільская партугальскаяеўрапе" + + "йская партугальскаямалдаўская румынскаясербскахарвацкаякангалезская" + + " суахіліспрошчаная кітайскаятрадыцыйная кітайская", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0022, 0x0022, 0x0034, 0x003c, 0x004e, 0x0062, + 0x0072, 0x0082, 0x0092, 0x009e, 0x00bc, 0x00d0, 0x00e4, 0x00f8, + 0x0106, 0x0114, 0x012a, 0x013a, 0x014e, 0x0162, 0x0178, 0x018a, + 0x0196, 0x01ae, 0x01ae, 0x01bc, 0x01e0, 0x01f2, 0x0204, 0x0210, + 0x0220, 0x0236, 0x0245, 0x024b, 0x025d, 0x0271, 0x0283, 0x0295, + 0x02a7, 0x02b7, 0x02c1, 0x02c9, 0x02d7, 0x02eb, 0x02fd, 0x0313, + 0x0334, 0x0348, 0x036f, 0x0385, 0x0393, 0x03a5, 0x03b3, 0x03bd, + 0x03c7, 0x03d3, 0x03d3, 0x03e5, 0x040e, 0x0422, 0x0434, 0x0440, + // Entry 40 - 7F + 0x0456, 0x0470, 0x0486, 0x048e, 0x04a9, 0x04a9, 0x04af, 0x04c3, + 0x04d9, 0x04eb, 0x04fb, 0x050b, 0x051f, 0x051f, 0x052b, 0x053b, + 0x054d, 0x0565, 0x0577, 0x0583, 0x0595, 0x05a1, 0x05b5, 0x05c5, + 0x05cd, 0x05dd, 0x05f1, 0x0603, 0x061f, 0x0629, 0x063f, 0x064d, + 0x065b, 0x066d, 0x0684, 0x0696, 0x06b0, 0x06c6, 0x06d0, 0x06e6, + 0x06f6, 0x070c, 0x071a, 0x072c, 0x0742, 0x0756, 0x0760, 0x0781, + 0x0795, 0x07a1, 0x07bb, 0x07de, 0x0801, 0x0822, 0x082e, 0x083c, + 0x0852, 0x0860, 0x086a, 0x0872, 0x0886, 0x0896, 0x0896, 0x08a6, + // Entry 80 - BF + 0x08b0, 0x08ca, 0x08d4, 0x08ee, 0x08fa, 0x090c, 0x0918, 0x0924, + 0x0934, 0x094a, 0x0956, 0x0976, 0x0980, 0x0996, 0x09a8, 0x09bc, + 0x09c6, 0x09ce, 0x09da, 0x09ec, 0x09fc, 0x0a06, 0x0a21, 0x0a2b, + 0x0a3b, 0x0a49, 0x0a5d, 0x0a69, 0x0a7d, 0x0a8b, 0x0a9b, 0x0ab1, + 0x0abd, 0x0ad1, 0x0ae1, 0x0aed, 0x0aff, 0x0b09, 0x0b1b, 0x0b2f, + 0x0b37, 0x0b49, 0x0b53, 0x0b6a, 0x0b78, 0x0b8a, 0x0b94, 0x0b9c, + 0x0ba4, 0x0bae, 0x0bae, 0x0bc0, 0x0bc8, 0x0bd0, 0x0bd0, 0x0bde, + 0x0bf2, 0x0bf2, 0x0bf2, 0x0bfa, 0x0c08, 0x0c18, 0x0c18, 0x0c28, + // Entry C0 - FF + 0x0c28, 0x0c4a, 0x0c68, 0x0c74, 0x0c88, 0x0c9c, 0x0c9c, 0x0caa, + 0x0caa, 0x0caa, 0x0caa, 0x0caa, 0x0caa, 0x0cb0, 0x0cb0, 0x0cc6, + 0x0cc6, 0x0cd2, 0x0cd2, 0x0ce4, 0x0ce4, 0x0cee, 0x0cee, 0x0cee, + 0x0cee, 0x0cee, 0x0cf8, 0x0cf8, 0x0d00, 0x0d00, 0x0d00, 0x0d25, + 0x0d37, 0x0d37, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d4b, 0x0d4b, 0x0d4b, + 0x0d4b, 0x0d4b, 0x0d53, 0x0d53, 0x0d63, 0x0d6d, 0x0d6d, 0x0d77, + 0x0d77, 0x0d77, 0x0d77, 0x0d77, 0x0d77, 0x0d85, 0x0d8d, 0x0d97, + 0x0d97, 0x0d9f, 0x0da7, 0x0da7, 0x0db1, 0x0db1, 0x0dbd, 0x0dc7, + // Entry 100 - 13F + 0x0deb, 0x0df9, 0x0df9, 0x0df9, 0x0e09, 0x0e09, 0x0e15, 0x0e29, + 0x0e33, 0x0e33, 0x0e33, 0x0e3f, 0x0e3f, 0x0e49, 0x0e49, 0x0e63, + 0x0e63, 0x0e6d, 0x0e6d, 0x0e82, 0x0e82, 0x0e8e, 0x0e96, 0x0e9e, + 0x0e9e, 0x0ec4, 0x0ed2, 0x0ed2, 0x0ed2, 0x0ed2, 0x0ede, 0x0ede, + 0x0ede, 0x0ef4, 0x0ef4, 0x0efa, 0x0efa, 0x0efa, 0x0f1a, 0x0f1a, + 0x0f1a, 0x0f1a, 0x0f2e, 0x0f32, 0x0f46, 0x0f46, 0x0f46, 0x0f46, + 0x0f46, 0x0f4e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, + 0x0f70, 0x0f70, 0x0f70, 0x0f96, 0x0fbd, 0x0fbd, 0x0fbd, 0x0fc7, + // Entry 140 - 17F + 0x0fd6, 0x0fd6, 0x0fd6, 0x0fe8, 0x0fe8, 0x0ffc, 0x0ffc, 0x1006, + 0x1022, 0x1022, 0x102a, 0x1032, 0x103e, 0x104c, 0x105e, 0x105e, + 0x105e, 0x106a, 0x1076, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, + 0x1098, 0x10aa, 0x10b2, 0x10bc, 0x10bc, 0x10d6, 0x10d6, 0x10df, + 0x10ed, 0x1105, 0x1105, 0x110d, 0x110d, 0x1117, 0x1117, 0x112c, + 0x112c, 0x112c, 0x1134, 0x1146, 0x1156, 0x1171, 0x117f, 0x117f, + 0x1189, 0x11ac, 0x11ac, 0x11ac, 0x11c0, 0x11ca, 0x11d8, 0x11e2, + 0x11f4, 0x1204, 0x1204, 0x1210, 0x121a, 0x121a, 0x121a, 0x122e, + // Entry 180 - 1BF + 0x122e, 0x122e, 0x122e, 0x123a, 0x123a, 0x1244, 0x124c, 0x1267, + 0x1267, 0x127a, 0x127a, 0x1284, 0x128a, 0x1292, 0x129a, 0x129a, + 0x129a, 0x12ac, 0x12ac, 0x12b8, 0x12c8, 0x12d6, 0x12e4, 0x12f0, + 0x12f0, 0x1304, 0x1304, 0x130e, 0x1316, 0x1326, 0x1326, 0x133d, + 0x1345, 0x1351, 0x1367, 0x1367, 0x1373, 0x137d, 0x1385, 0x1385, + 0x1393, 0x13aa, 0x13b8, 0x13d0, 0x13d0, 0x13d0, 0x13d0, 0x13e2, + 0x13fe, 0x13fe, 0x141a, 0x1422, 0x143c, 0x1448, 0x1450, 0x1458, + 0x1458, 0x1464, 0x1475, 0x1487, 0x14a5, 0x14a5, 0x14ab, 0x14c6, + // Entry 1C0 - 1FF + 0x14ce, 0x14ce, 0x14ce, 0x14de, 0x14de, 0x14de, 0x14de, 0x14de, + 0x14f2, 0x14f2, 0x1502, 0x1517, 0x1521, 0x1521, 0x1542, 0x1542, + 0x1542, 0x1560, 0x1560, 0x1576, 0x1576, 0x1576, 0x1576, 0x1584, + 0x15aa, 0x15b2, 0x15b2, 0x15ce, 0x15dc, 0x15ec, 0x15ec, 0x15ec, + 0x15f6, 0x15f6, 0x15f6, 0x15f6, 0x15f6, 0x160a, 0x1610, 0x161e, + 0x162c, 0x162c, 0x163a, 0x163a, 0x1648, 0x1648, 0x1656, 0x1660, + 0x1676, 0x168c, 0x168c, 0x16ac, 0x16ac, 0x16b4, 0x16b4, 0x16b4, + 0x16cf, 0x16ed, 0x16ed, 0x16ff, 0x1705, 0x1705, 0x1705, 0x1705, + // Entry 200 - 23F + 0x1705, 0x1725, 0x173e, 0x1759, 0x1774, 0x1782, 0x1782, 0x1799, + 0x1799, 0x17a1, 0x17a1, 0x17ad, 0x17ad, 0x17bf, 0x17d1, 0x17d1, + 0x17e3, 0x17e3, 0x17e3, 0x17ed, 0x17f5, 0x17f5, 0x17ff, 0x1809, + 0x1809, 0x1809, 0x1809, 0x1817, 0x1817, 0x1817, 0x1817, 0x1817, + 0x1828, 0x1828, 0x1834, 0x1834, 0x1834, 0x1834, 0x1842, 0x184e, + 0x185c, 0x186e, 0x18a3, 0x18b5, 0x18b5, 0x18c3, 0x18cf, 0x18d5, + 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18e1, 0x18f3, + 0x1901, 0x190b, 0x190b, 0x191b, 0x191b, 0x192d, 0x192d, 0x1935, + // Entry 240 - 27F + 0x1935, 0x1935, 0x1941, 0x194b, 0x194b, 0x197f, 0x198d, 0x198d, + 0x198d, 0x198d, 0x19cb, 0x19d3, 0x19fd, 0x1a09, 0x1a41, 0x1a41, + 0x1a68, 0x1aa6, 0x1ad5, 0x1afc, 0x1b25, 0x1b52, 0x1b89, 0x1bb2, + 0x1bdd, 0x1bdd, 0x1c06, 0x1c33, 0x1c51, 0x1c67, 0x1c98, 0x1cc9, + 0x1cf0, 0x1d10, 0x1d37, 0x1d5e, 0x1d87, + }, + }, + { // bem + "Ichi AkanIchi AmhariIchi ArabIchi BelarusIchi BulgarianiIchi BengaliIchi" + + " ChekiIchi JemaniIchi GrikiIchi SunguIchi SpanishiIchi PesiaIchi Fre" + + "nchiIchi HausaIchi HinduIchi HangarianIchi IndonesianiIchi IboIchi I" + + "talianiIchi JapanisiIchi JavanisiIchi KhmerIchi KorianiIchi Maleshan" + + "iIchi BurmaIchi NepaliIchi DachiIchi PunjabiIchi PolishiIchi Potogis" + + "iIchi RomanianiIchi RusianiIchi RwandaIchi SomaliaIchi SwideniIchi T" + + "amilIchi ThaiIchi TakishiIchi UkranianiIchi UruduIchi VietinamuIchi " + + "YorubaIchi ChainisiIchi ZuluIchibemba", + []uint16{ // 219 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0014, 0x0014, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x0029, 0x0038, + 0x0038, 0x0038, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0063, 0x006d, 0x006d, 0x007a, + 0x007a, 0x007a, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x009a, + 0x009a, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00b2, 0x00b2, 0x00b2, + // Entry 40 - 7F + 0x00b2, 0x00c2, 0x00c2, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00d7, 0x00d7, 0x00e4, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, + 0x00f1, 0x00f1, 0x00fb, 0x00fb, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0115, 0x0115, 0x011f, 0x011f, 0x011f, + 0x012a, 0x012a, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0140, 0x0140, 0x014c, + // Entry 80 - BF + 0x014c, 0x0159, 0x0159, 0x0159, 0x0159, 0x0167, 0x0173, 0x017e, + 0x017e, 0x017e, 0x017e, 0x017e, 0x017e, 0x017e, 0x017e, 0x017e, + 0x017e, 0x017e, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, + 0x0196, 0x0196, 0x01a0, 0x01a0, 0x01a0, 0x01a9, 0x01a9, 0x01a9, + 0x01a9, 0x01a9, 0x01b5, 0x01b5, 0x01b5, 0x01b5, 0x01b5, 0x01c3, + 0x01cd, 0x01cd, 0x01cd, 0x01db, 0x01db, 0x01db, 0x01db, 0x01db, + 0x01db, 0x01e6, 0x01e6, 0x01f3, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + // Entry C0 - FF + 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + 0x01fc, 0x01fc, 0x0205, + }, + }, + { // bez + "HiakanHiamhariHiharabuHibelarusiHibulgariaHibanglaHichekiHijerumaniHigir" + + "ikiHiingerezaHihispaniaHiajemiHifaransaHihausaHihindiHihungariHiindo" + + "nesiaHiiboHiitalianoHijapaniHijavaHikambodiaHikoreaHimalesiaHiburmaH" + + "inepaliHiholanziHipunjabiHipolandiHilenoHilomaniaHilusiHinyarwandaHi" + + "somaliHiswidiHitamilHitailandHitulukiHiukraniaHiurduHivietinamuHiyor" + + "ubaHichinaHizuluHibena", + []uint16{ // 221 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0020, 0x002a, + 0x002a, 0x002a, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x0055, 0x0055, 0x005f, + 0x005f, 0x005f, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x0076, + 0x0076, 0x007d, 0x007d, 0x007d, 0x007d, 0x0086, 0x0086, 0x0086, + // Entry 40 - 7F + 0x0086, 0x0091, 0x0091, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x00a0, 0x00a0, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00b8, 0x00b8, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00c8, 0x00c8, 0x00cf, 0x00cf, 0x00cf, + 0x00d7, 0x00d7, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e9, 0x00e9, 0x00f2, + // Entry 80 - BF + 0x00f2, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0101, 0x0107, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x0121, 0x0121, 0x0128, 0x0128, 0x0128, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0131, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0142, + 0x0148, 0x0148, 0x0148, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, + 0x0153, 0x015b, 0x015b, 0x0162, 0x0168, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + // Entry C0 - FF + 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0168, 0x0168, 0x0168, 0x016e, + }, + }, + { // bg + bgLangStr, + bgLangIdx, + }, + { // bm + "akankanamarikikanlarabukanbiyelorisikanbuligarikanbamanakanbɛngalikancɛk" + + "ikanalimaɲikangɛrɛsikanangilɛkanesipaɲolkanperisanikantubabukanawusa" + + "kaninidikanoŋirikanƐndonezikanigibokanitalikanzapɔnekanjavanekankamb" + + "ojikankorekanmalɛzikanbirimanikannepalekanolandekanpɛnijabikanpolone" + + "kanpɔritigalikanrumanikanirisikanruwandakansomalikansuwɛdikantamulik" + + "antayikanturikikanukɛrɛnikanurudukanwiyɛtinamukanyorubakansiniwakanz" + + "ulukan", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0011, 0x0011, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x0027, 0x0032, + 0x0032, 0x003b, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0064, 0x006e, 0x006e, 0x007a, + 0x007a, 0x007a, 0x0085, 0x0085, 0x0085, 0x0085, 0x0085, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x0096, + 0x0096, 0x009e, 0x009e, 0x009e, 0x009e, 0x00a7, 0x00a7, 0x00a7, + // Entry 40 - 7F + 0x00a7, 0x00b3, 0x00b3, 0x00bb, 0x00bb, 0x00bb, 0x00bb, 0x00bb, + 0x00c3, 0x00c3, 0x00cd, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, + 0x00d6, 0x00d6, 0x00e0, 0x00e0, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00f1, 0x00f1, 0x00fc, 0x00fc, 0x00fc, + 0x0105, 0x0105, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, + 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x011a, 0x011a, 0x0123, + // Entry 80 - BF + 0x0123, 0x0131, 0x0131, 0x0131, 0x0131, 0x013a, 0x0142, 0x014c, + 0x014c, 0x014c, 0x014c, 0x014c, 0x014c, 0x014c, 0x014c, 0x014c, + 0x014c, 0x014c, 0x0155, 0x0155, 0x0155, 0x0155, 0x0155, 0x0155, + 0x015f, 0x015f, 0x0168, 0x0168, 0x0168, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0184, + 0x018c, 0x018c, 0x018c, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, + 0x019a, 0x01a3, 0x01a3, 0x01ac, 0x01b3, + }, + }, + { // bn + bnLangStr, + bnLangIdx, + }, + { // bn-IN + "কোলোনিয়ান", + []uint16{ // 377 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 140 - 17F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x001e, + }, + }, + { // bo + "བོད་སྐད་རྫོང་ཁདབྱིན་ཇིའི་སྐད།ཧིན་དིཉི་ཧོང་སྐད་ནེ་པ་ལིཨུ་རུ་སུ་སྐད་རྒྱ་སྐ" + + "ད་ཟ་ཟའ་སྐད།དབྱིན་ཇིའི་སྐད། (ཁེ་ན་ཌ་)དབྱིན་ཇིའི་སྐད། (དབྱིན་ལན་)དབྱ" + + "ིན་ཇིའི་སྐད། (ཨ་རི་)", + []uint16{ // 598 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x002a, 0x002a, 0x002a, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + // Entry 40 - 7F + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, + 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, + // Entry 80 - BF + 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + // Entry C0 - FF + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + // Entry 100 - 13F + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + // Entry 140 - 17F + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + // Entry 180 - 1BF + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + // Entry 1C0 - 1FF + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + // Entry 200 - 23F + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + // Entry 240 - 27F + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00f9, 0x00f9, 0x00f9, + 0x00f9, 0x00f9, 0x00f9, 0x013e, 0x0189, 0x01c8, + }, + }, + {}, // bo-IN + { // br + "afarabkhazegavestegafrikaansakanamharegaragonegarabegasamegavaraymaraaze" + + "rbaidjanegbachkirbelarusegbulgaregbislamabambarabengalitibetanegbrez" + + "honegbosnegkatalanegtchetchenegchamorrukorsegkritchekegslavoneg iliz" + + "tchouvatchkembraegdanegalamanegdivehidzongkhaewegresianegsaoznegespe" + + "rantegspagnolegestonegeuskaregpersegfinnegfidjiegfaeroeggallegfrizeg" + + " ar Cʼhornôgiwerzhonegskoseggalizegguaranigujaratimanaveghaousahebra" + + "eghindihiri motukroateghaitieghungaregarmenianeghererointerlinguaind" + + "onezeginterlingueigboyieg Sichuaninupiaqidoislandegitalianeginuktitu" + + "tjapanegjavanegjorjianegkongokikuyukwanyamakazakkhmerkanaregkoreaneg" + + "kanourikashmirikurdegkerneveuregkirgizlatinluksembourgeggandalimbour" + + "geglingalalaoseglituanegluba-katangalatviegmalgachegmarshallmaorimak" + + "edonegmalayalammongolegmarathimalaysegmaltegbirmanegnauruegndebele a" + + "n Norzhnepalegndonganederlandegnorvegeg nynorsknorvegeg bokmålndebel" + + "e ar Sunavacʼhonyanjaokitanegojibwaoriyaosetegpunjabipalipolonegpach" + + "toportugalegkechuaegromañchegrundiroumanegrusianegkinyarwandasanskri" + + "tegsardegsindhisámi an Norzhsangosinghalegslovakegslovenegsamoanshon" + + "asomalialbanegserbegswatisotho ar Susundanegsvedegswahilitamilegtelo" + + "ugoutadjikthaitigrignaturkmenegtswanatongaturkegtsongatatartahitiane" + + "gouigouregukrainegourdououzbekegvendavietnamegvolapükwallonegwolofxh" + + "osayiddishyoroubazhuangsinaegzoulouegachinegacoliadangmeadygeiegarab" + + "eg Tuniziaafrihiliaghemainouegakadegalabamaegaleouteggegegaltaieg ar" + + " Suhensaoznegangikaarameegaraoukanegaraonaarapahoarabeg Aljeriaarawa" + + "kegarabeg Marokoarabeg Egiptasuyezh sinoù Amerikaasturianegawadhibal" + + "outchibalinegbavariegbasaabedawiegbembabenabaloutchi ar Cʼhornôgbhoj" + + "puribikolbinibrajbrahwegbodoakoosebouriatbugiblincaddokaribegatsamce" + + "buanochibchamariegchoktawchipewyancherokeecheyennekurdeg soranikopte" + + "gturkeg Krimeakachoubegdakotadargwadelawaredogribdinkadogriizelsorab" + + "egnederlandeg krenndyulaembuefikhenegiptegekajukelamegkrennsaoznegew" + + "ondofangfilipinegfinneg traoñienn an Tornefongalleg cajunkrenncʼhall" + + "eghencʼhallegarpitanegfrizeg an Norzhfrizeg ar Reterfrioulaneggagaga" + + "ouzegsinaeg Gangayogbayagezeggilbertegkrennalamaneg uhelhenalamaneg " + + "uhelgorontalogoteggrebohencʼhresianegalamaneg Suishaidasinaeg Hakkah" + + "awaieghiligaynonhmonguhelsorabegsinaeg Xianhupaibanibibioingouchegkr" + + "eoleg Jamaikayuzev-persegyuzev-arabegkarakalpakkabilegkachinkambakab" + + "ardegkabuverdianukhasikhotanegkimbundukonkanikosraekpellekaratchay-b" + + "alkarkareliegkurukhkolunegkutenailadinolahndalambalezgilingua franca" + + " novaliguriegmongoloziluba-lulualuisenolundaluolushailuyiasinaeg len" + + "negelmagahimaithilimasaimokshamandarmendemorisegkrenniwerzhonegmanch" + + "oumanipurimohawkmarieg ar Cʼhornôgyezhoù liesmuskogimirandegerzasina" + + "eg Min Nannapolitanegalamaneg izelnewariniasniueaoegnogayhennorsegno" + + "vialsotho an Norzhnewari klaselnyamwezinyankolenyoroosageturkeg otom" + + "anpangasinanpahlavipampangapapiamentopalaupikardegalamaneg Pennsylva" + + "niahenbersegfenikianegpiemontegpontegpohnpeihenbruseghenbrovañsegkic" + + "huaeg Chimborazorajasthanirapanuirarotongaromagnolegromboromaniegaro" + + "umanegrwasandaweyakoutegarameeg ar Samaritanedsasaksantalisikiliegsk" + + "otegsasaresegheniwerzhonegtachelitegshanarabeg Tchadsidamosámi ar Su" + + "sámi Luleåsámi Inarisámi Skoltsoninkesogdiegserersumeregkomoregsirie" + + "g klaselsiriegsileziegtoulouegterenotetumtigreanegtivtokelauklingont" + + "inglittamachegnyasa tongatok pisinturoyoegtsimshiantumbukatuvalutouv" + + "atamazigteg Kreizatlasoudmourtegougaritegumbunduyezh dianavvaivenezi" + + "egvepsegflandrezeg ar c’hornôgvotyakegvoroegwalserwalamowaraywashosi" + + "naeg WukalmoukmegrelegyaoyapegkantonegzapotegBlisszelandegzenagatama" + + "cheg Maroko standartzunidiyezharabeg modernalamaneg Aostriaalamaneg " + + "uhel Suissaozneg Aostraliasaozneg Kanadasaozneg Breizh-Veursaozneg A" + + "merikaspagnoleg Amerika latinspagnoleg Europaspagnoleg Mecʼhikogalle" + + "g Kanadagalleg Suissaksoneg izelflandrezegportugaleg Brazilportugale" + + "g Europamoldovegserb-kroategswahili Kongosinaeg eeunaetsinaeg hengou" + + "nel", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000c, 0x0013, 0x001c, 0x0020, 0x0027, 0x002f, + 0x0035, 0x003b, 0x003f, 0x0045, 0x0052, 0x0059, 0x0062, 0x006a, + 0x0071, 0x0078, 0x007f, 0x0088, 0x0091, 0x0097, 0x00a0, 0x00ab, + 0x00b3, 0x00b9, 0x00bc, 0x00c3, 0x00d0, 0x00da, 0x00e2, 0x00e7, + 0x00ef, 0x00f5, 0x00fd, 0x0100, 0x0109, 0x0110, 0x011a, 0x0123, + 0x012a, 0x0132, 0x0138, 0x0138, 0x013e, 0x0145, 0x014c, 0x0152, + 0x0166, 0x0170, 0x0176, 0x017d, 0x0184, 0x018c, 0x0193, 0x0199, + 0x01a0, 0x01a5, 0x01ae, 0x01b5, 0x01bc, 0x01c4, 0x01ce, 0x01d4, + // Entry 40 - 7F + 0x01df, 0x01e8, 0x01f3, 0x01f7, 0x0203, 0x020a, 0x020d, 0x0215, + 0x021e, 0x0227, 0x022e, 0x0235, 0x023e, 0x0243, 0x0249, 0x0251, + 0x0256, 0x0256, 0x025b, 0x0262, 0x026a, 0x0271, 0x0279, 0x027f, + 0x027f, 0x028a, 0x0290, 0x0295, 0x02a2, 0x02a7, 0x02b1, 0x02b8, + 0x02be, 0x02c6, 0x02d2, 0x02d9, 0x02e2, 0x02ea, 0x02ef, 0x02f8, + 0x0301, 0x0309, 0x0310, 0x0318, 0x031e, 0x0326, 0x032d, 0x033d, + 0x0344, 0x034a, 0x0355, 0x0365, 0x0375, 0x0382, 0x038b, 0x0391, + 0x0399, 0x039f, 0x039f, 0x03a4, 0x03aa, 0x03b1, 0x03b5, 0x03bc, + // Entry 80 - BF + 0x03c2, 0x03cc, 0x03d4, 0x03de, 0x03e3, 0x03eb, 0x03f3, 0x03fe, + 0x0408, 0x040e, 0x0414, 0x0422, 0x0427, 0x0430, 0x0438, 0x0440, + 0x0446, 0x044b, 0x0451, 0x0458, 0x045e, 0x0463, 0x046e, 0x0476, + 0x047c, 0x0483, 0x048a, 0x0492, 0x0498, 0x049c, 0x04a4, 0x04ad, + 0x04b3, 0x04b8, 0x04be, 0x04c4, 0x04c9, 0x04d3, 0x04dc, 0x04e4, + 0x04ea, 0x04f2, 0x04f7, 0x0500, 0x0508, 0x0510, 0x0515, 0x051a, + 0x0521, 0x0528, 0x052e, 0x0534, 0x053c, 0x0543, 0x0548, 0x054f, + 0x0557, 0x0565, 0x056d, 0x0572, 0x0579, 0x057f, 0x0588, 0x0590, + // Entry C0 - FF + 0x0595, 0x05a2, 0x05ac, 0x05b2, 0x05b9, 0x05c3, 0x05c9, 0x05d0, + 0x05de, 0x05de, 0x05e6, 0x05f3, 0x05ff, 0x0602, 0x0615, 0x061f, + 0x061f, 0x0625, 0x062e, 0x0635, 0x063d, 0x0642, 0x0642, 0x0642, + 0x0642, 0x064a, 0x064f, 0x064f, 0x0653, 0x0653, 0x0653, 0x066a, + 0x0672, 0x0677, 0x067b, 0x067b, 0x067b, 0x067b, 0x067b, 0x067b, + 0x067f, 0x0686, 0x068a, 0x0690, 0x0697, 0x069b, 0x069b, 0x069f, + 0x069f, 0x06a4, 0x06ab, 0x06ab, 0x06b0, 0x06b7, 0x06b7, 0x06be, + 0x06be, 0x06be, 0x06c4, 0x06c4, 0x06cb, 0x06d4, 0x06dc, 0x06e4, + // Entry 100 - 13F + 0x06f1, 0x06f7, 0x06f7, 0x0704, 0x0704, 0x070d, 0x0713, 0x0719, + 0x0719, 0x0721, 0x0721, 0x0727, 0x072c, 0x072c, 0x0731, 0x073c, + 0x073c, 0x073c, 0x074d, 0x074d, 0x0752, 0x0752, 0x0756, 0x075a, + 0x075a, 0x0764, 0x076a, 0x0770, 0x077c, 0x077c, 0x0782, 0x0782, + 0x0786, 0x078f, 0x07a9, 0x07ac, 0x07b8, 0x07c6, 0x07d2, 0x07db, + 0x07ea, 0x07f9, 0x0803, 0x0805, 0x080e, 0x0818, 0x081c, 0x0821, + 0x0821, 0x0826, 0x082f, 0x082f, 0x0841, 0x0851, 0x0851, 0x0851, + 0x085a, 0x085f, 0x0864, 0x0873, 0x0880, 0x0880, 0x0880, 0x0880, + // Entry 140 - 17F + 0x0880, 0x0885, 0x0891, 0x0898, 0x0898, 0x08a2, 0x08a2, 0x08a7, + 0x08b2, 0x08bd, 0x08c1, 0x08c5, 0x08cb, 0x08cb, 0x08d4, 0x08d4, + 0x08e3, 0x08e3, 0x08e3, 0x08e3, 0x08ef, 0x08fb, 0x08fb, 0x0905, + 0x090c, 0x0912, 0x0912, 0x0917, 0x0917, 0x091f, 0x091f, 0x091f, + 0x091f, 0x092b, 0x092b, 0x092b, 0x092b, 0x0930, 0x0938, 0x0938, + 0x0938, 0x0938, 0x0938, 0x0938, 0x0940, 0x0940, 0x0947, 0x094d, + 0x0953, 0x0963, 0x0963, 0x0963, 0x096b, 0x0971, 0x0971, 0x0971, + 0x0978, 0x0978, 0x097f, 0x0985, 0x0985, 0x098b, 0x0990, 0x0995, + // Entry 180 - 1BF + 0x09a7, 0x09af, 0x09af, 0x09af, 0x09af, 0x09b4, 0x09b8, 0x09b8, + 0x09b8, 0x09c2, 0x09c9, 0x09ce, 0x09d1, 0x09d7, 0x09dc, 0x09eb, + 0x09eb, 0x09eb, 0x09eb, 0x09f1, 0x09f9, 0x09f9, 0x09f9, 0x09fe, + 0x09fe, 0x0a04, 0x0a0a, 0x0a0f, 0x0a0f, 0x0a16, 0x0a25, 0x0a25, + 0x0a25, 0x0a25, 0x0a25, 0x0a2c, 0x0a34, 0x0a3a, 0x0a3a, 0x0a4e, + 0x0a4e, 0x0a5a, 0x0a61, 0x0a69, 0x0a69, 0x0a69, 0x0a69, 0x0a6d, + 0x0a6d, 0x0a7b, 0x0a86, 0x0a86, 0x0a93, 0x0a99, 0x0a9d, 0x0aa1, + 0x0aa5, 0x0aa5, 0x0aa5, 0x0aaa, 0x0ab3, 0x0ab9, 0x0ab9, 0x0ac7, + // Entry 1C0 - 1FF + 0x0ac7, 0x0ad4, 0x0adc, 0x0ae4, 0x0ae9, 0x0ae9, 0x0aee, 0x0afb, + 0x0b05, 0x0b0c, 0x0b14, 0x0b1e, 0x0b23, 0x0b2b, 0x0b2b, 0x0b40, + 0x0b40, 0x0b49, 0x0b49, 0x0b53, 0x0b5c, 0x0b62, 0x0b69, 0x0b72, + 0x0b7f, 0x0b7f, 0x0b92, 0x0b9c, 0x0ba3, 0x0bac, 0x0bb6, 0x0bb6, + 0x0bbb, 0x0bc3, 0x0bc3, 0x0bc3, 0x0bc3, 0x0bcc, 0x0bcf, 0x0bd6, + 0x0bde, 0x0bf4, 0x0bf4, 0x0bf9, 0x0c00, 0x0c00, 0x0c00, 0x0c00, + 0x0c08, 0x0c0e, 0x0c17, 0x0c17, 0x0c17, 0x0c17, 0x0c17, 0x0c17, + 0x0c17, 0x0c24, 0x0c24, 0x0c2e, 0x0c32, 0x0c3e, 0x0c44, 0x0c44, + // Entry 200 - 23F + 0x0c44, 0x0c4f, 0x0c5b, 0x0c66, 0x0c71, 0x0c78, 0x0c7f, 0x0c7f, + 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0c8b, 0x0c92, 0x0c9f, + 0x0ca5, 0x0cad, 0x0cb5, 0x0cb5, 0x0cb5, 0x0cbb, 0x0cc0, 0x0cc9, + 0x0ccc, 0x0cd3, 0x0cd3, 0x0cda, 0x0ce1, 0x0ce1, 0x0ce9, 0x0cf4, + 0x0cfd, 0x0d05, 0x0d05, 0x0d05, 0x0d0e, 0x0d0e, 0x0d15, 0x0d1b, + 0x0d1b, 0x0d20, 0x0d35, 0x0d3f, 0x0d48, 0x0d4f, 0x0d5a, 0x0d5d, + 0x0d65, 0x0d6b, 0x0d84, 0x0d84, 0x0d8c, 0x0d92, 0x0d92, 0x0d98, + 0x0d9e, 0x0da3, 0x0da8, 0x0da8, 0x0db1, 0x0db8, 0x0dc0, 0x0dc0, + // Entry 240 - 27F + 0x0dc3, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dd0, 0x0dd7, 0x0ddc, + 0x0de4, 0x0dea, 0x0e02, 0x0e06, 0x0e0c, 0x0e0c, 0x0e19, 0x0e19, + 0x0e29, 0x0e3b, 0x0e4c, 0x0e5a, 0x0e6d, 0x0e7c, 0x0e93, 0x0ea3, + 0x0eb6, 0x0eb6, 0x0ec3, 0x0ece, 0x0edb, 0x0ee5, 0x0ef6, 0x0f07, + 0x0f0f, 0x0f1b, 0x0f28, 0x0f36, 0x0f46, + }, + }, + { // brx + "अब्खाज़ियन्अवस्तन्अफ्रीकीअकनअम्हारिक्आर्गोनीअरबीअसामीअवारिक्आयमाराअज़रबै" + + "जानीबशख़िर्बैलोरूसियन्बल्गैरियन्बिस्लामाबांबाराबंगलातिब्बतीब्रटोंब" + + "ोस्नियाईकातालान्चेचेन्चामोरोकोर्सीकन्क्रीचेक्चर्च स्लाविक्चुवाश्वै" + + "ल्श्डैनीश्ज़र्मनदीवेहीभुटानीएवेग्रीकअंग्रेज़ीएस्पेरान्तोस्पैनिशऐस्" + + "टोनियन्बास्क्फार्सीफुलाह्फिनिश्फ़ीजीफिरोज़ीफ्रांसीसीपश्चीमी फ्रीज़" + + "ियन्आईरिशस्कॉट्स् गैलिक्गैलिशियन्गुआरानीगुजरातीमैंक्सहउसाहिब्रुहिं" + + "दीहीरी मोटुक्रोएशन्हाईशीयन्हंगैरीयन्अरमेनियन्हेरेरोईन्टरलिंग्वाइन्" + + "डोनेशियन्ईन्टरलिंग्वेईग्बोसीचुआन् यीइनुपियाक़्ईडोआईस्लैंडिक्ईटालिय" + + "न्इनूक्टीटूत्जापानीजावानीसजॉर्जियन्कॉंगोकिकुयुकुआनयामाक़ज़ाख़्कलाल" + + "ीसुतख्मेरकन्नड्कोरीयन्कनुरीकश्मिरीकुर्दीकोमीकौर्नवॉलीकिरग़ीज़्लैटी" + + "न्लुक्समबुर्गीगांडालींबुर्गीलिंगालालाओसीयन्लिथुआनियन्लुबा कटांगाला" + + "टवियन् (लैट्टीश)मालागासीमार्शलीमाओरीमैसेडोनियन्मलयालममोंगोलियनमराठ" + + "ीमलायमालटीज़्बर्मीनाऊरूउत्तर न्दबेलेनेपालीन्डोंगाडच्नॉर्वेजियन् नी" + + "नॉर्स्क्नोर्वेगी बोकमालदक्षिणी न्दबेलेनावाहोन्यानजाओक्सीतानओहीबवाओ" + + "रोमो (अफ़ान)उड़ियाओस्सेटीपंजाबीपालीपोलिशपख़्तुपुर्तगालीक्वेचुआरेह्" + + "टो-रोमान्सकिरून्दीरूमानीयन्रुसीकिन्यारुआण्डासंस्कृत्सार्दीनीसिंधीउ" + + "त्तरी सामीसांग्रोसींहालास्लोवाक्स्लोवेनियन्सामोअनशोनासोमालीआल्बेनि" + + "यन्सर्बियन्स्वाटिसुन्दानीस्वीडिशस्वाहिलीतमिळतेलुगुताजिक्थाईतिग्रीन" + + "्यातुर्कमेनत्स्वानाटॉंगातुर्कीसोंगाटाटर्टाहिटिउईग़ुरयूक्रेनियन्ऊर्" + + "दुउज़बेक्वेंडावियेतनामीवोलापोकवालुनवोलोफख़ोसायीद्दीशयोरूबाज़ुआंगची" + + "नीज़ुलूअचेहनीअकोलीअडांगमेअडीगेअफ्रीहीलीऐनूअकाडिनीअलुटपुरानी अंग्रे" + + "ज़ीअंगीकाअरामाईकअरापाहोअरावाकअवधीबलूचीबालिनीबास्क़्बेजाबेंबाभोजपुर" + + "ीबिकोल्बिनीसीकसीकाब्रजबड़ोबुरियातबुगीनीब्लीनकाद्दौकारीब्आत्समचेबुआ" + + "नोचीबचाचगताईचुकेसेमारीचीनूक् जार्गन्चौक्टोचिपेवियान्चीरोकीशायान्कॉ" + + "प्टीक्तुर्की क्रिमियाकाशुबियान्डकौटादर्गवादलावार्स्लेव्डोगरीब्डींग" + + "काडोगरीसोर्बियन्डुआलामध्य डचद्युआलाएफीक्प्राचीन मिस्रीएकाजुकएलामीम" + + "ध्य अंग्रेज़ीएवौंडोफाँग्फिलिपिनोफोनमध्य फ्रांसीसीपुरानी फ्रांसीसीउ" + + "त्तरी फ्रीज़ियन्पूर्वी फ्रीज़ियन्फ्रीउलीअन्गागायोग्बायागीज़्गीलबर्" + + "टीमध्य उच्चस्तरी जर्मनपुरानी उच्चस्तरी जर्मनगाँडीगोरंटालोगॉथिकग्रे" + + "बोप्राचीन यूनानीस्वीस जर्मनग्वीचलीनहईडाहवाईअनहीलीगैनोनहीत्तीह्मौंग" + + "ऊपरी सौर्बियनहूपाईबान्ईलोकोईंगुषलोजबानयहुदी फ़ारसीयहुदी अरबीकारा क" + + "लपककाबील्कचीन्जुकंबाकावीकबार्डी भाषात्याप्कोरोख़ासीख़ोतानीकींबुंडु" + + "कोंकणीकोस्राईयन्क्पेलेकराचय् बलकार्करेलियन्कुरुख़्कुमीक्कुतेनाईलाड" + + "़ीनोलाह्डांलांबालेज़गीयानमोंगोलोज़ीलुबा लुलुआलुईसेनोलुंडालुओलुशाईम" + + "ादुरीमघीमैथीलीमक्सरमांडींगोमसाईमोक्षामंदारमेंदेमध्य आईरीश भाषामीकम" + + "ाकमिनंगकाबाउमांचुमणीपुरीमोहोकमोस्सीक्रीकमीरांडीमारवाड़ीऐर्ज़ियानेआ" + + "पोलिटननीजी स्तरिय जर्मननेवारीनियासनियुइआननोगाईपुरानी नॉर्स्न्गकोपु" + + "रानी नेवारीन्यामवेज़ीन्यानकोलेन्यौरोन्ज़ीमाओसेजतुर्की ओटोमानपांगास" + + "ीननपहलवीपंपंगापापीआमेन्तोपालाऊपुरानी फ़ारसीफीनीसीपोहनपीपुरानी प्रो" + + "वाँसालराजस्थानीरापानुईरारोटोंगारुमानीआरोमानीसंडावेयकुट्समारीती आरा" + + "माईक़सासकसंतालीसीसीलीअनस्कॉटसेलकुपपुरानी आईरीशशानसीदामोपश्चीमी साम" + + "ीलुले सामीईनारी सामीस्कोल्ट् सामीसोनिंगकेसोगडीयनस्रनान् टॉंगोसेरेर" + + "सुकुमासुसुसुमेरिअनपारंपरीक सिरिआकसिरिआकतीमनेतेरेनोतेतुमटीग्रेटीव्ट" + + "ोकेलौक्लींगदनट्लिंगीततमाशेकन्यासा टॉंगातोक पिसीनत्सीमशीआन्टुँबुकाट" + + "ुवालुटुवीउड़मुर्तउगारितीउंबुंडुरुटवाईवोटीकवालामोवारयवाशोकालमीकयाओय" + + "ापीज़ज़ापोतेकब्लीस चिन्हज़ेनागाज़ुनीरिक्तज़ाज़ाजर्मन (ऑस्ट्रिया)उच" + + "्च स्तरिय स्वीस जर्मनअंग्रेज़ी (ऑस्ट्रेलिया का)अंग्रेज़ी (कनाडाई)अ" + + "ंग्रेजी (ब्रिटिश)अंग्रेज़ी (अमरिकी)लैटिन अमरिकी स्पैनिशईवेरियाई स्" + + "पैनिशफ्रांसीसी (कनाडाई)फ्रांसीसी (स्वीस)फ्लेमीमोल्डेवियन्सर्बो-क्र" + + "ोएशन्चीनी (सरलीकृत)चीनी (पारम्परिक)", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0021, 0x0036, 0x004b, 0x0054, 0x006f, 0x0084, + 0x0090, 0x009f, 0x00b4, 0x00c6, 0x00e4, 0x00f9, 0x011a, 0x0138, + 0x0150, 0x0165, 0x0174, 0x0189, 0x019b, 0x01b6, 0x01ce, 0x01e0, + 0x01f2, 0x020d, 0x0219, 0x0225, 0x024a, 0x025c, 0x026e, 0x0280, + 0x0292, 0x02a4, 0x02b6, 0x02bf, 0x02ce, 0x02e9, 0x030a, 0x031f, + 0x033d, 0x034f, 0x0361, 0x0373, 0x0385, 0x0394, 0x03a9, 0x03c4, + 0x03f8, 0x0407, 0x0432, 0x044d, 0x0462, 0x0477, 0x0489, 0x0495, + 0x04a7, 0x04b6, 0x04cf, 0x04e7, 0x04ff, 0x051a, 0x0535, 0x0547, + // Entry 40 - 7F + 0x056b, 0x058f, 0x05b3, 0x05c2, 0x05de, 0x05fc, 0x0605, 0x0626, + 0x063e, 0x065f, 0x0671, 0x0686, 0x06a1, 0x06b0, 0x06c2, 0x06da, + 0x06f2, 0x070a, 0x0719, 0x072b, 0x0740, 0x074f, 0x0764, 0x0776, + 0x0782, 0x079d, 0x07b8, 0x07ca, 0x07ee, 0x07fd, 0x0818, 0x082d, + 0x0845, 0x0863, 0x0882, 0x08b2, 0x08ca, 0x08df, 0x08ee, 0x090f, + 0x0921, 0x093c, 0x094b, 0x0957, 0x096f, 0x097e, 0x098d, 0x09b2, + 0x09c4, 0x09d9, 0x09e2, 0x0a22, 0x0a4d, 0x0a78, 0x0a8a, 0x0a9f, + 0x0ab7, 0x0ac9, 0x0aea, 0x0afc, 0x0b11, 0x0b23, 0x0b2f, 0x0b3e, + // Entry 80 - BF + 0x0b50, 0x0b6b, 0x0b80, 0x0ba8, 0x0bc0, 0x0bdb, 0x0be7, 0x0c0e, + 0x0c26, 0x0c3e, 0x0c4d, 0x0c6c, 0x0c81, 0x0c96, 0x0cae, 0x0ccf, + 0x0ce1, 0x0ced, 0x0cff, 0x0d1d, 0x0d35, 0x0d47, 0x0d47, 0x0d5f, + 0x0d74, 0x0d8c, 0x0d98, 0x0daa, 0x0dbc, 0x0dc5, 0x0de3, 0x0dfb, + 0x0e13, 0x0e22, 0x0e34, 0x0e43, 0x0e52, 0x0e64, 0x0e76, 0x0e97, + 0x0ea6, 0x0ebb, 0x0eca, 0x0ee5, 0x0efa, 0x0f09, 0x0f18, 0x0f27, + 0x0f3c, 0x0f4e, 0x0f60, 0x0f6c, 0x0f7b, 0x0f8d, 0x0f9c, 0x0fb1, + 0x0fc0, 0x0fc0, 0x0fdb, 0x0fdb, 0x0fe4, 0x0ff9, 0x0ff9, 0x1005, + // Entry C0 - FF + 0x1005, 0x1005, 0x1033, 0x1045, 0x105a, 0x105a, 0x105a, 0x106f, + 0x106f, 0x106f, 0x1081, 0x1081, 0x1081, 0x1081, 0x1081, 0x1081, + 0x1081, 0x108d, 0x109c, 0x10ae, 0x10ae, 0x10c3, 0x10c3, 0x10c3, + 0x10c3, 0x10cf, 0x10de, 0x10de, 0x10de, 0x10de, 0x10de, 0x10de, + 0x10f3, 0x1105, 0x1111, 0x1111, 0x1111, 0x1126, 0x1126, 0x1126, + 0x1132, 0x1132, 0x113e, 0x113e, 0x1153, 0x1165, 0x1165, 0x1174, + 0x1174, 0x1186, 0x1198, 0x1198, 0x11a7, 0x11bc, 0x11bc, 0x11cb, + 0x11da, 0x11ec, 0x11f8, 0x1220, 0x1232, 0x1250, 0x1262, 0x1274, + // Entry 100 - 13F + 0x1274, 0x128c, 0x128c, 0x12b7, 0x12b7, 0x12d5, 0x12e4, 0x12f6, + 0x12f6, 0x130b, 0x131d, 0x1332, 0x1344, 0x1344, 0x1353, 0x136e, + 0x136e, 0x137d, 0x1390, 0x1390, 0x13a5, 0x13a5, 0x13a5, 0x13b4, + 0x13b4, 0x13dc, 0x13ee, 0x13fd, 0x1425, 0x1425, 0x1437, 0x1437, + 0x1446, 0x145e, 0x145e, 0x1467, 0x1467, 0x148f, 0x14bd, 0x14bd, + 0x14ee, 0x151f, 0x153d, 0x1543, 0x1543, 0x1543, 0x154f, 0x1561, + 0x1561, 0x1570, 0x1588, 0x1588, 0x15c0, 0x15fe, 0x15fe, 0x160d, + 0x1625, 0x1634, 0x1646, 0x166e, 0x168d, 0x168d, 0x168d, 0x168d, + // Entry 140 - 17F + 0x16a5, 0x16b1, 0x16b1, 0x16c3, 0x16c3, 0x16de, 0x16f0, 0x1702, + 0x1727, 0x1727, 0x1733, 0x1742, 0x1742, 0x1751, 0x1760, 0x1760, + 0x1760, 0x1772, 0x1772, 0x1772, 0x1794, 0x17b0, 0x17b0, 0x17c9, + 0x17db, 0x17ea, 0x17f0, 0x17fc, 0x1808, 0x182a, 0x182a, 0x183c, + 0x183c, 0x183c, 0x183c, 0x1848, 0x1848, 0x1857, 0x186c, 0x186c, + 0x186c, 0x186c, 0x186c, 0x186c, 0x1884, 0x1884, 0x1896, 0x18b4, + 0x18c6, 0x18eb, 0x18eb, 0x18eb, 0x1903, 0x1918, 0x1918, 0x1918, + 0x1918, 0x192a, 0x193f, 0x1954, 0x1954, 0x1969, 0x1978, 0x1993, + // Entry 180 - 1BF + 0x1993, 0x1993, 0x1993, 0x1993, 0x1993, 0x19a2, 0x19b1, 0x19b1, + 0x19b1, 0x19cd, 0x19e2, 0x19f1, 0x19fa, 0x1a09, 0x1a09, 0x1a09, + 0x1a09, 0x1a1b, 0x1a1b, 0x1a24, 0x1a36, 0x1a45, 0x1a5d, 0x1a69, + 0x1a69, 0x1a7b, 0x1a8a, 0x1a99, 0x1a99, 0x1a99, 0x1ac2, 0x1ac2, + 0x1ac2, 0x1ad4, 0x1af2, 0x1b01, 0x1b16, 0x1b25, 0x1b37, 0x1b37, + 0x1b37, 0x1b37, 0x1b46, 0x1b5b, 0x1b73, 0x1b73, 0x1b73, 0x1b8b, + 0x1b8b, 0x1b8b, 0x1ba6, 0x1ba6, 0x1bd5, 0x1be7, 0x1bf6, 0x1c0b, + 0x1c0b, 0x1c0b, 0x1c0b, 0x1c1a, 0x1c3f, 0x1c3f, 0x1c4e, 0x1c4e, + // Entry 1C0 - 1FF + 0x1c4e, 0x1c73, 0x1c91, 0x1cac, 0x1cbe, 0x1cd3, 0x1cdf, 0x1d04, + 0x1d1f, 0x1d2e, 0x1d40, 0x1d61, 0x1d70, 0x1d70, 0x1d70, 0x1d70, + 0x1d70, 0x1d95, 0x1d95, 0x1da7, 0x1da7, 0x1da7, 0x1db9, 0x1db9, + 0x1dea, 0x1dea, 0x1dea, 0x1e05, 0x1e1a, 0x1e35, 0x1e35, 0x1e35, + 0x1e35, 0x1e47, 0x1e47, 0x1e47, 0x1e47, 0x1e5c, 0x1e5c, 0x1e6e, + 0x1e7d, 0x1eab, 0x1eab, 0x1eb7, 0x1ec9, 0x1ec9, 0x1ec9, 0x1ec9, + 0x1ee1, 0x1ef0, 0x1ef0, 0x1ef0, 0x1ef0, 0x1ef0, 0x1ef0, 0x1f02, + 0x1f02, 0x1f24, 0x1f24, 0x1f24, 0x1f2d, 0x1f2d, 0x1f3f, 0x1f3f, + // Entry 200 - 23F + 0x1f3f, 0x1f61, 0x1f7a, 0x1f96, 0x1fbb, 0x1fd3, 0x1fe8, 0x200d, + 0x201c, 0x201c, 0x201c, 0x202e, 0x203a, 0x2052, 0x2052, 0x207d, + 0x208f, 0x208f, 0x208f, 0x209e, 0x209e, 0x20b0, 0x20bf, 0x20d1, + 0x20dd, 0x20ef, 0x20ef, 0x2107, 0x211f, 0x211f, 0x2131, 0x2153, + 0x216c, 0x216c, 0x216c, 0x216c, 0x218a, 0x218a, 0x219f, 0x21b1, + 0x21b1, 0x21bd, 0x21bd, 0x21d5, 0x21ea, 0x21ff, 0x2208, 0x2211, + 0x2211, 0x2211, 0x2211, 0x2211, 0x2220, 0x2220, 0x2220, 0x2220, + 0x2232, 0x223e, 0x224a, 0x224a, 0x224a, 0x225c, 0x225c, 0x225c, + // Entry 240 - 27F + 0x2265, 0x2277, 0x2277, 0x2277, 0x2277, 0x2277, 0x228f, 0x22ae, + 0x22ae, 0x22c3, 0x22c3, 0x22d2, 0x22e1, 0x22f3, 0x22f3, 0x22f3, + 0x2320, 0x235f, 0x23a5, 0x23d5, 0x2405, 0x2435, 0x246d, 0x249b, + 0x249b, 0x249b, 0x24cb, 0x24f8, 0x24f8, 0x250a, 0x250a, 0x250a, + 0x252b, 0x2553, 0x2553, 0x2577, 0x25a1, + }, + }, + { // bs + "afarskiabhaskiavestanskiafrikansakanamharskiaragonskiarapskiasamskiavars" + + "kiajmaraazerbejdžanskibaškirskibjeloruskibugarskibislamabambarabenga" + + "lskitibetanskibretonskibosanskikatalonskičečenskičamorokorzikanskikr" + + "ičeškistaroslavenskičuvaškivelškidanskinjemačkidivehidžongaevegrčkie" + + "ngleskiesperantošpanskiestonskibaskijskiperzijskifulahfinskifidžijsk" + + "ifarskifrancuskizapadni frizijskiirskiškotski galskigalicijskigvaran" + + "igudžaratimankshausahebrejskihinduhiri motuhrvatskihaićanskimađarski" + + "armenskihererointerlingvaindonezijskiinterlingveigbosičuan jiinupiak" + + "idoislandskitalijanskiinuktitutjapanskijavanskigruzijskikongokikujuk" + + "uanjamakazačkikalalisutskikmerskikanadakorejskikanurikašmirskikurdsk" + + "ikomikornskikirgiškilatinskiluksemburškigandalimburškilingalalaoškil" + + "itvanskiluba-katangalatvijskimalagaškimaršalskimaorskimakedonskimala" + + "jalammongolskimaratimalajskimalteškiburmanskinaurusjeverni ndebelene" + + "palskindongaholandskinorveški (Nynorsk)norveški (Bokmal)južni ndebel" + + "enavahonjanjaoksitanskiojibvaoromoorijskiosetskipandžapskipalipoljsk" + + "ipaštuportugalskikečuareto-romanskirundirumunskiruskikinjarvandasans" + + "kritsardinijskisindisjeverni samisangosinhaleškislovačkislovenskisam" + + "oanskišonasomalskialbanskisrpskisvatijužni sotosundanskišvedskisvahi" + + "litamilskitelugutadžičkitajlandskitigrinjaturkmenskitsvanatonganskit" + + "urskitsongatatarskitahićanskiujgurskiukrajinskiurduuzbečkivendavijet" + + "namskivolapukvalunvolofhosajidišjorubanskizuangkineskizuluacehneskia" + + "koliadangmejskiadigejskiafrihiliaghemainuakadijskialeutskijužni alta" + + "istaroengleskiangikaaramejskimapuškiarapahoaravakasuasturijskiavadhi" + + "balučibalinezijskibasabamunskigomalabejabembabenabafutzapadni belučk" + + "ibojpuribikolbinikomsiksikabrajbodoakoskiburiatbugiškibulublinmedumb" + + "akadokaripskikajugaatsamcebuanočigačibčačagataičukeskimaričinukski ž" + + "argončoktavčipvijanskičirokičejenskicentralnokurdskikoptskikrimski t" + + "urskiseselva kreolski francuskikašubijanskidakotadargvataitadelavers" + + "lavedogribdinkazarmadogridonjolužičkosrpskidualasrednjovjekovni hola" + + "ndskijola-fonidiuladazagaembuefikstaroegipatskiekajukelamitskisrednj" + + "ovjekovni engleskievondofangfilipinofonsrednjovjekovni francuskistar" + + "ofrancuskisjeverni frizijskiistočnofrizijskifriulijskigagagauškigajo" + + "gbajastaroetiopskigilbertskisrednjovjekovni gornjonjemačkistaronjema" + + "čkigondigorontalogotskigrebostarogrčkinjemački (Švicarska)gusigviči" + + "nhaidahavajskihiligajnonhititehmonggornjolužičkosrpskihupaibanibibio" + + "ilokoingušetskilojbanngombamakamejudeo-perzijskijudeo-arapskikara-ka" + + "lpakkabilekačinkajukambakavikabardijskikanembutjapmakondezelenortski" + + "korokasikotanizijskikojra činikakokalenjinkimbundukomi-permskikonkan" + + "ikosrejskikpelekaračaj-balkarkriokarelijskikuruškišambalabafiakelnsk" + + "ikumikkutenailadinolangilandalambalezgijskilakotamongolozisjeverni l" + + "uriluba-lulualuisenolundaluomizoluhijamadureškimafamagahimaitilimaka" + + "sarmandingomasaimabamokšamandarmendemerumauricijski kreolskisrednjov" + + "jekovni irskimakuva-metometamikmakminangkabaumančumanipurimohavkmosi" + + "mundangviše jezikakriškimirandeškimarvarimjeneerzijamazanderanskinap" + + "olitanskinamadonjonjemačkinevariniasniueankvasiongiembonnogaistarono" + + "rdijskinkosjeverni sotonuerklasični nevarinjamvezinjankolenjoronzima" + + "osageosmanski turskipangasinskipahlavipampangapapiamentopalauanskini" + + "gerijski pidžinstaroperzijskifeničanskiponpejskipruskistaroprovansal" + + "skikičerajastanirapanuirarotonganromboromaniarumunskiruasandavejakut" + + "skisamaritanski aramejskisamburusasaksantalingambajsangusicilijanski" + + "škotskijužni kurdskisenekasenaselkupkojraboro senistaroirskitahelhi" + + "tšančadski arapskisidamojužni samilule samiinari samiskolt samisonin" + + "kesogdiensrananski tongoserersahosukumasususumerskikomorskiklasični " + + "sirijskisirijskitimnetesoterenotetumtigretivtokelauklingonskitlingit" + + "tamašeknjasa tongatok pisintarokotsimšiantumbukatuvalutasavaktuvinij" + + "skicentralnoatlaski tamazigtudmurtugaritskiumbundukorijenskivaivotsk" + + "ivunjovalservalamovarejvašovarlpirikalmiksogajaojapeškijangbenjembak" + + "antonskizapotečkiblis simbolizenagastandardni marokanski tamazigtzun" + + "ibez lingvističkog sadržajazazamoderni standardni arapskigornjonjema" + + "čki (Švicarska)donjosaksonskiflamanskimoldavskisrpskohrvatskikinesk" + + "i (pojednostavljeni)kineski (tradicionalni)", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0007, 0x000e, 0x0018, 0x0020, 0x0024, 0x002c, 0x0035, + 0x003c, 0x0043, 0x004a, 0x0050, 0x005f, 0x0069, 0x0073, 0x007b, + 0x0082, 0x0089, 0x0092, 0x009c, 0x00a5, 0x00ad, 0x00b7, 0x00c1, + 0x00c8, 0x00d3, 0x00d6, 0x00dd, 0x00eb, 0x00f4, 0x00fb, 0x0101, + 0x010a, 0x0110, 0x0117, 0x011a, 0x0120, 0x0128, 0x0131, 0x0139, + 0x0141, 0x014a, 0x0153, 0x0158, 0x015e, 0x0168, 0x016e, 0x0177, + 0x0188, 0x018d, 0x019c, 0x01a6, 0x01ad, 0x01b7, 0x01bc, 0x01c1, + 0x01ca, 0x01cf, 0x01d8, 0x01e0, 0x01ea, 0x01f3, 0x01fb, 0x0201, + // Entry 40 - 7F + 0x020c, 0x0218, 0x0223, 0x0227, 0x0231, 0x0238, 0x023b, 0x0244, + 0x024e, 0x0257, 0x025f, 0x0267, 0x0270, 0x0275, 0x027b, 0x0283, + 0x028b, 0x0297, 0x029e, 0x02a4, 0x02ac, 0x02b2, 0x02bc, 0x02c3, + 0x02c7, 0x02ce, 0x02d7, 0x02df, 0x02ec, 0x02f1, 0x02fb, 0x0302, + 0x0309, 0x0312, 0x031e, 0x0327, 0x0331, 0x033b, 0x0342, 0x034c, + 0x0355, 0x035e, 0x0364, 0x036c, 0x0375, 0x037e, 0x0383, 0x0393, + 0x039b, 0x03a1, 0x03aa, 0x03bd, 0x03cf, 0x03dd, 0x03e3, 0x03e9, + 0x03f3, 0x03f9, 0x03fe, 0x0405, 0x040c, 0x0417, 0x041b, 0x0422, + // Entry 80 - BF + 0x0428, 0x0433, 0x0439, 0x0446, 0x044b, 0x0453, 0x0458, 0x0463, + 0x046b, 0x0476, 0x047b, 0x0488, 0x048d, 0x0498, 0x04a1, 0x04aa, + 0x04b3, 0x04b8, 0x04c0, 0x04c8, 0x04ce, 0x04d3, 0x04de, 0x04e7, + 0x04ef, 0x04f6, 0x04fe, 0x0504, 0x050e, 0x0518, 0x0520, 0x052a, + 0x0530, 0x0539, 0x053f, 0x0545, 0x054d, 0x0558, 0x0560, 0x056a, + 0x056e, 0x0576, 0x057b, 0x0586, 0x058d, 0x0592, 0x0597, 0x059b, + 0x05a1, 0x05ab, 0x05b0, 0x05b7, 0x05bb, 0x05c4, 0x05c9, 0x05d4, + 0x05dd, 0x05dd, 0x05e5, 0x05ea, 0x05ee, 0x05f7, 0x05f7, 0x05ff, + // Entry C0 - FF + 0x05ff, 0x060b, 0x0618, 0x061e, 0x0627, 0x062f, 0x062f, 0x0636, + 0x0636, 0x0636, 0x063c, 0x063c, 0x063c, 0x063f, 0x063f, 0x0649, + 0x0649, 0x064f, 0x0656, 0x0662, 0x0662, 0x0666, 0x066e, 0x066e, + 0x0674, 0x0678, 0x067d, 0x067d, 0x0681, 0x0686, 0x0686, 0x0696, + 0x069d, 0x06a2, 0x06a6, 0x06a6, 0x06a9, 0x06b0, 0x06b0, 0x06b0, + 0x06b4, 0x06b4, 0x06b8, 0x06be, 0x06c4, 0x06cc, 0x06d0, 0x06d4, + 0x06db, 0x06df, 0x06e7, 0x06ed, 0x06f2, 0x06f9, 0x06fe, 0x0705, + 0x070d, 0x0715, 0x0719, 0x072a, 0x0731, 0x073d, 0x0744, 0x074d, + // Entry 100 - 13F + 0x075d, 0x0764, 0x0764, 0x0772, 0x078c, 0x0799, 0x079f, 0x07a5, + 0x07aa, 0x07b1, 0x07b6, 0x07bc, 0x07c1, 0x07c6, 0x07cb, 0x07df, + 0x07df, 0x07e4, 0x07fd, 0x0806, 0x080b, 0x0811, 0x0815, 0x0819, + 0x0819, 0x0827, 0x082d, 0x0836, 0x084e, 0x084e, 0x0854, 0x0854, + 0x0858, 0x0860, 0x0860, 0x0863, 0x0863, 0x087c, 0x088a, 0x088a, + 0x089c, 0x08ad, 0x08b7, 0x08b9, 0x08c2, 0x08c2, 0x08c6, 0x08cb, + 0x08cb, 0x08d8, 0x08e2, 0x08e2, 0x0901, 0x090f, 0x090f, 0x0914, + 0x091d, 0x0923, 0x0928, 0x0933, 0x0949, 0x0949, 0x0949, 0x094d, + // Entry 140 - 17F + 0x0954, 0x0959, 0x0959, 0x0961, 0x0961, 0x096b, 0x0971, 0x0976, + 0x098b, 0x098b, 0x098f, 0x0993, 0x0999, 0x099e, 0x09a9, 0x09a9, + 0x09a9, 0x09af, 0x09b5, 0x09bb, 0x09ca, 0x09d7, 0x09d7, 0x09e2, + 0x09e8, 0x09ee, 0x09f2, 0x09f7, 0x09fb, 0x0a06, 0x0a0d, 0x0a11, + 0x0a18, 0x0a23, 0x0a23, 0x0a27, 0x0a27, 0x0a2b, 0x0a37, 0x0a42, + 0x0a42, 0x0a42, 0x0a46, 0x0a4e, 0x0a56, 0x0a62, 0x0a69, 0x0a72, + 0x0a77, 0x0a86, 0x0a8a, 0x0a8a, 0x0a94, 0x0a9c, 0x0aa4, 0x0aa9, + 0x0ab0, 0x0ab5, 0x0abc, 0x0ac2, 0x0ac7, 0x0acc, 0x0ad1, 0x0ada, + // Entry 180 - 1BF + 0x0ada, 0x0ada, 0x0ada, 0x0ae0, 0x0ae0, 0x0ae5, 0x0ae9, 0x0af6, + 0x0af6, 0x0b00, 0x0b07, 0x0b0c, 0x0b0f, 0x0b13, 0x0b19, 0x0b19, + 0x0b19, 0x0b23, 0x0b27, 0x0b2d, 0x0b34, 0x0b3b, 0x0b43, 0x0b48, + 0x0b4c, 0x0b52, 0x0b58, 0x0b5d, 0x0b61, 0x0b75, 0x0b8a, 0x0b95, + 0x0b99, 0x0b9f, 0x0baa, 0x0bb0, 0x0bb8, 0x0bbe, 0x0bc2, 0x0bc2, + 0x0bc9, 0x0bd5, 0x0bdc, 0x0be7, 0x0bee, 0x0bee, 0x0bf3, 0x0bf9, + 0x0c06, 0x0c06, 0x0c12, 0x0c16, 0x0c24, 0x0c2a, 0x0c2e, 0x0c34, + 0x0c34, 0x0c3a, 0x0c42, 0x0c47, 0x0c55, 0x0c55, 0x0c58, 0x0c65, + // Entry 1C0 - 1FF + 0x0c69, 0x0c79, 0x0c81, 0x0c89, 0x0c8e, 0x0c93, 0x0c98, 0x0ca7, + 0x0cb2, 0x0cb9, 0x0cc1, 0x0ccb, 0x0cd5, 0x0cd5, 0x0ce7, 0x0ce7, + 0x0ce7, 0x0cf5, 0x0cf5, 0x0d00, 0x0d00, 0x0d00, 0x0d09, 0x0d0f, + 0x0d20, 0x0d25, 0x0d25, 0x0d2e, 0x0d35, 0x0d3f, 0x0d3f, 0x0d3f, + 0x0d44, 0x0d4a, 0x0d4a, 0x0d4a, 0x0d4a, 0x0d53, 0x0d56, 0x0d5d, + 0x0d65, 0x0d7b, 0x0d82, 0x0d87, 0x0d8e, 0x0d8e, 0x0d95, 0x0d9a, + 0x0da6, 0x0dae, 0x0dae, 0x0dbc, 0x0dc2, 0x0dc6, 0x0dc6, 0x0dcc, + 0x0dda, 0x0de4, 0x0de4, 0x0dec, 0x0df0, 0x0dff, 0x0e05, 0x0e05, + // Entry 200 - 23F + 0x0e05, 0x0e10, 0x0e19, 0x0e23, 0x0e2d, 0x0e34, 0x0e3b, 0x0e4a, + 0x0e4f, 0x0e53, 0x0e53, 0x0e59, 0x0e5d, 0x0e65, 0x0e6d, 0x0e7f, + 0x0e87, 0x0e87, 0x0e87, 0x0e8c, 0x0e90, 0x0e96, 0x0e9b, 0x0ea0, + 0x0ea3, 0x0eaa, 0x0eaa, 0x0eb4, 0x0ebb, 0x0ebb, 0x0ec3, 0x0ece, + 0x0ed7, 0x0ed7, 0x0edd, 0x0edd, 0x0ee6, 0x0ee6, 0x0eed, 0x0ef3, + 0x0efa, 0x0f04, 0x0f1d, 0x0f23, 0x0f2c, 0x0f33, 0x0f3d, 0x0f40, + 0x0f40, 0x0f40, 0x0f40, 0x0f40, 0x0f46, 0x0f46, 0x0f4b, 0x0f51, + 0x0f57, 0x0f5c, 0x0f61, 0x0f69, 0x0f69, 0x0f6f, 0x0f6f, 0x0f73, + // Entry 240 - 27F + 0x0f76, 0x0f7e, 0x0f85, 0x0f8a, 0x0f8a, 0x0f93, 0x0f9d, 0x0fa9, + 0x0fa9, 0x0faf, 0x0fcd, 0x0fd1, 0x0fed, 0x0ff1, 0x100b, 0x100b, + 0x100b, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, + 0x1027, 0x1027, 0x1027, 0x1027, 0x1035, 0x103e, 0x103e, 0x103e, + 0x1047, 0x1055, 0x1055, 0x106f, 0x1086, + }, + }, + { // bs-Cyrl + "афарскиабказијскиавестанскиафриканерскиаканамхарскиарагонежанскиарапскиа" + + "семијскиаварскиајмараазербејџанскибашкирбелорускибугарскибисламабам" + + "барабенгласкитибетанскибретонскибосанскикаталонскичеченскичаморокор" + + "зиканскикричешкистарословенскичувашкивелшкиданскинемачкидивехијскиџ" + + "онгаевегрчкиенглескиесперантошпанскиестонскибаскијскиперсијскифулах" + + "финскифиджијскифарскифранцускифризијскиирскишкотски галскигалскигва" + + "ранигуџаратиманксхаусахебрејскихиндихири мотухрватскихаитскимађарск" + + "ијерменскихерероинтерлингваиндонежанскимеђујезичкиигбосичуан јиунуп" + + "иакидоисландскииталијанскиинуктитутјапанскијаванскигрузијскиконгоки" + + "кујукуањамакозачкикалалисуткмерскиканадакорејскиканурикашмирскикурд" + + "скикомикорнишкикиргискилатинскилуксембуршкигандалимбургишлингалалао" + + "скилитванскилуба-катангалетонскималагасијскимаршалскимаорскимакедон" + + "скималајаламмонголскимаратималајскимелтешкибурманскинаурусеверни нд" + + "ебеленепалскиндонгахоландскинорвешки њорскнорвешки бокмалјужни ндеб" + + "еленавахоњањапровансалскиојибваоромооријскиосетскипанџабскипалипољс" + + "кипаштунскипортугалскиквенчарето-романскирундирумунскирускикинјаруа" + + "ндасанскритсардињаскисиндисеверни самисангосингалескисловачкисловен" + + "ачкисамоанскишонасомалскиалбанскисрпскисватисесотосунданскишведскис" + + "вахилитамилскителугутађиктајландскитигрињатуркменскитсванатонгатурс" + + "китсонгататарскитахићанскиујгурскиукрајинскиурдуузбечкивендавијетна" + + "мскиволапуквалунволофксхосајидишјорубажуангкинескизулуачинескиаколи" + + "адангмејскиадигејскиафрихилиаинуакадијскиаљутјужни алтаистароенглес" + + "киангикаармајскиароканијскиарапахоаравакастуријскиавадхибалучибалин" + + "езијскибасабејабембабојпурибиколбинисисикабрајбуриатбугинежанскибли" + + "нкадокарипскиатсамскицебуаночибчачагатаичукескимаричинукскичоктавск" + + "ичипвијанскичерокичејенскикоптскикримеански турскикашубијанскидакот" + + "адаргваделаверславскидогрибдинкадогриниски сорбијанскидуаласредњи х" + + "оландскиђулаефикскистароегипатскиекајукеламитскисредњи енглескиевон" + + "дофангтагалогфонсредњи францускистарофранцускисеверно-фризијскиисто" + + "чни фризијскифриулијскигагајогбајаџизгилбертшкисредњи високи немачк" + + "истаронемачкигондигоронталоготскигребостарогрчкишвајцарски немачкиг" + + "вич’инхаидахавајскихилигајнонхититехмонггорњи сорбијскихупаибанилок" + + "оингвишкилојбанјудео-персијскијудео-арапскикара-калпашкикабилекачин" + + "ђукамбакавикабардијскитјапкорокасикотанешкикимбундуконканикосреанск" + + "икпелекарачај-балкаркарелијскикурукхкумиккутенаиладиноландаламбалез" + + "гианмонголозилуба-лулуалуисенолундалуолушаимадурешкимагахимаитилима" + + "касармандингомасаимокшамандармендесредњи ирскимикмакминангкабауманч" + + "уманипуримахавскимосивише језикакришкимирандешкимарвариерзијанеапол" + + "итанскиниски немачкиневариниасниуеанногаистари норскин’косеверни со" + + "токласични неварињамвезињанколењоронзимаосагеотомански турскипангас" + + "инскипахлавипампангапапиаментопалауанскистароперсијскифеничанскипон" + + "пејскистаропровансалскирађастанирапануираротонганроманиароманијскис" + + "андавејакутсамаритански арамејскисасаксанталисицилијанскишкотскисел" + + "капстароирскишансидамојужни самилуле самиинари самисколтски језиксо" + + "нинкесоџијенскисранански тонгосерерсукумасусусумерскикоморскикласич" + + "ни сиријскисиријскитимнетеренотетумтигретивтокелауклингонскитлингит" + + "тамашекњаса тонгаток писинтсимшиантумбукатувалутувинијскиудмуртугар" + + "итскиумбундурутваивотскиваламоварајвашокалмикјаојапешкикантонскизап" + + "отечкиблисимболизенагазунибез лингвистичког садржајазазаАустријски " + + "немачкиШвајцарски високи немачкиАустралијски енглескиКанадски енгле" + + "скиБритански енглескиСАД енглескиЛатино-амерички шпанскиИберијски ш" + + "панскиКанадски францускиШвајцарски францускифламанскиБразилски порт" + + "угалскиИберијски португалскимолдавскисрпскохрватскикинески (поједно" + + "стављен)кинески (традиционални)", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x0022, 0x0036, 0x004e, 0x0056, 0x0066, 0x0080, + 0x008e, 0x00a0, 0x00ae, 0x00ba, 0x00d4, 0x00e0, 0x00f2, 0x0102, + 0x0110, 0x011e, 0x0130, 0x0144, 0x0156, 0x0166, 0x017a, 0x018a, + 0x0196, 0x01ac, 0x01b2, 0x01bc, 0x01d8, 0x01e6, 0x01f2, 0x01fe, + 0x020c, 0x0220, 0x022a, 0x0230, 0x023a, 0x024a, 0x025c, 0x026a, + 0x027a, 0x028c, 0x029e, 0x02a8, 0x02b4, 0x02c6, 0x02d2, 0x02e4, + 0x02f6, 0x0300, 0x031b, 0x0327, 0x0335, 0x0345, 0x034f, 0x0359, + 0x036b, 0x0375, 0x0386, 0x0396, 0x03a4, 0x03b4, 0x03c6, 0x03d2, + // Entry 40 - 7F + 0x03e8, 0x0400, 0x0416, 0x041e, 0x042f, 0x043d, 0x0443, 0x0455, + 0x046b, 0x047d, 0x048d, 0x049d, 0x04af, 0x04b9, 0x04c5, 0x04d3, + 0x04e1, 0x04f3, 0x0501, 0x050d, 0x051d, 0x0529, 0x053b, 0x0549, + 0x0551, 0x0561, 0x0571, 0x0581, 0x0599, 0x05a3, 0x05b5, 0x05c3, + 0x05cf, 0x05e1, 0x05f8, 0x0608, 0x0620, 0x0632, 0x0640, 0x0654, + 0x0666, 0x0678, 0x0684, 0x0694, 0x06a4, 0x06b6, 0x06c0, 0x06dd, + 0x06ed, 0x06f9, 0x070b, 0x0726, 0x0743, 0x075c, 0x0768, 0x0770, + 0x0788, 0x0794, 0x079e, 0x07ac, 0x07ba, 0x07cc, 0x07d4, 0x07e0, + // Entry 80 - BF + 0x07f2, 0x0808, 0x0814, 0x082d, 0x0837, 0x0847, 0x0851, 0x0867, + 0x0877, 0x088b, 0x0895, 0x08ac, 0x08b6, 0x08ca, 0x08da, 0x08ee, + 0x0900, 0x0908, 0x0918, 0x0928, 0x0934, 0x093e, 0x094a, 0x095c, + 0x096a, 0x0978, 0x0988, 0x0994, 0x099e, 0x09b2, 0x09c0, 0x09d4, + 0x09e0, 0x09ea, 0x09f6, 0x0a02, 0x0a12, 0x0a26, 0x0a36, 0x0a4a, + 0x0a52, 0x0a60, 0x0a6a, 0x0a80, 0x0a8e, 0x0a98, 0x0aa2, 0x0aae, + 0x0ab8, 0x0ac4, 0x0ace, 0x0adc, 0x0ae4, 0x0af4, 0x0afe, 0x0b14, + 0x0b26, 0x0b26, 0x0b36, 0x0b36, 0x0b3e, 0x0b50, 0x0b50, 0x0b58, + // Entry C0 - FF + 0x0b58, 0x0b6d, 0x0b87, 0x0b93, 0x0ba3, 0x0bb9, 0x0bb9, 0x0bc7, + 0x0bc7, 0x0bc7, 0x0bd3, 0x0bd3, 0x0bd3, 0x0bd3, 0x0bd3, 0x0be7, + 0x0be7, 0x0bf3, 0x0bff, 0x0c17, 0x0c17, 0x0c1f, 0x0c1f, 0x0c1f, + 0x0c1f, 0x0c27, 0x0c31, 0x0c31, 0x0c31, 0x0c31, 0x0c31, 0x0c31, + 0x0c3f, 0x0c49, 0x0c51, 0x0c51, 0x0c51, 0x0c5d, 0x0c5d, 0x0c5d, + 0x0c65, 0x0c65, 0x0c65, 0x0c65, 0x0c71, 0x0c89, 0x0c89, 0x0c91, + 0x0c91, 0x0c99, 0x0ca9, 0x0ca9, 0x0cb9, 0x0cc7, 0x0cc7, 0x0cd1, + 0x0cdf, 0x0ced, 0x0cf5, 0x0d05, 0x0d17, 0x0d2d, 0x0d39, 0x0d49, + // Entry 100 - 13F + 0x0d49, 0x0d57, 0x0d57, 0x0d78, 0x0d78, 0x0d90, 0x0d9c, 0x0da8, + 0x0da8, 0x0db6, 0x0dc4, 0x0dd0, 0x0dda, 0x0dda, 0x0de4, 0x0e05, + 0x0e05, 0x0e0f, 0x0e2e, 0x0e2e, 0x0e36, 0x0e36, 0x0e36, 0x0e44, + 0x0e44, 0x0e60, 0x0e6c, 0x0e7e, 0x0e9b, 0x0e9b, 0x0ea7, 0x0ea7, + 0x0eaf, 0x0ebd, 0x0ebd, 0x0ec3, 0x0ec3, 0x0ee2, 0x0efe, 0x0efe, + 0x0f1f, 0x0f40, 0x0f54, 0x0f58, 0x0f58, 0x0f58, 0x0f60, 0x0f6a, + 0x0f6a, 0x0f70, 0x0f84, 0x0f84, 0x0fac, 0x0fc4, 0x0fc4, 0x0fce, + 0x0fe0, 0x0fec, 0x0ff6, 0x100a, 0x102d, 0x102d, 0x102d, 0x102d, + // Entry 140 - 17F + 0x103c, 0x1046, 0x1046, 0x1056, 0x1056, 0x106a, 0x1076, 0x1080, + 0x109d, 0x109d, 0x10a5, 0x10ad, 0x10ad, 0x10b7, 0x10c7, 0x10c7, + 0x10c7, 0x10d3, 0x10d3, 0x10d3, 0x10f0, 0x1109, 0x1109, 0x1122, + 0x112e, 0x1138, 0x113c, 0x1146, 0x114e, 0x1164, 0x1164, 0x116c, + 0x116c, 0x116c, 0x116c, 0x1174, 0x1174, 0x117c, 0x118e, 0x118e, + 0x118e, 0x118e, 0x118e, 0x118e, 0x119e, 0x119e, 0x11ac, 0x11c0, + 0x11ca, 0x11e5, 0x11e5, 0x11e5, 0x11f9, 0x1205, 0x1205, 0x1205, + 0x1205, 0x120f, 0x121d, 0x1229, 0x1229, 0x1233, 0x123d, 0x124b, + // Entry 180 - 1BF + 0x124b, 0x124b, 0x124b, 0x124b, 0x124b, 0x1255, 0x125d, 0x125d, + 0x125d, 0x1270, 0x127e, 0x1288, 0x128e, 0x1298, 0x1298, 0x1298, + 0x1298, 0x12aa, 0x12aa, 0x12b6, 0x12c4, 0x12d2, 0x12e2, 0x12ec, + 0x12ec, 0x12f6, 0x1302, 0x130c, 0x130c, 0x130c, 0x1323, 0x1323, + 0x1323, 0x132f, 0x1345, 0x134f, 0x135f, 0x136f, 0x1377, 0x1377, + 0x1377, 0x138c, 0x1398, 0x13ac, 0x13ba, 0x13ba, 0x13ba, 0x13c6, + 0x13c6, 0x13c6, 0x13e0, 0x13e0, 0x13f9, 0x1405, 0x140d, 0x1419, + 0x1419, 0x1419, 0x1419, 0x1423, 0x143a, 0x143a, 0x1443, 0x145a, + // Entry 1C0 - 1FF + 0x145a, 0x1477, 0x1485, 0x1493, 0x149b, 0x14a5, 0x14af, 0x14ce, + 0x14e4, 0x14f2, 0x1502, 0x1516, 0x152a, 0x152a, 0x152a, 0x152a, + 0x152a, 0x1546, 0x1546, 0x155a, 0x155a, 0x155a, 0x156c, 0x156c, + 0x158e, 0x158e, 0x158e, 0x15a0, 0x15ae, 0x15c2, 0x15c2, 0x15c2, + 0x15c2, 0x15ce, 0x15ce, 0x15ce, 0x15ce, 0x15e4, 0x15e4, 0x15f2, + 0x15fc, 0x1627, 0x1627, 0x1631, 0x163f, 0x163f, 0x163f, 0x163f, + 0x1657, 0x1665, 0x1665, 0x1665, 0x1665, 0x1665, 0x1665, 0x1671, + 0x1671, 0x1685, 0x1685, 0x1685, 0x168b, 0x168b, 0x1697, 0x1697, + // Entry 200 - 23F + 0x1697, 0x16aa, 0x16bb, 0x16ce, 0x16e9, 0x16f7, 0x170b, 0x1728, + 0x1732, 0x1732, 0x1732, 0x173e, 0x1746, 0x1756, 0x1766, 0x1787, + 0x1797, 0x1797, 0x1797, 0x17a1, 0x17a1, 0x17ad, 0x17b7, 0x17c1, + 0x17c7, 0x17d5, 0x17d5, 0x17e9, 0x17f7, 0x17f7, 0x1805, 0x1818, + 0x1829, 0x1829, 0x1829, 0x1829, 0x1839, 0x1839, 0x1847, 0x1853, + 0x1853, 0x1867, 0x1867, 0x1873, 0x1885, 0x1893, 0x1899, 0x189f, + 0x189f, 0x189f, 0x189f, 0x189f, 0x18ab, 0x18ab, 0x18ab, 0x18ab, + 0x18b7, 0x18c1, 0x18c9, 0x18c9, 0x18c9, 0x18d5, 0x18d5, 0x18d5, + // Entry 240 - 27F + 0x18db, 0x18e9, 0x18e9, 0x18e9, 0x18e9, 0x18fb, 0x190d, 0x1921, + 0x1921, 0x192d, 0x192d, 0x1935, 0x1967, 0x196f, 0x196f, 0x196f, + 0x1992, 0x19c2, 0x19eb, 0x1a0c, 0x1a2f, 0x1a46, 0x1a72, 0x1a93, + 0x1a93, 0x1a93, 0x1ab6, 0x1add, 0x1add, 0x1aef, 0x1b18, 0x1b41, + 0x1b53, 0x1b6f, 0x1b6f, 0x1b9c, 0x1bc7, + }, + }, + { // ca + caLangStr, + caLangIdx, + }, + { // ce + "абхазхойнафрикаансаканамхаройнӀаьрбийнассамийназербайджанийнбашкирийнбел" + + "орусийнболгарийнбамбарабенгалийнтибетхойнбретонийнбоснийнкаталонийн" + + "нохчийнкорсиканийнчехийнчувашийнваллийндатхойннемцойндзонг-кээвегре" + + "кийнингалсанэсперантоиспанхойнэстонийнбаскийнгӀажарийнфиннийнфиджиф" + + "арерийнфранцузийнмалхбузен-фризийнирландхойнгалисийнгуаранигуджарат" + + "имэнийнхаусажугтийнхиндихорватийнгаитийнвенгрийнэрмалойниндонезихой" + + "нигбосычуаньисландхойнитальянийнинуктитутяпонийняванийнгуьржийнкику" + + "йюказахийнгренландхойнкхмерийнканнадакорейнкашмирикурдийнкорнуоллий" + + "нгӀиргӀизойнлатинанлюксембургхойнгандалингалалаоссийнлитвахойнлуба-" + + "катангалатышийнмалагасийнмаоримакедонхойнмалаяламмонголийнмаратхима" + + "лайнмальтойнбирманийнкъилбаседа ндебелинепалхойнголландхойннорвегий" + + "н нюнорскнорвегийн букмолоромоорипанджабиполякийнпуштупортугалихойн" + + "кечуароманшийнрундирумынийноьрсийнкиньяруандасанскритсиндхикъилбасе" + + "да саамийнсангосингалхойнсловакийнсловенийншонасомалиалбанойнсербий" + + "нсунданхойншведийнсуахилитамилхойнтелугутаджикийнтайнтигриньятуркме" + + "нийнтонганийнтуркойнгӀезалойнуйгурийнукраинийнурдуузбекийнвьетнамхо" + + "йнволофкосайорубакитайнзулуагхӀемарауканхойнасубембабенамалхбузен-б" + + "елуджийнбодочигачерокиюккъерчу курдийнтаитазармасорбийндуаладьола-ф" + + "оньиэмбуфилиппинийнгагаузийншвейцарин немцойнгусиигавайнлакхара сер" + + "бийннгомбамачамекабилийнкамбамакондекабувердьянукойра чииникаленджи" + + "нкоми-пермякийнконканишамбалабафиалангилакотакъилбаседа лурилуо (Ке" + + "ни а, Танзани а)лухьямасаимерумаврикин креолийнмакуа-мееттометамоха" + + "укмундангмазандеранхойннамалахара германхойнквасионконуэрньянколеки" + + "черомборуандасамбурусангусенакойраборо сеннитахелхитсаамийн (къилба" + + ")луле-саамийнинари-саамийнскольт-саамийнтесотасавактамазигхтийнбоьвз" + + "уш боцу моттваивунджоварлпирисогамороккон стандартан тамазигхтийнме" + + "ттан чулацам боцушХӀинца болу стандартан Ӏаьрбийнавстрин немцойншве" + + "йцарин лакхара немцойнАвстралин ингалсанканадан ингалсанбританин ин" + + "галсанамерикан ингалсанлатинан американ испанхойневропан испанхойнм" + + "ексикан испанхойнканадан французийншвейцарин французийнлахара саксо" + + "нийнфламандийнбразилин португалихойневропан португалихойнмолдавийнс" + + "уахили (Конго)атта китайнламастан китайн", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0012, 0x0012, 0x0024, 0x002c, 0x003c, 0x003c, + 0x004c, 0x005c, 0x005c, 0x005c, 0x0078, 0x008a, 0x009e, 0x00b0, + 0x00b0, 0x00be, 0x00d0, 0x00e2, 0x00f4, 0x0102, 0x0116, 0x0124, + 0x0124, 0x013a, 0x013a, 0x0146, 0x0146, 0x0156, 0x0164, 0x0172, + 0x0180, 0x0180, 0x018f, 0x0195, 0x01a3, 0x01b3, 0x01c5, 0x01d7, + 0x01e7, 0x01f5, 0x0207, 0x0207, 0x0215, 0x021f, 0x022f, 0x0243, + 0x0264, 0x0278, 0x0278, 0x0288, 0x0296, 0x02a8, 0x02b4, 0x02be, + 0x02cc, 0x02d6, 0x02d6, 0x02e8, 0x02f6, 0x0306, 0x0316, 0x0316, + // Entry 40 - 7F + 0x0316, 0x032e, 0x032e, 0x0336, 0x0344, 0x0344, 0x0344, 0x0358, + 0x036c, 0x037e, 0x038c, 0x039a, 0x03aa, 0x03aa, 0x03b6, 0x03b6, + 0x03c6, 0x03de, 0x03ee, 0x03fc, 0x0408, 0x0408, 0x0416, 0x0424, + 0x0424, 0x043a, 0x0450, 0x045e, 0x047a, 0x0484, 0x0484, 0x0492, + 0x04a2, 0x04b4, 0x04cb, 0x04db, 0x04ef, 0x04ef, 0x04f9, 0x050f, + 0x051f, 0x0531, 0x053f, 0x054b, 0x055b, 0x056d, 0x056d, 0x0590, + 0x05a2, 0x05a2, 0x05b8, 0x05d9, 0x05f8, 0x05f8, 0x05f8, 0x05f8, + 0x05f8, 0x05f8, 0x0602, 0x0608, 0x0608, 0x0618, 0x0618, 0x0628, + // Entry 80 - BF + 0x0632, 0x064c, 0x0656, 0x0668, 0x0672, 0x0682, 0x0690, 0x06a6, + 0x06b6, 0x06b6, 0x06c2, 0x06e5, 0x06ef, 0x0703, 0x0715, 0x0727, + 0x0727, 0x072f, 0x073b, 0x074b, 0x0759, 0x0759, 0x0759, 0x076d, + 0x077b, 0x0789, 0x079b, 0x07a7, 0x07b9, 0x07c1, 0x07d1, 0x07e5, + 0x07e5, 0x07f7, 0x0805, 0x0805, 0x0817, 0x0817, 0x0827, 0x0839, + 0x0841, 0x0851, 0x0851, 0x0867, 0x0867, 0x0867, 0x0871, 0x0879, + 0x0879, 0x0885, 0x0885, 0x0891, 0x0899, 0x0899, 0x0899, 0x0899, + 0x0899, 0x0899, 0x0899, 0x08a5, 0x08a5, 0x08a5, 0x08a5, 0x08a5, + // Entry C0 - FF + 0x08a5, 0x08a5, 0x08a5, 0x08a5, 0x08a5, 0x08bb, 0x08bb, 0x08bb, + 0x08bb, 0x08bb, 0x08bb, 0x08bb, 0x08bb, 0x08c1, 0x08c1, 0x08c1, + 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c1, + 0x08c1, 0x08c1, 0x08cb, 0x08cb, 0x08d3, 0x08d3, 0x08d3, 0x08f8, + 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, + 0x08f8, 0x08f8, 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, + 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, 0x0908, 0x0908, + 0x0908, 0x0908, 0x0908, 0x0908, 0x0908, 0x0908, 0x0914, 0x0914, + // Entry 100 - 13F + 0x0933, 0x0933, 0x0933, 0x0933, 0x0933, 0x0933, 0x0933, 0x0933, + 0x093d, 0x093d, 0x093d, 0x093d, 0x093d, 0x0947, 0x0947, 0x0955, + 0x0955, 0x095f, 0x095f, 0x0974, 0x0974, 0x0974, 0x097c, 0x097c, + 0x097c, 0x097c, 0x097c, 0x097c, 0x097c, 0x097c, 0x097c, 0x097c, + 0x097c, 0x0992, 0x0992, 0x0992, 0x0992, 0x0992, 0x0992, 0x0992, + 0x0992, 0x0992, 0x0992, 0x0992, 0x09a4, 0x09a4, 0x09a4, 0x09a4, + 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09a4, + 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09c5, 0x09c5, 0x09c5, 0x09cf, + // Entry 140 - 17F + 0x09cf, 0x09cf, 0x09cf, 0x09db, 0x09db, 0x09db, 0x09db, 0x09db, + 0x09f8, 0x09f8, 0x09f8, 0x09f8, 0x09f8, 0x09f8, 0x09f8, 0x09f8, + 0x09f8, 0x09f8, 0x0a04, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, + 0x0a20, 0x0a20, 0x0a20, 0x0a2a, 0x0a2a, 0x0a2a, 0x0a2a, 0x0a2a, + 0x0a38, 0x0a50, 0x0a50, 0x0a50, 0x0a50, 0x0a50, 0x0a50, 0x0a65, + 0x0a65, 0x0a65, 0x0a65, 0x0a77, 0x0a77, 0x0a92, 0x0aa0, 0x0aa0, + 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa0, 0x0aae, 0x0ab8, + 0x0ab8, 0x0ab8, 0x0ab8, 0x0ab8, 0x0ac2, 0x0ac2, 0x0ac2, 0x0ac2, + // Entry 180 - 1BF + 0x0ac2, 0x0ac2, 0x0ac2, 0x0ace, 0x0ace, 0x0ace, 0x0ace, 0x0aeb, + 0x0aeb, 0x0aeb, 0x0aeb, 0x0aeb, 0x0b12, 0x0b12, 0x0b1c, 0x0b1c, + 0x0b1c, 0x0b1c, 0x0b1c, 0x0b1c, 0x0b1c, 0x0b1c, 0x0b1c, 0x0b26, + 0x0b26, 0x0b26, 0x0b26, 0x0b26, 0x0b2e, 0x0b4f, 0x0b4f, 0x0b66, + 0x0b6e, 0x0b6e, 0x0b6e, 0x0b6e, 0x0b6e, 0x0b7a, 0x0b7a, 0x0b7a, + 0x0b88, 0x0b88, 0x0b88, 0x0b88, 0x0b88, 0x0b88, 0x0b88, 0x0b88, + 0x0ba4, 0x0ba4, 0x0ba4, 0x0bac, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bcd, + 0x0bcd, 0x0bd9, 0x0bd9, 0x0bd9, 0x0bd9, 0x0bd9, 0x0bdf, 0x0bdf, + // Entry 1C0 - 1FF + 0x0be7, 0x0be7, 0x0be7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, + 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, + 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, + 0x0bf7, 0x0bff, 0x0bff, 0x0bff, 0x0bff, 0x0bff, 0x0bff, 0x0bff, + 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c15, 0x0c15, + 0x0c15, 0x0c15, 0x0c23, 0x0c23, 0x0c23, 0x0c23, 0x0c23, 0x0c2d, + 0x0c2d, 0x0c2d, 0x0c2d, 0x0c2d, 0x0c2d, 0x0c35, 0x0c35, 0x0c35, + 0x0c52, 0x0c52, 0x0c52, 0x0c62, 0x0c62, 0x0c62, 0x0c62, 0x0c62, + // Entry 200 - 23F + 0x0c62, 0x0c7f, 0x0c96, 0x0caf, 0x0cca, 0x0cca, 0x0cca, 0x0cca, + 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cca, + 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, + 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, + 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, + 0x0ce0, 0x0ce0, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0d18, 0x0d1e, + 0x0d1e, 0x0d1e, 0x0d1e, 0x0d1e, 0x0d1e, 0x0d1e, 0x0d2a, 0x0d2a, + 0x0d2a, 0x0d2a, 0x0d2a, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d42, + // Entry 240 - 27F + 0x0d42, 0x0d42, 0x0d42, 0x0d42, 0x0d42, 0x0d42, 0x0d42, 0x0d42, + 0x0d42, 0x0d42, 0x0d80, 0x0d80, 0x0da6, 0x0da6, 0x0de1, 0x0de1, + 0x0dfe, 0x0e2e, 0x0e51, 0x0e70, 0x0e91, 0x0eb2, 0x0ee4, 0x0f05, + 0x0f28, 0x0f28, 0x0f4b, 0x0f72, 0x0f91, 0x0fa5, 0x0fd0, 0x0ff9, + 0x100b, 0x100b, 0x1026, 0x103b, 0x1058, + }, + }, + { // cgg + "OrukaniOrumarikiOruharabuOruberarusiOruburugariyaOrubengariOruceekiOrugi" + + "rimaaniOruguriikiOrungyerezaOrusupaaniOrupaasiyaOrufaransaOruhausaOr" + + "uhindiOruhangareOruindoneziaOruiboOruyitareOrujapaaniOrujavaOrukambo" + + "diyaOrukoreyaOrumalesiyaOruburumaOrunepaliOrudaakiOrupungyabiOrupoor" + + "iOrupocugoOruromaniaOrurrashaOrunyarwandaOrusomaariOruswidiOrutamiri" + + "OrutailandiOrukurukiOrukurainiOru-UruduOruviyetinaamuOruyorubaOrucha" + + "inaOruzuruRukiga", + []uint16{ // 247 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0010, 0x0010, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0031, + 0x0031, 0x0031, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + 0x004f, 0x004f, 0x004f, 0x004f, 0x0059, 0x0064, 0x0064, 0x006e, + 0x006e, 0x006e, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x008a, + 0x008a, 0x0092, 0x0092, 0x0092, 0x0092, 0x009c, 0x009c, 0x009c, + // Entry 40 - 7F + 0x009c, 0x00a8, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00b7, 0x00b7, 0x00c1, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00d4, 0x00d4, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00e8, 0x00e8, 0x00f1, 0x00f1, 0x00f1, + 0x00fa, 0x00fa, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x010d, 0x010d, 0x0115, + // Entry 80 - BF + 0x0115, 0x011e, 0x011e, 0x011e, 0x011e, 0x0128, 0x0131, 0x013d, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, + 0x013d, 0x013d, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, + 0x014f, 0x014f, 0x0158, 0x0158, 0x0158, 0x0163, 0x0163, 0x0163, + 0x0163, 0x0163, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x0176, + 0x017f, 0x017f, 0x017f, 0x018d, 0x018d, 0x018d, 0x018d, 0x018d, + 0x018d, 0x0196, 0x0196, 0x019f, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + // Entry C0 - FF + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01ac, + }, + }, + { // chr + "ᎠᏩᎳᎠᏆᏏᎠᏂᎠᎬᎿᎨᏍᏛᎠᎧᎾᎠᎹᎭᎵᎩᎠᏩᎪᏂᏏᎡᎳᏈᎠᏌᎻᏏᎠᏩᎵᎧᎠᏱᎹᎳᎠᏎᏆᏣᏂᏆᏍᎯᎩᎠᏇᎳᎷᏏᏊᎵᎨᎵᎠᏂᏈᏍᎳᎹᏆᎻᏆᎳᏇᏂ" + + "ᎦᎳᏘᏇᏔᏂᏇᏙᏂᏆᏍᏂᎠᏂᎨᏔᎳᏂᏤᏤᏂᏣᎼᎶᎪᎵᏍᎢᎧᏂᏤᎩᏧᏂᎳᏫᏍᏗ ᏍᎳᏫᎪᏧᏩᏏᏪᎵᏏᏕᏂᏍᏙᎢᏥᏗᏪᎯᏓᏐᏅᎧᎡᏪᎠᏂ" + + "ᎪᎢᎩᎵᏏᎡᏍᏇᎳᏂᏙᏍᏆᏂᎡᏍᏙᏂᎠᏂᏆᏍᎨᏇᏏᎠᏂᏊᎳᏂᏈᏂᏍᏫᏥᎠᏂᏇᎶᎡᏍᎦᎸᏥᏭᏕᎵᎬ ᏗᏜ ᏟᏏᎠᏂᎨᎵᎩᏍᎦᏗ ᎨᎵᎩ" + + "ᎦᎵᏏᎠᏂᏆᎳᏂᎫᏣᎳᏘᎹᎾᎧᏏᎭᎤᏌᎠᏂᏈᎷᎯᏂᏗᎧᎶᎡᏏᏂᎮᏏᎠᏂ ᏟᏲᎵᎲᏂᎦᎵᎠᏂᎮᎴᎶᎠᏰᏟ ᎦᏬᏂᎯᏍᏗᎢᏂᏙᏂᏏᎠᎢᎦ" + + "ᎪᏏᏧᏩᏂ ᏱᎢᏙᏧᏁᏍᏓᎸᎯᎢᎩᎬᏩᎵᏲᏥᎢᎢᏄᎦᏘᏚᏣᏩᏂᏏᏆᏌ ᏣᏩᏦᏥᎠᏂᎩᎫᏳᎫᏩᏂᎠᎹᎧᏌᎧᎧᎳᎵᏑᏘᎩᎻᎷᎧᎾᏓᎪᎵᎠ" + + "ᏂᎧᏄᎵᎧᏏᎻᎵᎫᏗᏏᎪᎻᏎᎷᎭᎩᎵᏣᎢᏍᎳᏘᏂᎸᎦᏏᎻᏋᎢᏍᎦᏂᏓᎴᎹᏊᎵᏏᎵᏂᎦᎳᎳᎣᎵᏚᏩᏂᎠᏂᎷᏆ-ᎧᏔᎦᎳᏘᏫᎠᏂᎹᎳᎦᏏ" + + "ᎹᏌᎵᏏᎹᏫᎹᏎᏙᏂᎠᎹᎳᏯᎳᎻᎹᏂᎪᎵᎠᏂᎹᎳᏘᎹᎴᎹᎵᏘᏍᏋᎻᏍᏃᎤᎷᏧᏴᏢ ᏂᏕᏇᎴᏁᏆᎵᎾᏙᎦᏛᏥᏃᎵᏪᏥᏂ ᎾᎵᏍᎩᏃᎵᏪ" + + "ᏥᏂ ᏉᎧᎹᎵᏧᎦᎾᏮ ᏂᏕᏇᎴᎾᏩᎰᏂᏯᏂᏣᎠᏏᏔᏂᎣᎶᎼᎣᏗᎠᎣᏎᏘᎧᏡᏂᏣᏈᏉᎵᏍᏆᏍᏙᏉᏧᎩᏍᎨᏧᏩᎠᏂᎶᎺᏂᎷᏂᏗᎶᎹᏂᎠ" + + "ᏂᏲᏅᎯᎩᏂᏯᏩᏂᏓᏍᏂᏍᎩᏗᏌᏗᏂᎠᏂᏏᏂᏗᏧᏴᏢ ᏗᏜ ᏌᎻᏌᏂᎪᏏᎾᎭᎳᏍᎶᏩᎩᏍᎶᏫᏂᎠᏂᏌᎼᏯᏂᏠᎾᏐᎹᎵᎠᎵᏇᏂᏎᏈᎠᏂ" + + "ᏍᏩᏘᏧᎦᎾᏮ ᏗᏜ ᏐᏠᏑᏂᏓᏂᏏᏍᏫᏗᏏᏍᏩᎯᎵᏔᎻᎵᏖᎷᎦᏔᏥᎩᏔᏱᏘᎩᎵᏂᎠᎠᏂᎬᎾᏧᏩᎾᏙᎾᎦᏂᎠᎬᎾᏦᎾᎦᏔᏔᏔᎯᏘᎠᏂ" + + "ᏫᎦᏳᎧᎴᏂᎠᏂᎤᎵᏚᎤᏍᏇᎩᏫᏂᏓᏫᎡᏘᎾᎻᏍᏬᎳᏊᎩᏩᎷᎾᏬᎶᏫᏠᏌᏱᏗᏍᏲᏄᏆᏓᎶᏂᎨᏑᎷᎠᏥᏂᏏᎠᏓᎾᎦᎺᎠᏗᎨᎠᎨᎹᎠᏱᏄ" + + "ᎠᎵᎤᏘᏧᎦᎾᏮ ᏗᏜ ᎠᎵᏔᎢᎠᎾᎩᎧᎹᏊᏤᎠᏩᏈᎰᎠᏑᎠᏍᏚᎵᎠᏂᎠᏩᏗᏆᎵᏁᏏᏆᏌᎠᏇᎹᏆᏇᎾᏉᏣᏊᎵᏈᏂᏏᎩᏏᎧᏉᏙᏈᎥᎩᏂ" + + "ᏍᏟᏂᎧᏳᎦᏎᏆᏃᏥᎦᏧᎨᏎᎹᎵᎠᏣᏓᏣᎳᎩᏣᏰᏂᎠᏰᏟ ᎫᏗᏏᏎᏎᎵᏩ ᏟᏲᎵ ᎠᏂᎦᎸᏓᎪᏔᏓᎳᏆᏔᎢᏔᎩᏟ ᎤᏄᎳᏥᏌᎹᎡᎳᏗ" + + " ᏐᏈᎠᏂᏚᎠᎳᏦᎳ-ᏬᏱᏓᏌᎦᎡᎻᏊᎡᏫᎩᎨᎧᏧᎧᎡᏬᏂᏙᎠᏈᎵᎩᏠᏂᏞᎤᎵᎠᏂᎦᎩᏏᎩᏇᏘᏏᎪᎶᏂᏔᏃᏍᏫᏏ ᎠᏂᏓᏥᎫᏏᏈᏥᏂᎭᏩ" + + "ᎼᎯᎵᎨᎾᏂᎭᎼᏂᎩᎦᎸᎳᏗᎨ ᏐᎵᏈᎠᏂᎠᏂᎱᏆᎢᏆᏂᎢᏈᏈᎣᎢᎶᎪᎢᏂᎫᏏᎶᏣᏆᏂᎾᎪᏆᎹᏣᎺᎧᏈᎴᎧᏥᏂᏥᏧᎧᎻᏆᎧᏆᏗᎠᏂᏔ" + + "ᏯᏆᎹᎪᏕᎧᏊᏪᏗᎠᏄᎪᎶᎧᏏᎪᏱᎳ ᏥᏂᎧᎪᎧᎴᏂᏥᏂᎩᎻᏊᏚᎧᏂᎧᏂᏇᎴᎧᎳᏣᏱ-ᏆᎵᎧᎵᎧᎴᎵᎠᏂᎫᎷᎩᏝᎻᏆᎸᏆᏫᎠᎪᎶᏂᎠ" + + "ᏂᎫᎻᎧᎳᏗᏃᎳᏂᎩᎴᏏᎦᏂᎳᎪᏓᎶᏏᏧᏴᏢ ᏗᏜ ᎷᎵᎷᏆ-ᎷᎷᎠᎷᎾᏓᎷᎣᎻᏐᎷᏱᎠᎹᏚᎴᏏᎹᎦᎯᎹᏟᎵᎹᎧᏌᎹᏌᏱᎼᎧᏌᎺᎾᏕ" + + "ᎺᎷᎼᎵᏏᎡᏂᎹᎫᏩ-ᎻᏙᎺᎳ’ᎻᎧᎹᎩᎻᎾᎧᏆᎤᎺᏂᏉᎵᎼᎭᎩᎼᏍᏏᎽᏂᏓᎩᏧᏈᏍᏗ ᏗᎦᏬᏂᎯᏍᏗᎠᎫᏌᎻᎳᏕᏏᎡᏏᏯᎹᏌᏕᎳᏂ" + + "ᏂᏯᏆᎵᏔᏂᎾᎹᏁᏩᎵᏂᎠᏏᏂᏳᏫᏯᏂᏆᏏᏲᎾᏥᏰᎹᏊᏂᏃᎦᏱᎾᎪᏧᏴᏢ ᏗᏜ ᏐᏠᏄᏪᎵᏂᏯᎾᎪᎴᏇᎦᏏᎠᏂᏆᎹᏆᎾᎦᏆᏈᏯᎺᎾᏙ" + + "ᏆᎳᎤᏩᏂᎾᎩᎵᎠᏂ ᏈᏥᏂᏡᏏᎠᏂᎩᏤᎳᏆᏄᏫᎳᎶᏙᎾᎦᏂᎶᎹᏉᎠᏬᎹᏂᎠᏂᏆᏌᏅᏓᏫᏌᎧᎾᏌᎹᏊᎷᏌᏂᏔᎵᎾᎦᎹᏇᏌᏁᎫᏏᏏᎵᎠ" + + "ᏂᏍᎦᏗᏏᏂᎦᏎᎾᎪᏱᎳᏈᎶ ᏎᏂᏔᏤᎵᎯᏘᏝᏂᏧᎦᎾᏮ ᏗᏜ ᏌᎻᎷᎴ ᏌᎻᎢᎾᎵ ᏌᎻᏍᎪᎵᏘ ᏌᎻᏐᏂᏂᎨᏏᎳᎾᏂ ᏙᏃᎪᏌᎰ" + + "ᏑᎫᎹᎪᎼᎵᎠᏂᏏᎵᎠᎩᏘᎹᏁᏖᏐᏖᏚᎼᏢᏓᏥᏟᎦᎾᏙᎩ ᏈᏏᏂᏔᎶᎪᏛᎹᏊᎧᏚᏩᎷᏔᏌᏩᎩᏚᏫᏂᎠᏂᎠᏰᏟ ᎡᎶᎯ ᏓᏟᎶᏍᏗᏓᏅ" + + "Ꭲ ᏔᎹᏏᏘᎤᏚᎷᏘᎤᎹᏊᏅᏚᎤᎾᏍᎦᎸᏩᏱᏭᎾᏦᏩᎵᏎᎵᏬᎳᏱᏔᏩᎴᎧᎳᎻᎧᏐᎦᏰᎾᎦᏇᏂᏰᎹᏋᎨᎾᏙᏂᏏᎠᏟᎶᏍᏗ ᎼᎶᎪ ᏔᎹ" + + "ᏏᏘᏑᏂᏝ ᎦᏬᏂᎯᏍᏗ ᎦᎸᏛᎢ ᏱᎩᏌᏌᎪᎯᏊ ᎢᎬᏥᎩ ᎠᏟᎶᏍᏗ ᎡᎳᏈᎠᏟᏯᏂ ᎠᏂᏓᏥᏍᏫᏏ ᎦᎸᎳᏗ ᎠᏂᏓᏥᎡᎳᏗᏜ" + + " ᎩᎵᏏᎨᎾᏓ ᎩᎵᏏᎩᎵᏏᏲ ᎩᎵᏏᎠᎹᏰᏟ ᎩᎵᏏᏔᏘᏂ ᎠᎹᏰᏟ ᏍᏆᏂᎠᏂᏍᏆᏂᏱ ᏍᏆᏂᏍᏆᏂᏱ ᏍᏆᏂᎨᎾᏓ ᎦᎸᏥᏍᏫᏏ " + + "ᎦᎸᏥᎡᎳᏗ ᏁᏛᎳᏂᏊᎵᏥᎥᎻ ᏛᏥᏆᏏᎵᎢ ᏉᏧᎦᎵᏉᏥᎦᎳ ᏉᏧᎦᎵᎹᎵᏙᏫᎠ ᏣᎹᏂᎠᏂᎧᏂᎪ ᏍᏩᎯᎵᎠᎯᏗᎨ ᏓᎶᏂᎨᎤ" + + "ᏦᏍᏗ ᏓᎶᏂᎨ", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0018, 0x0018, 0x002a, 0x0033, 0x0042, 0x0051, + 0x005a, 0x0066, 0x0072, 0x007e, 0x008d, 0x009c, 0x00a8, 0x00ba, + 0x00c6, 0x00d2, 0x00de, 0x00ea, 0x00f3, 0x0102, 0x010e, 0x0117, + 0x0120, 0x0132, 0x0132, 0x0138, 0x0157, 0x0160, 0x0169, 0x0172, + 0x017b, 0x0184, 0x0190, 0x0196, 0x01a2, 0x01ab, 0x01bd, 0x01c6, + 0x01d8, 0x01e1, 0x01ed, 0x01f6, 0x01ff, 0x020b, 0x0217, 0x0220, + 0x0240, 0x0249, 0x025c, 0x026b, 0x0274, 0x0280, 0x028c, 0x0295, + 0x02a1, 0x02aa, 0x02aa, 0x02b9, 0x02cf, 0x02e1, 0x02e1, 0x02ea, + // Entry 40 - 7F + 0x0306, 0x0318, 0x0318, 0x0321, 0x0331, 0x0331, 0x0337, 0x034f, + 0x0361, 0x0370, 0x037c, 0x0389, 0x0395, 0x0395, 0x039e, 0x03ad, + 0x03b6, 0x03c5, 0x03ce, 0x03d7, 0x03e3, 0x03ec, 0x03f8, 0x0401, + 0x0407, 0x0410, 0x041f, 0x0428, 0x043d, 0x0446, 0x0455, 0x0461, + 0x0467, 0x0479, 0x0489, 0x0498, 0x04a4, 0x04b0, 0x04b6, 0x04c5, + 0x04d4, 0x04e6, 0x04ef, 0x04f5, 0x0501, 0x050a, 0x0513, 0x0529, + 0x0532, 0x053b, 0x0541, 0x055d, 0x0579, 0x0592, 0x059b, 0x05a7, + 0x05b3, 0x05b3, 0x05bc, 0x05c5, 0x05d1, 0x05dd, 0x05dd, 0x05e6, + // Entry 80 - BF + 0x05ef, 0x05fb, 0x0604, 0x0613, 0x061c, 0x062b, 0x0634, 0x0646, + 0x0655, 0x0664, 0x066d, 0x0684, 0x068d, 0x0699, 0x06a5, 0x06b7, + 0x06c3, 0x06c9, 0x06d2, 0x06de, 0x06ea, 0x06f3, 0x070d, 0x071c, + 0x0728, 0x0734, 0x073d, 0x0746, 0x074f, 0x0755, 0x0764, 0x0770, + 0x0779, 0x0785, 0x078e, 0x0797, 0x079d, 0x07ac, 0x07b2, 0x07c4, + 0x07cd, 0x07d9, 0x07e2, 0x07f4, 0x0800, 0x0809, 0x0812, 0x0818, + 0x0821, 0x082a, 0x082a, 0x0836, 0x083c, 0x0848, 0x0848, 0x0857, + 0x0860, 0x0860, 0x0860, 0x0869, 0x0872, 0x0872, 0x0872, 0x087e, + // Entry C0 - FF + 0x087e, 0x089e, 0x089e, 0x08aa, 0x08aa, 0x08b3, 0x08b3, 0x08bf, + 0x08bf, 0x08bf, 0x08bf, 0x08bf, 0x08bf, 0x08c5, 0x08c5, 0x08d7, + 0x08d7, 0x08e0, 0x08e0, 0x08ec, 0x08ec, 0x08f5, 0x08f5, 0x08f5, + 0x08f5, 0x08f5, 0x08fe, 0x08fe, 0x0904, 0x0904, 0x0904, 0x0904, + 0x0910, 0x0910, 0x0916, 0x0916, 0x0916, 0x0922, 0x0922, 0x0922, + 0x0922, 0x0922, 0x0928, 0x0928, 0x0928, 0x0937, 0x0937, 0x093d, + 0x093d, 0x093d, 0x093d, 0x0946, 0x0946, 0x094f, 0x0955, 0x0955, + 0x0955, 0x095e, 0x0964, 0x0964, 0x096d, 0x096d, 0x0976, 0x097f, + // Entry 100 - 13F + 0x0992, 0x0992, 0x0992, 0x0992, 0x09b5, 0x09b5, 0x09be, 0x09c7, + 0x09d0, 0x09d0, 0x09d0, 0x09e3, 0x09e3, 0x09e9, 0x09e9, 0x09ff, + 0x09ff, 0x0a08, 0x0a08, 0x0a15, 0x0a15, 0x0a1e, 0x0a27, 0x0a30, + 0x0a30, 0x0a30, 0x0a3c, 0x0a3c, 0x0a3c, 0x0a3c, 0x0a48, 0x0a48, + 0x0a48, 0x0a54, 0x0a54, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, + 0x0a5a, 0x0a5a, 0x0a69, 0x0a6c, 0x0a6c, 0x0a6c, 0x0a6c, 0x0a6c, + 0x0a6c, 0x0a72, 0x0a7e, 0x0a7e, 0x0a7e, 0x0a7e, 0x0a7e, 0x0a7e, + 0x0a8d, 0x0a8d, 0x0a8d, 0x0a8d, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa9, + // Entry 140 - 17F + 0x0ab2, 0x0ab2, 0x0ab2, 0x0abb, 0x0abb, 0x0aca, 0x0aca, 0x0ad6, + 0x0af5, 0x0af5, 0x0b01, 0x0b0a, 0x0b16, 0x0b1f, 0x0b2b, 0x0b2b, + 0x0b2b, 0x0b37, 0x0b40, 0x0b49, 0x0b49, 0x0b49, 0x0b49, 0x0b49, + 0x0b52, 0x0b5b, 0x0b61, 0x0b6a, 0x0b6a, 0x0b79, 0x0b79, 0x0b82, + 0x0b8b, 0x0b9d, 0x0b9d, 0x0ba3, 0x0ba3, 0x0ba9, 0x0ba9, 0x0bb9, + 0x0bb9, 0x0bb9, 0x0bbf, 0x0bce, 0x0bda, 0x0bda, 0x0be6, 0x0be6, + 0x0bec, 0x0c05, 0x0c05, 0x0c05, 0x0c14, 0x0c1d, 0x0c29, 0x0c32, + 0x0c41, 0x0c4a, 0x0c4a, 0x0c53, 0x0c5c, 0x0c5c, 0x0c5c, 0x0c68, + // Entry 180 - 1BF + 0x0c68, 0x0c68, 0x0c68, 0x0c71, 0x0c71, 0x0c71, 0x0c77, 0x0c8e, + 0x0c8e, 0x0c9e, 0x0c9e, 0x0ca7, 0x0cad, 0x0cb3, 0x0cbc, 0x0cbc, + 0x0cbc, 0x0cc8, 0x0cc8, 0x0cd1, 0x0cda, 0x0ce3, 0x0ce3, 0x0cec, + 0x0cec, 0x0cf5, 0x0cf5, 0x0cfe, 0x0d04, 0x0d13, 0x0d13, 0x0d23, + 0x0d2c, 0x0d38, 0x0d47, 0x0d47, 0x0d53, 0x0d5c, 0x0d65, 0x0d65, + 0x0d71, 0x0d93, 0x0d9c, 0x0da8, 0x0da8, 0x0da8, 0x0da8, 0x0db1, + 0x0dc0, 0x0dc0, 0x0dd2, 0x0dd8, 0x0dd8, 0x0de1, 0x0dea, 0x0df9, + 0x0df9, 0x0e02, 0x0e14, 0x0e1d, 0x0e1d, 0x0e1d, 0x0e23, 0x0e3a, + // Entry 1C0 - 1FF + 0x0e43, 0x0e43, 0x0e43, 0x0e52, 0x0e52, 0x0e52, 0x0e52, 0x0e52, + 0x0e61, 0x0e61, 0x0e70, 0x0e82, 0x0e91, 0x0e91, 0x0eaa, 0x0eaa, + 0x0eaa, 0x0eaa, 0x0eaa, 0x0eaa, 0x0eaa, 0x0eaa, 0x0eaa, 0x0eb6, + 0x0eb6, 0x0ebc, 0x0ebc, 0x0ebc, 0x0ec8, 0x0eda, 0x0eda, 0x0eda, + 0x0ee3, 0x0ee3, 0x0ee3, 0x0ee3, 0x0ee3, 0x0ef5, 0x0ef8, 0x0f04, + 0x0f0d, 0x0f0d, 0x0f19, 0x0f19, 0x0f25, 0x0f25, 0x0f31, 0x0f3a, + 0x0f49, 0x0f52, 0x0f52, 0x0f52, 0x0f5b, 0x0f61, 0x0f61, 0x0f61, + 0x0f77, 0x0f77, 0x0f77, 0x0f86, 0x0f8c, 0x0f8c, 0x0f8c, 0x0f8c, + // Entry 200 - 23F + 0x0f8c, 0x0fa6, 0x0fb3, 0x0fc3, 0x0fd6, 0x0fe2, 0x0fe2, 0x0ff8, + 0x0ff8, 0x0ffe, 0x0ffe, 0x1007, 0x1007, 0x1007, 0x1016, 0x1016, + 0x1022, 0x1022, 0x1022, 0x102b, 0x1031, 0x1031, 0x103a, 0x1043, + 0x1043, 0x1043, 0x1043, 0x104c, 0x104c, 0x104c, 0x104c, 0x104c, + 0x105c, 0x105c, 0x1065, 0x1065, 0x1065, 0x1065, 0x1071, 0x107a, + 0x1086, 0x1095, 0x10ce, 0x10da, 0x10da, 0x10e9, 0x10f8, 0x10fe, + 0x10fe, 0x10fe, 0x10fe, 0x10fe, 0x10fe, 0x10fe, 0x1107, 0x1113, + 0x111f, 0x1125, 0x1125, 0x1125, 0x1125, 0x1131, 0x1131, 0x1137, + // Entry 240 - 27F + 0x1137, 0x1137, 0x1146, 0x114f, 0x114f, 0x115e, 0x115e, 0x115e, + 0x115e, 0x115e, 0x1184, 0x118a, 0x11b4, 0x11ba, 0x11ea, 0x11ea, + 0x1203, 0x1226, 0x123c, 0x124f, 0x1265, 0x127b, 0x129b, 0x12b7, + 0x12cd, 0x12cd, 0x12e0, 0x12f3, 0x1309, 0x131f, 0x1338, 0x1351, + 0x1370, 0x1370, 0x1386, 0x139f, 0x13b8, + }, + }, + { // ckb + "ئەمهەرینجیعەرەبیئاسامیئازەربایجانیبێلاڕووسیبۆلگاریبەنگلادێشیبرێتونیبۆسنی" + + "كاتالۆنیچەكیوێلزیدانماركیئاڵمانییۆنانیئینگلیزیئێسپیرانتۆئیسپانیئیست" + + "ۆنیباسکیفارسیفینلەندیفەرانسیفریسیی ڕۆژاوائیرلەندیگالیسیگووارانیگوجا" + + "راتیهیبرێهیندیكرواتیهەنگاری (مەجاری)ئەرمەنیئێەندونیزیئیسلەندیئیتالی" + + "ژاپۆنیجاڤانیگۆرجستانیکازاخیکوردیكرگیزیلاتینیلينگالالاویلیتوانیلێتۆن" + + "یماكێدۆنیمەنگۆلیماراتینیپالیهۆڵەندینۆروێژیئۆرییاپەنجابیپۆڵۆنیایی (ل" + + "ەهستانی)پەشتووپورتوگالیڕۆمانیڕووسیسانسکريتسيندیسینهەلیسلۆڤاكیسلۆڤێن" + + "یسۆمالیئاڵبانیسەربیسێسۆتۆسودانیسویدیتامیلیتەلۆگویتاجیکیتایلەندیتیگر" + + "ینیایتورکمانیتورکیئويخووریئۆكراینیئۆردووئوزبەکیڤیەتنامیچینیزولوکورد" + + "یی ناوەندیمازەندەرانیکوردیی باشووریسامی باشووریزمانی نەناسراوئازەرب" + + "ایجانی باشووریئینگلیزیی ئۆسترالیاییئینگلیزیی کەنەداییئینگلیزیی بریت" + + "انیاییئینگلیزیی ئەمەریکاییپورتوگاڵی برازیلپورتوگاڵی (پورتوگاڵ)", + []uint16{ // 608 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014, + 0x0020, 0x002c, 0x002c, 0x002c, 0x0044, 0x0044, 0x0056, 0x0064, + 0x0064, 0x0064, 0x0078, 0x0078, 0x0086, 0x0090, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a8, 0x00a8, 0x00a8, 0x00b2, 0x00c2, + 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00dc, 0x00ec, 0x0100, 0x010e, + 0x011c, 0x0126, 0x0130, 0x0130, 0x0140, 0x0140, 0x0140, 0x014e, + 0x0167, 0x0177, 0x0177, 0x0183, 0x0193, 0x01a3, 0x01a3, 0x01a3, + 0x01ad, 0x01b7, 0x01b7, 0x01c3, 0x01c3, 0x01e0, 0x01ee, 0x01ee, + // Entry 40 - 7F + 0x01ee, 0x0202, 0x0202, 0x0202, 0x0202, 0x0202, 0x0202, 0x0212, + 0x021e, 0x021e, 0x022a, 0x0236, 0x0248, 0x0248, 0x0248, 0x0248, + 0x0254, 0x0254, 0x0254, 0x0254, 0x0254, 0x0254, 0x0254, 0x025e, + 0x025e, 0x025e, 0x026a, 0x0276, 0x0276, 0x0276, 0x0276, 0x0284, + 0x028c, 0x029a, 0x029a, 0x02a6, 0x02a6, 0x02a6, 0x02a6, 0x02b6, + 0x02b6, 0x02c4, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, + 0x02dc, 0x02dc, 0x02ea, 0x02ea, 0x02f8, 0x02f8, 0x02f8, 0x02f8, + 0x02f8, 0x02f8, 0x02f8, 0x0304, 0x0304, 0x0312, 0x0312, 0x0337, + // Entry 80 - BF + 0x0343, 0x0355, 0x0355, 0x0355, 0x0355, 0x0361, 0x036b, 0x036b, + 0x037b, 0x037b, 0x0385, 0x0385, 0x0385, 0x0393, 0x03a1, 0x03af, + 0x03af, 0x03af, 0x03bb, 0x03c9, 0x03d3, 0x03d3, 0x03df, 0x03eb, + 0x03f5, 0x03f5, 0x0401, 0x040f, 0x041b, 0x042b, 0x043d, 0x044d, + 0x044d, 0x044d, 0x0457, 0x0457, 0x0457, 0x0457, 0x0467, 0x0477, + 0x0483, 0x0491, 0x0491, 0x04a1, 0x04a1, 0x04a1, 0x04a1, 0x04a1, + 0x04a1, 0x04a1, 0x04a1, 0x04a9, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + // Entry C0 - FF + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + // Entry 100 - 13F + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + // Entry 140 - 17F + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + // Entry 180 - 1BF + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + // Entry 1C0 - 1FF + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04e2, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, + 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, + // Entry 200 - 23F + 0x04fd, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, + 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, + 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, + 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, + 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, + 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x052f, 0x052f, + 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, + 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, + // Entry 240 - 27F + 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, + 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x0556, + 0x0556, 0x0556, 0x057f, 0x05a2, 0x05c9, 0x05f0, 0x05f0, 0x05f0, + 0x05f0, 0x05f0, 0x05f0, 0x05f0, 0x05f0, 0x05f0, 0x060f, 0x0634, + }, + }, + { // cs + csLangStr, + csLangIdx, + }, + { // cy + "AffaregAbchasegAfestanegAffricânegAcanegAmharegAragonegArabegAsamegAfare" + + "gAymaregAserbaijanegBashcortegBelarwsegBwlgaregBislamaBambaregBengal" + + "egTibetegLlydawegBosniegCatalanegTsietsienegTsiamorroCorsegCriTsiece" + + "gHen SlafonegTshwfashegCymraegDanegAlmaenegDifehiDzongkhaEweGroegSae" + + "snegEsperantoSbaenegEstonegBasgegPersegFfwlaFfinnegFfijïegFfaröegFfr" + + "angegFfriseg y GorllewinGwyddelegGaeleg yr AlbanGalisiegGuaraníGwjar" + + "atiManawegHawsaHebraegHindiCroategCreol HaitiHwngaregArmenegHereroIn" + + "terlinguaIndonesegInterlingueIgboNwoswInwpiacegIdoIslandegEidalegInw" + + "ctitwtJapaneegJafanaegGeorgegCongoKikuyuKuanyamaCasachegKalaallisutC" + + "hmeregKannadaCoreegCanwriCashmiregCwrdegComiCernywegCirgisegLladinLw" + + "csembwrgegGandaLimbwrgegLingalaLaoegLithwanegLuba-KatangaLatfiegMala" + + "gasegMarsialegMaoriMacedonegMalayalamMongolegMarathiMaleiegMaltegByr" + + "manegNawrŵegNdebele GogleddolNepalegNdongaIseldiregNorwyeg NynorskNo" + + "rwyeg BokmålNdebele DeheuolNafahoNianjaOcsitanegOjibwaOromoOriyaOset" + + "egPwnjabegPaliPwylegPashtoPortiwgeegQuechuaRománshRwndiRwmanegRwsegC" + + "iniarŵandegSansgritSardegSindhiSami GogleddolSangoSinhalegSlofacegSl" + + "ofenegSamöegShonaSomalegAlbanegSerbegSwatiSesotheg DeheuolSwndanegSw" + + "edegSwahiliTamilegTeluguTajicegThaiTigrinyaTwrcmenegTswanaTongegTyrc" + + "egTsongaegTataregTahitïegUighurWcreinegWrdwWsbecegFendegFietnamegFol" + + "apükWalwnegWoloffXhosaIddew-AlmaenegIorwbaTsieineegSwlwAcehnegAcoliA" + + "dangmegCircaseg GorllewinolArabeg TunisiaAffrihiliAghemegAinŵegAcade" + + "gAlabamäegAlewtegGhegeg AlbaniaAltäeg DeheuolHen SaesnegAngikaAramae" + + "gArawcanegAraonaegArapahoArabeg AlgeriaArawacegArabeg MorocoArabeg y" + + "r AifftAswIaith Arwyddion AmericaAstwrianegAwadhiBalwtsiBalïegBasâeg" + + "BamwmegBejäegBembegBenaBaffwtegBadagaBalochi GorllewinolBhojpuriBini" + + "ComegSiksikaBrahuiBodoAcwsegBwriategBugineseBwlwBlinCadoCaribegAtsam" + + "egCebuanoTsigaChuukeseMariegSioctoTsierocîCheyenneCwrdeg SoraniCopte" + + "gTyrceg y CrimeaFfrangeg Seselwa CreoleDacotaegDargwaTaitaDogribDinc" + + "aZarmaegDogriSorbeg IsafDiwalegIseldireg CanolJola-FonyiDazagaEmbwEf" + + "ikHen EifftegEkajukElamegSaesneg CanolEwondoExtremaduregFfilipinegFf" + + "inneg TornedalFonFfrangeg CajwnFfrangeg CanolHen FfrangegArpitanegFf" + + "riseg GogleddolFfriseg y DwyrainFfriwlegGaGagauzGaioGbaiaDareg y Zor" + + "oastriaidGeezGilbertegAlmaeneg Uchel CanolHen Almaeneg UchelGorontal" + + "oGothegHen RoegAlmaeneg y SwistirGusiiGwichʼinHaidaHawäiegHiligaynon" + + "HethegHmongegSorbeg UchafHupaIbanegIbibioIlocanegIngwsiegLojbanNgomb" + + "aMatsiameIddew-BersiegIddew-ArabegCara-CalpacegCabilegKachinJjuCamba" + + "Circaseg DwyreiniolTyapegMacondegCaboferdianegKoroCàsegKoyra ChiiniC" + + "howaregKakoKalenjinKimbunduKomi-PermyakConcaniKpelleKarachay-BalkarC" + + "arelegKurukhShambalaBaffiaCwlenegCwmicegIddew-SbaenegLangiLahndaLamb" + + "aLezghegLakotaLombardegMongoLoziLuri GogleddolLatgalegLuba-LuluaLwnd" + + "aLŵoLwshaiegLwyiaMadwregMagahiMaithiliMacasaregMandingoMasaiMocsiaMa" + + "ndaregMendegMêrwMorisyenGwyddeleg CanolMakhuwa-MeettoMetaMicmacegMin" + + "angkabauManshwManipwriMohocegMosiMari GorllewinolMundangMwy nag un i" + + "aithCreekMirandegMarwariErzyaMasanderaniNapliegNamaAlmaeneg IselNewa" + + "egNiasNiueanAo NagaKwasioNgiemboonNogaiHen NorsegN’KoSotho Gogleddol" + + "NŵeregHen NewariNiamweziNiancoleNioroNzimegOsagegTyrceg OtomanPangas" + + "inegPahlafiPampangaPapiamentoPalawanPicardegPidgin NigeriaAlmaeneg P" + + "ensylfaniaHen BersiegAlmaeneg PalatinPhoenicegPiedmontegPontegPohnpe" + + "ianegPrwsegHen BrofensalegK’iche’RajasthanegRapanŵiRaratongegRomboRo" + + "maniRotumanegAromanegRwaSandäwegSakhaAramaeg SamariaSambŵrwSasacegSa" + + "ntaliNgambeiegSangwSisilegSgotegSasareseg SardiniaCwrdeg DeheuolSene" + + "caSenaSeriSelcypegKoyraboro SenniHen WyddelegSamogitegTachelhitShanA" + + "rabeg ChadSidamoIs-silesiegSami DeheuolSami LwleSami InariSami Scolt" + + "SonincegSogdegSranan TongoSereregSahoFfriseg SaterlandSwcwmaSwsŵegSw" + + "meregComoregHen SyriegSyriegSilesiegTuluTimnegTesoTerenaTetumegTigre" + + "gTifegTocelawegTsakhuregKlingonLlingitTalyshegTamashecegTok PisinTar" + + "okoTsaconegTwmbwcaTwfalwegTasawaqTwfwniegTamaseit Canolbarth MorocoF" + + "otiacegWgaritegUmbunduY GwraiddFaiegFenisegFepsFflemeg GorllewinolFo" + + "tegFunjoWalseregWalamoWinarayegWashoWarlpiriCalmycegSogaIangbenIemba" + + "egCantoneegZapotecegBlisssymbolsZêlandegTamaseit SafonolZuniDim cynn" + + "wys ieithyddolZazäegArabeg Modern SafonolAserbaijaneg DeheuolAlmaene" + + "g AwstriaAlmaeneg Safonol y SwistirSaesneg AwstraliaSaesneg CanadaSa" + + "esneg PrydainSaesneg AmericaSbaeneg America LadinSbaeneg EwropSbaene" + + "g MecsicoFfrangeg CanadaFfrangeg y SwistirSacsoneg IselFflemegPortiw" + + "geeg BrasilPortiwgeeg EwropMoldofegSerbo-CroategSwahili’r CongoTsiei" + + "neeg SymledigTsieineeg Traddodiadol", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0007, 0x000f, 0x0018, 0x0023, 0x0029, 0x0030, 0x0038, + 0x003e, 0x0044, 0x004a, 0x0051, 0x005d, 0x0067, 0x0070, 0x0078, + 0x007f, 0x0087, 0x008f, 0x0096, 0x009e, 0x00a5, 0x00ae, 0x00b9, + 0x00c2, 0x00c8, 0x00cb, 0x00d2, 0x00de, 0x00e8, 0x00ef, 0x00f4, + 0x00fc, 0x0102, 0x010a, 0x010d, 0x0112, 0x0119, 0x0122, 0x0129, + 0x0130, 0x0136, 0x013c, 0x0141, 0x0148, 0x0150, 0x0158, 0x0160, + 0x0173, 0x017c, 0x018b, 0x0193, 0x019b, 0x01a3, 0x01aa, 0x01af, + 0x01b6, 0x01bb, 0x01bb, 0x01c2, 0x01cd, 0x01d5, 0x01dc, 0x01e2, + // Entry 40 - 7F + 0x01ed, 0x01f6, 0x0201, 0x0205, 0x020a, 0x0213, 0x0216, 0x021e, + 0x0225, 0x022e, 0x0236, 0x023e, 0x0245, 0x024a, 0x0250, 0x0258, + 0x0260, 0x026b, 0x0272, 0x0279, 0x027f, 0x0285, 0x028e, 0x0294, + 0x0298, 0x02a0, 0x02a8, 0x02ae, 0x02ba, 0x02bf, 0x02c8, 0x02cf, + 0x02d4, 0x02dd, 0x02e9, 0x02f0, 0x02f9, 0x0302, 0x0307, 0x0310, + 0x0319, 0x0321, 0x0328, 0x032f, 0x0335, 0x033d, 0x0345, 0x0356, + 0x035d, 0x0363, 0x036c, 0x037b, 0x038a, 0x0399, 0x039f, 0x03a5, + 0x03ae, 0x03b4, 0x03b9, 0x03be, 0x03c4, 0x03cc, 0x03d0, 0x03d6, + // Entry 80 - BF + 0x03dc, 0x03e6, 0x03ed, 0x03f5, 0x03fa, 0x0401, 0x0406, 0x0413, + 0x041b, 0x0421, 0x0427, 0x0435, 0x043a, 0x0442, 0x044a, 0x0452, + 0x0459, 0x045e, 0x0465, 0x046c, 0x0472, 0x0477, 0x0487, 0x048f, + 0x0495, 0x049c, 0x04a3, 0x04a9, 0x04b0, 0x04b4, 0x04bc, 0x04c5, + 0x04cb, 0x04d1, 0x04d7, 0x04df, 0x04e6, 0x04ef, 0x04f5, 0x04fd, + 0x0501, 0x0508, 0x050e, 0x0517, 0x051f, 0x0526, 0x052c, 0x0531, + 0x053f, 0x0545, 0x0545, 0x054e, 0x0552, 0x0559, 0x055e, 0x0566, + 0x057a, 0x0588, 0x0591, 0x0598, 0x059f, 0x05a5, 0x05af, 0x05b6, + // Entry C0 - FF + 0x05c4, 0x05d3, 0x05de, 0x05e4, 0x05eb, 0x05f4, 0x05fc, 0x0603, + 0x0611, 0x0611, 0x0619, 0x0626, 0x0635, 0x0638, 0x064f, 0x0659, + 0x0659, 0x065f, 0x0666, 0x066d, 0x066d, 0x0674, 0x067b, 0x067b, + 0x067b, 0x0682, 0x0688, 0x0688, 0x068c, 0x0694, 0x069a, 0x06ad, + 0x06b5, 0x06b5, 0x06b9, 0x06b9, 0x06be, 0x06c5, 0x06c5, 0x06c5, + 0x06c5, 0x06cb, 0x06cf, 0x06d5, 0x06dd, 0x06e5, 0x06e9, 0x06ed, + 0x06ed, 0x06f1, 0x06f8, 0x06f8, 0x06ff, 0x0706, 0x070b, 0x070b, + 0x070b, 0x0713, 0x0719, 0x0719, 0x071f, 0x071f, 0x0728, 0x0730, + // Entry 100 - 13F + 0x073d, 0x0743, 0x0743, 0x0752, 0x0769, 0x0769, 0x0771, 0x0777, + 0x077c, 0x077c, 0x077c, 0x0782, 0x0787, 0x078e, 0x0793, 0x079e, + 0x079e, 0x07a5, 0x07b4, 0x07be, 0x07be, 0x07c4, 0x07c8, 0x07cc, + 0x07cc, 0x07d7, 0x07dd, 0x07e3, 0x07f0, 0x07f0, 0x07f6, 0x0802, + 0x0802, 0x080c, 0x081c, 0x081f, 0x082d, 0x083b, 0x0847, 0x0850, + 0x0861, 0x0872, 0x087a, 0x087c, 0x0882, 0x0882, 0x0886, 0x088b, + 0x089f, 0x08a3, 0x08ac, 0x08ac, 0x08c0, 0x08d2, 0x08d2, 0x08d2, + 0x08db, 0x08e1, 0x08e1, 0x08e9, 0x08fb, 0x08fb, 0x08fb, 0x0900, + // Entry 140 - 17F + 0x0909, 0x090e, 0x090e, 0x0916, 0x0916, 0x0920, 0x0926, 0x092d, + 0x0939, 0x0939, 0x093d, 0x0943, 0x0949, 0x0951, 0x0959, 0x0959, + 0x0959, 0x095f, 0x0965, 0x096d, 0x097a, 0x0986, 0x0986, 0x0993, + 0x099a, 0x09a0, 0x09a3, 0x09a8, 0x09a8, 0x09bb, 0x09bb, 0x09c1, + 0x09c9, 0x09d6, 0x09d6, 0x09da, 0x09da, 0x09e0, 0x09e0, 0x09ec, + 0x09f4, 0x09f4, 0x09f8, 0x0a00, 0x0a08, 0x0a14, 0x0a1b, 0x0a1b, + 0x0a21, 0x0a30, 0x0a30, 0x0a30, 0x0a37, 0x0a3d, 0x0a45, 0x0a4b, + 0x0a52, 0x0a59, 0x0a59, 0x0a66, 0x0a6b, 0x0a71, 0x0a76, 0x0a7d, + // Entry 180 - 1BF + 0x0a7d, 0x0a7d, 0x0a7d, 0x0a83, 0x0a8c, 0x0a91, 0x0a95, 0x0aa3, + 0x0aab, 0x0ab5, 0x0ab5, 0x0aba, 0x0abe, 0x0ac6, 0x0acb, 0x0acb, + 0x0acb, 0x0ad2, 0x0ad2, 0x0ad8, 0x0ae0, 0x0ae9, 0x0af1, 0x0af6, + 0x0af6, 0x0afc, 0x0b04, 0x0b0a, 0x0b0f, 0x0b17, 0x0b26, 0x0b34, + 0x0b38, 0x0b40, 0x0b4b, 0x0b51, 0x0b59, 0x0b60, 0x0b64, 0x0b74, + 0x0b7b, 0x0b8b, 0x0b90, 0x0b98, 0x0b9f, 0x0b9f, 0x0b9f, 0x0ba4, + 0x0baf, 0x0baf, 0x0bb6, 0x0bba, 0x0bc7, 0x0bcd, 0x0bd1, 0x0bd7, + 0x0bde, 0x0be4, 0x0bed, 0x0bf2, 0x0bfc, 0x0bfc, 0x0c02, 0x0c11, + // Entry 1C0 - 1FF + 0x0c18, 0x0c22, 0x0c2a, 0x0c32, 0x0c37, 0x0c3d, 0x0c43, 0x0c50, + 0x0c5a, 0x0c61, 0x0c69, 0x0c73, 0x0c7a, 0x0c82, 0x0c90, 0x0ca4, + 0x0ca4, 0x0caf, 0x0cbf, 0x0cc8, 0x0cd2, 0x0cd8, 0x0ce3, 0x0ce9, + 0x0cf8, 0x0d03, 0x0d03, 0x0d0e, 0x0d16, 0x0d20, 0x0d20, 0x0d20, + 0x0d25, 0x0d2b, 0x0d34, 0x0d34, 0x0d34, 0x0d3c, 0x0d3f, 0x0d48, + 0x0d4d, 0x0d5c, 0x0d64, 0x0d6b, 0x0d72, 0x0d72, 0x0d7b, 0x0d80, + 0x0d87, 0x0d8d, 0x0d9f, 0x0dad, 0x0db3, 0x0db7, 0x0dbb, 0x0dc3, + 0x0dd2, 0x0dde, 0x0de7, 0x0df0, 0x0df4, 0x0dff, 0x0e05, 0x0e10, + // Entry 200 - 23F + 0x0e10, 0x0e1c, 0x0e25, 0x0e2f, 0x0e39, 0x0e41, 0x0e47, 0x0e53, + 0x0e5a, 0x0e5e, 0x0e6f, 0x0e75, 0x0e7c, 0x0e83, 0x0e8a, 0x0e94, + 0x0e9a, 0x0ea2, 0x0ea6, 0x0eac, 0x0eb0, 0x0eb6, 0x0ebd, 0x0ec3, + 0x0ec8, 0x0ed1, 0x0eda, 0x0ee1, 0x0ee8, 0x0ef0, 0x0efa, 0x0efa, + 0x0f03, 0x0f03, 0x0f09, 0x0f11, 0x0f11, 0x0f11, 0x0f18, 0x0f20, + 0x0f27, 0x0f2f, 0x0f49, 0x0f51, 0x0f59, 0x0f60, 0x0f69, 0x0f6e, + 0x0f75, 0x0f79, 0x0f8c, 0x0f8c, 0x0f91, 0x0f91, 0x0f96, 0x0f9e, + 0x0fa4, 0x0fad, 0x0fb2, 0x0fba, 0x0fba, 0x0fc2, 0x0fc2, 0x0fc6, + // Entry 240 - 27F + 0x0fc6, 0x0fc6, 0x0fcd, 0x0fd4, 0x0fd4, 0x0fdd, 0x0fe6, 0x0ff2, + 0x0ffb, 0x0ffb, 0x100b, 0x100f, 0x1025, 0x102c, 0x1041, 0x1055, + 0x1065, 0x107f, 0x1090, 0x109e, 0x10ad, 0x10bc, 0x10d1, 0x10de, + 0x10ed, 0x10ed, 0x10fc, 0x110e, 0x111b, 0x1122, 0x1133, 0x1143, + 0x114b, 0x1158, 0x1169, 0x117b, 0x1191, + }, + }, + { // da + daLangStr, + daLangIdx, + }, + { // dav + "KiakanKiamhariKiarabuKibelarusiKibulgariaKibanglaKicheckiKijerumaniKigir" + + "ikiKingerezaKihispaniaKiajemiKifaransaKihausaKihindiKihungariKiindon" + + "esiaKiigboKiitalianoKijapaniKijavaKikambodiaKikoreaKimalesiaKiburmaK" + + "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + + "rubaKichinaKizuluKitaita", + []uint16{ // 265 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x0054, 0x0054, 0x005e, + 0x005e, 0x005e, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0075, + 0x0075, 0x007c, 0x007c, 0x007c, 0x007c, 0x0085, 0x0085, 0x0085, + // Entry 40 - 7F + 0x0085, 0x0090, 0x0090, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x00a0, 0x00a0, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00b8, 0x00b8, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00c8, 0x00c8, 0x00cf, 0x00cf, 0x00cf, + 0x00d7, 0x00d7, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e9, 0x00e9, 0x00f2, + // Entry 80 - BF + 0x00f2, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0101, 0x0107, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x0121, 0x0121, 0x0128, 0x0128, 0x0128, 0x0132, 0x0132, 0x0132, + 0x0132, 0x0132, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x0143, + 0x0149, 0x0149, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x015c, 0x015c, 0x0163, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry C0 - FF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 100 - 13F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0170, + }, + }, + { // de + deLangStr, + deLangIdx, + }, + { // de-AT + "Hausakaribische SpracheChibcha-SpracheDelawarischFriulanischHawaiianisch" + + "Miao-SpracheMuskogee-SpracheNiueanischPangasinensischSchlesischmoder" + + "nes HocharabischSerbokroatisch", + []uint16{ // 610 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + // Entry 40 - 7F + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + // Entry 80 - BF + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + // Entry C0 - FF + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + // Entry 100 - 13F + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + // Entry 140 - 17F + 0x003c, 0x003c, 0x003c, 0x0048, 0x0048, 0x0048, 0x0048, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + // Entry 180 - 1BF + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, + 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + // Entry 1C0 - 1FF + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + // Entry 200 - 23F + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + // Entry 240 - 27F + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x00aa, + }, + }, + { // de-CH + "WeissrussischAceh-SpracheAcholi-SpracheBasaa-SpracheBikol-SpracheBini-Sp" + + "racheChibcha-SpracheDinka-SprachePangwe-SpracheGbaya-SpracheKimbundu" + + "-SpracheMuskogee-SpracheAltpreussisch", + []uint16{ // 472 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + // Entry 40 - 7F + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + // Entry 80 - BF + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x0019, 0x0027, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + // Entry C0 - FF + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0041, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + // Entry 100 - 13F + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + // Entry 140 - 17F + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + // Entry 180 - 1BF + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + // Entry 1C0 - 1FF + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00b1, + }, + }, + { // de-LU + "Belarussisch", + []uint16{ // 15 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + }, + }, + { // dje + "Akan senniAmhaarik senniLaaraw senniBelaruus senniBulagaari senniBengali" + + " senniCek senniAlmaŋ senniGrek senniInglisi senniEspaaɲe senniFarsi " + + "senniFransee senniHawsance senniInduu senniHungaari senniIndoneesi s" + + "enniIboo senniItaali senniJaponee senniJavanee senniKmeer senniKoree" + + " senniMaleezi senniBurme senniNeepal senniHolandee senniPunjaabi sen" + + "niiPolonee senniPortugee senniRumaani senniRuusi senniRwanda senniSo" + + "maali senniSuweede senniTamil senniTaailandu senniTurku senniUkreen " + + "senniUrdu senniVietnaam senniYorbance senniSinuwa senniZulu senniZar" + + "maciine", + []uint16{ // 270 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0032, 0x0041, + 0x0041, 0x0041, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0063, 0x0063, 0x0063, 0x0063, 0x006d, 0x007a, 0x007a, 0x0088, + 0x0088, 0x0088, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00ae, + 0x00ae, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00c7, 0x00c7, 0x00c7, + // Entry 40 - 7F + 0x00c7, 0x00d6, 0x00d6, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00ec, 0x00ec, 0x00f9, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0111, 0x0111, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x0129, 0x0129, 0x0134, 0x0134, 0x0134, + 0x0140, 0x0140, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, + 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x015d, 0x015d, 0x016a, + // Entry 80 - BF + 0x016a, 0x0178, 0x0178, 0x0178, 0x0178, 0x0185, 0x0190, 0x019c, + 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, + 0x019c, 0x019c, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, + 0x01b6, 0x01b6, 0x01c1, 0x01c1, 0x01c1, 0x01d0, 0x01d0, 0x01d0, + 0x01d0, 0x01d0, 0x01db, 0x01db, 0x01db, 0x01db, 0x01db, 0x01e7, + 0x01f1, 0x01f1, 0x01f1, 0x01ff, 0x01ff, 0x01ff, 0x01ff, 0x01ff, + 0x01ff, 0x020d, 0x020d, 0x0219, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + // Entry C0 - FF + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + // Entry 100 - 13F + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x022d, + }, + }, + { // dsb + "afaršćinaabchazšćinaafrikansakanšćinaamharšćinaaragonšćinaarabšćinaasamš" + + "ćinaawaršćinaaymaršćinaazerbajdžanšćinabaškiršćinaběłorušćinabulgar" + + "šćinabislamšćinabambarabengalšćinatibetšćinabretonšćinabosnišćinaka" + + "tanlanšćinačamoršćinakorsišćinakričešćinawalizišćinadanšćinanimšćina" + + "divehidzongkhaewegrichišćinaengelšćinaesperantošpańšćinaestišćinabas" + + "kišćinapersišćinafinšćinafidžišćinaferejšćinafrancojšćinafrizišćinai" + + "ršćinašotišćinagalicišćinaguaranigudžaratšćinamanšćinahausahebrejšći" + + "nahindišćinachorwatšćinahaitišćinahungoršćinaarmeńšćinainterlinguain" + + "donešćinaigbosichuan yiinupiakidoislandšćinaitalšćinainuitšćinajapań" + + "šćinajavašćinageorgišćinakikuyukazachšćinagrönlandšćinakambodžanšći" + + "nakannadšćinakorejańšćinakašmiršćinakurdišćinakornišćinakirgišćinała" + + "tyńšćinaluxemburgšćinagandšćinalimburšćinalingalalaošćinalitawšćinal" + + "uba-katangaletišćinamalgašćinamaorišćinamakedońšćinamalajamšćinamong" + + "olšćinamaratišćinamalajšćinamaltašćinaburmašćinanaurušćinapódpołnocn" + + "e ndebelenepalšćinanižozemšćinanorwegske nynorsknorwegske bokmålnava" + + "hookcitanšćinaoromoorojišćinapandžabšćinapólšćinapaštunšćinaportugal" + + "šćinakečuaretoromańšćinakirundišćinarumunšćinarušćinakinjarwandasan" + + "skritsardinšćinasindšćinalapšćinasangosingalšćinasłowakšćinasłowjeńš" + + "ćinasamošćinašonšćinasomališćinaalbanšćinaserbišćinasiswatipódpołdn" + + "jowa sotšćina (Sesotho)sundanšćinašwedšćinaswahilišćinatamilšćinatel" + + "ugšćinatadžikišćinathailandšćinatigrinjaturkmeńšćinatswanatonganšćin" + + "aturkojšćinatsongatataršćinatahitišćinaujguršćinaukrainšćinaurdušćin" + + "ausbekšćinavietnamšćinavolapükwalonšćinawolofxhosajidišćinajorubšćin" + + "azhuangchinšćinazuluaghemanglosaksojšćinaarawkašćinapareasturšćinabe" + + "mbabenabodobugišćinachigachoctawšćinacherokeesoranitaitazarmadolnose" + + "rbšćinadualajola-fonyiembufilipinšćinagagauzšćinagotišćinašwicarska " + + "nimšćinagusiihawaiišćinagórnoserbšćinangombamachamekabylšćinakambama" + + "kondekapverdšćinakoyra chiinikalenjinkomi-permyakkonkanišambalabafia" + + "langilakotšćinaluoluhyamasaišćinamerumauriciska kreolšćinamakhuwa-me" + + "ettometa’mohawkšćinamundangkriknamadolnonimšćinakwasion’konuernyanko" + + "leprusčinakʼicheʼromborwasamburusangusicilianišćinasenakoyra sennita" + + "šelhitpódpołdnjowa samišćinalule-samišćinainari-samišćinaskolt-sami" + + "šćinasaterfrizišćinatesotasawaqcentralnoatlaski tamazightnjeznata r" + + "ěcvaivunjosogastandardny marokkański tamazightžedno rěcne wopśimjeś" + + "emoderna wusokoarabšćinaawstriska nimšćinašwicarska wusokonimšćinaaw" + + "stralska engelšćinakanadiska engelšćinabritiska engelšćinaameriska e" + + "ngelšćinałatyńskoamerikańska špańšćinaeuropejska špańšćinamexikańska" + + " špańšćinakanadiska francojšćinašwicarska francojšćinaflamšćinabrazi" + + "lska portugalšćinaeuropejska portugalšćinamoldawišćinaserbochorwatšć" + + "inakongojska swahilišćinachinšćina (zjadnorjona)chinšćina (tradicion" + + "alna)", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000b, 0x0018, 0x0018, 0x0020, 0x002b, 0x0037, 0x0044, + 0x004f, 0x005a, 0x0065, 0x0071, 0x0084, 0x0092, 0x00a1, 0x00ae, + 0x00bb, 0x00c2, 0x00cf, 0x00db, 0x00e8, 0x00f4, 0x0103, 0x0103, + 0x0110, 0x011c, 0x011f, 0x0129, 0x0129, 0x0129, 0x0136, 0x0140, + 0x014a, 0x0150, 0x0158, 0x015b, 0x0168, 0x0174, 0x017d, 0x018a, + 0x0195, 0x01a1, 0x01ad, 0x01ad, 0x01b7, 0x01c4, 0x01d0, 0x01de, + 0x01ea, 0x01f3, 0x01ff, 0x020c, 0x0213, 0x0223, 0x022d, 0x0232, + 0x023f, 0x024b, 0x024b, 0x0259, 0x0265, 0x0272, 0x027f, 0x027f, + // Entry 40 - 7F + 0x028a, 0x0297, 0x0297, 0x029b, 0x02a5, 0x02ac, 0x02af, 0x02bc, + 0x02c7, 0x02d3, 0x02e0, 0x02eb, 0x02f8, 0x02f8, 0x02fe, 0x02fe, + 0x030b, 0x031b, 0x032c, 0x0339, 0x0348, 0x0348, 0x0356, 0x0362, + 0x0362, 0x036e, 0x037a, 0x0388, 0x0398, 0x03a3, 0x03b0, 0x03b7, + 0x03c1, 0x03cd, 0x03d9, 0x03e4, 0x03f0, 0x03f0, 0x03fc, 0x040b, + 0x0419, 0x0426, 0x0433, 0x043f, 0x044b, 0x0457, 0x0463, 0x0478, + 0x0484, 0x0484, 0x0493, 0x04a4, 0x04b5, 0x04b5, 0x04bb, 0x04bb, + 0x04c9, 0x04c9, 0x04ce, 0x04da, 0x04da, 0x04e9, 0x04e9, 0x04f4, + // Entry 80 - BF + 0x0502, 0x0511, 0x0517, 0x0528, 0x0536, 0x0542, 0x054b, 0x0556, + 0x055e, 0x056b, 0x0576, 0x0580, 0x0585, 0x0592, 0x05a0, 0x05b0, + 0x05bb, 0x05c6, 0x05d3, 0x05df, 0x05eb, 0x05f2, 0x0615, 0x0622, + 0x062e, 0x063c, 0x0648, 0x0654, 0x0663, 0x0672, 0x067a, 0x0689, + 0x068f, 0x069c, 0x06a9, 0x06af, 0x06bb, 0x06c8, 0x06d4, 0x06e1, + 0x06ec, 0x06f8, 0x06f8, 0x0706, 0x070e, 0x071a, 0x071f, 0x0724, + 0x072f, 0x073b, 0x0741, 0x074c, 0x0750, 0x0750, 0x0750, 0x0750, + 0x0750, 0x0750, 0x0750, 0x0755, 0x0755, 0x0755, 0x0755, 0x0755, + // Entry C0 - FF + 0x0755, 0x0755, 0x0767, 0x0767, 0x0767, 0x0774, 0x0774, 0x0774, + 0x0774, 0x0774, 0x0774, 0x0774, 0x0774, 0x0778, 0x0778, 0x0784, + 0x0784, 0x0784, 0x0784, 0x0784, 0x0784, 0x0784, 0x0784, 0x0784, + 0x0784, 0x0784, 0x0789, 0x0789, 0x078d, 0x078d, 0x078d, 0x078d, + 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, + 0x078d, 0x078d, 0x0791, 0x0791, 0x0791, 0x079c, 0x079c, 0x079c, + 0x079c, 0x079c, 0x079c, 0x079c, 0x079c, 0x079c, 0x07a1, 0x07a1, + 0x07a1, 0x07a1, 0x07a1, 0x07a1, 0x07af, 0x07af, 0x07b7, 0x07b7, + // Entry 100 - 13F + 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, + 0x07c2, 0x07c2, 0x07c2, 0x07c2, 0x07c2, 0x07c7, 0x07c7, 0x07d7, + 0x07d7, 0x07dc, 0x07dc, 0x07e6, 0x07e6, 0x07e6, 0x07ea, 0x07ea, + 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, + 0x07ea, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, + 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x0805, 0x0805, 0x0805, 0x0805, + 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, + 0x0805, 0x0810, 0x0810, 0x0810, 0x0825, 0x0825, 0x0825, 0x082a, + // Entry 140 - 17F + 0x082a, 0x082a, 0x082a, 0x0837, 0x0837, 0x0837, 0x0837, 0x0837, + 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, + 0x0848, 0x0848, 0x084e, 0x0855, 0x0855, 0x0855, 0x0855, 0x0855, + 0x0861, 0x0861, 0x0861, 0x0866, 0x0866, 0x0866, 0x0866, 0x0866, + 0x086d, 0x087b, 0x087b, 0x087b, 0x087b, 0x087b, 0x087b, 0x0887, + 0x0887, 0x0887, 0x0887, 0x088f, 0x088f, 0x089b, 0x08a2, 0x08a2, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08aa, 0x08af, + 0x08af, 0x08af, 0x08af, 0x08af, 0x08b4, 0x08b4, 0x08b4, 0x08b4, + // Entry 180 - 1BF + 0x08b4, 0x08b4, 0x08b4, 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c0, + 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c3, 0x08c3, 0x08c8, 0x08c8, + 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08d4, + 0x08d4, 0x08d4, 0x08d4, 0x08d4, 0x08d8, 0x08ef, 0x08ef, 0x08fd, + 0x0904, 0x0904, 0x0904, 0x0904, 0x0904, 0x0911, 0x0911, 0x0911, + 0x0918, 0x0918, 0x091c, 0x091c, 0x091c, 0x091c, 0x091c, 0x091c, + 0x091c, 0x091c, 0x091c, 0x0920, 0x092f, 0x092f, 0x092f, 0x092f, + 0x092f, 0x0935, 0x0935, 0x0935, 0x0935, 0x0935, 0x093b, 0x093b, + // Entry 1C0 - 1FF + 0x093f, 0x093f, 0x093f, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, + 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, + 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0950, + 0x0950, 0x0959, 0x0959, 0x0959, 0x0959, 0x0959, 0x0959, 0x0959, + 0x095e, 0x095e, 0x095e, 0x095e, 0x095e, 0x095e, 0x0961, 0x0961, + 0x0961, 0x0961, 0x0968, 0x0968, 0x0968, 0x0968, 0x0968, 0x096d, + 0x097d, 0x097d, 0x097d, 0x097d, 0x097d, 0x0981, 0x0981, 0x0981, + 0x098c, 0x098c, 0x098c, 0x0995, 0x0995, 0x0995, 0x0995, 0x0995, + // Entry 200 - 23F + 0x0995, 0x09af, 0x09bf, 0x09d0, 0x09e1, 0x09e1, 0x09e1, 0x09e1, + 0x09e1, 0x09e1, 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f2, + 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f6, 0x09f6, 0x09f6, 0x09f6, + 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, + 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, + 0x09fd, 0x09fd, 0x0a17, 0x0a17, 0x0a17, 0x0a17, 0x0a24, 0x0a27, + 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a2c, 0x0a2c, + 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a30, + // Entry 240 - 27F + 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, + 0x0a30, 0x0a30, 0x0a51, 0x0a51, 0x0a6b, 0x0a6b, 0x0a84, 0x0a84, + 0x0a98, 0x0ab3, 0x0aca, 0x0ae0, 0x0af5, 0x0b0a, 0x0b2e, 0x0b46, + 0x0b5f, 0x0b5f, 0x0b77, 0x0b90, 0x0b90, 0x0b9b, 0x0bb4, 0x0bce, + 0x0bdc, 0x0bef, 0x0c07, 0x0c20, 0x0c3b, + }, + }, + { // dua + "duálá", + []uint16{ // 274 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, + }, + }, + { // dyo + "akanamharikarabbelarusbulgaaribengalisekalmangreekangleespañolpersanfran" + + "sehausaenduongruaindoneesiigboitaliensaponeesavaneekmeerkoreemaleesi" + + "birmaninepaleesneerlandepenjabipoloneesportugeesrumeenrusruandasomal" + + "isueditamiltayturkiukrainurduvietnamyorubasinuasulujoola", + []uint16{ // 276 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000b, 0x000b, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0016, 0x001e, + 0x001e, 0x001e, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x002d, 0x002d, 0x002d, 0x002d, 0x0032, 0x0037, 0x0037, 0x003f, + 0x003f, 0x003f, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x0050, + 0x0050, 0x0054, 0x0054, 0x0054, 0x0054, 0x005a, 0x005a, 0x005a, + // Entry 40 - 7F + 0x005a, 0x0063, 0x0063, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, + 0x006e, 0x006e, 0x0075, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x007c, 0x0081, 0x0081, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0086, 0x0086, 0x0086, 0x008d, 0x008d, 0x0094, 0x0094, 0x0094, + 0x009c, 0x009c, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00ac, 0x00ac, 0x00b4, + // Entry 80 - BF + 0x00b4, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00c3, 0x00c6, 0x00cc, + 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00cc, 0x00cc, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d7, 0x00d7, 0x00dc, 0x00dc, 0x00dc, 0x00df, 0x00df, 0x00df, + 0x00df, 0x00df, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00ea, + 0x00ee, 0x00ee, 0x00ee, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, + 0x00f5, 0x00fb, 0x00fb, 0x0100, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + // Entry C0 - FF + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + // Entry 100 - 13F + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0109, + }, + }, + { // dz + "ཨ་ཕར་ཁཨཱབ་ཁ་ཟི་ཡ་ཁཨཕ་རི་ཀཱནས་ཁཨམ་ཧ་རིཀ་ཁཨེ་ར་བིཀ་ཁཨ་ས་མིས་ཁཨ་ཛར་བྷའི་ཇཱན" + + "་ཁབེལ་ཨ་རུས་ཁབཱལ་གེ་རི་ཡཱན་ཁབངྒ་ལ་ཁབོད་ཁབྷོས་ནི་ཡཱན་ཁཀེ་ཊ་ལཱན་ཁཅེཀ" + + "་ཁཝེལཤ་ཁཌེ་ནིཤ་ཁཇཱར་མཱན་ཁདི་བེ་ཧི་ཁརྫོང་ཁགྲིཀ་ཁཨིང་ལིཤ་ཁཨེས་པ་རཱན་" + + "ཏོ་ཁཨིས་པེ་ནིཤ་ཁཨེས་ཊོ་ནི་ཡཱན་ཁབཱསཀ་ཁཔར་ཤི་ཡཱན་ཁཕི་ནིཤ་ཁཕི་ཇི་ཡཱན་" + + "ཁཕཱ་རོ་ཨིས་ཁཕྲནཅ་ཁནུབ་ཕྼི་སི་ཡན་ཁཨཱའི་རིཤ་ཁགལ་ཨིས་ཨི་ཡན་ཁགུ་ཝ་ར་ནི" + + "་ཁགུ་ཇ་ར་ཏི་ཁཧཝ་ས་ཁཧེ་བྲུ་ཁཧིན་དི་ཁཀྲོ་ཨེ་ཤི་ཡཱན་ཁཧེ་ཏི་ཡཱན་ཁཧཱང་ག" + + "ྷ་རི་ཡཱན་ཁཨར་མི་ནི་ཡཱན་ཁཨིན་ཌོ་ནེ་ཤི་ཡཱན་ཁཨིག་བོ་ཁཨ་ཡིས་ལེན་ཌིཀ་ཁཨ" + + "ི་ཊ་ལི་ཡཱན་ཁཇཱ་པཱ་ནིས་ཁཇཱ་བ་ནིས་ཁཇཽ་ཇི་ཡཱན་ཁཀ་ཛགས་ཁཁེ་མེར་ཁཀ་ན་ཌ་ཁ" + + "ཀོ་རི་ཡཱན་ཁཀཱཤ་མི་རི་ཁཀར་ཌིཤ་ཁཀིར་གིས་ཁལེ་ཊིན་ཁལག་ཛམ་བོརྒ་ཁལཱ་ཝོས་" + + "ཁལི་ཐུ་ཝེ་ནི་ཡཱན་ཁལཊ་བི་ཡཱན་ཁམ་ལ་ག་སི་ཁམ་ཨོ་རི་ཁམ་སེ་ཌོ་ནི་ཡཱན་ཁམ་" + + "ལ་ཡ་ལམ་ཁམ་ར་ཐི་ཁམ་ལེ་ཁམཱལ་ཊ་ཁབར་མིས་ཁནེ་པཱལི་ཁཌཆ་ཁནོར་ཝེ་ཇི་ཡཱན་ནོ" + + "རསཀ་ཁནོར་ཝེ་ཇི་ཡཱན་བོཀ་མཱལ་ཁཨོ་རི་ཡ་ཁཔཱན་ཇ་བི་ཁཔོ་ལིཤ་ཁཔཱཤ་ཏོ་ཁཔོར" + + "་ཅུ་གིས་ཁཀྭེ་ཆུ་ཨ་ཁརོ་མེ་ནིཤ་ཁརོ་མེ་ནི་ཡཱན་ཁཨུ་རུ་སུའི་ཁསཾསྐྲྀཏ་ཁས" + + "ིན་དཱི་ཁསིང་ཧ་ལ་ཁསུ་ལོ་བཱཀ་ཁསུ་ལོ་བི་ནི་ཡཱན་ཁསོ་མ་ལི་ཁཨཱལ་བེ་ནི་ཡཱ" + + "ན་ཁསཱར་བྷི་ཡཱན་ཁསཱུན་ད་ནིས་ཁསུའི་ཌིཤ་ཁསྭཱ་ཧི་ལི་ཁཏ་མིལ་ཁཏེ་ལུ་གུ་ཁ" + + "ཏ་ཇིཀ་ཁཐཱའི་ཁཏིག་རི་ཉ་ཁཊཱརཀ་མེན་ཁཊོང་གྷན་ཁཊཱར་ཀིཤ་ཁཊ་ཊར་ཁཝི་གུར་ཁཡ" + + "ུ་ཀེ་རེ་ནི་ཡཱན་ཁཨུར་དུ་ཁཨུས་བེཀ་ཁབེཊ་ནཱ་མིས་ཁཝོ་ལོཕ་ཁཞོ་ས་ཁཡོ་རུ་བ" + + "་ཁརྒྱ་མི་ཁཟུ་ལུ་ཁད་ཀོ་ཏ་ཁཕི་ལི་པི་ནོ་ཁསུ་ཡིས་ཇཱར་མཱན་ཁཧ་ཝ་ཡིའི་ཁཀ་" + + "ཆིན་ཁཀོ་རོ་ཁམན་ཇུ་ཁཤཱན་ཁཁ་ངོ་མ་ཤེསཔསྐད་རིག་ནང་དོན་མེདཔཨཱོས་ཊྲི་ཡཱན" + + "་ཇཱར་མཱན་ཁསུ་ཡིས་གི་མཐོ་སའི་ཇཱར་མཱན་ཁཨཱོས་ཊྲེ་ལི་ཡཱན་ཨིང་ལིཤ་ཁཀེ་ན" + + "་ཌི་ཡཱན་ཨིང་ལིཤ་ཁབྲི་ཊིཤ་ཨིང་ལིཤ་ཁཡུ་ཨེས་ཨིང་ལིཤ་ཁལེ་ཊིན་ཨ་མེ་རི་ཀ" + + "ཱན་གི་ཨིས་པེ་ནིཤ་ཁཡུ་རོབ་ཀྱི་ཨིས་པེ་ནིཤ་ཁཀེ་ན་ཌི་ཡཱན་ཕྲནཅ་ཁསུ་ཡིས་" + + "ཕྲནཅ་ཁཕྷེལེ་མིཤ་ཁབྲ་ཛི་ལི་ཡཱན་པོར་ཅུ་གིས་ཁཨི་བེ་རི་ཡཱན་པོར་ཅུ་གིས་" + + "ཁརྒྱ་མི་ཁ་འཇམ་སངམསྔ་དུས་ཀྱི་རྒྱ་མི་ཁ", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0012, 0x0036, 0x0036, 0x005a, 0x005a, 0x0078, 0x0078, + 0x0096, 0x00b1, 0x00b1, 0x00b1, 0x00de, 0x00de, 0x00ff, 0x012c, + 0x012c, 0x012c, 0x0141, 0x0150, 0x0150, 0x0177, 0x0195, 0x0195, + 0x0195, 0x0195, 0x0195, 0x01a4, 0x01a4, 0x01a4, 0x01b6, 0x01ce, + 0x01e9, 0x0207, 0x0219, 0x0219, 0x022b, 0x0246, 0x0270, 0x0294, + 0x02c1, 0x02d3, 0x02f4, 0x02f4, 0x030c, 0x032d, 0x034e, 0x0360, + 0x038d, 0x03ab, 0x03ab, 0x03d5, 0x03f6, 0x0417, 0x0417, 0x0429, + 0x0441, 0x0459, 0x0459, 0x0486, 0x04a7, 0x04d4, 0x04fe, 0x04fe, + // Entry 40 - 7F + 0x04fe, 0x0534, 0x0534, 0x054c, 0x054c, 0x054c, 0x054c, 0x0579, + 0x05a0, 0x05a0, 0x05c1, 0x05df, 0x0600, 0x0600, 0x0600, 0x0600, + 0x0615, 0x0615, 0x062d, 0x0642, 0x0663, 0x0663, 0x0684, 0x069c, + 0x069c, 0x069c, 0x06b7, 0x06cf, 0x06f3, 0x06f3, 0x06f3, 0x06f3, + 0x070b, 0x073e, 0x073e, 0x075f, 0x077d, 0x077d, 0x0798, 0x07c8, + 0x07e6, 0x07e6, 0x07fe, 0x0810, 0x0825, 0x083d, 0x083d, 0x083d, + 0x0858, 0x0858, 0x0864, 0x08a3, 0x08e8, 0x08e8, 0x08e8, 0x08e8, + 0x08e8, 0x08e8, 0x08e8, 0x0903, 0x0903, 0x0921, 0x0921, 0x0939, + // Entry 80 - BF + 0x0951, 0x0975, 0x0993, 0x09b4, 0x09b4, 0x09de, 0x0a02, 0x0a02, + 0x0a1d, 0x0a1d, 0x0a38, 0x0a38, 0x0a38, 0x0a53, 0x0a74, 0x0aa7, + 0x0aa7, 0x0aa7, 0x0ac2, 0x0aef, 0x0b16, 0x0b16, 0x0b16, 0x0b3a, + 0x0b58, 0x0b79, 0x0b8e, 0x0bac, 0x0bc1, 0x0bd3, 0x0bf1, 0x0c0f, + 0x0c0f, 0x0c2a, 0x0c45, 0x0c45, 0x0c57, 0x0c57, 0x0c6f, 0x0ca2, + 0x0cba, 0x0cd5, 0x0cd5, 0x0cf9, 0x0cf9, 0x0cf9, 0x0d11, 0x0d23, + 0x0d23, 0x0d3e, 0x0d3e, 0x0d56, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + // Entry C0 - FF + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, + // Entry 100 - 13F + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d83, 0x0d83, + 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, + 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, + 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, + 0x0d83, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, + 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, + 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, + 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0dda, 0x0dda, 0x0dda, 0x0dda, + // Entry 140 - 17F + 0x0dda, 0x0dda, 0x0dda, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, + 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, + 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, + 0x0df8, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, + 0x0e0d, 0x0e0d, 0x0e0d, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + // Entry 180 - 1BF + 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + 0x0e22, 0x0e22, 0x0e22, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + // Entry 1C0 - 1FF + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e46, 0x0e46, 0x0e46, 0x0e46, + // Entry 200 - 23F + 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, + 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, + 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, + 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, + 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, + 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e67, 0x0e67, + 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, + 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, + // Entry 240 - 27F + 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, + 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0ea0, 0x0ea0, 0x0ea0, 0x0ea0, + 0x0ee2, 0x0f33, 0x0f7e, 0x0fbd, 0x0ff0, 0x1020, 0x1086, 0x10cb, + 0x10cb, 0x10cb, 0x1101, 0x1128, 0x1128, 0x1149, 0x1194, 0x11df, + 0x11df, 0x11df, 0x11df, 0x120f, 0x1248, + }, + }, + { // ebu + "KĩakanKĩamhariKĩarabuKĩmbelarusiKĩbulgariaKĩbanglaKĩchekiKĩnjeremaniKĩng" + + "rikiKĩthunguKĩhispaniaKĩanjemiKĩfaransaKĩhausaKĩhindĩKĩhungariKĩindo" + + "nesiaKĩigboKĩitalianoKĩnjapaniKĩjavaKĩkambodiaKĩkoreaKĩmalesiaKĩburm" + + "aKĩnepaliKĩholanziKĩpunjabiKĩpolandiKĩrenoKĩromaniaKĩrusiKĩnyarwanda" + + "KĩsomaliKĩswidiKĩtamilKĩtailandiKĩturukiKĩukraniaKĩurduKĩvietinamuKĩ" + + "yorubaKĩchinaKĩzuluKĩembu", + []uint16{ // 279 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0010, 0x0010, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0024, 0x002f, + 0x002f, 0x002f, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x004c, 0x004c, 0x004c, 0x004c, 0x0055, 0x005e, 0x005e, 0x0069, + 0x0069, 0x0069, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x0084, + 0x0084, 0x008d, 0x008d, 0x008d, 0x008d, 0x0097, 0x0097, 0x0097, + // Entry 40 - 7F + 0x0097, 0x00a3, 0x00a3, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00b5, 0x00b5, 0x00bf, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00d1, 0x00d1, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00e3, 0x00e3, 0x00eb, 0x00eb, 0x00eb, + 0x00f4, 0x00f4, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, + 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x0108, 0x0108, 0x0112, + // Entry 80 - BF + 0x0112, 0x0119, 0x0119, 0x0119, 0x0119, 0x0123, 0x012a, 0x0136, + 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, + 0x0136, 0x0136, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x0147, 0x0147, 0x014f, 0x014f, 0x014f, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, 0x016d, + 0x0174, 0x0174, 0x0174, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0189, 0x0189, 0x0191, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + // Entry C0 - FF + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + // Entry 100 - 13F + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x019f, + }, + }, + { // ee + "abkhaziagbeafrikaangbeblugbeamhariagbeArabiagbeassamegbeaymargbeazerbaij" + + "angbebelarusiagbebulgariagbebambaragbeBengaligbetibetagbebretongbebo" + + "sniagbekatalagbetsɛkgbewalesgbedenmarkgbeGermaniagbedivehgbedzongkha" + + "gbeEʋegbegrisigbeYevugbeesperantogbeSpanishgbeestoniagbebasqugbepers" + + "iagbefinlanɖgbefidzigbeFransegbeirelanɖgbegalatagbeguarangbegujarati" + + "hausagbehebrigbeHindigbekroatiagbehaitigbehungarigbearmeniagbeIndone" + + "siagbeigbogbeicelanɖgbeItaliagbeJapangbedzavangbegɔgiagbekazakhstang" + + "bekhmergbekannadagbeKoreagbekashmirgbekurdiagbekirghistangbelatinlak" + + "sembɔggbelingalalaogbelithuaniagbelatviagbemalagasegbemaorgbemakedon" + + "iagbemalayagbemongoliagbemarathiagbemalaygbemaltagbeburmagbedziehe n" + + "debelegbenepalgbeHollandgbenɔweigbe ninɔsknɔweigbe bokmålnyanjagbeor" + + "iyagbeossetiagbepundzabgbePolishgbepashtogbePortuguesegbekwetsuagber" + + "omanshgberundigberomaniagbeRussiagberuwandagbesanskrigbesindhgbedzie" + + "he samigbesangogbesinhalgbeslovakiagbesloveniagbesamoagbeshonagbesom" + + "aliagbealbaniagbeserbiagbeswatgbeanyiehe sothogbeswedengbeswahilitam" + + "ilgbetelegugbetadzikistangbeThailandgbetigrinyagbetɛkmengbetswanagbe" + + "tongagbeTurkishgbetsongagbetahitigbeuighurgbeukraingbeurdugbeuzbekis" + + "tangbevendagbevietnamgbewolofgbexhosagbeyorubagbeChinagbezulugbeaghe" + + "mgbeasagbebembagbebenagbebodogbeembugbeefigbefilipingbeswizerlanɖtɔw" + + "o ƒe germaniagbehawaigbecape verdegbelahndagbeluyiagbegbegbɔgblɔ sɔg" + + "bɔwodziehe sothogberombogberwagbesakagbekomorogbetetumgbetok pisigbe" + + "gbegbɔgblɔ manyawalsegbecantongbegbegbɔgblɔ manɔmeeGermaniagbe (Aust" + + "ria)Germaniagbe (Switzerland)Yevugbe (Australia)Yevugbe (Canada)Yevu" + + "gbe (Britain)Yevugbe (America)Spanishgbe (Latin America)Spanishgbe (" + + "Europe)Spanishgbe (Mexico)Fransegbe (Canada)Fransegbe (Switzerland)F" + + "lemishgbePortuguesegbe (Brazil)Portuguesegbe (Europe)serbo-croatiagb" + + "etsainagbeblema tsainagbe", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000b, 0x000b, 0x0016, 0x001c, 0x0026, 0x0026, + 0x002f, 0x0038, 0x0038, 0x0040, 0x004d, 0x004d, 0x0059, 0x0064, + 0x0064, 0x006e, 0x0078, 0x0081, 0x008a, 0x0093, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x00a4, 0x00a4, 0x00a4, 0x00ac, 0x00b6, + 0x00c1, 0x00c9, 0x00d4, 0x00db, 0x00e3, 0x00ea, 0x00f6, 0x0100, + 0x010a, 0x0112, 0x011b, 0x011b, 0x0126, 0x012e, 0x012e, 0x0137, + 0x0137, 0x0142, 0x0142, 0x014b, 0x0154, 0x015c, 0x015c, 0x0164, + 0x016c, 0x0174, 0x0174, 0x017e, 0x0186, 0x0190, 0x019a, 0x019a, + // Entry 40 - 7F + 0x019a, 0x01a6, 0x01a6, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01b8, + 0x01c1, 0x01c1, 0x01c9, 0x01d2, 0x01db, 0x01db, 0x01db, 0x01db, + 0x01e8, 0x01e8, 0x01f0, 0x01fa, 0x0202, 0x0202, 0x020c, 0x0215, + 0x0215, 0x0215, 0x0222, 0x0227, 0x0234, 0x0234, 0x0234, 0x023b, + 0x0241, 0x024d, 0x024d, 0x0256, 0x0261, 0x0261, 0x0268, 0x0274, + 0x027d, 0x0288, 0x0293, 0x029b, 0x02a3, 0x02ab, 0x02ab, 0x02bc, + 0x02c4, 0x02c4, 0x02ce, 0x02df, 0x02f0, 0x02f0, 0x02f0, 0x02f9, + 0x02f9, 0x02f9, 0x02f9, 0x0301, 0x030b, 0x0315, 0x0315, 0x031e, + // Entry 80 - BF + 0x0327, 0x0334, 0x033e, 0x0348, 0x0350, 0x035a, 0x0363, 0x036d, + 0x0377, 0x0377, 0x037f, 0x038d, 0x0395, 0x039e, 0x03a9, 0x03b4, + 0x03bc, 0x03c4, 0x03ce, 0x03d8, 0x03e1, 0x03e8, 0x03f8, 0x03f8, + 0x0401, 0x0408, 0x0410, 0x0419, 0x0427, 0x0432, 0x043d, 0x0447, + 0x0450, 0x0458, 0x0462, 0x046b, 0x046b, 0x0474, 0x047d, 0x0486, + 0x048d, 0x049a, 0x04a2, 0x04ac, 0x04ac, 0x04ac, 0x04b4, 0x04bc, + 0x04bc, 0x04c5, 0x04c5, 0x04cd, 0x04d4, 0x04d4, 0x04d4, 0x04d4, + 0x04d4, 0x04d4, 0x04d4, 0x04dc, 0x04dc, 0x04dc, 0x04dc, 0x04dc, + // Entry C0 - FF + 0x04dc, 0x04dc, 0x04dc, 0x04dc, 0x04dc, 0x04dc, 0x04dc, 0x04dc, + 0x04dc, 0x04dc, 0x04dc, 0x04dc, 0x04dc, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04e2, 0x04e2, 0x04ea, 0x04ea, 0x04f1, 0x04f1, 0x04f1, 0x04f1, + 0x04f1, 0x04f1, 0x04f1, 0x04f1, 0x04f1, 0x04f1, 0x04f1, 0x04f1, + 0x04f1, 0x04f1, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, + 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, + 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, + // Entry 100 - 13F + 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, + 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, + 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04ff, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, + 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, + 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, + 0x050f, 0x050f, 0x050f, 0x050f, 0x052f, 0x052f, 0x052f, 0x052f, + // Entry 140 - 17F + 0x052f, 0x052f, 0x052f, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, + 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, + 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, + 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, + 0x0537, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, + 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, + 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, + 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x054d, 0x054d, 0x054d, + // Entry 180 - 1BF + 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, + 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x0555, 0x0555, + 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, + 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, + 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, + 0x0555, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, + 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, + 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x057a, + // Entry 1C0 - 1FF + 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, + 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, + 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, + 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, + 0x0582, 0x0582, 0x0582, 0x0582, 0x0582, 0x0582, 0x0588, 0x0588, + 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, + 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, + 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, + // Entry 200 - 23F + 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, + 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x0598, 0x0598, + 0x0598, 0x0598, 0x0598, 0x0598, 0x0598, 0x0598, 0x05a0, 0x05a0, + 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, + 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, + 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05bd, 0x05bd, + 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05c5, + 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, + // Entry 240 - 27F + 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05ce, 0x05ce, 0x05ce, + 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05e3, 0x05e3, 0x05e3, 0x05e3, + 0x05f8, 0x0611, 0x0624, 0x0634, 0x0645, 0x0656, 0x0670, 0x0683, + 0x0696, 0x0696, 0x06a8, 0x06bf, 0x06bf, 0x06c9, 0x06df, 0x06f5, + 0x06f5, 0x0705, 0x0705, 0x070e, 0x071d, + }, + }, + { // el + elLangStr, + elLangIdx, + }, + { // en + enLangStr, + enLangIdx, + }, + { // en-AU + "United States EnglishMoldovan", + []uint16{ // 609 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 140 - 17F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 180 - 1BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1C0 - 1FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 200 - 23F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 240 - 27F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x001d, + }, + }, + { // en-IN + "BengaliOriya", + []uint16{ // 124 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x000c, + }, + }, + { // en-NZ + "Māori", + []uint16{ // 103 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, + }, + }, + { // eo + "afaraabĥazaafrikansatwamharaarabaasamaajmaraazerbajĝanabaŝkirabelorusabu" + + "lgarabislamobengalatibetabretonabosniakatalunakorsikaĉeĥakimradanage" + + "rmanamahladzonkogrekaanglaesperantohispanaestonaeŭskapersafinnafiĝia" + + "feroafrancafrisairlandagaelagalegagvaraniaguĝaratahaŭsahebreahindakr" + + "oatahaitia kreolahungaraarmenainterlingvaoindoneziaokcidentaloeskima" + + "islandaitalainuitajapanajavakartvelakazaĥagronlandakmerakanarakoreak" + + "aŝmirakurdakirgizalatinoluksemburgalingalalaŭalitovalatvamalagasamao" + + "riamakedonamalajalamamongolamaratamalajamaltabirmanauranepalanederla" + + "ndanovnorvegadannorvegaokcitanaoromaorijopanĝabapolapaŝtoaportugalak" + + "eĉuaromanĉaburundarumanarusaruandasanskritosindasangoasinhalaslovaka" + + "slovenasamoaŝonasomalaalbanaserbasvaziasotasundasvedasvahilatamilate" + + "luguataĝikatajatigrajaturkmenacvanatongaaturkacongatataraujguraukrai" + + "naurduouzbekavjetnamavolapukovolofaksosajidajorubaĝuangaĉinazuluaibi" + + "bioefikafilipinahavajaklingonanekonata lingvonelingvaĵobrazilportuga" + + "laeŭropportugalaserbo-Kroataĉina simpligitaĉina tradicia", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x000c, 0x000c, 0x0015, 0x0017, 0x001d, 0x001d, + 0x0022, 0x0027, 0x0027, 0x002d, 0x0039, 0x0041, 0x0049, 0x0050, + 0x0057, 0x0057, 0x005e, 0x0064, 0x006b, 0x0071, 0x0079, 0x0079, + 0x0079, 0x0080, 0x0080, 0x0086, 0x0086, 0x0086, 0x008b, 0x008f, + 0x0096, 0x009b, 0x00a1, 0x00a1, 0x00a6, 0x00ab, 0x00b4, 0x00bb, + 0x00c1, 0x00c7, 0x00cc, 0x00cc, 0x00d1, 0x00d7, 0x00dc, 0x00e2, + 0x00e7, 0x00ee, 0x00f3, 0x00f9, 0x0101, 0x010a, 0x010a, 0x0110, + 0x0116, 0x011b, 0x011b, 0x0121, 0x012e, 0x0135, 0x013b, 0x013b, + // Entry 40 - 7F + 0x0147, 0x0150, 0x015b, 0x015b, 0x015b, 0x0161, 0x0161, 0x0168, + 0x016d, 0x0173, 0x0179, 0x017d, 0x0185, 0x0185, 0x0185, 0x0185, + 0x018c, 0x0195, 0x019a, 0x01a0, 0x01a5, 0x01a5, 0x01ad, 0x01b2, + 0x01b2, 0x01b2, 0x01b9, 0x01bf, 0x01ca, 0x01ca, 0x01ca, 0x01d1, + 0x01d6, 0x01dc, 0x01dc, 0x01e1, 0x01e9, 0x01e9, 0x01ef, 0x01f7, + 0x0201, 0x0208, 0x020e, 0x0214, 0x0219, 0x021e, 0x0223, 0x0223, + 0x0229, 0x0229, 0x0233, 0x023d, 0x0247, 0x0247, 0x0247, 0x0247, + 0x024f, 0x024f, 0x0254, 0x0259, 0x0259, 0x0261, 0x0261, 0x0265, + // Entry 80 - BF + 0x026c, 0x0275, 0x027b, 0x0283, 0x028a, 0x0290, 0x0294, 0x029a, + 0x02a3, 0x02a3, 0x02a8, 0x02a8, 0x02ae, 0x02b5, 0x02bc, 0x02c3, + 0x02c8, 0x02cd, 0x02d3, 0x02d9, 0x02de, 0x02e4, 0x02e8, 0x02ed, + 0x02f2, 0x02f9, 0x02ff, 0x0306, 0x030d, 0x0311, 0x0318, 0x0320, + 0x0325, 0x032b, 0x0330, 0x0335, 0x033b, 0x033b, 0x0341, 0x0348, + 0x034d, 0x0353, 0x0353, 0x035b, 0x0363, 0x0363, 0x0369, 0x036e, + 0x0372, 0x0378, 0x037f, 0x0384, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + // Entry C0 - FF + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + // Entry 100 - 13F + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0394, + 0x0394, 0x0394, 0x0394, 0x0394, 0x0394, 0x0394, 0x0394, 0x0394, + 0x0394, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, + 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, + 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, + 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, + // Entry 140 - 17F + 0x039c, 0x039c, 0x039c, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + // Entry 180 - 1BF + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + // Entry 1C0 - 1FF + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + // Entry 200 - 23F + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x03a2, 0x03a2, 0x03a2, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, + 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, + 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03b9, 0x03b9, + 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, + 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, + // Entry 240 - 27F + 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, + 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03c4, 0x03c4, 0x03c4, 0x03c4, + 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, + 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03d3, 0x03e2, + 0x03e2, 0x03ee, 0x03ee, 0x03fe, 0x040c, + }, + }, + { // es + esLangStr, + esLangIdx, + }, + { // es-419 + es419LangStr, + es419LangIdx, + }, + { // es-AR + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-BO + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-CL + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-CO + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-CR + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-DO + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-EC + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-GT + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-HN + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-MX + "bashkireuskeralaopunyabíkiroundisiswatisuajiliwolofacehnésarapahobasabam" + + "unbhojpurineerlandés medievalinglés medievalfrancés medievalgan (Chi" + + "na)alemán de la alta edad mediagriego antiguokejia (China)xiang (Chi" + + "na)irlandés medievalmin nan (Chino)sotho septentrionalárabe chadiano" + + "tamazight marroquí estándarsuajili del Congo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + // Entry 40 - 7F + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0019, 0x0019, 0x0019, + // Entry 80 - BF + 0x0019, 0x0019, 0x0019, 0x0019, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0028, 0x0028, 0x0028, + 0x0028, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + // Entry C0 - FF + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0047, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + // Entry 100 - 13F + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, + 0x0068, 0x0068, 0x0068, 0x0068, 0x0078, 0x0078, 0x0078, 0x0078, + 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00b1, 0x00b1, 0x00b1, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + // Entry 140 - 17F + 0x00bf, 0x00bf, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00cc, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + // Entry 180 - 1BF + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00eb, 0x00eb, + 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, + 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, + 0x00eb, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, + 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x010d, + // Entry 1C0 - 1FF + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x011c, 0x011c, 0x011c, + // Entry 200 - 23F + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + // Entry 240 - 27F + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, + 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, + 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, + 0x0139, 0x0139, 0x014a, + }, + }, + { // es-NI + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-PA + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-PE + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-PR + "siswatiwolofacehnésarapahobhojpurigriego antiguosotho septentrional", + []uint16{ // 448 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + // Entry 100 - 13F + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + // Entry 140 - 17F + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + // Entry 180 - 1BF + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0044, + }, + }, + { // es-PY + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // es-SV + "siswatiwolofacehnésarapahobhojpurigriego antiguosotho septentrional", + []uint16{ // 448 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + // Entry 100 - 13F + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + // Entry 140 - 17F + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + // Entry 180 - 1BF + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0044, + }, + }, + { // es-US + "kiroundisiswatisetchwanawolofacehnésarapahobasabamunbhojpuriburiatneerla" + + "ndés medievalinglés medievalfrancés medievalalemán de la alta edad m" + + "ediagriego antiguohakalto sorbiocriollo caboverdianolushaiirlandés m" + + "edievalnansotho septentrionalpcmárabe chadianowuuswahili del Congo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + // Entry C0 - FF + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0030, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x003d, 0x003d, 0x003d, 0x003d, 0x0043, 0x0043, 0x0043, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + // Entry 100 - 13F + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + 0x0043, 0x0043, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0067, 0x0067, 0x0067, 0x0067, + 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0078, 0x0078, 0x0078, + 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, + 0x0078, 0x0078, 0x0078, 0x0078, 0x0095, 0x0095, 0x0095, 0x0095, + 0x0095, 0x0095, 0x0095, 0x00a3, 0x00a3, 0x00a3, 0x00a3, 0x00a3, + // Entry 140 - 17F + 0x00a3, 0x00a3, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, + 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00b1, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + // Entry 180 - 1BF + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00f3, + // Entry 1C0 - 1FF + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x0105, 0x0105, 0x0105, + // Entry 200 - 23F + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0108, 0x0108, 0x0108, 0x0108, + // Entry 240 - 27F + 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, + 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, + 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, + 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, + 0x0108, 0x0108, 0x0119, + }, + }, + { // es-VE + "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + + "ngo", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0012, + // Entry 80 - BF + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 100 - 13F + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 140 - 17F + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 180 - 1BF + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 200 - 23F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 240 - 27F + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0093, + }, + }, + { // et + etLangStr, + etLangIdx, + }, + { // eu + "afareraabkhazeraafrikaansaakaneraamhareraaragoieraarabieraassameraavarer" + + "aaimaraazerbaijanerabashkirrerabielorrusierabulgarierabislamabambare" + + "rabengaleratibeterabretoierabosnierakatalanatxetxenierachamorrerakor" + + "sikeratxekieraElizako eslavierachuvasheragaleseradanieraalemanadiveh" + + "ieradzongkhaeweeragrezieraingelesaesperantoaespainieraestonieraeuska" + + "rapersierafulafinlandierafijierafaroerafrantsesafrisieragaelikoaesko" + + "ziako gaelikoagalizieraguaranieragujarateramanxerahausahebreerahindi" + + "akroazieraHaitiko kreolerahungarieraarmenierahererainterlinguaindone" + + "sierainterlingueigboerasichuan yiaidoislandieraitalierainuiterajapon" + + "ierajaverageorgierakikongoakikuyuerakuanyamakazakherakalaallisuterak" + + "hemererakannaderakoreerakanurierakashmirerakurduerakomierakornubiera" + + "kirgizeralatinaluxenburgeraganderalimburgeralingalalaoseralituaniera" + + "luba-katangeraletonieramalagasyeramarshalleramaorieramazedonieramala" + + "yalameramongolieramaratheramalaysieramalteraburmatarranaurueraiparra" + + "ldeko ndebeleeranepalerandongeranederlanderanynorsk norvegierabokmal" + + "a (Norvegia)hegoaldeko ndebeleranavahoeranyanjaokzitanieraoromoeraor" + + "iyaosetierapunjaberapolonierapaxtueraportugesaquechueraerromantxerar" + + "undieraerrumanieraerrusierakinyaruandasanskritoasardinierasindhiaipa" + + "rraldeko samierasangoerasinhalaeslovakieraeslovenierasamoerashoneras" + + "omalieraalbanieraserbieraswatierahegoaldeko sothoerasundanerasuedier" + + "aswahilitamileratelugueratajikistanerathailandieratigriñeraturkmenie" + + "ratswaneratongeraturkieratsongeratatareratahitierauigurreraukrainera" + + "urduauzbekeravenderavietnameravolapükavalonierawoloferaxhoserayiddis" + + "hayoruberatxinerazulueraacehneraacholieraadangmeraadygheraaghemeraai" + + "nueraaleuterahegoaldeko altaieraangikeramaputxeaarapahoaasuaasturier" + + "aawadhierabalierabasaabemberabenerabhojpureraedoerasiksikerabodoerab" + + "uginerabilenacebuerachigerachuukeramarierachoctawtxerokieracheyenner" + + "asoraniaseselwa frantses-kreoleradakoteradargverataiteradogriberazar" + + "merabehe-sorabieradualerafonyi joleradazagaembuaefikeraakajukaewonde" + + "ratagalogafonafriulieragagagauzerage’ezgilberteragorontaloaalemana (" + + "Suitza)gusiieragwichʼinhawaiierahiligainonahmonggoi-sorabierahuperai" + + "baneraibibioerailokaneraingusheralojbanerangombamachamerakabilerajin" + + "gpoerakaijikamberakabardierakatabamakonderaCabo Verdeko kreolakoroak" + + "ashiakoyra chiinierakakoakalenjinerakimbunduakomi-permyakerakonkanie" + + "rakpelleakarachayera-balkarerakarelierakurukherashambalerabafierakol" + + "onierakumykeraladineralangieralezgieralakoteralozieraiparraldeko lur" + + "eratxiluberalunderaluoeramizoaluhyeramadureramagahieramaithileramaka" + + "sareramasaieramokxeramendeeramerueraMauritaniako kreoleramakhuwa-mee" + + "ttoerameteramikmakeraminangkabaueramanipureramohawkeramoreeramudange" + + "rahizkuntza anitzakcreeramiranderaerzieramazandaranderanapolieraname" + + "ranewareraniasaniuerakwasierangiembooneranogaieran’koerapedieranuere" + + "raankolerapangasinanerapampangerapapiamentoapalaueraNigeriako pidgin" + + "aprusierak’iche’rarapa nuirarotongeraromboeraaromaniarwaerasandaweas" + + "akherasamburuerasantalerangambayerasanguerasizilieraeskozierasenerak" + + "oyraboro senniatachelhitashanerahegoaldeko samieralule samierainari-" + + "samieraskolt samierasoninkerasrananerasahoasukumerakomoreeraasiriera" + + "temneatesoeratetumatigreaklingoneratok pisinatarokoatumbukeratuvalue" + + "ratasawaqatuveraMaroko erdialdeko tamazightaudmurteraumbundueraerroa" + + "vaieravunjoawalsererawelaytasamererakalmykerasogerajangbenerayembaka" + + "ntoneratamazight estandarrazuñiaez dago eduki linguistikorikzazakiaa" + + "rabiera moderno estandarraAustriako alemanaaleman garaia (Suitza)Aus" + + "traliako ingelesaKanadako ingelesaBritainia Handiko ingelesaAEBko in" + + "gelesaLatinoamerikako espainieraespainiera (Europa)Mexikoko espainie" + + "raKanadako frantsesaSuitzako frantsesabehe-saxoieraflandrieraBrasilg" + + "o portugesaportugesa (Europa)moldavieraserbokroazieraKongoko swahili" + + "atxinera soilduatxinera tradizionala", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0007, 0x0010, 0x0010, 0x001a, 0x0021, 0x0029, 0x0032, + 0x003a, 0x0042, 0x0049, 0x004f, 0x005c, 0x0067, 0x0074, 0x007e, + 0x0085, 0x008e, 0x0097, 0x009f, 0x00a8, 0x00b0, 0x00b8, 0x00c3, + 0x00cd, 0x00d6, 0x00d6, 0x00de, 0x00ef, 0x00f9, 0x0101, 0x0108, + 0x010f, 0x0118, 0x0120, 0x0126, 0x012e, 0x0136, 0x0140, 0x014a, + 0x0153, 0x015a, 0x0162, 0x0166, 0x0171, 0x0178, 0x017f, 0x0188, + 0x0190, 0x0198, 0x01aa, 0x01b3, 0x01bd, 0x01c7, 0x01ce, 0x01d3, + 0x01db, 0x01e1, 0x01e1, 0x01ea, 0x01fa, 0x0204, 0x020d, 0x0213, + // Entry 40 - 7F + 0x021e, 0x0229, 0x0234, 0x023b, 0x0246, 0x0246, 0x0249, 0x0253, + 0x025b, 0x0263, 0x026c, 0x0272, 0x027b, 0x0283, 0x028c, 0x0294, + 0x029d, 0x02ab, 0x02b4, 0x02bd, 0x02c4, 0x02cd, 0x02d7, 0x02df, + 0x02e6, 0x02f0, 0x02f9, 0x02ff, 0x030b, 0x0312, 0x031c, 0x0323, + 0x032a, 0x0334, 0x0342, 0x034b, 0x0356, 0x0361, 0x0369, 0x0374, + 0x0380, 0x038a, 0x0393, 0x039d, 0x03a4, 0x03ae, 0x03b6, 0x03cc, + 0x03d4, 0x03dc, 0x03e8, 0x03fa, 0x040c, 0x0420, 0x0429, 0x042f, + 0x043a, 0x043a, 0x0442, 0x0447, 0x044f, 0x0458, 0x0458, 0x0461, + // Entry 80 - BF + 0x0469, 0x0472, 0x047b, 0x0487, 0x048f, 0x049a, 0x04a3, 0x04ae, + 0x04b8, 0x04c2, 0x04c9, 0x04dc, 0x04e4, 0x04eb, 0x04f6, 0x0501, + 0x0508, 0x050f, 0x0518, 0x0521, 0x0529, 0x0531, 0x0544, 0x054d, + 0x0555, 0x055c, 0x0564, 0x056d, 0x057a, 0x0586, 0x0590, 0x059b, + 0x05a3, 0x05aa, 0x05b2, 0x05ba, 0x05c2, 0x05cb, 0x05d4, 0x05dd, + 0x05e2, 0x05ea, 0x05f1, 0x05fb, 0x0604, 0x060d, 0x0615, 0x061c, + 0x0624, 0x062c, 0x062c, 0x0633, 0x063a, 0x0642, 0x064b, 0x0654, + 0x065c, 0x065c, 0x065c, 0x0664, 0x066b, 0x066b, 0x066b, 0x0673, + // Entry C0 - FF + 0x0673, 0x0686, 0x0686, 0x068e, 0x068e, 0x0696, 0x0696, 0x069e, + 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, 0x06a2, 0x06a2, 0x06ab, + 0x06ab, 0x06b4, 0x06b4, 0x06bb, 0x06bb, 0x06c0, 0x06c0, 0x06c0, + 0x06c0, 0x06c0, 0x06c7, 0x06c7, 0x06cd, 0x06cd, 0x06cd, 0x06cd, + 0x06d7, 0x06d7, 0x06dd, 0x06dd, 0x06dd, 0x06e6, 0x06e6, 0x06e6, + 0x06e6, 0x06e6, 0x06ed, 0x06ed, 0x06ed, 0x06f5, 0x06f5, 0x06fb, + 0x06fb, 0x06fb, 0x06fb, 0x06fb, 0x06fb, 0x0702, 0x0709, 0x0709, + 0x0709, 0x0711, 0x0718, 0x0718, 0x071f, 0x071f, 0x0729, 0x0733, + // Entry 100 - 13F + 0x073a, 0x073a, 0x073a, 0x073a, 0x0753, 0x0753, 0x075b, 0x0763, + 0x076a, 0x076a, 0x076a, 0x0773, 0x0773, 0x077a, 0x077a, 0x0788, + 0x0788, 0x078f, 0x078f, 0x079b, 0x079b, 0x07a1, 0x07a6, 0x07ad, + 0x07ad, 0x07ad, 0x07b4, 0x07b4, 0x07b4, 0x07b4, 0x07bc, 0x07bc, + 0x07bc, 0x07c4, 0x07c4, 0x07c8, 0x07c8, 0x07c8, 0x07c8, 0x07c8, + 0x07c8, 0x07c8, 0x07d1, 0x07d3, 0x07dc, 0x07dc, 0x07dc, 0x07dc, + 0x07dc, 0x07e3, 0x07ed, 0x07ed, 0x07ed, 0x07ed, 0x07ed, 0x07ed, + 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x0807, 0x0807, 0x0807, 0x080f, + // Entry 140 - 17F + 0x0818, 0x0818, 0x0818, 0x0821, 0x0821, 0x082c, 0x082c, 0x0831, + 0x083e, 0x083e, 0x0844, 0x084b, 0x0854, 0x085d, 0x0866, 0x0866, + 0x0866, 0x086f, 0x0875, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, + 0x0886, 0x088f, 0x0894, 0x089b, 0x089b, 0x08a5, 0x08a5, 0x08ab, + 0x08b4, 0x08c7, 0x08c7, 0x08cc, 0x08cc, 0x08d2, 0x08d2, 0x08e1, + 0x08e1, 0x08e1, 0x08e6, 0x08f1, 0x08fa, 0x0909, 0x0913, 0x0913, + 0x091a, 0x092f, 0x092f, 0x092f, 0x0938, 0x0941, 0x094b, 0x0952, + 0x095b, 0x0963, 0x0963, 0x096b, 0x0973, 0x0973, 0x0973, 0x097b, + // Entry 180 - 1BF + 0x097b, 0x097b, 0x097b, 0x0983, 0x0983, 0x0983, 0x098a, 0x099c, + 0x099c, 0x09a5, 0x09a5, 0x09ac, 0x09b2, 0x09b7, 0x09be, 0x09be, + 0x09be, 0x09c6, 0x09c6, 0x09cf, 0x09d9, 0x09e3, 0x09e3, 0x09eb, + 0x09eb, 0x09f2, 0x09f2, 0x09fa, 0x0a01, 0x0a16, 0x0a16, 0x0a27, + 0x0a2d, 0x0a36, 0x0a44, 0x0a44, 0x0a4e, 0x0a57, 0x0a5e, 0x0a5e, + 0x0a67, 0x0a78, 0x0a7e, 0x0a87, 0x0a87, 0x0a87, 0x0a87, 0x0a8e, + 0x0a9c, 0x0a9c, 0x0aa5, 0x0aab, 0x0aab, 0x0ab3, 0x0ab8, 0x0abe, + 0x0abe, 0x0ac6, 0x0ad2, 0x0ada, 0x0ada, 0x0ada, 0x0ae3, 0x0aea, + // Entry 1C0 - 1FF + 0x0af1, 0x0af1, 0x0af1, 0x0af9, 0x0af9, 0x0af9, 0x0af9, 0x0af9, + 0x0b06, 0x0b06, 0x0b10, 0x0b1b, 0x0b23, 0x0b23, 0x0b34, 0x0b34, + 0x0b34, 0x0b34, 0x0b34, 0x0b34, 0x0b34, 0x0b34, 0x0b34, 0x0b3c, + 0x0b3c, 0x0b49, 0x0b49, 0x0b49, 0x0b51, 0x0b5c, 0x0b5c, 0x0b5c, + 0x0b64, 0x0b64, 0x0b64, 0x0b64, 0x0b64, 0x0b6c, 0x0b72, 0x0b7a, + 0x0b81, 0x0b81, 0x0b8b, 0x0b8b, 0x0b94, 0x0b94, 0x0b9e, 0x0ba6, + 0x0baf, 0x0bb8, 0x0bb8, 0x0bb8, 0x0bb8, 0x0bbe, 0x0bbe, 0x0bbe, + 0x0bce, 0x0bce, 0x0bce, 0x0bd8, 0x0bdf, 0x0bdf, 0x0bdf, 0x0bdf, + // Entry 200 - 23F + 0x0bdf, 0x0bf1, 0x0bfd, 0x0c0a, 0x0c17, 0x0c20, 0x0c20, 0x0c29, + 0x0c29, 0x0c2e, 0x0c2e, 0x0c36, 0x0c36, 0x0c36, 0x0c3f, 0x0c3f, + 0x0c47, 0x0c47, 0x0c47, 0x0c4d, 0x0c54, 0x0c54, 0x0c5a, 0x0c60, + 0x0c60, 0x0c60, 0x0c60, 0x0c6a, 0x0c6a, 0x0c6a, 0x0c6a, 0x0c6a, + 0x0c74, 0x0c74, 0x0c7b, 0x0c7b, 0x0c7b, 0x0c7b, 0x0c84, 0x0c8d, + 0x0c95, 0x0c9b, 0x0cb7, 0x0cc0, 0x0cc0, 0x0cca, 0x0ccf, 0x0cd5, + 0x0cd5, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cdb, 0x0ce4, + 0x0ceb, 0x0cf3, 0x0cf3, 0x0cf3, 0x0cf3, 0x0cfc, 0x0cfc, 0x0d02, + // Entry 240 - 27F + 0x0d02, 0x0d02, 0x0d0c, 0x0d11, 0x0d11, 0x0d1a, 0x0d1a, 0x0d1a, + 0x0d1a, 0x0d1a, 0x0d2e, 0x0d34, 0x0d50, 0x0d57, 0x0d72, 0x0d72, + 0x0d83, 0x0d99, 0x0dad, 0x0dbe, 0x0dd8, 0x0de6, 0x0e00, 0x0e13, + 0x0e26, 0x0e26, 0x0e38, 0x0e4a, 0x0e57, 0x0e61, 0x0e73, 0x0e85, + 0x0e8f, 0x0e9d, 0x0ead, 0x0ebc, 0x0ed0, + }, + }, + { // ewo + "Ǹkɔ́bɔ akánǸkɔ́bɔ amáriaǸkɔ́bɔ arábiaǸkɔ́bɔ belarúsianǸkɔ́bɔ buləgárianǸ" + + "kɔ́bɔ bɛngalíǸkɔ́bɔ tsɛ́gǸkɔ́bɔ ndzámanǸkɔ́bɔ gəlɛ́gǸkɔ́bɔ éngəlísǹk" + + "ɔ́bɔ kpənyáǹkɔ́bɔ fɛ́rəsianǸkɔ́bɔ fulɛnsíǸkɔ́bɔ aúsáǸkɔ́bɔ hindíǸkɔ" + + "́bɔ ungáríanǸkɔ́bɔ ɛndonésianǸkɔ́bɔ ibóǸkɔ́bɔ etáliɛnǸkɔ́bɔ hapɔ́nǸ" + + "kɔ́bɔ havanísǸkɔ́bɔ kəmɛ́rǸkɔ́bɔ koréanǸkɔ́bɔ malɛ́sianǸkɔ́bɔ birəmá" + + "nǹkɔ́bɔ nefálianǸkɔ́bɔ nɛrəlándíaǹkɔ́bɔ funəhábiaǹkɔ́bɔ fólisǹkɔ́bɔ " + + "fɔtugɛ́sńkɔ́bɔ románíaǹkɔ́bɔ rúsianǹkɔ́bɔ ruwandáǹkɔ́bɔ somáliaǹkɔ́b" + + "ɔ suwɛ́dǹkɔ́bɔ tamílǹkɔ́bɔ táilanǹkɔ́bɔ túrəkiǹkɔ́bɔ ukeléniaǹkɔ́bɔ" + + " urudúǹkɔ́bɔ hiɛdənámǹkɔ́bɔ yorúbaǸkɔ́bɔ tsainísǹkɔ́bɔ zulúewondo", + []uint16{ // 287 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0022, 0x0022, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x004a, 0x0061, + 0x0061, 0x0061, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x009a, 0x009a, 0x009a, 0x009a, 0x00ae, 0x00c3, 0x00c3, 0x00d6, + 0x00d6, 0x00d6, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0112, + 0x0112, 0x0123, 0x0123, 0x0123, 0x0123, 0x0138, 0x0138, 0x0138, + // Entry 40 - 7F + 0x0138, 0x014f, 0x014f, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, + 0x0172, 0x0172, 0x0185, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, + 0x0198, 0x0198, 0x01ac, 0x01ac, 0x01be, 0x01be, 0x01be, 0x01be, + 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, + 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, + 0x01be, 0x01be, 0x01be, 0x01d4, 0x01d4, 0x01e8, 0x01e8, 0x01e8, + 0x01fc, 0x01fc, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, + 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x022b, 0x022b, 0x023c, + // Entry 80 - BF + 0x023c, 0x0252, 0x0252, 0x0252, 0x0252, 0x0266, 0x0278, 0x028b, + 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, + 0x028b, 0x028b, 0x029e, 0x029e, 0x029e, 0x029e, 0x029e, 0x029e, + 0x02b1, 0x02b1, 0x02c2, 0x02c2, 0x02c2, 0x02d4, 0x02d4, 0x02d4, + 0x02d4, 0x02d4, 0x02e7, 0x02e7, 0x02e7, 0x02e7, 0x02e7, 0x02fb, + 0x030c, 0x030c, 0x030c, 0x0322, 0x0322, 0x0322, 0x0322, 0x0322, + 0x0322, 0x0334, 0x0334, 0x0347, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + // Entry C0 - FF + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + // Entry 100 - 13F + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x035d, + }, + }, + { // fa + faLangStr, + faLangIdx, + }, + { // fa-AF + "افریکانساسامیآذربایجانیباشقیریمالدیویهسپانویفنلندیآیرلندیکروشیاییاندونیز" + + "یاییآیسلندیایتالویجاپانیکوریاییقرغزیمغلینیپالیهالندینارویژیپولندیپر" + + "تگالیالبانیاییسویدنیسواحلیتاجکیکردی سورانی", + []uint16{ // 257 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x001a, 0x001a, 0x001a, 0x002e, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x0058, + 0x0058, 0x0058, 0x0058, 0x0058, 0x0064, 0x0064, 0x0064, 0x0064, + 0x0064, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + // Entry 40 - 7F + 0x0082, 0x0098, 0x0098, 0x0098, 0x0098, 0x0098, 0x0098, 0x00a6, + 0x00b4, 0x00b4, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, + 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + 0x00ce, 0x00ce, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00ec, 0x00ec, 0x00f8, 0x00f8, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0112, + // Entry 80 - BF + 0x0112, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0120, 0x0120, 0x0120, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, + 0x013e, 0x014a, 0x014a, 0x014a, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + // Entry C0 - FF + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + // Entry 100 - 13F + 0x0169, + }, + }, + { // ff + "AkaanAmarikAarabeereBelaruuseBulgariireBengaliCekkereDocceereGerkeEngele" + + "ereEspañolPerseerePulaarFarayseereHawsaŋkooreHinndiHongariireEndones" + + "iireIgibooreItaliyeereSaponeereSawaneereKemeereKoreereMalayeereBurme" + + "eseNepaaleereDacceerePunjabeerePoloneerePurtugeereRomaneereRiisRuwaa" + + "nndeereSomaliiSweedeereTamilTaayTurkeereUkereneereUrduWiyetnameereYo" + + "rrubaaSinuwaareSuluŋkoore", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x000b, 0x000b, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x001d, 0x0027, + 0x0027, 0x0027, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x003d, 0x003d, 0x003d, 0x003d, 0x0042, 0x004b, 0x004b, 0x0053, + 0x0053, 0x0053, 0x005b, 0x0061, 0x0061, 0x0061, 0x0061, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x0077, + 0x0077, 0x007d, 0x007d, 0x007d, 0x007d, 0x0087, 0x0087, 0x0087, + // Entry 40 - 7F + 0x0087, 0x0092, 0x0092, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x00a4, 0x00a4, 0x00ad, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00b6, 0x00bd, 0x00bd, 0x00c4, 0x00c4, 0x00c4, 0x00c4, + 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, + 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, + 0x00c4, 0x00c4, 0x00c4, 0x00cd, 0x00cd, 0x00d5, 0x00d5, 0x00d5, + 0x00df, 0x00df, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00f1, 0x00f1, 0x00fa, + // Entry 80 - BF + 0x00fa, 0x0104, 0x0104, 0x0104, 0x0104, 0x010d, 0x0111, 0x011d, + 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, + 0x011d, 0x011d, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x012d, 0x012d, 0x0132, 0x0132, 0x0132, 0x0136, 0x0136, 0x0136, + 0x0136, 0x0136, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x0148, + 0x014c, 0x014c, 0x014c, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, + 0x0158, 0x0160, 0x0160, 0x0169, 0x0174, + }, + }, + { // fi + fiLangStr, + fiLangIdx, + }, + { // fil + filLangStr, + filLangIdx, + }, + { // fo + "afarabkhasisktafrikaansakanamharisktaragonisktarabisktassamesisktavarisk" + + "taymaraaserbajdsjansktbashkirhvitarussisktbulgarsktbislamabambaraben" + + "galskttibetsktbretonsktbosnisktkatalanitjetjensktchamorrokorsikanskt" + + "kekkisktkirkju slávisktchuvashwalisisktdanskttýsktdivehidzongkhaeweg" + + "riksktensktesperantospansktestisktbaskisktpersisktfulahfinsktfijimál" + + "føroysktfransktvestur frísisktírsktskotskt gælisktgalisisktguaranigu" + + "jaratimanxhausahebraiskthindikroatiskthaitisktungarsktarmensktherero" + + "interlinguaindonesisktinterlingueigbosichuan yiidoíslendsktitalsktin" + + "uktitutjapansktjavansktgeorgisktkikuyukuanyamakazakhkalaallisutkhmer" + + "kannadakoreansktkanurikashmirikurdisktkomicornisktkyrgyzlatínluksemb" + + "orgsktgandalimburgisktlingalalaosktlitavisktluba-katangalettisktmala" + + "gassisktmarshallesisktmaorimakedónsktmalayalammongolsktmarathimalaii" + + "sktmaltisktburmesisktnaurunorður ndebelenepalsktndongahálendsktnýnor" + + "sktnorskt bókmálsuður ndebelenavajonyanjaoccitansktoromooriyaossetis" + + "ktpunjabipólsktpashtoportugiskisktquechuaretoromansktrundirumensktru" + + "ssisktkinyarwandasanskritsardisktsindhinorður sámisktsangosingalesis" + + "ktslovakisktslovensktsámoisktshonasomalisktalbansktserbisktswatiskts" + + "esothosundanesisktsvensktswahilitamilskttelugutajiktailendskttigriny" + + "aturkmenskttswanatongansktturkiskttsongatatartahitisktuyghurukrainsk" + + "turduusbekisktvendavjetnamesisktvolapykkwalloonwolofxhosajiddisktyor" + + "ubakinesisktsuluachineseadangmeadygheaghemainualeutsuður altaiangika" + + "mapuchearapahoasuasturiansktawadhibalinesisktbasaabembabenavestur ba" + + "lochibhojpuribinisiksikabodobakossibuginesisktblincebuanochigachuuke" + + "semarichoctawcherokeecheyennemiðkurdisktseselwa creole fransktdakota" + + "dargwataitadogribsarmalágt sorbiandualajola-fonyidazagaembuefikekaju" + + "kewondofilipinisktfonfriulisktgagagauzgan kinesisktgeezkiribatisktgo" + + "rontalotýskt (Sveis)gusiigwich’inhakka kinesiskthawaiianskthiligayno" + + "nhmongovara sorbianxiang kinesiskthupaibanibibioilokoinguishlojbanng" + + "ombamachamekabylekachinjjukambakabardinskttyapmakondegrønhøvdaoyggja" + + "rsktkorokhasikoyra chiinikakokalenjinkimbundukomi-permyakkonkanikpel" + + "lekarachay-balkarkarelsktkurukhshambalabafiakølnsktkumykladinolangil" + + "ahndalezghianlakotalozinorður luriluba-lulualundaluomizoluyiamadures" + + "isktmagahimaithilimakasarmasaimokshamendemerumorisyenmakhuwa-meettom" + + "etaʼmicmacminangkabaumanupurimohawkmossimundangymisk málcreekmirande" + + "siskterzyamazanderanimin nan kinesisktnapolitansktnamalágt týsktnewa" + + "riniasniueankwasiongiemboonnogainʼkonorður sothonuernyankolepangasin" + + "anpampangapapiamentopalauannigeriskt pidginprusslansktkʼicheʼrapanui" + + "rarotongisktromboaromensktrwasandawesakhasamburusantalingambaysangus" + + "isilansktskotsktsuður kurdisktsenakoyraboro sennitachelhitshansuður " + + "sámisktlule sámisktinari samiskolt sámisktsoninkesranan tongosahosuk" + + "umakomorisktsyriactimnetesotetumtigreklingonskttok pisintarokotumbuk" + + "atuvalutasawaqtuvinianmiðatlasfjøll tamazightudmurtumbundurootvaivun" + + "jowalserwolayttawaraywarlpiriwu kinesisktkalmyksogayangbenyembakanto" + + "nesisktvanligt marokanskt tamazightzunieinki málsligt innihaldzazanú" + + "tíðar vanligt arabiskthøgt týskt (Sveis)lágt saksisktflamsktportugis" + + "kiskt (Brasilia)portugiskiskt (Evropa)moldavisktserbokroatisktkongo " + + "svahilieinkult kinesisktvanligt kinesiskt", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000e, 0x000e, 0x0017, 0x001b, 0x0024, 0x002e, + 0x0036, 0x0041, 0x0049, 0x004f, 0x005e, 0x0065, 0x0072, 0x007b, + 0x0082, 0x0089, 0x0092, 0x009a, 0x00a3, 0x00ab, 0x00b3, 0x00bd, + 0x00c5, 0x00d0, 0x00d0, 0x00d8, 0x00e8, 0x00ef, 0x00f8, 0x00fe, + 0x0104, 0x010a, 0x0112, 0x0115, 0x011c, 0x0121, 0x012a, 0x0131, + 0x0138, 0x0140, 0x0148, 0x014d, 0x0153, 0x015b, 0x0164, 0x016b, + 0x017b, 0x0181, 0x0191, 0x019a, 0x01a1, 0x01a9, 0x01ad, 0x01b2, + 0x01bb, 0x01c0, 0x01c0, 0x01c9, 0x01d1, 0x01d9, 0x01e1, 0x01e7, + // Entry 40 - 7F + 0x01f2, 0x01fd, 0x0208, 0x020c, 0x0216, 0x0216, 0x0219, 0x0223, + 0x022a, 0x0233, 0x023b, 0x0243, 0x024c, 0x024c, 0x0252, 0x025a, + 0x0260, 0x026b, 0x0270, 0x0277, 0x0280, 0x0286, 0x028e, 0x0296, + 0x029a, 0x02a2, 0x02a8, 0x02ae, 0x02bb, 0x02c0, 0x02cb, 0x02d2, + 0x02d8, 0x02e1, 0x02ed, 0x02f5, 0x0301, 0x030f, 0x0314, 0x031f, + 0x0328, 0x0331, 0x0338, 0x0341, 0x0349, 0x0353, 0x0358, 0x0367, + 0x036f, 0x0375, 0x037f, 0x0388, 0x0397, 0x03a5, 0x03ab, 0x03b1, + 0x03bb, 0x03bb, 0x03c0, 0x03c5, 0x03ce, 0x03d5, 0x03d5, 0x03dc, + // Entry 80 - BF + 0x03e2, 0x03ef, 0x03f6, 0x0402, 0x0407, 0x040f, 0x0417, 0x0422, + 0x042a, 0x0432, 0x0438, 0x0448, 0x044d, 0x0459, 0x0463, 0x046c, + 0x0475, 0x047a, 0x0483, 0x048b, 0x0493, 0x049b, 0x04a2, 0x04ae, + 0x04b5, 0x04bc, 0x04c4, 0x04ca, 0x04cf, 0x04d9, 0x04e1, 0x04eb, + 0x04f1, 0x04fa, 0x0502, 0x0508, 0x050d, 0x0516, 0x051c, 0x0525, + 0x0529, 0x0532, 0x0537, 0x0544, 0x054c, 0x0553, 0x0558, 0x055d, + 0x0565, 0x056b, 0x056b, 0x0574, 0x0578, 0x0580, 0x0580, 0x0587, + 0x058d, 0x058d, 0x058d, 0x0592, 0x0596, 0x0596, 0x0596, 0x059b, + // Entry C0 - FF + 0x059b, 0x05a7, 0x05a7, 0x05ad, 0x05ad, 0x05b4, 0x05b4, 0x05bb, + 0x05bb, 0x05bb, 0x05bb, 0x05bb, 0x05bb, 0x05be, 0x05be, 0x05c9, + 0x05c9, 0x05cf, 0x05cf, 0x05da, 0x05da, 0x05df, 0x05df, 0x05df, + 0x05df, 0x05df, 0x05e4, 0x05e4, 0x05e8, 0x05e8, 0x05e8, 0x05f6, + 0x05fe, 0x05fe, 0x0602, 0x0602, 0x0602, 0x0609, 0x0609, 0x0609, + 0x0609, 0x0609, 0x060d, 0x0614, 0x0614, 0x061f, 0x061f, 0x0623, + 0x0623, 0x0623, 0x0623, 0x0623, 0x0623, 0x062a, 0x062f, 0x062f, + 0x062f, 0x0637, 0x063b, 0x063b, 0x0642, 0x0642, 0x064a, 0x0652, + // Entry 100 - 13F + 0x065e, 0x065e, 0x065e, 0x065e, 0x0674, 0x0674, 0x067a, 0x0680, + 0x0685, 0x0685, 0x0685, 0x068b, 0x068b, 0x0690, 0x0690, 0x069d, + 0x069d, 0x06a2, 0x06a2, 0x06ac, 0x06ac, 0x06b2, 0x06b6, 0x06ba, + 0x06ba, 0x06ba, 0x06c0, 0x06c0, 0x06c0, 0x06c0, 0x06c6, 0x06c6, + 0x06c6, 0x06d1, 0x06d1, 0x06d4, 0x06d4, 0x06d4, 0x06d4, 0x06d4, + 0x06d4, 0x06d4, 0x06dd, 0x06df, 0x06e5, 0x06f2, 0x06f2, 0x06f2, + 0x06f2, 0x06f6, 0x0701, 0x0701, 0x0701, 0x0701, 0x0701, 0x0701, + 0x070a, 0x070a, 0x070a, 0x070a, 0x0718, 0x0718, 0x0718, 0x071d, + // Entry 140 - 17F + 0x0727, 0x0727, 0x0736, 0x0741, 0x0741, 0x074b, 0x074b, 0x0750, + 0x075d, 0x076c, 0x0770, 0x0774, 0x077a, 0x077f, 0x0786, 0x0786, + 0x0786, 0x078c, 0x0792, 0x0799, 0x0799, 0x0799, 0x0799, 0x0799, + 0x079f, 0x07a5, 0x07a8, 0x07ad, 0x07ad, 0x07b8, 0x07b8, 0x07bc, + 0x07c3, 0x07d8, 0x07d8, 0x07dc, 0x07dc, 0x07e1, 0x07e1, 0x07ed, + 0x07ed, 0x07ed, 0x07f1, 0x07f9, 0x0801, 0x080d, 0x0814, 0x0814, + 0x081a, 0x0829, 0x0829, 0x0829, 0x0831, 0x0837, 0x083f, 0x0844, + 0x084c, 0x0851, 0x0851, 0x0857, 0x085c, 0x0862, 0x0862, 0x086a, + // Entry 180 - 1BF + 0x086a, 0x086a, 0x086a, 0x0870, 0x0870, 0x0870, 0x0874, 0x0880, + 0x0880, 0x088a, 0x088a, 0x088f, 0x0892, 0x0896, 0x089b, 0x089b, + 0x089b, 0x08a6, 0x08a6, 0x08ac, 0x08b4, 0x08bb, 0x08bb, 0x08c0, + 0x08c0, 0x08c6, 0x08c6, 0x08cb, 0x08cf, 0x08d7, 0x08d7, 0x08e5, + 0x08eb, 0x08f1, 0x08fc, 0x08fc, 0x0904, 0x090a, 0x090f, 0x090f, + 0x0916, 0x0920, 0x0925, 0x0931, 0x0931, 0x0931, 0x0931, 0x0936, + 0x0941, 0x0952, 0x095e, 0x0962, 0x096e, 0x0974, 0x0978, 0x097e, + 0x097e, 0x0984, 0x098d, 0x0992, 0x0992, 0x0992, 0x0997, 0x09a4, + // Entry 1C0 - 1FF + 0x09a8, 0x09a8, 0x09a8, 0x09b0, 0x09b0, 0x09b0, 0x09b0, 0x09b0, + 0x09ba, 0x09ba, 0x09c2, 0x09cc, 0x09d3, 0x09d3, 0x09e3, 0x09e3, + 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09ee, + 0x09ee, 0x09f7, 0x09f7, 0x09f7, 0x09fe, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0a0f, 0x0a0f, 0x0a0f, 0x0a0f, 0x0a0f, 0x0a18, 0x0a1b, 0x0a22, + 0x0a27, 0x0a27, 0x0a2e, 0x0a2e, 0x0a35, 0x0a35, 0x0a3c, 0x0a41, + 0x0a4b, 0x0a52, 0x0a52, 0x0a61, 0x0a61, 0x0a65, 0x0a65, 0x0a65, + 0x0a74, 0x0a74, 0x0a74, 0x0a7d, 0x0a81, 0x0a81, 0x0a81, 0x0a81, + // Entry 200 - 23F + 0x0a81, 0x0a90, 0x0a9d, 0x0aa7, 0x0ab5, 0x0abc, 0x0abc, 0x0ac8, + 0x0ac8, 0x0acc, 0x0acc, 0x0ad2, 0x0ad2, 0x0ad2, 0x0adb, 0x0adb, + 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae6, 0x0aea, 0x0aea, 0x0aef, 0x0af4, + 0x0af4, 0x0af4, 0x0af4, 0x0afe, 0x0afe, 0x0afe, 0x0afe, 0x0afe, + 0x0b07, 0x0b07, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b14, 0x0b1a, + 0x0b21, 0x0b29, 0x0b42, 0x0b48, 0x0b48, 0x0b4f, 0x0b53, 0x0b56, + 0x0b56, 0x0b56, 0x0b56, 0x0b56, 0x0b56, 0x0b56, 0x0b5b, 0x0b61, + 0x0b69, 0x0b6e, 0x0b6e, 0x0b76, 0x0b82, 0x0b88, 0x0b88, 0x0b8c, + // Entry 240 - 27F + 0x0b8c, 0x0b8c, 0x0b93, 0x0b98, 0x0b98, 0x0ba4, 0x0ba4, 0x0ba4, + 0x0ba4, 0x0ba4, 0x0bc0, 0x0bc4, 0x0bdc, 0x0be0, 0x0bfb, 0x0bfb, + 0x0bfb, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, + 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c1d, 0x0c24, 0x0c3c, 0x0c52, + 0x0c5c, 0x0c6a, 0x0c77, 0x0c88, 0x0c99, + }, + }, + { // fr + frLangStr, + frLangIdx, + }, + { // fr-BE + "gujaratisame du Nordfranco-provençalancien haut-allemandgotiqueaosame du" + + " Sudsame de Lulesame d’Inarisame skolt", + []uint16{ // 517 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + // Entry 40 - 7F + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + // Entry 80 - BF + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 100 - 13F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + // Entry 140 - 17F + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + // Entry 180 - 1BF + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + // Entry 1C0 - 1FF + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + // Entry 200 - 23F + 0x0042, 0x004d, 0x0059, 0x0067, 0x0071, + }, + }, + { // fr-CA + frCALangStr, + frCALangIdx, + }, + { // fr-CH + "goudjratiallemand de Pennsylvaniekurde méridional", + []uint16{ // 500 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + // Entry 40 - 7F + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + // Entry 80 - BF + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + // Entry C0 - FF + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + // Entry 100 - 13F + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + // Entry 140 - 17F + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + // Entry 180 - 1BF + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + // Entry 1C0 - 1FF + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0032, + }, + }, + { // fur + "afarabcazianavestanafrikaansamaricaragonêsarapassamêsavaraymaràazerbaija" + + "nibielorùsbulgarbengalêstibetanbretonbosniaccatalancecenchamorrocors" + + "creececsclâf de glesiegalêsdanêstodescgrêcinglêsesperantospagnûlesto" + + "nbascpersianfulahfinlandêsfizianfaroêsfrancêsfrisiangaelic irlandêsg" + + "aelic scozêsgalizianguaranìgujaratimanxebraichindicravuathaitianongj" + + "arêsarmenindonesianigboinupiaqidoislandêstalianinuktitutgjaponêsgjeo" + + "rgjiankazackalaallisutkhmerkannadacoreancurdcornualiêslatinlussembur" + + "ghêslimburghêslingalalaolituanletonmalagasymaorimacedonmalayalammong" + + "ulmarathimalêsmaltêsndebele setentrionâlnepalêsolandêsnorvegjês nyno" + + "rsknorvegjês bokmålnavajoocitanoriyaoseticpunjabipolacpashtoportughê" + + "squechuarumançromenrussanscritsardegnûlsindhisami setentrionâlsangos" + + "inalêsslovacslovensamoansomalalbanêsserpswatisotho meridionâlsundanê" + + "ssvedêsswahilitamiltelegutagicthaiturcmenturctartartahitianuigurucra" + + "inurduuzbecvendavietnamitevalonwolofxhosayiddishyorubacinêszuluvieri" + + " inglêsaramaicasturiancopticsclâfvieri egjizianfilipinvieri francêsf" + + "urlangoticvieri grêcladinlenghis multiplismirandêsnapoletanbas todes" + + "cvieri norvegjêssotho setentrionâlturc otomanpapiamentovieri persian" + + "vieri provenzâlsicilianscozêsvieri irlandêssumerictetumindeterminade" + + "todesc de Austriealt todesc de Svuizareinglês australianinglês canad" + + "êsinglês britanicingles merecanspagnûl de Americhe Latinespagnûl ib" + + "ericfrancês dal Canadefrancês de Svuizareflamantportughês brasilianp" + + "ortughês ibericmoldâfcinês semplificâtcinês tradizionâl", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000c, 0x0013, 0x001c, 0x001c, 0x0022, 0x002b, + 0x002f, 0x0037, 0x003b, 0x0042, 0x004d, 0x004d, 0x0056, 0x005c, + 0x005c, 0x005c, 0x0065, 0x006c, 0x0072, 0x0079, 0x0080, 0x0085, + 0x008d, 0x0091, 0x0095, 0x0098, 0x00a8, 0x00a8, 0x00ae, 0x00b4, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00bf, 0x00c6, 0x00cf, 0x00d7, + 0x00dc, 0x00e0, 0x00e7, 0x00ec, 0x00f6, 0x00fc, 0x0103, 0x010b, + 0x0112, 0x0122, 0x0130, 0x0138, 0x0140, 0x0148, 0x014c, 0x014c, + 0x0152, 0x0157, 0x0157, 0x015e, 0x0165, 0x016e, 0x0173, 0x0173, + // Entry 40 - 7F + 0x0173, 0x017d, 0x017d, 0x0181, 0x0181, 0x0188, 0x018b, 0x0194, + 0x019a, 0x01a3, 0x01ac, 0x01ac, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + 0x01bb, 0x01c6, 0x01cb, 0x01d2, 0x01d8, 0x01d8, 0x01d8, 0x01dc, + 0x01dc, 0x01e7, 0x01e7, 0x01ec, 0x01fa, 0x01fa, 0x0205, 0x020c, + 0x020f, 0x0215, 0x0215, 0x021a, 0x0222, 0x0222, 0x0227, 0x022e, + 0x0237, 0x023d, 0x0244, 0x024a, 0x0251, 0x0251, 0x0251, 0x0266, + 0x026e, 0x026e, 0x0276, 0x0288, 0x029a, 0x029a, 0x02a0, 0x02a0, + 0x02a6, 0x02a6, 0x02a6, 0x02ab, 0x02b1, 0x02b8, 0x02b8, 0x02bd, + // Entry 80 - BF + 0x02c3, 0x02cd, 0x02d4, 0x02db, 0x02db, 0x02e0, 0x02e3, 0x02e3, + 0x02eb, 0x02f5, 0x02fb, 0x030d, 0x0312, 0x031a, 0x0320, 0x0326, + 0x032c, 0x032c, 0x0331, 0x0339, 0x033d, 0x0342, 0x0353, 0x035c, + 0x0363, 0x036a, 0x036f, 0x0375, 0x037a, 0x037e, 0x037e, 0x0385, + 0x0385, 0x0385, 0x0389, 0x0389, 0x038f, 0x0397, 0x039c, 0x03a2, + 0x03a6, 0x03ab, 0x03b0, 0x03ba, 0x03ba, 0x03bf, 0x03c4, 0x03c9, + 0x03d0, 0x03d6, 0x03d6, 0x03dc, 0x03e0, 0x03e0, 0x03e0, 0x03e0, + 0x03e0, 0x03e0, 0x03e0, 0x03e0, 0x03e0, 0x03e0, 0x03e0, 0x03e0, + // Entry C0 - FF + 0x03e0, 0x03e0, 0x03ed, 0x03ed, 0x03f4, 0x03f4, 0x03f4, 0x03f4, + 0x03f4, 0x03f4, 0x03f4, 0x03f4, 0x03f4, 0x03f4, 0x03f4, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + // Entry 100 - 13F + 0x03fc, 0x0402, 0x0402, 0x0402, 0x0402, 0x0402, 0x0402, 0x0402, + 0x0402, 0x0402, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, + 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, + 0x0408, 0x0416, 0x0416, 0x0416, 0x0416, 0x0416, 0x0416, 0x0416, + 0x0416, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x042b, 0x042b, + 0x042b, 0x042b, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, + 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, + 0x0431, 0x0436, 0x0436, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + // Entry 140 - 17F + 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + 0x0441, 0x0441, 0x0441, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, + // Entry 180 - 1BF + 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, + 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, + 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, + 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, + 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, + 0x0446, 0x0457, 0x0457, 0x0460, 0x0460, 0x0460, 0x0460, 0x0460, + 0x0460, 0x0460, 0x0469, 0x0469, 0x0473, 0x0473, 0x0473, 0x0473, + 0x0473, 0x0473, 0x0473, 0x0473, 0x0483, 0x0483, 0x0483, 0x0496, + // Entry 1C0 - 1FF + 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, 0x04a1, + 0x04a1, 0x04a1, 0x04a1, 0x04ab, 0x04ab, 0x04ab, 0x04ab, 0x04ab, + 0x04ab, 0x04b8, 0x04b8, 0x04b8, 0x04b8, 0x04b8, 0x04b8, 0x04b8, + 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, + 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, + 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, + 0x04d0, 0x04d7, 0x04d7, 0x04d7, 0x04d7, 0x04d7, 0x04d7, 0x04d7, + 0x04d7, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, + // Entry 200 - 23F + 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, + 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04ed, 0x04ed, 0x04ed, + 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04f2, 0x04f2, + 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, + 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, + 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04ff, 0x04ff, + 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, + 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, + // Entry 240 - 27F + 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, + 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, + 0x0510, 0x0526, 0x0538, 0x0548, 0x0558, 0x0566, 0x0581, 0x0590, + 0x0590, 0x0590, 0x05a3, 0x05b7, 0x05b7, 0x05be, 0x05d2, 0x05e3, + 0x05ea, 0x05ea, 0x05ea, 0x05fd, 0x0610, + }, + }, + { // fy + "AfarAbchazyskAvestyskAfrikaanskAkanAmhaarskAragoneeskArabyskAssameeskAva" + + "ryskAymaraAzerbeidzjaanskBasjkierskWyt-RussyskBulgaarskBislamaBambar" + + "aBengaalskTibetaanskBretonskBosnyskKatalaanskTsjetsjeenskChamorroKor" + + "sikaanskCreeTsjechyskKerkslavyskTsjoevasjyskWelskDeenskDútskDivehiDz" + + "ongkhaEweGryksIngelskEsperantoSpaanskEstlânskBaskyskPerzyskFulahFins" + + "kFijyskFaeröerskFrânskWest-FryskIerskSchotsk GaelicGalisyskGuaraníGu" + + "jaratiManksHausaHebreeuwskHindiHiri MotuKroatyskHaïtiaanskHongaarskA" + + "rmeenskHereroInterlinguaYndonezyskInterlingueIgboSichuan YiInupiaqId" + + "oYslânsItaliaanskInuktitutJapansJavaanskGeorgyskKongoKikuyuKuanyamaK" + + "azachsGrienlânsKhmerKannadaKoreaanskKanuriKasjmiriKoerdyskKomiCornis" + + "hKirgizyskLatynLuxemburgsGandaLimburgsLingalaLaotiaanskLitouwsLuba-K" + + "atangaLetlânsMalagasyskMarshalleesMaoriMacedonyskMalayalamMongoolsMa" + + "rathiMaleisMalteesBirmeesNauruaanskNoard-NdbeleNepaleesNdongaNederlâ" + + "nskNoors - NynorskNoors - BokmålSûd-NdbeleNavajoNyanjaOccitaanskOjib" + + "waOromoOdiaOssetyskPunjabiPaliPoalskPasjtoePortugeeskQuechuaReto-Rom" + + "aanskKirundiRoemeenskRussyskKinyarwandaSanskrietSardinyskSindhiNoard" + + "-SamyskSangoSingaleesSlowaaksSloveenskSamoaanskShonaSomalyskAlbanees" + + "kServyskSwaziSûd-SothoSoendaneeskZweedsSwahiliTamilTeluguTadzjieksTh" + + "aisTigrinyaTurkmeensTswanaTongaanskTurksTsongaTataarsTahityskOeigoer" + + "sOekraïensUrduOezbeeksVendaVietnameesVolapükWaalsWolofXhosaJiddyskYo" + + "rubaZhuangSineeskZuluAtjeeskAkoliAdangmeAdygheAfrihiliAghemAinuAkkad" + + "yskAleutSûd-AltaïskâldingelskAngikaArameeskAraukaanskArapahoArawakAs" + + "uAsturyskAwadhiBaloetsjyskBalineeskBasaBamounGhomala’BejaBembaBenaBa" + + "futBhojpuriBikolBiniKomSiksikaBrajBodoAkooseBuriatBugineeskBuluBlinM" + + "edumbaKaddoKaribyskCayugaAtsamCebuanoChigaChibchaChagataiChuukeeskMa" + + "riChinook-jargonChoctawChipewyanCherokeeCheyenneSoranîKoptyskKrim-Ta" + + "taarskKasjoebyskDakotaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriN" + + "edersorbyskDualaMiddelnederlânskJola-FonyiDyulaDazagaEmbuEfikAldegyp" + + "tyskEkajukElamityskMiddelingelskEwondoFangFilipynskFonMiddelfrânskAl" + + "dfrânskNoard-FryskEast-FryskFriulyskGaGayoGbayaGeezGilberteeskMiddel" + + "heechdútskAlsheechdútskGondiGorontaloGothyskGreboAldgryksSwitsers Dú" + + "tskGusiiGwichʼinHaidaHawaïaanskHiligaynonHettityskHmongOppersorbyskH" + + "upaIbanIbibioIlokoIngoesjLojbanNgombaMachameJudeo-PerzyskJudeo-Araby" + + "skKarakalpaksKabyleKachinJjuKambaKawiKabardyskKanembuTyapMakondeKaap" + + "verdysk CreoolsKoroKhasiKhotaneeskKoyra ChiiniKakoKalenjinKimbunduKo" + + "nkaniKosraeaanskKpelleKarachay-BalkarKarelyskKurukhShambalaBafiaKöls" + + "chKoemuksKutenaiLadinoLangiLahndaLambaLezgyskLakotaMongoLoziLuba-Lul" + + "uaLuisenoLundaLuoLushaiLuyiaMadureesMafaMagahiMaithiliMakassaarsMand" + + "ingoMasaiMabaMokshaMandarMendeMeruMorisyenMiddeliersMakhuwa-MeettoMe" + + "ta’Mi’kmaqMinangkabauMantsjoeManipoeriMohawkMossiMundangMeardere tal" + + "enCreekMirandeesMarwariMyeneErzjaNapolitaanskNamaLaagduitsNewariNias" + + "NiueaanskNgumbaNgiemboonNogaiAldnoarskN’koNoard-SothoNuerKlassiek Ne" + + "wariNyamweziNyankoleNyoroNzimaOsageOttomaansk-TurksPangasinanPahlavi" + + "PampangaPapiamentsPalauaanskAldperzyskFoenisyskPohnpeiaanskAldproven" + + "çaalsRajasthaniRapanuiRarotonganRomboRomaniAromaniaanskRwaSandaweJa" + + "koetsSamaritaansk-ArameeskSamburuSasakSantaliNgambaySanguSiciliaansk" + + "SchotsSenecaSenaSelkupKoyraboro SenniAldyrskTashelhiytShanTsjadysk A" + + "rabyskSidamoSûd-SamyskLule SamiInari SamiSkolt SamiSoninkeSogdyskSra" + + "nantongoSererSahoSukumaSoesoeSoemeryskShimaoreKlassiek SyryskSyryskT" + + "imneTesoTerenoTetunTigreTivTokelausKlingonTlingitTamashekNyasa Tonga" + + "Tok PisinTarokoTsimshianToemboekaTuvaluaanskTasawaqTuvinyskTamazight" + + " (Sintraal-Marokko)OedmoertsOegarityskUmbunduRootVaiVotyskVunjoWalse" + + "rWalamoWarayWashoKalmykSogaYaoYapeesYangbenYembaKantoneeskZapotecBli" + + "ssymbolenZenagaStandert Marokkaanske TamazightZuniGjin linguïstyske " + + "ynhâldZazaModern standert ArabyskEastenryks DútskSwitsersk Heechdúts" + + "kAustralysk IngelskKanadeesk IngelskBritsk IngelskAmerikaansk Ingels" + + "kLatynsk-Amerikaansk SpaanskEuropeesk SpaanskMeksikaansk SpaanskKana" + + "deesk FrânskSwitserse FrânskVlaamsBrazyljaansk PortugeesEuropees Por" + + "tugeesMoldavyskServokroatyskCongo SwahiliFerienfâldich SineeskTradis" + + "joneel Sineesk", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x0015, 0x001f, 0x0023, 0x002b, 0x0035, + 0x003c, 0x0045, 0x004c, 0x0052, 0x0061, 0x006b, 0x0076, 0x007f, + 0x0086, 0x008d, 0x0096, 0x00a0, 0x00a8, 0x00af, 0x00b9, 0x00c5, + 0x00cd, 0x00d8, 0x00dc, 0x00e5, 0x00f0, 0x00fc, 0x0101, 0x0107, + 0x010d, 0x0113, 0x011b, 0x011e, 0x0123, 0x012a, 0x0133, 0x013a, + 0x0143, 0x014a, 0x0151, 0x0156, 0x015b, 0x0161, 0x016b, 0x0172, + 0x017c, 0x0181, 0x018f, 0x0197, 0x019f, 0x01a7, 0x01ac, 0x01b1, + 0x01bb, 0x01c0, 0x01c9, 0x01d1, 0x01dc, 0x01e5, 0x01ed, 0x01f3, + // Entry 40 - 7F + 0x01fe, 0x0208, 0x0213, 0x0217, 0x0221, 0x0228, 0x022b, 0x0232, + 0x023c, 0x0245, 0x024b, 0x0253, 0x025b, 0x0260, 0x0266, 0x026e, + 0x0275, 0x027f, 0x0284, 0x028b, 0x0294, 0x029a, 0x02a2, 0x02aa, + 0x02ae, 0x02b5, 0x02be, 0x02c3, 0x02cd, 0x02d2, 0x02da, 0x02e1, + 0x02eb, 0x02f2, 0x02fe, 0x0306, 0x0310, 0x031b, 0x0320, 0x032a, + 0x0333, 0x033b, 0x0342, 0x0348, 0x034f, 0x0356, 0x0360, 0x036c, + 0x0374, 0x037a, 0x0385, 0x0394, 0x03a3, 0x03ae, 0x03b4, 0x03ba, + 0x03c4, 0x03ca, 0x03cf, 0x03d3, 0x03db, 0x03e2, 0x03e6, 0x03ec, + // Entry 80 - BF + 0x03f3, 0x03fd, 0x0404, 0x0411, 0x0418, 0x0421, 0x0428, 0x0433, + 0x043c, 0x0445, 0x044b, 0x0457, 0x045c, 0x0465, 0x046d, 0x0476, + 0x047f, 0x0484, 0x048c, 0x0495, 0x049c, 0x04a1, 0x04ab, 0x04b6, + 0x04bc, 0x04c3, 0x04c8, 0x04ce, 0x04d7, 0x04dc, 0x04e4, 0x04ed, + 0x04f3, 0x04fc, 0x0501, 0x0507, 0x050e, 0x0516, 0x051e, 0x0528, + 0x052c, 0x0534, 0x0539, 0x0543, 0x054b, 0x0550, 0x0555, 0x055a, + 0x0561, 0x0567, 0x056d, 0x0574, 0x0578, 0x057f, 0x0584, 0x058b, + 0x0591, 0x0591, 0x0599, 0x059e, 0x05a2, 0x05aa, 0x05aa, 0x05af, + // Entry C0 - FF + 0x05af, 0x05bc, 0x05c7, 0x05cd, 0x05d5, 0x05df, 0x05df, 0x05e6, + 0x05e6, 0x05e6, 0x05ec, 0x05ec, 0x05ec, 0x05ef, 0x05ef, 0x05f7, + 0x05f7, 0x05fd, 0x0608, 0x0611, 0x0611, 0x0615, 0x061b, 0x061b, + 0x0625, 0x0629, 0x062e, 0x062e, 0x0632, 0x0637, 0x0637, 0x0637, + 0x063f, 0x0644, 0x0648, 0x0648, 0x064b, 0x0652, 0x0652, 0x0652, + 0x0656, 0x0656, 0x065a, 0x0660, 0x0666, 0x066f, 0x0673, 0x0677, + 0x067e, 0x0683, 0x068b, 0x0691, 0x0696, 0x069d, 0x06a2, 0x06a9, + 0x06b1, 0x06ba, 0x06be, 0x06cc, 0x06d3, 0x06dc, 0x06e4, 0x06ec, + // Entry 100 - 13F + 0x06f3, 0x06fa, 0x06fa, 0x0707, 0x0707, 0x0711, 0x0717, 0x071d, + 0x0722, 0x072a, 0x072f, 0x0735, 0x073a, 0x073f, 0x0744, 0x0750, + 0x0750, 0x0755, 0x0766, 0x0770, 0x0775, 0x077b, 0x077f, 0x0783, + 0x0783, 0x078e, 0x0794, 0x079d, 0x07aa, 0x07aa, 0x07b0, 0x07b0, + 0x07b4, 0x07bd, 0x07bd, 0x07c0, 0x07c0, 0x07cd, 0x07d7, 0x07d7, + 0x07e2, 0x07ec, 0x07f4, 0x07f6, 0x07f6, 0x07f6, 0x07fa, 0x07ff, + 0x07ff, 0x0803, 0x080e, 0x080e, 0x081f, 0x082d, 0x082d, 0x0832, + 0x083b, 0x0842, 0x0847, 0x084f, 0x085e, 0x085e, 0x085e, 0x0863, + // Entry 140 - 17F + 0x086c, 0x0871, 0x0871, 0x087c, 0x087c, 0x0886, 0x088f, 0x0894, + 0x08a0, 0x08a0, 0x08a4, 0x08a8, 0x08ae, 0x08b3, 0x08ba, 0x08ba, + 0x08ba, 0x08c0, 0x08c6, 0x08cd, 0x08da, 0x08e7, 0x08e7, 0x08f2, + 0x08f8, 0x08fe, 0x0901, 0x0906, 0x090a, 0x0913, 0x091a, 0x091e, + 0x0925, 0x0938, 0x0938, 0x093c, 0x093c, 0x0941, 0x094b, 0x0957, + 0x0957, 0x0957, 0x095b, 0x0963, 0x096b, 0x096b, 0x0972, 0x097d, + 0x0983, 0x0992, 0x0992, 0x0992, 0x099a, 0x09a0, 0x09a8, 0x09ad, + 0x09b4, 0x09bb, 0x09c2, 0x09c8, 0x09cd, 0x09d3, 0x09d8, 0x09df, + // Entry 180 - 1BF + 0x09df, 0x09df, 0x09df, 0x09e5, 0x09e5, 0x09ea, 0x09ee, 0x09ee, + 0x09ee, 0x09f8, 0x09ff, 0x0a04, 0x0a07, 0x0a0d, 0x0a12, 0x0a12, + 0x0a12, 0x0a1a, 0x0a1e, 0x0a24, 0x0a2c, 0x0a36, 0x0a3e, 0x0a43, + 0x0a47, 0x0a4d, 0x0a53, 0x0a58, 0x0a5c, 0x0a64, 0x0a6e, 0x0a7c, + 0x0a83, 0x0a8c, 0x0a97, 0x0a9f, 0x0aa8, 0x0aae, 0x0ab3, 0x0ab3, + 0x0aba, 0x0ac8, 0x0acd, 0x0ad6, 0x0add, 0x0add, 0x0ae2, 0x0ae7, + 0x0ae7, 0x0ae7, 0x0af3, 0x0af7, 0x0b00, 0x0b06, 0x0b0a, 0x0b13, + 0x0b13, 0x0b19, 0x0b22, 0x0b27, 0x0b30, 0x0b30, 0x0b36, 0x0b41, + // Entry 1C0 - 1FF + 0x0b45, 0x0b54, 0x0b5c, 0x0b64, 0x0b69, 0x0b6e, 0x0b73, 0x0b83, + 0x0b8d, 0x0b94, 0x0b9c, 0x0ba6, 0x0bb0, 0x0bb0, 0x0bb0, 0x0bb0, + 0x0bb0, 0x0bba, 0x0bba, 0x0bc3, 0x0bc3, 0x0bc3, 0x0bcf, 0x0bcf, + 0x0bde, 0x0bde, 0x0bde, 0x0be8, 0x0bef, 0x0bf9, 0x0bf9, 0x0bf9, + 0x0bfe, 0x0c04, 0x0c04, 0x0c04, 0x0c04, 0x0c10, 0x0c13, 0x0c1a, + 0x0c21, 0x0c36, 0x0c3d, 0x0c42, 0x0c49, 0x0c49, 0x0c50, 0x0c55, + 0x0c60, 0x0c66, 0x0c66, 0x0c66, 0x0c6c, 0x0c70, 0x0c70, 0x0c76, + 0x0c85, 0x0c8c, 0x0c8c, 0x0c96, 0x0c9a, 0x0caa, 0x0cb0, 0x0cb0, + // Entry 200 - 23F + 0x0cb0, 0x0cbb, 0x0cc4, 0x0cce, 0x0cd8, 0x0cdf, 0x0ce6, 0x0cf1, + 0x0cf6, 0x0cfa, 0x0cfa, 0x0d00, 0x0d06, 0x0d0f, 0x0d17, 0x0d26, + 0x0d2c, 0x0d2c, 0x0d2c, 0x0d31, 0x0d35, 0x0d3b, 0x0d40, 0x0d45, + 0x0d48, 0x0d50, 0x0d50, 0x0d57, 0x0d5e, 0x0d5e, 0x0d66, 0x0d71, + 0x0d7a, 0x0d7a, 0x0d80, 0x0d80, 0x0d89, 0x0d89, 0x0d92, 0x0d9d, + 0x0da4, 0x0dac, 0x0dc8, 0x0dd1, 0x0ddb, 0x0de2, 0x0de6, 0x0de9, + 0x0de9, 0x0de9, 0x0de9, 0x0de9, 0x0def, 0x0def, 0x0df4, 0x0dfa, + 0x0e00, 0x0e05, 0x0e0a, 0x0e0a, 0x0e0a, 0x0e10, 0x0e10, 0x0e14, + // Entry 240 - 27F + 0x0e17, 0x0e1d, 0x0e24, 0x0e29, 0x0e29, 0x0e33, 0x0e3a, 0x0e46, + 0x0e46, 0x0e4c, 0x0e6b, 0x0e6f, 0x0e89, 0x0e8d, 0x0ea4, 0x0ea4, + 0x0eb5, 0x0eca, 0x0edc, 0x0eed, 0x0efb, 0x0f0e, 0x0f29, 0x0f3a, + 0x0f4d, 0x0f4d, 0x0f5e, 0x0f6f, 0x0f6f, 0x0f75, 0x0f8b, 0x0f9d, + 0x0fa6, 0x0fb3, 0x0fc0, 0x0fd6, 0x0fea, + }, + }, + { // ga + "AfáirisAbcáisisAivéistisAfracáinisAcáinisAmáirisAragóinisAraibisAsaimisA" + + "váirisAidhmirisAsarbaiseáinisBaiscírisBealarúisisBulgáirisBioslaimis" + + "BeangáilisTibéidisBriotáinisBoisnisCatalóinisSeisnisSeamóirisCorsaic" + + "isCraísSeicisSlavais na hEaglaiseSuvaisisBreatnaisDanmhairgisGearmái" + + "nisDivéihisSeoinicisGréigisBéarlaEsperantoSpáinnisEastóinisBascaisPe" + + "irsisFuláinisFionlainnisFidsisFaróisFraincisFreaslainnis IartharachG" + + "aeilgeGaeilge na hAlbanGailísisGuaráinisGúisearáitisManainnisHásaisE" + + "abhraisHiondúisMotúis HíríCróitisCriól HáítíochUngáirisAirméinisHeir" + + "éirisInterlinguaIndinéisisInterlingueÍogbóisIniúipiaicisIdoÍoslainn" + + "isIodáilisIonúitisSeapáinisIáivisSeoirsisCongóisCiocúisCuainiáimisCa" + + "saicisKalaallisutCiméirisCannadaisCóiréisCanúirisCaismírisCoirdisCoi" + + "misCoirnisCirgisisLaidinLucsambuirgisLugandaisLiongáilisLaoisisLiotu" + + "áinisLúba-CataingisLaitvisMalagáisisMairsillisMaoraisMacadóinisMail" + + "éalaimisMongóilisMaraitisMalaeisMáltaisBurmaisNárúisNdeibéilis an T" + + "uaiscirtNeipeailisNdongaisOllainnisNua-IoruaisIoruais BokmålNdeibéil" + + "is an DeiscirtNavachóisSiséivisOcsatáinisÓisibisOraimisOirísisOiséit" + + "isPuinseáibisPáilisPolainnisPaistisPortaingéilisCeatsuaisRómainisRúi" + + "ndisRómáinisRúisisCiniaruaindisSanscraitSairdínisSindisSáimis Thuaid" + + "hSangóisSiolóinisSlóvaicisSlóivéinisSamóisSeoinisSomáilisAlbáinisSei" + + "rbisSuaisisSeasóitisSundaisSualainnisSvahaílisTamailisTeileagúisTáid" + + "sícisTéalainnisTigrinisTuircméinisSuáinisTongaisTuircisSongaisTatair" + + "isTaihítisUigiúirisÚcráinisUrdúisÚisbéiceastáinisVeindisVítneaimisVo" + + "lapükVallúnaisVolaifisCóisisGiúdaisIarúibisSiuáingisSínisSúlúisAdaig" + + "éisAidhniúisAcáidisSean-BhéarlaAramaisMapúitsisAstúirisBailísBaváir" + + "isBeimbisBuiriáitisBuiginisSeabúáinisMairisSeiricisCoptaisCaisiúibis" + + "TaitaZarmaisSorbais ÍochtarachMeán-OllainnisSean-ÉigiptisMeán-Bhéarl" + + "aFilipínisMeán-FhraincisSean-FhraincisFreaslainnis an TuaiscirtFriúi" + + "lisAetóipisMeán-Ard-GhearmáinisSean-Ard-GhearmáinisSean-GhréigisGear" + + "máinis EilvéiseachUaúisHaicéisHaváisHiondúis FhidsíHilgeanóinisHitis" + + "MongaisSorbais UachtarachHúipisIbibisIongúisLojbanIútlainnisCara-Cha" + + "lpáisConcáinisCairéilisCurúicisLaidínisPuinseáibis IartharachLiogúir" + + "isLiovóinisLombairdisMeindisMeán-GhaeilgeManapúirisMóháicisMairis Ia" + + "rtharachIlteangachaMioraindéisMarmhairisGearmáinis ÍochtarachNíobhai" + + "sSean-LochlainnisSútúis an TuaiscirtSean-PheirsisPrúisisCuitséisRoma" + + "inisArómáinisSachaisAramais ShamárachSantáilisSicilisAlbainisSean-Gh" + + "aeilgeTachelhitSáimis LuleSogdánaisSuiméirisSiricisSiléisisKlingonUd" + + "mairtisTeanga AnaithnidVeinéisisPléimeannais IartharachCailmícisCant" + + "ainisSéalainnisZúinisGan ábhar teangeolaíochAraibis ChaighdeánachGea" + + "rmáinis OstarachArd-Ghearmáinis EilvéiseachBéarla AstrálachBéarla Ce" + + "anadachBéarla BriotanachBéarla MeiriceánachSpáinnis Mheiriceá Laidin" + + "ighSpáinnis EorpachSpáinnis MheicsiceachFraincis CheanadachFraincis " + + "EilvéiseachSacsainis ÍochtarachPléimeannaisPortaingéilis na Brasaíle" + + "Portaingéilis IbéarachMoldáivisSeirbea-ChróitisSvahaílis an ChongóSí" + + "nis ShimplitheSínis Thraidisiúnta", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0011, 0x001b, 0x0026, 0x002e, 0x0036, 0x0040, + 0x0047, 0x004e, 0x0056, 0x005f, 0x006e, 0x0078, 0x0084, 0x008e, + 0x0098, 0x0098, 0x00a3, 0x00ac, 0x00b7, 0x00be, 0x00c9, 0x00d0, + 0x00da, 0x00e3, 0x00e9, 0x00ef, 0x0103, 0x010b, 0x0114, 0x011f, + 0x012a, 0x0133, 0x013c, 0x013c, 0x0144, 0x014b, 0x0154, 0x015d, + 0x0167, 0x016e, 0x0175, 0x017e, 0x0189, 0x018f, 0x0196, 0x019e, + 0x01b5, 0x01bc, 0x01cd, 0x01d6, 0x01e0, 0x01ee, 0x01f7, 0x01fe, + 0x0206, 0x020f, 0x021d, 0x0225, 0x0237, 0x0240, 0x024a, 0x0254, + // Entry 40 - 7F + 0x025f, 0x026a, 0x0275, 0x027e, 0x027e, 0x028b, 0x028e, 0x0299, + 0x02a2, 0x02ab, 0x02b5, 0x02bc, 0x02c4, 0x02cc, 0x02d4, 0x02e0, + 0x02e8, 0x02f3, 0x02fc, 0x0305, 0x030e, 0x0317, 0x0321, 0x0328, + 0x032e, 0x0335, 0x033d, 0x0343, 0x0350, 0x0359, 0x0359, 0x0364, + 0x036b, 0x0376, 0x0385, 0x038c, 0x0397, 0x03a1, 0x03a8, 0x03b3, + 0x03c0, 0x03ca, 0x03d2, 0x03d9, 0x03e1, 0x03e8, 0x03f0, 0x0408, + 0x0412, 0x041a, 0x0423, 0x042e, 0x043d, 0x0454, 0x045e, 0x0467, + 0x0472, 0x047a, 0x0481, 0x0489, 0x0492, 0x049e, 0x04a5, 0x04ae, + // Entry 80 - BF + 0x04b5, 0x04c3, 0x04cc, 0x04d5, 0x04dd, 0x04e7, 0x04ee, 0x04fb, + 0x0504, 0x050e, 0x0514, 0x0523, 0x052b, 0x0535, 0x053f, 0x054b, + 0x0552, 0x0559, 0x0562, 0x056b, 0x0572, 0x0579, 0x0583, 0x058a, + 0x0594, 0x059e, 0x05a6, 0x05b1, 0x05bc, 0x05c7, 0x05cf, 0x05db, + 0x05e3, 0x05ea, 0x05f1, 0x05f8, 0x0600, 0x0609, 0x0613, 0x061d, + 0x0624, 0x0637, 0x063e, 0x0649, 0x0651, 0x065b, 0x0663, 0x066a, + 0x0672, 0x067b, 0x0685, 0x068b, 0x0693, 0x0693, 0x0693, 0x0693, + 0x069c, 0x069c, 0x069c, 0x069c, 0x06a6, 0x06ae, 0x06ae, 0x06ae, + // Entry C0 - FF + 0x06ae, 0x06ae, 0x06bb, 0x06bb, 0x06c2, 0x06cc, 0x06cc, 0x06cc, + 0x06cc, 0x06cc, 0x06cc, 0x06cc, 0x06cc, 0x06cc, 0x06cc, 0x06d5, + 0x06d5, 0x06d5, 0x06d5, 0x06dc, 0x06e5, 0x06e5, 0x06e5, 0x06e5, + 0x06e5, 0x06e5, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, + 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, + 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06f7, 0x06ff, 0x06ff, 0x06ff, + 0x06ff, 0x06ff, 0x06ff, 0x06ff, 0x06ff, 0x070b, 0x070b, 0x070b, + 0x070b, 0x070b, 0x0711, 0x0711, 0x0711, 0x0711, 0x0719, 0x0719, + // Entry 100 - 13F + 0x0719, 0x0720, 0x0720, 0x0720, 0x0720, 0x072b, 0x072b, 0x072b, + 0x0730, 0x0730, 0x0730, 0x0730, 0x0730, 0x0737, 0x0737, 0x074a, + 0x074a, 0x074a, 0x0759, 0x0759, 0x0759, 0x0759, 0x0759, 0x0759, + 0x0759, 0x0767, 0x0767, 0x0767, 0x0775, 0x0775, 0x0775, 0x0775, + 0x0775, 0x077f, 0x077f, 0x077f, 0x077f, 0x078e, 0x079c, 0x079c, + 0x07b5, 0x07b5, 0x07be, 0x07be, 0x07be, 0x07be, 0x07be, 0x07be, + 0x07be, 0x07c7, 0x07c7, 0x07c7, 0x07dd, 0x07f2, 0x07f2, 0x07f2, + 0x07f2, 0x07f2, 0x07f2, 0x0800, 0x0818, 0x081e, 0x081e, 0x081e, + // Entry 140 - 17F + 0x081e, 0x081e, 0x0826, 0x082d, 0x083e, 0x084b, 0x0850, 0x0857, + 0x0869, 0x0869, 0x0870, 0x0870, 0x0876, 0x0876, 0x087e, 0x087e, + 0x087e, 0x0884, 0x0884, 0x0884, 0x0884, 0x0884, 0x088f, 0x089d, + 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, + 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, + 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x08a7, 0x08a7, + 0x08a7, 0x08a7, 0x08a7, 0x08a7, 0x08b1, 0x08ba, 0x08ba, 0x08ba, + 0x08ba, 0x08ba, 0x08ba, 0x08c3, 0x08c3, 0x08da, 0x08da, 0x08da, + // Entry 180 - 1BF + 0x08da, 0x08e4, 0x08ee, 0x08ee, 0x08f8, 0x08f8, 0x08f8, 0x08f8, + 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, + 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, + 0x08f8, 0x08f8, 0x08f8, 0x08ff, 0x08ff, 0x08ff, 0x090d, 0x090d, + 0x090d, 0x090d, 0x090d, 0x090d, 0x0918, 0x0922, 0x0922, 0x0933, + 0x0933, 0x093e, 0x093e, 0x094a, 0x0954, 0x0954, 0x0954, 0x0954, + 0x0954, 0x0954, 0x0954, 0x0954, 0x096b, 0x096b, 0x096b, 0x0974, + 0x0974, 0x0974, 0x0974, 0x0974, 0x0984, 0x0984, 0x0984, 0x0999, + // Entry 1C0 - 1FF + 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, + 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, + 0x0999, 0x09a6, 0x09a6, 0x09a6, 0x09a6, 0x09a6, 0x09a6, 0x09ae, + 0x09ae, 0x09b7, 0x09b7, 0x09b7, 0x09b7, 0x09b7, 0x09b7, 0x09b7, + 0x09b7, 0x09bf, 0x09bf, 0x09bf, 0x09bf, 0x09ca, 0x09ca, 0x09ca, + 0x09d1, 0x09e3, 0x09e3, 0x09e3, 0x09ed, 0x09ed, 0x09ed, 0x09ed, + 0x09f4, 0x09fc, 0x09fc, 0x09fc, 0x09fc, 0x09fc, 0x09fc, 0x09fc, + 0x09fc, 0x0a09, 0x0a09, 0x0a12, 0x0a12, 0x0a12, 0x0a12, 0x0a12, + // Entry 200 - 23F + 0x0a12, 0x0a12, 0x0a1e, 0x0a1e, 0x0a1e, 0x0a1e, 0x0a28, 0x0a28, + 0x0a28, 0x0a28, 0x0a28, 0x0a28, 0x0a28, 0x0a32, 0x0a32, 0x0a32, + 0x0a39, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, + 0x0a42, 0x0a42, 0x0a42, 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, + 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, + 0x0a49, 0x0a49, 0x0a49, 0x0a52, 0x0a52, 0x0a52, 0x0a62, 0x0a62, + 0x0a6c, 0x0a6c, 0x0a84, 0x0a84, 0x0a84, 0x0a84, 0x0a84, 0x0a84, + 0x0a84, 0x0a84, 0x0a84, 0x0a84, 0x0a84, 0x0a8e, 0x0a8e, 0x0a8e, + // Entry 240 - 27F + 0x0a8e, 0x0a8e, 0x0a8e, 0x0a8e, 0x0a8e, 0x0a97, 0x0a97, 0x0a97, + 0x0aa2, 0x0aa2, 0x0aa2, 0x0aa9, 0x0ac2, 0x0ac2, 0x0ad8, 0x0ad8, + 0x0aec, 0x0b09, 0x0b1b, 0x0b2c, 0x0b3e, 0x0b53, 0x0b71, 0x0b82, + 0x0b98, 0x0b98, 0x0bab, 0x0bc0, 0x0bd5, 0x0be2, 0x0bfd, 0x0c15, + 0x0c1f, 0x0c30, 0x0c45, 0x0c56, 0x0c6b, + }, + }, + { // gd + "AfarAbchasaisAvestanaisAfraganaisAkanAmtharaisAragonaisArabaisAsamaisAva" + + "raisAymaraAsarbaideànaisBashkirBealaruisisBulgaraisBislamaBambaraBan" + + "glaTibeitisBreatnaisBosnaisCatalanaisDeideanaisChamorroCorsaisCreeSe" + + "icisSlàbhais na h-EaglaiseChuvashCuimrisDanmhairgisGearmailtisDivehi" + + "DzongkhaEweGreugaisBeurlaEsperantoSpàinntisEastoinisBasgaisPeirsisFu" + + "lahFionnlannaisFìdisFàrothaisFraingisFrìoslannais ShiarachGaeilgeGài" + + "dhligGailìsisGuaraníGujaratiGaelgHausaEabhraHindisHiri MotuCròthaisi" + + "sCrìtheol HaidhtiUngairisAirmeinisHereroInterlinguaInnd-InnsisInterl" + + "ingueIgboYi SichuanInupiaqIdoInnis TìlisEadailtisInuktitutSeapanaisD" + + "eàbhanaisCairtbheilisKongoKikuyuKuanyamaCasachaisKalaallisutCmèarKan" + + "nadaCoirèanaisKanuriCaismirisCùrdaisKomiCòrnaisCìorgasaisLaideannLug" + + "samburgaisGandaCànan LimburgLingalaLàthoLiotuainisLuba-KatangaLaitbh" + + "eisMalagasaisMarshallaisMāoriMasadonaisMalayalamMongolaisMarathiMala" + + "idhisMaltaisBurmaisNabhruNdebele ThuathachNeapàlaisNdongaDuitsisNyno" + + "rsk na NirribhidhBokmål na NirribhidhNdebele DheasachNavajoNyanjaOgs" + + "atanaisOjibwaOromoOdiaOsseticPanjabiPaliPòlainnisPashtoPortagailisQu" + + "echuaRumainsKirundiRomàinisRuisisKinyarwandaSanskritSàrdaisSindhiSàm" + + "ais ThuathachSangoSinhalaSlòbhacaisSlòbhainisSamothaisShonaSomàilisA" + + "lbàinisSèirbisSwatiSesothoCànan SundaSuainisKiswahiliTaimilisTeluguT" + + "aidigisCànan nan TàidhTigrinyaTurcmanaisTswanaTongaTurcaisTsongaTata" + + "raisCànan TahitiÙigiuraisUcràinisÙrduUsbagaisVendaBhiet-NamaisVolapü" + + "kWalloonWolofXhosaIùdhaisYorubaZhuangSìnisZuluBasa AcèhAcoliAdangmeA" + + "dygheArabais ThuiniseachAfrihiliAghemAinuAcadaisAlabamaAleutaisAlbài" + + "nis GhegeachAltais DheasachSeann-BheurlaAngikaAramaisMapudungunAraon" + + "aArapahoArabais AildireachArawakArabais MhorocachArabais Èipheiteach" + + "AsuCainnt-shanais na h-AimeireagaAstùraisKotavaAwadhiBaluchìCànan Ba" + + "liBasaaBamunBatak TobaGhomalaBejaBembaBetawiBenaBafutBadagaBalochi S" + + "hiarachBhojpuriBikolBiniBanjarKomSiksikaBishnupriyaBakhtiariBrajBrah" + + "uiBodoAkooseBuriatCànan nam BugisBuluBlinMedumbaCaddoCaribCayugaAtsa" + + "mCebuanoChigaChibchaChagataiCànan ChuukMariChinuk WawaChoctawChipewy" + + "anCherokeeCheyenneCùrdais MheadhanachCoptaisCapiznonTurcais Chriomac" + + "hSeiseallaisCaisiubaisDakotaDargwaTaitaDelawareSlaveyDogribDinkaZarm" + + "aDogriSòrbais ÌochdarachDusun MheadhanachDualaMeadhan-DhuitsisJola-F" + + "onyiDyulaDazagaEmbuEfikÈipheitis ÀrsaidhEkajukElamaisMeadhan-Bheurla" + + "Yupik MheadhanachEwondoCànan na h-ExtremaduraFangFilipinisMeänkieliF" + + "onFraingis nan CajunMeadhan-FhraingisSeann-FhraingisArpitanFrìoslann" + + "ais ThuathachFrìoslannais EarachFriùilisGaGagauzGanGayoGbayaDari Zor" + + "oastrachGe’ezCiribeasaisGilakiMeadhan-Àrd-GearmailtisSeann-Àrd-Gearm" + + "ailtisKonkani GoaGondiGorontaloGotaisGreboGreugais ÀrsaidhGearmailti" + + "s EilbheiseachWayuuFrafraGusiiGwichʼinHaidaHakkaCànan Hawai’iHindis " + + "FhìditheachHiligaynonCànan HetHmongSòrbais UachdarachXiangHupaIbanIb" + + "ibioIlokoIngushBeurla Crìtheolach DiameugaLojbanNgombaMachamePeirsis" + + " IùdhachArabais IùdhachKara-KalpakKabyleKachinJjuKambaKawiCabardaisK" + + "anembuTyapMakondeKabuverdianuKenyangKoroKaingangKhasiCànan KhotanKoy" + + "ra ChiiniKhowarKirmanjkiKakoKalenjinKimbunduKomi-PermyakKonkaniKpell" + + "eKarachay-BalkarKrioKinaray-aCairealaisKurukhShambalaBafiaGearmailti" + + "s ChologneKumykKutenaiLadinoLangiLahndaLambaLeasgaisLingua Franca No" + + "vaLiogùraisLakhótaLombardaisMongoLoziLuri ThuathachLuba-LuluaLuiseño" + + "LundaLuoMizoLuyiaSìnis an LitreachaisLazCànan MadhuraMafaMagahiMaith" + + "iliMakasarMandingoMaasaiMabaMokshaMandarMendeMeruMorisyenMeadhan-Gha" + + "eilgeMakhuwa-MeettoMeta’Mi’kmaqMinangkabauManchuManipuriMohawkMossiM" + + "ari ShiarachMundangIomadh cànanCreekMiorandaisMarwariMentawaiMyeneEr" + + "zyaMazanderaniMin NanEadailtis NapoliNamaGearmailtis ÌochdarachNewar" + + "iNiasCànan NiueAo NagaKwasioNgiemboonNogaiSeann-LochlannaisNovialN’K" + + "oSesotho sa LeboaNuerNewari ChlasaigeachNyamweziNyankoleNyoroNzimaOs" + + "ageTurcais OtomanachPangasinanPahlaviPampangaPapiamentuPalabhaisPica" + + "rdBeurla NigèiriachGearmailtis PhennsylvaniaPlautdietschSeann-Pheirs" + + "isPhenicisPiedmonteseCànan PohnpeiPruisisSeann-PhrovençalK’iche’Quic" + + "hua Àrd-tìr ChimborazoRajasthaniRapa NuiCànan RarotongaRomagnolRombo" + + "RomanaisRusynRovianaAromanaisRwaSandaweSakhaAramais ShamaritanachSam" + + "buruSasakSantaliSaurashtraNgambaySanguSisilisAlbaisSassareseCùrdais " + + "DheasachSenecaSenaSeriSelkupKoyraboro SenniSeann-GhaeilgeTachelhitSh" + + "anArabais SeàdachSidamoSelayarSàmais DheasachSàmais LuleSàmais Inari" + + "Sàmais SkoltSoninkeSranan TongoSererSahoSukumaSusuCànan SumerComorai" + + "sSuraidheac ChlasaigeachSuraidheacTuluTimneTesoTerênaTetumTigreTivTo" + + "kelauTsakhurKlingonTlingitTalyshTamashekNyasa TongaTok PisinTuroyoTa" + + "rokoTsimshianTatiTumbukaTubhaluTasawaqCànan TuvaTamazight an Atlais " + + "MheadhanaichUdmurtUmbunduRootVaiVepsFlannrais SiarachVõroVunjoGearma" + + "iltis WallisWolayttaWarayWashoWarlpiriWuKalmykSogaYaoCànan YapYangbe" + + "nYembaNheengatuCantonaisZapotecComharran BlissCànan ZeelandZenagaTam" + + "azight Stannardach MorocoZuñiSusbaint nach eil ’na chànanZazakiNuadh" + + "-Arabais StannardachGearmailtis na h-OstaireÀrd-Ghearmailtis na h-Ei" + + "lbheiseBeurla AstràiliaBeurla ChanadaBeurla BhreatainnBeurla na h-Ai" + + "meireagaSpàinntis na h-Aimeireaga LaidinneachSpàinntis EòrpachSpàinn" + + "tis MheagsagachFraingis ChanadaFraingis EilbheiseachSagsannais Ìochd" + + "arachFlannraisPortagailis BhraisileachPortagailis EòrpachMoldobhaisS" + + "èirb-ChròthaisisKiswahili na CongoSìnis ShimplichteSìnis Thradaisea" + + "nta", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x0017, 0x0021, 0x0025, 0x002e, 0x0037, + 0x003e, 0x0045, 0x004c, 0x0052, 0x0061, 0x0068, 0x0073, 0x007c, + 0x0083, 0x008a, 0x0090, 0x0098, 0x00a1, 0x00a8, 0x00b2, 0x00bc, + 0x00c4, 0x00cb, 0x00cf, 0x00d5, 0x00ec, 0x00f3, 0x00fa, 0x0105, + 0x0110, 0x0116, 0x011e, 0x0121, 0x0129, 0x012f, 0x0138, 0x0142, + 0x014b, 0x0152, 0x0159, 0x015e, 0x016a, 0x0170, 0x017a, 0x0182, + 0x0198, 0x019f, 0x01a8, 0x01b1, 0x01b9, 0x01c1, 0x01c6, 0x01cb, + 0x01d1, 0x01d7, 0x01e0, 0x01eb, 0x01fc, 0x0204, 0x020d, 0x0213, + // Entry 40 - 7F + 0x021e, 0x0229, 0x0234, 0x0238, 0x0242, 0x0249, 0x024c, 0x0258, + 0x0261, 0x026a, 0x0273, 0x027e, 0x028a, 0x028f, 0x0295, 0x029d, + 0x02a6, 0x02b1, 0x02b7, 0x02be, 0x02c9, 0x02cf, 0x02d8, 0x02e0, + 0x02e4, 0x02ec, 0x02f7, 0x02ff, 0x030c, 0x0311, 0x031f, 0x0326, + 0x032c, 0x0336, 0x0342, 0x034b, 0x0355, 0x0360, 0x0366, 0x0370, + 0x0379, 0x0382, 0x0389, 0x0392, 0x0399, 0x03a0, 0x03a6, 0x03b7, + 0x03c1, 0x03c7, 0x03ce, 0x03e3, 0x03f8, 0x0408, 0x040e, 0x0414, + 0x041e, 0x0424, 0x0429, 0x042d, 0x0434, 0x043b, 0x043f, 0x0449, + // Entry 80 - BF + 0x044f, 0x045a, 0x0461, 0x0468, 0x046f, 0x0478, 0x047e, 0x0489, + 0x0491, 0x0499, 0x049f, 0x04b0, 0x04b5, 0x04bc, 0x04c7, 0x04d2, + 0x04db, 0x04e0, 0x04e9, 0x04f2, 0x04fa, 0x04ff, 0x0506, 0x0512, + 0x0519, 0x0522, 0x052a, 0x0530, 0x0538, 0x0549, 0x0551, 0x055b, + 0x0561, 0x0566, 0x056d, 0x0573, 0x057b, 0x0588, 0x0592, 0x059b, + 0x05a0, 0x05a8, 0x05ad, 0x05b9, 0x05c1, 0x05c8, 0x05cd, 0x05d2, + 0x05da, 0x05e0, 0x05e6, 0x05ec, 0x05f0, 0x05fa, 0x05ff, 0x0606, + 0x060c, 0x061f, 0x0627, 0x062c, 0x0630, 0x0637, 0x063e, 0x0646, + // Entry C0 - FF + 0x0658, 0x0667, 0x0674, 0x067a, 0x0681, 0x068b, 0x0691, 0x0698, + 0x06aa, 0x06aa, 0x06b0, 0x06c1, 0x06d5, 0x06d8, 0x06f6, 0x06ff, + 0x0705, 0x070b, 0x0713, 0x071e, 0x071e, 0x0723, 0x0728, 0x0732, + 0x0739, 0x073d, 0x0742, 0x0748, 0x074c, 0x0751, 0x0757, 0x0767, + 0x076f, 0x0774, 0x0778, 0x077e, 0x0781, 0x0788, 0x0793, 0x079c, + 0x07a0, 0x07a6, 0x07aa, 0x07b0, 0x07b6, 0x07c6, 0x07ca, 0x07ce, + 0x07d5, 0x07da, 0x07df, 0x07e5, 0x07ea, 0x07f1, 0x07f6, 0x07fd, + 0x0805, 0x0811, 0x0815, 0x0820, 0x0827, 0x0830, 0x0838, 0x0840, + // Entry 100 - 13F + 0x0854, 0x085b, 0x0863, 0x0874, 0x087f, 0x0889, 0x088f, 0x0895, + 0x089a, 0x08a2, 0x08a8, 0x08ae, 0x08b3, 0x08b8, 0x08bd, 0x08d1, + 0x08e2, 0x08e7, 0x08f7, 0x0901, 0x0906, 0x090c, 0x0910, 0x0914, + 0x0914, 0x0927, 0x092d, 0x0934, 0x0943, 0x0954, 0x095a, 0x0971, + 0x0975, 0x097e, 0x0988, 0x098b, 0x099d, 0x09ae, 0x09bd, 0x09c4, + 0x09db, 0x09ef, 0x09f8, 0x09fa, 0x0a00, 0x0a03, 0x0a07, 0x0a0c, + 0x0a1c, 0x0a23, 0x0a2e, 0x0a34, 0x0a4c, 0x0a62, 0x0a6d, 0x0a72, + 0x0a7b, 0x0a81, 0x0a86, 0x0a97, 0x0aaf, 0x0ab4, 0x0aba, 0x0abf, + // Entry 140 - 17F + 0x0ac8, 0x0acd, 0x0ad2, 0x0ae2, 0x0af5, 0x0aff, 0x0b09, 0x0b0e, + 0x0b21, 0x0b26, 0x0b2a, 0x0b2e, 0x0b34, 0x0b39, 0x0b3f, 0x0b3f, + 0x0b5b, 0x0b61, 0x0b67, 0x0b6e, 0x0b7e, 0x0b8e, 0x0b8e, 0x0b99, + 0x0b9f, 0x0ba5, 0x0ba8, 0x0bad, 0x0bb1, 0x0bba, 0x0bc1, 0x0bc5, + 0x0bcc, 0x0bd8, 0x0bdf, 0x0be3, 0x0beb, 0x0bf0, 0x0bfd, 0x0c09, + 0x0c0f, 0x0c18, 0x0c1c, 0x0c24, 0x0c2c, 0x0c38, 0x0c3f, 0x0c3f, + 0x0c45, 0x0c54, 0x0c58, 0x0c61, 0x0c6b, 0x0c71, 0x0c79, 0x0c7e, + 0x0c92, 0x0c97, 0x0c9e, 0x0ca4, 0x0ca9, 0x0caf, 0x0cb4, 0x0cbc, + // Entry 180 - 1BF + 0x0cce, 0x0cd8, 0x0cd8, 0x0ce0, 0x0cea, 0x0cef, 0x0cf3, 0x0d01, + 0x0d01, 0x0d0b, 0x0d13, 0x0d18, 0x0d1b, 0x0d1f, 0x0d24, 0x0d39, + 0x0d3c, 0x0d4a, 0x0d4e, 0x0d54, 0x0d5c, 0x0d63, 0x0d6b, 0x0d71, + 0x0d75, 0x0d7b, 0x0d81, 0x0d86, 0x0d8a, 0x0d92, 0x0da2, 0x0db0, + 0x0db7, 0x0dc0, 0x0dcb, 0x0dd1, 0x0dd9, 0x0ddf, 0x0de4, 0x0df1, + 0x0df8, 0x0e05, 0x0e0a, 0x0e14, 0x0e1b, 0x0e23, 0x0e28, 0x0e2d, + 0x0e38, 0x0e3f, 0x0e4f, 0x0e53, 0x0e6a, 0x0e70, 0x0e74, 0x0e7f, + 0x0e86, 0x0e8c, 0x0e95, 0x0e9a, 0x0eab, 0x0eb1, 0x0eb7, 0x0ec7, + // Entry 1C0 - 1FF + 0x0ecb, 0x0ede, 0x0ee6, 0x0eee, 0x0ef3, 0x0ef8, 0x0efd, 0x0f0e, + 0x0f18, 0x0f1f, 0x0f27, 0x0f31, 0x0f3a, 0x0f40, 0x0f52, 0x0f6b, + 0x0f77, 0x0f85, 0x0f85, 0x0f8d, 0x0f98, 0x0f98, 0x0fa6, 0x0fad, + 0x0fbe, 0x0fc9, 0x0fe5, 0x0fef, 0x0ff7, 0x1007, 0x100f, 0x100f, + 0x1014, 0x101c, 0x101c, 0x1021, 0x1028, 0x1031, 0x1034, 0x103b, + 0x1040, 0x1055, 0x105c, 0x1061, 0x1068, 0x1072, 0x1079, 0x107e, + 0x1085, 0x108b, 0x1094, 0x10a5, 0x10ab, 0x10af, 0x10b3, 0x10b9, + 0x10c8, 0x10d6, 0x10d6, 0x10df, 0x10e3, 0x10f3, 0x10f9, 0x10f9, + // Entry 200 - 23F + 0x1100, 0x1110, 0x111c, 0x1129, 0x1136, 0x113d, 0x113d, 0x1149, + 0x114e, 0x1152, 0x1152, 0x1158, 0x115c, 0x1168, 0x1170, 0x1187, + 0x1191, 0x1191, 0x1195, 0x119a, 0x119e, 0x11a5, 0x11aa, 0x11af, + 0x11b2, 0x11b9, 0x11c0, 0x11c7, 0x11ce, 0x11d4, 0x11dc, 0x11e7, + 0x11f0, 0x11f6, 0x11fc, 0x11fc, 0x1205, 0x1209, 0x1210, 0x1217, + 0x121e, 0x1229, 0x1249, 0x124f, 0x124f, 0x1256, 0x125a, 0x125d, + 0x125d, 0x1261, 0x1272, 0x1272, 0x1272, 0x1277, 0x127c, 0x128e, + 0x1296, 0x129b, 0x12a0, 0x12a8, 0x12aa, 0x12b0, 0x12b0, 0x12b4, + // Entry 240 - 27F + 0x12b7, 0x12c1, 0x12c8, 0x12cd, 0x12d6, 0x12df, 0x12e6, 0x12f5, + 0x1303, 0x1309, 0x1325, 0x132a, 0x1349, 0x134f, 0x1368, 0x1368, + 0x1380, 0x13a0, 0x13b1, 0x13bf, 0x13d0, 0x13e6, 0x140c, 0x141f, + 0x1435, 0x1435, 0x1445, 0x145a, 0x1470, 0x1479, 0x1491, 0x14a5, + 0x14af, 0x14c2, 0x14d4, 0x14e6, 0x14fa, + }, + }, + { // gl + "afarabkhazoafricánerakánamáricoaragonésárabeasamésavaraimaráacerbaixanob" + + "askirbielorrusobúlgarobislamabambarobengalítibetanobretónbosníacocat" + + "alánchechenochamorrocorsochecoeslavo eclesiásticochuvashgalésdinamar" + + "quésalemándivehidzongkhaewegregoinglésesperantoespañolestonianoéusca" + + "ropersafulafinésfidxianoferoésfrancésfrisónirlandésgaélico escocésga" + + "legoguaraníguxaratímanxhausahebreohindicroatahaitianohúngaroarmenioh" + + "ererointerlinguaindonesioiboyi sichuanésidoislandésitalianoinuktitut" + + "xaponésxavanésxeorxianokongokikuyukuanyamacasacogroenlandés occident" + + "alkhmercanaréscoreanocanuricachemirkurdokomicórnicoquirguizlatínluxe" + + "mburguésgandalimburguéslingalalaosianolituanoluba-katangaletónmalgax" + + "emarshalésmaorímacedoniomalabarmongolmarathimalaiomaltésbirmanonauru" + + "ndebele do nortenepalíndongaholandésnoruegués nynorsknoruegués bokma" + + "lndebele do surnavajochewaoccitanooromooriyaosetiopanxabianopolacopa" + + "shtuportuguésquechuaromancherundiromanésrusoruandéssánscritosardosin" + + "dhisaami do nortesangocingaléseslovacoeslovenosamoanoshonasomalíalba" + + "nésserbioswatisesothosundanéssuecosuahilitámiltelugútaxicotailandést" + + "igriñaturcomántswanatonganésturcotsongatártarotahitianouigurucraínou" + + "rdúuzbecovendavietnamitavolapukvalónwólofxhosayiddishyorubachinészul" + + "úachinésacholíadangmeadigueoaghemainualeutianoaltai meridionalangik" + + "aarameomapuchearapahoeasuasturianoawadhibalinésbasaabembabenabaluchi" + + " occidentalbhojpuribinisiksikábodobuginésblincebuanokigachuukesemari" + + "choctawcheroquicheiénkurdo soraníseselwa (crioulo das Seixeles)dakot" + + "adargwataitadogribzarmabaixo sorabiodualajola-fonyidazagaembuefikexi" + + "pcio antigoekajukewondofilipinofonfriulianogagagauzge’ezkiribatianog" + + "orontalogrego antigoalemán suízogusiigwichʼinhawaianohiligaynonhmong" + + "alto sorbiohupaibanibibioilokoingushlojbanngombamachamekabilekachinj" + + "jukambacabardianotyapmakondecaboverdianokorokhasikoyra chiinikakokal" + + "enjinkimbundukomi permiokonkanikpellecarachaio-bálcaracareliokurukhs" + + "hambalabafiakölschkumykladinolangilezguilakotaloziluri do norteluba-" + + "lulualundaluomizoluyiamadurésmagahimaithilimakasarmasaimokshamendeme" + + "rucrioulo mauricianomakhuwa-meettometa’micmacminangkabaumanipurimoha" + + "wkmossimundangvarias linguascreekmirandéserzyamazandaranínapolitanon" + + "amabaixo alemánnewariniasniuanokwasiongiemboonnogain’kosesotho sa le" + + "boanuernyankolepangasinanpampangapapiamentopalauanopidgin nixerianop" + + "rusianoquichérapanuirarotonganoromboaromanésrwasandawesakhasamburusa" + + "ntalingambaysangusicilianoescocéskurdo meridionalsenakoyraboro senni" + + "tachelhitshansaami meridionalsaami de Lulesaami de Inarisaami de Sko" + + "ltsoninkesranan tongosahosukumacomorianosiríacotimnetesotetuntigrékl" + + "ingontok pisintarokotumbukatuvaluanotasawaqtuvanianotamazight do Mar" + + "rocos Centraludmurtoumbunduraízvaivunjowalserwolayttawaray-waraywalr" + + "piricalmucosogayangbenyembacantonéstamazight de Marrocos estándarzun" + + "isen contido lingüísticozazakiárabe estándar modernoalemán austríaco" + + "alto alemán suízoinglés australianoinglés canadianoinglés británicoi" + + "nglés dos Estados Unidosespañol latinoamericanocastelánespañol de Mé" + + "xicofrancés canadianofrancés suízobaixo saxónflamencoportugués brasi" + + "leiroportugués europeomoldavoserbocroatasuahili congoléschinés simpl" + + "ificadochinés tradicional", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000b, 0x000b, 0x0015, 0x001a, 0x0022, 0x002b, + 0x0031, 0x0038, 0x003c, 0x0043, 0x004e, 0x0054, 0x005e, 0x0066, + 0x006d, 0x0074, 0x007c, 0x0084, 0x008b, 0x0094, 0x009c, 0x00a4, + 0x00ac, 0x00b1, 0x00b1, 0x00b6, 0x00ca, 0x00d1, 0x00d7, 0x00e3, + 0x00ea, 0x00f0, 0x00f8, 0x00fb, 0x0100, 0x0107, 0x0110, 0x0118, + 0x0121, 0x0129, 0x012e, 0x0132, 0x0138, 0x0140, 0x0147, 0x014f, + 0x0156, 0x015f, 0x0170, 0x0176, 0x017e, 0x0187, 0x018b, 0x0190, + 0x0196, 0x019b, 0x019b, 0x01a1, 0x01a9, 0x01b1, 0x01b8, 0x01be, + // Entry 40 - 7F + 0x01c9, 0x01d2, 0x01d2, 0x01d5, 0x01e2, 0x01e2, 0x01e5, 0x01ee, + 0x01f6, 0x01ff, 0x0207, 0x020f, 0x0218, 0x021d, 0x0223, 0x022b, + 0x0231, 0x0248, 0x024d, 0x0255, 0x025c, 0x0262, 0x026a, 0x026f, + 0x0273, 0x027b, 0x0283, 0x0289, 0x0296, 0x029b, 0x02a6, 0x02ad, + 0x02b5, 0x02bc, 0x02c8, 0x02ce, 0x02d5, 0x02df, 0x02e5, 0x02ee, + 0x02f5, 0x02fb, 0x0302, 0x0308, 0x030f, 0x0316, 0x031b, 0x032b, + 0x0332, 0x0338, 0x0341, 0x0353, 0x0364, 0x0372, 0x0378, 0x037d, + 0x0385, 0x0385, 0x038a, 0x038f, 0x0395, 0x039f, 0x039f, 0x03a5, + // Entry 80 - BF + 0x03ab, 0x03b5, 0x03bc, 0x03c4, 0x03c9, 0x03d1, 0x03d5, 0x03dd, + 0x03e7, 0x03ec, 0x03f2, 0x0400, 0x0405, 0x040e, 0x0416, 0x041e, + 0x0425, 0x042a, 0x0431, 0x0439, 0x043f, 0x0444, 0x044b, 0x0454, + 0x0459, 0x0460, 0x0466, 0x046d, 0x0473, 0x047d, 0x0485, 0x048e, + 0x0494, 0x049d, 0x04a2, 0x04a8, 0x04b0, 0x04b9, 0x04be, 0x04c6, + 0x04cb, 0x04d1, 0x04d6, 0x04e0, 0x04e7, 0x04ed, 0x04f3, 0x04f8, + 0x04ff, 0x0505, 0x0505, 0x050c, 0x0511, 0x0519, 0x0520, 0x0527, + 0x052e, 0x052e, 0x052e, 0x0533, 0x0537, 0x0537, 0x0537, 0x0540, + // Entry C0 - FF + 0x0540, 0x0550, 0x0550, 0x0556, 0x055c, 0x0563, 0x0563, 0x056b, + 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056e, 0x056e, 0x0577, + 0x0577, 0x057d, 0x057d, 0x0585, 0x0585, 0x058a, 0x058a, 0x058a, + 0x058a, 0x058a, 0x058f, 0x058f, 0x0593, 0x0593, 0x0593, 0x05a5, + 0x05ad, 0x05ad, 0x05b1, 0x05b1, 0x05b1, 0x05b9, 0x05b9, 0x05b9, + 0x05b9, 0x05b9, 0x05bd, 0x05bd, 0x05bd, 0x05c5, 0x05c5, 0x05c9, + 0x05c9, 0x05c9, 0x05c9, 0x05c9, 0x05c9, 0x05d0, 0x05d4, 0x05d4, + 0x05d4, 0x05dc, 0x05e0, 0x05e0, 0x05e7, 0x05e7, 0x05ef, 0x05f6, + // Entry 100 - 13F + 0x0603, 0x0603, 0x0603, 0x0603, 0x0621, 0x0621, 0x0627, 0x062d, + 0x0632, 0x0632, 0x0632, 0x0638, 0x0638, 0x063d, 0x063d, 0x064a, + 0x064a, 0x064f, 0x064f, 0x0659, 0x0659, 0x065f, 0x0663, 0x0667, + 0x0667, 0x0675, 0x067b, 0x067b, 0x067b, 0x067b, 0x0681, 0x0681, + 0x0681, 0x0689, 0x0689, 0x068c, 0x068c, 0x068c, 0x068c, 0x068c, + 0x068c, 0x068c, 0x0695, 0x0697, 0x069d, 0x069d, 0x069d, 0x069d, + 0x069d, 0x06a4, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, + 0x06b8, 0x06b8, 0x06b8, 0x06c4, 0x06d2, 0x06d2, 0x06d2, 0x06d7, + // Entry 140 - 17F + 0x06e0, 0x06e0, 0x06e0, 0x06e8, 0x06e8, 0x06f2, 0x06f2, 0x06f7, + 0x0702, 0x0702, 0x0706, 0x070a, 0x0710, 0x0715, 0x071b, 0x071b, + 0x071b, 0x0721, 0x0727, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, + 0x0734, 0x073a, 0x073d, 0x0742, 0x0742, 0x074c, 0x074c, 0x0750, + 0x0757, 0x0763, 0x0763, 0x0767, 0x0767, 0x076c, 0x076c, 0x0778, + 0x0778, 0x0778, 0x077c, 0x0784, 0x078c, 0x0797, 0x079e, 0x079e, + 0x07a4, 0x07b6, 0x07b6, 0x07b6, 0x07bd, 0x07c3, 0x07cb, 0x07d0, + 0x07d7, 0x07dc, 0x07dc, 0x07e2, 0x07e7, 0x07e7, 0x07e7, 0x07ed, + // Entry 180 - 1BF + 0x07ed, 0x07ed, 0x07ed, 0x07f3, 0x07f3, 0x07f3, 0x07f7, 0x0804, + 0x0804, 0x080e, 0x080e, 0x0813, 0x0816, 0x081a, 0x081f, 0x081f, + 0x081f, 0x0827, 0x0827, 0x082d, 0x0835, 0x083c, 0x083c, 0x0841, + 0x0841, 0x0847, 0x0847, 0x084c, 0x0850, 0x0862, 0x0862, 0x0870, + 0x0877, 0x087d, 0x0888, 0x0888, 0x0890, 0x0896, 0x089b, 0x089b, + 0x08a2, 0x08b0, 0x08b5, 0x08be, 0x08be, 0x08be, 0x08be, 0x08c3, + 0x08cf, 0x08cf, 0x08d9, 0x08dd, 0x08ea, 0x08f0, 0x08f4, 0x08fa, + 0x08fa, 0x0900, 0x0909, 0x090e, 0x090e, 0x090e, 0x0914, 0x0924, + // Entry 1C0 - 1FF + 0x0928, 0x0928, 0x0928, 0x0930, 0x0930, 0x0930, 0x0930, 0x0930, + 0x093a, 0x093a, 0x0942, 0x094c, 0x0954, 0x0954, 0x0964, 0x0964, + 0x0964, 0x0964, 0x0964, 0x0964, 0x0964, 0x0964, 0x0964, 0x096c, + 0x096c, 0x0973, 0x0973, 0x0973, 0x097a, 0x0985, 0x0985, 0x0985, + 0x098a, 0x098a, 0x098a, 0x098a, 0x098a, 0x0993, 0x0996, 0x099d, + 0x09a2, 0x09a2, 0x09a9, 0x09a9, 0x09b0, 0x09b0, 0x09b7, 0x09bc, + 0x09c5, 0x09cd, 0x09cd, 0x09dd, 0x09dd, 0x09e1, 0x09e1, 0x09e1, + 0x09f0, 0x09f0, 0x09f0, 0x09f9, 0x09fd, 0x09fd, 0x09fd, 0x09fd, + // Entry 200 - 23F + 0x09fd, 0x0a0d, 0x0a1a, 0x0a28, 0x0a36, 0x0a3d, 0x0a3d, 0x0a49, + 0x0a49, 0x0a4d, 0x0a4d, 0x0a53, 0x0a53, 0x0a53, 0x0a5c, 0x0a5c, + 0x0a64, 0x0a64, 0x0a64, 0x0a69, 0x0a6d, 0x0a6d, 0x0a72, 0x0a78, + 0x0a78, 0x0a78, 0x0a78, 0x0a7f, 0x0a7f, 0x0a7f, 0x0a7f, 0x0a7f, + 0x0a88, 0x0a88, 0x0a8e, 0x0a8e, 0x0a8e, 0x0a8e, 0x0a95, 0x0a9e, + 0x0aa5, 0x0aae, 0x0acb, 0x0ad2, 0x0ad2, 0x0ad9, 0x0ade, 0x0ae1, + 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae6, 0x0aec, + 0x0af4, 0x0aff, 0x0aff, 0x0b07, 0x0b07, 0x0b0e, 0x0b0e, 0x0b12, + // Entry 240 - 27F + 0x0b12, 0x0b12, 0x0b19, 0x0b1e, 0x0b1e, 0x0b27, 0x0b27, 0x0b27, + 0x0b27, 0x0b27, 0x0b46, 0x0b4a, 0x0b63, 0x0b69, 0x0b81, 0x0b81, + 0x0b93, 0x0ba6, 0x0bb9, 0x0bca, 0x0bdc, 0x0bf6, 0x0c0e, 0x0c17, + 0x0c2a, 0x0c2a, 0x0c3c, 0x0c4b, 0x0c57, 0x0c5f, 0x0c74, 0x0c86, + 0x0c8d, 0x0c98, 0x0ca9, 0x0cbd, 0x0cd0, + }, + }, + { // gsw + "AfarAbchasischAvestischAfrikaansAkanAmharischAragonesischArabischAssames" + + "ischAwarischAymaraAserbaidschanischBaschkirischWiissrussischBulgaari" + + "schBislamaBambaraBengalischTibeetischBrötoonischBosnischKatalaanisch" + + "TschetscheenischChamorroKorsischCreeTschechischChileslawischTschuwas" + + "chischWalisischTänischTüütschMalediivischDschongkhaEweGriechischÄngl" + + "ischEschperantoSchpanischEestnischBaskischPersischFulFinnischFidschi" + + "anischFäröischFranzösischFriesischIirischSchottisch-GäälischGalizisc" + + "hGuaraniGujaratiManx-GäälischHaussaHebräischHindiHiri-MotuKroazischH" + + "aitischUngarischArmenischHereroInterlinguaIndonesischInterlingueIgbo" + + "Sezuanischs YiInupiakIdoIisländischItaliänischInukitutJapanischJavan" + + "ischGeorgischKongolesischKikuyu-SchpraachKwanyamaKasachischGröönländ" + + "ischKambodschanischKannadaKoreaanischKanuri-SchpraachKaschmirischKur" + + "dischKomi-SchpraachKornischKirgiisischLatiinLuxemburgischGanda-Schpr" + + "aachLimburgischLingalaLaozischLitauischLubaLettischMadagassischMarsc" + + "hallesischMaoriMazedonischMalayalamMongolischMarathiMalaiischMaltesi" + + "schBirmanischNauruischNord-Ndebele-SchpraachNepalesischNdongaNiderlä" + + "ndischNorwegisch NynorskNorwegisch BokmålSüüd-Ndebele-SchpraachNavaj" + + "o-SchpraachChewa-SchpraachOkzitanischOjibwa-SchpraachOromoOrijaOssez" + + "ischPandschabischPaliPolnischPaschtuPortugiisischQuechuaRätoromanisc" + + "hRundi-SchpraachRumänischRussischRuandischSanschkritSardischSindhiNo" + + "rd-SamischSangoSinghalesischSlowakischSlowenischSamoanischSchhonaSom" + + "aliAlbanischSerbischSwaziSüüd-Sotho-SchpraachSundanesischSchwedischS" + + "uaheliTamilischTeluguTadschikischThailändischTigrinjaTurkmenischTswa" + + "na-SchpraachTongaischTürkischTsongaTatarischTahitischUigurischUkrain" + + "ischUrduUsbekischVenda-SchpraachVietnamesischVolapükWallonischWolofX" + + "hosaJiddischYorubaZhuangChineesischZuluAcehAcholiAdangmeAdygaiAfrihi" + + "liAinuAkkadischAleutischSüüd-AltaischAltänglischAngikaAramääischArau" + + "kanischArapahoArawakAschturianischAwadhiBelutschischBalinesischBasaa" + + "BedauyeBembaBhodschpuriBikolischBiniBlackfoot-SchpraachBraj-BhakhaBu" + + "rjatischBugineesischBlinCaddoKariibischAtsamCebuanoTschibtschaTschag" + + "ataischTrukesischTscheremissischChinookChoctawChipewyanCherokeeCheye" + + "nneKoptischKrimtatarischKaschubischTakotaTargiinischDelaware-Schpraa" + + "chSlaveyTogribTinkaTogriNidersorbischTualaMittelniderländischTiulaEf" + + "ikischAltägyptischEkajukElamischMittelänglischEwondoPangwe-Schpraach" + + "FilipinoFonMittelfranzösischAltfranzösischNordfriesischOschtfriesisc" + + "hFriulischGaGayoGbayaGeezGilbertesischMittelhochtüütschAlthochtüütsc" + + "hGondiMongondouGotischGreboAltgriechischSchwiizertüütschKutchinischH" + + "aidaHawaiianischHiligaynonischHethitischMiaoObersorbischHupaIbanisch" + + "IlokanoInguschischLojbanischJüüdisch-PersischJüüdisch-ArabischKaraka" + + "lpakischKabylischKachin-SchpraachJjuKambaKawiKabardinischTyapKoroKha" + + "sischSakischKimbundu-SchpraachKonkaniKosraeanischKpelle-SchpraachKar" + + "atschaiisch-BalkarischKarelischOraon-SchpraachKumükischKutenai-Schpr" + + "aachLadinoLahndanischLambanischLesgischMongoRotse-SchpraachLuba-Lulu" + + "aLuiseno-SchpraachLunda-SchpraachLuo-SchpraachLushai-SchpraachMadure" + + "sischKhottaMaithiliMakassarischManding-SchpraachMassai-SchpraachMoks" + + "chamordwinischMandaresischMende-SchpraachMittelirischMicmac-Schpraac" + + "hMinangkabau-SchpraachMandschurischMeithei-SchpraachMohawk-Schpraach" + + "Mossi-SchpraachMehrschpraachigMuskogee-SchpraachMirandesischMarwaris" + + "chErzyaNeapolitanischNidertüütschNewarischNias-SchpraachNiue-Schpraa" + + "chNogaischAltnordischN’KoNord-Sotho-SchpraachAlt-NewariNyamwezi-Schp" + + "raachNyankoleNyoroNzimaOsage-SchpraachOsmanischPangasinanischMittelp" + + "ersischPampanggan-SchpraachPapiamentoPalauAltpersischPhönikischPonap" + + "eanischAltprovenzalischRajasthaniOschterinsel-SchpraachRarotonganisc" + + "hZigüünerschpraachAromunischSandawe-SchpraachJakutischSamaritanischS" + + "asakSantaliSizilianischSchottischSelkupischAltirischSchan-SchpraachS" + + "idamoSüüd-SamischLule-SamischInari-SamischSkolt-SamischSoninke-Schpr" + + "aachSogdischSrananischSerer-SchpraachSukuma-SchpraachSusuSumerischAl" + + "tsyrischSyrischTemneTereno-SchpraachTetum-SchpraachTigreTiv-Schpraac" + + "hTokelauanischKlingonischTlingit-SchpraachTamaseqTsonga-SchpraachNeu" + + "melanesischTsimshian-SchpraachTumbuka-SchpraachElliceanischTuwinisch" + + "UdmurtischUgaritischMbundu-SchpraachRootVai-SchpraachWotischWalamo-S" + + "chpraachWarayWasho-SchpraachKalmückischYao-SchpraachYapesischZapotek" + + "ischBliss-SymboolZenagaZuni-SchpraachKän schpraachliche InhaltZazaÖs" + + "chtriichischs TüütschSchwiizer HochtüütschAuschtralischs ÄnglischKan" + + "adischs ÄnglischBritischs ÄnglischAmerikanischs ÄnglischLatiinamerik" + + "anischs SchpanischIbeerischs SchpanischKanadischs FranzösischSchwiiz" + + "er FranzösischFläämischBrasilianischs PortugiisischIberischs Portugi" + + "isischMoldawischSerbo-KroatischVeräifachts ChineesischTradizionells " + + "Chineesisch", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002d, 0x0039, + 0x0041, 0x004c, 0x0054, 0x005a, 0x006b, 0x0077, 0x0084, 0x008f, + 0x0096, 0x009d, 0x00a7, 0x00b1, 0x00bd, 0x00c5, 0x00d1, 0x00e1, + 0x00e9, 0x00f1, 0x00f5, 0x0100, 0x010d, 0x011b, 0x0124, 0x012c, + 0x0135, 0x0141, 0x014b, 0x014e, 0x0158, 0x0161, 0x016c, 0x0176, + 0x017f, 0x0187, 0x018f, 0x0192, 0x019a, 0x01a7, 0x01b1, 0x01bd, + 0x01c6, 0x01cd, 0x01e2, 0x01eb, 0x01f2, 0x01fa, 0x0209, 0x020f, + 0x0219, 0x021e, 0x0227, 0x0230, 0x0238, 0x0241, 0x024a, 0x0250, + // Entry 40 - 7F + 0x025b, 0x0266, 0x0271, 0x0275, 0x0283, 0x028a, 0x028d, 0x0299, + 0x02a5, 0x02ad, 0x02b6, 0x02bf, 0x02c8, 0x02d4, 0x02e4, 0x02ec, + 0x02f6, 0x0306, 0x0315, 0x031c, 0x0327, 0x0337, 0x0343, 0x034b, + 0x0359, 0x0361, 0x036c, 0x0372, 0x037f, 0x038e, 0x0399, 0x03a0, + 0x03a8, 0x03b1, 0x03b5, 0x03bd, 0x03c9, 0x03d8, 0x03dd, 0x03e8, + 0x03f1, 0x03fb, 0x0402, 0x040b, 0x0415, 0x041f, 0x0428, 0x043e, + 0x0449, 0x044f, 0x045d, 0x046f, 0x0481, 0x0499, 0x04a9, 0x04b8, + 0x04c3, 0x04d3, 0x04d8, 0x04dd, 0x04e6, 0x04f3, 0x04f7, 0x04ff, + // Entry 80 - BF + 0x0506, 0x0513, 0x051a, 0x0528, 0x0537, 0x0541, 0x0549, 0x0552, + 0x055c, 0x0564, 0x056a, 0x0576, 0x057b, 0x0588, 0x0592, 0x059c, + 0x05a6, 0x05ad, 0x05b3, 0x05bc, 0x05c4, 0x05c9, 0x05df, 0x05eb, + 0x05f5, 0x05fc, 0x0605, 0x060b, 0x0617, 0x0624, 0x062c, 0x0637, + 0x0647, 0x0650, 0x0659, 0x065f, 0x0668, 0x0671, 0x067a, 0x0684, + 0x0688, 0x0691, 0x06a0, 0x06ad, 0x06b5, 0x06bf, 0x06c4, 0x06c9, + 0x06d1, 0x06d7, 0x06dd, 0x06e8, 0x06ec, 0x06f0, 0x06f6, 0x06fd, + 0x0703, 0x0703, 0x070b, 0x070b, 0x070f, 0x0718, 0x0718, 0x0721, + // Entry C0 - FF + 0x0721, 0x0730, 0x073c, 0x0742, 0x074e, 0x0759, 0x0759, 0x0760, + 0x0760, 0x0760, 0x0766, 0x0766, 0x0766, 0x0766, 0x0766, 0x0774, + 0x0774, 0x077a, 0x0786, 0x0791, 0x0791, 0x0796, 0x0796, 0x0796, + 0x0796, 0x079d, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, + 0x07ad, 0x07b6, 0x07ba, 0x07ba, 0x07ba, 0x07cd, 0x07cd, 0x07cd, + 0x07d8, 0x07d8, 0x07d8, 0x07d8, 0x07e2, 0x07ee, 0x07ee, 0x07f2, + 0x07f2, 0x07f7, 0x0801, 0x0801, 0x0806, 0x080d, 0x080d, 0x0818, + 0x0825, 0x082f, 0x083e, 0x0845, 0x084c, 0x0855, 0x085d, 0x0865, + // Entry 100 - 13F + 0x0865, 0x086d, 0x086d, 0x087a, 0x087a, 0x0885, 0x088b, 0x0896, + 0x0896, 0x08a8, 0x08ae, 0x08b4, 0x08b9, 0x08b9, 0x08be, 0x08cb, + 0x08cb, 0x08d0, 0x08e4, 0x08e4, 0x08e9, 0x08e9, 0x08e9, 0x08f1, + 0x08f1, 0x08fe, 0x0904, 0x090c, 0x091b, 0x091b, 0x0921, 0x0921, + 0x0931, 0x0939, 0x0939, 0x093c, 0x093c, 0x094e, 0x095d, 0x095d, + 0x096a, 0x0978, 0x0981, 0x0983, 0x0983, 0x0983, 0x0987, 0x098c, + 0x098c, 0x0990, 0x099d, 0x099d, 0x09b0, 0x09c0, 0x09c0, 0x09c5, + 0x09ce, 0x09d5, 0x09da, 0x09e7, 0x09f9, 0x09f9, 0x09f9, 0x09f9, + // Entry 140 - 17F + 0x0a04, 0x0a09, 0x0a09, 0x0a15, 0x0a15, 0x0a23, 0x0a2d, 0x0a31, + 0x0a3d, 0x0a3d, 0x0a41, 0x0a49, 0x0a49, 0x0a50, 0x0a5b, 0x0a5b, + 0x0a5b, 0x0a65, 0x0a65, 0x0a65, 0x0a78, 0x0a8b, 0x0a8b, 0x0a99, + 0x0aa2, 0x0ab2, 0x0ab5, 0x0aba, 0x0abe, 0x0aca, 0x0aca, 0x0ace, + 0x0ace, 0x0ace, 0x0ace, 0x0ad2, 0x0ad2, 0x0ada, 0x0ae1, 0x0ae1, + 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0af3, 0x0af3, 0x0afa, 0x0b06, + 0x0b16, 0x0b2f, 0x0b2f, 0x0b2f, 0x0b38, 0x0b47, 0x0b47, 0x0b47, + 0x0b47, 0x0b51, 0x0b62, 0x0b68, 0x0b68, 0x0b73, 0x0b7d, 0x0b85, + // Entry 180 - 1BF + 0x0b85, 0x0b85, 0x0b85, 0x0b85, 0x0b85, 0x0b8a, 0x0b99, 0x0b99, + 0x0b99, 0x0ba3, 0x0bb4, 0x0bc3, 0x0bd0, 0x0be0, 0x0be0, 0x0be0, + 0x0be0, 0x0beb, 0x0beb, 0x0bf1, 0x0bf9, 0x0c05, 0x0c16, 0x0c26, + 0x0c26, 0x0c38, 0x0c44, 0x0c53, 0x0c53, 0x0c53, 0x0c5f, 0x0c5f, + 0x0c5f, 0x0c6f, 0x0c84, 0x0c91, 0x0ca2, 0x0cb2, 0x0cc1, 0x0cc1, + 0x0cc1, 0x0cd0, 0x0ce2, 0x0cee, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cfd, + 0x0cfd, 0x0cfd, 0x0d0b, 0x0d0b, 0x0d19, 0x0d22, 0x0d30, 0x0d3e, + 0x0d3e, 0x0d3e, 0x0d3e, 0x0d46, 0x0d51, 0x0d51, 0x0d57, 0x0d6b, + // Entry 1C0 - 1FF + 0x0d6b, 0x0d75, 0x0d87, 0x0d8f, 0x0d94, 0x0d99, 0x0da8, 0x0db1, + 0x0dbf, 0x0dcd, 0x0de1, 0x0deb, 0x0df0, 0x0df0, 0x0df0, 0x0df0, + 0x0df0, 0x0dfb, 0x0dfb, 0x0e06, 0x0e06, 0x0e06, 0x0e12, 0x0e12, + 0x0e22, 0x0e22, 0x0e22, 0x0e2c, 0x0e42, 0x0e50, 0x0e50, 0x0e50, + 0x0e50, 0x0e63, 0x0e63, 0x0e63, 0x0e63, 0x0e6d, 0x0e6d, 0x0e7e, + 0x0e87, 0x0e94, 0x0e94, 0x0e99, 0x0ea0, 0x0ea0, 0x0ea0, 0x0ea0, + 0x0eac, 0x0eb6, 0x0eb6, 0x0eb6, 0x0eb6, 0x0eb6, 0x0eb6, 0x0ec0, + 0x0ec0, 0x0ec9, 0x0ec9, 0x0ec9, 0x0ed8, 0x0ed8, 0x0ede, 0x0ede, + // Entry 200 - 23F + 0x0ede, 0x0eec, 0x0ef8, 0x0f05, 0x0f12, 0x0f23, 0x0f2b, 0x0f35, + 0x0f44, 0x0f44, 0x0f44, 0x0f54, 0x0f58, 0x0f61, 0x0f61, 0x0f6b, + 0x0f72, 0x0f72, 0x0f72, 0x0f77, 0x0f77, 0x0f87, 0x0f96, 0x0f9b, + 0x0fa8, 0x0fb5, 0x0fb5, 0x0fc0, 0x0fd1, 0x0fd1, 0x0fd8, 0x0fe8, + 0x0ff6, 0x0ff6, 0x0ff6, 0x0ff6, 0x1009, 0x1009, 0x101a, 0x1026, + 0x1026, 0x102f, 0x102f, 0x1039, 0x1043, 0x1053, 0x1057, 0x1064, + 0x1064, 0x1064, 0x1064, 0x1064, 0x106b, 0x106b, 0x106b, 0x106b, + 0x107b, 0x1080, 0x108f, 0x108f, 0x108f, 0x109b, 0x109b, 0x109b, + // Entry 240 - 27F + 0x10a8, 0x10b1, 0x10b1, 0x10b1, 0x10b1, 0x10b1, 0x10bc, 0x10c9, + 0x10c9, 0x10cf, 0x10cf, 0x10dd, 0x10f7, 0x10fb, 0x10fb, 0x10fb, + 0x1115, 0x112c, 0x1144, 0x1158, 0x116b, 0x1182, 0x11a0, 0x11b5, + 0x11b5, 0x11b5, 0x11cc, 0x11e2, 0x11e2, 0x11ed, 0x1209, 0x1220, + 0x122a, 0x1239, 0x1239, 0x1251, 0x126a, + }, + }, + { // gu + guLangStr, + guLangIdx, + }, + { // guz + "KiakanKiamhariKiarabuKibelarusiKibulgariaKibanglaKicheckiKijerumaniKigir" + + "ikiKingerezaKihispaniaKiajemiKifaransaKihausaKihindiKihungariKiindon" + + "esiaKiigboKiitalianoKijapaniKijavaKikambodiaKikoreaKimalesiaKiburmaK" + + "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + + "rubaKichinaKizuluEkegusii", + []uint16{ // 320 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x0054, 0x0054, 0x005e, + 0x005e, 0x005e, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0075, + 0x0075, 0x007c, 0x007c, 0x007c, 0x007c, 0x0085, 0x0085, 0x0085, + // Entry 40 - 7F + 0x0085, 0x0090, 0x0090, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x00a0, 0x00a0, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00b8, 0x00b8, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00c8, 0x00c8, 0x00cf, 0x00cf, 0x00cf, + 0x00d7, 0x00d7, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e9, 0x00e9, 0x00f2, + // Entry 80 - BF + 0x00f2, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0101, 0x0107, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x0121, 0x0121, 0x0128, 0x0128, 0x0128, 0x0132, 0x0132, 0x0132, + 0x0132, 0x0132, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x0143, + 0x0149, 0x0149, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x015c, 0x015c, 0x0163, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry C0 - FF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 100 - 13F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0171, + }, + }, + { // gv + "Gaelg", + []uint16{ // 55 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, + }, + }, + { // ha + "AkanAmharikLarabciBelarusanciBulgaranciBengaliHarshen CakJamusanciGirkan" + + "ciTuranciIspaniyanciParisanciFaransanciHausaHarshen HindiHarshen Hun" + + "gariHarshen IndunusiyaInyamuranciItaliyanciJapananciJabananciHarshen" + + " KimarHarshen KoreyaHarshen MalaiBurmanciNepaliHolanciPunjabiHarshen" + + " PolanHarshen PortugalRomaniyanciRashanciKiniyaruwandaSomaliHarshen " + + "SuwedanTamilThaiHarshen TurkiyyaHarshen YukurenHarshen UrduHarshen B" + + "iyetinamYarbanciHarshen SinHarshen Zulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000b, 0x000b, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001d, 0x0027, + 0x0027, 0x0027, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0042, 0x0042, 0x0042, 0x0042, 0x004a, 0x0051, 0x0051, 0x005c, + 0x005c, 0x005c, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x0074, + 0x0074, 0x0081, 0x0081, 0x0081, 0x0081, 0x0090, 0x0090, 0x0090, + // Entry 40 - 7F + 0x0090, 0x00a2, 0x00a2, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00b7, 0x00b7, 0x00c0, 0x00c9, 0x00c9, 0x00c9, 0x00c9, 0x00c9, + 0x00c9, 0x00c9, 0x00d6, 0x00d6, 0x00e4, 0x00e4, 0x00e4, 0x00e4, + 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, + 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, + 0x00e4, 0x00e4, 0x00e4, 0x00f1, 0x00f1, 0x00f9, 0x00f9, 0x00f9, + 0x00ff, 0x00ff, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x010d, 0x010d, 0x011a, + // Entry 80 - BF + 0x011a, 0x012a, 0x012a, 0x012a, 0x012a, 0x0135, 0x013d, 0x014a, + 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, + 0x014a, 0x014a, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x015f, 0x015f, 0x0164, 0x0164, 0x0164, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0168, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0187, + 0x0193, 0x0193, 0x0193, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01ac, 0x01ac, 0x01b7, 0x01c3, + }, + }, + { // haw + "ʻAlapiaWaleKenemakaKelemāniaHelenePelekāniaPanioloPīkīPalaniʻAilikiHeber" + + "aʻĪkāliaKepanīKōleaLākinaMāoriHōlaniPukikīLūkiaKāmoaKuekeneTongaPola" + + "polaWiekanamaPākēKuikilani KelemāniaʻŌlelo HawaiʻiʻIke ʻole ‘ia a kū" + + "pono ʻole paha ka ʻōleloPelekāne Nū HōlaniPelekāne KanakāPelekānia P" + + "ekekānePelekānia ʻAmelikaPalani KanakāKuikilaniPukikī PalakilaPākē H" + + "oʻomaʻalahi ʻiaPākē Kuʻuna", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x000c, 0x0014, + 0x001e, 0x001e, 0x001e, 0x001e, 0x0024, 0x002e, 0x002e, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003b, 0x003b, 0x0041, + 0x0041, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + // Entry 40 - 7F + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x0059, 0x0059, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, + 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, + // Entry 80 - BF + 0x007a, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0099, 0x0099, 0x0099, 0x0099, 0x00a1, 0x00a1, 0x00a1, + 0x00a1, 0x00a1, 0x00a1, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + // Entry C0 - FF + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + // Entry 100 - 13F + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00c4, 0x00c4, 0x00c4, 0x00c4, + // Entry 140 - 17F + 0x00c4, 0x00c4, 0x00c4, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + // Entry 180 - 1BF + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + // Entry 1C0 - 1FF + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + // Entry 200 - 23F + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + // Entry 240 - 27F + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x011c, 0x012d, 0x0141, 0x0155, 0x0155, 0x0155, + 0x0155, 0x0155, 0x0163, 0x016c, 0x016c, 0x016c, 0x017c, 0x017c, + 0x017c, 0x017c, 0x017c, 0x0196, 0x01a4, + }, + }, + { // he + heLangStr, + heLangIdx, + }, + { // hi + hiLangStr, + hiLangIdx, + }, + { // hr + hrLangStr, + hrLangIdx, + }, + { // hsb + "afaršćinaabchazišćinaafrikaanšćinaakanšćinaamharšćinaaragonšćinaarabšćin" + + "aasamšćinaawaršćinaaymaršćinaazerbajdźanšćinabaškiršćinaběłorušćinab" + + "ołharšćinabislamšćinabambarabengalšćinatibetšćinabretonšćinabosnišći" + + "nakatalanšćinačamoršćinakorsišćinakričěšćinawalizišćinadanšćinaněmči" + + "nadivehidzongkhaewegrjekšćinajendźelšćinaesperantošpanišćinaestišćin" + + "abaskišćinapersišćinafinšćinafidźišćinafäröšćinafrancošćinafrizišćin" + + "airšćinašotiska gelšćinagalicišćinaguaranigujaratimanšćinahausahebre" + + "jšćinahindišćinachorwatšćinahaitišćinamadźaršćinaarmenšćinainterling" + + "uaindonešćinaigbosichuan yiinupiakidoislandšćinaitalšćinainuitšćinaj" + + "apanšćinajavašćinageorgišćinakikuyukazachšćinagröndlandšćinakhmeršći" + + "nakannadšćinakorejšćinakašmiršćinakurdišćinakornišćinakirgišćinałaćo" + + "nšćinaluxemburgšćinagandšćinalimburšćinalingalalaošćinalitawšćinalub" + + "a-katangaletišćinamalagassišćinamaoršćinamakedonšćinamalajamšćinamon" + + "golšćinamaratišćinamalajšćinamaltašćinaburmašćinanaurušćinasewjero-n" + + "debelenepalšćinanižozemšćinanorwegšćina (nynorsk)norwegšćina (bokmål" + + ")navahookcitanšćinaoromoorijšćinapandźabšćinapólšćinapaštunšćinaport" + + "ugalšćinakečuaretoromanšćinakirundišćinarumunšćinarušćinakinjarwanda" + + "sanskritsardinšćinasindhišćinasewjerosamišćinasangosinghalšćinasłowa" + + "kšćinasłowjenšćinasamoašćinašonašćinasomališćinaalbanšćinaserbišćina" + + "siswatijužnosotšćina (Sesotho)sundanezišćinašwedšćinasuahelšćinatami" + + "lšćinatelugutadźikšćinathailandšćinatigrinšćinaturkmenšćinatswanaton" + + "gašćinaturkowšćinatsongatataršćinatahitišćinaujguršćinaukrainšćinaur" + + "dušćinauzbekšćinavietnamšćinavolapükwalonšćinawolofxhosajidišćinajor" + + "ubašćinazhuangchinšćinazulušćinaaghemšćinaanglosakšćinaarawkanšćinap" + + "areasturšćinabembabenabodobuginezišćinachigachoctawšćinacherokeesora" + + "nitaitazarmadelnjoserbšćinadualajola-fonyiembufilipinšćinagagauzišći" + + "nagotšćinašwicarska němčinagusiihawaiišćinahornjoserbšćinangombamach" + + "amekabylšćinakambamakondekapverdšćinakoyra chiinikalenjinpermska kom" + + "išćinakonkanišambalabafialangilakotaluoluhyamasaišćinamerumauriciska" + + " kreolšćinamakhuwa-meettometa’mohawkšćinamundangkriknamadelnjoněmčin" + + "akwasion’konuernyankoleprušćinakʼicheʼromborwasamburusangusicilšćina" + + "senakoyra sennitašelhitjužnosamišćinalule-samišćinainari-samišćinask" + + "olt-samišćinasaterfrizišćinatesotasawaqtamazight (srjedźny Marokko)n" + + "jeznata rěčvaivunjosogatamazightžadyn rěčny wobsahmoderna wysokoarab" + + "šćinaawstriska němčinašwicarska wysokoněmčinaawstralska jendźelšćin" + + "akanadiska jendźelšćinabritiska jendźelšćinaameriska jendźelšćinałać" + + "onskoameriska španišćinaeuropska španišćinamexiska španišćinakanadis" + + "ka francošćinašwicarska francošćinaflamšćinabrazilska portugalšćinae" + + "uropska portugalšćinamoldawšćinaserbochorwatšćinakongoska suahelšćin" + + "achinšćina (zjednorjena)chinšćina (tradicionalna)", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000b, 0x0019, 0x0019, 0x0028, 0x0033, 0x003f, 0x004c, + 0x0057, 0x0062, 0x006d, 0x0079, 0x008c, 0x009a, 0x00a9, 0x00b7, + 0x00c4, 0x00cb, 0x00d8, 0x00e4, 0x00f1, 0x00fd, 0x010b, 0x010b, + 0x0118, 0x0124, 0x0127, 0x0132, 0x0132, 0x0132, 0x013f, 0x0149, + 0x0152, 0x0158, 0x0160, 0x0163, 0x016f, 0x017e, 0x0187, 0x0194, + 0x019f, 0x01ab, 0x01b7, 0x01b7, 0x01c1, 0x01ce, 0x01db, 0x01e8, + 0x01f4, 0x01fd, 0x0210, 0x021d, 0x0224, 0x022c, 0x0236, 0x023b, + 0x0248, 0x0254, 0x0254, 0x0262, 0x026e, 0x027c, 0x0288, 0x0288, + // Entry 40 - 7F + 0x0293, 0x02a0, 0x02a0, 0x02a4, 0x02ae, 0x02b5, 0x02b8, 0x02c5, + 0x02d0, 0x02dc, 0x02e8, 0x02f3, 0x0300, 0x0300, 0x0306, 0x0306, + 0x0313, 0x0324, 0x0330, 0x033d, 0x0349, 0x0349, 0x0357, 0x0363, + 0x0363, 0x036f, 0x037b, 0x0389, 0x0399, 0x03a4, 0x03b1, 0x03b8, + 0x03c2, 0x03ce, 0x03da, 0x03e5, 0x03f5, 0x03f5, 0x0400, 0x040e, + 0x041c, 0x0429, 0x0436, 0x0442, 0x044e, 0x045a, 0x0466, 0x0475, + 0x0481, 0x0481, 0x0490, 0x04a7, 0x04be, 0x04be, 0x04c4, 0x04c4, + 0x04d2, 0x04d2, 0x04d7, 0x04e2, 0x04e2, 0x04f1, 0x04f1, 0x04fc, + // Entry 80 - BF + 0x050a, 0x0519, 0x051f, 0x052f, 0x053d, 0x0549, 0x0552, 0x055d, + 0x0565, 0x0572, 0x057f, 0x0591, 0x0596, 0x05a4, 0x05b2, 0x05c1, + 0x05cd, 0x05d9, 0x05e6, 0x05f2, 0x05fe, 0x0605, 0x061f, 0x062f, + 0x063b, 0x0648, 0x0654, 0x065a, 0x0668, 0x0677, 0x0684, 0x0692, + 0x0698, 0x06a4, 0x06b1, 0x06b7, 0x06c3, 0x06d0, 0x06dc, 0x06e9, + 0x06f4, 0x0700, 0x0700, 0x070e, 0x0716, 0x0722, 0x0727, 0x072c, + 0x0737, 0x0744, 0x074a, 0x0755, 0x0760, 0x0760, 0x0760, 0x0760, + 0x0760, 0x0760, 0x0760, 0x076c, 0x076c, 0x076c, 0x076c, 0x076c, + // Entry C0 - FF + 0x076c, 0x076c, 0x077b, 0x077b, 0x077b, 0x0789, 0x0789, 0x0789, + 0x0789, 0x0789, 0x0789, 0x0789, 0x0789, 0x078d, 0x078d, 0x0799, + 0x0799, 0x0799, 0x0799, 0x0799, 0x0799, 0x0799, 0x0799, 0x0799, + 0x0799, 0x0799, 0x079e, 0x079e, 0x07a2, 0x07a2, 0x07a2, 0x07a2, + 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, + 0x07a2, 0x07a2, 0x07a6, 0x07a6, 0x07a6, 0x07b5, 0x07b5, 0x07b5, + 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07ba, 0x07ba, + 0x07ba, 0x07ba, 0x07ba, 0x07ba, 0x07c8, 0x07c8, 0x07d0, 0x07d0, + // Entry 100 - 13F + 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, + 0x07db, 0x07db, 0x07db, 0x07db, 0x07db, 0x07e0, 0x07e0, 0x07f1, + 0x07f1, 0x07f6, 0x07f6, 0x0800, 0x0800, 0x0800, 0x0804, 0x0804, + 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, + 0x0804, 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, + 0x0812, 0x0812, 0x0812, 0x0812, 0x0820, 0x0820, 0x0820, 0x0820, + 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, + 0x0820, 0x082a, 0x082a, 0x082a, 0x083e, 0x083e, 0x083e, 0x0843, + // Entry 140 - 17F + 0x0843, 0x0843, 0x0843, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, + 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, + 0x0861, 0x0861, 0x0867, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, + 0x087a, 0x087a, 0x087a, 0x087f, 0x087f, 0x087f, 0x087f, 0x087f, + 0x0886, 0x0894, 0x0894, 0x0894, 0x0894, 0x0894, 0x0894, 0x08a0, + 0x08a0, 0x08a0, 0x08a0, 0x08a8, 0x08a8, 0x08bb, 0x08c2, 0x08c2, + 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08ca, 0x08cf, + 0x08cf, 0x08cf, 0x08cf, 0x08cf, 0x08d4, 0x08d4, 0x08d4, 0x08d4, + // Entry 180 - 1BF + 0x08d4, 0x08d4, 0x08d4, 0x08da, 0x08da, 0x08da, 0x08da, 0x08da, + 0x08da, 0x08da, 0x08da, 0x08da, 0x08dd, 0x08dd, 0x08e2, 0x08e2, + 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08ee, + 0x08ee, 0x08ee, 0x08ee, 0x08ee, 0x08f2, 0x0909, 0x0909, 0x0917, + 0x091e, 0x091e, 0x091e, 0x091e, 0x091e, 0x092b, 0x092b, 0x092b, + 0x0932, 0x0932, 0x0936, 0x0936, 0x0936, 0x0936, 0x0936, 0x0936, + 0x0936, 0x0936, 0x0936, 0x093a, 0x0949, 0x0949, 0x0949, 0x0949, + 0x0949, 0x094f, 0x094f, 0x094f, 0x094f, 0x094f, 0x0955, 0x0955, + // Entry 1C0 - 1FF + 0x0959, 0x0959, 0x0959, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, + 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, + 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x096b, + 0x096b, 0x0974, 0x0974, 0x0974, 0x0974, 0x0974, 0x0974, 0x0974, + 0x0979, 0x0979, 0x0979, 0x0979, 0x0979, 0x0979, 0x097c, 0x097c, + 0x097c, 0x097c, 0x0983, 0x0983, 0x0983, 0x0983, 0x0983, 0x0988, + 0x0994, 0x0994, 0x0994, 0x0994, 0x0994, 0x0998, 0x0998, 0x0998, + 0x09a3, 0x09a3, 0x09a3, 0x09ac, 0x09ac, 0x09ac, 0x09ac, 0x09ac, + // Entry 200 - 23F + 0x09ac, 0x09bd, 0x09cd, 0x09de, 0x09ef, 0x09ef, 0x09ef, 0x09ef, + 0x09ef, 0x09ef, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a00, + 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a04, 0x0a04, 0x0a04, 0x0a04, + 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, + 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, + 0x0a0b, 0x0a0b, 0x0a28, 0x0a28, 0x0a28, 0x0a28, 0x0a36, 0x0a39, + 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a3e, 0x0a3e, + 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a42, + // Entry 240 - 27F + 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, + 0x0a42, 0x0a42, 0x0a4b, 0x0a4b, 0x0a60, 0x0a60, 0x0a79, 0x0a79, + 0x0a8c, 0x0aa6, 0x0ac0, 0x0ad9, 0x0af1, 0x0b09, 0x0b29, 0x0b3f, + 0x0b54, 0x0b54, 0x0b6b, 0x0b83, 0x0b83, 0x0b8e, 0x0ba7, 0x0bbf, + 0x0bcc, 0x0bdf, 0x0bf5, 0x0c0e, 0x0c29, + }, + }, + { // hu + huLangStr, + huLangIdx, + }, + { // hy + hyLangStr, + hyLangIdx, + }, + { // id + idLangStr, + idLangIdx, + }, + { // ig + "AkanAmariikịArabiikịBelaruusuBọlụgarịaBengaliCheekịJamaanGiriikịOyiboPan" + + "yaPeshanFụrenchAwụsaHindiMagịyaIndonisiaIgboItaloJapaneseJavaKeme, E" + + "titiKoriaMaleyiMịanmaNepaliDọọchPunjabiPoliishiPotokiRumeniaRọshanRụ" + + "wandaSomaliSụwidiishiTamụlụTaịTọkiishiUkureenịUruduViyetịnaamụYoruba" + + "MandarịịnịZulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000e, 0x000e, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0021, 0x0030, + 0x0030, 0x0030, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, + 0x0037, 0x0037, 0x0037, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + 0x0045, 0x0045, 0x0045, 0x0045, 0x004e, 0x0053, 0x0053, 0x0058, + 0x0058, 0x0058, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x0067, + 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x006e, + 0x006e, 0x0073, 0x0073, 0x0073, 0x0073, 0x007b, 0x007b, 0x007b, + // Entry 40 - 7F + 0x007b, 0x0084, 0x0084, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, + 0x008d, 0x008d, 0x0095, 0x0099, 0x0099, 0x0099, 0x0099, 0x0099, + 0x0099, 0x0099, 0x00a4, 0x00a4, 0x00a9, 0x00a9, 0x00a9, 0x00a9, + 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, + 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, + 0x00a9, 0x00a9, 0x00a9, 0x00af, 0x00af, 0x00b7, 0x00b7, 0x00b7, + 0x00bd, 0x00bd, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00cd, 0x00cd, 0x00d5, + // Entry 80 - BF + 0x00d5, 0x00db, 0x00db, 0x00db, 0x00db, 0x00e2, 0x00ea, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, + 0x0105, 0x0105, 0x010f, 0x010f, 0x010f, 0x0114, 0x0114, 0x0114, + 0x0114, 0x0114, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x0128, + 0x012d, 0x012d, 0x012d, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, + 0x013c, 0x0142, 0x0142, 0x0152, 0x0156, + }, + }, + { // ii + "ꄓꇩꉙꑱꇩꉙꑭꀠꑸꉙꃔꇩꉙꆈꌠꉙꑴꄊꆺꉙꏝꀪꉙꁍꄨꑸꉙꊉꇩꉙꍏꇩꉙꅉꀋꌠꅇꂷꀠꑟꁍꄨꑸꉙꈝꐯꍏꇩꉙꀎꋏꍏꇩꉙ", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0012, 0x0012, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + // Entry 40 - 7F + 0x0027, 0x0027, 0x0027, 0x0027, 0x0030, 0x0030, 0x0030, 0x0030, + 0x003c, 0x003c, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + // Entry 80 - BF + 0x0045, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + // Entry C0 - FF + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + // Entry 100 - 13F + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + // Entry 140 - 17F + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + // Entry 180 - 1BF + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + // Entry 1C0 - 1FF + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + // Entry 200 - 23F + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + // Entry 240 - 27F + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0093, 0x00a2, + }, + }, + { // is + isLangStr, + isLangIdx, + }, + { // it + itLangStr, + itLangIdx, + }, + { // ja + jaLangStr, + jaLangIdx, + }, + { // jgo + "AlâbɛNjámanŊgɛlɛ̂kAŋgɛlúshiFɛlánciShinwâNdaꞌacú-pʉɔ yi pɛ́ ká kɛ́ jí", + []uint16{ // 559 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000e, 0x000e, 0x000e, 0x000e, 0x0019, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + // Entry 40 - 7F + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + // Entry 80 - BF + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry 100 - 13F + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry 140 - 17F + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + // Entry 180 - 1BF + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + // Entry 1C0 - 1FF + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + // Entry 200 - 23F + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x005c, + }, + }, + { // jmc + "KiakanyiKiamharyiKyiarabuKyibelarusiKyibulgaryiaKyibanglaKyicheckiKyijer" + + "umaniKyigirikiKyingerezaKyihispaniaKyiajemiKyifaransaKyihausaKyihind" + + "iKyihungariKyiindonesiaKyiigboKyiitalianoKyijapaniKyijavaKyikambodia" + + "KyikoreaKyimalesiaKyiburmaKyinepaliKyiholanziKyipunjabiKyipolandiKyi" + + "renoKyiromaniaKyirusiKyinyarwandaKyisomalyiKyiswidiKyitamilKyitailan" + + "diKyiturukyiKyiukraniaKyiurduKyivietinamuKyiyorubaKyichinaKyizuluKim" + + "achame", + []uint16{ // 340 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0011, 0x0011, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0030, + 0x0030, 0x0030, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x004d, 0x004d, 0x004d, 0x004d, 0x0056, 0x0060, 0x0060, 0x006b, + 0x006b, 0x006b, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x0085, + 0x0085, 0x008d, 0x008d, 0x008d, 0x008d, 0x0097, 0x0097, 0x0097, + // Entry 40 - 7F + 0x0097, 0x00a3, 0x00a3, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00b5, 0x00b5, 0x00be, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00d0, 0x00d0, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00e2, 0x00e2, 0x00ea, 0x00ea, 0x00ea, + 0x00f3, 0x00f3, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x0107, 0x0107, 0x0111, + // Entry 80 - BF + 0x0111, 0x0118, 0x0118, 0x0118, 0x0118, 0x0122, 0x0129, 0x0135, + 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, + 0x0135, 0x0135, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x0147, 0x0147, 0x014f, 0x014f, 0x014f, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x016e, + 0x0175, 0x0175, 0x0175, 0x0181, 0x0181, 0x0181, 0x0181, 0x0181, + 0x0181, 0x018a, 0x018a, 0x0192, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry C0 - FF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 100 - 13F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 140 - 17F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x01a2, + }, + }, + { // ka + kaLangStr, + kaLangIdx, + }, + { // kab + "TakanitTamahrictTaɛrabtTabilarusitTabulgaritTabengalitTačikitTalmantTagr" + + "ikitTaglizitTaspenyulitTafarisitTafransistTahwasitTahenditTahungarit" + + "TandunisitTigbutTaṭalyanitTajapunitTajavanitTakemritTakuritTamalawit" + + "TaburmisitTanipalitTadučitTapunjabitTapulunitTapurtugalitTarumanitTa" + + "rusitTaruwanditTaṣumalitTaswiditTaṭamulitTaṭaylunditTaṭurkitTukranit" + + "TurdutTabyiṭnamitTayurubitTacinwat, TamundarintTazulutTaqbaylit", + []uint16{ // 345 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0010, 0x0010, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0023, 0x002d, + 0x002d, 0x002d, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, + 0x0037, 0x0037, 0x0037, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + 0x0046, 0x0046, 0x0046, 0x0046, 0x004e, 0x0056, 0x0056, 0x0061, + 0x0061, 0x0061, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x007c, + 0x007c, 0x0084, 0x0084, 0x0084, 0x0084, 0x008e, 0x008e, 0x008e, + // Entry 40 - 7F + 0x008e, 0x0098, 0x0098, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, + 0x00aa, 0x00aa, 0x00b3, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, + 0x00bc, 0x00bc, 0x00c4, 0x00c4, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00d4, 0x00d4, 0x00de, 0x00de, 0x00de, + 0x00e7, 0x00e7, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, + 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00f9, 0x00f9, 0x0102, + // Entry 80 - BF + 0x0102, 0x010e, 0x010e, 0x010e, 0x010e, 0x0117, 0x011e, 0x0128, + 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, + 0x0128, 0x0128, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, + 0x013b, 0x013b, 0x0146, 0x0146, 0x0146, 0x0153, 0x0153, 0x0153, + 0x0153, 0x0153, 0x015d, 0x015d, 0x015d, 0x015d, 0x015d, 0x0165, + 0x016b, 0x016b, 0x016b, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, + 0x0178, 0x0181, 0x0181, 0x0196, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + // Entry C0 - FF + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + // Entry 100 - 13F + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + // Entry 140 - 17F + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x01a6, + }, + }, + { // kam + "KiakanKiamhariKiarabuKibelarusiKibulgariaKibanglaKicheckiKijerumaniKigir" + + "ikiKingerezaKihispaniaKiajemiKifaransaKihausaKihindiKihungariKiindon" + + "esiaKiigboKiitalianoKijapaniKijavaKikambodiaKikoreaKimalesiaKiburmaK" + + "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + + "rubaKichinaKizuluKikamba", + []uint16{ // 348 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x0054, 0x0054, 0x005e, + 0x005e, 0x005e, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0075, + 0x0075, 0x007c, 0x007c, 0x007c, 0x007c, 0x0085, 0x0085, 0x0085, + // Entry 40 - 7F + 0x0085, 0x0090, 0x0090, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x00a0, 0x00a0, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00b8, 0x00b8, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00c8, 0x00c8, 0x00cf, 0x00cf, 0x00cf, + 0x00d7, 0x00d7, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e9, 0x00e9, 0x00f2, + // Entry 80 - BF + 0x00f2, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0101, 0x0107, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x0121, 0x0121, 0x0128, 0x0128, 0x0128, 0x0132, 0x0132, 0x0132, + 0x0132, 0x0132, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x0143, + 0x0149, 0x0149, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x015c, 0x015c, 0x0163, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry C0 - FF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 100 - 13F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 140 - 17F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0170, + }, + }, + { // kde + "ChakanChamhaliChalabuChibelalusiChibulgaliaChibanglaChichechiChidyeluman" + + "iChigilichiChiingelezaChihispaniaChiajemiChifalansaChihausaChihindiC" + + "hihungaliChiiongonesiaChiigboChiitalianoChidyapaniChidyavaChikambodi" + + "aChikoleaChimalesiaChibulmaChinepaliChiholanziChipunjabiChipolandiCh" + + "ilenoChilomaniaChilusiChinyalwandaChisomaliChiswidiChitamilChitailan" + + "diChituluchiChiuklaniaChiulduChivietinamuChiyolubaChichinaChizuluChi" + + "makonde", + []uint16{ // 353 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0020, 0x002b, + 0x002b, 0x002b, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x0049, 0x0049, 0x0049, 0x0049, 0x0053, 0x005e, 0x005e, 0x0069, + 0x0069, 0x0069, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x0083, + 0x0083, 0x008b, 0x008b, 0x008b, 0x008b, 0x0095, 0x0095, 0x0095, + // Entry 40 - 7F + 0x0095, 0x00a2, 0x00a2, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, + 0x00b4, 0x00b4, 0x00be, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00d1, 0x00d1, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00e3, 0x00e3, 0x00eb, 0x00eb, 0x00eb, + 0x00f4, 0x00f4, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, + 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x0108, 0x0108, 0x0112, + // Entry 80 - BF + 0x0112, 0x0119, 0x0119, 0x0119, 0x0119, 0x0123, 0x012a, 0x0136, + 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, + 0x0136, 0x0136, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x0147, 0x0147, 0x014f, 0x014f, 0x014f, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x016e, + 0x0175, 0x0175, 0x0175, 0x0181, 0x0181, 0x0181, 0x0181, 0x0181, + 0x0181, 0x018a, 0x018a, 0x0192, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry C0 - FF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 100 - 13F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 140 - 17F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x01a3, + }, + }, + { // kea + "abkáziuafrikanerakanamárikuárabiasamesaimaraazerbaijanubaxkirbielorusubú" + + "lgarubambarabengalitibetanubretãubosniukatalãutxetxenukórsikutxekutx" + + "uvaxigalesdinamarkesalimãudzonkaevegreguinglessperantuspanholstonian" + + "ubaskupersafinlandesfijianufaroesfransesfríziu osidentalirlandesgale" + + "guguaranigujaratimanksauzaebraikuindikroataaitianuúngaruarméniuindon" + + "éziuibonuosuislandesitalianuinuktitutjaponesjavanesjorjianukikuiuka" + + "zakgroenlandeskmerkanareskorianukaxmirakurdukórnikukirgizlatinluxemb" + + "urgeslugandalausianulituanesletãumalgaximaorimasedóniumalaialammarat" + + "imaláiumaltesbirmanesnepalesolandesnorueges nynorsknorueges bokmålor" + + "omoodíapandjabipulakupaxtopurtugeskexuaromanxirumenurusukiniaruandas" + + "ánskritusindisingalesslovakuslovéniusomalialbanessérviusundanessuek" + + "usuaílitamiltelugutadjikitailandestigriniaturkmenutonganesturkutatar" + + "uigurukranianuurduuzbekivietnamitauolofkozaiorubaxineszuluaghemarauk" + + "anuasubembabenabodoxigaxerokikurdu sentraltaitazarmasórbiu baxuduala" + + "jola-fonyiembufilipinugagauzalimãu suísugusiiavaianusórbiu altuñomba" + + "matxamekabilakambakabuverdianukoira txiinikalenjinkomi-permiakkonkan" + + "ibafiakuaziokitxekoiraboro seniinari samitamazait di Atlas Sentrallí" + + "ngua diskonxedusen kontiudu linguístikuárabi mudernualimãu austriaku" + + "altu alimãu suisuingles australianuingles kanadianuingles britanikui" + + "ngles merkanuspanhol latinu-merkanuspanhol europeuspanhol mexikanufr" + + "anses kanadianufranses suisuflamengupurtuges brazilerupurtuges europ" + + "eurumenu moldávikusuaíli kongolesxines simplifikaduxines tradisional", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x0008, 0x0011, 0x0015, 0x001d, 0x001d, + 0x0023, 0x0029, 0x0029, 0x002f, 0x003a, 0x0040, 0x0049, 0x0051, + 0x0051, 0x0058, 0x005f, 0x0067, 0x006e, 0x0074, 0x007c, 0x0084, + 0x0084, 0x008c, 0x008c, 0x0091, 0x0091, 0x0098, 0x009d, 0x00a7, + 0x00ae, 0x00ae, 0x00b4, 0x00b7, 0x00bc, 0x00c2, 0x00ca, 0x00d1, + 0x00d9, 0x00de, 0x00e3, 0x00e3, 0x00ec, 0x00f3, 0x00f9, 0x0100, + 0x0111, 0x0119, 0x0119, 0x011f, 0x0126, 0x012e, 0x0133, 0x0137, + 0x013e, 0x0142, 0x0142, 0x0148, 0x014f, 0x0156, 0x015e, 0x015e, + // Entry 40 - 7F + 0x015e, 0x0168, 0x0168, 0x016b, 0x0170, 0x0170, 0x0170, 0x0178, + 0x0180, 0x0189, 0x0190, 0x0197, 0x019f, 0x019f, 0x01a5, 0x01a5, + 0x01aa, 0x01b5, 0x01b9, 0x01c0, 0x01c7, 0x01c7, 0x01ce, 0x01d3, + 0x01d3, 0x01db, 0x01e1, 0x01e6, 0x01f1, 0x01f8, 0x01f8, 0x01f8, + 0x0200, 0x0208, 0x0208, 0x020e, 0x0215, 0x0215, 0x021a, 0x0224, + 0x022d, 0x022d, 0x0233, 0x023a, 0x0240, 0x0248, 0x0248, 0x0248, + 0x024f, 0x024f, 0x0256, 0x0266, 0x0276, 0x0276, 0x0276, 0x0276, + 0x0276, 0x0276, 0x027b, 0x0280, 0x0280, 0x0288, 0x0288, 0x028e, + // Entry 80 - BF + 0x0293, 0x029b, 0x02a0, 0x02a7, 0x02a7, 0x02ad, 0x02b1, 0x02bc, + 0x02c6, 0x02c6, 0x02cb, 0x02cb, 0x02cb, 0x02d3, 0x02da, 0x02e3, + 0x02e3, 0x02e3, 0x02e9, 0x02f0, 0x02f7, 0x02f7, 0x02f7, 0x02ff, + 0x0304, 0x030b, 0x0310, 0x0316, 0x031d, 0x0326, 0x032e, 0x0336, + 0x0336, 0x033e, 0x0343, 0x0343, 0x0348, 0x0348, 0x034d, 0x0356, + 0x035a, 0x0360, 0x0360, 0x036a, 0x036a, 0x036a, 0x036f, 0x0373, + 0x0373, 0x0379, 0x0379, 0x037e, 0x0382, 0x0382, 0x0382, 0x0382, + 0x0382, 0x0382, 0x0382, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, + // Entry C0 - FF + 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x038f, 0x038f, 0x038f, + 0x038f, 0x038f, 0x038f, 0x038f, 0x038f, 0x0392, 0x0392, 0x0392, + 0x0392, 0x0392, 0x0392, 0x0392, 0x0392, 0x0392, 0x0392, 0x0392, + 0x0392, 0x0392, 0x0397, 0x0397, 0x039b, 0x039b, 0x039b, 0x039b, + 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, + 0x039b, 0x039b, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x03a3, 0x03a3, + 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a9, 0x03a9, + // Entry 100 - 13F + 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, + 0x03bb, 0x03bb, 0x03bb, 0x03bb, 0x03bb, 0x03c0, 0x03c0, 0x03cc, + 0x03cc, 0x03d1, 0x03d1, 0x03db, 0x03db, 0x03db, 0x03df, 0x03df, + 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, + 0x03df, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, + 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03ed, 0x03ed, 0x03ed, 0x03ed, + 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, + 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03fb, 0x03fb, 0x03fb, 0x0400, + // Entry 140 - 17F + 0x0400, 0x0400, 0x0400, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, + 0x0413, 0x0413, 0x0419, 0x0420, 0x0420, 0x0420, 0x0420, 0x0420, + 0x0426, 0x0426, 0x0426, 0x042b, 0x042b, 0x042b, 0x042b, 0x042b, + 0x042b, 0x0437, 0x0437, 0x0437, 0x0437, 0x0437, 0x0437, 0x0443, + 0x0443, 0x0443, 0x0443, 0x044b, 0x044b, 0x0457, 0x045e, 0x045e, + 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x0463, + 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, + // Entry 180 - 1BF + 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, + 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, + 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, + 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, + 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, + 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, + 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, + 0x0463, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, + // Entry 1C0 - 1FF + 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, + 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, + 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, + 0x0469, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, + 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, + 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, + 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, + 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, + // Entry 200 - 23F + 0x047c, 0x047c, 0x047c, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x049f, 0x049f, 0x049f, 0x049f, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + // Entry 240 - 27F + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04ca, 0x04ca, 0x04d8, 0x04d8, + 0x04e9, 0x04fb, 0x050d, 0x051d, 0x052d, 0x053b, 0x0551, 0x0560, + 0x0570, 0x0570, 0x0581, 0x058e, 0x058e, 0x0596, 0x05a8, 0x05b8, + 0x05c9, 0x05c9, 0x05d9, 0x05eb, 0x05fc, + }, + }, + { // khq + "Akan senniAmhaarik senniLaaraw senniBelaruus senniBulagaari senniBengali" + + " senniCek senniAlmaŋ senniGrek senniInglisi senniEspaaɲe senniFarsi " + + "senniFransee senniHawsance senniInduu senniHungaari senniIndoneesi s" + + "enniIboo senniItaali senniJaponee senniJavanee senniKmeer senni, Gam" + + "e hereKoree senniMaleezi senniBurme senniNeepal senniHolandee senniP" + + "unjaabi senniiPolonee senniPortugee senniRumaani senniRuusi senniRwa" + + "nda senniSomaali senniSuweede senniTamil senniTaailandu senniTurku s" + + "enniUkreen senniUrdu senniVietnaam senniYorbance senniSinuwa senni, " + + "MandareŋJulu senniKoyra ciini", + []uint16{ // 360 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0032, 0x0041, + 0x0041, 0x0041, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0063, 0x0063, 0x0063, 0x0063, 0x006d, 0x007a, 0x007a, 0x0088, + 0x0088, 0x0088, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00ae, + 0x00ae, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00c7, 0x00c7, 0x00c7, + // Entry 40 - 7F + 0x00c7, 0x00d6, 0x00d6, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00ec, 0x00ec, 0x00f9, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x011c, 0x011c, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0134, 0x0134, 0x013f, 0x013f, 0x013f, + 0x014b, 0x014b, 0x0159, 0x0159, 0x0159, 0x0159, 0x0159, 0x0159, + 0x0159, 0x0159, 0x0159, 0x0159, 0x0159, 0x0168, 0x0168, 0x0175, + // Entry 80 - BF + 0x0175, 0x0183, 0x0183, 0x0183, 0x0183, 0x0190, 0x019b, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, + 0x01c1, 0x01c1, 0x01cc, 0x01cc, 0x01cc, 0x01db, 0x01db, 0x01db, + 0x01db, 0x01db, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01f2, + 0x01fc, 0x01fc, 0x01fc, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x020a, 0x0218, 0x0218, 0x022f, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry C0 - FF + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry 100 - 13F + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry 140 - 17F + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0244, + }, + }, + { // ki + "KiakanKiamhariKĩarabuKibelarusiKibulgariaKibanglaKicheckiKĩnjeremaniKigi" + + "rikiGĩthungũKihispaniaKiajemiKĩbaranjaKihausaKĩhĩndĩKihungariKiindon" + + "esiaKiigboKĩtalianoKĩnjabaniKijavaGikuyuKikambodiaKikoreaKimalesiaKi" + + "burmaKinepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKĩraciaKinyar" + + "wandaKĩcumarĩKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietin" + + "amuKiyorubaKĩcainaKizulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0020, 0x002a, + 0x002a, 0x002a, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x0046, 0x0046, 0x0046, 0x0046, 0x004e, 0x0058, 0x0058, 0x0062, + 0x0062, 0x0062, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x007a, + 0x007a, 0x0084, 0x0084, 0x0084, 0x0084, 0x008d, 0x008d, 0x008d, + // Entry 40 - 7F + 0x008d, 0x0098, 0x0098, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, + 0x00a8, 0x00a8, 0x00b2, 0x00b8, 0x00b8, 0x00b8, 0x00be, 0x00be, + 0x00be, 0x00be, 0x00c8, 0x00c8, 0x00cf, 0x00cf, 0x00cf, 0x00cf, + 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, + 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, + 0x00cf, 0x00cf, 0x00cf, 0x00d8, 0x00d8, 0x00df, 0x00df, 0x00df, + 0x00e7, 0x00e7, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f9, 0x00f9, 0x0102, + // Entry 80 - BF + 0x0102, 0x0108, 0x0108, 0x0108, 0x0108, 0x0111, 0x0119, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x0135, 0x0135, 0x013c, 0x013c, 0x013c, 0x0146, 0x0146, 0x0146, + 0x0146, 0x0146, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x0157, + 0x015d, 0x015d, 0x015d, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0170, 0x0170, 0x0178, 0x017e, + }, + }, + { // kk + kkLangStr, + kkLangIdx, + }, + { // kkj + "yamannumbu buykakɔ", + []uint16{ // 363 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + // Entry 40 - 7F + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + // Entry 80 - BF + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + // Entry C0 - FF + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + // Entry 100 - 13F + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + // Entry 140 - 17F + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x0013, + }, + }, + { // kl + "kalaallisut", + []uint16{ // 82 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000b, + }, + }, + { // kln + "kutitab Akakutitab Amariekkutitab Arabukkutitab Belarusakutitab Bulgaria" + + "kutitab Bengalikutitab Chekkutitab Chermanikutitab Greecekutitab Uin" + + "geresakutitab Espianikkutitab Persiakutitab Kifaransakutitab Hausaku" + + "titab Maindiikkutitab Hangarikutitab Indonesiakutitab Igbokutitab Ta" + + "lianekkutitap Japankutitap Javanesekutitab Kher nebo Kwenkutitab Kor" + + "eakutitab Malaykutitab Burmakutitab Nepalikutitab Boakutitab Punjabk" + + "utitap Polandkutitab Portugalkutitab Romaniekkutitab Russiakutitab K" + + "inyarwandakutitab Somaliekkutitab Swedenkutitab Tamilkutitab Thailan" + + "dkutitab Turkeykutitab Ukrainekutitab Urdukutitab Vietnamkutitab Yor" + + "ubakutitab Chinakutitab ZuluKalenjin", + []uint16{ // 364 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x001a, 0x001a, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0038, 0x0048, + 0x0048, 0x0048, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0081, 0x0092, 0x0092, 0x00a2, + 0x00a2, 0x00a2, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00c1, + 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00ce, + 0x00ce, 0x00de, 0x00de, 0x00de, 0x00de, 0x00ed, 0x00ed, 0x00ed, + // Entry 40 - 7F + 0x00ed, 0x00fe, 0x00fe, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x011a, 0x011a, 0x0127, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, + 0x0137, 0x0137, 0x014d, 0x014d, 0x015a, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x015a, 0x0167, 0x0167, 0x0174, 0x0174, 0x0174, + 0x0182, 0x0182, 0x018d, 0x018d, 0x018d, 0x018d, 0x018d, 0x018d, + 0x018d, 0x018d, 0x018d, 0x018d, 0x018d, 0x019b, 0x019b, 0x01a9, + // Entry 80 - BF + 0x01a9, 0x01b9, 0x01b9, 0x01b9, 0x01b9, 0x01c9, 0x01d7, 0x01ea, + 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01ea, + 0x01ea, 0x01ea, 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, + 0x0208, 0x0208, 0x0215, 0x0215, 0x0215, 0x0225, 0x0225, 0x0225, + 0x0225, 0x0225, 0x0233, 0x0233, 0x0233, 0x0233, 0x0233, 0x0242, + 0x024e, 0x024e, 0x024e, 0x025d, 0x025d, 0x025d, 0x025d, 0x025d, + 0x025d, 0x026b, 0x026b, 0x0278, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + // Entry C0 - FF + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + // Entry 100 - 13F + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + // Entry 140 - 17F + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, + 0x0284, 0x0284, 0x0284, 0x028c, + }, + }, + { // km + kmLangStr, + kmLangIdx, + }, + { // kn + knLangStr, + knLangIdx, + }, + { // ko + koLangStr, + koLangIdx, + }, + {}, // ko-KP + { // kok + "अफारअबखेज़ियनअफ्रिकान्सत्विअमहारिक्अरेबिक्असामीऐमराअज़रबैजानीबष्किरबैलोर" + + "ुसियन्बल्गेरियनबिसलमाबंगालीतिबेतियनब्रेटनकटलानकोर्शियनज़ेक्वेळ्ष्ड" + + "ानिषजर्मनभूटानीग्रीक्आंग्लइस्परान्टोस्पानिषइस्टोनियन्बास्कपर्षियन्" + + "फिन्निष्फिजीफेरोस्फ्रेन्चफ्रिशियन्ऐरिषस्काटस् गेलिक्गेलीशियनगौरानी" + + "गुजरातीहौसाहेब्रुहिन्दीक्रोयेषियन्हंगेरियन्आर्मीनियन्इन्टरलिंग्वाइ" + + "न्डोनेषियनइन्टरलिंग्इनूपेयाक्आईस्लान्डिकइटालियनइन्युकट्टजापनीस्जाव" + + "नीस्जार्जियन्कज़ख्ग्रीनलान्डिककंबोडियनकन्नडाकोरियन्कश्मीरीकुर्दिषक" + + "िर्गिज़लाटिनलिंगालालाओतियन्लिथुआनियन्लाट्वियन् (लेट्टिष्)मलागसीमाओ" + + "रीमसीडोनियन्मळियाळममंगोलियन्मराठीमलयमालतीस्बर्मीज़्नौरोनेपाळीडच्नो" + + "र्वेजियनओसिटान्ओरोमो (अफान)ओरियापंजाबीपोलिषपाष्टो (पुष्टो)पोर्चुगी" + + "ज़्क्वेच्वारहटो-रोमान्स्किरुन्दीरोमानियन्रष्यन्किन्यार्वान्डासंस्क" + + "ृतसिंधीसांग्रोसिन्हलीस्स्लोवाकस्लोवेनियन्समोनशोनासोमाळीआल्बेनियन्स" + + "ेर्बियन्सिस्वातीसेसोथोसुंदनीसस्वीदीषस्वाहिलीतमिळतेलुगूतजिकथाईतिग्र" + + "िन्यातुर्कमनसेत्स्वानातोंगातुर्किषत्सोगातटारउधूरयुक्रेनियन्उर्दूउज" + + "़बेकवियत्नामीज़ओलापुकउलोफ़झ़ौसाइद्दिष्यूरुबाझ्हुन्गचीनीस्जुलूतगालो" + + "गकोंकणीमोल्डावियन्सेर्बो-क्रोयेषियन्", + []uint16{ // 610 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0027, 0x0027, 0x0045, 0x0051, 0x0069, 0x0069, + 0x007e, 0x008d, 0x008d, 0x0099, 0x00b7, 0x00c9, 0x00ea, 0x0105, + 0x0117, 0x0117, 0x0129, 0x0141, 0x0153, 0x0153, 0x0162, 0x0162, + 0x0162, 0x017a, 0x017a, 0x0189, 0x0189, 0x0189, 0x019b, 0x01aa, + 0x01b9, 0x01b9, 0x01cb, 0x01cb, 0x01dd, 0x01ec, 0x020a, 0x021f, + 0x023d, 0x024c, 0x0264, 0x0264, 0x027c, 0x0288, 0x029a, 0x02af, + 0x02ca, 0x02d6, 0x02fe, 0x0316, 0x0328, 0x033d, 0x033d, 0x0349, + 0x035b, 0x036d, 0x036d, 0x038e, 0x038e, 0x03a9, 0x03c7, 0x03c7, + // Entry 40 - 7F + 0x03eb, 0x040c, 0x042a, 0x042a, 0x042a, 0x0445, 0x0445, 0x0466, + 0x047b, 0x0496, 0x04ab, 0x04c0, 0x04db, 0x04db, 0x04db, 0x04db, + 0x04ea, 0x050e, 0x0526, 0x0538, 0x054d, 0x054d, 0x0562, 0x0577, + 0x0577, 0x0577, 0x058f, 0x059e, 0x059e, 0x059e, 0x059e, 0x05b3, + 0x05cb, 0x05e9, 0x05e9, 0x061f, 0x0631, 0x0631, 0x0640, 0x065e, + 0x0673, 0x068e, 0x069d, 0x06a6, 0x06bb, 0x06d3, 0x06df, 0x06df, + 0x06f1, 0x06f1, 0x06fa, 0x06fa, 0x0718, 0x0718, 0x0718, 0x0718, + 0x072d, 0x072d, 0x074b, 0x075a, 0x075a, 0x076c, 0x076c, 0x077b, + // Entry 80 - BF + 0x07a2, 0x07c3, 0x07db, 0x0800, 0x0818, 0x0833, 0x0845, 0x086f, + 0x0884, 0x0884, 0x0893, 0x0893, 0x08a8, 0x08c3, 0x08d8, 0x08f9, + 0x0905, 0x0911, 0x0923, 0x0941, 0x095c, 0x0974, 0x0986, 0x099b, + 0x09b0, 0x09c8, 0x09d4, 0x09e6, 0x09f2, 0x09fb, 0x0a19, 0x0a2e, + 0x0a4c, 0x0a5b, 0x0a70, 0x0a82, 0x0a8e, 0x0a8e, 0x0a9a, 0x0abb, + 0x0aca, 0x0adc, 0x0adc, 0x0afd, 0x0b0f, 0x0b0f, 0x0b1e, 0x0b2d, + 0x0b42, 0x0b54, 0x0b69, 0x0b7b, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + // Entry C0 - FF + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + // Entry 100 - 13F + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, + 0x0b87, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + // Entry 140 - 17F + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + // Entry 180 - 1BF + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + // Entry 1C0 - 1FF + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + // Entry 200 - 23F + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + // Entry 240 - 27F + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x0bcc, 0x0c00, + }, + }, + { // ks + "اَفاراَبخازِیاناَویستَناَفریٖکانٛزاَکاناَمہاریاَراگونیعربیاسٲمۍاَوارِکای" + + "مارااَزَربیجانیبَشکیٖربیلَروٗشیَنبینابِسلامابَمبارابَنٛگٲلۍتِبتیبری" + + "ٹَنبوسنِیَنکَتلانچیچَنکَموروکارسِکَنکریچیٚکچٔرچ سلاوِکچُواشویٚلشڈین" + + "ِشجٔرمَندِویہیزونٛگکھاایٖویوٗنٲنیاَنٛگیٖزۍایٚسپَرینٹوسپینِشایٚسٹونی" + + "َنباسکفارسیفُلاہفِنِشفِجیَنفَروسفریٚنچمغربی فرِشیَناَیرِشسکوٹِش گیے" + + "لِکگیلِشِیَنگُوارَنیگُجرٲتیمینٛکسہاوساعبرٲنۍہِندیہِری موتوٗکروشِیَن" + + "ہیتِیاںہَنٛگیریَناَرمینیَنہیٚریٖرواِنٹَرلِنٛگوااِنڈونیشیااِنٹَر لِن" + + "ٛنگویےاِگبوسِچوان یٖیاِنُپِیاکاِڈوآیِسلینڈِکاِٹیلیَناِنُکتِتوٗجاپٲن" + + "ۍجَوَنیٖزجارجِیَنکونٛگوکِکُیوٗکُوانیاماکازَخکَلالِسُتخَمیرکَنَڑکوری" + + "َنکَنوٗریکٲشُرکُردِشکومیکورنِشکِرگِزلاتیٖنیلُکھزیمبورگِشگاندالِمبٔر" + + "گِشلِنگالالاولِتھوانِیَنلوُبا کَتَنٛگالَتوِیَنمَلاگَسیمارشَلیٖزماور" + + "یمیکَڈونیَنمٔلیالَممَنٛگولیمَرٲٹھۍمَلَےمَلتیٖسبٔمیٖزناورُشُمال ڈَبی" + + "لنیٚپٲلۍڈونٛگاڈَچناروییَن نَے نورسکناروییَن بوکمالجنوب ڈیٚبیلنَواجو" + + "نِیَنجااوکسیٖٹَناوجِبوااوٚرومواوٚرِیااوٚسیٚٹِکپَنجٲبۍپالیپالِشپَشتو" + + "ٗپُرتَگیٖزکُویشُوارومانشرُندیرومٲنیروٗسیکِنیاوِنداسَنسکرٕتسراڈیٖنیس" + + "ِندیشُمٲلی سَمیسَنگوسِنہالاسلووَکسلووینیَنسَمواَنشوناسومٲلیالبانِیَ" + + "نسٔربِیَنسواتیجنوبی ستھوسَنڈَنیٖزسویٖڈِشسواہِلیتَمِلتیلگوٗتاجِکتھاے" + + "ٹِگرِنیاتُرکمینسواناٹونٛگاتُرکِشژونٛگاتَتارتاہیشِیَنیوٗکرینیٲییاُرد" + + "وٗاُزبیکوینداوِیَتنَمیٖزوولَپُکوَلوٗنوولوفکھوسایِدِشیورُبازُہانٛگچی" + + "ٖنیزُلوٗاَچَےنیٖزاَکولیاَدَنٛگمیےاَدَیٖگیےاَفرِہِلیاینوٗاَکادِیَناَ" + + "لویتیجنوٗبی اَلتاییپرون اَنٛگریٖزیاَنٛگِکااَرَمیکایرو کونِیَناَراپا" + + "ہواَراوَکایسٹوٗریَناَوَدیبَلوٗچیبالِنیٖزباسابیجابیٚمبابوجپوٗریبِکول" + + "بِنیسِکسِکابرٛجبُرِیَتبَگنیٖزبٕلِنکاڈوکارِباتسَمسیباونوچیٖبچاچھَگتا" + + "ےچُکیٖزماریچِنوٗک جارگَنچوکتَوشیپویانچیٚروکیشییونکاپٹِککرٕمیٖن تُرک" + + "یکَشوٗبِیَنڈکوٹادَرگواڈیٚلوییَرسلیوڈاگرِبڈِنکاڈوگریبوٚنِم ساربِیَند" + + "ُوالاوَستی پُرتُگالیڈِیوٗلاایٚفِکقدیٖمی مِصریایٚکاجُکایٚلامایِٹوَسط" + + "ی اَنٛگریٖزۍایٚوونڈوفینٛگفِلِپیٖنوفونوسطی فریٚنچپرون فریٚنچشُمٲلی ف" + + "رِشیَنمشرِقی فرِشیَنفروٗلِیَنگاگیےیوگبایاگیٖزگِلبٔرٹیٖزوَسطی ہاے جٔ" + + "رمَنپرون ہاے جٔرمَنگوندیگورینٹیلوگوتھِکگرِبوقدیٖم یوٗنٲنیسٕوِس جٔرم" + + "َنگُوِچ اِنہَیداہوایِیَنہِلیٖگینَنہِتایِتہمونٛگہیٚرِم ساربِیَنہُپاا" + + "ِباناِلوکواِنٛگُشلوجبانجوڈیو فارسیجوڈیو عربیکارا کَلپَککَبایِلکاچِن" + + "جُوٗکامباکَویکَبارڈِیَنتَیَپکوروکھاسیکھوتَنیٖزکِمبُندوٗکونکَنیکوسری" + + "یَنکَپیلیکراچیے بَلکارکَریلِیَنکُرُکھکُمِککُتینَےلیڈِنولَہَندالَمبا" + + "لیزگِیَنمونٛگولوزیلوٗبا لوٗلُوالویِسینولُندالُوولُسہاےمَدُریٖزمَگاے" + + "میتَھلیمَکَسارمَندِنٛگومَساےموکشامَندَرمیندیےوَستی ایرِشمِکمیکمِنَن" + + "ٛگکَباومانٛچوٗمَنیپوٗریموہاکموسیواریاہ زبانکریٖکمِراندیٖزمارواڑیایٚ" + + "رزِیانیٖپالیٹَنبوٚنِم جٔرمَننیٚوارینِیاسنِیویَننوگاےپرون نارسیایٚن " + + "کوشمالی ستھوکلاسِکَل نیوارینِیَمویٚزینِیَنکولنِیورونَظیٖمااوٚسیجاوٹ" + + "ومَن تُرکِشپَنٛگاسِنَنپَہلَویپَمپَنٛگاپَپِیامیٚنٹوپَلااُواںپرون فار" + + "سیفونیٖشیَنپانپیٚیَنپرون پروویٚنچَلراجِستھٲنۍرَپانویرَروٹونٛگَنرومَ" + + "نیاَرومانیسَندَویےیاکُتسَمارِتَن اَرامیکسَسَکسَنتالیسِچِلِیَنسکاٹسس" + + "یٚلکُپپرون ایرِششانسِداموجنوٗبی سَمیلولیے سَمیاِناری سَمیسکولٹ سَمی" + + "سونِنکیےسوگڈِیَنسرٛانَن ٹونٛگوسیٚریرسُکُماسُسوٗسُمیریَنسیٖریٲییٹِمن" + + "یےٹیٚریٚنوٹیٹَمٹاےگریےتیٖوٹوکیٖلاوکِلِنگونٹِلِنگِتتاماشیکنیاسا ٹونٛ" + + "گاٹاک پِسِنژھِمشِیانتُمبُکاتُوالوٗتُویٖنیَناُدمُرتاُگارتِکیُمبُندوٗ" + + "روٗٹواےووتِکوالامووَریےواشوکالمِکیاویَپیٖززَپوتیٚکزیناگازوٗنیکانٛہہ" + + " تہِ لِسانیاتی مواد نہٕزازاآسٹرِیَن جٔرمَنسٕوِس ہاےجٔرمَنآسٹریلیَن ا" + + "َنٛگریٖزۍکینَڈِیٲیی اَنٛگریٖزۍبَرطانوی اَنٛگریٖزۍیوٗ ایٚس اَنٛگریٖز" + + "ۍلیٹٕن امریٖکی سپینِشلِبیریَن سپینِشکَنیڈیَن فریٚنچسٕوٕس فریٚنچفلیٚ" + + "مِشبرازیٖلی پُتَگیٖزلِبیریَن پُرتَگیٖزمولداوِیَنسیٚربو کروشِیَنسیٚو" + + "د چیٖنیرِوٲجی چیٖنی", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000a, 0x001e, 0x002e, 0x0044, 0x004e, 0x005c, 0x006c, + 0x0074, 0x007e, 0x008c, 0x0098, 0x00ae, 0x00bc, 0x00d2, 0x00da, + 0x00e8, 0x00f6, 0x0106, 0x0110, 0x011c, 0x012c, 0x0138, 0x0142, + 0x014e, 0x015e, 0x0164, 0x016c, 0x0181, 0x018b, 0x0195, 0x019f, + 0x01ab, 0x01b7, 0x01c7, 0x01cf, 0x01dd, 0x01ef, 0x0205, 0x0211, + 0x0225, 0x022d, 0x0237, 0x0241, 0x024b, 0x0257, 0x0261, 0x026d, + 0x0286, 0x0292, 0x02ab, 0x02bd, 0x02cd, 0x02db, 0x02e7, 0x02f1, + 0x02fd, 0x0307, 0x031a, 0x032a, 0x0338, 0x034c, 0x035e, 0x036e, + // Entry 40 - 7F + 0x0388, 0x039c, 0x03bb, 0x03c5, 0x03d8, 0x03ea, 0x03f2, 0x0406, + 0x0416, 0x042a, 0x0436, 0x0446, 0x0456, 0x0462, 0x0470, 0x0482, + 0x048c, 0x049e, 0x04a8, 0x04b2, 0x04be, 0x04cc, 0x04d6, 0x04e2, + 0x04ea, 0x04f6, 0x0502, 0x0510, 0x052a, 0x0534, 0x0546, 0x0554, + 0x055a, 0x0570, 0x058b, 0x059b, 0x05ab, 0x05bd, 0x05c7, 0x05db, + 0x05eb, 0x05fb, 0x0609, 0x0613, 0x0621, 0x062d, 0x0637, 0x064c, + 0x065a, 0x0666, 0x066c, 0x068e, 0x06ab, 0x06c0, 0x06cc, 0x06da, + 0x06ec, 0x06fa, 0x0708, 0x0716, 0x0728, 0x0736, 0x073e, 0x0748, + // Entry 80 - BF + 0x0754, 0x0766, 0x0776, 0x0782, 0x078c, 0x0798, 0x07a2, 0x07b6, + 0x07c6, 0x07d6, 0x07e0, 0x07f5, 0x07ff, 0x080d, 0x0819, 0x082b, + 0x0839, 0x0841, 0x084d, 0x085f, 0x086f, 0x0879, 0x088c, 0x089e, + 0x08ac, 0x08ba, 0x08c4, 0x08d0, 0x08da, 0x08e2, 0x08f2, 0x0900, + 0x090a, 0x0916, 0x0922, 0x092e, 0x0938, 0x094a, 0x094a, 0x0960, + 0x096c, 0x0978, 0x0982, 0x0998, 0x09a6, 0x09b2, 0x09bc, 0x09c6, + 0x09d0, 0x09dc, 0x09ea, 0x09f4, 0x09fe, 0x0a10, 0x0a1c, 0x0a30, + 0x0a42, 0x0a42, 0x0a54, 0x0a54, 0x0a5e, 0x0a70, 0x0a70, 0x0a7e, + // Entry C0 - FF + 0x0a7e, 0x0a99, 0x0ab6, 0x0ac6, 0x0ad4, 0x0aeb, 0x0aeb, 0x0afb, + 0x0afb, 0x0afb, 0x0b09, 0x0b09, 0x0b09, 0x0b09, 0x0b09, 0x0b1d, + 0x0b1d, 0x0b29, 0x0b37, 0x0b47, 0x0b47, 0x0b4f, 0x0b4f, 0x0b4f, + 0x0b4f, 0x0b57, 0x0b63, 0x0b63, 0x0b63, 0x0b63, 0x0b63, 0x0b63, + 0x0b73, 0x0b7d, 0x0b85, 0x0b85, 0x0b85, 0x0b93, 0x0b93, 0x0b93, + 0x0b9b, 0x0b9b, 0x0b9b, 0x0b9b, 0x0ba9, 0x0bb7, 0x0bb7, 0x0bc1, + 0x0bc1, 0x0bc9, 0x0bd3, 0x0bd3, 0x0bdd, 0x0beb, 0x0beb, 0x0bf7, + 0x0c05, 0x0c11, 0x0c19, 0x0c32, 0x0c3e, 0x0c4c, 0x0c5a, 0x0c64, + // Entry 100 - 13F + 0x0c64, 0x0c70, 0x0c70, 0x0c89, 0x0c89, 0x0c9d, 0x0ca7, 0x0cb3, + 0x0cb3, 0x0cc5, 0x0ccd, 0x0cd9, 0x0ce3, 0x0ce3, 0x0ced, 0x0d0a, + 0x0d0a, 0x0d16, 0x0d33, 0x0d33, 0x0d41, 0x0d41, 0x0d41, 0x0d4d, + 0x0d4d, 0x0d64, 0x0d74, 0x0d88, 0x0da7, 0x0da7, 0x0db7, 0x0db7, + 0x0dc1, 0x0dd3, 0x0dd3, 0x0dd9, 0x0dd9, 0x0dee, 0x0e03, 0x0e03, + 0x0e1e, 0x0e39, 0x0e4b, 0x0e4f, 0x0e4f, 0x0e4f, 0x0e59, 0x0e63, + 0x0e63, 0x0e6b, 0x0e7f, 0x0e7f, 0x0e9d, 0x0eb9, 0x0eb9, 0x0ec3, + 0x0ed5, 0x0ee1, 0x0eeb, 0x0f04, 0x0f1b, 0x0f1b, 0x0f1b, 0x0f1b, + // Entry 140 - 17F + 0x0f2c, 0x0f36, 0x0f36, 0x0f46, 0x0f46, 0x0f5a, 0x0f68, 0x0f74, + 0x0f91, 0x0f91, 0x0f99, 0x0fa3, 0x0fa3, 0x0faf, 0x0fbd, 0x0fbd, + 0x0fbd, 0x0fc9, 0x0fc9, 0x0fc9, 0x0fde, 0x0ff1, 0x0ff1, 0x1006, + 0x1014, 0x101e, 0x1026, 0x1030, 0x1038, 0x104c, 0x104c, 0x1056, + 0x1056, 0x1056, 0x1056, 0x105e, 0x105e, 0x1068, 0x107a, 0x107a, + 0x107a, 0x107a, 0x107a, 0x107a, 0x108c, 0x108c, 0x109a, 0x10aa, + 0x10b6, 0x10cf, 0x10cf, 0x10cf, 0x10e1, 0x10ed, 0x10ed, 0x10ed, + 0x10ed, 0x10f7, 0x1105, 0x1111, 0x1111, 0x111f, 0x1129, 0x1139, + // Entry 180 - 1BF + 0x1139, 0x1139, 0x1139, 0x1139, 0x1139, 0x1145, 0x114d, 0x114d, + 0x114d, 0x1166, 0x1176, 0x1180, 0x1188, 0x1194, 0x1194, 0x1194, + 0x1194, 0x11a4, 0x11a4, 0x11ae, 0x11bc, 0x11ca, 0x11dc, 0x11e6, + 0x11e6, 0x11f0, 0x11fc, 0x1208, 0x1208, 0x1208, 0x121d, 0x121d, + 0x121d, 0x1229, 0x1241, 0x124f, 0x1261, 0x126b, 0x1273, 0x1273, + 0x1273, 0x1288, 0x1292, 0x12a4, 0x12b2, 0x12b2, 0x12b2, 0x12c2, + 0x12c2, 0x12c2, 0x12d6, 0x12d6, 0x12ef, 0x12fd, 0x1307, 0x1315, + 0x1315, 0x1315, 0x1315, 0x131f, 0x1332, 0x1332, 0x133f, 0x1352, + // Entry 1C0 - 1FF + 0x1352, 0x136f, 0x1383, 0x1393, 0x139f, 0x13ad, 0x13b9, 0x13d4, + 0x13ea, 0x13f8, 0x140a, 0x1422, 0x1434, 0x1434, 0x1434, 0x1434, + 0x1434, 0x1447, 0x1447, 0x1459, 0x1459, 0x1459, 0x146b, 0x146b, + 0x1488, 0x1488, 0x1488, 0x149c, 0x14aa, 0x14c0, 0x14c0, 0x14c0, + 0x14c0, 0x14cc, 0x14cc, 0x14cc, 0x14cc, 0x14dc, 0x14dc, 0x14ec, + 0x14f6, 0x1517, 0x1517, 0x1521, 0x152f, 0x152f, 0x152f, 0x152f, + 0x1541, 0x154b, 0x154b, 0x154b, 0x154b, 0x154b, 0x154b, 0x1559, + 0x1559, 0x156c, 0x156c, 0x156c, 0x1572, 0x1572, 0x157e, 0x157e, + // Entry 200 - 23F + 0x157e, 0x1593, 0x15a6, 0x15bb, 0x15ce, 0x15de, 0x15ee, 0x1609, + 0x1615, 0x1615, 0x1615, 0x1621, 0x162b, 0x163b, 0x163b, 0x163b, + 0x164b, 0x164b, 0x164b, 0x1657, 0x1657, 0x1667, 0x1671, 0x167f, + 0x1687, 0x1697, 0x1697, 0x16a7, 0x16b7, 0x16b7, 0x16c5, 0x16dc, + 0x16ed, 0x16ed, 0x16ed, 0x16ed, 0x16ff, 0x16ff, 0x170d, 0x171b, + 0x171b, 0x172d, 0x172d, 0x173b, 0x174b, 0x175d, 0x1765, 0x176b, + 0x176b, 0x176b, 0x176b, 0x176b, 0x1775, 0x1775, 0x1775, 0x1775, + 0x1781, 0x178b, 0x1793, 0x1793, 0x1793, 0x179f, 0x179f, 0x179f, + // Entry 240 - 27F + 0x17a5, 0x17b1, 0x17b1, 0x17b1, 0x17b1, 0x17b1, 0x17c1, 0x17c1, + 0x17c1, 0x17cd, 0x17cd, 0x17d7, 0x180d, 0x1815, 0x1815, 0x1815, + 0x1832, 0x184f, 0x1876, 0x189f, 0x18c4, 0x18e8, 0x190e, 0x192b, + 0x192b, 0x192b, 0x1948, 0x195f, 0x195f, 0x196d, 0x198e, 0x19b1, + 0x19c5, 0x19e2, 0x19e2, 0x19f7, 0x1a0e, + }, + }, + { // ksb + "KiakanKiamhaliKialabuKibelaausiKibulgaliaKibanglaKicheckiKijeumaniKigiik" + + "iKiingeezaKihispaniaKiajemiKifalansaKihausaKihindiKihungaiKiindonesi" + + "aKiigboKiitalianoKijapaniKijavaKikambodiaKikoleaKimalesiaKibulmaKine" + + "paliKiholanziKipunjabiKipolandiKilenoKiomaniaKilusiKinyalwandaKisoma" + + "liKiswidiKitamilKitailandiKituukiKiuklaniaKiulduKivietinamuKiyolubaK" + + "ichinaKizuluKishambaa", + []uint16{ // 375 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0049, 0x0052, 0x0052, 0x005c, + 0x005c, 0x005c, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x0073, + 0x0073, 0x007a, 0x007a, 0x007a, 0x007a, 0x0082, 0x0082, 0x0082, + // Entry 40 - 7F + 0x0082, 0x008d, 0x008d, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, + 0x009d, 0x009d, 0x00a5, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, + 0x00ab, 0x00ab, 0x00b5, 0x00b5, 0x00bc, 0x00bc, 0x00bc, 0x00bc, + 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, + 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, + 0x00bc, 0x00bc, 0x00bc, 0x00c5, 0x00c5, 0x00cc, 0x00cc, 0x00cc, + 0x00d4, 0x00d4, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00e6, 0x00e6, 0x00ef, + // Entry 80 - BF + 0x00ef, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00fd, 0x0103, 0x010e, + 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, + 0x010e, 0x010e, 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, + 0x011d, 0x011d, 0x0124, 0x0124, 0x0124, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x013e, + 0x0144, 0x0144, 0x0144, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, + 0x014f, 0x0157, 0x0157, 0x015e, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + // Entry C0 - FF + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + // Entry 100 - 13F + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + // Entry 140 - 17F + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x016d, + }, + }, + { // ksf + "riakanriamarikriarabribɛlɔrísribulgaríribɛngáliricɛ́kridjɛrmanrigrɛ́krii" + + "ngɛrísrikpanyáripɛrsánripɛrɛsǝ́rikaksariíndíriɔngrɔáriindonɛsíriigbo" + + "riitalyɛ́nrijapɔ́ŋrijawanɛ́rikmɛrrikɔrɛɛ́rimalaíribirmánrinepalɛ́riɔ" + + "lándɛ́ripɛnjabíripɔlɔ́nripɔrtugɛ́rirɔmánrirísrirwandarisomalíriswɛ́d" + + "ǝritamúlritaíriturkriukrɛ́nriurdúriwyɛtnámriyúubaricinɔárizúlurikpa", + []uint16{ // 376 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0020, 0x002a, + 0x002a, 0x002a, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0050, 0x005b, 0x005b, 0x0064, + 0x0064, 0x0064, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x0082, + 0x0082, 0x008a, 0x008a, 0x008a, 0x008a, 0x0095, 0x0095, 0x0095, + // Entry 40 - 7F + 0x0095, 0x00a1, 0x00a1, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, + 0x00b3, 0x00b3, 0x00be, 0x00c9, 0x00c9, 0x00c9, 0x00c9, 0x00c9, + 0x00c9, 0x00c9, 0x00d0, 0x00d0, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00e4, 0x00e4, 0x00ed, 0x00ed, 0x00ed, + 0x00f8, 0x00f8, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0110, 0x0110, 0x011b, + // Entry 80 - BF + 0x011b, 0x0128, 0x0128, 0x0128, 0x0128, 0x0131, 0x0137, 0x013f, + 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x013f, 0x013f, 0x0148, 0x0148, 0x0148, 0x0148, 0x0148, 0x0148, + 0x0153, 0x0153, 0x015b, 0x015b, 0x015b, 0x0161, 0x0161, 0x0161, + 0x0161, 0x0161, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0171, + 0x0178, 0x0178, 0x0178, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, + 0x0183, 0x018b, 0x018b, 0x0194, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + // Entry C0 - FF + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + // Entry 100 - 13F + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + // Entry 140 - 17F + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x01a0, + }, + }, + { // ksh + "AfahreschAbchahseschAvästahneschAfrikaansAkahneschAmhahreschArrajonehses" + + "chArahbeschAßamehseschAvahreschAimahreschAsserbaidschahneschBaschkih" + + "reschWiißrußeschBulljahreschBislahmeschBambaraBängjahleschTibehtesch" + + "BettohneschBoßneschKattalahneschTschätschehneschChamorruKorseschTsch" + + "äscheschKerscheßlahweschTschowascheschWallihseschDähneschDeutschDiv" + + "ehjeschButahneschEweJrihscheschÄngleschEsperantoSchpahneschÄßneschBa" + + "skeschPärseschFulfuldeFinneschFihdscheschFärröhreschFranzühseschWäßf" + + "rihseschIhreschJallihzeschJuwarahneschGutscharateschMangxHaußaHebräh" + + "jeschHinndiKrowateschHa’iihteschUnnjarreschArmehneschHerrehrode Inte" + + "rlinguaIndonehseschIgboIhdoIßlänndeschEtalljähneschInuktitutJapahnes" + + "chJavahneschJe’orjeschRekohjoOschivamboKassakkeschJröhnländeschKhmer" + + "KannadaKorrejaaneschKanuhreschKaschmihreschKurrdeschKohmeschKornesch" + + "KirjihseschLateijneschLuxemborjeschLuganndaLemburjeschLingjallaLahoo" + + "teschLittoueschKilubaLätteschMadajaßkeschMaschallehseschMa’ohreschMa" + + "zedohneschMallajalamMongjohleschMarrahteschMallaijeschMaltehseschBur" + + "mehseschNauruheschNood-NdebeleNepallehseschNdongjahneschHolländeschN" + + "eu NorrwehjeschNorrwehjesch BokmålNavvachoSchi-SchewaOriijaOßeetesch" + + "PanschaabeschPollneschPaschtuuneschPochtojeseschKättschowaRätoromaan" + + "eschK-RundeschRumäneschRußßeschKinja-RuandeschSanskritSinndiNood-Lap" + + "pländeschSangjoSingjaleeseschẞlovakeschẞloveeneschSammohaneschSchi-S" + + "chonaSomahleschAlbahneschSärbeschSi-SwateschSöd-SootoSindanehseschSc" + + "hwehdeschSuahehleschTamihleschTelluhjuTadschihkeschTailändeschTijren" + + "ejahneschTörkmehneschSe-ZwahneschTongjahneschTörkeschXi-Zongjahnesch" + + "TattahreschTahihteschUj’juhreschUkraineschUrdu/HindiUßbehkeschWendaV" + + "ijätnammehseschVolapükWalohneschWoloffIsi-KhohsaJiddeschJoruhbaSchin" + + "ehsesch (Mandarin)SuhluAschenehseschAdangmeschAdygehjschTonehsesch A" + + "rahbeschAfrehihleschAghehmeschAijnuAkahdeschAle’uhteschAhl ÄngleschA" + + "njikahneschArrappahoAljehresch ArahbeschMarokahnesch ArahbeschÄjipte" + + "sch ArahbeschPareAmärrekahnesche BlendeschprohchAstuhrejahneschAwahd" + + "eschBeluhtscheschBalinehseschBaireschBasaa-SchprohcheBembaBenaBhohds" + + "chpureschEdoBischnuprejahneschBrahjeschBrahuijeschBoddoBurejahteschB" + + "ujinehseschBilihneschZebuwahneschKihja-SchprohchTrukehseschMahreschT" + + "schoktohTschärrokehTschäjännZäntrahl-KurrdeschKopteschKaschuhbeschDa" + + "kohteschDarjihneschDawedahneschDohjribeschDjermaNiddersorbeschDu’ala" + + "MeddelnehderlängschJola-FonyischDassajahneschKîembuÄffikschEmilijahn" + + "eschAhl ÄjipteschEkajukeschMeddelängleschZäntrahl-JuppikEwonndoFilli" + + "pihneschFohneschFrijauhleschJahJi’is-Ahl-ÄttejohpeschJillbättehsesch" + + "JorontalohschSchwitzerdütschHauajahneschHiligaynonHmongBovversorrbes" + + "chHupaIbahneschIbibioIlokahneschEngjuscheschIngjrijahneschJamaikahne" + + "sch-ÄngleschLodschbahnNjombaJühdesch-PärseschJütteschKabyhleschKamba" + + " vun KehnijaKabadihneschChimakondeKapvärdeschKoro vun de Älfebeijnkö" + + "ßKhasiKojra TschihniKakoKaländjihneschKimbunduKon’kahneschKpäleKara" + + "tschaj-Balkahresch-TörkeschKarehleschKorocheschBafijahneschKölschKum" + + "ykeschLadihneschLangode Landa-SchproocheLesjeschLakotaSilohziNood-Lu" + + "hreschTschilubaSchilunndaLuoLuhjeschMokschahMeitei-ManipuhreschMunda" + + "ng-ongerscheidlijje Schprohche-KrihkMirandehseschÄrsjahneschNapollet" + + "ahneschNewahreschGyeleNjijembohnNojalNood-SohtoK’ische’KiromboArroma" + + "hneschJackuteschNjambaijKojraboro SenniTaschelhitteschLule-Läpplände" + + "schInahri LappländeschKommohreschSührejakkeschTetumschTigreKlingjohn" + + "eschTok PisinTasawaqTuvinijahneschTamasicht ussem meddlere AtlasUdmu" + + "chteschUmbundesch-onbikannte-Schprooch-WalserdütschWelahmoWaray-Wara" + + "yKalmükkeschJämmbahKanton-SchinehseschSuhñikein SchproochSahsajeschS" + + "chtandatt ArahbeschSödasserbaidschahneschDeutsch uß ÖhßterichDeutsch" + + " uß de SchweijzÄnglesch uß AußtrahlijeÄnglesch uß KanadaÄnglesch uß " + + "JruhßbrettannijeAmärrekahnesch ÄngleschSchpahnesch uß Latting-Ammärr" + + "ikaSchpahnesch en SchpahnejeSchpahnesch en MäxikohFranzühsesch uß Ka" + + "nadaFranzühsesch uß de SchweijzNehdersaksesch en de NederlängFlähmes" + + "chBrasilljaanesch PochtojeseschPochtojesesch uß PochtojallSärbokowat" + + "eschSchinehsesch (eijfache Schreff)Schinehsesch (tradizjonälle Schre" + + "ff)", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0014, 0x0021, 0x002a, 0x0033, 0x003d, 0x004b, + 0x0054, 0x0060, 0x0069, 0x0073, 0x0086, 0x0093, 0x00a0, 0x00ac, + 0x00b7, 0x00be, 0x00cb, 0x00d5, 0x00e0, 0x00e9, 0x00f6, 0x0107, + 0x010f, 0x0117, 0x0117, 0x0124, 0x0135, 0x0143, 0x014e, 0x0157, + 0x015e, 0x0168, 0x0172, 0x0175, 0x0180, 0x0189, 0x0192, 0x019d, + 0x01a6, 0x01ae, 0x01b7, 0x01bf, 0x01c7, 0x01d2, 0x01df, 0x01ec, + 0x01fa, 0x0201, 0x0201, 0x020c, 0x0218, 0x0226, 0x022b, 0x0231, + 0x023d, 0x0243, 0x0243, 0x024d, 0x025a, 0x0265, 0x026f, 0x0277, + // Entry 40 - 7F + 0x0285, 0x0291, 0x0291, 0x0295, 0x0295, 0x0295, 0x0299, 0x02a6, + 0x02b4, 0x02bd, 0x02c7, 0x02d1, 0x02dd, 0x02dd, 0x02e4, 0x02ee, + 0x02f9, 0x0308, 0x030d, 0x0314, 0x0321, 0x032b, 0x0338, 0x0341, + 0x0349, 0x0351, 0x035c, 0x0367, 0x0374, 0x037c, 0x0387, 0x0390, + 0x039a, 0x03a4, 0x03aa, 0x03b3, 0x03c0, 0x03cf, 0x03db, 0x03e7, + 0x03f1, 0x03fd, 0x0408, 0x0413, 0x041e, 0x0429, 0x0433, 0x043f, + 0x044c, 0x0459, 0x0465, 0x0475, 0x0489, 0x0489, 0x0491, 0x049c, + 0x049c, 0x049c, 0x049c, 0x04a2, 0x04ac, 0x04b9, 0x04b9, 0x04c2, + // Entry 80 - BF + 0x04cf, 0x04dc, 0x04e7, 0x04f6, 0x0500, 0x050a, 0x0514, 0x0523, + 0x052b, 0x052b, 0x0531, 0x0543, 0x0549, 0x0557, 0x0563, 0x0570, + 0x057c, 0x0587, 0x0591, 0x059b, 0x05a4, 0x05af, 0x05b9, 0x05c6, + 0x05d1, 0x05dc, 0x05e6, 0x05ee, 0x05fb, 0x0607, 0x0616, 0x0623, + 0x062f, 0x063b, 0x0644, 0x0653, 0x065e, 0x0668, 0x0675, 0x067f, + 0x0689, 0x0694, 0x0699, 0x06aa, 0x06b2, 0x06bc, 0x06c2, 0x06cc, + 0x06d4, 0x06db, 0x06db, 0x06f2, 0x06f7, 0x0704, 0x0704, 0x070e, + 0x0718, 0x072c, 0x0738, 0x0742, 0x0747, 0x0750, 0x0750, 0x075d, + // Entry C0 - FF + 0x075d, 0x075d, 0x076a, 0x0776, 0x0776, 0x0776, 0x0776, 0x077f, + 0x0793, 0x0793, 0x0793, 0x07a9, 0x07bd, 0x07c1, 0x07e1, 0x07f0, + 0x07f0, 0x07f9, 0x0806, 0x0812, 0x081a, 0x082a, 0x082a, 0x082a, + 0x082a, 0x082a, 0x082f, 0x082f, 0x0833, 0x0833, 0x0833, 0x0833, + 0x0842, 0x0842, 0x0845, 0x0845, 0x0845, 0x0845, 0x0857, 0x0857, + 0x0860, 0x086b, 0x0870, 0x0870, 0x087c, 0x0888, 0x0888, 0x0892, + 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x089e, 0x08ad, 0x08ad, + 0x08ad, 0x08b8, 0x08c0, 0x08c0, 0x08c9, 0x08c9, 0x08d5, 0x08e0, + // Entry 100 - 13F + 0x08f3, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x0907, 0x0911, 0x091c, + 0x0928, 0x0928, 0x0928, 0x0933, 0x0933, 0x0939, 0x0939, 0x0947, + 0x0947, 0x094f, 0x0963, 0x0970, 0x0970, 0x097d, 0x0984, 0x098d, + 0x099a, 0x09a8, 0x09b2, 0x09b2, 0x09c1, 0x09d1, 0x09d8, 0x09d8, + 0x09d8, 0x09e5, 0x09e5, 0x09ed, 0x09ed, 0x09ed, 0x09ed, 0x09ed, + 0x09ed, 0x09ed, 0x09f9, 0x09fc, 0x09fc, 0x09fc, 0x09fc, 0x09fc, + 0x09fc, 0x0a15, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, + 0x0a32, 0x0a32, 0x0a32, 0x0a32, 0x0a42, 0x0a42, 0x0a42, 0x0a42, + // Entry 140 - 17F + 0x0a42, 0x0a42, 0x0a42, 0x0a4e, 0x0a4e, 0x0a58, 0x0a58, 0x0a5d, + 0x0a6c, 0x0a6c, 0x0a70, 0x0a79, 0x0a7f, 0x0a8a, 0x0a96, 0x0aa4, + 0x0abb, 0x0ac5, 0x0acb, 0x0acb, 0x0ade, 0x0ade, 0x0ae7, 0x0ae7, + 0x0af1, 0x0af1, 0x0af1, 0x0b02, 0x0b02, 0x0b0e, 0x0b0e, 0x0b0e, + 0x0b18, 0x0b24, 0x0b24, 0x0b3f, 0x0b3f, 0x0b44, 0x0b44, 0x0b52, + 0x0b52, 0x0b52, 0x0b56, 0x0b65, 0x0b6d, 0x0b6d, 0x0b7b, 0x0b7b, + 0x0b81, 0x0ba1, 0x0ba1, 0x0ba1, 0x0bab, 0x0bb5, 0x0bb5, 0x0bc1, + 0x0bc8, 0x0bd1, 0x0bd1, 0x0bdb, 0x0be0, 0x0bf3, 0x0bf3, 0x0bfb, + // Entry 180 - 1BF + 0x0bfb, 0x0bfb, 0x0bfb, 0x0c01, 0x0c01, 0x0c01, 0x0c08, 0x0c15, + 0x0c15, 0x0c1e, 0x0c1e, 0x0c28, 0x0c2b, 0x0c2b, 0x0c33, 0x0c33, + 0x0c33, 0x0c33, 0x0c33, 0x0c33, 0x0c33, 0x0c33, 0x0c33, 0x0c33, + 0x0c33, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, + 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c4e, 0x0c4e, 0x0c4e, 0x0c4e, + 0x0c55, 0x0c72, 0x0c77, 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0c90, + 0x0c90, 0x0c90, 0x0c9f, 0x0c9f, 0x0c9f, 0x0ca9, 0x0ca9, 0x0ca9, + 0x0ca9, 0x0cae, 0x0cb8, 0x0cbd, 0x0cbd, 0x0cbd, 0x0cbd, 0x0cc7, + // Entry 1C0 - 1FF + 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, + 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, + 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, + 0x0cc7, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, + 0x0cda, 0x0cda, 0x0cda, 0x0cda, 0x0cda, 0x0ce6, 0x0ce6, 0x0ce6, + 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf8, 0x0cf8, + 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, + 0x0d07, 0x0d07, 0x0d07, 0x0d16, 0x0d16, 0x0d16, 0x0d16, 0x0d16, + // Entry 200 - 23F + 0x0d16, 0x0d16, 0x0d29, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, + 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d48, 0x0d48, + 0x0d56, 0x0d56, 0x0d56, 0x0d56, 0x0d56, 0x0d56, 0x0d5e, 0x0d63, + 0x0d63, 0x0d63, 0x0d63, 0x0d70, 0x0d70, 0x0d70, 0x0d70, 0x0d70, + 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, + 0x0d80, 0x0d8e, 0x0dac, 0x0db7, 0x0db7, 0x0dc1, 0x0dd7, 0x0dd7, + 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0de4, + 0x0deb, 0x0df6, 0x0df6, 0x0df6, 0x0df6, 0x0e02, 0x0e02, 0x0e02, + // Entry 240 - 27F + 0x0e02, 0x0e02, 0x0e02, 0x0e0a, 0x0e0a, 0x0e1d, 0x0e1d, 0x0e1d, + 0x0e1d, 0x0e1d, 0x0e1d, 0x0e23, 0x0e31, 0x0e3b, 0x0e4f, 0x0e66, + 0x0e7d, 0x0e94, 0x0eae, 0x0ec2, 0x0ee1, 0x0efa, 0x0f1c, 0x0f35, + 0x0f4c, 0x0f4c, 0x0f64, 0x0f81, 0x0fa0, 0x0faa, 0x0fc7, 0x0fe3, + 0x0fe3, 0x0ff2, 0x0ff2, 0x1011, 0x1036, + }, + }, + { // kw + "kernewek", + []uint16{ // 90 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0008, + }, + }, + { // ky + kyLangStr, + kyLangIdx, + }, + { // lag + "KɨakáaniKɨmʉháariKɨaráabuKɨberalúusiKɨbulugáriaKɨbangálaKɨchéekiKɨjerʉmá" + + "aniKɨgiríkiKɨɨngeréesaKɨhispániaKɨajéemiKɨfaráansaKɨhaúusaKɨhíindiKɨ" + + "hungáriKɨɨndonésiaKiígiboKɨtaliáanoKɨjapáaniKɨjáavaKɨkambódiaKɨkoréa" + + "KɨmelésiaKɨbáamaKɨnepáaliKɨholáanziKɨpúnjabiKɨpólandiKɨréenoKɨromaní" + + "aKɨrúusiKɨnyarwáandaKɨsómáaliKɨswíidiKɨtamíiliKɨtáilandiKɨturúukiKɨu" + + "kɨraníaKɨúrduKɨvietináamuKɨyorúubaKɨchíinaKɨzúuluKɨlaangi", + []uint16{ // 381 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0016, 0x0016, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x002d, 0x003a, + 0x003a, 0x003a, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x005d, 0x005d, 0x005d, 0x005d, 0x0067, 0x0075, 0x0075, 0x0081, + 0x0081, 0x0081, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x0097, + 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x00a1, + 0x00a1, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00b6, 0x00b6, 0x00b6, + // Entry 40 - 7F + 0x00b6, 0x00c4, 0x00c4, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00d8, 0x00d8, 0x00e3, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00f8, 0x00f8, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x010c, 0x010c, 0x0115, 0x0115, 0x0115, + 0x0120, 0x0120, 0x012c, 0x012c, 0x012c, 0x012c, 0x012c, 0x012c, + 0x012c, 0x012c, 0x012c, 0x012c, 0x012c, 0x0137, 0x0137, 0x0142, + // Entry 80 - BF + 0x0142, 0x014b, 0x014b, 0x014b, 0x014b, 0x0156, 0x015f, 0x016d, + 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, + 0x016d, 0x016d, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, + 0x0183, 0x0183, 0x018e, 0x018e, 0x018e, 0x019a, 0x019a, 0x019a, + 0x019a, 0x019a, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01b2, + 0x01ba, 0x01ba, 0x01ba, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, + 0x01c8, 0x01d3, 0x01d3, 0x01dd, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + // Entry C0 - FF + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + // Entry 100 - 13F + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + // Entry 140 - 17F + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01ef, + }, + }, + { // lb + "AfarAbchaseschAvesteschAfrikaansAkanAmhareschAragoneseschArabeschAssames" + + "eschAwareschAymaraAserbaidschaneschBaschkireschWäissrusseschBulgares" + + "chBislamaBambara-SproochBengaleschTibeteschBretoneschBosneschKatalan" + + "eschTschetscheneschChamorro-SproochKorseschCreeTschecheschKierchesla" + + "weschTschuwascheschWaliseschDäneschDäitschMaldiveschBhutaneschEwe-Sp" + + "roochGriicheschEngleschEsperantoSpueneschEstneschBaskeschPerseschFul" + + "FinneschFidschianeschFäröeschFranséischWestfrieseschIreschSchottesch" + + "t GälleschGalizeschGuaraniGujaratiManxHausaHebräeschHindiHiri-MotuKr" + + "oateschHaitianeschUngareschArmeneschHerero-SproochInterlinguaIndones" + + "eschInterlingueIgbo-SproochSichuan YiInupiakIdo-SproochIslänneschIta" + + "lieneschInukitutJapaneschJavaneschGeorgeschKongoleseschKikuyu-Sprooc" + + "hKwanyamaKasacheschGrönlänneschKambodschaneschKannadaKoreaneschKanur" + + "i-SproochKaschmireschKurdeschKomi-SproochKorneschKirgiseschLatäinLët" + + "zebuergeschGanda-SproochLimburgeschLingalaLaoteschLitaueschLuba-Kata" + + "ngaLetteschMalagassi-SproochMarschalleseschMaoriMazedoneschMalayalam" + + "MongoleschMarathiMalaieschMalteseschBirmaneschNaurueschNord-Ndebele-" + + "SproochNepaleseschNdongaHollänneschNorwegesch NynorskNorwegesch Bokm" + + "ålSüd-Ndebele-SproochNavajoNyanja-SproochOkzitaneschOjibwa-SproochO" + + "romoOrijaOsseteschPandschabeschPaliPolneschPaschtuPortugiseschQuechu" + + "aRätoromaneschRundi-SproochRumäneschRusseschRuandeschSanskritSardesc" + + "hSindhiNordsameschSangoSinghaleseschSlowakeschSloweneschSamoaneschSh" + + "onaSomaliAlbaneschSerbeschSwaziSüd-Sotho-SproochSundaneseschSchwedes" + + "chSuaheliTamileschTeluguTadschikeschThailänneschTigrinjaTurkmeneschT" + + "swana-SproochTongaeschTierkeschTsongaTatareschTahiteschUigureschUkra" + + "ineschUrduUsbekeschVenda-SproochVietnameseschVolapükWallouneschWolof" + + "XhosaJiddeschYorubaZhuangChineseschZuluAceh-SproochAcholi-SproochAda" + + "ngmeAdygéieschTunesescht ArabeschAfrihiliAghemAinu-SproochAkkadeschA" + + "labamaAleuteschGegeschSüd-AlaeschAlengleschAngikaAramäeschMapudungun" + + "AraonaArapaho-SproochAlgerescht ArabeschArawak-SproochMarokkanescht " + + "ArabeschEgyptescht ArabeschAsu (Tanzania)Amerikanesch ZeechesproochA" + + "sturianeschKotavaAwadhiBelutscheschBalineseschBaireschBasaa-SproochB" + + "amunBatak TobaGhomálá’BedauyeBemba-SproochBetawiBenaBafutBadagaBhods" + + "chpuriBikol-SproochBini-SproochBanjareseschKomBlackfoot-SproochBishn" + + "upriyaBachtiareschBraj-BhakhaBrahuiBodoAkooseBurjateschBugineseschBu" + + "luBlinMedumbaCaddoKaribeschCayugaAtsamCebuanoKigaChibcha-SproochTsch" + + "agataeschTrukeseschMariChinookChoctawChipewyanCherokeeCheyenneSorani" + + "KopteschCapiznonKrimtatareschKaschubeschDakota-SproochDargineschTait" + + "aDelaware-SproochSlaveDogribDinka-SproochZarmaDogriNiddersorbeschZen" + + "tral-DusunDualaMëttelhollänneschJola-FonyiDyula-SproochDazagaKiembuE" + + "fikEmilianeschEgypteschEkajukElameschMëttelengleschYup’ikEwondoExtre" + + "madureschPangwe-SproochFilipinoMeänkieliFon-SproochCajunMëttelfransé" + + "ischAlfranséischFrankoprovenzaleschNordfrieseschOstfrieseschFriulesc" + + "hGa-SproochGagauseschGan-ChineseschGayoGbaya-SproochZoroastrianescht" + + " DariGeezGilberteseschGilakiMëttelhéichdäitschAlhéichdäitschGoan-Kon" + + "kaniGondi-SproochMongondouGoteschGrebo-SproochAlgriicheschSchwäizerd" + + "äitschWayuuFarefareGusii-SproochKutchin-SproochHaida-SproochHakka-C" + + "hineseschHawaieschFidschi-HindiHiligaynon-SproochHethiteschMiao-Spro" + + "ochUewersorbeschXiang-ChineseschHupaIbanIbibioIlokano-SproochIngusch" + + "eschIschoreschJamaikanesch-KreoleschLojbanNgombaMachameJiddesch-Pers" + + "eschJiddesch-ArabeschJüteschKarakalpakeschKabyleschKachin-SproochJju" + + "KambaKawiKabardineschKanembuTyapMakondeKabuverdianuKenyangKoroKainga" + + "ngKhasi-SproochSakeschKoyra ChiiniKhowarKirmanjkiKakoKalenjinKimbund" + + "u-SproochKomi-PermiakKonkaniKosraeaneschKpelle-SproochKaratschaiesch" + + "-BalkareschKrioKinaray-aKareleschOraon-SproochShambalaBafiaKölschKum" + + "ükeschKutenai-SproochLadinoLangiLahndaLamba-SproochLesgeschLingua F" + + "ranca NovaLigureschLiveschLakota-SproochLombardeschMongoRotse-Sprooc" + + "hLettgalleschLuba-LuluaLuiseno-SproochLunda-SproochLuo-SproochLushai" + + "-SproochOlulujiaKlassescht ChineseschLasesch SproochMadureseschMafaK" + + "hottaMaithiliMakassareschManding-SproochMassai-SproochMabaMokshaMand" + + "areseschMende-SproochMeru-SproochMorisyenMëttelireschMakhuwa-MeettoM" + + "eta’Micmac-SproochMinangkabau-SproochMandschureschMeithei-SproochMoh" + + "awk-SproochMossi-SproochWest-MariMundangMéisproochegMuskogee-Sprooch" + + "MirandeseschMarwariMentawaiMyeneErsja-MordwineschMazandaraniMin-Nan-" + + "ChineseschNeapolitaneschNamaNidderdäitschNewariNias-SproochNiue-Spro" + + "ochAo NagaKwasioNgiemboonNogaiAlnordeschNovialN’KoNord-Sotho-Sprooch" + + "NuerAl-NewariNyamwezi-SproochNyankoleNyoroNzimaOsage-SproochOsmanesc" + + "hPangasinan-SproochMëttelperseschPampanggan-SproochPapiamentoPalauPi" + + "cardeschPennsylvaniadäitschPlattdäitschAlperseschPfälzesch DäitschPh" + + "önikeschPiemonteseschPonteschPonapeaneschPreiseschAlprovenzaleschQu" + + "iché-SproochKichwa (Chimborazo-Gebidder)RajasthaniOuschterinsel-Spro" + + "ochRarotonganeschRomagnolTarifitRomboRomaniRotumaneschRussineschRovi" + + "anaAromuneschRwaSandawe-SproochJakuteschSamaritaneschSamburuSasakSan" + + "taliSaurashtraNgambaySanguSizilianeschSchotteschSassareseschSenecaSe" + + "naSeriSelkupeschKoyra SenniAlireschSamogiteschTaschelhitSchan-Sprooc" + + "hTschadesch-ArabeschSidamoNidderschleseschSelayarSüdsameschLule-Lapp" + + "eschInari-LappeschSkolt-LappeschSoninke-SproochSogdeschSrananeschSer" + + "er-SproochSahoSaterfrieseschSukuma-SproochSusuSumereschKomoreschAlsy" + + "reschSyreschSchleseschTuluTemneTesoTereno-SproochTetum-SproochTigreT" + + "iv-SproochTokelauaneschTsachureschKlingoneschTlingit-SproochTaleschT" + + "amaseqTsonga-SproochNeimelaneseschTuroyoSeediqTsakoneschTsimshian-Sp" + + "roochTateschTumbuka-SproochElliceaneschTasawaqTuwineschMëttlert-Atla" + + "s-TamazightUdmurteschUgariteschMbundu-SproochRootVai-SproochVenezesc" + + "hWepseschWestflämeschMainfränkeschWoteschVoroVunjoWalliserdäitschWal" + + "amo-SproochWarayWasho-SproochWu-ChineseschKalmückeschMingrelesch Spr" + + "oochSogaYao-SproochYapeseschYangbenYembaNheengatuKantoneseschZapotek" + + "eschBliss-SymbolerSeelänneschZenagaMarokkanescht Standard-TamazightZ" + + "uni-SproochKeng SproochinhalterZazaModernt HéicharabeschÉisträichesc" + + "ht DäitschSchwäizer HéichdäitschAustralescht EngleschKanadescht Engl" + + "eschBritescht EngleschAmerikanescht EngleschLatäinamerikanescht Spue" + + "neschEuropäescht SpueneschMexikanescht SpueneschKanadescht Franséisc" + + "hSchwäizer FranséischFlämeschBrasilianescht PortugiseschEuropäescht " + + "PortugiseschMoldaweschSerbo-KroateschKongo-SwahiliChinesesch (verein" + + "facht)Chinesesch (traditionell)", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002d, 0x0039, + 0x0041, 0x004c, 0x0054, 0x005a, 0x006b, 0x0077, 0x0085, 0x008f, + 0x0096, 0x00a5, 0x00af, 0x00b8, 0x00c2, 0x00ca, 0x00d5, 0x00e4, + 0x00f4, 0x00fc, 0x0100, 0x010b, 0x011a, 0x0128, 0x0131, 0x0139, + 0x0141, 0x014b, 0x0155, 0x0160, 0x016a, 0x0172, 0x017b, 0x0184, + 0x018c, 0x0194, 0x019c, 0x019f, 0x01a7, 0x01b4, 0x01be, 0x01c9, + 0x01d6, 0x01dc, 0x01f1, 0x01fa, 0x0201, 0x0209, 0x020d, 0x0212, + 0x021c, 0x0221, 0x022a, 0x0233, 0x023e, 0x0247, 0x0250, 0x025e, + // Entry 40 - 7F + 0x0269, 0x0274, 0x027f, 0x028b, 0x0295, 0x029c, 0x02a7, 0x02b2, + 0x02bd, 0x02c5, 0x02ce, 0x02d7, 0x02e0, 0x02ec, 0x02fa, 0x0302, + 0x030c, 0x031a, 0x0329, 0x0330, 0x033a, 0x0348, 0x0354, 0x035c, + 0x0368, 0x0370, 0x037a, 0x0381, 0x0390, 0x039d, 0x03a8, 0x03af, + 0x03b7, 0x03c0, 0x03cc, 0x03d4, 0x03e5, 0x03f4, 0x03f9, 0x0404, + 0x040d, 0x0417, 0x041e, 0x0427, 0x0431, 0x043b, 0x0444, 0x0458, + 0x0463, 0x0469, 0x0475, 0x0487, 0x0499, 0x04ad, 0x04b3, 0x04c1, + 0x04cc, 0x04da, 0x04df, 0x04e4, 0x04ed, 0x04fa, 0x04fe, 0x0506, + // Entry 80 - BF + 0x050d, 0x0519, 0x0520, 0x052e, 0x053b, 0x0545, 0x054d, 0x0556, + 0x055e, 0x0566, 0x056c, 0x0577, 0x057c, 0x0589, 0x0593, 0x059d, + 0x05a7, 0x05ac, 0x05b2, 0x05bb, 0x05c3, 0x05c8, 0x05da, 0x05e6, + 0x05f0, 0x05f7, 0x0600, 0x0606, 0x0612, 0x061f, 0x0627, 0x0632, + 0x0640, 0x0649, 0x0652, 0x0658, 0x0661, 0x066a, 0x0673, 0x067d, + 0x0681, 0x068a, 0x0697, 0x06a4, 0x06ac, 0x06b7, 0x06bc, 0x06c1, + 0x06c9, 0x06cf, 0x06d5, 0x06df, 0x06e3, 0x06ef, 0x06fd, 0x0704, + 0x070f, 0x0722, 0x072a, 0x072f, 0x073b, 0x0744, 0x074b, 0x0754, + // Entry C0 - FF + 0x075b, 0x0767, 0x0771, 0x0777, 0x0781, 0x078b, 0x0791, 0x07a0, + 0x07b3, 0x07b3, 0x07c1, 0x07d7, 0x07ea, 0x07f8, 0x0812, 0x081e, + 0x0824, 0x082a, 0x0836, 0x0841, 0x0849, 0x0856, 0x085b, 0x0865, + 0x0871, 0x0878, 0x0885, 0x088b, 0x088f, 0x0894, 0x089a, 0x089a, + 0x08a5, 0x08b2, 0x08be, 0x08ca, 0x08cd, 0x08de, 0x08e9, 0x08f5, + 0x0900, 0x0906, 0x090a, 0x0910, 0x091a, 0x0925, 0x0929, 0x092d, + 0x0934, 0x0939, 0x0942, 0x0948, 0x094d, 0x0954, 0x0958, 0x0967, + 0x0974, 0x097e, 0x0982, 0x0989, 0x0990, 0x0999, 0x09a1, 0x09a9, + // Entry 100 - 13F + 0x09af, 0x09b7, 0x09bf, 0x09cc, 0x09cc, 0x09d7, 0x09e5, 0x09ef, + 0x09f4, 0x0a04, 0x0a09, 0x0a0f, 0x0a1c, 0x0a21, 0x0a26, 0x0a34, + 0x0a41, 0x0a46, 0x0a59, 0x0a63, 0x0a70, 0x0a76, 0x0a7c, 0x0a80, + 0x0a8b, 0x0a94, 0x0a9a, 0x0aa2, 0x0ab1, 0x0ab9, 0x0abf, 0x0acd, + 0x0adb, 0x0ae3, 0x0aed, 0x0af8, 0x0afd, 0x0b0f, 0x0b1c, 0x0b2f, + 0x0b3c, 0x0b48, 0x0b51, 0x0b5b, 0x0b65, 0x0b73, 0x0b77, 0x0b84, + 0x0b99, 0x0b9d, 0x0baa, 0x0bb0, 0x0bc5, 0x0bd5, 0x0be1, 0x0bee, + 0x0bf7, 0x0bfe, 0x0c0b, 0x0c17, 0x0c29, 0x0c2e, 0x0c36, 0x0c43, + // Entry 140 - 17F + 0x0c52, 0x0c5f, 0x0c6f, 0x0c78, 0x0c85, 0x0c97, 0x0ca1, 0x0cad, + 0x0cba, 0x0cca, 0x0cce, 0x0cd2, 0x0cd8, 0x0ce7, 0x0cf2, 0x0cfc, + 0x0d12, 0x0d18, 0x0d1e, 0x0d25, 0x0d36, 0x0d47, 0x0d4f, 0x0d5d, + 0x0d66, 0x0d74, 0x0d77, 0x0d7c, 0x0d80, 0x0d8c, 0x0d93, 0x0d97, + 0x0d9e, 0x0daa, 0x0db1, 0x0db5, 0x0dbd, 0x0dca, 0x0dd1, 0x0ddd, + 0x0de3, 0x0dec, 0x0df0, 0x0df8, 0x0e08, 0x0e14, 0x0e1b, 0x0e27, + 0x0e35, 0x0e4e, 0x0e52, 0x0e5b, 0x0e64, 0x0e71, 0x0e79, 0x0e7e, + 0x0e85, 0x0e8f, 0x0e9e, 0x0ea4, 0x0ea9, 0x0eaf, 0x0ebc, 0x0ec4, + // Entry 180 - 1BF + 0x0ed6, 0x0edf, 0x0ee6, 0x0ef4, 0x0eff, 0x0f04, 0x0f11, 0x0f11, + 0x0f1d, 0x0f27, 0x0f36, 0x0f43, 0x0f4e, 0x0f5c, 0x0f64, 0x0f79, + 0x0f88, 0x0f93, 0x0f97, 0x0f9d, 0x0fa5, 0x0fb1, 0x0fc0, 0x0fce, + 0x0fd2, 0x0fd8, 0x0fe4, 0x0ff1, 0x0ffd, 0x1005, 0x1012, 0x1020, + 0x1027, 0x1035, 0x1048, 0x1055, 0x1064, 0x1072, 0x107f, 0x1088, + 0x108f, 0x109c, 0x10ac, 0x10b8, 0x10bf, 0x10c7, 0x10cc, 0x10dd, + 0x10e8, 0x10fa, 0x1108, 0x110c, 0x111a, 0x1120, 0x112c, 0x1138, + 0x113f, 0x1145, 0x114e, 0x1153, 0x115d, 0x1163, 0x1169, 0x117b, + // Entry 1C0 - 1FF + 0x117f, 0x1188, 0x1198, 0x11a0, 0x11a5, 0x11aa, 0x11b7, 0x11c0, + 0x11d2, 0x11e1, 0x11f3, 0x11fd, 0x1202, 0x120c, 0x120c, 0x1220, + 0x122d, 0x1237, 0x124a, 0x1255, 0x1262, 0x126a, 0x1276, 0x127f, + 0x128e, 0x129d, 0x12b9, 0x12c3, 0x12d8, 0x12e6, 0x12ee, 0x12f5, + 0x12fa, 0x1300, 0x130b, 0x1315, 0x131c, 0x1326, 0x1329, 0x1338, + 0x1341, 0x134e, 0x1355, 0x135a, 0x1361, 0x136b, 0x1372, 0x1377, + 0x1383, 0x138d, 0x1399, 0x1399, 0x139f, 0x13a3, 0x13a7, 0x13b1, + 0x13bc, 0x13c4, 0x13cf, 0x13d9, 0x13e6, 0x13f9, 0x13ff, 0x140f, + // Entry 200 - 23F + 0x1416, 0x1421, 0x142e, 0x143c, 0x144a, 0x1459, 0x1461, 0x146b, + 0x1478, 0x147c, 0x148a, 0x1498, 0x149c, 0x14a5, 0x14ae, 0x14b7, + 0x14be, 0x14c8, 0x14cc, 0x14d1, 0x14d5, 0x14e3, 0x14f0, 0x14f5, + 0x1500, 0x150d, 0x1518, 0x1523, 0x1532, 0x1539, 0x1540, 0x154e, + 0x155c, 0x1562, 0x1568, 0x1572, 0x1583, 0x158a, 0x1599, 0x15a5, + 0x15ac, 0x15b5, 0x15ce, 0x15d8, 0x15e2, 0x15f0, 0x15f4, 0x15ff, + 0x1608, 0x1610, 0x161d, 0x162b, 0x1632, 0x1636, 0x163b, 0x164b, + 0x1659, 0x165e, 0x166b, 0x166b, 0x1678, 0x1684, 0x1697, 0x169b, + // Entry 240 - 27F + 0x16a6, 0x16af, 0x16b6, 0x16bb, 0x16c4, 0x16d0, 0x16db, 0x16e9, + 0x16f5, 0x16fb, 0x171b, 0x1727, 0x173b, 0x173f, 0x1755, 0x1755, + 0x176e, 0x1787, 0x179c, 0x17af, 0x17c1, 0x17d7, 0x17f5, 0x180b, + 0x1821, 0x1821, 0x1837, 0x184d, 0x184d, 0x1856, 0x1871, 0x188a, + 0x1894, 0x18a3, 0x18b0, 0x18c8, 0x18e1, + }, + }, + { // lg + "Lu-akaaniLu-amharikiLuwarabuLubelarusiLubulugariyaLubengaliLuceekeLudaak" + + "iLugereeki/LuyonaaniLungerezaLusipanyaLuperusiLufalansaLuhawuzaLuhin" + + "duLuhangareLuyindonezyaLuyiboLuyitaleLujapaniLunnajjavaLukmeLukoreya" + + "LugandaLumalayiLubbamaLunepaliLuholandiLupunjabiLupolandiLupotugiizi" + + "LulomaniyaLulasaLunarwandaLusomaliyaLuswideniLutamiiruLuttaayiLutake" + + "LuyukurayineLu-uruduLuvyetinaamuLuyorubaLucayinaLuzzulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0014, 0x0014, + 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x0026, 0x0032, + 0x0032, 0x0032, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0049, 0x0049, 0x0049, 0x0049, 0x005c, 0x0065, 0x0065, 0x006e, + 0x006e, 0x006e, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x007f, + 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x0087, + 0x0087, 0x008e, 0x008e, 0x008e, 0x008e, 0x0097, 0x0097, 0x0097, + // Entry 40 - 7F + 0x0097, 0x00a3, 0x00a3, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, + 0x00b1, 0x00b1, 0x00b9, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c8, 0x00c8, 0x00d0, 0x00d0, 0x00d0, 0x00d0, + 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d7, 0x00d7, 0x00d7, + 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, + 0x00d7, 0x00d7, 0x00d7, 0x00df, 0x00df, 0x00e6, 0x00e6, 0x00e6, + 0x00ee, 0x00ee, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, + 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x0100, 0x0100, 0x0109, + // Entry 80 - BF + 0x0109, 0x0114, 0x0114, 0x0114, 0x0114, 0x011e, 0x0124, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x0138, 0x0138, 0x0138, 0x0138, 0x0138, 0x0138, + 0x0141, 0x0141, 0x014a, 0x014a, 0x014a, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0164, + 0x016c, 0x016c, 0x016c, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, + 0x0178, 0x0180, 0x0180, 0x0188, 0x018f, + }, + }, + { // lkt + "Abkhaz IyápiAvestan IyápiAfrikaans IyápiAmharic IyápiArab IyápiAssamese " + + "IyápiAvaric IyápiAzerbaijani IyápiBashkir IyápiBelarus IyápiBulgar I" + + "yápiBengali IyápiTibetan IyápiBosnia IyápiCatalan IyápiChechen Iyápi" + + "Maštíŋča Oyáte IyápiCzech IyápiChuvash IyápiWales IyápiDane IyápiIyá" + + "šiča IyápiGreece IyápiWašíčuiyapiEsperanto IyápiSpayóla IyápiEstoni" + + "a IyápiBasque IyápiPersian IyápiFinnish IyápiFiji IyápiFaroese Iyápi" + + "Wašíču Ikčéka IyápiIrish IyápiGalician IyápiGuarani IyápiGujarati Iy" + + "ápiHausa IyápiHebrew IyápiHindi IyápiCroatian IyápiHaiti IyápiHunga" + + "ry IyápiArmenia IyápiIndonesia IyápiIgbo IyápiIceland IyápiItalia Iy" + + "ápiKisúŋla IyápiJava IyápiGeoria IyápiKazakh IyápiKhmer IyápiKannad" + + "a IyápiKorea IyápiKashmir IyápiKurd IyápiKirghiz IyápiLatin IyápiLux" + + "embourg IyápiLao IyápiLithuania IyápiltLatvia IyápiMalagasy IyápiMao" + + "ri IyápiMacedonia IyápiMalayalam IyápiMarathi IyápiMalay IyápiMaltes" + + "e IyápiBurmese IyápiNepal IyápiDutch IyápiŠináglegleǧa IyápiȞaȟátȟuŋ" + + "waŋ IyápiOriya IyápiPunjabi IyápiPolish IyápiPashto IyápiPortuguese " + + "IyápiQuechua IyápiRomansh IyápiRomanian IyápiRussia IyápiSanskrit Iy" + + "ápiSindhi IyápiSinhala IyápiSlovak IyápiSlovenian IyápiSomali Iyápi" + + "Albanian IyápiSerbia IyápiSundanese IyápiSwedish IyápiSwahili IyápiT" + + "amil IyápiTelugu IyápiTajik IyápiThai IyápiTigrinya IyápiTurkmen Iyá" + + "piTongan IyápiTurkish IyápiTatar IyápiUyghur IyápiUkrain IyápiUrdu I" + + "yápiUzbek IyápiVietnamese IyápiWolof IyápiXhosa IyápiYoruba IyápiPȟe" + + "čhókaŋ Háŋska IyápiZulu IyápiAdyghe IyápiItóǧata Altai IyápiMaȟpíya" + + " Tȟó IyápiBaluchi IyápiBamun IyápiBeja IyápiBuriat IyápiMari IyápiCh" + + "erokee IyápiŠahíyela IyápiCoptic IyápiCrimean Turkish IyápiDakȟótiya" + + "piDargwa IyápiDogri IyápiFilipino IyápiGbaya IyápiHawaiian IyápiIngu" + + "sh IyápiKara-Kalpak IyápiKabardian IyápiLahnda IyápiLakȟólʼiyapiMizo" + + " IyápiNamipuri IyápiComonian IyápiTukté iyápi tȟaŋíŋ šniZaza IyápiŠa" + + "gláša WašíčuiyapiMílahaŋska WašíčuiyapiWiyóȟpeyata Spayóla IyápiSpay" + + "ólaȟča IyápiFlemish IyápiPȟečhókaŋ Háŋska Iyápi IkčékaPȟečhókaŋ Háŋ" + + "ska Iyápi Ȟče", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000d, 0x001b, 0x002b, 0x002b, 0x0039, 0x0039, + 0x0044, 0x0053, 0x0060, 0x0060, 0x0072, 0x0080, 0x008e, 0x009b, + 0x009b, 0x009b, 0x00a9, 0x00b7, 0x00b7, 0x00c4, 0x00d2, 0x00e0, + 0x00e0, 0x00e0, 0x00fa, 0x0106, 0x0106, 0x0114, 0x0120, 0x012b, + 0x013c, 0x013c, 0x013c, 0x013c, 0x0149, 0x0157, 0x0167, 0x0176, + 0x0184, 0x0191, 0x019f, 0x019f, 0x01ad, 0x01b8, 0x01c6, 0x01df, + 0x01df, 0x01eb, 0x01eb, 0x01fa, 0x0208, 0x0217, 0x0217, 0x0223, + 0x0230, 0x023c, 0x023c, 0x024b, 0x0257, 0x0265, 0x0273, 0x0273, + // Entry 40 - 7F + 0x0273, 0x0283, 0x0283, 0x028e, 0x028e, 0x028e, 0x028e, 0x029c, + 0x02a9, 0x02a9, 0x02b9, 0x02c4, 0x02d1, 0x02d1, 0x02d1, 0x02d1, + 0x02de, 0x02de, 0x02ea, 0x02f8, 0x0304, 0x0304, 0x0312, 0x031d, + 0x031d, 0x031d, 0x032b, 0x0337, 0x0348, 0x0348, 0x0348, 0x0348, + 0x0352, 0x0364, 0x0364, 0x0371, 0x0380, 0x0380, 0x038c, 0x039c, + 0x03ac, 0x03ac, 0x03ba, 0x03c6, 0x03d4, 0x03e2, 0x03e2, 0x03e2, + 0x03ee, 0x03ee, 0x03fa, 0x03fa, 0x03fa, 0x03fa, 0x0410, 0x0410, + 0x0410, 0x0428, 0x0428, 0x0434, 0x0434, 0x0442, 0x0442, 0x044f, + // Entry 80 - BF + 0x045c, 0x046d, 0x047b, 0x0489, 0x0489, 0x0498, 0x04a5, 0x04a5, + 0x04b4, 0x04b4, 0x04c1, 0x04c1, 0x04c1, 0x04cf, 0x04dc, 0x04ec, + 0x04ec, 0x04ec, 0x04f9, 0x0508, 0x0515, 0x0515, 0x0515, 0x0525, + 0x0533, 0x0541, 0x054d, 0x055a, 0x0566, 0x0571, 0x0580, 0x058e, + 0x058e, 0x059b, 0x05a9, 0x05a9, 0x05b5, 0x05b5, 0x05c2, 0x05cf, + 0x05da, 0x05e6, 0x05e6, 0x05f7, 0x05f7, 0x05f7, 0x0603, 0x060f, + 0x060f, 0x061c, 0x061c, 0x0639, 0x0644, 0x0644, 0x0644, 0x0644, + 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, + // Entry C0 - FF + 0x0651, 0x0667, 0x0667, 0x0667, 0x0667, 0x0667, 0x0667, 0x067d, + 0x067d, 0x067d, 0x067d, 0x067d, 0x067d, 0x067d, 0x067d, 0x067d, + 0x067d, 0x067d, 0x068b, 0x068b, 0x068b, 0x068b, 0x0697, 0x0697, + 0x0697, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, + 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, + 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06af, 0x06af, 0x06af, 0x06af, + 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, + 0x06af, 0x06af, 0x06ba, 0x06ba, 0x06ba, 0x06ba, 0x06c9, 0x06da, + // Entry 100 - 13F + 0x06da, 0x06e7, 0x06e7, 0x06fd, 0x06fd, 0x06fd, 0x070a, 0x0717, + 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0723, 0x0723, + 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, + 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, + 0x0723, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, + 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x073e, + 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, + 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, + // Entry 140 - 17F + 0x073e, 0x073e, 0x073e, 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, + 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, 0x075a, 0x075a, + 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x076c, + 0x076c, 0x076c, 0x076c, 0x076c, 0x076c, 0x077c, 0x077c, 0x077c, + 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, + 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, + 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, + 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x0789, 0x0789, 0x0789, + // Entry 180 - 1BF + 0x0789, 0x0789, 0x0789, 0x0798, 0x0798, 0x0798, 0x0798, 0x0798, + 0x0798, 0x0798, 0x0798, 0x0798, 0x0798, 0x07a3, 0x07a3, 0x07a3, + 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, + 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, + 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + // Entry 1C0 - 1FF + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + // Entry 200 - 23F + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07c1, 0x07c1, + 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, + 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, + 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, + 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07de, 0x07de, + 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, + 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, + // Entry 240 - 27F + 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, + 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07e9, 0x07e9, 0x07e9, + 0x07e9, 0x07e9, 0x07e9, 0x07e9, 0x0802, 0x081d, 0x083a, 0x084e, + 0x084e, 0x084e, 0x084e, 0x084e, 0x084e, 0x085c, 0x085c, 0x085c, + 0x085c, 0x085c, 0x085c, 0x0882, 0x08a5, + }, + }, + { // ln + "akanliamarikilialabolibyelorisílibiligalilibengalilitshekɛlialemáligelek" + + "ilingɛlɛ́salisipanyelipelésanɛlifalansɛ́hausalihindiliongililindonez" + + "iigbolitalianolizapɔlizavalikambodzalikoreyalingálalimalezilibilimál" + + "inepalɛlifalamálipendzabilipolonɛlipulutugɛ́siliromanilirisíkinyarwa" + + "ndalisomalilisuwedɛlitamulilitayelitilikilikrɛniliurduliviyetinámiyo" + + "rubalisinwazulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000d, 0x000d, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0020, 0x002a, + 0x002a, 0x002a, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x004c, 0x0059, 0x0059, 0x0062, + 0x0062, 0x0062, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x007a, + 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007f, + 0x007f, 0x0086, 0x0086, 0x0086, 0x0086, 0x008e, 0x008e, 0x008e, + // Entry 40 - 7F + 0x008e, 0x0097, 0x0097, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, + 0x00a4, 0x00a4, 0x00ab, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00b1, 0x00b1, 0x00bb, 0x00bb, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00d3, 0x00d3, 0x00dc, 0x00dc, 0x00dc, + 0x00e5, 0x00e5, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00f8, 0x00f8, 0x0101, + // Entry 80 - BF + 0x0101, 0x0110, 0x0110, 0x0110, 0x0110, 0x0118, 0x011f, 0x012a, + 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, + 0x012a, 0x012a, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, + 0x013b, 0x013b, 0x0143, 0x0143, 0x0143, 0x0149, 0x0149, 0x0149, + 0x0149, 0x0149, 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, 0x0159, + 0x015f, 0x015f, 0x015f, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x0172, 0x0172, 0x0179, 0x017d, + }, + }, + { // lo + loLangStr, + loLangIdx, + }, + { // lrc + "آذأربایئجانیآفریکانسآکانأمھأریأرأڤیآسامیآذأربایئجانی ھارگەباشکیریبئلاروٙ" + + "سیبولغاریبامبارابأنگالیتأبأتیبئرئتونبوسنیاییکاتالانچئچئنیکوریسکانچو" + + "اشیڤئلزیدانمارکیآلمانیزوٙنگخائڤئیوٙنانیئینگیلیسیئسپئرانتوئسپانیاییئ" + + "ستونیاییباسکیفارسیفأنلاندیفیجیفاروٙسیفآرانسئ ئیفئریسی أفتونئشینئیرل" + + "أندیگالیسیگوٙآرانیگوجأراتیمانکسھائوساعئبریھئنیکوروڤاتیھاییتیمأجاریأ" + + "رمأنیأندونئزیاییئیگبوسی چوان ییئیسلأندیئیتالیاییئینوکتیتوٙتجاپوٙنیج" + + "اڤئ ییگورجیکیکیوٙقأزاقکالالیسوٙتخئمئرکانادکورئ ییکأشمیریکوردی کورما" + + "نجیکورنیشقئرقیزیلاتینلوٙکزامبوٙرگیگاندالینگالالاولیتوڤانیاییلوٙبا ک" + + "اتانگالاتوڤیاییمالاگاشیمائوریمأقدوٙنیمالایامموغولیمأراتیمالاییمالتی" + + "بئرمئ یینئدئبئلئ شومالینئپالیھولأندینورڤئجی نینورسکنورڤئجی بوٙکمالئ" + + "وروموٙئوریاپأنجابیلأھئستانیپأشتوٙپورتئغالیکوچوٙارومانشراندیرومانیای" + + "یروٙسیکینیاروآنداسانسکئریتسئندیسامی شومالیسانگوسینھالائسلوڤاکیئسلوڤ" + + "ئنیاییشوناسوٙمالیآلبانیسئربیسوٙدانیسوٙئدیسأڤاحیلیتامیلتئلئگوتاجیکیت" + + "ایلأندیتیگرینیاتورکأمأنیتوٙنگانتورکیتاتارئویغوٙرئوکراینیئوردوٙئوزبأ" + + "کیڤییئتنامیڤولوفخوٙسایوروباچینیزولوآقئمماپوٙچئآسوٙبیمابئنابألوٙچی أ" + + "قتوٙنئشینبودوچیگاچوروٙکیکوردی سوٙرانیتایتازارماسوربی ھاریدوٙالاجولا" + + " فوٙنییئمبوفیلیپینیگاگائوزآلمانی سوٙئیسیگوٙسیھاڤاییسوربی ڤارونئگوٙمب" + + "اماچامئکابیلئکامباماکوٙندئکاباردینوکی یورا چینیکالئجینکومی پئرمیاکک" + + "وٙنکانیشامبالابافیالانگیلاکوٙتالۊری شومالیلوٙلوٙئیاماساییمئروموٙریس" + + "یماخوڤا میتومئتاٛموٙھاڤکموٙندانگمازأندأرانیناماآلمانی ھاریکئڤاسیوٙن" + + "ئکوٙنیوٙئرنیان کوٙلئکیچیرومبورئڤاسامبوٙروٙسانگوٙکوردی ھارگەسئناکیار" + + "ابورو سئنیتاچئلھیتسامی ھارگەلۉلئ سامیئیناری سامیئسکولت سامیتئسوتاسا" + + "ڤاقتامازیغ مینجاییزوٙن نادیارڤایڤوٙنجوٙڤارلپیریسوٙگاتامازیغ مأراکئش" + + "یبی نئشوٙعروی مدرنآذأری ھارگەآلمانی ئوتریشیآلمانی سوٙییسیئینگیلیسی " + + "ئوستارالیاییئینگیلیسی کاناداییئینگیلیسی بئریتانیاییئینگیلیسی ئمریکا" + + "ییئسپانیایی ئمریکا لاتینئسپانیایی ئوروٙپائسپانیایی مئکزیکفآرانسئ ئی" + + " کانادافآرانسئ ئی سوٙییسآلمانی ھارگە جافئلاماندیپورتئغالی بئرئزیلپور" + + "تئغالی ئوروٙپاییرومانیایی مولداڤیسأڤاحیلی کونگوچینی سادە بیەچینی سو" + + "نأتی", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0018, 0x0018, 0x0028, 0x0030, 0x003c, 0x003c, + 0x0046, 0x0050, 0x0050, 0x0050, 0x0073, 0x0081, 0x0093, 0x00a1, + 0x00a1, 0x00af, 0x00bd, 0x00c9, 0x00d7, 0x00e7, 0x00f5, 0x0101, + 0x0101, 0x0111, 0x0111, 0x0111, 0x0111, 0x011b, 0x0125, 0x0135, + 0x0141, 0x0141, 0x014f, 0x0155, 0x0163, 0x0175, 0x0187, 0x0199, + 0x01ab, 0x01b5, 0x01bf, 0x01bf, 0x01cf, 0x01d7, 0x01e5, 0x01f8, + 0x0217, 0x0227, 0x0227, 0x0233, 0x0243, 0x0253, 0x025d, 0x0269, + 0x0273, 0x027b, 0x027b, 0x028b, 0x0297, 0x02a3, 0x02af, 0x02af, + // Entry 40 - 7F + 0x02af, 0x02c5, 0x02c5, 0x02cf, 0x02e1, 0x02e1, 0x02e1, 0x02f1, + 0x0303, 0x0319, 0x0327, 0x0334, 0x033e, 0x033e, 0x034a, 0x034a, + 0x0354, 0x0368, 0x0372, 0x037c, 0x0389, 0x0389, 0x0397, 0x03b2, + 0x03b2, 0x03be, 0x03cc, 0x03d6, 0x03f0, 0x03fa, 0x03fa, 0x0408, + 0x040e, 0x0424, 0x043d, 0x044f, 0x045f, 0x045f, 0x046b, 0x047b, + 0x0489, 0x0495, 0x04a1, 0x04ad, 0x04b7, 0x04c6, 0x04c6, 0x04e3, + 0x04ef, 0x04ef, 0x04fd, 0x051a, 0x0537, 0x0537, 0x0537, 0x0537, + 0x0537, 0x0537, 0x0545, 0x054f, 0x054f, 0x055d, 0x055d, 0x056f, + // Entry 80 - BF + 0x057b, 0x058d, 0x0599, 0x05a5, 0x05af, 0x05c1, 0x05cb, 0x05e1, + 0x05f3, 0x05f3, 0x05fd, 0x0612, 0x061c, 0x062a, 0x063a, 0x0650, + 0x0650, 0x0658, 0x0666, 0x0672, 0x067c, 0x067c, 0x067c, 0x068a, + 0x0696, 0x06a6, 0x06b0, 0x06bc, 0x06c8, 0x06d8, 0x06e8, 0x06fa, + 0x06fa, 0x0708, 0x0712, 0x0712, 0x071c, 0x071c, 0x072a, 0x073a, + 0x0746, 0x0754, 0x0754, 0x0766, 0x0766, 0x0766, 0x0770, 0x077a, + 0x077a, 0x0786, 0x0786, 0x078e, 0x0796, 0x0796, 0x0796, 0x0796, + 0x0796, 0x0796, 0x0796, 0x079e, 0x079e, 0x079e, 0x079e, 0x079e, + // Entry C0 - FF + 0x079e, 0x079e, 0x079e, 0x079e, 0x079e, 0x07ac, 0x07ac, 0x07ac, + 0x07ac, 0x07ac, 0x07ac, 0x07ac, 0x07ac, 0x07b4, 0x07b4, 0x07b4, + 0x07b4, 0x07b4, 0x07b4, 0x07b4, 0x07b4, 0x07b4, 0x07b4, 0x07b4, + 0x07b4, 0x07b4, 0x07bc, 0x07bc, 0x07c4, 0x07c4, 0x07c4, 0x07e7, + 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, + 0x07e7, 0x07e7, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, + 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07f7, 0x07f7, + 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x0805, 0x0805, + // Entry 100 - 13F + 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, + 0x0828, 0x0828, 0x0828, 0x0828, 0x0828, 0x0832, 0x0832, 0x0845, + 0x0845, 0x0851, 0x0851, 0x0866, 0x0866, 0x0866, 0x086e, 0x086e, + 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, + 0x086e, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, + 0x087e, 0x087e, 0x087e, 0x087e, 0x088c, 0x088c, 0x088c, 0x088c, + 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, + 0x088c, 0x088c, 0x088c, 0x088c, 0x08a7, 0x08a7, 0x08a7, 0x08b1, + // Entry 140 - 17F + 0x08b1, 0x08b1, 0x08b1, 0x08bd, 0x08bd, 0x08bd, 0x08bd, 0x08bd, + 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, + 0x08d0, 0x08d0, 0x08e0, 0x08ec, 0x08ec, 0x08ec, 0x08ec, 0x08ec, + 0x08f8, 0x08f8, 0x08f8, 0x0902, 0x0902, 0x0902, 0x0902, 0x0902, + 0x0912, 0x0924, 0x0924, 0x0924, 0x0924, 0x0924, 0x0924, 0x093a, + 0x093a, 0x093a, 0x093a, 0x0948, 0x0948, 0x095f, 0x096f, 0x096f, + 0x096f, 0x096f, 0x096f, 0x096f, 0x096f, 0x096f, 0x097d, 0x0987, + 0x0987, 0x0987, 0x0987, 0x0987, 0x0991, 0x0991, 0x0991, 0x0991, + // Entry 180 - 1BF + 0x0991, 0x0991, 0x0991, 0x099f, 0x099f, 0x099f, 0x099f, 0x09b4, + 0x09b4, 0x09b4, 0x09b4, 0x09b4, 0x09ba, 0x09ba, 0x09c6, 0x09c6, + 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09d2, + 0x09d2, 0x09d2, 0x09d2, 0x09d2, 0x09da, 0x09e8, 0x09e8, 0x09fd, + 0x0a07, 0x0a07, 0x0a07, 0x0a07, 0x0a07, 0x0a15, 0x0a15, 0x0a15, + 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, + 0x0a3b, 0x0a3b, 0x0a3b, 0x0a43, 0x0a58, 0x0a58, 0x0a58, 0x0a58, + 0x0a58, 0x0a68, 0x0a68, 0x0a68, 0x0a68, 0x0a68, 0x0a72, 0x0a72, + // Entry 1C0 - 1FF + 0x0a7e, 0x0a7e, 0x0a7e, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, + 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, + 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, + 0x0a91, 0x0a99, 0x0a99, 0x0a99, 0x0a99, 0x0a99, 0x0a99, 0x0a99, + 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aab, 0x0aab, + 0x0aab, 0x0aab, 0x0abd, 0x0abd, 0x0abd, 0x0abd, 0x0abd, 0x0ac9, + 0x0ac9, 0x0ac9, 0x0ac9, 0x0ade, 0x0ade, 0x0ae6, 0x0ae6, 0x0ae6, + 0x0b01, 0x0b01, 0x0b01, 0x0b11, 0x0b11, 0x0b11, 0x0b11, 0x0b11, + // Entry 200 - 23F + 0x0b11, 0x0b24, 0x0b35, 0x0b4a, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, + 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, + 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b67, 0x0b67, 0x0b67, 0x0b67, + 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, + 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, + 0x0b75, 0x0b75, 0x0b92, 0x0b92, 0x0b92, 0x0b92, 0x0ba7, 0x0bad, + 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bbb, 0x0bbb, + 0x0bbb, 0x0bbb, 0x0bbb, 0x0bcb, 0x0bcb, 0x0bcb, 0x0bcb, 0x0bd5, + // Entry 240 - 27F + 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, + 0x0bd5, 0x0bd5, 0x0bf4, 0x0bf4, 0x0c03, 0x0c03, 0x0c14, 0x0c29, + 0x0c44, 0x0c5f, 0x0c8a, 0x0cad, 0x0cd6, 0x0cf9, 0x0d23, 0x0d44, + 0x0d63, 0x0d63, 0x0d83, 0x0da3, 0x0dbf, 0x0dd1, 0x0df2, 0x0e17, + 0x0e38, 0x0e38, 0x0e53, 0x0e6b, 0x0e80, + }, + }, + { // lt + ltLangStr, + ltLangIdx, + }, + { // lu + "LiakanLiamharikiArabiBelarusiBulegariBengaliTshekiLizelumaniGilikiLingel" + + "esaLihispaniaMpepajemiMfwàlànsaHausaHindiHongiliLindoneziaIgboLitali" + + "LiyapaniJavaLikoreyaTshilubaLimalezianepaliolandiLipunjabiMpoloniMpu" + + "tulugɛsiLiromaniLirisikinyarwandaLisomaliLisuwidiMtamuiliNtailandiNt" + + "ulukiNkraniUrduLiviyetinamuNyorubashinɛNzulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0010, 0x0010, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001d, 0x0025, + 0x0025, 0x0025, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x003c, 0x003c, 0x003c, 0x003c, 0x0042, 0x004b, 0x004b, 0x0055, + 0x0055, 0x0055, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x006e, + 0x006e, 0x0073, 0x0073, 0x0073, 0x0073, 0x007a, 0x007a, 0x007a, + // Entry 40 - 7F + 0x007a, 0x0084, 0x0084, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, + 0x008e, 0x008e, 0x0096, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00b3, 0x00b3, 0x00b3, 0x00b3, 0x00b3, + 0x00b9, 0x00b9, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00c8, 0x00c8, 0x00cf, + // Entry 80 - BF + 0x00cf, 0x00db, 0x00db, 0x00db, 0x00db, 0x00e3, 0x00e9, 0x00f4, + 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, + 0x00f4, 0x00f4, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x0104, 0x0104, 0x010c, 0x010c, 0x010c, 0x0115, 0x0115, 0x0115, + 0x0115, 0x0115, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x0122, + 0x0126, 0x0126, 0x0126, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, + 0x0132, 0x0139, 0x0139, 0x013f, 0x0144, + }, + }, + { // luo + "KiakanKiamhariKiarabuKibelarusiKibulgariaKibanglaKicheckiKijerumaniKigir" + + "ikiKingerezaKihispaniaKiajemiKifaransaKihausaKihindiKihungariKiindon" + + "esiaKiigboKiitalianoKijapaniKijavaKikambodiaKikoreaKimalesiaKiburmaK" + + "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + + "rubaKichinaKizuluDholuo", + []uint16{ // 397 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x0054, 0x0054, 0x005e, + 0x005e, 0x005e, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0075, + 0x0075, 0x007c, 0x007c, 0x007c, 0x007c, 0x0085, 0x0085, 0x0085, + // Entry 40 - 7F + 0x0085, 0x0090, 0x0090, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x00a0, 0x00a0, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00b8, 0x00b8, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00c8, 0x00c8, 0x00cf, 0x00cf, 0x00cf, + 0x00d7, 0x00d7, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e9, 0x00e9, 0x00f2, + // Entry 80 - BF + 0x00f2, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0101, 0x0107, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x0121, 0x0121, 0x0128, 0x0128, 0x0128, 0x0132, 0x0132, 0x0132, + 0x0132, 0x0132, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x0143, + 0x0149, 0x0149, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x015c, 0x015c, 0x0163, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry C0 - FF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 100 - 13F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 140 - 17F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 180 - 1BF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x016f, + }, + }, + { // luy + "KiakanKiamhariKiarabuKibelarusiKibulgariaKibanglaKicheckiKijerumaniKigir" + + "ikiLusunguKihispaniaKiajemiKifaransaKihausaLuhindiKihungariKiindones" + + "iaKiigboKiitalianoKijapaniKijavaKikambodiaKikoreaKimalesiaKiburmaKin" + + "epaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKiso" + + "maliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyoru" + + "baKichinaKizuluLuluhia", + []uint16{ // 399 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x0052, 0x0052, 0x005c, + 0x005c, 0x005c, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x0073, + 0x0073, 0x007a, 0x007a, 0x007a, 0x007a, 0x0083, 0x0083, 0x0083, + // Entry 40 - 7F + 0x0083, 0x008e, 0x008e, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x009e, 0x009e, 0x00a6, 0x00ac, 0x00ac, 0x00ac, 0x00ac, 0x00ac, + 0x00ac, 0x00ac, 0x00b6, 0x00b6, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00c6, 0x00c6, 0x00cd, 0x00cd, 0x00cd, + 0x00d5, 0x00d5, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00e7, 0x00e7, 0x00f0, + // Entry 80 - BF + 0x00f0, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00ff, 0x0105, 0x0110, + 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, + 0x0110, 0x0110, 0x0118, 0x0118, 0x0118, 0x0118, 0x0118, 0x0118, + 0x011f, 0x011f, 0x0126, 0x0126, 0x0126, 0x0130, 0x0130, 0x0130, + 0x0130, 0x0130, 0x0138, 0x0138, 0x0138, 0x0138, 0x0138, 0x0141, + 0x0147, 0x0147, 0x0147, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x015a, 0x015a, 0x0161, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + // Entry C0 - FF + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + // Entry 100 - 13F + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + // Entry 140 - 17F + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + // Entry 180 - 1BF + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x016e, + }, + }, + { // lv + lvLangStr, + lvLangIdx, + }, + { // mas + "nkʉtʉ́k ɔ́ɔ̄ lAkannkʉtʉ́k ɔ́ɔ̄ lAmharinkʉtʉ́k ɔ́ɔ̄ lmarabunkʉtʉ́k ɔ́ɔ̄ l" + + "Belarusinkʉtʉ́k ɔ́ɔ̄ lBulgarialnkʉtʉ́k ɔ́ɔ̄ lBengalinkʉtʉ́k ɔ́ɔ̄ lch" + + "ekinkʉtʉ́k ɔ́ɔ̄ ljerumaninkʉtʉ́k ɔ́ɔ̄ lgirikinkʉtʉ́k ɔ́ɔ̄ nkɨ́resank" + + "ʉtʉ́k ɔ́ɔ̄ lspaniankʉtʉ́k ɔ́ɔ̄ lpersiankʉtʉ́k ɔ́ɔ̄ faransankʉtʉ́k ɔ" + + "́ɔ̄ hausankʉtʉ́k ɔ́ɔ̄ lmoindinkʉtʉ́k ɔ́ɔ̄ lhungarinkʉtʉ́k ɔ́ɔ̄ Indo" + + "nesiankʉtʉ́k ɔ́ɔ̄ Igbonkʉtʉ́k ɔ́ɔ̄ ltaliannkʉtʉ́k ɔ́ɔ̄ japaninkʉtʉ́k" + + " ɔ́ɔ̄ ljanankʉtʉ́k ɔ́ɔ̄ lkambodiankʉtʉ́k ɔ́ɔ̄ lkoreankʉtʉ́k ɔ́ɔ̄ mal" + + "aynkʉtʉ́k ɔ́ɔ̄ lBurmankʉtʉ́k ɔ́ɔ̄ lnepalinkʉtʉ́k ɔ́ɔ̄ lduchinkʉtʉ́k " + + "ɔ́ɔ̄ lpunjabinkʉtʉ́k ɔ́ɔ̄ lpolandnkʉtʉ́k ɔ́ɔ̄ lportuguesenkʉtʉ́k ɔ́" + + "ɔ̄ lromaniankʉtʉ́k ɔ́ɔ̄ lrusinkʉtʉ́k ɔ́ɔ̄ lruwandankʉtʉ́k ɔ́ɔ̄ lchu" + + "marinkʉtʉ́k ɔ́ɔ̄ lswidinkʉtʉ́k ɔ́ɔ̄ ltamilnkʉtʉ́k ɔ́ɔ̄ ltainkʉtʉ́k ɔ" + + "́ɔ̄ lturukinkʉtʉ́k ɔ́ɔ̄ lkraniankʉtʉ́k ɔ́ɔ̄ lurdunkʉtʉ́k ɔ́ɔ̄ lviet" + + "inamunkʉtʉ́k ɔ́ɔ̄ lyorubankʉtʉ́k ɔ́ɔ̄ lchinankʉtʉ́k ɔ́ɔ̄ lzuluMaa", + []uint16{ // 408 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0019, 0x0034, 0x0034, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x006c, 0x0089, + 0x0089, 0x0089, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, + 0x00a6, 0x00a6, 0x00a6, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00f8, 0x0116, 0x0116, 0x0131, + 0x0131, 0x0131, 0x014c, 0x014c, 0x014c, 0x014c, 0x014c, 0x0167, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0180, + 0x0180, 0x019b, 0x019b, 0x019b, 0x019b, 0x01b7, 0x01b7, 0x01b7, + // Entry 40 - 7F + 0x01b7, 0x01d4, 0x01d4, 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, + 0x0207, 0x0207, 0x0221, 0x023a, 0x023a, 0x023a, 0x023a, 0x023a, + 0x023a, 0x023a, 0x0257, 0x0257, 0x0271, 0x0271, 0x0271, 0x0271, + 0x0271, 0x0271, 0x0271, 0x0271, 0x0271, 0x0271, 0x0271, 0x0271, + 0x0271, 0x0271, 0x0271, 0x0271, 0x0271, 0x0271, 0x0271, 0x0271, + 0x0271, 0x0271, 0x0271, 0x028a, 0x028a, 0x02a4, 0x02a4, 0x02a4, + 0x02bf, 0x02bf, 0x02d9, 0x02d9, 0x02d9, 0x02d9, 0x02d9, 0x02d9, + 0x02d9, 0x02d9, 0x02d9, 0x02d9, 0x02d9, 0x02f5, 0x02f5, 0x0310, + // Entry 80 - BF + 0x0310, 0x032f, 0x032f, 0x032f, 0x032f, 0x034b, 0x0364, 0x0380, + 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, + 0x0380, 0x0380, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, + 0x03b6, 0x03b6, 0x03d0, 0x03d0, 0x03d0, 0x03e8, 0x03e8, 0x03e8, + 0x03e8, 0x03e8, 0x0403, 0x0403, 0x0403, 0x0403, 0x0403, 0x041e, + 0x0437, 0x0437, 0x0437, 0x0455, 0x0455, 0x0455, 0x0455, 0x0455, + 0x0455, 0x0470, 0x0470, 0x048a, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + // Entry C0 - FF + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + // Entry 100 - 13F + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + // Entry 140 - 17F + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + // Entry 180 - 1BF + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a6, + }, + }, + { // mer + "KĩakaniKĩamarĩkiKĩarabuKĩbelarusiKĩbulugĩriaKĩbangiraKĩchekiKĩnjamanĩKĩn" + + "girikiKĩngerethaKĩspĩniKĩpasiaKĩfuransiKĩhausaKĩhĩndiKĩhangarĩKĩindo" + + "nesiaKĩigboKĩitalĩKĩjapaniKĩjavaKĩkambodiaKĩkoreaKĩmalesiaKĩburmaKĩn" + + "epaliKĩholandiKĩpunjabuKĩpolandiKĩpochogoKĩromaniaKĩrashiaKĩrwandaKĩ" + + "somaliKĩswideniKĩtamiluKĩthailandiKĩtakĩKĩukirĩniKĩurduKĩvietinamuKĩ" + + "yorubaKĩchinaKĩzuluKĩmĩrũ", + []uint16{ // 413 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0013, 0x0013, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x0026, 0x0033, + 0x0033, 0x0033, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x003d, 0x003d, 0x003d, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0050, 0x0050, 0x0050, 0x0050, 0x005a, 0x0065, 0x0065, 0x006e, + 0x006e, 0x006e, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0088, + 0x0088, 0x0091, 0x0091, 0x0091, 0x0091, 0x009c, 0x009c, 0x009c, + // Entry 40 - 7F + 0x009c, 0x00a8, 0x00a8, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, + 0x00b8, 0x00b8, 0x00c1, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00d3, 0x00d3, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00e5, 0x00e5, 0x00ed, 0x00ed, 0x00ed, + 0x00f6, 0x00f6, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x010a, 0x010a, 0x0114, + // Entry 80 - BF + 0x0114, 0x011e, 0x011e, 0x011e, 0x011e, 0x0128, 0x0131, 0x013a, + 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, + 0x013a, 0x013a, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, + 0x014d, 0x014d, 0x0156, 0x0156, 0x0156, 0x0162, 0x0162, 0x0162, + 0x0162, 0x0162, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x0175, + 0x017c, 0x017c, 0x017c, 0x0188, 0x0188, 0x0188, 0x0188, 0x0188, + 0x0188, 0x0191, 0x0191, 0x0199, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + // Entry C0 - FF + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + // Entry 100 - 13F + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + // Entry 140 - 17F + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + // Entry 180 - 1BF + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a9, + }, + }, + { // mfe + "akanamarikarabbielorisbilgarbengalitchekalmangrekangleespagnolpersanfran" + + "sehaoussahindihongrwaindonezienigboitalienzaponezavanekhmer, santral" + + "koreenmalebirmannepaleolandepenjabipoloneportigerouminrisrwandasomal" + + "iswedwatamoulthaïtirkikrenienourdouvietnamienyorubasinwa, mandarinzo" + + "uloukreol morisien", + []uint16{ // 414 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000a, 0x000a, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x0016, 0x001c, + 0x001c, 0x001c, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x002d, 0x002d, 0x002d, 0x002d, 0x0031, 0x0036, 0x0036, 0x003e, + 0x003e, 0x003e, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x0051, + 0x0051, 0x0056, 0x0056, 0x0056, 0x0056, 0x005d, 0x005d, 0x005d, + // Entry 40 - 7F + 0x005d, 0x0067, 0x0067, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x0072, 0x0072, 0x0078, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, + 0x007e, 0x007e, 0x008c, 0x008c, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0096, 0x0096, 0x009c, 0x009c, 0x009c, + 0x00a2, 0x00a2, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00af, 0x00af, 0x00b5, + // Entry 80 - BF + 0x00b5, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00c2, 0x00c5, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, + 0x00d7, 0x00d7, 0x00dd, 0x00dd, 0x00dd, 0x00e2, 0x00e2, 0x00e2, + 0x00e2, 0x00e2, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00ee, + 0x00f4, 0x00f4, 0x00f4, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, + 0x00fe, 0x0104, 0x0104, 0x0113, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + // Entry C0 - FF + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + // Entry 100 - 13F + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + // Entry 140 - 17F + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + // Entry 180 - 1BF + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0127, + }, + }, + { // mg + "AkanAmharikaAraboBielorosyBiolgaraBengaliTsekyAlemaninaGrikaAnglisyEspan" + + "iolaPersaFrantsayhaoussahindihongroàIndonezianinaigboItalianinaJapon" + + "eyJavaneykhmerKoreaninaMalagasyMalayBirmanaNepaleHolandeyPenjabiPolo" + + "neyPortiogeyRomanianinaRosianinaRoandeSomalianinaSoisaTamoilaTaioane" + + "yTiorkaOkrainianinaOrdòVietnamianinaYôrobàSinoa, MandarinZolò", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000c, 0x000c, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x001a, 0x0022, + 0x0022, 0x0022, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, + 0x0029, 0x0029, 0x0029, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x0037, 0x0037, 0x0037, 0x0037, 0x003c, 0x0043, 0x0043, 0x004c, + 0x004c, 0x004c, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0060, + 0x0060, 0x0065, 0x0065, 0x0065, 0x0065, 0x006d, 0x006d, 0x006d, + // Entry 40 - 7F + 0x006d, 0x007a, 0x007a, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, + 0x0088, 0x0088, 0x008f, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x0096, 0x0096, 0x009b, 0x009b, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00ac, 0x00ac, 0x00ac, 0x00ac, + 0x00ac, 0x00ac, 0x00ac, 0x00b1, 0x00b1, 0x00b8, 0x00b8, 0x00b8, + 0x00be, 0x00be, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00cd, 0x00cd, 0x00d4, + // Entry 80 - BF + 0x00d4, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00e8, 0x00f1, 0x00f7, + 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, + 0x00f7, 0x00f7, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + 0x0107, 0x0107, 0x010e, 0x010e, 0x010e, 0x0116, 0x0116, 0x0116, + 0x0116, 0x0116, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x0128, + 0x012d, 0x012d, 0x012d, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, + 0x013a, 0x0142, 0x0142, 0x0151, 0x0156, + }, + }, + { // mgh + "IkanImhariIarabuIbelausiIbulgariaIbanglaIchekiIjerimaniIgirikiIngilishiI" + + "hispaniolaIajemiIfaransaIhausaIhindiIhungariIgboItalianoIjapaniIjava" + + "IkambodiaIkoreaImalesiaIburmaInepaliIholanziIpunjabiIpolandiNrenoIro" + + "maniaIrisiInyarandaIsomaliIswidiItamilItailandiIturukiIukranIhurduIv" + + "yetinamuIyorubaIchinaIzuluMakua", + []uint16{ // 416 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000a, 0x000a, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0018, 0x0021, + 0x0021, 0x0021, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x0037, 0x0037, 0x0037, 0x0037, 0x003e, 0x0047, 0x0047, 0x0052, + 0x0052, 0x0052, 0x0058, 0x0058, 0x0058, 0x0058, 0x0058, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0066, + 0x0066, 0x006c, 0x006c, 0x006c, 0x006c, 0x0074, 0x0074, 0x0074, + // Entry 40 - 7F + 0x0074, 0x0074, 0x0074, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, + 0x0080, 0x0080, 0x0087, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x0095, 0x0095, 0x009b, 0x009b, 0x009b, 0x009b, + 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, + 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, + 0x009b, 0x009b, 0x009b, 0x00a3, 0x00a3, 0x00a9, 0x00a9, 0x00a9, + 0x00b0, 0x00b0, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, + 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00c0, 0x00c0, 0x00c8, + // Entry 80 - BF + 0x00c8, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00d5, 0x00da, 0x00e3, + 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, + 0x00e3, 0x00e3, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, + 0x00f0, 0x00f0, 0x00f6, 0x00f6, 0x00f6, 0x00ff, 0x00ff, 0x00ff, + 0x00ff, 0x00ff, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x010c, + 0x0112, 0x0112, 0x0112, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x0123, 0x0123, 0x0129, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + // Entry C0 - FF + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + // Entry 100 - 13F + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + // Entry 140 - 17F + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + // Entry 180 - 1BF + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x0133, + }, + }, + { // mgo + "metaʼngam tisɔʼ", + []uint16{ // 559 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 140 - 17F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 180 - 1BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + // Entry 1C0 - 1FF + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + // Entry 200 - 23F + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0012, + }, + }, + { // mk + mkLangStr, + mkLangIdx, + }, + { // ml + mlLangStr, + mlLangIdx, + }, + { // mn + mnLangStr, + mnLangIdx, + }, + { // mr + mrLangStr, + mrLangIdx, + }, + { // ms + msLangStr, + msLangIdx, + }, + { // mt + "AfarAbkażjanAvestanAfrikansAkanAmharikuAragoniżGħarbiAssamiżAvarikAymara" + + "AżerbajġaniBashkirBelarussuBulgaruBislamaBambaraBengaliTibetjanBreto" + + "nBożnijakuKatalanChechenChamorroKorsikuCreeĊekSlaviku tal-KnisjaChuv" + + "ashWelshDaniżĠermaniżDivehiDzongkhaEweGriegIngliżEsperantoSpanjolEst" + + "onjanBaskPersjanFulahFinlandiżFiġjanFaroeseFranċiżFrisian tal-Punent" + + "IrlandiżGalliku SkoċċiżGaliċjanGuaraniGujaratiManxHausaEbrajkHindiHi" + + "ri MotuKroatCreole ta’ HaitiUngeriżArmenHereroInterlinguaIndoneżjanI" + + "nterlingueIgboSichuan YiInupjakIdoIżlandiżTaljanInuktitutĠappuniżĠav" + + "aniżĠorġjanKongoKikujuKuanyamaKażakKalallisutKhmerKannadaKoreanKanur" + + "iKashmiriKurdKomiKornikuKirgiżLatinLussemburgiżGandaLimburgishLingal" + + "janLaosjanLitwanLuba-KatangaLatvjanMalagasyMarshalljaniżMaoriMaċedon" + + "janMalayalamMongoljanMarathiMalayMaltiBurmiżNaurujanNdebeli tat-Tram" + + "untanaNepaliżNdongaOlandiżNinorsk NorveġiżBokmal NorveġiżNdebele tan" + + "-NofsinharNavajoNyanjaOċċitanOġibwaOromoOdiaOssettikuPunjabiPaliPoll" + + "akkPashtoPortugiżQuechuaRomanzRundiRumenRussuKinjarwandaSanskritSard" + + "injanSindhiSami tat-TramuntanaSangoSinhalaSlovakkSlovenSamoanShonaSo" + + "maliAlbaniżSerbSwatiSoto tan-NofsinharSundaniżŻvezjaSwahiliTamilTelu" + + "guTajikTajlandiżTigrinyaTurkmeniTswanaTonganTorkTsongaTatarTaħitjanU" + + "yghurUkrenurUzbekVendaVjetnamiżVolapukWalloonWolofXhosaYiddishYoruba" + + "ZhuangĊiniżZuluAċiniżAkoliAdangmeAdygheAfriħiliAghemAjnuAkkadjenAleu" + + "tAltai tan-NofsinharIngliż AntikAngikaAramajkMapucheArapahoArawakAsu" + + "AsturianAwadhiBaluċiBaliniżBasaBejaBembaBenaBhojpuriBikolBiniSiksika" + + "BrajBodoBurjatBugineseBlinKaddoKaribAtsamCebuanoChigaChibchaChagatai" + + "ĊukiżMariChinook JargonChoctawĊipewjanCherokeeCheyenneKurd Ċentrali" + + "KoptikuTork tal-KrimeaFranċiż tas-Seselwa CreoleKashubianDakotaDargw" + + "aTaitaDelawerjanSlavDogribDinkaZarmaDogriSorbjan KomuniDwalaOlandiż " + + "MedjevaliJola-FonyiDyulaDazagaEmbuEfikEġizzjan (Antik)EkajukElamitIn" + + "gliż MedjevaliEwondoFangFilippinFonFranċiż MedjevaliFranċiż AntikFri" + + "juljanGaGayoGbayaGeezGilbertjanĠermaniż Medjevali PulitĠermaniż Anti" + + "k, PulitGondiGorontaloGotikuGreboGrieg, AntikĠermaniż tal-IżvizzeraG" + + "usiiGwiċinHaidaĦawajjanHiligaynonHittiteHmongSorbjan ta’ FuqHupaIban" + + "IbibioIlokoIngushLojbanNgombaMachameLhudi-PersjanLhudi-GħarbiKara-Ka" + + "lpakKabuljanKachinJjuKambaKawiKabardianTyapMakondeCape VerdjanKoroKh" + + "asiKotaniżKoyra ChiiniKakoKalenjinKimbunduKonkaniKosrejanKpelleKarac" + + "hay-BalkarKareljanKuruxShambalaBafiaKolonjanKumykKutenajLadinoLangiL" + + "ahndaLambaLeżgjanLakotaMongoLożiLuri tat-TramuntanaLuba-LuluwaLuisen" + + "oLundaLuoMizoLuyiaMaduriżMagahiMaithiliMakasarMandingoMasaiMokshaMan" + + "darMendeMeruMorisyenIrlandiż MedjevaliMakhuwa-MeettoMetàMicmacMinang" + + "kabauManchuManipuriMohawkMossiMundangLingwi DiversiKriekMirandiżMarw" + + "ariErzyaMazanderaniNaplitanNamaĠermaniż KomuniNewariNijasNiueanKwasi" + + "oNgiemboonNogaiNors AntikN’KoSoto tat-TramuntanaNuerNewari KlassikuN" + + "jamweżiNyankoleNyoroNzimaOsaġjanTork OttomanPangasinjanPahlaviPampan" + + "gaPapiamentoPalawjanPidgin NiġerjanPersjan AntikFeniċjuPonpejanPruss" + + "uProvenzal AntikK’iche’RaġastaniRapanwiRarotonganiRomboRomaneskAroma" + + "njanRwaSandaweSakhaSamaritan AramajkSamburuSasakSantaliNgambaySanguS" + + "qalliSkoċċiżSenaSelkupKoyraboro SenniIrlandiż AntikTachelhitShanSida" + + "moSami tan-NofsinharLule SamiInari SamiSkolt SamiSoninkeSogdienSrana" + + "n TongoSererSahoSukumaSusuSumerjanKomorjanSirjanTimneTesoTerenoTetum" + + "TigreTivTokelauKlingonTlingitTamashekNyasa TongaTok PisinTarokoTsims" + + "hianTumbukaTuvaluTasawaqTuvinjanTamazight tal-Atlas ĊentraliUdmurtUg" + + "aritikuUmbunduRootVaiVotikVunjoWalserWalamoWarayWashoKalmykSogaYaoYa" + + "peseYangbenYembaKantoniżZapotecZenagaTamazight Standard tal-MarokkZu" + + "niBla kontenut lingwistikuZazaGħarbi Standard ModernĠermaniż Awstrij" + + "akĠermaniż ŻvizzeruIngliż AwstraljanIngliż KanadiżIngliż BrittanikuI" + + "ngliż AmerikanSpanjol Latin AmerikanSpanjol EwropewSpanjol tal-Messi" + + "kuFranċiż KanadiżFranċiż ŻvizzeruSassonu KomuniFjammingPortugiż tal-" + + "BrażilPortugiż EwropewMoldovanSerbo-KroatSwahili tar-Repubblika Demo" + + "kratika tal-KongoĊiniż SimplifikatĊiniż Tradizzjonali", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x0014, 0x001c, 0x0020, 0x0028, 0x0031, + 0x0038, 0x0040, 0x0046, 0x004c, 0x0059, 0x0060, 0x0069, 0x0070, + 0x0077, 0x007e, 0x0085, 0x008d, 0x0093, 0x009d, 0x00a4, 0x00ab, + 0x00b3, 0x00ba, 0x00be, 0x00c2, 0x00d4, 0x00db, 0x00e0, 0x00e6, + 0x00f0, 0x00f6, 0x00fe, 0x0101, 0x0106, 0x010d, 0x0116, 0x011d, + 0x0125, 0x0129, 0x0130, 0x0135, 0x013f, 0x0146, 0x014d, 0x0156, + 0x0168, 0x0171, 0x0183, 0x018c, 0x0193, 0x019b, 0x019f, 0x01a4, + 0x01aa, 0x01af, 0x01b8, 0x01bd, 0x01cf, 0x01d7, 0x01dc, 0x01e2, + // Entry 40 - 7F + 0x01ed, 0x01f8, 0x0203, 0x0207, 0x0211, 0x0218, 0x021b, 0x0225, + 0x022b, 0x0234, 0x023e, 0x0247, 0x0250, 0x0255, 0x025b, 0x0263, + 0x0269, 0x0273, 0x0278, 0x027f, 0x0285, 0x028b, 0x0293, 0x0297, + 0x029b, 0x02a2, 0x02a9, 0x02ae, 0x02bb, 0x02c0, 0x02ca, 0x02d3, + 0x02da, 0x02e0, 0x02ec, 0x02f3, 0x02fb, 0x0309, 0x030e, 0x0319, + 0x0322, 0x032b, 0x0332, 0x0337, 0x033c, 0x0343, 0x034b, 0x0361, + 0x0369, 0x036f, 0x0377, 0x0389, 0x039a, 0x03af, 0x03b5, 0x03bb, + 0x03c4, 0x03cb, 0x03d0, 0x03d4, 0x03dd, 0x03e4, 0x03e8, 0x03ef, + // Entry 80 - BF + 0x03f5, 0x03fe, 0x0405, 0x040b, 0x0410, 0x0415, 0x041a, 0x0425, + 0x042d, 0x0436, 0x043c, 0x044f, 0x0454, 0x045b, 0x0462, 0x0468, + 0x046e, 0x0473, 0x0479, 0x0481, 0x0485, 0x048a, 0x049c, 0x04a5, + 0x04ac, 0x04b3, 0x04b8, 0x04be, 0x04c3, 0x04cd, 0x04d5, 0x04dd, + 0x04e3, 0x04e9, 0x04ed, 0x04f3, 0x04f8, 0x0501, 0x0507, 0x050c, + 0x050e, 0x0513, 0x0518, 0x0522, 0x0529, 0x0530, 0x0535, 0x053a, + 0x0541, 0x0547, 0x054d, 0x0554, 0x0558, 0x0560, 0x0565, 0x056c, + 0x0572, 0x0572, 0x057b, 0x0580, 0x0584, 0x058c, 0x058c, 0x0591, + // Entry C0 - FF + 0x0591, 0x05a4, 0x05b1, 0x05b7, 0x05be, 0x05c5, 0x05c5, 0x05cc, + 0x05cc, 0x05cc, 0x05d2, 0x05d2, 0x05d2, 0x05d5, 0x05d5, 0x05dd, + 0x05dd, 0x05e3, 0x05ea, 0x05f2, 0x05f2, 0x05f6, 0x05f6, 0x05f6, + 0x05f6, 0x05fa, 0x05ff, 0x05ff, 0x0603, 0x0603, 0x0603, 0x0603, + 0x060b, 0x0610, 0x0614, 0x0614, 0x0614, 0x061b, 0x061b, 0x061b, + 0x061f, 0x061f, 0x0623, 0x0623, 0x0629, 0x0631, 0x0631, 0x0635, + 0x0635, 0x063a, 0x063f, 0x063f, 0x0644, 0x064b, 0x0650, 0x0657, + 0x065f, 0x0666, 0x066a, 0x0678, 0x067f, 0x0688, 0x0690, 0x0698, + // Entry 100 - 13F + 0x06a6, 0x06ad, 0x06ad, 0x06bc, 0x06d8, 0x06e1, 0x06e7, 0x06ed, + 0x06f2, 0x06fc, 0x0700, 0x0706, 0x070b, 0x0710, 0x0715, 0x0723, + 0x0723, 0x0728, 0x073a, 0x0744, 0x0749, 0x074f, 0x0753, 0x0757, + 0x0757, 0x0768, 0x076e, 0x0774, 0x0785, 0x0785, 0x078b, 0x078b, + 0x078f, 0x0797, 0x0797, 0x079a, 0x079a, 0x07ad, 0x07bc, 0x07bc, + 0x07bc, 0x07bc, 0x07c5, 0x07c7, 0x07c7, 0x07c7, 0x07cb, 0x07d0, + 0x07d0, 0x07d4, 0x07de, 0x07de, 0x07f8, 0x080f, 0x080f, 0x0814, + 0x081d, 0x0823, 0x0828, 0x0834, 0x084d, 0x084d, 0x084d, 0x0852, + // Entry 140 - 17F + 0x0859, 0x085e, 0x085e, 0x0867, 0x0867, 0x0871, 0x0878, 0x087d, + 0x088e, 0x088e, 0x0892, 0x0896, 0x089c, 0x08a1, 0x08a7, 0x08a7, + 0x08a7, 0x08ad, 0x08b3, 0x08ba, 0x08c7, 0x08d4, 0x08d4, 0x08df, + 0x08e7, 0x08ed, 0x08f0, 0x08f5, 0x08f9, 0x0902, 0x0902, 0x0906, + 0x090d, 0x0919, 0x0919, 0x091d, 0x091d, 0x0922, 0x092a, 0x0936, + 0x0936, 0x0936, 0x093a, 0x0942, 0x094a, 0x094a, 0x0951, 0x0959, + 0x095f, 0x096e, 0x096e, 0x096e, 0x0976, 0x097b, 0x0983, 0x0988, + 0x0990, 0x0995, 0x099c, 0x09a2, 0x09a7, 0x09ad, 0x09b2, 0x09ba, + // Entry 180 - 1BF + 0x09ba, 0x09ba, 0x09ba, 0x09c0, 0x09c0, 0x09c5, 0x09ca, 0x09dd, + 0x09dd, 0x09e8, 0x09ef, 0x09f4, 0x09f7, 0x09fb, 0x0a00, 0x0a00, + 0x0a00, 0x0a08, 0x0a08, 0x0a0e, 0x0a16, 0x0a1d, 0x0a25, 0x0a2a, + 0x0a2a, 0x0a30, 0x0a36, 0x0a3b, 0x0a3f, 0x0a47, 0x0a5a, 0x0a68, + 0x0a6d, 0x0a73, 0x0a7e, 0x0a84, 0x0a8c, 0x0a92, 0x0a97, 0x0a97, + 0x0a9e, 0x0aac, 0x0ab1, 0x0aba, 0x0ac1, 0x0ac1, 0x0ac1, 0x0ac6, + 0x0ad1, 0x0ad1, 0x0ad9, 0x0add, 0x0aee, 0x0af4, 0x0af9, 0x0aff, + 0x0aff, 0x0b05, 0x0b0e, 0x0b13, 0x0b1d, 0x0b1d, 0x0b23, 0x0b36, + // Entry 1C0 - 1FF + 0x0b3a, 0x0b49, 0x0b52, 0x0b5a, 0x0b5f, 0x0b64, 0x0b6c, 0x0b78, + 0x0b83, 0x0b8a, 0x0b92, 0x0b9c, 0x0ba4, 0x0ba4, 0x0bb4, 0x0bb4, + 0x0bb4, 0x0bc1, 0x0bc1, 0x0bc9, 0x0bc9, 0x0bc9, 0x0bd1, 0x0bd7, + 0x0be6, 0x0bf1, 0x0bf1, 0x0bfb, 0x0c02, 0x0c0d, 0x0c0d, 0x0c0d, + 0x0c12, 0x0c1a, 0x0c1a, 0x0c1a, 0x0c1a, 0x0c23, 0x0c26, 0x0c2d, + 0x0c32, 0x0c43, 0x0c4a, 0x0c4f, 0x0c56, 0x0c56, 0x0c5d, 0x0c62, + 0x0c68, 0x0c72, 0x0c72, 0x0c72, 0x0c72, 0x0c76, 0x0c76, 0x0c7c, + 0x0c8b, 0x0c9a, 0x0c9a, 0x0ca3, 0x0ca7, 0x0ca7, 0x0cad, 0x0cad, + // Entry 200 - 23F + 0x0cad, 0x0cbf, 0x0cc8, 0x0cd2, 0x0cdc, 0x0ce3, 0x0cea, 0x0cf6, + 0x0cfb, 0x0cff, 0x0cff, 0x0d05, 0x0d09, 0x0d11, 0x0d19, 0x0d19, + 0x0d1f, 0x0d1f, 0x0d1f, 0x0d24, 0x0d28, 0x0d2e, 0x0d33, 0x0d38, + 0x0d3b, 0x0d42, 0x0d42, 0x0d49, 0x0d50, 0x0d50, 0x0d58, 0x0d63, + 0x0d6c, 0x0d6c, 0x0d72, 0x0d72, 0x0d7b, 0x0d7b, 0x0d82, 0x0d88, + 0x0d8f, 0x0d97, 0x0db4, 0x0dba, 0x0dc3, 0x0dca, 0x0dce, 0x0dd1, + 0x0dd1, 0x0dd1, 0x0dd1, 0x0dd1, 0x0dd6, 0x0dd6, 0x0ddb, 0x0de1, + 0x0de7, 0x0dec, 0x0df1, 0x0df1, 0x0df1, 0x0df7, 0x0df7, 0x0dfb, + // Entry 240 - 27F + 0x0dfe, 0x0e04, 0x0e0b, 0x0e10, 0x0e10, 0x0e19, 0x0e20, 0x0e20, + 0x0e20, 0x0e26, 0x0e43, 0x0e47, 0x0e5f, 0x0e63, 0x0e7a, 0x0e7a, + 0x0e8e, 0x0ea2, 0x0eb4, 0x0ec4, 0x0ed6, 0x0ee6, 0x0efc, 0x0f0b, + 0x0f1e, 0x0f1e, 0x0f30, 0x0f43, 0x0f51, 0x0f59, 0x0f6e, 0x0f7f, + 0x0f87, 0x0f92, 0x0fbe, 0x0fd1, 0x0fe6, + }, + }, + { // mua + "akaŋamharikarabiyabelarussiyabulgariabengaliasyekyagermaŋgrekzah Anglofo" + + "ŋEspaniyaPersiazah sǝr Franssǝhaussahindihungariyaindonesiyaigboita" + + "liyazah sǝr JapoŋjavaniyakmerkoreamalasiyabirmaniaNepaliyazah sǝr ma" + + " kasǝŋPǝnjabiPoloniyaZah sǝr PortugalRomaniyaRussiyaZah sǝr RwandaSo" + + "maliyaSwediaTamulthTurkUkrainiaUrduVietnamiyaYorubazah SyiŋZuluMUNDA" + + "Ŋ", + []uint16{ // 425 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x000c, 0x000c, + 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x001e, 0x0026, + 0x0026, 0x0026, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003f, 0x004c, 0x004c, 0x0054, + 0x0054, 0x0054, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x0071, + 0x0071, 0x0076, 0x0076, 0x0076, 0x0076, 0x007f, 0x007f, 0x007f, + // Entry 40 - 7F + 0x007f, 0x0089, 0x0089, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, + 0x0094, 0x0094, 0x00a3, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, + 0x00ab, 0x00ab, 0x00af, 0x00af, 0x00b4, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00bc, 0x00bc, 0x00c4, 0x00c4, 0x00c4, + 0x00cc, 0x00cc, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, + 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00e7, 0x00e7, 0x00ef, + // Entry 80 - BF + 0x00ef, 0x0100, 0x0100, 0x0100, 0x0100, 0x0108, 0x010f, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, + 0x012c, 0x012c, 0x0131, 0x0131, 0x0131, 0x0133, 0x0133, 0x0133, + 0x0133, 0x0133, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x013f, + 0x0143, 0x0143, 0x0143, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, + 0x014d, 0x0153, 0x0153, 0x015c, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + // Entry C0 - FF + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + // Entry 100 - 13F + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + // Entry 140 - 17F + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + // Entry 180 - 1BF + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, + 0x0167, + }, + }, + { // my + myLangStr, + myLangIdx, + }, + { // mzn + "آبخازیآفریکانسآکانامهریعربیآسامیآذری ِترکیباشقیریبلاروسیبلغاریبامباراییب" + + "نگالیتبتیبرِتونیبوسنیاییکاتالونیچچنیکورسیکانچکیچوواشیولزیدانمارکیآل" + + "مانیدزونگخااوه\u200cیییونانیانگلیسیاسپرانتوایسپانیولیاستونیاییباسکی" + + "فارسیفینیشفیجیاییفاروییفرانسویغربی فیریزیایریشگالیکگورانیگجراتیمانک" + + "سهوساعبریهندیکرواتیهائتیاییمجاریارمنیاندونزیاییایگبوسیچوئان ییایسلن" + + "دیایتالیاییانوکتیتوتجاپونیجاواییگرجیکیکویوقزاقیکالائلیسوتخمریکانّاد" + + "اکُره\u200cییکشمیریکوردیکورنیشقرقیزیلاتینلوکزامبورگیگاندالینگالالائ" + + "وییلتونیاییلوبا-کاتانگالاتویاییمالاگاسیمائوریمقدونیمالایالاممغولیما" + + "راتیمالاییمالتیبرمه\u200cییشمالی ندبلهنپالیهلندینروژی نینورسکنروژی " + + "بوکمالاورومواوریاپنجابیلهستونیپشتوپرتغالیقوئچوئارومانشروندیرومانیای" + + "یروسیکنیاروآنداییسانسکریتسندیشمالی سامیسانگوسینهالااسلواکیاسلوونیای" + + "یشوناسومالیاییآلبانیاییصربیسوندانسیسوئدیسواحیلیتامیلیتلوگوییتاجیکیت" + + "اییتیگرینیاییترکمونیتونگانیترکیتاتاریئوغوریاوکراینیاردوازبکیویتنامی" + + "وولفیخوسایوروباچینیزولوآقمماپوچهآسوبمباییبناییغربی بلوچیبدوییچیگاچر" + + "وکیاییمیونی کوردیتایتازارماییپایین صربیدوئالاییجولا-فونیامبوفیلیپین" + + "وگاگائوزیسوییس آلمانیگوسیهاواییاییبالایی صربینگومباماچامهقبایلیکامب" + + "اییماکوندهکیپ وُردیکویرا چیینیکالنجینکومی-پرمیاککونکانیشامبالابافیا" + + "ییلانگیلاکوتاشمالی لُریلوئولوییاماساییمِروییموریسینماخوئا-میتومِتاء" + + "موهاکموندانگمازرونیناماپایین آلمانیکوئاسیونئکونوئرنیانکولهکئیچه" + + "\u200cئیرومبوروآییسامبوروسانگووجنوبی کردیسِناییکویرابورا سنیتاچلهیتج" + + "نوبی سامیلوله سامیایناری سامیسکولت سامیتسوییتاساواقیمیونی اطلس تامز" + + "یقینشناسی\u200cیه زوونواییوونجوییوالرپیریسوگامراکش ِاستاندارد ِتاما" + + "زیقتیاین زوون بشناسی\u200cیه نیّهمدرن استاندارد عربیجنوبی آذری ترکی" + + "اتریش ِآلمانیسوییس ِآلمانیاسترالیای ِانگلیسیکانادای ِانگلیسیبریتیش " + + "انگلیسیامریکن انگلیسیجنوبی آمریکای ِایسپانیولیاروپای ِایسپانیولیمکز" + + "یک ِایسپانیولیکانادای ِفرانسویسوییس ِفرانسویپایین ساکسونیفلمیشبرزیل" + + " ِپرتغالیاروپای ِپرتغالیمولداویکنگو سواحیلیساده چینیسنتی چینی", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000c, 0x000c, 0x001c, 0x0024, 0x002e, 0x002e, + 0x0036, 0x0040, 0x0040, 0x0040, 0x0053, 0x0061, 0x006f, 0x007b, + 0x007b, 0x008d, 0x0099, 0x00a1, 0x00af, 0x00bf, 0x00cf, 0x00d7, + 0x00d7, 0x00e7, 0x00e7, 0x00ed, 0x00ed, 0x00f9, 0x0101, 0x0111, + 0x011d, 0x011d, 0x012b, 0x0138, 0x0144, 0x0152, 0x0162, 0x0176, + 0x0188, 0x0192, 0x019c, 0x019c, 0x01a6, 0x01b4, 0x01c0, 0x01ce, + 0x01e3, 0x01ed, 0x01ed, 0x01f7, 0x0203, 0x020f, 0x0219, 0x0221, + 0x0229, 0x0231, 0x0231, 0x023d, 0x024d, 0x0257, 0x0261, 0x0261, + // Entry 40 - 7F + 0x0261, 0x0275, 0x0275, 0x027f, 0x0292, 0x0292, 0x0292, 0x02a0, + 0x02b2, 0x02c4, 0x02d0, 0x02dc, 0x02e4, 0x02e4, 0x02f0, 0x02f0, + 0x02fa, 0x030e, 0x0316, 0x0324, 0x0333, 0x0333, 0x033f, 0x0349, + 0x0349, 0x0355, 0x0361, 0x036b, 0x0381, 0x038b, 0x038b, 0x0399, + 0x03a5, 0x03b5, 0x03cc, 0x03dc, 0x03ec, 0x03ec, 0x03f8, 0x0404, + 0x0416, 0x0420, 0x042c, 0x0438, 0x0442, 0x0451, 0x0451, 0x0466, + 0x0470, 0x0470, 0x047a, 0x0493, 0x04aa, 0x04aa, 0x04aa, 0x04aa, + 0x04aa, 0x04aa, 0x04b6, 0x04c0, 0x04c0, 0x04cc, 0x04cc, 0x04da, + // Entry 80 - BF + 0x04e2, 0x04f0, 0x04fe, 0x050a, 0x0514, 0x0526, 0x052e, 0x0546, + 0x0556, 0x0556, 0x055e, 0x0571, 0x057b, 0x0589, 0x0597, 0x05ab, + 0x05ab, 0x05b3, 0x05c5, 0x05d7, 0x05df, 0x05df, 0x05df, 0x05ef, + 0x05f9, 0x0607, 0x0613, 0x0621, 0x062d, 0x0635, 0x0649, 0x0657, + 0x0657, 0x0665, 0x066d, 0x066d, 0x0679, 0x0679, 0x0685, 0x0695, + 0x069d, 0x06a7, 0x06a7, 0x06b5, 0x06b5, 0x06b5, 0x06bf, 0x06c7, + 0x06c7, 0x06d3, 0x06d3, 0x06db, 0x06e3, 0x06e3, 0x06e3, 0x06e3, + 0x06e3, 0x06e3, 0x06e3, 0x06e9, 0x06e9, 0x06e9, 0x06e9, 0x06e9, + // Entry C0 - FF + 0x06e9, 0x06e9, 0x06e9, 0x06e9, 0x06e9, 0x06f5, 0x06f5, 0x06f5, + 0x06f5, 0x06f5, 0x06f5, 0x06f5, 0x06f5, 0x06fb, 0x06fb, 0x06fb, + 0x06fb, 0x06fb, 0x06fb, 0x06fb, 0x06fb, 0x06fb, 0x06fb, 0x06fb, + 0x06fb, 0x06fb, 0x0707, 0x0707, 0x0711, 0x0711, 0x0711, 0x0724, + 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, + 0x0724, 0x0724, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, + 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x0736, 0x0736, + 0x0736, 0x0736, 0x0736, 0x0736, 0x0736, 0x0736, 0x0746, 0x0746, + // Entry 100 - 13F + 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, + 0x0765, 0x0765, 0x0765, 0x0765, 0x0765, 0x0773, 0x0773, 0x0786, + 0x0786, 0x0796, 0x0796, 0x07a7, 0x07a7, 0x07a7, 0x07af, 0x07af, + 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, + 0x07af, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, + 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, + 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, + 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07e6, 0x07e6, 0x07e6, 0x07ee, + // Entry 140 - 17F + 0x07ee, 0x07ee, 0x07ee, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, + 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, + 0x0815, 0x0815, 0x0821, 0x082d, 0x082d, 0x082d, 0x082d, 0x082d, + 0x0839, 0x0839, 0x0839, 0x0847, 0x0847, 0x0847, 0x0847, 0x0847, + 0x0855, 0x0866, 0x0866, 0x0866, 0x0866, 0x0866, 0x0866, 0x087b, + 0x087b, 0x087b, 0x087b, 0x0889, 0x0889, 0x089e, 0x08ac, 0x08ac, + 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ba, 0x08c8, + 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08d2, 0x08d2, 0x08d2, 0x08d2, + // Entry 180 - 1BF + 0x08d2, 0x08d2, 0x08d2, 0x08de, 0x08de, 0x08de, 0x08de, 0x08f1, + 0x08f1, 0x08f1, 0x08f1, 0x08f1, 0x08f9, 0x08f9, 0x0903, 0x0903, + 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x090f, + 0x090f, 0x090f, 0x090f, 0x090f, 0x091b, 0x0929, 0x0929, 0x093e, + 0x0948, 0x0948, 0x0948, 0x0948, 0x0948, 0x0952, 0x0952, 0x0952, + 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, + 0x096e, 0x096e, 0x096e, 0x0976, 0x098d, 0x098d, 0x098d, 0x098d, + 0x098d, 0x099b, 0x099b, 0x099b, 0x099b, 0x099b, 0x09a3, 0x09a3, + // Entry 1C0 - 1FF + 0x09ab, 0x09ab, 0x09ab, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, + 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, + 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, + 0x09bb, 0x09cc, 0x09cc, 0x09cc, 0x09cc, 0x09cc, 0x09cc, 0x09cc, + 0x09d6, 0x09d6, 0x09d6, 0x09d6, 0x09d6, 0x09d6, 0x09e0, 0x09e0, + 0x09e0, 0x09e0, 0x09ee, 0x09ee, 0x09ee, 0x09ee, 0x09ee, 0x09fa, + 0x09fa, 0x09fa, 0x09fa, 0x0a0d, 0x0a0d, 0x0a19, 0x0a19, 0x0a19, + 0x0a32, 0x0a32, 0x0a32, 0x0a40, 0x0a40, 0x0a40, 0x0a40, 0x0a40, + // Entry 200 - 23F + 0x0a40, 0x0a53, 0x0a64, 0x0a79, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, + 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, + 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a96, 0x0a96, 0x0a96, 0x0a96, + 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, + 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, + 0x0aa6, 0x0aa6, 0x0ac8, 0x0ac8, 0x0ac8, 0x0ac8, 0x0ae4, 0x0aec, + 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0afa, 0x0afa, + 0x0afa, 0x0afa, 0x0afa, 0x0b0a, 0x0b0a, 0x0b0a, 0x0b0a, 0x0b12, + // Entry 240 - 27F + 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, + 0x0b12, 0x0b12, 0x0b46, 0x0b46, 0x0b72, 0x0b72, 0x0b96, 0x0bb2, + 0x0bcb, 0x0be4, 0x0c07, 0x0c26, 0x0c41, 0x0c5c, 0x0c8c, 0x0caf, + 0x0cd0, 0x0cd0, 0x0cef, 0x0d0a, 0x0d23, 0x0d2d, 0x0d48, 0x0d65, + 0x0d73, 0x0d73, 0x0d8a, 0x0d9b, 0x0dac, + }, + }, + { // naq + "AkangowabAmharicgowabArabiǁî gowabBelarusanǁî gowabBulgariaǁî gowabBenga" + + "liǁî gowabCzechǁî gowabDuitsXriksEngelsSpaansPersiaǁî gowabFransHaus" + + "agowabHindigowabHungariaǁî gowabIndonesiaǁî gowabIgbogowabItaliansJa" + + "paneesJavaneseKhmerǁî gowab, CentralKoreaǁî gowabMalayǁî gowabBurmes" + + "ǁî gowabNepalǁî gowabHollandsPunjabigowabPoleǁî gowabPortugeesRoman" + + "iaǁî gowabRussiaǁî gowabRwandaǁî gowabSomaliǁî gowabSwedeǁî gowabTam" + + "ilǁî gowabThaiǁî gowabTurkeǁî gowabUkrainiaǁî gowabUrduǁî gowabVietn" + + "amǁî gowabYorubabChineesǁî gowab, MandarinniZulubKhoekhoegowab", + []uint16{ // 436 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0015, 0x0015, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0037, 0x0049, + 0x0049, 0x0049, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x006e, 0x006e, 0x006e, 0x006e, 0x0073, 0x0079, 0x0079, 0x007f, + 0x007f, 0x007f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x009e, + 0x009e, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00ba, 0x00ba, 0x00ba, + // Entry 40 - 7F + 0x00ba, 0x00cd, 0x00cd, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, + 0x00de, 0x00de, 0x00e6, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + 0x00ee, 0x00ee, 0x0106, 0x0106, 0x0115, 0x0115, 0x0115, 0x0115, + 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, + 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, + 0x0115, 0x0115, 0x0115, 0x0124, 0x0124, 0x0134, 0x0134, 0x0134, + 0x0143, 0x0143, 0x014b, 0x014b, 0x014b, 0x014b, 0x014b, 0x014b, + 0x014b, 0x014b, 0x014b, 0x014b, 0x014b, 0x0157, 0x0157, 0x0165, + // Entry 80 - BF + 0x0165, 0x016e, 0x016e, 0x016e, 0x016e, 0x017f, 0x018f, 0x019f, + 0x019f, 0x019f, 0x019f, 0x019f, 0x019f, 0x019f, 0x019f, 0x019f, + 0x019f, 0x019f, 0x01af, 0x01af, 0x01af, 0x01af, 0x01af, 0x01af, + 0x01be, 0x01be, 0x01cd, 0x01cd, 0x01cd, 0x01db, 0x01db, 0x01db, + 0x01db, 0x01db, 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01fc, + 0x020a, 0x020a, 0x020a, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, + 0x021b, 0x0222, 0x0222, 0x023f, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + // Entry C0 - FF + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + // Entry 100 - 13F + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + // Entry 140 - 17F + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + // Entry 180 - 1BF + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, + 0x0244, 0x0244, 0x0244, 0x0251, + }, + }, + { // nd + "isi-Akhaniisi-Amaharikhiisi-Alabhuisi-Bhelarashiyaniisi-Bulgariaisi-Bhen" + + "galiisi-Czechisi-Jalimaniisi-Gilikiisi-Ngisiisi-Sipeyiniisi-Pheshiya" + + "niisi-Fulentshiisi-Hausaisi-Hindiisi-Hangariisi-Indonesiaisi-Igboisi" + + "-Italianoisi-Japhaniisi-Javaisi-Khambodiyaisi-Koriyaisi-Malayiisi-Bu" + + "rmaisiNdebeleisi-Nepaliisi-Dutchisi-Phunjabiisi-Pholoshiisi-Potukezi" + + "isi-Romaniisi-Rashiyaisi-Ruwandaisi-Somaliisi-Swidishiisi-Thamilisi-" + + "Thayiisi-Thekishiisi-Ukrainisi-Uduisi-Vietnameseisi-Yorubhaisi-China" + + "isi-Zulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0034, 0x0040, + 0x0040, 0x0040, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0061, 0x0061, 0x0061, 0x0061, 0x006b, 0x0074, 0x0074, 0x0080, + 0x0080, 0x0080, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x009b, + 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x00a4, + 0x00a4, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00b8, 0x00b8, 0x00b8, + // Entry 40 - 7F + 0x00b8, 0x00c5, 0x00c5, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, + 0x00d9, 0x00d9, 0x00e4, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00fa, 0x00fa, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x010e, 0x010e, 0x0117, 0x0117, 0x0121, + 0x012b, 0x012b, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0140, 0x0140, 0x014c, + // Entry 80 - BF + 0x014c, 0x0158, 0x0158, 0x0158, 0x0158, 0x0162, 0x016d, 0x0178, + 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, + 0x0178, 0x0178, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, + 0x018e, 0x018e, 0x0198, 0x0198, 0x0198, 0x01a1, 0x01a1, 0x01a1, + 0x01a1, 0x01a1, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01b7, + 0x01be, 0x01be, 0x01be, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, + 0x01cc, 0x01d7, 0x01d7, 0x01e0, 0x01e8, + }, + }, + { // ne + neLangStr, + neLangIdx, + }, + { // nl + nlLangStr, + nlLangIdx, + }, + { // nmg + "Kiɛl akanKiɛl amariaKiɛl b’árabeKiɛl belarussieKiɛl bulgariaKiɛl bengali" + + "aKiɛl bó tchɛkJámanKiɛl bó grɛkNgɛ̄lɛ̄nPaŋáKiɛl pɛrsiaFalaKiɛl máwús" + + "áKiɛl b’indienKiɛl b’ɔ́ngroisKiɛl indonesieKiɛl ikboKiɛl italiaKiɛl" + + " bó japonɛ̌Kiɛl bó javanɛ̌Kiɛl bó mɛrKiɛl koréKiɛl Malɛ̌siāKiɛl birm" + + "aniaKiɛl nepalKiɛl bóllandaisKiɛl pɛndjabiKiɛl pɔlɔŋeKiɛl bó pɔ̄rtug" + + "ɛ̂Kiɛl bó rumɛ̂nKiɛl russiaKiɛl rwandāKiɛl somaliāKiɛl bó suedoisKi" + + "ɛl tamulKiɛl thaïKiɛl bó turkKiɛl b’ukrɛ̄nienKiɛl úrduKiɛl viɛtnamY" + + "orúbâKiɛl bó chinoisZulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0016, 0x0016, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0036, 0x0044, + 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0068, 0x0068, 0x0068, 0x0068, 0x0077, 0x0083, 0x0083, 0x0089, + 0x0089, 0x0089, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x00a9, + 0x00a9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00cd, 0x00cd, 0x00cd, + // Entry 40 - 7F + 0x00cd, 0x00dc, 0x00dc, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, + 0x00f2, 0x00f2, 0x0105, 0x0118, 0x0118, 0x0118, 0x0118, 0x0118, + 0x0118, 0x0118, 0x0126, 0x0126, 0x0131, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0131, 0x0131, 0x0142, 0x0142, 0x0150, 0x0150, 0x0150, + 0x015b, 0x015b, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x017b, 0x017b, 0x018a, + // Entry 80 - BF + 0x018a, 0x01a1, 0x01a1, 0x01a1, 0x01a1, 0x01b3, 0x01bf, 0x01cc, + 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, + 0x01cc, 0x01cc, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01eb, 0x01eb, 0x01f6, 0x01f6, 0x01f6, 0x0201, 0x0201, 0x0201, + 0x0201, 0x0201, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x0224, + 0x022f, 0x022f, 0x022f, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, + 0x023d, 0x0245, 0x0245, 0x0256, 0x025a, + }, + }, + { // nn + "afarabkhasiskavestiskafrikaansakanamhariskaragonskarabiskassamesiskavari" + + "skaymaraaserbajdsjanskbasjkirskkviterussiskbulgarskbislamabambaraben" + + "galitibetanskbretonskbosniskkatalansktsjetsjenskchamorrokorsikanskcr" + + "eetsjekkiskkyrkjeslavisktsjuvanskwalisiskdansktyskdivehidzongkhaeweg" + + "reskengelskesperantospanskestiskbaskiskpersiskfulfuldefinskfijianskf" + + "ærøyskfranskvestfrisiskirskskotsk-gæliskgaliciskguaranigujaratimanx" + + "hausahebraiskhindihiri motukroatiskhaitiskungarskarmenskhererointerl" + + "inguaindonesiskinterlingueibosichuan-yiinupiakidoislandskitalienskin" + + "uittiskjapanskjavanesiskgeorgiskkikongokikuyukuanyamakasakhiskgrønla" + + "ndsk (kalaallisut)khmerkannadakoreanskkanurikasjmirikurdiskkomikorni" + + "skkirgisisklatinluxemburgskgandalimburgisklingalalaotisklitauiskluba" + + "-katangalatviskmadagassiskmarshallesiskmaorimakedonskmalayalammongol" + + "skmarathimalayiskmaltesiskburmesisknaurunord-ndebelenepalskndonganed" + + "erlandsknynorskbokmålsør-ndebelenavajonyanjaoksitanskojibwaoromoodia" + + "ossetiskpanjabipalipolskpashtoportugisiskquechuaretoromanskrundirume" + + "nskrussiskkinjarwandasanskritsardinsksindhinordsamisksangosingalesis" + + "kslovakiskslovensksamoanskshonasomalialbanskserbiskswatisørsothosund" + + "anesisksvenskswahilitamiltelugutadsjikiskthaitigrinjaturkmensktswana" + + "tongansktyrkisktsongatatarisktahitiskuiguriskukrainskurduusbekiskven" + + "davietnamesiskvolapykvallonskwolofxhosajiddiskjorubazhuangkinesiskzu" + + "luachinesiskacoliadangmeadygeiskafrihiliaghemainuakkadiskaleutisksør" + + "-altajgammalengelskangikaarameiskmapudungunarapahoarawakasu (Tanzani" + + "a)asturiskavadhibaluchibalinesiskbasabamunbejabembabena (Tanzania)bh" + + "ojpuribikolbinisiksikabrajbodobakossiburjatiskbuginesiskblincaddocar" + + "ibatsamcebuanokigachibchatsjagataiskchuukesiskmarichinookchoctawchip" + + "ewianskcherokeecheyennesoranikoptiskkrimtatariskseselwa (fransk-kreo" + + "lsk)kasjubiskdakotadargwataitadelawareslavejdogribdinkazarmadogrilåg" + + "sorbiskdualamellomnederlandskjola-fonyidyuladazagaembuefikgammalegyp" + + "tiskekajukelamitemellomengelskewondofangfilippinskfonmellomfranskgam" + + "malfransknordfrisiskaustfrisiskfriuliskgagayogbayageezgilbertesemell" + + "omhøgtyskgammalhøgtyskgondigorontalogotiskgrebogammalgresksveitserty" + + "skgusiigwichinhaidahawaiiskhiligaynonhettittiskhmonghøgsorbiskhupaib" + + "anibibioilokoingusjisklojbanngombamachamejødepersiskjødearabiskkarak" + + "alpakiskkabylekachinjjukambakawikabardisktyapmakondekabuverdianukoro" + + "khasikhotanesiskkoyra chiinikakokalenjinkimbundukonkanikosraeanskkpe" + + "llekarachay-balkarkarelskkurukhshambalabafiakølnskkumykkutenailadino" + + "langilahndalambalezghianlakotamongolozinord-luriskluba-lulualuisenol" + + "undaluolushaiolulujiamaduresiskmagahimaithilimakasarmandingomasaimok" + + "shamandarmendemerumorisyenmellomirskMakhuwa-Meettometa’micmacminangk" + + "abaumandsjumanipurimohawkmossimundangfleire språkcreekmirandesiskmar" + + "warierziamazanderaninapolitansknamalågtysknewariniasniuiskkwasiongie" + + "mboonnogaigammalnorskn’konordsothonuerklassisk newarisknyamwezinyank" + + "olenyoronzimaosageottomansk tyrkiskpangasinanpahlavipampangapapiamen" + + "topalauisknigeriansk pidgingammalpersiskfønikiskponapiskprøyssiskgam" + + "malprovençalskk’icherajasthanirapanuirarotonganskromboromaniarumensk" + + "rwasandawesakhasamaritansk arameisksamburusasaksantalingambaysangusi" + + "cilianskskotsksenaselkupiskKoyraboro Sennigammalirsktachelhitshansid" + + "amosørsamisklulesamiskenaresamiskskoltesamisksoninkesogdisksranan to" + + "ngoserersahosukumasususumeriskshimaoreklassisk syrisksyrisktemneteso" + + "terenotetumtigrétivitokelauklingontlingittamasjektonga (Nyasa)tok pi" + + "sintarokotsimshiantumbukatuvalutasawaqtuvinisksentral-tamazightudmur" + + "tugaritiskumbundurotvaivotiskvunjowalsertyskwolayttawaraywashokalmyk" + + "isksogayaoyapesiskyangbenyembakantonesiskzapotecblissymbolzenagastan" + + "dard marokkansk tamazightzuniutan språkleg innhaldzazamoderne standa" + + "rdarabiskbritisk engelsklågsaksiskflamskmoldaviskserbokroatiskforenk" + + "la kinesisktradisjonell kinesisk", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x0015, 0x001e, 0x0022, 0x002a, 0x0032, + 0x0039, 0x0043, 0x004a, 0x0050, 0x005e, 0x0067, 0x0073, 0x007b, + 0x0082, 0x0089, 0x0090, 0x0099, 0x00a1, 0x00a8, 0x00b1, 0x00bc, + 0x00c4, 0x00ce, 0x00d2, 0x00db, 0x00e8, 0x00f1, 0x00f9, 0x00fe, + 0x0102, 0x0108, 0x0110, 0x0113, 0x0118, 0x011f, 0x0128, 0x012e, + 0x0134, 0x013b, 0x0142, 0x014a, 0x014f, 0x0157, 0x0160, 0x0166, + 0x0171, 0x0175, 0x0183, 0x018b, 0x0192, 0x019a, 0x019e, 0x01a3, + 0x01ab, 0x01b0, 0x01b9, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dc, + // Entry 40 - 7F + 0x01e7, 0x01f1, 0x01fc, 0x01ff, 0x0209, 0x0210, 0x0213, 0x021b, + 0x0224, 0x022d, 0x0234, 0x023e, 0x0246, 0x024d, 0x0253, 0x025b, + 0x0264, 0x027d, 0x0282, 0x0289, 0x0291, 0x0297, 0x029f, 0x02a6, + 0x02aa, 0x02b1, 0x02ba, 0x02bf, 0x02ca, 0x02cf, 0x02d9, 0x02e0, + 0x02e7, 0x02ef, 0x02fb, 0x0302, 0x030d, 0x031a, 0x031f, 0x0328, + 0x0331, 0x0339, 0x0340, 0x0348, 0x0351, 0x035a, 0x035f, 0x036b, + 0x0372, 0x0378, 0x0383, 0x038a, 0x0391, 0x039d, 0x03a3, 0x03a9, + 0x03b2, 0x03b8, 0x03bd, 0x03c1, 0x03c9, 0x03d0, 0x03d4, 0x03d9, + // Entry 80 - BF + 0x03df, 0x03ea, 0x03f1, 0x03fc, 0x0401, 0x0408, 0x040f, 0x041a, + 0x0422, 0x042a, 0x0430, 0x043a, 0x043f, 0x044a, 0x0453, 0x045b, + 0x0463, 0x0468, 0x046e, 0x0475, 0x047c, 0x0481, 0x048a, 0x0495, + 0x049b, 0x04a2, 0x04a7, 0x04ad, 0x04b7, 0x04bb, 0x04c3, 0x04cc, + 0x04d2, 0x04da, 0x04e1, 0x04e7, 0x04ef, 0x04f7, 0x04ff, 0x0507, + 0x050b, 0x0513, 0x0518, 0x0524, 0x052b, 0x0533, 0x0538, 0x053d, + 0x0544, 0x054a, 0x0550, 0x0558, 0x055c, 0x0566, 0x056b, 0x0572, + 0x057a, 0x057a, 0x0582, 0x0587, 0x058b, 0x0593, 0x0593, 0x059b, + // Entry C0 - FF + 0x059b, 0x05a5, 0x05b2, 0x05b8, 0x05c0, 0x05ca, 0x05ca, 0x05d1, + 0x05d1, 0x05d1, 0x05d7, 0x05d7, 0x05d7, 0x05e5, 0x05e5, 0x05ed, + 0x05ed, 0x05f3, 0x05fa, 0x0604, 0x0604, 0x0608, 0x060d, 0x060d, + 0x060d, 0x0611, 0x0616, 0x0616, 0x0625, 0x0625, 0x0625, 0x0625, + 0x062d, 0x0632, 0x0636, 0x0636, 0x0636, 0x063d, 0x063d, 0x063d, + 0x0641, 0x0641, 0x0645, 0x064c, 0x0655, 0x065f, 0x065f, 0x0663, + 0x0663, 0x0668, 0x066d, 0x066d, 0x0672, 0x0679, 0x067d, 0x0684, + 0x068f, 0x0699, 0x069d, 0x06a4, 0x06ab, 0x06b6, 0x06be, 0x06c6, + // Entry 100 - 13F + 0x06cc, 0x06d3, 0x06d3, 0x06df, 0x06f7, 0x0700, 0x0706, 0x070c, + 0x0711, 0x0719, 0x071f, 0x0725, 0x072a, 0x072f, 0x0734, 0x073f, + 0x073f, 0x0744, 0x0755, 0x075f, 0x0764, 0x076a, 0x076e, 0x0772, + 0x0772, 0x0780, 0x0786, 0x078d, 0x079a, 0x079a, 0x07a0, 0x07a0, + 0x07a4, 0x07ae, 0x07ae, 0x07b1, 0x07b1, 0x07bd, 0x07c9, 0x07c9, + 0x07d4, 0x07df, 0x07e7, 0x07e9, 0x07e9, 0x07e9, 0x07ed, 0x07f2, + 0x07f2, 0x07f6, 0x0800, 0x0800, 0x080e, 0x081c, 0x081c, 0x0821, + 0x082a, 0x0830, 0x0835, 0x0840, 0x084c, 0x084c, 0x084c, 0x0851, + // Entry 140 - 17F + 0x0858, 0x085d, 0x085d, 0x0865, 0x0865, 0x086f, 0x0879, 0x087e, + 0x0889, 0x0889, 0x088d, 0x0891, 0x0897, 0x089c, 0x08a5, 0x08a5, + 0x08a5, 0x08ab, 0x08b1, 0x08b8, 0x08c4, 0x08d0, 0x08d0, 0x08dd, + 0x08e3, 0x08e9, 0x08ec, 0x08f1, 0x08f5, 0x08fe, 0x08fe, 0x0902, + 0x0909, 0x0915, 0x0915, 0x0919, 0x0919, 0x091e, 0x0929, 0x0935, + 0x0935, 0x0935, 0x0939, 0x0941, 0x0949, 0x0949, 0x0950, 0x095a, + 0x0960, 0x096f, 0x096f, 0x096f, 0x0976, 0x097c, 0x0984, 0x0989, + 0x0990, 0x0995, 0x099c, 0x09a2, 0x09a7, 0x09ad, 0x09b2, 0x09ba, + // Entry 180 - 1BF + 0x09ba, 0x09ba, 0x09ba, 0x09c0, 0x09c0, 0x09c5, 0x09c9, 0x09d4, + 0x09d4, 0x09de, 0x09e5, 0x09ea, 0x09ed, 0x09f3, 0x09fb, 0x09fb, + 0x09fb, 0x0a05, 0x0a05, 0x0a0b, 0x0a13, 0x0a1a, 0x0a22, 0x0a27, + 0x0a27, 0x0a2d, 0x0a33, 0x0a38, 0x0a3c, 0x0a44, 0x0a4e, 0x0a5c, + 0x0a63, 0x0a69, 0x0a74, 0x0a7b, 0x0a83, 0x0a89, 0x0a8e, 0x0a8e, + 0x0a95, 0x0aa2, 0x0aa7, 0x0ab2, 0x0ab9, 0x0ab9, 0x0ab9, 0x0abe, + 0x0ac9, 0x0ac9, 0x0ad4, 0x0ad8, 0x0ae0, 0x0ae6, 0x0aea, 0x0af0, + 0x0af0, 0x0af6, 0x0aff, 0x0b04, 0x0b0f, 0x0b0f, 0x0b15, 0x0b1e, + // Entry 1C0 - 1FF + 0x0b22, 0x0b33, 0x0b3b, 0x0b43, 0x0b48, 0x0b4d, 0x0b52, 0x0b63, + 0x0b6d, 0x0b74, 0x0b7c, 0x0b86, 0x0b8e, 0x0b8e, 0x0b9f, 0x0b9f, + 0x0b9f, 0x0bac, 0x0bac, 0x0bb5, 0x0bb5, 0x0bb5, 0x0bbd, 0x0bc7, + 0x0bd9, 0x0be1, 0x0be1, 0x0beb, 0x0bf2, 0x0bfe, 0x0bfe, 0x0bfe, + 0x0c03, 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c11, 0x0c14, 0x0c1b, + 0x0c20, 0x0c34, 0x0c3b, 0x0c40, 0x0c47, 0x0c47, 0x0c4e, 0x0c53, + 0x0c5d, 0x0c63, 0x0c63, 0x0c63, 0x0c63, 0x0c67, 0x0c67, 0x0c70, + 0x0c7f, 0x0c89, 0x0c89, 0x0c92, 0x0c96, 0x0c96, 0x0c9c, 0x0c9c, + // Entry 200 - 23F + 0x0c9c, 0x0ca6, 0x0cb0, 0x0cbb, 0x0cc7, 0x0cce, 0x0cd5, 0x0ce1, + 0x0ce6, 0x0cea, 0x0cea, 0x0cf0, 0x0cf4, 0x0cfc, 0x0d04, 0x0d13, + 0x0d19, 0x0d19, 0x0d19, 0x0d1e, 0x0d22, 0x0d28, 0x0d2d, 0x0d33, + 0x0d37, 0x0d3e, 0x0d3e, 0x0d45, 0x0d4c, 0x0d4c, 0x0d54, 0x0d61, + 0x0d6a, 0x0d6a, 0x0d70, 0x0d70, 0x0d79, 0x0d79, 0x0d80, 0x0d86, + 0x0d8d, 0x0d95, 0x0da6, 0x0dac, 0x0db5, 0x0dbc, 0x0dbf, 0x0dc2, + 0x0dc2, 0x0dc2, 0x0dc2, 0x0dc2, 0x0dc8, 0x0dc8, 0x0dcd, 0x0dd7, + 0x0ddf, 0x0de4, 0x0de9, 0x0de9, 0x0de9, 0x0df2, 0x0df2, 0x0df6, + // Entry 240 - 27F + 0x0df9, 0x0e01, 0x0e08, 0x0e0d, 0x0e0d, 0x0e18, 0x0e1f, 0x0e29, + 0x0e29, 0x0e2f, 0x0e4c, 0x0e50, 0x0e66, 0x0e6a, 0x0e81, 0x0e81, + 0x0e81, 0x0e81, 0x0e81, 0x0e81, 0x0e90, 0x0e90, 0x0e90, 0x0e90, + 0x0e90, 0x0e90, 0x0e90, 0x0e90, 0x0e9b, 0x0ea1, 0x0ea1, 0x0ea1, + 0x0eaa, 0x0eb7, 0x0eb7, 0x0ec8, 0x0edd, + }, + }, + { // nnh + "nzǎmɔ̂ɔnngilísèShwóŋò menkesaŋfelaŋséeShwóŋò pʉa mbasǎShwóŋò pamomShwóŋò" + + " pʉa nzsekàʼaShwóŋò pafudShwóŋò pʉ̀a njinikomShwóŋò pakɔsiShwóŋò mbu" + + "luShwóŋò ngáŋtÿɔʼShwóŋò pʉa YɔɔnmendiShwóŋò pʉa shÿó BɛgtùaShwóŋò ng" + + "iembɔɔnShwóŋò pʉa shÿó MbafìaShwóŋò Tsaŋ", + []uint16{ // 580 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0028, 0x0028, 0x0028, 0x0028, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + // Entry 40 - 7F + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + // Entry 80 - BF + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + // Entry C0 - FF + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0047, 0x0056, 0x0056, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x007e, 0x007e, 0x007e, + 0x007e, 0x007e, 0x007e, 0x007e, 0x0097, 0x0097, 0x0097, 0x0097, + 0x0097, 0x0097, 0x0097, 0x00a8, 0x00a8, 0x00a8, 0x00b7, 0x00b7, + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + // Entry 100 - 13F + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + // Entry 140 - 17F + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + // Entry 180 - 1BF + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + // Entry 1C0 - 1FF + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + // Entry 200 - 23F + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + // Entry 240 - 27F + 0x011b, 0x011b, 0x0138, 0x0147, + }, + }, + { // no + noLangStr, + noLangIdx, + }, + { // nus + "Thok aka̱niThok bunyniThok JalabniThok bäläruthaThok bälga̱a̱rianiThok b" + + "ängaliThok cikThok jarmaniThok girikniThok liŋli̱thniThok i̱thpaani" + + "aniThok perthianiThok pɔrɔthaniThok ɣowthaniThok ɣändiniThok ɣänga̱a" + + "̱riɛniThok indunithianiThok i̱gboniThok i̱talianiThok japanniThok j" + + "abanithniThok kameeriThok kurianiThok mayɛyniThok bormi̱thniThok nap" + + "alniThok da̱cThok puɔnjabaniThok pölicniThok puɔtigaliThok ji̱ römTh" + + "ok ra̱ciaaniThok ruaandaniThok thomaalianiThok i̱thwidicniThok tamil" + + "niThok tayniThok turkicniThok ukeraaniniThok udoniThok betnaamniThok" + + " yurubaniThok caynaThok dhuluniThok Nath", + []uint16{ // 449 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0017, 0x0017, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0033, 0x0048, + 0x0048, 0x0048, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0075, 0x0086, 0x0086, 0x0098, + 0x0098, 0x0098, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00c4, + 0x00c4, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00e9, 0x00e9, 0x00e9, + // Entry 40 - 7F + 0x00e9, 0x00fa, 0x00fa, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0116, 0x0116, 0x0122, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0131, 0x013d, 0x013d, 0x0149, 0x0149, 0x0149, 0x0149, + 0x0149, 0x0149, 0x0149, 0x0149, 0x0149, 0x0149, 0x0149, 0x0149, + 0x0149, 0x0149, 0x0149, 0x0149, 0x0149, 0x0149, 0x0149, 0x0149, + 0x0149, 0x0149, 0x0149, 0x0156, 0x0156, 0x0166, 0x0166, 0x0166, + 0x0172, 0x0172, 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, + 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, 0x018c, 0x018c, 0x0199, + // Entry 80 - BF + 0x0199, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01b6, 0x01c5, 0x01d3, + 0x01d3, 0x01d3, 0x01d3, 0x01d3, 0x01d3, 0x01d3, 0x01d3, 0x01d3, + 0x01d3, 0x01d3, 0x01e3, 0x01e3, 0x01e3, 0x01e3, 0x01e3, 0x01e3, + 0x01f4, 0x01f4, 0x0200, 0x0200, 0x0200, 0x020a, 0x020a, 0x020a, + 0x020a, 0x020a, 0x0217, 0x0217, 0x0217, 0x0217, 0x0217, 0x0226, + 0x0230, 0x0230, 0x0230, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, + 0x023e, 0x024b, 0x024b, 0x0255, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + // Entry C0 - FF + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + // Entry 100 - 13F + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + // Entry 140 - 17F + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + // Entry 180 - 1BF + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + // Entry 1C0 - 1FF + 0x026a, + }, + }, + { // nyn + "OrukaniOrumarikiOruharabuOruberarusiOruburugariyaOrubengariOruceekiOrugi" + + "rimaaniOruguriikiOrungyerezaOrusupaaniOrupaasiyaOrufaransaOruhausaOr" + + "uhindiOruhangareOruindoneziaOruiboOruyitareOrujapaaniOrujavaOrukambo" + + "diyaOrukoreyaOrumalesiyaOruburumaOrunepaliOrudaakiOrupungyabiOrupoor" + + "iOrupocugoOruromaniaOrurrashaOrunyarwandaOrusomaariOruswidiOrutamiri" + + "OrutailandiOrukurukiOrukurainiOru-UruduOruviyetinaamuOruyorubaOrucha" + + "inaOruzuruRunyankore", + []uint16{ // 452 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0010, 0x0010, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0031, + 0x0031, 0x0031, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + 0x004f, 0x004f, 0x004f, 0x004f, 0x0059, 0x0064, 0x0064, 0x006e, + 0x006e, 0x006e, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x008a, + 0x008a, 0x0092, 0x0092, 0x0092, 0x0092, 0x009c, 0x009c, 0x009c, + // Entry 40 - 7F + 0x009c, 0x00a8, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00b7, 0x00b7, 0x00c1, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00d4, 0x00d4, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00e8, 0x00e8, 0x00f1, 0x00f1, 0x00f1, + 0x00fa, 0x00fa, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x010d, 0x010d, 0x0115, + // Entry 80 - BF + 0x0115, 0x011e, 0x011e, 0x011e, 0x011e, 0x0128, 0x0131, 0x013d, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, + 0x013d, 0x013d, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, + 0x014f, 0x014f, 0x0158, 0x0158, 0x0158, 0x0163, 0x0163, 0x0163, + 0x0163, 0x0163, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x0176, + 0x017f, 0x017f, 0x017f, 0x018d, 0x018d, 0x018d, 0x018d, 0x018d, + 0x018d, 0x0196, 0x0196, 0x019f, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + // Entry C0 - FF + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + // Entry 100 - 13F + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + // Entry 140 - 17F + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + // Entry 180 - 1BF + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + // Entry 1C0 - 1FF + 0x01a6, 0x01a6, 0x01a6, 0x01b0, + }, + }, + { // om + "AfrikootaAfaan SidaamaaArabiffaaAfaan AzerbaijaniAfaan BelarusiaAfaan Bu" + + "lgariyaAfaan BaangladeshiAfaan BosniyaaAfaan KatalaaAfaan CzechWelis" + + "hiffaaAfaan DeenmaarkAfaan JarmaniiAfaan GiriikiIngliffaAfaan Espera" + + "ntooAfaan IspeenAfaan IstooniyaAfaan BaskuuAfaan PersiaAfaan Fiilaan" + + "diAfaan FaroeseAfaan FaransaayiiAfaan FirisiyaaniAfaan AyirishiiScot" + + "s GaelicAfaan GalishiiAfaan GuaraniAfaan GujaratiAfaan HebrewAfaan H" + + "indiiAfaan CroatianAfaan HangaariInterlinguaAfaan IndoneziyaAyiislan" + + "diffaaAfaan XaaliyaaniAfaan JapaniiAfaan JavaAfaan GeorgianAfaan Kan" + + "nadaAfaan KoreaAfaan LaatiniAfaan LiituniyaaAfaan LativiyaaAfaan Mac" + + "edooniyaaMalayaalamiffaaAfaan MaratiiMalaayiffaaAfaan MaltesiiAfaan " + + "NepaliiAfaan DachiiAfaan NorwegianAfaan NorweyiiAfaan OccitOromooAfa" + + "an PunjabiiAfaan PolandiiAfaan PorchugaalAfaan RomaniyaaAfaan Rushiy" + + "aaAfaan SinhaleseAfaan SlovakAfaan IslovaniyaaAfaan AlbaniyaaAfaan S" + + "erbiyaAfaan SudaaniiAfaan SuwidiinSuwahiliiAfaan TamiliiAfaan Telugu" + + "Afaan TayiiAfaan TigireeLammii TurkiiAfaan TurkiiAfaan UkreeniiAfaan" + + " UrduAfaan UzbekAfaan VeetinamAfaan XhosaChineseAfaan ZuuluAfaan Fil" + + "ippiniiAfaan KilingonAfaan Portugali (Braazil)Afaan Protuguese", + []uint16{ // 608 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0017, 0x0017, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0031, 0x0031, 0x0040, 0x004f, + 0x004f, 0x004f, 0x0061, 0x0061, 0x0061, 0x006f, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x0087, 0x0087, 0x0087, 0x0092, 0x00a1, + 0x00af, 0x00af, 0x00af, 0x00af, 0x00bc, 0x00c4, 0x00d4, 0x00e0, + 0x00ef, 0x00fb, 0x0107, 0x0107, 0x0116, 0x0116, 0x0123, 0x0134, + 0x0145, 0x0154, 0x0160, 0x016e, 0x017b, 0x0189, 0x0189, 0x0189, + 0x0195, 0x01a1, 0x01a1, 0x01af, 0x01af, 0x01bd, 0x01bd, 0x01bd, + // Entry 40 - 7F + 0x01c8, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01e6, + 0x01f6, 0x01f6, 0x0203, 0x020d, 0x021b, 0x021b, 0x021b, 0x021b, + 0x021b, 0x021b, 0x021b, 0x0228, 0x0233, 0x0233, 0x0233, 0x0233, + 0x0233, 0x0233, 0x0233, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0250, 0x0250, 0x025f, 0x025f, 0x025f, 0x025f, 0x0271, + 0x0280, 0x0280, 0x028d, 0x0298, 0x02a6, 0x02a6, 0x02a6, 0x02a6, + 0x02b3, 0x02b3, 0x02bf, 0x02ce, 0x02dc, 0x02dc, 0x02dc, 0x02dc, + 0x02e7, 0x02e7, 0x02ed, 0x02ed, 0x02ed, 0x02fb, 0x02fb, 0x0309, + // Entry 80 - BF + 0x0309, 0x0319, 0x0319, 0x0319, 0x0319, 0x0328, 0x0336, 0x0336, + 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0345, 0x0351, 0x0362, + 0x0362, 0x0362, 0x0362, 0x0371, 0x037e, 0x037e, 0x037e, 0x038c, + 0x039a, 0x03a3, 0x03b0, 0x03bc, 0x03bc, 0x03c7, 0x03d4, 0x03e1, + 0x03e1, 0x03e1, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03fb, + 0x0405, 0x0410, 0x0410, 0x041e, 0x041e, 0x041e, 0x041e, 0x0429, + 0x0429, 0x0429, 0x0429, 0x0430, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + // Entry C0 - FF + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + // Entry 100 - 13F + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, + 0x043b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + // Entry 140 - 17F + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + // Entry 180 - 1BF + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + // Entry 1C0 - 1FF + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + // Entry 200 - 23F + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x044b, 0x044b, 0x044b, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + // Entry 240 - 27F + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0472, 0x0482, + }, + }, + { // or + "ଅଫାର୍ଆବ୍ଖାଜିଆନ୍ଅବେସ୍ତନଆଫ୍ରିକାନସ୍ଅକନ୍ଆମହାରକିଆର୍ଗୋନୀଆରବିକ୍ଆସାମୀଆଭାରିକ୍ଆୟମା" + + "ରାଆଜେରବାଇଜାନିବଶଖିର୍ବେଲାରୁଷିଆନ୍ବୁଲଗେରିଆନ୍ବିସଲାମାବାମ୍ବାରାବଙ୍ଗାଳୀତିବେ" + + "ତାନ୍ବ୍ରେଟନ୍କାଟଲାନ୍କାଟାଲାନ୍ଚେଚନ୍ଚାମୋରୋକୋର୍ସିକାନ୍କ୍ରୀଚେକ୍ଚର୍ଚ୍ଚ ସ୍ଲା" + + "ଭିକ୍ଚୁଭାଶ୍ୱେଲ୍ସଡାନ୍ନିସ୍ଜର୍ମାନ୍ଡିଭେହୀଭୂଟାନୀଇୱେଗ୍ରୀକ୍ଇଂରାଜୀଏସ୍ପାରେଣ୍" + + "ଟୋସ୍ପାନିସ୍ଏସ୍ତୋନିଆନ୍ବାସ୍କ୍ୱିପର୍ସିଆନ୍ଫୁଲାହଫିନ୍ନିସ୍ଫିଜିଫାରୋଏସେଫ୍ରେଞ୍" + + "ଚପଶ୍ଚିମ ଫ୍ରିସିୟନ୍ଇରିସ୍ସ୍କଟିସ୍ ଗାଏଲିକ୍ଗାଲସିଆନ୍ଗୁଆରାନୀଗୁଜୁରାଟୀମାଁକ୍ସ" + + "ହୌସାହେବ୍ର୍ୟୁହିନ୍ଦୀହିରି ମୋଟୁକ୍ରୋଆଟିଆନ୍ହୈତାୟିନ୍ହଙ୍ଗେରିଆନ୍ଆର୍ମେନିଆନ୍ହ" + + "େରେରୋଇର୍ଣ୍ଟଲିଙ୍ଗୁଆଇଣ୍ଡୋନେସିଆନ୍ଇର୍ଣ୍ଟରଲିଙ୍ଗୁଇଇଗ୍ବୋସିଚୁଆନ୍ ୟୀଇନୁପିୟା" + + "କ୍ଇଡୋଆଇସଲାଣ୍ଡିକ୍ଇଟାଲିଆନ୍ଇନକୀଟୁତ୍ଜାପାନୀଜ୍ଜାଭାନୀଜ୍ଜର୍ଜିଆନ୍କଙ୍ଗୋକୀକୁୟ" + + "ୁକ୍ୱାନ୍ୟାମ୍କାଜାକ୍ଗ୍ରୀନଲାଣ୍ଡିକ୍ଖ୍ମେର୍କନ୍ନଡକୋରିଆନ୍କନୁରୀକାଶ୍ମିରୀକୁର୍ଦ" + + "୍ଦିଶ୍କୋମିକୋର୍ନିସ୍କିରଗିଜ୍ଲାଟିନ୍ଲକ୍ସେମବର୍ଗିସ୍ଗନ୍ଦାଲିମ୍ବୁର୍ଗିସ୍ଲିଙ୍ଗା" + + "ଲାଲାଓଲିଥୁଆନିଆନ୍ଲ୍ୟୁବା-କାଟାଙ୍ଗାଲାଟଭିଆନ୍ମାଲାଗାସୀମାର୍ଶାଲୀଜ୍ମାଓରୀମାକଡୋ" + + "ନିଆନ୍ମାଲାୟଲମ୍ମଙ୍ଗୋଲିଆନ୍ମରାଠୀମାଲୟମାଲଟୀଜ୍ବର୍ମୀଜ୍ନାଉରୁଉତ୍ତର ନେଡବେଲେନେ" + + "ପାଳୀଡୋଙ୍ଗାଡଚ୍ନରୱେଜିଆନ୍ ନିୟୋର୍ସ୍କନରୱେଜିଆନ୍ ବୋକମଲ୍ଦକ୍ଷିଣ ନେଡବେଲେନାଭା" + + "ଜୋନିୟାଞ୍ଜଓସିଟାନ୍ଓଜିୱାଓରୋମୋଓଡ଼ିଆଓସେଟିକ୍ପଞ୍ଜାବୀପାଲିପୋଲିଶ୍ପାସ୍ତୋପର୍ତ୍" + + "ତୁଗ୍ରୀଜ୍କ୍ୱେଚୁଆରେହେଟୋ-ରୋମାନ୍ସରୁଣ୍ଡିରୋମାନିଆନ୍ରଷିଆନ୍କିନ୍ୟାରୱାଣ୍ଡାସଂସ" + + "୍କୃତସର୍ଦିନିଆନ୍ସିନ୍ଧୀଉତ୍ତର ସାମିସାଙ୍ଗୋସିଂହଳସ୍ଲୋଭାକ୍ସ୍ଲୋଭେନିଆନ୍ସାମୋଆନ" + + "୍ଶୋନାସୋମାଲିଆଆଲବାନିଆନ୍ସର୍ବିଆନ୍ସ୍ବାତୀସେସୋଥୋସୁଦାନୀଜ୍ସ୍ୱେଡିସ୍ସ୍ୱାହିଲ୍ତ" + + "ାମିଲ୍ତେଲୁଗୁତାଜିକ୍ଥାଇଟ୍ରିଗିନିଆତୁର୍କମେନ୍ସେସ୍ବାନାଟୋଙ୍ଗାତୁର୍କିସ୍ସୋଂଗାତ" + + "ାତାର୍ତାହିତିଆନ୍ୟୁଘୁର୍ୟୁକ୍ରାନିଆନ୍ଉର୍ଦ୍ଦୁଉଜବେକ୍ଭେଣ୍ଡାଭିଏତନାମିଜ୍ବୋଲାପୁ" + + "କୱାଲୁନ୍ୱୋଲଫ୍ଖୋସାୟିଡିସ୍ୟୋରୁବାଜୁଆଙ୍ଗଚାଇନୀଜ୍ଜୁଲୁଆଚାଇନୀଜ୍ଆକୋଲିଆଦାଙ୍ଗେମ" + + "୍ଅଦ୍ୟଘେଆଫ୍ରିହିଲିଆଇନୁଆକାଡିଆନ୍ଆଲେଇଟୁଦକ୍ଷିଣ ଆଲ୍ଟାଇପୁରୁଣା ଇଁରାଜୀଅଁଗୀକା" + + "ଆରାମାଇକ୍ଆରାଉକାନିଆନ୍ଆରାପାହୋଆରୱକଆଷ୍ଟୁରିଆନ୍ଆୱାଧିବାଲୁଚିବାଲିନୀଜ୍ବାସାବେଜ" + + "ାବେମ୍ବାଭୋଜପୁରୀବିକୋଲ୍ବିନିବିକ୍ସିକାବ୍ରାଜ୍ବୁରିଆଟ୍ବୁଗୀନୀଜ୍ବ୍ଲିନ୍କାଡୋକାର" + + "ିବ୍ଆତ୍ସମ୍ସୀବୁଆନୋଚିବ୍ଚାଛଗତାଇଚୁକୀସେମାରୀଚିନୁକ୍ ଜାରଗାଁନ୍ଚୋଟୱାଚିପେୱାନ୍ଚ" + + "େରୋକୀଚେଚେନାକପ୍ଟିକ୍କ୍ରୀମିନ୍ ତୁର୍କୀସ୍କାଶୁବିଆନ୍ଡାକୋଟାଡାରାଗ୍ୱାଡେଲାୱେର୍" + + "ସ୍ଲେଭ୍ଡୋଗ୍ରିବ୍ଦିଙ୍କାଡୋଗ୍ରୀନିଚଳା ସର୍ବିଆନ୍ଡୁଆନାମଧ୍ୟ ପର୍ତ୍ତୁଗାଲୀଡୁଆଲା" + + "ଏଫିକ୍ପ୍ରାଚୀନ୍ ମିଶିରିଏକାଜୁକ୍ଏଲାମାଇଟ୍ମଧ୍ୟ ଇଁରାଜୀଇୱୋଣ୍ଡୋଫାଙ୍ଗଫିଲିପିନୋ" + + "ଫନ୍ମଧ୍ୟ ଫ୍ରେଞ୍ଚପୁରୁଣା ଫ୍ରେଞ୍ଚଉତ୍ତର ଫ୍ରିସିୟାନ୍ପୂର୍ବ ଫ୍ରିସିୟାନ୍ଫ୍ରିୟ" + + "ୁଲୀୟାନ୍ଗାଗାୟୋଗବାୟାଗୀଜ୍ଜିବ୍ରାଟୀଜ୍ମିଡିଲ୍ ହାଇ ଜର୍ମାନ୍ପୁରୁଣା ହାଇ ଜର୍ମା" + + "ନ୍ଗୋଣ୍ଡିଗୋରୋଣ୍ଟାଲୋଗୋଥିକ୍ଗ୍ରେବୋପ୍ରାଚୀନ୍ ୟୁନାନୀସ୍ବିସ୍ ଜର୍ମାନ୍ସ୍ବିଚ୍ " + + "ଇନ୍ହାଇଡାହାୱାଇନ୍ହିଲିଗୈନନ୍ହିତୀତେହଁଙ୍ଗଉପର ସର୍ବିଆନ୍ହୁପାଇବାନ୍ଇଲୋକୋଇଁଙ୍ଗ" + + "ୁଶ୍ଲୋଜବାନ୍ଜୁଡେଓ-ପର୍ସିଆନ୍ଜୁଡେଓ-ଆରବୀକ୍କାରା-କଲ୍ପକ୍କବାଇଲ୍କଚିନ୍ଜ୍ଜୁକମ୍ବ" + + "ାକାୱିକାବାର୍ଡିଆନ୍ତ୍ୟାପ୍କୋରୋଖାସୀଖୋତାନୀଜ୍କିମ୍ବୁଣ୍ଡୁକୋନକାନୀକୋସରୈନ୍କୈପେ" + + "ଲେକରାଚୟ-ବଲ୍କାରକାରେଲିୟାନ୍କୁରୁଖକୁମୀକ୍କୁତେନାଉଲାଦିନୋଲାହାଣ୍ଡାଲାମ୍ବାଲେଜଗ" + + "ିୟାନ୍ମଙ୍ଗୋଲୋଜିଲୁବା-ଲୁଲୁଆଲୁଇସେନୋଲୁଣ୍ଡାଲୁଓଲୁସାଉମାଦୁରୀସ୍ମାଗାହୀମୈଥିଳୀମ" + + "କାସର୍ମାଣ୍ଡିଙ୍ଗୋମାସାଇମୋକ୍ଷମନ୍ଦାରମେଣ୍ଡେମଧ୍ୟ ଇରିଶ୍ମିକମୌକ୍ମିନାଙ୍ଗାବାଉମ" + + "ାଞ୍ଚୁମଣିପୁରୀମୋହୌକମୋସିବିବିଧ ଭାଷାମାନକ୍ରୀକ୍ମିରାଣ୍ଡିଜ୍ମାରୱାରୀଏର୍ଜୟାନୀପ" + + "ୋଲିଟାନ୍ଲୋ ଜର୍ମାନ୍ନେୱାରୀନୀୟାସ୍ନିୟୁଆନ୍ନୋଗାଇପୁରୁଣା ନର୍ସଏନ୍କୋଉତ୍ତରୀ ସୋ" + + "ଥୋପାରମ୍ପରିକ ନେୱାରୀନ୍ୟାମୱେଜୀନ୍ୟାନକୋଲ୍ନ୍ୟାରୋଞ୍ଜିମାୱୌସେଜ୍ଓଟ୍ଟୋମନ୍ ତୁର" + + "୍କିସ୍ପାଙ୍ଗାସିନିଆନ୍ପାହ୍ଲାଭିପାମ୍ପାଙ୍ଗାପାପିୟାମିଣ୍ଟୋପାଲାଉଆନ୍ପୁରୁଣା ପର୍" + + "ସିଆନ୍ଫୋନେସିଆନ୍ପୋହପିଏନ୍ପୁରୁଣା ପ୍ରେଭେନେସିଆଲ୍ରାଜସ୍ଥାନୀରାପାନୁଇରାରୋତୋଙ୍" + + "ଗନ୍ରୋମାନିଆରୋମାନିଆନ୍ସଣ୍ଡାୱେୟାକୁଟ୍ସାମୌରିଟନ୍ ଆରମାଇକ୍ସାସାକ୍ସାନ୍ତାଳିସିଶ" + + "ିଲିଆନ୍ସ୍କଟସ୍ସେଲ୍କପ୍ପୁରୁଣା ଇରିଶ୍ଶାନ୍ସିଦାମୋଦକ୍ଷିଣ ସାମିଲୁଲେ ସାମିଇନାରୀ" + + " ସାମିସ୍କୋଲ୍ଟ ସାମୀସୋନିଙ୍କେସୋଗଡିଏନ୍ଶାରାନା ଟୋଙ୍ଗୋଶେରେର୍ସୁକୁମାଶୁଶୁସୁମେରି" + + "ଆନ୍କ୍ଲାସିକାଲ୍ ସିରିକ୍ସିରିକ୍ତିମନେତେରେନୋତେତୁମ୍ଟାଇଗ୍ରେତୀଭ୍ଟୋକେଲାଉକ୍ଲିଙ" + + "୍ଗନ୍ତ୍ଲିଙ୍ଗିଟ୍ତାମାଶେକ୍ନ୍ୟାସା ଟୋଙ୍ଗୋଟୋକ୍ ପିସିନ୍ତିସିମିସିଆନ୍ଟୁମ୍ବୁକାତ" + + "ୁଭାଲୁତୁଭିନିଆନ୍ଉଦମୂର୍ତ୍ତୟୁଗୋରଟିକ୍ଉମ୍ବୁଣ୍ଡୁମୂଳଭାଇଭୋଟିକ୍ୱାଲମୋୱାରୈୱାସୋ" + + "କାଲ୍ମୀକ୍ୟାଓୟାପୀସ୍ଜାପୋଟେକ୍ବ୍ଲିସିମ୍ବଲସ୍ଜେନାଗାଜୁନୀକୌଣସି ଲିଙ୍ଗୁଇଷ୍ଟ ସା" + + "ମଗ୍ରୀ ନାହିଁଜାଜାଅଷ୍ଟ୍ରିଆନ୍ ଜର୍ମାନସ୍ବିସ୍ ହାଇ ଜର୍ମାନ୍ଅଷ୍ଟ୍ରେଲିଆନ୍ ଇଁର" + + "ାଜୀକାନାଡିଆନ୍ ଇଁରାଜୀବ୍ରିଟିଶ୍ ଇଁରାଜୀୟୁ.ଏସ୍. ଇଁରାଜୀଲାଟିନ୍ ଆମେରିକାନ୍ ସ" + + "୍ପାନିଶ୍ଲେବେରିଆନ୍ ସ୍ପାନିଶ୍କାନାଡିଆନ୍ ଫ୍ରେଞ୍ଚସ୍ବିସ୍ ଫ୍ରେଞ୍ଚ୍ଫ୍ଲେମିଶ୍ବ" + + "୍ରାଜିଲିଆନ୍ ପର୍ତ୍ତୁଗୀଜ୍ଲେବେରିଆନ୍ ପର୍ତ୍ତୁଗୀଜ୍ମୋଲଡୋଭିଆନ୍ସର୍ବୋ-କ୍ରୋଆଟି" + + "ଆନ୍ସରଳିକରଣ ଚାଇନୀଜ୍ପାରମ୍ପରିକ ଚାଇନୀଜ୍", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x002d, 0x0042, 0x0060, 0x006c, 0x0081, 0x0096, + 0x00a8, 0x00b7, 0x00cc, 0x00de, 0x00ff, 0x0111, 0x0132, 0x0150, + 0x0165, 0x017d, 0x0192, 0x01aa, 0x01bf, 0x01d4, 0x01ec, 0x01fb, + 0x020d, 0x022b, 0x0237, 0x0243, 0x026e, 0x0280, 0x028f, 0x02a7, + 0x02bc, 0x02ce, 0x02e0, 0x02e9, 0x02fb, 0x030d, 0x032e, 0x0346, + 0x0364, 0x037c, 0x0394, 0x03a3, 0x03bb, 0x03c7, 0x03dc, 0x03f1, + 0x041f, 0x042e, 0x0459, 0x0471, 0x0486, 0x049e, 0x04b0, 0x04bc, + 0x04d4, 0x04e6, 0x04ff, 0x051d, 0x0535, 0x0553, 0x0571, 0x0583, + // Entry 40 - 7F + 0x05aa, 0x05ce, 0x05f8, 0x0607, 0x0623, 0x063e, 0x0647, 0x0668, + 0x0680, 0x0698, 0x06b0, 0x06c8, 0x06e0, 0x06ef, 0x0701, 0x071f, + 0x0731, 0x0758, 0x076a, 0x0779, 0x078e, 0x079d, 0x07b5, 0x07d3, + 0x07df, 0x07f7, 0x080c, 0x081e, 0x0845, 0x0854, 0x0878, 0x0890, + 0x0899, 0x08b7, 0x08e2, 0x08fa, 0x0912, 0x0930, 0x093f, 0x095d, + 0x0975, 0x0993, 0x09a2, 0x09ae, 0x09c3, 0x09d8, 0x09e7, 0x0a0c, + 0x0a1e, 0x0a30, 0x0a39, 0x0a70, 0x0a9e, 0x0ac6, 0x0ad8, 0x0aed, + 0x0b02, 0x0b11, 0x0b20, 0x0b2f, 0x0b44, 0x0b59, 0x0b65, 0x0b77, + // Entry 80 - BF + 0x0b89, 0x0bb0, 0x0bc5, 0x0bed, 0x0bff, 0x0c1a, 0x0c2c, 0x0c53, + 0x0c68, 0x0c86, 0x0c98, 0x0cb4, 0x0cc6, 0x0cd5, 0x0ced, 0x0d0e, + 0x0d23, 0x0d2f, 0x0d44, 0x0d5f, 0x0d77, 0x0d89, 0x0d9b, 0x0db3, + 0x0dcb, 0x0de3, 0x0df5, 0x0e07, 0x0e19, 0x0e22, 0x0e3d, 0x0e58, + 0x0e70, 0x0e82, 0x0e9a, 0x0ea9, 0x0ebb, 0x0ed6, 0x0ee8, 0x0f09, + 0x0f1e, 0x0f30, 0x0f42, 0x0f60, 0x0f75, 0x0f87, 0x0f96, 0x0fa2, + 0x0fb4, 0x0fc6, 0x0fd8, 0x0fed, 0x0ff9, 0x1011, 0x1020, 0x103b, + 0x104d, 0x104d, 0x1068, 0x1068, 0x1074, 0x108c, 0x108c, 0x109e, + // Entry C0 - FF + 0x109e, 0x10c3, 0x10e8, 0x10fa, 0x1112, 0x1133, 0x1133, 0x1148, + 0x1148, 0x1148, 0x1154, 0x1154, 0x1154, 0x1154, 0x1154, 0x1172, + 0x1172, 0x1181, 0x1193, 0x11ab, 0x11ab, 0x11b7, 0x11b7, 0x11b7, + 0x11b7, 0x11c3, 0x11d5, 0x11d5, 0x11d5, 0x11d5, 0x11d5, 0x11d5, + 0x11ea, 0x11fc, 0x1208, 0x1208, 0x1208, 0x1220, 0x1220, 0x1220, + 0x1232, 0x1232, 0x1232, 0x1232, 0x1247, 0x125f, 0x125f, 0x1271, + 0x1271, 0x127d, 0x128f, 0x128f, 0x12a1, 0x12b6, 0x12b6, 0x12c8, + 0x12d7, 0x12e9, 0x12f5, 0x1320, 0x132f, 0x1347, 0x1359, 0x136b, + // Entry 100 - 13F + 0x136b, 0x1380, 0x1380, 0x13b1, 0x13b1, 0x13cc, 0x13de, 0x13f6, + 0x13f6, 0x140e, 0x1420, 0x1438, 0x144a, 0x144a, 0x145c, 0x1484, + 0x1484, 0x1493, 0x14c1, 0x14c1, 0x14d0, 0x14d0, 0x14d0, 0x14df, + 0x14df, 0x150a, 0x151f, 0x1537, 0x1556, 0x1556, 0x156b, 0x156b, + 0x157a, 0x1592, 0x1592, 0x159b, 0x159b, 0x15bd, 0x15e5, 0x15e5, + 0x1613, 0x1641, 0x1665, 0x166b, 0x166b, 0x166b, 0x1677, 0x1686, + 0x1686, 0x1692, 0x16b0, 0x16b0, 0x16e2, 0x1714, 0x1714, 0x1726, + 0x1744, 0x1756, 0x1768, 0x1793, 0x17bb, 0x17bb, 0x17bb, 0x17bb, + // Entry 140 - 17F + 0x17d7, 0x17e6, 0x17e6, 0x17fb, 0x17fb, 0x1816, 0x1828, 0x1837, + 0x1859, 0x1859, 0x1865, 0x1874, 0x1874, 0x1883, 0x189b, 0x189b, + 0x189b, 0x18b0, 0x18b0, 0x18b0, 0x18d8, 0x18fa, 0x18fa, 0x1919, + 0x192b, 0x193a, 0x1946, 0x1955, 0x1961, 0x1982, 0x1982, 0x1994, + 0x1994, 0x1994, 0x1994, 0x19a0, 0x19a0, 0x19ac, 0x19c4, 0x19c4, + 0x19c4, 0x19c4, 0x19c4, 0x19c4, 0x19e2, 0x19e2, 0x19f7, 0x1a0c, + 0x1a1e, 0x1a40, 0x1a40, 0x1a40, 0x1a5e, 0x1a6d, 0x1a6d, 0x1a6d, + 0x1a6d, 0x1a7f, 0x1a94, 0x1aa6, 0x1aa6, 0x1abe, 0x1ad0, 0x1aeb, + // Entry 180 - 1BF + 0x1aeb, 0x1aeb, 0x1aeb, 0x1aeb, 0x1aeb, 0x1afa, 0x1b06, 0x1b06, + 0x1b06, 0x1b22, 0x1b37, 0x1b49, 0x1b52, 0x1b61, 0x1b61, 0x1b61, + 0x1b61, 0x1b79, 0x1b79, 0x1b8b, 0x1b9d, 0x1baf, 0x1bcd, 0x1bdc, + 0x1bdc, 0x1beb, 0x1bfd, 0x1c0f, 0x1c0f, 0x1c0f, 0x1c2b, 0x1c2b, + 0x1c2b, 0x1c40, 0x1c61, 0x1c73, 0x1c88, 0x1c97, 0x1ca3, 0x1ca3, + 0x1ca3, 0x1cc8, 0x1cda, 0x1cf8, 0x1d0d, 0x1d0d, 0x1d0d, 0x1d1f, + 0x1d1f, 0x1d1f, 0x1d3d, 0x1d3d, 0x1d59, 0x1d6b, 0x1d7d, 0x1d92, + 0x1d92, 0x1d92, 0x1d92, 0x1da1, 0x1dc0, 0x1dc0, 0x1dcf, 0x1dee, + // Entry 1C0 - 1FF + 0x1dee, 0x1e1c, 0x1e37, 0x1e52, 0x1e64, 0x1e76, 0x1e88, 0x1eb9, + 0x1ee0, 0x1ef8, 0x1f16, 0x1f3a, 0x1f52, 0x1f52, 0x1f52, 0x1f52, + 0x1f52, 0x1f7d, 0x1f7d, 0x1f98, 0x1f98, 0x1f98, 0x1fb0, 0x1fb0, + 0x1fea, 0x1fea, 0x1fea, 0x2005, 0x201a, 0x203b, 0x203b, 0x203b, + 0x203b, 0x204d, 0x204d, 0x204d, 0x204d, 0x206b, 0x206b, 0x2080, + 0x2092, 0x20c3, 0x20c3, 0x20d5, 0x20ed, 0x20ed, 0x20ed, 0x20ed, + 0x2108, 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x212f, + 0x212f, 0x2151, 0x2151, 0x2151, 0x215d, 0x215d, 0x216f, 0x216f, + // Entry 200 - 23F + 0x216f, 0x218e, 0x21a7, 0x21c3, 0x21e5, 0x21fd, 0x2215, 0x223a, + 0x224c, 0x224c, 0x224c, 0x225e, 0x226a, 0x2285, 0x2285, 0x22b6, + 0x22c8, 0x22c8, 0x22c8, 0x22d7, 0x22d7, 0x22e9, 0x22fb, 0x2310, + 0x231c, 0x2331, 0x2331, 0x234c, 0x236a, 0x236a, 0x2382, 0x23a7, + 0x23c6, 0x23c6, 0x23c6, 0x23c6, 0x23e7, 0x23e7, 0x23ff, 0x2411, + 0x2411, 0x242c, 0x242c, 0x2447, 0x2462, 0x247d, 0x2486, 0x248f, + 0x248f, 0x248f, 0x248f, 0x248f, 0x24a1, 0x24a1, 0x24a1, 0x24a1, + 0x24b0, 0x24bc, 0x24c8, 0x24c8, 0x24c8, 0x24e0, 0x24e0, 0x24e0, + // Entry 240 - 27F + 0x24e9, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x2513, 0x2537, + 0x2537, 0x2549, 0x2549, 0x2555, 0x25a9, 0x25b5, 0x25b5, 0x25b5, + 0x25e6, 0x2618, 0x264f, 0x267d, 0x26a8, 0x26cc, 0x2713, 0x2747, + 0x2747, 0x2747, 0x2778, 0x27a3, 0x27a3, 0x27bb, 0x27fe, 0x283b, + 0x2859, 0x2887, 0x2887, 0x28b2, 0x28e3, + }, + }, + { // os + "абхазагавестӕафрикаансараббагавайрагтӕтӕйрагбашкирагболгайрагбосниагката" + + "лайнагцӕцӕйнагчехагчувашагданиагнемыцагбердзейнаганглисагесперантои" + + "спайнагестойнагбаскагперсайнагфиннагфиджифарерагфранцагирландиагуир" + + "агхорватагвенгериагсомихагиталиагяпойнаггуырдзиагкурдаглатинагмӕчъи" + + "дониронпортугалиагуырыссагкитайагадыгейаграгон англисагбурятагкопта" + + "грагон египтагфилиппинаграгон францаграгон бердзейнагмӕхъӕлонкӕсгон" + + "бӕлхъӕронхъуымыхъхъаглекъагцигайнагнӕзонгӕ ӕвзагавстралиаг немыцагш" + + "вйецариаг немыцагавстралиаг англисагканадӕйаг англисагбритайнаг анг" + + "лисагамерикаг англисаглатинаг америкаг англисагевропӕйаг англисагка" + + "надӕйаг францагшвейцариаг францагбразилиаг португалиагевропӕйаг пол" + + "тугалиагӕнцонгонд китайагтрадицион китайаг", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000e, 0x001a, 0x002c, 0x002c, 0x002c, 0x002c, + 0x003a, 0x003a, 0x0048, 0x0048, 0x0058, 0x0068, 0x0068, 0x007a, + 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x0088, 0x009c, 0x00ac, + 0x00ac, 0x00ac, 0x00ac, 0x00b6, 0x00b6, 0x00c4, 0x00c4, 0x00d0, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00f2, 0x0102, 0x0114, 0x0124, + 0x0134, 0x0140, 0x0152, 0x0152, 0x015e, 0x0168, 0x0176, 0x0184, + 0x0184, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, + 0x01a0, 0x01a0, 0x01a0, 0x01b0, 0x01b0, 0x01c2, 0x01d0, 0x01d0, + // Entry 40 - 7F + 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, + 0x01de, 0x01de, 0x01ec, 0x01ec, 0x01fe, 0x01fe, 0x01fe, 0x01fe, + 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x020a, + 0x020a, 0x020a, 0x020a, 0x0218, 0x0218, 0x0218, 0x0218, 0x0218, + 0x0218, 0x0218, 0x0218, 0x0218, 0x0218, 0x0218, 0x0218, 0x0228, + 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, + 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, + 0x0228, 0x0228, 0x0228, 0x0228, 0x0230, 0x0230, 0x0230, 0x0230, + // Entry 80 - BF + 0x0230, 0x0246, 0x0246, 0x0246, 0x0246, 0x0246, 0x0256, 0x0256, + 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, + 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, + 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, + 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, + 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, + 0x0256, 0x0256, 0x0256, 0x0264, 0x0264, 0x0264, 0x0264, 0x0264, + 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, + // Entry C0 - FF + 0x0274, 0x0274, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, + 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, + 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, + 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, + 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, + 0x028f, 0x028f, 0x028f, 0x028f, 0x029d, 0x029d, 0x029d, 0x029d, + 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, + 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, + // Entry 100 - 13F + 0x029d, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, + 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, + 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, + 0x02a9, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, + 0x02c2, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02ef, 0x02ef, + 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, + 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, + 0x02ef, 0x02ef, 0x02ef, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, + // Entry 140 - 17F + 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, + 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x031e, 0x031e, + 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, + 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x032a, 0x032a, 0x032a, + 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, + 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, + 0x032a, 0x033c, 0x033c, 0x033c, 0x033c, 0x033c, 0x033c, 0x033c, + 0x033c, 0x0354, 0x0354, 0x0354, 0x0354, 0x0354, 0x0354, 0x0360, + // Entry 180 - 1BF + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + // Entry 1C0 - 1FF + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, + 0x0360, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + // Entry 200 - 23F + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + // Entry 240 - 27F + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x03ac, 0x03cf, 0x03f4, 0x0417, 0x043a, 0x045b, 0x048b, 0x04ae, + 0x04ae, 0x04ae, 0x04cf, 0x04f2, 0x04f2, 0x04f2, 0x051b, 0x0544, + 0x0544, 0x0544, 0x0544, 0x0565, 0x0586, + }, + }, + { // pa + paLangStr, + paLangIdx, + }, + { // pa-Arab + "پنجابی", + []uint16{ // 126 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + }, + }, + { // pl + plLangStr, + plLangIdx, + }, + { // prg + "prūsiskan", + []uint16{ // 472 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 140 - 17F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 180 - 1BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1C0 - 1FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, + }, + }, + { // ps + "امهاريعربيآساميبېلاروسيبلغاريبوسنيالمانيیونانيانګریزيحبشيباسکيفارسيفینلن" + + "ډيفرانسويعبريهنديارمنيایټالويجاپانیکرديلاتینيملغاسيمقدونيمغوليملایا" + + "نېپاليهالېنډيپولنډيپښتوپورتګاليروسيسنسکریټالبانيسویډنیتاجکيترکمنيتا" + + "تارازبکيچینيبلوڅي", + []uint16{ // 211 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, + 0x0014, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x002e, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0050, 0x0050, 0x0050, 0x0050, 0x005c, 0x006a, 0x006a, 0x006a, + 0x0072, 0x007c, 0x0086, 0x0086, 0x0094, 0x0094, 0x0094, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00aa, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00bc, 0x00bc, + // Entry 40 - 7F + 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, + 0x00ca, 0x00ca, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, + 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, + 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00f6, 0x00f6, 0x00f6, 0x0102, + 0x0102, 0x010c, 0x010c, 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, + 0x0122, 0x0122, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, + 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x013c, + // Entry 80 - BF + 0x0144, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x015c, 0x015c, + 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, + 0x016a, 0x016a, 0x016a, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + 0x0182, 0x0182, 0x0182, 0x0182, 0x018c, 0x018c, 0x018c, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x01a2, 0x01a2, 0x01a2, 0x01a2, + 0x01a2, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, + 0x01ac, 0x01ac, 0x01ac, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, + 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, + // Entry C0 - FF + 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, + 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, + 0x01b4, 0x01b4, 0x01be, + }, + }, + { // pt + ptLangStr, + ptLangIdx, + }, + { // pt-PT + ptPTLangStr, + ptPTLangIdx, + }, + { // qu + "Afrikaans SimiAmarico SimiArabe SimiAsames SimiAzerbaiyano SimiBaskir Si" + + "miBielorruso SimiBulgaro SimiBangla SimiTibetano SimiBreton SimiBosn" + + "io SimiCatalan SimiCorso SimiCheco SimiGales SimiDanes SimiAleman Si" + + "miDivehi SimiGriego SimiIngles SimiEspañol SimiEstonio SimiEuskera S" + + "imiPersa SimiFulah SimiFines SimiFeroes SimiFrances SimiFrison SimiI" + + "rlandes SimiGaelico Escoces SimiGallego SimiGujarati SimiHausa SimiH" + + "ebreo SimiHindi SimiCroata SimiHaitiano Criollo SimiHungaro SimiArme" + + "nio SimiIndonesio SimiIgbo SimiYi SimiIslandes SimiItaliano SimiInuk" + + "titut SimiJapones SimiGeorgiano SimiKazajo SimiGroenlandes SimiKhmer" + + " SimiKannada SimiCoreano SimiKirghiz SimiLuxemburgues SimiLao SimiLi" + + "tuano SimiLeton SimiMaori SimiMacedonio SimiMalayalam SimiMongol Sim" + + "iMarathi SimiMalayo SimiMaltes SimiNepali SimiNeerlandes SimiNoruego" + + " SimiOccitano SimiOdia SimiPunyabi SimiPolaco SimiPashto SimiPortugu" + + "es SimiRunasimiRomanche SimiRumano SimiRuso SimiKinyarwanda SimiSans" + + "crito SimiSindhi SimiChincha Sami SimiCingales SimiEslovaco SimiEslo" + + "veno SimiAlbanes SimiSerbio SimiSueco SimiSuajili SimiTamil SimiTelu" + + "gu SimiTayiko SimiTailandes SimiTigriña SimiTurcomano SimiSetsuana S" + + "imiTurco SimiTartaro SimiUigur SimiUcraniano SimiUrdu SimiUzbeko Sim" + + "iVietnamita SimiWolof SimiIsixhosa SimiYoruba SimiChino SimiIsizulu " + + "SimiMapuche SimiCheroqui SimiChawpi Kurdo SimiBajo Sorbio SimiFilipi" + + "no SimiAlsaciano SimiHmong Daw SimiAlto Sorbio SimiKonkani SimiMohaw" + + "k SimiSesotho Sa Leboa SimiPapiamento SimiKʼicheʼ SimiSakha SimiQull" + + "a Sami SimiSami Lule SimiSami Inari SimiSami Skolt SimiSiriaco Simi", + []uint16{ // 529 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x001a, 0x001a, + 0x0024, 0x002f, 0x002f, 0x002f, 0x003f, 0x004a, 0x0059, 0x0065, + 0x0065, 0x0065, 0x0070, 0x007d, 0x0088, 0x0093, 0x009f, 0x009f, + 0x009f, 0x00a9, 0x00a9, 0x00b3, 0x00b3, 0x00b3, 0x00bd, 0x00c7, + 0x00d2, 0x00dd, 0x00dd, 0x00dd, 0x00e8, 0x00f3, 0x00f3, 0x0100, + 0x010c, 0x0118, 0x0122, 0x012c, 0x0136, 0x0136, 0x0141, 0x014d, + 0x0158, 0x0165, 0x0179, 0x0185, 0x0185, 0x0192, 0x0192, 0x019c, + 0x01a7, 0x01b1, 0x01b1, 0x01bc, 0x01d1, 0x01dd, 0x01e9, 0x01e9, + // Entry 40 - 7F + 0x01e9, 0x01f7, 0x01f7, 0x0200, 0x0207, 0x0207, 0x0207, 0x0214, + 0x0221, 0x022f, 0x023b, 0x023b, 0x0249, 0x0249, 0x0249, 0x0249, + 0x0254, 0x0264, 0x026e, 0x027a, 0x0286, 0x0286, 0x0286, 0x0286, + 0x0286, 0x0286, 0x0292, 0x0292, 0x02a3, 0x02a3, 0x02a3, 0x02a3, + 0x02ab, 0x02b7, 0x02b7, 0x02c1, 0x02c1, 0x02c1, 0x02cb, 0x02d9, + 0x02e7, 0x02f2, 0x02fe, 0x0309, 0x0314, 0x0314, 0x0314, 0x0314, + 0x031f, 0x031f, 0x032e, 0x032e, 0x033a, 0x033a, 0x033a, 0x033a, + 0x0347, 0x0347, 0x0347, 0x0350, 0x0350, 0x035c, 0x035c, 0x0367, + // Entry 80 - BF + 0x0372, 0x0380, 0x0388, 0x0395, 0x0395, 0x03a0, 0x03a9, 0x03b9, + 0x03c7, 0x03c7, 0x03d2, 0x03e3, 0x03e3, 0x03f0, 0x03fd, 0x040a, + 0x040a, 0x040a, 0x040a, 0x0416, 0x0421, 0x0421, 0x0421, 0x0421, + 0x042b, 0x0437, 0x0441, 0x044c, 0x0457, 0x0465, 0x0472, 0x0480, + 0x048d, 0x048d, 0x0497, 0x0497, 0x04a3, 0x04a3, 0x04ad, 0x04bb, + 0x04c4, 0x04cf, 0x04cf, 0x04de, 0x04de, 0x04de, 0x04e8, 0x04f5, + 0x04f5, 0x0500, 0x0500, 0x050a, 0x0516, 0x0516, 0x0516, 0x0516, + 0x0516, 0x0516, 0x0516, 0x0516, 0x0516, 0x0516, 0x0516, 0x0516, + // Entry C0 - FF + 0x0516, 0x0516, 0x0516, 0x0516, 0x0516, 0x0522, 0x0522, 0x0522, + 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, + 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, + 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, + 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, + 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, + 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, + 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x052f, 0x052f, + // Entry 100 - 13F + 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, + 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0550, + 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, + 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, + 0x0550, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, + 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, + 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, + 0x055d, 0x055d, 0x055d, 0x055d, 0x056b, 0x056b, 0x056b, 0x056b, + // Entry 140 - 17F + 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x0579, + 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, + 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, + 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, + 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, + 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0595, 0x0595, + 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, + 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, + // Entry 180 - 1BF + 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, + 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, + 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, + 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, + 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x05a0, 0x05a0, 0x05a0, + 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, + 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, + 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05b5, + // Entry 1C0 - 1FF + 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, + 0x05b5, 0x05b5, 0x05b5, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, + 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, + 0x05c4, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, + 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, + 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, + 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, + 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, + // Entry 200 - 23F + 0x05dc, 0x05eb, 0x05f9, 0x0608, 0x0617, 0x0617, 0x0617, 0x0617, + 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, + 0x0623, + }, + }, + { // rm + "afarabchasianavesticafrikaansakanamaricaragonaisarabassamiavaricaymaraas" + + "erbeidschanicbaschkirbielorussbulgarbislamabambarabengaltibetanbreto" + + "nbosniaccatalantschetschenchamorrocorscreetschecslav da baselgiatsch" + + "uvaschkimricdanaistudestgmaledivicdzongkhaewegrecenglaisesperantospa" + + "gnolestonbascpersianfulahfinlandaisfidschianferraisfranzosfrisirland" + + "aisgaelic scotgalicianguaranigujaratimanxhaussaebraichindihiri motuc" + + "roathaitianungaraisarmenhererointerlinguaindonaisinterlingueigbosich" + + "uan yiinupiakidoislandaistalianinuktitutgiapunaisjavanaisgeorgiankon" + + "gokikuyukuanyamacasacgrönlandaiscambodschankannadacoreankanurikashmi" + + "ricurdkomicornickirghislatinluxemburgaisgandalimburgaislingalalaotli" + + "tuanluba-katangalettonmalagassimarschallaismaorimacedonmalayalammong" + + "olicmarathimalaicmaltaisbirmannaurundebele dal nordnepalaisndongaoll" + + "andaisnorvegiais nynorsknorvegais bokmålndebele dal sidnavajonyanjao" + + "ccitanojibwaoromooriyaosseticpunjabipalipolacpaschtoportugaisquechua" + + "rumantschrundirumenrusskinyarwandasanscritsardsindhisami dal nordsan" + + "gosingalaisslovacslovensamoanshonasomalialbanaisserbswazisotho dal s" + + "idsundanaissvedaissuahilitamiltelugutadjiktailandaistigrinyaturkment" + + "swanatongatirctsongatatartahitianuiguricucranaisurduusbecvendavietna" + + "maisvolapukvallonwolofxhosajiddicyorubazhuangchinaiszuluacehacoliand" + + "angmeadygaiafrihiliainuaccadicaleuticaltaic dal sidenglais veglangik" + + "aarameicaraucanicarapahoarawakasturianawadhibelutschibalinaisbasaabe" + + "dschabembabhojpuribikolbinisiksikabrajburiatbugiblincaddocaribicatsa" + + "mcebuanochibchatschagataicchuukaismaripatuà chinookchoctawchipewyanc" + + "herokeecheyennecoptictirc crimeankaschubicdakotadargwadelawareslavey" + + "dogribdinkadogribass sorbdualaollandais mesaundiulaefikegipzian vegl" + + "ekajukelamiticenglais mesaunewondofangfilippinofonfranzos mesaunfran" + + "zos veglfris dal nordfris da l’ostfriulangagayogbayageezgilbertaistu" + + "destg mesaunvegl tudestg da scrittiragondigorontalogoticgrebogrec ve" + + "gltudestg svizzergwichʼinhaidahawaianhiligaynonettitichmongaut sorbh" + + "upaibanilocanoingushlojbangiudaic-persiangiudaic-arabkarakalpakkabyl" + + "ekachinjjukambakawikabardictyapkorokhasikhotanaiskimbundukonkanikosr" + + "aeankpellekarachay-balkarcareliankurukhkumukkutenailadinolahndalamba" + + "lezghianlomongoloziluba-lulualuisenolundaluolushaimaduraismagahimait" + + "hilimakassarmandingomasaimokshamandarmendeirlandais mesaunmicmacmina" + + "ngkabaumanchumanipurimohawkmossiplurilingcreekmirandaismarwarierzyan" + + "eapolitanbass tudestgnewariniasniuenogainordic vegln’kosotho dal nor" + + "dnewari classicnyamwezinyankolenyoronzimaosagetirc ottomanpangasinan" + + "pahlavipampangapapiamentopalaupersian veglfenizianponapeanprovenzal " + + "veglrajasthanirapanuirarotongaromaniaromunicsandawejakutarameic sama" + + "ritansasaksantalisicilianscotselkupirlandais veglshansidamosami dal " + + "sidsami lulesami inarisami skoltsoninkesogdiansranan tongoserersukum" + + "asususumericsiric classicsirictemneterenotetumtigretivtokelauklingon" + + "ictlingittamasheqlingua tsongatok pisintsimshiantumbukatuvalutuvinia" + + "nudmurtugariticmbundulinguas betg determinadasvaivoticwalamowaraywas" + + "hokalmukyaoyapaiszapotecsimbols da Blisszenagazuninagins cuntegns li" + + "nguisticszazatudestg austriacenglais australianenglais canadaisengla" + + "is britannicenglais americanspagnol latinamericanspagnol ibericfranz" + + "os canadaisfranzos svizzerflamportugais brasilianportugais iberianmo" + + "ldavserbo-croatchinais simplifitgàchinais tradiziunal", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x0014, 0x001d, 0x0021, 0x0027, 0x0030, + 0x0034, 0x003a, 0x0040, 0x0046, 0x0055, 0x005d, 0x0066, 0x006c, + 0x0073, 0x007a, 0x0080, 0x0087, 0x008d, 0x0094, 0x009b, 0x00a6, + 0x00ae, 0x00b2, 0x00b6, 0x00bc, 0x00cc, 0x00d6, 0x00dc, 0x00e2, + 0x00e9, 0x00f2, 0x00fa, 0x00fd, 0x0101, 0x0108, 0x0111, 0x0118, + 0x011d, 0x0121, 0x0128, 0x012d, 0x0137, 0x0140, 0x0147, 0x014e, + 0x0152, 0x015b, 0x0166, 0x016e, 0x0175, 0x017d, 0x0181, 0x0187, + 0x018d, 0x0192, 0x019b, 0x01a0, 0x01a7, 0x01af, 0x01b4, 0x01ba, + // Entry 40 - 7F + 0x01c5, 0x01cd, 0x01d8, 0x01dc, 0x01e6, 0x01ed, 0x01f0, 0x01f9, + 0x01ff, 0x0208, 0x0211, 0x0219, 0x0221, 0x0226, 0x022c, 0x0234, + 0x0239, 0x0245, 0x0250, 0x0257, 0x025d, 0x0263, 0x026b, 0x026f, + 0x0273, 0x0279, 0x0280, 0x0285, 0x0291, 0x0296, 0x02a0, 0x02a7, + 0x02ab, 0x02b1, 0x02bd, 0x02c3, 0x02cc, 0x02d8, 0x02dd, 0x02e4, + 0x02ed, 0x02f5, 0x02fc, 0x0302, 0x0309, 0x030f, 0x0314, 0x0324, + 0x032c, 0x0332, 0x033b, 0x034d, 0x035e, 0x036d, 0x0373, 0x0379, + 0x0380, 0x0386, 0x038b, 0x0390, 0x0397, 0x039e, 0x03a2, 0x03a7, + // Entry 80 - BF + 0x03ae, 0x03b7, 0x03be, 0x03c7, 0x03cc, 0x03d1, 0x03d5, 0x03e0, + 0x03e8, 0x03ec, 0x03f2, 0x03ff, 0x0404, 0x040d, 0x0413, 0x0419, + 0x041f, 0x0424, 0x042a, 0x0432, 0x0436, 0x043b, 0x0448, 0x0451, + 0x0458, 0x045f, 0x0464, 0x046a, 0x0470, 0x047a, 0x0482, 0x0489, + 0x048f, 0x0494, 0x0498, 0x049e, 0x04a3, 0x04ab, 0x04b2, 0x04ba, + 0x04be, 0x04c3, 0x04c8, 0x04d2, 0x04d9, 0x04df, 0x04e4, 0x04e9, + 0x04ef, 0x04f5, 0x04fb, 0x0502, 0x0506, 0x050a, 0x050f, 0x0517, + 0x051d, 0x051d, 0x0525, 0x0525, 0x0529, 0x0530, 0x0530, 0x0537, + // Entry C0 - FF + 0x0537, 0x0545, 0x0551, 0x0557, 0x055e, 0x0567, 0x0567, 0x056e, + 0x056e, 0x056e, 0x0574, 0x0574, 0x0574, 0x0574, 0x0574, 0x057c, + 0x057c, 0x0582, 0x058b, 0x0593, 0x0593, 0x0598, 0x0598, 0x0598, + 0x0598, 0x059f, 0x05a4, 0x05a4, 0x05a4, 0x05a4, 0x05a4, 0x05a4, + 0x05ac, 0x05b1, 0x05b5, 0x05b5, 0x05b5, 0x05bc, 0x05bc, 0x05bc, + 0x05c0, 0x05c0, 0x05c0, 0x05c0, 0x05c6, 0x05ca, 0x05ca, 0x05ce, + 0x05ce, 0x05d3, 0x05da, 0x05da, 0x05df, 0x05e6, 0x05e6, 0x05ed, + 0x05f8, 0x0600, 0x0604, 0x0612, 0x0619, 0x0622, 0x062a, 0x0632, + // Entry 100 - 13F + 0x0632, 0x0638, 0x0638, 0x0644, 0x0644, 0x064d, 0x0653, 0x0659, + 0x0659, 0x0661, 0x0667, 0x066d, 0x0672, 0x0672, 0x0677, 0x0680, + 0x0680, 0x0685, 0x0695, 0x0695, 0x069a, 0x069a, 0x069a, 0x069e, + 0x069e, 0x06ab, 0x06b1, 0x06b9, 0x06c7, 0x06c7, 0x06cd, 0x06cd, + 0x06d1, 0x06da, 0x06da, 0x06dd, 0x06dd, 0x06eb, 0x06f7, 0x06f7, + 0x0704, 0x0713, 0x071a, 0x071c, 0x071c, 0x071c, 0x0720, 0x0725, + 0x0725, 0x0729, 0x0733, 0x0733, 0x0741, 0x075a, 0x075a, 0x075f, + 0x0768, 0x076d, 0x0772, 0x077b, 0x078a, 0x078a, 0x078a, 0x078a, + // Entry 140 - 17F + 0x0793, 0x0798, 0x0798, 0x079f, 0x079f, 0x07a9, 0x07b0, 0x07b5, + 0x07bd, 0x07bd, 0x07c1, 0x07c5, 0x07c5, 0x07cc, 0x07d2, 0x07d2, + 0x07d2, 0x07d8, 0x07d8, 0x07d8, 0x07e7, 0x07f3, 0x07f3, 0x07fd, + 0x0803, 0x0809, 0x080c, 0x0811, 0x0815, 0x081d, 0x081d, 0x0821, + 0x0821, 0x0821, 0x0821, 0x0825, 0x0825, 0x082a, 0x0833, 0x0833, + 0x0833, 0x0833, 0x0833, 0x0833, 0x083b, 0x083b, 0x0842, 0x084a, + 0x0850, 0x085f, 0x085f, 0x085f, 0x0867, 0x086d, 0x086d, 0x086d, + 0x086d, 0x0872, 0x0879, 0x087f, 0x087f, 0x0885, 0x088a, 0x0892, + // Entry 180 - 1BF + 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x0899, 0x089d, 0x089d, + 0x089d, 0x08a7, 0x08ae, 0x08b3, 0x08b6, 0x08bc, 0x08bc, 0x08bc, + 0x08bc, 0x08c4, 0x08c4, 0x08ca, 0x08d2, 0x08da, 0x08e2, 0x08e7, + 0x08e7, 0x08ed, 0x08f3, 0x08f8, 0x08f8, 0x08f8, 0x0908, 0x0908, + 0x0908, 0x090e, 0x0919, 0x091f, 0x0927, 0x092d, 0x0932, 0x0932, + 0x0932, 0x093b, 0x0940, 0x0949, 0x0950, 0x0950, 0x0950, 0x0955, + 0x0955, 0x0955, 0x095f, 0x095f, 0x096b, 0x0971, 0x0975, 0x0979, + 0x0979, 0x0979, 0x0979, 0x097e, 0x0989, 0x0989, 0x098f, 0x099d, + // Entry 1C0 - 1FF + 0x099d, 0x09ab, 0x09b3, 0x09bb, 0x09c0, 0x09c5, 0x09ca, 0x09d6, + 0x09e0, 0x09e7, 0x09ef, 0x09f9, 0x09fe, 0x09fe, 0x09fe, 0x09fe, + 0x09fe, 0x0a0a, 0x0a0a, 0x0a12, 0x0a12, 0x0a12, 0x0a1a, 0x0a1a, + 0x0a28, 0x0a28, 0x0a28, 0x0a32, 0x0a39, 0x0a42, 0x0a42, 0x0a42, + 0x0a42, 0x0a48, 0x0a48, 0x0a48, 0x0a48, 0x0a50, 0x0a50, 0x0a57, + 0x0a5c, 0x0a6d, 0x0a6d, 0x0a72, 0x0a79, 0x0a79, 0x0a79, 0x0a79, + 0x0a81, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a8b, + 0x0a8b, 0x0a99, 0x0a99, 0x0a99, 0x0a9d, 0x0a9d, 0x0aa3, 0x0aa3, + // Entry 200 - 23F + 0x0aa3, 0x0aaf, 0x0ab8, 0x0ac2, 0x0acc, 0x0ad3, 0x0ada, 0x0ae6, + 0x0aeb, 0x0aeb, 0x0aeb, 0x0af1, 0x0af5, 0x0afc, 0x0afc, 0x0b09, + 0x0b0e, 0x0b0e, 0x0b0e, 0x0b13, 0x0b13, 0x0b19, 0x0b1e, 0x0b23, + 0x0b26, 0x0b2d, 0x0b2d, 0x0b36, 0x0b3d, 0x0b3d, 0x0b45, 0x0b52, + 0x0b5b, 0x0b5b, 0x0b5b, 0x0b5b, 0x0b64, 0x0b64, 0x0b6b, 0x0b71, + 0x0b71, 0x0b79, 0x0b79, 0x0b7f, 0x0b87, 0x0b8d, 0x0ba6, 0x0ba9, + 0x0ba9, 0x0ba9, 0x0ba9, 0x0ba9, 0x0bae, 0x0bae, 0x0bae, 0x0bae, + 0x0bb4, 0x0bb9, 0x0bbe, 0x0bbe, 0x0bbe, 0x0bc4, 0x0bc4, 0x0bc4, + // Entry 240 - 27F + 0x0bc7, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bd4, 0x0be4, + 0x0be4, 0x0bea, 0x0bea, 0x0bee, 0x0c09, 0x0c0d, 0x0c0d, 0x0c0d, + 0x0c1d, 0x0c1d, 0x0c2f, 0x0c3f, 0x0c50, 0x0c60, 0x0c75, 0x0c83, + 0x0c83, 0x0c83, 0x0c93, 0x0ca2, 0x0ca2, 0x0ca6, 0x0cb9, 0x0cca, + 0x0cd0, 0x0cdb, 0x0cdb, 0x0cef, 0x0d02, + }, + }, + { // rn + "IgikaniIkimuharikiIcarabuIkibelarusiyaIkinyabuligariyaIkibengaliIgicekeI" + + "kidageIkigerekiIcongerezaIcesipanyoloIgiperisiIgifaransaIgihawusaIgi" + + "hindiIkinyahongiriyaIkinyendoziyaIkiguboIgitaliyaniIkiyapaniIkinyeja" + + "vaIgikambodiyaIkinyakoreyaIkinyamaleziyaIkinyabirimaniyaIkinepaliIgi" + + "holandiIgipunjabiIkinyapolonyeIgiporutugariIkirundiIkinyarumaniyaIki" + + "rusiyaIkinyarwandaIgisomaliIgisuweduwaIgitamiliIkinyatayilandiIgitur" + + "ukiyaIkinyayukereniInyeyuruduIkinyaviyetinamuIkiyorubaIgishinwaIkizu" + + "lu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0012, 0x0012, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0026, 0x0036, + 0x0036, 0x0036, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x004e, 0x004e, 0x004e, 0x004e, 0x0057, 0x0061, 0x0061, 0x006d, + 0x006d, 0x006d, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0089, + 0x0089, 0x0091, 0x0091, 0x0091, 0x0091, 0x00a0, 0x00a0, 0x00a0, + // Entry 40 - 7F + 0x00a0, 0x00ad, 0x00ad, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, + 0x00bf, 0x00bf, 0x00c8, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x00de, 0x00de, 0x00ea, 0x00ea, 0x00ea, 0x00ea, + 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, + 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, + 0x00ea, 0x00ea, 0x00ea, 0x00f8, 0x00f8, 0x0108, 0x0108, 0x0108, + 0x0111, 0x0111, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x0125, 0x0125, 0x0132, + // Entry 80 - BF + 0x0132, 0x013f, 0x013f, 0x013f, 0x0147, 0x0155, 0x015e, 0x016a, + 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, + 0x016a, 0x016a, 0x0173, 0x0173, 0x0173, 0x0173, 0x0173, 0x0173, + 0x017e, 0x017e, 0x0187, 0x0187, 0x0187, 0x0196, 0x0196, 0x0196, + 0x0196, 0x0196, 0x01a1, 0x01a1, 0x01a1, 0x01a1, 0x01a1, 0x01af, + 0x01b9, 0x01b9, 0x01b9, 0x01c9, 0x01c9, 0x01c9, 0x01c9, 0x01c9, + 0x01c9, 0x01d2, 0x01d2, 0x01db, 0x01e2, + }, + }, + { // ro + roLangStr, + roLangIdx, + }, + { // ro-MD + "wolayttaswahili (R. D. Congo)", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 140 - 17F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 180 - 1BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1C0 - 1FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 200 - 23F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + // Entry 240 - 27F + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x001d, + }, + }, + { // rof + "KiakaniKiamhariKiarabuKibelarusiKibulgariaKibanglaKicheckiKijerumaniKigi" + + "rikiKiingerezaKihispaniaKiajemiKyifaransaKihausaKihindiKihungariKiin" + + "donesiaKiigboKiitalianoKijapaniKijavaKikambodiaKikoreaKimalesiaKibur" + + "maKinepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwand" + + "aKisomaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuK" + + "iyorubaKichinaKizuluKihorombo", + []uint16{ // 481 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x000f, 0x000f, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0020, 0x002a, + 0x002a, 0x002a, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x0044, 0x0044, 0x0044, 0x0044, 0x004c, 0x0056, 0x0056, 0x0060, + 0x0060, 0x0060, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0078, + 0x0078, 0x007f, 0x007f, 0x007f, 0x007f, 0x0088, 0x0088, 0x0088, + // Entry 40 - 7F + 0x0088, 0x0093, 0x0093, 0x0099, 0x0099, 0x0099, 0x0099, 0x0099, + 0x00a3, 0x00a3, 0x00ab, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00b1, 0x00b1, 0x00bb, 0x00bb, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + 0x00c2, 0x00c2, 0x00c2, 0x00cb, 0x00cb, 0x00d2, 0x00d2, 0x00d2, + 0x00da, 0x00da, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, + 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00ec, 0x00ec, 0x00f5, + // Entry 80 - BF + 0x00f5, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x0104, 0x010a, 0x0115, + 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, + 0x0115, 0x0115, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, + 0x0124, 0x0124, 0x012b, 0x012b, 0x012b, 0x0135, 0x0135, 0x0135, + 0x0135, 0x0135, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x0146, + 0x014c, 0x014c, 0x014c, 0x0157, 0x0157, 0x0157, 0x0157, 0x0157, + 0x0157, 0x015f, 0x015f, 0x0166, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + // Entry C0 - FF + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + // Entry 100 - 13F + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + // Entry 140 - 17F + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + // Entry 180 - 1BF + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + // Entry 1C0 - 1FF + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, + 0x0175, + }, + }, + { // ru + ruLangStr, + ruLangIdx, + }, + {}, // ru-UA + { // rw + "IkinyafurikaneriInyetuwiInyamuharikiIcyarabuIcyasamiziInyazeribayijaniIk" + + "ibelarusiyaUrunyabuligariyaIkibengaliInyebiritoniInyebosiniyaIgikata" + + "laniIgicekeIkigaluwaIkidaninwaIkidageIkigerekiIcyongerezaIcyesiperan" + + "toIcyesipanyoloIcyesitoniyaIkibasikiInyeperisiIgifinilandeInyefaroyi" + + "ziIgifaransaIgifiriziyaniIkirilandiIkigaluwa cy’IgisweduwaIkigalisiy" + + "aInyaguwaraniInyegujaratiIgiheburayoIgihindiIgikorowasiyaIgihongiriy" + + "aIkinyarumeniyaUrurimi GahuzamiryangoIkinyendoziyaUruhuzandimiIgisil" + + "andeIgitaliyaniIkiyapaniInyejavaInyejeworujiyaIgikambodiyaIgikanadaI" + + "gikoreyaInyekuridishiInkerigiziIkilatiniIlingalaIkilawotiyaniIkilitu" + + "waniyaIkinyaletoviyaniIkimasedoniyaniIkimalayalamiIkimongoliIkimarat" + + "iIkimalayiIkimalitezeIkinepaliIkinerilandeInyenoruveji (Nyonorusiki)" + + "IkinoruvejiInyogusitaniInyoriyaIgipunjabiIgipoloneImpashitoIgiporutu" + + "galiIkinyarumaniyaIkirusiyaKinyarwandaIgisansikiriIgisindiInyesimpal" + + "ezeIgisilovakiIkinyasiloveniyaIgisomaliIcyalubaniyaIgiseribeInyeseso" + + "toInyesudaniIgisuweduwaIgiswahiliIgitamiliIgiteluguIgitayiInyatigiri" + + "nyaInyeturukimeniIgiturukiyaIkiwiguriIkinyayukereniInyeyuruduInyeyuz" + + "ubekiIkinyaviyetinamuInyehawusaInyeyidishiInyezuluIkinyafilipineInye" + + "kilingoniInyeporutigali (Brezili)Inyeporutigali (Igiporutigali)Inyes" + + "eribiya na Korowasiya", + []uint16{ // 610 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0018, 0x0024, 0x0024, + 0x002c, 0x0036, 0x0036, 0x0036, 0x0046, 0x0046, 0x0053, 0x0063, + 0x0063, 0x0063, 0x006d, 0x006d, 0x0079, 0x0085, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0097, 0x0097, 0x0097, 0x00a0, 0x00aa, + 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00ba, 0x00c5, 0x00d2, 0x00df, + 0x00eb, 0x00f4, 0x00fe, 0x00fe, 0x010a, 0x010a, 0x0116, 0x0120, + 0x012d, 0x0137, 0x0150, 0x015b, 0x0167, 0x0173, 0x0173, 0x0173, + 0x017e, 0x0186, 0x0186, 0x0193, 0x0193, 0x019f, 0x01ad, 0x01ad, + // Entry 40 - 7F + 0x01c3, 0x01d0, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01e6, + 0x01f1, 0x01f1, 0x01fa, 0x0202, 0x0210, 0x0210, 0x0210, 0x0210, + 0x0210, 0x0210, 0x021c, 0x0225, 0x022e, 0x022e, 0x022e, 0x023b, + 0x023b, 0x023b, 0x0245, 0x024e, 0x024e, 0x024e, 0x024e, 0x0256, + 0x0263, 0x0270, 0x0270, 0x0280, 0x0280, 0x0280, 0x0280, 0x028f, + 0x029c, 0x02a6, 0x02af, 0x02b8, 0x02c3, 0x02c3, 0x02c3, 0x02c3, + 0x02cc, 0x02cc, 0x02d8, 0x02f2, 0x02fd, 0x02fd, 0x02fd, 0x02fd, + 0x0309, 0x0309, 0x0309, 0x0311, 0x0311, 0x031b, 0x031b, 0x0324, + // Entry 80 - BF + 0x032d, 0x033a, 0x033a, 0x033a, 0x033a, 0x0348, 0x0351, 0x035c, + 0x0368, 0x0368, 0x0370, 0x0370, 0x0370, 0x037d, 0x0388, 0x0398, + 0x0398, 0x0398, 0x03a1, 0x03ad, 0x03b6, 0x03b6, 0x03c0, 0x03ca, + 0x03d5, 0x03df, 0x03e8, 0x03f1, 0x03f1, 0x03f8, 0x0405, 0x0413, + 0x0413, 0x0413, 0x041e, 0x041e, 0x041e, 0x041e, 0x0427, 0x0435, + 0x043f, 0x044b, 0x044b, 0x045b, 0x045b, 0x045b, 0x045b, 0x0465, + 0x0470, 0x0470, 0x0470, 0x0470, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + // Entry C0 - FF + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + // Entry 100 - 13F + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, + 0x0478, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + // Entry 140 - 17F + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + // Entry 180 - 1BF + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + // Entry 1C0 - 1FF + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + // Entry 200 - 23F + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0486, 0x0486, 0x0486, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + // Entry 240 - 27F + 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x04ab, 0x04c9, + 0x04c9, 0x04e3, + }, + }, + { // rwk + "KiakanyiKiamharyiKyiarabuKyibelarusiKyibulgaryiaKyibanglaKyicheckiKyijer" + + "umaniKyigirikiKyingerezaKyihispaniaKyiajemiKyifaransaKyihausaKyihind" + + "iKyihungariKyiindonesiaKyiigboKyiitalianoKyijapaniKyijavaKyikambodia" + + "KyikoreaKyimalesiaKyiburmaKyinepaliKyiholanziKyipunjabiKyipolandiKyi" + + "renoKyiromaniaKyirusiKyinyarwandaKyisomalyiKyiswidiKyitamilKyitailan" + + "diKyiturukyiKyiukraniaKyiurduKyivietinamuKyiyorubaKyichinaKyizuluKir" + + "uwa", + []uint16{ // 487 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0011, 0x0011, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0030, + 0x0030, 0x0030, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x004d, 0x004d, 0x004d, 0x004d, 0x0056, 0x0060, 0x0060, 0x006b, + 0x006b, 0x006b, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x0085, + 0x0085, 0x008d, 0x008d, 0x008d, 0x008d, 0x0097, 0x0097, 0x0097, + // Entry 40 - 7F + 0x0097, 0x00a3, 0x00a3, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00b5, 0x00b5, 0x00be, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00d0, 0x00d0, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00e2, 0x00e2, 0x00ea, 0x00ea, 0x00ea, + 0x00f3, 0x00f3, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x0107, 0x0107, 0x0111, + // Entry 80 - BF + 0x0111, 0x0118, 0x0118, 0x0118, 0x0118, 0x0122, 0x0129, 0x0135, + 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, + 0x0135, 0x0135, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x0147, 0x0147, 0x014f, 0x014f, 0x014f, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x016e, + 0x0175, 0x0175, 0x0175, 0x0181, 0x0181, 0x0181, 0x0181, 0x0181, + 0x0181, 0x018a, 0x018a, 0x0192, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry C0 - FF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 100 - 13F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 140 - 17F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 180 - 1BF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 1C0 - 1FF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x019f, + }, + }, + { // sah + "АбхаастыыАппырыкааныстыыАмхаардыыАраабтыыАваардыыАдьырбайдьаанныыБөлөрүү" + + "стүүБулҕаардыыБенгаллыыТибиэттииБосныйалыыКаталаанныыЧэчиэннииЧиэхт" + + "ииДаатскайдыыНиэмэстииГириэктииАаҥыллыыЫспаанныыЭстиэнийэлииПиэрист" + + "ииПииннииБоронсуустууБэҥгиэрдииЭрмээннииЫтаалыйалыыДьоппуоннууКурус" + + "ууннууХаһаахтыыКэриэйдииКыргыстыыЛатыынныыМоҕуоллууМалаайдыыНьыпаал" + + "лыыПандьаабтыыПортугааллыыРумыынныыНууччалыыСловаактыыАлбаанныыТамы" + + "ллыыТөлүгүлүүТадьыыктыыТатаардыыУйгуурдууУкрайыыньыстыыҮзбиэктииКыт" + + "айдыыЗуулулууАлеуттууАстуурдууКиин куурдууПилипииннииНагаайдыысаха " + + "тыла", + []uint16{ // 489 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0012, 0x0012, 0x0030, 0x0030, 0x0042, 0x0042, + 0x0052, 0x0052, 0x0062, 0x0062, 0x0082, 0x0082, 0x0098, 0x00ac, + 0x00ac, 0x00ac, 0x00be, 0x00d0, 0x00d0, 0x00e4, 0x00fa, 0x010c, + 0x010c, 0x010c, 0x010c, 0x011a, 0x011a, 0x011a, 0x011a, 0x0130, + 0x0142, 0x0142, 0x0142, 0x0142, 0x0154, 0x0164, 0x0164, 0x0176, + 0x018e, 0x018e, 0x01a0, 0x01a0, 0x01ae, 0x01ae, 0x01ae, 0x01c6, + 0x01c6, 0x01c6, 0x01c6, 0x01c6, 0x01c6, 0x01c6, 0x01c6, 0x01c6, + 0x01c6, 0x01c6, 0x01c6, 0x01c6, 0x01c6, 0x01da, 0x01ec, 0x01ec, + // Entry 40 - 7F + 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, 0x01ec, + 0x0202, 0x0202, 0x0218, 0x0218, 0x022e, 0x022e, 0x022e, 0x022e, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0252, 0x0252, 0x0252, 0x0252, + 0x0252, 0x0252, 0x0264, 0x0276, 0x0276, 0x0276, 0x0276, 0x0276, + 0x0276, 0x0276, 0x0276, 0x0276, 0x0276, 0x0276, 0x0276, 0x0276, + 0x0276, 0x0288, 0x0288, 0x029a, 0x029a, 0x029a, 0x029a, 0x029a, + 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02ae, + 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02c4, 0x02c4, 0x02c4, + // Entry 80 - BF + 0x02c4, 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02ee, 0x0300, 0x0300, + 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0314, 0x0314, + 0x0314, 0x0314, 0x0314, 0x0326, 0x0326, 0x0326, 0x0326, 0x0326, + 0x0326, 0x0326, 0x0336, 0x0348, 0x035c, 0x035c, 0x035c, 0x035c, + 0x035c, 0x035c, 0x035c, 0x035c, 0x036e, 0x036e, 0x0380, 0x039c, + 0x039c, 0x03ae, 0x03ae, 0x03ae, 0x03ae, 0x03ae, 0x03ae, 0x03ae, + 0x03ae, 0x03ae, 0x03ae, 0x03be, 0x03ce, 0x03ce, 0x03ce, 0x03ce, + 0x03ce, 0x03ce, 0x03ce, 0x03ce, 0x03ce, 0x03ce, 0x03ce, 0x03de, + // Entry C0 - FF + 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, + 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, 0x03f0, + 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, + 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, + 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, + 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, + 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, + 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, + // Entry 100 - 13F + 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0407, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + // Entry 140 - 17F + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + // Entry 180 - 1BF + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, + // Entry 1C0 - 1FF + 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, + 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, + 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, + 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, + 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, + 0x0440, + }, + }, + { // saq + "KiakanKiamhariKiarabuKibelarusiKibulgariaKibanglaKicheckiKijerumaniKigir" + + "ikiKingerezaKihispaniaKiajemiKifaransaKihausaKihindiKihungariKiindon" + + "esiaKiigboKiitalianoKijapaniKijavaKikambodiaKikoreaKimalesiaKiburmaK" + + "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + + "rubaKichinaKizuluKisampur", + []uint16{ // 491 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x0054, 0x0054, 0x005e, + 0x005e, 0x005e, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0075, + 0x0075, 0x007c, 0x007c, 0x007c, 0x007c, 0x0085, 0x0085, 0x0085, + // Entry 40 - 7F + 0x0085, 0x0090, 0x0090, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x00a0, 0x00a0, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00b8, 0x00b8, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00c8, 0x00c8, 0x00cf, 0x00cf, 0x00cf, + 0x00d7, 0x00d7, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e9, 0x00e9, 0x00f2, + // Entry 80 - BF + 0x00f2, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0101, 0x0107, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x0121, 0x0121, 0x0128, 0x0128, 0x0128, 0x0132, 0x0132, 0x0132, + 0x0132, 0x0132, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x0143, + 0x0149, 0x0149, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x015c, 0x015c, 0x0163, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry C0 - FF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 100 - 13F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 140 - 17F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 180 - 1BF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 1C0 - 1FF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0171, + }, + }, + { // sbp + "IshiyakaniIshiyamuhaliIshiyalabuIshibelalusiIshibulugaliaIshibangilaIshi" + + "shekiIshijelumaniIshigilikiIshingelesaIshihisipaniyaIshiajemiIshifal" + + "ansaIshihawusaIshihindiIshihungaliIshihindonesiaIshihigiboIshihitali" + + "yanoIshijapaniIshijavaIshikambodiaIshikoleyaIshimalesiyaIshibulumaIs" + + "hinepaliIshiholansiIshipunjabiIshipolandiIshilenoIshilomaniyaIshilus" + + "iIshinyalwandaIshisomaliIshiswidiIshitamiliIshitayilandiIshitulukiIs" + + "hiyukilaniyaIshiwuludiIshivietinamuIshiyolubaIshishinaIshisuluIshisa" + + "ngu", + []uint16{ // 496 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0016, 0x0016, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x002c, 0x0039, + 0x0039, 0x0039, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0063, 0x006e, 0x006e, 0x007c, + 0x007c, 0x007c, 0x0085, 0x0085, 0x0085, 0x0085, 0x0085, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x009a, + 0x009a, 0x00a3, 0x00a3, 0x00a3, 0x00a3, 0x00ae, 0x00ae, 0x00ae, + // Entry 40 - 7F + 0x00ae, 0x00bc, 0x00bc, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00d4, 0x00d4, 0x00de, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, + 0x00e6, 0x00e6, 0x00f2, 0x00f2, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x00fc, 0x00fc, 0x00fc, 0x0108, 0x0108, 0x0112, 0x0112, 0x0112, + 0x011c, 0x011c, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0132, 0x0132, 0x013d, + // Entry 80 - BF + 0x013d, 0x0145, 0x0145, 0x0145, 0x0145, 0x0151, 0x0159, 0x0166, + 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, + 0x0166, 0x0166, 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, + 0x0179, 0x0179, 0x0183, 0x0183, 0x0183, 0x0190, 0x0190, 0x0190, + 0x0190, 0x0190, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x01a8, + 0x01b2, 0x01b2, 0x01b2, 0x01bf, 0x01bf, 0x01bf, 0x01bf, 0x01bf, + 0x01bf, 0x01c9, 0x01c9, 0x01d2, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + // Entry C0 - FF + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + // Entry 100 - 13F + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + // Entry 140 - 17F + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + // Entry 180 - 1BF + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + // Entry 1C0 - 1FF + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01e3, + }, + }, + { // se + "afrikánsagiellaaragoniagiellaarábagiellavilges-ruoššagiellabulgáriagiell" + + "abengalgiellatibetagiellabretonagiellabosniagiellakatalánagiellacors" + + "icagiellačeahkagiellakymragielladánskkagielladuiskkagielladivehigiel" + + "ladzongkhagiellagreikkagiellaeaŋgalsgiellaspánskkagiellaesttegiellap" + + "ersijagiellasuomagiellafidjigiellafearagiellafránskkagiellaoarjifrii" + + "sagiellaiirragiellagujaratagiellamanksgiellahaussagiellahindigiellak" + + "roátiagiellahaitigiellaungárgiellaarmeenagiellaindonesiagiellaislánd" + + "dagiellaitáliagiellajapánagiellajavagiellageorgiagiellakazakgiellaka" + + "mbodiagiellakoreagiellakurdigiellakomigiellakornagiellaláhtengiellal" + + "uxemburggagiellalaogiellaliettuvagiellalátviagiellamaorigiellamakedo" + + "niagiellamongoliagiellamaltagiellaburmagiellanepaligiellahollánddagi" + + "ellaođđadárogiellagirjedárogiellaoksitánagiellapanjabigiellapolskkag" + + "iellaportugálagiellaromanšgiellaromániagiellaruoššagiellasardigiella" + + "davvisámegiellaslovákiagiellaslovenagiellasamoagiellaalbánagiellaser" + + "biagiellaruoŧagiellaŧaigielladurkagiellatahitigiellaukrainagiellaurd" + + "ugiellavietnamgiellavallonagiellakiinnágiellaacehgiellaboares eaŋgal" + + "asgiellaasturiagiellamarigiellafilippiinnagiellahawaiigiellagárjilgi" + + "ellamokšagiellaersagiellasisiliagiellaselkupagiellalullisámegiellaju" + + "levsámegiellaanárašgiellanuortalašgiellashimaorigiellaudmurtagiellad" + + "ovdameahttun giellakantongiellaserbokroatiagiellaálki kiinágiellaárb" + + "evirolaš kiinnágiella", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x001e, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x003f, 0x004e, + 0x004e, 0x004e, 0x005a, 0x0066, 0x0073, 0x007f, 0x008e, 0x008e, + 0x008e, 0x009b, 0x009b, 0x00a8, 0x00a8, 0x00a8, 0x00b3, 0x00c1, + 0x00ce, 0x00da, 0x00e8, 0x00e8, 0x00f5, 0x0103, 0x0103, 0x0112, + 0x011d, 0x011d, 0x012a, 0x012a, 0x0135, 0x0140, 0x014b, 0x015a, + 0x016b, 0x0176, 0x0176, 0x0176, 0x0176, 0x0184, 0x018f, 0x019b, + 0x019b, 0x01a6, 0x01a6, 0x01b4, 0x01bf, 0x01cb, 0x01d8, 0x01d8, + // Entry 40 - 7F + 0x01d8, 0x01e7, 0x01e7, 0x01e7, 0x01e7, 0x01e7, 0x01e7, 0x01f6, + 0x0203, 0x0203, 0x0210, 0x021a, 0x0227, 0x0227, 0x0227, 0x0227, + 0x0232, 0x0232, 0x0240, 0x0240, 0x024b, 0x024b, 0x024b, 0x0256, + 0x0260, 0x026b, 0x026b, 0x0278, 0x0289, 0x0289, 0x0289, 0x0289, + 0x0292, 0x02a0, 0x02a0, 0x02ad, 0x02ad, 0x02ad, 0x02b8, 0x02c7, + 0x02c7, 0x02d5, 0x02d5, 0x02d5, 0x02e0, 0x02eb, 0x02eb, 0x02eb, + 0x02f7, 0x02f7, 0x0307, 0x0318, 0x0328, 0x0328, 0x0328, 0x0328, + 0x0337, 0x0337, 0x0337, 0x0337, 0x0337, 0x0344, 0x0344, 0x0351, + // Entry 80 - BF + 0x0351, 0x0361, 0x0361, 0x036e, 0x036e, 0x037c, 0x038a, 0x038a, + 0x038a, 0x0395, 0x0395, 0x03a5, 0x03a5, 0x03a5, 0x03b4, 0x03c1, + 0x03cc, 0x03cc, 0x03cc, 0x03d9, 0x03e5, 0x03e5, 0x03e5, 0x03e5, + 0x03f1, 0x03f1, 0x03f1, 0x03f1, 0x03f1, 0x03fb, 0x03fb, 0x03fb, + 0x03fb, 0x03fb, 0x0406, 0x0406, 0x0406, 0x0412, 0x0412, 0x041f, + 0x0429, 0x0429, 0x0429, 0x0436, 0x0436, 0x0443, 0x0443, 0x0443, + 0x0443, 0x0443, 0x0443, 0x0450, 0x0450, 0x045a, 0x045a, 0x045a, + 0x045a, 0x045a, 0x045a, 0x045a, 0x045a, 0x045a, 0x045a, 0x045a, + // Entry C0 - FF + 0x045a, 0x045a, 0x0470, 0x0470, 0x0470, 0x0470, 0x0470, 0x0470, + 0x0470, 0x0470, 0x0470, 0x0470, 0x0470, 0x0470, 0x0470, 0x047d, + 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, + 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, + 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, + 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, + 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, + 0x047d, 0x047d, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, + // Entry 100 - 13F + 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, + 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, + 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, + 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, + 0x0487, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, + 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, + 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, + 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, + // Entry 140 - 17F + 0x0498, 0x0498, 0x0498, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, + 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, + 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, + 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, + 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, + 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, + 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + // Entry 180 - 1BF + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04b1, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, + 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, + 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04c7, + 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + // Entry 1C0 - 1FF + 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04e1, + 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, + // Entry 200 - 23F + 0x04e1, 0x04f1, 0x0501, 0x050f, 0x051f, 0x051f, 0x051f, 0x051f, + 0x051f, 0x051f, 0x051f, 0x051f, 0x051f, 0x051f, 0x052d, 0x052d, + 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, + 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, + 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, + 0x052d, 0x052d, 0x052d, 0x053a, 0x053a, 0x053a, 0x054e, 0x054e, + 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, + 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, + // Entry 240 - 27F + 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x055a, 0x055a, 0x055a, + 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, + 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, + 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, + 0x055a, 0x056c, 0x056c, 0x057e, 0x0599, + }, + }, + { // se-FI + "vilgesruoššagiellabengalagiellafižigiellaarmenagiellakazakhgiellakamboža" + + "giellanepalagiellapanjabagiellathaigiellavietnamagiellaačehgiellakom" + + "oragiellastandárda arábagiellanuortariikkalaš duiskkagiellašveicalaš" + + " duiskkagiellaaustrálialaš eaŋgalsgiellakanádalaš eaŋgalsgiellabriht" + + "talaš eaŋgalsgiellaamerihkálaš eaŋgalsgiellalatiinna-amerihkalaš spá" + + "nskkagiellaespánjalaš spánskkagiellameksikolaš spánskkagiellakanádal" + + "aš fránskkagiellašveicalaš fránskkagiellabelgialaš hollánddagiellabr" + + "asilialaš portugálagiellaportugálalaš portugálagiellamoldávialaš rom" + + "ániagiellaálkes kiinnágiella", + []uint16{ // 612 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0038, 0x0038, + // Entry 40 - 7F + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x006b, 0x006b, 0x006b, + // Entry 80 - BF + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, + 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + // Entry C0 - FF + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + // Entry 100 - 13F + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + // Entry 140 - 17F + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + // Entry 180 - 1BF + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + // Entry 1C0 - 1FF + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + // Entry 200 - 23F + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + // Entry 240 - 27F + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x00b1, 0x00b1, + 0x00cf, 0x00e8, 0x0105, 0x011f, 0x0139, 0x0155, 0x017a, 0x0196, + 0x01b1, 0x01b1, 0x01cc, 0x01e7, 0x01e7, 0x0202, 0x021f, 0x023e, + 0x025a, 0x025a, 0x025a, 0x026e, + }, + }, + { // seh + "akanamáricoárabebielo-russobúlgarobengalitchecoalemãogregoinglêsespanhol" + + "persafrancêshausahindihúngaroindonésioiboitalianojaponêsjavanêscmerc" + + "oreanomalaiobirmanêsnepalêsholandêspanjabipolonêsportuguêsromenoruss" + + "okinyarwandasomalisuecotâmiltailandêsturcoucranianourduvietnamitaior" + + "ubáchinêszulusena", + []uint16{ // 502 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000c, 0x000c, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001d, 0x0025, + 0x0025, 0x0025, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0039, 0x0039, 0x0039, 0x0039, 0x003e, 0x0045, 0x0045, 0x004d, + 0x004d, 0x004d, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005f, + 0x005f, 0x0064, 0x0064, 0x0064, 0x0064, 0x006c, 0x006c, 0x006c, + // Entry 40 - 7F + 0x006c, 0x0076, 0x0076, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, + 0x0081, 0x0081, 0x0089, 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, + 0x0091, 0x0091, 0x0095, 0x0095, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x00a2, 0x00a2, 0x00ab, 0x00ab, 0x00ab, + 0x00b3, 0x00b3, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, + 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00c3, 0x00c3, 0x00cb, + // Entry 80 - BF + 0x00cb, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00db, 0x00e0, 0x00eb, + 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, + 0x00eb, 0x00eb, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, + 0x00f6, 0x00f6, 0x00fc, 0x00fc, 0x00fc, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x0114, + 0x0118, 0x0118, 0x0118, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, + 0x0122, 0x0129, 0x0129, 0x0130, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + // Entry C0 - FF + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + // Entry 100 - 13F + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + // Entry 140 - 17F + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + // Entry 180 - 1BF + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + // Entry 1C0 - 1FF + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0138, + }, + }, + { // ses + "Akan senniAmhaarik senniLaaraw senniBelaruus senniBulagaari senniBengali" + + " senniCek senniAlmaŋ senniGrek senniInglisi senniEspaaɲe senniFarsi " + + "senniFransee senniHawsance senniInduu senniHungaari senniIndoneesi s" + + "enniIboo senniItaali senniJaponee senniJavanee senniKmeer senniKoree" + + " senniMaleezi senniBurme senniNeepal senniHolandee senniPunjaabi sen" + + "niiPolonee senniPortugee senniRumaani senniRuusi senniRwanda senniSo" + + "maali senniSuweede senniTamil senniTaailandu senniTurku senniUkreen " + + "senniUrdu senniVietnaam senniYorbance senniSinuwa senni, MandareŋZul" + + "u senniKoyraboro senni", + []uint16{ // 505 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0032, 0x0041, + 0x0041, 0x0041, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0063, 0x0063, 0x0063, 0x0063, 0x006d, 0x007a, 0x007a, 0x0088, + 0x0088, 0x0088, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00ae, + 0x00ae, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00c7, 0x00c7, 0x00c7, + // Entry 40 - 7F + 0x00c7, 0x00d6, 0x00d6, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00ec, 0x00ec, 0x00f9, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0111, 0x0111, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x011c, 0x0129, 0x0129, 0x0134, 0x0134, 0x0134, + 0x0140, 0x0140, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, + 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x015d, 0x015d, 0x016a, + // Entry 80 - BF + 0x016a, 0x0178, 0x0178, 0x0178, 0x0178, 0x0185, 0x0190, 0x019c, + 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, + 0x019c, 0x019c, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, + 0x01b6, 0x01b6, 0x01c1, 0x01c1, 0x01c1, 0x01d0, 0x01d0, 0x01d0, + 0x01d0, 0x01d0, 0x01db, 0x01db, 0x01db, 0x01db, 0x01db, 0x01e7, + 0x01f1, 0x01f1, 0x01f1, 0x01ff, 0x01ff, 0x01ff, 0x01ff, 0x01ff, + 0x01ff, 0x020d, 0x020d, 0x0224, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + // Entry C0 - FF + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + // Entry 100 - 13F + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + // Entry 140 - 17F + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + // Entry 180 - 1BF + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + // Entry 1C0 - 1FF + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x023d, + }, + }, + { // sg + "AkâanAmarîkiArâboBielörûsiBulugäriBengäliTyêkiZâmaniGerêkiAnglëeEspanyöl" + + "FarsîFarânziHaüsäHîndiHongruäaEnndonezïiÏgböÊnndeZaponëeZavanëeKmêre" + + "KoreyëenMalëeMiamära, BirimäniNepalëeHolandëePenzäbïPolonëePortugëe," + + " PûraRumëenRûsiRuandäaSängöSomalïiSueduäaTämûliThâiTûrûkuUkrêniÛrduV" + + "ietnämYorubaShinuäaZûlu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x001f, 0x0028, + 0x0028, 0x0028, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x003d, 0x003d, 0x003d, 0x003d, 0x0044, 0x004b, 0x004b, 0x0054, + 0x0054, 0x0054, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0069, + 0x0069, 0x006f, 0x006f, 0x006f, 0x006f, 0x0078, 0x0078, 0x0078, + // Entry 40 - 7F + 0x0078, 0x0083, 0x0083, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x008f, 0x008f, 0x0097, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, + 0x009f, 0x009f, 0x00a5, 0x00a5, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00b4, 0x00b4, 0x00c7, 0x00c7, 0x00c7, + 0x00cf, 0x00cf, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00e1, 0x00e1, 0x00e9, + // Entry 80 - BF + 0x00e9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x0100, 0x0105, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x0114, 0x0114, 0x0114, 0x0114, + 0x0114, 0x0114, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x0124, 0x0124, 0x012c, 0x012c, 0x012c, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0131, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0140, + 0x0145, 0x0145, 0x0145, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, + 0x014d, 0x0153, 0x0153, 0x015b, 0x0160, + }, + }, + { // shi + "ⵜⴰⴽⴰⵏⵜⵜⴰⵎⵀⴰⵔⵉⵜⵜⴰⵄⵔⴰⴱⵜⵜⴰⴱⵉⵍⴰⵔⵓⵙⵜⵜⴰⴱⵍⵖⴰⵔⵉⵜⵜⴰⴱⵏⵖⴰⵍⵉⵜⵜⴰⵜⵛⵉⴽⵉⵜⵜⴰⵍⵉⵎⴰⵏⵜⵜⴰⴳⵔⵉⴳⵉ" + + "ⵜⵜⴰⵏⴳⵍⵉⵣⵜⵜⴰⵙⴱⵏⵢⵓⵍⵉⵜⵜⴰⴼⵓⵔⵙⵉⵜⵜⴰⴼⵔⴰⵏⵙⵉⵙⵜⵜⴰⵀⴰⵡⵙⴰⵜⵜⴰⵀⵉⵏⴷⵉⵜⵜⴰⵀⵏⵖⴰⵔⵉⵜⵜⴰⵏⴷ" + + "ⵓⵏⵉⵙⵉⵜⵜⵉⴳⴱⵓⵜⵜⴰⵟⴰⵍⵢⴰⵏⵜⵜⴰⵊⴰⴱⴱⵓⵏⵉⵜⵜⴰⵊⴰⴼⴰⵏⵉⵜⵜⴰⵅⵎⵉⵔⵜⵜⴰⴽⵓⵔⵉⵜⵜⴰⵎⴰⵍⴰⵡⵉⵜⵜⴰⴱ" + + "ⵉⵔⵎⴰⵏⵉⵜⵜⴰⵏⵉⴱⴰⵍⵉⵜⵜⴰⵀⵓⵍⴰⵏⴷⵉⵜⵜⴰⴱⵏⵊⴰⴱⵉⵜⵜⴰⴱⵓⵍⵓⵏⵉⵜⵜⴰⴱⵕⵟⵇⵉⵣⵜⵜⴰⵔⵓⵎⴰⵏⵉⵜⵜⴰⵔⵓ" + + "ⵙⵉⵜⵜⴰⵔⵓⵡⴰⵏⴷⵉⵜⵜⴰⵙⵓⵎⴰⵍⵉⵜⵜⴰⵙⵡⵉⴷⵉⵜⵜⴰⵜⴰⵎⵉⵍⵜⵜⴰⵜⴰⵢⵍⴰⵏⴷⵉⵜⵜⴰⵜⵓⵔⴽⵉⵜⵜⵓⴽⵔⴰⵏⵉⵜⵜ" + + "ⵓⵔⴷⵓⵜⵜⴰⴼⵉⵜⵏⴰⵎⵉⵜⵜⴰⵢⵔⵓⴱⴰⵜⵜⴰⵛⵉⵏⵡⵉⵜⵜⴰⵣⵓⵍⵓⵜⵜⴰⵛⵍⵃⵉⵜ", + []uint16{ // 508 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x002a, 0x002a, + 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x005d, 0x0078, + 0x0078, 0x0078, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, + 0x0093, 0x0093, 0x0093, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00db, 0x00f3, 0x00f3, 0x0111, + 0x0111, 0x0111, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0147, + 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x015f, + 0x015f, 0x0177, 0x0177, 0x0177, 0x0177, 0x0192, 0x0192, 0x0192, + // Entry 40 - 7F + 0x0192, 0x01b0, 0x01b0, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01dd, 0x01dd, 0x01fb, 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, + 0x0216, 0x0216, 0x022b, 0x022b, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x025b, 0x025b, 0x0279, 0x0279, 0x0279, + 0x0294, 0x0294, 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02b2, + 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02cd, 0x02cd, 0x02e8, + // Entry 80 - BF + 0x02e8, 0x0303, 0x0303, 0x0303, 0x0303, 0x031e, 0x0333, 0x0351, + 0x0351, 0x0351, 0x0351, 0x0351, 0x0351, 0x0351, 0x0351, 0x0351, + 0x0351, 0x0351, 0x036c, 0x036c, 0x036c, 0x036c, 0x036c, 0x036c, + 0x0384, 0x0384, 0x039c, 0x039c, 0x039c, 0x03bd, 0x03bd, 0x03bd, + 0x03bd, 0x03bd, 0x03d5, 0x03d5, 0x03d5, 0x03d5, 0x03d5, 0x03ed, + 0x03ff, 0x03ff, 0x03ff, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x0435, 0x0435, 0x044d, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry C0 - FF + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 100 - 13F + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 140 - 17F + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 180 - 1BF + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 1C0 - 1FF + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0477, + }, + }, + { // shi-Latn + "TakantTamharitTaɛrabtTabilarustTablɣaritTabnɣalitTatcikitTalimantTagrigi" + + "tTangliztTasbnyulitTafursitTafransistTahawsatTahinditTahnɣaritTandun" + + "isitTigbutTaṭalyantTajabbunitTajavanitTaxmirtTakuritTamalawitTabirma" + + "nitTanibalitTahulanditTabnjabitTabulunitTabṛṭqiztTarumanitTarusitTar" + + "uwanditTasumalitTaswiditTatamiltTataylanditTaturkitTukranitTurdutTaf" + + "itnamitTayrubatTacinwitTazulutTashelḥiyt", + []uint16{ // 508 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0020, 0x002a, + 0x002a, 0x002a, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0044, 0x0044, 0x0044, 0x0044, 0x004c, 0x0054, 0x0054, 0x005e, + 0x005e, 0x005e, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0078, + 0x0078, 0x0080, 0x0080, 0x0080, 0x0080, 0x008a, 0x008a, 0x008a, + // Entry 40 - 7F + 0x008a, 0x0094, 0x0094, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x00a5, 0x00a5, 0x00af, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, + 0x00b8, 0x00b8, 0x00bf, 0x00bf, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00cf, 0x00cf, 0x00d9, 0x00d9, 0x00d9, + 0x00e2, 0x00e2, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00f5, 0x00f5, 0x00fe, + // Entry 80 - BF + 0x00fe, 0x010b, 0x010b, 0x010b, 0x010b, 0x0114, 0x011b, 0x0125, + 0x0125, 0x0125, 0x0125, 0x0125, 0x0125, 0x0125, 0x0125, 0x0125, + 0x0125, 0x0125, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x0136, 0x0136, 0x013e, 0x013e, 0x013e, 0x0149, 0x0149, 0x0149, + 0x0149, 0x0149, 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, 0x0159, + 0x015f, 0x015f, 0x015f, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0171, 0x0171, 0x0179, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + // Entry C0 - FF + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + // Entry 100 - 13F + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + // Entry 140 - 17F + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + // Entry 180 - 1BF + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + // Entry 1C0 - 1FF + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x018c, + }, + }, + { // si + siLangStr, + siLangIdx, + }, + { // sk + skLangStr, + skLangIdx, + }, + { // sl + slLangStr, + slLangIdx, + }, + { // smn + "afarabhasiakielâafrikaansakankielâamharakielâaragoniakielâarabiakielâass" + + "amkielâavarkielâaymarakielâazerbaidžankielâbaškirkielâvielgisruošâki" + + "elâbulgariakielâbislamabambarakielâbanglakielâtiibetkielâbretonkielâ" + + "bosniakielâkatalankielâtšetšenkielâchamorrokielâkorsikakielâtšeekiki" + + "elâkirkkoslaavitšuvaskielâkymrikielâtanskakielâsaksakielâdivehikielâ" + + "Dzongkhaewekielâkreikakielâeŋgâlâskielâesperantokielâespanjakielâees" + + "tikielâbaskikielâpersiakielâfulakielâsuomâkielâfidžikielâfäärikielâr" + + "anskakielâviestârfriisiiirikielâskottilâš gaelikielâgaliciakielâguar" + + "anikielâgudžaratikielâmankshausakielâhepreakielâhindikielâkroatiakie" + + "lâHaiti kreoliuŋgarkielâarmeniakielâhererokielâinterlinguaindonesiak" + + "ielâigbokielâidoislandkielâitaliakielâinuktitutjaapaankielâjaavakiel" + + "âgeorgiakielâkikujukielâkuanjamakazakkielâkalaallisutkhmerkielâkann" + + "adakoreakielâkanurikielâkashmirkielâkurdikielâkomikielâkornikielâkir" + + "giskielâläättinkielâluxemburgkielâlugandalimburgkielâlingalalaokielâ" + + "liettuakielâkatangalubalatviakielâmalagaskielâmarshallkielâmaorikiel" + + "âmakedoniakielâmalajammongoliakielâmarathikielâmalaijimaltakielâbur" + + "makielânaurukielâtave-nbedelenepalkielândongahollandkielâtárukielâ n" + + "ynorsktárukielâ bokmålmaadâ-nbedelenavajokielânjanžaoksitanoromokiel" + + "âorijaossetkielâpandžabipuolakielâpaštuportugalkielâquechuaretoroom" + + "aankielârundiromaniakielâruošâkielâruandakielâsanskritsardiniakielâs" + + "indhitavekielâsangosinhalaslovakiakielâsloveniakielâsamoakielâshonas" + + "omalikielâalbaniakielâserbiakielâswazikielâmaadâsothosundakielâruotâ" + + "kielâswahilikielâtamilkielâtelugutadžikkielâthaikielâtigrinyakielâtu" + + "rkmenkielâtswanakielâtongakielâtuurkikielâtsongakielâtatarkielâtahit" + + "ikielâuigurkielâukrainakielâurduuzbekkielâvendakielâvietnamkielâvola" + + "pükwalloonkielâwolofkielâxhosakielâjiddishyorubakielâmandarinkiinaki" + + "elâzulukielâatšehkielâadangmeadygeaghemainukielâaleutkielâmaadâaltai" + + "kielâangikamapudungunarapahokielâasukielâasturiakielâawadhikielâbali" + + "kielâbasaakielâbembakielâbenakielâbhožpurikielâbinikielâsiksikakielâ" + + "bodokielâbugikielâblinkielâcebuanokielâkigakielâchuukkielâmarikielâc" + + "hoctawkielâcherokeekielâcheyennekielâsorani kurdikielâSeychellij kre" + + "oliranskadakotakielâdargikielâtaitakielâdogribkielâzarmakielâvyeliso" + + "rbidualakielâjola-fonyidazakielâembukielâefikkielâekajukewondokielâf" + + "ilipinokielâfonkielâfriulikielâgakielâge’ezkiribatikielâgorontalokie" + + "lâtoovláš kreikakielâSveitsi saksakielâgusiikielâgwich’inkielâhawaij" + + "ikielâhiligainokielâhmongkielâpajesorbihupakielâibankielâibibiokielâ" + + "ilocanoinguškielâlojbanngombamachamekabylkielâkachinjjukambakielâkab" + + "ardikielâtyapmakondeKap Verde kreolikorokhasikoyra chiinikakokalenji" + + "kielâkimbundukonkanikpellekielâkarachai-balkarkielâkärjilkielâkurukh" + + "kielâshambalabafiakölnkielâkumykkielâladinokielâlangokielâlezgikielâ" + + "lakotakielâlozitavelurilulualubalundaluolusailuhyamadurakielâmagahim" + + "aithilimakasarmasaikielâmokšakielâmendekielâmerukielâmorisyenmakua-m" + + "eettometa’micmacminangkabaumanipurimohawkkielâmooreviestârmarimundan" + + "gmaŋgâ kielâmuskogeekielâmirandeskielâersäkielâmazandaraninapolikiel" + + "ânamanewariniaskielâniuekielâkwasiongiemboonnogaikielâtoovláš táruk" + + "ielân’kotavesothonuernyankolekielâpangasinankielâpampangakielâpapiam" + + "entupalaukielâNigeria pidgintoovláš preussikielâki’che’rapanuiraroto" + + "ngaromboroomaankielâaromaniakielârwasandawejakutkielâsamburukielâsan" + + "talikielângambaysangusisiliakielâskootikielâsenakoyraboro sennitašel" + + "hitshankielâmaadâsämikielâjuulevsämikielâanarâškielânuorttâlâškielâs" + + "oninkesranantongosahosukumakielâkomorikielâsyyriakielâtemnekielâates" + + "otetumtigrekielâklingonkielâtok pisintarokotumbukakielâtuvalukielâta" + + "sawaqtuvakielâKoskâatlas tamazightudmurtkielâumbunduruotâsvaikielâve" + + "psäkielâvunjowalliskielâwolaitakielâwaraykielâkalmukkielâsogayangben" + + "yembakantonkielâstandard tamazightzunikielâij kielâlâš siskáldâszaza" + + "kielâstandard arabiakielâNuorttâriijkâ saksakielâSveitsi pajesaksaki" + + "elâAustralia eŋgâlâskielâKanada eŋgâlâskielâBritannia eŋgâlâskielâAm" + + "erika eŋgâlâskielâLäättin-Amerika espanjakielâEspanja espanjakielâMe" + + "ksiko espanjakielâKanada ranskakielâSveitsi ranskakielâVuáládâhenâmi" + + "j saksakielâhollandkielâ (flaami)Brasilia portugalkielâPortugal port" + + "ugalkielâKongo swahilikielâoovtâkiärdánis kiinakielâärbivuáválâš kii" + + "nakielâ", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x0011, 0x0011, 0x001a, 0x0024, 0x0030, 0x003e, + 0x004a, 0x0055, 0x005f, 0x006b, 0x007d, 0x008a, 0x009e, 0x00ac, + 0x00b3, 0x00c0, 0x00cc, 0x00d8, 0x00e4, 0x00f0, 0x00fd, 0x010c, + 0x011a, 0x0127, 0x0127, 0x0134, 0x0140, 0x014d, 0x0158, 0x0164, + 0x016f, 0x017b, 0x0183, 0x018c, 0x0198, 0x01a8, 0x01b7, 0x01c4, + 0x01cf, 0x01da, 0x01e6, 0x01f0, 0x01fc, 0x0208, 0x0215, 0x0221, + 0x022f, 0x0239, 0x0250, 0x025d, 0x026a, 0x027a, 0x027f, 0x028a, + 0x0296, 0x02a1, 0x02a1, 0x02ae, 0x02ba, 0x02c6, 0x02d3, 0x02df, + // Entry 40 - 7F + 0x02ea, 0x02f9, 0x02f9, 0x0303, 0x0303, 0x0303, 0x0306, 0x0312, + 0x031e, 0x0327, 0x0334, 0x033f, 0x034c, 0x034c, 0x0358, 0x0360, + 0x036b, 0x0376, 0x0381, 0x0388, 0x0393, 0x039f, 0x03ac, 0x03b7, + 0x03c1, 0x03cc, 0x03d8, 0x03e7, 0x03f6, 0x03fd, 0x040a, 0x0411, + 0x041a, 0x0427, 0x0432, 0x043e, 0x044b, 0x0459, 0x0464, 0x0473, + 0x047a, 0x0488, 0x0495, 0x049c, 0x04a7, 0x04b2, 0x04bd, 0x04c9, + 0x04d4, 0x04da, 0x04e7, 0x04fa, 0x050d, 0x051b, 0x0527, 0x052e, + 0x0535, 0x0535, 0x0540, 0x0545, 0x0550, 0x0559, 0x0559, 0x0564, + // Entry 80 - BF + 0x056a, 0x0578, 0x057f, 0x0590, 0x0595, 0x05a2, 0x05af, 0x05bb, + 0x05c3, 0x05d1, 0x05d7, 0x05e1, 0x05e6, 0x05ed, 0x05fb, 0x0609, + 0x0614, 0x0619, 0x0625, 0x0632, 0x063e, 0x0649, 0x0654, 0x065f, + 0x066b, 0x0678, 0x0683, 0x0689, 0x0696, 0x06a0, 0x06ae, 0x06bb, + 0x06c7, 0x06d2, 0x06de, 0x06ea, 0x06f5, 0x0701, 0x070c, 0x0719, + 0x071d, 0x0728, 0x0733, 0x0740, 0x0748, 0x0755, 0x0760, 0x076b, + 0x0772, 0x077e, 0x077e, 0x0791, 0x079b, 0x07a7, 0x07a7, 0x07ae, + 0x07b3, 0x07b3, 0x07b3, 0x07b8, 0x07c2, 0x07c2, 0x07c2, 0x07cd, + // Entry C0 - FF + 0x07cd, 0x07de, 0x07de, 0x07e4, 0x07e4, 0x07ee, 0x07ee, 0x07fb, + 0x07fb, 0x07fb, 0x07fb, 0x07fb, 0x07fb, 0x0804, 0x0804, 0x0811, + 0x0811, 0x081d, 0x081d, 0x0827, 0x0827, 0x0832, 0x0832, 0x0832, + 0x0832, 0x0832, 0x083d, 0x083d, 0x0847, 0x0847, 0x0847, 0x0847, + 0x0856, 0x0856, 0x0860, 0x0860, 0x0860, 0x086d, 0x086d, 0x086d, + 0x086d, 0x086d, 0x0877, 0x0877, 0x0877, 0x0881, 0x0881, 0x088b, + 0x088b, 0x088b, 0x088b, 0x088b, 0x088b, 0x0898, 0x08a2, 0x08a2, + 0x08a2, 0x08ad, 0x08b7, 0x08b7, 0x08c4, 0x08c4, 0x08d2, 0x08e0, + // Entry 100 - 13F + 0x08f2, 0x08f2, 0x08f2, 0x08f2, 0x0909, 0x0909, 0x0915, 0x0920, + 0x092b, 0x092b, 0x092b, 0x0937, 0x0937, 0x0942, 0x0942, 0x094c, + 0x094c, 0x0957, 0x0957, 0x0961, 0x0961, 0x096b, 0x0975, 0x097f, + 0x097f, 0x097f, 0x0985, 0x0985, 0x0985, 0x0985, 0x0991, 0x0991, + 0x0991, 0x099f, 0x099f, 0x09a8, 0x09a8, 0x09a8, 0x09a8, 0x09a8, + 0x09a8, 0x09a8, 0x09b4, 0x09bc, 0x09bc, 0x09bc, 0x09bc, 0x09bc, + 0x09bc, 0x09c3, 0x09d1, 0x09d1, 0x09d1, 0x09d1, 0x09d1, 0x09d1, + 0x09e0, 0x09e0, 0x09e0, 0x09f6, 0x0a09, 0x0a09, 0x0a09, 0x0a14, + // Entry 140 - 17F + 0x0a24, 0x0a24, 0x0a24, 0x0a31, 0x0a31, 0x0a40, 0x0a40, 0x0a4b, + 0x0a54, 0x0a54, 0x0a5e, 0x0a68, 0x0a74, 0x0a7b, 0x0a87, 0x0a87, + 0x0a87, 0x0a8d, 0x0a93, 0x0a9a, 0x0a9a, 0x0a9a, 0x0a9a, 0x0a9a, + 0x0aa5, 0x0aab, 0x0aae, 0x0ab9, 0x0ab9, 0x0ac6, 0x0ac6, 0x0aca, + 0x0ad1, 0x0ae1, 0x0ae1, 0x0ae5, 0x0ae5, 0x0aea, 0x0aea, 0x0af6, + 0x0af6, 0x0af6, 0x0afa, 0x0b07, 0x0b0f, 0x0b0f, 0x0b16, 0x0b16, + 0x0b22, 0x0b37, 0x0b37, 0x0b37, 0x0b44, 0x0b50, 0x0b58, 0x0b5d, + 0x0b68, 0x0b73, 0x0b73, 0x0b7f, 0x0b8a, 0x0b8a, 0x0b8a, 0x0b95, + // Entry 180 - 1BF + 0x0b95, 0x0b95, 0x0b95, 0x0ba1, 0x0ba1, 0x0ba1, 0x0ba5, 0x0bad, + 0x0bad, 0x0bb6, 0x0bb6, 0x0bbb, 0x0bbe, 0x0bc3, 0x0bc8, 0x0bc8, + 0x0bc8, 0x0bd4, 0x0bd4, 0x0bda, 0x0be2, 0x0be9, 0x0be9, 0x0bf4, + 0x0bf4, 0x0c00, 0x0c00, 0x0c0b, 0x0c15, 0x0c1d, 0x0c1d, 0x0c29, + 0x0c30, 0x0c36, 0x0c41, 0x0c41, 0x0c49, 0x0c55, 0x0c5a, 0x0c66, + 0x0c6d, 0x0c7b, 0x0c89, 0x0c97, 0x0c97, 0x0c97, 0x0c97, 0x0ca2, + 0x0cad, 0x0cad, 0x0cb9, 0x0cbd, 0x0cbd, 0x0cc3, 0x0ccd, 0x0cd7, + 0x0cd7, 0x0cdd, 0x0ce6, 0x0cf1, 0x0d06, 0x0d06, 0x0d0c, 0x0d15, + // Entry 1C0 - 1FF + 0x0d19, 0x0d19, 0x0d19, 0x0d27, 0x0d27, 0x0d27, 0x0d27, 0x0d27, + 0x0d37, 0x0d37, 0x0d45, 0x0d4f, 0x0d5a, 0x0d5a, 0x0d68, 0x0d68, + 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d7f, + 0x0d7f, 0x0d8a, 0x0d8a, 0x0d8a, 0x0d91, 0x0d9a, 0x0d9a, 0x0d9a, + 0x0d9f, 0x0dac, 0x0dac, 0x0dac, 0x0dac, 0x0dba, 0x0dbd, 0x0dc4, + 0x0dcf, 0x0dcf, 0x0ddc, 0x0ddc, 0x0de9, 0x0de9, 0x0df0, 0x0df5, + 0x0e02, 0x0e0e, 0x0e0e, 0x0e0e, 0x0e0e, 0x0e12, 0x0e12, 0x0e12, + 0x0e21, 0x0e21, 0x0e21, 0x0e2a, 0x0e34, 0x0e34, 0x0e34, 0x0e34, + // Entry 200 - 23F + 0x0e34, 0x0e45, 0x0e56, 0x0e64, 0x0e77, 0x0e7e, 0x0e7e, 0x0e89, + 0x0e89, 0x0e8d, 0x0e8d, 0x0e99, 0x0e99, 0x0e99, 0x0ea5, 0x0ea5, + 0x0eb1, 0x0eb1, 0x0eb1, 0x0ebc, 0x0ec1, 0x0ec1, 0x0ec6, 0x0ed1, + 0x0ed1, 0x0ed1, 0x0ed1, 0x0ede, 0x0ede, 0x0ede, 0x0ede, 0x0ede, + 0x0ee7, 0x0ee7, 0x0eed, 0x0eed, 0x0eed, 0x0eed, 0x0efa, 0x0f06, + 0x0f0d, 0x0f17, 0x0f2c, 0x0f38, 0x0f38, 0x0f3f, 0x0f46, 0x0f4f, + 0x0f4f, 0x0f5b, 0x0f5b, 0x0f5b, 0x0f5b, 0x0f5b, 0x0f60, 0x0f6c, + 0x0f79, 0x0f84, 0x0f84, 0x0f84, 0x0f84, 0x0f90, 0x0f90, 0x0f94, + // Entry 240 - 27F + 0x0f94, 0x0f94, 0x0f9b, 0x0fa0, 0x0fa0, 0x0fac, 0x0fac, 0x0fac, + 0x0fac, 0x0fac, 0x0fbe, 0x0fc8, 0x0fe2, 0x0fec, 0x1001, 0x1001, + 0x101c, 0x1033, 0x104d, 0x1064, 0x107e, 0x1096, 0x10b5, 0x10ca, + 0x10df, 0x10df, 0x10f2, 0x1106, 0x1124, 0x113a, 0x1151, 0x1168, + 0x1168, 0x1168, 0x117b, 0x1198, 0x11b5, + }, + }, + { // sn + "chiAkanichiAmaricchiArabuchiBelarusichiBulgarianchiBengalichiCzechchiJer" + + "imanichiGreekChirunguchiSpanishchiPeshiyachiFurenchichiHausachiHindi" + + "chiHungarichiIndonesiachiIgbochiTarianachiJapanichiJavachiKhemachiKo" + + "riachiMalaychiBurmachiNepalichiDutchchiPunjabichiPolishchiPutukezich" + + "iRomanianchiRashiyachiRwandachiShonachiSomalichiSwedishchiTamilchiTh" + + "aichiTurkishchiUkreniachiUrduchiVietnamchiYorubachiChinesechiZulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0011, 0x0011, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0030, + 0x0030, 0x0030, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x004d, 0x004d, 0x004d, 0x004d, 0x0055, 0x005d, 0x005d, 0x0067, + 0x0067, 0x0067, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x0084, + 0x0084, 0x008c, 0x008c, 0x008c, 0x008c, 0x0096, 0x0096, 0x0096, + // Entry 40 - 7F + 0x0096, 0x00a2, 0x00a2, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, + 0x00b3, 0x00b3, 0x00bc, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00cb, 0x00cb, 0x00d3, 0x00d3, 0x00d3, 0x00d3, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, + 0x00d3, 0x00d3, 0x00d3, 0x00db, 0x00db, 0x00e3, 0x00e3, 0x00e3, + 0x00ec, 0x00ec, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, + 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00fe, 0x00fe, 0x0107, + // Entry 80 - BF + 0x0107, 0x0112, 0x0112, 0x0112, 0x0112, 0x011d, 0x0127, 0x0130, + 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, + 0x0130, 0x0138, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, + 0x014b, 0x014b, 0x0153, 0x0153, 0x0153, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x016e, + 0x0175, 0x0175, 0x0175, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, + 0x017f, 0x0188, 0x0188, 0x0192, 0x0199, + }, + }, + { // so + "AkanAxmaariCarabiBeleruusiyaanBulgeeriyaanBangaaliJeegJarmalGiriikIngiri" + + "isiIsbaanishFaarisiFaransiisFiriisiyan GalbeedHawsaHindiHangariyaanI" + + "ndunuusiyaanIgboTalyaaniJabbaaniisJafaaniisKamboodhianKuuriyaanMalaa" + + "yBurmeseNebaaliHolandaysBunjaabiBoolishBoortaqiisRomankaRuushRwandaS" + + "oomaaliSwiidhisTamiilTaaylandaysTurkishYukreeniyaanUrduuFiitnaamaysY" + + "oruubaJayniisZuulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000b, 0x000b, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x001e, 0x002a, + 0x002a, 0x002a, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x003c, 0x003c, 0x003c, 0x003c, 0x0042, 0x004b, 0x004b, 0x0054, + 0x0054, 0x0054, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x0064, + 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x007b, + 0x007b, 0x0080, 0x0080, 0x0080, 0x0080, 0x008b, 0x008b, 0x008b, + // Entry 40 - 7F + 0x008b, 0x0098, 0x0098, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x00a4, 0x00a4, 0x00ae, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, + 0x00b7, 0x00b7, 0x00c2, 0x00c2, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00d1, 0x00d1, 0x00d8, 0x00d8, 0x00d8, + 0x00df, 0x00df, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00f0, 0x00f0, 0x00f7, + // Entry 80 - BF + 0x00f7, 0x0101, 0x0101, 0x0101, 0x0101, 0x0108, 0x010d, 0x0113, + 0x0113, 0x0113, 0x0113, 0x0113, 0x0113, 0x0113, 0x0113, 0x0113, + 0x0113, 0x0113, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x0123, 0x0123, 0x0129, 0x0129, 0x0129, 0x0134, 0x0134, 0x0134, + 0x0134, 0x0134, 0x013b, 0x013b, 0x013b, 0x013b, 0x013b, 0x0147, + 0x014c, 0x014c, 0x014c, 0x0157, 0x0157, 0x0157, 0x0157, 0x0157, + 0x0157, 0x015e, 0x015e, 0x0165, 0x016a, + }, + }, + { // sq + sqLangStr, + sqLangIdx, + }, + { // sr + srLangStr, + srLangIdx, + }, + { // sr-Cyrl-BA + "бјелорускибамананканбанглахаићански креолскилаошкисинхалскиисикосаисизул" + + "умапудунгуншвајцарски немачкимохокн’којужни шилхацентралноатласки т" + + "амашекстандардни марокански тамашек", + []uint16{ // 587 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014, + 0x0014, 0x0028, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0057, 0x0057, 0x0057, 0x0057, + // Entry 40 - 7F + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + // Entry 80 - BF + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0083, + 0x0083, 0x0083, 0x0083, 0x0083, 0x0091, 0x0091, 0x0091, 0x0091, + 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, + // Entry C0 - FF + 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + // Entry 100 - 13F + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + // Entry 140 - 17F + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + // Entry 180 - 1BF + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00db, 0x00db, + // Entry 1C0 - 1FF + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + // Entry 200 - 23F + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + // Entry 240 - 27F + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x0157, + }, + }, + { // sr-Cyrl-ME + "бјелорускибамананканбанглафулаххаићански креолскилаошкиисикосаисизулумап" + + "удунгунмохокн’којужни шилхацентралноатласки тамашекстандардни марок" + + "ански тамашек", + []uint16{ // 587 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014, + 0x0014, 0x0028, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x0061, 0x0061, 0x0061, 0x0061, + // Entry 40 - 7F + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + // Entry 80 - BF + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + // Entry C0 - FF + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + // Entry 100 - 13F + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + // Entry 140 - 17F + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + // Entry 180 - 1BF + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x00a7, 0x00a7, 0x00a7, + 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, + 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, + 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00b0, 0x00b0, + // Entry 1C0 - 1FF + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + // Entry 200 - 23F + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, + 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, + 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, + // Entry 240 - 27F + 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, + 0x00f4, 0x00f4, 0x012c, + }, + }, + { // sr-Cyrl-XK + "бамананканбанглафулаххаићански креолскилаошкисинхалскиисикосаисизулушвај" + + "царски немачкимохокн’којужни шилхацентралноатласки тамашекстандардн" + + "и марокански тамашек", + []uint16{ // 587 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0014, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x004d, 0x004d, 0x004d, 0x004d, + // Entry 40 - 7F + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + // Entry 80 - BF + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x0079, + 0x0079, 0x0079, 0x0079, 0x0079, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + // Entry C0 - FF + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + // Entry 100 - 13F + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + // Entry 140 - 17F + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + // Entry 180 - 1BF + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00bd, 0x00bd, + // Entry 1C0 - 1FF + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + // Entry 200 - 23F + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00d2, 0x00d2, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + // Entry 240 - 27F + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0139, + }, + }, + { // sr-Latn + srLatnLangStr, + srLatnLangIdx, + }, + { // sr-Latn-BA + "bjeloruskibamanankanbanglahaićanski kreolskilaoškisinhalskiisikosaisizul" + + "umapudungunšvajcarski nemačkimohokn’kojužni šilhacentralnoatlaski ta" + + "mašekstandardni marokanski tamašek", + []uint16{ // 587 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, + 0x000a, 0x0014, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x002d, 0x002d, 0x002d, 0x002d, + // Entry 40 - 7F + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + // Entry 80 - BF + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x003d, 0x003d, 0x003d, + 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + // Entry C0 - FF + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + // Entry 100 - 13F + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0069, 0x0069, 0x0069, 0x0069, + // Entry 140 - 17F + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + // Entry 180 - 1BF + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x006e, 0x006e, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0074, 0x0074, + // Entry 1C0 - 1FF + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + // Entry 200 - 23F + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + // Entry 240 - 27F + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x00b8, + }, + }, + { // sr-Latn-ME + "bjeloruskibamanankanbanglafulahhaićanski kreolskilaoškiisikosaisizulumap" + + "udungunmohokn’kojužni šilhacentralnoatlaski tamašekstandardni maroka" + + "nski tamašek", + []uint16{ // 587 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, + 0x000a, 0x0014, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, + 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, + 0x001f, 0x001f, 0x001f, 0x001f, 0x0032, 0x0032, 0x0032, 0x0032, + // Entry 40 - 7F + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + // Entry 80 - BF + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + // Entry C0 - FF + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + // Entry 100 - 13F + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + // Entry 140 - 17F + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + // Entry 180 - 1BF + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x005c, 0x005c, + // Entry 1C0 - 1FF + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + // Entry 200 - 23F + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + // Entry 240 - 27F + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x00a0, + }, + }, + { // sr-Latn-XK + "bamanankanbanglafulahhaićanski kreolskilaoškisinhalskiisikosaisizulušvaj" + + "carski nemačkimohokn’kojužni šilhacentralnoatlaski tamašekstandardni" + + " marokanski tamašek", + []uint16{ // 587 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000a, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0028, 0x0028, 0x0028, 0x0028, + // Entry 40 - 7F + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + // Entry 80 - BF + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x003f, + 0x003f, 0x003f, 0x003f, 0x003f, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + // Entry C0 - FF + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + // Entry 100 - 13F + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x005a, 0x005a, 0x005a, 0x005a, + // Entry 140 - 17F + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + // Entry 180 - 1BF + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005f, 0x005f, 0x005f, + 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, + 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, + 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x0065, 0x0065, + // Entry 1C0 - 1FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + // Entry 200 - 23F + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + // Entry 240 - 27F + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x00a9, + }, + }, + { // sv + svLangStr, + svLangIdx, + }, + { // sv-FI + "kirgiziska", + []uint16{ // 91 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000a, + }, + }, + { // sw + swLangStr, + swLangIdx, + }, + { // sw-CD + "KiakanKiazabajaniKimanksiKikirigiziKilimburgiKimasedoniaKiyidiKiarabu ch" + + "a AljeriaKibuginiKigwichiinKihupaKiingushKilojbanKikachinKikoyra Chi" + + "iniKikakoKikomipermyakKikurukhKikumykKilambamakKimokshaKimikmakiKimo" + + "hokiKimossiKingiemboonKiinkoPijini ya NijeriaKikiicheKiarabu cha Cha" + + "diKitongo cha SrananKikomoroKisiriaKiudumurtiKirootKiwalserKiarabu c" + + "ha Dunia Kilichosanifishwa", + []uint16{ // 591 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0019, 0x0019, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + // Entry 40 - 7F + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0019, 0x0023, 0x0023, 0x0023, 0x0023, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + // Entry 80 - BF + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + // Entry C0 - FF + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + // Entry 100 - 13F + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, + // Entry 140 - 17F + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0069, 0x0069, 0x0069, 0x0069, 0x0071, 0x0071, + 0x0071, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, + 0x0079, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x008f, + 0x008f, 0x008f, 0x0095, 0x0095, 0x0095, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00aa, 0x00aa, 0x00aa, + 0x00aa, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b8, 0x00b8, + // Entry 180 - 1BF + 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, + 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, + 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00bb, 0x00bb, 0x00bb, + 0x00bb, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00d4, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00ec, 0x00ec, + // Entry 1C0 - 1FF + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0116, 0x0116, 0x0116, + // Entry 200 - 23F + 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, 0x0128, + 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0130, 0x0130, + 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, + 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, + 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, + 0x0137, 0x0137, 0x0137, 0x0141, 0x0141, 0x0141, 0x0147, 0x0147, + 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x014f, + 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, + // Entry 240 - 27F + 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, + 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x0172, + }, + }, + { // sw-KE + "KitwiKiazabajaniKilimbugishKimasedoniaKiodiaKiwaloonainKiarabu cha Aljer" + + "iaKibuginiKikurdi cha KatiKisorbian cha ChiniKigiriki cha KaleKisorb" + + "ia cha JuuKingushiKilojbaniKikachinKikoyra ChiiniKikakoKikomipermyak" + + "KikurukhKilambaKimokshaKimicmacKimohokiKiingiemboonKiin’koPijini ya " + + "NijeriascoKikoyraboro SenniKiarabu cha ChadiKiscran TongoKicomoroKis" + + "yriaLugha ya Central Atlas TamazightKiudumurtiKirootKiwalserTamazigh" + + "t Sanifu ya MorokoKiarabu cha Sasa Kilichosanifishwa", + []uint16{ // 591 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + // Entry 40 - 7F + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + // Entry 80 - BF + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0037, 0x0037, 0x0037, 0x0037, + // Entry C0 - FF + 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + // Entry 100 - 13F + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + // Entry 140 - 17F + 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x009e, 0x009e, + 0x009e, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, + 0x00a7, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, + 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00bd, + 0x00bd, 0x00bd, 0x00c3, 0x00c3, 0x00c3, 0x00d0, 0x00d0, 0x00d0, + 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00df, 0x00df, + // Entry 180 - 1BF + 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, + 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, + 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, + 0x00df, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00f7, 0x00f7, 0x00f7, + 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, + 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, + 0x00f7, 0x00f7, 0x0103, 0x0103, 0x0103, 0x0103, 0x010c, 0x010c, + // Entry 1C0 - 1FF + 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, + 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x011d, 0x011d, + 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, + 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, + 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, + 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, + 0x011d, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0142, 0x0142, 0x0142, + // Entry 200 - 23F + 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x014f, + 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x0157, 0x0157, + 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, + 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, + 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, + 0x015e, 0x015e, 0x017e, 0x0188, 0x0188, 0x0188, 0x018e, 0x018e, + 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x0196, + 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, + // Entry 240 - 27F + 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, + 0x0196, 0x0196, 0x01b0, 0x01b0, 0x01b0, 0x01b0, 0x01d2, + }, + }, + { // ta + taLangStr, + taLangIdx, + }, + { // te + teLangStr, + teLangIdx, + }, + { // teo + "KiakanKiamhariKiarabuKibelarusiKibulgariaKibanglaKicheckiKijerumaniKigir" + + "ikiKingerezaKihispaniaKiajemiKifaransaKihausaKihindiKihungariKiindon" + + "esiaKiigboKiitalianoKijapaniKijavaKikambodiaKikoreaKimalesiaKiburmaK" + + "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + + "rubaKichinaKizuluKiteso", + []uint16{ // 533 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, + 0x0029, 0x0029, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x0054, 0x0054, 0x005e, + 0x005e, 0x005e, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0075, + 0x0075, 0x007c, 0x007c, 0x007c, 0x007c, 0x0085, 0x0085, 0x0085, + // Entry 40 - 7F + 0x0085, 0x0090, 0x0090, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x00a0, 0x00a0, 0x00a8, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00b8, 0x00b8, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00c8, 0x00c8, 0x00cf, 0x00cf, 0x00cf, + 0x00d7, 0x00d7, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e9, 0x00e9, 0x00f2, + // Entry 80 - BF + 0x00f2, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0101, 0x0107, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x0121, 0x0121, 0x0128, 0x0128, 0x0128, 0x0132, 0x0132, 0x0132, + 0x0132, 0x0132, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x0143, + 0x0149, 0x0149, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x015c, 0x015c, 0x0163, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry C0 - FF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 100 - 13F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 140 - 17F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 180 - 1BF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 1C0 - 1FF + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 200 - 23F + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x0169, 0x0169, 0x016f, + }, + }, + { // th + thLangStr, + thLangIdx, + }, + { // ti + "አፍሪቃንሰኛትዊአምሐረኛዓረበኛአዜርባይጃንኛቤላራሻኛቡልጋሪኛበንጋሊኛብሬቶንቦስኒያንካታላንቼክኛወልሽዴኒሽጀርመንግሪከኛእ" + + "ንግሊዝኛኤስፐራንቶስፓኒሽኤስቶኒአንባስክኛፐርሲያኛፊኒሽፋሮኛፈረንሳይኛፍሪሰኛአይሪሽእስኮትስ ጌልክኛጋለቪኛጓራ" + + "ኒጉጃራቲኛዕብራስጥሕንደኛክሮሽያንኛሀንጋሪኛኢንቴር ቋንቋእንዶኑሲኛአይስላንደኛጣሊያንኛጃፓንኛጃቫንኛጊዮርጊያኛ" + + "ካማደኛኮሪያኛኩርድሽኪሩጋዚላቲንኛሊቱአኒየንላቲቪያንማክዶኒኛማላያላምኛማራቲኛማላይኛማልቲስኛኔፖሊኛደችኖርዌይኛ" + + " (ናይ ኝኖርስክ)ኖርዌጂያንኦኪታንኛኦሪያፑንጃቢኛፖሊሽፓሽቶፖርቱጋሊኛሮማኒያንራሽኛስንሃልኛስሎቨክኛስቁቪኛአልቤኒ" + + "ኛሰርቢኛሰሴቶሱዳንኛስዊድንኛሰዋሂሊኛታሚልኛተሉጉኛታይኛትግርኛናይ ቱርኪ ሰብዓይ (ቱርካዊ)ቱርከኛዩክረኒኛኡር" + + "ዱኛኡዝበክኛቪትናምኛዞሳኛዪዲሽዙሉኛታጋሎገኛክሊንግኦንኛፖርቱጋልኛ (ናይ ብራዚል)ፖርቱጋልኛ (ናይ ፖርቱጋል)" + + "ሰርቦ- ክሮዊታን", + []uint16{ // 610 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x001b, 0x002a, 0x002a, + 0x0036, 0x0036, 0x0036, 0x0036, 0x004e, 0x004e, 0x005d, 0x006c, + 0x006c, 0x006c, 0x007b, 0x007b, 0x0087, 0x0096, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00ab, 0x00ab, 0x00ab, 0x00b4, 0x00bd, + 0x00c9, 0x00c9, 0x00c9, 0x00c9, 0x00d5, 0x00e7, 0x00f9, 0x0105, + 0x0117, 0x0123, 0x0132, 0x0132, 0x013b, 0x013b, 0x0144, 0x0156, + 0x0162, 0x016e, 0x018a, 0x0196, 0x019f, 0x01ae, 0x01ae, 0x01ae, + 0x01bd, 0x01c9, 0x01c9, 0x01db, 0x01db, 0x01ea, 0x01ea, 0x01ea, + // Entry 40 - 7F + 0x0200, 0x0212, 0x0212, 0x0212, 0x0212, 0x0212, 0x0212, 0x0227, + 0x0236, 0x0236, 0x0242, 0x024e, 0x0260, 0x0260, 0x0260, 0x0260, + 0x0260, 0x0260, 0x0260, 0x026c, 0x0278, 0x0278, 0x0278, 0x0284, + 0x0284, 0x0284, 0x0290, 0x029c, 0x029c, 0x029c, 0x029c, 0x029c, + 0x029c, 0x02ae, 0x02ae, 0x02bd, 0x02bd, 0x02bd, 0x02bd, 0x02cc, + 0x02de, 0x02de, 0x02ea, 0x02f6, 0x0305, 0x0305, 0x0305, 0x0305, + 0x0311, 0x0311, 0x0317, 0x033f, 0x0351, 0x0351, 0x0351, 0x0351, + 0x0360, 0x0360, 0x0360, 0x0369, 0x0369, 0x0378, 0x0378, 0x0381, + // Entry 80 - BF + 0x038a, 0x039c, 0x039c, 0x039c, 0x039c, 0x03ab, 0x03b4, 0x03b4, + 0x03b4, 0x03b4, 0x03b4, 0x03b4, 0x03b4, 0x03c3, 0x03d2, 0x03de, + 0x03de, 0x03de, 0x03de, 0x03ed, 0x03f9, 0x03f9, 0x0402, 0x040e, + 0x041d, 0x042c, 0x0438, 0x0444, 0x0444, 0x044d, 0x0459, 0x0485, + 0x0485, 0x0485, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x04a0, + 0x04ac, 0x04bb, 0x04bb, 0x04ca, 0x04ca, 0x04ca, 0x04ca, 0x04d3, + 0x04dc, 0x04dc, 0x04dc, 0x04dc, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + // Entry C0 - FF + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + // Entry 100 - 13F + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, + 0x04e5, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + // Entry 140 - 17F + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + // Entry 180 - 1BF + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + // Entry 1C0 - 1FF + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + // Entry 200 - 23F + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04f4, 0x04f4, 0x04f4, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + // Entry 240 - 27F + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0531, 0x055c, + 0x055c, 0x0576, + }, + }, + { // to + "lea fakaʻafālalea fakaʻapakasialea fakaʻavesitanilea fakaʻafilikanalea f" + + "akaʻakanilea fakaʻamelikilea fakaʻalakonilea fakaʻalepealea fakaʻasa" + + "mialea fakaʻavalikilea fakaʻaimalalea fakaʻasapaisanilea fakapasikil" + + "ilea fakapelalusilea fakapulukalialea fakapisilamalea fakapamipalale" + + "a fakapengikalilea fakatipetilea fakapeletonilea fakaposinialea faka" + + "katalanilea fakaseselea fakakamololea fakakōsikalea fakakelīlea faka" + + "sekilea fakasilavia-fakasiasilea fakasuvasalea fakauēlesilea fakaten" + + "imaʻakelea fakasiamanelea fakativehilea fakatisōngikalea fakaʻeuelea" + + " fakakalisilea fakapālangilea fakaʻesipulanitolea fakasipēnisilea fa" + + "kaʻesitōnialea fakapāsikilea fakapēsialea fakafulālea fakafinilanile" + + "a fakafisilea fakafaloelea fakafalanisēlea fakafilisia-hihifolea fak" + + "aʻaelanilea fakakaelikilea fakakalisialea fakakualanilea fakakutalat" + + "ilea fakamangikīlea fakahausalea fakahepelūlea fakahinitīlea fakahil" + + "i-motulea fakakuloisialea fakahaitilea fakahungakalialea fakaʻāmenia" + + "lea fakahelelolea fakavahaʻalealea fakaʻinitōnesialea fakavahaʻaling" + + "ikēlea fakaʻikipōlea fakasisiuani-īlea fakaʻinupiakilea fakaʻitolea " + + "fakaʻaisilanilea fakaʻītalilea fakaʻinuketitutilea fakasiapanilea fa" + + "kasavalea fakaseōsialea fakakongikōlea fakakikuiulea fakakuaniamalea" + + " fakakasakilea fakakalaʻalisutilea fakakamipōtialea fakakanatalea fa" + + "kakōlealea fakakanulilea fakakāsimilalea fakakulitīlea fakakomilea f" + + "akakoniualilea fakakīsisilea fakalatinalea fakalakisimipekilea fakak" + + "anitalea fakalimipūlikilea lingikalalea fakalaulea fakalituanialea f" + + "akalupa-katangalea fakalativialea fakamalakasilea fakamāsololea faka" + + "maulilea fakamasitōnialea fakaʻinitia-malāialamilea fakamongokōliale" + + "a fakamalatilea fakamaleilea fakamalitalea fakapemalea fakanaululea " + + "fakanetepele-tokelaulea fakanepalilea fakanetongikālea fakahōlanilea" + + " fakanoauē-ninosikilea fakanouaē-pokimalilea fakanetepele-tongalea f" + + "akanavaholea fakanianisalea fakaʻokitanelea fakaʻosipiuālea fakaʻolo" + + "molea faka-ʻotialea fakaʻosetikilea fakapūnusapilea fakapālilea faka" + + "polanilea fakapasitōlea fakapotukalilea fakakuetisalea fakalaito-lom" + + "ēnialea fakaluanitilea fakalōmenialea fakalūsialea fakakiniāuanital" + + "ea fakasanisukulitilea fakasaletīnialea fakasīnitilea fakasami-tokel" + + "aulea fakasangikōlea fakasingihalalea fakasolāvakilea fakasolovenial" + + "ea fakahaʻamoalea fakasionalea fakasomalilea fakaʻalapēnialea fakasē" + + "pialea fakasuatilea fakasoto-tongalea fakasunitālea fakasuētenilea f" + + "akasuahililea fakatamililea fakaʻinitia-telukulea fakatāsikilea faka" + + "tailanilea fakatikilinialea fakatēkimenilea fakatisuanalea fakatonga" + + "lea fakatoakelea fakatisongalea fakatatalelea fakatahitilea fakaʻuik" + + "ūlilea fakaʻūkalaʻinelea fakaʻūtūlea fakaʻusipekilea fakavenitālea " + + "fakavietinamilea fakavolapikilea fakaʻualonialea fakaʻuolofolea faka" + + "tōsalea fakaītisilea fakaʻiōlupalea fakasuangilea fakasiainalea faka" + + "sululea fakaʻatisēlea fakaʻakolilea fakaʻatangimēlea fakaʻatikēlea f" + + "akaʻalepea-tunīsialea fakaʻafilihililea fakaʻakihemilea fakaʻainulea" + + " fakaʻakatialea fakaʻalapamalea fakaʻaleutilea fakaʻalapēnia-kekilea" + + " fakaʻalitai-tongalea fakapālangi-motuʻalea fakaʻangikalea fakaʻalām" + + "itilea fakamapuselea fakaʻalaonalea fakaʻalapaholea fakaʻalepea-ʻais" + + "ilialea fakaʻalauakilea fakaʻalepea-molokolea fakaʻalepea-ʻisipitele" + + "a fakaʻasulea fakaʻilonga-ʻamelikalea fakaʻasitūlialea fakakotavalea" + + " fakaʻauatilea fakapalusilea fakapalilea fakapavālialea fakapasaʻale" + + "a fakapamunilea fakatōpe-pētekilea fakakomalalea fakapesalea fakapēm" + + "ipalea fakapetavilea fakapenalea fakapafutilea fakapatakalea fakapal" + + "usi-hihifolea fakaposipulilea fakapikolilea fakapinilea fakapanisali" + + "lea fakakomelea fakasikesikālea fakapisinupilialea fakapakitiālilea " + + "fakapalailea fakapalahuilea fakapōtolea fakaʻakōselea fakapuliatilea" + + " fakapukisilea fakapululea fakapilinilea fakametūmipalea fakakatolea" + + " fakakalipalea fakakaiukalea fakaʻatisamilea fakasepuanolea fakakika" + + "lea fakasīpisalea fakasakatāilea fakatūkelea fakamalīlea fakasinuki-" + + "takotelea fakasokitaulea fakasipeuianilea fakaselokīlea fakaseienele" + + "a fakakūtisi-lolotolea fakakopitikalea fakakapisenolea fakatoake-kil" + + "imealea fakaseselua-falanisēlea fakakasiupialea fakatakotalea fakata" + + "lakuālea fakataitalea fakatelaualelea fakasilavelea fakatōkelipilea " + + "fakatingikālea fakatisāmalea fakatokililea fakasōpia-hifolea fakatus" + + "uni-lolotolea fakatualalea fakahōlani-lotolotolea fakaiola-fonīlea f" + + "akatiulalea fakatasakalea fakaʻemipūlea fakaʻefikilea fakaʻemilialea" + + " fakaʻisipitemuʻalea fakaʻekaiukilea fakaʻelamitelea fakapālangi-lot" + + "olotolea fakaiūpiki-lolotolea fakaʻeuōnitolea fakaʻekisitematulalea " + + "fakafangilea fakafilipainilea fakafinilani-tōnetalelea fakafōngilea " + + "fakafalanisē-kasunilea fakafalanisē-lotolotolea fakafalanisē-motuʻal" + + "ea fakaʻāpitanolea fakafilisia-tokelaulea fakafilisia-hahakelea faka" + + "fulilānilea fakakālea fakakakausilea fakasiaina-kanilea fakakaiolea " + + "fakakapaialea fakateli-soloasitelialea fakasiʻisilea fakakilipasilea" + + " fakakilakilea fakasiamane-hake-lotolotolea fakasiamane-hake-motuʻal" + + "ea fakakonikanī-koanilea fakakonitīlea fakakolonitalolea fakakotikal" + + "ea fakakēpolea fakakalisimuʻalea fakasiamane-suisilanilea fakaʻuaiūl" + + "ea fakafalefalelea fakakusīlea fakaʻuīsinilea fakahaitalea fakasiain" + + "a-hakalea fakahauaiʻilea fakahinitī-fisilea fakahilikainonilea fakah" + + "ititelea fakamōngilea fakasōpia-hakelea fakasiaina-siangilea fakahup" + + "alea fakaʻipanilea fakaʻipipiolea fakaʻilokolea fakaʻingusilea fakaʻ" + + "ingilianilea fakapālangi-samaikalea fakalosipanilea fakanikōmipalea " + + "fakamasamelea fakaʻiuteo-pēsialea fakaʻiuteo-ʻalepealea fakaʻiutilan" + + "ilea fakakala-kalipakilea fakakapilelea fakakasinilea fakasisūlea fa" + + "kakamipalea fakakavilea fakakapālitialea fakakanēmipulea fakatiapile" + + "a fakamakōnitelea fakakapuvelitianulea fakakeniangilea fakakololea f" + + "akakaingangilea fakakāsilea fakakōtanilea fakakoila-sīnilea fakakoua" + + "lilea fakakilimanisikīlea fakakakolea fakakalenisinilea fakakimipūni" + + "tulea fakakomi-pelemiakilea fakakonikanīlea fakakosilaelea fakakepel" + + "elea fakakalate-palakililea fakakiliolea fakakinaraiālea fakakalelia" + + "lea fakakulukilea fakasiamipalalea fakapafialea fakakolongialea faka" + + "kumikilea fakakutenailea fakalatinolea fakalangilea fakalānitalea fa" + + "kalamipālea fakalesikialea fakakavakava-foʻoulea fakalikulialea faka" + + "livonialea fakalakotalea fakalomipātilea fakamongikōlea fakalosilea " + + "fakaluli-tokelaulea fakalatakalelea fakalupa-lulualea fakaluisenolea" + + " fakalunitālea fakaluolea fakamisolea fakaluīalea fakasiaina-faʻutoh" + + "ilea fakalasulea fakamatulalea fakamafalea fakamakahilea fakamaitili" + + "lea fakamakasalilea fakamanitīngikolea fakamasailea fakamapalea faka" + + "mokisiālea fakamanetalilea fakamenetīlea fakamelulea fakamolisienile" + + "a fakaʻaelani-lotolotolea fakamakūa-meʻetolea fakametālea fakamikema" + + "kilea fakaminangikapaulea fakamanisūlea fakamanipulilea fakamohaukil" + + "ea fakamosilea fakamali-hihifolea fakamunitangilea tuifiolea fakakil" + + "ekilea fakamilanitēsilea fakamaliwalilea fakamenitauailea fakamienel" + + "ea fakaʻelisialea fakamasanitelanilea fakasiaina-mininanilea fakanap" + + "oletanolea fakanamalea fakasiamane-hifolea fakaneualilea fakaniasile" + + "a fakaniuēlea fakaʻaonasalea fakakuasiolea fakangiemipōnilea fakanok" + + "ailea fakanoauē-motuʻalea fakanovialelea fakanikōlea fakasoto-tokela" + + "ulea fakanuelilea fakaneuali-motuʻalea fakaniamiuesilea fakanianikol" + + "elea fakaniololea fakanesimalea fakaʻosēselea fakatoake-ʻotomanilea " + + "fakapangasinanilea fakapālavilea fakapamipangalea fakapapiamēnitolea" + + " fakapalaulea fakapikātilea fakanaisilialea fakasiamane-penisilivani" + + "alea fakasiamane-lafalafalea fakapēsia-motuʻalea fakasiamane-palatin" + + "elea fakafoinikialea fakapiemonitelea fakaponitikilea fakaponapēlea " + + "fakapulūsialea fakapolovenisi-motuʻalea fakakīsēlea fakakuitisa-simi" + + "polasolea fakalasasitanilea fakalapanuilea fakalalotongalea fakaloma" + + "niololea fakalifilea fakalomipōlea fakalomanilea fakalotumalea fakal" + + "usinilea fakalovianalea fakaʻalomanialea fakaluālea fakasanitauelea " + + "fakasakalea fakasamalitani-ʻalāmitilea fakasamipululea fakasasakilea" + + " fakasanitalilea fakasaulasitilālea fakangāmipailea fakasangulea fak" + + "asisīlialea fakasikotilanilea fakasaletīnia-sasalesulea faka-tonga ‘" + + "o Ketesilea fakasenekalea fakasenalea fakaselilea fakaselikupilea fa" + + "kakoilapolo-senilea fakaʻaelani-motuʻalea fakasamositialea fakatasel" + + "ihitilea fakasianilea fakaʻalepea-sātilea fakasitamolea fakasilesia-" + + "hifolea fakaselaiālea fakasami-tongalea fakasami-lulelea fakasami-ʻi" + + "nalilea fakasami-sikolitalea fakasoninekēlea fakasokitianalea fakasu" + + "lanane-tongikōlea fakasēlēlelea fakasaholea fakafilisia-satēlanilea " + + "fakasukumalea fakasusūlea fakasumelialea fakakomololea fakasuliāiā-m" + + "uʻalea fakasuliāiālea fakasilesialea fakatululea fakatimenēlea fakat" + + "esolea fakatelenolea fakatetumulea fakatikilēlea fakativilea fakatok" + + "elaulea fakasākulilea fakakilingonilea fakatilingikītelea fakatalisi" + + "lea fakatamasiekilea fakaniasa-tongalea fakatoki-pisinilea fakatuloi" + + "olea fakatalokolea fakasakōnialea fakatisīmisianilea fakatati-mosele" + + "milea fakatumepukalea fakatūvalulea fakatasauakilea fakatuvīnialea f" + + "akatamasaiti-ʻatilasi-lolotolea fakaʻutimulitilea fakaʻūkalitilea fa" + + "kaʻumipūnitulea fakaʻilonga-tefitolea fakavailea fakavenēsialea faka" + + "vepisilea fakavelamingi-hihifolea fakafalanikoni-lolotolea fakavotik" + + "ilea fakavōlolea fakavūnisolea fakaʻualiselilea fakaʻuolaitalea faka" + + "ʻualailea fakaʻuasiōlea fakaʻuālipililea fakasiaina-uūlea fakakalim" + + "ikilea fakamingilelialea fakasokalea fakaʻiaolea fakaʻiapilea fakaʻi" + + "angipenilea fakaʻiēmipalea fakaneʻēngatūlea fakakuangitongilea fakas" + + "apotekilea fakaʻilonga-pilisilea fakasēlanilea fakasenakalea fakatam" + + "asaiti-molokolea fakasuniʻikai ha lealea fakasāsālea fakaʻalepea (mā" + + "mani)lea fakasiamane-ʻaositulialea fakasiamane-hake-suisilanilea fak" + + "apālangi-ʻaositelēlialea fakapālangi-kānatalea fakapilitānialea faka" + + "pālangi-ʻamelikalea fakasipēnisi lātini-ʻamelikalea fakasipēnisi-‘iu" + + "lopelea fakasipēnisi-mekisikoulea fakafalanisē-kānatalea fakafalanis" + + "ē-suisilanilea fakasakisoni-hifolea fakahōlani-pelesiumelea fakapot" + + "ukali-palāsililea fakapotukali-ʻiulopelea fakamolitāvialea fakakuloi" + + "sia-sēpialea fakasuahili-kongikōlea fakasiaina-fakafaingofualea faka" + + "siaina-tukufakaholo", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0022, 0x0035, 0x0048, 0x0057, 0x0068, 0x0079, + 0x0089, 0x0099, 0x00aa, 0x00ba, 0x00ce, 0x00de, 0x00ee, 0x00ff, + 0x010f, 0x011f, 0x0130, 0x013e, 0x014e, 0x015d, 0x016d, 0x0179, + 0x0187, 0x0196, 0x01a3, 0x01af, 0x01c8, 0x01d6, 0x01e5, 0x01f8, + 0x0207, 0x0215, 0x0227, 0x0234, 0x0242, 0x0252, 0x0267, 0x0278, + 0x028b, 0x029a, 0x02a8, 0x02b5, 0x02c5, 0x02d1, 0x02de, 0x02ef, + 0x0305, 0x0315, 0x0324, 0x0333, 0x0342, 0x0352, 0x0362, 0x036f, + 0x037e, 0x038d, 0x039e, 0x03ae, 0x03bb, 0x03cd, 0x03de, 0x03ec, + // Entry 40 - 7F + 0x03fe, 0x0413, 0x042a, 0x043a, 0x044d, 0x045f, 0x046c, 0x047e, + 0x048e, 0x04a3, 0x04b2, 0x04be, 0x04cd, 0x04dd, 0x04eb, 0x04fb, + 0x0509, 0x051e, 0x0530, 0x053e, 0x054c, 0x055a, 0x056b, 0x057a, + 0x0586, 0x0596, 0x05a5, 0x05b3, 0x05c7, 0x05d5, 0x05e8, 0x05f5, + 0x0600, 0x0610, 0x0624, 0x0633, 0x0643, 0x0652, 0x065f, 0x0671, + 0x068d, 0x06a0, 0x06ae, 0x06bb, 0x06c9, 0x06d5, 0x06e2, 0x06fa, + 0x0708, 0x071a, 0x0729, 0x0740, 0x0757, 0x076d, 0x077b, 0x078a, + 0x079b, 0x07ad, 0x07bc, 0x07cb, 0x07dc, 0x07ed, 0x07fa, 0x0808, + // Entry 80 - BF + 0x0817, 0x0827, 0x0836, 0x084c, 0x085b, 0x086b, 0x0879, 0x088d, + 0x08a1, 0x08b3, 0x08c2, 0x08d6, 0x08e6, 0x08f7, 0x0908, 0x0919, + 0x0929, 0x0936, 0x0944, 0x0957, 0x0965, 0x0972, 0x0984, 0x0993, + 0x09a3, 0x09b2, 0x09c0, 0x09d7, 0x09e6, 0x09f5, 0x0a06, 0x0a17, + 0x0a26, 0x0a33, 0x0a40, 0x0a4f, 0x0a5d, 0x0a6b, 0x0a7c, 0x0a91, + 0x0aa0, 0x0ab1, 0x0ac0, 0x0ad1, 0x0ae1, 0x0af2, 0x0b02, 0x0b0f, + 0x0b1d, 0x0b2e, 0x0b3c, 0x0b4a, 0x0b56, 0x0b66, 0x0b75, 0x0b88, + 0x0b98, 0x0bb1, 0x0bc4, 0x0bd5, 0x0be3, 0x0bf3, 0x0c04, 0x0c14, + // Entry C0 - FF + 0x0c2c, 0x0c42, 0x0c5a, 0x0c6a, 0x0c7c, 0x0c8a, 0x0c9a, 0x0cab, + 0x0cc5, 0x0cc5, 0x0cd6, 0x0ced, 0x0d07, 0x0d14, 0x0d2e, 0x0d41, + 0x0d4f, 0x0d5e, 0x0d6c, 0x0d78, 0x0d88, 0x0d97, 0x0da5, 0x0dba, + 0x0dc8, 0x0dd4, 0x0de3, 0x0df1, 0x0dfd, 0x0e0b, 0x0e19, 0x0e2e, + 0x0e3e, 0x0e4c, 0x0e58, 0x0e68, 0x0e74, 0x0e85, 0x0e98, 0x0eaa, + 0x0eb7, 0x0ec6, 0x0ed3, 0x0ee3, 0x0ef2, 0x0f00, 0x0f0c, 0x0f1a, + 0x0f2b, 0x0f37, 0x0f45, 0x0f53, 0x0f64, 0x0f73, 0x0f7f, 0x0f8e, + 0x0f9e, 0x0fab, 0x0fb8, 0x0fcd, 0x0fdc, 0x0fed, 0x0ffc, 0x100a, + // Entry 100 - 13F + 0x1020, 0x1030, 0x1040, 0x1055, 0x106e, 0x107e, 0x108c, 0x109c, + 0x10a9, 0x10b9, 0x10c7, 0x10d8, 0x10e8, 0x10f7, 0x1105, 0x1118, + 0x112d, 0x113a, 0x1152, 0x1164, 0x1171, 0x117f, 0x118f, 0x119e, + 0x11ae, 0x11c4, 0x11d5, 0x11e6, 0x11ff, 0x1215, 0x1227, 0x123e, + 0x124b, 0x125c, 0x1276, 0x1284, 0x129c, 0x12b6, 0x12cf, 0x12e1, + 0x12f8, 0x130e, 0x131f, 0x132a, 0x1339, 0x134c, 0x1358, 0x1366, + 0x137f, 0x138e, 0x139e, 0x13ac, 0x13c9, 0x13e5, 0x13fc, 0x140b, + 0x141d, 0x142b, 0x1438, 0x144b, 0x1464, 0x1473, 0x1483, 0x1490, + // Entry 140 - 17F + 0x14a1, 0x14ae, 0x14c1, 0x14d1, 0x14e5, 0x14f8, 0x1506, 0x1514, + 0x1527, 0x153c, 0x1548, 0x1557, 0x1567, 0x1576, 0x1586, 0x1599, + 0x15b1, 0x15c1, 0x15d2, 0x15e0, 0x15f6, 0x160e, 0x1620, 0x1635, + 0x1643, 0x1651, 0x165e, 0x166c, 0x1678, 0x168a, 0x169b, 0x16a8, + 0x16b9, 0x16ce, 0x16de, 0x16ea, 0x16fb, 0x1708, 0x1717, 0x172a, + 0x1738, 0x174d, 0x1759, 0x176b, 0x177e, 0x1794, 0x17a5, 0x17b4, + 0x17c2, 0x17d9, 0x17e6, 0x17f7, 0x1806, 0x1814, 0x1825, 0x1832, + 0x1842, 0x1850, 0x185f, 0x186d, 0x187a, 0x1889, 0x1898, 0x18a7, + // Entry 180 - 1BF + 0x18be, 0x18cd, 0x18dc, 0x18ea, 0x18fb, 0x190b, 0x1917, 0x192b, + 0x193b, 0x194d, 0x195c, 0x196b, 0x1976, 0x1982, 0x198f, 0x19a7, + 0x19b3, 0x19c1, 0x19cd, 0x19db, 0x19ea, 0x19fa, 0x1a0e, 0x1a1b, + 0x1a27, 0x1a37, 0x1a47, 0x1a56, 0x1a62, 0x1a73, 0x1a8c, 0x1aa2, + 0x1aaf, 0x1abf, 0x1ad3, 0x1ae2, 0x1af2, 0x1b01, 0x1b0d, 0x1b20, + 0x1b31, 0x1b3b, 0x1b49, 0x1b5c, 0x1b6c, 0x1b7d, 0x1b8a, 0x1b9a, + 0x1bae, 0x1bc5, 0x1bd7, 0x1be3, 0x1bf7, 0x1c05, 0x1c12, 0x1c1f, + 0x1c2f, 0x1c3d, 0x1c50, 0x1c5d, 0x1c73, 0x1c82, 0x1c8f, 0x1ca3, + // Entry 1C0 - 1FF + 0x1cb0, 0x1cc6, 0x1cd7, 0x1ce8, 0x1cf5, 0x1d03, 0x1d13, 0x1d2a, + 0x1d3d, 0x1d4c, 0x1d5d, 0x1d71, 0x1d7e, 0x1d8d, 0x1d9d, 0x1dba, + 0x1dd2, 0x1de8, 0x1e00, 0x1e10, 0x1e21, 0x1e31, 0x1e40, 0x1e50, + 0x1e6a, 0x1e78, 0x1e92, 0x1ea4, 0x1eb3, 0x1ec4, 0x1ed5, 0x1ee1, + 0x1ef0, 0x1efe, 0x1f0c, 0x1f1a, 0x1f29, 0x1f3b, 0x1f47, 0x1f57, + 0x1f63, 0x1f80, 0x1f90, 0x1f9e, 0x1fae, 0x1fc2, 0x1fd3, 0x1fe0, + 0x1ff0, 0x2002, 0x201d, 0x2037, 0x2045, 0x2051, 0x205d, 0x206d, + 0x2083, 0x209b, 0x20ac, 0x20be, 0x20cb, 0x20e1, 0x20ef, 0x2103, + // Entry 200 - 23F + 0x2112, 0x2124, 0x2135, 0x2149, 0x215e, 0x216f, 0x2180, 0x2199, + 0x21a9, 0x21b5, 0x21ce, 0x21dc, 0x21e9, 0x21f8, 0x2206, 0x221d, + 0x222e, 0x223d, 0x2249, 0x2258, 0x2264, 0x2272, 0x2280, 0x228f, + 0x229b, 0x22aa, 0x22b9, 0x22ca, 0x22de, 0x22ec, 0x22fd, 0x2310, + 0x2323, 0x2331, 0x233f, 0x234f, 0x2363, 0x2378, 0x2388, 0x2397, + 0x23a7, 0x23b7, 0x23d9, 0x23ec, 0x23fe, 0x2412, 0x2429, 0x2434, + 0x2444, 0x2452, 0x246a, 0x2483, 0x2491, 0x249e, 0x24ad, 0x24bf, + 0x24d0, 0x24df, 0x24ef, 0x2502, 0x2514, 0x2524, 0x2536, 0x2542, + // Entry 240 - 27F + 0x254f, 0x255d, 0x2570, 0x2581, 0x2595, 0x25a8, 0x25b8, 0x25cf, + 0x25de, 0x25ec, 0x2604, 0x2610, 0x261d, 0x262b, 0x2645, 0x2645, + 0x2660, 0x267e, 0x269d, 0x26b5, 0x26c7, 0x26e1, 0x2704, 0x271f, + 0x273a, 0x273a, 0x2753, 0x276e, 0x2783, 0x279c, 0x27b6, 0x27cf, + 0x27e1, 0x27f8, 0x2810, 0x282c, 0x2847, + }, + }, + { // tr + trLangStr, + trLangIdx, + }, + { // twq + "Akan senniAmhaarik senniLaaraw senniBelaruus senniBulagaari senniBengali" + + " senniCek senniAlmaŋ senniGrek senniInglisi senniEspaaɲe senniFarsi " + + "senniFransee senniHawsance senniInduu senniHungaari senniIndoneesi s" + + "enniIboo senniItaali senniJaponee senniJavanee senniKmeer senni, Gam" + + "e hereKoree senniMaleezi senniBurme senniNeepal senniHolandee senniP" + + "unjaabi senniiPolonee senniPortugee senniRumaani senniRuusi senniRwa" + + "nda senniSomaali senniSuweede senniTamil senniTaailandu senniTurku s" + + "enniUkreen senniUrdu senniVietnaam senniYorbance senniSinuwa senni, " + + "MandareŋZulu senniTasawaq senni", + []uint16{ // 553 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0032, 0x0041, + 0x0041, 0x0041, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0063, 0x0063, 0x0063, 0x0063, 0x006d, 0x007a, 0x007a, 0x0088, + 0x0088, 0x0088, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00ae, + 0x00ae, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00c7, 0x00c7, 0x00c7, + // Entry 40 - 7F + 0x00c7, 0x00d6, 0x00d6, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00ec, 0x00ec, 0x00f9, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x011c, 0x011c, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0134, 0x0134, 0x013f, 0x013f, 0x013f, + 0x014b, 0x014b, 0x0159, 0x0159, 0x0159, 0x0159, 0x0159, 0x0159, + 0x0159, 0x0159, 0x0159, 0x0159, 0x0159, 0x0168, 0x0168, 0x0175, + // Entry 80 - BF + 0x0175, 0x0183, 0x0183, 0x0183, 0x0183, 0x0190, 0x019b, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, + 0x01c1, 0x01c1, 0x01cc, 0x01cc, 0x01cc, 0x01db, 0x01db, 0x01db, + 0x01db, 0x01db, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01f2, + 0x01fc, 0x01fc, 0x01fc, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x020a, 0x0218, 0x0218, 0x022f, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry C0 - FF + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry 100 - 13F + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry 140 - 17F + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry 180 - 1BF + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry 1C0 - 1FF + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + // Entry 200 - 23F + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0246, + }, + }, + { // tzm + "TakanitTamharitTaεrabtTabilarusitTabelɣaritTabinɣalitTačiktTalmanitTayun" + + "anitTanglizttasbelyunitTafarisitTafṛansistTahawsatTahinditTahenɣarit" + + "TindunisitTigbutTaṭalyantTajappunitTajavanitTaxmert ,TalammastTakuri" + + "tTamalizitTaburmanitTanippalitTahulanḍitTabenjabitTappulunitTaburtuɣ" + + "alitTaṛumanitTarusitTarwanditTaṣumalitTaswiditTatamiltTaṭaytTaturkit" + + "TukranitTurdutTaviṭnamitTayurubatTacinwit,MandarintazulutTamaziɣt n " + + "laṭlaṣ", + []uint16{ // 555 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x000f, 0x000f, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0022, 0x002d, + 0x002d, 0x002d, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0050, 0x0058, 0x0058, 0x0063, + 0x0063, 0x0063, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x0078, + 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0080, + 0x0080, 0x0088, 0x0088, 0x0088, 0x0088, 0x0093, 0x0093, 0x0093, + // Entry 40 - 7F + 0x0093, 0x009d, 0x009d, 0x00a3, 0x00a3, 0x00a3, 0x00a3, 0x00a3, + 0x00ae, 0x00ae, 0x00b8, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, + 0x00c1, 0x00c1, 0x00d3, 0x00d3, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00e3, 0x00e3, 0x00ed, 0x00ed, 0x00ed, + 0x00f7, 0x00f7, 0x0103, 0x0103, 0x0103, 0x0103, 0x0103, 0x0103, + 0x0103, 0x0103, 0x0103, 0x0103, 0x0103, 0x010d, 0x010d, 0x0117, + // Entry 80 - BF + 0x0117, 0x0124, 0x0124, 0x0124, 0x0124, 0x012f, 0x0136, 0x013f, + 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x013f, 0x013f, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, + 0x0152, 0x0152, 0x015a, 0x015a, 0x015a, 0x0162, 0x0162, 0x0162, + 0x0162, 0x0162, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x0172, + 0x0178, 0x0178, 0x0178, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, + 0x0184, 0x018d, 0x018d, 0x019e, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + // Entry C0 - FF + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + // Entry 100 - 13F + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + // Entry 140 - 17F + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + // Entry 180 - 1BF + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + // Entry 1C0 - 1FF + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + // Entry 200 - 23F + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01bb, + }, + }, + { // ug + "ئافارچەئابخازچەئاۋېستاچەئافرىكانچەئاكانچەئامھارچەئاراگونچەئەرەبچەئاسامچە" + + "ئاۋارچەئايماراچەئەزەربەيجانچەباشقىرتچەبېلارۇسچەبۇلغارچەبىسلاماچەبام" + + "باراچەبېنگالچەتىبەتچەبىرېتونچەبوسىنچەكاتالانچەچېچىنچەچامورروچەكورسۇ" + + "چەكرىچەچېخچەقەدىمكى سلاۋيانچەچۇۋاشچەۋېلشچەدانىشچەگېرمانچەدىۋېخچەزوڭ" + + "خاچەئېۋېچەگىرېكچەئىنگلىزچەئېسپرانتوچەئىسپانچەئېستونچەباسكىچەپارسچەف" + + "ۇلاھچەفىنچەفىجىچەفائېروچەفىرانسۇزچەغەربىي فىرسچەئىرېلاندچەشوتلاندىي" + + "ە گايلچىسىگالىچەگۇئارانىچەگۇجاراتچەمانچەخائۇساچەئىبرانىيچەھىندىچەھى" + + "رى موتۇچەكىرودىچەھايتىچەۋېنگىرچەئەرمېنچەخېرېروچەئارىلىق تىلھىندونېز" + + "چەئىنتىرلىڭچەئىگبوچەيىچە (سىچۈەن)ئىنۇپىكچەئىدوچەئىسلاندچەئىتالىيانچ" + + "ەئىنۇكتىتۇتچەياپونچەياۋاچەگىرۇزچەكونگوچەكىكۇيۇچەكىۋانياماچەقازاقچەگ" + + "ىرېنلاندچەكىمېرچەكانناداچەكورېيەچەكانۇرچەكەشمىرچەكۇردچەكومىچەكورنىش" + + "چەقىرغىزچەلاتىنچەلىيۇكسېمبۇرگچەگانداچەلىمبۇرگچەلىنگالاچەلائوسچەلىتۋ" + + "انىچەلۇبا-كاتانگاچەلاتچەمالاگاسچەمارشالچەماۋرىچەماكېدونچەمالايالامچ" + + "ەموڭغۇلچەماراتىچەمالايچەمالتاچەبىرماچەناۋرۇچەشىمالى ندەبەلەچەنېپالچ" + + "ەندونگاچەگوللاندچەيېڭى نورۋېگچەنورۋىگىيە بوكمالچەجەنۇبى ندەبەلەچەنا" + + "ۋاخوچەنىيانجاچەئوكسىتچەئوجىبۋاچەئوروموچەئودىياچەئوسسېتچەچەپەنجابچەپ" + + "الىچەپولەكچەپۇشتۇچەپورتۇگالچەكېچىۋاچەرومانسچەرۇندىچەرومىنچەرۇسچەكېن" + + "ىيەرىۋانداچەسانسكرىتچەساردىنىيەچەسىندىچەشىمالىي سامىچەسانگوچەسىنگال" + + "چەسىلوۋاكچەسىلوۋېنچەساموئاچەشوناچەسومالىچەئالبانچەسېربچەسىۋاتىچەسوت" + + "وچەسۇنداچەشىۋېدچەسىۋاھىلچەتامىلچەتېلۇگۇچەتاجىكچەتايلاندچەتىگرىنياچە" + + "تۈركمەنچەسىۋاناچەتونگانچەتۈركچەسونگاچەتاتارچەتاختىچەئۇيغۇرچەئۇكرائى" + + "نچەئوردۇچەئۆزبېكچەۋېنداچەۋىيېتنامچەۋولاپۇكچەۋاللۇنچەۋولوفچەخوساچەيى" + + "ددىشچەيورۇباچەجۇاڭچەخەنزۇچەزۇلۇچەئاتجېچەئاچولىچەئاداڭمېچەئادىگېيچەئ" + + "افرىخىلىچەئاگەمچەئاينۇچەئاككادچەئالېيۇتچەجەنۇبى ئالتاي تىللىرىقەدىم" + + "كى ئىنگلىزچەئانگىكاچەئارامۇچەماپۇدۇنگۇنچەئاراپاخوچەئاراۋاكچەئاسۇچەئ" + + "استۇرىيەچەئاۋادىچەبېلۇجىچەبالىچەباساچەبامۇنچەگومالاچەبېجاچەبېمباچەب" + + "ېناچەبافۇتچەبوجپۇرىچەبىكولچەبىنىچەكومچەسىكسىكاچەبىراجچەبودوچەئاكۇسچ" + + "ەبۇرىياتچەبۇگىچەبۇلۇچەبىلىنچەمېدۇمباچەكاددوچەكارىبچەكايۇگاچەئاتسامچ" + + "ەسېبۇچەچىگاچەچىبچاچەچاغاتايچەچۇكچەمارىچەچىنۇك-ژارگونچەچوكتاۋچەچىپېۋ" + + "يانچەچېروكىچەچېيېنچەمەركىزىي كۇردچەكوپتىكچەقىرىم تۈركچەكاسزۇبىچەداك" + + "وتاچەدارگىۋاچەتايتاچەدېلاۋارېچەسلاۋچەدوگرىبچەدىنكاچەزارماچەدوگرىچەت" + + "ۆۋەن سوربچەدۇئالاچەئوتتۇرا گوللاندىيەچەجولاچەدىيۇلاچەدازاگاچەئېمبۇچ" + + "ەئېفىكچەقەدىمكى مىسىرچەئېكاجۇكچەئېلامىتچەئوتتۇرا ئەسىر ئىنگلىزچەئېۋ" + + "وندوچەفاڭچەفىلىپپىنچەفونچەئوتتۇرا ئەسىر فىرانسۇزچەقەدىمكى فىرانسۇزچ" + + "ەشىمالى فىرىزيەچەشەرقى فىرىزيەچەفىرىئۇلىچەگاچەگايوچەگىباياچەگىزچەگى" + + "لبېرتچەئوتتۇرا ئەسىر ئېگىزلىك گېرمانچەقەدىمكى ئېگىزلىك گېرمانچەگوند" + + "ىچەگورونتالوچەگوتچەگرېبوچەقەدىمكى گىرېكچەگېرمانچە شىۋىتسارىيەگۇسىچە" + + "گىۋىچىنچەھەيدەچەھاۋايچەخىلىگاينونچەخىتتىتچەمۆڭچەئۈستۈن سوربچەخۇپاچە" + + "ئىبانچەئىبىبىئوچەئىلوكانوچەئىنگۇشچەلوجبانچەنگومباچەماچامچەئىبرانى پ" + + "ارسچەئىبرانى ئەرەبچەقارا-قالپاقچەكابىلېچەكاچىنچەجۇچەكامباچەكاۋىچەكا" + + "باردەيچەكانېمبۇچەتياپچەماكوندېچەكابۇۋېردىيانچەكوروچەكاسىچەخوتەنچەكو" + + "يرا چىنىچەكاكوچەكالېنجىنچەكىمبۇندۇچەكونكانچەكوسرايېچەكىپەللېچەقاراچ" + + "اي-بالقارچەكارەلچەكۇرۇخچەشامبالاچەبافىياچەكولىشچەقۇمۇقچەكۇتەنايچەلا" + + "دىنوچەلانگىچەلانداچەلامباچەلېزگىنچەمونگوچەلوزىچەلۇبا-لۇئاچەلۇيسېنگو" + + "چەلۇنداچەلۇئوچەمىزوچەلۇياچەمادۇرېسچەمافاچەماگاخىچەمايتىلىچەماكاسارچ" + + "ەماندىنگوچەماسايچەماباچەموكشاچەماندارچەمېندېچەمېرۇچەمورىسيېنچەئوتتۇ" + + "را ئەسىر ئىرېلاندچەماكۇۋاچەمېتاچە’مىكماكچەمىناڭكابائۇچەمانجۇچەمانىپ" + + "ۇرچەموخاۋكچەموسسىچەمۇنداڭچەكۆپ تىللاركىرىكچەمىراندېسچەمارۋارىچەميېن" + + "ېچەئېرزاچەناپولىچەناماچەتۆۋەن گېرمانچەنېۋارىچەنىئاسچەنيۇئېچەكۋاسىيو" + + "چەنگېمبۇنچەنوغايچەقەدىمكى نورۋېگچەنىكوچەشىمالىي سوتوچەمۇئېرچەنېۋارچ" + + "ەنيامۋېزىچەنىيانكولېچەنىئوروچەنىزەماچەئوساگېلارچەئوسمان تۈركچەپانگا" + + "سىنانچەپەھلەۋىچەپامپانگاچەپاپىيامېنتوچەپالاۋچەقەدىمكى پارىسچەفىنىكى" + + "يەچەپوناپېئانچەقەدىمكى پروۋېنچالچەراجاستانچەراپانىيچەرومبوچەسىگانچە" + + "ئارومانچەرىۋاچەسانداۋېچەساخاچەسامارىتانچەسامبۇرۇچەساساكچەسانتالچەنگ" + + "امبايچەسانگۇچەسىتسىلىيەچەشوتلاندىيەچەسېكنېكاچەسېناچەسېلكاپچەشەرقىي " + + "سوڭخايچەقەدىمكى ئىرېلاندچەشىلخاچەشانچەچاد ئەرەبچەسىداموچەجەنۇبىي سا" + + "مىچەلۇلې سامىچەئىنارى سامىچەسكولت سامىچەسونىنكەچەسوغدىچەسىرانان-توڭ" + + "وچەسېرېرچەساخوچەسۇكۇماچەسۇسۇچەسۈمەرچەكومورىچەقەدىمىي سۇرىيەچەسۇرىيە" + + "چەتېمنېچەتېسوچەتېرېناچەتېتۇمچەتىگرېچەتىۋچەتوكېلاۋچەكىلىنگونچەتىلىنگ" + + "ىتچەتاماشېكچەنياسا توڭانچەتوك-پىسىنچەتوروكوچەسىمشيانچەتۇمبۇكاچەتۇۋا" + + "لۇچەشىمالىي سوڭخايچەتوۋاچەمەركىزىي ئاتلاس تامازايتچەئۇدمۇرتچەئۇگارى" + + "تىكچەئۇمبۇندۇچەغول تىلۋايچەۋوتېچەۋۇنجوچەۋالسېرچەۋولايتاچەۋارايچەۋاش" + + "وچەقالماقچەسوگاچەياۋچەياپچەياڭبەنچەيېمباچەگۇاڭدوڭچەزاپوتېكچەبىلىس ب" + + "ەلگىلىرىزېناگاچەئۆلچەملىك ماراكەش تامازىتچەزۇنىچەتىل مەزمۇنى يوقزاز" + + "اچەھازىرقى زامان ئۆلچەملىك ئەرەبچەئاۋستىرىيە گېرمانچەشىۋىتسارىيە ئې" + + "گىزلىك گېرمانچەئاۋسترالىيە ئىنگلىزچەكانادا ئىنگلىزچەئەنگلىيە ئىنگلى" + + "زچەئامېرىكا ئىنگلىزچەلاتىن ئامېرىكا ئىسپانچەياۋروپا ئىسپانچەمېكسىكا" + + " ئىسپانچەكانادا فىرانسۇزچەشىۋىتسارىيە فىرانسۇزچەبىرازىلىيە پورتۇگالچ" + + "ەياۋروپا پورتۇگالچەسېرب-كرودىيەچەكونگو سىۋالىچەئاددىي خەنچەمۇرەككەپ" + + " خەنچە", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x001e, 0x0030, 0x0044, 0x0052, 0x0062, 0x0074, + 0x0082, 0x0090, 0x009e, 0x00b0, 0x00ca, 0x00dc, 0x00ee, 0x00fe, + 0x0110, 0x0122, 0x0132, 0x0140, 0x0152, 0x0160, 0x0172, 0x0180, + 0x0192, 0x01a0, 0x01aa, 0x01b4, 0x01d5, 0x01e3, 0x01ef, 0x01fd, + 0x020d, 0x021b, 0x0229, 0x0235, 0x0243, 0x0255, 0x026b, 0x027b, + 0x028b, 0x0299, 0x02a5, 0x02b3, 0x02bd, 0x02c9, 0x02d9, 0x02ed, + 0x0306, 0x031a, 0x033f, 0x034b, 0x035f, 0x0371, 0x037b, 0x038b, + 0x039f, 0x03ad, 0x03c2, 0x03d2, 0x03e0, 0x03f0, 0x0400, 0x0410, + // Entry 40 - 7F + 0x0425, 0x0439, 0x044f, 0x045d, 0x0474, 0x0486, 0x0492, 0x04a4, + 0x04ba, 0x04d2, 0x04e0, 0x04ec, 0x04fa, 0x0508, 0x0518, 0x052e, + 0x053c, 0x0552, 0x0560, 0x0572, 0x0582, 0x0590, 0x05a0, 0x05ac, + 0x05b8, 0x05c8, 0x05d8, 0x05e6, 0x0602, 0x0610, 0x0622, 0x0634, + 0x0642, 0x0654, 0x066f, 0x0679, 0x068b, 0x069b, 0x06a9, 0x06bb, + 0x06d1, 0x06e1, 0x06f1, 0x06ff, 0x070d, 0x071b, 0x0729, 0x0748, + 0x0756, 0x0766, 0x0778, 0x0791, 0x07b4, 0x07d3, 0x07e3, 0x07f5, + 0x0805, 0x0817, 0x0827, 0x0837, 0x084b, 0x085b, 0x0867, 0x0875, + // Entry 80 - BF + 0x0883, 0x0897, 0x08a7, 0x08b7, 0x08c5, 0x08d3, 0x08dd, 0x08fb, + 0x090f, 0x0925, 0x0933, 0x094e, 0x095c, 0x096c, 0x097e, 0x0990, + 0x09a0, 0x09ac, 0x09bc, 0x09cc, 0x09d8, 0x09e8, 0x09f4, 0x0a02, + 0x0a10, 0x0a22, 0x0a30, 0x0a40, 0x0a4e, 0x0a60, 0x0a74, 0x0a86, + 0x0a96, 0x0aa6, 0x0ab2, 0x0ac0, 0x0ace, 0x0adc, 0x0aec, 0x0b00, + 0x0b0e, 0x0b1e, 0x0b2c, 0x0b40, 0x0b52, 0x0b62, 0x0b70, 0x0b7c, + 0x0b8c, 0x0b9c, 0x0ba8, 0x0bb6, 0x0bc2, 0x0bd0, 0x0be0, 0x0bf2, + 0x0c04, 0x0c04, 0x0c1a, 0x0c28, 0x0c36, 0x0c46, 0x0c46, 0x0c58, + // Entry C0 - FF + 0x0c58, 0x0c80, 0x0ca1, 0x0cb3, 0x0cc3, 0x0cdb, 0x0cdb, 0x0cef, + 0x0cef, 0x0cef, 0x0d01, 0x0d01, 0x0d01, 0x0d0d, 0x0d0d, 0x0d23, + 0x0d23, 0x0d33, 0x0d43, 0x0d4f, 0x0d4f, 0x0d5b, 0x0d69, 0x0d69, + 0x0d79, 0x0d85, 0x0d93, 0x0d93, 0x0d9f, 0x0dad, 0x0dad, 0x0dad, + 0x0dbf, 0x0dcd, 0x0dd9, 0x0dd9, 0x0de3, 0x0df5, 0x0df5, 0x0df5, + 0x0e03, 0x0e03, 0x0e0f, 0x0e1d, 0x0e2f, 0x0e3b, 0x0e47, 0x0e55, + 0x0e67, 0x0e75, 0x0e83, 0x0e93, 0x0ea3, 0x0eaf, 0x0ebb, 0x0ec9, + 0x0edb, 0x0ee5, 0x0ef1, 0x0f0c, 0x0f1c, 0x0f30, 0x0f40, 0x0f4e, + // Entry 100 - 13F + 0x0f6b, 0x0f7b, 0x0f7b, 0x0f92, 0x0f92, 0x0fa4, 0x0fb4, 0x0fc6, + 0x0fd4, 0x0fe8, 0x0ff4, 0x1004, 0x1012, 0x1020, 0x102e, 0x1045, + 0x1045, 0x1055, 0x107c, 0x1088, 0x1098, 0x10a8, 0x10b6, 0x10c4, + 0x10c4, 0x10e1, 0x10f3, 0x1105, 0x1131, 0x1131, 0x1143, 0x1143, + 0x114d, 0x1161, 0x1161, 0x116b, 0x116b, 0x1199, 0x11bc, 0x11bc, + 0x11db, 0x11f8, 0x120c, 0x1214, 0x1214, 0x1214, 0x1220, 0x1230, + 0x1230, 0x123a, 0x124c, 0x124c, 0x1287, 0x12b7, 0x12b7, 0x12c5, + 0x12db, 0x12e5, 0x12f3, 0x1310, 0x1337, 0x1337, 0x1337, 0x1343, + // Entry 140 - 17F + 0x1355, 0x1363, 0x1363, 0x1371, 0x1371, 0x1389, 0x1399, 0x13a3, + 0x13bc, 0x13bc, 0x13c8, 0x13d6, 0x13ea, 0x13fe, 0x140e, 0x140e, + 0x140e, 0x141e, 0x142e, 0x143c, 0x1457, 0x1474, 0x1474, 0x148d, + 0x149d, 0x14ab, 0x14b3, 0x14c1, 0x14cd, 0x14e1, 0x14f3, 0x14ff, + 0x1511, 0x152d, 0x152d, 0x1539, 0x1539, 0x1545, 0x1553, 0x156a, + 0x156a, 0x156a, 0x1576, 0x158a, 0x159e, 0x159e, 0x15ae, 0x15c0, + 0x15d2, 0x15f1, 0x15f1, 0x15f1, 0x15ff, 0x160d, 0x161f, 0x162f, + 0x163d, 0x164b, 0x165d, 0x166d, 0x167b, 0x1689, 0x1697, 0x16a7, + // Entry 180 - 1BF + 0x16a7, 0x16a7, 0x16a7, 0x16a7, 0x16a7, 0x16b5, 0x16c1, 0x16c1, + 0x16c1, 0x16d6, 0x16ea, 0x16f8, 0x1704, 0x1710, 0x171c, 0x171c, + 0x171c, 0x172e, 0x173a, 0x174a, 0x175c, 0x176e, 0x1782, 0x1790, + 0x179c, 0x17aa, 0x17ba, 0x17c8, 0x17d4, 0x17e8, 0x1816, 0x1826, + 0x1835, 0x1845, 0x185f, 0x186d, 0x187f, 0x188f, 0x189d, 0x189d, + 0x18ad, 0x18c0, 0x18ce, 0x18e2, 0x18f4, 0x18f4, 0x1902, 0x1910, + 0x1910, 0x1910, 0x1920, 0x192c, 0x1947, 0x1957, 0x1965, 0x1973, + 0x1973, 0x1985, 0x1997, 0x19a5, 0x19c4, 0x19c4, 0x19d0, 0x19eb, + // Entry 1C0 - 1FF + 0x19f9, 0x1a07, 0x1a1b, 0x1a31, 0x1a41, 0x1a51, 0x1a67, 0x1a80, + 0x1a98, 0x1aaa, 0x1abe, 0x1ad8, 0x1ae6, 0x1ae6, 0x1ae6, 0x1ae6, + 0x1ae6, 0x1b03, 0x1b03, 0x1b17, 0x1b17, 0x1b17, 0x1b2d, 0x1b2d, + 0x1b52, 0x1b52, 0x1b52, 0x1b66, 0x1b78, 0x1b78, 0x1b78, 0x1b78, + 0x1b86, 0x1b94, 0x1b94, 0x1b94, 0x1b94, 0x1ba6, 0x1bb2, 0x1bc4, + 0x1bd0, 0x1be6, 0x1bf8, 0x1c06, 0x1c16, 0x1c16, 0x1c28, 0x1c36, + 0x1c4c, 0x1c64, 0x1c64, 0x1c64, 0x1c76, 0x1c82, 0x1c82, 0x1c92, + 0x1caf, 0x1cd2, 0x1cd2, 0x1ce0, 0x1cea, 0x1cff, 0x1d0f, 0x1d0f, + // Entry 200 - 23F + 0x1d0f, 0x1d2a, 0x1d3f, 0x1d58, 0x1d6f, 0x1d81, 0x1d8f, 0x1daa, + 0x1db8, 0x1dc4, 0x1dc4, 0x1dd4, 0x1de0, 0x1dee, 0x1dfe, 0x1e1d, + 0x1e2d, 0x1e2d, 0x1e2d, 0x1e3b, 0x1e47, 0x1e57, 0x1e65, 0x1e73, + 0x1e7d, 0x1e8f, 0x1e8f, 0x1ea3, 0x1eb7, 0x1eb7, 0x1ec9, 0x1ee2, + 0x1ef7, 0x1ef7, 0x1f07, 0x1f07, 0x1f19, 0x1f19, 0x1f2b, 0x1f3b, + 0x1f5a, 0x1f66, 0x1f98, 0x1faa, 0x1fc0, 0x1fd4, 0x1fe1, 0x1feb, + 0x1feb, 0x1feb, 0x1feb, 0x1feb, 0x1ff7, 0x1ff7, 0x2005, 0x2015, + 0x2027, 0x2035, 0x2041, 0x2041, 0x2041, 0x2051, 0x2051, 0x205d, + // Entry 240 - 27F + 0x2067, 0x2071, 0x2081, 0x208f, 0x208f, 0x20a1, 0x20b3, 0x20d0, + 0x20d0, 0x20e0, 0x2114, 0x2120, 0x213c, 0x2148, 0x2183, 0x2183, + 0x21a8, 0x21e0, 0x2209, 0x2228, 0x224b, 0x226e, 0x229a, 0x22b9, + 0x22d8, 0x22d8, 0x22f9, 0x2324, 0x2324, 0x2324, 0x234d, 0x2370, + 0x2370, 0x238b, 0x23a6, 0x23bd, 0x23d8, + }, + }, + { // uk + ukLangStr, + ukLangIdx, + }, + { // ur + urLangStr, + urLangIdx, + }, + { // ur-IN + "افریقیکروشینجاوانیزجارجيائىکلالیسٹکنڑکرداودھیسورانی کردیزرمہمگہیمسائیمعی" + + "اری مراقشی تمازیقیجدید معیاری عربیآسان چینی", + []uint16{ // 612 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + // Entry 40 - 7F + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0026, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0044, 0x0044, 0x004a, 0x004a, 0x004a, 0x004a, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + // Entry 80 - BF + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + // Entry C0 - FF + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + // Entry 100 - 13F + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + // Entry 140 - 17F + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + // Entry 180 - 1BF + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x007f, 0x007f, 0x007f, 0x007f, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + // Entry 1C0 - 1FF + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + // Entry 200 - 23F + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + // Entry 240 - 27F + 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00cf, 0x00cf, + 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, + 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, + 0x00cf, 0x00cf, 0x00cf, 0x00e0, + }, + }, + { // uz + uzLangStr, + uzLangIdx, + }, + { // uz-Arab + "دریپشتواوزبیک", + []uint16{ // 170 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + // Entry 40 - 7F + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + // Entry 80 - BF + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x001a, + }, + }, + { // uz-Cyrl + "афарчаабхазчаафрикаансаканчаамхарчаарагонарабчаассомчааварчааймараозарба" + + "йжончабошқирдчабеларусчаболгарчабисламабамбарчабенгалчатибетчабрето" + + "нчабоснийчакаталончачечен тиличаморрокорсиканчачехчаславянча (черко" + + "в)чуваш тилиуэлсчадатчанемисчадивехидзонгкаэвечагрекчаинглизчаэспер" + + "антоиспанчаэстончабаскчафорсийфулаҳфинчафижичафарерчафранцузчағарби" + + "й фризчаирландчашотландча гаеликгалицийчагуаранигужаротчамэнчахауса" + + "ибронийҳиндихорватчагаитянчавенгерчаарманчагерероинтерлингваиндонез" + + "чаигбоидоисландчаиталянчаинуктитутяпончаяванчагрузинчакикуюқозоқчаг" + + "ренландчахмерчаканнадакорейсчаканурикашмирчакурдчакорнчақирғизчалот" + + "инчалюксембургчагандачалингалчалаосчалитвачалуба-катангалатишчамала" + + "гасийчамаршалл тилимаоримакедончамалаяламмўғулчамаратхималай тилмал" + + "тачабирманчашимолий ндебеленепалчаголландчанорвегча нюнорскнорвегча" + + " бокмалжанубий ндебелчачеваокситанчаоромоодияпанжобчаполякчапуштупор" + + "тугалчакечуароманшчарундируминчарусчакиняруандасанскритсиндҳишимоли" + + "й саамчасангосингалчасловакчасловенчашонасомаличаалбанчасербчасвати" + + "сунданчашведчасуахилитамилчателугутожикчатайчатигринячатуркманчатон" + + "ганчатуркчататарчауйғурчаукраинчаурдуўзбекчавендаветнамчаволапюквол" + + "офчахосаиддишйорубахитойчазулуачинадангмэадигейагемчаайнуалеутангик" + + "амапудунгунарапахоасучаастурийчаавадхибаличабасаабембабеначабхожпур" + + "ибинибодочабугийчаблинчасебуанчачигачачуукчамаричоктавчачерокишайен" + + "нсорани-курдчадакотчадаргинчатаитачадогрибзармақуйи-сорбчадуалачади" + + "ола-фогнидазагаэмбучаэфикэкажукэвондончафилипинчафонфриулчагагеэзги" + + "лбертчагоронталонемисча (Швейцария)гусиигвичингавайчахилигайнонхмон" + + "гчаюқори сорбчахупа тилиибан тилиибибоилокоингушчангомбамачаме тили" + + "кабилчакажикамбачамакондечакабувердианукойра-чииникакокаленжинчакон" + + "канчашамбалабафиячакёлнчалангичалакотачалакотачашимолий лурилушайлу" + + "ҳямасайчамокша тилимендемеручаморисьенмахува-миттометамикмакминангк" + + "абауманипурчамогавкмоссимундангбир нечта тилкрикчамирандесэрзянчама" + + "зандераннаманиуэчаквасионгиембуннконуэрчанянколепапияментокичэромбо" + + "чааруминруанда тилисахасамбуручасанталисангучасенакойраборо-сеннита" + + "шелхитжанубий саамчалуле-саамчаинари-саамчасколт-саамчасаҳочакоморч" + + "асуриячатесотигретасавакмарказий атлас тамазигхтномаълум тилваивунж" + + "овалсерчаволяттасогаянгбенкантончатамазигхтТил таркиби йўқстандарт " + + "арабчаинглизча (Британия)инглизча (Америка)фламандчаконго-суахилисо" + + "ддалаштирилган хитойчаанъанавий хитойча", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x001a, 0x001a, 0x002c, 0x0038, 0x0046, 0x0052, + 0x005e, 0x006c, 0x0078, 0x0084, 0x009c, 0x00ae, 0x00c0, 0x00d0, + 0x00de, 0x00ee, 0x00fe, 0x010c, 0x011c, 0x012c, 0x013e, 0x0151, + 0x015f, 0x0173, 0x0173, 0x017d, 0x019c, 0x01af, 0x01bb, 0x01c5, + 0x01d3, 0x01df, 0x01ed, 0x01f7, 0x0203, 0x0213, 0x0225, 0x0233, + 0x0241, 0x024d, 0x0259, 0x0263, 0x026d, 0x0279, 0x0287, 0x0299, + 0x02b2, 0x02c2, 0x02e1, 0x02f3, 0x0301, 0x0313, 0x031d, 0x0327, + 0x0335, 0x033f, 0x033f, 0x034f, 0x035f, 0x036f, 0x037d, 0x0389, + // Entry 40 - 7F + 0x039f, 0x03b1, 0x03b1, 0x03b9, 0x03b9, 0x03b9, 0x03bf, 0x03cf, + 0x03df, 0x03f1, 0x03fd, 0x0409, 0x0419, 0x0419, 0x0423, 0x0423, + 0x0431, 0x0445, 0x0451, 0x045f, 0x046f, 0x047b, 0x048b, 0x0497, + 0x0497, 0x04a3, 0x04b3, 0x04c1, 0x04d9, 0x04e7, 0x04e7, 0x04f7, + 0x0503, 0x0511, 0x0528, 0x0536, 0x054c, 0x0563, 0x056d, 0x057f, + 0x058f, 0x059d, 0x05ab, 0x05bc, 0x05ca, 0x05da, 0x05da, 0x05f7, + 0x0605, 0x0605, 0x0617, 0x0636, 0x0653, 0x0672, 0x0672, 0x067a, + 0x068c, 0x068c, 0x0696, 0x069e, 0x069e, 0x06ae, 0x06ae, 0x06bc, + // Entry 80 - BF + 0x06c6, 0x06da, 0x06e4, 0x06f4, 0x06fe, 0x070c, 0x0716, 0x072a, + 0x073a, 0x073a, 0x0746, 0x0761, 0x076b, 0x077b, 0x078b, 0x079b, + 0x079b, 0x07a3, 0x07b3, 0x07c1, 0x07cd, 0x07d7, 0x07d7, 0x07e7, + 0x07f3, 0x0801, 0x080f, 0x081b, 0x0829, 0x0833, 0x0845, 0x0857, + 0x0857, 0x0867, 0x0873, 0x0873, 0x0881, 0x0881, 0x088f, 0x089f, + 0x08a7, 0x08b5, 0x08bf, 0x08cf, 0x08dd, 0x08dd, 0x08eb, 0x08f3, + 0x08fd, 0x0909, 0x0909, 0x0917, 0x091f, 0x0927, 0x0927, 0x0935, + 0x0941, 0x0941, 0x0941, 0x094d, 0x0955, 0x0955, 0x0955, 0x095f, + // Entry C0 - FF + 0x095f, 0x095f, 0x095f, 0x096b, 0x096b, 0x097f, 0x097f, 0x098d, + 0x098d, 0x098d, 0x098d, 0x098d, 0x098d, 0x0997, 0x0997, 0x09a9, + 0x09a9, 0x09b5, 0x09b5, 0x09c1, 0x09c1, 0x09cb, 0x09cb, 0x09cb, + 0x09cb, 0x09cb, 0x09d5, 0x09d5, 0x09e1, 0x09e1, 0x09e1, 0x09e1, + 0x09f1, 0x09f1, 0x09f9, 0x09f9, 0x09f9, 0x09f9, 0x09f9, 0x09f9, + 0x09f9, 0x09f9, 0x0a05, 0x0a05, 0x0a05, 0x0a13, 0x0a13, 0x0a1f, + 0x0a1f, 0x0a1f, 0x0a1f, 0x0a1f, 0x0a1f, 0x0a2f, 0x0a3b, 0x0a3b, + 0x0a3b, 0x0a47, 0x0a4f, 0x0a4f, 0x0a5f, 0x0a5f, 0x0a6b, 0x0a77, + // Entry 100 - 13F + 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a9e, 0x0aae, + 0x0abc, 0x0abc, 0x0abc, 0x0ac8, 0x0ac8, 0x0ad2, 0x0ad2, 0x0ae7, + 0x0ae7, 0x0af5, 0x0af5, 0x0b0a, 0x0b0a, 0x0b16, 0x0b22, 0x0b2a, + 0x0b2a, 0x0b2a, 0x0b36, 0x0b36, 0x0b36, 0x0b36, 0x0b48, 0x0b48, + 0x0b48, 0x0b5a, 0x0b5a, 0x0b60, 0x0b60, 0x0b60, 0x0b60, 0x0b60, + 0x0b60, 0x0b60, 0x0b6e, 0x0b72, 0x0b72, 0x0b72, 0x0b72, 0x0b72, + 0x0b72, 0x0b7a, 0x0b8c, 0x0b8c, 0x0b8c, 0x0b8c, 0x0b8c, 0x0b8c, + 0x0b9e, 0x0b9e, 0x0b9e, 0x0b9e, 0x0bc1, 0x0bc1, 0x0bc1, 0x0bcb, + // Entry 140 - 17F + 0x0bd7, 0x0bd7, 0x0bd7, 0x0be5, 0x0be5, 0x0bf9, 0x0bf9, 0x0c07, + 0x0c1e, 0x0c1e, 0x0c2f, 0x0c40, 0x0c4a, 0x0c54, 0x0c62, 0x0c62, + 0x0c62, 0x0c62, 0x0c6e, 0x0c83, 0x0c83, 0x0c83, 0x0c83, 0x0c83, + 0x0c91, 0x0c91, 0x0c99, 0x0ca7, 0x0ca7, 0x0ca7, 0x0ca7, 0x0ca7, + 0x0cb9, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, 0x0ce6, + 0x0ce6, 0x0ce6, 0x0cee, 0x0d02, 0x0d02, 0x0d02, 0x0d12, 0x0d12, + 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d20, 0x0d2e, + 0x0d3a, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d48, 0x0d48, 0x0d48, 0x0d48, + // Entry 180 - 1BF + 0x0d48, 0x0d48, 0x0d48, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d7f, + 0x0d7f, 0x0d7f, 0x0d7f, 0x0d7f, 0x0d7f, 0x0d89, 0x0d91, 0x0d91, + 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d9f, + 0x0d9f, 0x0db2, 0x0db2, 0x0dbc, 0x0dc8, 0x0dd8, 0x0dd8, 0x0def, + 0x0df7, 0x0e03, 0x0e19, 0x0e19, 0x0e2b, 0x0e37, 0x0e41, 0x0e41, + 0x0e4f, 0x0e67, 0x0e73, 0x0e83, 0x0e83, 0x0e83, 0x0e83, 0x0e91, + 0x0ea5, 0x0ea5, 0x0ea5, 0x0ead, 0x0ead, 0x0ead, 0x0ead, 0x0eb9, + 0x0eb9, 0x0ec5, 0x0ed5, 0x0ed5, 0x0ed5, 0x0ed5, 0x0edb, 0x0edb, + // Entry 1C0 - 1FF + 0x0ee7, 0x0ee7, 0x0ee7, 0x0ef5, 0x0ef5, 0x0ef5, 0x0ef5, 0x0ef5, + 0x0ef5, 0x0ef5, 0x0ef5, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, + 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, + 0x0f09, 0x0f11, 0x0f11, 0x0f11, 0x0f11, 0x0f11, 0x0f11, 0x0f11, + 0x0f1f, 0x0f1f, 0x0f1f, 0x0f1f, 0x0f1f, 0x0f2b, 0x0f40, 0x0f40, + 0x0f48, 0x0f48, 0x0f5a, 0x0f5a, 0x0f68, 0x0f68, 0x0f68, 0x0f76, + 0x0f76, 0x0f76, 0x0f76, 0x0f76, 0x0f76, 0x0f7e, 0x0f7e, 0x0f7e, + 0x0f9b, 0x0f9b, 0x0f9b, 0x0fab, 0x0fab, 0x0fab, 0x0fab, 0x0fab, + // Entry 200 - 23F + 0x0fab, 0x0fc6, 0x0fdb, 0x0ff2, 0x1009, 0x1009, 0x1009, 0x1009, + 0x1009, 0x1015, 0x1015, 0x1015, 0x1015, 0x1015, 0x1023, 0x1023, + 0x1031, 0x1031, 0x1031, 0x1031, 0x1039, 0x1039, 0x1039, 0x1043, + 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, + 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, + 0x1051, 0x1051, 0x107f, 0x107f, 0x107f, 0x107f, 0x1096, 0x109c, + 0x109c, 0x109c, 0x109c, 0x109c, 0x109c, 0x109c, 0x10a6, 0x10b6, + 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10cc, + // Entry 240 - 27F + 0x10cc, 0x10cc, 0x10d8, 0x10d8, 0x10d8, 0x10e8, 0x10e8, 0x10e8, + 0x10e8, 0x10e8, 0x10fa, 0x10fa, 0x1116, 0x1116, 0x1133, 0x1133, + 0x1133, 0x1133, 0x1133, 0x1133, 0x1156, 0x1177, 0x1177, 0x1177, + 0x1177, 0x1177, 0x1177, 0x1177, 0x1177, 0x1189, 0x1189, 0x1189, + 0x1189, 0x1189, 0x11a2, 0x11d1, 0x11f2, + }, + }, + { // vai + "ꕉꕪꘋꕉꕆꕌꔸꕞꕌꖝꔆꕞꖩꔻꗂꔠꗸꘋꗩꕭꔷꗿꗡꕧꕮꔧꗥꗷꘋꕶꕱꕐꘊꔧꗨꗡꔻꘂꘋꗱꘋꔻꕌꖙꕢꔦꔺꖽꔟꗸꘋꔤꖆꕇꔻꘂꘋꔤꕼꔤꕚꔷꘂꘋꕧꕐꕇꔧꕧꕙꕇꔧ" + + "ꕃꘈꗢꖏꔸꘂꘋꕮꔒꔀꗩꕆꔻꕇꕐꔷꗍꔿꖛꕨꔬꗁꔒꔻꕶꕿꕃꔤꖄꕆꕇꘂꘋꗐꖺꔻꘂꘋꕟꖙꕡꖇꕮꔷꖬꔨꗵꘋꕚꕆꔷꕚꔤꗋꕃꖳꖴꔓꕇꘂꘋꖺꖦꔲꕩꕯ" + + "ꕆꔧꖎꖄꕑꕦꕇꔧꖮꖨꕙꔤ", + []uint16{ // 560 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0015, 0x0015, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x002a, 0x0036, + 0x0036, 0x0036, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + 0x003f, 0x003f, 0x003f, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x004e, 0x004e, 0x004e, 0x004e, 0x0057, 0x005d, 0x005d, 0x0066, + 0x0066, 0x0066, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x007e, + 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x0087, + 0x0087, 0x008d, 0x008d, 0x008d, 0x008d, 0x0099, 0x0099, 0x0099, + // Entry 40 - 7F + 0x0099, 0x00ab, 0x00ab, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00c0, 0x00c0, 0x00cc, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00e1, 0x00e1, 0x00ed, 0x00ed, 0x00ed, 0x00ed, + 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, + 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, + 0x00ed, 0x00ed, 0x00ed, 0x00f6, 0x00f6, 0x00ff, 0x00ff, 0x00ff, + 0x0108, 0x0108, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, + 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x0117, 0x0117, 0x0120, + // Entry 80 - BF + 0x0120, 0x012c, 0x012c, 0x012c, 0x012c, 0x013b, 0x014a, 0x0153, + 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, + 0x0153, 0x0153, 0x015c, 0x015c, 0x015c, 0x015c, 0x015c, 0x015c, + 0x0168, 0x0168, 0x0171, 0x0171, 0x0171, 0x0177, 0x0177, 0x0177, + 0x0177, 0x0177, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x018f, + 0x0195, 0x0195, 0x0195, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01ad, 0x01ad, 0x01b6, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + // Entry C0 - FF + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + // Entry 100 - 13F + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + // Entry 140 - 17F + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + // Entry 180 - 1BF + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + // Entry 1C0 - 1FF + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + // Entry 200 - 23F + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01c2, + }, + }, + { // vai-Latn + "AkaŋAmiháriLahabuBhelarusaŋBhɔgerɛŋBhɛŋgáliChɛJamáĩHɛlɛŋPooPanyɛĩPɛɛsiyɛ" + + "ŋFɛŋsiHawusaHíiŋdiHɔŋgérɛŋÍndonisiyɛŋÍgboItáliyɛŋJapaníĩJavaníĩKimɛ" + + "ɛ̃ tɛKoríyɛŋMaléeeBhɛmísiNipaliDɔchiPuŋjabhiPɔ́lésiPotokíiRomíniyɛŋ" + + "RɔshiyɛŋRawundaSomáliSúwídɛŋTamíliTáiTɔ́kiYukureniyɛŋƆduViyamíĩYórób" + + "haChaniĩZúluVai", + []uint16{ // 560 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x000d, 0x000d, + 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x001e, 0x0029, + 0x0029, 0x0029, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x003f, 0x003f, 0x003f, 0x003f, 0x0047, 0x004a, 0x004a, 0x0052, + 0x0052, 0x0052, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x006b, + 0x006b, 0x0073, 0x0073, 0x0073, 0x0073, 0x0080, 0x0080, 0x0080, + // Entry 40 - 7F + 0x0080, 0x008e, 0x008e, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, + 0x009e, 0x009e, 0x00a7, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00bd, 0x00bd, 0x00c7, 0x00c7, 0x00c7, 0x00c7, + 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, + 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, + 0x00c7, 0x00c7, 0x00c7, 0x00ce, 0x00ce, 0x00d7, 0x00d7, 0x00d7, + 0x00dd, 0x00dd, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, + 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00ec, 0x00ec, 0x00f6, + // Entry 80 - BF + 0x00f6, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x010a, 0x0115, 0x011c, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x011c, 0x011c, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x012e, 0x012e, 0x0135, 0x0135, 0x0135, 0x0139, 0x0139, 0x0139, + 0x0139, 0x0139, 0x0140, 0x0140, 0x0140, 0x0140, 0x0140, 0x014d, + 0x0151, 0x0151, 0x0151, 0x015a, 0x015a, 0x015a, 0x015a, 0x015a, + 0x015a, 0x0163, 0x0163, 0x016a, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + // Entry C0 - FF + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + // Entry 100 - 13F + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + // Entry 140 - 17F + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + // Entry 180 - 1BF + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + // Entry 1C0 - 1FF + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + // Entry 200 - 23F + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x0172, + }, + }, + { // vi + viLangStr, + viLangIdx, + }, + { // vun + "KiakanyiKiamharyiKyiarabuKyibelarusiKyibulgaryiaKyibanglaKyicheckiKyijer" + + "umaniKyigirikiKyingerezaKyihispaniaKyiajemiKyifaransaKyihausaKyihind" + + "iKyihungariKyiindonesiaKyiigboKyiitalianoKyijapaniKyijavaKyikambodia" + + "KyikoreaKyimalesiaKyiburmaKyinepaliKyiholanziKyipunjabiKyipolandiKyi" + + "renoKyiromaniaKyirusiKyinyarwandaKyisomalyiKyiswidiKyitamilKyitailan" + + "diKyiturukyiKyiukraniaKyiurduKyivietinamuKyiyorubaKyichinaKyizuluKyi" + + "vunjo", + []uint16{ // 567 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0011, 0x0011, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0030, + 0x0030, 0x0030, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x004d, 0x004d, 0x004d, 0x004d, 0x0056, 0x0060, 0x0060, 0x006b, + 0x006b, 0x006b, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x0085, + 0x0085, 0x008d, 0x008d, 0x008d, 0x008d, 0x0097, 0x0097, 0x0097, + // Entry 40 - 7F + 0x0097, 0x00a3, 0x00a3, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x00b5, 0x00b5, 0x00be, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00d0, 0x00d0, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00e2, 0x00e2, 0x00ea, 0x00ea, 0x00ea, + 0x00f3, 0x00f3, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x0107, 0x0107, 0x0111, + // Entry 80 - BF + 0x0111, 0x0118, 0x0118, 0x0118, 0x0118, 0x0122, 0x0129, 0x0135, + 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, + 0x0135, 0x0135, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x0147, 0x0147, 0x014f, 0x014f, 0x014f, 0x015a, 0x015a, 0x015a, + 0x015a, 0x015a, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x016e, + 0x0175, 0x0175, 0x0175, 0x0181, 0x0181, 0x0181, 0x0181, 0x0181, + 0x0181, 0x018a, 0x018a, 0x0192, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry C0 - FF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 100 - 13F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 140 - 17F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 180 - 1BF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 1C0 - 1FF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 200 - 23F + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x01a1, + }, + }, + { // wae + "AbčasišAfrikánsAmharišArabišAssamesišAymaraSerbaidšanišWísrussišBulgariš" + + "BengališTibetišBosnišKatalanišTšečišWalisišDänišTitšMalediwišButaniš" + + "GričišEnglišSchpanišEstnišBaskišPersišFinišFidšianišWälšIrišGalizišG" + + "uaraniGujaratiHausaHebräišHindiKroatišHaitianišUngarišArmenišIndones" + + "išIgboIisländišItalienišJapanišGeorgišKazačišKambodšanišKannadaKorea" + + "nišKašmirišKurdišKirgisišLatinišLuxemburgišLingalaLaotišLitauišLetti" + + "šMalagásiMaoriMazedonišMalayalamMongolišMarathiMalaíšMaltesišBurmes" + + "išNordndebeleNepalesišHoländišNorwegiš NynorskNorwegiš BokmålNyanjaO" + + "riyaOsétišPandšabišPolnišPaštuPortugisišQuečuaRätromanišRundiRumäniš" + + "RusišRuandišSanskritSindhiNordsamišSangoSingalesišSlowakišSlowenišSa" + + "moanišShonaSomališAlbanišSerbišSwaziSüdsothoSundanesišSchwedišSuahel" + + "išTamilišTeluguTadšikišThailändišTigrinjaTurkmenišTswanaTongaTürkišT" + + "songaTaitišUigurišUkrainišUrduUsbekišVendaVietnamesišWolofXhosaYorub" + + "aChinesišZuluEfikFilipinišHawaíanišNordsothoJakutišTetumNiwmelanesiš" + + "Unbekannti SchpračWalserÖštričišes TitšSchwizer HočtitšAuštrališes E" + + "nglišKanadišes EnglišBritišes EnglišAmerikanišes EnglišLatiamerikani" + + "šes SchpanišIberišes SchpanišKanadišes WälšSchwizer WälšFlämišBrasi" + + "lianišes PortugisišIberišes PortugisišVereifačts ChinesišTraditionel" + + "ls Chinesiš", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0009, 0x0009, 0x0012, 0x0012, 0x001a, 0x001a, + 0x0021, 0x002b, 0x002b, 0x0031, 0x003f, 0x003f, 0x004a, 0x0053, + 0x0053, 0x0053, 0x005c, 0x0064, 0x0064, 0x006b, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x007e, 0x007e, 0x007e, 0x0086, 0x008d, + 0x0092, 0x009c, 0x00a4, 0x00a4, 0x00ac, 0x00b3, 0x00b3, 0x00bc, + 0x00c3, 0x00ca, 0x00d1, 0x00d1, 0x00d7, 0x00e2, 0x00e2, 0x00e8, + 0x00e8, 0x00ed, 0x00ed, 0x00f5, 0x00fc, 0x0104, 0x0104, 0x0109, + 0x0112, 0x0117, 0x0117, 0x011f, 0x0129, 0x0131, 0x0139, 0x0139, + // Entry 40 - 7F + 0x0139, 0x0143, 0x0143, 0x0147, 0x0147, 0x0147, 0x0147, 0x0152, + 0x015c, 0x015c, 0x0164, 0x0164, 0x016c, 0x016c, 0x016c, 0x016c, + 0x0175, 0x0175, 0x0182, 0x0189, 0x0192, 0x0192, 0x019c, 0x01a3, + 0x01a3, 0x01a3, 0x01ac, 0x01b4, 0x01c0, 0x01c0, 0x01c0, 0x01c7, + 0x01ce, 0x01d6, 0x01d6, 0x01dd, 0x01e6, 0x01e6, 0x01eb, 0x01f5, + 0x01fe, 0x0207, 0x020e, 0x0216, 0x021f, 0x0228, 0x0228, 0x0233, + 0x023d, 0x023d, 0x0247, 0x0258, 0x0269, 0x0269, 0x0269, 0x026f, + 0x026f, 0x026f, 0x026f, 0x0274, 0x027c, 0x0287, 0x0287, 0x028e, + // Entry 80 - BF + 0x0294, 0x029f, 0x02a6, 0x02b2, 0x02b7, 0x02c0, 0x02c6, 0x02ce, + 0x02d6, 0x02d6, 0x02dc, 0x02e6, 0x02eb, 0x02f6, 0x02ff, 0x0308, + 0x0311, 0x0316, 0x031e, 0x0326, 0x032d, 0x0332, 0x033b, 0x0346, + 0x034f, 0x0358, 0x0360, 0x0366, 0x0370, 0x037c, 0x0384, 0x038e, + 0x0394, 0x0399, 0x03a1, 0x03a7, 0x03a7, 0x03ae, 0x03b6, 0x03bf, + 0x03c3, 0x03cb, 0x03d0, 0x03dc, 0x03dc, 0x03dc, 0x03e1, 0x03e6, + 0x03e6, 0x03ec, 0x03ec, 0x03f5, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + // Entry C0 - FF + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + // Entry 100 - 13F + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03fd, + 0x03fd, 0x03fd, 0x03fd, 0x03fd, 0x03fd, 0x03fd, 0x03fd, 0x03fd, + 0x03fd, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + // Entry 140 - 17F + 0x0407, 0x0407, 0x0407, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + // Entry 180 - 1BF + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x041b, + // Entry 1C0 - 1FF + 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, + 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, + 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, + 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, + 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, + 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, + 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, + 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, + // Entry 200 - 23F + 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, + 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, + 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0428, 0x0428, + 0x0428, 0x0428, 0x0428, 0x0428, 0x0428, 0x0428, 0x0428, 0x0428, + 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, + 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0448, 0x0448, + 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x044e, + 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, + // Entry 240 - 27F + 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, + 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, + 0x0462, 0x0474, 0x0489, 0x049b, 0x04ac, 0x04c1, 0x04dc, 0x04ef, + 0x04ef, 0x04ef, 0x0500, 0x050f, 0x050f, 0x0517, 0x0531, 0x0546, + 0x0546, 0x0546, 0x0546, 0x055b, 0x0572, + }, + }, + { // xog + "OluakaaniOluamharikiOluwarabuOlubelarusiOlubulugariyaOlubengaliOluceekeO" + + "ludaakiOluyonaaniOlungerezaOlusipanyaOluperusiOlufalansaOluhawuzaOlu" + + "hinduOluhangareOluyindonezyaOluyiboOluyitaleOlujapaniOlunnajjavaOluk" + + "meOlukoreyaOlumalayiOlubbamaOlunepaliOluholandiOlupunjabiOlupolandiO" + + "lupotugiiziOlulomaniyaOlulasaOlunarwandaOlusomaliyaOluswideniOlutami" + + "iruOluttaayiOlutakeOluyukurayineOlu-uruduOluvyetinaamuOluyorubaOluca" + + "yinaOluzzuluOlusoga", + []uint16{ // 576 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0014, 0x0014, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x0028, 0x0035, + 0x0035, 0x0035, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + 0x003f, 0x003f, 0x003f, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x004f, 0x004f, 0x004f, 0x004f, 0x0059, 0x0063, 0x0063, 0x006d, + 0x006d, 0x006d, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0089, + 0x0089, 0x0091, 0x0091, 0x0091, 0x0091, 0x009b, 0x009b, 0x009b, + // Entry 40 - 7F + 0x009b, 0x00a8, 0x00a8, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, + 0x00b8, 0x00b8, 0x00c1, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00cc, 0x00cc, 0x00d2, 0x00d2, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00e4, 0x00e4, 0x00ec, 0x00ec, 0x00ec, + 0x00f5, 0x00f5, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, + 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x0109, 0x0109, 0x0113, + // Entry 80 - BF + 0x0113, 0x011f, 0x011f, 0x011f, 0x011f, 0x012a, 0x0131, 0x013c, + 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, + 0x013c, 0x013c, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, + 0x0151, 0x0151, 0x015b, 0x015b, 0x015b, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x0178, + 0x0181, 0x0181, 0x0181, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, + 0x018e, 0x0197, 0x0197, 0x01a0, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + // Entry C0 - FF + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + // Entry 100 - 13F + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + // Entry 140 - 17F + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + // Entry 180 - 1BF + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + // Entry 1C0 - 1FF + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + // Entry 200 - 23F + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01af, + }, + }, + { // yav + "akánɛamalíképakaspielúsebulgálɛpengálɛ́ɛcɛ́kɛ́ɛŋndiámanyavánɛíŋgilísénu" + + "ɛspanyɔ́lɛnupɛ́lisɛfeleŋsípakasíndíɔ́ŋgɛíndonísiɛíboitáliɛndiámanyá" + + "vanɛkímɛɛkolíemáliɛbímanɛnunipálɛnilándɛnupunsapíɛ́nupolonɛ́ɛnupɔlit" + + "ukɛ́ɛnulumɛ́ŋɛnulúsenuluándɛ́ɛnusomalíɛnusuetuanutámulenutáyɛnutúluk" + + "enukeleniɛ́ŋɛnulutúnufiɛtnamíɛŋnuyolúpasinúɛnusulúnuasue", + []uint16{ // 579 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x000f, 0x000f, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x001e, 0x0027, + 0x0027, 0x0027, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x004a, 0x004a, 0x004a, 0x004a, 0x0052, 0x005e, 0x005e, 0x006e, + 0x006e, 0x006e, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x0083, + 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0088, + 0x0088, 0x008e, 0x008e, 0x008e, 0x008e, 0x0097, 0x0097, 0x0097, + // Entry 40 - 7F + 0x0097, 0x00a3, 0x00a3, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, + 0x00af, 0x00af, 0x00b7, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00bf, 0x00bf, 0x00c7, 0x00c7, 0x00cd, 0x00cd, 0x00cd, 0x00cd, + 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, + 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00cd, + 0x00cd, 0x00cd, 0x00cd, 0x00d4, 0x00d4, 0x00dc, 0x00dc, 0x00dc, + 0x00e6, 0x00e6, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, + 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00fd, 0x00fd, 0x010a, + // Entry 80 - BF + 0x010a, 0x011a, 0x011a, 0x011a, 0x011a, 0x0127, 0x012e, 0x013c, + 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, + 0x013c, 0x013c, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, + 0x014f, 0x014f, 0x0158, 0x0158, 0x0158, 0x0160, 0x0160, 0x0160, + 0x0160, 0x0160, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0179, + 0x0180, 0x0180, 0x0180, 0x0190, 0x0190, 0x0190, 0x0190, 0x0190, + 0x0190, 0x0199, 0x0199, 0x01a0, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + // Entry C0 - FF + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + // Entry 100 - 13F + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + // Entry 140 - 17F + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + // Entry 180 - 1BF + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + // Entry 1C0 - 1FF + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + // Entry 200 - 23F + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + // Entry 240 - 27F + 0x01a7, 0x01a7, 0x01ad, + }, + }, + { // yi + "אַפֿאַראַפֿריקאַנסאַמהאַרישאַראַגאנישאַראַבישאַסאַמישאַזערביידזשאַנישבעל" + + "אַרוסישבולגאַרישבענגאַלישטיבעטישברעטאנישבאסנישקאַטאַלאנישטשעכישקלוי" + + "סטער־סלאַווישוועלשישדענישדײַטשגריכישענגלישעספּעראַנטאשפּאַנישעסטישב" + + "אַסקישפּערסישפֿינישפֿידזשיפֿאַראישפֿראַנצויזישמערב־פֿריזישאירישסקאט" + + "יש געלישגאַלישישמאַנקסהאַוסאַהעברעאישהינדיקראאַטישאונגערישאַרמענישא" + + "ינדאנעזישאידאאיסלאַנדישאיטאַליענישיאַפּאַנישיאַוואַנעזישגרוזינישקאַ" + + "זאַכישכמערקאַנאַדאַקארעאישקורדישקארנישקירגיזישלאטיינישלוקסעמבורגישל" + + "אַאליטווישלעטישמאַארישמאַקעדאנישמאַלאַיאַלאַםמאנגאלישמאַלטעזישבירמא" + + "ַנישנעפּאַלישהאלענדישנײַ־נארוועגישנארוועגישאקסיטאַנישאסעטישפּוילישפ" + + "ּאַשטאָפּארטוגעזישרומענישרוסישסאַנסקריטסאַרדישסינדהינארדסאַמישסינהא" + + "ַלישסלאוואַקישסלאווענישסאַמאאַניששאנאַסאמאַלישאַלבאַנישסערביששוועדי" + + "שסוואַהילישטאַמילטורקמענישטאָטערישאוקראַאינישאורדואוזבעקישוויעטנאַמ" + + "עזישוואלאַפּוקייִדישכינעזישזולואַקאַדישאַלט ענגלישאַראַמישבאַלינעזי" + + "שבײַערישסעבואַנישקרים־טערקישקאַשובישאונטער־סארבישזשאלא־פֿאנימיטל ענ" + + "גלישפֿיליפּינאאַלט־פֿראַנצויזישדרום־פֿריזישמזרח־פֿריזישמיטל הויכדוי" + + "טשאַלט־ הויכדויטשגאטישאוראַלט־גריכישפידזשי הינדיאייבער־סארבישלאזשבא" + + "ָןיידיש־פערסישלאַדינאליווישמיזאנאַפּאליטַנישנידערדײַטשאַלט פּערסישפ" + + "ּרייסישרוסינישסיציליאַנישסקאטסאַלט־אירישאונטער שלעזישslyסומערישקאמא" + + "ריששלעזישטיגרעאומבאַוואוסטע שפּראַךמערב פֿלעמישפֿלעמישסערבא־קראאַטי" + + "שקאנגא־סוואַהיליש", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x000e, 0x000e, 0x0024, 0x0024, 0x0036, 0x004a, + 0x005a, 0x006a, 0x006a, 0x006a, 0x008a, 0x008a, 0x009e, 0x00b0, + 0x00b0, 0x00b0, 0x00c2, 0x00d0, 0x00e0, 0x00ec, 0x0102, 0x0102, + 0x0102, 0x0102, 0x0102, 0x010e, 0x0130, 0x0130, 0x013e, 0x0148, + 0x0152, 0x0152, 0x0152, 0x0152, 0x015e, 0x016a, 0x0180, 0x0190, + 0x019a, 0x01a8, 0x01b6, 0x01b6, 0x01c2, 0x01d0, 0x01e0, 0x01f8, + 0x0210, 0x021a, 0x0231, 0x0241, 0x0241, 0x0241, 0x024d, 0x025b, + 0x026b, 0x0275, 0x0275, 0x0285, 0x0285, 0x0295, 0x02a5, 0x02a5, + // Entry 40 - 7F + 0x02a5, 0x02b9, 0x02b9, 0x02b9, 0x02b9, 0x02b9, 0x02c1, 0x02d5, + 0x02eb, 0x02eb, 0x02ff, 0x0317, 0x0327, 0x0327, 0x0327, 0x0327, + 0x0339, 0x0339, 0x0341, 0x0353, 0x0361, 0x0361, 0x0361, 0x036d, + 0x036d, 0x0379, 0x0389, 0x0399, 0x03b1, 0x03b1, 0x03b1, 0x03b1, + 0x03b9, 0x03c7, 0x03c7, 0x03d1, 0x03d1, 0x03d1, 0x03df, 0x03f3, + 0x040d, 0x041d, 0x041d, 0x041d, 0x042f, 0x0441, 0x0441, 0x0441, + 0x0453, 0x0453, 0x0463, 0x047d, 0x048f, 0x048f, 0x048f, 0x048f, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04af, 0x04af, 0x04af, 0x04bd, + // Entry 80 - BF + 0x04cd, 0x04e3, 0x04e3, 0x04e3, 0x04e3, 0x04f1, 0x04fb, 0x04fb, + 0x050d, 0x051b, 0x0527, 0x053b, 0x053b, 0x054d, 0x0561, 0x0573, + 0x0587, 0x0591, 0x05a1, 0x05b3, 0x05bf, 0x05bf, 0x05bf, 0x05bf, + 0x05cd, 0x05e1, 0x05ed, 0x05ed, 0x05ed, 0x05ed, 0x05ed, 0x05ff, + 0x05ff, 0x05ff, 0x05ff, 0x05ff, 0x060f, 0x060f, 0x060f, 0x0625, + 0x062f, 0x063f, 0x063f, 0x0659, 0x066d, 0x066d, 0x066d, 0x066d, + 0x0679, 0x0679, 0x0679, 0x0687, 0x068f, 0x068f, 0x068f, 0x068f, + 0x068f, 0x068f, 0x068f, 0x068f, 0x068f, 0x069f, 0x069f, 0x069f, + // Entry C0 - FF + 0x069f, 0x069f, 0x06b4, 0x06b4, 0x06c4, 0x06c4, 0x06c4, 0x06c4, + 0x06c4, 0x06c4, 0x06c4, 0x06c4, 0x06c4, 0x06c4, 0x06c4, 0x06c4, + 0x06c4, 0x06c4, 0x06c4, 0x06d8, 0x06e6, 0x06e6, 0x06e6, 0x06e6, + 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, + 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, + 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, + 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06f8, 0x06f8, 0x06f8, + 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, + // Entry 100 - 13F + 0x06f8, 0x06f8, 0x06f8, 0x070e, 0x070e, 0x071e, 0x071e, 0x071e, + 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x0738, + 0x0738, 0x0738, 0x0738, 0x074e, 0x074e, 0x074e, 0x074e, 0x074e, + 0x074e, 0x074e, 0x074e, 0x074e, 0x0763, 0x0763, 0x0763, 0x0763, + 0x0763, 0x0777, 0x0777, 0x0777, 0x0777, 0x0777, 0x0799, 0x0799, + 0x07b1, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, + 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07e4, 0x0801, 0x0801, 0x0801, + 0x0801, 0x080b, 0x080b, 0x0827, 0x0827, 0x0827, 0x0827, 0x0827, + // Entry 140 - 17F + 0x0827, 0x0827, 0x0827, 0x0827, 0x083e, 0x083e, 0x083e, 0x083e, + 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, + 0x0858, 0x0868, 0x0868, 0x0868, 0x0880, 0x0880, 0x0880, 0x0880, + 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, + 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, + 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, + 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, + 0x0880, 0x0880, 0x0880, 0x088e, 0x088e, 0x088e, 0x088e, 0x088e, + // Entry 180 - 1BF + 0x088e, 0x088e, 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, + 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, 0x08a2, 0x08a2, 0x08a2, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, + 0x08a2, 0x08a2, 0x08bc, 0x08bc, 0x08d0, 0x08d0, 0x08d0, 0x08d0, + 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, + // Entry 1C0 - 1FF + 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, + 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, + 0x08d0, 0x08e7, 0x08e7, 0x08e7, 0x08e7, 0x08e7, 0x08e7, 0x08f7, + 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, + 0x08f7, 0x08f7, 0x08f7, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, + 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, + 0x091b, 0x0925, 0x0925, 0x0925, 0x0925, 0x0925, 0x0925, 0x0925, + 0x0925, 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, 0x0952, + // Entry 200 - 23F + 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0963, 0x0971, 0x0971, + 0x0971, 0x097d, 0x097d, 0x097d, 0x097d, 0x097d, 0x097d, 0x0987, + 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, + 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, + 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x09b0, 0x09b0, + 0x09b0, 0x09b0, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, + 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, + // Entry 240 - 27F + 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, + 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, + 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, + 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09d5, 0x09d5, 0x09d5, + 0x09d5, 0x09f1, 0x0a11, + }, + }, + { // yo + "Èdè AfrikaniÈdè AkaniÈdè AmarikiÈdè ArabikiTi AssamÈdè AzerbaijaniÈdè Be" + + "larusiÈdè BugariaÈdè BengaliÈdè BretoniÈdè BosniaÈdè CatalaÈdè seeki" + + "Èdè WelshiÈdè Ilẹ̀ DenmarkÈdè Ilẹ̀ GemaniÈdè GirikiÈdè Gẹ̀ẹ́sìÈdè E" + + "sperantoÈdè SipanisiÈdè EstoniaÈdè BaskiÈdè PasiaÈdè FinisiÈdè Faroe" + + "siÈdè FaranséÈdè FrisiaÈdè IrelandÈdè Gaelik ti Ilu ScotlandÈdè Gali" + + "ciaÈdè GuaraniÈdè GujaratiÈdè HausaÈdè HeberuÈdè HindiÈdè KroatiaÈdè" + + " HungariaÈdè Ile ArmeniaÈdè pipoÈdè IndonasiaIru ÈdèÈdè IboÈdè Icela" + + "ndicÈdè ItalianiÈdè JapanisiÈdè JavanasiÈdè GeorgiaÈdè kameriÈdè Kan" + + "nadaÈdè KoriaÈdè LatiniÈdè LithuaniaÈdè LatvianuÈdè MacedoniaÈdè mar" + + "athiÈdè MalayaÈdè MaltaÈdè BumiisiÈdè NepaliÈdè DukiÈdè NorwayÈdè Oc" + + "citaniÈdè PunjabiÈdè Ilẹ̀ PolandiÈdè PọtugiÈdè RomaniaÈdè ̣RọọsiaÈdè" + + " RuwandaÈdè awon ara IndoÈdè SindhiÈdè SinhaleseÈdè SlovakiÈdè Slove" + + "niaÈdè ara SomaliaÈdè AlbaniaÈdè SerbiaÈdè SesotoÈdè SudaniÈdè Suwid" + + "iisiÈdè SwahiliÈdè TamiliÈdè TeluguÈdè TaiÈdè TigrinyaÈdè TurkmenÈdè" + + " TọọkisiÈdè UkaniaÈdè UduÈdè UzbekÈdè JetinamuÈdè XhosaÈdè YiddishiÈ" + + "dè YorùbáÈdè MandariÈdè ṢuluÈdè TagalogiÈdè KlingoniÈdè Serbo-Croati" + + "ani", + []uint16{ // 610 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x0019, 0x0026, 0x0026, + 0x0033, 0x003b, 0x003b, 0x003b, 0x004c, 0x004c, 0x005a, 0x0067, + 0x0067, 0x0067, 0x0074, 0x0074, 0x0081, 0x008d, 0x0099, 0x0099, + 0x0099, 0x0099, 0x0099, 0x00a4, 0x00a4, 0x00a4, 0x00b0, 0x00c5, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00e5, 0x00f9, 0x0108, 0x0116, + 0x0123, 0x012e, 0x0139, 0x0139, 0x0145, 0x0145, 0x0152, 0x0160, + 0x016c, 0x0179, 0x0195, 0x01a2, 0x01af, 0x01bd, 0x01bd, 0x01c8, + 0x01d4, 0x01df, 0x01df, 0x01ec, 0x01ec, 0x01fa, 0x020b, 0x020b, + // Entry 40 - 7F + 0x0215, 0x0224, 0x022d, 0x0236, 0x0236, 0x0236, 0x0236, 0x0245, + 0x0253, 0x0253, 0x0261, 0x026f, 0x027c, 0x027c, 0x027c, 0x027c, + 0x027c, 0x027c, 0x0288, 0x0295, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02ac, 0x02ac, 0x02ac, 0x02ac, 0x02ac, + 0x02ac, 0x02bb, 0x02bb, 0x02c9, 0x02c9, 0x02c9, 0x02c9, 0x02d8, + 0x02d8, 0x02d8, 0x02e5, 0x02f1, 0x02fc, 0x0309, 0x0309, 0x0309, + 0x0315, 0x0315, 0x031f, 0x031f, 0x032b, 0x032b, 0x032b, 0x032b, + 0x0339, 0x0339, 0x0339, 0x0339, 0x0339, 0x0346, 0x0346, 0x035b, + // Entry 80 - BF + 0x035b, 0x0369, 0x0369, 0x0369, 0x0369, 0x0376, 0x0388, 0x0395, + 0x03a8, 0x03a8, 0x03b4, 0x03b4, 0x03b4, 0x03c3, 0x03d0, 0x03de, + 0x03de, 0x03de, 0x03ef, 0x03fc, 0x0408, 0x0408, 0x0414, 0x0420, + 0x042f, 0x043c, 0x0448, 0x0454, 0x0454, 0x045d, 0x046b, 0x0478, + 0x0478, 0x0478, 0x0489, 0x0489, 0x0489, 0x0489, 0x0489, 0x0495, + 0x049e, 0x04a9, 0x04a9, 0x04b7, 0x04b7, 0x04b7, 0x04b7, 0x04c2, + 0x04d0, 0x04de, 0x04de, 0x04eb, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + // Entry C0 - FF + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + // Entry 100 - 13F + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, + 0x04f7, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + // Entry 140 - 17F + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + // Entry 180 - 1BF + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + // Entry 1C0 - 1FF + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + // Entry 200 - 23F + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x0505, 0x0505, 0x0505, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + // Entry 240 - 27F + 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0513, 0x0528, + }, + }, + { // yo-BJ + "Èdè Ilɛ̀ DenmarkÈdè Ilɛ̀ GemaniÈdè Gɛ̀ɛ́sìÈdè Ilɛ̀ PolandiÈdè PɔtugiÈdè " + + "̣RɔɔsiaÈdè TɔɔkisiÈdè Shulu", + []uint16{ // 181 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + // Entry 40 - 7F + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x004d, + // Entry 80 - BF + 0x004d, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, + 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, + 0x0079, 0x0079, 0x0079, 0x0079, 0x0084, + }, + }, + { // yue + "阿法文阿布哈茲文阿緯斯陀文南非荷蘭文阿坎文阿姆哈拉文阿拉貢文阿拉伯文阿薩姆文阿瓦爾文艾馬拉文亞塞拜然文巴什客爾文白俄羅斯文保加利亞文比斯拉馬文班" + + "巴拉文孟加拉文藏文布列塔尼文波士尼亞文加泰羅尼亞文車臣文查莫洛文科西嘉文克裡文捷克文宗教斯拉夫文楚瓦什文威爾斯文丹麥文德文迪維西文宗" + + "卡文埃維文希臘文英文世界文西班牙文愛沙尼亞文巴斯克文波斯文富拉文芬蘭文斐濟文法羅文法文西弗里西亞文愛爾蘭文蘇格蘭蓋爾文加利西亞文瓜拉" + + "尼文古吉拉特文曼島文豪撒文希伯來文北印度文西里莫圖土文克羅埃西亞文海地文匈牙利文亞美尼亞文赫雷羅文國際文印尼文國際文(E)伊布文四川" + + "彝文依奴皮維克文伊多文冰島文義大利文因紐特文日文爪哇文喬治亞文剛果文吉庫尤文廣亞馬文哈薩克文格陵蘭文高棉文坎那達文韓文卡努裡文喀什米" + + "爾文庫爾德文科米文康瓦耳文吉爾吉斯文拉丁文盧森堡文干達文林堡文林加拉文寮文立陶宛文魯巴加丹加文拉脫維亞文馬拉加什文馬紹爾文毛利文馬其" + + "頓文馬來亞拉姆文蒙古文馬拉地文馬來文馬爾他文緬甸文諾魯文北地畢列文尼泊爾文恩東加文荷蘭文耐諾斯克挪威文巴克摩挪威文南地畢列文納瓦霍文" + + "尼揚賈文奧克西坦文奧杰布瓦文奧羅莫文歐利亞文奧塞提文旁遮普文巴利文波蘭文普什圖文葡萄牙文蓋楚瓦文羅曼斯文隆迪文羅馬尼亞文俄文盧安達文" + + "梵文撒丁文信德文北方薩米文桑戈文僧伽羅文斯洛伐克文斯洛維尼亞文薩摩亞文塞內加爾文索馬利文阿爾巴尼亞文塞爾維亞文斯瓦特文塞索托文巽他文" + + "瑞典文史瓦希里文坦米爾文泰盧固文塔吉克文泰文提格利尼亞文土庫曼文突尼西亞文東加文土耳其文特松加文韃靼文大溪地文維吾爾文烏克蘭文烏都文" + + "烏茲別克文溫達文越南文沃拉普克文瓦隆文沃洛夫文科薩文意第緒文約魯巴文壯文中文祖魯文亞齊文阿僑利文阿當莫文阿迪各文突尼斯阿拉伯文阿弗里" + + "希利文亞罕文阿伊努文阿卡德文阿拉巴馬文阿留申文蓋格阿爾巴尼亞文南阿爾泰文古英文昂加文阿拉米文馬普切文阿拉奧納文阿拉帕霍文阿爾及利亞阿" + + "拉伯文阿拉瓦克文摩洛哥阿拉伯文埃及阿拉伯文阿蘇文美國手語阿斯圖里亞文科塔瓦文阿瓦文俾路支文峇里文巴伐利亞文巴薩文巴姆穆文巴塔克托巴文" + + "戈馬拉文貝扎文別姆巴文貝塔維文貝納文富特文巴達加文西俾路支文博傑普爾文比科爾文比尼文班亞爾文康姆文錫克錫卡文比什奴普萊利亞文巴赫蒂亞" + + "里文布拉杰文布拉維文博多文阿庫色文布里阿特文布吉斯文布魯文比林文梅敦巴文卡多文加勒比文卡尤加文阿燦文宿霧文奇加文奇布查文查加文處奇斯" + + "文馬里文契奴克文喬克托文奇佩瓦揚文柴羅基文沙伊安文索拉尼庫爾德文科普特文卡皮茲文克里米亞半島的土耳其文;克里米亞半島的塔塔爾文法語克" + + "里奧爾混合語卡舒布文達科他文達爾格瓦文台塔文德拉瓦文斯拉夫多格里布文丁卡文扎爾馬文多格來文下索布文中部杜順文杜亞拉文中古荷蘭文朱拉文" + + "迪尤拉文達薩文恩布文埃菲克文埃米利安文古埃及文艾卡朱克文埃蘭文中古英文中尤皮克文依汪都文埃斯特雷馬杜拉文芳族文菲律賓文托爾訥芬蘭文豐" + + "文卡真法文中古法文古法文法蘭克-普羅旺斯文北弗里西亞文東弗里西亞文弗留利文加族文加告茲文贛語加約文葛巴亞文索羅亞斯德教達里文吉茲文吉" + + "爾伯特群島文吉拉基文中古高地德文古高地日耳曼文孔卡尼文岡德文科隆達羅文哥德文格列博文古希臘文德文(瑞士)瓦尤文弗拉弗拉文古西文圭契文" + + "海達文客家話夏威夷文斐濟印地文希利蓋農文赫梯文孟文上索布文湘語胡帕文伊班文伊比比奧文伊洛闊文印古什文英格裏亞文牙買加克裏奧爾英文邏輯" + + "文恩格姆巴文馬恰美文猶太教-波斯文猶太阿拉伯文日德蘭文卡拉卡爾帕克文卡比爾文卡琴文卡捷文卡姆巴文卡威文卡巴爾達文卡念布文卡塔布文馬孔" + + "德文卡布威爾第文肯揚文科羅文坎剛文卡西文和闐文西桑海文科瓦文北紮紮其文卡庫文卡倫金文金邦杜文科米-彼爾米亞克文貢根文科斯雷恩文克佩列" + + "文卡拉柴-包爾卡爾文塞拉利昂克裏奧爾文基那來阿文卡累利阿文庫魯科文尚巴拉文巴菲亞文科隆文庫密克文庫特奈文拉迪諾文朗吉文拉亨達文蘭巴文" + + "列茲干文新共同語言利古里亞文利伏尼亞文拉科塔文倫巴底文芒戈文洛齊文北盧爾文拉特加萊文魯巴魯魯亞文路易塞諾文盧恩達文盧奧文盧晒文盧雅文" + + "文言文拉茲文馬都拉文馬法文馬加伊文邁蒂利文望加錫文曼丁哥文馬賽文馬巴文莫克沙文曼達文門德文梅魯文克里奧文(模里西斯)中古愛爾蘭文馬夸" + + "文美塔文米克馬克文米南卡堡文滿族文曼尼普裡文莫霍克文莫西文西馬裏文蒙當文多種語言克里克文米蘭德斯文馬爾尼裡文明打威文姆耶內文厄爾茲亞" + + "文馬贊德蘭文閩南語拿波里文納馬文低地德文尼瓦爾文尼亞斯文紐埃文阿沃那加文夸西奧文恩甘澎文諾蓋文古諾爾斯文諾維亞文曼德文字 (N’Ko" + + ")北索托文努埃爾文古尼瓦爾文尼揚韋齊文尼揚科萊文尼奧囉文尼茲馬文歐塞奇文鄂圖曼土耳其文潘加辛文巴列維文潘帕嘉文帕皮阿門托文帛琉文庇卡底文" + + "尼日利亞皮欽語賓夕法尼亞德文門諾低地德文古波斯文普法爾茨德文腓尼基文皮埃蒙特文旁狄希臘文波那貝文普魯士文古普羅旺斯文基切文欽博拉索海" + + "蘭蓋丘亞文拉賈斯坦諸文復活島文拉羅通加文羅馬格諾里文里菲亞諾文蘭博文吉普賽文羅圖馬島文盧森尼亞文羅維阿納文羅馬尼亞語系羅瓦文桑達韋文" + + "雅庫特文薩瑪利亞阿拉姆文薩布魯文撒撒克文散塔利文索拉什特拉文甘拜文桑古文西西里文蘇格蘭文薩丁尼亞-薩薩里文南庫爾德文塞訥卡文賽納文瑟" + + "里文瑟爾卡普文東桑海文古愛爾蘭文薩莫吉希亞文希爾哈文撣文阿拉伯文(查德)希達摩文下西利西亞文塞拉亞文南薩米文魯勒薩米文伊納裡薩米文斯" + + "科特薩米文索尼基文索格底亞納文蘇拉南東墎文塞雷爾文薩霍文沙特菲士蘭文蘇庫馬文蘇蘇文蘇美文葛摩文古敘利亞文敘利亞文西利西亞文圖盧文提姆" + + "文特索文泰雷諾文泰頓文蒂格雷文提夫文托克勞文查庫爾文克林貢文特林基特文塔里什文塔馬奇克文東加文(尼亞薩)托比辛文圖羅尤文太魯閣文特薩" + + "克尼恩文欽西安文穆斯林塔特文圖姆布卡文吐瓦魯文北桑海文土凡文塔馬齊格特文沃蒂艾克文烏加列文姆本杜文根語言瓦伊文威尼斯文維普森文西佛蘭" + + "德文美茵-法蘭克尼亞文沃提克文佛羅文溫舊文瓦瑟文瓦拉莫文瓦瑞文瓦紹文沃皮瑞文吳語卡爾梅克文明格列爾文索加文瑤文雅浦文洋卞文耶姆巴文奈" + + "恩加圖文粵語薩波特克文布列斯符號西蘭文澤納加文標準摩洛哥塔馬塞特文祖尼文無語言內容扎扎文現代標準阿拉伯文高地德文(瑞士)低地薩克遜文" + + "佛蘭芒文摩爾多瓦文塞爾維亞克羅埃西亞文史瓦希里文(剛果)簡體中文繁體中文", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0018, 0x0027, 0x0036, 0x003f, 0x004e, 0x005a, + 0x0066, 0x0072, 0x007e, 0x008a, 0x0099, 0x00a8, 0x00b7, 0x00c6, + 0x00d5, 0x00e1, 0x00ed, 0x00f3, 0x0102, 0x0111, 0x0123, 0x012c, + 0x0138, 0x0144, 0x014d, 0x0156, 0x0168, 0x0174, 0x0180, 0x0189, + 0x018f, 0x019b, 0x01a4, 0x01ad, 0x01b6, 0x01bc, 0x01c5, 0x01d1, + 0x01e0, 0x01ec, 0x01f5, 0x01fe, 0x0207, 0x0210, 0x0219, 0x021f, + 0x0231, 0x023d, 0x024f, 0x025e, 0x026a, 0x0279, 0x0282, 0x028b, + 0x0297, 0x02a3, 0x02b5, 0x02c7, 0x02d0, 0x02dc, 0x02eb, 0x02f7, + // Entry 40 - 7F + 0x0300, 0x0309, 0x0319, 0x0322, 0x032e, 0x0340, 0x0349, 0x0352, + 0x035e, 0x036a, 0x0370, 0x0379, 0x0385, 0x038e, 0x039a, 0x03a6, + 0x03b2, 0x03be, 0x03c7, 0x03d3, 0x03d9, 0x03e5, 0x03f4, 0x0400, + 0x0409, 0x0415, 0x0424, 0x042d, 0x0439, 0x0442, 0x044b, 0x0457, + 0x045d, 0x0469, 0x047b, 0x048a, 0x0499, 0x04a5, 0x04ae, 0x04ba, + 0x04cc, 0x04d5, 0x04e1, 0x04ea, 0x04f6, 0x04ff, 0x0508, 0x0517, + 0x0523, 0x052f, 0x0538, 0x054d, 0x055f, 0x056e, 0x057a, 0x0586, + 0x0595, 0x05a4, 0x05b0, 0x05bc, 0x05c8, 0x05d4, 0x05dd, 0x05e6, + // Entry 80 - BF + 0x05f2, 0x05fe, 0x060a, 0x0616, 0x061f, 0x062e, 0x0634, 0x0640, + 0x0646, 0x064f, 0x0658, 0x0667, 0x0670, 0x067c, 0x068b, 0x069d, + 0x06a9, 0x06b8, 0x06c4, 0x06d6, 0x06e5, 0x06f1, 0x06fd, 0x0706, + 0x070f, 0x071e, 0x072a, 0x0736, 0x0742, 0x0748, 0x075a, 0x0766, + 0x0775, 0x077e, 0x078a, 0x0796, 0x079f, 0x07ab, 0x07b7, 0x07c3, + 0x07cc, 0x07db, 0x07e4, 0x07ed, 0x07fc, 0x0805, 0x0811, 0x081a, + 0x0826, 0x0832, 0x0838, 0x083e, 0x0847, 0x0850, 0x085c, 0x0868, + 0x0874, 0x0889, 0x089b, 0x08a4, 0x08b0, 0x08bc, 0x08cb, 0x08d7, + // Entry C0 - FF + 0x08ef, 0x08fe, 0x0907, 0x0910, 0x091c, 0x0928, 0x0937, 0x0946, + 0x0961, 0x0961, 0x0970, 0x0985, 0x0997, 0x09a0, 0x09ac, 0x09be, + 0x09ca, 0x09d3, 0x09df, 0x09e8, 0x09f7, 0x0a00, 0x0a0c, 0x0a1e, + 0x0a2a, 0x0a33, 0x0a3f, 0x0a4b, 0x0a54, 0x0a5d, 0x0a69, 0x0a78, + 0x0a87, 0x0a93, 0x0a9c, 0x0aa8, 0x0ab1, 0x0ac0, 0x0ad8, 0x0aea, + 0x0af6, 0x0b02, 0x0b0b, 0x0b17, 0x0b26, 0x0b32, 0x0b3b, 0x0b44, + 0x0b50, 0x0b59, 0x0b65, 0x0b71, 0x0b7a, 0x0b83, 0x0b8c, 0x0b98, + 0x0ba1, 0x0bad, 0x0bb6, 0x0bc2, 0x0bce, 0x0bdd, 0x0be9, 0x0bf5, + // Entry 100 - 13F + 0x0c0a, 0x0c16, 0x0c22, 0x0c67, 0x0c82, 0x0c8e, 0x0c9a, 0x0ca9, + 0x0cb2, 0x0cbe, 0x0cc7, 0x0cd6, 0x0cdf, 0x0ceb, 0x0cf7, 0x0d03, + 0x0d12, 0x0d1e, 0x0d2d, 0x0d36, 0x0d42, 0x0d4b, 0x0d54, 0x0d60, + 0x0d6f, 0x0d7b, 0x0d8a, 0x0d93, 0x0d9f, 0x0dae, 0x0dba, 0x0dd2, + 0x0ddb, 0x0de7, 0x0df9, 0x0dff, 0x0e0b, 0x0e17, 0x0e20, 0x0e39, + 0x0e4b, 0x0e5d, 0x0e69, 0x0e72, 0x0e7e, 0x0e84, 0x0e8d, 0x0e99, + 0x0eb4, 0x0ebd, 0x0ed2, 0x0ede, 0x0ef0, 0x0f05, 0x0f11, 0x0f1a, + 0x0f29, 0x0f32, 0x0f3e, 0x0f4a, 0x0f5c, 0x0f65, 0x0f74, 0x0f7d, + // Entry 140 - 17F + 0x0f86, 0x0f8f, 0x0f98, 0x0fa4, 0x0fb3, 0x0fc2, 0x0fcb, 0x0fd1, + 0x0fdd, 0x0fe3, 0x0fec, 0x0ff5, 0x1004, 0x1010, 0x101c, 0x102b, + 0x1046, 0x104f, 0x105e, 0x106a, 0x107d, 0x108f, 0x109b, 0x10b0, + 0x10bc, 0x10c5, 0x10ce, 0x10da, 0x10e3, 0x10f2, 0x10fe, 0x110a, + 0x1116, 0x1128, 0x1131, 0x113a, 0x1143, 0x114c, 0x1155, 0x1161, + 0x116a, 0x1179, 0x1182, 0x118e, 0x119a, 0x11b3, 0x11bc, 0x11cb, + 0x11d7, 0x11f0, 0x120b, 0x121a, 0x1229, 0x1235, 0x1241, 0x124d, + 0x1256, 0x1262, 0x126e, 0x127a, 0x1283, 0x128f, 0x1298, 0x12a4, + // Entry 180 - 1BF + 0x12b3, 0x12c2, 0x12d1, 0x12dd, 0x12e9, 0x12f2, 0x12fb, 0x1307, + 0x1316, 0x1328, 0x1337, 0x1343, 0x134c, 0x1355, 0x135e, 0x1367, + 0x1370, 0x137c, 0x1385, 0x1391, 0x139d, 0x13a9, 0x13b5, 0x13be, + 0x13c7, 0x13d3, 0x13dc, 0x13e5, 0x13ee, 0x140c, 0x141e, 0x1427, + 0x1430, 0x143f, 0x144e, 0x1457, 0x1466, 0x1472, 0x147b, 0x1487, + 0x1490, 0x149c, 0x14a8, 0x14b7, 0x14c6, 0x14d2, 0x14de, 0x14ed, + 0x14fc, 0x1505, 0x1511, 0x151a, 0x1526, 0x1532, 0x153e, 0x1547, + 0x1556, 0x1562, 0x156e, 0x1577, 0x1586, 0x1592, 0x15a7, 0x15b3, + // Entry 1C0 - 1FF + 0x15bf, 0x15ce, 0x15dd, 0x15ec, 0x15f8, 0x1604, 0x1610, 0x1625, + 0x1631, 0x163d, 0x1649, 0x165b, 0x1664, 0x1670, 0x1685, 0x169a, + 0x16ac, 0x16b8, 0x16ca, 0x16d6, 0x16e5, 0x16f4, 0x1700, 0x170c, + 0x171e, 0x1727, 0x1745, 0x1757, 0x1763, 0x1772, 0x1784, 0x1793, + 0x179c, 0x17a8, 0x17b7, 0x17c6, 0x17d5, 0x17e7, 0x17f0, 0x17fc, + 0x1808, 0x1820, 0x182c, 0x1838, 0x1844, 0x1856, 0x185f, 0x1868, + 0x1874, 0x1880, 0x1899, 0x18a8, 0x18b4, 0x18bd, 0x18c6, 0x18d5, + 0x18e1, 0x18f0, 0x1902, 0x190e, 0x1914, 0x192c, 0x1938, 0x194a, + // Entry 200 - 23F + 0x1956, 0x1962, 0x1971, 0x1983, 0x1995, 0x19a1, 0x19b3, 0x19c5, + 0x19d1, 0x19da, 0x19ec, 0x19f8, 0x1a01, 0x1a0a, 0x1a13, 0x1a22, + 0x1a2e, 0x1a3d, 0x1a46, 0x1a4f, 0x1a58, 0x1a64, 0x1a6d, 0x1a79, + 0x1a82, 0x1a8e, 0x1a9a, 0x1aa6, 0x1ab5, 0x1ac1, 0x1ad0, 0x1ae8, + 0x1af4, 0x1b00, 0x1b0c, 0x1b1e, 0x1b2a, 0x1b3c, 0x1b4b, 0x1b57, + 0x1b63, 0x1b6c, 0x1b7e, 0x1b8d, 0x1b99, 0x1ba5, 0x1bae, 0x1bb7, + 0x1bc3, 0x1bcf, 0x1bde, 0x1bf7, 0x1c03, 0x1c0c, 0x1c15, 0x1c1e, + 0x1c2a, 0x1c33, 0x1c3c, 0x1c48, 0x1c4e, 0x1c5d, 0x1c6c, 0x1c75, + // Entry 240 - 27F + 0x1c7b, 0x1c84, 0x1c8d, 0x1c99, 0x1ca8, 0x1cae, 0x1cbd, 0x1ccc, + 0x1cd5, 0x1ce1, 0x1cff, 0x1d08, 0x1d17, 0x1d20, 0x1d38, 0x1d38, + 0x1d38, 0x1d50, 0x1d50, 0x1d50, 0x1d50, 0x1d50, 0x1d50, 0x1d50, + 0x1d50, 0x1d50, 0x1d50, 0x1d50, 0x1d62, 0x1d6e, 0x1d6e, 0x1d6e, + 0x1d7d, 0x1d9b, 0x1db6, 0x1dc2, 0x1dce, + }, + }, + { // zgh + "ⵜⴰⴽⴰⵏⵜⵜⴰⵎⵀⴰⵔⵉⵜⵜⴰⵄⵔⴰⴱⵜⵜⴰⴱⵉⵍⴰⵔⵓⵙⵜⵜⴰⴱⵍⵖⴰⵔⵉⵜⵜⴰⴱⵏⵖⴰⵍⵉⵜⵜⴰⵜⵛⵉⴽⵉⵜⵜⴰⵍⵉⵎⴰⵏⵜⵜⴰⴳⵔⵉⴳⵉ" + + "ⵜⵜⴰⵏⴳⵍⵉⵣⵜⵜⴰⵙⴱⵏⵢⵓⵍⵉⵜⵜⴰⴼⵓⵔⵙⵉⵜⵜⴰⴼⵔⴰⵏⵙⵉⵙⵜⵜⴰⵀⴰⵡⵙⴰⵜⵜⴰⵀⵉⵏⴷⵉⵜⵜⴰⵀⵏⵖⴰⵔⵉⵜⵜⴰⵏⴷ" + + "ⵓⵏⵉⵙⵉⵜⵜⵉⴳⴱⵓⵜⵜⴰⵟⴰⵍⵢⴰⵏⵜⵜⴰⵊⴰⴱⴱⵓⵏⵉⵜⵜⴰⵊⴰⴱⴰⵏⵉⵜⵜⴰⵅⵎⵉⵔⵜⵜⴰⴽⵓⵔⵉⵜⵜⴰⵎⴰⵍⴰⵡⵉⵜⵜⴰⴱ" + + "ⵉⵔⵎⴰⵏⵉⵜⵜⴰⵏⵉⴱⴰⵍⵉⵜⵜⴰⵀⵓⵍⴰⵏⴷⵉⵜⵜⴰⴱⵏⵊⴰⴱⵉⵜⵜⴰⴱⵓⵍⵓⵏⵉⵜⵜⴰⴱⵕⵟⵇⵉⵣⵜⵜⴰⵔⵓⵎⴰⵏⵉⵜⵜⴰⵔⵓ" + + "ⵙⵉⵜⵜⴰⵔⵓⵡⴰⵏⴷⵉⵜⵜⴰⵙⵓⵎⴰⵍⵉⵜⵜⴰⵙⵡⵉⴷⵉⵜⵜⴰⵜⴰⵎⵉⵍⵜⵜⴰⵜⴰⵢⵍⴰⵏⴷⵉⵜⵜⴰⵜⵓⵔⴽⵉⵜⵜⵓⴽⵔⴰⵏⵉⵜⵜ" + + "ⵓⵔⴷⵓⵜⵜⴰⴱⵉⵜⵏⴰⵎⵉⵜⵜⴰⵢⵔⵓⴱⴰⵜⵜⴰⵛⵉⵏⵡⵉⵜⵜⴰⵣⵓⵍⵓⵜⵜⴰⵎⴰⵣⵉⵖⵜ", + []uint16{ // 587 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x002a, 0x002a, + 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x005d, 0x0078, + 0x0078, 0x0078, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, + 0x0093, 0x0093, 0x0093, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00db, 0x00f3, 0x00f3, 0x0111, + 0x0111, 0x0111, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0147, + 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x015f, + 0x015f, 0x0177, 0x0177, 0x0177, 0x0177, 0x0192, 0x0192, 0x0192, + // Entry 40 - 7F + 0x0192, 0x01b0, 0x01b0, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01dd, 0x01dd, 0x01fb, 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, + 0x0216, 0x0216, 0x022b, 0x022b, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x025b, 0x025b, 0x0279, 0x0279, 0x0279, + 0x0294, 0x0294, 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02b2, + 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02cd, 0x02cd, 0x02e8, + // Entry 80 - BF + 0x02e8, 0x0303, 0x0303, 0x0303, 0x0303, 0x031e, 0x0333, 0x0351, + 0x0351, 0x0351, 0x0351, 0x0351, 0x0351, 0x0351, 0x0351, 0x0351, + 0x0351, 0x0351, 0x036c, 0x036c, 0x036c, 0x036c, 0x036c, 0x036c, + 0x0384, 0x0384, 0x039c, 0x039c, 0x039c, 0x03bd, 0x03bd, 0x03bd, + 0x03bd, 0x03bd, 0x03d5, 0x03d5, 0x03d5, 0x03d5, 0x03d5, 0x03ed, + 0x03ff, 0x03ff, 0x03ff, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x041d, 0x0435, 0x0435, 0x044d, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry C0 - FF + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 100 - 13F + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 140 - 17F + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 180 - 1BF + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 1C0 - 1FF + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 200 - 23F + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + // Entry 240 - 27F + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, + 0x0462, 0x0462, 0x047a, + }, + }, + { // zh + zhLangStr, + zhLangIdx, + }, + { // zh-Hant + zhHantLangStr, + zhHantLangIdx, + }, + { // zh-Hant-HK + "阿法爾文阿塞拜疆文巴什基爾文布里多尼文波斯尼亞文加泰隆尼亞文世界語加里西亞文印度文克羅地亞文意大利文格魯吉亞文坎納達文老撾文馬拉加斯文馬拉雅拉姆" + + "文馬耳他文奧里雅文盧旺達文信德語斯洛文尼亞文修納文索馬里文泰米爾文湯加文烏爾都文克里米亞韃靼文塞舌爾克里奧爾法文斯拉夫文吉爾伯特文瑞" + + "士德文苗語猶太波斯文扎扎其文克裡奧爾文盧歐文毛里裘斯克里奧爾文西非書面語言(N’ko)尼日利亞皮欽文阿羅馬尼亞語瓦爾皮里文廣東話摩洛" + + "哥標準塔馬齊格特文南阿塞拜疆文奧地利德文瑞士德語澳洲英文加拿大英文英國英文美國英文拉丁美洲西班牙文歐洲西班牙文墨西哥西班牙文加拿大法" + + "文瑞士法文荷蘭低地德文比利時荷蘭文巴西葡萄牙語歐洲葡萄牙文摩爾多瓦羅馬尼亞文剛果史瓦希里文", + []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x001b, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x0039, 0x0048, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x007b, 0x007b, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + // Entry 40 - 7F + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x0096, 0x0096, 0x0096, 0x0096, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00c9, 0x00c9, 0x00c9, 0x00c9, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + // Entry 80 - BF + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00ff, + 0x00ff, 0x00ff, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x011a, + 0x011a, 0x0123, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, + 0x012f, 0x012f, 0x013b, 0x013b, 0x013b, 0x013b, 0x013b, 0x013b, + 0x013b, 0x0144, 0x0144, 0x0144, 0x0144, 0x0144, 0x0144, 0x0144, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + // Entry C0 - FF + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + // Entry 100 - 13F + 0x0150, 0x0150, 0x0150, 0x0165, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x018c, 0x018c, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + // Entry 140 - 17F + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01ad, + 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, + 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, + 0x01c8, 0x01c8, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + // Entry 180 - 1BF + 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01e0, 0x01e0, 0x01e0, 0x01e0, + 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, + 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01fb, 0x01fb, 0x01fb, + 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, + 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, + 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, + 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x0219, 0x0219, + // Entry 1C0 - 1FF + 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, + 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + // Entry 200 - 23F + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0240, 0x0240, 0x0240, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, + // Entry 240 - 27F + 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x0258, 0x0258, 0x0258, + 0x0258, 0x0258, 0x0279, 0x0279, 0x0279, 0x0279, 0x0279, 0x028b, + 0x029a, 0x02a6, 0x02b2, 0x02c1, 0x02cd, 0x02d9, 0x02f1, 0x0303, + 0x0318, 0x0318, 0x0327, 0x0333, 0x0345, 0x0357, 0x0369, 0x037b, + 0x0396, 0x0396, 0x03ab, + }, + }, + { // zu + zuLangStr, + zuLangIdx, + }, +} + +const afLangStr string = "" + // Size: 3015 bytes + "AfarAbkasiesAfrikaansAkanAmhariesAragoneesArabiesAssameesAvariesAymaraAz" + + "erbeidjansBaskirBelo-RussiesBulgaarsBislamaBambaraBengaalsTibettaansBret" + + "onsBosniesKatalaansTsjetsjenChamorroKorsikaansTsjeggiesKerkslawiesChuvas" + + "hWalliesDeensDuitsDivehiDzongkhaEweGrieksEngelsEsperantoSpaansEstniesBas" + + "kiesPersiesFulahFinsFidjiaansFaroeesFransWes-FriesIersSkotse GalliesGali" + + "siesGuaraniGoedjaratiManxHausaHebreeusHindiKroatiesHaïtiaansHongaarsArme" + + "ensHereroInterlinguaIndonesiesInterlingueIgboSichuan YiIdoYslandsItaliaa" + + "nsInnuïtiesJapanneesJavaansGeorgiesKongoleesKikuyuKuanyamaKazaksKalaalli" + + "sutKhmerKannadaKoreaansKanuriKasjmirsKoerdiesKomiKorniesKirgisiesLatynLu" + + "xemburgsGandaLimburgsLingaalsLaoLitausLuba-KatangaLettiesMalgassiesMarsh" + + "alleesMaoriMasedoniesMalabaarsMongoolsMarathiMaleisMalteesBirmaansNauruN" + + "oord-NdebeleNepaleesNdongaNederlandsNoorweegse NynorskNoorse BokmålSuid-" + + "NdebeleNavajoNyanjaOksitaansOromoOriyaOssetiesPandjabiPoolsPasjtoPortuge" + + "esQuechuaReto-RomaansRundiRoemeensRussiesRwandeesSanskritSardiniesSindhi" + + "Noord-SamiSangoSinhalaSlowaaksSloweensSamoaansShonaSomaliesAlbaneesSerwi" + + "esSwaziSuid-SothoSundaneesSweedsSwahiliTamilTeloegoeTadzjieksThaiTigriny" + + "aTurkmeensTswanaTongaansTurksTsongaTataarsTahitiesUighurOekraïensOerdoeO" + + "ezbeeksVendaViëtnameesVolapükWalloonWolofXhosaJiddisjYorubaSjineesZoeloe" + + "AsjineesAkoliAdangmeAdygheAghemAinuAleutSuid-AltaiAngikaArameesMapucheAr" + + "apahoAsuAsturiesAwadhiBalineesBasaaBembaBenaWes-BalochiBhojpuriBiniSiksi" + + "kaBodoBugineesBlinCebuanoSjigaChuukeesMariChoctawCherokeesCheyenneesSora" + + "ni KoerdiesKoptiesSeselwa FranskreoolsDakotaansDakotaTaitaDogribZarmaLae" + + " SorbiesDualaJola-FonyiDazagaEmbuEfikAntieke EgiptiesEkajukEwondoFilippy" + + "nsFonFriuliaansGaaGagauzGeezGilberteesGorontaloGotiesAntieke GrieksSwits" + + "erse DuitsGusiiGwichʼinHawaiiesHiligaynonHetitiesHmongHoog-SorbiesHupaIb" + + "aneesIbibioIlokoIngushLojbanNgombaMachameKabyleKachinJjuKambaKabardiaans" + + "TyapMakondeKabuverdianuKoroKhasiKoyra ChiiniKakoKalenjinKimbunduKomi-Per" + + "myaksKonkaniKpelleesKarachay-BalkarKareliesKurukhShambalaBafiaKeulsKumyk" + + "LadinoLangiLezghiesLakotaLoziNoord-LuriLuba-LuluaLundaLuoMizoLuyiaMadure" + + "esMagahiMaithiliMakasarMasaiMokshaMendeMeruMorisjenMakhuwa-MeettoMeta’Mi" + + "cmacMinangkabausManipuriMohawkMossiMundangVeelvuldige taleKreekMirandees" + + "ErzyaMasanderaniNeapolitaansNamaLae DuitsNewariNiasNiueanKwasioNgiemboon" + + "NogaiN’KoNoord-SothoNuerNyankolePangasinanPampangaPapiamentoPalauaansNig" + + "eriese PidginFenisiesPruisiesK’iche’RapanuiRarotongaansRomboAromaniesRwa" + + "SandaweesSakhaansSamburuSantaliesNgambaySanguSisiliaansSkotsSuid-Koerdie" + + "sSenaKoyraboro SenniTachelhitShanSuid-SamiLule SamiInari SamiSkolt SamiS" + + "oninkeSranan TongoSahoSukumaComoraansSirieseTimneTesoTetoemTigreKlingonT" + + "ok PisinTarokoToemboekaTuvaluTasawaqTuvineesSentraal Atlas TamazightUdmu" + + "rtUmbunduRootVaiVunjoWalserWolayttaWarayWarlpiriKalmykSogaYangbenYembaKa" + + "ntoneesStandaard Marokkaanse TamazightZuniGeen linguistiese inhoudZazaMo" + + "derne Standaard ArabiesSwitserse hoog-DuitsSpaans (Suid-Amerika)Nedersak" + + "siesVlaamsMoldawiesSerwo-KroatiesSwahili (Kongo)" + +var afLangIdx = []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000c, 0x000c, 0x0015, 0x0019, 0x0021, 0x002a, + 0x0031, 0x0039, 0x0040, 0x0046, 0x0052, 0x0058, 0x0064, 0x006c, + 0x0073, 0x007a, 0x0082, 0x008c, 0x0093, 0x009a, 0x00a3, 0x00ac, + 0x00b4, 0x00be, 0x00be, 0x00c7, 0x00d2, 0x00d9, 0x00e0, 0x00e5, + 0x00ea, 0x00f0, 0x00f8, 0x00fb, 0x0101, 0x0107, 0x0110, 0x0116, + 0x011d, 0x0124, 0x012b, 0x0130, 0x0134, 0x013d, 0x0144, 0x0149, + 0x0152, 0x0156, 0x0164, 0x016c, 0x0173, 0x017d, 0x0181, 0x0186, + 0x018e, 0x0193, 0x0193, 0x019b, 0x01a5, 0x01ad, 0x01b4, 0x01ba, + // Entry 40 - 7F + 0x01c5, 0x01cf, 0x01da, 0x01de, 0x01e8, 0x01e8, 0x01eb, 0x01f2, + 0x01fb, 0x0205, 0x020e, 0x0215, 0x021d, 0x0226, 0x022c, 0x0234, + 0x023a, 0x0245, 0x024a, 0x0251, 0x0259, 0x025f, 0x0267, 0x026f, + 0x0273, 0x027a, 0x0283, 0x0288, 0x0292, 0x0297, 0x029f, 0x02a7, + 0x02aa, 0x02b0, 0x02bc, 0x02c3, 0x02cd, 0x02d8, 0x02dd, 0x02e7, + 0x02f0, 0x02f8, 0x02ff, 0x0305, 0x030c, 0x0314, 0x0319, 0x0326, + 0x032e, 0x0334, 0x033e, 0x0350, 0x035e, 0x036a, 0x0370, 0x0376, + 0x037f, 0x037f, 0x0384, 0x0389, 0x0391, 0x0399, 0x0399, 0x039e, + // Entry 80 - BF + 0x03a4, 0x03ad, 0x03b4, 0x03c0, 0x03c5, 0x03cd, 0x03d4, 0x03dc, + 0x03e4, 0x03ed, 0x03f3, 0x03fd, 0x0402, 0x0409, 0x0411, 0x0419, + 0x0421, 0x0426, 0x042e, 0x0436, 0x043d, 0x0442, 0x044c, 0x0455, + 0x045b, 0x0462, 0x0467, 0x046f, 0x0478, 0x047c, 0x0484, 0x048d, + 0x0493, 0x049b, 0x04a0, 0x04a6, 0x04ad, 0x04b5, 0x04bb, 0x04c5, + 0x04cb, 0x04d3, 0x04d8, 0x04e3, 0x04eb, 0x04f2, 0x04f7, 0x04fc, + 0x0503, 0x0509, 0x0509, 0x0510, 0x0516, 0x051e, 0x0523, 0x052a, + 0x0530, 0x0530, 0x0530, 0x0535, 0x0539, 0x0539, 0x0539, 0x053e, + // Entry C0 - FF + 0x053e, 0x0548, 0x0548, 0x054e, 0x0555, 0x055c, 0x055c, 0x0563, + 0x0563, 0x0563, 0x0563, 0x0563, 0x0563, 0x0566, 0x0566, 0x056e, + 0x056e, 0x0574, 0x0574, 0x057c, 0x057c, 0x0581, 0x0581, 0x0581, + 0x0581, 0x0581, 0x0586, 0x0586, 0x058a, 0x058a, 0x058a, 0x0595, + 0x059d, 0x059d, 0x05a1, 0x05a1, 0x05a1, 0x05a8, 0x05a8, 0x05a8, + 0x05a8, 0x05a8, 0x05ac, 0x05ac, 0x05ac, 0x05b4, 0x05b4, 0x05b8, + 0x05b8, 0x05b8, 0x05b8, 0x05b8, 0x05b8, 0x05bf, 0x05c4, 0x05c4, + 0x05c4, 0x05cc, 0x05d0, 0x05d0, 0x05d7, 0x05d7, 0x05e0, 0x05ea, + // Entry 100 - 13F + 0x05f9, 0x0600, 0x0600, 0x0600, 0x0614, 0x0614, 0x061d, 0x0623, + 0x0628, 0x0628, 0x0628, 0x062e, 0x062e, 0x0633, 0x0633, 0x063e, + 0x063e, 0x0643, 0x0643, 0x064d, 0x064d, 0x0653, 0x0657, 0x065b, + 0x065b, 0x066b, 0x0671, 0x0671, 0x0671, 0x0671, 0x0677, 0x0677, + 0x0677, 0x0680, 0x0680, 0x0683, 0x0683, 0x0683, 0x0683, 0x0683, + 0x0683, 0x0683, 0x068d, 0x0690, 0x0696, 0x0696, 0x0696, 0x0696, + 0x0696, 0x069a, 0x06a4, 0x06a4, 0x06a4, 0x06a4, 0x06a4, 0x06a4, + 0x06ad, 0x06b3, 0x06b3, 0x06c1, 0x06d0, 0x06d0, 0x06d0, 0x06d5, + // Entry 140 - 17F + 0x06de, 0x06de, 0x06de, 0x06e6, 0x06e6, 0x06f0, 0x06f8, 0x06fd, + 0x0709, 0x0709, 0x070d, 0x0714, 0x071a, 0x071f, 0x0725, 0x0725, + 0x0725, 0x072b, 0x0731, 0x0738, 0x0738, 0x0738, 0x0738, 0x0738, + 0x073e, 0x0744, 0x0747, 0x074c, 0x074c, 0x0757, 0x0757, 0x075b, + 0x0762, 0x076e, 0x076e, 0x0772, 0x0772, 0x0777, 0x0777, 0x0783, + 0x0783, 0x0783, 0x0787, 0x078f, 0x0797, 0x07a4, 0x07ab, 0x07ab, + 0x07b3, 0x07c2, 0x07c2, 0x07c2, 0x07ca, 0x07d0, 0x07d8, 0x07dd, + 0x07e2, 0x07e7, 0x07e7, 0x07ed, 0x07f2, 0x07f2, 0x07f2, 0x07fa, + // Entry 180 - 1BF + 0x07fa, 0x07fa, 0x07fa, 0x0800, 0x0800, 0x0800, 0x0804, 0x080e, + 0x080e, 0x0818, 0x0818, 0x081d, 0x0820, 0x0824, 0x0829, 0x0829, + 0x0829, 0x0831, 0x0831, 0x0837, 0x083f, 0x0846, 0x0846, 0x084b, + 0x084b, 0x0851, 0x0851, 0x0856, 0x085a, 0x0862, 0x0862, 0x0870, + 0x0877, 0x087d, 0x0889, 0x0889, 0x0891, 0x0897, 0x089c, 0x089c, + 0x08a3, 0x08b3, 0x08b8, 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c6, + 0x08d1, 0x08d1, 0x08dd, 0x08e1, 0x08ea, 0x08f0, 0x08f4, 0x08fa, + 0x08fa, 0x0900, 0x0909, 0x090e, 0x090e, 0x090e, 0x0914, 0x091f, + // Entry 1C0 - 1FF + 0x0923, 0x0923, 0x0923, 0x092b, 0x092b, 0x092b, 0x092b, 0x092b, + 0x0935, 0x0935, 0x093d, 0x0947, 0x0950, 0x0950, 0x0960, 0x0960, + 0x0960, 0x0960, 0x0960, 0x0968, 0x0968, 0x0968, 0x0968, 0x0970, + 0x0970, 0x097b, 0x097b, 0x097b, 0x0982, 0x098e, 0x098e, 0x098e, + 0x0993, 0x0993, 0x0993, 0x0993, 0x0993, 0x099c, 0x099f, 0x09a8, + 0x09b0, 0x09b0, 0x09b7, 0x09b7, 0x09c0, 0x09c0, 0x09c7, 0x09cc, + 0x09d6, 0x09db, 0x09db, 0x09e8, 0x09e8, 0x09ec, 0x09ec, 0x09ec, + 0x09fb, 0x09fb, 0x09fb, 0x0a04, 0x0a08, 0x0a08, 0x0a08, 0x0a08, + // Entry 200 - 23F + 0x0a08, 0x0a11, 0x0a1a, 0x0a24, 0x0a2e, 0x0a35, 0x0a35, 0x0a41, + 0x0a41, 0x0a45, 0x0a45, 0x0a4b, 0x0a4b, 0x0a4b, 0x0a54, 0x0a54, + 0x0a5b, 0x0a5b, 0x0a5b, 0x0a60, 0x0a64, 0x0a64, 0x0a6a, 0x0a6f, + 0x0a6f, 0x0a6f, 0x0a6f, 0x0a76, 0x0a76, 0x0a76, 0x0a76, 0x0a76, + 0x0a7f, 0x0a7f, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a8e, 0x0a94, + 0x0a9b, 0x0aa3, 0x0abb, 0x0ac1, 0x0ac1, 0x0ac8, 0x0acc, 0x0acf, + 0x0acf, 0x0acf, 0x0acf, 0x0acf, 0x0acf, 0x0acf, 0x0ad4, 0x0ada, + 0x0ae2, 0x0ae7, 0x0ae7, 0x0aef, 0x0aef, 0x0af5, 0x0af5, 0x0af9, + // Entry 240 - 27F + 0x0af9, 0x0af9, 0x0b00, 0x0b05, 0x0b05, 0x0b0e, 0x0b0e, 0x0b0e, + 0x0b0e, 0x0b0e, 0x0b2d, 0x0b31, 0x0b49, 0x0b4d, 0x0b66, 0x0b66, + 0x0b66, 0x0b7a, 0x0b7a, 0x0b7a, 0x0b7a, 0x0b7a, 0x0b8f, 0x0b8f, + 0x0b8f, 0x0b8f, 0x0b8f, 0x0b8f, 0x0b9b, 0x0ba1, 0x0ba1, 0x0ba1, + 0x0baa, 0x0bb8, 0x0bc7, +} // Size: 1246 bytes + +const amLangStr string = "" + // Size: 6791 bytes + "አፋርኛአብሐዚኛአቬስታንአፍሪካንኛአካንኛአማርኛአራጎንስዓረብኛአሳሜዛዊአቫሪክአያማርኛአዘርባጃንኛባስኪርኛቤላራሻኛቡልጋሪ" + + "ኛቢስላምኛባምባርኛቤንጋሊኛቲቤታንኛብሬቶንኛቦስኒያንኛካታላንኛችችንቻሞሮኮርሲካኛክሪቼክኛቸርች ስላቪክቹቫሽወልሽዴኒሽ" + + "ጀርመንዲቬህድዞንግኻኛኢዊግሪክኛእንግሊዝኛኤስፐራንቶስፓንሽኛኢስቶኒያንኛባስክኛፐርሺያኛፉላህፊኒሽፊጂኛፋሮኛፈረንሳይኛ" + + "የምዕራብ ፍሪስኛአይሪሽየስኮቲሽ ጌልክኛጋሊሺያጓራኒኛጉጃርቲኛማንክስኛሃውሳኛዕብራስጥሒንዱኛክሮሽያንኛሃይትኛሀንጋሪኛ" + + "አርመናዊሄሬሮኢንቴርሊንጓኢንዶኔዥኛእንተርሊንግወኢግቦኛሲቹንዪኛእኑፒያቅኛኢዶአይስላንድኛጣሊያንኛእኑክቲቱትኛጃፓንኛጃ" + + "ቫንኛጆርጂያንኮንጎኛኪኩዩኩንያማካዛክኛካላሊሱትኛክህመርኛካናዳኛኮሪያኛካኑሪካሽሚርኛኩርድሽኛኮሚኮርኒሽኪርጊዝኛላቲንኛ" + + "ሉክዘምበርገርኛጋንዳኛሊምቡርጊሽሊንጋላኛላኦስኛሉቴንያንኛሉባ ካታንጋላትቪያንማላጋስኛማርሻሌዝኛማኦሪኛማሴዶንኛማላያላ" + + "ምኛሞንጎላዊኛማራቲኛማላይኛማልቲስኛቡርማኛናኡሩሰሜን ንዴብሌኔፓሊኛንዶንጋደችየኖርዌይ ናይኖርስክየኖርዌይ ቦክማልደቡ" + + "ብ ንደቤሌናቫጆንያንጃኦኪታንኛኦሮሞኛኦዲያኛኦሴቲክፑንጃብኛፖሊሽኛፓሽቶኛፖርቹጋልኛኵቿኛሮማንሽሩንዲኛሮማኒያንራሽያኛኪ" + + "ንያርዋንድኛሳንስክሪትኛሳርዲንያንኛሲንድሂኛሰሜናዊ ሳሚሳንጎኛሲንሃልኛስሎቫክኛስሎቪኛሳሞአኛሾናኛሱማልኛአልባንያንኛሰ" + + "ርቢኛስዋቲኛደቡባዊ ሶቶሱዳንኛስዊድንኛስዋሂሊኛታሚልኛተሉጉኛታጂኪኛታይኛትግርኛቱርክሜንኛጽዋናዊኛቶንጋኛቱርክኛጾንጋኛ" + + "ታታርኛታሂታንኛኡዊግሁርኛዩክሬንኛኡርዱኛኡዝቤክኛቬንዳቪየትናምኛቮላፑክኛዋሎንዎሎፍኛዞሳኛይዲሽኛዮሩባዊኛዡዋንግኛቻይን" + + "ኛዙሉኛአቻይንኛአኮሊኛአዳንግሜአድይግሄአፍሪሂሊአገምአይኑአካዲያንአላባማአልዩትደቡባዊ አልታይአንጊካአራማይክማፑቼአራ" + + "ኦናአራፓሆየአልጄሪያ ዓረብኛአራዋክአሱየአሜሪካ የምልክት ቋንቋአውስትሪያንአዋድሂባሉቺባሊኔስባቫሪያንባሳባሙንባታካ " + + "ቶባቤጃቤምባቤታዊቤናባፉትባዳጋየምዕራብ ባሎቺቦጁሪቢኮልቢኒባንጃርሲክሲካቢሹንፑሪያባክህቲያሪብራጅብራሁዪቦዶአኮስቡሪያ" + + "ትቡጊኔዝቡሉብሊንካዶካሪብካዩጋአትሳምካቡዋኖቺጋኛቺብቻቻጋታይቹክስማሪቺኑክ ጃርጎንቾክታዋቺፔውያንቼሮኬኛችዬኔየሶራኒ " + + "ኩርድኛኮፕቲክካፒዝኖንክሪሚያን ተርኪሽሰሰላዊ ክሬኦሊ ፈረንሳይኛዳኮታዳርግዋታይታኛዳላዌርዶግሪብዲንካዛርማኛዶግሪየታ" + + "ችኛው ሰርቢያንኛሴንተራል ዱሰንዱዋላኛጆላ ፎንያኛድዩላዳዛጋኢቦኛኤፊክየጥንታዊ ግብጽኛኤካጁክሴንተራል ዩፒክኤዎንዶፊ" + + "ሊፒንኛፎንካጁን ፍሬንችአርፒታንፍሩሊያንጋጋጉዝኛጋን ቻይንኛግዕዝኛጅልበርትስጎሮንታሎየጥንታዊ ግሪክየስዊዝ ጀርመንጉ" + + "ስሊኛግዊቺንሃካ ቻይንኛሃዊያኛሂሊጋይኖንህሞንግየላይኛው ሶርቢያንኛዢያንግ ቻይንኛሁፓኢባንኢቢቦኢሎኮኢንጉሽሎጅባንንጎ" + + "ባኛማቻሜኛካብይልካቺንካጅካምባካባርዲያንታያፕማኮንዴካቡቨርዲያኑኮሮክሃሲኮይራ ቺኒካኮካለንጂንኪምቡንዱኮሚ ፔርምያክኮ" + + "ንካኒክፔሌካራቻይ-ባልካርካረሊኛኩሩክሻምባላባፊያኮሎኝያንኩማይክላዲኖላንጊሌዝጊያንላኮታሎዚኛሰሜናዊ ሉሪሉባ-ሉሏሉንዳ" + + "ሉኦሚዞሉዪያማዱረስማጋሂማይተሊማካሳርማሳይሞክሻሜንዴሜሩሞሪሲየኛማኩዋ ሜቶሜታሚክማክሚናንግካባኡማኒፑሪሞሃውክሞሲሙንዳ" + + "ንግባለብዙ ቋንቋዎችክሪክሚራንዴዝኛኤርዝያማዛንደራኒሚን ኛን ቻይንኛኒአፖሊታንናማየታችኛው ጀርመንነዋሪኒአስኒዩአንኛ" + + "ኦ ናጋክዋሲዮኒጊምቡንኖጋይንኮሰሜናዊ ሶቶኑዌርክላሲክ ኔዋሪኒያንኮልኛፓንጋሲናንኛፓምፓንጋፓፒአሜንቶፓላኡአንየናይጄሪ" + + "ያ ፒጂንፐሩሳንኛኪቼቺምቦራዞ ሃይላንድ ኩቹዋራፓኑኢራሮቶንጋሮምቦአሮማንያንርዋሳንዳዌሳክሃሳምቡሩሳንታሊንጋምባይሳንጉ" + + "ሲሲሊያንኛስኮትስደቡባዊ ኩርዲሽሴናኮይራቦሮ ሴኒታቼልሂትሻንቻዲያን ዓረብኛሲዳምኛደቡባዊ ሳሚሉሌ ሳሚኢናሪ ሳሚስኮል" + + "ት ሳሚሶኒንኬስራናን ቶንጎሳሆኛሱኩማኮሞሪያንክላሲክ ኔይራሲሪያክቲምኔቴሶቴተምትግረክሊንጎንኛቶክ ፒሲንታሮኮቱምቡካቱ" + + "ቫሉታሳዋቅቱቪንያንኛመካከለኛ አትላስ ታማዚግትኡድሙርትኡምቡንዱሩትቫይቩንጆዋልሰርወላይትኛዋራይዋርልፒሪዉ ቻይንኛካል" + + "ማይክሶጋያንግቤንኛየምባካንቶኒዝብሊስይምቦልስመደበኛ የሞሮኮ ታማዚግትዙኒቋንቋዊ ይዘት አይደለምዛዛዘመናዊ መደበኛ " + + "ዓረብኛየኦስትሪያ ጀርመንየስዊዝ ከፍተኛ ጀርመንኛየአውስትራሊያ እንግሊዝኛየካናዳ እንግሊዝኛየብሪቲሽ እንግሊዝኛየአ" + + "ሜሪካ እንግሊዝኛየላቲን አሜሪካ ስፓኒሽየአውሮፓ ስፓንሽኛየሜክሲኮ ስፓንሽኛየካናዳ ፈረንሳይኛየስዊዝ ፈረንሳይኛየታ" + + "ችኛው ሳክሰንፍሌሚሽየብራዚል ፖርቹጋልኛየአውሮፓ ፖርቹጋልኛሞልዳቪያንኛሰርቦ-ክሮኤሽያኛኮንጎ ስዋሂሊቀለል ያለ ቻይ" + + "ንኛባህላዊ ቻይንኛ" + +var amLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x001b, 0x002a, 0x003c, 0x0048, 0x0054, 0x0063, + 0x006f, 0x007e, 0x008a, 0x0099, 0x00ae, 0x00bd, 0x00cc, 0x00db, + 0x00ea, 0x00f9, 0x0108, 0x0117, 0x0126, 0x0138, 0x0147, 0x0150, + 0x0159, 0x0168, 0x016e, 0x0177, 0x018d, 0x0196, 0x019f, 0x01a8, + 0x01b4, 0x01bd, 0x01cf, 0x01d5, 0x01e1, 0x01f3, 0x0205, 0x0214, + 0x0229, 0x0235, 0x0244, 0x024d, 0x0256, 0x025f, 0x0268, 0x027a, + 0x0296, 0x02a2, 0x02be, 0x02ca, 0x02d6, 0x02e5, 0x02f4, 0x0300, + 0x030f, 0x031b, 0x031b, 0x032d, 0x0339, 0x0348, 0x0357, 0x0360, + // Entry 40 - 7F + 0x0375, 0x0387, 0x039f, 0x03ab, 0x03ba, 0x03cc, 0x03d2, 0x03e7, + 0x03f6, 0x040b, 0x0417, 0x0423, 0x0432, 0x043e, 0x0447, 0x0453, + 0x045f, 0x0471, 0x0480, 0x048c, 0x0498, 0x04a1, 0x04b0, 0x04bf, + 0x04c5, 0x04d1, 0x04e0, 0x04ec, 0x0507, 0x0513, 0x0525, 0x0534, + 0x0540, 0x0552, 0x0565, 0x0574, 0x0583, 0x0595, 0x05a1, 0x05b0, + 0x05c2, 0x05d4, 0x05e0, 0x05ec, 0x05fb, 0x0607, 0x0610, 0x0626, + 0x0632, 0x063e, 0x0644, 0x0666, 0x0682, 0x0698, 0x06a1, 0x06ad, + 0x06bc, 0x06bc, 0x06c8, 0x06d4, 0x06e0, 0x06ef, 0x06ef, 0x06fb, + // Entry 80 - BF + 0x0707, 0x0719, 0x0722, 0x072e, 0x073a, 0x0749, 0x0755, 0x076d, + 0x0782, 0x0797, 0x07a6, 0x07b9, 0x07c5, 0x07d4, 0x07e3, 0x07ef, + 0x07fb, 0x0804, 0x0810, 0x0825, 0x0831, 0x083d, 0x0850, 0x085c, + 0x086b, 0x087a, 0x0886, 0x0892, 0x089e, 0x08a7, 0x08b3, 0x08c5, + 0x08d4, 0x08e0, 0x08ec, 0x08f8, 0x0904, 0x0913, 0x0925, 0x0934, + 0x0940, 0x094f, 0x0958, 0x096a, 0x0979, 0x0982, 0x098e, 0x0997, + 0x09a3, 0x09b2, 0x09c1, 0x09cd, 0x09d6, 0x09e5, 0x09f1, 0x0a00, + 0x0a0f, 0x0a0f, 0x0a1e, 0x0a27, 0x0a30, 0x0a3f, 0x0a4b, 0x0a57, + // Entry C0 - FF + 0x0a57, 0x0a70, 0x0a70, 0x0a7c, 0x0a8b, 0x0a94, 0x0aa0, 0x0aac, + 0x0acb, 0x0acb, 0x0ad7, 0x0ad7, 0x0ad7, 0x0add, 0x0b06, 0x0b1b, + 0x0b1b, 0x0b27, 0x0b30, 0x0b3c, 0x0b4b, 0x0b51, 0x0b5a, 0x0b6a, + 0x0b6a, 0x0b70, 0x0b79, 0x0b82, 0x0b88, 0x0b91, 0x0b9a, 0x0bb3, + 0x0bbc, 0x0bc5, 0x0bcb, 0x0bd7, 0x0bd7, 0x0be3, 0x0bf5, 0x0c07, + 0x0c10, 0x0c1c, 0x0c22, 0x0c2b, 0x0c37, 0x0c43, 0x0c49, 0x0c52, + 0x0c52, 0x0c58, 0x0c61, 0x0c6a, 0x0c76, 0x0c82, 0x0c8b, 0x0c94, + 0x0ca0, 0x0ca9, 0x0caf, 0x0cc5, 0x0cd1, 0x0ce0, 0x0cec, 0x0cf5, + // Entry 100 - 13F + 0x0d0e, 0x0d1a, 0x0d29, 0x0d45, 0x0d71, 0x0d71, 0x0d7a, 0x0d86, + 0x0d92, 0x0d9e, 0x0d9e, 0x0daa, 0x0db3, 0x0dbf, 0x0dc8, 0x0dea, + 0x0e03, 0x0e0f, 0x0e0f, 0x0e22, 0x0e2b, 0x0e34, 0x0e3d, 0x0e46, + 0x0e46, 0x0e62, 0x0e6e, 0x0e6e, 0x0e6e, 0x0e87, 0x0e93, 0x0e93, + 0x0e93, 0x0ea2, 0x0ea2, 0x0ea8, 0x0ebe, 0x0ebe, 0x0ebe, 0x0ecd, + 0x0ecd, 0x0ecd, 0x0edc, 0x0edf, 0x0eeb, 0x0efe, 0x0efe, 0x0efe, + 0x0efe, 0x0f0a, 0x0f1c, 0x0f1c, 0x0f1c, 0x0f1c, 0x0f1c, 0x0f1c, + 0x0f2b, 0x0f2b, 0x0f2b, 0x0f44, 0x0f5d, 0x0f5d, 0x0f5d, 0x0f69, + // Entry 140 - 17F + 0x0f75, 0x0f75, 0x0f88, 0x0f94, 0x0f94, 0x0fa6, 0x0fa6, 0x0fb2, + 0x0fd4, 0x0fed, 0x0ff3, 0x0ffc, 0x1005, 0x100e, 0x101a, 0x101a, + 0x101a, 0x1026, 0x1032, 0x103e, 0x103e, 0x103e, 0x103e, 0x103e, + 0x104a, 0x1053, 0x1059, 0x1062, 0x1062, 0x1074, 0x1074, 0x107d, + 0x1089, 0x109e, 0x109e, 0x10a4, 0x10a4, 0x10ad, 0x10ad, 0x10bd, + 0x10bd, 0x10bd, 0x10c3, 0x10d2, 0x10e1, 0x10f7, 0x1103, 0x1103, + 0x110c, 0x1125, 0x1125, 0x1125, 0x1131, 0x113a, 0x1146, 0x114f, + 0x115e, 0x116a, 0x116a, 0x1173, 0x117c, 0x117c, 0x117c, 0x118b, + // Entry 180 - 1BF + 0x118b, 0x118b, 0x118b, 0x1194, 0x1194, 0x1194, 0x119d, 0x11b0, + 0x11b0, 0x11bd, 0x11bd, 0x11c6, 0x11cc, 0x11d2, 0x11db, 0x11db, + 0x11db, 0x11e7, 0x11e7, 0x11f0, 0x11fc, 0x1208, 0x1208, 0x1211, + 0x1211, 0x121a, 0x121a, 0x1223, 0x1229, 0x1238, 0x1238, 0x1248, + 0x124e, 0x125a, 0x126f, 0x126f, 0x127b, 0x1287, 0x128d, 0x128d, + 0x129c, 0x12b8, 0x12c1, 0x12d3, 0x12d3, 0x12d3, 0x12d3, 0x12df, + 0x12f1, 0x130b, 0x131d, 0x1323, 0x133f, 0x1348, 0x1351, 0x1360, + 0x136a, 0x1376, 0x1385, 0x138e, 0x138e, 0x138e, 0x1394, 0x13a7, + // Entry 1C0 - 1FF + 0x13b0, 0x13c6, 0x13c6, 0x13d8, 0x13d8, 0x13d8, 0x13d8, 0x13d8, + 0x13ed, 0x13ed, 0x13fc, 0x140e, 0x141d, 0x141d, 0x1439, 0x1439, + 0x1439, 0x1439, 0x1439, 0x1439, 0x1439, 0x1439, 0x1439, 0x1448, + 0x1448, 0x144e, 0x1477, 0x1477, 0x1483, 0x1492, 0x1492, 0x1492, + 0x149b, 0x149b, 0x149b, 0x149b, 0x149b, 0x14ad, 0x14b3, 0x14bf, + 0x14c8, 0x14c8, 0x14d4, 0x14d4, 0x14e0, 0x14e0, 0x14ef, 0x14f8, + 0x150a, 0x1516, 0x1516, 0x152f, 0x152f, 0x1535, 0x1535, 0x1535, + 0x154b, 0x154b, 0x154b, 0x155a, 0x1560, 0x1579, 0x1585, 0x1585, + // Entry 200 - 23F + 0x1585, 0x1598, 0x15a5, 0x15b5, 0x15c8, 0x15d4, 0x15d4, 0x15ea, + 0x15ea, 0x15f3, 0x15f3, 0x15fc, 0x15fc, 0x15fc, 0x160b, 0x1621, + 0x162d, 0x162d, 0x162d, 0x1636, 0x163c, 0x163c, 0x1645, 0x164e, + 0x164e, 0x164e, 0x164e, 0x1660, 0x1660, 0x1660, 0x1660, 0x1660, + 0x1670, 0x1670, 0x1679, 0x1679, 0x1679, 0x1679, 0x1685, 0x168e, + 0x169a, 0x16ac, 0x16d8, 0x16e7, 0x16e7, 0x16f6, 0x16fc, 0x1702, + 0x1702, 0x1702, 0x1702, 0x1702, 0x1702, 0x1702, 0x170b, 0x1717, + 0x1726, 0x172f, 0x172f, 0x173e, 0x174e, 0x175d, 0x175d, 0x1763, + // Entry 240 - 27F + 0x1763, 0x1763, 0x1775, 0x177e, 0x177e, 0x178d, 0x178d, 0x17a5, + 0x17a5, 0x17a5, 0x17ce, 0x17d4, 0x17fa, 0x1800, 0x1826, 0x1826, + 0x1845, 0x186e, 0x1899, 0x18b8, 0x18da, 0x18fc, 0x1922, 0x1941, + 0x1960, 0x1960, 0x197f, 0x199e, 0x19ba, 0x19c6, 0x19e8, 0x1a0a, + 0x1a1f, 0x1a3b, 0x1a51, 0x1a6e, 0x1a87, +} // Size: 1250 bytes + +const arLangStr string = "" + // Size: 10039 bytes + "الأفاريةالأبخازيةالأفستيةالأفريقانيةالأكانيةالأمهريةالأراغونيةالعربيةالأ" + + "ساميةالأواريةالأيماراالأذربيجانيةالباشكيريةالبيلاروسيةالبلغاريةالبيسلام" + + "يةالبامباراالبنغاليةالتبتيةالبريتونيةالبوسنيةالكتالانيةالشيشانيةالتشامو" + + "روالكورسيكيةالكرىالتشيكيةسلافية كنسيةالتشوفاشيالويلزيةالدانماركيةالألما" + + "نيةالمالديفيةالزونخايةالإيوياليونانيةالإنجليزيةالإسبرانتوالإسبانيةالإست" + + "ونيةلغة الباسكالفارسيةالفولانيةالفنلنديةالفيجيةالفارويةالفرنسيةالفريزيا" + + "نالأيرلنديةالغيلية الأسكتلنديةالجاليكيةالغوارانيةالغوجاراتيةالمنكيةالهو" + + "ساالعبريةالهنديةالهيري موتوالكرواتيةالكريولية الهايتيةالهنغاريةالأرميني" + + "ةالهيريرواللّغة الوسيطةالإندونيسيةالإنترلينجالإيجبوالسيتشيون ييالإينبيا" + + "كالإيدوالأيسلنديةالإيطاليةالإينكتيتتاليابانيةالجاويةالجورجيةالكونغوالكي" + + "كيوالكيونياماالكازاخستانيةالكالاليستالخميريةالكاناداالكوريةالكانيوريالك" + + "شميريةالكرديةالكوميالكورنيةالقيرغيزيةاللاتينيةاللكسمبورغيةالجانداالليمب" + + "رجيشيةاللينجالااللاويةالليتوانيةاللبا-كاتانجااللاتفيةالمالاجاشيةالمارشا" + + "ليةالماوريةالمقدونيةالمالايالاميةالمنغوليةالماراثيةالماليزيةالمالطيةالب" + + "ورميةالنوروالنديبيل الشماليةالنيباليةالندونجاالهولنديةالنرويجية نينورسك" + + "النرويجية بوكمالالنديبيل الجنوبيالنافاجوالنيانجاالأوكيتانيةالأوجيبواالأ" + + "وروميةاللغة الأوريةالأوسيتيكالبنجابيةالباليةالبولنديةالبشتونيةالبرتغالي" + + "ةالكويتشواالرومانشيةالرنديالرومانيةالروسيةالكينياروانداالسنسكريتيةالسرد" + + "ينيةالسنديةالسامي الشماليةالسانجوالسنهاليةالسلوفاكيةالسلوفانيةالساموائي" + + "ةالشوناالصوماليةالألبانيةالصربيةالسواتيالسوتو الجنوبيةالسوندانيةالسويدي" + + "ةالسواحليةالتاميليةالتيلوجوالطاجيكيةالتايلانديةالتغرينيةالتركمانيةالتسو" + + "انيةالتونغيةالتركيةالسونجاالتتريةالتاهيتيةالأويغوريةالأوكرانيةالأورديةا" + + "لأوزبكيةالفينداالفيتناميةلغة الفولابوكالولونيةالولوفيةالخوسااليديشيةالي" + + "وروبيةالزهيونجالصينيةالزولوالأتشينيزيةالأكوليةالأدانجميةالأديغةالأفريهي" + + "ليةالأغمالآينويةالأكاديةالأليوتيةالألطائية الجنوبيةالإنجليزية القديمةال" + + "أنجيكاالآراميةالمابودونغونيةالأراباهواللهجة النجديةالأراواكيةالآسوالأست" + + "ريةالأواديةالبلوشيةاللغة الباليةالباسابامنلغة الغومالاالبيجاالبيمبابينا" + + "لغة البافوتالبلوشية الغربيةالبهوجبوريةالبيكوليةالبينيةلغة الكومالسيكسيك" + + "يةالبراجيةالبودوأكوسالبرياتيةالبجينيزيةلغة البولوالبلينيةلغة الميدومباا" + + "لكادوالكاريبيةالكايوجيةالأتسامالسيبونيةتشيغاالتشيبشاالتشاجاتايالتشكيزية" + + "الماريالشينوك جارجونالشوكتوالشيباوايانالشيروكيالشايانالسورانية الكرديةا" + + "لقبطيةلغة تتار القرمالفرنسية الكريولية السيشيليةالكاشبايانالداكوتاالدار" + + "جواتيتاالديلويرالسلافيةالدوجريبالدنكاالزارميةالدوجريةصوربيا السفلىالديو" + + "لاالهولندية الوسطىجولا فونياالدايلاالقرعانيةإمبوالإفيكالمصرية القديمةال" + + "إكاجكالإمايتالإنجليزية الوسطىالإيوندوالفانجالفلبينيةالفونالفرنسية الوسط" + + "ىالفرنسية القديمةالفريزينية الشماليةالفريزينية الشرقيةالفريلايانالجاالغ" + + "اغوزالغان الصينيةالجايوالجبياالجعزيةلغة أهل جبل طارقالألمانية العليا ال" + + "وسطىالألمانية العليا القديمةالجنديالجورونتالوالقوطيةالجريبواليونانية ال" + + "قديمةالألمانية السويسريةالغيزيةغوتشنالهيداالهاكا الصينيةلغة أهل الهاواي" + + "الهيليجينونالحثيةالهمونجيةالصوربية العلياشيانغ الصينيةالهباالإيبانالإيب" + + "يبيويةالإيلوكوالإنجوشيةاللوجباننغومباالماتشاميةالفارسية اليهوديةالعربية" + + " اليهوديةالكارا-كالباكالقبيليةالكاتشينالجوالكامباالكويالكاباردايانكانمبو" + + "التايابيةماكوندهكابوفيرديانوالكوروالكازيةالخوتانيزكويرا تشينيلغة الكاكو" + + "كالينجينالكيمبندوكومي-بيرماياكالكونكانيةالكوسراينالكبيلالكاراتشاي-بالكا" + + "رالكاريليةالكوروخشامبالالغة البافيالغة الكولونيانالقموقيةالكتيناياللادي" + + "نولانجياللاهندااللامباالليزجيةلاكوتامنغولىاللوزياللرية الشماليةاللبا-لؤ" + + "لؤاللوسينواللوندااللوالميزولغة اللوياالمادريزالماجاالمايثيليالماكاسارال" + + "ماندينغالماسايماباالموكشاالماندارالميندالميروالمورسيانيةالأيرلندية الوس" + + "طىماخاوا-ميتوميتاالميكماكيونيةالمينانجكاباوالمانشوالمانيبوريةالموهوكالم" + + "وسيمندنجلغات متعددةالكريكالميرانديزالمارواريةالأرزيةالمازندرانيةمين-نان" + + " الصينيةالنابوليةلغة الناماالألمانية السفلىالنواريةالنياسالنيويكواسيولغة" + + " النجيمبونالنوجايالنورس القديمأنكوالسوتو الشماليةالنويرالنوارية التقليدي" + + "ةالنيامويزيالنيانكولالنيوروالنزيماالأوساجالتركية العثمانيةالبانجاسينانا" + + "لبهلويةالبامبانجاالبابيامينتوالبالوانالبدجنية النيجيريةالفارسية القديمة" + + "الفينيقيةالبوهنبيايانالبروسياويةالبروفانسية القديمةكيشيالراجاسثانيةالرا" + + "بانيالراروتونجانيالرومبوالغجريةالأرومانيانالرواالسانداويالساخيةالآرامية" + + " السامريةسامبوروالساساكالسانتالينامبيسانغوالصقليةالأسكتلنديةالكردية الجن" + + "وبيةالسنيكاسيناالسيلكبكويرابورو سينيالأيرلندية القديمةتشلحيتالشانالعربي" + + "ة التشاديةالسيداموالسامي الجنوبياللول ساميالإيناري ساميالسكولت ساميالسو" + + "نينكالسوجدينالسرانان تونجوالسررلغة الساهوالسوكوماالسوسوالسوماريةالقمرية" + + "سريانية تقليديةالسريانيةالتيمنتيسوالتيرينوالتيتمالتيغريةالتيفالتوكيلاوا" + + "لكلينجونالتلينغيتيةالتاماشيكتونجا - نياساالتوك بيسينلغة التاروكوالتسيمش" + + "يانالتامبوكاالتوفالوتاساواقالتوفيةالأمازيغية وسط الأطلسالأدمرتاليجاريتي" + + "كالأمبندوالجذرالفايالفوتيكالفونجوالوالسرالولاياتاالوارايالواشووارلبيريا" + + "لوو الصينيةالكالميكالسوغاالياواليابيزيانجبنيمباالكَنْتُونيةالزابوتيكرمو" + + "ز المعايير الأساسيةالزيناجاالتمازيغية المغربية القياسيةالزونيةبدون محتو" + + "ى لغويزازاالعربية الرسمية الحديثةالألمانية النمساويةالألمانية العليا ال" + + "سويسريةالإنجليزية الأستراليةالإنجليزية الكنديةالإنجليزية البريطانيةالإن" + + "جليزية الأمريكيةالإسبانية أمريكا اللاتينيةالإسبانية الأوروبيةالإسبانية " + + "المكسيكيةالفرنسية الكنديةالفرنسية السويسريةالسكسونية السفلىالفلمنكيةالب" + + "رتغالية البرازيليةالبرتغالية الأوروبيةالمولدوفيةصربية-كرواتيةالكونغو ال" + + "سواحليةالصينية المبسطةالصينية التقليدية" + +var arLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0022, 0x0032, 0x0048, 0x0058, 0x0068, 0x007c, + 0x008a, 0x009a, 0x00aa, 0x00ba, 0x00d2, 0x00e6, 0x00fc, 0x010e, + 0x0122, 0x0134, 0x0146, 0x0154, 0x0168, 0x0178, 0x018c, 0x019e, + 0x01b0, 0x01c4, 0x01ce, 0x01de, 0x01f5, 0x0207, 0x0217, 0x022d, + 0x023f, 0x0253, 0x0265, 0x0271, 0x0283, 0x0297, 0x02ab, 0x02bd, + 0x02cf, 0x02e2, 0x02f2, 0x0304, 0x0316, 0x0324, 0x0334, 0x0344, + 0x0356, 0x036a, 0x038f, 0x03a1, 0x03b5, 0x03cb, 0x03d9, 0x03e5, + 0x03f3, 0x0401, 0x0416, 0x0428, 0x044b, 0x045d, 0x046f, 0x047f, + // Entry 40 - 7F + 0x049a, 0x04b0, 0x04c4, 0x04d2, 0x04e9, 0x04fb, 0x0507, 0x051b, + 0x052d, 0x0541, 0x0553, 0x0561, 0x0571, 0x057f, 0x058d, 0x05a1, + 0x05bb, 0x05cf, 0x05df, 0x05ef, 0x05fd, 0x060f, 0x0621, 0x062f, + 0x063b, 0x064b, 0x065f, 0x0671, 0x0689, 0x0697, 0x06af, 0x06c1, + 0x06cf, 0x06e3, 0x06fc, 0x070c, 0x0722, 0x0736, 0x0746, 0x0758, + 0x0772, 0x0784, 0x0796, 0x07a8, 0x07b8, 0x07c8, 0x07d4, 0x07f5, + 0x0807, 0x0817, 0x0829, 0x084a, 0x0869, 0x0888, 0x0898, 0x08a8, + 0x08be, 0x08d0, 0x08e2, 0x08fb, 0x090d, 0x091f, 0x092d, 0x093f, + // Entry 80 - BF + 0x0951, 0x0965, 0x0977, 0x098b, 0x0997, 0x09a9, 0x09b7, 0x09d1, + 0x09e7, 0x09f9, 0x0a07, 0x0a24, 0x0a32, 0x0a44, 0x0a58, 0x0a6c, + 0x0a80, 0x0a8c, 0x0a9e, 0x0ab0, 0x0abe, 0x0acc, 0x0ae9, 0x0afd, + 0x0b0d, 0x0b1f, 0x0b31, 0x0b41, 0x0b53, 0x0b69, 0x0b7b, 0x0b8f, + 0x0ba1, 0x0bb1, 0x0bbf, 0x0bcd, 0x0bdb, 0x0bed, 0x0c01, 0x0c15, + 0x0c25, 0x0c37, 0x0c45, 0x0c59, 0x0c72, 0x0c82, 0x0c92, 0x0c9e, + 0x0cae, 0x0cc0, 0x0cd0, 0x0cde, 0x0cea, 0x0d00, 0x0d10, 0x0d24, + 0x0d32, 0x0d32, 0x0d48, 0x0d52, 0x0d62, 0x0d72, 0x0d72, 0x0d84, + // Entry C0 - FF + 0x0d84, 0x0da7, 0x0dca, 0x0dda, 0x0dea, 0x0e06, 0x0e06, 0x0e18, + 0x0e18, 0x0e33, 0x0e47, 0x0e47, 0x0e47, 0x0e51, 0x0e51, 0x0e61, + 0x0e61, 0x0e71, 0x0e81, 0x0e9a, 0x0e9a, 0x0ea6, 0x0eae, 0x0eae, + 0x0ec5, 0x0ed1, 0x0edf, 0x0edf, 0x0ee7, 0x0efc, 0x0efc, 0x0f1b, + 0x0f31, 0x0f43, 0x0f51, 0x0f51, 0x0f62, 0x0f76, 0x0f76, 0x0f76, + 0x0f86, 0x0f86, 0x0f92, 0x0f9a, 0x0fac, 0x0fc0, 0x0fd3, 0x0fe3, + 0x0ffc, 0x1008, 0x101a, 0x102c, 0x103a, 0x104c, 0x1056, 0x1066, + 0x107a, 0x108c, 0x1098, 0x10b3, 0x10c1, 0x10d7, 0x10e7, 0x10f5, + // Entry 100 - 13F + 0x1116, 0x1124, 0x1124, 0x113e, 0x1174, 0x1188, 0x1198, 0x11a8, + 0x11b0, 0x11c0, 0x11d0, 0x11e0, 0x11ec, 0x11fc, 0x120c, 0x1225, + 0x1225, 0x1233, 0x1252, 0x1265, 0x1273, 0x1285, 0x128d, 0x1299, + 0x1299, 0x12b6, 0x12c4, 0x12d2, 0x12f3, 0x12f3, 0x1303, 0x1303, + 0x130f, 0x1321, 0x1321, 0x132b, 0x132b, 0x1348, 0x1367, 0x1367, + 0x138c, 0x13af, 0x13c3, 0x13cb, 0x13d9, 0x13f2, 0x13fe, 0x140a, + 0x140a, 0x1418, 0x1435, 0x1435, 0x1461, 0x148f, 0x148f, 0x149b, + 0x14b1, 0x14bf, 0x14cd, 0x14ee, 0x1513, 0x1513, 0x1513, 0x1521, + // Entry 140 - 17F + 0x152b, 0x1537, 0x1552, 0x156e, 0x156e, 0x1584, 0x1590, 0x15a2, + 0x15bf, 0x15d8, 0x15e2, 0x15f0, 0x1606, 0x1616, 0x1628, 0x1628, + 0x1628, 0x1638, 0x1644, 0x1658, 0x1679, 0x1698, 0x1698, 0x16b1, + 0x16c1, 0x16d1, 0x16d9, 0x16e7, 0x16f1, 0x1709, 0x1715, 0x1727, + 0x1735, 0x174d, 0x174d, 0x1759, 0x1759, 0x1767, 0x1779, 0x178e, + 0x178e, 0x178e, 0x17a1, 0x17b1, 0x17c3, 0x17dc, 0x17f0, 0x1802, + 0x180e, 0x182f, 0x182f, 0x182f, 0x1841, 0x184f, 0x185d, 0x1872, + 0x188d, 0x189d, 0x18ad, 0x18bd, 0x18c7, 0x18d7, 0x18e5, 0x18f5, + // Entry 180 - 1BF + 0x18f5, 0x18f5, 0x18f5, 0x1901, 0x1901, 0x190d, 0x1919, 0x1936, + 0x1936, 0x1949, 0x1959, 0x1967, 0x196f, 0x197b, 0x198e, 0x198e, + 0x198e, 0x199e, 0x199e, 0x19aa, 0x19bc, 0x19ce, 0x19e0, 0x19ee, + 0x19f6, 0x1a04, 0x1a14, 0x1a20, 0x1a2c, 0x1a42, 0x1a63, 0x1a78, + 0x1a80, 0x1a9a, 0x1ab4, 0x1ac2, 0x1ad8, 0x1ae6, 0x1af2, 0x1af2, + 0x1afc, 0x1b11, 0x1b1d, 0x1b31, 0x1b45, 0x1b45, 0x1b45, 0x1b53, + 0x1b6b, 0x1b87, 0x1b99, 0x1bac, 0x1bcb, 0x1bdb, 0x1be7, 0x1bf3, + 0x1bf3, 0x1bff, 0x1c18, 0x1c26, 0x1c3f, 0x1c3f, 0x1c47, 0x1c64, + // Entry 1C0 - 1FF + 0x1c70, 0x1c93, 0x1ca7, 0x1cb9, 0x1cc7, 0x1cd5, 0x1ce3, 0x1d04, + 0x1d1c, 0x1d2c, 0x1d40, 0x1d58, 0x1d68, 0x1d68, 0x1d8b, 0x1d8b, + 0x1d8b, 0x1daa, 0x1daa, 0x1dbc, 0x1dbc, 0x1dbc, 0x1dd4, 0x1dea, + 0x1e0f, 0x1e17, 0x1e17, 0x1e2f, 0x1e3f, 0x1e59, 0x1e59, 0x1e59, + 0x1e67, 0x1e75, 0x1e75, 0x1e75, 0x1e75, 0x1e8b, 0x1e95, 0x1ea7, + 0x1eb5, 0x1ed6, 0x1ee4, 0x1ef2, 0x1f04, 0x1f04, 0x1f0e, 0x1f18, + 0x1f26, 0x1f3c, 0x1f3c, 0x1f5b, 0x1f69, 0x1f71, 0x1f71, 0x1f7f, + 0x1f9a, 0x1fbd, 0x1fbd, 0x1fc9, 0x1fd3, 0x1ff2, 0x2002, 0x2002, + // Entry 200 - 23F + 0x2002, 0x201d, 0x2030, 0x2049, 0x2060, 0x2070, 0x2080, 0x209b, + 0x20a5, 0x20b8, 0x20b8, 0x20c8, 0x20d4, 0x20e6, 0x20f4, 0x2111, + 0x2123, 0x2123, 0x2123, 0x212f, 0x2137, 0x2147, 0x2153, 0x2163, + 0x216d, 0x217f, 0x217f, 0x2191, 0x21a7, 0x21a7, 0x21b9, 0x21d0, + 0x21e5, 0x21e5, 0x21fc, 0x21fc, 0x2210, 0x2210, 0x2222, 0x2232, + 0x2240, 0x224e, 0x2276, 0x2284, 0x2298, 0x22a8, 0x22b2, 0x22bc, + 0x22bc, 0x22bc, 0x22bc, 0x22bc, 0x22ca, 0x22ca, 0x22d8, 0x22e6, + 0x22f8, 0x2306, 0x2312, 0x2322, 0x2339, 0x2349, 0x2349, 0x2355, + // Entry 240 - 27F + 0x235f, 0x236d, 0x2379, 0x2381, 0x2381, 0x2399, 0x23ab, 0x23d5, + 0x23d5, 0x23e5, 0x241b, 0x2429, 0x2445, 0x244d, 0x2479, 0x2479, + 0x249e, 0x24d0, 0x24f9, 0x251c, 0x2545, 0x256c, 0x259e, 0x25c3, + 0x25e8, 0x25e8, 0x2607, 0x262a, 0x2649, 0x265b, 0x2684, 0x26ab, + 0x26bf, 0x26d8, 0x26f9, 0x2716, 0x2737, +} // Size: 1250 bytes + +const azLangStr string = "" + // Size: 3713 bytes + "afarabxazavestanafrikaansakanamhararaqonərəbassamavaraymaraazərbaycanbaş" + + "qırdbelarusbolqarbislamabambarabenqaltibetbretonbosniakkatalançeçençamor" + + "okorsikakriçexslavyançuvaşuelsdanimarkaalmanmaldivdzonqaeveyunaningilise" + + "sperantoispanestonbaskfarsfulafinficifarerfransızqərbi frizirlandŞotland" + + "iya keltcəsiqalisiyaquaraniqucaratmankshausaivrithindhiri motuxorvathait" + + "i kreolmacarermənihererointerlinquaindoneziyainterlinqveiqbosiçuan yiinu" + + "piaqidoislanditalyaninuktitutyaponyavagürcükonqokikuyukuanyamaqazaxkalaa" + + "llisutkxmerkannadakoreyakanurikəşmirkürdkomikornqırğızlatınlüksemburqqan" + + "dalimburqlinqalalaoslitvaluba-katanqalatışmalaqasmarşalmaorimakedonmalay" + + "alammonqolmarathimalaymaltabirmannauruşimali ndebelenepalndonqahollandnü" + + "norsk norveçbokmal norveçcənubi ndebelenavayonyancaoksitanocibvaoromoodi" + + "yaosetinpəncabpalipolyakpuştuportuqalkeçuaromanşrundirumınruskinyarvanda" + + "sanskritsardinsindhişimali samisanqosinhalaslovakslovensamoaşonasomalial" + + "banserbsvatisesotosundanisveçsuahilitamilteluqutaciktaytiqrintürkmənsvan" + + "atonqatürksonqatatartaxitiuyğurukraynaurduözbəkvendavyetnamvolapükvalunv" + + "olofxosaidişyorubaçjuançinzuluakinakoliadanqmeadugeafrihiliaqhemaynuakka" + + "daleutcənubi altayqədim ingilisangikaaramikmapuçearapahoaravakasuasturiy" + + "aavadhibalucballibasabejabembabenaqərbi bəlucbxoçpuribikolbinisiksikəbra" + + "jbodoburyatbuginblinkeddokaribatsamsebuançiqaçibçaçağatayçukizmariçinuk " + + "ləhçəsiçoktauçipevyançerokiçeyensorankoptkrım türkcəsikaşubyandakotadarq" + + "vataitadelaverslaveydoqribdinkazarmadoqriaşağı sorbdualaorta hollanddiol" + + "adyuladazaqaembuefikqədim misirekacukelamitorta ingilisevondofangfilippi" + + "nfonorta fransızqədim fransızşimali frisfriulqaqaqauzqanqayoqabayaqezqil" + + "bertorta yüksək almanqədim almanqondiqorontalogotçaqreboqədim yunanİsveç" + + "rə almancasıqusiqviçinhaydahakkahavayhiliqaynonhittitmonqyuxarı sorbsyan" + + "hupaibanibibioilokoinquşloğbannqombamaçamivrit-farsivrit-ərəbqaraqalpaqk" + + "abilekaçinjukambakavikabarda-çərkəztiyapmakondkabuverdiankoroxazixotanko" + + "yra çiinikakokalencinkimbundukomi-permyakkonkanikosreyankpelleqaraçay-ba" + + "lkarkarelkuruxşambalabafiakölnkumıkkutenaysefardlangiqərbi pəncablambalə" + + "zgilakotamonqolozişimali luriluba-lulualuysenolundaluomizoluyiamadurizma" + + "qahimaitilimakasarməndinqomasaymokşamandarmendemerumorisienorta irlandma" + + "xuva-meettometa’mikmakminanqkabanmançumanipürimohavkmosimundanqçoxsaylı " + + "dillərkrikmirandmaruarierzyamazandaranMin Nanneapolitannamaaşağı almanne" + + "variniasniyuankvasiongiemboonnoqayqədim norsnqoşimal sotonuernyamvezinya" + + "nkolnyoronzimaosageosmanpanqasinanpəhləvipampanqapapyamentopalayanniger " + + "kreolqədim farsfoyenikponpeyqədim provansalkiçeracastanirapanuirarotonqa" + + "nromboromanaromanruasandavesaxasamaritansamburusasaksantalnqambaysanqusi" + + "ciliyaskotscənubi kürdsenaselkupkoyraboro senniqədim irlandtaçelitşansid" + + "amocənubi samilule samiinari samiskolt samisoninkesoqdiyensranan tonqose" + + "rersahosukumasususumeryankomorsuriyatimnetesoterenotetumtiqretivtokelayk" + + "linqontlinqittamaşeknyasa tonqatok pisintarokosimşyantumbukatuvalutasava" + + "qtuvinyanMərkəzi Atlas tamazicəsiudmurtuqaritumbundurutvaivotikvunyovall" + + "esvalamovarayvaşovalpirivukalmıksoqayaoyapizyanqbenyembakantonzapotekbli" + + "simbolszenaqatamazizunidil məzmunu yoxdurzazamüasir standart ərəbcənubi " + + "azərbaycanAvstriya almancasıİsveçrə yüksək almancasıAvstraliya ingiliscə" + + "siKanada ingiliscəsiBritaniya ingiliscəsiAmerika ingiliscəsiLatın Amerik" + + "ası ispancasıKastiliya ispancasıMeksika ispancasıKanada fransızcasıİsveç" + + "rə fransızcasıaşağı saksonflamandBraziliya portuqalcasıPortuqaliya portu" + + "qalcasımoldavserb-xorvatKonqo suahilicəsisadələşmiş çinənənəvi çin" + +var azLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x0009, 0x0010, 0x0019, 0x001d, 0x0022, 0x0028, + 0x002e, 0x0033, 0x0037, 0x003d, 0x0048, 0x0051, 0x0058, 0x005e, + 0x0065, 0x006c, 0x0072, 0x0077, 0x007d, 0x0084, 0x008b, 0x0092, + 0x0099, 0x00a0, 0x00a3, 0x00a7, 0x00ae, 0x00b5, 0x00b9, 0x00c2, + 0x00c7, 0x00cd, 0x00d3, 0x00d6, 0x00db, 0x00e2, 0x00eb, 0x00f0, + 0x00f5, 0x00f9, 0x00fd, 0x0101, 0x0104, 0x0108, 0x010d, 0x0115, + 0x0120, 0x0126, 0x013b, 0x0143, 0x014a, 0x0151, 0x0156, 0x015b, + 0x0160, 0x0164, 0x016d, 0x0173, 0x017e, 0x0183, 0x018a, 0x0190, + // Entry 40 - 7F + 0x019b, 0x01a5, 0x01b0, 0x01b4, 0x01be, 0x01c5, 0x01c8, 0x01ce, + 0x01d5, 0x01de, 0x01e3, 0x01e7, 0x01ee, 0x01f3, 0x01f9, 0x0201, + 0x0206, 0x0211, 0x0216, 0x021d, 0x0223, 0x0229, 0x0231, 0x0236, + 0x023a, 0x023e, 0x0247, 0x024d, 0x0258, 0x025d, 0x0264, 0x026b, + 0x026f, 0x0274, 0x0280, 0x0287, 0x028e, 0x0295, 0x029a, 0x02a1, + 0x02aa, 0x02b0, 0x02b7, 0x02bc, 0x02c1, 0x02c7, 0x02cc, 0x02db, + 0x02e0, 0x02e6, 0x02ed, 0x02fd, 0x030b, 0x031a, 0x0320, 0x0326, + 0x032d, 0x0333, 0x0338, 0x033d, 0x0343, 0x034a, 0x034e, 0x0354, + // Entry 80 - BF + 0x035a, 0x0362, 0x0368, 0x036f, 0x0374, 0x037a, 0x037d, 0x0388, + 0x0390, 0x0396, 0x039c, 0x03a8, 0x03ad, 0x03b4, 0x03ba, 0x03c0, + 0x03c5, 0x03ca, 0x03d0, 0x03d5, 0x03d9, 0x03de, 0x03e4, 0x03ea, + 0x03f0, 0x03f7, 0x03fc, 0x0402, 0x0407, 0x040a, 0x0410, 0x0419, + 0x041e, 0x0423, 0x0428, 0x042d, 0x0432, 0x0438, 0x043e, 0x0445, + 0x0449, 0x0450, 0x0455, 0x045c, 0x0464, 0x0469, 0x046e, 0x0472, + 0x0477, 0x047d, 0x0483, 0x0487, 0x048b, 0x048f, 0x0494, 0x049b, + 0x04a0, 0x04a0, 0x04a8, 0x04ad, 0x04b1, 0x04b6, 0x04b6, 0x04bb, + // Entry C0 - FF + 0x04bb, 0x04c8, 0x04d6, 0x04dc, 0x04e2, 0x04e9, 0x04e9, 0x04f0, + 0x04f0, 0x04f0, 0x04f6, 0x04f6, 0x04f6, 0x04f9, 0x04f9, 0x0501, + 0x0501, 0x0507, 0x050c, 0x0511, 0x0511, 0x0515, 0x0515, 0x0515, + 0x0515, 0x0519, 0x051e, 0x051e, 0x0522, 0x0522, 0x0522, 0x052f, + 0x0538, 0x053d, 0x0541, 0x0541, 0x0541, 0x0549, 0x0549, 0x0549, + 0x054d, 0x054d, 0x0551, 0x0551, 0x0557, 0x055c, 0x055c, 0x0560, + 0x0560, 0x0565, 0x056a, 0x056a, 0x056f, 0x0575, 0x057a, 0x0581, + 0x058a, 0x0590, 0x0594, 0x05a5, 0x05ac, 0x05b5, 0x05bc, 0x05c2, + // Entry 100 - 13F + 0x05c7, 0x05cb, 0x05cb, 0x05db, 0x05db, 0x05e4, 0x05ea, 0x05f0, + 0x05f5, 0x05fc, 0x0602, 0x0608, 0x060d, 0x0612, 0x0617, 0x0624, + 0x0624, 0x0629, 0x0635, 0x063a, 0x063f, 0x0645, 0x0649, 0x064d, + 0x064d, 0x0659, 0x065f, 0x0665, 0x0671, 0x0671, 0x0677, 0x0677, + 0x067b, 0x0683, 0x0683, 0x0686, 0x0686, 0x0693, 0x06a2, 0x06a2, + 0x06ae, 0x06ae, 0x06b3, 0x06b5, 0x06bb, 0x06be, 0x06c2, 0x06c8, + 0x06c8, 0x06cb, 0x06d2, 0x06d2, 0x06e5, 0x06f1, 0x06f1, 0x06f6, + 0x06ff, 0x0705, 0x070a, 0x0716, 0x072b, 0x072b, 0x072b, 0x072f, + // Entry 140 - 17F + 0x0736, 0x073b, 0x0740, 0x0745, 0x0745, 0x074f, 0x0755, 0x0759, + 0x0765, 0x0769, 0x076d, 0x0771, 0x0777, 0x077c, 0x0782, 0x0782, + 0x0782, 0x0789, 0x078f, 0x0795, 0x079f, 0x07ab, 0x07ab, 0x07b5, + 0x07bb, 0x07c1, 0x07c3, 0x07c8, 0x07cc, 0x07dd, 0x07dd, 0x07e2, + 0x07e8, 0x07f3, 0x07f3, 0x07f7, 0x07f7, 0x07fb, 0x0800, 0x080c, + 0x080c, 0x080c, 0x0810, 0x0818, 0x0820, 0x082c, 0x0833, 0x083b, + 0x0841, 0x0850, 0x0850, 0x0850, 0x0855, 0x085a, 0x0862, 0x0867, + 0x086c, 0x0872, 0x0879, 0x087f, 0x0884, 0x0892, 0x0897, 0x089d, + // Entry 180 - 1BF + 0x089d, 0x089d, 0x089d, 0x08a3, 0x08a3, 0x08a8, 0x08ac, 0x08b8, + 0x08b8, 0x08c2, 0x08c9, 0x08ce, 0x08d1, 0x08d5, 0x08da, 0x08da, + 0x08da, 0x08e1, 0x08e1, 0x08e7, 0x08ee, 0x08f5, 0x08fe, 0x0903, + 0x0903, 0x0909, 0x090f, 0x0914, 0x0918, 0x0920, 0x092b, 0x0938, + 0x093f, 0x0945, 0x0950, 0x0956, 0x095f, 0x0965, 0x0969, 0x0969, + 0x0970, 0x0982, 0x0986, 0x098c, 0x0993, 0x0993, 0x0993, 0x0998, + 0x09a2, 0x09a9, 0x09b3, 0x09b7, 0x09c5, 0x09cb, 0x09cf, 0x09d5, + 0x09d5, 0x09db, 0x09e4, 0x09e9, 0x09f4, 0x09f4, 0x09f7, 0x0a02, + // Entry 1C0 - 1FF + 0x0a06, 0x0a06, 0x0a0e, 0x0a15, 0x0a1a, 0x0a1f, 0x0a24, 0x0a29, + 0x0a33, 0x0a3c, 0x0a44, 0x0a4e, 0x0a55, 0x0a55, 0x0a60, 0x0a60, + 0x0a60, 0x0a6b, 0x0a6b, 0x0a72, 0x0a72, 0x0a72, 0x0a78, 0x0a78, + 0x0a88, 0x0a8d, 0x0a8d, 0x0a96, 0x0a9d, 0x0aa7, 0x0aa7, 0x0aa7, + 0x0aac, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab7, 0x0aba, 0x0ac1, + 0x0ac5, 0x0ace, 0x0ad5, 0x0ada, 0x0ae0, 0x0ae0, 0x0ae7, 0x0aec, + 0x0af4, 0x0af9, 0x0af9, 0x0b06, 0x0b06, 0x0b0a, 0x0b0a, 0x0b10, + 0x0b1f, 0x0b2c, 0x0b2c, 0x0b34, 0x0b38, 0x0b38, 0x0b3e, 0x0b3e, + // Entry 200 - 23F + 0x0b3e, 0x0b4a, 0x0b53, 0x0b5d, 0x0b67, 0x0b6e, 0x0b76, 0x0b82, + 0x0b87, 0x0b8b, 0x0b8b, 0x0b91, 0x0b95, 0x0b9d, 0x0ba2, 0x0ba2, + 0x0ba8, 0x0ba8, 0x0ba8, 0x0bad, 0x0bb1, 0x0bb7, 0x0bbc, 0x0bc1, + 0x0bc4, 0x0bcb, 0x0bcb, 0x0bd2, 0x0bd9, 0x0bd9, 0x0be1, 0x0bec, + 0x0bf5, 0x0bf5, 0x0bfb, 0x0bfb, 0x0c03, 0x0c03, 0x0c0a, 0x0c10, + 0x0c17, 0x0c1f, 0x0c3a, 0x0c40, 0x0c46, 0x0c4d, 0x0c50, 0x0c53, + 0x0c53, 0x0c53, 0x0c53, 0x0c53, 0x0c58, 0x0c58, 0x0c5d, 0x0c63, + 0x0c69, 0x0c6e, 0x0c73, 0x0c7a, 0x0c7c, 0x0c83, 0x0c83, 0x0c87, + // Entry 240 - 27F + 0x0c8a, 0x0c8f, 0x0c96, 0x0c9b, 0x0c9b, 0x0ca1, 0x0ca8, 0x0cb2, + 0x0cb2, 0x0cb8, 0x0cbe, 0x0cc2, 0x0cd5, 0x0cd9, 0x0cf0, 0x0d03, + 0x0d16, 0x0d34, 0x0d4b, 0x0d5e, 0x0d74, 0x0d88, 0x0da4, 0x0db8, + 0x0dca, 0x0dca, 0x0dde, 0x0df6, 0x0e05, 0x0e0c, 0x0e23, 0x0e3c, + 0x0e42, 0x0e4d, 0x0e5f, 0x0e72, 0x0e81, +} // Size: 1250 bytes + +const bgLangStr string = "" + // Size: 7891 bytes + "афарабхазкиавестскиафрикаансаканамхарскиарагонскиарабскиасамскиаварскиай" + + "мараазербайджанскибашкирскибеларускибългарскибисламабамбарабенгалскитиб" + + "етскибретонскибосненскикаталонскичеченскичаморокорсиканскикриичешкицърк" + + "овнославянскичувашкиуелскидатскинемскидивехидзонхаевегръцкианглийскиесп" + + "ерантоиспанскиестонскибаскиперсийскифулафинскифиджийскифарьорскифренски" + + "фризийскиирландскишотландски галскигалисийскигуаранигуджаратиманкскихау" + + "заивритхиндихири мотухърватскихаитянски креолскиунгарскиарменскихерерои" + + "нтерлингваиндонезийскиоксиденталигбосъчуански иинупиакидоисландскиитали" + + "анскиинуктитутяпонскияванскигрузинскиконгоанскикикуюкванямаказахскигрен" + + "ландскикхмерскиканнадакорейскиканурикашмирскикюрдскикомикорнуолскикирги" + + "зкилатинскилюксембургскигандалимбургскилингалалаоскилитовскилуба катанг" + + "алатвийскималгашкимаршалеземаорскимакедонскималаяламмонголскимаратимала" + + "йскималтийскибирманскинаурусеверен ндебеленепалскиндонганидерландскинор" + + "вежки (нюношк)норвежки (букмол)южен ндебеленавахонянджаокситанскиоджибв" + + "аоромоорияосетскипенджабскипалиполскипущупортугалскикечуаретороманскиру" + + "ндирумънскирускикиняруандасанскритсардинскисиндхисеверносаамскисангосин" + + "халскисловашкисловенскисамоанскишонасомалийскиалбанскисръбскисватисесот" + + "осунданскишведскисуахилитамилскителугутаджикскитайскитигринятуркменскит" + + "сванатонгатурскицонгататарскитаитянскиуйгурскиукраинскиурдуузбекскивенд" + + "авиетнамскиволапюквалонскиволофксосаидишйорубазуангкитайскизулускиачинс" + + "киаколиадангмеадигеафрихилиагемайнуакадскиалеутскиюжноалтайскистароангл" + + "ийскиангикаарамейскимапучеарапахоаравакасуастурскиавадибалучибалийскиба" + + "сабеябембабеназападен балочибожпурибиколскибинисиксикабраджбодобурятски" + + "бугинскибиленскикаддокарибскиатсамсебуаночигачибчачагатайчуукмарийскижа" + + "ргон чинуукчокточиипувскичерокичейенскикюрдски (централен)коптскикримск" + + "отатарскисеселва, креолски френскикашубскидакотскидаргватаитаделауерсле" + + "йвидогрибдинказармадогридолносръбскидуаласредновековен холандскидиолади" + + "уладазагаембуефикдревноегипетскиекажукеламитскисредновековен английские" + + "вондофангфилипинскифонсредновековен френскистарофренскисеверен фризскии" + + "зточнофризийскифриулианскигагагаузкигайогбаягиизгилбертскисредновисокон" + + "емскистаровисоконемскигондигоронталоготическигребодревногръцкишвейцарск" + + "и немскигусиигвичинхайдахавайскихилигайнонхитскихмонггорнолужишкихупаиб" + + "анибибиоилокоингушетскиложбаннгомбамачамеюдео-персийскиюдео-арабскикара" + + "калпашкикабилскикачинскижжукамбакавикабардиантуапмакондекабовердианскик" + + "орокхасикотскикойра чииникакокаленджинкимбундукоми-пермякскиконканикоср" + + "аенкпелекарачай-балкарскикарелскикурукшамбалабафиякьолнскикумикскикутен" + + "айладинолангилахндаламбалезгинскилакотамонголозисеверен лурилуба-лулуал" + + "уисеньолундалуомизолуямадурскимагахимайтхилимакасармандингомасайскимокш" + + "амандармендемеруморисиенсредновековен ирландскимакуа метометамикмакмина" + + "нгкабауманджурскиманипуримохоукмосимундангмногоезичникрикмирандийскимар" + + "вариерзиамазандаринеаполитанскинамадолнонемскиневарскиниасниуеанквасион" + + "гиембунногаистаронорвежкинкосеверен сотонуеркласически невариниамвезини" + + "анколенуоронзимаосейджиотомански турскипангасинанпахлавипампангапапиаме" + + "нтопалауаннигерийски пиджинстароперсийскифиникийскипонапеанпрускистароп" + + "ровансалскикичераджастанскирапа нуираротонгаромборомскиарумънскирвасанд" + + "авеякутскисамаритански арамейскисамбурусасаксанталингамбайсангусицилиан" + + "скишотландскиюжнокюрдскисенаселкупкойраборо сенистароирландскиташелхитш" + + "ансидамоюжносаамскилуле-саамскиинари-саамскисколт-саамскисонинкесогдийс" + + "кисранан тонгосерерсахосукумасусушумерскикоморскикласически сирийскисир" + + "ийскитемнетесотеренотетумтигретивтокелайскиклингонскитлингиттамашекниан" + + "са тонгаток писинтарокоцимшианскитумбукатувалуанскитасавактувинскицентр" + + "алноатласки тамазигтудмуртскиугаритскиумбундуроотваивотиквунджовалзерск" + + "и немскиваламоварайуашовалпирикалмиксогаяояпезеянгбенйембакантонскизапо" + + "текблис символизенагастандартен марокански тамазигтзунибез лингвистично" + + " съдържаниезазасъвременен стандартен арабскианглийски (САЩ)долносаксонск" + + "ифламандскимолдовскисърбохърватскиконгоански суахиликитайски (опростен)" + +var bgLangIdx = []uint16{ // 612 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0016, 0x0026, 0x0038, 0x0040, 0x0050, 0x0062, + 0x0070, 0x007e, 0x008c, 0x0098, 0x00b4, 0x00c6, 0x00d8, 0x00ea, + 0x00f8, 0x0106, 0x0118, 0x0128, 0x013a, 0x014c, 0x0160, 0x0170, + 0x017c, 0x0192, 0x019a, 0x01a4, 0x01c6, 0x01d4, 0x01e0, 0x01ec, + 0x01f8, 0x0204, 0x0210, 0x0216, 0x0222, 0x0234, 0x0246, 0x0256, + 0x0266, 0x0270, 0x0282, 0x028a, 0x0296, 0x02a8, 0x02ba, 0x02c8, + 0x02da, 0x02ec, 0x030d, 0x0321, 0x032f, 0x0341, 0x034f, 0x0359, + 0x0363, 0x036d, 0x037e, 0x0390, 0x03b3, 0x03c3, 0x03d3, 0x03df, + // Entry 40 - 7F + 0x03f5, 0x040d, 0x0421, 0x0429, 0x043e, 0x044c, 0x0452, 0x0464, + 0x0478, 0x048a, 0x0498, 0x04a6, 0x04b8, 0x04cc, 0x04d6, 0x04e4, + 0x04f4, 0x050a, 0x051a, 0x0528, 0x0538, 0x0544, 0x0556, 0x0564, + 0x056c, 0x0580, 0x0590, 0x05a0, 0x05ba, 0x05c4, 0x05d8, 0x05e6, + 0x05f2, 0x0602, 0x0619, 0x062b, 0x063b, 0x064d, 0x065b, 0x066f, + 0x067f, 0x0691, 0x069d, 0x06ad, 0x06bf, 0x06d1, 0x06db, 0x06f8, + 0x0708, 0x0714, 0x072c, 0x074b, 0x076a, 0x0781, 0x078d, 0x0799, + 0x07ad, 0x07bb, 0x07c5, 0x07cd, 0x07db, 0x07ef, 0x07f7, 0x0803, + // Entry 80 - BF + 0x080b, 0x0821, 0x082b, 0x0843, 0x084d, 0x085d, 0x0867, 0x087b, + 0x088b, 0x089d, 0x08a9, 0x08c5, 0x08cf, 0x08e1, 0x08f1, 0x0903, + 0x0915, 0x091d, 0x0931, 0x0941, 0x094f, 0x0959, 0x0965, 0x0977, + 0x0985, 0x0993, 0x09a3, 0x09af, 0x09c1, 0x09cd, 0x09db, 0x09ef, + 0x09fb, 0x0a05, 0x0a11, 0x0a1b, 0x0a2b, 0x0a3d, 0x0a4d, 0x0a5f, + 0x0a67, 0x0a77, 0x0a81, 0x0a95, 0x0aa3, 0x0ab3, 0x0abd, 0x0ac7, + 0x0acf, 0x0adb, 0x0ae5, 0x0af5, 0x0b03, 0x0b11, 0x0b1b, 0x0b29, + 0x0b33, 0x0b33, 0x0b43, 0x0b4b, 0x0b53, 0x0b61, 0x0b61, 0x0b71, + // Entry C0 - FF + 0x0b71, 0x0b89, 0x0ba5, 0x0bb1, 0x0bc3, 0x0bcf, 0x0bcf, 0x0bdd, + 0x0bdd, 0x0bdd, 0x0be9, 0x0be9, 0x0be9, 0x0bef, 0x0bef, 0x0bff, + 0x0bff, 0x0c09, 0x0c15, 0x0c25, 0x0c25, 0x0c2d, 0x0c2d, 0x0c2d, + 0x0c2d, 0x0c33, 0x0c3d, 0x0c3d, 0x0c45, 0x0c45, 0x0c45, 0x0c60, + 0x0c6e, 0x0c7e, 0x0c86, 0x0c86, 0x0c86, 0x0c94, 0x0c94, 0x0c94, + 0x0c9e, 0x0c9e, 0x0ca6, 0x0ca6, 0x0cb6, 0x0cc6, 0x0cc6, 0x0cd6, + 0x0cd6, 0x0ce0, 0x0cf0, 0x0cf0, 0x0cfa, 0x0d08, 0x0d10, 0x0d1a, + 0x0d28, 0x0d30, 0x0d40, 0x0d59, 0x0d63, 0x0d75, 0x0d81, 0x0d91, + // Entry 100 - 13F + 0x0db4, 0x0dc2, 0x0dc2, 0x0de0, 0x0e0f, 0x0e1f, 0x0e2f, 0x0e3b, + 0x0e45, 0x0e53, 0x0e5f, 0x0e6b, 0x0e75, 0x0e7f, 0x0e89, 0x0ea1, + 0x0ea1, 0x0eab, 0x0ed8, 0x0ee2, 0x0eec, 0x0ef8, 0x0f00, 0x0f08, + 0x0f08, 0x0f26, 0x0f32, 0x0f44, 0x0f71, 0x0f71, 0x0f7d, 0x0f7d, + 0x0f85, 0x0f99, 0x0f99, 0x0f9f, 0x0f9f, 0x0fc8, 0x0fe0, 0x0fe0, + 0x0ffd, 0x101d, 0x1033, 0x1037, 0x1047, 0x1047, 0x104f, 0x1057, + 0x1057, 0x105f, 0x1073, 0x1073, 0x1097, 0x10b9, 0x10b9, 0x10c3, + 0x10d5, 0x10e7, 0x10f1, 0x1109, 0x112a, 0x112a, 0x112a, 0x1134, + // Entry 140 - 17F + 0x1140, 0x114a, 0x114a, 0x115a, 0x115a, 0x116e, 0x117a, 0x1184, + 0x119c, 0x119c, 0x11a4, 0x11ac, 0x11b8, 0x11c2, 0x11d6, 0x11d6, + 0x11d6, 0x11e2, 0x11ee, 0x11fa, 0x1215, 0x122c, 0x122c, 0x1244, + 0x1254, 0x1264, 0x126a, 0x1274, 0x127c, 0x128e, 0x128e, 0x1296, + 0x12a4, 0x12c0, 0x12c0, 0x12c8, 0x12c8, 0x12d2, 0x12de, 0x12f3, + 0x12f3, 0x12f3, 0x12fb, 0x130d, 0x131d, 0x1338, 0x1346, 0x1354, + 0x135e, 0x137f, 0x137f, 0x137f, 0x138f, 0x1399, 0x13a7, 0x13b1, + 0x13c1, 0x13d1, 0x13df, 0x13eb, 0x13f5, 0x1401, 0x140b, 0x141d, + // Entry 180 - 1BF + 0x141d, 0x141d, 0x141d, 0x1429, 0x1429, 0x1433, 0x143b, 0x1452, + 0x1452, 0x1465, 0x1475, 0x147f, 0x1485, 0x148d, 0x1493, 0x1493, + 0x1493, 0x14a3, 0x14a3, 0x14af, 0x14bf, 0x14cd, 0x14dd, 0x14ed, + 0x14ed, 0x14f7, 0x1503, 0x150d, 0x1515, 0x1525, 0x1552, 0x1565, + 0x156d, 0x1579, 0x158f, 0x15a3, 0x15b3, 0x15bf, 0x15c7, 0x15c7, + 0x15d5, 0x15eb, 0x15f3, 0x1609, 0x1617, 0x1617, 0x1617, 0x1621, + 0x1633, 0x1633, 0x164d, 0x1655, 0x166b, 0x167b, 0x1683, 0x168f, + 0x168f, 0x169b, 0x16ab, 0x16b5, 0x16cf, 0x16cf, 0x16d5, 0x16ec, + // Entry 1C0 - 1FF + 0x16f4, 0x1715, 0x1725, 0x1735, 0x173f, 0x1749, 0x1757, 0x1776, + 0x178a, 0x1798, 0x17a8, 0x17bc, 0x17ca, 0x17ca, 0x17eb, 0x17eb, + 0x17eb, 0x1807, 0x1807, 0x181b, 0x181b, 0x181b, 0x182b, 0x1837, + 0x1859, 0x1861, 0x1861, 0x1879, 0x1888, 0x189a, 0x189a, 0x189a, + 0x18a4, 0x18b0, 0x18b0, 0x18b0, 0x18b0, 0x18c2, 0x18c8, 0x18d6, + 0x18e4, 0x190f, 0x191d, 0x1927, 0x1935, 0x1935, 0x1943, 0x194d, + 0x1963, 0x1977, 0x1977, 0x198d, 0x198d, 0x1995, 0x1995, 0x19a1, + 0x19bc, 0x19d8, 0x19d8, 0x19e8, 0x19ee, 0x19ee, 0x19fa, 0x19fa, + // Entry 200 - 23F + 0x19fa, 0x1a10, 0x1a27, 0x1a40, 0x1a59, 0x1a67, 0x1a79, 0x1a90, + 0x1a9a, 0x1aa2, 0x1aa2, 0x1aae, 0x1ab6, 0x1ac6, 0x1ad6, 0x1afb, + 0x1b0b, 0x1b0b, 0x1b0b, 0x1b15, 0x1b1d, 0x1b29, 0x1b33, 0x1b3d, + 0x1b43, 0x1b57, 0x1b57, 0x1b6b, 0x1b79, 0x1b79, 0x1b87, 0x1b9e, + 0x1baf, 0x1baf, 0x1bbb, 0x1bbb, 0x1bcf, 0x1bcf, 0x1bdd, 0x1bf3, + 0x1c01, 0x1c11, 0x1c42, 0x1c54, 0x1c66, 0x1c74, 0x1c7c, 0x1c82, + 0x1c82, 0x1c82, 0x1c82, 0x1c82, 0x1c8c, 0x1c8c, 0x1c98, 0x1cb7, + 0x1cc3, 0x1ccd, 0x1cd5, 0x1ce3, 0x1ce3, 0x1cef, 0x1cef, 0x1cf7, + // Entry 240 - 27F + 0x1cfb, 0x1d05, 0x1d11, 0x1d1b, 0x1d1b, 0x1d2d, 0x1d3b, 0x1d52, + 0x1d52, 0x1d5e, 0x1d98, 0x1da0, 0x1dd4, 0x1ddc, 0x1e14, 0x1e14, + 0x1e14, 0x1e14, 0x1e14, 0x1e14, 0x1e14, 0x1e2f, 0x1e2f, 0x1e2f, + 0x1e2f, 0x1e2f, 0x1e2f, 0x1e2f, 0x1e4b, 0x1e5f, 0x1e5f, 0x1e5f, + 0x1e71, 0x1e8d, 0x1eb0, 0x1ed3, +} // Size: 1248 bytes + +const bnLangStr string = "" + // Size: 12336 bytes + "আফারআবখাজিয়ানআবেস্তীয়আফ্রিকানআকানআমহারিকআর্গোনিজআরবীআসামিআভেরিকআয়মারা" + + "আজারবাইজানীবাশকিরবেলারুশিয়বুলগেরিয়বিসলামাবামবারাবাংলাতিব্বতিব্রেটনবস" + + "নীয়ানকাতালানচেচেনচামোরোকর্সিকানক্রিচেকচার্চ স্লাভিকচুবাসওয়েলশডেনিশজা" + + "র্মানদিবেহিজোঙ্গাইউয়িগ্রিকইংরেজিএস্পেরান্তোস্প্যানিশএস্তোনীয়বাস্কফার" + + "্সিফুলাহ্ফিনিশফিজিআনফারোসফরাসিপশ্চিম ফ্রিসিয়ানআইরিশস্কটস-গ্যেলিকগ্যাল" + + "িশিয়গুয়ারানিগুজরাটিম্যাঙ্কসহাউসাহিব্রুহিন্দিহিরি মোতুক্রোয়েশীয়হাইত" + + "িয়ানহাঙ্গেরীয়আর্মেনিয়হেরেরোইন্টারলিঙ্গুয়াইন্দোনেশীয়ইন্টারলিঙ্গইগ্" + + "\u200cবোসিচুয়ান য়িইনুপিয়াকইডোআইসল্যান্ডীয়ইতালিয়ইনুক্টিটুটজাপানিজাভা" + + "নিজজর্জিয়ানকঙ্গোকিকুয়ুকোয়ানিয়ামাকাজাখক্যালাল্লিসুটখমেরকন্নড়কোরিয়" + + "ানকানুরিকাশ্মীরিকুর্দিশকোমিকর্ণিশকির্গিজলাটিনলুক্সেমবার্গীয়গান্ডালিম্" + + "বুর্গিশলিঙ্গালালাওলিথুয়েনীয়লুবা-কাটাঙ্গালাত্\u200cভীয়মালাগাসিমার্শা" + + "লিজমাওরিম্যাসিডোনীয়মালায়ালামমঙ্গোলিয়মারাঠিমালয়মল্টিয়বর্মিনাউরুউত্" + + "তর এন্দেবিলিনেপালীএন্দোঙ্গাডাচনরওয়েজীয়ান নিনর্স্কনরওয়েজিয়ান বোকমাল" + + "দক্ষিণ এনডেবেলেনাভাজোনায়াঞ্জাঅক্সিটানওজিবওয়াঅরোমোওড়িয়াওসেটিকপাঞ্জা" + + "বীপালিপোলিশপাশ্তুপর্তুগীজকেচুয়ারোমান্সরুন্দিরোমানীয়রুশকিনয়ারোয়ান্ড" + + "াসংস্কৃতসার্ডিনিয়ানসিন্ধিউত্তরাঞ্চলীয় সামিসাঙ্গোসিংহলীস্লোভাকস্লোভেন" + + "ীয়সামোয়ানশোনাসোমালিআলবেনীয়সার্বীয়সোয়াতিদক্ষিন সোথোসুদানীসুইডিশসোয" + + "়াহিলিতামিলতেলেগুতাজিকথাইতিগরিনিয়াতুর্কমেনীসোয়ানাটোঙ্গানতুর্কীসঙ্গাত" + + "াতারতাহিতিয়ানউইঘুরইউক্রেনীয়উর্দুউজবেকীয়ভেন্ডাভিয়েতনামীভোলাপুকওয়াল" + + "ুনউওলোফজোসায়িদ্দিশইওরুবাঝু্য়াঙচীনাজুলুঅ্যাচাইনিজআকোলিঅদাগ্মেআদেগেআফ্" + + "রিহিলিএঘেমআইনুআক্কাদিয়ানআলেউতদক্ষিন আলতাইপ্রাচীন ইংরেজীআঙ্গিকাআরামাইক" + + "মাপুচিআরাপাহোআরাওয়াকআসুআস্তুরিয়আওয়াধিবেলুচীবালিনীয়বাসাবেজাবেম্বাবে" + + "নাপশ্চিম বালোচিভোজপুরিবিকোলবিনিসিকসিকাব্রাজবোড়োবুরিয়াতবুগিনিব্লিনক্য" + + "াডোক্যারিবআত্সামচেবুয়ানোচিগাচিবচাচাগাতাইচুকিমারিচিনুক জার্গনচকটোওচিপে" + + "ওয়ানচেরোকীশাইয়েনমধ্য কুর্দিশকপটিকক্রিমিয়ান তুর্কিসেসেলওয়া ক্রেওল ফ" + + "্রেঞ্চকাশুবিয়ানডাকোটাদার্গওয়াতাইতাডেলাওয়েরস্ল্যাভদোগ্রীবডিংকাজার্মা" + + "ডোগরিনিম্নতর সোর্বিয়ানদুয়ালামধ্য ডাচজলা-ফনীডিউলাদাগাজাএম্বুএফিকপ্রাচ" + + "ীন মিশরীয়ইকাজুকএলামাইটমধ্য ইংরেজিইওন্ডোফ্যাঙ্গফিলিপিনোফনমধ্য ফরাসিপ্র" + + "াচীন ফরাসিউত্তরাঞ্চলীয় ফ্রিসিয়ানপূর্ব ফ্রিসিয়ফ্রিউলিয়ানগাগাগাউজgan" + + "গায়োবায়াগীজগিলবার্টিজমধ্য-উচ্চ জার্মানিপ্রাচীন উচ্চ জার্মানিগোন্ডিগো" + + "রোন্তালোগথিকগ্রেবোপ্রাচীন গ্রীকসুইস জার্মানগুসীগওইচ্’ইনহাইডাhakহাওয়াই" + + "য়ানহিলিগ্যায়নোনহিট্টিটহ্\u200cমোঙউচ্চ সোর্বিয়ানXiang চীনাহুপাইবানইব" + + "িবিওইলোকোইঙ্গুশলোজবানগোম্বামাকামেজুদেও ফার্সিজুদেও আরবিকারা-কাল্পাককাব" + + "াইলেকাচিনঅজ্জুকাম্বাকাউইকাবার্ডিয়ানটাইয়াপমাকোন্দেকাবুভারদিয়ানুকোরোখ" + + "াশিখোটানিজকোয়রা চীনিকাকোকালেনজিনকিম্বুন্দুকমি-পারমিআককোঙ্কানিকোস্রাইন" + + "ক্\u200cপেল্লেকারচে-বাল্কারকারেলিয়ানকুরুখশাম্বালাবাফিয়াকল্শকুমিককুটে" + + "নাইলাডিনোলাঙ্গিলান্ডালাম্বালেজঘিয়ানলাকোটামোঙ্গোলোজিউত্তর লুরিলুবা-লুল" + + "ুয়ালুইসেনোলুন্ডালুয়োমিজোলুইয়ামাদুরেসেমাগাহিমৈথিলিম্যাকাসারম্যান্ডিঙ" + + "্গোমাসাইমোকশাম্যাণ্ডারমেন্ডেমেরুমরিসিয়ানমধ্য আইরিশমাখুয়া-মেত্তোমেটাম" + + "িকম্যাকমিনাঙ্গ্\u200cকাবাউমাঞ্চুমণিপুরীমোহাওকমসিমুদাঙ্গএকাধিক ভাষাক্রি" + + "কমিরান্ডিজমারোয়ারিএরজিয়ামাজানদেরানিnanনেয়াপোলিটাননামানিম্ন জার্মানি" + + "নেওয়ারিনিয়াসনিউয়ানকোয়াসিওনিঙ্গেম্বুননোগাইপ্রাচীন নর্সএন’কোউত্তরাঞ্" + + "চলীয় সোথোনুয়ারপ্রাচীন নেওয়ারীন্যায়ামওয়েজিন্যায়াঙ্কোলেন্যোরোএনজিম" + + "াওসেজঅটোমান তুর্কিপাঙ্গাসিনানপাহ্লাভিপাম্পাঙ্গাপাপিয়ামেন্টোপালায়ুয়া" + + "ননাজেরিয় পিজিনপ্রাচীন ফার্সিফোনিশীয়ানপোহ্নপেইয়ানপ্রুশিয়ানপ্রাচীন প" + + "্রোভেনসালকি‘চেরাজস্থানীরাপানুইরারোটোংগানরম্বোরোমানিআরমেনিয়ানরাওয়াস্য" + + "ান্ডাওয়েশাখাসামারিটান আরামিকসামবুরুসাসাকসাঁওতালিন্যাগাম্বেসাঙ্গুসিসিল" + + "িয়ানস্কটসদক্ষিণ কুর্দিশসেনাসেল্কুপকোয়রাবেনো সেন্নীপ্রাচীন আইরিশতাচেল" + + "হিতশানসিডামোদক্ষিণাঞ্চলীয় সামিলুলে সামিইনারি সামিস্কোল্ট সামিসোনিঙ্কে" + + "সোগডিয়ানস্রানান টোঙ্গোসেরেরসাহোসুকুমাসুসুসুমেরীয়কমোরিয়ানপ্রাচীন সির" + + "িওসিরিয়াকটাইম্নেতেসোতেরেনোতেতুমটাইগ্রেটিভটোকেলাউক্লিঙ্গনত্লিঙ্গিটতামা" + + "শেকনায়াসা টোঙ্গাটোক পিসিনতারোকোসিমশিয়ানতুম্বুকাটুভালুতাসাওয়াকটুভিনি" + + "য়ানসেন্ট্রাল আটলাস তামাজিগাতউডমুর্টউগারিটিকউম্বুন্দুমূলভাইভোটিকভুঞ্জো" + + "ওয়ালসেরওয়ালামোওয়ারেওয়াশোওয়ার্লপিরিWu চীনাকাল্মইকসোগাইয়াওইয়াপেসে" + + "য়াঙ্গবেনয়েম্বাক্যানটোনীজজাপোটেকচিত্র ভাষাজেনাগাআদর্শ মরক্কোন তামাজিগ" + + "াতজুনিভাষাভিত্তিক বিষয়বস্তু নেইজাজাআধুনিক আদর্শ আরবীঅস্ট্রিয়ান জার্ম" + + "ানসুইস হাই জার্মানঅস্ট্রেলীয় ইংরেজিকানাডীয় ইংরেজিব্রিটিশ ইংরেজিআমেরি" + + "কার ইংরেজিল্যাটিন আমেরিকান স্প্যানিশইউরোপীয় স্প্যানিশম্যাক্সিকান স্প্" + + "যানিশকানাডীয় ফরাসিসুইস ফরাসিলো স্যাক্সনফ্লেমিশব্রাজিলের পর্তুগীজইউরোপ" + + "ের পর্তুগীজমলদাভিয়সার্বো-ক্রোয়েশিয়কঙ্গো সোয়াহিলিসরলীকৃত চীনাঐতিহ্য" + + "বাহি চীনা" + +var bnLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x002a, 0x0045, 0x005d, 0x0069, 0x007e, 0x0096, + 0x00a2, 0x00b1, 0x00c3, 0x00d8, 0x00f9, 0x010b, 0x0129, 0x0144, + 0x0159, 0x016e, 0x017d, 0x0192, 0x01a4, 0x01bc, 0x01d1, 0x01e0, + 0x01f2, 0x020a, 0x0216, 0x021f, 0x0244, 0x0253, 0x0265, 0x0274, + 0x0289, 0x029b, 0x02ad, 0x02bc, 0x02cb, 0x02dd, 0x02fe, 0x0319, + 0x0334, 0x0343, 0x0355, 0x0367, 0x0376, 0x0388, 0x0397, 0x03a6, + 0x03d7, 0x03e6, 0x040b, 0x0429, 0x0444, 0x0459, 0x0471, 0x0480, + 0x0492, 0x04a4, 0x04bd, 0x04de, 0x04f9, 0x0517, 0x0532, 0x0544, + // Entry 40 - 7F + 0x0571, 0x0592, 0x05b3, 0x05c5, 0x05e7, 0x0602, 0x060b, 0x0632, + 0x0647, 0x0665, 0x0677, 0x068c, 0x06a7, 0x06b6, 0x06cb, 0x06ef, + 0x06fe, 0x0725, 0x0731, 0x0743, 0x075b, 0x076d, 0x0785, 0x079a, + 0x07a6, 0x07b8, 0x07cd, 0x07dc, 0x0809, 0x081b, 0x083c, 0x0854, + 0x085d, 0x087e, 0x08a3, 0x08be, 0x08d6, 0x08f1, 0x0900, 0x0924, + 0x0942, 0x095d, 0x096f, 0x097e, 0x0993, 0x09a2, 0x09b1, 0x09dc, + 0x09ee, 0x0a09, 0x0a12, 0x0a4f, 0x0a86, 0x0ab1, 0x0ac3, 0x0ade, + 0x0af6, 0x0b0e, 0x0b1d, 0x0b32, 0x0b44, 0x0b5c, 0x0b68, 0x0b77, + // Entry 80 - BF + 0x0b89, 0x0ba1, 0x0bb6, 0x0bcb, 0x0bdd, 0x0bf5, 0x0bfe, 0x0c2b, + 0x0c40, 0x0c64, 0x0c76, 0x0caa, 0x0cbc, 0x0cce, 0x0ce3, 0x0d01, + 0x0d19, 0x0d25, 0x0d37, 0x0d4f, 0x0d67, 0x0d7c, 0x0d9b, 0x0dad, + 0x0dbf, 0x0dda, 0x0de9, 0x0dfb, 0x0e0a, 0x0e13, 0x0e31, 0x0e4c, + 0x0e61, 0x0e76, 0x0e88, 0x0e97, 0x0ea6, 0x0ec4, 0x0ed3, 0x0ef1, + 0x0f00, 0x0f18, 0x0f2a, 0x0f48, 0x0f5d, 0x0f72, 0x0f81, 0x0f8d, + 0x0fa5, 0x0fb7, 0x0fcc, 0x0fd8, 0x0fe4, 0x1002, 0x1011, 0x1026, + 0x1035, 0x1035, 0x1050, 0x105c, 0x1068, 0x1089, 0x1089, 0x1098, + // Entry C0 - FF + 0x1098, 0x10ba, 0x10e2, 0x10f7, 0x110c, 0x111e, 0x111e, 0x1133, + 0x1133, 0x1133, 0x114b, 0x114b, 0x114b, 0x1154, 0x1154, 0x116f, + 0x116f, 0x1184, 0x1196, 0x11ae, 0x11ae, 0x11ba, 0x11ba, 0x11ba, + 0x11ba, 0x11c6, 0x11d8, 0x11d8, 0x11e4, 0x11e4, 0x11e4, 0x1209, + 0x121e, 0x122d, 0x1239, 0x1239, 0x1239, 0x124e, 0x124e, 0x124e, + 0x125d, 0x125d, 0x126c, 0x126c, 0x1284, 0x1296, 0x1296, 0x12a5, + 0x12a5, 0x12b7, 0x12cc, 0x12cc, 0x12de, 0x12f9, 0x1305, 0x1314, + 0x1329, 0x1335, 0x1341, 0x1363, 0x1372, 0x138d, 0x139f, 0x13b4, + // Entry 100 - 13F + 0x13d6, 0x13e5, 0x13e5, 0x1416, 0x145a, 0x1478, 0x148a, 0x14a5, + 0x14b4, 0x14cf, 0x14e4, 0x14f9, 0x1508, 0x151a, 0x1529, 0x155d, + 0x155d, 0x1572, 0x1588, 0x159b, 0x15aa, 0x15bc, 0x15cb, 0x15d7, + 0x15d7, 0x1602, 0x1614, 0x1629, 0x1648, 0x1648, 0x165a, 0x165a, + 0x166f, 0x1687, 0x1687, 0x168d, 0x168d, 0x16a9, 0x16ce, 0x16ce, + 0x1714, 0x173c, 0x175d, 0x1763, 0x1775, 0x1778, 0x1787, 0x1796, + 0x1796, 0x179f, 0x17bd, 0x17bd, 0x17ef, 0x182a, 0x182a, 0x183c, + 0x185a, 0x1866, 0x1878, 0x189d, 0x18bf, 0x18bf, 0x18bf, 0x18cb, + // Entry 140 - 17F + 0x18e3, 0x18f2, 0x18f5, 0x1916, 0x1916, 0x193d, 0x1952, 0x1964, + 0x198f, 0x19a1, 0x19ad, 0x19b9, 0x19cb, 0x19da, 0x19ec, 0x19ec, + 0x19ec, 0x19fe, 0x1a10, 0x1a22, 0x1a44, 0x1a60, 0x1a60, 0x1a82, + 0x1a97, 0x1aa6, 0x1ab5, 0x1ac7, 0x1ad3, 0x1af7, 0x1af7, 0x1b0c, + 0x1b24, 0x1b4e, 0x1b4e, 0x1b5a, 0x1b5a, 0x1b66, 0x1b7b, 0x1b9a, + 0x1b9a, 0x1b9a, 0x1ba6, 0x1bbe, 0x1bdc, 0x1bfb, 0x1c13, 0x1c2b, + 0x1c46, 0x1c6b, 0x1c6b, 0x1c6b, 0x1c89, 0x1c98, 0x1cb0, 0x1cc5, + 0x1cd1, 0x1ce0, 0x1cf5, 0x1d07, 0x1d19, 0x1d2b, 0x1d3d, 0x1d58, + // Entry 180 - 1BF + 0x1d58, 0x1d58, 0x1d58, 0x1d6a, 0x1d6a, 0x1d7c, 0x1d88, 0x1da4, + 0x1da4, 0x1dc6, 0x1ddb, 0x1ded, 0x1dfc, 0x1e08, 0x1e1a, 0x1e1a, + 0x1e1a, 0x1e32, 0x1e32, 0x1e44, 0x1e56, 0x1e71, 0x1e95, 0x1ea4, + 0x1ea4, 0x1eb3, 0x1ece, 0x1ee0, 0x1eec, 0x1f07, 0x1f23, 0x1f4b, + 0x1f57, 0x1f6f, 0x1f99, 0x1fab, 0x1fc0, 0x1fd2, 0x1fdb, 0x1fdb, + 0x1ff0, 0x200f, 0x201e, 0x2039, 0x2054, 0x2054, 0x2054, 0x2069, + 0x208a, 0x208d, 0x20b1, 0x20bd, 0x20e5, 0x20fd, 0x210f, 0x2124, + 0x2124, 0x213c, 0x215d, 0x216c, 0x218e, 0x218e, 0x219d, 0x21d1, + // Entry 1C0 - 1FF + 0x21e3, 0x2211, 0x223b, 0x2262, 0x2274, 0x2286, 0x2292, 0x22b7, + 0x22d8, 0x22f0, 0x230e, 0x2335, 0x2356, 0x2356, 0x237e, 0x237e, + 0x237e, 0x23a6, 0x23a6, 0x23c4, 0x23c4, 0x23c4, 0x23e8, 0x2406, + 0x243a, 0x2449, 0x2449, 0x2464, 0x2479, 0x2497, 0x2497, 0x2497, + 0x24a6, 0x24b8, 0x24b8, 0x24b8, 0x24b8, 0x24d6, 0x24e8, 0x250c, + 0x2518, 0x2546, 0x255b, 0x256a, 0x2582, 0x2582, 0x25a0, 0x25b2, + 0x25d0, 0x25df, 0x25df, 0x2607, 0x2607, 0x2613, 0x2613, 0x2628, + 0x2659, 0x267e, 0x267e, 0x2696, 0x269f, 0x269f, 0x26b1, 0x26b1, + // Entry 200 - 23F + 0x26b1, 0x26e8, 0x2701, 0x271d, 0x273f, 0x2757, 0x2772, 0x279a, + 0x27a9, 0x27b5, 0x27b5, 0x27c7, 0x27d3, 0x27eb, 0x2806, 0x282b, + 0x2843, 0x2843, 0x2843, 0x2858, 0x2864, 0x2876, 0x2885, 0x289a, + 0x28a3, 0x28b8, 0x28b8, 0x28d0, 0x28eb, 0x28eb, 0x2900, 0x2928, + 0x2941, 0x2941, 0x2953, 0x2953, 0x296e, 0x296e, 0x2986, 0x2998, + 0x29b3, 0x29d1, 0x2a18, 0x2a2d, 0x2a45, 0x2a60, 0x2a69, 0x2a72, + 0x2a72, 0x2a72, 0x2a72, 0x2a72, 0x2a81, 0x2a81, 0x2a93, 0x2aab, + 0x2ac3, 0x2ad5, 0x2ae7, 0x2b08, 0x2b17, 0x2b2c, 0x2b2c, 0x2b38, + // Entry 240 - 27F + 0x2b47, 0x2b5f, 0x2b7a, 0x2b8f, 0x2b8f, 0x2bad, 0x2bc2, 0x2bde, + 0x2bde, 0x2bf0, 0x2c31, 0x2c3d, 0x2c87, 0x2c93, 0x2cc2, 0x2cc2, + 0x2cf9, 0x2d25, 0x2d59, 0x2d84, 0x2dac, 0x2dd7, 0x2e21, 0x2e55, + 0x2e92, 0x2e92, 0x2eba, 0x2ed6, 0x2ef5, 0x2f0a, 0x2f3e, 0x2f6c, + 0x2f84, 0x2fb8, 0x2fe3, 0x3005, 0x3030, +} // Size: 1250 bytes + +const caLangStr string = "" + // Size: 4583 bytes + "àfarabkhazavèsticafrikaansàkanamhàricaragonèsàrabassamèsàvaraimaraazerba" + + "idjanèsbaixkirbielorúsbúlgarbislamabambarabengalítibetàbretóbosniàcatalà" + + "txetxèchamorrocorscreetxeceslau eclesiàstictxuvaixgal·lèsdanèsalemanydiv" + + "ehidzongkaewegrecanglèsesperantoespanyolestoniàbascpersafulfinèsfijiàfer" + + "oèsfrancèsfrisó occidentalirlandèsgaèlic escocèsgallecguaranígujaratiman" + + "xhaussahebreuhindihiri motucroathaitiàhongarèsarmenihererointerlinguaind" + + "onesiinterlingueigboyi sichuaninupiakidoislandèsitaliàinuktitutjaponèsja" + + "vanèsgeorgiàkongokikuiukuanyamakazakhgrenlandèskhmerkannadacoreàkanurica" + + "ixmirikurdkomicòrnickirguísllatíluxemburguèsgandalimburguèslingalalaosià" + + "lituàluba katangaletómalgaixmarshallèsmaorimacedonimalaiàlammongolmarath" + + "imalaimaltèsbirmànauruàndebele septentrionalnepalèsndonganeerlandèsnorue" + + "c nynorsknoruec bokmålndebele meridionalnavahonyanjaoccitàojibwaoromoori" + + "yaossetapanjabipalipolonèspaixtuportuguèsquítxuaretoromànicrundiromanèsr" + + "usruandèssànscritsardsindhisami septentrionalsangosingalèseslovaceslovès" + + "amoàshonasomalialbanèsserbiswazisotho meridionalsundanèssuecsuahilitàmil" + + "telugutadjiktailandèstigrinyaturcmansetswanatongalèsturctsongatàtartahit" + + "iàuigurucraïnèsurdúuzbekvendavietnamitavolapükvalówòlofxosajiddischiorub" + + "azhuangxinèszuluatjehacoliadangmeadiguéafrihiliaghemainuaccadialabamaale" + + "utaalbanès gegaltaic meridionalanglès anticangikaarameuaraucàaraonaarapa" + + "hoarauacàrab egipciparellengua de signes americanaasturiàawadhibalutxiba" + + "linèsbavarèsbasabamumghomalabejabembabenabafutbadagabalutxi occidentalbh" + + "ojpuribicolbinikomblackfootbrajbrahuibodoakooseburiatbuguisekibilinmedum" + + "bacaddocaribcayugaatsamcebuàchigatxibtxatxagataichuukmaripidgin chinookc" + + "hoctawchipewyancherokeexeiennekurd soranicoptetàtar de Crimeafrancès cri" + + "oll de les Seychellescaixubidakotadarguàtaitadelawareslavidogribdinkazar" + + "madogribaix sòrabdoualaneerlandès mitjàdiolajuladazagaembuefikemiliàegip" + + "ci anticekajukelamitaanglès mitjàewondoextremenyfangfilipífonfrancès mit" + + "jàfrancès anticfrisó septentrionalfrisó orientalfriülàgagagaúsxinès gang" + + "ayogbayagueezgilbertèsgilakialt alemany mitjàalt alemany anticconcani de" + + " Goagondigorontalogòticgrebogrec anticalemany suíswayúgusígwichinhaidaxi" + + "nès hakkahawaiàhindi de Fijihiligainonhititahmongalt sòrabxinès xianghup" + + "aibanibibioilocàingúixcrioll anglès de Jamaicalojbanngombamachamejudeope" + + "rsajudeoàrabkarakalpakcabilenckatxinjjukambakawikabardíkanembutyapmakond" + + "ecrioll capverdiàkenyangkorokaingàkhasikhotanèskoyra chiinikakokalenjink" + + "imbundukomi-permiacconcanikosraeàkpellekaratxaikriocareliàkurukhshambala" + + "bafiacologniankúmikkutenailadílangipanjabi occidentallambalesguiàlígurla" + + "kotallombardmongoloziluri septentrionalluba-lulualuisenyolundaluomizoluy" + + "iaxinès clàssiclazmadurèsmafamagahimaithilimakassarmandingamassaimabamor" + + "dovià moksamandarmendemerumauriciàgaèlic irlandès mitjàmakhuwa-mettometa" + + "’micmacminangkabaumanxúmanipurímohawkmorémari occidentalmundangllengüe" + + "s vàriescreekmirandèsmarwarimyenemordovià erzamazanderanixinès min del s" + + "udnapolitànamabaix alemanynewariniasniueàbissiongiemboonnogainòrdic anti" + + "cnovialn’Kosotho septentrionalnuernewari clàssicnyamwesinyankolenyoronze" + + "maosageturc otomàpangasipahlavipampangapapiamentopalauàpicardpidgin de N" + + "igèriaalemany pennsilvaniàpersa anticalemany palatífenicipiemontèspòntic" + + "ponapeàprussiàprovençal anticquitxérajasthanirapanuirarotongàromanyèsrom" + + "boromaníaromanèsrwosandaweiacutarameu samaritàsamburusasaksantalingambay" + + "sangusiciliàescocèssasserèskurd meridionalsenecasenaselkupsonghai orient" + + "alirlandès antictaixelhitxanàrab txadiàsidamosami meridionalsami lulesam" + + "i d’Inarisami skoltsoninkesogdiàsrananserersahosukumasusúsumericomoriàsi" + + "ríac clàssicsiríacsilesiàtemnetesoterenatetuntigretivtokelauèstsakhurkli" + + "ngoniàtlingittalixamazictongatok pisintarokotsimshiàtat meridionaltumbuk" + + "atuvaluàtasawaqtuviniàamazic del Marroc centraludmurtugaríticumbunduarre" + + "lvaivènetvepseflamenc occidentalvòticvunjowalserametowaraywashowarlpirix" + + "inès wucalmucmingreliàsogayaoyapeàyangbenyembacantonèszapotecasímbols Bl" + + "isszelandèszenagaamazic estàndard marroquízunisense contingut lingüístic" + + "zazaàrab estàndard modernalemany austríacalt alemany suísanglès australi" + + "àanglès canadencanglès britànicanglès americàespanyol hispanoamericàesp" + + "anyol europeuespanyol de Mèxicfrancès canadencfrancès suísbaix saxóflame" + + "ncportuguès del Brasilportuguès de Portugalmoldauserbocroatsuahili del C" + + "ongoxinès simplificatxinès tradicional" + +var caLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x000b, 0x0013, 0x001c, 0x0021, 0x0029, 0x0032, + 0x0037, 0x003f, 0x0044, 0x004a, 0x0058, 0x005f, 0x0068, 0x006f, + 0x0076, 0x007d, 0x0085, 0x008c, 0x0092, 0x0099, 0x00a0, 0x00a7, + 0x00af, 0x00b3, 0x00b7, 0x00bb, 0x00cd, 0x00d4, 0x00dd, 0x00e3, + 0x00ea, 0x00f0, 0x00f7, 0x00fa, 0x00fe, 0x0105, 0x010e, 0x0116, + 0x011e, 0x0122, 0x0127, 0x012a, 0x0130, 0x0136, 0x013d, 0x0145, + 0x0156, 0x015f, 0x016f, 0x0175, 0x017d, 0x0185, 0x0189, 0x018f, + 0x0195, 0x019a, 0x01a3, 0x01a8, 0x01af, 0x01b8, 0x01be, 0x01c4, + // Entry 40 - 7F + 0x01cf, 0x01d7, 0x01e2, 0x01e6, 0x01f0, 0x01f7, 0x01fa, 0x0203, + 0x020a, 0x0213, 0x021b, 0x0223, 0x022b, 0x0230, 0x0236, 0x023e, + 0x0244, 0x024f, 0x0254, 0x025b, 0x0261, 0x0267, 0x026f, 0x0273, + 0x0277, 0x027e, 0x0286, 0x028c, 0x0299, 0x029e, 0x02a9, 0x02b0, + 0x02b7, 0x02bd, 0x02c9, 0x02ce, 0x02d5, 0x02e0, 0x02e5, 0x02ed, + 0x02f7, 0x02fd, 0x0304, 0x0309, 0x0310, 0x0316, 0x031d, 0x0332, + 0x033a, 0x0340, 0x034b, 0x0359, 0x0367, 0x0379, 0x037f, 0x0385, + 0x038c, 0x0392, 0x0397, 0x039c, 0x03a2, 0x03a9, 0x03ad, 0x03b5, + // Entry 80 - BF + 0x03bb, 0x03c5, 0x03cd, 0x03d9, 0x03de, 0x03e6, 0x03e9, 0x03f1, + 0x03fa, 0x03fe, 0x0404, 0x0416, 0x041b, 0x0424, 0x042b, 0x0432, + 0x0438, 0x043d, 0x0443, 0x044b, 0x0450, 0x0455, 0x0465, 0x046e, + 0x0472, 0x0479, 0x047f, 0x0485, 0x048b, 0x0495, 0x049d, 0x04a4, + 0x04ac, 0x04b5, 0x04b9, 0x04bf, 0x04c5, 0x04cd, 0x04d2, 0x04dc, + 0x04e1, 0x04e6, 0x04eb, 0x04f5, 0x04fd, 0x0502, 0x0508, 0x050c, + 0x0514, 0x051a, 0x0520, 0x0526, 0x052a, 0x052f, 0x0534, 0x053b, + 0x0542, 0x0542, 0x054a, 0x054f, 0x0553, 0x0559, 0x0560, 0x0566, + // Entry C0 - FF + 0x0572, 0x0583, 0x0590, 0x0596, 0x059c, 0x05a3, 0x05a9, 0x05b0, + 0x05b0, 0x05b0, 0x05b6, 0x05b6, 0x05c2, 0x05c6, 0x05e1, 0x05e9, + 0x05e9, 0x05ef, 0x05f6, 0x05fe, 0x0606, 0x060a, 0x060f, 0x060f, + 0x0616, 0x061a, 0x061f, 0x061f, 0x0623, 0x0628, 0x062e, 0x0640, + 0x0648, 0x064d, 0x0651, 0x0651, 0x0654, 0x065d, 0x065d, 0x065d, + 0x0661, 0x0667, 0x066b, 0x0671, 0x0677, 0x067c, 0x0680, 0x0685, + 0x068c, 0x0691, 0x0696, 0x069c, 0x06a1, 0x06a7, 0x06ac, 0x06b3, + 0x06bb, 0x06c0, 0x06c4, 0x06d2, 0x06d9, 0x06e2, 0x06ea, 0x06f1, + // Entry 100 - 13F + 0x06fc, 0x0701, 0x0701, 0x0711, 0x0732, 0x0739, 0x073f, 0x0746, + 0x074b, 0x0753, 0x0758, 0x075e, 0x0763, 0x0768, 0x076d, 0x0778, + 0x0778, 0x077e, 0x0790, 0x0795, 0x0799, 0x079f, 0x07a3, 0x07a7, + 0x07ae, 0x07ba, 0x07c0, 0x07c7, 0x07d5, 0x07d5, 0x07db, 0x07e4, + 0x07e8, 0x07ef, 0x07ef, 0x07f2, 0x07f2, 0x0801, 0x080f, 0x080f, + 0x0823, 0x0832, 0x083a, 0x083c, 0x0843, 0x084d, 0x0851, 0x0856, + 0x0856, 0x085b, 0x0865, 0x086b, 0x087d, 0x088e, 0x089c, 0x08a1, + 0x08aa, 0x08b0, 0x08b5, 0x08bf, 0x08cc, 0x08d1, 0x08d1, 0x08d6, + // Entry 140 - 17F + 0x08dd, 0x08e2, 0x08ee, 0x08f5, 0x0902, 0x090c, 0x0912, 0x0917, + 0x0921, 0x092d, 0x0931, 0x0935, 0x093b, 0x0941, 0x0948, 0x0948, + 0x0961, 0x0967, 0x096d, 0x0974, 0x097e, 0x0988, 0x0988, 0x0992, + 0x099a, 0x09a0, 0x09a3, 0x09a8, 0x09ac, 0x09b4, 0x09bb, 0x09bf, + 0x09c6, 0x09d7, 0x09de, 0x09e2, 0x09e9, 0x09ee, 0x09f7, 0x0a03, + 0x0a03, 0x0a03, 0x0a07, 0x0a0f, 0x0a17, 0x0a23, 0x0a2a, 0x0a32, + 0x0a38, 0x0a40, 0x0a44, 0x0a44, 0x0a4c, 0x0a52, 0x0a5a, 0x0a5f, + 0x0a68, 0x0a6e, 0x0a75, 0x0a7a, 0x0a7f, 0x0a91, 0x0a96, 0x0a9e, + // Entry 180 - 1BF + 0x0a9e, 0x0aa4, 0x0aa4, 0x0aaa, 0x0ab2, 0x0ab7, 0x0abb, 0x0acd, + 0x0acd, 0x0ad7, 0x0adf, 0x0ae4, 0x0ae7, 0x0aeb, 0x0af0, 0x0aff, + 0x0b02, 0x0b0a, 0x0b0e, 0x0b14, 0x0b1c, 0x0b24, 0x0b2c, 0x0b32, + 0x0b36, 0x0b45, 0x0b4b, 0x0b50, 0x0b54, 0x0b5d, 0x0b75, 0x0b82, + 0x0b89, 0x0b8f, 0x0b9a, 0x0ba0, 0x0ba9, 0x0baf, 0x0bb4, 0x0bc3, + 0x0bca, 0x0bdb, 0x0be0, 0x0be9, 0x0bf0, 0x0bf0, 0x0bf5, 0x0c03, + 0x0c0e, 0x0c20, 0x0c29, 0x0c2d, 0x0c39, 0x0c3f, 0x0c43, 0x0c49, + 0x0c49, 0x0c4f, 0x0c58, 0x0c5d, 0x0c6a, 0x0c70, 0x0c76, 0x0c89, + // Entry 1C0 - 1FF + 0x0c8d, 0x0c9c, 0x0ca4, 0x0cac, 0x0cb1, 0x0cb6, 0x0cbb, 0x0cc6, + 0x0ccd, 0x0cd4, 0x0cdc, 0x0ce6, 0x0ced, 0x0cf3, 0x0d05, 0x0d1a, + 0x0d1a, 0x0d25, 0x0d34, 0x0d3a, 0x0d44, 0x0d4b, 0x0d53, 0x0d5b, + 0x0d6b, 0x0d72, 0x0d72, 0x0d7c, 0x0d83, 0x0d8d, 0x0d96, 0x0d96, + 0x0d9b, 0x0da2, 0x0da2, 0x0da2, 0x0da2, 0x0dab, 0x0dae, 0x0db5, + 0x0dba, 0x0dca, 0x0dd1, 0x0dd6, 0x0ddd, 0x0ddd, 0x0de4, 0x0de9, + 0x0df1, 0x0df9, 0x0e02, 0x0e11, 0x0e17, 0x0e1b, 0x0e1b, 0x0e21, + 0x0e31, 0x0e40, 0x0e40, 0x0e49, 0x0e4c, 0x0e59, 0x0e5f, 0x0e5f, + // Entry 200 - 23F + 0x0e5f, 0x0e6e, 0x0e77, 0x0e85, 0x0e8f, 0x0e96, 0x0e9d, 0x0ea3, + 0x0ea8, 0x0eac, 0x0eac, 0x0eb2, 0x0eb7, 0x0ebd, 0x0ec5, 0x0ed5, + 0x0edc, 0x0ee4, 0x0ee4, 0x0ee9, 0x0eed, 0x0ef3, 0x0ef8, 0x0efd, + 0x0f00, 0x0f0a, 0x0f11, 0x0f1b, 0x0f22, 0x0f27, 0x0f2d, 0x0f32, + 0x0f3b, 0x0f3b, 0x0f41, 0x0f41, 0x0f4a, 0x0f58, 0x0f5f, 0x0f67, + 0x0f6e, 0x0f76, 0x0f8f, 0x0f95, 0x0f9e, 0x0fa5, 0x0faa, 0x0fad, + 0x0fb3, 0x0fb8, 0x0fca, 0x0fca, 0x0fd0, 0x0fd0, 0x0fd5, 0x0fdb, + 0x0fe0, 0x0fe5, 0x0fea, 0x0ff2, 0x0ffb, 0x1001, 0x100b, 0x100f, + // Entry 240 - 27F + 0x1012, 0x1018, 0x101f, 0x1024, 0x1024, 0x102d, 0x1035, 0x1043, + 0x104c, 0x1052, 0x106d, 0x1071, 0x108d, 0x1091, 0x10a8, 0x10a8, + 0x10b9, 0x10ca, 0x10dc, 0x10ec, 0x10fd, 0x110d, 0x1125, 0x1135, + 0x1147, 0x1147, 0x1158, 0x1166, 0x1170, 0x1177, 0x118c, 0x11a2, + 0x11a8, 0x11b2, 0x11c3, 0x11d5, 0x11e7, +} // Size: 1250 bytes + +const csLangStr string = "" + // Size: 7397 bytes + "afarštinaabcházštinaavestánštinaafrikánštinaakanštinaamharštinaaragonšti" + + "naarabštinaásámštinaavarštinaajmarštinaázerbájdžánštinabaškirštinaběloru" + + "štinabulharštinabislamštinabambarštinabengálštinatibetštinabretonštinab" + + "osenštinakatalánštinačečenštinačamorokorsičtinakríjštinačeštinastaroslov" + + "ěnštinačuvaštinavelštinadánštinaněmčinamaledivštinadzongkäeweštinařečti" + + "naangličtinaesperantošpanělštinaestonštinabaskičtinaperštinafulbštinafin" + + "štinafidžijštinafaerštinafrancouzštinafríština (západní)irštinaskotská " + + "gaelštinagalicijštinaguaranštinagudžarátštinamanštinahauštinahebrejština" + + "hindštinahiri motuchorvatštinahaitštinamaďarštinaarménštinahererštinaint" + + "erlinguaindonéštinainterlingueigboštinaiština (sečuánská)inupiakštinaido" + + "islandštinaitalštinainuktitutštinajaponštinajavánštinagruzínštinakonžšti" + + "nakikujštinakuaňamštinakazaštinagrónštinakhmérštinakannadštinakorejština" + + "kanurikašmírštinakurdštinakomijštinakornštinakyrgyzštinalatinalucemburšt" + + "inagandštinalimburštinalingalštinalaoštinalitevštinalubu-katanžštinaloty" + + "štinamalgaštinamaršálštinamaorštinamakedonštinamalajálamštinamongolštin" + + "amaráthštinamalajštinamaltštinabarmštinanaurštinandebele (Zimbabwe)nepál" + + "štinandondštinanizozemštinanorština (nynorsk)norština (bokmål)ndebele (" + + "Jižní Afrika)navažštinaňandžštinaokcitánštinaodžibvejštinaoromštinaurijš" + + "tinaosetštinapaňdžábštinapálípolštinapaštštinaportugalštinakečuánštinaré" + + "torománštinakirundštinarumunštinaruštinakiňarwandštinasanskrtsardštinasi" + + "ndhštinasámština (severní)sangštinasinhálštinaslovenštinaslovinštinasamo" + + "jštinašonštinasomálštinaalbánštinasrbštinasiswatštinasotština (jižní)sun" + + "dštinašvédštinasvahilštinatamilštinatelugštinatádžičtinathajštinatigrini" + + "jštinaturkmenštinasetswanštinatongánštinaturečtinatsongatatarštinatahitš" + + "tinaujgurštinaukrajinštinaurdštinauzbečtinavendavietnamštinavolapükvalon" + + "štinawolofštinaxhoštinajidišjorubštinačuangštinačínštinazuluštinaacehšt" + + "inaakolštinaadangmeadygejštinaarabština (tuniská)afrihiliaghemainštinaak" + + "kadštinaalabamštinaaleutštinaalbánština (Gheg)altajština (jižní)staroang" + + "ličtinaangikaaramejštinamapudungunaraonštinaarapažštinaarabština (alžírs" + + "ká)arawacké jazykyarabština (marocká)arabština (egyptská)asuznaková řeč " + + "(americká)asturštinakotavaawadhštinabalúčštinabalijštinabavorštinabasaba" + + "munbatak tobaghomalabedžabembštinabatavštinabenabafutbadagštinabalúčštin" + + "a (západní)bhojpurštinabikolštinabinibandžarštinakomsiksikabišnuprijskom" + + "anipurštinabachtijárštinabradžštinabrahujštinabodoštinaakooseburjatština" + + "bugištinabulublinštinamedumbacaddokaribštinakajugštinaatsamcebuánštinaki" + + "gačibčačagatajštinačukštinamarijštinačinuk pidžinčoktštinačipevajštinače" + + "rokézštinačejenštinakurdština (sorání)koptštinakapiznonštinaturečtina (k" + + "rymská)kreolština (seychelská)kašubštinadakotštinadargštinataitadelawarš" + + "tinaslejvština (athabaský jazyk)dogribdinkštinazarmštinadogarštinadolnol" + + "užická srbštinakadazandusunštinadualštinaholandština (středověká)jola-fo" + + "nyidjuladazagaembuefikštinaemilijštinaegyptština staráekajukelamitštinaa" + + "ngličtina (středověká)jupikština (středoaljašská)ewondoextremadurštinafa" + + "ngfilipínštinafinština (tornedalská)fonštinafrancouzština (kajunská)fran" + + "couzština (středověká)francouzština (stará)franko-provensálštinafríština" + + " (severní)fríština (východní)furlanštinagaštinagagauzštinačínština (dial" + + "ekty Gan)gayogbajadaríjština (zoroastrijská)geezkiribatštinagilačtinahor" + + "noněmčina (středověká)hornoněmčina (stará)konkánština (Goa)góndštinagoro" + + "ntalogótštinagrebostarořečtinaněmčina (Švýcarsko)wayúuštinafrafragusiigw" + + "ichʼinhaidštinačínština (dialekty Hakka)havajštinahindština (Fidži)hilig" + + "ajnonštinachetitštinahmongštinahornolužická srbštinačínština (dialekty X" + + "iang)hupaibanštinaibibioilokánštinainguštinaingrijštinajamajská kreolšti" + + "nalojbanngombamašamejudeoperštinajudeoarabštinajutštinakarakalpačtinakab" + + "ylštinakačijštinajjukambštinakawikabardinštinakanembutyapmakondekapverdš" + + "tinakenyangkorokaingangkhásíchotánštinakoyra chiinichovarštinazazakština" + + "kakokalendžinkimbundštinakomi-permjačtinakonkánštinakosrajštinakpellekar" + + "ačajevo-balkarštinakriokinaraj-akarelštinakuruchštinašambalabafiakolínšt" + + "inakumyčtinakutenajštinaladinštinalangilahndštinalambštinalezginštinalin" + + "gua franca novaligurštinalivonštinalakotštinalombardštinamongštinalozšti" + + "nalúrština (severní)latgalštinaluba-luluaštinaluiseňolundštinaluoštinami" + + "zoštinaluhjačínština (klasická)lazštinamadurštinamafamagahijštinamaithil" + + "ištinamakasarštinamandingštinamasajštinamabamokšanštinamandarmendemeruma" + + "uricijská kreolštinairština (středověká)makhuwa-meettometa’micmacminangk" + + "abaumandžuštinamanipurštinamohawkštinamosimarijština (západní)mundangslo" + + "žené (víceřádkové) jazykykríkštinamirandštinamárvárštinamentavajštinamy" + + "eneerzjanštinamázandaránštinačínština (dialekty Minnan)neapolštinanamašt" + + "inadolnoněmčinanévárštinaniasniueštinaao (jazyky Nágálandu)kwasiongiembo" + + "onnogajštinanorština historickánovialn’kosotština (severní)nuerštinanewa" + + "rština (klasická)ňamwežštinaňankolštinaňorštinanzimaosageturečtina (osma" + + "nská)pangasinanštinapahlavštinapapangaupapiamentopalauštinapicardštinani" + + "gerijský pidžinněmčina (pensylvánská)němčina (plautdietsch)staroperština" + + "falčtinaféničtinapiemonštinapontštinapohnpeištinapruštinaprovensálštinak" + + "ičékečuánština (chimborazo)rádžastánštinarapanujštinararotongánštinaroma" + + "ňolštinarífštinaromboromštinarotumanštinarusínštinarovianštinaarumunšti" + + "narwasandawštinajakutštinasamarštinasamburusasakštinasantálštinasaurášte" + + "rštinangambaysangoštinasicilštinaskotštinasassarštinakurdština (jižní)se" + + "necasenaserištinaselkupštinakoyraboro senniirština (stará)žemaitštinataš" + + "elhitšanštinaarabština (čadská)sidamoněmčina (slezská)selajarštinasámšti" + + "na (jižní)sámština (lulejská)sámština (inarijská)sámština (skoltská)soni" + + "kštinasogdštinasranan tongosererštinasahofríština (saterlandská)sukumasu" + + "susumerštinakomorštinasyrština (klasická)syrštinaslezštinatuluštinatemne" + + "tesoterenotetumštinatigrejštinativštinatokelauštinacachurštinaklingonšti" + + "natlingittalyštinatamašektonžština (nyasa)tok pisinturojštinatarokotsako" + + "nštinatsimšijské jazykytatštinatumbukštinatuvalštinatasawaqtuvinštinatam" + + "azight (střední Maroko)udmurtštinaugaritštinaumbundukořenvaibenátštinave" + + "pštinavlámština (západní)němčina (mohansko-franské dialekty)votštinavõru" + + "štinavunjoněmčina (walser)wolajtštinawarajštinawaštinawarlpiričínština " + + "(dialekty Wu)kalmyčtinamingrelštinasogštinajaoštinajapštinajangbenštinay" + + "embanheengatukantonštinazapotéčtinabliss systémzélandštinazenagatamazigh" + + "t (standardní marocký)zunijštinažádný jazykový obsahzazaarabština (moder" + + "ní standardní)němčina standardní (Švýcarsko)angličtina (Velká Británie)a" + + "ngličtina (USA)španělština (Evropa)dolnosaštinavlámštinaportugalština (E" + + "vropa)moldavštinasrbochorvatštinasvahilština (Kongo)čínština (zjednoduše" + + "ná)" + +var csLangIdx = []uint16{ // 612 elements + // Entry 0 - 3F + 0x0000, 0x000a, 0x0017, 0x0025, 0x0033, 0x003d, 0x0048, 0x0054, + 0x005e, 0x006a, 0x0074, 0x007f, 0x0094, 0x00a1, 0x00ae, 0x00ba, + 0x00c6, 0x00d2, 0x00df, 0x00ea, 0x00f6, 0x0101, 0x010f, 0x011c, + 0x0123, 0x012e, 0x0139, 0x0142, 0x0154, 0x015f, 0x0168, 0x0172, + 0x017b, 0x0188, 0x0190, 0x0199, 0x01a2, 0x01ad, 0x01b6, 0x01c4, + 0x01cf, 0x01da, 0x01e3, 0x01ed, 0x01f6, 0x0203, 0x020d, 0x021b, + 0x0231, 0x0239, 0x024c, 0x0259, 0x0265, 0x0275, 0x027e, 0x0287, + 0x0293, 0x029d, 0x02a6, 0x02b3, 0x02bd, 0x02c9, 0x02d5, 0x02e0, + // Entry 40 - 7F + 0x02eb, 0x02f8, 0x0303, 0x030d, 0x0323, 0x0330, 0x0333, 0x033f, + 0x0349, 0x0358, 0x0363, 0x036f, 0x037c, 0x0387, 0x0392, 0x039f, + 0x03a9, 0x03b4, 0x03c0, 0x03cc, 0x03d7, 0x03dd, 0x03eb, 0x03f5, + 0x0400, 0x040a, 0x0416, 0x041c, 0x042a, 0x0434, 0x0440, 0x044c, + 0x0455, 0x0460, 0x0472, 0x047c, 0x0487, 0x0495, 0x049f, 0x04ac, + 0x04bc, 0x04c8, 0x04d5, 0x04e0, 0x04ea, 0x04f4, 0x04fe, 0x0510, + 0x051c, 0x0527, 0x0534, 0x0547, 0x055a, 0x0572, 0x057e, 0x058b, + 0x0599, 0x05a8, 0x05b2, 0x05bc, 0x05c6, 0x05d6, 0x05dc, 0x05e5, + // Entry 80 - BF + 0x05f0, 0x05fe, 0x060c, 0x061d, 0x0629, 0x0634, 0x063c, 0x064c, + 0x0653, 0x065d, 0x0668, 0x067d, 0x0687, 0x0694, 0x06a0, 0x06ac, + 0x06b7, 0x06c1, 0x06cd, 0x06d9, 0x06e2, 0x06ee, 0x0701, 0x070b, + 0x0717, 0x0723, 0x072e, 0x0739, 0x0746, 0x0750, 0x075e, 0x076b, + 0x0778, 0x0785, 0x078f, 0x0795, 0x07a0, 0x07ab, 0x07b6, 0x07c3, + 0x07cc, 0x07d6, 0x07db, 0x07e8, 0x07f0, 0x07fb, 0x0806, 0x080f, + 0x0815, 0x0820, 0x082c, 0x0837, 0x0841, 0x084b, 0x0855, 0x085c, + 0x0868, 0x087d, 0x0885, 0x088a, 0x0893, 0x089e, 0x08aa, 0x08b5, + // Entry C0 - FF + 0x08c8, 0x08dd, 0x08ed, 0x08f3, 0x08ff, 0x0909, 0x0914, 0x0921, + 0x0939, 0x0939, 0x0949, 0x095e, 0x0974, 0x0977, 0x0991, 0x099c, + 0x09a2, 0x09ad, 0x09ba, 0x09c5, 0x09d0, 0x09d4, 0x09d9, 0x09e3, + 0x09ea, 0x09f0, 0x09fa, 0x0a05, 0x0a09, 0x0a0e, 0x0a19, 0x0a32, + 0x0a3f, 0x0a4a, 0x0a4e, 0x0a5c, 0x0a5f, 0x0a66, 0x0a80, 0x0a90, + 0x0a9c, 0x0aa8, 0x0ab2, 0x0ab8, 0x0ac4, 0x0ace, 0x0ad2, 0x0adc, + 0x0ae3, 0x0ae8, 0x0af3, 0x0afe, 0x0b03, 0x0b10, 0x0b14, 0x0b1b, + 0x0b29, 0x0b33, 0x0b3e, 0x0b4c, 0x0b57, 0x0b65, 0x0b74, 0x0b80, + // Entry 100 - 13F + 0x0b95, 0x0b9f, 0x0bad, 0x0bc2, 0x0bdb, 0x0be7, 0x0bf2, 0x0bfc, + 0x0c01, 0x0c0e, 0x0c2c, 0x0c32, 0x0c3c, 0x0c46, 0x0c51, 0x0c69, + 0x0c7b, 0x0c85, 0x0ca1, 0x0cab, 0x0cb0, 0x0cb6, 0x0cba, 0x0cc4, + 0x0cd0, 0x0ce2, 0x0ce8, 0x0cf4, 0x0d0f, 0x0d2e, 0x0d34, 0x0d44, + 0x0d48, 0x0d56, 0x0d6e, 0x0d77, 0x0d91, 0x0daf, 0x0dc6, 0x0ddd, + 0x0df2, 0x0e09, 0x0e15, 0x0e1d, 0x0e29, 0x0e43, 0x0e47, 0x0e4c, + 0x0e69, 0x0e6d, 0x0e7a, 0x0e84, 0x0ea2, 0x0eb9, 0x0ecc, 0x0ed7, + 0x0ee0, 0x0eea, 0x0eef, 0x0efd, 0x0f14, 0x0f20, 0x0f26, 0x0f2b, + // Entry 140 - 17F + 0x0f34, 0x0f3e, 0x0f5a, 0x0f65, 0x0f78, 0x0f88, 0x0f94, 0x0f9f, + 0x0fb7, 0x0fd3, 0x0fd7, 0x0fe1, 0x0fe7, 0x0ff4, 0x0ffe, 0x100a, + 0x101f, 0x1025, 0x102b, 0x1032, 0x1040, 0x104f, 0x1058, 0x1067, + 0x1072, 0x107e, 0x1081, 0x108b, 0x108f, 0x109d, 0x10a4, 0x10a8, + 0x10af, 0x10bc, 0x10c3, 0x10c7, 0x10cf, 0x10d6, 0x10e3, 0x10ef, + 0x10fb, 0x1106, 0x110a, 0x1114, 0x1121, 0x1132, 0x113f, 0x114b, + 0x1151, 0x1169, 0x116d, 0x1176, 0x1181, 0x118d, 0x1195, 0x119a, + 0x11a6, 0x11b0, 0x11bd, 0x11c8, 0x11cd, 0x11d8, 0x11e2, 0x11ee, + // Entry 180 - 1BF + 0x1200, 0x120b, 0x1216, 0x1221, 0x122e, 0x1238, 0x1241, 0x1256, + 0x1262, 0x1272, 0x127a, 0x1284, 0x128d, 0x1297, 0x129c, 0x12b3, + 0x12bc, 0x12c7, 0x12cb, 0x12d8, 0x12e6, 0x12f3, 0x1300, 0x130b, + 0x130f, 0x131c, 0x1322, 0x1327, 0x132b, 0x1343, 0x135b, 0x1369, + 0x1370, 0x1376, 0x1381, 0x138e, 0x139b, 0x13a7, 0x13ab, 0x13c2, + 0x13c9, 0x13eb, 0x13f6, 0x1402, 0x1410, 0x141e, 0x1423, 0x142f, + 0x1441, 0x145e, 0x146a, 0x1474, 0x1482, 0x148f, 0x1493, 0x149d, + 0x14b4, 0x14ba, 0x14c3, 0x14ce, 0x14e3, 0x14e9, 0x14ef, 0x1503, + // Entry 1C0 - 1FF + 0x150d, 0x1524, 0x1532, 0x153f, 0x1549, 0x154e, 0x1553, 0x1569, + 0x1579, 0x1585, 0x158d, 0x1597, 0x15a2, 0x15ae, 0x15c1, 0x15db, + 0x15f3, 0x1601, 0x160a, 0x1615, 0x1621, 0x162b, 0x1638, 0x1641, + 0x1651, 0x1657, 0x1672, 0x1684, 0x1691, 0x16a2, 0x16b0, 0x16ba, + 0x16bf, 0x16c8, 0x16d5, 0x16e1, 0x16ed, 0x16f9, 0x16fc, 0x1708, + 0x1713, 0x171e, 0x1725, 0x1730, 0x173d, 0x174e, 0x1755, 0x1760, + 0x176b, 0x1775, 0x1781, 0x1795, 0x179b, 0x179f, 0x17a9, 0x17b5, + 0x17c4, 0x17d5, 0x17e2, 0x17eb, 0x17f5, 0x180a, 0x1810, 0x1824, + // Entry 200 - 23F + 0x1831, 0x1845, 0x185b, 0x1872, 0x1888, 0x1893, 0x189d, 0x18a9, + 0x18b4, 0x18b8, 0x18d2, 0x18d8, 0x18dc, 0x18e7, 0x18f2, 0x1907, + 0x1910, 0x191a, 0x1924, 0x1929, 0x192d, 0x1933, 0x193e, 0x194a, + 0x1953, 0x1960, 0x196c, 0x1979, 0x1980, 0x198a, 0x1992, 0x19a5, + 0x19ae, 0x19b9, 0x19bf, 0x19cb, 0x19de, 0x19e7, 0x19f3, 0x19fe, + 0x1a05, 0x1a10, 0x1a2c, 0x1a38, 0x1a44, 0x1a4b, 0x1a51, 0x1a54, + 0x1a60, 0x1a69, 0x1a80, 0x1aa6, 0x1aaf, 0x1aba, 0x1abf, 0x1ad1, + 0x1add, 0x1ae8, 0x1af0, 0x1af8, 0x1b11, 0x1b1c, 0x1b29, 0x1b32, + // Entry 240 - 27F + 0x1b3b, 0x1b44, 0x1b51, 0x1b56, 0x1b5f, 0x1b6b, 0x1b78, 0x1b85, + 0x1b92, 0x1b98, 0x1bb8, 0x1bc3, 0x1bdb, 0x1bdf, 0x1c00, 0x1c00, + 0x1c00, 0x1c23, 0x1c23, 0x1c23, 0x1c41, 0x1c52, 0x1c52, 0x1c69, + 0x1c69, 0x1c69, 0x1c69, 0x1c69, 0x1c76, 0x1c81, 0x1c81, 0x1c98, + 0x1ca4, 0x1cb5, 0x1cc9, 0x1ce5, +} // Size: 1248 bytes + +const daLangStr string = "" + // Size: 4141 bytes + "afarabkhasiskavestanafrikaansakanamhariskaragonesiskarabiskassamesiskava" + + "riskaymaraaserbajdsjanskbashkirhviderussiskbulgarskbislamabambarabengali" + + "tibetanskbretonskbosniskcatalansktjetjenskchamorrokorsikanskcreetjekkisk" + + "kirkeslaviskchuvashwalisiskdansktyskdivehidzongkhaewegræskengelskesperan" + + "tospanskestiskbaskiskpersiskfulahfinskfijianskfærøskfranskfrisiskirsksko" + + "tsk gæliskgaliciskguaranigujaratimanxhausahebraiskhindihirimotukroatiskh" + + "aitiskungarskarmenskhererointerlinguaindonesiskinterlingueigbosichuan yi" + + "inupiaqidoislandskitalienskinuktitutjapanskjavanesiskgeorgiskkongokikuyu" + + "kuanyamakasakhiskgrønlandskkhmerkannadakoreanskkanurikashmirikurdiskkomi" + + "corniskkirgisisklatinluxembourgskgandalimburgsklingalalaolitauiskluba-Ka" + + "tangalettiskmalagassiskmarshallesemaorimakedonskmalayalammongolskmarathi" + + "skmalajiskmaltesiskburmesisknaurunordndebelenepalesiskndongahollandsknyn" + + "orsknorsk bokmålsydndebelenavajonyanjaoccitanskojibwaoromooriyaossetiskp" + + "unjabiskpalipolskpashtoportugisiskquechuarætoromanskrundirumænskrussiskk" + + "inyarwandasanskritsardinsksindhinordsamisksangosingalesiskslovakiskslove" + + "nsksamoanskshonasomaliskalbanskserbiskswatisydsothosundanesisksvenskswah" + + "ilitamilsktelugutadsjikiskthaitigrinyaturkmensktswanatongansktyrkisktson" + + "gatatarisktahitianskuyguriskukrainskurduusbekiskvendavietnamesiskvolapyk" + + "vallonskwolofisiXhosajiddischyorubazhuangkinesiskzuluachinesiskacoliadan" + + "gmeadygheafrihiliaghemainuakkadiskaleutisksydaltaiskoldengelskangikaaram" + + "æiskmapudungunarapahoarawakasuasturiskawadhibaluchibalinesiskbasaabamun" + + "ghomalabejabembabenabafutvestbaluchibhojpuribikolbinikomsiksikabrajbodob" + + "akossiburiatiskbuginesiskbulublinmedumbacaddocaribiskcayugaatsamcebuanoc" + + "higachibchachagataichuukesemarichinookchoctawchipewyancherokeecheyenneso" + + "ranikoptiskkrim-tyrkiskseselwa (kreol-fransk)kasjubiskdakotadargwataitad" + + "elawareathapaskiskdogribdinkazarmadogrinedersorbiskdualamiddelhollandskj" + + "ola-fonyidyuladazagakiembuefikoldegyptiskekajukelamitiskmiddelengelskewo" + + "ndofangfilippinskfonmiddelfranskoldfransknordfrisiskøstfrisiskfriulianga" + + "gagauziskgan-kinesiskgayogbayageezgilbertesiskmiddelhøjtyskoldhøjtyskgon" + + "digorontalogotiskgrebooldgræskschweizertyskgusiigwichinhaidahakka-kinesi" + + "skhawaiianskhiligaynonhittitiskhmongøvresorbiskxiang-kinesiskhupaibanibi" + + "bioilokoingushlojbanngombamachamejødisk-persiskjødisk-arabiskkarakalpaki" + + "skkabyliskkachinjjukambakawikabardiankanembutyapmakondekapverdiskkorokha" + + "sikhotanesiskkoyra-chiinikakokalenjinkimbundukomi-permjakiskkonkanikosra" + + "eankpellekaratjai-balkarkarelskkurukhshambalabafiakölschkymykkutenajladi" + + "nolangilahndalambalezghianlakotamongolozinordluriluba-Lulualuisenolundal" + + "uolushailuyanamaduresemafamagahimaithilimakasarmandingomasaimabamokshama" + + "ndarmendemerumorisyenmiddelirskmakhuwa-meettometamicmacminangkabaumanchu" + + "manipurimohawkmossimundangflere sprogcreekmirandesiskmarwarimyeneerzyama" + + "zeniskmin-kinesiskneapolitansknamanedertysknewariniasniueanskkwasiongiem" + + "boonnogaioldislandskn-konordsothonuerklassisk newarisknyamwezinyankoleny" + + "oro-sprognzimaosageosmannisk tyrkiskpangasinanpahlavipampangapapiamentop" + + "alauansknigeriansk pidginoldpersiskfønikiskponapepreussiskoldprovencalsk" + + "quichérajasthanirapanuirarotongaromboromaniarumænskrwasandaweyakutsamari" + + "tansk aramæisksamburusasaksantalingambaysangusicilianskskotsksydkurdisks" + + "enecasenaselkupiskkoyraboro sennioldirsktachelhitshantchadisk arabisksid" + + "amosydsamisklulesamiskenaresamiskskoltesamisksoninkesogdiansksranan tong" + + "oserersahosukumasususumeriskshimaoreklassisk syrisksyrisktemnetesotereno" + + "tetumtigretivitokelauklingontlingittamasheknyasa tongansktok pisintaroko" + + "tsimshisktumbukatuvalutasawaqtuviniancentralmarokkansk tamazightudmurtug" + + "aristiskumbundurodvaivotiskvunjowalsertyskwalamowaraywashowalbiriwu-kine" + + "siskkalmyksogayaoyapeseyangbenyembakantonesiskzapotecblissymbolerzenagat" + + "amazightzuniintet sprogligt indholdzazamoderne standardarabiskøstrigsk t" + + "yskschweizerhøjtyskaustralsk engelskcanadisk engelskbritisk engelskameri" + + "kansk engelsklatinamerikansk spanskeuropæisk spanskmexicansk spanskcanad" + + "isk franskschweizisk franskflamskbrasiliansk portugisiskeuropæisk portug" + + "isiskmoldoviskserbokroatiskcongolesisk swahiliforenklet kinesisktraditio" + + "nelt kinesisk" + +var daLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x0014, 0x001d, 0x0021, 0x0029, 0x0034, + 0x003b, 0x0045, 0x004c, 0x0052, 0x0060, 0x0067, 0x0073, 0x007b, + 0x0082, 0x0089, 0x0090, 0x0099, 0x00a1, 0x00a8, 0x00b1, 0x00ba, + 0x00c2, 0x00cc, 0x00d0, 0x00d8, 0x00e4, 0x00eb, 0x00f3, 0x00f8, + 0x00fc, 0x0102, 0x010a, 0x010d, 0x0113, 0x011a, 0x0123, 0x0129, + 0x012f, 0x0136, 0x013d, 0x0142, 0x0147, 0x014f, 0x0157, 0x015d, + 0x0164, 0x0168, 0x0176, 0x017e, 0x0185, 0x018d, 0x0191, 0x0196, + 0x019e, 0x01a3, 0x01ab, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01ce, + // Entry 40 - 7F + 0x01d9, 0x01e3, 0x01ee, 0x01f2, 0x01fc, 0x0203, 0x0206, 0x020e, + 0x0217, 0x0220, 0x0227, 0x0231, 0x0239, 0x023e, 0x0244, 0x024c, + 0x0255, 0x0260, 0x0265, 0x026c, 0x0274, 0x027a, 0x0282, 0x0289, + 0x028d, 0x0294, 0x029d, 0x02a2, 0x02ae, 0x02b3, 0x02bc, 0x02c3, + 0x02c6, 0x02ce, 0x02da, 0x02e1, 0x02ec, 0x02f7, 0x02fc, 0x0305, + 0x030e, 0x0316, 0x031f, 0x0327, 0x0330, 0x0339, 0x033e, 0x0349, + 0x0353, 0x0359, 0x0362, 0x0369, 0x0376, 0x0380, 0x0386, 0x038c, + 0x0395, 0x039b, 0x03a0, 0x03a5, 0x03ad, 0x03b6, 0x03ba, 0x03bf, + // Entry 80 - BF + 0x03c5, 0x03d0, 0x03d7, 0x03e3, 0x03e8, 0x03f0, 0x03f7, 0x0402, + 0x040a, 0x0412, 0x0418, 0x0422, 0x0427, 0x0432, 0x043b, 0x0443, + 0x044b, 0x0450, 0x0458, 0x045f, 0x0466, 0x046b, 0x0473, 0x047e, + 0x0484, 0x048b, 0x0492, 0x0498, 0x04a2, 0x04a6, 0x04ae, 0x04b7, + 0x04bd, 0x04c5, 0x04cc, 0x04d2, 0x04da, 0x04e4, 0x04ec, 0x04f4, + 0x04f8, 0x0500, 0x0505, 0x0511, 0x0518, 0x0520, 0x0525, 0x052d, + 0x0535, 0x053b, 0x0541, 0x0549, 0x054d, 0x0557, 0x055c, 0x0563, + 0x0569, 0x0569, 0x0571, 0x0576, 0x057a, 0x0582, 0x0582, 0x058a, + // Entry C0 - FF + 0x058a, 0x0594, 0x059e, 0x05a4, 0x05ad, 0x05b7, 0x05b7, 0x05be, + 0x05be, 0x05be, 0x05c4, 0x05c4, 0x05c4, 0x05c7, 0x05c7, 0x05cf, + 0x05cf, 0x05d5, 0x05dc, 0x05e6, 0x05e6, 0x05eb, 0x05f0, 0x05f0, + 0x05f7, 0x05fb, 0x0600, 0x0600, 0x0604, 0x0609, 0x0609, 0x0614, + 0x061c, 0x0621, 0x0625, 0x0625, 0x0628, 0x062f, 0x062f, 0x062f, + 0x0633, 0x0633, 0x0637, 0x063e, 0x0647, 0x0651, 0x0655, 0x0659, + 0x0660, 0x0665, 0x066d, 0x0673, 0x0678, 0x067f, 0x0684, 0x068b, + 0x0693, 0x069b, 0x069f, 0x06a6, 0x06ad, 0x06b6, 0x06be, 0x06c6, + // Entry 100 - 13F + 0x06cc, 0x06d3, 0x06d3, 0x06df, 0x06f5, 0x06fe, 0x0704, 0x070a, + 0x070f, 0x0717, 0x0722, 0x0728, 0x072d, 0x0732, 0x0737, 0x0743, + 0x0743, 0x0748, 0x0757, 0x0761, 0x0766, 0x076c, 0x0772, 0x0776, + 0x0776, 0x0781, 0x0787, 0x0790, 0x079d, 0x079d, 0x07a3, 0x07a3, + 0x07a7, 0x07b1, 0x07b1, 0x07b4, 0x07b4, 0x07c0, 0x07c9, 0x07c9, + 0x07d4, 0x07df, 0x07e7, 0x07e9, 0x07f2, 0x07fe, 0x0802, 0x0807, + 0x0807, 0x080b, 0x0817, 0x0817, 0x0825, 0x0830, 0x0830, 0x0835, + 0x083e, 0x0844, 0x0849, 0x0852, 0x085f, 0x085f, 0x085f, 0x0864, + // Entry 140 - 17F + 0x086b, 0x0870, 0x087e, 0x0888, 0x0888, 0x0892, 0x089b, 0x08a0, + 0x08ac, 0x08ba, 0x08be, 0x08c2, 0x08c8, 0x08cd, 0x08d3, 0x08d3, + 0x08d3, 0x08d9, 0x08df, 0x08e6, 0x08f5, 0x0904, 0x0904, 0x0911, + 0x0919, 0x091f, 0x0922, 0x0927, 0x092b, 0x0934, 0x093b, 0x093f, + 0x0946, 0x0950, 0x0950, 0x0954, 0x0954, 0x0959, 0x0964, 0x0970, + 0x0970, 0x0970, 0x0974, 0x097c, 0x0984, 0x0993, 0x099a, 0x09a2, + 0x09a8, 0x09b7, 0x09b7, 0x09b7, 0x09be, 0x09c4, 0x09cc, 0x09d1, + 0x09d8, 0x09dd, 0x09e4, 0x09ea, 0x09ef, 0x09f5, 0x09fa, 0x0a02, + // Entry 180 - 1BF + 0x0a02, 0x0a02, 0x0a02, 0x0a08, 0x0a08, 0x0a0d, 0x0a11, 0x0a19, + 0x0a19, 0x0a23, 0x0a2a, 0x0a2f, 0x0a32, 0x0a38, 0x0a3e, 0x0a3e, + 0x0a3e, 0x0a46, 0x0a4a, 0x0a50, 0x0a58, 0x0a5f, 0x0a67, 0x0a6c, + 0x0a70, 0x0a76, 0x0a7c, 0x0a81, 0x0a85, 0x0a8d, 0x0a97, 0x0aa5, + 0x0aa9, 0x0aaf, 0x0aba, 0x0ac0, 0x0ac8, 0x0ace, 0x0ad3, 0x0ad3, + 0x0ada, 0x0ae5, 0x0aea, 0x0af5, 0x0afc, 0x0afc, 0x0b01, 0x0b06, + 0x0b0e, 0x0b1a, 0x0b26, 0x0b2a, 0x0b33, 0x0b39, 0x0b3d, 0x0b45, + 0x0b45, 0x0b4b, 0x0b54, 0x0b59, 0x0b64, 0x0b64, 0x0b68, 0x0b71, + // Entry 1C0 - 1FF + 0x0b75, 0x0b86, 0x0b8e, 0x0b96, 0x0ba1, 0x0ba6, 0x0bab, 0x0bbc, + 0x0bc6, 0x0bcd, 0x0bd5, 0x0bdf, 0x0be8, 0x0be8, 0x0bf9, 0x0bf9, + 0x0bf9, 0x0c03, 0x0c03, 0x0c0c, 0x0c0c, 0x0c0c, 0x0c12, 0x0c1b, + 0x0c29, 0x0c30, 0x0c30, 0x0c3a, 0x0c41, 0x0c4a, 0x0c4a, 0x0c4a, + 0x0c4f, 0x0c55, 0x0c55, 0x0c55, 0x0c55, 0x0c5e, 0x0c61, 0x0c68, + 0x0c6d, 0x0c82, 0x0c89, 0x0c8e, 0x0c95, 0x0c95, 0x0c9c, 0x0ca1, + 0x0cab, 0x0cb1, 0x0cb1, 0x0cbb, 0x0cc1, 0x0cc5, 0x0cc5, 0x0cce, + 0x0cdd, 0x0ce4, 0x0ce4, 0x0ced, 0x0cf1, 0x0d01, 0x0d07, 0x0d07, + // Entry 200 - 23F + 0x0d07, 0x0d10, 0x0d1a, 0x0d25, 0x0d31, 0x0d38, 0x0d41, 0x0d4d, + 0x0d52, 0x0d56, 0x0d56, 0x0d5c, 0x0d60, 0x0d68, 0x0d70, 0x0d7f, + 0x0d85, 0x0d85, 0x0d85, 0x0d8a, 0x0d8e, 0x0d94, 0x0d99, 0x0d9e, + 0x0da2, 0x0da9, 0x0da9, 0x0db0, 0x0db7, 0x0db7, 0x0dbf, 0x0dcd, + 0x0dd6, 0x0dd6, 0x0ddc, 0x0ddc, 0x0de5, 0x0de5, 0x0dec, 0x0df2, + 0x0df9, 0x0e01, 0x0e1c, 0x0e22, 0x0e2c, 0x0e33, 0x0e36, 0x0e39, + 0x0e39, 0x0e39, 0x0e39, 0x0e39, 0x0e3f, 0x0e3f, 0x0e44, 0x0e4e, + 0x0e54, 0x0e59, 0x0e5e, 0x0e65, 0x0e70, 0x0e76, 0x0e76, 0x0e7a, + // Entry 240 - 27F + 0x0e7d, 0x0e83, 0x0e8a, 0x0e8f, 0x0e8f, 0x0e9a, 0x0ea1, 0x0ead, + 0x0ead, 0x0eb3, 0x0ebc, 0x0ec0, 0x0ed7, 0x0edb, 0x0ef2, 0x0ef2, + 0x0f00, 0x0f11, 0x0f22, 0x0f32, 0x0f41, 0x0f53, 0x0f69, 0x0f7a, + 0x0f8a, 0x0f8a, 0x0f99, 0x0faa, 0x0faa, 0x0fb0, 0x0fc7, 0x0fdd, + 0x0fe6, 0x0ff3, 0x1006, 0x1018, 0x102d, +} // Size: 1250 bytes + +const deLangStr string = "" + // Size: 5600 bytes + "AfarAbchasischAvestischAfrikaansAkanAmharischAragonesischArabischAssames" + + "ischAwarischAymaraAserbaidschanischBaschkirischWeißrussischBulgarischBis" + + "lamaBambaraBengalischTibetischBretonischBosnischKatalanischTschetschenis" + + "chChamorroKorsischCreeTschechischKirchenslawischTschuwaschischWalisischD" + + "änischDeutschDhivehiDzongkhaEweGriechischEnglischEsperantoSpanischEstni" + + "schBaskischPersischFulFinnischFidschiFäröischFranzösischWestfriesischIri" + + "schSchottisches GälischGalicischGuaraniGujaratiManxHaussaHebräischHindiH" + + "iri-MotuKroatischHaiti-KreolischUngarischArmenischHereroInterlinguaIndon" + + "esischInterlingueIgboYiInupiakIdoIsländischItalienischInuktitutJapanisch" + + "JavanischGeorgischKongolesischKikuyuKwanyamaKasachischGrönländischKhmerK" + + "annadaKoreanischKanuriKaschmiriKurdischKomiKornischKirgisischLateinLuxem" + + "burgischGandaLimburgischLingalaLaotischLitauischLuba-KatangaLettischMada" + + "gassischMarschallesischMaoriMazedonischMalayalamMongolischMarathiMalaiis" + + "chMaltesischBirmanischNauruischNord-NdebeleNepalesischNdongaNiederländis" + + "chNorwegisch NynorskNorwegisch BokmålSüd-NdebeleNavajoNyanjaOkzitanischO" + + "jibwaOromoOriyaOssetischPunjabiPaliPolnischPaschtuPortugiesischQuechuaRä" + + "toromanischRundiRumänischRussischKinyarwandaSanskritSardischSindhiNordsa" + + "mischSangoSinghalesischSlowakischSlowenischSamoanischShonaSomaliAlbanisc" + + "hSerbischSwaziSüd-SothoSundanesischSchwedischSuaheliTamilTeluguTadschiki" + + "schThailändischTigrinyaTurkmenischTswanaTongaischTürkischTsongaTatarisch" + + "TahitischUigurischUkrainischUrduUsbekischVendaVietnamesischVolapükWallon" + + "ischWolofXhosaJiddischYorubaZhuangChinesischZuluAcehAcholiAdangmeAdygeis" + + "chTunesisches ArabischAfrihiliAghemAinuAkkadischAlabamaAleutischGegischS" + + "üd-AltaischAltenglischAngikaAramäischMapudungunAraonaArapahoAlgerisches" + + " ArabischArawakMarokkanisches ArabischÄgyptisches ArabischAsuAmerikanisc" + + "he GebärdenspracheAsturianischKotavaAwadhiBelutschischBalinesischBairisc" + + "hBasaaBamunBatak TobaGhomalaBedauyeBembaBetawiBenaBafutBadagaWestliches " + + "BelutschiBhodschpuriBikolBiniBanjaresischKomBlackfootBishnupriyaBachtiar" + + "ischBraj-BhakhaBrahuiBodoAkooseBurjatischBuginesischBuluBlinMedumbaCaddo" + + "KaribischCayugaAtsamCebuanoRukigaChibchaTschagataischChuukesischMariChin" + + "ookChoctawChipewyanCherokeeCheyenneZentralkurdischKoptischCapiznonKrimta" + + "tarischSeychellenkreolKaschubischDakotaDarginischTaitaDelawareSlaveDogri" + + "bDinkaZarmaDogriNiedersorbischZentral-DusunDualaMittelniederländischDiol" + + "aDyulaDazagaEmbuEfikEmilianischÄgyptischEkajukElamischMittelenglischZent" + + "ral-Alaska-YupikEwondoExtremadurischPangweFilipinoMeänkieliFonCajunMitte" + + "lfranzösischAltfranzösischFrankoprovenzalischNordfriesischOstfriesischFr" + + "iaulischGaGagausischGanGayoGbayaGabriGeezKiribatischGilakiMittelhochdeut" + + "schAlthochdeutschGoa-KonkaniGondiMongondouGotischGreboAltgriechischSchwe" + + "izerdeutschWayúuFarefareGusiiKutchinHaidaHakkaHawaiischFidschi-HindiHili" + + "gaynonHethitischMiaoObersorbischXiangHupaIbanIbibioIlokanoInguschischIsc" + + "horischJamaikanisch-KreolischLojbanNgombaMachameJüdisch-PersischJüdisch-" + + "ArabischJütischKarakalpakischKabylischKachinJjuKambaKawiKabardinischKane" + + "mbuTyapMakondeKabuverdianuKenyangKoroKaingangKhasiSakischKoyra ChiiniKho" + + "warKirmanjkiKakoKalenjinKimbunduKomi-PermjakischKonkaniKosraeanischKpell" + + "eKaratschaiisch-BalkarischKrioKinaray-aKarelischOraonShambalaBafiaKölsch" + + "KumükischKutenaiLadinoLangiLahndaLambaLesgischLingua Franca NovaLigurisc" + + "hLivischLakotaLombardischMongoLoziNördliches LuriLettgallischLuba-LuluaL" + + "uisenoLundaLuoLushaiLuhyaKlassisches ChinesischLasischMaduresischMafaKho" + + "ttaMaithiliMakassarischMalinkeMassaiMabaMokschanischMandaresischMendeMer" + + "uMorisyenMittelirischMakhuwa-MeettoMeta’MicmacMinangkabauMandschurischMe" + + "itheiMohawkMossiBergmariMundangMehrsprachigMuskogeeMirandesischMarwariMe" + + "ntawaiMyeneErsja-MordwinischMasanderanischMin NanNeapolitanischNamaNiede" + + "rdeutschNewariNiasNiueAo-NagaKwasioNgiemboonNogaiAltnordischNovialN’KoNo" + + "rd-SothoNuerAlt-NewariNyamweziNyankoleNyoroNzimaOsageOsmanischPangasinan" + + "MittelpersischPampangganPapiamentoPalauPicardischNigerianisches PidginPe" + + "nnsylvaniadeutschPlautdietschAltpersischPfälzischPhönizischPiemontesisch" + + "PontischPonapeanischAltpreußischAltprovenzalischK’iche’Chimborazo Hochla" + + "nd-QuechuaRajasthaniRapanuiRarotonganischRomagnolTarifitRomboRomaniRotum" + + "anischRussinischRovianaAromunischRwaSandaweJakutischSamaritanischSamburu" + + "SasakSantaliSaurashtraNgambaySanguSizilianischSchottischSassarischSüdkur" + + "dischSenecaSenaSeriSelkupischKoyra SenniAltirischSamogitischTaschelhitSc" + + "hanTschadisch-ArabischSidamoSchlesisch (Niederschlesisch)SelayarSüdsamis" + + "chLule-SamischInari-SamischSkolt-SamischSoninkeSogdischSrananischSererSa" + + "hoSaterfriesischSukumaSusuSumerischKomorischAltsyrischSyrischSchlesisch " + + "(Wasserpolnisch)TuluTemneTesoTerenoTetumTigreTivTokelauanischTsachurisch" + + "KlingonischTlingitTalischTamaseqNyasa TongaNeumelanesischTuroyoTarokoTsa" + + "konischTsimshianTatischTumbukaTuvaluischTasawaqTuwinischZentralatlas-Tam" + + "azightUdmurtischUgaritischUmbunduRootVaiVenetischWepsischWestflämischMai" + + "nfränkischWotischVõroVunjoWalliserdeutschWalamoWarayWashoWarlpiriWuKalmü" + + "ckischMingrelischSogaYaoYapesischYangbenYembaNheengatuKantonesischZapote" + + "kischBliss-SymboleSeeländischZenagaTamazightZuniKeine SprachinhalteZazaM" + + "odernes HocharabischÖsterreichisches DeutschSchweizer HochdeutschAustral" + + "isches EnglischKanadisches EnglischBritisches EnglischAmerikanisches Eng" + + "lischLateinamerikanisches SpanischEuropäisches SpanischMexikanisches Spa" + + "nischKanadisches FranzösischSchweizer FranzösischNiedersächsischFlämisch" + + "Brasilianisches PortugiesischEuropäisches PortugiesischMoldauischSerbo-K" + + "roatischKongo-SwahiliChinesisch (vereinfacht)Chinesisch (traditionell)" + +var deLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002d, 0x0039, + 0x0041, 0x004c, 0x0054, 0x005a, 0x006b, 0x0077, 0x0084, 0x008e, + 0x0095, 0x009c, 0x00a6, 0x00af, 0x00b9, 0x00c1, 0x00cc, 0x00db, + 0x00e3, 0x00eb, 0x00ef, 0x00fa, 0x0109, 0x0117, 0x0120, 0x0128, + 0x012f, 0x0136, 0x013e, 0x0141, 0x014b, 0x0153, 0x015c, 0x0164, + 0x016c, 0x0174, 0x017c, 0x017f, 0x0187, 0x018e, 0x0198, 0x01a4, + 0x01b1, 0x01b7, 0x01cc, 0x01d5, 0x01dc, 0x01e4, 0x01e8, 0x01ee, + 0x01f8, 0x01fd, 0x0206, 0x020f, 0x021e, 0x0227, 0x0230, 0x0236, + // Entry 40 - 7F + 0x0241, 0x024c, 0x0257, 0x025b, 0x025d, 0x0264, 0x0267, 0x0272, + 0x027d, 0x0286, 0x028f, 0x0298, 0x02a1, 0x02ad, 0x02b3, 0x02bb, + 0x02c5, 0x02d3, 0x02d8, 0x02df, 0x02e9, 0x02ef, 0x02f8, 0x0300, + 0x0304, 0x030c, 0x0316, 0x031c, 0x0329, 0x032e, 0x0339, 0x0340, + 0x0348, 0x0351, 0x035d, 0x0365, 0x0371, 0x0380, 0x0385, 0x0390, + 0x0399, 0x03a3, 0x03aa, 0x03b3, 0x03bd, 0x03c7, 0x03d0, 0x03dc, + 0x03e7, 0x03ed, 0x03fc, 0x040e, 0x0420, 0x042c, 0x0432, 0x0438, + 0x0443, 0x0449, 0x044e, 0x0453, 0x045c, 0x0463, 0x0467, 0x046f, + // Entry 80 - BF + 0x0476, 0x0483, 0x048a, 0x0498, 0x049d, 0x04a7, 0x04af, 0x04ba, + 0x04c2, 0x04ca, 0x04d0, 0x04db, 0x04e0, 0x04ed, 0x04f7, 0x0501, + 0x050b, 0x0510, 0x0516, 0x051f, 0x0527, 0x052c, 0x0536, 0x0542, + 0x054c, 0x0553, 0x0558, 0x055e, 0x056a, 0x0577, 0x057f, 0x058a, + 0x0590, 0x0599, 0x05a2, 0x05a8, 0x05b1, 0x05ba, 0x05c3, 0x05cd, + 0x05d1, 0x05da, 0x05df, 0x05ec, 0x05f4, 0x05fe, 0x0603, 0x0608, + 0x0610, 0x0616, 0x061c, 0x0626, 0x062a, 0x062e, 0x0634, 0x063b, + 0x0644, 0x0658, 0x0660, 0x0665, 0x0669, 0x0672, 0x0679, 0x0682, + // Entry C0 - FF + 0x0689, 0x0696, 0x06a1, 0x06a7, 0x06b1, 0x06bb, 0x06c1, 0x06c8, + 0x06dc, 0x06dc, 0x06e2, 0x06f9, 0x070e, 0x0711, 0x072f, 0x073b, + 0x0741, 0x0747, 0x0753, 0x075e, 0x0766, 0x076b, 0x0770, 0x077a, + 0x0781, 0x0788, 0x078d, 0x0793, 0x0797, 0x079c, 0x07a2, 0x07b6, + 0x07c1, 0x07c6, 0x07ca, 0x07d6, 0x07d9, 0x07e2, 0x07ed, 0x07f9, + 0x0804, 0x080a, 0x080e, 0x0814, 0x081e, 0x0829, 0x082d, 0x0831, + 0x0838, 0x083d, 0x0846, 0x084c, 0x0851, 0x0858, 0x085e, 0x0865, + 0x0872, 0x087d, 0x0881, 0x0888, 0x088f, 0x0898, 0x08a0, 0x08a8, + // Entry 100 - 13F + 0x08b7, 0x08bf, 0x08c7, 0x08d4, 0x08e3, 0x08ee, 0x08f4, 0x08fe, + 0x0903, 0x090b, 0x0910, 0x0916, 0x091b, 0x0920, 0x0925, 0x0933, + 0x0940, 0x0945, 0x095a, 0x095f, 0x0964, 0x096a, 0x096e, 0x0972, + 0x097d, 0x0987, 0x098d, 0x0995, 0x09a3, 0x09b7, 0x09bd, 0x09cb, + 0x09d1, 0x09d9, 0x09e3, 0x09e6, 0x09eb, 0x09fd, 0x0a0c, 0x0a1f, + 0x0a2c, 0x0a38, 0x0a42, 0x0a44, 0x0a4e, 0x0a51, 0x0a55, 0x0a5a, + 0x0a5f, 0x0a63, 0x0a6e, 0x0a74, 0x0a85, 0x0a93, 0x0a9e, 0x0aa3, + 0x0aac, 0x0ab3, 0x0ab8, 0x0ac5, 0x0ad5, 0x0adb, 0x0ae3, 0x0ae8, + // Entry 140 - 17F + 0x0aef, 0x0af4, 0x0af9, 0x0b02, 0x0b0f, 0x0b19, 0x0b23, 0x0b27, + 0x0b33, 0x0b38, 0x0b3c, 0x0b40, 0x0b46, 0x0b4d, 0x0b58, 0x0b62, + 0x0b78, 0x0b7e, 0x0b84, 0x0b8b, 0x0b9c, 0x0bad, 0x0bb5, 0x0bc3, + 0x0bcc, 0x0bd2, 0x0bd5, 0x0bda, 0x0bde, 0x0bea, 0x0bf1, 0x0bf5, + 0x0bfc, 0x0c08, 0x0c0f, 0x0c13, 0x0c1b, 0x0c20, 0x0c27, 0x0c33, + 0x0c39, 0x0c42, 0x0c46, 0x0c4e, 0x0c56, 0x0c66, 0x0c6d, 0x0c79, + 0x0c7f, 0x0c98, 0x0c9c, 0x0ca5, 0x0cae, 0x0cb3, 0x0cbb, 0x0cc0, + 0x0cc7, 0x0cd1, 0x0cd8, 0x0cde, 0x0ce3, 0x0ce9, 0x0cee, 0x0cf6, + // Entry 180 - 1BF + 0x0d08, 0x0d11, 0x0d18, 0x0d1e, 0x0d29, 0x0d2e, 0x0d32, 0x0d42, + 0x0d4e, 0x0d58, 0x0d5f, 0x0d64, 0x0d67, 0x0d6d, 0x0d72, 0x0d88, + 0x0d8f, 0x0d9a, 0x0d9e, 0x0da4, 0x0dac, 0x0db8, 0x0dbf, 0x0dc5, + 0x0dc9, 0x0dd5, 0x0de1, 0x0de6, 0x0dea, 0x0df2, 0x0dfe, 0x0e0c, + 0x0e13, 0x0e19, 0x0e24, 0x0e31, 0x0e38, 0x0e3e, 0x0e43, 0x0e4b, + 0x0e52, 0x0e5e, 0x0e66, 0x0e72, 0x0e79, 0x0e81, 0x0e86, 0x0e97, + 0x0ea5, 0x0eac, 0x0eba, 0x0ebe, 0x0ecb, 0x0ed1, 0x0ed5, 0x0ed9, + 0x0ee0, 0x0ee6, 0x0eef, 0x0ef4, 0x0eff, 0x0f05, 0x0f0b, 0x0f15, + // Entry 1C0 - 1FF + 0x0f19, 0x0f23, 0x0f2b, 0x0f33, 0x0f38, 0x0f3d, 0x0f42, 0x0f4b, + 0x0f55, 0x0f63, 0x0f6d, 0x0f77, 0x0f7c, 0x0f86, 0x0f9b, 0x0fae, + 0x0fba, 0x0fc5, 0x0fcf, 0x0fda, 0x0fe7, 0x0fef, 0x0ffb, 0x1008, + 0x1018, 0x1023, 0x103e, 0x1048, 0x104f, 0x105d, 0x1065, 0x106c, + 0x1071, 0x1077, 0x1082, 0x108c, 0x1093, 0x109d, 0x10a0, 0x10a7, + 0x10b0, 0x10bd, 0x10c4, 0x10c9, 0x10d0, 0x10da, 0x10e1, 0x10e6, + 0x10f2, 0x10fc, 0x1106, 0x1112, 0x1118, 0x111c, 0x1120, 0x112a, + 0x1135, 0x113e, 0x1149, 0x1153, 0x1158, 0x116b, 0x1171, 0x118e, + // Entry 200 - 23F + 0x1195, 0x11a0, 0x11ac, 0x11b9, 0x11c6, 0x11cd, 0x11d5, 0x11df, + 0x11e4, 0x11e8, 0x11f6, 0x11fc, 0x1200, 0x1209, 0x1212, 0x121c, + 0x1223, 0x123e, 0x1242, 0x1247, 0x124b, 0x1251, 0x1256, 0x125b, + 0x125e, 0x126b, 0x1276, 0x1281, 0x1288, 0x128f, 0x1296, 0x12a1, + 0x12af, 0x12b5, 0x12bb, 0x12c5, 0x12ce, 0x12d5, 0x12dc, 0x12e6, + 0x12ed, 0x12f6, 0x130c, 0x1316, 0x1320, 0x1327, 0x132b, 0x132e, + 0x1337, 0x133f, 0x134c, 0x135a, 0x1361, 0x1366, 0x136b, 0x137a, + 0x1380, 0x1385, 0x138a, 0x1392, 0x1394, 0x13a0, 0x13ab, 0x13af, + // Entry 240 - 27F + 0x13b2, 0x13bb, 0x13c2, 0x13c7, 0x13d0, 0x13dc, 0x13e7, 0x13f4, + 0x1400, 0x1406, 0x140f, 0x1413, 0x1426, 0x142a, 0x143f, 0x143f, + 0x1458, 0x146d, 0x1483, 0x1497, 0x14aa, 0x14c1, 0x14de, 0x14f4, + 0x150a, 0x150a, 0x1522, 0x1538, 0x1548, 0x1551, 0x156e, 0x1589, + 0x1593, 0x15a2, 0x15af, 0x15c7, 0x15e0, +} // Size: 1250 bytes + +const elLangStr string = "" + // Size: 9051 bytes + "ΑφάρΑμπχαζικάΑβεστάνΑφρικάανςΑκάνΑμαρικάΑραγκονικάΑραβικάΑσαμεζικάΆβαρικ" + + "ΑϊμάραΑζερμπαϊτζανικάΜπασκίρΛευκορωσικάΒουλγαρικάΜπισλάμαΜπαμπάραΜπενγκ" + + "άλιΘιβετιανάΒρετονικάΒοσνιακάΚαταλανικάΤσετσενικάΚαμόρροΚορσικανικάΚριΤ" + + "σεχικάΕκκλησιαστικά ΣλαβικάΤσουβασικάΟυαλικάΔανικάΓερμανικάΝτιβέχιΝτζόν" + + "γκχαΓιΕλληνικάΑγγλικάΕσπεράντοΙσπανικάΕσθονικάΒασκικάΠερσικάΦουλάχΦινλα" + + "νδικάΦίτζιΦαρόεΓαλλικάΔυτικά ΦριζιανάΙρλανδικάΣκωτικά ΚελτικάΓαλικιανάΓ" + + "κουαρανίΓκουγιαράτιΜανξΧάουσαΕβραϊκάΧίντιΧίρι ΜότουΚροατικάΑϊτιανάΟυγγρ" + + "ικάΑρμενικάΧερέροΙντερλίνγκουαΙνδονησιακάΙντερλίνγκουεΊγκμποΣικουάν ΓιΙ" + + "νουπιάκΊντοΙσλανδικάΙταλικάΙνουκτιτούτΙαπωνικάΙαβανεζικάΓεωργιανάΚονγκό" + + "ΚικούγιουΚουανιγιάμαΚαζακικάΚαλαάλισουτΚαμποτζιανάΚανάνταΚορεατικάΚανού" + + "ριΚασμίριΚουρδικάΚόμιΚόρνιςΚυργιζικάΛατινικάΛουξεμβουργιανάΓκάνταΛιμβου" + + "ργιανάΛινγκάλαΛαοθιανάΛιθουανικάΛούμπα-ΚατάνγκαΛετονικάΜαλαγάσιΜάρσαλΜά" + + "οριΣλαβομακεδονικάΜαλαγιαλάμΜογγολικάΜαράθιΜαλάιΜαλτεζικάΒιρμανικάΝαούρ" + + "ουΒόρεια ΝτεμπέλεΝεπάλιΝτόνγκαΟλλανδικάΝορβηγικά ΝινόρσκΝορβηγικά Μποκμ" + + "άλΝότια ΝτέμπελεΝάβαχοΝιάντζαΟξιτανικάΟζιβίγουαΟρόμοΟρίγιαΟσετικάΠαντζα" + + "πικάΠάλιΠολωνικάΠάστοΠορτογαλικάΚετσούαΡομανικάΡούντιΡουμανικάΡωσικάΚιν" + + "ιαρβάνταΣανσκριτικάΣαρδινικάΣίντιΒόρεια ΣάμιΣάνγκοΣινχαλεζικάΣλοβακικάΣ" + + "λοβενικάΣαμόανΣχόναΣομάλιΑλβανικάΣερβικάΣουάτιΝότια ΣόθοΣουνδανικάΣουηδ" + + "ικάΣουαχίλιΤαμίλΤελούγκουΤατζικικάΤαϊλανδικάΤιγκρινικάΤουρκμενικάΤσουάν" + + "αΤονγκανικάΤουρκικάΤσόνγκαΤατάρΤαϊτιανάΟυιγουρικάΟυκρανικάΟυρντούΟυζμπε" + + "κικάΒένδαΒιετναμικάΒόλαπικΓουαλούνΓουόλοφΖόσαΓίντιςΓιορούμπαΖουάνγκΚινε" + + "ζικάΖουλούΑχινίζΑκολίΑντάνγκμεΑντιγκέαΑφριχίλιΑγκέμΑϊνούΑκάντιανΑλούτΝό" + + "τια ΑλαταϊκάΠαλαιά ΑγγλικάΑνγκικάΑραμαϊκάΑρουκάνιανΑράπαχοΑραγουάκΆσουΑ" + + "στουριανάΑγουαντίΜπαλούτσιΜπαλινίζΜπάσαΜπαμούνΓκομάλαΜπέζαΜπέμπαΜπέναΜπ" + + "αφούτΔυτικά ΜπαλοχικάΜποζπούριΜπικόλΜπίνιΚομΣικσίκαΜπρατζΜπόντοΑκόσιΜπο" + + "υριάτΜπουγκίζΜπουλούΜπλινΜεντούμπαΚάντοΚαρίμπΚαγιούγκαΑτσάμΚεμπουάνοΤσί" + + "γκαΤσίμπτσαΤσαγκατάιΤσουκίζιΜάριΙδιωματικά ΣινούκΤσοκτάουΤσίπιουανΤσερό" + + "κιΣεγιένΚουρδικά ΣοράνιΚοπτικάΤουρκικά ΚριμαίαςΚρεολικά Γαλλικά Σεϋχελλ" + + "ώνΚασούμπιανΝτακόταΝτάργκουαΤάιταΝτέλαγουερΣλαβικάΝτόγκριμπΝτίνκαΖάρμαΝ" + + "τόγκριΓλώσσα Κάτω ΛουσατίαςΝτουάλαΜέσα ΟλλανδικάΤζόλα-ΦόνιΝτογιούλαΝταζ" + + "άγκαΈμπουΕφίκΑρχαία ΑιγυπτιακάΕκατζούκΕλαμάιτΜέσα ΑγγλικάΕγουόντοΦανγκΦ" + + "ιλιππινεζικάΦονΜέσα ΓαλλικάΠαλαιά ΓαλλικάΒόρεια ΦριζιανάΑνατολικά Φριζι" + + "ανάΦριούλιανΓκαΓκαγκάουζΓκάγιοΓκμπάγιαΓκιζΓκιλμπερτίζΜέσα Άνω Γερμανικά" + + "Παλαιά Άνω ΓερμανικάΓκόντιΓκοροντάλοΓοτθικάΓκρίμποΑρχαία ΕλληνικάΓερμαν" + + "ικά ΕλβετίαςΓκούσιΓκουίτσινΧάινταΧαβανεζικάΧιλιγκαγιόνΧιτίτεΧμονγκΓλώσσ" + + "α Άνω ΛουσατίαςΧούπαΙμπάνΙμπίμπιοΙλόκοΙνγκούςΛόζμπανΝγκόμπαΜάχαμεΙουδαϊ" + + "κά-ΠερσικάΙουδαϊκά-ΑραβικάΚάρα-ΚαλπάκΚαμπίλεΚατσίνΤζουΚάμπαΚάουιΚαμπαρν" + + "τιανάΚανέμπουΤιάπΜακόντεΓλώσσα του Πράσινου ΑκρωτηρίουΚόροΚάσιΚοτανικάΚ" + + "όιρα ΤσίνιΚάκοΚαλεντζίνΚιμπούντουΚόμι-ΠερμιάκΚονκάνιΚοσραενικάΚπέλεΚαρα" + + "τσάι-ΜπαλκάρΚαρελιακάΚουρούχΣάμπαλαΜπάφιαΚολωνικάΚουμγιούκΚουτενάιΛαδίν" + + "οΛάνγκιΛάχδαΛάμπαΛαζγκιάνΛακόταΜόνγκοΛόζιΒόρεια ΛούριΛούμπα-ΛουλούαΛουι" + + "σένοΛούνταΛούοΛουσάιΛουχίαΜαντουρίζΜάφαΜαγκάχιΜαϊτχίλιΜακαζάρΜαντίνγκοΜ" + + "ασάιΜάμπαΜόκσαΜανδάρΜέντεΜερούΜορίσιενΜέσα ΙρλανδικάΜακούβα-ΜέτοΜετάΜικ" + + "μάκΜινανγκαμπάουΜαντσούΜανιπούριΜοχόκΜόσιΜουντάνγκΠολλαπλές γλώσσεςΚρικ" + + "ΜιραντεζικάΜαργουάριΜιένεΈρζυαΜαζαντεράνιΝαπολιτανικάΝάμαΚάτω Γερμανικά" + + "ΝεγουάριΝίαςΝιούεανΚβάσιοΝγκιεμπούνΝογκάιΠαλαιά ΝορβηγικάΝ’ΚοΒόρεια Σόθ" + + "οΝουέρΚλασικά ΝεουάριΝιαμγουέζιΝιανκόλεΝιόροΝζίμαΟσάζΟθωμανικά Τουρκικά" + + "ΠανγκασινάνΠαχλάβιΠαμπάνγκαΠαπιαμέντοΠαλάουανΠίτζιν ΝιγηρίαςΑρχαία Περσ" + + "ικάΦοινικικάΠομπηικάΠρωσικάΠαλαιά ΠροβανσάλΚισέΡαζασθάνιΡαπανούιΡαροτον" + + "γκάνΡόμποΡομανίΑρομανικάΡουάΣαντάγουεΓιακούτΣαμαρίτικα ΑραμαϊκάΣαμπούρο" + + "υΣασάκΣαντάλιΝγκαμπέιΣάνγκουΣικελιανάΣκωτικάΝότια ΚουρδικάΣένεκαΣέναΣελ" + + "κούπΚοϊραμπόρο ΣένιΠαλαιά ΙρλανδικάΤασελχίτΣανΑραβικά του ΤσαντΣιντάμοΝ" + + "ότια ΣάμιΛούλε ΣάμιΙνάρι ΣάμιΣκολτ ΣάμιΣονίνκεΣογκντιένΣρανάν ΤόνγκοΣερ" + + "έρΣάχοΣουκούμαΣούσουΣουμερικάΚομόρριαΚλασικά ΣυριακάΣυριακάΤίμνεΤέσοΤερ" + + "ένοΤέτουμΤίγκρεΤιβΤοκελάουΚλίνγκονΤλίνγκιτΤαμασέκΝιάσα ΤόνγκαΤοκ ΠισίνΤ" + + "αρόκοΤσίμσιανΤουμπούκαΤουβαλούΤασαβάκΤουβινικάΤαμαζίτ Κεντρικού ΜαρόκοΟ" + + "υντμούρτΟυγκαριτικάΟυμπούντουΡουτΒάιΒότικΒούντζοΒάλσερΓουάλαμοΓουάρειΓο" + + "υασόΓουαρλπίριwuuΚαλμίκΣόγκαΓιάοΓιαπίζΓιανγκμπένΓιέμπαΚαντονέζικαΖάποτε" + + "κΣύμβολα BlissΖενάγκαΤυπικά Ταμαζίγκτ ΜαρόκουΖούνιΧωρίς γλωσσολογικό πε" + + "ριεχόμενοΖάζαΣύγχρονα Τυπικά ΑραβικάΓερμανικά ΑυστρίαςΆνω Γερμανικά Ελβ" + + "ετίαςΑγγλικά ΑυστραλίαςΑγγλικά ΚαναδάΑγγλικά Ηνωμένου ΒασιλείουΑγγλικά " + + "ΑμερικήςΙσπανικά Λατινικής ΑμερικήςΙσπανικά ΕυρώπηςΙσπανικά ΜεξικούΓαλλ" + + "ικά ΚαναδάΓαλλικά ΕλβετίαςΚάτω Γερμανικά ΟλλανδίαςΦλαμανδικάΠορτογαλικά" + + " ΒραζιλίαςΠορτογαλικά ΕυρώπηςΜολδαβικάΣερβοκροατικάΚονγκό ΣουαχίλιΑπλοπο" + + "ιημένα ΚινεζικάΠαραδοσιακά Κινεζικά" + +var elLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x001a, 0x0028, 0x003a, 0x0042, 0x0050, 0x0064, + 0x0072, 0x0084, 0x0090, 0x009c, 0x00ba, 0x00c8, 0x00de, 0x00f2, + 0x0102, 0x0112, 0x0124, 0x0136, 0x0148, 0x0158, 0x016c, 0x0180, + 0x018e, 0x01a4, 0x01aa, 0x01b8, 0x01e1, 0x01f5, 0x0203, 0x020f, + 0x0221, 0x022f, 0x0241, 0x0245, 0x0255, 0x0263, 0x0275, 0x0285, + 0x0295, 0x02a3, 0x02b1, 0x02bd, 0x02d1, 0x02db, 0x02e5, 0x02f3, + 0x0310, 0x0322, 0x033f, 0x0351, 0x0363, 0x0379, 0x0381, 0x038d, + 0x039b, 0x03a5, 0x03b8, 0x03c8, 0x03d6, 0x03e6, 0x03f6, 0x0402, + // Entry 40 - 7F + 0x041c, 0x0432, 0x044c, 0x0458, 0x046b, 0x047b, 0x0483, 0x0495, + 0x04a3, 0x04b9, 0x04c9, 0x04dd, 0x04ef, 0x04fb, 0x050d, 0x0523, + 0x0533, 0x0549, 0x055f, 0x056d, 0x057f, 0x058d, 0x059b, 0x05ab, + 0x05b3, 0x05bf, 0x05d1, 0x05e1, 0x05ff, 0x060b, 0x0623, 0x0633, + 0x0643, 0x0657, 0x0674, 0x0684, 0x0694, 0x06a0, 0x06aa, 0x06c8, + 0x06dc, 0x06ee, 0x06fa, 0x0704, 0x0716, 0x0728, 0x0736, 0x0753, + 0x075f, 0x076d, 0x077f, 0x07a0, 0x07c1, 0x07dc, 0x07e8, 0x07f6, + 0x0808, 0x081a, 0x0824, 0x0830, 0x083e, 0x0852, 0x085a, 0x086a, + // Entry 80 - BF + 0x0874, 0x088a, 0x0898, 0x08a8, 0x08b4, 0x08c6, 0x08d2, 0x08e8, + 0x08fe, 0x0910, 0x091a, 0x092f, 0x093b, 0x0951, 0x0963, 0x0975, + 0x0981, 0x098b, 0x0997, 0x09a7, 0x09b5, 0x09c1, 0x09d4, 0x09e8, + 0x09f8, 0x0a08, 0x0a12, 0x0a24, 0x0a36, 0x0a4a, 0x0a5e, 0x0a74, + 0x0a82, 0x0a96, 0x0aa6, 0x0ab4, 0x0abe, 0x0ace, 0x0ae2, 0x0af4, + 0x0b02, 0x0b16, 0x0b20, 0x0b34, 0x0b42, 0x0b52, 0x0b60, 0x0b68, + 0x0b74, 0x0b86, 0x0b94, 0x0ba4, 0x0bb0, 0x0bbc, 0x0bc6, 0x0bd8, + 0x0be8, 0x0be8, 0x0bf8, 0x0c02, 0x0c0c, 0x0c1c, 0x0c1c, 0x0c26, + // Entry C0 - FF + 0x0c26, 0x0c41, 0x0c5c, 0x0c6a, 0x0c7a, 0x0c8e, 0x0c8e, 0x0c9c, + 0x0c9c, 0x0c9c, 0x0cac, 0x0cac, 0x0cac, 0x0cb4, 0x0cb4, 0x0cc8, + 0x0cc8, 0x0cd8, 0x0cea, 0x0cfa, 0x0cfa, 0x0d04, 0x0d12, 0x0d12, + 0x0d20, 0x0d2a, 0x0d36, 0x0d36, 0x0d40, 0x0d4e, 0x0d4e, 0x0d6d, + 0x0d7f, 0x0d8b, 0x0d95, 0x0d95, 0x0d9b, 0x0da9, 0x0da9, 0x0da9, + 0x0db5, 0x0db5, 0x0dc1, 0x0dcb, 0x0ddb, 0x0deb, 0x0df9, 0x0e03, + 0x0e15, 0x0e1f, 0x0e2b, 0x0e3d, 0x0e47, 0x0e59, 0x0e65, 0x0e75, + 0x0e87, 0x0e97, 0x0e9f, 0x0ec0, 0x0ed0, 0x0ee2, 0x0ef0, 0x0efc, + // Entry 100 - 13F + 0x0f19, 0x0f27, 0x0f27, 0x0f48, 0x0f7a, 0x0f8e, 0x0f9c, 0x0fae, + 0x0fb8, 0x0fcc, 0x0fda, 0x0fec, 0x0ff8, 0x1002, 0x1010, 0x1038, + 0x1038, 0x1046, 0x1061, 0x1074, 0x1086, 0x1096, 0x10a0, 0x10a8, + 0x10a8, 0x10c9, 0x10d9, 0x10e7, 0x10fe, 0x10fe, 0x110e, 0x110e, + 0x1118, 0x1132, 0x1132, 0x1138, 0x1138, 0x114f, 0x116a, 0x116a, + 0x1187, 0x11aa, 0x11bc, 0x11c2, 0x11d4, 0x11d4, 0x11e0, 0x11f0, + 0x11f0, 0x11f8, 0x120e, 0x120e, 0x1230, 0x1256, 0x1256, 0x1262, + 0x1276, 0x1284, 0x1292, 0x12af, 0x12d2, 0x12d2, 0x12d2, 0x12de, + // Entry 140 - 17F + 0x12f0, 0x12fc, 0x12fc, 0x1310, 0x1310, 0x1326, 0x1332, 0x133e, + 0x1364, 0x1364, 0x136e, 0x1378, 0x1388, 0x1392, 0x13a0, 0x13a0, + 0x13a0, 0x13ae, 0x13bc, 0x13c8, 0x13e7, 0x1406, 0x1406, 0x141b, + 0x1429, 0x1435, 0x143d, 0x1447, 0x1451, 0x1469, 0x1479, 0x1481, + 0x148f, 0x14c8, 0x14c8, 0x14d0, 0x14d0, 0x14d8, 0x14e8, 0x14fd, + 0x14fd, 0x14fd, 0x1505, 0x1517, 0x152b, 0x1542, 0x1550, 0x1564, + 0x156e, 0x158d, 0x158d, 0x158d, 0x159f, 0x15ad, 0x15bb, 0x15c7, + 0x15d7, 0x15e9, 0x15f9, 0x1605, 0x1611, 0x161b, 0x1625, 0x1635, + // Entry 180 - 1BF + 0x1635, 0x1635, 0x1635, 0x1641, 0x1641, 0x164d, 0x1655, 0x166c, + 0x166c, 0x1687, 0x1697, 0x16a3, 0x16ab, 0x16b7, 0x16c3, 0x16c3, + 0x16c3, 0x16d5, 0x16dd, 0x16eb, 0x16fb, 0x1709, 0x171b, 0x1725, + 0x172f, 0x1739, 0x1745, 0x174f, 0x1759, 0x1769, 0x1784, 0x179b, + 0x17a3, 0x17af, 0x17c9, 0x17d7, 0x17e9, 0x17f3, 0x17fb, 0x17fb, + 0x180d, 0x182e, 0x1836, 0x184c, 0x185e, 0x185e, 0x1868, 0x1872, + 0x1888, 0x1888, 0x18a0, 0x18a8, 0x18c3, 0x18d3, 0x18db, 0x18e9, + 0x18e9, 0x18f5, 0x1909, 0x1915, 0x1934, 0x1934, 0x193d, 0x1952, + // Entry 1C0 - 1FF + 0x195c, 0x1979, 0x198d, 0x199d, 0x19a7, 0x19b1, 0x19b9, 0x19dc, + 0x19f2, 0x1a00, 0x1a12, 0x1a26, 0x1a36, 0x1a36, 0x1a53, 0x1a53, + 0x1a53, 0x1a6e, 0x1a6e, 0x1a80, 0x1a80, 0x1a80, 0x1a90, 0x1a9e, + 0x1abd, 0x1ac5, 0x1ac5, 0x1ad7, 0x1ae7, 0x1afd, 0x1afd, 0x1afd, + 0x1b07, 0x1b13, 0x1b13, 0x1b13, 0x1b13, 0x1b25, 0x1b2d, 0x1b3f, + 0x1b4d, 0x1b72, 0x1b84, 0x1b8e, 0x1b9c, 0x1b9c, 0x1bac, 0x1bba, + 0x1bcc, 0x1bda, 0x1bda, 0x1bf5, 0x1c01, 0x1c09, 0x1c09, 0x1c17, + 0x1c34, 0x1c53, 0x1c53, 0x1c63, 0x1c69, 0x1c89, 0x1c97, 0x1c97, + // Entry 200 - 23F + 0x1c97, 0x1caa, 0x1cbd, 0x1cd0, 0x1ce3, 0x1cf1, 0x1d03, 0x1d1c, + 0x1d26, 0x1d2e, 0x1d2e, 0x1d3e, 0x1d4a, 0x1d5c, 0x1d6c, 0x1d89, + 0x1d97, 0x1d97, 0x1d97, 0x1da1, 0x1da9, 0x1db5, 0x1dc1, 0x1dcd, + 0x1dd3, 0x1de3, 0x1de3, 0x1df3, 0x1e03, 0x1e03, 0x1e11, 0x1e28, + 0x1e39, 0x1e39, 0x1e45, 0x1e45, 0x1e55, 0x1e55, 0x1e67, 0x1e77, + 0x1e85, 0x1e97, 0x1ec5, 0x1ed7, 0x1eed, 0x1f01, 0x1f09, 0x1f0f, + 0x1f0f, 0x1f0f, 0x1f0f, 0x1f0f, 0x1f19, 0x1f19, 0x1f27, 0x1f33, + 0x1f43, 0x1f51, 0x1f5d, 0x1f71, 0x1f74, 0x1f80, 0x1f80, 0x1f8a, + // Entry 240 - 27F + 0x1f92, 0x1f9e, 0x1fb2, 0x1fbe, 0x1fbe, 0x1fd4, 0x1fe2, 0x1ff6, + 0x1ff6, 0x2004, 0x2032, 0x203c, 0x2076, 0x207e, 0x20aa, 0x20aa, + 0x20cd, 0x20f7, 0x211a, 0x2135, 0x2167, 0x2186, 0x21ba, 0x21d9, + 0x21f8, 0x21f8, 0x2213, 0x2232, 0x2260, 0x2274, 0x229d, 0x22c2, + 0x22d4, 0x22ee, 0x230b, 0x2334, 0x235b, +} // Size: 1250 bytes + +const enLangStr string = "" + // Size: 4944 bytes + "AfarAbkhazianAvestanAfrikaansAkanAmharicAragoneseArabicAssameseAvaricAym" + + "araAzerbaijaniBashkirBelarusianBulgarianBislamaBambaraBanglaTibetanBreto" + + "nBosnianCatalanChechenChamorroCorsicanCreeCzechChurch SlavicChuvashWelsh" + + "DanishGermanDivehiDzongkhaEweGreekEnglishEsperantoSpanishEstonianBasqueP" + + "ersianFulahFinnishFijianFaroeseFrenchWestern FrisianIrishScottish Gaelic" + + "GalicianGuaraniGujaratiManxHausaHebrewHindiHiri MotuCroatianHaitian Creo" + + "leHungarianArmenianHereroInterlinguaIndonesianInterlingueIgboSichuan YiI" + + "nupiaqIdoIcelandicItalianInuktitutJapaneseJavaneseGeorgianKongoKikuyuKua" + + "nyamaKazakhKalaallisutKhmerKannadaKoreanKanuriKashmiriKurdishKomiCornish" + + "KyrgyzLatinLuxembourgishGandaLimburgishLingalaLaoLithuanianLuba-KatangaL" + + "atvianMalagasyMarshalleseMaoriMacedonianMalayalamMongolianMarathiMalayMa" + + "lteseBurmeseNauruNorth NdebeleNepaliNdongaDutchNorwegian NynorskNorwegia" + + "n BokmålSouth NdebeleNavajoNyanjaOccitanOjibwaOromoOdiaOsseticPunjabiPal" + + "iPolishPashtoPortugueseQuechuaRomanshRundiRomanianRussianKinyarwandaSans" + + "kritSardinianSindhiNorthern SamiSangoSinhalaSlovakSlovenianSamoanShonaSo" + + "maliAlbanianSerbianSwatiSouthern SothoSundaneseSwedishSwahiliTamilTelugu" + + "TajikThaiTigrinyaTurkmenTswanaTonganTurkishTsongaTatarTahitianUyghurUkra" + + "inianUrduUzbekVendaVietnameseVolapükWalloonWolofXhosaYiddishYorubaZhuang" + + "ChineseZuluAchineseAcoliAdangmeAdygheTunisian ArabicAfrihiliAghemAinuAkk" + + "adianAlabamaAleutGheg AlbanianSouthern AltaiOld EnglishAngikaAramaicMapu" + + "cheAraonaArapahoAlgerian ArabicNajdi ArabicArawakMoroccan ArabicEgyptian" + + " ArabicAsuAmerican Sign LanguageAsturianKotavaAwadhiBaluchiBalineseBavar" + + "ianBasaaBamunBatak TobaGhomalaBejaBembaBetawiBenaBafutBadagaWestern Balo" + + "chiBhojpuriBikolBiniBanjarKomSiksikaBishnupriyaBakhtiariBrajBrahuiBodoAk" + + "ooseBuriatBugineseBuluBlinMedumbaCaddoCaribCayugaAtsamCebuanoChigaChibch" + + "aChagataiChuukeseMariChinook JargonChoctawChipewyanCherokeeCheyenneCentr" + + "al KurdishCopticCapiznonCrimean TurkishSeselwa Creole FrenchKashubianDak" + + "otaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriLower SorbianCentral Dus" + + "unDualaMiddle DutchJola-FonyiDyulaDazagaEmbuEfikEmilianAncient EgyptianE" + + "kajukElamiteMiddle EnglishCentral YupikEwondoExtremaduranFangFilipinoTor" + + "nedalen FinnishFonCajun FrenchMiddle FrenchOld FrenchArpitanNorthern Fri" + + "sianEastern FrisianFriulianGaGagauzGan ChineseGayoGbayaZoroastrian DariG" + + "eezGilberteseGilakiMiddle High GermanOld High GermanGoan KonkaniGondiGor" + + "ontaloGothicGreboAncient GreekSwiss GermanWayuuFrafraGusiiGwichʼinHaidaH" + + "akka ChineseHawaiianFiji HindiHiligaynonHittiteHmongUpper SorbianXiang C" + + "hineseHupaIbanIbibioIlokoIngushIngrianJamaican Creole EnglishLojbanNgomb" + + "aMachameJudeo-PersianJudeo-ArabicJutishKara-KalpakKabyleKachinJjuKambaKa" + + "wiKabardianKanembuTyapMakondeKabuverdianuKenyangKoroKaingangKhasiKhotane" + + "seKoyra ChiiniKhowarKirmanjkiKakoKalenjinKimbunduKomi-PermyakKonkaniKosr" + + "aeanKpelleKarachay-BalkarKrioKinaray-aKarelianKurukhShambalaBafiaCologni" + + "anKumykKutenaiLadinoLangiLahndaLambaLezghianLingua Franca NovaLigurianLi" + + "vonianLakotaLombardMongoLoziNorthern LuriLatgalianLuba-LuluaLuisenoLunda" + + "LuoMizoLuyiaLiterary ChineseLazMadureseMafaMagahiMaithiliMakasarMandingo" + + "MasaiMabaMokshaMandarMendeMeruMorisyenMiddle IrishMakhuwa-MeettoMetaʼMi'" + + "kmaqMinangkabauManchuManipuriMohawkMossiWestern MariMundangMultiple lang" + + "uagesCreekMirandeseMarwariMentawaiMyeneErzyaMazanderaniMin Nan ChineseNe" + + "apolitanNamaLow GermanNewariNiasNiueanAo NagaKwasioNgiemboonNogaiOld Nor" + + "seNovialN’KoNorthern SothoNuerClassical NewariNyamweziNyankoleNyoroNzima" + + "OsageOttoman TurkishPangasinanPahlaviPampangaPapiamentoPalauanPicardNige" + + "rian PidginPennsylvania GermanPlautdietschOld PersianPalatine GermanPhoe" + + "nicianPiedmontesePonticPohnpeianPrussianOld ProvençalKʼicheʼChimborazo H" + + "ighland QuichuaRajasthaniRapanuiRarotonganRomagnolRiffianRomboRomanyRotu" + + "manRusynRovianaAromanianRwaSandaweSakhaSamaritan AramaicSamburuSasakSant" + + "aliSaurashtraNgambaySanguSicilianScotsSassarese SardinianSouthern Kurdis" + + "hSenecaSenaSeriSelkupKoyraboro SenniOld IrishSamogitianTachelhitShanChad" + + "ian ArabicSidamoLower SilesianSelayarSouthern SamiLule SamiInari SamiSko" + + "lt SamiSoninkeSogdienSranan TongoSererSahoSaterland FrisianSukumaSusuSum" + + "erianComorianClassical SyriacSyriacSilesianTuluTimneTesoTerenoTetumTigre" + + "TivTokelauTsakhurKlingonTlingitTalyshTamashekNyasa TongaTok PisinTuroyoT" + + "arokoTsakonianTsimshianMuslim TatTumbukaTuvaluTasawaqTuvinianCentral Atl" + + "as TamazightUdmurtUgariticUmbunduRootVaiVenetianVepsWest FlemishMain-Fra" + + "nconianVoticVõroVunjoWalserWolayttaWarayWashoWarlpiriWu ChineseKalmykMin" + + "grelianSogaYaoYapeseYangbenYembaNheengatuCantoneseZapotecBlissymbolsZeel" + + "andicZenagaStandard Moroccan TamazightZuniNo linguistic contentZazaModer" + + "n Standard ArabicAustrian GermanSwiss High GermanAustralian EnglishCanad" + + "ian EnglishBritish EnglishAmerican EnglishLatin American SpanishEuropean" + + " SpanishMexican SpanishDariCanadian FrenchSwiss FrenchLow SaxonFlemishBr" + + "azilian PortugueseEuropean PortugueseMoldavianSerbo-CroatianCongo Swahil" + + "iSimplified ChineseTraditional Chinese" + +var enLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x0014, 0x001d, 0x0021, 0x0028, 0x0031, + 0x0037, 0x003f, 0x0045, 0x004b, 0x0056, 0x005d, 0x0067, 0x0070, + 0x0077, 0x007e, 0x0084, 0x008b, 0x0091, 0x0098, 0x009f, 0x00a6, + 0x00ae, 0x00b6, 0x00ba, 0x00bf, 0x00cc, 0x00d3, 0x00d8, 0x00de, + 0x00e4, 0x00ea, 0x00f2, 0x00f5, 0x00fa, 0x0101, 0x010a, 0x0111, + 0x0119, 0x011f, 0x0126, 0x012b, 0x0132, 0x0138, 0x013f, 0x0145, + 0x0154, 0x0159, 0x0168, 0x0170, 0x0177, 0x017f, 0x0183, 0x0188, + 0x018e, 0x0193, 0x019c, 0x01a4, 0x01b2, 0x01bb, 0x01c3, 0x01c9, + // Entry 40 - 7F + 0x01d4, 0x01de, 0x01e9, 0x01ed, 0x01f7, 0x01fe, 0x0201, 0x020a, + 0x0211, 0x021a, 0x0222, 0x022a, 0x0232, 0x0237, 0x023d, 0x0245, + 0x024b, 0x0256, 0x025b, 0x0262, 0x0268, 0x026e, 0x0276, 0x027d, + 0x0281, 0x0288, 0x028e, 0x0293, 0x02a0, 0x02a5, 0x02af, 0x02b6, + 0x02b9, 0x02c3, 0x02cf, 0x02d6, 0x02de, 0x02e9, 0x02ee, 0x02f8, + 0x0301, 0x030a, 0x0311, 0x0316, 0x031d, 0x0324, 0x0329, 0x0336, + 0x033c, 0x0342, 0x0347, 0x0358, 0x0369, 0x0376, 0x037c, 0x0382, + 0x0389, 0x038f, 0x0394, 0x0398, 0x039f, 0x03a6, 0x03aa, 0x03b0, + // Entry 80 - BF + 0x03b6, 0x03c0, 0x03c7, 0x03ce, 0x03d3, 0x03db, 0x03e2, 0x03ed, + 0x03f5, 0x03fe, 0x0404, 0x0411, 0x0416, 0x041d, 0x0423, 0x042c, + 0x0432, 0x0437, 0x043d, 0x0445, 0x044c, 0x0451, 0x045f, 0x0468, + 0x046f, 0x0476, 0x047b, 0x0481, 0x0486, 0x048a, 0x0492, 0x0499, + 0x049f, 0x04a5, 0x04ac, 0x04b2, 0x04b7, 0x04bf, 0x04c5, 0x04ce, + 0x04d2, 0x04d7, 0x04dc, 0x04e6, 0x04ee, 0x04f5, 0x04fa, 0x04ff, + 0x0506, 0x050c, 0x0512, 0x0519, 0x051d, 0x0525, 0x052a, 0x0531, + 0x0537, 0x0546, 0x054e, 0x0553, 0x0557, 0x055f, 0x0566, 0x056b, + // Entry C0 - FF + 0x0578, 0x0586, 0x0591, 0x0597, 0x059e, 0x05a5, 0x05ab, 0x05b2, + 0x05c1, 0x05cd, 0x05d3, 0x05e2, 0x05f1, 0x05f4, 0x060a, 0x0612, + 0x0618, 0x061e, 0x0625, 0x062d, 0x0635, 0x063a, 0x063f, 0x0649, + 0x0650, 0x0654, 0x0659, 0x065f, 0x0663, 0x0668, 0x066e, 0x067d, + 0x0685, 0x068a, 0x068e, 0x0694, 0x0697, 0x069e, 0x06a9, 0x06b2, + 0x06b6, 0x06bc, 0x06c0, 0x06c6, 0x06cc, 0x06d4, 0x06d8, 0x06dc, + 0x06e3, 0x06e8, 0x06ed, 0x06f3, 0x06f8, 0x06ff, 0x0704, 0x070b, + 0x0713, 0x071b, 0x071f, 0x072d, 0x0734, 0x073d, 0x0745, 0x074d, + // Entry 100 - 13F + 0x075c, 0x0762, 0x076a, 0x0779, 0x078e, 0x0797, 0x079d, 0x07a3, + 0x07a8, 0x07b0, 0x07b5, 0x07bb, 0x07c0, 0x07c5, 0x07ca, 0x07d7, + 0x07e4, 0x07e9, 0x07f5, 0x07ff, 0x0804, 0x080a, 0x080e, 0x0812, + 0x0819, 0x0829, 0x082f, 0x0836, 0x0844, 0x0851, 0x0857, 0x0863, + 0x0867, 0x086f, 0x0881, 0x0884, 0x0890, 0x089d, 0x08a7, 0x08ae, + 0x08be, 0x08cd, 0x08d5, 0x08d7, 0x08dd, 0x08e8, 0x08ec, 0x08f1, + 0x0901, 0x0905, 0x090f, 0x0915, 0x0927, 0x0936, 0x0942, 0x0947, + 0x0950, 0x0956, 0x095b, 0x0968, 0x0974, 0x0979, 0x097f, 0x0984, + // Entry 140 - 17F + 0x098d, 0x0992, 0x099f, 0x09a7, 0x09b1, 0x09bb, 0x09c2, 0x09c7, + 0x09d4, 0x09e1, 0x09e5, 0x09e9, 0x09ef, 0x09f4, 0x09fa, 0x0a01, + 0x0a18, 0x0a1e, 0x0a24, 0x0a2b, 0x0a38, 0x0a44, 0x0a4a, 0x0a55, + 0x0a5b, 0x0a61, 0x0a64, 0x0a69, 0x0a6d, 0x0a76, 0x0a7d, 0x0a81, + 0x0a88, 0x0a94, 0x0a9b, 0x0a9f, 0x0aa7, 0x0aac, 0x0ab5, 0x0ac1, + 0x0ac7, 0x0ad0, 0x0ad4, 0x0adc, 0x0ae4, 0x0af0, 0x0af7, 0x0aff, + 0x0b05, 0x0b14, 0x0b18, 0x0b21, 0x0b29, 0x0b2f, 0x0b37, 0x0b3c, + 0x0b45, 0x0b4a, 0x0b51, 0x0b57, 0x0b5c, 0x0b62, 0x0b67, 0x0b6f, + // Entry 180 - 1BF + 0x0b81, 0x0b89, 0x0b91, 0x0b97, 0x0b9e, 0x0ba3, 0x0ba7, 0x0bb4, + 0x0bbd, 0x0bc7, 0x0bce, 0x0bd3, 0x0bd6, 0x0bda, 0x0bdf, 0x0bef, + 0x0bf2, 0x0bfa, 0x0bfe, 0x0c04, 0x0c0c, 0x0c13, 0x0c1b, 0x0c20, + 0x0c24, 0x0c2a, 0x0c30, 0x0c35, 0x0c39, 0x0c41, 0x0c4d, 0x0c5b, + 0x0c61, 0x0c68, 0x0c73, 0x0c79, 0x0c81, 0x0c87, 0x0c8c, 0x0c98, + 0x0c9f, 0x0cb1, 0x0cb6, 0x0cbf, 0x0cc6, 0x0cce, 0x0cd3, 0x0cd8, + 0x0ce3, 0x0cf2, 0x0cfc, 0x0d00, 0x0d0a, 0x0d10, 0x0d14, 0x0d1a, + 0x0d21, 0x0d27, 0x0d30, 0x0d35, 0x0d3e, 0x0d44, 0x0d4a, 0x0d58, + // Entry 1C0 - 1FF + 0x0d5c, 0x0d6c, 0x0d74, 0x0d7c, 0x0d81, 0x0d86, 0x0d8b, 0x0d9a, + 0x0da4, 0x0dab, 0x0db3, 0x0dbd, 0x0dc4, 0x0dca, 0x0dd9, 0x0dec, + 0x0df8, 0x0e03, 0x0e12, 0x0e1c, 0x0e27, 0x0e2d, 0x0e36, 0x0e3e, + 0x0e4c, 0x0e55, 0x0e70, 0x0e7a, 0x0e81, 0x0e8b, 0x0e93, 0x0e9a, + 0x0e9f, 0x0ea5, 0x0eac, 0x0eb1, 0x0eb8, 0x0ec1, 0x0ec4, 0x0ecb, + 0x0ed0, 0x0ee1, 0x0ee8, 0x0eed, 0x0ef4, 0x0efe, 0x0f05, 0x0f0a, + 0x0f12, 0x0f17, 0x0f2a, 0x0f3a, 0x0f40, 0x0f44, 0x0f48, 0x0f4e, + 0x0f5d, 0x0f66, 0x0f70, 0x0f79, 0x0f7d, 0x0f8b, 0x0f91, 0x0f9f, + // Entry 200 - 23F + 0x0fa6, 0x0fb3, 0x0fbc, 0x0fc6, 0x0fd0, 0x0fd7, 0x0fde, 0x0fea, + 0x0fef, 0x0ff3, 0x1004, 0x100a, 0x100e, 0x1016, 0x101e, 0x102e, + 0x1034, 0x103c, 0x1040, 0x1045, 0x1049, 0x104f, 0x1054, 0x1059, + 0x105c, 0x1063, 0x106a, 0x1071, 0x1078, 0x107e, 0x1086, 0x1091, + 0x109a, 0x10a0, 0x10a6, 0x10af, 0x10b8, 0x10c2, 0x10c9, 0x10cf, + 0x10d6, 0x10de, 0x10f5, 0x10fb, 0x1103, 0x110a, 0x110e, 0x1111, + 0x1119, 0x111d, 0x1129, 0x1138, 0x113d, 0x1142, 0x1147, 0x114d, + 0x1155, 0x115a, 0x115f, 0x1167, 0x1171, 0x1177, 0x1181, 0x1185, + // Entry 240 - 27F + 0x1188, 0x118e, 0x1195, 0x119a, 0x11a3, 0x11ac, 0x11b3, 0x11be, + 0x11c7, 0x11cd, 0x11e8, 0x11ec, 0x1201, 0x1205, 0x121b, 0x121b, + 0x122a, 0x123b, 0x124d, 0x125d, 0x126c, 0x127c, 0x1292, 0x12a2, + 0x12b1, 0x12b5, 0x12c4, 0x12d0, 0x12d9, 0x12e0, 0x12f4, 0x1307, + 0x1310, 0x131e, 0x132b, 0x133d, 0x1350, +} // Size: 1250 bytes + +const esLangStr string = "" + // Size: 4319 bytes + "afarabjasioavésticoafrikáansakanamáricoaragonésárabeasamésavaraimaraazer" + + "baiyanobaskirbielorrusobúlgarobislamabambarabengalítibetanobretónbosnioc" + + "atalánchechenochamorrocorsocreechecoeslavo eclesiásticochuvasiogalésdané" + + "salemándivehidzongkhaewégriegoinglésesperantoespañolestonioeuskerapersaf" + + "ulafinésfiyianoferoésfrancésfrisón occidentalirlandésgaélico escocésgall" + + "egoguaraníguyaratímanéshausahebreohindihiri motucroatacriollo haitianohú" + + "ngaroarmeniohererointerlinguaindonesiointerlingueigboyi de Sichuáninupia" + + "qidoislandésitalianoinuktitutjaponésjavanésgeorgianokongokikuyukuanyamak" + + "azajogroenlandésjemercanaréscoreanokanuricachemirokurdokomicórnicokirguí" + + "slatínluxemburguésgandalimburguéslingalalaolituanoluba-katangaletónmalga" + + "chemarshalésmaorímacedoniomalayalammongolmaratímalayomaltésbirmanonaurua" + + "nondebele septentrionalnepalíndonganeerlandésnoruego nynorsknoruego bokm" + + "alndebele meridionalnavajonyanjaoccitanoojibwaoromooriyaoséticopanyabípa" + + "lipolacopastúnportuguésquechuaromanchekirundirumanorusokinyarwandasánscr" + + "itosardosindhisami septentrionalsangocingaléseslovacoeslovenosamoanoshon" + + "asomalíalbanésserbiosuazisesotho meridionalsundanéssuecosuajilitamiltelu" + + "gutayikotailandéstigriñaturcomanosetsuanatonganoturcotsongatártarotahiti" + + "anouigurucranianourduuzbekovendavietnamitavolapükvalónwólofxhosayidisyor" + + "ubazhuangchinozulúacehnésacoliadangmeadiguéafrihiliaghemainuacadioaleuti" + + "anoaltái meridionalinglés antiguoangikaarameomapuchearapahoarahuacoasuas" + + "turianoavadhibaluchibalinésbasaabamúnghomalabejabembabenabafutbaluchi oc" + + "cidentalbhoyapuríbicolbinikomsiksikabrajbodoakooseburiatobuginésbulublin" + + "medumbacaddocaribecayugaatsamcebuanochigachibchachagatáitrukésmaríjerga " + + "chinukchoctawchipewyancheroquicheyenekurdo soranicoptotártaro de Crimeac" + + "riollo seychelensecasubiodakotadargvataitadelawareslavedogribdinkazarmad" + + "ogribajo sorbiodualaneerlandés mediojola-fonyidiuladazagaembuefikegipcio" + + " antiguoekajukelamitainglés medioewondofangfilipinofonfrancés mediofranc" + + "és antiguofrisón septentrionalfrisón orientalfriulanogagagauzochino gan" + + "gayogbayageezgilbertésalto alemán medioalto alemán antiguogondigorontalo" + + "góticogrebogriego antiguoalemán suizogusiikutchinhaidachino hakkahawaian" + + "ohiligaynonhititahmongalto sorbiochino xianghupaibanibibioilocanoingushl" + + "ojbanngombamachamejudeo-persajudeo-árabekarakalpakocabilakachinjjukambak" + + "awikabardianokanembutyapmakondecriollo caboverdianokorokhasikotanéskoyra" + + " chiinikakokalenjinkimbundukomi permiokonkaníkosraeanokpellekarachay-bal" + + "karcareliokurukhshambalabafiakölschkumykkutenailadinolangilahndalambalez" + + "gianolakotamongolozilorí septentrionalluba-lulualuiseñolundaluomizoluyia" + + "madurésmafamagahimaithilimacasarmandingomasáimabamokshamandarmendemerucr" + + "iollo mauricianoirlandés mediomakhuwa-meettometa’micmacminangkabaumanchú" + + "manipurimohawkmossimundangvarios idiomascreekmirandésmarwarimyeneerzyama" + + "zandaraníchino min nannapolitanonamabajo alemánnewariniasniueanokwasiong" + + "iemboonnogainórdico antiguon’kosesotho septentrionalnuernewari clásicony" + + "amwezinyankolenyoronzimaosageturco otomanopangasinánpahlavipampangapapia" + + "mentopalauanopidgin de Nigeriapersa antiguofeniciopohnpeianoprusianoprov" + + "enzal antiguoquichérajasthanirapanuirarotonganoromboromaníarrumanorwasan" + + "dawesakhaarameo samaritanosamburusasaksantalingambaysangusicilianoescocé" + + "skurdo meridionalsenecasenaselkupkoyraboro senniirlandés antiguotashelhi" + + "tshanárabe chadianosidamosami meridionalsami lulesami inarisami skoltson" + + "inkésogdianosranan tongoserersahosukumasususumeriocomorensesiríaco clási" + + "cosiriacotemnetesoterenotetúntigrétivtokelauanoklingontlingittamashekton" + + "ga del Nyasatok pisintarokotsimshianotumbukatuvaluanotasawaqtuvinianotam" + + "azight del Atlas Centraludmurtugaríticoumbunduraízvaivóticovunjowalserwo" + + "laytawaraywashowarlpirichino wukalmyksogayaoyapésyangbenyembacantonészap" + + "otecosímbolos Blisszenagatamazight estándar marroquízuñisin contenido li" + + "ngüísticozazakiárabe estándar modernoalemán austríacoalto alemán suizoin" + + "glés australianoinglés canadienseinglés británicoinglés estadounidensees" + + "pañol latinoamericanoespañol de Españaespañol de Méxicofrancés canadiens" + + "efrancés suizobajo sajónflamencoportugués de Brasilportugués de Portugal" + + "moldavoserbocroatasuajili del Congochino simplificadochino tradicional" + +var esLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000b, 0x0014, 0x001e, 0x0022, 0x002a, 0x0033, + 0x0039, 0x0040, 0x0044, 0x004a, 0x0055, 0x005b, 0x0065, 0x006d, + 0x0074, 0x007b, 0x0083, 0x008b, 0x0092, 0x0098, 0x00a0, 0x00a8, + 0x00b0, 0x00b5, 0x00b9, 0x00be, 0x00d2, 0x00da, 0x00e0, 0x00e6, + 0x00ed, 0x00f3, 0x00fb, 0x00ff, 0x0105, 0x010c, 0x0115, 0x011d, + 0x0124, 0x012b, 0x0130, 0x0134, 0x013a, 0x0141, 0x0148, 0x0150, + 0x0162, 0x016b, 0x017c, 0x0183, 0x018b, 0x0194, 0x019a, 0x019f, + 0x01a5, 0x01aa, 0x01b3, 0x01b9, 0x01c9, 0x01d1, 0x01d8, 0x01de, + // Entry 40 - 7F + 0x01e9, 0x01f2, 0x01fd, 0x0201, 0x020f, 0x0216, 0x0219, 0x0222, + 0x022a, 0x0233, 0x023b, 0x0243, 0x024c, 0x0251, 0x0257, 0x025f, + 0x0265, 0x0271, 0x0276, 0x027e, 0x0285, 0x028b, 0x0294, 0x0299, + 0x029d, 0x02a5, 0x02ad, 0x02b3, 0x02c0, 0x02c5, 0x02d0, 0x02d7, + 0x02da, 0x02e1, 0x02ed, 0x02f3, 0x02fb, 0x0305, 0x030b, 0x0314, + 0x031d, 0x0323, 0x032a, 0x0330, 0x0337, 0x033e, 0x0346, 0x035b, + 0x0362, 0x0368, 0x0373, 0x0382, 0x0390, 0x03a2, 0x03a8, 0x03ae, + 0x03b6, 0x03bc, 0x03c1, 0x03c6, 0x03ce, 0x03d6, 0x03da, 0x03e0, + // Entry 80 - BF + 0x03e7, 0x03f1, 0x03f8, 0x0400, 0x0407, 0x040d, 0x0411, 0x041c, + 0x0426, 0x042b, 0x0431, 0x0443, 0x0448, 0x0451, 0x0459, 0x0461, + 0x0468, 0x046d, 0x0474, 0x047c, 0x0482, 0x0487, 0x0499, 0x04a2, + 0x04a7, 0x04ae, 0x04b3, 0x04b9, 0x04bf, 0x04c9, 0x04d1, 0x04da, + 0x04e2, 0x04e9, 0x04ee, 0x04f4, 0x04fc, 0x0505, 0x050a, 0x0513, + 0x0517, 0x051d, 0x0522, 0x052c, 0x0534, 0x053a, 0x0540, 0x0545, + 0x054a, 0x0550, 0x0556, 0x055b, 0x0560, 0x0568, 0x056d, 0x0574, + 0x057b, 0x057b, 0x0583, 0x0588, 0x058c, 0x0592, 0x0592, 0x059b, + // Entry C0 - FF + 0x059b, 0x05ac, 0x05bb, 0x05c1, 0x05c7, 0x05ce, 0x05ce, 0x05d5, + 0x05d5, 0x05d5, 0x05dd, 0x05dd, 0x05dd, 0x05e0, 0x05e0, 0x05e9, + 0x05e9, 0x05ef, 0x05f6, 0x05fe, 0x05fe, 0x0603, 0x0609, 0x0609, + 0x0610, 0x0614, 0x0619, 0x0619, 0x061d, 0x0622, 0x0622, 0x0634, + 0x063e, 0x0643, 0x0647, 0x0647, 0x064a, 0x0651, 0x0651, 0x0651, + 0x0655, 0x0655, 0x0659, 0x065f, 0x0666, 0x066e, 0x0672, 0x0676, + 0x067d, 0x0682, 0x0688, 0x068e, 0x0693, 0x069a, 0x069f, 0x06a6, + 0x06af, 0x06b6, 0x06bb, 0x06c7, 0x06ce, 0x06d7, 0x06df, 0x06e6, + // Entry 100 - 13F + 0x06f2, 0x06f7, 0x06f7, 0x0709, 0x071c, 0x0723, 0x0729, 0x072f, + 0x0734, 0x073c, 0x0741, 0x0747, 0x074c, 0x0751, 0x0756, 0x0761, + 0x0761, 0x0766, 0x0777, 0x0781, 0x0786, 0x078c, 0x0790, 0x0794, + 0x0794, 0x07a3, 0x07a9, 0x07b0, 0x07bd, 0x07bd, 0x07c3, 0x07c3, + 0x07c7, 0x07cf, 0x07cf, 0x07d2, 0x07d2, 0x07e0, 0x07f0, 0x07f0, + 0x0805, 0x0815, 0x081d, 0x081f, 0x0826, 0x082f, 0x0833, 0x0838, + 0x0838, 0x083c, 0x0846, 0x0846, 0x0858, 0x086c, 0x086c, 0x0871, + 0x087a, 0x0881, 0x0886, 0x0894, 0x08a1, 0x08a1, 0x08a1, 0x08a6, + // Entry 140 - 17F + 0x08ad, 0x08b2, 0x08bd, 0x08c5, 0x08c5, 0x08cf, 0x08d5, 0x08da, + 0x08e5, 0x08f0, 0x08f4, 0x08f8, 0x08fe, 0x0905, 0x090b, 0x090b, + 0x090b, 0x0911, 0x0917, 0x091e, 0x0929, 0x0935, 0x0935, 0x0940, + 0x0946, 0x094c, 0x094f, 0x0954, 0x0958, 0x0962, 0x0969, 0x096d, + 0x0974, 0x0988, 0x0988, 0x098c, 0x098c, 0x0991, 0x0999, 0x09a5, + 0x09a5, 0x09a5, 0x09a9, 0x09b1, 0x09b9, 0x09c4, 0x09cc, 0x09d5, + 0x09db, 0x09ea, 0x09ea, 0x09ea, 0x09f1, 0x09f7, 0x09ff, 0x0a04, + 0x0a0b, 0x0a10, 0x0a17, 0x0a1d, 0x0a22, 0x0a28, 0x0a2d, 0x0a35, + // Entry 180 - 1BF + 0x0a35, 0x0a35, 0x0a35, 0x0a3b, 0x0a3b, 0x0a40, 0x0a44, 0x0a57, + 0x0a57, 0x0a61, 0x0a69, 0x0a6e, 0x0a71, 0x0a75, 0x0a7a, 0x0a7a, + 0x0a7a, 0x0a82, 0x0a86, 0x0a8c, 0x0a94, 0x0a9b, 0x0aa3, 0x0aa9, + 0x0aad, 0x0ab3, 0x0ab9, 0x0abe, 0x0ac2, 0x0ad4, 0x0ae3, 0x0af1, + 0x0af8, 0x0afe, 0x0b09, 0x0b10, 0x0b18, 0x0b1e, 0x0b23, 0x0b23, + 0x0b2a, 0x0b38, 0x0b3d, 0x0b46, 0x0b4d, 0x0b4d, 0x0b52, 0x0b57, + 0x0b63, 0x0b70, 0x0b7a, 0x0b7e, 0x0b8a, 0x0b90, 0x0b94, 0x0b9b, + 0x0b9b, 0x0ba1, 0x0baa, 0x0baf, 0x0bbf, 0x0bbf, 0x0bc5, 0x0bda, + // Entry 1C0 - 1FF + 0x0bde, 0x0bed, 0x0bf5, 0x0bfd, 0x0c02, 0x0c07, 0x0c0c, 0x0c19, + 0x0c24, 0x0c2b, 0x0c33, 0x0c3d, 0x0c45, 0x0c45, 0x0c56, 0x0c56, + 0x0c56, 0x0c63, 0x0c63, 0x0c6a, 0x0c6a, 0x0c6a, 0x0c74, 0x0c7c, + 0x0c8d, 0x0c94, 0x0c94, 0x0c9e, 0x0ca5, 0x0cb0, 0x0cb0, 0x0cb0, + 0x0cb5, 0x0cbc, 0x0cbc, 0x0cbc, 0x0cbc, 0x0cc4, 0x0cc7, 0x0cce, + 0x0cd3, 0x0ce4, 0x0ceb, 0x0cf0, 0x0cf7, 0x0cf7, 0x0cfe, 0x0d03, + 0x0d0c, 0x0d14, 0x0d14, 0x0d24, 0x0d2a, 0x0d2e, 0x0d2e, 0x0d34, + 0x0d43, 0x0d54, 0x0d54, 0x0d5d, 0x0d61, 0x0d70, 0x0d76, 0x0d76, + // Entry 200 - 23F + 0x0d76, 0x0d85, 0x0d8e, 0x0d98, 0x0da2, 0x0daa, 0x0db2, 0x0dbe, + 0x0dc3, 0x0dc7, 0x0dc7, 0x0dcd, 0x0dd1, 0x0dd8, 0x0de1, 0x0df2, + 0x0df9, 0x0df9, 0x0df9, 0x0dfe, 0x0e02, 0x0e08, 0x0e0e, 0x0e14, + 0x0e17, 0x0e21, 0x0e21, 0x0e28, 0x0e2f, 0x0e2f, 0x0e37, 0x0e46, + 0x0e4f, 0x0e4f, 0x0e55, 0x0e55, 0x0e5f, 0x0e5f, 0x0e66, 0x0e6f, + 0x0e76, 0x0e7f, 0x0e9a, 0x0ea0, 0x0eaa, 0x0eb1, 0x0eb6, 0x0eb9, + 0x0eb9, 0x0eb9, 0x0eb9, 0x0eb9, 0x0ec0, 0x0ec0, 0x0ec5, 0x0ecb, + 0x0ed2, 0x0ed7, 0x0edc, 0x0ee4, 0x0eec, 0x0ef2, 0x0ef2, 0x0ef6, + // Entry 240 - 27F + 0x0ef9, 0x0eff, 0x0f06, 0x0f0b, 0x0f0b, 0x0f14, 0x0f1c, 0x0f2b, + 0x0f2b, 0x0f31, 0x0f4e, 0x0f53, 0x0f6e, 0x0f74, 0x0f8c, 0x0f8c, + 0x0f9e, 0x0fb0, 0x0fc3, 0x0fd5, 0x0fe7, 0x0ffd, 0x1015, 0x1028, + 0x103b, 0x103b, 0x104e, 0x105c, 0x1067, 0x106f, 0x1083, 0x1099, + 0x10a0, 0x10ab, 0x10bc, 0x10ce, 0x10df, +} // Size: 1250 bytes + +const es419LangStr string = "" + // Size: 218 bytes + "vascogujaratihaitianolaosianoretorrománicoswahiliyídishachenésadigeoarap" + + "ajógriego clásicosorbio altoCriollo (Cabo Verde)luoprusiano antiguoárabe" + + " (Chad)tamazight del Marruecos Centralvaiwalamowuzuniswahili (Congo)" + +var es419LangIdx = []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 40 - 7F + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + // Entry 80 - BF + 0x001d, 0x001d, 0x001d, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0041, 0x0041, 0x0041, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + // Entry C0 - FF + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + // Entry 100 - 13F + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + // Entry 140 - 17F + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + // Entry 180 - 1BF + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + // Entry 1C0 - 1FF + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x009d, 0x009d, 0x009d, + // Entry 200 - 23F + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bf, + 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c7, 0x00c7, 0x00c7, 0x00c7, + // Entry 240 - 27F + 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, + 0x00c7, 0x00c7, 0x00c7, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, + 0x00cb, 0x00cb, 0x00da, +} // Size: 1246 bytes + +const etLangStr string = "" + // Size: 4574 bytes + "afariabhaasiavestaafrikaaniakaniamharaaragoniaraabiaassamiavaariaimaraas" + + "erbaidžaanibaškiirivalgevenebulgaariabislamabambarabengalitiibetibretoon" + + "ibosniakatalaanitšetšeenitšamorrokorsikakriitšehhikirikuslaavitšuvašikõm" + + "ritaanisaksamaldiividzongkhaevekreekaingliseesperantohispaaniaeestibaski" + + "pärsiafulasoomefidžifääriprantsuseläänefriisiiirigaeligaleegiguaraniigud" + + "žaratimänksihausaheebreahindihirimotuhorvaadihaitiungariarmeeniahereroi" + + "nterlinguaindoneesiainterlingueiboSichuani jiiinjupiakiidoislandiitaalia" + + "inuktitutijaapanijaavagruusiakongokikujukvanjamakasahhigröönikhmeerikann" + + "adakoreakanurikašmiirikurdikomikornikirgiisiladinaletseburgigandalimburg" + + "ilingalalaoleedulubalätimalagassimaršallimaoorimakedooniamalajalamimongo" + + "limarathimalaimaltabirmanaurupõhjandebelenepalindongahollandiuusnorranor" + + "ra bokmållõunandebelenavahonjandžaoksitaaniodžibveioromooriaosseedipandž" + + "abipaalipoolapuštuportugaliketšuaromanširundirumeeniaveneruandasanskriti" + + "sardisindhipõhjasaamisangosingalislovakisloveenisamoašonasomaalialbaania" + + "serbiasvaasilõunasothosundarootsisuahiilitamilitelugutadžikitaitigrinjat" + + "ürkmeenitsvanatongatürgitsongatataritahitiuiguuriukrainaurduusbekivenda" + + "vietnamivolapükivalloonivolofikoosajidišijorubatšuangihiinasuuluatšehiat" + + "šoliadangmeadõgeeTuneesia araabiaafrihiliaghemiainuakadialabamaaleuudig" + + "eegialtaivanaingliseangikaarameamapudunguniaraonaarapahoAlžeeria araabia" + + "aravakiMaroko araabiaEgiptuse araabiaasuAmeerika viipekeelastuuriaavadhi" + + "belutšibalibaieribasabamunibatakighomalabedžabembabetavibenabafutibadaga" + + "läänebelutšibhodžpuribikoliedobandžarikomi (Aafrika)mustjalaindiaanibišn" + + "uprijabahtiaribradžibrahuibodoakooseburjaadibugibulubilinimedumbakadokar" + + "iibikajukaatsamisebutšigatšibtšatšagataitšuugimaritšinuki žargoontšoktot" + + "šipevaitšerokiišaieenisoranikoptikapisnonikrimmitatariseišellikašuubisi" + + "uudargidavidadelavarisleividogribidinkazarmadogrialamsorbikeskdusunidual" + + "akeskhollandifonjidjuladazaembuefikiemiiliaegiptuseekadžukieelamikesking" + + "lisekeskjupikievondoestremenjufangifilipiinimeäfonicajun’ikeskprantsusev" + + "anaprantsusefrankoprovansipõhjafriisiidafriisifriuuligaagagauusikanigajo" + + "gbajaetioopiakiribatigilakikeskülemsaksavanaülemsaksagondigorontalogooti" + + "grebovanakreekašveitsisaksavajuufarefaregusiigvitšinihaidahakkahavaiFidž" + + "i hindihiligainonihetihmongiülemsorbisjangihupaibaniibibioilokoingušiisu" + + "riJamaica kreoolkeelložbanngombamatšamejuudipärsiajuudiaraabiajüütikarak" + + "alpakikabiilikatšinijjukambakaavikabardi-tšerkessikanembutjapimakondekab" + + "uverdianukorokaingangikhasisakakoyra chiinikhovarikõrmandžkikakokalendži" + + "nimbundupermikomikonkanikosraekpellekaratšai-balkaarikriokinaraiakarjala" + + "kuruhhišambalabafiakölnikumõkikutenailadiinolangilahndalambalesgiliguuri" + + "liivilakotalombardimongolozipõhjalurilatgalilulualuisenjolundaluolušeilu" + + "hjaklassikaline hiinalazimaduramafamagahimaithilimakassarimalinkemasaima" + + "bamokšamandarimendemeruMauritiuse kreoolkeelkeskiirimakhuwa-meettometami" + + "kmakiminangkabaumandžumanipurimohoogimoremäemarimundangimitu keeltmaskog" + + "imirandamarvarimentaveimjeneersamazandaraanilõunamininapolinamaalamsaksa" + + "nevariniasiniueaokwasiongiembooninogaivanapõhjalanoviaalnkoopõhjasothonu" + + "erivananevarinjamvesinkolenjoronzimaoseidžiosmanitürgipangasinanipahlavi" + + "pampangapapiamentobelaupikardiNigeeria pidžinkeelPennsylvania saksamenno" + + "niidisaksavanapärsiaPfalzifoiniikiapiemontepontosepoonpeipreisivanaprova" + + "nsikitšeradžastanirapanuirarotongaromanjariifirombomustlaskeelrotumaruss" + + "iinirovianaaromuunirvaasandavejakuudiSamaaria arameasamburusasakisantali" + + "sauraštrangambaisangusitsiiliašotilõunakurdisenekasenaserisölkupikoyrabo" + + "ro sennivanaiirižemaidišilhašaniTšaadi araabiasidamoalamsileesiaselajari" + + "lõunasaamiLule saamiInari saamikoltasaamisoninkesogdisrananisererisahosa" + + "terfriisisukumasususumerikomoorivanasüüriasüüriasileesiatulutemnetesoter" + + "enotetumitigreetivitokelautsahhiklingonitlingititalõšitamašekitšitongauu" + + "smelaneesiaturojotarokotsakooniatšimšilõunataaditumbukatuvalutaswaqitõva" + + "tamasiktiudmurdiugaritiumbundurootvaivenetivepsalääneflaamiMaini frangiv" + + "adjavõruvundžowalserivolaitavaraivašovarlpiriuukalmõkimegrelisogajaojapi" + + "yangbenijembanjengatukantonisapoteegiBlissi sümbolidzeelandizenagatamasi" + + "kti (Maroko)sunjimittekeelelinezazaaraabia (tänapäevane)Austria saksaŠve" + + "itsi ülemsaksaAustraalia ingliseKanada ingliseBriti ingliseAmeerika ingl" + + "iseLadina-Ameerika hispaaniaEuroopa hispaaniaMehhiko hispaaniaKanada pra" + + "ntsuseŠveitsi prantsuseHollandi alamsaksaflaamiBrasiilia portugaliEuroop" + + "a portugalimoldovaserbia-horvaadiKongo suahiili" + +var etLangIdx = []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x000c, 0x0012, 0x001b, 0x0020, 0x0026, 0x002d, + 0x0034, 0x003a, 0x0040, 0x0046, 0x0054, 0x005d, 0x0066, 0x006f, + 0x0076, 0x007d, 0x0084, 0x008b, 0x0093, 0x0099, 0x00a2, 0x00ad, + 0x00b6, 0x00bd, 0x00c1, 0x00c8, 0x00d4, 0x00dd, 0x00e3, 0x00e8, + 0x00ed, 0x00f5, 0x00fd, 0x0100, 0x0106, 0x010d, 0x0116, 0x011f, + 0x0124, 0x0129, 0x0130, 0x0134, 0x0139, 0x013f, 0x0146, 0x014f, + 0x015c, 0x0160, 0x0165, 0x016c, 0x0174, 0x017e, 0x0185, 0x018a, + 0x0191, 0x0196, 0x019e, 0x01a6, 0x01ab, 0x01b1, 0x01b9, 0x01bf, + // Entry 40 - 7F + 0x01ca, 0x01d4, 0x01df, 0x01e2, 0x01ee, 0x01f7, 0x01fa, 0x0201, + 0x0208, 0x0212, 0x0219, 0x021e, 0x0225, 0x022a, 0x0230, 0x0238, + 0x023f, 0x0247, 0x024e, 0x0255, 0x025a, 0x0260, 0x0269, 0x026e, + 0x0272, 0x0277, 0x027f, 0x0285, 0x028f, 0x0294, 0x029c, 0x02a3, + 0x02a6, 0x02ab, 0x02af, 0x02b4, 0x02bd, 0x02c6, 0x02cc, 0x02d6, + 0x02e0, 0x02e7, 0x02ee, 0x02f3, 0x02f8, 0x02fd, 0x0302, 0x030f, + 0x0315, 0x031b, 0x0323, 0x032b, 0x0338, 0x0345, 0x034b, 0x0353, + 0x035c, 0x0365, 0x036a, 0x036e, 0x0375, 0x037e, 0x0383, 0x0388, + // Entry 80 - BF + 0x038e, 0x0397, 0x039e, 0x03a6, 0x03ab, 0x03b3, 0x03b7, 0x03bd, + 0x03c6, 0x03cb, 0x03d1, 0x03dc, 0x03e1, 0x03e8, 0x03ef, 0x03f7, + 0x03fc, 0x0401, 0x0408, 0x0410, 0x0416, 0x041c, 0x0427, 0x042c, + 0x0432, 0x043a, 0x0440, 0x0446, 0x044e, 0x0451, 0x0459, 0x0463, + 0x0469, 0x046e, 0x0474, 0x047a, 0x0480, 0x0486, 0x048d, 0x0494, + 0x0498, 0x049e, 0x04a3, 0x04ab, 0x04b4, 0x04bc, 0x04c2, 0x04c7, + 0x04ce, 0x04d4, 0x04dc, 0x04e1, 0x04e6, 0x04ed, 0x04f4, 0x04fb, + 0x0502, 0x0512, 0x051a, 0x0520, 0x0524, 0x0529, 0x0530, 0x0537, + // Entry C0 - FF + 0x053c, 0x0541, 0x054c, 0x0552, 0x0558, 0x0563, 0x0569, 0x0570, + 0x0581, 0x0581, 0x0588, 0x0596, 0x05a6, 0x05a9, 0x05bb, 0x05c3, + 0x05c3, 0x05c9, 0x05d1, 0x05d5, 0x05db, 0x05df, 0x05e5, 0x05eb, + 0x05f2, 0x05f8, 0x05fd, 0x0603, 0x0607, 0x060d, 0x0613, 0x0622, + 0x062c, 0x0632, 0x0635, 0x063e, 0x064c, 0x065c, 0x0667, 0x066f, + 0x0676, 0x067c, 0x0680, 0x0686, 0x068e, 0x0692, 0x0696, 0x069c, + 0x06a3, 0x06a7, 0x06ae, 0x06b4, 0x06ba, 0x06be, 0x06c4, 0x06cd, + 0x06d6, 0x06dd, 0x06e1, 0x06f2, 0x06f9, 0x0702, 0x070b, 0x0713, + // Entry 100 - 13F + 0x0719, 0x071e, 0x0727, 0x0733, 0x073c, 0x0744, 0x0748, 0x074d, + 0x0753, 0x075b, 0x0761, 0x0768, 0x076d, 0x0772, 0x0777, 0x0780, + 0x078a, 0x078f, 0x079b, 0x07a0, 0x07a5, 0x07a9, 0x07ad, 0x07b2, + 0x07b9, 0x07c1, 0x07ca, 0x07d0, 0x07db, 0x07e5, 0x07eb, 0x07f5, + 0x07fa, 0x0803, 0x0807, 0x080b, 0x0814, 0x0821, 0x082e, 0x083c, + 0x0848, 0x0851, 0x0858, 0x085b, 0x0863, 0x0867, 0x086b, 0x0870, + 0x0870, 0x0878, 0x0880, 0x0886, 0x0894, 0x08a2, 0x08a2, 0x08a7, + 0x08b0, 0x08b5, 0x08ba, 0x08c4, 0x08d1, 0x08d6, 0x08de, 0x08e3, + // Entry 140 - 17F + 0x08ec, 0x08f1, 0x08f6, 0x08fb, 0x0907, 0x0912, 0x0916, 0x091c, + 0x0926, 0x092c, 0x0930, 0x0935, 0x093b, 0x0940, 0x0947, 0x094c, + 0x095e, 0x0965, 0x096b, 0x0973, 0x097f, 0x098b, 0x0992, 0x099d, + 0x09a4, 0x09ac, 0x09af, 0x09b4, 0x09b9, 0x09cb, 0x09d2, 0x09d7, + 0x09de, 0x09ea, 0x09ea, 0x09ee, 0x09f7, 0x09fc, 0x0a00, 0x0a0c, + 0x0a13, 0x0a1f, 0x0a23, 0x0a2e, 0x0a34, 0x0a3d, 0x0a44, 0x0a4a, + 0x0a50, 0x0a62, 0x0a66, 0x0a6e, 0x0a75, 0x0a7c, 0x0a84, 0x0a89, + 0x0a8f, 0x0a96, 0x0a9d, 0x0aa4, 0x0aa9, 0x0aaf, 0x0ab4, 0x0ab9, + // Entry 180 - 1BF + 0x0ab9, 0x0ac0, 0x0ac5, 0x0acb, 0x0ad3, 0x0ad8, 0x0adc, 0x0ae6, + 0x0aed, 0x0af2, 0x0afa, 0x0aff, 0x0b02, 0x0b08, 0x0b0d, 0x0b1f, + 0x0b23, 0x0b29, 0x0b2d, 0x0b33, 0x0b3b, 0x0b44, 0x0b4b, 0x0b50, + 0x0b54, 0x0b5a, 0x0b61, 0x0b66, 0x0b6a, 0x0b7f, 0x0b87, 0x0b95, + 0x0b99, 0x0ba0, 0x0bab, 0x0bb2, 0x0bba, 0x0bc1, 0x0bc5, 0x0bcd, + 0x0bd5, 0x0bdf, 0x0be6, 0x0bed, 0x0bf4, 0x0bfc, 0x0c01, 0x0c05, + 0x0c11, 0x0c1b, 0x0c21, 0x0c25, 0x0c2e, 0x0c34, 0x0c39, 0x0c3d, + 0x0c3f, 0x0c45, 0x0c4f, 0x0c54, 0x0c60, 0x0c67, 0x0c6b, 0x0c76, + // Entry 1C0 - 1FF + 0x0c7b, 0x0c85, 0x0c8d, 0x0c92, 0x0c97, 0x0c9c, 0x0ca4, 0x0cb0, + 0x0cbb, 0x0cc2, 0x0cca, 0x0cd4, 0x0cd9, 0x0ce0, 0x0cf4, 0x0d06, + 0x0d15, 0x0d20, 0x0d26, 0x0d2f, 0x0d37, 0x0d3e, 0x0d45, 0x0d4b, + 0x0d57, 0x0d5d, 0x0d5d, 0x0d68, 0x0d6f, 0x0d78, 0x0d7f, 0x0d84, + 0x0d89, 0x0d94, 0x0d9a, 0x0da2, 0x0da9, 0x0db1, 0x0db5, 0x0dbc, + 0x0dc3, 0x0dd2, 0x0dd9, 0x0ddf, 0x0de6, 0x0df0, 0x0df7, 0x0dfc, + 0x0e05, 0x0e0a, 0x0e0a, 0x0e15, 0x0e1b, 0x0e1f, 0x0e23, 0x0e2b, + 0x0e3a, 0x0e42, 0x0e4a, 0x0e50, 0x0e55, 0x0e64, 0x0e6a, 0x0e76, + // Entry 200 - 23F + 0x0e7e, 0x0e89, 0x0e93, 0x0e9e, 0x0ea8, 0x0eaf, 0x0eb4, 0x0ebb, + 0x0ec1, 0x0ec5, 0x0ed0, 0x0ed6, 0x0eda, 0x0ee0, 0x0ee7, 0x0ef3, + 0x0efb, 0x0f03, 0x0f07, 0x0f0c, 0x0f10, 0x0f16, 0x0f1c, 0x0f22, + 0x0f26, 0x0f2d, 0x0f33, 0x0f3b, 0x0f43, 0x0f4b, 0x0f54, 0x0f5d, + 0x0f6a, 0x0f70, 0x0f76, 0x0f7f, 0x0f87, 0x0f92, 0x0f99, 0x0f9f, + 0x0fa6, 0x0fab, 0x0fb4, 0x0fbb, 0x0fc2, 0x0fc9, 0x0fcd, 0x0fd0, + 0x0fd6, 0x0fdb, 0x0fe8, 0x0ff4, 0x0ff9, 0x0ffe, 0x1005, 0x100c, + 0x1013, 0x1018, 0x101d, 0x1025, 0x1027, 0x102f, 0x1036, 0x103a, + // Entry 240 - 27F + 0x103d, 0x1041, 0x1049, 0x104e, 0x1056, 0x105d, 0x1066, 0x1076, + 0x107e, 0x1084, 0x1096, 0x109b, 0x10a9, 0x10ad, 0x10c4, 0x10c4, + 0x10d1, 0x10e4, 0x10f6, 0x1104, 0x1111, 0x1121, 0x113a, 0x114b, + 0x115c, 0x115c, 0x116c, 0x117e, 0x1190, 0x1196, 0x11a9, 0x11ba, + 0x11c1, 0x11d0, 0x11de, +} // Size: 1246 bytes + +const faLangStr string = "" + // Size: 7988 bytes + "آفاریآبخازیاوستاییآفریکانسآکانامهریآراگونیعربیآسامیآواریآیماراییترکی آذر" + + "بایجانیباشغیریبلاروسیبلغاریبیسلامابامباراییبنگالیتبتیبرتونبوسنیاییکاتال" + + "انچچنیچاموروییکورسیکریاییچکیاسلاوی کلیساییچوواشیولزیدانمارکیآلمانیدیوهی" + + "جونخاییاوه\u200cاییونانیانگلیسیاسپرانتواسپانیاییاستونیاییباسکیفارسیفولا" + + "ییفنلاندیفیجیاییفاروییفرانسویفریزی غربیایرلندیگیلی اسکاتلندیگالیسیاییگو" + + "ارانیگجراتیمانیهوسیاییعبریهندیموتویی هیریکرواتهائیتیاییمجاریارمنیهریروی" + + "یمیان\u200cزباناندونزیاییاکسیدنتالایگبویییی سیچواناینوپیکایدوایسلندیایت" + + "الیاییاینوکتیتوتژاپنیجاوه\u200cایگرجیکنگوییکیکویوییکوانیاماقزاقیگرینلند" + + "یخمریکاناراکره\u200cایکانوریاییکشمیریکردیکومیاییکرنوالیقرقیزیلاتینلوگزا" + + "مبورگیگانداییلیمبورگیلینگالالائوسیلیتوانیاییلوبایی‐کاتانگالتونیاییمالاگ" + + "اسیاییمارشالیمائوریاییمقدونیمالایالامیمغولیمراتیمالاییمالتیبرمه\u200cای" + + "نائوروییانده\u200cبله\u200cای شمالینپالیاندونگاییهلندینروژی نی\u200cنُش" + + "کنروژی بوک\u200cمُلانده\u200cبله\u200cای جنوبیناواهویینیانجاییاوکیتاییا" + + "وجیبواییاوروموییاوریه\u200cایآسیپنجابیپالیلهستانیپشتوپرتغالیکچواییرومان" + + "شروندیاییرومانیاییروسیکینیاروانداییسانسکریتساردینیاییسندیسامی شمالیسانگ" + + "وسینهالیاسلواکیاسلوونیاییساموآییشوناییسومالیاییآلبانیاییصربیسوازیاییسوت" + + "ویی جنوبیسونداییسوئدیسواحیلیتامیلیتلوگوییتاجیکیتایلندیتیگرینیاییترکمنیت" + + "سواناییتونگاییترکی استانبولیتسونگاییتاتاریتاهیتیاییاویغوریاوکراینیاردوا" + + "زبکیونداییویتنامیولاپوکوالونیولوفیخوسایییدییوروباییچوانگیچینیزولوییآچئی" + + "آچولیاییآدانگمه\u200cایآدیجیاییعربی تونسیآفریهیلیآگیمآینوییاکدیآلابامای" + + "یآلئوتیآلتایی جنوبیانگلیسی باستانآنگیکاآرامیماپوچه\u200cایآراپاهوییعربی" + + " الجزایریآراواکیعربی مراکشیعربی مصریآسوآستوریاودهیبلوچیبالیاییباواریاییب" + + "اساییبمونیبجاییبمباییبناییبلوچی غربیبوجپوریبیکولیبینیسیکسیکالری بختیاری" + + "براجبراهوییبودوییبوریاتیبوگیاییبلینکادوییکاریبیسبوییچیگاچیبچاجغتاییچوکی" + + "ماریاییچوکتوییچیپه\u200cویه\u200cایچروکیاییشایانیکردی مرکزیقبطیترکی کری" + + "مهسیشل آمیختهٔ فرانسویکاشوبیداکوتاییدارقینیتایتادلاواریدوگریبدینکاییزرم" + + "ادوگریصُربی سفلیدوآلاییهلندی میانهدیولا فونیدایولاییدازاگاییامبوافیکیمص" + + "ری کهناکاجوکعیلامیانگلیسی میانهاواندوفانگیفیلیپینیفونیفرانسوی کادینفران" + + "سوی میانهفرانسوی باستانفریزی شمالیفریزی شرقیفریولیاییگاییگاگائوزیاییگای" + + "وییگبایاییدری زرتشتیگی\u200cئزیگیلبرتیگیلکیآلمانی معیار میانهآلمانی علی" + + "ای باستانگوندیگورونتالوگوتیگریبویییونانی کهنآلمانی سوئیسیگوسیگویچ اینها" + + "یداییهاوائیاییهندی فیجیاییهیلی\u200cگاینونیهیتیهمونگصُربی علیاهوپاایبان" + + "یایبیبوییایلوکوییاینگوشیلوجباننگومباماچامه\u200cایفارسی یهودیعربی یهودی" + + "قره\u200cقالپاقیقبایلیکاچینیجوکامباییکاویاییکاباردینیتیاپیماکوندهکابوور" + + "دیانوکوروخاسیاییختنیکوجراچینیکهوارکرمانجیکاکاییکالنجینکیمبوندوییکومی پر" + + "میاککنکانیکپله\u200cایقره\u200cچایی‐بالکاریکاریلیانیکوروخیشامبالابافیای" + + "یریپواریکومیکیکوتنیلادینولانگیلاهندالامبالزگیلاکوتامونگوییلوزیاییلری شم" + + "الیلوبایی‐لولوالویسنولونداییلوئوییلوشه\u200cایلویاچینی ادبیمادوراییماگا" + + "هیاییمایدیلیماکاسارماندینگوییماساییمکشاییماندارمنده\u200cایمروییموریسین" + + "ایرلندی میانهماکوا متومتاییمیکماکیمینانگ\u200cکابوییمانچوییمیته\u200cای" + + "موهاکیماسیاییماندانگیچندین زبانکریکیمیراندیمارواریارزیاییمازندرانیناپلی" + + "ناماییآلمانی سفلینواریایینیاسینیوییکوازیوانگیمبونینغایینرس باستاننکوسوت" + + "ویی شمالینویرنواریایی کلاسیکنیام\u200cوزیایینیانکوله\u200cاینیورویینزیم" + + "اییاوسیجیترکی عثمانیپانگاسینانیپهلویپامپانگاییپاپیامنتوپالائویینیم" + + "\u200cزبان نیجریه\u200cایآلمانی پنسیلوانیاییفارسی باستانفنیقیپانپییپروسی" + + "پرووانسی باستانکیچه\u200cراجستانیراپانوییراروتونگاییرومبوییرومانوییآروم" + + "انیرواییسانداوه\u200cاییاقوتیآرامی سامریسامبوروساساکیسانتالیانگامباییسا" + + "نگوییسیسیلیاسکاتلندیکردی جنوبیسناسلکوپیکویرابورا سنیایرلندی باستانتاچل" + + "\u200cهیتشانیعربی چادیسیداموییسیلزیایی سفلیسامی جنوبیلوله سامیایناری سام" + + "یاسکولت سامیسونینکه\u200cایسغدیتاکی\u200cتاکیسریریساهوسوکوماییسوسوییسوم" + + "ریکوموریسریانی کلاسیکسریانیسیلزیاییتمنه\u200cایتسوییترنوتتومیتیگره" + + "\u200cایتیویکلینگونتلین\u200cگیتیتاماشقیتونگایی نیاساتوک\u200cپیسینیتارو" + + "کوییتسیم\u200cشیانیتومبوکاییتووالوییتسواکیتوواییآمازیغی اطلس مرکزیاودمو" + + "رتیاوگاریتیامبوندوییریشهویاییوتیونجووالسروالاموواراییواشوییوارلپیریقلمو" + + "قیسوگایییائویییاپییانگبنییمباییکانتونیزاپوتکیزناگاآمازیغی معیار مراکشزو" + + "نیاییبدون محتوای زبانیزازاییعربی رسمیترکی آذری جنوبیآلمانی اتریشآلمانی " + + "معیار سوئیسانگلیسی استرالیاانگلیسی کاناداانگلیسی بریتانیاانگلیسی امریکا" + + "اسپانیایی امریکای لاتیناسپانیایی اروپااسپانیایی مکزیکدریفرانسوی کاناداف" + + "رانسوی سوئیسساکسونی سفلیفلمنگیپرتغالی برزیلپرتغالی اروپامولداویاییصرب و" + + " کرواتیسواحیلی کنگوچینی ساده\u200cشدهچینی سنتی" + +var faLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000a, 0x0016, 0x0024, 0x0034, 0x003c, 0x0046, 0x0054, + 0x005c, 0x0066, 0x0070, 0x0080, 0x009d, 0x00ab, 0x00b9, 0x00c5, + 0x00d3, 0x00e5, 0x00f1, 0x00f9, 0x0103, 0x0113, 0x0121, 0x0129, + 0x0139, 0x0143, 0x014f, 0x0155, 0x0170, 0x017c, 0x0184, 0x0194, + 0x01a0, 0x01aa, 0x01b8, 0x01c5, 0x01d1, 0x01df, 0x01ef, 0x0201, + 0x0213, 0x021d, 0x0227, 0x0233, 0x0241, 0x024f, 0x025b, 0x0269, + 0x027c, 0x028a, 0x02a5, 0x02b7, 0x02c5, 0x02d1, 0x02d9, 0x02e7, + 0x02ef, 0x02f7, 0x030c, 0x0316, 0x0328, 0x0332, 0x033c, 0x034a, + // Entry 40 - 7F + 0x035d, 0x0371, 0x0383, 0x0391, 0x03a2, 0x03b0, 0x03b8, 0x03c6, + 0x03d8, 0x03ec, 0x03f6, 0x0405, 0x040d, 0x0419, 0x0429, 0x0439, + 0x0443, 0x0453, 0x045b, 0x0467, 0x0474, 0x0486, 0x0492, 0x049a, + 0x04a8, 0x04b6, 0x04c2, 0x04cc, 0x04e2, 0x04f0, 0x0500, 0x050e, + 0x051a, 0x052e, 0x054b, 0x055b, 0x0571, 0x057f, 0x0591, 0x059d, + 0x05b1, 0x05bb, 0x05c5, 0x05d1, 0x05db, 0x05ea, 0x05fa, 0x061d, + 0x0627, 0x0639, 0x0643, 0x065d, 0x0677, 0x069a, 0x06aa, 0x06ba, + 0x06ca, 0x06dc, 0x06ec, 0x06fd, 0x0703, 0x070f, 0x0717, 0x0725, + // Entry 80 - BF + 0x072d, 0x073b, 0x0747, 0x0753, 0x0763, 0x0775, 0x077d, 0x0797, + 0x07a7, 0x07bb, 0x07c3, 0x07d6, 0x07e0, 0x07ee, 0x07fc, 0x0810, + 0x081e, 0x082a, 0x083c, 0x084e, 0x0856, 0x0866, 0x087d, 0x088b, + 0x0895, 0x08a3, 0x08af, 0x08bd, 0x08c9, 0x08d7, 0x08eb, 0x08f7, + 0x0907, 0x0915, 0x0930, 0x0940, 0x094c, 0x095e, 0x096c, 0x097c, + 0x0984, 0x098e, 0x099a, 0x09a8, 0x09b4, 0x09c0, 0x09ca, 0x09d6, + 0x09dc, 0x09ec, 0x09f8, 0x0a00, 0x0a0c, 0x0a14, 0x0a24, 0x0a39, + 0x0a49, 0x0a5c, 0x0a6c, 0x0a74, 0x0a80, 0x0a88, 0x0a9a, 0x0aa6, + // Entry C0 - FF + 0x0aa6, 0x0abd, 0x0ad8, 0x0ae4, 0x0aee, 0x0b01, 0x0b01, 0x0b13, + 0x0b2c, 0x0b2c, 0x0b3a, 0x0b4f, 0x0b60, 0x0b66, 0x0b66, 0x0b72, + 0x0b72, 0x0b7c, 0x0b86, 0x0b94, 0x0ba6, 0x0bb2, 0x0bbc, 0x0bbc, + 0x0bbc, 0x0bc6, 0x0bd2, 0x0bd2, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bef, + 0x0bfd, 0x0c09, 0x0c11, 0x0c11, 0x0c11, 0x0c1f, 0x0c1f, 0x0c34, + 0x0c3c, 0x0c4a, 0x0c56, 0x0c56, 0x0c64, 0x0c72, 0x0c72, 0x0c7a, + 0x0c7a, 0x0c86, 0x0c92, 0x0c92, 0x0c92, 0x0c9c, 0x0ca4, 0x0cae, + 0x0cba, 0x0cc2, 0x0cd0, 0x0cd0, 0x0cde, 0x0cf6, 0x0d06, 0x0d12, + // Entry 100 - 13F + 0x0d25, 0x0d2d, 0x0d2d, 0x0d40, 0x0d66, 0x0d72, 0x0d82, 0x0d90, + 0x0d9a, 0x0da8, 0x0da8, 0x0db4, 0x0dc2, 0x0dca, 0x0dd4, 0x0de7, + 0x0de7, 0x0df5, 0x0e0a, 0x0e1d, 0x0e2d, 0x0e3d, 0x0e45, 0x0e4f, + 0x0e4f, 0x0e5e, 0x0e6a, 0x0e76, 0x0e8f, 0x0e8f, 0x0e9b, 0x0e9b, + 0x0ea5, 0x0eb5, 0x0eb5, 0x0ebd, 0x0ed6, 0x0eef, 0x0f0a, 0x0f0a, + 0x0f1f, 0x0f32, 0x0f44, 0x0f4c, 0x0f62, 0x0f62, 0x0f6e, 0x0f7c, + 0x0f8f, 0x0f9c, 0x0faa, 0x0fb4, 0x0fd6, 0x0ffa, 0x0ffa, 0x1004, + 0x1016, 0x101e, 0x102c, 0x103f, 0x1058, 0x1058, 0x1058, 0x1060, + // Entry 140 - 17F + 0x106f, 0x107d, 0x107d, 0x108f, 0x10a6, 0x10bf, 0x10c7, 0x10d1, + 0x10e4, 0x10e4, 0x10ec, 0x10f8, 0x1108, 0x1118, 0x1126, 0x1126, + 0x1126, 0x1132, 0x113e, 0x1151, 0x1166, 0x1179, 0x1179, 0x1190, + 0x119c, 0x11a8, 0x11ac, 0x11ba, 0x11c8, 0x11da, 0x11da, 0x11e4, + 0x11f2, 0x1208, 0x1208, 0x1210, 0x1210, 0x121e, 0x1226, 0x1238, + 0x1242, 0x1250, 0x125c, 0x126a, 0x127e, 0x1293, 0x129f, 0x129f, + 0x12ae, 0x12d0, 0x12d0, 0x12d0, 0x12e2, 0x12ee, 0x12fc, 0x130a, + 0x1318, 0x1324, 0x132e, 0x133a, 0x1344, 0x1350, 0x135a, 0x1362, + // Entry 180 - 1BF + 0x1362, 0x1362, 0x1362, 0x136e, 0x136e, 0x137c, 0x138a, 0x139b, + 0x139b, 0x13b4, 0x13c0, 0x13ce, 0x13da, 0x13e9, 0x13f1, 0x1402, + 0x1402, 0x1412, 0x1412, 0x1424, 0x1432, 0x1440, 0x1454, 0x1460, + 0x1460, 0x146c, 0x1478, 0x1487, 0x1491, 0x149f, 0x14b8, 0x14c9, + 0x14d3, 0x14e1, 0x14fc, 0x150a, 0x1519, 0x1525, 0x1533, 0x1533, + 0x1543, 0x1556, 0x1560, 0x156e, 0x157c, 0x157c, 0x157c, 0x158a, + 0x159c, 0x159c, 0x15a6, 0x15b2, 0x15c7, 0x15d7, 0x15e1, 0x15eb, + 0x15eb, 0x15f7, 0x1609, 0x1613, 0x1626, 0x1626, 0x162c, 0x1643, + // Entry 1C0 - 1FF + 0x164b, 0x1668, 0x167f, 0x1696, 0x16a4, 0x16b2, 0x16be, 0x16d3, + 0x16e9, 0x16f3, 0x1707, 0x1719, 0x1729, 0x1729, 0x174e, 0x1773, + 0x1773, 0x178a, 0x178a, 0x1794, 0x1794, 0x1794, 0x17a0, 0x17aa, + 0x17c7, 0x17d2, 0x17d2, 0x17e2, 0x17f2, 0x1808, 0x1808, 0x1808, + 0x1816, 0x1826, 0x1826, 0x1826, 0x1826, 0x1834, 0x183e, 0x1853, + 0x185f, 0x1874, 0x1882, 0x188e, 0x189c, 0x189c, 0x18ae, 0x18bc, + 0x18c8, 0x18da, 0x18da, 0x18ed, 0x18ed, 0x18f3, 0x18f3, 0x18ff, + 0x1918, 0x1933, 0x1933, 0x1944, 0x194c, 0x195d, 0x196d, 0x1986, + // Entry 200 - 23F + 0x1986, 0x1999, 0x19aa, 0x19bf, 0x19d4, 0x19e9, 0x19f1, 0x1a04, + 0x1a0e, 0x1a16, 0x1a16, 0x1a26, 0x1a32, 0x1a3c, 0x1a48, 0x1a61, + 0x1a6d, 0x1a7d, 0x1a7d, 0x1a8c, 0x1a96, 0x1a9e, 0x1aa8, 0x1ab9, + 0x1ac1, 0x1ac1, 0x1ac1, 0x1acf, 0x1ae2, 0x1ae2, 0x1af0, 0x1b09, + 0x1b1e, 0x1b1e, 0x1b2e, 0x1b2e, 0x1b43, 0x1b43, 0x1b55, 0x1b65, + 0x1b71, 0x1b7d, 0x1b9f, 0x1baf, 0x1bbf, 0x1bd1, 0x1bd9, 0x1be3, + 0x1be3, 0x1be3, 0x1be3, 0x1be3, 0x1be9, 0x1be9, 0x1bf1, 0x1bfb, + 0x1c07, 0x1c13, 0x1c1f, 0x1c2f, 0x1c2f, 0x1c3b, 0x1c3b, 0x1c47, + // Entry 240 - 27F + 0x1c53, 0x1c5b, 0x1c69, 0x1c75, 0x1c75, 0x1c83, 0x1c91, 0x1c91, + 0x1c91, 0x1c9b, 0x1cbf, 0x1ccd, 0x1ced, 0x1cf9, 0x1d0a, 0x1d26, + 0x1d3d, 0x1d5f, 0x1d7e, 0x1d99, 0x1db8, 0x1dd3, 0x1dff, 0x1e1c, + 0x1e39, 0x1e3f, 0x1e5a, 0x1e73, 0x1e8a, 0x1e96, 0x1eaf, 0x1ec8, + 0x1edc, 0x1ef2, 0x1f09, 0x1f23, 0x1f34, +} // Size: 1250 bytes + +const fiLangStr string = "" + // Size: 4736 bytes + "afarabhaasiavestaafrikaansakanamharaaragoniaarabiaassamiavaariaimaraazer" + + "ibaškiirivalkovenäjäbulgariabislamabambarabengalitiibetbretonibosniakata" + + "laanitšetšeenitšamorrokorsikacreetšekkikirkkoslaavitšuvassikymritanskasa" + + "ksadivehidzongkhaewekreikkaenglantiesperantoespanjavirobaskifarsifulanis" + + "uomifidžifääriranskalänsifriisiiirigaeligaliciaguaranigudžaratimanksihau" + + "sahepreahindihiri-motukroatiahaitiunkariarmeniahererointerlinguaindonesi" + + "ainterlingueigbosichuanin-yiinupiaqidoislantiitaliainuktitutjapanijaavag" + + "eorgiakongokikujukuanjamakazakkikalaallisutkhmerkannadakoreakanurikašmir" + + "ikurdikomikornikirgiisilatinaluxemburggandalimburglingalalaoliettuakatan" + + "ganlubalatviamalagassimarshallmaorimakedoniamalajalammongolimarathimalai" + + "jimaltaburmanaurupohjois-ndebelenepalindongahollantinorjan nynorsknorjan" + + " bokmåletelä-ndebelenavajonjandžaoksitaaniodžibwaoromoorijaosseettipandž" + + "abipaalipuolapaštuportugaliketšuaretoromaanirundiromaniavenäjäruandasans" + + "kritsardisindhipohjoissaamesangosinhalaslovakkisloveenisamoašonasomalial" + + "baniaserbiaswazieteläsothosundaruotsiswahilitamilitelugutadžikkithaitigr" + + "injaturkmeenitswanatongaturkkitsongatataaritahitiuiguuriukrainaurduuzbek" + + "kivendavietnamvolapükvalloniwolofxhosajiddišjorubazhuangkiinazuluatšehat" + + "šoliadangmeadygetunisianarabiaafrihiliaghemainuakkadialabamaaleuttigegi" + + "altaimuinaisenglantiangikavaltakunnanarameamapudungunaraonaarapahoalgeri" + + "anarabiaarawakmarokonarabiaegyptinarabiaasuamerikkalainen viittomakielia" + + "sturiakotavaawadhibelutšibalibaijeribasaabamumbatak-tobaghomalabedžabemb" + + "abetawibenafutbadagalänsibelutšibhodžpuribikolbinibanjarkomsiksikabišnup" + + "riabahtiaribradžbrahuibodokooseburjaattibugibulubilinmedumbacaddokaribic" + + "ayugaatsamcebuanokigatšibtšatšagataichuukmarichinook-jargonchoctawchipew" + + "yancherokeecheyennesoranikopticapiznonkrimintataariseychellienkreolikašu" + + "bidakotadargitaitadelawareslevidogribdinkadjermadogrialasorbidusundualak" + + "eskihollantijola-fonyidjuladazagaembuefikemiliamuinaisegyptiekajukelamik" + + "eskienglantialaskanjupikewondoextremadurafangfilipinomeänkielifoncajunke" + + "skiranskamuinaisranskaarpitaanipohjoisfriisiitäfriisifriuligagagauzigan-" + + "kiinagajogbajazoroastrialaisdarige’ezkiribatigilakikeskiyläsaksamuinaisy" + + "läsaksagoankonkanigondigorontalogoottigrebomuinaiskreikkasveitsinsaksawa" + + "yuufrafragusiigwitšinhaidahakka-kiinahavaijifidžinhindihiligainoheettihm" + + "ongyläsorbixiang-kiinahupaibanibibioilokoinguušiinkeroinenjamaikankreoli" + + "englantilojbanngombamachamejuutalaispersiajuutalaisarabiajuuttikarakalpa" + + "kkikabyylikatšinjjukambakavikabardikanembutyapmakondekapverdenkreolikeny" + + "angnorsunluurannikonkorokaingangkhasikhotanikoyra chiinikhowarkirmanjkik" + + "akokalenjinkimbundukomipermjakkikonkanikosraekpellekaratšai-balkaarikrio" + + "kinaray-akarjalakurukhshambalabafiakölschkumykkikutenailadinolangolahnda" + + "lambalezgilingua franca novaliguuriliivilakotalombardimongolozipohjoislu" + + "rilatgalliluluanlubaluiseñolundaluolusailuhyaklassinen kiinalazimadurama" + + "famagahimaithilimakassarmandingomaasaimabamokšamandarmendemerumorisyenke" + + "ski-iirimakua-meettometa’micmacminangkabaumantšumanipurimohawkmossivuori" + + "marimundanguseita kieliäcreekmirandeesimarwarimentawaimyeneersämazandara" + + "nimin nan -kiinanapolinamaalasaksanewariniasniueao nagakwasiongiemboonno" + + "gaimuinaisnorjanovialn’kopohjoissothonuerklassinen newarinyamwezinyankol" + + "enyoronzimaosageosmanipangasinanpahlavipampangapapiamentupalaupicardinig" + + "erianpidginpennsylvaniansaksaplautdietschmuinaispersiapfaltsifoinikiapie" + + "montepontoksenkreikkapohnpeimuinaispreussimuinaisprovensaalikʼicheʼchimb" + + "orazonylänköketšuaradžastanirapanuirarotongaromagnolitarifitromboromanir" + + "otumaruteenirovianaaromaniarwasandawejakuuttisamarianarameasamburusasaks" + + "antalisauraštringambaysangusisiliaskottisassarinsardieteläkurdisenecasen" + + "aseriselkuppikoyraboro sennimuinaisiirisamogiittitašelhitshantšadinarabi" + + "asidamosleesiansaksaselayareteläsaameluulajansaameinarinsaamekoltansaame" + + "soninkesogdisrananserersahosaterlandinfriisisukumasususumerikomorimuinai" + + "ssyyriasyyriasleesiatulutemnetesoterenotetumtigretivtokelautsahuriklingo" + + "ntlingittališitamašekmalawintongatok-pisinturojotarokotsakoniatsimšitati" + + "tumbukatuvalutasawaqtuvakeskiatlaksentamazightudmurttiugaritmbundujuuriv" + + "aivenetsiavepsälänsiflaamimaininfrankkivatjavõrovunjowalserwolaittawaray" + + "washowarlpiriwu-kiinakalmukkimingrelisogajaojapiyangbenyembañeengatúkant" + + "oninkiinazapoteekkiblisskieliseelantizenagavakioitu tamazightzuniei kiel" + + "ellistä sisältöäzazayleisarabiaitävallansaksasveitsinyläsaksaaustraliane" + + "nglantikanadanenglantibritannianenglantiamerikanenglantiamerikanespanjae" + + "uroopanespanjameksikonespanjakanadanranskasveitsinranskaalankomaidenalas" + + "aksaflaamibrasilianportugalieuroopanportugalimoldovaserbokroaattikingwan" + + "ayksinkertaistettu kiinaperinteinen kiina" + +var fiLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000b, 0x0011, 0x001a, 0x001e, 0x0024, 0x002c, + 0x0032, 0x0038, 0x003e, 0x0044, 0x0049, 0x0052, 0x005f, 0x0067, + 0x006e, 0x0075, 0x007c, 0x0082, 0x0089, 0x008f, 0x0098, 0x00a3, + 0x00ac, 0x00b3, 0x00b7, 0x00be, 0x00ca, 0x00d3, 0x00d8, 0x00de, + 0x00e3, 0x00e9, 0x00f1, 0x00f4, 0x00fb, 0x0103, 0x010c, 0x0113, + 0x0117, 0x011c, 0x0121, 0x0127, 0x012c, 0x0132, 0x0139, 0x013f, + 0x014b, 0x014f, 0x0154, 0x015b, 0x0162, 0x016c, 0x0172, 0x0177, + 0x017d, 0x0182, 0x018b, 0x0192, 0x0197, 0x019d, 0x01a4, 0x01aa, + // Entry 40 - 7F + 0x01b5, 0x01be, 0x01c9, 0x01cd, 0x01d9, 0x01e0, 0x01e3, 0x01ea, + 0x01f0, 0x01f9, 0x01ff, 0x0204, 0x020b, 0x0210, 0x0216, 0x021e, + 0x0225, 0x0230, 0x0235, 0x023c, 0x0241, 0x0247, 0x024f, 0x0254, + 0x0258, 0x025d, 0x0265, 0x026b, 0x0274, 0x0279, 0x0280, 0x0287, + 0x028a, 0x0291, 0x029d, 0x02a3, 0x02ac, 0x02b4, 0x02b9, 0x02c2, + 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e5, 0x02ea, 0x02ef, 0x02fe, + 0x0304, 0x030a, 0x0312, 0x0320, 0x032e, 0x033c, 0x0342, 0x034a, + 0x0353, 0x035b, 0x0360, 0x0365, 0x036d, 0x0376, 0x037b, 0x0380, + // Entry 80 - BF + 0x0386, 0x038f, 0x0396, 0x03a1, 0x03a6, 0x03ad, 0x03b5, 0x03bb, + 0x03c3, 0x03c8, 0x03ce, 0x03da, 0x03df, 0x03e6, 0x03ee, 0x03f6, + 0x03fb, 0x0400, 0x0406, 0x040d, 0x0413, 0x0418, 0x0423, 0x0428, + 0x042e, 0x0435, 0x043b, 0x0441, 0x044a, 0x044e, 0x0456, 0x045f, + 0x0465, 0x046a, 0x0470, 0x0476, 0x047d, 0x0483, 0x048a, 0x0491, + 0x0495, 0x049c, 0x04a1, 0x04a8, 0x04b0, 0x04b7, 0x04bc, 0x04c1, + 0x04c8, 0x04ce, 0x04d4, 0x04d9, 0x04dd, 0x04e3, 0x04ea, 0x04f1, + 0x04f6, 0x0504, 0x050c, 0x0511, 0x0515, 0x051b, 0x0522, 0x0529, + // Entry C0 - FF + 0x052d, 0x0532, 0x0541, 0x0547, 0x0558, 0x0562, 0x0568, 0x056f, + 0x057d, 0x057d, 0x0583, 0x0590, 0x059d, 0x05a0, 0x05bc, 0x05c3, + 0x05c9, 0x05cf, 0x05d7, 0x05db, 0x05e2, 0x05e7, 0x05ec, 0x05f6, + 0x05fd, 0x0603, 0x0608, 0x060e, 0x0612, 0x0615, 0x061b, 0x0629, + 0x0633, 0x0638, 0x063c, 0x0642, 0x0645, 0x064c, 0x0656, 0x065e, + 0x0664, 0x066a, 0x066e, 0x0673, 0x067c, 0x0680, 0x0684, 0x0689, + 0x0690, 0x0695, 0x069b, 0x06a1, 0x06a6, 0x06ad, 0x06b1, 0x06ba, + 0x06c3, 0x06c8, 0x06cc, 0x06da, 0x06e1, 0x06ea, 0x06f2, 0x06fa, + // Entry 100 - 13F + 0x0700, 0x0705, 0x070d, 0x071a, 0x072b, 0x0732, 0x0738, 0x073d, + 0x0742, 0x074a, 0x074f, 0x0755, 0x075a, 0x0760, 0x0765, 0x076d, + 0x0772, 0x0777, 0x0784, 0x078e, 0x0793, 0x0799, 0x079d, 0x07a1, + 0x07a7, 0x07b4, 0x07ba, 0x07bf, 0x07cc, 0x07d8, 0x07de, 0x07e9, + 0x07ed, 0x07f5, 0x07ff, 0x0802, 0x0807, 0x0812, 0x081f, 0x0828, + 0x0835, 0x083f, 0x0845, 0x0847, 0x084e, 0x0857, 0x085b, 0x0860, + 0x0872, 0x0879, 0x0881, 0x0887, 0x0895, 0x08a5, 0x08b0, 0x08b5, + 0x08be, 0x08c4, 0x08c9, 0x08d7, 0x08e4, 0x08e9, 0x08ef, 0x08f4, + // Entry 140 - 17F + 0x08fc, 0x0901, 0x090c, 0x0913, 0x091f, 0x0928, 0x092e, 0x0933, + 0x093c, 0x0947, 0x094b, 0x094f, 0x0955, 0x095a, 0x0962, 0x096c, + 0x0982, 0x0988, 0x098e, 0x0995, 0x09a4, 0x09b3, 0x09b9, 0x09c5, + 0x09cc, 0x09d3, 0x09d6, 0x09db, 0x09df, 0x09e6, 0x09ed, 0x09f1, + 0x09f8, 0x0a07, 0x0a0e, 0x0a23, 0x0a2b, 0x0a30, 0x0a37, 0x0a43, + 0x0a49, 0x0a52, 0x0a56, 0x0a5e, 0x0a66, 0x0a73, 0x0a7a, 0x0a80, + 0x0a86, 0x0a98, 0x0a9c, 0x0aa5, 0x0aac, 0x0ab2, 0x0aba, 0x0abf, + 0x0ac6, 0x0acd, 0x0ad4, 0x0ada, 0x0adf, 0x0ae5, 0x0aea, 0x0aef, + // Entry 180 - 1BF + 0x0b01, 0x0b08, 0x0b0d, 0x0b13, 0x0b1b, 0x0b20, 0x0b24, 0x0b2f, + 0x0b37, 0x0b41, 0x0b49, 0x0b4e, 0x0b51, 0x0b56, 0x0b5b, 0x0b6a, + 0x0b6e, 0x0b74, 0x0b78, 0x0b7e, 0x0b86, 0x0b8e, 0x0b96, 0x0b9c, + 0x0ba0, 0x0ba6, 0x0bac, 0x0bb1, 0x0bb5, 0x0bbd, 0x0bc7, 0x0bd3, + 0x0bda, 0x0be0, 0x0beb, 0x0bf2, 0x0bfa, 0x0c00, 0x0c05, 0x0c0e, + 0x0c15, 0x0c23, 0x0c28, 0x0c32, 0x0c39, 0x0c41, 0x0c46, 0x0c4b, + 0x0c56, 0x0c64, 0x0c6a, 0x0c6e, 0x0c76, 0x0c7c, 0x0c80, 0x0c84, + 0x0c8b, 0x0c91, 0x0c9a, 0x0c9f, 0x0cab, 0x0cb1, 0x0cb7, 0x0cc3, + // Entry 1C0 - 1FF + 0x0cc7, 0x0cd7, 0x0cdf, 0x0ce7, 0x0cec, 0x0cf1, 0x0cf6, 0x0cfc, + 0x0d06, 0x0d0d, 0x0d15, 0x0d1f, 0x0d24, 0x0d2b, 0x0d39, 0x0d4b, + 0x0d57, 0x0d64, 0x0d6b, 0x0d73, 0x0d7b, 0x0d8b, 0x0d92, 0x0da0, + 0x0db2, 0x0dbb, 0x0dd5, 0x0de0, 0x0de7, 0x0df0, 0x0df9, 0x0e00, + 0x0e05, 0x0e0b, 0x0e11, 0x0e18, 0x0e1f, 0x0e27, 0x0e2a, 0x0e31, + 0x0e39, 0x0e47, 0x0e4e, 0x0e53, 0x0e5a, 0x0e64, 0x0e6b, 0x0e70, + 0x0e77, 0x0e7d, 0x0e8a, 0x0e95, 0x0e9b, 0x0e9f, 0x0ea3, 0x0eab, + 0x0eba, 0x0ec5, 0x0ecf, 0x0ed8, 0x0edc, 0x0ee9, 0x0eef, 0x0efc, + // Entry 200 - 23F + 0x0f03, 0x0f0e, 0x0f1b, 0x0f26, 0x0f31, 0x0f38, 0x0f3d, 0x0f43, + 0x0f48, 0x0f4c, 0x0f5d, 0x0f63, 0x0f67, 0x0f6d, 0x0f73, 0x0f80, + 0x0f86, 0x0f8d, 0x0f91, 0x0f96, 0x0f9a, 0x0fa0, 0x0fa5, 0x0faa, + 0x0fad, 0x0fb4, 0x0fbb, 0x0fc2, 0x0fc9, 0x0fd0, 0x0fd8, 0x0fe4, + 0x0fed, 0x0ff3, 0x0ff9, 0x1001, 0x1008, 0x100c, 0x1013, 0x1019, + 0x1020, 0x1024, 0x103a, 0x1042, 0x1048, 0x104e, 0x1053, 0x1056, + 0x105e, 0x1064, 0x1070, 0x107d, 0x1082, 0x1087, 0x108c, 0x1092, + 0x109a, 0x109f, 0x10a4, 0x10ac, 0x10b4, 0x10bc, 0x10c4, 0x10c8, + // Entry 240 - 27F + 0x10cb, 0x10cf, 0x10d6, 0x10db, 0x10e5, 0x10f2, 0x10fc, 0x1106, + 0x110e, 0x1114, 0x1126, 0x112a, 0x1145, 0x1149, 0x1154, 0x1154, + 0x1163, 0x1174, 0x1186, 0x1195, 0x11a7, 0x11b7, 0x11c6, 0x11d5, + 0x11e4, 0x11e4, 0x11f1, 0x11ff, 0x1213, 0x1219, 0x122b, 0x123c, + 0x1243, 0x1250, 0x1258, 0x126f, 0x1280, +} // Size: 1250 bytes + +const filLangStr string = "" + // Size: 3132 bytes + "AfarAbkhazianAfrikaansAkanAmharicAragoneseArabicAssameseAvaricAymaraAzer" + + "baijaniBashkirBelarusianBulgarianBislamaBambaraBanglaTibetanBretonBosnia" + + "nCatalanChechenChamorroCorsicanCzechChurch SlavicChuvashWelshDanishGerma" + + "nDivehiDzongkhaEweGreekInglesEsperantoSpanishEstonianBasquePersianFulahF" + + "innishFijianFaroeseFrenchKanlurang FrisianIrishScots GaelicGalicianGuara" + + "niGujaratiManxHausaHebrewHindiCroatianHaitianHungarianArmenianHereroInte" + + "rlinguaIndonesianInterlingueIgboSichuan YiIdoIcelandicItalianInuktitutJa" + + "paneseJavaneseGeorgianKongoKikuyuKuanyamaKazakhKalaallisutKhmerKannadaKo" + + "reanKanuriKashmiriKurdishKomiCornishKirghizLatinLuxembourgishGandaLimbur" + + "gishLingalaLaoLithuanianLuba-KatangaLatvianMalagasyMarshalleseMaoriMaced" + + "onianMalayalamMongolianMarathiMalayMalteseBurmeseNauruHilagang NdebeleNe" + + "paliNdongaDutchNorwegian NynorskNorwegian BokmålSouth NdebeleNavajoNyanj" + + "aOccitanOromoOdiaOsseticPunjabiPolishPashtoPortugueseQuechuaRomanshRundi" + + "RomanianRussianKinyarwandaSanskritSardinianSindhiHilagang SamiSangoSinha" + + "laSlovakSlovenianSamoanShonaSomaliAlbanianSerbianSwatiKatimugang SothoSu" + + "ndaneseSwedishSwahiliTamilTeluguTajikThaiTigrinyaTurkmenTswanaTonganTurk" + + "ishTsongaTatarTahitianUyghurUkranianUrduUzbekVendaVietnameseVolapükWallo" + + "onWolofXhosaYiddishYorubaChineseZuluAchineseAcoliAdangmeAdygheAghemAinuA" + + "leutSouthern AltaiAngikaMapucheArapahoAsuAsturianAwadhiBalineseBasaaBemb" + + "aBenaKanlurang BalochiBhojpuriBiniSiksikaBodoBugineseBlinCebuanoChigaChu" + + "ukeseMariChoctawCherokeeCheyenneCentral KurdishSeselwa Creole FrenchDako" + + "taDargwaTaitaDogribZarmaLower SorbianDualaJola-FonyiDazagaEmbuEfikEkajuk" + + "EwondoFilipinoFonFriulianGaGagauzGeezGilberteseGorontaloSwiss GermanGusi" + + "iGwichʼinHawaiianHiligaynonHmongUpper SorbianHupaIbanIbibioIlokoIngushLo" + + "jbanNgombaMachameKabyleKachinJjuKambaKabardianTyapMakondeKabuverdianuKor" + + "oKhasiKoyra ChiiniKakoKalenjinKimbunduKomi-PermyakKonkaniKpelleKarachay-" + + "BalkarKarelianKurukhShambalaBafiaColognianKumykLadinoLangiLezghianLakota" + + "LoziHilagang LuriLuba-LuluaLundaLuoMizoLuyiaMadureseMagahiMaithiliMakasa" + + "rMasaiMokshaMendeMeruMorisyenMakhuwa-MeettoMeta’MicmacMinangkabauManipur" + + "iMohawkMossiMundangMaramihang WikaCreekMirandeseErzyaMazanderaniNeapolit" + + "anNamaLow GermanNewariNiasNiueanKwasioNgiemboonNogaiN’KoHilagang SothoNu" + + "erNyankolePangasinanPampangaPapiamentoPalauanNigerian PidginPrussianKʼic" + + "heʼRapanuiRarotonganRomboAromanianRwaSandaweSakhaSamburuSantaliNgambaySa" + + "nguSicilianScotsKatimugang KurdishSenaKoyraboro SenniTachelhitShanKatimu" + + "gang SamiLule SamiInari SamiSkolt SamiSoninkeSranan TongoSahoSukumaComor" + + "ianSyriacTimneTesoTetumTigreKlingonTok PisinTarokoTumbukaTuvaluTasawaqTu" + + "vinianCentral Atlas TamazightUdmurtUmbunduRootVaiVunjoWalserWolayttaWara" + + "yWarlpiriKalmykSogaYangbenYembaCantoneseStandard Moroccan TamazightZuniW" + + "alang nilalaman na ukol sa wikaZazaModernong Karaniwang ArabicAustrian G" + + "ermanSwiss High GermanIngles ng AustralyaIngles sa CanadaIngles na Briti" + + "shIngles na AmericanLatin American na EspanyolEuropean SpanishMexican na" + + " EspanyolFrench sa CanadaSwiss na FrenchLow SaxonFlemishPortuges ng Bras" + + "ilEuropean PortugueseMoldavianSerbo-CroatianCongo SwahiliPinasimpleng Ch" + + "ineseTradisyonal na Chinese" + +var filLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x000d, 0x0016, 0x001a, 0x0021, 0x002a, + 0x0030, 0x0038, 0x003e, 0x0044, 0x004f, 0x0056, 0x0060, 0x0069, + 0x0070, 0x0077, 0x007d, 0x0084, 0x008a, 0x0091, 0x0098, 0x009f, + 0x00a7, 0x00af, 0x00af, 0x00b4, 0x00c1, 0x00c8, 0x00cd, 0x00d3, + 0x00d9, 0x00df, 0x00e7, 0x00ea, 0x00ef, 0x00f5, 0x00fe, 0x0105, + 0x010d, 0x0113, 0x011a, 0x011f, 0x0126, 0x012c, 0x0133, 0x0139, + 0x014a, 0x014f, 0x015b, 0x0163, 0x016a, 0x0172, 0x0176, 0x017b, + 0x0181, 0x0186, 0x0186, 0x018e, 0x0195, 0x019e, 0x01a6, 0x01ac, + // Entry 40 - 7F + 0x01b7, 0x01c1, 0x01cc, 0x01d0, 0x01da, 0x01da, 0x01dd, 0x01e6, + 0x01ed, 0x01f6, 0x01fe, 0x0206, 0x020e, 0x0213, 0x0219, 0x0221, + 0x0227, 0x0232, 0x0237, 0x023e, 0x0244, 0x024a, 0x0252, 0x0259, + 0x025d, 0x0264, 0x026b, 0x0270, 0x027d, 0x0282, 0x028c, 0x0293, + 0x0296, 0x02a0, 0x02ac, 0x02b3, 0x02bb, 0x02c6, 0x02cb, 0x02d5, + 0x02de, 0x02e7, 0x02ee, 0x02f3, 0x02fa, 0x0301, 0x0306, 0x0316, + 0x031c, 0x0322, 0x0327, 0x0338, 0x0349, 0x0356, 0x035c, 0x0362, + 0x0369, 0x0369, 0x036e, 0x0372, 0x0379, 0x0380, 0x0380, 0x0386, + // Entry 80 - BF + 0x038c, 0x0396, 0x039d, 0x03a4, 0x03a9, 0x03b1, 0x03b8, 0x03c3, + 0x03cb, 0x03d4, 0x03da, 0x03e7, 0x03ec, 0x03f3, 0x03f9, 0x0402, + 0x0408, 0x040d, 0x0413, 0x041b, 0x0422, 0x0427, 0x0437, 0x0440, + 0x0447, 0x044e, 0x0453, 0x0459, 0x045e, 0x0462, 0x046a, 0x0471, + 0x0477, 0x047d, 0x0484, 0x048a, 0x048f, 0x0497, 0x049d, 0x04a5, + 0x04a9, 0x04ae, 0x04b3, 0x04bd, 0x04c5, 0x04cc, 0x04d1, 0x04d6, + 0x04dd, 0x04e3, 0x04e3, 0x04ea, 0x04ee, 0x04f6, 0x04fb, 0x0502, + 0x0508, 0x0508, 0x0508, 0x050d, 0x0511, 0x0511, 0x0511, 0x0516, + // Entry C0 - FF + 0x0516, 0x0524, 0x0524, 0x052a, 0x052a, 0x0531, 0x0531, 0x0538, + 0x0538, 0x0538, 0x0538, 0x0538, 0x0538, 0x053b, 0x053b, 0x0543, + 0x0543, 0x0549, 0x0549, 0x0551, 0x0551, 0x0556, 0x0556, 0x0556, + 0x0556, 0x0556, 0x055b, 0x055b, 0x055f, 0x055f, 0x055f, 0x0570, + 0x0578, 0x0578, 0x057c, 0x057c, 0x057c, 0x0583, 0x0583, 0x0583, + 0x0583, 0x0583, 0x0587, 0x0587, 0x0587, 0x058f, 0x058f, 0x0593, + 0x0593, 0x0593, 0x0593, 0x0593, 0x0593, 0x059a, 0x059f, 0x059f, + 0x059f, 0x05a7, 0x05ab, 0x05ab, 0x05b2, 0x05b2, 0x05ba, 0x05c2, + // Entry 100 - 13F + 0x05d1, 0x05d1, 0x05d1, 0x05d1, 0x05e6, 0x05e6, 0x05ec, 0x05f2, + 0x05f7, 0x05f7, 0x05f7, 0x05fd, 0x05fd, 0x0602, 0x0602, 0x060f, + 0x060f, 0x0614, 0x0614, 0x061e, 0x061e, 0x0624, 0x0628, 0x062c, + 0x062c, 0x062c, 0x0632, 0x0632, 0x0632, 0x0632, 0x0638, 0x0638, + 0x0638, 0x0640, 0x0640, 0x0643, 0x0643, 0x0643, 0x0643, 0x0643, + 0x0643, 0x0643, 0x064b, 0x064d, 0x0653, 0x0653, 0x0653, 0x0653, + 0x0653, 0x0657, 0x0661, 0x0661, 0x0661, 0x0661, 0x0661, 0x0661, + 0x066a, 0x066a, 0x066a, 0x066a, 0x0676, 0x0676, 0x0676, 0x067b, + // Entry 140 - 17F + 0x0684, 0x0684, 0x0684, 0x068c, 0x068c, 0x0696, 0x0696, 0x069b, + 0x06a8, 0x06a8, 0x06ac, 0x06b0, 0x06b6, 0x06bb, 0x06c1, 0x06c1, + 0x06c1, 0x06c7, 0x06cd, 0x06d4, 0x06d4, 0x06d4, 0x06d4, 0x06d4, + 0x06da, 0x06e0, 0x06e3, 0x06e8, 0x06e8, 0x06f1, 0x06f1, 0x06f5, + 0x06fc, 0x0708, 0x0708, 0x070c, 0x070c, 0x0711, 0x0711, 0x071d, + 0x071d, 0x071d, 0x0721, 0x0729, 0x0731, 0x073d, 0x0744, 0x0744, + 0x074a, 0x0759, 0x0759, 0x0759, 0x0761, 0x0767, 0x076f, 0x0774, + 0x077d, 0x0782, 0x0782, 0x0788, 0x078d, 0x078d, 0x078d, 0x0795, + // Entry 180 - 1BF + 0x0795, 0x0795, 0x0795, 0x079b, 0x079b, 0x079b, 0x079f, 0x07ac, + 0x07ac, 0x07b6, 0x07b6, 0x07bb, 0x07be, 0x07c2, 0x07c7, 0x07c7, + 0x07c7, 0x07cf, 0x07cf, 0x07d5, 0x07dd, 0x07e4, 0x07e4, 0x07e9, + 0x07e9, 0x07ef, 0x07ef, 0x07f4, 0x07f8, 0x0800, 0x0800, 0x080e, + 0x0815, 0x081b, 0x0826, 0x0826, 0x082e, 0x0834, 0x0839, 0x0839, + 0x0840, 0x084f, 0x0854, 0x085d, 0x085d, 0x085d, 0x085d, 0x0862, + 0x086d, 0x086d, 0x0877, 0x087b, 0x0885, 0x088b, 0x088f, 0x0895, + 0x0895, 0x089b, 0x08a4, 0x08a9, 0x08a9, 0x08a9, 0x08af, 0x08bd, + // Entry 1C0 - 1FF + 0x08c1, 0x08c1, 0x08c1, 0x08c9, 0x08c9, 0x08c9, 0x08c9, 0x08c9, + 0x08d3, 0x08d3, 0x08db, 0x08e5, 0x08ec, 0x08ec, 0x08fb, 0x08fb, + 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x0903, + 0x0903, 0x090c, 0x090c, 0x090c, 0x0913, 0x091d, 0x091d, 0x091d, + 0x0922, 0x0922, 0x0922, 0x0922, 0x0922, 0x092b, 0x092e, 0x0935, + 0x093a, 0x093a, 0x0941, 0x0941, 0x0948, 0x0948, 0x094f, 0x0954, + 0x095c, 0x0961, 0x0961, 0x0973, 0x0973, 0x0977, 0x0977, 0x0977, + 0x0986, 0x0986, 0x0986, 0x098f, 0x0993, 0x0993, 0x0993, 0x0993, + // Entry 200 - 23F + 0x0993, 0x09a2, 0x09ab, 0x09b5, 0x09bf, 0x09c6, 0x09c6, 0x09d2, + 0x09d2, 0x09d6, 0x09d6, 0x09dc, 0x09dc, 0x09dc, 0x09e4, 0x09e4, + 0x09ea, 0x09ea, 0x09ea, 0x09ef, 0x09f3, 0x09f3, 0x09f8, 0x09fd, + 0x09fd, 0x09fd, 0x09fd, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, + 0x0a0d, 0x0a0d, 0x0a13, 0x0a13, 0x0a13, 0x0a13, 0x0a1a, 0x0a20, + 0x0a27, 0x0a2f, 0x0a46, 0x0a4c, 0x0a4c, 0x0a53, 0x0a57, 0x0a5a, + 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5f, 0x0a65, + 0x0a6d, 0x0a72, 0x0a72, 0x0a7a, 0x0a7a, 0x0a80, 0x0a80, 0x0a84, + // Entry 240 - 27F + 0x0a84, 0x0a84, 0x0a8b, 0x0a90, 0x0a90, 0x0a99, 0x0a99, 0x0a99, + 0x0a99, 0x0a99, 0x0ab4, 0x0ab8, 0x0ad8, 0x0adc, 0x0af7, 0x0af7, + 0x0b06, 0x0b17, 0x0b2a, 0x0b3a, 0x0b4b, 0x0b5d, 0x0b77, 0x0b87, + 0x0b9a, 0x0b9a, 0x0baa, 0x0bb9, 0x0bc2, 0x0bc9, 0x0bdb, 0x0bee, + 0x0bf7, 0x0c05, 0x0c12, 0x0c26, 0x0c3c, +} // Size: 1250 bytes + +const frLangStr string = "" + // Size: 5136 bytes + "afarabkhazeavestiqueafrikaansakanamhariquearagonaisarabeassamaisavarayma" + + "raazéribachkirbiélorussebulgarebichelamarbambarabengalitibétainbretonbos" + + "niaquecatalantchétchènechamorrocorsecreetchèqueslavon d’églisetchouvache" + + "galloisdanoisallemandmaldiviendzongkhaéwégrecanglaisespérantoespagnolest" + + "onienbasquepersanpeulfinnoisfidjienféroïenfrançaisfrison occidentalirlan" + + "daisgaélique écossaisgalicienguaranigoudjeratimannoishaoussahébreuhindih" + + "iri motucroatecréole haïtienhongroisarménienhérérointerlinguaindonésieni" + + "nterlingueigboyi du Sichuaninupiaqidoislandaisitalieninuktitutjaponaisja" + + "vanaisgéorgienkongokikuyukouanyamakazakhgroenlandaiskhmerkannadacoréenka" + + "nourikashmirikurdekomicorniquekirghizelatinluxembourgeoisgandalimbourgeo" + + "islingalalaolituanienluba-katangalettonmalgachemarshallaismaorimacédonie" + + "nmalayalammongolmarathemalaismaltaisbirmannauruanndébélé du Nordnépalais" + + "ndonganéerlandaisnorvégien nynorsknorvégien bokmålndébélé du Sudnavahony" + + "anjaoccitanojibwaoromooriyaossètependjabipalipolonaispachtoportugaisquec" + + "huaromancheroundiroumainrusserwandasanskritsardesindhisami du Nordsangho" + + "cinghalaisslovaqueslovènesamoanshonasomalialbanaisserbeswatisotho du Sud" + + "soundanaissuédoisswahilitamoultélougoutadjikthaïtigrignaturkmènetswanato" + + "nguienturctsongatatartahitienouïghourukrainienourdououzbekvendavietnamie" + + "nvolapukwallonwolofxhosayiddishyorubazhuangchinoiszoulouacehacoliadangme" + + "adyghéenarabe tunisienafrihiliaghemaïnouakkadienalabamaaléouteguèguealta" + + "ï du Sudancien anglaisangikaaraméenmapuchearaonaarapahoarabe algérienar" + + "awakarabe marocainarabe égyptienassoulangue des signes américaineasturie" + + "nkotavaawadhibaloutchibalinaisbavaroisbassabamounbatak tobaghomalabedjab" + + "embabetawibénabafutbadagabaloutchi occidentalbhojpuribikolbinibanjarkoms" + + "iksikabishnupriyabakhtiaribrajbrahouibodoakoosebouriatebugibouloublinméd" + + "umbacaddocaribecayugaatsamcebuanokigachibchatchaghataïchuukmarijargon ch" + + "inookchoctawchipewyancherokeecheyennesoranicoptecapiznonturc de Criméecr" + + "éole seychelloiskachoubedakotadargwataitadelawareesclavedogribdinkazarm" + + "adogribas-sorabedusun centraldoualamoyen néerlandaisdiola-fognydiouladaz" + + "agaembouéfikémilienégyptien ancienékadjoukélamitemoyen anglaisyoupik cen" + + "traléwondoestrémègnefangfilipinofinnois tornédalienfonfrançais cadienmoy" + + "en françaisancien françaisfrancoprovençalfrison du Nordfrison orientalfr" + + "ioulangagagaouzegangayogbayadari zoroastrienguèzegilbertingilakimoyen ha" + + "ut-allemandancien haut allemandkonkani de Goagondigorontalogothiquegrebo" + + "grec anciensuisse allemandwayuugurennegusiigwichʼinhaidahakkahawaïenhind" + + "i fidjienhiligaynonhittitehmonghaut-sorabexianghupaibanibibioilokanoingo" + + "ucheingriencréole jamaïcainlojbanngombamatchaméjudéo-persanjudéo-arabeju" + + "tekarakalpakkabylekachinjjukambakawikabardinkanemboutyapmakondécapverdie" + + "nkényangkorocainganguekhasikhotanaiskoyra chiinikhowarkirmanjkikakokalen" + + "djinkimboundoukomi-permiakkonkanikosraéenkpellékaratchaï balkarkriokinar" + + "ay-acarélienkouroukhchambalabafiafrancique ripuairekoumykkutenailadinola" + + "ngilahndalambalezghienlingua franca novaligurelivonienlakotalombardmongo" + + "lozilori du Nordlatgalienluba-lulualuiseñolundaluolushaïluhyachinois lit" + + "térairelazemadouraismafamagahimaithilimakassarmandinguemassaïmabamoksama" + + "ndarmendéméroucréole mauricienmoyen irlandaismakhuwa-meettométa’micmacmi" + + "nangkabaumandchoumanipurimohawkmorémari occidentalmoundangmultilinguecre" + + "ekmirandaismarwarîmentawaïmyènèerzyamazandéraniminnannapolitainnamabas-a" + + "llemandnewariniasniuéenAokwasiongiemboonnogaïvieux norroisnovialn’kosoth" + + "o du Nordnuernewarî classiquenyamwezinyankolényoronzemaosageturc ottoman" + + "pangasinanpahlavipampanganpapiamentopalaupicardpidgin nigérianpennsilfaa" + + "nischbas-prussienpersan ancienallemand palatinphénicienpiémontaispontiqu" + + "epohnpeiprussienprovençal ancienk’iche’quichua du Haut-Chimborazorajasth" + + "anirapanuirarotongienromagnolrifainromboromanirotumanruthènerovianavalaq" + + "uerwasandaweiakoutearaméen samaritainsambourousasaksantalsaurashtrangamb" + + "aysangusicilienécossaissarde sassaraiskurde du Sudsenecacisenasériselkou" + + "pekoyraboro senniancien irlandaissamogitienchleuhshanarabe tchadiensidam" + + "obas-silésiensélayarsami du Sudsami de Lulesami d’Inarisami skoltsoninké" + + "sogdiensranan tongosérèresahosaterlandaissoukoumasoussousumériencomorien" + + "syriaque classiquesyriaquesilésientouloutemnetesoterenotetumtigrétivtoke" + + "lautsakhourklingontlingittalyshtamacheqtonga nyasatok pisintouroyotaroko" + + "tsakonientsimshiantati caucasientoumboukatuvalutasawaqtouvatamazight du " + + "Maroc centraloudmourteougaritiqueoumboundouracinevaïvénitienvepseflamand" + + " occidentalfranconien du Mainvotevõrovunjowalserwalamowaraywashowarlpiri" + + "wukalmoukmingréliensogayaoyapoisyangbenyembanheengatoucantonaiszapotèque" + + "symboles Blisszélandaiszenagaamazighe standard marocainzuñisans contenu " + + "linguistiquezazakiarabe standard moderneallemand autrichienallemand suis" + + "seanglais australienanglais canadienanglais britanniqueanglais américain" + + "français canadienfrançais suissebas-saxon néerlandaisflamandportugais br" + + "ésilienportugais européenmoldaveserbo-croateswahili du Congochinois sim" + + "plifiéchinois traditionnel" + +var frLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000b, 0x0014, 0x001d, 0x0021, 0x002a, 0x0033, + 0x0038, 0x0040, 0x0044, 0x004a, 0x0050, 0x0057, 0x0062, 0x0069, + 0x0073, 0x007a, 0x0081, 0x008a, 0x0090, 0x0099, 0x00a0, 0x00ac, + 0x00b4, 0x00b9, 0x00bd, 0x00c5, 0x00d7, 0x00e1, 0x00e8, 0x00ee, + 0x00f6, 0x00ff, 0x0107, 0x010c, 0x0110, 0x0117, 0x0121, 0x0129, + 0x0131, 0x0137, 0x013d, 0x0141, 0x0148, 0x014f, 0x0158, 0x0161, + 0x0172, 0x017b, 0x018e, 0x0196, 0x019d, 0x01a7, 0x01ae, 0x01b5, + 0x01bc, 0x01c1, 0x01ca, 0x01d0, 0x01e0, 0x01e8, 0x01f1, 0x01f9, + // Entry 40 - 7F + 0x0204, 0x020f, 0x021a, 0x021e, 0x022b, 0x0232, 0x0235, 0x023e, + 0x0245, 0x024e, 0x0256, 0x025e, 0x0267, 0x026c, 0x0272, 0x027b, + 0x0281, 0x028d, 0x0292, 0x0299, 0x02a0, 0x02a7, 0x02af, 0x02b4, + 0x02b8, 0x02c0, 0x02c8, 0x02cd, 0x02db, 0x02e0, 0x02ec, 0x02f3, + 0x02f6, 0x02ff, 0x030b, 0x0311, 0x0319, 0x0324, 0x0329, 0x0334, + 0x033d, 0x0343, 0x034a, 0x0350, 0x0357, 0x035d, 0x0364, 0x0376, + 0x037f, 0x0385, 0x0391, 0x03a3, 0x03b5, 0x03c6, 0x03cc, 0x03d2, + 0x03d9, 0x03df, 0x03e4, 0x03e9, 0x03f0, 0x03f8, 0x03fc, 0x0404, + // Entry 80 - BF + 0x040a, 0x0413, 0x041a, 0x0422, 0x0428, 0x042f, 0x0434, 0x043a, + 0x0442, 0x0447, 0x044d, 0x0459, 0x045f, 0x0469, 0x0471, 0x0479, + 0x047f, 0x0484, 0x048a, 0x0492, 0x0497, 0x049c, 0x04a8, 0x04b2, + 0x04ba, 0x04c1, 0x04c7, 0x04d0, 0x04d6, 0x04db, 0x04e3, 0x04ec, + 0x04f2, 0x04fa, 0x04fe, 0x0504, 0x0509, 0x0511, 0x051a, 0x0523, + 0x0529, 0x052f, 0x0534, 0x053e, 0x0545, 0x054b, 0x0550, 0x0555, + 0x055c, 0x0562, 0x0568, 0x056f, 0x0575, 0x0579, 0x057e, 0x0585, + 0x058e, 0x059c, 0x05a4, 0x05a9, 0x05af, 0x05b7, 0x05be, 0x05c6, + // Entry C0 - FF + 0x05cd, 0x05da, 0x05e8, 0x05ee, 0x05f6, 0x05fd, 0x0603, 0x060a, + 0x0619, 0x0619, 0x061f, 0x062d, 0x063c, 0x0641, 0x065e, 0x0666, + 0x066c, 0x0672, 0x067b, 0x0683, 0x068b, 0x0690, 0x0696, 0x06a0, + 0x06a7, 0x06ac, 0x06b1, 0x06b7, 0x06bc, 0x06c1, 0x06c7, 0x06db, + 0x06e3, 0x06e8, 0x06ec, 0x06f2, 0x06f5, 0x06fc, 0x0707, 0x0710, + 0x0714, 0x071b, 0x071f, 0x0725, 0x072d, 0x0731, 0x0737, 0x073b, + 0x0743, 0x0748, 0x074e, 0x0754, 0x0759, 0x0760, 0x0764, 0x076b, + 0x0776, 0x077b, 0x077f, 0x078d, 0x0794, 0x079d, 0x07a5, 0x07ad, + // Entry 100 - 13F + 0x07b3, 0x07b8, 0x07c0, 0x07cf, 0x07e2, 0x07ea, 0x07f0, 0x07f6, + 0x07fb, 0x0803, 0x080a, 0x0810, 0x0815, 0x081a, 0x081f, 0x0829, + 0x0836, 0x083c, 0x084e, 0x0859, 0x085f, 0x0865, 0x086a, 0x086f, + 0x0877, 0x0887, 0x0890, 0x0898, 0x08a5, 0x08b3, 0x08ba, 0x08c6, + 0x08ca, 0x08d2, 0x08e6, 0x08e9, 0x08f9, 0x0908, 0x0918, 0x0928, + 0x0936, 0x0945, 0x094d, 0x094f, 0x0957, 0x095a, 0x095e, 0x0963, + 0x0973, 0x0979, 0x0982, 0x0988, 0x099b, 0x09af, 0x09bd, 0x09c2, + 0x09cb, 0x09d3, 0x09d8, 0x09e3, 0x09f2, 0x09f7, 0x09fe, 0x0a03, + // Entry 140 - 17F + 0x0a0c, 0x0a11, 0x0a16, 0x0a1e, 0x0a2b, 0x0a35, 0x0a3c, 0x0a41, + 0x0a4c, 0x0a51, 0x0a55, 0x0a59, 0x0a5f, 0x0a66, 0x0a6e, 0x0a75, + 0x0a87, 0x0a8d, 0x0a93, 0x0a9c, 0x0aa9, 0x0ab5, 0x0ab9, 0x0ac3, + 0x0ac9, 0x0acf, 0x0ad2, 0x0ad7, 0x0adb, 0x0ae3, 0x0aeb, 0x0aef, + 0x0af7, 0x0b01, 0x0b09, 0x0b0d, 0x0b17, 0x0b1c, 0x0b25, 0x0b31, + 0x0b37, 0x0b40, 0x0b44, 0x0b4d, 0x0b57, 0x0b63, 0x0b6a, 0x0b73, + 0x0b7a, 0x0b8b, 0x0b8f, 0x0b98, 0x0ba1, 0x0ba9, 0x0bb1, 0x0bb6, + 0x0bc8, 0x0bce, 0x0bd5, 0x0bdb, 0x0be0, 0x0be6, 0x0beb, 0x0bf3, + // Entry 180 - 1BF + 0x0c05, 0x0c0b, 0x0c13, 0x0c19, 0x0c20, 0x0c25, 0x0c29, 0x0c35, + 0x0c3e, 0x0c48, 0x0c50, 0x0c55, 0x0c58, 0x0c5f, 0x0c64, 0x0c77, + 0x0c7b, 0x0c84, 0x0c88, 0x0c8e, 0x0c96, 0x0c9e, 0x0ca7, 0x0cae, + 0x0cb2, 0x0cb7, 0x0cbd, 0x0cc3, 0x0cc9, 0x0cda, 0x0ce9, 0x0cf7, + 0x0cff, 0x0d05, 0x0d10, 0x0d18, 0x0d20, 0x0d26, 0x0d2b, 0x0d3a, + 0x0d42, 0x0d4d, 0x0d52, 0x0d5b, 0x0d63, 0x0d6c, 0x0d73, 0x0d78, + 0x0d84, 0x0d8a, 0x0d94, 0x0d98, 0x0da4, 0x0daa, 0x0dae, 0x0db5, + 0x0db7, 0x0dbd, 0x0dc6, 0x0dcc, 0x0dd9, 0x0ddf, 0x0de5, 0x0df2, + // Entry 1C0 - 1FF + 0x0df6, 0x0e07, 0x0e0f, 0x0e18, 0x0e1d, 0x0e22, 0x0e27, 0x0e33, + 0x0e3d, 0x0e44, 0x0e4d, 0x0e57, 0x0e5c, 0x0e62, 0x0e72, 0x0e81, + 0x0e8d, 0x0e9a, 0x0eaa, 0x0eb4, 0x0ebf, 0x0ec7, 0x0ece, 0x0ed6, + 0x0ee7, 0x0ef2, 0x0f0c, 0x0f16, 0x0f1d, 0x0f28, 0x0f30, 0x0f36, + 0x0f3b, 0x0f41, 0x0f48, 0x0f50, 0x0f57, 0x0f5e, 0x0f61, 0x0f68, + 0x0f6f, 0x0f82, 0x0f8b, 0x0f90, 0x0f96, 0x0fa0, 0x0fa7, 0x0fac, + 0x0fb4, 0x0fbd, 0x0fcc, 0x0fd8, 0x0fde, 0x0fe4, 0x0fe9, 0x0ff1, + 0x1000, 0x1010, 0x101a, 0x1020, 0x1024, 0x1032, 0x1038, 0x1045, + // Entry 200 - 23F + 0x104d, 0x1058, 0x1064, 0x1072, 0x107c, 0x1084, 0x108b, 0x1097, + 0x109f, 0x10a3, 0x10af, 0x10b7, 0x10be, 0x10c7, 0x10cf, 0x10e1, + 0x10e9, 0x10f2, 0x10f8, 0x10fd, 0x1101, 0x1107, 0x110c, 0x1112, + 0x1115, 0x111c, 0x1124, 0x112b, 0x1132, 0x1138, 0x1140, 0x114b, + 0x1154, 0x115b, 0x1161, 0x116a, 0x1173, 0x1181, 0x118a, 0x1190, + 0x1197, 0x119c, 0x11b6, 0x11bf, 0x11ca, 0x11d4, 0x11da, 0x11de, + 0x11e7, 0x11ec, 0x11fe, 0x1210, 0x1214, 0x1219, 0x121e, 0x1224, + 0x122a, 0x122f, 0x1234, 0x123c, 0x123e, 0x1245, 0x1250, 0x1254, + // Entry 240 - 27F + 0x1257, 0x125d, 0x1264, 0x1269, 0x1273, 0x127c, 0x1286, 0x1294, + 0x129e, 0x12a4, 0x12be, 0x12c3, 0x12dc, 0x12e2, 0x12f8, 0x12f8, + 0x130b, 0x131a, 0x132c, 0x133c, 0x134f, 0x1361, 0x1361, 0x1361, + 0x1361, 0x1361, 0x1373, 0x1383, 0x1399, 0x13a0, 0x13b4, 0x13c7, + 0x13ce, 0x13da, 0x13ea, 0x13fc, 0x1410, +} // Size: 1250 bytes + +const frCALangStr string = "" + // Size: 529 bytes + "azerbaïdjanaiscrigujaratikalaallisutodiasame du Nordsangovolapükadyguévi" + + "eil anglaisaraukanbenabicolbilenmedumbatchagataychinookkurde centralslav" + + "etlichoyupik centralewondocajunvieux haut-allemandilocanokabardekenyangk" + + "ölschliveluochinois classiquemeta’marwaribas allemandao naganewari clas" + + "siquenkolepalauanallemand de Pennsylvaniebas allemand mennonitevieux per" + + "sepalatinancien occitanrarotongaaroumainsantalikurde méridionalserivieil" + + " irlandaisselayarsame du Sudsame de Lulesame skoltturoyotamazightbas sax" + + "onswahili congolais" + +var frCALangIdx = []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + // Entry 40 - 7F + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, + 0x001a, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, + // Entry 80 - BF + 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, + 0x0029, 0x0029, 0x0029, 0x0035, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + // Entry C0 - FF + 0x0049, 0x0049, 0x0056, 0x0056, 0x0056, 0x005d, 0x005d, 0x005d, + 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, + 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, + 0x005d, 0x005d, 0x005d, 0x005d, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x006b, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x007b, 0x007b, 0x007b, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + // Entry 100 - 13F + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x0094, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x00a7, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00b2, 0x00b2, 0x00b2, 0x00b2, + 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, + 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + // Entry 140 - 17F + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00cc, 0x00cc, 0x00cc, + 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00d3, 0x00d3, 0x00d3, + 0x00d3, 0x00d3, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, + // Entry 180 - 1BF + 0x00e1, 0x00e1, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, + 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e8, 0x00e8, 0x00e8, 0x00f9, + 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, + 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0113, 0x0113, 0x0113, 0x0113, + 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + // Entry 1C0 - 1FF + 0x011a, 0x012a, 0x012a, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, + 0x012f, 0x012f, 0x012f, 0x012f, 0x0136, 0x0136, 0x0136, 0x014e, + 0x0164, 0x016f, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x018d, 0x018d, 0x018d, + 0x018d, 0x018d, 0x018d, 0x018d, 0x018d, 0x0195, 0x0195, 0x0195, + 0x0195, 0x0195, 0x0195, 0x0195, 0x019c, 0x019c, 0x019c, 0x019c, + 0x019c, 0x019c, 0x019c, 0x01ad, 0x01ad, 0x01ad, 0x01b1, 0x01b1, + 0x01b1, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, + // Entry 200 - 23F + 0x01c7, 0x01d2, 0x01de, 0x01de, 0x01e8, 0x01e8, 0x01e8, 0x01e8, + 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, + 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, + 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, + 0x01e8, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, + 0x01ee, 0x01ee, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, + 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, + 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, + // Entry 240 - 27F + 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, + 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, + 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, + 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x0200, 0x0200, 0x0200, 0x0200, + 0x0200, 0x0200, 0x0211, +} // Size: 1246 bytes + +const guLangStr string = "" + // Size: 11776 bytes + "અફારઅબખાજિયનઅવેસ્તનઆફ્રિકન્સઅકાનએમ્હારિકઅર્ગોનીઝઅરબીઆસામીઅવેરિકઆયમારાઅઝર" + + "બૈજાનીબશ્કીરબેલારુશિયનબલ્ગેરિયનબિસ્લામાબામ્બારાબંગાળીતિબેટીયનબ્રેટોનબો" + + "સ્નિયનકતલાનચેચનકેમોરોકોર્સિકનક્રીચેકચર્ચ સ્લાવિકચૂવાશવેલ્શડેનિશજર્મનદિ" + + "વેહીડ્ઝોંગ્ખાઈવગ્રીકઅંગ્રેજીએસ્પેરાન્ટોસ્પેનિશએસ્ટોનિયનબાસ્કફારસીફુલાહ" + + "ફિનિશફીજીયનફોરિસ્તફ્રેન્ચપશ્ચિમી ફ્રિસિયનઆઇરિશસ્કોટીસ ગેલિકગેલિશિયનગુઆ" + + "રાનીગુજરાતીમાંક્સહૌસાહીબ્રુહિન્દીહિરી મોટૂક્રોએશિયનહૈતીયનહંગેરિયનઆર્મે" + + "નિયનહેરેરોઇંટરલિંગુઆઇન્ડોનેશિયનઇંટરલિંગઇગ્બોસિચુઆન યીઇનુપિયાકઈડોઆઇસલેન" + + "્ડિકઇટાલિયનઇનુકિટૂટજાપાનીઝજાવાનીસજ્યોર્જિઅનકોંગોકિકુયૂક્વાન્યામાકઝાખકલ" + + "ાલ્લિસુતખ્મેરકન્નડકોરિયનકનુરીકાશ્મીરીકુર્દિશકોમીકોર્નિશકિર્ગીઝલેટિનલક્" + + "ઝેમબર્ગિશગાંડાલિંબૂર્ગિશલિંગાલાલાઓથિયનલિથુનિયનલૂબા-કટાંગાલાતવિયનમલાગસી" + + "માર્શલીઝમાઓરીમેસેડોનિયનમલયાલમમોંગોલિયનમરાઠીમલયમાલ્ટિઝબર્મીઝનાઉરૂઉત્તર " + + "દેબેલનેપાળીડોન્ગાડચનૉર્વેજીયન નાયનૉર્સ્કનોર્વેજીયન બોકમાલદક્ષિણ દેબેલન" + + "ાવાજોન્યાન્જાઓક્સિટનઓજિબ્વાઓરોમોઉડિયાઓસ્સેટિકપંજાબીપાલીપોલીશપશ્તોપોર્ટ" + + "ુગીઝક્વેચુઆરોમાન્શરૂન્દીરોમાનિયનરશિયનકિન્યારવાન્ડાસંસ્કૃતસાર્દિનિયનસિં" + + "ધીઉત્તરીય સામીસાંગોસિંહાલીસ્લોવૅકસ્લોવેનિયનસામોનશોનાસોમાલીઅલ્બેનિયનસર્" + + "બિયનસ્વાતીસદર્ન સોથોસંડેનીઝસ્વીડિશસ્વાહિલીતમિલતેલુગુતાજીકથાઈટાઇગ્રિનિય" + + "ાતુર્કમેનત્સ્વાનાટોંગાનટર્કીશસોંગાતતારતાહિતિયનઉઇગુરયુક્રેનિયનઉર્દૂઉઝ્બ" + + "ેકવેન્દાવિયેતનામીસવોલાપુકવાલૂનવોલોફખોસાયિદ્દિશયોરૂબાઝુઆગચાઇનીઝઝુલુઅચીન" + + "ીએકોલીઅદાંગ્મીઅદિઘેઅફ્રિહિલીઅઘેમઐનુઅક્કાદીયાનઅલેઉતદક્ષિણ અલ્તાઇજુની અં" + + "ગ્રેજીઅંગીકાએરમૈકમેપુચેઅરાપાહોઆલ્જેરિયન અરબીઅરાવકમોરોક્કન અરબીઈજિપ્શિય" + + "ન અરબીઅસુઅસ્તુરિયનઅવધીબલૂચીબાલિનીસબસાબામનબેજાબેમ્બાબેનાપશ્ચિમી બાલોચીભ" + + "ોજપુરીબિકોલબિનીસિક્સિકાબિષ્નુપ્રિયાવ્રજબ્રાહુઈબોડોબુરિયાતબુગિનીસબ્લિનક" + + "ડ્ડોકરિબઅત્સમસિબુઆનોચિગાચિબ્ચાછગાતાઇચૂકીસમારીચિનૂક જાર્ગનચોક્તૌશિપેવ્ય" + + "ાનશેરોકીશેયેન્નસેન્ટ્રલ કુર્દિશકોપ્ટિકક્રિમિયન તુર્કીસેસેલ્વા ક્રેઓલે " + + "ફ્રેન્ચકાશુબિયનદાકોતાદાર્ગવાતૈતાદેલવેરસ્લેવડોગ્રિબદિન્કાઝર્માડોગ્રીનિમ" + + "્ન સોર્બિયનદુઆલામધ્ય ડચજોલા-ફોન્યીડ્યુલાદાઝાગાઍમ્બુએફિકપ્રાચીન ઇજીપ્શિ" + + "યનએકાજુકએલામાઇટમિડિલ અંગ્રેજીઇવોન્ડોફેંગફિલિપિનોફોનમિડિલ ફ્રેંચજૂની ફ્" + + "રેંચઉત્તરીય ફ્રિશિયનપૂર્વ ફ્રિશિયનફ્રિયુલિયાનગાગાગાઝganગાયોબાયાઝોરોસ્ટ" + + "્રિઅન દારીગીઝજિલ્બરટીઝમધ્ય હાઇ જર્મનજૂની હાઇ જર્મનગોઅન કોંકણીગોંડીગોરો" + + "ન્તાલોગોથિકગ્રેબોપ્રાચીન ગ્રીકસ્વિસ જર્મનગુસીગ્વિચ’ઇનહૈડાhakહાવાઇયનફીજ" + + "ી હિંદીહિલિગેનોનહિટ્ટિતેહમોંગઅપ્પર સોર્બિયનhsnહૂપાઇબાનઈબિબિયોઇલોકોઇંગુ" + + "શલોજ્બાનનગોમ્બામકામેજુદેઓ-પર્શિયનજુદેઓ-અરબીકારા-કલ્પકકબાઇલકાચિનજ્જુકમ્" + + "બાકાવીકબાર્ડિયનત્યાપમકોન્ડેકાબુવર્ડિઆનુકોરોખાસીખોતાનીસકોયરા ચિનિકાકોકલ" + + "ેજિનકિમ્બન્દુકોમી-પર્મ્યાકકોંકણીકોસરિયનક્પેલ્લેકરાચય-બલ્કારકરેલિયનકુરૂ" + + "ખશમ્બાલાબફિયાકોલોગ્નિયનકુમીકકુતેનાઇલાદીનોલંગીલાહન્ડાલામ્બાલેઝધીયનલિંગ્" + + "વા ફેન્કા નોવાલાકોટામોંગોલોઝીઉત્તરીય લુરીલૂબા-લુલુઆલુઇસેનોલુન્ડાલ્યુઓમ" + + "િઝોલુઈયામાદુરીસમગહીમૈથિલીમકાસરમન્ડિન્ગોમસાઇમોક્ષમંદારમેન્ડેમેરુમોરીસ્ય" + + "ેનમધ્ય આઈરિશમાખુવા-મીટ્ટુમેતામિકમેકમિનાંગ્કાબાઉમાન્ચુમણિપુરીમોહૌકમોસ્સ" + + "ીપશ્ચિમી મારીમુનડાન્ગબહુવિધ ભાષાઓક્રિકમિરાંડીમારવાડીએર્ઝયામઝાન્દેરાનીn" + + "anનેપોલિટાનનમાલો જર્મનનેવારીનિયાસનિયુઆનક્વાસિઓનીએમબુનનોગાઇજૂની નોર્સએન’ક" + + "ોઉતરી સોથોનુએરપરંપરાગત નેવારીન્યામવેઝીન્યાનકોલન્યોરોન્ઝિમાઓસેજઓટોમાન ત" + + "ુર્કિશપંગાસીનાનપહલવીપમ્પાન્ગાપાપિયામેન્ટોપલાઉઆનનાજેરીયન પીજીનજૂની ફારસ" + + "ીફોનિશિયનપોહપિએનપ્રુસ્સીયનજુની પ્રોવેન્સલકિચેરાજસ્થાનીરાપાનુઇરારોટોંગન" + + "રોમ્બોરોમાનીઅરોમેનિયનરવાસોંડવેસખાસામરિટાન અરેમિકસમ્બુરુસાસાકસંતાલીન્ગા" + + "મ્બેયસાંગુસિસિલિયાનસ્કોટ્સસર્ઘન કુર્દીશસેનાસેલ્કપકોયરાબોરો સેન્નીજૂની " + + "આયરિશતેશીલહિટશેનસિદામોદક્ષિણ સામીલ્યુલ સામીઇનારી સામીસ્કોલ્ટ સામીસોનિન" + + "્કેસોગ્ડિએનસ્રાનન ટોન્ગોસેરેરસાહોસુકુમાસુસુસુમેરિયનકોમોરિયનપરંપરાગત સિ" + + "રિએકસિરિએકતુલુટિમ્નેતેસોતેરેનોતેતુમટાઇગ્રેતિવતોકેલાઉક્લિન્ગોનક્લીન્ગકિ" + + "ટતામાશેખન્યાસા ટોન્ગાટોક પિસિનટારોકોસિમ્શિયનમુસ્લિમ તાટતુમ્બુકાતુવાલુત" + + "સાવાકટુવીનિયનસેન્ટ્રલ ઍટ્લસ તામાઝિગ્ટઉદમુર્તયુગેરિટિકઉમ્બુન્ડૂરૂટવાઇવો" + + "ટિકવુન્જોવેલ્સેરવોલાયટ્ટાવારેયવાશોવાર્લ્પીરીwuuકાલ્મિકસોગાયાઓયાપીસયાન્" + + "ગબેનયેમ્બાકેંટોનીઝઝેપોટેકબ્લિસિમ્બોલ્સઝેનાગાપ્રમાણભૂત મોરોક્કન તામાઝિગ" + + "્ટઝૂનીકોઇ ભાષાશાસ્ત્રીય સામગ્રી નથીઝાઝામોડર્ન સ્ટાન્ડર્ડ અરબીઓસ્ટ્રિઅન" + + " જર્મનસ્વિસ હાય જર્મનઓસ્ટ્રેલિયન અંગ્રેજીકેનેડિયન અંગ્રેજીબ્રિટિશ અંગ્રે" + + "જીઅમેરિકન અંગ્રેજીલેટિન અમેરિકન સ્પેનિશયુરોપિયન સ્પેનિશમેક્સિકન સ્પેનિ" + + "શકેનેડિયન ફ્રેંચસ્વિસ ફ્રેંચલો સેક્સોનફ્લેમિશબ્રાઝિલીયન પોર્ટુગીઝયુરોપ" + + "િયન પોર્ટુગીઝમોલડાવિયનસર્બો-ક્રોએશિયનકોંગો સ્વાહિલીસરળીકૃત ચાઇનીઝપારંપ" + + "રિક ચાઇનીઝ" + +var guLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0024, 0x0039, 0x0054, 0x0060, 0x0078, 0x0090, + 0x009c, 0x00ab, 0x00bd, 0x00cf, 0x00ea, 0x00fc, 0x011a, 0x0135, + 0x014d, 0x0165, 0x0177, 0x018f, 0x01a4, 0x01bc, 0x01cb, 0x01d7, + 0x01e9, 0x0201, 0x020d, 0x0216, 0x0238, 0x0247, 0x0256, 0x0265, + 0x0274, 0x0286, 0x02a1, 0x02a7, 0x02b6, 0x02ce, 0x02ef, 0x0304, + 0x031f, 0x032e, 0x033d, 0x034c, 0x035b, 0x036d, 0x0382, 0x0397, + 0x03c5, 0x03d4, 0x03f9, 0x0411, 0x0426, 0x043b, 0x044d, 0x0459, + 0x046b, 0x047d, 0x0496, 0x04b1, 0x04c3, 0x04db, 0x04f6, 0x0508, + // Entry 40 - 7F + 0x0526, 0x0547, 0x055f, 0x056e, 0x0587, 0x059f, 0x05a8, 0x05c6, + 0x05db, 0x05f3, 0x0608, 0x061d, 0x063b, 0x064a, 0x065c, 0x067a, + 0x0686, 0x06a4, 0x06b3, 0x06c2, 0x06d4, 0x06e3, 0x06fb, 0x0710, + 0x071c, 0x0731, 0x0746, 0x0755, 0x0779, 0x0788, 0x07a6, 0x07bb, + 0x07d0, 0x07e8, 0x0807, 0x081c, 0x082e, 0x0846, 0x0855, 0x0873, + 0x0885, 0x08a0, 0x08af, 0x08b8, 0x08cd, 0x08df, 0x08ee, 0x090d, + 0x091f, 0x0931, 0x0937, 0x0974, 0x09a5, 0x09c7, 0x09d9, 0x09f1, + 0x0a06, 0x0a1b, 0x0a2a, 0x0a39, 0x0a51, 0x0a63, 0x0a6f, 0x0a7e, + // Entry 80 - BF + 0x0a8d, 0x0aa8, 0x0abd, 0x0ad2, 0x0ae4, 0x0afc, 0x0b0b, 0x0b32, + 0x0b47, 0x0b65, 0x0b74, 0x0b96, 0x0ba5, 0x0bba, 0x0bcf, 0x0bed, + 0x0bfc, 0x0c08, 0x0c1a, 0x0c35, 0x0c4a, 0x0c5c, 0x0c78, 0x0c8d, + 0x0ca2, 0x0cba, 0x0cc6, 0x0cd8, 0x0ce7, 0x0cf0, 0x0d11, 0x0d29, + 0x0d41, 0x0d53, 0x0d65, 0x0d74, 0x0d80, 0x0d98, 0x0da7, 0x0dc5, + 0x0dd4, 0x0de6, 0x0df8, 0x0e16, 0x0e2b, 0x0e3a, 0x0e49, 0x0e55, + 0x0e6a, 0x0e7c, 0x0e88, 0x0e9a, 0x0ea6, 0x0eb5, 0x0ec4, 0x0edc, + 0x0eeb, 0x0eeb, 0x0f06, 0x0f12, 0x0f1b, 0x0f39, 0x0f39, 0x0f48, + // Entry C0 - FF + 0x0f48, 0x0f6d, 0x0f92, 0x0fa4, 0x0fb3, 0x0fc5, 0x0fc5, 0x0fda, + 0x1002, 0x1002, 0x1011, 0x1036, 0x105e, 0x1067, 0x1067, 0x1082, + 0x1082, 0x108e, 0x109d, 0x10b2, 0x10b2, 0x10bb, 0x10c7, 0x10c7, + 0x10c7, 0x10d3, 0x10e5, 0x10e5, 0x10f1, 0x10f1, 0x10f1, 0x1119, + 0x112e, 0x113d, 0x1149, 0x1149, 0x1149, 0x1161, 0x1185, 0x1185, + 0x1191, 0x11a6, 0x11b2, 0x11b2, 0x11c7, 0x11dc, 0x11dc, 0x11eb, + 0x11eb, 0x11fa, 0x1206, 0x1206, 0x1215, 0x122a, 0x1236, 0x1248, + 0x125a, 0x1269, 0x1275, 0x1297, 0x12a9, 0x12c4, 0x12d6, 0x12eb, + // Entry 100 - 13F + 0x1319, 0x132e, 0x132e, 0x1359, 0x139d, 0x13b5, 0x13c7, 0x13dc, + 0x13e8, 0x13fa, 0x1409, 0x141e, 0x1430, 0x143f, 0x1451, 0x1479, + 0x1479, 0x1488, 0x149b, 0x14ba, 0x14cc, 0x14de, 0x14ed, 0x14f9, + 0x14f9, 0x152a, 0x153c, 0x1551, 0x1579, 0x1579, 0x158e, 0x158e, + 0x159a, 0x15b2, 0x15b2, 0x15bb, 0x15bb, 0x15dd, 0x15fc, 0x15fc, + 0x162a, 0x1652, 0x1673, 0x1679, 0x1688, 0x168b, 0x1697, 0x16a3, + 0x16d4, 0x16dd, 0x16f8, 0x16f8, 0x171e, 0x1744, 0x1763, 0x1772, + 0x1790, 0x179f, 0x17b1, 0x17d6, 0x17f5, 0x17f5, 0x17f5, 0x1801, + // Entry 140 - 17F + 0x1819, 0x1825, 0x1828, 0x183d, 0x1859, 0x1874, 0x188c, 0x189b, + 0x18c3, 0x18c6, 0x18d2, 0x18de, 0x18f3, 0x1902, 0x1911, 0x1911, + 0x1911, 0x1926, 0x193b, 0x194a, 0x196f, 0x198b, 0x198b, 0x19a7, + 0x19b6, 0x19c5, 0x19d1, 0x19e0, 0x19ec, 0x1a07, 0x1a07, 0x1a16, + 0x1a2b, 0x1a4f, 0x1a4f, 0x1a5b, 0x1a5b, 0x1a67, 0x1a7c, 0x1a98, + 0x1a98, 0x1a98, 0x1aa4, 0x1ab6, 0x1ad1, 0x1af6, 0x1b08, 0x1b1d, + 0x1b35, 0x1b57, 0x1b57, 0x1b57, 0x1b6c, 0x1b7b, 0x1b90, 0x1b9f, + 0x1bbd, 0x1bcc, 0x1be1, 0x1bf3, 0x1bff, 0x1c14, 0x1c26, 0x1c3b, + // Entry 180 - 1BF + 0x1c70, 0x1c70, 0x1c70, 0x1c82, 0x1c82, 0x1c91, 0x1c9d, 0x1cbf, + 0x1cbf, 0x1cdb, 0x1cf0, 0x1d02, 0x1d11, 0x1d1d, 0x1d2c, 0x1d2c, + 0x1d2c, 0x1d41, 0x1d41, 0x1d4d, 0x1d5f, 0x1d6e, 0x1d89, 0x1d95, + 0x1d95, 0x1da4, 0x1db3, 0x1dc5, 0x1dd1, 0x1dec, 0x1e08, 0x1e2d, + 0x1e39, 0x1e4b, 0x1e6f, 0x1e81, 0x1e96, 0x1ea5, 0x1eb7, 0x1ed9, + 0x1ef1, 0x1f13, 0x1f22, 0x1f37, 0x1f4c, 0x1f4c, 0x1f4c, 0x1f5e, + 0x1f7f, 0x1f82, 0x1f9d, 0x1fa6, 0x1fbc, 0x1fce, 0x1fdd, 0x1fef, + 0x1fef, 0x2004, 0x2019, 0x2028, 0x2044, 0x2044, 0x2053, 0x206c, + // Entry 1C0 - 1FF + 0x2078, 0x20a3, 0x20be, 0x20d6, 0x20e8, 0x20fa, 0x2106, 0x212e, + 0x2149, 0x2158, 0x2173, 0x2197, 0x21a9, 0x21a9, 0x21d1, 0x21d1, + 0x21d1, 0x21ed, 0x21ed, 0x2205, 0x2205, 0x2205, 0x221a, 0x2238, + 0x2263, 0x226f, 0x226f, 0x228a, 0x229f, 0x22ba, 0x22ba, 0x22ba, + 0x22cc, 0x22de, 0x22de, 0x22de, 0x22de, 0x22f9, 0x2302, 0x2314, + 0x231d, 0x2348, 0x235d, 0x236c, 0x237e, 0x237e, 0x2399, 0x23a8, + 0x23c3, 0x23d8, 0x23d8, 0x23fd, 0x23fd, 0x2409, 0x2409, 0x241b, + 0x2449, 0x2465, 0x2465, 0x247d, 0x2486, 0x2486, 0x2498, 0x2498, + // Entry 200 - 23F + 0x2498, 0x24b7, 0x24d3, 0x24ef, 0x2511, 0x2529, 0x2541, 0x2566, + 0x2575, 0x2581, 0x2581, 0x2593, 0x259f, 0x25b7, 0x25cf, 0x25fa, + 0x260c, 0x260c, 0x2618, 0x262a, 0x2636, 0x2648, 0x2657, 0x266c, + 0x2675, 0x268a, 0x268a, 0x26a5, 0x26c3, 0x26c3, 0x26d8, 0x26fd, + 0x2716, 0x2716, 0x2728, 0x2728, 0x2740, 0x275f, 0x2777, 0x2789, + 0x279b, 0x27b3, 0x27f7, 0x280c, 0x2827, 0x2842, 0x284b, 0x2854, + 0x2854, 0x2854, 0x2854, 0x2854, 0x2863, 0x2863, 0x2875, 0x288a, + 0x28a5, 0x28b4, 0x28c0, 0x28de, 0x28e1, 0x28f6, 0x28f6, 0x2902, + // Entry 240 - 27F + 0x290b, 0x291a, 0x2932, 0x2944, 0x2944, 0x295c, 0x2971, 0x2998, + 0x2998, 0x29aa, 0x29fa, 0x2a06, 0x2a57, 0x2a63, 0x2aa1, 0x2aa1, + 0x2acc, 0x2af5, 0x2b2f, 0x2b60, 0x2b8e, 0x2bbc, 0x2bf7, 0x2c25, + 0x2c53, 0x2c53, 0x2c7e, 0x2ca0, 0x2cbc, 0x2cd1, 0x2d0b, 0x2d3f, + 0x2d5a, 0x2d85, 0x2dad, 0x2dd5, 0x2e00, +} // Size: 1250 bytes + +const heLangStr string = "" + // Size: 7096 bytes + "אפאריתאבחזיתאבסטןאפריקאנסאקאןאמהריתאראגוניתערביתאסאמיתאבאריתאיימאריתאזרי" + + "תבשקיריתבלארוסיתבולגריתביסלמהבמבארהבנגליתטיבטיתברטוניתבוסניתקטלאניתצ׳צ׳" + + "ניתצ׳מורוקורסיקניתקריצ׳כיתסלאבית כנסייתית עתיקהצ׳ובאשוולשיתדניתגרמניתדי" + + "בהידזונקהאווהיווניתאנגליתאספרנטוספרדיתאסטוניתבסקיתפרסיתפולהפיניתפיג׳יתפ" + + "ארואזיתצרפתיתפריזית מערביתאיריתגאלית סקוטיתגליציאניתגוארניגוג׳ארטימאנית" + + "האוסהעבריתהינדיהירי מוטוקרואטיתקריאולית (האיטי)הונגריתארמניתהררו\u200fא" + + "ינטרלינגואהאינדונזיתאינטרלינגהאיגבוסצ׳ואן ייאינופיאקאידואיסלנדיתאיטלקית" + + "אינוקטיטוטיפניתיאוואיתגאורגיתקונגוקיקויוקואניאמהקזחיתגרינלנדיתחמריתקנאד" + + "הקוריאניתקאנוריקשמיריתכורדיתקומיקורניתקירגיזיתלטיניתלוקסמבורגיתגאנדהלימ" + + "בורגיתלינגלהלאוליטאיתלובה-קטנגהלטביתמלגשיתמרשליתמאוריתמקדוניתמליאלאםמונ" + + "גוליתמראטהימלאיתמלטיתבורמזיתנאוריתנדבלה צפוניתנפאליתנדונגההולנדיתנורווג" + + "ית חדשהנורווגית ספרותיתנדבלה דרומיתנאוואחוניאנג׳האוקסיטניתאוג׳יבווהאורו" + + "מואוריהאוסטיתפנג׳אביפאליפולניתפאשטופורטוגזיתקצ׳ואהרומאנשקירונדירומניתרו" + + "סיתקנירואנדיתסנסקריטסרדיניתסינדהיתסמי צפוניתסנגוסינהלהסלובקיתסלובניתסמו" + + "איתשונהסומליתאלבניתסרביתסאווזיסותו דרומיתסונדנזיתשוודיתסווהיליטמיליתטלו" + + "גוטג׳יקיתתאיתתיגריניתטורקמניתסוואנהטונגאיתטורקיתטסונגהטטריתטהיטיתאויגור" + + "אוקראיניתאורדואוזבקיתוונדהויאטנמית\u200fוולאפיקוואלוןוולוףקוסהיידישיורו" + + "בהזואנגסיניתזולואכינזיתאקוליאדנמהאדיגיתאפריהיליאהייםאינואכדיתאלאוטאלטאי" + + " דרומיתאנגלית עתיקהאנג׳יקהארמיתאראוקניתארפהוארוואקאסואסטוריתאוואדיתבאלוצ" + + "׳יבלינזיתבוואריתבסאאבמוםגומאלהבז׳הבמבהבנהבאפוטבאלוצ׳י מערביתבוג׳פוריביק" + + "ולביניקוםסיקסיקהבראג׳בודואקוסהבוריאטבוגינזיתבולובליןמדומבהקאדוקאריבקאיו" + + "גהאטסםקבואנוצ׳יגהצ׳יבצ׳הצ׳אגאטאיצ׳וקסהמאריניב צ׳ינוקצ׳וקטאוצ׳יפוויאןצ׳ר" + + "וקישאייןכורדית סוראניתקופטיתטטרית של קריםקריאולית (סיישל)קשוביתדקוטהדרג" + + "ווהטאיטהדלאוורסלאביתדוגריבדינקהזארמהדוגריסורבית נמוכהדואלההולנדית תיכונ" + + "הג׳ולה פוניתדיולהדזאנגהאמבואפיקמצרית עתיקהאקיוקעילמיתאנגלית תיכונהאוונד" + + "ופנגפיליפיניתפוןצרפתית תיכונהצרפתית עתיקהפריזית צפוניתפריזית מזרחיתפריו" + + "ליתגאגגאוזיתסינית גאןגאיוגבאיהגעזקיריבטיתגרמנית בינונית-גבוההגרמנית עתי" + + "קה גבוההגונדיגורונטאלוגותיתגרבויוונית עתיקהגרמנית שוויצריתגוסיגוויצ׳ןהא" + + "ידהסינית האקההוואיתהיליגאינוןחתיתהמונגסורבית גבוההסינית שיאנגהופהאיבאןא" + + "יביביואילוקואינגושיתלוז׳באןנגומבהמאקאמהפרסית יהודיתערבית יהודיתקארא-קלפ" + + "אקקבילהקצ׳יןג׳וקמבהקאוויקברדיתקנמבוטיאפמקונדהקאבוורדיאנוקורוקהאסיקוטאנז" + + "יתקוירה צ׳יניקאקוקלנג׳יןקימבונדוקומי-פרמיאקיתקונקאניקוסראיאןקפלהקראצ׳י-" + + "בלקרקארליתקורוקשמבאלהבאפיהקולוניאןקומיקיתקוטנאילדינולאנגילנדהלמבהלזגיתל" + + "קוטהמונגולוזיתלורית צפוניתלובה-לולואהלויסנולונדהלואומיזולויהמדורזיתמאפא" + + "המאגאהיתמאיטיליתמקסארמנדינגומסאיתמאבאמוקשהמנדארמנדהמרוקריאולית מאוריציא" + + "ניתאירית תיכונהמאקוואה מטומטאמיקמקמיננגקבאומנצ׳ומניפוריתמוהוקמוסימונדאנ" + + "גמספר שפותקריקמירנדזיתמרווארימאייןארזיהמאזאנדראניסינית מין נאןנפוליטנית" + + "נאמהגרמנית תחתיתנוואריניאסניואןקוואסיונגיאמבוןנוגאי\u200fנורדית עתיקהנ׳" + + "קוסותו צפוניתנוארנווארית קלאסיתניאמווזיניאנקולהניורונזימהאוסג׳טורקית עו" + + "תומניתפנגסינאןפלאביפמפאניהפפיאמנטופלוואןניגרית פידג׳יתפרסית עתיקהפיניקי" + + "תפונפיאןפרוסיתפרובנסאל עתיקהקיצ׳הראג׳סטאנירפאנויררוטונגאןרומבורומאניארו" + + "מניתראווהסנדאווהסאחהארמית שומרוניתסמבורוסאסקסאנטאלינגמבאיסאנגוסיציליאני" + + "תסקוטיתכורדית דרומיתסנקהסנהסלקופקויראבורו סניאירית עתיקהשילהשאןערבית צ׳" + + "אדיתסידאמוסאמי דרומיתלולה סאמיאינארי סאמיסקולט סאמיסונינקהסוגדיאןסרנאן " + + "טונגוסררסאהוסוקומהסוסושומריתסירית קלאסיתסוריתטימנהטסוטרנוטטוםטיגריתטיבט" + + "וקלאוקלינגוןטלינגיטטמאשקניאסה טונגהטוק פיסיןטרוקוטסימשיאןטומבוקהטובאלוט" + + "סוואקטוביניתטמזייט של מרכז מרוקואודמורטאוגריתיתאומבונדורוטוואיווטיקוונג" + + "׳ווואלסרווליאטהווראיוואשווורלפיריסינית ווקלמיקיתסוגהיאויאפזיתיאנגבןימבה" + + "קנטונזיתזאפוטקבליסימבולסזנאגהתמזיע׳ת מרוקאית תקניתזוניללא תוכן לשוניזאז" + + "אערבית ספרותיתגרמנית (שוויץ)אנגלית (בריטניה)צרפתית (שוויץ)סקסונית תחתית" + + "פלמיתמולדביתסרבו-קרואטיתסווהילי קונגוסינית פשוטהסינית מסורתית" + +var heLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0018, 0x0022, 0x0032, 0x003a, 0x0046, 0x0056, + 0x0060, 0x006c, 0x0078, 0x0088, 0x0092, 0x00a0, 0x00b0, 0x00be, + 0x00ca, 0x00d6, 0x00e2, 0x00ee, 0x00fc, 0x0108, 0x0116, 0x0124, + 0x0130, 0x0142, 0x0148, 0x0152, 0x017a, 0x0186, 0x0192, 0x019a, + 0x01a6, 0x01b0, 0x01bc, 0x01c4, 0x01d0, 0x01dc, 0x01ea, 0x01f6, + 0x0204, 0x020e, 0x0218, 0x0220, 0x022a, 0x0236, 0x0246, 0x0252, + 0x026b, 0x0275, 0x028c, 0x029e, 0x02aa, 0x02ba, 0x02c4, 0x02ce, + 0x02d8, 0x02e2, 0x02f3, 0x0301, 0x031e, 0x032c, 0x0338, 0x0340, + // Entry 40 - 7F + 0x035b, 0x036d, 0x0381, 0x038b, 0x039c, 0x03ac, 0x03b4, 0x03c4, + 0x03d2, 0x03e6, 0x03f0, 0x03fe, 0x040c, 0x0416, 0x0422, 0x0432, + 0x043c, 0x044e, 0x0458, 0x0462, 0x0472, 0x047e, 0x048c, 0x0498, + 0x04a0, 0x04ac, 0x04bc, 0x04c8, 0x04de, 0x04e8, 0x04fa, 0x0506, + 0x050c, 0x0518, 0x052b, 0x0535, 0x0541, 0x054d, 0x0559, 0x0567, + 0x0575, 0x0585, 0x0591, 0x059b, 0x05a5, 0x05b3, 0x05bf, 0x05d6, + 0x05e2, 0x05ee, 0x05fc, 0x0615, 0x0634, 0x064b, 0x0659, 0x0667, + 0x0679, 0x068b, 0x0697, 0x06a1, 0x06ad, 0x06bb, 0x06c3, 0x06cf, + // Entry 80 - BF + 0x06d9, 0x06eb, 0x06f7, 0x0703, 0x0711, 0x071d, 0x0727, 0x073b, + 0x0749, 0x0757, 0x0765, 0x0778, 0x0780, 0x078c, 0x079a, 0x07a8, + 0x07b4, 0x07bc, 0x07c8, 0x07d4, 0x07de, 0x07ea, 0x07ff, 0x080f, + 0x081b, 0x0829, 0x0835, 0x083f, 0x084d, 0x0855, 0x0865, 0x0875, + 0x0881, 0x088f, 0x089b, 0x08a7, 0x08b1, 0x08bd, 0x08c9, 0x08db, + 0x08e5, 0x08f3, 0x08fd, 0x090d, 0x091e, 0x092a, 0x0934, 0x093c, + 0x0946, 0x0952, 0x095c, 0x0966, 0x096e, 0x097c, 0x0986, 0x0990, + 0x099c, 0x099c, 0x09ac, 0x09b6, 0x09be, 0x09c8, 0x09c8, 0x09d2, + // Entry C0 - FF + 0x09d2, 0x09e9, 0x0a00, 0x0a0e, 0x0a18, 0x0a28, 0x0a28, 0x0a32, + 0x0a32, 0x0a32, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a44, 0x0a44, 0x0a52, + 0x0a52, 0x0a60, 0x0a6e, 0x0a7c, 0x0a8a, 0x0a92, 0x0a9a, 0x0a9a, + 0x0aa6, 0x0aae, 0x0ab6, 0x0ab6, 0x0abc, 0x0ac6, 0x0ac6, 0x0ae1, + 0x0af1, 0x0afb, 0x0b03, 0x0b03, 0x0b09, 0x0b17, 0x0b17, 0x0b17, + 0x0b21, 0x0b21, 0x0b29, 0x0b33, 0x0b3f, 0x0b4f, 0x0b57, 0x0b5f, + 0x0b6b, 0x0b73, 0x0b7d, 0x0b89, 0x0b91, 0x0b9d, 0x0ba7, 0x0bb5, + 0x0bc5, 0x0bd1, 0x0bd9, 0x0bec, 0x0bfa, 0x0c0c, 0x0c18, 0x0c22, + // Entry 100 - 13F + 0x0c3d, 0x0c49, 0x0c49, 0x0c61, 0x0c7e, 0x0c8a, 0x0c94, 0x0ca0, + 0x0caa, 0x0cb6, 0x0cc2, 0x0cce, 0x0cd8, 0x0ce2, 0x0cec, 0x0d03, + 0x0d03, 0x0d0d, 0x0d28, 0x0d3d, 0x0d47, 0x0d53, 0x0d5b, 0x0d63, + 0x0d63, 0x0d78, 0x0d82, 0x0d8e, 0x0da7, 0x0da7, 0x0db3, 0x0db3, + 0x0db9, 0x0dcb, 0x0dcb, 0x0dd1, 0x0dd1, 0x0dea, 0x0e01, 0x0e01, + 0x0e1a, 0x0e33, 0x0e41, 0x0e45, 0x0e53, 0x0e64, 0x0e6c, 0x0e76, + 0x0e76, 0x0e7c, 0x0e8c, 0x0e8c, 0x0eb2, 0x0ed4, 0x0ed4, 0x0ede, + 0x0ef0, 0x0efa, 0x0f02, 0x0f19, 0x0f36, 0x0f36, 0x0f36, 0x0f3e, + // Entry 140 - 17F + 0x0f4c, 0x0f56, 0x0f69, 0x0f75, 0x0f75, 0x0f89, 0x0f91, 0x0f9b, + 0x0fb2, 0x0fc7, 0x0fcf, 0x0fd9, 0x0fe7, 0x0ff3, 0x1003, 0x1003, + 0x1003, 0x1011, 0x101d, 0x1029, 0x1040, 0x1057, 0x1057, 0x106a, + 0x1074, 0x107e, 0x1084, 0x108c, 0x1096, 0x10a2, 0x10ac, 0x10b4, + 0x10c0, 0x10d6, 0x10d6, 0x10de, 0x10de, 0x10e8, 0x10f8, 0x110d, + 0x110d, 0x110d, 0x1115, 0x1123, 0x1133, 0x114c, 0x115a, 0x116a, + 0x1172, 0x1187, 0x1187, 0x1187, 0x1193, 0x119d, 0x11a9, 0x11b3, + 0x11c3, 0x11d1, 0x11dd, 0x11e7, 0x11f1, 0x11f9, 0x1201, 0x120b, + // Entry 180 - 1BF + 0x120b, 0x120b, 0x120b, 0x1215, 0x1215, 0x121f, 0x1229, 0x1240, + 0x1240, 0x1255, 0x1261, 0x126b, 0x1273, 0x127b, 0x1283, 0x1283, + 0x1283, 0x1291, 0x129b, 0x12a9, 0x12b9, 0x12c3, 0x12d1, 0x12db, + 0x12e3, 0x12ed, 0x12f7, 0x12ff, 0x1305, 0x132c, 0x1343, 0x1358, + 0x135e, 0x1368, 0x137a, 0x1384, 0x1394, 0x139e, 0x13a6, 0x13a6, + 0x13b4, 0x13c5, 0x13cd, 0x13dd, 0x13eb, 0x13eb, 0x13f5, 0x13ff, + 0x1413, 0x142b, 0x143d, 0x1445, 0x145c, 0x1468, 0x1470, 0x147a, + 0x147a, 0x1488, 0x1498, 0x14a2, 0x14bc, 0x14bc, 0x14c4, 0x14d9, + // Entry 1C0 - 1FF + 0x14e1, 0x14fc, 0x150c, 0x151c, 0x1526, 0x1530, 0x153a, 0x1557, + 0x1567, 0x1571, 0x157f, 0x158f, 0x159b, 0x159b, 0x15b6, 0x15b6, + 0x15b6, 0x15cb, 0x15cb, 0x15d9, 0x15d9, 0x15d9, 0x15e7, 0x15f3, + 0x160e, 0x1618, 0x1618, 0x162a, 0x1636, 0x1648, 0x1648, 0x1648, + 0x1652, 0x165e, 0x165e, 0x165e, 0x165e, 0x166c, 0x1676, 0x1684, + 0x168c, 0x16a7, 0x16b3, 0x16bb, 0x16c9, 0x16c9, 0x16d5, 0x16df, + 0x16f3, 0x16ff, 0x16ff, 0x1718, 0x1720, 0x1726, 0x1726, 0x1730, + 0x1749, 0x175e, 0x175e, 0x1766, 0x176c, 0x1783, 0x178f, 0x178f, + // Entry 200 - 23F + 0x178f, 0x17a4, 0x17b5, 0x17ca, 0x17dd, 0x17eb, 0x17f9, 0x180e, + 0x1814, 0x181c, 0x181c, 0x1828, 0x1830, 0x183c, 0x183c, 0x1853, + 0x185d, 0x185d, 0x185d, 0x1867, 0x186d, 0x1875, 0x187d, 0x1889, + 0x188f, 0x189b, 0x189b, 0x18a9, 0x18b7, 0x18b7, 0x18c1, 0x18d6, + 0x18e7, 0x18e7, 0x18f1, 0x18f1, 0x1901, 0x1901, 0x190f, 0x191b, + 0x1927, 0x1935, 0x195a, 0x1968, 0x1978, 0x1988, 0x198e, 0x1996, + 0x1996, 0x1996, 0x1996, 0x1996, 0x19a0, 0x19a0, 0x19ac, 0x19b8, + 0x19c6, 0x19d0, 0x19da, 0x19ea, 0x19f9, 0x1a07, 0x1a07, 0x1a0f, + // Entry 240 - 27F + 0x1a15, 0x1a21, 0x1a2d, 0x1a35, 0x1a35, 0x1a45, 0x1a51, 0x1a65, + 0x1a65, 0x1a6f, 0x1a97, 0x1a9f, 0x1ab9, 0x1ac1, 0x1ada, 0x1ada, + 0x1ada, 0x1af3, 0x1af3, 0x1af3, 0x1b10, 0x1b10, 0x1b10, 0x1b10, + 0x1b10, 0x1b10, 0x1b10, 0x1b29, 0x1b42, 0x1b4c, 0x1b4c, 0x1b4c, + 0x1b5a, 0x1b71, 0x1b8a, 0x1b9f, 0x1bb8, +} // Size: 1250 bytes + +const hiLangStr string = "" + // Size: 11573 bytes + "अफ़ारअब्ख़ाज़ियनअवस्ताईअफ़्रीकीअकनअम्हेरीअर्गोनीअरबीअसमियाअवेरिकआयमाराअज" + + "़रबैजानीबशख़िरबेलारूसीबुल्गारियाईबिस्लामाबाम्बाराबंगालीतिब्बतीब्रेटनबो" + + "स्नियाईकातालानचेचनकमोरोकोर्सीकनक्रीचेकचर्च साल्विकचूवाशवेल्शडेनिशजर्मन" + + "दिवेहीज़ोन्गखाईवेयूनानीअंग्रेज़ीएस्पेरेंतोस्पेनीएस्टोनियाईबास्कफ़ारसीफ" + + "ुलाहफ़िनिशफ़ीजीफ़ैरोइज़फ़्रेंचपश्चिमी फ़्रिसियाईआइरिशस्कॉटिश गाएलिकगैल" + + "िशियनगुआरानीगुजरातीमैंक्सहौसाहिब्रूहिन्दीहिरी मोटूक्रोएशियाईहैतियाईहंग" + + "ेरियाईआर्मेनियाईहरैरोईन्टरलिंगुआइंडोनेशियाईईन्टरलिंगुइईग्बोसिचुआन यीइन" + + "ुपियाक्इडौआइसलैंडिकइतालवीइनूकीटूत्जापानीजावानीज़जॉर्जियाईकोंगोकिकुयूक्" + + "वान्यामाकज़ाख़कलालीसुतखमेरकन्नड़कोरियाईकनुरीकश्मीरीकुर्दिशकोमीकोर्निशक" + + "िर्गीज़लैटिनलग्ज़मबर्गीगांडालिंबर्गिशलिंगालालाओलिथुआनियाईल्यूबा-कटांगा" + + "लातवियाईमालागासीमार्शलीज़माओरीमैसिडोनियाईमलयालममंगोलियाईमराठीमलयमाल्टी" + + "ज़बर्मीज़नाउरूउत्तरी देबेलनेपालीडोन्गाडचनॉर्वेजियाई नॉयनॉर्स्कनॉर्वेजि" + + "याई बोकमालदक्षिण देबेलनावाजोन्यानजाओसीटानओजिब्वाओरोमोउड़ियाओस्सेटिकपंज" + + "ाबीपालीपोलिशपश्तोपुर्तगालीक्वेचुआरोमान्शरुन्दीरोमानियाईरूसीकिन्यारवांड" + + "ासंस्कृतसार्दिनियनसिंधीनॉर्दन सामीसांगोसिंहलीस्लोवाकस्लोवेनियाईसामोनशो" + + "णासोमालीअल्बानियाईसर्बियाईस्वातीसेसोथोसुंडानीस्वीडिशस्वाहिलीतमिलतेलुगू" + + "ताजिकथाईतिग्रीन्यातुर्कमेनसेत्स्वानाटोंगनतुर्कीसोंगातातारताहितियनविघुर" + + "यूक्रेनियाईउर्दूउज़्बेकवेन्दावियतनामीवोलापुकवाल्लूनवोलोफ़ख़ोसायहूदीयोर" + + "ूबाज़ुआंगचीनीज़ुलूअचाइनीसअकोलीअदान्गमेअदिघेअफ्रिहिलीअग्हेमऐनूअक्कादीअल" + + "ेउतदक्षिणी अल्ताईपुरानी अंग्रेज़ीअंगिकाऐरेमेकमापूचेअराफाओअरावकअसुअस्तु" + + "रियनअवधीबलूचीबालिनीसबसाबेजाबेम्बाबेनापश्चिमी बलोचीभोजपुरीबिकोलबिनीसिक्" + + "सिकाब्रजबोडोबुरियातबगिनीसब्लिनकैड्डोकैरिबअत्समसिबुआनोशिगाचिब्चाछगाताईच" + + "ूकीसमारीचिनूक जारगॉनचोक्तौशिपेव्यानशेरोकीशेयेन्नसोरानी कुर्दिशकॉप्टिकक" + + "्रीमीन तुर्कीसेसेल्वा क्रिओल फ्रेंचकाशुबियनदाकोतादार्गवातैताडिलैवेयरस्" + + "लेवडोग्रिबदिन्काझार्माडोग्रीनिचला सॉर्बियनदुआलामध्यकालीन पुर्तगालीजोला" + + "-फोंईड्युलादज़ागाएम्बुएफिकप्राचीन मिस्रीएकाजुकएलामाइटमध्यकालीन अंग्रेज़ी" + + "इवोन्डोफैन्गफ़िलिपीनोफॉनमध्यकालीन फ़्रांसीसीपुरातन फ़्रांसीसीउत्तरी फ़" + + "्रीसियाईपूर्वी फ़्रीसियाईफ्रीयुलीयानगागागौज़गायोग्बायागीज़गिल्बरतीसमध्" + + "यकालीन हाइ जर्मनपुरातन हाइ जर्मनगाँडीगोरोन्तालोगॉथिकग्रेबोप्राचीन यूना" + + "नीस्विस जर्मनगुसीग्विच’इनहैडाहवाईहिलिगेननहिताइतह्मॉंगऊपरी सॉर्बियनहूपा" + + "इबानइबिबियोइलोकोइंगुशलोज्बाननगोंबामैकहैमेजुदेओ-पर्शियनजुदेओ-अरेबिककारा" + + "-कल्पककबाइलकाचिनज्जुकम्बाकावीकबार्डियनत्यापमैकोंडकाबुवेर्दियानुकोरोखासीख" + + "ोतानीसकोयरा चीनीकाकोकलेंजिनकिम्बन्दुकोमी-पर्मयाककोंकणीकोसरैनक्पेलकराचय" + + "-बल्कारकरेलियनकुरूखशम्बालाबफिआकोलोनियाईकुमीकक्यूतनाईलादीनोलांगिलाह्न्डाल" + + "ाम्बालेज़्घीयनलैकोटामोंगोलोज़ीउत्तरी लूरील्यूबा-लुलुआलुइसेनोलुन्डाल्यु" + + "ओलुशाईल्युईआमादुरीसमगहीमैथिलीमकासरमन्डिन्गोमसाईमोक्षमंदारमेन्डेमेरुमोर" + + "ीस्येनमध्यकालीन आइरिशमैखुवा-मीट्टोमेटामिकमैकमिनांग्काबाउमन्चुमणिपुरीमो" + + "हौकमोस्सीमुंडैंगएकाधिक भाषाएँक्रीकमिरांडीमारवाड़ीएर्ज़यामाज़न्देरानीna" + + "nनीपोलिटननामानिचला जर्मननेवाड़ीनियासनियुआनक्वासिओगैम्बूनोगाईपुराना नॉर्स" + + "एन्कोउत्तरी सोथोनुएरपारम्परिक नेवारीन्यामवेज़ीन्यानकोलन्योरोन्ज़ीमाओसे" + + "जओटोमान तुर्किशपंगासीनानपाह्लावीपाम्पान्गापापियामेन्टोपलोउआननाइजीरियाई" + + " पिडगिनपुरानी फारसीफोएनिशियनपोह्नपिएनप्रुशियाईपुरानी प्रोवेन्सलकिशराजस्थ" + + "ानीरापानुईरारोतोंगनरोम्बोरोमानीअरोमानियनरवासन्डावेयाकूतसामैरिटन अरैमिक" + + "सैम्बुरुसासाकसंतालीन्गाम्बेसैंगुसिसिलियनस्कॉट्सदक्षिणी कार्डिशसेनासेल्" + + "कपकोयराबोरो सेन्नीपुरानी आइरिशतैचेल्हितशैनसिदामोदक्षिण सामील्युल सामीइ" + + "नारी सामीस्कोल्ट सामीसोनिन्केसोग्डिएनस्रानान टॉन्गोसेरेरसाहोसुकुमासुसु" + + "सुमेरियनकोमोरियनक्लासिकल सिरिएकसिरिएकटिम्नेटेसोतेरेनोतेतुमटाइग्रेतिवतो" + + "केलाऊक्लिंगनत्लिंगिततामाशेकन्यासा टोन्गाटोक पिसिनतारोकोत्सिमीशियनतम्बू" + + "कातुवालुटासवाकतुवीनियनमध्य एटलस तमाज़ितउदमुर्तयुगैरिटिकउम्बुन्डुरूटवाई" + + "वॉटिकवुंजोवाल्सरवलामोवारैवाशोवॉल्पेरीकाल्मिकसोगायाओयापीसयांगबेनयेंबाकै" + + "ंटोनीज़ज़ेपोटेकब्लिसिम्बॉल्सज़ेनान्गामानक मोरक्कन तामाज़ाइटज़ूनीकोई भा" + + "षा सामग्री नहींज़ाज़ाआधुनिक मानक अरबीऑस्ट्रियाई जर्मनस्विस उच्च जर्मनऑ" + + "स्ट्रेलियाई अंग्रेज़ीकनाडाई अंग्रेज़ीब्रिटिश अंग्रेज़ीअमेरिकी अंग्रेज़" + + "ीलैटिन अमेरिकी स्पेनिशयूरोपीय स्पेनिशमैक्सिकन स्पेनिशकनाडाई फ़्रेंचस्व" + + "िस फ़्रेंचनिचली सैक्सनफ़्लेमिशब्राज़ीली पुर्तगालीयूरोपीय पुर्तगालीमोलड" + + "ावियनसेर्बो-क्रोएशियाईकांगो स्वाहिलीसरलीकृत चीनीपारंपरिक चीनी" + +var hiLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0030, 0x0045, 0x005d, 0x0066, 0x007b, 0x0090, + 0x009c, 0x00ae, 0x00c0, 0x00d2, 0x00f0, 0x0102, 0x011a, 0x013b, + 0x0153, 0x016b, 0x017d, 0x0192, 0x01a4, 0x01bf, 0x01d4, 0x01e0, + 0x01ef, 0x0207, 0x0213, 0x021c, 0x023e, 0x024d, 0x025c, 0x026b, + 0x027a, 0x028c, 0x02a4, 0x02ad, 0x02bf, 0x02da, 0x02f8, 0x030a, + 0x0328, 0x0337, 0x0349, 0x0358, 0x036a, 0x0379, 0x0391, 0x03a6, + 0x03da, 0x03e9, 0x0411, 0x0429, 0x043e, 0x0453, 0x0465, 0x0471, + 0x0483, 0x0495, 0x04ae, 0x04cc, 0x04e1, 0x04fc, 0x051a, 0x0529, + // Entry 40 - 7F + 0x054a, 0x056b, 0x058c, 0x059b, 0x05b4, 0x05cf, 0x05d8, 0x05f3, + 0x0605, 0x0620, 0x0632, 0x064a, 0x0665, 0x0674, 0x0686, 0x06a4, + 0x06b6, 0x06ce, 0x06da, 0x06ec, 0x0701, 0x0710, 0x0725, 0x073a, + 0x0746, 0x075b, 0x0773, 0x0782, 0x07a3, 0x07b2, 0x07cd, 0x07e2, + 0x07eb, 0x0809, 0x082e, 0x0846, 0x085e, 0x0879, 0x0888, 0x08a9, + 0x08bb, 0x08d6, 0x08e5, 0x08ee, 0x0906, 0x091b, 0x092a, 0x094c, + 0x095e, 0x0970, 0x0976, 0x09b6, 0x09ea, 0x0a0c, 0x0a1e, 0x0a33, + 0x0a45, 0x0a5a, 0x0a69, 0x0a7b, 0x0a93, 0x0aa5, 0x0ab1, 0x0ac0, + // Entry 80 - BF + 0x0acf, 0x0aea, 0x0aff, 0x0b14, 0x0b26, 0x0b41, 0x0b4d, 0x0b71, + 0x0b86, 0x0ba4, 0x0bb3, 0x0bd2, 0x0be1, 0x0bf3, 0x0c08, 0x0c29, + 0x0c38, 0x0c44, 0x0c56, 0x0c74, 0x0c8c, 0x0c9e, 0x0cb0, 0x0cc5, + 0x0cda, 0x0cf2, 0x0cfe, 0x0d10, 0x0d1f, 0x0d28, 0x0d46, 0x0d5e, + 0x0d7c, 0x0d8b, 0x0d9d, 0x0dac, 0x0dbb, 0x0dd3, 0x0de2, 0x0e03, + 0x0e12, 0x0e27, 0x0e39, 0x0e51, 0x0e66, 0x0e7b, 0x0e8d, 0x0e9c, + 0x0eab, 0x0ebd, 0x0ecf, 0x0edb, 0x0eea, 0x0eff, 0x0f0e, 0x0f26, + 0x0f35, 0x0f35, 0x0f50, 0x0f62, 0x0f6b, 0x0f80, 0x0f80, 0x0f8f, + // Entry C0 - FF + 0x0f8f, 0x0fb7, 0x0fe5, 0x0ff7, 0x1009, 0x101b, 0x101b, 0x102d, + 0x102d, 0x102d, 0x103c, 0x103c, 0x103c, 0x1045, 0x1045, 0x1060, + 0x1060, 0x106c, 0x107b, 0x1090, 0x1090, 0x1099, 0x1099, 0x1099, + 0x1099, 0x10a5, 0x10b7, 0x10b7, 0x10c3, 0x10c3, 0x10c3, 0x10e8, + 0x10fd, 0x110c, 0x1118, 0x1118, 0x1118, 0x1130, 0x1130, 0x1130, + 0x113c, 0x113c, 0x1148, 0x1148, 0x115d, 0x116f, 0x116f, 0x117e, + 0x117e, 0x1190, 0x119f, 0x119f, 0x11ae, 0x11c3, 0x11cf, 0x11e1, + 0x11f3, 0x1202, 0x120e, 0x1230, 0x1242, 0x125d, 0x126f, 0x1284, + // Entry 100 - 13F + 0x12ac, 0x12c1, 0x12c1, 0x12e9, 0x1327, 0x133f, 0x1351, 0x1366, + 0x1372, 0x138a, 0x1399, 0x13ae, 0x13c0, 0x13d2, 0x13e4, 0x140c, + 0x140c, 0x141b, 0x1452, 0x146b, 0x147d, 0x148f, 0x149e, 0x14aa, + 0x14aa, 0x14d2, 0x14e4, 0x14f9, 0x1530, 0x1530, 0x1545, 0x1545, + 0x1554, 0x156f, 0x156f, 0x1578, 0x1578, 0x15b2, 0x15e3, 0x15e3, + 0x1614, 0x1645, 0x1666, 0x166c, 0x167e, 0x167e, 0x168a, 0x169c, + 0x169c, 0x16a8, 0x16c3, 0x16c3, 0x16f8, 0x1724, 0x1724, 0x1733, + 0x1751, 0x1760, 0x1772, 0x179a, 0x17b9, 0x17b9, 0x17b9, 0x17c5, + // Entry 140 - 17F + 0x17dd, 0x17e9, 0x17e9, 0x17f5, 0x17f5, 0x180d, 0x181f, 0x1831, + 0x1856, 0x1856, 0x1862, 0x186e, 0x1883, 0x1892, 0x18a1, 0x18a1, + 0x18a1, 0x18b6, 0x18c8, 0x18dd, 0x1902, 0x1924, 0x1924, 0x1940, + 0x194f, 0x195e, 0x196a, 0x1979, 0x1985, 0x19a0, 0x19a0, 0x19af, + 0x19c1, 0x19eb, 0x19eb, 0x19f7, 0x19f7, 0x1a03, 0x1a18, 0x1a34, + 0x1a34, 0x1a34, 0x1a40, 0x1a55, 0x1a70, 0x1a92, 0x1aa4, 0x1ab6, + 0x1ac5, 0x1ae7, 0x1ae7, 0x1ae7, 0x1afc, 0x1b0b, 0x1b20, 0x1b2c, + 0x1b47, 0x1b56, 0x1b6e, 0x1b80, 0x1b8f, 0x1ba7, 0x1bb9, 0x1bd4, + // Entry 180 - 1BF + 0x1bd4, 0x1bd4, 0x1bd4, 0x1be6, 0x1be6, 0x1bf5, 0x1c04, 0x1c23, + 0x1c23, 0x1c45, 0x1c5a, 0x1c6c, 0x1c7b, 0x1c8a, 0x1c9c, 0x1c9c, + 0x1c9c, 0x1cb1, 0x1cb1, 0x1cbd, 0x1ccf, 0x1cde, 0x1cf9, 0x1d05, + 0x1d05, 0x1d14, 0x1d23, 0x1d35, 0x1d41, 0x1d5c, 0x1d87, 0x1dac, + 0x1db8, 0x1dca, 0x1dee, 0x1dfd, 0x1e12, 0x1e21, 0x1e33, 0x1e33, + 0x1e48, 0x1e6d, 0x1e7c, 0x1e91, 0x1ea9, 0x1ea9, 0x1ea9, 0x1ebe, + 0x1ee2, 0x1ee5, 0x1efd, 0x1f09, 0x1f28, 0x1f3d, 0x1f4c, 0x1f5e, + 0x1f5e, 0x1f73, 0x1f85, 0x1f94, 0x1fb6, 0x1fb6, 0x1fc5, 0x1fe4, + // Entry 1C0 - 1FF + 0x1ff0, 0x201e, 0x203c, 0x2054, 0x2066, 0x207b, 0x2087, 0x20af, + 0x20ca, 0x20e2, 0x2100, 0x2124, 0x2136, 0x2136, 0x2167, 0x2167, + 0x2167, 0x2189, 0x2189, 0x21a4, 0x21a4, 0x21a4, 0x21bf, 0x21da, + 0x220b, 0x2214, 0x2214, 0x222f, 0x2244, 0x225f, 0x225f, 0x225f, + 0x2271, 0x2283, 0x2283, 0x2283, 0x2283, 0x229e, 0x22a7, 0x22bc, + 0x22cb, 0x22f6, 0x230e, 0x231d, 0x232f, 0x232f, 0x2347, 0x2356, + 0x236e, 0x2383, 0x2383, 0x23ae, 0x23ae, 0x23ba, 0x23ba, 0x23cc, + 0x23fa, 0x241c, 0x241c, 0x2437, 0x2440, 0x2440, 0x2452, 0x2452, + // Entry 200 - 23F + 0x2452, 0x2471, 0x248d, 0x24a9, 0x24cb, 0x24e3, 0x24fb, 0x2523, + 0x2532, 0x253e, 0x253e, 0x2550, 0x255c, 0x2574, 0x258c, 0x25b7, + 0x25c9, 0x25c9, 0x25c9, 0x25db, 0x25e7, 0x25f9, 0x2608, 0x261d, + 0x2626, 0x263b, 0x263b, 0x2650, 0x2668, 0x2668, 0x267d, 0x26a2, + 0x26bb, 0x26bb, 0x26cd, 0x26cd, 0x26eb, 0x26eb, 0x2700, 0x2712, + 0x2724, 0x273c, 0x276b, 0x2780, 0x279b, 0x27b6, 0x27bf, 0x27c8, + 0x27c8, 0x27c8, 0x27c8, 0x27c8, 0x27d7, 0x27d7, 0x27e6, 0x27f8, + 0x2807, 0x2813, 0x281f, 0x2837, 0x2837, 0x284c, 0x284c, 0x2858, + // Entry 240 - 27F + 0x2861, 0x2870, 0x2885, 0x2894, 0x2894, 0x28af, 0x28c7, 0x28ee, + 0x28ee, 0x2909, 0x2947, 0x2956, 0x298f, 0x29a1, 0x29cd, 0x29cd, + 0x29fb, 0x2a27, 0x2a67, 0x2a95, 0x2ac6, 0x2af7, 0x2b32, 0x2b5d, + 0x2b8b, 0x2b8b, 0x2bb3, 0x2bd8, 0x2bfa, 0x2c12, 0x2c49, 0x2c7a, + 0x2c95, 0x2cc6, 0x2cee, 0x2d10, 0x2d35, +} // Size: 1250 bytes + +const hrLangStr string = "" + // Size: 4630 bytes + "afarskiabhaskiavestičkiafrikaansakanskiamharskiaragonskiarapskiasamskiav" + + "arskiajmarskiazerbajdžanskibaškirskibjeloruskibugarskibislamabambarabang" + + "latibetskibretonskibosanskikatalonskičečenskichamorrokorzičkicreečeškicr" + + "kvenoslavenskičuvaškivelškidanskinjemačkidivehidzongkhaewegrčkiengleskie" + + "sperantošpanjolskiestonskibaskijskiperzijskifulafinskifidžijskiferojskif" + + "rancuskizapadnofrizijskiirskiškotski gaelskigalicijskigvaranskigudžarats" + + "kimanskihausahebrejskihindskihiri motuhrvatskihaićanski kreolskimađarski" + + "armenskihererointerlinguaindonezijskiinterliguaigbosichuan yiinupiaqidoi" + + "slandskitalijanskiinuktitutjapanskijavanskigruzijskikongokikuyukuanyamak" + + "azaškikalaallisutkmerskikarnatačkikorejskikanurikašmirskikurdskikomikorn" + + "skikirgiskilatinskiluksemburškigandalimburškilingalalaoskilitavskiluba-k" + + "atangalatvijskimalgaškimaršalskimaorskimakedonskimalajalamskimongolskima" + + "rathskimalajskimalteškiburmanskinaurusjeverni ndebelenepalskindonganizoz" + + "emskinorveški nynorsknorveški bokmåljužni ndebelenavajonjandžaokcitanski" + + "ojibwaoromskiorijskiosetskipandžapskipalipoljskipaštunskiportugalskikeču" + + "anskiretoromanskirundirumunjskiruskikinyarwandasanskrtskisardskisindskis" + + "jeverni samisangosinhaleškislovačkislovenskisamoanskishonasomalskialbans" + + "kisrpskisvatisesotskisundanskišvedskisvahilitamilskiteluškitadžičkitajla" + + "ndskitigrinjaturkmenskicvanatonganskiturskitsongatatarskitahićanskiujgur" + + "skiukrajinskiurdskiuzbečkivendavijetnamskivolapükvalonskivolofxhosajidiš" + + "jorupskizhuangkineskizuluačinskiačoliadangmeadigejskiafrihiliaghemainusk" + + "iakadskialeutskijužni altaistaroengleskiangikaaramejskimapuchearapahoara" + + "vačkiasuasturijskiawadhibelučkibalijskibasabamunskighomalabejabembabenab" + + "afutzapadnobaludžijskibhojpuribikolskibinikomsiksikabrajbodoakooseburjat" + + "skibuginskibulublinmedumbacaddokaripskicayugaatsamcebuanochigačibčačagat" + + "ajskichuukesemarijskichinook žargonchoctawchipewyančerokijskičejenskisor" + + "anski kurdskikoptskikrimski turskisejšelski kreolskikašupskidakota jezik" + + "dargwataitadelavarskislavedogribdinkazarmadogridonjolužičkidualasrednjon" + + "izozemskijola-fonyidyuladazagaembuefikstaroegipatskiekajukelamitskisredn" + + "joengleskiewondofangfilipinskifonsrednjofrancuskistarofrancuskisjevernof" + + "rizijskiistočnofrizijskifurlanskigagagauskigan kineskigayogbayageezgilbe" + + "rtskisrednjogornjonjemačkistarovisokonjemačkigondigorontalogotskigrebost" + + "arogrčkišvicarski njemačkigusiigwich’inhaidihakka kineskihavajskihiligay" + + "nonskihetitskihmonggornjolužičkixiang kineskihupaibanibibioilokoingušets" + + "kilojbanngombamachamejudejsko-perzijskijudejsko-arapskikara-kalpakkabils" + + "kikačinskikajekambakawikabardinskikanembutyapmakondezelenortskikorokhasi" + + "khotanesekoyra chiinikakokalenjinkimbundukomi-permskikonkaninaurskikpell" + + "ekarachay-balkarkarelijskikuruškishambalabafiakelnskikumykkutenailadinol" + + "angilahndalambalezgiškilakotamongolozisjevernolurskiluba-lulualuisenolun" + + "daluolushailuyiamadurskimafamagahimaithilimakasarmandingomasajskimabamok" + + "shamandarmendemerumauricijski kreolskisrednjoirskimakhuwa-meettometa’mic" + + "macminangkabaumandžurskimanipurskimohokmossimundangviše jezikacreekmiran" + + "dskimarwarimyenemordvinskimazanderanskimin nan kineskinapolitanskinamado" + + "njonjemačkinewariniasniujskikwasiongiemboonnogajskistaronorveškin’kosjev" + + "erni sotskinuerskiklasični newarinyamwezinyankolenyoronzimaosageturski -" + + " otomanskipangasinanpahlavipampangapapiamentopalauanskinigerijski pidžin" + + "staroperzijskifeničkipohnpeianpruskistaroprovansalskikičerajasthanirapa " + + "nuirarotonškiromboromskiaromunskirwasandawejakutskisamarijanski aramejsk" + + "isamburusasaksantalskingambaysangusicilijskiškotskijužnokurdskisenecasen" + + "aselkupskikoyraboro sennistaroirskitachelhitshančadski arapskisidamojužn" + + "i samilule samiinari samiskolt samisoninkesogdiensranan tongoserersahosu" + + "kumasususumerskikomorskiklasični sirskisirijskitemnetesoterenotetumtigri" + + "škitivtokelaunskiklingonskitlingittamašečkinyasa tongatok pisintarokots" + + "imshiantumbukatuvaluanskitasawaqtuvinskitamašek (Srednji Atlas)udmurtski" + + "ugaritskiumbundukorijenskivaivotskivunjowalserskiwalamowaraywashowarlpir" + + "iwu kineskikalmyksogayaojapskiyangbenyembakantonskizapotečkiBlissovi sim" + + "bolizenagastandardni marokanski tamašekzunibez jezičnog sadržajazazakimo" + + "derni standardni arapskijužnoazerbajdžanskiaustrijski njemačkigornjonjem" + + "ački (švicarski)australski engleskikanadski engleskibritanski engleskiam" + + "erički engleskilatinoamerički španjolskieuropski španjolskimeksički špan" + + "jolskikanadski francuskišvicarski francuskidonjosaksonskiflamanskibrazil" + + "ski portugalskieuropski portugalskimoldavskisrpsko-hrvatskikongoanski sv" + + "ahilikineski (pojednostavljeni)kineski (tradicionalni)" + +var hrLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0007, 0x000e, 0x0018, 0x0021, 0x0028, 0x0030, 0x0039, + 0x0040, 0x0047, 0x004e, 0x0056, 0x0065, 0x006f, 0x0079, 0x0081, + 0x0088, 0x008f, 0x0095, 0x009d, 0x00a6, 0x00ae, 0x00b8, 0x00c2, + 0x00ca, 0x00d3, 0x00d7, 0x00de, 0x00ee, 0x00f7, 0x00fe, 0x0104, + 0x010d, 0x0113, 0x011b, 0x011e, 0x0124, 0x012c, 0x0135, 0x0140, + 0x0148, 0x0151, 0x015a, 0x015e, 0x0164, 0x016e, 0x0176, 0x017f, + 0x018f, 0x0194, 0x01a4, 0x01ae, 0x01b7, 0x01c3, 0x01c9, 0x01ce, + 0x01d7, 0x01de, 0x01e7, 0x01ef, 0x0202, 0x020b, 0x0213, 0x0219, + // Entry 40 - 7F + 0x0224, 0x0230, 0x023a, 0x023e, 0x0248, 0x024f, 0x0252, 0x025b, + 0x0265, 0x026e, 0x0276, 0x027e, 0x0287, 0x028c, 0x0292, 0x029a, + 0x02a2, 0x02ad, 0x02b4, 0x02bf, 0x02c7, 0x02cd, 0x02d7, 0x02de, + 0x02e2, 0x02e9, 0x02f1, 0x02f9, 0x0306, 0x030b, 0x0315, 0x031c, + 0x0322, 0x032a, 0x0336, 0x033f, 0x0348, 0x0352, 0x0359, 0x0363, + 0x036f, 0x0378, 0x0381, 0x0389, 0x0392, 0x039b, 0x03a0, 0x03b0, + 0x03b8, 0x03be, 0x03c8, 0x03d9, 0x03ea, 0x03f8, 0x03fe, 0x0406, + 0x0410, 0x0416, 0x041d, 0x0424, 0x042b, 0x0436, 0x043a, 0x0441, + // Entry 80 - BF + 0x044b, 0x0456, 0x0460, 0x046c, 0x0471, 0x047a, 0x047f, 0x048a, + 0x0494, 0x049b, 0x04a2, 0x04af, 0x04b4, 0x04bf, 0x04c8, 0x04d1, + 0x04da, 0x04df, 0x04e7, 0x04ef, 0x04f5, 0x04fa, 0x0502, 0x050b, + 0x0513, 0x051a, 0x0522, 0x052a, 0x0534, 0x053e, 0x0546, 0x0550, + 0x0555, 0x055e, 0x0564, 0x056a, 0x0572, 0x057d, 0x0585, 0x058f, + 0x0595, 0x059d, 0x05a2, 0x05ad, 0x05b5, 0x05bd, 0x05c2, 0x05c7, + 0x05cd, 0x05d5, 0x05db, 0x05e2, 0x05e6, 0x05ee, 0x05f4, 0x05fb, + 0x0604, 0x0604, 0x060c, 0x0611, 0x0618, 0x061f, 0x061f, 0x0627, + // Entry C0 - FF + 0x0627, 0x0633, 0x0640, 0x0646, 0x064f, 0x0656, 0x0656, 0x065d, + 0x065d, 0x065d, 0x0666, 0x0666, 0x0666, 0x0669, 0x0669, 0x0673, + 0x0673, 0x0679, 0x0681, 0x0689, 0x0689, 0x068d, 0x0695, 0x0695, + 0x069c, 0x06a0, 0x06a5, 0x06a5, 0x06a9, 0x06ae, 0x06ae, 0x06c1, + 0x06c9, 0x06d1, 0x06d5, 0x06d5, 0x06d8, 0x06df, 0x06df, 0x06df, + 0x06e3, 0x06e3, 0x06e7, 0x06ed, 0x06f6, 0x06fe, 0x0702, 0x0706, + 0x070d, 0x0712, 0x071a, 0x0720, 0x0725, 0x072c, 0x0731, 0x0738, + 0x0743, 0x074b, 0x0753, 0x0762, 0x0769, 0x0772, 0x077d, 0x0786, + // Entry 100 - 13F + 0x0796, 0x079d, 0x079d, 0x07ab, 0x07be, 0x07c7, 0x07d3, 0x07d9, + 0x07de, 0x07e8, 0x07ed, 0x07f3, 0x07f8, 0x07fd, 0x0802, 0x0810, + 0x0810, 0x0815, 0x0826, 0x0830, 0x0835, 0x083b, 0x083f, 0x0843, + 0x0843, 0x0851, 0x0857, 0x0860, 0x086f, 0x086f, 0x0875, 0x0875, + 0x0879, 0x0883, 0x0883, 0x0886, 0x0886, 0x0896, 0x08a4, 0x08a4, + 0x08b5, 0x08c6, 0x08cf, 0x08d1, 0x08d9, 0x08e4, 0x08e8, 0x08ed, + 0x08ed, 0x08f1, 0x08fb, 0x08fb, 0x0911, 0x0925, 0x0925, 0x092a, + 0x0933, 0x0939, 0x093e, 0x0949, 0x095d, 0x095d, 0x095d, 0x0962, + // Entry 140 - 17F + 0x096c, 0x0971, 0x097e, 0x0986, 0x0986, 0x0993, 0x099b, 0x09a0, + 0x09af, 0x09bc, 0x09c0, 0x09c4, 0x09ca, 0x09cf, 0x09da, 0x09da, + 0x09da, 0x09e0, 0x09e6, 0x09ed, 0x09ff, 0x0a0f, 0x0a0f, 0x0a1a, + 0x0a22, 0x0a2b, 0x0a2f, 0x0a34, 0x0a38, 0x0a43, 0x0a4a, 0x0a4e, + 0x0a55, 0x0a60, 0x0a60, 0x0a64, 0x0a64, 0x0a69, 0x0a72, 0x0a7e, + 0x0a7e, 0x0a7e, 0x0a82, 0x0a8a, 0x0a92, 0x0a9e, 0x0aa5, 0x0aac, + 0x0ab2, 0x0ac1, 0x0ac1, 0x0ac1, 0x0acb, 0x0ad3, 0x0adb, 0x0ae0, + 0x0ae7, 0x0aec, 0x0af3, 0x0af9, 0x0afe, 0x0b04, 0x0b09, 0x0b12, + // Entry 180 - 1BF + 0x0b12, 0x0b12, 0x0b12, 0x0b18, 0x0b18, 0x0b1d, 0x0b21, 0x0b2f, + 0x0b2f, 0x0b39, 0x0b40, 0x0b45, 0x0b48, 0x0b4e, 0x0b53, 0x0b53, + 0x0b53, 0x0b5b, 0x0b5f, 0x0b65, 0x0b6d, 0x0b74, 0x0b7c, 0x0b84, + 0x0b88, 0x0b8e, 0x0b94, 0x0b99, 0x0b9d, 0x0bb1, 0x0bbd, 0x0bcb, + 0x0bd2, 0x0bd8, 0x0be3, 0x0bee, 0x0bf8, 0x0bfd, 0x0c02, 0x0c02, + 0x0c09, 0x0c15, 0x0c1a, 0x0c23, 0x0c2a, 0x0c2a, 0x0c2f, 0x0c39, + 0x0c46, 0x0c55, 0x0c61, 0x0c65, 0x0c73, 0x0c79, 0x0c7d, 0x0c84, + 0x0c84, 0x0c8a, 0x0c93, 0x0c9b, 0x0ca9, 0x0ca9, 0x0caf, 0x0cbe, + // Entry 1C0 - 1FF + 0x0cc5, 0x0cd5, 0x0cdd, 0x0ce5, 0x0cea, 0x0cef, 0x0cf4, 0x0d06, + 0x0d10, 0x0d17, 0x0d1f, 0x0d29, 0x0d33, 0x0d33, 0x0d45, 0x0d45, + 0x0d45, 0x0d53, 0x0d53, 0x0d5b, 0x0d5b, 0x0d5b, 0x0d64, 0x0d6a, + 0x0d7b, 0x0d80, 0x0d80, 0x0d8a, 0x0d92, 0x0d9d, 0x0d9d, 0x0d9d, + 0x0da2, 0x0da8, 0x0da8, 0x0da8, 0x0da8, 0x0db1, 0x0db4, 0x0dbb, + 0x0dc3, 0x0dd9, 0x0de0, 0x0de5, 0x0dee, 0x0dee, 0x0df5, 0x0dfa, + 0x0e04, 0x0e0c, 0x0e0c, 0x0e19, 0x0e1f, 0x0e23, 0x0e23, 0x0e2c, + 0x0e3b, 0x0e45, 0x0e45, 0x0e4e, 0x0e52, 0x0e61, 0x0e67, 0x0e67, + // Entry 200 - 23F + 0x0e67, 0x0e72, 0x0e7b, 0x0e85, 0x0e8f, 0x0e96, 0x0e9d, 0x0ea9, + 0x0eae, 0x0eb2, 0x0eb2, 0x0eb8, 0x0ebc, 0x0ec4, 0x0ecc, 0x0edc, + 0x0ee4, 0x0ee4, 0x0ee4, 0x0ee9, 0x0eed, 0x0ef3, 0x0ef8, 0x0f01, + 0x0f04, 0x0f0f, 0x0f0f, 0x0f19, 0x0f20, 0x0f20, 0x0f2b, 0x0f36, + 0x0f3f, 0x0f3f, 0x0f45, 0x0f45, 0x0f4e, 0x0f4e, 0x0f55, 0x0f60, + 0x0f67, 0x0f6f, 0x0f87, 0x0f90, 0x0f99, 0x0fa0, 0x0faa, 0x0fad, + 0x0fad, 0x0fad, 0x0fad, 0x0fad, 0x0fb3, 0x0fb3, 0x0fb8, 0x0fc1, + 0x0fc7, 0x0fcc, 0x0fd1, 0x0fd9, 0x0fe3, 0x0fe9, 0x0fe9, 0x0fed, + // Entry 240 - 27F + 0x0ff0, 0x0ff6, 0x0ffd, 0x1002, 0x1002, 0x100b, 0x1015, 0x1025, + 0x1025, 0x102b, 0x1049, 0x104d, 0x1064, 0x106a, 0x1084, 0x1099, + 0x10ad, 0x10c9, 0x10dc, 0x10ed, 0x10ff, 0x1111, 0x112c, 0x1140, + 0x1155, 0x1155, 0x1167, 0x117b, 0x1189, 0x1192, 0x11a7, 0x11bb, + 0x11c4, 0x11d3, 0x11e5, 0x11ff, 0x1216, +} // Size: 1250 bytes + +const huLangStr string = "" + // Size: 4071 bytes + "afarabházavesztánafrikaansakanamharaaragonézarabasszámiavarajmaraazerbaj" + + "dzsánibaskírbelaruszbolgárbislamabambarabanglatibetibretonbosnyákkatalán" + + "csecsencsamorókorzikaikrícsehegyházi szlávcsuvaswalesidánnémetdivehidzso" + + "ngaevegörögangoleszperantóspanyolésztbaszkperzsafulanifinnfidzsiferöerif" + + "rancianyugati frízírskóciai keltagallegoguaranigudzsarátiman-szigetihaus" + + "zahéberhindihiri motuhorváthaiti kreolmagyarörményhererointerlingvaindon" + + "ézinterlingueigbószecsuán jiinupiakidóizlandiolaszinuktitutjapánjávaigr" + + "úzkongokikujukuanyamakazahgrönlandikhmerkannadakoreaikanurikasmírikurdk" + + "omikornikirgizlatinluxemburgigandalimburgilingalalaolitvánluba-katangale" + + "ttmalgasmarshallimaorimacedónmalajálammongolmaráthimalájmáltaiburmainaur" + + "uiészaki ndebelenepálindongahollandnorvég (nynrosk)norvég (bokmál)déli n" + + "debelenavahónyandzsaokszitánojibvaoromoodiaoszétpandzsábipalilengyelpast" + + "uportugálkecsuarétorománkirundirománoroszkinyarvandaszanszkritszardíniai" + + "szindhiészaki számiszangószingalézszlovákszlovénszamoaisonaszomálialbáns" + + "zerbsziszuatidéli szeszotószundanézsvédszuahélitamiltelugutadzsikthaitig" + + "rinyatürkménszecsuánitongaitörökcongatatártahitiujgurukránurduüzbégvenda" + + "vietnamivolapükvallonvolofxhoszajiddisjorubazsuangkínaizuluachinézakolia" + + "dangmeadygheafrihiliagemainuakkádaleutdél-altajióangolangikaarámimapucse" + + "arapahoaravakasuasztúrawádibalucsibalinézbaszabamungomalabedzsabembabena" + + "bafutnyugati beludzsbodzspuribikolbinikomsiksikabrajbodokosziburjátbugin" + + "ézbulublinmedumbacaddokaribkajugaatszamszebuanokigacsibcsacsagatájcsuké" + + "zmaricsinuk zsargoncsoktócsipevécserokicsejenközép-ázsiai kurdkoptkrími " + + "tatárszeszelva kreol franciakasubdakotadargvataitadelavárszlevidogribdin" + + "kazarmadogrialsó-szorbdualaközép hollandjola-fonyidiuladazagaembuefikóeg" + + "yiptomiekadzsukelamitközép angolevondofangfilippínófonközép franciaófran" + + "ciaészaki frízkeleti frízfriuligagagauzgan kínaigajogbajageezikiribatikö" + + "zép felső németófelső németgondigorontalogótgrebóógörögsvájci németguszi" + + "igvicsinhaidahakka kínaihawaiiilokanohittitehmongfelső-szorbxiang kínaih" + + "upaibanibibioilokóinguslojbanngombamachamezsidó-perzsazsidó-arabkara-kal" + + "pakkabijekacsinjjukambakawikabardikanembutyapmakondekabuverdianukorokasz" + + "ikotanézkojra-csínikakókalendzsinkimbundukomi-permjákkonkanikosreikpelle" + + "karacsáj-balkárkarelaikuruhsambalabafiakölschkumükkutenailadinolangilahn" + + "dalambalezglakotamongóloziészaki luriluba-lulualuisenolundaluolushailuji" + + "amaduraimafamagahimaithilimakaszarmandingómasaimabamoksánmandarmendemeru" + + "mauritiusi kreolközép írmakua-metómeta’mikmakminangkabaumandzsumanipurim" + + "ohawkmoszimundangtöbbszörös nyelvekkríkmirandézmárvárimyeneerzjánymázand" + + "eránimin nan kínainápolyinamaalsónémetnevariniasniueingumbangiemboonnoga" + + "jóskandinávn’kóészaki szeszotónuerklasszikus newarinyamvézinyankolenyoró" + + "nzimaosageottomán törökpangaszinanpahlavipampanganpapiamentopalauinigéri" + + "ai pidginóperzsafőniciaipohnpeiporoszóprovánszikicseradzsasztánirapanuir" + + "arotongairomboromaarománrwoszandaveszahaszamaritánus arámiszamburusasaks" + + "zantálingambayszanguszicíliaiskótdél-kurdszenekaszenaszölkupkojra-szenni" + + "óírtachelhitsancsádi arabszidamódéli számilulei számiinari számikolta s" + + "zámiszoninkesogdienszranai tongószererszahószukumaszuszusumércomoreiklas" + + "szikus szírszírtemneteszóterenótetumtigrétivtokelauiklingontlingittamase" + + "knyugati nyaszatok pisintarokócsimsiánitumbukatuvaluszaváktuvaiközép-atl" + + "aszi tamazigtudmurtugaritiumbunduősivaivotjákvunjowalservalamovaraóvasów" + + "arlpiriwu kínaikalmükszogajaójapijangbenjembakantonizapotékBliss jelképr" + + "endszerzenagamarokkói tamazightzuninincs nyelvészeti tartalomzazamodern " + + "szabányos arabosztrák németsvájci felnémetausztrál angolkanadai angolbri" + + "t angolamerikai angollatin-amerikai spanyoleurópai spanyolspanyol (mexik" + + "ói)kanadai franciasvájci franciaalsószászflamandbrazíliai portugáleuróp" + + "ai portugálmoldvaiszerbhorvátkongói szuahéliegyszerűsített kínaihagyomán" + + "yos kínai" + +var huLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000a, 0x0013, 0x001c, 0x0020, 0x0026, 0x002f, + 0x0033, 0x003b, 0x003f, 0x0045, 0x0053, 0x005a, 0x0062, 0x0069, + 0x0070, 0x0077, 0x007d, 0x0083, 0x0089, 0x0091, 0x0099, 0x00a0, + 0x00a8, 0x00b0, 0x00b4, 0x00b8, 0x00c7, 0x00cd, 0x00d3, 0x00d7, + 0x00dd, 0x00e3, 0x00ea, 0x00ed, 0x00f4, 0x00f9, 0x0104, 0x010b, + 0x0110, 0x0115, 0x011b, 0x0121, 0x0125, 0x012b, 0x0133, 0x013a, + 0x0147, 0x014a, 0x0158, 0x015f, 0x0166, 0x0171, 0x017c, 0x0182, + 0x0188, 0x018d, 0x0196, 0x019d, 0x01a8, 0x01ae, 0x01b6, 0x01bc, + // Entry 40 - 7F + 0x01c7, 0x01cf, 0x01da, 0x01df, 0x01eb, 0x01f2, 0x01f6, 0x01fd, + 0x0202, 0x020b, 0x0211, 0x0217, 0x021c, 0x0221, 0x0227, 0x022f, + 0x0234, 0x023e, 0x0243, 0x024a, 0x0250, 0x0256, 0x025e, 0x0262, + 0x0266, 0x026b, 0x0271, 0x0276, 0x0280, 0x0285, 0x028d, 0x0294, + 0x0297, 0x029e, 0x02aa, 0x02ae, 0x02b4, 0x02bd, 0x02c2, 0x02ca, + 0x02d4, 0x02da, 0x02e2, 0x02e8, 0x02ef, 0x02f5, 0x02fb, 0x030a, + 0x0311, 0x0317, 0x031e, 0x032f, 0x0340, 0x034d, 0x0354, 0x035c, + 0x0365, 0x036b, 0x0370, 0x0374, 0x037a, 0x0384, 0x0388, 0x038f, + // Entry 80 - BF + 0x0394, 0x039d, 0x03a3, 0x03ae, 0x03b5, 0x03bb, 0x03c0, 0x03cb, + 0x03d5, 0x03e0, 0x03e7, 0x03f5, 0x03fc, 0x0406, 0x040e, 0x0416, + 0x041d, 0x0421, 0x0429, 0x042f, 0x0434, 0x043d, 0x044c, 0x0456, + 0x045b, 0x0464, 0x0469, 0x046f, 0x0476, 0x047a, 0x0482, 0x048b, + 0x0495, 0x049b, 0x04a2, 0x04a7, 0x04ad, 0x04b3, 0x04b8, 0x04be, + 0x04c2, 0x04c9, 0x04ce, 0x04d6, 0x04de, 0x04e4, 0x04e9, 0x04ef, + 0x04f5, 0x04fb, 0x0501, 0x0507, 0x050b, 0x0513, 0x0518, 0x051f, + 0x0525, 0x0525, 0x052d, 0x0531, 0x0535, 0x053b, 0x053b, 0x0540, + // Entry C0 - FF + 0x0540, 0x054b, 0x0552, 0x0558, 0x055e, 0x0565, 0x0565, 0x056c, + 0x056c, 0x056c, 0x0572, 0x0572, 0x0572, 0x0575, 0x0575, 0x057c, + 0x057c, 0x0582, 0x0589, 0x0591, 0x0591, 0x0596, 0x059b, 0x059b, + 0x05a1, 0x05a7, 0x05ac, 0x05ac, 0x05b0, 0x05b5, 0x05b5, 0x05c4, + 0x05cd, 0x05d2, 0x05d6, 0x05d6, 0x05d9, 0x05e0, 0x05e0, 0x05e0, + 0x05e4, 0x05e4, 0x05e8, 0x05ed, 0x05f4, 0x05fc, 0x0600, 0x0604, + 0x060b, 0x0610, 0x0615, 0x061b, 0x0621, 0x0629, 0x062d, 0x0634, + 0x063d, 0x0644, 0x0648, 0x0656, 0x065d, 0x0665, 0x066c, 0x0672, + // Entry 100 - 13F + 0x0686, 0x068a, 0x068a, 0x0697, 0x06ae, 0x06b3, 0x06b9, 0x06bf, + 0x06c4, 0x06cc, 0x06d2, 0x06d8, 0x06dd, 0x06e2, 0x06e7, 0x06f2, + 0x06f2, 0x06f7, 0x0706, 0x0710, 0x0715, 0x071b, 0x071f, 0x0723, + 0x0723, 0x072e, 0x0736, 0x073c, 0x0749, 0x0749, 0x074f, 0x074f, + 0x0753, 0x075e, 0x075e, 0x0761, 0x0761, 0x0770, 0x0779, 0x0779, + 0x0786, 0x0792, 0x0798, 0x079a, 0x07a0, 0x07aa, 0x07ae, 0x07b3, + 0x07b3, 0x07b7, 0x07c0, 0x07c0, 0x07d5, 0x07e4, 0x07e4, 0x07e9, + 0x07f2, 0x07f6, 0x07fc, 0x0805, 0x0813, 0x0813, 0x0813, 0x0819, + // Entry 140 - 17F + 0x0820, 0x0825, 0x0831, 0x0837, 0x0837, 0x083e, 0x0845, 0x084a, + 0x0856, 0x0862, 0x0866, 0x086a, 0x0870, 0x0876, 0x087b, 0x087b, + 0x087b, 0x0881, 0x0887, 0x088e, 0x089b, 0x08a6, 0x08a6, 0x08b1, + 0x08b7, 0x08bd, 0x08c0, 0x08c5, 0x08c9, 0x08d0, 0x08d7, 0x08db, + 0x08e2, 0x08ee, 0x08ee, 0x08f2, 0x08f2, 0x08f7, 0x08ff, 0x090b, + 0x090b, 0x090b, 0x0910, 0x091a, 0x0922, 0x092f, 0x0936, 0x093c, + 0x0942, 0x0953, 0x0953, 0x0953, 0x095a, 0x095f, 0x0966, 0x096b, + 0x0972, 0x0978, 0x097f, 0x0985, 0x098a, 0x0990, 0x0995, 0x0999, + // Entry 180 - 1BF + 0x0999, 0x0999, 0x0999, 0x099f, 0x099f, 0x09a5, 0x09a9, 0x09b5, + 0x09b5, 0x09bf, 0x09c6, 0x09cb, 0x09ce, 0x09d4, 0x09d9, 0x09d9, + 0x09d9, 0x09e0, 0x09e4, 0x09ea, 0x09f2, 0x09fa, 0x0a03, 0x0a08, + 0x0a0c, 0x0a13, 0x0a19, 0x0a1e, 0x0a22, 0x0a32, 0x0a3d, 0x0a48, + 0x0a4f, 0x0a55, 0x0a60, 0x0a67, 0x0a6f, 0x0a75, 0x0a7a, 0x0a7a, + 0x0a81, 0x0a96, 0x0a9b, 0x0aa4, 0x0aad, 0x0aad, 0x0ab2, 0x0aba, + 0x0ac7, 0x0ad5, 0x0add, 0x0ae1, 0x0aec, 0x0af2, 0x0af6, 0x0afb, + 0x0afb, 0x0b01, 0x0b0a, 0x0b0f, 0x0b1b, 0x0b1b, 0x0b22, 0x0b33, + // Entry 1C0 - 1FF + 0x0b37, 0x0b48, 0x0b51, 0x0b59, 0x0b5f, 0x0b64, 0x0b69, 0x0b79, + 0x0b84, 0x0b8b, 0x0b94, 0x0b9e, 0x0ba4, 0x0ba4, 0x0bb4, 0x0bb4, + 0x0bb4, 0x0bbc, 0x0bbc, 0x0bc5, 0x0bc5, 0x0bc5, 0x0bcc, 0x0bd2, + 0x0bde, 0x0be3, 0x0be3, 0x0bf0, 0x0bf7, 0x0c01, 0x0c01, 0x0c01, + 0x0c06, 0x0c0a, 0x0c0a, 0x0c0a, 0x0c0a, 0x0c11, 0x0c14, 0x0c1c, + 0x0c21, 0x0c35, 0x0c3d, 0x0c42, 0x0c4b, 0x0c4b, 0x0c52, 0x0c58, + 0x0c62, 0x0c67, 0x0c67, 0x0c70, 0x0c77, 0x0c7c, 0x0c7c, 0x0c84, + 0x0c90, 0x0c95, 0x0c95, 0x0c9e, 0x0ca1, 0x0cac, 0x0cb4, 0x0cb4, + // Entry 200 - 23F + 0x0cb4, 0x0cc0, 0x0ccc, 0x0cd8, 0x0ce4, 0x0cec, 0x0cf3, 0x0d01, + 0x0d07, 0x0d0d, 0x0d0d, 0x0d14, 0x0d1a, 0x0d20, 0x0d27, 0x0d37, + 0x0d3c, 0x0d3c, 0x0d3c, 0x0d41, 0x0d47, 0x0d4e, 0x0d53, 0x0d59, + 0x0d5c, 0x0d64, 0x0d64, 0x0d6b, 0x0d72, 0x0d72, 0x0d79, 0x0d87, + 0x0d90, 0x0d90, 0x0d97, 0x0d97, 0x0da1, 0x0da1, 0x0da8, 0x0dae, + 0x0db5, 0x0dba, 0x0dd2, 0x0dd8, 0x0ddf, 0x0de6, 0x0dea, 0x0ded, + 0x0ded, 0x0ded, 0x0ded, 0x0ded, 0x0df4, 0x0df4, 0x0df9, 0x0dff, + 0x0e05, 0x0e0b, 0x0e10, 0x0e18, 0x0e21, 0x0e28, 0x0e28, 0x0e2d, + // Entry 240 - 27F + 0x0e31, 0x0e35, 0x0e3c, 0x0e41, 0x0e41, 0x0e48, 0x0e50, 0x0e65, + 0x0e65, 0x0e6b, 0x0e7e, 0x0e82, 0x0e9d, 0x0ea1, 0x0eb7, 0x0eb7, + 0x0ec6, 0x0ed7, 0x0ee6, 0x0ef3, 0x0efd, 0x0f0b, 0x0f21, 0x0f31, + 0x0f43, 0x0f43, 0x0f52, 0x0f61, 0x0f6c, 0x0f73, 0x0f87, 0x0f99, + 0x0fa0, 0x0fac, 0x0fbd, 0x0fd4, 0x0fe7, +} // Size: 1250 bytes + +const hyLangStr string = "" + // Size: 8542 bytes + "աֆարերենաբխազերենաֆրիկաանսաքանամհարերենարագոներենարաբերենասամերենավարերե" + + "նայմարաադրբեջաներենբաշկիրերենբելառուսերենբուլղարերենբիսլամաբամբարաբենգա" + + "լերենտիբեթերենբրետոներենբոսնիերենկատալաներենչեչեներենչամոռոկորսիկերենչե" + + "խերենեկեղեցական սլավոներենչուվաշերենուելսերենդանիերենգերմաներենմալդիվեր" + + "ենջոնգքհաէվեհունարենանգլերենէսպերանտոիսպաներենէստոներենբասկերենպարսկերե" + + "նֆուլահֆիններենֆիջիերենֆարյորերենֆրանսերենարևմտաֆրիզերենիռլանդերենգաելե" + + "րենգալիսերենգուարանիգուջարաթիմեներենհաուսաեբրայերենհինդիխորվաթերենխառնա" + + "կերտ հայիթերենհունգարերենհայերենհերերոինդոնեզերենիգբոսիչուանիդոիսլանդեր" + + "ենիտալերենինուկտիտուտճապոներենճավայերենվրացերենկիկույուկուանյամաղազախեր" + + "ենկալաալիսուտքմերերենկաննադակորեերենկանուրիքաշմիրերենքրդերենկոմիերենկոռ" + + "ներենղրղզերենլատիներենլյուքսեմբուրգերենգանդալիմբուրգերենլինգալալաոսերեն" + + "լիտվերենլուբա-կատանգալատվիերենմալգաշերենմարշալերենմաորիմակեդոներենմալայ" + + "ալամմոնղոլերենմարաթիմալայերենմալթայերենբիրմայերեննաուրուհյուսիսային նդե" + + "բելենեպալերեննդոնգահոլանդերեննորվեգերեն նյունորսկնորվեգերեն բուկմոլհարա" + + "վային նդեբելենավախոնյանջաօքսիտաներենօջիբվաօրոմոօրիյաօսերենփենջաբերենպալ" + + "իլեհերենփուշթուպորտուգալերենկեչուառոմանշերենռունդիռումիներենռուսերենկին" + + "յառուանդասանսկրիտսարդիներենսինդհիհյուսիսային սաամիսանգոսինհալերենսլովակ" + + "երենսլովեներենշոնասոմալիերենալբաներենսերբերենսվազերենհարավային սոթոսուն" + + "դաներենշվեդերենսուահիլիթամիլերենթելուգուտաջիկերենթայերենտիգրինյաթուրքմե" + + "ներենցվանատոնգերենթուրքերենցոնգաթաթարերենթաիտերենույղուրերենուկրաիներեն" + + "ուրդուուզբեկերենվենդավիետնամերենվոլապյուկվալոներենվոլոֆքոսաիդիշյորուբաժ" + + "ուանգչինարենզուլուերենաչեհերենաչոլիադանգմերենադիղերենթունիսական արաբերե" + + "նաղեմայներենաքքադերենալեութերենհարավային ալթայերենհին անգլերենանգիկաարա" + + "մեերենմապուչիարապահոալժիրական արաբերենեգիպտական արաբերենասուամերիկյան ժ" + + "եստերի լեզուաստուրերենավադհիբալիերենբասաաբեմբաբենաարևմտաբելուջիերենբինի" + + "սիկսիկաբոդոաքուզբուգիերենբիլինկաբուաներենչիգատրուկերենմարիչոկտոչերոկիշա" + + "յենսորանի քրդերենղպտերենղրիմյան թուրքերենդակոտադարգիներենթաիթադոգրիբզար" + + "մաստորին սորբերենդուալաջոլա-ֆոնյիդազագաէմբուէֆիկհին եգիպտերենէկաջուկէվո" + + "նդոֆիլիպիներենտորնադելեն ֆիններենֆոնհին ֆրանսերենարևելաֆրիզերենֆրիուլիե" + + "րենգայերենգագաուզերենզրադաշտական դարիգեեզկիրիբատիհին վերին գերմաներենգո" + + "րոնտալոգոթերենհին հունարենշվեյցարական գերմաներենվայուուգուսիգվիչինհավայ" + + "իերենհիլիգայնոնհմոնգվերին սորբերենսյան չինարենհուպաիբաներենիբիբիոիլոկեր" + + "ենինգուշերենլոժբաննգոմբամաշամեկաբիլերենկաչիներենջյուկամբատիապմակոնդեկաբ" + + "ուվերդյանուկորոկխասիկոյրա չինիկակոկալենջինկիմբունդուպերմյակ կոմիերենկոն" + + "կանիկպելլեերենկարաչայ-բալկարերենկարելերենկուրուխշամբալաբաֆիաքյոլներենկո" + + "ւմիկերենլադինոլանգիլեզգիերենլակոտալոզիհյուսիսային լուրիերենլուբա-լուլու" + + "ալունդալուոմիզոլույամադուրերենմագահիմայթիլիմակասարերենմասաիմոկշայերենմե" + + "նդեմերումորիսյենմաքուա-մետտոմետամիկմակմինանգկաբաումանիպուրիմոհավքմոսսիա" + + "րևմտամարիերենմունդանգբազմալեզուկրիկմիրանդերենէրզյամազանդարաներեննեապոլե" + + "րեննամանեվարերեննիասերեննիուերենկվասիոնգիեմբուննոգայերենհին նորվեգերենն" + + "կոհյուսիսային սոթոնուերնյանկոլեօսեյջօսմաներենպանգասինաներենպահլավերենպա" + + "մպանգաերենպապյամենտուպալաուերենպիկարդերենփենսիլվանական գերմաներենպլատագ" + + "երմաներենհին պարսկերենպալատինյան գերմաներենփյունիկերենպիեմոնտերենպոնտեր" + + "ենպոնպեերենպրուսերենհին պրովանսերենքիչեռաջաստաներենռապանուիռարոտոնգաներ" + + "ենռոմանիոլերենռիֆերենռոմբոռոմաներենռոտումանռուսիներենռովիանաարոմաներենռ" + + "վասանդավեյակուտերենսամբուրուսանտալինգամբայսանգուսիցիլիերենշոտլանդերենհա" + + "րավային քրդերենսենակոյրաբորո սեննիհին իռլանդերենտաշելհիթշաներենհարավայի" + + "ն սաամերենլուլե սաամիինարի սաամերենսկոլտ սաամերենսոնինկեսրանան տոնգոսահ" + + "ոերենսուկումակոմորերենասորերենտուլուտեմնետեսոտերենոտետումտիգրետիվերենտո" + + "կելաուցախուրկլինգոնտլինգիտթալիշերենտամաշեկտոկ փիսինտուրոյոտարոկոցակոներ" + + "ենցիմշյանտումբուկաթուվալուերենտասավաքտուվերենկենտրոնատլասյան թամազիղտու" + + "դմուրտերենուգարիտերենումբունդուռուտերենվաիվենետերենվեպսերենարևմտաֆլաման" + + "դերենվոդերենվորովունջովալսերենվոլայտավարայերենվաշովարլպիրիվու չինարենկա" + + "լմիկերենսոգայաոյափերենյանգբենեմբականտոներենսապոտեկերենզեյլանդերենզենագա" + + "ընդհանուր մարոկյան թամազիղտզունիերենառանց լեզվային բովանդակությանզազաեր" + + "ենարդի ընդհանուր արաբերենավստրիական գերմաներենշվեյցարական վերին գերմանե" + + "րենավստրալիական անգլերենկանադական անգլերենբրիտանական անգլերենամերիկյան " + + "անգլերենլատինամերիկյան իսպաներենեվրոպական իսպաներենմեքսիկական իսպաներեն" + + "կանադական ֆրանսերենշվեյցարական ֆրանսերենստորին սաքսոներենֆլամանդերենբրա" + + "զիլական պորտուգալերենեվրոպական պորտուգալերենմոլդովերենսերբա-խորվաթերենկ" + + "ոնգոյի սուահիլիպարզեցված չինարենավանդական չինարեն" + +var hyLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0022, 0x0022, 0x0034, 0x003c, 0x004e, 0x0062, + 0x0072, 0x0082, 0x0092, 0x009e, 0x00b6, 0x00ca, 0x00e2, 0x00f8, + 0x0106, 0x0114, 0x0128, 0x013a, 0x014e, 0x0160, 0x0176, 0x0188, + 0x0194, 0x01a8, 0x01a8, 0x01b6, 0x01df, 0x01f3, 0x0205, 0x0215, + 0x0229, 0x023d, 0x024b, 0x0251, 0x0261, 0x0271, 0x0283, 0x0295, + 0x02a7, 0x02b7, 0x02c9, 0x02d5, 0x02e5, 0x02f5, 0x0309, 0x031b, + 0x0337, 0x034b, 0x035b, 0x036d, 0x037d, 0x038f, 0x039d, 0x03a9, + 0x03bb, 0x03c5, 0x03c5, 0x03d9, 0x03fe, 0x0414, 0x0422, 0x042e, + // Entry 40 - 7F + 0x042e, 0x0444, 0x0444, 0x044c, 0x045a, 0x045a, 0x0460, 0x0474, + 0x0484, 0x049a, 0x04ac, 0x04be, 0x04ce, 0x04ce, 0x04de, 0x04f0, + 0x0502, 0x0518, 0x0528, 0x0536, 0x0546, 0x0554, 0x0568, 0x0576, + 0x0586, 0x0596, 0x05a6, 0x05b8, 0x05da, 0x05e4, 0x05fc, 0x060a, + 0x061a, 0x062a, 0x0643, 0x0655, 0x0669, 0x067d, 0x0687, 0x069d, + 0x06af, 0x06c3, 0x06cf, 0x06e1, 0x06f5, 0x0709, 0x0717, 0x073c, + 0x074e, 0x075a, 0x076e, 0x0795, 0x07b8, 0x07d9, 0x07e5, 0x07f1, + 0x0807, 0x0813, 0x081d, 0x0827, 0x0833, 0x0847, 0x084f, 0x085d, + // Entry 80 - BF + 0x086b, 0x0885, 0x0891, 0x08a5, 0x08b1, 0x08c5, 0x08d5, 0x08ed, + 0x08fd, 0x0911, 0x091d, 0x093e, 0x0948, 0x095c, 0x0970, 0x0984, + 0x0984, 0x098c, 0x09a0, 0x09b2, 0x09c2, 0x09d2, 0x09ed, 0x0a03, + 0x0a13, 0x0a23, 0x0a35, 0x0a45, 0x0a57, 0x0a65, 0x0a75, 0x0a8d, + 0x0a97, 0x0aa7, 0x0ab9, 0x0ac3, 0x0ad5, 0x0ae5, 0x0afb, 0x0b11, + 0x0b1d, 0x0b31, 0x0b3b, 0x0b51, 0x0b63, 0x0b75, 0x0b7f, 0x0b87, + 0x0b8f, 0x0b9d, 0x0ba9, 0x0bb7, 0x0bcb, 0x0bdb, 0x0be5, 0x0bf9, + 0x0c09, 0x0c2e, 0x0c2e, 0x0c36, 0x0c44, 0x0c56, 0x0c56, 0x0c6a, + // Entry C0 - FF + 0x0c6a, 0x0c8f, 0x0ca6, 0x0cb2, 0x0cc4, 0x0cd2, 0x0cd2, 0x0ce0, + 0x0d03, 0x0d03, 0x0d03, 0x0d03, 0x0d26, 0x0d2e, 0x0d5a, 0x0d6e, + 0x0d6e, 0x0d7a, 0x0d7a, 0x0d8a, 0x0d8a, 0x0d94, 0x0d94, 0x0d94, + 0x0d94, 0x0d94, 0x0d9e, 0x0d9e, 0x0da6, 0x0da6, 0x0da6, 0x0dc8, + 0x0dc8, 0x0dc8, 0x0dd0, 0x0dd0, 0x0dd0, 0x0dde, 0x0dde, 0x0dde, + 0x0dde, 0x0dde, 0x0de6, 0x0df0, 0x0df0, 0x0e02, 0x0e02, 0x0e0c, + 0x0e0c, 0x0e0c, 0x0e0c, 0x0e0c, 0x0e0c, 0x0e22, 0x0e2a, 0x0e2a, + 0x0e2a, 0x0e3c, 0x0e44, 0x0e44, 0x0e4e, 0x0e4e, 0x0e5a, 0x0e64, + // Entry 100 - 13F + 0x0e7f, 0x0e8d, 0x0e8d, 0x0eae, 0x0eae, 0x0eae, 0x0eba, 0x0ece, + 0x0ed8, 0x0ed8, 0x0ed8, 0x0ee4, 0x0ee4, 0x0eee, 0x0eee, 0x0f0b, + 0x0f0b, 0x0f17, 0x0f17, 0x0f2a, 0x0f2a, 0x0f36, 0x0f40, 0x0f48, + 0x0f48, 0x0f61, 0x0f6f, 0x0f6f, 0x0f6f, 0x0f6f, 0x0f7b, 0x0f7b, + 0x0f7b, 0x0f91, 0x0fb6, 0x0fbc, 0x0fbc, 0x0fbc, 0x0fd5, 0x0fd5, + 0x0fd5, 0x0ff1, 0x1007, 0x1015, 0x102b, 0x102b, 0x102b, 0x102b, + 0x104a, 0x1052, 0x1062, 0x1062, 0x1062, 0x1088, 0x1088, 0x1088, + 0x109a, 0x10a8, 0x10a8, 0x10bf, 0x10ea, 0x10f8, 0x10f8, 0x1102, + // Entry 140 - 17F + 0x110e, 0x110e, 0x110e, 0x1122, 0x1122, 0x1136, 0x1136, 0x1140, + 0x115b, 0x1172, 0x117c, 0x118c, 0x1198, 0x11a8, 0x11bc, 0x11bc, + 0x11bc, 0x11c8, 0x11d4, 0x11e0, 0x11e0, 0x11e0, 0x11e0, 0x11e0, + 0x11f2, 0x1204, 0x120c, 0x1216, 0x1216, 0x1216, 0x1216, 0x121e, + 0x122c, 0x1248, 0x1248, 0x1250, 0x1250, 0x125a, 0x125a, 0x126d, + 0x126d, 0x126d, 0x1275, 0x1285, 0x1299, 0x12b8, 0x12c6, 0x12c6, + 0x12da, 0x12fd, 0x12fd, 0x12fd, 0x130f, 0x131d, 0x132b, 0x1335, + 0x1347, 0x135b, 0x135b, 0x1367, 0x1371, 0x1371, 0x1371, 0x1383, + // Entry 180 - 1BF + 0x1383, 0x1383, 0x1383, 0x138f, 0x138f, 0x138f, 0x1397, 0x13c0, + 0x13c0, 0x13d9, 0x13d9, 0x13e5, 0x13ed, 0x13f5, 0x13ff, 0x13ff, + 0x13ff, 0x1413, 0x1413, 0x141f, 0x142d, 0x1443, 0x1443, 0x144d, + 0x144d, 0x1461, 0x1461, 0x146b, 0x1475, 0x1485, 0x1485, 0x149c, + 0x14a4, 0x14b0, 0x14c8, 0x14c8, 0x14da, 0x14e6, 0x14f0, 0x150c, + 0x151c, 0x1530, 0x1538, 0x154c, 0x154c, 0x154c, 0x154c, 0x1556, + 0x1572, 0x1572, 0x1586, 0x158e, 0x158e, 0x15a0, 0x15b0, 0x15c0, + 0x15c0, 0x15cc, 0x15de, 0x15f0, 0x160b, 0x160b, 0x1611, 0x1630, + // Entry 1C0 - 1FF + 0x163a, 0x163a, 0x163a, 0x164a, 0x164a, 0x164a, 0x1654, 0x1666, + 0x1682, 0x1696, 0x16ae, 0x16c4, 0x16d8, 0x16ec, 0x16ec, 0x171b, + 0x1739, 0x1752, 0x177b, 0x1791, 0x17a7, 0x17b7, 0x17c9, 0x17db, + 0x17f8, 0x1800, 0x1800, 0x1818, 0x1828, 0x1844, 0x185c, 0x186a, + 0x1874, 0x1886, 0x1896, 0x18aa, 0x18b8, 0x18cc, 0x18d2, 0x18e0, + 0x18f4, 0x18f4, 0x1906, 0x1906, 0x1914, 0x1914, 0x1922, 0x192e, + 0x1942, 0x1958, 0x1958, 0x1979, 0x1979, 0x1981, 0x1981, 0x1981, + 0x199e, 0x19b9, 0x19b9, 0x19c9, 0x19d7, 0x19d7, 0x19d7, 0x19d7, + // Entry 200 - 23F + 0x19d7, 0x19fa, 0x1a0f, 0x1a2a, 0x1a45, 0x1a53, 0x1a53, 0x1a6a, + 0x1a6a, 0x1a7a, 0x1a7a, 0x1a8a, 0x1a8a, 0x1a8a, 0x1a9c, 0x1a9c, + 0x1aac, 0x1aac, 0x1ab8, 0x1ac2, 0x1aca, 0x1ad6, 0x1ae2, 0x1aec, + 0x1afa, 0x1b0a, 0x1b16, 0x1b24, 0x1b32, 0x1b44, 0x1b52, 0x1b52, + 0x1b63, 0x1b71, 0x1b7d, 0x1b8f, 0x1b9d, 0x1b9d, 0x1baf, 0x1bc7, + 0x1bd5, 0x1be5, 0x1c14, 0x1c2c, 0x1c42, 0x1c56, 0x1c66, 0x1c6c, + 0x1c7e, 0x1c8e, 0x1cb0, 0x1cb0, 0x1cbe, 0x1cc6, 0x1cd2, 0x1ce2, + 0x1cf0, 0x1d02, 0x1d0a, 0x1d1a, 0x1d2f, 0x1d43, 0x1d43, 0x1d4b, + // Entry 240 - 27F + 0x1d51, 0x1d5f, 0x1d6d, 0x1d75, 0x1d75, 0x1d89, 0x1d9f, 0x1d9f, + 0x1db5, 0x1dc1, 0x1df5, 0x1e07, 0x1e3f, 0x1e4f, 0x1e7b, 0x1e7b, + 0x1ea4, 0x1eda, 0x1f03, 0x1f26, 0x1f4b, 0x1f6e, 0x1f9d, 0x1fc2, + 0x1fe9, 0x1fe9, 0x200e, 0x2037, 0x2058, 0x206e, 0x209d, 0x20ca, + 0x20de, 0x20fd, 0x211c, 0x213d, 0x215e, +} // Size: 1250 bytes + +const idLangStr string = "" + // Size: 3994 bytes + "AfarAbkhazAvestaAfrikaansAkanAmharikAragonArabAssamAvarAymaraAzerbaijani" + + "BashkirBelarusiaBulgariaBislamaBambaraBengaliTibetBretonBosniaKatalanChe" + + "chenChamorroKorsikaKreeCheskaBahasa Gereja SlavoniaChuvashWelshDanskJerm" + + "anDivehiDzongkhaEweYunaniInggrisEsperantoSpanyolEstiBasquePersiaFulaSuom" + + "iFijiFaroePrancisFrisia BaratIrlandiaGaelik SkotlandiaGalisiaGuaraniGuja" + + "ratManxHausaIbraniHindiHiri MotuKroasiaKreol HaitiHungariaArmeniaHereroI" + + "nterlinguaIndonesiaInterlingueIgboSichuan YiInupiakIdoIslandiaItaliaInuk" + + "titutJepangJawaGeorgiaKongoKikuyuKuanyamaKazakhKalaallisutKhmerKannadaKo" + + "reaKanuriKashmirKurdiKomiKornishKirgizLatinLuksemburgGandaLimburgiaLinga" + + "laLaoLituaviLuba-KatangaLatviMalagasiMarshallMaoriMakedoniaMalayalamMong" + + "oliaMarathiMelayuMaltaBurmaNauruNdebele UtaraNepaliNdongaBelandaNynorsk " + + "NorwegiaBokmål NorwegiaNdebele SelatanNavajoNyanjaOsitaniaOjibwaOromoOri" + + "yaOssetiaPunjabiPaliPolskiPashtoPortugisQuechuaReto-RomanRundiRumaniaRus" + + "iaKinyarwandaSanskertaSardiniaSindhiSami UtaraSangoSinhalaSlovakSlovenSa" + + "moaShonaSomaliAlbaniaSerbSwatiSotho SelatanSundaSwediaSwahiliTamilTelugu" + + "TajikThaiTigrinyaTurkmenTswanaTongaTurkiTsongaTatarTahitiUyghurUkrainaUr" + + "duUzbekVendaVietnamVolapukWalloonWolofXhosaYiddishYorubaZhuangTionghoaZu" + + "luAcehAcoliAdangmeAdygeiArab TunisiaAfrihiliAghemAinuAkkadiaAlabamaAleut" + + "Altai SelatanInggris KunoAngikaAramMapucheArapahoArab AljazairArawakArab" + + " MarokoArab MesirAsuBahasa Isyarat AmerikaAsturiaAwadhiBaluchiBaliBavari" + + "aBasaBamunBatak TobaGhomalaBejaBembaBetawiBenaBafutBalochi BaratBhojpuri" + + "BikolBiniBanjarKomSiksikaBrajBodoAkooseBuriatBugisBuluBlinMedumbaKadoKar" + + "ibCayugaAtsamCebuanoKigaChibchaChagataiChuukeMariJargon ChinookKoktawChi" + + "pewyanCherokeeCheyenneKurdi SoraniKoptikTatar KrimeaSeselwa Kreol Pranci" + + "sKashubiaDakotaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriSorbia Renda" + + "hDualaBelanda Abad PertengahanJola-FonyiDyulaDazagaEmbuEfikMesir KunoEka" + + "jukElamInggris Abad PertengahanEwondoFangFilipinoFonPrancis Abad Perteng" + + "ahanPrancis KunoArpitanFrisia UtaraFrisia TimurFriuliGaGagauzGayoGbayaGe" + + "ezGilbertGilakiJerman Abad PertengahanJerman KunoGondiGorontaloGotikGreb" + + "oYunani KunoJerman (Swiss)GusiiGwich’inHaidaHawaiiHindi FijiHiligaynonHi" + + "titHmongSorbia AtasHupaIbanIbibioIlokoIngushetiaLojbanNgombaMachameIbran" + + "i-PersiaIbrani-ArabKara-KalpakKabyleKachinJjuKambaKawiKabardiKanembuTyap" + + "MakondeKabuverdianuKenyangKoroKhasiKhotanKoyra ChiiniKakoKalenjinKimbund" + + "uKomi-PermyakKonkaniKosreKpelleKarachai BalkarKrioKareliaKurukShambalaBa" + + "fiaDialek KolschKumykKutenaiLadinoLangiLahndaLambaLezghiaLiguriaLakotaMo" + + "ngoLoziLuri UtaraLuba-LuluaLuisenoLundaLuoMizoLuyiaLazMaduraMafaMagahiMa" + + "ithiliMakasarMandingoMasaiMabaMokshaMandarMendeMeruMorisienIrlandia Abad" + + " PertengahanMakhuwa-MeettoMeta’MikmakMinangkabauManchuriaManipuriMohawkM" + + "ossiMundangBeberapa BahasaBahasa MuskogeeMirandaMarwariMentawaiMyeneEryz" + + "aMazanderaniNeapolitanNamaJerman RendahNewariNiasNiueaKwasioNgiemboonNog" + + "aiNorse KunoN’KoSotho UtaraNuerNewari KlasikNyamweziNyankoleNyoroNzimaOs" + + "ageTurki OsmaniPangasinaPahleviPampangaPapiamentoPalauPidgin NigeriaJerm" + + "an PennsylvaniaPersia KunoFunisiaPohnpeiaPrusiaProvencal LamaKʼicheʼRaja" + + "sthaniRapanuiRarotongaRomboRomaniRotumaAromaniaRwaSandaweSakhaAram Samar" + + "iaSamburuSasakSantaliNgambaiSanguSisiliaSkotlandiaKurdi SelatanSenecaSen" + + "aSeriSelkupKoyraboro SenniIrlandia KunoTachelhitShanArab SuwaSidamoSiles" + + "ia RendahSelayarSami SelatanLule SamiInari SamiSkolt SamiSoninkeSogdienS" + + "ranan TongoSererSahoSukumaSusuSumeriaKomoriaSuriah KlasikSuriahSilesiaTu" + + "luTimneTesoTerenoTetunTigreTivTokelauKlingonTlingitTamashekNyasa TongaTo" + + "k PisinTuroyoTarokoTsimshiaTat MuslimTumbukaTuvaluTasawaqTuviniaTamazigh" + + "t Maroko TengahUdmurtUgaritUmbunduRootVaiVenesiaVotiaVunjoWalserWalamoWa" + + "raiWashoWarlpiriKalmukSogaYaoYapoisYangbenYembaKantonZapotekBlissymbolZe" + + "nagaTamazight Maroko StandarZuniTidak ada konten linguistikZazaArab Stan" + + "dar ModernJerman Tinggi (Swiss)Inggris (Inggris)Spanyol (Eropa)Portugis " + + "(Eropa)MoldaviaSerbo-KroasiaKongo SwahiliTionghoa (Aksara Sederhana)Tion" + + "ghoa (Aksara Tradisional)" + +var idLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000a, 0x0010, 0x0019, 0x001d, 0x0024, 0x002a, + 0x002e, 0x0033, 0x0037, 0x003d, 0x0048, 0x004f, 0x0058, 0x0060, + 0x0067, 0x006e, 0x0075, 0x007a, 0x0080, 0x0086, 0x008d, 0x0094, + 0x009c, 0x00a3, 0x00a7, 0x00ad, 0x00c3, 0x00ca, 0x00cf, 0x00d4, + 0x00da, 0x00e0, 0x00e8, 0x00eb, 0x00f1, 0x00f8, 0x0101, 0x0108, + 0x010c, 0x0112, 0x0118, 0x011c, 0x0121, 0x0125, 0x012a, 0x0131, + 0x013d, 0x0145, 0x0156, 0x015d, 0x0164, 0x016b, 0x016f, 0x0174, + 0x017a, 0x017f, 0x0188, 0x018f, 0x019a, 0x01a2, 0x01a9, 0x01af, + // Entry 40 - 7F + 0x01ba, 0x01c3, 0x01ce, 0x01d2, 0x01dc, 0x01e3, 0x01e6, 0x01ee, + 0x01f4, 0x01fd, 0x0203, 0x0207, 0x020e, 0x0213, 0x0219, 0x0221, + 0x0227, 0x0232, 0x0237, 0x023e, 0x0243, 0x0249, 0x0250, 0x0255, + 0x0259, 0x0260, 0x0266, 0x026b, 0x0275, 0x027a, 0x0283, 0x028a, + 0x028d, 0x0294, 0x02a0, 0x02a5, 0x02ad, 0x02b5, 0x02ba, 0x02c3, + 0x02cc, 0x02d4, 0x02db, 0x02e1, 0x02e6, 0x02eb, 0x02f0, 0x02fd, + 0x0303, 0x0309, 0x0310, 0x0320, 0x0330, 0x033f, 0x0345, 0x034b, + 0x0353, 0x0359, 0x035e, 0x0363, 0x036a, 0x0371, 0x0375, 0x037b, + // Entry 80 - BF + 0x0381, 0x0389, 0x0390, 0x039a, 0x039f, 0x03a6, 0x03ab, 0x03b6, + 0x03bf, 0x03c7, 0x03cd, 0x03d7, 0x03dc, 0x03e3, 0x03e9, 0x03ef, + 0x03f4, 0x03f9, 0x03ff, 0x0406, 0x040a, 0x040f, 0x041c, 0x0421, + 0x0427, 0x042e, 0x0433, 0x0439, 0x043e, 0x0442, 0x044a, 0x0451, + 0x0457, 0x045c, 0x0461, 0x0467, 0x046c, 0x0472, 0x0478, 0x047f, + 0x0483, 0x0488, 0x048d, 0x0494, 0x049b, 0x04a2, 0x04a7, 0x04ac, + 0x04b3, 0x04b9, 0x04bf, 0x04c7, 0x04cb, 0x04cf, 0x04d4, 0x04db, + 0x04e1, 0x04ed, 0x04f5, 0x04fa, 0x04fe, 0x0505, 0x050c, 0x0511, + // Entry C0 - FF + 0x0511, 0x051e, 0x052a, 0x0530, 0x0534, 0x053b, 0x053b, 0x0542, + 0x054f, 0x054f, 0x0555, 0x0560, 0x056a, 0x056d, 0x0583, 0x058a, + 0x058a, 0x0590, 0x0597, 0x059b, 0x05a2, 0x05a6, 0x05ab, 0x05b5, + 0x05bc, 0x05c0, 0x05c5, 0x05cb, 0x05cf, 0x05d4, 0x05d4, 0x05e1, + 0x05e9, 0x05ee, 0x05f2, 0x05f8, 0x05fb, 0x0602, 0x0602, 0x0602, + 0x0606, 0x0606, 0x060a, 0x0610, 0x0616, 0x061b, 0x061f, 0x0623, + 0x062a, 0x062e, 0x0633, 0x0639, 0x063e, 0x0645, 0x0649, 0x0650, + 0x0658, 0x065e, 0x0662, 0x0670, 0x0676, 0x067f, 0x0687, 0x068f, + // Entry 100 - 13F + 0x069b, 0x06a1, 0x06a1, 0x06ad, 0x06c2, 0x06ca, 0x06d0, 0x06d6, + 0x06db, 0x06e3, 0x06e8, 0x06ee, 0x06f3, 0x06f8, 0x06fd, 0x070a, + 0x070a, 0x070f, 0x0727, 0x0731, 0x0736, 0x073c, 0x0740, 0x0744, + 0x0744, 0x074e, 0x0754, 0x0758, 0x0770, 0x0770, 0x0776, 0x0776, + 0x077a, 0x0782, 0x0782, 0x0785, 0x0785, 0x079d, 0x07a9, 0x07b0, + 0x07bc, 0x07c8, 0x07ce, 0x07d0, 0x07d6, 0x07d6, 0x07da, 0x07df, + 0x07df, 0x07e3, 0x07ea, 0x07f0, 0x0807, 0x0812, 0x0812, 0x0817, + 0x0820, 0x0825, 0x082a, 0x0835, 0x0843, 0x0843, 0x0843, 0x0848, + // Entry 140 - 17F + 0x0852, 0x0857, 0x0857, 0x085d, 0x0867, 0x0871, 0x0876, 0x087b, + 0x0886, 0x0886, 0x088a, 0x088e, 0x0894, 0x0899, 0x08a3, 0x08a3, + 0x08a3, 0x08a9, 0x08af, 0x08b6, 0x08c3, 0x08ce, 0x08ce, 0x08d9, + 0x08df, 0x08e5, 0x08e8, 0x08ed, 0x08f1, 0x08f8, 0x08ff, 0x0903, + 0x090a, 0x0916, 0x091d, 0x0921, 0x0921, 0x0926, 0x092c, 0x0938, + 0x0938, 0x0938, 0x093c, 0x0944, 0x094c, 0x0958, 0x095f, 0x0964, + 0x096a, 0x0979, 0x097d, 0x097d, 0x0984, 0x0989, 0x0991, 0x0996, + 0x09a3, 0x09a8, 0x09af, 0x09b5, 0x09ba, 0x09c0, 0x09c5, 0x09cc, + // Entry 180 - 1BF + 0x09cc, 0x09d3, 0x09d3, 0x09d9, 0x09d9, 0x09de, 0x09e2, 0x09ec, + 0x09ec, 0x09f6, 0x09fd, 0x0a02, 0x0a05, 0x0a09, 0x0a0e, 0x0a0e, + 0x0a11, 0x0a17, 0x0a1b, 0x0a21, 0x0a29, 0x0a30, 0x0a38, 0x0a3d, + 0x0a41, 0x0a47, 0x0a4d, 0x0a52, 0x0a56, 0x0a5e, 0x0a77, 0x0a85, + 0x0a8c, 0x0a92, 0x0a9d, 0x0aa6, 0x0aae, 0x0ab4, 0x0ab9, 0x0ab9, + 0x0ac0, 0x0acf, 0x0ade, 0x0ae5, 0x0aec, 0x0af4, 0x0af9, 0x0afe, + 0x0b09, 0x0b09, 0x0b13, 0x0b17, 0x0b24, 0x0b2a, 0x0b2e, 0x0b33, + 0x0b33, 0x0b39, 0x0b42, 0x0b47, 0x0b51, 0x0b51, 0x0b57, 0x0b62, + // Entry 1C0 - 1FF + 0x0b66, 0x0b73, 0x0b7b, 0x0b83, 0x0b88, 0x0b8d, 0x0b92, 0x0b9e, + 0x0ba7, 0x0bae, 0x0bb6, 0x0bc0, 0x0bc5, 0x0bc5, 0x0bd3, 0x0be6, + 0x0be6, 0x0bf1, 0x0bf1, 0x0bf8, 0x0bf8, 0x0bf8, 0x0c00, 0x0c06, + 0x0c14, 0x0c1d, 0x0c1d, 0x0c27, 0x0c2e, 0x0c37, 0x0c37, 0x0c37, + 0x0c3c, 0x0c42, 0x0c48, 0x0c48, 0x0c48, 0x0c50, 0x0c53, 0x0c5a, + 0x0c5f, 0x0c6b, 0x0c72, 0x0c77, 0x0c7e, 0x0c7e, 0x0c85, 0x0c8a, + 0x0c91, 0x0c9b, 0x0c9b, 0x0ca8, 0x0cae, 0x0cb2, 0x0cb6, 0x0cbc, + 0x0ccb, 0x0cd8, 0x0cd8, 0x0ce1, 0x0ce5, 0x0cee, 0x0cf4, 0x0d02, + // Entry 200 - 23F + 0x0d09, 0x0d15, 0x0d1e, 0x0d28, 0x0d32, 0x0d39, 0x0d40, 0x0d4c, + 0x0d51, 0x0d55, 0x0d55, 0x0d5b, 0x0d5f, 0x0d66, 0x0d6d, 0x0d7a, + 0x0d80, 0x0d87, 0x0d8b, 0x0d90, 0x0d94, 0x0d9a, 0x0d9f, 0x0da4, + 0x0da7, 0x0dae, 0x0dae, 0x0db5, 0x0dbc, 0x0dbc, 0x0dc4, 0x0dcf, + 0x0dd8, 0x0dde, 0x0de4, 0x0de4, 0x0dec, 0x0df6, 0x0dfd, 0x0e03, + 0x0e0a, 0x0e11, 0x0e28, 0x0e2e, 0x0e34, 0x0e3b, 0x0e3f, 0x0e42, + 0x0e49, 0x0e49, 0x0e49, 0x0e49, 0x0e4e, 0x0e4e, 0x0e53, 0x0e59, + 0x0e5f, 0x0e64, 0x0e69, 0x0e71, 0x0e71, 0x0e77, 0x0e77, 0x0e7b, + // Entry 240 - 27F + 0x0e7e, 0x0e84, 0x0e8b, 0x0e90, 0x0e90, 0x0e96, 0x0e9d, 0x0ea7, + 0x0ea7, 0x0ead, 0x0ec5, 0x0ec9, 0x0ee4, 0x0ee8, 0x0efb, 0x0efb, + 0x0efb, 0x0f10, 0x0f10, 0x0f10, 0x0f21, 0x0f21, 0x0f21, 0x0f30, + 0x0f30, 0x0f30, 0x0f30, 0x0f30, 0x0f30, 0x0f30, 0x0f30, 0x0f40, + 0x0f48, 0x0f55, 0x0f62, 0x0f7d, 0x0f9a, +} // Size: 1250 bytes + +const isLangStr string = "" + // Size: 4605 bytes + "afárabkasískaavestískaafríkanskaakanamharískaaragonskaarabískaassamskaav" + + "arískaaímaraaserskabaskírhvítrússneskabúlgarskabíslamabambarabengalskatí" + + "beskabretónskabosnískakatalónskatsjetsjenskakamorrókorsískakrítékkneskak" + + "irkjuslavneskasjúvasvelskadanskaþýskadívehídsongkaewegrískaenskaesperant" + + "óspænskaeistneskabaskneskapersneskafúlafinnskafídjeyskafæreyskafranskav" + + "esturfrísneskaírskaskosk gelískagalíanskagvaranígújaratímanskahásahebres" + + "kahindíhírímótúkróatískahaítískaungverskaarmenskahereróalþjóðatungaindón" + + "esískainterlingveígbósísúanjíínúpíakídóíslenskaítalskainúktitútjapanskaj" + + "avanskageorgískakongóskakíkújúkúanjamakasakskagrænlenskakmerkannadakóres" + + "kakanúríkasmírskakúrdískakomískakornbreskakirgiskalatínalúxemborgískagan" + + "dalimbúrgískalingalalaólitháískalúbakatangalettneskamalagasískamarshalls" + + "kamaorímakedónskamalajalammongólskamaratímalaískamaltneskaburmneskanárús" + + "kanorður-ndebelenepalskandongahollenskanýnorskanorskt bókmálsuðurndebele" + + "navahónjanja; sísjeva; sjevaoksítanískaojibvaoromoóríaossetískapúnjabípa" + + "lípólskapastúportúgalskakvesjúarómanskarúndírúmenskarússneskakínjarvanda" + + "sanskrítsardínskasindínorðursamískasangósingalískaslóvakískaslóvenskasam" + + "óskashonasómalskaalbanskaserbneskasvatísuðursótósúndanskasænskasvahílít" + + "amílskatelúgútadsjikskataílenskatígrinjatúrkmenskatsúanatongverskatyrkne" + + "skatsongatatarskatahítískaúígúrúkraínskaúrdúúsbekskavendavíetnamskavolap" + + "ykvallónskavolofsósajiddískajórúbasúangkínverskasúlúakkískaacoliadangmea" + + "dýgeafríhílíaghemaínu (Japan)akkadískaaleúskasuðuraltaískafornenskaangík" + + "aarameískaarákanískaarapahóaravakskaasuastúrískaavadíbalúkíbalískabasaba" + + "munbejabembabenavesturbalotsíbojpúríbíkolbínísiksikabraíbódóbakossibúría" + + "tbúgískablínkaddókaríbamálkajúgaatsamkebúanókígasíbsjasjagataísjúkískama" + + "rísínúksjoktásípevískaCherokee-málsjeyensorani-kúrdískakoptískakrímtyrkn" + + "eskaSeselwa kreólsk franskakasúbískadakótadargvataítadelaverslavneskadog" + + "ríbdinkazarmadogrílágsorbneskadúalamiðhollenskajola-fonyidjúladazagaembu" + + "efíkfornegypskaekajúkelamítmiðenskaevondófangfilippseyskafónmiðfranskafo" + + "rnfranskanorðurfrísneskaausturfrísneskafríúlskagagagásgajógbajagísgilber" + + "skamiðháþýskafornháþýskagondígorontalógotneskagerbóforngrískasvissnesk þ" + + "ýskagusiigvísínhaídahavaískahíligaínonhettitískahmonghásorbneskahúpaíba" + + "nibibioílokóingúslojbanngombamasjámegyðingapersneskagyðingaarabískakarak" + + "alpakkabílekasínjjukambakavíkabardískatyapmakondegrænhöfðeyskakorokasíko" + + "taskakoyra chiinikakokalenjinkimbúndúkómí-permyakkonkaníkosraskakpelleka" + + "rasaíbalkarkarélskakúrúksjambalabafíakölnískakúmíkkútenaíladínskalangíla" + + "ndalambalesgískalakótamongólozinorðurlúríluba-lulualúisenólúndalúólúsaíl" + + "uyiamadúrskamagahímaítílímakasarmandingómasaímoksamandarmendemerúmáritís" + + "kamiðírskamakhuwa-meettometa’mikmakmínangkabámansjúmanípúrímóhískamossím" + + "undangmargvísleg málkríkmirandesískamarvaríersjamasanderanínapólískanama" + + "lágþýska; lágsaxneskanevaríníasníveskakwasiongiemboonnógaínorrænan’konor" + + "ðursótónúerklassísk nevarískanjamvesínyankolenjórónsímaósagetyrkneska, " + + "ottómanpangasínmálpalavípampangapapíamentópaláskanígerískt pidginfornper" + + "sneskafönikískaponpeiskaprússneskafornpróvensalskakicherajastanírapanúír" + + "arótongskarombóromaníarúmenskarúasandavejakútsamversk arameískasambúrúsa" + + "saksantalíngambaysangúsikileyskaskoskasuðurkúrdískasenaselkúpkoíraboró-s" + + "ennífornírskatachelhitsjansídamósuðursamískalúlesamískaenaresamískaskolt" + + "esamískasóninkesogdíensranan tongoserersahosúkúmasúsúsúmerskashimaoríska" + + "klassísk sýrlenskasýrlenskatímnetesóterenótetúmtígretívtókeláskaklingons" + + "katlingittamasjektongverska (nyasa)tokpisintarókótsimsískatúmbúkatúvalús" + + "katasawaqtúvínskatamazightúdmúrtúgarítískaúmbúndúrótvaívotískavunjóvalse" + + "rvalamóvaraívasjóvarlpirikalmúkskasógajaójapískayangbenyembakantoneskasa" + + "pótekblisstáknsenagastaðlað marokkóskt tamazightsúníekkert tungumálaefni" + + "zázáískastöðluð nútímaarabískaausturrísk þýskasvissnesk háþýskaáströlsk " + + "enskakanadísk enskabresk enskabandarísk enskarómönsk-amerísk spænskaevró" + + "psk spænskamexíkósk spænskakanadísk franskasvissnesk franskalágsaxneskaf" + + "læmskabrasílísk portúgalskaevrópsk portúgalskamoldóvskaserbókróatískaKon" + + "gó-svahílíkínverska (einfölduð)kínverska (hefðbundin)" + +var isLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x000f, 0x0019, 0x0024, 0x0028, 0x0032, 0x003b, + 0x0044, 0x004c, 0x0055, 0x005c, 0x0063, 0x006a, 0x0079, 0x0083, + 0x008b, 0x0092, 0x009b, 0x00a3, 0x00ad, 0x00b6, 0x00c1, 0x00cd, + 0x00d5, 0x00de, 0x00e2, 0x00ec, 0x00fb, 0x0102, 0x0108, 0x010e, + 0x0115, 0x011d, 0x0124, 0x0127, 0x012e, 0x0133, 0x013d, 0x0145, + 0x014e, 0x0157, 0x0160, 0x0165, 0x016c, 0x0176, 0x017f, 0x0186, + 0x0196, 0x019c, 0x01aa, 0x01b4, 0x01bc, 0x01c6, 0x01cc, 0x01d1, + 0x01d9, 0x01df, 0x01eb, 0x01f6, 0x0200, 0x0209, 0x0211, 0x0218, + // Entry 40 - 7F + 0x0227, 0x0234, 0x023f, 0x0245, 0x0250, 0x025a, 0x025f, 0x0268, + 0x0270, 0x027b, 0x0283, 0x028b, 0x0295, 0x029e, 0x02a7, 0x02b0, + 0x02b8, 0x02c3, 0x02c7, 0x02ce, 0x02d6, 0x02de, 0x02e8, 0x02f2, + 0x02fa, 0x0304, 0x030c, 0x0313, 0x0322, 0x0327, 0x0334, 0x033b, + 0x033f, 0x034a, 0x0356, 0x035f, 0x036b, 0x0376, 0x037c, 0x0387, + 0x0390, 0x039a, 0x03a1, 0x03aa, 0x03b3, 0x03bc, 0x03c5, 0x03d4, + 0x03dc, 0x03e2, 0x03eb, 0x03f4, 0x0403, 0x0410, 0x0417, 0x042e, + 0x043b, 0x0441, 0x0446, 0x044c, 0x0456, 0x045f, 0x0464, 0x046b, + // Entry 80 - BF + 0x0471, 0x047d, 0x0485, 0x048e, 0x0495, 0x049e, 0x04a8, 0x04b4, + 0x04bd, 0x04c7, 0x04cd, 0x04dc, 0x04e2, 0x04ed, 0x04f9, 0x0503, + 0x050b, 0x0510, 0x0519, 0x0521, 0x052a, 0x0530, 0x053c, 0x0546, + 0x054d, 0x0556, 0x055f, 0x0567, 0x0571, 0x057b, 0x0584, 0x058f, + 0x0596, 0x05a0, 0x05a9, 0x05af, 0x05b7, 0x05c2, 0x05ca, 0x05d5, + 0x05db, 0x05e4, 0x05e9, 0x05f4, 0x05fb, 0x0605, 0x060a, 0x060f, + 0x0618, 0x0620, 0x0626, 0x0630, 0x0636, 0x063e, 0x0643, 0x064a, + 0x0650, 0x0650, 0x065b, 0x0660, 0x066d, 0x0677, 0x0677, 0x067f, + // Entry C0 - FF + 0x067f, 0x068e, 0x0697, 0x069e, 0x06a8, 0x06b4, 0x06b4, 0x06bc, + 0x06bc, 0x06bc, 0x06c5, 0x06c5, 0x06c5, 0x06c8, 0x06c8, 0x06d3, + 0x06d3, 0x06d9, 0x06e1, 0x06e9, 0x06e9, 0x06ed, 0x06f2, 0x06f2, + 0x06f2, 0x06f6, 0x06fb, 0x06fb, 0x06ff, 0x06ff, 0x06ff, 0x070d, + 0x0716, 0x071c, 0x0722, 0x0722, 0x0722, 0x0729, 0x0729, 0x0729, + 0x072e, 0x072e, 0x0734, 0x073b, 0x0743, 0x074c, 0x074c, 0x0751, + 0x0751, 0x0757, 0x0762, 0x0769, 0x076e, 0x0777, 0x077c, 0x0783, + 0x078c, 0x0796, 0x079b, 0x07a2, 0x07a9, 0x07b4, 0x07c1, 0x07c7, + // Entry 100 - 13F + 0x07d8, 0x07e1, 0x07e1, 0x07ef, 0x0807, 0x0812, 0x0819, 0x081f, + 0x0825, 0x082c, 0x0835, 0x083c, 0x0841, 0x0846, 0x084c, 0x0859, + 0x0859, 0x085f, 0x086c, 0x0876, 0x087c, 0x0882, 0x0886, 0x088b, + 0x088b, 0x0896, 0x089d, 0x08a4, 0x08ad, 0x08ad, 0x08b4, 0x08b4, + 0x08b8, 0x08c4, 0x08c4, 0x08c8, 0x08c8, 0x08d3, 0x08de, 0x08de, + 0x08ef, 0x08ff, 0x0909, 0x090b, 0x0911, 0x0911, 0x0916, 0x091b, + 0x091b, 0x091f, 0x0928, 0x0928, 0x0936, 0x0944, 0x0944, 0x094a, + 0x0954, 0x095c, 0x0962, 0x096d, 0x097e, 0x097e, 0x097e, 0x0983, + // Entry 140 - 17F + 0x098b, 0x0991, 0x0991, 0x099a, 0x099a, 0x09a6, 0x09b1, 0x09b6, + 0x09c2, 0x09c2, 0x09c7, 0x09cc, 0x09d2, 0x09d9, 0x09df, 0x09df, + 0x09df, 0x09e5, 0x09eb, 0x09f3, 0x0a04, 0x0a15, 0x0a15, 0x0a1f, + 0x0a26, 0x0a2c, 0x0a2f, 0x0a34, 0x0a39, 0x0a44, 0x0a44, 0x0a48, + 0x0a4f, 0x0a5f, 0x0a5f, 0x0a63, 0x0a63, 0x0a68, 0x0a6f, 0x0a7b, + 0x0a7b, 0x0a7b, 0x0a7f, 0x0a87, 0x0a91, 0x0a9f, 0x0aa7, 0x0aaf, + 0x0ab5, 0x0ac3, 0x0ac3, 0x0ac3, 0x0acc, 0x0ad3, 0x0adb, 0x0ae1, + 0x0aeb, 0x0af2, 0x0afb, 0x0b04, 0x0b0a, 0x0b0f, 0x0b14, 0x0b1d, + // Entry 180 - 1BF + 0x0b1d, 0x0b1d, 0x0b1d, 0x0b24, 0x0b24, 0x0b2a, 0x0b2e, 0x0b3b, + 0x0b3b, 0x0b45, 0x0b4e, 0x0b54, 0x0b59, 0x0b60, 0x0b65, 0x0b65, + 0x0b65, 0x0b6e, 0x0b6e, 0x0b75, 0x0b7f, 0x0b86, 0x0b8f, 0x0b95, + 0x0b95, 0x0b9a, 0x0ba0, 0x0ba5, 0x0baa, 0x0bb5, 0x0bbf, 0x0bcd, + 0x0bd4, 0x0bda, 0x0be6, 0x0bed, 0x0bf8, 0x0c01, 0x0c07, 0x0c07, + 0x0c0e, 0x0c1e, 0x0c23, 0x0c30, 0x0c38, 0x0c38, 0x0c38, 0x0c3d, + 0x0c49, 0x0c49, 0x0c54, 0x0c58, 0x0c71, 0x0c78, 0x0c7d, 0x0c85, + 0x0c85, 0x0c8b, 0x0c94, 0x0c9b, 0x0ca3, 0x0ca3, 0x0ca9, 0x0cb6, + // Entry 1C0 - 1FF + 0x0cbb, 0x0ccf, 0x0cd8, 0x0ce0, 0x0ce7, 0x0ced, 0x0cf3, 0x0d06, + 0x0d13, 0x0d1a, 0x0d22, 0x0d2e, 0x0d36, 0x0d36, 0x0d48, 0x0d48, + 0x0d48, 0x0d55, 0x0d55, 0x0d60, 0x0d60, 0x0d60, 0x0d69, 0x0d74, + 0x0d85, 0x0d8a, 0x0d8a, 0x0d94, 0x0d9d, 0x0da9, 0x0da9, 0x0da9, + 0x0daf, 0x0db6, 0x0db6, 0x0db6, 0x0db6, 0x0dc0, 0x0dc4, 0x0dcb, + 0x0dd1, 0x0de4, 0x0ded, 0x0df2, 0x0dfa, 0x0dfa, 0x0e01, 0x0e07, + 0x0e11, 0x0e17, 0x0e17, 0x0e27, 0x0e27, 0x0e2b, 0x0e2b, 0x0e32, + 0x0e44, 0x0e4e, 0x0e4e, 0x0e57, 0x0e5b, 0x0e5b, 0x0e63, 0x0e63, + // Entry 200 - 23F + 0x0e63, 0x0e71, 0x0e7e, 0x0e8b, 0x0e99, 0x0ea1, 0x0ea9, 0x0eb5, + 0x0eba, 0x0ebe, 0x0ebe, 0x0ec6, 0x0ecc, 0x0ed5, 0x0ee1, 0x0ef5, + 0x0eff, 0x0eff, 0x0eff, 0x0f05, 0x0f0a, 0x0f11, 0x0f17, 0x0f1d, + 0x0f21, 0x0f2c, 0x0f2c, 0x0f36, 0x0f3d, 0x0f3d, 0x0f45, 0x0f57, + 0x0f5f, 0x0f5f, 0x0f67, 0x0f67, 0x0f71, 0x0f71, 0x0f7a, 0x0f85, + 0x0f8c, 0x0f96, 0x0f9f, 0x0fa7, 0x0fb4, 0x0fbe, 0x0fc2, 0x0fc6, + 0x0fc6, 0x0fc6, 0x0fc6, 0x0fc6, 0x0fce, 0x0fce, 0x0fd4, 0x0fda, + 0x0fe1, 0x0fe7, 0x0fed, 0x0ff5, 0x0ff5, 0x0fff, 0x0fff, 0x1004, + // Entry 240 - 27F + 0x1008, 0x1010, 0x1017, 0x101c, 0x101c, 0x1026, 0x102e, 0x1038, + 0x1038, 0x103e, 0x105d, 0x1063, 0x1078, 0x1083, 0x109f, 0x109f, + 0x10b2, 0x10c6, 0x10d6, 0x10e5, 0x10f0, 0x1100, 0x111b, 0x112c, + 0x113f, 0x113f, 0x1150, 0x1161, 0x116d, 0x1175, 0x118d, 0x11a2, + 0x11ac, 0x11bd, 0x11cd, 0x11e5, 0x11fd, +} // Size: 1250 bytes + +const itLangStr string = "" + // Size: 5026 bytes + "afarabcasoavestanafrikaansakanamaricoaragonesearaboassameseavaroaymaraaz" + + "erbaigianobaschirobielorussobulgarobislamabambarabengalesetibetanobreton" + + "ebosniacocatalanocecenochamorrocorsocreececoslavo della Chiesaciuvasciog" + + "allesedanesetedescodivehidzongkhaewegrecoingleseesperantospagnoloestoneb" + + "ascopersianofulahfinlandesefigianofaroesefrancesefrisone occidentaleirla" + + "ndesegaelico scozzesegalizianoguaranígujaratimannesehausaebraicohindihir" + + "i motucroatohaitianoungheresearmenohererointerlinguaindonesianointerling" + + "ueigbosichuan yiinupiakidoislandeseitalianoinuktitutgiapponesegiavaneseg" + + "eorgianokongokikuyukuanyamakazakogroenlandesekhmerkannadacoreanokanurika" + + "shmiricurdokomicornicochirghisolatinolussemburghesegandalimburgheselinga" + + "lalaolituanoluba-katangalettonemalgasciomarshallesemaorimacedonemalayala" + + "mmongolomarathimalesemaltesebirmanonaurundebele del nordnepalesendongaol" + + "andesenorvegese nynorsknorvegese bokmålndebele del sudnavajonyanjaoccita" + + "noojibwaoromooriyaosseticopunjabipalipolaccopashtoportoghesequechuaroman" + + "ciorundirumenorussokinyarwandasanscritosardosindhisami del nordsangosing" + + "aleseslovaccoslovenosamoanoshonasomaloalbaneseserboswatisotho del sudsun" + + "danesesvedeseswahilitamiltelugutagicothaitigrinoturcomannotswanatonganot" + + "urcotsongatatarotaitianouiguroucrainourduusbecovendavietnamitavolapükval" + + "lonewolofxhosayiddishyorubazhuangcinesezuluaccineseacioliadangmeadyghear" + + "abo tunisinoafrihiliaghemainuaccadoalabamaaleutoalbanese ghegoaltai meri" + + "dionaleinglese anticoangikaaramaicomapuchearaonaarapahoarabo algerinoaru" + + "acoarabo marocchinoarabo egizianoasulingua dei segni americanaasturianok" + + "otavaawadhibelucibalinesebavaresebasabamunbatak tobaghomalabegiawembabet" + + "awibenabafutbadagabeluci occidentalebhojpuribicolbinibanjarkomsiksikabis" + + "hnupriyabakhtiaribrajbrahuibodoakooseburiatbugibulublinmedumbacaddocarib" + + "icocayugaatsamcebuanochigachibchaciagataicochuukesemarigergo chinookchoc" + + "tawchipewyancherokeecheyennecurdo soranicoptocapiznonturco crimeocreolo " + + "delle Seychelleskashubiandakotadargwataitadelawareslavedogribdincazarmad" + + "ogribasso sorabodusun centraledualaolandese mediojola-fonydiuladazagaemb" + + "uefikemilianoegiziano anticoekajukaelamiticoinglese medioyupik centralee" + + "wondoestremegnofangfilippinofinlandese del Tornedalenfonfrancese cajunfr" + + "ancese mediofrancese anticofrancoprovenzalefrisone settentrionalefrisone" + + " orientalefriulanogagagauzogangayogbayadari zoroastrianogeezgilbertesegi" + + "lakitedesco medio altotedesco antico altokonkani goanogondigorontalogoti" + + "cogrebogreco anticotedesco svizzerowayuugusiigwichʼinhaidahakkahawaianoh" + + "indi figianoilongohittitehmongalto soraboxianghupaibanibibioilocanoingus" + + "hingricocreolo giamaicanolojbanngamambomachamegiudeo persianogiudeo arab" + + "ojutlandicokara-kalpakcabilokachinkaikambakawicabardinokanembutyapmakond" + + "ecapoverdianokorokaingangkhasikhotanesekoyra chiinikhowarkirmanjkikakoka" + + "lenjinkimbundupermiacokonkanikosraeankpellekarachay-Balkarcarelianokuruk" + + "hshambalabafiacoloniesekumykkutenaigiudeo-spagnololangilahndalambalesgoL" + + "ingua Franca Novaligurelivonelakotalombardololo bantuloziluri settentrio" + + "naleletgalloluba-lulualuisenolundaluolushailuyiacinese classicolazmadure" + + "semafamagahimaithilimakasarmandingomasaimabamokshamandarmendemerucreolo " + + "maurizianoirlandese mediomakhuwa-meettometa’micmacmenangkabaumanchumanip" + + "urimohawkmossimari occidentalemundangmultilinguacreekmirandesemarwarimen" + + "tawaimyeneerzyamazandaranimin nannapoletanonamabasso tedesconewariniasni" + + "ueaokwasiongiemboonnogainorse anticonovialn’kosotho del nordnuernewari c" + + "lassiconyamwezinyankolenyoronzimaosageturco ottomanopangasinanpahlavipam" + + "pangapapiamentopalaupiccardopidgin nigerianotedesco della Pennsylvaniape" + + "rsiano anticotedesco palatinofeniciopiemonteseponticoponapeprussianoprov" + + "enzale anticok’iche’quechua dell’altopiano del Chimborazorajasthanirapan" + + "uirarotongaromagnolotarifitromboromanirotumanorutenorovianaarumenorwasan" + + "daweyakutaramaico samaritanosamburusasaksantalisaurashtrangambaysangusic" + + "ilianoscozzesesassaresecurdo meridionalesenecasenaseriselkupkoyraboro se" + + "nniirlandese anticosamogiticotashelhitshanarabo ciadianosidamotedesco sl" + + "esianoselayarsami del sudsami di Lulesami di Inarisami skoltsoninkesogdi" + + "anosranan tongoserersahosaterfriesischsukumasususumerocomorianosiriaco c" + + "lassicosiriacoslesianotulutemnetesoterenotetumtigretivtokelautsakhurklin" + + "gontlingittalisciotamasheknyasa del Tongatok pisinturoyotarokozaconicots" + + "imshiantat islamicotumbukatuvalutasawaqtuviniantamazightudmurtugariticom" + + "bundurootvaivenetovepsofiammingo occidentalevotovõrovunjowalserwalamowar" + + "aywashowarlpiriwukalmykmengreliosogayao (bantu)yapeseyangbenyembanheenga" + + "tucantonesezapotecblissymbolzelandesezenagatamazight del Marocco standar" + + "dzuninessun contenuto linguisticozazaarabo moderno standardtedesco austr" + + "iacoalto tedesco svizzeroinglese australianoinglese canadeseinglese brit" + + "annicoinglese americanospagnolo latinoamericanospagnolo europeospagnolo " + + "messicanofrancese canadesefrancese svizzerobasso tedesco olandesefiammin" + + "goportoghese brasilianoportoghese europeomoldavoserbo-croatoswahili del " + + "Congocinese semplificatocinese tradizionale" + +var itLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000a, 0x0011, 0x001a, 0x001e, 0x0025, 0x002e, + 0x0033, 0x003b, 0x0040, 0x0046, 0x0052, 0x005a, 0x0064, 0x006b, + 0x0072, 0x0079, 0x0082, 0x008a, 0x0091, 0x0099, 0x00a1, 0x00a7, + 0x00af, 0x00b4, 0x00b8, 0x00bc, 0x00ce, 0x00d7, 0x00de, 0x00e4, + 0x00eb, 0x00f1, 0x00f9, 0x00fc, 0x0101, 0x0108, 0x0111, 0x0119, + 0x011f, 0x0124, 0x012c, 0x0131, 0x013b, 0x0142, 0x0149, 0x0151, + 0x0164, 0x016d, 0x017d, 0x0186, 0x018e, 0x0196, 0x019d, 0x01a2, + 0x01a9, 0x01ae, 0x01b7, 0x01bd, 0x01c5, 0x01ce, 0x01d4, 0x01da, + // Entry 40 - 7F + 0x01e5, 0x01f0, 0x01fb, 0x01ff, 0x0209, 0x0210, 0x0213, 0x021c, + 0x0224, 0x022d, 0x0237, 0x0240, 0x0249, 0x024e, 0x0254, 0x025c, + 0x0262, 0x026e, 0x0273, 0x027a, 0x0281, 0x0287, 0x028f, 0x0294, + 0x0298, 0x029f, 0x02a8, 0x02ae, 0x02bc, 0x02c1, 0x02cc, 0x02d3, + 0x02d6, 0x02dd, 0x02e9, 0x02f0, 0x02f9, 0x0304, 0x0309, 0x0311, + 0x031a, 0x0321, 0x0328, 0x032e, 0x0335, 0x033c, 0x0341, 0x0351, + 0x0359, 0x035f, 0x0367, 0x0378, 0x0389, 0x0398, 0x039e, 0x03a4, + 0x03ac, 0x03b2, 0x03b7, 0x03bc, 0x03c4, 0x03cb, 0x03cf, 0x03d6, + // Entry 80 - BF + 0x03dc, 0x03e6, 0x03ed, 0x03f5, 0x03fa, 0x0400, 0x0405, 0x0410, + 0x0419, 0x041e, 0x0424, 0x0431, 0x0436, 0x043f, 0x0447, 0x044e, + 0x0455, 0x045a, 0x0460, 0x0468, 0x046d, 0x0472, 0x047f, 0x0488, + 0x048f, 0x0496, 0x049b, 0x04a1, 0x04a7, 0x04ab, 0x04b2, 0x04bc, + 0x04c2, 0x04c9, 0x04ce, 0x04d4, 0x04da, 0x04e2, 0x04e8, 0x04ef, + 0x04f3, 0x04f9, 0x04fe, 0x0508, 0x0510, 0x0517, 0x051c, 0x0521, + 0x0528, 0x052e, 0x0534, 0x053a, 0x053e, 0x0546, 0x054c, 0x0553, + 0x0559, 0x0567, 0x056f, 0x0574, 0x0578, 0x057e, 0x0585, 0x058b, + // Entry C0 - FF + 0x0599, 0x05aa, 0x05b8, 0x05be, 0x05c6, 0x05cd, 0x05d3, 0x05da, + 0x05e8, 0x05e8, 0x05ee, 0x05fe, 0x060c, 0x060f, 0x0629, 0x0632, + 0x0638, 0x063e, 0x0644, 0x064c, 0x0654, 0x0658, 0x065d, 0x0667, + 0x066e, 0x0673, 0x0678, 0x067e, 0x0682, 0x0687, 0x068d, 0x069f, + 0x06a7, 0x06ac, 0x06b0, 0x06b6, 0x06b9, 0x06c0, 0x06cb, 0x06d4, + 0x06d8, 0x06de, 0x06e2, 0x06e8, 0x06ee, 0x06f2, 0x06f6, 0x06fa, + 0x0701, 0x0706, 0x070e, 0x0714, 0x0719, 0x0720, 0x0725, 0x072c, + 0x0736, 0x073e, 0x0742, 0x074f, 0x0756, 0x075f, 0x0767, 0x076f, + // Entry 100 - 13F + 0x077b, 0x0780, 0x0788, 0x0794, 0x07ab, 0x07b4, 0x07ba, 0x07c0, + 0x07c5, 0x07cd, 0x07d2, 0x07d8, 0x07dd, 0x07e2, 0x07e7, 0x07f3, + 0x0801, 0x0806, 0x0814, 0x081d, 0x0822, 0x0828, 0x082c, 0x0830, + 0x0838, 0x0847, 0x084e, 0x0857, 0x0864, 0x0872, 0x0878, 0x0882, + 0x0886, 0x088f, 0x08a8, 0x08ab, 0x08b9, 0x08c7, 0x08d6, 0x08e6, + 0x08fc, 0x090d, 0x0915, 0x0917, 0x091e, 0x0921, 0x0925, 0x092a, + 0x093b, 0x093f, 0x0949, 0x094f, 0x0961, 0x0974, 0x0981, 0x0986, + 0x098f, 0x0995, 0x099a, 0x09a6, 0x09b6, 0x09bb, 0x09bb, 0x09c0, + // Entry 140 - 17F + 0x09c9, 0x09ce, 0x09d3, 0x09db, 0x09e8, 0x09ee, 0x09f5, 0x09fa, + 0x0a05, 0x0a0a, 0x0a0e, 0x0a12, 0x0a18, 0x0a1f, 0x0a25, 0x0a2c, + 0x0a3d, 0x0a43, 0x0a4b, 0x0a52, 0x0a61, 0x0a6d, 0x0a77, 0x0a82, + 0x0a88, 0x0a8e, 0x0a91, 0x0a96, 0x0a9a, 0x0aa3, 0x0aaa, 0x0aae, + 0x0ab5, 0x0ac1, 0x0ac1, 0x0ac5, 0x0acd, 0x0ad2, 0x0adb, 0x0ae7, + 0x0aed, 0x0af6, 0x0afa, 0x0b02, 0x0b0a, 0x0b12, 0x0b19, 0x0b21, + 0x0b27, 0x0b36, 0x0b36, 0x0b36, 0x0b3f, 0x0b45, 0x0b4d, 0x0b52, + 0x0b5b, 0x0b60, 0x0b67, 0x0b76, 0x0b7b, 0x0b81, 0x0b86, 0x0b8b, + // Entry 180 - 1BF + 0x0b9d, 0x0ba3, 0x0ba9, 0x0baf, 0x0bb7, 0x0bc1, 0x0bc5, 0x0bd8, + 0x0be0, 0x0bea, 0x0bf1, 0x0bf6, 0x0bf9, 0x0bff, 0x0c04, 0x0c13, + 0x0c16, 0x0c1e, 0x0c22, 0x0c28, 0x0c30, 0x0c37, 0x0c3f, 0x0c44, + 0x0c48, 0x0c4e, 0x0c54, 0x0c59, 0x0c5d, 0x0c6e, 0x0c7d, 0x0c8b, + 0x0c92, 0x0c98, 0x0ca3, 0x0ca9, 0x0cb1, 0x0cb7, 0x0cbc, 0x0ccc, + 0x0cd3, 0x0cde, 0x0ce3, 0x0cec, 0x0cf3, 0x0cfb, 0x0d00, 0x0d05, + 0x0d10, 0x0d17, 0x0d21, 0x0d25, 0x0d32, 0x0d38, 0x0d3c, 0x0d40, + 0x0d42, 0x0d48, 0x0d51, 0x0d56, 0x0d62, 0x0d68, 0x0d6e, 0x0d7c, + // Entry 1C0 - 1FF + 0x0d80, 0x0d8f, 0x0d97, 0x0d9f, 0x0da4, 0x0da9, 0x0dae, 0x0dbc, + 0x0dc6, 0x0dcd, 0x0dd5, 0x0ddf, 0x0de4, 0x0dec, 0x0dfc, 0x0e16, + 0x0e16, 0x0e25, 0x0e35, 0x0e3c, 0x0e46, 0x0e4d, 0x0e53, 0x0e5c, + 0x0e6d, 0x0e78, 0x0e9f, 0x0ea9, 0x0eb0, 0x0eb9, 0x0ec2, 0x0ec9, + 0x0ece, 0x0ed4, 0x0edc, 0x0ee2, 0x0ee9, 0x0ef0, 0x0ef3, 0x0efa, + 0x0eff, 0x0f12, 0x0f19, 0x0f1e, 0x0f25, 0x0f2f, 0x0f36, 0x0f3b, + 0x0f44, 0x0f4c, 0x0f55, 0x0f66, 0x0f6c, 0x0f70, 0x0f74, 0x0f7a, + 0x0f89, 0x0f99, 0x0fa3, 0x0fac, 0x0fb0, 0x0fbe, 0x0fc4, 0x0fd4, + // Entry 200 - 23F + 0x0fdb, 0x0fe7, 0x0ff3, 0x1000, 0x100a, 0x1011, 0x1019, 0x1025, + 0x102a, 0x102e, 0x103c, 0x1042, 0x1046, 0x104c, 0x1055, 0x1065, + 0x106c, 0x1074, 0x1078, 0x107d, 0x1081, 0x1087, 0x108c, 0x1091, + 0x1094, 0x109b, 0x10a2, 0x10a9, 0x10b0, 0x10b8, 0x10c0, 0x10cf, + 0x10d8, 0x10de, 0x10e4, 0x10ec, 0x10f5, 0x1101, 0x1108, 0x110e, + 0x1115, 0x111d, 0x1126, 0x112c, 0x1135, 0x113b, 0x113f, 0x1142, + 0x1148, 0x114d, 0x1162, 0x1162, 0x1166, 0x116b, 0x1170, 0x1176, + 0x117c, 0x1181, 0x1186, 0x118e, 0x1190, 0x1196, 0x119f, 0x11a3, + // Entry 240 - 27F + 0x11ae, 0x11b4, 0x11bb, 0x11c0, 0x11c9, 0x11d2, 0x11d9, 0x11e3, + 0x11ec, 0x11f2, 0x1210, 0x1214, 0x1230, 0x1234, 0x124a, 0x124a, + 0x125b, 0x1270, 0x1283, 0x1293, 0x12a5, 0x12b6, 0x12ce, 0x12de, + 0x12f0, 0x12f0, 0x1301, 0x1312, 0x1328, 0x1331, 0x1346, 0x1358, + 0x135f, 0x136b, 0x137c, 0x138f, 0x13a2, +} // Size: 1250 bytes + +const jaLangStr string = "" + // Size: 10070 bytes + "アファル語アブハズ語アヴェスタ語アフリカーンス語アカン語アムハラ語アラゴン語アラビア語アッサム語アヴァル語アイマラ語アゼルバイジャン語バシキール" + + "語ベラルーシ語ブルガリア語ビスラマ語バンバラ語ベンガル語チベット語ブルトン語ボスニア語カタロニア語チェチェン語チャモロ語コルシカ語クリー語チ" + + "ェコ語教会スラブ語チュヴァシ語ウェールズ語デンマーク語ドイツ語ディベヒ語ゾンカ語エウェ語ギリシャ語英語エスペラント語スペイン語エストニア語バ" + + "スク語ペルシア語フラ語フィンランド語フィジー語フェロー語フランス語西フリジア語アイルランド語スコットランド・ゲール語ガリシア語グアラニー語グ" + + "ジャラート語マン島語ハウサ語ヘブライ語ヒンディー語ヒリモツ語クロアチア語ハイチ語ハンガリー語アルメニア語ヘレロ語インターリングアインドネシア" + + "語インターリングイボ語四川イ語イヌピアック語イド語アイスランド語イタリア語イヌクウティトット語日本語ジャワ語ジョージア語コンゴ語キクユ語クワ" + + "ニャマ語カザフ語グリーンランド語クメール語カンナダ語韓国語カヌリ語カシミール語クルド語コミ語コーンウォール語キルギス語ラテン語ルクセンブルク" + + "語ガンダ語リンブルフ語リンガラ語ラオ語リトアニア語ルバ・カタンガ語ラトビア語マダガスカル語マーシャル語マオリ語マケドニア語マラヤーラム語モン" + + "ゴル語マラーティー語マレー語マルタ語ミャンマー語ナウル語北ンデベレ語ネパール語ンドンガ語オランダ語ノルウェー語(ニーノシュク)ノルウェー語(" + + "ブークモール)南ンデベレ語ナバホ語ニャンジャ語オック語オジブウェー語オロモ語オリヤー語オセット語パンジャブ語パーリ語ポーランド語パシュトゥー" + + "語ポルトガル語ケチュア語ロマンシュ語ルンディ語ルーマニア語ロシア語キニアルワンダ語サンスクリット語サルデーニャ語シンド語北サーミ語サンゴ語シ" + + "ンハラ語スロバキア語スロベニア語サモア語ショナ語ソマリ語アルバニア語セルビア語スワジ語南部ソト語スンダ語スウェーデン語スワヒリ語タミル語テル" + + "グ語タジク語タイ語ティグリニア語トルクメン語ツワナ語トンガ語トルコ語ツォンガ語タタール語タヒチ語ウイグル語ウクライナ語ウルドゥー語ウズベク語" + + "ベンダ語ベトナム語ヴォラピュク語ワロン語ウォロフ語コサ語イディッシュ語ヨルバ語チワン語中国語ズールー語アチェ語アチョリ語アダングメ語アディゲ" + + "語チュニジア・アラビア語アフリヒリ語アゲム語アイヌ語アッカド語アラバマ語アレウト語ゲグ・アルバニア語南アルタイ語古英語アンギカ語アラム語マプ" + + "チェ語アラオナ語アラパホー語アルジェリア・アラビア語アラワク語モロッコ・アラビア語エジプト・アラビア語アス語アメリカ手話アストゥリアス語コタ" + + "ヴァアワディー語バルーチー語バリ語バイエルン・オーストリア語バサ語バムン語トバ・バタク語ゴーマラ語ベジャ語ベンバ語ベタウィ語ベナ語バフット語" + + "バダガ語西バローチー語ボージュプリー語ビコル語ビニ語バンジャル語コム語シクシカ語ビシュヌプリヤ・マニプリ語バフティヤーリー語ブラジ語ブラフイ" + + "語ボド語アコース語ブリヤート語ブギ語ブル語ビリン語メドゥンバ語カドー語カリブ語カユーガ語チャワイ語セブアノ語チガ語チブチャ語チャガタイ語チュ" + + "ーク語マリ語チヌーク混成語チョクトー語チペワイアン語チェロキー語シャイアン語クルド語(ソラニー)コプト語カピス語クリミア・タタール語セーシェ" + + "ル・クレオール語カシューブ語ダコタ語ダルガン語タイタ語デラウェア語スレイビー語ドグリブ語ディンカ語ザルマ語ドーグリー語低地ソルブ語中央ドゥス" + + "ン語ドゥアラ語中世オランダ語ジョラ=フォニィ語ジュラ語ダザガ語エンブ語エフィク語エミリア語古代エジプト語エカジュク語エラム語中英語中央アラス" + + "カ・ユピック語エウォンド語エストレマドゥーラ語ファング語フィリピノ語トルネダール・フィンランド語フォン語ケイジャン・フランス語中期フランス語" + + "古フランス語アルピタン語北フリジア語東フリジア語フリウリ語ガ語ガガウズ語贛語ガヨ語バヤ語ダリー語(ゾロアスター教)ゲエズ語キリバス語ギラキ語" + + "中高ドイツ語古高ドイツ語ゴア・コンカニ語ゴーンディー語ゴロンタロ語ゴート語グレボ語古代ギリシャ語スイスドイツ語ワユ語フラフラ語グシイ語グウィ" + + "ッチン語ハイダ語客家語ハワイ語フィジー・ヒンディー語ヒリガイノン語ヒッタイト語フモン語高地ソルブ語湘語フパ語イバン語イビビオ語イロカノ語イン" + + "グーシ語イングリア語ジャマイカ・クレオール語ロジバン語ンゴンバ語マチャメ語ユダヤ・ペルシア語ユダヤ・アラビア語ユトランド語カラカルパク語カビ" + + "ル語カチン語カジェ語カンバ語カウィ語カバルド語カネンブ語カタブ語マコンデ語カーボベルデ・クレオール語ニャン語コロ語カインガング語カシ語コータ" + + "ン語コイラ・チーニ語コワール語キルマンジュキ語カコ語カレンジン語キンブンド語コミ・ペルミャク語コンカニ語コスラエ語クペレ語カラチャイ・バルカ" + + "ル語クリオ語キナライア語カレリア語クルク語サンバー語バフィア語ケルン語クムク語クテナイ語ラディノ語ランギ語ラフンダー語ランバ語レズギ語リング" + + "ア・フランカ・ノバリグリア語リヴォニア語ラコタ語ロンバルド語モンゴ語ロジ語北ロル語ラトガリア語ルバ・ルルア語ルイセーニョ語ルンダ語ルオ語ルシ" + + "ャイ語ルヒヤ語漢文ラズ語マドゥラ語マファ語マガヒー語マイティリー語マカッサル語マンディンゴ語マサイ語マバ語モクシャ語マンダル語メンデ語メル語" + + "モーリシャス・クレオール語中期アイルランド語マクア・ミート語メタ語ミクマク語ミナンカバウ語満州語マニプリ語モーホーク語モシ語山地マリ語ムンダ" + + "ン語複数言語クリーク語ミランダ語マールワーリー語メンタワイ語ミエネ語エルジャ語マーザンダラーン語閩南語ナポリ語ナマ語低地ドイツ語ネワール語ニ" + + "アス語ニウーエイ語アオ・ナガ語クワシオ語ンジエムブーン語ノガイ語古ノルド語ノヴィアルンコ語北部ソト語ヌエル語古典ネワール語ニャムウェジ語ニャ" + + "ンコレ語ニョロ語ンゼマ語オセージ語オスマントルコ語パンガシナン語パフラヴィー語パンパンガ語パピアメント語パラオ語ピカルディ語ナイジェリア・ピ" + + "ジン語ペンシルベニア・ドイツ語メノナイト低地ドイツ語古代ペルシア語プファルツ語フェニキア語ピエモンテ語ポントス・ギリシャ語ポンペイ語プロシア" + + "語古期プロバンス語キチェ語チンボラソ高地ケチュア語ラージャスターン語ラパヌイ語ラロトンガ語ロマーニャ語リーフ語ロンボ語ロマーニー語ロツマ語ル" + + "シン語ロヴィアナ語アルーマニア語ルワ語サンダウェ語サハ語サマリア・アラム語サンブル語ササク語サンターリー語サウラーシュトラ語ンガムバイ語サン" + + "グ語シチリア語スコットランド語サッサリ・サルデーニャ語南部クルド語セネカ語セナ語セリ語セリクプ語コイラボロ・センニ語古アイルランド語サモギテ" + + "ィア語タシルハイト語シャン語チャド・アラビア語シダモ語低シレジア語スラヤール語南サーミ語ルレ・サーミ語イナリ・サーミ語スコルト・サーミ語ソニ" + + "ンケ語ソグド語スリナム語セレル語サホ語ザーターフリジア語スクマ語スス語シュメール語コモロ語古典シリア語シリア語シレジア語トゥル語テムネ語テソ" + + "語テレーノ語テトゥン語ティグレ語ティブ語トケラウ語ツァフル語クリンゴン語トリンギット語タリシュ語タマシェク語トンガ語(ニアサ)トク・ピシン語" + + "トゥロヨ語タロコ語ツァコン語チムシュ語ムスリム・タタール語トゥンブカ語ツバル語タサワク語トゥヴァ語中央アトラス・タマジクト語ウドムルト語ウガ" + + "リト語ムブンドゥ語ルートヴァイ語ヴェネト語ヴェプス語西フラマン語マインフランク語ヴォート語ヴォロ語ヴンジョ語ヴァリス語ウォライタ語ワライ語ワ" + + "ショ語ワルピリ語呉語カルムイク語メグレル語ソガ語ヤオ語ヤップ語ヤンベン語イエンバ語ニェエンガトゥ語広東語サポテカ語ブリスシンボルゼーラント語" + + "ゼナガ語標準モロッコ タマジクト語ズニ語言語的内容なしザザ語現代標準アラビア語標準ドイツ語 (スイス)オーストラリア英語カナダ英語イギリス英" + + "語アメリカ英語スペイン語 (イベリア半島)フレミッシュ語ポルトガル語 (イベリア半島)モルダビア語セルボ・クロアチア語コンゴ・スワヒリ語簡体" + + "中国語繁体中国語" + +var jaLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x001e, 0x0030, 0x0048, 0x0054, 0x0063, 0x0072, + 0x0081, 0x0090, 0x009f, 0x00ae, 0x00c9, 0x00db, 0x00ed, 0x00ff, + 0x010e, 0x011d, 0x012c, 0x013b, 0x014a, 0x0159, 0x016b, 0x017d, + 0x018c, 0x019b, 0x01a7, 0x01b3, 0x01c5, 0x01d7, 0x01e9, 0x01fb, + 0x0207, 0x0216, 0x0222, 0x022e, 0x023d, 0x0243, 0x0258, 0x0267, + 0x0279, 0x0285, 0x0294, 0x029d, 0x02b2, 0x02c1, 0x02d0, 0x02df, + 0x02f1, 0x0306, 0x032a, 0x0339, 0x034b, 0x0360, 0x036c, 0x0378, + 0x0387, 0x0399, 0x03a8, 0x03ba, 0x03c6, 0x03d8, 0x03ea, 0x03f6, + // Entry 40 - 7F + 0x040e, 0x0423, 0x0438, 0x0441, 0x044d, 0x0462, 0x046b, 0x0480, + 0x048f, 0x04ad, 0x04b6, 0x04c2, 0x04d4, 0x04e0, 0x04ec, 0x04fe, + 0x050a, 0x0522, 0x0531, 0x0540, 0x0549, 0x0555, 0x0567, 0x0573, + 0x057c, 0x0594, 0x05a3, 0x05af, 0x05c7, 0x05d3, 0x05e5, 0x05f4, + 0x05fd, 0x060f, 0x0627, 0x0636, 0x064b, 0x065d, 0x0669, 0x067b, + 0x0690, 0x069f, 0x06b4, 0x06c0, 0x06cc, 0x06de, 0x06ea, 0x06fc, + 0x070b, 0x071a, 0x0729, 0x074f, 0x0775, 0x0787, 0x0793, 0x07a5, + 0x07b1, 0x07c6, 0x07d2, 0x07e1, 0x07f0, 0x0802, 0x080e, 0x0820, + // Entry 80 - BF + 0x0835, 0x0847, 0x0856, 0x0868, 0x0877, 0x0889, 0x0895, 0x08ad, + 0x08c5, 0x08da, 0x08e6, 0x08f5, 0x0901, 0x0910, 0x0922, 0x0934, + 0x0940, 0x094c, 0x0958, 0x096a, 0x0979, 0x0985, 0x0994, 0x09a0, + 0x09b5, 0x09c4, 0x09d0, 0x09dc, 0x09e8, 0x09f1, 0x0a06, 0x0a18, + 0x0a24, 0x0a30, 0x0a3c, 0x0a4b, 0x0a5a, 0x0a66, 0x0a75, 0x0a87, + 0x0a99, 0x0aa8, 0x0ab4, 0x0ac3, 0x0ad8, 0x0ae4, 0x0af3, 0x0afc, + 0x0b11, 0x0b1d, 0x0b29, 0x0b32, 0x0b41, 0x0b4d, 0x0b5c, 0x0b6e, + 0x0b7d, 0x0b9e, 0x0bb0, 0x0bbc, 0x0bc8, 0x0bd7, 0x0be6, 0x0bf5, + // Entry C0 - FF + 0x0c10, 0x0c22, 0x0c2b, 0x0c3a, 0x0c46, 0x0c55, 0x0c64, 0x0c76, + 0x0c9a, 0x0c9a, 0x0ca9, 0x0cc7, 0x0ce5, 0x0cee, 0x0d00, 0x0d18, + 0x0d24, 0x0d36, 0x0d48, 0x0d51, 0x0d78, 0x0d81, 0x0d8d, 0x0da2, + 0x0db1, 0x0dbd, 0x0dc9, 0x0dd8, 0x0de1, 0x0df0, 0x0dfc, 0x0e11, + 0x0e29, 0x0e35, 0x0e3e, 0x0e50, 0x0e59, 0x0e68, 0x0e8f, 0x0eaa, + 0x0eb6, 0x0ec5, 0x0ece, 0x0edd, 0x0eef, 0x0ef8, 0x0f01, 0x0f0d, + 0x0f1f, 0x0f2b, 0x0f37, 0x0f46, 0x0f55, 0x0f64, 0x0f6d, 0x0f7c, + 0x0f8e, 0x0f9d, 0x0fa6, 0x0fbb, 0x0fcd, 0x0fe2, 0x0ff4, 0x1006, + // Entry 100 - 13F + 0x1020, 0x102c, 0x1038, 0x1056, 0x107a, 0x108c, 0x1098, 0x10a7, + 0x10b3, 0x10c5, 0x10d7, 0x10e6, 0x10f5, 0x1101, 0x1113, 0x1125, + 0x113a, 0x1149, 0x115e, 0x1179, 0x1185, 0x1191, 0x119d, 0x11ac, + 0x11bb, 0x11d0, 0x11e2, 0x11ee, 0x11f7, 0x121b, 0x122d, 0x124b, + 0x125a, 0x126c, 0x1296, 0x12a2, 0x12c3, 0x12d8, 0x12ea, 0x12fc, + 0x130e, 0x1320, 0x132f, 0x1335, 0x1344, 0x134a, 0x1353, 0x135c, + 0x137f, 0x138b, 0x139a, 0x13a6, 0x13b8, 0x13ca, 0x13e2, 0x13f7, + 0x1409, 0x1415, 0x1421, 0x1436, 0x144b, 0x1454, 0x1463, 0x146f, + // Entry 140 - 17F + 0x1484, 0x1490, 0x1499, 0x14a5, 0x14c6, 0x14db, 0x14ed, 0x14f9, + 0x150b, 0x1511, 0x151a, 0x1526, 0x1535, 0x1544, 0x1556, 0x1568, + 0x158c, 0x159b, 0x15aa, 0x15b9, 0x15d4, 0x15ef, 0x1601, 0x1616, + 0x1622, 0x162e, 0x163a, 0x1646, 0x1652, 0x1661, 0x1670, 0x167c, + 0x168b, 0x16b2, 0x16be, 0x16c7, 0x16dc, 0x16e5, 0x16f4, 0x170c, + 0x171b, 0x1733, 0x173c, 0x174e, 0x1760, 0x177b, 0x178a, 0x1799, + 0x17a5, 0x17c6, 0x17d2, 0x17e4, 0x17f3, 0x17ff, 0x180e, 0x181d, + 0x1829, 0x1835, 0x1844, 0x1853, 0x185f, 0x1871, 0x187d, 0x1889, + // Entry 180 - 1BF + 0x18ad, 0x18bc, 0x18ce, 0x18da, 0x18ec, 0x18f8, 0x1901, 0x190d, + 0x191f, 0x1934, 0x1949, 0x1955, 0x195e, 0x196d, 0x1979, 0x197f, + 0x1988, 0x1997, 0x19a3, 0x19b2, 0x19c7, 0x19d9, 0x19ee, 0x19fa, + 0x1a03, 0x1a12, 0x1a21, 0x1a2d, 0x1a36, 0x1a5d, 0x1a78, 0x1a90, + 0x1a99, 0x1aa8, 0x1abd, 0x1ac6, 0x1ad5, 0x1ae7, 0x1af0, 0x1aff, + 0x1b0e, 0x1b1a, 0x1b29, 0x1b38, 0x1b50, 0x1b62, 0x1b6e, 0x1b7d, + 0x1b98, 0x1ba1, 0x1bad, 0x1bb6, 0x1bc8, 0x1bd7, 0x1be3, 0x1bf5, + 0x1c07, 0x1c16, 0x1c2e, 0x1c3a, 0x1c49, 0x1c58, 0x1c61, 0x1c70, + // Entry 1C0 - 1FF + 0x1c7c, 0x1c91, 0x1ca6, 0x1cb8, 0x1cc4, 0x1cd0, 0x1cdf, 0x1cf7, + 0x1d0c, 0x1d21, 0x1d33, 0x1d48, 0x1d54, 0x1d66, 0x1d87, 0x1dab, + 0x1dcc, 0x1de1, 0x1df3, 0x1e05, 0x1e17, 0x1e35, 0x1e44, 0x1e53, + 0x1e6b, 0x1e77, 0x1e9b, 0x1eb6, 0x1ec5, 0x1ed7, 0x1ee9, 0x1ef5, + 0x1f01, 0x1f13, 0x1f1f, 0x1f2b, 0x1f3d, 0x1f52, 0x1f5b, 0x1f6d, + 0x1f76, 0x1f91, 0x1fa0, 0x1fac, 0x1fc1, 0x1fdc, 0x1fee, 0x1ffa, + 0x2009, 0x2021, 0x2045, 0x2057, 0x2063, 0x206c, 0x2075, 0x2084, + 0x20a2, 0x20ba, 0x20cf, 0x20e4, 0x20f0, 0x210b, 0x2117, 0x2129, + // Entry 200 - 23F + 0x213b, 0x214a, 0x215f, 0x2177, 0x2192, 0x21a1, 0x21ad, 0x21bc, + 0x21c8, 0x21d1, 0x21ec, 0x21f8, 0x2201, 0x2213, 0x221f, 0x2231, + 0x223d, 0x224c, 0x2258, 0x2264, 0x226d, 0x227c, 0x228b, 0x229a, + 0x22a6, 0x22b5, 0x22c4, 0x22d6, 0x22eb, 0x22fa, 0x230c, 0x2323, + 0x2338, 0x2347, 0x2353, 0x2362, 0x2371, 0x238f, 0x23a1, 0x23ad, + 0x23bc, 0x23cb, 0x23f2, 0x2404, 0x2413, 0x2425, 0x242e, 0x243a, + 0x2449, 0x2458, 0x246a, 0x2482, 0x2491, 0x249d, 0x24ac, 0x24bb, + 0x24cd, 0x24d9, 0x24e5, 0x24f4, 0x24fa, 0x250c, 0x251b, 0x2524, + // Entry 240 - 27F + 0x252d, 0x2539, 0x2548, 0x2557, 0x256f, 0x2578, 0x2587, 0x259c, + 0x25ae, 0x25ba, 0x25df, 0x25e8, 0x25fd, 0x2606, 0x2621, 0x2621, + 0x2621, 0x263f, 0x265a, 0x2669, 0x267b, 0x268d, 0x268d, 0x26b1, + 0x26b1, 0x26b1, 0x26b1, 0x26b1, 0x26b1, 0x26c6, 0x26c6, 0x26ed, + 0x26ff, 0x271d, 0x2738, 0x2747, 0x2756, +} // Size: 1250 bytes + +const kaLangStr string = "" + // Size: 12200 bytes + "აფარიაფხაზურიავესტურიაფრიკაანსიაკანიამჰარულიარაგონულიარაბულიასამურიხუნძუ" + + "რიაიმარააზერბაიჯანულიბაშკირულიბელორუსულიბულგარულიბისლამაბამბარაბენგალუ" + + "რიტიბეტურიბრეტონულიბოსნიურიკატალანურიჩეჩნურიჩამოროკორსიკულიკრიჩეხურისა" + + "ეკლესიო სლავურიჩუვაშურიუელსურიდანიურიგერმანულიდივეჰიძონგკხაევებერძნული" + + "ინგლისურიესპერანტოესპანურიესტონურიბასკურისპარსულიფულაფინურიფიჯიფარერულ" + + "იფრანგულიდასავლეთფრიზიულიირლანდიურიშოტლანდიური გელურიგალისიურიგუარანიგ" + + "უჯარათიმენურიჰაუსაებრაულიჰინდიხორვატულიჰაიტიური კრეოლიუნგრულისომხურიჰე" + + "რეროინტერლინგუალურიინდონეზიურიინტერლინგიიგბოსიჩუანის იიდოისლანდიურიიტა" + + "ლიურიინუკტიტუტიიაპონურიიავურიქართულიკონგოკიკუიუკუნამაყაზახურიდასავლეთ " + + "გრენლანდიურიქმერულიკანადაკორეულიკანურიქაშმირულიქურთულიკომიკორნულიყირგი" + + "ზულილათინურილუქსემბურგულიგანდალიმბურგულილინგალალაოსურილიტვურილუბა-კატა" + + "ნგალატვიურიმალაგასიურიმარშალურიმაორიმაკედონურიმალაიალამურიმონღოლურიმარ" + + "ათჰიმალაიურიმალტურიბირმულინაურუჩრდილოეთ ნდებელენეპალურინდონგანიდერლანდ" + + "ურინორვეგიული ნიუნორსკინორვეგიული ბუკმოლისამხრეთ ნდებელურინავახონიანჯა" + + "ოქსიტანურიოჯიბვეორომოორიაოსურიპენჯაბურიპალიპოლონურიპუშტუპორტუგალიურიკე" + + "ჩუარეტორომანულირუნდირუმინულირუსულიკინიარუანდასანსკრიტისარდინიულისინდჰუ" + + "რიჩრდილოეთ საამურისანგოსინჰალურისლოვაკურისლოვენურისამოაშონასომალიურიალ" + + "ბანურისერბულისუატისამხრეთ სოთოს ენასუნდურიშვედურისუაჰილიტამილურიტელუგუ" + + "ტაჯიკურიტაიტიგრინიათურქმენულიტსვანატონგანურითურქულიტსონგათათრულიტაიტურ" + + "იუიღურულიუკრაინულიურდუუზბეკურივენდავიეტნამურივოლაპუკივალონურივოლოფურიქ" + + "ჰოსაიდიშიიორუბაჩინურიზულუაჩეხურიაჩოლიადანგმეადიღეურიაღემიაინუურიაქადურ" + + "იალეუტურისამხრეთ ალთაურიძველი ინგლისურიანგიკაარამეულიმაპუდუნგუნიარაპაჰ" + + "ოარავაკიასუასტურიულიავადიბელუჯიბალინურიბასაბამუნიბეჯაბემბაბენადასავლეთ" + + " ბელუჯიბოჯპურიბინისიკსიკაბრაჯიბოდობურიატულიბუგინურიბილინიკაიუგასებუანოჩი" + + "გაჩიბჩაჩუკოტკურიმარიულიჩინუკის ჟარგონიჩოკტოჩიპევიანიჩეროკიჩეიენისორანი" + + " ქურთულიკოპტურიყირიმულ-თურქულისესელვა-კრეოლური ფრანგულიკაშუბურიდაკოტურიდ" + + "არგუულიტაიტადელავერულისლეივიდოგრიბიდინკაზარმადოგრიქვემოსორბულიდუალასაშ" + + "უალო ჰოლანდიურიდიოლადიულადაზაგაემბუეფიკიძველეგვიპტურიეკაჯუკისაშუალო ინ" + + "გლისურიევონდოფილიპინურიფონისაშუალო ფრანგულიძველი ფრანგულიჩრდილოფრიზიულ" + + "იაღმოსავლეთფრიზიულიფრიულურიგაგაგაუზურიგბაიაგეეზიგილბერტულისაშუალო ზემო" + + "გერმანულიძველი ზემოგერმანულიგონდიგორონტალოგოთურიძველი ბერძნულიშვეიცარი" + + "ული გერმანულიგუსიიგვიჩინიჰავაიურიჰილიგაინონიხეთურიჰმონგიზემოსორბულიჰუპ" + + "აიბანიიბიბიოილოკოინგუშურილოჟბანინგომბაკიმაშამიიუდეო-სპარსულიიუდეო-არაბ" + + "ულიყარაყალფახურიკაბილურიკაჩინიკაჯიკამბაყაბარდოულიტიაპიმაკონდეკაბუვერდი" + + "ანუკოროხასიკოირა-ჩიინიკაკოკალენჯინიკიმბუნდუკომი-პერმიაკულიკონკანიკუსაი" + + "ეკპელეყარაჩაულ-ბალყარულიკარელიურიკურუქიშამბალაბაფიაკიოლშიყუმუხურიკუტენ" + + "აილადინოლანგილანდალამბალეზგიურილაკოტამონგოლოზიჩრდილოეთ ლურილუბა-ლულუალ" + + "უისენიოლუნდალუომიზოლუჰიამადურულიმაფამაგაჰიმაითილიმაკასარიმასაიმაბამოქშ" + + "ამენდემერუმორისიენისაშუალო ირლანდიურიმაქუვა-მეეტომეტა-ენამიკმაკიმინანგ" + + "კაბაუმანჯურიულიმანიპურიმოჰაუკურიმოსიმუნდანგისხვადასხვა ენაკრიკიმირანდუ" + + "ლიმარვარიმიენეერზიამაზანდერანულინეაპოლიტანურინამაქვემოგერმანულინევარინ" + + "იასინიუეკვასიონგიმბუნინოღაურიძველსკანდინავიურინკოჩრდილოეთ სოთონუერიკლა" + + "სიკური ნევარულინიამვეზინიანკოლენიორონზიმაპანგასინანიფალაურიპამპანგაპაპ" + + "იამენტოფალაუანინიგერიული კრეოლურიძველი სპარსულიფინიკიურიპრუსიულიძველი " + + "პროვანსულიკიჩერაჯასთანირაპანუირაროტონგულირომბობოშურიარომანულირუასანდავ" + + "ეიაკუტურისამარიულ-არამეულისამბურუსანტალინგამბაისანგუსიცილიურიშოტლანდიუ" + + "რისამხრეთქურთულისენეკასენასელკუპურიკოირაბორო-სენიძველი ირლანდიურიშილჰა" + + "შანიჩადური არაბულისამხრეთსამურილულე-საამურიინარი-საამურისკოლტ-საამურის" + + "ონინკესრანან ტონგოსაჰოსუკუმაშუმერულიკომორულიკლასიკური სირიულისირიულიტი" + + "ნმეტესოტეტუმითიგრეკლინგონიტოკ-პისინიტაროკოტუმბუკატუვალუტასავაქიტუვაცენ" + + "ტრალური მოროკოს ტამაზიგხტიუდმურტულიუგარითულიუმბუნდუძირეული ენავაივუნჯო" + + "ვალსერიველაითავარაივალპირიყალმუხურისოგაიანგბენიიემბაკანტონურიბლისსიმბო" + + "ლოებიზენაგასტანდარტული მაროკოული ტამაზიგხტიზუნილინგვისტური შიგთავსი არ" + + " არისზაზაკითანამედროვე სტანდარტული არაბულიავსტრიული გერმანულიშვეიცარიული" + + " ზემოგერმანულიავსტრალიური ინგლისურიკანადური ინგლისურიბრიტანული ინგლისური" + + "ამერიკული ინგლისურილათინურ ამერიკული ესპანურიევროპული ესპანურიმექსიკურ" + + "ი ესპანურიკანადური ფრანგულიშვეიცარიული ფრანგულიქვემოსაქსონურიფლამანდიუ" + + "რიბრაზილიური პორტუგალიურიევროპული პორტუგალიურიმოლდავურისერბულ-ხორვატულ" + + "იკონგოს სუაჰილიგამარტივებული ჩინურიტრადიციული ჩინური" + +var kaLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0027, 0x003f, 0x005d, 0x006c, 0x0084, 0x009f, + 0x00b4, 0x00c9, 0x00de, 0x00f0, 0x0117, 0x0132, 0x0150, 0x016b, + 0x0180, 0x0195, 0x01b0, 0x01c8, 0x01e3, 0x01fb, 0x0219, 0x022e, + 0x0240, 0x025b, 0x0264, 0x0276, 0x02a7, 0x02bf, 0x02d4, 0x02e9, + 0x0304, 0x0316, 0x032b, 0x0334, 0x034c, 0x0367, 0x0382, 0x039a, + 0x03b2, 0x03c7, 0x03df, 0x03eb, 0x03fd, 0x0409, 0x0421, 0x0439, + 0x0469, 0x0487, 0x04bb, 0x04d6, 0x04eb, 0x0503, 0x0515, 0x0524, + 0x0539, 0x0548, 0x0548, 0x0563, 0x058e, 0x05a3, 0x05b8, 0x05ca, + // Entry 40 - 7F + 0x05f7, 0x0618, 0x0636, 0x0642, 0x065e, 0x065e, 0x0667, 0x0685, + 0x069d, 0x06bb, 0x06d3, 0x06e5, 0x06fa, 0x0709, 0x071b, 0x072d, + 0x0745, 0x0782, 0x0797, 0x07a9, 0x07be, 0x07d0, 0x07eb, 0x0800, + 0x080c, 0x0821, 0x083c, 0x0854, 0x087b, 0x088a, 0x08a8, 0x08bd, + 0x08d2, 0x08e7, 0x0909, 0x0921, 0x0942, 0x095d, 0x096c, 0x098a, + 0x09ae, 0x09c9, 0x09de, 0x09f6, 0x0a0b, 0x0a20, 0x0a2f, 0x0a5d, + 0x0a75, 0x0a87, 0x0aab, 0x0ae5, 0x0b19, 0x0b4a, 0x0b5c, 0x0b6e, + 0x0b8c, 0x0b9e, 0x0bad, 0x0bb9, 0x0bc8, 0x0be3, 0x0bef, 0x0c07, + // Entry 80 - BF + 0x0c16, 0x0c3a, 0x0c49, 0x0c6d, 0x0c7c, 0x0c94, 0x0ca6, 0x0cc7, + 0x0ce2, 0x0d00, 0x0d18, 0x0d46, 0x0d55, 0x0d70, 0x0d8b, 0x0da6, + 0x0db5, 0x0dc1, 0x0ddc, 0x0df4, 0x0e09, 0x0e18, 0x0e47, 0x0e5c, + 0x0e71, 0x0e86, 0x0e9e, 0x0eb0, 0x0ec8, 0x0ed1, 0x0ee9, 0x0f07, + 0x0f19, 0x0f34, 0x0f49, 0x0f5b, 0x0f70, 0x0f85, 0x0f9d, 0x0fb8, + 0x0fc4, 0x0fdc, 0x0feb, 0x1009, 0x1021, 0x1039, 0x1051, 0x1060, + 0x106f, 0x1081, 0x1081, 0x1093, 0x109f, 0x10b4, 0x10c3, 0x10d8, + 0x10f0, 0x10f0, 0x10f0, 0x10ff, 0x1114, 0x1129, 0x1129, 0x1141, + // Entry C0 - FF + 0x1141, 0x116c, 0x1197, 0x11a9, 0x11c1, 0x11e2, 0x11e2, 0x11f7, + 0x11f7, 0x11f7, 0x120c, 0x120c, 0x120c, 0x1215, 0x1215, 0x1230, + 0x1230, 0x123f, 0x1251, 0x1269, 0x1269, 0x1275, 0x1287, 0x1287, + 0x1287, 0x1293, 0x12a2, 0x12a2, 0x12ae, 0x12ae, 0x12ae, 0x12d9, + 0x12ee, 0x12ee, 0x12fa, 0x12fa, 0x12fa, 0x130f, 0x130f, 0x130f, + 0x131e, 0x131e, 0x132a, 0x132a, 0x1345, 0x135d, 0x135d, 0x136f, + 0x136f, 0x136f, 0x136f, 0x1381, 0x1381, 0x1396, 0x13a2, 0x13b1, + 0x13b1, 0x13cc, 0x13e1, 0x140c, 0x141b, 0x1436, 0x1448, 0x145a, + // Entry 100 - 13F + 0x1482, 0x1497, 0x1497, 0x14c2, 0x1509, 0x1521, 0x1539, 0x1551, + 0x1560, 0x157e, 0x1590, 0x15a5, 0x15b4, 0x15c3, 0x15d2, 0x15f6, + 0x15f6, 0x1605, 0x1639, 0x1648, 0x1657, 0x1669, 0x1675, 0x1684, + 0x1684, 0x16ab, 0x16c0, 0x16c0, 0x16f1, 0x16f1, 0x1703, 0x1703, + 0x1703, 0x1721, 0x1721, 0x172d, 0x172d, 0x175b, 0x1783, 0x1783, + 0x17ad, 0x17e3, 0x17fb, 0x1801, 0x181c, 0x181c, 0x181c, 0x182b, + 0x182b, 0x183a, 0x1858, 0x1858, 0x1895, 0x18cc, 0x18cc, 0x18db, + 0x18f6, 0x1908, 0x1908, 0x1930, 0x196d, 0x196d, 0x196d, 0x197c, + // Entry 140 - 17F + 0x1991, 0x1991, 0x1991, 0x19a9, 0x19a9, 0x19ca, 0x19dc, 0x19ee, + 0x1a0f, 0x1a0f, 0x1a1b, 0x1a2a, 0x1a3c, 0x1a4b, 0x1a63, 0x1a63, + 0x1a63, 0x1a78, 0x1a8a, 0x1aa2, 0x1aca, 0x1aef, 0x1aef, 0x1b16, + 0x1b2e, 0x1b40, 0x1b4c, 0x1b5b, 0x1b5b, 0x1b79, 0x1b79, 0x1b88, + 0x1b9d, 0x1bc1, 0x1bc1, 0x1bcd, 0x1bcd, 0x1bd9, 0x1bd9, 0x1bf8, + 0x1bf8, 0x1bf8, 0x1c04, 0x1c1f, 0x1c37, 0x1c62, 0x1c77, 0x1c89, + 0x1c98, 0x1ccc, 0x1ccc, 0x1ccc, 0x1ce7, 0x1cf9, 0x1d0e, 0x1d1d, + 0x1d2f, 0x1d47, 0x1d5c, 0x1d6e, 0x1d7d, 0x1d8c, 0x1d9b, 0x1db3, + // Entry 180 - 1BF + 0x1db3, 0x1db3, 0x1db3, 0x1dc5, 0x1dc5, 0x1dd4, 0x1de0, 0x1e05, + 0x1e05, 0x1e21, 0x1e39, 0x1e48, 0x1e51, 0x1e5d, 0x1e6c, 0x1e6c, + 0x1e6c, 0x1e84, 0x1e90, 0x1ea2, 0x1eb7, 0x1ecf, 0x1ecf, 0x1ede, + 0x1eea, 0x1ef9, 0x1ef9, 0x1f08, 0x1f14, 0x1f2f, 0x1f63, 0x1f85, + 0x1f9b, 0x1fb0, 0x1fd1, 0x1fef, 0x2007, 0x2022, 0x202e, 0x202e, + 0x2046, 0x206e, 0x207d, 0x2098, 0x20ad, 0x20ad, 0x20bc, 0x20cb, + 0x20f2, 0x20f2, 0x2119, 0x2125, 0x214f, 0x2161, 0x2170, 0x217c, + 0x217c, 0x218e, 0x21a6, 0x21bb, 0x21ee, 0x21ee, 0x21f7, 0x221c, + // Entry 1C0 - 1FF + 0x222b, 0x225f, 0x2277, 0x228f, 0x229e, 0x22ad, 0x22ad, 0x22ad, + 0x22ce, 0x22e3, 0x22fb, 0x2319, 0x2331, 0x2331, 0x2365, 0x2365, + 0x2365, 0x238d, 0x238d, 0x23a8, 0x23a8, 0x23a8, 0x23a8, 0x23c0, + 0x23ee, 0x23fa, 0x23fa, 0x2415, 0x242a, 0x244b, 0x244b, 0x244b, + 0x245a, 0x246c, 0x246c, 0x246c, 0x246c, 0x2487, 0x2490, 0x24a5, + 0x24bd, 0x24ee, 0x2503, 0x2503, 0x2518, 0x2518, 0x252d, 0x253c, + 0x2557, 0x2578, 0x2578, 0x25a2, 0x25b4, 0x25c0, 0x25c0, 0x25db, + 0x2603, 0x2631, 0x2631, 0x2640, 0x264c, 0x2674, 0x2674, 0x2674, + // Entry 200 - 23F + 0x2674, 0x269b, 0x26bd, 0x26e2, 0x2707, 0x271c, 0x271c, 0x273e, + 0x273e, 0x274a, 0x274a, 0x275c, 0x275c, 0x2774, 0x278c, 0x27bd, + 0x27d2, 0x27d2, 0x27d2, 0x27e1, 0x27ed, 0x27ed, 0x27ff, 0x280e, + 0x280e, 0x280e, 0x280e, 0x2826, 0x2826, 0x2826, 0x2826, 0x2826, + 0x2842, 0x2842, 0x2854, 0x2854, 0x2854, 0x2854, 0x2869, 0x287b, + 0x2893, 0x289f, 0x28f2, 0x290d, 0x2928, 0x293d, 0x295c, 0x2965, + 0x2965, 0x2965, 0x2965, 0x2965, 0x2965, 0x2965, 0x2974, 0x2989, + 0x299e, 0x29ad, 0x29ad, 0x29c2, 0x29c2, 0x29dd, 0x29dd, 0x29e9, + // Entry 240 - 27F + 0x29e9, 0x29e9, 0x2a01, 0x2a10, 0x2a10, 0x2a2b, 0x2a2b, 0x2a55, + 0x2a55, 0x2a67, 0x2ac3, 0x2acf, 0x2b1d, 0x2b2f, 0x2b88, 0x2b88, + 0x2bbf, 0x2c08, 0x2c45, 0x2c79, 0x2cb0, 0x2ce7, 0x2d31, 0x2d62, + 0x2d96, 0x2d96, 0x2dc7, 0x2e01, 0x2e2b, 0x2e4c, 0x2e8f, 0x2ecc, + 0x2ee7, 0x2f15, 0x2f3d, 0x2f77, 0x2fa8, +} // Size: 1250 bytes + +const kkLangStr string = "" + // Size: 8563 bytes + "афар тіліабхаз тіліафрикаанс тіліакан тіліамхар тіліарагон тіліараб тілі" + + "ассам тіліавар тіліаймара тіліәзірбайжан тілібашқұрт тілібеларусь тіліб" + + "олгар тілібислама тілібамбара тілібенгал тілітибет тілібретон тілібосни" + + "я тілікаталан тілішешен тілічаморро тілікорсика тілічех тілішіркеулік с" + + "лавян тілічуваш тіліваллий тілідат тілінеміс тілідивехи тілідзонг-кэ ті" + + "ліэве тілігрек тіліағылшын тіліэсперанто тіліиспан тіліэстон тілібаск т" + + "іліпарсы тіліфула тіліфин тіліфиджи тіліфарер тіліфранцуз тілібатыс фри" + + "з тіліирланд тілігэль тілігалисия тілігуарани тілігуджарати тілімэн тіл" + + "іхауса тіліиврит тіліхинди тіліхорват тілігаити тілівенгр тіліармян тіл" + + "ігереро тіліинтерлингва тіліиндонезия тіліинтерлингве тіліигбо тілісычу" + + "ан и тіліидо тіліисланд тіліитальян тіліинуктитут тіліжапон тіліява тіл" + + "ігрузин тілікикуйю тілікваньяма тіліқазақ тілікалаалисут тілікхмер тілі" + + "каннада тілікорей тіліканури тілікашмир тілікүрд тілікоми тілікорн тілі" + + "қырғыз тілілатын тілілюксембург тіліганда тілілимбург тілілингала тіліл" + + "аос тілілитва тілілуба-катанга тілілатыш тілімалагаси тілімаршалл тілім" + + "аори тілімакедон тілімалаялам тілімоңғол тілімаратхи тілімалай тілімаль" + + "та тілібирма тілінауру тілісолтүстік ндебеле тілінепал тіліндонга тілін" + + "идерланд тілінорвегиялық нюнорск тілінорвегиялық букмол тіліоңтүстік нд" + + "ебеле тілінавахо тіліньянджа тіліокситан тіліоромо тіліория тіліосетин " + + "тіліпенджаб тіліполяк тіліпушту тіліпортугал тілікечуа тіліроманш тілір" + + "унди тілірумын тіліорыс тілікиньяруанда тілісанскрит тілісардин тілісин" + + "дхи тілісолтүстік саам тілісанго тілісингал тілісловак тілісловен тіліс" + + "амоа тілішона тілісомали тіліалбан тілісерб тілісвати тілісесото тілісу" + + "ндан тілішвед тілісуахили тілітамил тілітелугу тілітәжік тілітай тіліти" + + "гринья тілітүрікмен тілітсвана тілітонган тілітүрік тілітсонга тілітата" + + "р тілітаити тіліұйғыр тіліукраин тіліурду тіліөзбек тілівенда тілівьетн" + + "ам тіліволапюк тіліваллон тіліволоф тілікхоса тіліидиш тілійоруба тіліқ" + + "ытай тілізулу тіліачех тіліадангме тіліадыгей тіліагхем тіліайну тіліал" + + "еут тіліоңтүстік алтай тіліангика тілімапуче тіліарапахо тіліасу тіліас" + + "турия тіліавадхи тілібали тілібаса тілібемба тілібена тілібатыс балучи " + + "тілібходжпури тілібини тілісиксика тілібодо тілібугис тіліблин тілісебу" + + "ано тілікига тілічуук тілімари тілічокто тілічероки тілішайен тілісоран" + + "и тілісейшельдік креол тілідакота тілідаргин тілітаита тілідогриб тіліз" + + "арма тілітөменгі лужица тілідуала тілідиола тілідазага тіліэмбу тіліэфи" + + "к тіліэкаджук тіліэвондо тіліфилиппин тіліфон тіліфриуль тіліга тілігаг" + + "ауз тілігеэз тілігильберт тілігоронтало тілішвейцариялық неміс тілігуси" + + "и тілігвичин тілігавайи тіліхилигайнон тіліхмонг тіліжоғарғы лужица тіл" + + "іхупа тіліибан тіліибибио тіліилоко тіліингуш тіліложбан тілінгомба тіл" + + "імачаме тілікабил тілікачин тіліджу тілікамба тілікабардин тілітьяп тіл" + + "імаконде тілікабувердьяну тілікоро тілікхаси тілікойра чини тілікако ті" + + "лікаленжин тілікимбунду тілікоми-пермяк тіліконкани тілікпелле тіліқара" + + "шай-балқар тілікарель тілікурух тілішамбала тілібафиа тілікёльн тіліқұм" + + "ық тіліладино тіліланги тілілезгин тілілакота тілілози тілісолтүстік лю" + + "ри тілілуба-лулуа тілілунда тілілуо тілімизо тілілухиа тілімадур тіліма" + + "гахи тілімайтхили тілімакасар тілімасай тілімокша тіліменде тілімеру ті" + + "ліморисиен тілімакуа-меетто тілімета тілімикмак тіліминангкабау тіліман" + + "ипури тілімогавк тілімосси тілімунданг тілібірнеше тілкрик тілімиранд т" + + "іліэрзян тілімазандеран тілінеаполитан тілінама тілітөменгі неміс тілін" + + "евар тіліниас тіліниуэ тіліквасио тілінгиембун тіліноғай тілінко тілісо" + + "лтүстік сото тілінуэр тілінианколе тіліпангасинан тіліпампанга тіліпапь" + + "яменто тіліпалау тілінигериялық пиджин тіліпруссия тілікиче тілірапануй" + + " тіліраротонган тіліромбо тіліарумын тіліруа тілісандаве тіліякут тіліса" + + "мбуру тілісантали тілінгамбай тілісангу тілісицилия тілішотланд тіліоңт" + + "үстік күрд тілісена тілікойраборо сенни тіліташелхит тілішан тіліоңтүст" + + "ік саам тілілуле саам тіліинари саам тіліколтта саам тілісонинке тіліср" + + "анан тонго тілісахо тілісукума тілікомор тілісирия тілітемне тілітесо т" + + "ілітетум тілітигре тіліклингон тіліток-писин тілітароко тілітумбука тіл" + + "ітувалу тілітасавак тілітувин тіліорталық атлас тамазигхт тіліудмурт ті" + + "ліумбунду тіліата тілвай тілівунджо тілівальзер тіліволайта тіліварай т" + + "ілівальбири тіліқалмақ тілісога тіліянгбен тілійемба тілікантон тілімар" + + "окколық стандартты тамазигхт тілізуни тілітілдік мазмұны жоқзаза тіліқа" + + "зіргі стандартты араб тіліағылшын тілі (АҚШ)төменгі саксон тіліфламанд " + + "тілімолдован тілісерб-хорват тіліконго суахили тіліжеңілдетілген қытай " + + "тілідәстүрлі қытай тілі" + +var kkLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0011, 0x0024, 0x0024, 0x003f, 0x0050, 0x0063, 0x0078, + 0x0089, 0x009c, 0x00ad, 0x00c2, 0x00df, 0x00f6, 0x010f, 0x0124, + 0x013b, 0x0152, 0x0167, 0x017a, 0x018f, 0x01a4, 0x01bb, 0x01ce, + 0x01e5, 0x01fc, 0x01fc, 0x020b, 0x0233, 0x0246, 0x025b, 0x026a, + 0x027d, 0x0292, 0x02aa, 0x02b9, 0x02ca, 0x02e1, 0x02fc, 0x030f, + 0x0322, 0x0333, 0x0346, 0x0357, 0x0366, 0x0379, 0x038c, 0x03a3, + 0x03bf, 0x03d4, 0x03e5, 0x03fc, 0x0413, 0x042e, 0x043d, 0x0450, + 0x0463, 0x0476, 0x0476, 0x048b, 0x049e, 0x04b1, 0x04c4, 0x04d9, + // Entry 40 - 7F + 0x04f8, 0x0513, 0x0532, 0x0543, 0x055b, 0x055b, 0x056a, 0x057f, + 0x0596, 0x05b1, 0x05c4, 0x05d3, 0x05e8, 0x05e8, 0x05fd, 0x0616, + 0x0629, 0x0646, 0x0659, 0x0670, 0x0683, 0x0698, 0x06ad, 0x06be, + 0x06cf, 0x06e0, 0x06f5, 0x0708, 0x0725, 0x0738, 0x074f, 0x0766, + 0x0777, 0x078a, 0x07aa, 0x07bd, 0x07d6, 0x07ed, 0x0800, 0x0817, + 0x0830, 0x0845, 0x085c, 0x086f, 0x0884, 0x0897, 0x08aa, 0x08d4, + 0x08e7, 0x08fc, 0x0917, 0x0945, 0x0971, 0x0999, 0x09ae, 0x09c5, + 0x09dc, 0x09dc, 0x09ef, 0x0a00, 0x0a15, 0x0a2c, 0x0a2c, 0x0a3f, + // Entry 80 - BF + 0x0a52, 0x0a6b, 0x0a7e, 0x0a93, 0x0aa6, 0x0ab9, 0x0aca, 0x0ae9, + 0x0b02, 0x0b17, 0x0b2c, 0x0b50, 0x0b63, 0x0b78, 0x0b8d, 0x0ba2, + 0x0bb5, 0x0bc6, 0x0bdb, 0x0bee, 0x0bff, 0x0c12, 0x0c27, 0x0c3c, + 0x0c4d, 0x0c64, 0x0c77, 0x0c8c, 0x0c9f, 0x0cae, 0x0cc7, 0x0ce0, + 0x0cf5, 0x0d0a, 0x0d1d, 0x0d32, 0x0d45, 0x0d58, 0x0d6b, 0x0d80, + 0x0d91, 0x0da4, 0x0db7, 0x0dce, 0x0de5, 0x0dfa, 0x0e0d, 0x0e20, + 0x0e31, 0x0e46, 0x0e46, 0x0e59, 0x0e6a, 0x0e7b, 0x0e7b, 0x0e92, + 0x0ea7, 0x0ea7, 0x0ea7, 0x0eba, 0x0ecb, 0x0ecb, 0x0ecb, 0x0ede, + // Entry C0 - FF + 0x0ede, 0x0f02, 0x0f02, 0x0f17, 0x0f17, 0x0f2c, 0x0f2c, 0x0f43, + 0x0f43, 0x0f43, 0x0f43, 0x0f43, 0x0f43, 0x0f52, 0x0f52, 0x0f69, + 0x0f69, 0x0f7e, 0x0f7e, 0x0f8f, 0x0f8f, 0x0fa0, 0x0fa0, 0x0fa0, + 0x0fa0, 0x0fa0, 0x0fb3, 0x0fb3, 0x0fc4, 0x0fc4, 0x0fc4, 0x0fe4, + 0x0fff, 0x0fff, 0x1010, 0x1010, 0x1010, 0x1027, 0x1027, 0x1027, + 0x1027, 0x1027, 0x1038, 0x1038, 0x1038, 0x104b, 0x104b, 0x105c, + 0x105c, 0x105c, 0x105c, 0x105c, 0x105c, 0x1073, 0x1084, 0x1084, + 0x1084, 0x1095, 0x10a6, 0x10a6, 0x10b9, 0x10b9, 0x10ce, 0x10e1, + // Entry 100 - 13F + 0x10f6, 0x10f6, 0x10f6, 0x10f6, 0x111e, 0x111e, 0x1133, 0x1148, + 0x115b, 0x115b, 0x115b, 0x1170, 0x1170, 0x1183, 0x1183, 0x11a7, + 0x11a7, 0x11ba, 0x11ba, 0x11cd, 0x11cd, 0x11e2, 0x11f3, 0x1204, + 0x1204, 0x1204, 0x121b, 0x121b, 0x121b, 0x121b, 0x1230, 0x1230, + 0x1230, 0x1249, 0x1249, 0x1258, 0x1258, 0x1258, 0x1258, 0x1258, + 0x1258, 0x1258, 0x126d, 0x127a, 0x128f, 0x128f, 0x128f, 0x128f, + 0x128f, 0x12a0, 0x12b9, 0x12b9, 0x12b9, 0x12b9, 0x12b9, 0x12b9, + 0x12d4, 0x12d4, 0x12d4, 0x12d4, 0x1300, 0x1300, 0x1300, 0x1313, + // Entry 140 - 17F + 0x1328, 0x1328, 0x1328, 0x133d, 0x133d, 0x135a, 0x135a, 0x136d, + 0x1391, 0x1391, 0x13a2, 0x13b3, 0x13c8, 0x13db, 0x13ee, 0x13ee, + 0x13ee, 0x1403, 0x1418, 0x142d, 0x142d, 0x142d, 0x142d, 0x142d, + 0x1440, 0x1453, 0x1462, 0x1475, 0x1475, 0x148e, 0x148e, 0x149f, + 0x14b6, 0x14d7, 0x14d7, 0x14e8, 0x14e8, 0x14fb, 0x14fb, 0x1517, + 0x1517, 0x1517, 0x1528, 0x1541, 0x155a, 0x1578, 0x158f, 0x158f, + 0x15a4, 0x15c8, 0x15c8, 0x15c8, 0x15dd, 0x15f0, 0x1607, 0x161a, + 0x162d, 0x1640, 0x1640, 0x1655, 0x1668, 0x1668, 0x1668, 0x167d, + // Entry 180 - 1BF + 0x167d, 0x167d, 0x167d, 0x1692, 0x1692, 0x1692, 0x16a3, 0x16c7, + 0x16c7, 0x16e3, 0x16e3, 0x16f6, 0x1705, 0x1716, 0x1729, 0x1729, + 0x1729, 0x173c, 0x173c, 0x1751, 0x176a, 0x1781, 0x1781, 0x1794, + 0x1794, 0x17a7, 0x17a7, 0x17ba, 0x17cb, 0x17e4, 0x17e4, 0x1804, + 0x1815, 0x182a, 0x1849, 0x1849, 0x1862, 0x1877, 0x188a, 0x188a, + 0x18a1, 0x18b6, 0x18c7, 0x18dc, 0x18dc, 0x18dc, 0x18dc, 0x18ef, + 0x190c, 0x190c, 0x1929, 0x193a, 0x195c, 0x196f, 0x1980, 0x1991, + 0x1991, 0x19a6, 0x19bf, 0x19d2, 0x19d2, 0x19d2, 0x19e1, 0x1a05, + // Entry 1C0 - 1FF + 0x1a16, 0x1a16, 0x1a16, 0x1a2f, 0x1a2f, 0x1a2f, 0x1a2f, 0x1a2f, + 0x1a4c, 0x1a4c, 0x1a65, 0x1a82, 0x1a95, 0x1a95, 0x1abf, 0x1abf, + 0x1abf, 0x1abf, 0x1abf, 0x1abf, 0x1abf, 0x1abf, 0x1abf, 0x1ad6, + 0x1ad6, 0x1ae7, 0x1ae7, 0x1ae7, 0x1afe, 0x1b1b, 0x1b1b, 0x1b1b, + 0x1b2e, 0x1b2e, 0x1b2e, 0x1b2e, 0x1b2e, 0x1b43, 0x1b52, 0x1b69, + 0x1b7a, 0x1b7a, 0x1b91, 0x1b91, 0x1ba8, 0x1ba8, 0x1bbf, 0x1bd2, + 0x1be9, 0x1c00, 0x1c00, 0x1c22, 0x1c22, 0x1c33, 0x1c33, 0x1c33, + 0x1c59, 0x1c59, 0x1c59, 0x1c72, 0x1c81, 0x1c81, 0x1c81, 0x1c81, + // Entry 200 - 23F + 0x1c81, 0x1ca3, 0x1cbd, 0x1cd9, 0x1cf7, 0x1d0e, 0x1d0e, 0x1d2e, + 0x1d2e, 0x1d3f, 0x1d3f, 0x1d54, 0x1d54, 0x1d54, 0x1d67, 0x1d67, + 0x1d7a, 0x1d7a, 0x1d7a, 0x1d8d, 0x1d9e, 0x1d9e, 0x1db1, 0x1dc4, + 0x1dc4, 0x1dc4, 0x1dc4, 0x1ddb, 0x1ddb, 0x1ddb, 0x1ddb, 0x1ddb, + 0x1df5, 0x1df5, 0x1e0a, 0x1e0a, 0x1e0a, 0x1e0a, 0x1e21, 0x1e36, + 0x1e4d, 0x1e60, 0x1e95, 0x1eaa, 0x1eaa, 0x1ec1, 0x1ece, 0x1edd, + 0x1edd, 0x1edd, 0x1edd, 0x1edd, 0x1edd, 0x1edd, 0x1ef2, 0x1f09, + 0x1f20, 0x1f33, 0x1f33, 0x1f4c, 0x1f4c, 0x1f61, 0x1f61, 0x1f72, + // Entry 240 - 27F + 0x1f72, 0x1f72, 0x1f87, 0x1f9a, 0x1f9a, 0x1faf, 0x1faf, 0x1faf, + 0x1faf, 0x1faf, 0x1ff4, 0x2005, 0x2027, 0x2038, 0x206d, 0x206d, + 0x206d, 0x206d, 0x206d, 0x206d, 0x206d, 0x208d, 0x208d, 0x208d, + 0x208d, 0x208d, 0x208d, 0x208d, 0x20b1, 0x20c8, 0x20c8, 0x20c8, + 0x20e1, 0x20ff, 0x2121, 0x214f, 0x2173, +} // Size: 1250 bytes + +const kmLangStr string = "" + // Size: 8834 bytes + "អាហ្វារអាប់ខាហ៊្សានអាវេស្ថានអាហ្វ្រិកានអាកានអំហារិកអារ៉ាហ្គោនអារ៉ាប់អាសា" + + "មីសអាវ៉ារីកអីម៉ារ៉ាអាស៊ែបៃហ្សង់បាស្គៀបេឡារុស្សប៊ុលហ្គារីប៊ីស្លាម៉ាបាម្" + + "បារាបង់ក្លាដែសទីបេប្រីស្តុនបូស្នីកាតាឡានឈីឆេនឈីម៉ូរ៉ូកូស៊ីខានឆេកឈឺជស្ល" + + "ាវិកឈូវ៉ាសវេលដាណឺម៉ាកអាល្លឺម៉ង់ឌីវីហ៊ីដុងខាអ៊ីវក្រិកអង់គ្លេសអេស្ពេរ៉ាន" + + "់តូអេស្ប៉ាញអេស្តូនីបាសខ៍ភឺសៀនហ្វ៊ូឡាហ្វាំងឡង់ហ៊្វីជីហ្វារូសបារាំងហ្វ្រ" + + "ីស៊ានខាងលិចអៀរឡង់ស្កុតហ្កែលិគហ្គាលីស្យានហ្គូរ៉ានីហ្កុយ៉ារាទីមេនហូសាអ៊ី" + + "ស្រាអែលហិណ្ឌីក្រូអាតហៃទីហុងគ្រីអាមេនីហឺរីរ៉ូឥណ្ឌូណេស៊ីអ៊ីកបូស៊ីឈាន់យីអ" + + "៊ីដូអ៊ីស្លង់អ៊ីតាលីអ៊ីនុកទីទុតជប៉ុនជ្វាហ្សក\u200bហ្ស៊ីគីគូយូគូនយ៉ាម៉ាក" + + "ាហ្សាក់កាឡាលលីស៊ុតខ្មែរខាណាដាកូរ៉េកានូរីកាស្មៀរឃឺដកូមីកូនីស\u200bកៀហ្ស" + + "៊ីសឡាតំាងលុចហ្សំបួរហ្គាន់ដាលីមប៊ូសលីនកាឡាឡាវលីទុយអានីលូបាកាតានហ្គាឡាតវ" + + "ីម៉ាឡាហ្គាស៊ីម៉ាស់សលម៉ោរីម៉ាសេដូនីម៉ាឡាយ៉ាឡាមម៉ុងហ្គោលីម៉ារ៉ាធីម៉ាឡេម៉" + + "ាល់តាភូមាណូរូនេបេលេខាងជើងនេប៉ាល់នុនហ្គាហូឡង់ន័រវែស នីនូសន័រវែស បុកម៉ាល" + + "់នេប៊េលខាងត្បូងណាវ៉ាចូណានចាអូសីតាន់អូរ៉ូម៉ូអូឌៀអូស៊ីទិកបឹនជាពិប៉ូឡូញបា" + + "ស្តូព័រទុយហ្គាល់ហ្គិកឈួរ៉ូម៉ង់រូន្ឌីរូម៉ានីរុស្ស៊ីគិនយ៉ាវ៉ាន់ដាសំស្ក្រ" + + "ឹតសាឌីនាស៊ីនឌីសាមីខាងជើងសានហ្គោស្រីលង្កាស្លូវ៉ាគីស្លូវ៉ានីភាសាសាមូអាសូ" + + "ណាសូម៉ាលីអាល់បានីស៊ែបស្វាទីសូថូខាងត្បូងស៊ូដង់ស៊ុយអែតស្វាហ៊ីលីតាមីលតេលុ" + + "គុតាហ្ស៊ីគថៃទីហ្គ្រីញ៉ាតួកម៉េនស្វាណាតុងហ្គាទួរគីសុងហ្គាតាតាតាហ៊ីទីអ៊ុយ" + + "ហ្គឺរអ៊ុយក្រែនអ៊ូរឌូអ៊ូសបេគវេនដាវៀតណាមវូឡាពូកវ៉ាលូនវូឡុហ្វឃសាយីឌីហ្សយរ" + + "ូបាហ្សួងចិនសូលូអាកហ៊ីនឺសអាដេងមីអាឌីហ្គីអាហ្គីមអាយនូអាលូតអាល់តៃខាងត្បូង" + + "អាហ្គីកាម៉ាពូឈីអារ៉ាប៉ាហូអាស៊ូអាស្ទូរីអាវ៉ាឌីបាលីបាសាបេមបាបេណាបាឡូជីខា" + + "ងលិចបូចពូរីប៊ីនីស៊ីកស៊ីកាបូដូប៊ុកហ្គីប្ល៊ីនស៊ីប៊ូអាណូឈីហ្គាឈូគីម៉ារីឆុ" + + "កតាវឆេរូគីឈីយីនីឃឺដកណ្ដាលសេសេលវ៉ាគ្រីអូល (បារាំង)ដាកូតាដាចវ៉ាតៃតាដូគ្រ" + + "ីបហ្សាម៉ាសូប៊ីក្រោមឌួលឡាចូឡាហ៊្វុនយីដាហ្សាហ្គាអេមប៊ូអ៊ីហ្វិកអ៊ីកាជុកអ៊" + + "ីវ៉ុនដូហ្វីលីពីនហ្វ៊ុនហ៊្វ្រូលានហ្គាកាគូសជីសហ្គីលបឺទហ្គូរុនតាឡូអាល្លឺម" + + "៉ង (ស្វីស)ហ្គូស៊ីហ្គីចឈីនហាវៃហ៊ីលីហ្គេណុនម៉ុងសូប៊ីលើហ៊ូប៉ាអ៊ីបានអាយប៊ី" + + "ប៊ីអូអ៊ីឡូកូអ៊ិនហ្គូសលុចបានងុំបាម៉ាឆាំកាប៊ីឡេកាឈីនជូកាំបាកាបាឌៀយ៉ាប់ម៉" + + "ាកូនដេកាប៊ូវឺឌៀនូគូរូកាស៊ីគុយរ៉ាឈីនីកាកូកាលែនជីនគីមប៊ុនឌូគូមីភឹមយ៉ាគគុ" + + "នកានីគ្លីបការ៉ាឆាយបាល់កាការីលាគូរូកសាមបាឡាបាហ្វៀកូឡូញគូមីគឡាឌីណូឡានហ្គ" + + "ីឡេសហ្គីឡាកូតាឡូហ្ស៊ីលូរីខាងជើងលូបាលូឡាលុនដាលូអូមីហ្សូលូយ៉ាម៉ាឌូរីសម៉ា" + + "ហ្គាហ៊ីម៉ៃធីលីម៉ាកាសាម៉ាសៃមុខសាមេនឌីមេរូម៉ូរីស៊ីនម៉ាកគូវ៉ាមីតូមេតាមិកម" + + "េកមីណាងកាប៊ូម៉ានីពូរីម៊ូហាគមូស៊ីមុនដាងពហុភាសាគ្រីកមីរ៉ានដេសអឺហ្ស៊ីយ៉ាម" + + "៉ាហ្សានដឺរេនីនាប៉ូលីតានណាម៉ាអាល្លឺម៉ង់ក្រោមនេវ៉ាវីនីអាសនូអៀនក្វាស្យូងៀ" + + "មប៊ូនណូហ្គៃនគោសូថូខាងជើងនូអ័រណានកូលេភេនហ្គាស៊ីណានផាមភេនហ្គាប៉ាប៉ៃមេនតូ" + + "ប៉ាលូអានភាសាទំនាក់ទំនងនីហ្សេរីយ៉ាព្រូស៊ានគីចឈីរ៉ាប៉ានូរ៉ារ៉ូតុងហ្គានរុ" + + "មបូអារ៉ូម៉ានីរ៉្វាសានដាវីសាខាសាមបូរូសានតាលីងាំបេយសានហ្គូស៊ីស៊ីលានស្កុត" + + "ឃឺដខាងត្បូងស៊ីណាគុយរ៉ាបូរ៉ុស៊ីនីតាឈីលហ៊ីតសានសាមីខាងត្បូងលូលីសាមីអ៊ីណារ" + + "ីសាម៉ីស្កុលសាមីសូនីនគេស្រាណានតុងហ្គោសាហូស៊ូគូម៉ាកូម៉ូរីស៊ីរៀគធីមនីតេសូ" + + "ទីទុំធីហ្គ្រាឃ្លីនហ្គុនថុកពីស៊ីនតារ៉ូកូទុមប៊ូកាទូវ៉ាលូតាសាវ៉ាក់ទូវីនៀត" + + "ាម៉ាសាយអាត្លាសកណ្តាលអាត់មូដអាម់ប៊ុនឌូរូតវៃវុនចូវេលសឺវ៉ូឡាយតាវ៉ារេយវ៉ារ" + + "ីប៉ារីកាលមីគសូហ្គាយ៉ាងបេនយេមបាកន្តាំងតាម៉ាហ្សៃម៉ារ៉ុកស្តង់ដាហ្សូនីគ្មា" + + "ន\u200bទិន្នន័យ\u200bភាសាហ្សាហ្សាអារ៉ាប់ផ្លូវការអេស្ប៉ាញ (អ៊ឺរ៉ុប)ហ្សា" + + "ក់ស្យុងក្រោមផ្លាមីសព័រទុយហ្គាល់ (អឺរ៉ុប)ម៉ុលដាវីសឺបូក្រូអាតកុងហ្គោស្វា" + + "ហ៊ីលីចិន\u200bអក្សរ\u200bកាត់ចិន\u200bអក្សរ\u200bពេញ" + +var kmLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0015, 0x0039, 0x0054, 0x0075, 0x0084, 0x0099, 0x00b7, + 0x00cc, 0x00e1, 0x00f9, 0x0111, 0x0135, 0x0147, 0x0162, 0x0180, + 0x019e, 0x01b6, 0x01d4, 0x01e0, 0x01fb, 0x020d, 0x0222, 0x0231, + 0x0249, 0x0261, 0x0261, 0x026a, 0x0288, 0x029a, 0x02a3, 0x02bb, + 0x02d9, 0x02ee, 0x02fd, 0x0309, 0x0318, 0x0330, 0x0357, 0x036f, + 0x0387, 0x0396, 0x03a5, 0x03ba, 0x03d5, 0x03ea, 0x03ff, 0x0411, + 0x0441, 0x0453, 0x0477, 0x0498, 0x04b3, 0x04d4, 0x04dd, 0x04e9, + 0x0507, 0x0519, 0x0519, 0x052e, 0x053a, 0x054f, 0x0561, 0x0576, + // Entry 40 - 7F + 0x0576, 0x0594, 0x0594, 0x05a6, 0x05c1, 0x05c1, 0x05d0, 0x05e8, + 0x05fd, 0x061e, 0x062d, 0x0639, 0x0657, 0x0657, 0x0669, 0x0684, + 0x069c, 0x06bd, 0x06cc, 0x06de, 0x06ed, 0x06ff, 0x0714, 0x071d, + 0x0729, 0x0738, 0x0753, 0x0765, 0x0783, 0x079b, 0x07b0, 0x07c5, + 0x07ce, 0x07e9, 0x0810, 0x081f, 0x0843, 0x0858, 0x0867, 0x0882, + 0x08a3, 0x08c1, 0x08d9, 0x08e8, 0x08fd, 0x0909, 0x0915, 0x0939, + 0x094e, 0x0963, 0x0972, 0x0994, 0x09bf, 0x09e9, 0x09fe, 0x0a0d, + 0x0a25, 0x0a25, 0x0a3d, 0x0a49, 0x0a61, 0x0a76, 0x0a76, 0x0a88, + // Entry 80 - BF + 0x0a9a, 0x0abe, 0x0ad3, 0x0ae8, 0x0afa, 0x0b0f, 0x0b24, 0x0b4b, + 0x0b66, 0x0b78, 0x0b8a, 0x0ba8, 0x0bbd, 0x0bd8, 0x0bf3, 0x0c0e, + 0x0c2c, 0x0c38, 0x0c4d, 0x0c65, 0x0c71, 0x0c83, 0x0ca7, 0x0cb9, + 0x0cce, 0x0ce9, 0x0cf8, 0x0d0a, 0x0d22, 0x0d28, 0x0d49, 0x0d5e, + 0x0d70, 0x0d85, 0x0d94, 0x0da9, 0x0db5, 0x0dca, 0x0de5, 0x0e00, + 0x0e12, 0x0e27, 0x0e36, 0x0e48, 0x0e5d, 0x0e6f, 0x0e84, 0x0e8d, + 0x0ea2, 0x0eb1, 0x0ec0, 0x0ec9, 0x0ed5, 0x0ef0, 0x0ef0, 0x0f05, + 0x0f1d, 0x0f1d, 0x0f1d, 0x0f32, 0x0f41, 0x0f41, 0x0f41, 0x0f50, + // Entry C0 - FF + 0x0f50, 0x0f7a, 0x0f7a, 0x0f92, 0x0f92, 0x0fa7, 0x0fa7, 0x0fc5, + 0x0fc5, 0x0fc5, 0x0fc5, 0x0fc5, 0x0fc5, 0x0fd4, 0x0fd4, 0x0fec, + 0x0fec, 0x1001, 0x1001, 0x100d, 0x100d, 0x1019, 0x1019, 0x1019, + 0x1019, 0x1019, 0x1028, 0x1028, 0x1034, 0x1034, 0x1034, 0x1058, + 0x106d, 0x106d, 0x107c, 0x107c, 0x107c, 0x1097, 0x1097, 0x1097, + 0x1097, 0x1097, 0x10a3, 0x10a3, 0x10a3, 0x10bb, 0x10bb, 0x10cd, + 0x10cd, 0x10cd, 0x10cd, 0x10cd, 0x10cd, 0x10eb, 0x10fd, 0x10fd, + 0x10fd, 0x1109, 0x1118, 0x1118, 0x112a, 0x112a, 0x113c, 0x114e, + // Entry 100 - 13F + 0x1169, 0x1169, 0x1169, 0x1169, 0x11ab, 0x11ab, 0x11bd, 0x11cf, + 0x11db, 0x11db, 0x11db, 0x11f0, 0x11f0, 0x1205, 0x1205, 0x1223, + 0x1223, 0x1232, 0x1232, 0x1256, 0x1256, 0x1274, 0x1286, 0x129e, + 0x129e, 0x129e, 0x12b6, 0x12b6, 0x12b6, 0x12b6, 0x12d1, 0x12d1, + 0x12d1, 0x12ec, 0x12ec, 0x12fe, 0x12fe, 0x12fe, 0x12fe, 0x12fe, + 0x12fe, 0x12fe, 0x131c, 0x1328, 0x1337, 0x1337, 0x1337, 0x1337, + 0x1337, 0x1340, 0x1358, 0x1358, 0x1358, 0x1358, 0x1358, 0x1358, + 0x1379, 0x1379, 0x1379, 0x1379, 0x13a6, 0x13a6, 0x13a6, 0x13bb, + // Entry 140 - 17F + 0x13d3, 0x13d3, 0x13d3, 0x13df, 0x13df, 0x1403, 0x1403, 0x140f, + 0x1424, 0x1424, 0x1436, 0x1448, 0x1469, 0x147e, 0x1499, 0x1499, + 0x1499, 0x14ab, 0x14ba, 0x14cc, 0x14cc, 0x14cc, 0x14cc, 0x14cc, + 0x14e1, 0x14f0, 0x14f6, 0x1505, 0x1505, 0x1517, 0x1517, 0x1526, + 0x153e, 0x155f, 0x155f, 0x156b, 0x156b, 0x157a, 0x157a, 0x1598, + 0x1598, 0x1598, 0x15a4, 0x15bc, 0x15d7, 0x15f8, 0x160d, 0x160d, + 0x161c, 0x1646, 0x1646, 0x1646, 0x1658, 0x1667, 0x167c, 0x168e, + 0x169d, 0x16ac, 0x16ac, 0x16be, 0x16d3, 0x16d3, 0x16d3, 0x16e8, + // Entry 180 - 1BF + 0x16e8, 0x16e8, 0x16e8, 0x16fa, 0x16fa, 0x16fa, 0x170f, 0x172d, + 0x172d, 0x1745, 0x1745, 0x1754, 0x1760, 0x1772, 0x1781, 0x1781, + 0x1781, 0x1799, 0x1799, 0x17b7, 0x17cc, 0x17e1, 0x17e1, 0x17f0, + 0x17f0, 0x17ff, 0x17ff, 0x180e, 0x181a, 0x1835, 0x1835, 0x185c, + 0x1868, 0x187a, 0x1898, 0x1898, 0x18b3, 0x18c5, 0x18d4, 0x18d4, + 0x18e6, 0x18fb, 0x190a, 0x1925, 0x1925, 0x1925, 0x1925, 0x1943, + 0x196d, 0x196d, 0x198b, 0x199a, 0x19c7, 0x19dc, 0x19eb, 0x19fa, + 0x19fa, 0x1a12, 0x1a27, 0x1a39, 0x1a39, 0x1a39, 0x1a42, 0x1a60, + // Entry 1C0 - 1FF + 0x1a6f, 0x1a6f, 0x1a6f, 0x1a84, 0x1a84, 0x1a84, 0x1a84, 0x1a84, + 0x1aab, 0x1aab, 0x1ac9, 0x1aea, 0x1b02, 0x1b02, 0x1b4d, 0x1b4d, + 0x1b4d, 0x1b4d, 0x1b4d, 0x1b4d, 0x1b4d, 0x1b4d, 0x1b4d, 0x1b65, + 0x1b65, 0x1b74, 0x1b74, 0x1b74, 0x1b8c, 0x1bb6, 0x1bb6, 0x1bb6, + 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1be3, 0x1bf2, 0x1c07, + 0x1c13, 0x1c13, 0x1c28, 0x1c28, 0x1c3d, 0x1c3d, 0x1c4f, 0x1c64, + 0x1c7f, 0x1c8e, 0x1c8e, 0x1caf, 0x1caf, 0x1cbe, 0x1cbe, 0x1cbe, + 0x1cee, 0x1cee, 0x1cee, 0x1d09, 0x1d12, 0x1d12, 0x1d12, 0x1d12, + // Entry 200 - 23F + 0x1d12, 0x1d36, 0x1d4e, 0x1d72, 0x1d8d, 0x1da2, 0x1da2, 0x1dcc, + 0x1dcc, 0x1dd8, 0x1dd8, 0x1df0, 0x1df0, 0x1df0, 0x1e05, 0x1e05, + 0x1e17, 0x1e17, 0x1e17, 0x1e26, 0x1e32, 0x1e32, 0x1e41, 0x1e59, + 0x1e59, 0x1e59, 0x1e59, 0x1e77, 0x1e77, 0x1e77, 0x1e77, 0x1e77, + 0x1e92, 0x1e92, 0x1ea7, 0x1ea7, 0x1ea7, 0x1ea7, 0x1ebf, 0x1ed4, + 0x1eef, 0x1f01, 0x1f40, 0x1f55, 0x1f55, 0x1f73, 0x1f7c, 0x1f82, + 0x1f82, 0x1f82, 0x1f82, 0x1f82, 0x1f82, 0x1f82, 0x1f91, 0x1fa0, + 0x1fb8, 0x1fca, 0x1fca, 0x1fe8, 0x1fe8, 0x1ffa, 0x1ffa, 0x200c, + // Entry 240 - 27F + 0x200c, 0x200c, 0x2021, 0x2030, 0x2030, 0x2045, 0x2045, 0x2045, + 0x2045, 0x2045, 0x208a, 0x209c, 0x20d5, 0x20ed, 0x211a, 0x211a, + 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x214a, + 0x214a, 0x214a, 0x214a, 0x214a, 0x217a, 0x218f, 0x218f, 0x21c8, + 0x21e0, 0x2201, 0x2231, 0x225b, 0x2282, +} // Size: 1250 bytes + +const knLangStr string = "" + // Size: 12261 bytes + "ಅಫಾರ್ಅಬ್ಖಾಜಿಯನ್ಅವೆಸ್ಟನ್ಆಫ್ರಿಕಾನ್ಸ್ಅಕಾನ್ಅಂಹರಿಕ್ಅರಗೊನೀಸ್ಅರೇಬಿಕ್ಅಸ್ಸಾಮೀಸ್ಅವ" + + "ರಿಕ್ಅಯ್ಮಾರಾಅಜೆರ್ಬೈಜಾನಿಬಶ್ಕಿರ್ಬೆಲರೂಸಿಯನ್ಬಲ್ಗೇರಿಯನ್ಬಿಸ್ಲಾಮಾಬಂಬಾರಾಬಾಂಗ್ಲಾ" + + "ಟಿಬೇಟಿಯನ್ಬ್ರೆಟನ್ಬೋಸ್ನಿಯನ್ಕೆಟಲಾನ್ಚೆಚನ್ಕಮೊರೊಕೋರ್ಸಿಕನ್ಕ್ರೀಜೆಕ್ಚರ್ಚ್ ಸ್ಲಾವ" + + "ಿಕ್ಚುವಾಶ್ವೆಲ್ಶ್ಡ್ಯಾನಿಶ್ಜರ್ಮನ್ದಿವೆಹಿಜೋಂಗ್\u200cಖಾಈವ್ಗ್ರೀಕ್ಇಂಗ್ಲೀಷ್ಎಸ್ಪೆ" + + "ರಾಂಟೊಸ್ಪ್ಯಾನಿಷ್ಎಸ್ಟೊನಿಯನ್ಬಾಸ್ಕ್ಪರ್ಶಿಯನ್ಫುಲಾಹ್ಫಿನ್ನಿಶ್ಫಿಜಿಯನ್ಫರೋಸಿಫ್ರೆಂ" + + "ಚ್ಪಶ್ಚಿಮ ಫ್ರಿಸಿಯನ್ಐರಿಷ್ಸ್ಕಾಟಿಶ್ ಗ್ಯಾಲಿಕ್ಗ್ಯಾಲಿಶಿಯನ್ಗೌರಾನಿಗುಜರಾತಿಮ್ಯಾಂಕ" + + "್ಸ್ಹೌಸಾಹೀಬ್ರ್ಯೂಹಿಂದಿಹಿರಿ ಮೊಟುಕ್ರೊಯೇಶಿಯನ್ಹೈಷಿಯನ್ ಕ್ರಿಯೋಲ್ಹಂಗೇರಿಯನ್ಅರ್ಮೇ" + + "ನಿಯನ್ಹೆರೆರೊಇಂಟರ್\u200cಲಿಂಗ್ವಾಇಂಡೋನೇಶಿಯನ್ಇಂಟರ್ಲಿಂಗ್ಇಗ್ಬೊಸಿಚುಅನ್ ಯಿಇನುಪಿ" + + "ಯಾಕ್ಇಡೊಐಸ್ಲಾಂಡಿಕ್ಇಟಾಲಿಯನ್ಇನುಕ್ಟಿಟುಟ್ಜಾಪನೀಸ್ಜಾವಾನೀಸ್ಜಾರ್ಜಿಯನ್ಕಾಂಗೋಕಿಕುಯ" + + "ುಕ್ವಾನ್\u200cಯಾಮಾಕಝಕ್ಕಲಾಲ್ಲಿಸುಟ್ಖಮೇರ್ಕನ್ನಡಕೊರಿಯನ್ಕನುರಿಕಾಶ್ಮೀರಿಕುರ್ದಿಷ್" + + "ಕೋಮಿಕಾರ್ನಿಷ್ಕಿರ್ಗಿಜ್ಲ್ಯಾಟಿನ್ಲಕ್ಸಂಬರ್ಗಿಷ್ಗಾಂಡಾಲಿಂಬರ್ಗಿಶ್ಲಿಂಗಾಲಲಾವೋಲಿಥುವ" + + "ೇನಿಯನ್ಲೂಬಾ-ಕಟಾಂಗಾಲಟ್ವಿಯನ್ಮಲಗಾಸಿಮಾರ್ಶಲ್ಲೀಸ್ಮಾವೋರಿಮೆಸಿಡೋನಿಯನ್ಮಲಯಾಳಂಮಂಗೋಲ" + + "ಿಯನ್ಮರಾಠಿಮಲಯ್ಮಾಲ್ಟೀಸ್ಬರ್ಮೀಸ್ನೌರುಉತ್ತರ ದೆಬೆಲೆನೇಪಾಳಿಡೋಂಗಾಡಚ್ನಾರ್ವೇಜಿಯನ್ " + + "ನೈನಾರ್ಸ್ಕ್ನಾರ್ವೆಜಿಯನ್ ಬೊಕ್ಮಲ್ದಕ್ಷಿಣ ದೆಬೆಲೆನವಾಜೊನ್ಯಾಂಜಾಒಸಿಟನ್ಒಜಿಬ್ವಾಓರೊ" + + "ಮೋಒರಿಯಾಒಸ್ಸೆಟಿಕ್ಪಂಜಾಬಿಪಾಲಿಪಾಲಿಷ್ಪಾಷ್ಟೋಪೋರ್ಚುಗೀಸ್ಕ್ವೆಚುವಾರೊಮಾನ್ಷ್ರುಂಡಿರ" + + "ೊಮೇನಿಯನ್ರಷ್ಯನ್ಕೀನ್ಯಾರುವಾಂಡಾಸಂಸ್ಕೃತಸರ್ಡೀನಿಯನ್ಸಿಂಧಿಉತ್ತರ ಸಾಮಿಸಾಂಗೋಸಿಂಹಳಸ" + + "್ಲೋವಾಕ್ಸ್ಲೋವೇನಿಯನ್ಸಮೋವನ್ಶೋನಾಸೊಮಾಲಿಅಲ್ಬೇನಿಯನ್ಸರ್ಬಿಯನ್ಸ್ವಾತಿದಕ್ಷಿಣ ಸೋಥೋಸ" + + "ುಂಡಾನೀಸ್ಸ್ವೀಡಿಷ್ಸ್ವಹಿಲಿತಮಿಳುತೆಲುಗುತಾಜಿಕ್ಥಾಯ್ಟಿಗ್ರಿನ್ಯಾಟರ್ಕ್\u200cಮೆನ್ಸ" + + "್ವಾನಾಟೋಂಗನ್ಟರ್ಕಿಶ್ಸೋಂಗಾಟಾಟರ್ಟಹೀಟಿಯನ್ಉಯಿಘರ್ಉಕ್ರೈನಿಯನ್ಉರ್ದುಉಜ್ಬೇಕ್ವೆಂಡಾವ" + + "ಿಯೇಟ್ನಾಮೀಸ್ವೋಲಾಪುಕ್ವಾಲೂನ್ವೋಲೋಫ್ಕ್ಸೋಸಯಿಡ್ಡಿಶ್ಯೊರುಬಾಝೂವಾಂಗ್ಚೈನೀಸ್ಜುಲುಅಛಿ" + + "ನೀಸ್ಅಕೋಲಿಅಡಂಗ್ಮೆಅಡೈಘೆಆಫ್ರಿಹಿಲಿಅಘೆಮ್ಐನುಅಕ್ಕಾಡಿಯನ್ಅಲೆಯುಟ್ದಕ್ಷಿಣ ಅಲ್ಟಾಯ್ಪ" + + "್ರಾಚೀನ ಇಂಗ್ಲೀಷ್ಆಂಗಿಕಾಅರಾಮಿಕ್ಮಪುಚೆಅರಪಾಹೋಅರಾವಾಕ್ಅಸುಆಸ್ಟುರಿಯನ್ಅವಧಿಬಲೂಚಿಬಲ" + + "ಿನೀಸ್ಬಸಾಬೇಜಾಬೆಂಬಾಬೆನಪಶ್ಚಿಮ ಬಲೊಚಿಭೋಜಪುರಿಬಿಕೊಲ್ಬಿನಿಸಿಕ್ಸಿಕಾಬ್ರಜ್ಬೋಡೊಬುರಿ" + + "ಯಟ್ಬುಗಿನೀಸ್ಬ್ಲಿನ್ಕ್ಯಾಡ್ಡೋಕಾರಿಬ್ಅಟ್ಸಮ್ಸೆಬುಆನೋಚಿಗಾಚಿಬ್ಚಾಚಗಟಾಯ್ಚೂಕಿಸೆಮಾರಿ" + + "ಚಿನೂಕ್ ಜಾರ್ಗೋನ್ಚೋಕ್ಟಾವ್ಚಿಪೆವ್ಯಾನ್ಚೆರೋಕೀಚೀಯೆನ್ನೇಸೊರಾನಿ ಕುರ್ದಿಷ್ಕೊಪ್ಟಿಕ್" + + "ಕ್ರಿಮೀಯನ್ ಟರ್ಕಿಷ್ಸೆಸೆಲ್ವಾ ಕ್ರಯೋಲ್ ಫ್ರೆಂಚ್ಕಶುಬಿಯನ್ಡಕೋಟಾದರ್ಗ್ವಾಟೈಟಡೆಲಾವೇ" + + "ರ್ಸ್ಲೇವ್ಡೋಗ್ರಿಬ್ಡಿಂಕಾಜರ್ಮಾಡೋಗ್ರಿಲೋವರ್ ಸೋರ್ಬಿಯನ್ಡುವಾಲಾಮಧ್ಯ ಡಚ್ಜೊಲ-ಫೊನ್ಯ" + + "ಿಡ್ಯೂಲಾಡಜಾಗಎಂಬುಎಫಿಕ್ಪ್ರಾಚೀನ ಈಜಿಪ್ಟಿಯನ್ಎಕಾಜುಕ್ಎಲಾಮೈಟ್ಮಧ್ಯ ಇಂಗ್ಲೀಷ್ಇವಾಂಡ" + + "ೋಫಾಂಗ್ಫಿಲಿಪಿನೊಫೋನ್ಮಧ್ಯ ಫ್ರೆಂಚ್ಪ್ರಾಚೀನ ಫ್ರೆಂಚ್ಉತ್ತರ ಫ್ರಿಸಿಯನ್ಪೂರ್ವ ಫ್ರಿ" + + "ಸಿಯನ್ಫ್ರಿಯುಲಿಯನ್ಗಗಗೌಜ್ಗಾನ್ ಚೀನೀಸ್ಗಾಯೋಗ್ಬಾಯಾಗೀಝ್ಗಿಲ್ಬರ್ಟೀಸ್ಮಧ್ಯ ಹೈ ಜರ್ಮ" + + "ನ್ಪ್ರಾಚೀನ ಹೈ ಜರ್ಮನ್ಗೊಂಡಿಗೊರೊಂಟಾಲೋಗೋಥಿಕ್ಗ್ರೇಬೋಪ್ರಾಚೀನ ಗ್ರೀಕ್ಸ್ವಿಸ್ ಜರ್ಮ" + + "ನ್ಗುಸಿಗ್ವಿಚ್\u200cಇನ್ಹೈಡಾಹಕ್ಹವಾಯಿಯನ್ಹಿಲಿಗೇನನ್ಹಿಟ್ಟಿಟೆಮೋಂಗ್ಅಪ್ಪರ್ ಸರ್ಬಿ" + + "ಯನ್ಶಯಾಂಗ್ ಚೀನೀಸೇಹೂಪಾಇಬಾನ್ಇಬಿಬಿಯೋಇಲ್ಲಿಕೋಇಂಗುಷ್ಲೊಜ್ಬಾನ್ನೊಂಬಾಮ್ಯಕಮೆಜೂಡಿಯೋ" + + "-ಪರ್ಶಿಯನ್ಜೂಡಿಯೋ-ಅರೇಬಿಕ್ಕಾರಾ-ಕಲ್ಪಾಕ್ಕಬೈಲ್ಕಚಿನ್ಜ್ಜುಕಂಬಾಕಾವಿಕಬರ್ಡಿಯನ್ಟ್ಯಾಪ್" + + "ಮ್ಯಾಕೊಂಡ್ಕಬುವೆರ್ಡಿಯನುಕೋರೋಖಾಸಿಖೋಟಾನೀಸ್ಕೊಯ್ರ ಚೀನಿಕಾಕೊಕಲೆಂಜಿನ್ಕಿಂಬುಂಡುಕೋಮ" + + "ಿ-ಪರ್ಮ್ಯಕ್ಕೊಂಕಣಿಕೊಸರಿಯನ್ಕಪೆಲ್ಲೆಕರಚಯ್-ಬಲ್ಕಾರ್ಕರೇಲಿಯನ್ಕುರುಖ್ಶಂಬಲಬಫಿಯಕಲೊಗ" + + "್ನಿಯನ್ಕುಮೈಕ್ಕುಟೇನಾಯ್ಲ್ಯಾಡಿನೋಲಾಂಗಿಲಹಂಡಾಲಂಬಾಲೆಜ್ಘಿಯನ್ಲಕೊಟಮೊಂಗೋಲೋಝಿಉತ್ತರ " + + "ಲೂರಿಲುಬ-ಲುಲಾಲೂಯಿಸೆನೋಲುಂಡಾಲುವೋಮಿಝೋಲುಯಿಯಮದುರೀಸ್ಮಗಾಹಿಮೈಥಿಲಿಮಕಾಸರ್ಮಂಡಿಂಗೊಮ" + + "ಸಾಯ್ಮೋಕ್ಷಮಂದಾರ್ಮೆಂಡೆಮೆರುಮೊರಿಸನ್ಮಧ್ಯ ಐರಿಷ್ಮ್ಯಖುವಾ- ಮೀಟ್ಟೊಮೆಟಾಮಿಕ್\u200c" + + "ಮ್ಯಾಕ್ಮಿನಂಗ್\u200cಕಬಾವುಮಂಚುಮಣಿಪುರಿಮೊಹಾವ್ಕ್ಮೊಸ್ಸಿಮುಂಡಂಗ್ಬಹುಸಂಖ್ಯೆಯ ಭಾಷೆ" + + "ಗಳುಕ್ರೀಕ್ಮಿರಾಂಡೀಸ್ಮಾರ್ವಾಡಿಎರ್ಝ್ಯಾಮಜಂದೆರಾನಿನಾನ್ನಿಯಾಪೊಲಿಟನ್ನಮಲೋ ಜರ್ಮನ್ನೇ" + + "ವಾರೀನಿಯಾಸ್ನಿಯುವನ್ಖ್ವಾಸಿಯೊನಿಂಬೂನ್ನೊಗಾಯ್ಪ್ರಾಚೀನ ನೋರ್ಸ್ಎನ್\u200cಕೋಉತ್ತರ ಸ" + + "ೋಥೋನೂಯರ್ಶಾಸ್ತ್ರೀಯ ನೇವಾರಿನ್ಯಾಮ್\u200cವೆಂಜಿನ್ಯಾನ್\u200cಕೋಲೆನ್ಯೋರೋಜೀಮಾಓಸಾ" + + "ಜ್ಒಟ್ಟೋಮನ್ ತುರ್ಕಿಷ್ಪಂಗಾಸಿನನ್ಪಹ್ಲವಿಪಂಪಾಂಗಾಪಾಪಿಯಮೆಂಟೋಪಲುಆನ್ನೈಜೀರಿಯನ್ ಪಿಡ" + + "್ಗಿನ್ಪ್ರಾಚೀನ ಪರ್ಶಿಯನ್ಫೀನಿಷಿಯನ್ಪೋನ್\u200c\u200cಪಿಯನ್ಪ್ರಶಿಯನ್ಪ್ರಾಚೀನ ಪ್ರ" + + "ೊವೆನ್ಶಿಯಲ್ಕಿಷೆರಾಜಸ್ಥಾನಿರಾಪಾನುಯಿರಾರೋಟೊಂಗನ್ರೊಂಬೊರೋಮಾನಿಅರೋಮಾನಿಯನ್ರುವಸಂಡಾವ" + + "ೇಸಖಾಸಮರಿಟನ್ ಅರಾಮಿಕ್ಸಂಬುರುಸಸಾಕ್ಸಂತಾಲಿನಂಬೇಸಂಗುಸಿಸಿಲಿಯನ್ಸ್ಕೋಟ್ಸ್ದಕ್ಷಿಣ ಕು" + + "ರ್ದಿಶ್ಸೆನಸೆಲ್ಕಪ್ಕೊಯ್ರಬೊರೊ ಸೆನ್ನಿಪ್ರಾಚೀನ ಐರಿಷ್ಟಷೆಲ್\u200dಹಿಟ್ಶಾನ್ಸಿಡಾಮೋ" + + "ದಕ್ಷಿಣ ಸಾಮಿಲೂಲ್ ಸಾಮಿಇನರಿ ಸಾಮಿಸ್ಕೋಟ್ ಸಾಮಿಸೋನಿಂಕೆಸೋಗ್ಡಿಯನ್ಸ್ರಾನನ್ ಟೋಂಗೋಸ" + + "ೇರೇರ್ಸಹೊಸುಕುಮಾಸುಸುಸುಮೇರಿಯನ್ಕೊಮೊರಿಯನ್ಶಾಸ್ತ್ರೀಯ ಸಿರಿಯಕ್ಸಿರಿಯಕ್ಟಿಮ್ನೆಟೆಸೊ" + + "ಟೆರೆನೋಟೇಟಮ್ಟೈಗ್ರೆಟಿವ್ಟೊಕೆಲಾವ್ಕ್ಲಿಂಗನ್ಟ್ಲಿಂಗಿಟ್ಟಮಾಷೆಕ್ನ್ಯಾಸಾ ಟೋಂಗಾಟೋಕ್ " + + "ಪಿಸಿನ್ಟರೊಕೊಸಿಂಶಿಯನ್ತುಂಬುಕಾಟುವಾಲುಟಸವಕ್ಟುವಿನಿಯನ್ಮಧ್ಯ ಅಟ್ಲಾಸ್ ಟಮಜೈಟ್ಉಡ್" + + "\u200cಮುರ್ಟ್ಉಗಾರಿಟಿಕ್ಉಂಬುಂಡುರೂಟ್ವಾಯಿವೋಟಿಕ್ವುಂಜೊವಾಲ್ಸರ್ವಲಾಯ್ತಾವರಾಯ್ವಾಷೋವಾ" + + "ರ್ಲ್\u200cಪಿರಿವುಕಲ್ಮೈಕ್ಸೊಗಯಾವೊಯಪೀಸೆಯಾಂಗ್ಬೆನ್ಯೆಂಬಾಕ್ಯಾಂಟನೀಸ್ಝೋಪೊಟೆಕ್ಬ್ಲ" + + "ಿಸ್ಸಿಂಬಲ್ಸ್ಝೆನಾಗಾಸ್ಟ್ಯಾಂಡರ್ಡ್ ಮೊರೊಕ್ಕನ್ ಟಮಜೈಟ್ಝೂನಿಯಾವುದೇ ಭಾಷಾಸಂಬಂಧಿ ವಿ" + + "ಷಯವಿಲ್ಲಜಾಝಾಆಧುನಿಕ ಪ್ರಮಾಣಿತ ಅರೇಬಿಕ್ಆಸ್ಟ್ರಿಯನ್ ಜರ್ಮನ್ಸ್ವಿಸ್ ಹೈ ಜರ್ಮನ್ಆಸ್" + + "ಟ್ರೇಲಿಯನ್ ಇಂಗ್ಲೀಷ್ಕೆನೆಡಿಯನ್ ಇಂಗ್ಲೀಷ್ಬ್ರಿಟಿಷ್ ಇಂಗ್ಲೀಷ್ಅಮೆರಿಕನ್ ಇಂಗ್ಲೀಷ್" + + "ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ಯುರೋಪಿಯನ್ ಸ್ಪ್ಯಾನಿಷ್ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ಕೆ" + + "ನೆಡಿಯನ್ ಫ್ರೆಂಚ್ಸ್ವಿಸ್ ಫ್ರೆಂಚ್ಲೋ ಸ್ಯಾಕ್ಸನ್ಫ್ಲೆಮಿಷ್ಬ್ರೆಜಿಲಿಯನ್ ಪೋರ್ಚುಗೀಸ" + + "್ಯೂರೋಪಿಯನ್ ಪೋರ್ಚುಗೀಸ್ಮಾಲ್ಡೇವಿಯನ್ಸರ್ಬೋ-ಕ್ರೊಯೇಶಿಯನ್ಕಾಂಗೊ ಸ್ವಹಿಲಿಸರಳೀಕೃತ " + + "ಚೈನೀಸ್ಸಾಂಪ್ರದಾಯಿಕ ಚೈನೀಸ್" + +var knLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x002d, 0x0045, 0x0066, 0x0075, 0x008a, 0x00a2, + 0x00b7, 0x00d2, 0x00e4, 0x00f9, 0x011a, 0x012f, 0x014d, 0x016b, + 0x0183, 0x0195, 0x01aa, 0x01c5, 0x01da, 0x01f5, 0x020a, 0x0219, + 0x0228, 0x0243, 0x024f, 0x025b, 0x0283, 0x0295, 0x02a7, 0x02bf, + 0x02d1, 0x02e3, 0x02fb, 0x0304, 0x0316, 0x032e, 0x034c, 0x036a, + 0x0388, 0x039a, 0x03b2, 0x03c4, 0x03dc, 0x03f1, 0x0400, 0x0415, + 0x0443, 0x0452, 0x0483, 0x04a4, 0x04b6, 0x04cb, 0x04e6, 0x04f2, + 0x050a, 0x0519, 0x0532, 0x0553, 0x0581, 0x059c, 0x05ba, 0x05cc, + // Entry 40 - 7F + 0x05f3, 0x0614, 0x0632, 0x0641, 0x065d, 0x0678, 0x0681, 0x069f, + 0x06b7, 0x06d8, 0x06ed, 0x0705, 0x0720, 0x072f, 0x0741, 0x0762, + 0x076e, 0x078f, 0x079e, 0x07ad, 0x07c2, 0x07d1, 0x07e9, 0x0801, + 0x080d, 0x0825, 0x083d, 0x0855, 0x0879, 0x0888, 0x08a6, 0x08b8, + 0x08c4, 0x08e5, 0x0904, 0x091c, 0x092e, 0x094f, 0x0961, 0x0982, + 0x0994, 0x09af, 0x09be, 0x09ca, 0x09e2, 0x09f7, 0x0a03, 0x0a25, + 0x0a37, 0x0a46, 0x0a4f, 0x0a8f, 0x0ac6, 0x0aeb, 0x0afa, 0x0b0f, + 0x0b21, 0x0b36, 0x0b45, 0x0b54, 0x0b6f, 0x0b81, 0x0b8d, 0x0b9f, + // Entry 80 - BF + 0x0bb1, 0x0bcf, 0x0be7, 0x0bff, 0x0c0e, 0x0c29, 0x0c3b, 0x0c62, + 0x0c77, 0x0c95, 0x0ca4, 0x0cc0, 0x0ccf, 0x0cde, 0x0cf6, 0x0d17, + 0x0d29, 0x0d35, 0x0d47, 0x0d65, 0x0d7d, 0x0d8f, 0x0dae, 0x0dc9, + 0x0de1, 0x0df6, 0x0e05, 0x0e17, 0x0e29, 0x0e35, 0x0e53, 0x0e71, + 0x0e83, 0x0e95, 0x0eaa, 0x0eb9, 0x0ec8, 0x0ee0, 0x0ef2, 0x0f10, + 0x0f1f, 0x0f34, 0x0f43, 0x0f67, 0x0f7f, 0x0f91, 0x0fa3, 0x0fb2, + 0x0fca, 0x0fdc, 0x0ff1, 0x1003, 0x100f, 0x1024, 0x1033, 0x1048, + 0x1057, 0x1057, 0x1072, 0x1081, 0x108a, 0x10a8, 0x10a8, 0x10bd, + // Entry C0 - FF + 0x10bd, 0x10e5, 0x1113, 0x1125, 0x113a, 0x1149, 0x1149, 0x115b, + 0x115b, 0x115b, 0x1170, 0x1170, 0x1170, 0x1179, 0x1179, 0x1197, + 0x1197, 0x11a3, 0x11b2, 0x11c7, 0x11c7, 0x11d0, 0x11d0, 0x11d0, + 0x11d0, 0x11dc, 0x11eb, 0x11eb, 0x11f4, 0x11f4, 0x11f4, 0x1216, + 0x122b, 0x123d, 0x1249, 0x1249, 0x1249, 0x1261, 0x1261, 0x1261, + 0x1270, 0x1270, 0x127c, 0x127c, 0x1291, 0x12a9, 0x12a9, 0x12bb, + 0x12bb, 0x12d3, 0x12e5, 0x12e5, 0x12f7, 0x130c, 0x1318, 0x132a, + 0x133c, 0x134e, 0x135a, 0x1385, 0x139d, 0x13bb, 0x13cd, 0x13e5, + // Entry 100 - 13F + 0x1410, 0x1428, 0x1428, 0x1459, 0x149d, 0x14b5, 0x14c4, 0x14d9, + 0x14e2, 0x14fa, 0x150c, 0x1524, 0x1533, 0x1542, 0x1554, 0x157f, + 0x157f, 0x1591, 0x15a7, 0x15c3, 0x15d5, 0x15e1, 0x15ed, 0x15fc, + 0x15fc, 0x1630, 0x1645, 0x165a, 0x167f, 0x167f, 0x1691, 0x1691, + 0x16a0, 0x16b8, 0x16b8, 0x16c4, 0x16c4, 0x16e6, 0x1711, 0x1711, + 0x173c, 0x1767, 0x1788, 0x178b, 0x179a, 0x17b9, 0x17c5, 0x17d7, + 0x17d7, 0x17e3, 0x1804, 0x1804, 0x182a, 0x1859, 0x1859, 0x1868, + 0x1883, 0x1895, 0x18a7, 0x18cf, 0x18f4, 0x18f4, 0x18f4, 0x1900, + // Entry 140 - 17F + 0x191e, 0x192a, 0x1933, 0x194b, 0x194b, 0x1966, 0x197e, 0x198d, + 0x19b8, 0x19dd, 0x19e9, 0x19f8, 0x1a0d, 0x1a22, 0x1a34, 0x1a34, + 0x1a34, 0x1a4c, 0x1a5b, 0x1a6d, 0x1a98, 0x1ac0, 0x1ac0, 0x1ae2, + 0x1af1, 0x1b00, 0x1b0c, 0x1b18, 0x1b24, 0x1b3f, 0x1b3f, 0x1b51, + 0x1b6c, 0x1b90, 0x1b90, 0x1b9c, 0x1b9c, 0x1ba8, 0x1bc0, 0x1bdc, + 0x1bdc, 0x1bdc, 0x1be8, 0x1c00, 0x1c18, 0x1c3d, 0x1c4f, 0x1c67, + 0x1c7c, 0x1ca1, 0x1ca1, 0x1ca1, 0x1cb9, 0x1ccb, 0x1cd7, 0x1ce3, + 0x1d01, 0x1d13, 0x1d2b, 0x1d43, 0x1d52, 0x1d61, 0x1d6d, 0x1d88, + // Entry 180 - 1BF + 0x1d88, 0x1d88, 0x1d88, 0x1d94, 0x1d94, 0x1da3, 0x1daf, 0x1dcb, + 0x1dcb, 0x1de1, 0x1df9, 0x1e08, 0x1e14, 0x1e20, 0x1e2f, 0x1e2f, + 0x1e2f, 0x1e44, 0x1e44, 0x1e53, 0x1e65, 0x1e77, 0x1e8c, 0x1e9b, + 0x1e9b, 0x1eaa, 0x1ebc, 0x1ecb, 0x1ed7, 0x1eec, 0x1f08, 0x1f31, + 0x1f3d, 0x1f5e, 0x1f82, 0x1f8e, 0x1fa3, 0x1fbb, 0x1fcd, 0x1fcd, + 0x1fe2, 0x2016, 0x2028, 0x2043, 0x205b, 0x205b, 0x205b, 0x2070, + 0x208b, 0x2097, 0x20b8, 0x20be, 0x20d7, 0x20e9, 0x20fb, 0x2110, + 0x2110, 0x2128, 0x213d, 0x214f, 0x2177, 0x2177, 0x2189, 0x21a5, + // Entry 1C0 - 1FF + 0x21b4, 0x21e2, 0x2206, 0x2227, 0x2239, 0x2245, 0x2254, 0x2285, + 0x22a0, 0x22b2, 0x22c7, 0x22e5, 0x22f7, 0x22f7, 0x232b, 0x232b, + 0x232b, 0x2359, 0x2359, 0x2374, 0x2374, 0x2374, 0x2395, 0x23ad, + 0x23ea, 0x23f6, 0x23f6, 0x2411, 0x2429, 0x2447, 0x2447, 0x2447, + 0x2456, 0x2468, 0x2468, 0x2468, 0x2468, 0x2486, 0x248f, 0x24a1, + 0x24aa, 0x24d5, 0x24e7, 0x24f6, 0x2508, 0x2508, 0x2514, 0x2520, + 0x253b, 0x2553, 0x2553, 0x257e, 0x257e, 0x2587, 0x2587, 0x259c, + 0x25ca, 0x25ef, 0x25ef, 0x260d, 0x2619, 0x2619, 0x262b, 0x262b, + // Entry 200 - 23F + 0x262b, 0x264a, 0x2663, 0x267c, 0x269b, 0x26b0, 0x26cb, 0x26f0, + 0x2702, 0x270b, 0x270b, 0x271d, 0x2729, 0x2744, 0x275f, 0x2790, + 0x27a5, 0x27a5, 0x27a5, 0x27b7, 0x27c3, 0x27d5, 0x27e4, 0x27f6, + 0x2802, 0x281a, 0x281a, 0x2832, 0x284d, 0x284d, 0x2862, 0x2884, + 0x28a3, 0x28a3, 0x28b2, 0x28b2, 0x28ca, 0x28ca, 0x28df, 0x28f1, + 0x2900, 0x291b, 0x2950, 0x296e, 0x2989, 0x299e, 0x29aa, 0x29b6, + 0x29b6, 0x29b6, 0x29b6, 0x29b6, 0x29c8, 0x29c8, 0x29d7, 0x29ec, + 0x2a01, 0x2a10, 0x2a1c, 0x2a3d, 0x2a43, 0x2a58, 0x2a58, 0x2a61, + // Entry 240 - 27F + 0x2a6d, 0x2a7c, 0x2a97, 0x2aa6, 0x2aa6, 0x2ac4, 0x2adc, 0x2b06, + 0x2b06, 0x2b18, 0x2b6b, 0x2b77, 0x2bc4, 0x2bd0, 0x2c11, 0x2c11, + 0x2c42, 0x2c6e, 0x2cab, 0x2cdf, 0x2d10, 0x2d41, 0x2d91, 0x2dcb, + 0x2e05, 0x2e05, 0x2e36, 0x2e5e, 0x2e80, 0x2e98, 0x2ed8, 0x2f12, + 0x2f33, 0x2f64, 0x2f89, 0x2fb1, 0x2fe5, +} // Size: 1250 bytes + +const koLangStr string = "" + // Size: 7030 bytes + "아파르어압카즈어아베스타어아프리칸스어아칸어암하라어아라곤어아랍어아삼어아바릭어아이마라어아제르바이잔어바슈키르어벨라루스어불가리아어비슬라마어" + + "밤바라어벵골어티베트어브르타뉴어보스니아어카탈로니아어체첸어차모로어코르시카어크리어체코어교회 슬라브어추바시어웨일스어덴마크어독일어디베히" + + "어종카어에웨어그리스어영어에스페란토어스페인어에스토니아어바스크어페르시아어풀라어핀란드어피지어페로어프랑스어서부 프리지아어아일랜드어스코" + + "틀랜드 게일어갈리시아어과라니어구자라트어맹크스어하우사어히브리어힌디어히리 모투어크로아티아어아이티어헝가리어아르메니아어헤레로어인터링구" + + "아인도네시아어인테르링구에이그보어쓰촨 이어이누피아크어이도어아이슬란드어이탈리아어이눅티투트어일본어자바어조지아어콩고어키쿠유어쿠안야마어" + + "카자흐어그린란드어크메르어칸나다어한국어칸누리어카슈미르어쿠르드어코미어콘월어키르기스어라틴어룩셈부르크어간다어림버거어링갈라어라오어리투아" + + "니아어루바-카탄가어라트비아어말라가시어마셜어마오리어마케도니아어말라얄람어몽골어마라티어말레이어몰타어버마어나우루어북부 은데벨레어네팔어" + + "느동가어네덜란드어노르웨이어(니노르스크)노르웨이어(보크말)남부 은데벨레어나바호어냔자어오크어오지브와어오로모어오리야어오세트어펀잡어팔" + + "리어폴란드어파슈토어포르투갈어케추아어로만시어룬디어루마니아어러시아어르완다어산스크리트어사르디니아어신디어북부 사미어산고어스리랑카어슬로" + + "바키아어슬로베니아어사모아어쇼나어소말리아어알바니아어세르비아어시스와티어남부 소토어순다어스웨덴어스와힐리어타밀어텔루구어타지크어태국어티" + + "그리냐어투르크멘어츠와나어통가어터키어총가어타타르어타히티어위구르어우크라이나어우르두어우즈베크어벤다어베트남어볼라퓌크어왈론어월로프어코사" + + "어이디시어요루바어주앙어중국어줄루어아체어아콜리어아당메어아디게어튀니지 아랍어아프리힐리어아그햄어아이누어아카드어알류트어남부 알타이어고" + + "대 영어앙가어아람어아라우칸어아라파호어알제리 아랍어아라와크어모로코 아랍어이집트 아랍어아수어아스투리아어아와히어발루치어발리어바사어바" + + "문어고말라어베자어벰바어베나어바푸트어서부 발로치어호즈푸리어비콜어비니어콤어식시카어브라지어브라후이어보도어아쿠즈어부리아타부기어불루어브" + + "린어메둠바어카도어카리브어카유가어앗삼어세부아노어치가어치브차어차가타이어추크어마리어치누크 자곤촉토어치페우얀체로키어샤이엔어소라니 쿠르" + + "드어콥트어크리민 터키어; 크리민 타타르어세이셸 크리올 프랑스어카슈비아어다코타어다르그와어타이타어델라웨어어슬라브어도그리브어딩카어자" + + "르마어도그리어저지 소르비아어두알라어중세 네덜란드어졸라 포니어드율라어다장가어엠부어이픽어고대 이집트어이카죽어엘람어중세 영어이원도어" + + "팡그어필리핀어폰어중세 프랑스어고대 프랑스어북부 프리지아어동부 프리슬란드어프리울리어가어가가우스어간어가요어그바야어조로아스터 다리어" + + "게이즈어키리바시어길라키어중세 고지 독일어고대 고지 독일어고아 콘칸어곤디어고론탈로어고트어게르보어고대 그리스어독일어(스위스)구시어" + + "그위친어하이다어하카어하와이어피지 힌디어헤리가뇬어하타이트어히몸어고지 소르비아어샹어후파어이반어이비비오어이로코어인귀시어로반어응곰바어" + + "마차메어유대-페르시아어유대-아라비아어카라칼파크어커바일어카친어까꼬토끄어캄바어카위어카바르디어카넴부어티얍어마콘데어크리올어코로어카시어" + + "호탄어코이라 친니어코와르어카코어칼렌진어킴분두어코미페르먀크어코카니어코스라이엔어크펠레어카라챠이-발카르어카렐리야어쿠르크어샴발라어바피" + + "아어콜로그니안어쿠믹어쿠테네어라디노어랑기어라한다어람바어레즈기안어링구아 프랑카 노바라코타어몽고어로지어북부 루리어루바-룰루아어루이세" + + "노어룬다어루오어루샤이어루야어마두라어마파어마가히어마이틸리어마카사어만딩고어마사이어마바어모크샤어만다르어멘데어메루어모리스얀어중세 아일" + + "랜드어마크후와-메토어메타어미크맥어미낭카바우어만주어마니푸리어모호크어모시어서부 마리어문당어다중 언어크리크어미란데어마르와리어미예네어" + + "엘즈야어마잔데라니어민난어나폴리어나마어저지 독일어네와르어니아스어니웨언어크와시오어느기엠본어노가이어고대 노르웨이어응코어북부 소토어누" + + "에르어고전 네와르어니암웨지어니안콜어뉴로어느지마어오세이지어오스만 터키어판가시난어팔레비어팜팡가어파피아먼토어팔라우어나이지리아 피진어" + + "고대 페르시아어페니키아어폰틱어폼페이어프러시아어고대 프로방스어키체어라자스탄어라파뉴이라로통가어롬보어집시어루신어아로마니아어르와어산다" + + "웨어야쿠트어사마리아 아랍어삼부루어사사크어산탈리어느감바이어상구어시칠리아어스코틀랜드어남부 쿠르드어세네카어세나어셀쿠프어코이야보로 세" + + "니어고대 아일랜드어타셸히트어샨어차디언 아라비아어시다모어남부 사미어룰레 사미어이나리 사미어스콜트 사미어소닌케어소그디엔어스라난 통" + + "가어세레르어사호어수쿠마어수수어수메르어코모로어고전 시리아어시리아어팀니어테조어테레노어테툼어티그레어티브어토켈라우제도어차후르어클링온어" + + "틀링깃족어탈리쉬어타마섹어니아사 통가어토크 피신어타로코어트심시안어툼부카어투발루어타사와크어투비니안어중앙 모로코 타마지트어우드말트어" + + "유가리틱어움분두어어근바이어보틱어분조어월저어월라이타어와라이어와쇼어왈피리어우어칼미크어소가어야오족어얍페세어양본어옘바어광둥어사포테크어" + + "블리스 심볼제나가어표준 모로코 타마지트어주니어언어 관련 내용 없음자자어현대 표준 아랍어고지 독일어(스위스)영어(호주)저지 색슨" + + "어플라망어몰도바어세르비아-크로아티아어콩고 스와힐리어" + +var koLangIdx = []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0018, 0x0027, 0x0039, 0x0042, 0x004e, 0x005a, + 0x0063, 0x006c, 0x0078, 0x0087, 0x009c, 0x00ab, 0x00ba, 0x00c9, + 0x00d8, 0x00e4, 0x00ed, 0x00f9, 0x0108, 0x0117, 0x0129, 0x0132, + 0x013e, 0x014d, 0x0156, 0x015f, 0x0172, 0x017e, 0x018a, 0x0196, + 0x019f, 0x01ab, 0x01b4, 0x01bd, 0x01c9, 0x01cf, 0x01e1, 0x01ed, + 0x01ff, 0x020b, 0x021a, 0x0223, 0x022f, 0x0238, 0x0241, 0x024d, + 0x0263, 0x0272, 0x028b, 0x029a, 0x02a6, 0x02b5, 0x02c1, 0x02cd, + 0x02d9, 0x02e2, 0x02f2, 0x0304, 0x0310, 0x031c, 0x032e, 0x033a, + // Entry 40 - 7F + 0x0349, 0x035b, 0x036d, 0x0379, 0x0386, 0x0398, 0x03a1, 0x03b3, + 0x03c2, 0x03d4, 0x03dd, 0x03e6, 0x03f2, 0x03fb, 0x0407, 0x0416, + 0x0422, 0x0431, 0x043d, 0x0449, 0x0452, 0x045e, 0x046d, 0x0479, + 0x0482, 0x048b, 0x049a, 0x04a3, 0x04b5, 0x04be, 0x04ca, 0x04d6, + 0x04df, 0x04f1, 0x0504, 0x0513, 0x0522, 0x052b, 0x0537, 0x0549, + 0x0558, 0x0561, 0x056d, 0x0579, 0x0582, 0x058b, 0x0597, 0x05ad, + 0x05b6, 0x05c2, 0x05d1, 0x05f1, 0x060b, 0x0621, 0x062d, 0x0636, + 0x063f, 0x064e, 0x065a, 0x0666, 0x0672, 0x067b, 0x0684, 0x0690, + // Entry 80 - BF + 0x069c, 0x06ab, 0x06b7, 0x06c3, 0x06cc, 0x06db, 0x06e7, 0x06f3, + 0x0705, 0x0717, 0x0720, 0x0730, 0x0739, 0x0748, 0x075a, 0x076c, + 0x0778, 0x0781, 0x0790, 0x079f, 0x07ae, 0x07bd, 0x07cd, 0x07d6, + 0x07e2, 0x07f1, 0x07fa, 0x0806, 0x0812, 0x081b, 0x082a, 0x0839, + 0x0845, 0x084e, 0x0857, 0x0860, 0x086c, 0x0878, 0x0884, 0x0896, + 0x08a2, 0x08b1, 0x08ba, 0x08c6, 0x08d5, 0x08de, 0x08ea, 0x08f3, + 0x08ff, 0x090b, 0x0914, 0x091d, 0x0926, 0x092f, 0x093b, 0x0947, + 0x0953, 0x0966, 0x0978, 0x0984, 0x0990, 0x099c, 0x099c, 0x09a8, + // Entry C0 - FF + 0x09a8, 0x09bb, 0x09c8, 0x09d1, 0x09da, 0x09e9, 0x09e9, 0x09f8, + 0x0a0b, 0x0a0b, 0x0a1a, 0x0a2d, 0x0a40, 0x0a49, 0x0a49, 0x0a5b, + 0x0a5b, 0x0a67, 0x0a73, 0x0a7c, 0x0a7c, 0x0a85, 0x0a8e, 0x0a8e, + 0x0a9a, 0x0aa3, 0x0aac, 0x0aac, 0x0ab5, 0x0ac1, 0x0ac1, 0x0ad4, + 0x0ae3, 0x0aec, 0x0af5, 0x0af5, 0x0afb, 0x0b07, 0x0b07, 0x0b07, + 0x0b13, 0x0b22, 0x0b2b, 0x0b37, 0x0b43, 0x0b4c, 0x0b55, 0x0b5e, + 0x0b6a, 0x0b73, 0x0b7f, 0x0b8b, 0x0b94, 0x0ba3, 0x0bac, 0x0bb8, + 0x0bc7, 0x0bd0, 0x0bd9, 0x0be9, 0x0bf2, 0x0bfe, 0x0c0a, 0x0c16, + // Entry 100 - 13F + 0x0c2c, 0x0c35, 0x0c35, 0x0c60, 0x0c80, 0x0c8f, 0x0c9b, 0x0caa, + 0x0cb6, 0x0cc5, 0x0cd1, 0x0ce0, 0x0ce9, 0x0cf5, 0x0d01, 0x0d17, + 0x0d17, 0x0d23, 0x0d39, 0x0d49, 0x0d55, 0x0d61, 0x0d6a, 0x0d73, + 0x0d73, 0x0d86, 0x0d92, 0x0d9b, 0x0da8, 0x0da8, 0x0db4, 0x0db4, + 0x0dbd, 0x0dc9, 0x0dc9, 0x0dcf, 0x0dcf, 0x0de2, 0x0df5, 0x0df5, + 0x0e0b, 0x0e24, 0x0e33, 0x0e39, 0x0e48, 0x0e4e, 0x0e57, 0x0e63, + 0x0e7c, 0x0e88, 0x0e97, 0x0ea3, 0x0eba, 0x0ed1, 0x0ee1, 0x0eea, + 0x0ef9, 0x0f02, 0x0f0e, 0x0f21, 0x0f35, 0x0f35, 0x0f35, 0x0f3e, + // Entry 140 - 17F + 0x0f4a, 0x0f56, 0x0f5f, 0x0f6b, 0x0f7b, 0x0f8a, 0x0f99, 0x0fa2, + 0x0fb8, 0x0fbe, 0x0fc7, 0x0fd0, 0x0fdf, 0x0feb, 0x0ff7, 0x0ff7, + 0x0ff7, 0x1000, 0x100c, 0x1018, 0x102e, 0x1044, 0x1044, 0x1056, + 0x1062, 0x106b, 0x107a, 0x1083, 0x108c, 0x109b, 0x10a7, 0x10b0, + 0x10bc, 0x10c8, 0x10c8, 0x10d1, 0x10d1, 0x10da, 0x10e3, 0x10f6, + 0x1102, 0x1102, 0x110b, 0x1117, 0x1123, 0x1138, 0x1144, 0x1156, + 0x1162, 0x117b, 0x117b, 0x117b, 0x118a, 0x1196, 0x11a2, 0x11ae, + 0x11c0, 0x11c9, 0x11d5, 0x11e1, 0x11ea, 0x11f6, 0x11ff, 0x120e, + // Entry 180 - 1BF + 0x1228, 0x1228, 0x1228, 0x1234, 0x1234, 0x123d, 0x1246, 0x1256, + 0x1256, 0x1269, 0x1278, 0x1281, 0x128a, 0x1296, 0x129f, 0x129f, + 0x129f, 0x12ab, 0x12b4, 0x12c0, 0x12cf, 0x12db, 0x12e7, 0x12f3, + 0x12fc, 0x1308, 0x1314, 0x131d, 0x1326, 0x1335, 0x134b, 0x1361, + 0x136a, 0x1376, 0x1388, 0x1391, 0x13a0, 0x13ac, 0x13b5, 0x13c5, + 0x13ce, 0x13db, 0x13e7, 0x13f3, 0x1402, 0x1402, 0x140e, 0x141a, + 0x142c, 0x1435, 0x1441, 0x144a, 0x145a, 0x1466, 0x1472, 0x147e, + 0x147e, 0x148d, 0x149c, 0x14a8, 0x14be, 0x14be, 0x14c7, 0x14d7, + // Entry 1C0 - 1FF + 0x14e3, 0x14f6, 0x1505, 0x1511, 0x151a, 0x1526, 0x1535, 0x1548, + 0x1557, 0x1563, 0x156f, 0x1581, 0x158d, 0x158d, 0x15a6, 0x15a6, + 0x15a6, 0x15bc, 0x15bc, 0x15cb, 0x15cb, 0x15d4, 0x15e0, 0x15ef, + 0x1605, 0x160e, 0x160e, 0x161d, 0x1629, 0x1638, 0x1638, 0x1638, + 0x1641, 0x164a, 0x164a, 0x1653, 0x1653, 0x1665, 0x166e, 0x167a, + 0x1686, 0x169c, 0x16a8, 0x16b4, 0x16c0, 0x16c0, 0x16cf, 0x16d8, + 0x16e7, 0x16f9, 0x16f9, 0x170c, 0x1718, 0x1721, 0x1721, 0x172d, + 0x1746, 0x175c, 0x175c, 0x176b, 0x1771, 0x178a, 0x1796, 0x1796, + // Entry 200 - 23F + 0x1796, 0x17a6, 0x17b6, 0x17c9, 0x17dc, 0x17e8, 0x17f7, 0x180a, + 0x1816, 0x181f, 0x181f, 0x182b, 0x1834, 0x1840, 0x184c, 0x185f, + 0x186b, 0x186b, 0x186b, 0x1874, 0x187d, 0x1889, 0x1892, 0x189e, + 0x18a7, 0x18bc, 0x18c8, 0x18d4, 0x18e3, 0x18ef, 0x18fb, 0x190e, + 0x191e, 0x191e, 0x192a, 0x192a, 0x1939, 0x1939, 0x1945, 0x1951, + 0x1960, 0x196f, 0x198f, 0x199e, 0x19ad, 0x19b9, 0x19bf, 0x19c8, + 0x19c8, 0x19c8, 0x19c8, 0x19c8, 0x19d1, 0x19d1, 0x19da, 0x19e3, + 0x19f2, 0x19fe, 0x1a07, 0x1a13, 0x1a19, 0x1a25, 0x1a25, 0x1a2e, + // Entry 240 - 27F + 0x1a3a, 0x1a46, 0x1a4f, 0x1a58, 0x1a58, 0x1a61, 0x1a70, 0x1a80, + 0x1a80, 0x1a8c, 0x1aac, 0x1ab5, 0x1ad0, 0x1ad9, 0x1af0, 0x1af0, + 0x1af0, 0x1b0b, 0x1b19, 0x1b19, 0x1b19, 0x1b19, 0x1b19, 0x1b19, + 0x1b19, 0x1b19, 0x1b19, 0x1b19, 0x1b29, 0x1b35, 0x1b35, 0x1b35, + 0x1b41, 0x1b60, 0x1b76, +} // Size: 1246 bytes + +const kyLangStr string = "" + // Size: 6711 bytes + "афарчаабхазчаафрикаанчааканчаамхарчаарагончоарабчаассамчааварикчеаймарач" + + "аазербайжанчабашкырчабеларусчаболгарчабисламачабамбарачабангладешчетибе" + + "тчебретончобоснийчекаталанчачеченчечаморрочокорсиканчачехчечиркөө славя" + + "нчачувашчауелшчедатчанемисчедивехичежонгучаэбечегрекчеанглисчеэсперанто" + + "испанчаэстончобаскчафарсчафулачафинчефижичефароэчефранцузчабатыш фризче" + + "ирландчакельтчегалисиячагуарашгужаратчаманксычахаусачаивриттехиндичехор" + + "ватчагаитичевенгерчеармянчагерерочоинтерлингваиндонезчеигбочосычуань йи" + + "чеидочоисландчаиталиянчаинуктитутчажапончожаванизчегрузинчекикуйичекуан" + + "ьямачаказакчакалаалисутчакмерчеканнадачакорейчекануричекашмирчекурдчако" + + "мичекорнишчекыргызчалатынчалюксембургчагандачалимбургичелингалачалаочол" + + "итовчолуба-катангачалатышчамалагасчамаршаллчамаоричемакедончомалайаламч" + + "амонголчомаратичемалайчамалтизчебурмачанауручатүндүк ндыбелченепалчандо" + + "нгачаголландчанорвежче (Нинорск)норвежче (Букмал)түштүк ндебелеченавадж" + + "очоньянджачаокситанчаоромочоориячаосетинчепунжабичеполякчапуштучапортуг" + + "алчакечуачароманшчарундичерумынчаорусчаруандачасанскритчесардинчесиндхи" + + "четүндүк самичесангочосингалачасловакчасловенчесамоанчашоначасомаличеал" + + "банчасербчесватичесесоточосунданчашведчесуахиличетамилчетелугучатажикче" + + "тайчатигриниачатүркмөнчөтсваначатонгачатүркчөтсонгачататарчатаитичеуйгу" + + "рчаукраинчеурдучаөзбекчевендачавьетнамчаволапюкчаваллончоуолофчокосачаи" + + "дишчейорубачакытайчазулучаачехчеадаңмечеадыгейчеагемчеайнучаалеутчатүшт" + + "үк алтайчаангикачамапучечеарапахочоасучаастурийчеавадхичебаличебасаачаб" + + "ембачабеначачыгыш балучичебхожпуричебиничесиксикачабодочобугийчеблинчес" + + "ебуанчачигачачуукичемаричечокточочерокичешайеннчеборбордук курдчасеселв" + + "а креол французчадакотачадаргинчетаитачадогрибчезамрачатөмөнкү сорбианч" + + "адуалачажола-фоничедазагачаэмбучаэфикчеэкажукчаэвондочофилипинчефончофр" + + "иулчагачагагаузчаГань Кытайчагиизчегилбертчегоронталочонемисче (Швейцар" + + "ия)гусичегвичинчеХакка кытайчагавайчахилигайнончохмонгчожогорку сорбиан" + + "чаСянь Кытайчахупачаибанчаибибиочоилокочоингушчаложбанчангомбачамачамеч" + + "екабылчакахинчеджучакамбачакабардинчетяпчамакондечекабувердичекорочохас" + + "ичекойра чиничекакочокаленжичекимбундучакоми-пермякчаконканичекпеллечек" + + "арачай-балкарчакарелчекурухчашамабалачабафиячаколоньячакумыкчаладиночол" + + "ангичелезгинчелакотачалозичетүндүк луричелуба-лулуачалундачалуочомизочо" + + "лухиячамадурисчемагахичемаитиличемакасарчамасайчамокшачамендечемеручамо" + + "рисианчамакуачаметачамикмакчаминанкабаучаманипуричемохаукчамоссичемунда" + + "нгчабир нече тилдекрикчемирандизчеэрзянчамазандераничеnanнеополитанчана" + + "мачатөмөнкү немисченеваричениасчаньюанчаквасиочонгимбунчаногайчанкочотү" + + "ндүк сохочонуерченыйанколчопангасичепампангачапапиаменточопалауанчааргы" + + "ндашкан тил (Нигерия)пруссчакичечерапаньючараротонгачаромбочоаромунчару" + + "ачасандавечесахачасамбуручасанталиченгамбайчасангучасицилийчешотландчат" + + "үштүк курдчасеначакойраборо сенничеташелитчешанчатүштүк саамичелуле-сам" + + "ичеинари саамическолт саамичесонинкечесранан тонгочосахочосукумачакомор" + + "чосириячатимнечетесочотетумчатигречеклингончоток-писинчетарокочотумбука" + + "чатувалучатасабакчатувинчеБорбордук Атлас тамазитчеудмуртчаумбундучатүп" + + "күвайичевунжочовалцерчевольяттачаварайчаворлпиричеwuuкалмыкчасогачаянгб" + + "енчейембачакантончомарокко тамазигт адабий тилиндезуничетилдик мазмун ж" + + "окзазачаазыркы адабий араб тилиндеадабий немисче (Швейцария)испанча (Ев" + + "ропа)төмөнкү саксончофламандчапортугалча (Европа)молдованчасерб-хорватк" + + "онго суахаличекытайча (жөнөкөйлөштүрүлгөн)кытайча (салттуу)" + +var kyLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x001a, 0x001a, 0x002e, 0x003a, 0x0048, 0x0058, + 0x0064, 0x0072, 0x0082, 0x0092, 0x00aa, 0x00ba, 0x00cc, 0x00dc, + 0x00ee, 0x0100, 0x0116, 0x0124, 0x0134, 0x0144, 0x0156, 0x0164, + 0x0176, 0x018a, 0x018a, 0x0194, 0x01b1, 0x01bf, 0x01cb, 0x01d5, + 0x01e3, 0x01f3, 0x0201, 0x020b, 0x0217, 0x0227, 0x0239, 0x0247, + 0x0255, 0x0261, 0x026d, 0x0279, 0x0283, 0x028f, 0x029d, 0x02af, + 0x02c6, 0x02d6, 0x02e4, 0x02f6, 0x0302, 0x0314, 0x0324, 0x0332, + 0x0340, 0x034e, 0x034e, 0x035e, 0x036c, 0x037c, 0x038a, 0x039a, + // Entry 40 - 7F + 0x03b0, 0x03c2, 0x03c2, 0x03ce, 0x03e5, 0x03e5, 0x03ef, 0x03ff, + 0x0411, 0x0427, 0x0435, 0x0447, 0x0457, 0x0457, 0x0467, 0x047b, + 0x0489, 0x04a1, 0x04ad, 0x04bf, 0x04cd, 0x04dd, 0x04ed, 0x04f9, + 0x0505, 0x0515, 0x0525, 0x0533, 0x054b, 0x0559, 0x056d, 0x057f, + 0x0589, 0x0597, 0x05b2, 0x05c0, 0x05d2, 0x05e4, 0x05f2, 0x0604, + 0x061a, 0x062a, 0x063a, 0x0648, 0x0658, 0x0666, 0x0674, 0x0691, + 0x069f, 0x06af, 0x06c1, 0x06e2, 0x0701, 0x0720, 0x0732, 0x0744, + 0x0756, 0x0756, 0x0764, 0x0770, 0x0780, 0x0792, 0x0792, 0x07a0, + // Entry 80 - BF + 0x07ae, 0x07c2, 0x07d0, 0x07e0, 0x07ee, 0x07fc, 0x0808, 0x0818, + 0x082c, 0x083c, 0x084c, 0x0865, 0x0873, 0x0885, 0x0895, 0x08a5, + 0x08b5, 0x08c1, 0x08d1, 0x08df, 0x08eb, 0x08f9, 0x0909, 0x0919, + 0x0925, 0x0937, 0x0945, 0x0955, 0x0963, 0x096d, 0x0981, 0x0993, + 0x09a3, 0x09b1, 0x09bd, 0x09cd, 0x09db, 0x09e9, 0x09f7, 0x0a07, + 0x0a13, 0x0a21, 0x0a2f, 0x0a41, 0x0a53, 0x0a63, 0x0a71, 0x0a7d, + 0x0a89, 0x0a99, 0x0a99, 0x0aa7, 0x0ab3, 0x0abf, 0x0abf, 0x0acf, + 0x0adf, 0x0adf, 0x0adf, 0x0aeb, 0x0af7, 0x0af7, 0x0af7, 0x0b05, + // Entry C0 - FF + 0x0b05, 0x0b20, 0x0b20, 0x0b30, 0x0b30, 0x0b40, 0x0b40, 0x0b52, + 0x0b52, 0x0b52, 0x0b52, 0x0b52, 0x0b52, 0x0b5c, 0x0b5c, 0x0b6e, + 0x0b6e, 0x0b7e, 0x0b7e, 0x0b8a, 0x0b8a, 0x0b98, 0x0b98, 0x0b98, + 0x0b98, 0x0b98, 0x0ba6, 0x0ba6, 0x0bb2, 0x0bb2, 0x0bb2, 0x0bcd, + 0x0be1, 0x0be1, 0x0bed, 0x0bed, 0x0bed, 0x0bff, 0x0bff, 0x0bff, + 0x0bff, 0x0bff, 0x0c0b, 0x0c0b, 0x0c0b, 0x0c19, 0x0c19, 0x0c25, + 0x0c25, 0x0c25, 0x0c25, 0x0c25, 0x0c25, 0x0c35, 0x0c41, 0x0c41, + 0x0c41, 0x0c4f, 0x0c5b, 0x0c5b, 0x0c69, 0x0c69, 0x0c79, 0x0c89, + // Entry 100 - 13F + 0x0ca8, 0x0ca8, 0x0ca8, 0x0ca8, 0x0cd4, 0x0cd4, 0x0ce4, 0x0cf4, + 0x0d02, 0x0d02, 0x0d02, 0x0d12, 0x0d12, 0x0d20, 0x0d20, 0x0d41, + 0x0d41, 0x0d4f, 0x0d4f, 0x0d64, 0x0d64, 0x0d74, 0x0d80, 0x0d8c, + 0x0d8c, 0x0d8c, 0x0d9c, 0x0d9c, 0x0d9c, 0x0d9c, 0x0dac, 0x0dac, + 0x0dac, 0x0dbe, 0x0dbe, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dc8, + 0x0dc8, 0x0dc8, 0x0dd6, 0x0dde, 0x0dee, 0x0e05, 0x0e05, 0x0e05, + 0x0e05, 0x0e11, 0x0e23, 0x0e23, 0x0e23, 0x0e23, 0x0e23, 0x0e23, + 0x0e39, 0x0e39, 0x0e39, 0x0e39, 0x0e5c, 0x0e5c, 0x0e5c, 0x0e68, + // Entry 140 - 17F + 0x0e78, 0x0e78, 0x0e91, 0x0e9f, 0x0e9f, 0x0eb7, 0x0eb7, 0x0ec5, + 0x0ee6, 0x0efd, 0x0f09, 0x0f15, 0x0f25, 0x0f33, 0x0f41, 0x0f41, + 0x0f41, 0x0f51, 0x0f61, 0x0f71, 0x0f71, 0x0f71, 0x0f71, 0x0f71, + 0x0f7f, 0x0f8d, 0x0f97, 0x0fa5, 0x0fa5, 0x0fb9, 0x0fb9, 0x0fc3, + 0x0fd5, 0x0feb, 0x0feb, 0x0ff7, 0x0ff7, 0x1003, 0x1003, 0x101a, + 0x101a, 0x101a, 0x1026, 0x1038, 0x104c, 0x1065, 0x1077, 0x1077, + 0x1087, 0x10a6, 0x10a6, 0x10a6, 0x10b4, 0x10c2, 0x10d6, 0x10e4, + 0x10f6, 0x1104, 0x1104, 0x1114, 0x1122, 0x1122, 0x1122, 0x1132, + // Entry 180 - 1BF + 0x1132, 0x1132, 0x1132, 0x1142, 0x1142, 0x1142, 0x114e, 0x1167, + 0x1167, 0x117e, 0x117e, 0x118c, 0x1196, 0x11a2, 0x11b0, 0x11b0, + 0x11b0, 0x11c2, 0x11c2, 0x11d2, 0x11e4, 0x11f6, 0x11f6, 0x1204, + 0x1204, 0x1212, 0x1212, 0x1220, 0x122c, 0x1240, 0x1240, 0x124e, + 0x125a, 0x126a, 0x1282, 0x1282, 0x1296, 0x12a6, 0x12b4, 0x12b4, + 0x12c6, 0x12e0, 0x12ec, 0x1300, 0x1300, 0x1300, 0x1300, 0x130e, + 0x1328, 0x132b, 0x1343, 0x134f, 0x136c, 0x137c, 0x1388, 0x1396, + 0x1396, 0x13a6, 0x13b8, 0x13c6, 0x13c6, 0x13c6, 0x13d0, 0x13e9, + // Entry 1C0 - 1FF + 0x13f5, 0x13f5, 0x13f5, 0x1409, 0x1409, 0x1409, 0x1409, 0x1409, + 0x141b, 0x141b, 0x142f, 0x1447, 0x1459, 0x1459, 0x1487, 0x1487, + 0x1487, 0x1487, 0x1487, 0x1487, 0x1487, 0x1487, 0x1487, 0x1495, + 0x1495, 0x14a1, 0x14a1, 0x14a1, 0x14b3, 0x14c9, 0x14c9, 0x14c9, + 0x14d7, 0x14d7, 0x14d7, 0x14d7, 0x14d7, 0x14e7, 0x14f1, 0x1503, + 0x150f, 0x150f, 0x1521, 0x1521, 0x1533, 0x1533, 0x1545, 0x1553, + 0x1565, 0x1577, 0x1577, 0x1590, 0x1590, 0x159c, 0x159c, 0x159c, + 0x15bd, 0x15bd, 0x15bd, 0x15cf, 0x15d9, 0x15d9, 0x15d9, 0x15d9, + // Entry 200 - 23F + 0x15d9, 0x15f4, 0x1609, 0x1622, 0x163b, 0x164d, 0x164d, 0x1668, + 0x1668, 0x1674, 0x1674, 0x1684, 0x1684, 0x1684, 0x1692, 0x1692, + 0x16a0, 0x16a0, 0x16a0, 0x16ae, 0x16ba, 0x16ba, 0x16c8, 0x16d6, + 0x16d6, 0x16d6, 0x16d6, 0x16e8, 0x16e8, 0x16e8, 0x16e8, 0x16e8, + 0x16fd, 0x16fd, 0x170d, 0x170d, 0x170d, 0x170d, 0x171f, 0x172f, + 0x1741, 0x174f, 0x177f, 0x178f, 0x178f, 0x17a1, 0x17ab, 0x17b7, + 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17c5, 0x17d5, + 0x17e9, 0x17f7, 0x17f7, 0x180b, 0x180e, 0x181e, 0x181e, 0x182a, + // Entry 240 - 27F + 0x182a, 0x182a, 0x183a, 0x1848, 0x1848, 0x1858, 0x1858, 0x1858, + 0x1858, 0x1858, 0x1893, 0x189f, 0x18bf, 0x18cb, 0x18fc, 0x18fc, + 0x18fc, 0x192c, 0x192c, 0x192c, 0x192c, 0x192c, 0x192c, 0x1949, + 0x1949, 0x1949, 0x1949, 0x1949, 0x1968, 0x197a, 0x197a, 0x199d, + 0x19b1, 0x19c6, 0x19e3, 0x1a18, 0x1a37, +} // Size: 1250 bytes + +const loLangStr string = "" + // Size: 10855 bytes + "ອະຟາແອບຄາຊຽນອາເວັສແຕນອາຟຣິການອາການອຳຮາຣິກອາຣາໂກເນັດອາຣັບອັສຊາມີສອາວາຣິກອ" + + "າຍມາລາອາເຊີໄບຈານິບາຣກີເບລາຣັສຊຽນບັງກາຣຽນບິສລະມາບາມບາຣາເບັງກາລີທິເບທັນເ" + + "ບຣຕັນບອສນຽນຄາຕາລານຊີເຄນຊາມໍໂຣຄໍຊິກາຄີເຊກໂບດສລາວິກຊູວາຊເວວແດນິຊເຢຍລະມັນ" + + "ດີວີຮີດີຊອງຄາອິວາກຣີກອັງກິດເອສປາຍສະແປນນິຊເອສໂຕນຽນບັສກີເປີຊຽນຟູລາຟິນນິຊ" + + "ຟິຈຽນຟາໂຣສຝຣັ່ງຟຣິຊຽນ ຕາເວັນຕົກໄອຣິສສະກັອດເກລິກກາລິຊຽນກົວຣານີກູຈາຣາຕິແ" + + "ມງຊ໌ເຮົາຊາຮີບຣິວຮິນດິຮິຣິໂມຕູໂຄຣເອທຽນໄຮຕຽນຮັງກາຣຽນອາເມນຽນເຮິຮິໂຣອິນເຕີ" + + "ລິງລົວອິນໂດເນຊຽນອິນເຕີລິງກຣີອິກໂບເຊສວຍຢີອິນນູປຽກອີໂດໄອສແລນດິກອິຕາລຽນອິ" + + "ນນຸກຕິຕັດຍີ່ປຸ່ນຈາແວນີສຈໍຈຽນຄອງໂກຄິຄູຢຸກວນຍາມາຄາຊັກກຣີນແລນລິດຂະເໝນຄັນນ" + + "າດາເກົາຫລີຄານຸລິຄາສເມຍຣິເຄີດິສໂຄມິຄໍນິຊເກຍກີສລາຕິນລັກເຊມບວກກິຊແກນດາລິມ" + + "ເບີກີຊລິງກາລາລາວລິທົວນຽນລູບາ-ຄາຕັງກາລັດວຽນມາລາກາສຊີມາຊານເລັດມາວຣິແມຊິໂ" + + "ດນຽນມາເລອາລຳມອງໂກເລຍມາຣາທີມາເລມອລທີສມຽນມານາຢູລູເອັນເດເບເລເໜືອເນປາລີເອັ" + + "ນດອງກາດັຊນໍເວຈຽນ ນີນອກນໍເວຈຽນ ບັອກມອລນີບີລີໃຕ້ນາວາໂຈນານຈາອັອກຊີຕານໂອຈິ" + + "ບວາໂອໂຣໂມໂອຣິຢາອອດເຊຕິກປັນຈາບີປາລີໂປລິຊປາສໂຕປອກຕຸຍກິສຄີຊົວໂຣແມນຊ໌ຣຸນດິ" + + "ໂຣແມນຽນລັດເຊຍຄິນຢາວານດາສັນສະກຣິດສາດີນຽນສິນທິຊາມິເໜືອແຊງໂກສິນຫາລາສະໂລແວ" + + "ັກສະໂລເວນຽນຊາມົວໂຊນາໂຊມາລີອານບານຽນເຊີບຽນຊຣາຕິໂຊໂທໃຕ້ຊຸນແດນນີສສະວີດິຊຊວ" + + "າຮີລິທາມິລເຕລູກູທາຈິກໄທຕິກຣິນຢາເທີກເມັນເຕສະວານາທອງການເທີຄິຊເຕຊອງກາທາທາ" + + "ຕາຮີຕຽນອຸຍເຄີຢູເຄຣນຽນອູຣດູອຸສເບກເວນດາຫວຽດນາມໂວລາພັກວໍລູມວໍລອບໂຮຊາຢິວໂຢ" + + "ຣູບາຊວາງຈີນຊູລູແອັກຊີເນັສອາໂຄລີອາແດງມີເອດີຮິແອຟີຮີລີອາເຮັມໄອນູອັກກາດຽມ" + + "ອາເລີດອານໄຕໃຕ້ອັງກິດໂບຮານແອນຈີກາອາລາມິກມາພຸດຊີອາຣາປາໂຮອາຣາແວກອາຊູອັສຕູ" + + "ຮຽນອາວາຮິບາລູຊີບາລີເນັດບາຊາບາມຸນໂຄມາລາບີເຈເບັມບາບີນາບາຟັດບາໂລຈີ ພາກຕາເ" + + "ວັນຕົກໂບພູຣິບີຄອນບີນີກົມຊິກຊິກາບຣາໂບດູອາຄຸດບູຣຽດບູຈີເນັດບູລູບລິນເມດູມບ" + + "າແຄດໂດຄາຣິບຄາຢູກາອາດແຊມຊີບູໂນຊີກາຊິບຊາຊາກາໄຕຊູເກດມາຣິຊີນຸກຈາກອນຊອກຕິວຊ" + + "ີພິວຢານຊີໂຣກີຊີເຢນນີໂຊຣານິ ເຄີດິຊຄອບຕິກຄຣີເມນເຕີຄິຊເຊເຊວາ ໂຄຣດ ຝຣັ່ງກາ" + + "ຊູບຽນດາໂກຕາດາກວາໄຕຕາເດລາວາຊີເລັບໂດກຣິບດິນກາຊາມາດອກຣີຊໍບຽນຕໍ່ກວ່າດົວລາດ" + + "ັກກາງໂຈລາ-ຟອນຢີດູລາດາຊາກາເອັມບູອີຟິກອີຢິບບູຮານອີກາຈັກອີລາໄມອັງກິດກາງອີ" + + "ວອນດູແຟງຟີລິປີໂນຟອນຟຮັ່ງເສດກາງຟຮັ່ງເສດໂບຮານຟຣີຊຽນເໜືອຟຣີຊຽນຕາເວັນອອກຟຣ" + + "ີລຽນກາກາກາອຸຊກາໂຢບາຍາກີກິນເບີເທັດເຢຍລະມັນສູງກາງເຢຍລະມັນສູງໂບຮານກອນດີໂກ" + + "ຣອນຕາໂຣກອດຮິກກຣີໂບແອນຊຽນກຣີກສະວິສ ເຈີແມນກູຊິວິດອິນໄຮດາຮາໄວອຽນຮິຣິໄກນອນ" + + "ຮິດໄຕມອງຊໍບຽນ ທາງຕອນເໜືອຮູປາໄອບານໄອໄບໄບໂອໄອໂລໂກອິນກັຊໂລບບັນງອມບາມາແຊມຈ" + + "ູແດວ-ເພີຊຽນຈູແດວ-ອາລາບິກກາຣາ-ການປາກກາໄບລ໌ກາຊິນຈຣູກາມບາກະວີກາບາດຽນຄາແນມ" + + "ບູຕີບມາຄອນເດຄາເວີເດຍນູໂຄໂລຄາສິໂຄຕັນຄອຍຣາ ຊິນີຄາໂກຄາເລັນຈິນຄິມບັນດູໂຄມີ" + + "-ເພີມຢັກກອນການີຄູສໄລກາແປຣກາຣາໄຊ-ບານກາກາເຣລຽນກູຣູກຊຳບາລ້າບາເຟຍໂຄລອກນຽນຄູມ" + + "ີກຄູເທໄນລາດີໂນແລນກິລານດາແລມບາລີຊຽນລາໂກຕາແມັງໂກ້ໂລຊິລູຣິ ທາງຕອນເໜືອລູບາ" + + "-ລູລົວລູເຊໂນລຸນດາລົວລູໄຊລູໄຍມາດູລາມາຟາມາກາຮິໄມທີລິມາກາຊາຣມັນດິງກາມາໄຊມາບ" + + "າມອກຊາມານດາຣເມນເດເມຣູມໍຣິສເຢນໄອລິດກາງມາຄູວາ-ມີດໂຕເມທາມິກແມກທີແນງກາບູແມ" + + "ນຈູມານີພູຣິໂມຫາມອສຊີມັນດັງຫລາຍພາສາຄຣິກມີລັນດາມາວາຣິມໍຢິນເອີຍາມາແຊນເດີລ" + + "ັງນາໂປລີນາມາເຢຍລະມັນ ຕອນໄຕ້ນີວາຣິນີ່ອັດນີ່ອູກວາຊີໂອຈີ່ມບູນນໍໄກນໍໂບຮານເ" + + "ອັນໂກໂຊໂທເໜືອເນີເນວາດັ້ງເດີມນາມວີຊິນານຄອນໂນໂຣນິມາໂອແຊກຕູກີອອດໂຕມັນປານກ" + + "າຊີມານພາລາວີປາມປານກາປາມເປຍເມັນໂທປາລົວອານໄນຈີຣຽນພິດກິນເປີເຊຍໂບຮານຟີນີເຊ" + + "ຍພອນເພໂປວອງຊານໂບຮານKʼicheʼຣາຈັສທານິຣາປານຸຍຣາໂຣທອນການຣົມໂບໂຣເມນີອາໂຣມານ" + + "ຽນອາຣວາຊັນດາວຊາກາສາມາຣິແຕນ-ຊຳບູຣູຊາຊັກຊານທາລິກຳເບຊານກູຊີຊິລີນສກອດພາກໄຕ" + + "້ ຂອງ ກູດິດຊີນີກາຊີນາເຊນຄັບໂຄຍຣາໂບໂຣ ເຊນນິອີຣິຊເກົ່າທາເຊວຫິດຊານອາລັບ-ຊ" + + "າດຊິດາໂມຊາມິໃຕ້ລຸນຊາມິອີນາຣິຊາມິສກອດຊາມິໂຊນິນກີຊອກດິນສຣານນານຕອນໂກເຊເລີ" + + "ຊາໂຮຊູຄູມ້າຊູຊູຊູເມີເລຍໂຄໂນຣຽນຊີເລຍແບບດັ້ງເດີມຊີເລຍທີມເນເຕໂຊເຕເລໂນເຕຕູ" + + "ມໄທກຣີຕີວໂຕເກເລົາຄຣິງກອນທລີງກິດທາມາກເຊກນາຍອາຊາຕອງກາທອກພີຊິນຕາໂລໂກຊີມຊີ" + + "ແອນຕຳບູກາຕູວາລູຕາຊາວັກຕູວີນຽນອັດລາສ ທາມາຊີກ ກາງອຸດມັດຢູກາລິກອຳບັນດູລູດ" + + "ໄວໂວຕິກວັນໂຈວາເຊີວາລາໂມວາເລວາໂຊວາຣພິຣິການມິກໂຊກາເຢົ້າຢັບແຍງເບນແຢມບາກວາ" + + "ງຕຸ້ງຊາໂປແຕບສັນຍາລັກບລີຊິມເຊນາກາໂມຣັອກແຄນ ທາມາຊີກ ມາດຕະຖານຊູນີບໍ່ມີເນື" + + "້ອຫາພາສາຊາຊາອາຣາບິກມາດຕະຖານສະໄໝໃໝ່ເຢຍລະມັນ (ໂອສຕຣິດ)ສະວິສ ໄຮ ເຈີແມນອັງ" + + "ກິດ (ໂອດສະຕາລີ)ອັງກິດ (ບຣິດທິຊ)ອັງກິດ (ອາເມລິກັນ)ລາຕິນ ອາເມຣິກັນ ສະແປນ" + + "ນິຊສະເປັນ ຢຸໂຣບເມັກຊິກັນ ສະແປນນິຊຟລັງ(ການາດາ)ຊາຊອນ ຕອນໄຕຟລີມິຊປອກຕຸຍກິ" + + "ສ ບະເລຊີ່ນປອກຕຸຍກິສ ຢຸໂຣບໂມດາວຽນເຊີໂບ-ໂກເຊຍຄອງໂກ ຊວາຮີລິຈີນແບບຮຽບງ່າຍຈ" + + "ີນແບບດັ້ງເດີມ" + +var loLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0024, 0x003f, 0x0057, 0x0066, 0x007b, 0x0099, + 0x00a8, 0x00c0, 0x00d5, 0x00ea, 0x010b, 0x011a, 0x0138, 0x0150, + 0x0165, 0x017a, 0x0192, 0x01a7, 0x01b9, 0x01cb, 0x01e0, 0x01ef, + 0x0201, 0x0213, 0x0219, 0x0222, 0x023d, 0x024c, 0x0255, 0x0264, + 0x027c, 0x028e, 0x02a3, 0x02af, 0x02bb, 0x02cd, 0x02df, 0x02f7, + 0x030f, 0x031e, 0x0330, 0x033c, 0x034e, 0x035d, 0x036c, 0x037b, + 0x03a9, 0x03b8, 0x03d9, 0x03ee, 0x0403, 0x041b, 0x042a, 0x043c, + 0x044e, 0x045d, 0x0475, 0x048d, 0x049c, 0x04b4, 0x04c9, 0x04de, + // Entry 40 - 7F + 0x0502, 0x0520, 0x0544, 0x0553, 0x0568, 0x0580, 0x058c, 0x05a7, + 0x05bc, 0x05dd, 0x05f2, 0x0607, 0x0616, 0x0625, 0x0637, 0x064c, + 0x065b, 0x0679, 0x0688, 0x069d, 0x06b2, 0x06c4, 0x06dc, 0x06ee, + 0x06fa, 0x0709, 0x071b, 0x072a, 0x074e, 0x075d, 0x0778, 0x078d, + 0x0796, 0x07ae, 0x07d0, 0x07e2, 0x07fd, 0x0818, 0x0827, 0x0842, + 0x085a, 0x0872, 0x0884, 0x0890, 0x08a2, 0x08b1, 0x08c3, 0x08ed, + 0x08ff, 0x091a, 0x0923, 0x0948, 0x0973, 0x098e, 0x09a0, 0x09af, + 0x09ca, 0x09df, 0x09f1, 0x0a03, 0x0a1b, 0x0a30, 0x0a3c, 0x0a4b, + // Entry 80 - BF + 0x0a5a, 0x0a75, 0x0a84, 0x0a99, 0x0aa8, 0x0abd, 0x0acf, 0x0aed, + 0x0b08, 0x0b1d, 0x0b2c, 0x0b44, 0x0b53, 0x0b68, 0x0b80, 0x0b9b, + 0x0baa, 0x0bb6, 0x0bc8, 0x0be0, 0x0bf2, 0x0c01, 0x0c16, 0x0c31, + 0x0c46, 0x0c5b, 0x0c6a, 0x0c7c, 0x0c8b, 0x0c91, 0x0ca9, 0x0cc1, + 0x0cd9, 0x0ceb, 0x0cfd, 0x0d12, 0x0d1e, 0x0d33, 0x0d45, 0x0d5d, + 0x0d6c, 0x0d7e, 0x0d8d, 0x0da2, 0x0db7, 0x0dc6, 0x0dd5, 0x0de1, + 0x0dea, 0x0dfc, 0x0e08, 0x0e11, 0x0e1d, 0x0e3b, 0x0e4d, 0x0e62, + 0x0e74, 0x0e74, 0x0e8c, 0x0e9e, 0x0eaa, 0x0ec2, 0x0ec2, 0x0ed4, + // Entry C0 - FF + 0x0ed4, 0x0eec, 0x0f0d, 0x0f22, 0x0f37, 0x0f4c, 0x0f4c, 0x0f64, + 0x0f64, 0x0f64, 0x0f79, 0x0f79, 0x0f79, 0x0f85, 0x0f85, 0x0f9d, + 0x0f9d, 0x0faf, 0x0fc1, 0x0fd9, 0x0fd9, 0x0fe5, 0x0ff4, 0x0ff4, + 0x1006, 0x1012, 0x1024, 0x1024, 0x1030, 0x103f, 0x103f, 0x1076, + 0x1088, 0x1097, 0x10a3, 0x10a3, 0x10ac, 0x10c1, 0x10c1, 0x10c1, + 0x10ca, 0x10ca, 0x10d6, 0x10e5, 0x10f4, 0x110c, 0x1118, 0x1124, + 0x1139, 0x1148, 0x1157, 0x1169, 0x117b, 0x118d, 0x1199, 0x11a8, + 0x11ba, 0x11c9, 0x11d5, 0x11f3, 0x1205, 0x121d, 0x122f, 0x1244, + // Entry 100 - 13F + 0x1269, 0x127b, 0x127b, 0x129f, 0x12ce, 0x12e3, 0x12f5, 0x1304, + 0x1310, 0x1322, 0x1334, 0x1346, 0x1355, 0x1361, 0x1370, 0x1394, + 0x1394, 0x13a3, 0x13b5, 0x13d1, 0x13dd, 0x13ef, 0x1401, 0x1410, + 0x1410, 0x142e, 0x1443, 0x1455, 0x1470, 0x1470, 0x1485, 0x1485, + 0x148e, 0x14a6, 0x14a6, 0x14af, 0x14af, 0x14d0, 0x14f7, 0x14f7, + 0x1515, 0x1542, 0x1554, 0x155a, 0x156f, 0x156f, 0x157b, 0x1587, + 0x1587, 0x158d, 0x15ab, 0x15ab, 0x15d5, 0x1605, 0x1605, 0x1614, + 0x162f, 0x1641, 0x1650, 0x166e, 0x1690, 0x1690, 0x1690, 0x169c, + // Entry 140 - 17F + 0x16ae, 0x16ba, 0x16ba, 0x16cf, 0x16cf, 0x16ea, 0x16f9, 0x1702, + 0x1730, 0x1730, 0x173c, 0x174b, 0x1763, 0x1775, 0x1787, 0x1787, + 0x1787, 0x1799, 0x17a8, 0x17b7, 0x17d9, 0x17fe, 0x17fe, 0x181d, + 0x182f, 0x183e, 0x1847, 0x1856, 0x1862, 0x1877, 0x188c, 0x1895, + 0x18aa, 0x18c8, 0x18c8, 0x18d4, 0x18d4, 0x18e0, 0x18ef, 0x190b, + 0x190b, 0x190b, 0x1917, 0x1932, 0x194a, 0x196c, 0x1981, 0x1990, + 0x199f, 0x19c1, 0x19c1, 0x19c1, 0x19d6, 0x19e5, 0x19fa, 0x1a09, + 0x1a21, 0x1a30, 0x1a42, 0x1a54, 0x1a63, 0x1a72, 0x1a81, 0x1a90, + // Entry 180 - 1BF + 0x1a90, 0x1a90, 0x1a90, 0x1aa2, 0x1aa2, 0x1ab7, 0x1ac3, 0x1aee, + 0x1aee, 0x1b0a, 0x1b1c, 0x1b2b, 0x1b34, 0x1b40, 0x1b4c, 0x1b4c, + 0x1b4c, 0x1b5e, 0x1b6a, 0x1b7c, 0x1b8e, 0x1ba3, 0x1bbb, 0x1bc7, + 0x1bd3, 0x1be2, 0x1bf4, 0x1c03, 0x1c0f, 0x1c27, 0x1c3f, 0x1c61, + 0x1c6d, 0x1c7f, 0x1c9a, 0x1ca9, 0x1cc1, 0x1ccd, 0x1cdc, 0x1cdc, + 0x1cee, 0x1d06, 0x1d12, 0x1d27, 0x1d39, 0x1d39, 0x1d48, 0x1d57, + 0x1d78, 0x1d78, 0x1d8a, 0x1d96, 0x1dc1, 0x1dd3, 0x1de5, 0x1df4, + 0x1df4, 0x1e09, 0x1e1e, 0x1e2a, 0x1e3f, 0x1e3f, 0x1e51, 0x1e69, + // Entry 1C0 - 1FF + 0x1e72, 0x1e96, 0x1eab, 0x1ebd, 0x1ec9, 0x1ed5, 0x1ee4, 0x1f08, + 0x1f26, 0x1f38, 0x1f50, 0x1f74, 0x1f8c, 0x1f8c, 0x1fb3, 0x1fb3, + 0x1fb3, 0x1fd4, 0x1fd4, 0x1fe9, 0x1fe9, 0x1fe9, 0x1ff8, 0x1ff8, + 0x201f, 0x2028, 0x2028, 0x2043, 0x2058, 0x2076, 0x2076, 0x2076, + 0x2085, 0x2097, 0x2097, 0x2097, 0x2097, 0x20b2, 0x20c1, 0x20d3, + 0x20df, 0x20fb, 0x210d, 0x211c, 0x2131, 0x2131, 0x213d, 0x214c, + 0x2161, 0x216d, 0x216d, 0x2199, 0x21ab, 0x21b7, 0x21b7, 0x21c9, + 0x21f4, 0x2212, 0x2212, 0x222a, 0x2233, 0x224c, 0x225e, 0x225e, + // Entry 200 - 23F + 0x225e, 0x2273, 0x2288, 0x22a6, 0x22be, 0x22d3, 0x22e5, 0x2309, + 0x2318, 0x2324, 0x2324, 0x2339, 0x2345, 0x235d, 0x2372, 0x23a2, + 0x23b1, 0x23b1, 0x23b1, 0x23c0, 0x23cc, 0x23de, 0x23ed, 0x23fc, + 0x2405, 0x241d, 0x241d, 0x2432, 0x2447, 0x2447, 0x245f, 0x2483, + 0x249b, 0x249b, 0x24ad, 0x24ad, 0x24c5, 0x24c5, 0x24d7, 0x24e9, + 0x24fe, 0x2513, 0x2545, 0x2557, 0x256c, 0x2581, 0x258a, 0x2590, + 0x2590, 0x2590, 0x2590, 0x2590, 0x259f, 0x259f, 0x25ae, 0x25bd, + 0x25cf, 0x25db, 0x25e7, 0x25fc, 0x25fc, 0x260e, 0x260e, 0x261a, + // Entry 240 - 27F + 0x2629, 0x2632, 0x2644, 0x2653, 0x2653, 0x266b, 0x2680, 0x26aa, + 0x26aa, 0x26bc, 0x2706, 0x2712, 0x2742, 0x274e, 0x2790, 0x2790, + 0x27c0, 0x27e9, 0x2819, 0x2819, 0x2843, 0x2873, 0x28b7, 0x28d9, + 0x290d, 0x290d, 0x292d, 0x292d, 0x294c, 0x295e, 0x2992, 0x29bd, + 0x29d2, 0x29f1, 0x2a16, 0x2a3d, 0x2a67, +} // Size: 1250 bytes + +const ltLangStr string = "" + // Size: 5947 bytes + "afarųabchazųavestųafrikanųakanųamharųaragonesųarabųasamųavarikųaimarųaze" + + "rbaidžaniečiųbaškirųbaltarusiųbulgarųbislamabambarųbengalųtibetiečiųbret" + + "onųbosniųkatalonųčečėnųčamorųkorsikiečiųkryčekųbažnytinė slavųčiuvašųval" + + "ųdanųvokiečiųdivehųbotijųeviųgraikųanglųesperantoispanųestųbaskųpersųfu" + + "lahųsuomiųfidžiųfarerųprancūzųvakarų fryzųairiųškotų (gėlų)galisųgvarani" + + "ųgudžaratųmeniečiųhausųhebrajųhindihiri motukroatųHaičiovengrųarmėnųher" + + "erųtarpinėindoneziečiųinterkalbaigbųsičuan jiinupiakųidoislandųitalųinuk" + + "itutjaponųjaviečiųgruzinųKongokikujųkuaniamakazachųkalalisutkhmerųkanadų" + + "korėjiečiųkanuriųkašmyrųkurdųkomikornųkirgizųlotynųliuksemburgiečiųganda" + + "limburgiečiųngalųlaosiečiųlietuviųluba katangalatviųmalagasųMaršalo Salų" + + "maoriųmakedonųmalajaliųmongolųmaratųmalajiečiųmaltiečiųbirmiečiųnaurųšia" + + "urės ndebelųnepaliečiųndongųolandųnaujoji norvegųnorvegų bukmolaspietų n" + + "debelenavajųnianjųočitarųojibvaoromųodijųosetinųpendžabųpalilenkųpuštūnų" + + "portugalųkečujųretoromanųrundirumunųrusųkinjaruandųsanskritassardiniečių" + + "sindųšiaurės samiųsangosinhalųslovakųslovėnųSamoašonųsomaliečiųalbanųser" + + "bųsvatųpietų Sotosundųšvedųsuahiliųtamilųtelugųtadžikųtajųtigrajųturkmėn" + + "ųtsvanųtonganųturkųtsongųtotoriųtaitiečiųuigūrųukrainiečiųurdųuzbekųven" + + "dųvietnamiečiųvolapiukovalonųvolofųkosųjidišjorubųchuangkinųzulųačinezųa" + + "koliųadangmųadygėjųTuniso arabųafrihiliaghemųainųakadianųalabamiečiųaleu" + + "tųalbanų kalbos gegų tarmėpietų Altajaussenoji anglųangikųaramaikųmapudu" + + "ngunųaraonųarapahųAlžyro arabųaravakųMaroko arabųEgipto arabųasuAmerikos" + + " ženklų kalbaasturianųkotavaavadhibalučibaliečiųbavarųbasųbamunųbatak to" + + "baghomalųbėjųbembųbetavibenųbafutųbadagavakarų beludžiųbaučpuribikolųbin" + + "ibandžarųkomųsiksikųbišnuprijosbakhtiaribrajųbrahujųbodoakūsųburiatųbugi" + + "nezųbulublinmedumbųkadokaribųkaijūgųatsamųsebuanųčigųčibčųčagatųčukesųma" + + "riųčinuk žargonasčoktaučipvėjųčerokiųčajenųsoranių kurdųkoptųcapiznonKry" + + "mo turkųSeišelių kreolų ir prancūzųkašubųdakotųdargvataitųdelaveroslaved" + + "ogribųdinkųzarmųdogrižemutinių sorbųcentrinio DusunodualųVidurio Vokieti" + + "josdžiola-fonidyulųdazagųembuefikitalų kalbos Emilijos tarmėsenovės egip" + + "tiečiųekajukelamitųVidurio Anglijoscentrinės Aliaskos jupikųevondoispanų" + + " kalbos Ekstremadūros tarmėfangųfilipiniečiųsuomių kalbos Tornedalio tar" + + "mėfonkadžunų prancūzųVidurio Prancūzijossenoji prancūzųarpitanošiaurinių" + + " fryzųrytų fryzųfriuliųgagagaūzųkinų kalbos dziangsi tarmėgajogbajazoroa" + + "strų darigyzkiribatigilakiVidurio Aukštosios Vokietijossenoji Aukštosios" + + " VokietijosGoa konkaniųgondigorontalogotųgrebosenovės graikųŠveicarijos " + + "vokiečiųvajųfrafragusigvičinohaidokinų kalbos hakų tarmėhavajiečiųFidžio" + + " hindihiligainonųhititųhmongaukštutinių sorbųkinų kalbos hunano tarmėhup" + + "aibanibibijųilokųingušųingrųJamaikos kreolų anglųloibanngombųmačamųjudėj" + + "ų persųjudėjų arabųdanų kalbos jutų tarmėkarakalpakųkebailųkačinųjukemb" + + "ųkaviųkabardinųkanembųtyapmakondųŽaliojo Kyšulio kreolųkenyangkorokaing" + + "angkasikotanezųkojra činikhovarųkirmanjkikakokalenjinųkimbundukomių-perm" + + "iųkonkaniųkosreanųkpeliųkaračiajų balkarijoskriokinaray-akarelųkurukšamb" + + "alųbafųkolognųkumikųkutenailadinolangilandalambalezginųnaujoji frankų ka" + + "lbaligūrųlyviųlakotųlombardųmongųloziųšiaurės lurilatgaliųluba lulualuis" + + "enoLundosluomizolujaklasikinė kinųlazmadurezųmafųmagahimaithiliMakasarom" + + "andingųmasajųmabųmokšamandarųmendemerųmorisijųVidurio Airijosmakua-maeto" + + "metamikmakųminangkabaumančumanipuriųmohokmosivakarų marimundangųkelios k" + + "alboskrykųmirandezųmarvarimentavaimjenųerzyjųmazenderaniųkinų kalbos pie" + + "tų minų tarmėneapoliečiųnamaŽemutinės Vokietijosnevariniasniujiečiųao na" + + "gakvasiųngiembūnųnogųsenoji norsųnovialenkošiaurės Sotonuerųklasikinė ne" + + "variniamveziniankolųniorųnzimaosageosmanų turkųpangasinanųvidurinė persų" + + " kalbapampangųpapiamentopalauliečiųpikardųNigerijos pidžinųPensilvanijos" + + " vokiečiųvokiečių kalbos žemaičių tarmėsenoji persųvokiečių kalbos Pfalc" + + "o tarmėfinikiečiųitalų kalbos Pjemonto tarmėPontoPonapėsprūsųsenovės pro" + + "vansalųkičiųČimboraso aukštumų kečujųRadžastanorapanuirarotonganųitalų k" + + "albos Romanijos tarmėrifųromboromųrotumanųrusinųRovianosaromaniųruasanda" + + "viųjakutųsamarėjų aramiųsambūrųsasaksantaliųsauraštrųngambajųsangųsicili" + + "ečiųškotųsasaresų sardinųpietų kurdųsenecųsenųseriselkupkojraboro senise" + + "noji airiųžemaičiųtachelhitųšanchadian arabųsidamųsileziečių žemaičiųsel" + + "ajarųpietų samiųLiuleo samiųInario samiųSkolto samiųsoninkesogdiensranan" + + " tongosererųsahoSaterlendo fryzųsukumasusušumerųkomorųklasikinė sirųsirų" + + "sileziečiųtulųtimnetesoTerenotetumtigretivTokelautsakurųklingonųtlingitų" + + "talyšųtamašekniasa tongųPapua pidžinųturoyoTarokotsakonųtsimšianmusulmon" + + "ų tatųtumbukųTuvalutasavakųtuviųCentrinio Maroko tamazitųudmurtųugaritų" + + "umbundurūtvaivenetųvepsųvakarų flamandųpagrindinė frankonųVotikveruvunjo" + + "valserųvalamovaraiVašovalrpirikinų kalbos vu tarmėkalmukųmegrelųsogųjaoj" + + "apezųjangbenųjembųnjengatukinų kalbos Kantono tarmėzapotekųBLISS simboli" + + "ųzelandųzenagastandartinė Maroko tamazigtųZuninėra kalbinio turiniozaza" + + "šiuolaikinė standartinė arabųAustrijos vokiečiųŠveicarijos aukštutinė v" + + "okiečiųAustralijos anglųKanados anglųDidžiosios Britanijos anglųJungtini" + + "ų Valstijų anglųLotynų Amerikos ispanųEuropos ispanųMeksikos ispanųKana" + + "dos prancūzųŠveicarijos prancūzųŽemutinės Saksonijos (Nyderlandai)flaman" + + "dųBrazilijos portugalųEuropos portugalųmoldavųserbų-kroatųKongo suahilių" + + "supaprastintoji kinųtradicinė kinų" + +var ltLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0006, 0x000e, 0x0015, 0x001e, 0x0024, 0x002b, 0x0035, + 0x003b, 0x0041, 0x0049, 0x0050, 0x0063, 0x006c, 0x0077, 0x007f, + 0x0086, 0x008e, 0x0096, 0x00a2, 0x00aa, 0x00b1, 0x00ba, 0x00c4, + 0x00cc, 0x00d9, 0x00dc, 0x00e2, 0x00f4, 0x00fe, 0x0103, 0x0108, + 0x0112, 0x0119, 0x0120, 0x0125, 0x012c, 0x0132, 0x013b, 0x0142, + 0x0147, 0x014d, 0x0153, 0x015a, 0x0161, 0x0169, 0x0170, 0x017a, + 0x0188, 0x018e, 0x019e, 0x01a5, 0x01ae, 0x01b9, 0x01c3, 0x01c9, + 0x01d1, 0x01d6, 0x01df, 0x01e6, 0x01ed, 0x01f4, 0x01fc, 0x0203, + // Entry 40 - 7F + 0x020b, 0x0219, 0x0223, 0x0228, 0x0232, 0x023b, 0x023e, 0x0246, + 0x024c, 0x0254, 0x025b, 0x0265, 0x026d, 0x0272, 0x0279, 0x0281, + 0x0289, 0x0292, 0x0299, 0x02a0, 0x02ad, 0x02b5, 0x02be, 0x02c4, + 0x02c8, 0x02ce, 0x02d6, 0x02dd, 0x02ef, 0x02f4, 0x0302, 0x0308, + 0x0313, 0x031c, 0x0328, 0x032f, 0x0338, 0x0346, 0x034d, 0x0356, + 0x0360, 0x0368, 0x036f, 0x037b, 0x0386, 0x0391, 0x0397, 0x03a9, + 0x03b5, 0x03bc, 0x03c3, 0x03d3, 0x03e4, 0x03f2, 0x03f9, 0x0400, + 0x0409, 0x040f, 0x0415, 0x041b, 0x0423, 0x042d, 0x0431, 0x0437, + // Entry 80 - BF + 0x0441, 0x044b, 0x0453, 0x045e, 0x0463, 0x046a, 0x046f, 0x047b, + 0x0485, 0x0492, 0x0498, 0x04a8, 0x04ad, 0x04b5, 0x04bd, 0x04c6, + 0x04cb, 0x04d1, 0x04dd, 0x04e4, 0x04ea, 0x04f0, 0x04fb, 0x0501, + 0x0508, 0x0511, 0x0518, 0x051f, 0x0528, 0x052d, 0x0535, 0x053f, + 0x0546, 0x054e, 0x0554, 0x055b, 0x0563, 0x056e, 0x0576, 0x0583, + 0x0588, 0x058f, 0x0595, 0x05a3, 0x05ac, 0x05b3, 0x05ba, 0x05bf, + 0x05c5, 0x05cc, 0x05d2, 0x05d7, 0x05dc, 0x05e5, 0x05ec, 0x05f4, + 0x05fd, 0x060a, 0x0612, 0x0619, 0x061e, 0x0627, 0x0634, 0x063b, + // Entry C0 - FF + 0x0656, 0x0665, 0x0672, 0x0679, 0x0682, 0x068e, 0x0695, 0x069d, + 0x06ab, 0x06ab, 0x06b3, 0x06c0, 0x06cd, 0x06d0, 0x06e7, 0x06f1, + 0x06f7, 0x06fd, 0x0704, 0x070e, 0x0715, 0x071a, 0x0721, 0x072b, + 0x0733, 0x0739, 0x073f, 0x0745, 0x074a, 0x0751, 0x0757, 0x0769, + 0x0772, 0x0779, 0x077d, 0x0787, 0x078c, 0x0794, 0x07a0, 0x07a9, + 0x07af, 0x07b7, 0x07bb, 0x07c2, 0x07ca, 0x07d3, 0x07d7, 0x07db, + 0x07e3, 0x07e7, 0x07ee, 0x07f7, 0x07fe, 0x0806, 0x080c, 0x0814, + 0x081c, 0x0824, 0x082a, 0x083a, 0x0841, 0x084b, 0x0854, 0x085c, + // Entry 100 - 13F + 0x086b, 0x0871, 0x0879, 0x0885, 0x08a5, 0x08ad, 0x08b4, 0x08ba, + 0x08c0, 0x08c8, 0x08cd, 0x08d5, 0x08db, 0x08e1, 0x08e6, 0x08f8, + 0x0908, 0x090e, 0x0920, 0x092c, 0x0932, 0x0939, 0x093d, 0x0941, + 0x095e, 0x0973, 0x0979, 0x0981, 0x0991, 0x09ac, 0x09b2, 0x09d6, + 0x09dc, 0x09ea, 0x0a0a, 0x0a0d, 0x0a21, 0x0a35, 0x0a46, 0x0a4e, + 0x0a60, 0x0a6c, 0x0a74, 0x0a76, 0x0a7f, 0x0a9b, 0x0a9f, 0x0aa4, + 0x0ab3, 0x0ab6, 0x0abe, 0x0ac4, 0x0ae2, 0x0aff, 0x0b0c, 0x0b11, + 0x0b1a, 0x0b1f, 0x0b24, 0x0b34, 0x0b4b, 0x0b50, 0x0b56, 0x0b5a, + // Entry 140 - 17F + 0x0b62, 0x0b67, 0x0b80, 0x0b8c, 0x0b99, 0x0ba5, 0x0bac, 0x0bb1, + 0x0bc5, 0x0bdf, 0x0be3, 0x0be7, 0x0bef, 0x0bf5, 0x0bfd, 0x0c03, + 0x0c1a, 0x0c20, 0x0c27, 0x0c2f, 0x0c3e, 0x0c4d, 0x0c66, 0x0c72, + 0x0c7a, 0x0c82, 0x0c84, 0x0c8a, 0x0c90, 0x0c9a, 0x0ca2, 0x0ca6, + 0x0cae, 0x0cc7, 0x0cce, 0x0cd2, 0x0cda, 0x0cde, 0x0ce7, 0x0cf2, + 0x0cfa, 0x0d03, 0x0d07, 0x0d11, 0x0d19, 0x0d27, 0x0d30, 0x0d39, + 0x0d40, 0x0d56, 0x0d5a, 0x0d63, 0x0d6a, 0x0d6f, 0x0d78, 0x0d7d, + 0x0d85, 0x0d8c, 0x0d93, 0x0d99, 0x0d9e, 0x0da3, 0x0da8, 0x0db0, + // Entry 180 - 1BF + 0x0dc5, 0x0dcd, 0x0dd3, 0x0dda, 0x0de3, 0x0de9, 0x0def, 0x0dfd, + 0x0e06, 0x0e10, 0x0e17, 0x0e1d, 0x0e20, 0x0e24, 0x0e28, 0x0e38, + 0x0e3b, 0x0e44, 0x0e49, 0x0e4f, 0x0e57, 0x0e5f, 0x0e68, 0x0e6f, + 0x0e74, 0x0e7a, 0x0e82, 0x0e87, 0x0e8c, 0x0e95, 0x0ea4, 0x0eaf, + 0x0eb3, 0x0ebb, 0x0ec6, 0x0ecc, 0x0ed6, 0x0edb, 0x0edf, 0x0eeb, + 0x0ef4, 0x0f01, 0x0f07, 0x0f11, 0x0f18, 0x0f20, 0x0f26, 0x0f2d, + 0x0f3a, 0x0f5a, 0x0f67, 0x0f6b, 0x0f81, 0x0f87, 0x0f8b, 0x0f96, + 0x0f9d, 0x0fa4, 0x0faf, 0x0fb4, 0x0fc1, 0x0fc7, 0x0fcb, 0x0fd9, + // Entry 1C0 - 1FF + 0x0fdf, 0x0ff0, 0x0ff8, 0x1001, 0x1007, 0x100c, 0x1011, 0x101f, + 0x102b, 0x1041, 0x104a, 0x1054, 0x1061, 0x1069, 0x107c, 0x1094, + 0x10b8, 0x10c5, 0x10e4, 0x10f0, 0x110d, 0x1112, 0x111a, 0x1121, + 0x1135, 0x113c, 0x115a, 0x1165, 0x116c, 0x1178, 0x1196, 0x119b, + 0x11a0, 0x11a5, 0x11ae, 0x11b5, 0x11bd, 0x11c6, 0x11c9, 0x11d2, + 0x11d9, 0x11eb, 0x11f4, 0x11f9, 0x1202, 0x120d, 0x1216, 0x121c, + 0x1228, 0x122f, 0x1241, 0x124e, 0x1255, 0x125a, 0x125e, 0x1264, + 0x1272, 0x127f, 0x128a, 0x1295, 0x1299, 0x12a7, 0x12ae, 0x12c6, + // Entry 200 - 23F + 0x12cf, 0x12dc, 0x12e9, 0x12f6, 0x1303, 0x130a, 0x1311, 0x131d, + 0x1324, 0x1328, 0x1339, 0x133f, 0x1343, 0x134b, 0x1352, 0x1362, + 0x1367, 0x1373, 0x1378, 0x137d, 0x1381, 0x1387, 0x138c, 0x1391, + 0x1394, 0x139b, 0x13a3, 0x13ac, 0x13b5, 0x13bd, 0x13c5, 0x13d1, + 0x13e0, 0x13e6, 0x13ec, 0x13f4, 0x13fd, 0x140d, 0x1415, 0x141b, + 0x1424, 0x142a, 0x1444, 0x144c, 0x1454, 0x145b, 0x145f, 0x1462, + 0x1469, 0x146f, 0x1480, 0x1495, 0x149a, 0x149e, 0x14a3, 0x14ab, + 0x14b1, 0x14b6, 0x14bb, 0x14c3, 0x14d9, 0x14e1, 0x14e9, 0x14ee, + // Entry 240 - 27F + 0x14f1, 0x14f8, 0x1501, 0x1507, 0x150f, 0x152a, 0x1533, 0x1542, + 0x154a, 0x1550, 0x156e, 0x1572, 0x1588, 0x158c, 0x15ad, 0x15ad, + 0x15c1, 0x15e5, 0x15f7, 0x1605, 0x1622, 0x163d, 0x1655, 0x1664, + 0x1674, 0x1674, 0x1686, 0x169d, 0x16c1, 0x16ca, 0x16df, 0x16f1, + 0x16f9, 0x1707, 0x1716, 0x172b, 0x173b, +} // Size: 1250 bytes + +const lvLangStr string = "" + // Size: 4356 bytes + "afāruabhāzuavestaafrikanduakanuamharuaragoniešuarābuasamiešuavāruaimarua" + + "zerbaidžāņubaškīrubaltkrievubulgārubišlamābambarubengāļutibetiešubretoņu" + + "bosniešukatalāņučečenučamorrukorsikāņukrīčehubaznīcslāvučuvašuvelsiešudā" + + "ņuvācumaldīviešudzongkeevugrieķuangļuesperantospāņuigauņubaskupersiešuf" + + "ulusomufidžiešufērufrančurietumfrīzuīrugēlugalisiešugvaranugudžaratumeni" + + "ešuhausuivritshindihirimotuhorvātuhaitiešuungāruarmēņuhereruinterlingvai" + + "ndonēziešuinterlingveigboSičuaņas jiinupiakuidoīslandiešuitāļuinuītujapā" + + "ņujaviešugruzīnukongukikujukvaņamukazahugrenlandiešukhmerukannadukoreji" + + "ešukanurukašmiriešukurdukomiešukorniešukirgīzulatīņuluksemburgiešugandul" + + "imburgiešulingalalaosiešulietuviešulubakatangalatviešumalagasumāršaliešu" + + "maorumaķedoniešumalajalumongoļumaratumalajiešumaltiešubirmiešunauruiešuz" + + "iemeļndebelunepāliešundonguholandiešujaunnorvēģunorvēģu bukmolsdienvidnd" + + "ebelunavahučičevaoksitāņuodžibvuoromuorijuosetīnupandžabupālipoļupuštupo" + + "rtugāļukečvuretoromāņurundurumāņukrievukiņaruandasanskritssardīniešusind" + + "huziemeļsāmusangosingāļuslovākuslovēņusamoāņušonusomāļualbāņuserbusvatud" + + "ienvidsotuzunduzviedrusvahilitamilutelugutadžikutajutigrinjaturkmēņucvan" + + "utongiešuturkucongutatārutaitiešuuiguruukraiņuurduuzbekuvenduvjetnamiešu" + + "volapiksvaloņuvolofukhosujidišsjorubudžuanuķīniešuzuluačinuačoluadangmua" + + "diguafrihiliaghemuainuakadiešualeutudienvidaltajiešusenangļuangikaaramie" + + "šuaraukāņuarapahuaravakuasuastūriešuavadhubeludžubaliešubasubamumugomal" + + "ubedžubembubenabafuturietumbeludžubhodžpūrubikolubinukomusiksikubradžieš" + + "ubodonkosiburjatubugubulubilinumedumbukadukarībukajugaatsamusebuāņukigač" + + "ibčudžagatajsčūkumariešučinuku žargonsčoktavučipevaianučirokušejenucentr" + + "ālkurdukoptuKrimas tatārukreolu frančukašubudakotudargutaitudelavērusle" + + "ivudogribudinkuzarmudogrulejassorbudualuvidusholandiešudiola-fonjīdiūlud" + + "azukjembuefikuēģiptiešuekadžukuelamiešuvidusangļuevondufangufilipīniešuf" + + "onuvidusfrančusenfrančuziemeļfrīzuaustrumfrīzufriūlugagagauzugajogbajugē" + + "zukiribatiešuvidusaugšvācusenaugšvācugondu valodasgorontalugotugreboseng" + + "rieķuŠveices vācugusiikučinuhaiduhavajiešuhiligainonuhetuhmonguaugšsorbu" + + "hupuibanuibibioilokuingušuložbansjgomačamujūdpersiešujūdarābukarakalpaku" + + "kabilukačinukadžikambukāvikabardiešukaņembukatabumakondekaboverdiešukoru" + + "khasuhotaniešukoiračiinīkakokalendžīnukimbundukomiešu-permiešukonkanukos" + + "rājiešukpellukaračaju un balkārukarēļukuruhušambalubafijuĶelnes vācukumi" + + "kukutenajuladinolangilandulambulezgīnulakotumongulozuziemeļlurulubalulva" + + "luisenulunduluolušejuluhjumaduriešumafumagahiešumaithilimakasarumandingu" + + "masajumabumokšumandarumendumeruMaurīcijas kreoluvidusīrumakua-meettomgom" + + "ikmakuminangkabavumandžūrumanipūrumohaukumosumundanguvairākas valodaskrī" + + "kumirandiešumarvarumjenuerzjumazanderāņuneapoliešunamalejasvācunevarunja" + + "suniuāņukvasiongjembūnunogajusennorvēģunkoziemeļsotunueruklasiskā nevaru" + + "ņamvezuņankoluņorunzemuvažāžuturku osmaņupangasinanupehlevipampanganupa" + + "pjamentopalaviešupidžinssenpersufeniķiešuponapiešuprūšusenprovansiešukič" + + "eradžastāņurapanujurarotongiešurombočigānuaromūnuruandasandavujakutuSamā" + + "rijas aramiešusamburusasakusantalungambejusangusicīliešuskotudienvidkurd" + + "usenekusenuselkupukoiraboro sennisenīrušilhušanuČadas arābusidamudienvid" + + "sāmuLuleo sāmuInari sāmuskoltsāmusoninkusogdiešusranantogoserērusahosuku" + + "mususušumerukomoruklasiskā sīriešusīriešutemnutesoterenotetumutigrutivut" + + "okelaviešuklingoņutlinkitutuareguNjasas tongutokpisinstarokocimšiāņutumb" + + "ukutuvaliešutasavakutuviešuCentrālmarokas tamazītsudmurtuugaritiešuumbun" + + "dusaknevajuvotuvundžoVallisas vācuvalamuvarajuvašovarlpirīkalmikusogujao" + + "japiešujanbaņujembukantoniešusapotekublissimbolikazenagustandarta marokā" + + "ņu berberuzunjubez lingvistiska saturazazakimūsdienu standarta arābudie" + + "nvidazerbaidžāņuAustrijas vācuŠveices augšvācuAustrālijas angļuKanādas a" + + "ngļuLielbritānijas angļuASV angļuLatīņamerikas spāņuEiropas spāņuMeksika" + + "s spāņuKanādas frančuŠveices frančulejassakšuflāmuBrazīlijas portugāļuEi" + + "ropas portugāļumoldāvuserbu–horvātuKongo svahiliķīniešu vienkāršotāķīnie" + + "šu tradicionālā" + +var lvLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0006, 0x000d, 0x0013, 0x001c, 0x0021, 0x0027, 0x0032, + 0x0038, 0x0041, 0x0047, 0x004d, 0x005c, 0x0065, 0x006f, 0x0077, + 0x0080, 0x0087, 0x0090, 0x009a, 0x00a2, 0x00ab, 0x00b5, 0x00bd, + 0x00c5, 0x00d0, 0x00d4, 0x00d9, 0x00e6, 0x00ee, 0x00f7, 0x00fd, + 0x0102, 0x010e, 0x0115, 0x0118, 0x011f, 0x0125, 0x012e, 0x0135, + 0x013c, 0x0141, 0x014a, 0x014e, 0x0152, 0x015c, 0x0161, 0x0168, + 0x0174, 0x0178, 0x017d, 0x0187, 0x018e, 0x0198, 0x01a0, 0x01a5, + 0x01ab, 0x01b0, 0x01b8, 0x01c0, 0x01c9, 0x01d0, 0x01d8, 0x01de, + // Entry 40 - 7F + 0x01e9, 0x01f6, 0x0201, 0x0205, 0x0212, 0x021a, 0x021d, 0x0229, + 0x0230, 0x0237, 0x023f, 0x0247, 0x024f, 0x0254, 0x025a, 0x0262, + 0x0268, 0x0275, 0x027b, 0x0282, 0x028c, 0x0292, 0x029e, 0x02a3, + 0x02ab, 0x02b4, 0x02bc, 0x02c4, 0x02d3, 0x02d8, 0x02e4, 0x02eb, + 0x02f4, 0x02ff, 0x030a, 0x0313, 0x031b, 0x0328, 0x032d, 0x033a, + 0x0342, 0x034a, 0x0350, 0x035a, 0x0363, 0x036c, 0x0376, 0x0384, + 0x038f, 0x0395, 0x03a0, 0x03ad, 0x03be, 0x03cc, 0x03d2, 0x03da, + 0x03e4, 0x03ec, 0x03f1, 0x03f6, 0x03fe, 0x0407, 0x040c, 0x0411, + // Entry 80 - BF + 0x0417, 0x0422, 0x0428, 0x0434, 0x0439, 0x0441, 0x0447, 0x0452, + 0x045b, 0x0467, 0x046d, 0x0479, 0x047e, 0x0487, 0x048f, 0x0498, + 0x04a1, 0x04a6, 0x04ae, 0x04b6, 0x04bb, 0x04c0, 0x04cb, 0x04d0, + 0x04d7, 0x04de, 0x04e4, 0x04ea, 0x04f2, 0x04f6, 0x04fe, 0x0508, + 0x050d, 0x0516, 0x051b, 0x0520, 0x0527, 0x0530, 0x0536, 0x053e, + 0x0542, 0x0548, 0x054d, 0x0559, 0x0561, 0x0568, 0x056e, 0x0573, + 0x057a, 0x0580, 0x0587, 0x0591, 0x0595, 0x059b, 0x05a1, 0x05a8, + 0x05ad, 0x05ad, 0x05b5, 0x05bb, 0x05bf, 0x05c8, 0x05c8, 0x05ce, + // Entry C0 - FF + 0x05ce, 0x05df, 0x05e8, 0x05ee, 0x05f7, 0x0601, 0x0601, 0x0608, + 0x0608, 0x0608, 0x060f, 0x060f, 0x060f, 0x0612, 0x0612, 0x061d, + 0x061d, 0x0623, 0x062b, 0x0633, 0x0633, 0x0637, 0x063d, 0x063d, + 0x0643, 0x0649, 0x064e, 0x064e, 0x0652, 0x0658, 0x0658, 0x0666, + 0x0671, 0x0677, 0x067b, 0x067b, 0x067f, 0x0686, 0x0686, 0x0686, + 0x0691, 0x0691, 0x0695, 0x069a, 0x06a1, 0x06a5, 0x06a9, 0x06af, + 0x06b6, 0x06ba, 0x06c1, 0x06c7, 0x06cd, 0x06d6, 0x06da, 0x06e1, + 0x06eb, 0x06f1, 0x06f9, 0x0709, 0x0711, 0x071c, 0x0723, 0x072a, + // Entry 100 - 13F + 0x0737, 0x073c, 0x073c, 0x074a, 0x0758, 0x075f, 0x0765, 0x076a, + 0x076f, 0x0778, 0x077e, 0x0785, 0x078a, 0x078f, 0x0794, 0x079e, + 0x079e, 0x07a3, 0x07b3, 0x07bf, 0x07c5, 0x07c9, 0x07cf, 0x07d4, + 0x07d4, 0x07e0, 0x07e9, 0x07f2, 0x07fd, 0x07fd, 0x0803, 0x0803, + 0x0808, 0x0815, 0x0815, 0x0819, 0x0819, 0x0825, 0x082f, 0x082f, + 0x083c, 0x0849, 0x0850, 0x0852, 0x0859, 0x0859, 0x085d, 0x0862, + 0x0862, 0x0867, 0x0873, 0x0873, 0x0882, 0x088f, 0x088f, 0x089c, + 0x08a5, 0x08a9, 0x08ae, 0x08b8, 0x08c6, 0x08c6, 0x08c6, 0x08cb, + // Entry 140 - 17F + 0x08d2, 0x08d7, 0x08d7, 0x08e1, 0x08e1, 0x08ec, 0x08f0, 0x08f6, + 0x0900, 0x0900, 0x0904, 0x0909, 0x090f, 0x0914, 0x091b, 0x091b, + 0x091b, 0x0923, 0x0926, 0x092d, 0x093a, 0x0944, 0x0944, 0x094f, + 0x0955, 0x095c, 0x0962, 0x0967, 0x096c, 0x0977, 0x097f, 0x0985, + 0x098c, 0x0999, 0x0999, 0x099d, 0x099d, 0x09a2, 0x09ac, 0x09b8, + 0x09b8, 0x09b8, 0x09bc, 0x09c8, 0x09d0, 0x09e2, 0x09e9, 0x09f5, + 0x09fb, 0x0a10, 0x0a10, 0x0a10, 0x0a18, 0x0a1e, 0x0a26, 0x0a2c, + 0x0a39, 0x0a3f, 0x0a47, 0x0a4d, 0x0a52, 0x0a57, 0x0a5c, 0x0a64, + // Entry 180 - 1BF + 0x0a64, 0x0a64, 0x0a64, 0x0a6a, 0x0a6a, 0x0a6f, 0x0a73, 0x0a7e, + 0x0a7e, 0x0a87, 0x0a8e, 0x0a93, 0x0a96, 0x0a9d, 0x0aa2, 0x0aa2, + 0x0aa2, 0x0aac, 0x0ab0, 0x0aba, 0x0ac2, 0x0aca, 0x0ad2, 0x0ad8, + 0x0adc, 0x0ae2, 0x0ae9, 0x0aee, 0x0af2, 0x0b04, 0x0b0d, 0x0b19, + 0x0b1c, 0x0b23, 0x0b2f, 0x0b39, 0x0b42, 0x0b49, 0x0b4d, 0x0b4d, + 0x0b55, 0x0b66, 0x0b6c, 0x0b77, 0x0b7e, 0x0b7e, 0x0b83, 0x0b88, + 0x0b95, 0x0b95, 0x0ba0, 0x0ba4, 0x0bae, 0x0bb4, 0x0bb9, 0x0bc1, + 0x0bc1, 0x0bc7, 0x0bd1, 0x0bd7, 0x0be3, 0x0be3, 0x0be6, 0x0bf1, + // Entry 1C0 - 1FF + 0x0bf6, 0x0c06, 0x0c0e, 0x0c16, 0x0c1b, 0x0c20, 0x0c29, 0x0c36, + 0x0c41, 0x0c48, 0x0c52, 0x0c5c, 0x0c66, 0x0c66, 0x0c6e, 0x0c6e, + 0x0c6e, 0x0c76, 0x0c76, 0x0c81, 0x0c81, 0x0c81, 0x0c8b, 0x0c92, + 0x0ca1, 0x0ca6, 0x0ca6, 0x0cb3, 0x0cbb, 0x0cc8, 0x0cc8, 0x0cc8, + 0x0ccd, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cdd, 0x0ce3, 0x0cea, + 0x0cf0, 0x0d04, 0x0d0b, 0x0d11, 0x0d18, 0x0d18, 0x0d20, 0x0d25, + 0x0d30, 0x0d35, 0x0d35, 0x0d41, 0x0d47, 0x0d4b, 0x0d4b, 0x0d52, + 0x0d61, 0x0d68, 0x0d68, 0x0d6e, 0x0d73, 0x0d80, 0x0d86, 0x0d86, + // Entry 200 - 23F + 0x0d86, 0x0d92, 0x0d9d, 0x0da8, 0x0db2, 0x0db9, 0x0dc2, 0x0dcc, + 0x0dd3, 0x0dd7, 0x0dd7, 0x0ddd, 0x0de1, 0x0de8, 0x0dee, 0x0e01, + 0x0e0a, 0x0e0a, 0x0e0a, 0x0e0f, 0x0e13, 0x0e19, 0x0e1f, 0x0e24, + 0x0e28, 0x0e34, 0x0e34, 0x0e3d, 0x0e45, 0x0e45, 0x0e4c, 0x0e58, + 0x0e61, 0x0e61, 0x0e67, 0x0e67, 0x0e72, 0x0e72, 0x0e79, 0x0e83, + 0x0e8b, 0x0e93, 0x0eac, 0x0eb3, 0x0ebe, 0x0ec5, 0x0eca, 0x0ece, + 0x0ece, 0x0ece, 0x0ece, 0x0ece, 0x0ed2, 0x0ed2, 0x0ed9, 0x0ee7, + 0x0eed, 0x0ef3, 0x0ef8, 0x0f01, 0x0f01, 0x0f08, 0x0f08, 0x0f0c, + // Entry 240 - 27F + 0x0f0f, 0x0f17, 0x0f1f, 0x0f24, 0x0f24, 0x0f2f, 0x0f37, 0x0f44, + 0x0f44, 0x0f4a, 0x0f66, 0x0f6b, 0x0f82, 0x0f88, 0x0fa2, 0x0fb8, + 0x0fc7, 0x0fda, 0x0fed, 0x0ffc, 0x1012, 0x101c, 0x1033, 0x1042, + 0x1052, 0x1052, 0x1062, 0x1072, 0x107d, 0x1083, 0x109a, 0x10ad, + 0x10b5, 0x10c5, 0x10d2, 0x10eb, 0x1104, +} // Size: 1250 bytes + +const mkLangStr string = "" + // Size: 10280 bytes + "афарскиапхаскиавестанскиафрикансаканскиамхарскиарагонскиарапскиасамскиав" + + "арскиајмарскиазербејџанскибашкирскибелорускибугарскибисламабамбарабенга" + + "лскитибетскибретонскибосанскикаталонскичеченскичаморскикорзиканскикриче" + + "шкицрковнословенскичувашкивелшкиданскигерманскидивехиѕонгкаевегрчкиангл" + + "искиесперантошпанскиестонскибаскискиперсискифулафинскифиџискифарскифран" + + "цускизападнофризискиирскишкотски гелскигалицискигваранскигуџаратиманксх" + + "аусахебрејскихиндихири мотухрватскихаитскиунгарскиерменскихерероинтерли" + + "нгваиндонезискиокциденталигбосичуан јиинупијачкиидоисландскииталијански" + + "инуктитутјапонскијаванскигрузискиконгокикујуквањамаказашкикалалисуткмер" + + "скиканнадакорејскиканурикашмирскикурдскикомикорнскикиргискилатинскилукс" + + "ембуршкигандалимбуршкилингалалаошкилитванскилуба-катангалатвискималгашк" + + "имаршалскимаорскимакедонскималајамскимонголскимаратималајскималтешкибур" + + "манскинауруанскисеверен ндебеленепалскиндонгахоландскинорвешки нинорскн" + + "орвешки букмолјужен ндебеленавахоњанџаокситанскиоџибваоромоодијаосетски" + + "пенџапскипалиполскипаштунскипортугалскикечуанскиретороманскирундироманс" + + "кирускируандскисанскритсардинскисиндисеверен самисангосинхалскисловачки" + + "словенечкисамоанскишонасомалискиалбанскисрпскисватисесотосундскишведски" + + "свахилитамилскителугутаџикистанскитајландскитигрињатуркменскицванатонга" + + "јскитурскицонгататарскитахитскиујгурскиукраинскиурдуузбечкивендавиетнам" + + "скиволапиквалонскиволофскикосајидишјорупскиџуаншкикинескизулуачешкиакол" + + "иадангмеадигејскитуниски арапскиафрихилиагемскиајнуакадскиалабамскиалеу" + + "тскигешки албанскијужноалтајскистароанглискиангикаарамејскимапучкиараон" + + "аарапахоалжирски арапскиаравачкимарокански арапскиегипетски арапскиасуа" + + "мерикански знаковен јазикастурскикотаваавадибелуџискибалискибаварскибас" + + "абамунскитобагомалабеџабембабетавскибенабафутбадагазападен балочибоџпур" + + "ибиколскибинибанџарскикомсиксикабишнупријабахтијарскибрајбрахујскибодоа" + + "косебурјатскибугискибулубиленскимедумбакадокарипскикајугаацамсебуанскич" + + "игачибчачагатајскичучкимарискичинучки жаргончоктавскичипевјанскичерокис" + + "кичејенскицентралнокурдскикоптскикапизнонкримскотурскифранцуски (Сеселв" + + "а креоли)кашупскидакотадаргватаитаделаверслејвидогрипскидинказармадогри" + + "долнолужичкидусунскидуаласреднохоландскијола-фоњиџуладазагаембуефикемил" + + "ијанскистароегипетскиекаџукеламскисредноанглискицентралнојупичкиевондое" + + "кстремадурскифангфилипинскитурнедаленски финскифонкаџунски францускисре" + + "днофранцускистарофранцускифранкопровансалскисевернофризискиисточнофризи" + + "скифурланскигагагаускигангајогбајазороастриски даригизгилбертанскигилан" + + "скисредногорногерманскистарогорногерманскигоански конканигондигоронтало" + + "готскигребостарогрчкишвајцарски германскигвахирофарефарегусигвичинскиха" + + "јдахакахавајскифиџиски хиндихилигајнонскихетитскихмонггорнолужичкисјанг" + + "хупаибанибибиоилоканскиингушкиижорскијамајски креолскиложбаннгомбамачам" + + "ееврејскоперсискиеврејскоарапскијитскикаракалпачкикабилскикачинскикаџек" + + "амбакавикабардинскиканембутјапмакондекабувердианукењангкорокаинганшкика" + + "сихотанскикојра чииниковарскизазакикакокаленџинкимбундукоми-пермјачкико" + + "нканикозрејскикпелекарачаевско-балкарскикриокинарајскикарелскикурухшамб" + + "алабафијаколоњскикумичкикутенајскиладинолангиландаламбалезгинскилингва " + + "франка новалигурскиливонскилакотскиломбардискимонголозисевернолурискила" + + "тгалскилуба-лулуалујсењскилундалуомизолујакнижевен кинескиласкимадурски" + + "мафамагахимаитилимакасарскимандингомасајскимабамокшанскимандарскимендем" + + "еруморисјенсредноирскимакува-митометамикмакминангкабауманџурскиманипурс" + + "кимохавскимосизападномарискимундангповеќе јазицикрикмирандскимарваримје" + + "неерзјанскимазендеранскијужноминскинеаполскинамадолногерманскиневарскин" + + "ијасниујескиао нагаквазионгиембунногајскистаронордискиновијалнкосеверно" + + "сотскинуеркласичен неварскињамвезињанколењоронзимаосашкиотомански турск" + + "ипангасинанскисредноперсискипампангапапијаментопалауанскипикардскинигер" + + "иски пиџинпенсилваниски германскименонитски долногерманскистароперсиски" + + "фалечкогерманскифеникискипиемонтскипонтскипонпејскипрускистаропровансал" + + "скикичекичванскираџастанскирапанујскираротонганскиромањолскирифскиромбо" + + "ромскиротуманскирусинскировијанскивлашкируасандавејакутскисамарјански а" + + "рамејскисамбурусасачкисанталисаураштрангембејсангусицилијанскишкотски г" + + "ерманскисасарски сардинскијужнокурдскисенекасенасериселкупскикојраборо " + + "сенистароирскисамогитскитачелхитшанчадски арапскисидамодолношлезискисел" + + "ајарскијужен самилуле самиинари самисколт самисонинкезогдијанскисрански" + + " тонгосерерсахозатерландски фризискисукумасусусумерскикоморијанскикласич" + + "ен сирискисирискишлезискитулутимнетесотеренотетумтигретивтокелауанскица" + + "хурскиклингонскитлингитталишкитамашекњаса тонгаток писинтуројотарокоцак" + + "онскицимшијанскитатскитумбукатувалуанскитазавактуванскицентралноатланск" + + "и тамазитскиудмуртскиугаритскиумбундукоренвајвенетскивепшкизападнофлама" + + "нскимајнскофранконскивотскивирувунџовалсерволамоварајскивашоварлпиривук" + + "алмичкимегрелскисогајаојапскијенгбенјембањенгатукантонскизапотечкиблисс" + + "имболизеландскизенагастандарден марокански тамазитскизунибез лингвистич" + + "ка содржиназазалитературен арапскиавстралиски англискиканадски англиски" + + "британски англискиамерикански англискишпански (во Европа)канадски франц" + + "ускишвајцарски францускифламанскипортугалски (во Европа)молдавскисрпско" + + "хрватскиконгоански свахилипоедноставен кинескитрадиционален кинески" + +var mkLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x001c, 0x0030, 0x0040, 0x004e, 0x005e, 0x0070, + 0x007e, 0x008c, 0x009a, 0x00aa, 0x00c4, 0x00d6, 0x00e8, 0x00f8, + 0x0106, 0x0114, 0x0126, 0x0136, 0x0148, 0x0158, 0x016c, 0x017c, + 0x018c, 0x01a2, 0x01a8, 0x01b2, 0x01d2, 0x01e0, 0x01ec, 0x01f8, + 0x020a, 0x0216, 0x0222, 0x0228, 0x0232, 0x0242, 0x0254, 0x0262, + 0x0272, 0x0282, 0x0292, 0x029a, 0x02a6, 0x02b4, 0x02c0, 0x02d2, + 0x02f0, 0x02fa, 0x0315, 0x0327, 0x0339, 0x0349, 0x0353, 0x035d, + 0x036f, 0x0379, 0x038a, 0x039a, 0x03a8, 0x03b8, 0x03c8, 0x03d4, + // Entry 40 - 7F + 0x03ea, 0x0400, 0x0414, 0x041c, 0x042d, 0x0441, 0x0447, 0x0459, + 0x046f, 0x0481, 0x0491, 0x04a1, 0x04b1, 0x04bb, 0x04c7, 0x04d5, + 0x04e3, 0x04f5, 0x0503, 0x0511, 0x0521, 0x052d, 0x053f, 0x054d, + 0x0555, 0x0563, 0x0573, 0x0583, 0x059b, 0x05a5, 0x05b7, 0x05c5, + 0x05d1, 0x05e3, 0x05fa, 0x060a, 0x061a, 0x062c, 0x063a, 0x064e, + 0x0662, 0x0674, 0x0680, 0x0690, 0x06a0, 0x06b2, 0x06c6, 0x06e3, + 0x06f3, 0x06ff, 0x0711, 0x0730, 0x074d, 0x0766, 0x0772, 0x077c, + 0x0790, 0x079c, 0x07a6, 0x07b0, 0x07be, 0x07d0, 0x07d8, 0x07e4, + // Entry 80 - BF + 0x07f6, 0x080c, 0x081e, 0x0836, 0x0840, 0x0850, 0x085a, 0x086a, + 0x087a, 0x088c, 0x0896, 0x08ad, 0x08b7, 0x08c9, 0x08d9, 0x08ed, + 0x08ff, 0x0907, 0x0919, 0x0929, 0x0935, 0x093f, 0x094b, 0x0959, + 0x0967, 0x0975, 0x0985, 0x0991, 0x09ab, 0x09bf, 0x09cd, 0x09e1, + 0x09eb, 0x09fd, 0x0a09, 0x0a13, 0x0a23, 0x0a33, 0x0a43, 0x0a55, + 0x0a5d, 0x0a6b, 0x0a75, 0x0a89, 0x0a97, 0x0aa7, 0x0ab7, 0x0abf, + 0x0ac9, 0x0ad9, 0x0ae7, 0x0af5, 0x0afd, 0x0b09, 0x0b13, 0x0b21, + 0x0b33, 0x0b50, 0x0b60, 0x0b6e, 0x0b76, 0x0b84, 0x0b96, 0x0ba6, + // Entry C0 - FF + 0x0bc1, 0x0bdb, 0x0bf5, 0x0c01, 0x0c13, 0x0c21, 0x0c2d, 0x0c3b, + 0x0c5a, 0x0c5a, 0x0c6a, 0x0c8d, 0x0cae, 0x0cb4, 0x0ce6, 0x0cf6, + 0x0d02, 0x0d0c, 0x0d1e, 0x0d2c, 0x0d3c, 0x0d44, 0x0d54, 0x0d5c, + 0x0d68, 0x0d70, 0x0d7a, 0x0d8a, 0x0d92, 0x0d9c, 0x0da8, 0x0dc3, + 0x0dd1, 0x0de1, 0x0de9, 0x0dfb, 0x0e01, 0x0e0f, 0x0e23, 0x0e39, + 0x0e41, 0x0e53, 0x0e5b, 0x0e65, 0x0e77, 0x0e85, 0x0e8d, 0x0e9d, + 0x0eab, 0x0eb3, 0x0ec3, 0x0ecf, 0x0ed7, 0x0ee9, 0x0ef1, 0x0efb, + 0x0f0f, 0x0f19, 0x0f27, 0x0f42, 0x0f54, 0x0f6a, 0x0f7c, 0x0f8c, + // Entry 100 - 13F + 0x0fac, 0x0fba, 0x0fca, 0x0fe4, 0x1014, 0x1024, 0x1030, 0x103c, + 0x1046, 0x1054, 0x1060, 0x1072, 0x107c, 0x1086, 0x1090, 0x10a8, + 0x10b8, 0x10c2, 0x10e0, 0x10f1, 0x10f9, 0x1105, 0x110d, 0x1115, + 0x112b, 0x1147, 0x1153, 0x1161, 0x117d, 0x119d, 0x11a9, 0x11c5, + 0x11cd, 0x11e1, 0x1208, 0x120e, 0x1231, 0x124f, 0x126b, 0x128f, + 0x12ad, 0x12cb, 0x12dd, 0x12e1, 0x12f1, 0x12f7, 0x12ff, 0x1309, + 0x132a, 0x1330, 0x1348, 0x1358, 0x1380, 0x13a6, 0x13c3, 0x13cd, + 0x13df, 0x13eb, 0x13f5, 0x1409, 0x1430, 0x143e, 0x144e, 0x1456, + // Entry 140 - 17F + 0x1468, 0x1472, 0x147a, 0x148a, 0x14a3, 0x14bd, 0x14cd, 0x14d7, + 0x14ef, 0x14f9, 0x1501, 0x1509, 0x1515, 0x1527, 0x1535, 0x1543, + 0x1564, 0x1570, 0x157c, 0x1588, 0x15a8, 0x15c6, 0x15d2, 0x15ea, + 0x15fa, 0x160a, 0x1612, 0x161c, 0x1624, 0x163a, 0x1648, 0x1650, + 0x165e, 0x1676, 0x1682, 0x168a, 0x169e, 0x16a6, 0x16b6, 0x16cb, + 0x16db, 0x16e7, 0x16ef, 0x16ff, 0x170f, 0x172a, 0x1738, 0x174a, + 0x1754, 0x177d, 0x1785, 0x1799, 0x17a9, 0x17b3, 0x17c1, 0x17cd, + 0x17dd, 0x17eb, 0x17ff, 0x180b, 0x1815, 0x181f, 0x1829, 0x183b, + // Entry 180 - 1BF + 0x185d, 0x186d, 0x187d, 0x188d, 0x18a3, 0x18ad, 0x18b5, 0x18d1, + 0x18e3, 0x18f6, 0x1908, 0x1912, 0x1918, 0x1920, 0x1928, 0x1947, + 0x1951, 0x1961, 0x1969, 0x1975, 0x1983, 0x1997, 0x19a7, 0x19b7, + 0x19bf, 0x19d1, 0x19e3, 0x19ed, 0x19f5, 0x1a05, 0x1a1b, 0x1a30, + 0x1a38, 0x1a44, 0x1a5a, 0x1a6c, 0x1a80, 0x1a90, 0x1a98, 0x1ab4, + 0x1ac2, 0x1adb, 0x1ae3, 0x1af5, 0x1b03, 0x1b03, 0x1b0d, 0x1b1f, + 0x1b39, 0x1b4f, 0x1b61, 0x1b69, 0x1b85, 0x1b95, 0x1b9f, 0x1baf, + 0x1bbc, 0x1bc8, 0x1bd8, 0x1be8, 0x1c02, 0x1c10, 0x1c16, 0x1c30, + // Entry 1C0 - 1FF + 0x1c38, 0x1c59, 0x1c67, 0x1c75, 0x1c7d, 0x1c87, 0x1c93, 0x1cb2, + 0x1ccc, 0x1ce8, 0x1cf8, 0x1d0e, 0x1d22, 0x1d34, 0x1d51, 0x1d7e, + 0x1daf, 0x1dc9, 0x1de9, 0x1dfb, 0x1e0f, 0x1e1d, 0x1e2f, 0x1e3b, + 0x1e5d, 0x1e65, 0x1e77, 0x1e8d, 0x1ea1, 0x1ebb, 0x1ecf, 0x1edb, + 0x1ee5, 0x1ef1, 0x1f05, 0x1f15, 0x1f29, 0x1f35, 0x1f3b, 0x1f49, + 0x1f59, 0x1f82, 0x1f90, 0x1f9e, 0x1fac, 0x1fbe, 0x1fcc, 0x1fd6, + 0x1fee, 0x200f, 0x2032, 0x204a, 0x2056, 0x205e, 0x2066, 0x2078, + 0x2093, 0x20a7, 0x20bb, 0x20cb, 0x20d1, 0x20ec, 0x20f8, 0x2112, + // Entry 200 - 23F + 0x2126, 0x2139, 0x214a, 0x215d, 0x2170, 0x217e, 0x2194, 0x21ad, + 0x21b7, 0x21bf, 0x21e8, 0x21f4, 0x21fc, 0x220c, 0x2224, 0x2243, + 0x2251, 0x2261, 0x2269, 0x2273, 0x227b, 0x2287, 0x2291, 0x229b, + 0x22a1, 0x22b9, 0x22c9, 0x22dd, 0x22eb, 0x22f9, 0x2307, 0x231a, + 0x232b, 0x2337, 0x2343, 0x2353, 0x2369, 0x2375, 0x2383, 0x2399, + 0x23a7, 0x23b7, 0x23ee, 0x2400, 0x2412, 0x2420, 0x242a, 0x2430, + 0x2440, 0x244c, 0x246c, 0x248e, 0x249a, 0x24a2, 0x24ac, 0x24b8, + 0x24c4, 0x24d4, 0x24dc, 0x24ec, 0x24f0, 0x2500, 0x2512, 0x251a, + // Entry 240 - 27F + 0x2520, 0x252c, 0x253a, 0x2544, 0x2552, 0x2564, 0x2576, 0x258c, + 0x259e, 0x25aa, 0x25e8, 0x25f0, 0x2620, 0x2628, 0x264d, 0x264d, + 0x264d, 0x264d, 0x2674, 0x2695, 0x26b8, 0x26df, 0x26df, 0x2701, + 0x2701, 0x2701, 0x2724, 0x274b, 0x274b, 0x275d, 0x275d, 0x2787, + 0x2799, 0x27b5, 0x27d8, 0x27ff, 0x2828, +} // Size: 1250 bytes + +const mlLangStr string = "" + // Size: 12319 bytes + "അഫാർഅബ്\u200cഖാസിയൻഅവസ്റ്റാൻആഫ്രിക്കാൻസ്അകാൻ\u200cഅംഹാരിക്അരഗോണീസ്അറബിക്" + + "ആസ്സാമീസ്അവാരിക്അയ്മാറഅസർബൈജാനിബഷ്ഖിർബെലാറുഷ്യൻബൾഗേറിയൻബിസ്\u200cലാമബം" + + "ബാറബംഗാളിടിബറ്റൻബ്രെട്ടൺബോസ്നിയൻകറ്റാലാൻചെചൻചമോറോകോർസിക്കൻക്രീചെക്ക്ചർ" + + "ച്ച് സ്ലാവിക്ചുവാഷ്വെൽഷ്ഡാനിഷ്ജർമ്മൻദിവെഹിസോങ്കയൂവ്ഗ്രീക്ക്ഇംഗ്ലീഷ്എസ്" + + "\u200cപരാന്റോസ്\u200cപാനിഷ്എസ്റ്റോണിയൻബാസ്\u200cക്പേർഷ്യൻഫുലഫിന്നിഷ്ഫിജി" + + "യൻഫാറോസ്ഫ്രഞ്ച്പശ്ചിമ ഫ്രിഷിയൻഐറിഷ്സ്കോട്ടിഷ് ഗൈലിക്ഗലീഷ്യൻഗ്വരനീഗുജറാ" + + "ത്തിമാൻസ്ഹൗസഹീബ്രുഹിന്ദിഹിരി മോതുക്രൊയേഷ്യൻഹെയ്\u200cതിയൻ ക്രിയോൾഹംഗേറ" + + "ിയൻഅർമേനിയൻഹെരേരൊഇന്റർലിംഗ്വഇൻഡോനേഷ്യൻഇന്റർലിംഗ്വേഇഗ്ബോഷുവാൻയിഇനുപിയാക" + + "്ഇഡോഐസ്\u200cലാൻഡിക്ഇറ്റാലിയൻഇനുക്റ്റിറ്റട്ട്ജാപ്പനീസ്ജാവാനീസ്ജോർജിയൻക" + + "ോംഗോകികൂയുക്വാന്യമകസാഖ്കലാല്ലിസട്ട്ഖമെർകന്നഡകൊറിയൻകനൂറികാശ്\u200cമീരിക" + + "ുർദ്ദിഷ്കോമികോർണിഷ്കിർഗിസ്ലാറ്റിൻലക്\u200cസംബർഗിഷ്ഗാണ്ടലിംബർഗിഷ്ലിംഗാല" + + "ലാവോലിത്വാനിയൻലുബ-കറ്റംഗലാറ്റ്വിയൻമലഗാസിമാർഷല്ലീസ്മവോറിമാസിഡോണിയൻമലയാള" + + "ംമംഗോളിയൻമറാത്തിമലെയ്മാൾട്ടീസ്ബർമീസ്നൗറുനോർത്ത് ഡെബിൾനേപ്പാളിഡോങ്കഡച്ച" + + "്നോർവീജിയൻ നൈനോർക്\u200cസ്നോർവീജിയൻ ബുക്\u200cമൽദക്ഷിണ നെഡിബിൾനവാജോന്യ" + + "ൻജഓക്\u200cസിറ്റൻഓജിബ്വാഒറോമോഒഡിയഒസ്സെറ്റിക്പഞ്ചാബിപാലിപോളിഷ്പഷ്\u200c" + + "തോപോർച്ചുഗീസ്ക്വെച്ചുവറൊമാഞ്ച്റുണ്ടിറൊമാനിയൻറഷ്യൻകിന്യാർവാണ്ടസംസ്" + + "\u200cകൃതംസർഡിനിയാൻസിന്ധിവടക്കൻ സമിസാംഗോസിംഹളസ്ലോവാക്സ്ലോവേനിയൻസമോവൻഷോണസ" + + "ോമാലിഅൽബേനിയൻസെർബിയൻസ്വാറ്റിതെക്കൻ സോതോസുണ്ടാനീസ്സ്വീഡിഷ്സ്വാഹിലിതമിഴ്" + + "തെലുങ്ക്താജിക്തായ്ടൈഗ്രിന്യതുർക്\u200cമെൻസ്വാനടോംഗൻടർക്കിഷ്സോംഗടാട്ടർത" + + "ാഹിതിയൻഉയ്ഘുർഉക്രേനിയൻഉറുദുഉസ്\u200cബെക്ക്വെന്ദവിയറ്റ്നാമീസ്വോളാപുക്വല" + + "്ലൂൺവൊളോഫ്ഖോസയിദ്ദിഷ്യൊറൂബാസ്വാംഗ്ചൈനീസ്സുലുഅചിനീസ്അകോലിഅഡാങ്\u200cമിഅ" + + "ഡൈഗേആഫ്രിഹിലിആഘേംഐനുഅക്കാഡിയൻഅലൂട്ട്തെക്കൻ അൾത്തായിപഴയ ഇംഗ്ലീഷ്ആൻഗികഅര" + + "മായമാപുചിഅറാപഹോഅറാവക്ആസുഓസ്\u200cട്രിയൻഅവാധിബലൂചിബാലിനീസ്ബസബാമുൻഘോമാലബ" + + "േജബേംബബെനാബാഫട്ട്പശ്ചിമ ബലൂചിഭോജ്\u200cപുരിബികോൽബിനികോംസിക്സികബ്രജ്ബോഡ" + + "ോഅക്കൂസ്ബുറിയത്ത്ബുഗിനീസ്ബുളുബ്ലിൻമെഡുംബകാഡോകാരിബ്കയൂഗഅറ്റ്സാംസെബുവാനോ" + + "ചിഗചിബ്ചഷാഗതായ്ചൂകീസ്മാരിചിനൂഗ് ജാർഗൺചോക്റ്റാവ്ചിപേവ്യൻഷെരോക്കിഷായാൻസൊ" + + "റാനി കുർദിഷ്കോപ്റ്റിക്ക്രിമിയൻ ടർക്കിഷ്സെഷൽവ ക്രിയോൾ ഫ്രഞ്ച്കാഷുബിയാൻഡ" + + "കോട്ടഡർഗ്വാതൈതദെലവേർസ്ലേവ്ഡോഗ്രിബ്ദിൻകസാർമ്മഡോഗ്രിലോവർ സോർബിയൻദ്വാലമദ്" + + "ധ്യ ഡച്ച്യോല-ഫോന്യിദ്വൈലഡാസാഗഎംബുഎഫിക്പ്രാചീന ഈജിപ്ഷ്യൻഎകാജുക്എലാമൈറ്റ" + + "്മദ്ധ്യ ഇംഗ്ലീഷ്എവോൻഡോഫങ്ഫിലിപ്പിനോഫോൻമദ്ധ്യ ഫ്രഞ്ച്പഴയ ഫ്രഞ്ച്നോർത്തേ" + + "ൻ ഫ്രിഷ്യൻഈസ്റ്റേൺ ഫ്രിഷ്യൻഫ്രിയുലിയാൻഗാഗാഗൂസ്ഗാൻ ചൈനീസ്ഗയൊഗബ്യഗീസ്ഗിൽ" + + "ബർട്ടീസ്മദ്ധ്യ ഉച്ച ജർമൻഓൾഡ് ഹൈ ജർമൻഗോണ്ഡിഗൊറോൻറാലോഗോഥിക്ക്ഗ്രബൊപുരാതന" + + " ഗ്രീക്ക്സ്വിസ് ജർമ്മൻഗുസീഗ്വിച്ചിൻഹൈഡഹാക്ക ചൈനീസ്ഹവായിയൻഹിലിഗയ്നോൺഹിറ്റ" + + "ൈറ്റ്മോങ്അപ്പർ സോർബിയൻഷ്യാങ് ചൈനീസ്ഹൂപഇബാൻഇബീബിയോഇലോകോഇംഗ്വിഷ്ലോജ്ബാൻഗ" + + "ോമ്പമചേംജൂഡിയോ-പേർഷ്യൻജൂഡിയോ-അറബിക്കര-കാൽപ്പക്കബൈൽകാചിൻജ്ജുകംബകാവികബർഡ" + + "ിയാൻകനെംബുട്യാപ്മക്കോണ്ടെകബുവെർദിയാനുകോറോഘാസിഘോറ്റാനേസേകൊയ്റ ചീനികാകോക" + + "ലെഞ്ഞിൻകിംബുണ്ടുകോമി-പെർമ്യാക്ക്കൊങ്കണികൊസറേയൻകപെല്ലേകരചൈ-ബാൽകർകരീലിയൻ" + + "കുരുഖ്ഷംഭാളബാഫിയകൊളോണിയൻകുമൈക്കുതേനൈലാഡിനോലാംഗിലഹ്\u200cൻഡലംബലഹ്ഗിയാൻല" + + "ഗോത്തമോങ്കോലൊസിവടക്കൻ ലൂറിലൂബ-ലുലുവലൂയിസെനോലുൻഡലുവോമിസോലുയിയമദുരേസേമാഫ" + + "മഗാഹിമൈഥിലിമകാസർമണ്ഡിൻഗോമസായ്മാബമോക്ഷമണ്ഡാർമെൻഡെമേരുമൊറിസിൻമദ്ധ്യ ഐറിഷ" + + "്മാഖുവാ-മീത്തോമേത്താമിക്മാക്മിനാങ്കബൗമാൻ\u200cചുമണിപ്പൂരിമോഹാക്മൊസ്സിമ" + + "ുന്ദാംഗ്പലഭാഷകൾക്രീക്ക്മിരാൻറസേമർവാരിമയീൻഏഴ്സ്യമസന്ററാനിമിൻ നാൻ ചൈനീസ്" + + "നെപ്പോളിറ്റാൻനാമലോ ജർമൻനേവാരിനിയാസ്ന്യുവാൻക്വാസിയോഗീംബൂൺനോഗൈപഴയ നോഴ്" + + "\u200cസ്ഇൻകോനോർത്തേൻ സോതോനുവേർക്ലാസിക്കൽ നേവാരിന്യാംവേസിന്യാൻകോൾന്യോറോസി" + + "മഒസേജ്ഓട്ടോമൻ തുർക്കിഷ്പങ്കാസിനൻപാഹ്ലവിപാംപൻഗപാപിയാമെന്റൊപലാവുൻനൈജീരിയ" + + "ൻ പിഡ്\u200cഗിൻപഴയ പേർഷ്യൻഫീനിഷ്യൻപൊൻപിയൻപ്രഷ്യൻപഴയ പ്രൊവൻഷ്ൽക്വിച്ചെര" + + "ാജസ്ഥാനിരാപനൂയിരാരോടോങ്കൻറോംബോറൊമാനിആരോമാനിയൻറുവാസാൻഡവേസാഖസമരിയാക്കാരു" + + "ടെ അരമായസംബുരുസസാക്സന്താലിഗംബായ്സംഗുസിസിലിയൻസ്കോട്സ്തെക്കൻ കുർദ്ദിഷ്സെ" + + "നേകസേനസെൽകപ്കൊയ്റാബൊറോ സെന്നിപഴയ ഐറിഷ്താച്ചലിറ്റ്ഷാൻചാഡിയൻ അറബിസിഡാമോത" + + "െക്കൻ സാമിലൂലീ സമിഇനാരി സാമിസ്കോൾട്ട് സമിസോണിൻകെസോജിഡിയൻശ്രാനൻ ഡോങ്കോസ" + + "െറർസാഹോസുകുമസുസുസുമേരിയൻകൊമോറിയൻപുരാതന സുറിയാനിഭാഷസുറിയാനിടിംനേടെസോടെറ" + + "േനോടെറ്റുംടൈഗ്രിടിവ്ടൊക്കേലൗക്ലിംഗോൺലിംഗ്വിറ്റ്ടമഷേക്ന്യാസാ ഡോങ്കടോക് " + + "പിസിൻതരോക്കോസിംഷ്യൻടുംബുകടുവാലുടസവാക്ക്തുവിനിയൻമധ്യ അറ്റ്\u200cലസ് ടമാ" + + "സൈറ്റ്ഉഡ്മുർട്ട്ഉഗറിട്ടിക്ഉംബുന്ദുമൂലഭാഷവൈവോട്ടിക്വുൻജോവാൾസർവൊലൈറ്റവാര" + + "േയ്വാഷൊവൂൾപിരിവു ചൈനീസ്കൽമൈക്സോഗോയാവോയെപ്പീസ്യാംഗ്ബെൻയംബകാന്റണീസ്സാപ്പ" + + "ോടെക്ബ്ലിസ്സിംബൽസ്സെനഗസ്റ്റാൻഡേർഡ് മൊറോക്കൻ റ്റാമസിയറ്റ്സുനിഭാഷാപരമായ " + + "ഉള്ളടക്കമൊന്നുമില്ലസാസാആധുനിക സ്റ്റാൻഡേർഡ് അറബിക്ഓസ്\u200cട്രിയൻ ജർമൻസ" + + "്വിസ് ഹൈ ജർമൻഓസ്\u200cട്രേലിയൻ ഇംഗ്ലീഷ്കനേഡിയൻ ഇംഗ്ലീഷ്ബ്രിട്ടീഷ് ഇംഗ്" + + "ലീഷ്അമേരിക്കൻ ഇംഗ്ലീഷ്ലാറ്റിൻ അമേരിക്കൻ സ്\u200cപാനിഷ്യൂറോപ്യൻ സ്" + + "\u200cപാനിഷ്മെക്സിക്കൻ സ്പാനിഷ്കനേഡിയൻ ഫ്രഞ്ച്സ്വിസ് ഫ്രഞ്ച്ലോ സാക്സൺഫ്ല" + + "മിഷ്ബ്രസീലിയൻ പോർച്ചുഗീസ്യൂറോപ്യൻ പോർച്ചുഗീസ്മോൾഡാവിയൻസെർബോ-ക്രൊയേഷ്യൻ" + + "കോംഗോ സ്വാഹിലിലളിതമാക്കിയ ചൈനീസ്പരമ്പരാഗത ചൈനീസ്" + +var mlLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x002a, 0x0045, 0x0069, 0x0078, 0x0090, 0x00a8, + 0x00ba, 0x00d5, 0x00ea, 0x00fc, 0x0117, 0x0129, 0x0147, 0x015f, + 0x0177, 0x0186, 0x0198, 0x01ad, 0x01c5, 0x01dd, 0x01f5, 0x0201, + 0x0210, 0x022b, 0x0237, 0x0249, 0x0274, 0x0286, 0x0295, 0x02a7, + 0x02b9, 0x02cb, 0x02da, 0x02e6, 0x02fe, 0x0316, 0x0337, 0x0352, + 0x0373, 0x0388, 0x039d, 0x03a6, 0x03be, 0x03d0, 0x03e2, 0x03f7, + 0x0422, 0x0431, 0x0462, 0x0477, 0x0489, 0x04a4, 0x04b3, 0x04bc, + 0x04ce, 0x04e0, 0x04f9, 0x0517, 0x0548, 0x0560, 0x0578, 0x058a, + // Entry 40 - 7F + 0x05ab, 0x05c9, 0x05ed, 0x05fc, 0x0611, 0x062c, 0x0635, 0x0656, + 0x0671, 0x06a1, 0x06bc, 0x06d4, 0x06e9, 0x06f8, 0x070a, 0x0722, + 0x0731, 0x0755, 0x0761, 0x0770, 0x0782, 0x0791, 0x07ac, 0x07c7, + 0x07d3, 0x07e8, 0x07fd, 0x0812, 0x0836, 0x0845, 0x0860, 0x0872, + 0x087e, 0x089c, 0x08b8, 0x08d6, 0x08e8, 0x0906, 0x0915, 0x0933, + 0x0945, 0x095d, 0x0972, 0x0981, 0x099c, 0x09ae, 0x09ba, 0x09df, + 0x09f7, 0x0a06, 0x0a15, 0x0a4f, 0x0a80, 0x0aa8, 0x0ab7, 0x0ac6, + 0x0ae4, 0x0af9, 0x0b08, 0x0b14, 0x0b35, 0x0b4a, 0x0b56, 0x0b68, + // Entry 80 - BF + 0x0b7a, 0x0b9b, 0x0bb6, 0x0bce, 0x0be0, 0x0bf8, 0x0c07, 0x0c2b, + 0x0c46, 0x0c61, 0x0c73, 0x0c8f, 0x0c9e, 0x0cad, 0x0cc5, 0x0ce3, + 0x0cf2, 0x0cfb, 0x0d0d, 0x0d25, 0x0d3a, 0x0d52, 0x0d71, 0x0d8f, + 0x0da7, 0x0dbf, 0x0dce, 0x0de6, 0x0df8, 0x0e04, 0x0e1f, 0x0e3a, + 0x0e49, 0x0e58, 0x0e70, 0x0e7c, 0x0e8e, 0x0ea6, 0x0eb8, 0x0ed3, + 0x0ee2, 0x0f00, 0x0f0f, 0x0f36, 0x0f4e, 0x0f60, 0x0f72, 0x0f7b, + 0x0f93, 0x0fa5, 0x0fba, 0x0fcc, 0x0fd8, 0x0fed, 0x0ffc, 0x1014, + 0x1023, 0x1023, 0x103e, 0x104a, 0x1053, 0x106e, 0x106e, 0x1083, + // Entry C0 - FF + 0x1083, 0x10ae, 0x10d0, 0x10df, 0x10ee, 0x1100, 0x1100, 0x1112, + 0x1112, 0x1112, 0x1124, 0x1124, 0x1124, 0x112d, 0x112d, 0x114b, + 0x114b, 0x115a, 0x1169, 0x1181, 0x1181, 0x1187, 0x1196, 0x1196, + 0x11a5, 0x11ae, 0x11ba, 0x11ba, 0x11c6, 0x11db, 0x11db, 0x11fd, + 0x1218, 0x1227, 0x1233, 0x1233, 0x123c, 0x1251, 0x1251, 0x1251, + 0x1260, 0x1260, 0x126c, 0x1281, 0x129c, 0x12b4, 0x12c0, 0x12cf, + 0x12e1, 0x12ed, 0x12ff, 0x130b, 0x1323, 0x133b, 0x1344, 0x1353, + 0x1368, 0x137a, 0x1386, 0x13a8, 0x13c6, 0x13de, 0x13f6, 0x1405, + // Entry 100 - 13F + 0x142d, 0x144b, 0x144b, 0x147c, 0x14b7, 0x14d2, 0x14e4, 0x14f6, + 0x14ff, 0x1511, 0x1523, 0x153b, 0x1547, 0x1559, 0x156b, 0x158d, + 0x158d, 0x159c, 0x15be, 0x15da, 0x15e9, 0x15f8, 0x1604, 0x1613, + 0x1613, 0x1644, 0x1659, 0x1674, 0x169f, 0x169f, 0x16b1, 0x16b1, + 0x16ba, 0x16d8, 0x16d8, 0x16e1, 0x16e1, 0x1709, 0x1728, 0x1728, + 0x1759, 0x178a, 0x17ab, 0x17b1, 0x17c3, 0x17df, 0x17e8, 0x17f4, + 0x17f4, 0x1800, 0x1821, 0x1821, 0x184d, 0x186d, 0x186d, 0x187f, + 0x189a, 0x18b2, 0x18c1, 0x18ec, 0x1911, 0x1911, 0x1911, 0x191d, + // Entry 140 - 17F + 0x1938, 0x1941, 0x1963, 0x1978, 0x1978, 0x1996, 0x19b4, 0x19c0, + 0x19e5, 0x1a0a, 0x1a13, 0x1a1f, 0x1a34, 0x1a43, 0x1a5b, 0x1a5b, + 0x1a5b, 0x1a70, 0x1a7f, 0x1a8b, 0x1ab3, 0x1ad8, 0x1ad8, 0x1af7, + 0x1b03, 0x1b12, 0x1b1e, 0x1b27, 0x1b33, 0x1b4b, 0x1b5d, 0x1b6f, + 0x1b8a, 0x1bae, 0x1bae, 0x1bba, 0x1bba, 0x1bc6, 0x1be4, 0x1c00, + 0x1c00, 0x1c00, 0x1c0c, 0x1c24, 0x1c3f, 0x1c6d, 0x1c82, 0x1c97, + 0x1cac, 0x1cc8, 0x1cc8, 0x1cc8, 0x1cdd, 0x1cef, 0x1cfe, 0x1d0d, + 0x1d25, 0x1d37, 0x1d49, 0x1d5b, 0x1d6a, 0x1d7c, 0x1d85, 0x1d9d, + // Entry 180 - 1BF + 0x1d9d, 0x1d9d, 0x1d9d, 0x1daf, 0x1daf, 0x1dc1, 0x1dcd, 0x1dec, + 0x1dec, 0x1e05, 0x1e1d, 0x1e29, 0x1e35, 0x1e41, 0x1e50, 0x1e50, + 0x1e50, 0x1e65, 0x1e6e, 0x1e7d, 0x1e8f, 0x1e9e, 0x1eb6, 0x1ec5, + 0x1ece, 0x1edd, 0x1eef, 0x1efe, 0x1f0a, 0x1f1f, 0x1f41, 0x1f66, + 0x1f78, 0x1f90, 0x1fab, 0x1fbd, 0x1fd8, 0x1fea, 0x1ffc, 0x1ffc, + 0x2017, 0x202c, 0x2044, 0x205c, 0x206e, 0x206e, 0x207a, 0x208c, + 0x20a7, 0x20cd, 0x20f4, 0x20fd, 0x2110, 0x2122, 0x2134, 0x2149, + 0x2149, 0x2161, 0x2173, 0x217f, 0x219e, 0x219e, 0x21aa, 0x21cf, + // Entry 1C0 - 1FF + 0x21de, 0x220f, 0x222a, 0x2242, 0x2254, 0x225d, 0x226c, 0x229d, + 0x22b8, 0x22cd, 0x22df, 0x2303, 0x2315, 0x2315, 0x2346, 0x2346, + 0x2346, 0x2365, 0x2365, 0x237d, 0x237d, 0x237d, 0x2392, 0x23a7, + 0x23cc, 0x23e4, 0x23e4, 0x23ff, 0x2414, 0x2432, 0x2432, 0x2432, + 0x2441, 0x2453, 0x2453, 0x2453, 0x2453, 0x246e, 0x247a, 0x248c, + 0x2495, 0x24cf, 0x24e1, 0x24f0, 0x2505, 0x2505, 0x2517, 0x2523, + 0x253b, 0x2553, 0x2553, 0x2581, 0x2590, 0x2599, 0x2599, 0x25ab, + 0x25dc, 0x25f5, 0x25f5, 0x2616, 0x261f, 0x263e, 0x2650, 0x2650, + // Entry 200 - 23F + 0x2650, 0x266f, 0x2685, 0x26a1, 0x26c6, 0x26db, 0x26f3, 0x2718, + 0x2724, 0x2730, 0x2730, 0x273f, 0x274b, 0x2763, 0x277b, 0x27af, + 0x27c7, 0x27c7, 0x27c7, 0x27d6, 0x27e2, 0x27f4, 0x2809, 0x281b, + 0x2827, 0x283f, 0x283f, 0x2857, 0x2878, 0x2878, 0x288a, 0x28ac, + 0x28c8, 0x28c8, 0x28dd, 0x28dd, 0x28f2, 0x28f2, 0x2904, 0x2916, + 0x292e, 0x2946, 0x298a, 0x29a8, 0x29c6, 0x29de, 0x29f0, 0x29f6, + 0x29f6, 0x29f6, 0x29f6, 0x29f6, 0x2a0e, 0x2a0e, 0x2a1d, 0x2a2c, + 0x2a41, 0x2a53, 0x2a5f, 0x2a74, 0x2a8d, 0x2a9f, 0x2a9f, 0x2aab, + // Entry 240 - 27F + 0x2ab7, 0x2acf, 0x2ae7, 0x2af0, 0x2af0, 0x2b0b, 0x2b29, 0x2b50, + 0x2b50, 0x2b5c, 0x2bbe, 0x2bca, 0x2c1f, 0x2c2b, 0x2c75, 0x2c75, + 0x2ca0, 0x2cc6, 0x2d03, 0x2d31, 0x2d68, 0x2d9c, 0x2de9, 0x2e1d, + 0x2e54, 0x2e54, 0x2e7f, 0x2ea7, 0x2ec0, 0x2ed5, 0x2f12, 0x2f4c, + 0x2f67, 0x2f95, 0x2fbd, 0x2ff1, 0x301f, +} // Size: 1250 bytes + +const mnLangStr string = "" + // Size: 5582 bytes + "афарабхазафрикаканамхарарагонарабассамавар хэлаймараазербайжанбашкирбела" + + "русьболгарбисламбамбарабенгалтөвдбретонбосникаталанчеченьчаморро хэлкор" + + "сикчехсүмийн славян хэлчувашуэльсданигермандивехи хэлжонхаэвэгреканглиэ" + + "сперантоиспаниэстонибаскперсфулафинляндфижифарерфранцбаруун фризынирлан" + + "дшотланд келтгаликгуаранигужаратиманксхаусаеврейхиндихорватгаитийн крео" + + "лунгарарменхерероинтерлингвоиндонезинэгдмэл хэлигбосычуань иидоисландит" + + "алиинуктитутяпонявагүржкикуюүкуаньямахасагкалалисуткамбожканнадасолонго" + + "сканури хэлкашмиркүрдкоми хэлкорныкыргызлатинлюксембурггандалимбург хэл" + + "лингалалаослитвалуба-катангалатвималагасимаршаллын хэлмаоримакедонмалай" + + "ламмонголмаратималаймалтибирмнаурухойд ндебелебалбандонгаголланднорвеги" + + "йн нинорскнорвегийн букмолөмнөд ндебеленавахонянжафранцын окситаноромоо" + + "рияоссетийнпанжабпольшпаштопортугалькечуароманшрундирумынороскинярванда" + + "санскритсардинысиндхихойд самисангосинхаласловаксловенисамоагийншонасом" + + "алиалбанисербсватисесотосунданшведсвахилитамилтэлүгүтажиктайтигринатурк" + + "менцванатонгатуркцонгататартаитынуйгарукраинурдуузбеквендавьетнамволапю" + + "куоллунволофхосаиддишёрубахятадзулуачин хэладангмэадигэагемайнуалютөмнө" + + "д алтайангикмапүчиарапагоасуастури хэлавадхибали хэлбасаа хэлбембабенаб" + + "ожпурибинисиксикабодобуги хэлблин хэлсебуано хэлчигачуук хэлмари хэлчок" + + "тау хэлчирокичэеннсорани күрдсеселва креолын франц хэлдакотадаргва хэлт" + + "айтадогриб хэлзармаловер-сорбидуалажола-фонидазага хэлэмбуэфикэкажукэво" + + "ндофилиппинфонфриулийнгагагузгийзгилбертийнгоронталошвейцари германгузы" + + "гвичинхавайхилигайныхмонгдээд сорбихупаибанибибиоилокоингушложбан хэлнг" + + "омбамачамэкабилекачин хэлжжу хэлкамбакабардин хэлтяпмакондекабүвердиану" + + "корокаси хэлкойра чиникако хэлкаленжинкимбунду хэлкоми-пермякконканикпе" + + "ллекарачай-балкаркарель хэлкурукшамбалабафиакёльш хэлкумукладинлангилез" + + "ги хэллакоталозихойд лурилуба-лулуалундалуомизолуяамадури хэлмагахи хэл" + + "маймакасармасаймокшамендэ хэлмеруморисенмакува-митометамикмак хэлминанг" + + "кабауманипуримохаукмосси хэлмунданголон хэлкрийк хэлмеранди хэлэрзямаза" + + "ндеранинеаполитан хэлнаманевариниас хэлниуи хэлквазионгиембүүнногаи хэл" + + "нкохойд сотонуернянколепангасинпампангапапьяментопалаугийннигерийн пидж" + + "ин хэлпруссийнкичерапануираротонгийнромбоароманырвасандавэсахасамбүрүса" + + "нталингамбайсангүсицилийншотландуудсенакёраборо сенитачелхитшаньөмнөд с" + + "амилюле самиинари самисколт самисонинкесранан тонгосахосукумакомори хэл" + + "сирийнтимнтэсотетумтигрклингон хэлток писинтарокотумбулатувалутасавакту" + + "ватөв атласын тамазайтудмуртумбундурутвайвунжоуолсэруоллайттаварайхалим" + + "аг хэлсогаянгбенембакантон хэлтамазитзунихэл зүйн агуулгагүйзазастандар" + + "т арабавстри германшвейцари дээр германавстрали англиканад англибритани" + + "йн англиамерикийн англилатин америкийн испаниевропын испанимексикийн ис" + + "паниканад францшвейцари францбага саксонфламандпортугаль (бразил)европы" + + "н португальмолдавхорватын сербконго свахилихялбаршуулсан хятадуламжлалт" + + " хятад" + +var mnLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0012, 0x0012, 0x001c, 0x0024, 0x002e, 0x003a, + 0x0042, 0x004c, 0x005b, 0x0067, 0x007b, 0x0087, 0x0097, 0x00a3, + 0x00af, 0x00bd, 0x00c9, 0x00d1, 0x00dd, 0x00e7, 0x00f5, 0x0101, + 0x0116, 0x0122, 0x0122, 0x0128, 0x0148, 0x0152, 0x015c, 0x0164, + 0x0170, 0x0183, 0x018d, 0x0193, 0x019b, 0x01a5, 0x01b7, 0x01c3, + 0x01cf, 0x01d7, 0x01df, 0x01e7, 0x01f5, 0x01fd, 0x0207, 0x0211, + 0x022a, 0x0236, 0x024d, 0x0257, 0x0265, 0x0275, 0x027f, 0x0289, + 0x0293, 0x029d, 0x029d, 0x02a9, 0x02c2, 0x02cc, 0x02d6, 0x02e2, + // Entry 40 - 7F + 0x02f8, 0x0308, 0x031d, 0x0325, 0x0336, 0x0336, 0x033c, 0x0348, + 0x0352, 0x0364, 0x036c, 0x0372, 0x037a, 0x037a, 0x0386, 0x0396, + 0x03a0, 0x03b2, 0x03be, 0x03cc, 0x03dc, 0x03ef, 0x03fb, 0x0403, + 0x0412, 0x041c, 0x0428, 0x0432, 0x0446, 0x0450, 0x0465, 0x0473, + 0x047b, 0x0485, 0x049c, 0x04a6, 0x04b6, 0x04cf, 0x04d9, 0x04e7, + 0x04f7, 0x0503, 0x050f, 0x0519, 0x0523, 0x052b, 0x0535, 0x054c, + 0x0556, 0x0562, 0x0570, 0x0591, 0x05b0, 0x05c9, 0x05d5, 0x05df, + 0x05fc, 0x05fc, 0x0606, 0x060e, 0x061e, 0x062a, 0x062a, 0x0634, + // Entry 80 - BF + 0x063e, 0x0650, 0x065a, 0x0666, 0x0670, 0x067a, 0x0682, 0x0696, + 0x06a6, 0x06b4, 0x06c0, 0x06d1, 0x06db, 0x06e9, 0x06f5, 0x0703, + 0x0715, 0x071d, 0x0729, 0x0735, 0x073d, 0x0747, 0x0753, 0x075f, + 0x0767, 0x0775, 0x077f, 0x078b, 0x0795, 0x079b, 0x07a9, 0x07b7, + 0x07c1, 0x07cb, 0x07d3, 0x07dd, 0x07e7, 0x07f3, 0x07fd, 0x0809, + 0x0811, 0x081b, 0x0825, 0x0833, 0x0841, 0x084d, 0x0857, 0x085f, + 0x0869, 0x0873, 0x0873, 0x087d, 0x0885, 0x0894, 0x0894, 0x08a2, + 0x08ac, 0x08ac, 0x08ac, 0x08b4, 0x08bc, 0x08bc, 0x08bc, 0x08c4, + // Entry C0 - FF + 0x08c4, 0x08d9, 0x08d9, 0x08e3, 0x08e3, 0x08ef, 0x08ef, 0x08fd, + 0x08fd, 0x08fd, 0x08fd, 0x08fd, 0x08fd, 0x0903, 0x0903, 0x0916, + 0x0916, 0x0922, 0x0922, 0x0931, 0x0931, 0x0942, 0x0942, 0x0942, + 0x0942, 0x0942, 0x094c, 0x094c, 0x0954, 0x0954, 0x0954, 0x0954, + 0x0962, 0x0962, 0x096a, 0x096a, 0x096a, 0x0978, 0x0978, 0x0978, + 0x0978, 0x0978, 0x0980, 0x0980, 0x0980, 0x098f, 0x098f, 0x099e, + 0x099e, 0x099e, 0x099e, 0x099e, 0x099e, 0x09b3, 0x09bb, 0x09bb, + 0x09bb, 0x09ca, 0x09d9, 0x09d9, 0x09ec, 0x09ec, 0x09f8, 0x0a02, + // Entry 100 - 13F + 0x0a17, 0x0a17, 0x0a17, 0x0a17, 0x0a46, 0x0a46, 0x0a52, 0x0a65, + 0x0a6f, 0x0a6f, 0x0a6f, 0x0a82, 0x0a82, 0x0a8c, 0x0a8c, 0x0aa1, + 0x0aa1, 0x0aab, 0x0aab, 0x0abc, 0x0abc, 0x0acf, 0x0ad7, 0x0adf, + 0x0adf, 0x0adf, 0x0aeb, 0x0aeb, 0x0aeb, 0x0aeb, 0x0af7, 0x0af7, + 0x0af7, 0x0b07, 0x0b07, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b0d, + 0x0b0d, 0x0b0d, 0x0b1d, 0x0b21, 0x0b2b, 0x0b2b, 0x0b2b, 0x0b2b, + 0x0b2b, 0x0b33, 0x0b47, 0x0b47, 0x0b47, 0x0b47, 0x0b47, 0x0b47, + 0x0b59, 0x0b59, 0x0b59, 0x0b59, 0x0b76, 0x0b76, 0x0b76, 0x0b7e, + // Entry 140 - 17F + 0x0b8a, 0x0b8a, 0x0b8a, 0x0b94, 0x0b94, 0x0ba6, 0x0ba6, 0x0bb0, + 0x0bc3, 0x0bc3, 0x0bcb, 0x0bd3, 0x0bdf, 0x0be9, 0x0bf3, 0x0bf3, + 0x0bf3, 0x0c06, 0x0c12, 0x0c1e, 0x0c1e, 0x0c1e, 0x0c1e, 0x0c1e, + 0x0c2a, 0x0c3b, 0x0c48, 0x0c52, 0x0c52, 0x0c69, 0x0c69, 0x0c6f, + 0x0c7d, 0x0c95, 0x0c95, 0x0c9d, 0x0c9d, 0x0cac, 0x0cac, 0x0cbf, + 0x0cbf, 0x0cbf, 0x0cce, 0x0cde, 0x0cf5, 0x0d0a, 0x0d18, 0x0d18, + 0x0d24, 0x0d3f, 0x0d3f, 0x0d3f, 0x0d52, 0x0d5c, 0x0d6a, 0x0d74, + 0x0d85, 0x0d8f, 0x0d8f, 0x0d99, 0x0da3, 0x0da3, 0x0da3, 0x0db4, + // Entry 180 - 1BF + 0x0db4, 0x0db4, 0x0db4, 0x0dc0, 0x0dc0, 0x0dc0, 0x0dc8, 0x0dd9, + 0x0dd9, 0x0dec, 0x0dec, 0x0df6, 0x0dfc, 0x0e04, 0x0e0c, 0x0e0c, + 0x0e0c, 0x0e1f, 0x0e1f, 0x0e32, 0x0e38, 0x0e46, 0x0e46, 0x0e50, + 0x0e50, 0x0e5a, 0x0e5a, 0x0e6b, 0x0e73, 0x0e81, 0x0e81, 0x0e96, + 0x0e9e, 0x0eb1, 0x0ec7, 0x0ec7, 0x0ed7, 0x0ee3, 0x0ef4, 0x0ef4, + 0x0f02, 0x0f11, 0x0f22, 0x0f37, 0x0f37, 0x0f37, 0x0f37, 0x0f3f, + 0x0f55, 0x0f55, 0x0f70, 0x0f78, 0x0f78, 0x0f84, 0x0f93, 0x0fa2, + 0x0fa2, 0x0fae, 0x0fc0, 0x0fd1, 0x0fd1, 0x0fd1, 0x0fd7, 0x0fe8, + // Entry 1C0 - 1FF + 0x0ff0, 0x0ff0, 0x0ff0, 0x0ffe, 0x0ffe, 0x0ffe, 0x0ffe, 0x0ffe, + 0x100e, 0x100e, 0x101e, 0x1032, 0x1044, 0x1044, 0x1068, 0x1068, + 0x1068, 0x1068, 0x1068, 0x1068, 0x1068, 0x1068, 0x1068, 0x1078, + 0x1078, 0x1080, 0x1080, 0x1080, 0x108e, 0x10a4, 0x10a4, 0x10a4, + 0x10ae, 0x10ae, 0x10ae, 0x10ae, 0x10ae, 0x10bc, 0x10c2, 0x10d0, + 0x10d8, 0x10d8, 0x10e6, 0x10e6, 0x10f4, 0x10f4, 0x1102, 0x110c, + 0x111c, 0x1130, 0x1130, 0x1130, 0x1130, 0x1138, 0x1138, 0x1138, + 0x1151, 0x1151, 0x1151, 0x1161, 0x1169, 0x1169, 0x1169, 0x1169, + // Entry 200 - 23F + 0x1169, 0x117c, 0x118d, 0x11a0, 0x11b3, 0x11c1, 0x11c1, 0x11d8, + 0x11d8, 0x11e0, 0x11e0, 0x11ec, 0x11ec, 0x11ec, 0x11ff, 0x11ff, + 0x120b, 0x120b, 0x120b, 0x1213, 0x121b, 0x121b, 0x1225, 0x122d, + 0x122d, 0x122d, 0x122d, 0x1242, 0x1242, 0x1242, 0x1242, 0x1242, + 0x1253, 0x1253, 0x125f, 0x125f, 0x125f, 0x125f, 0x126d, 0x1279, + 0x1287, 0x128f, 0x12b5, 0x12c1, 0x12c1, 0x12cf, 0x12d5, 0x12db, + 0x12db, 0x12db, 0x12db, 0x12db, 0x12db, 0x12db, 0x12e5, 0x12f1, + 0x1303, 0x130d, 0x130d, 0x130d, 0x130d, 0x1322, 0x1322, 0x132a, + // Entry 240 - 27F + 0x132a, 0x132a, 0x1336, 0x133e, 0x133e, 0x1351, 0x1351, 0x1351, + 0x1351, 0x1351, 0x135f, 0x1367, 0x138b, 0x1393, 0x13ac, 0x13ac, + 0x13c5, 0x13eb, 0x1406, 0x141b, 0x1438, 0x1455, 0x147f, 0x149a, + 0x14b9, 0x14b9, 0x14ce, 0x14e9, 0x14fe, 0x150c, 0x152d, 0x154e, + 0x155a, 0x1573, 0x158c, 0x15b1, 0x15ce, +} // Size: 1250 bytes + +const mrLangStr string = "" + // Size: 11500 bytes + "अफारअबखेजियनअवेस्तनअफ्रिकान्सअकानअम्हारिकअर्गोनीजअरबीआसामीअ\u200dॅव्हेरि" + + "कऐमराअझरबैजानीबष्किरबेलारुशियनबल्गेरियनबिस्लामाबाम्बाराबंगालीतिबेटीब्र" + + "ेतॉनबोस्नियनकातालानचेचेनकॅमोरोकॉर्सिकनक्रीझेकचर्च स्लाव्हिकचूवाशवेल्शड" + + "ॅनिशजर्मनदिवेहीझोंगखाएवेग्रीकइंग्रजीएस्परान्टोस्पॅनिशइस्टोनियनबास्कफार" + + "सीफुलाहफिन्निशफिजियनफरोइजफ्रेंचपश्चिमी फ्रिशियनआयरिशस्कॉट्स गेलिकगॅलिश" + + "ियनगुआरनीगुजरातीमांक्सहौसाहिब्रूहिंदीहिरी मॉटूक्रोएशियनहैतीयनहंगेरियनआ" + + "र्मेनियनहरेरोइंटरलिंग्वाइंडोनेशियनइन्टरलिंगईग्बोसिचुआन यीइनूपियाकइडौआई" + + "सलँडिकइटालियनइनुकिटुट्जपानीजावानीजजॉर्जियनकाँगोकिकुयूक्वान्यामाकझाककला" + + "ल्लिसतख्मेरकन्नडकोरियनकनुरीकाश्मीरीकुर्दिशकोमीकोर्निशकिरगीझलॅटिनलक्झें" + + "बर्गिशगांडालिंबूर्गिशलिंगालालाओलिथुआनियनल्यूबा-कटांगालात्व्हियनमलागसीम" + + "ार्शलीजमाओरीमॅसेडोनियनमल्याळममंगोलियनमराठीमलयमाल्टिज्बर्मीनउरूउत्तर दे" + + "बेलीनेपाळीडोंगाडचनॉर्वेजियन न्योर्स्कनॉर्वेजियन बोकमालदक्षिणात्य देबेल" + + "ीनावाजोन्यान्जाऑक्सितानओजिब्वाओरोमोउडियाओस्सेटिकपंजाबीपालीपोलिशपश्तोपो" + + "र्तुगीजक्वेचुआरोमान्शरुन्दीरोमानियनरशियनकिन्यार्वान्डासंस्कृतसर्दिनियन" + + "सिंधीउत्तरी सामीसांगोसिंहलास्लोव्हाकस्लोव्हेनियनसामोअनशोनासोमालीअल्बान" + + "ियनसर्बियनस्वातीसेसोथोसुंदानीजस्वीडिशस्वाहिलीतामिळतेलगूताजिकथाईतिग्रिन" + + "्यातुर्कमेनत्स्वानाटोंगनतुर्कीसोंगातातरताहितीयनउइगुरयुक्रेनियनउर्दूउझ्" + + "बेकव्हेंदाव्हिएतनामीओलापुकवालूनवोलोफखोसायिद्दिशयोरुबाझुआंगचीनीझुलूअचीन" + + "ीअकोलीअडांग्मेअडिघेअफ्रिहिलीअघेमऐनूअक्केडियनअलेउतदक्षिणात्य अल्ताईपुरा" + + "तन इंग्रजीअंगिकाअ\u200dॅरेमाइकमापुचीआरापाहोआरावाकअसुअस्तुरियनअवधीबलुची" + + "बालिनीजबसाबेजाबेम्बाबेनापश्चिमी बालोचीभोजपुरीबिकोलबिनीसिक्सिकाब्रजबोडो" + + "बुरियातबगिनीसब्लिनकॅड्डोकॅरिबअत्समसिबुआनोकिगाचिब्चाछागाताइचूकीसेमारीचि" + + "नूक जारगॉनचोक्तौशिपेव्यानचेरोकीशेयेन्नमध्य कुर्दिशकॉप्टिकक्राइमीन तुर्" + + "कीसेसेल्वा क्रिओल फ्रेंचकाशुबियनडाकोटादार्गवातायताडेलावेयरस्लाव्हडोग्र" + + "िबडिन्काझार्माडोगरीलोअर सोर्बियनदुआलामिडल डचजोला-फोंयीड्युलादाझागाएम्ब" + + "ूएफिकप्राचीन इजिप्शियनएकाजुकएलामाइटमिडल इंग्रजीइवोन्डोफँगफिलिपिनोफॉनमि" + + "डल फ्रेंचपुरातन फ्रेंचउत्तरी फ्रिशियनपौर्वात्य फ्रिशियनफ्रियुलियानगागा" + + "गाउझगॅन चिनीगायोबायागीझजिल्बरटीजमिडल हाय जर्मनपुरातन हाइ जर्मनगाँडीगोर" + + "ोन्तालोगॉथिकग्रेबोप्राचीन ग्रीकस्विस जर्मनगसीग्विच’इनहैडाहाक्का चिनीहव" + + "ाईयनहिलीगेनॉनहिट्टितेमाँगअप्पर सॉर्बियनशियांग चिनीहूपाइबानइबिबिओइलोकोइ" + + "ंगुशलोज्बानगोम्बामशामेजुदेओ-फारसीजुदेओ-अरबीकारा-कल्पककबाइलकाचिनज्जुकाम" + + "्बाकावीकबार्डियनत्यापमाकोन्देकाबवर्दियानुकोरोखासीखोतानीसकोयरा चीनीकाको" + + "कालेंजीनकिम्बन्दुकोमी-परम्याककोंकणीकोसरियनक्पेल्लेकराचय-बाल्करकरेलियनक" + + "ुरूखशांबालाबाफियाकोलोग्नियनकुमीककुतेनाईलादीनोलांगीलाह्न्डालाम्बालेझ्घी" + + "यनलाकोटामोंगोलोझिउत्तरी ल्युरीलुबा-लुलुआलुइसेनोलुन्डाल्युओमिझोल्युइयाम" + + "ादुरीसमगहीमैथिलीमकस्सरमन्डिन्गोमसाईमोक्षमंडारमेन्डेमेरूमोरिस्येनमिडल आ" + + "यरिशमाखुव्हा-मीट्टोमीटामिकमॅकमिनांग्काबाउमान्चुमणिपुरीमोहॉकमोस्सीमुंडा" + + "ंगएकविध भाषाक्रीकमिरांडिज्मारवाडीएर्झ्यामाझानदेरानीमिन नान चिनीनेपोलिट" + + "ाननामालो जर्मननेवारीनियासनियुआनक्वासिओजिएम्बूननोगाईपुरातन नॉर्सएन्कोउत" + + "्तरी सोथोनुएरअभिजात नेवारीन्यामवेझीन्यानकोलन्योरोन्झिमाओसेजओटोमान तुर्" + + "किशपंगासीनानपहलवीपाम्पान्गापापियामेन्टोपालाउआननायजिरिअन पिजिनपुरातन फा" + + "रसीफोनिशियनपोह्नपियनप्रुशियनपुरातन प्रोव्हेन्सलकीशेइराजस्थानीरापानुईरा" + + "रोटोंगनरोम्बोरोमानीअरोमानियनरव्हासँडवेसाखासामरिटान अरॅमिकसांबुरूसासाकस" + + "ंतालीगाम्बेसांगुसिसिलियनस्कॉट्सदक्षिणी कुर्दिशसेनासेल्कपकोयराबोरो सेन्" + + "नीपुरातन आयरिशताशेल्हिटशॅनसिदामोदक्षिणात्य सामील्युल सामीइनारी सामीस्क" + + "ोल्ट सामीसोनिन्केसोग्डिएनस्रानान टॉन्गोसेरेरसाहोसुकुमासुसुसुमेरियनकोमो" + + "रियनअभिजात सिरियाकसिरियाकटिम्नेतेसोतेरेनोतेतुमटाइग्रेतिवटोकेलाऊक्लिंगो" + + "नलिंगिततामाशेकन्यासा टोन्गाटोक पिसिनतारोकोसिम्शियनतुम्बुकाटुवालुतासाव्" + + "हाकटुवीनियनमध्य ऍटलास तॅमॅझायटउदमुर्तयुगॅरिटिकउम्बुन्डुरूटवाईवॉटिकवुंज" + + "ोवालसेरवोलायतावारेवाशोवार्लपिरीव्हू चिनीकाल्मिकसोगायाओयापीसयानगबेनयेमब" + + "ाकँटोनीजझेपोटेकब्लिसिम्बॉल्सझेनान्गाप्रमाण मोरोक्कन तॅमॅझायटझुनीभाषावै" + + "ज्ञानिक सामग्री नाहीझाझाआधुनिक प्रमाणित अरबीऑस्ट्रियन जर्मनस्विस हाय ज" + + "र्मनऑस्ट्रेलियन इंग्रजीकॅनडियन इंग्रजीब्रिटिश इंग्रजीअमेरिकन इंग्रजीलॅ" + + "टिन अमेरिकन स्पॅनिशयुरोपियन स्पॅनिशमेक्सिकन स्पॅनिशकॅनडियन फ्रेंचस्विस" + + " फ्रेंचलो सॅक्सनफ्लेमिशब्राझिलियन पोर्तुगीजयुरोपियन पोर्तुगीजमोल्डाव्हिय" + + "नसर्बो-क्रोएशियनकाँगो स्वाहिलीसरलीकृत चीनीपारंपारिक चीनी" + +var mrLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0024, 0x0039, 0x0057, 0x0063, 0x007b, 0x0093, + 0x009f, 0x00ae, 0x00cc, 0x00d8, 0x00f3, 0x0105, 0x0123, 0x013e, + 0x0156, 0x016e, 0x0180, 0x0192, 0x01a7, 0x01bf, 0x01d4, 0x01e3, + 0x01f5, 0x020d, 0x0219, 0x0222, 0x024a, 0x0259, 0x0268, 0x0277, + 0x0286, 0x0298, 0x02aa, 0x02b3, 0x02c2, 0x02d7, 0x02f5, 0x030a, + 0x0325, 0x0334, 0x0343, 0x0352, 0x0367, 0x0379, 0x0388, 0x039a, + 0x03c8, 0x03d7, 0x03fc, 0x0414, 0x0426, 0x043b, 0x044d, 0x0459, + 0x046b, 0x047a, 0x0493, 0x04ae, 0x04c0, 0x04d8, 0x04f3, 0x0502, + // Entry 40 - 7F + 0x0523, 0x0541, 0x055c, 0x056b, 0x0584, 0x059c, 0x05a5, 0x05bd, + 0x05d2, 0x05ed, 0x05fc, 0x0611, 0x0629, 0x0638, 0x064a, 0x0668, + 0x0674, 0x068f, 0x069e, 0x06ad, 0x06bf, 0x06ce, 0x06e6, 0x06fb, + 0x0707, 0x071c, 0x072e, 0x073d, 0x0761, 0x0770, 0x078e, 0x07a3, + 0x07ac, 0x07c7, 0x07ec, 0x080a, 0x081c, 0x0834, 0x0843, 0x0861, + 0x0876, 0x088e, 0x089d, 0x08a6, 0x08be, 0x08cd, 0x08d9, 0x08fb, + 0x090d, 0x091c, 0x0922, 0x095c, 0x098d, 0x09be, 0x09d0, 0x09e8, + 0x0a00, 0x0a15, 0x0a24, 0x0a33, 0x0a4b, 0x0a5d, 0x0a69, 0x0a78, + // Entry 80 - BF + 0x0a87, 0x0aa2, 0x0ab7, 0x0acc, 0x0ade, 0x0af6, 0x0b05, 0x0b2f, + 0x0b44, 0x0b5f, 0x0b6e, 0x0b8d, 0x0b9c, 0x0bae, 0x0bc9, 0x0bed, + 0x0bff, 0x0c0b, 0x0c1d, 0x0c38, 0x0c4d, 0x0c5f, 0x0c71, 0x0c89, + 0x0c9e, 0x0cb6, 0x0cc5, 0x0cd4, 0x0ce3, 0x0cec, 0x0d0a, 0x0d22, + 0x0d3a, 0x0d49, 0x0d5b, 0x0d6a, 0x0d76, 0x0d8e, 0x0d9d, 0x0dbb, + 0x0dca, 0x0ddc, 0x0df1, 0x0e0f, 0x0e21, 0x0e30, 0x0e3f, 0x0e4b, + 0x0e60, 0x0e72, 0x0e81, 0x0e8d, 0x0e99, 0x0ea8, 0x0eb7, 0x0ecf, + 0x0ede, 0x0ede, 0x0ef9, 0x0f05, 0x0f0e, 0x0f29, 0x0f29, 0x0f38, + // Entry C0 - FF + 0x0f38, 0x0f69, 0x0f91, 0x0fa3, 0x0fbe, 0x0fd0, 0x0fd0, 0x0fe5, + 0x0fe5, 0x0fe5, 0x0ff7, 0x0ff7, 0x0ff7, 0x1000, 0x1000, 0x101b, + 0x101b, 0x1027, 0x1036, 0x104b, 0x104b, 0x1054, 0x1054, 0x1054, + 0x1054, 0x1060, 0x1072, 0x1072, 0x107e, 0x107e, 0x107e, 0x10a6, + 0x10bb, 0x10ca, 0x10d6, 0x10d6, 0x10d6, 0x10ee, 0x10ee, 0x10ee, + 0x10fa, 0x10fa, 0x1106, 0x1106, 0x111b, 0x112d, 0x112d, 0x113c, + 0x113c, 0x114e, 0x115d, 0x115d, 0x116c, 0x1181, 0x118d, 0x119f, + 0x11b4, 0x11c6, 0x11d2, 0x11f4, 0x1206, 0x1221, 0x1233, 0x1248, + // Entry 100 - 13F + 0x126a, 0x127f, 0x127f, 0x12aa, 0x12e8, 0x1300, 0x1312, 0x1327, + 0x1336, 0x134e, 0x1363, 0x1378, 0x138a, 0x139c, 0x13ab, 0x13d0, + 0x13d0, 0x13df, 0x13f2, 0x140e, 0x1420, 0x1432, 0x1441, 0x144d, + 0x144d, 0x147e, 0x1490, 0x14a5, 0x14c7, 0x14c7, 0x14dc, 0x14dc, + 0x14e5, 0x14fd, 0x14fd, 0x1506, 0x1506, 0x1525, 0x154a, 0x154a, + 0x1575, 0x15a9, 0x15ca, 0x15d0, 0x15e2, 0x15f8, 0x1604, 0x1610, + 0x1610, 0x1619, 0x1634, 0x1634, 0x165a, 0x1686, 0x1686, 0x1695, + 0x16b3, 0x16c2, 0x16d4, 0x16f9, 0x1718, 0x1718, 0x1718, 0x1721, + // Entry 140 - 17F + 0x1739, 0x1745, 0x1764, 0x1776, 0x1776, 0x1791, 0x17a9, 0x17b5, + 0x17dd, 0x17fc, 0x1808, 0x1814, 0x1826, 0x1835, 0x1844, 0x1844, + 0x1844, 0x1859, 0x186b, 0x187a, 0x1899, 0x18b5, 0x18b5, 0x18d1, + 0x18e0, 0x18ef, 0x18fb, 0x190d, 0x1919, 0x1934, 0x1934, 0x1943, + 0x195b, 0x197f, 0x197f, 0x198b, 0x198b, 0x1997, 0x19ac, 0x19c8, + 0x19c8, 0x19c8, 0x19d4, 0x19ec, 0x1a07, 0x1a29, 0x1a3b, 0x1a50, + 0x1a68, 0x1a8a, 0x1a8a, 0x1a8a, 0x1a9f, 0x1aae, 0x1ac3, 0x1ad5, + 0x1af3, 0x1b02, 0x1b17, 0x1b29, 0x1b38, 0x1b50, 0x1b62, 0x1b7a, + // Entry 180 - 1BF + 0x1b7a, 0x1b7a, 0x1b7a, 0x1b8c, 0x1b8c, 0x1b9b, 0x1ba7, 0x1bcc, + 0x1bcc, 0x1be8, 0x1bfd, 0x1c0f, 0x1c1e, 0x1c2a, 0x1c3f, 0x1c3f, + 0x1c3f, 0x1c54, 0x1c54, 0x1c60, 0x1c72, 0x1c84, 0x1c9f, 0x1cab, + 0x1cab, 0x1cba, 0x1cc9, 0x1cdb, 0x1ce7, 0x1d02, 0x1d1e, 0x1d49, + 0x1d55, 0x1d67, 0x1d8b, 0x1d9d, 0x1db2, 0x1dc1, 0x1dd3, 0x1dd3, + 0x1de8, 0x1e04, 0x1e13, 0x1e2e, 0x1e43, 0x1e43, 0x1e43, 0x1e58, + 0x1e79, 0x1e99, 0x1eb4, 0x1ec0, 0x1ed6, 0x1ee8, 0x1ef7, 0x1f09, + 0x1f09, 0x1f1e, 0x1f36, 0x1f45, 0x1f67, 0x1f67, 0x1f76, 0x1f95, + // Entry 1C0 - 1FF + 0x1fa1, 0x1fc6, 0x1fe1, 0x1ff9, 0x200b, 0x201d, 0x2029, 0x2051, + 0x206c, 0x207b, 0x2099, 0x20bd, 0x20d2, 0x20d2, 0x20fd, 0x20fd, + 0x20fd, 0x211f, 0x211f, 0x2137, 0x2137, 0x2137, 0x2152, 0x216a, + 0x21a1, 0x21b0, 0x21b0, 0x21cb, 0x21e0, 0x21fb, 0x21fb, 0x21fb, + 0x220d, 0x221f, 0x221f, 0x221f, 0x221f, 0x223a, 0x2249, 0x2258, + 0x2264, 0x228f, 0x22a4, 0x22b3, 0x22c5, 0x22c5, 0x22d7, 0x22e6, + 0x22fe, 0x2313, 0x2313, 0x233e, 0x233e, 0x234a, 0x234a, 0x235c, + 0x238a, 0x23ac, 0x23ac, 0x23c7, 0x23d0, 0x23d0, 0x23e2, 0x23e2, + // Entry 200 - 23F + 0x23e2, 0x240d, 0x2429, 0x2445, 0x2467, 0x247f, 0x2497, 0x24bf, + 0x24ce, 0x24da, 0x24da, 0x24ec, 0x24f8, 0x2510, 0x2528, 0x2550, + 0x2565, 0x2565, 0x2565, 0x2577, 0x2583, 0x2595, 0x25a4, 0x25b9, + 0x25c2, 0x25d7, 0x25d7, 0x25ef, 0x2601, 0x2601, 0x2616, 0x263b, + 0x2654, 0x2654, 0x2666, 0x2666, 0x267e, 0x267e, 0x2696, 0x26a8, + 0x26c3, 0x26db, 0x2710, 0x2725, 0x2740, 0x275b, 0x2764, 0x276d, + 0x276d, 0x276d, 0x276d, 0x276d, 0x277c, 0x277c, 0x278b, 0x279d, + 0x27b2, 0x27be, 0x27ca, 0x27e5, 0x27fe, 0x2813, 0x2813, 0x281f, + // Entry 240 - 27F + 0x2828, 0x2837, 0x284c, 0x285b, 0x285b, 0x2870, 0x2885, 0x28ac, + 0x28ac, 0x28c4, 0x2908, 0x2914, 0x295e, 0x296a, 0x29a2, 0x29a2, + 0x29cd, 0x29f6, 0x2a2d, 0x2a58, 0x2a83, 0x2aae, 0x2ae9, 0x2b17, + 0x2b45, 0x2b45, 0x2b6d, 0x2b8f, 0x2ba8, 0x2bbd, 0x2bf7, 0x2c2b, + 0x2c4f, 0x2c7a, 0x2ca2, 0x2cc4, 0x2cec, +} // Size: 1250 bytes + +const msLangStr string = "" + // Size: 3266 bytes + "aaAbkhaziaAvestanAfrikaansAkanAmharicAragonArabAssamAvaricAymaraAzerbaij" + + "anBashkirBelarusBulgariaBislamaBambaraBenggalaTibetBretonBosniaCatalonia" + + "ChechenChamorroCorsicaCzechSlavik GerejaChuvashWalesDenmarkJermanDivehiD" + + "zongkhaEweGreekInggerisEsperantoSepanyolEstoniaBasqueParsiFulahFinlandFi" + + "jiFaroePerancisFrisian BaratIrelandScots GaelicGaliciaGuaraniGujeratManx" + + "HausaIbraniHindiCroatiaHaitiHungaryArmeniaHereroInterlinguaIndonesiaInte" + + "rlingueIgboSichuan YiIdoIcelandItaliInuktitutJepunJawaGeorgiaKongoKikuya" + + "KuanyamaKazakhstanKalaallisutKhmerKannadaKoreaKanuriKashmirKurdishKomiCo" + + "rnishKirghizLatinLuxembourgGandaLimburgishLingalaLaosLithuaniaLuba-Katan" + + "gaLatviaMalagasyMarshallMaoriMacedoniaMalayalamMongoliaMarathiBahasa Mel" + + "ayuMaltaBurmaNauruNdebele UtaraNepalNdongaBelandaNynorsk NorwayBokmål No" + + "rwayNdebele SelatanNavajoNyanjaOccitaniaOromoOriyaOssetePunjabiPolandPas" + + "htoPortugisQuechuaRomanshRundiRomaniaRusiaKinyarwandaSanskritSardiniaSin" + + "dhiSami UtaraSangoSinhalaSlovakSloveniaSamoaShonaSomaliAlbaniaSerbiaSwat" + + "iSotho SelatanSundaSwedenSwahiliTamilTeluguTajikThaiTigrinyaTurkmenTswan" + + "aTongaTurkiTsongaTatarTahitiUyghurUkraineUrduUzbekistanVendaVietnamVolap" + + "ükWalloonWolofXhosaYiddishYorubaCinaZuluAcehAkoliAdangmeAdygheArab Tuni" + + "siaAghemAinualeAltai SelatananpMapucheArapahoArab AlgeriaArab MaghribiAr" + + "ab MesirAsuAsturiaAwadhiBaluchiBaliBasaaBamunGhomalaBejaBembaBenaBafutBa" + + "lochi BaratBhojpuriBiniKomSiksikaBishnupriyaBrahuiBodoAkooseBuriatBugisB" + + "uluBlinMedumbaCayugaCebuanoChigaChukeseMariChoctawCherokeeCheyenneKurdi " + + "SoraniCopticTurki KrimeaPerancis Seselwa CreoleDakotaDargwaTaitaDogribZa" + + "rmaDogriSorbian RendahDualaJola-FonyiDazagaEmbuEfikEkajukEwondoFilipinaF" + + "onFriulianGaGagauzCina GanGbayaZoroastrian DariGeezKiribatiGilakiGoronta" + + "loGreek PurbaJerman SwitzerlandGusiiGwichʼinCina HakkaHawaiiHiligaynonHm" + + "ongSorbian AtasCina XiangHupaIbanIbibioIlokoIngushLojbanNgombaMachameKab" + + "yleKachinJjuKambaKabardianKanembuTyapMakondeKabuverdianuKoroKhasiKoyra C" + + "hiiniKhowarKakoKalenjinKimbunduKomi-PermyakKonkaniKpelleKarachay-BalkarK" + + "arelianKurukhShambalaBafiaColognianKumykLadinoLangiLahndaLezghianLakotaL" + + "oziLuri UtaraLuba-LuluaLundaLuoMizoLuyiaMaduraMafaMagahiMaithiliMakasarM" + + "asaiMabaMokshaMendeMeruMorisyenMakhuwa-MeettoMeta’MicmacMinangkabauManip" + + "uriMohawkMossiMundangPelbagai BahasaCreekMirandeseMyeneErzyaMazanderaniC" + + "ina Min NanNeapolitanNamaJerman RendahNewariNiasNiuKwasioNgiemboonNogaiN" + + "’koSotho UtaraNuerNyankolePangasinanPampangaPapiamentoPalauanNigerian " + + "PidginPrussianKʼicheʼRapanuiRarotongaRomboAromanianRwaSandaweSakhaSambur" + + "uSantaliNgambaySanguSiciliScotsKurdish SelatanSenecaSenaKoyraboro SenniT" + + "achelhitShanArab ChadianSami SelatanLule SamiInari SamiSkolt SamiSoninke" + + "Sranan TongoSahoSukumaComoriaSyriacTimneTesoTetumTigreKlingonTalyshTok P" + + "isinTarokoTumbukaTuvaluTasawaqTuvinianTamazight Atlas TengahUdmurtUmbund" + + "uRootVaiVunjoWalserWolayttaWarayWarlpiriCina WuKalmykSogaYangbenYembaKan" + + "tonisTamazight Maghribi StandardZuniTiada kandungan linguistikZazaArab S" + + "tandard ModenJerman AustriaJerman Halus SwitzerlandInggeris AustraliaIng" + + "geris KanadaInggeris BritishInggeris ASSepanyol Amerika LatinSepanyol Er" + + "opahSepanyol MexicoPerancis KanadaPerancis SwitzerlandSaxon RendahFlemis" + + "hPortugis BrazilPortugis EropahMoldaviaSerboCroatiaCongo SwahiliCina Rin" + + "gkasCina Tradisional" + +var msLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0002, 0x000a, 0x0011, 0x001a, 0x001e, 0x0025, 0x002b, + 0x002f, 0x0034, 0x003a, 0x0040, 0x004a, 0x0051, 0x0058, 0x0060, + 0x0067, 0x006e, 0x0076, 0x007b, 0x0081, 0x0087, 0x0090, 0x0097, + 0x009f, 0x00a6, 0x00a6, 0x00ab, 0x00b8, 0x00bf, 0x00c4, 0x00cb, + 0x00d1, 0x00d7, 0x00df, 0x00e2, 0x00e7, 0x00ef, 0x00f8, 0x0100, + 0x0107, 0x010d, 0x0112, 0x0117, 0x011e, 0x0122, 0x0127, 0x012f, + 0x013c, 0x0143, 0x014f, 0x0156, 0x015d, 0x0164, 0x0168, 0x016d, + 0x0173, 0x0178, 0x0178, 0x017f, 0x0184, 0x018b, 0x0192, 0x0198, + // Entry 40 - 7F + 0x01a3, 0x01ac, 0x01b7, 0x01bb, 0x01c5, 0x01c5, 0x01c8, 0x01cf, + 0x01d4, 0x01dd, 0x01e2, 0x01e6, 0x01ed, 0x01f2, 0x01f8, 0x0200, + 0x020a, 0x0215, 0x021a, 0x0221, 0x0226, 0x022c, 0x0233, 0x023a, + 0x023e, 0x0245, 0x024c, 0x0251, 0x025b, 0x0260, 0x026a, 0x0271, + 0x0275, 0x027e, 0x028a, 0x0290, 0x0298, 0x02a0, 0x02a5, 0x02ae, + 0x02b7, 0x02bf, 0x02c6, 0x02d3, 0x02d8, 0x02dd, 0x02e2, 0x02ef, + 0x02f4, 0x02fa, 0x0301, 0x030f, 0x031d, 0x032c, 0x0332, 0x0338, + 0x0341, 0x0341, 0x0346, 0x034b, 0x0351, 0x0358, 0x0358, 0x035e, + // Entry 80 - BF + 0x0364, 0x036c, 0x0373, 0x037a, 0x037f, 0x0386, 0x038b, 0x0396, + 0x039e, 0x03a6, 0x03ac, 0x03b6, 0x03bb, 0x03c2, 0x03c8, 0x03d0, + 0x03d5, 0x03da, 0x03e0, 0x03e7, 0x03ed, 0x03f2, 0x03ff, 0x0404, + 0x040a, 0x0411, 0x0416, 0x041c, 0x0421, 0x0425, 0x042d, 0x0434, + 0x043a, 0x043f, 0x0444, 0x044a, 0x044f, 0x0455, 0x045b, 0x0462, + 0x0466, 0x0470, 0x0475, 0x047c, 0x0484, 0x048b, 0x0490, 0x0495, + 0x049c, 0x04a2, 0x04a2, 0x04a6, 0x04aa, 0x04ae, 0x04b3, 0x04ba, + 0x04c0, 0x04cc, 0x04cc, 0x04d1, 0x04d5, 0x04d5, 0x04d5, 0x04d8, + // Entry C0 - FF + 0x04d8, 0x04e5, 0x04e5, 0x04e8, 0x04e8, 0x04ef, 0x04ef, 0x04f6, + 0x0502, 0x0502, 0x0502, 0x050f, 0x0519, 0x051c, 0x051c, 0x0523, + 0x0523, 0x0529, 0x0530, 0x0534, 0x0534, 0x0539, 0x053e, 0x053e, + 0x0545, 0x0549, 0x054e, 0x054e, 0x0552, 0x0557, 0x0557, 0x0564, + 0x056c, 0x056c, 0x0570, 0x0570, 0x0573, 0x057a, 0x0585, 0x0585, + 0x0585, 0x058b, 0x058f, 0x0595, 0x059b, 0x05a0, 0x05a4, 0x05a8, + 0x05af, 0x05af, 0x05af, 0x05b5, 0x05b5, 0x05bc, 0x05c1, 0x05c1, + 0x05c1, 0x05c8, 0x05cc, 0x05cc, 0x05d3, 0x05d3, 0x05db, 0x05e3, + // Entry 100 - 13F + 0x05ef, 0x05f5, 0x05f5, 0x0601, 0x0618, 0x0618, 0x061e, 0x0624, + 0x0629, 0x0629, 0x0629, 0x062f, 0x062f, 0x0634, 0x0639, 0x0647, + 0x0647, 0x064c, 0x064c, 0x0656, 0x0656, 0x065c, 0x0660, 0x0664, + 0x0664, 0x0664, 0x066a, 0x066a, 0x066a, 0x066a, 0x0670, 0x0670, + 0x0670, 0x0678, 0x0678, 0x067b, 0x067b, 0x067b, 0x067b, 0x067b, + 0x067b, 0x067b, 0x0683, 0x0685, 0x068b, 0x0693, 0x0693, 0x0698, + 0x06a8, 0x06ac, 0x06b4, 0x06ba, 0x06ba, 0x06ba, 0x06ba, 0x06ba, + 0x06c3, 0x06c3, 0x06c3, 0x06ce, 0x06e0, 0x06e0, 0x06e0, 0x06e5, + // Entry 140 - 17F + 0x06ee, 0x06ee, 0x06f8, 0x06fe, 0x06fe, 0x0708, 0x0708, 0x070d, + 0x0719, 0x0723, 0x0727, 0x072b, 0x0731, 0x0736, 0x073c, 0x073c, + 0x073c, 0x0742, 0x0748, 0x074f, 0x074f, 0x074f, 0x074f, 0x074f, + 0x0755, 0x075b, 0x075e, 0x0763, 0x0763, 0x076c, 0x0773, 0x0777, + 0x077e, 0x078a, 0x078a, 0x078e, 0x078e, 0x0793, 0x0793, 0x079f, + 0x07a5, 0x07a5, 0x07a9, 0x07b1, 0x07b9, 0x07c5, 0x07cc, 0x07cc, + 0x07d2, 0x07e1, 0x07e1, 0x07e1, 0x07e9, 0x07ef, 0x07f7, 0x07fc, + 0x0805, 0x080a, 0x080a, 0x0810, 0x0815, 0x081b, 0x081b, 0x0823, + // Entry 180 - 1BF + 0x0823, 0x0823, 0x0823, 0x0829, 0x0829, 0x0829, 0x082d, 0x0837, + 0x0837, 0x0841, 0x0841, 0x0846, 0x0849, 0x084d, 0x0852, 0x0852, + 0x0852, 0x0858, 0x085c, 0x0862, 0x086a, 0x0871, 0x0871, 0x0876, + 0x087a, 0x0880, 0x0880, 0x0885, 0x0889, 0x0891, 0x0891, 0x089f, + 0x08a6, 0x08ac, 0x08b7, 0x08b7, 0x08bf, 0x08c5, 0x08ca, 0x08ca, + 0x08d1, 0x08e0, 0x08e5, 0x08ee, 0x08ee, 0x08ee, 0x08f3, 0x08f8, + 0x0903, 0x090f, 0x0919, 0x091d, 0x092a, 0x0930, 0x0934, 0x0937, + 0x0937, 0x093d, 0x0946, 0x094b, 0x094b, 0x094b, 0x0951, 0x095c, + // Entry 1C0 - 1FF + 0x0960, 0x0960, 0x0960, 0x0968, 0x0968, 0x0968, 0x0968, 0x0968, + 0x0972, 0x0972, 0x097a, 0x0984, 0x098b, 0x098b, 0x099a, 0x099a, + 0x099a, 0x099a, 0x099a, 0x099a, 0x099a, 0x099a, 0x099a, 0x09a2, + 0x09a2, 0x09ab, 0x09ab, 0x09ab, 0x09b2, 0x09bb, 0x09bb, 0x09bb, + 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c9, 0x09cc, 0x09d3, + 0x09d8, 0x09d8, 0x09df, 0x09df, 0x09e6, 0x09e6, 0x09ed, 0x09f2, + 0x09f8, 0x09fd, 0x09fd, 0x0a0c, 0x0a12, 0x0a16, 0x0a16, 0x0a16, + 0x0a25, 0x0a25, 0x0a25, 0x0a2e, 0x0a32, 0x0a3e, 0x0a3e, 0x0a3e, + // Entry 200 - 23F + 0x0a3e, 0x0a4a, 0x0a53, 0x0a5d, 0x0a67, 0x0a6e, 0x0a6e, 0x0a7a, + 0x0a7a, 0x0a7e, 0x0a7e, 0x0a84, 0x0a84, 0x0a84, 0x0a8b, 0x0a8b, + 0x0a91, 0x0a91, 0x0a91, 0x0a96, 0x0a9a, 0x0a9a, 0x0a9f, 0x0aa4, + 0x0aa4, 0x0aa4, 0x0aa4, 0x0aab, 0x0aab, 0x0ab1, 0x0ab1, 0x0ab1, + 0x0aba, 0x0aba, 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac7, 0x0acd, + 0x0ad4, 0x0adc, 0x0af2, 0x0af8, 0x0af8, 0x0aff, 0x0b03, 0x0b06, + 0x0b06, 0x0b06, 0x0b06, 0x0b06, 0x0b06, 0x0b06, 0x0b0b, 0x0b11, + 0x0b19, 0x0b1e, 0x0b1e, 0x0b26, 0x0b2d, 0x0b33, 0x0b33, 0x0b37, + // Entry 240 - 27F + 0x0b37, 0x0b37, 0x0b3e, 0x0b43, 0x0b43, 0x0b4b, 0x0b4b, 0x0b4b, + 0x0b4b, 0x0b4b, 0x0b66, 0x0b6a, 0x0b84, 0x0b88, 0x0b9b, 0x0b9b, + 0x0ba9, 0x0bc1, 0x0bd3, 0x0be2, 0x0bf2, 0x0bfd, 0x0c13, 0x0c22, + 0x0c31, 0x0c31, 0x0c40, 0x0c54, 0x0c60, 0x0c67, 0x0c76, 0x0c85, + 0x0c8d, 0x0c99, 0x0ca6, 0x0cb2, 0x0cc2, +} // Size: 1250 bytes + +const myLangStr string = "" + // Size: 10322 bytes + "အာဖာအဘ်ခါဇီရာတောင်အာဖရိကအာကန်အမ်ဟာရစ်ခ်အာရာဂွန်အာရဗီအာသံအာဗာရစ်ခ်အိုင်မာ" + + "ရအဇာဘိုင်ဂျန်ဘက်ရှ်ကာဘီလာရုဇ်ဘူလ်ဂေးရီးယားဘစ်စ်လာမာဘန်ဘာရာဘင်္ဂါလီတိဘက" + + "်ဘရီတွန်ဘော့စ်နီးယားကတ်တလန်ချက်ချန်းချမိုရိုခိုစီကန်ခရီးချက်ချပ်ချ် စလ" + + "ာဗစ်ချူဗက်ရှ်ဝေလဒိန်းမတ်ဂျာမန်ဒီဗာဟီဒဇွန်ကာအီဝီဂရိအင်္ဂလိပ်အက်စ်ပရန်တိ" + + "ုစပိန်အက်စ်တိုးနီးယားဘာစ်ခ်ပါရှန်ဖူလာဖင်လန်ဖီဂျီဖာရိုပြင်သစ်အနောက် ဖရီ" + + "စီရန်အိုင်းရစ်ရှ်စကော့တစ်ရှ် ဂေးလစ်ခ်ဂါလီစီယာဂူအာရာနီဂူဂျာရသီမန်းဇ်ဟာဥ" + + "စာဟီးဘရူးဟိန္ဒူခရိုအေးရှားဟေတီဟန်ဂေရီအာမေးနီးယားဟီရဲရိုအင်တာလင်ဂွါအင်ဒ" + + "ိုနီးရှားအစ္ဂဘိုစီချွမ် ရီအီဒိုအိုက်စ်လန်အီတလီအီနုခ်တီတုဂျပန်ဂျာဗားဂျေ" + + "ာ်ဂျီယာကွန်ဂိုကီကူယူကွန်းယာမာကာဇာခ်ကလာအ်လီဆပ်ခမာကန္နာဒါကိုရီးယားကနူရီက" + + "က်ရှ်မီးယားကဒ်ကိုမီခိုနီရှ်ကာဂျစ်လက်တင်လူဇင်ဘတ်ဂန်ဒါလင်ဘာဂစ်ရှ်လင်ဂါလာ" + + "လာအိုလစ်သူဝေးနီးယားလူဘာ-ကတန်ဂါလတ်ဗီးယားမာလဂက်စီမာရှယ်လိဇ်မာအိုရီမက်စီဒ" + + "ိုးနီးယားမလေးရာလမ်မွန်ဂိုလီးယားမာရသီမလေးမော်လ်တာမြန်မာနော်ရူးတောင် အွန" + + "်န်ဒီဘီလီနီပေါအွန်ဒွန်ဂါဒတ်ချ်နော်ဝေး နီးနောစ်နော်ဝေး ဘွတ်ခ်မော်လ်တောင" + + "် အွန်န်ဘီလီနာဗာဟိုနရန်ဂျာအိုစီတန်အိုရိုမိုအိုရီရာအိုဆဲတစ်ခ်ပန်ချာပီပါ" + + "ဠိပိုလန်ပက်ရှ်တွန်းပေါ်တူဂီခီချူဝါအိုဝါရောမရွန်ဒီရိုမေနီယားရုရှကင်ရာဝန" + + "်ဒါသင်္သကရိုက်ဆာဒီနီးယားစင်ဒီမြောက် ဆာမိဆန်ဂိုစင်ဟာလာစလိုဗက်စလိုဗေးနီး" + + "ယားဆမိုအာရှိုနာဆိုမာလီအယ်လ်ဘေးနီးယားဆားဘီးယားဆွာဇီလန်တောင်ပိုင်း ဆိုသိ" + + "ုဆူဒန်ဆွီဒင်ဆွာဟီလီတမီးလ်တီလီဂူတာဂျစ်ထိုင်းတီဂ်ရင်ရာတာ့ခ်မင်နစ္စတန်တီဆ" + + "ဝါနာတွန်ဂါတူရကီဆွန်ဂါတာတာတဟီတီဝီဂါယူကရိန်းအူရ်ဒူဦးဇ်ဘက်ဗင်န်ဒါဗီယက်နမ်" + + "ဗိုလာပိုက်ဝါလူးန်ဝူလိုဖ်ဇိုစာဂျူးယိုရူဘာတရုတ်ဇူးလူးအာချေးဒန်မဲအဒိုင်ဂီ" + + "အာဂ်ဟိန်းအိန်နုအာလီယုတောင် အာလ်တိုင်းအင်ဂလို ဆက္ကစွန်အန်ဂီကာမာပုချီအာရ" + + "ာပါဟိုအာစုအက်စတူရီယန်းအာဝါဒီဘာလီဘာဆာဘိန်ဘာဘီနာအနောက် ဘဲလိုချီဘို့ဂျ်ပူ" + + "ရီဘီနီစစ္စီကာဗိုဒိုဘူဂစ်စ်ဘလင်စီဗူအာနိုချီဂါချူကီးစ်မာရီချော့တိုချာရို" + + "ကီချေယန်းဆိုရာနီခရီအိုလီဒါကိုတာဒါဂ်ဝါတိုင်တာဒယ်လာဝဲလ်ဒေါ့ဂ်ရစ်ဘ်ဇာမာအန" + + "ိမ့် ဆိုဘီယန်းဒူအလာအလယ်ပိုင်း ဒတ်ချ်ဂျိုလာ-ဖွန်ရီဒဇာဂါအမ်ဘူအာဖိခ်ရှေးဟ" + + "ောင်း အီဂျစ်အီကာဂျုခ်အလယ်ပိုင်း အင်္ဂလိပ်အီဝန်ဒိုဖိလစ်ပိုင်ဖော်န်အလယ်ပ" + + "ိုင်း ပြင်သစ်ဖရန်စီစ်မြောက် ဖရီစီရန်အရှေ့ ဖရီစီရန်ဖရူလီယန်းဂါဂါဂုဇ်ဂီး" + + "ဇ်ကာရီဗာတီအလယ်ပိုင်း အမြင့် ဂျာမန်ဂိုရိုတာလိုရှေးဟောင်း ဂရိဆွစ် ဂျာမန်" + + "ဂူစီးဂွစ်ချင်ဟာဝိုင်ယီဟီလီဂေနွန်မုံဆက္ကဆိုနီဟူပါအီဗန်အီဘီဘီယိုအီလိုကို" + + "အင်ဂုရှ်လိုဂျ်ဘန်ဂွမ်ဘာမချာမီဂျူဒီယို-ပါရှန်ဂျူဒီယို-အာရဗီကဘိုင်လ်ကချင" + + "်ဂျူအူကမ်ဘာကဘာဒင်တိုင်အပ်မာခွန်ဒီကဘူဗာဒီအာနူကိုရိုခါစီကိုရာ ချီအီနီကကိ" + + "ုကလန်ဂျင်ကင်ဘွန်ဒူကိုမီ-ပါမြက်ကွန်ကနီကပ်ပဲလ်ကရာချေး-ဘာကာကာရီလီယန်ကူရုပ" + + "်ခ်ရှန်ဘာလာဘာဖီအာကိုလိုနီယန်းကွမ်မိုက်လာဒီနိုလန်ဂီလက်ဇ်ဂီးယားလာကိုတာလိ" + + "ုဇီမြောက်လူရီလူဘာ-လူလူအာလွန်ဒါလူအိုမီဇိုလူရီအာမဒူရာမဂါဟီမိုင်သီလီမကာဆာ" + + "မာဆိုင်မို့ခ်ရှာမန်ဒဲမီရုမောရစ်ရှအလယ်ပိုင်း အိုင်းရစ်ရှ်မာခူဝါ-မီအီတို" + + "မီတာမစ်ခ်မက်ခ်စူကူမီနန်မန်ချူးမနိပူရမိုဟော့ခ်မိုစီမွန်ဒန်းဘာသာစကား အမျ" + + "ိုးမျိုးခရိခ်မီရန်ဒီးဇ်အီဇယာမာဇန်ဒါရန်နီနပိုလီတန်နာမာအနိမ့် ဂျာမန်နီဝါ" + + "ရီနီးရပ်စ်နူအဲယန်းကွာစီအိုအွန်ရဲဘွန်းနိုဂိုင်အွန်ကိုမြောက် ဆိုသိုနူအာန" + + "ရန်ကိုလီပန်ဂါစီနန်ပမ်ပန်ညာပါပီမင်တိုပလာအိုနိုင်ဂျီးရီးယား ပစ်ဂျင်ပါရှန" + + "် အဟောင်းပရူရှန်ကီခ်အီချီရပန်နူအီရရိုတွန်ဂန်ရွမ်ဘိုအာရိုမန်းနီးယန်းရူဝ" + + "မ်ဆန်ဒါဝီဆခါဆမ်ဘူရူဆန်တာလီအွန်ဂမ်းဘေးဆန်ဂုစစ္စလီစကော့တ်စီနာကိုရာဘိုရို" + + " ဆမ်နီအိုင်းရစ် ဟောင်းတာချယ်လ်ဟစ်ရှမ်းတောင် ဆာမိလူလီ ဆာမိအီနာရီ ဆာမိစခို" + + "းလ် ဆမ်မီဆိုနင်ကေးဆရာနန် တွန်ဂိုဆာဟိုဆူကူမာကိုမိုရီးယန်းဆီးရီးယားတင်မ်" + + "နဲတီဆိုတီတွမ်တီဂရီကလင်ဂွန်တော့ခ် ပိစင်တရိုကိုတမ်ဘူကာတူဗာလူတာဆာဝါခ်တူဗန" + + "်အလယ်အာ့တလာစ် တာမာဇိုက်အူမူရတ်အူဘန်ဒူမူလရင်းမြစ်ဗိုင်ဗွန်ဂျိုဝေါလ်ဆာဝိ" + + "ုလက်တာဝါရေးဝေါလ်ပီရီကာလ်မိုက်ဆိုဂါရန်ဘဲန်ရမ်ဘာကွမ်တုံမိုရိုကို တမဇိုက်" + + "ဇူနီဘာသာစကားနှင့် ပတ်သက်သောအရာ မရှိပါဇာဇာဩစတြီးယား ဂျာမန်အလီမဲန်နစ် ဂျ" + + "ာမန်ဩစတြေးလျှ အင်္ဂလိပ်ကနေဒါ အင်္ဂလိပ်ဗြိတိသျှ အင်္ဂလိပ်အမေရိကန် အင်္ဂ" + + "လိပ်စပိန် (ဥရောပ)ကနေဒါ ပြင်သစ်ဆွစ် ပြင်သစ်ဂျာမန် (နယ်သာလန်)ဖလီမစ်ရှ်ဘရ" + + "ာဇီး ပေါ်တူဂီဥရောပ ပေါ်တူဂီမော်လဒိုဗာကွန်ဂို ဆွာဟီလီ" + +var myLangIdx = []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0027, 0x0027, 0x0048, 0x0057, 0x0075, 0x008d, + 0x009c, 0x00a8, 0x00c3, 0x00db, 0x00ff, 0x0117, 0x012f, 0x0156, + 0x0171, 0x0186, 0x019e, 0x01ad, 0x01c2, 0x01e6, 0x01fb, 0x0216, + 0x022e, 0x0246, 0x0252, 0x025e, 0x0286, 0x02a1, 0x02aa, 0x02c2, + 0x02d4, 0x02e6, 0x02fb, 0x0307, 0x0310, 0x032b, 0x034f, 0x035e, + 0x038b, 0x039d, 0x03af, 0x03bb, 0x03cd, 0x03dc, 0x03eb, 0x0400, + 0x042b, 0x044f, 0x0489, 0x04a1, 0x04b9, 0x04d1, 0x04e3, 0x04f2, + 0x0507, 0x0519, 0x0519, 0x053a, 0x0546, 0x055b, 0x057c, 0x0591, + // Entry 40 - 7F + 0x05b2, 0x05d9, 0x05d9, 0x05ee, 0x060a, 0x060a, 0x0619, 0x0637, + 0x0646, 0x0664, 0x0673, 0x0685, 0x06a3, 0x06b8, 0x06ca, 0x06e5, + 0x06f7, 0x0715, 0x071e, 0x0733, 0x074e, 0x075d, 0x0781, 0x078a, + 0x0799, 0x07b1, 0x07c3, 0x07d5, 0x07ed, 0x07fc, 0x081d, 0x0832, + 0x0841, 0x086b, 0x088a, 0x08a5, 0x08bd, 0x08db, 0x08f0, 0x091d, + 0x0938, 0x095f, 0x096e, 0x097a, 0x0992, 0x09a4, 0x09b9, 0x09ed, + 0x09fc, 0x0a1a, 0x0a2c, 0x0a5a, 0x0a94, 0x0ac2, 0x0ad7, 0x0aec, + 0x0b04, 0x0b04, 0x0b1f, 0x0b34, 0x0b52, 0x0b6a, 0x0b76, 0x0b88, + // Entry 80 - BF + 0x0ba9, 0x0bc1, 0x0be5, 0x0bf1, 0x0c03, 0x0c21, 0x0c2d, 0x0c4b, + 0x0c6c, 0x0c8a, 0x0c99, 0x0cb8, 0x0cca, 0x0cdf, 0x0cf4, 0x0d1b, + 0x0d2d, 0x0d3f, 0x0d54, 0x0d7e, 0x0d99, 0x0db1, 0x0de5, 0x0df4, + 0x0e06, 0x0e1b, 0x0e2d, 0x0e3f, 0x0e51, 0x0e63, 0x0e7e, 0x0eab, + 0x0ec0, 0x0ed2, 0x0ee1, 0x0ef3, 0x0eff, 0x0f0e, 0x0f1a, 0x0f32, + 0x0f44, 0x0f59, 0x0f6e, 0x0f86, 0x0fa4, 0x0fb9, 0x0fce, 0x0fdd, + 0x0fe9, 0x0ffe, 0x0ffe, 0x100d, 0x101f, 0x1031, 0x1031, 0x1040, + 0x1058, 0x1058, 0x1058, 0x1073, 0x1085, 0x1085, 0x1085, 0x1097, + // Entry C0 - FF + 0x1097, 0x10c5, 0x10f3, 0x1108, 0x1108, 0x111d, 0x111d, 0x1138, + 0x1138, 0x1138, 0x1138, 0x1138, 0x1138, 0x1144, 0x1144, 0x1168, + 0x1168, 0x117a, 0x117a, 0x1186, 0x1186, 0x1192, 0x1192, 0x1192, + 0x1192, 0x1192, 0x11a4, 0x11a4, 0x11b0, 0x11b0, 0x11b0, 0x11db, + 0x11fc, 0x11fc, 0x1208, 0x1208, 0x1208, 0x121d, 0x121d, 0x121d, + 0x121d, 0x121d, 0x122f, 0x122f, 0x122f, 0x1244, 0x1244, 0x1250, + 0x1250, 0x1250, 0x1250, 0x1250, 0x1250, 0x126b, 0x127a, 0x127a, + 0x127a, 0x1292, 0x129e, 0x129e, 0x12b6, 0x12b6, 0x12ce, 0x12e3, + // Entry 100 - 13F + 0x12f8, 0x12f8, 0x12f8, 0x12f8, 0x1310, 0x1310, 0x1325, 0x1337, + 0x134c, 0x1367, 0x1367, 0x1388, 0x1388, 0x1394, 0x1394, 0x13c2, + 0x13c2, 0x13d1, 0x1402, 0x1427, 0x1427, 0x1436, 0x1445, 0x1457, + 0x1457, 0x1488, 0x14a3, 0x14a3, 0x14dd, 0x14dd, 0x14f5, 0x14f5, + 0x14f5, 0x1513, 0x1513, 0x1525, 0x1525, 0x1559, 0x1571, 0x1571, + 0x159c, 0x15c4, 0x15df, 0x15e5, 0x15f7, 0x15f7, 0x15f7, 0x15f7, + 0x15f7, 0x1606, 0x161e, 0x161e, 0x1662, 0x1662, 0x1662, 0x1662, + 0x1683, 0x1683, 0x1683, 0x16ab, 0x16ca, 0x16ca, 0x16ca, 0x16d9, + // Entry 140 - 17F + 0x16f1, 0x16f1, 0x16f1, 0x170c, 0x170c, 0x172a, 0x172a, 0x1733, + 0x174e, 0x174e, 0x175a, 0x1769, 0x1784, 0x179c, 0x17b4, 0x17b4, + 0x17b4, 0x17cf, 0x17e1, 0x17f3, 0x181e, 0x1846, 0x1846, 0x1846, + 0x185e, 0x186d, 0x187c, 0x188b, 0x188b, 0x189d, 0x189d, 0x18b5, + 0x18cd, 0x18ee, 0x18ee, 0x1900, 0x1900, 0x190c, 0x190c, 0x1931, + 0x1931, 0x1931, 0x193d, 0x1955, 0x1970, 0x1992, 0x19a7, 0x19a7, + 0x19bc, 0x19de, 0x19de, 0x19de, 0x19f9, 0x1a11, 0x1a29, 0x1a3b, + 0x1a5f, 0x1a7a, 0x1a7a, 0x1a8f, 0x1a9e, 0x1a9e, 0x1a9e, 0x1abf, + // Entry 180 - 1BF + 0x1abf, 0x1abf, 0x1abf, 0x1ad4, 0x1ad4, 0x1ad4, 0x1ae3, 0x1b01, + 0x1b01, 0x1b20, 0x1b20, 0x1b32, 0x1b41, 0x1b50, 0x1b62, 0x1b62, + 0x1b62, 0x1b71, 0x1b71, 0x1b80, 0x1b9b, 0x1baa, 0x1baa, 0x1bbf, + 0x1bbf, 0x1bda, 0x1bda, 0x1be9, 0x1bf5, 0x1c0d, 0x1c50, 0x1c78, + 0x1c84, 0x1ca2, 0x1cbd, 0x1cd2, 0x1ce4, 0x1cff, 0x1d0e, 0x1d0e, + 0x1d26, 0x1d60, 0x1d6f, 0x1d8d, 0x1d8d, 0x1d8d, 0x1d8d, 0x1d9c, + 0x1dc0, 0x1dc0, 0x1ddb, 0x1de7, 0x1e0c, 0x1e1e, 0x1e36, 0x1e4e, + 0x1e4e, 0x1e66, 0x1e87, 0x1e9f, 0x1e9f, 0x1e9f, 0x1eb4, 0x1ed9, + // Entry 1C0 - 1FF + 0x1ee5, 0x1ee5, 0x1ee5, 0x1f00, 0x1f00, 0x1f00, 0x1f00, 0x1f00, + 0x1f1e, 0x1f1e, 0x1f36, 0x1f54, 0x1f66, 0x1f66, 0x1fa9, 0x1fa9, + 0x1fa9, 0x1fd1, 0x1fd1, 0x1fd1, 0x1fd1, 0x1fd1, 0x1fd1, 0x1fe6, + 0x1fe6, 0x2001, 0x2001, 0x2001, 0x2019, 0x203a, 0x203a, 0x203a, + 0x204f, 0x204f, 0x204f, 0x204f, 0x204f, 0x207f, 0x208e, 0x20a3, + 0x20ac, 0x20ac, 0x20c1, 0x20c1, 0x20d6, 0x20d6, 0x20f7, 0x2106, + 0x2118, 0x212d, 0x212d, 0x212d, 0x212d, 0x2139, 0x2139, 0x2139, + 0x216a, 0x2198, 0x2198, 0x21b9, 0x21c8, 0x21c8, 0x21c8, 0x21c8, + // Entry 200 - 23F + 0x21c8, 0x21e4, 0x21fd, 0x221c, 0x2241, 0x225c, 0x225c, 0x2284, + 0x2284, 0x2293, 0x2293, 0x22a5, 0x22a5, 0x22a5, 0x22cc, 0x22cc, + 0x22e7, 0x22e7, 0x22e7, 0x22fc, 0x230b, 0x230b, 0x231d, 0x232c, + 0x232c, 0x232c, 0x232c, 0x2344, 0x2344, 0x2344, 0x2344, 0x2344, + 0x2366, 0x2366, 0x237b, 0x237b, 0x237b, 0x237b, 0x2390, 0x23a2, + 0x23ba, 0x23c9, 0x2409, 0x241e, 0x241e, 0x2433, 0x2454, 0x2463, + 0x2463, 0x2463, 0x2463, 0x2463, 0x2463, 0x2463, 0x247b, 0x2490, + 0x24a8, 0x24b7, 0x24b7, 0x24d2, 0x24d2, 0x24ed, 0x24ed, 0x24fc, + // Entry 240 - 27F + 0x24fc, 0x24fc, 0x2511, 0x2520, 0x2520, 0x2535, 0x2535, 0x2535, + 0x2535, 0x2535, 0x2566, 0x2572, 0x25d1, 0x25dd, 0x25dd, 0x25dd, + 0x260b, 0x263c, 0x2673, 0x269e, 0x26d2, 0x2706, 0x2706, 0x2727, + 0x2727, 0x2727, 0x274c, 0x276e, 0x279b, 0x27b6, 0x27e1, 0x2809, + 0x2827, 0x2827, 0x2852, +} // Size: 1246 bytes + +const neLangStr string = "" + // Size: 13512 bytes + "अफारअब्खाजियालीअवेस्तानअफ्रिकान्सआकानअम्हारिकअरागोनीअरबीआसामीअवारिकऐमारा" + + "अजरबैजानीबास्किरबेलारुसीबुल्गेरियालीबिस्लामबाम्बाराबंगालीतिब्बतीब्रेटन" + + "बोस्नियालीक्याटालनचेचेनचामोर्रोकोर्सिकनक्रीचेकचर्च स्लाभिकचुभासवेल्शडे" + + "निसजर्मनदिबेहीजोङ्खाइवीग्रीकअङ्ग्रेजीएस्पेरान्तोस्पेनीइस्टोनियालीबास्क" + + "फारसीफुलाहफिनिसफिजियालीफारोजफ्रान्सेलीफ्रिजियनआयरिसस्कटिस गाएलिकगलिसिय" + + "ालीगुवारानीगुजरातीमान्क्सहाउसाहिब्रुहिन्दीहिरी मोटुक्रोयसियालीहैटियाली" + + " क्रियोलहङ्गेरियालीआर्मेनियालीहेरेरोइन्टर्लिङ्गुआइन्डोनेसियालीइन्टरलिङ्ग" + + "्वेइग्बोसिचुआन यिइनुपिआक्इडोआइसल्यान्डियालीइटालेलीइनुक्टिटुटजापानीजाभा" + + "नीजर्जियालीकोङ्गोकिकुयुकुआन्यामाकाजाखकालालिसुटखमेरकन्नाडाकोरियालीकानुर" + + "ीकास्मिरीकुर्दीकोमीकोर्निसकिर्गिजल्याटिनलक्जेम्बर्गीगान्डालिम्बुर्गीलि" + + "ङ्गालालाओलिथुआनियालीलुबा-काताङ्गालात्भियालीमलागासीमार्सालीमाओरीम्यासेड" + + "ोनियालीमलयालममङ्गोलियालीमराठीमलायमाल्टिजबर्मेलीनाउरूउत्तरी न्डेबेलेनेप" + + "ालीन्दोन्गाडचनर्वेली नाइनोर्स्कनर्वेली बोकमालदक्षिण न्देबेलेनाभाजोन्या" + + "न्जाअक्सिटनओजिब्वाओरोमोउडियाअोस्सेटिकपंजाबीपालीपोलिसपास्तोपोर्तुगीक्वे" + + "चुवारोमानिसरुन्डीरोमानियालीरसियालीकिन्यारवान्डासंस्कृतसार्डिनियालीसिन्" + + "धीउत्तरी सामीसाङ्गोसिन्हालीस्लोभाकियालीस्लोभेनियालीसामोआशोनासोमालीअल्ब" + + "ानियालीसर्बियालीस्वातीदक्षिणी सोथोसुडानीस्विडिसस्वाहिलीतामिलतेलुगुताजि" + + "कथाईटिग्रिन्याटर्कमेनट्स्वानाटोङ्गनटर्किशट्सोङ्गातातारटाहिटियनउइघुरयुक" + + "्रेनीउर्दुउज्बेकीभेन्डाभियतनामीभोलापिकवाल्लुनवुलुफखोसायिद्दिसयोरूवाचिन" + + "ियाँजुलुअचाइनिजअकोलीअदाङमेअदिघेअफ्रिहिलीआघेमअइनुअक्कादियालीअलाबामाअलेउ" + + "टघेग अल्बानियालीदक्षिणी आल्टाइपुरातन अङ्ग्रेजीअङ्गिकाअरामाइकमापुचेअराओ" + + "नाअरापाहोअल्जेरियाली अरबीअरावाकमोरोक्कोली अरबीइजिप्ट अरबीआसुअमेरिकी सा" + + "ङ्केतिक भाषाअस्टुरियालीकोटावाअवधीबालुचीबालीबाभारियालीबासाबामुनबाताक तो" + + "बाघोमालाबेजाबेम्बाबेटावीबेनाबाफुटबडागापश्चिम बालोचीभोजपुरीबिकोलबिनीबन्" + + "जारकोमसिक्सिकाविष्णुप्रियाबाख्तिआरीब्रजब्राहुइबोडोअकुजबुरिआतबुगिनियाली" + + "बुलुब्लिनमेडुम्बाकाड्डोक्यारिबकायुगाअट्सामसेबुआनोचिगाचिब्चाचागाटाईचुके" + + "सेमारीचिनुक जार्गनचोक्टावचिपेव्यानचेरोकीचेयेन्नेकेन्द्रीय कुर्दीकोप्टि" + + "ककापिज्नोनक्रिमियाली तुर्कसेसेल्वा क्रिओल फ्रान्सेलीकासुवियनडाकोटादार्" + + "ग्वाताइतादेलावरदोग्रिबदिन्काजर्माडोगरीतल्लो सोर्बियनकेन्द्रीय दुसुनदुव" + + "ालामध्य डचजोला-फोनिलद्युलादाजागाएम्बुएफिकएमिलियालीपुरातन इजिप्टीएकाजुक" + + "एलामाइटमध्य अङ्ग्रेजीकेन्द्रीय युपिकइवोन्डोएक्सट्रेमादुरालीफाङफिलिपिनी" + + "फोनकाहुन फ्रान्सेलीमध्य फ्रान्सेलीपुरातन फ्रान्सेलीअर्पितानउत्तरी फ्रि" + + "जीपूर्वी फ्रिसियालीफ्रिउलियालीगागगाउजगान चिनियाँगायोग्बायागिजगिल्बर्टी" + + "गिलाकीमध्य उच्च जर्मनपुरातन उच्च जर्मनगोवा कोन्कानीगोन्डीगोरोन्टालोगोथ" + + "िकग्रेबोपुरातन ग्रिकस्वीस जर्मनफ्राफ्रागुसीगुइचिनहाइदाहक्का चिनियाँहवा" + + "इयनफिजी हिन्दीहिलिगायनोनहिट्टिटेहमोङमाथिल्लो सोर्बियनहुपाइबानइबिबियोइय" + + "ोकोइन्गसइन्ग्रियालीजमैकाली क्रेओले अङ्ग्रेजीलोज्बानन्गोम्बामाचामेजुडिय" + + "ो-फारसीजुडियो-अरबीजुटिसकारा-काल्पाककाबिलकाचिनज्जुकाम्बाकावीकाबार्दियाल" + + "ीकानेम्बुटुआपमाकोन्डेकाबुभेर्डियानुकेनयाङकोरोकाइनगाङखासीखोटानीकोयरा चि" + + "नीखोवारकिर्मान्जकीकाकोकालेन्जिनकिम्बुन्डुकोमी-पर्म्याककोन्कानीकोस्राली" + + "क्पेल्लेकाराचाय-बाल्करक्रिओकिनाराय-एकारेलियालीकुरुखशाम्बालाबाफियाकोलोग" + + "्नियालीकुमिककुतेनाइलाडिनोलाङ्गीलाहन्डालाम्बालाज्घियालीलिङ्गुवा फ्राङ्क" + + "ा नोभालिगुरियालीलिभोनियालीलाकोतालोम्बार्डमोङ्गोलोजीउत्तरी लुरीलाट्गाली" + + "लुबा-लुलुआलुइसेनोलुन्डालुओमिजोलुइयासाहित्यिक चिनियाँलाजमादुरेसेमाफामगध" + + "ीमैथिलीमाकासारमान्दिङोमसाईमाबामोक्षमन्दरमेन्डेमेरूमोरिसेनमध्य आयरिसमाख" + + "ुवा-मिट्टोमेटामिकमाकमिनाङकाबाउमान्चुमनिपुरीमोहकमोस्सीमुन्डाङबहुभाषाक्र" + + "िकमिरान्डीमाडवारीमेन्टावाईम्येनेइर्ज्यामजानडेरानीमिन नान चिनियाँनेपोलि" + + "टाननामातल्लो जर्मननेवारीनियासनिउएनअओ नागाक्वासियोन्गिएम्बुननोगाइपुरानो" + + " नोर्सेनोभियलनकोउत्तरी सोथोनुएरपरम्परागत नेवारीन्यामवेजीन्यान्कोलन्योरोन" + + "जिमाओसागेअटोमन तुर्कीपाङ्गासिनानपाहलावीपामपाङ्गापापियामेन्तोपालाउवालीप" + + "िकार्डनाइजेरियाली पिड्जिनपेन्सिलभानियाली जर्मनपुरातन फारसीपालाटिन जर्म" + + "नफोनिसियालीपिएडमोन्तेसेपोन्टिकप्रसियालीपुरातन प्रोभेन्कालकिचेचिम्बोराज" + + "ो उच्चस्थान किचुआराजस्थानीरापानुईरारोटोङ्गानरोम्बोअरोमानीयालीर्\u200cव" + + "ासान्डेअसाखासाम्बुरूसान्तालीन्गामबायसाङ्गुसिसिलियालीस्कट्सदक्षिणी कुर्" + + "दिशसेनाकोयराबोरो सेन्नीपुरातन आयरीसटाचेल्हिटशानचाड अरबीतल्लो सिलेसियाल" + + "ीदक्षिणी सामीलुले सामीइनारी सामीस्कोइट सामीसोनिन्केस्रानान टोङ्गोसाहोस" + + "ुकुमासुसूसुमेरियालीकोमोरीपरम्परागत सिरियाकसिरियाकटिम्नेटेसोटेटुमटिग्रे" + + "क्लिङ्गनन्यास टोङ्गाटोक पिसिनटारोकोमुस्लिम टाटटुम्बुकाटुभालुतासावाकटुभ" + + "िनियालीकेन्द्रीय एट्लास टामाजिघटउड्मुर्टउम्बुन्डीrootभाइमुख्य-फ्राङ्को" + + "नियालीभुन्जोवाल्सरवोलेट्टावारेवार्ल्पिरीकाल्मिकमिनग्रेलियालीसोगायाङ्बे" + + "नयेम्बान्हिनगातुकान्टोनियालीब्लिससिम्बोल्समानक मोरोक्कोन तामाजिघटजुनीभ" + + "ाषिक सामग्री छैनजाजाआधुनिक मानक अरबीअस्ट्रियाली जर्मनस्वीस हाई जर्मनअस" + + "्ट्रेलियाली अङ्ग्रेजीक्यानाडेली अङ्ग्रेजीबेलायती अङ्ग्रेजीअमेरिकी अङ्ग" + + "्रेजील्याटिन अमेरिकी स्पेनीयुरोपेली स्पेनीमेक्सिकन स्पेनीक्यानेडाली फ्" + + "रान्सेलीतल्लो साक्सनफ्लेमिसब्राजिली पोर्तुगीयुरोपेली पोर्तुगीकङ्गो स्व" + + "ाहिलीसरलिकृत चिनियाँपरम्परागत चिनियाँ" + +var neLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x002d, 0x0045, 0x0063, 0x006f, 0x0087, 0x009c, + 0x00a8, 0x00b7, 0x00c9, 0x00d8, 0x00f3, 0x0108, 0x0120, 0x0144, + 0x0159, 0x0171, 0x0183, 0x0198, 0x01aa, 0x01c8, 0x01e0, 0x01ef, + 0x0207, 0x021f, 0x022b, 0x0234, 0x0256, 0x0265, 0x0274, 0x0283, + 0x0292, 0x02a4, 0x02b6, 0x02bf, 0x02ce, 0x02e9, 0x030a, 0x031c, + 0x033d, 0x034c, 0x035b, 0x036a, 0x0379, 0x0391, 0x03a0, 0x03be, + 0x03d6, 0x03e5, 0x040a, 0x0425, 0x043d, 0x0452, 0x0467, 0x0476, + 0x0488, 0x049a, 0x04b3, 0x04d4, 0x0502, 0x0523, 0x0544, 0x0556, + // Entry 40 - 7F + 0x057d, 0x05a4, 0x05cb, 0x05da, 0x05f3, 0x060b, 0x0614, 0x0641, + 0x0656, 0x0674, 0x0686, 0x0698, 0x06b3, 0x06c5, 0x06d7, 0x06f2, + 0x0701, 0x071c, 0x0728, 0x073d, 0x0755, 0x0767, 0x077f, 0x0791, + 0x079d, 0x07b2, 0x07c7, 0x07dc, 0x0800, 0x0812, 0x0830, 0x0848, + 0x0851, 0x0872, 0x0897, 0x08b5, 0x08ca, 0x08e2, 0x08f1, 0x091b, + 0x092d, 0x094e, 0x095d, 0x0969, 0x097e, 0x0993, 0x09a2, 0x09cd, + 0x09df, 0x09f7, 0x09fd, 0x0a31, 0x0a59, 0x0a84, 0x0a96, 0x0aae, + 0x0ac3, 0x0ad8, 0x0ae7, 0x0af6, 0x0b11, 0x0b23, 0x0b2f, 0x0b3e, + // Entry 80 - BF + 0x0b50, 0x0b68, 0x0b80, 0x0b95, 0x0ba7, 0x0bc5, 0x0bda, 0x0c01, + 0x0c16, 0x0c3a, 0x0c4c, 0x0c6b, 0x0c7d, 0x0c95, 0x0cb9, 0x0cdd, + 0x0cec, 0x0cf8, 0x0d0a, 0x0d2b, 0x0d46, 0x0d58, 0x0d7a, 0x0d8c, + 0x0da1, 0x0db9, 0x0dc8, 0x0dda, 0x0de9, 0x0df2, 0x0e10, 0x0e25, + 0x0e3d, 0x0e4f, 0x0e61, 0x0e79, 0x0e88, 0x0ea0, 0x0eaf, 0x0ec7, + 0x0ed6, 0x0eeb, 0x0efd, 0x0f15, 0x0f2a, 0x0f3f, 0x0f4e, 0x0f5a, + 0x0f6f, 0x0f81, 0x0f81, 0x0f96, 0x0fa2, 0x0fb7, 0x0fc6, 0x0fd8, + 0x0fe7, 0x0fe7, 0x1002, 0x100e, 0x101a, 0x103b, 0x1050, 0x105f, + // Entry C0 - FF + 0x108a, 0x10b2, 0x10e0, 0x10f5, 0x110a, 0x111c, 0x112e, 0x1143, + 0x1171, 0x1171, 0x1183, 0x11ae, 0x11cd, 0x11d6, 0x1214, 0x1235, + 0x1247, 0x1253, 0x1265, 0x1271, 0x128f, 0x129b, 0x12aa, 0x12c6, + 0x12d8, 0x12e4, 0x12f6, 0x1308, 0x1314, 0x1323, 0x1332, 0x1357, + 0x136c, 0x137b, 0x1387, 0x1399, 0x13a2, 0x13ba, 0x13de, 0x13f9, + 0x1405, 0x141a, 0x1426, 0x1432, 0x1444, 0x1462, 0x146e, 0x147d, + 0x1495, 0x14a7, 0x14bc, 0x14ce, 0x14e0, 0x14f5, 0x1501, 0x1513, + 0x1528, 0x153a, 0x1546, 0x1568, 0x157d, 0x1598, 0x15aa, 0x15c2, + // Entry 100 - 13F + 0x15f0, 0x1605, 0x1620, 0x164e, 0x1698, 0x16b0, 0x16c2, 0x16da, + 0x16e9, 0x16fb, 0x16fb, 0x1710, 0x1722, 0x1731, 0x1740, 0x1768, + 0x1793, 0x17a5, 0x17b8, 0x17d4, 0x17e6, 0x17f8, 0x1807, 0x1813, + 0x182e, 0x1856, 0x1868, 0x187d, 0x18a5, 0x18d0, 0x18e5, 0x1915, + 0x191e, 0x1936, 0x1936, 0x193f, 0x196d, 0x1998, 0x19c9, 0x19e1, + 0x1a06, 0x1a37, 0x1a58, 0x1a5e, 0x1a6d, 0x1a8c, 0x1a98, 0x1aaa, + 0x1aaa, 0x1ab3, 0x1ace, 0x1ae0, 0x1b09, 0x1b38, 0x1b5d, 0x1b6f, + 0x1b8d, 0x1b9c, 0x1bae, 0x1bd0, 0x1bef, 0x1bef, 0x1c07, 0x1c13, + // Entry 140 - 17F + 0x1c25, 0x1c34, 0x1c59, 0x1c6b, 0x1c8a, 0x1ca8, 0x1cc0, 0x1ccc, + 0x1cfd, 0x1cfd, 0x1d09, 0x1d15, 0x1d2a, 0x1d39, 0x1d48, 0x1d69, + 0x1db0, 0x1dc5, 0x1ddd, 0x1def, 0x1e11, 0x1e30, 0x1e3f, 0x1e61, + 0x1e70, 0x1e7f, 0x1e8b, 0x1e9d, 0x1ea9, 0x1ecd, 0x1ee5, 0x1ef1, + 0x1f09, 0x1f33, 0x1f45, 0x1f51, 0x1f66, 0x1f72, 0x1f84, 0x1fa0, + 0x1faf, 0x1fd0, 0x1fdc, 0x1ff7, 0x2015, 0x203a, 0x2052, 0x206a, + 0x2082, 0x20aa, 0x20b9, 0x20d2, 0x20f0, 0x20ff, 0x2117, 0x2129, + 0x214d, 0x215c, 0x2171, 0x2183, 0x2195, 0x21aa, 0x21bc, 0x21da, + // Entry 180 - 1BF + 0x2218, 0x2236, 0x2254, 0x2266, 0x2281, 0x2293, 0x229f, 0x22be, + 0x22d6, 0x22f2, 0x2307, 0x2319, 0x2322, 0x232e, 0x233d, 0x236e, + 0x2377, 0x238f, 0x239b, 0x23a7, 0x23b9, 0x23ce, 0x23e6, 0x23f2, + 0x23fe, 0x240d, 0x241c, 0x242e, 0x243a, 0x244f, 0x246b, 0x2490, + 0x249c, 0x24ae, 0x24cc, 0x24de, 0x24f3, 0x24ff, 0x2511, 0x2511, + 0x2526, 0x253b, 0x254a, 0x2562, 0x2577, 0x2592, 0x25a4, 0x25b9, + 0x25d7, 0x2600, 0x261b, 0x2627, 0x2646, 0x2658, 0x2667, 0x2676, + 0x2689, 0x26a1, 0x26bf, 0x26ce, 0x26f3, 0x2705, 0x270e, 0x272d, + // Entry 1C0 - 1FF + 0x2739, 0x2767, 0x2782, 0x279d, 0x27af, 0x27be, 0x27cd, 0x27ef, + 0x2810, 0x2825, 0x2840, 0x2864, 0x287f, 0x2894, 0x28cb, 0x2908, + 0x2908, 0x292a, 0x294f, 0x296d, 0x2991, 0x29a6, 0x29a6, 0x29c1, + 0x29f5, 0x2a01, 0x2a4b, 0x2a66, 0x2a7b, 0x2a9c, 0x2a9c, 0x2a9c, + 0x2aae, 0x2aae, 0x2aae, 0x2aae, 0x2aae, 0x2acf, 0x2ade, 0x2af3, + 0x2aff, 0x2aff, 0x2b17, 0x2b17, 0x2b2f, 0x2b2f, 0x2b47, 0x2b59, + 0x2b77, 0x2b89, 0x2b89, 0x2bb4, 0x2bb4, 0x2bc0, 0x2bc0, 0x2bc0, + 0x2bee, 0x2c10, 0x2c10, 0x2c2b, 0x2c34, 0x2c4a, 0x2c4a, 0x2c78, + // Entry 200 - 23F + 0x2c78, 0x2c9a, 0x2cb3, 0x2ccf, 0x2cee, 0x2d06, 0x2d06, 0x2d2e, + 0x2d2e, 0x2d3a, 0x2d3a, 0x2d4c, 0x2d58, 0x2d76, 0x2d88, 0x2db9, + 0x2dce, 0x2dce, 0x2dce, 0x2de0, 0x2dec, 0x2dec, 0x2dfb, 0x2e0d, + 0x2e0d, 0x2e0d, 0x2e0d, 0x2e25, 0x2e25, 0x2e25, 0x2e25, 0x2e47, + 0x2e60, 0x2e60, 0x2e72, 0x2e72, 0x2e72, 0x2e91, 0x2ea9, 0x2ebb, + 0x2ed0, 0x2eee, 0x2f35, 0x2f4d, 0x2f4d, 0x2f68, 0x2f6c, 0x2f75, + 0x2f75, 0x2f75, 0x2f75, 0x2faf, 0x2faf, 0x2faf, 0x2fc1, 0x2fd3, + 0x2feb, 0x2ff7, 0x2ff7, 0x3015, 0x3015, 0x302a, 0x3051, 0x305d, + // Entry 240 - 27F + 0x305d, 0x305d, 0x3072, 0x3084, 0x309f, 0x30c3, 0x30c3, 0x30ed, + 0x30ed, 0x30ed, 0x312e, 0x313a, 0x3169, 0x3175, 0x31a1, 0x31a1, + 0x31d2, 0x31fb, 0x323e, 0x3278, 0x32a9, 0x32da, 0x3318, 0x3343, + 0x336e, 0x336e, 0x33ab, 0x33ab, 0x33cd, 0x33e2, 0x3413, 0x3444, + 0x3444, 0x3444, 0x346c, 0x3497, 0x34c8, +} // Size: 1250 bytes + +const nlLangStr string = "" + // Size: 4728 bytes + "AfarAbchazischAvestischAfrikaansAkanAmhaarsAragoneesArabischAssameesAvar" + + "ischAymaraAzerbeidzjaansBasjkiersWit-RussischBulgaarsBislamaBambaraBenga" + + "alsTibetaansBretonsBosnischCatalaansTsjetsjeensChamorroCorsicaansCreeTsj" + + "echischKerkslavischTsjoevasjischWelshDeensDuitsDivehiDzongkhaEweGrieksEn" + + "gelsEsperantoSpaansEstischBaskischPerzischFulahFinsFijischFaeröersFransF" + + "riesIersSchots-GaelischGalicischGuaraníGujaratiManxHausaHebreeuwsHindiHi" + + "ri MotuKroatischHaïtiaans CreoolsHongaarsArmeensHereroInterlinguaIndones" + + "ischInterlingueIgboYiInupiaqIdoIJslandsItaliaansInuktitutJapansJavaansGe" + + "orgischKongoGikuyuKuanyamaKazachsGroenlandsKhmerKannadaKoreaansKanuriKas" + + "jmiriKoerdischKomiCornishKirgizischLatijnLuxemburgsLugandaLimburgsLingal" + + "aLaotiaansLitouwsLuba-KatangaLetsMalagassischMarshalleesMaoriMacedonisch" + + "MalayalamMongoolsMarathiMaleisMalteesBirmaansNauruaansNoord-NdebeleNepal" + + "eesNdongaNederlandsNoors - NynorskNoors - BokmålZuid-NdbeleNavajoNyanjaO" + + "ccitaansOjibwaAfaan OromoOdiaOssetischPunjabiPaliPoolsPasjtoePortugeesQu" + + "echuaReto-RomaansKirundiRoemeensRussischKinyarwandaSanskrietSardijnsSind" + + "hiNoord-SamischSangoSingaleesSlowaaksSloveensSamoaansShonaSomalischAlban" + + "eesServischSwaziZuid-SothoSoendaneesZweedsSwahiliTamilTeluguTadzjieksTha" + + "iTigrinyaTurkmeensTswanaTongaansTurksTsongaTataarsTahitiaansOeigoersOekr" + + "aïensUrduOezbeeksVendaVietnameesVolapükWaalsWolofXhosaJiddischYorubaZhua" + + "ngChineesZoeloeAtjehsAkoliAdangmeAdygeesTunesisch ArabischAfrihiliAghemA" + + "inuAkkadischAlabamaAleoetischGegischZuid-AltaïschOudengelsAngikaArameesM" + + "apudungunAraonaArapahoAlgerijns ArabischArawakMarokkaans ArabischEgyptis" + + "ch ArabischAsuAmerikaanse GebarentaalAsturischKotavaAwadhiBeloetsjiBalin" + + "eesBeiersBasaBamounBatak TobaGhomala’BejaBembaBetawiBenaBafutBadagaWeste" + + "rs BeloetsjiBhojpuriBikolBiniBanjarKomSiksikaBishnupriyaBakhtiariBrajBra" + + "huiBodoAkooseBoerjatischBugineesBuluBlinMedumbaCaddoCaribischCayugaAtsam" + + "CebuanoChigaChibchaChagataiChuukeesMariChinook JargonChoctawChipewyanChe" + + "rokeeCheyenneSoranîKoptischCapiznonKrim-TataarsSeychellencreoolsKasjoebi" + + "schDakotaDargwaTaitaDelawareSlaveyDogribDinkaZarmaDogriNedersorbischDusu" + + "nDualaMiddelnederlandsJola-FonyiDyulaDazagaEmbuEfikEmilianoOudegyptischE" + + "kajukElamitischMiddelengelsYupikEwondoExtremeensFangFilipijnsTornedal-Fi" + + "nsFonCajun-FransMiddelfransOudfransArpitaansNoord-FriesOost-FriesFriulis" + + "chGaGagaoezischGanyuGayoGbayaZoroastrisch DariGe’ezGilberteesGilakiMidde" + + "lhoogduitsOudhoogduitsGoa KonkaniGondiGorontaloGothischGreboOudgrieksZwi" + + "tserduitsWayuuGuruneGusiiGwichʼinHaidaHakkaHawaïaansFijisch HindiHiligay" + + "nonHettitischHmongOppersorbischXiangyuHupaIbanIbibioIlokoIngoesjetischIn" + + "grischJamaicaans CreoolsLojbanNgombaMachameJudeo-PerzischJudeo-ArabischJ" + + "utlandsKarakalpaksKabylischKachinJjuKambaKawiKabardischKanembuTyapMakond" + + "eKaapverdisch CreoolsKenyangKoroKaingangKhasiKhotaneesKoyra ChiiniKhowar" + + "KirmanckîKakoKalenjinKimbunduKomi-PermjaaksKonkaniKosraeaansKpelleKarats" + + "jaj-BalkarischKrioKinaray-aKarelischKurukhShambalaBafiaKölschKoemuksKute" + + "naiLadinoLangiLahndaLambaLezgischLingua Franca NovaLigurischLijfsLakotaL" + + "ombardischMongoLoziNoordelijk LuriLetgaalsLuba-LuluaLuisenoLundaLuoMizoL" + + "uyiaKlassiek ChineesLazischMadoereesMafaMagahiMaithiliMakassaarsMandingo" + + "MaaMabaMoksjaMandarMendeMeruMorisyenMiddeliersMakhuwa-MeettoMeta’Mi’kmaq" + + "MinangkabauMantsjoeMeiteiMohawkMossiWest-MariMundangMeerdere talenCreekM" + + "irandeesMarwariMentawaiMyeneErzjaMazanderaniMinnanyuNapolitaansNamaNeder" + + "saksischNewariNiasNiueaansAo NagaNgumbaNgiemboonNogaiOudnoorsNovialN’KoN" + + "oord-SothoNuerKlassiek NepalbhasaNyamweziNyankoleNyoroNzimaOsageOttomaan" + + "s-TurksPangasinanPahlaviPampangaPapiamentsPalausPicardischNigeriaans Pid" + + "ginPennsylvania-DuitsPlautdietschOudperzischPaltsischFoenicischPiëmontee" + + "sPontischPohnpeiaansOudpruisischOudprovençaalsK’iche’KichwaRajasthaniRap" + + "anuiRarotonganRomagnolRiffijnsRomboRomaniRotumaansRoetheensRovianaAroeme" + + "ensRwaSandaweJakoetsSamaritaans-ArameesSamburuSasakSantaliSaurashtraNgam" + + "baySanguSiciliaansSchotsSassareesPahlavaniSenecaSenaSeriSelkoepsKoyrabor" + + "o SenniOudiersSamogitischTashelhiytShanTsjadisch ArabischSidamoSilezisch" + + " DuitsSelayarZuid-SamischLule-SamischInari-SamischSkolt-SamischSoninkeSo" + + "gdischSranantongoSererSahoSaterfriesSukumaSoesoeSoemerischShimaoreKlassi" + + "ek SyrischSyrischSilezischTuluTimneTesoTerenoTetunTigreTivTokelausTsakhu" + + "rKlingonTlingitTalyshTamashekNyasa TongaTok PisinTuroyoTarokoTsakonischT" + + "simshianMoslim TatToemboekaTuvaluaansTasawaqToevaansTamazight (Centraal-" + + "Marokko)OedmoertsOegaritischUmbunduRootVaiVenetiaansWepsischWest-VlaamsO" + + "pperfrankischVotischVõroVunjoWalserWolayttaWarayWashoWarlpiriWuyuKalmuks" + + "MingreelsSogaYaoYapeesYangbenYembaNheengatuKantoneesZapotecBlissymbolenZ" + + "eeuwsZenagaStandaard Marokkaanse TamazightZunigeen linguïstische inhoudZ" + + "azaServo-Kroatisch" + +var nlLangIdx = []uint16{ // 610 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002b, 0x0034, + 0x003c, 0x0044, 0x004c, 0x0052, 0x0060, 0x0069, 0x0075, 0x007d, + 0x0084, 0x008b, 0x0093, 0x009c, 0x00a3, 0x00ab, 0x00b4, 0x00bf, + 0x00c7, 0x00d1, 0x00d5, 0x00df, 0x00eb, 0x00f8, 0x00fd, 0x0102, + 0x0107, 0x010d, 0x0115, 0x0118, 0x011e, 0x0124, 0x012d, 0x0133, + 0x013a, 0x0142, 0x014a, 0x014f, 0x0153, 0x015a, 0x0163, 0x0168, + 0x016d, 0x0171, 0x0180, 0x0189, 0x0191, 0x0199, 0x019d, 0x01a2, + 0x01ab, 0x01b0, 0x01b9, 0x01c2, 0x01d4, 0x01dc, 0x01e3, 0x01e9, + // Entry 40 - 7F + 0x01f4, 0x01ff, 0x020a, 0x020e, 0x0210, 0x0217, 0x021a, 0x0222, + 0x022b, 0x0234, 0x023a, 0x0241, 0x024a, 0x024f, 0x0255, 0x025d, + 0x0264, 0x026e, 0x0273, 0x027a, 0x0282, 0x0288, 0x0290, 0x0299, + 0x029d, 0x02a4, 0x02ae, 0x02b4, 0x02be, 0x02c5, 0x02cd, 0x02d4, + 0x02dd, 0x02e4, 0x02f0, 0x02f4, 0x0300, 0x030b, 0x0310, 0x031b, + 0x0324, 0x032c, 0x0333, 0x0339, 0x0340, 0x0348, 0x0351, 0x035e, + 0x0366, 0x036c, 0x0376, 0x0385, 0x0394, 0x039f, 0x03a5, 0x03ab, + 0x03b4, 0x03ba, 0x03c5, 0x03c9, 0x03d2, 0x03d9, 0x03dd, 0x03e2, + // Entry 80 - BF + 0x03e9, 0x03f2, 0x03f9, 0x0405, 0x040c, 0x0414, 0x041c, 0x0427, + 0x0430, 0x0438, 0x043e, 0x044b, 0x0450, 0x0459, 0x0461, 0x0469, + 0x0471, 0x0476, 0x047f, 0x0487, 0x048f, 0x0494, 0x049e, 0x04a8, + 0x04ae, 0x04b5, 0x04ba, 0x04c0, 0x04c9, 0x04cd, 0x04d5, 0x04de, + 0x04e4, 0x04ec, 0x04f1, 0x04f7, 0x04fe, 0x0508, 0x0510, 0x051a, + 0x051e, 0x0526, 0x052b, 0x0535, 0x053d, 0x0542, 0x0547, 0x054c, + 0x0554, 0x055a, 0x0560, 0x0567, 0x056d, 0x0573, 0x0578, 0x057f, + 0x0586, 0x0598, 0x05a0, 0x05a5, 0x05a9, 0x05b2, 0x05b9, 0x05c3, + // Entry C0 - FF + 0x05ca, 0x05d8, 0x05e1, 0x05e7, 0x05ee, 0x05f8, 0x05fe, 0x0605, + 0x0617, 0x0617, 0x061d, 0x0630, 0x0642, 0x0645, 0x065c, 0x0665, + 0x066b, 0x0671, 0x067a, 0x0682, 0x0688, 0x068c, 0x0692, 0x069c, + 0x06a6, 0x06aa, 0x06af, 0x06b5, 0x06b9, 0x06be, 0x06c4, 0x06d5, + 0x06dd, 0x06e2, 0x06e6, 0x06ec, 0x06ef, 0x06f6, 0x0701, 0x070a, + 0x070e, 0x0714, 0x0718, 0x071e, 0x0729, 0x0731, 0x0735, 0x0739, + 0x0740, 0x0745, 0x074e, 0x0754, 0x0759, 0x0760, 0x0765, 0x076c, + 0x0774, 0x077c, 0x0780, 0x078e, 0x0795, 0x079e, 0x07a6, 0x07ae, + // Entry 100 - 13F + 0x07b5, 0x07bd, 0x07c5, 0x07d1, 0x07e2, 0x07ed, 0x07f3, 0x07f9, + 0x07fe, 0x0806, 0x080c, 0x0812, 0x0817, 0x081c, 0x0821, 0x082e, + 0x0833, 0x0838, 0x0848, 0x0852, 0x0857, 0x085d, 0x0861, 0x0865, + 0x086d, 0x0879, 0x087f, 0x0889, 0x0895, 0x089a, 0x08a0, 0x08aa, + 0x08ae, 0x08b7, 0x08c4, 0x08c7, 0x08d2, 0x08dd, 0x08e5, 0x08ee, + 0x08f9, 0x0903, 0x090c, 0x090e, 0x0919, 0x091e, 0x0922, 0x0927, + 0x0938, 0x093f, 0x0949, 0x094f, 0x095e, 0x096a, 0x0975, 0x097a, + 0x0983, 0x098b, 0x0990, 0x0999, 0x09a5, 0x09aa, 0x09b0, 0x09b5, + // Entry 140 - 17F + 0x09be, 0x09c3, 0x09c8, 0x09d2, 0x09df, 0x09e9, 0x09f3, 0x09f8, + 0x0a05, 0x0a0c, 0x0a10, 0x0a14, 0x0a1a, 0x0a1f, 0x0a2c, 0x0a34, + 0x0a46, 0x0a4c, 0x0a52, 0x0a59, 0x0a67, 0x0a75, 0x0a7d, 0x0a88, + 0x0a91, 0x0a97, 0x0a9a, 0x0a9f, 0x0aa3, 0x0aad, 0x0ab4, 0x0ab8, + 0x0abf, 0x0ad3, 0x0ada, 0x0ade, 0x0ae6, 0x0aeb, 0x0af4, 0x0b00, + 0x0b06, 0x0b10, 0x0b14, 0x0b1c, 0x0b24, 0x0b32, 0x0b39, 0x0b43, + 0x0b49, 0x0b5d, 0x0b61, 0x0b6a, 0x0b73, 0x0b79, 0x0b81, 0x0b86, + 0x0b8d, 0x0b94, 0x0b9b, 0x0ba1, 0x0ba6, 0x0bac, 0x0bb1, 0x0bb9, + // Entry 180 - 1BF + 0x0bcb, 0x0bd4, 0x0bd9, 0x0bdf, 0x0bea, 0x0bef, 0x0bf3, 0x0c02, + 0x0c0a, 0x0c14, 0x0c1b, 0x0c20, 0x0c23, 0x0c27, 0x0c2c, 0x0c3c, + 0x0c43, 0x0c4c, 0x0c50, 0x0c56, 0x0c5e, 0x0c68, 0x0c70, 0x0c73, + 0x0c77, 0x0c7d, 0x0c83, 0x0c88, 0x0c8c, 0x0c94, 0x0c9e, 0x0cac, + 0x0cb3, 0x0cbc, 0x0cc7, 0x0ccf, 0x0cd5, 0x0cdb, 0x0ce0, 0x0ce9, + 0x0cf0, 0x0cfe, 0x0d03, 0x0d0c, 0x0d13, 0x0d1b, 0x0d20, 0x0d25, + 0x0d30, 0x0d38, 0x0d43, 0x0d47, 0x0d54, 0x0d5a, 0x0d5e, 0x0d66, + 0x0d6d, 0x0d73, 0x0d7c, 0x0d81, 0x0d89, 0x0d8f, 0x0d95, 0x0da0, + // Entry 1C0 - 1FF + 0x0da4, 0x0db7, 0x0dbf, 0x0dc7, 0x0dcc, 0x0dd1, 0x0dd6, 0x0de5, + 0x0def, 0x0df6, 0x0dfe, 0x0e08, 0x0e0e, 0x0e18, 0x0e29, 0x0e3b, + 0x0e47, 0x0e52, 0x0e5b, 0x0e65, 0x0e70, 0x0e78, 0x0e83, 0x0e8f, + 0x0e9e, 0x0ea9, 0x0eaf, 0x0eb9, 0x0ec0, 0x0eca, 0x0ed2, 0x0eda, + 0x0edf, 0x0ee5, 0x0eee, 0x0ef7, 0x0efe, 0x0f07, 0x0f0a, 0x0f11, + 0x0f18, 0x0f2b, 0x0f32, 0x0f37, 0x0f3e, 0x0f48, 0x0f4f, 0x0f54, + 0x0f5e, 0x0f64, 0x0f6d, 0x0f76, 0x0f7c, 0x0f80, 0x0f84, 0x0f8c, + 0x0f9b, 0x0fa2, 0x0fad, 0x0fb7, 0x0fbb, 0x0fcd, 0x0fd3, 0x0fe2, + // Entry 200 - 23F + 0x0fe9, 0x0ff5, 0x1001, 0x100e, 0x101b, 0x1022, 0x102a, 0x1035, + 0x103a, 0x103e, 0x1048, 0x104e, 0x1054, 0x105e, 0x1066, 0x1076, + 0x107d, 0x1086, 0x108a, 0x108f, 0x1093, 0x1099, 0x109e, 0x10a3, + 0x10a6, 0x10ae, 0x10b5, 0x10bc, 0x10c3, 0x10c9, 0x10d1, 0x10dc, + 0x10e5, 0x10eb, 0x10f1, 0x10fb, 0x1104, 0x110e, 0x1117, 0x1121, + 0x1128, 0x1130, 0x114c, 0x1155, 0x1160, 0x1167, 0x116b, 0x116e, + 0x1178, 0x1180, 0x118b, 0x1199, 0x11a0, 0x11a5, 0x11aa, 0x11b0, + 0x11b8, 0x11bd, 0x11c2, 0x11ca, 0x11ce, 0x11d5, 0x11de, 0x11e2, + // Entry 240 - 27F + 0x11e5, 0x11eb, 0x11f2, 0x11f7, 0x1200, 0x1209, 0x1210, 0x121c, + 0x1222, 0x1228, 0x1247, 0x124b, 0x1265, 0x1269, 0x1269, 0x1269, + 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, + 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, + 0x1269, 0x1278, +} // Size: 1244 bytes + +const noLangStr string = "" + // Size: 4834 bytes + "afarabkhasiskavestiskafrikaansakanamhariskaragonskarabiskassamesiskavari" + + "skaymaraaserbajdsjanskbasjkirskhviterussiskbulgarskbislamabambarabengali" + + "tibetanskbretonskbosniskkatalansktsjetsjenskchamorrokorsikanskcreetsjekk" + + "iskkirkeslavisktsjuvasjiskwalisiskdansktyskdhivehidzongkhaewegreskengels" + + "kesperantospanskestiskbaskiskpersiskfulfuldefinskfijianskfærøyskfranskve" + + "stfrisiskirskskotsk-gæliskgalisiskguaranigujaratimanskhausahebraiskhindi" + + "hiri motukroatiskhaitiskungarskarmenskhererointerlinguaindonesiskinterli" + + "ngueibosichuan-yiinupiakidoislandskitalienskinuittiskjapanskjavanesiskge" + + "orgiskkikongokikuyukuanyamakasakhiskgrønlandskkhmerkannadakoreanskkanuri" + + "kasjmirikurdiskkomikorniskkirgisisklatinluxemburgskgandalimburgsklingala" + + "laotisklitauiskluba-katangalatviskgassiskmarshallesiskmaorimakedonskmala" + + "yalammongolskmarathimalayiskmaltesiskburmesisknaurunord-ndebelenepalindo" + + "nganederlandsknorsk nynorsknorsk bokmålsør-ndebelenavajonyanjaoksitansko" + + "jibwaoromooriyaossetiskpunjabipalipolskpashtoportugisiskquechuaretoroman" + + "skrundirumenskrussiskkinyarwandasanskritsardisksindhinordsamisksangosing" + + "alesiskslovakiskslovensksamoanskshonasomalialbanskserbiskswatisør-sothos" + + "undanesisksvenskswahilitamiltelugutadsjikiskthaitigrinjaturkmensksetswan" + + "atongansktyrkisktsongatatarisktahitiskuiguriskukrainskurduusbekiskvendav" + + "ietnamesiskvolapykvallonskwolofxhosajiddiskjorubazhuangkinesiskzuluachin" + + "esiskacoliadangmeadygeisktunisisk-arabiskafrihiliaghemainuakkadiskalabam" + + "aaleutiskgegisk-albansksøraltaiskgammelengelskangikaarameiskmapudungunar" + + "aonaarapahoalgerisk arabiskarawakmarokkansk-arabiskegyptisk arabiskasuam" + + "erikansk tegnspråkasturiskkotavaavadhibaluchibalinesiskbairiskbasaabamun" + + "batak tobaghomalabejabembabetawibenabafutbadagavestbalutsjibhojpuribikol" + + "binibanjarkomsiksikabishnupriyabakhtiaribrajbrahuibodoakoseburjatiskbugi" + + "nesiskbulublinmedumbacaddokaribiskcayugaatsamcebuanskkigachibchatsjagata" + + "ichuukesiskmarichinookchoctawchipewianskcherokesiskcheyennekurdisk (sora" + + "ni)koptiskkapizkrimtatariskseselwakasjubiskdakotadargwataitadelawareslav" + + "eydogribdinkazarmadogrilavsorbisksentraldusundualamellomnederlandskjola-" + + "fonyidyuladazagakiembuefikemilianskgammelegyptiskekajukelamittiskmellome" + + "ngelsksentralyupikewondoekstremaduranskfangfilipinotornedalsfinskfoncaju" + + "nfranskmellomfranskgammelfranskarpitansknordfrisiskøstfrisiskfriulianskg" + + "agagausiskgangayogbayazoroastrisk darigeezkiribatiskgilekimellomhøytyskg" + + "ammelhøytyskgoansk konkanigondigorontalogotiskgrebogammelgresksveitserty" + + "skwayuufrafragusiigwichinhaidahakkahawaiiskfijiansk hindihiligaynonhetti" + + "ttiskhmonghøysorbiskxianghupaibanibibioilokoingusjiskingriskjamaicansk k" + + "reolengelsklojbanngombamachamejødepersiskjødearabiskjyskkarakalpakiskkab" + + "ylskkachinjjukambakawikabardiskkanembutyapmakondekappverdiskkenyangkorok" + + "aingangkhasikhotanesiskkoyra chiinikhowarkirmanckikakokalenjinkimbunduko" + + "mipermjakiskkonkanikosraeanskkpellekaratsjajbalkarskkriokinaray-akarelsk" + + "kurukhshambalabafiakølnskkumykiskkutenailadinsklangilahndalambalesgiskli" + + "ngua franca novaligurisklivisklakotalombardiskmongolozinord-lurilatgalli" + + "skluba-lulualuisenolundaluomizoluhyaklassisk kinesisklaziskmaduresiskmaf" + + "amagahimaithilimakasarmandingomasaimabamoksjamandarmendemerumauritisk-kr" + + "eolskmellomirskmakhuwa-meettometa’micmacminangkabaumandsjumanipurimohawk" + + "mossivestmariskmundangflere språkcreekmirandesiskmarwarimentawaimyeneerz" + + "iamazandaraniminnannapolitansknamanedertysknewariniasniueanskao nagakwas" + + "iongiemboonnogaiskgammelnorsknovialnʼkonord-sothonuerklassisk newarinyam" + + "wezinyankolenyoronzimaosageottomansk tyrkiskpangasinanpahlavipampangapap" + + "iamentopalauiskpikardisknigeriansk pidginspråkpennsylvaniatyskplautdiets" + + "chgammelpersiskpalatintyskfønikiskpiemontesiskpontiskponapiskprøyssiskga" + + "mmelprovençalskquichékichwa (Chimborazo-høylandet)rajasthanirapanuirarot" + + "onganskromagnolskriffromboromanirotumanskrusinskrovianaaromanskrwasandaw" + + "ejakutisksamaritansk arameisksamburusasaksantalisaurashtrangambaysangusi" + + "cilianskskotsksassaresisk sardisksørkurdisksenecasenaseriselkupiskkoyrab" + + "oro sennigammelirsksamogitisktachelhitshantsjadisk arabisksidamolavschle" + + "siskselayarsørsamisklulesamiskenaresamiskskoltesamisksoninkesogdisksrana" + + "nserersahosaterfrisisksukumasususumeriskkomoriskklassisk syriskgammelsyr" + + "iskschlesisktulutemnetesoterenotetumtigrétivtokelauisktsakhurskklingontl" + + "ingittalysjtamasjeknyasa-tongansktok pisinturoyotarokotsakonisktsimshian" + + "muslimsk tattumbukatuvalsktasawaqtuvinsksentralmarokkansk tamazightudmur" + + "tiskugaritiskumbundurotvaivenetianskvepsiskvestflamskMain-frankiskvotisk" + + "sørestiskvunjowalsertyskwolayttawaray-waraywashowarlpiriwukalmukkiskming" + + "relsksogayaoyapesiskyangbenyembanheengatukantonesiskzapotekiskblissymbol" + + "erzeeuwszenagastandard marrokansk tamazightzuniuten språklig innholdzaza" + + "iskmoderne standardarabisknedersaksiskflamskmoldovskserbokroatiskkongole" + + "sisk swahiliforenklet kinesisktradisjonell kinesisk" + +var noLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000d, 0x0015, 0x001e, 0x0022, 0x002a, 0x0032, + 0x0039, 0x0043, 0x004a, 0x0050, 0x005e, 0x0067, 0x0073, 0x007b, + 0x0082, 0x0089, 0x0090, 0x0099, 0x00a1, 0x00a8, 0x00b1, 0x00bc, + 0x00c4, 0x00ce, 0x00d2, 0x00db, 0x00e7, 0x00f2, 0x00fa, 0x00ff, + 0x0103, 0x010a, 0x0112, 0x0115, 0x011a, 0x0121, 0x012a, 0x0130, + 0x0136, 0x013d, 0x0144, 0x014c, 0x0151, 0x0159, 0x0162, 0x0168, + 0x0173, 0x0177, 0x0185, 0x018d, 0x0194, 0x019c, 0x01a1, 0x01a6, + 0x01ae, 0x01b3, 0x01bc, 0x01c4, 0x01cb, 0x01d2, 0x01d9, 0x01df, + // Entry 40 - 7F + 0x01ea, 0x01f4, 0x01ff, 0x0202, 0x020c, 0x0213, 0x0216, 0x021e, + 0x0227, 0x0230, 0x0237, 0x0241, 0x0249, 0x0250, 0x0256, 0x025e, + 0x0267, 0x0272, 0x0277, 0x027e, 0x0286, 0x028c, 0x0294, 0x029b, + 0x029f, 0x02a6, 0x02af, 0x02b4, 0x02bf, 0x02c4, 0x02cd, 0x02d4, + 0x02db, 0x02e3, 0x02ef, 0x02f6, 0x02fd, 0x030a, 0x030f, 0x0318, + 0x0321, 0x0329, 0x0330, 0x0338, 0x0341, 0x034a, 0x034f, 0x035b, + 0x0361, 0x0367, 0x0372, 0x037f, 0x038c, 0x0398, 0x039e, 0x03a4, + 0x03ad, 0x03b3, 0x03b8, 0x03bd, 0x03c5, 0x03cc, 0x03d0, 0x03d5, + // Entry 80 - BF + 0x03db, 0x03e6, 0x03ed, 0x03f8, 0x03fd, 0x0404, 0x040b, 0x0416, + 0x041e, 0x0425, 0x042b, 0x0435, 0x043a, 0x0445, 0x044e, 0x0456, + 0x045e, 0x0463, 0x0469, 0x0470, 0x0477, 0x047c, 0x0486, 0x0491, + 0x0497, 0x049e, 0x04a3, 0x04a9, 0x04b3, 0x04b7, 0x04bf, 0x04c8, + 0x04d0, 0x04d8, 0x04df, 0x04e5, 0x04ed, 0x04f5, 0x04fd, 0x0505, + 0x0509, 0x0511, 0x0516, 0x0522, 0x0529, 0x0531, 0x0536, 0x053b, + 0x0542, 0x0548, 0x054e, 0x0556, 0x055a, 0x0564, 0x0569, 0x0570, + 0x0578, 0x0588, 0x0590, 0x0595, 0x0599, 0x05a1, 0x05a8, 0x05b0, + // Entry C0 - FF + 0x05be, 0x05c9, 0x05d6, 0x05dc, 0x05e4, 0x05ee, 0x05f4, 0x05fb, + 0x060b, 0x060b, 0x0611, 0x0623, 0x0633, 0x0636, 0x064b, 0x0653, + 0x0659, 0x065f, 0x0666, 0x0670, 0x0677, 0x067c, 0x0681, 0x068b, + 0x0692, 0x0696, 0x069b, 0x06a1, 0x06a5, 0x06aa, 0x06b0, 0x06bc, + 0x06c4, 0x06c9, 0x06cd, 0x06d3, 0x06d6, 0x06dd, 0x06e8, 0x06f1, + 0x06f5, 0x06fb, 0x06ff, 0x0704, 0x070d, 0x0717, 0x071b, 0x071f, + 0x0726, 0x072b, 0x0733, 0x0739, 0x073e, 0x0746, 0x074a, 0x0751, + 0x075a, 0x0764, 0x0768, 0x076f, 0x0776, 0x0781, 0x078c, 0x0794, + // Entry 100 - 13F + 0x07a4, 0x07ab, 0x07b0, 0x07bc, 0x07c3, 0x07cc, 0x07d2, 0x07d8, + 0x07dd, 0x07e5, 0x07eb, 0x07f1, 0x07f6, 0x07fb, 0x0800, 0x080a, + 0x0816, 0x081b, 0x082c, 0x0836, 0x083b, 0x0841, 0x0847, 0x084b, + 0x0854, 0x0862, 0x0868, 0x0872, 0x087f, 0x088b, 0x0891, 0x08a0, + 0x08a4, 0x08ac, 0x08ba, 0x08bd, 0x08c8, 0x08d4, 0x08e0, 0x08e9, + 0x08f4, 0x08ff, 0x0909, 0x090b, 0x0914, 0x0917, 0x091b, 0x0920, + 0x0930, 0x0934, 0x093e, 0x0944, 0x0952, 0x0960, 0x096e, 0x0973, + 0x097c, 0x0982, 0x0987, 0x0992, 0x099e, 0x09a3, 0x09a9, 0x09ae, + // Entry 140 - 17F + 0x09b5, 0x09ba, 0x09bf, 0x09c7, 0x09d5, 0x09df, 0x09e9, 0x09ee, + 0x09f9, 0x09fe, 0x0a02, 0x0a06, 0x0a0c, 0x0a11, 0x0a1a, 0x0a21, + 0x0a38, 0x0a3e, 0x0a44, 0x0a4b, 0x0a57, 0x0a63, 0x0a67, 0x0a74, + 0x0a7b, 0x0a81, 0x0a84, 0x0a89, 0x0a8d, 0x0a96, 0x0a9d, 0x0aa1, + 0x0aa8, 0x0ab3, 0x0aba, 0x0abe, 0x0ac6, 0x0acb, 0x0ad6, 0x0ae2, + 0x0ae8, 0x0af1, 0x0af5, 0x0afd, 0x0b05, 0x0b13, 0x0b1a, 0x0b24, + 0x0b2a, 0x0b3b, 0x0b3f, 0x0b48, 0x0b4f, 0x0b55, 0x0b5d, 0x0b62, + 0x0b69, 0x0b71, 0x0b78, 0x0b7f, 0x0b84, 0x0b8a, 0x0b8f, 0x0b96, + // Entry 180 - 1BF + 0x0ba8, 0x0bb0, 0x0bb6, 0x0bbc, 0x0bc6, 0x0bcb, 0x0bcf, 0x0bd8, + 0x0be2, 0x0bec, 0x0bf3, 0x0bf8, 0x0bfb, 0x0bff, 0x0c04, 0x0c15, + 0x0c1b, 0x0c25, 0x0c29, 0x0c2f, 0x0c37, 0x0c3e, 0x0c46, 0x0c4b, + 0x0c4f, 0x0c55, 0x0c5b, 0x0c60, 0x0c64, 0x0c75, 0x0c7f, 0x0c8d, + 0x0c94, 0x0c9a, 0x0ca5, 0x0cac, 0x0cb4, 0x0cba, 0x0cbf, 0x0cc9, + 0x0cd0, 0x0cdc, 0x0ce1, 0x0cec, 0x0cf3, 0x0cfb, 0x0d00, 0x0d05, + 0x0d10, 0x0d16, 0x0d21, 0x0d25, 0x0d2e, 0x0d34, 0x0d38, 0x0d40, + 0x0d47, 0x0d4d, 0x0d56, 0x0d5d, 0x0d68, 0x0d6e, 0x0d73, 0x0d7d, + // Entry 1C0 - 1FF + 0x0d81, 0x0d90, 0x0d98, 0x0da0, 0x0da5, 0x0daa, 0x0daf, 0x0dc0, + 0x0dca, 0x0dd1, 0x0dd9, 0x0de3, 0x0deb, 0x0df4, 0x0e0b, 0x0e1b, + 0x0e27, 0x0e34, 0x0e3f, 0x0e48, 0x0e54, 0x0e5b, 0x0e63, 0x0e6d, + 0x0e7f, 0x0e86, 0x0ea4, 0x0eae, 0x0eb5, 0x0ec1, 0x0ecb, 0x0ecf, + 0x0ed4, 0x0eda, 0x0ee3, 0x0eea, 0x0ef1, 0x0ef9, 0x0efc, 0x0f03, + 0x0f0b, 0x0f1f, 0x0f26, 0x0f2b, 0x0f32, 0x0f3c, 0x0f43, 0x0f48, + 0x0f52, 0x0f58, 0x0f6b, 0x0f76, 0x0f7c, 0x0f80, 0x0f84, 0x0f8d, + 0x0f9c, 0x0fa6, 0x0fb0, 0x0fb9, 0x0fbd, 0x0fcd, 0x0fd3, 0x0fdf, + // Entry 200 - 23F + 0x0fe6, 0x0ff0, 0x0ffa, 0x1005, 0x1011, 0x1018, 0x101f, 0x1025, + 0x102a, 0x102e, 0x103a, 0x1040, 0x1044, 0x104c, 0x1054, 0x1063, + 0x106f, 0x1078, 0x107c, 0x1081, 0x1085, 0x108b, 0x1090, 0x1096, + 0x1099, 0x10a3, 0x10ac, 0x10b3, 0x10ba, 0x10c0, 0x10c8, 0x10d6, + 0x10df, 0x10e5, 0x10eb, 0x10f4, 0x10fd, 0x1109, 0x1110, 0x1117, + 0x111e, 0x1125, 0x1140, 0x1149, 0x1152, 0x1159, 0x115c, 0x115f, + 0x1169, 0x1170, 0x117a, 0x1187, 0x118d, 0x1197, 0x119c, 0x11a6, + 0x11ae, 0x11b9, 0x11be, 0x11c6, 0x11c8, 0x11d2, 0x11db, 0x11df, + // Entry 240 - 27F + 0x11e2, 0x11ea, 0x11f1, 0x11f6, 0x11ff, 0x120a, 0x1214, 0x1220, + 0x1226, 0x122c, 0x1249, 0x124d, 0x1263, 0x126a, 0x1281, 0x1281, + 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, + 0x1281, 0x1281, 0x1281, 0x1281, 0x128d, 0x1293, 0x1293, 0x1293, + 0x129b, 0x12a8, 0x12bb, 0x12cd, 0x12e2, +} // Size: 1250 bytes + +const paLangStr string = "" + // Size: 8148 bytes + "ਅਫ਼ਾਰਅਬਖਾਜ਼ੀਅਨਅਫ਼ਰੀਕੀਅਕਾਨਅਮਹਾਰਿਕਅਰਾਗੋਨੀਅਰਬੀਅਸਾਮੀਅਵਾਰਿਕਅਈਮਾਰਾਅਜ਼ਰਬਾਈਜਾਨੀਬ" + + "ਸ਼ਕੀਰਬੇਲਾਰੂਸੀਬੁਲਗਾਰੀਆਈਬਿਸਲਾਮਾਬੰਬਾਰਾਬੰਗਾਲੀਤਿੱਬਤੀਬਰੇਟਨਬੋਸਨੀਆਈਕੈਟਾਲਾਨਚੇਚਨ" + + "ਚਮੋਰੋਕੋਰਸੀਕਨਚੈੱਕਚਰਚ ਸਲਾਵੀਚੁਵਾਸ਼ਵੈਲਸ਼ਡੈਨਿਸ਼ਜਰਮਨਦਿਵੇਹੀਜ਼ੋਂਗਖਾਈਵਈਯੂਨਾਨੀਅੰ" + + "ਗਰੇਜ਼ੀਇਸਪੇਰਾਂਟੋਸਪੇਨੀਇਸਟੋਨੀਆਈਬਾਸਕਫ਼ਾਰਸੀਫੁਲਾਹਫਿਨਿਸ਼ਫ਼ਿਜ਼ੀਫ਼ੇਰੋਸੇਫਰਾਂਸੀਸੀ" + + "ਪੱਛਮੀ ਫ੍ਰਿਸੀਅਨਆਇਰਸ਼ਸਕਾਟਿਸ਼ ਗੇਲਿਕਗੈਲਿਸ਼ਿਅਨਗੁਆਰਾਨੀਗੁਜਰਾਤੀਮੈਂਕਸਹੌਸਾਹਿਬਰੂਹ" + + "ਿੰਦੀਕ੍ਰੋਏਸ਼ਿਆਈਹੈਤੀਆਈਹੰਗਰੀਆਈਅਰਮੀਨੀਆਈਹਰੇਰੋਇੰਟਰਲਿੰਗੁਆਇੰਡੋਨੇਸ਼ੀਆਈਇਗਬੋਸਿਚੁਆ" + + "ਨ ਯੀਇਡੂਆਈਸਲੈਂਡਿਕਇਤਾਲਵੀਇੰਕਟੀਟੂਤਜਪਾਨੀਜਾਵਾਨੀਜ਼ਜਾਰਜੀਆਈਕਿਕੂਯੂਕੁਆਨਯਾਮਾਕਜ਼ਾਖ਼" + + "ਕਲਾਅੱਲੀਸੁਟਖਮੇਰਕੰਨੜਕੋਰੀਆਈਕਨੂਰੀਕਸ਼ਮੀਰੀਕੁਰਦਕੋਮੀਕੋਰਨਿਸ਼ਕਿਰਗੀਜ਼ਲਾਤੀਨੀਲਕਜ਼ਮਬ" + + "ਰਗਿਸ਼ਗਾਂਡਾਲਿਮਬੁਰਗੀਲਿੰਗਾਲਾਲਾਓਲਿਥੁਆਨੀਅਨਲੂਬਾ-ਕਾਟਾਂਗਾਲਾਤੀਵੀਮੇਲੇਗਸੀਮਾਰਸ਼ਲੀਜ" + + "਼ਮਾਉਰੀਮੈਕਡੋਨੀਆਈਮਲਿਆਲਮਮੰਗੋਲੀਮਰਾਠੀਮਲਯਮਾਲਟੀਜ਼ਬਰਮੀਨਾਉਰੂਉੱਤਰੀ ਨਡੇਬੇਲੇਨੇਪਾਲੀ" + + "ਐਂਡੋਂਗਾਡੱਚਨਾਰਵੇਜਿਆਈ ਨਿਓਨੌਰਸਕਨਾਰਵੇਜਿਆਈ ਬੋਕਮਲਸਾਊਥ ਨਡੇਬੇਲੇਨਵਾਜੋਨਯਾਂਜਾਓਕਸੀ" + + "ਟਾਨਓਰੋਮੋਉੜੀਆਓਸੈਟਿਕਪੰਜਾਬੀਪਾਲੀਪੋਲੈਂਡੀਪਸ਼ਤੋਪੁਰਤਗਾਲੀਕਕੇਸ਼ੁਆਰੋਮਾਂਸ਼ਰੁੰਡੀਰੋਮ" + + "ਾਨੀਆਈਰੂਸੀਕਿਨਿਆਰਵਾਂਡਾਸੰਸਕ੍ਰਿਤਸਾਰਡੀਨੀਆਈਸਿੰਧੀਉੱਤਰੀ ਸਾਮੀਸਾਂਗੋਸਿੰਹਾਲਾਸਲੋਵਾਕ" + + "ਸਲੋਵੇਨੀਆਈਸਾਮੋਨਸ਼ੋਨਾਸੋਮਾਲੀਅਲਬਾਨੀਆਈਸਰਬੀਆਈਸਵਾਤੀਦੱਖਣੀ ਸੋਥੋਸੂੰਡਾਨੀਸਵੀਡਿਸ਼ਸਵ" + + "ਾਹਿਲੀਤਮਿਲਤੇਲਗੂਤਾਜਿਕਥਾਈਤਿਗ੍ਰੀਨਿਆਤੁਰਕਮੇਨਤਸਵਾਨਾਟੌਂਗਨਤੁਰਕੀਸੋਂਗਾਤਤਾਰਤਾਹੀਟੀਉ" + + "ਇਗੁਰਯੂਕਰੇਨੀਆਈਉੜਦੂਉਜ਼ਬੇਕਵੇਂਡਾਵੀਅਤਨਾਮੀਵੋਲਾਪੂਕਵਲੂਨਵੋਲੋਫਖੋਸਾਯਿਦਿਸ਼ਯੋਰੂਬਾਚੀ" + + "ਨੀ (ਮੈਂਡਰਿਨ)ਜ਼ੁਲੂਅਚੀਨੀਅਕੋਲੀਅਡਾਂਗਮੇਅਡਿਗੇਅਗੇਮਆਇਨੂਅਲੇਉਟਦੱਖਣੀ ਅਲਤਾਈਪੁਰਾਣੀ " + + "ਅੰਗਰੇਜ਼ੀਅੰਗਿਕਾਮਾਪੁਚੇਅਰਾਫਾਓਅਸੂਅਸਤੂਰੀਅਵਧੀਬਾਲੀਨੀਜ਼ਬਾਸਾਬੇਮਬਾਬੇਨਾਪੱਛਮੀ ਬਲੂਚ" + + "ੀਭੋਜਪੁਰੀਬਿਨੀਸਿਕਸਿਕਾਬੋਡੋਬਗਨੀਜ਼ਬਲਿਨਸੀਬੂਆਨੋਚੀਗਾਚੂਕੀਸਮਾਰੀਚੌਕਟੋਚੇਰੋਕੀਛਾਇਆਨਕ" + + "ੇਂਦਰੀ ਕੁਰਦਿਸ਼ਸੇਸੇਲਵਾ ਕ੍ਰਿਓਲ ਫ੍ਰੈਂਚਡਕੋਟਾਦਾਰਗਵਾਟੇਟਾਡੋਗਰਿੱਬਜ਼ਾਰਮਾਲੋਅਰ ਸੋਰ" + + "ਬੀਅਨਡੂਆਲਾਜੋਲਾ-ਫੋਇਨੀਡਜ਼ਾਗਾਇੰਬੂਐਫਿਕਪੁਰਾਤਨ ਮਿਸਰੀਏਕਾਜੁਕਇਵੋਂਡੋਫਿਲੀਪਿਨੋਫੌਨਫਰ" + + "ੀਉਲੀਅਨਗਾਗਾਗੌਜ਼ਚੀਨੀ ਗਾਨਜੀਜ਼ਗਿਲਬਰਤੀਜ਼ਗੋਰੋਂਤਾਲੋਪੁਰਾਤਨ ਯੂਨਾਨੀਜਰਮਨ (ਸਵਿਸ)ਗੁ" + + "ਸੀਗਵਿਚ’ਇਨਚੀਨੀ ਹਾਕਾਹਵਾਈਫਿਜੀ ਹਿੰਦੀਹਿਲੀਗੇਨਨਹਮੋਂਗਅੱਪਰ ਸੋਰਬੀਅਨਚੀਨੀ ਜ਼ਿਆਂਗਹੂ" + + "ਪਾਇਬਾਨਇਬੀਬੀਓਇਲੋਕੋਇੰਗੁਸ਼ਲੋਜਬਾਨਨਗੋਂਬਾਮਚਾਮੇਕਬਾਇਲਕਾਚਿਨਜਜੂਕੰਬਾਕਬਾਰਦੀਟਾਇਪਮਕੋ" + + "ਂਡਕਾਬੁਵੇਰਦਿਆਨੂਕੋਰੋਖਾਸੀਕੋਯਰਾ ਚੀਨੀਕਾਕੋਕਲੇਜਿਨਕਿਮਬੁੰਦੂਕੋਮੀ-ਪੇਰਮਿਆਕਕੋਂਕਣੀਕਪ" + + "ੇਲਕਰਾਚੇ ਬਲਕਾਰਕਰੀਲੀਅਨਕੁਰੁਖਸ਼ੰਬਾਲਾਬਫ਼ੀਆਕਲੋਗਨੀਅਨਕੁਮੀਕਲੈਡੀਨੋਲੰਗਾਈਲੈਜ਼ਗੀਲਕੋ" + + "ਟਾਲੋਜ਼ੀਉੱਤਰੀ ਲੁਰੀਲੁੰਡਾਲੂਓਮਿਜ਼ੋਲੂਈਆਮਾਡੂਰੀਸਮਗਾਹੀਮੈਥਲੀਮਕਾਸਰਮਸਾਈਮੋਕਸ਼ਾਮੇਂਡ" + + "ੇਮੇਰੂਮੋਰੀਸਿਅਨਮਖੋਵਾ-ਮਿੱਟੋਮੇਟਾਮਾਇਮੈਕਮਿਨਾਂਗਕਾਬਾਓਮਨੀਪੁਰੀਮੋਹਆਕਮੋਸੀਮੁੰਡੇਂਗਬਹ" + + "ੁਤੀਆਂ ਬੋਲੀਆਂਕ੍ਰੀਕਮਿਰਾਂਡੀਇਰਜ਼ੀਆਮੇਜ਼ੈਂਡਰਾਨੀਚੀਨੀ ਮਿਨ ਨਾਨਨਿਆਪੋਲੀਟਨਨਾਮਾਲੋ ਜ" + + "ਰਮਨਨੇਵਾਰੀਨਿਆਸਨਿਊਏਈਕਵਾਸਿਓਨਿਓਮਬੂਨਨੋਗਾਈਐਂਕੋਉੱਤਰੀ ਸੋਥੋਨੁਏਰਨਿਆਂਕੋਲੇਪੰਗਾਸੀਨਾ" + + "ਨਪੈਂਪਾਂਗਾਪਾਪਿਆਮੈਂਟੋਪਲਾਊਵੀਨਾਇਜੀਰੀਆਈ ਪਿਡਗਿਨਪਰੂਸ਼ੀਆਕੇਸ਼ਰਾਜਸਥਾਨੀਰਾਪਾਨੁਈਰਾਰ" + + "ੋਤੋਂਗਨਰੋਮਬੋਅਰੋਮੀਨੀਆਈਰਵਾਸਾਂਡੋਸਾਖਾਸਮਬੁਰੂਸੰਥਾਲੀਨਗਾਂਬੇਸੇਂਗੋਸਿਸੀਲੀਅਨਸਕਾਟਸਦੱ" + + "ਖਣੀ ਕੁਰਦਿਸ਼ਸੇਨਾਕੋਇਰਾਬੋਰੋ ਸੇਂਨੀਟਚੇਲਹਿਟਸ਼ਾਨਦੱਖਣੀ ਸਾਮੀਲਿਊਲ ਸਾਮੀਇਨਾਰੀ ਸਾਮੀ" + + "ਸਕੌਲਟ ਸਾਮੀਸੋਨਿੰਕੇਸ੍ਰਾਨਾਨ ਟੋਂਗੋਸਾਹੋਸੁਕੁਮਾਕੋਮੋਰੀਅਨਸੀਰੀਆਈਟਿਮਨੇਟੇਸੋਟੇਟਮਟਿਗ" + + "ਰਾਕਲਿੰਗਨਟੋਕ ਪਿਸਿਨਟਾਰੋਕੋਤੁੰਬੁਕਾਟਿਊਵਾਲੂਤਾਸਾਵਿਕਤੁਵੀਨੀਅਨਮੱਧ ਐਟਲਸ ਤਮਾਜ਼ਿਤਉਦ" + + "ਮੁਰਤਉਮਬੁੰਡੂਰੂਟਵਾਈਵੂੰਜੋਵਾਲਸਰਵੋਲਾਏਟਾਵੈਰੇਵਾਲਪੁਰੀਚੀਨੀ ਵੂਕਾਲਮਿਕਸੋਗਾਯਾਂਗਬੇਨਯ" + + "ੇਂਬਾਕੈਂਟੋਨੀਜ਼ਮਿਆਰੀ ਮੋਰੋਕੇਨ ਟਾਮਾਜ਼ਿਕਜ਼ੂਨੀਬੋਲੀ ਸੰਬੰਧੀ ਕੋਈ ਸਮੱਗਰੀ ਨਹੀਂਜ਼ਾ" + + "ਜ਼ਾਆਧੁਨਿਕ ਮਿਆਰੀ ਅਰਬੀਜਰਮਨ (ਆਸਟਰੀਆਈ)ਅੰਗਰੇਜ਼ੀ (ਬਰਤਾਨਵੀ)ਅੰਗਰੇਜ਼ੀ (ਅਮਰੀਕੀ)ਸ" + + "ਪੇਨੀ (ਯੂਰਪੀ)ਫਰਾਂਸੀਸੀ (ਕੈਨੇਡੀਅਨ)ਲੋ ਸੈਕਸਨਫਲੈਮਿਸ਼ਪੁਰਤਗਾਲੀ (ਬ੍ਰਾਜ਼ੀਲੀ)ਪੁਰਤ" + + "ਗਾਲੀ (ਯੂਰਪੀ)ਮੋਲਡਾਵੀਆਈਚੀਨੀ (ਸਰਲ)ਚੀਨੀ (ਰਵਾਇਤੀ)" + +var paLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x002a, 0x002a, 0x003f, 0x004b, 0x0060, 0x0075, + 0x0081, 0x0090, 0x00a2, 0x00b4, 0x00d5, 0x00e7, 0x00ff, 0x011a, + 0x012f, 0x0141, 0x0153, 0x0165, 0x0174, 0x0189, 0x019e, 0x01aa, + 0x01b9, 0x01ce, 0x01ce, 0x01da, 0x01f3, 0x0205, 0x0214, 0x0226, + 0x0232, 0x0244, 0x0259, 0x0262, 0x0274, 0x028c, 0x02a7, 0x02b6, + 0x02ce, 0x02da, 0x02ec, 0x02fb, 0x030d, 0x031f, 0x0334, 0x034c, + 0x0374, 0x0383, 0x03a8, 0x03c3, 0x03d8, 0x03ed, 0x03fc, 0x0408, + 0x0417, 0x0426, 0x0426, 0x0444, 0x0456, 0x046b, 0x0483, 0x0492, + // Entry 40 - 7F + 0x04b0, 0x04d1, 0x04d1, 0x04dd, 0x04f6, 0x04f6, 0x04ff, 0x051a, + 0x052c, 0x0544, 0x0553, 0x056b, 0x0580, 0x0580, 0x0592, 0x05aa, + 0x05bc, 0x05da, 0x05e6, 0x05f2, 0x0604, 0x0613, 0x0628, 0x0634, + 0x0640, 0x0655, 0x066a, 0x067c, 0x069d, 0x06ac, 0x06c4, 0x06d9, + 0x06e2, 0x06fd, 0x071f, 0x0731, 0x0746, 0x0761, 0x0770, 0x078b, + 0x079d, 0x07af, 0x07be, 0x07c7, 0x07dc, 0x07e8, 0x07f7, 0x081c, + 0x082e, 0x0843, 0x084c, 0x0880, 0x08ab, 0x08cd, 0x08dc, 0x08ee, + 0x0903, 0x0903, 0x0912, 0x091e, 0x0930, 0x0942, 0x094e, 0x0963, + // Entry 80 - BF + 0x0972, 0x098a, 0x099f, 0x09b4, 0x09c3, 0x09db, 0x09e7, 0x0a08, + 0x0a20, 0x0a3b, 0x0a4a, 0x0a66, 0x0a75, 0x0a8a, 0x0a9c, 0x0ab7, + 0x0ac6, 0x0ad5, 0x0ae7, 0x0aff, 0x0b11, 0x0b20, 0x0b3c, 0x0b51, + 0x0b66, 0x0b7b, 0x0b87, 0x0b96, 0x0ba5, 0x0bae, 0x0bc9, 0x0bde, + 0x0bf0, 0x0bff, 0x0c0e, 0x0c1d, 0x0c29, 0x0c3b, 0x0c4a, 0x0c65, + 0x0c71, 0x0c83, 0x0c92, 0x0caa, 0x0cbf, 0x0ccb, 0x0cda, 0x0ce6, + 0x0cf8, 0x0d0a, 0x0d0a, 0x0d2e, 0x0d3d, 0x0d4c, 0x0d5b, 0x0d70, + 0x0d7f, 0x0d7f, 0x0d7f, 0x0d8b, 0x0d97, 0x0d97, 0x0d97, 0x0da6, + // Entry C0 - FF + 0x0da6, 0x0dc5, 0x0df0, 0x0e02, 0x0e02, 0x0e14, 0x0e14, 0x0e26, + 0x0e26, 0x0e26, 0x0e26, 0x0e26, 0x0e26, 0x0e2f, 0x0e2f, 0x0e41, + 0x0e41, 0x0e4d, 0x0e4d, 0x0e65, 0x0e65, 0x0e71, 0x0e71, 0x0e71, + 0x0e71, 0x0e71, 0x0e80, 0x0e80, 0x0e8c, 0x0e8c, 0x0e8c, 0x0eab, + 0x0ec0, 0x0ec0, 0x0ecc, 0x0ecc, 0x0ecc, 0x0ee1, 0x0ee1, 0x0ee1, + 0x0ee1, 0x0ee1, 0x0eed, 0x0eed, 0x0eed, 0x0eff, 0x0eff, 0x0f0b, + 0x0f0b, 0x0f0b, 0x0f0b, 0x0f0b, 0x0f0b, 0x0f20, 0x0f2c, 0x0f2c, + 0x0f2c, 0x0f3b, 0x0f47, 0x0f47, 0x0f56, 0x0f56, 0x0f68, 0x0f77, + // Entry 100 - 13F + 0x0f9f, 0x0f9f, 0x0f9f, 0x0f9f, 0x0fda, 0x0fda, 0x0fe9, 0x0ffb, + 0x1007, 0x1007, 0x1007, 0x101c, 0x101c, 0x102e, 0x102e, 0x1050, + 0x1050, 0x105f, 0x105f, 0x107b, 0x107b, 0x108d, 0x1099, 0x10a5, + 0x10a5, 0x10c7, 0x10d9, 0x10d9, 0x10d9, 0x10d9, 0x10eb, 0x10eb, + 0x10eb, 0x1103, 0x1103, 0x110c, 0x110c, 0x110c, 0x110c, 0x110c, + 0x110c, 0x110c, 0x1124, 0x112a, 0x113c, 0x1152, 0x1152, 0x1152, + 0x1152, 0x115e, 0x1179, 0x1179, 0x1179, 0x1179, 0x1179, 0x1179, + 0x1194, 0x1194, 0x1194, 0x11b9, 0x11d4, 0x11d4, 0x11d4, 0x11e0, + // Entry 140 - 17F + 0x11f5, 0x11f5, 0x120e, 0x121a, 0x1236, 0x124e, 0x124e, 0x125d, + 0x127f, 0x129e, 0x12aa, 0x12b6, 0x12c8, 0x12d7, 0x12e9, 0x12e9, + 0x12e9, 0x12fb, 0x130d, 0x131c, 0x131c, 0x131c, 0x131c, 0x131c, + 0x132b, 0x133a, 0x1343, 0x134f, 0x134f, 0x1361, 0x1361, 0x136d, + 0x137c, 0x13a0, 0x13a0, 0x13ac, 0x13ac, 0x13b8, 0x13b8, 0x13d4, + 0x13d4, 0x13d4, 0x13e0, 0x13f2, 0x140a, 0x142c, 0x143e, 0x143e, + 0x144a, 0x1469, 0x1469, 0x1469, 0x147e, 0x148d, 0x14a2, 0x14b1, + 0x14c9, 0x14d8, 0x14d8, 0x14ea, 0x14f9, 0x14f9, 0x14f9, 0x150b, + // Entry 180 - 1BF + 0x150b, 0x150b, 0x150b, 0x151a, 0x151a, 0x151a, 0x1529, 0x1545, + 0x1545, 0x1545, 0x1545, 0x1554, 0x155d, 0x156c, 0x1578, 0x1578, + 0x1578, 0x158d, 0x158d, 0x159c, 0x15ab, 0x15ba, 0x15ba, 0x15c6, + 0x15c6, 0x15d8, 0x15d8, 0x15e7, 0x15f3, 0x160b, 0x160b, 0x162a, + 0x1636, 0x1648, 0x1669, 0x1669, 0x167e, 0x168d, 0x1699, 0x1699, + 0x16ae, 0x16d6, 0x16e5, 0x16fa, 0x16fa, 0x16fa, 0x16fa, 0x170c, + 0x172d, 0x174d, 0x1768, 0x1774, 0x1787, 0x1799, 0x17a5, 0x17b4, + 0x17b4, 0x17c6, 0x17db, 0x17ea, 0x17ea, 0x17ea, 0x17f6, 0x1812, + // Entry 1C0 - 1FF + 0x181e, 0x181e, 0x181e, 0x1836, 0x1836, 0x1836, 0x1836, 0x1836, + 0x1851, 0x1851, 0x1869, 0x1887, 0x1899, 0x1899, 0x18c7, 0x18c7, + 0x18c7, 0x18c7, 0x18c7, 0x18c7, 0x18c7, 0x18c7, 0x18c7, 0x18dc, + 0x18dc, 0x18e8, 0x18e8, 0x1900, 0x1915, 0x1930, 0x1930, 0x1930, + 0x193f, 0x193f, 0x193f, 0x193f, 0x193f, 0x195a, 0x1963, 0x1972, + 0x197e, 0x197e, 0x1990, 0x1990, 0x19a2, 0x19a2, 0x19b4, 0x19c3, + 0x19db, 0x19ea, 0x19ea, 0x1a0f, 0x1a0f, 0x1a1b, 0x1a1b, 0x1a1b, + 0x1a46, 0x1a46, 0x1a46, 0x1a5b, 0x1a67, 0x1a67, 0x1a67, 0x1a67, + // Entry 200 - 23F + 0x1a67, 0x1a83, 0x1a9c, 0x1ab8, 0x1ad4, 0x1ae9, 0x1ae9, 0x1b0e, + 0x1b0e, 0x1b1a, 0x1b1a, 0x1b2c, 0x1b2c, 0x1b2c, 0x1b44, 0x1b44, + 0x1b56, 0x1b56, 0x1b56, 0x1b65, 0x1b71, 0x1b71, 0x1b7d, 0x1b8c, + 0x1b8c, 0x1b8c, 0x1b8c, 0x1b9e, 0x1b9e, 0x1b9e, 0x1b9e, 0x1b9e, + 0x1bb7, 0x1bb7, 0x1bc9, 0x1bc9, 0x1bc9, 0x1bc9, 0x1bde, 0x1bf3, + 0x1c08, 0x1c20, 0x1c4c, 0x1c5e, 0x1c5e, 0x1c73, 0x1c7c, 0x1c85, + 0x1c85, 0x1c85, 0x1c85, 0x1c85, 0x1c85, 0x1c85, 0x1c94, 0x1ca3, + 0x1cb8, 0x1cc4, 0x1cc4, 0x1cd9, 0x1cec, 0x1cfe, 0x1cfe, 0x1d0a, + // Entry 240 - 27F + 0x1d0a, 0x1d0a, 0x1d1f, 0x1d2e, 0x1d2e, 0x1d49, 0x1d49, 0x1d49, + 0x1d49, 0x1d49, 0x1d87, 0x1d96, 0x1ddf, 0x1df1, 0x1e20, 0x1e20, + 0x1e44, 0x1e44, 0x1e44, 0x1e44, 0x1e74, 0x1ea1, 0x1ea1, 0x1ec2, + 0x1ec2, 0x1ec2, 0x1ef5, 0x1ef5, 0x1f0b, 0x1f20, 0x1f56, 0x1f80, + 0x1f9b, 0x1f9b, 0x1f9b, 0x1fb3, 0x1fd4, +} // Size: 1250 bytes + +const plLangStr string = "" + // Size: 5567 bytes + "afarabchaskiawestyjskiafrikaansakanamharskiaragońskiarabskiasamskiawarsk" + + "iajmaraazerbejdżańskibaszkirskibiałoruskibułgarskibislamabambarabengalsk" + + "itybetańskibretońskibośniackikatalońskiczeczeńskiczamorrokorsykańskikric" + + "zeskicerkiewnosłowiańskiczuwaskiwalijskiduńskiniemieckimalediwskidzongkh" + + "aewegreckiangielskiesperantohiszpańskiestońskibaskijskiperskifulanifińsk" + + "ifidżijskifarerskifrancuskizachodniofryzyjskiirlandzkiszkocki gaelickiga" + + "licyjskiguaranigudżaratimanxhausahebrajskihindihiri motuchorwackikreolsk" + + "i haitańskiwęgierskiormiańskihererointerlinguaindonezyjskiinterlingueigb" + + "osyczuańskiinupiakidoislandzkiwłoskiinuktitutjapońskijawajskigruzińskiko" + + "ngokikujukwanyamakazachskigrenlandzkikhmerskikannadakoreańskikanurikaszm" + + "irskikurdyjskikomikornijskikirgiskiłacińskiluksemburskigandalimburskilin" + + "galalaotańskilitewskiluba-katangałotewskimalgaskimarszalskimaoryjskimace" + + "dońskimalajalammongolskimarathimalajskimaltańskibirmańskinaurundebele pó" + + "łnocnynepalskindonganiderlandzkinorweski (nynorsk)norweski (bokmål)ndeb" + + "ele południowynawahonjandżaoksytańskiodżibwaoromoorijaosetyjskipendżabsk" + + "ipalijskipolskipasztoportugalskikeczuaretoromańskirundirumuńskirosyjskik" + + "inya-ruandasanskrytsardyńskisindhipółnocnolapońskisangosyngaleskisłowack" + + "isłoweńskisamoańskishonasomalijskialbańskiserbskisuazisotho południowysu" + + "ndajskiszwedzkisuahilitamilskitelugutadżyckitajskitigriniaturkmeńskisets" + + "wanatongatureckitsongatatarskitahitańskiujgurskiukraińskiurduuzbeckivend" + + "awietnamskiwolapikwalońskiwolofkhosajidyszjorubaczuangchińskizuluacehacz" + + "oliadangmeadygejskitunezyjski arabskiafrihiliaghemajnuakadyjskialabamaal" + + "euckialbański gegijskipołudniowoałtajskistaroangielskiangikaaramejskimap" + + "udungunaraonaarapahoalgierski arabskiarawakmarokański arabskiegipski ara" + + "bskiasuamerykański język migowyasturyjskikotavaawadhibeludżibalijskibawa" + + "rskibasaabamumbatak tobaghomalabedżabembabetawibenabafutbadagabeludżi pó" + + "łnocnybhodźpuribikolbinibanjarkomsiksikabisznuprija-manipuribachtiarski" + + "bradźbrahuibodoakooseburiackibugijskibulublinmedumbakaddokaraibskikajuga" + + "atsamcebuanochigaczibczaczagatajskichuukmaryjskiżargon czinuckiczoktawsk" + + "iczipewiańskiczirokeskiczejeńskisoranikoptyjskicapiznonkrymskotatarskikr" + + "eolski seszelskikaszubskidakotadargwijskitaitadelawareslavedogribdinkadż" + + "ermadogridolnołużyckidusun centralnydualaśredniowieczny niderlandzkidiol" + + "adiuladazagaembuefikemilijskistaroegipskiekajukelamickiśrednioangielskiy" + + "upik środkowosyberyjskiewondoestremadurskifangfilipinomeänkielifoncajuńs" + + "kiśredniofrancuskistarofrancuskifranko-prowansalskipółnocnofryzyjskiwsch" + + "odniofryzyjskifriulskigagagauskigangayogbayazaratusztriański darigyyzgil" + + "bertańskigiliańskiśrednio-wysoko-niemieckistaro-wysoko-niemieckikonkani " + + "(Goa)gondigorontalogockigrebostarogreckiszwajcarski niemieckiwayúufrafra" + + "gusiigwichʼinhaidahakkahawajskihindi fidżyjskiehiligaynonhetyckihmonggór" + + "nołużyckixianghupaibanibibioilokanoinguskiingryjskijamajskilojbanngombem" + + "achamejudeo-perskijudeoarabskijutlandzkikarakałpackikabylskikaczinjjukam" + + "bakawikabardyjskikanembutyapmakondekreolski Wysp Zielonego Przylądkakeny" + + "angkorokaingangkhasichotańskikoyra chiinikhowarkirmandżkikakokalenjinkim" + + "bundukomi-permiackikonkanikosraekpellekaraczajsko-bałkarskikriokinarayak" + + "arelskikurukhsambalabafiagwara kolońskakumyckikutenailadyńskilangilahnda" + + "lambalezgijskiLingua Franca Novaliguryjskiliwskilakotalombardzkimongoloz" + + "iluryjski północnyłatgalskiluba-lulualuisenolundaluomizoluhyachiński kla" + + "sycznylazyjskimadurajskimafamagahimaithilimakasarmandingomasajskimabamok" + + "szamandarmendemerukreolski Mauritiusaśrednioirlandzkimakuametamikmakmina" + + "ngkabumanchumanipurimohawkmossizachodniomaryjskimundangwiele językówkrik" + + "mirandyjskimarwarimentawaimyeneerzjamazanderańskiminnańskineapolitańskin" + + "amadolnoniemieckinewarskiniasniueaongumbangiemboonnogajskistaronordyjski" + + "novialn’kosotho północnynuernewarski klasycznyniamwezinyankolenyoronzema" + + "osageosmańsko-tureckipangasinopahlavipampangopapiamentopalaupikardyjskip" + + "idżyn nigeryjskipensylwańskiplautdietschstaroperskipalatynackifenickipie" + + "monckipontyjskiponpejskipruskistaroprowansalskikiczekeczua górski (Chimb" + + "orazo)radźasthanirapanuirarotongaromagnoltarifitrombocygańskirotumańskir" + + "usińskirovianaarumuńskirwasandawejakuckisamarytański aramejskisamburusas" + + "aksantalisaurasztryjskingambaysangusycylijskiscotssassarskipołudniowokur" + + "dyjskisenekasenaseriselkupskikoyraboro sennistaroirlandzkiżmudzkitashelh" + + "iytszanarabski (Czad)sidamodolnośląskiselayarpołudniowolapońskiluleinari" + + "skoltsoninkesogdyjskisranan tongoserersahofryzyjski saterlandzkisukumasu" + + "susumeryjskikomoryjskisyriackisyryjskiśląskitulutemneatesoterenotetumtig" + + "retiwtokelaucachurskiklingońskitlingittałyskitamaszektonga (Niasa)tok pi" + + "sinturoyotarokocakońskitsimshiantackitumbukatuvalutasawaqtuwińskitamazig" + + "ht (Atlas Środkowy)udmurckiugaryckiumbundujęzyk rdzennywaiweneckiwepskiz" + + "achodnioflamandzkimeński frankońskiwotiackivõrovunjowalserwolaytawarajwa" + + "showarlpiriwukałmuckimegrelskisogayaojapskiyangbenyembanheengatukantońsk" + + "izapoteckiblisszelandzkizenagastandardowy marokański tamazightzunibrak t" + + "reści o charakterze językowymzazakiwspółczesny arabskiaustriacki niemiec" + + "kiwysokoniemiecki (Szwajcaria)australijski angielskikanadyjski angielski" + + "brytyjski angielskiamerykański angielskiamerykański hiszpańskieuropejski" + + " hiszpańskimeksykański hiszpańskikanadyjski francuskiszwajcarski francus" + + "kidolnosaksońskiflamandzkibrazylijski portugalskieuropejski portugalskim" + + "ołdawskiserbsko-chorwackikongijski suahilichiński uproszczonychiński tra" + + "dycyjny" + +var plLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000c, 0x0016, 0x001f, 0x0023, 0x002b, 0x0035, + 0x003c, 0x0043, 0x004a, 0x0050, 0x0060, 0x006a, 0x0075, 0x007f, + 0x0086, 0x008d, 0x0096, 0x00a1, 0x00ab, 0x00b5, 0x00c0, 0x00cb, + 0x00d3, 0x00df, 0x00e2, 0x00e8, 0x00fd, 0x0105, 0x010d, 0x0114, + 0x011d, 0x0127, 0x012f, 0x0132, 0x0138, 0x0141, 0x014a, 0x0155, + 0x015e, 0x0167, 0x016d, 0x0173, 0x017a, 0x0184, 0x018c, 0x0195, + 0x01a7, 0x01b0, 0x01c0, 0x01ca, 0x01d1, 0x01db, 0x01df, 0x01e4, + 0x01ed, 0x01f2, 0x01fb, 0x0204, 0x0217, 0x0221, 0x022b, 0x0231, + // Entry 40 - 7F + 0x023c, 0x0248, 0x0253, 0x0257, 0x0262, 0x0269, 0x026c, 0x0275, + 0x027c, 0x0285, 0x028e, 0x0296, 0x02a0, 0x02a5, 0x02ab, 0x02b3, + 0x02bc, 0x02c7, 0x02cf, 0x02d6, 0x02e0, 0x02e6, 0x02f0, 0x02f9, + 0x02fd, 0x0306, 0x030e, 0x0318, 0x0324, 0x0329, 0x0332, 0x0339, + 0x0343, 0x034b, 0x0357, 0x0360, 0x0368, 0x0372, 0x037b, 0x0386, + 0x038f, 0x0398, 0x039f, 0x03a7, 0x03b1, 0x03bb, 0x03c0, 0x03d2, + 0x03da, 0x03e0, 0x03ec, 0x03fe, 0x0410, 0x0423, 0x0429, 0x0431, + 0x043c, 0x0444, 0x0449, 0x044e, 0x0457, 0x0462, 0x046a, 0x0470, + // Entry 80 - BF + 0x0476, 0x0481, 0x0487, 0x0494, 0x0499, 0x04a2, 0x04aa, 0x04b6, + 0x04be, 0x04c8, 0x04ce, 0x04e1, 0x04e6, 0x04f0, 0x04f9, 0x0504, + 0x050e, 0x0513, 0x051d, 0x0526, 0x052d, 0x0532, 0x0543, 0x054c, + 0x0554, 0x055b, 0x0563, 0x0569, 0x0572, 0x0578, 0x0580, 0x058b, + 0x0593, 0x0598, 0x059f, 0x05a5, 0x05ad, 0x05b8, 0x05c0, 0x05ca, + 0x05ce, 0x05d5, 0x05da, 0x05e4, 0x05eb, 0x05f4, 0x05f9, 0x05fe, + 0x0604, 0x060a, 0x0610, 0x0618, 0x061c, 0x0620, 0x0626, 0x062d, + 0x0636, 0x0648, 0x0650, 0x0655, 0x0659, 0x0662, 0x0669, 0x0670, + // Entry C0 - FF + 0x0682, 0x0696, 0x06a4, 0x06aa, 0x06b3, 0x06bd, 0x06c3, 0x06ca, + 0x06db, 0x06db, 0x06e1, 0x06f4, 0x0703, 0x0706, 0x0720, 0x072a, + 0x0730, 0x0736, 0x073e, 0x0746, 0x074e, 0x0753, 0x0758, 0x0762, + 0x0769, 0x076f, 0x0774, 0x077a, 0x077e, 0x0783, 0x0789, 0x079c, + 0x07a6, 0x07ab, 0x07af, 0x07b5, 0x07b8, 0x07bf, 0x07d3, 0x07de, + 0x07e4, 0x07ea, 0x07ee, 0x07f4, 0x07fc, 0x0804, 0x0808, 0x080c, + 0x0813, 0x0818, 0x0821, 0x0827, 0x082c, 0x0833, 0x0838, 0x083f, + 0x084a, 0x084f, 0x0857, 0x0867, 0x0871, 0x087e, 0x0888, 0x0892, + // Entry 100 - 13F + 0x0898, 0x08a1, 0x08a9, 0x08b8, 0x08ca, 0x08d3, 0x08d9, 0x08e3, + 0x08e8, 0x08f0, 0x08f5, 0x08fb, 0x0900, 0x0907, 0x090c, 0x091a, + 0x0929, 0x092e, 0x094a, 0x094f, 0x0954, 0x095a, 0x095e, 0x0962, + 0x096b, 0x0977, 0x097d, 0x0985, 0x0996, 0x09af, 0x09b5, 0x09c2, + 0x09c6, 0x09ce, 0x09d8, 0x09db, 0x09e4, 0x09f5, 0x0a03, 0x0a16, + 0x0a29, 0x0a3b, 0x0a43, 0x0a45, 0x0a4d, 0x0a50, 0x0a54, 0x0a59, + 0x0a6f, 0x0a73, 0x0a80, 0x0a8a, 0x0aa3, 0x0ab9, 0x0ac6, 0x0acb, + 0x0ad4, 0x0ad9, 0x0ade, 0x0ae9, 0x0afe, 0x0b04, 0x0b0a, 0x0b0f, + // Entry 140 - 17F + 0x0b18, 0x0b1d, 0x0b22, 0x0b2a, 0x0b3b, 0x0b45, 0x0b4c, 0x0b51, + 0x0b60, 0x0b65, 0x0b69, 0x0b6d, 0x0b73, 0x0b7a, 0x0b81, 0x0b8a, + 0x0b92, 0x0b98, 0x0b9e, 0x0ba5, 0x0bb1, 0x0bbd, 0x0bc7, 0x0bd4, + 0x0bdc, 0x0be2, 0x0be5, 0x0bea, 0x0bee, 0x0bf9, 0x0c00, 0x0c04, + 0x0c0b, 0x0c2d, 0x0c34, 0x0c38, 0x0c40, 0x0c45, 0x0c4f, 0x0c5b, + 0x0c61, 0x0c6c, 0x0c70, 0x0c78, 0x0c80, 0x0c8e, 0x0c95, 0x0c9b, + 0x0ca1, 0x0cb7, 0x0cbb, 0x0cc3, 0x0ccb, 0x0cd1, 0x0cd8, 0x0cdd, + 0x0cec, 0x0cf3, 0x0cfa, 0x0d03, 0x0d08, 0x0d0e, 0x0d13, 0x0d1c, + // Entry 180 - 1BF + 0x0d2e, 0x0d38, 0x0d3e, 0x0d44, 0x0d4e, 0x0d53, 0x0d57, 0x0d6a, + 0x0d74, 0x0d7e, 0x0d85, 0x0d8a, 0x0d8d, 0x0d91, 0x0d96, 0x0da8, + 0x0db0, 0x0dba, 0x0dbe, 0x0dc4, 0x0dcc, 0x0dd3, 0x0ddb, 0x0de3, + 0x0de7, 0x0ded, 0x0df3, 0x0df8, 0x0dfc, 0x0e0f, 0x0e20, 0x0e25, + 0x0e29, 0x0e2f, 0x0e39, 0x0e3f, 0x0e47, 0x0e4d, 0x0e52, 0x0e63, + 0x0e6a, 0x0e79, 0x0e7d, 0x0e88, 0x0e8f, 0x0e97, 0x0e9c, 0x0ea1, + 0x0eaf, 0x0eb9, 0x0ec7, 0x0ecb, 0x0ed9, 0x0ee1, 0x0ee5, 0x0ee9, + 0x0eeb, 0x0ef1, 0x0efa, 0x0f02, 0x0f10, 0x0f16, 0x0f1c, 0x0f2c, + // Entry 1C0 - 1FF + 0x0f30, 0x0f42, 0x0f4a, 0x0f52, 0x0f57, 0x0f5c, 0x0f61, 0x0f72, + 0x0f7b, 0x0f82, 0x0f8a, 0x0f94, 0x0f99, 0x0fa4, 0x0fb6, 0x0fc3, + 0x0fcf, 0x0fda, 0x0fe5, 0x0fec, 0x0ff5, 0x0ffe, 0x1007, 0x100d, + 0x101e, 0x1023, 0x103e, 0x104a, 0x1051, 0x105a, 0x1062, 0x1069, + 0x106e, 0x1077, 0x1082, 0x108b, 0x1092, 0x109c, 0x109f, 0x10a6, + 0x10ad, 0x10c4, 0x10cb, 0x10d0, 0x10d7, 0x10e5, 0x10ec, 0x10f1, + 0x10fb, 0x1100, 0x1109, 0x111d, 0x1123, 0x1127, 0x112b, 0x1134, + 0x1143, 0x1151, 0x1159, 0x1163, 0x1167, 0x1175, 0x117b, 0x1188, + // Entry 200 - 23F + 0x118f, 0x11a3, 0x11a7, 0x11ac, 0x11b1, 0x11b8, 0x11c1, 0x11cd, + 0x11d2, 0x11d6, 0x11ec, 0x11f2, 0x11f6, 0x1200, 0x120a, 0x1212, + 0x121a, 0x1222, 0x1226, 0x122b, 0x1230, 0x1236, 0x123b, 0x1240, + 0x1243, 0x124a, 0x1253, 0x125e, 0x1265, 0x126d, 0x1275, 0x1282, + 0x128b, 0x1291, 0x1297, 0x12a0, 0x12a9, 0x12ae, 0x12b5, 0x12bb, + 0x12c2, 0x12cb, 0x12e6, 0x12ee, 0x12f6, 0x12fd, 0x130b, 0x130e, + 0x1315, 0x131b, 0x132e, 0x1341, 0x1349, 0x134e, 0x1353, 0x1359, + 0x1360, 0x1365, 0x136a, 0x1372, 0x1374, 0x137d, 0x1386, 0x138a, + // Entry 240 - 27F + 0x138d, 0x1393, 0x139a, 0x139f, 0x13a8, 0x13b2, 0x13bb, 0x13c0, + 0x13c9, 0x13cf, 0x13f0, 0x13f4, 0x1419, 0x141f, 0x1434, 0x1434, + 0x1448, 0x1464, 0x147a, 0x148e, 0x14a1, 0x14b7, 0x14cf, 0x14e5, + 0x14fd, 0x14fd, 0x1511, 0x1526, 0x1535, 0x153f, 0x1556, 0x156c, + 0x1576, 0x1587, 0x1598, 0x15ac, 0x15bf, +} // Size: 1250 bytes + +const ptLangStr string = "" + // Size: 4104 bytes + "afarabcázioavésticoafricânerakanamáricoaragonêsárabeassamêsavaricaimaraa" + + "zerbaijanobashkirbielorrussobúlgarobislamábambarabengalitibetanobretãobó" + + "sniocatalãochechenochamorrocórsicocreetchecoeslavo eclesiásticotchuvache" + + "galêsdinamarquêsalemãodivehidzongaevegregoinglêsesperantoespanholestonia" + + "nobascopersafulafinlandêsfijianoferoêsfrancêsfrísio ocidentalirlandêsgaé" + + "lico escocêsgalegoguaraniguzeratemanxhauçáhebraicohíndihiri motucroataha" + + "itianohúngaroarmêniohererointerlínguaindonésiointerlingueibosichuan yiin" + + "upiaqueidoislandêsitalianoinuktitutjaponêsjavanêsgeorgianocongolêsquicui" + + "okuanyamacazaquegroenlandêskhmercanarêscoreanocanúricaxemiracurdokomicór" + + "nicoquirguizlatimluxemburguêslugandalimburguêslingalalaosianolituanoluba" + + "-catangaletãomalgaxemarshalêsmaorimacedôniomalaialamongolmaratamalaiomal" + + "têsbirmanêsnauruanondebele do nortenepalidongoholandêsnynorsk norueguêsb" + + "okmål norueguêsndebele do sulnavajonianjaoccitânicoojibwaoromooriyaosset" + + "opanjabipálipolonêspashtoportuguêsquíchuaromancherundiromenorussoquiniar" + + "uandasânscritosardosindisami setentrionalsangocingalêseslovacoeslovenosa" + + "moanoshonasomalialbanêssérviosuázisoto do sulsundanêssuecosuaílitâmiltel" + + "ugutajiquetailandêstigrínioturcomenotswanatonganêsturcotsongatatartaitia" + + "nouigurucranianourduusbequevendavietnamitavolapuquevalãouólofexosaiídich" + + "eiorubázhuangchinêszuluachémacoliadangmeadigueafrihiliaghemainuacadianoa" + + "leútealtai do sulinglês arcaicoangikaaramaicomapudungunarapahoarauaquias" + + "uasturianoawadhibalúchibalinêsbasabamumghomala’bejabembabenabafutbalúchi" + + " ocidentalbhojpuribikolbinikomsiksikabrajbodoakooseburiatobuginêsbulubli" + + "nmedumbacaddocaribecayugaatsamcebuanochigachibchachagataichuukesemarijar" + + "gão Chinookchoctawchipewyancherokeecheienesorâni curdocoptaturco da Crim" + + "eiacrioulo francês seichelensekashubiandacotadargwataitadelawareslavedog" + + "ribdinkazarmadogribaixo sorábiodualaholandês médiojola-fonyidiúladazagae" + + "mbuefiqueegípcio arcaicoekajukelamiteinglês médioewondofanguefilipinofom" + + "francês médiofrancês arcaicofrísio setentrionalfrisão orientalfriulanoga" + + "gagauzgangayogbaiageezgilbertêsalto alemão médioalemão arcaico altogondi" + + "gorontalogóticogrebogrego arcaicoalemão (Suíça)gusiigwichʼinhaidahacáhav" + + "aianohiligaynonhititahmongalto sorábioxianghupaibanibibioilocanoinguchel" + + "ojbannguembamachamejudaico-persajudaico-arábicokara-kalpakkabylekachinjj" + + "ukambakawikabardianokanembutyapmacondekabuverdianukorokhasikhotanêskoyra" + + " chiinikakokalenjinquimbundokomi-permyakconcanikosraeankpellekarachay-ba" + + "lkarcaréliokurukhshambalabafiakölschkumykkutenailadinolangilahndalambale" + + "zghianlacotamongoloziluri setentrionalluba-lulualuisenolundaluolushailuy" + + "iamadurêsmafamagahimaithilimakasarmandingamassaimabamocsamandarmendemeru" + + "morisyenirlandês médiomacuameta’miquemaqueminangkabaumanchumanipurimoica" + + "nomossimundangmúltiplos idiomascreekmirandêsmarwarimyeneerzyamazandarani" + + "min nannapolitanonamabaixo alemãonewariniasniueanokwasiongiemboonnogainó" + + "rdico arcaicon’kosoto setentrionalnuernewari clássiconyamwezinyankolenyo" + + "ronzimaosageturco otomanopangasinãpálavipampangapapiamentopalauanopidgin" + + " nigerianopersa arcaicofeníciopohnpeianoprussianoprovençal arcaicoquiché" + + "rajastanirapanuirarotonganoromboromaniaromenorwasandaweiacutoaramaico sa" + + "maritanosamburusasaksantalingambaysangusicilianoscotscurdo meridionalsen" + + "ecasenaselkupkoyraboro senniirlandês arcaicotachelhitshanárabe chadianos" + + "idamosami do sulsami de Lulesami de Inarisami de Skoltsoninquêsogdianosu" + + "rinamêssereresahosukumasususumériocomorianosiríaco clássicosiríacotimnet" + + "esoterenotétumtigrétivtoquelauanoklingontlinguitetamaxequetonganês de Ny" + + "asatok pisintarokotsimshianotumbukatuvaluanotasawaqtuvinianotamazight do" + + " Atlas Centraludmurteugaríticoumbunduraizvaivóticovunjowalserwolayttawar" + + "aywashowarlpiriwukalmyklusogayaoyapeseyangbenyembacantonêszapotecosímbol" + + "os bliszenagatamazight marroquino padrãozunhisem conteúdo linguísticozaz" + + "aárabe modernoazeri sulalto alemão (Suíça)baixo saxãoflamengomoldávioser" + + "vo-croatasuaíli do Congochinês simplificadochinês tradicional" + +var ptLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000c, 0x0015, 0x001f, 0x0023, 0x002b, 0x0034, + 0x003a, 0x0042, 0x0048, 0x004e, 0x0059, 0x0060, 0x006b, 0x0073, + 0x007b, 0x0082, 0x0089, 0x0091, 0x0098, 0x009f, 0x00a7, 0x00af, + 0x00b7, 0x00bf, 0x00c3, 0x00c9, 0x00dd, 0x00e6, 0x00ec, 0x00f8, + 0x00ff, 0x0105, 0x010b, 0x010e, 0x0113, 0x011a, 0x0123, 0x012b, + 0x0134, 0x0139, 0x013e, 0x0142, 0x014c, 0x0153, 0x015a, 0x0162, + 0x0173, 0x017c, 0x018d, 0x0193, 0x019a, 0x01a2, 0x01a6, 0x01ad, + 0x01b5, 0x01bb, 0x01c4, 0x01ca, 0x01d2, 0x01da, 0x01e2, 0x01e8, + // Entry 40 - 7F + 0x01f4, 0x01fe, 0x0209, 0x020c, 0x0216, 0x021f, 0x0222, 0x022b, + 0x0233, 0x023c, 0x0244, 0x024c, 0x0255, 0x025e, 0x0265, 0x026d, + 0x0274, 0x0280, 0x0285, 0x028d, 0x0294, 0x029b, 0x02a3, 0x02a8, + 0x02ac, 0x02b4, 0x02bc, 0x02c1, 0x02ce, 0x02d5, 0x02e0, 0x02e7, + 0x02ef, 0x02f6, 0x0302, 0x0308, 0x030f, 0x0319, 0x031e, 0x0328, + 0x0330, 0x0336, 0x033c, 0x0342, 0x0349, 0x0352, 0x035a, 0x036a, + 0x0370, 0x0375, 0x037e, 0x0390, 0x03a2, 0x03b0, 0x03b6, 0x03bc, + 0x03c7, 0x03cd, 0x03d2, 0x03d7, 0x03dd, 0x03e4, 0x03e9, 0x03f1, + // Entry 80 - BF + 0x03f7, 0x0401, 0x0409, 0x0411, 0x0416, 0x041c, 0x0421, 0x042d, + 0x0437, 0x043c, 0x0441, 0x0452, 0x0457, 0x0460, 0x0468, 0x0470, + 0x0477, 0x047c, 0x0482, 0x048a, 0x0491, 0x0497, 0x04a2, 0x04ab, + 0x04b0, 0x04b7, 0x04bd, 0x04c3, 0x04ca, 0x04d4, 0x04dd, 0x04e6, + 0x04ec, 0x04f5, 0x04fa, 0x0500, 0x0505, 0x050d, 0x0512, 0x051b, + 0x051f, 0x0526, 0x052b, 0x0535, 0x053e, 0x0544, 0x054b, 0x054f, + 0x0557, 0x055e, 0x0564, 0x056b, 0x056f, 0x0575, 0x057a, 0x0581, + 0x0587, 0x0587, 0x058f, 0x0594, 0x0598, 0x05a0, 0x05a0, 0x05a7, + // Entry C0 - FF + 0x05a7, 0x05b3, 0x05c2, 0x05c8, 0x05d0, 0x05da, 0x05da, 0x05e1, + 0x05e1, 0x05e1, 0x05e9, 0x05e9, 0x05e9, 0x05ec, 0x05ec, 0x05f5, + 0x05f5, 0x05fb, 0x0603, 0x060b, 0x060b, 0x060f, 0x0614, 0x0614, + 0x061e, 0x0622, 0x0627, 0x0627, 0x062b, 0x0630, 0x0630, 0x0642, + 0x064a, 0x064f, 0x0653, 0x0653, 0x0656, 0x065d, 0x065d, 0x065d, + 0x0661, 0x0661, 0x0665, 0x066b, 0x0672, 0x067a, 0x067e, 0x0682, + 0x0689, 0x068e, 0x0694, 0x069a, 0x069f, 0x06a6, 0x06ab, 0x06b2, + 0x06ba, 0x06c2, 0x06c6, 0x06d5, 0x06dc, 0x06e5, 0x06ed, 0x06f4, + // Entry 100 - 13F + 0x0701, 0x0706, 0x0706, 0x0716, 0x0732, 0x073b, 0x0741, 0x0747, + 0x074c, 0x0754, 0x0759, 0x075f, 0x0764, 0x0769, 0x076e, 0x077c, + 0x077c, 0x0781, 0x0791, 0x079b, 0x07a1, 0x07a7, 0x07ab, 0x07b1, + 0x07b1, 0x07c1, 0x07c7, 0x07ce, 0x07dc, 0x07dc, 0x07e2, 0x07e2, + 0x07e8, 0x07f0, 0x07f0, 0x07f3, 0x07f3, 0x0802, 0x0812, 0x0812, + 0x0826, 0x0836, 0x083e, 0x0840, 0x0846, 0x0849, 0x084d, 0x0852, + 0x0852, 0x0856, 0x0860, 0x0860, 0x0873, 0x0887, 0x0887, 0x088c, + 0x0895, 0x089c, 0x08a1, 0x08ae, 0x08bf, 0x08bf, 0x08bf, 0x08c4, + // Entry 140 - 17F + 0x08cd, 0x08d2, 0x08d7, 0x08df, 0x08df, 0x08e9, 0x08ef, 0x08f4, + 0x0901, 0x0906, 0x090a, 0x090e, 0x0914, 0x091b, 0x0922, 0x0922, + 0x0922, 0x0928, 0x092f, 0x0936, 0x0943, 0x0953, 0x0953, 0x095e, + 0x0964, 0x096a, 0x096d, 0x0972, 0x0976, 0x0980, 0x0987, 0x098b, + 0x0992, 0x099e, 0x099e, 0x09a2, 0x09a2, 0x09a7, 0x09b0, 0x09bc, + 0x09bc, 0x09bc, 0x09c0, 0x09c8, 0x09d1, 0x09dd, 0x09e4, 0x09ec, + 0x09f2, 0x0a01, 0x0a01, 0x0a01, 0x0a09, 0x0a0f, 0x0a17, 0x0a1c, + 0x0a23, 0x0a28, 0x0a2f, 0x0a35, 0x0a3a, 0x0a40, 0x0a45, 0x0a4d, + // Entry 180 - 1BF + 0x0a4d, 0x0a4d, 0x0a4d, 0x0a53, 0x0a53, 0x0a58, 0x0a5c, 0x0a6d, + 0x0a6d, 0x0a77, 0x0a7e, 0x0a83, 0x0a86, 0x0a8c, 0x0a91, 0x0a91, + 0x0a91, 0x0a99, 0x0a9d, 0x0aa3, 0x0aab, 0x0ab2, 0x0aba, 0x0ac0, + 0x0ac4, 0x0ac9, 0x0acf, 0x0ad4, 0x0ad8, 0x0ae0, 0x0af0, 0x0af5, + 0x0afc, 0x0b06, 0x0b11, 0x0b17, 0x0b1f, 0x0b26, 0x0b2b, 0x0b2b, + 0x0b32, 0x0b44, 0x0b49, 0x0b52, 0x0b59, 0x0b59, 0x0b5e, 0x0b63, + 0x0b6e, 0x0b75, 0x0b7f, 0x0b83, 0x0b90, 0x0b96, 0x0b9a, 0x0ba1, + 0x0ba1, 0x0ba7, 0x0bb0, 0x0bb5, 0x0bc5, 0x0bc5, 0x0bcb, 0x0bdc, + // Entry 1C0 - 1FF + 0x0be0, 0x0bf0, 0x0bf8, 0x0c00, 0x0c05, 0x0c0a, 0x0c0f, 0x0c1c, + 0x0c26, 0x0c2d, 0x0c35, 0x0c3f, 0x0c47, 0x0c47, 0x0c57, 0x0c57, + 0x0c57, 0x0c64, 0x0c64, 0x0c6c, 0x0c6c, 0x0c6c, 0x0c76, 0x0c7f, + 0x0c91, 0x0c98, 0x0c98, 0x0ca1, 0x0ca8, 0x0cb3, 0x0cb3, 0x0cb3, + 0x0cb8, 0x0cbe, 0x0cbe, 0x0cbe, 0x0cbe, 0x0cc5, 0x0cc8, 0x0ccf, + 0x0cd5, 0x0ce8, 0x0cef, 0x0cf4, 0x0cfb, 0x0cfb, 0x0d02, 0x0d07, + 0x0d10, 0x0d15, 0x0d15, 0x0d25, 0x0d2b, 0x0d2f, 0x0d2f, 0x0d35, + 0x0d44, 0x0d55, 0x0d55, 0x0d5e, 0x0d62, 0x0d71, 0x0d77, 0x0d77, + // Entry 200 - 23F + 0x0d77, 0x0d82, 0x0d8e, 0x0d9b, 0x0da8, 0x0db1, 0x0db9, 0x0dc3, + 0x0dc9, 0x0dcd, 0x0dcd, 0x0dd3, 0x0dd7, 0x0ddf, 0x0de8, 0x0dfa, + 0x0e02, 0x0e02, 0x0e02, 0x0e07, 0x0e0b, 0x0e11, 0x0e17, 0x0e1d, + 0x0e20, 0x0e2b, 0x0e2b, 0x0e32, 0x0e3b, 0x0e3b, 0x0e44, 0x0e56, + 0x0e5f, 0x0e5f, 0x0e65, 0x0e65, 0x0e6f, 0x0e6f, 0x0e76, 0x0e7f, + 0x0e86, 0x0e8f, 0x0ea9, 0x0eb0, 0x0eba, 0x0ec1, 0x0ec5, 0x0ec8, + 0x0ec8, 0x0ec8, 0x0ec8, 0x0ec8, 0x0ecf, 0x0ecf, 0x0ed4, 0x0eda, + 0x0ee2, 0x0ee7, 0x0eec, 0x0ef4, 0x0ef6, 0x0efc, 0x0efc, 0x0f02, + // Entry 240 - 27F + 0x0f05, 0x0f0b, 0x0f12, 0x0f17, 0x0f17, 0x0f20, 0x0f28, 0x0f36, + 0x0f36, 0x0f3c, 0x0f58, 0x0f5d, 0x0f77, 0x0f7b, 0x0f89, 0x0f92, + 0x0f92, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, + 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fb4, 0x0fbc, 0x0fbc, 0x0fbc, + 0x0fc5, 0x0fd1, 0x0fe1, 0x0ff5, 0x1008, +} // Size: 1250 bytes + +const ptPTLangStr string = "" + // Size: 882 bytes + "africanêschecochuvasheweestóniofrísico ocidentalhaúçahindiarménioigbocan" + + "arimgandamacedónionorueguês nynorsknorueguês bokmåloccitanoosséticopolac" + + "opastókinyarwandasami do nortetigríniaturcomanotongaiorubainglês antigom" + + "apuchebamunghomalaburiatjargão chinooksorani curdofrancês crioulo seselw" + + "aegípcio clássicofrancês antigofrísio orientalalemão alto antigogrego cl" + + "ássicoalemão suíçocabardianocrioulo cabo-verdianolezghianoluri do norte" + + "luomohawkbaixo-alemãonórdico antigolíngua pangasinesapersa antigolíngua " + + "pohnpeicaprovençal antigorajastanêssakhairlandês antigoárabe do Chadeina" + + "ri samirootvaisogaárabe moderno padrãoalemão austríacoalto alemão suíçoi" + + "nglês australianoinglês canadianoinglês britânicoinglês americanoespanho" + + "l latino-americanoespanhol europeufrancês canadianofrancês suíçobaixo-sa" + + "xãoportuguês do Brasilportuguês europeu" + +var ptPTLangIdx = []uint16{ // 608 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000f, 0x000f, 0x0016, 0x0016, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x003a, + 0x003a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0047, 0x0047, + // Entry 40 - 7F + 0x0047, 0x0047, 0x0047, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0073, 0x0085, 0x0085, 0x0085, 0x0085, + 0x008d, 0x008d, 0x008d, 0x008d, 0x0096, 0x0096, 0x0096, 0x009c, + // Entry 80 - BF + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00c3, 0x00cc, + 0x00cc, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, + 0x00d1, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, + 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, + // Entry C0 - FF + 0x00d7, 0x00d7, 0x00e5, 0x00e5, 0x00e5, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00f1, 0x00f1, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00fe, 0x00fe, 0x00fe, 0x00fe, + 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, + 0x00fe, 0x00fe, 0x00fe, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + // Entry 100 - 13F + 0x0119, 0x0119, 0x0119, 0x0119, 0x0131, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, + 0x0131, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, + 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0152, 0x0152, + 0x0152, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, + 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0175, 0x0175, 0x0175, + 0x0175, 0x0175, 0x0175, 0x0184, 0x0193, 0x0193, 0x0193, 0x0193, + // Entry 140 - 17F + 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, + 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, + 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, + 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x019d, 0x019d, 0x019d, + 0x019d, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, + 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, + 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, + 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01bb, + // Entry 180 - 1BF + 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01c8, + 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01cb, 0x01cb, 0x01cb, 0x01cb, + 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, + 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, + 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01d1, 0x01d1, 0x01d1, + 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, + 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01de, 0x01de, 0x01de, 0x01de, + 0x01de, 0x01de, 0x01de, 0x01de, 0x01ed, 0x01ed, 0x01ed, 0x01ed, + // Entry 1C0 - 1FF + 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01ed, + 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, + 0x0200, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x021d, 0x021d, + 0x022e, 0x022e, 0x022e, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, + 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, + 0x023e, 0x024e, 0x024e, 0x024e, 0x024e, 0x025d, 0x025d, 0x025d, + // Entry 200 - 23F + 0x025d, 0x025d, 0x025d, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, + 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, + 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, + 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, + 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, + 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x026b, 0x026e, + 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, + 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x0272, + // Entry 240 - 27F + 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, + 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0288, 0x0288, + 0x029a, 0x02ae, 0x02c1, 0x02d2, 0x02e4, 0x02f5, 0x030e, 0x031e, + 0x031e, 0x031e, 0x0330, 0x0340, 0x034c, 0x034c, 0x0360, 0x0372, +} // Size: 1240 bytes + +const roLangStr string = "" + // Size: 4228 bytes + "afarabhazăavestanăafrikaansakanamharicăaragonezăarabăasamezăavarăaymaraa" + + "zerăbașkirăbielorusăbulgarăbislamabambarabengalezătibetanăbretonăbosniac" + + "ăcatalanăcecenăchamorrocorsicanăcreecehăslavonăciuvașăgalezădanezăgerma" + + "nădivehidzongkhaewegreacăenglezăesperantospaniolăestonăbascăpersanăfulah" + + "finlandezăfijianăfaroezăfrancezăfrizonă occidentalăirlandezăgaelică scoț" + + "ianăgalicianăguaranigujaratimanxhausaebraicăhindihiri motucroatăhaitiană" + + "maghiarăarmeanăhererointerlinguaindonezianăinterlingueigbosichuan yiinup" + + "iakidoislandezăitalianăinuktitutjaponezăjavanezăgeorgianăcongolezăkikuyu" + + "kuanyamakazahăkalaallisutkhmerăkannadacoreeanăkanuricașmirăkurdăkomicorn" + + "icăkârgâzălatinăluxemburghezăgandalimburghezălingalalaoțianălituanianălu" + + "ba-katangaletonămalgașămarshallezămaorimacedoneanămalayalammongolămarath" + + "imalaezămaltezăbirmanănaurundebele de nordnepalezăndonganeerlandezănorve" + + "giană nynorsknorvegiană bokmålndebele de sudnavajonyanjaoccitanăojibwaor" + + "omooriyaosetăpunjabipalipolonezăpaștunăportughezăquechuaromanșăkirundiro" + + "mânărusăkinyarwandasanscrităsardinianăsindhisami de nordsangosingalezăsl" + + "ovacăslovenăsamoanăshonasomalezăalbanezăsârbăswatisesothosundanezăsuedez" + + "ăswahilitamilătelugutadjicăthailandezătigrinăturkmenăsetswanatonganătur" + + "cătsongatătarătahitianăuigurăucraineanăurduuzbecăvendavietnamezăvolapukv" + + "alonăwolofxhosaidișyorubazhuangchinezăzuluacehacoliadangmeadygheafrihili" + + "aghemainuakkadianăaleutăaltaică meridionalăengleză vecheangikaaramaicăar" + + "aucanianăarapahoarawakasuasturianăawadhibaluchibalinezăbasaabamunghomala" + + "bejabembabenabafutbaluchi occidentalăbhojpuribikolbinikomsiksikabrajbodo" + + "akooseburiatbuginezăbulublinmedumbacaddocaribcayugaatsamcebuanăchigachib" + + "chachagataichuukesemarijargon chinookchoctawchipewyancherokeecheyennekur" + + "dă centralăcoptăturcă crimeeanăcreolă franceză seselwacașubianădakotadar" + + "gwataitadelawareslavedogribdinkazarmadogrisorabă de josdualaneerlandeză " + + "mediejola-fonyidyuladazagaembuefikegipteană vecheekajukelamităengleză me" + + "dieewondofangfilipinezăfonfranceză mediefranceză vechefrizonă nordicăfri" + + "zonă orientalăfriulanăgagăgăuzăchineză gangayogbayageezgilbertinăgermană" + + " înaltă mediegermană înaltă vechegondigorontalogoticăgrebogreacă vechege" + + "rmană (Elveția)gusiigwichʼinhaidachineză hakkahawaiianăhiligaynonhitităh" + + "mongsorabă de suschineză xianghupaibanibibioilokoingușălojbanngombamacha" + + "meiudeo-persanăiudeo-arabăkarakalpakkabylekachinjjukambakawikabardiankan" + + "embutyapmakondekabuverdianukorokhasikhotanezăkoyra chiinikakokalenjinkim" + + "bundukomi-permiakkonkanikosraekpellekaraceai-balkarkarelianăkurukhshamba" + + "labafiakölschkumykkutenailadinolangilahndalambalezghianlakotamongolozilu" + + "ri de nordluba-lulualuisenolundaluomizoluyiamadurezămafamagahimaithilima" + + "kasarmandingomasaimabamokshamandarmendemerumorisyenirlandeză mediemakhuw" + + "a-meettometa’micmacminangkabaumanciurianămanipurimohawkmossimundangmai m" + + "ulte limbicreekmirandezămarwarimyeneerzyamazanderanichineză min nannapol" + + "itanănamagermana de josnewariniasniueanăkwasiongiemboonnogainordică vech" + + "en’kosotho de nordnuernewari clasicănyamwezinyankolenyoronzimaosageturcă" + + " otomanăpangasinanpahlavipampangapapiamentopalauanăpidgin nigerianpersan" + + "ă vechefenicianăpohnpeianăprusacăprovensală vechequichérajasthanirapanu" + + "irarotonganromboromaniaromânărwasandawesakhaaramaică samariteanăsamburus" + + "asaksantalingambaysangusicilianăscotskurdă de sudsenecasenaselkupkoyrabo" + + "ro Senniirlandeză vechetachelhitshanarabă ciadianăsidamosami de sudlule " + + "samiinari samiskolt samisoninkesogdiensranan tongoserersahosukumasususum" + + "erianăcomorezăsiriacă clasicăsiriacătimnetesoterenotetumtigretivtokelauk" + + "lingonianătlingittamasheknyasa tongatok pisintarokotsimshiantumbukatuval" + + "utasawaqtuvanătamazight central marocanăudmurtugariticăumbundurootvaivot" + + "icăvunjowalserwolaitawaraywashowarlpirichineză wucalmucăsogayaoyapezăyan" + + "gbenyembacantonezăzapotecăsimboluri Bilsszenagatamazight standard maroca" + + "năzunifară conținut lingvisticzazaarabă standard modernăgermană standard" + + " (Elveția)saxona de josflamandămoldoveneascăsârbo-croatăswahili (R.D. Co" + + "ngo)chineză tradițională" + +var roLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000b, 0x0014, 0x001d, 0x0021, 0x002a, 0x0034, + 0x003a, 0x0042, 0x0048, 0x004e, 0x0054, 0x005d, 0x0067, 0x006f, + 0x0076, 0x007d, 0x0087, 0x0090, 0x0098, 0x00a1, 0x00aa, 0x00b1, + 0x00b9, 0x00c3, 0x00c7, 0x00cc, 0x00d4, 0x00dd, 0x00e4, 0x00eb, + 0x00f3, 0x00f9, 0x0101, 0x0104, 0x010b, 0x0113, 0x011c, 0x0125, + 0x012c, 0x0132, 0x013a, 0x013f, 0x014a, 0x0152, 0x015a, 0x0163, + 0x0178, 0x0182, 0x0195, 0x019f, 0x01a6, 0x01ae, 0x01b2, 0x01b7, + 0x01bf, 0x01c4, 0x01cd, 0x01d4, 0x01dd, 0x01e6, 0x01ee, 0x01f4, + // Entry 40 - 7F + 0x01ff, 0x020b, 0x0216, 0x021a, 0x0224, 0x022b, 0x022e, 0x0238, + 0x0241, 0x024a, 0x0253, 0x025c, 0x0266, 0x0270, 0x0276, 0x027e, + 0x0285, 0x0290, 0x0297, 0x029e, 0x02a7, 0x02ad, 0x02b6, 0x02bc, + 0x02c0, 0x02c8, 0x02d2, 0x02d9, 0x02e7, 0x02ec, 0x02f8, 0x02ff, + 0x0309, 0x0314, 0x0320, 0x0327, 0x0330, 0x033c, 0x0341, 0x034d, + 0x0356, 0x035e, 0x0365, 0x036d, 0x0375, 0x037d, 0x0382, 0x0391, + 0x039a, 0x03a0, 0x03ac, 0x03bf, 0x03d2, 0x03e0, 0x03e6, 0x03ec, + 0x03f5, 0x03fb, 0x0400, 0x0405, 0x040b, 0x0412, 0x0416, 0x041f, + // Entry 80 - BF + 0x0428, 0x0433, 0x043a, 0x0443, 0x044a, 0x0452, 0x0457, 0x0462, + 0x046c, 0x0477, 0x047d, 0x0489, 0x048e, 0x0498, 0x04a0, 0x04a8, + 0x04b0, 0x04b5, 0x04be, 0x04c7, 0x04ce, 0x04d3, 0x04da, 0x04e4, + 0x04ec, 0x04f3, 0x04fa, 0x0500, 0x0508, 0x0514, 0x051c, 0x0525, + 0x052d, 0x0535, 0x053b, 0x0541, 0x0549, 0x0553, 0x055a, 0x0565, + 0x0569, 0x0570, 0x0575, 0x0580, 0x0587, 0x058e, 0x0593, 0x0598, + 0x059d, 0x05a3, 0x05a9, 0x05b1, 0x05b5, 0x05b9, 0x05be, 0x05c5, + 0x05cb, 0x05cb, 0x05d3, 0x05d8, 0x05dc, 0x05e6, 0x05e6, 0x05ed, + // Entry C0 - FF + 0x05ed, 0x0602, 0x0610, 0x0616, 0x061f, 0x062b, 0x062b, 0x0632, + 0x0632, 0x0632, 0x0638, 0x0638, 0x0638, 0x063b, 0x063b, 0x0645, + 0x0645, 0x064b, 0x0652, 0x065b, 0x065b, 0x0660, 0x0665, 0x0665, + 0x066c, 0x0670, 0x0675, 0x0675, 0x0679, 0x067e, 0x067e, 0x0692, + 0x069a, 0x069f, 0x06a3, 0x06a3, 0x06a6, 0x06ad, 0x06ad, 0x06ad, + 0x06b1, 0x06b1, 0x06b5, 0x06bb, 0x06c1, 0x06ca, 0x06ce, 0x06d2, + 0x06d9, 0x06de, 0x06e3, 0x06e9, 0x06ee, 0x06f6, 0x06fb, 0x0702, + 0x070a, 0x0712, 0x0716, 0x0724, 0x072b, 0x0734, 0x073c, 0x0744, + // Entry 100 - 13F + 0x0754, 0x075a, 0x075a, 0x076b, 0x0784, 0x078f, 0x0795, 0x079b, + 0x07a0, 0x07a8, 0x07ad, 0x07b3, 0x07b8, 0x07bd, 0x07c2, 0x07d0, + 0x07d0, 0x07d5, 0x07e7, 0x07f1, 0x07f6, 0x07fc, 0x0800, 0x0804, + 0x0804, 0x0814, 0x081a, 0x0822, 0x0830, 0x0830, 0x0836, 0x0836, + 0x083a, 0x0845, 0x0845, 0x0848, 0x0848, 0x0857, 0x0866, 0x0866, + 0x0877, 0x088a, 0x0893, 0x0895, 0x089f, 0x08ab, 0x08af, 0x08b4, + 0x08b4, 0x08b8, 0x08c3, 0x08c3, 0x08da, 0x08f1, 0x08f1, 0x08f6, + 0x08ff, 0x0906, 0x090b, 0x0918, 0x092b, 0x092b, 0x092b, 0x0930, + // Entry 140 - 17F + 0x0939, 0x093e, 0x094c, 0x0956, 0x0956, 0x0960, 0x0967, 0x096c, + 0x097a, 0x0988, 0x098c, 0x0990, 0x0996, 0x099b, 0x09a3, 0x09a3, + 0x09a3, 0x09a9, 0x09af, 0x09b6, 0x09c4, 0x09d0, 0x09d0, 0x09da, + 0x09e0, 0x09e6, 0x09e9, 0x09ee, 0x09f2, 0x09fb, 0x0a02, 0x0a06, + 0x0a0d, 0x0a19, 0x0a19, 0x0a1d, 0x0a1d, 0x0a22, 0x0a2c, 0x0a38, + 0x0a38, 0x0a38, 0x0a3c, 0x0a44, 0x0a4c, 0x0a58, 0x0a5f, 0x0a65, + 0x0a6b, 0x0a7a, 0x0a7a, 0x0a7a, 0x0a84, 0x0a8a, 0x0a92, 0x0a97, + 0x0a9e, 0x0aa3, 0x0aaa, 0x0ab0, 0x0ab5, 0x0abb, 0x0ac0, 0x0ac8, + // Entry 180 - 1BF + 0x0ac8, 0x0ac8, 0x0ac8, 0x0ace, 0x0ace, 0x0ad3, 0x0ad7, 0x0ae3, + 0x0ae3, 0x0aed, 0x0af4, 0x0af9, 0x0afc, 0x0b00, 0x0b05, 0x0b05, + 0x0b05, 0x0b0e, 0x0b12, 0x0b18, 0x0b20, 0x0b27, 0x0b2f, 0x0b34, + 0x0b38, 0x0b3e, 0x0b44, 0x0b49, 0x0b4d, 0x0b55, 0x0b65, 0x0b73, + 0x0b7a, 0x0b80, 0x0b8b, 0x0b97, 0x0b9f, 0x0ba5, 0x0baa, 0x0baa, + 0x0bb1, 0x0bc0, 0x0bc5, 0x0bcf, 0x0bd6, 0x0bd6, 0x0bdb, 0x0be0, + 0x0beb, 0x0bfb, 0x0c06, 0x0c0a, 0x0c18, 0x0c1e, 0x0c22, 0x0c2a, + 0x0c2a, 0x0c30, 0x0c39, 0x0c3e, 0x0c4c, 0x0c4c, 0x0c52, 0x0c5f, + // Entry 1C0 - 1FF + 0x0c63, 0x0c72, 0x0c7a, 0x0c82, 0x0c87, 0x0c8c, 0x0c91, 0x0ca0, + 0x0caa, 0x0cb1, 0x0cb9, 0x0cc3, 0x0ccc, 0x0ccc, 0x0cdb, 0x0cdb, + 0x0cdb, 0x0ce9, 0x0ce9, 0x0cf3, 0x0cf3, 0x0cf3, 0x0cfe, 0x0d06, + 0x0d17, 0x0d1e, 0x0d1e, 0x0d28, 0x0d2f, 0x0d39, 0x0d39, 0x0d39, + 0x0d3e, 0x0d44, 0x0d44, 0x0d44, 0x0d44, 0x0d4d, 0x0d50, 0x0d57, + 0x0d5c, 0x0d72, 0x0d79, 0x0d7e, 0x0d85, 0x0d85, 0x0d8c, 0x0d91, + 0x0d9b, 0x0da0, 0x0da0, 0x0dad, 0x0db3, 0x0db7, 0x0db7, 0x0dbd, + 0x0dcc, 0x0ddc, 0x0ddc, 0x0de5, 0x0de9, 0x0df9, 0x0dff, 0x0dff, + // Entry 200 - 23F + 0x0dff, 0x0e0a, 0x0e13, 0x0e1d, 0x0e27, 0x0e2e, 0x0e35, 0x0e41, + 0x0e46, 0x0e4a, 0x0e4a, 0x0e50, 0x0e54, 0x0e5e, 0x0e67, 0x0e78, + 0x0e80, 0x0e80, 0x0e80, 0x0e85, 0x0e89, 0x0e8f, 0x0e94, 0x0e99, + 0x0e9c, 0x0ea3, 0x0ea3, 0x0eaf, 0x0eb6, 0x0eb6, 0x0ebe, 0x0ec9, + 0x0ed2, 0x0ed2, 0x0ed8, 0x0ed8, 0x0ee1, 0x0ee1, 0x0ee8, 0x0eee, + 0x0ef5, 0x0efc, 0x0f17, 0x0f1d, 0x0f27, 0x0f2e, 0x0f32, 0x0f35, + 0x0f35, 0x0f35, 0x0f35, 0x0f35, 0x0f3c, 0x0f3c, 0x0f41, 0x0f47, + 0x0f4e, 0x0f53, 0x0f58, 0x0f60, 0x0f6b, 0x0f73, 0x0f73, 0x0f77, + // Entry 240 - 27F + 0x0f7a, 0x0f81, 0x0f88, 0x0f8d, 0x0f8d, 0x0f97, 0x0fa0, 0x0faf, + 0x0faf, 0x0fb5, 0x0fd1, 0x0fd5, 0x0fef, 0x0ff3, 0x100b, 0x100b, + 0x100b, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, + 0x1027, 0x1027, 0x1027, 0x1027, 0x1034, 0x103d, 0x103d, 0x103d, + 0x104b, 0x1059, 0x106d, 0x106d, 0x1084, +} // Size: 1250 bytes + +const ruLangStr string = "" + // Size: 9389 bytes + "афарскийабхазскийавестийскийафрикаансаканамхарскийарагонскийарабскийасса" + + "мскийаварскийаймараазербайджанскийбашкирскийбелорусскийболгарскийбислам" + + "абамбарабенгальскийтибетскийбретонскийбоснийскийкаталанскийчеченскийчам" + + "оррокорсиканскийкричешскийцерковнославянскийчувашскийваллийскийдатскийн" + + "емецкиймальдивскийдзонг-кээвегреческийанглийскийэсперантоиспанскийэстон" + + "скийбаскскийперсидскийфулахфинскийфиджифарерскийфранцузскийзападный фри" + + "зскийирландскийгэльскийгалисийскийгуаранигуджаратимэнскийхаусаивритхинд" + + "ихиримотухорватскийгаитянскийвенгерскийармянскийгерероинтерлингваиндоне" + + "зийскийинтерлингвеигбоносуинупиакидоисландскийитальянскийинуктитутяпонс" + + "кийяванскийгрузинскийконгокикуйюкунамаказахскийгренландскийкхмерскийкан" + + "надакорейскийканурикашмирикурдскийкомикорнскийкиргизскийлатинскийлюксем" + + "бургскийгандалимбургскийлингалалаосскийлитовскийлуба-катангалатышскийма" + + "лагасийскиймаршалльскиймаоримакедонскиймалаяламмонгольскиймаратхималайс" + + "киймальтийскийбирманскийнаурусеверный ндебеленепальскийндонганидерландс" + + "кийнюнорскнорвежский букмолюжный ндебеленавахоньянджаокситанскийоджибва" + + "оромоорияосетинскийпанджабипалипольскийпуштупортугальскийкечуароманшски" + + "йрундирумынскийрусскийкиньяруандасанскритсардинскийсиндхисеверносаамски" + + "йсангосингальскийсловацкийсловенскийсамоанскийшонасомалиалбанскийсербск" + + "ийсвазиюжный сотосунданскийшведскийсуахилитамильскийтелугутаджикскийтай" + + "скийтигриньятуркменскийтсванатонганскийтурецкийтсонгататарскийтаитянски" + + "йуйгурскийукраинскийурдуузбекскийвендавьетнамскийволапюкваллонскийволоф" + + "косаидишйорубачжуанькитайскийзулуачехскийачолиадангмеадыгейскийафрихили" + + "агхемайнуаккадскийалеутскийюжноалтайскийстароанглийскийангикаарамейский" + + "мапучеарапахоаравакскийасуастурийскийавадхибелуджскийбалийскийбасабамум" + + "гомалабеджабембабенабафутзападный белуджскийбходжпурибикольскийбиникомс" + + "иксикабрауибодоакоосебурятскийбугийскийбулубилинмедумбакаддокарибкайюга" + + "атсамсебуанокигачибчачагатайскийчукотскиймарийскийчинук жаргончоктавчип" + + "евьянчерокичейеннсораникоптскийкрымско-татарскийсейшельский креольскийк" + + "ашубскийдакотадаргинскийтаитаделаварскийслейвидогрибдинкаджермадогриниж" + + "нелужицкийдуаласредненидерландскийдиола-фоньидиуладазаэмбуэфикдревнееги" + + "петскийэкаджукэламскийсреднеанглийскийэвондофангфилиппинскийфонсреднефр" + + "анцузскийстарофранцузскийсеверный фризскийвосточный фризскийфриульскийг" + + "агагаузскийганьгайогбаягеэзгильбертскийсредневерхненемецкийдревневерхне" + + "немецкийгондигоронталоготскийгребодревнегреческийшвейцарский немецкийгу" + + "сиигвичинхайдахаккагавайскийхилигайнонхеттскийхмонгверхнелужицкийсянхуп" + + "аибанскийибибиоилокоингушскийложбаннгомбамачамееврейско-персидскийеврей" + + "ско-арабскийкаракалпакскийкабильскийкачинскийкаджикамбакавикабардинский" + + "канембутьяпмакондекабувердьянукорокхасихотанскийкойра чииникакокаленджи" + + "нкимбундукоми-пермяцкийконканикосраенскийкпеллекарачаево-балкарскийкаре" + + "льскийкурухшамбалабафиякёльнскийкумыкскийкутенаиладиноланголахндаламбал" + + "езгинскийлакотамонголозисевернолурскийлуба-лулуалуисеньолундалуолушейлу" + + "хьямадурскиймафамагахимайтхилимакассарскиймандингомасаимабамокшанскийма" + + "ндарскиймендемерумаврикийский креольскийсреднеирландскиймакуа-мееттомет" + + "амикмакминангкабауманьчжурскийманипурскиймохаукмосимундангязыки разных " + + "семейкрикмирандскиймарваримиенеэрзянскиймазендеранскийминьнаньнеаполита" + + "нскийнаманижнегерманскийневарскийниасниуэквасионгиембундногайскийстарон" + + "орвежскийнкосеверный сотонуэрклассический невариньямвезиньянколеньоронз" + + "имаоседжистаротурецкийпангасинанпехлевийскийпампангапапьяментопалауниге" + + "рийско-креольскийстароперсидскийфиникийскийпонапепрусскийстаропровансал" + + "ьскийкичераджастханирапануйскийраротонгаромбоцыганскийарумынскийруандас" + + "андавеякутскийсамаритянский арамейскийсамбурусасакскийсанталингамбайски" + + "йсангусицилийскийшотландскийюжнокурдскийсенекасенаселькупскийкойраборо " + + "сеннистароирландскийташельхитшанскийчадский арабскийсидамаюжносаамскийл" + + "уле-саамскийинари-саамскийколтта-саамскийсонинкесогдийскийсранан-тонгос" + + "ерерсахосукумасусушумерскийкоморскийклассический сирийскийсирийскийтемн" + + "етесотеренотетумтигретивитокелайскийклингонскийтлингиттамашектонгаток-п" + + "исинтуройоседекскийцимшиантумбукатувалутасавактувинскийсреднеатласский " + + "тамазигхтскийудмуртскийугаритскийумбундукорневой языкваиводскийвунджова" + + "ллисскийволамоварайвашовальбиривукалмыцкийсогаяояпянгбенйембакантонский" + + "сапотекскийблиссимволиказенагскийтамазигхтскийзуньинет языкового матери" + + "алазазаарабский литературныйавстрийский немецкийлитературный швейцарски" + + "й немецкийавстралийский английскийканадский английскийбританский англий" + + "скийамериканский английскийлатиноамериканский испанскийевропейский испа" + + "нскиймексиканский испанскийканадский французскийшвейцарский французский" + + "нижнесаксонскийфламандскийбразильский португальскийевропейский португал" + + "ьскиймолдавскийсербскохорватскийконголезский суахиликитайский, упрощенн" + + "ое письмокитайский, традиционное письмо" + +var ruLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0022, 0x0038, 0x004a, 0x0052, 0x0064, 0x0078, + 0x0088, 0x009a, 0x00aa, 0x00b6, 0x00d4, 0x00e8, 0x00fe, 0x0112, + 0x0120, 0x012e, 0x0144, 0x0156, 0x016a, 0x017e, 0x0194, 0x01a6, + 0x01b4, 0x01cc, 0x01d2, 0x01e0, 0x0204, 0x0216, 0x022a, 0x0238, + 0x0248, 0x025e, 0x026d, 0x0273, 0x0285, 0x0299, 0x02ab, 0x02bd, + 0x02cf, 0x02df, 0x02f3, 0x02fd, 0x030b, 0x0315, 0x0327, 0x033d, + 0x035e, 0x0372, 0x0382, 0x0398, 0x03a6, 0x03b8, 0x03c6, 0x03d0, + 0x03da, 0x03e4, 0x03f4, 0x0408, 0x041c, 0x0430, 0x0442, 0x044e, + // Entry 40 - 7F + 0x0464, 0x047e, 0x0494, 0x049c, 0x04a4, 0x04b2, 0x04b8, 0x04cc, + 0x04e2, 0x04f4, 0x0504, 0x0514, 0x0528, 0x0532, 0x053e, 0x054a, + 0x055c, 0x0574, 0x0586, 0x0594, 0x05a6, 0x05b2, 0x05c0, 0x05d0, + 0x05d8, 0x05e8, 0x05fc, 0x060e, 0x062a, 0x0634, 0x064a, 0x0658, + 0x0668, 0x067a, 0x0691, 0x06a3, 0x06bd, 0x06d5, 0x06df, 0x06f5, + 0x0705, 0x071b, 0x0729, 0x073b, 0x0751, 0x0765, 0x076f, 0x078e, + 0x07a2, 0x07ae, 0x07c8, 0x07d6, 0x07f7, 0x0810, 0x081c, 0x082a, + 0x0840, 0x084e, 0x0858, 0x0860, 0x0874, 0x0884, 0x088c, 0x089c, + // Entry 80 - BF + 0x08a6, 0x08c0, 0x08ca, 0x08de, 0x08e8, 0x08fa, 0x0908, 0x091e, + 0x092e, 0x0942, 0x094e, 0x096c, 0x0976, 0x098c, 0x099e, 0x09b2, + 0x09c6, 0x09ce, 0x09da, 0x09ec, 0x09fc, 0x0a06, 0x0a19, 0x0a2d, + 0x0a3d, 0x0a4b, 0x0a5f, 0x0a6b, 0x0a7f, 0x0a8d, 0x0a9d, 0x0ab3, + 0x0abf, 0x0ad3, 0x0ae3, 0x0aef, 0x0b01, 0x0b15, 0x0b27, 0x0b3b, + 0x0b43, 0x0b55, 0x0b5f, 0x0b75, 0x0b83, 0x0b97, 0x0ba1, 0x0ba9, + 0x0bb1, 0x0bbd, 0x0bc9, 0x0bdb, 0x0be3, 0x0bf3, 0x0bfd, 0x0c0b, + 0x0c1f, 0x0c1f, 0x0c2f, 0x0c39, 0x0c41, 0x0c53, 0x0c53, 0x0c65, + // Entry C0 - FF + 0x0c65, 0x0c7f, 0x0c9d, 0x0ca9, 0x0cbd, 0x0cc9, 0x0cc9, 0x0cd7, + 0x0cd7, 0x0cd7, 0x0ceb, 0x0ceb, 0x0ceb, 0x0cf1, 0x0cf1, 0x0d07, + 0x0d07, 0x0d13, 0x0d27, 0x0d39, 0x0d39, 0x0d41, 0x0d4b, 0x0d4b, + 0x0d57, 0x0d61, 0x0d6b, 0x0d6b, 0x0d73, 0x0d7d, 0x0d7d, 0x0da2, + 0x0db4, 0x0dc8, 0x0dd0, 0x0dd0, 0x0dd6, 0x0de4, 0x0de4, 0x0de4, + 0x0dee, 0x0dee, 0x0df6, 0x0e02, 0x0e14, 0x0e26, 0x0e2e, 0x0e38, + 0x0e46, 0x0e50, 0x0e5a, 0x0e66, 0x0e70, 0x0e7e, 0x0e86, 0x0e90, + 0x0ea6, 0x0eb8, 0x0eca, 0x0ee1, 0x0eed, 0x0efd, 0x0f09, 0x0f15, + // Entry 100 - 13F + 0x0f21, 0x0f31, 0x0f31, 0x0f52, 0x0f7d, 0x0f8f, 0x0f9b, 0x0faf, + 0x0fb9, 0x0fcf, 0x0fdb, 0x0fe7, 0x0ff1, 0x0ffd, 0x1007, 0x1021, + 0x1021, 0x102b, 0x1051, 0x1066, 0x1070, 0x1078, 0x1080, 0x1088, + 0x1088, 0x10a8, 0x10b6, 0x10c6, 0x10e6, 0x10e6, 0x10f2, 0x10f2, + 0x10fa, 0x1112, 0x1112, 0x1118, 0x1118, 0x113a, 0x115a, 0x115a, + 0x117b, 0x119e, 0x11b2, 0x11b6, 0x11ca, 0x11d2, 0x11da, 0x11e2, + 0x11e2, 0x11ea, 0x1202, 0x1202, 0x122a, 0x1252, 0x1252, 0x125c, + 0x126e, 0x127c, 0x1286, 0x12a4, 0x12cb, 0x12cb, 0x12cb, 0x12d5, + // Entry 140 - 17F + 0x12e1, 0x12eb, 0x12f5, 0x1307, 0x1307, 0x131b, 0x132b, 0x1335, + 0x1351, 0x1357, 0x135f, 0x136f, 0x137b, 0x1385, 0x1397, 0x1397, + 0x1397, 0x13a3, 0x13af, 0x13bb, 0x13e0, 0x1401, 0x1401, 0x141d, + 0x1431, 0x1443, 0x144d, 0x1457, 0x145f, 0x1477, 0x1485, 0x148d, + 0x149b, 0x14b3, 0x14b3, 0x14bb, 0x14bb, 0x14c5, 0x14d7, 0x14ec, + 0x14ec, 0x14ec, 0x14f4, 0x1506, 0x1516, 0x1531, 0x153f, 0x1555, + 0x1561, 0x1588, 0x1588, 0x1588, 0x159c, 0x15a6, 0x15b4, 0x15be, + 0x15d0, 0x15e2, 0x15f0, 0x15fc, 0x1606, 0x1612, 0x161c, 0x1630, + // Entry 180 - 1BF + 0x1630, 0x1630, 0x1630, 0x163c, 0x163c, 0x1646, 0x164e, 0x166a, + 0x166a, 0x167d, 0x168d, 0x1697, 0x169d, 0x16a7, 0x16b1, 0x16b1, + 0x16b1, 0x16c3, 0x16cb, 0x16d7, 0x16e7, 0x16ff, 0x170f, 0x1719, + 0x1721, 0x1735, 0x1749, 0x1753, 0x175b, 0x1788, 0x17a8, 0x17bf, + 0x17c7, 0x17d3, 0x17e9, 0x1801, 0x1817, 0x1823, 0x182b, 0x182b, + 0x1839, 0x185b, 0x1863, 0x1877, 0x1885, 0x1885, 0x188f, 0x18a1, + 0x18bd, 0x18cd, 0x18e9, 0x18f1, 0x190f, 0x1921, 0x1929, 0x1931, + 0x1931, 0x193d, 0x194f, 0x1961, 0x197f, 0x197f, 0x1985, 0x199e, + // Entry 1C0 - 1FF + 0x19a6, 0x19cb, 0x19db, 0x19eb, 0x19f5, 0x19ff, 0x1a0b, 0x1a25, + 0x1a39, 0x1a51, 0x1a61, 0x1a75, 0x1a7f, 0x1a7f, 0x1aa8, 0x1aa8, + 0x1aa8, 0x1ac6, 0x1ac6, 0x1adc, 0x1adc, 0x1adc, 0x1ae8, 0x1af8, + 0x1b1e, 0x1b26, 0x1b26, 0x1b3c, 0x1b52, 0x1b64, 0x1b64, 0x1b64, + 0x1b6e, 0x1b80, 0x1b80, 0x1b80, 0x1b80, 0x1b94, 0x1ba0, 0x1bae, + 0x1bbe, 0x1bed, 0x1bfb, 0x1c0d, 0x1c1b, 0x1c1b, 0x1c31, 0x1c3b, + 0x1c51, 0x1c67, 0x1c67, 0x1c7f, 0x1c8b, 0x1c93, 0x1c93, 0x1ca9, + 0x1cc6, 0x1ce4, 0x1ce4, 0x1cf6, 0x1d04, 0x1d23, 0x1d2f, 0x1d2f, + // Entry 200 - 23F + 0x1d2f, 0x1d47, 0x1d60, 0x1d7b, 0x1d98, 0x1da6, 0x1dba, 0x1dd1, + 0x1ddb, 0x1de3, 0x1de3, 0x1def, 0x1df7, 0x1e09, 0x1e1b, 0x1e46, + 0x1e58, 0x1e58, 0x1e58, 0x1e62, 0x1e6a, 0x1e76, 0x1e80, 0x1e8a, + 0x1e92, 0x1ea8, 0x1ea8, 0x1ebe, 0x1ecc, 0x1ecc, 0x1eda, 0x1ee4, + 0x1ef5, 0x1f01, 0x1f13, 0x1f13, 0x1f21, 0x1f21, 0x1f2f, 0x1f3b, + 0x1f49, 0x1f5b, 0x1f94, 0x1fa8, 0x1fbc, 0x1fca, 0x1fe3, 0x1fe9, + 0x1fe9, 0x1fe9, 0x1fe9, 0x1fe9, 0x1ff7, 0x1ff7, 0x2003, 0x2017, + 0x2023, 0x202d, 0x2035, 0x2045, 0x2049, 0x205b, 0x205b, 0x2063, + // Entry 240 - 27F + 0x2067, 0x206b, 0x2077, 0x2081, 0x2081, 0x2095, 0x20ab, 0x20c5, + 0x20c5, 0x20d7, 0x20f1, 0x20fb, 0x2127, 0x212f, 0x2158, 0x2158, + 0x217f, 0x21bf, 0x21ee, 0x2215, 0x223e, 0x226b, 0x22a2, 0x22cb, + 0x22f6, 0x22f6, 0x231f, 0x234c, 0x236a, 0x2380, 0x23b1, 0x23e2, + 0x23f6, 0x2418, 0x243f, 0x2474, 0x24ad, +} // Size: 1250 bytes + +const siLangStr string = "" + // Size: 9440 bytes + "අෆාර්ඇබ්කාසියානුඅප්\u200dරිකානුඅකාන්ඇම්හාරික්ඇරගොනීස්අරාබිඇසමියානුඇවරික්" + + "අයිමරාඅසර්බයිජාන්බාෂ්කිර්බෙලරුසියානුබල්ගේරියානුබිස්ලමාබම්බරාබෙංගාලිටිබ" + + "ෙට්බ්\u200dරේටොන්බොස්නියානුකැටලන්චෙච්නියානුචමොරොක්\u200dරොඑශියානුචෙත්ච" + + "ර්ච් ස්ලැවික්චවේෂ්වේල්ස්ඩැනිශ්ජර්මන්දිවෙහිඩිසොන්කාඉව්ග්\u200dරීකඉංග්" + + "\u200dරීසිඑස්පැරන්ටෝස්පාඤ්ඤඑස්තෝනියානුබොස්කෝපර්සියානුෆුලාහ්ෆින්ලන්තෆීජිෆ" + + "ාරෝස්ප්\u200dරංශබටහිර ෆ්\u200dරිසියානුඅයර්ලන්තස්කොට්ටිශ් ගෙලික්ගැලීසිය" + + "ානුගුවාරනිගුජරාටිමැන්ක්ස්හෝසාහීබෲහින්දික්\u200dරෝයේශියානුහයිටිහන්ගේරිය" + + "ානුආර්මේනියානුහෙරෙරොඉන්ටලින්ගුආඉන්දුනීසියානුඉග්බෝසිචුආන් යීඉඩොඅයිස්ලන්" + + "තඉතාලිඉනුක්ටිටුට්ජපන්ජාවාජෝර්ජියානුකිකුයුකුයන්යමාකසාඛ්කලාලිසට්කමර්කණ්ණ" + + "ඩකොරියානුකනුරිකාෂ්මීර්කුර්දිකොමිකෝනීසියානුකිර්ගිස්ලතින්ලක්සැම්බර්ග්ගන්" + + "ඩාලිම්බර්ගිශ්ලින්ගලාලාඕලිතුවේනියානුලුලැට්වියානුමලගාසිමාශලීස්මාවොරිමැසි" + + "ඩෝනියානුමලයාලම්මොංගෝලියානුමරාතිමැලේමොල්ටිස්බුරුමනෞරුඋතුරු එන්ඩිබෙලෙනේප" + + "ාලන්ඩොන්ගාලන්දේසිනොවේර්ජියානු නයිනෝර්ස්ක්නෝවේජියානු බොක්මාල්සෞත් ඩ්බේල" + + "්නවාජොන්යන්ජාඔසිටාන්ඔරොමෝඔරියාඔසිටෙක්පන්ජාබිපෝලන්තපෂ්ටොපෘතුගීසික්වීචුව" + + "ාරොමෑන්ශ්රුන්ඩිරොමේනියානුරුසියානුකින්යර්වන්ඩාසංස්කෘතසාර්ඩිනිඅන්සින්ධිඋ" + + "තුරු සාමිසන්ග්\u200dරෝසිංහලස්ලෝවැක්ස්ලෝවේනියානුසෑමොඅන්ශෝනාසෝමාලිඇල්බේන" + + "ියානුසර්බියානුස්වතිසතර්න් සොතොසන්ඩනීසියානුස්වීඩන්ස්වාහිලිදෙමළතෙළිඟුටජි" + + "ක්තායිටිග්\u200dරින්යාටර්ක්මෙන්ස්වනාටොංගාතුර්කිසොන්ගටාටර්ටහිටියන්උයිගර" + + "්යුක්රේනියානුඋර්දුඋස්බෙක්වෙන්ඩාවියට්නාම්වොලපූක්වෑලූන්වොලොෆ්ශෝසායිඩිශ්ය" + + "ොරූබාචීනසුලුඅචයිනිස්අඩන්ග්මෙඅඩිඝෙටියුනිසියනු අරාබිඇගම්අයිනුඇලුඑට්සතර්න" + + "් අල්ටය්අන්ගිකමපුචෙඇරපහොඅසුඇස්ටියුරියන්අවදිබැලිනීස්බසාබෙම්බාබෙනාබටහිර " + + "බලොචිබොජ්පුරිබිනිසික්සිකාබොඩොබුගිනීස්බ්ලින්සෙබුඅනොචිගාචූකීස්මරිචොක්ටොව" + + "්චෙරොකීචෙයෙන්නෙසොරානි කුර්දිෂ්සෙසෙල්ව ක්\u200dරොල් ෆ්\u200dරෙන්ච්ඩකොටා" + + "ඩාර්ග්වාටයිටාඩොග්\u200dරිබ්සර්මාපහළ සෝබියානුඩුආලාජොල-ෆෝනියිඩසාගාඑම්බුඑ" + + "ෆික්එකජුක්එවොන්ඩොපිලිපීනෆොන්ෆ්\u200dරියුලියන්ගාගගාස්ගැන් චයිනිස්ගීස්ගි" + + "ල්බර්ටීස්ගොරොන්ටාලොස්විස් ජර්මානුගුසීග්විචින්හකා චයිනිස්හවායිහිලිගෙනන්" + + "මොන්ග්ඉහළ සෝබියානුසියැන් චීනහුපාඉබන්ඉබිබියොඉලොකොඉන්ගුෂ්ලොජ්බන්නොම්බාමැ" + + "කාමීකැබලාකචින්ජ්ජුකැම්බාකබාර්ඩියන්ට්යප්මැකොන්ඩ්කබුවෙර්ඩියානෝකොරොඛසිකොය" + + "ිරා චිනිකකොකලෙන්ජන්කිම්බුන්ඩුකොමි-පර්මියාක්කොන්කනික්පෙලෙකරන්චි-බාකර්කැ" + + "රෙලියන්කුරුඛ්ශාම්බලාබාෆියාකොලොග්නියන්කුමික්ලඩිනොලංගිලෙස්ගියන්ලකොටලොසිඋ" + + "තුරු ලුරිලුබ-ලුලුඅලුන්ඩලුඔමිසොලුයියාමදුරීස්මඝහිමයිතිලිමකාසාර්මසායිමොක්" + + "ශාමෙන්ඩෙමෙරුමොරිස්යෙම්මඛුවා-මීටෝමෙටාමික්මැක්මිනන්ග්කබාවුමනිපුරිමොහොව්ක" + + "්මොස්සිමුන්ඩන්බහු භාෂාක්\u200dරීක්මිරන්ඩීස්එර්ස්යාමැසන්ඩරනිමින් නන් චය" + + "ිනිස්නියාපොලිටන්නාමාපහළ ජර්මන්නෙවාරිනියාස්නියුඑන්කුවාසිඔන්ගියාම්බූන්නො" + + "ගායිඑන්‘කෝනොදර්න් සොතොනොයර්නයන්කොළේපන්ගසීනන්පන්පන්ගපපියමෙන්ටොපලවුවන්නෛ" + + "ජීරියන් පෙන්ගින්පෘශියන්කියිචේරපනුයිරරොටොන්ගන්රෝම්බෝඇරොමෙන්යන්ර්වාසන්ඩව" + + "ෙසඛාසම්බුරුසෑන්ටලින්ගම්බෙසංගුසිසිලියන්ස්කොට්ස්දකුණු කුර්දිසෙනාකෝයිරාබො" + + "රො සෙන්නිටචේල්හිට්ශාන්දකුණු සාමිලුලේ සාමිඉනාරි සාමිස්කොල්ට් සාමිසොනින්" + + "කෙස්\u200dරන් ටොන්ගොසහොසුකුමාකොමොරියන්ස්\u200dරයෑක්ටිම්නෙටෙසෝටේටම්ටීග්" + + "\u200dරෙක්ලින්ගොන්ටොක් පිසින්ටරොකොටුම්බුකාටුවාලුටසවාක්ටුවිනියන්මධ්\u200d" + + "යම ඇට්ලස් ටමසිට්අඩ්මර්ට්උබුන්ඩුරූට්වයිවුන්ජෝවොල්සර්වොලෙට්ටවොරෙය්වොපිරි" + + "වූ චයිනිස්කල්මික්සොගායන්ග්බෙන්යෙම්බාකැන්ටොනීස්සම්මත මොරොක්කෝ ටමසිග්ත්ස" + + "ුනිවාග් විද්\u200dයා අන්තර්ගතයක් නැතසාසානවීන සම්මත අරාබිඔස්ට්\u200dරිය" + + "ානු ජර්මන්ස්විස් උසස් ජර්මන්ඕස්ට්\u200dරේලියානු ඉංග්\u200dරීසිකැනේඩියා" + + "නු ඉංග්\u200dරීසිබ්\u200dරිතාන්\u200dය ඉංග්\u200dරීසිඇමෙරිකානු ඉංග්" + + "\u200dරීසිලතින් ඇමරිකානු ස්පාඤ්ඤයුරෝපීය ස්පාඤ්ඤමෙක්සිකානු ස්පාඤ්ඤකැනේඩිය" + + "ානු ප්\u200dරංශස්විස් ප්\u200dරංශපහළ සැක්සන්ෆ්ලෙමිශ්බ්\u200dරසීල පෘතුග" + + "ීසියුරෝපීය පෘතුගීසිමොල්ඩවිආනුසුළුකළ චීනසාම්ප්\u200dරදායික චීන" + +var siLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0030, 0x0030, 0x004e, 0x005d, 0x0078, 0x0090, + 0x009f, 0x00b7, 0x00c9, 0x00db, 0x00fc, 0x0114, 0x0135, 0x0156, + 0x016b, 0x017d, 0x0192, 0x01a4, 0x01bf, 0x01dd, 0x01ef, 0x020d, + 0x021c, 0x0240, 0x0240, 0x024c, 0x0274, 0x0283, 0x0295, 0x02a7, + 0x02b9, 0x02cb, 0x02e3, 0x02ec, 0x02fe, 0x0319, 0x0337, 0x034c, + 0x036d, 0x037f, 0x039a, 0x03ac, 0x03c4, 0x03d0, 0x03e2, 0x03f4, + 0x0425, 0x043d, 0x046e, 0x048c, 0x04a1, 0x04b6, 0x04ce, 0x04da, + 0x04e6, 0x04f8, 0x04f8, 0x051f, 0x052e, 0x054f, 0x0570, 0x0582, + // Entry 40 - 7F + 0x05a3, 0x05ca, 0x05ca, 0x05d9, 0x05f5, 0x05f5, 0x05fe, 0x0619, + 0x0628, 0x0649, 0x0655, 0x0661, 0x067f, 0x067f, 0x0691, 0x06a9, + 0x06b8, 0x06d0, 0x06dc, 0x06eb, 0x0703, 0x0712, 0x072a, 0x073c, + 0x0748, 0x0766, 0x077e, 0x078d, 0x07b1, 0x07c0, 0x07e1, 0x07f6, + 0x07ff, 0x0823, 0x0829, 0x0847, 0x0859, 0x086e, 0x0880, 0x08a4, + 0x08b9, 0x08da, 0x08e9, 0x08f5, 0x090d, 0x091c, 0x0928, 0x0953, + 0x0962, 0x097a, 0x098f, 0x09d5, 0x0a0c, 0x0a2b, 0x0a3a, 0x0a4f, + 0x0a64, 0x0a64, 0x0a73, 0x0a82, 0x0a97, 0x0aac, 0x0aac, 0x0abe, + // Entry 80 - BF + 0x0acd, 0x0ae5, 0x0afd, 0x0b15, 0x0b27, 0x0b45, 0x0b5d, 0x0b81, + 0x0b96, 0x0bb7, 0x0bc9, 0x0be5, 0x0bfd, 0x0c0c, 0x0c24, 0x0c48, + 0x0c5d, 0x0c69, 0x0c7b, 0x0c9c, 0x0cb7, 0x0cc6, 0x0ce5, 0x0d09, + 0x0d1e, 0x0d36, 0x0d42, 0x0d54, 0x0d63, 0x0d6f, 0x0d90, 0x0dab, + 0x0dba, 0x0dc9, 0x0ddb, 0x0dea, 0x0df9, 0x0e11, 0x0e23, 0x0e47, + 0x0e56, 0x0e6b, 0x0e7d, 0x0e98, 0x0ead, 0x0ebf, 0x0ed1, 0x0edd, + 0x0eef, 0x0f01, 0x0f01, 0x0f0a, 0x0f16, 0x0f2e, 0x0f2e, 0x0f46, + 0x0f55, 0x0f86, 0x0f86, 0x0f92, 0x0fa1, 0x0fa1, 0x0fa1, 0x0fb3, + // Entry C0 - FF + 0x0fb3, 0x0fd8, 0x0fd8, 0x0fea, 0x0fea, 0x0ff9, 0x0ff9, 0x1008, + 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1011, 0x1011, 0x1035, + 0x1035, 0x1041, 0x1041, 0x1059, 0x1059, 0x1062, 0x1062, 0x1062, + 0x1062, 0x1062, 0x1074, 0x1074, 0x1080, 0x1080, 0x1080, 0x109f, + 0x10b7, 0x10b7, 0x10c3, 0x10c3, 0x10c3, 0x10db, 0x10db, 0x10db, + 0x10db, 0x10db, 0x10e7, 0x10e7, 0x10e7, 0x10ff, 0x10ff, 0x1111, + 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1126, 0x1132, 0x1132, + 0x1132, 0x1144, 0x114d, 0x114d, 0x1165, 0x1165, 0x1177, 0x118f, + // Entry 100 - 13F + 0x11ba, 0x11ba, 0x11ba, 0x11ba, 0x1201, 0x1201, 0x1210, 0x1228, + 0x1237, 0x1237, 0x1237, 0x1252, 0x1252, 0x1261, 0x1261, 0x1283, + 0x1283, 0x1292, 0x1292, 0x12ae, 0x12ae, 0x12bd, 0x12cc, 0x12db, + 0x12db, 0x12db, 0x12ed, 0x12ed, 0x12ed, 0x12ed, 0x1302, 0x1302, + 0x1302, 0x1317, 0x1317, 0x1323, 0x1323, 0x1323, 0x1323, 0x1323, + 0x1323, 0x1323, 0x1347, 0x134d, 0x135c, 0x137e, 0x137e, 0x137e, + 0x137e, 0x138a, 0x13ab, 0x13ab, 0x13ab, 0x13ab, 0x13ab, 0x13ab, + 0x13c9, 0x13c9, 0x13c9, 0x13c9, 0x13f1, 0x13f1, 0x13f1, 0x13fd, + // Entry 140 - 17F + 0x1415, 0x1415, 0x1434, 0x1443, 0x1443, 0x145e, 0x145e, 0x1470, + 0x1492, 0x14ae, 0x14ba, 0x14c6, 0x14db, 0x14ea, 0x14ff, 0x14ff, + 0x14ff, 0x1514, 0x1526, 0x1538, 0x1538, 0x1538, 0x1538, 0x1538, + 0x1547, 0x1556, 0x1562, 0x1574, 0x1574, 0x1592, 0x1592, 0x15a1, + 0x15b9, 0x15e0, 0x15e0, 0x15ec, 0x15ec, 0x15f5, 0x15f5, 0x1614, + 0x1614, 0x1614, 0x161d, 0x1635, 0x1653, 0x167b, 0x1690, 0x1690, + 0x16a2, 0x16c4, 0x16c4, 0x16c4, 0x16df, 0x16f1, 0x1706, 0x1718, + 0x1739, 0x174b, 0x174b, 0x175a, 0x1766, 0x1766, 0x1766, 0x1781, + // Entry 180 - 1BF + 0x1781, 0x1781, 0x1781, 0x178d, 0x178d, 0x178d, 0x1799, 0x17b5, + 0x17b5, 0x17ce, 0x17ce, 0x17dd, 0x17e6, 0x17f2, 0x1804, 0x1804, + 0x1804, 0x1819, 0x1819, 0x1825, 0x183a, 0x184f, 0x184f, 0x185e, + 0x185e, 0x1870, 0x1870, 0x1882, 0x188e, 0x18ac, 0x18ac, 0x18c8, + 0x18d4, 0x18ec, 0x1910, 0x1910, 0x1925, 0x193d, 0x194f, 0x194f, + 0x1964, 0x197a, 0x198f, 0x19aa, 0x19aa, 0x19aa, 0x19aa, 0x19bf, + 0x19da, 0x1a06, 0x1a27, 0x1a33, 0x1a4f, 0x1a61, 0x1a73, 0x1a88, + 0x1a88, 0x1a9d, 0x1ac1, 0x1ad3, 0x1ad3, 0x1ad3, 0x1ae5, 0x1b07, + // Entry 1C0 - 1FF + 0x1b16, 0x1b16, 0x1b16, 0x1b2e, 0x1b2e, 0x1b2e, 0x1b2e, 0x1b2e, + 0x1b49, 0x1b49, 0x1b5e, 0x1b7c, 0x1b91, 0x1b91, 0x1bc5, 0x1bc5, + 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bda, + 0x1bda, 0x1bec, 0x1bec, 0x1bec, 0x1bfe, 0x1c1c, 0x1c1c, 0x1c1c, + 0x1c2e, 0x1c2e, 0x1c2e, 0x1c2e, 0x1c2e, 0x1c4c, 0x1c58, 0x1c6a, + 0x1c73, 0x1c73, 0x1c88, 0x1c88, 0x1c9d, 0x1c9d, 0x1cb2, 0x1cbe, + 0x1cd9, 0x1cf1, 0x1cf1, 0x1d13, 0x1d13, 0x1d1f, 0x1d1f, 0x1d1f, + 0x1d50, 0x1d50, 0x1d50, 0x1d6b, 0x1d77, 0x1d77, 0x1d77, 0x1d77, + // Entry 200 - 23F + 0x1d77, 0x1d93, 0x1dac, 0x1dc8, 0x1ded, 0x1e05, 0x1e05, 0x1e2a, + 0x1e2a, 0x1e33, 0x1e33, 0x1e45, 0x1e45, 0x1e45, 0x1e60, 0x1e60, + 0x1e78, 0x1e78, 0x1e78, 0x1e8a, 0x1e96, 0x1e96, 0x1ea5, 0x1eba, + 0x1eba, 0x1eba, 0x1eba, 0x1ed8, 0x1ed8, 0x1ed8, 0x1ed8, 0x1ed8, + 0x1ef7, 0x1ef7, 0x1f06, 0x1f06, 0x1f06, 0x1f06, 0x1f1e, 0x1f30, + 0x1f42, 0x1f5d, 0x1f95, 0x1fad, 0x1fad, 0x1fc2, 0x1fce, 0x1fd7, + 0x1fd7, 0x1fd7, 0x1fd7, 0x1fd7, 0x1fd7, 0x1fd7, 0x1fe9, 0x1ffe, + 0x2013, 0x2025, 0x2025, 0x2037, 0x2053, 0x2068, 0x2068, 0x2074, + // Entry 240 - 27F + 0x2074, 0x2074, 0x208f, 0x20a1, 0x20a1, 0x20bf, 0x20bf, 0x20bf, + 0x20bf, 0x20bf, 0x2100, 0x210c, 0x215a, 0x2166, 0x2192, 0x2192, + 0x21c9, 0x21fb, 0x2241, 0x227b, 0x22b8, 0x22ef, 0x232d, 0x2358, + 0x238c, 0x238c, 0x23bd, 0x23e2, 0x2401, 0x2419, 0x2447, 0x2475, + 0x2493, 0x2493, 0x2493, 0x24af, 0x24e0, +} // Size: 1250 bytes + +const skLangStr string = "" + // Size: 5794 bytes + "afarčinaabcházčinaavestčinaafrikánčinaakančinaamharčinaaragónčinaarabčin" + + "aásamčinaavarčinaaymarčinaazerbajdžančinabaškirčinabieloruštinabulharčin" + + "abislamabambarčinabengálčinatibetčinabretónčinabosniačtinakatalánčinačeč" + + "enčinačamorčinakorzičtinakríčeštinacirkevná slovančinačuvaštinawaleština" + + "dánčinanemčinamaldivčinadzongkhaeweštinagréčtinaangličtinaesperantošpani" + + "elčinaestónčinabaskičtinaperzštinafulbčinafínčinafidžijčinafaerčinafranc" + + "úzštinazápadná frízštinaírčinaškótska gaelčinagalícijčinaguaraníjčinagu" + + "džarátčinamančinahauštinahebrejčinahindčinahiri motuchorvátčinahaitská k" + + "reolčinamaďarčinaarménčinahererointerlinguaindonézštinainterlingueigbošt" + + "inas’čchuanská iovčinainupikidoislandčinataliančinainuktitutjapončinajáv" + + "činagruzínčinakongčinakikujčinakuaňamakazaštinagrónčinakhmérčinakannadč" + + "inakórejčinakanurijčinakašmírčinakurdčinakomijčinakornčinakirgizštinalat" + + "inčinaluxemburčinagandčinalimburčinalingalčinalaoštinalitovčinalubčina (" + + "katanžská)lotyštinamalgaštinamarshallčinamaorijčinamacedónčinamalajálamč" + + "inamongolčinamaráthčinamalajčinamaltčinabarmčinanauruštinaseverná ndebel" + + "činanepálčinandongaholandčinanórčina (nynorsk)nórčina (bokmal)južná nde" + + "belčinanavahoňandžaokcitánčinaodžibvaoromčinauríjčinaosetčinapandžábčina" + + "pálípoľštinapaštčinaportugalčinakečuánčinarétorománčinarundčinarumunčina" + + "ruštinarwandčinasanskritsardínčinasindhčinaseverná lapončinasangosinhalč" + + "inaslovenčinaslovinčinasamojčinašončinasomálčinaalbánčinasrbčinasvazijči" + + "najužná sothčinasundčinašvédčinaswahilčinatamilčinatelugčinatadžičtinath" + + "ajčinatigriňaturkménčinatswančinatongčinaturečtinatsongčinatatárčinatahi" + + "tčinaujgurčinaukrajinčinaurdčinauzbečtinavendčinavietnamčinavolapükvalón" + + "činawolofčinaxhoštinajidišjorubčinačuangčinačínštinazuluštinaacehčinaač" + + "oliadangmeadygejčinaafrihiliaghemainčinaakkadčinaaleutčinajužná altajčin" + + "astará angličtinaangikaaramejčinaaraukánčinaarapažštinaarawačtinaasuastú" + + "rčinaawadhibalúčtinabalijčinabasabamunghomalabedžabembabenabafutzápadná " + + "balúčtinabhódžpurčinabikolčinabinikomsiksikabradžčinabodoakooseburiatčin" + + "abugištinabulublinmedumbakaddokaribčinakajugčinaatsamcebuánčinakigačibča" + + "čagatajčinachuukmarijčinačinucký žargónčoktčinačipevajčinačerokíčejenči" + + "nakurdčina (sorání)koptčinakrymská tatárčinaseychelská kreolčinakašubčin" + + "adakotčinadarginčinataitadelawarčinaslavédogribčinadinkčinazarmadógrídol" + + "nolužická srbčinadualastredná holandčinajola-fonyiďuladazagaembuefikstar" + + "oegyptčinaekadžukelamčinastredná angličtinaewondofangčinafilipínčinafonč" + + "inastredná francúzštinastará francúzštinaseverná frízštinavýchodofrízšti" + + "nafriulčinagagagauzštinagayogbajaetiópčinakiribatčinastredná horná nemči" + + "nastará horná nemčinagóndčinagorontalogótčinagrebostarogréčtinanemčina (" + + "švajčiarska)gusiikučinčinahaidahavajčinahiligajnončinachetitčinahmongči" + + "nahornolužická srbčinahupčinaibančinaibibioilokánčinainguštinalojbanngom" + + "bamašamežidovská perzštinažidovská arabčinakarakalpačtinakabylčinakačjin" + + "činajjukambakawikabardčinakanembutyapmakondekapverdčinakorokhasijčinach" + + "otančinazápadná songhajčinakakokalendžinkimbundukomi-permiačtinakonkánči" + + "nakusaiekpellekaračajevsko-balkarčinakarelčinakuruchčinašambalabafiakolí" + + "nčinakumyčtinakutenajčinažidovská španielčinalangilahandčinalambalezginč" + + "inalakotčinamongoloziseverné lurilubčina (luluánska)luiseňolundaluomizor" + + "ámčinaluhjamadurčinamafamagadhčinamaithilčinamakasarčinamandingomasajči" + + "namabamokšiančinamandarčinamendejčinamerumaurícijská kreolčinastredná ír" + + "činamakua-meettometa’mikmakčinaminangkabaučinamandžuštinamanípurčinamoh" + + "awkčinamossimundangviaceré jazykykríkčinamirandčinamarwarimyeneerzjančin" + + "amázandaránčinaneapolčinanamadolná nemčinanevárčinaniasánčinaniueštinakw" + + "asiongiemboonnogajčinastará nórčinan’koseverná sothčinanuerklasická nevá" + + "rčinaňamweziňankoleňoronzimaosedžštinaosmanská turečtinapangasinančinapa" + + "hlavíkapampangančinapapiamentopalaučinanigerijský pidžinstará perzštinaf" + + "eničtinapohnpeištinapruštinastará okcitánčinaquichéradžastančinarapanujč" + + "inararotongská maorijčinaromborómčinaarumunčinarwasandaweštinajakutčinas" + + "amaritánska aramejčinasamburusasačtinasantalčinangambaysangusicílčinaškó" + + "tčinajužná kurdčinasenekčinasenaselkupčinakoyraboro sennistará írčinatac" + + "helhitšančinačadská arabčinasidamojužná lapončinalapončina (lulská)lapon" + + "čina (inarijská)lapončina (skoltská)soninkesogdijčinasurinamčinasererči" + + "nasahosukumasususumerčinakomorčinasýrčina (klasická)sýrčinatemnetesoterê" + + "natetumčinatigrejčinativtokelauštinaklingónčinatlingitčinatuaregčinaňasa" + + " tonganovoguinejský pidžintarokocimšjančinatumbukatuvalčinatasawaqtuvian" + + "činastredomarocká tuaregčinaudmurtčinaugaritčinaumbundukoreňvaivodčinav" + + "unjowalserčinawalamčinawaraywashowarlpirikalmyčtinasogajaojapčinajangben" + + "yembakantončinazapotéčtinasystém Blisszenagatuaregčina (štandardná maroc" + + "ká)zuništinabez jazykového obsahuzazaarabčina (moderná štandardná)nemčin" + + "a (rakúska)nemčina (švajčiarska spisovná)angličtina (austrálska)angličti" + + "na (kanadská)angličtina (britská)angličtina (americká)španielčina (latin" + + "skoamerická)španielčina (európska)španielčina (mexická)francúzština (kan" + + "adská)francúzština (švajčiarska)dolná saštinaflámčinaportugalčina (brazí" + + "lska)portugalčina (európska)moldavčinasrbochorvátčinasvahilčina (konžská" + + ")čínština (zjednodušená)čínština (tradičná)" + +var skLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0015, 0x001f, 0x002c, 0x0035, 0x003f, 0x004b, + 0x0054, 0x005e, 0x0067, 0x0071, 0x0082, 0x008e, 0x009b, 0x00a6, + 0x00ad, 0x00b8, 0x00c4, 0x00ce, 0x00da, 0x00e6, 0x00f3, 0x00ff, + 0x010a, 0x0115, 0x0119, 0x0122, 0x0137, 0x0142, 0x014c, 0x0155, + 0x015d, 0x0168, 0x0170, 0x0179, 0x0183, 0x018e, 0x0197, 0x01a4, + 0x01af, 0x01ba, 0x01c4, 0x01cd, 0x01d6, 0x01e2, 0x01eb, 0x01f9, + 0x020e, 0x0216, 0x0229, 0x0236, 0x0244, 0x0253, 0x025b, 0x0264, + 0x026f, 0x0278, 0x0281, 0x028e, 0x02a1, 0x02ac, 0x02b7, 0x02bd, + // Entry 40 - 7F + 0x02c8, 0x02d6, 0x02e1, 0x02eb, 0x0303, 0x0309, 0x030c, 0x0317, + 0x0322, 0x032b, 0x0335, 0x033e, 0x034a, 0x0353, 0x035d, 0x0365, + 0x036f, 0x0379, 0x0384, 0x038f, 0x039a, 0x03a6, 0x03b3, 0x03bc, + 0x03c6, 0x03cf, 0x03db, 0x03e5, 0x03f2, 0x03fb, 0x0406, 0x0411, + 0x041a, 0x0424, 0x043a, 0x0444, 0x044f, 0x045c, 0x0467, 0x0474, + 0x0483, 0x048e, 0x049a, 0x04a4, 0x04ad, 0x04b6, 0x04c1, 0x04d5, + 0x04e0, 0x04e6, 0x04f1, 0x0504, 0x0516, 0x0529, 0x052f, 0x0537, + 0x0544, 0x054c, 0x0555, 0x055f, 0x0568, 0x0576, 0x057c, 0x0586, + // Entry 80 - BF + 0x0590, 0x059d, 0x05aa, 0x05ba, 0x05c3, 0x05cd, 0x05d5, 0x05df, + 0x05e7, 0x05f3, 0x05fd, 0x0610, 0x0615, 0x0620, 0x062b, 0x0636, + 0x0640, 0x0649, 0x0654, 0x065f, 0x0667, 0x0672, 0x0683, 0x068c, + 0x0697, 0x06a2, 0x06ac, 0x06b6, 0x06c2, 0x06cb, 0x06d3, 0x06e0, + 0x06ea, 0x06f3, 0x06fd, 0x0707, 0x0712, 0x071c, 0x0726, 0x0732, + 0x073a, 0x0744, 0x074d, 0x0759, 0x0761, 0x076c, 0x0776, 0x077f, + 0x0785, 0x078f, 0x079a, 0x07a5, 0x07af, 0x07b8, 0x07be, 0x07c5, + 0x07d0, 0x07d0, 0x07d8, 0x07dd, 0x07e5, 0x07ef, 0x07ef, 0x07f9, + // Entry C0 - FF + 0x07f9, 0x080b, 0x081d, 0x0823, 0x082e, 0x083b, 0x083b, 0x0848, + 0x0848, 0x0848, 0x0853, 0x0853, 0x0853, 0x0856, 0x0856, 0x0861, + 0x0861, 0x0867, 0x0872, 0x087c, 0x087c, 0x0880, 0x0885, 0x0885, + 0x088c, 0x0892, 0x0897, 0x0897, 0x089b, 0x08a0, 0x08a0, 0x08b5, + 0x08c4, 0x08ce, 0x08d2, 0x08d2, 0x08d5, 0x08dc, 0x08dc, 0x08dc, + 0x08e7, 0x08e7, 0x08eb, 0x08f1, 0x08fc, 0x0906, 0x090a, 0x090e, + 0x0915, 0x091a, 0x0924, 0x092e, 0x0933, 0x093f, 0x0943, 0x094a, + 0x0957, 0x095c, 0x0966, 0x0978, 0x0982, 0x098f, 0x0997, 0x09a2, + // Entry 100 - 13F + 0x09b6, 0x09bf, 0x09bf, 0x09d3, 0x09e9, 0x09f4, 0x09fe, 0x0a09, + 0x0a0e, 0x0a1a, 0x0a20, 0x0a2b, 0x0a34, 0x0a39, 0x0a40, 0x0a57, + 0x0a57, 0x0a5c, 0x0a70, 0x0a7a, 0x0a7f, 0x0a85, 0x0a89, 0x0a8d, + 0x0a8d, 0x0a9c, 0x0aa4, 0x0aad, 0x0ac1, 0x0ac1, 0x0ac7, 0x0ac7, + 0x0ad0, 0x0add, 0x0add, 0x0ae5, 0x0ae5, 0x0afc, 0x0b11, 0x0b11, + 0x0b25, 0x0b38, 0x0b42, 0x0b44, 0x0b50, 0x0b50, 0x0b54, 0x0b59, + 0x0b59, 0x0b64, 0x0b70, 0x0b70, 0x0b88, 0x0b9e, 0x0b9e, 0x0ba8, + 0x0bb1, 0x0bba, 0x0bbf, 0x0bce, 0x0be6, 0x0be6, 0x0be6, 0x0beb, + // Entry 140 - 17F + 0x0bf6, 0x0bfb, 0x0bfb, 0x0c05, 0x0c05, 0x0c14, 0x0c1f, 0x0c29, + 0x0c40, 0x0c40, 0x0c48, 0x0c51, 0x0c57, 0x0c63, 0x0c6d, 0x0c6d, + 0x0c6d, 0x0c73, 0x0c79, 0x0c80, 0x0c95, 0x0ca9, 0x0ca9, 0x0cb8, + 0x0cc2, 0x0cce, 0x0cd1, 0x0cd6, 0x0cda, 0x0ce5, 0x0cec, 0x0cf0, + 0x0cf7, 0x0d03, 0x0d03, 0x0d07, 0x0d07, 0x0d12, 0x0d1d, 0x0d33, + 0x0d33, 0x0d33, 0x0d37, 0x0d41, 0x0d49, 0x0d5a, 0x0d66, 0x0d6c, + 0x0d72, 0x0d8b, 0x0d8b, 0x0d8b, 0x0d95, 0x0da0, 0x0da8, 0x0dad, + 0x0db8, 0x0dc2, 0x0dce, 0x0de6, 0x0deb, 0x0df6, 0x0dfb, 0x0e06, + // Entry 180 - 1BF + 0x0e06, 0x0e06, 0x0e06, 0x0e10, 0x0e10, 0x0e15, 0x0e19, 0x0e26, + 0x0e26, 0x0e3b, 0x0e43, 0x0e48, 0x0e4b, 0x0e58, 0x0e5d, 0x0e5d, + 0x0e5d, 0x0e67, 0x0e6b, 0x0e76, 0x0e82, 0x0e8e, 0x0e96, 0x0ea0, + 0x0ea4, 0x0eb1, 0x0ebc, 0x0ec7, 0x0ecb, 0x0ee3, 0x0ef4, 0x0f00, + 0x0f07, 0x0f12, 0x0f22, 0x0f2f, 0x0f3c, 0x0f47, 0x0f4c, 0x0f4c, + 0x0f53, 0x0f62, 0x0f6c, 0x0f77, 0x0f7e, 0x0f7e, 0x0f83, 0x0f8e, + 0x0f9f, 0x0f9f, 0x0faa, 0x0fae, 0x0fbd, 0x0fc8, 0x0fd4, 0x0fde, + 0x0fde, 0x0fe4, 0x0fed, 0x0ff7, 0x1007, 0x1007, 0x100d, 0x101f, + // Entry 1C0 - 1FF + 0x1023, 0x1038, 0x1040, 0x1048, 0x104d, 0x1052, 0x105e, 0x1072, + 0x1081, 0x1089, 0x1099, 0x10a3, 0x10ad, 0x10ad, 0x10c0, 0x10c0, + 0x10c0, 0x10d1, 0x10d1, 0x10db, 0x10db, 0x10db, 0x10e8, 0x10f1, + 0x1105, 0x110c, 0x110c, 0x111b, 0x1127, 0x113f, 0x113f, 0x113f, + 0x1144, 0x114d, 0x114d, 0x114d, 0x114d, 0x1158, 0x115b, 0x1168, + 0x1172, 0x118b, 0x1192, 0x119c, 0x11a7, 0x11a7, 0x11ae, 0x11b3, + 0x11be, 0x11c9, 0x11c9, 0x11da, 0x11e4, 0x11e8, 0x11e8, 0x11f3, + 0x1202, 0x1211, 0x1211, 0x121a, 0x1223, 0x1235, 0x123b, 0x123b, + // Entry 200 - 23F + 0x123b, 0x124d, 0x1261, 0x1278, 0x128e, 0x1295, 0x12a0, 0x12ac, + 0x12b6, 0x12ba, 0x12ba, 0x12c0, 0x12c4, 0x12ce, 0x12d8, 0x12ed, + 0x12f6, 0x12f6, 0x12f6, 0x12fb, 0x12ff, 0x1306, 0x1310, 0x131b, + 0x131e, 0x132b, 0x132b, 0x1338, 0x1344, 0x1344, 0x134f, 0x135a, + 0x1370, 0x1370, 0x1376, 0x1376, 0x1383, 0x1383, 0x138a, 0x1394, + 0x139b, 0x13a6, 0x13c0, 0x13cb, 0x13d6, 0x13dd, 0x13e3, 0x13e6, + 0x13e6, 0x13e6, 0x13e6, 0x13e6, 0x13ee, 0x13ee, 0x13f3, 0x13fe, + 0x1408, 0x140d, 0x1412, 0x141a, 0x141a, 0x1425, 0x1425, 0x1429, + // Entry 240 - 27F + 0x142c, 0x1434, 0x143b, 0x1440, 0x1440, 0x144b, 0x1458, 0x1465, + 0x1465, 0x146b, 0x148e, 0x1498, 0x14ae, 0x14b2, 0x14d3, 0x14d3, + 0x14e6, 0x1508, 0x1521, 0x1538, 0x154e, 0x1565, 0x1586, 0x159f, + 0x15b7, 0x15b7, 0x15d1, 0x15ef, 0x15fe, 0x1608, 0x1622, 0x163b, + 0x1646, 0x1657, 0x166e, 0x168a, 0x16a2, +} // Size: 1250 bytes + +const slLangStr string = "" + // Size: 6423 bytes + "afarščinaabhaščinaavestijščinaafrikanščinaakanščinaamharščinaaragonščina" + + "arabščinaasamščinaavarščinaajmarščinaazerbajdžanščinabaškirščinabelorušč" + + "inabolgarščinabislamščinabambarščinabengalščinatibetanščinabretonščinabo" + + "sanščinakatalonščinačečenščinačamorščinakorziščinakrijščinačeščinastara " + + "cerkvena slovanščinačuvaščinavaližanščinadanščinanemščinadiveščinadzonka" + + "evenščinagrščinaangleščinaesperantošpanščinaestonščinabaskovščinaperzijš" + + "činafulščinafinščinafidžijščinaferščinafrancoščinazahodna frizijščinair" + + "ščinaškotska gelščinagalicijščinagvaranijščinagudžaratščinamanščinahavš" + + "činahebrejščinahindujščinahiri motuhrvaščinahaitijska kreolščinamadžarš" + + "činaarmenščinahererointerlingvaindonezijščinainterlingveigboščinasečuan" + + "ska jiščinainupiaščinaidoislandščinaitalijanščinainuktitutščinajaponščin" + + "ajavanščinagruzijščinakongovščinakikujščinakvanjamakazaščinagrenlandščin" + + "akmerščinakanadakorejščinakanurščinakašmirščinakurdščinakomijščinakornij" + + "ščinakirgiščinalatinščinaluksemburščinagandalimburščinalingalalaoščinal" + + "itovščinaluba-katangalatvijščinamalagaščinamarshallovščinamaorščinamaked" + + "onščinamalajalamščinamongolščinamaratščinamalajščinamalteščinaburmanščin" + + "anaurujščinaseverna ndebelščinanepalščinandonganizozemščinanovonorveščin" + + "aknjižna norveščinajužna ndebelščinanavajščinanjanščinaokcitanščinaanaši" + + "nabščinaoromoodijščinaosetinščinapandžabščinapalijščinapoljščinapaštunšč" + + "inaportugalščinakečuanščinaretoromanščinarundščinaromunščinaruščinaruand" + + "ščinasanskrtsardinščinasindščinaseverna samijščinasangosinhalščinaslova" + + "ščinaslovenščinasamoanščinašonščinasomalščinaalbanščinasrbščinasvazijšč" + + "inasesotosundanščinašvedščinasvahilitamilščinatelugijščinatadžiščinatajš" + + "činatigrajščinaturkmenščinacvanščinatongščinaturščinatsongatatarščinata" + + "hitščinaujgurščinaukrajinščinaurdujščinauzbeščinavendavietnamščinavolapu" + + "kvalonščinavolofščinakoščinajidišjorubščinakitajščinazulujščinaačejščina" + + "ačolijščinaadangmejščinaadigejščinaafrihiliaghemščinaainujščinaakadščina" + + "aleutščinajužna altajščinastara angleščinaangikaščinaaramejščinamapudung" + + "unščinaarapaščinaaravaščinaasujščinaasturijščinaavadščinabeludžijščinaba" + + "lijščinabasabedžabembabenajščinazahodnobalučijščinabodžpuribikolski jezi" + + "kedosiksikabradžbakanščinabodojščinaburjatščinabuginščinablinščinakadošč" + + "inakaribski jeziksebuanščinačigajščinačibčevščinačagatajščinatrukeščinam" + + "arijščinačinuški žargončoktavščinačipevščinačerokeščinačejenščinasoransk" + + "a kurdščinakoptščinakrimska tatarščinasejšelska francoska kreolščinakašu" + + "bščinadakotščinadarginščinataitajščinadelavarščinaslavejščinadogribdinka" + + "zarmajščinadogridolnja lužiška srbščinadualasrednja nizozemščinajola-fon" + + "jiščinadiuladazagaembujščinaefiščinastara egipčanščinaekajukelamščinasre" + + "dnja angleščinaevondovščinafangijščinafilipinščinafonščinasrednja franco" + + "ščinastara francoščinaseverna frizijščinavzhodna frizijščinafurlanščina" + + "gagagavščinagajščinagbajščinaetiopščinakiribatščinasrednja visoka nemšči" + + "nastara visoka nemščinagondigorontalščinagotščinagrebščinastara grščinan" + + "emščina (Švica)gusijščinagvičinhaidščinahavajščinahiligajnonščinahetitšč" + + "inahmonščinagornja lužiška srbščinahupaibanščinaibibijščinailokanščinain" + + "guščinalojbanngombamačamejščinajudovska perzijščinajudovska arabščinakar" + + "akalpaščinakabilščinakačinščinajjukambaščinakavikabardinščinatjapska nig" + + "erijščinamakondščinazelenortskootoška kreolščinakorokasikotanščinakoyra " + + "chiinikakokalenjinščinakimbundukomi-permjaščinakonkanščinakosrajščinakpe" + + "lejščinakaračaj-balkarščinakarelščinakurukšambalabafiakölnsko narečjekum" + + "iščinakutenajščinaladinščinalangijščinalandalambalezginščinalakotščinamo" + + "ngolozisevernolurijščinaluba-lulualuisenščinalundaluolushailuhijščinamad" + + "urščinamagadščinamaitilimakasarščinamandingomasajščinamokšavščinamandarš" + + "činamendemerumorisjenščinasrednja irščinamakuva-metometamikmaščinaminan" + + "gkabaumandžurščinamanipurščinamohoščinamosijščinamundangveč jezikovcreek" + + "ovščinamirandeščinamarvarščinaerzjanščinamazanderanščinanapolitanščinakh" + + "oekhoenizka nemščinanevarščinaniaščinaniuejščinakwasiongiemboonščinanoga" + + "jščinastara nordijščinan’koseverna sotščinanuerščinaklasična nevarščinan" + + "jamveščinanjankolenjoronzimaosageotomanska turščinapangasinanščinapampan" + + "ščinapapiamentupalavanščinanigerijski pidžinstara perzijščinafeničanšči" + + "naponpejščinastara pruščinastara provansalščinaquicheradžastanščinarapan" + + "ujščinararotongščinaromboromščinaaromunščinarwasandavščinajakutščinasama" + + "ritanska aramejščinasamburščinasasaščinasantalščinangambajščinasangujšči" + + "nasicilijanščinaškotščinajužna kurdščinasenaselkupščinakoyraboro sennist" + + "ara irščinatahelitska berberščinašanščinasidamščinajužna samijščinaluleš" + + "ka samijščinainarska samijščinasamijščina Skoltsoninkesurinamska kreolšč" + + "inasererščinasahosukumasusujščinasumerščinašikomorklasična sirščinasiršč" + + "inatemnejščinatesotetumščinatigrejščinativščinatokelavščinaklingonščinat" + + "lingitščinatamajaščinamalavijska tongščinatok pisintarokotsimščinatumbuk" + + "ščinatuvalujščinatasawaqtuvinščinatamašek (srednji atlas)udmurtščinauga" + + "ritski jezikumbundščinarootščinavajščinavotjaščinavunjowalservalamščinav" + + "arajščinavašajščinavarlpirščinakalmiščinasogščinajaojščinajapščinajangbe" + + "njembajščinakantonščinazapoteščinaznakovni jezik Blisszenaščinastandardn" + + "i maroški tamazigzunijščinabrez jezikoslovne vsebinezazajščinasodobna st" + + "andardna arabščinaavstrijska nemščinavisoka nemščina (Švica)avstralska a" + + "ngleščinakanadska angleščinaangleščina (VB)angleščina (ZDA)latinskoameri" + + "ška španščinaiberska španščinakanadska francoščinašvicarska francoščina" + + "nizka saščinaflamščinabrazilska portugalščinaiberska portugalščinamoldav" + + "ščinasrbohrvaščinakongoška svahilščinapoenostavljena kitajščinatradicio" + + "nalna kitajščina" + +var slLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000b, 0x0016, 0x0024, 0x0032, 0x003d, 0x0049, 0x0056, + 0x0061, 0x006c, 0x0077, 0x0083, 0x0096, 0x00a4, 0x00b1, 0x00be, + 0x00cb, 0x00d8, 0x00e5, 0x00f3, 0x0100, 0x010c, 0x011a, 0x0128, + 0x0135, 0x0141, 0x014c, 0x0156, 0x0172, 0x017e, 0x018d, 0x0197, + 0x01a1, 0x01ac, 0x01b2, 0x01bd, 0x01c6, 0x01d2, 0x01db, 0x01e7, + 0x01f3, 0x0200, 0x020d, 0x0217, 0x0221, 0x022f, 0x0239, 0x0246, + 0x025b, 0x0264, 0x0277, 0x0285, 0x0294, 0x02a4, 0x02ae, 0x02b8, + 0x02c5, 0x02d2, 0x02db, 0x02e6, 0x02fc, 0x030a, 0x0316, 0x031c, + // Entry 40 - 7F + 0x0327, 0x0337, 0x0342, 0x034d, 0x0361, 0x036e, 0x0371, 0x037e, + 0x038d, 0x039d, 0x03a9, 0x03b5, 0x03c2, 0x03cf, 0x03db, 0x03e3, + 0x03ee, 0x03fd, 0x0408, 0x040e, 0x041a, 0x0426, 0x0434, 0x043f, + 0x044b, 0x0458, 0x0464, 0x0470, 0x0480, 0x0485, 0x0492, 0x0499, + 0x04a3, 0x04af, 0x04bb, 0x04c8, 0x04d5, 0x04e6, 0x04f1, 0x04ff, + 0x050f, 0x051c, 0x0528, 0x0534, 0x0540, 0x054d, 0x055a, 0x056f, + 0x057b, 0x0581, 0x058f, 0x059f, 0x05b4, 0x05c8, 0x05d4, 0x05df, + 0x05ed, 0x05fd, 0x0602, 0x060d, 0x061a, 0x0629, 0x0635, 0x0640, + // Entry 80 - BF + 0x064e, 0x065d, 0x066b, 0x067b, 0x0686, 0x0692, 0x069b, 0x06a7, + 0x06ae, 0x06bb, 0x06c6, 0x06da, 0x06df, 0x06ec, 0x06f8, 0x0705, + 0x0712, 0x071d, 0x0729, 0x0735, 0x073f, 0x074c, 0x0752, 0x075f, + 0x076b, 0x0772, 0x077e, 0x078c, 0x0799, 0x07a3, 0x07b0, 0x07be, + 0x07c9, 0x07d4, 0x07de, 0x07e4, 0x07f0, 0x07fc, 0x0808, 0x0816, + 0x0822, 0x082d, 0x0832, 0x0840, 0x0847, 0x0853, 0x085f, 0x0868, + 0x086e, 0x087a, 0x087a, 0x0886, 0x0892, 0x089e, 0x08ac, 0x08bb, + 0x08c8, 0x08c8, 0x08d0, 0x08dc, 0x08e8, 0x08f3, 0x08f3, 0x08ff, + // Entry C0 - FF + 0x08ff, 0x0912, 0x0924, 0x0931, 0x093e, 0x094f, 0x094f, 0x095b, + 0x095b, 0x095b, 0x0967, 0x0967, 0x0967, 0x0972, 0x0972, 0x0980, + 0x0980, 0x098b, 0x099b, 0x09a7, 0x09a7, 0x09ab, 0x09ab, 0x09ab, + 0x09ab, 0x09b1, 0x09b6, 0x09b6, 0x09c2, 0x09c2, 0x09c2, 0x09d8, + 0x09e1, 0x09ef, 0x09f2, 0x09f2, 0x09f2, 0x09f9, 0x09f9, 0x09f9, + 0x0a0b, 0x0a0b, 0x0a17, 0x0a17, 0x0a24, 0x0a30, 0x0a30, 0x0a3b, + 0x0a3b, 0x0a46, 0x0a54, 0x0a54, 0x0a54, 0x0a61, 0x0a6e, 0x0a7d, + 0x0a8c, 0x0a98, 0x0aa4, 0x0ab5, 0x0ac3, 0x0ad0, 0x0ade, 0x0aeb, + // Entry 100 - 13F + 0x0aff, 0x0b0a, 0x0b0a, 0x0b1e, 0x0b3f, 0x0b4c, 0x0b58, 0x0b65, + 0x0b72, 0x0b80, 0x0b8d, 0x0b93, 0x0b98, 0x0ba5, 0x0baa, 0x0bc5, + 0x0bc5, 0x0bca, 0x0be0, 0x0bf1, 0x0bf6, 0x0bfc, 0x0c08, 0x0c12, + 0x0c12, 0x0c27, 0x0c2d, 0x0c38, 0x0c4c, 0x0c4c, 0x0c5a, 0x0c5a, + 0x0c67, 0x0c75, 0x0c75, 0x0c7f, 0x0c7f, 0x0c94, 0x0ca7, 0x0ca7, + 0x0cbc, 0x0cd1, 0x0cde, 0x0ce0, 0x0cec, 0x0cec, 0x0cf6, 0x0d01, + 0x0d01, 0x0d0d, 0x0d1b, 0x0d1b, 0x0d34, 0x0d4b, 0x0d4b, 0x0d50, + 0x0d5f, 0x0d69, 0x0d74, 0x0d83, 0x0d96, 0x0d96, 0x0d96, 0x0da2, + // Entry 140 - 17F + 0x0da9, 0x0db4, 0x0db4, 0x0dc0, 0x0dc0, 0x0dd1, 0x0ddd, 0x0de8, + 0x0e03, 0x0e03, 0x0e07, 0x0e12, 0x0e1f, 0x0e2c, 0x0e37, 0x0e37, + 0x0e37, 0x0e3d, 0x0e43, 0x0e52, 0x0e68, 0x0e7c, 0x0e7c, 0x0e8c, + 0x0e98, 0x0ea5, 0x0ea8, 0x0eb4, 0x0eb8, 0x0ec7, 0x0ec7, 0x0edd, + 0x0eea, 0x0f09, 0x0f09, 0x0f0d, 0x0f0d, 0x0f11, 0x0f1d, 0x0f29, + 0x0f29, 0x0f29, 0x0f2d, 0x0f3c, 0x0f44, 0x0f56, 0x0f63, 0x0f70, + 0x0f7d, 0x0f93, 0x0f93, 0x0f93, 0x0f9f, 0x0fa4, 0x0fac, 0x0fb1, + 0x0fc2, 0x0fcd, 0x0fdb, 0x0fe7, 0x0ff4, 0x0ff9, 0x0ffe, 0x100b, + // Entry 180 - 1BF + 0x100b, 0x100b, 0x100b, 0x1017, 0x1017, 0x101c, 0x1020, 0x1033, + 0x1033, 0x103d, 0x104a, 0x104f, 0x1052, 0x1058, 0x1064, 0x1064, + 0x1064, 0x1070, 0x1070, 0x107c, 0x1083, 0x1091, 0x1099, 0x10a5, + 0x10a5, 0x10b3, 0x10c0, 0x10c5, 0x10c9, 0x10d8, 0x10e9, 0x10f4, + 0x10f8, 0x1104, 0x110f, 0x111e, 0x112c, 0x1137, 0x1143, 0x1143, + 0x114a, 0x1156, 0x1164, 0x1172, 0x117f, 0x117f, 0x117f, 0x118c, + 0x119d, 0x119d, 0x11ad, 0x11b5, 0x11c5, 0x11d1, 0x11db, 0x11e7, + 0x11e7, 0x11ed, 0x11fd, 0x1209, 0x121c, 0x121c, 0x1222, 0x1234, + // Entry 1C0 - 1FF + 0x123f, 0x1255, 0x1262, 0x126a, 0x126f, 0x1274, 0x1279, 0x128d, + 0x129e, 0x129e, 0x12ab, 0x12b5, 0x12c3, 0x12c3, 0x12d5, 0x12d5, + 0x12d5, 0x12e8, 0x12e8, 0x12f7, 0x12f7, 0x12f7, 0x1304, 0x1314, + 0x132a, 0x1330, 0x1330, 0x1341, 0x134f, 0x135e, 0x135e, 0x135e, + 0x1363, 0x136d, 0x136d, 0x136d, 0x136d, 0x137a, 0x137d, 0x138a, + 0x1396, 0x13b0, 0x13bd, 0x13c8, 0x13d5, 0x13d5, 0x13e3, 0x13f0, + 0x1400, 0x140c, 0x140c, 0x141e, 0x141e, 0x1422, 0x1422, 0x142f, + 0x143e, 0x144d, 0x144d, 0x1465, 0x1470, 0x1470, 0x147c, 0x147c, + // Entry 200 - 23F + 0x147c, 0x148f, 0x14a4, 0x14b8, 0x14ca, 0x14d1, 0x14d1, 0x14e8, + 0x14f4, 0x14f8, 0x14f8, 0x14fe, 0x150a, 0x1516, 0x151e, 0x1532, + 0x153c, 0x153c, 0x153c, 0x1549, 0x154d, 0x154d, 0x1559, 0x1566, + 0x1570, 0x157e, 0x157e, 0x158c, 0x159a, 0x159a, 0x15a7, 0x15bd, + 0x15c6, 0x15c6, 0x15cc, 0x15cc, 0x15d7, 0x15d7, 0x15e4, 0x15f2, + 0x15f9, 0x1605, 0x161d, 0x162a, 0x1639, 0x1646, 0x1651, 0x165b, + 0x165b, 0x165b, 0x165b, 0x165b, 0x1667, 0x1667, 0x166c, 0x1672, + 0x167e, 0x168a, 0x1697, 0x16a5, 0x16a5, 0x16b1, 0x16b1, 0x16bb, + // Entry 240 - 27F + 0x16c6, 0x16d0, 0x16d7, 0x16e4, 0x16e4, 0x16f1, 0x16fe, 0x1712, + 0x1712, 0x171d, 0x1738, 0x1744, 0x175d, 0x1769, 0x1787, 0x1787, + 0x179c, 0x17b6, 0x17cd, 0x17e2, 0x17f3, 0x1805, 0x1823, 0x1837, + 0x1837, 0x1837, 0x184d, 0x1865, 0x1874, 0x187f, 0x1898, 0x18af, + 0x18bc, 0x18cb, 0x18e2, 0x18fd, 0x1917, +} // Size: 1250 bytes + +const sqLangStr string = "" + // Size: 4427 bytes + "afarishtabkazishtafrikanishtakanishtamarishtaragonezishtarabishtasamezis" + + "htavarikishtajmarishtazerbajxhanishtbashkirishtbjellorusishtbullgarishtb" + + "islamishtbambarishtbengalishttibetishtbretonishtboshnjakishtkatalonishtç" + + "eçenishtkamoroishtkorsikishtçekishtsllavishte kisheçuvashishtuellsishtda" + + "nishtgjermanishtdivehishtxhongaishteveishtgreqishtanglishtesperantospanj" + + "ishtestonishtbaskishtpersishtfulaishtfinlandishtfixhianishtfaroishtfrëng" + + "jishtfrizianishte perëndimoreirlandishtgalishte skocezegalicishtguaranis" + + "htguxharatishtmanksishthausishthebraishtindishtkroatishthaitishthungaris" + + "htarmenishthereroishtinterlinguaindonezishtgjuha oksidentaleigboishtsish" + + "uanishtidoishtislandishtitalishtinuktitutishtjaponishtjavanishtgjeorgjis" + + "htkikujuishtkuanjamaishtkazakishtkalalisutishtkmerishtkanadishtkoreanish" + + "tkanurishtkashmirishtkurdishtkomishtkornishtkirgizishtlatinishtluksembur" + + "gishtgandaishtlimburgishtlingalishtlaosishtlituanishtluba-katangaishtlet" + + "onishtmalagezishtmarshallishtmaorishtmaqedonishtmalajalamishtmongolishtm" + + "aratishtmalajishtmaltishtbirmanishtnauruishtndebelishte veriorenepalisht" + + "ndongaishtholandishtnorvegjishte nynorsknorvegjishte letrarendebelishte " + + "jugorenavahoishtnianjishtoksitanishtoromoishtodishtosetishtpanxhabishtpo" + + "lonishtpashtoishtportugalishtkeçuaishtretoromanishtrundishtrumanishtrusi" + + "shtkiniaruandishtsanskritishtsardenjishtsindishtsamishte verioresangoish" + + "tsinhalishtsllovakishtsllovenishtsamoanishtshonishtsomalishtshqipserbish" + + "tsuatishtsotoishte jugoresundanishtsuedishtsuahilishttamilishtteluguisht" + + "taxhikishttajlandishttigrinjaishtturkmenishtcuanaishttonganishtturqishtc" + + "ongaishttatarishttahitishtujgurishtukrainishturduishtuzbekishtvendaishtv" + + "ietnamishtvolapykishtualunishtulufishtkosaishtjidishtjorubaishtkinezisht" + + "zuluishtakinezishtandangmeishtadigishtagemishtajnuishtaleutishtaltaishte" + + " jugoreangikishtmapuçishtarapahoishtasuishtasturishtauadhishtbalinezisht" + + "basaishtbembaishtbenaishtbalokishte perëndimoreboxhpurishtbinishtsiksika" + + "ishtbodoishtbuginezishtblinishtsebuanishtçigishtçukezishtmarishtçoktauis" + + "htçerokishtçejenishtkurdishte qendrorefrëngjishte kreole seselvedakotish" + + "tdarguaishttajtaishtdogribishtzarmaishtsorbishte e poshtmedualaishtxhula" + + "fonjishtdazagauishtembuishtefikishtekajukishteuondoishtfilipinishtfonish" + + "tfriulianishtgaishtgagauzishtgizishtgilbertazishtgorontaloishtgjermanish" + + "te zviceranegusishtguiçinishthavaishthiligajnonishthmongishtsorbishte e " + + "sipërmehupaishtibanishtibibioishtilokoishtingushishtlojbanishtngombishtm" + + "açamishtkabilishtkaçinishtkajeishtkambaishtkabardianishttjapishtmakondis" + + "htkreolishte e Kepit të Gjelbërkoroishtkasishtkojraçinishtkakoishtkalenx" + + "hinishtkimbunduishtkomi-parmjakishtkonkanishtkpeleishtkaraçaj-balkarisht" + + "karelianishtkurukishtshambalishtbafianishtkëlnishtkumikishtladinoishtlan" + + "gishtlezgianishtlakotishtlozishtlurishte verioreluba-luluaishtlundaishtl" + + "uoishtmizoishtlujaishtmadurezishtmagaishtmaitilishtmakasarishtmasaishtmo" + + "kshaishtmendishtmeruishtmorisjenishtmakua-mitoishtmetaishtmikmakishtmina" + + "ngkabauishtmanipurishtmohokishtmosishtmundangishtgjuhë të shumëfishtakri" + + "kishtmirandishterzjaishtmazanderanishtnapoletanishtnamaishtgjermanishte " + + "e vendeve të ulëtaneuarishtniasishtniueanishtkuasishtngiembunishtnogajis" + + "htnkoishtsotoishte veriorenuerishtniankolishtpangasinanishtpampangaishtp" + + "apiamentishtpaluanishtpixhinishte nigerianeprusishtkiçeishtrapanuishtrar" + + "ontonganishtromboishtarumuneruaishtsandauishtsakaishtsamburishtsantalish" + + "tngambajishtsanguishtsiçilianishtskotishtkurdishte jugoresenaishtsenisht" + + "e kojraboretaçelitishtshanishtsamishte jugoresamishte lulesamishte inari" + + "samishte skoltisoninkishtsrananisht (sranantongoisht)sahoishtsukumaishtk" + + "amorianishtsiriakishttimneishttesoishttetumishttigreishtklingonishtpisin" + + "ishte tokutorokoishttumbukaishttuvaluishttasavakishttuvinianishttamaziat" + + "ishte atlase qendroreudmurtishtumbunduishtrutishtvaishtvunxhoishtualseri" + + "shtulajtaishtuarajishtuarlpirishtkalmikishtsogishtjangbenishtjembaishtka" + + "ntonezishttamaziatishte standarde marokenezunishtnuk ka përmbajtje gjuhë" + + "sorezazaishtarabishte standarde modernegjermanishte austriakegjermanisht" + + "e zvicerane (dialekti i Alpeve)anglishte australianeanglishte kanadezean" + + "glishte britanikeanglishte amerikanespanjishte amerikano-latinespanjisht" + + "e evropianespanjishte meksikanefrëngjishte kanadezefrëngjishte zvicerane" + + "gjermanishte saksone e vendeve të ulëtaflamandishtportugalishte brazilia" + + "neportugalishte evropianemoldavishtserbo-kroatishtsuahilishte kongoje" + +var sqLangIdx = []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0011, 0x0011, 0x001c, 0x0024, 0x002c, 0x0038, + 0x0040, 0x004a, 0x0054, 0x005d, 0x006c, 0x0077, 0x0084, 0x008f, + 0x0099, 0x00a3, 0x00ad, 0x00b6, 0x00c0, 0x00cc, 0x00d7, 0x00e2, + 0x00ec, 0x00f6, 0x00f6, 0x00fe, 0x010e, 0x0119, 0x0122, 0x0129, + 0x0134, 0x013d, 0x0147, 0x014e, 0x0156, 0x015e, 0x0167, 0x0170, + 0x0179, 0x0181, 0x0189, 0x0191, 0x019c, 0x01a7, 0x01af, 0x01ba, + 0x01d3, 0x01dd, 0x01ed, 0x01f6, 0x0200, 0x020c, 0x0215, 0x021d, + 0x0226, 0x022d, 0x022d, 0x0236, 0x023e, 0x0248, 0x0251, 0x025b, + // Entry 40 - 7F + 0x0266, 0x0271, 0x0282, 0x028a, 0x0295, 0x0295, 0x029c, 0x02a6, + 0x02ae, 0x02bb, 0x02c4, 0x02cd, 0x02d8, 0x02d8, 0x02e2, 0x02ee, + 0x02f7, 0x0304, 0x030c, 0x0315, 0x031f, 0x0328, 0x0333, 0x033b, + 0x0342, 0x034a, 0x0354, 0x035d, 0x036b, 0x0374, 0x037f, 0x0389, + 0x0391, 0x039b, 0x03ab, 0x03b4, 0x03bf, 0x03cb, 0x03d3, 0x03de, + 0x03eb, 0x03f5, 0x03fe, 0x0407, 0x040f, 0x0419, 0x0422, 0x0435, + 0x043e, 0x0448, 0x0452, 0x0466, 0x047a, 0x048c, 0x0496, 0x049f, + 0x04aa, 0x04aa, 0x04b3, 0x04b9, 0x04c1, 0x04cc, 0x04cc, 0x04d5, + // Entry 80 - BF + 0x04df, 0x04eb, 0x04f5, 0x0502, 0x050a, 0x0513, 0x051a, 0x0528, + 0x0534, 0x053f, 0x0547, 0x0557, 0x0560, 0x056a, 0x0575, 0x0580, + 0x058a, 0x0592, 0x059b, 0x05a0, 0x05a8, 0x05b0, 0x05c0, 0x05ca, + 0x05d2, 0x05dc, 0x05e5, 0x05ef, 0x05f9, 0x0604, 0x0610, 0x061b, + 0x0624, 0x062e, 0x0636, 0x063f, 0x0648, 0x0651, 0x065a, 0x0664, + 0x066c, 0x0675, 0x067e, 0x0689, 0x0694, 0x069d, 0x06a5, 0x06ad, + 0x06b4, 0x06be, 0x06be, 0x06c7, 0x06cf, 0x06d9, 0x06d9, 0x06e5, + 0x06ed, 0x06ed, 0x06ed, 0x06f5, 0x06fd, 0x06fd, 0x06fd, 0x0706, + // Entry C0 - FF + 0x0706, 0x0716, 0x0716, 0x071f, 0x071f, 0x0729, 0x0729, 0x0734, + 0x0734, 0x0734, 0x0734, 0x0734, 0x0734, 0x073b, 0x073b, 0x0744, + 0x0744, 0x074d, 0x074d, 0x0758, 0x0758, 0x0760, 0x0760, 0x0760, + 0x0760, 0x0760, 0x0769, 0x0769, 0x0771, 0x0771, 0x0771, 0x0788, + 0x0793, 0x0793, 0x079a, 0x079a, 0x079a, 0x07a5, 0x07a5, 0x07a5, + 0x07a5, 0x07a5, 0x07ad, 0x07ad, 0x07ad, 0x07b8, 0x07b8, 0x07c0, + 0x07c0, 0x07c0, 0x07c0, 0x07c0, 0x07c0, 0x07ca, 0x07d2, 0x07d2, + 0x07d2, 0x07dc, 0x07e3, 0x07e3, 0x07ee, 0x07ee, 0x07f8, 0x0802, + // Entry 100 - 13F + 0x0814, 0x0814, 0x0814, 0x0814, 0x082f, 0x082f, 0x0838, 0x0842, + 0x084b, 0x084b, 0x084b, 0x0855, 0x0855, 0x085e, 0x085e, 0x0871, + 0x0871, 0x087a, 0x087a, 0x0887, 0x0887, 0x0892, 0x089a, 0x08a2, + 0x08a2, 0x08a2, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08b6, 0x08b6, + 0x08b6, 0x08c1, 0x08c1, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, + 0x08c8, 0x08c8, 0x08d4, 0x08da, 0x08e4, 0x08e4, 0x08e4, 0x08e4, + 0x08e4, 0x08eb, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, + 0x0905, 0x0905, 0x0905, 0x0905, 0x091b, 0x091b, 0x091b, 0x0922, + // Entry 140 - 17F + 0x092d, 0x092d, 0x092d, 0x0935, 0x0935, 0x0943, 0x0943, 0x094c, + 0x0960, 0x0960, 0x0968, 0x0970, 0x097a, 0x0983, 0x098d, 0x098d, + 0x098d, 0x0997, 0x09a0, 0x09aa, 0x09aa, 0x09aa, 0x09aa, 0x09aa, + 0x09b3, 0x09bd, 0x09c5, 0x09ce, 0x09ce, 0x09db, 0x09db, 0x09e3, + 0x09ed, 0x0a0c, 0x0a0c, 0x0a14, 0x0a14, 0x0a1b, 0x0a1b, 0x0a28, + 0x0a28, 0x0a28, 0x0a30, 0x0a3d, 0x0a49, 0x0a59, 0x0a63, 0x0a63, + 0x0a6c, 0x0a7f, 0x0a7f, 0x0a7f, 0x0a8b, 0x0a94, 0x0a9f, 0x0aa9, + 0x0ab2, 0x0abb, 0x0abb, 0x0ac5, 0x0acd, 0x0acd, 0x0acd, 0x0ad8, + // Entry 180 - 1BF + 0x0ad8, 0x0ad8, 0x0ad8, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae8, 0x0af8, + 0x0af8, 0x0b06, 0x0b06, 0x0b0f, 0x0b16, 0x0b1e, 0x0b26, 0x0b26, + 0x0b26, 0x0b31, 0x0b31, 0x0b39, 0x0b43, 0x0b4e, 0x0b4e, 0x0b56, + 0x0b56, 0x0b60, 0x0b60, 0x0b68, 0x0b70, 0x0b7c, 0x0b7c, 0x0b8a, + 0x0b92, 0x0b9c, 0x0bab, 0x0bab, 0x0bb6, 0x0bbf, 0x0bc6, 0x0bc6, + 0x0bd1, 0x0be8, 0x0bf0, 0x0bfa, 0x0bfa, 0x0bfa, 0x0bfa, 0x0c03, + 0x0c11, 0x0c11, 0x0c1e, 0x0c26, 0x0c47, 0x0c50, 0x0c58, 0x0c62, + 0x0c62, 0x0c6a, 0x0c76, 0x0c7f, 0x0c7f, 0x0c7f, 0x0c86, 0x0c97, + // Entry 1C0 - 1FF + 0x0c9f, 0x0c9f, 0x0c9f, 0x0caa, 0x0caa, 0x0caa, 0x0caa, 0x0caa, + 0x0cb8, 0x0cb8, 0x0cc4, 0x0cd1, 0x0cdb, 0x0cdb, 0x0cf0, 0x0cf0, + 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf8, + 0x0cf8, 0x0d01, 0x0d01, 0x0d01, 0x0d0b, 0x0d1a, 0x0d1a, 0x0d1a, + 0x0d23, 0x0d23, 0x0d23, 0x0d23, 0x0d23, 0x0d2a, 0x0d31, 0x0d3b, + 0x0d43, 0x0d43, 0x0d4d, 0x0d4d, 0x0d57, 0x0d57, 0x0d62, 0x0d6b, + 0x0d78, 0x0d80, 0x0d80, 0x0d90, 0x0d90, 0x0d98, 0x0d98, 0x0d98, + 0x0daa, 0x0daa, 0x0daa, 0x0db6, 0x0dbe, 0x0dbe, 0x0dbe, 0x0dbe, + // Entry 200 - 23F + 0x0dbe, 0x0dcd, 0x0dda, 0x0de8, 0x0df7, 0x0e01, 0x0e01, 0x0e1d, + 0x0e1d, 0x0e25, 0x0e25, 0x0e2f, 0x0e2f, 0x0e2f, 0x0e3b, 0x0e3b, + 0x0e45, 0x0e45, 0x0e45, 0x0e4e, 0x0e56, 0x0e56, 0x0e5f, 0x0e68, + 0x0e68, 0x0e68, 0x0e68, 0x0e73, 0x0e73, 0x0e73, 0x0e73, 0x0e73, + 0x0e82, 0x0e82, 0x0e8c, 0x0e8c, 0x0e8c, 0x0e8c, 0x0e97, 0x0ea1, + 0x0eac, 0x0eb8, 0x0ed5, 0x0edf, 0x0edf, 0x0eea, 0x0ef1, 0x0ef7, + 0x0ef7, 0x0ef7, 0x0ef7, 0x0ef7, 0x0ef7, 0x0ef7, 0x0f01, 0x0f0b, + 0x0f15, 0x0f1e, 0x0f1e, 0x0f29, 0x0f29, 0x0f33, 0x0f33, 0x0f3a, + // Entry 240 - 27F + 0x0f3a, 0x0f3a, 0x0f45, 0x0f4e, 0x0f4e, 0x0f5a, 0x0f5a, 0x0f5a, + 0x0f5a, 0x0f5a, 0x0f7a, 0x0f81, 0x0f9e, 0x0fa6, 0x0fc1, 0x0fc1, + 0x0fd7, 0x1001, 0x1016, 0x1028, 0x103b, 0x104e, 0x1069, 0x107d, + 0x1091, 0x1091, 0x10a6, 0x10bc, 0x10e5, 0x10f0, 0x1108, 0x111f, + 0x1129, 0x1138, 0x114b, +} // Size: 1246 bytes + +const srLangStr string = "" + // Size: 8071 bytes + "афарскиабхаскиавестанскиафрикансаканскиамхарскиарагонскиарапскиасамскиав" + + "арскиајмараазербејџанскибашкирскибелорускибугарскибисламабамбарабенгалс" + + "китибетанскибретонскибосанскикаталонскичеченскичаморокорзиканскикричешк" + + "ицрквенословенскичувашкивелшкиданскинемачкималдивскиџонгаевегрчкиенглес" + + "киесперантошпанскиестонскибаскијскиперсијскифулафинскифиџијскифарскифра" + + "нцускизападни фризијскиирскишкотски гелскигалицијскигваранигуџаратиманк" + + "схаусахебрејскихиндихири мотухрватскихаићанскимађарскијерменскихерероин" + + "терлингваиндонежанскиинтерлингвеигбосечуански јиинупикидоисландскиитали" + + "јанскиинуитскијапанскијаванскигрузијскиконгокикујуквањамаказашкигренлан" + + "дскикмерскиканадакорејскиканурикашмирскикурдскикомикорнволскикиргискила" + + "тинскилуксембуршкигандалимбуршкилингалалаоскилитванскилуба-катангалетон" + + "скималгашкимаршалскимаорскимакедонскималајаламмонголскимаратималајскима" + + "лтешкибурманскинаурускисеверни ндебеленепалскиндонгахоландскинорвешки н" + + "инорскнорвешки букмолјужни ндебеленавахоњанџаокситанскиоџибвеоромоодија" + + "осетинскипенџапскипалипољскипаштунскипортугалскикечуароманшкирундирумун" + + "скирускикињаруандасанскритсардинскисиндисеверни самисангосинхалешкислов" + + "ачкисловеначкисамоанскишонасомалскиалбанскисрпскисвазисесотосунданскишв" + + "едскисвахилитамилскителугутаџичкитајскитигрињатуркменскицванатонганскит" + + "урскицонгататарскитахићанскиујгурскиукрајинскиурдуузбечкивендавијетнамс" + + "киволапиквалонскиволофкосајидишјорубаџуаншкикинескизулуацешкиаколиаданг" + + "меадигејскиафрихилиагемаинуакадијскиалеутскијужноалтајскистароенглескиа" + + "нгикаарамејскимапучеарапахоаравачкиасуастуријскиавадибелучкибалијскибас" + + "абеџабембабеназападни белучкибоџпурибиколбинисисикабрајбодобурјатскибуг" + + "ијскиблинскикадокарипскиатсамсебуанскичигачипчачагатајчучкимаричинучкич" + + "октавскичипевјанскичерокичејенскицентрални курдскикоптскикримскотатарск" + + "исејшелски креолски францускикашупскидакотадаргинскитаитаделаверскислеј" + + "видогрипскидинказармадогридоњи лужичкосрпскидуаласредњехоландскиџола фо" + + "њиђуладазагаембуефичкистароегипатскиекаџукеламитскисредњеенглескиевондо" + + "фангфилипинскифонсредњефранцускистарофранцускисевернофризијскиисточнофр" + + "изијскифриулскигагагаузгајогбајагеезгилбертскисредњи високонемачкистаро" + + "немачкигондигоронталоготскигребостарогрчкиШвајцарски немачкигусигвичинс" + + "кихаидахавајскихилигајнонскихетитскихмоншкигорњи лужичкосрпскихупаибанс" + + "киибибиоилокоингушкиложбаннгомбамачамејудео-персијскијудео-арапскикара-" + + "калпашкикабилекачинскиџукамбакавикабардијскитјапмакондезеленортскикорок" + + "асикотанешкикојра чииникакокаленџинскикимбундукоми-пермскиконканикосрен" + + "скикпелекарачајско-балкарскикриокарелскикурукшамбалабафијакелнскикумичк" + + "икутенајладинолангиландаламбалезгинскилакотамонголозисеверни лурилуба-л" + + "улуалуисењолундалуомизолујиамадурскимагахимаитилимакасарскимандингомаса" + + "јскимокшамандармендемеруморисјенсредњеирскимакува-митометамикмакминангк" + + "абауманџурскиманипурскимохочкимосимундангВише језикакришкимирандскимарв" + + "ариерзјамазандеранскинапуљскинаманисконемачкиневариниасниуејскиквасионг" + + "иембунногајскистаронордијскинкосеверни сотонуеркласични неварскињамвези" + + "њанколењоронзимаосагеосмански турскипангасинанскипахлавипампангапапиаме" + + "нтопалаускинигеријски пиџинстароперсијскифеничанскипонпејскипрускистаро" + + "окситанскикичераџастанскирапануираротонганскиромборомскицинцарскируасан" + + "давејакутскисамаријански арамејскисамбурусасаксанталингамбајсангусицили" + + "јанскишкотскијужнокурдскисенаселкупскикојраборо сенистароирскиташелхитш" + + "анскисидамојужни самилуле самиинари самисколтски лапонскисонинкесогдијс" + + "кисранан тонгосерерскисахосукумасусусумерскикоморскисиријачкисиријскити" + + "мнетесотеренотетумтигретивтокелауклингонскитлингиттамашекњаса тонгаток " + + "писинтарокоцимшиантумбукатувалутасавактувинскицентралноатласки тамазигт" + + "удмуртскиугаритскиумбундуРутваиводскивунџовалсерскиволајтаварајскивашов" + + "арлпирикалмичкисогајаојапскијангбенјембакантонскизапотечкиблисимболизен" + + "агастандардни марокански тамазигтзунибез лингвистичког садржајазазасавр" + + "емени стандардни арапскишвајцарски високи немачкиенглески (Велика Брита" + + "нија)енглески (Сједињене Америчке Државе)нискосаксонскифламанскипортуга" + + "лски (Португал)молдавскисрпскохрватскикисвахилипоједностављени кинескит" + + "радиционални кинески" + +var srLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x001c, 0x0030, 0x0040, 0x004e, 0x005e, 0x0070, + 0x007e, 0x008c, 0x009a, 0x00a6, 0x00c0, 0x00d2, 0x00e4, 0x00f4, + 0x0102, 0x0110, 0x0122, 0x0136, 0x0148, 0x0158, 0x016c, 0x017c, + 0x0188, 0x019e, 0x01a4, 0x01ae, 0x01ce, 0x01dc, 0x01e8, 0x01f4, + 0x0202, 0x0214, 0x021e, 0x0224, 0x022e, 0x023e, 0x0250, 0x025e, + 0x026e, 0x0280, 0x0292, 0x029a, 0x02a6, 0x02b6, 0x02c2, 0x02d4, + 0x02f5, 0x02ff, 0x031a, 0x032e, 0x033c, 0x034c, 0x0356, 0x0360, + 0x0372, 0x037c, 0x038d, 0x039d, 0x03af, 0x03bf, 0x03d1, 0x03dd, + // Entry 40 - 7F + 0x03f3, 0x040b, 0x0421, 0x0429, 0x0440, 0x044c, 0x0452, 0x0464, + 0x047a, 0x048a, 0x049a, 0x04aa, 0x04bc, 0x04c6, 0x04d2, 0x04e0, + 0x04ee, 0x0504, 0x0512, 0x051e, 0x052e, 0x053a, 0x054c, 0x055a, + 0x0562, 0x0576, 0x0586, 0x0596, 0x05ae, 0x05b8, 0x05ca, 0x05d8, + 0x05e4, 0x05f6, 0x060d, 0x061d, 0x062d, 0x063f, 0x064d, 0x0661, + 0x0673, 0x0685, 0x0691, 0x06a1, 0x06b1, 0x06c3, 0x06d3, 0x06f0, + 0x0700, 0x070c, 0x071e, 0x073d, 0x075a, 0x0773, 0x077f, 0x0789, + 0x079d, 0x07a9, 0x07b3, 0x07bd, 0x07cf, 0x07e1, 0x07e9, 0x07f5, + // Entry 80 - BF + 0x0807, 0x081d, 0x0827, 0x0833, 0x0841, 0x0851, 0x085b, 0x086f, + 0x087f, 0x0891, 0x089b, 0x08b2, 0x08bc, 0x08d0, 0x08e0, 0x08f4, + 0x0906, 0x090e, 0x091e, 0x092e, 0x093a, 0x0944, 0x0950, 0x0962, + 0x0970, 0x097e, 0x098e, 0x099a, 0x09a8, 0x09b4, 0x09c2, 0x09d6, + 0x09e0, 0x09f2, 0x09fe, 0x0a08, 0x0a18, 0x0a2c, 0x0a3c, 0x0a50, + 0x0a58, 0x0a66, 0x0a70, 0x0a86, 0x0a94, 0x0aa4, 0x0aae, 0x0ab6, + 0x0ac0, 0x0acc, 0x0ada, 0x0ae8, 0x0af0, 0x0afc, 0x0b06, 0x0b14, + 0x0b26, 0x0b26, 0x0b36, 0x0b3e, 0x0b46, 0x0b58, 0x0b58, 0x0b68, + // Entry C0 - FF + 0x0b68, 0x0b82, 0x0b9c, 0x0ba8, 0x0bba, 0x0bc6, 0x0bc6, 0x0bd4, + 0x0bd4, 0x0bd4, 0x0be4, 0x0be4, 0x0be4, 0x0bea, 0x0bea, 0x0bfe, + 0x0bfe, 0x0c08, 0x0c16, 0x0c26, 0x0c26, 0x0c2e, 0x0c2e, 0x0c2e, + 0x0c2e, 0x0c36, 0x0c40, 0x0c40, 0x0c48, 0x0c48, 0x0c48, 0x0c65, + 0x0c73, 0x0c7d, 0x0c85, 0x0c85, 0x0c85, 0x0c91, 0x0c91, 0x0c91, + 0x0c99, 0x0c99, 0x0ca1, 0x0ca1, 0x0cb3, 0x0cc3, 0x0cc3, 0x0cd1, + 0x0cd1, 0x0cd9, 0x0ce9, 0x0ce9, 0x0cf3, 0x0d05, 0x0d0d, 0x0d17, + 0x0d25, 0x0d2f, 0x0d37, 0x0d45, 0x0d57, 0x0d6d, 0x0d79, 0x0d89, + // Entry 100 - 13F + 0x0daa, 0x0db8, 0x0db8, 0x0dd6, 0x0e0c, 0x0e1c, 0x0e28, 0x0e3a, + 0x0e44, 0x0e58, 0x0e64, 0x0e76, 0x0e80, 0x0e8a, 0x0e94, 0x0eb7, + 0x0eb7, 0x0ec1, 0x0edf, 0x0ef0, 0x0ef8, 0x0f04, 0x0f0c, 0x0f18, + 0x0f18, 0x0f34, 0x0f40, 0x0f52, 0x0f6e, 0x0f6e, 0x0f7a, 0x0f7a, + 0x0f82, 0x0f96, 0x0f96, 0x0f9c, 0x0f9c, 0x0fba, 0x0fd6, 0x0fd6, + 0x0ff6, 0x1016, 0x1026, 0x102a, 0x1036, 0x1036, 0x103e, 0x1048, + 0x1048, 0x1050, 0x1064, 0x1064, 0x108b, 0x10a3, 0x10a3, 0x10ad, + 0x10bf, 0x10cb, 0x10d5, 0x10e9, 0x110c, 0x110c, 0x110c, 0x1114, + // Entry 140 - 17F + 0x1126, 0x1130, 0x1130, 0x1140, 0x1140, 0x115a, 0x116a, 0x1178, + 0x119d, 0x119d, 0x11a5, 0x11b3, 0x11bf, 0x11c9, 0x11d7, 0x11d7, + 0x11d7, 0x11e3, 0x11ef, 0x11fb, 0x1218, 0x1231, 0x1231, 0x124a, + 0x1256, 0x1266, 0x126a, 0x1274, 0x127c, 0x1292, 0x1292, 0x129a, + 0x12a8, 0x12be, 0x12be, 0x12c6, 0x12c6, 0x12ce, 0x12e0, 0x12f5, + 0x12f5, 0x12f5, 0x12fd, 0x1313, 0x1323, 0x133a, 0x1348, 0x135a, + 0x1364, 0x138b, 0x1393, 0x1393, 0x13a3, 0x13ad, 0x13bb, 0x13c7, + 0x13d5, 0x13e3, 0x13f1, 0x13fd, 0x1407, 0x1411, 0x141b, 0x142d, + // Entry 180 - 1BF + 0x142d, 0x142d, 0x142d, 0x1439, 0x1439, 0x1443, 0x144b, 0x1462, + 0x1462, 0x1475, 0x1483, 0x148d, 0x1493, 0x149b, 0x14a5, 0x14a5, + 0x14a5, 0x14b5, 0x14b5, 0x14c1, 0x14cf, 0x14e3, 0x14f3, 0x1503, + 0x1503, 0x150d, 0x1519, 0x1523, 0x152b, 0x153b, 0x1551, 0x1566, + 0x156e, 0x157a, 0x1590, 0x15a2, 0x15b6, 0x15c4, 0x15cc, 0x15cc, + 0x15da, 0x15ef, 0x15fb, 0x160d, 0x161b, 0x161b, 0x161b, 0x1625, + 0x163f, 0x163f, 0x164f, 0x1657, 0x166f, 0x167b, 0x1683, 0x1693, + 0x1693, 0x169f, 0x16af, 0x16bf, 0x16db, 0x16db, 0x16e1, 0x16f8, + // Entry 1C0 - 1FF + 0x1700, 0x1721, 0x172f, 0x173d, 0x1745, 0x174f, 0x1759, 0x1776, + 0x1790, 0x179e, 0x17ae, 0x17c2, 0x17d2, 0x17d2, 0x17f1, 0x17f1, + 0x17f1, 0x180d, 0x180d, 0x1821, 0x1821, 0x1821, 0x1833, 0x183f, + 0x185d, 0x1865, 0x1865, 0x187b, 0x1889, 0x18a3, 0x18a3, 0x18a3, + 0x18ad, 0x18b9, 0x18b9, 0x18b9, 0x18b9, 0x18cb, 0x18d1, 0x18df, + 0x18ef, 0x191a, 0x1928, 0x1932, 0x1940, 0x1940, 0x194e, 0x1958, + 0x1970, 0x197e, 0x197e, 0x1996, 0x1996, 0x199e, 0x199e, 0x19b0, + 0x19cb, 0x19df, 0x19df, 0x19ef, 0x19fb, 0x19fb, 0x1a07, 0x1a07, + // Entry 200 - 23F + 0x1a07, 0x1a1a, 0x1a2b, 0x1a3e, 0x1a5f, 0x1a6d, 0x1a7f, 0x1a96, + 0x1aa6, 0x1aae, 0x1aae, 0x1aba, 0x1ac2, 0x1ad2, 0x1ae2, 0x1af4, + 0x1b04, 0x1b04, 0x1b04, 0x1b0e, 0x1b16, 0x1b22, 0x1b2c, 0x1b36, + 0x1b3c, 0x1b4a, 0x1b4a, 0x1b5e, 0x1b6c, 0x1b6c, 0x1b7a, 0x1b8d, + 0x1b9e, 0x1b9e, 0x1baa, 0x1baa, 0x1bb8, 0x1bb8, 0x1bc6, 0x1bd2, + 0x1be0, 0x1bf0, 0x1c21, 0x1c33, 0x1c45, 0x1c53, 0x1c59, 0x1c5f, + 0x1c5f, 0x1c5f, 0x1c5f, 0x1c5f, 0x1c6b, 0x1c6b, 0x1c75, 0x1c87, + 0x1c95, 0x1ca5, 0x1cad, 0x1cbd, 0x1cbd, 0x1ccd, 0x1ccd, 0x1cd5, + // Entry 240 - 27F + 0x1cdb, 0x1ce7, 0x1cf5, 0x1cff, 0x1cff, 0x1d11, 0x1d23, 0x1d37, + 0x1d37, 0x1d43, 0x1d7d, 0x1d85, 0x1db7, 0x1dbf, 0x1df5, 0x1df5, + 0x1df5, 0x1e25, 0x1e25, 0x1e25, 0x1e57, 0x1e9a, 0x1e9a, 0x1e9a, + 0x1e9a, 0x1e9a, 0x1e9a, 0x1e9a, 0x1eb6, 0x1ec8, 0x1ec8, 0x1ef1, + 0x1f03, 0x1f1f, 0x1f31, 0x1f5e, 0x1f87, +} // Size: 1250 bytes + +const srLatnLangStr string = "" + // Size: 4236 bytes + "afarskiabhaskiavestanskiafrikansakanskiamharskiaragonskiarapskiasamskiav" + + "arskiajmaraazerbejdžanskibaškirskibeloruskibugarskibislamabambarabengals" + + "kitibetanskibretonskibosanskikatalonskičečenskičamorokorzikanskikričeški" + + "crkvenoslovenskičuvaškivelškidanskinemačkimaldivskidžongaevegrčkienglesk" + + "iesperantošpanskiestonskibaskijskipersijskifulafinskifidžijskifarskifran" + + "cuskizapadni frizijskiirskiškotski gelskigalicijskigvaranigudžaratimanks" + + "hausahebrejskihindihiri motuhrvatskihaićanskimađarskijermenskihererointe" + + "rlingvaindonežanskiinterlingveigbosečuanski jiinupikidoislandskiitalijan" + + "skiinuitskijapanskijavanskigruzijskikongokikujukvanjamakazaškigrenlandsk" + + "ikmerskikanadakorejskikanurikašmirskikurdskikomikornvolskikirgiskilatins" + + "kiluksemburškigandalimburškilingalalaoskilitvanskiluba-katangaletonskima" + + "lgaškimaršalskimaorskimakedonskimalajalammongolskimaratimalajskimalteški" + + "burmanskinauruskiseverni ndebelenepalskindongaholandskinorveški ninorskn" + + "orveški bukmoljužni ndebelenavahonjandžaoksitanskiodžibveoromoodijaoseti" + + "nskipendžapskipalipoljskipaštunskiportugalskikečuaromanškirundirumunskir" + + "uskikinjaruandasanskritsardinskisindiseverni samisangosinhaleškislovački" + + "slovenačkisamoanskišonasomalskialbanskisrpskisvazisesotosundanskišvedski" + + "svahilitamilskitelugutadžičkitajskitigrinjaturkmenskicvanatonganskitursk" + + "icongatatarskitahićanskiujgurskiukrajinskiurduuzbečkivendavijetnamskivol" + + "apikvalonskivolofkosajidišjorubadžuanškikineskizuluaceškiakoliadangmeadi" + + "gejskiafrihiliagemainuakadijskialeutskijužnoaltajskistaroengleskiangikaa" + + "ramejskimapučearapahoaravačkiasuasturijskiavadibelučkibalijskibasabedžab" + + "embabenazapadni belučkibodžpuribikolbinisisikabrajbodoburjatskibugijskib" + + "linskikadokaripskiatsamsebuanskičigačipčačagatajčučkimaričinučkičoktavsk" + + "ičipevjanskičerokičejenskicentralni kurdskikoptskikrimskotatarskisejšels" + + "ki kreolski francuskikašupskidakotadarginskitaitadelaverskislejvidogrips" + + "kidinkazarmadogridonji lužičkosrpskidualasrednjeholandskidžola fonjiđula" + + "dazagaembuefičkistaroegipatskiekadžukelamitskisrednjeengleskievondofangf" + + "ilipinskifonsrednjefrancuskistarofrancuskisevernofrizijskiistočnofrizijs" + + "kifriulskigagagauzgajogbajageezgilbertskisrednji visokonemačkistaronemač" + + "kigondigorontalogotskigrebostarogrčkiŠvajcarski nemačkigusigvičinskihaid" + + "ahavajskihiligajnonskihetitskihmonškigornji lužičkosrpskihupaibanskiibib" + + "ioilokoinguškiložbanngombamačamejudeo-persijskijudeo-arapskikara-kalpašk" + + "ikabilekačinskidžukambakavikabardijskitjapmakondezelenortskikorokasikota" + + "neškikojra čiinikakokalendžinskikimbundukomi-permskikonkanikosrenskikpel" + + "ekaračajsko-balkarskikriokarelskikurukšambalabafijakelnskikumičkikutenaj" + + "ladinolangilandalambalezginskilakotamongoloziseverni luriluba-lulualuise" + + "njolundaluomizolujiamadurskimagahimaitilimakasarskimandingomasajskimokša" + + "mandarmendemerumorisjensrednjeirskimakuva-mitometamikmakminangkabaumandž" + + "urskimanipurskimohočkimosimundangViše jezikakriškimirandskimarvarierzjam" + + "azanderanskinapuljskinamaniskonemačkinevariniasniuejskikvasiongiembunnog" + + "ajskistaronordijskinkoseverni sotonuerklasični nevarskinjamvezinjankolen" + + "joronzimaosageosmanski turskipangasinanskipahlavipampangapapiamentopalau" + + "skinigerijski pidžinstaropersijskifeničanskiponpejskipruskistarooksitans" + + "kikičeradžastanskirapanuirarotonganskiromboromskicincarskiruasandavejaku" + + "tskisamarijanski aramejskisamburusasaksantalingambajsangusicilijanskiško" + + "tskijužnokurdskisenaselkupskikojraboro senistaroirskitašelhitšanskisidam" + + "ojužni samilule samiinari samiskoltski laponskisoninkesogdijskisranan to" + + "ngosererskisahosukumasususumerskikomorskisirijačkisirijskitimnetesoteren" + + "otetumtigretivtokelauklingonskitlingittamašeknjasa tongatok pisintarokoc" + + "imšiantumbukatuvalutasavaktuvinskicentralnoatlaski tamazigtudmurtskiugar" + + "itskiumbunduRutvaivodskivundžovalserskivolajtavarajskivašovarlpirikalmič" + + "kisogajaojapskijangbenjembakantonskizapotečkiblisimbolizenagastandardni " + + "marokanski tamazigtzunibez lingvističkog sadržajazazasavremeni standardn" + + "i arapskišvajcarski visoki nemačkiengleski (Velika Britanija)engleski (S" + + "jedinjene Američke Države)niskosaksonskiflamanskiportugalski (Portugal)m" + + "oldavskisrpskohrvatskikisvahilipojednostavljeni kineskitradicionalni kin" + + "eski" + +var srLatnLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0007, 0x000e, 0x0018, 0x0020, 0x0027, 0x002f, 0x0038, + 0x003f, 0x0046, 0x004d, 0x0053, 0x0062, 0x006c, 0x0075, 0x007d, + 0x0084, 0x008b, 0x0094, 0x009e, 0x00a7, 0x00af, 0x00b9, 0x00c3, + 0x00ca, 0x00d5, 0x00d8, 0x00df, 0x00ef, 0x00f8, 0x00ff, 0x0105, + 0x010d, 0x0116, 0x011d, 0x0120, 0x0126, 0x012e, 0x0137, 0x013f, + 0x0147, 0x0150, 0x0159, 0x015d, 0x0163, 0x016d, 0x0173, 0x017c, + 0x018d, 0x0192, 0x01a1, 0x01ab, 0x01b2, 0x01bc, 0x01c1, 0x01c6, + 0x01cf, 0x01d4, 0x01dd, 0x01e5, 0x01ef, 0x01f8, 0x0201, 0x0207, + // Entry 40 - 7F + 0x0212, 0x021f, 0x022a, 0x022e, 0x023b, 0x0241, 0x0244, 0x024d, + 0x0258, 0x0260, 0x0268, 0x0270, 0x0279, 0x027e, 0x0284, 0x028c, + 0x0294, 0x029f, 0x02a6, 0x02ac, 0x02b4, 0x02ba, 0x02c4, 0x02cb, + 0x02cf, 0x02d9, 0x02e1, 0x02e9, 0x02f6, 0x02fb, 0x0305, 0x030c, + 0x0312, 0x031b, 0x0327, 0x032f, 0x0338, 0x0342, 0x0349, 0x0353, + 0x035c, 0x0365, 0x036b, 0x0373, 0x037c, 0x0385, 0x038d, 0x039c, + 0x03a4, 0x03aa, 0x03b3, 0x03c4, 0x03d4, 0x03e2, 0x03e8, 0x03f0, + 0x03fa, 0x0402, 0x0407, 0x040c, 0x0415, 0x0420, 0x0424, 0x042b, + // Entry 80 - BF + 0x0435, 0x0440, 0x0446, 0x044d, 0x0454, 0x045c, 0x0461, 0x046c, + 0x0474, 0x047d, 0x0482, 0x048e, 0x0493, 0x049e, 0x04a7, 0x04b2, + 0x04bb, 0x04c0, 0x04c8, 0x04d0, 0x04d6, 0x04db, 0x04e1, 0x04ea, + 0x04f2, 0x04f9, 0x0501, 0x0507, 0x0511, 0x0517, 0x051f, 0x0529, + 0x052e, 0x0537, 0x053d, 0x0542, 0x054a, 0x0555, 0x055d, 0x0567, + 0x056b, 0x0573, 0x0578, 0x0583, 0x058a, 0x0592, 0x0597, 0x059b, + 0x05a1, 0x05a7, 0x05b1, 0x05b8, 0x05bc, 0x05c3, 0x05c8, 0x05cf, + 0x05d8, 0x05d8, 0x05e0, 0x05e4, 0x05e8, 0x05f1, 0x05f1, 0x05f9, + // Entry C0 - FF + 0x05f9, 0x0607, 0x0614, 0x061a, 0x0623, 0x062a, 0x062a, 0x0631, + 0x0631, 0x0631, 0x063a, 0x063a, 0x063a, 0x063d, 0x063d, 0x0647, + 0x0647, 0x064c, 0x0654, 0x065c, 0x065c, 0x0660, 0x0660, 0x0660, + 0x0660, 0x0666, 0x066b, 0x066b, 0x066f, 0x066f, 0x066f, 0x067f, + 0x0688, 0x068d, 0x0691, 0x0691, 0x0691, 0x0697, 0x0697, 0x0697, + 0x069b, 0x069b, 0x069f, 0x069f, 0x06a8, 0x06b0, 0x06b0, 0x06b7, + 0x06b7, 0x06bb, 0x06c3, 0x06c3, 0x06c8, 0x06d1, 0x06d6, 0x06dd, + 0x06e5, 0x06ec, 0x06f0, 0x06f9, 0x0703, 0x070f, 0x0716, 0x071f, + // Entry 100 - 13F + 0x0730, 0x0737, 0x0737, 0x0746, 0x0763, 0x076c, 0x0772, 0x077b, + 0x0780, 0x078a, 0x0790, 0x0799, 0x079e, 0x07a3, 0x07a8, 0x07bd, + 0x07bd, 0x07c2, 0x07d2, 0x07de, 0x07e3, 0x07e9, 0x07ed, 0x07f4, + 0x07f4, 0x0802, 0x080a, 0x0813, 0x0822, 0x0822, 0x0828, 0x0828, + 0x082c, 0x0836, 0x0836, 0x0839, 0x0839, 0x0849, 0x0857, 0x0857, + 0x0867, 0x0878, 0x0880, 0x0882, 0x0888, 0x0888, 0x088c, 0x0891, + 0x0891, 0x0895, 0x089f, 0x089f, 0x08b5, 0x08c2, 0x08c2, 0x08c7, + 0x08d0, 0x08d6, 0x08db, 0x08e6, 0x08fa, 0x08fa, 0x08fa, 0x08fe, + // Entry 140 - 17F + 0x0908, 0x090d, 0x090d, 0x0915, 0x0915, 0x0922, 0x092a, 0x0932, + 0x0948, 0x0948, 0x094c, 0x0953, 0x0959, 0x095e, 0x0966, 0x0966, + 0x0966, 0x096d, 0x0973, 0x097a, 0x0989, 0x0996, 0x0996, 0x09a4, + 0x09aa, 0x09b3, 0x09b7, 0x09bc, 0x09c0, 0x09cb, 0x09cb, 0x09cf, + 0x09d6, 0x09e1, 0x09e1, 0x09e5, 0x09e5, 0x09e9, 0x09f3, 0x09ff, + 0x09ff, 0x09ff, 0x0a03, 0x0a10, 0x0a18, 0x0a24, 0x0a2b, 0x0a34, + 0x0a39, 0x0a4e, 0x0a52, 0x0a52, 0x0a5a, 0x0a5f, 0x0a67, 0x0a6d, + 0x0a74, 0x0a7c, 0x0a83, 0x0a89, 0x0a8e, 0x0a93, 0x0a98, 0x0aa1, + // Entry 180 - 1BF + 0x0aa1, 0x0aa1, 0x0aa1, 0x0aa7, 0x0aa7, 0x0aac, 0x0ab0, 0x0abc, + 0x0abc, 0x0ac6, 0x0ace, 0x0ad3, 0x0ad6, 0x0ada, 0x0adf, 0x0adf, + 0x0adf, 0x0ae7, 0x0ae7, 0x0aed, 0x0af4, 0x0afe, 0x0b06, 0x0b0e, + 0x0b0e, 0x0b14, 0x0b1a, 0x0b1f, 0x0b23, 0x0b2b, 0x0b37, 0x0b42, + 0x0b46, 0x0b4c, 0x0b57, 0x0b62, 0x0b6c, 0x0b74, 0x0b78, 0x0b78, + 0x0b7f, 0x0b8b, 0x0b92, 0x0b9b, 0x0ba2, 0x0ba2, 0x0ba2, 0x0ba7, + 0x0bb4, 0x0bb4, 0x0bbd, 0x0bc1, 0x0bce, 0x0bd4, 0x0bd8, 0x0be0, + 0x0be0, 0x0be6, 0x0bee, 0x0bf6, 0x0c04, 0x0c04, 0x0c07, 0x0c13, + // Entry 1C0 - 1FF + 0x0c17, 0x0c29, 0x0c31, 0x0c39, 0x0c3e, 0x0c43, 0x0c48, 0x0c57, + 0x0c64, 0x0c6b, 0x0c73, 0x0c7d, 0x0c85, 0x0c85, 0x0c97, 0x0c97, + 0x0c97, 0x0ca5, 0x0ca5, 0x0cb0, 0x0cb0, 0x0cb0, 0x0cb9, 0x0cbf, + 0x0cce, 0x0cd3, 0x0cd3, 0x0ce0, 0x0ce7, 0x0cf4, 0x0cf4, 0x0cf4, + 0x0cf9, 0x0cff, 0x0cff, 0x0cff, 0x0cff, 0x0d08, 0x0d0b, 0x0d12, + 0x0d1a, 0x0d30, 0x0d37, 0x0d3c, 0x0d43, 0x0d43, 0x0d4a, 0x0d4f, + 0x0d5b, 0x0d63, 0x0d63, 0x0d70, 0x0d70, 0x0d74, 0x0d74, 0x0d7d, + 0x0d8b, 0x0d95, 0x0d95, 0x0d9e, 0x0da5, 0x0da5, 0x0dab, 0x0dab, + // Entry 200 - 23F + 0x0dab, 0x0db6, 0x0dbf, 0x0dc9, 0x0dda, 0x0de1, 0x0dea, 0x0df6, + 0x0dfe, 0x0e02, 0x0e02, 0x0e08, 0x0e0c, 0x0e14, 0x0e1c, 0x0e26, + 0x0e2e, 0x0e2e, 0x0e2e, 0x0e33, 0x0e37, 0x0e3d, 0x0e42, 0x0e47, + 0x0e4a, 0x0e51, 0x0e51, 0x0e5b, 0x0e62, 0x0e62, 0x0e6a, 0x0e75, + 0x0e7e, 0x0e7e, 0x0e84, 0x0e84, 0x0e8c, 0x0e8c, 0x0e93, 0x0e99, + 0x0ea0, 0x0ea8, 0x0ec1, 0x0eca, 0x0ed3, 0x0eda, 0x0edd, 0x0ee0, + 0x0ee0, 0x0ee0, 0x0ee0, 0x0ee0, 0x0ee6, 0x0ee6, 0x0eed, 0x0ef6, + 0x0efd, 0x0f05, 0x0f0a, 0x0f12, 0x0f12, 0x0f1b, 0x0f1b, 0x0f1f, + // Entry 240 - 27F + 0x0f22, 0x0f28, 0x0f2f, 0x0f34, 0x0f34, 0x0f3d, 0x0f47, 0x0f51, + 0x0f51, 0x0f57, 0x0f75, 0x0f79, 0x0f95, 0x0f99, 0x0fb5, 0x0fb5, + 0x0fb5, 0x0fd0, 0x0fd0, 0x0fd0, 0x0feb, 0x1012, 0x1012, 0x1012, + 0x1012, 0x1012, 0x1012, 0x1012, 0x1020, 0x1029, 0x1029, 0x103f, + 0x1048, 0x1056, 0x105f, 0x1077, 0x108c, +} // Size: 1250 bytes + +const svLangStr string = "" + // Size: 5455 bytes + "afarabchaziskaavestiskaafrikaansakanamhariskaaragonesiskaarabiskaassames" + + "iskaavariskaaymaraazerbajdzjanskabasjkiriskavitryskabulgariskabislamabam" + + "barabengalitibetanskabretonskabosniskakatalanskatjetjenskachamorrokorsik" + + "anskacreetjeckiskakyrkslaviskatjuvasjiskawalesiskadanskatyskadivehidzong" + + "khaewegrekiskaengelskaesperantospanskaestniskabaskiskapersiskafulanifins" + + "kafijianskafäröiskafranskavästfrisiskairiskaskotsk gäliskagaliciskaguara" + + "nígujaratimanxhausahebreiskahindihirimotukroatiskahaitiskaungerskaarmeni" + + "skahererointerlinguaindonesiskainterlingueigboszezuan iinupiakidoisländs" + + "kaitalienskainuktitutjapanskajavanesiskageorgiskakikongokikuyukuanyamaka" + + "zakiskagrönländskakambodjanskakannadakoreanskakanurikashmiriskakurdiskak" + + "omekorniskakirgisiskalatinluxemburgiskalugandalimburgiskalingalalaotiska" + + "litauiskaluba-katangalettiskamalagassiskamarshalliskamaorimakedonskamala" + + "yalammongoliskamarathimalajiskamaltesiskaburmesiskanaurunordndebelenepal" + + "esiskandonganederländskanynorskabokmålsydndebelenavahonyanjaoccitanskaod" + + "jibwaoromooriyaossetiskapunjabipalipolskaafghanskaportugisiskaquechuarät" + + "oromanskarundirumänskaryskakinjarwandasanskritsardinskasindhinordsamiska" + + "sangosingalesiskaslovakiskaslovenskasamoanskashonasomaliskaalbanskaserbi" + + "skaswatisydsothosundanesiskasvenskaswahilitamiltelugutadzjikiskathailänd" + + "skatigrinjaturkmeniskatswanatonganskaturkiskatsongatatariskatahitiskauig" + + "uriskaukrainskaurduuzbekiskavendavietnamesiskavolapükvallonskawolofxhosa" + + "jiddischyorubazhuangkinesiskazuluacehnesiskaacholiadangmeadygeiskatunisi" + + "sk arabiskaafrihiliaghemainuakkadiskaAlabama-muskogeealeutiskagegiskasyd" + + "altaiskafornengelskaangikaarameiskamapudungunaraoniskaarapahoalgerisk ar" + + "abiskaarawakiskamarockansk arabiskaegyptisk arabiskaasuamerikanskt tecke" + + "nspråkasturiskakotavaawadhibaluchiskabalinesiskabayerskabasabamunskabata" + + "k-tobaghomalabejabembabetawiskabenabafutbagadavästbaluchiskabhojpuribiko" + + "lbinibanjariskabamekonsiksikabishnupriyabakhtiaribrajbrahuiskabodobakoss" + + "iburjätiskabuginesiskabouloublinbagangtecaddokaribiskacayugaatsamcebuano" + + "chigachibchachagataichuukesiskamariskachinookchoctawchipewyancherokesisk" + + "acheyennesoranisk kurdiskakoptiskakapisnonkrimtatariskaseychellisk kreol" + + "kasjubiskadakotadarginskataitadelawareslavejdogribdinkazarmadogrilågsorb" + + "iskacentraldusundualamedelnederländskajola-fonyidyuladazagaembuefikemili" + + "skafornegyptiskaekajukelamitiskamedelengelskacentralalaskisk jupiskaewon" + + "doextremaduriskafangfilippinskameänkielifonspråketcajun-franskamedelfran" + + "skafornfranskafrankoprovensalskanordfrisiskaöstfrisiskafriulianskagãgaga" + + "uziskagangayogbayazoroastrisk darietiopiskagilbertiskagilakimedelhögtysk" + + "afornhögtyskaGoa-konkanigondigorontalogotiskagreboforngrekiskaschweizert" + + "yskawayuufarefaregusiigwichinhaidahakkahawaiiskaFiji-hindihiligaynonhett" + + "itiskahmongspråkhögsorbiskaxianghupaibanskaibibioilokoingusjiskaingriska" + + "jamaikansk engelsk kreollojbanngombakimashamijudisk persiskajudisk arabi" + + "skajylländskakarakalpakiskakabyliskakachinjjukambakawikabardinskakanembu" + + "tyapmakondekapverdiskakenjangkorokaingangkhasikhotanesiskaTimbuktu-songh" + + "oykhowarkirmanjkimkakokalenjinkimbundukomi-permjakiskakonkanikosreanskak" + + "pellekarachay-balkarkriokinaray-akarelskakurukhkisambaabafiakölniskakumy" + + "kiskakutenajladinolangilahndalambalezghienlingua franca novaliguriskaliv" + + "oniskalakotalombardiskamongolozinordlurilettgalliskaluba-lulualuiseñolun" + + "daluolushailuhyalitterär kineiskalaziskamaduresiskamafamagahimaithilimak" + + "asarmandemassajiskamabamoksjamandarmendemerumauritansk kreolmedeliriskam" + + "akhuwa-meettometa’mi’kmaqminangkabaumanchuriskamanipurimohawkmossivästma" + + "riskamundangflera språkmuskogeemirandesiskamarwarimentawaimyeneerjyamaza" + + "nderanimin nannapolitanskanamalågtyskanewariskaniasniueanskaao-nagakwasi" + + "obamileké-ngiemboonnogaifornnordiskanovialn-kånordsothonuerklassisk newa" + + "riskanyamwezinyankolenyoronzimaosageottomanskapangasinanmedelpersiskapam" + + "pangapapiamentopalaupikardiskaNigeria-pidginPennsylvaniatyskamennonitisk" + + " lågtyskafornpersiskaPfalz-tyskafeniciskapiemontesiskapontiskapohnpeiska" + + "fornpreussiskafornprovensalskaquichéChimborazo-höglandskichwarajasthanir" + + "apanuirarotonganskaromagnolriffianskaromboromanirotumänskarusynrovianska" + + "arumänskarwasandawejakutiskasamaritanskasamburusasaksantalisaurashtranga" + + "mbaysangusicilianskaskotskasassaresisk sardiskasydkurdiskasenecasenaseri" + + "selkupGao-songhayforniriskasamogitiskatachelhitshanTchad-arabiskasidamol" + + "ågsilesiskaselayarsydsamiskalulesamiskaenaresamiskaskoltsamiskasoninkes" + + "ogdiskasranan tongoserersahosaterfrisiskasukumasususumeriskashimaoréklas" + + "sisk syriskasyriskasilesiskatulutemnetesoterenotetumtigrétivitokelauiska" + + "tsakhurklingonskatlingittalyshtamasheknyasatonganskatok pisinturoyotarok" + + "otsakodiskatsimshianmuslimsk tatariskatumbukatuvaluanskatasawaqtuviniska" + + "centralmarockansk tamazightudmurtiskaugaritiskaumbundurotvajvenetianskav" + + "epsvästflamländskaMain-frankiskavotiskavõruvunjowalsertyskawalamowaraywa" + + "showarlpiriwukalmuckiskamingrelianskalusogakiyaojapetiskayangbenbamileké" + + "-jembanheengatukantonesiskazapotekblissymbolerzeeländskazenagamarockansk" + + " standard-tamazightzuniinget språkligt innehållzazaiskamodern standardar" + + "abiskaösterrikisk tyskaschweizisk högtyskaaustralisk engelskakanadensisk" + + " engelskabrittisk engelskaamerikansk engelskalatinamerikansk spanskaeuro" + + "peisk spanskamexikansk spanskakanadensisk franskaschweizisk franskalågsa" + + "xiskaflamländskabrasiliansk portugisiskaeuropeisk portugisiskamoldaviska" + + "serbokroatiskaKongo-swahiliförenklad kinesiskatraditionell kinesiska" + +var svLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002d, 0x0039, + 0x0041, 0x004c, 0x0054, 0x005a, 0x0069, 0x0074, 0x007c, 0x0086, + 0x008d, 0x0094, 0x009b, 0x00a5, 0x00ae, 0x00b6, 0x00c0, 0x00ca, + 0x00d2, 0x00dd, 0x00e1, 0x00ea, 0x00f6, 0x0101, 0x010a, 0x0110, + 0x0115, 0x011b, 0x0123, 0x0126, 0x012e, 0x0136, 0x013f, 0x0146, + 0x014e, 0x0156, 0x015e, 0x0164, 0x016a, 0x0173, 0x017d, 0x0184, + 0x0191, 0x0197, 0x01a6, 0x01af, 0x01b7, 0x01bf, 0x01c3, 0x01c8, + 0x01d1, 0x01d6, 0x01de, 0x01e7, 0x01ef, 0x01f7, 0x0200, 0x0206, + // Entry 40 - 7F + 0x0211, 0x021c, 0x0227, 0x022b, 0x0234, 0x023b, 0x023e, 0x0248, + 0x0252, 0x025b, 0x0263, 0x026e, 0x0277, 0x027e, 0x0284, 0x028c, + 0x0295, 0x02a2, 0x02ae, 0x02b5, 0x02be, 0x02c4, 0x02cf, 0x02d7, + 0x02db, 0x02e3, 0x02ed, 0x02f2, 0x02ff, 0x0306, 0x0311, 0x0318, + 0x0320, 0x0329, 0x0335, 0x033d, 0x0349, 0x0355, 0x035a, 0x0364, + 0x036d, 0x0377, 0x037e, 0x0387, 0x0391, 0x039b, 0x03a0, 0x03ab, + 0x03b6, 0x03bc, 0x03c9, 0x03d1, 0x03d8, 0x03e2, 0x03e8, 0x03ee, + 0x03f8, 0x03ff, 0x0404, 0x0409, 0x0412, 0x0419, 0x041d, 0x0423, + // Entry 80 - BF + 0x042c, 0x0438, 0x043f, 0x044c, 0x0451, 0x045a, 0x045f, 0x046a, + 0x0472, 0x047b, 0x0481, 0x048c, 0x0491, 0x049d, 0x04a7, 0x04b0, + 0x04b9, 0x04be, 0x04c7, 0x04cf, 0x04d7, 0x04dc, 0x04e4, 0x04f0, + 0x04f7, 0x04fe, 0x0503, 0x0509, 0x0514, 0x0520, 0x0528, 0x0533, + 0x0539, 0x0542, 0x054a, 0x0550, 0x0559, 0x0562, 0x056b, 0x0574, + 0x0578, 0x0581, 0x0586, 0x0593, 0x059b, 0x05a4, 0x05a9, 0x05ae, + 0x05b6, 0x05bc, 0x05c2, 0x05cb, 0x05cf, 0x05da, 0x05e0, 0x05e7, + 0x05f0, 0x0601, 0x0609, 0x060e, 0x0612, 0x061b, 0x062b, 0x0634, + // Entry C0 - FF + 0x063b, 0x0646, 0x0652, 0x0658, 0x0661, 0x066b, 0x0674, 0x067b, + 0x068c, 0x068c, 0x0696, 0x06a9, 0x06ba, 0x06bd, 0x06d5, 0x06de, + 0x06e4, 0x06ea, 0x06f4, 0x06ff, 0x0707, 0x070b, 0x0713, 0x071d, + 0x0724, 0x0728, 0x072d, 0x0736, 0x073a, 0x073f, 0x0745, 0x0754, + 0x075c, 0x0761, 0x0765, 0x076f, 0x0776, 0x077d, 0x0788, 0x0791, + 0x0795, 0x079e, 0x07a2, 0x07a9, 0x07b4, 0x07bf, 0x07c5, 0x07c9, + 0x07d1, 0x07d6, 0x07df, 0x07e5, 0x07ea, 0x07f1, 0x07f6, 0x07fd, + 0x0805, 0x0810, 0x0817, 0x081e, 0x0825, 0x082e, 0x083a, 0x0842, + // Entry 100 - 13F + 0x0853, 0x085b, 0x0863, 0x0870, 0x0881, 0x088b, 0x0891, 0x089a, + 0x089f, 0x08a7, 0x08ad, 0x08b3, 0x08b8, 0x08bd, 0x08c2, 0x08ce, + 0x08da, 0x08df, 0x08f1, 0x08fb, 0x0900, 0x0906, 0x090a, 0x090e, + 0x0916, 0x0923, 0x0929, 0x0933, 0x0940, 0x0957, 0x095d, 0x096b, + 0x096f, 0x097a, 0x0984, 0x098f, 0x099c, 0x09a8, 0x09b3, 0x09c5, + 0x09d1, 0x09dd, 0x09e8, 0x09eb, 0x09f5, 0x09f8, 0x09fc, 0x0a01, + 0x0a11, 0x0a1a, 0x0a25, 0x0a2b, 0x0a39, 0x0a46, 0x0a51, 0x0a56, + 0x0a5f, 0x0a66, 0x0a6b, 0x0a77, 0x0a85, 0x0a8a, 0x0a92, 0x0a97, + // Entry 140 - 17F + 0x0a9e, 0x0aa3, 0x0aa8, 0x0ab1, 0x0abb, 0x0ac5, 0x0acf, 0x0ada, + 0x0ae6, 0x0aeb, 0x0aef, 0x0af6, 0x0afc, 0x0b01, 0x0b0b, 0x0b13, + 0x0b2b, 0x0b31, 0x0b37, 0x0b40, 0x0b4f, 0x0b5e, 0x0b69, 0x0b77, + 0x0b80, 0x0b86, 0x0b89, 0x0b8e, 0x0b92, 0x0b9d, 0x0ba4, 0x0ba8, + 0x0baf, 0x0bba, 0x0bc1, 0x0bc5, 0x0bcd, 0x0bd2, 0x0bde, 0x0bee, + 0x0bf4, 0x0bfd, 0x0c02, 0x0c0a, 0x0c12, 0x0c22, 0x0c29, 0x0c33, + 0x0c39, 0x0c48, 0x0c4c, 0x0c55, 0x0c5d, 0x0c63, 0x0c6b, 0x0c70, + 0x0c79, 0x0c82, 0x0c89, 0x0c8f, 0x0c94, 0x0c9a, 0x0c9f, 0x0ca7, + // Entry 180 - 1BF + 0x0cb9, 0x0cc2, 0x0ccb, 0x0cd1, 0x0cdc, 0x0ce1, 0x0ce5, 0x0ced, + 0x0cf9, 0x0d03, 0x0d0b, 0x0d10, 0x0d13, 0x0d19, 0x0d1e, 0x0d30, + 0x0d37, 0x0d42, 0x0d46, 0x0d4c, 0x0d54, 0x0d5b, 0x0d60, 0x0d6a, + 0x0d6e, 0x0d74, 0x0d7a, 0x0d7f, 0x0d83, 0x0d93, 0x0d9e, 0x0dac, + 0x0db3, 0x0dbc, 0x0dc7, 0x0dd2, 0x0dda, 0x0de0, 0x0de5, 0x0df1, + 0x0df8, 0x0e04, 0x0e0c, 0x0e18, 0x0e1f, 0x0e27, 0x0e2c, 0x0e31, + 0x0e3c, 0x0e43, 0x0e4f, 0x0e53, 0x0e5c, 0x0e65, 0x0e69, 0x0e72, + 0x0e79, 0x0e7f, 0x0e92, 0x0e97, 0x0ea3, 0x0ea9, 0x0eae, 0x0eb7, + // Entry 1C0 - 1FF + 0x0ebb, 0x0ecd, 0x0ed5, 0x0edd, 0x0ee2, 0x0ee7, 0x0eec, 0x0ef6, + 0x0f00, 0x0f0d, 0x0f15, 0x0f1f, 0x0f24, 0x0f2e, 0x0f3c, 0x0f4d, + 0x0f62, 0x0f6e, 0x0f79, 0x0f82, 0x0f8f, 0x0f97, 0x0fa1, 0x0faf, + 0x0fbf, 0x0fc6, 0x0fe0, 0x0fea, 0x0ff1, 0x0ffe, 0x1006, 0x1010, + 0x1015, 0x101b, 0x1026, 0x102b, 0x1034, 0x103e, 0x1041, 0x1048, + 0x1051, 0x105d, 0x1064, 0x1069, 0x1070, 0x107a, 0x1081, 0x1086, + 0x1091, 0x1098, 0x10ac, 0x10b7, 0x10bd, 0x10c1, 0x10c5, 0x10cb, + 0x10d6, 0x10e0, 0x10eb, 0x10f4, 0x10f8, 0x1106, 0x110c, 0x1119, + // Entry 200 - 23F + 0x1120, 0x112a, 0x1135, 0x1141, 0x114d, 0x1154, 0x115c, 0x1168, + 0x116d, 0x1171, 0x117e, 0x1184, 0x1188, 0x1191, 0x119a, 0x11aa, + 0x11b1, 0x11ba, 0x11be, 0x11c3, 0x11c7, 0x11cd, 0x11d2, 0x11d8, + 0x11dc, 0x11e7, 0x11ee, 0x11f8, 0x11ff, 0x1205, 0x120d, 0x121b, + 0x1224, 0x122a, 0x1230, 0x123a, 0x1243, 0x1255, 0x125c, 0x1267, + 0x126e, 0x1277, 0x1292, 0x129c, 0x12a6, 0x12ad, 0x12b0, 0x12b3, + 0x12be, 0x12c2, 0x12d3, 0x12e1, 0x12e8, 0x12ed, 0x12f2, 0x12fd, + 0x1303, 0x1308, 0x130d, 0x1315, 0x1317, 0x1322, 0x132f, 0x1335, + // Entry 240 - 27F + 0x133a, 0x1343, 0x134a, 0x1359, 0x1362, 0x136e, 0x1375, 0x1381, + 0x138c, 0x1392, 0x13af, 0x13b3, 0x13cd, 0x13d5, 0x13ec, 0x13ec, + 0x13fe, 0x1412, 0x1425, 0x1439, 0x144a, 0x145d, 0x1474, 0x1485, + 0x1496, 0x1496, 0x14a9, 0x14bb, 0x14c6, 0x14d2, 0x14ea, 0x1500, + 0x150a, 0x1518, 0x1525, 0x1539, 0x154f, +} // Size: 1250 bytes + +const swLangStr string = "" + // Size: 3904 bytes + "KiafarKiabkhaziKiafrikanaKiakaniKiamhariKiaragoniKiarabuKiassamKiavariKi" + + "aymaraKiazerbaijaniKibashkirKibelarusiKibulgariaKibislamaKibambaraKibeng" + + "aliKitibetiKibretoniKibosniaKikatalaniKichecheniaKichamorroKikosikaniKic" + + "hekiKislovakia cha ChurchKichuvashKiwelisiKidenmakiKijerumaniKidivehiKiz" + + "ongkhaKieweKigirikiKiingerezaKiesperantoKihispaniaKiestoniaKibasqueKiaje" + + "miKifulaKifiniKifijiKifaroeKifaransaKifrisia cha MagharibiKiayalandiKiga" + + "eli cha UskotiKigalisiKiguaraniKigujaratiKimanxKihausaKiebraniaKihindiKi" + + "kroeshiaKihaitiKihangariKiarmeniaKihereroKiintalinguaKiindonesiaKiigboSi" + + "chuan YiKiidoKiaisilandiKiitalianoKiinuktitutKijapaniKijavaKijojiaKikong" + + "oKikikuyuKikwanyamaKikazakhKikalaallisutKikambodiaKikannadaKikoreaKikanu" + + "riKikashmiriKikurdiKikomiKikorniKikyrgyzKilatiniKilasembagiKigandaLimbur" + + "gishKilingalaKilaosiKilithuaniaKiluba-KatangaKilatviaKimalagasiKimaoriKi" + + "macedoniaKimalayalamKimongoliaKimarathiKimaleiKimaltaKiburmaKinauruKinde" + + "bele cha KaskaziniKinepaliKindongaKiholanziKinorwe cha NynorskKinorwe ch" + + "a BokmålKindebeleKinavajoKinyanjaKiokitaniKioromoKioriyaKiosetiaKipunjab" + + "iKipolandiKipashtoKirenoKiquechuaKiromanshiKirundiKiromaniaKirusiKinyarw" + + "andaKisanskritiKisardiniaKisindhiKisami cha KaskaziniKisangoKisinhalaKis" + + "lovakiaKisloveniaKisamoaKishonaKisomaliKialbaniaKiserbiaKiswatiKisothoKi" + + "sundaKiswidiKiswahiliKitamilKiteluguKitajikiKitailandiKitigrinyaKituruki" + + "meniKitswanaKitongaKiturukiKitsongaKitatariKitahitiKiuyghurKiukraineKiur" + + "duKiuzbekiKivendaKivietinamuKivolapükWalloonLugha ya WolofKixhosaKiyiddi" + + "KiyorubaKichinaKizuluKiacheniKiakoliKiadangmeKiadygheKiaghemKiainuKialeu" + + "tKialtaiKiingereza cha KaleKiangikaKiaramuKimapucheKiarapahoKiarabu cha " + + "AlgeriaKiarabu cha MisriKiasuKiasturiaKiawadhiKibaliKibasaaKibamunKighom" + + "alaKibejaKibembaKibenaKibafutKibalochi cha MagharibiKibhojpuriKibiniKiko" + + "mKisiksikaKibodoLugha ya BugineseKibuluKiblinKimedumbaKichebuanoKichigaK" + + "ichukisiKimariKichoktaoKicherokeeKicheyeniKikurdi cha SoraniKikhuftiKrio" + + "li ya ShelisheliKidakotaKidaragwaKitaitaKidogribKizarmaKidolnoserbskiKid" + + "ualaKijola-FonyiKijulaKidazagaKiembuKiefikiKimisriKiekajukKiewondoKifili" + + "pinoKifonKifaransa cha KaleKifrisia cha KaskaziniKifrisia cha MasharikiK" + + "ifriulianKigaKigagauzKigbayaKige’ezKikiribatiKigorontaloKiyunaniKijeruma" + + "ni cha UswisiKikisiiGwichʼinKihawaiKihiligaynonKihitiKihmongKisobia cha " + + "Ukanda wa JuuHupaKiibanKiibibioKiilocanoLojbanKingombaKimachameKikabylia" + + "KachinKijjuKikambaKikanembuKityapKimakondeKikabuverdianuKikoroKikhasiKoy" + + "ra ChiiniLugha ya KakoKikalenjinKimbunduKikomi-PermyakKikonkaniKikpelleK" + + "ikarachay-BalkarKarjalaKurukhKisambaaKibafiaKicologneKumykKiladinoKirang" + + "iLambaKilakotaKimongoKiloziKiluri cha KaskaziniKiluba-LuluaKilundaKijalu" + + "oKimizoKiluhyaKimaduraKimafaKimagahiKimaithiliKimakasarKimaasaiKimabaLug" + + "ha ya MokshaKimendeKimeruKimoriseniKimakhuwa-MeettoKimetaMi’kmaqKiminang" + + "kabauKimanipuriLugha ya MohawkKimooreKimundangLugha NyingiKikrikiKierzya" + + "KimazanderaniKinapoliKinamaKisaksoniKinewariKiniueaKikwasioLugha ya Ngie" + + "mboonKinogaiN’KoKisotho cha KaskaziniKinuerKinewari cha kaleKinyamweziKi" + + "nyankoleKinyoroKinzemaKipangasinanKipampangaKipapiamentoKipalauKiajemi c" + + "ha KaleKiprussiaKʼicheʼKirapanuiKirarotongaKiromboKiaromaniaKirwaKisanda" + + "weKisakhaKiaramu cha WasamariaKisamburuKisantaliKingambayKisanguKisicili" + + "aKiskotiKikurdi cha KusiniKisenaKoyraboro SenniKitachelhitKishanKisami c" + + "ha KusiniKisami cha LuleKisami cha InariKisami cha SkoltKisoninkeLugha y" + + "a Sranan TongoKisahoKisukumaKisusuShikomorLugha ya SyriacKitemneKitesoKi" + + "tetumKitigreKiklingoniKitokpisinKitarokoKitumbukaKituvaluKitasawaqKituva" + + "Central Atlas TamazightUdmurtUmbunduRootKivaiKivunjoWalserKiwolayttaKiwa" + + "rayKiwarlpiriKikalmykKisogaKiyaoKiyangbenKiyembaKikantoniTamaziti Sanifu" + + " ya KimorokoKizuniHakuna maudhui ya lughaKizazaKiarabu Sanifu cha Kisasa" + + "Kihispania (Uhispania)Kihispania (Mexico)Kifaransa (Canada)KiflemiKireno" + + " (Brazil)Kiserbia-kroeshiaKingwanaKichina (Kilichorahisishwa)Kichina cha" + + " Jadi" + +var swLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0006, 0x000f, 0x000f, 0x0019, 0x0020, 0x0028, 0x0031, + 0x0038, 0x003f, 0x0046, 0x004e, 0x005b, 0x0064, 0x006e, 0x0078, + 0x0081, 0x008a, 0x0093, 0x009b, 0x00a4, 0x00ac, 0x00b6, 0x00c1, + 0x00cb, 0x00d5, 0x00d5, 0x00dc, 0x00f1, 0x00fa, 0x0102, 0x010b, + 0x0115, 0x011d, 0x0126, 0x012b, 0x0133, 0x013d, 0x0148, 0x0152, + 0x015b, 0x0163, 0x016a, 0x0170, 0x0176, 0x017c, 0x0183, 0x018c, + 0x01a2, 0x01ac, 0x01be, 0x01c6, 0x01cf, 0x01d9, 0x01df, 0x01e6, + 0x01ef, 0x01f6, 0x01f6, 0x0200, 0x0207, 0x0210, 0x0219, 0x0221, + // Entry 40 - 7F + 0x022d, 0x0238, 0x0238, 0x023e, 0x0248, 0x0248, 0x024d, 0x0258, + 0x0262, 0x026d, 0x0275, 0x027b, 0x0282, 0x0289, 0x0291, 0x029b, + 0x02a3, 0x02b0, 0x02ba, 0x02c3, 0x02ca, 0x02d2, 0x02dc, 0x02e3, + 0x02e9, 0x02f0, 0x02f8, 0x0300, 0x030b, 0x0312, 0x031c, 0x0325, + 0x032c, 0x0337, 0x0345, 0x034d, 0x0357, 0x0357, 0x035e, 0x0369, + 0x0374, 0x037e, 0x0387, 0x038e, 0x0395, 0x039c, 0x03a3, 0x03ba, + 0x03c2, 0x03ca, 0x03d3, 0x03e6, 0x03f9, 0x0402, 0x040a, 0x0412, + 0x041b, 0x041b, 0x0422, 0x0429, 0x0431, 0x043a, 0x043a, 0x0443, + // Entry 80 - BF + 0x044b, 0x0451, 0x045a, 0x0464, 0x046b, 0x0474, 0x047a, 0x0485, + 0x0490, 0x049a, 0x04a2, 0x04b6, 0x04bd, 0x04c6, 0x04d0, 0x04da, + 0x04e1, 0x04e8, 0x04f0, 0x04f9, 0x0501, 0x0508, 0x050f, 0x0516, + 0x051d, 0x0526, 0x052d, 0x0535, 0x053d, 0x0547, 0x0551, 0x055d, + 0x0565, 0x056c, 0x0574, 0x057c, 0x0584, 0x058c, 0x0594, 0x059d, + 0x05a3, 0x05ab, 0x05b2, 0x05bd, 0x05c7, 0x05ce, 0x05dc, 0x05e3, + 0x05ea, 0x05f2, 0x05f2, 0x05f9, 0x05ff, 0x0607, 0x060e, 0x0617, + 0x061f, 0x061f, 0x061f, 0x0626, 0x062c, 0x062c, 0x062c, 0x0633, + // Entry C0 - FF + 0x0633, 0x063a, 0x064d, 0x0655, 0x065c, 0x0665, 0x0665, 0x066e, + 0x0681, 0x0681, 0x0681, 0x0681, 0x0692, 0x0697, 0x0697, 0x06a0, + 0x06a0, 0x06a8, 0x06a8, 0x06ae, 0x06ae, 0x06b5, 0x06bc, 0x06bc, + 0x06c5, 0x06cb, 0x06d2, 0x06d2, 0x06d8, 0x06df, 0x06df, 0x06f6, + 0x0700, 0x0700, 0x0706, 0x0706, 0x070b, 0x0714, 0x0714, 0x0714, + 0x0714, 0x0714, 0x071a, 0x071a, 0x071a, 0x072b, 0x0731, 0x0737, + 0x0740, 0x0740, 0x0740, 0x0740, 0x0740, 0x074a, 0x0751, 0x0751, + 0x0751, 0x075a, 0x0760, 0x0760, 0x0769, 0x0769, 0x0773, 0x077c, + // Entry 100 - 13F + 0x078e, 0x0796, 0x0796, 0x0796, 0x07aa, 0x07aa, 0x07b2, 0x07bb, + 0x07c2, 0x07c2, 0x07c2, 0x07ca, 0x07ca, 0x07d1, 0x07d1, 0x07df, + 0x07df, 0x07e6, 0x07e6, 0x07f2, 0x07f8, 0x0800, 0x0806, 0x080d, + 0x080d, 0x0814, 0x081c, 0x081c, 0x081c, 0x081c, 0x0824, 0x0824, + 0x0824, 0x082e, 0x082e, 0x0833, 0x0833, 0x0833, 0x0845, 0x0845, + 0x085b, 0x0871, 0x087b, 0x087f, 0x0887, 0x0887, 0x0887, 0x088e, + 0x088e, 0x0897, 0x08a1, 0x08a1, 0x08a1, 0x08a1, 0x08a1, 0x08a1, + 0x08ac, 0x08ac, 0x08ac, 0x08b4, 0x08c9, 0x08c9, 0x08c9, 0x08d0, + // Entry 140 - 17F + 0x08d9, 0x08d9, 0x08d9, 0x08e0, 0x08e0, 0x08ec, 0x08f2, 0x08f9, + 0x0912, 0x0912, 0x0916, 0x091c, 0x0924, 0x092d, 0x092d, 0x092d, + 0x092d, 0x0933, 0x093b, 0x0944, 0x0944, 0x0944, 0x0944, 0x0944, + 0x094d, 0x0953, 0x0958, 0x095f, 0x095f, 0x095f, 0x0968, 0x096e, + 0x0977, 0x0985, 0x0985, 0x098b, 0x098b, 0x0992, 0x0992, 0x099e, + 0x099e, 0x099e, 0x09ab, 0x09b5, 0x09bd, 0x09cb, 0x09d4, 0x09d4, + 0x09dc, 0x09ed, 0x09ed, 0x09ed, 0x09f4, 0x09fa, 0x0a02, 0x0a09, + 0x0a12, 0x0a17, 0x0a17, 0x0a1f, 0x0a26, 0x0a26, 0x0a2b, 0x0a2b, + // Entry 180 - 1BF + 0x0a2b, 0x0a2b, 0x0a2b, 0x0a33, 0x0a33, 0x0a3a, 0x0a40, 0x0a54, + 0x0a54, 0x0a60, 0x0a60, 0x0a67, 0x0a6e, 0x0a74, 0x0a7b, 0x0a7b, + 0x0a7b, 0x0a83, 0x0a89, 0x0a91, 0x0a9b, 0x0aa4, 0x0aa4, 0x0aac, + 0x0ab2, 0x0ac1, 0x0ac1, 0x0ac8, 0x0ace, 0x0ad8, 0x0ad8, 0x0ae8, + 0x0aee, 0x0af7, 0x0b04, 0x0b04, 0x0b0e, 0x0b1d, 0x0b24, 0x0b24, + 0x0b2d, 0x0b39, 0x0b40, 0x0b40, 0x0b40, 0x0b40, 0x0b40, 0x0b47, + 0x0b54, 0x0b54, 0x0b5c, 0x0b62, 0x0b6b, 0x0b73, 0x0b73, 0x0b7a, + 0x0b7a, 0x0b82, 0x0b94, 0x0b9b, 0x0b9b, 0x0b9b, 0x0ba1, 0x0bb6, + // Entry 1C0 - 1FF + 0x0bbc, 0x0bcd, 0x0bd7, 0x0be1, 0x0be8, 0x0bef, 0x0bef, 0x0bef, + 0x0bfb, 0x0bfb, 0x0c05, 0x0c11, 0x0c18, 0x0c18, 0x0c18, 0x0c18, + 0x0c18, 0x0c28, 0x0c28, 0x0c28, 0x0c28, 0x0c28, 0x0c28, 0x0c31, + 0x0c31, 0x0c3a, 0x0c3a, 0x0c3a, 0x0c43, 0x0c4e, 0x0c4e, 0x0c4e, + 0x0c55, 0x0c55, 0x0c55, 0x0c55, 0x0c55, 0x0c5f, 0x0c64, 0x0c6d, + 0x0c74, 0x0c89, 0x0c92, 0x0c92, 0x0c9b, 0x0c9b, 0x0ca4, 0x0cab, + 0x0cb4, 0x0cbb, 0x0cbb, 0x0ccd, 0x0ccd, 0x0cd3, 0x0cd3, 0x0cd3, + 0x0ce2, 0x0ce2, 0x0ce2, 0x0ced, 0x0cf3, 0x0cf3, 0x0cf3, 0x0cf3, + // Entry 200 - 23F + 0x0cf3, 0x0d04, 0x0d13, 0x0d23, 0x0d33, 0x0d3c, 0x0d3c, 0x0d51, + 0x0d51, 0x0d57, 0x0d57, 0x0d5f, 0x0d65, 0x0d65, 0x0d6d, 0x0d6d, + 0x0d7c, 0x0d7c, 0x0d7c, 0x0d83, 0x0d89, 0x0d89, 0x0d90, 0x0d97, + 0x0d97, 0x0d97, 0x0d97, 0x0da1, 0x0da1, 0x0da1, 0x0da1, 0x0da1, + 0x0dab, 0x0dab, 0x0db3, 0x0db3, 0x0db3, 0x0db3, 0x0dbc, 0x0dc4, + 0x0dcd, 0x0dd3, 0x0dea, 0x0df0, 0x0df0, 0x0df7, 0x0dfb, 0x0e00, + 0x0e00, 0x0e00, 0x0e00, 0x0e00, 0x0e00, 0x0e00, 0x0e07, 0x0e0d, + 0x0e17, 0x0e1e, 0x0e1e, 0x0e28, 0x0e28, 0x0e30, 0x0e30, 0x0e36, + // Entry 240 - 27F + 0x0e3b, 0x0e3b, 0x0e44, 0x0e4b, 0x0e4b, 0x0e54, 0x0e54, 0x0e54, + 0x0e54, 0x0e54, 0x0e6f, 0x0e75, 0x0e8c, 0x0e92, 0x0eab, 0x0eab, + 0x0eab, 0x0eab, 0x0eab, 0x0eab, 0x0eab, 0x0eab, 0x0eab, 0x0ec1, + 0x0ed4, 0x0ed4, 0x0ee6, 0x0ee6, 0x0ee6, 0x0eed, 0x0efc, 0x0efc, + 0x0efc, 0x0f0d, 0x0f15, 0x0f30, 0x0f40, +} // Size: 1250 bytes + +const taLangStr string = "" + // Size: 12975 bytes + "அஃபார்அப்காஜியான்அவெஸ்தான்ஆஃப்ரிகான்ஸ்அகான்அம்ஹாரிக்ஆர்கோனீஸ்அரபிக்அஸ்ஸா" + + "மீஸ்அவேரிக்அய்மராஅஸர்பைஜானிபஷ்கிர்பெலாருஷியன்பல்கேரியன்பிஸ்லாமாபம்பாரா" + + "வங்காளம்திபெத்தியன்பிரெட்டன்போஸ்னியன்கேட்டலான்செச்சென்சாமோரோகார்சிகன்க" + + "்ரீசெக்சர்ச் ஸ்லாவிக்சுவாஷ்வேல்ஷ்டேனிஷ்ஜெர்மன்திவேஹிபூடானிஈவ்கிரேக்கம்" + + "ஆங்கிலம்எஸ்பரேன்டோஸ்பானிஷ்எஸ்டோனியன்பாஸ்க்பெர்ஷியன்ஃபுலாஃபின்னிஷ்ஃபிஜி" + + "யன்ஃபரோயிஸ்பிரெஞ்சுமேற்கு ஃப்ரிஷியன்ஐரிஷ்ஸ்காட்ஸ் கேலிக்காலிஸியன்க்வார" + + "னிகுஜராத்திமேங்க்ஸ்ஹௌஸாஹீப்ரூஇந்திஹிரி மோட்டுகுரோஷியன்ஹைத்தியன் க்ரியோ" + + "லிஹங்கேரியன்ஆர்மேனியன்ஹெரேரோஇன்டர்லிங்வாஇந்தோனேஷியன்இன்டர்லிங்இக்போசிச" + + "ுவான் ஈஇனுபியாக்இடோஐஸ்லேண்டிக்இத்தாலியன்இனுகிடூட்ஜப்பானியம்ஜாவனீஸ்ஜார்" + + "ஜியன்காங்கோகிகுயூகுவான்யாமாகசாக்கலாலிசூட்கெமெர்கன்னடம்கொரியன்கனுரிகாஷ்" + + "மிரிகுர்திஷ்கொமிகார்னிஷ்கிர்கிஸ்லத்தின்லக்ஸம்போர்கிஷ்கான்டாலிம்பர்கிஷ்" + + "லிங்காலாலாவோலிதுவேனியன்லுபா-கடாங்காலாட்வியன்மலகாஸிமார்ஷெலீஸ்மௌரிமாஸிடோ" + + "னியன்மலையாளம்மங்கோலியன்மராத்திமலாய்மால்டிஸ்பர்மீஸ்நவ்ரூவடக்கு தெபெலேநே" + + "பாளிதோங்காடச்சுநார்வேஜியன் நியூநார்ஸ்க்நார்வேஜியன் பொக்மால்தெற்கு தெபெ" + + "லேநவாஜோநயன்ஜாஒக்கிடன்ஒஜிப்வாஒரோமோஒடியாஒசெட்டிக்பஞ்சாபிபாலிபோலிஷ்பஷ்தோப" + + "ோர்ச்சுக்கீஸ்க்வெச்சுவாரோமான்ஷ்ருண்டிரோமேனியன்ரஷியன்கின்யாருவான்டாசமஸ்" + + "கிருதம்சார்தீனியன்சிந்திவடக்கு சமிசாங்கோசிங்களம்ஸ்லோவாக்ஸ்லோவேனியன்சமோ" + + "வான்ஷோனாசோமாலிஅல்பேனியன்செர்பியன்ஸ்வாடீதெற்கு ஸோதோசுண்டானீஸ்ஸ்வீடிஷ்ஸ்" + + "வாஹிலிதமிழ்தெலுங்குதஜிக்தாய்டிக்ரின்யாதுருக்மென்ஸ்வானாடோங்கான்துருக்கி" + + "ஷ்ஸோங்காடாடர்தஹிதியன்உய்குர்உக்ரைனியன்உருதுஉஸ்பெக்வென்டாவியட்நாமீஸ்ஒலா" + + "பூக்ஒவாலூன்ஓலோஃப்ஹோசாயெட்டிஷ்யோருபாஜுவாங்சீனம்ஜுலுஆச்சினீஸ்அகோலிஅதாங்ம" + + "ேஅதகேதுனிசிய அரபுஅஃப்ரிஹிலிஅகெம்ஐனுஅக்கேதியன்அலூட்தெற்கு அல்தைபழைய ஆங்" + + "கிலம்அங்கிகாஅராமைக்மபுச்சேஅரபஹோஅராவாக்அசுஅஸ்துரியன்அவதிபலூச்சிபலினீஸ்ப" + + "ாஸாபேஜாபெம்பாபெனாபடகாமேற்கு பலோச்சிபோஜ்பூரிபிகோல்பினிசிக்சிகாபிஷ்ணுப்ப" + + "ிரியாப்ராஜ்போடோபுரியாத்புகினீஸ்ப்லின்கேடோகரீப்ஆட்சம்செபுவானோசிகாசிப்சா" + + "ஷகதைசூகிசேமாரிசினூக் ஜார்கான்சோக்தௌசிபெவ்யான்செரோகீசெயேனிமத்திய குர்தி" + + "ஷ்காப்டிக்கிரிமியன் துர்க்கிசெசெல்வா க்ரெயோல் பிரெஞ்சுகஷுபியன்டகோடாதார" + + "்குவாடைடாடெலாவர்ஸ்லாவ்டோக்ரிப்டின்காஸார்மாடோக்ரிலோயர் சோர்பியன்டுவாலாம" + + "ிடில் டச்சுஜோலா-ஃபோன்யிட்யூலாடசாகாஎம்புஎஃபிக்பண்டைய எகிப்தியன்ஈகாஜுக்எ" + + "லமைட்மிடில் ஆங்கிலம்எவோன்டோஃபேங்க்ஃபிலிபினோஃபான்மிடில் பிரெஞ்சுபழைய பி" + + "ரெஞ்சுவடக்கு ஃப்ரிஸியான்கிழக்கு ஃப்ரிஸியான்ஃப்ரியூலியன்காகாகௌஸ்கன் சீன" + + "ம்கயோபயாகீஜ்கில்பெர்டீஸ்மிடில் ஹை ஜெர்மன்பழைய ஹை ஜெர்மன்கோன்டிகோரோன்டல" + + "ோகோதிக்க்ரேபோபண்டைய கிரேக்கம்ஸ்விஸ் ஜெர்மன்குஸிகுவிசின்ஹைடாஹக்கா சீனம்" + + "ஹவாயியன்ஃபிஜி இந்திஹிலிகாய்னான்ஹிட்டைட்மாங்க்அப்பர் சோர்பியான்சியாங்க்" + + " சீனம்ஹுபாஇபான்இபிபியோஇலோகோஇங்குஷ்லோஜ்பன்நகொம்பாமாசெம்ஜூதேயோ-பெர்ஷியன்ஜூ" + + "தேயோ-அராபிக்காரா-கல்பாக்கபாய்ல்காசின்ஜ்ஜூகம்பாகாவிகபார்டியன்தையாப்மகொண" + + "்டேகபுவெர்தியானுகோரோகாஸிகோதானீஸ்கொய்ரா சீனீககோகலின்ஜின்கிம்புன்துகொமி-" + + "பெர்ம்யாக்கொங்கணிகோஸ்ரைன்க்பெல்லேகராசே-பல்கார்கரேலியன்குருக்ஷம்பாலாபாஃ" + + "பியாகொலோக்னியன்கும்இக்குடேனைலடினோலங்கிலஹன்டாலம்பாலெஜ்ஜியன்லகோடாமோங்கோல" + + "ோசிவடக்கு லுரிலுபா-லுலுலாலுய்சேனோலூன்டாலுயோமிஸோலுயியாமதுரீஸ்மகாஹிமைதில" + + "ிமகாசார்மான்டிங்கோமாசாய்மோக்க்ஷாமான்டார்மென்டீமெருமொரிசியன்மிடில் ஐரிஷ" + + "்மகுவா-மீட்டோமேடாமிக்மாக்மின்னாங்கபௌமன்சூமணிப்புரிமொஹாக்மோஸ்ஸிமுன்டாங்" + + "பல மொழிகள்க்ரீக்மிரான்டீஸ்மார்வாரிஏர்ஜியாமசந்தேரனிமின் நான் சீனம்நியோப" + + "ோலிடன்நாமாலோ ஜெர்மன்நெவாரிநியாஸ்நியூவான்க்வாசியோநெகெய்ம்பூன்நோகைபழைய ந" + + "ோர்ஸ்என்‘கோவடக்கு சோதோநியூர்பாரம்பரிய நேவாரிநியாம்வேஜிநியான்கோலேநியோரோ" + + "நிஜ்மாஓசேஜ்ஓட்டோமான் துருக்கிஷ்பன்காசினன்பாஹ்லவிபம்பாங்காபபியாமென்டோபல" + + "ௌவன்நைஜீரியன் பிட்கின்பென்சில்வேனிய ஜெர்மன்பழைய பெர்ஷியன்ஃபொனிஷியன்ஃபோ" + + "ன்பெயென்பிரஷ்யன்பழைய ப்ரோவென்சால்கீசீராஜஸ்தானிரபனுய்ரரோடோங்கன்ரோம்போரோ" + + "மானிஅரோமானியன்ருவாசான்டாவேசகாசமாரிடன் அராமைக்சம்புருசாசாக்சான்டாலிசௌரா" + + "ஷ்டிரம்நெகாம்பேசங்குசிசிலியன்ஸ்காட்ஸ்தெற்கு குர்திஷ்செனாசெல்குப்கொய்ரா" + + "போரோ சென்னிபழைய ஐரிஷ்தசேஹித்ஷான்சிடாமோதெற்கு சமிலுலே சமிஇனாரி சமிஸ்கோல" + + "்ட் சமிசோனின்கேசோக்தியன்ஸ்ரானன் டோங்கோசெரெர்சஹோசுகுமாசுசுசுமேரியன்கொமோ" + + "ரியன்பாரம்பரிய சிரியாக்சிரியாக்டிம்னேடெசோடெரெனோடெடும்டைக்ரேடிவ்டோகேலௌக" + + "்ளிங்கோன்லிங்கிட்தமஷேக்நயாசா டோங்காடோக் பிஸின்தரோகோட்ஸிம்ஷியன்தும்புகா" + + "டுவாலுடசவாக்டுவினியன்மத்திய அட்லஸ் டமசைட்உட்முர்ட்உகாரிடிக்அம்பொண்டுரூ" + + "ட்வைவோட்க்வுன்ஜோவால்சேர்வோலாய்ட்டாவாரேவாஷோவல்பிரிவூ சீனம்கல்மிக்சோகாயா" + + "வ்யாபேசேயாங்பென்யெம்பாகாண்டோனீஸ்ஜாபோடெக்ப்லிஸ்ஸிம்பால்ஸ்ஜெனகாஸ்டாண்டர்" + + "ட் மொராக்கன் தமாசைட்ஜூனிமொழி உள்ளடக்கம் ஏதுமில்லைஜாஜாநவீன நிலையான அரபி" + + "க்ஆஸ்திரிய ஜெர்மன்ஸ்விஸ் ஹை ஜெர்மன்ஆஸ்திரேலிய ஆங்கிலம்கனடிய ஆங்கிலம்பி" + + "ரிட்டிஷ் ஆங்கிலம்அமெரிக்க ஆங்கிலம்லத்தின் அமெரிக்க ஸ்பானிஷ்ஐரோப்பிய ஸ்" + + "பானிஷ்மெக்ஸிகன் ஸ்பானிஷ்கனடிய பிரெஞ்சுஸ்விஸ் பிரஞ்சுலோ சாக்ஸன்ஃப்லெமிஷ" + + "்பிரேசிலிய போர்ச்சுகீஸ்ஐரோப்பிய போர்ச்சுகீஸ்மோல்டாவியன்செர்போ-குரோஷியன" + + "்காங்கோ ஸ்வாஹிலிஎளிதாக்கப்பட்ட சீனம்பாரம்பரிய சீனம்" + +var taLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0012, 0x0033, 0x004e, 0x0072, 0x0081, 0x009c, 0x00b7, + 0x00c9, 0x00e4, 0x00f9, 0x010b, 0x0129, 0x013e, 0x015f, 0x017d, + 0x0195, 0x01aa, 0x01c2, 0x01e3, 0x01fe, 0x0219, 0x0234, 0x024c, + 0x025e, 0x0279, 0x0285, 0x0291, 0x02b9, 0x02cb, 0x02dd, 0x02ef, + 0x0304, 0x0316, 0x0328, 0x0331, 0x034c, 0x0364, 0x0382, 0x039a, + 0x03b8, 0x03ca, 0x03e5, 0x03f4, 0x040f, 0x0427, 0x043f, 0x0457, + 0x0488, 0x0497, 0x04c2, 0x04dd, 0x04f2, 0x050d, 0x0525, 0x0531, + 0x0543, 0x0552, 0x0571, 0x058c, 0x05c0, 0x05de, 0x05fc, 0x060e, + // Entry 40 - 7F + 0x0632, 0x0656, 0x0674, 0x0683, 0x069f, 0x06ba, 0x06c3, 0x06e4, + 0x0702, 0x071d, 0x073b, 0x0750, 0x076b, 0x077d, 0x078f, 0x07ad, + 0x07bc, 0x07d7, 0x07e9, 0x07fe, 0x0813, 0x0822, 0x083a, 0x0852, + 0x085e, 0x0876, 0x088e, 0x08a3, 0x08cd, 0x08df, 0x0900, 0x0918, + 0x0924, 0x0945, 0x0967, 0x0982, 0x0994, 0x09b2, 0x09be, 0x09df, + 0x09f7, 0x0a15, 0x0a2a, 0x0a39, 0x0a51, 0x0a66, 0x0a75, 0x0a9a, + 0x0aac, 0x0abe, 0x0acd, 0x0b13, 0x0b4d, 0x0b72, 0x0b81, 0x0b93, + 0x0bab, 0x0bc0, 0x0bcf, 0x0bde, 0x0bf9, 0x0c0e, 0x0c1a, 0x0c2c, + // Entry 80 - BF + 0x0c3b, 0x0c65, 0x0c83, 0x0c9b, 0x0cad, 0x0cc8, 0x0cda, 0x0d04, + 0x0d25, 0x0d46, 0x0d58, 0x0d74, 0x0d86, 0x0d9e, 0x0db6, 0x0dd7, + 0x0dec, 0x0df8, 0x0e0a, 0x0e28, 0x0e43, 0x0e55, 0x0e74, 0x0e92, + 0x0eaa, 0x0ec2, 0x0ed1, 0x0ee9, 0x0ef8, 0x0f04, 0x0f22, 0x0f40, + 0x0f52, 0x0f6a, 0x0f88, 0x0f9a, 0x0fa9, 0x0fc1, 0x0fd6, 0x0ff4, + 0x1003, 0x1018, 0x102a, 0x104b, 0x1060, 0x1075, 0x1087, 0x1093, + 0x10ab, 0x10bd, 0x10cf, 0x10de, 0x10ea, 0x1105, 0x1114, 0x1129, + 0x1135, 0x1157, 0x1175, 0x1184, 0x118d, 0x11ab, 0x11ab, 0x11ba, + // Entry C0 - FF + 0x11ba, 0x11dc, 0x1201, 0x1216, 0x122b, 0x1240, 0x1240, 0x124f, + 0x124f, 0x124f, 0x1264, 0x1264, 0x1264, 0x126d, 0x126d, 0x128b, + 0x128b, 0x1297, 0x12ac, 0x12c1, 0x12c1, 0x12cd, 0x12cd, 0x12cd, + 0x12cd, 0x12d9, 0x12eb, 0x12eb, 0x12f7, 0x12f7, 0x1303, 0x132b, + 0x1343, 0x1355, 0x1361, 0x1361, 0x1361, 0x1379, 0x13a3, 0x13a3, + 0x13b5, 0x13b5, 0x13c1, 0x13c1, 0x13d9, 0x13f1, 0x13f1, 0x1403, + 0x1403, 0x140f, 0x141e, 0x141e, 0x1430, 0x1448, 0x1454, 0x1466, + 0x1472, 0x1484, 0x1490, 0x14bb, 0x14cd, 0x14eb, 0x14fd, 0x150f, + // Entry 100 - 13F + 0x153a, 0x1552, 0x1552, 0x1586, 0x15d0, 0x15e8, 0x15f7, 0x160f, + 0x161b, 0x1630, 0x1642, 0x165a, 0x166c, 0x167e, 0x1690, 0x16bb, + 0x16bb, 0x16cd, 0x16ef, 0x1711, 0x1723, 0x1732, 0x1741, 0x1753, + 0x1753, 0x1784, 0x1799, 0x17ab, 0x17d6, 0x17d6, 0x17eb, 0x17eb, + 0x1800, 0x181b, 0x181b, 0x182a, 0x182a, 0x1855, 0x187a, 0x187a, + 0x18ae, 0x18e5, 0x1909, 0x190f, 0x1921, 0x193a, 0x1943, 0x194c, + 0x194c, 0x1958, 0x197c, 0x197c, 0x19ab, 0x19d4, 0x19d4, 0x19e6, + 0x1a01, 0x1a13, 0x1a25, 0x1a53, 0x1a7b, 0x1a7b, 0x1a7b, 0x1a87, + // Entry 140 - 17F + 0x1a9f, 0x1aab, 0x1aca, 0x1ae2, 0x1b01, 0x1b25, 0x1b3d, 0x1b4f, + 0x1b80, 0x1ba8, 0x1bb4, 0x1bc3, 0x1bd8, 0x1be7, 0x1bfc, 0x1bfc, + 0x1bfc, 0x1c11, 0x1c26, 0x1c38, 0x1c66, 0x1c8e, 0x1c8e, 0x1cb0, + 0x1cc5, 0x1cd7, 0x1ce3, 0x1cf2, 0x1cfe, 0x1d1c, 0x1d1c, 0x1d2e, + 0x1d43, 0x1d6a, 0x1d6a, 0x1d76, 0x1d76, 0x1d82, 0x1d9a, 0x1db9, + 0x1db9, 0x1db9, 0x1dc2, 0x1ddd, 0x1dfb, 0x1e26, 0x1e3b, 0x1e53, + 0x1e6b, 0x1e90, 0x1e90, 0x1e90, 0x1ea8, 0x1eba, 0x1ecf, 0x1ee4, + 0x1f05, 0x1f1a, 0x1f2c, 0x1f3b, 0x1f4a, 0x1f5c, 0x1f6b, 0x1f86, + // Entry 180 - 1BF + 0x1f86, 0x1f86, 0x1f86, 0x1f95, 0x1f95, 0x1fa7, 0x1fb3, 0x1fd2, + 0x1fd2, 0x1ff1, 0x2009, 0x201b, 0x2027, 0x2033, 0x2045, 0x2045, + 0x2045, 0x205a, 0x205a, 0x2069, 0x207b, 0x2090, 0x20ae, 0x20c0, + 0x20c0, 0x20d8, 0x20f0, 0x2102, 0x210e, 0x2129, 0x214b, 0x216d, + 0x2179, 0x2191, 0x21b2, 0x21c1, 0x21dc, 0x21ee, 0x2200, 0x2200, + 0x2218, 0x2234, 0x2246, 0x2264, 0x227c, 0x227c, 0x227c, 0x2291, + 0x22ac, 0x22d5, 0x22f6, 0x2302, 0x231e, 0x2330, 0x2342, 0x235a, + 0x235a, 0x2372, 0x2396, 0x23a2, 0x23c1, 0x23c1, 0x23d3, 0x23f2, + // Entry 1C0 - 1FF + 0x2404, 0x2432, 0x2450, 0x246e, 0x2480, 0x2492, 0x24a1, 0x24db, + 0x24f9, 0x250e, 0x2529, 0x254a, 0x255c, 0x255c, 0x2590, 0x25cd, + 0x25cd, 0x25f5, 0x25f5, 0x2613, 0x2613, 0x2613, 0x2634, 0x264c, + 0x267d, 0x2689, 0x2689, 0x26a4, 0x26b6, 0x26d4, 0x26d4, 0x26d4, + 0x26e6, 0x26f8, 0x26f8, 0x26f8, 0x26f8, 0x2716, 0x2722, 0x273a, + 0x2743, 0x2771, 0x2786, 0x2798, 0x27b0, 0x27d1, 0x27e9, 0x27f8, + 0x2813, 0x282b, 0x282b, 0x2856, 0x2856, 0x2862, 0x2862, 0x287a, + 0x28ab, 0x28c7, 0x28c7, 0x28dc, 0x28e8, 0x28e8, 0x28fa, 0x28fa, + // Entry 200 - 23F + 0x28fa, 0x2916, 0x292c, 0x2945, 0x2967, 0x297f, 0x299a, 0x29c2, + 0x29d4, 0x29dd, 0x29dd, 0x29ef, 0x29fb, 0x2a16, 0x2a31, 0x2a65, + 0x2a7d, 0x2a7d, 0x2a7d, 0x2a8f, 0x2a9b, 0x2aad, 0x2abf, 0x2ad1, + 0x2add, 0x2aef, 0x2aef, 0x2b0d, 0x2b25, 0x2b25, 0x2b37, 0x2b59, + 0x2b78, 0x2b78, 0x2b87, 0x2b87, 0x2ba8, 0x2ba8, 0x2bc0, 0x2bd2, + 0x2be4, 0x2bff, 0x2c37, 0x2c52, 0x2c6d, 0x2c88, 0x2c94, 0x2c9a, + 0x2c9a, 0x2c9a, 0x2c9a, 0x2c9a, 0x2cac, 0x2cac, 0x2cbe, 0x2cd6, + 0x2cf4, 0x2d00, 0x2d0c, 0x2d21, 0x2d37, 0x2d4c, 0x2d4c, 0x2d58, + // Entry 240 - 27F + 0x2d64, 0x2d76, 0x2d8e, 0x2da0, 0x2da0, 0x2dbe, 0x2dd6, 0x2e06, + 0x2e06, 0x2e15, 0x2e68, 0x2e74, 0x2ebb, 0x2ec7, 0x2efc, 0x2efc, + 0x2f2a, 0x2f59, 0x2f90, 0x2fb8, 0x2fef, 0x3020, 0x3067, 0x3098, + 0x30cc, 0x30cc, 0x30f4, 0x311c, 0x3138, 0x3153, 0x3193, 0x31d0, + 0x31f1, 0x321f, 0x324a, 0x3284, 0x32af, +} // Size: 1250 bytes + +const teLangStr string = "" + // Size: 12415 bytes + "అఫార్అబ్ఖాజియన్అవేస్టాన్ఆఫ్రికాన్స్అకాన్అమ్హారిక్అరగోనిస్అరబిక్అస్సామీస్" + + "అవారిక్ఐమారాఅజర్బైజానిబష్కిర్బెలరుషియన్బల్గేరియన్బిస్లామాబంబారాబాంగ్లా" + + "టిబెటన్బ్రెటన్బోస్నియన్కెటలాన్చెచెన్చమర్రోకోర్సికన్క్రిచెక్చర్చ స్లావి" + + "క్చువాష్వెల్ష్డానిష్జర్మన్దివేహిజోంఖాఈవీగ్రీక్ఆంగ్లంఎస్పెరాంటోస్పానిష్" + + "ఈస్టోనియన్బాస్క్యూపర్షియన్ఫ్యులఫిన్నిష్ఫిజియన్ఫారోయీజ్ఫ్రెంచ్పశ్చిమ ఫ్" + + "రిసియన్ఐరిష్స్కాటిష్ గేలిక్గాలిషియన్గురానిగుజరాతిమంకస్హౌసాహీబ్రూహిందీహ" + + "ిరి మోటుక్రోయేషియన్హైటియన్ క్రియోల్హంగేరియన్ఆర్మేనియన్హిరేరోఇంటర్లింగ్" + + "వాఇండోనేషియన్ఇంటర్లింగ్ఇగ్బోశిషువన్ ఈఇనుపైయాక్ఈడౌఐస్లాండిక్ఇటాలియన్ఇంక" + + "్టిటుట్జపనీస్జావనీస్జార్జియన్కోంగోకికుయుక్వాన్యామకజఖ్కలాల్లిసూట్ఖ్మేర్" + + "కన్నడకొరియన్కానురికాశ్మీరికుర్దిష్కోమికోర్నిష్కిర్గిజ్లాటిన్లుక్సంబర్గ" + + "ిష్గాండాలిమ్బర్గిష్లింగాలలావోలిథుయేనియన్లూబ-కటాంగలాట్వియన్మాలాగసిమార్ష" + + "లీస్మయోరిమసడోనియన్మలయాళంమంగోలియన్మరాఠీమలేయ్మాల్టీస్బర్మీస్నౌరుఉత్తర దె" + + "బెలెనేపాలిదోంగాడచ్నార్వేజియాన్ న్యోర్స్క్నార్వేజియన్ బొక్మాల్దక్షిణ దె" + + "బెలెనవాజొన్యాన్జాఆక్సిటన్చేవాఒరోమోఒడియాఒసేటిక్పంజాబీపాలీపోలిష్పాష్టోపో" + + "ర్చుగీస్కెషుయారోమన్ష్రండిరోమానియన్రష్యన్కిన్యర్వాండాసంస్కృతంసార్డీనియన" + + "్సింధీఉత్తర సామిసాంగోసింహళంస్లోవాక్స్లోవేనియాన్సమోవన్షోనసోమాలిఅల్బేనియ" + + "న్సెర్బియన్స్వాతిదక్షిణ సోతోసుడానీస్స్వీడిష్స్వాహిలితమిళముతెలుగుతజిక్థ" + + "ాయ్తిగ్రిన్యాతుర్కమెన్సెటస్వానాటాంగాన్టర్కిష్సోంగాటాటర్తహితియన్ఉయ్" + + "\u200cఘర్ఉక్రేనియన్ఉర్దూఉజ్బెక్వెండావియత్నామీస్వోలాపుక్వాలూన్వొలాఫ్షోసాఇ" + + "డ్డిష్యోరుబాజువాన్చైనీస్జూలూఆఖినీస్అకోలిఅడాంగ్మేఅడిగాబ్జేటునీషియా అరబి" + + "క్అఫ్రిహిలిఅగేమ్ఐనుఅక్కాడియాన్అలియుట్దక్షిణ ఆల్టైప్రాచీన ఆంగ్లంఆంగికఅర" + + "ామేక్అరౌకేనియన్అరాపాహోఅరావాక్ఈజిప్షియన్ అరబిక్అసుఅస్టురియాన్అవధిబాలుచి" + + "బాలినీస్బసాబేజాబెంబాబీనాపశ్చిమ బలూచీభోజ్ పూరిబికోల్బినిసిక్ సికాబిష్ణు" + + "ప్రియబ్రాజ్బోడోబురియట్బ్యుగినిస్బ్లిన్కేడ్డోకేరిబ్అట్సామ్సెబుయానోఛిగాచ" + + "ిబ్చాచాగటైచూకిస్మారిచినూక్ జార్గన్చొచ్కతావ్చిపెవ్యాన్చెరోకీచేయేన్సెంట్" + + "రల్ కుర్దిష్కోప్టిక్క్రిమియన్ టర్కిష్సెసేల్వా క్రియోల్ ఫ్రెంచ్కషుబియన్" + + "డకోటాడార్గ్వాటైటాడెలావేర్స్లేవ్డోగ్రిబ్డింకాజార్మాడోగ్రిలోవర్ సోర్బియన" + + "్దుఆలామధ్యమ డచ్జోలా-ఫోనయిడ్యులాడాజాగాఇంబుఎఫిక్ప్రాచీన ఈజిప్షియన్ఏకాజక్" + + "ఎలామైట్మధ్యమ ఆంగ్లంఎవోండొఫాంగ్ఫిలిపినోఫాన్మధ్యమ ప్రెంచ్ప్రాచీన ఫ్రెంచ్" + + "ఉత్తర ఫ్రిసియన్తూర్పు ఫ్రిసియన్ఫ్రియులియన్గాగాగౌజ్గాన్ చైనీస్గాయోగ్బాయ" + + "ాజీజ్గిల్బర్టీస్మధ్యమ హై జర్మన్ప్రాచీన హై జర్మన్గోండిగోరోంటలాగోథిక్గ్ర" + + "ేబోప్రాచీన గ్రీక్స్విస్ జర్మన్గుస్సీగ్విచిన్హైడాహక్కా చైనీస్హవాయియన్హి" + + "లిగేయినోన్హిట్టిటేమోంగ్అప్పర్ సోర్బియన్జియాంగ్ చైనీస్హుపాఐబాన్ఇబిబియోఐ" + + "యోకోఇంగుష్లోజ్బాన్గోంబామకొమ్జ్యుడియో-పర్షియన్జ్యుడియో-అరబిక్కారా-కల్పా" + + "క్కాబిల్కాచిన్జ్యూకంబాకావికబార్డియన్ట్యాప్మకొండేకాబువేర్దియనుకోరోఖాసిఖ" + + "టోనీస్కొయరా చీన్నీకాకోకలెంజిన్కిమ్బుండుకోమి-పర్మాక్కొంకణికోస్రేయన్పెల్" + + "లేకరచే-బల్కార్కరేలియన్కూరుఖ్శంబాలాబాఫియకొలొజీయన్కుమ్యిక్కుటేనైలాడినోలా" + + "ంగీలాహండాలాంబాలేజ్ఘియన్లకొటామొంగోలోజిఉత్తర లూరీలుబా-లులువలుయిసెనోలుండా" + + "లువోమిజోలుయియమాదురీస్మగాహిమైథిలిమకాసార్మండింగోమాసాయిమొక్షామండార్మెండేమ" + + "ెరుమొరిస్యేన్మధ్యమ ఐరిష్మక్వా-మిట్టోమెటామికమాక్మినాంగ్కాబోమంచుమణిపూరిమ" + + "ోహుక్మోస్సిముదాంగ్బహుళ భాషలుక్రీక్మిరాండిస్మార్వాడిఎర్జియామాసన్\u200cద" + + "ెరానిమిన్ నాన్ చైనీస్నియాపోలిటన్నమలో జర్మన్నెవారినియాస్నియూఇయాన్క్వాసి" + + "యెగింబోన్నోగైప్రాచిన నోర్స్న్కోఉత్తర సోతోన్యుర్సాంప్రదాయ న్యూయారీన్యంవ" + + "ేజిన్యాన్కోలెనేయోరోజీమాఒసాజ్ఒట్టోమన్ టర్కిష్పంగా సినాన్పహ్లావిపంపగ్నపప" + + "ియమేంటోపాలుఆన్నైజీరియా పిడ్గిన్ప్రాచీన పర్షియన్ఫోనికన్పోహ్న్పెయన్ప్రష్" + + "యన్ప్రాచీన ప్రోవెంసాల్కిచేరాజస్తానీరాపన్యుయిరారోటొంగాన్రోంబోరోమానీఆరోమ" + + "ేనియన్ర్వాసండావిసఖాసమారిటన్ అరమేక్సంబురుససక్సంటాలిగాంబేసాంగుసిసిలియన్స" + + "్కాట్స్దక్షిణ కుర్దిష్సెనాసేల్కప్కోయోరాబోరో సెన్నీప్రాచీన ఐరిష్టాచెల్" + + "\u200cహిట్షాన్సిడామోదక్షిణ సామిలులే సామిఇనారి సామిస్కోల్ట్ సామిసోనింకిసో" + + "గ్డియన్స్రానన్ టోనగోసెరేర్సహోసుకుమాసుసుసుమేరియాన్కొమొరియన్సాంప్రదాయ సి" + + "రియాక్సిరియాక్తుళుటింనేటెసోటెరెనోటేటంటీగ్రెటివ్టోకెలావ్క్లింగాన్ట్లింగ" + + "ిట్టామషేక్న్యాసా టోన్గాటోక్ పిసిన్తరోకోశింషీయన్టుంబుకాటువాలుటసావాఖ్టువ" + + "ినియన్సెంట్రల్ అట్లాస్ టామాజైట్ఉడ్ముర్ట్ఉగారిటిక్ఉమ్బుండురూట్వాయివోటిక" + + "్వుంజొవాల్సర్వాలేట్టావారేవాషోవార్లపిరివు చైనీస్కల్మిక్సొగాయాయేయాపిస్యా" + + "ంగ్\u200cబెన్యెంబాకాంటనీస్జపోటెక్బ్లిసింబల్స్జెనాగాప్రామాణిక మొరొకన్ త" + + "మజియట్జునిలిపి లేదుజాజాఆధునిక ప్రామాణిక అరబిక్ఆస్ట్రేలియన్ జర్మన్స్విస" + + "్ హై జర్మన్ఆస్ట్రేలియన్ ఇంగ్లీష్కెనడియన్ ఇంగ్లీష్బ్రిటిష్ ఇంగ్లీష్అమెర" + + "ికన్ ఇంగ్లీష్లాటిన్ అమెరికన్ స్పానిష్యూరోపియన్ స్పానిష్మెక్సికన్ స్పాన" + + "ిష్కెనడియెన్ ఫ్రెంచ్స్విస్ ఫ్రెంచ్లో సాక్సన్ఫ్లెమిష్బ్రెజీలియన్ పోర్చు" + + "గీస్యూరోపియన్ పోర్చుగీస్మొల్డావియన్సేర్బో-క్రొయేషియన్కాంగో స్వాహిలిసరళ" + + "ీకృత చైనీస్సాంప్రదాయక చైనీస్" + +var teLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x002d, 0x0048, 0x0069, 0x0078, 0x0093, 0x00ab, + 0x00bd, 0x00d8, 0x00ed, 0x00fc, 0x011a, 0x012f, 0x014d, 0x016b, + 0x0183, 0x0195, 0x01aa, 0x01bf, 0x01d4, 0x01ef, 0x0204, 0x0216, + 0x0228, 0x0243, 0x024f, 0x025b, 0x0280, 0x0292, 0x02a4, 0x02b6, + 0x02c8, 0x02da, 0x02e9, 0x02f2, 0x0304, 0x0316, 0x0334, 0x034c, + 0x036a, 0x0382, 0x039a, 0x03a9, 0x03c1, 0x03d6, 0x03ee, 0x0403, + 0x0431, 0x0440, 0x046b, 0x0486, 0x0498, 0x04ad, 0x04bc, 0x04c8, + 0x04da, 0x04e9, 0x0502, 0x0523, 0x0551, 0x056c, 0x058a, 0x059c, + // Entry 40 - 7F + 0x05c0, 0x05e1, 0x05ff, 0x060e, 0x0627, 0x0642, 0x064b, 0x0669, + 0x0681, 0x069f, 0x06b1, 0x06c6, 0x06e1, 0x06f0, 0x0702, 0x071d, + 0x0729, 0x074a, 0x075c, 0x076b, 0x0780, 0x0792, 0x07aa, 0x07c2, + 0x07ce, 0x07e6, 0x07fe, 0x0810, 0x0837, 0x0846, 0x0867, 0x0879, + 0x0885, 0x08a6, 0x08bf, 0x08da, 0x08ef, 0x090a, 0x0919, 0x0934, + 0x0946, 0x0961, 0x0970, 0x097f, 0x0997, 0x09ac, 0x09b8, 0x09da, + 0x09ec, 0x09fb, 0x0a04, 0x0a47, 0x0a81, 0x0aa6, 0x0ab5, 0x0acd, + 0x0ae5, 0x0af1, 0x0b00, 0x0b0f, 0x0b24, 0x0b36, 0x0b42, 0x0b54, + // Entry 80 - BF + 0x0b66, 0x0b84, 0x0b96, 0x0bab, 0x0bb7, 0x0bd2, 0x0be4, 0x0c08, + 0x0c20, 0x0c41, 0x0c50, 0x0c6c, 0x0c7b, 0x0c8d, 0x0ca5, 0x0cc9, + 0x0cdb, 0x0ce4, 0x0cf6, 0x0d14, 0x0d2f, 0x0d41, 0x0d60, 0x0d78, + 0x0d90, 0x0da8, 0x0dba, 0x0dcc, 0x0ddb, 0x0de7, 0x0e05, 0x0e20, + 0x0e3b, 0x0e50, 0x0e65, 0x0e74, 0x0e83, 0x0e9b, 0x0eb0, 0x0ece, + 0x0edd, 0x0ef2, 0x0f01, 0x0f22, 0x0f3a, 0x0f4c, 0x0f5e, 0x0f6a, + 0x0f7f, 0x0f91, 0x0fa3, 0x0fb5, 0x0fc1, 0x0fd6, 0x0fe5, 0x0ffd, + 0x1018, 0x1043, 0x105e, 0x106d, 0x1076, 0x1097, 0x1097, 0x10ac, + // Entry C0 - FF + 0x10ac, 0x10ce, 0x10f6, 0x1105, 0x111a, 0x1138, 0x1138, 0x114d, + 0x114d, 0x114d, 0x1162, 0x1162, 0x1193, 0x119c, 0x119c, 0x11bd, + 0x11bd, 0x11c9, 0x11db, 0x11f3, 0x11f3, 0x11fc, 0x11fc, 0x11fc, + 0x11fc, 0x1208, 0x1217, 0x1217, 0x1223, 0x1223, 0x1223, 0x1245, + 0x125e, 0x1270, 0x127c, 0x127c, 0x127c, 0x1295, 0x12b6, 0x12b6, + 0x12c8, 0x12c8, 0x12d4, 0x12d4, 0x12e9, 0x1307, 0x1307, 0x1319, + 0x1319, 0x132b, 0x133d, 0x133d, 0x1352, 0x136a, 0x1376, 0x1388, + 0x1397, 0x13a9, 0x13b5, 0x13dd, 0x13f8, 0x1416, 0x1428, 0x143a, + // Entry 100 - 13F + 0x146b, 0x1483, 0x1483, 0x14b4, 0x14fb, 0x1513, 0x1522, 0x153a, + 0x1546, 0x155e, 0x1570, 0x1588, 0x1597, 0x15a9, 0x15bb, 0x15e6, + 0x15e6, 0x15f5, 0x160e, 0x162a, 0x163c, 0x164e, 0x165a, 0x1669, + 0x1669, 0x169d, 0x16af, 0x16c4, 0x16e6, 0x16e6, 0x16f8, 0x16f8, + 0x1707, 0x171f, 0x171f, 0x172b, 0x172b, 0x1750, 0x177b, 0x177b, + 0x17a6, 0x17d4, 0x17f5, 0x17fb, 0x180d, 0x182c, 0x1838, 0x184a, + 0x184a, 0x1856, 0x1877, 0x1877, 0x18a0, 0x18cf, 0x18cf, 0x18de, + 0x18f6, 0x1908, 0x191a, 0x1942, 0x1967, 0x1967, 0x1967, 0x1979, + // Entry 140 - 17F + 0x1991, 0x199d, 0x19bf, 0x19d7, 0x19d7, 0x19fb, 0x1a13, 0x1a22, + 0x1a50, 0x1a78, 0x1a84, 0x1a93, 0x1aa8, 0x1ab7, 0x1ac9, 0x1ac9, + 0x1ac9, 0x1ae1, 0x1af0, 0x1aff, 0x1b30, 0x1b5b, 0x1b5b, 0x1b7d, + 0x1b8f, 0x1ba1, 0x1bad, 0x1bb9, 0x1bc5, 0x1be3, 0x1be3, 0x1bf5, + 0x1c07, 0x1c2e, 0x1c2e, 0x1c3a, 0x1c3a, 0x1c46, 0x1c5b, 0x1c7d, + 0x1c7d, 0x1c7d, 0x1c89, 0x1ca1, 0x1cbc, 0x1cde, 0x1cf0, 0x1d0b, + 0x1d1d, 0x1d3f, 0x1d3f, 0x1d3f, 0x1d57, 0x1d69, 0x1d7b, 0x1d8a, + 0x1da5, 0x1dbd, 0x1dcf, 0x1de1, 0x1df0, 0x1e02, 0x1e11, 0x1e2c, + // Entry 180 - 1BF + 0x1e2c, 0x1e2c, 0x1e2c, 0x1e3b, 0x1e3b, 0x1e4a, 0x1e56, 0x1e72, + 0x1e72, 0x1e8e, 0x1ea6, 0x1eb5, 0x1ec1, 0x1ecd, 0x1edc, 0x1edc, + 0x1edc, 0x1ef4, 0x1ef4, 0x1f03, 0x1f15, 0x1f2a, 0x1f3f, 0x1f51, + 0x1f51, 0x1f63, 0x1f75, 0x1f84, 0x1f90, 0x1fae, 0x1fcd, 0x1fef, + 0x1ffb, 0x2010, 0x2031, 0x203d, 0x2052, 0x2064, 0x2076, 0x2076, + 0x208b, 0x20a7, 0x20b9, 0x20d4, 0x20ec, 0x20ec, 0x20ec, 0x2101, + 0x2125, 0x2151, 0x2172, 0x2178, 0x2191, 0x21a3, 0x21b5, 0x21d0, + 0x21d0, 0x21e8, 0x21fd, 0x2209, 0x2231, 0x2231, 0x223d, 0x2259, + // Entry 1C0 - 1FF + 0x226b, 0x229f, 0x22b7, 0x22d5, 0x22e7, 0x22f3, 0x2302, 0x2330, + 0x234f, 0x2364, 0x2376, 0x2391, 0x23a6, 0x23a6, 0x23d7, 0x23d7, + 0x23d7, 0x2405, 0x2405, 0x241a, 0x241a, 0x241a, 0x243b, 0x2453, + 0x248a, 0x2496, 0x2496, 0x24b1, 0x24cc, 0x24ed, 0x24ed, 0x24ed, + 0x24fc, 0x250e, 0x250e, 0x250e, 0x250e, 0x252c, 0x2538, 0x254a, + 0x2553, 0x257e, 0x2590, 0x259c, 0x25ae, 0x25ae, 0x25bd, 0x25cc, + 0x25e7, 0x25ff, 0x25ff, 0x262a, 0x262a, 0x2636, 0x2636, 0x264b, + 0x267c, 0x26a1, 0x26a1, 0x26c2, 0x26ce, 0x26ce, 0x26e0, 0x26e0, + // Entry 200 - 23F + 0x26e0, 0x26ff, 0x2718, 0x2734, 0x2759, 0x276e, 0x2789, 0x27ae, + 0x27c0, 0x27c9, 0x27c9, 0x27db, 0x27e7, 0x2805, 0x2820, 0x2854, + 0x286c, 0x286c, 0x2878, 0x2887, 0x2893, 0x28a5, 0x28b1, 0x28c3, + 0x28cf, 0x28e7, 0x28e7, 0x2902, 0x291d, 0x291d, 0x2932, 0x2957, + 0x2976, 0x2976, 0x2985, 0x2985, 0x299d, 0x299d, 0x29b2, 0x29c4, + 0x29d9, 0x29f4, 0x2a3b, 0x2a56, 0x2a71, 0x2a89, 0x2a95, 0x2aa1, + 0x2aa1, 0x2aa1, 0x2aa1, 0x2aa1, 0x2ab3, 0x2ab3, 0x2ac2, 0x2ad7, + 0x2aef, 0x2afb, 0x2b07, 0x2b22, 0x2b3b, 0x2b50, 0x2b50, 0x2b5c, + // Entry 240 - 27F + 0x2b68, 0x2b7a, 0x2b98, 0x2ba7, 0x2ba7, 0x2bbf, 0x2bd4, 0x2bf8, + 0x2bf8, 0x2c0a, 0x2c51, 0x2c5d, 0x2c76, 0x2c82, 0x2cc3, 0x2cc3, + 0x2cfa, 0x2d26, 0x2d63, 0x2d94, 0x2dc5, 0x2df6, 0x2e3a, 0x2e6e, + 0x2ea2, 0x2ea2, 0x2ed3, 0x2efb, 0x2f17, 0x2f2f, 0x2f6f, 0x2fa9, + 0x2fca, 0x2ffe, 0x3026, 0x304e, 0x307f, +} // Size: 1250 bytes + +const thLangStr string = "" + // Size: 13813 bytes + "อะฟาร์อับคาซอเวสตะแอฟริกานส์อาคันอัมฮาราอารากอนอาหรับอัสสัมอาวาร์ไอย์มาร" + + "าอาเซอร์ไบจานบัชคีร์เบลารุสบัลแกเรียบิสลามาบัมบาราเบงกาลีทิเบตเบรตันบอ" + + "สเนียกาตาลังเชเชนชามอร์โรคอร์ซิกาครีเช็กเชอร์ชสลาวิกชูวัชเวลส์เดนมาร์ก" + + "เยอรมันธิเวหิซองคาเอเวกรีกอังกฤษเอสเปอรันโตสเปนเอสโตเนียบัสเกเปอร์เซีย" + + "ฟูลาฮ์ฟินแลนด์ฟิจิแฟโรฝรั่งเศสฟริเซียนตะวันตกไอริชสกอตส์กาลิกกาลิเซียก" + + "วารานีคุชราตมานซ์เฮาชาฮิบรูฮินดีฮีรีโมตูโครเอเชียเฮติฮังการีอาร์เมเนีย" + + "เฮเรโรอินเตอร์ลิงกัวอินโดนีเชียอินเตอร์ลิงกิวอิกโบเสฉวนยิอีนูเปียกอีโด" + + "ไอซ์แลนด์อิตาลีอินุกติตุตญี่ปุ่นชวาจอร์เจียคองโกกีกูยูกวนยามาคาซัคกรีน" + + "แลนด์เขมรกันนาดาเกาหลีคานูรีกัศมีร์เคิร์ดโกมิคอร์นิชคีร์กีซละตินลักเซม" + + "เบิร์กยูกันดาลิมเบิร์กลิงกาลาลาวลิทัวเนียลูบา-กาตองกาลัตเวียมาลากาซีมา" + + "ร์แชลลิสเมารีมาซิโดเนียมาลายาลัมมองโกเลียมราฐีมาเลย์มอลตาพม่านาอูรูเอ็" + + "นเดเบเลเหนือเนปาลดองกาดัตช์นอร์เวย์นีนอสก์นอร์เวย์บุคมอลเอ็นเดเบเลใต้น" + + "าวาโฮเนียนจาอ็อกซิตันโอจิบวาโอโรโมโอริยาออสเซเตียปัญจาบบาลีโปแลนด์พาชต" + + "ูโปรตุเกสควิชัวโรแมนซ์บุรุนดีโรมาเนียรัสเซียรวันดาสันสกฤตซาร์เดญาสินธุ" + + "ซามิเหนือแซงโกสิงหลสโลวักสโลวีเนียซามัวโชนาโซมาลีแอลเบเนียเซอร์เบียสวา" + + "ติโซโทใต้ซุนดาสวีเดนสวาฮีลีทมิฬเตลูกูทาจิกไทยติกริญญาเติร์กเมนิสถานบอต" + + "สวานาตองกาตุรกีซิตซองกาตาตาร์ตาฮิตีอุยกัวยูเครนอูรดูอุซเบกเวนดาเวียดนา" + + "มโวลาพึควาโลนีโวลอฟคะห์โอซายิวโยรูบาจ้วงจีนซูลูอาเจะห์อาโคลิอาแดงมีอะด" + + "ืยเกอาหรับตูนิเซียแอฟริฮีลีอักเฮมไอนุอักกาดแอละแบมาอาลิวต์เกกแอลเบเนีย" + + "อัลไตใต้อังกฤษโบราณอังคิกาอราเมอิกอาเราคาเนียนอาเรานาอาราปาโฮอาหรับแอล" + + "จีเรียอาราวักอาหรับโมร็อกโกอาหรับพื้นเมืองอียิปต์อาซูภาษามืออเมริกันอั" + + "สตูเรียสโคตาวาอวธีบาลูชิบาหลีบาวาเรียบาสาบามันบาตักโทบาโคมาลาเบจาเบมบา" + + "เบตาวีเบนาบาฟัตพทคะบาลูจิตะวันตกโภชปุรีบิกอลบินีบันจาร์กมสิกสิกาพิศนุป" + + "ริยะบักติยารีพัรชบราฮุยโพโฑอาโคซีบูเรียตบูกิสบูลูบลินเมดุมบาคัดโดคาริบ" + + "คายูกาแอตแซมเซบูคีกาชิบชาชะกะไตชูกมารีชินุกจาร์กอนช็อกทอว์ชิพิวยันเชอโ" + + "รกีเชเยนเนเคิร์ดโซรานีคอปติกกาปิซนอนตุรกีไครเมียครีโอลเซเซลส์ฝรั่งเศสค" + + "าซูเบียนดาโกทาดาร์กินไททาเดลาแวร์สเลวีโดกริบดิงกาซาร์มาโฑครีซอร์บส์ตอน" + + "ล่างดูซุนกลางดัวลาดัตช์กลางโจลา-ฟอนยีดิวลาดาซากาเอ็มบูอีฟิกเอมีเลียอีย" + + "ิปต์โบราณอีกาจุกอีลาไมต์อังกฤษกลางยูพิกกลางอีวันโดเอกซ์เตรมาดูราฟองฟิล" + + "ิปปินส์ฟินแลนด์ทอร์เนดาเล็นฟอนฝรั่งเศสกาฌ็องฝรั่งเศสกลางฝรั่งเศสโบราณอ" + + "าร์พิตาฟริเซียนเหนือฟริเซียนตะวันออกฟรูลีกากากาอุซจีนกั้นกาโยกบายาดารี" + + "โซโรอัสเตอร์กีซกิลเบอร์ตกิลากีเยอรมันสูงกลางเยอรมันสูงโบราณกอนกานีของก" + + "ัวกอนดิกอรอนทาโลโกธิกเกรโบกรีกโบราณเยอรมันสวิสวายูฟราฟรากุซซีกวิชอินไฮ" + + "ดาจีนแคะฮาวายฮินดีฟิจิฮีลีกัยนนฮิตไตต์ม้งซอร์บส์ตอนบนจีนเซียงฮูปาอิบาน" + + "อิบิบิโออีโลโกอินกุชอินเกรียนอังกฤษคลีโอลจาเมกาโลชบันอึนกอมบามาชาเมยิว" + + "-เปอร์เซียยิว-อาหรับจัทการา-กาลพากกาไบลกะฉิ่นคจูคัมบากวีคาร์บาเดียคาเนมบ" + + "ูทีแยปมาคอนเดคาบูเวอร์เดียนูเกินยางโคโรเคนก่างกาสีโคตันโคย์ราชีนีโควาร" + + "์เคอร์มานิกิคาโกคาเลนจินคิมบุนดูโคมิ-เปียร์เมียคกอนกานีคูสไรกาแปลคาราไ" + + "ช-บัลคาร์คริโอกินารายอาแกรเลียนกุรุขชัมบาลาบาเฟียโคโลญคูมืยค์คูเทไนลาด" + + "ิโนแลนจีลาฮ์นดาแลมบาเลซเกียนลิงกัวฟรังกาโนวาลิกูเรียลิโวเนียลาโกตาลอมบ" + + "าร์ดมองโกโลซิลูรีเหนือลัตเกลลูบา-ลูลัวลุยเซโนลันดาลัวลูไชลูเยียจีนคลาส" + + "สิกแลซมาดูรามาฟามคหีไมถิลีมากาซาร์มันดิงกามาไซมาบามอคชามานดาร์เมนเดเมร" + + "ูมอริสเยนไอริชกลางมากัววา-มีทโทเมตามิกแมกมีนังกาเบาแมนจูมณีปุระโมฮอว์ก" + + "โมซีมารีตะวันตกมันดังหลายภาษาครีกมีรันดามารวาฑีเม็นตาไวมยีนเอียร์ซยามา" + + "ซันดารานีจีนมินหนานนาโปลีนามาเยอรมันต่ำ - แซกซอนต่ำเนวาร์นีอัสนีอูอ๋าว" + + "นากากวาซิโอจีมบูนโนไกนอร์สโบราณโนเวียลเอ็นโกโซโทเหนือเนือร์เนวาร์ดั้งเ" + + "ดิมเนียมเวซีเนียนโกเลนิโอโรนซิมาโอซากีตุรกีออตโตมันปางาซีนันปะห์ลาวีปั" + + "มปางาปาเปียเมนโตปาเลาปิการ์พิดจินเยอรมันเพนซิลเวเนียเพลาท์ดิชเปอร์เซีย" + + "โบราณเยอรมันพาลาทิเนตฟินิเชียพีดมอนต์พอนติกพอห์นเพปรัสเซียโปรวองซาลโบร" + + "าณกีเชควิชัวไฮแลนด์ชิมโบราโซราชสถานราปานูราโรทองกาโรมัณโญริฟฟิอันรอมโบ" + + "โรมานีโรทูมันรูซินโรเวียนาอาโรมาเนียนรวาซันดาเวซาฮาอราเมอิกซามาเรียแซม" + + "บูรูซาซักสันตาลีเสาราษฏร์กัมเบแซงกูซิซิลีสกอตส์ซาร์ดิเนียซาสซารีเคอร์ด" + + "ิชใต้เซนิกาเซนาเซรีเซลคุปโคย์ราโบโรเซนนีไอริชโบราณซาโมจิเตียนทาเชลีห์ท" + + "ไทใหญ่อาหรับ-ชาดซิดาโมไซลีเซียตอนล่างเซลายาร์ซามิใต้ซามิลูเลซามิอีนารี" + + "ซามิสคอลต์โซนีนเกซอกดีนซูรินาเมเซแรร์ซาโฮฟรีเซียนซัทเธอร์แลนด์ซูคูมาซู" + + "ซูซูเมอโคเมอเรียนซีเรียแบบดั้งเดิมซีเรียไซลีเซียตูลูทิมเนเตโซเทเรโนเตต" + + "ุมตีเกรทิฟโตเกเลาแซคเซอร์คลิงกอนทลิงกิตทาลิชทามาเชกไนอะซาตองกาท็อกพิซิ" + + "นตูโรโยทาโรโกซาโคเนียซิมชีแอนตัตมุสลิมทุมบูกาตูวาลูตัสซาวัคตูวาทามาไซต" + + "์แอตลาสกลางอุดมูร์ตยูการิตอุมบุนดูรูทไวเวเนโต้เวปส์เฟลมิชตะวันตกเมน-ฟร" + + "านโกเนียโวทิกโวโรวุนจูวัลเซอร์วาลาโมวาเรย์วาโชวอล์เพอร์รีจีนอู๋คัลมืยค" + + "์เมเกรเลียโซกาเย้ายัปแยงเบนเยมบาเหงงกาตุกวางตุ้งซาโปเตกบลิสซิมโบลส์เซแ" + + "ลนด์เซนากาทามาไซต์โมร็อกโกมาตรฐานซูนิไม่มีข้อมูลภาษาซาซาอาหรับมาตรฐานส" + + "มัยใหม่เยอรมัน - ออสเตรียเยอรมันสูง (สวิส)อังกฤษ - ออสเตรเลียอังกฤษ - " + + "แคนาดาอังกฤษ - สหราชอาณาจักรอังกฤษ - อเมริกันสเปน - ละตินอเมริกาสเปน -" + + " ยุโรปสเปน - เม็กซิโกฝรั่งเศส - แคนาดาฝรั่งเศส (สวิส)แซกซอนใต้เฟลมิชโปรต" + + "ุเกส - บราซิลโปรตุเกส - ยุโรปมอลโดวาเซอร์โบ-โครเอเชียสวาฮีลี-คองโกจีนต" + + "ัวย่อจีนตัวเต็ม" + +var thLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0012, 0x0024, 0x0036, 0x0054, 0x0063, 0x0078, 0x008d, + 0x009f, 0x00b1, 0x00c3, 0x00db, 0x00ff, 0x0114, 0x0129, 0x0144, + 0x0159, 0x016e, 0x0183, 0x0192, 0x01a4, 0x01b9, 0x01ce, 0x01dd, + 0x01f5, 0x020d, 0x0216, 0x0222, 0x0246, 0x0255, 0x0264, 0x027c, + 0x0291, 0x02a3, 0x02b2, 0x02be, 0x02ca, 0x02dc, 0x02fd, 0x0309, + 0x0324, 0x0333, 0x034e, 0x0360, 0x0378, 0x0384, 0x0390, 0x03a8, + 0x03d5, 0x03e4, 0x0405, 0x041d, 0x0432, 0x0444, 0x0453, 0x0462, + 0x0471, 0x0480, 0x0498, 0x04b3, 0x04bf, 0x04d4, 0x04f2, 0x0504, + // Entry 40 - 7F + 0x052e, 0x054f, 0x0579, 0x0588, 0x059d, 0x05b8, 0x05c4, 0x05df, + 0x05f1, 0x060f, 0x0624, 0x062d, 0x0645, 0x0654, 0x0666, 0x067b, + 0x068a, 0x06a5, 0x06b1, 0x06c6, 0x06d8, 0x06ea, 0x06ff, 0x0711, + 0x071d, 0x0732, 0x0747, 0x0756, 0x077a, 0x078f, 0x07aa, 0x07bf, + 0x07c8, 0x07e3, 0x0805, 0x081a, 0x0832, 0x0850, 0x085f, 0x087d, + 0x0898, 0x08b3, 0x08c2, 0x08d4, 0x08e3, 0x08ef, 0x0901, 0x092e, + 0x093d, 0x094c, 0x095b, 0x0988, 0x09b2, 0x09d9, 0x09eb, 0x0a00, + 0x0a1b, 0x0a30, 0x0a42, 0x0a54, 0x0a6f, 0x0a81, 0x0a8d, 0x0aa2, + // Entry 80 - BF + 0x0ab1, 0x0ac9, 0x0adb, 0x0af0, 0x0b05, 0x0b1d, 0x0b32, 0x0b44, + 0x0b59, 0x0b71, 0x0b80, 0x0b9b, 0x0baa, 0x0bb9, 0x0bcb, 0x0be6, + 0x0bf5, 0x0c01, 0x0c13, 0x0c2e, 0x0c49, 0x0c58, 0x0c6d, 0x0c7c, + 0x0c8e, 0x0ca3, 0x0caf, 0x0cc1, 0x0cd0, 0x0cd9, 0x0cf1, 0x0d1b, + 0x0d33, 0x0d42, 0x0d51, 0x0d69, 0x0d7b, 0x0d8d, 0x0d9f, 0x0db1, + 0x0dc0, 0x0dd2, 0x0de1, 0x0df9, 0x0e0e, 0x0e20, 0x0e2f, 0x0e47, + 0x0e50, 0x0e62, 0x0e6e, 0x0e77, 0x0e83, 0x0e98, 0x0eaa, 0x0ebf, + 0x0ed4, 0x0efe, 0x0f19, 0x0f2b, 0x0f37, 0x0f49, 0x0f61, 0x0f76, + // Entry C0 - FF + 0x0f9a, 0x0fb2, 0x0fd3, 0x0fe8, 0x1000, 0x1024, 0x1039, 0x1051, + 0x107e, 0x107e, 0x1093, 0x10bd, 0x10ff, 0x110b, 0x1138, 0x1156, + 0x1168, 0x1174, 0x1186, 0x1195, 0x11ad, 0x11b9, 0x11c8, 0x11e3, + 0x11f5, 0x1201, 0x1210, 0x1222, 0x122e, 0x123d, 0x1249, 0x1270, + 0x1285, 0x1294, 0x12a0, 0x12b5, 0x12bb, 0x12d0, 0x12ee, 0x1309, + 0x1315, 0x1327, 0x1333, 0x1345, 0x135a, 0x1369, 0x1375, 0x1381, + 0x1396, 0x13a5, 0x13b4, 0x13c6, 0x13d8, 0x13e4, 0x13f0, 0x13ff, + 0x1411, 0x141a, 0x1426, 0x144a, 0x1462, 0x147a, 0x148f, 0x14a4, + // Entry 100 - 13F + 0x14c8, 0x14da, 0x14f2, 0x1516, 0x1555, 0x1570, 0x1582, 0x1597, + 0x15a3, 0x15bb, 0x15ca, 0x15dc, 0x15eb, 0x15fd, 0x160c, 0x1636, + 0x1651, 0x1660, 0x167b, 0x1697, 0x16a6, 0x16b8, 0x16ca, 0x16d9, + 0x16f1, 0x1715, 0x172a, 0x1742, 0x1760, 0x177b, 0x1790, 0x17ba, + 0x17c3, 0x17e1, 0x181d, 0x1826, 0x1850, 0x1874, 0x189b, 0x18b3, + 0x18da, 0x190a, 0x1919, 0x191f, 0x1934, 0x1949, 0x1955, 0x1964, + 0x1994, 0x199d, 0x19b8, 0x19ca, 0x19f4, 0x1a21, 0x1a48, 0x1a57, + 0x1a72, 0x1a81, 0x1a90, 0x1aab, 0x1acc, 0x1ad8, 0x1aea, 0x1af9, + // Entry 140 - 17F + 0x1b0e, 0x1b1a, 0x1b2c, 0x1b3b, 0x1b56, 0x1b71, 0x1b86, 0x1b8f, + 0x1bb3, 0x1bcb, 0x1bd7, 0x1be6, 0x1bfe, 0x1c10, 0x1c22, 0x1c3d, + 0x1c73, 0x1c85, 0x1c9d, 0x1caf, 0x1cd4, 0x1cf0, 0x1cf9, 0x1d18, + 0x1d27, 0x1d39, 0x1d42, 0x1d51, 0x1d5a, 0x1d78, 0x1d8d, 0x1d9c, + 0x1db1, 0x1dde, 0x1df3, 0x1dff, 0x1e14, 0x1e20, 0x1e2f, 0x1e4d, + 0x1e5f, 0x1e80, 0x1e8c, 0x1ea4, 0x1ebc, 0x1eea, 0x1eff, 0x1f0e, + 0x1f1d, 0x1f45, 0x1f54, 0x1f6f, 0x1f87, 0x1f96, 0x1fab, 0x1fbd, + 0x1fcc, 0x1fe1, 0x1ff3, 0x2005, 0x2014, 0x2029, 0x2038, 0x2050, + // Entry 180 - 1BF + 0x2080, 0x2098, 0x20b0, 0x20c2, 0x20da, 0x20e9, 0x20f5, 0x2110, + 0x2122, 0x213e, 0x2153, 0x2162, 0x216b, 0x2177, 0x2189, 0x21a7, + 0x21b0, 0x21c2, 0x21ce, 0x21da, 0x21ec, 0x2204, 0x221c, 0x2228, + 0x2234, 0x2243, 0x2258, 0x2267, 0x2273, 0x228b, 0x22a6, 0x22cb, + 0x22d7, 0x22e9, 0x2307, 0x2316, 0x232b, 0x2340, 0x234c, 0x236d, + 0x237f, 0x2397, 0x23a3, 0x23b8, 0x23cd, 0x23e5, 0x23f1, 0x240c, + 0x242d, 0x244b, 0x245d, 0x2469, 0x24a5, 0x24b7, 0x24c6, 0x24d2, + 0x24ea, 0x24ff, 0x2511, 0x251d, 0x253b, 0x2550, 0x2562, 0x257d, + // Entry 1C0 - 1FF + 0x258f, 0x25b9, 0x25d4, 0x25ef, 0x2601, 0x2610, 0x2622, 0x2649, + 0x2664, 0x267c, 0x2691, 0x26b2, 0x26c1, 0x26d3, 0x26e5, 0x271e, + 0x2739, 0x2763, 0x2793, 0x27ab, 0x27c3, 0x27d5, 0x27ea, 0x2802, + 0x282c, 0x2838, 0x287a, 0x288f, 0x28a1, 0x28bc, 0x28d1, 0x28e9, + 0x28f8, 0x290a, 0x291f, 0x292e, 0x2946, 0x2967, 0x2970, 0x2985, + 0x2991, 0x29c1, 0x29d6, 0x29e5, 0x29fa, 0x2a15, 0x2a24, 0x2a33, + 0x2a45, 0x2a57, 0x2a8a, 0x2aab, 0x2abd, 0x2ac9, 0x2ad5, 0x2ae7, + 0x2b14, 0x2b32, 0x2b53, 0x2b6e, 0x2b80, 0x2b9c, 0x2bae, 0x2bdb, + // Entry 200 - 23F + 0x2bf3, 0x2c08, 0x2c20, 0x2c3e, 0x2c5c, 0x2c71, 0x2c83, 0x2c9b, + 0x2cad, 0x2cb9, 0x2cf8, 0x2d0a, 0x2d16, 0x2d25, 0x2d43, 0x2d76, + 0x2d88, 0x2da0, 0x2dac, 0x2dbb, 0x2dc7, 0x2dd9, 0x2de8, 0x2df7, + 0x2e00, 0x2e15, 0x2e2d, 0x2e42, 0x2e57, 0x2e66, 0x2e7b, 0x2e9c, + 0x2eb7, 0x2ec9, 0x2edb, 0x2ef3, 0x2f0b, 0x2f26, 0x2f3b, 0x2f4d, + 0x2f65, 0x2f71, 0x2fa7, 0x2fbf, 0x2fd4, 0x2fec, 0x2ff5, 0x2ffb, + 0x3010, 0x301f, 0x3046, 0x306e, 0x307d, 0x3089, 0x3098, 0x30b0, + 0x30c2, 0x30d4, 0x30e0, 0x3101, 0x3113, 0x312b, 0x3146, 0x3152, + // Entry 240 - 27F + 0x315e, 0x3167, 0x3179, 0x3188, 0x31a0, 0x31b8, 0x31cd, 0x31f1, + 0x3206, 0x3218, 0x325d, 0x3269, 0x3296, 0x32a2, 0x32e1, 0x32e1, + 0x3311, 0x333e, 0x3371, 0x3398, 0x33d4, 0x3401, 0x3434, 0x3452, + 0x3479, 0x3479, 0x34a6, 0x34cd, 0x34e8, 0x34fa, 0x3527, 0x3551, + 0x3566, 0x3597, 0x35bc, 0x35d7, 0x35f5, +} // Size: 1250 bytes + +const trLangStr string = "" + // Size: 5927 bytes + "AfarAbhazcaAvestçeAfrikaancaAkanAmharcaAragoncaArapçaAssamcaAvar DiliAym" + + "araAzericeBaşkırtçaBelarusçaBulgarcaBislamaBambaraBengalceTibetçeBretonc" + + "aBoşnakçaKatalancaÇeçenceÇamorro diliKorsikacaKriceÇekçeKilise SlavcasıÇ" + + "uvaşçaGalceDancaAlmancaDivehi diliDzongkhaEweYunancaİngilizceEsperantoİs" + + "panyolcaEstoncaBaskçaFarsçaFula diliFinceFiji DiliFaroe DiliFransızcaBat" + + "ı Frizcesiİrlandacaİskoç GaelcesiGaliçyacaGuarani diliGüceratçaManksHau" + + "sa diliİbraniceHintçeHiri MotuHırvatçaHaiti KreyoluMacarcaErmeniceHerero" + + " diliInterlinguaEndonezceInterlingueİbo diliSichuan YiİnyupikçeIdoİzland" + + "acaİtalyancaİnuit diliJaponcaCava DiliGürcüceKongo diliKikuyuKuanyamaKaz" + + "akçaGrönland diliKmerceKannada diliKoreceKanuri diliKeşmir diliKürtçeKom" + + "iKernevekçeKırgızcaLatinceLüksemburgcaGandaLimburgcaLingalaLao diliLitva" + + "ncaLuba-KatangaLetoncaMalgaşçaMarshall Adaları diliMaori diliMakedoncaMa" + + "layalam diliMoğolcaMarathiMalaycaMaltacaBurmacaNauru diliKuzey NdebeleNe" + + "palceNdongaFelemenkçeNorveççe NynorskNorveççe BokmålGüney NdebeleNavaho " + + "diliNyanjaOksitan diliOjibva diliOromo diliOriya DiliOsetçePencapçaPaliL" + + "ehçePeştucaPortekizceKeçuva diliRomanşçaKirundiRumenceRusçaKinyarwandaSa" + + "nskritSardunya diliSindhiKuzey LaponcasıSangoSeylancaSlovakçaSlovenceSam" + + "oa diliShonaSomaliceArnavutçaSırpçaSisvatiGüney Sotho diliSunda Diliİsve" + + "ççeSvahiliTamilceTelugu diliTacikçeTaycaTigrinyaTürkmenceSetsvanaTonga " + + "diliTürkçeTsongaTatarcaTahiti diliUygurcaUkraynacaUrducaÖzbekçeVenda dil" + + "iVietnamcaVolapükValoncaVolofçaZosa diliYidişYorubacaZhuangcaÇinceZuluca" + + "AçeceAcoliAdangmeAdigeceTunus ArapçasıAfrihiliAghemAyni DiliAkad DiliAla" + + "bamacaAleut diliGheg ArnavutçasıGüney AltaycaEski İngilizceAngikaAramice" + + "Mapuçe diliAraonaArapaho DiliCezayir ArapçasıArawak DiliFas ArapçasıMısı" + + "r ArapçasıAsuAmerikan İşaret DiliAsturyascaKotavaAwadhiBeluççaBali diliB" + + "avyera diliBasa DiliBamunBatak TobaGhomalaBeja diliBembaBetawiBenaBafutB" + + "adagaBatı BalochiArayaniceBikolBiniBanjar DiliKomKaraayak diliBishnupriy" + + "aBahtiyariBrajBrohiceBodoAkooseBuryatçaBugisBuluBlinMedumbaKado diliCari" + + "bKayuga diliAtsamSebuano diliKigacaÇibça diliÇağataycaChuukeseMari diliÇ" + + "inuk diliÇoktav diliÇipevya diliÇerokiceŞayenceOrta KürtçeKıpticeCapizno" + + "nKırım TürkçesiSeselwa Kreole FransızcasıKashubianDakotacaDarginceTaitaD" + + "elawareSlavey diliDogribDinka diliZarmaDogriAşağı SorbçaOrta KadazanDual" + + "aOrtaçağ FelemenkçesiJola-FonyiDyulaDazagaEmbuEfikEmilia DiliEski Mısır " + + "DiliEkajukElamOrtaçağ İngilizcesiMerkezi YupikçeEwondoEkstremadura DiliF" + + "angFilipinceTornedalin FincesiFonCajun FransızcasıOrtaçağ FransızcasıEsk" + + "i FransızcaArpitancaKuzey FrizceDoğu FrizcesiFriuli diliGa diliGagavuzca" + + "Gan ÇincesiGayo diliGbayaZerdüşt DaricesiGeezKiribaticeGilaniceOrtaçağ Y" + + "üksek AlmancasıEski Yüksek AlmancaGoa KonkanicesiGondi diliGorontalo di" + + "liGotçaGrebo diliAntik Yunancaİsviçre AlmancasıWayuu diliFrafraGusiiGuçi" + + "nceHaydacaHakka ÇincesiHawaii diliFiji HintçesiHiligaynon diliHititçeHmo" + + "ngYukarı SorbçaXiang ÇincesiHupacaIbanİbibio diliIlokoİnguşçaİngriya Dil" + + "iJamaika Patois DiliLojbanNgombaMachameYahudi FarsçasıYahudi ArapçasıYut" + + "land DiliKarakalpakçaKabiliyeceKaçin diliJjuKambaKawiKabardeyceKanembuTy" + + "apMakondeKabuverdianuKenyangKoroKaingangKhasi diliHotancaKoyra ChiiniÇit" + + "ral DiliKırmanççaKakoKalenjinKimbunduKomi-PermyakKonkani diliKosraeanKpe" + + "lle diliKaraçay-BalkarcaKrioKinaray-aKarelyacaKurukhShambalaBafiaKöln le" + + "hçesiKumukçaKutenai diliLadinoLangiLahndaLamba diliLezgiceLingua Franca " + + "NovaLigurcaLivoncaLakotacaLombardçaMongoLoziKuzey LuriLatgalianLuba-Lulu" + + "aLuisenoLundaLuoLushaiLuyiaEdebi ÇinceLazcaMadura DiliMafaMagahiMaithili" + + "MakasarMandingoMasaiMabaMokşa diliMandarMende diliMeruMorisyenOrtaçağ İr" + + "landacasıMakhuwa-MeettoMeta’MicmacMinangkabauMançurya diliManipuri diliM" + + "ohavk diliMossiOva ÇirmişçesiMundangBirden Fazla DilKrikçeMiranda diliMa" + + "rvariMentawaiMyeneErzyaMazenderancaMin Nan ÇincesiNapoliceNamaAşağı Alma" + + "ncaNevariNiasNiue diliAo NagaKwasioNgiemboonNogaycaEski Nors diliNovialN" + + "’KoKuzey Sotho diliNuerKlasik NevariNyamveziNyankoleNyoroNzima diliOsa" + + "geOsmanlı TürkçesiPangasinan diliPehlevi DiliPampangaPapiamentoPalau dil" + + "iPicard DiliNijerya Pidgin diliPensilvanya AlmancasıPlautdietschEski Far" + + "sçaPalatin AlmancasıFenike diliPiyemonteceKuzeybatı KafkasyaPohnpeianPru" + + "syacaEski ProvensalKiçeceChimborazo Highland QuichuaRajasthaniRapanui di" + + "liRarotonganRomanyolcaRif BerbericesiRomboRomancaRotumanRusinceRovianaUl" + + "ahçaRwaSandaveYakutçaSamarit AramcasıSamburuSasakSantaliSaurashtraNgamba" + + "ySanguSicilyacaİskoççaSassari SarducaGüney KürtçesiSeneca diliSenaSeriSe" + + "lkup diliKoyraboro SenniEski İrlandacaSamogitçeTaşelhitShan diliÇad Arap" + + "çasıSidamo diliAşağı SilezyacaSelayarGüney LaponcasıLule Laponcasıİnari" + + " LaponcasıSkolt LaponcasıSoninkeSogdiana DiliSranan TongoSerer diliSahoS" + + "aterland FrizcesiSukuma diliSusuSümerceKomorcaKlasik SüryaniceSüryaniceS" + + "ilezyacaTulucaTimneTesoTerenoTetumTigreTivTokelau diliSahurcaKlingoncaTl" + + "ingitTalışçaTamaşekNyasa TongaTok PisinTuroyoTarokoTsakoncaTsimshianTatç" + + "aTumbukaTuvalyancaTasawaqTuvacaOrta Atlas TamazigtiUdmurtçaUgarit diliUm" + + "bunduKökenVaiVenedikçeVeps diliBatı FlamancaMain Frankonya DiliVotçaVõro" + + "VunjoWalserValamoVarayVaşoWarlpiriWu ÇincesiKalmıkçaMegrelceSogaYaoYapça" + + "YangbenYembaNheengatuKantoncaZapotek diliBlis SembolleriZelandacaZenaga " + + "diliStandart Fas TamazigtiZuniceDilbilim içeriği yokZazacaModern Standar" + + "t ArapçaGüney AzericeAvusturya Almancasıİsviçre Yüksek AlmancasıAvustral" + + "ya İngilizcesiKanada İngilizcesiİngiliz İngilizcesiAmerikan İngilizcesiL" + + "atin Amerika İspanyolcasıAvrupa İspanyolcasıMeksika İspanyolcasıKanada F" + + "ransızcasıİsviçre FransızcasıAşağı SaksoncaFlamancaBrezilya Portekizcesi" + + "Avrupa PortekizcesiMoldovacaSırp-Hırvat DiliKongo SvahiliBasitleştirilmi" + + "ş ÇinceGeleneksel Çince" + +var trLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000b, 0x0013, 0x001d, 0x0021, 0x0028, 0x0030, + 0x0037, 0x003e, 0x0047, 0x004d, 0x0054, 0x0060, 0x006a, 0x0072, + 0x0079, 0x0080, 0x0088, 0x0090, 0x0098, 0x00a2, 0x00ab, 0x00b4, + 0x00c1, 0x00ca, 0x00cf, 0x00d6, 0x00e6, 0x00f0, 0x00f5, 0x00fa, + 0x0101, 0x010c, 0x0114, 0x0117, 0x011e, 0x0128, 0x0131, 0x013c, + 0x0143, 0x014a, 0x0151, 0x015a, 0x015f, 0x0168, 0x0172, 0x017c, + 0x018a, 0x0194, 0x01a4, 0x01ae, 0x01ba, 0x01c5, 0x01ca, 0x01d4, + 0x01dd, 0x01e4, 0x01ed, 0x01f7, 0x0204, 0x020b, 0x0213, 0x021e, + // Entry 40 - 7F + 0x0229, 0x0232, 0x023d, 0x0246, 0x0250, 0x025b, 0x025e, 0x0268, + 0x0272, 0x027d, 0x0284, 0x028d, 0x0296, 0x02a0, 0x02a6, 0x02ae, + 0x02b6, 0x02c4, 0x02ca, 0x02d6, 0x02dc, 0x02e7, 0x02f3, 0x02fb, + 0x02ff, 0x030a, 0x0314, 0x031b, 0x0328, 0x032d, 0x0336, 0x033d, + 0x0345, 0x034d, 0x0359, 0x0360, 0x036a, 0x0380, 0x038a, 0x0393, + 0x03a1, 0x03a9, 0x03b0, 0x03b7, 0x03be, 0x03c5, 0x03cf, 0x03dc, + 0x03e3, 0x03e9, 0x03f4, 0x0406, 0x0418, 0x0426, 0x0431, 0x0437, + 0x0443, 0x044e, 0x0458, 0x0462, 0x0469, 0x0472, 0x0476, 0x047c, + // Entry 80 - BF + 0x0484, 0x048e, 0x049a, 0x04a4, 0x04ab, 0x04b2, 0x04b8, 0x04c3, + 0x04cb, 0x04d8, 0x04de, 0x04ee, 0x04f3, 0x04fb, 0x0504, 0x050c, + 0x0516, 0x051b, 0x0523, 0x052d, 0x0535, 0x053c, 0x054d, 0x0557, + 0x0561, 0x0568, 0x056f, 0x057a, 0x0582, 0x0587, 0x058f, 0x0599, + 0x05a1, 0x05ab, 0x05b3, 0x05b9, 0x05c0, 0x05cb, 0x05d2, 0x05db, + 0x05e1, 0x05ea, 0x05f4, 0x05fd, 0x0605, 0x060c, 0x0614, 0x061d, + 0x0623, 0x062b, 0x0633, 0x0639, 0x063f, 0x0645, 0x064a, 0x0651, + 0x0658, 0x0668, 0x0670, 0x0675, 0x067e, 0x0687, 0x0690, 0x069a, + // Entry C0 - FF + 0x06ac, 0x06ba, 0x06c9, 0x06cf, 0x06d6, 0x06e2, 0x06e8, 0x06f4, + 0x0706, 0x0706, 0x0711, 0x071f, 0x0731, 0x0734, 0x074a, 0x0754, + 0x075a, 0x0760, 0x0769, 0x0772, 0x077e, 0x0787, 0x078c, 0x0796, + 0x079d, 0x07a6, 0x07ab, 0x07b1, 0x07b5, 0x07ba, 0x07c0, 0x07cd, + 0x07d6, 0x07db, 0x07df, 0x07ea, 0x07ed, 0x07fa, 0x0805, 0x080e, + 0x0812, 0x0819, 0x081d, 0x0823, 0x082c, 0x0831, 0x0835, 0x0839, + 0x0840, 0x0849, 0x084e, 0x0859, 0x085e, 0x086a, 0x0870, 0x087c, + 0x0887, 0x088f, 0x0898, 0x08a3, 0x08af, 0x08bc, 0x08c5, 0x08cd, + // Entry 100 - 13F + 0x08da, 0x08e2, 0x08ea, 0x08fc, 0x0918, 0x0921, 0x0929, 0x0931, + 0x0936, 0x093e, 0x0949, 0x094f, 0x0959, 0x095e, 0x0963, 0x0973, + 0x097f, 0x0984, 0x099b, 0x09a5, 0x09aa, 0x09b0, 0x09b4, 0x09b8, + 0x09c3, 0x09d4, 0x09da, 0x09de, 0x09f4, 0x0a04, 0x0a0a, 0x0a1b, + 0x0a1f, 0x0a28, 0x0a3a, 0x0a3d, 0x0a50, 0x0a67, 0x0a76, 0x0a7f, + 0x0a8b, 0x0a99, 0x0aa4, 0x0aab, 0x0ab4, 0x0ac0, 0x0ac9, 0x0ace, + 0x0ae0, 0x0ae4, 0x0aee, 0x0af6, 0x0b12, 0x0b26, 0x0b35, 0x0b3f, + 0x0b4d, 0x0b53, 0x0b5d, 0x0b6a, 0x0b7e, 0x0b88, 0x0b8e, 0x0b93, + // Entry 140 - 17F + 0x0b9b, 0x0ba2, 0x0bb0, 0x0bbb, 0x0bc9, 0x0bd8, 0x0be0, 0x0be5, + 0x0bf4, 0x0c02, 0x0c08, 0x0c0c, 0x0c18, 0x0c1d, 0x0c27, 0x0c34, + 0x0c47, 0x0c4d, 0x0c53, 0x0c5a, 0x0c6b, 0x0c7c, 0x0c88, 0x0c95, + 0x0c9f, 0x0caa, 0x0cad, 0x0cb2, 0x0cb6, 0x0cc0, 0x0cc7, 0x0ccb, + 0x0cd2, 0x0cde, 0x0ce5, 0x0ce9, 0x0cf1, 0x0cfb, 0x0d02, 0x0d0e, + 0x0d1a, 0x0d26, 0x0d2a, 0x0d32, 0x0d3a, 0x0d46, 0x0d52, 0x0d5a, + 0x0d65, 0x0d76, 0x0d7a, 0x0d83, 0x0d8c, 0x0d92, 0x0d9a, 0x0d9f, + 0x0dad, 0x0db5, 0x0dc1, 0x0dc7, 0x0dcc, 0x0dd2, 0x0ddc, 0x0de3, + // Entry 180 - 1BF + 0x0df5, 0x0dfc, 0x0e03, 0x0e0b, 0x0e15, 0x0e1a, 0x0e1e, 0x0e28, + 0x0e31, 0x0e3b, 0x0e42, 0x0e47, 0x0e4a, 0x0e50, 0x0e55, 0x0e61, + 0x0e66, 0x0e71, 0x0e75, 0x0e7b, 0x0e83, 0x0e8a, 0x0e92, 0x0e97, + 0x0e9b, 0x0ea6, 0x0eac, 0x0eb6, 0x0eba, 0x0ec2, 0x0ed9, 0x0ee7, + 0x0eee, 0x0ef4, 0x0eff, 0x0f0d, 0x0f1a, 0x0f25, 0x0f2a, 0x0f3b, + 0x0f42, 0x0f52, 0x0f59, 0x0f65, 0x0f6c, 0x0f74, 0x0f79, 0x0f7e, + 0x0f8a, 0x0f9a, 0x0fa2, 0x0fa6, 0x0fb6, 0x0fbc, 0x0fc0, 0x0fc9, + 0x0fd0, 0x0fd6, 0x0fdf, 0x0fe6, 0x0ff4, 0x0ffa, 0x1000, 0x1010, + // Entry 1C0 - 1FF + 0x1014, 0x1021, 0x1029, 0x1031, 0x1036, 0x1040, 0x1045, 0x1058, + 0x1067, 0x1073, 0x107b, 0x1085, 0x108f, 0x109a, 0x10ad, 0x10c3, + 0x10cf, 0x10db, 0x10ed, 0x10f8, 0x1103, 0x1116, 0x111f, 0x1127, + 0x1135, 0x113c, 0x1157, 0x1161, 0x116d, 0x1177, 0x1181, 0x1190, + 0x1195, 0x119c, 0x11a3, 0x11aa, 0x11b1, 0x11b8, 0x11bb, 0x11c2, + 0x11ca, 0x11db, 0x11e2, 0x11e7, 0x11ee, 0x11f8, 0x11ff, 0x1204, + 0x120d, 0x1217, 0x1226, 0x1237, 0x1242, 0x1246, 0x124a, 0x1255, + 0x1264, 0x1273, 0x127d, 0x1286, 0x128f, 0x129e, 0x12a9, 0x12bb, + // Entry 200 - 23F + 0x12c2, 0x12d3, 0x12e2, 0x12f3, 0x1303, 0x130a, 0x1317, 0x1323, + 0x132d, 0x1331, 0x1343, 0x134e, 0x1352, 0x135a, 0x1361, 0x1372, + 0x137c, 0x1385, 0x138b, 0x1390, 0x1394, 0x139a, 0x139f, 0x13a4, + 0x13a7, 0x13b3, 0x13ba, 0x13c3, 0x13ca, 0x13d4, 0x13dc, 0x13e7, + 0x13f0, 0x13f6, 0x13fc, 0x1404, 0x140d, 0x1413, 0x141a, 0x1424, + 0x142b, 0x1431, 0x1445, 0x144e, 0x1459, 0x1460, 0x1466, 0x1469, + 0x1473, 0x147c, 0x148a, 0x149d, 0x14a3, 0x14a8, 0x14ad, 0x14b3, + 0x14b9, 0x14be, 0x14c3, 0x14cb, 0x14d6, 0x14e0, 0x14e8, 0x14ec, + // Entry 240 - 27F + 0x14ef, 0x14f5, 0x14fc, 0x1501, 0x150a, 0x1512, 0x151e, 0x152d, + 0x1536, 0x1541, 0x1557, 0x155d, 0x1573, 0x1579, 0x1590, 0x159e, + 0x15b2, 0x15ce, 0x15e5, 0x15f8, 0x160d, 0x1622, 0x163e, 0x1653, + 0x1669, 0x1669, 0x167d, 0x1694, 0x16a5, 0x16ad, 0x16c2, 0x16d5, + 0x16de, 0x16f0, 0x16fd, 0x1716, 0x1727, +} // Size: 1250 bytes + +const ukLangStr string = "" + // Size: 9189 bytes + "афарськаабхазькаавестійськаафрикаансаканамхарськаарагонськаарабськаассам" + + "ськааварськааймараазербайджанськабашкирськабілоруськаболгарськабісламаб" + + "амбарабенгальськатибетськабретонськабоснійськакаталонськачеченськачамор" + + "рокорсиканськакрічеськацерковнословʼянськачуваськаваллійськаданськаніме" + + "цькадівехідзонг-кеевегрецькаанглійськаесперантоіспанськаестонськабасксь" + + "каперськафулафінськафіджіфарерськафранцузьказахіднофризькаірландськагае" + + "льськагалісійськагуаранігуджаратіменкськахаусаівритгіндіхірі-мотухорват" + + "ськагаїтянськаугорськавірменськагерероінтерлінгваіндонезійськаінтерлінг" + + "веігбосичуаньінупіакідоісландськаіталійськаінуктітутяпонськаяванськагру" + + "зинськаконґолезькакікуйюкунамаказахськакалааллісуткхмерськаканнадакорей" + + "ськаканурікашмірськакурдськакомікорнійськакиргизькалатинськалюксембурзь" + + "кагандалімбургійськалінгалалаоськалитовськалуба-катангалатвійськамалага" + + "сійськамаршалльськамаорімакедонськамалаяламмонгольськамаратхімалайськам" + + "альтійськабірманськанаурундебелє північнанепальськандонгаголландськанюн" + + "ошк (Норвегія)букмол (Норвегія)ндебелє південнанавахоньянджаокитаноджіб" + + "ваоромооріяосетинськапанджабіпаліпольськапуштупортугальськакечуаретором" + + "анськарундірумунськаросійськакіньяруандасанскритсардинськасіндхісаамськ" + + "а північнасангосингальськасловацькасловенськасамоанськашонасомаліалбанс" + + "ькасербськасісватісото південнасунданськашведськасуахілітамільськателуг" + + "утаджицькатайськатигриньятуркменськатсванатонганськатурецькатсонгататар" + + "ськатаїтянськауйгурськаукраїнськаурдуузбецькавендавʼєтнамськаволапʼюква" + + "ллонськаволофкхосаідишйорубачжуанкитайськазулуськаачехськаачоліадангмеа" + + "дигейськаафрихіліагемайнськааккадськаалабамаалеутськапівденноалтайськад" + + "авньоанглійськаангікаарамейськаарауканськаараонаарапахоалжирська арабсь" + + "кааравакськаасуамериканська мова рухівастурськаавадхібалучібалійськабае" + + "рішбасабамумбатак тобагомалабеджабембабетавібенабафутбадагасхіднобелудж" + + "ійськабходжпурібікольськабінібанджарськакомсіксікабахтіарібраджбодоакус" + + "бурятськабугійськабулублінмедумбакаддокарібськакайюгаатсамсебуанськакіг" + + "ачібчачагатайськачуукськамарійськачинук жаргончокточіпевʼянчерокічейєнн" + + "курдська (сорані)коптськакримськотатарськасейшельська креольськакашубсь" + + "кадакотадаргінськатаітаделаварськаслейвдогрибськадінкаджермадогрінижньо" + + "лужицькадуаласередньонідерландськадьола-фонідіуладазагаембуефікдавньоєг" + + "ипетськаекаджукеламськасередньоанглійськаевондофангфіліппінськафонсеред" + + "ньофранцузькадавньофранцузькаарпітанськафризька північнафризька східнаф" + + "ріульськагагагаузькагайогбайягєезгільбертськасередньоверхньонімецькадав" + + "ньоверхньонімецькагондігоронталоготськагребодавньогрецьканімецька (Швей" + + "царія)гусіїкучінхайдагавайськахілігайнонхітітіхмонгверхньолужицькахупаі" + + "банськаібібіоілоканськаінгуськаложбаннгомбамачамеюдео-перськаюдео-арабс" + + "ькакаракалпацькакабільськакачінйюкамбакавікабардинськаканембутіапмаконд" + + "екабувердіанукорокхасіхотаносакськакойра чіїнікакокаленджинкімбундукомі" + + "-перм’яцькаконканікосраекпеллєкарачаєво-балкарськакарельськакурукхшамбал" + + "абафіаколоніанкумицькакутенаїладінолангіландаламбалезгінськалакотамонго" + + "лозіпівнічна лурськалуба-лулуалуїсеньолундалуомізолуйямадурськамафамага" + + "дхімайтхілімакасарськамандінгомасаїмабамокшамандарськамендемерумаврикій" + + "ська креольськасередньоірландськамакува-меетометамікмакмінангкабауманчж" + + "урськаманіпурімагавкмоссімундангкілька мовкрікмірандськамарварімиінерзя" + + "мазандеранськанеаполітанськанаманижньонімецьканеварініаськаніуеао нагак" + + "вазіонгємбунногайськадавньонорвезьканкосото північнануерневарі класична" + + "ньямвезіньянколеньоронзімаосейджосманськапангасінанськапехлевіпампангап" + + "апʼяментопалауанськанігерійсько-креольськадавньоперськафінікійсько-пуні" + + "чнапонапепруськадавньопровансальськакічераджастханірапануїраротонгаромб" + + "оциганськаарумунськарвасандавеякутськасамаритянська арамейськасамбуруса" + + "сакськасантальськангамбайсангусицилійськашотландськапівденнокурдськасен" + + "екасенаселькупськакойраборо сенідавньоірландськатачелітшанськачадійська" + + " арабськасідамопівденносаамськасаамська лулесаамська інарісаамська сколь" + + "тсонінкесогдійськасранан тонгосерерсахосукумасусушумерськакоморськасирі" + + "йська класичнасирійськатемнетесотеренотетумтигретівтокелауклінгонтлінгі" + + "ттамашекньяса тонгаток-пісінтарокоцимшиантумбукатувалутасавактувинськац" + + "ентральномароканська тамазітудмуртськаугаритськаумбундукоріньваїводська" + + "вуньовалзерськаваламоварайвашовалпірікалмицькасогаяояпянгбенємбакантонс" + + "ькасапотекськаблісса мовазенагастандартна марокканська берберськазуньїн" + + "емає мовного вмістузазакісучасна стандартна арабськапівденноазербайджан" + + "ськаверхньонімецька (Швейцарія)британська англійськаамериканська англій" + + "ськаіспанська (Європа)нижньосаксонськафламандськапортугальська (Європа)" + + "молдавськасербсько-хорватськаконгійське суахілікитайська спрощенакитайс" + + "ька традиційна" + +var ukLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0020, 0x0036, 0x0048, 0x0050, 0x0062, 0x0076, + 0x0086, 0x0098, 0x00a8, 0x00b4, 0x00d2, 0x00e6, 0x00fa, 0x010e, + 0x011c, 0x012a, 0x0140, 0x0152, 0x0166, 0x017a, 0x0190, 0x01a2, + 0x01b0, 0x01c8, 0x01ce, 0x01da, 0x0200, 0x0210, 0x0224, 0x0232, + 0x0242, 0x024e, 0x025d, 0x0263, 0x0271, 0x0285, 0x0297, 0x02a9, + 0x02bb, 0x02cb, 0x02d9, 0x02e1, 0x02ef, 0x02f9, 0x030b, 0x031f, + 0x033b, 0x034f, 0x0361, 0x0377, 0x0385, 0x0397, 0x03a7, 0x03b1, + 0x03bb, 0x03c5, 0x03d6, 0x03ea, 0x03fe, 0x040e, 0x0422, 0x042e, + // Entry 40 - 7F + 0x0444, 0x045e, 0x0474, 0x047c, 0x048a, 0x0498, 0x049e, 0x04b2, + 0x04c6, 0x04d8, 0x04e8, 0x04f8, 0x050c, 0x0522, 0x052e, 0x053a, + 0x054c, 0x0562, 0x0574, 0x0582, 0x0594, 0x05a0, 0x05b4, 0x05c4, + 0x05cc, 0x05e0, 0x05f2, 0x0604, 0x061e, 0x0628, 0x0642, 0x0650, + 0x065e, 0x0670, 0x0687, 0x069b, 0x06b5, 0x06cd, 0x06d7, 0x06ed, + 0x06fd, 0x0713, 0x0721, 0x0733, 0x0749, 0x075d, 0x0767, 0x0786, + 0x079a, 0x07a6, 0x07bc, 0x07db, 0x07fa, 0x0819, 0x0825, 0x0833, + 0x083f, 0x084d, 0x0857, 0x085f, 0x0873, 0x0883, 0x088b, 0x089b, + // Entry 80 - BF + 0x08a5, 0x08bf, 0x08c9, 0x08e3, 0x08ed, 0x08ff, 0x0911, 0x0927, + 0x0937, 0x094b, 0x0957, 0x0978, 0x0982, 0x0998, 0x09aa, 0x09be, + 0x09d2, 0x09da, 0x09e6, 0x09f8, 0x0a08, 0x0a16, 0x0a2f, 0x0a43, + 0x0a53, 0x0a61, 0x0a75, 0x0a81, 0x0a93, 0x0aa1, 0x0ab1, 0x0ac7, + 0x0ad3, 0x0ae7, 0x0af7, 0x0b03, 0x0b15, 0x0b29, 0x0b3b, 0x0b4f, + 0x0b57, 0x0b67, 0x0b71, 0x0b87, 0x0b97, 0x0bab, 0x0bb5, 0x0bbf, + 0x0bc7, 0x0bd3, 0x0bdd, 0x0bef, 0x0bff, 0x0c0f, 0x0c19, 0x0c27, + 0x0c3b, 0x0c3b, 0x0c4b, 0x0c53, 0x0c61, 0x0c73, 0x0c81, 0x0c93, + // Entry C0 - FF + 0x0c93, 0x0cb5, 0x0cd5, 0x0ce1, 0x0cf5, 0x0d0b, 0x0d17, 0x0d25, + 0x0d48, 0x0d48, 0x0d5c, 0x0d5c, 0x0d5c, 0x0d62, 0x0d8e, 0x0da0, + 0x0da0, 0x0dac, 0x0db8, 0x0dca, 0x0dd6, 0x0dde, 0x0de8, 0x0dfb, + 0x0e07, 0x0e11, 0x0e1b, 0x0e27, 0x0e2f, 0x0e39, 0x0e45, 0x0e69, + 0x0e7b, 0x0e8f, 0x0e97, 0x0ead, 0x0eb3, 0x0ec1, 0x0ec1, 0x0ed1, + 0x0edb, 0x0edb, 0x0ee3, 0x0eeb, 0x0efd, 0x0f0f, 0x0f17, 0x0f1f, + 0x0f2d, 0x0f37, 0x0f49, 0x0f55, 0x0f5f, 0x0f73, 0x0f7b, 0x0f85, + 0x0f9b, 0x0fab, 0x0fbd, 0x0fd4, 0x0fde, 0x0fee, 0x0ffa, 0x1006, + // Entry 100 - 13F + 0x1025, 0x1035, 0x1035, 0x1057, 0x1082, 0x1094, 0x10a0, 0x10b4, + 0x10be, 0x10d4, 0x10de, 0x10f2, 0x10fc, 0x1108, 0x1112, 0x112e, + 0x112e, 0x1138, 0x1162, 0x1175, 0x117f, 0x118b, 0x1193, 0x119b, + 0x119b, 0x11bb, 0x11c9, 0x11d9, 0x11fd, 0x11fd, 0x1209, 0x1209, + 0x1211, 0x1229, 0x1229, 0x122f, 0x122f, 0x1253, 0x1273, 0x1289, + 0x12a8, 0x12c3, 0x12d7, 0x12db, 0x12ed, 0x12ed, 0x12f5, 0x12ff, + 0x12ff, 0x1307, 0x131f, 0x131f, 0x134d, 0x1377, 0x1377, 0x1381, + 0x1393, 0x13a1, 0x13ab, 0x13c5, 0x13ea, 0x13ea, 0x13ea, 0x13f4, + // Entry 140 - 17F + 0x13fe, 0x1408, 0x1408, 0x141a, 0x141a, 0x142e, 0x143a, 0x1444, + 0x1462, 0x1462, 0x146a, 0x147a, 0x1486, 0x149a, 0x14aa, 0x14aa, + 0x14aa, 0x14b6, 0x14c2, 0x14ce, 0x14e5, 0x14fe, 0x14fe, 0x1518, + 0x152c, 0x1536, 0x153a, 0x1544, 0x154c, 0x1564, 0x1572, 0x157a, + 0x1588, 0x15a0, 0x15a0, 0x15a8, 0x15a8, 0x15b2, 0x15cc, 0x15e1, + 0x15e1, 0x15e1, 0x15e9, 0x15fb, 0x160b, 0x1629, 0x1637, 0x1643, + 0x164f, 0x1676, 0x1676, 0x1676, 0x168a, 0x1696, 0x16a4, 0x16ae, + 0x16be, 0x16ce, 0x16dc, 0x16e8, 0x16f2, 0x16fc, 0x1706, 0x171a, + // Entry 180 - 1BF + 0x171a, 0x171a, 0x171a, 0x1726, 0x1726, 0x1730, 0x1738, 0x1757, + 0x1757, 0x176a, 0x177a, 0x1784, 0x178a, 0x1792, 0x179a, 0x179a, + 0x179a, 0x17ac, 0x17b4, 0x17c2, 0x17d2, 0x17e8, 0x17f8, 0x1802, + 0x180a, 0x1814, 0x1828, 0x1832, 0x183a, 0x1867, 0x188b, 0x18a2, + 0x18aa, 0x18b6, 0x18cc, 0x18e2, 0x18f2, 0x18fe, 0x1908, 0x1908, + 0x1916, 0x1929, 0x1931, 0x1945, 0x1953, 0x1953, 0x195b, 0x1963, + 0x197f, 0x197f, 0x199b, 0x19a3, 0x19bf, 0x19cb, 0x19d9, 0x19e1, + 0x19ee, 0x19fa, 0x1a08, 0x1a1a, 0x1a38, 0x1a38, 0x1a3e, 0x1a57, + // Entry 1C0 - 1FF + 0x1a5f, 0x1a7c, 0x1a8c, 0x1a9c, 0x1aa6, 0x1ab0, 0x1abc, 0x1ace, + 0x1aea, 0x1af8, 0x1b08, 0x1b1c, 0x1b32, 0x1b32, 0x1b5d, 0x1b5d, + 0x1b5d, 0x1b77, 0x1b77, 0x1b9c, 0x1b9c, 0x1b9c, 0x1ba8, 0x1bb6, + 0x1bde, 0x1be6, 0x1be6, 0x1bfc, 0x1c0a, 0x1c1c, 0x1c1c, 0x1c1c, + 0x1c26, 0x1c38, 0x1c38, 0x1c38, 0x1c38, 0x1c4c, 0x1c52, 0x1c60, + 0x1c70, 0x1c9f, 0x1cad, 0x1cbf, 0x1cd5, 0x1cd5, 0x1ce3, 0x1ced, + 0x1d03, 0x1d19, 0x1d19, 0x1d39, 0x1d45, 0x1d4d, 0x1d4d, 0x1d63, + 0x1d7e, 0x1d9e, 0x1d9e, 0x1dac, 0x1dba, 0x1ddd, 0x1de9, 0x1de9, + // Entry 200 - 23F + 0x1de9, 0x1e09, 0x1e22, 0x1e3d, 0x1e5a, 0x1e68, 0x1e7c, 0x1e93, + 0x1e9d, 0x1ea5, 0x1ea5, 0x1eb1, 0x1eb9, 0x1ecb, 0x1edd, 0x1f00, + 0x1f12, 0x1f12, 0x1f12, 0x1f1c, 0x1f24, 0x1f30, 0x1f3a, 0x1f44, + 0x1f4a, 0x1f58, 0x1f58, 0x1f66, 0x1f74, 0x1f74, 0x1f82, 0x1f97, + 0x1fa8, 0x1fa8, 0x1fb4, 0x1fb4, 0x1fc2, 0x1fc2, 0x1fd0, 0x1fdc, + 0x1fea, 0x1ffc, 0x2035, 0x2049, 0x205d, 0x206b, 0x2077, 0x207d, + 0x207d, 0x207d, 0x207d, 0x207d, 0x208b, 0x208b, 0x2095, 0x20a9, + 0x20b5, 0x20bf, 0x20c7, 0x20d5, 0x20d5, 0x20e7, 0x20e7, 0x20ef, + // Entry 240 - 27F + 0x20f3, 0x20f7, 0x2103, 0x210b, 0x210b, 0x211f, 0x2135, 0x214a, + 0x214a, 0x2156, 0x2198, 0x21a2, 0x21c8, 0x21d4, 0x2208, 0x2236, + 0x2236, 0x2269, 0x2269, 0x2269, 0x2292, 0x22bf, 0x22bf, 0x22e0, + 0x22e0, 0x22e0, 0x22e0, 0x22e0, 0x2300, 0x2316, 0x2316, 0x233f, + 0x2353, 0x2378, 0x239b, 0x23be, 0x23e5, +} // Size: 1250 bytes + +const urLangStr string = "" + // Size: 5313 bytes + "افارابقازیانایفریکانزاکانامہاریاراگونیزعربیآسامیاواریایماراآذربائیجانیبا" + + "شکیربیلاروسیبلغاریبسلامابمبارابنگالیتبتیبریٹنبوسنیکیٹالانچیچنکموروکوراس" + + "یکنچیکچرچ سلاؤچوواشویلشڈینشجرمنڈیویہیژونگکھاایویونانیانگریزیایسپرانٹوہس" + + "پانویاسٹونینباسکیفارسیفولہفینیشفجیفیروئیزفرانسیسیمغربی فریسیئنآئیرِشسکا" + + "ٹ گیلِکگالیشیائیگُارانیگجراتیمینکسہؤساعبرانیہندیکراتیہیتیہنگیرینارمینیہ" + + "ریروبین لسانیاتانڈونیثیائیاِگبوسچوان ایایڈوآئس لینڈکاطالویاینُکٹیٹٹجاپا" + + "نیجاویجارجیکانگوکیکویوکونیاماقزاخكالاليستخمیرکنّاڈاکوریائیکانوریکشمیریک" + + "ردشکومیکورنشکرغیزیلاطینیلکسمبرگیشگینڈالیمبرگشلِنگَلالاؤلیتھوینینلبا-كات" + + "انجالیٹوینملاگاسیمارشلیزماؤریمقدونیائیمالایالممنگولینمراٹهیمالےمالٹیبرم" + + "یناؤروشمالی دبیلنیپالینڈونگاڈچنورویجینی نینورسکنارویجین بوکملجنوبی نڈیب" + + "یلینواجونیانجاآكسیٹاناورومواڑیہاوسیٹکپنجابیپولشپشتوپُرتگالیکویچوآرومانش" + + "رونڈیرومینینروسیکینیاروانڈاسنسکرتسردینینسندھیشمالی سامیساںغوسنہالاسلووا" + + "کسلووینیائیساموآنشوناصومالیالبانیسربینسواتیجنوبی سوتھوسنڈانیزسویڈشسواحل" + + "یتملتیلگوتاجکتھائیٹگرینیاترکمانسواناٹونگنترکیزونگاتاتارتاہیتییوئگہریوکر" + + "ینیائیاردوازبیکوینڈاویتنامیوولاپوکوالونوولوفژوسایدشیوروباچینیزولواچائین" + + "یزاکولیادانگمےادیگھےاغماینوالیوتجنوبی الٹائیانگیکاماپوچےاراپاہوآسواسٹور" + + "یائیاوادھیبالینیزباسابیمبابینامغربی بلوچیبھوجپوریبینیسکسیکابوڈوبگینیزبل" + + "ینسیبوآنوچیگاچوکیزماریچاکٹاؤچیروکیچینّےسورانی کردشڈاکوٹادرگواتائتادوگری" + + "بزرماذیلی سربیائیدوالاجولا فونيادزاگاامبوایفِکایکاجویایوانڈوفلیپینوفونف" + + "ریولیائیگاغاغاوزganگیزگلبرتیزگورانٹالوسوئس جرمنگسیگوئچ انhakہوائیحلی گی" + + "ننہمانگاپر سربیائیhsnہیوپاایبانابی بیوایلوکوانگوشلوجباننگومباماشیمقبائل" + + "یکاچنجے جوکامباکبارڈینتیاپماكوندهكابويرديانوکوروکھاسیكويرا شينيکاکوكالي" + + "نجينکیمبونڈوکومی پرمیاککونکنیکیپیلّےکراچے بالکرکیرلینکوروکھشامبالابافيا" + + "کولوگنیائیکومیکلیڈینولانگیلیزگیانلاکوٹالوزیشمالی لریلیوبا لولوآلونڈالوم" + + "یزولویامدورسیمگاہیمیتھیلیمکاسرماسایموکشامیندےمیروموریسیینماخاوا-ميتومیٹ" + + "امکمیکمنانگکباؤمنی پوریموہاکموسیمنڈانگمتعدد زبانیںکریکمیرانڈیزارزیامزند" + + "رانیnanنیاپولیٹنناماادنی جرمننیوارینیاسنیویائیكوايسونگیمبوننوگائیاینکوش" + + "مالی سوتھونویرنینکولپنگاسنانپامپنگاپاپیامینٹوپالاوننائجیریائی پڈگنپارسی" + + "كيشیرپانویراروتونگانرومبوارومانیرواسنڈاوےساکھاسامبوروسنتالینگامبےسانگوس" + + "یسیلینسکاٹجنوبی کردسیناكويرابورو سينیتشلحيتشانجنوبی سامیلول سامیاناری س" + + "امیسکولٹ سامیسوننکےسرانن ٹونگوساہوسکوماکوموریائیسریانیٹمنےتیسوٹیٹمٹگرےک" + + "لنگنٹوک پِسِنٹوروکوٹمبوکاتووالوتاساواقتووینینسینٹرل ایٹلس ٹمازائٹادمورت" + + "اومبوندوروٹوائیونجووالسروولایتاوارےوارلپیریwuuکالمیکسوگایانگبینیمباکینٹ" + + "ونیزاسٹینڈرڈ مراقشی تمازیقیزونیکوئی لسانی مواد نہیںزازاماڈرن اسٹینڈرڈ ع" + + "ربیآزربائیجانی (عربی)آسٹریائی جرمنسوئس ہائی جرمنآسٹریلیائی انگریزیکینیڈ" + + "ین انگریزیبرطانوی انگریزیامریکی انگریزیلاطینی امریکی ہسپانوییورپی ہسپان" + + "ویمیکسیکن ہسپانویکینیڈین فرانسیسیسوئس فرینچادنی سیکسنفلیمِشبرازیلی پرتگ" + + "الییورپی پرتگالیمالدوواسربو-کروئیشینکانگو سواحلیچینی (آسان کردہ)روایتی " + + "چینی" + +var urLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0018, 0x0018, 0x002a, 0x0032, 0x003e, 0x004e, + 0x0056, 0x0060, 0x006a, 0x0076, 0x008c, 0x0098, 0x00a8, 0x00b4, + 0x00c0, 0x00cc, 0x00d8, 0x00e0, 0x00ea, 0x00f4, 0x0102, 0x010a, + 0x0114, 0x0124, 0x0124, 0x012a, 0x0139, 0x0143, 0x014b, 0x0153, + 0x015b, 0x0167, 0x0175, 0x017b, 0x0187, 0x0195, 0x01a7, 0x01b5, + 0x01c3, 0x01cd, 0x01d7, 0x01df, 0x01e9, 0x01ef, 0x01fd, 0x020d, + 0x0226, 0x0232, 0x0245, 0x0257, 0x0265, 0x0271, 0x027b, 0x0283, + 0x028f, 0x0297, 0x0297, 0x02a1, 0x02a9, 0x02b7, 0x02c3, 0x02cd, + // Entry 40 - 7F + 0x02e2, 0x02f8, 0x02f8, 0x0302, 0x0311, 0x0311, 0x0319, 0x032a, + 0x0336, 0x0348, 0x0354, 0x035c, 0x0366, 0x0370, 0x037c, 0x038a, + 0x0392, 0x03a2, 0x03aa, 0x03b6, 0x03c4, 0x03d0, 0x03dc, 0x03e4, + 0x03ec, 0x03f6, 0x0402, 0x040e, 0x0420, 0x042a, 0x0438, 0x0446, + 0x044c, 0x045e, 0x0473, 0x047f, 0x048d, 0x049b, 0x04a5, 0x04b7, + 0x04c7, 0x04d5, 0x04e1, 0x04e9, 0x04f3, 0x04fb, 0x0505, 0x0518, + 0x0524, 0x0530, 0x0534, 0x0555, 0x0570, 0x0589, 0x0593, 0x059f, + 0x05ad, 0x05ad, 0x05b9, 0x05c1, 0x05cd, 0x05d9, 0x05d9, 0x05e1, + // Entry 80 - BF + 0x05e9, 0x05f9, 0x0605, 0x0611, 0x061b, 0x0629, 0x0631, 0x0647, + 0x0653, 0x0661, 0x066b, 0x067e, 0x0688, 0x0694, 0x06a0, 0x06b4, + 0x06c0, 0x06c8, 0x06d4, 0x06e0, 0x06ea, 0x06f4, 0x0709, 0x0717, + 0x0721, 0x072d, 0x0733, 0x073d, 0x0745, 0x074f, 0x075d, 0x0769, + 0x0773, 0x077d, 0x0785, 0x078f, 0x0799, 0x07a5, 0x07b1, 0x07c5, + 0x07cd, 0x07d7, 0x07e1, 0x07ef, 0x07fd, 0x0807, 0x0811, 0x0819, + 0x081f, 0x082b, 0x082b, 0x0833, 0x083b, 0x084b, 0x0855, 0x0863, + 0x086f, 0x086f, 0x086f, 0x0875, 0x087d, 0x087d, 0x087d, 0x0887, + // Entry C0 - FF + 0x0887, 0x089e, 0x089e, 0x08aa, 0x08aa, 0x08b6, 0x08b6, 0x08c4, + 0x08c4, 0x08c4, 0x08c4, 0x08c4, 0x08c4, 0x08ca, 0x08ca, 0x08dc, + 0x08dc, 0x08e8, 0x08e8, 0x08f6, 0x08f6, 0x08fe, 0x08fe, 0x08fe, + 0x08fe, 0x08fe, 0x0908, 0x0908, 0x0910, 0x0910, 0x0910, 0x0925, + 0x0935, 0x0935, 0x093d, 0x093d, 0x093d, 0x0949, 0x0949, 0x0949, + 0x0949, 0x0949, 0x0951, 0x0951, 0x0951, 0x095d, 0x095d, 0x0965, + 0x0965, 0x0965, 0x0965, 0x0965, 0x0965, 0x0973, 0x097b, 0x097b, + 0x097b, 0x0985, 0x098d, 0x098d, 0x0999, 0x0999, 0x09a5, 0x09af, + // Entry 100 - 13F + 0x09c4, 0x09c4, 0x09c4, 0x09c4, 0x09c4, 0x09c4, 0x09d0, 0x09da, + 0x09e4, 0x09e4, 0x09e4, 0x09f0, 0x09f0, 0x09f8, 0x09f8, 0x0a0f, + 0x0a0f, 0x0a19, 0x0a19, 0x0a2c, 0x0a2c, 0x0a36, 0x0a3e, 0x0a48, + 0x0a48, 0x0a48, 0x0a56, 0x0a56, 0x0a56, 0x0a56, 0x0a64, 0x0a64, + 0x0a64, 0x0a72, 0x0a72, 0x0a78, 0x0a78, 0x0a78, 0x0a78, 0x0a78, + 0x0a78, 0x0a78, 0x0a8a, 0x0a8e, 0x0a9a, 0x0a9d, 0x0a9d, 0x0a9d, + 0x0a9d, 0x0aa3, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab1, + 0x0ac3, 0x0ac3, 0x0ac3, 0x0ac3, 0x0ad4, 0x0ad4, 0x0ad4, 0x0ada, + // Entry 140 - 17F + 0x0ae7, 0x0ae7, 0x0aea, 0x0af4, 0x0af4, 0x0b03, 0x0b03, 0x0b0d, + 0x0b22, 0x0b25, 0x0b2f, 0x0b39, 0x0b46, 0x0b52, 0x0b5c, 0x0b5c, + 0x0b5c, 0x0b68, 0x0b74, 0x0b7e, 0x0b7e, 0x0b7e, 0x0b7e, 0x0b7e, + 0x0b8a, 0x0b92, 0x0b9b, 0x0ba5, 0x0ba5, 0x0bb3, 0x0bb3, 0x0bbb, + 0x0bc9, 0x0bdf, 0x0bdf, 0x0be7, 0x0be7, 0x0bf1, 0x0bf1, 0x0c04, + 0x0c04, 0x0c04, 0x0c0c, 0x0c1c, 0x0c2c, 0x0c41, 0x0c4d, 0x0c4d, + 0x0c5b, 0x0c70, 0x0c70, 0x0c70, 0x0c7c, 0x0c88, 0x0c96, 0x0ca0, + 0x0cb4, 0x0cbe, 0x0cbe, 0x0cca, 0x0cd4, 0x0cd4, 0x0cd4, 0x0ce2, + // Entry 180 - 1BF + 0x0ce2, 0x0ce2, 0x0ce2, 0x0cee, 0x0cee, 0x0cee, 0x0cf6, 0x0d07, + 0x0d07, 0x0d1c, 0x0d1c, 0x0d26, 0x0d2a, 0x0d32, 0x0d3a, 0x0d3a, + 0x0d3a, 0x0d46, 0x0d46, 0x0d50, 0x0d5e, 0x0d68, 0x0d68, 0x0d72, + 0x0d72, 0x0d7c, 0x0d7c, 0x0d86, 0x0d8e, 0x0d9e, 0x0d9e, 0x0db3, + 0x0dbb, 0x0dc5, 0x0dd7, 0x0dd7, 0x0de6, 0x0df0, 0x0df8, 0x0df8, + 0x0e04, 0x0e1b, 0x0e23, 0x0e33, 0x0e33, 0x0e33, 0x0e33, 0x0e3d, + 0x0e4d, 0x0e50, 0x0e62, 0x0e6a, 0x0e7b, 0x0e87, 0x0e8f, 0x0e9d, + 0x0e9d, 0x0ea9, 0x0eb7, 0x0ec3, 0x0ec3, 0x0ec3, 0x0ecd, 0x0ee2, + // Entry 1C0 - 1FF + 0x0eea, 0x0eea, 0x0eea, 0x0ef6, 0x0ef6, 0x0ef6, 0x0ef6, 0x0ef6, + 0x0f06, 0x0f06, 0x0f14, 0x0f28, 0x0f34, 0x0f34, 0x0f51, 0x0f51, + 0x0f51, 0x0f51, 0x0f51, 0x0f51, 0x0f51, 0x0f51, 0x0f51, 0x0f5b, + 0x0f5b, 0x0f63, 0x0f63, 0x0f63, 0x0f6f, 0x0f83, 0x0f83, 0x0f83, + 0x0f8d, 0x0f8d, 0x0f8d, 0x0f8d, 0x0f8d, 0x0f9b, 0x0fa1, 0x0fad, + 0x0fb7, 0x0fb7, 0x0fc5, 0x0fc5, 0x0fd1, 0x0fd1, 0x0fdd, 0x0fe7, + 0x0ff5, 0x0ffd, 0x0ffd, 0x100e, 0x100e, 0x1016, 0x1016, 0x1016, + 0x1031, 0x1031, 0x1031, 0x103d, 0x1043, 0x1043, 0x1043, 0x1043, + // Entry 200 - 23F + 0x1043, 0x1056, 0x1065, 0x1078, 0x108b, 0x1097, 0x1097, 0x10ac, + 0x10ac, 0x10b4, 0x10b4, 0x10be, 0x10be, 0x10be, 0x10d0, 0x10d0, + 0x10dc, 0x10dc, 0x10dc, 0x10e4, 0x10ec, 0x10ec, 0x10f4, 0x10fc, + 0x10fc, 0x10fc, 0x10fc, 0x1106, 0x1106, 0x1106, 0x1106, 0x1106, + 0x1117, 0x1117, 0x1123, 0x1123, 0x1123, 0x1123, 0x112f, 0x113b, + 0x1149, 0x1157, 0x117d, 0x1189, 0x1189, 0x1199, 0x119f, 0x11a7, + 0x11a7, 0x11a7, 0x11a7, 0x11a7, 0x11a7, 0x11a7, 0x11af, 0x11b9, + 0x11c7, 0x11cf, 0x11cf, 0x11df, 0x11e2, 0x11ee, 0x11ee, 0x11f6, + // Entry 240 - 27F + 0x11f6, 0x11f6, 0x1204, 0x120c, 0x120c, 0x121c, 0x121c, 0x121c, + 0x121c, 0x121c, 0x1248, 0x1250, 0x1275, 0x127d, 0x12a1, 0x12c2, + 0x12db, 0x12f5, 0x1318, 0x1335, 0x1352, 0x136d, 0x1395, 0x13ae, + 0x13cb, 0x13cb, 0x13ea, 0x13fd, 0x1410, 0x141c, 0x1439, 0x1452, + 0x1460, 0x1479, 0x1490, 0x14ac, 0x14c1, +} // Size: 1250 bytes + +const uzLangStr string = "" + // Size: 2777 bytes + "abxazafrikaansakanamxararagonarabassamavaraymaraozarbayjonboshqirdbelaru" + + "sbolgarbislamabambarabengaltibetbretonbosniykatalanchechenchamorrokorsik" + + "anchexslavyan (cherkov)chuvashvalliydatnemischadzongkaevegrekinglizchaes" + + "perantoispanchaestonchabaskforsfinchafijifarerchafransuzchag‘arbiy frizi" + + "rlandgalisiyguaranigujarotmenxausaibroniyhindxorvatgaityanvengerarmanger" + + "erointerlingvaindonezigbosichuanidoislanditalyaninuktitutyaponyavangruzi" + + "nchakikuyukvanyamaqozoqchagrenlandxmerchakannadakoreyschakanurikashmirch" + + "akurdchakomikornqirgʻizchalotinchalyuksemburgchagandalimburglingalalaosl" + + "itvaluba-katangalatishchamalagasiymarshallmaorimakedonmalayalammo‘g‘ulma" + + "ratximalaymaltiybirmannaurushimoliy ndebelenepalndongagollandnorveg-nyun" + + "orsknorveg-bokmalnavaxooromooriyaosetinpanjobchapolyakchapushtuportugalc" + + "hakechuaromanshrundirumincharuschakinyaruandasanskritsardinsindxishimoli" + + "y saamsangosingalslovakchaslovenchasamoashonasomalichaalbanserbchajanubi" + + "y sotosundanshvedsuaxilitamiltelugutojiktaytigrinyaturkmantsvanatongantu" + + "rktsongatatartaitiuyg‘urukrainurduo‘zbekvendavyetnamvolapyukvallonvolofk" + + "xosaidishyorubaxitoyzuluachinadangmeadigeyagemaynualeutjanubiy oltoyangi" + + "kaaraukanarapaxoasuasturiyavadxibembabenag‘arbiy balujbxojpuribinisiksik" + + "abodobugichigachukotchoktavcherokicheyennsorani-kurdkreol (Seyshel)dakot" + + "adargvataitadogribzarmaquyi sorbchadualadiola-fogniembuefikekajukfilipin" + + "chafongagagauzgangeezgilbertgorontalonemis (Shveytsariya)gusiigvichinhak" + + "gavaychaxmongyuqori sorbhsnxupaibanibibioilokoingushlojbanngombamachamek" + + "abilkachinkajikambakabardintyapmakondekabuverdianukorokxasikoyra-chiinik" + + "akokalenjinkimbundukomi-permyakkonkankpelleqorachoy-bolqorkarelkuruxsham" + + "balabafiyakyolnqo‘miqladinolangilezginlakotalozishimoliy luriluba-lulual" + + "undaluolushayluhyamadurmagahimaythilimakasarmasaymokshamendemerumorisyen" + + "maxuva-mittometamikmakminangkabaumohaukmossimundangbir nechta tilkrikmir" + + "andaerzyamozandaronnanneapolitannamaquyi nemisnevarniaskvasiongiyembunno" + + "‘g‘aynkoshimoliy sotonuernyankolepangasinanpampangapalaukreol (Nigeriy" + + "a)prusskicherapanuirarotonganromboaruminruandasandavesaxasamburungambays" + + "angusitsiliyashotlandjanubiy kurdsenakoyraboro-sennitashelxitshanjanubiy" + + " saamlule-saaminari-saamskolt-saamsoninkesranan-tongosukumaqamartimnetes" + + "otetumtigreklingontok-piksintarokotumbukatuvalutasavaktuvamarkaziy atlas" + + " tamazigxtudmurtumbundutub aholi tilivaivunjovarayvalbiriwuuqalmoqsogaya" + + "ngbenyembakantontamazigxtzunitil tarkibi yo‘qzazastandart arabnemis (Avs" + + "triya)yuqori nemis (Shveytsariya)ingliz (Avstraliya)ingliz (Kanada)ingli" + + "z (Britaniya)ingliz (Amerika)ispan (Lotin Amerikasi)ispan (Yevropa)ispan" + + " (Meksika)fransuz (Kanada)fransuz (Shveytsariya)quyi saksonflamandportug" + + "al (Braziliya)portugal (Yevropa)moldovansuaxili (Kongo)xitoy (soddalashg" + + "an)xitoy (an’anaviy)" + +var uzLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0005, 0x000e, 0x0012, 0x0017, 0x001d, + 0x0021, 0x0026, 0x002a, 0x0030, 0x003a, 0x0042, 0x0049, 0x004f, + 0x0056, 0x005d, 0x0063, 0x0068, 0x006e, 0x0074, 0x007b, 0x0082, + 0x008a, 0x0092, 0x0092, 0x0096, 0x00a7, 0x00ae, 0x00b4, 0x00b7, + 0x00bf, 0x00bf, 0x00c6, 0x00c9, 0x00cd, 0x00d6, 0x00df, 0x00e7, + 0x00ef, 0x00f3, 0x00f7, 0x00f7, 0x00fd, 0x0101, 0x0109, 0x0113, + 0x0121, 0x0127, 0x0127, 0x012e, 0x0135, 0x013c, 0x013f, 0x0144, + 0x014b, 0x014f, 0x014f, 0x0155, 0x015c, 0x0162, 0x0167, 0x016d, + // Entry 40 - 7F + 0x0178, 0x017f, 0x017f, 0x0183, 0x018a, 0x018a, 0x018d, 0x0193, + 0x019a, 0x01a3, 0x01a8, 0x01ad, 0x01b6, 0x01b6, 0x01bc, 0x01c4, + 0x01cc, 0x01d4, 0x01db, 0x01e2, 0x01eb, 0x01f1, 0x01fb, 0x0202, + 0x0206, 0x020a, 0x0215, 0x021d, 0x022b, 0x0230, 0x0237, 0x023e, + 0x0242, 0x0247, 0x0253, 0x025c, 0x0265, 0x026d, 0x0272, 0x0279, + 0x0282, 0x028d, 0x0294, 0x0299, 0x029f, 0x02a5, 0x02aa, 0x02ba, + 0x02bf, 0x02c5, 0x02cc, 0x02db, 0x02e8, 0x02e8, 0x02ee, 0x02ee, + 0x02ee, 0x02ee, 0x02f3, 0x02f8, 0x02fe, 0x0307, 0x0307, 0x0310, + // Entry 80 - BF + 0x0316, 0x0321, 0x0327, 0x032e, 0x0333, 0x033b, 0x0341, 0x034c, + 0x0354, 0x035a, 0x0360, 0x036d, 0x0372, 0x0378, 0x0381, 0x038a, + 0x038f, 0x0394, 0x039d, 0x03a2, 0x03a9, 0x03a9, 0x03b5, 0x03bb, + 0x03c0, 0x03c7, 0x03cc, 0x03d2, 0x03d7, 0x03da, 0x03e2, 0x03e9, + 0x03ef, 0x03f5, 0x03f9, 0x03ff, 0x0404, 0x0409, 0x0411, 0x0417, + 0x041b, 0x0423, 0x0428, 0x042f, 0x0437, 0x043d, 0x0442, 0x0447, + 0x044c, 0x0452, 0x0452, 0x0457, 0x045b, 0x0460, 0x0460, 0x0467, + 0x046d, 0x046d, 0x046d, 0x0471, 0x0475, 0x0475, 0x0475, 0x047a, + // Entry C0 - FF + 0x047a, 0x0487, 0x0487, 0x048d, 0x048d, 0x0494, 0x0494, 0x049b, + 0x049b, 0x049b, 0x049b, 0x049b, 0x049b, 0x049e, 0x049e, 0x04a5, + 0x04a5, 0x04ab, 0x04ab, 0x04ab, 0x04ab, 0x04ab, 0x04ab, 0x04ab, + 0x04ab, 0x04ab, 0x04b0, 0x04b0, 0x04b4, 0x04b4, 0x04b4, 0x04c3, + 0x04cb, 0x04cb, 0x04cf, 0x04cf, 0x04cf, 0x04d6, 0x04d6, 0x04d6, + 0x04d6, 0x04d6, 0x04da, 0x04da, 0x04da, 0x04de, 0x04de, 0x04de, + 0x04de, 0x04de, 0x04de, 0x04de, 0x04de, 0x04de, 0x04e3, 0x04e3, + 0x04e3, 0x04e9, 0x04e9, 0x04e9, 0x04f0, 0x04f0, 0x04f7, 0x04fe, + // Entry 100 - 13F + 0x0509, 0x0509, 0x0509, 0x0509, 0x0518, 0x0518, 0x051e, 0x0524, + 0x0529, 0x0529, 0x0529, 0x052f, 0x052f, 0x0534, 0x0534, 0x0540, + 0x0540, 0x0545, 0x0545, 0x0550, 0x0550, 0x0550, 0x0554, 0x0558, + 0x0558, 0x0558, 0x055e, 0x055e, 0x055e, 0x055e, 0x055e, 0x055e, + 0x055e, 0x0568, 0x0568, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, + 0x056b, 0x056b, 0x056b, 0x056d, 0x0573, 0x0576, 0x0576, 0x0576, + 0x0576, 0x057a, 0x0581, 0x0581, 0x0581, 0x0581, 0x0581, 0x0581, + 0x058a, 0x058a, 0x058a, 0x058a, 0x059e, 0x059e, 0x059e, 0x05a3, + // Entry 140 - 17F + 0x05aa, 0x05aa, 0x05ad, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05ba, + 0x05c5, 0x05c8, 0x05cc, 0x05d0, 0x05d6, 0x05db, 0x05e1, 0x05e1, + 0x05e1, 0x05e7, 0x05ed, 0x05f4, 0x05f4, 0x05f4, 0x05f4, 0x05f4, + 0x05f9, 0x05ff, 0x0603, 0x0608, 0x0608, 0x0610, 0x0610, 0x0614, + 0x061b, 0x0627, 0x0627, 0x062b, 0x062b, 0x0630, 0x0630, 0x063c, + 0x063c, 0x063c, 0x0640, 0x0648, 0x0650, 0x065c, 0x0662, 0x0662, + 0x0668, 0x0677, 0x0677, 0x0677, 0x067c, 0x0681, 0x0689, 0x068f, + 0x0694, 0x069c, 0x069c, 0x06a2, 0x06a7, 0x06a7, 0x06a7, 0x06ad, + // Entry 180 - 1BF + 0x06ad, 0x06ad, 0x06ad, 0x06b3, 0x06b3, 0x06b3, 0x06b7, 0x06c4, + 0x06c4, 0x06ce, 0x06ce, 0x06d3, 0x06d6, 0x06dc, 0x06e1, 0x06e1, + 0x06e1, 0x06e6, 0x06e6, 0x06ec, 0x06f4, 0x06fb, 0x06fb, 0x0700, + 0x0700, 0x0706, 0x0706, 0x070b, 0x070f, 0x0717, 0x0717, 0x0723, + 0x0727, 0x072d, 0x0738, 0x0738, 0x0738, 0x073e, 0x0743, 0x0743, + 0x074a, 0x0758, 0x075c, 0x0763, 0x0763, 0x0763, 0x0763, 0x0768, + 0x0772, 0x0775, 0x077f, 0x0783, 0x078d, 0x0792, 0x0796, 0x0796, + 0x0796, 0x079c, 0x07a5, 0x07b0, 0x07b0, 0x07b0, 0x07b3, 0x07c0, + // Entry 1C0 - 1FF + 0x07c4, 0x07c4, 0x07c4, 0x07cc, 0x07cc, 0x07cc, 0x07cc, 0x07cc, + 0x07d6, 0x07d6, 0x07de, 0x07de, 0x07e3, 0x07e3, 0x07f3, 0x07f3, + 0x07f3, 0x07f3, 0x07f3, 0x07f3, 0x07f3, 0x07f3, 0x07f3, 0x07f8, + 0x07f8, 0x07fd, 0x07fd, 0x07fd, 0x0804, 0x080e, 0x080e, 0x080e, + 0x0813, 0x0813, 0x0813, 0x0813, 0x0813, 0x0819, 0x081f, 0x0826, + 0x082a, 0x082a, 0x0831, 0x0831, 0x0831, 0x0831, 0x0838, 0x083d, + 0x0846, 0x084e, 0x084e, 0x085a, 0x085a, 0x085e, 0x085e, 0x085e, + 0x086d, 0x086d, 0x086d, 0x0876, 0x087a, 0x087a, 0x087a, 0x087a, + // Entry 200 - 23F + 0x087a, 0x0886, 0x088f, 0x0899, 0x08a3, 0x08aa, 0x08aa, 0x08b6, + 0x08b6, 0x08b6, 0x08b6, 0x08bc, 0x08bc, 0x08bc, 0x08c1, 0x08c1, + 0x08c1, 0x08c1, 0x08c1, 0x08c6, 0x08ca, 0x08ca, 0x08cf, 0x08d4, + 0x08d4, 0x08d4, 0x08d4, 0x08db, 0x08db, 0x08db, 0x08db, 0x08db, + 0x08e5, 0x08e5, 0x08eb, 0x08eb, 0x08eb, 0x08eb, 0x08f2, 0x08f8, + 0x08ff, 0x0903, 0x091b, 0x0921, 0x0921, 0x0928, 0x0936, 0x0939, + 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, 0x093e, 0x093e, + 0x093e, 0x0943, 0x0943, 0x094a, 0x094d, 0x0953, 0x0953, 0x0957, + // Entry 240 - 27F + 0x0957, 0x0957, 0x095e, 0x0963, 0x0963, 0x0969, 0x0969, 0x0969, + 0x0969, 0x0969, 0x0972, 0x0976, 0x0988, 0x098c, 0x0999, 0x0999, + 0x09a9, 0x09c4, 0x09d7, 0x09e6, 0x09f8, 0x0a08, 0x0a1f, 0x0a2e, + 0x0a3d, 0x0a3d, 0x0a4d, 0x0a63, 0x0a6e, 0x0a75, 0x0a89, 0x0a9b, + 0x0aa3, 0x0aa3, 0x0ab2, 0x0ac6, 0x0ad9, +} // Size: 1250 bytes + +const viLangStr string = "" + // Size: 8662 bytes + "Tiếng AfarTiếng AbkhaziaTiếng AvestanTiếng AfrikaansTiếng AkanTiếng Amha" + + "ricTiếng AragonTiếng Ả RậpTiếng AssamTiếng AvaricTiếng AymaraTiếng Azerb" + + "aijanTiếng BashkirTiếng BelarusTiếng BulgariaTiếng BislamaTiếng BambaraT" + + "iếng BanglaTiếng Tây TạngTiếng BretonTiếng BosniaTiếng CatalanTiếng Chec" + + "henTiếng ChamorroTiếng CorsicaTiếng CreeTiếng SécTiếng Slavơ Nhà thờTiến" + + "g ChuvashTiếng WalesTiếng Đan MạchTiếng ĐứcTiếng DivehiTiếng DzongkhaTiế" + + "ng EweTiếng Hy LạpTiếng AnhTiếng Quốc Tế NgữTiếng Tây Ban NhaTiếng Eston" + + "iaTiếng BasqueTiếng Ba TưTiếng FulahTiếng Phần LanTiếng FijiTiếng FaroeT" + + "iếng PhápTiếng FrisiaTiếng IrelandTiếng Gael ScotlandTiếng GalicianTiếng" + + " GuaraniTiếng GujaratiTiếng ManxTiếng HausaTiếng Do TháiTiếng HindiTiếng" + + " Hiri MotuTiếng CroatiaTiếng HaitiTiếng HungaryTiếng ArmeniaTiếng Herero" + + "Tiếng Khoa Học Quốc TếTiếng IndonesiaTiếng InterlingueTiếng IgboTiếng Di" + + " Tứ XuyênTiếng InupiaqTiếng IdoTiếng IcelandTiếng ÝTiếng InuktitutTiếng " + + "NhậtTiếng JavaTiếng GruziaTiếng KongoTiếng KikuyuTiếng KuanyamaTiếng Kaz" + + "akhTiếng KalaallisutTiếng Khơ-meTiếng KannadaTiếng HànTiếng KanuriTiếng " + + "KashmirTiếng KurdTiếng KomiTiếng CornwallTiếng KyrgyzTiếng La-tinhTiếng " + + "LuxembourgTiếng GandaTiếng LimburgTiếng LingalaTiếng LàoTiếng LitvaTiếng" + + " Luba-KatangaTiếng LatviaTiếng MalagasyTiếng MarshallTiếng MaoriTiếng Ma" + + "cedoniaTiếng MalayalamTiếng Mông CổTiếng MarathiTiếng Mã LaiTiếng MaltaT" + + "iếng Miến ĐiệnTiếng NauruTiếng Ndebele Miền BắcTiếng NepalTiếng NdongaTi" + + "ếng Hà LanTiếng Na Uy (Nynorsk)Tiếng Na Uy (Bokmål)Tiếng Ndebele Miền " + + "NamTiếng NavajoTiếng NyanjaTiếng OccitanTiếng OjibwaTiếng OromoTiếng Odi" + + "aTiếng OsseticTiếng PunjabTiếng PaliTiếng Ba LanTiếng PashtoTiếng Bồ Đào" + + " NhaTiếng QuechuaTiếng RomanshTiếng RundiTiếng RomaniaTiếng NgaTiếng Kin" + + "yarwandaTiếng PhạnTiếng SardiniaTiếng SindhiTiếng Sami Miền BắcTiếng San" + + "goTiếng SinhalaTiếng SlovakTiếng SloveniaTiếng SamoaTiếng ShonaTiếng Som" + + "aliTiếng AlbaniaTiếng SerbiaTiếng SwatiTiếng Sotho Miền NamTiếng SundaTi" + + "ếng Thụy ĐiểnTiếng SwahiliTiếng TamilTiếng TeluguTiếng TajikTiếng Thái" + + "Tiếng TigrinyaTiếng TurkmenTiếng TswanaTiếng TongaTiếng Thổ Nhĩ KỳTiếng " + + "TsongaTiếng TatarTiếng TahitiTiếng Duy Ngô NhĩTiếng UcrainaTiếng UrduTiế" + + "ng UzbekTiếng VendaTiếng ViệtTiếng VolapükTiếng WalloonTiếng WolofTiếng " + + "XhosaTiếng YiddishTiếng YorubaTiếng ChoangTiếng TrungTiếng ZuluTiếng Ach" + + "ineseTiếng AcoliTiếng AdangmeTiếng AdygheTiếng AfrihiliTiếng AghemTiếng " + + "AinuTiếng AkkadiaTiếng AlabamaTiếng AleutTiếng Gheg AlbaniTiếng Altai Mi" + + "ền NamTiếng Anh cổTiếng AngikaTiếng AramaicTiếng MapucheTiếng AraonaTi" + + "ếng ArapahoTiếng Ả Rập AlgeriaTiếng ArawakTiếng Ả Rập Ai CậpTiếng AsuN" + + "gôn ngữ Ký hiệu MỹTiếng AsturiasTiếng AwadhiTiếng BaluchiTiếng BaliTiếng" + + " BavariaTiếng BasaaTiếng BamunTiếng Batak TobaTiếng GhomalaTiếng BejaTiế" + + "ng BembaTiếng BetawiTiếng BenaTiếng BafutTiếng BadagaTiếng Tây BalochiTi" + + "ếng BhojpuriTiếng BikolTiếng BiniTiếng BanjarTiếng KomTiếng SiksikaTiế" + + "ng BishnupriyaTiếng BakhtiariTiếng BrajTiếng BrahuiTiếng BodoTiếng Akoos" + + "eTiếng BuriatTiếng BuginTiếng BuluTiếng BlinTiếng MedumbaTiếng CaddoTiến" + + "g CaribTiếng CayugaTiếng AtsamTiếng CebuanoTiếng ChigaTiếng ChibchaTiếng" + + " ChagataiTiếng ChuukTiếng MariBiệt ngữ ChinookTiếng ChoctawTiếng Chipewy" + + "anTiếng CherokeeTiếng CheyenneTiếng Kurd Miền TrungTiếng CopticTiếng Cap" + + "iznonTiếng Thổ Nhĩ Kỳ CrimeanTiếng Pháp Seselwa CreoleTiếng KashubiaTiến" + + "g DakotaTiếng DargwaTiếng TaitaTiếng DelawareTiếng SlaveTiếng DogribTiến" + + "g DinkaTiếng ZarmaTiếng DogriTiếng Hạ SorbiaTiếng Dusun Miền TrungTiếng " + + "DualaTiếng Hà Lan Trung cổTiếng Jola-FonyiTiếng DyulaTiếng DazagaTiếng E" + + "mbuTiếng EfikTiếng EmiliaTiếng Ai Cập cổTiếng EkajukTiếng ElamiteTiếng A" + + "nh Trung cổTiếng Yupik Miền TrungTiếng EwondoTiếng ExtremaduraTiếng Fang" + + "Tiếng PhilippinesTiếng FonTiếng Pháp CajunTiếng Pháp Trung cổTiếng Pháp " + + "cổTiếng ArpitanTiếng Frisia Miền BắcTiếng Frisian Miền ĐôngTiếng Friulia" + + "nTiếng GaTiếng GagauzTiếng CámTiếng GayoTiếng GbayaTiếng GeezTiếng Gilbe" + + "rtTiếng GilakiTiếng Thượng Giéc-man Trung cổTiếng Thượng Giéc-man cổTiến" + + "g Goan KonkaniTiếng GondiTiếng GorontaloTiếng Gô-tíchTiếng GreboTiếng Hy" + + " Lạp cổTiếng Đức (Thụy Sĩ)Tiếng FrafraTiếng GusiiTiếng GwichʼinTiếng Hai" + + "daTiếng Khách GiaTiếng HawaiiTiếng Fiji HindiTiếng HiligaynonTiếng Hitti" + + "teTiếng HmôngTiếng Thượng SorbiaTiếng TươngTiếng HupaTiếng IbanTiếng Ibi" + + "bioTiếng IlokoTiếng IngushTiếng IngriaTiếng Anh Jamaica CreoleTiếng Lojb" + + "anTiếng NgombaTiếng MachameTiếng Judeo-Ba TưTiếng Judeo-Ả RậpTiếng Jutis" + + "hTiếng Kara-KalpakTiếng KabyleTiếng KachinTiếng JjuTiếng KambaTiếng Kawi" + + "Tiếng KabardianTiếng KanembuTiếng TyapTiếng MakondeTiếng KabuverdianuTiế" + + "ng KoroTiếng KhasiTiếng KhotanTiếng Koyra ChiiniTiếng KakoTiếng Kalenjin" + + "Tiếng KimbunduTiếng Komi-PermyakTiếng KonkaniTiếng KosraeTiếng KpelleTiế" + + "ng Karachay-BalkarTiếng KarelianTiếng KurukhTiếng ShambalaTiếng BafiaTiế" + + "ng CologneTiếng KumykTiếng KutenaiTiếng LadinoTiếng LangiTiếng LahndaTiế" + + "ng LambaTiếng LezghianTiếng LakotaTiếng MongoTiếng LoziTiếng Bắc LuriTiế" + + "ng Luba-LuluaTiếng LuisenoTiếng LundaTiếng LuoTiếng LushaiTiếng LuyiaTiế" + + "ng MaduraTiếng MafaTiếng MagahiTiếng MaithiliTiếng MakasarTiếng Mandingo" + + "Tiếng MasaiTiếng MabaTiếng MokshaTiếng MandarTiếng MendeTiếng MeruTiếng " + + "MorisyenTiếng Ai-len Trung cổTiếng Makhuwa-MeettoTiếng Meta’Tiếng Micmac" + + "Tiếng MinangkabauTiếng Mãn ChâuTiếng ManipuriTiếng MohawkTiếng MossiTiến" + + "g MundangNhiều Ngôn ngữTiếng CreekTiếng MirandaTiếng MarwariTiếng MyeneT" + + "iếng ErzyaTiếng MazanderaniTiếng Mân NamTiếng NapoliTiếng NamaTiếng Hạ G" + + "iéc-manTiếng NewariTiếng NiasTiếng NiueanTiếng Ao NagaTiếng KwasioTiếng " + + "NgiemboonTiếng NogaiTiếng Na Uy cổTiếng N’KoTiếng Sotho Miền BắcTiếng Nu" + + "erTiếng Newari cổTiếng NyamweziTiếng NyankoleTiếng NyoroTiếng NzimaTiếng" + + " OsageTiếng Thổ Nhĩ Kỳ OttomanTiếng PangasinanTiếng PahlaviTiếng Pampang" + + "aTiếng PapiamentoTiếng PalauanTiếng Nigeria PidginTiếng Ba Tư cổTiếng Ph" + + "oeniciaTiếng PohnpeianTiếng PrussiaTiếng Provençal cổTiếng KʼicheʼTiếng " + + "Quechua ở Cao nguyên ChimborazoTiếng RajasthaniTiếng RapanuiTiếng Raroto" + + "nganTiếng RomboTiếng RomanyTiếng AromaniaTiếng RwaTiếng SandaweTiếng Sak" + + "haTiếng Samaritan AramaicTiếng SamburuTiếng SasakTiếng SantaliTiếng Ngam" + + "bayTiếng SanguTiếng SiciliaTiếng ScotsTiếng Kurd Miền NamTiếng SenecaTiế" + + "ng SenaTiếng SelkupTiếng Koyraboro SenniTiếng Ai-len cổTiếng TachelhitTi" + + "ếng ShanTiếng Ả-Rập ChadTiếng SidamoTiếng Sami Miền NamTiếng Lule Sami" + + "Tiếng Inari SamiTiếng Skolt SamiTiếng SoninkeTiếng SogdienTiếng Sranan T" + + "ongoTiếng SererTiếng SahoTiếng SukumaTiếng SusuTiếng SumeriaTiếng CômoTi" + + "ếng Syriac cổTiếng SyriacTiếng TimneTiếng TesoTiếng TerenoTiếng TetumT" + + "iếng TigreTiếng TivTiếng TokelauTiếng KlingonTiếng TlingitTiếng Tamashek" + + "Tiếng Nyasa TongaTiếng Tok PisinTiếng TarokoTiếng TsimshianTiếng Tumbuka" + + "Tiếng TuvaluTiếng TasawaqTiếng TuvinianTiếng Tamazight Miền Trung Ma-rốc" + + "Tiếng UdmurtTiếng UgariticTiếng UmbunduTiếng RootTiếng VaiTiếng VoticTiế" + + "ng VunjoTiếng WalserTiếng WalamoTiếng WarayTiếng WashoTiếng WarlpiriTiến" + + "g NgôTiếng KalmykTiếng SogaTiếng YaoTiếng YapTiếng YangbenTiếng YembaTiế" + + "ng Quảng ĐôngTiếng ZapotecKý hiệu BlissymbolsTiếng ZenagaTiếng Tamazight" + + " Chuẩn của Ma-rốcTiếng ZuniKhông có nội dung ngôn ngữTiếng ZazaTiếng Ả R" + + "ập Hiện đạiTiếng Thượng Giéc-man (Thụy Sĩ)Tiếng Anh (Anh)Tiếng Anh (Mỹ" + + ")Tiếng Tây Ban Nha (Mỹ La tinh)Tiếng Tây Ban Nha (Châu Âu)Tiếng Hạ Saxon" + + "Tiếng FlemishTiếng Bồ Đào Nha (Châu Âu)Tiếng MoldovaTiếng Serbo-CroatiaT" + + "iếng Swahili Congo" + +var viLangIdx = []uint16{ // 611 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x001c, 0x002b, 0x003c, 0x0048, 0x0057, 0x0065, + 0x0076, 0x0083, 0x0091, 0x009f, 0x00b1, 0x00c0, 0x00cf, 0x00df, + 0x00ee, 0x00fd, 0x010b, 0x011e, 0x012c, 0x013a, 0x0149, 0x0158, + 0x0168, 0x0177, 0x0183, 0x018f, 0x01a8, 0x01b7, 0x01c4, 0x01d7, + 0x01e5, 0x01f3, 0x0203, 0x020e, 0x021e, 0x0229, 0x0242, 0x0256, + 0x0265, 0x0273, 0x0281, 0x028e, 0x02a0, 0x02ac, 0x02b9, 0x02c6, + 0x02d4, 0x02e3, 0x02f8, 0x0308, 0x0317, 0x0327, 0x0333, 0x0340, + 0x0350, 0x035d, 0x036e, 0x037d, 0x038a, 0x0399, 0x03a8, 0x03b6, + // Entry 40 - 7F + 0x03d4, 0x03e5, 0x03f8, 0x0404, 0x041a, 0x0429, 0x0434, 0x0443, + 0x044d, 0x045e, 0x046c, 0x0478, 0x0486, 0x0493, 0x04a1, 0x04b1, + 0x04bf, 0x04d2, 0x04e1, 0x04f0, 0x04fc, 0x050a, 0x0519, 0x0525, + 0x0531, 0x0541, 0x054f, 0x055e, 0x0570, 0x057d, 0x058c, 0x059b, + 0x05a7, 0x05b4, 0x05c8, 0x05d6, 0x05e6, 0x05f6, 0x0603, 0x0614, + 0x0625, 0x0637, 0x0646, 0x0655, 0x0662, 0x0678, 0x0685, 0x06a1, + 0x06ae, 0x06bc, 0x06cb, 0x06e2, 0x06f9, 0x0713, 0x0721, 0x072f, + 0x073e, 0x074c, 0x0759, 0x0765, 0x0774, 0x0782, 0x078e, 0x079c, + // Entry 80 - BF + 0x07aa, 0x07c0, 0x07cf, 0x07de, 0x07eb, 0x07fa, 0x0805, 0x0818, + 0x0826, 0x0836, 0x0844, 0x085d, 0x086a, 0x0879, 0x0887, 0x0897, + 0x08a4, 0x08b1, 0x08bf, 0x08ce, 0x08dc, 0x08e9, 0x0901, 0x090e, + 0x0924, 0x0933, 0x0940, 0x094e, 0x095b, 0x0968, 0x0978, 0x0987, + 0x0995, 0x09a2, 0x09b9, 0x09c7, 0x09d4, 0x09e2, 0x09f7, 0x0a06, + 0x0a12, 0x0a1f, 0x0a2c, 0x0a3a, 0x0a4a, 0x0a59, 0x0a66, 0x0a73, + 0x0a82, 0x0a90, 0x0a9e, 0x0aab, 0x0ab7, 0x0ac7, 0x0ad4, 0x0ae3, + 0x0af1, 0x0af1, 0x0b01, 0x0b0e, 0x0b1a, 0x0b29, 0x0b38, 0x0b45, + // Entry C0 - FF + 0x0b58, 0x0b70, 0x0b80, 0x0b8e, 0x0b9d, 0x0bac, 0x0bba, 0x0bc9, + 0x0be2, 0x0be2, 0x0bf0, 0x0bf0, 0x0c0a, 0x0c15, 0x0c30, 0x0c40, + 0x0c40, 0x0c4e, 0x0c5d, 0x0c69, 0x0c78, 0x0c85, 0x0c92, 0x0ca4, + 0x0cb3, 0x0cbf, 0x0ccc, 0x0cda, 0x0ce6, 0x0cf3, 0x0d01, 0x0d15, + 0x0d25, 0x0d32, 0x0d3e, 0x0d4c, 0x0d57, 0x0d66, 0x0d79, 0x0d8a, + 0x0d96, 0x0da4, 0x0db0, 0x0dbe, 0x0dcc, 0x0dd9, 0x0de5, 0x0df1, + 0x0e00, 0x0e0d, 0x0e1a, 0x0e28, 0x0e35, 0x0e44, 0x0e51, 0x0e60, + 0x0e70, 0x0e7d, 0x0e89, 0x0e9d, 0x0eac, 0x0ebd, 0x0ecd, 0x0edd, + // Entry 100 - 13F + 0x0ef6, 0x0f04, 0x0f14, 0x0f33, 0x0f4f, 0x0f5f, 0x0f6d, 0x0f7b, + 0x0f88, 0x0f98, 0x0fa5, 0x0fb3, 0x0fc0, 0x0fcd, 0x0fda, 0x0fed, + 0x1007, 0x1014, 0x102e, 0x1040, 0x104d, 0x105b, 0x1067, 0x1073, + 0x1081, 0x1096, 0x10a4, 0x10b3, 0x10c9, 0x10e3, 0x10f1, 0x1104, + 0x1110, 0x1123, 0x1123, 0x112e, 0x1141, 0x1159, 0x116b, 0x117a, + 0x1195, 0x11b2, 0x11c2, 0x11cc, 0x11da, 0x11e6, 0x11f2, 0x11ff, + 0x11ff, 0x120b, 0x121a, 0x1228, 0x124e, 0x126e, 0x1282, 0x128f, + 0x12a0, 0x12b1, 0x12be, 0x12d3, 0x12ee, 0x12ee, 0x12fc, 0x1309, + // Entry 140 - 17F + 0x131a, 0x1327, 0x1339, 0x1347, 0x1359, 0x136b, 0x137a, 0x1388, + 0x13a0, 0x13af, 0x13bb, 0x13c7, 0x13d5, 0x13e2, 0x13f0, 0x13fe, + 0x1418, 0x1426, 0x1434, 0x1443, 0x1457, 0x146e, 0x147c, 0x148f, + 0x149d, 0x14ab, 0x14b6, 0x14c3, 0x14cf, 0x14e0, 0x14ef, 0x14fb, + 0x150a, 0x151e, 0x151e, 0x152a, 0x152a, 0x1537, 0x1545, 0x1559, + 0x1559, 0x1559, 0x1565, 0x1575, 0x1585, 0x1599, 0x15a8, 0x15b6, + 0x15c4, 0x15db, 0x15db, 0x15db, 0x15eb, 0x15f9, 0x1609, 0x1616, + 0x1625, 0x1632, 0x1641, 0x164f, 0x165c, 0x166a, 0x1677, 0x1687, + // Entry 180 - 1BF + 0x1687, 0x1687, 0x1687, 0x1695, 0x1695, 0x16a2, 0x16ae, 0x16c0, + 0x16c0, 0x16d2, 0x16e1, 0x16ee, 0x16f9, 0x1707, 0x1714, 0x1714, + 0x1714, 0x1722, 0x172e, 0x173c, 0x174c, 0x175b, 0x176b, 0x1778, + 0x1784, 0x1792, 0x17a0, 0x17ad, 0x17b9, 0x17c9, 0x17e2, 0x17f8, + 0x1807, 0x1815, 0x1828, 0x183a, 0x184a, 0x1858, 0x1865, 0x1865, + 0x1874, 0x1887, 0x1894, 0x18a3, 0x18b2, 0x18b2, 0x18bf, 0x18cc, + 0x18df, 0x18ef, 0x18fd, 0x1909, 0x191f, 0x192d, 0x1939, 0x1947, + 0x1956, 0x1964, 0x1975, 0x1982, 0x1994, 0x1994, 0x19a2, 0x19bc, + // Entry 1C0 - 1FF + 0x19c8, 0x19db, 0x19eb, 0x19fb, 0x1a08, 0x1a15, 0x1a22, 0x1a41, + 0x1a53, 0x1a62, 0x1a72, 0x1a84, 0x1a93, 0x1a93, 0x1aa9, 0x1aa9, + 0x1aa9, 0x1abc, 0x1abc, 0x1acd, 0x1acd, 0x1acd, 0x1ade, 0x1aed, + 0x1b04, 0x1b15, 0x1b3f, 0x1b51, 0x1b60, 0x1b72, 0x1b72, 0x1b72, + 0x1b7f, 0x1b8d, 0x1b8d, 0x1b8d, 0x1b8d, 0x1b9d, 0x1ba8, 0x1bb7, + 0x1bc4, 0x1bdd, 0x1bec, 0x1bf9, 0x1c08, 0x1c08, 0x1c17, 0x1c24, + 0x1c33, 0x1c40, 0x1c40, 0x1c57, 0x1c65, 0x1c71, 0x1c71, 0x1c7f, + 0x1c96, 0x1ca9, 0x1ca9, 0x1cba, 0x1cc6, 0x1cdc, 0x1cea, 0x1cea, + // Entry 200 - 23F + 0x1cea, 0x1d01, 0x1d12, 0x1d24, 0x1d36, 0x1d45, 0x1d54, 0x1d68, + 0x1d75, 0x1d81, 0x1d81, 0x1d8f, 0x1d9b, 0x1daa, 0x1db7, 0x1dca, + 0x1dd8, 0x1dd8, 0x1dd8, 0x1de5, 0x1df1, 0x1dff, 0x1e0c, 0x1e19, + 0x1e24, 0x1e33, 0x1e33, 0x1e42, 0x1e51, 0x1e51, 0x1e61, 0x1e74, + 0x1e85, 0x1e85, 0x1e93, 0x1e93, 0x1ea4, 0x1ea4, 0x1eb3, 0x1ec1, + 0x1ed0, 0x1ee0, 0x1f07, 0x1f15, 0x1f25, 0x1f34, 0x1f40, 0x1f4b, + 0x1f4b, 0x1f4b, 0x1f4b, 0x1f4b, 0x1f58, 0x1f58, 0x1f65, 0x1f73, + 0x1f81, 0x1f8e, 0x1f9b, 0x1fab, 0x1fb7, 0x1fc5, 0x1fc5, 0x1fd1, + // Entry 240 - 27F + 0x1fdc, 0x1fe7, 0x1ff6, 0x2003, 0x2003, 0x2019, 0x2028, 0x203e, + 0x203e, 0x204c, 0x2074, 0x2080, 0x20a1, 0x20ad, 0x20cc, 0x20cc, + 0x20cc, 0x20f4, 0x20f4, 0x20f4, 0x2105, 0x2117, 0x213a, 0x215a, + 0x215a, 0x215a, 0x215a, 0x215a, 0x216c, 0x217b, 0x217b, 0x219d, + 0x21ac, 0x21c1, 0x21d6, +} // Size: 1246 bytes + +const zhLangStr string = "" + // Size: 6428 bytes + "阿法尔文阿布哈西亚语阿维斯塔文南非荷兰语阿肯文阿姆哈拉文阿拉贡文阿拉伯语阿萨姆文阿瓦尔文艾马拉文阿塞拜疆语巴什基尔文白俄罗斯语保加利亚语比斯拉马" + + "文班巴拉文孟加拉语藏语布列塔尼文波斯尼亚语加泰罗尼亚语车臣文查莫罗文科西嘉文克里族文捷克语教会斯拉夫文楚瓦什文威尔士语丹麦语德文迪维希文宗卡" + + "文埃维文希腊语英语世界语西班牙文爱沙尼亚语巴斯克文波斯文富拉文芬兰语斐济文法罗文法语西弗里西亚文爱尔兰语苏格兰盖尔文加利西亚语瓜拉尼文古吉拉" + + "特语马恩岛文豪萨文希伯来语印地语希里莫图文克罗地亚语海地克里奥尔文匈牙利语亚美尼亚语赫雷罗文国际语印度尼西亚语国际文字(E)伊布文四川彝文伊" + + "努皮克文伊多文冰岛语意大利语因纽特语日语爪哇语格鲁吉亚语刚果语吉库尤文宽亚玛文哈萨克语格陵兰文高棉文卡纳达文韩文卡努里文克什米尔文库尔德文科" + + "米文凯尔特文吉尔吉斯文拉丁语卢森堡语卢干达文林堡文林加拉文老挝语立陶宛语鲁巴加丹加文拉脱维亚语马尔加什文马绍尔文毛利文马其顿文马拉雅拉姆语蒙" + + "古文马拉地文马来语马耳他文缅甸语瑙鲁文北恩德贝勒文尼泊尔语恩东加文荷兰语挪威尼诺斯克文挪威博克马尔语南恩德贝勒文纳瓦霍文尼昂加文奥克西唐文奥" + + "吉布瓦文奥洛莫文奥里亚文奥塞梯文旁遮普文巴利文波兰文普什图文葡萄牙文盖丘亚文罗曼什文隆迪文罗马尼亚文俄文卢旺达语梵文萨丁文信德文北萨米文桑戈" + + "文僧伽罗文斯洛伐克文斯洛文尼亚文萨摩亚文绍纳文索马里文阿尔巴尼亚文塞尔维亚文斯瓦蒂文南索托文巽他文瑞典语斯瓦希里文泰米尔语泰卢固语塔吉克语泰" + + "语提格利尼亚文土库曼文茨瓦纳文汤加文土耳其文聪加文鞑靼文塔西提文维吾尔语乌克兰语乌尔都语乌兹别克语文达文越南语沃拉普克文瓦隆文沃洛夫文科萨文" + + "意第绪文约鲁巴文壮语中文祖鲁语亚齐文阿乔利文阿当梅文阿迪格文阿弗里希利文亚罕文阿伊努文阿卡德文阿留申文南阿尔泰文古英文昂加文阿拉米文马普切文" + + "阿拉帕霍文阿拉瓦克文阿苏文阿斯图里亚斯文阿瓦乔文俾路支文巴里文巴萨文巴姆穆文戈马拉文贝沙文别姆巴文贝纳文巴非特文西俾路支文博杰普尔文比科尔文" + + "比尼文科姆文西克西卡文布拉杰文博多文阿库色文布里亚特文布吉文布鲁文布林文梅敦巴文卡多文加勒比语卡尤加文阿灿文宿务文奇加文奇布查文查加台文丘克" + + "文马里文奇努克混合文乔克托文奇佩维安文彻罗基文夏延文中库尔德文科普特文克里米亚土耳其文塞舌尔克里奥尔文卡舒比文达科他文达尔格瓦文台塔文特拉华" + + "文史拉维文多格里布文丁卡文哲尔马文多格拉文下索布文都阿拉文中古荷兰文朱拉文迪尤拉文达扎葛文恩布文埃菲克文古埃及语艾卡朱克文埃兰文中古英文旺杜" + + "文芳格文菲律宾语丰文中古法文古法文北弗里西亚文东弗里西亚文弗留利文加族文加告兹文赣语迦约文格巴亚文吉兹文吉尔伯特斯文中古高地德文古高地德文冈" + + "德文哥伦打洛文哥特文格列博文古希腊语德语(瑞士)古西文吉维克琴文海达文客家语夏威夷文希利盖农文赫梯文苗族文上索布文湘语胡帕文伊班文伊比比奥文" + + "伊洛干诺文印古什文逻辑文恩艮巴马切姆文犹太波斯语犹太阿拉伯语卡拉卡尔帕克文卡比尔文克钦文卡捷文卡姆巴文卡威文卡巴尔德文加涅姆布文卡塔布文马孔" + + "德文卡布佛得鲁文科罗文卡西文和田文西桑海文卡库文卡伦金文金邦杜文科米-彼尔米亚克文刚卡尼文科斯拉伊文克佩列文卡拉恰伊巴尔卡尔文卡累利阿文库鲁" + + "克文香巴拉文巴菲亚文科隆文库米克文库特奈文拉地诺文朗吉文印度-雅利安文兰巴文列兹金文拉科塔文蒙戈文洛齐文北卢尔文卢巴-卢拉文卢伊塞诺文隆达文" + + "卢奥文米佐文卢雅文马都拉文马法文马加伊文迈蒂利文望加锡文曼丁哥文萨伊文马坝文莫克沙文曼达尔文门德文梅鲁文毛里求斯克里奥尔文中古爱尔兰文马库阿" + + "文梅塔文密克马克文米南卡保文满文曼尼普尔文摩霍克文莫西文蒙当文多种语系克里克文米兰德斯文马尔瓦里文姆耶内文厄尔兹亚文马赞德兰文闽南语那不勒斯" + + "文纳马文低地德文内瓦里文尼亚斯文纽埃文夸西奥文恩甘澎文诺盖文古诺尔斯文西非书面文字北索托文努埃尔文古典尼瓦尔文尼扬韦齐文尼昂科勒文尼奥罗文恩" + + "济马文奥塞治文奥斯曼土耳其文邦阿西南文巴拉维文邦板牙文帕皮阿门托文帕劳文尼日利亚皮钦文古波斯文腓尼基文波纳佩文普鲁士文古普罗文斯文基切文拉贾" + + "斯坦文拉帕努伊文拉罗汤加文兰博文吉普赛文阿罗蒙文罗瓦文桑达韦文萨哈文萨马利亚阿拉姆文桑布鲁文萨萨克文桑塔利文甘拜文桑古文西西里文苏格兰文南库" + + "尔德文塞内卡文塞纳文塞尔库普文东桑海文古爱尔兰文希尔哈文掸文乍得阿拉伯文悉达摩文南萨米文律勒萨米文伊纳里萨米文斯科特萨米文索宁克文粟特文苏里" + + "南汤加文塞雷尔文萨霍文苏库马文苏苏文苏美尔文科摩罗文古典叙利亚文古叙利亚文泰姆奈文特索文特伦诺文德顿文提格雷文蒂夫文托克劳文克林贡文特林吉特" + + "文塔马奇克文尼亚萨汤加文托克皮辛文太鲁阁文钦西安文通布卡文图瓦卢文北桑海文图瓦文塔马齐格特文乌德穆尔特文乌加里特文翁本杜文根语言瓦伊文维普森" + + "文沃提克文温旧文瓦尔瑟文瓦拉莫文瓦瑞文瓦绍文瓦尔皮瑞文吴语卡尔梅克文索加文瑶族语雅浦文洋卞文耶姆巴文粤语萨波蒂克文布里斯符号泽纳加文标准摩洛" + + "哥塔马塞特文祖尼文无语言内容扎扎文现代标准阿拉伯语南阿塞拜疆文奥地利德文瑞士高地德文拉丁美洲西班牙文欧洲西班牙文墨西哥西班牙文低萨克森文佛兰" + + "德文巴西葡萄牙文欧洲葡萄牙文摩尔多瓦文塞尔维亚-克罗地亚文刚果斯瓦希里文简体中文繁体中文" + +var zhLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x001e, 0x002d, 0x003c, 0x0045, 0x0054, 0x0060, + 0x006c, 0x0078, 0x0084, 0x0090, 0x009f, 0x00ae, 0x00bd, 0x00cc, + 0x00db, 0x00e7, 0x00f3, 0x00f9, 0x0108, 0x0117, 0x0129, 0x0132, + 0x013e, 0x014a, 0x0156, 0x015f, 0x0171, 0x017d, 0x0189, 0x0192, + 0x0198, 0x01a4, 0x01ad, 0x01b6, 0x01bf, 0x01c5, 0x01ce, 0x01da, + 0x01e9, 0x01f5, 0x01fe, 0x0207, 0x0210, 0x0219, 0x0222, 0x0228, + 0x023a, 0x0246, 0x0258, 0x0267, 0x0273, 0x0282, 0x028e, 0x0297, + 0x02a3, 0x02ac, 0x02bb, 0x02ca, 0x02df, 0x02eb, 0x02fa, 0x0306, + // Entry 40 - 7F + 0x030f, 0x0321, 0x0334, 0x033d, 0x0349, 0x0358, 0x0361, 0x036a, + 0x0376, 0x0382, 0x0388, 0x0391, 0x03a0, 0x03a9, 0x03b5, 0x03c1, + 0x03cd, 0x03d9, 0x03e2, 0x03ee, 0x03f4, 0x0400, 0x040f, 0x041b, + 0x0424, 0x0430, 0x043f, 0x0448, 0x0454, 0x0460, 0x0469, 0x0475, + 0x047e, 0x048a, 0x049c, 0x04ab, 0x04ba, 0x04c6, 0x04cf, 0x04db, + 0x04ed, 0x04f6, 0x0502, 0x050b, 0x0517, 0x0520, 0x0529, 0x053b, + 0x0547, 0x0553, 0x055c, 0x0571, 0x0586, 0x0598, 0x05a4, 0x05b0, + 0x05bf, 0x05ce, 0x05da, 0x05e6, 0x05f2, 0x05fe, 0x0607, 0x0610, + // Entry 80 - BF + 0x061c, 0x0628, 0x0634, 0x0640, 0x0649, 0x0658, 0x065e, 0x066a, + 0x0670, 0x0679, 0x0682, 0x068e, 0x0697, 0x06a3, 0x06b2, 0x06c4, + 0x06d0, 0x06d9, 0x06e5, 0x06f7, 0x0706, 0x0712, 0x071e, 0x0727, + 0x0730, 0x073f, 0x074b, 0x0757, 0x0763, 0x0769, 0x077b, 0x0787, + 0x0793, 0x079c, 0x07a8, 0x07b1, 0x07ba, 0x07c6, 0x07d2, 0x07de, + 0x07ea, 0x07f9, 0x0802, 0x080b, 0x081a, 0x0823, 0x082f, 0x0838, + 0x0844, 0x0850, 0x0856, 0x085c, 0x0865, 0x086e, 0x087a, 0x0886, + 0x0892, 0x0892, 0x08a4, 0x08ad, 0x08b9, 0x08c5, 0x08c5, 0x08d1, + // Entry C0 - FF + 0x08d1, 0x08e0, 0x08e9, 0x08f2, 0x08fe, 0x090a, 0x090a, 0x0919, + 0x0919, 0x0919, 0x0928, 0x0928, 0x0928, 0x0931, 0x0931, 0x0946, + 0x0946, 0x0952, 0x095e, 0x0967, 0x0967, 0x0970, 0x097c, 0x097c, + 0x0988, 0x0991, 0x099d, 0x099d, 0x09a6, 0x09b2, 0x09b2, 0x09c1, + 0x09d0, 0x09dc, 0x09e5, 0x09e5, 0x09ee, 0x09fd, 0x09fd, 0x09fd, + 0x0a09, 0x0a09, 0x0a12, 0x0a1e, 0x0a2d, 0x0a36, 0x0a3f, 0x0a48, + 0x0a54, 0x0a5d, 0x0a69, 0x0a75, 0x0a7e, 0x0a87, 0x0a90, 0x0a9c, + 0x0aa8, 0x0ab1, 0x0aba, 0x0acc, 0x0ad8, 0x0ae7, 0x0af3, 0x0afc, + // Entry 100 - 13F + 0x0b0b, 0x0b17, 0x0b17, 0x0b2f, 0x0b47, 0x0b53, 0x0b5f, 0x0b6e, + 0x0b77, 0x0b83, 0x0b8f, 0x0b9e, 0x0ba7, 0x0bb3, 0x0bbf, 0x0bcb, + 0x0bcb, 0x0bd7, 0x0be6, 0x0bef, 0x0bfb, 0x0c07, 0x0c10, 0x0c1c, + 0x0c1c, 0x0c28, 0x0c37, 0x0c40, 0x0c4c, 0x0c4c, 0x0c55, 0x0c55, + 0x0c5e, 0x0c6a, 0x0c6a, 0x0c70, 0x0c70, 0x0c7c, 0x0c85, 0x0c85, + 0x0c97, 0x0ca9, 0x0cb5, 0x0cbe, 0x0cca, 0x0cd0, 0x0cd9, 0x0ce5, + 0x0ce5, 0x0cee, 0x0d00, 0x0d00, 0x0d12, 0x0d21, 0x0d21, 0x0d2a, + 0x0d39, 0x0d42, 0x0d4e, 0x0d5a, 0x0d6c, 0x0d6c, 0x0d6c, 0x0d75, + // Entry 140 - 17F + 0x0d84, 0x0d8d, 0x0d96, 0x0da2, 0x0da2, 0x0db1, 0x0dba, 0x0dc3, + 0x0dcf, 0x0dd5, 0x0dde, 0x0de7, 0x0df6, 0x0e05, 0x0e11, 0x0e11, + 0x0e11, 0x0e1a, 0x0e23, 0x0e2f, 0x0e3e, 0x0e50, 0x0e50, 0x0e65, + 0x0e71, 0x0e7a, 0x0e83, 0x0e8f, 0x0e98, 0x0ea7, 0x0eb6, 0x0ec2, + 0x0ece, 0x0ee0, 0x0ee0, 0x0ee9, 0x0ee9, 0x0ef2, 0x0efb, 0x0f07, + 0x0f07, 0x0f07, 0x0f10, 0x0f1c, 0x0f28, 0x0f41, 0x0f4d, 0x0f5c, + 0x0f68, 0x0f83, 0x0f83, 0x0f83, 0x0f92, 0x0f9e, 0x0faa, 0x0fb6, + 0x0fbf, 0x0fcb, 0x0fd7, 0x0fe3, 0x0fec, 0x0fff, 0x1008, 0x1014, + // Entry 180 - 1BF + 0x1014, 0x1014, 0x1014, 0x1020, 0x1020, 0x1029, 0x1032, 0x103e, + 0x103e, 0x104e, 0x105d, 0x1066, 0x106f, 0x1078, 0x1081, 0x1081, + 0x1081, 0x108d, 0x1096, 0x10a2, 0x10ae, 0x10ba, 0x10c6, 0x10cf, + 0x10d8, 0x10e4, 0x10f0, 0x10f9, 0x1102, 0x111d, 0x112f, 0x113b, + 0x1144, 0x1153, 0x1162, 0x1168, 0x1177, 0x1183, 0x118c, 0x118c, + 0x1195, 0x11a1, 0x11ad, 0x11bc, 0x11cb, 0x11cb, 0x11d7, 0x11e6, + 0x11f5, 0x11fe, 0x120d, 0x1216, 0x1222, 0x122e, 0x123a, 0x1243, + 0x1243, 0x124f, 0x125b, 0x1264, 0x1273, 0x1273, 0x1285, 0x1291, + // Entry 1C0 - 1FF + 0x129d, 0x12af, 0x12be, 0x12cd, 0x12d9, 0x12e5, 0x12f1, 0x1306, + 0x1315, 0x1321, 0x132d, 0x133f, 0x1348, 0x1348, 0x135d, 0x135d, + 0x135d, 0x1369, 0x1369, 0x1375, 0x1375, 0x1375, 0x1381, 0x138d, + 0x139f, 0x13a8, 0x13a8, 0x13b7, 0x13c6, 0x13d5, 0x13d5, 0x13d5, + 0x13de, 0x13ea, 0x13ea, 0x13ea, 0x13ea, 0x13f6, 0x13ff, 0x140b, + 0x1414, 0x142c, 0x1438, 0x1444, 0x1450, 0x1450, 0x1459, 0x1462, + 0x146e, 0x147a, 0x147a, 0x1489, 0x1495, 0x149e, 0x149e, 0x14ad, + 0x14b9, 0x14c8, 0x14c8, 0x14d4, 0x14da, 0x14ec, 0x14f8, 0x14f8, + // Entry 200 - 23F + 0x14f8, 0x1504, 0x1513, 0x1525, 0x1537, 0x1543, 0x154c, 0x155e, + 0x156a, 0x1573, 0x1573, 0x157f, 0x1588, 0x1594, 0x15a0, 0x15b2, + 0x15c1, 0x15c1, 0x15c1, 0x15cd, 0x15d6, 0x15e2, 0x15eb, 0x15f7, + 0x1600, 0x160c, 0x160c, 0x1618, 0x1627, 0x1627, 0x1636, 0x1648, + 0x1657, 0x1657, 0x1663, 0x1663, 0x166f, 0x166f, 0x167b, 0x1687, + 0x1693, 0x169c, 0x16ae, 0x16c0, 0x16cf, 0x16db, 0x16e4, 0x16ed, + 0x16ed, 0x16f9, 0x16f9, 0x16f9, 0x1705, 0x1705, 0x170e, 0x171a, + 0x1726, 0x172f, 0x1738, 0x1747, 0x174d, 0x175c, 0x175c, 0x1765, + // Entry 240 - 27F + 0x176e, 0x1777, 0x1780, 0x178c, 0x178c, 0x1792, 0x17a1, 0x17b0, + 0x17b0, 0x17bc, 0x17da, 0x17e3, 0x17f2, 0x17fb, 0x1813, 0x1825, + 0x1834, 0x1846, 0x1846, 0x1846, 0x1846, 0x1846, 0x185e, 0x1870, + 0x1885, 0x1885, 0x1885, 0x1885, 0x1894, 0x18a0, 0x18b2, 0x18c4, + 0x18d3, 0x18ef, 0x1904, 0x1910, 0x191c, +} // Size: 1250 bytes + +const zhHantLangStr string = "" + // Size: 7573 bytes + "阿法文阿布哈茲文阿維斯塔文南非荷蘭文阿坎文阿姆哈拉文阿拉貢文阿拉伯文阿薩姆文阿瓦爾文艾馬拉文亞塞拜然文巴什喀爾文白俄羅斯文保加利亞文比斯拉馬文班" + + "巴拉文孟加拉文藏文布列塔尼文波士尼亞文加泰蘭文車臣文查莫洛文科西嘉文克里文捷克文宗教斯拉夫文楚瓦什文威爾斯文丹麥文德文迪維西文宗卡文埃維文希" + + "臘文英文世界文西班牙文愛沙尼亞文巴斯克文波斯文富拉文芬蘭文斐濟文法羅文法文西弗里西亞文愛爾蘭文蘇格蘭蓋爾文加利西亞文瓜拉尼文古吉拉特文曼島文" + + "豪撒文希伯來文印地文西里莫圖土文克羅埃西亞文海地文匈牙利文亞美尼亞文赫雷羅文國際文印尼文國際文(E)伊布文四川彝文依奴皮維克文伊多文冰島文義" + + "大利文因紐特文日文爪哇文喬治亞文剛果文吉庫尤文廣亞馬文哈薩克文格陵蘭文高棉文坎那達文韓文卡努里文喀什米爾文庫德文科米文康瓦耳文吉爾吉斯文拉丁" + + "文盧森堡文干達文林堡文林加拉文寮文立陶宛文魯巴加丹加文拉脫維亞文馬拉加什文馬紹爾文毛利文馬其頓文馬來亞拉姆文蒙古文馬拉地文馬來文馬爾他文緬甸" + + "文諾魯文北地畢列文尼泊爾文恩東加文荷蘭文耐諾斯克挪威文巴克摩挪威文南地畢列文納瓦霍文尼揚賈文奧克西坦文奧杰布瓦文奧羅莫文歐迪亞文奧塞提文旁遮" + + "普文巴利文波蘭文普什圖文葡萄牙文蓋楚瓦文羅曼斯文隆迪文羅馬尼亞文俄文盧安達文梵文撒丁文信德文北薩米文桑戈文僧伽羅文斯洛伐克文斯洛維尼亞文薩摩" + + "亞文紹納文索馬利文阿爾巴尼亞文塞爾維亞文斯瓦特文塞索托文巽他文瑞典文史瓦希里文坦米爾文泰盧固文塔吉克文泰文提格利尼亞文土庫曼文突尼西亞文東加" + + "文土耳其文特松加文韃靼文大溪地文維吾爾文烏克蘭文烏都文烏茲別克文溫達文越南文沃拉普克文瓦隆文沃洛夫文科薩文意第緒文約魯巴文壯文中文祖魯文亞齊" + + "文阿僑利文阿當莫文阿迪各文突尼斯阿拉伯文阿弗里希利文亞罕文阿伊努文阿卡德文阿拉巴馬文阿留申文蓋格阿爾巴尼亞文南阿爾泰文古英文昂加文阿拉米文馬" + + "普切文阿拉奧納文阿拉帕霍文阿爾及利亞阿拉伯文阿拉瓦克文摩洛哥阿拉伯文埃及阿拉伯文阿蘇文美國手語阿斯圖里亞文科塔瓦文阿瓦文俾路支文峇里文巴伐利" + + "亞文巴薩文巴姆穆文巴塔克托巴文戈馬拉文貝扎文別姆巴文貝塔維文貝納文富特文巴達加文西俾路支文博傑普爾文比科爾文比尼文班亞爾文康姆文錫克錫卡文比" + + "什奴普萊利亞文巴赫蒂亞里文布拉杰文布拉維文博多文阿庫色文布里阿特文布吉斯文布魯文比林文梅敦巴文卡多文加勒比文卡尤加文阿燦文宿霧文奇加文奇布查" + + "文查加文處奇斯文馬里文契奴克文喬克托文奇佩瓦揚文柴羅基文沙伊安文中庫德文科普特文卡皮茲文土耳其文(克里米亞半島)塞席爾克里奧爾法文卡舒布文達" + + "科他文達爾格瓦文台塔文德拉瓦文斯拉夫多格里布文丁卡文扎爾馬文多格來文下索布文中部杜順文杜亞拉文中古荷蘭文朱拉文迪尤拉文達薩文恩布文埃菲克文埃" + + "米利安文古埃及文艾卡朱克文埃蘭文中古英文中尤皮克文依汪都文埃斯特雷馬杜拉文芳族文菲律賓文托爾訥芬蘭文豐文卡真法文中古法文古法文法蘭克-普羅旺" + + "斯文北弗里西亞文東弗里西亞文弗留利文加族文加告茲文贛語加約文葛巴亞文索羅亞斯德教達里文吉茲文吉爾伯特群島文吉拉基文中古高地德文古高地德文孔卡" + + "尼文岡德文科隆達羅文哥德文格列博文古希臘文德文(瑞士)瓦尤文弗拉弗拉文古西文圭契文海達文客家話夏威夷文斐濟印地文希利蓋農文赫梯文孟文上索布文" + + "湘語胡帕文伊班文伊比比奧文伊洛闊文印古什文英格里亞文牙買加克里奧爾英文邏輯文恩格姆巴文馬恰美文猶太教-波斯文猶太阿拉伯文日德蘭文卡拉卡爾帕克" + + "文卡比爾文卡琴文卡捷文卡姆巴文卡威文卡巴爾達文卡念布文卡塔布文馬孔德文卡布威爾第文肯揚文科羅文坎剛文卡西文和闐文西桑海文科瓦文北紮紮其文卡庫" + + "文卡倫金文金邦杜文科米-彼爾米亞克文貢根文科斯雷恩文克佩列文卡拉柴-包爾卡爾文塞拉利昂克裏奧爾文基那來阿文卡累利阿文庫魯科文尚巴拉文巴菲亞文" + + "科隆文庫密克文庫特奈文拉迪諾文朗吉文拉亨達文蘭巴文列茲干文新共同語言利古里亞文利伏尼亞文拉科塔文倫巴底文芒戈文洛齊文北盧爾文拉特加萊文魯巴魯" + + "魯亞文路易塞諾文盧恩達文盧奧文米佐文盧雅文文言文拉茲文馬都拉文馬法文馬加伊文邁蒂利文望加錫文曼丁哥文馬賽文馬巴文莫克沙文曼達文門德文梅魯文克" + + "里奧文(模里西斯)中古愛爾蘭文馬夸文美塔文米克馬克文米南卡堡文滿族文曼尼普爾文莫霍克文莫西文西馬里文蒙當文多種語言克里克文米蘭德斯文馬瓦里文" + + "明打威文姆耶內文厄爾茲亞文馬贊德蘭文閩南語拿波里文納馬文低地德文尼瓦爾文尼亞斯文紐埃文阿沃那加文夸西奧文恩甘澎文諾蓋文古諾爾斯文諾維亞文曼德" + + "文字 (N’Ko)北索托文努埃爾文古尼瓦爾文尼揚韋齊文尼揚科萊文尼奧囉文尼茲馬文歐塞奇文鄂圖曼土耳其文潘加辛文巴列維文潘帕嘉文帕皮阿門托文帛" + + "琉文庇卡底文奈及利亞皮欽文賓夕法尼亞德文門諾低地德文古波斯文普法爾茨德文腓尼基文皮埃蒙特文旁狄希臘文波那貝文普魯士文古普羅旺斯文基切文欽博拉" + + "索海蘭蓋丘亞文拉賈斯坦諸文復活島文拉羅通加文羅馬格諾里文里菲亞諾文蘭博文吉普賽文羅圖馬島文盧森尼亞文羅維阿納文羅馬尼亞語系羅瓦文桑達韋文雅庫" + + "特文薩瑪利亞阿拉姆文薩布魯文撒撒克文散塔利文索拉什特拉文甘拜文桑古文西西里文蘇格蘭文薩丁尼亞-薩薩里文南庫德文塞訥卡文賽納文瑟里文塞爾庫普文" + + "東桑海文古愛爾蘭文薩莫吉希亞文希爾哈文撣文阿拉伯文(查德)希達摩文下西利西亞文塞拉亞文南薩米文魯勒薩米文伊納里薩米文斯科特薩米文索尼基文索格" + + "底亞納文蘇拉南東墎文塞雷爾文薩霍文沙特菲士蘭文蘇庫馬文蘇蘇文蘇美文葛摩文古敘利亞文敘利亞文西利西亞文圖盧文提姆文特索文泰雷諾文泰頓文蒂格雷文" + + "提夫文托克勞文查庫爾文克林貢文特林基特文塔里什文塔馬奇克文東加文(尼亞薩)托比辛文圖羅尤文太魯閣文特薩克尼恩文欽西安文穆斯林塔特文圖姆布卡文" + + "吐瓦魯文北桑海文圖瓦文中阿特拉斯塔馬塞特文烏德穆爾特文烏加列文姆本杜文根語言瓦伊文威尼斯文維普森文西佛蘭德文美茵-法蘭克尼亞文沃提克文佛羅文" + + "溫舊文瓦爾瑟文瓦拉莫文瓦瑞文瓦紹文沃皮瑞文吳語卡爾梅克文明格列爾文索加文瑤文雅浦文洋卞文耶姆巴文奈恩加圖文粵語薩波特克文布列斯符號西蘭文澤納" + + "加文標準摩洛哥塔馬塞特文祖尼文無語言內容扎扎文現代標準阿拉伯文高地德文(瑞士)低地薩克遜文佛蘭芒文摩爾多瓦文塞爾維亞克羅埃西亞文史瓦希里文(" + + "剛果)簡體中文繁體中文" + +var zhHantLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0018, 0x0027, 0x0036, 0x003f, 0x004e, 0x005a, + 0x0066, 0x0072, 0x007e, 0x008a, 0x0099, 0x00a8, 0x00b7, 0x00c6, + 0x00d5, 0x00e1, 0x00ed, 0x00f3, 0x0102, 0x0111, 0x011d, 0x0126, + 0x0132, 0x013e, 0x0147, 0x0150, 0x0162, 0x016e, 0x017a, 0x0183, + 0x0189, 0x0195, 0x019e, 0x01a7, 0x01b0, 0x01b6, 0x01bf, 0x01cb, + 0x01da, 0x01e6, 0x01ef, 0x01f8, 0x0201, 0x020a, 0x0213, 0x0219, + 0x022b, 0x0237, 0x0249, 0x0258, 0x0264, 0x0273, 0x027c, 0x0285, + 0x0291, 0x029a, 0x02ac, 0x02be, 0x02c7, 0x02d3, 0x02e2, 0x02ee, + // Entry 40 - 7F + 0x02f7, 0x0300, 0x0310, 0x0319, 0x0325, 0x0337, 0x0340, 0x0349, + 0x0355, 0x0361, 0x0367, 0x0370, 0x037c, 0x0385, 0x0391, 0x039d, + 0x03a9, 0x03b5, 0x03be, 0x03ca, 0x03d0, 0x03dc, 0x03eb, 0x03f4, + 0x03fd, 0x0409, 0x0418, 0x0421, 0x042d, 0x0436, 0x043f, 0x044b, + 0x0451, 0x045d, 0x046f, 0x047e, 0x048d, 0x0499, 0x04a2, 0x04ae, + 0x04c0, 0x04c9, 0x04d5, 0x04de, 0x04ea, 0x04f3, 0x04fc, 0x050b, + 0x0517, 0x0523, 0x052c, 0x0541, 0x0553, 0x0562, 0x056e, 0x057a, + 0x0589, 0x0598, 0x05a4, 0x05b0, 0x05bc, 0x05c8, 0x05d1, 0x05da, + // Entry 80 - BF + 0x05e6, 0x05f2, 0x05fe, 0x060a, 0x0613, 0x0622, 0x0628, 0x0634, + 0x063a, 0x0643, 0x064c, 0x0658, 0x0661, 0x066d, 0x067c, 0x068e, + 0x069a, 0x06a3, 0x06af, 0x06c1, 0x06d0, 0x06dc, 0x06e8, 0x06f1, + 0x06fa, 0x0709, 0x0715, 0x0721, 0x072d, 0x0733, 0x0745, 0x0751, + 0x0760, 0x0769, 0x0775, 0x0781, 0x078a, 0x0796, 0x07a2, 0x07ae, + 0x07b7, 0x07c6, 0x07cf, 0x07d8, 0x07e7, 0x07f0, 0x07fc, 0x0805, + 0x0811, 0x081d, 0x0823, 0x0829, 0x0832, 0x083b, 0x0847, 0x0853, + 0x085f, 0x0874, 0x0886, 0x088f, 0x089b, 0x08a7, 0x08b6, 0x08c2, + // Entry C0 - FF + 0x08da, 0x08e9, 0x08f2, 0x08fb, 0x0907, 0x0913, 0x0922, 0x0931, + 0x094c, 0x094c, 0x095b, 0x0970, 0x0982, 0x098b, 0x0997, 0x09a9, + 0x09b5, 0x09be, 0x09ca, 0x09d3, 0x09e2, 0x09eb, 0x09f7, 0x0a09, + 0x0a15, 0x0a1e, 0x0a2a, 0x0a36, 0x0a3f, 0x0a48, 0x0a54, 0x0a63, + 0x0a72, 0x0a7e, 0x0a87, 0x0a93, 0x0a9c, 0x0aab, 0x0ac3, 0x0ad5, + 0x0ae1, 0x0aed, 0x0af6, 0x0b02, 0x0b11, 0x0b1d, 0x0b26, 0x0b2f, + 0x0b3b, 0x0b44, 0x0b50, 0x0b5c, 0x0b65, 0x0b6e, 0x0b77, 0x0b83, + 0x0b8c, 0x0b98, 0x0ba1, 0x0bad, 0x0bb9, 0x0bc8, 0x0bd4, 0x0be0, + // Entry 100 - 13F + 0x0bec, 0x0bf8, 0x0c04, 0x0c28, 0x0c43, 0x0c4f, 0x0c5b, 0x0c6a, + 0x0c73, 0x0c7f, 0x0c88, 0x0c97, 0x0ca0, 0x0cac, 0x0cb8, 0x0cc4, + 0x0cd3, 0x0cdf, 0x0cee, 0x0cf7, 0x0d03, 0x0d0c, 0x0d15, 0x0d21, + 0x0d30, 0x0d3c, 0x0d4b, 0x0d54, 0x0d60, 0x0d6f, 0x0d7b, 0x0d93, + 0x0d9c, 0x0da8, 0x0dba, 0x0dc0, 0x0dcc, 0x0dd8, 0x0de1, 0x0dfa, + 0x0e0c, 0x0e1e, 0x0e2a, 0x0e33, 0x0e3f, 0x0e45, 0x0e4e, 0x0e5a, + 0x0e75, 0x0e7e, 0x0e93, 0x0e9f, 0x0eb1, 0x0ec0, 0x0ecc, 0x0ed5, + 0x0ee4, 0x0eed, 0x0ef9, 0x0f05, 0x0f17, 0x0f20, 0x0f2f, 0x0f38, + // Entry 140 - 17F + 0x0f41, 0x0f4a, 0x0f53, 0x0f5f, 0x0f6e, 0x0f7d, 0x0f86, 0x0f8c, + 0x0f98, 0x0f9e, 0x0fa7, 0x0fb0, 0x0fbf, 0x0fcb, 0x0fd7, 0x0fe6, + 0x1001, 0x100a, 0x1019, 0x1025, 0x1038, 0x104a, 0x1056, 0x106b, + 0x1077, 0x1080, 0x1089, 0x1095, 0x109e, 0x10ad, 0x10b9, 0x10c5, + 0x10d1, 0x10e3, 0x10ec, 0x10f5, 0x10fe, 0x1107, 0x1110, 0x111c, + 0x1125, 0x1134, 0x113d, 0x1149, 0x1155, 0x116e, 0x1177, 0x1186, + 0x1192, 0x11ab, 0x11c6, 0x11d5, 0x11e4, 0x11f0, 0x11fc, 0x1208, + 0x1211, 0x121d, 0x1229, 0x1235, 0x123e, 0x124a, 0x1253, 0x125f, + // Entry 180 - 1BF + 0x126e, 0x127d, 0x128c, 0x1298, 0x12a4, 0x12ad, 0x12b6, 0x12c2, + 0x12d1, 0x12e3, 0x12f2, 0x12fe, 0x1307, 0x1310, 0x1319, 0x1322, + 0x132b, 0x1337, 0x1340, 0x134c, 0x1358, 0x1364, 0x1370, 0x1379, + 0x1382, 0x138e, 0x1397, 0x13a0, 0x13a9, 0x13c7, 0x13d9, 0x13e2, + 0x13eb, 0x13fa, 0x1409, 0x1412, 0x1421, 0x142d, 0x1436, 0x1442, + 0x144b, 0x1457, 0x1463, 0x1472, 0x147e, 0x148a, 0x1496, 0x14a5, + 0x14b4, 0x14bd, 0x14c9, 0x14d2, 0x14de, 0x14ea, 0x14f6, 0x14ff, + 0x150e, 0x151a, 0x1526, 0x152f, 0x153e, 0x154a, 0x155f, 0x156b, + // Entry 1C0 - 1FF + 0x1577, 0x1586, 0x1595, 0x15a4, 0x15b0, 0x15bc, 0x15c8, 0x15dd, + 0x15e9, 0x15f5, 0x1601, 0x1613, 0x161c, 0x1628, 0x163d, 0x1652, + 0x1664, 0x1670, 0x1682, 0x168e, 0x169d, 0x16ac, 0x16b8, 0x16c4, + 0x16d6, 0x16df, 0x16fd, 0x170f, 0x171b, 0x172a, 0x173c, 0x174b, + 0x1754, 0x1760, 0x176f, 0x177e, 0x178d, 0x179f, 0x17a8, 0x17b4, + 0x17c0, 0x17d8, 0x17e4, 0x17f0, 0x17fc, 0x180e, 0x1817, 0x1820, + 0x182c, 0x1838, 0x1851, 0x185d, 0x1869, 0x1872, 0x187b, 0x188a, + 0x1896, 0x18a5, 0x18b7, 0x18c3, 0x18c9, 0x18e1, 0x18ed, 0x18ff, + // Entry 200 - 23F + 0x190b, 0x1917, 0x1926, 0x1938, 0x194a, 0x1956, 0x1968, 0x197a, + 0x1986, 0x198f, 0x19a1, 0x19ad, 0x19b6, 0x19bf, 0x19c8, 0x19d7, + 0x19e3, 0x19f2, 0x19fb, 0x1a04, 0x1a0d, 0x1a19, 0x1a22, 0x1a2e, + 0x1a37, 0x1a43, 0x1a4f, 0x1a5b, 0x1a6a, 0x1a76, 0x1a85, 0x1a9d, + 0x1aa9, 0x1ab5, 0x1ac1, 0x1ad3, 0x1adf, 0x1af1, 0x1b00, 0x1b0c, + 0x1b18, 0x1b21, 0x1b3f, 0x1b51, 0x1b5d, 0x1b69, 0x1b72, 0x1b7b, + 0x1b87, 0x1b93, 0x1ba2, 0x1bbb, 0x1bc7, 0x1bd0, 0x1bd9, 0x1be5, + 0x1bf1, 0x1bfa, 0x1c03, 0x1c0f, 0x1c15, 0x1c24, 0x1c33, 0x1c3c, + // Entry 240 - 27F + 0x1c42, 0x1c4b, 0x1c54, 0x1c60, 0x1c6f, 0x1c75, 0x1c84, 0x1c93, + 0x1c9c, 0x1ca8, 0x1cc6, 0x1ccf, 0x1cde, 0x1ce7, 0x1cff, 0x1cff, + 0x1cff, 0x1d17, 0x1d17, 0x1d17, 0x1d17, 0x1d17, 0x1d17, 0x1d17, + 0x1d17, 0x1d17, 0x1d17, 0x1d17, 0x1d29, 0x1d35, 0x1d35, 0x1d35, + 0x1d44, 0x1d62, 0x1d7d, 0x1d89, 0x1d95, +} // Size: 1250 bytes + +const zuLangStr string = "" + // Size: 4670 bytes + "isi-Afarisi-Abkhaziani-Afrikaansisi-Akanisi-Amharicisi-Aragoneseisi-Arab" + + "icisi-Assameseisi-Avaricisi-Aymaraisi-Azerbaijaniisi-Bashkirisi-Belarusi" + + "anisi-Bulgarii-Bislamaisi-Bambaraisi-Bengaliisi-Tibetanisi-Bretonisi-Bos" + + "nianisi-Catalanisi-Chechenisi-Chamorroisi-Corsicanisi-Czechisi-Church Sl" + + "avicisi-Chuvashisi-Welshisi-Danishisi-Germanisi-Divehiisi-Dzongkhaisi-Ew" + + "eisi-Greeki-Englishisi-Esperantoisi-Spanishisi-Estoniaisi-Basqueisi-Pers" + + "ianisi-Fulahisi-Finnishisi-Fijianisi-Faroeseisi-Frenchisi-Western Frisia" + + "nisi-Irishi-Scottish Gaelicisi-Galiciaisi-Guaraniisi-Gujaratiisi-Manxisi" + + "-Hausaisi-Hebrewisi-Hindiisi-Croatianisi-Haitianisi-Hungarianisi-Armenia" + + "isi-Hereroizilimi ezihlangeneisi-Indonesianizimiliisi-Igboisi-Sichuan Yi" + + "isi-Idoisi-Icelandicisi-Italianisi-Inuktitutisi-Japaneseisi-Javaneseisi-" + + "Georgianisi-Kongoisi-Kikuyuisi-Kuanyamaisi-Kazakhisi-Kalaallisutisi-Khme" + + "risi-Kannadaisi-Koreanisi-Kanuriisi-Kashmiriisi-Kurdishisi-Komiisi-Corni" + + "shisi-Kyrgyzisi-Latinisi-Luxembourgishisi-Gandaisi-Limburgishisi-Lingala" + + "i-Laoisi-Lithuanianisi-Luba-Katangaisi-Latvianisi-Malagasyisi-Marshalles" + + "eisi-Maoriisi-Macedonianisi-Malayalamisi-Mongolianisi-Marathiisi-Malayis" + + "i-Malteseisi-Burmeseisi-Nauruisi-North Ndebeleisi-Nepaliisi-Ndongaisi-Du" + + "tchi-Norwegian Nynorskisi-Norwegian Bokmåli-South Ndebeleisi-Navajoisi-N" + + "yanjaisi-Occitani-Oromoisi-Odiaisi-Osseticisi-Punjabiisi-Polishisi-Pasht" + + "oisi-Portugueseisi-Quechuaisi-Romanshisi-Rundiisi-Romanianisi-Russianisi" + + "-Kinyarwandaisi-Sanskriti-Sardinianisi-Sindhiisi-Northern Samiisi-Sangoi" + + "-Sinhalaisi-Slovakisi-Slovenianisi-SamoanisiShonaisi-Somaliisi-Albaniais" + + "i-SerbianisiSwatiisiSuthuisi-Sundaneseisi-SwedishisiSwahiliisi-Tamilisi-" + + "Teluguisi-Tajikisi-Thaiisi-Tigrinyaisi-Turkmenisi-Tswanaisi-Tonganisi-Tu" + + "rkishisi-Tsongaisi-Tatarisi-Tahitianisi-Uighurisi-Ukrainianisi-Urduisi-U" + + "zbekisi-Vendaisi-Vietnameseisi-Volapükisi-Walloonisi-WolofisiXhosaisi-Yi" + + "ddishisi-Yorubaisi-ChineseisiZuluisi-Achineseisi-Acoliisi-Adangmeisi-Ady" + + "gheisi-Aghemisi-Ainuisi-Aleuti-Southern Altaiisi-Angikaisi-Mapucheisi-Ar" + + "apahoisi-Asuisi-Asturianisi-Awadhiisi-Balineseisi-Basaaisi-Bembaisi-Bena" + + "isi-Western Balochiisi-Bhojpurii-Binii-Siksikaisi-Bodoisi-Buginesei-Blin" + + "isi-Cebuanoisi-Chigaisi-Chuukeseisi-Mariisi-Choctawisi-Cherokeeisi-Cheye" + + "nneisi-Central Kurdishi-Seselwa Creole Frenchisi-Dakotaisi-Dargwaisi-Tai" + + "taisi-Dogribisi-Zarmaisi-Lower Sorbianisi-Dualaisi-Jola-Fonyiisi-Dazagai" + + "si-Embuisi-Efikisi-Ekajukisi-Ewondoisi-Filipinoisi-Fonisi-Friulianisi-Ga" + + "isi-Gagauzisi-Gan Chineseisi-Geezisi-Gilberteseisi-Gorontaloisi-Swiss Ge" + + "rmanisi-Gusliisi-Gwichʼinisi-Hakka Chineseisi-Hawaiianisi-Hiligaynonisi-" + + "Hmongisi-Upper Sorbianisi-Xiang Chineseisi-Hupaisi-Ibanisi-Ibibioisi-Ilo" + + "koisi-Ingushisi-Lojbanisi-Ngombaisi-Machameisi-Kabyleisi-Kachinisi-Jjuis" + + "i-Kambaisi-Kabardianisi-Tyapisi-Makondeisi-Kabuverdianuisi-Koroisi-Khasi" + + "isi-Koyra Chiiniisi-Kakoisi-Kalenjinisi-Kimbunduisi-Komi-Permyakisi-Konk" + + "aniisi-Kpelleisi-Karachay-Balkarisi-Karelianisi-KurukhisiShambalaisi-Baf" + + "iaisi-Colognianisi-Kumykisi-Ladinoisi-Langiisi-Lezghianisi-Lakotaisi-Loz" + + "iisi-Northern Luriisi-Luba-Luluaisi-Lundaisi-Luoisi-Mizoisi-Luyiaisi-Mad" + + "ureseisi-Magahiisi-Maithiliisi-Makasarisi-Masaiisi-Mokshaisi-Mendeisi-Me" + + "ruisi-Morisyenisi-Makhuwa-Meettoisi-Meta’isi-Micmacisi-Minangkabauisi-Ma" + + "nipuriisi-Mohawkisi-Mossiisi-Mundangizilimi ezehlukeneisi-Creekisi-Miran" + + "deseisi-Erzyaisi-Mazanderaniisi-Min Nan Chineseisi-Neapolitanisi-Namaisi" + + "-Low Germanisi-Newariisi-Niasisi-Niueanisi-Kwasioisi-Ngiemboonisi-Nogaii" + + "si-N’Koisi-Northern Sothoisi-Nuerisi-Nyankoleisi-Pangasinanisi-Pampangai" + + "si-Papiamentoisi-Palauanisi-Nigerian Pidginisi-Prussianisi-Kʼicheʼi-Rapa" + + "nuii-Rarotonganisi-Romboisi-Aromanianisi-Rwai-Sandawei-Sakhaisi-Samburui" + + "-Santaliisi-Ngambayisi-Sangui-Siciliani-Scotsi-Southern Kurdishisi-Senai" + + "si-Koyraboro Senniisi-Tachelhiti-Shani-Southern Samiisi-Lule Samiisi-Ina" + + "ri Samiisi-Skolt Samii-Soninkei-Sranan Tongoi-Sahoi-Sukumaisi-Comoriani-" + + "Syriacisi-Timneisi-Tesoisi-Tetumisi-Tigreisi-Klingonisi-Tok Pisinisi-Tar" + + "okoisi-Tumbukaisi-Tuvaluisi-Tasawaqisi-Tuvinianisi-Central Atlas Tamazig" + + "htisi-Udmurtisi-Umbundui-Rootisi-VaiisiVunjoisi-Walserisi-Wolayttaisi-Wa" + + "rayisi-Warlpiriisi-Wu Chineseisi-Kalmykisi-Sogaisi-Yangbenisi-Yembaisi-C" + + "antoneseisi-Moroccan Tamazight esivamileisi-Zuniakukho okuqukethwe kolim" + + "iisi-Zazaisi-Arabic esivamile sesimanjeisi-Austrian Germani-Swiss High G" + + "ermanisi-Austrillian Englishi-Canadian Englishi-British Englishi-America" + + "n Englishisi-Latin American Spanishi-European Spanishi-Mexican Spanishi-" + + "Canadian Frenchi-Swiss Frenchisi-Low Saxonisi-Flemishisi-Brazillian Port" + + "ugueseisi-European Portugueseisi-Moldavianisi-Serbo-Croatianisi-Congo Sw" + + "ahiliisi-Chinese (esenziwe-lula)isi-Chinese (Okosiko)" + +var zuLangIdx = []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0015, 0x0015, 0x0020, 0x0028, 0x0033, 0x0040, + 0x004a, 0x0056, 0x0060, 0x006a, 0x0079, 0x0084, 0x0092, 0x009d, + 0x00a6, 0x00b1, 0x00bc, 0x00c7, 0x00d1, 0x00dc, 0x00e7, 0x00f2, + 0x00fe, 0x010a, 0x010a, 0x0113, 0x0124, 0x012f, 0x0138, 0x0142, + 0x014c, 0x0156, 0x0162, 0x0169, 0x0172, 0x017b, 0x0188, 0x0193, + 0x019e, 0x01a8, 0x01b3, 0x01bc, 0x01c7, 0x01d1, 0x01dc, 0x01e6, + 0x01f9, 0x0202, 0x0213, 0x021e, 0x0229, 0x0235, 0x023d, 0x0246, + 0x0250, 0x0259, 0x0259, 0x0265, 0x0270, 0x027d, 0x0288, 0x0292, + // Entry 40 - 7F + 0x02a5, 0x02b3, 0x02ba, 0x02c2, 0x02d0, 0x02d0, 0x02d7, 0x02e4, + 0x02ef, 0x02fc, 0x0308, 0x0314, 0x0320, 0x0329, 0x0333, 0x033f, + 0x0349, 0x0358, 0x0361, 0x036c, 0x0376, 0x0380, 0x038c, 0x0397, + 0x039f, 0x03aa, 0x03b4, 0x03bd, 0x03ce, 0x03d7, 0x03e5, 0x03f0, + 0x03f5, 0x0403, 0x0413, 0x041e, 0x042a, 0x0439, 0x0442, 0x0450, + 0x045d, 0x046a, 0x0475, 0x047e, 0x0489, 0x0494, 0x049d, 0x04ae, + 0x04b8, 0x04c2, 0x04cb, 0x04de, 0x04f3, 0x0502, 0x050c, 0x0516, + 0x0521, 0x0521, 0x0528, 0x0530, 0x053b, 0x0546, 0x0546, 0x0550, + // Entry 80 - BF + 0x055a, 0x0568, 0x0573, 0x057e, 0x0587, 0x0593, 0x059e, 0x05ad, + 0x05b9, 0x05c4, 0x05ce, 0x05df, 0x05e8, 0x05f1, 0x05fb, 0x0608, + 0x0612, 0x061a, 0x0624, 0x062f, 0x063a, 0x0642, 0x064a, 0x0657, + 0x0662, 0x066c, 0x0675, 0x067f, 0x0688, 0x0690, 0x069c, 0x06a7, + 0x06b1, 0x06bb, 0x06c6, 0x06d0, 0x06d9, 0x06e5, 0x06ef, 0x06fc, + 0x0704, 0x070d, 0x0716, 0x0724, 0x0730, 0x073b, 0x0744, 0x074c, + 0x0757, 0x0761, 0x0761, 0x076c, 0x0773, 0x077f, 0x0788, 0x0793, + 0x079d, 0x079d, 0x079d, 0x07a6, 0x07ae, 0x07ae, 0x07ae, 0x07b7, + // Entry C0 - FF + 0x07b7, 0x07c7, 0x07c7, 0x07d1, 0x07d1, 0x07dc, 0x07dc, 0x07e7, + 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07ee, 0x07ee, 0x07fa, + 0x07fa, 0x0804, 0x0804, 0x0810, 0x0810, 0x0819, 0x0819, 0x0819, + 0x0819, 0x0819, 0x0822, 0x0822, 0x082a, 0x082a, 0x082a, 0x083d, + 0x0849, 0x0849, 0x084f, 0x084f, 0x084f, 0x0858, 0x0858, 0x0858, + 0x0858, 0x0858, 0x0860, 0x0860, 0x0860, 0x086c, 0x086c, 0x0872, + 0x0872, 0x0872, 0x0872, 0x0872, 0x0872, 0x087d, 0x0886, 0x0886, + 0x0886, 0x0892, 0x089a, 0x089a, 0x08a5, 0x08a5, 0x08b1, 0x08bd, + // Entry 100 - 13F + 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08e7, 0x08e7, 0x08f1, 0x08fb, + 0x0904, 0x0904, 0x0904, 0x090e, 0x090e, 0x0917, 0x0917, 0x0928, + 0x0928, 0x0931, 0x0931, 0x093f, 0x093f, 0x0949, 0x0951, 0x0959, + 0x0959, 0x0959, 0x0963, 0x0963, 0x0963, 0x0963, 0x096d, 0x096d, + 0x096d, 0x0979, 0x0979, 0x0980, 0x0980, 0x0980, 0x0980, 0x0980, + 0x0980, 0x0980, 0x098c, 0x0992, 0x099c, 0x09ab, 0x09ab, 0x09ab, + 0x09ab, 0x09b3, 0x09c1, 0x09c1, 0x09c1, 0x09c1, 0x09c1, 0x09c1, + 0x09ce, 0x09ce, 0x09ce, 0x09ce, 0x09de, 0x09de, 0x09de, 0x09e7, + // Entry 140 - 17F + 0x09f4, 0x09f4, 0x0a05, 0x0a11, 0x0a11, 0x0a1f, 0x0a1f, 0x0a28, + 0x0a39, 0x0a4a, 0x0a52, 0x0a5a, 0x0a64, 0x0a6d, 0x0a77, 0x0a77, + 0x0a77, 0x0a81, 0x0a8b, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, + 0x0aa0, 0x0aaa, 0x0ab1, 0x0aba, 0x0aba, 0x0ac7, 0x0ac7, 0x0acf, + 0x0ada, 0x0aea, 0x0aea, 0x0af2, 0x0af2, 0x0afb, 0x0afb, 0x0b0b, + 0x0b0b, 0x0b0b, 0x0b13, 0x0b1f, 0x0b2b, 0x0b3b, 0x0b46, 0x0b46, + 0x0b50, 0x0b63, 0x0b63, 0x0b63, 0x0b6f, 0x0b79, 0x0b84, 0x0b8d, + 0x0b9a, 0x0ba3, 0x0ba3, 0x0bad, 0x0bb6, 0x0bb6, 0x0bb6, 0x0bc2, + // Entry 180 - 1BF + 0x0bc2, 0x0bc2, 0x0bc2, 0x0bcc, 0x0bcc, 0x0bcc, 0x0bd4, 0x0be5, + 0x0be5, 0x0bf3, 0x0bf3, 0x0bfc, 0x0c03, 0x0c0b, 0x0c14, 0x0c14, + 0x0c14, 0x0c20, 0x0c20, 0x0c2a, 0x0c36, 0x0c41, 0x0c41, 0x0c4a, + 0x0c4a, 0x0c54, 0x0c54, 0x0c5d, 0x0c65, 0x0c71, 0x0c71, 0x0c83, + 0x0c8e, 0x0c98, 0x0ca7, 0x0ca7, 0x0cb3, 0x0cbd, 0x0cc6, 0x0cc6, + 0x0cd1, 0x0ce3, 0x0cec, 0x0cf9, 0x0cf9, 0x0cf9, 0x0cf9, 0x0d02, + 0x0d11, 0x0d24, 0x0d32, 0x0d3a, 0x0d48, 0x0d52, 0x0d5a, 0x0d64, + 0x0d64, 0x0d6e, 0x0d7b, 0x0d84, 0x0d84, 0x0d84, 0x0d8e, 0x0da0, + // Entry 1C0 - 1FF + 0x0da8, 0x0da8, 0x0da8, 0x0db4, 0x0db4, 0x0db4, 0x0db4, 0x0db4, + 0x0dc2, 0x0dc2, 0x0dce, 0x0ddc, 0x0de7, 0x0de7, 0x0dfa, 0x0dfa, + 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0e06, + 0x0e06, 0x0e13, 0x0e13, 0x0e13, 0x0e1c, 0x0e28, 0x0e28, 0x0e28, + 0x0e31, 0x0e31, 0x0e31, 0x0e31, 0x0e31, 0x0e3e, 0x0e45, 0x0e4e, + 0x0e55, 0x0e55, 0x0e60, 0x0e60, 0x0e69, 0x0e69, 0x0e74, 0x0e7d, + 0x0e87, 0x0e8e, 0x0e8e, 0x0ea0, 0x0ea0, 0x0ea8, 0x0ea8, 0x0ea8, + 0x0ebb, 0x0ebb, 0x0ebb, 0x0ec8, 0x0ece, 0x0ece, 0x0ece, 0x0ece, + // Entry 200 - 23F + 0x0ece, 0x0edd, 0x0eea, 0x0ef8, 0x0f06, 0x0f0f, 0x0f0f, 0x0f1d, + 0x0f1d, 0x0f23, 0x0f23, 0x0f2b, 0x0f2b, 0x0f2b, 0x0f37, 0x0f37, + 0x0f3f, 0x0f3f, 0x0f3f, 0x0f48, 0x0f50, 0x0f50, 0x0f59, 0x0f62, + 0x0f62, 0x0f62, 0x0f62, 0x0f6d, 0x0f6d, 0x0f6d, 0x0f6d, 0x0f6d, + 0x0f7a, 0x0f7a, 0x0f84, 0x0f84, 0x0f84, 0x0f84, 0x0f8f, 0x0f99, + 0x0fa4, 0x0fb0, 0x0fcb, 0x0fd5, 0x0fd5, 0x0fe0, 0x0fe6, 0x0fed, + 0x0fed, 0x0fed, 0x0fed, 0x0fed, 0x0fed, 0x0fed, 0x0ff5, 0x0fff, + 0x100b, 0x1014, 0x1014, 0x1020, 0x102e, 0x1038, 0x1038, 0x1040, + // Entry 240 - 27F + 0x1040, 0x1040, 0x104b, 0x1054, 0x1054, 0x1061, 0x1061, 0x1061, + 0x1061, 0x1061, 0x1081, 0x1089, 0x10a2, 0x10aa, 0x10c8, 0x10c8, + 0x10db, 0x10ee, 0x1105, 0x1117, 0x1128, 0x113a, 0x1154, 0x1166, + 0x1177, 0x1177, 0x1188, 0x1196, 0x11a3, 0x11ae, 0x11c7, 0x11de, + 0x11eb, 0x11fd, 0x120e, 0x1229, 0x123e, +} // Size: 1250 bytes + +// Total size for lang: 1022817 bytes (1022 KB) + +// Number of keys: 175 +var ( + scriptIndex = tagIndex{ + "", + "", + "AdlmAfakAghbAhomArabArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopoBrahBrai" + + "BugiBuhdCakmCansCariChamCherCirtCoptCprtCyrlCyrsDevaDsrtDuplEgydEgyh" + + "EgypElbaEthiGeokGeorGlagGothGranGrekGujrGuruHanbHangHaniHanoHansHant" + + "HatrHebrHiraHluwHmngHrktHungIndsItalJamoJavaJpanJurcKaliKanaKharKhmr" + + "KhojKndaKoreKpelKthiLanaLaooLatfLatgLatnLepcLimbLinaLinbLisuLomaLyci" + + "LydiMahjMandManiMarcMayaMendMercMeroMlymModiMongMoonMrooMteiMultMymr" + + "NarbNbatNewaNkgbNkooNshuOgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhli" + + "PhlpPhlvPhnxPlrdPrtiRjngRoroRunrSamrSaraSarbSaurSgnwShawShrdSiddSind" + + "SinhSoraSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTeng" + + "TfngTglgThaaThaiTibtTirhUgarVaiiVispWaraWoleXpeoXsuxYiiiZinhZmthZsye" + + "ZsymZxxxZyyyZzzz", + } +) + +var scriptHeaders = [252]header{ + { // af + afScriptStr, + afScriptIdx, + }, + {}, // agq + {}, // ak + { // am + amScriptStr, + amScriptIdx, + }, + { // ar + arScriptStr, + arScriptIdx, + }, + {}, // ar-EG + {}, // ar-LY + {}, // ar-SA + { // as + "বঙালী", + []uint16{ // 14 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, + }, + }, + {}, // asa + { // ast + "adlmafakacáucaso-albanésahomárabearamaicu imperialarmeniuavésticubalinés" + + "bamumbassa vahbatakbengalínbhkssímbolos de Blissbopomofobrahmibraill" + + "elontarabuhidchakmasilábicu unificáu de los nativos canadiensescariu" + + "chamcherokicirthcoptuxipriotacirílicueslavónicu cirílicu eclesiástic" + + "u antiguudevanagarialfabetu Deserettaquigrafía Duployédemóticu exipc" + + "ianuhieráticu exipcianuxeroglíficos exipcianoselbasanetíopekhutsuri " + + "xeorxanuxeorxanuglagolíticugóticugranthagrieguguyaratigurmukhihanbha" + + "ngulhanhanunó’ohan simplificáuhan tradicionalhatranuhebréuḥiraganaxe" + + "roglíficos anatoliospahawh hmongsilabarios xaponeseshúngaru antiguui" + + "ndusitálicu antiguujamoxavanésxaponésjurchenkayah likatakanakharosht" + + "hiḥemerkhojkicanaréscoreanukpellekaithilannalaosianufraktur llatínga" + + "élicu llatínllatínlepchalimbullinial Allinial Balfabetu de Fraserlo" + + "maliciulidiumahajanimandéumaniquéumarcxeroglíficos mayesmendemeroíti" + + "cu en cursivameroíticumalayalammodimongoltipos Moonmromeitei mayekmu" + + "ltanibirmanuárabe del norte antiguunabatéunewageba del naxin’konüshu" + + "oghamol chikiorkhonoriyaosgeosmanyapalmirenupau cin haupérmicu antig" + + "uuescritura ‘Phags-papahlavi d’inscripcionespahlavi de salteriupahla" + + "vi de llibrosfeniciufonéticu de Pollardpartu d’inscripcionesrejangro" + + "ngorongorunessamaritanusaratiárabe del sur antiguusaurashtraescritur" + + "a de signosshavianusharadasiddhamkhudabadicingaléssora sompengsondan" + + "éssyloti nagrisiriacusiriacu estrangelosiriacu occidentalsiriacu or" + + "ientaltagbanwatakritai letai lue nuevutamiltanguttai viettelugutengw" + + "artifinaghtagalogthaanatailandéstibetanutirhutaugaríticuvaifala visi" + + "blevarang kshitiwoleaipersa antiguucuneiforme sumeriu acadiuyiheredá" + + "uescritura matemáticaemojisímbolosnon escritucomúnescritura desconoc" + + "ida", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x0009, 0x001a, 0x001e, 0x0024, 0x0035, 0x003c, + 0x0045, 0x004d, 0x0052, 0x005b, 0x0060, 0x0069, 0x006d, 0x007f, + 0x0087, 0x008d, 0x0094, 0x009b, 0x00a0, 0x00a6, 0x00d4, 0x00d9, + 0x00dd, 0x00e4, 0x00e9, 0x00ee, 0x00f6, 0x00ff, 0x012a, 0x0134, + 0x0144, 0x0159, 0x016c, 0x0180, 0x0198, 0x019f, 0x01a6, 0x01b7, + 0x01bf, 0x01cb, 0x01d2, 0x01d9, 0x01df, 0x01e7, 0x01ef, 0x01f3, + 0x01f9, 0x01fc, 0x0207, 0x0217, 0x0226, 0x022d, 0x0234, 0x023e, + 0x0255, 0x0261, 0x0275, 0x0285, 0x028a, 0x029a, 0x029e, 0x02a6, + // Entry 40 - 7F + 0x02ae, 0x02b5, 0x02bd, 0x02c5, 0x02cf, 0x02d6, 0x02dc, 0x02e4, + 0x02eb, 0x02f1, 0x02f7, 0x02fc, 0x0304, 0x0313, 0x0323, 0x032a, + 0x0330, 0x0335, 0x033e, 0x0347, 0x0359, 0x035d, 0x0362, 0x0367, + 0x036f, 0x0376, 0x037f, 0x0383, 0x0396, 0x039b, 0x03b0, 0x03ba, + 0x03c3, 0x03c7, 0x03cd, 0x03d7, 0x03da, 0x03e6, 0x03ed, 0x03f4, + 0x040c, 0x0414, 0x0418, 0x0425, 0x042b, 0x0431, 0x0436, 0x043e, + 0x0444, 0x0449, 0x044d, 0x0454, 0x045d, 0x0468, 0x0478, 0x048d, + 0x04a6, 0x04b9, 0x04cb, 0x04d2, 0x04e6, 0x04fd, 0x0503, 0x050d, + // Entry 80 - BF + 0x0512, 0x051c, 0x0522, 0x0538, 0x0542, 0x0555, 0x055d, 0x0564, + 0x056b, 0x0574, 0x057d, 0x0589, 0x0592, 0x059e, 0x05a5, 0x05b7, + 0x05c9, 0x05d9, 0x05e1, 0x05e6, 0x05ec, 0x05f9, 0x05fe, 0x0604, + 0x060c, 0x0612, 0x0619, 0x0621, 0x0628, 0x062e, 0x0638, 0x0640, + 0x0647, 0x0651, 0x0654, 0x0660, 0x066d, 0x0673, 0x0680, 0x0699, + 0x069b, 0x06a3, 0x06b8, 0x06bd, 0x06c6, 0x06d1, 0x06d7, 0x06ec, + }, + }, + { // az + azScriptStr, + azScriptIdx, + }, + { // az-Cyrl + "Кирил", + []uint16{ // 30 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, + }, + }, + {}, // bas + { // be + "арабскаеармянскаебенгальскаебапамофашрыфт Брайлякірыліцадэванагарыэфіопс" + + "каегрузінскаегрэчаскаегуджарацігурмукхіхан з бапамофахангыльханспро" + + "шчанае хантрадыцыйнае ханяўрэйскаехіраганаяпонскія складовыя пісьмы" + + "чамояпонскаекатаканакхмерскаеканадакарэйскаелаоскаелацініцамалаялам" + + "старамангольскаем’янмарскаеорыясінгальскаетамільскаетэлугутанатайск" + + "аетыбецкаематэматычныя знакіэмодзісімвалыбеспісьменнаязвычайнаеневя" + + "домае пісьмо", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0022, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0038, 0x0038, 0x0038, + 0x0048, 0x0048, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, + 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x006f, 0x006f, 0x0083, + 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0095, 0x0095, + 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00bb, 0x00cd, 0x00dd, 0x00f7, + 0x0105, 0x010b, 0x010b, 0x0126, 0x0143, 0x0143, 0x0155, 0x0165, + 0x0165, 0x0165, 0x0195, 0x0195, 0x0195, 0x0195, 0x019d, 0x019d, + // Entry 40 - 7F + 0x01ad, 0x01ad, 0x01ad, 0x01bd, 0x01bd, 0x01cf, 0x01cf, 0x01db, + 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01fb, 0x01fb, 0x01fb, 0x020b, + 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, + 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, + 0x021b, 0x021b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x0252, + 0x0252, 0x0252, 0x0252, 0x0252, 0x0252, 0x0252, 0x0252, 0x0252, + 0x0252, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, + 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, + // Entry 80 - BF + 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, + 0x025a, 0x025a, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, + 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0284, 0x0284, + 0x0284, 0x0290, 0x0290, 0x0290, 0x0290, 0x0298, 0x02a6, 0x02b6, + 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, + 0x02b6, 0x02b6, 0x02d9, 0x02e5, 0x02f3, 0x030d, 0x031f, 0x033e, + }, + }, + {}, // bem + {}, // bez + { // bg + bgScriptStr, + bgScriptIdx, + }, + {}, // bm + { // bn + bnScriptStr, + bnScriptIdx, + }, + {}, // bn-IN + { // bo + "རྒྱ་ཡིག་གསར་པ།རྒྱ་ཡིག་རྙིང་པ།བོད་ཡིག་སྙན་བརྒྱུད། ཡིག་རིགས་སུ་མ་བཀོད་པའི་" + + "ཟིན་ཐོ།", + []uint16{ // 174 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x002a, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + // Entry 40 - 7F + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + // Entry 80 - BF + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x00eb, + }, + }, + {}, // bo-IN + { // br + "arabekarameek impalaerelarmenianekavestekbalinekbengalibopomofoBraillebo" + + "ugiekkoptekkirillekkirillek henslavonekdevanagarihieroglifoù egiptek" + + "etiopekjorjianekglagolitekgotekgresianekgujaratigurmukhihangeulhanha" + + "n eeunaethan hengounelhebraekhiraganahieroglifoù Anatoliahenitalekja" + + "vanekjapanekkatakanakhmerkannadakoreaneklaoseklatin gouezeleklatinhi" + + "eroglifoù mayaekmalayalammongolekmyanmarogamoriyaruneksinghaleksunda" + + "neksirieksiriek Estrangelāsiriek ar C’hornôgsiriek ar Retertamilekte" + + "lougoutagalogthaanathaitibetanekougaritekvaipersek kozhnotadur jedon" + + "ielarouezioùanskrivetboutinskritur dianav", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0018, 0x0022, + 0x0029, 0x0030, 0x0030, 0x0030, 0x0030, 0x0037, 0x0037, 0x0037, + 0x003f, 0x003f, 0x0046, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x0053, 0x0053, 0x005b, 0x006f, 0x0079, + 0x0079, 0x0079, 0x0079, 0x0079, 0x008d, 0x008d, 0x0094, 0x0094, + 0x009d, 0x00a7, 0x00ac, 0x00ac, 0x00b5, 0x00bd, 0x00c5, 0x00c5, + 0x00cc, 0x00cf, 0x00cf, 0x00da, 0x00e7, 0x00e7, 0x00ee, 0x00f6, + 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x0114, 0x0114, 0x011b, + // Entry 40 - 7F + 0x0122, 0x0122, 0x0122, 0x012a, 0x012a, 0x012f, 0x012f, 0x0136, + 0x013e, 0x013e, 0x013e, 0x013e, 0x0144, 0x0144, 0x0153, 0x0158, + 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, + 0x0158, 0x0158, 0x0158, 0x0158, 0x016b, 0x016b, 0x016b, 0x016b, + 0x0174, 0x0174, 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, 0x0183, + 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0187, 0x0187, + 0x0187, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + // Entry 80 - BF + 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, + 0x0191, 0x0191, 0x019a, 0x019a, 0x01a2, 0x01a2, 0x01a8, 0x01ba, + 0x01cf, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01e5, 0x01e5, + 0x01e5, 0x01ed, 0x01ed, 0x01ed, 0x01f4, 0x01fa, 0x01fe, 0x0207, + 0x0207, 0x0210, 0x0213, 0x0213, 0x0213, 0x0213, 0x021e, 0x021e, + 0x021e, 0x021e, 0x022e, 0x022e, 0x0238, 0x0241, 0x0247, 0x0255, + }, + }, + { // brx + "अरबीशहनशाही आरामाईकअर्मेनियाईअवस्तन्बालीबटकीबंगालीब्लीस चीन्हबोपोमोफोब्र" + + "ह्मीब्रेलबुगीनीबुहीदयुनीफाईड कैनेडियन अबॉरीजीनल सीलैबीक्सकारियनकॅम" + + "चिरूकीसिर्थकॉप्टसीप्रीओट्सिरिलिक्पुरानी चर्च सिरिलिक्देवनागरीदेसेर" + + "ट्मीस्री डैमोटीक्मीस्री हैरैटीक्मीस्री हैरोग्लीफ़्ईथोपियाईजोर्जीयन" + + " खुतसुरीजोर्जीयनग्लैगोलिटीकगौथीकग्रीकगुजरातीगुरमुखीहंगुलहानहानुनुसरल" + + "ीकृत हानपारम्परिक हानहिब्रूहीरागानापाहवाह ह्मौंगकाताकाना या हीरागा" + + "नापुरानी हंगैरीयनसिन्धुपुरानी इटैलियनजावानीसजापानीकायाह लीकाताकाना" + + "खरोष्टीख्मेरकन्नड़कोरियाईलानालाओफ्रैक्तुर लैटिनगैलीक लैटिनलैटिनलेप" + + "चालिम्बुलीनीयर एलीनीयर बीलीसीयनलीडीयनमांडेमानीकीमाया हीरोग्लीफ्मेर" + + "ोईटीक्मलयालम्मंगोलियाईमुन्मेतेई मयेकम्यानमार्न्गकोओगहैमओल चीकीओरखो" + + "नउड़ियाओस्मानियापुरानी पर्मीक्फाग्स पाबुक (सालटर) पहलवीफोनीशीयनपौल" + + "ार्ड़ फोनेटीकरेजेंगरोंगोरोंगोरूनिकसमारतीसरातीसौराष्ट्रसांकेतिक लेख" + + "शेवियनसिंहालीसूडानीसील्होटी नागरीसीरीआकएस्ट्रांगलो सीरीआकपश्चीमी स" + + "ीरीआकपूर्वी सीरीआकतागबानवाताई लेनया ताई लुएतमीळतेलुगुतेंगवारतीफीना" + + "ग़टागालॉगथानाथाईतिब्बतीऊगारीटीकवाईवीज़ीबल बोलीपुरानी फारसीसुमेरो अ" + + "क्काड़ी कुनेईफॉर्मयीविरासतअलिखितआमअज्ञात या अवैध लिपि", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0037, 0x0055, + 0x006a, 0x0076, 0x0076, 0x0076, 0x0082, 0x0094, 0x0094, 0x00b3, + 0x00cb, 0x00e0, 0x00ef, 0x0101, 0x0110, 0x0110, 0x0179, 0x018b, + 0x0194, 0x01a6, 0x01b5, 0x01c4, 0x01df, 0x01f7, 0x022f, 0x0247, + 0x025c, 0x025c, 0x0287, 0x02b2, 0x02e6, 0x02e6, 0x02fe, 0x032c, + 0x0344, 0x0365, 0x0374, 0x0374, 0x0383, 0x0398, 0x03ad, 0x03ad, + 0x03bc, 0x03c5, 0x03d7, 0x03f6, 0x041b, 0x041b, 0x042d, 0x0445, + 0x0445, 0x046a, 0x04a2, 0x04cd, 0x04df, 0x0507, 0x0507, 0x051c, + // Entry 40 - 7F + 0x052e, 0x052e, 0x0544, 0x055c, 0x0571, 0x0580, 0x0580, 0x0592, + 0x05a7, 0x05a7, 0x05a7, 0x05b3, 0x05bc, 0x05e7, 0x0606, 0x0615, + 0x0624, 0x0636, 0x064c, 0x0665, 0x0665, 0x0665, 0x0677, 0x0689, + 0x0689, 0x0698, 0x06aa, 0x06aa, 0x06d5, 0x06d5, 0x06d5, 0x06f0, + 0x0705, 0x0705, 0x0720, 0x072c, 0x072c, 0x0748, 0x0748, 0x0763, + 0x0763, 0x0763, 0x0763, 0x0763, 0x0772, 0x0772, 0x0781, 0x0794, + 0x07a3, 0x07b5, 0x07b5, 0x07d0, 0x07d0, 0x07d0, 0x07f8, 0x080e, + 0x080e, 0x080e, 0x0839, 0x0851, 0x087f, 0x087f, 0x0891, 0x08af, + // Entry 80 - BF + 0x08be, 0x08d0, 0x08df, 0x08df, 0x08fa, 0x091c, 0x092e, 0x092e, + 0x092e, 0x092e, 0x0943, 0x0943, 0x0955, 0x097d, 0x098f, 0x09c3, + 0x09eb, 0x0a10, 0x0a28, 0x0a28, 0x0a38, 0x0a55, 0x0a61, 0x0a61, + 0x0a61, 0x0a73, 0x0a88, 0x0aa0, 0x0ab5, 0x0ac1, 0x0aca, 0x0adf, + 0x0adf, 0x0af7, 0x0b00, 0x0b22, 0x0b22, 0x0b22, 0x0b44, 0x0b8e, + 0x0b94, 0x0ba6, 0x0ba6, 0x0ba6, 0x0ba6, 0x0bb8, 0x0bbe, 0x0bf1, + }, + }, + { // bs + "arapsko pismoimperijsko aramejsko pismoarmensko pismoavestansko pismobal" + + "ijsko pismobatak pismobengalsko pismoblisimbolično pismobopomofo pis" + + "mobramansko pismobrajevo pismobuginsko pismobuhidsko pismočakmansko " + + "pismoUjedinjeni kanadski aboridžinski silabicikarijsko pismočamsko p" + + "ismočerokicirt pismokoptičko pismokiparsko pismoćirilicaStaroslovens" + + "ka crkvena ćirilicadevanagari pismodezeretegipatsko narodno pismoegi" + + "patsko hijeratsko pismoegipatski hijeroglifietiopsko pismogruzijsko " + + "khutsuri pismogruzijsko pismoglagoljicagotikagrčko pismogudžarati pi" + + "smogurmuki pismohanb pismohangul pismohan pismohanuno pismopojednost" + + "avljeno han pismotradicionalno han pismohebrejsko pismohiraganapahaw" + + "h hmong pismokatakana ili hiraganaStaromađarsko pismoinduško ismosta" + + "ro italsko pismojamojavansko pismojapansko pismokajah li pismokataka" + + "nakarošti pismokmersko pismokanada pismokorejsko pismokaićansko pism" + + "olanna pismolaosko pismolatinica (fraktur varijanta)galska latinical" + + "atinicalepča pismolimbu pismolinearno A pismolinearno B pismolisijsk" + + "o pismolidijsko pismomandeansko pismomanihejsko pismomajanski hijero" + + "glifimeroitik pismomalajalamsko pismomongolsko pismomesečevo pismome" + + "itei majek pismomijanmarsko pismon’ko pismoogham pismool čiki pismoo" + + "rkhon pismoorija pismoosmanja pismostaro permiksko pismophags-pa pis" + + "mopisani pahlavipsalter pahlavipahlavi pismofeničansko pismopolard f" + + "onetsko pismopisani partianrejang pismorongorongo pismorunsko pismos" + + "amaritansko pismosarati pismosauraštra pismoznakovno pismošavian pis" + + "mosinhala pismosiloti nagri pismosirijsko pismosirijsko estrangelo p" + + "ismozapadnosirijsko pismopismo istočne Sirijetagbanva pismotai le pi" + + "smonovo tai lue pismotamilsko pismotai viet pismotelugu pismotengvar" + + " pismotifinag pismotagalogtana pismotajlandsko pismotibetansko pismo" + + "ugaritsko pismovai pismovidljivi govorstaropersijsko pismosumersko-a" + + "kadsko kuneiform pismoji pismonasledno pismomatematička notacijaemoj" + + "i sličicesimbolinepisani jezikzajedničko pismonepoznato pismo", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0035, + 0x0045, 0x0053, 0x0053, 0x0053, 0x005e, 0x006d, 0x006d, 0x0081, + 0x008f, 0x009e, 0x00ab, 0x00b9, 0x00c7, 0x00d7, 0x0101, 0x010f, + 0x011c, 0x0123, 0x012d, 0x013c, 0x014a, 0x0153, 0x0173, 0x0183, + 0x018a, 0x018a, 0x01a1, 0x01bb, 0x01d0, 0x01d0, 0x01de, 0x01f6, + 0x0205, 0x020f, 0x0215, 0x0215, 0x0221, 0x0231, 0x023e, 0x0248, + 0x0254, 0x025d, 0x0269, 0x0283, 0x029a, 0x029a, 0x02a9, 0x02b1, + 0x02b1, 0x02c3, 0x02d8, 0x02ec, 0x02f9, 0x030c, 0x0310, 0x031e, + // Entry 40 - 7F + 0x032c, 0x032c, 0x033a, 0x0342, 0x0350, 0x035d, 0x035d, 0x0369, + 0x0377, 0x0377, 0x0387, 0x0392, 0x039e, 0x03ba, 0x03c9, 0x03d1, + 0x03dd, 0x03e8, 0x03f8, 0x0408, 0x0408, 0x0408, 0x0416, 0x0424, + 0x0424, 0x0434, 0x0444, 0x0444, 0x0458, 0x0458, 0x0458, 0x0466, + 0x0478, 0x0478, 0x0487, 0x0496, 0x0496, 0x04a8, 0x04a8, 0x04b9, + 0x04b9, 0x04b9, 0x04b9, 0x04b9, 0x04c5, 0x04c5, 0x04d0, 0x04de, + 0x04ea, 0x04f5, 0x04f5, 0x0502, 0x0502, 0x0502, 0x0517, 0x0525, + 0x0533, 0x0542, 0x054f, 0x0560, 0x0575, 0x0583, 0x058f, 0x059f, + // Entry 80 - BF + 0x05ab, 0x05bd, 0x05c9, 0x05c9, 0x05d9, 0x05e7, 0x05f4, 0x05f4, + 0x05f4, 0x05f4, 0x0601, 0x0601, 0x0601, 0x0613, 0x0621, 0x063a, + 0x064f, 0x0664, 0x0672, 0x0672, 0x067e, 0x0690, 0x069e, 0x069e, + 0x06ac, 0x06b8, 0x06c5, 0x06d2, 0x06d9, 0x06e3, 0x06f3, 0x0703, + 0x0703, 0x0712, 0x071b, 0x0729, 0x0729, 0x0729, 0x073d, 0x075d, + 0x0765, 0x0773, 0x0788, 0x0796, 0x079d, 0x07ab, 0x07bc, 0x07cb, + }, + }, + { // bs-Cyrl + "арапско писмоимперијско арамејско писмојерменско писмоавестанско писмоба" + + "лијско писмобатак писмобенгалско писмоблисимболично писмобопомофо п" + + "исмобраманско писмоБрајево писмобугинско писмобухидско писмочакманс" + + "ко писмоуједињени канадски абориџински силабицикаријско писмочамско" + + " писмоЧерокицирт писмокоптичко писмокипарско писмоЋирилицаСтарослове" + + "нска црквена ћирилицаДеванагариДезеретегипатско народно писмоегипат" + + "ско хијератско писмоегипатски хијероглифиетиопско писмогрузијско кх" + + "утсури писмогрузијско писмоглагољицаГотикагрчко писмогујарати писмо" + + "гурмуки писмохангулханханунопоједностављени хантрадиционални ханхеб" + + "рејско писмоХираганапахав хмонг писмоКатакана или Хираганастаромађа" + + "рско писмоиндушко писмостари италикЏамојаванско писмојапанско писмо" + + "кајах-ли писмоКатаканакарошти писмокмерско писмоканнада писмокорејс" + + "ко писмокаитиланна писмолаошко писмолатиница (фрактур варијанта)гал" + + "ска латиницаЛатиницалепча писмолимбу писмолинеарно А писмолинеарно " + + "Б писмолисијско писмолидијско писмомандеанско писмоманихејско писмо" + + "мајански хијероглифимероитик писмомалајалам писмомонголско писмомес" + + "ечево писмомеитеи мајек писмомијанмарско писмон’ко писмоогамско пис" + + "моол чики писмоорконско писмооријанско писмоосмањанско писмостаро п" + + "ермикско писмопагс-па писмописани пахлавипсалтер пахлавипахлави пис" + + "моФеничанско писмопоралд фонетско писмописани партианрејанг писморо" + + "нгоронго писморунско писмосамаританско писмосарати писмосаураштра п" + + "исмознаковно писмошавијанско писмосинхала писмосилоти нагри писмоси" + + "ријско писмосиријско естрангело писмозападносиријско писмописмо ист" + + "очне Сиријетагбанва писмотаи ле писмонови таи луетамилско писмотаи " + + "виет писмотелугу писмотенгвар писмотифинаг писмоТагалогтхана писмот" + + "ајландско писмотибетанско писмоугаритско писмоваи писмовидљиви гово" + + "рстароперсијско писмосумерско-акадско кунеиформ писмоји писмонаслед" + + "но писмоматематичка нотацијасимболиНеписани језикзаједничко писмоНе" + + "познато или неважеће писмо", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0019, 0x004b, 0x0068, + 0x0087, 0x00a2, 0x00a2, 0x00a2, 0x00b7, 0x00d4, 0x00d4, 0x00f9, + 0x0114, 0x0131, 0x014a, 0x0165, 0x0180, 0x019d, 0x01e8, 0x0203, + 0x021a, 0x0226, 0x0239, 0x0254, 0x026f, 0x027f, 0x02bb, 0x02cf, + 0x02dd, 0x02dd, 0x0309, 0x033b, 0x0364, 0x0364, 0x037f, 0x03ad, + 0x03ca, 0x03dc, 0x03e8, 0x03e8, 0x03fd, 0x0418, 0x0431, 0x0431, + 0x043d, 0x0443, 0x044f, 0x0474, 0x0495, 0x0495, 0x04b2, 0x04c2, + 0x04c2, 0x04e2, 0x050a, 0x052f, 0x0548, 0x055f, 0x0567, 0x0582, + // Entry 40 - 7F + 0x059d, 0x059d, 0x05b7, 0x05c7, 0x05e0, 0x05f9, 0x05f9, 0x0612, + 0x062d, 0x062d, 0x0637, 0x064c, 0x0663, 0x0697, 0x06b4, 0x06c4, + 0x06d9, 0x06ee, 0x070c, 0x072a, 0x072a, 0x072a, 0x0745, 0x0760, + 0x0760, 0x077f, 0x079e, 0x079e, 0x07c5, 0x07c5, 0x07c5, 0x07e0, + 0x07fd, 0x07fd, 0x081a, 0x0835, 0x0835, 0x0857, 0x0857, 0x0878, + 0x0878, 0x0878, 0x0878, 0x0878, 0x088c, 0x088c, 0x08a5, 0x08bd, + 0x08d8, 0x08f5, 0x08f5, 0x0914, 0x0914, 0x0914, 0x093c, 0x0954, + 0x096f, 0x098c, 0x09a5, 0x09c4, 0x09ec, 0x0a07, 0x0a1e, 0x0a3d, + // Entry 80 - BF + 0x0a54, 0x0a77, 0x0a8e, 0x0a8e, 0x0aab, 0x0ac6, 0x0ae5, 0x0ae5, + 0x0ae5, 0x0ae5, 0x0afe, 0x0afe, 0x0afe, 0x0b20, 0x0b3b, 0x0b6b, + 0x0b94, 0x0bba, 0x0bd5, 0x0bd5, 0x0beb, 0x0c01, 0x0c1c, 0x0c1c, + 0x0c36, 0x0c4d, 0x0c66, 0x0c7f, 0x0c8d, 0x0ca2, 0x0cc1, 0x0ce0, + 0x0ce0, 0x0cfd, 0x0d0e, 0x0d27, 0x0d27, 0x0d27, 0x0d4e, 0x0d8b, + 0x0d9a, 0x0db5, 0x0ddc, 0x0ddc, 0x0dea, 0x0e05, 0x0e24, 0x0e59, + }, + }, + { // ca + caScriptStr, + caScriptIdx, + }, + { // ce + "Ӏаьрбийнэрмалойнбенгалхойнбопомофобрайлякириллицадеванагариэфиопингуьржи" + + "йнгрекийнгуджаратигурмукхихангылькитайнатта китайнламастан китайнжу" + + "гтийнхираганаяпонийнкатаканакхмерийнканнадакорейнлаоссийнлатинанмал" + + "аялийнмонголийнмьянманийнорисингалхойнтамилхойнтелугутаанатайнтибет" + + "хойнсимволашйоза доцумассара а тӀеэцнадоьвзуш доцу йоза", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0034, 0x0034, 0x0034, + 0x0044, 0x0044, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0062, 0x0062, 0x0076, + 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0084, 0x0084, + 0x0094, 0x0094, 0x0094, 0x0094, 0x00a2, 0x00b4, 0x00c4, 0x00c4, + 0x00d2, 0x00de, 0x00de, 0x00f3, 0x0110, 0x0110, 0x011e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + // Entry 40 - 7F + 0x013c, 0x013c, 0x013c, 0x014c, 0x014c, 0x015c, 0x015c, 0x016a, + 0x0176, 0x0176, 0x0176, 0x0176, 0x0186, 0x0186, 0x0186, 0x0194, + 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, + 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, + 0x01a6, 0x01a6, 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01cc, + 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, + 0x01cc, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, + 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, + // Entry 80 - BF + 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, + 0x01d2, 0x01d2, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01f8, 0x01f8, + 0x01f8, 0x0204, 0x0204, 0x0204, 0x0204, 0x020e, 0x0216, 0x0228, + 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, + 0x0228, 0x0228, 0x0228, 0x0228, 0x0238, 0x0249, 0x0269, 0x0289, + }, + }, + {}, // cgg + { // chr + "ᎡᎳᏈᎩᎠᎳᎻᎠᏂᏇᏂᎦᎠᏆᏉᎼᏬᏗᏂᎨᏫ ᎤᏃᏪᎶᏙᏗᏣᎳᎩᏲᏂᎢ ᏗᎪᏪᎵᏕᏫᎾᎦᎵᎢᏗᏯᏈᎩᏦᏥᎠᏂᎪᎢᎫᏣᎳᏘᎬᎹᎩᎭᏂ-ᏆᏉᎼᏬᎭᏂᎫ" + + "ᎵᎭᏂᎠᎯᏗᎨ ᎭᏂᎤᏦᏍᏗ ᎭᏂᎠᏂᏈᎵᎯᎳᎦᎾᏣᏩᏂᏏ ᏧᏃᏴᎩᏣᎼᏣᏆᏂᏏᎧᏔᎧᎾᎩᎻᎷᎧᎾᏓᎪᎵᎠᏂᎳᎣᎳᏘᏂᎹᎳᏯᎳᎻᎹᏂ" + + "ᎪᎵᎠᏂᎹᎡᏂᎹᎳᎣᏗᎠᏏᏅᎭᎳᏔᎻᎵᏖᎷᎦᏔᎠᎾᏔᏱ ᏔᏯᎴᏂᏘᏇᏔᏂᎠᏰᎦᎴᏴᏫᏍᎩ ᎠᎤᏓᏗᏍᏙᏗᎡᎼᏥᏗᎬᏟᎶᏍᏙᏗᎪᏪᎳᏅ" + + " ᏂᎨᏒᎾᏯᏃᏉ ᏱᎬᏍᏛᏭᏄᏬᎵᏍᏛᎾ ᎠᏍᏓᏩᏛᏍᏙᏗ", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x0027, 0x0027, 0x0027, + 0x0033, 0x0033, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x005b, 0x005b, 0x005b, 0x005b, 0x0071, 0x0071, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x008f, 0x008f, + 0x009b, 0x009b, 0x009b, 0x009b, 0x00a1, 0x00ad, 0x00b6, 0x00c9, + 0x00d5, 0x00db, 0x00db, 0x00ee, 0x0101, 0x0101, 0x010d, 0x0119, + 0x0119, 0x0119, 0x0132, 0x0132, 0x0132, 0x0132, 0x0138, 0x0138, + // Entry 40 - 7F + 0x0144, 0x0144, 0x0144, 0x0150, 0x0150, 0x0159, 0x0159, 0x0162, + 0x016e, 0x016e, 0x016e, 0x016e, 0x0174, 0x0174, 0x0174, 0x017d, + 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, + 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, + 0x018c, 0x018c, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x01ad, + 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, + 0x01ad, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + // Entry 80 - BF + 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + 0x01b6, 0x01b6, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01cb, 0x01cb, + 0x01cb, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01dd, 0x01f0, 0x01fc, + 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + 0x01fc, 0x01fc, 0x022a, 0x0233, 0x0248, 0x0261, 0x027a, 0x02a5, + }, + }, + { // ckb + "عەرەبیئەرمەنیبەنگالیبۆپۆمۆفۆبرەیلسریلیکدەڤەناگەریئەتیۆپیکگورجییۆنانیگوجە" + + "راتیگورموکھیھانگولهیبرێھیراگاناژاپۆنیکاتاکاناخمێریکەنەداکۆریاییلاول" + + "اتینیمالایالاممەنگۆلیمیانمارئۆریاسینھالاتامیلیتیلوگوتانەتایلەندی", + []uint16{ // 159 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x0028, 0x0028, 0x0028, + 0x0038, 0x0038, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x004e, 0x004e, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0072, 0x0072, + 0x007c, 0x007c, 0x007c, 0x007c, 0x0088, 0x0098, 0x00a8, 0x00a8, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00be, 0x00ce, + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + // Entry 40 - 7F + 0x00da, 0x00da, 0x00da, 0x00ea, 0x00ea, 0x00f4, 0x00f4, 0x0100, + 0x010e, 0x010e, 0x010e, 0x010e, 0x0114, 0x0114, 0x0114, 0x0120, + 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0132, 0x0132, 0x0140, 0x0140, 0x0140, 0x0140, 0x0140, 0x014e, + 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, + 0x014e, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, + 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, + // Entry 80 - BF + 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, + 0x0158, 0x0158, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, + 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0172, 0x0172, + 0x0172, 0x017e, 0x017e, 0x017e, 0x017e, 0x0186, 0x0196, + }, + }, + { // cs + csScriptStr, + csScriptIdx, + }, + { // cy + "ArabaiddArmenaiddBengalaiddBopomofoBrailleCyriligDevanagariEthiopigGeorg" + + "aiddGroegaiddGwjarataiddGwrmwciHanbHangulHanHan symledigHan traddodi" + + "adolHebreigHiraganaSyllwyddor JapaneaiddJamoJapaneaiddCatacanaChmera" + + "iddCanaraiddCoreaiddLaoaiddLladinMalayalamaiddMongolaiddMyanmaraiddO" + + "gamOrïaiddSinhanaiddTamilaiddTeluguThaanaTaiTibetaiddNodiant Mathema" + + "tegolEmojiSymbolauAnysgrifenedigCyffredinSgript anhysbys", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x001b, 0x001b, 0x001b, + 0x0023, 0x0023, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0031, 0x0031, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x0043, 0x0043, + 0x004c, 0x004c, 0x004c, 0x004c, 0x0055, 0x0060, 0x0067, 0x006b, + 0x0071, 0x0074, 0x0074, 0x0080, 0x0090, 0x0090, 0x0097, 0x009f, + 0x009f, 0x009f, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b8, 0x00b8, + // Entry 40 - 7F + 0x00c2, 0x00c2, 0x00c2, 0x00ca, 0x00ca, 0x00d3, 0x00d3, 0x00dc, + 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00eb, 0x00eb, 0x00eb, 0x00f1, + 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, + 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, + 0x00fe, 0x00fe, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0113, + 0x0113, 0x0113, 0x0113, 0x0113, 0x0113, 0x0113, 0x0117, 0x0117, + 0x0117, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + // Entry 80 - BF + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, + 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0132, 0x0132, + 0x0132, 0x0138, 0x0138, 0x0138, 0x0138, 0x013e, 0x0141, 0x014a, + 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, + 0x014a, 0x014a, 0x015e, 0x0163, 0x016b, 0x0179, 0x0182, 0x0191, + }, + }, + { // da + daScriptStr, + daScriptIdx, + }, + {}, // dav + { // de + deScriptStr, + deScriptIdx, + }, + {}, // de-AT + {}, // de-CH + {}, // de-LU + {}, // dje + { // dsb + "arabskiarmeńskibengalskibopomofobraillowe pismokyriliskidevanagarietiopi" + + "skigeorgiskigrichiskigujaratigurmukhihangulhanzjadnorjone hantradici" + + "onalne hanhebrejskihiraganajapańskikatakanakhmerkannadakorejskilaosk" + + "iłatyńskimalayalamskimongolskiburmaskioriyasinghaleskitamilskitelugu" + + "thaanathaiskitibetskisymbolebźez pismapowšyknenjeznate pismo", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0019, 0x0019, 0x0019, + 0x0021, 0x0021, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0039, 0x0039, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x004c, 0x004c, + 0x0055, 0x0055, 0x0055, 0x0055, 0x005e, 0x0066, 0x006e, 0x006e, + 0x0074, 0x0077, 0x0077, 0x0086, 0x0097, 0x0097, 0x00a0, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + // Entry 40 - 7F + 0x00b1, 0x00b1, 0x00b1, 0x00b9, 0x00b9, 0x00be, 0x00be, 0x00c5, + 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00d3, 0x00d3, 0x00d3, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00e9, 0x00e9, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00fa, + 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, + 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, + 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, + // Entry 80 - BF + 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, + 0x00ff, 0x00ff, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x0112, 0x0112, + 0x0112, 0x0118, 0x0118, 0x0118, 0x0118, 0x011e, 0x0125, 0x012d, + 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, + 0x012d, 0x012d, 0x012d, 0x012d, 0x0134, 0x013f, 0x0148, 0x0156, + }, + }, + {}, // dua + {}, // dyo + { // dz + "ཨེ་ར་བིཀ་ཡིག་གུཨར་མི་ནི་ཡཱན་ཡིག་གུབངྒ་ལ་ཡིག་གུབོ་པོ་མོ་ཕཱོ་ཡིག་གུའབུར་ཡི" + + "གསིརིལ་ལིཀ་ཡིག་གུདེ་ཝ་ན་ག་རི་ཡིག་གུཨི་ཐི་ཡོ་པིཀ྄་ཡིག་གུཇཽ་ཇི་ཡཱན་ཡ" + + "ིག་གུགྲིཀ་ཡིག་གུགུ་ཇ་ར་ཏི་ཡིག་གུགུ་རུ་མུ་ཁ་ཡིག་གུཧཱན་གུལ་ཡིག་གུརྒྱ" + + "་ནག་ཡིག་གུརྒྱ་ཡིག་ ལུགས་གསར་ལུགས་རྙིང་ རྒྱ་ཡིགཧེ་བྲུ་ཡིག་གུཇ་པཱན་ག" + + "ྱི་ཧི་ར་ག་ན་ཡིག་གུཇ་པཱན་ཡིག་གུཇ་པཱན་གྱི་ཀ་ཏ་ཀ་ན་ཡིག་གུཁེ་མེར་ཡིག་ག" + + "ུཀ་ན་ཌ་ཡིག་གུཀོ་རི་ཡཱན་ཡིག་གུལའོ་ཡིག་གུལེ་ཊིན་ཡིག་གུམ་ལ་ཡ་ལམ་ཡིག་ག" + + "ུསོག་པོའི་ཡིག་གུབར་མིས་ཡིག་གུཨོ་རི་ཡ་ཡིག་གུསིན་ཧ་ལ་རིག་གུཏ་མིལ་ཡིག" + + "་གུཏེ་ལུ་གུ་ཡིག་གུཐཱ་ན་ཡིག་གུཐཱའི་ཡིག་གུང་བཅས་ཀྱི་ཡིག་གུམཚན་རྟགསཡི" + + "ག་ཐོག་མ་བཀོདཔསྤྱིཡིགངོ་མ་ཤེས་པའི་ཡི་གུ", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002d, 0x002d, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x008a, 0x008a, 0x008a, + 0x00c3, 0x00c3, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x010b, 0x010b, 0x0141, + 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x017d, 0x017d, + 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ce, 0x01fe, 0x0231, 0x0231, + 0x025b, 0x0282, 0x0282, 0x02b6, 0x02ea, 0x02ea, 0x0311, 0x035c, + 0x035c, 0x035c, 0x035c, 0x035c, 0x035c, 0x035c, 0x035c, 0x035c, + // Entry 40 - 7F + 0x0380, 0x0380, 0x0380, 0x03c8, 0x03c8, 0x03ef, 0x03ef, 0x0413, + 0x0443, 0x0443, 0x0443, 0x0443, 0x0461, 0x0461, 0x0461, 0x0488, + 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, + 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, + 0x04b5, 0x04b5, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x0509, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0509, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, + 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, + // Entry 80 - BF + 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, + 0x0533, 0x0533, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, + 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x0581, 0x0581, + 0x0581, 0x05ae, 0x05ae, 0x05ae, 0x05ae, 0x05cf, 0x05f0, 0x0620, + 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, + 0x0620, 0x0620, 0x0620, 0x0620, 0x0638, 0x0665, 0x067a, 0x06b0, + }, + }, + {}, // ebu + { // ee + "Arabiagbeŋɔŋlɔarmeniagbeŋɔŋlɔbengaligbeŋɔŋlɔbopomfogbeŋɔŋlɔbraillegbeŋɔŋ" + + "lɔCyrillicgbeŋɔŋlɔdevanagarigbeŋɔŋlɔethiopiagbeŋɔŋlɔgɔgiagbeŋɔŋlɔgri" + + "sigbeŋɔŋlɔgudzaratigbeŋɔŋlɔgurmukhigbeŋɔŋlɔhangulgbeŋɔŋlɔhangbeŋɔŋlɔ" + + "HansgbeŋɔŋlɔBlema HantgbeŋcŋlɔhebrigbeŋɔŋlɔhiraganagbeŋɔŋlɔJapaneseg" + + "beŋɔŋlɔkatakanagbeŋɔŋlɔkhmergbeŋɔŋlɔkannadagbeŋɔŋlɔKoreagbeŋɔŋlɔlaog" + + "beŋɔŋlɔLatingbeŋɔŋlɔmalayagbeŋɔŋlɔmongoliagbeŋɔŋlɔmyanmargbeŋɔŋlɔori" + + "yagbeŋɔŋlɔsinhalagbeŋɔŋlɔtamilgbeŋɔŋlɔtelegugbeŋɔŋlɔthaanagbeŋɔŋlɔta" + + "igbeŋɔŋlɔtibetgbeŋɔŋlɔŋɔŋlɔdzesiwogbemaŋlɔgbeŋɔŋlɔ bɔbɔgbeŋɔŋlɔ many" + + "a", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0038, 0x0038, 0x0038, + 0x004b, 0x004b, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x0072, 0x0072, 0x0088, + 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, 0x009c, 0x009c, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00bf, 0x00d4, 0x00e8, 0x00e8, + 0x00fa, 0x0109, 0x0109, 0x0119, 0x012e, 0x012e, 0x013f, 0x0153, + 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, + // Entry 40 - 7F + 0x0167, 0x0167, 0x0167, 0x017b, 0x017b, 0x018c, 0x018c, 0x019f, + 0x01b0, 0x01b0, 0x01b0, 0x01b0, 0x01bf, 0x01bf, 0x01bf, 0x01d0, + 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, + 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, + 0x01e2, 0x01e2, 0x01f6, 0x01f6, 0x01f6, 0x01f6, 0x01f6, 0x0209, + 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, + 0x0209, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, + 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, + // Entry 80 - BF + 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, + 0x021a, 0x021a, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, + 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x023e, 0x023e, + 0x023e, 0x0250, 0x0250, 0x0250, 0x0250, 0x0262, 0x0271, 0x0282, + 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, + 0x0282, 0x0282, 0x0282, 0x0282, 0x0292, 0x029c, 0x02af, 0x02c1, + }, + }, + { // el + elScriptStr, + elScriptIdx, + }, + { // en + enScriptStr, + enScriptIdx, + }, + {}, // en-AU + { // en-IN + "BengaliOriya", + []uint16{ // 114 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x000c, + }, + }, + {}, // en-NZ + {}, // eo + { // es + esScriptStr, + esScriptIdx, + }, + { // es-419 + es419ScriptStr, + es419ScriptIdx, + }, + {}, // es-AR + {}, // es-BO + {}, // es-CL + {}, // es-CO + {}, // es-CR + {}, // es-DO + {}, // es-EC + {}, // es-GT + {}, // es-HN + { // es-MX + "telugú", + []uint16{ // 154 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, + }, + }, + {}, // es-NI + {}, // es-PA + {}, // es-PE + {}, // es-PR + {}, // es-PY + {}, // es-SV + {}, // es-US + {}, // es-VE + { // et + etScriptStr, + etScriptIdx, + }, + { // eu + "arabiarraarmeniarrabengaliarrabopomofoabrailleazirilikoadevanagariaetiop" + + "iarrageorgiarragreziarragujarateragurmukhiahänerahangulaidazkera txi" + + "natarraidazkera txinatar sinplifikatuaidazkera txinatar tradizionala" + + "hebreerahiraganasilaba japoniarrakjamo-bihurketajaponiarrakatakanakh" + + "emerarrakanadarrakorearralaosarralatinamalayalameramongoliarrabirman" + + "iarraoriyarrasinhalatamilarrateluguarrathaanathailandiarratibetarram" + + "atematikako notazioaemotikonoaikurrakidatzi gabeaohikoaidazkera ezez" + + "aguna", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0013, + 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x001e, 0x001e, 0x001e, + 0x0027, 0x0027, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0038, 0x0038, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x004d, 0x004d, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0060, 0x006a, 0x0073, 0x007a, + 0x0081, 0x0094, 0x0094, 0x00b3, 0x00d1, 0x00d1, 0x00d9, 0x00e1, + 0x00e1, 0x00e1, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x0101, 0x0101, + // Entry 40 - 7F + 0x010b, 0x010b, 0x010b, 0x0113, 0x0113, 0x011d, 0x011d, 0x0126, + 0x012e, 0x012e, 0x012e, 0x012e, 0x0136, 0x0136, 0x0136, 0x013c, + 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, + 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, + 0x0148, 0x0148, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x015e, + 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, + 0x015e, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, + 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, + // Entry 80 - BF + 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, + 0x0166, 0x0166, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, + 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x0176, 0x0176, + 0x0176, 0x0180, 0x0180, 0x0180, 0x0180, 0x0186, 0x0193, 0x019c, + 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, + 0x019c, 0x019c, 0x01b1, 0x01bb, 0x01c2, 0x01ce, 0x01d4, 0x01e6, + }, + }, + {}, // ewo + { // fa + faScriptStr, + faScriptIdx, + }, + { // fa-AF + "مغلی", + []uint16{ // 99 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0008, + }, + }, + {}, // ff + { // fi + fiScriptStr, + fiScriptIdx, + }, + { // fil + filScriptStr, + filScriptIdx, + }, + { // fo + "arabiskarmensktbengalibopomofoblindaskriftkyrillisktdevanagarietiopisktg" + + "eorgiansktgriksktgujaratigurmukhihanbhangulhaneinkult hanvanligt han" + + "hebraiskthiraganajapanskir stavirjamojapansktkatakanakhmerkannadakor" + + "eansktlaolatínsktmalayalammongolskmyanmarsktoriyasinhalatamilskttelu" + + "guthaanatailendskttibetsktstøddfrøðilig teknskipanemojitekinóskrivav" + + "anligókend skrift", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0016, 0x0016, 0x0016, + 0x001e, 0x001e, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0034, 0x0034, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x0047, 0x0047, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0059, 0x0061, 0x0069, 0x006d, + 0x0073, 0x0076, 0x0076, 0x0081, 0x008c, 0x008c, 0x0095, 0x009d, + 0x009d, 0x009d, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00b1, 0x00b1, + // Entry 40 - 7F + 0x00b9, 0x00b9, 0x00b9, 0x00c1, 0x00c1, 0x00c6, 0x00c6, 0x00cd, + 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d9, 0x00d9, 0x00d9, 0x00e2, + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, + 0x00eb, 0x00eb, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + // Entry 80 - BF + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + 0x0102, 0x0102, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, + 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0111, 0x0111, + 0x0111, 0x0117, 0x0117, 0x0117, 0x0117, 0x011d, 0x0127, 0x012f, + 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, + 0x012f, 0x012f, 0x014a, 0x014f, 0x0154, 0x015c, 0x0162, 0x016f, + }, + }, + { // fr + frScriptStr, + frScriptIdx, + }, + {}, // fr-BE + { // fr-CA + frCAScriptStr, + frCAScriptIdx, + }, + {}, // fr-CH + { // fur + "araparmenbalinêsbengalêsBraillebuginêsSilabari unificât aborigjens canad" + + "êscoptcipriotciriliccirilic dal vieri slavonic de glesiedevanagarid" + + "emotic egjizianjeratic egjizianjeroglifics egjiziansetiopicgeorgjian" + + "glagoliticgoticgrêcgujaratihanHan semplificâtHan tradizionâlebreukat" + + "akana o hiraganavieri ongjarêsvieri italicgjavanêsgjaponêskhmerkanna" + + "dacoreanlaolatin Frakturlatin gaeliclatinlineâr Alineâr Bjeroglifics" + + " Mayamalayalammongulmyanmaroriyarunicsinhalasiriacsiriac Estrangelos" + + "iriac ocidentâlsiriac orientâltamiltelegutagalogthaanathaitibetanuga" + + "riticvieri persiancuneiform sumeric-acadiccodiç pes lenghis no scrit" + + "iscomuncodiç par scrituris no codificadis", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0004, 0x0009, + 0x0009, 0x0011, 0x0011, 0x0011, 0x0011, 0x001a, 0x001a, 0x001a, + 0x001a, 0x001a, 0x0021, 0x0029, 0x0029, 0x0029, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x0053, 0x005a, 0x0061, 0x0085, 0x008f, + 0x008f, 0x008f, 0x009f, 0x00af, 0x00c4, 0x00c4, 0x00cb, 0x00cb, + 0x00d4, 0x00de, 0x00e3, 0x00e3, 0x00e8, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f3, 0x00f3, 0x0103, 0x0113, 0x0113, 0x0118, 0x0118, + 0x0118, 0x0118, 0x012b, 0x013a, 0x013a, 0x0146, 0x0146, 0x014f, + // Entry 40 - 7F + 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x015d, 0x015d, 0x0164, + 0x016a, 0x016a, 0x016a, 0x016a, 0x016d, 0x017a, 0x0186, 0x018b, + 0x018b, 0x018b, 0x0194, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x01ad, 0x01ad, 0x01ad, 0x01ad, + 0x01b6, 0x01b6, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01c3, + 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, + 0x01c3, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, + 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, + // Entry 80 - BF + 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, + 0x01cd, 0x01cd, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01da, 0x01eb, + 0x01fc, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x0211, 0x0211, + 0x0211, 0x0217, 0x0217, 0x0217, 0x021e, 0x0224, 0x0228, 0x022f, + 0x022f, 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, 0x0244, 0x025c, + 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x0279, 0x027e, 0x02a1, + }, + }, + { // fy + "DefakaArabyskKeizerlijk ArameesArmeensAvestaanskBalineeskBamounBassa Vah" + + "BatakBengaleesBlissymbolenBopomofoBrahmiBrailleBugineeskBuhidChakmaV" + + "erenigde Canadese Aboriginal-symbolenKaryskChamCherokeeCirthKoptyskS" + + "ypryskSyrillyskAldkerkslavysk SyrillyskDevanagariDeseretDuployan sne" + + "lschriftEgyptysk demotyskEgyptysk hiëratyskEgyptyske hiërogliefenEth" + + "iopyskGeorgysk KhutsuriGeorgyskGlagolityskGothyskGranthaGrieksGujara" + + "tiGurmukhiHangulHanHanunooFerienfâldigd SineeskTraditjoneel SineeskH" + + "ebreeuwskHiraganaAnatolyske hiërogliefenPahawh HmongKatakana of Hira" + + "ganaAldhongaarsIndusAld-italyskJamoJavaanskJapansJurchenKayah LiKata" + + "kanaKharoshthiKhmerKhojkiKannadaKoreaanskKpelleKaithiLannaLaoGotysk " + + "LatynGaelysk LatynLatynLepchaLimbuLineair ALineair BFraserLomaLycysk" + + "LydyskMandaeansManicheaanskMayahiërogliefenMendeMeroitysk cursiefMer" + + "oïtyskMalayalamMongoolsMoonMroMeiteiMyanmarAld Noard-ArabyskNabateaa" + + "nskNaxi GebaN’KoNüshuOghamOl ChikiOrkhonOdiaOsmanyaPalmyreensAldperm" + + "yskPhags-paInscriptioneel PahlaviPsalmen PahlaviBoek PahlaviFoenicys" + + "kPollard-fonetyskInscriptioneel ParthyskRejangRongorongoRunicSamarit" + + "aanskSaratiAld Sûd-ArabyskSaurashtraSignWritingShavianSharadaSindhiS" + + "inhalaSora SompengSoendaneeskSyloti NagriSyriacEstrangelo ArameeskWe" + + "st-ArameeskEast-ArameeskTagbanwaTakriTai LeNij Tai LueTamilTangutTai" + + " VietTeluguTengwarTifinaghTagalogThaanaThaisTibetaanskTirhutaUgarity" + + "skVaiSichtbere spraakVarang KshitiWoleaiAldperzyskSumero-Akkadian Cu" + + "neiformYiOergeërfdWiskundige notatieSymbolenOngeschrevenAlgemeenOnbe" + + "kend schriftsysteem", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x000d, 0x001f, 0x0026, + 0x0030, 0x0039, 0x003f, 0x0048, 0x004d, 0x0056, 0x0056, 0x0062, + 0x006a, 0x0070, 0x0077, 0x0080, 0x0085, 0x008b, 0x00b1, 0x00b7, + 0x00bb, 0x00c3, 0x00c8, 0x00cf, 0x00d6, 0x00df, 0x00f7, 0x0101, + 0x0108, 0x011c, 0x012d, 0x0140, 0x0157, 0x0157, 0x0160, 0x0171, + 0x0179, 0x0184, 0x018b, 0x0192, 0x0198, 0x01a0, 0x01a8, 0x01a8, + 0x01ae, 0x01b1, 0x01b8, 0x01ce, 0x01e2, 0x01e2, 0x01ec, 0x01f4, + 0x020c, 0x0218, 0x022c, 0x0237, 0x023c, 0x0247, 0x024b, 0x0253, + // Entry 40 - 7F + 0x0259, 0x0260, 0x0268, 0x0270, 0x027a, 0x027f, 0x0285, 0x028c, + 0x0295, 0x029b, 0x02a1, 0x02a6, 0x02a9, 0x02b5, 0x02c2, 0x02c7, + 0x02cd, 0x02d2, 0x02db, 0x02e4, 0x02ea, 0x02ee, 0x02f4, 0x02fa, + 0x02fa, 0x0303, 0x030f, 0x030f, 0x0320, 0x0325, 0x0336, 0x0340, + 0x0349, 0x0349, 0x0351, 0x0355, 0x0358, 0x035e, 0x035e, 0x0365, + 0x0376, 0x0381, 0x0381, 0x038a, 0x0390, 0x0396, 0x039b, 0x03a3, + 0x03a9, 0x03ad, 0x03ad, 0x03b4, 0x03be, 0x03be, 0x03c8, 0x03d0, + 0x03e6, 0x03f5, 0x0401, 0x040a, 0x041a, 0x0431, 0x0437, 0x0441, + // Entry 80 - BF + 0x0446, 0x0452, 0x0458, 0x0468, 0x0472, 0x047d, 0x0484, 0x048b, + 0x048b, 0x0491, 0x0498, 0x04a4, 0x04af, 0x04bb, 0x04c1, 0x04d4, + 0x04e1, 0x04ee, 0x04f6, 0x04fb, 0x0501, 0x050c, 0x0511, 0x0517, + 0x051f, 0x0525, 0x052c, 0x0534, 0x053b, 0x0541, 0x0546, 0x0550, + 0x0557, 0x0560, 0x0563, 0x0573, 0x0580, 0x0586, 0x0590, 0x05a9, + 0x05ab, 0x05b5, 0x05c7, 0x05c7, 0x05cf, 0x05db, 0x05e3, 0x05fa, + }, + }, + { // ga + "Albánach CugasachArabachAramach ImpiriúilAirméanachAivéisteachBailíochBa" + + "tacachBeangálachBopomofoBrailleBuigineachButhaideachSeiricíochCoptac" + + "hCipireachCoireallachDéiveanágrachÉigipteach coiteannÉigipteach clia" + + "rúilIairiglifí ÉigipteachaAetópachSeoirseachGlagalachGotachGréagachG" + + "úisearátachGurmúcachHan agus BopomofoHangalachHanHan SimplitheHan T" + + "raidisiúntaEabhrachHireagánachIairiglifí AnatólachaSiollabraí Seapán" + + "achaSean-UngárachSean-IodáilicSeamóIávachSeapánachCatacánachCiméarac" + + "hCannadachCóiréachLaosachCló GaelachLaidineachLiombúchLíneach ALínea" + + "ch BFraserLiciachLidiachMahasánachMainicéasachIairiglifí MáigheachaM" + + "eindeachMailéalamachMongólachMaenmarachSean-Arabach ThuaidhOghamOirí" + + "seachSean-PheirmeachFéiníceachPollard FoghrachPairtiach Inscríbhinni" + + "úilRúnachSamárachSean-Arabach TheasShawachSiolónachSiriceachTamalac" + + "hTeileagúchTifinaghTagálagachTánachTéalannachTibéadachÚgairíteachSea" + + "n-PheirseachDingchruthach Suiméar-AcádachÍsOidhreachtNodaireacht Mha" + + "tamaiticiúilEmojiSiombailíGan ScríobhCoitiantaScript Anaithnid", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0019, 0x002b, 0x0036, + 0x0042, 0x004b, 0x004b, 0x004b, 0x0053, 0x005e, 0x005e, 0x005e, + 0x0066, 0x0066, 0x006d, 0x0077, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x008d, 0x008d, 0x0094, 0x009d, 0x00a8, 0x00a8, 0x00b7, + 0x00b7, 0x00b7, 0x00cb, 0x00e0, 0x00f8, 0x00f8, 0x0101, 0x0101, + 0x010b, 0x0114, 0x011a, 0x011a, 0x0123, 0x0131, 0x013b, 0x014c, + 0x0155, 0x0158, 0x0158, 0x0165, 0x0176, 0x0176, 0x017e, 0x018a, + 0x01a1, 0x01a1, 0x01b8, 0x01c6, 0x01c6, 0x01d4, 0x01da, 0x01e1, + // Entry 40 - 7F + 0x01eb, 0x01eb, 0x01eb, 0x01f6, 0x01f6, 0x0200, 0x0200, 0x0209, + 0x0213, 0x0213, 0x0213, 0x0213, 0x021a, 0x021a, 0x0226, 0x0230, + 0x0230, 0x0239, 0x0243, 0x024d, 0x0253, 0x0253, 0x025a, 0x0261, + 0x026c, 0x026c, 0x0279, 0x0279, 0x0290, 0x0299, 0x0299, 0x0299, + 0x02a6, 0x02a6, 0x02b0, 0x02b0, 0x02b0, 0x02b0, 0x02b0, 0x02ba, + 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02d3, 0x02d3, + 0x02d3, 0x02dd, 0x02dd, 0x02dd, 0x02dd, 0x02dd, 0x02ec, 0x02ec, + 0x02ec, 0x02ec, 0x02ec, 0x02f8, 0x0308, 0x0323, 0x0323, 0x0323, + // Entry 80 - BF + 0x032a, 0x0333, 0x0333, 0x0345, 0x0345, 0x0345, 0x034c, 0x034c, + 0x034c, 0x034c, 0x0356, 0x0356, 0x0356, 0x0356, 0x035f, 0x035f, + 0x035f, 0x035f, 0x035f, 0x035f, 0x035f, 0x035f, 0x0367, 0x0367, + 0x0367, 0x0372, 0x0372, 0x037a, 0x0385, 0x038c, 0x0397, 0x03a1, + 0x03a1, 0x03ae, 0x03ae, 0x03ae, 0x03ae, 0x03ae, 0x03bd, 0x03dc, + 0x03df, 0x03e9, 0x0405, 0x040a, 0x0414, 0x0420, 0x0429, 0x0439, + }, + }, + { // gd + "AfakaAlbàinis ChabhcasachAhomArabaisAramais impireilAirmeinisAvestanaisB" + + "aliBamumBassa VahBatakBeangailisComharran BlissBopomofoBrahmiBraille" + + "BuhidChakmaSgrìobhadh Lideach Aonaichte nan Tùsanach CanadachChamChe" + + "rokeeCirthCoptaisCìoprasaisCirilisCirilis Seann-Slàbhais na h-Eaglai" + + "seDevanagariDeseretSealbh-sgrìobhadh ÈipheiteachGe’ezCairtbheilisGot" + + "aisGranthaGreugaisGujaratiGurmukhiHangulHanHanunooHan simplichteHan " + + "tradaiseantaEabhraHiraganaDealbh-sgrìobhadh AnatolachPahawh HmongKat" + + "akana no HiraganaSeann-UngaraisSeann-EadailtisJamoDeàbhanaisSeapanai" + + "sJurchenKayah LiKatakanaKharoshthiCmèarKhojkiKannadaCoirèanaisKpelle" + + "KaithiLannaLàthoLaideann frakturLaideann GhàidhealachLaideannLepchaL" + + "imbuLinear ALinear BLomaMahajaniDealbh-sgrìobhadh MayachMendeMalayal" + + "amModiMongolaisMroMeitei MayekMultaniMiànmarSeann-Arabach ThuathachN" + + "axi GebaN’koNüshuOgham-chraobhOl ChikiOrkhonOriyaOsmanyaPau Cin HauP" + + "hags-paPartais snaidh-sgrìobhteRejangRongorongoRùn-sgrìobhadhSaratiS" + + "eann-Arabais DheasachSaurashtraSharadaSiddhamKhudawadiSinhalaSora So" + + "mpengSundaSyloti NagriSuraidheacSuraidheac SiarachSuraidheac EarachT" + + "agbanwaTakriTai LeTai Lue ÙrTaimilTangutTai VietTeluguTengwarTifinag" + + "hTagalogThaanaTàidhTibeitisTirhutaVaiVarang KshitiWoleaiSeann-Pheirs" + + "isYiGnìomhairean matamataigSamhlaidheanGun sgrìobhadhCoitcheannLitre" + + "adh neo-aithnichte", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x001a, 0x001e, 0x0025, 0x0035, 0x003e, + 0x0048, 0x004c, 0x0051, 0x005a, 0x005f, 0x0069, 0x0069, 0x0078, + 0x0080, 0x0086, 0x008d, 0x008d, 0x0092, 0x0098, 0x00cc, 0x00cc, + 0x00d0, 0x00d8, 0x00dd, 0x00e4, 0x00ef, 0x00f6, 0x011b, 0x0125, + 0x012c, 0x012c, 0x012c, 0x012c, 0x014b, 0x014b, 0x0152, 0x0152, + 0x015e, 0x015e, 0x0164, 0x016b, 0x0173, 0x017b, 0x0183, 0x0183, + 0x0189, 0x018c, 0x0193, 0x01a1, 0x01b1, 0x01b1, 0x01b7, 0x01bf, + 0x01db, 0x01e7, 0x01fb, 0x0209, 0x0209, 0x0218, 0x021c, 0x0227, + // Entry 40 - 7F + 0x0230, 0x0237, 0x023f, 0x0247, 0x0251, 0x0257, 0x025d, 0x0264, + 0x026f, 0x0275, 0x027b, 0x0280, 0x0286, 0x0296, 0x02ac, 0x02b4, + 0x02ba, 0x02bf, 0x02c7, 0x02cf, 0x02cf, 0x02d3, 0x02d3, 0x02d3, + 0x02db, 0x02db, 0x02db, 0x02db, 0x02f4, 0x02f9, 0x02f9, 0x02f9, + 0x0302, 0x0306, 0x030f, 0x030f, 0x0312, 0x031e, 0x0325, 0x032d, + 0x0344, 0x0344, 0x0344, 0x034d, 0x0353, 0x0359, 0x0366, 0x036e, + 0x0374, 0x0379, 0x0379, 0x0380, 0x0380, 0x038b, 0x038b, 0x0393, + 0x0393, 0x0393, 0x0393, 0x0393, 0x0393, 0x03ac, 0x03b2, 0x03bc, + // Entry 80 - BF + 0x03cc, 0x03cc, 0x03d2, 0x03e8, 0x03f2, 0x03f2, 0x03f2, 0x03f9, + 0x0400, 0x0409, 0x0410, 0x041c, 0x0421, 0x042d, 0x0437, 0x0437, + 0x0449, 0x045a, 0x0462, 0x0467, 0x046d, 0x0478, 0x047e, 0x0484, + 0x048c, 0x0492, 0x0499, 0x04a1, 0x04a8, 0x04ae, 0x04b4, 0x04bc, + 0x04c3, 0x04c3, 0x04c6, 0x04c6, 0x04d3, 0x04d9, 0x04e7, 0x04e7, + 0x04e9, 0x04e9, 0x0501, 0x0501, 0x050d, 0x051c, 0x0526, 0x053d, + }, + }, + { // gl + "árabearmeniobengalíbopomofobrailleSilabario aborixe canadiano unificadoc" + + "irílicodevanágarietíopexeorxianogregoguxaratígurmukhihanbhangulhanha" + + "n simplificadohan tradicionalhebreohiraganasilabarios xaponesesjamox" + + "aponéskatakanakhmercanaréscoreanolaosianolatinomalabarmongolbirmanoo" + + "riácingaléstámiltelugúthaanatailandéstibetanonotación matemáticaemoj" + + "issímbolosnon escritocomúnalfabeto descoñecido", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x0015, 0x0015, 0x0015, + 0x001d, 0x001d, 0x0024, 0x0024, 0x0024, 0x0024, 0x0049, 0x0049, + 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0052, 0x0052, 0x005d, + 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x0064, 0x0064, + 0x006d, 0x006d, 0x006d, 0x006d, 0x0072, 0x007b, 0x0083, 0x0087, + 0x008d, 0x0090, 0x0090, 0x00a0, 0x00af, 0x00af, 0x00b5, 0x00bd, + 0x00bd, 0x00bd, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d5, 0x00d5, + // Entry 40 - 7F + 0x00dd, 0x00dd, 0x00dd, 0x00e5, 0x00e5, 0x00ea, 0x00ea, 0x00f2, + 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x0101, 0x0101, 0x0101, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x010e, 0x010e, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x011b, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + // Entry 80 - BF + 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0120, 0x0120, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, + 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x012f, 0x012f, + 0x012f, 0x0136, 0x0136, 0x0136, 0x0136, 0x013c, 0x0146, 0x014e, + 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, + 0x014e, 0x014e, 0x0163, 0x0169, 0x0172, 0x017d, 0x0183, 0x0198, + }, + }, + { // gsw + "ArabischArmiArmenischAveschtischBalinesischBattakischBengalischBliss-Sym" + + "boolBopomofoBrahmiBlindäschriftBuginesischBuhidUCASKarischChamCherok" + + "eeCirthKoptischZypriotischKyrillischAltchileslawischTövanagaariTeser" + + "etTemozisch-ÄgüptischHiraazisch-ÄgüptischÄgüptischi HiroglüüfeÄzioop" + + "ischGhutsuriGeorgischGlagolitischGotischGriechischGuscharatiGurmukhi" + + "HangulChineesischHanunooVeräifachti Chineesischi SchriftTradizionell" + + "i Chineesischi SchriftHebräischHiraganaPahawh HmongKatakana oder Hir" + + "aganaAltungarischIndus-SchriftAltitalischJavanesischJapanischKayah L" + + "iKatakanaKharoshthiKhmerKannadaKoreanischLannaLaotischLatiinisch - F" + + "raktur-VarianteLatiinisch - Gäälischi VarianteLatiinischLepchaLimbuL" + + "inear ALinear BLykischLydischMandäischManichäischMaya-HieroglyphäMer" + + "oitischMalaysischMongolischMoonMeitei MayekBurmesischN’KoOghamOl Chi" + + "kiOrchon-RunäOriyaOsmanischAltpermischPhags-paPahlaviPhönizischPolla" + + "rd PhonetischRejangRongorongoRunäschriftSamaritanischSaratiSaurashtr" + + "aGebäärdeschpraachShaw-AlphabetSinghalesischSundanesischSyloti Nagri" + + "SyrischSyrisch - Eschtrangelo-VarianteWeschtsyrischOschtsyrischTagba" + + "nwaTai LeTai LueTamilischTeluguTengwarTifinaghTagalogThaanaThaiTibee" + + "tischUgaritischVaiSichtbari SchpraachAltpersischSumerisch-akkadischi" + + " KeilschriftYiG’eerbtä SchriftwärtSchriftlosi SchpraachUnbeschtimmtU" + + "ncodiirti Schrift", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x000c, 0x0015, + 0x0020, 0x002b, 0x002b, 0x002b, 0x0035, 0x003f, 0x003f, 0x004c, + 0x0054, 0x005a, 0x0068, 0x0073, 0x0078, 0x0078, 0x007c, 0x0083, + 0x0087, 0x008f, 0x0094, 0x009c, 0x00a7, 0x00b1, 0x00c1, 0x00cd, + 0x00d4, 0x00d4, 0x00e9, 0x00ff, 0x0118, 0x0118, 0x0123, 0x012b, + 0x0134, 0x0140, 0x0147, 0x0147, 0x0151, 0x015b, 0x0163, 0x0163, + 0x0169, 0x0174, 0x017b, 0x019c, 0x01be, 0x01be, 0x01c8, 0x01d0, + 0x01d0, 0x01dc, 0x01f2, 0x01fe, 0x020b, 0x0216, 0x0216, 0x0221, + // Entry 40 - 7F + 0x022a, 0x022a, 0x0232, 0x023a, 0x0244, 0x0249, 0x0249, 0x0250, + 0x025a, 0x025a, 0x025a, 0x025f, 0x0267, 0x0284, 0x02a5, 0x02af, + 0x02b5, 0x02ba, 0x02c2, 0x02ca, 0x02ca, 0x02ca, 0x02d1, 0x02d8, + 0x02d8, 0x02e2, 0x02ee, 0x02ee, 0x02ff, 0x02ff, 0x02ff, 0x0309, + 0x0313, 0x0313, 0x031d, 0x0321, 0x0321, 0x032d, 0x032d, 0x0337, + 0x0337, 0x0337, 0x0337, 0x0337, 0x033d, 0x033d, 0x0342, 0x034a, + 0x0356, 0x035b, 0x035b, 0x0364, 0x0364, 0x0364, 0x036f, 0x0377, + 0x0377, 0x0377, 0x037e, 0x0389, 0x039b, 0x039b, 0x03a1, 0x03ab, + // Entry 80 - BF + 0x03b7, 0x03c4, 0x03ca, 0x03ca, 0x03d4, 0x03e7, 0x03f4, 0x03f4, + 0x03f4, 0x03f4, 0x0401, 0x0401, 0x040d, 0x0419, 0x0420, 0x043f, + 0x044c, 0x0458, 0x0460, 0x0460, 0x0466, 0x046d, 0x0476, 0x0476, + 0x0476, 0x047c, 0x0483, 0x048b, 0x0492, 0x0498, 0x049c, 0x04a6, + 0x04a6, 0x04b0, 0x04b3, 0x04c6, 0x04c6, 0x04c6, 0x04d1, 0x04f1, + 0x04f3, 0x050b, 0x050b, 0x050b, 0x050b, 0x0520, 0x052c, 0x053e, + }, + }, + { // gu + guScriptStr, + guScriptIdx, + }, + {}, // guz + {}, // gv + {}, // ha + {}, // haw + { // he + heScriptStr, + heScriptIdx, + }, + { // hi + hiScriptStr, + hiScriptIdx, + }, + { // hr + hrScriptStr, + hrScriptIdx, + }, + { // hsb + "arabscearmenscebengalscebopomofoBraillowe pismokyriliscedevanagarietiopi" + + "scegeorgiscegrjekscegujaratigurmukhihangulchinscezjednorjene chinske" + + " pismotradicionalne chinske pismohebrejscehiraganajapanscekatakanakh" + + "merscekannadscekorejscelaoscełaćonscemalayalamscemongolsceburmasceor" + + "iyasinghalscetamilsceteluguthaanathailandscetibetscesymbolebjez pism" + + "apowšitkownenjeznate pismo", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0018, 0x0018, 0x0018, + 0x0020, 0x0020, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0038, 0x0038, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x004b, 0x004b, + 0x0054, 0x0054, 0x0054, 0x0054, 0x005c, 0x0064, 0x006c, 0x006c, + 0x0072, 0x0079, 0x0079, 0x0092, 0x00ad, 0x00ad, 0x00b6, 0x00be, + 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, + // Entry 40 - 7F + 0x00c6, 0x00c6, 0x00c6, 0x00ce, 0x00ce, 0x00d6, 0x00d6, 0x00df, + 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00ed, 0x00ed, 0x00ed, 0x00f7, + 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, + 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, + 0x0103, 0x0103, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x0114, + 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, + 0x0114, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + // Entry 80 - BF + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x012b, 0x012b, + 0x012b, 0x0131, 0x0131, 0x0131, 0x0131, 0x0137, 0x0142, 0x014a, + 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, + 0x014a, 0x014a, 0x014a, 0x014a, 0x0151, 0x015b, 0x0167, 0x0175, + }, + }, + { // hu + huScriptStr, + huScriptIdx, + }, + { // hy + hyScriptStr, + hyScriptIdx, + }, + { // id + idScriptStr, + idScriptIdx, + }, + {}, // ig + { // ii + "ꀊꇁꀨꁱꂷꀊꆨꌦꇁꃚꁱꂷꈝꐯꉌꈲꁱꂷꀎꋏꉌꈲꁱꂷꇁꄀꁱꂷꆈꌠꁱꂷꁱꀋꉆꌠꅉꀋꐚꌠꁱꂷ", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0036, 0x0048, 0x0048, 0x0048, 0x0048, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, + // Entry 40 - 7F + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + // Entry 80 - BF + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x006c, 0x006c, 0x007e, + }, + }, + { // is + isScriptStr, + isScriptIdx, + }, + { // it + itScriptStr, + itScriptIdx, + }, + { // ja + jaScriptStr, + jaScriptIdx, + }, + { // jgo + "mík -ŋwaꞌnɛ yi ɛ́ líŋɛ́nɛ Latɛ̂ŋntúu yi pɛ́ ká ŋwaꞌnεntɛ-ŋwaꞌnɛ yí pɛ́ k" + + "á kɛ́ jí", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + // Entry 80 - BF + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x004c, 0x004c, 0x0073, + }, + }, + {}, // jmc + { // ka + kaScriptStr, + kaScriptIdx, + }, + {}, // kab + {}, // kam + {}, // kde + { // kea + "arábikuarméniubengalibopomofobraillesirílikudevanagarietiópikujorjianugr" + + "egugujaratigurmukihangulhanhan simplifikaduhan tradisionalebraikuira" + + "ganajaponeskatakanakmerkanareskorianulausianulatinumalaialammongolbi" + + "rmanesoriyasingalestamiltelugutaanatailandestibetanusímbulusnãu skri" + + "tukomunskrita diskonxedu", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0017, 0x0017, 0x0017, + 0x001f, 0x001f, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x002f, 0x002f, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0042, 0x0042, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004f, 0x0057, 0x005e, 0x005e, + 0x0064, 0x0067, 0x0067, 0x0077, 0x0086, 0x0086, 0x008d, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + // Entry 40 - 7F + 0x009b, 0x009b, 0x009b, 0x00a3, 0x00a3, 0x00a7, 0x00a7, 0x00ae, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00bd, 0x00bd, 0x00bd, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00cc, 0x00cc, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00da, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, + 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, + // Entry 80 - BF + 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, + 0x00df, 0x00df, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00ec, 0x00ec, + 0x00ec, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f7, 0x0100, 0x0108, + 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, + 0x0108, 0x0108, 0x0108, 0x0108, 0x0111, 0x011c, 0x0121, 0x0132, + }, + }, + {}, // khq + {}, // ki + { // kk + kkScriptStr, + kkScriptIdx, + }, + {}, // kkj + {}, // kl + {}, // kln + { // km + kmScriptStr, + kmScriptIdx, + }, + { // kn + knScriptStr, + knScriptIdx, + }, + { // ko + koScriptStr, + koScriptIdx, + }, + {}, // ko-KP + {}, // kok + { // ks + "اَربیاَرمانیَناَویستَنبالَنیٖزباتَکبیٚنگٲلۍبِلِس سِمبلزبوپوموفوبرٛاہمیبر" + + "یلبُگِنیٖزبُہِدیُنِفایِڑ کنیڑِیَن ایٚب آرجِنَل سِلیبِککاریَنچَمچیٚر" + + "وکیکِرتھکاپٹِککِپرایِٹسَیرِلِکپرون چٔرچسلیوونِک سَیرِلِکدیوناگریڈیٚ" + + "سٔریٚٹاِجپشِیَن ڈِماٹِکاِجِپشَن ہَیریٹِکاِجِپشَن ہَیروگلِپھساِتھیوپ" + + "ِکجارجِیَن کھتسوریجارجِیَنگلیگولِٹِکگوتھِکگرَنتھاگریٖکگُجرٲتۍہانٛگُ" + + "لہانہانُنوٗسِمپلِفایِڑ ہانٹریڑِشَنَلہِبرِوہیٖراگاناپَہاو مانٛگکَٹاک" + + "انا یا ہِراگاناپرون ہَنگیریَناِنڈَساولڈ اِٹیلِکجاوَنیٖزجیٚپَنیٖزکای" + + "ا لیکَتاکاناخَروشتھیکھٕمیرکَنَڑاکوریَنلانالاوفرٛکتُر لیٹِنگیلِک لیٹ" + + "َنلیٹِنلیٚپکالِمبوٗلیٖنیَر اےلیٖنیَر بیلیسِیَنلیدِیَنمَندییَنمانیشی" + + "یَنمایَن ہیٖروگلِپھمِرایٹِکمَلیالَممَنٛگولیَنموٗنمیتی مایَکمَیَنمار" + + "ایٚن کواوگہاماول چِکیاورکھوناورِیااوسمانیااولڈ پٔرمِکپھاگس پابوٗک پ" + + "َہَلویپھونِشِیَنپولاڑ پھونِٹِکریجَنٛگرونٛگو رونٛگورَنِکسَمارِٹَنسَر" + + "اتیسوراشٹرااِشارٲتی لِکھٲےشاویَنسِنہالاسَنڈَنیٖزسیلوتی ناگریسیٖرِیَ" + + "کایٚسٹرینجِلو سیٖرِیَکمغرِبی سیٖریَکمشرَقی سیٖریَکتَگبَنواتَیلیےنوٚ" + + "و تیلوتَمِلتیلگوٗتیٚنگوارتِفِناگتَگَلوگتھاناتھاےتِبتیاُگارِٹِکواےوِ" + + "زِبٕل سپیٖچپرون فارسیسُمیرو اکادیَن کوٗنِفامیٖیلیٚکھنَےعاماَن زٲنۍ " + + "یا نا لَگہٕ ہار رَسمُل خظ", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x001c, + 0x002c, 0x003c, 0x003c, 0x003c, 0x0046, 0x0056, 0x0056, 0x006d, + 0x007d, 0x008b, 0x0093, 0x00a3, 0x00ad, 0x00ad, 0x00f7, 0x0103, + 0x0109, 0x0117, 0x0121, 0x012d, 0x013d, 0x014d, 0x017f, 0x018f, + 0x01a1, 0x01a1, 0x01c2, 0x01e3, 0x020a, 0x020a, 0x021c, 0x023b, + 0x024b, 0x025f, 0x026b, 0x026b, 0x0279, 0x0283, 0x0291, 0x0291, + 0x029f, 0x02a5, 0x02b3, 0x02d0, 0x02e4, 0x02e4, 0x02f0, 0x0302, + 0x0302, 0x0317, 0x033d, 0x0358, 0x0364, 0x037b, 0x037b, 0x038b, + // Entry 40 - 7F + 0x039d, 0x039d, 0x03aa, 0x03ba, 0x03ca, 0x03d6, 0x03d6, 0x03e2, + 0x03ee, 0x03ee, 0x03ee, 0x03f6, 0x03fc, 0x0415, 0x042a, 0x0434, + 0x0440, 0x044c, 0x045f, 0x0472, 0x0472, 0x0472, 0x0480, 0x048e, + 0x048e, 0x049e, 0x04b0, 0x04b0, 0x04cf, 0x04cf, 0x04cf, 0x04df, + 0x04ef, 0x04ef, 0x0503, 0x050b, 0x050b, 0x051e, 0x051e, 0x052e, + 0x052e, 0x052e, 0x052e, 0x052e, 0x053b, 0x053b, 0x0547, 0x0556, + 0x0564, 0x0570, 0x0570, 0x0580, 0x0580, 0x0580, 0x0595, 0x05a4, + 0x05a4, 0x05a4, 0x05bb, 0x05cf, 0x05ea, 0x05ea, 0x05f8, 0x0611, + // Entry 80 - BF + 0x061b, 0x062d, 0x0639, 0x0639, 0x0649, 0x0666, 0x0672, 0x0672, + 0x0672, 0x0672, 0x0680, 0x0680, 0x0692, 0x06a9, 0x06b9, 0x06e2, + 0x06fd, 0x0718, 0x0728, 0x0728, 0x0734, 0x0745, 0x074f, 0x074f, + 0x074f, 0x075b, 0x076b, 0x0779, 0x0787, 0x0791, 0x0799, 0x07a3, + 0x07a3, 0x07b5, 0x07bb, 0x07d4, 0x07d4, 0x07d4, 0x07e7, 0x0813, + 0x0819, 0x0819, 0x0819, 0x0819, 0x0819, 0x0829, 0x082f, 0x086c, + }, + }, + {}, // ksb + {}, // ksf + { // ksh + "arraabesche Schreffarmeenesche Schreffbängjaalesche Schreffschineeseche " + + "Ömschreff BopomofoBlindeschreffkürrellesche Schreffindesche Devanaj" + + "ari-Schreffätejoopesche Schreffje’orrjesche Schreffjriischesche Schr" + + "effjujaraatesche Schreffindesche Gurmukhi-Schreffkorrejaanesche Schr" + + "effen schineesesche Schreffeijfacher schineesesche Schrefftradizjonä" + + "ll schineesesche Schreffhebrääjesche Schreffjapaanesche Hiddajaana-S" + + "chreffen japaanesche Schreffjapaanesche Kattakaana-SchreffKhmer-Schr" + + "effindesche Kannada-Schreffkorrejaanesche Schreff udder en schineese" + + "sche Schrefflahootesche Schrefflateinesche Schreffindesche Malajalam" + + "-Schreffmongjoolesche Schreffbirmahnesche Schreffindesche Orija-Schr" + + "effsingjaleesesche Schrefftamiilesche Schreffindesche Telugu-Schreff" + + "malledivesche Taana-Schrefftailändesche Schrefftibeetesche Schreff-Z" + + "eiche ävver kein Schreff--jaa keij Schreff--öhnß en Schreff--onbikan" + + "nte Schreff-", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0013, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x003c, 0x003c, 0x003c, + 0x005c, 0x005c, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x007e, 0x007e, 0x0099, + 0x0099, 0x0099, 0x0099, 0x0099, 0x0099, 0x0099, 0x00ae, 0x00ae, + 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00d8, 0x00ed, 0x0106, 0x0106, + 0x011c, 0x0134, 0x0134, 0x0153, 0x0176, 0x0176, 0x018c, 0x01aa, + 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, + // Entry 40 - 7F + 0x01c0, 0x01c0, 0x01c0, 0x01de, 0x01de, 0x01eb, 0x01eb, 0x0203, + 0x0238, 0x0238, 0x0238, 0x0238, 0x024b, 0x024b, 0x024b, 0x025e, + 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, + 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, + 0x0278, 0x0278, 0x028d, 0x028d, 0x028d, 0x028d, 0x028d, 0x02a1, + 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x02a1, + 0x02a1, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, + 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, + // Entry 80 - BF + 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, + 0x02b7, 0x02b7, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, + 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02e1, 0x02e1, + 0x02e1, 0x02f8, 0x02f8, 0x02f8, 0x02f8, 0x0313, 0x0328, 0x033b, + 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, + 0x033b, 0x033b, 0x033b, 0x033b, 0x0357, 0x0369, 0x037c, 0x0390, + }, + }, + {}, // kw + { // ky + kyScriptStr, + kyScriptIdx, + }, + {}, // lag + { // lb + "ArabeschArmiArmeneschAvesteschBalineseschBattakeschBengaleschBliss-Symbo" + + "lerBopomofoBrahmiBlanneschrëftBugineseschBuhidUCASKareschChamCheroke" + + "eCirthKopteschZyprioteschKyrilleschAlkiercheslaweschDevanagariDesere" + + "tEgyptesch-DemoteschEgyptesch-HierateschEgyptesch HieroglyphenEthiop" + + "eschKhutsuriGeorgeschGlagoliteschGoteschGriicheschGujaratiGurmukhiHa" + + "ngulChineseschHanunooVereinfacht ChineseschTraditionellt ChineseschH" + + "ebräeschHiraganaPahawh HmongKatakana oder HiraganaAlungareschIndus-S" + + "chrëftAlitaleschJavaneseschJapaneschKayah LiKatakanaKharoshthiKhmerK" + + "annadaKoreaneschLannaLaoteschLaténgesch-Fraktur-VariantLaténgesch-Gä" + + "llesch VariantLaténgeschLepchaLimbuLinear ALinear BLykeschLydeschMan" + + "däeschManichäeschMaya-HieroglyphenMeroiteschMalayseschMongoleschMoon" + + "Meitei MayekBirmaneschN’KoOghamOl ChikiOrchon-RunenOriyaOsmaneschAlp" + + "ermeschPhags-paPahlaviPhönizeschPollard PhoneteschRejangRongorongoRu" + + "neschrëftSamaritaneschSaratiSaurashtraZeechesproochShaw-AlphabetSing" + + "haleseschSundaneseschSyloti NagriSyreschSyresch-Estrangelo-VariantWe" + + "stsyreschOstsyreschTai LeTai LueTamileschTeluguTengwarTifinaghDagalo" + + "gThaanaThaiTibeteschUgariteschVaiSiichtbar SproochAlperseschSumeresc" + + "h-akkadesch KeilschrëftYiGeierfte SchrëftwäertSymbolerOuni SchrëftOn" + + "bestëmmtOncodéiert Schrëft", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x000c, 0x0015, + 0x001e, 0x0029, 0x0029, 0x0029, 0x0033, 0x003d, 0x003d, 0x004b, + 0x0053, 0x0059, 0x0067, 0x0072, 0x0077, 0x0077, 0x007b, 0x0082, + 0x0086, 0x008e, 0x0093, 0x009b, 0x00a6, 0x00b0, 0x00c1, 0x00cb, + 0x00d2, 0x00d2, 0x00e5, 0x00f9, 0x010f, 0x010f, 0x0119, 0x0121, + 0x012a, 0x0136, 0x013d, 0x013d, 0x0147, 0x014f, 0x0157, 0x0157, + 0x015d, 0x0167, 0x016e, 0x0184, 0x019c, 0x019c, 0x01a6, 0x01ae, + 0x01ae, 0x01ba, 0x01d0, 0x01db, 0x01e9, 0x01f3, 0x01f3, 0x01fe, + // Entry 40 - 7F + 0x0207, 0x0207, 0x020f, 0x0217, 0x0221, 0x0226, 0x0226, 0x022d, + 0x0237, 0x0237, 0x0237, 0x023c, 0x0244, 0x025f, 0x027c, 0x0287, + 0x028d, 0x0292, 0x029a, 0x02a2, 0x02a2, 0x02a2, 0x02a9, 0x02b0, + 0x02b0, 0x02ba, 0x02c6, 0x02c6, 0x02d7, 0x02d7, 0x02d7, 0x02e1, + 0x02eb, 0x02eb, 0x02f5, 0x02f9, 0x02f9, 0x0305, 0x0305, 0x030f, + 0x030f, 0x030f, 0x030f, 0x030f, 0x0315, 0x0315, 0x031a, 0x0322, + 0x032e, 0x0333, 0x0333, 0x033c, 0x033c, 0x033c, 0x0346, 0x034e, + 0x034e, 0x034e, 0x0355, 0x0360, 0x0372, 0x0372, 0x0378, 0x0382, + // Entry 80 - BF + 0x038e, 0x039b, 0x03a1, 0x03a1, 0x03ab, 0x03b8, 0x03c5, 0x03c5, + 0x03c5, 0x03c5, 0x03d2, 0x03d2, 0x03de, 0x03ea, 0x03f1, 0x040b, + 0x0416, 0x0420, 0x0420, 0x0420, 0x0426, 0x042d, 0x0436, 0x0436, + 0x0436, 0x043c, 0x0443, 0x044b, 0x0452, 0x0458, 0x045c, 0x0465, + 0x0465, 0x046f, 0x0472, 0x0483, 0x0483, 0x0483, 0x048d, 0x04ad, + 0x04af, 0x04c6, 0x04c6, 0x04c6, 0x04ce, 0x04db, 0x04e6, 0x04fa, + }, + }, + {}, // lg + {}, // lkt + {}, // ln + { // lo + loScriptStr, + loScriptIdx, + }, + { // lrc + "عأرأڤیأرمأنیبأنگالیبوٙپوٙبئرئیلسیریلیکدیڤانگأریئتوٙیوٙپیاییگورجییوٙنانیگ" + + "وجأراتیگوٙروٙمخیھانگوٙلھانیبیتار سادە بیەسونأتی بیتارعئبریھیراگاناج" + + "اپوٙنیکاتانگاخئمئرکاناداکورئ ییلائولاتینمالایامموغولیمیانمارئوریاسی" + + "ناھالاتامیلتئلئگوتاناتایلأندیتأبأتینئشوٙنە یانیسئسە نأبیەجائوفتاأنی" + + "سئسە نادیار", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0026, 0x0026, 0x0026, + 0x0032, 0x0032, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x004c, 0x004c, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x0076, 0x0076, + 0x0080, 0x0080, 0x0080, 0x0080, 0x008e, 0x009e, 0x00b0, 0x00b0, + 0x00be, 0x00c6, 0x00c6, 0x00e0, 0x00f7, 0x00f7, 0x0101, 0x0111, + 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, + // Entry 40 - 7F + 0x011f, 0x011f, 0x011f, 0x012d, 0x012d, 0x0137, 0x0137, 0x0143, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0158, 0x0158, 0x0158, 0x0162, + 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, + 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, + 0x0170, 0x0170, 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, 0x018a, + 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, + 0x018a, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, + 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, + // Entry 80 - BF + 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, + 0x0194, 0x0194, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01ae, 0x01ae, + 0x01ae, 0x01ba, 0x01ba, 0x01ba, 0x01ba, 0x01c2, 0x01d2, 0x01de, + 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, + 0x01de, 0x01de, 0x01de, 0x01de, 0x01f1, 0x0208, 0x0218, 0x0231, + }, + }, + { // lt + ltScriptStr, + ltScriptIdx, + }, + {}, // lu + {}, // luo + {}, // luy + { // lv + lvScriptStr, + lvScriptIdx, + }, + {}, // mas + {}, // mer + {}, // mfe + {}, // mg + {}, // mgh + { // mgo + "ngam ŋwaʼringam choʼabo ŋwaʼri tisɔʼ", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + // Entry 80 - BF + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x0017, 0x0017, 0x002b, + }, + }, + { // mk + mkScriptStr, + mkScriptIdx, + }, + { // ml + mlScriptStr, + mlScriptIdx, + }, + { // mn + mnScriptStr, + mnScriptIdx, + }, + { // mr + mrScriptStr, + mrScriptIdx, + }, + { // ms + msScriptStr, + msScriptIdx, + }, + { // mt + "GħarbiĊirillikuGriegHan SimplifikatHan TradizzjonaliLatinPersjan AntikMh" + + "ux MiktubKomuniKitba Mhux Magħrufa", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0016, 0x0016, 0x0016, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0025, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + // Entry 40 - 7F + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + // Entry 80 - BF + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x0048, 0x0048, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0053, 0x0059, 0x006d, + }, + }, + {}, // mua + { // my + myScriptStr, + myScriptIdx, + }, + { // mzn + "عربیارمنیبنگالیبوپوموفوسیریلیکدیوانانگریاتیوپیاییگرجییونانیگجراتیگورموخی" + + "هانگولهانساده\u200cبَیی هاناستاندارد ِسنتی هانتعبریهیراگاناجاپونیکا" + + "تاکانا", + []uint16{ // 68 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001e, 0x001e, 0x001e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x003c, 0x003c, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0062, 0x0062, + 0x006a, 0x006a, 0x006a, 0x006a, 0x0076, 0x0082, 0x0090, 0x0090, + 0x009c, 0x00a2, 0x00a2, 0x00bc, 0x00e2, 0x00e2, 0x00ea, 0x00fa, + 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, + // Entry 40 - 7F + 0x0106, 0x0106, 0x0106, 0x0116, + }, + }, + {}, // naq + {}, // nd + { // ne + neScriptStr, + neScriptIdx, + }, + { // nl + nlScriptStr, + nlScriptIdx, + }, + {}, // nmg + { // nn + "arabiskarmiskarmenskavestiskbalinesiskbatakbengaliblissymbolbopomofobrah" + + "mibraillebuginesiskbuhidchakmafelles kanadiske urspråksstavingarkari" + + "skchamcherokeecirthkoptiskkypriotiskkyrilliskkyrillisk (kyrkjeslavis" + + "k variant)devanagarideseretegyptisk demotiskegyptisk hieratiskegypti" + + "ske hieroglyfaretiopiskkhutsuri (asomtavruli og nuskhuri)georgiskgla" + + "golittiskgotiskgreskgujaratigurmukhihangulhanhanunooforenkla kinesis" + + "ktradisjonell kinesiskhebraiskhiraganapahawk hmongkatakana eller hir" + + "aganagammalungarskindusgammalitaliskjavanesiskjapanskkayah likatakan" + + "akharoshthikhmerkannadakoreanskkaithisklannalaotisklatinsk (frakturv" + + "ariant)latinsk (gælisk variant)latinsklepchalumbulineær Alineær Blyk" + + "isklydiskmandaiskmanikeiskmaya-hieroglyfarmeroitiskmalayalammongolsk" + + "moonmeitei-mayekmyanmarn’kooghamol-chikiorkhonoriyaosmanyagammalperm" + + "iskphags-painskripsjonspahlavisalmepahlavipahlavifønikiskpollard-fon" + + "etiskinskripsjonsparthiskrejangrongorongorunersamaritansksaratisaura" + + "shtrateiknskriftshavisksinhalasundanesisksyloti nagrisyriakisksyriak" + + "isk (estrangelo-variant)syriakisk (vestleg variant)syriakisk (austle" + + "g variant)tagbanwatai leny tai luetamilsktai viettelugutengwartifina" + + "ghtagalogthaanathaitibetanskugaritiskvaisynleg talegammalpersisksume" + + "ro-akkadisk kileskriftyinedarvamatematisk notasjonsymbolkode for spr" + + "åk utan skriftfellesukjend skrift", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x000d, 0x0014, + 0x001c, 0x0026, 0x0026, 0x0026, 0x002b, 0x0032, 0x0032, 0x003c, + 0x0044, 0x004a, 0x0051, 0x005b, 0x0060, 0x0066, 0x0089, 0x008f, + 0x0093, 0x009b, 0x00a0, 0x00a7, 0x00b1, 0x00ba, 0x00db, 0x00e5, + 0x00ec, 0x00ec, 0x00fd, 0x010f, 0x0124, 0x0124, 0x012c, 0x014e, + 0x0156, 0x0162, 0x0168, 0x0168, 0x016d, 0x0175, 0x017d, 0x017d, + 0x0183, 0x0186, 0x018d, 0x019e, 0x01b3, 0x01b3, 0x01bb, 0x01c3, + 0x01c3, 0x01cf, 0x01e6, 0x01f3, 0x01f8, 0x0205, 0x0205, 0x020f, + // Entry 40 - 7F + 0x0216, 0x0216, 0x021e, 0x0226, 0x0230, 0x0235, 0x0235, 0x023c, + 0x0244, 0x0244, 0x024c, 0x0251, 0x0258, 0x0270, 0x0289, 0x0290, + 0x0296, 0x029b, 0x02a4, 0x02ad, 0x02ad, 0x02ad, 0x02b3, 0x02b9, + 0x02b9, 0x02c1, 0x02ca, 0x02ca, 0x02da, 0x02da, 0x02da, 0x02e3, + 0x02ec, 0x02ec, 0x02f4, 0x02f8, 0x02f8, 0x0304, 0x0304, 0x030b, + 0x030b, 0x030b, 0x030b, 0x030b, 0x0311, 0x0311, 0x0316, 0x031e, + 0x0324, 0x0329, 0x0329, 0x0330, 0x0330, 0x0330, 0x033d, 0x0345, + 0x0358, 0x0364, 0x036b, 0x0374, 0x0384, 0x0398, 0x039e, 0x03a8, + // Entry 80 - BF + 0x03ad, 0x03b8, 0x03be, 0x03be, 0x03c8, 0x03d3, 0x03da, 0x03da, + 0x03da, 0x03da, 0x03e1, 0x03e1, 0x03ec, 0x03f8, 0x0401, 0x041f, + 0x043a, 0x0455, 0x045d, 0x045d, 0x0463, 0x046d, 0x0474, 0x0474, + 0x047c, 0x0482, 0x0489, 0x0491, 0x0498, 0x049e, 0x04a2, 0x04ab, + 0x04ab, 0x04b4, 0x04b7, 0x04c2, 0x04c2, 0x04c2, 0x04cf, 0x04e9, + 0x04eb, 0x04f2, 0x0505, 0x0505, 0x050b, 0x0526, 0x052c, 0x0539, + }, + }, + {}, // nnh + { // no + noScriptStr, + noScriptIdx, + }, + {}, // nus + {}, // nyn + { // om + "Latin", + []uint16{ // 80 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, + }, + }, + { // or + "ଆରବିକ୍ଇମ୍ପେରିଆଲ୍ ଆରମିକ୍ଆର୍ମେନିଆନ୍ଆବେସ୍ଥାନ୍ବାଲିନୀଜ୍ବାଟାକ୍ବଙ୍ଗାଳୀବ୍ଲିସିମ୍ବ" + + "ଲସ୍ବୋପୋମୋଫୋବ୍ରାହ୍ମୀବ୍ରିଲ୍ବୁଗାନୀଜ୍ବୁହିଦ୍ଚକମାୟୁନିଫାଏଡ୍ କାନାଡିଆନ୍ ଆବ୍" + + "ରୋଜିନାଲ୍ ସିଲାବିକସ୍କୈରନ୍ଛମ୍ଚିରୁକୀସିର୍ଥକପଟିକ୍ସିପ୍ରଅଟ୍ସିରିଲିକ୍ଓଲ୍ଡ ଚର" + + "୍ଚ୍ଚ ସାଲଭୋନିକ୍ ସିରିଲିକ୍ଦେବାନଗିରିଡେସର୍ଟଇଜିପ୍ଟିଆନ୍ ଡେମୋଟିକ୍ଇଜିପ୍ଟିଆନ" + + "୍ ହାଇଅରଟିକ୍ଇଜିପ୍ଟିଆନ୍ ହାଅରଗ୍ଲିପସ୍ଇଥୋପିକ୍ଜର୍ଜିଆନ୍ ଖୁଟସୁରୀଜର୍ଜିଆନ୍ଗ୍" + + "ଲାଗ୍ଲୋଟିକ୍ଗୋଥିକ୍ଗ୍ରୀକ୍ଗୁଜୁରାଟୀଗୁରୁମୁଖୀହାଙ୍ଗୁଲ୍ହାନ୍ହାନୁନ୍ସରଳୀକୃତ ହା" + + "ନ୍ପାରମ୍ପରିକ୍ ହାନ୍ହେବ୍ର୍ୟୁହିରାଗାନାପାହୋ ହୋଙ୍ଗକାଟାକାନ୍ କିମ୍ବା ହିରାଗାନ" + + "୍ପୁରୁଣା ହଙ୍ଗେରିଆନ୍ସିନ୍ଧୁପୁରୁଣା ଇଟାଲୀଜାଭାନୀଜ୍ଜାପାନୀଜ୍କାୟାହା ଲୀକାଟକା" + + "ନ୍ଖାରୋସ୍ଥିଖ୍ମେର୍କନ୍ନଡକୋରିଆନ୍କୈଥିଲାନାଲାଓଫ୍ରାକଥୁର୍ ଲାଟିନ୍ଗାଏଲିକ୍ ଲାଟ" + + "ିନ୍ଲାଟିନ୍ଲେପଚାଲିମ୍ବୁଲିନିୟର୍ଲିନିୟର୍ ବିଲିଶିୟନ୍ଲିଡିୟନ୍ମାନଡେନ୍ମନଶୀନ୍ମୟ" + + "ାନ୍ ହାୟରଲଜିକସ୍ମେରୋଇଟିକ୍ମାଲୟଲମ୍ମଙ୍ଗୋଲିଆନ୍ଚନ୍ଦ୍ରମାଏତି ମାୟେକ୍ମିଆମାର୍ଏ" + + "ନ୍ କୋଓଘାମାଓଲ୍ ଚିକିଓରୋଖନ୍ଓଡିଆଓସୋମାନିୟାଓଲ୍ଡ ପରମିକ୍ଫାଗସ୍-ପାଇନସ୍କ୍ରୀପସ" + + "ାନଲ୍ ପାହାଲାୱୀସ୍ଲାଟର୍ ପାହାଲାୱୀବୁକ୍ ପାହାଲାୱୀଫେନୋସିଆନ୍ପୋଲାର୍ଡ ଫୋନେଟିକ" + + "୍ଇନସ୍କ୍ରୀପସାନଲ୍ ପାର୍ଥିଆନ୍ରେଜାଙ୍ଗରୋଙ୍ଗୋରୋଙ୍ଗୋରନିକ୍ସମୌରିଟନ୍ସାରାତିସୌର" + + "ାଷ୍ଟ୍ରସାଙ୍କେତିକ ଲିଖସାବିୟାନ୍ସିଂହଳସୁଦାନୀଜ୍ସୀଲିତୋ ନଗରୀସିରିୟାକ୍ଏଷ୍ଟ୍ରା" + + "ଙ୍ଗେଲୋ ସିରିକ୍ୱେଷ୍ଟର୍ନ ସିରିକ୍ଇଷ୍ଟର୍ନ ସିରିକ୍ତଗବାନ୍ୱାତାଇ ଲେନୂତନ ତାଇ ଲ" + + "ୁଏତାମିଲ୍ତାଇ ଭିଏତ୍ତେଲୁଗୁତେଙ୍ଗୱାର୍ତିଫିଙ୍ଘାଟାଗାଲୋଗ୍ଥାନାଥାଇତିବେତାନ୍ୟୁଗ" + + "ାରିଟିକ୍ୱାଇଭିଜିବଲ୍ ସ୍ପିଚ୍ପୁରୁଣା ଫରାସୀସୁମେରୋ-ଆକ୍କାଡିଆନ୍ ସୁନିଫର୍ମୟୀବଂ" + + "ଶଗତଗାଣିତିକ ନୋଟେସନ୍ସିମ୍ବଲ୍ଅଲିଖିତସାଧାରଣଅଞ୍ଜାତ କିମ୍ବା ଅବୈଧ ସ୍କ୍ରୀପ୍ଟ", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0043, 0x0061, + 0x007c, 0x0094, 0x0094, 0x0094, 0x00a6, 0x00bb, 0x00bb, 0x00df, + 0x00f7, 0x010f, 0x0121, 0x0139, 0x014b, 0x0157, 0x01cc, 0x01db, + 0x01e4, 0x01f6, 0x0205, 0x0217, 0x022f, 0x0247, 0x029b, 0x02b6, + 0x02c8, 0x02c8, 0x02ff, 0x0339, 0x0379, 0x0379, 0x038e, 0x03bc, + 0x03d4, 0x03f8, 0x040a, 0x040a, 0x041c, 0x0434, 0x044c, 0x044c, + 0x0464, 0x0470, 0x0482, 0x04a4, 0x04cf, 0x04cf, 0x04e7, 0x04ff, + 0x04ff, 0x051b, 0x055f, 0x0590, 0x05a2, 0x05c4, 0x05c4, 0x05dc, + // Entry 40 - 7F + 0x05f4, 0x05f4, 0x060d, 0x0622, 0x063a, 0x064c, 0x064c, 0x065b, + 0x0670, 0x0670, 0x067c, 0x0688, 0x0691, 0x06bf, 0x06e7, 0x06f9, + 0x0708, 0x071a, 0x072f, 0x074b, 0x074b, 0x074b, 0x0760, 0x0775, + 0x0775, 0x078a, 0x079c, 0x079c, 0x07ca, 0x07ca, 0x07ca, 0x07e5, + 0x07fa, 0x07fa, 0x0818, 0x082a, 0x082a, 0x084c, 0x084c, 0x0861, + 0x0861, 0x0861, 0x0861, 0x0861, 0x0871, 0x0871, 0x0880, 0x0896, + 0x08a8, 0x08b4, 0x08b4, 0x08cf, 0x08cf, 0x08cf, 0x08ee, 0x0904, + 0x0947, 0x0975, 0x099a, 0x09b5, 0x09e3, 0x0a29, 0x0a3e, 0x0a62, + // Entry 80 - BF + 0x0a71, 0x0a89, 0x0a9b, 0x0a9b, 0x0ab6, 0x0adb, 0x0af3, 0x0af3, + 0x0af3, 0x0af3, 0x0b02, 0x0b02, 0x0b1a, 0x0b39, 0x0b51, 0x0b8b, + 0x0bb6, 0x0bde, 0x0bf6, 0x0bf6, 0x0c06, 0x0c26, 0x0c38, 0x0c38, + 0x0c51, 0x0c63, 0x0c7e, 0x0c96, 0x0cae, 0x0cba, 0x0cc3, 0x0cdb, + 0x0cdb, 0x0cf9, 0x0d02, 0x0d2a, 0x0d2a, 0x0d2a, 0x0d4c, 0x0d96, + 0x0d9c, 0x0dab, 0x0dd6, 0x0dd6, 0x0deb, 0x0dfd, 0x0e0f, 0x0e5d, + }, + }, + { // os + "АраббагКиррилицӕӔнцонгонд китайагТрадицион китайагЛатинагНӕфысгӕНӕзонгӕ " + + "скрипт", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0041, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + // Entry 40 - 7F + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + // Entry 80 - BF + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x007e, 0x007e, 0x0099, + }, + }, + { // pa + paScriptStr, + paScriptIdx, + }, + { // pa-Arab + "عربیگُرمُکھی", + []uint16{ // 47 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0018, + }, + }, + { // pl + plScriptStr, + plScriptIdx, + }, + {}, // prg + { // ps + "عربي", + []uint16{ // 6 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, + }, + }, + { // pt + ptScriptStr, + ptScriptIdx, + }, + { // pt-PT + ptPTScriptStr, + ptPTScriptIdx, + }, + {}, // qu + { // rm + "arabarameic imperialarmenavesticbalinaisbatakbengalsimbols da Blissbopom" + + "ofobrahmiscrittira da Braillebuginaisbuhidchakmasimbols autoctons ca" + + "nadais unifitgadscarianchamcherokeecirthcopticcipriotcirillicslav da" + + " baselgia vegldevanagarideseretegipzian demoticegipzian ieraticierog" + + "lifas egipzianasetiopickutsurigeorgianglagoliticgoticgrecgujaratigur" + + "mukhihangulhanhanunooscrittira chinaisa simplifitgadascrittira china" + + "isa tradiziunalaebraichiraganapahawn hmongkatanaka u hiraganaungarai" + + "s veglindusitalic vegljavanaisgiapunaiskayah likatakanakharoshthikhm" + + "er/cambodschankannadacoreankaithilannalaotlatin (scrittira gotica)la" + + "tin (scrittira gaelica)latinlepchalimbulinear Alinear Blichiclidicma" + + "ndaicmanicheicieroglifas mayameroiticmalaisianmongolicmoonmeetei may" + + "ekburmaisn’kooghamol chikiorkhonoriyaosmanpermic veglphags-papahlavi" + + " dad inscripziunspahlavi da psalmspahlavi da cudeschsfenizianfonetic" + + "a da Pollardpartic dad inscripziunsrejangrongorongorunicsamaritansar" + + "atisaurashtralingua da segnsshaviansingalaissundanaissyloti nagrisir" + + "icsiric estrangelosiric dal vestsiric da l’osttagbanwatai letai luet" + + "amiltai viettelugutengwartifinaghtagalogthaanatailandaistibetanugari" + + "ticvaiialfabet visibelpersian veglscrittira a cugn sumeric-accadicay" + + "iertànotaziun matematicasimbolslinguas na scrittasbetg determinàscri" + + "ttira nunenconuschenta u nunvalaivla", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0014, 0x0019, + 0x0020, 0x0028, 0x0028, 0x0028, 0x002d, 0x0033, 0x0033, 0x0043, + 0x004b, 0x0051, 0x0065, 0x006d, 0x0072, 0x0078, 0x009d, 0x00a3, + 0x00a7, 0x00af, 0x00b4, 0x00ba, 0x00c1, 0x00c9, 0x00de, 0x00e8, + 0x00ef, 0x00ef, 0x00ff, 0x010f, 0x0124, 0x0124, 0x012b, 0x0132, + 0x013a, 0x0144, 0x0149, 0x0149, 0x014d, 0x0155, 0x015d, 0x015d, + 0x0163, 0x0166, 0x016d, 0x018d, 0x01ac, 0x01ac, 0x01b2, 0x01ba, + 0x01ba, 0x01c6, 0x01d9, 0x01e6, 0x01eb, 0x01f6, 0x01f6, 0x01fe, + // Entry 40 - 7F + 0x0207, 0x0207, 0x020f, 0x0217, 0x0221, 0x0232, 0x0232, 0x0239, + 0x023f, 0x023f, 0x0245, 0x024a, 0x024e, 0x0266, 0x027f, 0x0284, + 0x028a, 0x028f, 0x0297, 0x029f, 0x029f, 0x029f, 0x02a5, 0x02aa, + 0x02aa, 0x02b1, 0x02ba, 0x02ba, 0x02c9, 0x02c9, 0x02c9, 0x02d1, + 0x02da, 0x02da, 0x02e2, 0x02e6, 0x02e6, 0x02f2, 0x02f2, 0x02f9, + 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02ff, 0x02ff, 0x0304, 0x030c, + 0x0312, 0x0317, 0x0317, 0x031c, 0x031c, 0x031c, 0x0327, 0x032f, + 0x0347, 0x0358, 0x036b, 0x0373, 0x0386, 0x039d, 0x03a3, 0x03ad, + // Entry 80 - BF + 0x03b2, 0x03bb, 0x03c1, 0x03c1, 0x03cb, 0x03da, 0x03e1, 0x03e1, + 0x03e1, 0x03e1, 0x03ea, 0x03ea, 0x03f3, 0x03ff, 0x0404, 0x0414, + 0x0422, 0x0432, 0x043a, 0x043a, 0x0440, 0x0447, 0x044c, 0x044c, + 0x0454, 0x045a, 0x0461, 0x0469, 0x0470, 0x0476, 0x0480, 0x0487, + 0x0487, 0x048f, 0x0493, 0x04a2, 0x04a2, 0x04a2, 0x04ae, 0x04cf, + 0x04d1, 0x04d6, 0x04e9, 0x04e9, 0x04f0, 0x0503, 0x0512, 0x053a, + }, + }, + {}, // rn + { // ro + roScriptStr, + roScriptIdx, + }, + {}, // ro-MD + {}, // rof + { // ru + ruScriptStr, + ruScriptIdx, + }, + {}, // ru-UA + {}, // rw + {}, // rwk + { // sah + "АрааптыыЭрмээннииНууччалыыГириэктииДьоппуоннууКэриэйдииЛатыынныыМоҕуоллу" + + "уТаайдыыСуруллубатахБиллибэт сурук", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0022, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + // Entry 40 - 7F + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + // Entry 80 - BF + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00b8, 0x00b8, 0x00d3, + }, + }, + {}, // saq + {}, // sbp + { // se + "arábakyrillalašgreikkalašhangulkiinnašálkiárbevirolašhiraganakatakanaláh" + + "tenašorrut chállojuvvotdovdameahttun chállin", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x001c, 0x001c, 0x001c, 0x001c, + 0x0022, 0x002a, 0x002a, 0x002f, 0x003c, 0x003c, 0x003c, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 40 - 7F + 0x0044, 0x0044, 0x0044, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + // Entry 80 - BF + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0069, 0x0069, 0x007f, + }, + }, + { // se-FI + "arábalaškiinnálašálkes kiinnálašárbevirolaš kiinnálašorrut čállojuvvotdo" + + "vdameahttun čállin", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x0015, 0x0015, 0x0027, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + // Entry 40 - 7F + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + // Entry 80 - BF + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0053, 0x0053, 0x0069, + }, + }, + {}, // seh + {}, // ses + {}, // sg + {}, // shi + {}, // shi-Latn + { // si + siScriptStr, + siScriptIdx, + }, + { // sk + skScriptStr, + skScriptIdx, + }, + { // sl + slScriptStr, + slScriptIdx, + }, + {}, // smn + {}, // sn + { // so + "Aan la qorinFar aan la aqoon amase aan saxnayn", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x002e, + }, + }, + { // sq + sqScriptStr, + sqScriptIdx, + }, + { // sr + srScriptStr, + srScriptIdx, + }, + {}, // sr-Cyrl-BA + {}, // sr-Cyrl-ME + {}, // sr-Cyrl-XK + { // sr-Latn + srLatnScriptStr, + srLatnScriptIdx, + }, + {}, // sr-Latn-BA + {}, // sr-Latn-ME + {}, // sr-Latn-XK + { // sv + svScriptStr, + svScriptIdx, + }, + {}, // sv-FI + { // sw + swScriptStr, + swScriptIdx, + }, + {}, // sw-CD + {}, // sw-KE + { // ta + taScriptStr, + taScriptIdx, + }, + { // te + teScriptStr, + teScriptIdx, + }, + {}, // teo + { // th + thScriptStr, + thScriptIdx, + }, + { // ti + "ፊደልላቲን", + []uint16{ // 80 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + // Entry 40 - 7F + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0012, + }, + }, + { // to + "tohinima fakaʻafakatohinima fakaʻalapēnia-kaukasiatohinima fakaʻalepeato" + + "hinima fakaʻalāmiti-ʻemipaeatohinima fakaʻāmeniatohinima fakaʻavesit" + + "anitohinima fakapalitohinima fakapamumitohinima fakapasa-vātohinima " + + "fakapātakitohinima fakapengikalitohinima fakaʻilonga-pilisitohinima " + + "fakapopomofotohinima fakapalāmītohinima laukonga ki he kuitohinima f" + + "akapukisitohinima fakapuhititohinima fakasakimātohinima fakatupuʻi-k" + + "ānata-fakatahatahatohinima fakakalitohinima fakasamitohinima fakase" + + "lokītohinima fakakīlititohinima fakakopitikatohinima fakasaipalesito" + + "hinima fakalūsiatohinima fakalūsia-lotu-motuʻatohinima fakaʻinitia-t" + + "evanākalītohinima fakateseletitohinimanounou fakatupoloiētohinima te" + + "motika-fakaʻisipitetohinima hielatika-fakaʻisipitetohinima tongitapu" + + "-fakaʻisipitetohinima fakaʻelepasanitohinima fakaʻītiōpiatohinima fa" + + "kakutusuli-seōsiatohinima fakaseōsiatohinima fakakalakolititohinima " + + "fakakotikatohinima fakasilanitātohinima fakakalisitohinima fakaʻinit" + + "ia-kutalatitohinima fakakūmukitohinima fakahānipitohinima fakakōlea-" + + "hāngūlutohinima fakasiainatohinima fakahanunōʻotohinima fakasiaina-f" + + "akafaingofuatohinima fakasiaina-tukufakaholotohinima fakahepelūtohin" + + "ima fakasiapani-hilakanatohinima tongitapu-fakaʻanatoliatohinima fak" + + "apahaumongitohinima fakasilapa-siapanitohinima fakahungakalia-motuʻa" + + "tohinima fakaʻinitusitohinima fakaʻītali-motuʻatohinima fakasamotohi" + + "nima fakasavatohinima fakasiapanitohinima fakaiūkenitohinima fakakai" + + "alītohinima fakasiapani-katakanatohinima fakakalositītohinima fakaka" + + "mipōtiatohinima fakakosikītohinima fakaʻinitia-kanatatohinima fakakō" + + "leatohinima fakakepeletohinima fakakaiatītohinima fakalanatohinima f" + + "akalautohinima fakalatina-falakitulitohinima fakalatina-kaelikitohin" + + "ima fakalatinatohinima fakalepasātohinima fakalimipūtohinima fakalin" + + "ea-Atohinima fakalinea-Ptohinima fakafalāsetohinima fakalomatohinima" + + " fakalīsiatohinima fakalītiatohinima fakamahasanitohinima fakamanita" + + "eatohinima fakamanikaeatohinima tongitapu fakamaiatohinima fakamēnit" + + "itohinima fakameloue-heiheitohinima fakamelouetohinima fakaʻinitia-m" + + "alāialamitohinima fakamotītohinima fakamongokōliatohinima laukonga k" + + "i he kui-māhinatohinima fakamolōtohinima fakametei-maiekitohinima fa" + + "kapematohinima fakaʻalepea-tokelau-motuʻatohinima fakanapateatohinim" + + "a fakanati-sepatohinima fakanikōtohinima fakanasiūtohinima fakaʻokam" + + "itohinima fakaʻolisikitohinima fakaʻolikonitohinima fakaʻotiatohinim" + + "a fakaʻosimāniatohinima fakapalamilenetohinima fakapausinihautohinim" + + "a fakapēmi-motuʻatohinima fakapākisipātohinima fakapālavi-tongitohin" + + "ima fakapālavi-saametohinima fakapālavi-tohitohinima fakafoinikiatoh" + + "inima fakafonētiki-polātitohinima fakapātia-tongitohinima fakalesian" + + "gitohinima fakalongolongotohinima fakalunikitohinima fakasamalitanet" + + "ohinima fakasalatitohinima fakaʻalepea-tonga-motuʻatohinima fakasaul" + + "asitātohinima fakaʻilonga-tohitohinima fakasiavitohinima fakasiālatā" + + "tohinima fakasititamitohinima fakakutauātitohinima fakasingihalatohi" + + "nima fakasolasomipengitohinima fakasunitātohinima fakasailoti-nakili" + + "tohinima fakasuliāiātohinima fakasuliāiā-ʻesitelangelotohinima fakas" + + "uliāiā-hihifotohinima fakasuliāiā-hahaketohinima fakatakipaneuātohin" + + "ima fakatakilitohinima fakatai-luetohinima fakatai-lue-foʻoutohinima" + + " fakatamilitohinima fakatangutitohinima fakatai-vietitohinima fakaʻi" + + "nitia-telukutohinima fakatengiualitohinima fakatifinākitohinima faka" + + "takalokatohinima fakatānatohinima fakatailanitohinima fakataipetitoh" + + "inima fakatīhutatohinima fakaʻūkalititohinima fakavaitohinima fakafo" + + "nētiki-hāmaitohinima fakavalangi-kisitītohinima fakauoleaitohinima f" + + "akapēsiamuʻatohinima fakamataʻingahau-sumelo-akatiatohinima fakaīīto" + + "hinima hokositohinima fakamatematikatohinima fakatātātohinima fakaʻi" + + "longatohinima taʻetohitohiʻitohinima fakatatautohinima taʻeʻiloa", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0014, 0x0035, 0x0035, 0x004a, 0x006b, 0x0081, + 0x0099, 0x00aa, 0x00bd, 0x00d2, 0x00e6, 0x00fc, 0x00fc, 0x0118, + 0x012d, 0x0142, 0x015d, 0x0170, 0x0183, 0x0197, 0x01c0, 0x01d1, + 0x01e2, 0x01f6, 0x020a, 0x021f, 0x0235, 0x0248, 0x0268, 0x028a, + 0x029f, 0x02bb, 0x02da, 0x02fa, 0x031a, 0x0332, 0x034a, 0x0367, + 0x037b, 0x0392, 0x03a5, 0x03bb, 0x03ce, 0x03ec, 0x0400, 0x0414, + 0x0431, 0x0444, 0x045b, 0x047c, 0x049c, 0x049c, 0x04b0, 0x04cd, + 0x04ee, 0x0505, 0x0520, 0x053f, 0x0555, 0x0572, 0x0583, 0x0594, + // Entry 40 - 7F + 0x05a8, 0x05bc, 0x05d0, 0x05ed, 0x0603, 0x061a, 0x062e, 0x064a, + 0x065d, 0x0670, 0x0684, 0x0695, 0x06a5, 0x06c3, 0x06de, 0x06f1, + 0x0705, 0x0719, 0x072d, 0x0741, 0x0755, 0x0766, 0x0779, 0x078c, + 0x07a1, 0x07b6, 0x07cb, 0x07cb, 0x07e6, 0x07fa, 0x0814, 0x0827, + 0x0848, 0x085a, 0x0872, 0x0895, 0x08a7, 0x08c0, 0x08c0, 0x08d1, + 0x08f6, 0x090a, 0x090a, 0x0920, 0x0932, 0x0945, 0x0959, 0x096f, + 0x0985, 0x0998, 0x0998, 0x09b0, 0x09c7, 0x09de, 0x09f8, 0x0a0f, + 0x0a29, 0x0a43, 0x0a5c, 0x0a71, 0x0a8f, 0x0aa8, 0x0abd, 0x0ad4, + // Entry 80 - BF + 0x0ae7, 0x0afe, 0x0b11, 0x0b34, 0x0b4b, 0x0b65, 0x0b77, 0x0b8d, + 0x0ba2, 0x0bb8, 0x0bce, 0x0be8, 0x0bfc, 0x0c17, 0x0c2d, 0x0c52, + 0x0c6f, 0x0c8c, 0x0ca4, 0x0cb7, 0x0ccb, 0x0ce6, 0x0cf9, 0x0d0d, + 0x0d23, 0x0d3f, 0x0d55, 0x0d6b, 0x0d80, 0x0d92, 0x0da6, 0x0dba, + 0x0dce, 0x0de5, 0x0df5, 0x0e12, 0x0e2e, 0x0e41, 0x0e59, 0x0e81, + 0x0e92, 0x0ea1, 0x0eb8, 0x0ecb, 0x0ee0, 0x0ef9, 0x0f0b, 0x0f1f, + }, + }, + { // tr + trScriptStr, + trScriptIdx, + }, + {}, // twq + {}, // tzm + { // ug + "ئافاكائەرەبخان جەمەتى ئارامۇئەرمەنئاۋېستابالىبامۇمباسساباتاكبېنگالبىلىس " + + "بەلگىلىرىخەنچە پىنيىنبراخمىبرائىل ئەمالار يېزىقىبۇگىبۇخىتچاكمابىرلى" + + "ككە كەلگەن كانادا يەرلىك بوغۇم جەدۋىلىكارىياچامچېروكىكىرسچەكوپتىكسى" + + "پرۇسكىرىلقەدىمكى چىركاۋ سىلاۋيانچە كىرىلدېۋاناگارىدېزېرېتدۇپلويان ت" + + "ېز خاتىرىلەشدېموتىكچە مىسىرخىيەراتىكچە مىسىرتەسۋىرىي يېزىق مىسىرئېف" + + "ىيوپىيەچەخۇتسۇرى گىرۇزىنچەگىرۇزىنچەگىلاگوتچەگوتچەگىرانتاچەگىرېكچەگۇ" + + "جاراتچەگۇرمۇكىچەخەنچەخانۇنۇچەئاددىي خەنچەمۇرەككەپ خەنچەئىبرانىچەخىر" + + "اگانائاناتولىيە تەسۋىرىي يېزىقمۆڭچەياپونچە خىراگانا ياكى كاتاكاناقە" + + "دىمكى ماجارچەئىندۇسچەقەدىمكى ئىتاليانچەياۋاچەياپونچەجۇرچېنچەكاياھچە" + + "كاتاكاناكاروشتىچەكېخمېرچەخوجكىچەكانناداچەكورېيەچەكپېللېچەكاياتىچەلا" + + "نناچەلائوسچەفىراكتۇر لاتىنچەسىكوت لاتىنچەلاتىنچەلەپچاچەلىمبۇچەسىزىق" + + "لىق Aسىزىقلىق Bفراسېرچەلوماچەلىسىيانچەلىدىيەچەماندائىكچەمانەكېزەمچە" + + "ماياچە تەسۋىرىي يېزىقمېندېچەمېتروئىت يازمىچەمېتروئىتمالايامچەموڭغۇل" + + "چەكورىيەمروچەمانىپۇرىچەبىرماچەقەدىمكى شىمالىي ئەرەبچەئانباتچەناشىچە" + + "نىكوچەنۈشۇچەئوگەمچەئول-چىكىچەئورخۇنچەئورىياچەئوسمانيەپالمىراچەقەدىم" + + "كى پېرمىكچەپاسپاچەپەھلىۋىچە ئويما خەتپەھلىۋىچە شېئىرىي تىلپەھلىۋىچە" + + " كىتابى تىلفىنىكچەپوللارد تاۋۇشلىرىپارتىئانچە ئويما خەترېجاڭچەروڭگور" + + "وڭگورۇنىكچەسامارىچەساراتىچەقەدىمكى جەنۇبى ئەرەبچەسائۇراشتىراچەئىشار" + + "ەت تىلىشاۋىيانچەشاراداچەكۇداۋادچەسىنخالاچەسورا سامپىڭسۇنداچەسىيولوت" + + "ى-ناگرىچەسۈرىيەچەسۈرىيەچە ئەبجەتغەربىي سۈرىيەچەشەرقىي سۈرىيەچەتاگبا" + + "نۋاچەتاكرىچەتاي-لەچەيېڭى تاي-لەچەتامىلچەتاڭغۇتچەتايلاندچە-ۋىيېتنامچ" + + "ەتېلۇگۇچەتېڭۋارچەتىفىناغچەتاگالوگچەتاناچەتايلاندچەتىبەتچەتىرخۇتاچەئ" + + "ۇگارىتىكچەۋايچەكۆرۈنۈشچان تاۋۇشۋاراڭ كىشىتىۋولىئايقەدىمكى پارىسچەسۇ" + + "مېر-ئاككادىيان مىخ خەتيىچەئىرسىيەت ئاتالغۇماتېماتىكىلىق بەلگەبەلگەي" + + "ېزىلمىغانئورتاقيوچۇن يېزىق", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, 0x0016, 0x0036, 0x0042, + 0x0050, 0x0058, 0x0062, 0x006c, 0x0076, 0x0082, 0x0082, 0x009f, + 0x00b6, 0x00c2, 0x00ea, 0x00f2, 0x00fc, 0x0106, 0x0157, 0x0163, + 0x0169, 0x0175, 0x0181, 0x018d, 0x0199, 0x01a3, 0x01de, 0x01f2, + 0x0200, 0x022a, 0x0247, 0x0268, 0x028e, 0x028e, 0x02a6, 0x02c7, + 0x02d9, 0x02eb, 0x02f5, 0x0307, 0x0315, 0x0327, 0x0339, 0x0339, + 0x0339, 0x0343, 0x0353, 0x036a, 0x0385, 0x0385, 0x0397, 0x03a7, + 0x03d7, 0x03e1, 0x041a, 0x0437, 0x0447, 0x046a, 0x046a, 0x0476, + // Entry 40 - 7F + 0x0484, 0x0494, 0x04a2, 0x04b2, 0x04c4, 0x04d4, 0x04e2, 0x04f4, + 0x0504, 0x0514, 0x0524, 0x0532, 0x0540, 0x055f, 0x0578, 0x0586, + 0x0594, 0x05a2, 0x05b4, 0x05c6, 0x05d6, 0x05e2, 0x05f4, 0x0604, + 0x0604, 0x0618, 0x062e, 0x062e, 0x0656, 0x0664, 0x0683, 0x0693, + 0x06a5, 0x06a5, 0x06b5, 0x06c1, 0x06cb, 0x06df, 0x06df, 0x06ed, + 0x0719, 0x0729, 0x0729, 0x0735, 0x0741, 0x074d, 0x075b, 0x076e, + 0x077e, 0x078e, 0x078e, 0x079e, 0x07b0, 0x07b0, 0x07cf, 0x07dd, + 0x0801, 0x0829, 0x084f, 0x085d, 0x087e, 0x08a4, 0x08b2, 0x08c6, + // Entry 80 - BF + 0x08d4, 0x08e4, 0x08f4, 0x091e, 0x0938, 0x094f, 0x0961, 0x0971, + 0x0971, 0x0983, 0x0995, 0x09aa, 0x09b8, 0x09d7, 0x09e7, 0x0a04, + 0x0a21, 0x0a3e, 0x0a52, 0x0a60, 0x0a6f, 0x0a87, 0x0a95, 0x0aa5, + 0x0acc, 0x0adc, 0x0aec, 0x0afe, 0x0b10, 0x0b1c, 0x0b2e, 0x0b3c, + 0x0b4e, 0x0b64, 0x0b6e, 0x0b8d, 0x0ba4, 0x0bb2, 0x0bcf, 0x0bfc, + 0x0c04, 0x0c23, 0x0c48, 0x0c48, 0x0c52, 0x0c66, 0x0c72, 0x0c87, + }, + }, + { // uk + ukScriptStr, + ukScriptIdx, + }, + { // ur + urScriptStr, + urScriptIdx, + }, + {}, // ur-IN + { // uz + uzScriptStr, + uzScriptIdx, + }, + { // uz-Arab + "عربی", + []uint16{ // 6 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, + }, + }, + { // uz-Cyrl + "АрабАрманБенгалиБопомофоБраиллеКирилДевангариҲабашГрузинЮнонГужаратиГурм" + + "ухиХангулХанСоддалаштирилганАнъанавийИбронийХираганаЯпонКатаканаХме" + + "рКаннадаКорейсЛаоЛотинМалайаламМўғулчаМьянмаОрияСинхалаТамилТелугуТ" + + "аанаТайТибетРамзларЁзилмаганУмумийНомаълум шрифт", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0020, 0x0020, 0x0020, + 0x0030, 0x0030, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x0048, 0x0048, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0064, 0x0064, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0078, 0x0088, 0x0096, 0x0096, + 0x00a2, 0x00a8, 0x00a8, 0x00c8, 0x00da, 0x00da, 0x00e8, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + // Entry 40 - 7F + 0x0100, 0x0100, 0x0100, 0x0110, 0x0110, 0x0118, 0x0118, 0x0126, + 0x0132, 0x0132, 0x0132, 0x0132, 0x0138, 0x0138, 0x0138, 0x0142, + 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, + 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, + 0x0154, 0x0154, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x016e, + 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, + 0x016e, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + // Entry 80 - BF + 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + 0x0176, 0x0176, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, + 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x018e, 0x018e, + 0x018e, 0x019a, 0x019a, 0x019a, 0x019a, 0x01a4, 0x01aa, 0x01b4, + 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, + 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01c2, 0x01d4, 0x01e0, 0x01fb, + }, + }, + {}, // vai + {}, // vai-Latn + { // vi + viScriptStr, + viScriptIdx, + }, + {}, // vun + { // wae + "ArabišArmenišBengališKirillišDevanagariEthiopišGeorgišGričišGujaratiVere" + + "ifačtTraditionellHebräišJapanišKhmerKannadaKorianišLaotišLatinišMala" + + "isišBurmesišOriyaSingalesišTamilišTeluguThánaThaiSchriftlosUnkodiert" + + "i Schrift", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0021, 0x0021, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x0034, 0x0034, + 0x003c, 0x003c, 0x003c, 0x003c, 0x0044, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x0056, 0x0062, 0x0062, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + // Entry 40 - 7F + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0078, 0x0078, 0x007f, + 0x0088, 0x0088, 0x0088, 0x0088, 0x008f, 0x008f, 0x008f, 0x0097, + 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, + 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a9, + 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, + 0x00a9, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + // Entry 80 - BF + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00c1, 0x00c1, + 0x00c1, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00cd, 0x00d1, 0x00d1, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00db, 0x00db, 0x00ed, + }, + }, + {}, // xog + {}, // yav + { // yi + "אַראַבישצירילישדעוואַנאַגאַריגריכישHebrגַלחיש", + []uint16{ // 80 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x001e, 0x001e, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + // Entry 40 - 7F + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x0056, + }, + }, + {}, // yo + {}, // yo-BJ + { // yue + "阿法卡文字高加索阿爾巴尼亞文阿拉伯文皇室亞美尼亞文亞美尼亞文阿維斯陀文峇里文巴姆穆文巴薩文巴塔克文孟加拉文布列斯文注音符號婆羅米文盲人用點字布吉" + + "斯文布希德文查克馬文加拿大原住民通用字符卡里亞文占文柴羅基文色斯文科普特文塞浦路斯文斯拉夫文西里爾文(古教會斯拉夫文變體)天城文德瑟" + + "雷特文杜普洛伊速記古埃及世俗體古埃及僧侶體古埃及象形文字愛爾巴桑文衣索比亞文喬治亞語系(阿索他路里和努斯克胡里文)喬治亞文格拉哥里文" + + "歌德文格蘭他文字希臘文古吉拉特文古魯穆奇文漢語注音韓文字漢語哈努諾文簡體中文繁體中文希伯來文平假名安那托利亞象形文字楊松錄苗文片假名" + + "或平假名古匈牙利文印度河流域(哈拉帕文)古意大利文韓文字母爪哇文日文女真文字克耶李文片假名卡羅須提文高棉文克吉奇文字坎那達文韓文克培" + + "列文凱提文藍拿文寮國文拉丁文(尖角體活字變體)拉丁文(蓋爾語變體)拉丁文雷布查文林佈文線性文字(A)線性文字(B)栗僳文洛馬文呂西亞" + + "語里底亞語曼底安文摩尼教文瑪雅象形文字門德文麥羅埃文(曲線字體)麥羅埃文馬來亞拉姆文蒙古文蒙氏點字謬文曼尼普爾文緬甸文古北阿拉伯文納" + + "巴泰文字納西格巴文西非書面語言 (N’Ko)女書文字歐甘文桑塔利文鄂爾渾文歐利亞文歐斯曼亞文帕米瑞拉文字古彼爾姆諸文八思巴文巴列維文" + + "(碑銘體)巴列維文(聖詩體)巴列維文(書體)腓尼基文柏格理拼音符帕提亞文(碑銘體)拉讓文朗格朗格象形文古北歐文字撒馬利亞文沙拉堤文古" + + "南阿拉伯文索拉什特拉文手語書寫符號簫柏納字符夏拉達文悉曇文字信德文錫蘭文索朗桑朋文字巽他文希洛弟納格里文敍利亞文敘利亞文(福音體文字" + + "變體)敘利亞文(西方文字變體)敘利亞文(東方文字變體)南島文塔卡里文字傣哪文西雙版納新傣文坦米爾文西夏文傣擔文泰盧固文談格瓦文提非納" + + "文塔加拉文塔安那文泰文西藏文邁蒂利文烏加列文瓦依文視覺語音文字瓦郎奇蒂文字沃雷艾文古波斯文蘇米魯亞甲文楔形文字彞文繼承文字(Unic" + + "ode)數學符號表情符號符號非書寫語言一般文字未知文字", + []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000f, 0x002a, 0x002a, 0x0036, 0x004b, 0x005a, + 0x0069, 0x0072, 0x007e, 0x0087, 0x0093, 0x009f, 0x009f, 0x00ab, + 0x00b7, 0x00c3, 0x00d2, 0x00de, 0x00ea, 0x00f6, 0x0114, 0x0120, + 0x0126, 0x0132, 0x013b, 0x0147, 0x0156, 0x0162, 0x018f, 0x0198, + 0x01a7, 0x01b9, 0x01cb, 0x01dd, 0x01f2, 0x0201, 0x0210, 0x0249, + 0x0255, 0x0264, 0x026d, 0x027c, 0x0285, 0x0294, 0x02a3, 0x02af, + 0x02b8, 0x02be, 0x02ca, 0x02d6, 0x02e2, 0x02e2, 0x02ee, 0x02f7, + 0x0312, 0x0321, 0x0336, 0x0345, 0x0366, 0x0375, 0x0381, 0x038a, + // Entry 40 - 7F + 0x0390, 0x039c, 0x03a8, 0x03b1, 0x03c0, 0x03c9, 0x03d8, 0x03e4, + 0x03ea, 0x03f6, 0x03ff, 0x0408, 0x0411, 0x0435, 0x0453, 0x045c, + 0x0468, 0x0471, 0x0484, 0x0497, 0x04a0, 0x04a9, 0x04b5, 0x04c1, + 0x04c1, 0x04cd, 0x04d9, 0x04d9, 0x04eb, 0x04f4, 0x0512, 0x051e, + 0x0530, 0x0530, 0x0539, 0x0545, 0x054b, 0x055a, 0x055a, 0x0563, + 0x0575, 0x0584, 0x0584, 0x0593, 0x05ae, 0x05ba, 0x05c3, 0x05cf, + 0x05db, 0x05e7, 0x05e7, 0x05f6, 0x0608, 0x0608, 0x061a, 0x0626, + 0x0641, 0x065c, 0x0674, 0x0680, 0x0692, 0x06ad, 0x06b6, 0x06cb, + // Entry 80 - BF + 0x06da, 0x06e9, 0x06f5, 0x0707, 0x0719, 0x072b, 0x073a, 0x0746, + 0x0752, 0x075b, 0x0764, 0x0776, 0x077f, 0x0794, 0x07a0, 0x07c7, + 0x07eb, 0x080f, 0x0818, 0x0827, 0x0830, 0x0845, 0x0851, 0x085a, + 0x0863, 0x086f, 0x087b, 0x0887, 0x0893, 0x089f, 0x08a5, 0x08ae, + 0x08ba, 0x08c6, 0x08cf, 0x08e1, 0x08f3, 0x08ff, 0x090b, 0x0929, + 0x092f, 0x0948, 0x0954, 0x0960, 0x0966, 0x0975, 0x0981, 0x098d, + }, + }, + {}, // zgh + { // zh + zhScriptStr, + zhScriptIdx, + }, + { // zh-Hant + zhHantScriptStr, + zhHantScriptIdx, + }, + { // zh-Hant-HK + "西里爾文梵文埃塞俄比亞文格魯吉亞文古木基文簡體字繁體字坎納達文老撾文拉丁字母馬拉雅拉姆文奧里雅文僧伽羅文泰米爾文它拿字母藏文", + []uint16{ // 160 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0024, 0x0024, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x003f, 0x003f, + 0x003f, 0x003f, 0x003f, 0x0048, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + // Entry 40 - 7F + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x005d, + 0x005d, 0x005d, 0x005d, 0x005d, 0x0066, 0x0066, 0x0066, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0084, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + // Entry 80 - BF + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00b4, 0x00b4, 0x00ba, + }, + }, + { // zu + zuScriptStr, + zuScriptIdx, + }, +} + +const afScriptStr string = "" + // Size: 372 bytes + "ArabiesArmeensBengaalsBopomofoBrailleSirilliesDevanagariEtiopiesGeorgies" + + "GrieksGudjaratiGurmukhiHanbHangulHanVereenvoudigde HanTradisionele HanHe" + + "breeusHiraganaJapannese lettergreepskrifJamoJapanneesKatakanaKhmerKannad" + + "aKoreaansLaoLatynMalabaarsMongoolsMianmarOriyaSinhalaTamilTeloegoeThaana" + + "ThaiTibettaansWiskundige notasieEmojiSimboleOngeskreweAlgemeenOnbekende " + + "skryfstelsel" + +var afScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x0016, 0x0016, 0x0016, + 0x001e, 0x001e, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x002e, 0x002e, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0040, 0x0040, + 0x0048, 0x0048, 0x0048, 0x0048, 0x004e, 0x0057, 0x005f, 0x0063, + 0x0069, 0x006c, 0x006c, 0x007e, 0x008e, 0x008e, 0x0096, 0x009e, + 0x009e, 0x009e, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00bc, 0x00bc, + // Entry 40 - 7F + 0x00c5, 0x00c5, 0x00c5, 0x00cd, 0x00cd, 0x00d2, 0x00d2, 0x00d9, + 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e4, 0x00e4, 0x00e4, 0x00e9, + 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, + 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, + 0x00f2, 0x00f2, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + // Entry 80 - BF + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x0112, 0x0112, + 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x0120, 0x0124, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x0140, 0x0145, 0x014c, 0x0156, 0x015e, 0x0174, +} // Size: 376 bytes + +const amScriptStr string = "" + // Size: 566 bytes + "ዓረብኛአርሜንያዊቤንጋሊቦፖሞፎብሬይልሲይሪልክደቫንጋሪኢትዮፒክጆርጂያዊግሪክጉጃራቲጉርሙኪሃንብሐንጉልሃንቀለል ያለ ሃንባ" + + "ህላዊ ሃንእብራይስጥሂራጋናካታካና ወይንም ሂራጋናጃሞጃፓንኛካታካናክህመርካንአዳኮሪያኛላኦላቲንማላያልምሞንጎሊያኛምያ" + + "ንማርኦሪያሲንሃላታሚልተሉጉታናታይቲቤታንZmthZsyeምልክቶችያልተጻፈየጋራያልታወቀ ስክሪፕት" + +var amScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x002a, 0x002a, 0x002a, + 0x0036, 0x0036, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0051, 0x0051, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x006f, 0x006f, + 0x007e, 0x007e, 0x007e, 0x007e, 0x0087, 0x0093, 0x009f, 0x00a8, + 0x00b4, 0x00ba, 0x00ba, 0x00d1, 0x00e4, 0x00e4, 0x00f6, 0x0102, + 0x0102, 0x0102, 0x0128, 0x0128, 0x0128, 0x0128, 0x012e, 0x012e, + // Entry 40 - 7F + 0x013a, 0x013a, 0x013a, 0x0146, 0x0146, 0x0152, 0x0152, 0x015e, + 0x016a, 0x016a, 0x016a, 0x016a, 0x0170, 0x0170, 0x0170, 0x0179, + 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, + 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, + 0x0188, 0x0188, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x01a9, + 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, + 0x01a9, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, + 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, + // Entry 80 - BF + 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, + 0x01b2, 0x01b2, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, + 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01c7, 0x01c7, + 0x01c7, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d6, 0x01dc, 0x01e8, + 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, + 0x01e8, 0x01e8, 0x01ec, 0x01f0, 0x01ff, 0x020e, 0x0217, 0x0236, +} // Size: 376 bytes + +const arScriptStr string = "" + // Size: 2477 bytes + "العربيةالأرمينيةالباليةالباتاكالبنغاليةرموز بليسالبوبوموفوالهندوسيةالبرا" + + "يلالبجينيزالبهيديةمقاطع كندية أصلية موحدةالكاريةالتشاميةالشيروكيالسيرثا" + + "لقبطيةالقبرصيةالسيريليةالسيريلية السلافية الكنسية القديمةالديفاناجاريال" + + "ديسيريتالديموطيقيةالهيراطيقيةالهيروغليفيةالأثيوبيةالأبجدية الجورجية - أ" + + "سومتافرلي و نسخريالجورجيةالجلاجوليتيكالقوطيةاليونانيةالتاغجراتيةالجرمخي" + + "هانبالهانغولالهانالهانونوالهان المبسطةالهان التقليديةالعبريةالهيراجاناا" + + "لباهوه همونجأبجدية مقطعية يابانيةالمجرية القديمةاندس - هارابانالإيطالية" + + " القديمةجاموالجاويةاليابانيةالكياه لىالكتكاناالخاروشتىالخميريةالكاناداال" + + "كوريةالانااللاواللاتينية - متغير فراكتراللاتينية - متغير غيلىاللاتينيةا" + + "لليبتشا - رونجالليمبوالخطية أالخطية بالليسيةالليديةالمانداينيةالمايا ال" + + "هيروغليفيةالميرويتيكالماليالامالمغوليةمونالميانمارالعربية الشمالية القد" + + "يمةأنكوالأوجهامالأورخونالأورياالأوسمانياالبيرميكية القديمةالفاجسباالفين" + + "يقيةالصوتيات الجماءرنجورنجوالرونيالساراتيالعربية الجنوبية القديمةالشوان" + + "يالسينهالاالسوندانيةالسيلوتي ناغريالسريانيةالسريانية الأسترنجيليةالسريا" + + "نية الغربيةالسريانية الشرقيةالتاجبانواالتاي ليالتاى لى الجديدالتاميليةا" + + "لتيلجوالتينجوارالتيفيناغالتغالوغيةالثعنةالتايلانديةالتبتيةالأجاريتيكيةا" + + "لفايالكلام المرئيالفارسية القديمةالكتابة المسمارية الأكدية السومريةاليي" + + "الموروثتدوين رياضيإيموجيرموزغير مكتوبعامنظام كتابة غير معروف" + +var arScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x0020, + 0x0020, 0x002e, 0x002e, 0x002e, 0x003c, 0x004e, 0x004e, 0x005f, + 0x0073, 0x0085, 0x0093, 0x00a3, 0x00b3, 0x00b3, 0x00de, 0x00ec, + 0x00fc, 0x010c, 0x0118, 0x0126, 0x0136, 0x0148, 0x0189, 0x01a1, + 0x01b3, 0x01b3, 0x01c9, 0x01df, 0x01f7, 0x01f7, 0x0209, 0x024f, + 0x025f, 0x0277, 0x0285, 0x0285, 0x0297, 0x02ad, 0x02bb, 0x02c3, + 0x02d3, 0x02dd, 0x02ed, 0x0306, 0x0323, 0x0323, 0x0331, 0x0345, + 0x0345, 0x035e, 0x0386, 0x03a3, 0x03bc, 0x03dd, 0x03e5, 0x03f3, + // Entry 40 - 7F + 0x0405, 0x0405, 0x0416, 0x0426, 0x0438, 0x0448, 0x0448, 0x0458, + 0x0466, 0x0466, 0x0466, 0x0470, 0x047a, 0x04a6, 0x04ce, 0x04e0, + 0x04fb, 0x0509, 0x0518, 0x0527, 0x0527, 0x0527, 0x0535, 0x0543, + 0x0543, 0x0559, 0x0559, 0x0559, 0x057e, 0x057e, 0x057e, 0x0592, + 0x05a6, 0x05a6, 0x05b6, 0x05bc, 0x05bc, 0x05bc, 0x05bc, 0x05ce, + 0x05fc, 0x05fc, 0x05fc, 0x05fc, 0x0604, 0x0604, 0x0614, 0x0614, + 0x0624, 0x0632, 0x0632, 0x0646, 0x0646, 0x0646, 0x0669, 0x0679, + 0x0679, 0x0679, 0x0679, 0x068b, 0x06a8, 0x06a8, 0x06a8, 0x06b8, + // Entry 80 - BF + 0x06c4, 0x06c4, 0x06d4, 0x0702, 0x0702, 0x0702, 0x0710, 0x0710, + 0x0710, 0x0710, 0x0722, 0x0722, 0x0736, 0x0751, 0x0763, 0x078e, + 0x07af, 0x07d0, 0x07e4, 0x07e4, 0x07f3, 0x080f, 0x0821, 0x0821, + 0x0821, 0x082f, 0x0841, 0x0853, 0x0867, 0x0873, 0x0889, 0x0897, + 0x0897, 0x08af, 0x08b9, 0x08d2, 0x08d2, 0x08d2, 0x08f1, 0x0932, + 0x093a, 0x0948, 0x095d, 0x0969, 0x0971, 0x0982, 0x0988, 0x09ad, +} // Size: 376 bytes + +const azScriptStr string = "" + // Size: 1070 bytes + "ərəbarmierməniavestanbalibatakbenqalblissymbolsbopomofobrahmibraylbuqinb" + + "uhidkakmbirləşmiş kanada yerli yazısıkariyançamçirokisirtkoptikkiprkiril" + + "qədimi kilsa kirilidevanaqarideseretmisir demotikmisir hiyeratikmisir hi" + + "yeroqlifefiopgürcü xutsurigürcüqlaqolitikqotikyunanqucaratqurmuxihanbhan" + + "qılhanhanunuSadələşdirilmiş HanƏnənəvi Hanibraniiraqanapahav monqhecalı " + + "yapon əlifbasıqədimi macarhindistanqədimi italyalıjamocavayaponkayax lik" + + "atakanaxaroştikxmerkannadakoreyaktilannalaofraktur latınıgael latınılatı" + + "nlepçəlimbulusianludianmandayenmaniçayenmaya hiyeroqlifimeroytikmalayala" + + "mmonqolmunmeytey mayekmyanmarnkooğamol çikiorxonoriyaosmanyaqədimi permi" + + "kfaqs-pafliflpkitab paxlavifoenikpolard fonetikprtirecəngronqoronqorunik" + + "samaritansaratisaurastraişarət yazısışavyansinhalsundansiloti nəqrisirya" + + "kestrangela süryanicetaqbanvatay letəzə tay lutamiltavtteluqutengvartifi" + + "naqtaqaloqthanataytibetuqaritvaydanışma səsləriqədimi farssumer-akadyan " + + "kuneyformyiriyazi notasiyaemojisimvollaryazısızümumi yazıtanınmayan yazı" + +var azScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000a, 0x0011, + 0x0018, 0x001c, 0x001c, 0x001c, 0x0021, 0x0027, 0x0027, 0x0032, + 0x003a, 0x0040, 0x0045, 0x004a, 0x004f, 0x0053, 0x0075, 0x007c, + 0x0080, 0x0087, 0x008b, 0x0091, 0x0095, 0x009a, 0x00ae, 0x00b8, + 0x00bf, 0x00bf, 0x00cc, 0x00db, 0x00eb, 0x00eb, 0x00f0, 0x00ff, + 0x0106, 0x0110, 0x0115, 0x0115, 0x011a, 0x0121, 0x0128, 0x012c, + 0x0133, 0x0136, 0x013c, 0x0153, 0x0161, 0x0161, 0x0167, 0x016e, + 0x016e, 0x0178, 0x0190, 0x019d, 0x01a6, 0x01b7, 0x01bb, 0x01bf, + // Entry 40 - 7F + 0x01c4, 0x01c4, 0x01cc, 0x01d4, 0x01dc, 0x01e1, 0x01e1, 0x01e8, + 0x01ee, 0x01ee, 0x01f1, 0x01f6, 0x01f9, 0x0209, 0x0216, 0x021c, + 0x0223, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x022e, 0x0234, + 0x0234, 0x023c, 0x0246, 0x0246, 0x0256, 0x0256, 0x0256, 0x025e, + 0x0267, 0x0267, 0x026d, 0x0270, 0x0270, 0x027c, 0x027c, 0x0283, + 0x0283, 0x0283, 0x0283, 0x0283, 0x0286, 0x0286, 0x028b, 0x0293, + 0x0298, 0x029d, 0x029d, 0x02a4, 0x02a4, 0x02a4, 0x02b2, 0x02b9, + 0x02bc, 0x02bf, 0x02cc, 0x02d2, 0x02e0, 0x02e4, 0x02eb, 0x02f5, + // Entry 80 - BF + 0x02fa, 0x0303, 0x0309, 0x0309, 0x0312, 0x0323, 0x032a, 0x032a, + 0x032a, 0x032a, 0x0330, 0x0330, 0x0336, 0x0343, 0x0349, 0x035e, + 0x035e, 0x035e, 0x0366, 0x0366, 0x036c, 0x0379, 0x037e, 0x037e, + 0x0382, 0x0388, 0x038f, 0x0396, 0x039d, 0x03a2, 0x03a5, 0x03aa, + 0x03aa, 0x03b0, 0x03b3, 0x03c6, 0x03c6, 0x03c6, 0x03d2, 0x03e9, + 0x03eb, 0x03eb, 0x03fa, 0x03ff, 0x0408, 0x0411, 0x041d, 0x042e, +} // Size: 376 bytes + +const bgScriptStr string = "" + // Size: 2351 bytes + "арабскаАрамейскаарменскаАвестанскаБалийскиБатакскабенгалскаБлис символиб" + + "опомофоБрахмиБрайловаБугинскаБухидЧакмаУнифицирани символи на канадски " + + "аборигениКарийскаХамитскаЧерокиКиртКоптскаКипърскакирилицадеванагариДез" + + "еретЕгипетско демотично писмоЕгипетско йератично писмоЕгипетски йерогли" + + "фиетиопскаГрузинска хуцуригрузинскаГлаголическаГотическагръцкагуджарати" + + "гурмукхиханбхангълкитайскаХанунуопростен китайскитрадиционен китайскиив" + + "ритхираганаПахау хмонгяпонска сричковаСтароунгарскаХарапскаДревно итали" + + "йскаджамоЯванскаяпонскаКая ЛикатаканаКхароштхикхмерскаканнадакорейскаКа" + + "йтхиЛанналаоскаЛатинска фрактураГалска латинскалатиницаЛепчаЛимбуЛинейн" + + "а АЛинейна БЛицийскаЛидийскаМандаринскаМанихейскаЙероглифи на МаитеМеро" + + "итскамалаяламмонголскаМунМанипурибирманскаН’КоОгамическаОл ЧикиОрхоно-е" + + "нисейскаорияОсманскаДревно пермскаФагс-паПахлавскаФиникийскаПисменост П" + + "олардРонго-ронгоРуническаСамаританскаСаратиСаураштрасинхалскаСунданскаС" + + "илоти НагриСирийскаСирийска естрангелоЗападна сирийскаИзточна сирийскаТ" + + "агбанваТай ЛеНова Тай ЛетамилскателугуТагалогтаанатайскатибетскаУгаритс" + + "каВайскаВидима речСтароперсийскаШумеро-акадски клинописЙиМатематически " + + "символиемотиконисимволибез писменостобщанепозната писменост" + +var bgScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x0020, 0x0030, + 0x0044, 0x0054, 0x0054, 0x0054, 0x0064, 0x0076, 0x0076, 0x008d, + 0x009d, 0x00a9, 0x00b9, 0x00c9, 0x00d3, 0x00dd, 0x012b, 0x013b, + 0x014b, 0x0157, 0x015f, 0x016d, 0x017d, 0x018d, 0x018d, 0x01a1, + 0x01af, 0x01af, 0x01df, 0x020f, 0x0234, 0x0234, 0x0244, 0x0263, + 0x0275, 0x028d, 0x029f, 0x029f, 0x02ab, 0x02bd, 0x02cd, 0x02d5, + 0x02e1, 0x02f1, 0x02fd, 0x031e, 0x0345, 0x0345, 0x034f, 0x035f, + 0x035f, 0x0374, 0x0393, 0x03ad, 0x03bd, 0x03dc, 0x03e6, 0x03f4, + // Entry 40 - 7F + 0x0402, 0x0402, 0x040d, 0x041d, 0x042f, 0x043f, 0x043f, 0x044d, + 0x045d, 0x045d, 0x0469, 0x0473, 0x047f, 0x04a0, 0x04bd, 0x04cd, + 0x04d7, 0x04e1, 0x04f2, 0x0503, 0x0503, 0x0503, 0x0513, 0x0523, + 0x0523, 0x0539, 0x054d, 0x054d, 0x056f, 0x056f, 0x056f, 0x0581, + 0x0591, 0x0591, 0x05a3, 0x05a9, 0x05a9, 0x05b9, 0x05b9, 0x05cb, + 0x05cb, 0x05cb, 0x05cb, 0x05cb, 0x05d4, 0x05d4, 0x05e8, 0x05f5, + 0x0614, 0x061c, 0x061c, 0x062c, 0x062c, 0x062c, 0x0647, 0x0654, + 0x0654, 0x0654, 0x0666, 0x067a, 0x0699, 0x0699, 0x0699, 0x06ae, + // Entry 80 - BF + 0x06c0, 0x06d8, 0x06e4, 0x06e4, 0x06f6, 0x06f6, 0x06f6, 0x06f6, + 0x06f6, 0x06f6, 0x0708, 0x0708, 0x071a, 0x0731, 0x0741, 0x0766, + 0x0785, 0x07a4, 0x07b4, 0x07b4, 0x07bf, 0x07d3, 0x07e3, 0x07e3, + 0x07e3, 0x07ef, 0x07ef, 0x07ef, 0x07fd, 0x0807, 0x0813, 0x0823, + 0x0823, 0x0835, 0x0841, 0x0854, 0x0854, 0x0854, 0x0870, 0x089c, + 0x08a0, 0x08a0, 0x08c9, 0x08db, 0x08e9, 0x0902, 0x090a, 0x092f, +} // Size: 376 bytes + +const bnScriptStr string = "" + // Size: 3617 bytes + "আরবিআরমিআর্মেনীয়আভেসতানবালীয়বাটাকবাংলাব্লিসপ্রতীকবোপোমোফোব্রাহ্মীব্রেই" + + "লবুগিবুহিডচাকমাসংযুক্ত কানাডিয়ান অ্যাব্রোজিনিয়ান সিলেবিক্সক্যারিয়ান" + + "চ্যামচেরোকিকির্টকোপ্টিকসাইপ্রোয়েটসিরিলিকপ্রাচীন চার্চ স্লাভোনিক সিরিল" + + "িকদেবনাগরিদেসেরাতমিশরীয় ডেমোটিকমিশরীয় হায়রেটিকমিশরীয় হায়ারোগ্লিপই" + + "থিওপিয়জর্জিয় খুৎসুরিজর্জিয়ানগ্লাগোলিটিকগোথিকগ্রিকগুজরাটিগুরুমুখিহ্য" + + "ানবিহাঙ্গুলহ্যানহ্যানুনুসরলিকৃত হ্যানঐতিহ্যবাহী হ্যানহিব্রুহিরাগানাফাহ" + + "াও মঙজাপানি অক্ষরমালাপুরোনো হাঙ্গেরীয়সিন্ধুপ্রাচীন ইতালিজ্যামোজাভানিজ" + + "জাপানীকায়াহ লিকাটাকানাখরোষ্ঠীখেমেরকানাড়াকোরিয়ানকাইথিলান্নালাওফ্রাক্" + + "টুর ল্যাটিনগ্যালিক ল্যাটিনল্যাটিনলেপ্চালিম্বুলিনিয়ার এলিনিয়ার বিলাইস" + + "িয়ানলাইডিয়ানম্যান্ডায়ীনম্যানিচাইনমায়ান হায়ারোগ্লিপমেরোইটিকমালায়া" + + "লামমোঙ্গোলীয়মুনমেইটেই মায়েকমায়ানমারএনকোওঘামওল চিকিঅর্খোনওড়িয়াওসমা" + + "নিয়প্রাচীন পার্মিকফাগ্স-পাখদিত পাহলভিসল্টার পাহলভিপুস্তক পাহলভিফিনিশি" + + "য়পোলার্ড ধ্বনিকপার্থিয়নরেজ্যাঙ্গরোঙ্গোরোঙ্গোরুনিকসমেরিটনসারাতিসৌরাষ্" + + "ট্রচিহ্ন লিখনসাভিয়ানসিংহলিসান্দানিজসিলেটি নাগরিসিরিয়াকএস্ট্রেঙ্গেলো " + + "সিরিয়াকপশ্চিমাঞ্চলীয় সিরিয়াকপূর্বাঞ্চলীয় সিরিয়াকটাগোওয়ানাতাইলেনত" + + "ুন তাই লুতামিলতাই ভিয়েৎতেলেগুতেঙ্গোয়ারতিফিনাগটাগালগথানাথাইতিব্বতিউগা" + + "রিটিকভাইদৃশ্যমান ভাষাপ্রাচীন ফার্সিসুমের-আক্কাদীয় কীলকরূপউইকাইগানিতিক" + + " চিহ্নইমোজিপ্রতিকগুলিঅলিখিতসাধারনঅজানা লিপি" + +var bnScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0018, 0x0033, + 0x0048, 0x005a, 0x005a, 0x005a, 0x0069, 0x0078, 0x0078, 0x0099, + 0x00b1, 0x00c9, 0x00db, 0x00e7, 0x00f6, 0x0105, 0x0186, 0x01a4, + 0x01b3, 0x01c5, 0x01d4, 0x01e9, 0x020a, 0x021f, 0x0276, 0x028e, + 0x02a3, 0x02a3, 0x02ce, 0x02ff, 0x0339, 0x0339, 0x0351, 0x037c, + 0x0397, 0x03b8, 0x03c7, 0x03c7, 0x03d6, 0x03eb, 0x0403, 0x0418, + 0x042d, 0x043c, 0x0454, 0x0479, 0x04a7, 0x04a7, 0x04b9, 0x04d1, + 0x04d1, 0x04e7, 0x0515, 0x0546, 0x0558, 0x057d, 0x058f, 0x05a4, + // Entry 40 - 7F + 0x05b6, 0x05b6, 0x05cf, 0x05e7, 0x05fc, 0x060b, 0x060b, 0x0620, + 0x0638, 0x0638, 0x0647, 0x0659, 0x0662, 0x0693, 0x06be, 0x06d3, + 0x06e5, 0x06f7, 0x0713, 0x0732, 0x0732, 0x0732, 0x074d, 0x0768, + 0x0768, 0x078c, 0x07aa, 0x07aa, 0x07e1, 0x07e1, 0x07e1, 0x07f9, + 0x0817, 0x0817, 0x0835, 0x083e, 0x083e, 0x0863, 0x0863, 0x087e, + 0x087e, 0x087e, 0x087e, 0x087e, 0x088a, 0x088a, 0x0896, 0x08a9, + 0x08bb, 0x08d0, 0x08d0, 0x08e8, 0x08e8, 0x08e8, 0x0913, 0x0929, + 0x0948, 0x096d, 0x0992, 0x09aa, 0x09d2, 0x09ed, 0x0a08, 0x0a2c, + // Entry 80 - BF + 0x0a3b, 0x0a50, 0x0a62, 0x0a62, 0x0a7d, 0x0a99, 0x0ab1, 0x0ab1, + 0x0ab1, 0x0ab1, 0x0ac3, 0x0ac3, 0x0ade, 0x0b00, 0x0b18, 0x0b58, + 0x0b9b, 0x0bdb, 0x0bf9, 0x0bf9, 0x0c08, 0x0c25, 0x0c34, 0x0c34, + 0x0c50, 0x0c62, 0x0c80, 0x0c95, 0x0ca7, 0x0cb3, 0x0cbc, 0x0cd1, + 0x0cd1, 0x0ce9, 0x0cf2, 0x0d17, 0x0d17, 0x0d17, 0x0d3f, 0x0d80, + 0x0d86, 0x0d8f, 0x0db4, 0x0dc3, 0x0de1, 0x0df3, 0x0e05, 0x0e21, +} // Size: 376 bytes + +const caScriptStr string = "" + // Size: 1638 bytes + "adlamafakaalbanès caucàsicahomàrabarameu imperialarmeniavèsticbalinèsbam" + + "umbassa vahbatakbengalíbhaiksukisímbols Blissbopomofobrahmibraillebuginè" + + "sbuhidchakmasíl·labes dels aborígens canadencs unificatscariàchamcheroke" + + "ecirthcoptexipriotaciríl·licciríl·lic de l’antic eslau eclesiàsticdevana" + + "garideserettaquigrafia Duployédemòtic egipcihieràtic egipcijeroglífic eg" + + "ipcielbasanetiòpicgeorgià hucurigeorgiàglagolíticgòticgranthagrecgujarat" + + "igurmukhihanbhangulhanhanunoohan simplificathan tradicionalhebreuhiragan" + + "ajeroglífic anatolipahawh hmongkatakana o hiraganahongarès anticescriptu" + + "ra de la vall de l’Induscursiva antigajamojavanèsjaponèsjürchenkayah lik" + + "atakanakharosthikhmerkhojakannadacoreàkpellekaithilannalaollatí frakturl" + + "latí gaèlicllatílepchalimbulineal Alineal Blisulomalicilidimahajanimanda" + + "icmaniqueujeroglífics maiesmendecursiva meroíticameroíticmalaiàlammodimo" + + "ngolmoonmromanipurímultanibirmàantic nord-aràbicnabateunewargeban’Konü s" + + "huoghamsantaliorkhonoriyaosageosmanyapalmirèPau Cin Hauantic pèrmicphags" + + "papahlavi inscripcionalpsalter pahlavipahlavifenicipollard miaoparthià i" + + "nscripcionalrejangrongo-rongorúnicsamaritàsaratisud-aràbic anticsaurasht" + + "raescriptura de signesshaviàshradasiddhamdevangarisingalèssora sompengsu" + + "ndanèssyloti nagrisiríacsiríac estrangelosiríac occidentalsiríac orienta" + + "ltagbanwatakritai lenou tai luetàmiltanguttai viettelugutengwartifinaght" + + "agàlogthaanatailandèstibetàtirhutugaríticvaillenguatge visiblevarang ksh" + + "itiwoleaipersa anticcuneïforme sumeri-accadiyiheretatnotació matemàticae" + + "mojisímbolssense escripturacomúescriptura desconeguda" + +var caScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x000a, 0x001c, 0x0020, 0x0025, 0x0034, 0x003a, + 0x0042, 0x004a, 0x004f, 0x0058, 0x005d, 0x0065, 0x006e, 0x007c, + 0x0084, 0x008a, 0x0091, 0x0099, 0x009e, 0x00a4, 0x00d3, 0x00d9, + 0x00dd, 0x00e5, 0x00ea, 0x00ef, 0x00f7, 0x0102, 0x012d, 0x0137, + 0x013e, 0x0152, 0x0161, 0x0171, 0x0183, 0x018a, 0x0192, 0x01a1, + 0x01a9, 0x01b4, 0x01ba, 0x01c1, 0x01c5, 0x01cd, 0x01d5, 0x01d9, + 0x01df, 0x01e2, 0x01e9, 0x01f8, 0x0207, 0x0207, 0x020d, 0x0215, + 0x0228, 0x0234, 0x0247, 0x0256, 0x0278, 0x0286, 0x028a, 0x0292, + // Entry 40 - 7F + 0x029a, 0x02a2, 0x02aa, 0x02b2, 0x02bb, 0x02c0, 0x02c5, 0x02cc, + 0x02d2, 0x02d8, 0x02de, 0x02e3, 0x02e6, 0x02f4, 0x0302, 0x0308, + 0x030e, 0x0313, 0x031b, 0x0323, 0x0327, 0x032b, 0x032f, 0x0333, + 0x033b, 0x0342, 0x034a, 0x034a, 0x035c, 0x0361, 0x0373, 0x037c, + 0x0386, 0x038a, 0x0390, 0x0394, 0x0397, 0x03a0, 0x03a7, 0x03ad, + 0x03bf, 0x03c6, 0x03cb, 0x03cf, 0x03d5, 0x03dc, 0x03e1, 0x03e8, + 0x03ee, 0x03f3, 0x03f8, 0x03ff, 0x0407, 0x0412, 0x041f, 0x0426, + 0x043b, 0x044a, 0x0451, 0x0457, 0x0463, 0x0479, 0x047f, 0x048a, + // Entry 80 - BF + 0x0490, 0x0499, 0x049f, 0x04b0, 0x04ba, 0x04ce, 0x04d5, 0x04db, + 0x04e2, 0x04eb, 0x04f4, 0x0500, 0x0509, 0x0515, 0x051c, 0x052e, + 0x0540, 0x0550, 0x0558, 0x055d, 0x0563, 0x056e, 0x0574, 0x057a, + 0x0582, 0x0588, 0x058f, 0x0597, 0x059f, 0x05a5, 0x05af, 0x05b6, + 0x05bc, 0x05c5, 0x05c8, 0x05da, 0x05e7, 0x05ed, 0x05f8, 0x0611, + 0x0613, 0x061a, 0x062e, 0x0633, 0x063b, 0x064b, 0x0650, 0x0666, +} // Size: 376 bytes + +const csScriptStr string = "" + // Size: 1906 bytes + "afakakavkazskoalbánskéarabskéaramejské (imperiální)arménskéavestánskébal" + + "ijskébamumskébassa vahbatackébengálskéBlissovo písmobopomofobráhmíBraill" + + "ovo písmobuginskébuhidskéčakmaslabičné písmo kanadských domorodcůkarijsk" + + "éčamčerokíkirtkoptskékyperskécyrilicecyrilce - staroslověnskádévanágárí" + + "deseretDuployého těsnopisegyptské démotickéegyptské hieratickéegyptské h" + + "ieroglyfyelbasanskéetiopskégruzínské chutsurigruzínskéhlaholicegotickégr" + + "anthařeckégudžarátígurmukhihanbhangulhanhanunóohan (zjednodušené)han (tr" + + "adiční)hebrejskéhiraganaanatolské hieroglyfyhmongskéjaponské slabičnésta" + + "romaďarskéharappskéetruskéjamojavánskéjaponskédžürčenskékayah likatakana" + + "kháróšthíkhmerskéchodžikikannadskékorejskékpellekaithilannalaoskélatinka" + + " - lomenálatinka - galskálatinkalepčskélimbulineární Alineární BFraserov" + + "olomalýkijskélýdskémahádžanímandejskémanichejskémayské hieroglyfymendské" + + "meroitické psacímeroitickémalajlámskémodímongolskéMoonovomromejtej majek" + + " (manipurské)myanmarskéstaroseveroarabskénabatejskénaxi geban’konü-šuoga" + + "mskésantálské (ol chiki)orchonskéurijskéosmansképalmýrsképau cin haustar" + + "opermsképhags-papahlavské klínovépahlavské žalmovépahlavské knižnífénick" + + "éPollardova fonetická abecedaparthské klínovéredžanskérongorongorunovés" + + "amařskésaratistarojihoarabskésaurášterskéSignWritingShawova abecedašárad" + + "ásiddhamchudábádísinhálskésora sompengsundskésylhetskésyrskésyrské - es" + + "trangelosyrské - západnísyrské - východnítagbanwatakrítai letai lü novét" + + "amilskétanguttai viettelugskétengwarberberskétagalskéthaanathajskétibets" + + "kétirhutaugaritské klínovévaividitelná řečvarang kšitikarolínské (woleai" + + ")staroperské klínové písmosumero-akkadské klínové písmoyimatematický záp" + + "isemodžisymbolybez zápisuobecnéneznámé písmo" + +var csScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0018, 0x0018, 0x0020, 0x0039, 0x0043, + 0x004f, 0x0058, 0x0061, 0x006a, 0x0072, 0x007d, 0x007d, 0x008c, + 0x0094, 0x009c, 0x00ac, 0x00b5, 0x00be, 0x00c4, 0x00ec, 0x00f5, + 0x00f9, 0x0101, 0x0105, 0x010d, 0x0116, 0x011e, 0x0138, 0x0146, + 0x014d, 0x0161, 0x0176, 0x018b, 0x019f, 0x01aa, 0x01b3, 0x01c7, + 0x01d2, 0x01db, 0x01e3, 0x01ea, 0x01f1, 0x01fd, 0x0205, 0x0209, + 0x020f, 0x0212, 0x021a, 0x022e, 0x023e, 0x023e, 0x0248, 0x0250, + 0x0265, 0x026e, 0x0282, 0x0291, 0x029b, 0x02a3, 0x02a7, 0x02b1, + // Entry 40 - 7F + 0x02ba, 0x02c8, 0x02d0, 0x02d8, 0x02e5, 0x02ee, 0x02f7, 0x0301, + 0x030a, 0x0310, 0x0316, 0x031b, 0x0322, 0x0333, 0x0344, 0x034b, + 0x0354, 0x0359, 0x0365, 0x0371, 0x037a, 0x037e, 0x0388, 0x0390, + 0x039c, 0x03a6, 0x03b2, 0x03b2, 0x03c4, 0x03cc, 0x03de, 0x03e9, + 0x03f6, 0x03fb, 0x0405, 0x040c, 0x040f, 0x0429, 0x0429, 0x0434, + 0x0447, 0x0452, 0x0452, 0x045b, 0x0461, 0x0468, 0x0470, 0x0486, + 0x0490, 0x0498, 0x0498, 0x04a1, 0x04ac, 0x04b7, 0x04c4, 0x04cc, + 0x04e0, 0x04f4, 0x0507, 0x0510, 0x052d, 0x0540, 0x054b, 0x0555, + // Entry 80 - BF + 0x055c, 0x0566, 0x056c, 0x057d, 0x058c, 0x0597, 0x05a6, 0x05af, + 0x05b6, 0x05c2, 0x05cd, 0x05d9, 0x05e1, 0x05eb, 0x05f2, 0x0606, + 0x0619, 0x062d, 0x0635, 0x063b, 0x0641, 0x064e, 0x0657, 0x065d, + 0x0665, 0x066e, 0x0675, 0x067f, 0x0688, 0x068e, 0x0696, 0x069f, + 0x06a6, 0x06ba, 0x06bd, 0x06cd, 0x06da, 0x06ef, 0x070c, 0x072d, + 0x072f, 0x072f, 0x0742, 0x0749, 0x0750, 0x075b, 0x0762, 0x0772, +} // Size: 376 bytes + +const daScriptStr string = "" + // Size: 1483 bytes + "afakaarabiskarmiarmenskavestanskbalinesiskbamumbassabatakbengaliblissymb" + + "olerbopomofobramiskbrailleskriftbuginesiskbuhidcakmoprindelige canadiske" + + " symbolerkarianskchamcherokeecirtkoptiskcypriotiskkyrilliskkyrillisk - o" + + "ldkirkeslavisk variantdevanagarideseretDuploya-stenografiegyptisk demoti" + + "skegyptisk hieratiskegyptiske hieroglyfferetiopiskgeorgisk kutsurigeorgi" + + "skglagolitiskgotiskgranthagræskgujaratigurmukhihan med bopomofohangulhan" + + "hanunooforenklet hantraditionelt hanhebraiskhiraganaanatolske hieroglyff" + + "erpahawh hmongjapanske skrifttegnoldungarskindusOlditaliskjamojavanesisk" + + "japanskjurchenkaya likatakanakharoshtikhmerkhojkikannadakoreanskkpellekt" + + "hilannalaolatinsk - frakturvariantlatinsk - gælisk variantlatinsklepchal" + + "imbulineær Alineær Blisulomalykisklydiskmandaiskmanikæiskmayahieroglyffe" + + "rmendemetroitisk sammenhængendemeroitiskmalayalammongolskmoonmroomeitei-" + + "mayekburmesiskgammelt nordarabisknabateisknakhi geban’konüshuoghamol-chi" + + "kiorkhonoriyaosmanniskpalmyrenskoldpermiskphags-paphliphlppahlavifønikis" + + "kpollardtegnprtirejangrongo-rongorunersamaritansksaratioldsørarabisksaur" + + "ashtrategnskriftshavisksharadakhudawadisingalesisksorasundanesisksyloti " + + "nagrisyrisksyrisk - estrangelovariantvestsyriskøstsyriakisktagbanwatakri" + + "tai letai luetamilsktanguttavttelugutengwartifinaghtagalogthaanathailand" + + "sktibetansktirhutaugaritiskvaisynlig talevarang kshitiwoleaioldpersisksu" + + "mero-akkadisk cuneiformyiarvetmatematisk notationemojisymboleruden skrif" + + "tsprogfællesukendt skriftsprog" + +var daScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, 0x000c, 0x0010, 0x0017, + 0x0020, 0x002a, 0x002f, 0x0034, 0x0039, 0x0040, 0x0040, 0x004c, + 0x0054, 0x005b, 0x0068, 0x0072, 0x0077, 0x007b, 0x0099, 0x00a1, + 0x00a5, 0x00ad, 0x00b1, 0x00b8, 0x00c2, 0x00cb, 0x00ee, 0x00f8, + 0x00ff, 0x0111, 0x0122, 0x0134, 0x014a, 0x014a, 0x0152, 0x0162, + 0x016a, 0x0175, 0x017b, 0x0182, 0x0188, 0x0190, 0x0198, 0x01a8, + 0x01ae, 0x01b1, 0x01b8, 0x01c5, 0x01d5, 0x01d5, 0x01dd, 0x01e5, + 0x01fb, 0x0207, 0x021a, 0x0224, 0x0229, 0x0233, 0x0237, 0x0241, + // Entry 40 - 7F + 0x0248, 0x024f, 0x0256, 0x025e, 0x0267, 0x026c, 0x0272, 0x0279, + 0x0281, 0x0287, 0x028b, 0x0290, 0x0293, 0x02ab, 0x02c4, 0x02cb, + 0x02d1, 0x02d6, 0x02df, 0x02e8, 0x02ec, 0x02f0, 0x02f6, 0x02fc, + 0x02fc, 0x0304, 0x030e, 0x030e, 0x031e, 0x0323, 0x033d, 0x0346, + 0x034f, 0x034f, 0x0357, 0x035b, 0x035f, 0x036b, 0x036b, 0x0374, + 0x0387, 0x0390, 0x0390, 0x039a, 0x03a0, 0x03a6, 0x03ab, 0x03b3, + 0x03b9, 0x03be, 0x03be, 0x03c7, 0x03d1, 0x03d1, 0x03db, 0x03e3, + 0x03e7, 0x03eb, 0x03f2, 0x03fb, 0x0406, 0x040a, 0x0410, 0x041b, + // Entry 80 - BF + 0x0420, 0x042b, 0x0431, 0x043f, 0x0449, 0x0453, 0x045a, 0x0461, + 0x0461, 0x046a, 0x0475, 0x0479, 0x0484, 0x0490, 0x0496, 0x04b0, + 0x04ba, 0x04c7, 0x04cf, 0x04d4, 0x04da, 0x04e1, 0x04e8, 0x04ee, + 0x04f2, 0x04f8, 0x04ff, 0x0507, 0x050e, 0x0514, 0x051e, 0x0527, + 0x052e, 0x0537, 0x053a, 0x0545, 0x0552, 0x0558, 0x0562, 0x057b, + 0x057d, 0x0582, 0x0595, 0x059a, 0x05a2, 0x05b2, 0x05b9, 0x05cb, +} // Size: 376 bytes + +const deScriptStr string = "" + // Size: 1697 bytes + "AfakaKaukasisch-AlbanischArabischArmiArmenischAvestischBalinesischBamunB" + + "assaBattakischBengalischBliss-SymboleBopomofoBrahmiBlindenschriftBugines" + + "ischBuhidChakmaUCASKarischChamCherokeeCirthKoptischZypriotischKyrillisch" + + "AltkirchenslawischDevanagariDeseretDuployanischÄgyptisch - DemotischÄgyp" + + "tisch - HieratischÄgyptische HieroglyphenElbasanischÄthiopischKhutsuriGe" + + "orgischGlagolitischGotischGranthaGriechischGujaratiGurmukhiHanbHangulChi" + + "nesischHanunooVereinfachtes ChinesischTraditionelles ChinesischHebräisch" + + "HiraganaHieroglyphen-LuwischPahawh HmongJapanische SilbenschriftAltungar" + + "ischIndus-SchriftAltitalischJamoJavanesischJapanischJurchenKayah LiKatak" + + "anaKharoshthiKhmerKhojkiKannadaKoreanischKpelleKaithiLannaLaotischLatein" + + "isch - Fraktur-VarianteLateinisch - Gälische VarianteLateinischLepchaLim" + + "buLinear ALinear BFraserLomaLykischLydischMahajaniMandäischManichäischMa" + + "ya-HieroglyphenMendeMeroitisch kursivMeroitischMalayalamModiMongolischMo" + + "onMroMeitei MayekBirmanischAltnordarabischNabatäischGebaN’KoFrauenschrif" + + "tOghamOl ChikiOrchon-RunenOriyaOsmanischPalmyrenischPau Cin HauAltpermis" + + "chPhags-paBuch-PahlaviPsalter-PahlaviPahlaviPhönizischPollard Phonetisch" + + "ParthischRejangRongorongoRunenschriftSamaritanischSaratiAltsüdarabischSa" + + "urashtraGebärdenspracheShaw-AlphabetSharadaSiddhamKhudawadiSinghalesisch" + + "Sora SompengSundanesischSyloti NagriSyrischSyrisch - Estrangelo-Variante" + + "WestsyrischOstsyrischTagbanwaTakriTai LeTai LueTamilischXixiaTai-VietTel" + + "uguTengwarTifinaghTagalogThaanaThaiTibetischTirhutaUgaritischVaiSichtbar" + + "e SpracheVarang KshitiWoleaianischAltpersischSumerisch-akkadische Keilsc" + + "hriftYiGeerbter SchriftwertMathematische NotationEmojiSymboleSchriftlosV" + + "erbreitetUnbekannte Schrift" + +var deScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0019, 0x0019, 0x0021, 0x0025, 0x002e, + 0x0037, 0x0042, 0x0047, 0x004c, 0x0056, 0x0060, 0x0060, 0x006d, + 0x0075, 0x007b, 0x0089, 0x0094, 0x0099, 0x009f, 0x00a3, 0x00aa, + 0x00ae, 0x00b6, 0x00bb, 0x00c3, 0x00ce, 0x00d8, 0x00ea, 0x00f4, + 0x00fb, 0x0107, 0x011d, 0x0134, 0x014c, 0x0157, 0x0162, 0x016a, + 0x0173, 0x017f, 0x0186, 0x018d, 0x0197, 0x019f, 0x01a7, 0x01ab, + 0x01b1, 0x01bb, 0x01c2, 0x01da, 0x01f3, 0x01f3, 0x01fd, 0x0205, + 0x0219, 0x0225, 0x023d, 0x0249, 0x0256, 0x0261, 0x0265, 0x0270, + // Entry 40 - 7F + 0x0279, 0x0280, 0x0288, 0x0290, 0x029a, 0x029f, 0x02a5, 0x02ac, + 0x02b6, 0x02bc, 0x02c2, 0x02c7, 0x02cf, 0x02ec, 0x030b, 0x0315, + 0x031b, 0x0320, 0x0328, 0x0330, 0x0336, 0x033a, 0x0341, 0x0348, + 0x0350, 0x035a, 0x0366, 0x0366, 0x0377, 0x037c, 0x038d, 0x0397, + 0x03a0, 0x03a4, 0x03ae, 0x03b2, 0x03b5, 0x03c1, 0x03c1, 0x03cb, + 0x03da, 0x03e5, 0x03e5, 0x03e9, 0x03ef, 0x03fc, 0x0401, 0x0409, + 0x0415, 0x041a, 0x041a, 0x0423, 0x042f, 0x043a, 0x0445, 0x044d, + 0x0459, 0x0468, 0x046f, 0x047a, 0x048c, 0x0495, 0x049b, 0x04a5, + // Entry 80 - BF + 0x04b1, 0x04be, 0x04c4, 0x04d3, 0x04dd, 0x04ed, 0x04fa, 0x0501, + 0x0508, 0x0511, 0x051e, 0x052a, 0x0536, 0x0542, 0x0549, 0x0566, + 0x0571, 0x057b, 0x0583, 0x0588, 0x058e, 0x0595, 0x059e, 0x05a3, + 0x05ab, 0x05b1, 0x05b8, 0x05c0, 0x05c7, 0x05cd, 0x05d1, 0x05da, + 0x05e1, 0x05eb, 0x05ee, 0x05ff, 0x060c, 0x0618, 0x0623, 0x0643, + 0x0645, 0x0659, 0x066f, 0x0674, 0x067b, 0x0685, 0x068f, 0x06a1, +} // Size: 376 bytes + +const elScriptStr string = "" + // Size: 2665 bytes + "ΑραβικόΑυτοκρατορικό ΑραμαϊκόΑρμενικόΑβεστάνΜπαλινίζΜπατάκΜπενγκάλιΣύμβο" + + "λα BlissΜποπομόφοΜπραχμίΜπράιγΜπούγκιςΜπουχίντΤσάκμαΕνοποιημένοι Καναδε" + + "ζικοί Συλλαβισμοί ΙθαγενώνΚαριάνΤσαμΤσερόκιΣερθΚοπτικόΚυπριακόΚυριλλικό" + + "Παλαιό Εκκλησιαστικό Σλαβικό ΚυριλλικόΝτεβαναγκάριΝτεσερέΛαϊκό Αιγυπτια" + + "κόΙερατικό ΑιγυπτιακόΑιγυπτιακά ΙερογλυφικάΑιθιοπικόΓεωργιανό Κχουτσούρ" + + "ιΓεωργιανόΓκλαγκολιτικόΓοτθικόΕλληνικόΓκουγιαράτιΓκουρμουκχίΧανμπΧανγκο" + + "ύλΧανΧανούνουΑπλοποιημένο ΧανΠαραδοσιακό ΧανΕβραϊκόΧιραγκάναΠαχάχ Χμονγ" + + "κΚατακάνα ή ΧιραγκάναΠαλαιό ΟυγγρικόΊνδουςΠαλαιό ΙταλικόΤζάμοΙαβανεζικό" + + "ΙαπωνικόΚαγιάχ ΛιΚατακάναΚαρόσθιΧμερΚανάνταΚορεατικόΚαϊθίΛάνναΛάοςΦράκτ" + + "ουρ ΛατινικόΓαελικό ΛατινικόΛατινικόΛέπτσαΛιμπούΓραμμικό ΑΓραμμικό ΒΛυκ" + + "ιανικόΛυδιανικόΜανδαϊκόΜανιχαϊκόΙερογλυφικά ΜάγιαΜεροϊτικόΜαλαγιάλαμΜογ" + + "γολικόΜουνΜεϊτέι ΜάγεκΜιανμάρΝ’ΚοΌγκχαμΟλ ΤσίκιΌρκχονΟρίγιαΟσμάνγιαΠαλα" + + "ιό ΠερμικόΠαγκς-παΕπιγραφικό ΠαχλάβιΨάλτερ ΠαχλάβιΜπουκ ΠαχλαβίΦοινικικ" + + "όΦωνητικό ΠόλαρντΕπιγραφικό ΠαρθιάνΡετζάνγκΡονγκορόνγκοΡουνίκΣαμαριτικό" + + "ΣαράθιΣαουράστραΝοηματική γραφήΣαβιανόΣινχάλαΣουνδανικόΣυλότι ΝάγκριΣυρ" + + "ιακόΕστραντζέλο ΣυριακόΔυτικό ΣυριακόΑνατολικό ΣυριακόΤαγκμάνγουαΤάι Λε" + + "Νέο Τάι ΛούεΤαμίλΤάι ΒιέτΤελούγκουΤεγνγουάρΤιφινάγκΤαγκαλόγκΘαανάΤαϊλαν" + + "δικόΘιβετιανόΟυγκαριτικόΒάιΟρατή ομιλίαΠαλαιό ΠερσικόΣούμερο-Ακάντιαν Κ" + + "ουνεϊφόρμΓιΚληρονομημένοΜαθηματική σημειογραφίαZsyeΣύμβολαΆγραφοΚοινόΆγ" + + "νωστη γραφή" + +var elScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x0039, 0x0049, + 0x0057, 0x0067, 0x0067, 0x0067, 0x0073, 0x0085, 0x0085, 0x0099, + 0x00ab, 0x00b9, 0x00c5, 0x00d5, 0x00e5, 0x00f1, 0x0148, 0x0154, + 0x015c, 0x016a, 0x0172, 0x0180, 0x0190, 0x01a2, 0x01eb, 0x0203, + 0x0211, 0x0211, 0x0230, 0x0255, 0x0280, 0x0280, 0x0292, 0x02b9, + 0x02cb, 0x02e5, 0x02f3, 0x02f3, 0x0303, 0x0319, 0x032f, 0x0339, + 0x0349, 0x034f, 0x035f, 0x037e, 0x039b, 0x039b, 0x03a9, 0x03bb, + 0x03bb, 0x03d2, 0x03f8, 0x0415, 0x0421, 0x043c, 0x0446, 0x045a, + // Entry 40 - 7F + 0x046a, 0x046a, 0x047b, 0x048b, 0x0499, 0x04a1, 0x04a1, 0x04af, + 0x04c1, 0x04c1, 0x04cb, 0x04d5, 0x04dd, 0x04fe, 0x051d, 0x052d, + 0x0539, 0x0545, 0x0558, 0x056b, 0x056b, 0x056b, 0x057d, 0x058f, + 0x058f, 0x059f, 0x05b1, 0x05b1, 0x05d2, 0x05d2, 0x05d2, 0x05e4, + 0x05f8, 0x05f8, 0x060a, 0x0612, 0x0612, 0x0629, 0x0629, 0x0637, + 0x0637, 0x0637, 0x0637, 0x0637, 0x0640, 0x0640, 0x064c, 0x065b, + 0x0667, 0x0673, 0x0673, 0x0683, 0x0683, 0x0683, 0x069e, 0x06ad, + 0x06d0, 0x06eb, 0x0704, 0x0716, 0x0735, 0x0758, 0x0768, 0x0780, + // Entry 80 - BF + 0x078c, 0x07a0, 0x07ac, 0x07ac, 0x07c0, 0x07dd, 0x07eb, 0x07eb, + 0x07eb, 0x07eb, 0x07f9, 0x07f9, 0x080d, 0x0826, 0x0834, 0x0859, + 0x0874, 0x0895, 0x08ab, 0x08ab, 0x08b6, 0x08cc, 0x08d6, 0x08d6, + 0x08e5, 0x08f7, 0x0909, 0x0919, 0x092b, 0x0935, 0x0949, 0x095b, + 0x095b, 0x0971, 0x0977, 0x098e, 0x098e, 0x098e, 0x09a9, 0x09dd, + 0x09e1, 0x09fb, 0x0a28, 0x0a2c, 0x0a3a, 0x0a46, 0x0a50, 0x0a69, +} // Size: 376 bytes + +const enScriptStr string = "" + // Size: 1585 bytes + "AdlamAfakaCaucasian AlbanianAhomArabicImperial AramaicArmenianAvestanBal" + + "ineseBamumBassa VahBatakBanglaBhaiksukiBlissymbolsBopomofoBrahmiBrailleB" + + "ugineseBuhidChakmaUnified Canadian Aboriginal SyllabicsCarianChamCheroke" + + "eCirthCopticCypriotCyrillicOld Church Slavonic CyrillicDevanagariDeseret" + + "Duployan shorthandEgyptian demoticEgyptian hieraticEgyptian hieroglyphsE" + + "lbasanEthiopicGeorgian KhutsuriGeorgianGlagoliticGothicGranthaGreekGujar" + + "atiGurmukhiHan with BopomofoHangulHanHanunooSimplified HanTraditional Ha" + + "nHatranHebrewHiraganaAnatolian HieroglyphsPahawh HmongJapanese syllabari" + + "esOld HungarianIndusOld ItalicJamoJavaneseJapaneseJurchenKayah LiKatakan" + + "aKharoshthiKhmerKhojkiKannadaKoreanKpelleKaithiLannaLaoFraktur LatinGael" + + "ic LatinLatinLepchaLimbuLinear ALinear BFraserLomaLycianLydianMahajaniMa" + + "ndaeanManichaeanMarchenMayan hieroglyphsMendeMeroitic CursiveMeroiticMal" + + "ayalamModiMongolianMoonMroMeitei MayekMultaniMyanmarOld North ArabianNab" + + "ataeanNewaNaxi GebaN’KoNüshuOghamOl ChikiOrkhonOdiaOsageOsmanyaPalmyrene" + + "Pau Cin HauOld PermicPhags-paInscriptional PahlaviPsalter PahlaviBook Pa" + + "hlaviPhoenicianPollard PhoneticInscriptional ParthianRejangRongorongoRun" + + "icSamaritanSaratiOld South ArabianSaurashtraSignWritingShavianSharadaSid" + + "dhamKhudawadiSinhalaSora SompengSundaneseSyloti NagriSyriacEstrangelo Sy" + + "riacWestern SyriacEastern SyriacTagbanwaTakriTai LeNew Tai LueTamilTangu" + + "tTai VietTeluguTengwarTifinaghTagalogThaanaThaiTibetanTirhutaUgariticVai" + + "Visible SpeechVarang KshitiWoleaiOld PersianSumero-Akkadian CuneiformYiI" + + "nheritedMathematical NotationEmojiSymbolsUnwrittenCommonUnknown Script" + +var enScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x000a, 0x001c, 0x0020, 0x0026, 0x0036, 0x003e, + 0x0045, 0x004d, 0x0052, 0x005b, 0x0060, 0x0066, 0x006f, 0x007a, + 0x0082, 0x0088, 0x008f, 0x0097, 0x009c, 0x00a2, 0x00c7, 0x00cd, + 0x00d1, 0x00d9, 0x00de, 0x00e4, 0x00eb, 0x00f3, 0x010f, 0x0119, + 0x0120, 0x0132, 0x0142, 0x0153, 0x0167, 0x016e, 0x0176, 0x0187, + 0x018f, 0x0199, 0x019f, 0x01a6, 0x01ab, 0x01b3, 0x01bb, 0x01cc, + 0x01d2, 0x01d5, 0x01dc, 0x01ea, 0x01f9, 0x01ff, 0x0205, 0x020d, + 0x0222, 0x022e, 0x0242, 0x024f, 0x0254, 0x025e, 0x0262, 0x026a, + // Entry 40 - 7F + 0x0272, 0x0279, 0x0281, 0x0289, 0x0293, 0x0298, 0x029e, 0x02a5, + 0x02ab, 0x02b1, 0x02b7, 0x02bc, 0x02bf, 0x02cc, 0x02d8, 0x02dd, + 0x02e3, 0x02e8, 0x02f0, 0x02f8, 0x02fe, 0x0302, 0x0308, 0x030e, + 0x0316, 0x031e, 0x0328, 0x032f, 0x0340, 0x0345, 0x0355, 0x035d, + 0x0366, 0x036a, 0x0373, 0x0377, 0x037a, 0x0386, 0x038d, 0x0394, + 0x03a5, 0x03ae, 0x03b2, 0x03bb, 0x03c1, 0x03c7, 0x03cc, 0x03d4, + 0x03da, 0x03de, 0x03e3, 0x03ea, 0x03f3, 0x03fe, 0x0408, 0x0410, + 0x0425, 0x0434, 0x0440, 0x044a, 0x045a, 0x0470, 0x0476, 0x0480, + // Entry 80 - BF + 0x0485, 0x048e, 0x0494, 0x04a5, 0x04af, 0x04ba, 0x04c1, 0x04c8, + 0x04cf, 0x04d8, 0x04df, 0x04eb, 0x04f4, 0x0500, 0x0506, 0x0517, + 0x0525, 0x0533, 0x053b, 0x0540, 0x0546, 0x0551, 0x0556, 0x055c, + 0x0564, 0x056a, 0x0571, 0x0579, 0x0580, 0x0586, 0x058a, 0x0591, + 0x0598, 0x05a0, 0x05a3, 0x05b1, 0x05be, 0x05c4, 0x05cf, 0x05e8, + 0x05ea, 0x05f3, 0x0608, 0x060d, 0x0614, 0x061d, 0x0623, 0x0631, +} // Size: 376 bytes + +const esScriptStr string = "" + // Size: 1206 bytes + "árabearmenioavésticobalinésbatakbengalísímbolos blisbopomofobrahmibraill" + + "ebuginésbuhidsímbolos aborígenes canadienses unificadoscariochamcherokee" + + "cirthcoptochipriotacirílicocirílico del antiguo eslavo eclesiásticodevan" + + "agarideseretegipcio demóticoegipcio hieráticojeroglíficos egipciosetiópi" + + "cogeorgiano eclesiásticogeorgianoglagolíticogóticogriegogujaratigurmujih" + + "anbhangulhanhanunoohan simplificadohan tradicionalhebreohiraganapahawh h" + + "mongsilabarios japoneseshúngaro antiguoIndio (harappan)antigua bastardil" + + "lajamojavanésjaponéskayah likatakanakharosthijemercanaréscoreanolannalao" + + "sianolatino frakturlatino gaélicolatinolepchalimbulineal Alineal Bliciol" + + "idiomandeojeroglíficos mayasmeroíticomalayálammongolmoonmanipuribirmanon" + + "’kooghamol cikiorkhonoriyaosmaniyapermiano antiguophags-pafenicioPolla" + + "rd Miaorejangrongo-rongorúnicosaratisaurashtraSignWritingshavianocingalé" + + "ssundanéssyloti nagrisiriacosiriaco estrangelosiriaco occidentalsiriaco " + + "orientaltagbanúatai lenuevo tai luetamiltelugutengwartifinaghtagalothaan" + + "atailandéstibetanougaríticovailenguaje visiblepersa antiguocuneiforme su" + + "merio-acadioyiheredadonotación matemáticaemojissímbolosno escritocomúnal" + + "fabeto desconocido" + +var esScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000d, + 0x0016, 0x001e, 0x001e, 0x001e, 0x0023, 0x002b, 0x002b, 0x0039, + 0x0041, 0x0047, 0x004e, 0x0056, 0x005b, 0x005b, 0x0087, 0x008c, + 0x0090, 0x0098, 0x009d, 0x00a2, 0x00ab, 0x00b4, 0x00de, 0x00e8, + 0x00ef, 0x00ef, 0x0100, 0x0112, 0x0128, 0x0128, 0x0131, 0x0148, + 0x0151, 0x015d, 0x0164, 0x0164, 0x016a, 0x0172, 0x0179, 0x017d, + 0x0183, 0x0186, 0x018d, 0x019d, 0x01ac, 0x01ac, 0x01b2, 0x01ba, + 0x01ba, 0x01c6, 0x01da, 0x01ea, 0x01fa, 0x020d, 0x0211, 0x0219, + // Entry 40 - 7F + 0x0221, 0x0221, 0x0229, 0x0231, 0x023a, 0x023f, 0x023f, 0x0247, + 0x024e, 0x024e, 0x024e, 0x0253, 0x025b, 0x0269, 0x0278, 0x027e, + 0x0284, 0x0289, 0x0291, 0x0299, 0x0299, 0x0299, 0x029e, 0x02a3, + 0x02a3, 0x02a9, 0x02a9, 0x02a9, 0x02bc, 0x02bc, 0x02bc, 0x02c6, + 0x02d0, 0x02d0, 0x02d6, 0x02da, 0x02da, 0x02e2, 0x02e2, 0x02e9, + 0x02e9, 0x02e9, 0x02e9, 0x02e9, 0x02ef, 0x02ef, 0x02f4, 0x02fb, + 0x0301, 0x0306, 0x0306, 0x030e, 0x030e, 0x030e, 0x031e, 0x0326, + 0x0326, 0x0326, 0x0326, 0x032d, 0x0339, 0x0339, 0x033f, 0x034a, + // Entry 80 - BF + 0x0351, 0x0351, 0x0357, 0x0357, 0x0361, 0x036c, 0x0374, 0x0374, + 0x0374, 0x0374, 0x037d, 0x037d, 0x0386, 0x0392, 0x0399, 0x03ab, + 0x03bd, 0x03cd, 0x03d6, 0x03d6, 0x03dc, 0x03e9, 0x03ee, 0x03ee, + 0x03ee, 0x03f4, 0x03fb, 0x0403, 0x0409, 0x040f, 0x0419, 0x0421, + 0x0421, 0x042b, 0x042e, 0x043e, 0x043e, 0x043e, 0x044b, 0x0464, + 0x0466, 0x046e, 0x0483, 0x0489, 0x0492, 0x049c, 0x04a2, 0x04b6, +} // Size: 376 bytes + +const es419ScriptStr string = "katakana o hiraganalaolatín" + +var es419ScriptIdx = []uint16{ // 80 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, + // Entry 40 - 7F + 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, + 0x0013, 0x0013, 0x0013, 0x0013, 0x0016, 0x0016, 0x0016, 0x001c, +} // Size: 184 bytes + +const etScriptStr string = "" + // Size: 1555 bytes + "afakaalbaaniahomiaraabiavanaarameaarmeeniaavestabalibamumibassabatakiben" + + "galiBlissi sümbolidbopomofobraahmipunktkiribugibuhiditšaakmaKanada põlis" + + "rahvaste ühtlustatud silpkirikaariatšaamitšerokiiCirthikoptiKüprose silp" + + "kirikirillitsakürilliline kirikuslaavidevanaagarideseretiDuployé kiirkir" + + "iegiptuse demootilineegiptuse hieraatilineegiptuse hieroglüüfkiriElbasan" + + "ietioopiahutsurigruusiaglagoolitsagootigranthakreekagudžaratigurmukhihan" + + "bikoreahanihanunoolihtsustatud hanitraditsiooniline haniHatraheebreahira" + + "ganaAnatoolia hieroglüüfkiriphahau-hmongi kirijaapani silpkirjadvanaunga" + + "riIndusevanaitalijamojaavajaapanitšurtšenikaja-liikatakanakharoshthikhme" + + "erihodžkikannadakorea segakirikpellekaithitai-thamilaoladina fraktuurkir" + + "iladina gaeliladinaleptšalimbulineaarkiri Alineaarkiri Blisulomalüükialü" + + "üdiamahaadžanimandeamanimaaja hieroglüüfkirimendemeroe kursiivkirimeroe" + + "malajalamimodimongoliMoonimruumeiteiMultanibirmaPõhja-AraabiaNabateanasi" + + "nkoonüšuogamsantaliOrhonioriaosmaniPalmyravanapermiphakpapahlavi raidkir" + + "ipahlavi psalmikiripahlavi raamatukirifoiniikiaPollardi miaopartia raidk" + + "iriredžangirongorongoruunikiriSamaariasaratiLõuna-Araabiasauraštraviipek" + + "iriShaw’ kirišaaradasiddhamihudavadisingalisorasundasilotisüüriasüüria e" + + "strangeloläänesüüriaidasüüriatagbanvataakritai-lööuus tai-lõõtamilitangu" + + "uditai-vietiteluguTengwaritifinagitagalogitaanataitiibetitirhutaugaritiv" + + "ainähtava kõnehoovoleaivanapärsiasumeri-akadi kiilkirijiipäritudmatemaat" + + "iline tähistusemojisümbolidkirjakeeletaüldinemääramata kiri" + +var etScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x000c, 0x0011, 0x0018, 0x0022, 0x002a, + 0x0030, 0x0034, 0x003a, 0x003f, 0x0045, 0x004c, 0x004c, 0x005c, + 0x0064, 0x006b, 0x0074, 0x0078, 0x007e, 0x0086, 0x00b1, 0x00b7, + 0x00be, 0x00c7, 0x00cd, 0x00d2, 0x00e3, 0x00ed, 0x0106, 0x0111, + 0x0119, 0x012a, 0x013e, 0x0153, 0x016c, 0x0174, 0x017c, 0x0183, + 0x018a, 0x0195, 0x019a, 0x01a1, 0x01a7, 0x01b1, 0x01b9, 0x01be, + 0x01c3, 0x01c7, 0x01ce, 0x01df, 0x01f4, 0x01f9, 0x0200, 0x0208, + 0x0222, 0x0234, 0x0246, 0x0250, 0x0256, 0x025f, 0x0263, 0x0268, + // Entry 40 - 7F + 0x026f, 0x027a, 0x0282, 0x028a, 0x0294, 0x029b, 0x02a2, 0x02a9, + 0x02b7, 0x02bd, 0x02c3, 0x02cc, 0x02cf, 0x02e2, 0x02ee, 0x02f4, + 0x02fb, 0x0300, 0x030d, 0x031a, 0x031e, 0x0322, 0x032a, 0x0332, + 0x033d, 0x0343, 0x0347, 0x0347, 0x035d, 0x0362, 0x0373, 0x0378, + 0x0382, 0x0386, 0x038d, 0x0392, 0x0396, 0x039c, 0x03a3, 0x03a8, + 0x03b6, 0x03bd, 0x03bd, 0x03c1, 0x03c5, 0x03cb, 0x03cf, 0x03d6, + 0x03dc, 0x03e0, 0x03e0, 0x03e6, 0x03ed, 0x03ed, 0x03f6, 0x03fc, + 0x040c, 0x041e, 0x0431, 0x043a, 0x0447, 0x0456, 0x045f, 0x0469, + // Entry 80 - BF + 0x0472, 0x047a, 0x0480, 0x048e, 0x0498, 0x04a1, 0x04ad, 0x04b5, + 0x04bd, 0x04c5, 0x04cc, 0x04d0, 0x04d5, 0x04db, 0x04e3, 0x04f6, + 0x0505, 0x0510, 0x0518, 0x051e, 0x0527, 0x0534, 0x053a, 0x0542, + 0x054b, 0x0551, 0x0559, 0x0561, 0x0569, 0x056e, 0x0571, 0x0578, + 0x057f, 0x0586, 0x0589, 0x0597, 0x059a, 0x05a0, 0x05ab, 0x05c0, + 0x05c3, 0x05cb, 0x05e2, 0x05e7, 0x05f0, 0x05fc, 0x0603, 0x0613, +} // Size: 376 bytes + +const faScriptStr string = "" + // Size: 1877 bytes + "آلبانیایی قفقازیعربیآرامی هخامنشیارمنیاوستاییبالیاییباتاکیبنگالینمادهای " + + "بلیسبوپوموفوبراهمیبریلبوگیاییبوهیدچاکماییکاریچمیچروکیاییکرتقبطیقبرسیسیر" + + "یلیدوناگریدیسرتیکاهنی مصریهیروگلیف مصریاتیوپیاییگرجی خوتسوریگرجیگلاگولی" + + "تیگوتییونانیگجراتیگورومخیهانبیهانگولهانهانونوییهان ساده\u200cشدههان سنت" + + "یعبریهیراگاناهیروگلیف آناتولیسیلابی\u200cهای ژاپنیمجاری باستانایندوسایت" + + "الی باستانجاموجاوه\u200cایژاپنیکایالیکاتاکاناخمریخواجکیکاناراکره\u200cا" + + "یکثیلاناییلائوسیلاتینی فراکتورلاتینی گیلیلاتینیلیمباییخطی الفخطی بلسیای" + + "یلدیاییمنده\u200cایمانویهیروگلیف مایاییمروییتیمالایالامیمغولیمونیمایک م" + + "یتیمیانمارعربی شمالی باستاننبطیاوگامیاورخونیاوریه\u200cایپالمیراییپرمی " + + "باستانپهلوی کتیبه\u200cایپهلوی زبوریپهلوی کتابیفنیقیپارتی کتیبه\u200cای" + + "رجنگیرونیسامریساراتیعربی جنوبی باستانسوراشتراییشاویسینهالیسیلوتی نگاریس" + + "ریانیسریانی سطرنجیلیسریانی غربیسریانی شرقیتگبنواییتامیلیتلوگوییتنگوارتی" + + "فیناغیتاگالوگیتانه\u200cایتایلندیتبتیاوگاریتیویاییگفتار قابل مشاهدهفارس" + + "ی باستانمیخی سومری‐اکدیییموروثیعلائم ریاضیاموجیعلائمنانوشتهمشترکخط نامش" + + "خص" + +var faScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x001f, 0x001f, 0x0027, 0x0040, 0x004a, + 0x0058, 0x0066, 0x0066, 0x0066, 0x0072, 0x007e, 0x007e, 0x0095, + 0x00a5, 0x00b1, 0x00b9, 0x00c7, 0x00d1, 0x00df, 0x00df, 0x00e7, + 0x00ed, 0x00fd, 0x0103, 0x010b, 0x0115, 0x0121, 0x0121, 0x012f, + 0x013b, 0x013b, 0x013b, 0x014e, 0x0167, 0x0167, 0x0179, 0x0190, + 0x0198, 0x01aa, 0x01b2, 0x01b2, 0x01be, 0x01ca, 0x01d8, 0x01e2, + 0x01ee, 0x01f4, 0x0204, 0x021c, 0x022b, 0x022b, 0x0233, 0x0243, + 0x0262, 0x0262, 0x0282, 0x0299, 0x02a5, 0x02be, 0x02c6, 0x02d5, + // Entry 40 - 7F + 0x02df, 0x02df, 0x02eb, 0x02fb, 0x02fb, 0x0303, 0x030f, 0x031b, + 0x0328, 0x0328, 0x032e, 0x033a, 0x0346, 0x0361, 0x0376, 0x0382, + 0x0382, 0x0390, 0x039d, 0x03a6, 0x03a6, 0x03a6, 0x03b2, 0x03be, + 0x03be, 0x03cd, 0x03d7, 0x03d7, 0x03f4, 0x03f4, 0x03f4, 0x0402, + 0x0416, 0x0416, 0x0420, 0x0428, 0x0428, 0x0439, 0x0439, 0x0447, + 0x0467, 0x046f, 0x046f, 0x046f, 0x046f, 0x046f, 0x047b, 0x047b, + 0x0489, 0x049a, 0x049a, 0x049a, 0x04ac, 0x04ac, 0x04c1, 0x04c1, + 0x04dd, 0x04f2, 0x0507, 0x0511, 0x0511, 0x052d, 0x0537, 0x0537, + // Entry 80 - BF + 0x053f, 0x0549, 0x0555, 0x0575, 0x0589, 0x0589, 0x0591, 0x0591, + 0x0591, 0x0591, 0x059f, 0x059f, 0x059f, 0x05b6, 0x05c2, 0x05df, + 0x05f4, 0x0609, 0x0619, 0x0619, 0x0619, 0x0619, 0x0625, 0x0625, + 0x0625, 0x0633, 0x063f, 0x064f, 0x065f, 0x066e, 0x067c, 0x0684, + 0x0684, 0x0694, 0x069e, 0x06be, 0x06be, 0x06be, 0x06d5, 0x06f3, + 0x06f7, 0x0703, 0x0718, 0x0722, 0x072c, 0x073a, 0x0744, 0x0755, +} // Size: 376 bytes + +const fiScriptStr string = "" + // Size: 2515 bytes + "fulanin adlam-aakkostoafakakaukasianalbanialainenahomarabialainenvaltaku" + + "nnanaramealainenarmenialainenavestalainenbalilainenbamumbassabatakilaine" + + "nbengalilainensanskritin bhaiksuki-aakkostobliss-symbolitbopomofobrahmib" + + "raille-pistekirjoitusbugilainenbuhidilainenchakmalainenkanadalaisten alk" + + "uperäiskansojen yhtenäistetty tavukirjoituskaarialainentšamilainencherok" + + "eelainencirthkoptilainenmuinaiskyproslainenkyrillinenkyrillinen muinaisk" + + "irkkoslaavimuunnelmadevanagarideseretDuployén pikakirjoitusegyptiläinen " + + "demoottinenegyptiläinen hieraattinenegyptiläiset hieroglyfitelbasanilain" + + "enetiopialainenmuinaisgeorgialainengeorgialainenglagoliittinengoottilain" + + "engranthakreikkalainengudžaratilainengurmukhikiinan han ja bopomofohangu" + + "lkiinalainen hanhanunoolainenkiinalainen yksinkertaistettu hankiinalaine" + + "n perinteinen hanhatralainenheprealainenhiraganaanatolialaiset hieroglyf" + + "itpahawh hmonghiragana tai katakanamuinaisunkarilaineninduslainenmuinais" + + "italialainenkorean hangulin jamo-elementitjaavalainenjapanilainendžurtše" + + "nkayah likatakanakharosthikhmeriläinenkhojkikannadalainenkorealainenkpel" + + "lekaithilannalaolainenlatinalainen fraktuuramuunnelmalatinalainen gaelim" + + "uunnelmalatinalainenlepchalainenlimbulainenlineaari-Alineaari-BFraserin " + + "aakkosetlomalyykialainenlyydialainenmahajanilainenmandealainenmanikealai" + + "nentiibetiläinen marchan-kirjoitusmaya-hieroglyfitmendemeroiittinen kurs" + + "iivikirjoitusmeroiittinenmalajalamilainenmodi-aakkosetmongolilainenmoon-" + + "kohokirjoitusmromeiteimultanilainenburmalainenmuinaispohjoisarabialainen" + + "nabatealainennewarin newa-tavukirjoitusnaxi geban’konüshuogamol chikiork" + + "honorijalainenosagen aakkostoosmanjalainenpalmyralainenzotuallaimuinaisp" + + "ermiläinenphags-papiirtokirjoituspahlavilainenpsalttaripahlavilainenkirj" + + "apahlavilainenfoinikialainenPollardin foneettinenpiirtokirjoitusparthial" + + "ainenrejangrongorongoriimukirjoitussamarianaramealainensaratimuinaisetel" + + "äarabialainensaurashtraSignWritingshaw’lainenšaradasiddham-tavukirjoitu" + + "skhudabadisinhalilainensorang sompengsundalainensyloti nagrisyyrialainen" + + "syyrialainen estrangelo-muunnelmasyyrialainen läntinen muunnelmasyyriala" + + "inen itäinen muunnelmatagbanwalainentakritailelainenuusi tailuelainentam" + + "ililainentanguttai viettelugulainentengwartifinaghtagalogilainenthaanath" + + "ailainentiibetiläinentirhutaugaritilainenvailainennäkyvä puhevarang kshi" + + "tiwoleaimuinaispersialainensumerilais-akkadilainen nuolenpääkirjoitusyil" + + "äinenperittymatemaattinenemoji-symbolitsymbolitkirjoittamatonmäärittämä" + + "töntuntematon kirjoitusjärjestelmä" + +var fiScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0016, 0x001b, 0x0031, 0x0035, 0x0041, 0x0058, 0x0065, + 0x0071, 0x007b, 0x0080, 0x0085, 0x0091, 0x009e, 0x00bb, 0x00c9, + 0x00d1, 0x00d7, 0x00ed, 0x00f7, 0x0103, 0x010f, 0x014d, 0x0159, + 0x0165, 0x0173, 0x0178, 0x0183, 0x0196, 0x01a0, 0x01c7, 0x01d1, + 0x01d8, 0x01ef, 0x0208, 0x0222, 0x023b, 0x0249, 0x0256, 0x026a, + 0x0277, 0x0285, 0x0291, 0x0298, 0x02a5, 0x02b5, 0x02bd, 0x02d3, + 0x02d9, 0x02e8, 0x02f5, 0x0316, 0x0331, 0x033c, 0x0348, 0x0350, + 0x036a, 0x0376, 0x038b, 0x039e, 0x03a9, 0x03bc, 0x03da, 0x03e5, + // Entry 40 - 7F + 0x03f1, 0x03fb, 0x0403, 0x040b, 0x0414, 0x0421, 0x0427, 0x0434, + 0x043f, 0x0445, 0x044b, 0x0450, 0x0459, 0x0478, 0x0493, 0x049f, + 0x04ab, 0x04b6, 0x04c0, 0x04ca, 0x04db, 0x04df, 0x04eb, 0x04f7, + 0x0505, 0x0511, 0x051e, 0x053e, 0x054e, 0x0553, 0x0571, 0x057d, + 0x058d, 0x059a, 0x05a7, 0x05b9, 0x05bc, 0x05c2, 0x05cf, 0x05da, + 0x05f4, 0x0601, 0x061b, 0x0624, 0x062a, 0x0630, 0x0634, 0x063c, + 0x0642, 0x064d, 0x065c, 0x0669, 0x0676, 0x067f, 0x0692, 0x069a, + 0x06b6, 0x06cc, 0x06de, 0x06ec, 0x0701, 0x071d, 0x0723, 0x072d, + // Entry 80 - BF + 0x073b, 0x074f, 0x0755, 0x076e, 0x0778, 0x0783, 0x0790, 0x0797, + 0x07ac, 0x07b5, 0x07c2, 0x07d0, 0x07db, 0x07e7, 0x07f3, 0x0814, + 0x0834, 0x0853, 0x0861, 0x0866, 0x0871, 0x0882, 0x088e, 0x0894, + 0x089c, 0x08a8, 0x08af, 0x08b7, 0x08c5, 0x08cb, 0x08d5, 0x08e3, + 0x08ea, 0x08f7, 0x0900, 0x090d, 0x091a, 0x0920, 0x0933, 0x095f, + 0x0968, 0x096f, 0x097c, 0x098a, 0x0992, 0x09a0, 0x09b2, 0x09d3, +} // Size: 376 bytes + +const filScriptStr string = "" + // Size: 363 bytes + "ArabicArmenianBanglaBopomofoBrailleCyrillicDevanagariEthiopicGeorgianGre" + + "ekGujaratiGurmukhiHanbHangulHanPinasimpleng HanTradisyonal na HanHebrewH" + + "iraganaJapanese syllabariesJamoJapaneseKatakanaKhmerKannadaKoreanLaoLati" + + "nMalayalamMongolianMyanmarOdiaSinhalaTamilTeluguThaanaThaiTibetanMathema" + + "tical NotationEmojiMga SimboloHindi NakasulatKaraniwanHindi Kilalang Scr" + + "ipt" + +var filScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x0014, 0x0014, 0x0014, + 0x001c, 0x001c, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x002b, 0x002b, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003d, 0x003d, + 0x0045, 0x0045, 0x0045, 0x0045, 0x004a, 0x0052, 0x005a, 0x005e, + 0x0064, 0x0067, 0x0067, 0x0077, 0x0089, 0x0089, 0x008f, 0x0097, + 0x0097, 0x0097, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00af, 0x00af, + // Entry 40 - 7F + 0x00b7, 0x00b7, 0x00b7, 0x00bf, 0x00bf, 0x00c4, 0x00c4, 0x00cb, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d4, 0x00d4, 0x00d4, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00e2, 0x00e2, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00f2, + 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, + 0x00f2, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + // Entry 80 - BF + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x0102, 0x0102, + 0x0102, 0x0108, 0x0108, 0x0108, 0x0108, 0x010e, 0x0112, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x012e, 0x0133, 0x013e, 0x014d, 0x0156, 0x016b, +} // Size: 376 bytes + +const frScriptStr string = "" + // Size: 1457 bytes + "arabearaméen impérialarménienavestiquebalinaisbatakbengalisymboles Bliss" + + "bopomofobrâhmîbraillebouguisbouhidechakmasyllabaire autochtone canadien " + + "unifiécarienchamcherokeecirthcoptesyllabaire chypriotecyrilliquecyrilliq" + + "ue (variante slavonne)dévanâgarîdéséretdémotique égyptienhiératique égyp" + + "tienhiéroglyphes égyptienséthiopiquegéorgien khoutsourigéorgienglagoliti" + + "quegotiquegrecgoudjarâtîgourmoukhîHanbhangûlsinogrammeshanounóosinogramm" + + "es simplifiéssinogrammes traditionnelshébreuhiraganapahawh hmongkatakana" + + " ou hiraganaancien hongroisindusancien italiqueJamojavanaisjaponaiskayah" + + " likatakanakharochthîkhmerkannaracoréenkaithîlannalaolatin (variante bri" + + "sée)latin (variante gaélique)latinlepchalimboulinéaire Alinéaire Blycien" + + "lydienmandéenmanichéenhiéroglyphes mayasméroïtiquemalayalammongolmoonmei" + + "tei mayekbirmann’koogamol tchikiorkhonoriyaosmanaisancien permienphags p" + + "apehlevi des inscriptionspehlevi des psautierspehlevi des livresphénicie" + + "nphonétique de Pollardparthe des inscriptionsrejangrongorongoruniquesama" + + "ritainsaratisaurashtraécriture des signesshaviencinghalaissundanaissylot" + + "î nâgrîsyriaquesyriaque estranghélosyriaque occidentalsyriaque oriental" + + "tagbanouataï-lenouveau taï-luetamoultaï viêttélougoutengwartifinaghtagal" + + "thânathaïtibétainougaritiquevaïparole visiblecunéiforme persépolitaincun" + + "éiforme suméro-akkadienyihériténotation mathématiqueZsyesymbolesnon écr" + + "itcommunécriture inconnue" + +var frScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x0017, 0x0020, + 0x0029, 0x0031, 0x0031, 0x0031, 0x0036, 0x003d, 0x003d, 0x004b, + 0x0053, 0x005b, 0x0062, 0x0069, 0x0070, 0x0076, 0x009c, 0x00a2, + 0x00a6, 0x00ae, 0x00b3, 0x00b8, 0x00cc, 0x00d6, 0x00f4, 0x0101, + 0x010a, 0x010a, 0x011e, 0x0133, 0x014b, 0x014b, 0x0156, 0x016a, + 0x0173, 0x017f, 0x0186, 0x0186, 0x018a, 0x0196, 0x01a1, 0x01a5, + 0x01ac, 0x01b7, 0x01c0, 0x01d7, 0x01f0, 0x01f0, 0x01f7, 0x01ff, + 0x01ff, 0x020b, 0x021f, 0x022e, 0x0233, 0x0242, 0x0246, 0x024e, + // Entry 40 - 7F + 0x0256, 0x0256, 0x025e, 0x0266, 0x0271, 0x0276, 0x0276, 0x027d, + 0x0284, 0x0284, 0x028b, 0x0290, 0x0293, 0x02ab, 0x02c5, 0x02ca, + 0x02d0, 0x02d6, 0x02e1, 0x02ec, 0x02ec, 0x02ec, 0x02f2, 0x02f8, + 0x02f8, 0x0300, 0x030a, 0x030a, 0x031d, 0x031d, 0x031d, 0x0329, + 0x0332, 0x0332, 0x0338, 0x033c, 0x033c, 0x0348, 0x0348, 0x034e, + 0x034e, 0x034e, 0x034e, 0x034e, 0x0354, 0x0354, 0x0358, 0x0361, + 0x0367, 0x036c, 0x036c, 0x0374, 0x0374, 0x0374, 0x0382, 0x038a, + 0x03a2, 0x03b7, 0x03c9, 0x03d3, 0x03e9, 0x0400, 0x0406, 0x0410, + // Entry 80 - BF + 0x0417, 0x0421, 0x0427, 0x0427, 0x0431, 0x0445, 0x044c, 0x044c, + 0x044c, 0x044c, 0x0456, 0x0456, 0x045f, 0x046e, 0x0476, 0x048b, + 0x049e, 0x04af, 0x04b8, 0x04b8, 0x04bf, 0x04cf, 0x04d5, 0x04d5, + 0x04df, 0x04e8, 0x04ef, 0x04f7, 0x04fc, 0x0502, 0x0507, 0x0510, + 0x0510, 0x051b, 0x051f, 0x052d, 0x052d, 0x052d, 0x0547, 0x0563, + 0x0565, 0x056d, 0x0583, 0x0587, 0x058f, 0x0599, 0x059f, 0x05b1, +} // Size: 376 bytes + +const frCAScriptStr string = "" + // Size: 118 bytes + "devanagarigujaratihanbcaractères chinois simplifiéscaractères chinois tr" + + "aditionnelssyllabaires japonaisjamoodiazsye" + +var frCAScriptIdx = []uint16{ // 172 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0035, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x006a, 0x006a, 0x006a, 0x006a, 0x006e, 0x006e, + // Entry 40 - 7F + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x006e, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + // Entry 80 - BF + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0076, +} // Size: 368 bytes + +const guScriptStr string = "" + // Size: 3357 bytes + "અરબીઇમ્પિરિયલ આર્મનિકઅર્મેનિયનઅવેસ્તનબાલીનીઝબટાકબંગાળીબ્લિસિમ્બોલ્સબોપોમ" + + "ોફોબ્રહ્મીબ્રેલબગિનીસબુહિદચકમાયુનાઇટેડ કેનેડિયન એબોરિજનલ સિલેબિક્સકરૈન" + + "ચેરોકીસિર્થકોપ્ટિકસિપ્રાયટસિરિલિકઓલ્ડ ચર્ચ સ્લાવોનિક સિરિલિકદેવનાગરીડે" + + "સરેટઇજિપ્શિયન ડેમોટિકઇજિપ્શિયન હાઇરેટિકઇજિપ્શિયન હાઇરોગ્લિફ્સઇથિયોપિકજ" + + "્યોર્જિઅન ખુતસુરીજ્યોર્જિઅનગ્લેગોલિટિકગોથિકગ્રીકગુજરાતીગુરૂમુખીહાન્બહં" + + "ગુલહાનહનુનૂસરળીકૃત હાનપરંપરાગત હાનહીબ્રુહિરાગાનાપહાઉ મોન્ગજાપાનીઝ વર્ણ" + + "માળાઓલ્ડ હંગેરિયનસિન્ધુજૂનુ ઇટાલિકજેમોજાવાનીસજાપાનીકાયાહ લીકટાકાનાખારો" + + "શ્થીખ્મેરકન્નડાકોરિયનકૈથીલાનાલાઓફ્રેકતુર લેટિનગૈલિક લેટિનલેટિનલેપચાલિમ" + + "્બૂલીનિયર અલીનિયર બીલિશિયનલિડિયનમાન્ડાયીનમાનીચાયીનમયાન હાઇરોગ્લિફ્સમેર" + + "ોઇટિકમલયાલમમોંગોલિયનમૂનમેઇતેઇ માયેકમ્યાંમારએન’ કોઓઘામઓલ ચિકીઓરખોનઉડિયા" + + "ઓસ્માન્યાઓલ્ડ પરમિકફાગ્સ-પાઇન્સ્ક્રિપ્શનલ પહલવીસાલટર પહલવીબુક પહલવીફોન" + + "િશિયનપોલાર્ડ ફોનેટિકઇન્સ્ક્રિપ્શનલ પાર્થિયનરીજાંગરોંગોરોંગોરૂનિકસમરિટા" + + "નસરાતીસૌરાષ્ટ્રસંકેત લિપીશાવિયાનસિંહલીસુદાનીઝસિલોતી નાગરીસિરિયેકએસ્ત્ર" + + "ેન્જેલો સિરિયાકપશ્ચિમ સિરિયાકપૂર્વ સિરિયાકતગબન્વાતાઇ લીનવીન તાઇ લૂતમિલ" + + "તાઇ વેઇતતેલુગુતેન્ગવારતિફિનાઘટેગાલોગથાનાથાઇટિબેટીયુગાતિટિકવાઇવિસિબલ સ્" + + "પીચજુની ફારસીસુમેરો અક્કાદિયન સુનિફોર્મયીવંશાગતગણિતીય સંકેતલિપિઇમોજીપ્" + + "રતીકોઅલિખિતસામાન્યઅજ્ઞાત લિપિ" + +var guScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x003d, 0x0058, + 0x006d, 0x0082, 0x0082, 0x0082, 0x008e, 0x00a0, 0x00a0, 0x00c7, + 0x00df, 0x00f4, 0x0103, 0x0115, 0x0124, 0x0130, 0x0196, 0x01a2, + 0x01a2, 0x01b4, 0x01c3, 0x01d8, 0x01f0, 0x0205, 0x0250, 0x0268, + 0x027a, 0x027a, 0x02ab, 0x02df, 0x031f, 0x031f, 0x0337, 0x036b, + 0x0389, 0x03aa, 0x03b9, 0x03b9, 0x03c8, 0x03dd, 0x03f5, 0x0404, + 0x0413, 0x041c, 0x042b, 0x044a, 0x046c, 0x046c, 0x047e, 0x0496, + 0x0496, 0x04b2, 0x04e0, 0x0505, 0x0517, 0x0536, 0x0542, 0x0557, + // Entry 40 - 7F + 0x0569, 0x0569, 0x057f, 0x0594, 0x05ac, 0x05bb, 0x05bb, 0x05cd, + 0x05df, 0x05df, 0x05eb, 0x05f7, 0x0600, 0x0628, 0x0647, 0x0656, + 0x0665, 0x0677, 0x068d, 0x06a6, 0x06a6, 0x06a6, 0x06b8, 0x06ca, + 0x06ca, 0x06e5, 0x0700, 0x0700, 0x0731, 0x0731, 0x0731, 0x0749, + 0x075b, 0x075b, 0x0776, 0x077f, 0x077f, 0x07a1, 0x07a1, 0x07b9, + 0x07b9, 0x07b9, 0x07b9, 0x07b9, 0x07c9, 0x07c9, 0x07d5, 0x07e8, + 0x07f7, 0x0806, 0x0806, 0x0821, 0x0821, 0x0821, 0x083d, 0x0853, + 0x088d, 0x08ac, 0x08c5, 0x08dd, 0x0908, 0x094b, 0x095d, 0x097b, + // Entry 80 - BF + 0x098a, 0x099f, 0x09ae, 0x09ae, 0x09c9, 0x09e5, 0x09fa, 0x09fa, + 0x09fa, 0x09fa, 0x0a0c, 0x0a0c, 0x0a21, 0x0a43, 0x0a58, 0x0a95, + 0x0abd, 0x0ae2, 0x0af7, 0x0af7, 0x0b07, 0x0b24, 0x0b30, 0x0b30, + 0x0b46, 0x0b58, 0x0b70, 0x0b85, 0x0b9a, 0x0ba6, 0x0baf, 0x0bc1, + 0x0bc1, 0x0bdc, 0x0be5, 0x0c07, 0x0c07, 0x0c07, 0x0c23, 0x0c6d, + 0x0c73, 0x0c85, 0x0cb3, 0x0cc2, 0x0cd7, 0x0ce9, 0x0cfe, 0x0d1d, +} // Size: 376 bytes + +const heScriptStr string = "" + // Size: 875 bytes + "ערביארמניבאלינזיבנגליבופומופובריילצ׳אםצ׳ירוקיקופטיקפריסאיקיריליקירילי סל" + + "אבוני כנסייתי עתיקדוואנגריכתב חרטומיםאתיופיגאורגיגותייווניגוג׳רטיגורמוק" + + "יהאנבהאנגולהאןהאן פשוטהאן מסורתיעבריהירגאנההברתי יפניהונגרי עתיקאינדוסא" + + "יטלקי עתיקג׳אמוג׳אוונזייפניקטקאנהחמריקאנאדהקוריאנילאיתלטיני גאלילטינימא" + + "יהמליאלאםמונגולימיאנמראורייהפיניקירוניסינהלהסוריסורי מערביסורי מזרחיטמי" + + "לטלוגוטגלוגתאנהתאיטיבטיאוגריתיפרסי עתיקמורשסימון מתמטיאמוג׳יסמליםלא כתו" + + "ברגילכתב שאינו ידוע" + +var heScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0012, + 0x0012, 0x0020, 0x0020, 0x0020, 0x0020, 0x002a, 0x002a, 0x002a, + 0x003a, 0x003a, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x004c, 0x005a, 0x005a, 0x0064, 0x0072, 0x007e, 0x00b1, 0x00c1, + 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00d6, 0x00d6, 0x00e2, 0x00e2, + 0x00ee, 0x00ee, 0x00f6, 0x00f6, 0x0100, 0x010e, 0x011c, 0x0124, + 0x0130, 0x0136, 0x0136, 0x0145, 0x0158, 0x0158, 0x0160, 0x016e, + 0x016e, 0x016e, 0x0181, 0x0196, 0x01a2, 0x01b7, 0x01c1, 0x01d1, + // Entry 40 - 7F + 0x01d9, 0x01d9, 0x01d9, 0x01e5, 0x01e5, 0x01ed, 0x01ed, 0x01f9, + 0x0207, 0x0207, 0x0207, 0x0207, 0x020f, 0x020f, 0x0222, 0x022c, + 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, + 0x022c, 0x022c, 0x022c, 0x022c, 0x0234, 0x0234, 0x0234, 0x0234, + 0x0242, 0x0242, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x025c, + 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, + 0x025c, 0x0268, 0x0268, 0x0268, 0x0268, 0x0268, 0x0268, 0x0268, + 0x0268, 0x0268, 0x0268, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, + // Entry 80 - BF + 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, + 0x027c, 0x027c, 0x0288, 0x0288, 0x0288, 0x0288, 0x0290, 0x0290, + 0x02a3, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02be, 0x02be, + 0x02be, 0x02c8, 0x02c8, 0x02c8, 0x02d2, 0x02da, 0x02e0, 0x02ea, + 0x02ea, 0x02f8, 0x02f8, 0x02f8, 0x02f8, 0x02f8, 0x0309, 0x0309, + 0x0309, 0x0311, 0x0326, 0x0332, 0x033c, 0x0349, 0x0351, 0x036b, +} // Size: 376 bytes + +const hiScriptStr string = "" + // Size: 3366 bytes + "अरबीइम्पिरियल आर्मेनिकआर्मेनियाईअवेस्तनबालीबटकीबंगालीब्लिसिम्बॉल्सबोपोमो" + + "फ़ोब्रह्मीब्रेलबगिनीसबुहिदचकमायुनिफाइड कैनेडियन एबोरिजनल सिलेबिक्सकरैन" + + "चामचेरोकीकिर्थकॉप्टिककाइप्रायटसिरिलिकओल्ड चर्च स्लावोनिक सिरिलिकदेवनाग" + + "रीडेसरेटइजिप्शियन डेमोटिकइजिप्शियन हाइरेटिकइजिप्शियन हाइरोग्लिफ्सइथियो" + + "पियाईजॉर्जियन खुतसुरीजॉर्जियनग्लेगोलिटिकगोथिकग्रन्थयूनानीगुजरातीगुरमुख" + + "ीहांबहंगुलहानहनुनूसरलीकृत हानपारंपरिक हानहिब्रूहिरागानापाहो ह्मोन्गजाप" + + "ानी सिलेबरीज़ऑल्ड हंगेरियनसिन्धुपुरानी इटलीजामोजावानीसजापानीकायाह लीका" + + "ताकानाखारोशथीखमेरकन्नड़कोरियाईकैथीलानालाओफ़्रैक्टुर लातिनीगेली लातिनील" + + "ैटिनलेपचालिम्बूलीनियर Aलीनियर बीलिशियनलिडियनमनडेनमनीशीनमयान हाइरोग्लिफ" + + "्समेरोइटिकमलयालममंगोलियाईमूनमेइतेइ मायेकम्यांमारएन्‘कोओगमऑल चिकीओरखोनउ" + + "ड़ियाओस्मान्याओल्ड परमिकफाग्स-पाइंस्क्रिपश्नल पाहलवीसॉल्टर पाहलवीबुक प" + + "ाहलवीफोनिशियनपॉलार्ड फोनेटिकइंस्क्रिपश्नल पार्थियनरीजांगरोन्गोरोन्गोरू" + + "निकसमरिटनसरातीसौराष्ट्रसांकेतिक लेखशावियानसिंहलीसूडानीसिलोती नागरीसिरि" + + "येकएस्त्रेन्जेलो सिरिएकपश्चिम सिरिएकपूर्व सिरिएकतगबन्वाताई लीनया ताई ल" + + "ुतमिलताई विएततेलुगूतेन्गवारतिफिनाघटैगालोगथानाथाईतिब्बतीयुगारिटिकवाईविस" + + "िबल स्पीचपुरानी फारसीसुमेरो अक्कादियन सुनिफॉर्मयीविरासतगणितीय संकेतनईम" + + "ोजीचिह्नअलिखितसामान्यअज्ञात लिपि" + +var hiScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0040, 0x005e, + 0x0073, 0x007f, 0x007f, 0x007f, 0x008b, 0x009d, 0x009d, 0x00c4, + 0x00df, 0x00f4, 0x0103, 0x0115, 0x0124, 0x0130, 0x0196, 0x01a2, + 0x01ab, 0x01bd, 0x01cc, 0x01e1, 0x01fc, 0x0211, 0x025c, 0x0274, + 0x0286, 0x0286, 0x02b7, 0x02eb, 0x032b, 0x032b, 0x0349, 0x0377, + 0x038f, 0x03b0, 0x03bf, 0x03d1, 0x03e3, 0x03f8, 0x040d, 0x0419, + 0x0428, 0x0431, 0x0440, 0x045f, 0x0481, 0x0481, 0x0493, 0x04ab, + 0x04ab, 0x04cd, 0x04fb, 0x0520, 0x0532, 0x0551, 0x055d, 0x0572, + // Entry 40 - 7F + 0x0584, 0x0584, 0x059a, 0x05b2, 0x05c7, 0x05d3, 0x05d3, 0x05e5, + 0x05fa, 0x05fa, 0x0606, 0x0612, 0x061b, 0x064c, 0x066b, 0x067a, + 0x0689, 0x069b, 0x06af, 0x06c8, 0x06c8, 0x06c8, 0x06da, 0x06ec, + 0x06ec, 0x06fb, 0x070d, 0x070d, 0x073e, 0x073e, 0x073e, 0x0756, + 0x0768, 0x0768, 0x0783, 0x078c, 0x078c, 0x07ae, 0x07ae, 0x07c6, + 0x07c6, 0x07c6, 0x07c6, 0x07c6, 0x07d8, 0x07d8, 0x07e1, 0x07f4, + 0x0803, 0x0815, 0x0815, 0x0830, 0x0830, 0x0830, 0x084c, 0x0862, + 0x089c, 0x08c1, 0x08dd, 0x08f5, 0x0920, 0x0960, 0x0972, 0x0996, + // Entry 80 - BF + 0x09a5, 0x09b7, 0x09c6, 0x09c6, 0x09e1, 0x0a03, 0x0a18, 0x0a18, + 0x0a18, 0x0a18, 0x0a2a, 0x0a2a, 0x0a3c, 0x0a5e, 0x0a73, 0x0aad, + 0x0ad2, 0x0af4, 0x0b09, 0x0b09, 0x0b19, 0x0b33, 0x0b3f, 0x0b3f, + 0x0b55, 0x0b67, 0x0b7f, 0x0b94, 0x0ba9, 0x0bb5, 0x0bbe, 0x0bd3, + 0x0bd3, 0x0bee, 0x0bf7, 0x0c19, 0x0c19, 0x0c19, 0x0c3b, 0x0c85, + 0x0c8b, 0x0c9d, 0x0cc2, 0x0cd1, 0x0ce0, 0x0cf2, 0x0d07, 0x0d26, +} // Size: 376 bytes + +const hrScriptStr string = "" + // Size: 2397 bytes + "afaka pismoarapsko pismoaramejsko pismoarmensko pismoavestansko pismobal" + + "ijsko pismobamum pismobassa vah pismobatak pismobengalsko pismoblissymbo" + + "lsbopomofo pismobrahmi pismobrajicabuginsko pismobuhid pismochakma pismo" + + "unificirani kanadski aboriđinski slogovikarijsko pismočamsko pismočeroki" + + " pismocirth pismokoptsko pismocypriot pismoćirilicastaroslavenska crkven" + + "a čirilicadevangari pismodeseret pismoegipatsko narodno pismoegipatsko h" + + "ijeratsko pismoegipatski hijeroglifietiopsko pismogruzijsko khutsuri pis" + + "mogruzijsko pismoglagoljicagotičko pismograntha pismogrčko pismogudžarat" + + "sko pismogurmukhi pismohanb pismohangul pismohansko pismohanunoo pismopo" + + "jednostavljeno hansko pismotradicionalno hansko pismohebrejsko pismohira" + + "gana pismoanatolijski hijeroglifipahawh hmong pismojapansko slogovno pis" + + "mostaro mađarsko pismoindijsko pismostaro talijansko pismojamo pismojava" + + "nsko pismojapansko pismojurchen pismokayah li pismokatakana pismokharosh" + + "thi pismokmersko pismokhojki pismokannada pismokorejsko pismokpelle pism" + + "okaithi pismolanna pismolaosko pismofraktur latinicakeltska latinicalati" + + "nicalepcha pismolimbu pismolinear A pismolinear B pismofraser pismoloma " + + "pismolikijsko pismolidijsko pismomandai pismomanihejsko pismomajanski hi" + + "jeroglifimende pismomeroitski kurzivmeroitic pismomalajalamsko pismomong" + + "olsko pismomoon pismomro pismomeitei mayek pismomjanmarsko pismostaro sj" + + "evernoarapsko pismonabatejsko pismonaxi geba pismon’ko pismonushu pismoo" + + "gham pismool chiki pismoorkhon pismoorijsko pismoosmanya pismopalmyrene " + + "pismostaro permic pismophags-pa pismopisani pahlavipsalter pahlavipahlav" + + "i pismofeničko pismopollard fonetsko pismopisani parthianrejang pismoron" + + "gorongo pismorunsko pismosamaritansko pismosarati pismostaro južnoarapsk" + + "o pismosaurashtra pismoznakovno pismoshavian pismosharada pismokhudawadi" + + " pismosinhaleško pismosora sompeng pismosundansko pismosyloti nagri pism" + + "osirijsko pismosirijsko estrangelo pismopismo zapadne Sirijepismo istočn" + + "e Sirijetagbanwa pismotakri pismotai le pismonovo tai lue pismotamilsko " + + "pismotangut pismotai viet pismoteluško pismotengwar pismotifinartagalog " + + "pismothaana pismotajsko pismotibetansko pismotirhuta pismougaritsko pism" + + "ovai pismoVisible Speechvarang kshiti pismowoleai pismostaro perzijsko p" + + "ismosumersko-akadsko cuneiform pismoYi pismonasljedno pismomatematičko z" + + "nakovljeemotikonisimbolijezik bez pismenostizajedničko pismonepoznato pi" + + "smo" + +var hrScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000b, 0x000b, 0x000b, 0x0018, 0x0027, 0x0035, + 0x0045, 0x0053, 0x005e, 0x006d, 0x0078, 0x0087, 0x0087, 0x0092, + 0x00a0, 0x00ac, 0x00b3, 0x00c1, 0x00cc, 0x00d8, 0x0101, 0x010f, + 0x011c, 0x0129, 0x0134, 0x0141, 0x014e, 0x0157, 0x0177, 0x0186, + 0x0193, 0x0193, 0x01aa, 0x01c4, 0x01d9, 0x01d9, 0x01e7, 0x01ff, + 0x020e, 0x0218, 0x0226, 0x0233, 0x023f, 0x0251, 0x025f, 0x0269, + 0x0275, 0x0281, 0x028e, 0x02ab, 0x02c5, 0x02c5, 0x02d4, 0x02e2, + 0x02f9, 0x030b, 0x0322, 0x0337, 0x0345, 0x035b, 0x0365, 0x0373, + // Entry 40 - 7F + 0x0381, 0x038e, 0x039c, 0x03aa, 0x03ba, 0x03c7, 0x03d3, 0x03e0, + 0x03ee, 0x03fa, 0x0406, 0x0411, 0x041d, 0x042d, 0x043d, 0x0445, + 0x0451, 0x045c, 0x046a, 0x0478, 0x0484, 0x048e, 0x049c, 0x04aa, + 0x04aa, 0x04b6, 0x04c6, 0x04c6, 0x04da, 0x04e5, 0x04f5, 0x0503, + 0x0515, 0x0515, 0x0524, 0x052e, 0x0537, 0x0549, 0x0549, 0x0559, + 0x0574, 0x0584, 0x0584, 0x0593, 0x059f, 0x05aa, 0x05b5, 0x05c3, + 0x05cf, 0x05dc, 0x05dc, 0x05e9, 0x05f8, 0x05f8, 0x060a, 0x0618, + 0x0626, 0x0635, 0x0642, 0x0650, 0x0666, 0x0675, 0x0681, 0x0691, + // Entry 80 - BF + 0x069d, 0x06af, 0x06bb, 0x06d4, 0x06e4, 0x06f2, 0x06ff, 0x070c, + 0x070c, 0x071b, 0x072c, 0x073e, 0x074d, 0x075f, 0x076d, 0x0786, + 0x079a, 0x07af, 0x07bd, 0x07c8, 0x07d4, 0x07e6, 0x07f4, 0x0800, + 0x080e, 0x081c, 0x0829, 0x0830, 0x083d, 0x0849, 0x0855, 0x0865, + 0x0872, 0x0881, 0x088a, 0x0898, 0x08ab, 0x08b7, 0x08cc, 0x08ec, + 0x08f4, 0x0903, 0x0919, 0x0922, 0x0929, 0x093d, 0x094e, 0x095d, +} // Size: 376 bytes + +const huScriptStr string = "" + // Size: 1286 bytes + "ArabBirodalmi arámiÖrményAvesztánBalinézBatakBengáliBliss jelképrendszer" + + "BopomofoBrámiVakírásBuginézBuhidCsakmaEgyesített kanadai őslakos jelekKa" + + "riCsámCserokiKoptCiprusiCirillÓegyházi szláv cirillDevanagáriDeseretEgyi" + + "ptomi demotikusEgyiptomi hieratikusEgyiptomi hieroglifákEtiópGrúz kucsur" + + "iGrúzGlagolitikusGótGörögGudzsarátiGurmukiHanbHangulHanHanunooEgyszerűsí" + + "tett kínaiHagyományos kínaiHéberHiraganaPahawh hmongKatakana vagy hiraga" + + "naÓmagyarIndusRégi olaszJamoJávaiJapánKajah liKatakanaKharoshthiKhmerKan" + + "nadaKoreaiKaithiLannaLaoFraktur latinGael latinLatinLepchaLimbuLineáris " + + "ALineáris BLíciaiLídiaiMandaiManicheusMaja hieroglifákMeroitikusMalajála" + + "mMongolMoonMeitei mayekBurmaiN’koOghamOl chikiOrhonOriyaOszmánÓpermikusP" + + "hags-paFelriatos pahlaviPsalter pahlaviKönyv pahlaviFőniciaiPollard fone" + + "tikusFeliratos parthianRedzsangRongorongoRunikusSzamaritánSzaratiSzauras" + + "traJelírásShaw ábécéSzingalézSzundanézSylheti nagáriSzíriaiEstrangelo sz" + + "íriaiNyugat-szíriaiKelet-szíriaiTagbanwaTai LeÚj tai lueTamilTai vietTe" + + "luguTengwarBerberTagalogThaanaThaiTibetiUgariVaiLátható beszédÓperzsaÉkí" + + "rásos suméro-akkádJiSzármaztatottMatematikai jelrendszerEmojiSzimbólumÍr" + + "atlan nyelvek kódjaMeghatározatlanIsmeretlen írásrendszer" + +var huScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0014, 0x001c, + 0x0025, 0x002d, 0x002d, 0x002d, 0x0032, 0x003a, 0x003a, 0x004f, + 0x0057, 0x005d, 0x0066, 0x006e, 0x0073, 0x0079, 0x009b, 0x009f, + 0x00a4, 0x00ab, 0x00ab, 0x00af, 0x00b6, 0x00bc, 0x00d4, 0x00df, + 0x00e6, 0x00e6, 0x00f9, 0x010d, 0x0123, 0x0123, 0x0129, 0x0136, + 0x013b, 0x0147, 0x014b, 0x014b, 0x0152, 0x015d, 0x0164, 0x0168, + 0x016e, 0x0171, 0x0178, 0x018f, 0x01a2, 0x01a2, 0x01a8, 0x01b0, + 0x01b0, 0x01bc, 0x01d2, 0x01da, 0x01df, 0x01ea, 0x01ee, 0x01f4, + // Entry 40 - 7F + 0x01fa, 0x01fa, 0x0202, 0x020a, 0x0214, 0x0219, 0x0219, 0x0220, + 0x0226, 0x0226, 0x022c, 0x0231, 0x0234, 0x0241, 0x024b, 0x0250, + 0x0256, 0x025b, 0x0266, 0x0271, 0x0271, 0x0271, 0x0278, 0x027f, + 0x027f, 0x0285, 0x028e, 0x028e, 0x029f, 0x029f, 0x029f, 0x02a9, + 0x02b3, 0x02b3, 0x02b9, 0x02bd, 0x02bd, 0x02c9, 0x02c9, 0x02cf, + 0x02cf, 0x02cf, 0x02cf, 0x02cf, 0x02d5, 0x02d5, 0x02da, 0x02e2, + 0x02e7, 0x02ec, 0x02ec, 0x02f3, 0x02f3, 0x02f3, 0x02fd, 0x0305, + 0x0316, 0x0325, 0x0333, 0x033c, 0x034d, 0x035f, 0x0367, 0x0371, + // Entry 80 - BF + 0x0378, 0x0383, 0x038a, 0x038a, 0x0394, 0x039d, 0x03aa, 0x03aa, + 0x03aa, 0x03aa, 0x03b4, 0x03b4, 0x03be, 0x03cd, 0x03d5, 0x03e8, + 0x03f7, 0x0405, 0x040d, 0x040d, 0x0413, 0x041e, 0x0423, 0x0423, + 0x042b, 0x0431, 0x0438, 0x043e, 0x0445, 0x044b, 0x044f, 0x0455, + 0x0455, 0x045a, 0x045d, 0x046e, 0x046e, 0x046e, 0x0476, 0x0490, + 0x0492, 0x04a0, 0x04b7, 0x04bc, 0x04c6, 0x04dd, 0x04ed, 0x0506, +} // Size: 376 bytes + +const hyScriptStr string = "" + // Size: 781 bytes + "արաբականհայկականբենգալականբոպոմոֆոբրայլիկյուրեղագիրդեւանագարիեթովպականվր" + + "ացականհունականգուջարաթիգուրմուխիհանբհանգուլչինականպարզեցված չինականավան" + + "դական չինականեբրայականհիրագանաճապոնական վանկագիրջամոճապոնականկատականաքմ" + + "երականկաննադակորեականլաոսականլատինականմալայալամմոնղոլականմյանմարականօրի" + + "յասինհալականթամիլականթելուգութաանաթայականտիբեթականմաթեմատիկական նշաններ" + + "էմոձինշաններչգրվածընդհանուրանհայտ գիր" + +var hyScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0034, 0x0034, 0x0034, + 0x0044, 0x0044, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0066, 0x0066, 0x007a, + 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x008c, 0x008c, + 0x009c, 0x009c, 0x009c, 0x009c, 0x00ac, 0x00be, 0x00d0, 0x00d8, + 0x00e6, 0x00f4, 0x00f4, 0x0115, 0x0136, 0x0136, 0x0148, 0x0158, + 0x0158, 0x0158, 0x017b, 0x017b, 0x017b, 0x017b, 0x0183, 0x0183, + // Entry 40 - 7F + 0x0195, 0x0195, 0x0195, 0x01a5, 0x01a5, 0x01b5, 0x01b5, 0x01c3, + 0x01d3, 0x01d3, 0x01d3, 0x01d3, 0x01e3, 0x01e3, 0x01e3, 0x01f5, + 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, + 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, + 0x0207, 0x0207, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x0231, + 0x0231, 0x0231, 0x0231, 0x0231, 0x0231, 0x0231, 0x0231, 0x0231, + 0x0231, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, + 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, + // Entry 80 - BF + 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, + 0x023b, 0x023b, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, + 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x0261, 0x0261, + 0x0261, 0x0271, 0x0271, 0x0271, 0x0271, 0x027b, 0x0289, 0x029b, + 0x029b, 0x029b, 0x029b, 0x029b, 0x029b, 0x029b, 0x029b, 0x029b, + 0x029b, 0x029b, 0x02c4, 0x02ce, 0x02dc, 0x02e8, 0x02fa, 0x030d, +} // Size: 376 bytes + +const idScriptStr string = "" + // Size: 1408 bytes + "AfakaAlbania KaukasiaArabAram ImperialArmeniaAvestaBaliBamumBassa VahBat" + + "akBengaliBlissymbolBopomofoBrahmiBrailleBugisBuhidChakmaSimbol Aborigin " + + "Kanada KesatuanKariaChamCherokeeCirthKoptikSiprusSirilikGereja Slavonia " + + "Sirilik LamaDevanagariDeseretStenografi DuployanDemotik MesirHieratik Me" + + "sirHieroglip MesirEtiopiaGeorgian KhutsuriGeorgiaGlagoliticGothicGrantha" + + "YunaniGujaratGurmukhiHanbHangulHanHanunooHan SederhanaHan TradisionalIbr" + + "aniHiraganaHieroglif AnatoliaPahawh HmongKatakana atau HiraganaHungaria " + + "KunoIndusItalia LamaJamoJawaJepangJurchenKayah LiKatakanaKharoshthiKhmer" + + "KhojkiKannadaKoreaKpelleKaithiLannaLaosLatin FrakturLatin GaelikLatinLep" + + "chaLimbuLinear ALinear BLisuLomaLyciaLydiaMandaeManikheiHieroglip MayaMe" + + "ndeKursif MeroitikMeroitikMalayalamModiMongoliaMoonMroMeitei MayekMyanma" + + "rArab Utara KunoNabataeaNaxi GebaN’KoNushuOghamChiki LamaOrkhonOriyaOsma" + + "nyaPalmiraPermik KunoPhags-paPahleviMazmur PahleviKitab PahleviPhoenixFo" + + "netik PollardPrasasti ParthiaRejangRongorongoRunikSamariaSaratiArab Sela" + + "tan KunoSaurashtraTulisan IsyaratShaviaSharadaSiddhamKhudawadiSinhalaSor" + + "a SompengSundaSyloti NagriSuriahSuriah EstrangeloSuriah BaratSuriah Timu" + + "rTagbanwaTakriTai LeTai Lue BaruTamilTangutTai VietTeluguTenghwarTifinag" + + "hTagalogThaanaThaiTibetTirhutaUgaritikVaiUcapan TerlihatVarang KshitiWol" + + "eaiPersia KunoCuneiform Sumero-AkkadiaYiWarisanNotasi MatematikaEmojiSim" + + "bolTidak TertulisUmumSkrip Tak Dikenal" + +var idScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0015, 0x0015, 0x0019, 0x0026, 0x002d, + 0x0033, 0x0037, 0x003c, 0x0045, 0x004a, 0x0051, 0x0051, 0x005b, + 0x0063, 0x0069, 0x0070, 0x0075, 0x007a, 0x0080, 0x009f, 0x00a4, + 0x00a8, 0x00b0, 0x00b5, 0x00bb, 0x00c1, 0x00c8, 0x00e4, 0x00ee, + 0x00f5, 0x0108, 0x0115, 0x0123, 0x0132, 0x0132, 0x0139, 0x014a, + 0x0151, 0x015b, 0x0161, 0x0168, 0x016e, 0x0175, 0x017d, 0x0181, + 0x0187, 0x018a, 0x0191, 0x019e, 0x01ad, 0x01ad, 0x01b3, 0x01bb, + 0x01cd, 0x01d9, 0x01ef, 0x01fc, 0x0201, 0x020c, 0x0210, 0x0214, + // Entry 40 - 7F + 0x021a, 0x0221, 0x0229, 0x0231, 0x023b, 0x0240, 0x0246, 0x024d, + 0x0252, 0x0258, 0x025e, 0x0263, 0x0267, 0x0274, 0x0280, 0x0285, + 0x028b, 0x0290, 0x0298, 0x02a0, 0x02a4, 0x02a8, 0x02ad, 0x02b2, + 0x02b2, 0x02b8, 0x02c0, 0x02c0, 0x02ce, 0x02d3, 0x02e2, 0x02ea, + 0x02f3, 0x02f7, 0x02ff, 0x0303, 0x0306, 0x0312, 0x0312, 0x0319, + 0x0328, 0x0330, 0x0330, 0x0339, 0x033f, 0x0344, 0x0349, 0x0353, + 0x0359, 0x035e, 0x035e, 0x0365, 0x036c, 0x036c, 0x0377, 0x037f, + 0x0386, 0x0394, 0x03a1, 0x03a8, 0x03b7, 0x03c7, 0x03cd, 0x03d7, + // Entry 80 - BF + 0x03dc, 0x03e3, 0x03e9, 0x03fa, 0x0404, 0x0413, 0x0419, 0x0420, + 0x0427, 0x0430, 0x0437, 0x0443, 0x0448, 0x0454, 0x045a, 0x046b, + 0x0477, 0x0483, 0x048b, 0x0490, 0x0496, 0x04a2, 0x04a7, 0x04ad, + 0x04b5, 0x04bb, 0x04c3, 0x04cb, 0x04d2, 0x04d8, 0x04dc, 0x04e1, + 0x04e8, 0x04f0, 0x04f3, 0x0502, 0x050f, 0x0515, 0x0520, 0x0538, + 0x053a, 0x0541, 0x0552, 0x0557, 0x055d, 0x056b, 0x056f, 0x0580, +} // Size: 376 bytes + +const isScriptStr string = "" + // Size: 401 bytes + "arabísktarmensktbengalsktbopomofoblindraleturkyrillísktdevanagarieþíópís" + + "ktgeorgísktgrísktgújaratígurmukhihanbhangulkínverskteinfaldað hanhefðbun" + + "dið hanhebreskthiraganakatakana eða hiraganajamojapansktkatakanakmerkann" + + "adakóresktlaolatnesktmalalajammongólsktmjanmarsktoriyasinhalatamílskttel" + + "úgúthaanataílenskttíbesktstærðfræðitáknemoji-tákntáknóskrifaðalmenntóþe" + + "kkt letur" + +var isScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x001a, 0x001a, 0x001a, + 0x0022, 0x0022, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x0039, 0x0039, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0050, 0x0050, + 0x005a, 0x005a, 0x005a, 0x005a, 0x0061, 0x006b, 0x0073, 0x0077, + 0x007d, 0x0087, 0x0087, 0x0095, 0x00a5, 0x00a5, 0x00ad, 0x00b5, + 0x00b5, 0x00b5, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cf, 0x00cf, + // Entry 40 - 7F + 0x00d7, 0x00d7, 0x00d7, 0x00df, 0x00df, 0x00e3, 0x00e3, 0x00ea, + 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f5, 0x00f5, 0x00f5, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x0106, 0x0106, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x011a, + 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x011a, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + // Entry 80 - BF + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, + 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x012f, 0x012f, + 0x012f, 0x0137, 0x0137, 0x0137, 0x0137, 0x013d, 0x0147, 0x014f, + 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, + 0x014f, 0x014f, 0x0162, 0x016d, 0x0172, 0x017c, 0x0183, 0x0191, +} // Size: 376 bytes + +const itScriptStr string = "" + // Size: 1575 bytes + "afakaaraboaramaico imperialearmenoavesticobalinesebamumBassa Vahbatakben" + + "galesesimboli blissbopomofobrahmibraillebuginesebuhidchakmasimboli abori" + + "geni canadesi unificaticarianchamcherokeecirthcoptocipriotacirillicociri" + + "llico antica chiesa slavonicadevanagarideseretstenografia duployanegizia" + + "no demoticoieratico egizianogeroglifici egizianietiopekutsurigeorgianogl" + + "agoliticogoticogranthagrecogujaratigurmukhihanbhangulhanhanunoohan sempl" + + "ificatohan tradizionaleebraicohiraganageroglifici anatolicipahawn hmongk" + + "atanaka o hiraganaantico unghereseinduitalico anticojamojavanesegiappone" + + "sejurchenkayah likatakanakharoshthikhmerkhojkikannadacoreanoKpellekaithi" + + "lannalaovariante fraktur del latinovariante gaelica del latinolatinolepc" + + "halimbulineare Alineare Blisulomalycilydimandaicomanicheogeroglifici may" + + "amendecorsivo meroiticomeroiticomalayalammongolomoonmromeetei mayekbirma" + + "noarabo settentrionale anticonabateogeba naxin’konushuoghamol chikiorkho" + + "noriyaosmanyapalmirenopermico anticophags-papahlavi delle iscrizionipahl" + + "avi psalterpahlavi bookfeniciofonetica di pollardpartico delle iscrizion" + + "irejangrongorongorunicosamaritanosaratiarabo meridionale anticosaurashtr" + + "alinguaggio dei segnishavianosharadakhudawadisingalesesora sompengsundan" + + "esesyloti nagrisirianosiriaco estrangelosiriaco occidentalesiriaco orien" + + "taletagbanwatakritai letai luetamiltanguttai viettelugutengwartifinaghta" + + "galogthaanathailandesetibetanotirhutaugaritavaiialfabeto visivovarang ks" + + "hitiwoleaipersiano anticosumero-accadiano cuneiformeyiereditatonotazione" + + " matematicaemojisimbolinon scrittocomunescrittura sconosciuta" + +var itScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, 0x000a, 0x001c, 0x0022, + 0x002a, 0x0032, 0x0037, 0x0040, 0x0045, 0x004e, 0x004e, 0x005b, + 0x0063, 0x0069, 0x0070, 0x0078, 0x007d, 0x0083, 0x00a7, 0x00ad, + 0x00b1, 0x00b9, 0x00be, 0x00c3, 0x00cb, 0x00d4, 0x00f5, 0x00ff, + 0x0106, 0x011a, 0x012b, 0x013c, 0x0150, 0x0150, 0x0156, 0x015d, + 0x0166, 0x0171, 0x0177, 0x017e, 0x0183, 0x018b, 0x0193, 0x0197, + 0x019d, 0x01a0, 0x01a7, 0x01b7, 0x01c7, 0x01c7, 0x01ce, 0x01d6, + 0x01eb, 0x01f7, 0x020a, 0x021a, 0x021e, 0x022c, 0x0230, 0x0238, + // Entry 40 - 7F + 0x0242, 0x0249, 0x0251, 0x0259, 0x0263, 0x0268, 0x026e, 0x0275, + 0x027c, 0x0282, 0x0288, 0x028d, 0x0290, 0x02ab, 0x02c6, 0x02cc, + 0x02d2, 0x02d7, 0x02e0, 0x02e9, 0x02ed, 0x02f1, 0x02f5, 0x02f9, + 0x02f9, 0x0301, 0x0309, 0x0309, 0x0319, 0x031e, 0x032f, 0x0338, + 0x0341, 0x0341, 0x0348, 0x034c, 0x034f, 0x035b, 0x035b, 0x0362, + 0x037d, 0x0384, 0x0384, 0x038d, 0x0393, 0x0398, 0x039d, 0x03a5, + 0x03ab, 0x03b0, 0x03b0, 0x03b7, 0x03c0, 0x03c0, 0x03ce, 0x03d6, + 0x03ee, 0x03fd, 0x0409, 0x0410, 0x0423, 0x043b, 0x0441, 0x044b, + // Entry 80 - BF + 0x0451, 0x045b, 0x0461, 0x0479, 0x0483, 0x0497, 0x049f, 0x04a6, + 0x04a6, 0x04af, 0x04b8, 0x04c4, 0x04cd, 0x04d9, 0x04e0, 0x04f2, + 0x0505, 0x0516, 0x051e, 0x0523, 0x0529, 0x0530, 0x0535, 0x053b, + 0x0543, 0x0549, 0x0550, 0x0558, 0x055f, 0x0565, 0x0570, 0x0578, + 0x057f, 0x0586, 0x058a, 0x0599, 0x05a6, 0x05ac, 0x05bb, 0x05d6, + 0x05d8, 0x05e1, 0x05f5, 0x05fa, 0x0601, 0x060c, 0x0612, 0x0627, +} // Size: 376 bytes + +const jaScriptStr string = "" + // Size: 3286 bytes + "アファカ文字カフカス・アルバニア文字アラビア文字帝国アラム文字アルメニア文字アヴェスター文字バリ文字バムン文字バサ文字バタク文字ベンガル文字ブリ" + + "スシンボル注音字母ブラーフミー文字ブライユ点字ブギス文字ブヒッド文字チャクマ文字統合カナダ先住民音節文字カリア文字チャム文字チェロキー文字キ" + + "アス文字コプト文字キプロス文字キリル文字古代教会スラブ語キリル文字デーバナーガリー文字デセレット文字デュプロワエ式速記エジプト民衆文字エジプ" + + "ト神官文字エジプト聖刻文字エルバサン文字エチオピア文字ジョージア文字(フツリ)ジョージア文字グラゴル文字ゴート文字グランタ文字ギリシャ文字グ" + + "ジャラート文字グルムキー文字漢語注音字母ハングル漢字ハヌノオ文字漢字(簡体字)漢字(繁体字)ヘブライ文字ひらがなアナトリア象形文字パハウ・フ" + + "モン文字仮名古代ハンガリー文字インダス文字古イタリア文字字母ジャワ文字日本語の文字女真文字カヤー文字カタカナカローシュティー文字クメール文字" + + "ホジャ文字カンナダ文字韓国語の文字クペレ文字カイティ文字ラーンナー文字ラオ文字ラテン文字(ドイツ文字)ラテン文字 (ゲール文字)ラテン文字レ" + + "プチャ文字リンブ文字線文字A線文字Bフレイザー文字ロマ文字リキア文字リディア文字マハージャニー文字マンダ文字マニ文字マヤ象形文字メンデ文字メ" + + "ロエ文字草書体メロエ文字マラヤーラム文字モーディー文字モンゴル文字ムーン文字ムロ文字メイテイ文字ミャンマー文字古代北アラビア文字ナバテア文字" + + "ナシ族ゲバ文字ンコ文字女書オガム文字オルチキ文字オルホン文字オリヤー文字オスマニア文字パルミラ文字パウ・チン・ハウ文字古ぺルム文字パスパ文字" + + "碑文パフラヴィー文字詩編用パフラヴィー文字書物用パフラヴィー文字フェニキア文字ポラード音声記号碑文パルティア文字ルジャン文字ロンゴロンゴ文字" + + "ルーン文字サマリア文字サラティ文字古代南アラビア文字サウラーシュトラ文字手話文字ショー文字シャーラダー文字梵字クダワディ文字シンハラ文字ソラ" + + "ング・ソンペング文字スンダ文字シロティ・ナグリ文字シリア文字シリア文字(エストランゲロ文字)シリア文字(西方シリア文字)シリア文字(東方シリ" + + "ア文字)タグバンワ文字タークリー文字タイ・レ文字新タイ・ルー文字タミール文字西夏文字タイ・ヴェト文字テルグ文字テングワール文字ティフナグ文字" + + "タガログ文字ターナ文字タイ文字チベット文字ティルフータ文字ウガリット文字ヴァイ文字視話法バラン・クシティ文字ウォレアイ文字古代ペルシア文字シ" + + "ュメール=アッカド語楔形文字イ文字基底文字の種別を継承する結合文字数学記号絵文字記号文字非表記共通文字未定義文字" + +var jaScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0012, 0x0036, 0x0036, 0x0048, 0x005d, 0x0072, + 0x008a, 0x0096, 0x00a5, 0x00b1, 0x00c0, 0x00d2, 0x00d2, 0x00e7, + 0x00f3, 0x010b, 0x011d, 0x012c, 0x013e, 0x0150, 0x0174, 0x0183, + 0x0192, 0x01a7, 0x01b6, 0x01c5, 0x01d7, 0x01e6, 0x020d, 0x022b, + 0x0240, 0x025b, 0x0273, 0x028b, 0x02a3, 0x02b8, 0x02cd, 0x02ed, + 0x0302, 0x0314, 0x0323, 0x0335, 0x0347, 0x035f, 0x0374, 0x0386, + 0x0392, 0x0398, 0x03aa, 0x03bb, 0x03cc, 0x03cc, 0x03de, 0x03ea, + 0x0405, 0x0420, 0x0426, 0x0441, 0x0453, 0x0468, 0x046e, 0x047d, + // Entry 40 - 7F + 0x048f, 0x049b, 0x04aa, 0x04b6, 0x04d4, 0x04e6, 0x04f5, 0x0507, + 0x0519, 0x0528, 0x053a, 0x054f, 0x055b, 0x057b, 0x059c, 0x05ab, + 0x05bd, 0x05cc, 0x05d6, 0x05e0, 0x05f5, 0x0601, 0x0610, 0x0622, + 0x063d, 0x064c, 0x0658, 0x0658, 0x066a, 0x0679, 0x0691, 0x06a0, + 0x06b8, 0x06cd, 0x06df, 0x06ee, 0x06fa, 0x070c, 0x070c, 0x0721, + 0x073c, 0x074e, 0x074e, 0x0763, 0x076f, 0x0775, 0x0784, 0x0796, + 0x07a8, 0x07ba, 0x07ba, 0x07cf, 0x07e1, 0x07ff, 0x0811, 0x0820, + 0x083e, 0x085f, 0x0880, 0x0895, 0x08ad, 0x08c8, 0x08da, 0x08f2, + // Entry 80 - BF + 0x0901, 0x0913, 0x0925, 0x0940, 0x095e, 0x096a, 0x0979, 0x0991, + 0x0997, 0x09ac, 0x09be, 0x09e2, 0x09f1, 0x0a0f, 0x0a1e, 0x0a4a, + 0x0a70, 0x0a96, 0x0aab, 0x0ac0, 0x0ad2, 0x0aea, 0x0afc, 0x0b08, + 0x0b20, 0x0b2f, 0x0b47, 0x0b5c, 0x0b6e, 0x0b7d, 0x0b89, 0x0b9b, + 0x0bb3, 0x0bc8, 0x0bd7, 0x0be0, 0x0bfe, 0x0c13, 0x0c2b, 0x0c58, + 0x0c61, 0x0c91, 0x0c9d, 0x0ca6, 0x0cb2, 0x0cbb, 0x0cc7, 0x0cd6, +} // Size: 376 bytes + +const kaScriptStr string = "" + // Size: 4040 bytes + "აფაკაარაბულიიმპერიული არამეულისომხურიავესტურიბალიურიბამუმიბასა ვაჰიბატაკ" + + "იბენგალურიბლისსიმბოლოებიბოპომოფობრაჰმიბრაილიბუჰიდიჩაკმაკარიულიჩამიჩერო" + + "კიკირთიკოპტურიკვიპროსულიკირილიცაძველი სლავური კირილიცადევანაგარიდეზერე" + + "ტისდუპლოის სტენოგრაფიაეგვიპტური დემოტიკურიეგვიპტური იერატიკულიეგვიპტურ" + + "ი იეროგლიფურიეთიოპიურიხუცურიქართულიგლაგოლიცაგოთურიგრანთაბერძნულიგუჯარა" + + "თულიგურმუხიჰანბიჰანგულიჰანიჰანუნოოგამარტივებული ჰანიტრადიციული ჰანიებრ" + + "აულიჰირაგანაანატოლიური იეროგლიფურიფაჰაუ-მონიიაპონური კანაძველი უნგრული" + + "ჯამოიავურიიაპონურიჯურჯენულიკაიაჰ-ლიკატაკანაქაროშთიქმერულიქოჯკიკანადაკო" + + "რეულიკპელეკაითილაოსურიგელური ლათინურილათინურილიმბუA-ხაზოვანიB-ხაზოვანი" + + "ლომალიკიურილიდიურიმანდეურიმანიქეურიმაიას იეროგლიფებიმენდემეროიტული კურ" + + "სივიმეროიტულიმალაიალამურიმონღოლურიმრომიანმურიძველი ჩრდილოეთ-არაბულინაბ" + + "ატეურინკონუშუოღამიოლ-ჩიკიორხონულიორიაოსმანიაპალმირულიძველი პერმულიფაგს" + + "პამონუმენტური ფალაურიფსალმუნური ფალაურიწიგნური ფალაურიფინიკიურიმონუმენ" + + "ტური პართულირეჯანგირონგორონგორუნულისამარიულისარატიძველი სამხრეთ-არაბულ" + + "ისაურაშტრაჟესტთაშარადაქუდავადისინჰალურისორან-სომპენისუნდანურისილოტი ნა" + + "გრისირიულისირიული ესტრანგელოდასავლეთი სირიულიაღმოსავლეთი სირიულიტაგბან" + + "ვატაკრიტაი ლეახალი ტაი ლიუტამილურიტანღუტურიტაი-ვიეტიტელუგუტენგვარიტიფი" + + "ნაღითაანატაიტიბეტურიტირჰუტაუგარითულივაიხილული მეტყველებავარანგ-კშიტივო" + + "ლეაიძველი სპარსულიშუმერულ-აქადური ლურსმნულიგადაღებულიმათემატიკური ნოტა" + + "ციაEmojiსიმბოლოებიუმწერლობოზოგადიუცნობი დამწერლობა" + +var kaScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000f, 0x000f, 0x000f, 0x0024, 0x0058, 0x006d, + 0x0085, 0x009a, 0x00ac, 0x00c5, 0x00d7, 0x00f2, 0x00f2, 0x011c, + 0x0134, 0x0146, 0x0158, 0x0158, 0x016a, 0x0179, 0x0179, 0x018e, + 0x019a, 0x01ac, 0x01bb, 0x01d0, 0x01ee, 0x0206, 0x0244, 0x0262, + 0x027d, 0x02b4, 0x02ee, 0x0328, 0x0365, 0x0365, 0x0380, 0x0392, + 0x03a7, 0x03c2, 0x03d4, 0x03e6, 0x03fe, 0x041c, 0x0431, 0x0440, + 0x0455, 0x0461, 0x0476, 0x04aa, 0x04d5, 0x04d5, 0x04ea, 0x0502, + 0x0542, 0x055e, 0x0583, 0x05a8, 0x05a8, 0x05a8, 0x05b4, 0x05c6, + // Entry 40 - 7F + 0x05de, 0x05f9, 0x060f, 0x0627, 0x063c, 0x0651, 0x0660, 0x0672, + 0x0687, 0x0696, 0x06a5, 0x06a5, 0x06ba, 0x06ba, 0x06e5, 0x06fd, + 0x06fd, 0x070c, 0x0726, 0x0740, 0x0740, 0x074c, 0x0761, 0x0776, + 0x0776, 0x078e, 0x07a9, 0x07a9, 0x07da, 0x07e9, 0x081a, 0x0835, + 0x0859, 0x0859, 0x0874, 0x0874, 0x087d, 0x087d, 0x087d, 0x0895, + 0x08d3, 0x08ee, 0x08ee, 0x08ee, 0x08f7, 0x0903, 0x0912, 0x0925, + 0x093d, 0x0949, 0x0949, 0x095e, 0x0979, 0x0979, 0x099e, 0x09b0, + 0x09e7, 0x0a1b, 0x0a46, 0x0a61, 0x0a61, 0x0a98, 0x0aad, 0x0acb, + // Entry 80 - BF + 0x0add, 0x0af8, 0x0b0a, 0x0b45, 0x0b60, 0x0b72, 0x0b72, 0x0b84, + 0x0b84, 0x0b9c, 0x0bb7, 0x0bdc, 0x0bf7, 0x0c19, 0x0c2e, 0x0c62, + 0x0c93, 0x0cca, 0x0ce2, 0x0cf1, 0x0d01, 0x0d24, 0x0d3c, 0x0d57, + 0x0d70, 0x0d82, 0x0d9a, 0x0db2, 0x0db2, 0x0dc1, 0x0dca, 0x0de2, + 0x0df7, 0x0e12, 0x0e1b, 0x0e4c, 0x0e6e, 0x0e80, 0x0ea8, 0x0eef, + 0x0eef, 0x0f0d, 0x0f47, 0x0f4c, 0x0f6a, 0x0f85, 0x0f97, 0x0fc8, +} // Size: 376 bytes + +const kkScriptStr string = "" + // Size: 1036 bytes + "араб жазуыармян жазуыбенгал жазуыбопомофо жазуБрайль жазуыкирилл жазуыде" + + "ванагари жазуыэфиоп жазугрузин жазуыгрек жазуыгуджарати жазуыгурмукхи ж" + + "азуыханб жазуыхангыл жазуықытай жазуыжеңілдетілген қытай иероглифыдәстү" + + "рлі қытай иероглифыиврит жазуыхирагана жазуыжапон силлабарийічамо жазуы" + + "жапон жазуыкатакана жазуыкхмер жазуыканнада жазуыкорей жазуылаос жазуыл" + + "атын жазуымалаялам жазуымоңғол жазуымьянма жазуыория жазуысингаль жазуы" + + "тамиль жазуытелугу жазуытаана жазуытай жазуытибет жазуыматематикалық жа" + + "зуэмодзитаңбаларжазусызжалпыбелгісіз жазу" + +var kkScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0013, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x003f, 0x003f, 0x003f, + 0x0058, 0x0058, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x0086, 0x0086, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00b8, 0x00b8, + 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00e2, 0x00ff, 0x011a, 0x012d, + 0x0144, 0x0159, 0x0159, 0x0191, 0x01bf, 0x01bf, 0x01d4, 0x01ef, + 0x01ef, 0x01ef, 0x0210, 0x0210, 0x0210, 0x0210, 0x0223, 0x0223, + // Entry 40 - 7F + 0x0238, 0x0238, 0x0238, 0x0253, 0x0253, 0x0268, 0x0268, 0x0281, + 0x0296, 0x0296, 0x0296, 0x0296, 0x02a9, 0x02a9, 0x02a9, 0x02be, + 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, + 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, + 0x02d9, 0x02d9, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x0307, + 0x0307, 0x0307, 0x0307, 0x0307, 0x0307, 0x0307, 0x0307, 0x0307, + 0x0307, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, + 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, + // Entry 80 - BF + 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, + 0x031a, 0x031a, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, + 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x034a, 0x034a, + 0x034a, 0x0361, 0x0361, 0x0361, 0x0361, 0x0376, 0x0387, 0x039c, + 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, + 0x039c, 0x039c, 0x03bf, 0x03cb, 0x03db, 0x03e9, 0x03f3, 0x040c, +} // Size: 376 bytes + +const kmScriptStr string = "" + // Size: 1140 bytes + "អារ៉ាប់អាមេនីបង់ក្លាដែសបូផូម៉ូហ្វូអក្សរ\u200bសម្រាប់មនុស្ស\u200bពិការ" + + "\u200bភ្នែកស៊ីរីលីកដាវ៉ាន់ណាការិអេត្យូពីហ្សកហ្ស៊ីក្រិចគូចារ៉ាទីកុមុយឃីហា" + + "នប៍ហាំងកុលហានអក្សរ\u200bហាន\u200bកាត់អក្សរ\u200bហាន\u200bពេញអ៊ីស្រាអែល" + + "ហ៊ីរ៉ាកាណាសញ្ញាសំឡេងភាសាជប៉ុនចាម៉ូជប៉ុនកាតាកាណាខ្មែរខាណាដាកូរ៉េឡាវឡាតា" + + "ំងមលយាល័មម៉ុងហ្គោលីភូមាអូឌៀស៊ីនហាឡាតាមីលតេលុគុថាណាថៃទីបេនិមិត្តសញ្ញាគណ" + + "ិតវិទ្យាសញ្ញាអារម្មណ៍និមិត្តសញ្ញាគ្មានការសរសេរទូទៅអក្សរមិនស្គាល់" + +var kmScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0015, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0045, 0x0045, 0x0045, + 0x0066, 0x0066, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00db, 0x00db, 0x0102, + 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x011a, 0x011a, + 0x0135, 0x0135, 0x0135, 0x0135, 0x0144, 0x015f, 0x0174, 0x0183, + 0x0198, 0x01a1, 0x01a1, 0x01cb, 0x01f2, 0x01f2, 0x0210, 0x022e, + 0x022e, 0x022e, 0x0267, 0x0267, 0x0267, 0x0267, 0x0276, 0x0276, + // Entry 40 - 7F + 0x0285, 0x0285, 0x0285, 0x029d, 0x029d, 0x02ac, 0x02ac, 0x02be, + 0x02cd, 0x02cd, 0x02cd, 0x02cd, 0x02d6, 0x02d6, 0x02d6, 0x02e8, + 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, + 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, + 0x02fd, 0x02fd, 0x031b, 0x031b, 0x031b, 0x031b, 0x031b, 0x0327, + 0x0327, 0x0327, 0x0327, 0x0327, 0x0327, 0x0327, 0x0327, 0x0327, + 0x0327, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, + 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, + // Entry 80 - BF + 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, + 0x0333, 0x0333, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, + 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x035a, 0x035a, + 0x035a, 0x036c, 0x036c, 0x036c, 0x036c, 0x0378, 0x037e, 0x038a, + 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, + 0x038a, 0x038a, 0x03cc, 0x03f3, 0x0417, 0x043e, 0x044a, 0x0474, +} // Size: 376 bytes + +const knScriptStr string = "" + // Size: 3811 bytes + "ಅರೇಬಿಕ್ಇಂಪೀರಿಯಲ್ ಅರೆಮಾಯಿಕ್ಅರ್ಮೇನಿಯನ್ಅವೆಸ್ತಾನ್ಬಾಲಿನೀಸ್ಬಾಟಕ್ಬೆಂಗಾಲಿಬ್ಲಿಸ್" + + "\u200cಸಿಂಬಲ್ಸ್ಬೋಪೊಮೋಫೋಬ್ರಾಹ್ಮಿಬ್ರೈಲ್ಬಗಿನೀಸ್ಬುಹಿದ್ಕಾಕಂಯುನಿಟೆಡ್ ಕೆನೆಡಿಯನ್ " + + "ಅಬೊರಿಜಿನಲ್ ಸಿಲ್ಯಾಬಿಕ್ಸ್ಕರೇನ್ಚಾಮ್ಚೆರೋಕೀಸಿರ್ಥ್ಕಾಪ್ಟಿಕ್ಸಿಪ್ರಿಯಾಟ್ಸಿರಿಲಿಕ್" + + "ಪ್ರಾಚೀನ ಚರ್ಚ್ ಸ್ಲೋವಾನಿಕ್ ಸಿರಿಲಿಕ್ದೇವನಾಗರಿಡಸರ್ಟ್ಈಜಿಪ್ಟಿಯನ್ ಡೆಮೋಟಿಕ್ಈಜಿಪ" + + "್ಟಿಯನ್ ಹಯಾರಿಟಿಕ್ಈಜಿಪ್ಟಿಯನ್ ಹೀರೋಗ್ಲಿಫ್ಸ್ಇಥಿಯೋಪಿಕ್ಜಾರ್ಜಿಯನ್ ಖುಸ್ತುರಿಜಾರ್" + + "ಜಿಯನ್ಗ್ಲಾಗೋಲಿಟಿಕ್ಗೋತಿಕ್ಗ್ರೀಕ್ಗುಜರಾತಿಗುರ್ಮುಖಿಹಂಬ್ಹ್ಯಾಂಗುಲ್ಹಾನ್ಹನೂನೂಸರಳೀ" + + "ಕೃತ ಹಾನ್ಸಾಂಪ್ರದಾಯಿಕ ಹಾನ್ಹೀಬ್ರೂಹಿರಾಗನಪಹವ್ ಹ್ಮೋಂಗ್ಜಪಾನೀಸ್ ಸಿಲಬರೀಸ್ಪ್ರಾಚೀ" + + "ನ ಹಂಗೇರಿಯನ್ಸಿಂಧೂಪ್ರಾಚೀನ್ ಇಟಾಲಿಕ್ಜಮೋಜಾವನೀಸ್ಜಾಪನೀಸ್ಕೆಯಾ ಲಿಕಟಕಾನಾಖರೋಶ್ತಿಖ" + + "ಮೇರ್ಕನ್ನಡಕೊರಿಯನ್ಕೈಥಿಲಾನಾಲಾವೋಫ್ರಾಕ್ತರ್ ಲ್ಯಾಟಿನ್ಗೇಲಿಕ್ ಲ್ಯಾಟಿನ್ಲ್ಯಾಟಿನ್ಲ" + + "ೆಪ್ಚಾಲಿಂಬುಲೀನಯರ್ ಎಲೀನಯರ್ ಬಿಲೈಸಿಯನ್ಲಿಡಿಯನ್ಮಂಡೇಯನ್ಮನಿಚೈಯನ್ಮಯಾನ್ ಹೀರೋಗ್ಲಿ" + + "ಫ್ಸ್ಮೆರೊಯಿಟಿಕ್ಮಲಯಾಳಂಮಂಗೋಲಿಯನ್ಮೂನ್ಮೈತಿ ಮಯೆಕ್ಮ್ಯಾನ್ಮಾರ್ಎನ್\u200dಕೋಓಘಮ್ಓಲ" + + "್ ಚಿಕಿಓರ್ಖೋನ್ಒರಿಯಾಓಸ್ಮಾನ್ಯಾಪ್ರಾಚೀನ ಪೆರ್ಮಿಕ್ಫಾಗ್ಸ್-ಪಾಇನ್ಸ್\u200cಕ್ರಿಪ್ಶ" + + "ನಲ್ ಪಾಹ್ಲವಿಸಾಲ್ಟರ್ ಪಾಹ್ಲವಿಬುಕ್ ಪಾಹ್ಲವಿಫೀನಿಶಿಯನ್ಪೊಲ್ಲಾರ್ಡ್ ಫೊನೆಟಿಕ್ಇನ್ಸ" + + "್\u200cಕ್ರಿಪ್ಶನಲ್ ಪಾರ್ಥಿಯನ್ರೆಜಾಂಗ್ರೋಂಗೋರೋಂಗೋರೂನಿಕ್ಸಮಾರಿಟನ್ಸರಾಟಿಸೌರಾಷ್ಟ" + + "್ರಸೈನ್\u200cರೈಟಿಂಗ್ಶಾವಿಯಾನ್ಸಿಂಹಳಸುಂಡಾನೀಸ್ಸೈಲೋಟಿ ನಗ್ರಿಸಿರಿಯಾಕ್ಎಸ್ಟ್ರಾಂಜ" + + "ಿಲೋ ಸಿರಿಯಾಕ್ಪಶ್ಚಿಮ ಸಿರಿಯಾಕ್ಪೂರ್ವ ಸಿರಿಯಾಕ್ಟಾಗ್ಬಾನವಾಥಾಯ್ ಲಿನ್ಯೂ ಥಾಯ್ ಲುಇ" + + "ತಮಿಳುಥಾಯ್ ವಿಯೆಟ್ತೆಲುಗುತೆಂಗ್\u200cವಾರ್ಟಿಫಿನಾಘ್ಟ್ಯಾಗಲೋಗ್ಥಾನಾಥಾಯ್ಟಿಬೇಟನ್ಉ" + + "ಗಾರಿಟಿಕ್ವಾಯ್ವಿಸಿಬಲ್ ಸ್ಪೀಚ್ಪ್ರಾಚೀನ ಪರ್ಶಿಯನ್ಸುಮೇರೋ-ಅಕ್ಕಾಡಿಯನ್ ಕ್ಯೂನಿಫಾರ್" + + "ಮ್ಯಿಇನ್\u200dಹೆರಿಟೆಡ್ಗಣೀತ ಸಂಕೇತಲಿಪಿಎಮೋಜಿಸಂಕೇತಗಳುಅಲಿಖಿತಸಾಮಾನ್ಯಅಪರಿಚಿತ ಲ" + + "ಿಪಿ" + +var knScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x004c, 0x006a, + 0x0085, 0x009d, 0x009d, 0x009d, 0x00ac, 0x00c1, 0x00c1, 0x00ee, + 0x0106, 0x011e, 0x0130, 0x0145, 0x0157, 0x0163, 0x01db, 0x01ea, + 0x01f6, 0x0208, 0x021a, 0x0232, 0x0250, 0x0268, 0x02c5, 0x02dd, + 0x02ef, 0x02ef, 0x0326, 0x0360, 0x03a3, 0x03a3, 0x03be, 0x03f2, + 0x040d, 0x0431, 0x0443, 0x0443, 0x0455, 0x046a, 0x0482, 0x048e, + 0x04a9, 0x04b5, 0x04c4, 0x04e6, 0x0514, 0x0514, 0x0526, 0x0538, + 0x0538, 0x055a, 0x0588, 0x05b9, 0x05c8, 0x05f6, 0x05ff, 0x0614, + // Entry 40 - 7F + 0x0629, 0x0629, 0x063c, 0x064e, 0x0663, 0x0672, 0x0672, 0x0681, + 0x0696, 0x0696, 0x06a2, 0x06ae, 0x06ba, 0x06ee, 0x0719, 0x0731, + 0x0743, 0x0752, 0x0768, 0x0781, 0x0781, 0x0781, 0x0796, 0x07ab, + 0x07ab, 0x07c0, 0x07d8, 0x07d8, 0x080c, 0x080c, 0x080c, 0x082a, + 0x083c, 0x083c, 0x0857, 0x0863, 0x0863, 0x087f, 0x087f, 0x089d, + 0x089d, 0x089d, 0x089d, 0x089d, 0x08af, 0x08af, 0x08bb, 0x08d1, + 0x08e6, 0x08f5, 0x08f5, 0x0910, 0x0910, 0x0910, 0x093e, 0x0957, + 0x099d, 0x09c8, 0x09ea, 0x0a05, 0x0a3c, 0x0a88, 0x0a9d, 0x0abb, + // Entry 80 - BF + 0x0acd, 0x0ae5, 0x0af4, 0x0af4, 0x0b0f, 0x0b33, 0x0b4b, 0x0b4b, + 0x0b4b, 0x0b4b, 0x0b5a, 0x0b5a, 0x0b75, 0x0b97, 0x0baf, 0x0bec, + 0x0c17, 0x0c3f, 0x0c5a, 0x0c5a, 0x0c6d, 0x0c90, 0x0c9f, 0x0c9f, + 0x0cbe, 0x0cd0, 0x0cee, 0x0d06, 0x0d21, 0x0d2d, 0x0d39, 0x0d4e, + 0x0d4e, 0x0d69, 0x0d75, 0x0d9d, 0x0d9d, 0x0d9d, 0x0dcb, 0x0e21, + 0x0e27, 0x0e4b, 0x0e73, 0x0e82, 0x0e9a, 0x0eac, 0x0ec1, 0x0ee3, +} // Size: 376 bytes + +const koScriptStr string = "" + // Size: 2803 bytes + "아파카 문자코카시안 알바니아 문자아랍 문자아랍제국 문자아르메니아 문자아베스타 문자발리 문자바뭄 문자바사바흐 문자바타크 문자벵골 문" + + "자블리스기호 문자주음부호브라미브라유 점자부기 문자부히드 문자차크마 문자통합 캐나다 토착어카리 문자칸 고어체로키 문자키르쓰콥트 " + + "문자키프로스 문자키릴 문자고대교회슬라브어 키릴문자데바나가리 문자디저렛 문자듀플로이안 문자고대 이집트 민중문자고대 이집트 신관문" + + "자고대 이집트 신성문자엘바산 문자에티오피아 문자그루지야 쿠츠리 문자조지아 문자글라골 문자고트 문자그란타 문자그리스 문자구자라트" + + " 문자구르무키 문자주음 자모한글한자하누누 문자한자 간체한자 번체히브리 문자히라가나아나톨리아 상형문자파하우 몽 문자가나고대 헝가리 " + + "문자인더스 문자고대 이탈리아 문자자모자바 문자일본 문자줄첸 문자카야 리 문자가타카나카로슈티 문자크메르 문자코즈키 문자칸나다 문" + + "자한국어크펠레 문자카이시 문자란나 문자라오 문자독일식 로마자아일랜드식 로마자로마자렙차 문자림부 문자선형 문자(A)선형 문자(B" + + ")프레이저 문자로마 문자리키아 문자리디아 문자마하자니 문자만다이아 문자마니교 문자마야 상형 문자멘데 문자메로에 필기체메로에 문자말" + + "라얄람 문자몽골 문자문 문자므로 문자메이테이 마옉 문자미얀마 문자옛 북부 아라비아 문자나바테아 문자나시 게바 문자응코 문자누슈" + + " 문자오검 문자올 치키 문자오르혼어오리야 문자오스마니아 문자팔미라 문자고대 페름 문자파스파 문자명문 팔라비 문자솔터 팔라비 문자북" + + " 팔라비 문자페니키아 문자폴라드 표음 문자명문 파라티아 문자레장 문자롱고롱고룬 문자사마리아 문자사라티옛 남부 아라비아 문자사우라슈" + + "트라 문자수화 문자샤비안 문자사라다 문자실담자쿠다와디 문자신할라 문자소라 솜펭 문자순다 문자실헤티 나가리시리아 문자에스트랑겔로" + + "식 시리아 문자서부 시리아 문자동부 시리아 문자타그반와 문자타크리 문자타이 레 문자신 타이 루에타밀 문자탕구트 문자태국 베트남" + + " 문자텔루구 문자텡과르 문자티피나그 문자타갈로그 문자타나 문자타이 문자티베트 문자티르후타 문자우가리트 문자바이 문자시화법바랑 크시" + + "티 문자울레아이고대 페르시아 문자수메르-아카드어 설형문자이 문자구전 문자수학 기호이모티콘기호구전일반 문자알 수 없는 문자" + +var koScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0010, 0x0030, 0x0030, 0x003d, 0x0050, 0x0066, + 0x0079, 0x0086, 0x0093, 0x00a6, 0x00b6, 0x00c3, 0x00c3, 0x00d9, + 0x00e5, 0x00ee, 0x00fe, 0x010b, 0x011b, 0x012b, 0x0145, 0x0152, + 0x015c, 0x016c, 0x0175, 0x0182, 0x0195, 0x01a2, 0x01c7, 0x01dd, + 0x01ed, 0x0203, 0x0220, 0x023d, 0x025a, 0x026a, 0x0280, 0x029d, + 0x02ad, 0x02bd, 0x02ca, 0x02da, 0x02ea, 0x02fd, 0x0310, 0x031d, + 0x0323, 0x0329, 0x0339, 0x0346, 0x0353, 0x0353, 0x0363, 0x036f, + 0x038b, 0x039f, 0x03a5, 0x03bc, 0x03cc, 0x03e6, 0x03ec, 0x03f9, + // Entry 40 - 7F + 0x0406, 0x0413, 0x0424, 0x0430, 0x0443, 0x0453, 0x0463, 0x0473, + 0x047c, 0x048c, 0x049c, 0x04a9, 0x04b6, 0x04c9, 0x04e2, 0x04eb, + 0x04f8, 0x0505, 0x0515, 0x0525, 0x0538, 0x0545, 0x0555, 0x0565, + 0x0578, 0x058b, 0x059b, 0x059b, 0x05af, 0x05bc, 0x05cf, 0x05df, + 0x05f2, 0x05f2, 0x05ff, 0x0609, 0x0616, 0x0630, 0x0630, 0x0640, + 0x065e, 0x0671, 0x0671, 0x0685, 0x0692, 0x069f, 0x06ac, 0x06bd, + 0x06c9, 0x06d9, 0x06d9, 0x06ef, 0x06ff, 0x06ff, 0x0713, 0x0723, + 0x073a, 0x0751, 0x0765, 0x0778, 0x078f, 0x07a9, 0x07b6, 0x07c2, + // Entry 80 - BF + 0x07cc, 0x07df, 0x07e8, 0x0806, 0x081f, 0x082c, 0x083c, 0x084c, + 0x0855, 0x0868, 0x0878, 0x088c, 0x0899, 0x08ac, 0x08bc, 0x08e2, + 0x08f9, 0x0910, 0x0923, 0x0933, 0x0944, 0x0955, 0x0962, 0x0972, + 0x0989, 0x0999, 0x09a9, 0x09bc, 0x09cf, 0x09dc, 0x09e9, 0x09f9, + 0x0a0c, 0x0a1f, 0x0a2c, 0x0a35, 0x0a4c, 0x0a58, 0x0a72, 0x0a95, + 0x0a9f, 0x0aac, 0x0ab9, 0x0ac5, 0x0acb, 0x0ad1, 0x0ade, 0x0af3, +} // Size: 376 bytes + +const kyScriptStr string = "" + // Size: 608 bytes + "АрабАрмянБенгалБопомофоБрейлКириллДеванагариЭфиопГрузинГрекГужаратиГурму" + + "хиХанбХангулХаньЖөнөк. ХаньСалттуу ХаньИвритХираганаЖапон силлабография" + + "сыДжамоЖапанКатаканаКмерКаннадаКорейЛаоЛатынМалайаламМонголМйанмарОрийа" + + "СингалаТамилТелуТаанаТайТибетМатематикалык мааниБыйтыкчаБелгилерЖазылба" + + "ганЖалпыБелгисиз жазуу" + +var kyScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001e, 0x001e, 0x001e, + 0x002e, 0x002e, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0044, 0x0044, 0x0058, + 0x0058, 0x0058, 0x0058, 0x0058, 0x0058, 0x0058, 0x0062, 0x0062, + 0x006e, 0x006e, 0x006e, 0x006e, 0x0076, 0x0086, 0x0094, 0x009c, + 0x00a8, 0x00b0, 0x00b0, 0x00c4, 0x00db, 0x00db, 0x00e5, 0x00f5, + 0x00f5, 0x00f5, 0x011e, 0x011e, 0x011e, 0x011e, 0x0128, 0x0128, + // Entry 40 - 7F + 0x0132, 0x0132, 0x0132, 0x0142, 0x0142, 0x014a, 0x014a, 0x0158, + 0x0162, 0x0162, 0x0162, 0x0162, 0x0168, 0x0168, 0x0168, 0x0172, + 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, + 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, + 0x0184, 0x0184, 0x0190, 0x0190, 0x0190, 0x0190, 0x0190, 0x019e, + 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, + 0x019e, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + // Entry 80 - BF + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x01a8, 0x01a8, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01c0, 0x01c0, + 0x01c0, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01d2, 0x01d8, 0x01e2, + 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, + 0x01e2, 0x01e2, 0x0207, 0x0217, 0x0227, 0x023b, 0x0245, 0x0260, +} // Size: 376 bytes + +const loScriptStr string = "" + // Size: 3937 bytes + "ອັບຟາກາອາຣາບິກອິມພີຮຽນ ອາເມອິກອາເມນຽນອະເວສຕະບາລີບາມູມບັດຊາບາຕັກເບັງກາບລິ" + + "ກຊິມໂບລສຈູ້ອິນພຮາຫມີເບຣວບູກິສບູຮິດຊາກມາສັນຍາລັກຊົນເຜົ່າພື້ນເມືອງແຄນນາດ" + + "າຄາເຮຍຈາມເຊໂຮກີເຊີຮຄອບຕິກໄຊເປຍຊີຣິວລິກເຊຮັດສລາ ໂວນິກຊີຮິກລິກໂບຮານດີວານ" + + "າກາຣີເດເຊເຮຊົວເລດັບໂລຍັນດີໂມຕິກອີຍິບເຮຍຮາຕິກອີຍິບເຮຍໂຮກລິຟອີຍິບອີທິໂອປ" + + "ິກຄອດຊູຮີຈໍເຈຍຈໍຈຽນກລາໂກລິຕິກໂກຮິກເຄນທາກຣີກຈູຈາຣາທີກົວມູຄີຮັນຮັນກູນຮານ" + + "ຮານູໂນໂອຈີນ (ແບບງ່າຍ)ຈີນ (ດັ້ງເດີມ)ຮີບຣິວຣິຣະງະນະອັກລຮະອານາໂຕເລຍປາເຮາເ" + + "ມັງຕາຕາລາງພະຍາງພາສາຍີ່ປຸ່ນຮັງກາຮີໂບຮານອິນດັດອີຕາລີໂບຮານຈາໂມຈາວາຍີ່ປຸ່ນ" + + "ຈູຮເຊັນຄຍາຄະຕະກະນະຂໍໂຮກສີຂະແມຄໍຈຄີຄັນນາດາເກົາຫຼີເປລເລກາຍຕິລ້ານນາລາວລາຕ" + + "ິນ-ຟຮັ່ງເຕຣລາຕິນ-ແກລິກລາຕິນເລຊາລິມບູລີເນຍລີເນຍຣເຟຣເຊຮໂລມາໄລເຊຍລີເດຍແມນ" + + "ດຽນມານິແຊນມາຍາໄຮໂຮກລິບເມນເດເຄເລີຊີເມໂຮອິຕິກເມໂຮຕິກມາເລຢາລາມມົງໂກນມູນເມ" + + "ໂຮເມເທມາເຍກມຽນມາອາຮະເບຍເໜືອໂບຮານນາບາທາທຽນກີບາ-ນາຊີເອັນໂກນຸຊຸອອກຄອນໂອຊິ" + + "ກິອອກສມັນຍາໂອເດຍພາລໄມຮິນເພີມີໂບຮານຟາກສ-ປາປະຫລາວີອິນສຄິບຊັນແນລປະຫລາວີຊອ" + + "ດເຕຮ໌ປະຫລາວີບຸກຟີນິເຊຍສັດຕະສາດພໍຮລາພາຮ໌ເທຍອິນສຄຮິປຊັນແນລເຮຈັງຮອງໂກຮອງໂ" + + "ກຮູນິກຊາມາເລຍຊາຮາຕິອາລະເບຍໃຕ້ໂບຮານໂສຮັດຕຣະໄຊນ໌ໄຮຕີ້ງຊອວຽນຊາຮາດາດຸດາວາດ" + + "ີສິນຫາລາໂສຮາສົມເປັງຊຸນດາຊີໂລຕິນາກຣີຊີເຮຍຊີເຮຍເອສທຮານຈີໂລຊີເຮຍຕາເວັນຕົກ" + + "ຊີເຮຍຕາເວັນອອກຕັກບັນວາທາຄຮີໄທເລໄທລື້ໃໝ່ທາມິລຕັນກັນໄທຫວຽດເທລູກູເທງກວາຮທ" + + "ີຟີນາກຕາກາລອກທານາໄທທິເບທັນເທຮຸທາຍູກາຮິດໄວຄຳເວົ້າທີ່ເບີ່ງເຫັນໄດ້ວາຮັງກສ" + + "ິຕິໂອລີເອເປຮເຊຍໂບຮານອັກສອນຮູບປລີ່ມສຸເມເຮຍ-ອັດຄາເດຍຍີອິນເຮຮິດເຄື່ອງໝາຍທ" + + "າງຄະນິດສາດອີໂມຈິສັນຍາລັກບໍ່ມີພາສາຂຽນສາມັນແບບຂຽນທີ່ບໍ່ຮູ້ຈັກ" + +var loScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0015, 0x0015, 0x0015, 0x002a, 0x0058, 0x006d, + 0x0082, 0x008e, 0x009d, 0x00ac, 0x00bb, 0x00cd, 0x00cd, 0x00ee, + 0x0100, 0x0112, 0x011e, 0x012d, 0x013c, 0x014b, 0x01ab, 0x01ba, + 0x01c3, 0x01d5, 0x01e1, 0x01f3, 0x0202, 0x021a, 0x0269, 0x0287, + 0x0299, 0x02c0, 0x02e4, 0x030b, 0x0335, 0x0335, 0x0350, 0x0374, + 0x0383, 0x03a1, 0x03b0, 0x03bf, 0x03cb, 0x03e3, 0x03f8, 0x0401, + 0x0413, 0x041c, 0x0434, 0x0455, 0x0479, 0x0479, 0x048b, 0x04a3, + 0x04d0, 0x04eb, 0x0530, 0x0554, 0x0566, 0x0587, 0x0593, 0x059f, + // Entry 40 - 7F + 0x05b4, 0x05c9, 0x05d2, 0x05ea, 0x05ff, 0x060b, 0x061a, 0x062f, + 0x0644, 0x0653, 0x0662, 0x0674, 0x067d, 0x06a5, 0x06c4, 0x06d3, + 0x06df, 0x06ee, 0x06fd, 0x070f, 0x0721, 0x072d, 0x073c, 0x074b, + 0x074b, 0x075d, 0x0772, 0x0772, 0x0796, 0x07a5, 0x07d5, 0x07ea, + 0x0805, 0x0805, 0x0817, 0x0820, 0x082c, 0x0847, 0x0847, 0x0856, + 0x0886, 0x08a1, 0x08a1, 0x08ba, 0x08cc, 0x08d8, 0x08ea, 0x08fc, + 0x0917, 0x0926, 0x0926, 0x0926, 0x093e, 0x093e, 0x095c, 0x096f, + 0x09ab, 0x09d5, 0x09f3, 0x0a08, 0x0a2f, 0x0a6e, 0x0a7d, 0x0a9b, + // Entry 80 - BF + 0x0aaa, 0x0abf, 0x0ad1, 0x0afe, 0x0b16, 0x0b34, 0x0b43, 0x0b55, + 0x0b55, 0x0b6d, 0x0b82, 0x0ba3, 0x0bb2, 0x0bd3, 0x0be2, 0x0c12, + 0x0c3c, 0x0c66, 0x0c7e, 0x0c8d, 0x0c99, 0x0cb1, 0x0cc0, 0x0cd2, + 0x0ce4, 0x0cf6, 0x0d0b, 0x0d20, 0x0d35, 0x0d41, 0x0d47, 0x0d5c, + 0x0d6e, 0x0d83, 0x0d89, 0x0dcb, 0x0de9, 0x0dfb, 0x0e1c, 0x0e74, + 0x0e7a, 0x0e92, 0x0ece, 0x0ee0, 0x0ef8, 0x0f1c, 0x0f2b, 0x0f61, +} // Size: 376 bytes + +const ltScriptStr string = "" + // Size: 1663 bytes + "AfakaKaukazo Albanijosarabųimperinė aramaikųarmėnųavestanoBaliečiųBamumB" + + "assa Vahbatakbengalų„Bliss“ simboliaibopomofobrahmibrailiobuginezųbuhidč" + + "akmasuvienodinti Kanados aborigenų silabiniaikariųčamčerokiųkirtkoptųkip" + + "rokirilicasenoji bažnytinė slavų kirilicadevanagarideseretasDuplojė sten" + + "ografijaEgipto liaudiesEgipto žyniųegipto hieroglifaiElbasanoetiopųgruzi" + + "nų kutsurigruzinųglagolitikgotųGrantagraikųgudžaratųgurmukihanbųhangulha" + + "nhanunosupaprastinti hantradiciniai hanhebrajųhiraganaAnatolijaus hierog" + + "lifaipahav hmongkatakana / hiraganasenasis vengrųindussenasis italųJamo " + + "simboliaijaviečiųjaponųJurchenkajah likatakanakaroštikhmerųKhojkikanadųk" + + "orėjiečiųKpelųkaithilanalaosiečiųfraktur lotynųgėlų lotynųlotynųlepčalim" + + "bulinijiniai Alinijiniai BFraserLomalicianlidianMahadžanimandėjųmaničųma" + + "lų hieroglifaiMendeMerojitų rankraštinismeroitikmalajaliųModimongolųmūnM" + + "romeitei majekbirmiečiųSenasis šiaurės arabųNabatėjųNaxi GebaenkoNüshuog" + + "hamol čikiorkonorijųosmanųPalmirosPau Cin Hausenieji permėspagsa parašyt" + + "iniai pahlavipselter pahlavibuk pahvalifoenikųpolard fonetinėrašytiniai " + + "partųrejangrongorongorunųsamariečiųsaratisenoji pietų Arabijossauraštraž" + + "enklų raštasšaviųŠaradosSiddhamKhudawadisinhalųSora Sompengsundųsyloti n" + + "agrisirųestrangelo siriečiųvakarų sirųrytų sirųtagbanvaTakritai lenaujas" + + "is Tailando luetamilųTanguttai vettelugųtengvartifinagtagalogųhanatajųti" + + "betiečiųTirhutaugaritikvaimatoma kalbaVarang KshitiWoleaisenieji persųŠu" + + "mero Akado dantiraštisjipaveldėtasmatematiniai simboliaijaustukaisimboli" + + "ųneparašytabendrinežinomi rašmenys" + +var ltScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0016, 0x0016, 0x001c, 0x002f, 0x0037, + 0x003f, 0x0049, 0x004e, 0x0057, 0x005c, 0x0064, 0x0064, 0x0079, + 0x0081, 0x0087, 0x008e, 0x0097, 0x009c, 0x00a2, 0x00cc, 0x00d2, + 0x00d6, 0x00df, 0x00e3, 0x00e9, 0x00ee, 0x00f6, 0x0118, 0x0122, + 0x012b, 0x0140, 0x014f, 0x015d, 0x016f, 0x0177, 0x017e, 0x018e, + 0x0196, 0x01a0, 0x01a5, 0x01ab, 0x01b2, 0x01bd, 0x01c4, 0x01ca, + 0x01d0, 0x01d3, 0x01d9, 0x01ea, 0x01f9, 0x01f9, 0x0201, 0x0209, + 0x0220, 0x022b, 0x023e, 0x024d, 0x0252, 0x0260, 0x026e, 0x0278, + // Entry 40 - 7F + 0x027f, 0x0286, 0x028e, 0x0296, 0x029e, 0x02a5, 0x02ab, 0x02b2, + 0x02bf, 0x02c5, 0x02cb, 0x02cf, 0x02da, 0x02e9, 0x02f7, 0x02fe, + 0x0304, 0x0309, 0x0315, 0x0321, 0x0327, 0x032b, 0x0331, 0x0337, + 0x0341, 0x034a, 0x0352, 0x0352, 0x0363, 0x0368, 0x037f, 0x0387, + 0x0391, 0x0395, 0x039d, 0x03a1, 0x03a4, 0x03b0, 0x03b0, 0x03bb, + 0x03d3, 0x03dd, 0x03dd, 0x03e6, 0x03ea, 0x03f0, 0x03f5, 0x03fd, + 0x0402, 0x0408, 0x0408, 0x040f, 0x0417, 0x0422, 0x0431, 0x0439, + 0x044c, 0x045b, 0x0466, 0x046e, 0x047e, 0x0490, 0x0496, 0x04a0, + // Entry 80 - BF + 0x04a5, 0x04b1, 0x04b7, 0x04cd, 0x04d7, 0x04e7, 0x04ee, 0x04f6, + 0x04fd, 0x0506, 0x050e, 0x051a, 0x0520, 0x052c, 0x0531, 0x0546, + 0x0553, 0x055e, 0x0566, 0x056b, 0x0571, 0x0586, 0x058d, 0x0593, + 0x059a, 0x05a1, 0x05a8, 0x05af, 0x05b8, 0x05bc, 0x05c1, 0x05cd, + 0x05d4, 0x05dc, 0x05df, 0x05eb, 0x05f8, 0x05fe, 0x060c, 0x0626, + 0x0628, 0x0633, 0x0649, 0x0652, 0x065b, 0x0666, 0x066c, 0x067f, +} // Size: 376 bytes + +const lvScriptStr string = "" + // Size: 794 bytes + "arābuaramiešuarmēņubaliešubengāļubopomofobrahmiBraila rakstsirokēzukoptu" + + "kirilicasenslāvudevānagāridemotiskais rakstshierātiskais rakstsēģiptiešu" + + " hieroglifietiopiešugruzīnugotugrieķugudžaratupandžabuķīniešu hanbhangil" + + "aķīniešuhanu vienkāršotāhanu tradicionālāivritshiraganakatakana vai hira" + + "ganasenungāruvecitāļudžamojaviešujapāņukatakanakhmerukannadukorejiešulao" + + "siešulatīņulineārā Alineārā BlīdiešumaijumalajalumongoļuMūna rakstsbirmi" + + "ešuogamiskais rakstsorijuosmaņu turkufeniķiešurongorongorūnu rakstssamar" + + "iešusingāļuzundusīriešurietumsīriešuaustrumsīriešutamilutelugutagalutaan" + + "atajutibetiešusenperiešušumeru-akadiešu ķīļrakstsjimantotāmatemātiskais " + + "pierakstsemocijzīmessimbolibez rakstībasvispārējānezināma rakstība" + +var lvScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000f, 0x0017, + 0x0017, 0x001f, 0x001f, 0x001f, 0x001f, 0x0028, 0x0028, 0x0028, + 0x0030, 0x0036, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + 0x0043, 0x004b, 0x004b, 0x0050, 0x0050, 0x0058, 0x0061, 0x006d, + 0x006d, 0x006d, 0x007f, 0x0093, 0x00aa, 0x00aa, 0x00b4, 0x00b4, + 0x00bc, 0x00bc, 0x00c0, 0x00c0, 0x00c7, 0x00d1, 0x00da, 0x00e9, + 0x00f0, 0x00fa, 0x00fa, 0x010d, 0x0120, 0x0120, 0x0126, 0x012e, + 0x012e, 0x012e, 0x0143, 0x014d, 0x014d, 0x0157, 0x015d, 0x0165, + // Entry 40 - 7F + 0x016d, 0x016d, 0x016d, 0x0175, 0x0175, 0x017b, 0x017b, 0x0182, + 0x018c, 0x018c, 0x018c, 0x018c, 0x0195, 0x0195, 0x0195, 0x019d, + 0x019d, 0x019d, 0x01a8, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01c1, 0x01c1, 0x01c1, 0x01c1, + 0x01c9, 0x01c9, 0x01d1, 0x01dd, 0x01dd, 0x01dd, 0x01dd, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01f7, 0x01f7, + 0x01f7, 0x01fc, 0x01fc, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, + 0x0209, 0x0209, 0x0209, 0x0214, 0x0214, 0x0214, 0x0214, 0x021e, + // Entry 80 - BF + 0x022a, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, + 0x0234, 0x0234, 0x023d, 0x023d, 0x0242, 0x0242, 0x024b, 0x024b, + 0x025a, 0x026a, 0x026a, 0x026a, 0x026a, 0x026a, 0x0270, 0x0270, + 0x0270, 0x0276, 0x0276, 0x0276, 0x027c, 0x0281, 0x0285, 0x028f, + 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x029a, 0x02b8, + 0x02ba, 0x02c2, 0x02da, 0x02e6, 0x02ed, 0x02fb, 0x0307, 0x031a, +} // Size: 376 bytes + +const mkScriptStr string = "" + // Size: 3531 bytes + "афакакавкаскоалбанскиарапско писмоцарскоарамејскиерменско писмоавестанск" + + "обалискобамумскобасабатачкобенгалско писмоблиссимболибопомофобрамибрајо" + + "во писмобугискобухидскочакманскоканадско слоговнокарискочамскочерокиско" + + "кирткоптскокипарскокирилско писмостарословенска кирилицадеванагаридезер" + + "етскоДиплојеево стенографскоегипетско демотскоегипетско хиератскоегипет" + + "ски хиероглифиелбасанскоетиопско писмогрузиски хуцуригрузиско писмоглаг" + + "олицаготскогрантагрчко писмогуџаратигурмукиханбхангулханско писмохануно" + + "овскопоедноставено ханско писмотрадиционално ханскохебрејско писмохираг" + + "анаанадолски хиероглифипахауанско хмоншкојапонско слоговностароунгарско" + + "харапскостароиталскоџамојаванскојапонско писмоџурченскокаја ликатаканак" + + "ароштикмерско писмохоџкиканнадакорејско писмокпелскокајтилансколаошко п" + + "исмофрактурна латиницагелска латиницалатинично писмолепчансколимбулинеа" + + "рно Алинеарно БФрејзероволомсколикисколидискомахаџанимандејскоманихејск" + + "омајански хиероглифимендскомероитско ракописномероитскомалајаламско пис" + + "момодимонголско писмоМуновомромејтејскомјанмарско писмостаросеверноарап" + + "сконабатејсконасиска гебанконишуогамол чикистаротурскооријанско писмосо" + + "малископалмирскоПаучинхауовостаропермскопагспанатписно средноперсископс" + + "алтирско средноперсискокнижевно староперсискофеникискоПолардовонатписно" + + " партискореџаншкоронгоронгорунскосамарјанскосаратистаројужноарапскосаура" + + "штранскознаковно пишувањеШоовошарадасидамкудабадисинхалско писмосоранг " + + "сомпенгсунданскосилхетско нагарисирискоестрангелско сирискозападносирис" + + "коисточносирискотагбанванскотакритај леново тај луетамилско писмотангут" + + "скотај вјеттелугутенгвартифинагтагалошкотанатајландско писмотибетско пи" + + "смотирхутаугаритсковајвидлив говорваранг кшитиволеајскостароперсискосум" + + "ероакадско клинестојинаследеноматематичка нотацијаемоџисимболибез писмо" + + "општонепознато писмо" + +var mkScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000a, 0x002a, 0x002a, 0x0043, 0x0061, 0x007c, + 0x0090, 0x009e, 0x00ae, 0x00b6, 0x00c4, 0x00e1, 0x00e1, 0x00f7, + 0x0107, 0x0111, 0x012a, 0x0138, 0x0148, 0x015a, 0x017b, 0x0189, + 0x0195, 0x01a7, 0x01af, 0x01bd, 0x01cd, 0x01e8, 0x0215, 0x0229, + 0x023d, 0x026a, 0x028d, 0x02b2, 0x02d9, 0x02ed, 0x0308, 0x0325, + 0x0340, 0x0352, 0x035e, 0x036a, 0x037f, 0x038f, 0x039d, 0x03a5, + 0x03b1, 0x03c8, 0x03de, 0x0410, 0x0437, 0x0437, 0x0454, 0x0464, + 0x048b, 0x04ae, 0x04cf, 0x04e9, 0x04f9, 0x0511, 0x0519, 0x0529, + // Entry 40 - 7F + 0x0544, 0x0556, 0x0563, 0x0573, 0x0581, 0x059a, 0x05a4, 0x05b2, + 0x05cd, 0x05db, 0x05e5, 0x05f1, 0x0608, 0x062b, 0x0648, 0x0665, + 0x0677, 0x0681, 0x0694, 0x06a7, 0x06bb, 0x06c7, 0x06d5, 0x06e3, + 0x06f3, 0x0705, 0x0719, 0x0719, 0x073e, 0x074c, 0x0771, 0x0783, + 0x07a6, 0x07ae, 0x07cb, 0x07d7, 0x07dd, 0x07ef, 0x07ef, 0x080e, + 0x0834, 0x0848, 0x0848, 0x085f, 0x0865, 0x086d, 0x0875, 0x0882, + 0x0898, 0x08b5, 0x08b5, 0x08c7, 0x08d9, 0x08f1, 0x0909, 0x0915, + 0x0942, 0x0973, 0x099e, 0x09b0, 0x09c2, 0x09e3, 0x09f3, 0x0a07, + // Entry 80 - BF + 0x0a13, 0x0a29, 0x0a35, 0x0a57, 0x0a71, 0x0a92, 0x0a9c, 0x0aa8, + 0x0ab2, 0x0ac2, 0x0adf, 0x0afa, 0x0b0c, 0x0b2b, 0x0b39, 0x0b60, + 0x0b7c, 0x0b98, 0x0bb0, 0x0bba, 0x0bc5, 0x0bdb, 0x0bf6, 0x0c08, + 0x0c17, 0x0c23, 0x0c31, 0x0c3f, 0x0c51, 0x0c59, 0x0c78, 0x0c93, + 0x0ca1, 0x0cb3, 0x0cb9, 0x0cd0, 0x0ce7, 0x0cf9, 0x0d13, 0x0d3e, + 0x0d42, 0x0d54, 0x0d7b, 0x0d85, 0x0d93, 0x0da4, 0x0dae, 0x0dcb, +} // Size: 376 bytes + +const mlScriptStr string = "" + // Size: 3513 bytes + "അറബിക്അർമിഅർമേനിയൻഅവെസ്ഥൻബാലിനീസ്ബട്ടക്ബംഗാളിബ്ലിസ് ചിത്ര ലിപിബോപ്പോമോഫോ" + + "ബ്രാഹ്മിബ്രെയ്\u200cലിബുഗിനീസ്ബുഹിഡ്ചകംഏകീകൃത കനേഡിയൻ ഗോത്രലിപിചരിയൻഛം" + + "ചെറോക്കിചിർത്ത്കോപ്റ്റിക്സൈപ്രിയോട്ട്സിറിലിക്പുരാതന ചർച്ച് സ്ലവോണിക് സ" + + "ിറിലിക്ദേവനാഗരിഡെസെർട്ട്ഈജിപ്ഷ്യൻ ഡിമോട്ടിക്ഈജിപ്ഷ്യൻ ഹിരാറ്റിക്ഈജിപ്ഷ" + + "്യൻ ചിത്രലിപിഎത്യോപിക്ജോർജ്ജിയൻ ഖുട്സുരിജോർജ്ജിയൻഗ്ലഗോലിറ്റിക്ഗോഥിക്ഗ്" + + "രീക്ക്ഗുജറാത്തിഗുരുമുഖിഹൻബ്ഹാംഗുൽഹാൻഹനുനൂലളിതവൽക്കരിച്ച ഹാൻപരമ്പരാഗത ഹ" + + "ാൻഹീബ്രുഹിരഗാനപഹ്വാ ഹമോംഗ്ജാപ്പനീസ് സില്ലബറീസ്പുരാതന ഹംഗേറിയൻസിന്ധുപഴയ" + + " ഇറ്റാലിയൻജാമോജാവനീസ്ജാപ്പനീസ്കയാ ലികറ്റക്കാനഖരോഷ്ടിഖമെർകന്നഡകൊറിയൻക്തില" + + "ന്നലാവോഫ്രാക്ടുർ ലാറ്റിൻഗെയ്\u200cലിക് ലാറ്റിൻലാറ്റിൻലെപ്ചലിംബുസമരേഖയി" + + "ലുള്ള എലീനിയർ ബിലൈസിൻലൈഡിയൻമൻഡേയൻമണിചേയൻമായൻ ചിത്രലിപിമെറോയിറ്റിക്മലയാ" + + "ളംമംഗോളിയൻമൂൺമേറ്റി മായക്മ്യാൻമാർഎൻകോഒഖാംഒൽ ചിക്കിഒർഖോൺഒഡിയഒസ്\u200cമാ" + + "നിയപുരാതന പെർമിക്ഫഗസ് പഎഴുത്തു പഹൽവിസാൾട്ടർ പഹൽവിപഹൽവി ലിപിഫിനീഷ്യൻപൊള" + + "്ളാർഡ് ശബ്ദലിപിപൃതിറെജാംഗ്റൊംഗോറൊംഗോറുണിക്സമരിയസരതിസൗരാഷ്ട്രചിഹ്നലിപിഷ" + + "ാവിയൻസിംഹളസന്താനീസ്സൈലോതി നാഗരിസിറിയക്ക്എസ്റ്റ്രാംഗ്ലോ സിറിയക്പശ്ചിമസു" + + "റിയാനികിഴക്കൻ സിറിയക്തഗ്ബൻവാതായ് ലേപുതിയ തായ് ല്യൂതമിഴ്ത്വട്തെലുങ്ക്തെ" + + "ംഗ്വർതിഫിനാഗ്തഗലോഗ്ഥാനതായ്ടിബറ്റൻഉഗ്രൈറ്റിക്വൈദൃശ്യഭാഷപഴയ പേർഷ്യൻസുമേറ" + + "ോ അക്കാഡിയൻ ക്യുണിഫോംയിപാരമ്പര്യമായഗണിത രൂപംഇമോജിചിഹ്നങ്ങൾഎഴുതപ്പെടാത്" + + "തത്സാധാരണഅജ്ഞാത ലിപി" + +var mlScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x001e, 0x0036, + 0x004b, 0x0063, 0x0063, 0x0063, 0x0075, 0x0087, 0x0087, 0x00b6, + 0x00d4, 0x00ec, 0x0107, 0x011f, 0x0131, 0x013a, 0x017e, 0x018d, + 0x0193, 0x01ab, 0x01c0, 0x01de, 0x0202, 0x021a, 0x0274, 0x028c, + 0x02a7, 0x02a7, 0x02e1, 0x031b, 0x0352, 0x0352, 0x036d, 0x03a1, + 0x03bc, 0x03e3, 0x03f5, 0x03f5, 0x040d, 0x0428, 0x0440, 0x044c, + 0x045e, 0x0467, 0x0476, 0x04aa, 0x04cf, 0x04cf, 0x04e1, 0x04f3, + 0x04f3, 0x0515, 0x054f, 0x057a, 0x058c, 0x05b1, 0x05bd, 0x05d2, + // Entry 40 - 7F + 0x05ed, 0x05ed, 0x05fd, 0x0618, 0x062d, 0x0639, 0x0639, 0x0648, + 0x065a, 0x065a, 0x0666, 0x0672, 0x067e, 0x06af, 0x06e0, 0x06f5, + 0x0704, 0x0713, 0x073b, 0x0754, 0x0754, 0x0754, 0x0763, 0x0775, + 0x0775, 0x0787, 0x079c, 0x079c, 0x07c4, 0x07c4, 0x07c4, 0x07e8, + 0x07fa, 0x07fa, 0x0812, 0x081b, 0x081b, 0x083d, 0x083d, 0x0855, + 0x0855, 0x0855, 0x0855, 0x0855, 0x0861, 0x0861, 0x086d, 0x0886, + 0x0895, 0x08a1, 0x08a1, 0x08bc, 0x08bc, 0x08bc, 0x08e4, 0x08f4, + 0x0919, 0x093e, 0x095a, 0x0972, 0x09a6, 0x09b2, 0x09c7, 0x09e5, + // Entry 80 - BF + 0x09f7, 0x0a06, 0x0a12, 0x0a12, 0x0a2d, 0x0a48, 0x0a5a, 0x0a5a, + 0x0a5a, 0x0a5a, 0x0a69, 0x0a69, 0x0a84, 0x0aa6, 0x0ac1, 0x0b01, + 0x0b2b, 0x0b56, 0x0b6b, 0x0b6b, 0x0b7e, 0x0ba7, 0x0bb6, 0x0bb6, + 0x0bc5, 0x0bdd, 0x0bf2, 0x0c0a, 0x0c1c, 0x0c25, 0x0c31, 0x0c46, + 0x0c46, 0x0c67, 0x0c6d, 0x0c85, 0x0c85, 0x0c85, 0x0ca4, 0x0cee, + 0x0cf4, 0x0d18, 0x0d31, 0x0d40, 0x0d5b, 0x0d88, 0x0d9a, 0x0db9, +} // Size: 376 bytes + +const mnScriptStr string = "" + // Size: 666 bytes + "арабарменибенгалвопомофобрайлкириллдеванагариэтиопгүржгрекгүжаратигурмук" + + "хиханбхангулханхялбаршуулсан ханзуламжлалт ханзеврейхираганаяпон хэлний" + + " үеийн цагаан толгойжамояпонкатаканакхмерканнадасолонгослаослатинмалаяла" + + "ммонгол бичигмьянмарориясинхалатамилтэлүгүтанатайтөвдматематик тооллын " + + "системэможитэмдэгбичигдээгүйнийтлэгтодорхойгүй бичиг" + +var mnScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0020, 0x0020, 0x0020, + 0x0030, 0x0030, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0046, 0x0046, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0064, 0x0064, + 0x006c, 0x006c, 0x006c, 0x006c, 0x0074, 0x0084, 0x0094, 0x009c, + 0x00a8, 0x00ae, 0x00ae, 0x00d1, 0x00ec, 0x00ec, 0x00f6, 0x0106, + 0x0106, 0x0106, 0x0140, 0x0140, 0x0140, 0x0140, 0x0148, 0x0148, + // Entry 40 - 7F + 0x0150, 0x0150, 0x0150, 0x0160, 0x0160, 0x016a, 0x016a, 0x0178, + 0x0188, 0x0188, 0x0188, 0x0188, 0x0190, 0x0190, 0x0190, 0x019a, + 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, + 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, + 0x01aa, 0x01aa, 0x01c1, 0x01c1, 0x01c1, 0x01c1, 0x01c1, 0x01cf, + 0x01cf, 0x01cf, 0x01cf, 0x01cf, 0x01cf, 0x01cf, 0x01cf, 0x01cf, + 0x01cf, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + // Entry 80 - BF + 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + 0x01d7, 0x01d7, 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01e5, + 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01ef, 0x01ef, + 0x01ef, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x0203, 0x0209, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x023f, 0x0249, 0x0255, 0x026b, 0x0279, 0x029a, +} // Size: 376 bytes + +const mrScriptStr string = "" + // Size: 3418 bytes + "अरबीइम्पिरियल आर्मेनिकअर्मेनियनअवेस्तानबालीबटाकबंगालीब्लिसिम्बॉल्सबोपोमो" + + "फोब्रह्मीब्रेलबूगीबुहिदचकमायूनिफाइड कॅनेडियन अ\u200dॅबोरिदनल सिलॅबिक्स" + + "कॅरियनचामचेरोकीकिर्थकॉप्टिकसायप्रिऑटसीरिलिकपुरातन चर्च स्लाव्होनिक सिर" + + "िलिकदेवनागरीडेसर्टइजिप्शियन डेमोटिकइजिप्शियन हायरेटिकइजिप्शियन हायरोग्" + + "लिफ्सईथिओपिकजॉर्जियन खुत्सुरीजॉर्जियनग्लॅगोलिटिकगोथिकग्रीकगुजरातीगुरुम" + + "ुखीहान्बहंगुलहानहनुनूसरलीकृत हानपारंपारिक हानहिब्रूहिरागानापहाउ मंगजाप" + + "ानी स्वरलिपीपुरातन हंगेरियनसिन्धुजुनी इटालिकजामोजावानीसजपानीकायाह लीकॅ" + + "टाकानाखारोश्थीख्मेरकन्नडकोरियनकाइथीलानालाओफ्रॅक्तुर लॅटिनगाएलिक लेटिनल" + + "ॅटिनलेपचालिम्बूलीनियार अलीनियर बीलायशियानलायडियानमान्डायीनमानीचायीनमाय" + + "ान हाइरोग्लिफ्समेरोइटिकमल्याळममंगोलियनमूनमेइतेइ मायेकम्यानमारएन्‘कोओघा" + + "मओल चिकिओर्खोनउडियाउस्मानियापुरातन पर्मिकफाग्स-पाइन्स्क्रिप्शनल पाहलवी" + + "सॉल्टर पाहलवीबुक पाहलवीफोनिशियनपोलार्ड फोनेटिकइन्स्क्रिप्शनल पर्थियनरी" + + "जांगरोन्गोरोन्गोरूनिकसमरिटानसरातीसौराष्ट्रसंकेत लिपीशॅव्हियनसिंहलासूदा" + + "नीसिलोती नागरीसिरीयाकएस्त्ट्रेन्जेलो सिरियाकपश्चिमी सिरियाकपूर्वी सिरि" + + "याकतगोआन्वाताई लीनवीन ताई लूतामिळताई विएततेलगुतेन्गवारतिफिनाघटागालोगथा" + + "नाथाईतिबेटीयुगारिटिकवाईदृश्य संवादपुरातन फारसीदृश्यमान भाषायीवंशपरंपरा" + + "गतगणितीय संकेतलिपीइमोजीप्रतीकअलिखितसामान्यअज्ञात लिपी" + +var mrScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0040, 0x005b, + 0x0073, 0x007f, 0x007f, 0x007f, 0x008b, 0x009d, 0x009d, 0x00c4, + 0x00dc, 0x00f1, 0x0100, 0x010c, 0x011b, 0x0127, 0x0193, 0x01a5, + 0x01ae, 0x01c0, 0x01cf, 0x01e4, 0x01ff, 0x0214, 0x026b, 0x0283, + 0x0295, 0x0295, 0x02c6, 0x02fa, 0x033a, 0x033a, 0x034f, 0x0380, + 0x0398, 0x03b9, 0x03c8, 0x03c8, 0x03d7, 0x03ec, 0x0404, 0x0413, + 0x0422, 0x042b, 0x043a, 0x0459, 0x047e, 0x047e, 0x0490, 0x04a8, + 0x04a8, 0x04be, 0x04e9, 0x0514, 0x0526, 0x0545, 0x0551, 0x0566, + // Entry 40 - 7F + 0x0575, 0x0575, 0x058b, 0x05a3, 0x05bb, 0x05ca, 0x05ca, 0x05d9, + 0x05eb, 0x05eb, 0x05fa, 0x0606, 0x060f, 0x063a, 0x065c, 0x066b, + 0x067a, 0x068c, 0x06a5, 0x06be, 0x06be, 0x06be, 0x06d6, 0x06ee, + 0x06ee, 0x0709, 0x0724, 0x0724, 0x0758, 0x0758, 0x0758, 0x0770, + 0x0785, 0x0785, 0x079d, 0x07a6, 0x07a6, 0x07c8, 0x07c8, 0x07e0, + 0x07e0, 0x07e0, 0x07e0, 0x07e0, 0x07f2, 0x07f2, 0x07fe, 0x0811, + 0x0823, 0x0832, 0x0832, 0x084d, 0x084d, 0x084d, 0x0872, 0x0888, + 0x08c5, 0x08ea, 0x0906, 0x091e, 0x0949, 0x0989, 0x099b, 0x09bf, + // Entry 80 - BF + 0x09ce, 0x09e3, 0x09f2, 0x09f2, 0x0a0d, 0x0a29, 0x0a41, 0x0a41, + 0x0a41, 0x0a41, 0x0a53, 0x0a53, 0x0a65, 0x0a87, 0x0a9c, 0x0adf, + 0x0b0a, 0x0b32, 0x0b4a, 0x0b4a, 0x0b5a, 0x0b77, 0x0b86, 0x0b86, + 0x0b9c, 0x0bab, 0x0bc3, 0x0bd8, 0x0bed, 0x0bf9, 0x0c02, 0x0c14, + 0x0c14, 0x0c2f, 0x0c38, 0x0c57, 0x0c57, 0x0c57, 0x0c79, 0x0c9e, + 0x0ca4, 0x0cc5, 0x0cf3, 0x0d02, 0x0d14, 0x0d26, 0x0d3b, 0x0d5a, +} // Size: 376 bytes + +const msScriptStr string = "" + // Size: 342 bytes + "ArabArmeniaBaliBamuBenggalaBopomofoBrailleCansCyrilDevanagariEthiopiaGeo" + + "rgiaGreekGujaratGurmukhiHanbHangulHanHan RingkasHan TradisionalIbraniHir" + + "aganaEjaan sukuan JepunJamoJepunKatakanaKhmerKannadaKoreaLaoLatinMalayal" + + "amMongoliaMyammarOriyaSinhalaTamilTeluguThaanaThaiTibetTatatanda matemat" + + "ikEmojiSimbolTidak ditulisLazimTulisan Tidak Diketahui" + +var msScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0004, 0x000b, + 0x000b, 0x000f, 0x0013, 0x0013, 0x0013, 0x001b, 0x001b, 0x001b, + 0x0023, 0x0023, 0x002a, 0x002a, 0x002a, 0x002a, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x0033, 0x0033, 0x003d, + 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x0045, 0x0045, + 0x004c, 0x004c, 0x004c, 0x004c, 0x0051, 0x0058, 0x0060, 0x0064, + 0x006a, 0x006d, 0x006d, 0x0078, 0x0087, 0x0087, 0x008d, 0x0095, + 0x0095, 0x0095, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00ab, 0x00ab, + // Entry 40 - 7F + 0x00b0, 0x00b0, 0x00b0, 0x00b8, 0x00b8, 0x00bd, 0x00bd, 0x00c4, + 0x00c9, 0x00c9, 0x00c9, 0x00c9, 0x00cc, 0x00cc, 0x00cc, 0x00d1, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, + 0x00da, 0x00da, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e9, + 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, + 0x00e9, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + // Entry 80 - BF + 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + 0x00ee, 0x00ee, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, + 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00fa, 0x00fa, + 0x00fa, 0x0100, 0x0100, 0x0100, 0x0100, 0x0106, 0x010a, 0x010f, + 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, + 0x010f, 0x010f, 0x0122, 0x0127, 0x012d, 0x013a, 0x013f, 0x0156, +} // Size: 376 bytes + +const myScriptStr string = "" + // Size: 1241 bytes + "အာရေဗျအာမေးနီးယားဘင်္ဂါလီဘိုပိုဗြဟ္မမီဘရေစစ်ရိလစ်ဒီဗနာဂရီအီသီယိုးပီးယားဂ" + + "ျော်ဂျီယာဂရိဂုဂျာရသီဂူရူဟန်ဘ်ဟန်ဂူးလ်ဟန်ဟန် ရိုးရှင်းဟန် ရိုးရာဟီဗရူးဟ" + + "ီရဂနဂျပန် အက္ခရာဂျမိုဂျာဗားနီးစ်ဂျပန်ကယားလီခတခနခမာခန္နာဒါကိုရီးယားလာအိ" + + "ုလက်တင်မာလာယာလမ်မွန်ဂိုလီးယားမြန်မာအိုရာဆင်ဟာလတိုင်လီတမီးလ်တီလုတဂလော့ဂ" + + "်သာအ်ထိုင်းတိဘက်မြင်နိုင်သော စကားပါရှန် အဟောင်းရီဂဏန်းသင်္ချာအီမိုဂျီသ" + + "င်္ကေတမရေးထားသောအများနှင့်သက်ဆိုင်သောမသိ သို့မဟုတ် မရှိသော စကားလုံး" + +var myScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x004b, 0x004b, 0x004b, + 0x005d, 0x0072, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x0093, 0x0093, 0x00ab, + 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00d5, 0x00d5, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fc, 0x0114, 0x0120, 0x012f, + 0x0147, 0x0150, 0x0150, 0x0175, 0x0191, 0x0191, 0x01a3, 0x01b2, + 0x01b2, 0x01b2, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01e3, 0x0204, + // Entry 40 - 7F + 0x0213, 0x0213, 0x0225, 0x0231, 0x0231, 0x023a, 0x023a, 0x024f, + 0x026a, 0x026a, 0x026a, 0x026a, 0x0279, 0x0279, 0x0279, 0x028b, + 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, + 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, + 0x02a6, 0x02a6, 0x02cd, 0x02cd, 0x02cd, 0x02cd, 0x02cd, 0x02df, + 0x02df, 0x02df, 0x02df, 0x02df, 0x02df, 0x02df, 0x02df, 0x02df, + 0x02df, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, + 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, + // Entry 80 - BF + 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, + 0x02ee, 0x02ee, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, + 0x0300, 0x0300, 0x0300, 0x0300, 0x0315, 0x0315, 0x0327, 0x0327, + 0x0327, 0x0333, 0x0333, 0x0333, 0x034b, 0x0357, 0x0369, 0x0378, + 0x0378, 0x0378, 0x0378, 0x03a9, 0x03a9, 0x03a9, 0x03d1, 0x03d1, + 0x03d7, 0x03d7, 0x03fb, 0x0413, 0x0428, 0x0446, 0x0485, 0x04d9, +} // Size: 376 bytes + +const neScriptStr string = "" + // Size: 3039 bytes + "अरबीआर्मीआर्मेनियालीआभेस्टानबालीबाटकबङ्गालीब्लिजसिम्बोल्सबोपोमोफोब्राह्म" + + "ीब्रेलबुगिनिजबुहिदकाक्म्कारियनचामचेरोकीकिर्थकप्टिककप्रियटसिरिलिकदेवाना" + + "गरीडेसेरेटइजिप्टियन डेमोटिकइजिप्टियन हाइरटिकइजिप्टियन हाइरोग्लिफ्सइथिय" + + "ोपिकग्रुजियाली खुट्सुरीजर्जियालीग्लागोलिटिकगोथिकग्रीकगुजरातीगुरूमुखीहा" + + "न्बहान्गुलहानहानुनुसरलिकृत चिनीपरम्परागत चिनीहिब्रुहिरागनापहावह हमोङ्ग" + + "काताकाना वा हिरागानापुरानो हङ्गेरियालीइन्दुसपुरानो इटालिकजामोजाभानीजाप" + + "ानीकायाहलीकाताकानाखारोस्थितिखमेरकान्नाडाकोरियनक्थीलान्नालाओफ्राक्टुर ल" + + "्याटिनग्यालिक ल्याटिनल्याटिनलेप्चालिम्बुलाइसियनलाइडियनमान्डाएनमानिकाएन" + + "माया हाइरोग्लिफ्समेरियोटिकमलायालममङ्गोलजूनमाइटेइ मायेकम्यान्मारएन्कोओघ" + + "ामओलचिकीओर्खोनओडियाओस्मान्यापुरानो पर्मिकफाग्स-पाफ्लिफ्ल्पबुक पहल्भीफो" + + "निसियनपोल्लार्ड फोनेटिकपिआरटीरेजाङरोङ्गोरोङ्गोरूनिकसमारिटनसारतीसौराष्ट" + + "्रसाइनराइटिङशाभियनसिन्हालास्ल्योटी नाग्रीसिरियाकइस्ट्रेनजेलो सिरियाकपश" + + "्चिमी सिरियाकपूर्वी सिरियाकटाग्वान्वाटाइलेन्यू टाइ लुइतामिलटाभ्टतेलुगु" + + "टेङ्वारटिफिनाघटागालोगथानाथाईतिब्बतीयुगारिटिकभाइदृश्यमय वाणीपुरानो पर्स" + + "ियनयीइन्हेरिटेडZmthZsyeप्रतीकहरूनलेखिएकोसाझाअज्ञात लिपि" + +var neScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x001b, 0x003c, + 0x0054, 0x0060, 0x0060, 0x0060, 0x006c, 0x0081, 0x0081, 0x00ab, + 0x00c3, 0x00db, 0x00ea, 0x00ff, 0x010e, 0x0120, 0x0120, 0x0132, + 0x013b, 0x014d, 0x015c, 0x016e, 0x0183, 0x0198, 0x0198, 0x01b3, + 0x01c8, 0x01c8, 0x01f9, 0x022a, 0x026a, 0x026a, 0x0282, 0x02b9, + 0x02d4, 0x02f5, 0x0304, 0x0304, 0x0313, 0x0328, 0x0340, 0x034f, + 0x0364, 0x036d, 0x037f, 0x03a1, 0x03c9, 0x03c9, 0x03db, 0x03f0, + 0x03f0, 0x0412, 0x044a, 0x047e, 0x0490, 0x04b5, 0x04c1, 0x04d3, + // Entry 40 - 7F + 0x04e5, 0x04e5, 0x04fa, 0x0512, 0x0530, 0x053c, 0x053c, 0x0554, + 0x0566, 0x0566, 0x0572, 0x0584, 0x058d, 0x05be, 0x05e9, 0x05fe, + 0x0610, 0x0622, 0x0622, 0x0622, 0x0622, 0x0622, 0x0637, 0x064c, + 0x064c, 0x0664, 0x067c, 0x067c, 0x06ad, 0x06ad, 0x06ad, 0x06c8, + 0x06dd, 0x06dd, 0x06ef, 0x06f8, 0x06f8, 0x071a, 0x071a, 0x0735, + 0x0735, 0x0735, 0x0735, 0x0735, 0x0744, 0x0744, 0x0750, 0x0762, + 0x0774, 0x0783, 0x0783, 0x079e, 0x079e, 0x079e, 0x07c3, 0x07d9, + 0x07e5, 0x07f4, 0x0810, 0x0828, 0x0859, 0x086b, 0x087a, 0x089e, + // Entry 80 - BF + 0x08ad, 0x08c2, 0x08d1, 0x08d1, 0x08ec, 0x090a, 0x091c, 0x091c, + 0x091c, 0x091c, 0x0934, 0x0934, 0x0934, 0x095f, 0x0974, 0x09ae, + 0x09d9, 0x0a01, 0x0a1f, 0x0a1f, 0x0a2e, 0x0a4e, 0x0a5d, 0x0a5d, + 0x0a6c, 0x0a7e, 0x0a93, 0x0aa8, 0x0abd, 0x0ac9, 0x0ad2, 0x0ae7, + 0x0ae7, 0x0b02, 0x0b0b, 0x0b2d, 0x0b2d, 0x0b2d, 0x0b55, 0x0b55, + 0x0b5b, 0x0b79, 0x0b7d, 0x0b81, 0x0b9c, 0x0bb4, 0x0bc0, 0x0bdf, +} // Size: 376 bytes + +const nlScriptStr string = "" + // Size: 1678 bytes + "AdlamDefakaKaukasisch AlbaneesAhomArabischKeizerlijk ArameesArmeensAvest" + + "aansBalineesBamounBassa VahBatakBengaalsBhaiksukiBlissymbolenBopomofoBra" + + "hmiBrailleBugineesBuhidChakmaVerenigde Canadese Aboriginal-symbolenCaris" + + "chChamCherokeeCirthKoptischCyprischCyrillischOudkerkslavisch CyrillischD" + + "evanagariDeseretDuployan snelschriftEgyptisch demotischEgyptisch hiërati" + + "schEgyptische hiërogliefenElbasanEthiopischGeorgisch KhutsuriGeorgischGl" + + "agolitischGothischGranthaGrieksGujaratiGurmukhiHanbHangulHanHanunooveree" + + "nvoudigd Chineestraditioneel ChineesHatranHebreeuwsHiraganaAnatolische h" + + "iërogliefenPahawh HmongKatakana of HiraganaOudhongaarsIndusOud-italischJ" + + "amoJavaansJapansJurchenKayah LiKatakanaKharoshthiKhmerKhojkiKannadaKorea" + + "ansKpelleKaithiLannaLaotiaansGotisch LatijnsGaelisch LatijnsLatijnsLepch" + + "aLimbuLineair ALineair BFraserLomaLycischLydischMahajaniMandaeansManiche" + + "aansMarchenMayahiërogliefenMendeMeroitisch cursiefMeroïtischMalayalamMod" + + "iMongoolsMoonMroMeiteiMultaniBirmaansOud Noord-ArabischNabateaansNewariN" + + "axi GebaN’KoNüshuOghamOl ChikiOrkhonOdiaOsageOsmanyaPalmyreensPau Cin Ha" + + "uOudpermischPhags-paInscriptioneel PahlaviPsalmen PahlaviBoek PahlaviFoe" + + "nicischPollard-fonetischInscriptioneel ParthischRejangRongorongoRunicSam" + + "aritaansSaratiOud Zuid-ArabischSaurashtraSignWritingShavianSharadaSiddha" + + "mSindhiSingaleesSora SompengSoendaneesSyloti NagriSyriacEstrangelo Arame" + + "esWest-ArameesOost-ArameesTagbanwaTakriTai LeNieuw Tai LueTamilTangutTai" + + " VietTeluguTengwarTifinaghTagalogThaanaThaiTibetaansTirhutaUgaritischVai" + + "Zichtbare spraakVarang KshitiWoleaiOudperzischSumero-Akkadian CuneiformY" + + "iOvergeërfdWiskundige notatieemojiSymbolenongeschrevenalgemeenonbekend s" + + "chriftsysteem" + +var nlScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x000b, 0x001e, 0x0022, 0x002a, 0x003c, 0x0043, + 0x004c, 0x0054, 0x005a, 0x0063, 0x0068, 0x0070, 0x0079, 0x0085, + 0x008d, 0x0093, 0x009a, 0x00a2, 0x00a7, 0x00ad, 0x00d3, 0x00da, + 0x00de, 0x00e6, 0x00eb, 0x00f3, 0x00fb, 0x0105, 0x011f, 0x0129, + 0x0130, 0x0144, 0x0157, 0x016c, 0x0184, 0x018b, 0x0195, 0x01a7, + 0x01b0, 0x01bc, 0x01c4, 0x01cb, 0x01d1, 0x01d9, 0x01e1, 0x01e5, + 0x01eb, 0x01ee, 0x01f5, 0x020a, 0x021e, 0x0224, 0x022d, 0x0235, + 0x024e, 0x025a, 0x026e, 0x0279, 0x027e, 0x028a, 0x028e, 0x0295, + // Entry 40 - 7F + 0x029b, 0x02a2, 0x02aa, 0x02b2, 0x02bc, 0x02c1, 0x02c7, 0x02ce, + 0x02d6, 0x02dc, 0x02e2, 0x02e7, 0x02f0, 0x02ff, 0x030f, 0x0316, + 0x031c, 0x0321, 0x032a, 0x0333, 0x0339, 0x033d, 0x0344, 0x034b, + 0x0353, 0x035c, 0x0367, 0x036e, 0x037f, 0x0384, 0x0396, 0x03a1, + 0x03aa, 0x03ae, 0x03b6, 0x03ba, 0x03bd, 0x03c3, 0x03ca, 0x03d2, + 0x03e4, 0x03ee, 0x03f4, 0x03fd, 0x0403, 0x0409, 0x040e, 0x0416, + 0x041c, 0x0420, 0x0425, 0x042c, 0x0436, 0x0441, 0x044c, 0x0454, + 0x046a, 0x0479, 0x0485, 0x048f, 0x04a0, 0x04b8, 0x04be, 0x04c8, + // Entry 80 - BF + 0x04cd, 0x04d8, 0x04de, 0x04ef, 0x04f9, 0x0504, 0x050b, 0x0512, + 0x0519, 0x051f, 0x0528, 0x0534, 0x053e, 0x054a, 0x0550, 0x0562, + 0x056e, 0x057a, 0x0582, 0x0587, 0x058d, 0x059a, 0x059f, 0x05a5, + 0x05ad, 0x05b3, 0x05ba, 0x05c2, 0x05c9, 0x05cf, 0x05d3, 0x05dc, + 0x05e3, 0x05ed, 0x05f0, 0x0600, 0x060d, 0x0613, 0x061e, 0x0637, + 0x0639, 0x0644, 0x0656, 0x065b, 0x0663, 0x066f, 0x0677, 0x068e, +} // Size: 376 bytes + +const noScriptStr string = "" + // Size: 1603 bytes + "afakakaukasus-albanskahomarabiskarameiskarmenskavestiskbalinesiskbamumba" + + "ssa vahbatakbengalskblissymbolbopomofobrahmibraillebuginesiskbuhidchakma" + + "felles kanadiske urspråksstavelserkariskchamcherokeecirthkoptiskkyprioti" + + "skkyrilliskkirkeslavisk kyrilliskdevanagarideseretduployan stenografiegy" + + "ptisk demotiskegyptisk hieratiskegyptiske hieroglyferelbasisketiopiskgeo" + + "rgisk khutsurigeorgiskglagolittiskgotiskgammeltamilskgreskgujaratigurmuk" + + "hihanbhangulhanhanunooforenklet hantradisjonell hanhatransk armenskhebra" + + "iskhiraganaanatoliske hieroglyferpahawh hmongjapanske stavelsesskrifterg" + + "ammelungarskindusgammelitaliskjamojavanesiskjapanskjurchenkayah likataka" + + "nakharoshthikhmerkhojkikannadakoreanskkpellekaithisklannalaotiskfrakturl" + + "atinskgælisk latinsklatinsklepchalimbulineær Alineær Bfraserlomalykiskly" + + "diskmahajanimandaiskmanikeiskmaya-hieroglyfermendemeroitisk kursivmeroit" + + "iskmalayalammodimongolskmoonmromeitei-mayekmultanimyanmargammelnordarabi" + + "sknabataeansknaxi geban’konüshuoghamol-chikiorkhonoriyaosmanyapalmyrensk" + + "pau cin haugammelpermiskphags-painskripsjonspahlavipsalter pahlavipahlav" + + "ifønikiskpollard-fonetiskinskripsjonsparthiskrejangrongorongorunersamari" + + "tansksaratigammelsørarabisksaurashtrategnskriftshavisksharadasiddhamkhud" + + "awadisinhalasora sompengsundanesisksyloti nagrisyriskestrangelosyriakisk" + + "vestlig syriakiskøstlig syriakisktagbanwatakritai leny tai luetamilsktan" + + "guttai viettelugutengwartifinaghtagalogthaanathaitibetansktirhutaugariti" + + "skvaisynlig talevarang kshitiwoleaigammelpersisksumersk-akkadisk kileskr" + + "iftyinedarvetmatematisk notasjonzsyesymbolerspråk uten skriftfellesukjen" + + "t skrift" + +var noScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0015, 0x0019, 0x0020, 0x0028, 0x002f, + 0x0037, 0x0041, 0x0046, 0x004f, 0x0054, 0x005c, 0x005c, 0x0066, + 0x006e, 0x0074, 0x007b, 0x0085, 0x008a, 0x0090, 0x00b3, 0x00b9, + 0x00bd, 0x00c5, 0x00ca, 0x00d1, 0x00db, 0x00e4, 0x00fa, 0x0104, + 0x010b, 0x011e, 0x012f, 0x0141, 0x0156, 0x015e, 0x0166, 0x0177, + 0x017f, 0x018b, 0x0191, 0x019e, 0x01a3, 0x01ab, 0x01b3, 0x01b7, + 0x01bd, 0x01c0, 0x01c7, 0x01d4, 0x01e4, 0x01f4, 0x01fc, 0x0204, + 0x021a, 0x0226, 0x0240, 0x024d, 0x0252, 0x025f, 0x0263, 0x026d, + // Entry 40 - 7F + 0x0274, 0x027b, 0x0283, 0x028b, 0x0295, 0x029a, 0x02a0, 0x02a7, + 0x02af, 0x02b5, 0x02bd, 0x02c2, 0x02c9, 0x02d7, 0x02e6, 0x02ed, + 0x02f3, 0x02f8, 0x0301, 0x030a, 0x0310, 0x0314, 0x031a, 0x0320, + 0x0328, 0x0330, 0x0339, 0x0339, 0x0349, 0x034e, 0x035e, 0x0367, + 0x0370, 0x0374, 0x037c, 0x0380, 0x0383, 0x038f, 0x0396, 0x039d, + 0x03ae, 0x03b9, 0x03b9, 0x03c2, 0x03c8, 0x03ce, 0x03d3, 0x03db, + 0x03e1, 0x03e6, 0x03e6, 0x03ed, 0x03f7, 0x0402, 0x040f, 0x0417, + 0x042a, 0x0439, 0x0440, 0x0449, 0x0459, 0x046d, 0x0473, 0x047d, + // Entry 80 - BF + 0x0482, 0x048d, 0x0493, 0x04a4, 0x04ae, 0x04b8, 0x04bf, 0x04c6, + 0x04cd, 0x04d6, 0x04dd, 0x04e9, 0x04f4, 0x0500, 0x0506, 0x0519, + 0x052a, 0x053b, 0x0543, 0x0548, 0x054e, 0x0558, 0x055f, 0x0565, + 0x056d, 0x0573, 0x057a, 0x0582, 0x0589, 0x058f, 0x0593, 0x059c, + 0x05a3, 0x05ac, 0x05af, 0x05ba, 0x05c7, 0x05cd, 0x05da, 0x05f5, + 0x05f7, 0x05ff, 0x0612, 0x0616, 0x061e, 0x0630, 0x0636, 0x0643, +} // Size: 376 bytes + +const paScriptStr string = "" + // Size: 828 bytes + "ਅਰਬੀਅਰਮੀਨੀਆਈਬੰਗਾਲੀਬੋਪੋਮੋਫੋਬਰੇਲਸਿਰੀਲਿਕਦੇਵਨਾਗਰੀਇਥੀਓਪਿਕਜਾਰਜੀਆਈਯੂਨਾਨੀਗੁਜਰਾਤੀ" + + "ਗੁਰਮੁਖੀਹਾਂਬਹੰਗੁਲਹਾਨਸਰਲ ਹਾਨਰਵਾਇਤੀ ਹਾਨਹਿਬਰੂਹਿਰਾਗਾਨਾਜਾਪਾਨੀ ਸਿਲੇਬਰੀਜ਼ਜਾਮੋਜ" + + "ਪਾਨੀਕਾਟਾਕਾਨਾਖਮੇਰਕੰਨੜਕੋਰੀਆਈਲਾਓਲਾਤੀਨੀਮਲਿਆਲਮਮੰਗੋਲੀਅਨਮਿਆਂਮਾਰਉੜੀਆਸਿੰਹਾਲਾਤਮਿ" + + "ਲਤੇਲਗੂਥਾਨਾਥਾਈਤਿੱਬਤੀਗਣਿਤ ਚਿੰਨ੍ਹ-ਲਿਪੀਇਮੋਜੀਚਿੰਨ੍ਹਅਲਿਖਤਸਧਾਰਨਅਣਪਛਾਤੀ ਲਿਪੀ" + +var paScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0036, 0x0036, 0x0036, + 0x004e, 0x004e, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x006f, 0x006f, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x009c, 0x009c, + 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00c3, 0x00d8, 0x00ed, 0x00f9, + 0x0108, 0x0111, 0x0111, 0x0124, 0x0140, 0x0140, 0x014f, 0x0167, + 0x0167, 0x0167, 0x0195, 0x0195, 0x0195, 0x0195, 0x01a1, 0x01a1, + // Entry 40 - 7F + 0x01b0, 0x01b0, 0x01b0, 0x01c8, 0x01c8, 0x01d4, 0x01d4, 0x01e0, + 0x01f2, 0x01f2, 0x01f2, 0x01f2, 0x01fb, 0x01fb, 0x01fb, 0x020d, + 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, + 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, + 0x021f, 0x021f, 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, 0x024c, + 0x024c, 0x024c, 0x024c, 0x024c, 0x024c, 0x024c, 0x024c, 0x024c, + 0x024c, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, + 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, + // Entry 80 - BF + 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, + 0x0258, 0x0258, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, + 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x0279, 0x0279, + 0x0279, 0x0288, 0x0288, 0x0288, 0x0288, 0x0294, 0x029d, 0x02af, + 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, + 0x02af, 0x02af, 0x02db, 0x02ea, 0x02fc, 0x030b, 0x031a, 0x033c, +} // Size: 376 bytes + +const plScriptStr string = "" + // Size: 1489 bytes + "arabskiearmiormiańskieawestyjskiebalijskiebamunbatakbengalskiesymbole Bl" + + "issabopomofobrahmiBraille’abugińskiebuhidchakmazunifikowane symbole kana" + + "dyjskich autochtonówkaryjskieczamskieczirokeskicirthkoptyjskiecypryjskie" + + "cyrylicacyrylica staro-cerkiewno-słowiańskadewanagarideseretegipskie dem" + + "otyczneegipskie hieratycznehieroglify egipskieetiopskiegruzińskie chucur" + + "igruzińskiegłagolicagotyckiegreckiegudźarackiegurmukhihanbhangylhanhanun" + + "oouproszczone hantradycyjne hanhebrajskiehiraganapahawh hmongsylabariusz" + + "e japońskiestarowęgierskieindusstarowłoskiejamojawajskiejapońskiekayah l" + + "ikatakanacharostikhmerskiekannadakoreańskiekaithilannalaotańskiełaciński" + + " - frakturałaciński - odmiana gaelickałacińskielepchalimbulinearne Aline" + + "arne Blikijskielidyjskiemandejskiemanichejskiehieroglify Majówmeroickiem" + + "alajalammongolskieMoon’ameitei mayekbirmańskien’kooghamol chikiorchoński" + + "eorijaosmanyastaropermskiephags-painskrypcyjne pahlawipahlawi psałterzow" + + "ypahlawi książkowyfenickifonetyczny Pollard’apartyjski inskrypcyjnyrejan" + + "grongorongorunicznesamarytańskisaratisaurashtrapismo znakoweshawasyngale" + + "skiesundajskiesyloti nagrisyryjskisyriacki estrangelosyryjski (odmiana z" + + "achodnia)syryjski (odmiana wschodnia)tagbanwatai lenowy tai luetamilskie" + + "tai viettelugutengwartifinagh (berberski)tagalogthaanatajskietybetańskie" + + "ugaryckievaiVisible Speechstaroperskieklinowe sumero-akadyjskieyidziedzi" + + "czonenotacja matematycznaEmojisymbolejęzyk bez systemu pismawspólneniezn" + + "any skrypt" + +var plScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x000c, 0x0017, + 0x0022, 0x002b, 0x0030, 0x0030, 0x0035, 0x003f, 0x003f, 0x004d, + 0x0055, 0x005b, 0x0066, 0x0070, 0x0075, 0x007b, 0x00a9, 0x00b2, + 0x00ba, 0x00c4, 0x00c9, 0x00d3, 0x00dd, 0x00e5, 0x010a, 0x0114, + 0x011b, 0x011b, 0x012e, 0x0142, 0x0155, 0x0155, 0x015e, 0x0171, + 0x017c, 0x0186, 0x018e, 0x018e, 0x0195, 0x01a1, 0x01a9, 0x01ad, + 0x01b3, 0x01b6, 0x01bd, 0x01cc, 0x01da, 0x01da, 0x01e4, 0x01ec, + 0x01ec, 0x01f8, 0x020f, 0x021f, 0x0224, 0x0231, 0x0235, 0x023e, + // Entry 40 - 7F + 0x0248, 0x0248, 0x0250, 0x0258, 0x0260, 0x0269, 0x0269, 0x0270, + 0x027b, 0x027b, 0x0281, 0x0286, 0x0291, 0x02a6, 0x02c3, 0x02ce, + 0x02d4, 0x02d9, 0x02e3, 0x02ed, 0x02ed, 0x02ed, 0x02f6, 0x02ff, + 0x02ff, 0x0309, 0x0315, 0x0315, 0x0326, 0x0326, 0x0326, 0x032f, + 0x0338, 0x0338, 0x0342, 0x034a, 0x034a, 0x0356, 0x0356, 0x0361, + 0x0361, 0x0361, 0x0361, 0x0361, 0x0367, 0x0367, 0x036c, 0x0374, + 0x037f, 0x0384, 0x0384, 0x038b, 0x038b, 0x038b, 0x0398, 0x03a0, + 0x03b4, 0x03c8, 0x03db, 0x03e2, 0x03f8, 0x040e, 0x0414, 0x041e, + // Entry 80 - BF + 0x0426, 0x0433, 0x0439, 0x0439, 0x0443, 0x0450, 0x0455, 0x0455, + 0x0455, 0x0455, 0x0460, 0x0460, 0x046a, 0x0476, 0x047e, 0x0491, + 0x04ad, 0x04c9, 0x04d1, 0x04d1, 0x04d7, 0x04e3, 0x04ec, 0x04ec, + 0x04f4, 0x04fa, 0x0501, 0x0515, 0x051c, 0x0522, 0x0529, 0x0535, + 0x0535, 0x053e, 0x0541, 0x054f, 0x054f, 0x054f, 0x055b, 0x0574, + 0x0576, 0x0582, 0x0596, 0x059b, 0x05a2, 0x05ba, 0x05c2, 0x05d1, +} // Size: 376 bytes + +const ptScriptStr string = "" + // Size: 1282 bytes + "árabearmiarmênioavésticobalinêsbamumbataquebengalisímbolos blissbopomofo" + + "brahmibraillebuginêsbuhidcakmescrita silábica unificada dos aborígenes c" + + "anadensescarianochamcherokeecirthcópticocipriotacirílicocirílico eslavo " + + "eclesiásticodevanágarideseretdemótico egípciohierático egípciohieróglifo" + + "s egípciosetiópicokhutsuri georgianogeorgianoglagolíticogóticogregogujer" + + "atigurmuquihanbhangulhanhanunoohan simplificadohan tradicionalhebraicohi" + + "raganapahawh hmongsilabários japoneseshúngaro antigoindoitálico antigoja" + + "mojavanêsjaponêskayah likatakanakharoshthikhmerkannadacoreanokthilannala" + + "olatim frakturlatim gaélicolatimlepchalimbulinear Alinear Blisulíciolídi" + + "omandaicomaniqueanohieróglifos maiasmeroítico cursivomeroíticomalaialamo" + + "ngolmoonmeitei mayekbirmanêsn’koogâmicool chikiorkhonoriyaosmaniapérmico" + + " antigophags-paphliphlppahlavi antigofeníciofonético pollardprtirejangro" + + "ngorongorúnicosamaritanosaratisaurashtrasignwritingshavianocingalêssunda" + + "nêssyloti nagrisiríacosiríaco estrangelosiríaco ocidentalsiríaco orienta" + + "ltagbanwatai Lenovo tai luetâmiltavttélugotengwartifinaghtagalothaanatai" + + "landêstibetanougaríticovaivisible speechpersa antigosumério-acadiano cun" + + "eiformeyiherdadonotação matemáticaEmojizsymágrafocomumescrita desconheci" + + "da" + +var ptScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000a, 0x0012, + 0x001b, 0x0023, 0x0028, 0x0028, 0x002f, 0x0036, 0x0036, 0x0045, + 0x004d, 0x0053, 0x005a, 0x0062, 0x0067, 0x006b, 0x00a1, 0x00a8, + 0x00ac, 0x00b4, 0x00b9, 0x00c1, 0x00c9, 0x00d2, 0x00f0, 0x00fb, + 0x0102, 0x0102, 0x0114, 0x0127, 0x013d, 0x013d, 0x0146, 0x0158, + 0x0161, 0x016d, 0x0174, 0x0174, 0x0179, 0x0181, 0x0189, 0x018d, + 0x0193, 0x0196, 0x019d, 0x01ad, 0x01bc, 0x01bc, 0x01c4, 0x01cc, + 0x01cc, 0x01d8, 0x01ed, 0x01fc, 0x0200, 0x020f, 0x0213, 0x021b, + // Entry 40 - 7F + 0x0223, 0x0223, 0x022b, 0x0233, 0x023d, 0x0242, 0x0242, 0x0249, + 0x0250, 0x0250, 0x0254, 0x0259, 0x025c, 0x0269, 0x0277, 0x027c, + 0x0282, 0x0287, 0x028f, 0x0297, 0x029b, 0x029b, 0x02a1, 0x02a7, + 0x02a7, 0x02af, 0x02b9, 0x02b9, 0x02cb, 0x02cb, 0x02dd, 0x02e7, + 0x02ef, 0x02ef, 0x02f5, 0x02f9, 0x02f9, 0x0305, 0x0305, 0x030e, + 0x030e, 0x030e, 0x030e, 0x030e, 0x0314, 0x0314, 0x031c, 0x0324, + 0x032a, 0x032f, 0x032f, 0x0336, 0x0336, 0x0336, 0x0345, 0x034d, + 0x0351, 0x0355, 0x0363, 0x036b, 0x037c, 0x0380, 0x0386, 0x0390, + // Entry 80 - BF + 0x0397, 0x03a1, 0x03a7, 0x03a7, 0x03b1, 0x03bc, 0x03c4, 0x03c4, + 0x03c4, 0x03c4, 0x03cd, 0x03cd, 0x03d6, 0x03e2, 0x03ea, 0x03fd, + 0x040f, 0x0420, 0x0428, 0x0428, 0x042e, 0x043a, 0x0440, 0x0440, + 0x0444, 0x044b, 0x0452, 0x045a, 0x0460, 0x0466, 0x0470, 0x0478, + 0x0478, 0x0482, 0x0485, 0x0493, 0x0493, 0x0493, 0x049f, 0x04bb, + 0x04bd, 0x04c4, 0x04d9, 0x04de, 0x04e2, 0x04e9, 0x04ee, 0x0502, +} // Size: 376 bytes + +const ptPTScriptStr string = "" + // Size: 108 bytes + "arménioegípcio demóticoegípcio hieráticoguzerateindussiloti nagritai let" + + "eluguemojisímbolosnão escrito" + +var ptPTScriptIdx = []uint16{ // 174 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x001a, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x003a, 0x003a, 0x003a, 0x003a, + // Entry 40 - 7F + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + // Entry 80 - BF + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0057, 0x0060, 0x006c, +} // Size: 372 bytes + +const roScriptStr string = "" + // Size: 858 bytes + "arabăarmeanăbalinezăbengalezăbopomofobraillesilabică aborigenă canadiană" + + " unificatăcoptăcipriotăchirilicăchirilică slavonă bisericească vechedeva" + + "nagarimormonădemotică egipteanăhieratică egipteanăhieroglife egipteneeti" + + "opianăgeorgiană bisericeascăgeorgianăglagoliticăgoticăgreacăgujaratigurm" + + "ukhihanbhangulhanhan simplificatăhan tradiționalăebraicăhiraganakatakana" + + " sau hiraganamaghiară vecheindusitalică vechejamojavanezăjaponezăkatakan" + + "akhmerăkannadacoreeanălaoțianălatină Frakturlatină gaelicălatinălineară " + + "Alineară Blidianăhieroglife mayamalayalammongolăbirmanăoriyafenicianărun" + + "icăsingalezăsiriacăsiriacă occidentalăsiriacă orientalătamilăteluguberbe" + + "răthaanathailandezătibetanăpersană vechecuneiformă sumero-akkadianămoște" + + "nitănotație matematicăemojisimbolurinescrisăcomunăscriere necunoscută" + +var roScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000e, + 0x000e, 0x0017, 0x0017, 0x0017, 0x0017, 0x0021, 0x0021, 0x0021, + 0x0029, 0x0029, 0x0030, 0x0030, 0x0030, 0x0030, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x0060, 0x0069, 0x0073, 0x009a, 0x00a4, + 0x00ac, 0x00ac, 0x00c0, 0x00d5, 0x00e8, 0x00e8, 0x00f2, 0x010a, + 0x0114, 0x0120, 0x0127, 0x0127, 0x012e, 0x0136, 0x013e, 0x0142, + 0x0148, 0x014b, 0x014b, 0x015c, 0x016e, 0x016e, 0x0176, 0x017e, + 0x017e, 0x017e, 0x0193, 0x01a2, 0x01a7, 0x01b5, 0x01b9, 0x01c2, + // Entry 40 - 7F + 0x01cb, 0x01cb, 0x01cb, 0x01d3, 0x01d3, 0x01da, 0x01da, 0x01e1, + 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01f4, 0x0203, 0x0213, 0x021a, + 0x021a, 0x021a, 0x0224, 0x022e, 0x022e, 0x022e, 0x022e, 0x0236, + 0x0236, 0x0236, 0x0236, 0x0236, 0x0245, 0x0245, 0x0245, 0x0245, + 0x024e, 0x024e, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x025e, + 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, + 0x025e, 0x0263, 0x0263, 0x0263, 0x0263, 0x0263, 0x0263, 0x0263, + 0x0263, 0x0263, 0x0263, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, + // Entry 80 - BF + 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, + 0x0274, 0x0274, 0x027e, 0x027e, 0x027e, 0x027e, 0x0286, 0x0286, + 0x029b, 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02b5, 0x02b5, + 0x02b5, 0x02bb, 0x02bb, 0x02c3, 0x02c3, 0x02c9, 0x02d5, 0x02de, + 0x02de, 0x02de, 0x02de, 0x02de, 0x02de, 0x02de, 0x02ec, 0x0309, + 0x0309, 0x0314, 0x0328, 0x032d, 0x0336, 0x033f, 0x0346, 0x035a, +} // Size: 376 bytes + +const ruScriptStr string = "" + // Size: 3416 bytes + "афакаарабицаарамейскаяармянскаяавестийскаябалийскаябамумбасса (вах)батак" + + "скаябенгальскаяблиссимволикабопомофобрахмиБрайлябугинизийскаябухидчакми" + + "йскаяканадское слоговое письмокарийскаячамскаячерокикирткоптскаякипрска" + + "якириллицастарославянскаядеванагаридезеретдуплоянская скорописьегипетск" + + "ая демотическаяегипетская иератическаяегипетская иероглифическаяэфиопск" + + "аягрузинская хуцуригрузинскаяглаголицаготскаягрантхагреческаягуджаратиг" + + "урмукхиханьбхангылькитайскаяханунуупрощенная китайскаятрадиционная кита" + + "йскаяеврейскаяхираганалувийские иероглифыпахау хмонгкатакана или хирага" + + "настаровенгерскаяхараппская (письменность долины Инда)староитальянскаяд" + + "жамояванскаяяпонскаячжурчжэньскаякайакатаканакхароштхикхмерскаяходжикик" + + "аннадакорейскаякпеллекайтхиланналаосскаялатинская фрактурагэльская лати" + + "нскаялатиницалепхалимбулинейное письмо Алинейное письмо Блисуломалициан" + + "лидийскаямандейскаяманихейскаямайямендемероитская курсивнаямероитскаяма" + + "лаяламмонгольскаяазбука мунамроманипуримьянманскаясеверноаравийскоенаба" + + "тейскаянаси гебанконюй-шуогамическаяол чикиорхоно-енисейскаяорияосманск" + + "аяпальмирыдревнепермскаяпагспапехлевийскаяпахлави псалтирнаяпахлави кни" + + "жнаяфиникийскаяполлардовская фонетикапарфянскаяреджангскаяронго-ронгору" + + "ническаясамаритянскаясаратистароюжноарабскаясаураштраязык знаковалфавит" + + " Шоушарадакхудавадисингальскаясора-сонпенгсунданскаясилоти нагрисирийска" + + "ясирийская эстрангелозападносирийскаявосточно-сирийскаятагбанватакритай" + + "ский леновый тайский летамильскаятангутское менятай-вьеттелугутенгварск" + + "аядревнеливийскаятагалогтанатайскаятибетскаятирхутаугаритскаявайскаявид" + + "имая речьваранг-кшитиволеаистароперсидскаяшумеро-аккадская клинописьиун" + + "аследованнаяматематические обозначенияэмодзисимволыбесписьменныйобщепри" + + "нятаянеизвестная письменность" + +var ruScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, 0x0018, 0x002c, 0x003e, + 0x0054, 0x0066, 0x0070, 0x0083, 0x0095, 0x00ab, 0x00ab, 0x00c5, + 0x00d5, 0x00e1, 0x00ed, 0x0107, 0x0111, 0x0125, 0x0155, 0x0167, + 0x0175, 0x0181, 0x0189, 0x0199, 0x01a9, 0x01bb, 0x01d9, 0x01ed, + 0x01fb, 0x0224, 0x0251, 0x027e, 0x02b1, 0x02b1, 0x02c3, 0x02e4, + 0x02f8, 0x030a, 0x0318, 0x0326, 0x0338, 0x034a, 0x035a, 0x0364, + 0x0372, 0x0384, 0x0390, 0x03b7, 0x03e2, 0x03e2, 0x03f4, 0x0404, + 0x0429, 0x043e, 0x0466, 0x0484, 0x04c9, 0x04e9, 0x04f3, 0x0503, + // Entry 40 - 7F + 0x0513, 0x052d, 0x0535, 0x0545, 0x0557, 0x0569, 0x0577, 0x0585, + 0x0597, 0x05a3, 0x05af, 0x05b9, 0x05c9, 0x05ec, 0x060f, 0x061f, + 0x0629, 0x0633, 0x0653, 0x0673, 0x067b, 0x0683, 0x068f, 0x06a1, + 0x06a1, 0x06b5, 0x06cb, 0x06cb, 0x06d3, 0x06dd, 0x0704, 0x0718, + 0x0728, 0x0728, 0x073e, 0x0753, 0x0759, 0x0769, 0x0769, 0x077f, + 0x07a1, 0x07b7, 0x07b7, 0x07c8, 0x07ce, 0x07d9, 0x07ef, 0x07fc, + 0x081d, 0x0825, 0x0825, 0x0837, 0x0847, 0x0847, 0x0863, 0x086f, + 0x0887, 0x08aa, 0x08c7, 0x08dd, 0x0908, 0x091c, 0x0932, 0x0947, + // Entry 80 - BF + 0x095b, 0x0975, 0x0981, 0x09a3, 0x09b5, 0x09ca, 0x09df, 0x09eb, + 0x09eb, 0x09fd, 0x0a13, 0x0a2a, 0x0a3e, 0x0a55, 0x0a67, 0x0a8e, + 0x0aae, 0x0ad1, 0x0ae1, 0x0aeb, 0x0afe, 0x0b1c, 0x0b30, 0x0b4d, + 0x0b5c, 0x0b68, 0x0b7e, 0x0b9c, 0x0baa, 0x0bb2, 0x0bc0, 0x0bd2, + 0x0be0, 0x0bf4, 0x0c02, 0x0c19, 0x0c30, 0x0c3c, 0x0c5a, 0x0c8c, + 0x0c8e, 0x0caa, 0x0cdd, 0x0ce9, 0x0cf7, 0x0d11, 0x0d29, 0x0d58, +} // Size: 376 bytes + +const siScriptStr string = "" + // Size: 940 bytes + "අරාබිආර්මේනියානුබෙංගාලිබොපොමොෆෝබ්\u200dරේල්සිරිලික්දේවනාගරීඉතියෝපියානුජෝ" + + "ර්ජියානුග්\u200dරීකගුජරාටිගුර්මුඛිහැන්ඩ්බ්හැන්ගුල්හන්සුළුකළ හෑන්සම්ප්" + + "\u200dරදායික හෑන්හීබෲහිරඟනාජෑපනීස් සිලබරීස්ජාමොජපන්කතකනාකමර්කණ්ණඩකොරියාන" + + "ුලාඕලතින්මලයාලම්මොන්ගෝලියානුමියන්මාරඔරියාසිංහලදෙමළතෙළිඟුතානතායිටි" + + "\u200dබෙට්ගනිතමය සංකේතඉමොජිසංකේතඅලිඛිතපොදු.නොදත් අක්ෂර මාලාව" + +var siScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x000f, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0045, 0x0045, 0x0045, + 0x005d, 0x005d, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x008a, 0x008a, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00c3, 0x00c3, + 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00f3, 0x0108, 0x0120, 0x0138, + 0x0150, 0x0159, 0x0159, 0x0178, 0x01a9, 0x01a9, 0x01b5, 0x01c7, + 0x01c7, 0x01c7, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x0201, 0x0201, + // Entry 40 - 7F + 0x020d, 0x020d, 0x020d, 0x021c, 0x021c, 0x0228, 0x0228, 0x0237, + 0x024f, 0x024f, 0x024f, 0x024f, 0x0258, 0x0258, 0x0258, 0x0267, + 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, + 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, + 0x027c, 0x027c, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02b8, + 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, + 0x02b8, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, + 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, + // Entry 80 - BF + 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, + 0x02c7, 0x02c7, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, + 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02e2, 0x02e2, + 0x02e2, 0x02f4, 0x02f4, 0x02f4, 0x02f4, 0x02fd, 0x0309, 0x031e, + 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, + 0x031e, 0x031e, 0x0340, 0x034f, 0x035e, 0x0370, 0x037d, 0x03ac, +} // Size: 376 bytes + +const skScriptStr string = "" + // Size: 540 bytes + "arabskéarménskebalijskýbengálskebopomofobraillovocyrilikadévanágaríegypt" + + "ské hieroglyfyetiópskegruzínskehlaholikagotickýgréckegudžarátígurmukhičí" + + "nske a bopomofohangulčínskečínske zjednodušenéčínske tradičnéhebrejskéhi" + + "raganakanajamojaponskékatakanakhmérskekannadskékórejskélaoskélatinkaline" + + "árna Alineárna Bmayské hieroglyfymalajálamskemongolskébarmskéuríjskeosm" + + "anskýRunové písmosinhálsketamilskételugskétánathajskétibetskématematický" + + " zápisemodžisymbolybez zápisuvšeobecnéneznáme písmo" + +var skScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0011, + 0x0011, 0x001a, 0x001a, 0x001a, 0x001a, 0x0024, 0x0024, 0x0024, + 0x002c, 0x002c, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003d, 0x003d, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x005e, 0x005e, 0x0067, 0x0067, + 0x0071, 0x007a, 0x0082, 0x0082, 0x0089, 0x0095, 0x009d, 0x00b0, + 0x00b6, 0x00be, 0x00be, 0x00d5, 0x00e8, 0x00e8, 0x00f2, 0x00fa, + 0x00fa, 0x00fa, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x0102, 0x0102, + // Entry 40 - 7F + 0x010b, 0x010b, 0x010b, 0x0113, 0x0113, 0x011c, 0x011c, 0x0126, + 0x0130, 0x0130, 0x0130, 0x0130, 0x0137, 0x0137, 0x0137, 0x013e, + 0x013e, 0x013e, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0166, 0x0166, 0x0166, 0x0166, + 0x0173, 0x0173, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x0185, + 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, + 0x0185, 0x018d, 0x018d, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, + 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, + // Entry 80 - BF + 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01a4, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, + 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01b7, 0x01b7, + 0x01b7, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c5, 0x01cd, 0x01d6, + 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, + 0x01d6, 0x01d6, 0x01e9, 0x01f0, 0x01f7, 0x0202, 0x020d, 0x021c, +} // Size: 376 bytes + +const slScriptStr string = "" + // Size: 1495 bytes + "arabskiimperialno-aramejskiarmenskiavestanskibalijskibataškibengalskizna" + + "kovna pisava Blissbopomofobramanskibraillova pisavabuginskibuhidskipoeno" + + "tena zlogovna pisava kanadskih staroselcevChamčerokeškikirtkoptskiciprsk" + + "icirilicastarocerkvenoslovanska cirilicadevanagarščicafonetska pisava de" + + "seretdemotska egipčanska pisavahieratska egipčanska pisavaegipčanska sli" + + "kovna pisavaetiopskicerkvenogruzijskigruzijskiglagoliškigotskigrškigudža" + + "ratskigurmukiHanbhangulkanjihanunskipoenostavljena pisava hantradicional" + + "na pisava hanhebrejskihiraganapahavhmonska zlogovna pisavakatakana ali h" + + "iraganastaroogrskiinduškistaroitalskiJamojavanskijaponskikarenskikatakan" + + "agandarskikmerskikanadskikorejskikajatskilaoškifrakturagelski latiničnil" + + "atinicalepškilimbuškilinearna pisava Alinearna pisava Blicijskilidijskim" + + "andanskimanihejskimajevska slikovna pisavameroitskimalajalamskimongolska" + + "Moonova pisava za slepemanipurskimjanmarskiogamskisantalskiorkonskiorijs" + + "kiosmanskistaropermijskipagpajskivrezani napisi pahlavipsalmski pahlavik" + + "njižno palavanskifeničanskiPollardova fonetska pisavarongorongorunskisam" + + "aritanskisaratskiznakovna pisavašojevskisinhalskisundanskisiletsko-nagar" + + "ijskisirijskisirska abeceda estrangelozahodnosirijskivzhodnosirijskitagb" + + "anskitamilskitajsko-vietnamskiteluškitengvarskitifinajskitagaloškitanajs" + + "kitajskitibetanskiugaritskizlogovna pisava vaividni govorstaroperzijskis" + + "umersko-akadski klinopispodedovanmatematična znamenjasimbolinenapisanosp" + + "lošnoneznan ali neveljaven zapis" + +var slScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x001b, 0x0023, + 0x002d, 0x0035, 0x0035, 0x0035, 0x003d, 0x0046, 0x0046, 0x005b, + 0x0063, 0x006c, 0x007c, 0x0084, 0x008c, 0x008c, 0x00bb, 0x00bb, + 0x00bf, 0x00ca, 0x00ce, 0x00d5, 0x00dc, 0x00e4, 0x0103, 0x0113, + 0x012a, 0x012a, 0x0145, 0x0161, 0x017c, 0x017c, 0x0184, 0x0195, + 0x019e, 0x01a9, 0x01af, 0x01af, 0x01b5, 0x01c1, 0x01c8, 0x01cc, + 0x01d2, 0x01d7, 0x01df, 0x01f8, 0x0210, 0x0210, 0x0219, 0x0221, + 0x0221, 0x023d, 0x0252, 0x025d, 0x0265, 0x0271, 0x0275, 0x027d, + // Entry 40 - 7F + 0x0285, 0x0285, 0x028d, 0x0295, 0x029e, 0x02a5, 0x02a5, 0x02ad, + 0x02b5, 0x02b5, 0x02bd, 0x02bd, 0x02c4, 0x02cc, 0x02dd, 0x02e5, + 0x02ec, 0x02f5, 0x0306, 0x0317, 0x0317, 0x0317, 0x031f, 0x0327, + 0x0327, 0x0330, 0x033a, 0x033a, 0x0352, 0x0352, 0x0352, 0x035b, + 0x0367, 0x0367, 0x0370, 0x0387, 0x0387, 0x0391, 0x0391, 0x039b, + 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x03a2, 0x03ab, + 0x03b3, 0x03ba, 0x03ba, 0x03c2, 0x03c2, 0x03c2, 0x03d0, 0x03d9, + 0x03ef, 0x03ff, 0x0412, 0x041d, 0x0437, 0x0437, 0x0437, 0x0441, + // Entry 80 - BF + 0x0447, 0x0453, 0x045b, 0x045b, 0x045b, 0x046a, 0x0473, 0x0473, + 0x0473, 0x0473, 0x047c, 0x047c, 0x0485, 0x0498, 0x04a0, 0x04b9, + 0x04c8, 0x04d7, 0x04e0, 0x04e0, 0x04e0, 0x04e0, 0x04e8, 0x04e8, + 0x04f9, 0x0501, 0x050b, 0x0515, 0x051f, 0x0527, 0x052d, 0x0537, + 0x0537, 0x0540, 0x0553, 0x055e, 0x055e, 0x055e, 0x056c, 0x0585, + 0x0585, 0x058e, 0x05a3, 0x05a3, 0x05aa, 0x05b4, 0x05bc, 0x05d7, +} // Size: 376 bytes + +const sqScriptStr string = "" + // Size: 355 bytes + "arabikarmenbengalbopomofbrailishtcirilikdevanagaretiopikgjeorgjiangrekgu" + + "xharatgurmukhanbikhangulhanhan i thjeshtuarhan tradicionalhebraikhiragan" + + "alfabet rrokjesor japonezjamosishtjaponezkatakankmerkanadkoreanlaosishtl" + + "atinmalajalammongolbirmanorijasinhaltamiltelugtanishttajlandeztibetishts" + + "imbole matematikoreemojime simbolei pashkruari zakonshëmi panjohur" + +var sqScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000b, + 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x0011, 0x0011, 0x0011, + 0x0018, 0x0018, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0028, 0x0028, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0038, 0x0038, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0046, 0x004e, 0x0054, 0x005a, + 0x0060, 0x0063, 0x0063, 0x0073, 0x0082, 0x0082, 0x0089, 0x0090, + 0x0090, 0x0090, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00b2, 0x00b2, + // Entry 40 - 7F + 0x00b9, 0x00b9, 0x00b9, 0x00c0, 0x00c0, 0x00c4, 0x00c4, 0x00c9, + 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00d7, 0x00d7, 0x00d7, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, + 0x00e5, 0x00e5, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00f1, + 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, + 0x00f1, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + // Entry 80 - BF + 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f6, 0x00f6, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x0101, 0x0101, + 0x0101, 0x0106, 0x0106, 0x0106, 0x0106, 0x010d, 0x0116, 0x011f, + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x0133, 0x0138, 0x0142, 0x014d, 0x0159, 0x0163, +} // Size: 376 bytes + +const srScriptStr string = "" + // Size: 3732 bytes + "арапско писмоимперијско арамејско писмојерменско писмоавестанско писмоба" + + "лијско писмобатак писмобенгалско писмоблисимболично писмобопомофо писмо" + + "браманско писмоБрајево писмобугинско писмобухидско писмочакманско писмо" + + "уједињени канадски абориџински силабицикаријско писмочамско писмоЧероки" + + "цирт писмокоптичко писмокипарско писмоћирилицаСтарословенска црквена ћи" + + "рилицадеванагариДезеретегипатско народно писмоегипатско хијератско писм" + + "оегипатски хијероглифиетиопско писмогрузијско кхутсури писмогрузијско п" + + "исмоглагољицаГотикагрчко писмогуџаратско писмогурмуки писмоханбхангулха" + + "нханунопоједностављено хан писмотрадиционално хан писмохебрејско писмох" + + "ираганапахав хмонг писмојапанска слоговна писмастаромађарско писмоиндуш" + + "ко писмостари италикџамојаванско писмојапанско писмокајах-ли писмокатак" + + "анакарошти писмокмерско писмоканада писмокорејско писмокаитиланна писмо" + + "лаошко писмолатиница (фрактур варијанта)галска латиницалатиницалепча пи" + + "смолимбу писмолинеарно А писмолинеарно Б писмолисијско писмолидијско пи" + + "смомандеанско писмоманихејско писмомајански хијероглифимероитик писмома" + + "лајаламско писмомонголско писмомесечево писмомеитеи мајек писмомијанмар" + + "ско писмон’ко писмоогамско писмоол чики писмоорконско писмооријанско пи" + + "смоосмањанско писмостаро пермикско писмопагс-па писмописани пахлавипсал" + + "тер пахлавипахлави писмоФеничанско писмопоралд фонетско писмописани пар" + + "тианрејанг писморонгоронго писморунско писмосамаританско писмосарати пи" + + "смосаураштра писмознаковно писмошавијанско писмосинхалско писмосунданск" + + "о писмосилоти нагри писмосиријско писмосиријско естрангело писмозападно" + + "сиријско писмописмо источне Сиријетагбанва писмотаи ле писмонови таи лу" + + "етамилско писмотаи виет писмотелугу писмотенгвар писмотифинаг писмоТага" + + "логтана писмотајландско писмотибетанско писмоугаритско писмоваи писмови" + + "дљиви говорстароперсијско писмосумерско-акадско кунеиформ писмоји писмо" + + "наследно писмоматематичка нотацијаемоџисимболинеписани језикзаједничко " + + "писмонепознато писмо" + +var srScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0019, 0x004b, 0x0068, + 0x0087, 0x00a2, 0x00a2, 0x00a2, 0x00b7, 0x00d4, 0x00d4, 0x00f9, + 0x0114, 0x0131, 0x014a, 0x0165, 0x0180, 0x019d, 0x01e8, 0x0203, + 0x021a, 0x0226, 0x0239, 0x0254, 0x026f, 0x027f, 0x02bb, 0x02cf, + 0x02dd, 0x02dd, 0x0309, 0x033b, 0x0364, 0x0364, 0x037f, 0x03ad, + 0x03ca, 0x03dc, 0x03e8, 0x03e8, 0x03fd, 0x041c, 0x0435, 0x043d, + 0x0449, 0x044f, 0x045b, 0x048b, 0x04b7, 0x04b7, 0x04d4, 0x04e4, + 0x04e4, 0x0504, 0x0530, 0x0555, 0x056e, 0x0585, 0x058d, 0x05a8, + // Entry 40 - 7F + 0x05c3, 0x05c3, 0x05dd, 0x05ed, 0x0606, 0x061f, 0x061f, 0x0636, + 0x0651, 0x0651, 0x065b, 0x0670, 0x0687, 0x06bb, 0x06d8, 0x06e8, + 0x06fd, 0x0712, 0x0730, 0x074e, 0x074e, 0x074e, 0x0769, 0x0784, + 0x0784, 0x07a3, 0x07c2, 0x07c2, 0x07e9, 0x07e9, 0x07e9, 0x0804, + 0x0827, 0x0827, 0x0844, 0x085f, 0x085f, 0x0881, 0x0881, 0x08a2, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08b6, 0x08b6, 0x08cf, 0x08e7, + 0x0902, 0x091f, 0x091f, 0x093e, 0x093e, 0x093e, 0x0966, 0x097e, + 0x0999, 0x09b6, 0x09cf, 0x09ee, 0x0a16, 0x0a31, 0x0a48, 0x0a67, + // Entry 80 - BF + 0x0a7e, 0x0aa1, 0x0ab8, 0x0ab8, 0x0ad5, 0x0af0, 0x0b0f, 0x0b0f, + 0x0b0f, 0x0b0f, 0x0b2c, 0x0b2c, 0x0b49, 0x0b6b, 0x0b86, 0x0bb6, + 0x0bdf, 0x0c05, 0x0c20, 0x0c20, 0x0c36, 0x0c4c, 0x0c67, 0x0c67, + 0x0c81, 0x0c98, 0x0cb1, 0x0cca, 0x0cd8, 0x0ceb, 0x0d0a, 0x0d29, + 0x0d29, 0x0d46, 0x0d57, 0x0d70, 0x0d70, 0x0d70, 0x0d97, 0x0dd4, + 0x0de3, 0x0dfe, 0x0e25, 0x0e2f, 0x0e3d, 0x0e58, 0x0e77, 0x0e94, +} // Size: 376 bytes + +const srLatnScriptStr string = "" + // Size: 1974 bytes + "arapsko pismoimperijsko aramejsko pismojermensko pismoavestansko pismoba" + + "lijsko pismobatak pismobengalsko pismoblisimbolično pismobopomofo pismob" + + "ramansko pismoBrajevo pismobuginsko pismobuhidsko pismočakmansko pismouj" + + "edinjeni kanadski aboridžinski silabicikarijsko pismočamsko pismoČerokic" + + "irt pismokoptičko pismokiparsko pismoćirilicaStaroslovenska crkvena ćiri" + + "licadevanagariDezeretegipatsko narodno pismoegipatsko hijeratsko pismoeg" + + "ipatski hijeroglifietiopsko pismogruzijsko khutsuri pismogruzijsko pismo" + + "glagoljicaGotikagrčko pismogudžaratsko pismogurmuki pismohanbhangulhanha" + + "nunopojednostavljeno han pismotradicionalno han pismohebrejsko pismohira" + + "ganapahav hmong pismojapanska slogovna pismastaromađarsko pismoinduško p" + + "ismostari italikdžamojavansko pismojapansko pismokajah-li pismokatakanak" + + "arošti pismokmersko pismokanada pismokorejsko pismokaitilanna pismolaošk" + + "o pismolatinica (fraktur varijanta)galska latinicalatinicalepča pismolim" + + "bu pismolinearno A pismolinearno B pismolisijsko pismolidijsko pismomand" + + "eansko pismomanihejsko pismomajanski hijeroglifimeroitik pismomalajalams" + + "ko pismomongolsko pismomesečevo pismomeitei majek pismomijanmarsko pismo" + + "n’ko pismoogamsko pismool čiki pismoorkonsko pismoorijansko pismoosmanja" + + "nsko pismostaro permiksko pismopags-pa pismopisani pahlavipsalter pahlav" + + "ipahlavi pismoFeničansko pismoporald fonetsko pismopisani partianrejang " + + "pismorongorongo pismorunsko pismosamaritansko pismosarati pismosauraštra" + + " pismoznakovno pismošavijansko pismosinhalsko pismosundansko pismosiloti" + + " nagri pismosirijsko pismosirijsko estrangelo pismozapadnosirijsko pismo" + + "pismo istočne Sirijetagbanva pismotai le pismonovi tai luetamilsko pismo" + + "tai viet pismotelugu pismotengvar pismotifinag pismoTagalogtana pismotaj" + + "landsko pismotibetansko pismougaritsko pismovai pismovidljivi govorstaro" + + "persijsko pismosumersko-akadsko kuneiform pismoji pismonasledno pismomat" + + "ematička notacijaemodžisimbolinepisani jezikzajedničko pismonepoznato pi" + + "smo" + +var srLatnScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0036, + 0x0046, 0x0054, 0x0054, 0x0054, 0x005f, 0x006e, 0x006e, 0x0082, + 0x0090, 0x009f, 0x00ac, 0x00ba, 0x00c8, 0x00d8, 0x0102, 0x0110, + 0x011d, 0x0124, 0x012e, 0x013d, 0x014b, 0x0154, 0x0174, 0x017e, + 0x0185, 0x0185, 0x019c, 0x01b6, 0x01cb, 0x01cb, 0x01d9, 0x01f1, + 0x0200, 0x020a, 0x0210, 0x0210, 0x021c, 0x022e, 0x023b, 0x023f, + 0x0245, 0x0248, 0x024e, 0x0268, 0x027f, 0x027f, 0x028e, 0x0296, + 0x0296, 0x02a7, 0x02be, 0x02d2, 0x02e0, 0x02ec, 0x02f2, 0x0300, + // Entry 40 - 7F + 0x030e, 0x030e, 0x031c, 0x0324, 0x0332, 0x033f, 0x033f, 0x034b, + 0x0359, 0x0359, 0x035e, 0x0369, 0x0376, 0x0392, 0x03a1, 0x03a9, + 0x03b5, 0x03c0, 0x03d0, 0x03e0, 0x03e0, 0x03e0, 0x03ee, 0x03fc, + 0x03fc, 0x040c, 0x041c, 0x041c, 0x0430, 0x0430, 0x0430, 0x043e, + 0x0450, 0x0450, 0x045f, 0x046e, 0x046e, 0x0480, 0x0480, 0x0491, + 0x0491, 0x0491, 0x0491, 0x0491, 0x049d, 0x049d, 0x04aa, 0x04b8, + 0x04c6, 0x04d5, 0x04d5, 0x04e6, 0x04e6, 0x04e6, 0x04fb, 0x0508, + 0x0516, 0x0525, 0x0532, 0x0543, 0x0558, 0x0566, 0x0572, 0x0582, + // Entry 80 - BF + 0x058e, 0x05a0, 0x05ac, 0x05ac, 0x05bc, 0x05ca, 0x05db, 0x05db, + 0x05db, 0x05db, 0x05ea, 0x05ea, 0x05f9, 0x060b, 0x0619, 0x0632, + 0x0647, 0x065c, 0x066a, 0x066a, 0x0676, 0x0682, 0x0690, 0x0690, + 0x069e, 0x06aa, 0x06b7, 0x06c4, 0x06cb, 0x06d5, 0x06e5, 0x06f5, + 0x06f5, 0x0704, 0x070d, 0x071b, 0x071b, 0x071b, 0x072f, 0x074f, + 0x0757, 0x0765, 0x077a, 0x0781, 0x0788, 0x0796, 0x07a7, 0x07b6, +} // Size: 376 bytes + +const svScriptStr string = "" + // Size: 1720 bytes + "afakiskakaukasiska albanskaahomarabiskaimperisk arameiskaarmeniskaavesti" + + "skabalinesiskabamunskabassaiska vahbatakbengaliskabhaiksukiskablissymbol" + + "erbopomofobramipunktskriftbuginesiskabuhidchakmakanadensiska stavelsetec" + + "kenkariskachamcherokeecirtkoptiskacypriotiskakyrilliskafornkyrkoslavisk " + + "kyrilliskadevanagarideseretDuployéstenografiskademotiskahieratiskaegypti" + + "ska hieroglyferelbasiskaetiopiskakutsurigeorgiskaglagolitiskagotiskagamm" + + "altamilskagrekiskagujaratigurmukhihan med bopomofohangulhanhanunó’ofören" + + "klade han-teckentraditionella han-teckenhatranhebreiskahiraganahittitisk" + + "a hieroglyferpahaw mongkatakana/hiraganafornungerskaindusfornitaliskajam" + + "ojavanskajapanskajurchenskakaya likatakanakharoshtikhmeriskakhojkiskakan" + + "aresiskakoreanskakpellékaithiskalannalaotiskafrakturlatingaeliskt latinl" + + "atinskaronglimbulinjär Alinjär BFraserlomalykiskalydiskamahajaniskamanda" + + "éiskamanikeanskamarchenskamayahieroglyfermendekursiv-meroitiskameroitis" + + "kamalayalammodiskamongoliskamoonmrumeitei-mayekmultaniskaburmesiskafornn" + + "ordarabiskanabateiskanewariskanaxi geban-kånüshuoghamol-chikiorkonoriyao" + + "smanjapalmyreniskaPau Cin Hau-skriftfornpermiskaphags-patidig pahlavipsa" + + "ltaren-pahlavibokpahlavifeniciskapollardteckentidig parthianskarejangron" + + "go-rongorunorsamaritiskasaratifornsydarabiskasaurashtrateckningsskriftsh" + + "awiskasharadasiddhamskasindhiskasingalesiskasora sompengsundanesiskasylo" + + "ti nagrisyriskaestrangelosyriskavästsyriskaöstsyriskatagbanwatakritiskat" + + "ai letai luetamilskatangutiskatai viettelugutengwartifinaghiskatagalogta" + + "anathailändskatibetanskatirhutaugaritiskavajsynligt talvarang kshitiwole" + + "aifornpersiskasumero-akkadisk kilskriftyiärvdamatematisk notationemojisy" + + "mboleroskrivet språkgemensammaokänt skriftsystem" + +var svScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x001b, 0x001f, 0x0027, 0x0039, 0x0042, + 0x004b, 0x0056, 0x005e, 0x006b, 0x0070, 0x007a, 0x0086, 0x0092, + 0x009a, 0x009f, 0x00aa, 0x00b5, 0x00ba, 0x00c0, 0x00db, 0x00e2, + 0x00e6, 0x00ee, 0x00f2, 0x00fa, 0x0105, 0x010f, 0x012a, 0x0134, + 0x013b, 0x0150, 0x0159, 0x0163, 0x0178, 0x0181, 0x018a, 0x0191, + 0x019a, 0x01a6, 0x01ad, 0x01bb, 0x01c3, 0x01cb, 0x01d3, 0x01e3, + 0x01e9, 0x01ec, 0x01f7, 0x020d, 0x0225, 0x022b, 0x0234, 0x023c, + 0x0252, 0x025c, 0x026d, 0x0279, 0x027e, 0x028a, 0x028e, 0x0296, + // Entry 40 - 7F + 0x029e, 0x02a8, 0x02af, 0x02b7, 0x02c0, 0x02c9, 0x02d2, 0x02dd, + 0x02e6, 0x02ed, 0x02f6, 0x02fb, 0x0303, 0x030f, 0x031d, 0x0325, + 0x0329, 0x032e, 0x0337, 0x0340, 0x0346, 0x034a, 0x0351, 0x0358, + 0x0363, 0x036e, 0x0379, 0x0383, 0x0392, 0x0397, 0x03a8, 0x03b2, + 0x03bb, 0x03c2, 0x03cc, 0x03d0, 0x03d3, 0x03df, 0x03e9, 0x03f3, + 0x0403, 0x040d, 0x0416, 0x041f, 0x0424, 0x042a, 0x042f, 0x0437, + 0x043c, 0x0441, 0x0441, 0x0448, 0x0454, 0x0466, 0x0472, 0x047a, + 0x0487, 0x0498, 0x04a2, 0x04ab, 0x04b8, 0x04c9, 0x04cf, 0x04da, + // Entry 80 - BF + 0x04df, 0x04ea, 0x04f0, 0x04ff, 0x0509, 0x0518, 0x0520, 0x0527, + 0x0531, 0x053a, 0x0546, 0x0552, 0x055e, 0x056a, 0x0571, 0x0582, + 0x058e, 0x0599, 0x05a1, 0x05ab, 0x05b1, 0x05b8, 0x05c0, 0x05ca, + 0x05d2, 0x05d8, 0x05df, 0x05eb, 0x05f2, 0x05f7, 0x0603, 0x060d, + 0x0614, 0x061e, 0x0621, 0x062c, 0x0639, 0x063f, 0x064b, 0x0664, + 0x0666, 0x066c, 0x067f, 0x0684, 0x068c, 0x069b, 0x06a5, 0x06b8, +} // Size: 376 bytes + +const swScriptStr string = "" + // Size: 392 bytes + "KiarabuKiarmeniaKibengaliKibopomofoBrailleKisirilikiKidevanagariKiethiop" + + "iaKijojiaKigirikiKigujaratiKigurmukhiHanbKihangulKihanKihan RahisiKihan " + + "cha JadiKiebraniaHiraganaHati za KijapaniJamoKijapaniKikatakanaKikambodi" + + "aKikannadaKikoreaKilaosiKilatiniKimalayalamKimongoliaMyamaKioriyaKisinha" + + "laKitamilKiteluguKithaanaKithaiKitibetiHati za kihisabatiEmojiAlamaHaija" + + "andikwaKawaidaHati isiyojulikana" + +var swScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0019, 0x0019, 0x0019, + 0x0023, 0x0023, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0034, 0x0034, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x004a, 0x004a, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0059, 0x0063, 0x006d, 0x0071, + 0x0079, 0x007e, 0x007e, 0x008a, 0x0098, 0x0098, 0x00a1, 0x00a9, + 0x00a9, 0x00a9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00bd, 0x00bd, + // Entry 40 - 7F + 0x00c5, 0x00c5, 0x00c5, 0x00cf, 0x00cf, 0x00d9, 0x00d9, 0x00e2, + 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00f0, 0x00f0, 0x00f0, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x0103, 0x0103, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + // Entry 80 - BF + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, + 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0129, 0x0129, + 0x0129, 0x0131, 0x0131, 0x0131, 0x0131, 0x0139, 0x013f, 0x0147, + 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, + 0x0147, 0x0147, 0x0159, 0x015e, 0x0163, 0x016f, 0x0176, 0x0188, +} // Size: 376 bytes + +const taScriptStr string = "" + // Size: 3954 bytes + "அரபிக்இம்பேரியல் அரமெய்க்அர்மேனியன்அவெஸ்தான்பாலினீஸ்பாடாக்வங்காளம்ப்லிஸ்" + + "ஸிமிபால்ஸ்போபோமோஃபோபிரம்மிபிரெயில்புகினீஸ்புகித்சக்மாயுனிஃபைடு கனடியன்" + + " அபொரிஜினல் சிலபிக்ஸ்கரியன்சாம்செரோக்கிகிர்த்காப்டிக்சைப்ரியாட்சிரிலிக்ப" + + "ழைய சர்ச் ஸ்லவோனிக் சிரிலிக்தேவநாகரிடெசராட்எகிப்தியன் டெமோட்டிக்எகிப்த" + + "ியன் ஹைரேட்டிக்எகிப்தியன் ஹைரோகிளிப்ஸ்எத்தியோபிக்ஜியார்ஜியன் குட்சுரிஜ" + + "ார்ஜியன்க்லாகோலிடிக்கோதிக்கிரேக்கம்குஜராத்திகுர்முகிஹன்ப்ஹங்குல்ஹன்ஹனு" + + "னூஎளிதாக்கப்பட்ட ஹன்பாரம்பரிய ஹன்ஹீப்ருஹிராகானாபஹாவ் மாங்க்ஜப்பானிய எழ" + + "ுத்துருக்கள்பழைய ஹங்கேரியன்சிந்துபழைய இத்தாலிஜமோஜாவனீஸ்ஜப்பானியம்கயாஹ்" + + " லீகதகானாகரோஷ்டிகமெர்கன்னடம்கொரியன்காய்திலன்னாலாவோஃப்ரக்டூர் லெத்தின்கேல" + + "ிக் லெத்தின்லத்தின்லெப்சாலிம்புலினியர் ஏலினியர் பிலிசியன்லிடியன்மேன்டி" + + "யன்மனிசெய்ன்மயான் ஹைரோகிளிப்மெராய்டிக்மலையாளம்மங்கோலியன்மூன்மெய்தெய் ம" + + "யக்மியான்மர்என்‘கோஒகாம்ஒல் சிக்கிஆர்கான்ஒடியாஒஸ்மான்யாபழைய பெர்மிக்பக்" + + "ஸ்-பாஇன்ஸ்கிரிப்ஷனல் பஹலவிசால்டர் பஹலவிபுக் பஹலவிஃபோனேஷியன்போலார்ட் ஃப" + + "ொனெட்டிக்இன்ஸ்கிரிப்ஷனல் பார்த்தியன்ரெஜெய்ன்ரொங்கோரொங்கோருனிக்சமாரிடன்" + + "சாராதிசௌராஷ்ட்ராஸைன்எழுத்துஷவியான்சிங்களம்சுந்தானீஸ்சிலோடி நக்ரிசிரியா" + + "க்எஸ்ட்ரெங்கெலோ சிரியாக்மேற்கு சிரியாக்கிழக்கு சிரியாக்தகோவானாதாய் லேப" + + "ுதிய தை லூதமிழ்தை வியத்தெலுங்குதெங்வார்டிஃபினாக்தகலாக்தானாதாய்திபெத்தி" + + "யன்உகாரதிக்வைவிசிபிள் ஸ்பீச்பழைய பெர்ஷியன்சுமெரோ-அக்கடியன் க்யூனிஃபார்" + + "ம்யீபாரம்பரியமானகணிதக்குறியீடுஎமோஜிசின்னங்கள்எழுதப்படாததுபொதுஅறியப்படா" + + "த ஸ்கிரிப்ட்" + +var taScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0049, 0x0067, + 0x0082, 0x009a, 0x009a, 0x009a, 0x00ac, 0x00c4, 0x00c4, 0x00f4, + 0x010f, 0x0124, 0x013c, 0x0154, 0x0166, 0x0175, 0x01e1, 0x01f3, + 0x01ff, 0x0217, 0x0229, 0x0241, 0x025f, 0x0277, 0x02c8, 0x02e0, + 0x02f5, 0x02f5, 0x0332, 0x036f, 0x03b2, 0x03b2, 0x03d3, 0x040d, + 0x0428, 0x044c, 0x045e, 0x045e, 0x0479, 0x0494, 0x04ac, 0x04bb, + 0x04d0, 0x04d9, 0x04e8, 0x051c, 0x0541, 0x0541, 0x0553, 0x056b, + 0x056b, 0x058d, 0x05d0, 0x05fb, 0x060d, 0x062f, 0x0638, 0x064d, + // Entry 40 - 7F + 0x066b, 0x066b, 0x0681, 0x0693, 0x06a8, 0x06b7, 0x06b7, 0x06cc, + 0x06e1, 0x06e1, 0x06f3, 0x0702, 0x070e, 0x0745, 0x0770, 0x0785, + 0x0797, 0x07a9, 0x07c2, 0x07de, 0x07de, 0x07de, 0x07f3, 0x0808, + 0x0808, 0x0823, 0x083e, 0x083e, 0x086c, 0x086c, 0x086c, 0x088a, + 0x08a2, 0x08a2, 0x08c0, 0x08cc, 0x08cc, 0x08f1, 0x08f1, 0x090c, + 0x090c, 0x090c, 0x090c, 0x090c, 0x091e, 0x091e, 0x092d, 0x0949, + 0x095e, 0x096d, 0x096d, 0x0988, 0x0988, 0x0988, 0x09ad, 0x09c3, + 0x0a00, 0x0a25, 0x0a41, 0x0a5f, 0x0a99, 0x0ae8, 0x0b00, 0x0b24, + // Entry 80 - BF + 0x0b36, 0x0b4e, 0x0b60, 0x0b60, 0x0b7e, 0x0b9f, 0x0bb4, 0x0bb4, + 0x0bb4, 0x0bb4, 0x0bcc, 0x0bcc, 0x0bea, 0x0c0c, 0x0c24, 0x0c64, + 0x0c8f, 0x0cbd, 0x0cd2, 0x0cd2, 0x0ce5, 0x0d02, 0x0d11, 0x0d11, + 0x0d27, 0x0d3f, 0x0d57, 0x0d72, 0x0d84, 0x0d90, 0x0d9c, 0x0dbd, + 0x0dbd, 0x0dd5, 0x0ddb, 0x0e06, 0x0e06, 0x0e06, 0x0e2e, 0x0e84, + 0x0e8a, 0x0eae, 0x0ed8, 0x0ee7, 0x0f05, 0x0f29, 0x0f35, 0x0f72, +} // Size: 376 bytes + +const teScriptStr string = "" + // Size: 3756 bytes + "అరబిక్ఇంపీరియల్ అరామాక్అర్మేనియన్అవేస్టాన్బాలినీస్బాటక్బాంగ్లాబ్లిస్సింబ" + + "ల్స్బోపోమోఫోబ్రాహ్మిబ్రెయిల్బ్యుగినీస్బుహిడ్చక్మాయునిఫైడ్ కెనెడియన్ అబ" + + "ొరిజినల్ సిలబిక్స్కారియన్చామ్చిరోకిసిర్థ్కోప్టిక్సైప్రోట్సిరిలిక్ప్రాచ" + + "ీన చర్చ స్లావోనిక్ సిరిలిక్దేవనాగరిడేసెరెట్ఇజిప్షియన్ డెమోటిక్ఇజిప్షియ" + + "న్ హైరాటిక్ఇజిప్షియన్ హైరోగ్లైఫ్స్ఇథియోపిక్జార్జియన్ ఖట్సూరిజార్జియన్గ" + + "్లాగో లిటిక్గోతిక్గ్రీక్గుజరాతీగుర్ముఖిహాన్బ్హంగుల్హాన్హనునూసరళీకృత హా" + + "న్సాంప్రదాయక హాన్హీబ్రుహిరాగానపాహవా హ్మోంగ్జపనీస్ సిలబెరీస్ప్రాచీన హంగ" + + "ేరియన్సింధుప్రాచిన ఐటాలిక్జమోజావనీస్జాపనీస్కాయాహ్ లికాటాకానఖరోషథిఖ్మేర" + + "్కన్నడకొరియన్కైథిలన్నాలావోఫ్రాక్టూర్ లాటిన్గేలిక్ లాటిన్లాటిన్లేప్చాలి" + + "ంబులినియర్ ఎలినియర్ బిలిసియన్లిడియన్మాన్డియన్మానిచేన్మాయన్ హైరోగ్లైఫ్స" + + "్మెరోఇటిక్మలయాళంమంగోలియన్మూన్మీటి మయెక్మయాన్మార్న్కోఒఘమ్ఓల్ చికిఓర్ఖోన" + + "్ఒడియాఓసమాన్యప్రాచీన పెర్మిక్ఫాగ్స్-పాఇంస్క్రిప్షనాల్ పహ్లావిసల్టార్ ప" + + "హ్లావిపుస్తక పహ్లావిఫోనిశియన్పోల్లర్డ్ ఫోనెటిక్ఇంస్క్రిప్షనాల్ పార్థియ" + + "న్రేజాంగ్రోంగో రోంగోరూనిక్సమారిటన్సరాటిసౌరాష్ట్రసంజ్ఞ లిపిషవియాన్సింహళ" + + "ంసుడానీస్స్లోటి నాగ్రిసిరియాక్ఎస్ట్రానజీలో సిరియాక్పశ్చిమ సిరియాక్తూర్" + + "పు సిరియాక్టాగ్బానవాతై లీక్రొత్త టై లుఇతమిళముటై వియట్తెలుగుటేంగ్వార్టి" + + "ఫీనాఘ్టగలాగ్థానాథాయ్టిబెటన్యుగారిటిక్వాయికనిపించే భాషప్రాచీన పర్షియన్స" + + "ుమేరో- అక్కడియన్ క్యునిఫార్మ్యివారసత్వంగణిత సంకేతలిపిఎమోజిచిహ్నాలులిపి" + + " లేనిసామాన్యతెలియని లిపి" + +var teScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0043, 0x0061, + 0x007c, 0x0094, 0x0094, 0x0094, 0x00a3, 0x00b8, 0x00b8, 0x00e2, + 0x00fa, 0x0112, 0x012a, 0x0148, 0x015a, 0x0169, 0x01d8, 0x01ed, + 0x01f9, 0x020b, 0x021d, 0x0235, 0x024d, 0x0265, 0x02bf, 0x02d7, + 0x02ef, 0x02ef, 0x0326, 0x035d, 0x03a0, 0x03a0, 0x03bb, 0x03ec, + 0x0407, 0x042c, 0x043e, 0x043e, 0x0450, 0x0465, 0x047d, 0x048f, + 0x04a1, 0x04ad, 0x04bc, 0x04de, 0x0509, 0x0509, 0x051b, 0x0530, + 0x0530, 0x0555, 0x0583, 0x05b4, 0x05c3, 0x05ee, 0x05f7, 0x060c, + // Entry 40 - 7F + 0x0621, 0x0621, 0x063a, 0x064f, 0x0661, 0x0673, 0x0673, 0x0682, + 0x0697, 0x0697, 0x06a3, 0x06b2, 0x06be, 0x06ef, 0x0714, 0x0726, + 0x0738, 0x0747, 0x0760, 0x077c, 0x077c, 0x077c, 0x0791, 0x07a6, + 0x07a6, 0x07c1, 0x07d9, 0x07d9, 0x080d, 0x080d, 0x080d, 0x0828, + 0x083a, 0x083a, 0x0855, 0x0861, 0x0861, 0x087d, 0x087d, 0x0898, + 0x0898, 0x0898, 0x0898, 0x0898, 0x08a4, 0x08a4, 0x08b0, 0x08c6, + 0x08db, 0x08ea, 0x08ea, 0x08ff, 0x08ff, 0x08ff, 0x092d, 0x0946, + 0x0989, 0x09b4, 0x09dc, 0x09f7, 0x0a2b, 0x0a74, 0x0a89, 0x0aa8, + // Entry 80 - BF + 0x0aba, 0x0ad2, 0x0ae1, 0x0ae1, 0x0afc, 0x0b18, 0x0b2d, 0x0b2d, + 0x0b2d, 0x0b2d, 0x0b3f, 0x0b3f, 0x0b57, 0x0b7c, 0x0b94, 0x0bd1, + 0x0bfc, 0x0c27, 0x0c42, 0x0c42, 0x0c4f, 0x0c75, 0x0c87, 0x0c87, + 0x0c9d, 0x0caf, 0x0cca, 0x0ce2, 0x0cf4, 0x0d00, 0x0d0c, 0x0d21, + 0x0d21, 0x0d3f, 0x0d4b, 0x0d6d, 0x0d6d, 0x0d6d, 0x0d9b, 0x0def, + 0x0df5, 0x0e0d, 0x0e35, 0x0e44, 0x0e5c, 0x0e75, 0x0e8a, 0x0eac, +} // Size: 376 bytes + +const thScriptStr string = "" + // Size: 4368 bytes + "อะฟาคาแอลเบเนีย คอเคเซียอาหรับอิมพีเรียล อราเมอิกอาร์เมเนียอเวสตะบาหลีบา" + + "มุมบัสซาบาตักเบงกาลีบลิสซิมโบลส์ปอพอมอฟอพราหมีเบรลล์บูกิสบูฮิดชากมาสัญ" + + "ลักษณ์ชนเผ่าพื้นเมืองแคนาดาคาเรียจามเชอโรกีเซิร์ทคอปติกไซเปรียทซีริลลิ" + + "กเชอร์ชสลาโวนิกซีริลลิกโบราณเทวนาครีเดเซเรทชวเลขดัปโลยันดีโมติกอียิปต์" + + "เฮียราติกอียิปต์เฮียโรกลิฟส์อียิปต์เอลบ์ซานเอธิโอปิกคัตซูรีจอร์เจียจอร" + + "์เจียกลาโกลิติกโกธิกคฤณห์กรีกคุชราตกูร์มูคีจีนกลางฮันกึลฮั่นฮานูโนโอฮั" + + "่นตัวย่อฮั่นตัวเต็มฮีบรูฮิระงะนะอักขระอานาโตเลียปาเฮาห์ม้งคะตะกะนะหรือ" + + "ฮิระงะนะฮังการีโบราณอินดัสอิตาลีโบราณจาโมชวาญี่ปุ่นจูร์เชนคยาห์คะตะกะน" + + "ะขโรษฐีเขมรคอจคีกันนาดาเกาหลีเปลเลกายติล้านนาลาวลาติน - ฟรังเตอร์ลาติน" + + " - แกลิกละตินเลปชาลิมบูลีเนียร์เอลีเนียร์บีเฟรเซอร์โลมาไลเซียลีเดียมหาชน" + + "ีแมนเดียนมานิแชนมายาไฮโรกลิฟส์เมนเดเคอร์ซีฟ-เมโรอิติกเมโรติกมาลายาลัมโ" + + "มฑีมองโกเลียมูนมโรเมเทมาเยกพม่าอาระเบียเหนือโบราณนาบาทาเอียนกีบา-นาซีเ" + + "อ็นโกนุซุโอคัมโอลชิกิออร์คอนโอริยาออสมันยาพาลไมรีนป่อจิ้งฮอเปอร์มิกโบร" + + "าณฟากส์-ปาปะห์ลาวีอินสคริปชันแนลปะห์ลาวีซอลเตอร์ปะห์ลาวีบุ๊กฟินิเชียสั" + + "ทศาสตร์พอลลาร์ดพาร์เทียอินสคริปชันแนลเรจังรองโกรองโกรูนิกซามาเรียซาราต" + + "ิอาระเบียใต้โบราณโสวรัสตระไซน์ไรติ้งซอเวียนชาราดาสิทธัมคุดาวาดีสิงหลโส" + + "ราสมเป็งซุนดาซิโลตินากรีซีเรียซีเรียเอสทรานจีโลซีเรียตะวันตกซีเรียตะวั" + + "นออกตักบันวาทาครีไทเลไทลื้อใหม่ทมิฬตันกัทไทเวียตเตลูกูเทงกวาร์ทิฟินากต" + + "ากาล็อกทานาไทยทิเบตเทอฮุทายูการิตไวคำพูดที่มองเห็นได้วารังกสิติโอลีเอเ" + + "ปอร์เซียโบราณอักษรรูปลิ่มสุเมเรีย-อัคคาเดียยิอินเฮอริตเครื่องหมายทางคณ" + + "ิตศาสตร์อีโมจิซิมโบลส์ไม่มีภาษาเขียนสามัญสคริปต์ที่ไม่รู้จัก" + +var thScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0012, 0x0046, 0x0046, 0x0058, 0x008f, 0x00ad, + 0x00bf, 0x00ce, 0x00dd, 0x00ec, 0x00fb, 0x0110, 0x0110, 0x0134, + 0x014c, 0x015e, 0x0170, 0x017f, 0x018e, 0x019d, 0x01f7, 0x0209, + 0x0212, 0x0227, 0x0239, 0x024b, 0x0263, 0x027b, 0x02cc, 0x02e4, + 0x02f9, 0x0320, 0x034a, 0x037a, 0x03b3, 0x03cb, 0x03e6, 0x0413, + 0x042b, 0x0449, 0x0458, 0x0467, 0x0473, 0x0485, 0x049d, 0x04b2, + 0x04c4, 0x04d0, 0x04e8, 0x0506, 0x0527, 0x0527, 0x0536, 0x054e, + 0x057e, 0x059c, 0x05d8, 0x05fc, 0x060e, 0x062f, 0x063b, 0x0644, + // Entry 40 - 7F + 0x0659, 0x066e, 0x067d, 0x0695, 0x06a7, 0x06b3, 0x06c2, 0x06d7, + 0x06e9, 0x06f8, 0x0707, 0x0719, 0x0722, 0x074f, 0x0770, 0x077f, + 0x078e, 0x079d, 0x07bb, 0x07d9, 0x07f1, 0x07fd, 0x080f, 0x0821, + 0x0833, 0x084b, 0x0860, 0x0860, 0x088a, 0x0899, 0x08cd, 0x08e2, + 0x08fd, 0x0909, 0x0924, 0x092d, 0x0936, 0x0951, 0x0951, 0x095d, + 0x0993, 0x09b4, 0x09b4, 0x09cd, 0x09df, 0x09eb, 0x09fa, 0x0a0f, + 0x0a24, 0x0a36, 0x0a36, 0x0a4e, 0x0a66, 0x0a81, 0x0aa8, 0x0abe, + 0x0b00, 0x0b30, 0x0b54, 0x0b6c, 0x0b9f, 0x0be1, 0x0bf0, 0x0c0e, + // Entry 80 - BF + 0x0c1d, 0x0c35, 0x0c47, 0x0c77, 0x0c92, 0x0cb0, 0x0cc5, 0x0cd7, + 0x0ce9, 0x0d01, 0x0d10, 0x0d2e, 0x0d3d, 0x0d5e, 0x0d70, 0x0da3, + 0x0dca, 0x0df4, 0x0e0c, 0x0e1b, 0x0e27, 0x0e45, 0x0e51, 0x0e63, + 0x0e78, 0x0e8a, 0x0ea2, 0x0eb7, 0x0ecf, 0x0edb, 0x0ee4, 0x0ef3, + 0x0f08, 0x0f1d, 0x0f23, 0x0f59, 0x0f77, 0x0f89, 0x0fb3, 0x100b, + 0x1011, 0x102c, 0x1074, 0x1086, 0x109e, 0x10c8, 0x10d7, 0x1110, +} // Size: 376 bytes + +const trScriptStr string = "" + // Size: 1504 bytes + "AfakaKafkas AlbanyasıArapİmparatorluk AramicesiErmeniAvestaBali DiliBamu" + + "mBassa VahBatakBengalBlis SembolleriBopomofoBrahmiBrailleBugisBuhidChakm" + + "aUCASKaryaChamÇerokiCirthKıptiKıbrısKirilEski Kilise Slavcası KirilDevan" + + "agariDeseretDuployé StenografiDemotik MısırHiyeratik MısırMısır Hiyerogl" + + "ifleriElbasanEtiyopyaHutsuri GürcüGürcüGlagolitGotikGranthaYunanGüceratG" + + "urmukhiHanbHangılHanHanunooBasitleştirilmiş HanGeleneksel HanİbraniHirag" + + "anaAnadolu HiyeroglifleriPahavh HmongKatakana veya HiraganaEski MacarInd" + + "usEski İtalyanJamoCava DiliJaponJurchenKayah LiKatakanaKharoshthiKmerKho" + + "jkiKannadaKoreKpelleKaithiLannaLaoFraktur LatinGael LatinLatinLepchaLimb" + + "uLineer ALineer BFraserLomaLikyaLidyaMahajaniMandenManiMaya Hiyeroglifle" + + "riMendeMeroitik El YazısıMeroitikMalayalamModiMoğolMoonMroMeitei MayekBu" + + "rmaEski Kuzey ArapNebatiNaksi GebaN’KoNüshuOghamOl ChikiOrhunOriyaOsmany" + + "aPalmiraPau Cin HauEski PermikPhags-paPehlevi Kitabe DiliPsalter Pehlevi" + + "Kitap Pehlevi DiliFenikePollard FonetikPartça Kitabe DiliRejangRongorong" + + "oRunikSamaritSaratiEski Güney ArapSaurashtraİşaret DiliShavianSharadaSid" + + "dhamKhudabadiSeylanSora SompengSundaSyloti NagriSüryaniEstrangela Süryan" + + "iBatı SüryaniDoğu SüryaniTagbanvaTakriTai LeNew Tai LueTamilTangutTai Vi" + + "etTeluguTengvarTifinaghTakalotThaanaTayTibetTirhutaUgarit Çivi YazısıVai" + + "Konuşma Sesleri ÇizimlemesiVarang KshitiWoleaiEski FarsSümer-Akad Çivi Y" + + "azısıYiKalıtsalMatematiksel GösterimEmojiSembolYazılı OlmayanOrtakBilinm" + + "eyen Alfabe" + +var trScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0016, 0x0016, 0x001a, 0x0031, 0x0037, + 0x003d, 0x0046, 0x004b, 0x0054, 0x0059, 0x005f, 0x005f, 0x006e, + 0x0076, 0x007c, 0x0083, 0x0088, 0x008d, 0x0093, 0x0097, 0x009c, + 0x00a0, 0x00a7, 0x00ac, 0x00b2, 0x00ba, 0x00bf, 0x00da, 0x00e4, + 0x00eb, 0x00fe, 0x010d, 0x011e, 0x0134, 0x013b, 0x0143, 0x0152, + 0x0159, 0x0161, 0x0166, 0x016d, 0x0172, 0x017a, 0x0182, 0x0186, + 0x018d, 0x0190, 0x0197, 0x01ad, 0x01bb, 0x01bb, 0x01c2, 0x01ca, + 0x01e0, 0x01ec, 0x0202, 0x020c, 0x0211, 0x021e, 0x0222, 0x022b, + // Entry 40 - 7F + 0x0230, 0x0237, 0x023f, 0x0247, 0x0251, 0x0255, 0x025b, 0x0262, + 0x0266, 0x026c, 0x0272, 0x0277, 0x027a, 0x0287, 0x0291, 0x0296, + 0x029c, 0x02a1, 0x02a9, 0x02b1, 0x02b7, 0x02bb, 0x02c0, 0x02c5, + 0x02cd, 0x02d3, 0x02d7, 0x02d7, 0x02ea, 0x02ef, 0x0303, 0x030b, + 0x0314, 0x0318, 0x031e, 0x0322, 0x0325, 0x0331, 0x0331, 0x0336, + 0x0345, 0x034b, 0x034b, 0x0355, 0x035b, 0x0361, 0x0366, 0x036e, + 0x0373, 0x0378, 0x0378, 0x037f, 0x0386, 0x0391, 0x039c, 0x03a4, + 0x03b7, 0x03c6, 0x03d8, 0x03de, 0x03ed, 0x0400, 0x0406, 0x0410, + // Entry 80 - BF + 0x0415, 0x041c, 0x0422, 0x0432, 0x043c, 0x0449, 0x0450, 0x0457, + 0x045e, 0x0467, 0x046d, 0x0479, 0x047e, 0x048a, 0x0492, 0x04a5, + 0x04b3, 0x04c1, 0x04c9, 0x04ce, 0x04d4, 0x04df, 0x04e4, 0x04ea, + 0x04f2, 0x04f8, 0x04ff, 0x0507, 0x050e, 0x0514, 0x0517, 0x051c, + 0x0523, 0x0538, 0x053b, 0x0558, 0x0565, 0x056b, 0x0574, 0x058e, + 0x0590, 0x0599, 0x05af, 0x05b4, 0x05ba, 0x05ca, 0x05cf, 0x05e0, +} // Size: 376 bytes + +const ukScriptStr string = "" + // Size: 2950 bytes + "афакакавказька албанськаахомарабицяармівірменськаавестійськийбалійськийб" + + "амумбассабатакбенгальськасимволи Бліссабопомофобрахмішрифт Брайлябугійс" + + "ькийбухідчакмауніфіковані символи канадських тубільцівкаріанськийхамітс" + + "ькийчерокікирткоптськийкіпрськийкирилицядавньоцерковнословʼянськийдеван" + + "агарідезеретєгипетський демотичнийєгипетський ієратичнийєгипетський ієр" + + "огліфічнийефіопськакхутсурігрузинськаглаголичнийготичнийгрецькагуджарат" + + "ігурмухіханьхангилькитайськаханунукитайська спрощенакитайська традиційн" + + "аівритхіраганапахау хмонгяпонські силабаріїдавньоугорськийхарапськийдав" + + "ньоіталійськийчамояванськийяпонськакая лікатаканакхароштхікхмерськаканн" + + "адакорейськакаїтіланналаоськалатинський фрактурнийлатинський гельськийл" + + "атиницялепчалімбулінійний Алінійний Вабетка Фрейзераломалікійськийлідій" + + "ськиймандейськийманіхейськиймайя ієрогліфічниймероїтськиймалаяламськамо" + + "нгольськамунмейтей майєкмʼянмськанкоогамічнийсантальськийорхонськийорія" + + "османськийдавньопермськийпхагс-папехлеві написівпехлеві релігійнийпехле" + + "ві літературнийфінікійськийписемність Поллардапарфянськийреджангронго-р" + + "онгорунічнийсамаритянськийсаратісаураштразнаковийшоусингальськасундансь" + + "кийсілоті нагрісирійськийдавньосирійський естрангелодавньосирійський за" + + "хіднийдавньосирійський східнийтагбанватай-ліновий тайський луетамільськ" + + "атангуттай-вʼєттелугутенгвартифінагтагальськийтаанатайськатибетськаугар" + + "итськийваївидиме мовленнядавньоперськийшумеро-аккадський клінописйїуспа" + + "дкованаматематичнаемодзісимвольнабезписемназвичайнаневідома система пис" + + "ьма" + +var ukScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000a, 0x002f, 0x0037, 0x0045, 0x004d, 0x0061, + 0x0079, 0x008d, 0x0097, 0x00a1, 0x00ab, 0x00c1, 0x00c1, 0x00dc, + 0x00ec, 0x00f8, 0x010f, 0x0123, 0x012d, 0x0137, 0x0184, 0x019a, + 0x01ae, 0x01ba, 0x01c2, 0x01d4, 0x01e6, 0x01f6, 0x022a, 0x023e, + 0x024c, 0x024c, 0x0277, 0x02a2, 0x02d3, 0x02d3, 0x02e5, 0x02f5, + 0x0309, 0x031f, 0x032f, 0x032f, 0x033d, 0x034f, 0x035d, 0x0365, + 0x0373, 0x0385, 0x0391, 0x03b4, 0x03db, 0x03db, 0x03e5, 0x03f5, + 0x03f5, 0x040a, 0x042d, 0x044b, 0x045f, 0x0481, 0x0489, 0x049b, + // Entry 40 - 7F + 0x04ab, 0x04ab, 0x04b6, 0x04c6, 0x04d8, 0x04ea, 0x04ea, 0x04f8, + 0x050a, 0x050a, 0x0514, 0x051e, 0x052c, 0x0555, 0x057c, 0x058c, + 0x0596, 0x05a0, 0x05b3, 0x05c6, 0x05e3, 0x05eb, 0x05ff, 0x0613, + 0x0613, 0x0629, 0x0641, 0x0641, 0x0664, 0x0664, 0x0664, 0x067a, + 0x0692, 0x0692, 0x06a8, 0x06ae, 0x06ae, 0x06c5, 0x06c5, 0x06d7, + 0x06d7, 0x06d7, 0x06d7, 0x06d7, 0x06dd, 0x06dd, 0x06ef, 0x0707, + 0x071b, 0x0723, 0x0723, 0x0737, 0x0737, 0x0737, 0x0755, 0x0764, + 0x0781, 0x07a4, 0x07cb, 0x07e3, 0x0808, 0x081e, 0x082c, 0x0841, + // Entry 80 - BF + 0x0851, 0x086d, 0x0879, 0x0879, 0x088b, 0x089b, 0x08a1, 0x08a1, + 0x08a1, 0x08a1, 0x08b7, 0x08b7, 0x08cd, 0x08e4, 0x08f8, 0x092d, + 0x095e, 0x098d, 0x099d, 0x099d, 0x09a8, 0x09ca, 0x09de, 0x09ea, + 0x09f9, 0x0a05, 0x0a13, 0x0a21, 0x0a37, 0x0a41, 0x0a4f, 0x0a61, + 0x0a61, 0x0a77, 0x0a7d, 0x0a9a, 0x0a9a, 0x0a9a, 0x0ab6, 0x0ae8, + 0x0aec, 0x0b02, 0x0b18, 0x0b24, 0x0b36, 0x0b4a, 0x0b5a, 0x0b86, +} // Size: 376 bytes + +const urScriptStr string = "" + // Size: 579 bytes + "عربیآرمینیائیبنگالیبوپوموفوبریلسیریلکدیوناگریایتھوپیائیجارجیائییونانیگجر" + + "اتیگرمکھیہینبہنگولہانآسان ہانروایتی ہانعبرانیہیراگیناجاپانی سیلابریزجام" + + "وجاپانیکٹاکاناخمیرکنڑکوریائیلاؤلاطینیملیالممنگولیائیمیانماراڑیہسنہالاتم" + + "لتیلگوتھاناتھائیتبتیریاضی کی علامتیںایموجیعلاماتغیر تحریر شدہعامنامعلوم" + + " رسم الخط" + +var urScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x0026, 0x0026, 0x0026, + 0x0036, 0x0036, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x004a, 0x004a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x006e, 0x006e, + 0x007e, 0x007e, 0x007e, 0x007e, 0x008a, 0x0096, 0x00a2, 0x00aa, + 0x00b4, 0x00ba, 0x00ba, 0x00c9, 0x00dc, 0x00dc, 0x00e8, 0x00f8, + 0x00f8, 0x00f8, 0x0115, 0x0115, 0x0115, 0x0115, 0x011d, 0x011d, + // Entry 40 - 7F + 0x0129, 0x0129, 0x0129, 0x0137, 0x0137, 0x013f, 0x013f, 0x0145, + 0x0153, 0x0153, 0x0153, 0x0153, 0x0159, 0x0159, 0x0159, 0x0165, + 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, + 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, + 0x0171, 0x0171, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0191, + 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, + 0x0191, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + // Entry 80 - BF + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0199, 0x0199, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01ab, 0x01ab, + 0x01ab, 0x01b5, 0x01b5, 0x01b5, 0x01b5, 0x01bf, 0x01c9, 0x01d1, + 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, + 0x01d1, 0x01d1, 0x01ef, 0x01fb, 0x0207, 0x021f, 0x0225, 0x0243, +} // Size: 376 bytes + +const uzScriptStr string = "" + // Size: 321 bytes + "arabarmanbengalbopomofobraylkirilldevanagarihabashgruzingrekgujarotgurmu" + + "kxihanbhangulxitoysoddalashgan xitoyan’anaviy xitoyivrithiraganakatakana" + + " yoki hiraganajamoyaponkatakanakxmerkannadakoreyslaoslotinmalayalammongo" + + "lmyanmaoriyasingaltamiltelugutaanataytibetmatematik ifodalaremojibelgila" + + "ryozuvsizumumiynoma’lum yozuv" + +var uzScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0004, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x000f, 0x000f, 0x000f, + 0x0017, 0x0017, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, + 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x0022, 0x0022, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0032, 0x0032, + 0x0038, 0x0038, 0x0038, 0x0038, 0x003c, 0x0043, 0x004b, 0x004f, + 0x0055, 0x005a, 0x005a, 0x006c, 0x007d, 0x007d, 0x0082, 0x008a, + 0x008a, 0x008a, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a4, 0x00a4, + // Entry 40 - 7F + 0x00a9, 0x00a9, 0x00a9, 0x00b1, 0x00b1, 0x00b6, 0x00b6, 0x00bd, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c7, 0x00c7, 0x00c7, 0x00cc, + 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00d5, 0x00d5, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00e1, + 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, + 0x00e1, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, + 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, + // Entry 80 - BF + 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, + 0x00e6, 0x00e6, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00f1, 0x00f1, + 0x00f1, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00fc, 0x00ff, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0116, 0x011b, 0x0123, 0x012b, 0x0131, 0x0141, +} // Size: 376 bytes + +const viScriptStr string = "" + // Size: 2528 bytes + "Chữ AfakaChữ Ả RậpChữ Imperial AramaicChữ ArmeniaChữ AvestanChữ BaliChữ " + + "BamumChữ Bassa VahChữ BatakChữ BangladeshChữ BlissymbolsChữ BopomofoChữ " + + "BrahmiChữ nổi BrailleChữ BuginChữ BuhidChữ ChakmaÂm tiết Thổ dân Canada " + + "Hợp nhấtChữ CariaChữ ChămChữ CherokeeChữ CirthChữ CopticChứ SípChữ Kirin" + + "Chữ Kirin Slavơ Nhà thờ cổChữ DevanagariChữ DeseretChữ tốc ký DuployanCh" + + "ữ Ai Cập bình dânChữ Ai Cập thày tuChữ tượng hình Ai CậpChữ EthiopiaCh" + + "ữ Khutsuri GeorgiaChữ GruziaChữ GlagoliticChữ Gô-tíchChữ GranthaChữ Hy" + + " LạpChữ GujaratiChữ GurmukhiChữ HanbChữ HangulChữ HánChữ HanunooChữ Hán " + + "giản thểChữ Hán phồn thểChữ Do TháiChữ HiraganaChữ tượng hình AnatoliaCh" + + "ữ Pahawh HmongBảng ký hiệu âm tiết Tiếng NhậtChữ Hungary cổChữ IndusCh" + + "ữ Italic cổChữ JamoChữ JavaChữ Nhật BảnChữ JurchenChữ Kayah LiChữ Kata" + + "kanaChữ KharoshthiChữ Khơ-meChữ KhojkiChữ KannadaChữ Hàn QuốcChữ KpelleC" + + "hữ KaithiChữ LannaChữ LàoChữ La-tinh FrakturChữ La-tinh Xcốt-lenChữ La t" + + "inhChữ LepchaChữ LimbuChữ Linear AChữ Linear BChữ FraserChữ LomaChữ Lyci" + + "aChữ LydiaChữ MandaeanChữ ManichaeanChữ tượng hình MayaChữ MendeChữ Mero" + + "itic Nét thảoChữ MeroiticChữ MalayalamChữ Mông CổChữ nổi MoonChữ MroChữ " + + "Meitei MayekChữ MyanmarChữ Bắc Ả Rập cổChữ NabataeanChữ Naxi GebaChữ N’K" + + "oChữ NüshuChữ OghamChữ Ol ChikiChữ OrkhonChữ OdiaChữ OsmanyaChữ Palmyren" + + "eChữ Permic cổChữ Phags-paChữ Pahlavi Văn biaChữ Pahlavi Thánh caChữ Pah" + + "lavi SáchChữ PhoeniciaNgữ âm PollardChữ Parthia Văn biaChữ RejangChữ Ron" + + "gorongoChữ RunicChữ SamaritanChữ SaratiChữ Nam Ả Rập cổChữ SaurashtraChữ" + + " viết Ký hiệuChữ ShavianChữ SharadaChữ KhudawadiChữ SinhalaChữ Sora Somp" + + "engChữ Xu-đăngChữ Syloti NagriChữ SyriaChữ Estrangelo SyriacChữ Tây Syri" + + "aChữ Đông SyriaChữ TagbanwaChữ TakriChữ Thái NaChữ Thái Lặc mớiChữ Tamil" + + "Chữ TangutChữ Thái ViệtChữ TeluguChữ TengwarChữ TifinaghChữ TagalogChữ T" + + "haanaChữ TháiChữ Tây TạngChữ TirhutaChữ UgaritChữ VaiTiếng nói Nhìn thấy" + + " đượcChữ Varang KshitiChữ WoleaiChữ Ba Tư cổChữ hình nêm Sumero-Akkadian" + + "Chữ DiChữ Kế thừaKý hiệu Toán họcBiểu tượngKý hiệuChưa có chữ viếtChungC" + + "hữ viết không xác định" + +var viScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000b, 0x000b, 0x000b, 0x001a, 0x0030, 0x003d, + 0x004a, 0x0054, 0x005f, 0x006e, 0x0079, 0x0089, 0x0089, 0x009a, + 0x00a8, 0x00b4, 0x00c7, 0x00d2, 0x00dd, 0x00e9, 0x0112, 0x011d, + 0x0128, 0x0136, 0x0141, 0x014d, 0x0157, 0x0162, 0x0184, 0x0194, + 0x01a1, 0x01b9, 0x01d2, 0x01e9, 0x0206, 0x0206, 0x0214, 0x022a, + 0x0236, 0x0246, 0x0255, 0x0262, 0x0270, 0x027e, 0x028c, 0x0296, + 0x02a2, 0x02ac, 0x02b9, 0x02d0, 0x02e7, 0x02e7, 0x02f5, 0x0303, + 0x0320, 0x0332, 0x035d, 0x036f, 0x037a, 0x038b, 0x0395, 0x039f, + // Entry 40 - 7F + 0x03b1, 0x03be, 0x03cc, 0x03da, 0x03ea, 0x03f7, 0x0403, 0x0410, + 0x0421, 0x042d, 0x0439, 0x0444, 0x044e, 0x0463, 0x047b, 0x0488, + 0x0494, 0x049f, 0x04ad, 0x04bb, 0x04c7, 0x04d1, 0x04dc, 0x04e7, + 0x04e7, 0x04f5, 0x0505, 0x0505, 0x051e, 0x0529, 0x0543, 0x0551, + 0x0560, 0x0560, 0x0570, 0x0580, 0x0589, 0x059b, 0x059b, 0x05a8, + 0x05c2, 0x05d1, 0x05d1, 0x05e0, 0x05ec, 0x05f8, 0x0603, 0x0611, + 0x061d, 0x0627, 0x0627, 0x0634, 0x0643, 0x0643, 0x0654, 0x0662, + 0x0678, 0x068f, 0x06a2, 0x06b1, 0x06c2, 0x06d8, 0x06e4, 0x06f4, + // Entry 80 - BF + 0x06ff, 0x070e, 0x071a, 0x0732, 0x0742, 0x0759, 0x0766, 0x0773, + 0x0773, 0x0782, 0x078f, 0x07a1, 0x07b0, 0x07c2, 0x07cd, 0x07e4, + 0x07f4, 0x0806, 0x0814, 0x081f, 0x082d, 0x0844, 0x084f, 0x085b, + 0x086d, 0x0879, 0x0886, 0x0894, 0x08a1, 0x08ad, 0x08b8, 0x08c9, + 0x08d6, 0x08e2, 0x08eb, 0x090d, 0x0920, 0x092c, 0x093d, 0x095d, + 0x0965, 0x0976, 0x098c, 0x099b, 0x09a5, 0x09bb, 0x09c0, 0x09e0, +} // Size: 376 bytes + +const zhScriptStr string = "" + // Size: 2277 bytes + "Adlm阿法卡文AghbAhom阿拉伯文皇室亚拉姆文亚美尼亚文阿维斯陀文巴厘文巴姆穆文巴萨文巴塔克文孟加拉文Bhks布列斯符号汉语拼音婆罗米文字" + + "布莱叶盲文布吉文布希德文查克马文加拿大土著统一音节卡里亚文占文切罗基文色斯文克普特文塞浦路斯文西里尔文西里尔文字(古教会斯拉夫文的变体)天城" + + "文德塞莱特文杜普洛伊速记后期埃及文古埃及僧侣书写体古埃及象形文厄尔巴埃塞俄比亚文格鲁吉亚文(教堂体)格鲁吉亚文格拉哥里文哥特文格兰塔文希腊文" + + "古吉拉特文果鲁穆奇文汉语注音谚文汉字汉奴罗文简体中文繁体中文Hatr希伯来文平假名安那托利亚象形文字杨松录苗文片假名或平假名古匈牙利文古希腊" + + "哈拉潘古意大利文韩文字母爪哇文日文女真文克耶李文字片假名卡罗须提文高棉文克吉奇文字卡纳达文韩文克佩列文凯提文兰拿文老挝文拉丁文(哥特式字体变" + + "体)拉丁文(盖尔文变体)拉丁文雷布查文林布文线形文字(A)线形文字(B)傈僳文洛马文利西亚文吕底亚文Mahj阿拉米文摩尼教文Marc玛雅圣符" + + "文门迪文麦罗埃草书麦若提克文马拉雅拉姆文Modi蒙古文韩文语系谬文曼尼普尔文Mult缅甸文古北方阿拉伯文纳巴泰文Newa纳西格巴文西非书面文" + + "字(N’Ko)女书欧甘文桑塔利文鄂尔浑文奥里亚文Osge奥斯曼亚文帕尔迈拉文Pauc古彼尔姆文八思巴文巴列维文碑铭体巴列维文(圣诗体)巴列维" + + "文(书体)腓尼基文波拉德音标文字帕提亚文碑铭体拉让文朗格朗格文古代北欧文撒马利亚文沙拉堤文古南阿拉伯文索拉什特拉文书写符号萧伯纳式文夏拉达文" + + "悉昙信德文僧伽罗文索朗桑朋文巽他文锡尔赫特文叙利亚文福音体叙利亚文西叙利亚文东叙利亚文塔格班瓦文泰克里文泰乐文新傣文泰米尔文唐古特文越南傣文" + + "泰卢固文腾格瓦文字提非纳文塔加路文塔安那文泰文藏文迈蒂利文乌加里特文瓦依文可见语言瓦郎奇蒂文字沃莱艾文古波斯文苏美尔-阿卡德楔形文字彝文遗传" + + "学术语数学符号绘文字符号非书面文字通用未知文字" + +var zhScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x0010, 0x0014, 0x0018, 0x0024, 0x0036, 0x0045, + 0x0054, 0x005d, 0x0069, 0x0072, 0x007e, 0x008a, 0x008e, 0x009d, + 0x00a9, 0x00b8, 0x00c7, 0x00d0, 0x00dc, 0x00e8, 0x0103, 0x010f, + 0x0115, 0x0121, 0x012a, 0x0136, 0x0145, 0x0151, 0x0184, 0x018d, + 0x019c, 0x01ae, 0x01bd, 0x01d5, 0x01e7, 0x01f0, 0x0202, 0x0220, + 0x022f, 0x023e, 0x0247, 0x0253, 0x025c, 0x026b, 0x027a, 0x0286, + 0x028c, 0x0292, 0x029e, 0x02aa, 0x02b6, 0x02ba, 0x02c6, 0x02cf, + 0x02ea, 0x02f9, 0x030e, 0x031d, 0x032f, 0x033e, 0x034a, 0x0353, + // Entry 40 - 7F + 0x0359, 0x0362, 0x0371, 0x037a, 0x0389, 0x0392, 0x03a1, 0x03ad, + 0x03b3, 0x03bf, 0x03c8, 0x03d1, 0x03da, 0x03fe, 0x041c, 0x0425, + 0x0431, 0x043a, 0x044d, 0x0460, 0x0469, 0x0472, 0x047e, 0x048a, + 0x048e, 0x049a, 0x04a6, 0x04aa, 0x04b9, 0x04c2, 0x04d1, 0x04e0, + 0x04f2, 0x04f6, 0x04ff, 0x050b, 0x0511, 0x0520, 0x0524, 0x052d, + 0x0542, 0x054e, 0x0552, 0x0561, 0x057f, 0x0585, 0x058e, 0x059a, + 0x05a6, 0x05b2, 0x05b6, 0x05c5, 0x05d4, 0x05d8, 0x05e7, 0x05f3, + 0x0608, 0x0623, 0x063b, 0x0647, 0x065c, 0x0671, 0x067a, 0x0689, + // Entry 80 - BF + 0x0698, 0x06a7, 0x06b3, 0x06c5, 0x06d7, 0x06e3, 0x06f2, 0x06fe, + 0x0704, 0x070d, 0x0719, 0x0728, 0x0731, 0x0740, 0x074c, 0x0761, + 0x0770, 0x077f, 0x078e, 0x079a, 0x07a3, 0x07ac, 0x07b8, 0x07c4, + 0x07d0, 0x07dc, 0x07eb, 0x07f7, 0x0803, 0x080f, 0x0815, 0x081b, + 0x0827, 0x0836, 0x083f, 0x084b, 0x085d, 0x0869, 0x0875, 0x0894, + 0x089a, 0x08a9, 0x08b5, 0x08be, 0x08c4, 0x08d3, 0x08d9, 0x08e5, +} // Size: 376 bytes + +const zhHantScriptStr string = "" + // Size: 2460 bytes + "阿法卡文字高加索阿爾巴尼亞文阿拉伯文皇室亞美尼亞文亞美尼亞文阿維斯陀文峇里文巴姆穆文巴薩文巴塔克文孟加拉文布列斯文注音符號婆羅米文盲人用點字布吉" + + "斯文布希德文查克馬文加拿大原住民通用字符卡里亞文占文柴羅基文色斯文科普特文塞浦路斯文斯拉夫文西里爾文(古教會斯拉夫文變體)天城文德瑟雷特文杜" + + "普洛伊速記古埃及世俗體古埃及僧侶體古埃及象形文字愛爾巴桑文衣索比亞文喬治亞語系(阿索他路里和努斯克胡里文)喬治亞文格拉哥里文歌德文格蘭他文字" + + "希臘文古吉拉特文古魯穆奇文標上注音符號的漢字韓文字漢字哈努諾文簡體中文繁體中文希伯來文平假名安那托利亞象形文字楊松錄苗文片假名或平假名古匈牙" + + "利文印度河流域(哈拉帕文)古意大利文韓文字母爪哇文日文女真文字克耶李文片假名卡羅須提文高棉文克吉奇文字坎那達文韓文克培列文凱提文藍拿文寮國文" + + "拉丁文(尖角體活字變體)拉丁文(蓋爾語變體)拉丁文雷布查文林佈文線性文字(A)線性文字(B)栗僳文洛馬文呂西亞語里底亞語曼底安文摩尼教文瑪雅" + + "象形文字門德文麥羅埃文(曲線字體)麥羅埃文馬來亞拉姆文蒙古文蒙氏點字謬文曼尼普爾文緬甸文古北阿拉伯文納巴泰文字納西格巴文西非書面語言 (N’" + + "Ko)女書文字歐甘文桑塔利文鄂爾渾文歐利亞文歐斯曼亞文帕米瑞拉文字古彼爾姆諸文八思巴文巴列維文(碑銘體)巴列維文(聖詩體)巴列維文(書體)腓尼基" + + "文柏格理拼音符帕提亞文(碑銘體)拉讓文朗格朗格象形文古北歐文字撒馬利亞文沙拉堤文古南阿拉伯文索拉什特拉文手語書寫符號簫柏納字符夏拉達文悉曇文" + + "字信德文錫蘭文索朗桑朋文字巽他文希洛弟納格里文敍利亞文敘利亞文(福音體文字變體)敘利亞文(西方文字變體)敘利亞文(東方文字變體)南島文塔卡里" + + "文字傣哪文西雙版納新傣文坦米爾文西夏文傣擔文泰盧固文談格瓦文提非納文塔加拉文塔安那文泰文西藏文邁蒂利文烏加列文瓦依文視覺語音文字瓦郎奇蒂文字" + + "沃雷艾文古波斯文蘇米魯亞甲文楔形文字彞文繼承文字(Unicode)數學符號表情符號符號非書寫語言一般文字未知文字" + +var zhHantScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000f, 0x002a, 0x002a, 0x0036, 0x004b, 0x005a, + 0x0069, 0x0072, 0x007e, 0x0087, 0x0093, 0x009f, 0x009f, 0x00ab, + 0x00b7, 0x00c3, 0x00d2, 0x00de, 0x00ea, 0x00f6, 0x0114, 0x0120, + 0x0126, 0x0132, 0x013b, 0x0147, 0x0156, 0x0162, 0x018f, 0x0198, + 0x01a7, 0x01b9, 0x01cb, 0x01dd, 0x01f2, 0x0201, 0x0210, 0x0249, + 0x0255, 0x0264, 0x026d, 0x027c, 0x0285, 0x0294, 0x02a3, 0x02be, + 0x02c7, 0x02cd, 0x02d9, 0x02e5, 0x02f1, 0x02f1, 0x02fd, 0x0306, + 0x0321, 0x0330, 0x0345, 0x0354, 0x0375, 0x0384, 0x0390, 0x0399, + // Entry 40 - 7F + 0x039f, 0x03ab, 0x03b7, 0x03c0, 0x03cf, 0x03d8, 0x03e7, 0x03f3, + 0x03f9, 0x0405, 0x040e, 0x0417, 0x0420, 0x0444, 0x0462, 0x046b, + 0x0477, 0x0480, 0x0493, 0x04a6, 0x04af, 0x04b8, 0x04c4, 0x04d0, + 0x04d0, 0x04dc, 0x04e8, 0x04e8, 0x04fa, 0x0503, 0x0521, 0x052d, + 0x053f, 0x053f, 0x0548, 0x0554, 0x055a, 0x0569, 0x0569, 0x0572, + 0x0584, 0x0593, 0x0593, 0x05a2, 0x05bd, 0x05c9, 0x05d2, 0x05de, + 0x05ea, 0x05f6, 0x05f6, 0x0605, 0x0617, 0x0617, 0x0629, 0x0635, + 0x0650, 0x066b, 0x0683, 0x068f, 0x06a1, 0x06bc, 0x06c5, 0x06da, + // Entry 80 - BF + 0x06e9, 0x06f8, 0x0704, 0x0716, 0x0728, 0x073a, 0x0749, 0x0755, + 0x0761, 0x076a, 0x0773, 0x0785, 0x078e, 0x07a3, 0x07af, 0x07d6, + 0x07fa, 0x081e, 0x0827, 0x0836, 0x083f, 0x0854, 0x0860, 0x0869, + 0x0872, 0x087e, 0x088a, 0x0896, 0x08a2, 0x08ae, 0x08b4, 0x08bd, + 0x08c9, 0x08d5, 0x08de, 0x08f0, 0x0902, 0x090e, 0x091a, 0x0938, + 0x093e, 0x0957, 0x0963, 0x096f, 0x0975, 0x0984, 0x0990, 0x099c, +} // Size: 376 bytes + +const zuScriptStr string = "" + // Size: 504 bytes + "isi-Arabicisi-Armenianisi-Banglaisi-Bopomofoi-Brailleisi-Cyrillicisi-Dev" + + "anagariisi-Ethiopicisi-Georgianisi-Greekisi-Gujaratiisi-Gurmukhiisi-Hanb" + + "isi-Hangulisi-Hanisi-Han esenziwe lulaisi-Han sosikoisi-Hebrewisi-Hiraga" + + "nai-Japanese syllabariesisi-Jamoisi-Japaneseisi-Katakanaisi-Khmerisi-Kan" + + "nadaisi-Koreanisi-Laoisi-Latinisi-Malayalamisi-Mongolianisi-Myanmarisi-O" + + "diaisi-Sinhalaisi-Tamilisi-Teluguisi-Thaanaisi-Thaii-Tibetani-Mathematic" + + "al Notationi-Emojiamasimbuliokungabhaliwejwayelekileiskripthi esingaziwa" + +var zuScriptIdx = []uint16{ // 176 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0020, 0x0020, 0x0020, + 0x002c, 0x002c, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0041, 0x0041, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x005b, 0x005b, + 0x0067, 0x0067, 0x0067, 0x0067, 0x0070, 0x007c, 0x0088, 0x0090, + 0x009a, 0x00a1, 0x00a1, 0x00b6, 0x00c4, 0x00c4, 0x00ce, 0x00da, + 0x00da, 0x00da, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f8, 0x00f8, + // Entry 40 - 7F + 0x0104, 0x0104, 0x0104, 0x0110, 0x0110, 0x0119, 0x0119, 0x0124, + 0x012e, 0x012e, 0x012e, 0x012e, 0x0135, 0x0135, 0x0135, 0x013e, + 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, + 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, + 0x014b, 0x014b, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0163, + 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, + 0x0163, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, + 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, + // Entry 80 - BF + 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, + 0x016b, 0x016b, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x017f, 0x017f, + 0x017f, 0x0189, 0x0189, 0x0189, 0x0189, 0x0193, 0x019b, 0x01a4, + 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01a4, 0x01bb, 0x01c2, 0x01cc, 0x01d9, 0x01e4, 0x01f8, +} // Size: 376 bytes + +// Total size for script: 242449 bytes (242 KB) + +// Number of keys: 291 +var ( + regionIndex = tagIndex{ + "ACADAEAFAGAIALAMAOAQARASATAUAWAXAZBABBBDBEBFBGBHBIBJBLBMBNBOBQBRBSBTBVBW" + + "BYBZCACCCDCFCGCHCICKCLCMCNCOCPCRCUCVCWCXCYCZDEDGDJDKDMDODZEAECEEEGEH" + + "ERESETEUEZFIFJFKFMFOFRGAGBGDGEGFGGGHGIGLGMGNGPGQGRGSGTGUGWGYHKHMHNHR" + + "HTHUICIDIEILIMINIOIQIRISITJEJMJOJPKEKGKHKIKMKNKPKRKWKYKZLALBLCLILKLR" + + "LSLTLULVLYMAMCMDMEMFMGMHMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZNANCNENFNGNI" + + "NLNONPNRNUNZOMPAPEPFPGPHPKPLPMPNPRPSPTPWPYQAQORERORSRURWSASBSCSDSESG" + + "SHSISJSKSLSMSNSOSRSSSTSVSXSYSZTATCTDTFTGTHTJTKTLTMTNTOTRTTTVTWTZUAUG" + + "UMUNUSUYUZVAVCVEVGVIVNVUWFWSXKYEYTZAZMZWZZ", + "001002003005009011013014015017018019021029030034035039053054057061142143" + + "145150151154155419", + "", + } +) + +var regionHeaders = [252]header{ + { // af + afRegionStr, + afRegionIdx, + }, + { // agq + "ÀndolàYùnaetɛ Alab ɛmelɛ̀Àfɨ̀ganìsɨ̀tânÀntigwà à BàbudàÀŋgwilàÀabɛnìaÀmɛ" + + "nyìaÀŋgolàÀdzɛ̀ntinàÀmɛlekan SamwàUsɨtɨ̀làÙsɨ̀tɛ̀lɛlìaÀlubàÀzɨbɛ̀dzâ" + + "nBosɨnyìa à Hɛ̀zɛ̀gòvinàBàbadòsBaŋgɨ̀làdɛ̂BɛɛdzwùmBùkinà FasòBùugɛlì" + + "aBàlaenBùlundìBɛ̀nɨ̂ŋBɛ̀mudàBɨ̀lunèBòlevàBɨ̀làzîiBàhamàsMbutànBòtɨ̀s" + + "wǎnàBɛlàlûsBɛ̀lezɨ̀KanadàDɛ̀mùkàlatì Lèkpubèlè è KuŋgùSɛnta Afɨlekan" + + " LèkpobèlèKuŋgùSuezàlânKu Dɨ̀vûaChwɨla ŋ̀ KûʔChilèKàmàlûŋChaenàKòlom" + + "bìaKòsɨ̀tà LekàKuuwbàChwɨla ŋ̀ Kɛ̀b Vɛ̂ɛSaekpùlùChɛ̂ LèkpubèlèDzaman" + + "èDzìbuwtìDɛnɨmàDòmenekàDòmenekà LèkpubèlèÀadzɛlìaEkwadòÈsɨ̀tonyìaEd" + + "zìÈletɨ̀làSɨ̀kpɛ̂nÈtyǒpìaFɨnlànFidziChwɨlà fɨ FakɨlànMaekòlòneshìaFà" + + "lâŋnsìGàbûnYùnaetɛ Kiŋdɔ̀mGɨ̀lɛnadàDzɔɔdzìaGàyanà è FàlâŋnsìGaanàDzi" + + "bɨ̀latàGɨ̀lenlânGambìaGinèGwadalukpɛ̀Èkwɛ̀tolia GinèGɨ̀lêsGwàtɨ̀malà" + + "GwamGinè BìsawùGùyanàHɔndulàsKòwɛshìaHǎetìHɔŋgàlèÈndòneshìaAelɨ̀lânE" + + "zɨ̀lɛ̂EndìaDɨŋò kɨ dzughùnstòʔ kɨ Endìa kɨ Bɨ̀letì kòÈlâkɨ̀ÈlânAesɨ̀" + + "lânEtalèDzàmɛkàDzodànDzàkpânKɨnyàKìdzisɨ̀tânKàmbodìaKèlèbatiKomolòsS" + + "ɛ̀n Kî à NevìKùulîa, EkùwKùulîa, EmàmKùwɛ̂Chwɨlà ŋ̀ KaemànKàzasɨ̀tâ" + + "nLàwosLɛbanèSɛ̀n LushìaLetɨnshɨ̀nSɨ̀le LaŋkàLàebɛlìaLɛ̀sotùLètwǎnyìa" + + "LuzɨmbùʔLàtɨvaLebìaMòlokòMùnakuMòodovàMàdàgasɨkàChwɨlà fɨ MashàMɨ̀sɨ" + + "̀donyìaMalèMǐanmàMùŋgolìaChwɨlà m̀ Màlǐanà mɨ̀ Ekùw mòMàtìnekìMùlèt" + + "anyìaMùŋtselàMaatàMùleshwɨ̀sMàdivèMàlawìMɛkɨzikùMàlɛshìaMùzàmbîNàmib" + + "ìaKàlèdonyìa È fūghūNaedzàChwɨlà fɨ NufòʔGɨ̀anyɨNikàlagwàNedàlânNoo" + + "wɛ̂ɛNɛkpâaNàwulùNiyuZìlân È fūghūUmànKpanàmaKpɛlûKpoleneshìa è Fàlâŋ" + + "nsìKpakpua Ginè È fūghūFelèkpîKpakìsɨ̀tânKpulànSɛ̀n Kpiyɛ̀ à Mikelɔŋ" + + "Kpitɨ̀kalèKpǒto LekoAdzɨmā kɨ ŋgùŋ kɨ Palɛsɨtɨnyia à kɨ Gazà kòKputu" + + "wgàKpàlawùKpalàgwɛ̂KatàLèyunyɔ̀ŋLùmanyìaLoshìaLùwandàSawudi AlabiChw" + + "ɨlà fɨ Solomwɨ̀nSɛchɛ̀lɛ̀sSùdânSuedɨ̀nSiŋgàkpôoSɛ̀n ÈlenàSɨ̀lòvɨnyì" + + "aSɨ̀lòvɨkɨ̀aSilìa lûŋSàn MàlenùSɛ̀nɛ̀gâaSòmalìaSulènamèSawo Tɔ̀me à " + + "Kpèlènsikpɛ̀EsàvadòSilîaShǔazìlânChwɨla n Tɨtê à KaekùsChâTugùTaelàn" + + "Tàdzikìsɨ̀tânTuwkelawùÊs TaemòTekɨmènèsɨ̀tânTùneshìaTuŋgàTeekìTèlene" + + "dà à TòbagùTuwvalùwTaewànTàanzanyìaYùkɛ̀lɛ̂YùgandàUSAYulùgwɛ̂Yùzɨ̀bɛ" + + "kìsɨ̀tânVatikàn Sɨ̀tɛ̂Sɛ̀n Vinsɨ̀n à Gɨlenadi Ù tēVɛ̀nɛ̀zǔɛɛlàChwɨlà" + + " m̀ Vidzinyìa m̀ Bɨ̀letì mòU. S. Chwɨlà fɨ MbuʔmbuVìyɛnàmVànǔatùwWal" + + "es à FùwtuwnàSàmowàYɛmɛ̀nMàyotìAfɨlekà ghɨ Emàm ghòZambìaZìmbagbɛ̀", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x0020, 0x0035, 0x004a, 0x0054, 0x005e, + 0x0068, 0x0071, 0x0071, 0x007f, 0x0090, 0x009c, 0x00af, 0x00b6, + 0x00b6, 0x00c5, 0x00e5, 0x00ee, 0x00ff, 0x010a, 0x0118, 0x0123, + 0x012a, 0x0133, 0x013f, 0x013f, 0x0149, 0x0153, 0x015b, 0x015b, + 0x0167, 0x0170, 0x0177, 0x0177, 0x0186, 0x0190, 0x019c, 0x01a3, + 0x01a3, 0x01cb, 0x01e8, 0x01ef, 0x01f9, 0x0205, 0x0217, 0x021d, + 0x0228, 0x022f, 0x0239, 0x0239, 0x024a, 0x0251, 0x026c, 0x026c, + 0x026c, 0x0276, 0x0289, 0x0291, 0x0291, 0x029b, 0x02a4, 0x02ae, + // Entry 40 - 7F + 0x02c5, 0x02d0, 0x02d0, 0x02d7, 0x02e5, 0x02ea, 0x02ea, 0x02f6, + 0x0302, 0x030c, 0x030c, 0x030c, 0x0314, 0x0319, 0x032f, 0x033f, + 0x033f, 0x034b, 0x0352, 0x0366, 0x0373, 0x037e, 0x0396, 0x0396, + 0x039c, 0x03a9, 0x03b5, 0x03bc, 0x03c1, 0x03ce, 0x03e1, 0x03ea, + 0x03ea, 0x03f8, 0x03fc, 0x040a, 0x0412, 0x0412, 0x0412, 0x041c, + 0x0427, 0x042e, 0x0439, 0x0439, 0x0446, 0x0451, 0x045c, 0x045c, + 0x0462, 0x049a, 0x04a4, 0x04aa, 0x04b5, 0x04bb, 0x04bb, 0x04c5, + 0x04cc, 0x04d5, 0x04dc, 0x04eb, 0x04f5, 0x04ff, 0x0507, 0x051a, + // Entry 80 - BF + 0x0529, 0x0538, 0x0540, 0x0555, 0x0563, 0x0569, 0x0571, 0x057f, + 0x058c, 0x059b, 0x05a6, 0x05b0, 0x05bc, 0x05c7, 0x05cf, 0x05d5, + 0x05dd, 0x05e4, 0x05ed, 0x05ed, 0x05ed, 0x05fb, 0x060e, 0x061f, + 0x0624, 0x062c, 0x0637, 0x0637, 0x065e, 0x0669, 0x0676, 0x0681, + 0x0687, 0x0694, 0x069c, 0x06a4, 0x06af, 0x06ba, 0x06c4, 0x06cd, + 0x06e5, 0x06ec, 0x0700, 0x070a, 0x0715, 0x071e, 0x0728, 0x0730, + 0x0738, 0x073c, 0x074e, 0x0753, 0x075b, 0x0762, 0x077e, 0x0796, + 0x079f, 0x07ae, 0x07b5, 0x07d1, 0x07de, 0x07e9, 0x0822, 0x082b, + // Entry C0 - FF + 0x0834, 0x0840, 0x0845, 0x0845, 0x0852, 0x085c, 0x085c, 0x0863, + 0x086c, 0x0878, 0x0890, 0x089f, 0x08a6, 0x08af, 0x08bb, 0x08c9, + 0x08d9, 0x08d9, 0x08ea, 0x08f6, 0x0903, 0x0911, 0x091a, 0x0924, + 0x0924, 0x0944, 0x094d, 0x094d, 0x0953, 0x095f, 0x095f, 0x097a, + 0x097e, 0x097e, 0x0983, 0x098a, 0x099c, 0x09a6, 0x09b0, 0x09c4, + 0x09ce, 0x09d5, 0x09db, 0x09f1, 0x09fa, 0x0a01, 0x0a0d, 0x0a1a, + 0x0a23, 0x0a23, 0x0a23, 0x0a26, 0x0a31, 0x0a48, 0x0a5b, 0x0a7f, + 0x0a93, 0x0abd, 0x0ad8, 0x0ae2, 0x0aed, 0x0b00, 0x0b08, 0x0b08, + // Entry 100 - 13F + 0x0b11, 0x0b19, 0x0b32, 0x0b39, 0x0b45, + }, + }, + { // ak + "AndoraUnited Arab EmiratesAfganistanAntigua ne BaabudaAnguilaAlbeniaAame" + + "niaAngolaAgyɛntinaAmɛrika SamoaƆstriaƆstreliaArubaAzebaegyanBosnia n" + + "e HɛzegovinaBaabadosBangladɛhyeBɛlgyiumBɔkina FasoBɔlgeriaBarenBurun" + + "diBɛninBɛmudaBrunaeBoliviaBrazilBahamaButanBɔtswanaBɛlarusBelizKanad" + + "aKongo (Zair)Afrika Finimfin ManKongoSwetzalandLa Côte d’IvoireKook " + + "NsupɔwKyiliKamɛrunKyaenaKolombiaKɔsta RikaKubaKepvɛdfo IslandsSaeprɔ" + + "sKyɛk KurokɛseGyaamanGyibutiDɛnmakDɔmenekaDɔmeneka KurokɛseƆlgyeriaI" + + "kuwadɔƐstoniaNisrimƐritreaSpainIthiopiaFinlandFigyiFɔlkman AelandMae" + + "kronehyiaFrɛnkyemanGabɔnAhendiman NkabomGrenadaGyɔgyeaFrɛnkye Gayana" + + "GaanaGyebraltaGreenmanGambiaGiniGuwadelupGini IkuwetaGreekmanGuwatem" + + "alaGuamGini BisawGayanaHɔndurasKrowehyiaHeitiHangariIndɔnehyiaAerela" + + "ndIsraelIndiaBritenfo Hɔn Man Wɔ India Po No MuIrakIranAeslandItaliG" + + "yamekaGyɔdanGyapanKɛnyaKɛɛgestanKambodiaKiribatiKɔmɔrɔsSaint Kitts n" + + "e NɛvesEtifi KoriaAnaafo KoriaKuweteKemanfo IslandsKazakstanLaosLɛba" + + "nɔnSaint LuciaLektenstaenSri LankaLaeberiaLɛsutuLituweniaLaksembɛgLa" + + "tviaLibyaMorokoMɔnakoMɔldovaMadagaskaMarshall IslandsMasedoniaMaliMi" + + "yanmaMɔngoliaNorthern Mariana IslandsMatinikMɔreteniaMantseratMɔltaM" + + "ɔrehyeɔsMaldivesMalawiMɛksikoMalehyiaMozambikNamibiaKaledonia Fofor" + + "oNigyɛNɔfolk AelandNaegyeriaNekaraguwaNɛdɛlandNɔɔweNɛpɔlNaworuNiyuZi" + + "land FoforoOmanPanamaPeruFrɛnkye PɔlenehyiaPapua Guinea FoforoPhilip" + + "pinesPakistanPolandSaint Pierre ne MiquelonPitcairnPuɛto RikoPalesta" + + "en West Bank ne GazaPɔtugalPalauParaguayKataReyuniɔnRomeniaRɔhyeaRwa" + + "ndaSaudi ArabiaSolomon IslandsSeyhyɛlSudanSwedenSingapɔSaint HelenaS" + + "loviniaSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinameSão Tomé " + + "and PríncipeƐl SalvadɔSiriaSwazilandTurks ne Caicos IslandsKyadTogoT" + + "aelandTajikistanTokelauTimɔ BokaTɛkmɛnistanTunihyiaTongaTɛɛkiTrinida" + + "d ne TobagoTuvaluTaiwanTanzaniaUkrenUgandaAmɛrikaYurugwaeUzbɛkistanV" + + "atican ManSaint Vincent ne GrenadinesVenezuelaBritainfo Virgin Islan" + + "dsAmɛrika Virgin IslandsViɛtnamVanuatuWallis ne FutunaSamoaYɛmenMayɔ" + + "teAfrika AnaafoZambiaZembabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x001a, 0x0024, 0x0036, 0x003d, 0x0044, + 0x004b, 0x0051, 0x0051, 0x005b, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0088, 0x009d, 0x00a5, 0x00b1, 0x00ba, 0x00c6, 0x00cf, + 0x00d4, 0x00db, 0x00e1, 0x00e1, 0x00e8, 0x00ee, 0x00f5, 0x00f5, + 0x00fb, 0x0101, 0x0106, 0x0106, 0x010f, 0x0117, 0x011c, 0x0122, + 0x0122, 0x012e, 0x0141, 0x0146, 0x0150, 0x0163, 0x016f, 0x0174, + 0x017c, 0x0182, 0x018a, 0x018a, 0x0195, 0x0199, 0x01aa, 0x01aa, + 0x01aa, 0x01b2, 0x01c1, 0x01c8, 0x01c8, 0x01cf, 0x01d6, 0x01df, + // Entry 40 - 7F + 0x01f2, 0x01fb, 0x01fb, 0x0203, 0x020b, 0x0211, 0x0211, 0x0219, + 0x021e, 0x0226, 0x0226, 0x0226, 0x022d, 0x0232, 0x0241, 0x024d, + 0x024d, 0x0258, 0x025e, 0x026e, 0x0275, 0x027d, 0x028c, 0x028c, + 0x0291, 0x029a, 0x02a2, 0x02a8, 0x02ac, 0x02b5, 0x02c1, 0x02c9, + 0x02c9, 0x02d3, 0x02d7, 0x02e1, 0x02e7, 0x02e7, 0x02e7, 0x02f0, + 0x02f9, 0x02fe, 0x0305, 0x0305, 0x0310, 0x0318, 0x031e, 0x031e, + 0x0323, 0x0347, 0x034b, 0x034f, 0x0356, 0x035b, 0x035b, 0x0362, + 0x0369, 0x036f, 0x0375, 0x0380, 0x0388, 0x0390, 0x039a, 0x03af, + // Entry 80 - BF + 0x03ba, 0x03c6, 0x03cc, 0x03db, 0x03e4, 0x03e8, 0x03f1, 0x03fc, + 0x0407, 0x0410, 0x0418, 0x041f, 0x0428, 0x0432, 0x0438, 0x043d, + 0x0443, 0x044a, 0x0452, 0x0452, 0x0452, 0x045b, 0x046b, 0x0474, + 0x0478, 0x047f, 0x0488, 0x0488, 0x04a0, 0x04a7, 0x04b1, 0x04ba, + 0x04c0, 0x04cb, 0x04d3, 0x04d9, 0x04e1, 0x04e9, 0x04f1, 0x04f8, + 0x0508, 0x050e, 0x051c, 0x0525, 0x052f, 0x0539, 0x0540, 0x0547, + 0x054d, 0x0551, 0x055e, 0x0562, 0x0568, 0x056c, 0x0580, 0x0593, + 0x059e, 0x05a6, 0x05ac, 0x05c4, 0x05cc, 0x05d7, 0x05f2, 0x05fa, + // Entry C0 - FF + 0x05ff, 0x0607, 0x060b, 0x060b, 0x0614, 0x061b, 0x061b, 0x0622, + 0x0628, 0x0634, 0x0643, 0x064b, 0x0650, 0x0656, 0x065e, 0x066a, + 0x0672, 0x0672, 0x067a, 0x0686, 0x0690, 0x0697, 0x069e, 0x06a6, + 0x06a6, 0x06be, 0x06ca, 0x06ca, 0x06cf, 0x06d8, 0x06d8, 0x06ef, + 0x06f3, 0x06f3, 0x06f7, 0x06fe, 0x0708, 0x070f, 0x0719, 0x0726, + 0x072e, 0x0733, 0x073a, 0x074c, 0x0752, 0x0758, 0x0760, 0x0765, + 0x076b, 0x076b, 0x076b, 0x0773, 0x077b, 0x0786, 0x0791, 0x07ac, + 0x07b5, 0x07cd, 0x07e4, 0x07ec, 0x07f3, 0x0803, 0x0808, 0x0808, + // Entry 100 - 13F + 0x080e, 0x0815, 0x0822, 0x0828, 0x0830, + }, + }, + { // am + amRegionStr, + amRegionIdx, + }, + { // ar + arRegionStr, + arRegionIdx, + }, + {}, // ar-EG + { // ar-LY + "سبتة ومليليةمونتيسيراتأوروغواي", + []uint16{ // 245 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + // Entry 80 - BF + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + // Entry C0 - FF + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x003b, + }, + }, + { // ar-SA + "جزر البهاماسبتة ومليليةمونتيسيراتسان بيير وميكولونأوروغواي", + []uint16{ // 245 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 40 - 7F + 0x0015, 0x0015, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + // Entry 80 - BF + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + // Entry C0 - FF + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0070, + }, + }, + { // as + "এন্টাৰ্টিকাব্ৰাজিলবভেট দ্বীপচীনজাৰ্মানিফ্ৰান্সসংযুক্ত ৰাজ্যদক্ষিণ জৰ্জিয" + + "়া আৰু দক্ষিণ চেণ্ডৱিচ্\u200c দ্বীপহাৰ্ড দ্বীপ আৰু মেক্\u200cডোনাল" + + "্ড দ্বীপভাৰতব্ৰিটিশ্ব ইণ্ডিয়ান মহাসাগৰৰ অঞ্চলইটালিজাপানৰুচদক্ষিণ " + + "ফ্ৰান্সৰ অঞ্চলযুক্তৰাষ্ট্ৰঅজ্ঞাত বা অবৈধ অঞ্চল", + []uint16{ // 262 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0036, 0x0036, 0x0036, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, + 0x005b, 0x005b, 0x005b, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + // Entry 40 - 7F + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0088, 0x0088, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0182, 0x0182, + 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, + 0x018e, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01fd, 0x01fd, 0x01fd, + 0x01fd, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + // Entry 80 - BF + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + // Entry C0 - FF + 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x0215, + 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, + 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, + 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, + 0x0215, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, + 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, + 0x0250, 0x0250, 0x0250, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, + 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, + // Entry 100 - 13F + 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x02aa, + }, + }, + { // asa + "AndoraFalme dha KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArme" + + "niaAngolaAjentinaThamoa ya MarekaniAuthtriaAuthtraliaArubaAdhabajani" + + "Bothnia na HedhegovinaBabadothiBangladeshiUbelgijiBukinafathoBulgari" + + "aBahareniBurundiBeniniBermudaBruneiBraziliBahamaButaniBotthwanaBelar" + + "uthiBelidheKanadaJamhuri ya Kidemokrathia ya KongoJamhuri ya Afrika " + + "ya KatiKongoUthwithiKodivaaVithiwa vya CookChileKameruniChinaKolombi" + + "aKothtarikaKubaKepuvedeKuprothiJamhuri ya ChekiUjerumaniJibutiDenmak" + + "iDominikaJamhuri ya DominikaAljeriaEkwadoEthtoniaMithriEritreaHithpa" + + "niaUhabeshiUfiniFijiVithiwa vya FalklandMikronethiaUfaranthaGaboniUi" + + "ngeredhaGrenadaJojiaGwiyana ya UfaranthaGhanaJibraltaGrinlandiGambia" + + "GineGwadelupeGinekwetaUgirikiGwatemalaGwamGinebisauGuyanaHondurathiK" + + "orathiaHaitiHungariaIndonethiaAyalandiIthraeliIndiaIeneo la Uingered" + + "ha katika Bahari HindiIrakiUajemiAithlandiItaliaJamaikaYordaniJapani" + + "KenyaKirigizithtaniKambodiaKiribatiKomoroThantakitdhi na NevithKorea" + + " KathkaziniKorea KuthiniKuwaitiVithiwa vya KaymanKazakithtaniLaothiL" + + "ebanoniThantaluthiaLishenteniThirilankaLiberiaLethotoLitwaniaLathemb" + + "agiLativiaLibyaMorokoMonakoMoldovaBukiniVithiwa vya MarshalMathedoni" + + "aMaliMyamaMongoliaVithiwa vya Mariana vya KathkaziniMartinikiMoritan" + + "iaMonttherratiMaltaMorithiModivuMalawiMekthikoMalethiaMthumbijiNamib" + + "iaNyukaledoniaNijeriKithiwa cha NorfokNijeriaNikaragwaUholandhiNorwe" + + "NepaliNauruNiueNyudhilandiOmaniPanamaPeruPolinesia ya UfaranthaPapua" + + "FilipinoPakithtaniPolandiThantapieri na MikeloniPitkairniPwetorikoPa" + + "lestinaUrenoPalauParagwaiKatariRiyunioniRomaniaUruthiRwandaThaudiVit" + + "hiwa vya TholomonShelisheliThudaniUthwidiThingapooThantahelenaThlove" + + "niaTholvakiaThiera LeoniThamarinoThenegaliThomaliaThurinamuThao Tome" + + " na PrincipeElsavadoThiriaUthwadhiVithiwa vya Turki na KaikoChadiTog" + + "oTailandiTajikithtaniTokelauTimori ya MasharikiTurukimenithtaniTunit" + + "hiaTongaUturukiTrinidad na TobagoTuvaluTaiwaniTadhaniaUgandaMarekani" + + "UrugwaiUdhibekithtaniVatikaniThantavithenti na GrenadiniVenezuelaVit" + + "hiwa vya Virgin vya UingeredhaVithiwa vya Virgin vya MarekaniVietina" + + "muVanuatuWalith na FutunaThamoaYemeniMayotteAfrika KuthiniDhambiaDhi" + + "mbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0017, 0x0023, 0x0035, 0x003d, 0x0044, + 0x004b, 0x0051, 0x0051, 0x0059, 0x006b, 0x0073, 0x007d, 0x0082, + 0x0082, 0x008c, 0x00a2, 0x00ab, 0x00b6, 0x00be, 0x00c9, 0x00d1, + 0x00d9, 0x00e0, 0x00e6, 0x00e6, 0x00ed, 0x00f3, 0x00f3, 0x00f3, + 0x00fa, 0x0100, 0x0106, 0x0106, 0x010f, 0x0118, 0x011f, 0x0125, + 0x0125, 0x0146, 0x015f, 0x0164, 0x016c, 0x0173, 0x0183, 0x0188, + 0x0190, 0x0195, 0x019d, 0x019d, 0x01a7, 0x01ab, 0x01b3, 0x01b3, + 0x01b3, 0x01bb, 0x01cb, 0x01d4, 0x01d4, 0x01da, 0x01e1, 0x01e9, + // Entry 40 - 7F + 0x01fc, 0x0203, 0x0203, 0x0209, 0x0211, 0x0217, 0x0217, 0x021e, + 0x0227, 0x022f, 0x022f, 0x022f, 0x0234, 0x0238, 0x024c, 0x0257, + 0x0257, 0x0260, 0x0266, 0x0270, 0x0277, 0x027c, 0x0290, 0x0290, + 0x0295, 0x029d, 0x02a6, 0x02ac, 0x02b0, 0x02b9, 0x02c2, 0x02c9, + 0x02c9, 0x02d2, 0x02d6, 0x02df, 0x02e5, 0x02e5, 0x02e5, 0x02ef, + 0x02f7, 0x02fc, 0x0304, 0x0304, 0x030e, 0x0316, 0x031e, 0x031e, + 0x0323, 0x034a, 0x034f, 0x0355, 0x035e, 0x0364, 0x0364, 0x036b, + 0x0372, 0x0378, 0x037d, 0x038b, 0x0393, 0x039b, 0x03a1, 0x03b7, + // Entry 80 - BF + 0x03c7, 0x03d4, 0x03db, 0x03ed, 0x03f9, 0x03ff, 0x0407, 0x0413, + 0x041d, 0x0427, 0x042e, 0x0435, 0x043d, 0x0447, 0x044e, 0x0453, + 0x0459, 0x045f, 0x0466, 0x0466, 0x0466, 0x046c, 0x047f, 0x0489, + 0x048d, 0x0492, 0x049a, 0x049a, 0x04bc, 0x04c5, 0x04ce, 0x04da, + 0x04df, 0x04e6, 0x04ec, 0x04f2, 0x04fa, 0x0502, 0x050b, 0x0512, + 0x051e, 0x0524, 0x0536, 0x053d, 0x0546, 0x054f, 0x0554, 0x055a, + 0x055f, 0x0563, 0x056e, 0x0573, 0x0579, 0x057d, 0x0593, 0x0598, + 0x05a0, 0x05aa, 0x05b1, 0x05c8, 0x05d1, 0x05da, 0x05e3, 0x05e8, + // Entry C0 - FF + 0x05ed, 0x05f5, 0x05fb, 0x05fb, 0x0604, 0x060b, 0x060b, 0x0611, + 0x0617, 0x061d, 0x0631, 0x063b, 0x0642, 0x0649, 0x0652, 0x065e, + 0x0667, 0x0667, 0x0670, 0x067c, 0x0685, 0x068e, 0x0696, 0x069f, + 0x069f, 0x06b4, 0x06bc, 0x06bc, 0x06c2, 0x06ca, 0x06ca, 0x06e4, + 0x06e9, 0x06e9, 0x06ed, 0x06f5, 0x0701, 0x0708, 0x071b, 0x072b, + 0x0733, 0x0738, 0x073f, 0x0751, 0x0757, 0x075e, 0x0766, 0x0766, + 0x076c, 0x076c, 0x076c, 0x0774, 0x077b, 0x0789, 0x0791, 0x07ac, + 0x07b5, 0x07d6, 0x07f5, 0x07fe, 0x0805, 0x0815, 0x081b, 0x081b, + // Entry 100 - 13F + 0x0821, 0x0828, 0x0836, 0x083d, 0x0846, + }, + }, + { // ast + "Islla AscensiónAndorraEmiratos Árabes XuníosAfganistánAntigua y BarbudaA" + + "nguilaAlbaniaArmeniaAngolaL’AntártidaArxentinaSamoa AmericanaAustria" + + "AustraliaArubaIslles AlandAzerbaixánBosnia y HerzegovinaBarbadosBang" + + "ladexBélxicaBurkina FasuBulgariaBaḥréinBurundiBenínSan BartoloméLes " + + "BermudesBrunéiBoliviaCaribe neerlandésBrasilLes BahamesButánIslla Bo" + + "uvetBotsuanaBielorrusiaBelizeCanadáIslles Cocos (Keeling)Congu - Kin" + + "xasaRepública CentroafricanaCongu - BrazzavilleSuizaCosta de MarfilI" + + "slles CookChileCamerúnChinaColombiaIslla ClippertonCosta RicaCubaCab" + + "u VerdeCuraçaoIslla ChristmasXipreChequiaAlemañaDiego GarciaXibutiDi" + + "namarcaDominicaRepública DominicanaArxeliaCeuta y MelillaEcuadorEsto" + + "niaExiptuSáḥara OccidentalEritreaEspañaEtiopíaXunión EuropeaFinlandi" + + "aIslles FixiFalkland IslandsMicronesiaIslles FeroeFranciaGabónReinu " + + "XuníuGranadaXeorxaGuyana FrancesaGuernseyGhanaXibraltarGroenlandiaGa" + + "mbiaGuineaGuadalupeGuinea EcuatorialGreciaIslles Xeorxa del Sur y Sa" + + "ndwich del SurGuatemalaGuamGuinea-BisáuGuyanaARE China de Ḥong KongI" + + "slles Heard y McDonaldHonduresCroaciaHaitíHungríaIslles CanariesIndo" + + "nesiaIrlandaIsraelIslla de ManIndiaTerritoriu Británicu del Océanu Í" + + "ndicuIraqIránIslandiaItaliaJerseyXamaicaXordaniaXapónKeniaKirguistán" + + "CamboyaKiribatiLes ComoresSaint Kitts y NevisCorea del NorteCorea de" + + "l SurKuwaitIslles CaimánKazakstánLaosLíbanuSanta LlucíaLiechtenstein" + + "Sri LankaLiberiaLesothuLituaniaLuxemburguLetoniaLibiaMarruecosMónacu" + + "MoldaviaMontenegruSaint MartinMadagascarIslles MarshallMacedoniaMalí" + + "Myanmar (Birmania)MongoliaARE China de MacáuIslles Marianes del Nort" + + "eLa MartinicaMauritaniaMontserratMaltaMauriciuLes MaldivesMalauiMéxi" + + "cuMalasiaMozambiqueNamibiaNueva CaledoniaEl NíxerIslla NorfolkNixeri" + + "aNicaraguaPaíses BaxosNoruegaNepalNauruNiueNueva ZelandaOmánPanamáPe" + + "rúPolinesia FrancesaPapúa Nueva GuineaFilipinesPaquistánPoloniaSaint" + + " Pierre y MiquelonIslles PitcairnPuertu RicuTerritorios PalestinosPo" + + "rtugalPaláuParaguáiQatarOceanía esteriorReuniónRumaníaSerbiaRusiaRua" + + "ndaArabia SauditaIslles SalomónLes SeixelesSudánSueciaSingapurSanta " + + "HelenaEsloveniaSvalbard ya Islla Jan MayenEslovaquiaSierra LleonaSan" + + " MarínSenegalSomaliaSurinamSudán del SurSantu Tomé y PríncipeEl Salv" + + "adorSint MaartenSiriaSuazilandiaTristán da CunhaIslles Turques y Cai" + + "cosChadTierres Australes FrancesesToguTailandiaTaxiquistánTokeláuTim" + + "or OrientalTurkmenistánTuniciaTongaTurquíaTrinidá y TobaguTuvaluTaiw" + + "ánTanzaniaUcraínaUgandaIslles Perifériques Menores de los EE.XX.Est" + + "aos XuníosUruguáiUzbequistánCiudá del VaticanuSan Vicente y Granadin" + + "esVenezuelaIslles Vírxenes BritániquesIslles Vírxenes AmericanesViet" + + "namVanuatuWallis y FutunaSamoaKosovuYemenMayotteSudáfricaZambiaZimba" + + "bueRexón desconocidaMunduÁfricaNorteaméricaAmérica del SurOceaníaÁfr" + + "ica OccidentalAmérica CentralÁfrica OrientalÁfrica del NorteÁfrica C" + + "entralÁfrica del SurAméricaAmérica del NorteCaribeAsia OrientalAsia " + + "del SurSureste AsiáticuEuropa del SurAustralasiaMelanesiaRexón de Mi" + + "cronesiaPolinesiaAsiaAsia CentralAsia OccidentalEuropaEuropa Orienta" + + "lEuropa del NorteEuropa OccidentalAmérica Llatina", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x002f, 0x003a, 0x004b, 0x0052, 0x0059, + 0x0060, 0x0066, 0x0074, 0x007d, 0x008c, 0x0093, 0x009c, 0x00a1, + 0x00ad, 0x00b8, 0x00cc, 0x00d4, 0x00dd, 0x00e5, 0x00f1, 0x00f9, + 0x0103, 0x010a, 0x0110, 0x011e, 0x012a, 0x0131, 0x0138, 0x014a, + 0x0150, 0x015b, 0x0161, 0x016d, 0x0175, 0x0180, 0x0186, 0x018d, + 0x01a3, 0x01b2, 0x01cb, 0x01de, 0x01e3, 0x01f2, 0x01fd, 0x0202, + 0x020a, 0x020f, 0x0217, 0x0227, 0x0231, 0x0235, 0x023f, 0x0247, + 0x0256, 0x025b, 0x0262, 0x026a, 0x0276, 0x027c, 0x0285, 0x028d, + // Entry 40 - 7F + 0x02a2, 0x02a9, 0x02b8, 0x02bf, 0x02c6, 0x02cc, 0x02e0, 0x02e7, + 0x02ee, 0x02f6, 0x0305, 0x0305, 0x030e, 0x0319, 0x0329, 0x0333, + 0x033f, 0x0346, 0x034c, 0x0358, 0x035f, 0x0365, 0x0374, 0x037c, + 0x0381, 0x038a, 0x0395, 0x039b, 0x03a1, 0x03aa, 0x03bb, 0x03c1, + 0x03e9, 0x03f2, 0x03f6, 0x0403, 0x0409, 0x0421, 0x0438, 0x0440, + 0x0447, 0x044d, 0x0455, 0x0464, 0x046d, 0x0474, 0x047a, 0x0486, + 0x048b, 0x04b4, 0x04b8, 0x04bd, 0x04c5, 0x04cb, 0x04d1, 0x04d8, + 0x04e0, 0x04e6, 0x04eb, 0x04f6, 0x04fd, 0x0505, 0x0510, 0x0523, + // Entry 80 - BF + 0x0532, 0x053f, 0x0545, 0x0553, 0x055d, 0x0561, 0x0568, 0x0575, + 0x0582, 0x058b, 0x0592, 0x0599, 0x05a1, 0x05ab, 0x05b2, 0x05b7, + 0x05c0, 0x05c7, 0x05cf, 0x05d9, 0x05e5, 0x05ef, 0x05fe, 0x0607, + 0x060c, 0x061e, 0x0626, 0x0639, 0x0652, 0x065e, 0x0668, 0x0672, + 0x0677, 0x067f, 0x068b, 0x0691, 0x0698, 0x069f, 0x06a9, 0x06b0, + 0x06bf, 0x06c8, 0x06d5, 0x06dc, 0x06e5, 0x06f2, 0x06f9, 0x06fe, + 0x0703, 0x0707, 0x0714, 0x0719, 0x0720, 0x0725, 0x0737, 0x074a, + 0x0753, 0x075d, 0x0764, 0x077b, 0x078a, 0x0795, 0x07ab, 0x07b3, + // Entry C0 - FF + 0x07b9, 0x07c2, 0x07c7, 0x07d8, 0x07e0, 0x07e8, 0x07ee, 0x07f3, + 0x07f9, 0x0807, 0x0816, 0x0822, 0x0828, 0x082e, 0x0836, 0x0842, + 0x084b, 0x0866, 0x0870, 0x087d, 0x0887, 0x088e, 0x0895, 0x089c, + 0x08aa, 0x08c1, 0x08cc, 0x08d8, 0x08dd, 0x08e8, 0x08f9, 0x0910, + 0x0914, 0x092f, 0x0933, 0x093c, 0x0948, 0x0950, 0x095e, 0x096b, + 0x0972, 0x0977, 0x097f, 0x0990, 0x0996, 0x099d, 0x09a5, 0x09ad, + 0x09b3, 0x09dd, 0x09dd, 0x09eb, 0x09f3, 0x09ff, 0x0a12, 0x0a2a, + 0x0a33, 0x0a50, 0x0a6b, 0x0a72, 0x0a79, 0x0a88, 0x0a8d, 0x0a93, + // Entry 100 - 13F + 0x0a98, 0x0a9f, 0x0aa9, 0x0aaf, 0x0ab7, 0x0ac9, 0x0ace, 0x0ad5, + 0x0ae2, 0x0af2, 0x0afa, 0x0b0c, 0x0b1c, 0x0b2c, 0x0b3d, 0x0b4c, + 0x0b5b, 0x0b63, 0x0b75, 0x0b7b, 0x0b88, 0x0b94, 0x0ba5, 0x0bb3, + 0x0bbe, 0x0bc7, 0x0bdb, 0x0be4, 0x0be8, 0x0bf4, 0x0c03, 0x0c09, + 0x0c18, 0x0c28, 0x0c39, 0x0c49, + }, + }, + { // az + azRegionStr, + azRegionIdx, + }, + { // az-Cyrl + "Аскенсон адасыАндорраБирләшмиш Әрәб ӘмирликләриӘфганыстанАнтигуа вә Барб" + + "удаАнҝилјаАлбанијаЕрмәнистанАнголаАнтарктикаАрҝентинаАмерика Самоас" + + "ыАвстријаАвстралијаАрубаАланд адаларыАзәрбајҹанБоснија вә Һерсегови" + + "наБарбадосБангладешБелчикаБуркина ФасоБолгарыстанБәһрејнБурундиБени" + + "нСент-БартелемиБермуд адаларыБрунејБоливијаБразилијаБаһам адаларыБу" + + "танБуве адасыБотсванаБеларусБелизКанадаКокос (Килинг) адаларыКонго-" + + "КиншасаМәркәзи Африка РеспубликасыКонго-БраззавилИсвечрәKотд’ивуарК" + + "ук адаларыЧилиКамерунЧинКолумбијаКлиппертон адасыКоста РикаКубаКабо" + + "-ВердеКурасаоМилад адасыКипрЧех РеспубликасыАлманијаДиего ГарсијаҸиб" + + "утиДанимаркаДоминикаДоминикан РеспубликасыӘлҹәзаирСеута вә МелилјаЕ" + + "квадорЕстонијаМисирЕритрејаИспанијаЕфиопијаАвропа БирлијиФинландија" + + "ФиҹиФолкленд адаларыМикронезијаФарер адаларыФрансаГабонБирләшмиш Кр" + + "аллыгГренадаҜүрҹүстанФранса ГвианасыҜернсиГанаҸәбәллүтаригГренланди" + + "јаГамбијаГвинејаГваделупаЕкваториал ГвинејаЈунаныстанҸәнуби Ҹорҹија" + + " вә Ҹәнуби Сендвич адаларыГватемалаГуамГвинеја-БисауГајанаҺонк Конг " + + "Хүсуси Инзибати Әрази ЧинҺерд вә Макдоналд адаларыҺондурасХорватија" + + "ҺаитиМаҹарыстанКанар адаларыИндонезијаИрландијаИсраилМен адасыҺинди" + + "станБритантјанын Һинд Океаны ӘразисиИрагИранИсландијаИталијаҸерсиЈа" + + "мајкаИорданијаЈапонијаКенијаГырғызыстанКамбоҹаКирибатиКомор адалары" + + "Сент-Китс вә НевисШимали КорејаҸәнуби КорејаКүвејтКајман адаларыГаз" + + "ахыстанЛаосЛиванСент-ЛусијаЛихтенштејнШри-ЛанкаЛиберијаЛесотоЛитваЛ" + + "үксембургЛатвијаЛивијаМәракешМонакоМолдоваМонтенегроСент МартинМада" + + "гаскарМаршал адаларыМалиМјанмаМонголустанМакао Хүсуси Инзибати Әраз" + + "и ЧинШимали Мариан адаларыМартиникМавританијаМонсератМалтаМаврикиМа" + + "лдив адаларыМалавиМексикаМалајзијаМозамбикНамибијаЈени КаледонијаНи" + + "ҝерНорфолк адасыНиҝеријаНикарагуаНидерландНорвечНепалНауруНиуеЈени " + + "ЗеландијаОманПанамаПеруФранса ПолинезијасыПапуа-Јени ГвинејаФилиппи" + + "нПакистанПолшаМүгәддәс Пјер вә МикелонПиткерн адаларыПуерто РикоПор" + + "тугалијаПалауПарагвајГәтәрУзаг ОкеанијаРејунјонРумынијаСербијаРусиј" + + "аРуандаСәудијјә ӘрәбистаныСоломон адаларыСејшел адаларыСуданИсвечСи" + + "нгапурМүгәддәс ЈеленаСловенијаСвалбард вә Јан-МајенСловакијаСјерра-" + + "ЛеонеСан-МариноСенегалСомалиСуринамҸәнуби СуданСан-Томе вә Принсипи" + + "СалвадорСинт-МартенСуријаСвазилендТристан да КунјаТөркс вә Кајкос а" + + "даларыЧадФрансанын Ҹәнуб ӘразиләриТогоТаиландТаҹикистанТокелауШәрги" + + " ТиморТүркмәнистанТунисТонгаТүркијәТринидад вә ТобагоТувалуТајванТан" + + "занијаУкрајнаУгандаАБШ-а бағлы кичик адаҹыгларАмерика Бирләшмиш Шта" + + "тларыУругвајӨзбәкистанВатиканСент-Винсент вә ГренадинләрВенесуелаБр" + + "итанијанын Вирҝин адаларыАБШ Вирҝин адаларыВјетнамВануатуУоллис вә " + + "ФутунаСамоаКосовоЈәмәнМајотҸәнуб АфрикаЗамбијаЗимбабвеНамәлум Реҝио" + + "нДүнјаАфрикаШимали АмерикаҸәнуби АмерикаОкеанијаГәрби АфрикаМәркәзи" + + " АмерикаШәрги АфрикаШимали АфрикаМәркәзи АфрикаҸәнуби АфрикаАмерикаШ" + + "имал АмерикасыКарибШәрги АсијаҸәнуби АсијаҸәнуб-Шәрги АсијаҸәнуби А" + + "вропаАвстралазијаМеланезијаМикронезија РеҝионуПолинезијаАсијаМәркәз" + + "и АсијаГәрби АсијаАвропаШәрги АвропаШимали АвропаГәрби АвропаЛатын " + + "Америкасы", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001b, 0x0029, 0x005b, 0x006f, 0x0091, 0x009f, 0x00af, + 0x00c3, 0x00cf, 0x00e3, 0x00f5, 0x0112, 0x0122, 0x0136, 0x0140, + 0x0159, 0x016d, 0x0197, 0x01a7, 0x01b9, 0x01c7, 0x01de, 0x01f4, + 0x0202, 0x0210, 0x021a, 0x0235, 0x0250, 0x025c, 0x026c, 0x026c, + 0x027e, 0x0297, 0x02a1, 0x02b4, 0x02c4, 0x02d2, 0x02dc, 0x02e8, + 0x0310, 0x0329, 0x035d, 0x037a, 0x0388, 0x039c, 0x03b1, 0x03b9, + 0x03c7, 0x03cd, 0x03df, 0x03fe, 0x0411, 0x0419, 0x042c, 0x043a, + 0x044f, 0x0457, 0x0476, 0x0486, 0x049f, 0x04ab, 0x04bd, 0x04cd, + // Entry 40 - 7F + 0x04f8, 0x0508, 0x0526, 0x0534, 0x0544, 0x054e, 0x054e, 0x055e, + 0x056e, 0x057e, 0x0599, 0x0599, 0x05ad, 0x05b5, 0x05d4, 0x05ea, + 0x0603, 0x060f, 0x0619, 0x063a, 0x0648, 0x065a, 0x0677, 0x0683, + 0x068b, 0x06a3, 0x06b9, 0x06c7, 0x06d5, 0x06e7, 0x070a, 0x071e, + 0x0769, 0x077b, 0x0783, 0x079c, 0x07a8, 0x07e9, 0x0818, 0x0828, + 0x083a, 0x0844, 0x0858, 0x0871, 0x0885, 0x0897, 0x08a3, 0x08b4, + 0x08c6, 0x0903, 0x090b, 0x0913, 0x0925, 0x0933, 0x093d, 0x094b, + 0x095d, 0x096d, 0x0979, 0x098f, 0x099d, 0x09ad, 0x09c6, 0x09e7, + // Entry 80 - BF + 0x0a00, 0x0a19, 0x0a25, 0x0a40, 0x0a54, 0x0a5c, 0x0a66, 0x0a7b, + 0x0a91, 0x0aa2, 0x0ab2, 0x0abe, 0x0ac8, 0x0adc, 0x0aea, 0x0af6, + 0x0b04, 0x0b10, 0x0b1e, 0x0b32, 0x0b47, 0x0b5b, 0x0b76, 0x0b76, + 0x0b7e, 0x0b8a, 0x0ba0, 0x0bda, 0x0c02, 0x0c12, 0x0c28, 0x0c38, + 0x0c42, 0x0c50, 0x0c6b, 0x0c77, 0x0c85, 0x0c97, 0x0ca7, 0x0cb7, + 0x0cd4, 0x0cde, 0x0cf7, 0x0d07, 0x0d19, 0x0d2b, 0x0d37, 0x0d41, + 0x0d4b, 0x0d53, 0x0d6e, 0x0d76, 0x0d82, 0x0d8a, 0x0daf, 0x0dd1, + 0x0de1, 0x0df1, 0x0dfb, 0x0e28, 0x0e45, 0x0e5a, 0x0e5a, 0x0e70, + // Entry C0 - FF + 0x0e7a, 0x0e8a, 0x0e94, 0x0ead, 0x0ebd, 0x0ecd, 0x0edb, 0x0ee7, + 0x0ef3, 0x0f18, 0x0f35, 0x0f50, 0x0f5a, 0x0f64, 0x0f74, 0x0f91, + 0x0fa3, 0x0fca, 0x0fdc, 0x0ff3, 0x1006, 0x1014, 0x1020, 0x102e, + 0x1045, 0x106a, 0x107a, 0x108f, 0x109b, 0x10ad, 0x10cb, 0x10f6, + 0x10fc, 0x112c, 0x1134, 0x1142, 0x1156, 0x1164, 0x1179, 0x1191, + 0x119b, 0x11a5, 0x11b3, 0x11d5, 0x11e1, 0x11ed, 0x11ff, 0x120d, + 0x1219, 0x124b, 0x124b, 0x127d, 0x128b, 0x129f, 0x12ad, 0x12e0, + 0x12f2, 0x1326, 0x1348, 0x1356, 0x1364, 0x1382, 0x138c, 0x1398, + // Entry 100 - 13F + 0x13a2, 0x13ac, 0x13c3, 0x13d1, 0x13e1, 0x13fc, 0x1406, 0x1412, + 0x142d, 0x1448, 0x1458, 0x146f, 0x148c, 0x14a3, 0x14bc, 0x14d7, + 0x14f0, 0x14fe, 0x151b, 0x1525, 0x153a, 0x1551, 0x1571, 0x158a, + 0x15a2, 0x15b6, 0x15db, 0x15ef, 0x15f9, 0x1612, 0x1627, 0x1633, + 0x164a, 0x1663, 0x167a, 0x1697, + }, + }, + { // bas + "Àŋdɔ̂rÀdnà i Bilɔ̀ŋ bi ArābìàÀfgànìstâŋÀŋtigà ɓɔ BàrbudàÀŋgiyàÀlbanìàÀrm" + + "enìàÀŋgolàÀrgàŋtinàÒstrǐkÒstralìàÀrubàÀzɛ̀rbajàŋBòhnià ƐrzègòvinàBàr" + + "badòBàŋglàdɛ̂sBɛlgyùmBùrkìnà FasòBùlgarìàBàraìnBùrundìBènɛ̂ŋBɛ̀rmudà" + + "BruneiBòlivìàBràsîlBàhamàsBùtânBòdsùanàBèlarùsBèlîsKànadàKòŋgo ìkɛŋi" + + "Ŋ̀ɛm AfrīkàKòŋgoSùwîsMàŋ mi Njɔ̂kBìòn bi KookKìlîKàmɛ̀rûnKinàKɔ̀lɔm" + + "bìàKòstà RikàKubàKabwɛ᷆rKipròJamânJìbutìDànmârkDòmnîkDòmnikàÀlgerìàÈ" + + "kwàtorìàÈstonìàÈgîptòÈrìtrěàPànyaÈtìopìàFìnlândFijiBìòn bi FalklandM" + + "ìkrònesìàPùlàsi / Fɛ̀lɛ̀nsi /Gàbɔ̂ŋÀdnà i Lɔ̂ŋGrènadàGèɔrgìàGùyanà " + + "PùlàsiGanàGìlbràtârGrǐnlàndGàmbiàGìnêGwàdèlûpGìne ÈkwàtorìàGrǐkyàGwà" + + "tèmalàGùâmGìne BìsàôGùyanàƆ̀ŋduràsKròasìàÀitìƆ̀ŋgriìIndònèsiàÌrlândI" + + "sràɛ̂lIndìàBìtèk bi Ŋgisì i Tūyɛ ĪndìàÌrâkÌrâŋÌslandìàÌtalìàJàmàikàY" + + "ɔ̀rdaniàKenìàKìrgìzìstàŋKàmbodìàKìrìbatìKɔ̀mɔ̂rNûmpubi Kîts nì Nevì" + + "sKɔ̀re ì Ŋ̀ɔmbɔkKɔ̀re ì Ŋ̀wɛ̀lmbɔkKòwêtBìòn bi KaymànKàzàkstâŋLàôsLè" + + "banònNûmpubi LusìLigstɛntànSrìlaŋkàLìberìàLesòtòLìtùanìàLùgsàmbûrLàd" + + "viàLibìàMàrokòMònakòMoldavìàMàdàgàskârBìòn bi MarcàlMàsèdonìàMàliMyà" + + "nmârMòŋgolìàBìòn bi Marìanà ŋ̀ɔmbɔkMàrtìnîkMòrìtanìàMɔ̀ŋseràtMaltàMò" + + "rîsMàldîfMàlàwiMɛ̀gsîkMàlɛ̀sìàMòsàmbîkNàmibìàKàlèdonìà Yɔ̀ndɔNìjɛ̂rÒ" + + "n i Nɔrfɔ̂kNìgerìàNìkàragwàǸlɛndiNɔ̀rvegìàNèpâlNerùNìuɛ̀Sìlând Yɔ̀nd" + + "ɔÒmânPànàmaPèrûPòlìnesìà PùlàsiGìne ì PàpuFìlìpînPàkìstânPòlàndNûmp" + + "ubi Petrò nì MikèlônPìdkaìrnPɔ̀rtò RikòPàlɛ̀htinà Hyɔ̀ŋg nì GazàPɔ̀t" + + "ɔkìPàlaùPàràgwêKàtârRèunyɔ̂ŋRùmanìàRuslàndRùandàSàudi ÀrabìàBìòn bi" + + " SalōmòSèsɛ̂lSùdâŋSwedɛ̀nSìŋgàpûrNûmpubi ƐlēnàSlòvanìàSlòvakìàSièra " + + "Lèɔ̂nNûmpubi MāatìnSènègâlSòmalìàSùrinâmSào Tòme ɓɔ Prɛ̀ŋcipèSàlvàdɔ" + + "̂rSirìàSwàzìlândBìòn bi Tûrks nì KalkòsCâdTògoTaylàndTàjìkìstaŋTòkè" + + "laòTìmɔ̂r lìkòlTùrgmènìstânTùnisìàTɔŋgàTùrkâyTrìnidàd ɓɔ TòbagòTùvàl" + + "ùTàywânTànzàniàÙkrɛ̌nÙgandàÀdnà i Bilɔ̀ŋ bi AmerkàÙrùgwêyÙzbèkìstân" + + "VàtìkâŋNûmpubi Vɛ̂ŋsâŋ nì grènàdînVènèzùelàBìòn bi kɔnji bi ŊgisìBìò" + + "n bi kɔnji bi U.S.Vìɛ̀dnâmVànùatùWàlîs nì FùtunàSàmoàYèmɛ̂nMàyɔ̂tÀfr" + + "ǐkà Sɔ̀ZàmbiàZìmbàbwê", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000a, 0x0029, 0x0038, 0x0050, 0x0059, 0x0063, + 0x006d, 0x0076, 0x0076, 0x0083, 0x0083, 0x008b, 0x0096, 0x009d, + 0x009d, 0x00ac, 0x00c3, 0x00cc, 0x00db, 0x00e4, 0x00f4, 0x00ff, + 0x0107, 0x0110, 0x011a, 0x011a, 0x0125, 0x012b, 0x0135, 0x0135, + 0x013d, 0x0146, 0x014d, 0x014d, 0x0158, 0x0161, 0x0168, 0x0170, + 0x0170, 0x0180, 0x0190, 0x0197, 0x019e, 0x01ae, 0x01bc, 0x01c2, + 0x01ce, 0x01d3, 0x01e1, 0x01e1, 0x01ee, 0x01f3, 0x01fd, 0x01fd, + 0x01fd, 0x0203, 0x0203, 0x0209, 0x0209, 0x0211, 0x021a, 0x0222, + // Entry 40 - 7F + 0x022b, 0x0235, 0x0235, 0x0242, 0x024c, 0x0255, 0x0255, 0x0260, + 0x0266, 0x0271, 0x0271, 0x0271, 0x027a, 0x027e, 0x0290, 0x029e, + 0x029e, 0x02b8, 0x02c2, 0x02d2, 0x02db, 0x02e6, 0x02f7, 0x02f7, + 0x02fc, 0x0308, 0x0312, 0x031a, 0x0320, 0x032b, 0x033e, 0x0346, + 0x0346, 0x0352, 0x0358, 0x0366, 0x036e, 0x036e, 0x036e, 0x037a, + 0x0384, 0x038a, 0x0395, 0x0395, 0x03a1, 0x03a9, 0x03b3, 0x03b3, + 0x03ba, 0x03de, 0x03e4, 0x03eb, 0x03f6, 0x03ff, 0x03ff, 0x0409, + 0x0415, 0x0415, 0x041c, 0x042c, 0x0437, 0x0442, 0x044d, 0x0466, + // Entry 80 - BF + 0x047c, 0x0496, 0x049d, 0x04ae, 0x04bb, 0x04c1, 0x04ca, 0x04d8, + 0x04e4, 0x04ef, 0x04f9, 0x0501, 0x050d, 0x0519, 0x0521, 0x0528, + 0x0530, 0x0538, 0x0542, 0x0542, 0x0542, 0x0550, 0x0561, 0x056e, + 0x0573, 0x057c, 0x0588, 0x0588, 0x05a7, 0x05b2, 0x05bf, 0x05cc, + 0x05d2, 0x05d9, 0x05e1, 0x05e9, 0x05f3, 0x0600, 0x060b, 0x0615, + 0x062c, 0x0635, 0x0645, 0x064f, 0x065b, 0x0663, 0x0670, 0x0677, + 0x067c, 0x0684, 0x0696, 0x069c, 0x06a4, 0x06aa, 0x06c0, 0x06ce, + 0x06d8, 0x06e3, 0x06eb, 0x0708, 0x0712, 0x0721, 0x0743, 0x074e, + // Entry C0 - FF + 0x0755, 0x075f, 0x0766, 0x0766, 0x0772, 0x077c, 0x077c, 0x0784, + 0x078c, 0x079c, 0x07ae, 0x07b7, 0x07bf, 0x07c8, 0x07d4, 0x07e5, + 0x07f0, 0x07f0, 0x07fb, 0x080a, 0x081b, 0x0825, 0x082f, 0x0838, + 0x0838, 0x0855, 0x0862, 0x0862, 0x0869, 0x0875, 0x0875, 0x0891, + 0x0895, 0x0895, 0x089a, 0x08a2, 0x08b0, 0x08ba, 0x08cb, 0x08db, + 0x08e5, 0x08ed, 0x08f5, 0x090d, 0x0916, 0x091e, 0x0929, 0x0932, + 0x093a, 0x093a, 0x093a, 0x0957, 0x0961, 0x096f, 0x097a, 0x099f, + 0x09ac, 0x09c7, 0x09df, 0x09eb, 0x09f5, 0x0a09, 0x0a10, 0x0a10, + // Entry 100 - 13F + 0x0a19, 0x0a22, 0x0a31, 0x0a39, 0x0a44, + }, + }, + { // be + "Востраў УзнясенняАндораАб’яднаныя Арабскія ЭміратыАфганістанАнтыгуа і Ба" + + "рбудаАнгільяАлбаніяАрменіяАнголаАнтарктыкаАргенцінаАмерыканскае Сам" + + "оаАўстрыяАўстраліяАрубаАландскія астравыАзербайджанБоснія і Герцага" + + "вінаБарбадасБангладэшБельгіяБуркіна-ФасоБалгарыяБахрэйнБурундзіБені" + + "нСен-БартэльміБермудскія астравыБрунейБалівіяКарыбскія НідэрландыБр" + + "азіліяБагамыБутанВостраў БувэБатсванаБеларусьБелізКанадаКакосавыя (" + + "Кілінг) астравыКонга (Кіншаса)Цэнтральнаафрыканская РэспублікаКонга" + + " - БразавільШвейцарыяКот-д’ІвуарАстравы КукаЧыліКамерунКітайКалумбія" + + "Востраў КліпертонКоста-РыкаКубаКаба-ВердэКюрасааВостраў КалядКіпрЧэ" + + "хіяГерманіяВостраў Дыега-ГарсіяДжыбуціДаніяДамінікаДамініканская Рэ" + + "спублікаАлжырСеўта і МелільяЭквадорЭстоніяЕгіпетЗаходняя СахараЭрыт" + + "рэяІспаніяЭфіопіяЕўрапейскі саюзФінляндыяФіджыФалклендскія астравыМ" + + "ікранезіяФарэрскія астравыФранцыяГабонВялікабрытаніяГрэнадаГрузіяФр" + + "анцузская ГвіянаГернсіГанаГібралтарГрэнландыяГамбіяГвінеяГвадэлупаЭ" + + "кватарыяльная ГвінеяГрэцыяПаўднёвая Джорджыя і Паўднёвыя Сандвічавы" + + " астравыГватэмалаГуамГвінея-БісауГаянаГанконг, САР (Кітай)Астравы Хе" + + "рд і МакдональдГандурасХарватыяГаіціВенгрыяКанарскія астравыІнданез" + + "іяІрландыяІзраільВостраў МэнІндыяБрытанская тэрыторыя ў Індыйскім а" + + "кіянеІракІранІсландыяІталіяДжэрсіЯмайкаІарданіяЯпоніяКеніяКыргызста" + + "нКамбоджаКірыбаціКаморскія АстравыСент-Кітс і НевісПаўночная КарэяП" + + "аўднёвая КарэяКувейтКайманавы астравыКазахстанЛаосЛіванСент-ЛюсіяЛі" + + "хтэнштэйнШры-ЛанкаЛіберыяЛесотаЛітваЛюксембургЛатвіяЛівіяМарокаМана" + + "каМалдоваЧарнагорыяСен-МартэнМадагаскарМаршалавы АстравыМакедоніяМа" + + "ліМ’янма (Бірма)МанголіяМакаа, САР (Кітай)Паўночныя Марыянскія астр" + + "авыМарцінікаМаўрытаніяМантсератМальтаМаўрыкійМальдывыМалавіМексікаМ" + + "алайзіяМазамбікНамібіяНовая КаледоніяНігерВостраў НорфалкНігерыяНік" + + "арагуаНідэрландыНарвегіяНепалНауруНіуэНовая ЗеландыяАманПанамаПеруФ" + + "ранцузская ПалінезіяПапуа-Новая ГвінеяФіліпіныПакістанПольшчаСен-П’" + + "ер і МікелонАстравы ПіткэрнПуэрта-РыкаПалесцінскія ТэрыторыіПартуга" + + "ліяПалауПарагвайКатарЗнешняя АкіяніяРэюньёнРумыніяСербіяРасіяРуанда" + + "Саудаўская АравіяСаламонавы АстравыСейшэльскія АстравыСуданШвецыяСі" + + "нгапурВостраў Святой АленыСлавеніяШпіцберген і Ян-МаенСлавакіяСьера" + + "-ЛеонэСан-МарынаСенегалСамаліСурынамПаўднёвы СуданСан-Тамэ і Прынсіп" + + "іСальвадорСінт-МартэнСірыяСвазілендТрыстан-да-КуньяЦёркс і КайкасЧа" + + "дФранцузскія Паўднёвыя тэрыторыіТогаТайландТаджыкістанТакелауТымор-" + + "ЛешціТуркменістанТунісТонгаТурцыяТрынідад і ТабагаТувалуТайваньТанз" + + "аніяУкраінаУгандаМалыя Аддаленыя астравы ЗШАЗлучаныя Штаты АмерыкіУ" + + "ругвайУзбекістанВатыканСент-Вінсент і ГрэнадзіныВенесуэлаБрытанскія" + + " Віргінскія астравыАмерыканскія Віргінскія астравыВ’етнамВануатуУолі" + + "с і ФутунаСамоаКосаваЕменМаётаПаўднёваафрыканская РэспублікаЗамбіяЗ" + + "імбабвэНевядомы рэгіёнСветАфрыкаПаўночная АмерыкаПаўднёвая АмерыкаА" + + "кіяніяЗаходняя АфрыкаЦэнтральная АмерыкаУсходняя АфрыкаПаўночная Аф" + + "рыкаЦэнтральная АфрыкаПаўднёвая АфрыкаПаўночная і Паўднёвая Амерыкі" + + "Паўночнаамерыканскі рэгіёнКарыбскія астравыУсходняя АзіяПаўднёвая А" + + "зіяПаўднёва-Усходняя АзіяПаўднёвая ЕўропаАўстралазіяМеланезіяМікран" + + "езійскі рэгіёнПалінезіяАзіяЦэнтральная АзіяЗаходняя АзіяЕўропаУсход" + + "няя ЕўропаПаўночная ЕўропаЗаходняя ЕўропаЛацінская Амерыка", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0021, 0x002d, 0x0062, 0x0076, 0x0096, 0x00a4, 0x00b2, + 0x00c0, 0x00cc, 0x00e0, 0x00f2, 0x0115, 0x0123, 0x0135, 0x013f, + 0x0160, 0x0176, 0x019c, 0x01ac, 0x01be, 0x01cc, 0x01e3, 0x01f3, + 0x0201, 0x0211, 0x021b, 0x0234, 0x0257, 0x0263, 0x0271, 0x0298, + 0x02a8, 0x02b4, 0x02be, 0x02d5, 0x02e5, 0x02f5, 0x02ff, 0x030b, + 0x033b, 0x0356, 0x0395, 0x03b4, 0x03c6, 0x03dc, 0x03f3, 0x03fb, + 0x0409, 0x0413, 0x0423, 0x0444, 0x0457, 0x045f, 0x0472, 0x0480, + 0x0499, 0x04a1, 0x04ab, 0x04bb, 0x04e1, 0x04ef, 0x04f9, 0x0509, + // Entry 40 - 7F + 0x0538, 0x0542, 0x055e, 0x056c, 0x057a, 0x0586, 0x05a3, 0x05b1, + 0x05bf, 0x05cd, 0x05ea, 0x05ea, 0x05fc, 0x0606, 0x062d, 0x0641, + 0x0662, 0x0670, 0x067a, 0x0696, 0x06a4, 0x06b0, 0x06d3, 0x06df, + 0x06e7, 0x06f9, 0x070d, 0x0719, 0x0725, 0x0737, 0x0760, 0x076c, + 0x07c9, 0x07db, 0x07e3, 0x07fa, 0x0804, 0x0827, 0x0856, 0x0866, + 0x0876, 0x0880, 0x088e, 0x08af, 0x08c1, 0x08d1, 0x08df, 0x08f4, + 0x08fe, 0x0948, 0x0950, 0x0958, 0x0968, 0x0974, 0x0980, 0x098c, + 0x099c, 0x09a8, 0x09b2, 0x09c6, 0x09d6, 0x09e6, 0x0a07, 0x0a26, + // Entry 80 - BF + 0x0a43, 0x0a60, 0x0a6c, 0x0a8d, 0x0a9f, 0x0aa7, 0x0ab1, 0x0ac4, + 0x0ada, 0x0aeb, 0x0af9, 0x0b05, 0x0b0f, 0x0b23, 0x0b2f, 0x0b39, + 0x0b45, 0x0b51, 0x0b5f, 0x0b73, 0x0b86, 0x0b9a, 0x0bbb, 0x0bcd, + 0x0bd5, 0x0bef, 0x0bff, 0x0c1e, 0x0c54, 0x0c66, 0x0c7a, 0x0c8c, + 0x0c98, 0x0ca8, 0x0cb8, 0x0cc4, 0x0cd2, 0x0ce2, 0x0cf2, 0x0d00, + 0x0d1d, 0x0d27, 0x0d44, 0x0d52, 0x0d64, 0x0d78, 0x0d88, 0x0d92, + 0x0d9c, 0x0da4, 0x0dbf, 0x0dc7, 0x0dd3, 0x0ddb, 0x0e04, 0x0e26, + 0x0e36, 0x0e46, 0x0e54, 0x0e76, 0x0e93, 0x0ea8, 0x0ed3, 0x0ee7, + // Entry C0 - FF + 0x0ef1, 0x0f01, 0x0f0b, 0x0f28, 0x0f36, 0x0f44, 0x0f50, 0x0f5a, + 0x0f66, 0x0f87, 0x0faa, 0x0fcf, 0x0fd9, 0x0fe5, 0x0ff5, 0x101b, + 0x102b, 0x1050, 0x1060, 0x1075, 0x1088, 0x1096, 0x10a2, 0x10b0, + 0x10cb, 0x10ee, 0x1100, 0x1115, 0x111f, 0x1131, 0x114f, 0x1169, + 0x116f, 0x11ab, 0x11b3, 0x11c1, 0x11d7, 0x11e5, 0x11fa, 0x1212, + 0x121c, 0x1226, 0x1232, 0x1252, 0x125e, 0x126c, 0x127c, 0x128a, + 0x1296, 0x12c9, 0x12c9, 0x12f3, 0x1301, 0x1315, 0x1323, 0x1352, + 0x1364, 0x139c, 0x13d8, 0x13e7, 0x13f5, 0x140f, 0x1419, 0x1425, + // Entry 100 - 13F + 0x142d, 0x1437, 0x1472, 0x147e, 0x148e, 0x14ab, 0x14b3, 0x14bf, + 0x14e0, 0x1501, 0x150f, 0x152c, 0x1551, 0x156e, 0x158d, 0x15b0, + 0x15cf, 0x1606, 0x1639, 0x165a, 0x1673, 0x168e, 0x16b8, 0x16d7, + 0x16ed, 0x16ff, 0x1726, 0x1738, 0x1740, 0x175f, 0x1778, 0x1784, + 0x17a1, 0x17c0, 0x17dd, 0x17fe, + }, + }, + { // bem + "Zambia", + []uint16{ // 260 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0006, + }, + }, + { // bez + "HuandolaHufalme dza HihalabuHuafuganistaniHuantigua na HubarubudaHuangui" + + "laHualbaniaHuameniaHuangolaHuajendinaHusamoa ya HumalekaniHuastliaHu" + + "austlaliaHualubaHuazabajaniHubosinia na HuhezegovinaHubabadosiHubang" + + "aladeshiHuubelgijiHubukinafasoHubulgariaHubahaleniHuburundiHubeniniH" + + "ubelmudaHubruneiHuboliviaHublaziliHubahamaHubutaniHubotiswanaHubelal" + + "usiHubelizeHukanadaIjamhuri ya Hidemokrasi ya HukongoIjamhuri ya Afr" + + "ika ya PagatiHukongoHuuswisiHukodivaaIfisima fya KookHuchileHukameru" + + "niHuchinaHukolombiaHukostarikaHukubaHukepuvedeHukuprosiIjamhuri ya C" + + "hekiHuujerumaniHujibutiHudenmakiHudominikaIjamhuri ya HudominikaHual" + + "jeliaHuekwadoHuestoniaHumisriHueritreaHuhispaniaHuuhabeshiHuufiniHuf" + + "ijiIfisima fya FalklandHumikronesiaHuufaransaHugaboniHuuingerezaHugr" + + "enadaHujojiaHugwiyana ya HuufaransaHughanaHujiblaltaHujinlandiHugamb" + + "iaHujineHugwadelupeHuginekwetaHuugilikiHugwatemalaHugwamHuginebisauH" + + "uguyanaHuhondulasiHukorasiaHuhaitiHuhungaliaHuindonesiaHuayalandiHui" + + "slaheliHuindiaUlubali lwa Hubahari ya Hindi lwa HuingerezaHuilakiHuu" + + "ajemiHuaislandiHuitaliaHujamaikaHuyolodaniHujapaniHukenyaHukiligizis" + + "taniHukambodiaHukilibatiHukomoroHusantakitzi na HunevisHukolea Kaska" + + "ziniHukolea KusiniHukuwaitiIfisima fya KaymanHukazakistaniHulaosiHul" + + "ebanoniHusantalusiaHulishenteniHusirilankaHulibeliaHulesotoHulitwani" + + "aHulasembagiHulativiaHulibiyaHumolokoHumonakoHumoldovaHubukiniIfisim" + + "a fya MarshalHumasedoniaHumaliHumyamaHumongoliaIfisima fya Mariana f" + + "ya HukaskaziniHumartinikiHumolitaniaHumontserratiHumaltaHumolisiHumo" + + "divuHumalawiHumeksikoHumalesiaHumusumbijiHunamibiaHunyukaledoniaHuni" + + "jeliIhisima sha NorfokHunijeliaHunikaragwaHuuholanziHunolweHunepaliH" + + "unauruHuniueHunyuzilandiHuomaniHupanamaHupeluHupolinesia ya Huufaran" + + "saHupapuaHufilipinoHupakistaniHupolandiHusantapieri na HumikeloniHup" + + "itkainiHupwetorikoUlubali lwa Magharibi nu Gaza wa HupalestinaHuulen" + + "oHupalauHupalagwaiHukataliHuliyunioniHulomaniaHuulusiHulwandaHusaudi" + + "Ifisima fya SolomonHushelisheliHusudaniHuuswidiHusingapooHusantahele" + + "naHusloveniaHuslovakiaHusiela LioniHusamalinoHusenegaliHusomaliaHusu" + + "rinamuHusaotome na HuprinsipeHuelsavadoHusiliaHuuswaziIfisima fya Tu" + + "rki na KaikoHuchadiHutogoHutailandiHutajikistaniHutokelauHutimori ya" + + " MasharikiHuuturukimenistaniHutunisiaHutongaHuuturukiHutrinad na Hut" + + "obagoHutuvaluHutaiwaniHutanzaniaHuukrainiHuugandaHumalekaniHuulugwai" + + "HuuzibekistaniHuvatikaniHusantavisenti na HugrenadiniHuvenezuelaIfis" + + "ima fya Virgin fya HuingerezaIfisima fya Virgin fya HumelekaniHuviet" + + "inamuHuvanuatuHuwalis na HufutunaHusamoaHuyemeniHumayotteHuafrika iy" + + "a HukusiniHuzambiaHuzimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x001c, 0x002a, 0x0041, 0x004a, 0x0053, + 0x005b, 0x0063, 0x0063, 0x006d, 0x0082, 0x008a, 0x0095, 0x009c, + 0x009c, 0x00a7, 0x00c0, 0x00ca, 0x00d8, 0x00e2, 0x00ee, 0x00f8, + 0x0102, 0x010b, 0x0113, 0x0113, 0x011c, 0x0124, 0x012d, 0x012d, + 0x0136, 0x013e, 0x0146, 0x0146, 0x0151, 0x015b, 0x0163, 0x016b, + 0x016b, 0x018d, 0x01a9, 0x01b0, 0x01b8, 0x01c1, 0x01d1, 0x01d8, + 0x01e2, 0x01e9, 0x01f3, 0x01f3, 0x01fe, 0x0204, 0x020e, 0x020e, + 0x020e, 0x0217, 0x0228, 0x0233, 0x0233, 0x023b, 0x0244, 0x024e, + // Entry 40 - 7F + 0x0264, 0x026d, 0x026d, 0x0275, 0x027e, 0x0285, 0x0285, 0x028e, + 0x0298, 0x02a2, 0x02a2, 0x02a2, 0x02a9, 0x02af, 0x02c3, 0x02cf, + 0x02cf, 0x02d9, 0x02e1, 0x02ec, 0x02f5, 0x02fc, 0x0313, 0x0313, + 0x031a, 0x0324, 0x032e, 0x0336, 0x033c, 0x0347, 0x0352, 0x035b, + 0x035b, 0x0366, 0x036c, 0x0377, 0x037f, 0x037f, 0x037f, 0x038a, + 0x0393, 0x039a, 0x03a4, 0x03a4, 0x03af, 0x03b9, 0x03c3, 0x03c3, + 0x03ca, 0x03f6, 0x03fd, 0x0405, 0x040f, 0x0417, 0x0417, 0x0420, + 0x042a, 0x0432, 0x0439, 0x0448, 0x0452, 0x045c, 0x0464, 0x047b, + // Entry 80 - BF + 0x048c, 0x049a, 0x04a3, 0x04b5, 0x04c2, 0x04c9, 0x04d3, 0x04df, + 0x04eb, 0x04f6, 0x04ff, 0x0507, 0x0511, 0x051c, 0x0525, 0x052d, + 0x0535, 0x053d, 0x0546, 0x0546, 0x0546, 0x054e, 0x0561, 0x056c, + 0x0572, 0x0579, 0x0583, 0x0583, 0x05a6, 0x05b1, 0x05bc, 0x05c9, + 0x05d0, 0x05d8, 0x05e0, 0x05e8, 0x05f1, 0x05fa, 0x0605, 0x060e, + 0x061c, 0x0624, 0x0636, 0x063f, 0x064a, 0x0654, 0x065b, 0x0663, + 0x066a, 0x0670, 0x067c, 0x0683, 0x068b, 0x0691, 0x06aa, 0x06b1, + 0x06bb, 0x06c6, 0x06cf, 0x06e9, 0x06f3, 0x06fe, 0x072a, 0x0731, + // Entry C0 - FF + 0x0738, 0x0742, 0x074a, 0x074a, 0x0755, 0x075e, 0x075e, 0x0765, + 0x076d, 0x0774, 0x0787, 0x0793, 0x079b, 0x07a3, 0x07ad, 0x07ba, + 0x07c4, 0x07c4, 0x07ce, 0x07db, 0x07e5, 0x07ef, 0x07f8, 0x0802, + 0x0802, 0x0819, 0x0823, 0x0823, 0x082a, 0x0832, 0x0832, 0x084c, + 0x0853, 0x0853, 0x0859, 0x0863, 0x0870, 0x0879, 0x088e, 0x08a0, + 0x08a9, 0x08b0, 0x08b9, 0x08cd, 0x08d5, 0x08de, 0x08e8, 0x08f1, + 0x08f9, 0x08f9, 0x08f9, 0x0903, 0x090c, 0x091a, 0x0924, 0x0941, + 0x094c, 0x096d, 0x098e, 0x0999, 0x09a2, 0x09b5, 0x09bc, 0x09bc, + // Entry 100 - 13F + 0x09c4, 0x09cd, 0x09e2, 0x09ea, 0x09f4, + }, + }, + { // bg + bgRegionStr, + bgRegionIdx, + }, + { // bm + "AndɔrArabu mara kafoliAfiganistaŋAntiga-ni-BarbudaAngiyaAlibaniArimeniAn" + + "golaArizantinSamowa amerikaniOtirisiOsitiraliArubaAzɛrbayjaŋBozni-Ɛr" + + "izigoviniBarbadiBɛngiladɛsiBɛlizikiBurukina FasoBuligariBareyiniBuru" + + "ndiBenɛnBermudiBurinɛyiBoliviBereziliBahamasiButaŋBɔtisiwanaBelarusi" + + "BeliziKanadaKongo ka republiki demɔkratikiSantarafirikiKongoSuwisiKo" + + "diwariKuki GunSiliKameruniSiniwajamanaKolombiKɔsitarikaKubaCapivɛrdi" + + "CipriCeki republikiAlimaɲiJibutiDanemarkiDɔminikiDɔmimiki republikiA" + + "lizeriEkwatɔrEsetoniEziputiEritereEsipaɲiEtiopiFinilandiFijiMaluwini" + + " GunMikironesiFaransiGabɔŋAngilɛtɛriGranadiZeyɔrziFaransi ka gwiyani" + + "GanaZibralitariGɔrɔhenelandiGanbiGineGwadelupGine ekwatɔriGɛrɛsiGwat" + + "emalaGwamGine BisawoGwiyanaHɔndirasiKroasiAyitiHɔngriƐndoneziIriland" + + "iIsirayeliƐndujamanaAngilɛ ka ɛndu dugukoloIrakiIraŋIsilandiItaliZam" + + "ayikiZɔrdaniZapɔnKeniyaKirigizisitaŋKambojiKiribatiKomɔriKristɔfo-Se" + + "nu-ni-ƝevɛsKɛɲɛka KoreWorodugu KoreKowɛtiBama GunKazakistaŋLayosiLib" + + "aŋLusi-SenuLisɛnsitayiniSirilankaLiberiyaLesotoLituyaniLikisanburuLe" + + "toniLibiMarɔkuMonakoMolidaviMadagasikariMarisali GunMacedɔniMaliMyan" + + "imariMoŋoliKɛɲɛka Mariyani GunMaritinikiMɔritaniMoŋseraMaltiMorisiMa" + + "ldiviMalawiMeksikiMalɛziMozanbikiNamibiKaledoni KouraNizɛriNɔrofolik" + + "i GunNizeriyaNikaragwaPeyibaNɔriwɛziNepaliNawuruNyuweZelandi KouraOm" + + "aŋPanamaPeruFaransi ka polineziPapuwasi-Gine-KouraFilipiniPakisitaŋP" + + "oloɲiPiyɛri-Senu-ni-MikelɔŋPitikariniPɔrotorikoPalesitiniPɔritigaliP" + + "alawuParaguwayiKatariReyuɲɔŋRumaniIrisiRuwandaArabiya SawudiyaSalomo" + + " GunSesɛliSudaŋSuwɛdiSɛngapuriƐlɛni SenuSloveniSlowakiSiyera LewɔniM" + + "arini-SenuSenegaliSomaliSurinamiSawo Tome-ni-PrinicipeSalivadɔrSiriS" + + "wazilandiTuriki Gun ni KayikiCadiTogoTayilandiTajikisitaniTokeloKɔrɔ" + + "n TimɔrTurikimenisitaniTuniziTongaTurikiTrinite-ni-TobagoTuvaluTayiw" + + "aniTanzaniUkɛrɛniUgandaAmerikiUrugwayiUzebekisitaniVatikaŋVinisɛn-Se" + + "nu-ni-GrenadiniVenezuwelaAngilɛ ka Sungurunnin GunAmeriki ka Sunguru" + + "nnin GunWiyɛtinamuVanuwatuWalisi-ni-FutunaSamowaYemɛniMayotiWorodugu" + + " AfrikiZanbiZimbabuwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0017, 0x0023, 0x0034, 0x003a, 0x0041, + 0x0048, 0x004e, 0x004e, 0x0057, 0x0067, 0x006e, 0x0077, 0x007c, + 0x007c, 0x0088, 0x009a, 0x00a1, 0x00ae, 0x00b7, 0x00c4, 0x00cc, + 0x00d4, 0x00db, 0x00e1, 0x00e1, 0x00e8, 0x00f1, 0x00f7, 0x00f7, + 0x00ff, 0x0107, 0x010d, 0x010d, 0x0118, 0x0120, 0x0126, 0x012c, + 0x012c, 0x014b, 0x0158, 0x015d, 0x0163, 0x016b, 0x0173, 0x0177, + 0x017f, 0x018b, 0x0192, 0x0192, 0x019d, 0x01a1, 0x01ab, 0x01ab, + 0x01ab, 0x01b0, 0x01be, 0x01c6, 0x01c6, 0x01cc, 0x01d5, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x0200, 0x0207, 0x020e, 0x020e, 0x0215, + 0x021d, 0x0223, 0x0223, 0x0223, 0x022c, 0x0230, 0x023c, 0x0246, + 0x0246, 0x024d, 0x0254, 0x0260, 0x0267, 0x026f, 0x0281, 0x0281, + 0x0285, 0x0290, 0x029f, 0x02a4, 0x02a8, 0x02b0, 0x02be, 0x02c6, + 0x02c6, 0x02cf, 0x02d3, 0x02de, 0x02e5, 0x02e5, 0x02e5, 0x02ef, + 0x02f5, 0x02fa, 0x0301, 0x0301, 0x030a, 0x0312, 0x031b, 0x031b, + 0x0326, 0x033f, 0x0344, 0x0349, 0x0351, 0x0356, 0x0356, 0x035e, + 0x0366, 0x036c, 0x0372, 0x0380, 0x0387, 0x038f, 0x0396, 0x03af, + // Entry 80 - BF + 0x03bd, 0x03ca, 0x03d1, 0x03d9, 0x03e4, 0x03ea, 0x03f0, 0x03f9, + 0x0407, 0x0410, 0x0418, 0x041e, 0x0426, 0x0431, 0x0437, 0x043b, + 0x0442, 0x0448, 0x0450, 0x0450, 0x0450, 0x045c, 0x0468, 0x0471, + 0x0475, 0x047e, 0x0485, 0x0485, 0x049b, 0x04a5, 0x04ae, 0x04b6, + 0x04bb, 0x04c1, 0x04c8, 0x04ce, 0x04d5, 0x04dc, 0x04e5, 0x04eb, + 0x04f9, 0x0500, 0x050f, 0x0517, 0x0520, 0x0526, 0x0530, 0x0536, + 0x053c, 0x0541, 0x054e, 0x0553, 0x0559, 0x055d, 0x0570, 0x0583, + 0x058b, 0x0595, 0x059c, 0x05b5, 0x05bf, 0x05ca, 0x05d4, 0x05df, + // Entry C0 - FF + 0x05e5, 0x05ef, 0x05f5, 0x05f5, 0x05ff, 0x0605, 0x0605, 0x060a, + 0x0611, 0x0621, 0x062b, 0x0632, 0x0638, 0x063f, 0x0649, 0x0655, + 0x065c, 0x065c, 0x0663, 0x0671, 0x067c, 0x0684, 0x068a, 0x0692, + 0x0692, 0x06a8, 0x06b2, 0x06b2, 0x06b6, 0x06c0, 0x06c0, 0x06d4, + 0x06d8, 0x06d8, 0x06dc, 0x06e5, 0x06f1, 0x06f7, 0x0705, 0x0715, + 0x071b, 0x0720, 0x0726, 0x0737, 0x073d, 0x0745, 0x074c, 0x0755, + 0x075b, 0x075b, 0x075b, 0x0762, 0x076a, 0x0777, 0x077f, 0x0799, + 0x07a3, 0x07bd, 0x07d7, 0x07e2, 0x07ea, 0x07fa, 0x0800, 0x0800, + // Entry 100 - 13F + 0x0807, 0x080d, 0x081c, 0x0821, 0x082a, + }, + }, + { // bn + bnRegionStr, + bnRegionIdx, + }, + { // bn-IN + "হন্ডুরাসমলডোভামার্কিন যুক্তরাষ্ট্রের পার্শ্ববর্তী দ্বীপপুঞ্জ", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + // Entry 80 - BF + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + // Entry C0 - FF + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x00ae, + }, + }, + { // bo + "རྒྱ་ནགའཇར་མན་དབྱིན་ཇི་རྒྱ་གར་ཨི་ཀྲར་ལི་ཉི་ཧོང་ལྷོ་ཀོ་རི་ཡ།བལ་ཡུལ་ཨུ་རུ་ས" + + "ུ་ཨ་མེ་རི་ཀ།མིའི་ཤེས་རྟོགས་མ་བྱུང་བའི་ཁོར་ཡུགའཛམ་གླིང་།", + []uint16{ // 263 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + // Entry 40 - 7F + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0075, 0x0075, 0x0075, + 0x0075, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + // Entry 80 - BF + 0x008a, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + // Entry C0 - FF + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + // Entry 100 - 13F + 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x015f, 0x017d, + }, + }, + { // bo-IN + "ཨོཤི་ཡཱན་ན།", + []uint16{ // 267 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0021, + }, + }, + { // br + "Enez AscensionAndorraEmirelezhioù Arab UnanetAfghanistanAntigua ha Barbu" + + "daAnguillaAlbaniaArmeniaAngolaAntarktikaArcʼhantinaSamoa AmerikanAos" + + "triaAostraliaArubaInizi ÅlandAzerbaidjanBosnia ha HerzegovinaBarbado" + + "sBangladeshBelgiaBurkina FasoBulgariaBahreinBurundiBeninSaint Barthé" + + "lemyBermudaBruneiBoliviaKarib NederlandatBrazilBahamasBhoutanEnez Bo" + + "uvetBotswanaBelarusBelizeKanadaInizi KokozKongo - KinshasaRepublik K" + + "reizafrikanKongo - BrazzavilleSuisAod an OlifantInizi CookChileKamer" + + "ounSinaKolombiaEnez ClippertonCosta RicaKubaKab-GlasCuraçaoEnez Chri" + + "stmasKiprenezRepublik TchekAlamagnDiego GarciaDjiboutiDanmarkDominic" + + "aRepublik DominikanAljeriaCeuta ha MelillaEcuadorEstoniaEgiptSahara " + + "ar CʼhornôgEritreaSpagnEtiopiaUnaniezh EuropaFinlandFidjiInizi Falkl" + + "andMikroneziaInizi FaeroFrañsGabonRouantelezh-UnanetGrenadaJorjiaGwi" + + "ana cʼhallGwernenezGhanaJibraltarGreunlandGambiaGineaGwadeloupGinea " + + "ar CʼhehederGresInizi Georgia ar Su hag Inizi Sandwich ar SuGuatemal" + + "aGuamGinea-BissauGuyanaHong Kong RMD SinaInizi Heard ha McDonaldHond" + + "urasKroatiaHaitiHungariaInizi KanariezIndoneziaIwerzhonIsraelEnez Va" + + "navIndiaTiriad breizhveurat Meurvor IndezIraqIranIslandItaliaJerzene" + + "zJamaikaJordaniaJapanKenyaKyrgyzstanKambodjaKiribatiKomorezSaint Kit" + + "ts ha NevisKorea an NorzhKorea ar SuKoweitInizi CaymanKazakstanLaosL" + + "ibanSaint LuciaLiechtensteinSri LankaLiberiaLesothoLituaniaLuksembou" + + "rgLatviaLibiaMarokoMonacoMoldovaMontenegroSaint MartinMadagaskarIniz" + + "i MarshallMakedoniaMaliMyanmar (Birmania)MongoliaMacau RMD SinaInizi" + + " Mariana an NorzhMartinikMaouritaniaMontserratMaltaMorisMaldivezMala" + + "wiMecʼhikoMalaysiaMozambikNamibiaKaledonia NevezNigerEnez NorfolkNig" + + "eriaNicaraguaIzelvroioùNorvegiaNepalNauruNiueZeland-NevezOmanPanamáP" + + "erouPolinezia CʼhallPapoua Ginea-NevezFilipinezPakistanPoloniaSant-P" + + "êr-ha-MikelonEnez PitcairnPuerto RicoTiriadoù PalestinaPortugalPala" + + "uParaguayQatarOseania diabellAr ReünionRoumaniaSerbiaRusiaRwandaArab" + + "ia SaoudatInizi SalomonSechelezSoudanSvedenSingapourSaint-HelenaSlov" + + "eniaSvalbardSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinamSusou" + + "danSão Tomé ha PríncipeSalvadorSint MaartenSiriaSwazilandTristan da " + + "CunhaInizi Turks ha CaicosTchadDouaroù aostral FrañsTogoThailandTadj" + + "ikistanTokelauTimor-LesteTurkmenistanTuniziaTongaTurkiaTrinidad ha T" + + "obagoTuvaluTaiwanTanzaniaUkrainaOugandaInizi diabell ar Stadoù-Unane" + + "tStadoù-UnanetUruguayOuzbekistanVatikanSant Visant hag ar Grenadinez" + + "VenezuelaInizi Gwercʼh Breizh-VeurInizi Gwercʼh ar Stadoù-UnanetViêt" + + " NamVanuatuWallis ha FutunaSamoaKosovoYemenMayotteSuafrikaZambiaZimb" + + "abweRannved dianavBedAfrikaNorzhamerikaSuamerikaOseaniaAfrika ar Cʼh" + + "ornôgKreizamerikaAfrika ar ReterAfrika an NorzhAfrika ar CʼhreizAfri" + + "ka ar SuAmerikaoùAmerika an NorzhKaribAzia ar ReterAzia ar SuAzia ar" + + " GevredEuropa ar SuAostralaziaMelaneziaRannved MikroneziaPolineziaAz" + + "iaAzia ar CʼhreizAzia ar CʼhornôgEuropaEuropa ar ReterEuropa an Norz" + + "hEuropa ar CʼhornôgAmerika Latin", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x0015, 0x002e, 0x0039, 0x004b, 0x0053, 0x005a, + 0x0061, 0x0067, 0x0071, 0x007d, 0x008b, 0x0092, 0x009b, 0x00a0, + 0x00ac, 0x00b7, 0x00cc, 0x00d4, 0x00de, 0x00e4, 0x00f0, 0x00f8, + 0x00ff, 0x0106, 0x010b, 0x011c, 0x0123, 0x0129, 0x0130, 0x0141, + 0x0147, 0x014e, 0x0155, 0x0160, 0x0168, 0x016f, 0x0175, 0x017b, + 0x0186, 0x0196, 0x01ab, 0x01be, 0x01c2, 0x01d0, 0x01da, 0x01df, + 0x01e7, 0x01eb, 0x01f3, 0x0202, 0x020c, 0x0210, 0x0218, 0x0220, + 0x022e, 0x0236, 0x0244, 0x024b, 0x0257, 0x025f, 0x0266, 0x026e, + // Entry 40 - 7F + 0x0280, 0x0287, 0x0297, 0x029e, 0x02a5, 0x02aa, 0x02be, 0x02c5, + 0x02ca, 0x02d1, 0x02e0, 0x02e0, 0x02e7, 0x02ec, 0x02fa, 0x0304, + 0x030f, 0x0315, 0x031a, 0x032c, 0x0333, 0x0339, 0x0347, 0x0350, + 0x0355, 0x035e, 0x0367, 0x036d, 0x0372, 0x037b, 0x038e, 0x0392, + 0x03be, 0x03c7, 0x03cb, 0x03d7, 0x03dd, 0x03ef, 0x0406, 0x040e, + 0x0415, 0x041a, 0x0422, 0x0430, 0x0439, 0x0441, 0x0447, 0x0451, + 0x0456, 0x0477, 0x047b, 0x047f, 0x0485, 0x048b, 0x0493, 0x049a, + 0x04a2, 0x04a7, 0x04ac, 0x04b6, 0x04be, 0x04c6, 0x04cd, 0x04e1, + // Entry 80 - BF + 0x04ef, 0x04fa, 0x0500, 0x050c, 0x0515, 0x0519, 0x051e, 0x0529, + 0x0536, 0x053f, 0x0546, 0x054d, 0x0555, 0x0560, 0x0566, 0x056b, + 0x0571, 0x0577, 0x057e, 0x0588, 0x0594, 0x059e, 0x05ac, 0x05b5, + 0x05b9, 0x05cb, 0x05d3, 0x05e1, 0x05f7, 0x05ff, 0x060a, 0x0614, + 0x0619, 0x061e, 0x0626, 0x062c, 0x0635, 0x063d, 0x0645, 0x064c, + 0x065b, 0x0660, 0x066c, 0x0673, 0x067c, 0x0687, 0x068f, 0x0694, + 0x0699, 0x069d, 0x06a9, 0x06ad, 0x06b4, 0x06b9, 0x06ca, 0x06dc, + 0x06e5, 0x06ed, 0x06f4, 0x0708, 0x0715, 0x0720, 0x0733, 0x073b, + // Entry C0 - FF + 0x0740, 0x0748, 0x074d, 0x075c, 0x0767, 0x076f, 0x0775, 0x077a, + 0x0780, 0x078e, 0x079b, 0x07a3, 0x07a9, 0x07af, 0x07b8, 0x07c4, + 0x07cc, 0x07d4, 0x07dc, 0x07e8, 0x07f2, 0x07f9, 0x0800, 0x0807, + 0x080f, 0x0826, 0x082e, 0x083a, 0x083f, 0x0848, 0x0858, 0x086d, + 0x0872, 0x0889, 0x088d, 0x0895, 0x08a0, 0x08a7, 0x08b2, 0x08be, + 0x08c5, 0x08ca, 0x08d0, 0x08e2, 0x08e8, 0x08ee, 0x08f6, 0x08fd, + 0x0904, 0x0923, 0x0923, 0x0931, 0x0938, 0x0943, 0x094a, 0x0967, + 0x0970, 0x098a, 0x09aa, 0x09b3, 0x09ba, 0x09ca, 0x09cf, 0x09d5, + // Entry 100 - 13F + 0x09da, 0x09e1, 0x09e9, 0x09ef, 0x09f7, 0x0a05, 0x0a08, 0x0a0e, + 0x0a1a, 0x0a23, 0x0a2a, 0x0a3e, 0x0a4a, 0x0a59, 0x0a68, 0x0a7a, + 0x0a86, 0x0a90, 0x0aa0, 0x0aa5, 0x0ab2, 0x0abc, 0x0aca, 0x0ad6, + 0x0ae1, 0x0aea, 0x0afc, 0x0b05, 0x0b09, 0x0b19, 0x0b2b, 0x0b31, + 0x0b40, 0x0b4f, 0x0b63, 0x0b70, + }, + }, + { // brx + "ऍन्डोरासंयुक्त अरब अमीरातअफ़ग़ानिस्तानएन्टिगुआ एवं बारबूडाएंगीलाअल्बानिय" + + "ाआर्मेनियाअंगोलाअंटार्कटिकाअर्जेण्टिनाअमरिकी समोआऑस्ट्रियाऑस्ट्रेल" + + "ियाअरूबाआलाँड द्वीपअज़रबैजानबोसनिया हर्ज़ेगोविनाबारबाडोसबंगलादेशबे" + + "ल्जियमबुर्किना फासोबल्गैरियाबहरैनबुरुंडीबेनेँसेँ बार्थेलेमीबरमूडाब" + + "्रूनइबोलीवियाब्राज़ीलबहामाभूटानबुवे द्वीपबोत्स्वानाबेलारूसबेलिज़कै" + + "नाडाकोकोस द्वीपकॉंगो किनशासासेंट्रल अफ्रीकन रिपब्लिककॉंगो ब्राज़्ज" + + "़ावीलस्वित्ज़रलैंडआईवरी कोस्टकुक द्वीपचिलीकोमेरानचीनकोलम्बियाकोस्ट" + + "ारीकाक्यूबाकैप वेर्देक्रिस्मस द्वीपसाइप्रसचेक गणराज्यजर्मनीद्जिबूत" + + "ीडेनमार्कडोमिनिकाडोमिनिकन गणराज्यअल्जीरियाएक्वाडोरएस्टोनियामिस्रपश" + + "्चिमी सहाराएरिट्रियास्पेनइथिओपियायूरोपीय संघफिनलैंडफिजीफ़ॉल्कलैंड " + + "द्वीपमाइक्रोनेशियाफरो द्वीपफ्राँसगैबॉनब्रितनग्रेनडाजॉर्जियाफ्राँसी" + + "सी गिआनागेर्नसेघानाजिब्राल्टरग्रीनलैण्डगाम्बियागिनीग्वादलुपइक्वेटो" + + "रियल गिनीग्रीसदक्षिण जोर्जिया एवं दक्षिण सैंडवीच द्वीपगोतेदालागुआम" + + "गीनी-बिसाउगुयानाहाँगकाँग विशेष प्रशासनिक क्षेत्र चीनहर्ड द्वीप एवं" + + " मैकडोनॉल्ड द्वीपहौण्डूरासक्रोएशियाहाइतीहंगरीइंडोनेशियाआयरलैंडइस्राइ" + + "लआईल ऑफ़ मैनभारतब्रिटिश हिंद महासागरिय क्षेत्रईराक़ईरानआइसलैंडइटली" + + "जर्सीजमाइकाजॉर्डनजापानकेन्याकिर्गिज़कम्बोडियाकिरिबातीकोमोरोज़सेंट " + + "किट्स एवं नेविसउत्तर कोरियादक्षिण कोरियाकुवैतकेमैन द्वीपकज़ाखस्तान" + + "लाओसलेबनोनसेंट लूसियालिक्टैनस्टाईनश्री लँकालाइबेरियालसोथोलिथुआनिया" + + "लक्समबर्गलाट्वीयालीबियामोरोक्कोमोनाकोमोल्डेवियामोंटेनेग्रोसेँ मार्" + + "टेँमदागास्करमार्शल द्वीपमैसेडोनियामालीम्यानमारमंगोलियामकाओ विशेष प" + + "्रशासनिक क्षेत्र (चीन)उत्तरी मारियाना द्वीपमार्टीनिकमॉरिटेनियामॉंस" + + "ेरामाल्टामॉरिसमालदीवमलावीमैक्सिकोमलेशियामोज़ाम्बिकनामीबियान्यू कैल" + + "ेडोनियानाइजेरनॉरफ़ॉक द्वीपनाइजीरियानिकारागुआनेदरलैण्डनॉर्वेनेपालना" + + "उरूनीयूएन्यूज़ीलैंडओमानपनामापेरूफ्राँसीसी पॉलिनीशियापापुआ न्यू गिन" + + "ीफिलीपिन्सपाकिस्तानपोलैण्डसेँ पीएर एवं मि\u200dकेलॉंपिटकेर्नपुएर्ट" + + "ो रीकोफ़िलिस्तीनपुर्तगालपलाऊपारागुएक़तारबाहरिय ओशेआनियारेयूनियॉंरो" + + "मानियासर्बियारूसरूआण्डासऊदी अरबसॉलोमन द्वीपसेशेल्ससूदानस्वीडनसिंगा" + + "पुरसेण्\u200dट हेलेनास्लोवेनियास्वाल्बार्ड एवं यान मायेनस्लोवाकिया" + + "सियेरा लेओनसैन मरीनोसेनेगालसोमालियासुरिनामसाउँ-तोमे एवं प्रिंसिपऍल" + + " साल्वाडोरसीरियास्वाज़ीलैंडतुर्की एवं कैकोज़ द्वीपचाडफ्राँसीसी उत्तर" + + "ी क्षेत्रोंटोगोथाइलैण्डताजिकिस्तानटोकेलौपूर्वी तिमोरतुर्कमेनीस्तान" + + "त्युनिशियाटॉंगातुर्कीट्रिनिडाड एवं टोबैगोतुवालुताइवानतंज़ानियायूक्" + + "रेनयुगाँडायुनाइटेड स्टेट्स के छोटे बाहरिय द्वीपसंयुक्त राज्य अमरिक" + + "ायुरूगुएउज़बेकिस्तानवैटिकनसेंट विंसंट एवं दी ग्रनाडीन्स्वेनेज़ुएला" + + "ब्रिटिश वर्जीन आईलंड्सयु.एस. वर्जीन आईलंड्सवियतनामवानाऊटुवॉलेस एवं" + + " फ़्यूचूनासमोआयमनमैयौटदक्षिण अफ्रीकाज़ाम्बियाज़ीम्बाब्वेअज्ञात या अव" + + "ैध प्रदेशदुनियाअफ्रीकाउत्तर अमरिकादक्षिण अमरिकाओशेआनियापश्चिमी अफ्" + + "रीकामध्य अमरिकापूर्वी अफ्रीकाउत्तरी अफ्रीकामध्य अफ्रीकादक्षिणी अफ्" + + "रीकाअमरिकाज़्उत्तरी अमरिकाकैरिबियनपूर्वी एशियादक्षिणी एशियादक्षिण-" + + "पूर्वी एशियादक्षिणी यूरोपऑस्ट्रेलिया एवं न्यूजीलैंडमेलीनेशियामाईक्" + + "रोनेशियापोलीनेशियाएशियामध्य एशियापश्चिमी ऐशियायूरोपपूर्वी यूरोपउत्" + + "तरी यूरोपपश्चिमी यूरोप्लैटिन अमरिका एवं करीबी", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0015, 0x0047, 0x006e, 0x00a6, 0x00b8, 0x00d3, + 0x00ee, 0x0100, 0x0121, 0x0142, 0x0161, 0x017c, 0x019d, 0x01ac, + 0x01cb, 0x01e6, 0x0220, 0x0238, 0x0250, 0x0268, 0x028d, 0x02a8, + 0x02b7, 0x02cc, 0x02db, 0x0303, 0x0315, 0x0327, 0x033f, 0x033f, + 0x0357, 0x0366, 0x0375, 0x0391, 0x03af, 0x03c4, 0x03d6, 0x03e8, + 0x0407, 0x042c, 0x0470, 0x04a7, 0x04ce, 0x04ed, 0x0506, 0x0512, + 0x0527, 0x0530, 0x054b, 0x054b, 0x0569, 0x057b, 0x0597, 0x0597, + 0x05bf, 0x05d4, 0x05f3, 0x0605, 0x0605, 0x061d, 0x0635, 0x064d, + // Entry 40 - 7F + 0x067b, 0x0696, 0x0696, 0x06ae, 0x06c9, 0x06d8, 0x06fd, 0x0718, + 0x0727, 0x073f, 0x075e, 0x075e, 0x0773, 0x077f, 0x07ad, 0x07d4, + 0x07ed, 0x07ff, 0x080e, 0x0820, 0x0835, 0x084d, 0x0878, 0x088d, + 0x0899, 0x08b7, 0x08d5, 0x08ed, 0x08f9, 0x0911, 0x093f, 0x094e, + 0x09bc, 0x09d4, 0x09e0, 0x09fc, 0x0a0e, 0x0a72, 0x0ac7, 0x0ae2, + 0x0afd, 0x0b0c, 0x0b1b, 0x0b1b, 0x0b39, 0x0b4e, 0x0b63, 0x0b80, + 0x0b8c, 0x0be0, 0x0bef, 0x0bfb, 0x0c10, 0x0c1c, 0x0c2b, 0x0c3d, + 0x0c4f, 0x0c5e, 0x0c70, 0x0c88, 0x0ca3, 0x0cbb, 0x0cd3, 0x0d09, + // Entry 80 - BF + 0x0d2b, 0x0d50, 0x0d5f, 0x0d7e, 0x0d9c, 0x0da8, 0x0dba, 0x0dd9, + 0x0e00, 0x0e19, 0x0e34, 0x0e43, 0x0e5e, 0x0e79, 0x0e91, 0x0ea3, + 0x0ebb, 0x0ecd, 0x0eeb, 0x0f0c, 0x0f2b, 0x0f46, 0x0f68, 0x0f86, + 0x0f92, 0x0faa, 0x0fc2, 0x101c, 0x1057, 0x1072, 0x1090, 0x10a5, + 0x10b7, 0x10c6, 0x10d8, 0x10e7, 0x10ff, 0x1114, 0x1132, 0x114a, + 0x1175, 0x1187, 0x11ac, 0x11c7, 0x11e2, 0x11fd, 0x120f, 0x121e, + 0x122d, 0x123c, 0x125d, 0x1269, 0x1278, 0x1284, 0x12be, 0x12e7, + 0x1302, 0x131d, 0x1332, 0x136b, 0x1383, 0x13a5, 0x13c3, 0x13db, + // Entry C0 - FF + 0x13e7, 0x13fc, 0x140b, 0x1436, 0x1451, 0x1469, 0x147e, 0x1487, + 0x149c, 0x14b2, 0x14d4, 0x14e9, 0x14f8, 0x150a, 0x1522, 0x1547, + 0x1565, 0x15aa, 0x15c8, 0x15e7, 0x1600, 0x1615, 0x162d, 0x1642, + 0x1642, 0x167e, 0x16a0, 0x16a0, 0x16b2, 0x16d3, 0x16d3, 0x1712, + 0x171b, 0x1765, 0x1771, 0x1789, 0x17aa, 0x17bc, 0x17de, 0x1808, + 0x1826, 0x1835, 0x1847, 0x187f, 0x1891, 0x18a3, 0x18be, 0x18d3, + 0x18e8, 0x194d, 0x194d, 0x1985, 0x199a, 0x19be, 0x19d0, 0x1a22, + 0x1a40, 0x1a7e, 0x1ab5, 0x1aca, 0x1adf, 0x1b14, 0x1b20, 0x1b20, + // Entry 100 - 13F + 0x1b29, 0x1b38, 0x1b60, 0x1b7b, 0x1b9c, 0x1bd5, 0x1be7, 0x1bfc, + 0x1c1e, 0x1c43, 0x1c5b, 0x1c86, 0x1ca5, 0x1ccd, 0x1cf5, 0x1d17, + 0x1d42, 0x1d5d, 0x1d82, 0x1d9a, 0x1dbc, 0x1de1, 0x1e16, 0x1e3b, + 0x1e85, 0x1ea3, 0x1eca, 0x1ee8, 0x1ef7, 0x1f13, 0x1f38, 0x1f47, + 0x1f69, 0x1f8b, 0x1fb3, 0x1fef, + }, + }, + { // bs + "Ostrvo AsensionAndoraUjedinjeni Arapski EmiratiAfganistanAntigva i Barbu" + + "daAngvilaAlbanijaArmenijaAngolaAntarktikaArgentinaAmerička SamoaAust" + + "rijaAustralijaArubaOlandska OstrvaAzerbejdžanBosna i HercegovinaBarb" + + "adosBangladešBelgijaBurkina FasoBugarskaBahreinBurundiBeninSveti Bar" + + "tolomejBermudaBrunejBolivijaKaripska HolandijaBrazilBahamiButanOstrv" + + "o BuveBocvanaBjelorusijaBelizeKanadaKokosova (Kilingova) OstrvaDemok" + + "ratska Republika KongoCentralnoafrička RepublikaKongoŠvicarskaObala " + + "SlonovačeKukova OstrvaČileKamerunKinaKolumbijaOstrvo KlipertonKostar" + + "ikaKubaKape VerdeKurasaoBožićna OstrvaKiparČeška RepublikaNjemačkaDi" + + "jego GarsijaDžibutiDanskaDominikaDominikanska RepublikaAlžirSeuta i " + + "MeliljaEkvadorEstonijaEgipatZapadna SaharaEritrejaŠpanijaEtiopijaEvr" + + "opska unijaFinskaFidžiFolklandska OstrvaMikronezijaFarska OstrvaFran" + + "cuskaGabonVelika BritanijaGrenadaGruzijaFrancuska GvajanaGernziGanaG" + + "ibraltarGrenlandGambijaGvinejaGvadalupeEkvatorijalna GvinejaGrčkaJuž" + + "na Džordžija i Južna Sendvička OstrvaGvatemalaGuamGvineja-BisaoGvaja" + + "naHong Kong (SAR Kina)Herd i arhipelag MekDonaldHondurasHrvatskaHait" + + "iMađarskaKanarska OstrvaIndonezijaIrskaIzraelOstrvo ManIndijaBritans" + + "ka Teritorija u Indijskom OkeanuIrakIranIslandItalijaDžerziJamajkaJo" + + "rdanJapanKenijaKirgistanKambodžaKiribatiKomorska OstrvaSveti Kits i " + + "NevisSjeverna KorejaJužna KorejaKuvajtKajmanska OstrvaKazahstanLaosL" + + "ibanSveta LucijaLihtenštajnŠri LankaLiberijaLesotoLitvanijaLuksembur" + + "gLatvijaLibijaMarokoMonakoMoldavijaCrna GoraSv. MartinMadagaskarMarš" + + "alova OstrvaMakedonijaMaliMijanmarMongolijaMakao (SAR Kina)Sjeverna " + + "Marijanska OstrvaMartinikMauritanijaMonseratMaltaMauricijusMaldiviMa" + + "laviMeksikoMalezijaMozambikNamibijaNova KaledonijaNigerOstrvo Norfol" + + "kNigerijaNikaragvaHolandijaNorveškaNepalNauruNiueNovi ZelandOmanPana" + + "maPeruFrancuska PolinezijaPapua Nova GvinejaFilipiniPakistanPoljskaS" + + "veti Petar i MikelonPitkernska OstrvaPorto RikoPalestinska Teritorij" + + "aPortugalPalauParagvajKatarVanjska OkeanijaReunionRumunijaSrbijaRusi" + + "jaRuandaSaudijska ArabijaSolomonska OstrvaSejšeliSudanŠvedskaSingapu" + + "rSveta HelenaSlovenijaSvalbard i Jan MajenSlovačkaSijera LeoneSan Ma" + + "rinoSenegalSomalijaSurinamJužni SudanSao Tome i PrincipeSalvadorSint" + + " MartenSirijaSvazilendTristan da KunjaOstrva Turks i KaikosČadFrancu" + + "ske Južne TeritorijeTogoTajlandTadžikistanTokelauIstočni TimorTurkme" + + "nistanTunisTongaTurskaTrinidad i TobagoTuvaluTajvanTanzanijaUkrajina" + + "UgandaAmerička Vanjska OstrvaUjedinjene NacijeSjedinjene Američke Dr" + + "žaveUrugvajUzbekistanVatikanSveti Vinsent i GrenadinVenecuelaBritan" + + "ska Djevičanska OstrvaAmerička Djevičanska OstrvaVijetnamVanuatuOstr" + + "va Valis i FutunaSamoaKosovoJemenMajoteJužnoafrička RepublikaZambija" + + "ZimbabveNepoznata oblastSvijetAfrikaSjeverna AmerikaJužna AmerikaOke" + + "anijaZapadna AfrikaSrednja AmerikaIstočna AfrikaSjeverna AfrikaCentr" + + "alna AfrikaJužna AfrikaAmerikaSjeverni dio AmerikeKaribiIstočna Azij" + + "aJužna AzijaJugoistočna AzijaJužna EvropaAustralazijaMelanezijaMikro" + + "nezijska regijaPolinezijaAzijaCentralna AzijaZapadna AzijaEvropaIsto" + + "čna EvropaSjeverna EvropaZapadna EvropaLatinska Amerika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0015, 0x002f, 0x0039, 0x004a, 0x0051, 0x0059, + 0x0061, 0x0067, 0x0071, 0x007a, 0x0089, 0x0091, 0x009b, 0x00a0, + 0x00af, 0x00bb, 0x00ce, 0x00d6, 0x00e0, 0x00e7, 0x00f3, 0x00fb, + 0x0102, 0x0109, 0x010e, 0x011e, 0x0125, 0x012b, 0x0133, 0x0145, + 0x014b, 0x0151, 0x0156, 0x0161, 0x0168, 0x0173, 0x0179, 0x017f, + 0x019a, 0x01b5, 0x01d0, 0x01d5, 0x01df, 0x01ef, 0x01fc, 0x0201, + 0x0208, 0x020c, 0x0215, 0x0225, 0x022e, 0x0232, 0x023c, 0x0243, + 0x0253, 0x0258, 0x0269, 0x0272, 0x0280, 0x0288, 0x028e, 0x0296, + // Entry 40 - 7F + 0x02ac, 0x02b2, 0x02c1, 0x02c8, 0x02d0, 0x02d6, 0x02e4, 0x02ec, + 0x02f4, 0x02fc, 0x030a, 0x030a, 0x0310, 0x0316, 0x0328, 0x0333, + 0x0340, 0x0349, 0x034e, 0x035e, 0x0365, 0x036c, 0x037d, 0x0383, + 0x0387, 0x0390, 0x0398, 0x039f, 0x03a6, 0x03af, 0x03c4, 0x03ca, + 0x03f7, 0x0400, 0x0404, 0x0411, 0x0418, 0x042c, 0x0446, 0x044e, + 0x0456, 0x045b, 0x0464, 0x0473, 0x047d, 0x0482, 0x0488, 0x0492, + 0x0498, 0x04bf, 0x04c3, 0x04c7, 0x04cd, 0x04d4, 0x04db, 0x04e2, + 0x04e8, 0x04ed, 0x04f3, 0x04fc, 0x0505, 0x050d, 0x051c, 0x052e, + // Entry 80 - BF + 0x053d, 0x054a, 0x0550, 0x0560, 0x0569, 0x056d, 0x0572, 0x057e, + 0x058a, 0x0594, 0x059c, 0x05a2, 0x05ab, 0x05b5, 0x05bc, 0x05c2, + 0x05c8, 0x05ce, 0x05d7, 0x05e0, 0x05ea, 0x05f4, 0x0605, 0x060f, + 0x0613, 0x061b, 0x0624, 0x0634, 0x064e, 0x0656, 0x0661, 0x0669, + 0x066e, 0x0678, 0x067f, 0x0685, 0x068c, 0x0694, 0x069c, 0x06a4, + 0x06b3, 0x06b8, 0x06c6, 0x06ce, 0x06d7, 0x06e0, 0x06e9, 0x06ee, + 0x06f3, 0x06f7, 0x0702, 0x0706, 0x070c, 0x0710, 0x0724, 0x0736, + 0x073e, 0x0746, 0x074d, 0x0762, 0x0773, 0x077d, 0x0793, 0x079b, + // Entry C0 - FF + 0x07a0, 0x07a8, 0x07ad, 0x07bd, 0x07c4, 0x07cc, 0x07d2, 0x07d8, + 0x07de, 0x07ef, 0x0800, 0x0808, 0x080d, 0x0815, 0x081d, 0x0829, + 0x0832, 0x0846, 0x084f, 0x085b, 0x0865, 0x086c, 0x0874, 0x087b, + 0x0887, 0x089a, 0x08a2, 0x08ad, 0x08b3, 0x08bc, 0x08cc, 0x08e1, + 0x08e5, 0x0900, 0x0904, 0x090b, 0x0917, 0x091e, 0x092c, 0x0938, + 0x093d, 0x0942, 0x0948, 0x0959, 0x095f, 0x0965, 0x096e, 0x0976, + 0x097c, 0x0994, 0x09a5, 0x09c1, 0x09c8, 0x09d2, 0x09d9, 0x09f1, + 0x09fa, 0x0a17, 0x0a34, 0x0a3c, 0x0a43, 0x0a58, 0x0a5d, 0x0a63, + // Entry 100 - 13F + 0x0a68, 0x0a6e, 0x0a86, 0x0a8d, 0x0a95, 0x0aa5, 0x0aab, 0x0ab1, + 0x0ac1, 0x0acf, 0x0ad7, 0x0ae5, 0x0af4, 0x0b03, 0x0b12, 0x0b22, + 0x0b2f, 0x0b36, 0x0b4a, 0x0b50, 0x0b5e, 0x0b6a, 0x0b7c, 0x0b89, + 0x0b95, 0x0b9f, 0x0bb3, 0x0bbd, 0x0bc2, 0x0bd1, 0x0bde, 0x0be4, + 0x0bf3, 0x0c02, 0x0c10, 0x0c20, + }, + }, + { // bs-Cyrl + "Острво АсенсионАндораУједињени Арапски ЕмиратиАвганистанАнтигва и Барбуд" + + "аАнгвилаАлбанијаАрменијаАнголаАнтарктикАргентинаАмеричка СамоаАустр" + + "ијаАустралијаАрубаАландска острваАзербејџанБосна и ХерцеговинаБарба" + + "досБангладешБелгијаБуркина ФасоБугарскаБахреинБурундиБенинСвети Бар" + + "толомејБермудаБрунејБоливијаБразилБахамиБутанБуве ОстрваБоцванаБело" + + "русијаБелизеКанадаКокос (Келинг) ОстрваКонго - КиншасаЦентрално Афр" + + "ичка РепубликаКонго - БразавилШвајцарскаОбала СлоновачеКукова Острв" + + "аЧилеКамерунКинаКолумбијаОстрво КлипертонКостарикаКубаКапе ВердеБож" + + "ићна острваКипарЧешкаНемачкаДијего ГарсијаЏибутиДанскаДоминикаДомин" + + "иканска РепубликаАлжирСеута и МелиљаЕквадорЕстонијаЕгипатЗападна Са" + + "хараЕритрејаШпанијаЕтиопијаЕвропска УнијаФинскаФиџиФокландска острв" + + "аМикронезијаФарска ОстрваФранцускаГабонВелика БританијаГренадаГрузи" + + "јаФранцуска ГвајанаГурнсиГанаГибралтарГренландГамбијаГвинејаГваделу" + + "пеЕкваторијална ГвинејаГрчкаЈужна Џорџија и Јужна Сендвич ОстрваГва" + + "темалаГуамГвинеја-БисаоГвајанаХонг Конг С. А. Р. КинаХерд и Мекдона" + + "лд ОстрваХондурасХрватскаХаитиМађарскаКанарска острваИндонезијаИрск" + + "аИзраелОстрво МанИндијаБританска територија у Индијском океануИракИ" + + "ранИсландИталијаЏерсиЈамајкаЈорданЈапанКенијаКиргизстанКамбоџаКириб" + + "атиКоморска ОстрваСент Китс и НевисСеверна КорејаЈужна КорејаКувајт" + + "Кајманска ОстрваКазахстанЛаосЛибанСент ЛуцијаЛихтенштајнШри ЛанкаЛи" + + "беријаЛесотоЛитванијаЛуксембургЛетонијаЛибијаМарокоМонакоМолдавијаЦ" + + "рна ГораСент МартинМадагаскарМаршалска ОстрваМакедонијаМалиМијанмар" + + " (Бурма)МонголијаМакао С. А. Р. КинаСеверна Маријанска ОстрваМартини" + + "кМауританијаМонсератМалтаМаурицијусМалдивиМалавиМексикоМалезијаМоза" + + "мбикНамибијаНова КаледонијаНигерНорфолк ОстрвоНигеријаНикарагваХола" + + "ндијаНорвешкаНепалНауруНиуеНови ЗеландОманПанамаПеруФранцуска Полин" + + "езијаПапуа Нова ГвинејаФилипиниПакистанПољскаСен Пјер и МикелонПитк" + + "ернПорто РикоПалестинске територијеПортугалијаПалауПарагвајКатарОст" + + "ала океанијаРеинионРумунијаСрбијаРусијаРуандаСаудијска АрабијаСолом" + + "онска ОстрваСејшелиСуданШведскаСингапурСвета ЈеленаСловенијаСвалбар" + + "д и Јанмајен ОстрваСловачкаСијера ЛеонеСан МариноСенегалСомалијаСур" + + "инамСао Томе и ПринципеСалвадорСиријаСвазилендТристан да КуњаТуркс " + + "и Кајкос ОстрваЧадФранцуске Јужне ТериторијеТогоТајландТаџикистанТо" + + "келауИсточни ТиморТуркменистанТунисТонгаТурскаТринидад и ТобагоТува" + + "луТајванТанзанијаУкрајинаУгандаМања удаљена острва САДСједињене Аме" + + "ричке ДржавеУругвајУзбекистанВатиканСент Винсент и ГренадиниВенецуе" + + "лаБританска Девичанска ОстрваС.А.Д. Девичанска ОстрваВијетнамВануат" + + "уВалис и Футуна ОстрваСамоаЈеменМајотеЈужноафричка РепубликаЗамбија" + + "ЗимбабвеНепозната или неважећа областСветАфрикаСеверноамерички конт" + + "инентЈужна АмерикаОкеанијаЗападна АфрикаЦентрална АмерикаИсточна Аф" + + "рикаСеверна АфрикаЦентрална АфрикаЈужна АфрикаАмерикеСеверна Америк" + + "аКарибиИсточна АзијаЈужна АзијаЈугоисточна АзијаЈужна ЕвропаАустрал" + + "ија и Нови ЗеландМеланезијаМикронезијски регионПолинезијаАзијаЦентр" + + "ална АзијаЗападна АзијаЕвропаИсточна ЕвропаСеверна ЕвропаЗападна Ев" + + "ропаЛатинска Америка", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001d, 0x0029, 0x0059, 0x006d, 0x008d, 0x009b, 0x00ab, + 0x00bb, 0x00c7, 0x00d9, 0x00eb, 0x0106, 0x0116, 0x012a, 0x0134, + 0x0151, 0x0165, 0x0189, 0x0199, 0x01ab, 0x01b9, 0x01d0, 0x01e0, + 0x01ee, 0x01fc, 0x0206, 0x0225, 0x0233, 0x023f, 0x024f, 0x024f, + 0x025b, 0x0267, 0x0271, 0x0286, 0x0294, 0x02a8, 0x02b4, 0x02c0, + 0x02e6, 0x0301, 0x0335, 0x0352, 0x0366, 0x0383, 0x039c, 0x03a4, + 0x03b2, 0x03ba, 0x03cc, 0x03eb, 0x03fd, 0x0405, 0x0418, 0x0418, + 0x0433, 0x043d, 0x0447, 0x0455, 0x0470, 0x047c, 0x0488, 0x0498, + // Entry 40 - 7F + 0x04c3, 0x04cd, 0x04e7, 0x04f5, 0x0505, 0x0511, 0x052c, 0x053c, + 0x054a, 0x055a, 0x0575, 0x0575, 0x0581, 0x0589, 0x05aa, 0x05c0, + 0x05d9, 0x05eb, 0x05f5, 0x0614, 0x0622, 0x0630, 0x0651, 0x065d, + 0x0665, 0x0677, 0x0687, 0x0695, 0x06a3, 0x06b5, 0x06de, 0x06e8, + 0x072b, 0x073d, 0x0745, 0x075e, 0x076c, 0x0792, 0x07bd, 0x07cd, + 0x07dd, 0x07e7, 0x07f7, 0x0814, 0x0828, 0x0832, 0x083e, 0x0851, + 0x085d, 0x08a7, 0x08af, 0x08b7, 0x08c3, 0x08d1, 0x08db, 0x08e9, + 0x08f5, 0x08ff, 0x090b, 0x091f, 0x092d, 0x093d, 0x095a, 0x0979, + // Entry 80 - BF + 0x0994, 0x09ab, 0x09b7, 0x09d6, 0x09e8, 0x09f0, 0x09fa, 0x0a0f, + 0x0a25, 0x0a36, 0x0a46, 0x0a52, 0x0a64, 0x0a78, 0x0a88, 0x0a94, + 0x0aa0, 0x0aac, 0x0abe, 0x0acf, 0x0ae4, 0x0af8, 0x0b17, 0x0b2b, + 0x0b33, 0x0b50, 0x0b62, 0x0b81, 0x0bb1, 0x0bc1, 0x0bd7, 0x0be7, + 0x0bf1, 0x0c05, 0x0c13, 0x0c1f, 0x0c2d, 0x0c3d, 0x0c4d, 0x0c5d, + 0x0c7a, 0x0c84, 0x0c9f, 0x0caf, 0x0cc1, 0x0cd3, 0x0ce3, 0x0ced, + 0x0cf7, 0x0cff, 0x0d14, 0x0d1c, 0x0d28, 0x0d30, 0x0d57, 0x0d79, + 0x0d89, 0x0d99, 0x0da5, 0x0dc6, 0x0dd4, 0x0de7, 0x0e12, 0x0e28, + // Entry C0 - FF + 0x0e32, 0x0e42, 0x0e4c, 0x0e69, 0x0e77, 0x0e87, 0x0e93, 0x0e9f, + 0x0eab, 0x0ecc, 0x0eed, 0x0efb, 0x0f05, 0x0f13, 0x0f23, 0x0f3a, + 0x0f4c, 0x0f7d, 0x0f8d, 0x0fa4, 0x0fb7, 0x0fc5, 0x0fd5, 0x0fe3, + 0x0fe3, 0x1006, 0x1016, 0x1016, 0x1022, 0x1034, 0x1050, 0x1077, + 0x107d, 0x10af, 0x10b7, 0x10c5, 0x10d9, 0x10e7, 0x1100, 0x1118, + 0x1122, 0x112c, 0x1138, 0x1158, 0x1164, 0x1170, 0x1182, 0x1192, + 0x119e, 0x11c9, 0x11c9, 0x11f9, 0x1207, 0x121b, 0x1229, 0x1256, + 0x1268, 0x129c, 0x12c7, 0x12d7, 0x12e5, 0x130c, 0x1316, 0x1316, + // Entry 100 - 13F + 0x1320, 0x132c, 0x1357, 0x1365, 0x1375, 0x13ac, 0x13b4, 0x13c0, + 0x13f1, 0x140a, 0x141a, 0x1435, 0x1456, 0x1471, 0x148c, 0x14ab, + 0x14c2, 0x14d0, 0x14ed, 0x14f9, 0x1512, 0x1527, 0x1548, 0x155f, + 0x158c, 0x15a0, 0x15c7, 0x15db, 0x15e5, 0x1602, 0x161b, 0x1627, + 0x1642, 0x165d, 0x1678, 0x1697, + }, + }, + { // ca + caRegionStr, + caRegionIdx, + }, + { // ce + "Айъадаларан гӀайреАндорраӀарбийн Цхьанатоьхна ЭмираташОвхӀан-пачхьалкхАн" + + "тигуа а, Барбуда аАнгильяАлбаниЭрмалойчоьАнголаАнтарктидаАргентинаА" + + "мерикан СамоаАвстриАвстралиАрубаАландан гӀайренашАзербайджанБосни а" + + ", Герцеговина аБарбадосБангладешБельгиБуркина- ФасоБолгариБахрейнБур" + + "ундиБенинСен-БартельмиБермудан гӀайренашБруней-ДаруссаламБоливиБонэ" + + "йр, Синт-Эстатиус а, Саба аБразилиБагаман гӀайренашБутанБувен гӀайр" + + "еБотсванаБелоруссиБелизКанадаКокосийн гӀайренашДемократин Республик" + + "а КонгоЮккъерчу Африкин РеспубликаРеспублика КонгоШвейцариКот-Д’иву" + + "арКукан гӀайренашЧилиКамерунКитайКолумбиКлиппертонКоста-РикаКубаКаб" + + "о-ВердеКюрасаоГӀайре ӏиса пайхӏамар вина деКипрЧехиГерманиДиего-Гар" + + "сиДжибутиДаниДоминикаДоминикан РеспубликаАлжирСеута а, Мелилья аЭкв" + + "адорЭстониМисарМалхбузен СаьхьараЭритрейИспаниЭфиопиЕвробартФинлянд" + + "иФиджиФолклендан гӀайренашМикронезин Федеративни штаташФарерийн гӀа" + + "йренашФранциГабонЙоккха БританиГренадаГуьржийчоьФранцузийн ГвианаГе" + + "рнсиГанаГибралтарГренландиГамбиГвинейГваделупаЭкваторан ГвинейГреци" + + "Къилба Джорджи а, Къилба Гавайн гӀайренаш аГватемалаГуамГвиней-Биса" + + "уГайанаГонконг (ша-къаьстина кӀошт)Херд гӀайре а, Макдональд гӀайре" + + "наш аГондурасХорватиГаитиВенгриКанаран гӀайренашИндонезиИрландиИзра" + + "ильМэн гӀайреИндиБританин латта Индин океанехьӀиракъГӀажарийчоьИсла" + + "ндиИталиДжерсиЯмайкаУрданЯпониКениКиргизиКамбоджаКирибатиКоморашСен" + + "т-Китс а, Невис аКъилбаседа КорейКъилба КорейКувейтКайман гӀайренаш" + + "КазахстанЛаосЛиванСент-ЛюсиЛихтенштейнШри-ЛанкаЛибериЛесотоЛитваЛюк" + + "сембургЛатвиЛивиМароккоМонакоМолдавиӀаьржаламанхойчоьСен-МартенМада" + + "гаскарМаршаллан гӀайренашМакедониМалиМьянма (Бирма)МонголиМакао (ша" + + "-къаьстина кӀошт)Къилбаседа Марианан гӀайренашМартиникаМавританиМонт" + + "серратМальтаМаврикиМальдивашМалавиМексикаМалайзиМозамбикНамибиКерла" + + " КаледониНигерНорфолк гӀайреНигериНикарагуаНидерландашНорвегиНепалНа" + + "уруНиуэКерла ЗеландиОманПанамаПеруФранцузийн ПолинезиПапуа — Керла " + + "ГвинейФилиппинашПакистанПольшаСен-Пьер а, Микелон аПиткэрн гӀайрена" + + "шПуэрто-РикоПалестинан латтанашПортугалиПалауПарагвайКатарАрахьара " + + "ОкеаниРеюньонРумыниСербиРоссиРуандаСаӀудийн АравиСоломонан гӀайрена" + + "шСейшелан гӀайренашСуданШвециСингапурСийлахьчу Еленин гӀайреСловени" + + "Шпицберген а, Ян-Майен аСловакиСьерра- ЛеонеСан-МариноСенегалСомали" + + "СуринамКъилба СуданСан-Томе а, Принсипи аСальвадорСинт-МартенШемаСв" + + "азилендТристан-да- КуньяТёркс а, Кайкос а гӀайренашЧадФранцузийн къ" + + "илба латтанашТогоТаиландТаджикистанТокелауМалхбален ТиморТуркмениТу" + + "нисТонгаТуркойчоьТринидад а, Тобаго аТувалуТайваньТанзаниУкраинаУга" + + "ндаАЦШн арахьара кегийн гӀайренашЦхьанатоьхна ШтаташУругвайУзбекист" + + "анВатиканСент-Винсент а, Гренадинаш аВенесуэлаВиргинийн гӀайренаш (" + + "Британи)Виргинийн гӀайренаш (АЦШ)ВьетнамВануатуУоллис а, Футуна аСа" + + "моаКосовоЙеменМайоттаКъилба-Африкин РеспубликаЗамбиЗимбабвеЙоьвзуш " + + "йоцу регионДерригдуьненанАфрикаКъилбаседа АмерикаКъилба АмерикаОкеа" + + "ниМалхбузен АфрикаЮккъера АмерикаМалхбален АфрикаКъилбаседа АфрикаЮ" + + "ккъера АфрикаКъилба АфрикаКъилбаседа а, къилба а АмерикаКъилбаседа " + + "Америка – АЦШ а, Канада аКарибашЮккъера АзиКъилба АзиКъилба-малхбал" + + "ен АзиКъилба ЕвропаАвстралазиМеланезиМикронезиПолинезиАзиЮккъера Ма" + + "лхбалеЮккъера а, Гергара а МалхбалеЕвропаМалхбален ЕвропаКъилбаседа" + + " ЕвропаМалхбузен ЕвропаЛатинан Америка", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0023, 0x0031, 0x0069, 0x0088, 0x00ac, 0x00ba, 0x00c6, + 0x00da, 0x00e6, 0x00fa, 0x010c, 0x0127, 0x0133, 0x0143, 0x014d, + 0x016e, 0x0184, 0x01ac, 0x01bc, 0x01ce, 0x01da, 0x01f2, 0x0200, + 0x020e, 0x021c, 0x0226, 0x023f, 0x0262, 0x0283, 0x028f, 0x02c6, + 0x02d4, 0x02f5, 0x02ff, 0x0316, 0x0326, 0x0338, 0x0342, 0x034e, + 0x0371, 0x03a5, 0x03d9, 0x03f8, 0x0408, 0x041e, 0x043b, 0x0443, + 0x0451, 0x045b, 0x0469, 0x047d, 0x0490, 0x0498, 0x04ab, 0x04b9, + 0x04ef, 0x04f7, 0x04ff, 0x050d, 0x0522, 0x0530, 0x0538, 0x0548, + // Entry 40 - 7F + 0x056f, 0x0579, 0x0599, 0x05a7, 0x05b3, 0x05bd, 0x05e0, 0x05ee, + 0x05fa, 0x0606, 0x0616, 0x0616, 0x0626, 0x0630, 0x0657, 0x068f, + 0x06b2, 0x06be, 0x06c8, 0x06e3, 0x06f1, 0x0705, 0x0726, 0x0732, + 0x073a, 0x074c, 0x075e, 0x0768, 0x0774, 0x0786, 0x07a5, 0x07af, + 0x07fe, 0x0810, 0x0818, 0x082f, 0x083b, 0x086e, 0x08b2, 0x08c2, + 0x08d0, 0x08da, 0x08e6, 0x0907, 0x0917, 0x0925, 0x0933, 0x0946, + 0x094e, 0x0985, 0x0991, 0x09a7, 0x09b5, 0x09bf, 0x09cb, 0x09d7, + 0x09e1, 0x09eb, 0x09f3, 0x0a01, 0x0a11, 0x0a21, 0x0a2f, 0x0a52, + // Entry 80 - BF + 0x0a71, 0x0a88, 0x0a94, 0x0ab3, 0x0ac5, 0x0acd, 0x0ad7, 0x0ae8, + 0x0afe, 0x0b0f, 0x0b1b, 0x0b27, 0x0b31, 0x0b45, 0x0b4f, 0x0b57, + 0x0b65, 0x0b71, 0x0b7f, 0x0ba1, 0x0bb4, 0x0bc8, 0x0bed, 0x0bfd, + 0x0c05, 0x0c1e, 0x0c2c, 0x0c5b, 0x0c93, 0x0ca5, 0x0cb7, 0x0ccb, + 0x0cd7, 0x0ce5, 0x0cf7, 0x0d03, 0x0d11, 0x0d1f, 0x0d2f, 0x0d3b, + 0x0d56, 0x0d60, 0x0d7b, 0x0d87, 0x0d99, 0x0daf, 0x0dbd, 0x0dc7, + 0x0dd1, 0x0dd9, 0x0df2, 0x0dfa, 0x0e06, 0x0e0e, 0x0e33, 0x0e59, + 0x0e6d, 0x0e7d, 0x0e89, 0x0eae, 0x0ecf, 0x0ee4, 0x0f09, 0x0f1b, + // Entry C0 - FF + 0x0f25, 0x0f35, 0x0f3f, 0x0f5c, 0x0f6a, 0x0f76, 0x0f80, 0x0f8a, + 0x0f96, 0x0fb1, 0x0fd6, 0x0ff9, 0x1003, 0x100d, 0x101d, 0x1049, + 0x1057, 0x1082, 0x1090, 0x10a8, 0x10bb, 0x10c9, 0x10d5, 0x10e3, + 0x10fa, 0x1121, 0x1133, 0x1148, 0x1150, 0x1162, 0x1181, 0x11b2, + 0x11b8, 0x11ea, 0x11f2, 0x1200, 0x1216, 0x1224, 0x1241, 0x1251, + 0x125b, 0x1265, 0x1277, 0x129b, 0x12a7, 0x12b5, 0x12c3, 0x12d1, + 0x12dd, 0x1316, 0x1316, 0x133b, 0x1349, 0x135d, 0x136b, 0x139e, + 0x13b0, 0x13e6, 0x1414, 0x1422, 0x1430, 0x1450, 0x145a, 0x1466, + // Entry 100 - 13F + 0x1470, 0x147e, 0x14ae, 0x14b8, 0x14c8, 0x14ec, 0x1508, 0x1514, + 0x1537, 0x1552, 0x155e, 0x157d, 0x159a, 0x15b9, 0x15da, 0x15f5, + 0x160e, 0x1645, 0x1687, 0x1695, 0x16aa, 0x16bd, 0x16e3, 0x16fc, + 0x1710, 0x1720, 0x1732, 0x1742, 0x1748, 0x1767, 0x179c, 0x17a8, + 0x17c7, 0x17e8, 0x1807, 0x1824, + }, + }, + { // cgg + "AndoraAmahanga ga Buharabu ageeteereineAfuganistaniAngiguwa na BabudaAng" + + "wiraArubaniaArimeniyaAngoraArigentinaSamowa ya AmeerikaOsituriaOsitu" + + "reeriyaArubaAzabagyaniBoziniya na HezegovinaBabadosiBangaradeshiBubi" + + "rigiBokina FasoBurugariyaBahareniBurundiBeniniBerimudaBuruneiBoriivi" + + "yaBuraziiriBahamaButaniBotswanaBararusiBerizeKanadaDemokoratika Ripa" + + "aburika ya KongoEihanga rya Rwagati ya AfirikaKongoSwisiAivore Kosit" + + "iEbizinga bya KuukuChileKameruuniChinaKorombiyaKositarikaCubaEbizing" + + "a bya KepuvadeSaipurasiRipaaburika ya ZeekiBugirimaaniGyibutiDeenima" + + "akaDominikaRipaaburika ya DominicaArigyeriyaIkwedaEsitoniyaMisiriEri" + + "teriyaSipeyiniEthiyopiyaBufiniFigyiEbizinga bya FaakilandaMikironesi" + + "yaBufaransaGabooniBungyerezaGurenadaGyogiyaGuyana ya BufaransaGanaGi" + + "buraataGuriinirandiGambiyaGineGwaderupeGuniGuriisiGwatemaraGwamuGine" + + "bisauGuyanaHondurasiKorasiyaHaitiHangareIndoneeziyaIrerandiIsirairiI" + + "ndiyaIraakaIraaniAisilandiItareGyamaikaYorudaaniGyapaaniKenyaKirigiz" + + "istaniKambodiyaKiribatiKoromoSenti Kittis na NevisiKoreya AmatembaKo" + + "reya AmashuumaKuweitiEbizinga bya KayimaniKazakisitaniLayosiLebanoni" + + "Senti RusiyaLishenteniSirirankaLiberiyaLesothoLithuaniaLakizembaagaL" + + "atviyaLibyaMoroccoMonacoMoridovaMadagasikaEbizinga bya MarshaaMasedo" + + "oniaMariMyanamarMongoriaEbizinga by’amatemba ga MarianaMartiniqueMau" + + "riteeniyaMontserratiMaritaMaurishiasiMaridivesMarawiMexicomarayiziaM" + + "ozambiqueNamibiyaNiukaredoniaNaigyaEkizinga NorifokoNaigyeriyaNikara" + + "gwaHoorandiNoorweNepoNauruNiueNiuzirandiOmaaniPanamaPeruPolinesia ya" + + " BufaransaPapuaFiripinoPakisitaaniPoorandiSenti Piyerre na MikweronP" + + "itkainiPwetorikoPocugoPalaawuParagwaiKataRiyuniyoniRomaniyaRrashaRwa" + + "ndaSaudi AreebiyaEbizinga bya SurimaaniShesheresiSudaniSwideniSingap" + + "oSenti HerenaSirovaaniyaSirovaakiyaSirra RiyooniSamarinoSenegoSomaar" + + "iyaSurinaamuSawo Tome na PurinsipoEri SalivadoSiriyaSwazirandiEbizin" + + "ga bya Buturuki na KaikoChadiTogoTairandiTajikisitaniTokerawuBurugwe" + + "izooba bwa TimoriTurukimenisitaniTuniziaTongaButuruki /TakeTurinidad" + + " na TobagoTuvaruTayiwaaniTanzaniaUkureiniUgandaAmerikaUrugwaiUzibeki" + + "sitaniVatikaniSenti Vinsent na GurenadiniVenezuweraEbizinga bya Viri" + + "gini ebya BungyerezaEbizinga bya Virigini ebya AmerikaViyetinaamuVan" + + "uatuWarris na FutunaSamowaYemeniMayoteSausi AfirikaZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0027, 0x0033, 0x0045, 0x004c, 0x0054, + 0x005d, 0x0063, 0x0063, 0x006d, 0x007f, 0x0087, 0x0093, 0x0098, + 0x0098, 0x00a2, 0x00b8, 0x00c0, 0x00cc, 0x00d4, 0x00df, 0x00e9, + 0x00f1, 0x00f8, 0x00fe, 0x00fe, 0x0106, 0x010d, 0x0116, 0x0116, + 0x011f, 0x0125, 0x012b, 0x012b, 0x0133, 0x013b, 0x0141, 0x0147, + 0x0147, 0x0168, 0x0186, 0x018b, 0x0190, 0x019d, 0x01af, 0x01b4, + 0x01bd, 0x01c2, 0x01cb, 0x01cb, 0x01d5, 0x01d9, 0x01ee, 0x01ee, + 0x01ee, 0x01f7, 0x020b, 0x0216, 0x0216, 0x021d, 0x0227, 0x022f, + // Entry 40 - 7F + 0x0246, 0x0250, 0x0250, 0x0256, 0x025f, 0x0265, 0x0265, 0x026e, + 0x0276, 0x0280, 0x0280, 0x0280, 0x0286, 0x028b, 0x02a2, 0x02ae, + 0x02ae, 0x02b7, 0x02be, 0x02c8, 0x02d0, 0x02d7, 0x02ea, 0x02ea, + 0x02ee, 0x02f7, 0x0303, 0x030a, 0x030e, 0x0317, 0x031b, 0x0322, + 0x0322, 0x032b, 0x0330, 0x0339, 0x033f, 0x033f, 0x033f, 0x0348, + 0x0350, 0x0355, 0x035c, 0x035c, 0x0367, 0x036f, 0x0377, 0x0377, + 0x037d, 0x037d, 0x0383, 0x0389, 0x0392, 0x0397, 0x0397, 0x039f, + 0x03a8, 0x03b0, 0x03b5, 0x03c2, 0x03cb, 0x03d3, 0x03d9, 0x03ef, + // Entry 80 - BF + 0x03fe, 0x040e, 0x0415, 0x042a, 0x0436, 0x043c, 0x0444, 0x0450, + 0x045a, 0x0463, 0x046b, 0x0472, 0x047b, 0x0487, 0x048e, 0x0493, + 0x049a, 0x04a0, 0x04a8, 0x04a8, 0x04a8, 0x04b2, 0x04c6, 0x04d0, + 0x04d4, 0x04dc, 0x04e4, 0x04e4, 0x0505, 0x050f, 0x051b, 0x0526, + 0x052c, 0x0537, 0x0540, 0x0546, 0x054c, 0x0555, 0x055f, 0x0567, + 0x0573, 0x0579, 0x058a, 0x0594, 0x059d, 0x05a5, 0x05ab, 0x05af, + 0x05b4, 0x05b8, 0x05c2, 0x05c8, 0x05ce, 0x05d2, 0x05e8, 0x05ed, + 0x05f5, 0x0600, 0x0608, 0x0621, 0x0629, 0x0632, 0x0632, 0x0638, + // Entry C0 - FF + 0x063f, 0x0647, 0x064b, 0x064b, 0x0655, 0x065d, 0x065d, 0x0663, + 0x0669, 0x0677, 0x068d, 0x0697, 0x069d, 0x06a4, 0x06ab, 0x06b7, + 0x06c2, 0x06c2, 0x06cd, 0x06da, 0x06e2, 0x06e8, 0x06f1, 0x06fa, + 0x06fa, 0x0710, 0x071c, 0x071c, 0x0722, 0x072c, 0x072c, 0x074a, + 0x074f, 0x074f, 0x0753, 0x075b, 0x0767, 0x076f, 0x0787, 0x0797, + 0x079e, 0x07a3, 0x07b1, 0x07c4, 0x07ca, 0x07d3, 0x07db, 0x07e3, + 0x07e9, 0x07e9, 0x07e9, 0x07f0, 0x07f7, 0x0804, 0x080c, 0x0827, + 0x0831, 0x0856, 0x0878, 0x0883, 0x088a, 0x089a, 0x08a0, 0x08a0, + // Entry 100 - 13F + 0x08a6, 0x08ac, 0x08b9, 0x08bf, 0x08c7, + }, + }, + { // chr + "ᎤᎵᏌᎳᏓᏅ ᎤᎦᏚᏛᎢᎠᏂᏙᎳᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᎡᎳᏈ ᎢᎹᎵᏘᏏᎠᏫᎨᏂᏍᏖᏂᎤᏪᏘ ᎠᎴ ᏆᏊᏓᎠᏂᎩᎳᎠᎵᏇᏂᏯᎠᎵᎻᏂᎠᎠᏂᎪᎳᏧ" + + "ᏁᏍᏓᎸᎠᏥᏂᏘᏂᎠᎠᎺᎵᎧ ᏌᎼᎠᎠᏍᏟᏯᎡᎳᏗᏜᎠᎷᏆᎣᎴᏅᏓ ᏚᎦᏚᏛᎢᎠᏎᏆᏣᏂᏉᏏᏂᎠ ᎠᎴ ᎲᏤᎪᏫᏆᏇᏙᏍᏆᏂᎦᎵᏕᏍ" + + "ᏇᎵᏥᎥᎻᏋᎩᎾ ᏩᏐᏊᎵᎨᎵᎠᏆᎭᎴᎢᏂᏋᎷᏂᏗᏆᏂᎢᏂᎤᏓᏅᏘ ᏆᏕᎳᎻᏆᏊᏓᏊᎾᎢᏉᎵᏫᎠᎧᎵᏈᎢᏂᎯ ᎾᏍᎩᏁᏛᎳᏂᏆᏏᎵᎾ" + + "ᏍᎩ ᏆᎭᎹᏍᏊᏔᏂᏊᏪ ᎤᎦᏚᏛᎢᏆᏣᏩᎾᏇᎳᎷᏍᏇᎵᏍᎨᎾᏓᎪᎪᏍ (ᎩᎵᏂ) ᏚᎦᏚᏛᎢᎧᏂᎪ - ᎨᏂᏝᏌᎬᎿᎨᏍᏛ ᎠᏰᏟ" + + " ᏍᎦᏚᎩᎧᏂᎪ - ᏆᏌᏩᎵᏍᏫᏍᎢᏬᎵ ᎾᎿ ᎠᎹᏳᎶᏗᎠᏓᏍᏓᏴᎲᏍᎩ ᏚᎦᏚᏛᎢᏥᎵᎧᎹᎷᏂᏓᎶᏂᎨᏍᏛᎪᎸᎻᏈᎢᎠᎦᏂᏴᏔᏅᎣ" + + "ᏓᎸ ᎤᎦᏚᏛᎢᎪᏍᏓ ᎵᎧᎫᏆᎢᎬᎾᏕᎾ ᎢᏤᏳᏍᏗᎫᎳᎨᎣᏓᏂᏍᏓᏲᎯᎲ ᎤᎦᏚᏛᎢᏌᎢᏆᏍᏤᎩ ᏍᎦᏚᎩᎠᏂᏛᏥᏗᏰᎪ ᎦᏏᏯ" + + "ᏥᏊᏗᏗᏂᎹᎦᏙᎻᏂᎧᏙᎻᏂᎧᏂ ᏍᎦᏚᎩᎠᎵᏥᎵᏯᏑᏔ ᎠᎴ ᎺᎵᏯᎡᏆᏙᎵᎡᏍᏙᏂᏯᎢᏥᏈᎢᏭᏕᎵᎬ ᏗᏜ ᏌᎮᎳᎡᎵᏟᏯᎠᏂᏍ" + + "ᏆᏂᏱᎢᏗᎣᏈᎠᏳᎳᏛ ᎠᏂᎤᎾᏓᏡᎬᏫᏂᎦᏙᎯᏫᏥᏩᎩ ᏚᎦᏚᏛᎢᎹᎢᏉᏂᏏᏯᏪᎶ ᏚᎦᏚᏛᎢᎦᎸᏥᏱᎦᏉᏂᎩᎵᏏᏲᏋᎾᏓᏣᎠᏥᎢ" + + "ᎠᏂᎦᎸᏥ ᎩᎠᎬᏂᏏᎦᎠᎾᏥᏆᎵᏓᎢᏤᏍᏛᏱᎦᎹᏈᎢᎠᎩᎢᏂᏩᏓᎷᏇᎡᏆᏙᎵᎠᎵ ᎩᎢᏂᎪᎢᎯᏧᎦᏃᏮ ᏣᎠᏥᎢ ᎠᎴ ᎾᏍᎩ Ꮷ" + + "ᎦᏃᏮ ᎠᏍᏛᎭᏟ ᏚᎦᏚᏛᎢᏩᏔᎹᎳᏆᎻᎩᎢᏂ-ᏈᏌᎤᏫᎦᏯᎾᎰᏂᎩ ᎪᏂᎩ ᎤᏓᏤᎵᏓ ᏧᏂᎸᏫᏍᏓᏁᏗ ᎢᎬᎾᏕᎾ ᏓᎶᏂᎨᏍ" + + "ᏛᎲᏗ ᎤᎦᏚᏛᎢ ᎠᎴ ᎺᎩᏓᎾᎵᏗ ᏚᎦᏚᏛᎢᎭᏂᏚᎳᏍᎧᎶᎡᏏᎠᎮᎢᏘᎲᏂᎦᎵᏥᏍᏆ ᏚᎦᏚᏛᎢᎢᏂᏙᏂᏍᏯᎠᏲᎳᏂᎢᏏᎵᏱᎤ" + + "ᏍᏗ ᎤᎦᏚᏛᎢ ᎾᎿ ᎠᏍᎦᏯᎢᏅᏗᎾᏈᏗᏏ ᏴᏫᏯ ᎠᎺᏉ ᎢᎬᎾᏕᏅᎢᎳᎩᎢᎴᏂᏧᏁᏍᏓᎸᎯᎢᏔᎵᏨᎵᏏᏣᎺᎢᎧᏦᏓᏂᏣᏩᏂᏏ" + + "ᎨᏂᏯᎩᎵᏣᎢᏍᎧᎹᏉᏗᎠᏂᎧᎵᏆᏘᎪᎼᎳᏍᎤᏓᏅᏘ ᎨᏘᏏ ᎠᎴ ᏁᏪᏏᏧᏴᏢ ᎪᎵᎠᏧᎦᏃᏮ ᎪᎵᎠᎫᏪᎢᏘᎨᎢᎹᏂ ᏚᎦᏚᏛᎢ" + + "ᎧᏎᎧᏍᏕᏂᎴᎣᏍᎴᏆᎾᏂᎤᏓᏅᏘ ᎷᏏᏯᎵᎦᏗᏂᏍᏓᏂᏍᎵ ᎳᏂᎧᎳᏈᎵᏯᎴᏐᏙᎵᏗᏪᏂᎠᎸᎧᏎᏋᎩᎳᏘᏫᎠᎵᏈᏯᎼᎶᎪᎹᎾᎪᎹᎵ" + + "ᏙᏫᎠᎼᏂᏔᏁᎦᎶᎤᏓᏅᏘ ᏡᏡᎹᏓᎦᏍᎧᎵᎹᏌᎵ ᏚᎦᏚᏛᎢᎹᏎᏙᏂᏯᎹᎵᎹᏯᎹᎵᎹᏂᎪᎵᎠᎹᎧᎣ (ᎤᏓᏤᎵᏓ ᏧᏂᎸᏫᏍᏓᏁᏗ" + + " ᎢᎬᎾᏕᎾ) ᏣᎢᏧᏴᏢ ᏗᏜ ᎹᎵᎠᎾ ᏚᎦᏚᏛᎢᎹᏘᏂᎨᎹᏘᎢᏯᎹᏂᏘᏌᎳᏗᎹᎵᏔᎼᎵᏏᎥᏍᎹᎵᏗᏫᏍᎹᎳᏫᎠᏂᏍᏆᏂᎹᎴᏏᎢᎠᎼ" + + "ᏎᎻᏇᎩᎾᎻᏈᎢᏯᎢᏤ ᎧᎵᏙᏂᎠᏂᎾᎢᏨᏃᎵᏬᎵᎩ ᎤᎦᏚᏛᎢᏂᏥᎵᏯᏂᎧᎳᏆᏁᏛᎳᏂᏃᏪᏁᏆᎵᏃᎤᎷᏂᏳᎢᏤ ᏏᎢᎴᏂᏗᎣᎺᏂᏆ" + + "ᎾᎹᏇᎷᎠᏂᎦᎸᏥ ᏆᎵᏂᏏᎠᏆᏇ ᎢᏤ ᎩᎢᏂᎠᏂᏈᎵᎩᏃᏆᎩᏍᏖᏂᏉᎳᏂᎤᏓᏅᏘ ᏈᏰ ᎠᎴ ᎻᏇᎶᏂᏈᎧᎵᏂ ᏚᎦᏚᏛᎢᏇᎡᏙ" + + " ᎵᎢᎪᏆᎴᏍᏗᏂᎠᏂ ᏄᎬᏫᏳᏌᏕᎩᏉᏥᎦᎳᏆᎴᎠᏫᏆᎳᏇᎢᏯᎧᏔᎵᎠᏍᏛ ᎣᏏᏰᏂᎠᎴᏳᏂᎠᏂᎶᎹᏂᏯᏒᏈᏯᏲᏂᎢᎶᏩᏂᏓᏌᎤᏗ Ꭱ" + + "ᎴᏈᎠᏐᎶᎹᏂ ᏚᎦᏚᏛᎢᏏᎡᏥᎵᏍᏑᏕᏂᏍᏫᏕᏂᏏᏂᎦᏉᎵᎤᏓᏅᏘ ᎮᎵᎾᏍᎶᏫᏂᎠᏍᏩᎵᏆᎵᏗ ᎠᎴ ᏤᏂ ᎹᏰᏂᏍᎶᏩᎩᎠᏏᎡ" + + "Ꮃ ᎴᎣᏂᎤᏓᏅᏘ ᎹᎵᎢᏃᏏᏂᎦᎵᏐᎹᎵᏒᎵᎾᎻᏧᎦᎾᏮ ᏑᏕᏂᏌᎣ ᏙᎺ ᎠᎴ ᏈᏂᏏᏇᎡᎵᏌᎵᏆᏙᎵᏏᏂᏘ ᎹᏘᏂᏏᎵᎠᎠᏂᏍ" + + "ᏩᏏᎢᏟᏍᏛᏂ Ꮣ ᎫᎾᎭᎠᏂᏛᎵᎩ ᎠᎴ ᎨᎢᎪ ᏚᎦᏚᏛᎢᏣᏗᎠᏂᎦᎸᏥ ᏧᎦᎾᏮ ᎦᏙᎯ ᎤᎵᏍᏛᎢᏙᎪᏔᏯᎴᏂᏔᏥᎩᏍᏕᏂᏙ" + + "ᎨᎳᏭᏘᎼᎵ-ᎴᏍᏖᏛᎵᎩᎺᏂᏍᏔᏂᏚᏂᏏᏍᎠᏙᏅᎦᎬᏃᏟᏂᏕᏗ ᎠᎴ ᏙᏆᎪᏚᏩᎷᏔᎢᏩᏂᏖᏂᏏᏂᏯᏳᎧᎴᏂᏳᎦᏂᏓU.S. ᎠᏍ" + + "Ꮫ ᏚᎦᏚᏛᎢᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᏍᎦᏚᎩᏳᎷᏇᎤᏍᏇᎩᏍᏖᏂᎠᏥᎳᏁᏠ ᎦᏚᎲᎤᏓᏅᏘ ᏫᏂᏏᏂᏗ ᎠᎴ ᎾᏍᎩ ᏇᎾᏗᏁᏍᏪᏁ" + + "ᏑᏪᎳᏈᏗᏍ ᎠᏒᏂᎸ ᏂᎨᏒᎾ ᏚᎦᏚᏛᎢU.S. ᎠᏒᏂᎸ ᏂᎨᏒᎾ ᏚᎦᏚᏛᎢᏫᎡᏘᎾᎻᏩᏂᎤᏩᏚᏩᎵᏍ ᎠᎴ ᏊᏚᎾᏌᎼᎠᎪ" + + "ᏐᏉᏰᎺᏂᎺᏯᏖᏧᎦᎾᏮ ᎬᎿᎨᏍᏛᏌᎻᏈᏯᏏᎻᏆᏇᏄᏬᎵᏍᏛᎾ ᎤᏔᏂᏗᎦᏙᎯᎡᎶᎯᎬᎿᎨᏍᏛᏧᏴᏢ ᎠᎹᏰᏟᏧᎦᏃᏮ ᎠᎺᎵᎦᎣ" + + "ᏏᏰᏂᎠᏭᏕᎵᎬ ᏗᏜ ᎬᎿᎨᏍᏛᎠᏰᏟ ᎠᎹᏰᏟᏗᎧᎸᎬ ᏗᏜ ᎬᎿᎨᏍᏛᏧᏴᏢ ᏗᏜ ᎬᎿᎨᏍᏛᎠᏰᏟ ᎬᎿᎨᏍᏛᏧᎦᎾᏮ ᏗᏜ" + + " ᎬᎿᎨᏍᏛᎠᎺᎵᎦᎢᏧᏴᏢ ᏗᏜ ᎠᎹᏰᏟᎨᏆᏙᏯᏗᎧᎸᎬ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏧᎦᎾᏮ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏧᎦᎾᏮ ᏗᎧᎸᎬ ᏓᎶᏂᎨ" + + "ᏍᏛᏧᎦᎾᏮ ᏗᏜ ᏳᎳᏛᎠᏍᏔᎴᏏᎠᎺᎳᏁᏏᎠᎠᏰᏟ ᏧᎾᎵᎪᎯ ᎾᎿ ᎹᎢᏉᏂᏏᏯ ᎢᎬᎾᏕᎾᏆᎵᏂᏏᎠᏓᎶᎾᎨᏍᏛᎠᏰᏟ ᏓᎶ" + + "ᏂᎨᏍᏛᏭᏕᎵᎬ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏳᎳᏛᏗᎧᎸᎬ ᏗᏜ ᏳᎳᏛᏧᏴᏢ ᏗᏜ ᏳᎳᏛᏭᏕᎵᎬ ᏗᏜ ᏳᎳᏛᎳᏘᏂ ᎠᎹᏰᏟ", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0022, 0x002e, 0x0064, 0x0079, 0x0093, 0x009f, 0x00ae, + 0x00bd, 0x00c9, 0x00d8, 0x00ea, 0x0100, 0x010c, 0x0118, 0x0121, + 0x013d, 0x014c, 0x016c, 0x0178, 0x018a, 0x0199, 0x01a9, 0x01b8, + 0x01c7, 0x01d3, 0x01df, 0x01f8, 0x0201, 0x020a, 0x0216, 0x023e, + 0x0247, 0x025d, 0x0266, 0x027c, 0x0288, 0x0294, 0x029d, 0x02a6, + 0x02cb, 0x02e3, 0x0309, 0x0321, 0x032a, 0x034a, 0x0372, 0x0378, + 0x0384, 0x0396, 0x03a8, 0x03d0, 0x03e0, 0x03e6, 0x0405, 0x0411, + 0x0436, 0x0442, 0x0455, 0x0461, 0x0474, 0x047d, 0x0489, 0x0495, + // Entry 40 - 7F + 0x04b1, 0x04c0, 0x04d7, 0x04e3, 0x04f2, 0x04fe, 0x051b, 0x0527, + 0x0539, 0x0548, 0x0567, 0x0567, 0x0576, 0x057c, 0x0592, 0x05a4, + 0x05ba, 0x05c6, 0x05cf, 0x05db, 0x05e4, 0x05f0, 0x0606, 0x060f, + 0x0618, 0x0624, 0x0633, 0x0642, 0x064b, 0x0657, 0x0673, 0x067c, + 0x06d3, 0x06df, 0x06e5, 0x06fb, 0x0704, 0x0763, 0x07a3, 0x07b2, + 0x07c1, 0x07ca, 0x07d6, 0x07ef, 0x0801, 0x080d, 0x0819, 0x0846, + 0x0852, 0x087f, 0x0888, 0x0891, 0x08a3, 0x08ac, 0x08b5, 0x08c1, + 0x08ca, 0x08d6, 0x08df, 0x08ee, 0x0900, 0x090c, 0x0918, 0x093f, + // Entry 80 - BF + 0x0952, 0x0968, 0x0974, 0x0990, 0x09a2, 0x09ab, 0x09b7, 0x09cd, + 0x09e2, 0x09f2, 0x09fe, 0x0a07, 0x0a16, 0x0a25, 0x0a31, 0x0a3a, + 0x0a43, 0x0a4c, 0x0a5b, 0x0a6d, 0x0a80, 0x0a92, 0x0aab, 0x0aba, + 0x0ac0, 0x0acc, 0x0adb, 0x0b26, 0x0b53, 0x0b5f, 0x0b6b, 0x0b7d, + 0x0b86, 0x0b95, 0x0ba4, 0x0bad, 0x0bbc, 0x0bcb, 0x0bda, 0x0be9, + 0x0c02, 0x0c0b, 0x0c2a, 0x0c36, 0x0c42, 0x0c4e, 0x0c54, 0x0c5d, + 0x0c66, 0x0c6c, 0x0c82, 0x0c8b, 0x0c94, 0x0c9a, 0x0cb9, 0x0cd0, + 0x0ce2, 0x0cf1, 0x0cfa, 0x0d21, 0x0d3d, 0x0d50, 0x0d7b, 0x0d87, + // Entry C0 - FF + 0x0d93, 0x0da2, 0x0dab, 0x0dc4, 0x0dd3, 0x0ddf, 0x0de8, 0x0df1, + 0x0dfd, 0x0e13, 0x0e2f, 0x0e3e, 0x0e47, 0x0e53, 0x0e62, 0x0e78, + 0x0e87, 0x0eb1, 0x0ec0, 0x0ed3, 0x0eec, 0x0ef8, 0x0f01, 0x0f0d, + 0x0f23, 0x0f44, 0x0f59, 0x0f6c, 0x0f75, 0x0f87, 0x0fa1, 0x0fd1, + 0x0fd7, 0x100d, 0x1013, 0x101f, 0x1031, 0x103d, 0x1050, 0x1068, + 0x1077, 0x1080, 0x1086, 0x10a3, 0x10ac, 0x10b8, 0x10c7, 0x10d3, + 0x10df, 0x10fd, 0x10fd, 0x1126, 0x112f, 0x1144, 0x115d, 0x119a, + 0x11a9, 0x11dc, 0x120a, 0x1219, 0x1228, 0x1242, 0x124b, 0x1254, + // Entry 100 - 13F + 0x125d, 0x1266, 0x1282, 0x128e, 0x129a, 0x12c2, 0x12cb, 0x12da, + 0x12f0, 0x1309, 0x1318, 0x133b, 0x1351, 0x1374, 0x1394, 0x13ad, + 0x13d0, 0x13df, 0x13fc, 0x1408, 0x142e, 0x1454, 0x1480, 0x149d, + 0x14af, 0x14be, 0x1501, 0x1510, 0x1522, 0x153e, 0x1564, 0x156d, + 0x158a, 0x15a4, 0x15c1, 0x15d7, + }, + }, + { // ckb + "ئاندۆرامیرنشینە یەکگرتووە عەرەبییەکانئەفغانستانئانتیگوا و باربودائەڵبانی" + + "ائەرمەنستانئەنگۆلائانتارکتیکائارجەنتیناساموای ئەمەریکایینەمسائۆسترا" + + "لیائارووبائازەربایجانبۆسنیا و ھەرزەگۆڤیناباربادۆسبەنگلادیشبەلژیکبور" + + "کینافاسۆبولگاریابەحرەینبوروندیبنینبۆلیڤیابرازیلبەھامابووتانبۆتسوانا" + + "بیلاڕووسبەلیزکانەداکۆنگۆ کینشاساکۆماری ئەفریقای ناوەڕاستسویسراکۆتدی" + + "ڤوارشیلیکامیروونچینکۆلۆمبیاکۆستاریکاکووباکەیپڤەردقیبرسکۆماری چیکئەڵ" + + "مانیاجیبووتیدانمارکدۆمینیکائەلجەزایرئیکوادۆرمیسرئەریتریائیسپانیائەت" + + "یۆپیافینلاندفیجیمایکرۆنیزیافەڕەنساگابۆنشانشینی یەکگرتووگریناداگورجس" + + "تانغەناگرینلاندگامبیاگینێیۆنانگواتیمالاگوامگینێ بیساوگویاناھۆندوورا" + + "سکرۆواتیاھایتیمەجارستانئیندۆنیزیائیرلەندئیسرائیلھیندستانعێراقئێرانئ" + + "ایسلەندئیتاڵیجامایکائوردنژاپۆنقرغیزستانکەمبۆدیاکیریباسدوورگەکانی قە" + + "مەرسەینت کیتس و نیڤیسکۆریای باکوورکوەیتکازاخستانلاوسلوبنانسەینت لوو" + + "سیالیختنشتاینسریلانکالیبەریالەسۆتۆلیتوانایالوکسەمبورگلاتڤیالیبیامەغ" + + "ریبمۆناکۆمۆلدۆڤامۆنتینیگرۆماداگاسکاردوورگەکانی مارشاڵمالیمیانمارمەن" + + "گۆلیامۆریتانیاماڵتامالدیڤمالاویمەکسیکمالیزیامۆزامبیکنامیبیانیجەرنیک" + + "اراگواھۆڵەندانۆرویژنیپالنائوروونیوزیلاندعومانپاناماپیرووپاپوا گینێی" + + " نوێفلیپینپاکستانپۆڵەنداپورتوگالپالاوپاراگوایقەتەرڕۆمانیاسربیاڕووسیا" + + "ڕوانداعەرەبستانی سەعوودیدوورگەکانی سلێمانسیشێلسوودانسویدسینگاپورسلۆ" + + "ڤێنیاسلۆڤاکیاسیەرالیۆنسان مارینۆسینیگالسۆمالیاسورینامساوتۆمێ و پرین" + + "سیپیئێلسالڤادۆرسووریاسوازیلاندچادتۆگۆتایلەندتاجیکستانتورکمانستانتوو" + + "نستۆنگاتورکیاترینیداد و تۆباگوتووڤالووتایوانتانزانیائۆکرانیائوگاندا" + + "ئوروگوایئوزبەکستانڤاتیکانسەینت ڤینسەنت و گرینادینزڤیەتنامڤانوواتووس" + + "اموایەمەنئەفریقای باشوورزامبیازیمبابویئەورووپای باشووریئاسیای ناوەن" + + "دیئاسیای ڕۆژاوا", + []uint16{ // 287 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000e, 0x0048, 0x005c, 0x007e, 0x007e, 0x008e, + 0x00a2, 0x00b0, 0x00c6, 0x00da, 0x00fb, 0x0105, 0x0117, 0x0125, + 0x0125, 0x013b, 0x0161, 0x0171, 0x0183, 0x018f, 0x01a5, 0x01b5, + 0x01c3, 0x01d1, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01e7, 0x01e7, + 0x01f3, 0x01ff, 0x020b, 0x020b, 0x021b, 0x022b, 0x0235, 0x0241, + 0x0241, 0x025a, 0x0288, 0x0288, 0x0294, 0x02a6, 0x02a6, 0x02ae, + 0x02be, 0x02c4, 0x02d4, 0x02d4, 0x02e6, 0x02f0, 0x0300, 0x0300, + 0x0300, 0x030a, 0x031d, 0x032d, 0x032d, 0x033b, 0x0349, 0x0359, + // Entry 40 - 7F + 0x0359, 0x036b, 0x036b, 0x037b, 0x037b, 0x0383, 0x0383, 0x0393, + 0x03a3, 0x03b3, 0x03b3, 0x03b3, 0x03c1, 0x03c9, 0x03c9, 0x03df, + 0x03df, 0x03ed, 0x03f7, 0x0416, 0x0424, 0x0434, 0x0434, 0x0434, + 0x043c, 0x043c, 0x044c, 0x0458, 0x0460, 0x0460, 0x0460, 0x046a, + 0x046a, 0x047c, 0x0484, 0x0497, 0x04a3, 0x04a3, 0x04a3, 0x04b5, + 0x04c5, 0x04cf, 0x04e1, 0x04e1, 0x04f5, 0x0503, 0x0513, 0x0513, + 0x0523, 0x0523, 0x052d, 0x0537, 0x0547, 0x0553, 0x0553, 0x0561, + 0x056b, 0x0575, 0x0575, 0x0587, 0x0597, 0x05a5, 0x05c4, 0x05e5, + // Entry 80 - BF + 0x05fe, 0x05fe, 0x0608, 0x0608, 0x061a, 0x0622, 0x062e, 0x0645, + 0x0659, 0x0669, 0x0677, 0x0683, 0x0695, 0x06a9, 0x06b5, 0x06bf, + 0x06cb, 0x06d7, 0x06e5, 0x06f9, 0x06f9, 0x070d, 0x072e, 0x072e, + 0x0736, 0x0744, 0x0754, 0x0754, 0x0754, 0x0754, 0x0766, 0x0766, + 0x0770, 0x0770, 0x077c, 0x0788, 0x0794, 0x07a2, 0x07b2, 0x07c0, + 0x07c0, 0x07ca, 0x07ca, 0x07ca, 0x07dc, 0x07ea, 0x07f6, 0x0800, + 0x080e, 0x080e, 0x0820, 0x082a, 0x0836, 0x0840, 0x0840, 0x085c, + 0x0868, 0x0876, 0x0884, 0x0884, 0x0884, 0x0884, 0x0884, 0x0894, + // Entry C0 - FF + 0x089e, 0x08ae, 0x08b8, 0x08b8, 0x08b8, 0x08c6, 0x08d0, 0x08dc, + 0x08e8, 0x090b, 0x092c, 0x0936, 0x0942, 0x094a, 0x095a, 0x095a, + 0x096a, 0x096a, 0x097a, 0x098c, 0x099f, 0x09ad, 0x09bb, 0x09c9, + 0x09c9, 0x09eb, 0x0a01, 0x0a01, 0x0a0d, 0x0a1f, 0x0a1f, 0x0a1f, + 0x0a25, 0x0a25, 0x0a2d, 0x0a3b, 0x0a4d, 0x0a4d, 0x0a4d, 0x0a63, + 0x0a6d, 0x0a77, 0x0a83, 0x0aa3, 0x0ab3, 0x0abf, 0x0acf, 0x0adf, + 0x0aed, 0x0aed, 0x0aed, 0x0aed, 0x0afd, 0x0b11, 0x0b1f, 0x0b4e, + 0x0b4e, 0x0b4e, 0x0b4e, 0x0b5c, 0x0b6e, 0x0b6e, 0x0b78, 0x0b78, + // Entry 100 - 13F + 0x0b82, 0x0b82, 0x0b9f, 0x0bab, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, + 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, + 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bdc, + 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bf7, 0x0c10, + }, + }, + { // cs + csRegionStr, + csRegionIdx, + }, + { // cy + "Ynys AscensionAndorraEmiradau Arabaidd UnedigAfghanistanAntigua a Barbud" + + "aAnguillaAlbaniaArmeniaAngolaAntarcticaYr ArianninSamoa AmericaAwstr" + + "iaAwstraliaArubaYnysoedd ÅlandAzerbaijanBosnia a HercegovinaBarbados" + + "BangladeshGwlad BelgBurkina FasoBwlgariaBahrainBurundiBeninSaint Bar" + + "thélemyBermudaBruneiBolifiaAntilles yr IseldiroeddBrasilY BahamasBhu" + + "tanYnys BouvetBotswanaBelarwsBelizeCanadaYnysoedd Cocos (Keeling)Y C" + + "ongo - KinshasaGweriniaeth Canolbarth AffricaY Congo - BrazzavilleY " + + "SwistirCôte d’IvoireYnysoedd CookChileCamerŵnTsieinaColombiaYnys Cli" + + "ppertonCosta RicaCiwbaCabo VerdeCuraçaoYnys y NadoligCyprusGweriniae" + + "th TsiecYr AlmaenDiego GarciaDjiboutiDenmarcDominicaGweriniaeth Domi" + + "nicaAlgeriaCeuta a MelillaEcuadorEstoniaYr AifftGorllewin SaharaErit" + + "reaSbaenEthiopiaYr Undeb EwropeaiddY FfindirFijiYnysoedd y Falkland/" + + "MalvinasMicronesiaYnysoedd FfaroFfraincGabonY Deyrnas UnedigGrenadaG" + + "eorgiaGuyane FfrengigYnys y GarnGhanaGibraltarYr Ynys LasGambiaGuiné" + + "eGuadeloupeGuinea GyhydeddolGwlad GroegDe Georgia ac Ynysoedd Sandwi" + + "ch y DeGuatemalaGuamGuiné-BissauGuyanaHong Kong RhGA TsieinaYnys Hea" + + "rd ac Ynysoedd McDonaldHondurasCroatiaHaitiHwngariYr Ynysoedd Dedwyd" + + "dIndonesiaIwerddonIsraelYnys ManawIndiaTiriogaeth Brydeinig Cefnfor " + + "IndiaIracIranGwlad yr IâYr EidalJerseyJamaicaGwlad IorddonenJapanKen" + + "yaKyrgyzstanCambodiaKiribatiComorosSaint Kitts a NevisGogledd KoreaD" + + "e KoreaKuwaitYnysoedd CaymanKazakstanLaosLibanusSaint LuciaLiechtens" + + "teinSri LankaLiberiaLesothoLithuaniaLwcsembwrgLatfiaLibyaMorocoMonac" + + "oMoldofaMontenegroSaint MartinMadagascarYnysoedd MarshallMacedoniaMa" + + "liMyanmar (Burma)MongoliaMacau RhGA TsieinaYnysoedd Gogledd MarianaM" + + "artiniqueMauritaniaMontserratMaltaMauritiusY MaldivesMalawiMecsicoMa" + + "laysiaMozambiqueNamibiaCaledonia NewyddNigerYnys NorfolkNigeriaNicar" + + "aguaYr IseldiroeddNorwyNepalNauruNiueSeland NewyddOmanPanamaPeriwPol" + + "ynesia FfrengigPapua Guinea NewyddY PhilipinauPakistanGwlad PwylSain" + + "t-Pierre-et-MiquelonYnysoedd PitcairnPuerto RicoTiriogaethau Paleste" + + "inaiddPortiwgalPalauParaguayQatarOceania BellennigRéunionRwmaniaSerb" + + "iaRwsiaRwandaSaudi ArabiaYnysoedd SolomonSeychellesSwdanSwedenSingap" + + "oreSaint HelenaSlofeniaSvalbard a Jan MayenSlofaciaSierra LeoneSan M" + + "arinoSenegalSomaliaSurinameDe SwdanSão Tomé a PríncipeEl SalvadorSin" + + "t MaartenSyriaGwlad SwaziTristan da CunhaYnysoedd Turks a CaicosTcha" + + "dTiroedd Deheuol ac Antarctig FfraincTogoGwlad ThaiTajikistanTokelau" + + "Timor-LesteTurkmenistanTunisiaTongaTwrciTrinidad a TobagoTuvaluTaiwa" + + "nTanzaniaWcráinUgandaYnysoedd Pellennig UDACenhedloedd UnedigYr Unol" + + " DaleithiauUruguayUzbekistanY FaticanSaint Vincent a’r GrenadinesVen" + + "ezuelaYnysoedd Gwyryf PrydainYnysoedd Gwyryf yr Unol DaleithiauFietn" + + "amVanuatuWallis a FutunaSamoaKosovoYemenMayotteDe AffricaZambiaZimba" + + "bweRhanbarth AnhysbysY BydAffricaGogledd AmericaDe AmericaOceaniaGor" + + "llewin AffricaCanolbarth AmericaDwyrain AffricaGogledd AffricaCanol " + + "AffricaDeheudir AffricaYr AmerigAmerica i’r Gogledd o FecsicoY Carib" + + "îDwyrain AsiaDe AsiaDe-Ddwyrain AsiaDe EwropAwstralasiaMelanesiaRha" + + "nbarth MicronesiaPolynesiaAsiaCanol AsiaGorllewin AsiaEwropDwyrain E" + + "wropGogledd EwropGorllewin EwropAmerica Ladin", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x0015, 0x002d, 0x0038, 0x0049, 0x0051, 0x0058, + 0x005f, 0x0065, 0x006f, 0x007a, 0x0087, 0x008e, 0x0097, 0x009c, + 0x00ab, 0x00b5, 0x00c9, 0x00d1, 0x00db, 0x00e5, 0x00f1, 0x00f9, + 0x0100, 0x0107, 0x010c, 0x011d, 0x0124, 0x012a, 0x0131, 0x0148, + 0x014e, 0x0157, 0x015d, 0x0168, 0x0170, 0x0177, 0x017d, 0x0183, + 0x019b, 0x01ad, 0x01cb, 0x01e0, 0x01e9, 0x01f9, 0x0206, 0x020b, + 0x0213, 0x021a, 0x0222, 0x0231, 0x023b, 0x0240, 0x024a, 0x0252, + 0x0260, 0x0266, 0x0277, 0x0280, 0x028c, 0x0294, 0x029b, 0x02a3, + // Entry 40 - 7F + 0x02b7, 0x02be, 0x02cd, 0x02d4, 0x02db, 0x02e3, 0x02f3, 0x02fa, + 0x02ff, 0x0307, 0x031a, 0x031a, 0x0323, 0x0327, 0x0343, 0x034d, + 0x035b, 0x0362, 0x0367, 0x0377, 0x037e, 0x0385, 0x0394, 0x039f, + 0x03a4, 0x03ad, 0x03b8, 0x03be, 0x03c5, 0x03cf, 0x03e0, 0x03eb, + 0x040f, 0x0418, 0x041c, 0x0429, 0x042f, 0x0445, 0x0464, 0x046c, + 0x0473, 0x0478, 0x047f, 0x0492, 0x049b, 0x04a3, 0x04a9, 0x04b3, + 0x04b8, 0x04da, 0x04de, 0x04e2, 0x04ee, 0x04f6, 0x04fc, 0x0503, + 0x0512, 0x0517, 0x051c, 0x0526, 0x052e, 0x0536, 0x053d, 0x0550, + // Entry 80 - BF + 0x055d, 0x0565, 0x056b, 0x057a, 0x0583, 0x0587, 0x058e, 0x0599, + 0x05a6, 0x05af, 0x05b6, 0x05bd, 0x05c6, 0x05d0, 0x05d6, 0x05db, + 0x05e1, 0x05e7, 0x05ee, 0x05f8, 0x0604, 0x060e, 0x061f, 0x0628, + 0x062c, 0x063b, 0x0643, 0x0655, 0x066d, 0x0677, 0x0681, 0x068b, + 0x0690, 0x0699, 0x06a3, 0x06a9, 0x06b0, 0x06b8, 0x06c2, 0x06c9, + 0x06d9, 0x06de, 0x06ea, 0x06f1, 0x06fa, 0x0708, 0x070d, 0x0712, + 0x0717, 0x071b, 0x0728, 0x072c, 0x0732, 0x0737, 0x0749, 0x075c, + 0x0768, 0x0770, 0x077a, 0x0792, 0x07a3, 0x07ae, 0x07c8, 0x07d1, + // Entry C0 - FF + 0x07d6, 0x07de, 0x07e3, 0x07f4, 0x07fc, 0x0803, 0x0809, 0x080e, + 0x0814, 0x0820, 0x0830, 0x083a, 0x083f, 0x0845, 0x084e, 0x085a, + 0x0862, 0x0876, 0x087e, 0x088a, 0x0894, 0x089b, 0x08a2, 0x08aa, + 0x08b2, 0x08c8, 0x08d3, 0x08df, 0x08e4, 0x08ef, 0x08ff, 0x0916, + 0x091b, 0x093f, 0x0943, 0x094d, 0x0957, 0x095e, 0x0969, 0x0975, + 0x097c, 0x0981, 0x0986, 0x0997, 0x099d, 0x09a3, 0x09ab, 0x09b2, + 0x09b8, 0x09ce, 0x09e0, 0x09f2, 0x09f9, 0x0a03, 0x0a0c, 0x0a2a, + 0x0a33, 0x0a4a, 0x0a6c, 0x0a73, 0x0a7a, 0x0a89, 0x0a8e, 0x0a94, + // Entry 100 - 13F + 0x0a99, 0x0aa0, 0x0aaa, 0x0ab0, 0x0ab8, 0x0aca, 0x0acf, 0x0ad6, + 0x0ae5, 0x0aef, 0x0af6, 0x0b07, 0x0b19, 0x0b28, 0x0b37, 0x0b44, + 0x0b54, 0x0b5d, 0x0b7c, 0x0b85, 0x0b91, 0x0b98, 0x0ba8, 0x0bb0, + 0x0bbb, 0x0bc4, 0x0bd8, 0x0be1, 0x0be5, 0x0bef, 0x0bfd, 0x0c02, + 0x0c0f, 0x0c1c, 0x0c2b, 0x0c38, + }, + }, + { // da + daRegionStr, + daRegionIdx, + }, + { // dav + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // de + deRegionStr, + deRegionIdx, + }, + { // de-AT + "Svalbard und Jan Mayen", + []uint16{ // 210 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, + }, + }, + { // de-CH + "BruneiBotswanaWeissrusslandKapverdenGrossbritannienÄusseres OzeanienSalo" + + "mon-InselnZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x000e, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + // Entry 40 - 7F + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + // Entry 80 - BF + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + // Entry C0 - FF + 0x0033, 0x0033, 0x0033, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + // Entry 100 - 13F + 0x0053, 0x0053, 0x0053, 0x0053, 0x005b, + }, + }, + {}, // de-LU + { // dje + "AndooraLaaraw Imaarawey MarganteyAfgaanistanAntigua nda BarbuudaAngiiyaA" + + "lbaaniArmeeniAngoolaArgentineAmeriki SamoaOtrišiOstraaliAruubaAzerba" + + "ayijaŋBosni nda HerzegovineBarbaadosBangladešiBelgiikiBurkina fasoBu" + + "lgaariBahareenBurundiBeniŋBermudaBruuneeBooliviBreezilBahamasBuutaŋB" + + "otswaanaBilorišiBeliiziKanaadaKongoo demookaratiki labooCentraafriki" + + " koyraKongooSwisuKudwarKuuk gungeyŠiiliKameruunŠiinKolombiKosta rika" + + "KuubaKapuver gungeyŠiipurCek laboAlmaaɲeJibuutiDanemarkDoominiki lab" + + "ooAlžeeriEkwateerEstooniMisraEritreeEspaaɲeEcioopiFinlanduFijiKalkan" + + " gungeyMikroneziFaransiGaabonAlbaasalaama MargantaGrenaadaGorgiFaran" + + "si GuyaanGaanaGibraltarGrinlandGambiGineGwadeluupGinee EkwatorialGre" + + "eceGwatemaalaGuamGine-BissoGuyaaneHondurasKrwaasiHaitiHungaariIndone" + + "eziIrlanduIsrayelIndu labooBritiši Indu teekoo laamaIraakIraanAysela" + + "ndItaaliJamaayikUrdunJaapoŋKeeniyaKyrgyzstankamboogiKiribaatiKomoorS" + + "eŋ Kitts nda NevisGurma KooreeHawsa KooreeKuweetKayman gungeyKaazaks" + + "tanLaawosLubnaanSeŋ LussiaLiechtensteinSrilankaLiberiaLeesotoLituaan" + + "iLuxembourgLetooniLiibiMaarokMonakoMoldoviMadagascarMaršal gungeyMaa" + + "cedooniMaaliMaynamarMongooliMariana Gurma GungeyMartiniikiMooritaani" + + "MontserratMaltaMooris gungeyMaldiivuMalaawiMexikiMaleeziMozambikNaam" + + "ibiKaaledooni TaagaaNižerNorfolk GungooNaajiriiaNikaragwaHollanduNor" + + "veejNeepalNauruNiueZeelandu TaagaOmaanPanamaPeeruFaransi PolineeziPa" + + "pua Ginee TaagaFilipinePaakistanPoloɲeSeŋ Piyer nda MikelonPitikarin" + + "Porto RikoPalestine Dangay nda GaazaPortugaalPaluParaguweyKataarReen" + + "ioŋRumaaniIriši labooRwandaSaudiyaSolomon GungeySeešelSuudaŋSweedeSi" + + "ngapurSeŋ HelenaSloveeniSlovaakiSeera LeonSan MarinoSenegalSomaaliSu" + + "rinaamSao Tome nda PrinsipeSalvador labooSuuriaSwazilandTurk nda Kay" + + "ikos GungeyCaaduTogoTaayilandTaažikistanTokelauTimoor hawsaTurkmenis" + + "taŋTuniziTongaTurkiTrinidad nda TobaagoTuvaluTaayiwanTanzaaniUkreenU" + + "gandaAmeriki Laabu MarganteyUruguweyUzbeekistanVaatikan LaamaSeŋvins" + + "aŋ nda GrenadineVeneezuyeelaBritiši Virgin gungeyAmeerik Virgin Gung" + + "eyVietnaamVanautuWallis nda FutunaSamoaYamanMayootiHawsa Afriki Labo" + + "oZambiZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0021, 0x002c, 0x0040, 0x0047, 0x004e, + 0x0055, 0x005c, 0x005c, 0x0065, 0x0072, 0x0079, 0x0081, 0x0087, + 0x0087, 0x0094, 0x00a9, 0x00b2, 0x00bd, 0x00c5, 0x00d1, 0x00d9, + 0x00e1, 0x00e8, 0x00ee, 0x00ee, 0x00f5, 0x00fc, 0x0103, 0x0103, + 0x010a, 0x0111, 0x0118, 0x0118, 0x0121, 0x012a, 0x0131, 0x0138, + 0x0138, 0x0152, 0x0164, 0x016a, 0x016f, 0x0175, 0x0180, 0x0186, + 0x018e, 0x0193, 0x019a, 0x019a, 0x01a4, 0x01a9, 0x01b7, 0x01b7, + 0x01b7, 0x01be, 0x01c6, 0x01ce, 0x01ce, 0x01d5, 0x01dd, 0x01dd, + // Entry 40 - 7F + 0x01ec, 0x01f4, 0x01f4, 0x01fc, 0x0203, 0x0208, 0x0208, 0x020f, + 0x0217, 0x021e, 0x021e, 0x021e, 0x0226, 0x022a, 0x0237, 0x0240, + 0x0240, 0x0247, 0x024d, 0x0262, 0x026a, 0x026f, 0x027d, 0x027d, + 0x0282, 0x028b, 0x0293, 0x0298, 0x029c, 0x02a5, 0x02b5, 0x02bb, + 0x02bb, 0x02c5, 0x02c9, 0x02d3, 0x02da, 0x02da, 0x02da, 0x02e2, + 0x02e9, 0x02ee, 0x02f6, 0x02f6, 0x02ff, 0x0306, 0x030d, 0x030d, + 0x0317, 0x0331, 0x0336, 0x033b, 0x0343, 0x0349, 0x0349, 0x0351, + 0x0356, 0x035d, 0x0364, 0x036e, 0x0376, 0x037f, 0x0385, 0x0399, + // Entry 80 - BF + 0x03a5, 0x03b1, 0x03b7, 0x03c4, 0x03ce, 0x03d4, 0x03db, 0x03e6, + 0x03f3, 0x03fb, 0x0402, 0x0409, 0x0411, 0x041b, 0x0422, 0x0427, + 0x042d, 0x0433, 0x043a, 0x043a, 0x043a, 0x0444, 0x0452, 0x045c, + 0x0461, 0x0469, 0x0471, 0x0471, 0x0485, 0x048f, 0x0499, 0x04a3, + 0x04a8, 0x04b5, 0x04bd, 0x04c4, 0x04ca, 0x04d1, 0x04d9, 0x04e0, + 0x04f1, 0x04f7, 0x0505, 0x050e, 0x0517, 0x051f, 0x0526, 0x052c, + 0x0531, 0x0535, 0x0543, 0x0548, 0x054e, 0x0553, 0x0564, 0x0575, + 0x057d, 0x0586, 0x058d, 0x05a3, 0x05ac, 0x05b6, 0x05d0, 0x05d9, + // Entry C0 - FF + 0x05dd, 0x05e6, 0x05ec, 0x05ec, 0x05f4, 0x05fb, 0x05fb, 0x0607, + 0x060d, 0x0614, 0x0622, 0x0629, 0x0630, 0x0636, 0x063e, 0x0649, + 0x0651, 0x0651, 0x0659, 0x0663, 0x066d, 0x0674, 0x067b, 0x0683, + 0x0683, 0x0698, 0x06a6, 0x06a6, 0x06ac, 0x06b5, 0x06b5, 0x06cc, + 0x06d1, 0x06d1, 0x06d5, 0x06de, 0x06ea, 0x06f1, 0x06fd, 0x070a, + 0x0710, 0x0715, 0x071a, 0x072e, 0x0734, 0x073c, 0x0744, 0x074a, + 0x0750, 0x0750, 0x0750, 0x0767, 0x076f, 0x077a, 0x0788, 0x07a1, + 0x07ad, 0x07c3, 0x07d8, 0x07e0, 0x07e7, 0x07f8, 0x07fd, 0x07fd, + // Entry 100 - 13F + 0x0802, 0x0809, 0x081b, 0x0820, 0x0828, + }, + }, + { // dsb + "AscensionAndorraZjadnośone arabiske emiratyAfghanistanAntigua a BarbudaA" + + "nguillaAlbańskaArmeńskaAngolaAntarktisArgentinskaAmeriska SamoaAwstr" + + "iskaAwstralskaArubaÅlandAzerbajdžanBosniska a HercegowinaBarbadosBan" + + "gladešBelgiskaBurkina FasoBulgarskaBahrainBurundiBeninSt. Barthélemy" + + "BermudyBruneiBoliwiskaKaribiska NižozemskaBrazilskaBahamyBhutanBouve" + + "towa kupaBotswanaBěłoruskaBelizeKanadaKokosowe kupyKongo-KinshasaCen" + + "tralnoafriska republikaKongo-BrazzavilleŠwicarskaCôte d’IvoireCookow" + + "e kupyChilskaKamerunChinaKolumbiskaClippertonowa kupaKosta RikaKubaK" + + "ap VerdeCuraçaoGódowne kupyCypriskaČeska republikaNimskaDiego Garcia" + + "DžibutiDańskaDominikaDominikańska republikaAlgeriskaCeuta a MelillaE" + + "kwadorEstniskaEgyptojskaPódwjacorna SaharaEritrejaŠpańskaEtiopiskaEu" + + "ropska unijaFinskaFidžiFalklandske kupyMikroneziskaFäröjeFrancojskaG" + + "abunZjadnośone kralejstwoGrenadaGeorgiskaFrancojska GuyanaGuernseyGh" + + "anaGibraltarGrönlandskaGambijaGinejaGuadeloupeEkwatorialna GinejaGri" + + "chiskaPódpołdnjowa Georgiska a Pódpołdnjowe Sandwichowe kupyGuatemal" + + "aGuamGineja-BissauGuyanaWósebna zastojnstwowa cona HongkongHeardowa " + + "kupa a McDonaldowe kupyHondurasChorwatskaHaitiHungorskaKanariske kup" + + "yIndoneziskaIrskaIsraelManIndiskaBritiski indiskooceaniski teritoriu" + + "mIrakIranIslandskaItalskaJerseyJamaikaJordaniskaJapańskaKeniaKirgizi" + + "stanKambodžaKiribatiKomorySt. Kitts a NevisPódpołnocna KorejaPódpołd" + + "njowa KorejaKuwaitKajmaniske kupyKazachstanLaosLibanonSt. LuciaLiech" + + "tensteinSri LankaLiberijaLesothoLitawskaLuxemburgskaLetiskaLibyskaMa" + + "rokkoMonacoMoldawskaCarna GóraSt. MartinMadagaskarMarshallowe kupyMa" + + "kedońskaMaliMyanmarMongolskaWósebna zastojnstwowa cona MacaoPódpołno" + + "cne MarianyMartiniqueMawretańskaMontserratMaltaMauritiusMalediwyMala" + + "wiMexikoMalajzijaMosambikNamibijaNowa KaledoniskaNigerNorfolkowa kup" + + "aNigerijaNikaraguaNižozemskaNorwegskaNepalNauruNiueNowoseelandskaOma" + + "nPanamaPeruFrancojska PolyneziskaPapua-NeuguineaFilipinyPakistanPóls" + + "kaSt. Pierre a MiquelonPitcairnowe kupyPuerto RicoPalestinski awtono" + + "mny teritoriumPortugalskaPalauParaguayKatarwenkowna OceaniskaRéunion" + + "RumuńskaSerbiskaRuskaRuandaSaudi-ArabiskaSalomonySeychelleSudanŠweds" + + "kaSingapurSt. HelenaSłowjeńskaSvalbard a Jan MayenSłowakskaSierra Le" + + "oneSan MarinoSenegalSomalijaSurinamskaPódpołdnjowy SudanSão Tomé a P" + + "ríncipeEl SalvadorSint MaartenSyriskaSwasiskaTristan da CunhaTurks a" + + " Caicos kupyČadFrancojski pódpołdnjowy a antarktiski teritoriumTogoT" + + "hailandskaTadźikistanTokelauTimor-LesteTurkmeniskaTuneziskaTongaTurk" + + "ojskaTrinidad a TobagoTuvaluTaiwanTansanijaUkrainaUgandaAmeriska Oce" + + "aniskaZjadnośone staty AmerikiUruguayUzbekistanVatikańske městoSt. V" + + "incent a GrenadinyVenezuelaBritiske kněžniske kupyAmeriske kněžniske" + + " kupyVietnamVanuatuWallis a FutunaSamoaKosowoJemenMayottePódpołdnjow" + + "a Afrika (Republika)SambijaSimbabwenjeznaty regionswětAfrikaPódpołno" + + "cna AmerikaPódpołdnjowa AmerikaOceaniskaPódwjacorna AfrikaSrjejźna A" + + "merikapódzajtšna Afrikapódpołnocna Afrikasrjejźna Afrikapódpołdnjowa" + + " AfrikaAmerikapódpołnocny ameriski kontinentKaribiskapódzajtšna Azij" + + "apódpołdnjowa Azijakrotkozajtšna Azijapódpołdnjowa EuropaAwstralazij" + + "aMelaneziskaMikroneziska (kupowy region)PolyneziskaAzijacentralna Az" + + "ijapódwjacorna AzijaEuropapódzajtšna Europapódpołnocna Europapódwjac" + + "orna EuropaŁatyńska Amerika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002c, 0x0037, 0x0048, 0x0050, 0x0059, + 0x0062, 0x0068, 0x0071, 0x007c, 0x008a, 0x0093, 0x009d, 0x00a2, + 0x00a8, 0x00b4, 0x00ca, 0x00d2, 0x00dc, 0x00e4, 0x00f0, 0x00f9, + 0x0100, 0x0107, 0x010c, 0x011b, 0x0122, 0x0128, 0x0131, 0x0146, + 0x014f, 0x0155, 0x015b, 0x0169, 0x0171, 0x017c, 0x0182, 0x0188, + 0x0195, 0x01a3, 0x01bd, 0x01ce, 0x01d8, 0x01e8, 0x01f4, 0x01fb, + 0x0202, 0x0207, 0x0211, 0x0223, 0x022d, 0x0231, 0x023a, 0x0242, + 0x024f, 0x0257, 0x0267, 0x026d, 0x0279, 0x0281, 0x0288, 0x0290, + // Entry 40 - 7F + 0x02a7, 0x02b0, 0x02bf, 0x02c6, 0x02ce, 0x02d8, 0x02eb, 0x02f3, + 0x02fc, 0x0305, 0x0313, 0x0313, 0x0319, 0x031f, 0x032f, 0x033b, + 0x0343, 0x034d, 0x0352, 0x0368, 0x036f, 0x0378, 0x0389, 0x0391, + 0x0396, 0x039f, 0x03ab, 0x03b2, 0x03b8, 0x03c2, 0x03d5, 0x03de, + 0x0418, 0x0421, 0x0425, 0x0432, 0x0438, 0x045c, 0x047c, 0x0484, + 0x048e, 0x0493, 0x049c, 0x04aa, 0x04b5, 0x04ba, 0x04c0, 0x04c3, + 0x04ca, 0x04ee, 0x04f2, 0x04f6, 0x04ff, 0x0506, 0x050c, 0x0513, + 0x051d, 0x0526, 0x052b, 0x0536, 0x053f, 0x0547, 0x054d, 0x055e, + // Entry 80 - BF + 0x0572, 0x0587, 0x058d, 0x059c, 0x05a6, 0x05aa, 0x05b1, 0x05ba, + 0x05c7, 0x05d0, 0x05d8, 0x05df, 0x05e7, 0x05f3, 0x05fa, 0x0601, + 0x0608, 0x060e, 0x0617, 0x0622, 0x062c, 0x0636, 0x0646, 0x0651, + 0x0655, 0x065c, 0x0665, 0x0686, 0x069b, 0x06a5, 0x06b1, 0x06bb, + 0x06c0, 0x06c9, 0x06d1, 0x06d7, 0x06dd, 0x06e6, 0x06ee, 0x06f6, + 0x0706, 0x070b, 0x071a, 0x0722, 0x072b, 0x0736, 0x073f, 0x0744, + 0x0749, 0x074d, 0x075b, 0x075f, 0x0765, 0x0769, 0x077f, 0x078e, + 0x0796, 0x079e, 0x07a5, 0x07ba, 0x07ca, 0x07d5, 0x07f5, 0x0800, + // Entry C0 - FF + 0x0805, 0x080d, 0x0812, 0x0824, 0x082c, 0x0835, 0x083d, 0x0842, + 0x0848, 0x0856, 0x085e, 0x0867, 0x086c, 0x0874, 0x087c, 0x0886, + 0x0892, 0x08a6, 0x08b0, 0x08bc, 0x08c6, 0x08cd, 0x08d5, 0x08df, + 0x08f3, 0x0909, 0x0914, 0x0920, 0x0927, 0x092f, 0x093f, 0x0952, + 0x0956, 0x0988, 0x098c, 0x0997, 0x09a3, 0x09aa, 0x09b5, 0x09c0, + 0x09c9, 0x09ce, 0x09d7, 0x09e8, 0x09ee, 0x09f4, 0x09fd, 0x0a04, + 0x0a0a, 0x0a1c, 0x0a1c, 0x0a35, 0x0a3c, 0x0a46, 0x0a58, 0x0a6f, + 0x0a78, 0x0a91, 0x0aaa, 0x0ab1, 0x0ab8, 0x0ac7, 0x0acc, 0x0ad2, + // Entry 100 - 13F + 0x0ad7, 0x0ade, 0x0aff, 0x0b06, 0x0b0e, 0x0b1d, 0x0b22, 0x0b28, + 0x0b3d, 0x0b53, 0x0b5c, 0x0b6f, 0x0b80, 0x0b93, 0x0ba7, 0x0bb7, + 0x0bcc, 0x0bd3, 0x0bf3, 0x0bfc, 0x0c0e, 0x0c22, 0x0c36, 0x0c4b, + 0x0c57, 0x0c62, 0x0c7e, 0x0c89, 0x0c8e, 0x0c9d, 0x0caf, 0x0cb5, + 0x0cc8, 0x0cdc, 0x0cef, 0x0d01, + }, + }, + { // dua + "Cameroun", + []uint16{ // 49 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0008, + }, + }, + { // dyo + "AndorraAfganistanAntigua di BarbudaAngiiyaAlbaniArmeniAngolaArsantinSamo" + + "a yati AmerikOtrisOstraaliaArubaAserbaysanBosni di HersegovinBarbadB" + + "angladesBelsikBurukiina FasoBulgariBahraynBurundiBeneBermudBuruneyBo" + + "liiviBresilBahamaButanBoswanaBelarusBeliisKanadaMofam demokratik mat" + + "i KongoKongoKoddiwarCiliKamerunSiinKolombiKosta RikaKubaKap VerSiipr" + + "Mofam mati CekAlmaañJibutiDanmarkDominikaMofam mati DominikAlseriEku" + + "adorEstoniEsíptEritreeEspaañEcoopiFinlandFijiFransGabonGrenadaSeorsi" + + "GaanaSipraltaarGreenlandGambiGinéGuwadalupGresGuatemalaGuamGiné Bisa" + + "auGiyanOndurasKroasiAytiOŋriEndonesiIrlandIsraelEndIrakIranIislandIt" + + "aliSamaikSapoŋKeniyaKambojKomorSaŋ LusiaSiri LankaLiberiaMadagaskaar" + + "MaliEcinkey yati NoorfokAbari SaudiSudanSingapurSloveniSlovakiSerra " + + "LeonSenegalSomaliSalvadoorCadTogoTailand", + []uint16{ // 228 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0007, 0x0011, 0x0023, 0x002a, 0x0030, + 0x0036, 0x003c, 0x003c, 0x0044, 0x0055, 0x005a, 0x0063, 0x0068, + 0x0068, 0x0072, 0x0085, 0x008b, 0x0094, 0x009a, 0x00a8, 0x00af, + 0x00b6, 0x00bd, 0x00c1, 0x00c1, 0x00c7, 0x00ce, 0x00d5, 0x00d5, + 0x00db, 0x00e1, 0x00e6, 0x00e6, 0x00ed, 0x00f4, 0x00fa, 0x0100, + 0x0100, 0x011b, 0x011b, 0x0120, 0x0120, 0x0128, 0x0128, 0x012c, + 0x0133, 0x0137, 0x013e, 0x013e, 0x0148, 0x014c, 0x0153, 0x0153, + 0x0153, 0x0158, 0x0166, 0x016d, 0x016d, 0x0173, 0x017a, 0x0182, + // Entry 40 - 7F + 0x0194, 0x019a, 0x019a, 0x01a1, 0x01a7, 0x01ad, 0x01ad, 0x01b4, + 0x01bb, 0x01c1, 0x01c1, 0x01c1, 0x01c8, 0x01cc, 0x01cc, 0x01cc, + 0x01cc, 0x01d1, 0x01d6, 0x01d6, 0x01dd, 0x01e3, 0x01e3, 0x01e3, + 0x01e8, 0x01f2, 0x01fb, 0x0200, 0x0205, 0x020e, 0x020e, 0x0212, + 0x0212, 0x021b, 0x021f, 0x022b, 0x0230, 0x0230, 0x0230, 0x0237, + 0x023d, 0x0241, 0x0246, 0x0246, 0x024e, 0x0254, 0x025a, 0x025a, + 0x025d, 0x025d, 0x0261, 0x0265, 0x026c, 0x0271, 0x0271, 0x0277, + 0x0277, 0x027d, 0x0283, 0x0283, 0x0289, 0x0289, 0x028e, 0x028e, + // Entry 80 - BF + 0x028e, 0x028e, 0x028e, 0x028e, 0x028e, 0x028e, 0x028e, 0x0298, + 0x0298, 0x02a2, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, + 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02b4, 0x02b4, 0x02b4, + 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, + 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, + 0x02b8, 0x02b8, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, + 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, + 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, + // Entry C0 - FF + 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, 0x02cc, + 0x02cc, 0x02d7, 0x02d7, 0x02d7, 0x02dc, 0x02dc, 0x02e4, 0x02e4, + 0x02eb, 0x02eb, 0x02f2, 0x02fc, 0x02fc, 0x0303, 0x0309, 0x0309, + 0x0309, 0x0309, 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, + 0x0315, 0x0315, 0x0319, 0x0320, + }, + }, + { // dz + "ཨེ་སེན་ཤུན་ཚོ་གླིང༌ཨཱན་དོ་རཡུ་ནཱའི་ཊེཌ་ ཨ་རབ་ ཨེ་མེ་རེཊསཨཕ་གྷ་ནི་སཏཱནཨན་" + + "ཊི་གུ་ཝ་ ཨེནཌ་ བྷར་བྷུ་ཌཨང་གི་ལཨཱལ་བེ་ནི་ཡཨར་མི་ནི་ཡཨང་གྷོ་ལའཛམ་གླ" + + "ིང་ལྷོ་མཐའི་ཁྱགས་གླིངཨར་ཇེན་ཊི་ནས་མོ་ཨ་ཡུ་ཨེས་ཨེ་མངའ་ཁོངསཨཱོས་ཊྲི་" + + "ཡཨཱོས་ཊྲེལ་ལི་ཡཨ་རུ་བཱཨ་ལནཌ་གླིང་ཚོམཨ་ཛར་བྷའི་ཇཱནབྷོས་ནི་ཡ་ ཨེནཌ་ " + + "ཧར་ཛི་གྷོ་བི་ནབྷར་བེ་ཌོསབངྒ་ལ་དེཤབྷེལ་ཇམབྷར་ཀི་ན་ ཕེ་སོབུལ་ག་རི་ཡབ" + + "ྷ་རེནབྷུ་རུན་ཌིབྷེ་ནིནསེནཊ་ བར་ཐོ་ལོམ་མིའུབར་མུ་ཌབྷྲུ་ནའིབྷེ་ལི་བི" + + "་ཡཀེ་རི་བི་ཡེན་ནེ་དར་ལནཌས྄བྲ་ཛིལབྷ་ཧ་མས྄འབྲུགབོའུ་ཝེཊ་མཚོ་གླིངབྷོཙ" + + "་ཝ་ནབེལ་ཨ་རུ་སུབྷེ་ལིཛཀེ་ན་ཌཀོ་ཀོས་གླིང་ཚོམཀོང་གྷོ ཀིན་ཤ་སསེན་ཊལ་ " + + "ཨཕ་རི་ཀཱན་ རི་པབ་ལིཀཀོང་གྷོ བྷྲ་ཛ་བིལསུ་ཝིཊ་ཛར་ལེནཌཀོ་ཊེ་ ཌི་ཨི་ཝོ" + + "་རེཀུག་གླིང་ཚོམཅི་ལིཀེ་མ་རུནརྒྱ་ནགཀོ་ལོམ་བྷི་ཡཀི་ལི་པེར་ཊོན་མཚོ་གླ" + + "ིང་ཀོས་ཊ་རི་ཀཀིའུ་བྷཀེཔ་བཱཌཀྱཱུར་ར་ཀོཁི་རིསྟ་མེས་མཚོ་གླིངསཱའི་པྲསཅ" + + "ེཀ་ རི་པབ་ལིཀཇཱར་མ་ནིཌི་ཡེ་གོ་གར་སིའོཇི་བྷུ་ཊིཌེན་མཱཀཌོ་མི་ནི་ཀཌོ་" + + "མི་ནི་ཀཱན་ རི་པབ་ལིཀཨཱལ་ཇི་རི་ཡསེ་ཨུ་ཏ་ ཨེནཌ་ མེལ་ལི་ལཨེ་ཁྭ་ཌོརཨེས" + + "་ཊོ་ནི་ཡཨི་ཇིབཊནུབ་ཕྱོགས་ ས་ཧཱ་རཨེ་རི་ཊྲེ་ཡཨིས་པེནཨི་ཐི་ཡོ་པི་ཡཡུ་" + + "རོབ་གཅིག་བསྡོམས་ཚོགས་པཕིན་ལེནཌཕི་ཇིཕལྐ་ལནྜ་གླིང་ཚོམམའི་ཀྲོ་ནི་ཤི་ཡ" + + "ཕཱའེ་རོ་གླིང་ཚོམཕྲཱནསགྷ་བྷོནཡུ་ནཱའི་ཊེཌ་ ཀིང་ཌམགྲྀ་ན་ཌཇཽར་ཇཱགུའི་ཡ" + + "་ན་ ཕྲནས྄་མངའ་ཁོངསགུ་ཨེརྣ་སིགྷ་ནཇིབ་རཱལ་ཊརགིརཱིན་ལནཌ྄གྷེམ་བི་ཡགྷི་" + + "ནིགོ་ཌེ་ལུ་པེཨེ་ཀུ་ཊོ་རེལ་ གི་ནིགིརིས྄སཱའུཐ་ཇཽར་ཇཱ་ དང་ སཱའུཐ་སེནཌ" + + "྄་ཝིཅ་གླིང་ཚོམགྷོ་ཊ་མ་ལགུ་འམ་ མཚོ་གླིངགྷི་ནི་ བྷི་སཱའུགྷ་ཡ་ནཧོང་ཀོ" + + "ང་ཅཱའི་ནཧཱརཌ་མཚོ་གླིང་ དང་ མེཀ་ཌོ་ནལཌ྄་གླིང་ཚོམཧཱན་ཌུ་རཱས྄ཀྲོ་ཨེ་ཤ" + + "ཧེ་ཊིཧཱང་གྷ་རིཀ་ནེ་རི་གླིང་ཚོམཨིན་ཌོ་ནེ་ཤི་ཡཨཱ་ཡ་ལེནཌཨིས་ར་ཡེལཨ་ཡུ" + + "ལ་ ཨོཕ་ མཱནརྒྱ་གརབྲི་ཊིཤ་རྒྱ་གར་གྱི་རྒྱ་མཚོ་ས་ཁོངསཨི་རཱཀཨི་རཱནཨཱའི" + + "ས་ལེནཌཨི་ཊ་ལིཇེར་སིཇཱ་མཻ་ཀཇོར་ཌནཇ་པཱནཀེན་ཡཀིར་གིས་སཏཱནཀམ་བྷོ་ཌི་ཡཀ" + + "ི་རི་བ་ཏི་མཚོ་གླིངཀོ་མོ་རོསསེནཊ་ ཀིཊས་ དང་ ནེ་བིསབྱང་ ཀོ་རི་ཡལྷོ་ " + + "ཀོ་རི་ཡཀུ་ཝེཊཁེ་མེན་གླིང་ཚོམཀ་ཛགས་སཏཱནལཱ་ཝོསལེ་བ་ནོནསེནཊ་ ལུ་སི་ཡལ" + + "ིཀ་ཏནས་ཏ་ཡིནཤྲཱི་ལང་ཀལཱའི་བེ་རི་ཡལཻ་སོ་ཐོལི་ཐུ་ཝེ་ནི་ཡལག་ཛམ་བོརྒལཊ" + + "་བི་ཡལི་བི་ཡམོ་རོ་ཀོམོ་ན་ཀོམོལ་དོ་བཱམོན་ཊི་ནེག་རོསེནཊ་ མཱར་ཊིནམ་དཱ" + + "་གེས་ཀརམར་ཤེལ་གླིང་ཚོམམ་སེ་ཌོ་ནི་ཡམཱ་ལིམི་ཡཱན་མར་ (བྷར་མ)སོག་པོ་ཡུ" + + "ལམཀ་ཨའུ་ཅཱའི་ནབྱང་ཕྱོགས་ཀྱི་མ་ར་ཡ་ན་གླིང་ཚོམམཱར་ཊི་ནིཀམོ་རི་ཊེ་ནི་" + + "ཡམོན་ས་རཊམཱལ་ཊམོ་རི་ཤཱསམཱལ་དིབསམ་ལ་ཝིམེཀ་སི་ཀོམ་ལེ་ཤི་ཡམོ་ཛམ་བྷིཀན" + + "་མི་བི་ཡནིའུ་ཀ་ལི་དོ་ནི་ཡནཱའི་ཇཱནོར་ཕོལཀ་མཚོ་གླིང༌ནཱའི་ཇི་རི་ཡནི་ཀ" + + "ྲ་ཝ་གནེ་དར་ལནཌས྄ནོར་ཝེབལ་ཡུལནའུ་རུ་ནི་ཨུ་ཨཻནིའུ་ཛི་ལེནཌཨོ་མཱནཔ་ན་མ" + + "པེ་རུཕྲཱནས྄་ཀྱི་པོ་ལི་ནི་ཤི་ཡཔ་པུ་ ནིའུ་གི་ནིཕི་ལི་པིནསཔ་ཀི་སཏཱནཔོ" + + "་ལེནཌསིནཊ་པི་ཡེར་ ཨེནཌ་ མིཀོ་ལེནཔིཊ་ཀེ་ཡེརན་གླིང་ཚོམཔུ་འེར་ཊོ་རི་ཁ" + + "ོཔེ་ལིསི་ཊི་ནི་ཡན་ཊེ་རི་ཐོ་རིཔོར་ཅུ་གཱལཔ་ལའུཔ་ར་གུ་ཝའིཀ་ཊརཨོཤི་ཡཱན" + + "་ན་གྱི་མཐའ་མཚམསརེ་ཡུ་ནི་ཡོནརོ་མེ་ནི་ཡསཱར་བྷི་ཡཨུ་རུ་སུརུ་ཝན་ཌསཱཝ་ད" + + "ི་ ཨ་རེ་བྷི་ཡསོ་ལོ་མོན་ གླིང་ཚོམསེ་ཤཱལསསུ་ཌཱནསུའི་ཌེནསིང་ག་པོརསེནཊ" + + "་ ཧེ་ལི་ནསུ་ལོ་བི་ནི་ཡསྭཱལ་བྷརྡ་ ཨེནཌ་ ཇཱན་མ་ཡེནསུ་ལོ་བཱ་ཀི་ཡསི་ར་" + + " ལི་འོནསཱན་མ་རི་ནོསེ་ནི་གྷལསོ་མ་ལི་ཡསུ་རི་ནཱམསཱའུཐ་ སུ་ཌཱནསཝ་ ཊོ་མེ་" + + " ཨེནཌ་ པྲྀན་སི་པེཨེལ་སལ་བ་ཌོརསིནཊ་ མཱར་ཊེནསི་རི་ཡསུ་ཝ་ཛི་ལེནཌཏྲིས་ཏན" + + "་ད་ཀུན་ཧཏུརྐས྄་ ཨེནཌ་ ཀ་ཀོས་གླིང་ཚོམཅཱཌཕྲནཅ་གི་ལྷོ་ཕྱོགས་མངའ་ཁོངསཊ" + + "ོ་གྷོཐཱའི་ལེནཌཏ་ཇིག་གི་སཏཱནཏོ་ཀེ་ལའུ་ མཚོ་གླིངཏི་་མོར་ལེ་ཨེསཊཊཱརཀ་" + + "མེནའི་སཏཱནཊུ་ནི་ཤི་ཡཊོང་གྷཊཱར་ཀིཊི་ནི་ཌཱཌ་ ཨེནཌ་ ཊོ་བྷེ་གྷོཏུ་ཝ་ལུ" + + "ཊཱའི་ཝཱནཊཱན་ཛཱ་ནི་ཡཡུ་ཀརེནཡུ་གྷན་ཌཡུ་ཨེས་གྱི་མཐའ་མཚམས་མཚོ་གླིང་ཡུ་" + + "ཨེས་ཨེཡུ་རུ་གུ་ཝའིཨུས་བེག་གི་སཏཱནབ་ཊི་ཀཱན་ སི་ཊིསེནཊ་ཝིན་སེནཌ྄ ཨེན" + + "ཌ་ གི་རེ་ན་དིནས྄བེ་ནི་ཛུ་ཝེ་ལཝརཇིན་གླིང་ཚོམ་ བྲཱི་ཊིཤ་མངའ་ཁོངསཝརཇི" + + "ན་གླིང་ཚོམ་ ཡུ་ཨེས་ཨེ་མངའ་ཁོངསབེཊ་ནཱམཝ་ནུ་ཨ་ཏུཝལ་ལིས྄་ ཨེནཌ་ ཕུ་ཏུ" + + "་ན་ས་མོ་ཨཡེ་མེནམེ་ཡོཊསཱའུཐ་ ཨཕ་རི་ཀཛམ་བྷི་ཡཛིམ་བྷབ་ཝེངོ་མ་ཤེས་པའི་" + + "ལུང་ཕྱོགསའཛམ་གླིང༌ཨཕ་རི་ཀབྱང་ཨ་མི་རི་ཀལྷོ་ཨ་མི་རི་ཀཨོཤི་ཡཱན་ནནུབ་ཕ" + + "ྱོགས་ཀྱི་ཨཕ་རི་ཀབར་ཕྱོགས་ཨ་མི་རི་ཀཤར་ཕྱོགས་ཀྱི་ཨཕ་རི་ཀབྱང་ཕྱོགས་ཀྱ" + + "ི་ཨཕ་རི་ཀསྦུག་ཕྱོགས་ཀྱི་ཨཕ་རི་ཀལྷོའི་ཨཕ་རི་ཀཨ་མི་རི་ཀ་ཚུབྱང་ཕྱོགས་" + + "ཀྱི་ཨ་མི་རི་ཀཀེ་རི་བི་ཡེནཤར་ཕྱོགས་ཀྱི་ཨེ་ཤི་ཡལྷོའི་ཨེ་ཤི་ཡལྷོ་ཤར་ཕ" + + "ྱོགས་ཀྱི་ཨེ་ཤི་ཡལྷོའི་ཡུ་རོབཨཱོས་ཊྲེལ་ཨེ་ཤི་ཡམེ་ལ་ནི་ཤི་ཡལུང་ཕྱོགས" + + "་མའི་ཀྲོ་ནི་ཤི་ཡཔོ་ལི་ནི་ཤི་ཡཨེ་ཤི་ཡསྦུག་ཕྱོགས་ཀྱི་ཨེ་ཤི་ཡནུབ་ཕྱོག" + + "ས་ཀྱི་ཨེ་ཤི་ཡཡུ་རོབཤར་ཕྱོགས་ཀྱི་ཡུ་རོབབྱང་ཕྱོགས་ཀྱི་ཡུ་རོབནུབ་ཕྱོག" + + "ས་ཀྱི་ཡུ་རོབལེ་ཊིནཨ་མི་རི་ཀ", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0039, 0x0051, 0x00a4, 0x00cb, 0x0118, 0x012d, 0x014e, + 0x016c, 0x0184, 0x01d5, 0x01f6, 0x0241, 0x025f, 0x0289, 0x029e, + 0x02c8, 0x02ef, 0x0348, 0x0366, 0x0381, 0x0396, 0x03c1, 0x03df, + 0x03f1, 0x040f, 0x0424, 0x045e, 0x0473, 0x048b, 0x04ac, 0x04f4, + 0x0506, 0x051e, 0x052d, 0x0560, 0x0578, 0x0599, 0x05ae, 0x05c0, + 0x05ed, 0x0618, 0x0668, 0x0699, 0x06c3, 0x06f7, 0x071b, 0x072a, + 0x0742, 0x0754, 0x0778, 0x07bd, 0x07db, 0x07f0, 0x0805, 0x0823, + 0x085f, 0x0877, 0x089f, 0x08b7, 0x08e7, 0x0902, 0x0917, 0x0935, + // Entry 40 - 7F + 0x0978, 0x0999, 0x09da, 0x09f5, 0x0a16, 0x0a2b, 0x0a5c, 0x0a7d, + 0x0a92, 0x0ab9, 0x0b04, 0x0b04, 0x0b1c, 0x0b2b, 0x0b5b, 0x0b88, + 0x0bb8, 0x0bc7, 0x0bdc, 0x0c13, 0x0c28, 0x0c3a, 0x0c80, 0x0c9e, + 0x0caa, 0x0cc8, 0x0ce9, 0x0d04, 0x0d16, 0x0d37, 0x0d6e, 0x0d80, + 0x0dfa, 0x0e15, 0x0e40, 0x0e6e, 0x0e80, 0x0eaa, 0x0f1b, 0x0f3c, + 0x0f54, 0x0f63, 0x0f7e, 0x0fae, 0x0fd8, 0x0ff3, 0x100e, 0x1037, + 0x1049, 0x10ac, 0x10be, 0x10d0, 0x10ee, 0x1103, 0x1115, 0x112a, + 0x113c, 0x114b, 0x115a, 0x117e, 0x119f, 0x11d8, 0x11f3, 0x122f, + // Entry 80 - BF + 0x1251, 0x1273, 0x1285, 0x12b2, 0x12d0, 0x12e2, 0x12fa, 0x131f, + 0x1346, 0x1361, 0x1385, 0x139d, 0x13c4, 0x13e2, 0x13f7, 0x140c, + 0x1424, 0x1439, 0x1454, 0x147b, 0x14a0, 0x14c1, 0x14ee, 0x1512, + 0x1521, 0x1551, 0x156f, 0x1596, 0x15f0, 0x160e, 0x1635, 0x164d, + 0x165c, 0x1677, 0x168f, 0x16a1, 0x16bc, 0x16d7, 0x16f5, 0x1710, + 0x1743, 0x1758, 0x178e, 0x17b2, 0x17cd, 0x17ee, 0x1800, 0x1812, + 0x1827, 0x183f, 0x1863, 0x1875, 0x1884, 0x1893, 0x18db, 0x1909, + 0x1927, 0x1942, 0x1957, 0x19a4, 0x19e0, 0x1a0d, 0x1a61, 0x1a7f, + // Entry C0 - FF + 0x1a8e, 0x1aac, 0x1ab8, 0x1afd, 0x1b21, 0x1b3f, 0x1b5a, 0x1b72, + 0x1b87, 0x1bbb, 0x1bf2, 0x1c07, 0x1c19, 0x1c31, 0x1c4c, 0x1c71, + 0x1c98, 0x1ce2, 0x1d09, 0x1d2b, 0x1d4c, 0x1d67, 0x1d82, 0x1d9d, + 0x1dc2, 0x1e0d, 0x1e31, 0x1e56, 0x1e6b, 0x1e8f, 0x1ebc, 0x1f0c, + 0x1f15, 0x1f63, 0x1f75, 0x1f90, 0x1fb7, 0x1fee, 0x201b, 0x2048, + 0x2066, 0x2078, 0x208a, 0x20d7, 0x20ec, 0x2104, 0x2125, 0x213a, + 0x2152, 0x21a9, 0x21a9, 0x21c4, 0x21e8, 0x2215, 0x2240, 0x22a2, + 0x22c9, 0x232a, 0x238e, 0x23a3, 0x23be, 0x23ff, 0x2411, 0x2411, + // Entry 100 - 13F + 0x2423, 0x2435, 0x245d, 0x2475, 0x2493, 0x24d5, 0x24f0, 0x2505, + 0x252c, 0x2553, 0x2571, 0x25b0, 0x25e6, 0x2622, 0x2661, 0x26a3, + 0x26ca, 0x26ee, 0x2733, 0x2757, 0x2793, 0x27ba, 0x2802, 0x2826, + 0x2859, 0x287d, 0x28c8, 0x28ef, 0x2904, 0x2946, 0x2985, 0x2997, + 0x29d0, 0x2a0c, 0x2a48, 0x2a75, + }, + }, + { // ebu + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // ee + "Ascension ƒudomekpo nutomeAndorra nutomeUnited Arab Emirates nutomeAfgha" + + "nistan nutoméAntigua kple Barbuda nutomeAnguilla nutomeAlbania nuto" + + "meArmenia nutomeAngola nutomeAntartica nutomeArgentina nutomeAmerika" + + " Samoa nutomeAustria nutomeAustralia nutomeAruba nutomeÅland ƒudomek" + + "po nutomeAzerbaijan nutomeBosnia kple Herzergovina nutomeBarbados nu" + + "tomeBangladesh nutomeBelgium nutomeBurkina Faso nutomeBulgaria nutom" + + "eBahrain nutomeBurundi nutomeBenin nutomeSaint Barthélemy nutomeBerm" + + "uda nutomeBrunei nutomeBolivia nutomeBrazil nutomeBahamas nutomeBhut" + + "an nutomeBouvet ƒudomekpo nutomeBotswana nutomeBelarus nutomeBelize " + + "nutomeCanada nutomeKokos (Kiling) fudomekpo nutomeKongo Kinshasa nut" + + "omeTitina Afrika repɔblik nutomeKongo Brazzaville nutomeSwitzerland " + + "nutomeKote d’Ivoire nutomeKook ƒudomekpo nutomeTsile nutomeKamerun n" + + "utomeTsaina nutomeKolombia nutomeKlipaton ƒudomekpo nutomeKosta Rika" + + " nutomeKuba nutomeKape Verde nutomeKristmas ƒudomekpo nutomeSaiprus " + + "nutomeTsɛk repɔblik nutomeGermania nutomeDiego Garsia nutomeDzibuti " + + "nutomeDenmark nutomeDominika nutomeDominika repɔblik nutomeAlgeria n" + + "utomeKeuta and Melilla nutomeEkuadɔ nutomeEstonia nutomeEgypte nutom" + + "eƔetoɖoƒe Sahara nutomeEritrea nutomeSpain nutomeEtiopia nutomeEurop" + + "a Wɔɖeka nutomeFinland nutomeFidzi nutomeFalkland ƒudomekpowo nutome" + + "Mikronesia nutomeFaroe ƒudomekpowo nutomeFrance nutomeGabɔn nutomeUn" + + "ited Kingdom nutomeGrenada nutomeGeorgia nutomeFrentsi Gayana nutome" + + "Guernse nutomeGhana nutomeGibraltar nutomeGrinland nutomeGambia nuto" + + "meGuini nutomeGuadelupe nutomeEkuatorial Guini nutomeGreece nutomeAn" + + "yiehe Georgia kple Anyiehe Sandwich ƒudomekpowo nutomeGuatemala nuto" + + "meGuam nutomeGini-Bisao nutomeGuyanaduHɔng Kɔng SAR Tsaina nutomeHea" + + "rd kple Mcdonald ƒudomekpowo nutomeHondurasduKroatsia nutomeHaiti nu" + + "tomeHungari nutomeKanari ƒudomekpowo nutomeIndonesia nutomeIreland n" + + "utomeIsrael nutomeAisle of Man nutomeIndia nutomeBritaintɔwo ƒe indi" + + "a ƒudome nutomeiraqdukɔIran nutomeAiseland nutomeItalia nutomeDzɛse " + + "nutomeDzamaika nutomeYordan nutomeDzapan nutomeKenya nutomeKirgizsta" + + "n nutomeKambodia nutomeKiribati nutomeKomoros nutomeSaint Kitis kple" + + " Nevis nutomeDziehe Korea nutomeAnyiehe Korea nutomeKuwait nutomeKay" + + "man ƒudomekpowo nutomeKazakstan nutomeLaos nutomeLebanɔn nutomeSaint" + + " Lusia nutomeLitsenstein nutomeSri Lanka nutomeLiberia nutomeLɛsoto " + + "nutomeLituania nutomeLazembɔg nutomeLatvia nutomeLibya nutomeMoroko " + + "nutomeMonako nutomeMoldova nutomeMontenegro nutomeSaint Martin nutom" + + "eMadagaska nutomeMarshal ƒudomekpowo nutomeMakedonia nutomeMali nuto" + + "meMyanmar (Burma) nutomeMongolia nutomeMacau SAR Tsaina nutomeDziehe" + + " Marina ƒudomekpowo nutomeMartiniki nutomeMauritania nutomeMontserra" + + "t nutomeMalta nutomemauritiusdukɔmaldivesdukɔMalawi nutomeMexico nut" + + "omeMalaysia nutomeMozambiki nutomeNamibia nutomeNew Kaledonia nutome" + + "Niger nutomeNorfolk ƒudomekpo nutomeNigeria nutomeNicaraguadukɔNethe" + + "rlands nutomeNorway nutomeNepal nutomeNauru nutomeNiue nutomeNew Zea" + + "land nutomeOman nutomePanama nutomePeru nutomeFrentsi Pɔlinesia nuto" + + "mePapua New Gini nutomeFilipini nutomePakistan nutomePoland nutomeSa" + + "int Pierre kple Mikelɔn nutomePitkairn ƒudomekpo nutomePuerto Riko n" + + "utomePalestinia nutomePortugal nutomePalau nutomeParagua nutomeKatar" + + " nutomeOutlaying Oceania nutomeRéunion nutomeRomania nutomeRussia nu" + + "tomeRwanda nutomeSaudi Arabia nutomeSolomon ƒudomekpowo nutomeSeshɛl" + + "s nutomeSudan nutomeSweden nutomeSingapɔr nutomeSaint Helena nutomeS" + + "lovenia nutomeSvalbard kple Yan Mayen nutomeSlovakia nutomeSierra Le" + + "one nutomeSan Marino nutomeSenegal nutomeSomalia nutomeSuriname nuto" + + "meSão Tomé kple Príncipe nutomeEl Salvadɔ nutomeSiria nutomeSwazilan" + + "d nutomeTristan da Kunha nutomeTɛks kple Kaikos ƒudomekpowo nutomeTs" + + "ad nutomeAnyiehe Franseme nutomeTogo nutomeThailand nutomeTajikistan" + + " nutomeTokelau nutomeTimor-Leste nutomeTɛkmenistan nutomeTunisia nut" + + "omeTonga nutomeTɛki nutomeTrinidad kple Tobago nutomeTuvalu nutomeTa" + + "iwan nutomeTanzania nutomeUkraine nutomeUganda nutomeU.S. Minor Outl" + + "aying ƒudomekpowo nutomeUSA nutomeuruguaydukɔUzbekistan nutomeVatika" + + "ndu nutomeSaint Vincent kple Grenadine nutomeVenezuela nutomeBritain" + + "tɔwo ƒe Virgin ƒudomekpowo nutomeU.S. Vɛrgin ƒudomekpowo nutomeVietn" + + "am nutomeVanuatu nutomeWallis kple Futuna nutomeSamoa nutomeYemen nu" + + "tomeMayotte nutomeAnyiehe Africa nutomeZambia nutomeZimbabwe nutomen" + + "utome manyaxexemeAfrika nutomeDziehe Amerika nutomeAnyiehe Amerika n" + + "utomeOceania nutomeƔetoɖoƒelɔƒo Afrika nutomeTitina Amerika nutomeƔe" + + "dzeƒe Afrika nutomeDziehe Afrika nutomeTitina Afrika nutomeAnyiehelɔ" + + "ƒo Afrika nutomeAmerika nutomeDziehelɔƒo Amerika nutomeKaribbea nut" + + "omeƔedzeƒe Asia nutomeAnyiehelɔƒo Asia nutomeAnyiehe Ɣedzeƒe Afrika " + + "nutomeAnyiehelɔƒo Europa nutomeAustralia kple New Zealand nutomeMela" + + "nesia nutomeMikronesiaPɔlinesia nutomeAsia nutomeTitina Asia nutomeƔ" + + "etoɖoƒelɔƒo Asia nutomeEuropa nutomeƔedzeƒe Europa nutomeDziehelɔƒo " + + "Europa nutomeƔetoɖoƒelɔƒo Europa nutomeLatin Amerika nutome", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001b, 0x0029, 0x0044, 0x0056, 0x0073, 0x0082, 0x0090, + 0x009e, 0x00ab, 0x00bb, 0x00cb, 0x00df, 0x00ed, 0x00fd, 0x0109, + 0x0121, 0x0132, 0x0151, 0x0160, 0x0171, 0x017f, 0x0192, 0x01a1, + 0x01af, 0x01bd, 0x01c9, 0x01e1, 0x01ef, 0x01fc, 0x020a, 0x020a, + 0x0217, 0x0225, 0x0232, 0x024a, 0x0259, 0x0267, 0x0274, 0x0281, + 0x02a0, 0x02b5, 0x02d3, 0x02eb, 0x02fd, 0x0313, 0x0329, 0x0335, + 0x0343, 0x0350, 0x035f, 0x0379, 0x038a, 0x0395, 0x03a6, 0x03a6, + 0x03c0, 0x03ce, 0x03e4, 0x03f3, 0x0406, 0x0414, 0x0422, 0x0431, + // Entry 40 - 7F + 0x044a, 0x0458, 0x0470, 0x047e, 0x048c, 0x0499, 0x04b2, 0x04c0, + 0x04cc, 0x04da, 0x04f0, 0x04f0, 0x04fe, 0x050a, 0x0526, 0x0537, + 0x0550, 0x055d, 0x056a, 0x057f, 0x058d, 0x059b, 0x05b0, 0x05be, + 0x05ca, 0x05da, 0x05e9, 0x05f6, 0x0602, 0x0612, 0x0629, 0x0636, + 0x066f, 0x067f, 0x068a, 0x069b, 0x06a3, 0x06c0, 0x06e7, 0x06f1, + 0x0700, 0x070c, 0x071a, 0x0734, 0x0744, 0x0752, 0x075f, 0x0772, + 0x077e, 0x07a3, 0x07ac, 0x07b7, 0x07c6, 0x07d3, 0x07e0, 0x07ef, + 0x07fc, 0x0809, 0x0815, 0x0826, 0x0835, 0x0844, 0x0852, 0x086f, + // Entry 80 - BF + 0x0882, 0x0896, 0x08a3, 0x08bd, 0x08cd, 0x08d8, 0x08e7, 0x08f9, + 0x090b, 0x091b, 0x0929, 0x0937, 0x0946, 0x0956, 0x0963, 0x096f, + 0x097c, 0x0989, 0x0997, 0x09a8, 0x09bb, 0x09cb, 0x09e6, 0x09f6, + 0x0a01, 0x0a17, 0x0a26, 0x0a3d, 0x0a5e, 0x0a6e, 0x0a7f, 0x0a90, + 0x0a9c, 0x0aaa, 0x0ab7, 0x0ac4, 0x0ad1, 0x0ae0, 0x0af0, 0x0afe, + 0x0b12, 0x0b1e, 0x0b37, 0x0b45, 0x0b53, 0x0b65, 0x0b72, 0x0b7e, + 0x0b8a, 0x0b95, 0x0ba7, 0x0bb2, 0x0bbf, 0x0bca, 0x0be3, 0x0bf8, + 0x0c07, 0x0c16, 0x0c23, 0x0c44, 0x0c5e, 0x0c70, 0x0c81, 0x0c90, + // Entry C0 - FF + 0x0c9c, 0x0caa, 0x0cb6, 0x0cce, 0x0cdd, 0x0ceb, 0x0ceb, 0x0cf8, + 0x0d05, 0x0d18, 0x0d33, 0x0d42, 0x0d4e, 0x0d5b, 0x0d6b, 0x0d7e, + 0x0d8d, 0x0dab, 0x0dba, 0x0dcd, 0x0dde, 0x0dec, 0x0dfa, 0x0e09, + 0x0e09, 0x0e29, 0x0e3b, 0x0e3b, 0x0e47, 0x0e57, 0x0e6e, 0x0e93, + 0x0e9e, 0x0eb5, 0x0ec0, 0x0ecf, 0x0ee0, 0x0eee, 0x0f00, 0x0f13, + 0x0f21, 0x0f2d, 0x0f39, 0x0f54, 0x0f61, 0x0f6e, 0x0f7d, 0x0f8b, + 0x0f98, 0x0fc0, 0x0fc0, 0x0fca, 0x0fd6, 0x0fe7, 0x0ff7, 0x101a, + 0x102a, 0x1055, 0x1075, 0x1083, 0x1091, 0x10aa, 0x10b6, 0x10b6, + // Entry 100 - 13F + 0x10c2, 0x10d0, 0x10e5, 0x10f2, 0x1101, 0x110d, 0x1113, 0x1120, + 0x1135, 0x114b, 0x1159, 0x1178, 0x118d, 0x11a4, 0x11b8, 0x11cc, + 0x11e7, 0x11f5, 0x1210, 0x121f, 0x1234, 0x124d, 0x126c, 0x1287, + 0x12a8, 0x12b8, 0x12c2, 0x12d3, 0x12de, 0x12f0, 0x130d, 0x131a, + 0x1331, 0x134b, 0x136a, 0x137e, + }, + }, + { // el + elRegionStr, + elRegionIdx, + }, + { // en + enRegionStr, + enRegionIdx, + }, + {}, // en-AU + {}, // en-IN + {}, // en-NZ + { // eo + "AndoroUnuiĝintaj Arabaj EmirlandojAfganujoAntigvo-BarbudoAngviloAlbanujo" + + "ArmenujoAngoloAntarktoArgentinoAŭstrujoAŭstralioAruboAzerbajĝanoBosn" + + "io-HercegovinoBarbadoBangladeŝoBelgujoBurkinoBulgarujoBarejnoBurundo" + + "BeninoBermudojBrunejoBolivioBraziloBahamojButanoBocvanoBelorusujoBel" + + "izoKanadoCentr-Afrika RespublikoKongoloSvisujoEbur-BordoKukinsulojĈi" + + "lioKamerunoĈinujoKolombioKostarikoKuboKabo-VerdoKiproĈeĥujoGermanujo" + + "ĜibutioDanujoDominikoDomingoAlĝerioEkvadoroEstonujoEgiptoOkcidenta " + + "SaharoEritreoHispanujoEtiopujoFinnlandoFiĝojMikronezioFeroojFrancujo" + + "GabonoUnuiĝinta ReĝlandoGrenadoKartvelujoFranca GvianoGanaoĜibraltar" + + "oGronlandoGambioGvineoGvadelupoEkvatora GvineoGrekujoSud-Georgio kaj" + + " Sud-SandviĉinsulojGvatemaloGvamoGvineo-BisaŭoGujanoHerda kaj Makdon" + + "aldaj InsulojHonduroKroatujoHaitioHungarujoIndonezioIrlandoIsraeloHi" + + "ndujoBrita Hindoceana TeritorioIrakoIranoIslandoItalujoJamajkoJordan" + + "ioJapanujoKenjoKirgizistanoKamboĝoKiribatoKomorojSent-Kristofo kaj N" + + "evisoNord-KoreoSud-KoreoKuvajtoKejmanojKazaĥstanoLaosoLibanoSent-Luc" + + "ioLiĥtenŝtejnoSri-LankoLiberioLesotoLitovujoLuksemburgoLatvujoLibioM" + + "arokoMonakoMoldavujoMadagaskaroMarŝalojMakedonujoMalioMjanmaoMongolu" + + "joNord-MarianojMartinikoMaŭritanujoMaltoMaŭricioMaldivojMalavioMeksi" + + "koMalajzioMozambikoNamibioNov-KaledonioNiĝeroNorfolkinsuloNiĝerioNik" + + "aragvoNederlandoNorvegujoNepaloNauroNiuoNov-ZelandoOmanoPanamoPeruoF" + + "ranca PolinezioPapuo-Nov-GvineoFilipinojPakistanoPollandoSent-Piero " + + "kaj MikelonoPitkarna InsuloPuerto-RikoPortugalujoBelaŭoParagvajoKata" + + "roReunioRumanujoRusujoRuandoSaŭda ArabujoSalomonojSejŝelojSudanoSved" + + "ujoSingapuroSent-HelenoSlovenujoSvalbardo kaj Jan-Majen-insuloSlovak" + + "ujoSiera-LeonoSan-MarinoSenegaloSomalujoSurinamoSao-Tomeo kaj Princi" + + "peoSalvadoroSirioSvazilandoĈadoTogoloTajlandoTaĝikujoTurkmenujoTuniz" + + "ioTongoTurkujoTrinidado kaj TobagoTuvaloTajvanoTanzanioUkrajnoUgando" + + "Usonaj malgrandaj insulojUsonoUrugvajoUzbekujoVatikanoSent-Vincento " + + "kaj la GrenadinojVenezueloBritaj VirgulininsulojUsonaj Virgulininsul" + + "ojVjetnamoVanuatuoValiso kaj FutunoSamooJemenoMajotoSud-AfrikoZambio" + + "Zimbabvo", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0023, 0x002b, 0x003a, 0x0041, 0x0049, + 0x0051, 0x0057, 0x005f, 0x0068, 0x0068, 0x0071, 0x007b, 0x0080, + 0x0080, 0x008c, 0x009e, 0x00a5, 0x00b0, 0x00b7, 0x00be, 0x00c7, + 0x00ce, 0x00d5, 0x00db, 0x00db, 0x00e3, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00ff, 0x0105, 0x0105, 0x010c, 0x0116, 0x011c, 0x0122, + 0x0122, 0x0122, 0x0139, 0x0140, 0x0147, 0x0151, 0x015b, 0x0161, + 0x0169, 0x0170, 0x0178, 0x0178, 0x0181, 0x0185, 0x018f, 0x018f, + 0x018f, 0x0194, 0x019c, 0x01a5, 0x01a5, 0x01ad, 0x01b3, 0x01bb, + // Entry 40 - 7F + 0x01c2, 0x01ca, 0x01ca, 0x01d2, 0x01da, 0x01e0, 0x01f0, 0x01f7, + 0x0200, 0x0208, 0x0208, 0x0208, 0x0211, 0x0217, 0x0217, 0x0221, + 0x0227, 0x022f, 0x0235, 0x0249, 0x0250, 0x025a, 0x0267, 0x0267, + 0x026c, 0x0277, 0x0280, 0x0286, 0x028c, 0x0295, 0x02a4, 0x02ab, + 0x02ce, 0x02d7, 0x02dc, 0x02ea, 0x02f0, 0x02f0, 0x030d, 0x0314, + 0x031c, 0x0322, 0x032b, 0x032b, 0x0334, 0x033b, 0x0342, 0x0342, + 0x0349, 0x0363, 0x0368, 0x036d, 0x0374, 0x037b, 0x037b, 0x0382, + 0x038a, 0x0392, 0x0397, 0x03a3, 0x03ab, 0x03b3, 0x03ba, 0x03d2, + // Entry 80 - BF + 0x03dc, 0x03e5, 0x03ec, 0x03f4, 0x03ff, 0x0404, 0x040a, 0x0414, + 0x0422, 0x042b, 0x0432, 0x0438, 0x0440, 0x044b, 0x0452, 0x0457, + 0x045d, 0x0463, 0x046c, 0x046c, 0x046c, 0x0477, 0x0480, 0x048a, + 0x048f, 0x0496, 0x049f, 0x049f, 0x04ac, 0x04b5, 0x04c1, 0x04c1, + 0x04c6, 0x04cf, 0x04d7, 0x04de, 0x04e5, 0x04ed, 0x04f6, 0x04fd, + 0x050a, 0x0511, 0x051e, 0x0526, 0x052f, 0x0539, 0x0542, 0x0548, + 0x054d, 0x0551, 0x055c, 0x0561, 0x0567, 0x056c, 0x057c, 0x058c, + 0x0595, 0x059e, 0x05a6, 0x05bd, 0x05cc, 0x05d7, 0x05d7, 0x05e2, + // Entry C0 - FF + 0x05e9, 0x05f2, 0x05f8, 0x05f8, 0x05fe, 0x0606, 0x0606, 0x060c, + 0x0612, 0x0620, 0x0629, 0x0632, 0x0638, 0x063f, 0x0648, 0x0653, + 0x065c, 0x067a, 0x0683, 0x068e, 0x0698, 0x06a0, 0x06a8, 0x06b0, + 0x06b0, 0x06c7, 0x06d0, 0x06d0, 0x06d5, 0x06df, 0x06df, 0x06df, + 0x06e4, 0x06e4, 0x06ea, 0x06f2, 0x06fb, 0x06fb, 0x06fb, 0x0705, + 0x070c, 0x0711, 0x0718, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x0767, 0x0767, 0x076c, 0x0774, 0x077c, 0x0784, 0x07a3, + 0x07ac, 0x07c2, 0x07d8, 0x07e0, 0x07e8, 0x07f9, 0x07fe, 0x07fe, + // Entry 100 - 13F + 0x0804, 0x080a, 0x0814, 0x081a, 0x0822, + }, + }, + { // es + esRegionStr, + esRegionIdx, + }, + { // es-419 + es419RegionStr, + es419RegionIdx, + }, + { // es-AR + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-BO + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-CL + "Bosnia y HerzegovinaSahara OccidentalTristán de AcuñaTimor-LesteIslas me" + + "nores alejadas de EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + // Entry 80 - BF + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + // Entry C0 - FF + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0037, 0x0037, + 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0063, + }, + }, + { // es-CO + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-CR + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-DO + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-EC + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-GT + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-HN + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-MX + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas Ultramarinas Menore" + + "s de Estados UnidosÁfrica OccidentalÁfrica OrientalÁfrica del NorteÁ" + + "frica CentralÁfrica del SurAsia OrientalAsia del SurSudeste Asiático" + + "Europa del SurAsia CentralAsia OccidentalEuropa OrientalEuropa del N" + + "orteEuropa Occidental", + []uint16{ // 291 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, + 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, + // Entry 100 - 13F + 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, + 0x005d, 0x005d, 0x005d, 0x006f, 0x006f, 0x007f, 0x0090, 0x009f, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00bb, 0x00c7, 0x00d8, 0x00e6, + 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00f2, 0x0101, 0x0101, + 0x0110, 0x0120, 0x0131, + }, + }, + { // es-NI + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-PA + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-PE + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-PR + "Islas menores alejadas de EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0021, + }, + }, + { // es-PY + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // es-SV + "Islas menores alejadas de EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0021, + }, + }, + { // es-US + "Islas menores alejadas de EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0021, + }, + }, + { // es-VE + "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + + " EE. UU.", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 40 - 7F + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry 80 - BF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + // Entry C0 - FF + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0052, + }, + }, + { // et + etRegionStr, + etRegionIdx, + }, + { // eu + "Ascension uharteaAndorraArabiar Emirerri BatuakAfganistanAntigua eta Bar" + + "budaAngilaAlbaniaArmeniaAngolaAntartikaArgentinaAmerikar SamoaAustri" + + "aAustraliaArubaAland uharteakAzerbaijanBosnia-HerzegovinaBarbadosBan" + + "gladeshBelgikaBurkina FasoBulgariaBahrainBurundiBeninSaint Barthélem" + + "yBermudaBruneiBoliviaKaribeko HerbehereakBrasilBahamakBhutanBouvet u" + + "harteaBotswanaBielorrusiaBelizeKanadaCocos uharteakKongoko Errepubli" + + "ka DemokratikoaAfrika Erdiko ErrepublikaKongo (Brazzaville)SuitzaBol" + + "i KostaCook uharteakTxileKamerunTxinaKolonbiaClipperton uharteaCosta" + + " RicaKubaCabo VerdeCuraçaoChristmas uharteaZipreTxekiar ErrepublikaA" + + "lemaniaDiego GarciaDjibutiDanimarkaDominikaDominikar ErrepublikaAlje" + + "riaCeuta eta MelillaEkuadorEstoniaEgiptoMendebaldeko SaharaEritreaEs" + + "painiaEtiopiaEuropar BatasunaFinlandiaFijiMalvinakMikronesiaFaroe uh" + + "arteakFrantziaGabonErresuma BatuaGrenadaGeorgiaGuyana FrantsesaGuern" + + "eseyGhanaGibraltarGroenlandiaGambiaGineaGuadalupeEkuatore GineaGrezi" + + "aHegoaldeko Georgia eta Hegoaldeko Sandwich uharteakGuatemalaGuamGin" + + "ea-BissauGuyanaHong Kong AEB TxinaHeard eta McDonald uharteakHondura" + + "sKroaziaHaitiHungariaKanariakIndonesiaIrlandaIsraelMan uharteaIndiaI" + + "ndiako Ozeanoko lurralde britainiarraIrakIranIslandiaItaliaJerseyJam" + + "aikaJordaniaJaponiaKenyaKirgizistanKanbodiaKiribatiKomoreakSaint Kit" + + "ts eta NevisIpar KoreaHego KoreaKuwaitKaiman uharteakKazakhstanLaosL" + + "ibanoSanta LuziaLiechtensteinSri LankaLiberiaLesothoLituaniaLuxenbur" + + "goLetoniaLibiaMarokoMonakoMoldaviaMontenegroSan MartinMadagaskarMars" + + "hall uharteakMazedoniaMaliMyanmar (Birmania)MongoliaMacau AEB TxinaI" + + "parraldeko Mariana uharteakMartinikaMauritaniaMontserratMaltaMaurizi" + + "oMaldivakMalawiMexikoMalaysiaMozambikeNamibiaKaledonia BerriaNigerNo" + + "rfolk uharteaNigeriaNikaraguaHerbehereakNorvegiaNepalNauruNiueZeelan" + + "da BerriaOmanPanamaPeruPolinesia FrantsesaPapua Ginea BerriaFilipina" + + "kPakistanPoloniaSaint-Pierre eta MikelunePitcairn uharteakPuerto Ric" + + "oPalestinako LurraldeakPortugalPalauParaguaiQatarMugaz kanpoko Ozean" + + "iaReunionErrumaniaSerbiaErrusiaRuandaSaudi ArabiaSalomon uharteakSey" + + "chelleakSudanSuediaSingapurSanta HelenaEsloveniaSvalbard eta Jan May" + + "en uharteakEslovakiaSierra LeonaSan MarinoSenegalSomaliaSurinamHego " + + "SudanSao Tome eta PrincipeEl SalvadorSint MaartenSiriaSwazilandiaTri" + + "stan da CunhaTurk eta Caico uharteakTxadHegoaldeko lurralde frantses" + + "akTogoThailandiaTajikistanTokelauEkialdeko TimorTurkmenistanTunisiaT" + + "ongaTurkiaTrinidad eta TobagoTuvaluTaiwanTanzaniaUkrainaUgandaAmerik" + + "etako Estatu Batuetako Kanpoaldeko Uharte TxikiakAmeriketako Estatu " + + "BatuakUruguaiUzbekistanVatikano HiriaSaint Vincent eta GrenadinakVen" + + "ezuelaBirjina uharte britainiarrakBirjina uharte amerikarrakVietnamV" + + "anuatuWallis eta FutunaSamoaKosovoYemenMayotteHegoafrikaZambiaZimbab" + + "weEskualde ezezagunaMunduaAfrikaIpar AmerikaHego AmerikaOzeaniaAfrik" + + "a mendebaldeaErdialdeko AmerikaAfrika ekialdeaAfrika iparraldeaErdia" + + "ldeko AfrikaAfrika hegoaldeaAmerikaAmerika iparraldeaKaribeaAsia eki" + + "aldeaAsia hegoaldeaAsia hego-ekialdeaEuropa hegoaldeaAustralasiaMela" + + "nesiaMikronesia eskualdeaPolinesiaAsiaAsia erdialdeaAsia mendebaldea" + + "EuropaEuropa ekialdeaEuropa iparraldeaEuropa mendebaldeaLatinoamerik" + + "a", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0011, 0x0018, 0x002f, 0x0039, 0x004c, 0x0052, 0x0059, + 0x0060, 0x0066, 0x006f, 0x0078, 0x0086, 0x008d, 0x0096, 0x009b, + 0x00a9, 0x00b3, 0x00c5, 0x00cd, 0x00d7, 0x00de, 0x00ea, 0x00f2, + 0x00f9, 0x0100, 0x0105, 0x0116, 0x011d, 0x0123, 0x012a, 0x013e, + 0x0144, 0x014b, 0x0151, 0x015f, 0x0167, 0x0172, 0x0178, 0x017e, + 0x018c, 0x01ac, 0x01c5, 0x01d8, 0x01de, 0x01e8, 0x01f5, 0x01fa, + 0x0201, 0x0206, 0x020e, 0x0220, 0x022a, 0x022e, 0x0238, 0x0240, + 0x0251, 0x0256, 0x0269, 0x0271, 0x027d, 0x0284, 0x028d, 0x0295, + // Entry 40 - 7F + 0x02aa, 0x02b1, 0x02c2, 0x02c9, 0x02d0, 0x02d6, 0x02e9, 0x02f0, + 0x02f8, 0x02ff, 0x030f, 0x030f, 0x0318, 0x031c, 0x0324, 0x032e, + 0x033c, 0x0344, 0x0349, 0x0357, 0x035e, 0x0365, 0x0375, 0x037e, + 0x0383, 0x038c, 0x0397, 0x039d, 0x03a2, 0x03ab, 0x03b9, 0x03bf, + 0x03f2, 0x03fb, 0x03ff, 0x040b, 0x0411, 0x0424, 0x043f, 0x0447, + 0x044e, 0x0453, 0x045b, 0x0463, 0x046c, 0x0473, 0x0479, 0x0484, + 0x0489, 0x04af, 0x04b3, 0x04b7, 0x04bf, 0x04c5, 0x04cb, 0x04d2, + 0x04da, 0x04e1, 0x04e6, 0x04f1, 0x04f9, 0x0501, 0x0509, 0x051e, + // Entry 80 - BF + 0x0528, 0x0532, 0x0538, 0x0547, 0x0551, 0x0555, 0x055b, 0x0566, + 0x0573, 0x057c, 0x0583, 0x058a, 0x0592, 0x059c, 0x05a3, 0x05a8, + 0x05ae, 0x05b4, 0x05bc, 0x05c6, 0x05d0, 0x05da, 0x05eb, 0x05f4, + 0x05f8, 0x060a, 0x0612, 0x0621, 0x063d, 0x0646, 0x0650, 0x065a, + 0x065f, 0x0667, 0x066f, 0x0675, 0x067b, 0x0683, 0x068c, 0x0693, + 0x06a3, 0x06a8, 0x06b7, 0x06be, 0x06c7, 0x06d2, 0x06da, 0x06df, + 0x06e4, 0x06e8, 0x06f7, 0x06fb, 0x0701, 0x0705, 0x0718, 0x072a, + 0x0733, 0x073b, 0x0742, 0x075b, 0x076c, 0x0777, 0x078d, 0x0795, + // Entry C0 - FF + 0x079a, 0x07a2, 0x07a7, 0x07bc, 0x07c3, 0x07cc, 0x07d2, 0x07d9, + 0x07df, 0x07eb, 0x07fb, 0x0806, 0x080b, 0x0811, 0x0819, 0x0825, + 0x082e, 0x084d, 0x0856, 0x0862, 0x086c, 0x0873, 0x087a, 0x0881, + 0x088b, 0x08a0, 0x08ab, 0x08b7, 0x08bc, 0x08c7, 0x08d7, 0x08ee, + 0x08f2, 0x0910, 0x0914, 0x091e, 0x0928, 0x092f, 0x093e, 0x094a, + 0x0951, 0x0956, 0x095c, 0x096f, 0x0975, 0x097b, 0x0983, 0x098a, + 0x0990, 0x09c7, 0x09c7, 0x09e0, 0x09e7, 0x09f1, 0x09ff, 0x0a1b, + 0x0a24, 0x0a40, 0x0a5a, 0x0a61, 0x0a68, 0x0a79, 0x0a7e, 0x0a84, + // Entry 100 - 13F + 0x0a89, 0x0a90, 0x0a9a, 0x0aa0, 0x0aa8, 0x0aba, 0x0ac0, 0x0ac6, + 0x0ad2, 0x0ade, 0x0ae5, 0x0af7, 0x0b09, 0x0b18, 0x0b29, 0x0b3a, + 0x0b4a, 0x0b51, 0x0b63, 0x0b6a, 0x0b77, 0x0b85, 0x0b97, 0x0ba7, + 0x0bb2, 0x0bbb, 0x0bcf, 0x0bd8, 0x0bdc, 0x0bea, 0x0bfa, 0x0c00, + 0x0c0f, 0x0c20, 0x0c32, 0x0c3f, + }, + }, + { // ewo + "AndórBemirá yá Arábə uníAfəganisətánAntígwa ai BarəbúdaAngíyəAləbániaArə" + + "méniaAngoláArəhenətínaBəsamóa yá Amə́rəkaOsətəlíaOsətəlalíArúbaAzɛrə" + + "baidzáŋBosəní ai ɛrəzegovínBarəbádBangaladɛ́sBɛləhígBuləkiná FasóBul" + + "əgaríBahərɛ́nBurundíBəníŋBɛrəmúdBulunéBolíviaBəlazílBahámasButáŋBot" + + "swanáBəlarúsBəlískanadáǹnam Kongó Demokəlatígǹnam Zǎŋ AfirikáKongóSu" + + "ísKód Divɔ́rMinlán Mí kúgTsilíKamərúnTsáinaKolɔmbíKosta RíkaKubáMin" + + "lán Mí Káb VɛrSipəlúsǸnam Tsɛ́gNdzámanDzibutíDanəmárəgDómənikaRépubl" + + "ique dominicaineAləyériaEkwatórEsetoníEhíbətɛnElitəléKpənyáEtiopíFin" + + "əlánFidzíMinlán Mi FóləkəlanMikoronésiaFulɛnsíGabóŋǸnam EngəlisGələ" + + "nádəHorə́yiaGuyán yá FulɛnsíGanáYiləbalatárGoelánGambíGinéGuadəlúbGi" + + "né EkwatóGəlɛ́sGuatemaláGuámGiné BisaóGuyánOndurásKəlowásiaAitíOngir" + + "íɛndonésiaIrəlándəIsəraɛ́lɛ́ndəǹnam ɛngəlís yá Máŋ mə́ ɛ́ndəIrágIrá" + + "nIsəlándəItáliɛnHamaíkaHorədaníHapɔ́nKeniáKirigisətánkambodíaKiribat" + + "íKomɔ́rǸfúfúb-Kilisətóv-ai-NevisKoré yá NórKoré yá SúdKowɛ́dMinlán " + + "Mí KalimáŋKazakətáŋLaósLibáŋǸfúfúb-LúsiaLísə́sə́táinSəri LaŋkáLibéri" + + "aLəsotóLituaníLukəzambúdLətoníLibíMarɔ́gMɔnakóMolədavíMadagasəkárəMi" + + "nlán Mí MaresálMasedóniaMalíMianəmárMɔngɔ́liaMinlán Mi Marián yá Nór" + + "MarətinígMoritaníMɔ́ntserádMálətəMorísMalədívəMalawíMɛkəsígMalɛ́ziaM" + + "ozambígNamibíǸkpámɛn KaledóniaNihɛ́rMinlán Nɔrəfɔ́ləkəNihériaNikarág" + + "uaPɛíbáNɔrəvɛ́sNepálNaurúNiuéǸkpámɛn ZeláŋOmánPanamáPerúPolinesí yá " + + "FulɛnsíPapwazi yá Ǹkpámɛ́n GinéFilipínPakisətánfólisǸfúfúb-Píɛr-ai-M" + + "ikəlɔ́ŋPítə́kɛ́rɛnəPwɛrəto RíkoǸnam Palɛsətínfɔrətugɛ́sPalauParaguéK" + + "atárReuniɔ́ŋRumaníRúsianRuwandáArabí SaudíMinlán Mí Solomɔ́nSɛsɛ́lSu" + + "dáŋSuwɛ́dSingapúrǸfúfúb-Ɛlɛ́naSəlovéniaSəlovakíSierá-leónəǸfúfúb Mar" + + "ínoSenegálSomáliaSurinámSaó Tomé ai PəlinəsípeSaləvadórSiríSwazilán" + + "dəMinlán Mí túrə́g-ai-KaígTsádTogóTailánTadzikisətáŋTokelóTimôrTurək" + + "əmənisətáŋTunisíTɔngáTurəkíTəlinité-ai-TobágoTuvalúTaiwánTaŋəzaníUk" + + "ərɛ́nUgandáǸnam AmɛrəkəUruguéUzubekisətánǸnam VatikánǸfúfúb-Vɛngəsá" + + "ŋ-ai-Bə GələnadínVenezuélańnam Minlán ɛ́ngəlísMinlán Mi AmɛrəkəViɛd" + + "ənámVanuátuWalís-ai-FutúnaSamoáYemɛ́nMayɔ́dAfiríka yá SúdZambíZimba" + + "bwé", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x001e, 0x002d, 0x0043, 0x004b, 0x0055, + 0x005f, 0x0066, 0x0066, 0x0074, 0x008d, 0x0098, 0x00a4, 0x00aa, + 0x00aa, 0x00ba, 0x00d3, 0x00dc, 0x00e9, 0x00f3, 0x0103, 0x010d, + 0x0118, 0x0120, 0x0128, 0x0128, 0x0132, 0x0139, 0x0141, 0x0141, + 0x014a, 0x0152, 0x0159, 0x0159, 0x0162, 0x016b, 0x0172, 0x0179, + 0x0179, 0x0193, 0x01a7, 0x01ad, 0x01b2, 0x01bf, 0x01cf, 0x01d5, + 0x01de, 0x01e5, 0x01ee, 0x01ee, 0x01f9, 0x01fe, 0x0213, 0x0213, + 0x0213, 0x021c, 0x0229, 0x0231, 0x0231, 0x0239, 0x0245, 0x024f, + // Entry 40 - 7F + 0x0266, 0x0270, 0x0270, 0x0278, 0x0280, 0x028b, 0x028b, 0x0294, + 0x029c, 0x02a3, 0x02a3, 0x02a3, 0x02ac, 0x02b2, 0x02c9, 0x02d5, + 0x02d5, 0x02de, 0x02e5, 0x02f3, 0x02ff, 0x0309, 0x031d, 0x031d, + 0x0322, 0x032f, 0x0336, 0x033c, 0x0341, 0x034b, 0x0358, 0x0361, + 0x0361, 0x036b, 0x0370, 0x037c, 0x0382, 0x0382, 0x0382, 0x038a, + 0x0395, 0x039a, 0x03a1, 0x03a1, 0x03ac, 0x03b7, 0x03c2, 0x03c2, + 0x03ca, 0x03f3, 0x03f8, 0x03fd, 0x0408, 0x0411, 0x0411, 0x0419, + 0x0423, 0x042b, 0x0431, 0x043e, 0x0447, 0x0450, 0x0458, 0x0476, + // Entry 80 - BF + 0x0484, 0x0492, 0x049a, 0x04af, 0x04bb, 0x04c0, 0x04c7, 0x04d7, + 0x04e9, 0x04f6, 0x04fe, 0x0506, 0x050e, 0x051a, 0x0522, 0x0527, + 0x052f, 0x0537, 0x0541, 0x0541, 0x0541, 0x0550, 0x0564, 0x056e, + 0x0573, 0x057d, 0x0589, 0x0589, 0x05a4, 0x05af, 0x05b8, 0x05c5, + 0x05ce, 0x05d4, 0x05df, 0x05e6, 0x05f0, 0x05fa, 0x0603, 0x060a, + 0x061f, 0x0627, 0x0640, 0x0648, 0x0652, 0x065a, 0x0666, 0x066c, + 0x0672, 0x0677, 0x0689, 0x068e, 0x0695, 0x069a, 0x06b1, 0x06cf, + 0x06d7, 0x06e2, 0x06e8, 0x0708, 0x071b, 0x072a, 0x073c, 0x074a, + // Entry C0 - FF + 0x074f, 0x0757, 0x075d, 0x075d, 0x0768, 0x076f, 0x076f, 0x0776, + 0x077e, 0x078b, 0x07a1, 0x07aa, 0x07b1, 0x07b9, 0x07c2, 0x07d5, + 0x07e0, 0x07e0, 0x07ea, 0x07f8, 0x0809, 0x0811, 0x0819, 0x0821, + 0x0821, 0x083c, 0x0847, 0x0847, 0x084c, 0x0858, 0x0858, 0x0876, + 0x087b, 0x087b, 0x0880, 0x0887, 0x0896, 0x089d, 0x08a3, 0x08b8, + 0x08bf, 0x08c6, 0x08ce, 0x08e3, 0x08ea, 0x08f1, 0x08fc, 0x0906, + 0x090d, 0x090d, 0x090d, 0x091d, 0x0924, 0x0932, 0x0940, 0x096a, + 0x0974, 0x098e, 0x09a3, 0x09ae, 0x09b6, 0x09c7, 0x09cd, 0x09cd, + // Entry 100 - 13F + 0x09d5, 0x09dd, 0x09ee, 0x09f4, 0x09fd, + }, + }, + { // fa + faRegionStr, + faRegionIdx, + }, + { // fa-AF + "اندوراانتیگوا و باربوداالبانیاانگولاانترکتیکاارجنتاینآسترالیابوسنیا و هر" + + "زه\u200cگوینابنگله\u200cدیشبلجیمبلغاریابرونیبولیویابرازیلبهاماسروسی" + + "هٔ سفیدکانگو - کینشاساکانگو - برازویلسویسچلیکولمبیاکاستریکاکیوبادنم" + + "ارکاستونیااریتریاهسپانیهایتوپیافنلندمیکرونزیاگریناداگاناگینیاگینیا " + + "استواییگواتیمالاگینیا بیسائوگیاناهاندوراسکروشیاهایتیاندونیزیاآیرلند" + + "آیسلندجاپانکینیاقرغزستانکمپوچیاکوریای شمالیکوریای جنوبیسریلانکالیسو" + + "تولتوانیالاتویالیبیامادغاسکرمنگولیاموریتانیامالتامکسیکومالیزیاموزمب" + + "یقنایجرنیجریانیکاراگواهالندناروینیپالزیلاند جدیدپانامهپیروپاپوا نیو" + + " گینیاپولندپرتگالپاراگوایرومانیاروآنداسویدنسینگاپورسلونیاسلواکیاسیرا" + + "لیونسینیگالسومالیهالسلوادورتاجکستاناکراینیوگاندایوروگوایسنت وینسنت " + + "و گرنادین\u200cهاونزویلاکوسوازیمبابوی", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, 0x002c, 0x002c, 0x003a, + 0x003a, 0x0046, 0x0058, 0x0068, 0x0068, 0x0068, 0x0078, 0x0078, + 0x0078, 0x0078, 0x009d, 0x009d, 0x00b0, 0x00ba, 0x00ba, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00d2, 0x00e0, 0x00e0, + 0x00ec, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x010d, 0x010d, 0x010d, + 0x010d, 0x0128, 0x0128, 0x0143, 0x014b, 0x014b, 0x014b, 0x0151, + 0x0151, 0x0151, 0x015f, 0x015f, 0x016f, 0x0179, 0x0179, 0x0179, + 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0185, 0x0185, + // Entry 40 - 7F + 0x0185, 0x0185, 0x0185, 0x0185, 0x0193, 0x0193, 0x0193, 0x01a1, + 0x01af, 0x01bd, 0x01bd, 0x01bd, 0x01c7, 0x01c7, 0x01c7, 0x01d9, + 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01e7, 0x01e7, 0x01e7, 0x01e7, + 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01f9, 0x01f9, 0x0212, 0x0212, + 0x0212, 0x0224, 0x0224, 0x023b, 0x0245, 0x0245, 0x0245, 0x0255, + 0x0261, 0x026b, 0x026b, 0x026b, 0x027d, 0x0289, 0x0289, 0x0289, + 0x0289, 0x0289, 0x0289, 0x0289, 0x0295, 0x0295, 0x0295, 0x0295, + 0x0295, 0x029f, 0x02a9, 0x02b9, 0x02c7, 0x02c7, 0x02c7, 0x02c7, + // Entry 80 - BF + 0x02de, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, + 0x02f5, 0x0305, 0x0305, 0x0311, 0x031f, 0x031f, 0x032b, 0x0335, + 0x0335, 0x0335, 0x0335, 0x0335, 0x0335, 0x0345, 0x0345, 0x0345, + 0x0345, 0x0345, 0x0353, 0x0353, 0x0353, 0x0353, 0x0365, 0x0365, + 0x036f, 0x036f, 0x036f, 0x036f, 0x037b, 0x0389, 0x0397, 0x0397, + 0x0397, 0x03a1, 0x03a1, 0x03ad, 0x03bf, 0x03c9, 0x03d3, 0x03dd, + 0x03dd, 0x03dd, 0x03f2, 0x03f2, 0x03fe, 0x0406, 0x0406, 0x0422, + 0x0422, 0x0422, 0x042c, 0x042c, 0x042c, 0x042c, 0x042c, 0x0438, + // Entry C0 - FF + 0x0438, 0x0448, 0x0448, 0x0448, 0x0448, 0x0456, 0x0456, 0x0456, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x046c, 0x047c, 0x047c, + 0x0488, 0x0488, 0x0496, 0x04a6, 0x04a6, 0x04b4, 0x04c2, 0x04c2, + 0x04c2, 0x04c2, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, + 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04e4, 0x04e4, 0x04e4, 0x04e4, + 0x04e4, 0x04e4, 0x04e4, 0x04e4, 0x04e4, 0x04e4, 0x04e4, 0x04f0, + 0x04fe, 0x04fe, 0x04fe, 0x04fe, 0x050e, 0x050e, 0x050e, 0x053a, + 0x0548, 0x0548, 0x0548, 0x0548, 0x0548, 0x0548, 0x0548, 0x0552, + // Entry 100 - 13F + 0x0552, 0x0552, 0x0552, 0x0552, 0x0562, + }, + }, + { // ff + "AnndooraEmiraat Araab DenntuɗeAfganistaanAntiguwaa e BarbudaaAnngiyaaAlb" + + "aniiArmeniiAnngolaaArjantiinSamowa AmerikOtiriisOstaraaliiAruubaAjer" + + "bayjaanBosnii HersegowiinBarbadoosBanglaadeesBeljikBurkibaa FaasoBul" + + "gariiBahreynBurunndiBeneeBermudaaBurnaayBoliwiiBeresiilBahamaasButaa" + + "nBotswaanaBelaruusBeliiseKanadaaNdenndaandi Demokaraasiire KonngoNde" + + "nndaandi SantarafrikKonngoSuwiisKodduwaarDuuɗe KuukCiliiKameruunSiin" + + "KolombiyaKosta RikaaKubaaDuuɗe Kap WeerSiiparNdenndaandi CekAlmaañJi" + + "butiiDanmarkDominikaNdenndanndi DominikaAlaseriEkuwatoorEstoniEjiptE" + + "ritereeEspaañEcoppiFenlandFijjiDuuɗe FalklandMikoronesiiFarayseGaboo" + + "Laamateeri RentundiGarnaadJeorgiiGiyaan FarayseGanaaJibraltaarGorwen" + + "dlandGammbiGineGwaadalupGinee EkuwaatoriyaalGereesGwaatemalaaGuwamGi" + + "ne-BisaawoGiyaanOnnduraasKorwasiiHaytiiOnngiriEnndonesiiIrlanndaIsra" + + "a’iilaEnndoKeeriindi britaani to maayo enndoIraakIraanIslanndaItaliJ" + + "amaykaJordaniSapooKeñaaKirgistaanKambodsoKiribariKomoorSent Kits e N" + + "ewisKoree RewoKoree WorgoKuweytiDuuɗe KaymaaKasakstaanLawoosLibaaSen" + + "t LusiyaaLincenstaynSiri LankaLiberiyaaLesotoLituaaniiLiksembuurLeto" + + "niiLibiMarukMonaakooMoldawiiMadagaskaarDuuɗe MarsaalMeceduwaanMaaliM" + + "iyamaarMonngoliiDuuɗe Mariyaana RewoMartinikMuritaniMonseraatMalteMo" + + "riisMaldiiweMalaawiMeksikMalesiiMosammbikNamibiiNuwel KaledoniiNijee" + + "rDuuɗe NorfolkNijeriyaaNikaraguwaaNederlanndaNorweesNepaalNawuruNiuw" + + "eNuwel SelanndaOmaanPanamaaPeruPolinesii FaraysePapuwaa Nuwel GineFi" + + "lipiinPakistaanPoloñSee Piyeer e MikelooPitkernPorto RikooPalestiin " + + "Sisjordani e GaasaaPurtugaalPalawuParaguwaayKataarRewiñooRumaniiRiis" + + "iiRuwanndaaArabii SawditDuuɗe SolomonSeyselSudaanSuweedSinngapuurSen" + + "t HelenSloweniiSlowakiiSeraa liyonSee MareeSenegaalSomaliiSurinaamSa" + + "wo Tome e PerensipeEl SalwadorSiriiSwaasilanndaDuuɗe Turke e Keikoos" + + "CaadTogooTaylanndaTajikistaanTokelaawTimoor FuɗnaangeTurkmenistaanTu" + + "nisiiTonngaaTurkiiTirnidaad e TobaagoTuwaluuTaywaanTansaniiUkereenUn" + + "ganndaaDowlaaji Dentuɗi AmerikUruguwaayUsbekistaanDowla WaticaanSee " + + "Weesaa e GarnadiinWenesuwelaaduuɗe kecce britaniiDuuɗe Kecce AmerikW" + + "iyetnaamWanuwaatuuWalis e FutunaSamowaaYemenMayootAfrik bŋ WorgoSamm" + + "biSimbaabuwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x001f, 0x002a, 0x003e, 0x0046, 0x004d, + 0x0054, 0x005c, 0x005c, 0x0065, 0x0072, 0x0079, 0x0083, 0x0089, + 0x0089, 0x0094, 0x00a6, 0x00af, 0x00ba, 0x00c0, 0x00ce, 0x00d6, + 0x00dd, 0x00e5, 0x00ea, 0x00ea, 0x00f2, 0x00f9, 0x0100, 0x0100, + 0x0108, 0x0110, 0x0116, 0x0116, 0x011f, 0x0127, 0x012e, 0x0135, + 0x0135, 0x0156, 0x016d, 0x0173, 0x0179, 0x0182, 0x018d, 0x0192, + 0x019a, 0x019e, 0x01a7, 0x01a7, 0x01b2, 0x01b7, 0x01c6, 0x01c6, + 0x01c6, 0x01cc, 0x01db, 0x01e2, 0x01e2, 0x01e9, 0x01f0, 0x01f8, + // Entry 40 - 7F + 0x020c, 0x0213, 0x0213, 0x021c, 0x0222, 0x0227, 0x0227, 0x022f, + 0x0236, 0x023c, 0x023c, 0x023c, 0x0243, 0x0248, 0x0257, 0x0262, + 0x0262, 0x0269, 0x026e, 0x0281, 0x0288, 0x028f, 0x029d, 0x029d, + 0x02a2, 0x02ac, 0x02b7, 0x02bd, 0x02c1, 0x02ca, 0x02de, 0x02e4, + 0x02e4, 0x02ef, 0x02f4, 0x0300, 0x0306, 0x0306, 0x0306, 0x030f, + 0x0317, 0x031d, 0x0324, 0x0324, 0x032e, 0x0336, 0x0342, 0x0342, + 0x0347, 0x0368, 0x036d, 0x0372, 0x037a, 0x037f, 0x037f, 0x0386, + 0x038d, 0x0392, 0x0398, 0x03a2, 0x03aa, 0x03b2, 0x03b8, 0x03c9, + // Entry 80 - BF + 0x03d3, 0x03de, 0x03e5, 0x03f2, 0x03fc, 0x0402, 0x0407, 0x0413, + 0x041e, 0x0428, 0x0431, 0x0437, 0x0440, 0x044a, 0x0451, 0x0455, + 0x045a, 0x0462, 0x046a, 0x046a, 0x046a, 0x0475, 0x0483, 0x048d, + 0x0492, 0x049a, 0x04a3, 0x04a3, 0x04b8, 0x04c0, 0x04c8, 0x04d1, + 0x04d6, 0x04dc, 0x04e4, 0x04eb, 0x04f1, 0x04f8, 0x0501, 0x0508, + 0x0517, 0x051d, 0x052b, 0x0534, 0x053f, 0x054a, 0x0551, 0x0557, + 0x055d, 0x0562, 0x0570, 0x0575, 0x057c, 0x0580, 0x0591, 0x05a3, + 0x05ab, 0x05b4, 0x05ba, 0x05ce, 0x05d5, 0x05e0, 0x05fd, 0x0606, + // Entry C0 - FF + 0x060c, 0x0616, 0x061c, 0x061c, 0x0624, 0x062b, 0x062b, 0x0631, + 0x063a, 0x0647, 0x0655, 0x065b, 0x0661, 0x0667, 0x0671, 0x067b, + 0x0683, 0x0683, 0x068b, 0x0696, 0x069f, 0x06a7, 0x06ae, 0x06b6, + 0x06b6, 0x06cb, 0x06d6, 0x06d6, 0x06db, 0x06e7, 0x06e7, 0x06fd, + 0x0701, 0x0701, 0x0706, 0x070f, 0x071a, 0x0722, 0x0733, 0x0740, + 0x0747, 0x074e, 0x0754, 0x0767, 0x076e, 0x0775, 0x077d, 0x0784, + 0x078d, 0x078d, 0x078d, 0x07a5, 0x07ae, 0x07b9, 0x07c7, 0x07dd, + 0x07e8, 0x07fd, 0x0810, 0x0819, 0x0823, 0x0831, 0x0838, 0x0838, + // Entry 100 - 13F + 0x083d, 0x0843, 0x0852, 0x0858, 0x0862, + }, + }, + { // fi + fiRegionStr, + fiRegionIdx, + }, + { // fil + filRegionStr, + filRegionIdx, + }, + { // fo + "AscensionAndorraSameindu EmirríkiniAfganistanAntigua & BarbudaAnguillaAl" + + "baniaArmeniaAngolaAntarktisArgentinaAmerikanska SamoaEysturríkiAvstr" + + "aliaArubaÁlandAserbadjanBosnia-HersegovinaBarbadosBangladesjBelgiaBu" + + "rkina FasoBulgariaBareinBurundiBeninSt-BarthélemyBermudaBruneiBolivi" + + "aNiðurlonds KaribiaBrasilBahamaoyggjarButanBouvetoyggjBotsvanaHvítar" + + "usslandBelisKanadaKokosoyggjarKongo, Dem. LýðveldiðMiðafrikalýðveldi" + + "ðKongoSveisFílabeinsstrondinCooksoyggjarKiliKamerunKinaKolombiaClip" + + "pertonKosta RikaKubaGrønhøvdaoyggjarCuraçaoJólaoyggjinKýprosKekkiaTý" + + "sklandDiego GarciaDjibutiDanmarkDominikaDominikalýðveldiðAlgeriaCeut" + + "a og MelillaEkvadorEstlandEgyptalandVestursaharaEritreaSpaniaEtiopia" + + "EvropasamveldiðFinnlandFijiFalklandsoyggjarMikronesiasamveldiðFøroya" + + "rFraklandGabonStórabretlandGrenadaGeorgiaFranska GujanaGuernseyGanaG" + + "ibraltarGrønlandGambiaGuineaGuadeloupeEkvatorguineaGrikkalandSuðurge" + + "orgia og SuðursandwichoyggjarGuatemalaGuamGuinea-BissauGujanaHong Ko" + + "ng SAR KinaHeard og McDonaldoyggjarHondurasKroatiaHaitiUngarnKanariu" + + "oyggjarIndonesiaÍrlandÍsraelIsle of ManIndiaStóra Bretlands Indiahav" + + "oyggjarIrakIranÍslandItaliaJerseyJamaikaJordanJapanKenjaKirgisiaKamb" + + "odjaKiribatiKomoroyggjarSt. Kitts & NevisNorðurkoreaSuðurkoreaKuvait" + + "CaymanoyggjarKasakstanLaosLibanonSt. LusiaLiktinsteinSri LankaLiberi" + + "aLesotoLitavaLuksemborgLettlandLibyaMarokkoMonakoMoldovaMontenegroSt" + + "-MartinMadagaskarMarshalloyggjarMakedóniaMaliMyanmar (Burma)Mongolia" + + "Makao SAR KinaNorðaru MariuoyggjarMartiniqueMóritaniaMontserratMalta" + + "MóritiusMaldivoyggjarMalaviMeksikoMalaisiaMosambikNamibiaNýkaledónia" + + "NigerNorfolksoyggjNigeriaNikaraguaNiðurlondNoregNepalNauruNiueNýsæla" + + "ndOmanPanamaPeruFranska PolynesiaPapua NýguineaFilipsoyggjarPakistan" + + "PóllandSaint Pierre og MiquelonPitcairnoyggjarPuerto RikoPalestinskt" + + " landøkiPortugalPalauParaguaiKatarfjarskoti OsianiaRéunionRumeniaSer" + + "biaRusslandRuandaSaudiarabiaSalomonoyggjarSeyskelloyggjarSudanSvørík" + + "iSingaporSt. HelenaSloveniaSvalbard & Jan MayenSlovakiaSierra LeonaS" + + "an MarinoSenegalSomaliaSurinamSuðursudanSao Tome & PrinsipiEl Salvad" + + "orSint MaartenSýriaSvasilandTristan da CunhaTurks- og CaicosoyggjarK" + + "jadFronsku sunnaru landaøkiTogoTailandTadsjikistanTokelauEysturtimor" + + "TurkmenistanTunesiaTongaTurkalandTrinidad & TobagoTuvaluTaivanTansan" + + "iaUkrainaUgandaSambandsríki Amerikas fjarskotnu oyggjarSambandsríki " + + "AmerikaUruguaiUsbekistanVatikanbýurSt. Vinsent & GrenadinoyggjarVene" + + "suelaStóra Bretlands JomfrúoyggjarSambandsríki Amerikas Jomfrúoyggja" + + "rVjetnamVanuatuWallis- og FutunaoyggjarSamoaKosovoJemenMayotteSuðura" + + "frikaSambiaSimbabviókent økiheimurAfrikaNorðuramerikaSuðuramerikaOsi" + + "aniaVesturafrikaMiðamerikaEysturafrikaNorðurafrikaMiðafrikasunnari p" + + "artur av AfrikaAmerikaAmerika norðanfyri MeksikoKaribiaEysturasiaSuð" + + "urasiaÚtsynningsasiaSuðurevropaAvstralasiaMelanesiaMikronesi økiPoly" + + "nesiaAsiaMiðasiaVesturasiaEvropaEysturevropaNorðurevropaVesturevropa" + + "Latínamerika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x0024, 0x002e, 0x003f, 0x0047, 0x004e, + 0x0055, 0x005b, 0x0064, 0x006d, 0x007e, 0x0089, 0x0092, 0x0097, + 0x009d, 0x00a7, 0x00b9, 0x00c1, 0x00cb, 0x00d1, 0x00dd, 0x00e5, + 0x00eb, 0x00f2, 0x00f7, 0x0105, 0x010c, 0x0112, 0x0119, 0x012c, + 0x0132, 0x013f, 0x0144, 0x014f, 0x0157, 0x0165, 0x016a, 0x0170, + 0x017c, 0x0194, 0x01aa, 0x01af, 0x01b4, 0x01c6, 0x01d2, 0x01d6, + 0x01dd, 0x01e1, 0x01e9, 0x01f3, 0x01fd, 0x0201, 0x0213, 0x021b, + 0x0227, 0x022e, 0x0234, 0x023d, 0x0249, 0x0250, 0x0257, 0x025f, + // Entry 40 - 7F + 0x0273, 0x027a, 0x028a, 0x0291, 0x0298, 0x02a2, 0x02ae, 0x02b5, + 0x02bb, 0x02c2, 0x02d2, 0x02d2, 0x02da, 0x02de, 0x02ee, 0x0302, + 0x030a, 0x0312, 0x0317, 0x0325, 0x032c, 0x0333, 0x0341, 0x0349, + 0x034d, 0x0356, 0x035f, 0x0365, 0x036b, 0x0375, 0x0382, 0x038c, + 0x03b2, 0x03bb, 0x03bf, 0x03cc, 0x03d2, 0x03e4, 0x03fc, 0x0404, + 0x040b, 0x0410, 0x0416, 0x0424, 0x042d, 0x0434, 0x043b, 0x0446, + 0x044b, 0x046b, 0x046f, 0x0473, 0x047a, 0x0480, 0x0486, 0x048d, + 0x0493, 0x0498, 0x049d, 0x04a5, 0x04ad, 0x04b5, 0x04c1, 0x04d2, + // Entry 80 - BF + 0x04de, 0x04e9, 0x04ef, 0x04fc, 0x0505, 0x0509, 0x0510, 0x0519, + 0x0524, 0x052d, 0x0534, 0x053a, 0x0540, 0x054a, 0x0552, 0x0557, + 0x055e, 0x0564, 0x056b, 0x0575, 0x057e, 0x0588, 0x0597, 0x05a1, + 0x05a5, 0x05b4, 0x05bc, 0x05ca, 0x05df, 0x05e9, 0x05f3, 0x05fd, + 0x0602, 0x060b, 0x0618, 0x061e, 0x0625, 0x062d, 0x0635, 0x063c, + 0x0649, 0x064e, 0x065b, 0x0662, 0x066b, 0x0675, 0x067a, 0x067f, + 0x0684, 0x0688, 0x0692, 0x0696, 0x069c, 0x06a0, 0x06b1, 0x06c0, + 0x06cd, 0x06d5, 0x06dd, 0x06f5, 0x0704, 0x070f, 0x0723, 0x072b, + // Entry C0 - FF + 0x0730, 0x0738, 0x073d, 0x074e, 0x0756, 0x075d, 0x0763, 0x076b, + 0x0771, 0x077c, 0x078a, 0x0799, 0x079e, 0x07a7, 0x07af, 0x07b9, + 0x07c1, 0x07d5, 0x07dd, 0x07e9, 0x07f3, 0x07fa, 0x0801, 0x0808, + 0x0813, 0x0826, 0x0831, 0x083d, 0x0843, 0x084c, 0x085c, 0x0873, + 0x0877, 0x0890, 0x0894, 0x089b, 0x08a7, 0x08ae, 0x08b9, 0x08c5, + 0x08cc, 0x08d1, 0x08da, 0x08eb, 0x08f1, 0x08f7, 0x08ff, 0x0906, + 0x090c, 0x0935, 0x0935, 0x094a, 0x0951, 0x095b, 0x0967, 0x0984, + 0x098d, 0x09ac, 0x09d1, 0x09d8, 0x09df, 0x09f7, 0x09fc, 0x0a02, + // Entry 100 - 13F + 0x0a07, 0x0a0e, 0x0a1a, 0x0a20, 0x0a28, 0x0a33, 0x0a39, 0x0a3f, + 0x0a4d, 0x0a5a, 0x0a61, 0x0a6d, 0x0a78, 0x0a84, 0x0a91, 0x0a9b, + 0x0ab3, 0x0aba, 0x0ad5, 0x0adc, 0x0ae6, 0x0af0, 0x0aff, 0x0b0b, + 0x0b16, 0x0b1f, 0x0b2d, 0x0b36, 0x0b3a, 0x0b42, 0x0b4c, 0x0b52, + 0x0b5e, 0x0b6b, 0x0b77, 0x0b84, + }, + }, + { // fr + frRegionStr, + frRegionIdx, + }, + { // fr-BE + "BruneiÎles Géorgie du Sud et Sandwich du Sud", + []uint16{ // 97 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + // Entry 40 - 7F + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x002e, + }, + }, + { // fr-CA + frCARegionStr, + frCARegionIdx, + }, + {}, // fr-CH + { // fur + "AndorraEmirâts araps unîtsAfghanistanAntigua e BarbudaAnguillaAlbanieArm" + + "enieAngolaAntarticArgjentineSamoa merecanisAustrieAustralieArubaIsul" + + "is AlandAzerbaigianBosnie e ErcegovineBarbadosBangladeshBelgjicheBur" + + "kina FasoBulgarieBahrainBurundiBeninSant BarthélemyBermudaBruneiBoli" + + "vieBrasîlBahamasBhutanIsule BouvetBotswanaBielorussieBelizeCanadeIsu" + + "lis CocosRepubliche Democratiche dal CongoRepubliche centri africane" + + "Congo - BrazzavilleSvuizareCueste di AvoliIsulis CookCileCamerunCine" + + "ColombieIsule ClippertonCosta RicaCubaCjâf vertIsule ChristmasCipriR" + + "epubliche cecheGjermanieDiego GarciaGibutiDanimarcjeDominicheRepubli" + + "che dominicaneAlzerieCeuta e MelillaEcuadorEstonieEgjitSahara ociden" + + "tâlEritreeSpagneEtiopieUnion europeaneFinlandieFiziIsulis FalklandMi" + + "cronesieIsulis FaroeFranceGabonReam unîtGrenadaGjeorgjieGuiana franc" + + "êsGuernseyGhanaGjibraltarGroenlandeGambiaGuineeGuadalupeGuinee ecua" + + "toriâlGrecieGeorgia dal Sud e Isulis Sandwich dal SudGuatemalaGuamGu" + + "inea-BissauGuyanaRegjon aministrative speciâl de Cine di Hong KongIs" + + "ule Heard e Isulis McDonaldHondurasCravuazieHaitiOngjarieIsulis Cana" + + "riisIndonesieIrlandeIsraêlIsule di ManIndiaTeritori britanic dal Oce" + + "an IndianIraqIranIslandeItalieJerseyGjamaicheJordanieGjaponKenyaKirg" + + "hizstanCambozeKiribatiComorisSan Kitts e NevisCoree dal nordCoree da" + + "l sudKuwaitIsulis CaymanKazachistanLaosLibanSante LusieLiechtenstein" + + "Sri LankaLiberieLesothoLituanieLussemburcLetonieLibieMarocMonacoMold" + + "avieMontenegroSant MartinMadagascarIsulis MarshallMacedonieMaliBirma" + + "nieMongolieRegjon aministrative speciâl de Cine di MacaoIsulis Maria" + + "na dal NordMartinicheMauritanieMontserratMaltaMauriziMaldivisMalawiM" + + "essicMalaysiaMozambicNamibieGnove CaledonieNigerIsole NorfolkNigerie" + + "NicaraguaPaîs basNorvegjeNepalNauruNiueGnove ZelandeOmanPanamàPerùPo" + + "linesie francêsPapue Gnove GuineeFilipinisPakistanPolonieSan Pierre " + + "e MiquelonPitcairnPorto RicoTeritoris palestinêsPortugalPalauParagua" + + "yQatarOceanie perifericheReunionRomanieSerbieRussieRuandeArabie Saud" + + "ideIsulis SalomonSeychellesSudanSvezieSingaporeSante ElineSlovenieSv" + + "albard e Jan MayenSlovachieSierra LeoneSan MarinSenegalSomalieSurina" + + "meSao Tomè e PrincipeEl SalvadorSirieSwazilandTristan da CunhaIsulis" + + " Turks e CaicosÇadTeritoris meridionâi francêsTogoTailandieTazikista" + + "nTokelauTimor orientâlTurkmenistanTunisieTongaTurchieTrinidad e Toba" + + "goTuvaluTaiwanTanzanieUcraineUgandaIsulis periferichis minôrs dai St" + + "âts UnîtsStâts UnîtsUruguayUzbechistanVaticanSan Vincent e lis Gren" + + "adinisVenezuelaIsulis vergjinis britanichisIsulis vergjinis american" + + "isVietnamVanuatuWallis e FutunaSamoaYemenMayotteSud AfricheZambiaZim" + + "babweRegjon no cognossude o no valideMontAfricheAmeriche dal NordAme" + + "riche meridionâlOceanieAfriche ocidentâlAmeriche centrâlAfriche orie" + + "ntâlAfriche setentrionâlAfriche di mieçAfriche meridionâlAmerichisAm" + + "eriche setentrionâlcaraibicAsie orientâlAsie meridionâlAsie sud orie" + + "ntâlEurope meridionâlAustralie e Gnove ZelandeMelanesieRegjon de Mic" + + "ronesiePolinesieAsieAsie centrâlAsie ocidentâlEuropeEurope orientâlE" + + "urope setentrionâlEurope ocidentâlAmeriche latine", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x001c, 0x0027, 0x0038, 0x0040, 0x0047, + 0x004e, 0x0054, 0x005c, 0x0066, 0x0075, 0x007c, 0x0085, 0x008a, + 0x0096, 0x00a1, 0x00b4, 0x00bc, 0x00c6, 0x00cf, 0x00db, 0x00e3, + 0x00ea, 0x00f1, 0x00f6, 0x0106, 0x010d, 0x0113, 0x011a, 0x011a, + 0x0121, 0x0128, 0x012e, 0x013a, 0x0142, 0x014d, 0x0153, 0x0159, + 0x0165, 0x0186, 0x01a0, 0x01b3, 0x01bb, 0x01ca, 0x01d5, 0x01d9, + 0x01e0, 0x01e4, 0x01ec, 0x01fc, 0x0206, 0x020a, 0x0214, 0x0214, + 0x0223, 0x0228, 0x0238, 0x0241, 0x024d, 0x0253, 0x025d, 0x0266, + // Entry 40 - 7F + 0x027b, 0x0282, 0x0291, 0x0298, 0x029f, 0x02a4, 0x02b5, 0x02bc, + 0x02c2, 0x02c9, 0x02d8, 0x02d8, 0x02e1, 0x02e5, 0x02f4, 0x02fe, + 0x030a, 0x0310, 0x0315, 0x031f, 0x0326, 0x032f, 0x033e, 0x0346, + 0x034b, 0x0355, 0x035f, 0x0365, 0x036b, 0x0374, 0x0386, 0x038c, + 0x03b5, 0x03be, 0x03c2, 0x03cf, 0x03d5, 0x0407, 0x0424, 0x042c, + 0x0435, 0x043a, 0x0442, 0x0451, 0x045a, 0x0461, 0x0468, 0x0474, + 0x0479, 0x049b, 0x049f, 0x04a3, 0x04aa, 0x04b0, 0x04b6, 0x04bf, + 0x04c7, 0x04cd, 0x04d2, 0x04dd, 0x04e4, 0x04ec, 0x04f3, 0x0504, + // Entry 80 - BF + 0x0512, 0x051f, 0x0525, 0x0532, 0x053d, 0x0541, 0x0546, 0x0551, + 0x055e, 0x0567, 0x056e, 0x0575, 0x057d, 0x0587, 0x058e, 0x0593, + 0x0598, 0x059e, 0x05a6, 0x05b0, 0x05bb, 0x05c5, 0x05d4, 0x05dd, + 0x05e1, 0x05e9, 0x05f1, 0x061f, 0x0636, 0x0640, 0x064a, 0x0654, + 0x0659, 0x0660, 0x0668, 0x066e, 0x0674, 0x067c, 0x0684, 0x068b, + 0x069a, 0x069f, 0x06ac, 0x06b3, 0x06bc, 0x06c5, 0x06cd, 0x06d2, + 0x06d7, 0x06db, 0x06e8, 0x06ec, 0x06f3, 0x06f8, 0x070a, 0x071c, + 0x0725, 0x072d, 0x0734, 0x0749, 0x0751, 0x075b, 0x0770, 0x0778, + // Entry C0 - FF + 0x077d, 0x0785, 0x078a, 0x079d, 0x07a4, 0x07ab, 0x07b1, 0x07b7, + 0x07bd, 0x07cb, 0x07d9, 0x07e3, 0x07e8, 0x07ee, 0x07f7, 0x0802, + 0x080a, 0x081e, 0x0827, 0x0833, 0x083c, 0x0843, 0x084a, 0x0852, + 0x0852, 0x0866, 0x0871, 0x0871, 0x0876, 0x087f, 0x088f, 0x08a4, + 0x08a8, 0x08c6, 0x08ca, 0x08d3, 0x08dd, 0x08e4, 0x08f3, 0x08ff, + 0x0906, 0x090b, 0x0912, 0x0923, 0x0929, 0x092f, 0x0937, 0x093e, + 0x0944, 0x0971, 0x0971, 0x097e, 0x0985, 0x0990, 0x0997, 0x09b3, + 0x09bc, 0x09d8, 0x09f3, 0x09fa, 0x0a01, 0x0a10, 0x0a15, 0x0a15, + // Entry 100 - 13F + 0x0a1a, 0x0a21, 0x0a2c, 0x0a32, 0x0a3a, 0x0a5a, 0x0a5e, 0x0a65, + 0x0a76, 0x0a8a, 0x0a91, 0x0aa3, 0x0ab4, 0x0ac5, 0x0ada, 0x0aea, + 0x0afd, 0x0b06, 0x0b1c, 0x0b24, 0x0b32, 0x0b42, 0x0b54, 0x0b66, + 0x0b7f, 0x0b88, 0x0b9c, 0x0ba5, 0x0ba9, 0x0bb6, 0x0bc5, 0x0bcb, + 0x0bdb, 0x0bef, 0x0c00, 0x0c0f, + }, + }, + { // fy + "AscensionAndorraVerenigde Arabyske EmiratenAfghanistanAntigua en Barbuda" + + "AnguillaAlbaniëArmeniëAngolaAntarcticaArgentiniëAmerikaansk SamoaEas" + + "tenrykAustraliëArubaÅlânAzerbeidzjanBosnië en HerzegovinaBarbadosBan" + + "gladeshBelgiëBurkina FasoBulgarijeBahreinBurundiBeninSaint Barthélem" + + "yBermudaBruneiBoliviaKaribysk NederlânBraziliëBahama’sBhutanBouvetei" + + "lânBotswanaWit-RuslânBelizeCanadaKokosilanenCongo-KinshasaSintraal-A" + + "frikaanske RepublykCongo-BrazzavilleSwitserlânIvoorkustCookeilannenC" + + "hiliKameroenSinaKolombiaClippertonCosta RicaKubaKaapverdiëCuraçaoKry" + + "steilanSyprusTsjechjeDútslânDiego GarciaDjiboutiDenemarkenDominikaDo" + + "minikaanske RepublykAlgerijeCeuta en MelillaEcuadorEstlânEgypteWeste" + + "lijke SaharaEritreaSpanjeEthiopiëEuropeeske UnieFinlânFijiFalklâneil" + + "annenMicronesiëFaeröerFrankrijkGabonVerenigd KoninkrijkGrenadaGeorgi" + + "ëFrans-GuyanaGuernseyGhanaGibraltarGrienlânGambiaGuineeGuadeloupeEq" + + "uatoriaal-GuineaGrikelânSûd-Georgia en Sûdlike SandwicheilannenGuate" + + "malaGuamGuinee-BissauGuyanaHongkong SAR van SinaHeard- en McDonaldei" + + "lannenHondurasKroatiëHaïtiHongarijeKanaryske EilânnenYndonesiëIerlân" + + "IsraëlIsle of ManIndiaBritse Gebieden yn de Indyske OseaanIrakIranYs" + + "lânItaliëJerseyJamaicaJordaniëJapanKeniaKirgiziëCambodjaKiribatiComo" + + "renSaint Kitts en NevisNoard-KoreaSûd-KoreaKoeweitCaymaneilannenKaza" + + "chstanLaosLibanonSaint LuciaLiechtensteinSri LankaLiberiaLesothoLito" + + "uwenLuxemburgLetlânLibiëMarokkoMonacoMoldaviëMontenegroSaint-MartinM" + + "adeiaskarMarshalleilannenMacedoniëMaliMyanmar (Birma)MongoliëMacao S" + + "AR van SinaNoardlike MarianeneilannenMartiniqueMauritaniëMontserratM" + + "altaMauritiusMaldivenMalawiMexicoMaleisiëMozambiqueNamibiëNij-Caledo" + + "niëNigerNorfolkeilânNigeriaNicaraguaNederlânNoarwegenNepalNauruNiueN" + + "ij-SeelânOmanPanamaPeruFrans-PolynesiëPapoea-Nij-GuineaFilipijnenPak" + + "istanPolenSaint-Pierre en MiquelonPitcairneilannenPuerto RicoPalesty" + + "nske gebietenPortugalPalauParaguayQatarOerig OceaniëRéunionRoemeniëS" + + "erviëRuslânRwandaSaoedi-ArabiëSalomonseilannenSeychellenSoedanZweden" + + "SingaporeSint-HelenaSloveniëSpitsbergen en Jan MayenSlowakijeSierra " + + "LeoneSan MarinoSenegalSomaliëSurinameSûd-SoedanSao Tomé en PrincipeE" + + "l SalvadorSint-MaartenSyriëSwazilânTristan da CunhaTurks- en Caicose" + + "ilannenTsjaadFranse Gebieden in de zuidelijke Indyske OseaanTogoThai" + + "lânTadzjikistanTokelauEast-TimorTurkmenistanTunesiëTongaTurkijeTrini" + + "dad en TobagoTuvaluTaiwanTanzaniaOekraïneOegandaLyts ôflizzen eilann" + + "en fan de Ferienigde StatenFerienigde StatenUruguayOezbekistanVatica" + + "anstêdSaint Vincent en de GrenadinesVenezuelaBritse MaagdeneilannenA" + + "merikaanske MaagdeneilannenVietnamVanuatuWallis en FutunaSamoaKosovo" + + "JemenMayotteSûd-AfrikaZambiaZimbabweUnbekend gebietWrâldAfrikaNoard-" + + "AmerikaSûd-AmerikaOceaniëWest-AfrikaMidden-AmerikaEast-AfrikaNoard-A" + + "frikaSintraal-AfrikaSûdelijk AfrikaAmerikaNoardlik AmerikaKaribysk g" + + "ebietEast-AziëSûd-AziëSûdoost-AziëSûd-EuropaAustralaziëMelanesiëMicr" + + "onesyske regioPolynesiëAziëSintraal-AziëWest-AziëEuropaEast-EuropaNo" + + "ard-EuropaWest-EuropaLatynsk-Amearika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002b, 0x0036, 0x0048, 0x0050, 0x0058, + 0x0060, 0x0066, 0x0070, 0x007b, 0x008c, 0x0095, 0x009f, 0x00a4, + 0x00aa, 0x00b6, 0x00cc, 0x00d4, 0x00de, 0x00e5, 0x00f1, 0x00fa, + 0x0101, 0x0108, 0x010d, 0x011e, 0x0125, 0x012b, 0x0132, 0x0144, + 0x014d, 0x0157, 0x015d, 0x0169, 0x0171, 0x017c, 0x0182, 0x0188, + 0x0193, 0x01a1, 0x01be, 0x01cf, 0x01da, 0x01e3, 0x01ef, 0x01f4, + 0x01fc, 0x0200, 0x0208, 0x0212, 0x021c, 0x0220, 0x022b, 0x0233, + 0x023d, 0x0243, 0x024b, 0x0254, 0x0260, 0x0268, 0x0272, 0x027a, + // Entry 40 - 7F + 0x0290, 0x0298, 0x02a8, 0x02af, 0x02b6, 0x02bc, 0x02cd, 0x02d4, + 0x02da, 0x02e3, 0x02f2, 0x02f2, 0x02f9, 0x02fd, 0x030d, 0x0318, + 0x0320, 0x0329, 0x032e, 0x0341, 0x0348, 0x0350, 0x035c, 0x0364, + 0x0369, 0x0372, 0x037b, 0x0381, 0x0387, 0x0391, 0x03a3, 0x03ac, + 0x03d5, 0x03de, 0x03e2, 0x03ef, 0x03f5, 0x040a, 0x0424, 0x042c, + 0x0434, 0x043a, 0x0443, 0x0456, 0x0460, 0x0467, 0x046e, 0x0479, + 0x047e, 0x04a2, 0x04a6, 0x04aa, 0x04b0, 0x04b7, 0x04bd, 0x04c4, + 0x04cd, 0x04d2, 0x04d7, 0x04e0, 0x04e8, 0x04f0, 0x04f7, 0x050b, + // Entry 80 - BF + 0x0516, 0x0520, 0x0527, 0x0535, 0x053f, 0x0543, 0x054a, 0x0555, + 0x0562, 0x056b, 0x0572, 0x0579, 0x0581, 0x058a, 0x0591, 0x0597, + 0x059e, 0x05a4, 0x05ad, 0x05b7, 0x05c3, 0x05cd, 0x05dd, 0x05e7, + 0x05eb, 0x05fa, 0x0603, 0x0615, 0x062f, 0x0639, 0x0644, 0x064e, + 0x0653, 0x065c, 0x0664, 0x066a, 0x0670, 0x0679, 0x0683, 0x068b, + 0x0699, 0x069e, 0x06ab, 0x06b2, 0x06bb, 0x06c4, 0x06cd, 0x06d2, + 0x06d7, 0x06db, 0x06e6, 0x06ea, 0x06f0, 0x06f4, 0x0704, 0x0715, + 0x071f, 0x0727, 0x072c, 0x0744, 0x0754, 0x075f, 0x0773, 0x077b, + // Entry C0 - FF + 0x0780, 0x0788, 0x078d, 0x079b, 0x07a3, 0x07ac, 0x07b3, 0x07ba, + 0x07c0, 0x07ce, 0x07de, 0x07e8, 0x07ee, 0x07f4, 0x07fd, 0x0808, + 0x0811, 0x0829, 0x0832, 0x083e, 0x0848, 0x084f, 0x0857, 0x085f, + 0x086a, 0x087f, 0x088a, 0x0896, 0x089c, 0x08a5, 0x08b5, 0x08cd, + 0x08d3, 0x0902, 0x0906, 0x090e, 0x091a, 0x0921, 0x092b, 0x0937, + 0x093f, 0x0944, 0x094b, 0x095d, 0x0963, 0x0969, 0x0971, 0x097a, + 0x0981, 0x09b1, 0x09b1, 0x09c2, 0x09c9, 0x09d4, 0x09e1, 0x09ff, + 0x0a08, 0x0a1e, 0x0a3a, 0x0a41, 0x0a48, 0x0a58, 0x0a5d, 0x0a63, + // Entry 100 - 13F + 0x0a68, 0x0a6f, 0x0a7a, 0x0a80, 0x0a88, 0x0a97, 0x0a9d, 0x0aa3, + 0x0ab0, 0x0abc, 0x0ac4, 0x0acf, 0x0add, 0x0ae8, 0x0af4, 0x0b03, + 0x0b13, 0x0b1a, 0x0b2a, 0x0b39, 0x0b43, 0x0b4d, 0x0b5b, 0x0b66, + 0x0b72, 0x0b7c, 0x0b8e, 0x0b98, 0x0b9d, 0x0bab, 0x0bb5, 0x0bbb, + 0x0bc6, 0x0bd2, 0x0bdd, 0x0bed, + }, + }, + { // ga + "Oileán na DeascabhálaAndóraAontas na nÉimíríochtaí ArabachaAn Afganastái" + + "nAntigua agus BarbúdaAngaíleAn AlbáinAn AirméinAngólaAn AntartaiceAn" + + " AirgintínSamó MeiriceánachAn OstairAn AstráilArúbaOileáin ÅlandAn A" + + "sarbaiseáinAn Bhoisnia agus An HeirseagaivéinBarbadósAn Bhanglaidéis" + + "An BheilgBuircíne FasóAn BhulgáirBairéinAn BhurúinBeininSaint Barthé" + + "lemyBeirmiúdaBrúinéAn BholaivAn Ísiltír ChairibeachAn BhrasaílNa Bah" + + "ámaíAn BhútáinOileán BouvetAn BhotsuáinAn BhealarúisAn BheilísCeana" + + "daOileáin Cocos (Keeling)Poblacht Dhaonlathach an ChongóPoblacht na " + + "hAfraice LáirAn CongóAn EilvéisAn Cósta EabhairOileáin CookAn tSileC" + + "amarúnAn tSínAn CholóimOileán ClippertonCósta RíceCúbaRinn VerdeCura" + + "çaoOileán na NollagAn ChipirPoblacht na SeiceAn GhearmáinDiego Garc" + + "iaDjiboutiAn DanmhairgDoiminiceAn Phoblacht DhoiminiceachAn AilgéirC" + + "euta agus MelillaEacuadórAn EastóinAn ÉigiptAn Sahára ThiarAn Eiritr" + + "éAn SpáinnAn AetóipAn tAontas EorpachAn FhionlainnFidsíOileáin Fhác" + + "lainneAn MhicrinéisOileáin FharóAn FhraincAn GhabúinAn Ríocht Aontai" + + "theGreanádaAn tSeoirsiaGuáin na FrainceGeansaíGánaGiobráltarAn Ghrao" + + "nlainnAn GhaimbiaAn GhuineGuadalúipAn Ghuine MheánchriosachAn Ghréig" + + "An tSeoirsia Theas agus Oileáin Sandwich TheasGuatamalaGuamGuine Bis" + + "sauAn GhuáinS.R.R. na Síne Hong CongOileán Heard agus Oileáin McDona" + + "ldHondúrasAn ChróitHáítíAn UngáirNa hOileáin ChanárachaAn IndinéisÉi" + + "reIosraelOileán MhanannAn IndiaCríoch Aigéan Indiach na BreataineAn " + + "IaráicAn IaráinAn ÍoslainnAn IodáilGeirsíIamáiceAn IordáinAn tSeapái" + + "nAn ChéiniaAn ChirgeastáinAn ChambóidCireabaitíOileáin ChomóraSan Cr" + + "íostóir-NimheasAn Chóiré ThuaidhAn Chóiré TheasCuáitOileáin CaymanA" + + "n ChasacstáinLaosAn LiobáinSaint LuciaLichtinstéinSrí LancaAn Libéir" + + "LeosótaAn LiotuáinLucsamburgAn LaitviaAn LibiaMaracóMonacóAn Mholdói" + + "vMontainéagróSaint-MartinMadagascarOileáin MarshallAn MhacadóinMailí" + + "Maenmar (Burma)An MhongóilS.R.R. na Síne MacaoNa hOileáin Mháirianac" + + "ha ThuaidhMartiniqueAn MháratáinMontsaratMáltaOileán MhuirísOileáin " + + "MhaildíveAn MhaláivMeicsiceoAn MhalaeisiaMósaimbícAn NamaibAn Nua-Ch" + + "aladóinAn NígirOileán NorfolkAn NigéirNicearaguaAn ÍsiltírAn IoruaNe" + + "ipealNárúNiueAn Nua-ShéalainnÓmanPanamaPeiriúPolainéis na FrainceNua" + + "-Ghuine PhapuaNa hOileáin FhilipíneachaAn PhacastáinAn PholainnSaint" + + "-Pierre-et-MiquelonOileáin PitcairnPortó RíceNa Críocha Palaistíneac" + + "haAn PhortaingéilPalauParaguaCatarAn Aigéine ImeallachRéunionAn Rómá" + + "inAn tSeirbiaAn RúisRuandaAn Araib ShádachOileáin SholomónNa Séiséil" + + "An tSúdáinAn tSualainnSingeapórSan HéilinAn tSlóivéinSvalbard agus J" + + "an MayenAn tSlóvaicSiarra LeonSan MairíneAn tSeineagáilAn tSomáilSur" + + "anamAn tSúdáin TheasSão Tomé agus PríncipeAn tSalvadóirSint MaartenA" + + "n tSiriaAn tSuasalainnTristan da CunhaOileáin na dTurcach agus Caico" + + "sSeadCríocha Francacha Dheisceart an DomhainTógaAn TéalainnAn Táidsí" + + "ceastáinTócaláTíomór ThoirAn TuircméanastáinAn TúinéisTongaAn TuircO" + + "ileán na Tríonóide agus TobágaTuvaluAn TéaváinAn TansáinAn ÚcráinUga" + + "ndaOileáin Imeallacha S.A.M.Náisiúin AontaitheStáit Aontaithe Mheiri" + + "ceáUruguaAn ÚisbéiceastáinAn VatacáinSan Uinseann agus na Greanáidín" + + "íVeiniséalaOileáin Bhriotanacha na MaighdeanOileáin Mheiriceánacha " + + "na MaighdeanVítneamVanuatúVailís agus FutúnaSamóAn ChosaivÉiminMayot" + + "teAn Afraic TheasAn tSaimbiaAn tSiombáibRéigiún AnaithnidAn DomhanAn" + + " AfraicMeiriceá ThuaidhMeiriceá TheasAn AigéineIarthar na hAfraiceMe" + + "iriceá LáirOirthear na hAfraiceTuaisceart na hAfraiceAn Afraic LáirD" + + "eisceart na hAfraiceCríocha MheiriceáTuaisceart MheiriceáAn Mhuir Ch" + + "airibOirthear na hÁiseDeisceart na hÁiseOirdheisceart na hÁiseDeisce" + + "art na hEorpaAn AstraláiseAn MheilinéisAn Réigiún MicrinéiseachAn Ph" + + "olainéisAn ÁiseAn Áise LáirIarthar na hÁiseAn EoraipOirthear na hEor" + + "paTuaisceart na hEorpaIarthar na hEorpaMeiriceá Laidineach", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0017, 0x001e, 0x0042, 0x0051, 0x0066, 0x006e, 0x0078, + 0x0083, 0x008a, 0x0097, 0x00a4, 0x00b7, 0x00c0, 0x00cb, 0x00d1, + 0x00e0, 0x00f0, 0x0113, 0x011c, 0x012c, 0x0135, 0x0144, 0x0150, + 0x0158, 0x0163, 0x0169, 0x017a, 0x0184, 0x018c, 0x0196, 0x01ae, + 0x01ba, 0x01c6, 0x01d2, 0x01e0, 0x01ed, 0x01fb, 0x0206, 0x020d, + 0x0225, 0x0245, 0x025f, 0x0268, 0x0273, 0x0284, 0x0291, 0x0299, + 0x02a1, 0x02a9, 0x02b4, 0x02c6, 0x02d2, 0x02d7, 0x02e1, 0x02e9, + 0x02fa, 0x0303, 0x0314, 0x0321, 0x032d, 0x0335, 0x0341, 0x034a, + // Entry 40 - 7F + 0x0364, 0x036f, 0x0381, 0x038a, 0x0395, 0x039f, 0x03af, 0x03ba, + 0x03c4, 0x03ce, 0x03e0, 0x03e0, 0x03ed, 0x03f3, 0x0407, 0x0415, + 0x0424, 0x042e, 0x0439, 0x044d, 0x0456, 0x0462, 0x0473, 0x047b, + 0x0480, 0x048b, 0x0499, 0x04a4, 0x04ad, 0x04b7, 0x04d0, 0x04da, + 0x0509, 0x0512, 0x0516, 0x0522, 0x052c, 0x0545, 0x0569, 0x0572, + 0x057c, 0x0584, 0x058e, 0x05a6, 0x05b2, 0x05b7, 0x05be, 0x05cd, + 0x05d5, 0x05f9, 0x0603, 0x060d, 0x0619, 0x0623, 0x062a, 0x0632, + 0x063d, 0x0649, 0x0654, 0x0664, 0x0670, 0x067b, 0x068c, 0x06a3, + // Entry 80 - BF + 0x06b6, 0x06c7, 0x06cd, 0x06dc, 0x06eb, 0x06ef, 0x06fa, 0x0705, + 0x0712, 0x071c, 0x0726, 0x072e, 0x073a, 0x0744, 0x074e, 0x0756, + 0x075d, 0x0764, 0x0770, 0x077e, 0x078a, 0x0794, 0x07a5, 0x07b2, + 0x07b8, 0x07c7, 0x07d3, 0x07e8, 0x080a, 0x0814, 0x0822, 0x082b, + 0x0831, 0x0841, 0x0854, 0x085f, 0x0868, 0x0875, 0x0880, 0x0889, + 0x089a, 0x08a3, 0x08b2, 0x08bc, 0x08c6, 0x08d2, 0x08da, 0x08e1, + 0x08e7, 0x08eb, 0x08fc, 0x0901, 0x0907, 0x090e, 0x0923, 0x0934, + 0x094f, 0x095d, 0x0968, 0x0980, 0x0991, 0x099d, 0x09b8, 0x09c8, + // Entry C0 - FF + 0x09cd, 0x09d4, 0x09d9, 0x09ee, 0x09f6, 0x0a01, 0x0a0c, 0x0a14, + 0x0a1a, 0x0a2b, 0x0a3d, 0x0a49, 0x0a55, 0x0a61, 0x0a6b, 0x0a76, + 0x0a84, 0x0a9b, 0x0aa7, 0x0ab2, 0x0abe, 0x0acd, 0x0ad8, 0x0adf, + 0x0af1, 0x0b0a, 0x0b18, 0x0b24, 0x0b2d, 0x0b3b, 0x0b4b, 0x0b6b, + 0x0b6f, 0x0b97, 0x0b9c, 0x0ba8, 0x0bbc, 0x0bc4, 0x0bd2, 0x0be6, + 0x0bf2, 0x0bf7, 0x0bff, 0x0c22, 0x0c28, 0x0c34, 0x0c3f, 0x0c4a, + 0x0c50, 0x0c6a, 0x0c7e, 0x0c99, 0x0c9f, 0x0cb3, 0x0cbf, 0x0ce2, + 0x0ced, 0x0d0f, 0x0d34, 0x0d3c, 0x0d44, 0x0d58, 0x0d5d, 0x0d67, + // Entry 100 - 13F + 0x0d6d, 0x0d74, 0x0d83, 0x0d8e, 0x0d9b, 0x0dae, 0x0db7, 0x0dc0, + 0x0dd1, 0x0de0, 0x0deb, 0x0dfe, 0x0e0d, 0x0e21, 0x0e37, 0x0e46, + 0x0e5b, 0x0e6e, 0x0e83, 0x0e93, 0x0ea5, 0x0eb8, 0x0ecf, 0x0ee2, + 0x0ef0, 0x0efe, 0x0f19, 0x0f27, 0x0f2f, 0x0f3d, 0x0f4e, 0x0f57, + 0x0f69, 0x0f7d, 0x0f8e, 0x0fa2, + }, + }, + { // gd + "Eilean na DeasgabhalachAndorraNa h-Iomaratan Arabach AonaichteAfghanastà" + + "nAintìoga is BarbudaAnguilliaAlbàiniaAirmeineaAngòlaAn AntartaigAn A" + + "rgantainSamotha na h-AimeireagaAn OstairAstràiliaArùbaNa h-Eileanan " + + "ÅlandAsarbaideànBosna agus HearsagobhanaBarbadosBangladaisA’ Bheilg" + + "Buirciona FasoA’ BhulgairBachrainBurundaidhBeininSaint BarthélemyBea" + + "rmùdaBrùnaighBoilibhiaNa Tìrean Ìsle CaraibeachBraisilNa h-Eileanan " + + "BhathamaButànEilean BouvetBotsuanaA’ BhealaruisA’ BheilìsCanadaNa h-" + + "Eileanan Chocos (Keeling)Congo - KinshasaPoblachd Meadhan AfragaA’ C" + + "hongo - BrazzavilleAn EilbheisCôte d’IvoireEileanan CookAn t-SileCam" + + "arunAn t-SìnColoimbiaEilean ClippertonCosta RìceaCùbaAn Ceap UaineCu" + + "raçaoEilean na NollaigCìoprasPoblachd na SeiceA’ GhearmailtDiego Gar" + + "ciaDiobùtaidhAn DanmhairgDoiminiceaA’ Phoblachd DhoiminiceachAildiri" + + "aCeuta agus MelillaEacuadorAn EastoinAn ÈiphitSathara an IarEartraAn" + + " SpàinntAn ItiopAn t-Aonadh EòrpachAn FhionnlannFìdiNa h-Eileanan Fà" + + "clannachNa Meanbh-eileananNa h-Eileanan FàroAn FhraingGabonAn Rìogha" + + "chd AonaichteGreanàdaA’ ChairtbheilGuidheàna na FraingeGeàrnsaidhGàn" + + "aDiobraltarA’ GhraonlannA’ GhaimbiaGiniGuadalupGini Mheadhan-Chriosa" + + "chA’ GhreugSeòirsea a Deas is na h-Eileanan Sandwich a DeasGuatamala" + + "GuamGini-BiosoGuidheànaHong Kong SAR na SìneEilean Heard is MhicDhòm" + + "hnaillHondùrasA’ ChròthaisHaidhtiAn UngairNa h-Eileanan CanàrachNa h" + + "-Innd-innseÈirinnIosraelEilean MhanainnNa h-InnseachanRanntair Breat" + + "annach Cuan nan InnseachanIoràcIorànInnis TìleAn EadailtDeàrsaidhDia" + + "meugaIòrdanAn t-SeapanCeiniaCìorgastanCambuideaCiribeasComorosNaomh " + + "Crìstean is NibheisCoirèa a TuathCoirèaCuibhèitNa h-Eileanan Caimean" + + "CasachstànLàthosLeabanonNaomh LùiseaLichtensteinSri LancaLibèirLeaso" + + "toAn LiotuainLugsamburgAn LaitbheLibiaMorocoMonacoA’ MholdobhaAm Mon" + + "adh NeagrachNaomh MàrtainnMadagasgarEileanan MharshallA’ MhasadonMài" + + "liMiànmarDùthaich nam MongolMacàthu SAR na SìneNa h-Eileanan Mairian" + + "ach a TuathMairtinicMoratàineaMontsaratMaltaNa h-Eileanan Mhoiriseas" + + "Na h-Eileanan MhaladaibhMalabhaidhMeagsagoMalaidhseaMòsaimbicAn Nama" + + "ibCailleann NuadhNìgeirEilean NorfolkNigèiriaNiocaraguaNa Tìrean Ìsl" + + "eNirribhidhNeapàlNabhruNiueSealainn NuadhOmànPanamaPearùPoilinèis na" + + " FraingeGini Nuadh PhaputhachNa h-Eileanan FilipineachPagastànA’ Phò" + + "lainnSaint Pierre agus MiquelonEileanan Peit a’ ChàirnPorto RìceoNa " + + "Ranntairean PalastaineachA’ PhortagailPalabhParaguaidhCatarRoinn Iom" + + "allach a’ Chuain SèimhRéunionRomàiniaAn t-SèirbAn RuisRubhandaAràibi" + + "a nan SabhdEileanan SholaimhNa h-Eileanan SheiseallSudànAn t-SuainSi" + + "ngeapòrEilean Naomh EilidhAn t-SlòbhainSvalbard agus Jan MayenAn t-S" + + "lòbhacSiarra LeòmhannSan MarinoSeanagalSomàiliaSuranamSudàn a DeasSã" + + "o Tomé agus PríncipeAn SalbhadorSint MaartenSiridheaDùthaich nan Sua" + + "saidhTristan da CunhaNa h-Eileanan Turcach is CaiceoAn t-SeàdRanntai" + + "rean a Deas na FraingeTogoDùthaich nan TàidhTaidigeastànTokelauTimor" + + "-LesteTurcmanastànTuiniseaTongaAn TuircTrianaid agus TobagoTubhaluTa" + + "idh-BhànAn TansanAn UcràinUgandaMeanbh-Eileanan Iomallach nan SANa S" + + "tàitean AonaichteUruguaidhUsbagastànCathair na BhatacainNaomh Bhions" + + "ant agus Eileanan GreanadachA’ BheinisealaEileanan Breatannach na Ma" + + "ighdinnEileanan na Maighdinn aig na SABhiet-NamVanuatuUallas agus Fu" + + "tunaSamothaA’ ChosobhoAn EamanMayotteAfraga a DeasSàimbiaAn t-Sìomba" + + "bRoinn-dùthcha neo-aithnichteAn SaoghalAfragaAimeireaga a TuathAimei" + + "reaga a DeasRoinn a’ Chuain SèimhAfraga an IarMeadhan AimeireagaAfra" + + "ga an EarAfraga a TuathMeadhan AfragaCeann a Deas AfragaAn Dà Aimeir" + + "eagaCeann a Tuath AimeireagaAm Muir CaraibeachÀisia an EarÀisia a De" + + "asÀisia an Ear-dheasAn Roinn-Eòrpa a DeasAstràilia is Sealainn Nuadh" + + "Na h-Eileanan DubhaRoinn nam Meanbh-EileananPoilinèisÀisiaMeadhan Ài" + + "siaÀisia an IarAn Roinn-EòrpaAn Roinn-Eòrpa an EarAn Roinn-Eòrpa a T" + + "uathAn Roinn-Eòrpa an IarAimeireaga Laidinneach", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0017, 0x001e, 0x003e, 0x004a, 0x005e, 0x0067, 0x0070, + 0x0079, 0x0080, 0x008c, 0x0098, 0x00af, 0x00b8, 0x00c2, 0x00c8, + 0x00dc, 0x00e8, 0x0100, 0x0108, 0x0112, 0x011d, 0x012b, 0x0138, + 0x0140, 0x014a, 0x0150, 0x0161, 0x016a, 0x0173, 0x017c, 0x0197, + 0x019e, 0x01b4, 0x01ba, 0x01c7, 0x01cf, 0x01de, 0x01eb, 0x01f1, + 0x020f, 0x021f, 0x0236, 0x024f, 0x025a, 0x026a, 0x0277, 0x0280, + 0x0287, 0x0290, 0x0299, 0x02aa, 0x02b6, 0x02bb, 0x02c8, 0x02d0, + 0x02e1, 0x02e9, 0x02fa, 0x0309, 0x0315, 0x0320, 0x032c, 0x0336, + // Entry 40 - 7F + 0x0352, 0x035a, 0x036c, 0x0374, 0x037e, 0x0388, 0x0396, 0x039c, + 0x03a7, 0x03af, 0x03c3, 0x03c3, 0x03d0, 0x03d5, 0x03ee, 0x0400, + 0x0413, 0x041d, 0x0422, 0x0439, 0x0442, 0x0452, 0x0467, 0x0472, + 0x0477, 0x0481, 0x0490, 0x049d, 0x04a1, 0x04a9, 0x04c0, 0x04cb, + 0x04fc, 0x0505, 0x0509, 0x0513, 0x051d, 0x0533, 0x0552, 0x055b, + 0x056a, 0x0571, 0x057a, 0x0591, 0x05a0, 0x05a7, 0x05ae, 0x05bd, + 0x05cc, 0x05f4, 0x05fa, 0x0600, 0x060b, 0x0615, 0x061f, 0x0627, + 0x062e, 0x0639, 0x063f, 0x064a, 0x0653, 0x065b, 0x0662, 0x067c, + // Entry 80 - BF + 0x068b, 0x0692, 0x069b, 0x06b0, 0x06bb, 0x06c2, 0x06ca, 0x06d7, + 0x06e3, 0x06ec, 0x06f3, 0x06fa, 0x0705, 0x070f, 0x0719, 0x071e, + 0x0724, 0x072a, 0x0738, 0x074a, 0x0759, 0x0763, 0x0775, 0x0782, + 0x0788, 0x0790, 0x07a4, 0x07b9, 0x07d9, 0x07e2, 0x07ed, 0x07f6, + 0x07fb, 0x0813, 0x082b, 0x0835, 0x083d, 0x0847, 0x0851, 0x085a, + 0x0869, 0x0870, 0x087e, 0x0887, 0x0891, 0x08a1, 0x08ab, 0x08b2, + 0x08b8, 0x08bc, 0x08ca, 0x08cf, 0x08d5, 0x08db, 0x08f0, 0x0905, + 0x091e, 0x0927, 0x0935, 0x094f, 0x0969, 0x0975, 0x0991, 0x09a0, + // Entry C0 - FF + 0x09a6, 0x09b0, 0x09b5, 0x09d7, 0x09df, 0x09e8, 0x09f3, 0x09fa, + 0x0a02, 0x0a14, 0x0a25, 0x0a3c, 0x0a42, 0x0a4c, 0x0a56, 0x0a69, + 0x0a77, 0x0a8e, 0x0a9b, 0x0aab, 0x0ab5, 0x0abd, 0x0ac6, 0x0acd, + 0x0ada, 0x0af3, 0x0aff, 0x0b0b, 0x0b13, 0x0b29, 0x0b39, 0x0b58, + 0x0b62, 0x0b7f, 0x0b83, 0x0b97, 0x0ba4, 0x0bab, 0x0bb6, 0x0bc3, + 0x0bcb, 0x0bd0, 0x0bd8, 0x0bec, 0x0bf3, 0x0bfe, 0x0c07, 0x0c11, + 0x0c17, 0x0c37, 0x0c37, 0x0c4d, 0x0c56, 0x0c61, 0x0c75, 0x0c9d, + 0x0cad, 0x0cce, 0x0ced, 0x0cf6, 0x0cfd, 0x0d0f, 0x0d16, 0x0d23, + // Entry 100 - 13F + 0x0d2b, 0x0d32, 0x0d3f, 0x0d47, 0x0d54, 0x0d71, 0x0d7b, 0x0d81, + 0x0d93, 0x0da4, 0x0dbc, 0x0dc9, 0x0ddb, 0x0de8, 0x0df6, 0x0e04, + 0x0e17, 0x0e28, 0x0e40, 0x0e52, 0x0e5f, 0x0e6c, 0x0e7f, 0x0e95, + 0x0eb1, 0x0ec4, 0x0edd, 0x0ee7, 0x0eed, 0x0efb, 0x0f08, 0x0f17, + 0x0f2d, 0x0f44, 0x0f5a, 0x0f70, + }, + }, + { // gl + "Illa de AscensiónAndorraEmiratos Árabes UnidosAfganistánAntiga e Barbuda" + + "AnguilaAlbaniaArmeniaAngolaAntártidaArxentinaSamoa AmericanaAustriaA" + + "ustraliaArubaIllas AlandAcerbaixánBosnia-HercegovinaBarbadosBangladé" + + "sBélxicaBurkina FasoBulgariaBahrainBurundiBeninSaint-BarthélemyBermu" + + "dasBruneiBoliviaCaribe NeerlandésBrasilBahamasButánIlla BouvetBotsua" + + "naBielorrusiaBeliceCanadáIllas Cocos (Keeling)República Democrática " + + "do CongoRepública CentroafricanaRepública do CongoSuízaCosta do Marf" + + "ilIllas CookChileCamerúnA ChinaColombiaIlla ClippertonCosta RicaCuba" + + "Cabo VerdeCuraçaoIlla de NadalChipreRepública ChecaAlemañaDiego Garc" + + "íaDjibutiDinamarcaDominicaRepública DominicanaAlxeriaCeuta e Melill" + + "aEcuadorEstoniaExiptoSáhara OccidentalEritreaEspañaEtiopíaUnión Euro" + + "peaFinlandiaFidxiIllas MalvinasMicronesiaIllas FeroeFranciaGabónRein" + + "o UnidoGranadaXeorxiaGüiana FrancesaGuernseyGhanaXibraltarGroenlandi" + + "aGambiaGuineaGuadalupeGuinea EcuatorialGreciaIllas Xeorxia do Sur e " + + "Sandwich do SurGuatemalaGuamGuinea-BisauGüianaHong Kong RAE de China" + + "Illa Heard e Illas McDonaldHondurasCroaciaHaitíHungríaIllas Canarias" + + "IndonesiaIrlandaIsraelIlla de ManA IndiaTerritorio Británico do Océa" + + "no ÍndicoIraqIránIslandiaItaliaJerseyXamaicaXordaniaO XapónKenyaQuir" + + "guicistánCamboxaKiribatiComoresSaint Kitts e NevisCorea do NorteCore" + + "a do SurKuwaitIllas CaimánCasaquistánLaosLíbanoSanta LucíaLiechtenst" + + "einSri LankaLiberiaLesotoLituaniaLuxemburgoLetoniaLibiaMarrocosMónac" + + "oMoldaviaMontenegroSaint-MartinMadagascarIllas MarshallMacedoniaMalí" + + "Myanmar (Birmania)MongoliaMacau RAE de ChinaIllas Marianas do NorteM" + + "artinicaMauritaniaMontserratMaltaMauricioMaldivasMalauiMéxicoMalaisi" + + "aMozambiqueNamibiaNova CaledoniaNíxerIlla NorfolkNixeriaNicaraguaPaí" + + "ses BaixosNoruegaNepalNauruNiueNova ZelandiaOmánPanamáPerúPolinesia " + + "FrancesaPapúa-Nova GuineaFilipinasPaquistánPoloniaSaint Pierre e Miq" + + "uelonIllas PitcairnPorto RicoTerritorios palestinosPortugalPalauPara" + + "guaiQatarTerritorios afastados de OceaníaReuniónRomaníaSerbiaRusiaRu" + + "andaArabia SauditaIllas SalomónSeixelesSudánSueciaSingapurSanta Hele" + + "naEsloveniaSvalbard e Jan MayenEslovaquiaSerra LeoaSan MarinoSenegal" + + "SomaliaSurinameSudán do surSan Tomé e PríncipeO SalvadorSint Maarten" + + "SiriaSuacilandiaTristán da CunhaIllas Turks e CaicosChadTerritorios " + + "Austrais FrancesesTogoTailandiaTaxiquistánToquelauTimor LesteTurcome" + + "nistánTunisiaTongaTurquíaTrinidad e TobagoTuvaluTaiwánTanzaniaUcraín" + + "aUgandaIllas Ultramarinas dos EUANacións UnidasEstados Unidos de Amé" + + "ricaUruguaiUzbekistánCidade do VaticanoSan Vicente e as GranadinasVe" + + "nezuelaIllas Virxes BritánicasIllas Virxes EstadounidensesVietnamVan" + + "uatuWallis e FutunaSamoaKosovoIemenMayotteSuráfricaZambiaCimbabuerex" + + "ión descoñecidamundoÁfricaNorteaméricaSuraméricaOceaníaÁfrica Occide" + + "ntalAmérica CentralÁfrica OrientalÁfrica SetentrionalÁfrica CentralÁ" + + "frica MeridionalAméricaAmérica do NorteCaribeAsia OrientalAsia Merid" + + "ionalSueste AsiáticoEuropa MeridionalAustralasiaMelanesiarexión da M" + + "icronesiaPolinesiaAsiaAsia CentralAsia OccidentalEuropaEuropa do Les" + + "teEuropa SetentrionalEuropa OccidentalAmérica Latina", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0012, 0x0019, 0x0030, 0x003b, 0x004b, 0x0052, 0x0059, + 0x0060, 0x0066, 0x0070, 0x0079, 0x0088, 0x008f, 0x0098, 0x009d, + 0x00a8, 0x00b3, 0x00c5, 0x00cd, 0x00d7, 0x00df, 0x00eb, 0x00f3, + 0x00fa, 0x0101, 0x0106, 0x0117, 0x011f, 0x0125, 0x012c, 0x013e, + 0x0144, 0x014b, 0x0151, 0x015c, 0x0164, 0x016f, 0x0175, 0x017c, + 0x0191, 0x01b1, 0x01ca, 0x01dd, 0x01e3, 0x01f2, 0x01fc, 0x0201, + 0x0209, 0x0210, 0x0218, 0x0227, 0x0231, 0x0235, 0x023f, 0x0247, + 0x0254, 0x025a, 0x026a, 0x0272, 0x027f, 0x0286, 0x028f, 0x0297, + // Entry 40 - 7F + 0x02ac, 0x02b3, 0x02c2, 0x02c9, 0x02d0, 0x02d6, 0x02e8, 0x02ef, + 0x02f6, 0x02fe, 0x030c, 0x030c, 0x0315, 0x031a, 0x0328, 0x0332, + 0x033d, 0x0344, 0x034a, 0x0355, 0x035c, 0x0363, 0x0373, 0x037b, + 0x0380, 0x0389, 0x0394, 0x039a, 0x03a0, 0x03a9, 0x03ba, 0x03c0, + 0x03e6, 0x03ef, 0x03f3, 0x03ff, 0x0406, 0x041c, 0x0437, 0x043f, + 0x0446, 0x044c, 0x0454, 0x0462, 0x046b, 0x0472, 0x0478, 0x0483, + 0x048a, 0x04b2, 0x04b6, 0x04bb, 0x04c3, 0x04c9, 0x04cf, 0x04d6, + 0x04de, 0x04e6, 0x04eb, 0x04f9, 0x0500, 0x0508, 0x050f, 0x0522, + // Entry 80 - BF + 0x0530, 0x053c, 0x0542, 0x054f, 0x055b, 0x055f, 0x0566, 0x0572, + 0x057f, 0x0588, 0x058f, 0x0595, 0x059d, 0x05a7, 0x05ae, 0x05b3, + 0x05bb, 0x05c2, 0x05ca, 0x05d4, 0x05e0, 0x05ea, 0x05f8, 0x0601, + 0x0606, 0x0618, 0x0620, 0x0632, 0x0649, 0x0652, 0x065c, 0x0666, + 0x066b, 0x0673, 0x067b, 0x0681, 0x0688, 0x0690, 0x069a, 0x06a1, + 0x06af, 0x06b5, 0x06c1, 0x06c8, 0x06d1, 0x06df, 0x06e6, 0x06eb, + 0x06f0, 0x06f4, 0x0701, 0x0706, 0x070d, 0x0712, 0x0724, 0x0736, + 0x073f, 0x0749, 0x0750, 0x0767, 0x0775, 0x077f, 0x0795, 0x079d, + // Entry C0 - FF + 0x07a2, 0x07aa, 0x07af, 0x07d0, 0x07d8, 0x07e0, 0x07e6, 0x07eb, + 0x07f1, 0x07ff, 0x080d, 0x0815, 0x081b, 0x0821, 0x0829, 0x0835, + 0x083e, 0x0852, 0x085c, 0x0866, 0x0870, 0x0877, 0x087e, 0x0886, + 0x0893, 0x08a8, 0x08b2, 0x08be, 0x08c3, 0x08ce, 0x08df, 0x08f3, + 0x08f7, 0x0915, 0x0919, 0x0922, 0x092e, 0x0936, 0x0941, 0x094f, + 0x0956, 0x095b, 0x0963, 0x0974, 0x097a, 0x0981, 0x0989, 0x0991, + 0x0997, 0x09b1, 0x09c0, 0x09da, 0x09e1, 0x09ec, 0x09fe, 0x0a19, + 0x0a22, 0x0a3a, 0x0a56, 0x0a5d, 0x0a64, 0x0a73, 0x0a78, 0x0a7e, + // Entry 100 - 13F + 0x0a83, 0x0a8a, 0x0a94, 0x0a9a, 0x0aa2, 0x0ab6, 0x0abb, 0x0ac2, + 0x0acf, 0x0ada, 0x0ae2, 0x0af4, 0x0b04, 0x0b14, 0x0b28, 0x0b37, + 0x0b49, 0x0b51, 0x0b62, 0x0b68, 0x0b75, 0x0b84, 0x0b94, 0x0ba5, + 0x0bb0, 0x0bb9, 0x0bce, 0x0bd7, 0x0bdb, 0x0be7, 0x0bf6, 0x0bfc, + 0x0c0b, 0x0c1e, 0x0c2f, 0x0c3e, + }, + }, + { // gsw + "AndorraVeräinigti Arabischi EmirateAfganischtanAntigua und BarbudaAnguil" + + "laAlbaanieArmeenieAngoolaAntarktisArgentiinieAmerikaanisch-SamoaÖösc" + + "htriichAuschtraalieArubaAaland-InsleAserbäidschanBosnie und Herzegow" + + "inaBarbadosBangladeschBelgieBurkina FaasoBulgaarieBachräinBurundiBen" + + "inSt. BarthelemiBermuudaBrunäi TarussalamBoliivieBrasilieBahaamasBhu" + + "tanBouvet-InsleBotswanaWiissrusslandBelizeKanadaKokos-InsleTemokraat" + + "ischi Republik KongoZentraalafrikaanischi RepublikKongoSchwiizElfebä" + + "iküschteCook-InsleTschileKamerunChiinaKolumbieCoschta RicaKubaKap Ve" + + "rdeWienachts-InsleZypereTschechischi RepublikTüütschlandTschibuutiTä" + + "nemarkTominicaTominikaanischi RepublikAlgeerieEcuadorEestlandÄgüpteW" + + "eschtsaharaÄritreeaSchpanieÄthiopieEuropääischi UnioonFinnlandFitsch" + + "iFalkland-InsleMikroneesieFäröerFrankriichGabunVeräinigts Chönigriic" + + "hGrenadaGeoorgieFranzösisch-GuäjaanaGäärnsiGaanaGibraltarGröönlandGa" + + "mbiaGineeaGuadälupÄquatoriaalgineeaGriechelandSüüdgeorgie und d’süüd" + + "lichi Sändwitsch-InsleGuatemaalaGuamGineea-BissauGuäjaanaSonderverwa" + + "ltigszone HongkongHöörd- und MäcDonald-InsleHondurasKroaazieHaitiUng" + + "arnIndoneesieIrlandIsraelInsle vo MänIndieBritischs Territoorium im " + + "Indische OozeanIraakIraanIislandItaalieDschörsiDschamäikaJordaanieJa" + + "panKeeniaKirgiisischtanKambodschaKiribaatiKomooreSt. Kitts und Niuwi" + + "sDemokraatischi Volksrepublik KoreeaRepublik KoreeaKuwäitKäimän-Insl" + + "eKasachschtanLaaosLibanonSt. LutschiiaLiächteschtäiSchri LankaLibeer" + + "iaLesootoLittaueLuxemburgLettlandLüübieMarokkoMonacoRepublik MoldauM" + + "onteneegroSt. MartinMadagaschkarMarshallinsleMazedoonieMaaliMyanmar " + + "(Burma)MongoleiSonderverwaltigszone MacaoNördlichi MariaaneMartinigg" + + "MauretaanieMoosörratMaltaMauriiziusMalediiweMalaawiMexikoMaläisiaMos" + + "ambikNamiibiaNöikaledoonieNigerNorfolk-InsleNigeeriaNicaraaguaHollan" + + "dNorweegeNeepalNauruNiueNöiseelandOmaanPanamaPeruFranzösisch-Polinee" + + "siePapua-NeuguineaPhilippiinePakischtanPooleSt. Pierr und MiggeloPit" + + "ggäärnPuerto RiggoPaläschtinänsischi GebietPortugalPalauParaguaiGgat" + + "arÜssers OzeaanieReünioonRumäänieSärbieRusslandRuandaSaudi-AraabieSa" + + "lomooneSeischälleSudanSchweedeSingapuurSt. HelenaSloweenieSvalbard u" + + "nd Jaan MääieSlowakäiSierra LeooneSan MariinoSenegalSomaalieSurinamS" + + "ao Tome und PrinssipeEl SalvadorSüürieSwasilandTörks- und Gaiggos-In" + + "sleTschadFranzösischi Süüd- und AntarktisgebietToogoThailandTadschik" + + "ischtanTokelauOschttimorTurkmeenischtanTuneesieTongaTürggeiTrinidad " + + "und TobaagoTuvaluTaiwanTansaniiaUkraiineUgandaAmerikanisch-OzeaanieV" + + "eräinigti SchtaateUruguayUschbeekischtanVatikanstadtSt. Vincent und " + + "d’GrönadiineVenezueelaBritischi Jungfere-InsleAmerikaanischi Jungfer" + + "e-InsleWietnamWanuatuWallis und FutuunaSamooaJeemeMajottSüüdafrikaSa" + + "mbiaSimbabweUnbekannti oder ungültigi RegioonWältAfrikaNordameerikaS" + + "üüdameerikaOzeaanieWeschtafrikaMittelameerikaOschtafrikaNordafrikaZ" + + "entraalafrikaSüüdlichs AfrikaNord-, Mittel- und SüüdameerikaNördlich" + + "s AmeerikaKaribikOschtaasieSüüdaasieSüüdoschtaasieSüüdeuropaAuschtra" + + "alie und NöiseelandMelaneesieMikroneesischs InselgebietPolineesieAas" + + "ieZentraalaasieWeschtaasieEuroopaOschteuroopaNordeuroopaWeschteuroop" + + "aLatiinameerika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0024, 0x0030, 0x0043, 0x004b, 0x0053, + 0x005b, 0x0062, 0x006b, 0x0076, 0x0089, 0x0096, 0x00a2, 0x00a7, + 0x00b3, 0x00c1, 0x00d7, 0x00df, 0x00ea, 0x00f0, 0x00fd, 0x0106, + 0x010f, 0x0116, 0x011b, 0x0129, 0x0131, 0x0143, 0x014b, 0x014b, + 0x0153, 0x015b, 0x0161, 0x016d, 0x0175, 0x0182, 0x0188, 0x018e, + 0x0199, 0x01b6, 0x01d4, 0x01d9, 0x01e0, 0x01f0, 0x01fa, 0x0201, + 0x0208, 0x020e, 0x0216, 0x0216, 0x0222, 0x0226, 0x022f, 0x022f, + 0x023e, 0x0244, 0x0259, 0x0266, 0x0266, 0x0270, 0x0279, 0x0281, + // Entry 40 - 7F + 0x0299, 0x02a1, 0x02a1, 0x02a8, 0x02b0, 0x02b8, 0x02c4, 0x02cd, + 0x02d5, 0x02de, 0x02f3, 0x02f3, 0x02fb, 0x0302, 0x0310, 0x031b, + 0x0323, 0x032d, 0x0332, 0x034a, 0x0351, 0x0359, 0x036f, 0x0378, + 0x037d, 0x0386, 0x0391, 0x0397, 0x039d, 0x03a6, 0x03b8, 0x03c3, + 0x03f6, 0x0400, 0x0404, 0x0411, 0x041a, 0x0437, 0x0454, 0x045c, + 0x0464, 0x0469, 0x046f, 0x046f, 0x0479, 0x047f, 0x0485, 0x0492, + 0x0497, 0x04c0, 0x04c5, 0x04ca, 0x04d1, 0x04d8, 0x04e1, 0x04ec, + 0x04f5, 0x04fa, 0x0500, 0x050e, 0x0518, 0x0521, 0x0528, 0x053c, + // Entry 80 - BF + 0x055f, 0x056e, 0x0575, 0x0583, 0x058f, 0x0594, 0x059b, 0x05a8, + 0x05b7, 0x05c2, 0x05ca, 0x05d1, 0x05d8, 0x05e1, 0x05e9, 0x05f1, + 0x05f8, 0x05fe, 0x060d, 0x0618, 0x0622, 0x062e, 0x063b, 0x0645, + 0x064a, 0x0659, 0x0661, 0x067b, 0x068e, 0x0697, 0x06a2, 0x06ac, + 0x06b1, 0x06bb, 0x06c4, 0x06cb, 0x06d1, 0x06da, 0x06e2, 0x06ea, + 0x06f8, 0x06fd, 0x070a, 0x0712, 0x071c, 0x0723, 0x072b, 0x0731, + 0x0736, 0x073a, 0x0745, 0x074a, 0x0750, 0x0754, 0x076b, 0x077a, + 0x0785, 0x078f, 0x0794, 0x07a9, 0x07b4, 0x07c0, 0x07db, 0x07e3, + // Entry C0 - FF + 0x07e8, 0x07f0, 0x07f6, 0x0806, 0x080f, 0x0819, 0x0820, 0x0828, + 0x082e, 0x083b, 0x0844, 0x084f, 0x0854, 0x085c, 0x0865, 0x086f, + 0x0878, 0x0891, 0x089a, 0x08a7, 0x08b2, 0x08b9, 0x08c1, 0x08c8, + 0x08c8, 0x08de, 0x08e9, 0x08e9, 0x08f1, 0x08fa, 0x08fa, 0x0913, + 0x0919, 0x0942, 0x0947, 0x094f, 0x095e, 0x0965, 0x096f, 0x097e, + 0x0986, 0x098b, 0x0993, 0x09a7, 0x09ad, 0x09b3, 0x09bc, 0x09c4, + 0x09ca, 0x09df, 0x09df, 0x09f3, 0x09fa, 0x0a09, 0x0a15, 0x0a34, + 0x0a3e, 0x0a56, 0x0a73, 0x0a7a, 0x0a81, 0x0a93, 0x0a99, 0x0a99, + // Entry 100 - 13F + 0x0a9e, 0x0aa4, 0x0ab0, 0x0ab6, 0x0abe, 0x0ae0, 0x0ae5, 0x0aeb, + 0x0af7, 0x0b05, 0x0b0d, 0x0b19, 0x0b27, 0x0b32, 0x0b3c, 0x0b4a, + 0x0b5c, 0x0b7d, 0x0b90, 0x0b97, 0x0ba1, 0x0bac, 0x0bbc, 0x0bc8, + 0x0be4, 0x0bee, 0x0c08, 0x0c12, 0x0c17, 0x0c24, 0x0c2f, 0x0c36, + 0x0c42, 0x0c4d, 0x0c5a, 0x0c68, + }, + }, + { // gu + guRegionStr, + guRegionIdx, + }, + { // guz + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // gv + "Rywvaneth UnysEllan Vannin", + []uint16{ // 112 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x001a, + }, + }, + { // ha + "AndoraHaɗaɗɗiyar Daular LarabawaAfaganistanAntigwa da BarbubaAngilaAlban" + + "iyaArmeniyaAngolaArjantiniyaSamowa Ta AmurkaOstiriyaOstareliyaArubaA" + + "zarbaijanBosniya HarzagobinaBarbadasBangiladasBelgiyomBurkina FasoBu" + + "lgariyaBaharanBurundiBininBarmudaBuruneBolibiyaBirazilBahamasButanBa" + + "swanaBelarusBelizKanadaJamhuriyar Dimokuraɗiyyar KongoJamhuriyar Afi" + + "rka Ta TsakiyaKongoSuwizalanAibari KwasTsibiran KukuCayileKamaruCain" + + "a, SinKolambiyaKwasta RikaKyubaTsibiran Kap BardeSifurusJamhuriyar C" + + "akJamusJibutiDanmarkDominikaJamhuriyar DominikaAljeriyaEkwadorEstoni" + + "yaMasar, MisiraEritireyaSipenHabashaFinlanFijiTsibiran FalkilanMikur" + + "onesiyaFaransaGabonBirtaniyaGirnadaJiwarjiyaGini Ta FaransaGanaJibar" + + "altarGrinlanGambiyaGiniGwadalufGini Ta IkwaitaGirkaGwatamalaGwamGini" + + " BisauGuyanaHondurasKurowaishiyaHaitiHungariIndunusiyaAyalanIziraʼil" + + "aIndiyaYankin Birtaniya Na Tekun IndiyaIraƙiIranAisalanItaliyaJamaik" + + "aJordanJapanKenyaKirgizistanKambodiyaKiribatiKwamorasSan Kiti Da Neb" + + "isKoreya Ta ArewaKoreya Ta KuduKwiyatTsibiran KaimanKazakistanLawasL" + + "abananSan LusiyaLicansitanSiri LankaLaberiyaLesotoLituweniyaLukusamb" + + "urlatibiyaLibiyaMarokoMonakoMaldobaMadagaskarTsibiran MarshalMasedon" + + "iyaMaliBurma, MiyamarMangoliyaTsibiran Mariyana Na ArewaMartinikMori" + + "taniyaManseratiMaltaMoritusMaldibiMalawiMakasikoMalaisiyaMozambikNam" + + "ibiyaKaledoniya SabuwaNijarTsibirin NarfalkNajeriyaNikaraguwaHolanNo" + + "rweNefalNauruNiyuNuzilanOmanPanamaPeruFolinesiya Ta FaransaPapuwa Nu" + + "giniFilipinPakistanPolanSan Piyar Da MikelanPitakarinPorto RikoPalas" + + "ɗinuPortugalPalauParagaiKwatarRawuniyanRomaniyaRashaRuwandaƘasar Ma" + + "kkaTsibiran SalamanSaishalSudanSuwedanSingapurSan HelenaSulobeniyaSu" + + "lobakiyaSalewoSan MarinoSinigalSomaliyaSurinameSawo Tome Da Paransip" + + "El SalbadorSham, SiriyaSuwazilanTurkis Da Tsibiran KaikwasCadiTogoTa" + + "ilanTajikistanTakelauTimor Ta GabasTurkumenistanTunisiyaTangaTurkiyy" + + "aTirinidad Da TobagoTubaluTaiwanTanzaniyaYukaranYugandaAmurkaYurugai" + + "UzubekistanBatikanSan Binsan Da GirnadinBenezuwelaTsibirin Birjin Na" + + " BirtaniyaTsibiran Birjin Ta AmurkaBiyetinamBanuwatuWalis Da FutunaS" + + "amowaYamalMayotiAfirka Ta KuduZambiyaZimbabuwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0023, 0x002e, 0x0040, 0x0046, 0x004e, + 0x0056, 0x005c, 0x005c, 0x0067, 0x0077, 0x007f, 0x0089, 0x008e, + 0x008e, 0x0098, 0x00ab, 0x00b3, 0x00bd, 0x00c5, 0x00d1, 0x00da, + 0x00e1, 0x00e8, 0x00ed, 0x00ed, 0x00f4, 0x00fa, 0x0102, 0x0102, + 0x0109, 0x0110, 0x0115, 0x0115, 0x011c, 0x0123, 0x0128, 0x012e, + 0x012e, 0x014e, 0x016a, 0x016f, 0x0178, 0x0183, 0x0190, 0x0196, + 0x019c, 0x01a6, 0x01af, 0x01af, 0x01ba, 0x01bf, 0x01d1, 0x01d1, + 0x01d1, 0x01d8, 0x01e6, 0x01eb, 0x01eb, 0x01f1, 0x01f8, 0x0200, + // Entry 40 - 7F + 0x0213, 0x021b, 0x021b, 0x0222, 0x022a, 0x0237, 0x0237, 0x0240, + 0x0245, 0x024c, 0x024c, 0x024c, 0x0252, 0x0256, 0x0267, 0x0273, + 0x0273, 0x027a, 0x027f, 0x0288, 0x028f, 0x0298, 0x02a7, 0x02a7, + 0x02ab, 0x02b5, 0x02bc, 0x02c3, 0x02c7, 0x02cf, 0x02de, 0x02e3, + 0x02e3, 0x02ec, 0x02f0, 0x02fa, 0x0300, 0x0300, 0x0300, 0x0308, + 0x0314, 0x0319, 0x0320, 0x0320, 0x032a, 0x0330, 0x033a, 0x033a, + 0x0340, 0x0360, 0x0366, 0x036a, 0x0371, 0x0378, 0x0378, 0x037f, + 0x0385, 0x038a, 0x038f, 0x039a, 0x03a3, 0x03ab, 0x03b3, 0x03c4, + // Entry 80 - BF + 0x03d3, 0x03e1, 0x03e7, 0x03f6, 0x0400, 0x0405, 0x040c, 0x0416, + 0x0420, 0x042a, 0x0432, 0x0438, 0x0442, 0x044c, 0x0454, 0x045a, + 0x0460, 0x0466, 0x046d, 0x046d, 0x046d, 0x0477, 0x0487, 0x0491, + 0x0495, 0x04a3, 0x04ac, 0x04ac, 0x04c6, 0x04ce, 0x04d8, 0x04e1, + 0x04e6, 0x04ed, 0x04f4, 0x04fa, 0x0502, 0x050b, 0x0513, 0x051b, + 0x052c, 0x0531, 0x0541, 0x0549, 0x0553, 0x0558, 0x055d, 0x0562, + 0x0567, 0x056b, 0x0572, 0x0576, 0x057c, 0x0580, 0x0595, 0x05a2, + 0x05a9, 0x05b1, 0x05b6, 0x05ca, 0x05d3, 0x05dd, 0x05e7, 0x05ef, + // Entry C0 - FF + 0x05f4, 0x05fb, 0x0601, 0x0601, 0x060a, 0x0612, 0x0612, 0x0617, + 0x061e, 0x062a, 0x063a, 0x0641, 0x0646, 0x064d, 0x0655, 0x065f, + 0x0669, 0x0669, 0x0673, 0x0679, 0x0683, 0x068a, 0x0692, 0x069a, + 0x069a, 0x06af, 0x06ba, 0x06ba, 0x06c6, 0x06cf, 0x06cf, 0x06e9, + 0x06ed, 0x06ed, 0x06f1, 0x06f7, 0x0701, 0x0708, 0x0716, 0x0723, + 0x072b, 0x0730, 0x0738, 0x074b, 0x0751, 0x0757, 0x0760, 0x0767, + 0x076e, 0x076e, 0x076e, 0x0774, 0x077b, 0x0786, 0x078d, 0x07a3, + 0x07ad, 0x07c9, 0x07e2, 0x07eb, 0x07f3, 0x0802, 0x0808, 0x0808, + // Entry 100 - 13F + 0x080d, 0x0813, 0x0821, 0x0828, 0x0831, + }, + }, + { // haw + "NūhōlaniKanakāKinaKelemāniaKenemakaKepaniaPalaniAupuni Mōʻī Hui Pū ʻIaHe" + + "leneʻIlelaniʻIseraʻelaʻĪniaʻĪkāliaIāpanaMekikoHōlaniAotearoaʻĀina Pi" + + "lipinoLūkiaʻAmelika Hui Pū ʻIa", + []uint16{ // 244 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x001f, 0x001f, 0x001f, 0x0027, 0x0027, + // Entry 40 - 7F + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x0034, 0x0034, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x005e, 0x006a, 0x006a, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x007b, 0x007b, 0x007b, + 0x007b, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + // Entry 80 - BF + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0088, 0x0088, 0x0088, 0x0088, + 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, + 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, + // Entry C0 - FF + 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00c3, + }, + }, + { // he + heRegionStr, + heRegionIdx, + }, + { // hi + hiRegionStr, + hiRegionIdx, + }, + { // hr + hrRegionStr, + hrRegionIdx, + }, + { // hsb + "AscensionAndorraZjednoćene arabske emiratyAfghanistanAntigua a BarbudaAn" + + "guillaAlbanskaArmenskaAngolaAntarktikaArgentinskaAmeriska SamoaAwstr" + + "iskaAwstralskaArubaÅlandAzerbajdźanBosniska a HercegowinaBarbadosBan" + + "gladešBelgiskaBurkina FasoBołharskaBahrainBurundiBeninSt. Barthélemy" + + "BermudyBruneiBoliwiskaKaribiska NižozemskaBrazilskaBahamyBhutanBouve" + + "towa kupaBotswanaBěłoruskaBelizeKanadaKokosowe kupyKongo-KinshasaCen" + + "tralnoafriska republikaKongo-BrazzavilleŠwicarskaCôte d’IvoireCookow" + + "e kupyChilskaKamerunChinaKolumbiskaClippertonowa kupaKosta RikaKubaK" + + "ap VerdeCuraçaoHodowna kupaCypernČěska republikaNěmskaDiego GarciaDź" + + "ibutiDanskaDominikaDominikanska republikaAlgeriskaCeuta a MelillaEkw" + + "adorEstiskaEgyptowskaZapadna SaharaEritrejaŠpaniskaEtiopiskaEuropska" + + " unijaFinskaFidźiFalklandske kupyMikroneziskaFäröske kupyFrancoskaGa" + + "bunZjednoćene kralestwoGrenadaGeorgiskaFrancoska GuyanaGuernseyGhana" + + "GibraltarGrönlandskaGambijaGinejaGuadeloupeEkwatorialna GinejaGrjeks" + + "kaJužna Georgiska a Južne Sandwichowe kupyGuatemalaGuamGineja-Bissau" + + "GuyanaWosebita zarjadniska cona HongkongHeardowa kupa a McDonaldowe " + + "kupyHondurasChorwatskaHaitiMadźarskaKanariske kupyIndoneskaIrskaIsra" + + "elManIndiskaBritiski teritorij w Indiskim oceanjeIrakIranIslandskaIt" + + "alskaJerseyJamaikaJordaniskaJapanskaKenijaKirgizistanKambodźaKiribat" + + "iKomorySt. Kitts a NevisSewjerna KorejaJužna KorejaKuwaitKajmanske k" + + "upyKazachstanLaosLibanonSt. LuciaLiechtensteinSri LankaLiberijaLesot" + + "hoLitawskaLuxemburgskaLetiskaLibyskaMarokkoMonacoMoldawskaMontenegro" + + "St. MartinMadagaskarMarshallowe kupyMakedonskaMaliMyanmarMongolskaWo" + + "sebita zarjadniska cona MacaoSewjerne MarianyMartiniqueMawretanskaMo" + + "ntserratMaltaMauritiusMalediwyMalawiMexikoMalajzijaMosambikNamibijaN" + + "owa KaledoniskaNigerNorfolkowa kupaNigerijaNikaraguaNižozemskaNorweg" + + "skaNepalNauruNiueNowoseelandskaOmanPanamaPeruFrancoska PolyneziskaPa" + + "puwa-Nowa GinejaFilipinyPakistanPólskaSt. Pierre a MiquelonPitcairno" + + "we kupyPuerto RicoPalestinski awtonomny teritorijPortugalskaPalauPar" + + "aguayKatarWonkowna OceaniskaRéunionRumunskaSerbiskaRuskaRuandaSawdi-" + + "ArabskaSalomonySeychelleSudanŠwedskaSingapurSt. HelenaSłowjenskaSval" + + "bard a Jan MayenSłowakskaSierra LeoneSan MarinoSenegalSomalijaSurina" + + "mJužny SudanSão Tomé a PríncipeEl SalvadorSint MaartenSyriskaSwazisk" + + "aTristan da Cunhakupy Turks a CaicosČadFrancoski južny a antarktiski" + + " teritorijTogoThailandskaTadźikistanTokelauTimor-LesteTurkmeniskaTun" + + "eziskaTongaTurkowskaTrinidad a TobagoTuvaluTaiwanTansanijaUkrainaUga" + + "ndaAmeriska OceaniskaZjednoćene staty AmerikiUruguayUzbekistanVatika" + + "nske městoSt. Vincent a GrenadinyVenezuelaBritiske knježniske kupyAm" + + "eriske knježniske kupyVietnamVanuatuWallis a FutunaSamoaKosowoJemenM" + + "ayotteJužna Afrika (Republika)SambijaSimbabwenjeznaty regionswětAfri" + + "kaSewjerna AmerikaJužna AmerikaOceaniskazapadna AfrikaSrjedźna Ameri" + + "kawuchodna Afrikasewjerna Afrikasrjedźna Afrikajužna AfrikaAmerikase" + + "wjerny ameriski kontinentKaribikawuchodna Azijajužna Azijajuhowuchod" + + "na Azijajužna EuropaAwstralazijaMelaneziskaMikroneziska (kupowy regi" + + "on)PolyneziskaAzijacentralna Azijazapadna AzijaEuropawuchodna Europa" + + "sewjerna Europazapadna EuropaŁaćonska Amerika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002b, 0x0036, 0x0047, 0x004f, 0x0057, + 0x005f, 0x0065, 0x006f, 0x007a, 0x0088, 0x0091, 0x009b, 0x00a0, + 0x00a6, 0x00b2, 0x00c8, 0x00d0, 0x00da, 0x00e2, 0x00ee, 0x00f8, + 0x00ff, 0x0106, 0x010b, 0x011a, 0x0121, 0x0127, 0x0130, 0x0145, + 0x014e, 0x0154, 0x015a, 0x0168, 0x0170, 0x017b, 0x0181, 0x0187, + 0x0194, 0x01a2, 0x01bc, 0x01cd, 0x01d7, 0x01e7, 0x01f3, 0x01fa, + 0x0201, 0x0206, 0x0210, 0x0222, 0x022c, 0x0230, 0x0239, 0x0241, + 0x024d, 0x0253, 0x0264, 0x026b, 0x0277, 0x027f, 0x0285, 0x028d, + // Entry 40 - 7F + 0x02a3, 0x02ac, 0x02bb, 0x02c2, 0x02c9, 0x02d3, 0x02e1, 0x02e9, + 0x02f2, 0x02fb, 0x0309, 0x0309, 0x030f, 0x0315, 0x0325, 0x0331, + 0x033f, 0x0348, 0x034d, 0x0362, 0x0369, 0x0372, 0x0382, 0x038a, + 0x038f, 0x0398, 0x03a4, 0x03ab, 0x03b1, 0x03bb, 0x03ce, 0x03d6, + 0x0400, 0x0409, 0x040d, 0x041a, 0x0420, 0x0442, 0x0462, 0x046a, + 0x0474, 0x0479, 0x0483, 0x0491, 0x049a, 0x049f, 0x04a5, 0x04a8, + 0x04af, 0x04d4, 0x04d8, 0x04dc, 0x04e5, 0x04ec, 0x04f2, 0x04f9, + 0x0503, 0x050b, 0x0511, 0x051c, 0x0525, 0x052d, 0x0533, 0x0544, + // Entry 80 - BF + 0x0553, 0x0560, 0x0566, 0x0574, 0x057e, 0x0582, 0x0589, 0x0592, + 0x059f, 0x05a8, 0x05b0, 0x05b7, 0x05bf, 0x05cb, 0x05d2, 0x05d9, + 0x05e0, 0x05e6, 0x05ef, 0x05f9, 0x0603, 0x060d, 0x061d, 0x0627, + 0x062b, 0x0632, 0x063b, 0x065a, 0x066a, 0x0674, 0x067f, 0x0689, + 0x068e, 0x0697, 0x069f, 0x06a5, 0x06ab, 0x06b4, 0x06bc, 0x06c4, + 0x06d4, 0x06d9, 0x06e8, 0x06f0, 0x06f9, 0x0704, 0x070d, 0x0712, + 0x0717, 0x071b, 0x0729, 0x072d, 0x0733, 0x0737, 0x074c, 0x075e, + 0x0766, 0x076e, 0x0775, 0x078a, 0x079a, 0x07a5, 0x07c4, 0x07cf, + // Entry C0 - FF + 0x07d4, 0x07dc, 0x07e1, 0x07f3, 0x07fb, 0x0803, 0x080b, 0x0810, + 0x0816, 0x0823, 0x082b, 0x0834, 0x0839, 0x0841, 0x0849, 0x0853, + 0x085e, 0x0872, 0x087c, 0x0888, 0x0892, 0x0899, 0x08a1, 0x08a8, + 0x08b4, 0x08ca, 0x08d5, 0x08e1, 0x08e8, 0x08f0, 0x0900, 0x0913, + 0x0917, 0x093f, 0x0943, 0x094e, 0x095a, 0x0961, 0x096c, 0x0977, + 0x0980, 0x0985, 0x098e, 0x099f, 0x09a5, 0x09ab, 0x09b4, 0x09bb, + 0x09c1, 0x09d3, 0x09d3, 0x09ec, 0x09f3, 0x09fd, 0x0a0e, 0x0a25, + 0x0a2e, 0x0a47, 0x0a60, 0x0a67, 0x0a6e, 0x0a7d, 0x0a82, 0x0a88, + // Entry 100 - 13F + 0x0a8d, 0x0a94, 0x0aad, 0x0ab4, 0x0abc, 0x0acb, 0x0ad0, 0x0ad6, + 0x0ae6, 0x0af4, 0x0afd, 0x0b0b, 0x0b1c, 0x0b2b, 0x0b3a, 0x0b4a, + 0x0b57, 0x0b5e, 0x0b79, 0x0b81, 0x0b8f, 0x0b9b, 0x0bad, 0x0bba, + 0x0bc6, 0x0bd1, 0x0bed, 0x0bf8, 0x0bfd, 0x0c0c, 0x0c19, 0x0c1f, + 0x0c2e, 0x0c3d, 0x0c4b, 0x0c5d, + }, + }, + { // hu + huRegionStr, + huRegionIdx, + }, + { // hy + hyRegionStr, + hyRegionIdx, + }, + { // id + idRegionStr, + idRegionIdx, + }, + { // ig + "BininBemudaChainaHatiComorosuLibyiaMaldivesaNigeria", + []uint16{ // 172 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0005, 0x0005, 0x000b, 0x000b, 0x000b, 0x000b, + 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, + 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, + 0x000b, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + // Entry 40 - 7F + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, + 0x0011, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001d, 0x001d, + // Entry 80 - BF + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x0033, + }, + }, + { // ii + "ꀠꑭꍏꇩꄓꇩꃔꇩꑱꇩꑴꄗꑴꄊꆺꏝꀪꊉꇆꌦꂰꇩꃅꄷꅉꀋꐚꌠ", + []uint16{ // 262 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + // Entry 40 - 7F + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0018, 0x0018, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x002d, 0x002d, 0x002d, + 0x002d, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + // Entry 80 - BF + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, + // Entry C0 - FF + 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + // Entry 100 - 13F + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0054, + }, + }, + { // is + isRegionStr, + isRegionIdx, + }, + { // it + itRegionStr, + itRegionIdx, + }, + { // ja + jaRegionStr, + jaRegionIdx, + }, + { // jgo + "Aŋgɔ́laAjɛntînMbulukína FásɔMbulundíMbɛnɛ̂ŋMbɔlivîMbɛlazîlMbɔtswánaKanad" + + "âKɔ́ŋgɔ-KinshásaKɔ́ŋgɔ-MbɛlazavîlSẅísɛKɔ́t NdivwâCíllɛKamɛlûnShînKɔ" + + "llɔmbîKúbaNjámanNjimbútiAljɛlîƐkwandɔ̂ƐjíptɛƐlitɛlɛ́yaƐspániyaƐtiyɔp" + + "îFɛlánciŊgabɔ̂ŋŊgánaŊgambîŊginɛ̂Ŋginɛ̂ ƐkwatɔliyâlŊgɛlɛ̂kŊginɛ̂ Mbi" + + "sáwuIslayɛ̂lÁndɛIlâkItalîJapɔ̂nKɛ́nyaKɔmɔ́lɔshiLibɛrîLɛsɔ́tɔLibîMɔlɔ" + + "̂kMándaŋgasɛkâMalîMɔlitanîMaláwiMɛksîkMɔzambîkNamimbîNijɛ̂Ninjɛliyâ" + + "Nɔlɛvɛ́jɛPɛlûLɛ́uniyɔ̂nSɛlɛbîLusîLuwándaPɛsɛ́shɛlSundânSiyɛ́la Lɛɔ̂n" + + "SɛnɛgâlSɔmalîSáwɔŋ Tɔmɛ́ nɛ́ PɛlínsipɛSwazilânCâtTɔ́ŋgɔTunizîTanzanî" + + "UŋgándaVɛnɛzwɛ́laMayɔ̂tZambîZimbámbwɛŋgɔŋ yi pɛ́ ká kɛ́ jʉɔMbíAfɛlîk" + + "AmɛlîkAzîɄlôp", + []uint16{ // 288 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000a, 0x000a, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, + 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0024, 0x0024, + 0x0024, 0x002d, 0x0038, 0x0038, 0x0038, 0x0038, 0x0041, 0x0041, + 0x004b, 0x004b, 0x004b, 0x004b, 0x0056, 0x0056, 0x0056, 0x005d, + 0x005d, 0x0071, 0x0071, 0x0088, 0x0091, 0x009f, 0x009f, 0x00a6, + 0x00af, 0x00b4, 0x00bf, 0x00bf, 0x00bf, 0x00c4, 0x00c4, 0x00c4, + 0x00c4, 0x00c4, 0x00c4, 0x00cb, 0x00cb, 0x00d4, 0x00d4, 0x00d4, + // Entry 40 - 7F + 0x00d4, 0x00dc, 0x00dc, 0x00e7, 0x00e7, 0x00f0, 0x00f0, 0x00fe, + 0x0108, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x011b, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, + 0x012d, 0x012d, 0x012d, 0x0135, 0x013e, 0x013e, 0x0156, 0x0161, + 0x0161, 0x0161, 0x0161, 0x0173, 0x0173, 0x0173, 0x0173, 0x0173, + 0x0173, 0x0173, 0x0173, 0x0173, 0x0173, 0x0173, 0x017d, 0x017d, + 0x0183, 0x0183, 0x0188, 0x0188, 0x0188, 0x018e, 0x018e, 0x018e, + 0x018e, 0x0196, 0x019e, 0x019e, 0x019e, 0x019e, 0x01ac, 0x01ac, + // Entry 80 - BF + 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, + 0x01ac, 0x01ac, 0x01b4, 0x01bf, 0x01bf, 0x01bf, 0x01bf, 0x01c4, + 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01dd, 0x01dd, 0x01dd, + 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01ec, 0x01ec, + 0x01ec, 0x01ec, 0x01ec, 0x01f3, 0x01fb, 0x01fb, 0x0205, 0x020d, + 0x020d, 0x0214, 0x0214, 0x021f, 0x021f, 0x021f, 0x022d, 0x022d, + 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x0233, 0x0233, 0x0233, + 0x0233, 0x0233, 0x0233, 0x0233, 0x0233, 0x0233, 0x0233, 0x0233, + // Entry C0 - FF + 0x0233, 0x0233, 0x0233, 0x0233, 0x0241, 0x0241, 0x024a, 0x024f, + 0x0257, 0x0257, 0x0257, 0x0264, 0x026b, 0x026b, 0x026b, 0x026b, + 0x026b, 0x026b, 0x026b, 0x027d, 0x027d, 0x0287, 0x028f, 0x028f, + 0x028f, 0x02b3, 0x02b3, 0x02b3, 0x02b3, 0x02bc, 0x02bc, 0x02bc, + 0x02c0, 0x02c0, 0x02ca, 0x02ca, 0x02ca, 0x02ca, 0x02ca, 0x02ca, + 0x02d1, 0x02d1, 0x02d1, 0x02d1, 0x02d1, 0x02d1, 0x02d9, 0x02d9, + 0x02e2, 0x02e2, 0x02e2, 0x02e2, 0x02e2, 0x02e2, 0x02e2, 0x02e2, + 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, + // Entry 100 - 13F + 0x02f0, 0x02f8, 0x02f8, 0x02fe, 0x0309, 0x0329, 0x032d, 0x0335, + 0x0335, 0x0335, 0x0335, 0x0335, 0x0335, 0x0335, 0x0335, 0x0335, + 0x0335, 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, + 0x033d, 0x033d, 0x033d, 0x033d, 0x0341, 0x0341, 0x0341, 0x0347, + }, + }, + { // jmc + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // ka + kaRegionStr, + kaRegionIdx, + }, + { // kab + "UnduraTigeldunin Yedduklen TaɛrabinAfɣanistanUntiga d BarbudaUngiyaLalba" + + "niArminyaUngulaArjuntinSamwa TamarikanitUstriyaUstraliArubaAzrabijan" + + "Busna d HersekBarbadusBangladacBelǧikBurkina FasuBulgariBaḥrinBurand" + + "iBininBermudaBruneyBuliviBrizilBahamasBhutanBustwanaBilarusBilizKana" + + "daTigduda Tagdudant n KunguTigduda n Tefriqt TalemmastKunguSwisKuṭ D" + + "ivwarTigzirin n KukCiliKamirunLacinKulumbiKusta RikaKubaTigzirin n y" + + "ixef azegzawCiprČčekLalmanǦibutiDenmarkDuminikTigduda TaduminikitLez" + + "zayerIkwaṭurIstunyaMaṣrIritiriaSpanyaUtyupiFinlundFijiTigzirin n Fal" + + "klandMikrunizyaFransaGabunTagelda YedduklenGrunadJiyurjiƔana tafrans" + + "istƔanaJibraltarGrunlandGambyaƔinyaGwadalupiƔinya TasebgastLagrisGwa" + + "timalaGwamƔinya-BisawGuwanaHundurasKerwasyaHaytiHungriInduniziLirlun" + + "dIzrayilLhendAkal Aglizi deg Ugaraw AhendiLɛiraqIranIslandṬelyanJamy" + + "ikaLajurdaniJappuKinyaKirigistanCambudyaKiribatiKumurSan Kits d Nivi" + + "sKurya, UfellaKurya, WaddaKuwaytTigzirin n KamyanKazaxistanLawsLubna" + + "nSan LučyaLayctenstanSri LankaLibiryaLizuṭuLiṭwanyaLuksamburgLatviaL" + + "ibyaLmerrukMunakuMuldabiMadaɣecqerTigzirin n MarcalMasidwanMaliMyanm" + + "arMungulyaTigzirin n Maryan UfellaMartinikMuriṭanyaMunsiratMalṭMuris" + + "MaldibMalawiMeksikMalizyaMuzembiqNamibyaKalidunya TamaynutNijerTigzi" + + "rin TinawfukinNijiryaNikaragwaTimura-YessakesrenNurvijNipalNuruNiwiZ" + + "iland TamaynutƐumanPanamPiruPulunizi tafransistƔinya Tamaynut Tapapu" + + "tFilipinPakistanPulundSan Pyar d MiklunPitkarinPurtu RikuFalisṭin d " + + "ƔezzaPurtugalPaluParagwayQaṭarTimlilitRumaniRrusRuwandaSuɛudiya Taɛ" + + "rabtTigzirin n SulumunSeycelSudanSwidSingafurSant IlinaSluvinyaSluva" + + "kyaSira LyunSan MarinuSinigalṢumalSurinamSaw Tumi d PransipSalvadurS" + + "uryaSwazilundṬurk d Tegzirin n KaykusČadṬuguṬaylandTajikistanṬukluTu" + + "mur AsamarṬurkmanistanTunesṬungaṬurkṬrindad d ṬubaguṬuvaluṬaywanṬanz" + + "anyaUkranUɣandaWDMUrugwayUzbaxistanAwanek n VatikanSan Vansu d Gruna" + + "dinVenzwilaTigzirin Tiverjiniyin TigliziyinW.D. Tigzirin n VirginyaV" + + "yeṭnamVanwatuWallis d FutunaSamwaLyamenMayuṭTafriqt WaddaZambyaZimba" + + "bwi", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0024, 0x002f, 0x003f, 0x0045, 0x004c, + 0x0053, 0x0059, 0x0059, 0x0061, 0x0072, 0x0079, 0x0080, 0x0085, + 0x0085, 0x008e, 0x009c, 0x00a4, 0x00ad, 0x00b4, 0x00c0, 0x00c7, + 0x00cf, 0x00d6, 0x00db, 0x00db, 0x00e2, 0x00e8, 0x00ee, 0x00ee, + 0x00f4, 0x00fb, 0x0101, 0x0101, 0x0109, 0x0110, 0x0115, 0x011b, + 0x011b, 0x0134, 0x014f, 0x0154, 0x0158, 0x0164, 0x0172, 0x0176, + 0x017d, 0x0182, 0x0189, 0x0189, 0x0193, 0x0197, 0x01af, 0x01af, + 0x01af, 0x01b3, 0x01b9, 0x01bf, 0x01bf, 0x01c6, 0x01cd, 0x01d4, + // Entry 40 - 7F + 0x01e7, 0x01ef, 0x01ef, 0x01f8, 0x01ff, 0x0205, 0x0205, 0x020d, + 0x0213, 0x0219, 0x0219, 0x0219, 0x0220, 0x0224, 0x0237, 0x0241, + 0x0241, 0x0247, 0x024c, 0x025d, 0x0263, 0x026a, 0x027a, 0x027a, + 0x027f, 0x0288, 0x0290, 0x0296, 0x029c, 0x02a5, 0x02b5, 0x02bb, + 0x02bb, 0x02c4, 0x02c8, 0x02d4, 0x02da, 0x02da, 0x02da, 0x02e2, + 0x02ea, 0x02ef, 0x02f5, 0x02f5, 0x02fd, 0x0304, 0x030b, 0x030b, + 0x0310, 0x032d, 0x0334, 0x0338, 0x033e, 0x0346, 0x0346, 0x034d, + 0x0356, 0x035b, 0x0360, 0x036a, 0x0372, 0x037a, 0x037f, 0x038f, + // Entry 80 - BF + 0x039c, 0x03a8, 0x03ae, 0x03bf, 0x03c9, 0x03cd, 0x03d3, 0x03dd, + 0x03e8, 0x03f1, 0x03f8, 0x0400, 0x040a, 0x0414, 0x041a, 0x041f, + 0x0426, 0x042c, 0x0433, 0x0433, 0x0433, 0x043e, 0x044f, 0x0457, + 0x045b, 0x0462, 0x046a, 0x046a, 0x0482, 0x048a, 0x0495, 0x049d, + 0x04a3, 0x04a8, 0x04ae, 0x04b4, 0x04ba, 0x04c1, 0x04c9, 0x04d0, + 0x04e2, 0x04e7, 0x04fa, 0x0501, 0x050a, 0x051c, 0x0522, 0x0527, + 0x052b, 0x052f, 0x053e, 0x0544, 0x0549, 0x054d, 0x0560, 0x0577, + 0x057e, 0x0586, 0x058c, 0x059d, 0x05a5, 0x05af, 0x05c2, 0x05ca, + // Entry C0 - FF + 0x05ce, 0x05d6, 0x05dd, 0x05dd, 0x05e5, 0x05eb, 0x05eb, 0x05ef, + 0x05f6, 0x0608, 0x061a, 0x0620, 0x0625, 0x0629, 0x0631, 0x063b, + 0x0643, 0x0643, 0x064b, 0x0654, 0x065e, 0x0665, 0x066c, 0x0673, + 0x0673, 0x0685, 0x068d, 0x068d, 0x0692, 0x069b, 0x069b, 0x06b5, + 0x06b9, 0x06b9, 0x06bf, 0x06c8, 0x06d2, 0x06d9, 0x06e5, 0x06f3, + 0x06f8, 0x06ff, 0x0705, 0x0719, 0x0721, 0x0729, 0x0733, 0x0738, + 0x073f, 0x073f, 0x073f, 0x0742, 0x0749, 0x0753, 0x0763, 0x0777, + 0x077f, 0x079f, 0x07b7, 0x07c0, 0x07c7, 0x07d6, 0x07db, 0x07db, + // Entry 100 - 13F + 0x07e1, 0x07e8, 0x07f5, 0x07fb, 0x0803, + }, + }, + { // kam + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "MbulundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarus" + + "iBelizeKanandaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya K" + + "atiKongoUswisiKodivaaIsiwa sya CookChileKameluniKyainaKolombiaKostar" + + "ikaKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominika" + + "Jamhuri ya DominikaAljeriaEkwadoEstoniaMisiliEritreaHispaniaUhabeshi" + + "UfiniFijiVisiwa vya FalklandMikronesiaUvalanzaGaboniUingerezaGrenada" + + "JojiaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGin" + + "ekwetaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungar" + + "iaIndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari Hindi" + + "IrakiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambo" + + "diaKiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwai" + + "tiIsiwa sya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirila" + + "nkaLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBuki" + + "niVisiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya" + + " KaskaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksik" + + "oMalesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNik" + + "aragwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia" + + " ya UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitka" + + "irniPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUreno" + + "PalauParagwaiKatariRiyunioniRomaniaUrusiLwandaSaudiIsiwa sya Solomon" + + "ShelisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera Leoni" + + "SamarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswa" + + "ziVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori" + + " ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuv" + + "aluTaiwaniTanzaniaUkrainiUkandaMarekaniUrugwaiUzibekistaniVatikaniSa" + + "ntavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiw" + + "a vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniM" + + "ayotteAfrika KusiniNzambiaNzimbambwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d8, 0x00de, 0x00de, 0x00e5, 0x00eb, 0x00f2, 0x00f2, + 0x00f9, 0x00ff, 0x0105, 0x0105, 0x010d, 0x0115, 0x011b, 0x0122, + 0x0122, 0x0142, 0x015b, 0x0160, 0x0166, 0x016d, 0x017b, 0x0180, + 0x0188, 0x018e, 0x0196, 0x0196, 0x019f, 0x01a3, 0x01ab, 0x01ab, + 0x01ab, 0x01b2, 0x01c2, 0x01cb, 0x01cb, 0x01d1, 0x01d8, 0x01e0, + // Entry 40 - 7F + 0x01f3, 0x01fa, 0x01fa, 0x0200, 0x0207, 0x020d, 0x020d, 0x0214, + 0x021c, 0x0224, 0x0224, 0x0224, 0x0229, 0x022d, 0x0240, 0x024a, + 0x024a, 0x0252, 0x0258, 0x0261, 0x0268, 0x026d, 0x0280, 0x0280, + 0x0285, 0x028d, 0x0296, 0x029c, 0x02a0, 0x02a9, 0x02b2, 0x02b9, + 0x02b9, 0x02c2, 0x02c6, 0x02cf, 0x02d5, 0x02d5, 0x02d5, 0x02de, + 0x02e5, 0x02ea, 0x02f2, 0x02f2, 0x02fb, 0x0303, 0x030a, 0x030a, + 0x030f, 0x0334, 0x0339, 0x033f, 0x0347, 0x034d, 0x034d, 0x0354, + 0x035b, 0x0361, 0x0366, 0x0373, 0x037b, 0x0383, 0x0389, 0x039c, + // Entry 80 - BF + 0x03ab, 0x03b7, 0x03be, 0x03ce, 0x03d9, 0x03de, 0x03e6, 0x03f0, + 0x03fa, 0x0403, 0x040a, 0x0410, 0x0418, 0x0421, 0x0428, 0x042d, + 0x0433, 0x0439, 0x0440, 0x0440, 0x0440, 0x0446, 0x0458, 0x0461, + 0x0465, 0x046a, 0x0472, 0x0472, 0x0492, 0x049b, 0x04a4, 0x04af, + 0x04b4, 0x04ba, 0x04c0, 0x04c6, 0x04cd, 0x04d4, 0x04dc, 0x04e3, + 0x04ef, 0x04f5, 0x0506, 0x050d, 0x0516, 0x051e, 0x0523, 0x0529, + 0x052e, 0x0532, 0x053c, 0x0541, 0x0547, 0x054b, 0x0560, 0x0565, + 0x056d, 0x0576, 0x057d, 0x0593, 0x059c, 0x05a5, 0x05d7, 0x05dc, + // Entry C0 - FF + 0x05e1, 0x05e9, 0x05ef, 0x05ef, 0x05f8, 0x05ff, 0x05ff, 0x0604, + 0x060a, 0x060f, 0x0620, 0x062a, 0x0630, 0x0636, 0x063e, 0x0649, + 0x0651, 0x0651, 0x0659, 0x0664, 0x066c, 0x0674, 0x067b, 0x0683, + 0x0683, 0x0697, 0x069f, 0x069f, 0x06a4, 0x06aa, 0x06aa, 0x06c3, + 0x06c8, 0x06c8, 0x06cc, 0x06d4, 0x06df, 0x06e6, 0x06f9, 0x0708, + 0x070f, 0x0714, 0x071b, 0x072d, 0x0733, 0x073a, 0x0742, 0x0749, + 0x074f, 0x074f, 0x074f, 0x0757, 0x075e, 0x076a, 0x0772, 0x078b, + 0x0794, 0x07b3, 0x07d1, 0x07da, 0x07e1, 0x07f0, 0x07f5, 0x07f5, + // Entry 100 - 13F + 0x07fb, 0x0802, 0x080f, 0x0816, 0x0820, + }, + }, + { // kde + "AndolaDimiliki dya Vakulungwa va ChalabuAfuganistaniAntigua na BalbudaAn" + + "gwilaAlbaniaAlmeniaAngolaAdyentinaSamoa ya MalekaniAustliaAustlaliaA" + + "lubaAzabadyaniBosnia na HezegovinaBabadosiBangladeshiUbelgidiBuchina" + + "fasoBulgaliaBahaleniBulundiBeniniBelmudaBluneiBoliviaBlaziliBahamaBu" + + "taniBotswanaBelalusiBelizeKanadaJamuhuli ya Chidemoklasia ya kuKongo" + + "Jamuhuli ya Afilika ya Paching’atiKongoUswisiKodivaaChisiwa cha Cook" + + "ChileKameluniChinaKolombiaKostalikaKubaKepuvedeKuplosiJamuhuli ya Ch" + + "echiUdyerumaniDyibutiDenmakiDominikaJamuhuli ya DominikaAljeliaEkwad" + + "oEstoniaMisliElitileaHispaniaUhabeshiUfiniFijiChisiwa cha FalklandMi" + + "kilonesiaUfalansaGaboniNngalesaGlenadaDyodyaGwiyana ya UfalansaGhana" + + "DiblaltaGlinlandiGambiaGineGwadelupeGinekwetaUgilichiGwatemalaGwamGi" + + "nebisauGuyanaHondulasiKolasiaHaitiHungaliaIndonesiaAyalandiIslaeliIn" + + "diaLieneo lyaki Nngalesa Nbahali ya HindiIlakiUadyemiAislandiItaliaD" + + "yamaikaYordaniDyapaniKenyaKiligizistaniKambodiaKilibatiKomoloSantaki" + + "tzi na NevisKolea KasikaziniKolea KusiniKuwaitiChisiwa cha KemenKaza" + + "chistaniLaosiLebanoniSantalusiaLishenteniSililankaLibeliaLesotoLitwa" + + "niaLasembagiLativiaLibyaMolokoMonakoMoldovaBukiniChisiwa cha Malusha" + + "lMasedoniaMaliMyamaMongoliaChisiwa cha Marian cha KasikaziniMalitini" + + "kiMolitaniaMonselatiMaltaMolisiModivuMalawiMeksikoMalesiaMsumbijiNam" + + "ibiaNyukaledoniaNidyeliChisiwa cha NolufokNidyeliaNikalagwaUholanziN" + + "orweNepaliNauluNiueNyuzilandiOmaniPanamaPeluPolinesia ya UfalansaPap" + + "uaFilipinoPakistaniPolandiSantapieli na MikeloniPitikeluniPwetolikoN" + + "chingu wa Magalibi wa Mpanda wa kuGaza wa kuPalesUlenoPalauPalagwaiK" + + "ataliLiyunioniLomaniaUlusiLwandaSaudiaChisiwa cha SolomonShelisheliS" + + "udaniUswidiSingapooSantahelenaSloveniaSlovakiaSiela LeoniSamalinoSen" + + "egaliSomaliaSulinamuSaotome na PrinsipeElsavadoSiliaUswaziChisiwa ch" + + "a Tuluchi na KaikoChadiTogoTailandiTadikistaniTokelauTimoli ya Masha" + + "likiTuluchimenistaniTunisiaTongaUtuluchiTilinidad na TobagoTuvaluTai" + + "waniTanzaniaUklainiUgandaMalekaniUlugwaiUzibechistaniVatikaniSantavi" + + "senti na GlenadiniVenezuelaChisiwa Chivihi cha WingalesaChisiwa Chiv" + + "ihi cha MalekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMaoleAfili" + + "ka KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0028, 0x0034, 0x0046, 0x004d, 0x0054, + 0x005b, 0x0061, 0x0061, 0x006a, 0x007b, 0x0082, 0x008b, 0x0090, + 0x0090, 0x009a, 0x00ae, 0x00b6, 0x00c1, 0x00c9, 0x00d4, 0x00dc, + 0x00e4, 0x00eb, 0x00f1, 0x00f1, 0x00f8, 0x00fe, 0x0105, 0x0105, + 0x010c, 0x0112, 0x0118, 0x0118, 0x0120, 0x0128, 0x012e, 0x0134, + 0x0134, 0x0158, 0x017c, 0x0181, 0x0187, 0x018e, 0x019e, 0x01a3, + 0x01ab, 0x01b0, 0x01b8, 0x01b8, 0x01c1, 0x01c5, 0x01cd, 0x01cd, + 0x01cd, 0x01d4, 0x01e6, 0x01f0, 0x01f0, 0x01f7, 0x01fe, 0x0206, + // Entry 40 - 7F + 0x021a, 0x0221, 0x0221, 0x0227, 0x022e, 0x0233, 0x0233, 0x023b, + 0x0243, 0x024b, 0x024b, 0x024b, 0x0250, 0x0254, 0x0268, 0x0273, + 0x0273, 0x027b, 0x0281, 0x0289, 0x0290, 0x0296, 0x02a9, 0x02a9, + 0x02ae, 0x02b6, 0x02bf, 0x02c5, 0x02c9, 0x02d2, 0x02db, 0x02e3, + 0x02e3, 0x02ec, 0x02f0, 0x02f9, 0x02ff, 0x02ff, 0x02ff, 0x0308, + 0x030f, 0x0314, 0x031c, 0x031c, 0x0325, 0x032d, 0x0334, 0x0334, + 0x0339, 0x035f, 0x0364, 0x036b, 0x0373, 0x0379, 0x0379, 0x0381, + 0x0388, 0x038f, 0x0394, 0x03a1, 0x03a9, 0x03b1, 0x03b7, 0x03ca, + // Entry 80 - BF + 0x03da, 0x03e6, 0x03ed, 0x03fe, 0x040a, 0x040f, 0x0417, 0x0421, + 0x042b, 0x0434, 0x043b, 0x0441, 0x0449, 0x0452, 0x0459, 0x045e, + 0x0464, 0x046a, 0x0471, 0x0471, 0x0471, 0x0477, 0x048b, 0x0494, + 0x0498, 0x049d, 0x04a5, 0x04a5, 0x04c6, 0x04d0, 0x04d9, 0x04e2, + 0x04e7, 0x04ed, 0x04f3, 0x04f9, 0x0500, 0x0507, 0x050f, 0x0516, + 0x0522, 0x0529, 0x053c, 0x0544, 0x054d, 0x0555, 0x055a, 0x0560, + 0x0565, 0x0569, 0x0573, 0x0578, 0x057e, 0x0582, 0x0597, 0x059c, + 0x05a4, 0x05ad, 0x05b4, 0x05ca, 0x05d4, 0x05dd, 0x060f, 0x0614, + // Entry C0 - FF + 0x0619, 0x0621, 0x0627, 0x0627, 0x0630, 0x0637, 0x0637, 0x063c, + 0x0642, 0x0648, 0x065b, 0x0665, 0x066b, 0x0671, 0x0679, 0x0684, + 0x068c, 0x068c, 0x0694, 0x069f, 0x06a7, 0x06af, 0x06b6, 0x06be, + 0x06be, 0x06d1, 0x06d9, 0x06d9, 0x06de, 0x06e4, 0x06e4, 0x0700, + 0x0705, 0x0705, 0x0709, 0x0711, 0x071c, 0x0723, 0x0736, 0x0746, + 0x074d, 0x0752, 0x075a, 0x076d, 0x0773, 0x077a, 0x0782, 0x0789, + 0x078f, 0x078f, 0x078f, 0x0797, 0x079e, 0x07ab, 0x07b3, 0x07cc, + 0x07d5, 0x07f2, 0x080e, 0x0817, 0x081e, 0x082d, 0x0832, 0x0832, + // Entry 100 - 13F + 0x0838, 0x083d, 0x084b, 0x0851, 0x0859, + }, + }, + { // kea + "Ilha di AsensãuAndoraEmiradus Árabi UniduAfeganistãuAntigua i BarbudaAng" + + "ilaAlbániaArméniaAngolaAntártikaArjentinaSamoa MerkanuÁustriaAustrál" + + "iaArubaIlhas ÅlandAzerbaijãuBósnia i ErzegovinaBarbadusBangladexiBél" + + "jikaBurkina FasuBulgáriaBarainBurundiBeninSãu BartolomeuBermudasBrun" + + "eiBolíviaKaraibas OlandezasBrazilBaamasButãuIlha BuveBotsuanaBelarus" + + "BeliziKanadáIlhas Kokus (Keeling)Kongu - KinxasaRepublika Sentru-Afr" + + "ikanuKongu - BrazaviliSuisaKosta di MarfinIlhas KukXiliKamarõisXinaK" + + "olômbiaIlha KlipertonKosta RikaKubaKabu VerdiKurasauIlha di NatalXip" + + "riRepúblika TxekaAlimanhaDiegu GarsiaDjibutiDinamarkaDominikaRepúbli" + + "ka DominikanaArjéliaSeuta i MelilhaEkuadorStóniaEjituSara OsidentalI" + + "ritreiaSpanhaEtiópiaUniãu EuropeiaFinlándiaFidjiIlhas MalvinasMikron" + + "éziaIlhas FaroeFransaGabãuReinu UniduGranadaJiórjiaGiana FransezaGe" + + "rnziGanaJibraltarGronelándiaGámbiaGineGuadalupiGine EkuatorialGrésia" + + "Ilhas Jeórjia di Sul i Sanduixi di SulGuatimalaGuamGine-BisauGianaRe" + + "jiãu Administrativu Spesial di Hong KongIlhas Heard i McDonaldOndura" + + "sKroásiaAitíUngriaKanáriasIndonéziaIrlandaIsraelIlha di ManÍndiaIlha" + + "s Británikas di ÍndikuIrakiIrãuIslándiaItáliaJersiJamaikaJordániaJap" + + "ãuKéniaKirgistãuKambodjaKiribatiKamorisSãu Kristovãu i NevisKoreia " + + "di NortiKoreia di SulKueitiIlhas KaimãuKazakistãuLausLíbanuSanta Lús" + + "iaLixenstainSri LankaLibériaLezotuLituániaLuxemburguLetóniaLíbiaMaro" + + "kusMónakuMoldáviaMontenegruSãu Martinhu di FransaMadagaskarIlhas Mar" + + "xalMasidóniaMaliMianmar (Birmánia)MongóliaRejiãu Administrativu Spes" + + "ial di MakauIlhas Marianas di NortiMartinikaMauritániaMonseratMaltaM" + + "aurísiaMaldivasMalauiMéxikuMaláziaMusambikiNamíbiaNova KalidóniaNije" + + "rIlhas NorfolkNijériaNikaráguaOlandaNoruegaNepalNauruNiueNova Zilánd" + + "iaOmanPanamáPeruPolinézia FransezaPapua-Nova GineFilipinasPakistãuPu" + + "lóniaSan Piere i MikelonPirkairnPortu RikuPalistinaPurtugalPalauPara" + + "guaiKatarIlhas di OseaniaRuniãuRuméniaSérviaRúsiaRuandaArábia Saudit" + + "aIlhas SalumãuSeixelisSudãuSuésiaSingapuraSanta IlenaSlovéniaSvalbar" + + "d i Jan MaienSlovákiaSera LioaSan MarinuSenegalSumáliaSurinamiSudãu " + + "di SulSãu Tume i PrínsipiEl SalvadorSãu Martinhu di OlandaSíriaSuazi" + + "lándiaTristan da KunhaIlhas Turkas i KaikusTxadiTerras Franses di Su" + + "lToguTailándiaTadjikistãuTokelauTimor LestiTurkumenistãuTuníziaTonga" + + "TurkiaTrinidad i TobaguTuvaluTaiuanTanzániaUkrániaUgandaIlhas Minori" + + "s Distantis de Stadus UnidusStadus Unidos di MerkaUruguaiUzbekistãuV" + + "atikanuSãu Bisenti i GranadinasVinizuelaIlhas Virjens BritánikasIlha" + + "s Virjens MerkanasVietnamVanuatuUalis i FutunaSamoaKozovuIémenMaiote" + + "Áfrika di SulZámbiaZimbábuiRejiãu DiskonxeduMunduÁfrikaMerka di Nor" + + "tiMerka di SulOseaniaÁfrika OsidentalMerka SentralÁfrika OrientalNor" + + "ti di ÁfrikaÁfrika SentralSul di ÁfrikaMerkasNorti di MerkaKaraibasÁ" + + "zia OrientalSul di ÁziaSudesti AziátikuEuropa di SulAustraláziaMelan" + + "éziaRejiãu di MikronéziaPolinéziaÁziaÁzia SentralÁzia OsidentalEuro" + + "paEuropa OrientalEuropa di NortiEuropa OsidentalMerka Latinu", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0016, 0x002b, 0x0037, 0x0048, 0x004e, 0x0056, + 0x005e, 0x0064, 0x006e, 0x0077, 0x0084, 0x008c, 0x0096, 0x009b, + 0x00a7, 0x00b2, 0x00c6, 0x00ce, 0x00d8, 0x00e0, 0x00ec, 0x00f5, + 0x00fb, 0x0102, 0x0107, 0x0116, 0x011e, 0x0124, 0x012c, 0x013e, + 0x0144, 0x014a, 0x0150, 0x0159, 0x0161, 0x0168, 0x016e, 0x0175, + 0x018a, 0x0199, 0x01b2, 0x01c3, 0x01c8, 0x01d7, 0x01e0, 0x01e4, + 0x01ed, 0x01f1, 0x01fa, 0x0208, 0x0212, 0x0216, 0x0220, 0x0227, + 0x0234, 0x0239, 0x0249, 0x0251, 0x025d, 0x0264, 0x026d, 0x0275, + // Entry 40 - 7F + 0x028a, 0x0292, 0x02a1, 0x02a8, 0x02af, 0x02b4, 0x02c2, 0x02ca, + 0x02d0, 0x02d8, 0x02e7, 0x02e7, 0x02f1, 0x02f6, 0x0304, 0x030f, + 0x031a, 0x0320, 0x0326, 0x0331, 0x0338, 0x0340, 0x034e, 0x0354, + 0x0358, 0x0361, 0x036d, 0x0374, 0x0378, 0x0381, 0x0390, 0x0397, + 0x03be, 0x03c7, 0x03cb, 0x03d5, 0x03da, 0x0405, 0x041b, 0x0422, + 0x042a, 0x042f, 0x0435, 0x043e, 0x0448, 0x044f, 0x0455, 0x0460, + 0x0466, 0x0482, 0x0487, 0x048c, 0x0495, 0x049c, 0x04a1, 0x04a8, + 0x04b1, 0x04b7, 0x04bd, 0x04c7, 0x04cf, 0x04d7, 0x04de, 0x04f5, + // Entry 80 - BF + 0x0504, 0x0511, 0x0517, 0x0524, 0x052f, 0x0533, 0x053a, 0x0546, + 0x0550, 0x0559, 0x0561, 0x0567, 0x0570, 0x057a, 0x0582, 0x0588, + 0x058f, 0x0596, 0x059f, 0x05a9, 0x05c0, 0x05ca, 0x05d6, 0x05e0, + 0x05e4, 0x05f7, 0x0600, 0x0627, 0x063e, 0x0647, 0x0652, 0x065a, + 0x065f, 0x0668, 0x0670, 0x0676, 0x067d, 0x0685, 0x068e, 0x0696, + 0x06a5, 0x06aa, 0x06b7, 0x06bf, 0x06c9, 0x06cf, 0x06d6, 0x06db, + 0x06e0, 0x06e4, 0x06f2, 0x06f6, 0x06fd, 0x0701, 0x0714, 0x0723, + 0x072c, 0x0735, 0x073d, 0x0750, 0x0758, 0x0762, 0x076b, 0x0773, + // Entry C0 - FF + 0x0778, 0x0780, 0x0785, 0x0795, 0x079c, 0x07a4, 0x07ab, 0x07b1, + 0x07b7, 0x07c6, 0x07d4, 0x07dc, 0x07e2, 0x07e9, 0x07f2, 0x07fd, + 0x0806, 0x081a, 0x0823, 0x082c, 0x0836, 0x083d, 0x0845, 0x084d, + 0x085a, 0x086f, 0x087a, 0x0891, 0x0897, 0x08a3, 0x08b3, 0x08c8, + 0x08cd, 0x08e2, 0x08e6, 0x08f0, 0x08fc, 0x0903, 0x090e, 0x091c, + 0x0924, 0x0929, 0x092f, 0x0940, 0x0946, 0x094c, 0x0955, 0x095d, + 0x0963, 0x098b, 0x098b, 0x09a1, 0x09a8, 0x09b3, 0x09bb, 0x09d4, + 0x09dd, 0x09f6, 0x0a0c, 0x0a13, 0x0a1a, 0x0a28, 0x0a2d, 0x0a33, + // Entry 100 - 13F + 0x0a39, 0x0a3f, 0x0a4d, 0x0a54, 0x0a5d, 0x0a6f, 0x0a74, 0x0a7b, + 0x0a89, 0x0a95, 0x0a9c, 0x0aad, 0x0aba, 0x0aca, 0x0ada, 0x0ae9, + 0x0af7, 0x0afd, 0x0b0b, 0x0b13, 0x0b21, 0x0b2d, 0x0b3e, 0x0b4b, + 0x0b57, 0x0b61, 0x0b77, 0x0b81, 0x0b86, 0x0b93, 0x0ba2, 0x0ba8, + 0x0bb7, 0x0bc6, 0x0bd6, 0x0be2, + }, + }, + { // khq + "AndooraLaaraw Imaarawey MarganteyAfgaanistanAntigua nda BarbuudaAngiiyaA" + + "lbaaniArmeeniAngoolaArgentineAmeriki SamoaOtrišiOstraaliAruubaAzerba" + + "ayijaŋBosni nda HerzegovineBarbaadosBangladešiBelgiikiBurkina fasoBu" + + "lgaariBahareenBurundiBeniŋBermudaBruuneeBooliviBreezilBahamasBuutaŋB" + + "otswaanaBilorišiBeliiziKanaadaKongoo demookaratiki labooCentraafriki" + + " koyraKongooSwisuKudwarKuuk gungeyŠiiliKameruunŠiinKolombiKosta rika" + + "KuubaKapuver gungeyŠiipurCek laboAlmaaɲeJibuutiDanemarkDoominikiDoom" + + "iniki labooAlžeeriEkwateerEstooniMisraEritreeEspaaɲeEcioopiFinlanduF" + + "ijiKalkan gungeyMikroneziFaransiGaabonAlbaasalaama MargantaGrenaadaG" + + "orgiFaransi GuyaanGaanaGibraltarGrinlandGambiGineGwadeluupGinee Ekwa" + + "torialGreeceGwatemaalaGuamGine-BissoGuyaaneHondurasKrwaasiHaitiHunga" + + "ariIndoneeziIrlanduIsrayelIndu labooBritiši Indu teekoo laamaIraakIr" + + "aanAycelandItaaliJamaayikUrdunJaapoŋKeeniyaKyrgyzstanKamboogiKiribaa" + + "tiKomoorSeŋ Kitts nda NevisKooree, GurmaKooree, HawsaKuweetKayman gu" + + "ngeyKaazakstanLaawosLubnaanSeŋ LussiaLiechtensteinSrilankaLiberiaLee" + + "sotoLituaaniLuxembourgLetooniLiibiMaarokMonakoMoldoviMadagascarMarša" + + "l gungeyMaacedooniMaaliMaynamarMongooliMariana Gurma GungeyMartiniik" + + "iMooritaaniMontserratMaltaMooris gungeyMaldiivuMalaawiMexikiMaleeziM" + + "ozambikNaamibiKaaledooni TaagaaNižerNorfolk GungooNaajiriiaNikaragwa" + + "HollanduNorveejNeepalNauruNiueZeelandu TaagaOmaanPanamaPeeruFaransi " + + "PolineeziPapua Ginee TaagaFilipinePaakistanPoloɲeSeŋ Piyer nda Mikel" + + "onPitikarinPorto RikoPalestine Dangay nda GaazaPortugaalPaluParaguwe" + + "yKataarReenioŋRumaaniIriši labooRwandaSaudiyaSolomon GungeySeešelSuu" + + "daŋSweedeSingapurSeŋ HelenaSloveeniSlovaakiSeera LeonSan MarinoSeneg" + + "alSomaaliSurinaamSao Tome nda PrinsipeSalvador labooSuuriaSwazilandT" + + "urk nda Kayikos GungeyCaaduTogoTaayilandTaažikistanTokelauTimoor haw" + + "saTurkmenistaŋTuniziTongaTurkiTrinidad nda TobaagoTuvaluTaayiwanTanz" + + "aaniUkreenUgandaAmeriki Laabu MarganteyUruguweyUzbeekistanVaatikan L" + + "aamaSeŋvinsaŋ nda GrenadineVeneezuyeelaBritiši Virgin gungeyAmeerik " + + "Virgin GungeyVietnaamVanautuWallis nda FutunaSamoaYamanMayootiHawsa " + + "Afriki LabooZambiZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0021, 0x002c, 0x0040, 0x0047, 0x004e, + 0x0055, 0x005c, 0x005c, 0x0065, 0x0072, 0x0079, 0x0081, 0x0087, + 0x0087, 0x0094, 0x00a9, 0x00b2, 0x00bd, 0x00c5, 0x00d1, 0x00d9, + 0x00e1, 0x00e8, 0x00ee, 0x00ee, 0x00f5, 0x00fc, 0x0103, 0x0103, + 0x010a, 0x0111, 0x0118, 0x0118, 0x0121, 0x012a, 0x0131, 0x0138, + 0x0138, 0x0152, 0x0164, 0x016a, 0x016f, 0x0175, 0x0180, 0x0186, + 0x018e, 0x0193, 0x019a, 0x019a, 0x01a4, 0x01a9, 0x01b7, 0x01b7, + 0x01b7, 0x01be, 0x01c6, 0x01ce, 0x01ce, 0x01d5, 0x01dd, 0x01e6, + // Entry 40 - 7F + 0x01f5, 0x01fd, 0x01fd, 0x0205, 0x020c, 0x0211, 0x0211, 0x0218, + 0x0220, 0x0227, 0x0227, 0x0227, 0x022f, 0x0233, 0x0240, 0x0249, + 0x0249, 0x0250, 0x0256, 0x026b, 0x0273, 0x0278, 0x0286, 0x0286, + 0x028b, 0x0294, 0x029c, 0x02a1, 0x02a5, 0x02ae, 0x02be, 0x02c4, + 0x02c4, 0x02ce, 0x02d2, 0x02dc, 0x02e3, 0x02e3, 0x02e3, 0x02eb, + 0x02f2, 0x02f7, 0x02ff, 0x02ff, 0x0308, 0x030f, 0x0316, 0x0316, + 0x0320, 0x033a, 0x033f, 0x0344, 0x034c, 0x0352, 0x0352, 0x035a, + 0x035f, 0x0366, 0x036d, 0x0377, 0x037f, 0x0388, 0x038e, 0x03a2, + // Entry 80 - BF + 0x03af, 0x03bc, 0x03c2, 0x03cf, 0x03d9, 0x03df, 0x03e6, 0x03f1, + 0x03fe, 0x0406, 0x040d, 0x0414, 0x041c, 0x0426, 0x042d, 0x0432, + 0x0438, 0x043e, 0x0445, 0x0445, 0x0445, 0x044f, 0x045d, 0x0467, + 0x046c, 0x0474, 0x047c, 0x047c, 0x0490, 0x049a, 0x04a4, 0x04ae, + 0x04b3, 0x04c0, 0x04c8, 0x04cf, 0x04d5, 0x04dc, 0x04e4, 0x04eb, + 0x04fc, 0x0502, 0x0510, 0x0519, 0x0522, 0x052a, 0x0531, 0x0537, + 0x053c, 0x0540, 0x054e, 0x0553, 0x0559, 0x055e, 0x056f, 0x0580, + 0x0588, 0x0591, 0x0598, 0x05ae, 0x05b7, 0x05c1, 0x05db, 0x05e4, + // Entry C0 - FF + 0x05e8, 0x05f1, 0x05f7, 0x05f7, 0x05ff, 0x0606, 0x0606, 0x0612, + 0x0618, 0x061f, 0x062d, 0x0634, 0x063b, 0x0641, 0x0649, 0x0654, + 0x065c, 0x065c, 0x0664, 0x066e, 0x0678, 0x067f, 0x0686, 0x068e, + 0x068e, 0x06a3, 0x06b1, 0x06b1, 0x06b7, 0x06c0, 0x06c0, 0x06d7, + 0x06dc, 0x06dc, 0x06e0, 0x06e9, 0x06f5, 0x06fc, 0x0708, 0x0715, + 0x071b, 0x0720, 0x0725, 0x0739, 0x073f, 0x0747, 0x074f, 0x0755, + 0x075b, 0x075b, 0x075b, 0x0772, 0x077a, 0x0785, 0x0793, 0x07ac, + 0x07b8, 0x07ce, 0x07e3, 0x07eb, 0x07f2, 0x0803, 0x0808, 0x0808, + // Entry 100 - 13F + 0x080d, 0x0814, 0x0826, 0x082b, 0x0833, + }, + }, + { // ki + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "MburundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarus" + + "iBelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Ka" + + "tiKongoUswisiKodivaaVisiwa vya CookChileKameruniCainaKolombiaKostari" + + "kaKiumbaKepuvedeKuprosiJamhuri ya ChekiNjeremaniJibutiDenmakiDominik" + + "aJamhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshi" + + "UfiniFijiVisiwa vya FalklandMikronesiaUbaranjaGaboniNgerethaGrenadaJ" + + "ojiaGwiyana ya UfaransaNganaJibraltaGrinlandiGambiaGineGwadelupeGine" + + "kwetaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungari" + + "aIndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiI" + + "rakiUajemiAislandiItaliaJamaikaNjorondaniNjabaniKenyaKirigizistaniKa" + + "mbodiaKiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKu" + + "waitiVisiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSi" + + "rilankaLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldova" + + "BukiniVisiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana" + + " vya KaskaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMe" + + "ksikoMalesiaMsumbijiNamimbiaNyukaledoniaNijeriKisiwa cha NorfokNainj" + + "eriaNikaragwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPo" + + "linesia ya UfaransaPapuaFilipinoPakistaniPolandiSantapieri na Mikelo" + + "niPitkairniPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa Palesti" + + "naUrenoPalauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya" + + " SolomonShelisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSie" + + "ra LeoniSamarinoSenegaliSomariaSurinamuSao Tome na PrincipeElsavadoS" + + "iriaUswaziVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokel" + + "auTimori ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na T" + + "obagoTuvaluTaiwaniTanzaniaUkrainiUgandaAmerikaUrugwaiUzibekistaniVat" + + "ikaniSantavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya Uingere" + + "zaVisiwa vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoa" + + "YemeniMayotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d8, 0x00de, 0x00de, 0x00e5, 0x00eb, 0x00f2, 0x00f2, + 0x00f9, 0x00ff, 0x0105, 0x0105, 0x010d, 0x0115, 0x011b, 0x0121, + 0x0121, 0x0141, 0x015a, 0x015f, 0x0165, 0x016c, 0x017b, 0x0180, + 0x0188, 0x018d, 0x0195, 0x0195, 0x019e, 0x01a4, 0x01ac, 0x01ac, + 0x01ac, 0x01b3, 0x01c3, 0x01cc, 0x01cc, 0x01d2, 0x01d9, 0x01e1, + // Entry 40 - 7F + 0x01f4, 0x01fb, 0x01fb, 0x0201, 0x0208, 0x020d, 0x020d, 0x0214, + 0x021c, 0x0224, 0x0224, 0x0224, 0x0229, 0x022d, 0x0240, 0x024a, + 0x024a, 0x0252, 0x0258, 0x0260, 0x0267, 0x026c, 0x027f, 0x027f, + 0x0284, 0x028c, 0x0295, 0x029b, 0x029f, 0x02a8, 0x02b1, 0x02b8, + 0x02b8, 0x02c1, 0x02c5, 0x02ce, 0x02d4, 0x02d4, 0x02d4, 0x02dd, + 0x02e4, 0x02e9, 0x02f1, 0x02f1, 0x02fa, 0x0302, 0x0309, 0x0309, + 0x030e, 0x0333, 0x0338, 0x033e, 0x0346, 0x034c, 0x034c, 0x0353, + 0x035d, 0x0364, 0x0369, 0x0376, 0x037e, 0x0386, 0x038c, 0x039f, + // Entry 80 - BF + 0x03ae, 0x03ba, 0x03c1, 0x03d2, 0x03dd, 0x03e2, 0x03ea, 0x03f4, + 0x03fe, 0x0407, 0x040e, 0x0414, 0x041c, 0x0425, 0x042c, 0x0431, + 0x0437, 0x043d, 0x0444, 0x0444, 0x0444, 0x044a, 0x045c, 0x0465, + 0x0469, 0x046e, 0x0476, 0x0476, 0x0496, 0x049f, 0x04a8, 0x04b3, + 0x04b8, 0x04be, 0x04c4, 0x04ca, 0x04d1, 0x04d8, 0x04e0, 0x04e8, + 0x04f4, 0x04fa, 0x050b, 0x0514, 0x051d, 0x0525, 0x052a, 0x0530, + 0x0535, 0x0539, 0x0543, 0x0548, 0x054e, 0x0552, 0x0567, 0x056c, + 0x0574, 0x057d, 0x0584, 0x059a, 0x05a3, 0x05ac, 0x05de, 0x05e3, + // Entry C0 - FF + 0x05e8, 0x05f0, 0x05f6, 0x05f6, 0x05ff, 0x0606, 0x0606, 0x060b, + 0x0611, 0x0616, 0x0628, 0x0632, 0x0638, 0x063e, 0x0646, 0x0651, + 0x0659, 0x0659, 0x0661, 0x066c, 0x0674, 0x067c, 0x0683, 0x068b, + 0x068b, 0x069f, 0x06a7, 0x06a7, 0x06ac, 0x06b2, 0x06b2, 0x06cb, + 0x06d0, 0x06d0, 0x06d4, 0x06dc, 0x06e7, 0x06ee, 0x0701, 0x0710, + 0x0717, 0x071c, 0x0723, 0x0735, 0x073b, 0x0742, 0x074a, 0x0751, + 0x0757, 0x0757, 0x0757, 0x075e, 0x0765, 0x0771, 0x0779, 0x0792, + 0x079b, 0x07ba, 0x07d8, 0x07e1, 0x07e8, 0x07f7, 0x07fc, 0x07fc, + // Entry 100 - 13F + 0x0802, 0x0809, 0x0816, 0x081c, 0x0824, + }, + }, + { // kk + kkRegionStr, + kkRegionIdx, + }, + { // kkj + "Kamɛrun", + []uint16{ // 49 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0008, + }, + }, + { // kl + "Kalaallit Nunaat", + []uint16{ // 91 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0010, + }, + }, + { // kln + "Emetab AndorraEmetab kibagenge nebo arabukEmetab AfghanistanEmetab Antig" + + "ua ak BarbudaEmetab AnguillaEmetab AlbaniaEmetab ArmeniaEmetab Angol" + + "aEmetab ArgentinaEmetab American SamoaEmetab AustriaEmetab Australia" + + "Emetab ArubaEmetab AzerbaijanEmetab Bosnia ak HerzegovinaEmetab Barb" + + "adosEmetab BangladeshEmetab BelgiumEmetab Burkina FasoEmetab Bulgari" + + "aEmetab BahrainEmetab BurundiEmetab BeninEmetab BermudaEmetab Brunei" + + "Emetab BoliviaEmetab BrazilEmetab BahamasEmetab BhutanEmetab Botswan" + + "aEmetab BelarusEmetab BelizeEmetab CanadaEmetab Congo - KinshasaEmet" + + "ab Afrika nebo KwenEmetab Congo - BrazzavilleEmetab SwitzerlandEmeta" + + "b Côte d’IvoireIkwembeyotab CookEmetab ChileEmetab CameroonEmetab Ch" + + "inaEmetab ColombiaEmetab Costa RicaEmetab CubaIkwembeyotab Cape Verd" + + "eEmetab CyprusEmetab Czech RepublicEmetab GerumanEmetab DjiboutiEmet" + + "ab DenmarkEmetab DominicaEmetab Dominican RepublicEmetab AlgeriaEmet" + + "ab EcuadorEmetab EstoniaEmetab MisiriEmetab EritreaEmetab SpainEmeta" + + "b EthiopiaEmetab FinlandEmetab FijiIkwembeyotab FalklandEmetab Micro" + + "nesiaEmetab FranceEmetab GabonEmetab Kibagenge nebo UingerezaEmetab " + + "GrenadaEmetab GeorgiaEmetab Guiana nebo UfaransaEmetab GhanaEmetab G" + + "ibraltarEmetab GreenlandEmetab GambiaEmetab GuineaEmetab GuadeloupeE" + + "metab Equatorial GuineaEmetab GreeceEmetab GuatemalaEmetab GuamEmeta" + + "b Guinea-BissauEmetab GuyanaEmetab HondurasEmetab CroatiaEmetab Hait" + + "iEmetab HungaryEmetab IndonesiaEmetab IrelandEmetab IsraelEmetab Ind" + + "iaKebebertab araraitab indian Ocean nebo UingeresaEmetab IraqEmetab " + + "IranEmetab IcelandEmetab ItalyEmetab JamaicaEmetab JordanEmetab Japa" + + "nEmetab KenyaEmetab KyrgyzstanEmetab CambodiaEmetab KiribatiEmetab C" + + "omorosEmetab Saint Kitts ak NevisEmetab Korea nebo murot katamEmetab" + + " korea nebo murot taiEmetab KuwaitIkwembeyotab CaymanEmetab Kazakhst" + + "anEmetab LaosEmetab LebanonEmetab Lucia NeEmetab LiechtensteinEmetab" + + " Sri LankaEmetab LiberiaEmetab LesothoEmetab LithuaniaEmetab Luxembo" + + "urgEmetab LatviaEmetab LibyaEmetab MoroccoEmetab MonacoEmetab Moldov" + + "aEmetab MadagascarIkwembeiyotab MarshallEmetab MacedoniaEmetab MaliE" + + "metab MyanmarEmetab MongoliaIkwembeiyotab Mariana nebo murot katamEm" + + "etab MartiniqueEmetab MauritaniaEmetab MontserratEmetab MaltaEmetab " + + "MauritiusEmetab MaldivesEmetab MalawiEmetab MexicoEmetab MalaysiaEme" + + "tab MozambiqueEmetab NamibiaEmetab New CaledoniaEmetab nigerIkwembei" + + "yotab NorforkEmetab NigeriaEmetab NicaraguaEmetab HolandEmetab Norwa" + + "yEmetab NepalEmetab NauruEmetab NiueEmetab New ZealandEmetab OmanEme" + + "tab PanamaEmetab PeruEmetab Polynesia nebo ufaransaEmetab Papua New " + + "GuineaEmetab PhilippinesEmetab PakistanEmetab PolandEmetab Peter Ne " + + "titil ak MiquelonEmetab PitcairnEmetab Puerto RicoEmetab PalestineEm" + + "etab PortugalEmetab PalauEmetab ParaguayEmetab QatarEmetab RéunionEm" + + "etab RomaniaEmetab RussiaEmetab RwandaEmetab Saudi ArabiaIkwembeiyot" + + "ab SolomonEmetab SeychellesEmetab SudanEmetab SwedenEmetab Singapore" + + "Emetab Helena Ne tililEmetab SloveniaEmetab SlovakiaEmetab Sierra Le" + + "oneEmetab San MarinoEmetab SenegalEmetab SomaliaEmetab SurinameEmeta" + + "b São Tomé and PríncipeEmetab El SalvadorEmetab SyriaEmetab Swazilan" + + "dIkwembeiyotab Turks ak CaicosEmetab ChadEmetab TogoEmetab ThailandE" + + "metab TajikistanEmetab TokelauEmetab Timor nebo Murot taiEmetab Turk" + + "menistanEmetab TunisiaEmetab TongaEmetab TurkeyEmetab Trinidad ak To" + + "bagoEmetab TuvaluEmetab TaiwanEmetab TanzaniaEmetab UkrainieEmetab U" + + "gandaEmetab amerikaEmetab UruguayEmetab UzibekistaniEmetab VaticanEm" + + "etab Vincent netilil ak GrenadinesEmetab VenezuelaIkwembeyotab Briti" + + "sh VirginIkwemweiyotab AmerikaEmetab VietnamEmetab VanuatuEmetab Wal" + + "is ak FutunaEmetab SamoaEmetab YemenEmetab MayotteEmetab Afrika nebo" + + " Murot taiEmetab ZambiaEmetab Zimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000e, 0x002a, 0x003c, 0x0055, 0x0064, 0x0072, + 0x0080, 0x008d, 0x008d, 0x009d, 0x00b2, 0x00c0, 0x00d0, 0x00dc, + 0x00dc, 0x00ed, 0x0109, 0x0118, 0x0129, 0x0137, 0x014a, 0x0159, + 0x0167, 0x0175, 0x0181, 0x0181, 0x018f, 0x019c, 0x01aa, 0x01aa, + 0x01b7, 0x01c5, 0x01d2, 0x01d2, 0x01e1, 0x01ef, 0x01fc, 0x0209, + 0x0209, 0x0220, 0x0237, 0x0251, 0x0263, 0x027a, 0x028b, 0x0297, + 0x02a6, 0x02b2, 0x02c1, 0x02c1, 0x02d2, 0x02dd, 0x02f4, 0x02f4, + 0x02f4, 0x0301, 0x0316, 0x0324, 0x0324, 0x0333, 0x0341, 0x0350, + // Entry 40 - 7F + 0x0369, 0x0377, 0x0377, 0x0385, 0x0393, 0x03a0, 0x03a0, 0x03ae, + 0x03ba, 0x03c9, 0x03c9, 0x03c9, 0x03d7, 0x03e2, 0x03f7, 0x0408, + 0x0408, 0x0415, 0x0421, 0x0440, 0x044e, 0x045c, 0x0477, 0x0477, + 0x0483, 0x0493, 0x04a3, 0x04b0, 0x04bd, 0x04ce, 0x04e6, 0x04f3, + 0x04f3, 0x0503, 0x050e, 0x0522, 0x052f, 0x052f, 0x052f, 0x053e, + 0x054c, 0x0558, 0x0566, 0x0566, 0x0576, 0x0584, 0x0591, 0x0591, + 0x059d, 0x05cd, 0x05d8, 0x05e3, 0x05f1, 0x05fd, 0x05fd, 0x060b, + 0x0618, 0x0624, 0x0630, 0x0641, 0x0650, 0x065f, 0x066d, 0x0688, + // Entry 80 - BF + 0x06a5, 0x06c0, 0x06cd, 0x06e0, 0x06f1, 0x06fc, 0x070a, 0x0719, + 0x072d, 0x073d, 0x074b, 0x0759, 0x0769, 0x077a, 0x0787, 0x0793, + 0x07a1, 0x07ae, 0x07bc, 0x07bc, 0x07bc, 0x07cd, 0x07e3, 0x07f3, + 0x07fe, 0x080c, 0x081b, 0x081b, 0x0841, 0x0852, 0x0863, 0x0874, + 0x0880, 0x0890, 0x089f, 0x08ac, 0x08b9, 0x08c8, 0x08d9, 0x08e7, + 0x08fb, 0x0907, 0x091c, 0x092a, 0x093a, 0x0947, 0x0954, 0x0960, + 0x096c, 0x0977, 0x0989, 0x0994, 0x09a1, 0x09ac, 0x09ca, 0x09e1, + 0x09f3, 0x0a02, 0x0a0f, 0x0a30, 0x0a3f, 0x0a51, 0x0a61, 0x0a70, + // Entry C0 - FF + 0x0a7c, 0x0a8b, 0x0a97, 0x0a97, 0x0aa6, 0x0ab4, 0x0ab4, 0x0ac1, + 0x0ace, 0x0ae1, 0x0af6, 0x0b07, 0x0b13, 0x0b20, 0x0b30, 0x0b46, + 0x0b55, 0x0b55, 0x0b64, 0x0b77, 0x0b88, 0x0b96, 0x0ba4, 0x0bb3, + 0x0bb3, 0x0bd2, 0x0be4, 0x0be4, 0x0bf0, 0x0c00, 0x0c00, 0x0c1d, + 0x0c28, 0x0c28, 0x0c33, 0x0c42, 0x0c53, 0x0c61, 0x0c7c, 0x0c8f, + 0x0c9d, 0x0ca9, 0x0cb6, 0x0ccf, 0x0cdc, 0x0ce9, 0x0cf8, 0x0d07, + 0x0d14, 0x0d14, 0x0d14, 0x0d22, 0x0d30, 0x0d43, 0x0d51, 0x0d75, + 0x0d85, 0x0da0, 0x0db5, 0x0dc3, 0x0dd1, 0x0de7, 0x0df3, 0x0df3, + // Entry 100 - 13F + 0x0dff, 0x0e0d, 0x0e29, 0x0e36, 0x0e45, + }, + }, + { // km + kmRegionStr, + kmRegionIdx, + }, + { // kn + knRegionStr, + knRegionIdx, + }, + { // ko + koRegionStr, + koRegionIdx, + }, + { // ko-KP + "조선민주주의인민공화국", + []uint16{ // 129 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0021, + }, + }, + { // kok + "भारत", + []uint16{ // 113 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000c, + }, + }, + { // ks + "اٮ۪نڑورامُتحدہ عرَب اماراتاَفغانَستاناٮ۪نٹِگُوا تہٕ باربوڑاانگوئیلااٮ۪لب" + + "انِیااَرمانِیاانگولااینٹارٹِکاأرجَنٹینااَمریٖکَن سَمواآسٹِیاآسٹریلِ" + + "یااَروٗباایلینٛڑ جٔزیٖرٕآزَرباجانبوسنِیا تہٕ ہَرزِگووِناباربیڈاسبَن" + + "ٛگلادیشبیٛلجِیَمبُرکِنا فیسوبَلجیرِیابحریٖنبورَنڈِبِنِنسینٛٹ بارتَھ" + + "یلمیبٔرمیوڈابُرنٔےبولِوِیابرطانوی قُطبہِ جَنوٗبی علاقہٕبرٛازِلبَہام" + + "َسبوٗٹانبووَٹ جٔزیٖرٕبوتَسوانابیلاروٗسبیلِجکینَڑاکوکَس کیٖلِنٛگ جٔز" + + "یٖرٕکونٛگو کِنشاسامرکٔزی اَفریٖکی جموٗریَتکونٛگو بٔرٛزاوِلیسُوِزَرل" + + "ینٛڑاَیوٕری کوسٹکُک جٔزیٖرٕچِلیکیٚمِروٗنچیٖنکولَمبِیاکوسٹا رِکاکیوٗ" + + "باکیپ ؤرڑیکرِسمَس جٔزیٖرٕسایفرٛسچیک جَموٗرِیَتجرمٔنیجِبوٗتیڈینٛمارٕ" + + "کڈومِنِکاڈومِنِکَن جموٗرِیَتاٮ۪لجیرِیااِکواڑورایسٹونِیامِسٔرمشرِقی " + + "سَہارااِرٕٹِیاسٕپیناِتھوپِیافِنلینٛڑفِجیفٕلاکلینٛڑ جٔزیٖرٕفرٛانسگیب" + + "انیُنایٹِڑ کِنٛگڈَمگرٛنیڑاجارجِیافرٛانسِسی گِاناگیوَنَرسےگاناجِبرال" + + "ٹَرگریٖنلینٛڑگَمبِیاگِنیگَواڑیلوپاِکوِٹورِیَل گِنیگریٖسجنوٗبی جارجِ" + + "یا تہٕ جنوٗبی سینٛڑوٕچ جٔزیٖرٕگوتیدالاگُوامگیٖنی بِساوگُیاناہانٛگ ک" + + "انٛگ ایس اے آر چیٖنہَرٕڑ جٔزیٖرٕ تہٕ مٮ۪کڈونالڑٕ جٔزیٖرٕہانٛڈوٗرِسک" + + "رٛوشِیاہایتیہَنٛگریاِنڑونیشِیااَیَرلینٛڑاِسرایٖلآیِل آف میٛنہِنٛدوس" + + "تانبرطانوی بحرِ ہِنٛدۍ علاقہٕایٖراقایٖراناَیِسلینٛڑاِٹلیجٔرسیجَمایک" + + "اجاپانکِنٛیاکِرگِستانکَمبوڑِیاکِرٕباتیکَمورَسسینٛٹ کِٹَس تہٕ نیوِسش" + + "ُمٲلی کورِیاجنوٗبی کورِیاکُویتکیمَن جٔزیٖرٕکَزاکِستانلاسلٮ۪بنانسینٛ" + + "ٹ لوٗسِیالِکٹیٛسٹیٖنسِریٖلَنٛکالایبیرِیالیسوتھولِتھُوانِیالَکسَمبٔر" + + "ٕگلیٛٹوِیالِبیاموروکومونیٚکومولڑاوِیاموٹونیٛگِریوسینٛٹ مارٹِنمیڑاگا" + + "سکارمارشَل جٔزیٖرٕمٮ۪سوڑونِیامالیمَیَنما بٔرمامَنٛگولِیامَکاوو ایس " + + "اے آر چیٖنشُمٲلی مارِیانا جٔزیٖرٕمارٹِنِکمارٕٹانِیامانٛٹسیراٹمالٹام" + + "ورِشَسمالدیٖوملاویمٮ۪کسِکومَلیشِیاموزَمبِکنامِبِیانِو کیلِڑونِیانای" + + "جَرنارفاک جٔزیٖرٕنایجیرِیاناکاراگُوانیٖدَرلینٛڑناروےنیپالنارووٗنیوٗ" + + "نیوٗزِلینٛڑاومانپَناماپیٖروٗفرٛانسی پولِنیشِیاپاپُوا نیوٗ گیٖنیفِلِ" + + "پِینسپاکِستانپولینٛڑسینٛٹ پیٖری تہٕ موکیلِیَنپِٹکیرٕنۍ جٔزیٖرٕپٔرٹو" + + " رِکوفَلَستیٖنپُرتِگالپَلاوپَراگُےقَطِرآوُٹلاینِگ اوشینِیارِیوٗنِیَن" + + "رومانِیاسَربِیاروٗسروٗوانٛڈاسوٗدی عربِیہسولامان جٔزیٖرٕسیشَلِسسوٗڈا" + + "نسُوِڈَنٛسِنٛگاپوٗرسینٛٹ ہٮ۪لِناسَلووینِیاسَوالبریڑ تہٕ جان ماییڑسَ" + + "لوواکِیاسیٖرالیوونسین میرِنوسینیگَلسومالِیاسُرِنامساو توم تہٕ پرٛنس" + + "ِپیاٮ۪ل سَلواڑورشامسُوزِلینٛڑتُرُک تہٕ کیکوس جٔزیٖرٕچاڑفرٛانسِسی جَ" + + "نوٗبی عَلاقہٕٹوگوتھایلینٛڑتاجکِستانتوکیلاومَشرِقی تایمورتُرمِنِستان" + + "ٹونیشِیاٹونٛگاتُرکیٹرٛنِنداد تہٕ ٹوبیگوتوٗوالوٗتایوانتَنجانِیایوٗرِ" + + "کینیوٗگانٛڑایوٗنایٹِڑ سِٹیٹِس ماینَر آوُٹلییِنٛگ جٔزیٖرٕیوٗنایٹِڑ س" + + "ِٹیٹِسیوٗروگےاُزبِکِستانویٹِکَن سِٹیسینٛٹ وینسٮ۪ٹ تہٕ گرٛیناڑاینٕزو" + + "ینازوٗلابَرطانوی ؤرجِن جٔزیٖرٕیوٗ ایس ؤرجِن جٔزیٖرٕویٹِناموانوٗتوٗو" + + "الِس تہٕ فیوٗچوٗناسیمووایَمَنمَییٹجَنوٗبی اَفریٖکاجامبِیازِمبابےنام" + + "علوٗم تہٕ نالَگہار عَلاقہٕدُنیااَفریٖکاشُمٲلی اَمریٖکاجَنوٗنی اَمرٖ" + + "یٖکااوشَنیامَغریٖبی اَفریٖکامرکٔزی اَمریٖکامَشرِقی اَفریٖکاشُمٲلی ا" + + "َفریٖکاوسطی اَفریٖکاجنوٗبی اَفریٖکااَمریٖکَسشُمٲلی اَمریٖکا خٕطہٕکَ" + + "رِببیٖنمَشرِقی ایشیاجنوٗبی ایشیاجنوٗبہِ مَشرِقی ایشیاجنوٗبی یوٗرَپآ" + + "سٹریلیا تہٕ نِوزِلینٛڑمٮ۪لَنیٖشِیامَیکرونَیشِیَن خٕطہٕپالنیشِیاایشی" + + "امرکٔزی ایشیامَغرِبی ایشیایوٗرَپمشرِقی یوٗرَپشُمٲلی یوٗرَپمغرِبی یو" + + "ٗرَپلاطیٖنی اَمریٖکا تہٕ کیرَبیٖن", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0010, 0x0032, 0x0048, 0x0072, 0x0082, 0x0096, + 0x00a8, 0x00b4, 0x00c8, 0x00da, 0x00f7, 0x0103, 0x0115, 0x0123, + 0x0140, 0x0152, 0x017e, 0x018e, 0x01a2, 0x01b4, 0x01cb, 0x01dd, + 0x01e9, 0x01f7, 0x0201, 0x0220, 0x0230, 0x023c, 0x024c, 0x0283, + 0x0291, 0x029f, 0x02ab, 0x02c4, 0x02d6, 0x02e6, 0x02f0, 0x02fc, + 0x0326, 0x0341, 0x036f, 0x0390, 0x03a8, 0x03bf, 0x03d4, 0x03dc, + 0x03ee, 0x03f6, 0x0408, 0x0408, 0x041b, 0x0427, 0x0436, 0x0436, + 0x0453, 0x0461, 0x047c, 0x0488, 0x0488, 0x0496, 0x04a8, 0x04b8, + // Entry 40 - 7F + 0x04dd, 0x04f1, 0x04f1, 0x0501, 0x0513, 0x051d, 0x0536, 0x0546, + 0x0550, 0x0562, 0x0562, 0x0562, 0x0572, 0x057a, 0x059d, 0x059d, + 0x059d, 0x05a9, 0x05b3, 0x05d4, 0x05e2, 0x05f0, 0x060d, 0x061f, + 0x0627, 0x0639, 0x064d, 0x065b, 0x0663, 0x0675, 0x0696, 0x06a0, + 0x06ef, 0x06ff, 0x0709, 0x071e, 0x072a, 0x0759, 0x079f, 0x07b3, + 0x07c3, 0x07cd, 0x07db, 0x07db, 0x07f1, 0x0805, 0x0815, 0x082b, + 0x083f, 0x0870, 0x087c, 0x0888, 0x089c, 0x08a6, 0x08b0, 0x08be, + 0x08be, 0x08c8, 0x08d4, 0x08e6, 0x08f8, 0x0908, 0x0916, 0x093d, + // Entry 80 - BF + 0x0956, 0x096f, 0x0979, 0x0992, 0x09a6, 0x09ac, 0x09ba, 0x09d3, + 0x09e9, 0x09ff, 0x0a11, 0x0a1f, 0x0a35, 0x0a4b, 0x0a5b, 0x0a65, + 0x0a71, 0x0a7f, 0x0a91, 0x0aa9, 0x0ac0, 0x0ad4, 0x0aef, 0x0b05, + 0x0b0d, 0x0b26, 0x0b3a, 0x0b60, 0x0b8c, 0x0b9c, 0x0bb0, 0x0bc4, + 0x0bce, 0x0bdc, 0x0bea, 0x0bf4, 0x0c04, 0x0c14, 0x0c24, 0x0c34, + 0x0c4f, 0x0c5b, 0x0c76, 0x0c88, 0x0c9c, 0x0cb2, 0x0cbc, 0x0cc6, + 0x0cd2, 0x0cda, 0x0cf0, 0x0cfa, 0x0d06, 0x0d12, 0x0d35, 0x0d55, + 0x0d67, 0x0d77, 0x0d85, 0x0db4, 0x0dd5, 0x0de8, 0x0dfa, 0x0e0a, + // Entry C0 - FF + 0x0e14, 0x0e22, 0x0e2c, 0x0e51, 0x0e65, 0x0e75, 0x0e83, 0x0e8b, + 0x0e9d, 0x0eb4, 0x0ed1, 0x0edf, 0x0eeb, 0x0ef9, 0x0f0f, 0x0f28, + 0x0f3c, 0x0f67, 0x0f7b, 0x0f8f, 0x0fa2, 0x0fb0, 0x0fc0, 0x0fce, + 0x0fce, 0x0ff3, 0x100c, 0x100c, 0x1012, 0x1026, 0x1026, 0x1051, + 0x1057, 0x1087, 0x108f, 0x10a1, 0x10b3, 0x10c1, 0x10dc, 0x10f2, + 0x1102, 0x110e, 0x1118, 0x113e, 0x114e, 0x115a, 0x116c, 0x117c, + 0x118e, 0x11e2, 0x11e2, 0x1203, 0x1211, 0x1227, 0x123e, 0x1277, + 0x1289, 0x12b3, 0x12da, 0x12e8, 0x12f8, 0x131c, 0x1328, 0x1328, + // Entry 100 - 13F + 0x1332, 0x133c, 0x135b, 0x1369, 0x1377, 0x13ae, 0x13b8, 0x13c8, + 0x13e5, 0x1406, 0x1414, 0x1435, 0x1452, 0x1471, 0x148e, 0x14a7, + 0x14c4, 0x14d6, 0x14fe, 0x1510, 0x1529, 0x1540, 0x1568, 0x1581, + 0x15ad, 0x15c5, 0x15ec, 0x15fe, 0x1608, 0x161f, 0x1638, 0x1644, + 0x165d, 0x1676, 0x168f, 0x16c6, + }, + }, + { // ksb + "AndolaFalme za KialabuAfuganistaniAntigua na BalbudaAnguillaAlbaniaAlmen" + + "iaAngolaAjentinaSamoa ya MalekaniAustliaAustlaliaAlubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiBukinafasoBulgaliaBahaleniBulundiB" + + "eniniBelmudaBluneiBoliviaBlaziliBahamaButaniBotswanaBelalusiBelizeKa" + + "nadaJamhuli ya Kidemoklasia ya KongoJamhuli ya Afrika ya GatiKongoUs" + + "wisiKodivaaVisiwa vya CookChileKameluniChinaKolombiaKostalikaKubaKep" + + "uvedeKuplosiJamhuli ya ChekiUjeumaniJibutiDenmakiDominikaJamhuli ya " + + "DominikaAljeliaEkwadoEstoniaMisliElitleaHispaniaUhabeshiUfiniFijiVis" + + "iwa vya FalklandMiklonesiaUfalansaGaboniUingeezaGlenadaJojiaGwiyana " + + "ya UfalansaGhanaJiblaltaGlinlandiGambiaGineGwadelupeGinekwetaUgiikiG" + + "watemalaGwamGinebisauGuyanaHonduasiKolasiaHaitiHungaliaIndonesiaAyal" + + "andiIslaeliIndiaEneo ja Uingeeza mwe Bahali HindiIlakiUajemiAislandi" + + "ItaliaJamaikaYoldaniJapaniKenyaKiigizistaniKambodiaKiibatiKomoloSant" + + "akitzi na NevisKolea KaskaziniKolea KusiniKuwaitiVisiwa vya KaymanKa" + + "zakistaniLaosiLebanoniSantalusiaLishenteniSililankaLibeliaLesotoLitw" + + "aniaLasembagiLativiaLibyaMolokoMonakoMoldovaBukiniVisiwa vya MashalM" + + "asedoniaMaliMyamaMongoliaVisiwa vya Maliana vya KaskaziniMaltinikiMa" + + "ulitaniaMontselatiMaltaMolisiModivuMalawiMeksikoMalesiaMsumbijiNamib" + + "iaNyukaledoniaNaijaKisiwa cha NolfokNaijeliaNikalagwaUholanziNolweiN" + + "epaliNauluNiueNyuzilandiOmaniPanamaPeluPolinesia ya UfalansaPapuaFil" + + "ipinoPakistaniPolandiSantapieli na MikeloniPitkailniPwetolikoUkingo " + + "wa Maghalibi na Ukanda wa Gaza wa PalestinaUlenoPalauPalagwaiKataliL" + + "iyunioniLomaniaUlusiLwandaSaudiVisiwa vya SolomonShelisheliSudaniUsw" + + "idiSingapooSantahelenaSloveniaSlovakiaSiela LeoniSamalinoSenegaliSom" + + "aliaSulinamuSao Tome na PlincipeElsavadoSiliaUswaziVisiwa vya Tulki " + + "na KaikoChadiTogoTailandiTajikistaniTokelauTimoli ya MashalikiTuluki" + + "menistaniTunisiaTongaUtulukiTlinidad na TobagoTuvaluTaiwaniTanzaniaU" + + "klainiUgandaMalekaniUlugwaiUzibekistaniVatikaniSantavisenti na Glena" + + "diniVenezuelaVisiwa vya Vilgin vya UingeezaVisiwa vya Vilgin vya Mal" + + "ekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMayotteAflika KusiniZ" + + "ambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00ae, 0x00b8, 0x00c0, + 0x00c8, 0x00cf, 0x00d5, 0x00d5, 0x00dc, 0x00e2, 0x00e9, 0x00e9, + 0x00f0, 0x00f6, 0x00fc, 0x00fc, 0x0104, 0x010c, 0x0112, 0x0118, + 0x0118, 0x0138, 0x0151, 0x0156, 0x015c, 0x0163, 0x0172, 0x0177, + 0x017f, 0x0184, 0x018c, 0x018c, 0x0195, 0x0199, 0x01a1, 0x01a1, + 0x01a1, 0x01a8, 0x01b8, 0x01c0, 0x01c0, 0x01c6, 0x01cd, 0x01d5, + // Entry 40 - 7F + 0x01e8, 0x01ef, 0x01ef, 0x01f5, 0x01fc, 0x0201, 0x0201, 0x0208, + 0x0210, 0x0218, 0x0218, 0x0218, 0x021d, 0x0221, 0x0234, 0x023e, + 0x023e, 0x0246, 0x024c, 0x0254, 0x025b, 0x0260, 0x0273, 0x0273, + 0x0278, 0x0280, 0x0289, 0x028f, 0x0293, 0x029c, 0x02a5, 0x02ab, + 0x02ab, 0x02b4, 0x02b8, 0x02c1, 0x02c7, 0x02c7, 0x02c7, 0x02cf, + 0x02d6, 0x02db, 0x02e3, 0x02e3, 0x02ec, 0x02f4, 0x02fb, 0x02fb, + 0x0300, 0x0321, 0x0326, 0x032c, 0x0334, 0x033a, 0x033a, 0x0341, + 0x0348, 0x034e, 0x0353, 0x035f, 0x0367, 0x036e, 0x0374, 0x0387, + // Entry 80 - BF + 0x0396, 0x03a2, 0x03a9, 0x03ba, 0x03c5, 0x03ca, 0x03d2, 0x03dc, + 0x03e6, 0x03ef, 0x03f6, 0x03fc, 0x0404, 0x040d, 0x0414, 0x0419, + 0x041f, 0x0425, 0x042c, 0x042c, 0x042c, 0x0432, 0x0443, 0x044c, + 0x0450, 0x0455, 0x045d, 0x045d, 0x047d, 0x0486, 0x0490, 0x049a, + 0x049f, 0x04a5, 0x04ab, 0x04b1, 0x04b8, 0x04bf, 0x04c7, 0x04ce, + 0x04da, 0x04df, 0x04f0, 0x04f8, 0x0501, 0x0509, 0x050f, 0x0515, + 0x051a, 0x051e, 0x0528, 0x052d, 0x0533, 0x0537, 0x054c, 0x0551, + 0x0559, 0x0562, 0x0569, 0x057f, 0x0588, 0x0591, 0x05c3, 0x05c8, + // Entry C0 - FF + 0x05cd, 0x05d5, 0x05db, 0x05db, 0x05e4, 0x05eb, 0x05eb, 0x05f0, + 0x05f6, 0x05fb, 0x060d, 0x0617, 0x061d, 0x0623, 0x062b, 0x0636, + 0x063e, 0x063e, 0x0646, 0x0651, 0x0659, 0x0661, 0x0668, 0x0670, + 0x0670, 0x0684, 0x068c, 0x068c, 0x0691, 0x0697, 0x0697, 0x06b0, + 0x06b5, 0x06b5, 0x06b9, 0x06c1, 0x06cc, 0x06d3, 0x06e6, 0x06f5, + 0x06fc, 0x0701, 0x0708, 0x071a, 0x0720, 0x0727, 0x072f, 0x0736, + 0x073c, 0x073c, 0x073c, 0x0744, 0x074b, 0x0757, 0x075f, 0x0778, + 0x0781, 0x079f, 0x07bd, 0x07c6, 0x07cd, 0x07dc, 0x07e1, 0x07e1, + // Entry 100 - 13F + 0x07e7, 0x07ee, 0x07fb, 0x0801, 0x0809, + }, + }, + { // ksf + "andɔrǝbǝlɔŋ bǝ kaksa bɛ táatáaŋzǝnafganistáŋantiga ri barbúdaangiyaalban" + + "íarmɛníangólaarjǝntínsamɔa a amɛrikaotricɔstralíarubaazabecánbɔsnyɛ" + + " ri hɛrsǝgɔvínbaabaadǝbaŋladɛ́cbɛljíkbukína fǝ́ asɔbulgaríbarǝ́nburu" + + "ndíbɛnǝ́nbɛɛmúdǝbrunǝ́bɔɔlívíbrɛsílbaamásbutánbotswanabɛlarisbɛlizka" + + "nadakɔngó anyɔ́nsantrafríkkɔngóswískɔtiwuárzɛ i kúkcílikamɛrúncínkol" + + "ɔmbíkɔstaríkakubakapvɛrcíprɛcɛ́kdjɛrmandyibutídanmakdɔminikdɔminik " + + "rɛpublíkaljɛríɛkwatɛǝ́ɛstoníɛjíptɛritrɛ́kpanyáɛtyɔpífínlanfíjizǝ maa" + + "lwínmikronɛ́sipɛrɛsǝ́gabɔŋkǝlɔŋ kǝ kǝtáatáaŋzǝngrɛnadǝjɔrjíguyán i p" + + "ɛrɛsǝ́gánajibraltágrínlangambíginɛ́gwadɛlúpginɛ́ ɛkwatɔrialgrɛ́kgwá" + + "tǝmalagwámginɛ́ bisɔ́guyánɔnduraskrwasíayitiɔngríindonɛsíilánisraɛ́l" + + "indízǝ ingɛrís ncɔ́m wa indiirákiráŋzǝ i glásitalíjamaíkjɔrdánjapɔ́ŋ" + + "kɛnyakigistáŋkambodjkiribátikomɔrsɛnkrǝstɔ́f ri nyɛ́vǝkorɛanɔ́rkorɛa" + + "sudkuwɛitzǝ i gankazakstáŋlaɔslibáŋsɛntlísílictɛnstɛ́nsrílaŋkalibɛry" + + "alǝsótolitwaníluksɛmbúrlɛtonílibímarɔkmonakomɔldavímadagaskazǝ i mar" + + "cálmásǝdwánmalimyanmármɔŋolízǝ maryánnɔ́rmatiníkmwaritanímɔnsɛratmal" + + "tǝmwarísmaldivǝmalawimɛksíkmalɛsímosambíknamibíkalɛdoní anyɔ́nnijɛ́r" + + "zɛ nɔ́fɔlknijɛ́ryaníkarágwakǝlɔŋ kǝ ázǝnɔrvɛjǝnɛpalnwarúniwɛ́zɛlan a" + + "nyɔ́nomanpanamapɛrúpɔlinɛsí a pɛrɛsǝ́papwazí ginɛ́ anyɔ́nfilipǝ́npak" + + "istáŋpolɔ́nsɛnpyɛr ri mikɛlɔŋpitkɛ́npɔtoríkozǝ palɛstínǝportugálpalw" + + "aparagwɛ́katárɛunyɔŋrɔmanírisírwandaarabí saodízǝ salomɔ́nsɛcɛlsudan" + + "swɛdǝsiŋapósɛntɛ́lenslovɛníslovakísyɛraleonsɛnmarǝnsɛnɛgalsomalísuri" + + "namsaotomɛ́ ri priŋsibsalvadɔrsiríswazilanzǝ tirk ri kakɔscaádtogotɛ" + + "lantadjikistaŋtokǝlaotimor anǝ á ɛsttirkmɛnistaŋtunɛsítɔŋatirkítɛrin" + + "itɛ ri tobagotuwalutɛwántanzaníukrainugandaamɛrikaurugwɛ́usbɛkistaŋw" + + "atikáŋsɛnvǝnsǝŋ ri grɛnadínwɛnǝzwɛlazǝ bɛ gɔn inɛ a ingɛríszǝ bɛ gɔn" + + " inɛ á amɛrikawyɛtnámwanwatuwalis ri futunasamɔayɛmɛnmayɔ́tafrik anǝ" + + " a sudzambízimbabwɛ́", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x002d, 0x0039, 0x004b, 0x0051, 0x0058, + 0x0060, 0x0067, 0x0067, 0x0071, 0x0082, 0x0087, 0x0090, 0x0095, + 0x0095, 0x009e, 0x00b8, 0x00c1, 0x00cd, 0x00d5, 0x00e7, 0x00ef, + 0x00f7, 0x00ff, 0x0108, 0x0108, 0x0113, 0x011b, 0x0126, 0x0126, + 0x012e, 0x0135, 0x013b, 0x013b, 0x0143, 0x014b, 0x0151, 0x0157, + 0x0157, 0x0167, 0x0172, 0x0179, 0x017e, 0x0188, 0x0192, 0x0197, + 0x01a0, 0x01a4, 0x01ad, 0x01ad, 0x01b8, 0x01bc, 0x01c3, 0x01c3, + 0x01c3, 0x01ca, 0x01d0, 0x01d8, 0x01d8, 0x01e0, 0x01e6, 0x01ee, + // Entry 40 - 7F + 0x0201, 0x0209, 0x0209, 0x0215, 0x021d, 0x0224, 0x0224, 0x022e, + 0x0235, 0x023e, 0x023e, 0x023e, 0x0245, 0x024a, 0x0256, 0x0262, + 0x0262, 0x026d, 0x0274, 0x0292, 0x029b, 0x02a2, 0x02b6, 0x02b6, + 0x02bb, 0x02c4, 0x02cc, 0x02d2, 0x02d9, 0x02e3, 0x02f7, 0x02fe, + 0x02fe, 0x0309, 0x030e, 0x031d, 0x0323, 0x0323, 0x0323, 0x032b, + 0x0332, 0x0337, 0x033e, 0x033e, 0x0348, 0x034d, 0x0356, 0x0356, + 0x035b, 0x0378, 0x037d, 0x0383, 0x038e, 0x0394, 0x0394, 0x039b, + 0x03a3, 0x03ac, 0x03b2, 0x03bc, 0x03c3, 0x03cc, 0x03d2, 0x03ee, + // Entry 80 - BF + 0x03fa, 0x0403, 0x040a, 0x0413, 0x041e, 0x0423, 0x042a, 0x0435, + 0x0443, 0x044d, 0x0455, 0x045d, 0x0465, 0x0470, 0x0478, 0x047d, + 0x0483, 0x0489, 0x0492, 0x0492, 0x0492, 0x049b, 0x04a8, 0x04b3, + 0x04b7, 0x04bf, 0x04c8, 0x04c8, 0x04d9, 0x04e1, 0x04eb, 0x04f5, + 0x04fb, 0x0502, 0x050a, 0x0510, 0x0518, 0x0520, 0x0529, 0x0530, + 0x0543, 0x054b, 0x0559, 0x0563, 0x056e, 0x0580, 0x058a, 0x0590, + 0x0596, 0x059d, 0x05ac, 0x05b0, 0x05b6, 0x05bc, 0x05d5, 0x05ee, + 0x05f8, 0x0602, 0x060a, 0x0621, 0x062a, 0x0634, 0x0644, 0x064d, + // Entry C0 - FF + 0x0652, 0x065c, 0x0661, 0x0661, 0x066b, 0x0673, 0x0673, 0x0678, + 0x067e, 0x068b, 0x0699, 0x06a0, 0x06a5, 0x06ac, 0x06b4, 0x06c0, + 0x06c9, 0x06c9, 0x06d1, 0x06db, 0x06e5, 0x06ee, 0x06f5, 0x06fc, + 0x06fc, 0x0712, 0x071b, 0x071b, 0x0720, 0x0728, 0x0728, 0x073a, + 0x073f, 0x073f, 0x0743, 0x0749, 0x0755, 0x075d, 0x076f, 0x077d, + 0x0785, 0x078b, 0x0791, 0x07a5, 0x07ab, 0x07b2, 0x07ba, 0x07c0, + 0x07c6, 0x07c6, 0x07c6, 0x07ce, 0x07d7, 0x07e3, 0x07ec, 0x0807, + 0x0813, 0x0830, 0x084d, 0x0856, 0x085d, 0x086c, 0x0872, 0x0872, + // Entry 100 - 13F + 0x0879, 0x0881, 0x0891, 0x0897, 0x08a2, + }, + }, + { // ksh + "AßensionAndorraVereinschte Arrabesche EmmirateAfjaanistahnAntigwa un Bar" + + "budaAnggwillaAlbaanijeArrmeenijeAngjoolader SödpolAjjentiinijeAmmeri" + + "kaanesch SammohaÖösterischAustraalijeArubade Ohland-EnselleAsserbaid" + + "schahnBoßnije un Herzegovinade Ensel BarbadosBangladeschBelljeBukkin" + + "na-FaaseBulljaarijeBachrainBurundidä Beninde Zint Battälmi-Ensellede" + + " BermudasBruneiBolliivijede karribbesche NederlängBrasilijede Bahama" + + "sButtaande Buvee-EnselBozwaanaWießrußlandBelizeKanadade Kokkos-Ensel" + + "ledä Konggo (Kinschasa)de Zäntraalaffrikaanesche Republikdä Konggo (" + + "Brassavill)de SchweizÄlfebeijn-Kößde Kuuk-EnselleSchiileKammeruhnSch" + + "iinaKolumbijede Klipperton-EnselKostarikaKuhbade kapvärdesche Ensell" + + "eCuraçaode Weihnaachs-EnselZüpperede TschäscheiDoütschlandde Diego-G" + + "arcia-EnselDschibuttiDänemarkDominnikade Dommenekaanesche ReppublikA" + + "lljeerijeZe’uta un MeliijaÄkwadorÄßlandÄjüpteWäß-SaharaÄritrejaSchpa" + + "anijeÄttijoopijede Europähjesche UnijonFinnlandde Fidschi-Endellede " + + "Falkland-EnselleMikroneesijede Färrör-EnselleFrankrischJabuhnJruußbr" + + "ettannijeJrenahdaJeorrjijeFranzüüsesch JujaanaJöönseiJaanaJibralltaa" + + "JröhnlandJambijaJinnehaJuadeluppÄquatorial JineejaJrieschelandSöd-Je" + + "orjie un de södlijje Botteramms-EnselleJuwatemahlaJuhamJinneha_Bißau" + + "JujaanaHongkongde Heart Ensel un de McDonald-EnselleHondurasKrowazij" + + "eHa’ittiUnjannde Kannaresche EnselleIndoneesijeIrrlandIßraälde Ensel" + + " MänIndijeBrettesche Besezunge em indesche OozejahnIrakPersijeIßland" + + "ItaalijeJöösehJammaikaJordaanijeJapanKeenijaKirrjiisijeKambodschaKir" + + "ibatide KommooreZint Kitts un NevisNood-KorejaSöd-KorejaKuweitde Kai" + + "man-EnselleKassakstahnLa’osLebbannonde Ensel Zint-LutschaLischtescht" + + "einSri LankaLibeerijaLesootoLittaueLuxemburschLätlandLibbijeMarokkoM" + + "onakkoMoldaavijeet Monteneejrode Zint-Määtes-EnselMaddajaskade Machs" + + "chall-EnselleMazedoonijeMaaliBirmaMongjoleiMakaude nöödlijje Marijan" + + "ne-EnselleMachtinikMautitaanijeMongßerratMaltaMaurizijusMallediiveMa" + + "lawiMäxikoMalaisijeMosambikNamiibijeNeuschottlandNijerde Noofok-Ense" + + "lNikaraaguaNikarahguwade NederlängNorrweejeNepallNauruNiueNeuseeland" + + "OmanPannamaPerruhFranzüüsesch PollineesijePapuwa NeujineejaFillipiin" + + "ePakistahnPoleZint Pjäär un Mikelongde Pitkärn-EnselPochtorikoPaläst" + + "inaPochtojallPallauParraguwaiKataaOzejahnije ußerhallefRehunjohnRomä" + + "änijeSärbijeRußlandRuandaSaudi Arraabijede Solomone-Ensellede Seisc" + + "hälleNoodsudahnSchweedeSingjapuurde Ensel Zint Hellenaẞloveenijede E" + + "nselle Svalbard un Jan MayenẞlovakeiSjärra LejoneSan-Marinoder Senne" + + "jallSomaalijeSürinammSödsudahnZint Tommeh un PrintschipeÄl Slavadohr" + + "Zint MaartenSürijeẞwaasilandTristan da Cunjade Enselle Turks un Kaik" + + "osder TschaddFranzüüsesche Södsee-EnselleToojoTailandTadschikistahnT" + + "okelauOß-TimorTurkmenistahnTuneesijeTonggade TörkeiTrinidad un Tobäh" + + "joTuvaluTaiwanTansanijade Ukra’iineUjandade Vereineschte Schtaate vu" + + "n Amärrika ier ußerhallef jelääje Enselschede vereineschte Schtaate " + + "vun AmmärrikaUrrujwaiUßbeekistahnder VattikahnZint Vinzänz un de Jre" + + "nadines-EnselleVenezuelade brettesche Juffer-Ensellede ammärrikahnes" + + "che Juffer-EnselleVijätnammVanuatuWallis un FutunaSammohaKosovoJämme" + + "Majottde Republik SödaffrikaSambijaSimbabwe- Jähjend onbikannt -de Ä" + + "ädAffrikaNood-AmärrikaSöhd-AmärrikaOzejahnejeWäß-AffrikaMeddelammär" + + "rikaOß-AffrikaNood-AffrikaMeddel-AffrikaSöhd-AffrikaAmmärrikader Nor" + + "de vun Amärrikade KarribikOß-AasijeSöhd-AasijeSöhd-Oß-AasijeSöhd-Eur" + + "oppade Rejjohn öm AustrahlijeMellanehsijede Rejohn vun MikronehsejeP" + + "olinehsijeAasijeMeddelaasijeWäß-AasijeEuroppaOß-EuroppaNood-EuroppaW" + + "äß-EuroppaLateinamärrika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002f, 0x003b, 0x004d, 0x0056, 0x005f, + 0x0069, 0x0071, 0x007c, 0x0088, 0x009e, 0x00aa, 0x00b5, 0x00ba, + 0x00cb, 0x00da, 0x00f1, 0x0102, 0x010d, 0x0113, 0x0121, 0x012c, + 0x0134, 0x013b, 0x0144, 0x015d, 0x0168, 0x016e, 0x0178, 0x0192, + 0x019b, 0x01a5, 0x01ac, 0x01ba, 0x01c2, 0x01cf, 0x01d5, 0x01db, + 0x01ec, 0x0202, 0x0225, 0x023c, 0x0246, 0x0256, 0x0265, 0x026c, + 0x0275, 0x027c, 0x0285, 0x0298, 0x02a1, 0x02a6, 0x02be, 0x02c6, + 0x02d9, 0x02e1, 0x02ef, 0x02fb, 0x0310, 0x031a, 0x0323, 0x032c, + // Entry 40 - 7F + 0x0349, 0x0353, 0x0366, 0x036e, 0x0376, 0x037e, 0x038a, 0x0393, + 0x039d, 0x03a9, 0x03c1, 0x03c1, 0x03c9, 0x03db, 0x03ee, 0x03fa, + 0x040d, 0x0417, 0x041d, 0x042e, 0x0436, 0x043f, 0x0455, 0x045e, + 0x0463, 0x046d, 0x0477, 0x047e, 0x0485, 0x048e, 0x04a1, 0x04ad, + 0x04dc, 0x04e7, 0x04ec, 0x04fa, 0x0501, 0x0509, 0x052e, 0x0536, + 0x053f, 0x0548, 0x054e, 0x0564, 0x056f, 0x0576, 0x057e, 0x058b, + 0x0591, 0x05ba, 0x05be, 0x05c5, 0x05cc, 0x05d4, 0x05dc, 0x05e4, + 0x05ee, 0x05f3, 0x05fa, 0x0605, 0x060f, 0x0617, 0x0622, 0x0635, + // Entry 80 - BF + 0x0640, 0x064b, 0x0651, 0x0662, 0x066d, 0x0674, 0x067d, 0x0692, + 0x06a0, 0x06a9, 0x06b2, 0x06b9, 0x06c0, 0x06cb, 0x06d3, 0x06da, + 0x06e1, 0x06e8, 0x06f2, 0x0700, 0x0716, 0x0720, 0x0735, 0x0740, + 0x0745, 0x074a, 0x0753, 0x0758, 0x0778, 0x0781, 0x078d, 0x0798, + 0x079d, 0x07a7, 0x07b1, 0x07b7, 0x07be, 0x07c7, 0x07cf, 0x07d8, + 0x07e5, 0x07ea, 0x07f9, 0x0803, 0x080e, 0x081b, 0x0824, 0x082a, + 0x082f, 0x0833, 0x083d, 0x0841, 0x0848, 0x084e, 0x0869, 0x087a, + 0x0884, 0x088d, 0x0891, 0x08a9, 0x08ba, 0x08c4, 0x08ce, 0x08d8, + // Entry C0 - FF + 0x08de, 0x08e8, 0x08ed, 0x0903, 0x090c, 0x0917, 0x091f, 0x0927, + 0x092d, 0x093c, 0x094f, 0x095d, 0x0967, 0x096f, 0x0979, 0x098e, + 0x099a, 0x09ba, 0x09c4, 0x09d2, 0x09dc, 0x09e9, 0x09f2, 0x09fb, + 0x0a05, 0x0a1f, 0x0a2c, 0x0a38, 0x0a3f, 0x0a4b, 0x0a5b, 0x0a75, + 0x0a80, 0x0a9f, 0x0aa4, 0x0aab, 0x0ab9, 0x0ac0, 0x0ac9, 0x0ad6, + 0x0adf, 0x0ae5, 0x0aef, 0x0b03, 0x0b09, 0x0b0f, 0x0b18, 0x0b26, + 0x0b2c, 0x0b76, 0x0b76, 0x0b9d, 0x0ba5, 0x0bb2, 0x0bbf, 0x0be5, + 0x0bee, 0x0c0a, 0x0c2d, 0x0c37, 0x0c3e, 0x0c4e, 0x0c55, 0x0c5b, + // Entry 100 - 13F + 0x0c61, 0x0c67, 0x0c7e, 0x0c85, 0x0c8d, 0x0ca3, 0x0cab, 0x0cb2, + 0x0cc0, 0x0ccf, 0x0cd9, 0x0ce6, 0x0cf6, 0x0d01, 0x0d0d, 0x0d1b, + 0x0d28, 0x0d32, 0x0d49, 0x0d54, 0x0d5e, 0x0d6a, 0x0d7a, 0x0d87, + 0x0da1, 0x0dad, 0x0dc7, 0x0dd2, 0x0dd8, 0x0de4, 0x0df0, 0x0df7, + 0x0e02, 0x0e0e, 0x0e1b, 0x0e2a, + }, + }, + { // kw + "Rywvaneth Unys", + []uint16{ // 84 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000e, + }, + }, + { // ky + kyRegionStr, + kyRegionIdx, + }, + { // lag + "AndóraɄtemi wa KɨaráabuAfuganisitáaniAntigúua na BaribúudaAnguíilaAlubán" + + "iaAriméniaAngóolaAjentíinaSamóoa ya Amerɨ́kaÁusitiriaAusiteréeliaArú" + + "ubaAzabajáaniBósiniaBabadóosiBangaladéeshiɄbeligíijiBukinafáasoBulig" + + "aríaBaharéeniBurúundiBeníiniBerimúudaBurunéeiBolíviaBrasíiliBaháamaB" + + "utáaniBotiswáanaBelarúusiBelíiseKánadaJamuhúuri ya Kɨdemokurasía ya " + + "KóongoJuhúuri ya Afɨrɨka ya katɨ katɨKóongoUswíisiIvori KositiVisíiw" + + "a vya KúukuChíileKamerúuniChíinaKolómbiaKósita Rɨ́ɨkaKyúubaKepuvéede" + + "KupuróosiJamuhúuri ya ChéekiɄjerumáaniJibúutiDenimakiDomínɨkaJamuhúu" + + "ri ya DominɨkaAlijériaÍkwadoEstoníaMísiriEritereaHisipániaɄhabéeshiU" + + "fíiniFíijiVisíiwa vya FakulandiMikironésiaɄfaráansaGabóoniɄɨngeréesa" + + "GirenáadaJójiaGwiyáana yʉ ɄfaráansaGáanaJiburálitaGiriniláandiGámbia" + + "GíineGwadelúupeGíine IkwéetaUgiríkiGwatemáalaGwaniGíine BisáauGuyáan" + + "aHonduráasiKoréshiaHaíitiHungáriaIndonésiaAyaláandiIsiraéeliÍndiaƗsɨ" + + " yʉ Ʉɨngeréesa irivii ra HíindiIráakiɄajéemiAisiláandiItáliaJamáikaJ" + + "ódaniJapáaniKéenyaKirigisitáaniKambódiaKiribáatiKomóoroMʉtakatíifu " + + "kitisi na NevíisiKoréa yʉ ʉtʉrʉkoKoréa ya SaameKʉwáitiVisíiwa vya Ka" + + "yimaniKazakasitáaniLaóosiLebanóoniMʉtakatíifu LusíiaLishentéeniSiril" + + "áankaLiibériaLesóotoLisuániaLasembáagiLativiaLíbiaMoróokoMonáakoMol" + + "idóovaBukíiniVisíiwa vya MarisháaliMasedóniaMáaliMiáamaMongóliaVisiw" + + "a vya Mariana vya KaskaziniMaritiníikiMoritániaMonteráatiMálitaMoríi" + + "siModíivuMaláawiMekisikoMaleísiaMusumbíijiNamíbiaKaledónia IfyaNíija" + + "Kisíiwa cha NofifóokiNiijériaNikarágʉaɄholáanziNorweNepáaliNaúuruNiú" + + "ueNyuzílandiÓmaniPanáamaPéeruPolinésia yʉ ɄfaráansaPapúuaUfilipíinoP" + + "akisitáaniPólandiMʉtakatíifu Peéteri na MɨkaéeliPatikaíriniPwetorɨ́ɨ" + + "koMweemberera wa kʉmweeri wa GáazaɄréenoPaláauParaguáaiKatáariReyuni" + + "óoniRomaníiaUrúusiRwáandaSaudíia ArabíiaVisíiwa vya SolomóoniShelis" + + "héeliSudáaniUswíidiSingapooMʉtakatíifu HeléenaSulovéniaSulováakiaSer" + + "aleóoniSamaríinoSenegáaliSomáliaSurináamuSao Tóome na PirinsipeElisa" + + "livadoSíriaɄswáaziVisíiwa vya Turíiki na KaíikoCháadiTóogoTáilandiTa" + + "jikisitáaniTokeláauTimóori yi ItʉʉmbaUturukimenisitáaniTunísiaTóonga" + + "UturúukiTiriníida ya TobáagoTuváaluTaiwáaniTaansaníaɄkɨréeniɄgáandaA" + + "merɨkaUruguáaiUsibekisitáaniVatikáaniMʉtakatíifu Viséenti na Gernadí" + + "iniVenezuéelaVisíiwa vya Vigíini vya ɄɨngeréesaVisíiwa vya Vigíini v" + + "ya Amerɨ́kaVietináamuVanuáatuWalíisi na FutúunaSamóoaYémeniMayóoteAf" + + "ɨrɨka ya SaameSámbiaSimbáabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x001b, 0x002a, 0x0041, 0x004a, 0x0053, + 0x005c, 0x0064, 0x0064, 0x006e, 0x0083, 0x008d, 0x009a, 0x00a1, + 0x00a1, 0x00ac, 0x00b4, 0x00be, 0x00cc, 0x00d8, 0x00e4, 0x00ee, + 0x00f8, 0x0101, 0x0109, 0x0109, 0x0113, 0x011c, 0x0124, 0x0124, + 0x012d, 0x0135, 0x013d, 0x013d, 0x0148, 0x0152, 0x015a, 0x0161, + 0x0161, 0x0189, 0x01ad, 0x01b4, 0x01bc, 0x01c8, 0x01db, 0x01e2, + 0x01ec, 0x01f3, 0x01fc, 0x01fc, 0x020d, 0x0214, 0x021e, 0x021e, + 0x021e, 0x0228, 0x023d, 0x0249, 0x0249, 0x0251, 0x0259, 0x0263, + // Entry 40 - 7F + 0x027a, 0x0283, 0x0283, 0x028a, 0x0292, 0x0299, 0x0299, 0x02a1, + 0x02ab, 0x02b6, 0x02b6, 0x02b6, 0x02bd, 0x02c3, 0x02d9, 0x02e5, + 0x02e5, 0x02f0, 0x02f8, 0x0305, 0x030f, 0x0315, 0x032e, 0x032e, + 0x0334, 0x033f, 0x034c, 0x0353, 0x0359, 0x0364, 0x0373, 0x037b, + 0x037b, 0x0386, 0x038b, 0x0399, 0x03a1, 0x03a1, 0x03a1, 0x03ac, + 0x03b5, 0x03bc, 0x03c5, 0x03c5, 0x03cf, 0x03d9, 0x03e3, 0x03e3, + 0x03e9, 0x0412, 0x0419, 0x0422, 0x042d, 0x0434, 0x0434, 0x043c, + 0x0443, 0x044b, 0x0452, 0x0460, 0x0469, 0x0473, 0x047b, 0x049b, + // Entry 80 - BF + 0x04b0, 0x04bf, 0x04c8, 0x04dd, 0x04eb, 0x04f2, 0x04fc, 0x0511, + 0x051d, 0x0528, 0x0531, 0x0539, 0x0542, 0x054d, 0x0554, 0x055a, + 0x0562, 0x056a, 0x0574, 0x0574, 0x0574, 0x057c, 0x0594, 0x059e, + 0x05a4, 0x05ab, 0x05b4, 0x05b4, 0x05d4, 0x05e0, 0x05ea, 0x05f5, + 0x05fc, 0x0604, 0x060c, 0x0614, 0x061c, 0x0625, 0x0630, 0x0638, + 0x0647, 0x064d, 0x0664, 0x066d, 0x0678, 0x0683, 0x0688, 0x0690, + 0x0697, 0x069d, 0x06a8, 0x06ae, 0x06b6, 0x06bc, 0x06d6, 0x06dd, + 0x06e8, 0x06f4, 0x06fc, 0x0720, 0x072c, 0x073a, 0x075c, 0x0764, + // Entry C0 - FF + 0x076b, 0x0775, 0x077d, 0x077d, 0x0788, 0x0791, 0x0791, 0x0798, + 0x07a0, 0x07b1, 0x07c8, 0x07d4, 0x07dc, 0x07e4, 0x07ec, 0x0802, + 0x080c, 0x080c, 0x0817, 0x0822, 0x082c, 0x0836, 0x083e, 0x0848, + 0x0848, 0x085f, 0x086a, 0x086a, 0x0870, 0x0879, 0x0879, 0x0899, + 0x08a0, 0x08a0, 0x08a6, 0x08af, 0x08bd, 0x08c6, 0x08db, 0x08ee, + 0x08f6, 0x08fd, 0x0906, 0x091c, 0x0924, 0x092d, 0x0937, 0x0942, + 0x094b, 0x094b, 0x094b, 0x0953, 0x095c, 0x096b, 0x0975, 0x099b, + 0x09a6, 0x09cd, 0x09f1, 0x09fc, 0x0a05, 0x0a19, 0x0a20, 0x0a20, + // Entry 100 - 13F + 0x0a27, 0x0a2f, 0x0a41, 0x0a48, 0x0a52, + }, + }, + { // lb + "AscensionAndorraVereenegt Arabesch EmiraterAfghanistanAntigua a BarbudaA" + + "nguillaAlbanienArmenienAngolaAntarktisArgentinienAmerikanesch-SamoaÉ" + + "isträichAustralienArubaÅlandinselenAserbaidschanBosnien an Herzegowi" + + "naBarbadosBangladeschBelschBurkina FasoBulgarienBahrainBurundiBeninS" + + "aint-BarthélemyBermudaBruneiBolivienKaribescht HollandBrasilienBaham" + + "asBhutanBouvetinselBotsuanaWäissrusslandBelizeKanadaKokosinselenKong" + + "o-KinshasaZentralafrikanesch RepublikKongo-BrazzavilleSchwäizCôte d’" + + "IvoireCookinselenChileKamerunChinaKolumbienClipperton-InselCosta Ric" + + "aKubaKap VerdeCuraçaoChrëschtdagsinselZypernTschechienDäitschlandDie" + + "go GarciaDschibutiDänemarkDominicaDominikanesch RepublikAlgerienCeut" + + "a a MelillaEcuadorEstlandEgyptenWestsaharaEritreaSpanienEthiopienEur" + + "opäesch UniounFinnlandFidschiFalklandinselenMikronesienFäröerFrankrä" + + "ichGabunGroussbritannienGrenadaGeorgienGuayaneGuernseyGhanaGibraltar" + + "GrönlandGambiaGuineaGuadeloupeEquatorialguineaGriichelandSüdgeorgien" + + " an déi Südlech SandwichinselenGuatemalaGuamGuinea-BissauGuyanaSpezi" + + "alverwaltungszon Hong KongHeard- a McDonald-InselenHondurasKroatienH" + + "aitiUngarnKanaresch InselenIndonesienIrlandIsraelIsle of ManIndienBr" + + "itescht Territorium am Indeschen OzeanIrakIranIslandItalienJerseyJam" + + "aikaJordanienJapanKeniaKirgisistanKambodschaKiribatiKomorenSt. Kitts" + + " an NevisNordkoreaSüdkoreaKuwaitKaimaninselenKasachstanLaosLibanonSt" + + ". LuciaLiechtensteinSri LankaLiberiaLesothoLitauenLëtzebuergLettland" + + "LibyenMarokkoMonacoMoldawienMontenegroSt. MartinMadagaskarMarshallin" + + "selenMazedonienMaliMyanmarMongoleiSpezialverwaltungszon MacauNërdlec" + + "h MarianenMartiniqueMauretanienMontserratMaltaMauritiusMaldivenMalaw" + + "iMexikoMalaysiaMosambikNamibiaNeikaledonienNigerNorfolkinselNigeriaN" + + "icaraguaHollandNorwegenNepalNauruNiueNeiséilandOmanPanamaPeruFranséi" + + "sch-PolynesienPapua-NeiguineaPhilippinnenPakistanPolenSt. Pierre a M" + + "iquelonPitcairninselenPuerto RicoPalestinensesch AutonomiegebidderPo" + + "rtugalPalauParaguayKatarBaussecht OzeanienRéunionRumänienSerbienRuss" + + "landRuandaSaudi-ArabienSalomonenSeychellenSudanSchwedenSingapurSt. H" + + "elenaSlowenienSvalbard a Jan MayenSlowakeiSierra LeoneSan MarinoSene" + + "galSomaliaSurinameSüdsudanSão Tomé a PríncipeEl SalvadorSint Maarten" + + "SyrienSwasilandTristan da CunhaTurks- a CaicosinselenTschadFranséisc" + + "h Süd- an AntarktisgebidderTogoThailandTadschikistanTokelauOsttimorT" + + "urkmenistanTunesienTongaTierkeiTrinidad an TobagoTuvaluTaiwanTansani" + + "aUkrainUgandaAmerikanesch-OzeanienVereenegt Staate vun AmerikaUrugua" + + "yUsbekistanVatikanstadSt. Vincent an d’GrenadinnenVenezuelaBritesch " + + "JoffereninselenAmerikanesch JoffereninselenVietnamVanuatuWallis a Fu" + + "tunaSamoaKosovoJemenMayotteSüdafrikaSambiaSimbabweOnbekannt RegiounW" + + "eltAfrikaNordamerikaSüdamerikaOzeanienWestafrikaMëttelamerikaOstafri" + + "kaNordafrikaZentralafrikaSüdlecht AfrikaAmerikaNërdlecht AmerikaKari" + + "bikOstasienSüdasienSüdostasienSüdeuropaAustralien an NeiséilandMelan" + + "esienMikronesescht InselgebittPolynesienAsienZentralasienWestasienEu" + + "ropaOsteuropaNordeuropaWesteuropaLatäinamerika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002b, 0x0036, 0x0047, 0x004f, 0x0057, + 0x005f, 0x0065, 0x006e, 0x0079, 0x008b, 0x0096, 0x00a0, 0x00a5, + 0x00b2, 0x00bf, 0x00d5, 0x00dd, 0x00e8, 0x00ee, 0x00fa, 0x0103, + 0x010a, 0x0111, 0x0116, 0x0127, 0x012e, 0x0134, 0x013c, 0x014e, + 0x0157, 0x015e, 0x0164, 0x016f, 0x0177, 0x0185, 0x018b, 0x0191, + 0x019d, 0x01ab, 0x01c6, 0x01d7, 0x01df, 0x01ef, 0x01fa, 0x01ff, + 0x0206, 0x020b, 0x0214, 0x0224, 0x022e, 0x0232, 0x023b, 0x0243, + 0x0255, 0x025b, 0x0265, 0x0271, 0x027d, 0x0286, 0x028f, 0x0297, + // Entry 40 - 7F + 0x02ad, 0x02b5, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e3, 0x02ea, + 0x02f1, 0x02fa, 0x030c, 0x030c, 0x0314, 0x031b, 0x032a, 0x0335, + 0x033d, 0x0348, 0x034d, 0x035d, 0x0364, 0x036c, 0x0373, 0x037b, + 0x0380, 0x0389, 0x0392, 0x0398, 0x039e, 0x03a8, 0x03b8, 0x03c3, + 0x03f0, 0x03f9, 0x03fd, 0x040a, 0x0410, 0x042f, 0x0448, 0x0450, + 0x0458, 0x045d, 0x0463, 0x0474, 0x047e, 0x0484, 0x048a, 0x0495, + 0x049b, 0x04c3, 0x04c7, 0x04cb, 0x04d1, 0x04d8, 0x04de, 0x04e5, + 0x04ee, 0x04f3, 0x04f8, 0x0503, 0x050d, 0x0515, 0x051c, 0x052e, + // Entry 80 - BF + 0x0537, 0x0540, 0x0546, 0x0553, 0x055d, 0x0561, 0x0568, 0x0571, + 0x057e, 0x0587, 0x058e, 0x0595, 0x059c, 0x05a7, 0x05af, 0x05b5, + 0x05bc, 0x05c2, 0x05cb, 0x05d5, 0x05df, 0x05e9, 0x05f8, 0x0602, + 0x0606, 0x060d, 0x0615, 0x0630, 0x0642, 0x064c, 0x0657, 0x0661, + 0x0666, 0x066f, 0x0677, 0x067d, 0x0683, 0x068b, 0x0693, 0x069a, + 0x06a7, 0x06ac, 0x06b8, 0x06bf, 0x06c8, 0x06cf, 0x06d7, 0x06dc, + 0x06e1, 0x06e5, 0x06f0, 0x06f4, 0x06fa, 0x06fe, 0x0714, 0x0723, + 0x072f, 0x0737, 0x073c, 0x0751, 0x0760, 0x076b, 0x078c, 0x0794, + // Entry C0 - FF + 0x0799, 0x07a1, 0x07a6, 0x07b8, 0x07c0, 0x07c9, 0x07d0, 0x07d8, + 0x07de, 0x07eb, 0x07f4, 0x07fe, 0x0803, 0x080b, 0x0813, 0x081d, + 0x0826, 0x083a, 0x0842, 0x084e, 0x0858, 0x085f, 0x0866, 0x086e, + 0x0877, 0x088d, 0x0898, 0x08a4, 0x08aa, 0x08b3, 0x08c3, 0x08d9, + 0x08df, 0x0905, 0x0909, 0x0911, 0x091e, 0x0925, 0x092d, 0x0939, + 0x0941, 0x0946, 0x094d, 0x095f, 0x0965, 0x096b, 0x0973, 0x0979, + 0x097f, 0x0994, 0x0994, 0x09b0, 0x09b7, 0x09c1, 0x09cc, 0x09ea, + 0x09f3, 0x0a0b, 0x0a27, 0x0a2e, 0x0a35, 0x0a44, 0x0a49, 0x0a4f, + // Entry 100 - 13F + 0x0a54, 0x0a5b, 0x0a65, 0x0a6b, 0x0a73, 0x0a84, 0x0a88, 0x0a8e, + 0x0a99, 0x0aa4, 0x0aac, 0x0ab6, 0x0ac4, 0x0acd, 0x0ad7, 0x0ae4, + 0x0af4, 0x0afb, 0x0b0d, 0x0b14, 0x0b1c, 0x0b25, 0x0b31, 0x0b3b, + 0x0b54, 0x0b5e, 0x0b77, 0x0b81, 0x0b86, 0x0b92, 0x0b9b, 0x0ba1, + 0x0baa, 0x0bb4, 0x0bbe, 0x0bcc, + }, + }, + { // lg + "AndoraEmireetiAfaganisitaniAntigwa ne BarabudaAngwilaAlibaniyaArameniyaA" + + "ngolaArigentinaSamowa omumerikaAwusituriyaAwusitureliyaArubaAzerebay" + + "ijaaniBoziniya HezegovinaBarabadosiBangaladesiBubirigiBurukina FasoB" + + "ulugariyaBaareeniBurundiBeniniBeremudaBurunayiBoliviyaBuraziiriBaham" + + "asiButaaniBotiswanaBelarusiBelizeKanadaKongo - ZayireLipubulika eya " + + "SenturafirikiKongoSwitizirandiKote DivwaBizinga bya KkukiCileKameruu" + + "niCayinaKolombyaKosita RikaCubaBizinga by’e Kepu VerediSipuriyaLipub" + + "ulika ya CeekaBudaakiJjibutiDenimaakaDominikaLipubulika ya DominikaA" + + "ligeryaEkwadoEsitoniyaMisiriEritureyaSipeyiniEsyopyaFinilandiFijiBiz" + + "inga by’eFalikalandiMikuronezyaBufalansaGaboniBungerezaGurenadaGyogy" + + "aGuyana enfalansaGanaGiburalitaGurenelandiGambyaGiniGwadalupeGayana " + + "ey’oku ekwetaBugereeki/BuyonaaniGwatemalaGwamuGini-BisawuGayanaHundu" + + "rasiKurowesyaHayitiHangareYindonezyaAyalandiYisirayeriBuyindiBizinga" + + " by’eCagoYiraakaYiraaniAyisirandiYitaleJamayikaYorodaniJapaniKenyaKi" + + "rigizisitaaniKambodyaKiribatiBizinga by’eKomoroSenti Kitisi ne Nevis" + + "iKoreya ey’omumambukaKoreya ey’omumaserengetaKuwetiBizinga ebya Kayi" + + "maaniKazakisitaaniLawosiLebanoniSenti LuciyaLicitensitayiniSirilanka" + + "LiberyaLesosoLisuwenyaLukisembaagaLativyaLibyaMorokoMonakoMolodovaMa" + + "dagasikaBizinga bya MarisoMasedoniyaMaliMyanimaMongoliyaBizinga bya " + + "Mariyana eby’omumambukaMaritiniikiMawulitenyaMonteseraatiMalitaMawul" + + "isyasiBizinga by’eMalidiveMalawiMekisikoMalezyaMozambiikiNamibiyaKal" + + "edonya mupyaNijeKizinga ky’eNorofokoNayijeryaNikaraguwaHolandiNoweNe" + + "paloNawuruNiyuweNiyuziirandiOmaaniPanamaPeruPolinesiya enfalansaPapw" + + "a NyuginiBizinga bya FiripinoPakisitaaniPolandiSenti Piyere ne Mikel" + + "oniPitikeeniPotorikoPalesitayiniPotugaaliPalawuParagwayiKataaLeyunyo" + + "niLomaniyaLasaRwandaSawudarebya - BuwarabuBizanga by’eSolomooniSeser" + + "eSudaaniSwideniSingapowaSenti HerenaSirovenyaSirovakyaSiyeralewoneSa" + + "nimarinoSenegaaloSomaliyaSurinaamuSanitome ne PurincipeEl salivadoSi" + + "riyaSwazirandiBizinga by’eTaaka ne KayikosiCaadiTogoTayirandiTajikis" + + "itaaniTokelawuTimowaTakimenesitaaniTunisyaTongaTtakeTurindaadi ne To" + + "bagoTuvaluTayiwaniTanzaniyaYukurayineYugandaAmerikaWurugwayiWuzibeki" + + "sitaaniVatikaaniSenti Vinsenti ne GurendadiiniVenzweraBizinga ebya V" + + "irigini ebitwalibwa BungerezaBizinga bya Virigini eby’AmerikaVyetina" + + "amuVanawuwatuWalisi ne FutunaSamowaYemeniMayotteSawusafirikaZambyaZi" + + "mbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x000e, 0x001b, 0x002e, 0x0035, 0x003e, + 0x0047, 0x004d, 0x004d, 0x0057, 0x0067, 0x0072, 0x007f, 0x0084, + 0x0084, 0x0092, 0x00a5, 0x00af, 0x00ba, 0x00c2, 0x00cf, 0x00d9, + 0x00e1, 0x00e8, 0x00ee, 0x00ee, 0x00f6, 0x00fe, 0x0106, 0x0106, + 0x010f, 0x0117, 0x011e, 0x011e, 0x0127, 0x012f, 0x0135, 0x013b, + 0x013b, 0x0149, 0x0165, 0x016a, 0x0176, 0x0180, 0x0191, 0x0195, + 0x019e, 0x01a4, 0x01ac, 0x01ac, 0x01b7, 0x01bb, 0x01d5, 0x01d5, + 0x01d5, 0x01dd, 0x01f0, 0x01f7, 0x01f7, 0x01fe, 0x0207, 0x020f, + // Entry 40 - 7F + 0x0225, 0x022d, 0x022d, 0x0233, 0x023c, 0x0242, 0x0242, 0x024b, + 0x0253, 0x025a, 0x025a, 0x025a, 0x0263, 0x0267, 0x0280, 0x028b, + 0x028b, 0x0294, 0x029a, 0x02a3, 0x02ab, 0x02b1, 0x02c1, 0x02c1, + 0x02c5, 0x02cf, 0x02da, 0x02e0, 0x02e4, 0x02ed, 0x0303, 0x0316, + 0x0316, 0x031f, 0x0324, 0x032f, 0x0335, 0x0335, 0x0335, 0x033e, + 0x0347, 0x034d, 0x0354, 0x0354, 0x035e, 0x0366, 0x0370, 0x0370, + 0x0377, 0x0389, 0x0390, 0x0397, 0x03a1, 0x03a7, 0x03a7, 0x03af, + 0x03b7, 0x03bd, 0x03c2, 0x03d1, 0x03d9, 0x03e1, 0x03f5, 0x040b, + // Entry 80 - BF + 0x0421, 0x043b, 0x0441, 0x0457, 0x0464, 0x046a, 0x0472, 0x047e, + 0x048d, 0x0496, 0x049d, 0x04a3, 0x04ac, 0x04b8, 0x04bf, 0x04c4, + 0x04ca, 0x04d0, 0x04d8, 0x04d8, 0x04d8, 0x04e2, 0x04f4, 0x04fe, + 0x0502, 0x0509, 0x0512, 0x0512, 0x0537, 0x0542, 0x054d, 0x0559, + 0x055f, 0x056a, 0x0580, 0x0586, 0x058e, 0x0595, 0x059f, 0x05a7, + 0x05b6, 0x05ba, 0x05d0, 0x05d9, 0x05e3, 0x05ea, 0x05ee, 0x05f4, + 0x05fa, 0x0600, 0x060c, 0x0612, 0x0618, 0x061c, 0x0630, 0x063d, + 0x0651, 0x065c, 0x0663, 0x067b, 0x0684, 0x068c, 0x0698, 0x06a1, + // Entry C0 - FF + 0x06a7, 0x06b0, 0x06b5, 0x06b5, 0x06be, 0x06c6, 0x06c6, 0x06ca, + 0x06d0, 0x06e6, 0x06fd, 0x0703, 0x070a, 0x0711, 0x071a, 0x0726, + 0x072f, 0x072f, 0x0738, 0x0744, 0x074e, 0x0757, 0x075f, 0x0768, + 0x0768, 0x077d, 0x0788, 0x0788, 0x078e, 0x0798, 0x0798, 0x07b7, + 0x07bc, 0x07bc, 0x07c0, 0x07c9, 0x07d6, 0x07de, 0x07e4, 0x07f3, + 0x07fa, 0x07ff, 0x0804, 0x0818, 0x081e, 0x0826, 0x082f, 0x0839, + 0x0840, 0x0840, 0x0840, 0x0847, 0x0850, 0x085f, 0x0868, 0x0886, + 0x088e, 0x08b9, 0x08db, 0x08e5, 0x08ef, 0x08ff, 0x0905, 0x0905, + // Entry 100 - 13F + 0x090b, 0x0912, 0x091e, 0x0924, 0x092c, + }, + }, + { // lkt + "Uŋčíyapi MakȟóčhePȟečhókaŋhaŋska MakȟóčheIyášiča MakȟóčheSpayólaȟče Makȟ" + + "óčheKisúŋla MakȟóčheSpayóla MakȟóčheMílahaŋska TȟamákȟočheMakȟásito" + + "mniHásapa MakȟáwitaKhéya WítaHazíla MakȟáwitaWašíču Makȟáwita", + []uint16{ // 288 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, + 0x0037, 0x0037, 0x0037, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + // Entry 40 - 7F + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + // Entry 80 - BF + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + // Entry C0 - FF + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, + 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, + // Entry 100 - 13F + 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00b9, 0x00cc, + 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, + 0x00cc, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00eb, 0x00eb, 0x00eb, 0x0100, + }, + }, + { // ln + "AndorɛLɛmila alaboAfiganisitáAntiga mpé BarbudaAngiyɛAlibaniAmɛniAngólaA" + + "ntarctiqueArizantinɛSamoa ya AmerikiOtilisiOsitáliArubaAzɛlɛbaizáBos" + + "ini mpé HezegovineBarɛbadɛBengalidɛsiBelezikiBukina FasoBiligariBahr" + + "ɛnɛBurundiBenɛBermudaBrineyiBoliviBrezílɛBahamasɛButániBotswanaByel" + + "orisiBelizɛKanadaRepublíki ya Kongó DemokratíkiRepibiki ya Afríka ya" + + " KátiKongoSwisɛKotídivualɛBisanga bya KookɛSíliKamɛruneSinɛKolombiKo" + + "sitarikaKibaBisanga bya KapevɛrɛSípɛlɛRepibiki TsekɛAlemaniDzibutiDa" + + "nɛmarikeDomínikeRepibiki ya DomínikɛAlizɛriEkwatɛ́lɛEsitoniEzípiteEl" + + "itelɛEsipanyeEtsíopiFilandɛFidziBisanga bya MaluniMikroneziFalánsɛGa" + + "bɔAngɛlɛtɛ́lɛGelenadɛZorziGiyanɛ ya FalánsɛGuerneseyGanaZibatalɛGowe" + + "landeGambiGinɛGwadɛlupɛGinɛ́kwatɛ́lɛGelekiÎles de Géorgie du Sud et " + + "Sandwich du SudGwatémalaGwamɛGinɛbisauGiyaneIle Heard et Iles McDona" + + "ldOndurasɛKrowasiAyitiOngiliIndoneziIrelandɛIsirayelɛÍndɛMabelé ya A" + + "ngɛlɛtɛ́lɛ na mbú ya IndiyaIrakiIrâIsilandɛItaliZamaikiZɔdaniZapɔKen" + + "yaKigizisitáKambodzaKiribatiKomorɛSántu krístofe mpé Nevɛ̀sKorɛ ya n" + + "ɔ́rdiKorɛ ya súdiKowetiBisanga bya KayímaKazakisitáLawosiLibáSántu " + + "lisiLishɛteniSirilankaLibériyaLesotoLitwaniLikisambuluLetoniLibíMaro" + + "kɛMonakoMolidaviMonténégroMadagasikariBisanga bya MarishalɛMasedwanɛ" + + "MalíBirmanieMongolíBisanga bya Marianɛ ya nɔ́rdiMartinikiMoritaniMɔs" + + "eraMalitɛMorisɛMadívɛMalawiMeksikeMaleziMozambíkiNamibiKaledoni ya s" + + "ikaNizɛrɛEsanga NorfokɛNizeryaNikaragwaOlandɛNorivezɛNepálɛNauruNyué" + + "Zelandɛ ya sikaOmánɛPanamaPéruPolinezi ya FalánsɛPapwazi Ginɛ ya sik" + + "aFilipinɛPakisitáPoloniSántu pététo mpé MikelɔPikairniPɔtorikoPalɛsi" + + "nePutúlugɛsiPalauPalagweiKatariLenyoRomaniSerbieRisíRwandaAlabi Sawu" + + "ditɛBisanga SolomɔSɛshɛlɛSudáSwédɛSingapurɛSántu eleniSiloveniSilova" + + "kiSiera LeonɛSántu MarinɛSenegalɛSomaliSurinamɛSao Tomé mpé PresipɛS" + + "avadɔrɛSiríSwazilandiBisanga bya Turki mpé KaikoTsádiTerres australe" + + "s et antarctiques françaisesTogoTailandɛTazikisitáTokelauTimorɛ ya M" + + "oniɛlɛTikɛménisitáTiniziTongaTilikiTinidadɛ mpé TobagoTuvaluTaiwanin" + + "TanzaniIkrɛniUgandaAmerikiIrigweiUzibɛkisitáVatikáSántu vesá mpé Gel" + + "enadinɛVenézuelaBisanga bya Vierzi ya Angɛlɛtɛ́lɛBisanga bya Vierzi " + + "ya AmerikiViyetinamɛVanuatuWalisɛ mpé FutunaSamoaYemɛnɛMayotɛAfríka " + + "ya SúdiZambiZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0014, 0x0020, 0x0033, 0x003a, 0x0041, + 0x0047, 0x004e, 0x0059, 0x0064, 0x0074, 0x007b, 0x0083, 0x0088, + 0x0088, 0x0095, 0x00ab, 0x00b5, 0x00c1, 0x00c9, 0x00d4, 0x00dc, + 0x00e5, 0x00ec, 0x00f1, 0x00f1, 0x00f8, 0x00ff, 0x0105, 0x0105, + 0x010e, 0x0117, 0x011e, 0x011e, 0x0126, 0x012f, 0x0136, 0x013c, + 0x013c, 0x015d, 0x0179, 0x017e, 0x0184, 0x0191, 0x01a3, 0x01a8, + 0x01b1, 0x01b6, 0x01bd, 0x01bd, 0x01c7, 0x01cb, 0x01e1, 0x01e1, + 0x01e1, 0x01ea, 0x01f9, 0x0200, 0x0200, 0x0207, 0x0212, 0x021b, + // Entry 40 - 7F + 0x0231, 0x0239, 0x0239, 0x0245, 0x024c, 0x0254, 0x0254, 0x025c, + 0x0264, 0x026c, 0x026c, 0x026c, 0x0274, 0x0279, 0x028b, 0x0294, + 0x0294, 0x029d, 0x02a2, 0x02b2, 0x02bb, 0x02c0, 0x02d4, 0x02dd, + 0x02e1, 0x02ea, 0x02f3, 0x02f8, 0x02fd, 0x0308, 0x031a, 0x0320, + 0x034b, 0x0355, 0x035b, 0x0365, 0x036b, 0x036b, 0x0385, 0x038e, + 0x0395, 0x039a, 0x03a0, 0x03a0, 0x03a8, 0x03b1, 0x03bb, 0x03bb, + 0x03c1, 0x03ee, 0x03f3, 0x03f7, 0x0400, 0x0405, 0x0405, 0x040c, + 0x0413, 0x0418, 0x041d, 0x0428, 0x0430, 0x0438, 0x043f, 0x045d, + // Entry 80 - BF + 0x046e, 0x047c, 0x0482, 0x0495, 0x04a0, 0x04a6, 0x04ab, 0x04b6, + 0x04c0, 0x04c9, 0x04d2, 0x04d8, 0x04df, 0x04ea, 0x04f0, 0x04f5, + 0x04fc, 0x0502, 0x050a, 0x0516, 0x0516, 0x0522, 0x0538, 0x0542, + 0x0547, 0x054f, 0x0557, 0x0557, 0x0577, 0x0580, 0x0588, 0x058f, + 0x0596, 0x059d, 0x05a5, 0x05ab, 0x05b2, 0x05b8, 0x05c2, 0x05c8, + 0x05d8, 0x05e0, 0x05ef, 0x05f6, 0x05ff, 0x0606, 0x060f, 0x0617, + 0x061c, 0x0621, 0x0631, 0x0638, 0x063e, 0x0643, 0x0658, 0x066d, + 0x0676, 0x067f, 0x0685, 0x06a1, 0x06a9, 0x06b2, 0x06bb, 0x06c7, + // Entry C0 - FF + 0x06cc, 0x06d4, 0x06da, 0x06da, 0x06df, 0x06e5, 0x06eb, 0x06f0, + 0x06f6, 0x0705, 0x0714, 0x071e, 0x0723, 0x072a, 0x0734, 0x0740, + 0x0748, 0x0748, 0x0750, 0x075c, 0x076a, 0x0773, 0x0779, 0x0782, + 0x0782, 0x0799, 0x07a3, 0x07a3, 0x07a8, 0x07b2, 0x07b2, 0x07ce, + 0x07d4, 0x0800, 0x0804, 0x080d, 0x0818, 0x081f, 0x0833, 0x0842, + 0x0848, 0x084d, 0x0853, 0x0868, 0x086e, 0x0876, 0x087d, 0x0884, + 0x088a, 0x088a, 0x088a, 0x0891, 0x0898, 0x08a5, 0x08ac, 0x08c9, + 0x08d3, 0x08f9, 0x0916, 0x0921, 0x0928, 0x093b, 0x0940, 0x0940, + // Entry 100 - 13F + 0x0948, 0x094f, 0x095f, 0x0964, 0x096c, + }, + }, + { // lo + loRegionStr, + loRegionIdx, + }, + { // lrc + "بئرئزیلچینآلمانفأرانسەبیریتانیا گأپھئنئیتالیاجاپوٙنروٙسیەڤولاتیا یأکاگئر" + + "تەراساگە نادیاردونیائفریقائمریکا شومالیئمریکا ھارگەھوم پئڤأند جأھوٙ" + + "ن آڤمینجا ئمریکائمریکائمریکا ڤاروکارائیبآسیائوروٙپائمریکا لاتین", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + // Entry 40 - 7F + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x002c, 0x002c, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x0059, 0x0059, 0x0059, + 0x0059, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry 80 - BF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + // Entry C0 - FF + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + // Entry 100 - 13F + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x00ab, 0x00b5, 0x00c1, + 0x00da, 0x00f1, 0x0116, 0x0116, 0x012d, 0x012d, 0x012d, 0x012d, + 0x012d, 0x0139, 0x014e, 0x015c, 0x015c, 0x015c, 0x015c, 0x015c, + 0x015c, 0x015c, 0x015c, 0x015c, 0x0164, 0x0164, 0x0164, 0x0172, + 0x0172, 0x0172, 0x0172, 0x0189, + }, + }, + { // lt + ltRegionStr, + ltRegionIdx, + }, + { // lu + "AndoreLemila alabuAfuganisitaAntiga ne BarbudaAngiyeAlubaniAmeniAngolaAl" + + "ijantineSamoa wa AmerikiOtilisiOsitaliArubaAjelbayidjaMbosini ne Hez" + + "egovineBarebadeBenguladeshiBelejikiBukinafasoBiligariBahreneBurundiB" + + "eneBermudaBrineyiMboliviMnulezileBahamaseButaniMbotswanaByelorisiBel" + + "izeKanadaDitunga wa KonguDitunga dya Afrika wa munkatshiKonguSwiseKo" + + "tedivualeLutanda lua KookɛShiliKameruneShineKolombiKositarikaKubaLut" + + "anda lua KapeveleShipeleDitunga dya TshekaAlemanuDjibutiDanemalakuDu" + + "minikuDitunga wa DuminikuAlijeriEkwateleEsitoniMushidiEliteleNsipani" + + "EtshiopiFilandeFujiLutanda lua MaluniMikroneziNfalanseNgabuAngeletel" + + "eNgelenadeJorijiGiyane wa NfalanseNganaJibeletaleNgowelandeGambiNgin" + + "eNgwadelupeGine EkwateleNgelekaNgwatemalaNgwameNginebisauNgiyaneOndu" + + "raseKrowasiAyitiOngiliIndoneziIrelandeIsirayeleIndeLutanda lwa Angel" + + "etele ku mbu wa IndiyaIrakiIraIsilandeItaliJamaikiJodaniJapuKenyaKig" + + "izisitaKambodzaKiribatiKomoruSantu krístofe ne NevesKore wa muuluKor" + + "e wa mwinshiKowetiLutanda lua KayimaKazakusitaLawosiLibaSantu lisiLi" + + "shuteniSirilankaLiberiyaLesotoLitwaniLikisambuluLetoniLibiMarokeMona" + + "kuMolidaviMadagasikariLutanda lua MarishaleMasedwaneMaliMyamareMongo" + + "liLutanda lua Mariane wa muuluMartinikiMoritaniMuseraMaliteMoriseMad" + + "iveMalawiMeksikeMaleziMozambikiNamibiKaledoni wa mumuNijereLutanda l" + + "ua NorfokNijeryaNikaragwaOlandɛNorivejeNepálɛNauruNyueZelanda wa mum" + + "uOmanePanamaPeruPolinezi wa NfalansePapwazi wa Nginɛ wa mumuNfilipiP" + + "akisitaMpoloniSantu pététo ne MikeluPikairniMpotorikuPalesineMputulu" + + "geshiPalauPalagweiKatariLenyoRomaniRisiRwandaAlabu NsawudiLutanda lu" + + "a SolomuSesheleSudaSuwediSingapureSantu eleniSiloveniSilovakiSiera L" + + "eoneSantu MarineSenegaleSomaliSurinameSao Tome ne PresipɛSavadoreSir" + + "iSwazilandiLutanda lua Tuluki ne KaikoTshadiToguTayilandaTazikisitaT" + + "okelauTimoru wa dibokuTukemenisitaTiniziTongaTulukiTinidade ne Tobag" + + "oTuvaluTaiwaniTanzaniUkreniUgandaAmerikiIrigweiUzibekisitaNvatikaSan" + + "tu vesa ne NgelenadineVenezuelaLutanda lua Vierzi wa AngeleteleLutan" + + "da lua Vierzi wa AmerikiViyetinameVanuatuWalise ne FutunaSamoaYemenu" + + "MayoteAfrika ya SúdiZambiZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0012, 0x001d, 0x002e, 0x0034, 0x003b, + 0x0040, 0x0046, 0x0046, 0x0050, 0x0060, 0x0067, 0x006e, 0x0073, + 0x0073, 0x007e, 0x0093, 0x009b, 0x00a7, 0x00af, 0x00b9, 0x00c1, + 0x00c8, 0x00cf, 0x00d3, 0x00d3, 0x00da, 0x00e1, 0x00e8, 0x00e8, + 0x00f1, 0x00f9, 0x00ff, 0x00ff, 0x0108, 0x0111, 0x0117, 0x011d, + 0x011d, 0x012d, 0x014c, 0x0151, 0x0156, 0x0161, 0x0173, 0x0178, + 0x0180, 0x0185, 0x018c, 0x018c, 0x0196, 0x019a, 0x01ae, 0x01ae, + 0x01ae, 0x01b5, 0x01c7, 0x01ce, 0x01ce, 0x01d5, 0x01df, 0x01e7, + // Entry 40 - 7F + 0x01fa, 0x0201, 0x0201, 0x0209, 0x0210, 0x0217, 0x0217, 0x021e, + 0x0225, 0x022d, 0x022d, 0x022d, 0x0234, 0x0238, 0x024a, 0x0253, + 0x0253, 0x025b, 0x0260, 0x026a, 0x0273, 0x0279, 0x028b, 0x028b, + 0x0290, 0x029a, 0x02a4, 0x02a9, 0x02ae, 0x02b8, 0x02c5, 0x02cc, + 0x02cc, 0x02d6, 0x02dc, 0x02e6, 0x02ed, 0x02ed, 0x02ed, 0x02f5, + 0x02fc, 0x0301, 0x0307, 0x0307, 0x030f, 0x0317, 0x0320, 0x0320, + 0x0324, 0x034b, 0x0350, 0x0353, 0x035b, 0x0360, 0x0360, 0x0367, + 0x036d, 0x0371, 0x0376, 0x0380, 0x0388, 0x0390, 0x0396, 0x03ae, + // Entry 80 - BF + 0x03bb, 0x03ca, 0x03d0, 0x03e2, 0x03ec, 0x03f2, 0x03f6, 0x0400, + 0x0409, 0x0412, 0x041a, 0x0420, 0x0427, 0x0432, 0x0438, 0x043c, + 0x0442, 0x0448, 0x0450, 0x0450, 0x0450, 0x045c, 0x0471, 0x047a, + 0x047e, 0x0485, 0x048c, 0x048c, 0x04a8, 0x04b1, 0x04b9, 0x04bf, + 0x04c5, 0x04cb, 0x04d1, 0x04d7, 0x04de, 0x04e4, 0x04ed, 0x04f3, + 0x0503, 0x0509, 0x051b, 0x0522, 0x052b, 0x0532, 0x053a, 0x0542, + 0x0547, 0x054b, 0x055a, 0x055f, 0x0565, 0x0569, 0x057d, 0x0596, + 0x059d, 0x05a5, 0x05ac, 0x05c4, 0x05cc, 0x05d5, 0x05dd, 0x05e9, + // Entry C0 - FF + 0x05ee, 0x05f6, 0x05fc, 0x05fc, 0x0601, 0x0607, 0x0607, 0x060b, + 0x0611, 0x061e, 0x0630, 0x0637, 0x063b, 0x0641, 0x064a, 0x0655, + 0x065d, 0x065d, 0x0665, 0x0670, 0x067c, 0x0684, 0x068a, 0x0692, + 0x0692, 0x06a6, 0x06ae, 0x06ae, 0x06b2, 0x06bc, 0x06bc, 0x06d7, + 0x06dd, 0x06dd, 0x06e1, 0x06ea, 0x06f4, 0x06fb, 0x070b, 0x0717, + 0x071d, 0x0722, 0x0728, 0x073a, 0x0740, 0x0747, 0x074e, 0x0754, + 0x075a, 0x075a, 0x075a, 0x0761, 0x0768, 0x0773, 0x077a, 0x0793, + 0x079c, 0x07bc, 0x07d9, 0x07e3, 0x07ea, 0x07fa, 0x07ff, 0x07ff, + // Entry 100 - 13F + 0x0805, 0x080b, 0x081a, 0x081f, 0x0827, + }, + }, + { // luo + "AndorraUnited Arab EmiratesAfghanistanAntigua gi BarbudaAnguillaAlbaniaA" + + "rmeniaAngolaArgentinaAmerican SamoaAustriaAustraliaArubaAzerbaijanBo" + + "snia gi HerzegovinaBarbadosBangladeshBelgiumBurkina FasoBulgariaBahr" + + "ainBurundiBeninBermudaBruneiBoliviaBrazilBahamasBhutanBotswanaBelaru" + + "sBelizeCanadaDemocratic Republic of the CongoCentral African Republi" + + "cCongoSwitzerlandCôte dCook IslandsChileCameroonChinaColombiaCosta R" + + "icaCubaCape Verde IslandsCyprusCzech RepublicGermanyDjiboutiDenmarkD" + + "ominicaDominican RepublicAlgeriaEcuadorEstoniaEgyptEritreaSpainEthio" + + "piaFinlandFijiChuia mar FalklandMicronesiaFranceGabonUnited KingdomG" + + "renadaGeorgiaFrench GuianaGhanaGibraltarGreenlandGambiaGuineaGuadelo" + + "upeEquatorial GuineaGreeceGuatemalaGuamGuinea-BissauGuyanaHondurasCr" + + "oatiaHaitiHungaryIndonesiaIrelandIsraelIndiaBritish Indian Ocean Ter" + + "ritoryIraqIranIcelandItalyJamaicaJordanJapanKenyaKyrgyzstanCambodiaK" + + "iribatiComorosSaint Kitts gi NevisKorea MasawaKorea MilamboKuwaitCay" + + "man IslandsKazakhstanLaosLebanonSaint LuciaLiechtensteinSri LankaLib" + + "eriaLesothoLithuaniaLuxembourgLatviaLibyaMoroccoMonacoMoldovaMadagas" + + "carChuia mar MarshallMacedoniaMaliMyanmarMongoliaNorthern Mariana Is" + + "landsMartiniqueMauritaniaMontserratMaltaMauritiusMaldivesMalawiMexic" + + "oMalaysiaMozambiqueNamibiaNew CaledoniaNigerChuia mar NorfolkNigeria" + + "NicaraguaNetherlandsNorwayNepalNauruNiueNew ZealandOmanPanamaPeruFre" + + "nch PolynesiaPapua New GuineaPhilippinesPakistanPolandSaint Pierre g" + + "i MiquelonPitcairnPuerto RicoPalestinian West Bank gi GazaPortugalPa" + + "lauParaguayQatarRéunionRomaniaRussiaRwandaSaudi ArabiaSolomon Island" + + "sSeychellesSudanSwedenSingaporeSaint HelenaSloveniaSlovakiaSierra Le" + + "oneSan MarinoSenegalSomaliaSurinameSão Tomé gi PríncipeEl SalvadorSy" + + "riaSwazilandTurks gi Caicos IslandsChadTogoThailandTajikistanTokelau" + + "East TimorTurkmenistanTunisiaTongaTurkeyTrinidad gi TobagoTuvaluTaiw" + + "anTanzaniaUkraineUgandaUSAUruguayUzbekistanVatican StateSaint Vincen" + + "t gi GrenadinesVenezuelaBritish Virgin IslandsU.S. Virgin IslandsVie" + + "tnamVanuatuWallis gi FutunaSamoaYemenMayotteSouth AfricaZambiaZimbab" + + "we", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x001b, 0x0026, 0x0038, 0x0040, 0x0047, + 0x004e, 0x0054, 0x0054, 0x005d, 0x006b, 0x0072, 0x007b, 0x0080, + 0x0080, 0x008a, 0x009f, 0x00a7, 0x00b1, 0x00b8, 0x00c4, 0x00cc, + 0x00d3, 0x00da, 0x00df, 0x00df, 0x00e6, 0x00ec, 0x00f3, 0x00f3, + 0x00f9, 0x0100, 0x0106, 0x0106, 0x010e, 0x0115, 0x011b, 0x0121, + 0x0121, 0x0141, 0x0159, 0x015e, 0x0169, 0x0170, 0x017c, 0x0181, + 0x0189, 0x018e, 0x0196, 0x0196, 0x01a0, 0x01a4, 0x01b6, 0x01b6, + 0x01b6, 0x01bc, 0x01ca, 0x01d1, 0x01d1, 0x01d9, 0x01e0, 0x01e8, + // Entry 40 - 7F + 0x01fa, 0x0201, 0x0201, 0x0208, 0x020f, 0x0214, 0x0214, 0x021b, + 0x0220, 0x0228, 0x0228, 0x0228, 0x022f, 0x0233, 0x0245, 0x024f, + 0x024f, 0x0255, 0x025a, 0x0268, 0x026f, 0x0276, 0x0283, 0x0283, + 0x0288, 0x0291, 0x029a, 0x02a0, 0x02a6, 0x02b0, 0x02c1, 0x02c7, + 0x02c7, 0x02d0, 0x02d4, 0x02e1, 0x02e7, 0x02e7, 0x02e7, 0x02ef, + 0x02f6, 0x02fb, 0x0302, 0x0302, 0x030b, 0x0312, 0x0318, 0x0318, + 0x031d, 0x033b, 0x033f, 0x0343, 0x034a, 0x034f, 0x034f, 0x0356, + 0x035c, 0x0361, 0x0366, 0x0370, 0x0378, 0x0380, 0x0387, 0x039b, + // Entry 80 - BF + 0x03a7, 0x03b4, 0x03ba, 0x03c8, 0x03d2, 0x03d6, 0x03dd, 0x03e8, + 0x03f5, 0x03fe, 0x0405, 0x040c, 0x0415, 0x041f, 0x0425, 0x042a, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0448, 0x045a, 0x0463, + 0x0467, 0x046e, 0x0476, 0x0476, 0x048e, 0x0498, 0x04a2, 0x04ac, + 0x04b1, 0x04ba, 0x04c2, 0x04c8, 0x04ce, 0x04d6, 0x04e0, 0x04e7, + 0x04f4, 0x04f9, 0x050a, 0x0511, 0x051a, 0x0525, 0x052b, 0x0530, + 0x0535, 0x0539, 0x0544, 0x0548, 0x054e, 0x0552, 0x0562, 0x0572, + 0x057d, 0x0585, 0x058b, 0x05a3, 0x05ab, 0x05b6, 0x05d3, 0x05db, + // Entry C0 - FF + 0x05e0, 0x05e8, 0x05ed, 0x05ed, 0x05f5, 0x05fc, 0x05fc, 0x0602, + 0x0608, 0x0614, 0x0623, 0x062d, 0x0632, 0x0638, 0x0641, 0x064d, + 0x0655, 0x0655, 0x065d, 0x0669, 0x0673, 0x067a, 0x0681, 0x0689, + 0x0689, 0x06a0, 0x06ab, 0x06ab, 0x06b0, 0x06b9, 0x06b9, 0x06d0, + 0x06d4, 0x06d4, 0x06d8, 0x06e0, 0x06ea, 0x06f1, 0x06fb, 0x0707, + 0x070e, 0x0713, 0x0719, 0x072b, 0x0731, 0x0737, 0x073f, 0x0746, + 0x074c, 0x074c, 0x074c, 0x074f, 0x0756, 0x0760, 0x076d, 0x0788, + 0x0791, 0x07a7, 0x07ba, 0x07c1, 0x07c8, 0x07d8, 0x07dd, 0x07dd, + // Entry 100 - 13F + 0x07e2, 0x07e9, 0x07f5, 0x07fb, 0x0803, + }, + }, + { // luy + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa lya MarekaniAustriaAustraliaArubaAzabajaniBosn" + + "ia na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBaharen" + + "iBurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarus" + + "iBelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Ka" + + "tiKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostari" + + "kaKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJ" + + "amhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUf" + + "iniFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJo" + + "jiaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinek" + + "wetaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungaria" + + "IndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIr" + + "akiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodi" + + "aKiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaiti" + + "Visiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilan" + + "kaLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukin" + + "iVisiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya " + + "KaskaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksiko" + + "MalesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNika" + + "ragwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia " + + "ya UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkai" + + "rniPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoP" + + "alauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya Solomon" + + "ShelisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera Leoni" + + "SamarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswa" + + "ziVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori" + + " ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuv" + + "aluTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSa" + + "ntavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiw" + + "a vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniM" + + "ayotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x006a, 0x0071, 0x007a, 0x007f, + 0x007f, 0x0088, 0x009c, 0x00a4, 0x00af, 0x00b7, 0x00c1, 0x00c9, + 0x00d1, 0x00d8, 0x00de, 0x00de, 0x00e5, 0x00eb, 0x00f2, 0x00f2, + 0x00f9, 0x00ff, 0x0105, 0x0105, 0x010d, 0x0115, 0x011b, 0x0121, + 0x0121, 0x0141, 0x015a, 0x015f, 0x0165, 0x016c, 0x017b, 0x0180, + 0x0188, 0x018d, 0x0195, 0x0195, 0x019e, 0x01a2, 0x01aa, 0x01aa, + 0x01aa, 0x01b1, 0x01c1, 0x01ca, 0x01ca, 0x01d0, 0x01d7, 0x01df, + // Entry 40 - 7F + 0x01f2, 0x01f9, 0x01f9, 0x01ff, 0x0206, 0x020b, 0x020b, 0x0212, + 0x021a, 0x0222, 0x0222, 0x0222, 0x0227, 0x022b, 0x023e, 0x0248, + 0x0248, 0x0250, 0x0256, 0x025f, 0x0266, 0x026b, 0x027e, 0x027e, + 0x0283, 0x028b, 0x0294, 0x029a, 0x029e, 0x02a7, 0x02b0, 0x02b7, + 0x02b7, 0x02c0, 0x02c4, 0x02cd, 0x02d3, 0x02d3, 0x02d3, 0x02dc, + 0x02e3, 0x02e8, 0x02f0, 0x02f0, 0x02f9, 0x0301, 0x0308, 0x0308, + 0x030d, 0x0332, 0x0337, 0x033d, 0x0345, 0x034b, 0x034b, 0x0352, + 0x0359, 0x035f, 0x0364, 0x0371, 0x0379, 0x0381, 0x0387, 0x039a, + // Entry 80 - BF + 0x03a9, 0x03b5, 0x03bc, 0x03cd, 0x03d8, 0x03dd, 0x03e5, 0x03ef, + 0x03f9, 0x0402, 0x0409, 0x040f, 0x0417, 0x0420, 0x0427, 0x042c, + 0x0432, 0x0438, 0x043f, 0x043f, 0x043f, 0x0445, 0x0457, 0x0460, + 0x0464, 0x0469, 0x0471, 0x0471, 0x0491, 0x049a, 0x04a3, 0x04ae, + 0x04b3, 0x04b9, 0x04bf, 0x04c5, 0x04cc, 0x04d3, 0x04db, 0x04e2, + 0x04ee, 0x04f4, 0x0505, 0x050c, 0x0515, 0x051d, 0x0522, 0x0528, + 0x052d, 0x0531, 0x053b, 0x0540, 0x0546, 0x054a, 0x055f, 0x0564, + 0x056c, 0x0575, 0x057c, 0x0592, 0x059b, 0x05a4, 0x05d6, 0x05db, + // Entry C0 - FF + 0x05e0, 0x05e8, 0x05ee, 0x05ee, 0x05f7, 0x05fe, 0x05fe, 0x0603, + 0x0609, 0x060e, 0x0620, 0x062a, 0x0630, 0x0636, 0x063e, 0x0649, + 0x0651, 0x0651, 0x0659, 0x0664, 0x066c, 0x0674, 0x067b, 0x0683, + 0x0683, 0x0697, 0x069f, 0x069f, 0x06a4, 0x06aa, 0x06aa, 0x06c3, + 0x06c8, 0x06c8, 0x06cc, 0x06d4, 0x06df, 0x06e6, 0x06f9, 0x0708, + 0x070f, 0x0714, 0x071b, 0x072d, 0x0733, 0x073a, 0x0742, 0x0749, + 0x074f, 0x074f, 0x074f, 0x0757, 0x075e, 0x076a, 0x0772, 0x078b, + 0x0794, 0x07b3, 0x07d1, 0x07da, 0x07e1, 0x07f0, 0x07f5, 0x07f5, + // Entry 100 - 13F + 0x07fb, 0x0802, 0x080f, 0x0815, 0x081d, + }, + }, + { // lv + lvRegionStr, + lvRegionIdx, + }, + { // mas + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTansaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniSambiaSimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // mer + "AndoraFalme cia KiarabuAfuganistaniAntigua na BarbudaAnguillaAlubaniaArm" + + "eniaAngolaAjentinaSamoa ya AmerikaAustiriaAustrĩliaArubaAzebaijaniBo" + + "snia na HezegovinaBabadosiBangiradeshiBeronjiamuBukinafasoBulgariaBa" + + "hariniBurundiBeniniBamudaBruneiBoliviaBraziluBahamasiButaniBotswanaB" + + "elarusiBelizeKanadaNthĩ ya Kidemokrasĩ ya KongoNthĩ ya Afrika gatĩga" + + "tĩKongoSwizilandiKodivaaAĩrandi cia CookChileKameruniChinaKolombiaKo" + + "starikaKiubaKepuvedeCaipurasiNthĩ ya ChekiNjamanĩJibutiDenimakiDomin" + + "ikaNthĩ ya DominikaAngiriaEkwadoEstoniaMisiriEritreaSpĩniIthiopiaFin" + + "ilandiFijiAĩrandi cia FalklandiMikronesiaFransiGaboniNgerethaGrenada" + + "JojiaGwiyana ya FransiGhanaNgĩbrataNgirinilandiGambiaGineGwadelupeGi" + + "ne ya IquitaNgirikiGwatemalaGwamGinebisauGuyanaHondurasiKoroashiaHai" + + "tiHangarĩIndonesiaAelandiIsiraeliIndiaNthĩ cia Ngeretha gatagatĩ ka " + + "ĩria ria HindiIrakiIraniAisilandiItalĩJamaikaJorondaniJapaniKenyaKi" + + "rigizistaniKambodiaKiribatiKomoroSantakitzi na NevisKorea NothiKorea" + + " SaũthiKuwĩ tiAĩrandi cia KaymanKazakistaniLaosiLebanoniSantalusiaLi" + + "shenteniSirilankaLiberiaLesothoLithuaniaLuxemboguLativiaLĩbiaMorokoM" + + "onakoMoldovaMadagasikaAĩrandi cia MarshalMacedoniaMaliMyanimaMongoli" + + "aAĩrandi cia Mariana ya nothiMartinikiMauritaniaMontserratiMaltaMaur" + + "ĩtiasiModivuMalawiMexikoMalĩsiaMozambikiNamibiaKalendoia ĨnjeruNija" + + "Aĩrandi cia NorfokNijeriaNikaragwaHolandiNorwiNepaliNauruNiueNiuzila" + + "ndiOmaniPanamaPeruPolinesia ya FransiPapuaFilipinoPakistaniPolandiSa" + + "ntapieri na MikeloniPitkairniPwetorikoRũtere rwa Westi banki na Gaza" + + " cia PalestinaPotogoPalauParagwaiKataRiyunioniRomaniaRashiaRwandaSau" + + "diAirandi Cia SolomonShelisheliSudaniSwideniSingapooSantahelenaSlove" + + "niaSlovakiaSiera LeoniSamarinoSenegoSomaliaSurinamuSao Tome na Princ" + + "ipeElsavadoSiriaSwazilandiAĩrandi cia Takĩ na KaikoChadiTogoThaĩland" + + "iTajikistaniTokelauTimori ya IstiTukumenistaniTunisiaTongaTakĩTrinid" + + "ad na TobagoTuvaluTaiwaniTanzaniaUkirĩniUgandaAmerikaUrugwĩUzibekist" + + "aniVatikaniSantavisenti na GrenadiniVenezuelaAĩrandi cia Virgin cia " + + "NgerethaAĩrandi cia Virgin cia AmerikaVietinamuVanuatuWalis na Futun" + + "aSamoaYemeniMayotteAfrika ya SouthiZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0017, 0x0023, 0x0035, 0x003d, 0x0045, + 0x004c, 0x0052, 0x0052, 0x005a, 0x006a, 0x0072, 0x007c, 0x0081, + 0x0081, 0x008b, 0x009f, 0x00a7, 0x00b3, 0x00bd, 0x00c7, 0x00cf, + 0x00d7, 0x00de, 0x00e4, 0x00e4, 0x00ea, 0x00f0, 0x00f7, 0x00f7, + 0x00fe, 0x0106, 0x010c, 0x010c, 0x0114, 0x011c, 0x0122, 0x0128, + 0x0128, 0x0146, 0x0160, 0x0165, 0x016f, 0x0176, 0x0187, 0x018c, + 0x0194, 0x0199, 0x01a1, 0x01a1, 0x01aa, 0x01af, 0x01b7, 0x01b7, + 0x01b7, 0x01c0, 0x01ce, 0x01d6, 0x01d6, 0x01dc, 0x01e4, 0x01ec, + // Entry 40 - 7F + 0x01fd, 0x0204, 0x0204, 0x020a, 0x0211, 0x0217, 0x0217, 0x021e, + 0x0224, 0x022c, 0x022c, 0x022c, 0x0235, 0x0239, 0x024f, 0x0259, + 0x0259, 0x025f, 0x0265, 0x026d, 0x0274, 0x0279, 0x028a, 0x028a, + 0x028f, 0x0298, 0x02a4, 0x02aa, 0x02ae, 0x02b7, 0x02c5, 0x02cc, + 0x02cc, 0x02d5, 0x02d9, 0x02e2, 0x02e8, 0x02e8, 0x02e8, 0x02f1, + 0x02fa, 0x02ff, 0x0307, 0x0307, 0x0310, 0x0317, 0x031f, 0x031f, + 0x0324, 0x0353, 0x0358, 0x035d, 0x0366, 0x036c, 0x036c, 0x0373, + 0x037c, 0x0382, 0x0387, 0x0394, 0x039c, 0x03a4, 0x03aa, 0x03bd, + // Entry 80 - BF + 0x03c8, 0x03d5, 0x03dd, 0x03f0, 0x03fb, 0x0400, 0x0408, 0x0412, + 0x041c, 0x0425, 0x042c, 0x0433, 0x043c, 0x0445, 0x044c, 0x0452, + 0x0458, 0x045e, 0x0465, 0x0465, 0x0465, 0x046f, 0x0483, 0x048c, + 0x0490, 0x0497, 0x049f, 0x049f, 0x04bc, 0x04c5, 0x04cf, 0x04da, + 0x04df, 0x04ea, 0x04f0, 0x04f6, 0x04fc, 0x0504, 0x050d, 0x0514, + 0x0525, 0x0529, 0x053c, 0x0543, 0x054c, 0x0553, 0x0558, 0x055e, + 0x0563, 0x0567, 0x0571, 0x0576, 0x057c, 0x0580, 0x0593, 0x0598, + 0x05a0, 0x05a9, 0x05b0, 0x05c6, 0x05cf, 0x05d8, 0x0605, 0x060b, + // Entry C0 - FF + 0x0610, 0x0618, 0x061c, 0x061c, 0x0625, 0x062c, 0x062c, 0x0632, + 0x0638, 0x063d, 0x0650, 0x065a, 0x0660, 0x0667, 0x066f, 0x067a, + 0x0682, 0x0682, 0x068a, 0x0695, 0x069d, 0x06a3, 0x06aa, 0x06b2, + 0x06b2, 0x06c6, 0x06ce, 0x06ce, 0x06d3, 0x06dd, 0x06dd, 0x06f8, + 0x06fd, 0x06fd, 0x0701, 0x070b, 0x0716, 0x071d, 0x072b, 0x0738, + 0x073f, 0x0744, 0x0749, 0x075b, 0x0761, 0x0768, 0x0770, 0x0778, + 0x077e, 0x077e, 0x077e, 0x0785, 0x078c, 0x0798, 0x07a0, 0x07b9, + 0x07c2, 0x07e2, 0x0801, 0x080a, 0x0811, 0x0820, 0x0825, 0x0825, + // Entry 100 - 13F + 0x082b, 0x0832, 0x0842, 0x0848, 0x0850, + }, + }, + { // mfe + "AndorEmira arab iniAfganistanAntigua-ek-BarbudaAnguillaAlbaniArmeniAngol" + + "aLarzantinnSamoa amerikinLostrisLostraliArubaAzerbaïdjanBosni-Herzeg" + + "ovinnBarbadBangladesBelzikBurkina FasoBilgariBahreïnBurundiBeninBerm" + + "idBruneiBoliviBrezilBahamasBoutanBotswanaBelarisBelizKanadaRepiblik " + + "demokratik KongoRepiblik Lafrik SantralKongoLaswisCôte d’IvoireZil C" + + "ookShiliKamerounnLasinnKolonbiCosta RicaCubaKap-VerCyprusRepiblik Ch" + + "ekAlmagnDjiboutiDannmarkDominikRepiblik dominikinAlzeriEkwaterEstoni" + + "LeziptErythreLespagnLetiopiFinlandFidjiZil malwinnMikroneziLafransGa" + + "bonUnited KingdomGrenadZeorziGwiyann franseGhanaZibraltarGreenlandGa" + + "mbiGineGuadloupGine ekwatoryalGresGuatemalaGuamGine-BisauGuyanaHondu" + + "rasKroasiAytiOngriIndoneziIrlandIzraelLennTeritwar Britanik Losean I" + + "ndienIrakIranIslandItaliZamaikZordaniZaponKenyaKirghizistanKambodjKi" + + "ribatiKomorSaint-Christophe-ek-NiévèsLakore-dinorLakore-disidKoweitZ" + + "il KaymanKazakstanLaosLibanSainte-LucieLiechtensteinSri LankaLiberia" + + "LezotoLituaniLuxembourgLetoniLibiMarokMonakoMoldaviMadagaskarZil Mar" + + "shallMasedwannMaliMyanmarMongoliZil Maryann dinorMartinikMoritaniMon" + + "tseraMaltMorisMaldivMalawiMexikMaleziMozambikNamibiNouvel-KaledoniNi" + + "zerLil NorfolkNizeriaNicaraguaOlandNorvezNepalNauruNioweNouvel Zelan" + + "dOmanPanamaPerouPolinezi fransePapouazi-Nouvel-GineFilipinnPakistanP" + + "olognSaint-Pierre-ek-MiquelonPitcairnPorto RicoTeritwar PalestinnPor" + + "tigalPalauParaguayKatarLarenionRoumaniLarisiRwandaLarabi SaouditZil " + + "SalomonSeselSoudanLaswedSingapourSainte-HélèneSloveniSlovakiSierra L" + + "eoneSaint-MarinSenegalSomaliSurinamSão Tome-ek-PrínsipSalvadorLasiri" + + "SwazilandZil Tirk ek CaïcosTchadTogoThaylandTadjikistanTokelauTimor " + + "oriantalTurkmenistanTiniziTongaTirkiTrinite-ek-TobagoTuvaluTaiwanTan" + + "zaniIkrennOugandaLamerikUruguayOuzbekistanLata VatikanSaint-Vincent-" + + "ek-GrenadinesVenezuelaZil vierz britanikZil Vierz LamerikVietnamVanu" + + "atuWallis-ek-FutunaSamoaYemennMayotSid-AfrikZambiZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0005, 0x0013, 0x001d, 0x002f, 0x0037, 0x003d, + 0x0043, 0x0049, 0x0049, 0x0053, 0x0061, 0x0068, 0x0070, 0x0075, + 0x0075, 0x0081, 0x0092, 0x0098, 0x00a1, 0x00a7, 0x00b3, 0x00ba, + 0x00c2, 0x00c9, 0x00ce, 0x00ce, 0x00d4, 0x00da, 0x00e0, 0x00e0, + 0x00e6, 0x00ed, 0x00f3, 0x00f3, 0x00fb, 0x0102, 0x0107, 0x010d, + 0x010d, 0x0126, 0x013d, 0x0142, 0x0148, 0x0158, 0x0160, 0x0165, + 0x016e, 0x0174, 0x017b, 0x017b, 0x0185, 0x0189, 0x0190, 0x0190, + 0x0190, 0x0196, 0x01a3, 0x01a9, 0x01a9, 0x01b1, 0x01b9, 0x01c0, + // Entry 40 - 7F + 0x01d2, 0x01d8, 0x01d8, 0x01df, 0x01e5, 0x01eb, 0x01eb, 0x01f2, + 0x01f9, 0x0200, 0x0200, 0x0200, 0x0207, 0x020c, 0x0217, 0x0220, + 0x0220, 0x0227, 0x022c, 0x023a, 0x0240, 0x0246, 0x0254, 0x0254, + 0x0259, 0x0262, 0x026b, 0x0270, 0x0274, 0x027c, 0x028b, 0x028f, + 0x028f, 0x0298, 0x029c, 0x02a6, 0x02ac, 0x02ac, 0x02ac, 0x02b4, + 0x02ba, 0x02be, 0x02c3, 0x02c3, 0x02cb, 0x02d1, 0x02d7, 0x02d7, + 0x02db, 0x02fa, 0x02fe, 0x0302, 0x0308, 0x030d, 0x030d, 0x0313, + 0x031a, 0x031f, 0x0324, 0x0330, 0x0337, 0x033f, 0x0344, 0x0360, + // Entry 80 - BF + 0x036c, 0x0378, 0x037e, 0x0388, 0x0391, 0x0395, 0x039a, 0x03a6, + 0x03b3, 0x03bc, 0x03c3, 0x03c9, 0x03d0, 0x03da, 0x03e0, 0x03e4, + 0x03e9, 0x03ef, 0x03f6, 0x03f6, 0x03f6, 0x0400, 0x040c, 0x0415, + 0x0419, 0x0420, 0x0427, 0x0427, 0x0438, 0x0440, 0x0448, 0x0450, + 0x0454, 0x0459, 0x045f, 0x0465, 0x046a, 0x0470, 0x0478, 0x047e, + 0x048d, 0x0492, 0x049d, 0x04a4, 0x04ad, 0x04b2, 0x04b8, 0x04bd, + 0x04c2, 0x04c7, 0x04d4, 0x04d8, 0x04de, 0x04e3, 0x04f2, 0x0506, + 0x050e, 0x0516, 0x051c, 0x0534, 0x053c, 0x0546, 0x0558, 0x0560, + // Entry C0 - FF + 0x0565, 0x056d, 0x0572, 0x0572, 0x057a, 0x0581, 0x0581, 0x0587, + 0x058d, 0x059b, 0x05a6, 0x05ab, 0x05b1, 0x05b7, 0x05c0, 0x05cf, + 0x05d6, 0x05d6, 0x05dd, 0x05e9, 0x05f4, 0x05fb, 0x0601, 0x0608, + 0x0608, 0x061d, 0x0625, 0x0625, 0x062b, 0x0634, 0x0634, 0x0647, + 0x064c, 0x064c, 0x0650, 0x0658, 0x0663, 0x066a, 0x0678, 0x0684, + 0x068a, 0x068f, 0x0694, 0x06a5, 0x06ab, 0x06b1, 0x06b8, 0x06be, + 0x06c5, 0x06c5, 0x06c5, 0x06cc, 0x06d3, 0x06de, 0x06ea, 0x0705, + 0x070e, 0x0720, 0x0731, 0x0738, 0x073f, 0x074f, 0x0754, 0x0754, + // Entry 100 - 13F + 0x075a, 0x075f, 0x0768, 0x076d, 0x0775, + }, + }, + { // mg + "AndorraEmirà Arabo mitambatraAfghanistanAntiga sy BarbodaAnguillaAlbania" + + "ArmeniaAngolaArzantinaSamoa amerikaninaAotrisyAostraliaArobàAzerbaid" + + "janBosnia sy HerzegovinaBarbadyBangladesyBelzikaBorkina FasoBiolgari" + + "aBahrainBorondiBeninBermiodaBruneiBoliviaBrezilaBahamasBhotanaBotsoa" + + "naBelarosyBelizeKanadaRepoblikan’i KongoRepoblika Ivon’AfrikaKôngôSo" + + "isaCôte d’IvoireNosy KookShiliKameronaSinaKôlômbiaKosta RikàKiobàNos" + + "y Cap-VertSypraRepoblikan’i TsekyAlemainaDjibotiDanmarkaDominikaRepo" + + "blika DominikaninaAlzeriaEkoateraEstoniaEjyptaEritreaEspainaEthiopia" + + "FinlandyFidjiNosy FalkandMikrôneziaFrantsaGabonAngleteraGrenadyZeorz" + + "iaGuyana frantsayGhanaZibraltaraGroenlandGambiaGineaGoadelopyGuinea " + + "EkoateraGresyGoatemalàGuamGiné-BisaoGuyanaHondiorasyKroasiaHaitiHong" + + "riaIndoneziaIrlandyIsraelyIndyFaridranomasina indiana britanikaIrakI" + + "ranIslandyItaliaJamaïkaJordaniaJapanaKenyaKiordistanKambôdjaKiribati" + + "KômaoroSaint-Christophe-et-NiévèsKorea AvaratraKorea AtsimoKôeityNos" + + "y KaymanKazakhstanLaôsLibanaSainte-LucieListensteinSri LankaLiberiaL" + + "esothoLitoaniaLioksamboroLetoniaLibyaMarôkaMônakôMôldaviaMadagasikar" + + "aNosy MarshallMakedoniaMaliMyanmarMôngôliaNosy Mariana AtsinananaMar" + + "tinikaMaoritaniaMontserratMaltaMaorisyMaldivaMalaoìMeksikaMalaiziaMo" + + "zambikaNamibiaNouvelle-CalédonieNigerNosy NorfolkNizeriaNikaragoàHol" + + "andaNôrvezyNepalaNaoròNioéNouvelle-ZélandeOmanPanamaPeroaPolynezia f" + + "rantsayPapouasie-Nouvelle-GuinéeFilipinaPakistanPôlônaSaint-Pierre-e" + + "t-MiquelonPitkairnPôrtô RikôPalestinaPôrtiogalaPalaoParagoayKatarLar" + + "enionRomaniaRosiaRoandaArabia saoditaNosy SalomonaSeyshelaSodanSoedy" + + "SingaporoSainte-HélèneSloveniaSlovakiaSierra LeoneSaint-MarinSenegal" + + "SomaliaSorinamSão Tomé-et-PríncipeEl SalvadorSyriaSoazilandyNosy Tur" + + "ks sy CaïquesTsadyTogoThailandyTajikistanTokelaoTimor AtsinananaTork" + + "menistanToniziaTongàTorkiaTrinidad sy TobagôTovalòTaioanaTanzaniaOkr" + + "ainaOgandaEtazoniaOrogoayOzbekistanFirenen’i VatikanaSaint-Vincent-e" + + "t-les GrenadinesVenezoelàNosy britanika virijinyNosy Virijiny Etazon" + + "iaVietnamVanoatòWallis sy FutunaSamoaYemenMayôtyAfrika AtsimoZambiaZ" + + "imbaboe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x001e, 0x0029, 0x003a, 0x0042, 0x0049, + 0x0050, 0x0056, 0x0056, 0x005f, 0x0070, 0x0077, 0x0080, 0x0086, + 0x0086, 0x0091, 0x00a6, 0x00ad, 0x00b7, 0x00be, 0x00ca, 0x00d3, + 0x00da, 0x00e1, 0x00e6, 0x00e6, 0x00ee, 0x00f4, 0x00fb, 0x00fb, + 0x0102, 0x0109, 0x0110, 0x0110, 0x0118, 0x0120, 0x0126, 0x012c, + 0x012c, 0x0140, 0x0157, 0x015e, 0x0163, 0x0173, 0x017c, 0x0181, + 0x0189, 0x018d, 0x0197, 0x0197, 0x01a2, 0x01a8, 0x01b5, 0x01b5, + 0x01b5, 0x01ba, 0x01ce, 0x01d6, 0x01d6, 0x01dd, 0x01e5, 0x01ed, + // Entry 40 - 7F + 0x0203, 0x020a, 0x020a, 0x0212, 0x0219, 0x021f, 0x021f, 0x0226, + 0x022d, 0x0235, 0x0235, 0x0235, 0x023d, 0x0242, 0x024e, 0x0259, + 0x0259, 0x0260, 0x0265, 0x026e, 0x0275, 0x027c, 0x028b, 0x028b, + 0x0290, 0x029a, 0x02a3, 0x02a9, 0x02ae, 0x02b7, 0x02c6, 0x02cb, + 0x02cb, 0x02d5, 0x02d9, 0x02e4, 0x02ea, 0x02ea, 0x02ea, 0x02f4, + 0x02fb, 0x0300, 0x0307, 0x0307, 0x0310, 0x0317, 0x031e, 0x031e, + 0x0322, 0x0343, 0x0347, 0x034b, 0x0352, 0x0358, 0x0358, 0x0360, + 0x0368, 0x036e, 0x0373, 0x037d, 0x0386, 0x038e, 0x0396, 0x03b2, + // Entry 80 - BF + 0x03c0, 0x03cc, 0x03d3, 0x03de, 0x03e8, 0x03ed, 0x03f3, 0x03ff, + 0x040a, 0x0413, 0x041a, 0x0421, 0x0429, 0x0434, 0x043b, 0x0440, + 0x0447, 0x044f, 0x0458, 0x0458, 0x0458, 0x0464, 0x0471, 0x047a, + 0x047e, 0x0485, 0x048f, 0x048f, 0x04a6, 0x04af, 0x04b9, 0x04c3, + 0x04c8, 0x04cf, 0x04d6, 0x04dd, 0x04e4, 0x04ec, 0x04f5, 0x04fc, + 0x050f, 0x0514, 0x0520, 0x0527, 0x0531, 0x0538, 0x0540, 0x0546, + 0x054c, 0x0551, 0x0562, 0x0566, 0x056c, 0x0571, 0x0583, 0x059d, + 0x05a5, 0x05ad, 0x05b5, 0x05cd, 0x05d5, 0x05e2, 0x05eb, 0x05f6, + // Entry C0 - FF + 0x05fb, 0x0603, 0x0608, 0x0608, 0x0610, 0x0617, 0x0617, 0x061c, + 0x0622, 0x0630, 0x063d, 0x0645, 0x064a, 0x064f, 0x0658, 0x0667, + 0x066f, 0x066f, 0x0677, 0x0683, 0x068e, 0x0695, 0x069c, 0x06a3, + 0x06a3, 0x06ba, 0x06c5, 0x06c5, 0x06ca, 0x06d4, 0x06d4, 0x06ea, + 0x06ef, 0x06ef, 0x06f3, 0x06fc, 0x0706, 0x070d, 0x071d, 0x0729, + 0x0730, 0x0736, 0x073c, 0x074f, 0x0756, 0x075d, 0x0765, 0x076c, + 0x0772, 0x0772, 0x0772, 0x077a, 0x0781, 0x078b, 0x079f, 0x07be, + 0x07c8, 0x07df, 0x07f5, 0x07fc, 0x0804, 0x0814, 0x0819, 0x0819, + // Entry 100 - 13F + 0x081e, 0x0825, 0x0832, 0x0838, 0x0840, + }, + }, + { // mgh + "UandoraUfugustaniUalbaniaUsamoa ya MarekaniUazabajaniUrundiUbelinUkanada" + + "UkongoUswisiUkodivaUchileUchinaUkolombiaUkubaUkuprosiUchekiUjibutiUd" + + "enimakaUdominikaAlujeriaUmisiriUritereaUhispaniaUhabeshiUfiniUfijiUf" + + "aransaUgaboniUgrenadaUjojiaUfaransa yo GwayaUganaUjibraltaUgrinlandi" + + "UgambiaUgineUgwadelupeUgwatemalaUgwamUginebisauUguyanaUhondurasiUkor" + + "asiaUhaitiUhungariaUndonesiaUayalandiUisraeliUhindiniWirakiItaliaUja" + + "maikaUyordaniUjapaniUkenyaUkambodiaUkomoroUsantakitzi na NevisUkorea" + + " KaskaziniUkorea KusiniUkazakistaniUlebanoniUsantalusiaUshenteniUsir" + + "ilankaUliberiaUlesotoUtwaniaUsembajiUlativiaUlibyaUmantegroUbukiniUm" + + "asedoniaUmalawiUmozambikiUnijeriUnijeriaUnorweUomaniUpanamaUperuuUfa" + + "ransa yo PotinaUpapuaUfilipinoUpakistaniUpolandiUsantapieri na Mikel" + + "oniUpitkairniUpwetorikoParagwaiUkatariUriyunioniUromaniaUrwandaUsaud" + + "iUshelisheliUsudaniUswidiUsingapooUsantahelenaUsloveniaUslovakiaUsam" + + "arinoUsenegaliUsomaliaUsurinamuUsao Tome na PrincipeUsalavadoUsiriaU" + + "swaziUchadiUtogoUtailandiUjikistaniUtokelauUtimo MasharikiUturukimen" + + "istaniUtunisiaUtongaUtukiUtrinidad na TobagoUtuvaluUtanzaniaUmarekan" + + "iUvatikaniUsantavisenti na GrenadiniUvenezuelaUvietinamuUvanuatuUwal" + + "is na FutunaUsamoaUyemeniAfrika du SuluUzambiaUzimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0007, 0x0011, 0x0011, 0x0011, 0x0019, + 0x0019, 0x0019, 0x0019, 0x0019, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x003b, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, + 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0048, + 0x0048, 0x0048, 0x0048, 0x004e, 0x0054, 0x005b, 0x005b, 0x0061, + 0x0061, 0x0067, 0x0070, 0x0070, 0x0070, 0x0075, 0x0075, 0x0075, + 0x0075, 0x007d, 0x0083, 0x0083, 0x0083, 0x008a, 0x0093, 0x009c, + // Entry 40 - 7F + 0x009c, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00ab, 0x00ab, 0x00b3, + 0x00bc, 0x00c4, 0x00c4, 0x00c4, 0x00c9, 0x00ce, 0x00ce, 0x00ce, + 0x00ce, 0x00d6, 0x00dd, 0x00dd, 0x00e5, 0x00eb, 0x00fc, 0x00fc, + 0x0101, 0x010a, 0x0114, 0x011b, 0x0120, 0x012a, 0x012a, 0x012a, + 0x012a, 0x0134, 0x0139, 0x0143, 0x014a, 0x014a, 0x014a, 0x0154, + 0x015c, 0x0162, 0x016b, 0x016b, 0x0174, 0x017d, 0x0185, 0x0185, + 0x018d, 0x018d, 0x0193, 0x0193, 0x0193, 0x0199, 0x0199, 0x01a1, + 0x01a9, 0x01b0, 0x01b6, 0x01b6, 0x01bf, 0x01bf, 0x01c6, 0x01da, + // Entry 80 - BF + 0x01ea, 0x01f7, 0x01f7, 0x01f7, 0x0203, 0x0203, 0x020c, 0x0217, + 0x0220, 0x022a, 0x0232, 0x0239, 0x0240, 0x0248, 0x0250, 0x0256, + 0x0256, 0x0256, 0x0256, 0x025f, 0x025f, 0x0266, 0x0266, 0x0270, + 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, + 0x0270, 0x0270, 0x0270, 0x0277, 0x0277, 0x0277, 0x0281, 0x0281, + 0x0281, 0x0288, 0x0288, 0x0290, 0x0290, 0x0290, 0x0296, 0x0296, + 0x0296, 0x0296, 0x0296, 0x029c, 0x02a3, 0x02a9, 0x02bb, 0x02c1, + 0x02ca, 0x02d4, 0x02dc, 0x02f3, 0x02fd, 0x0307, 0x0307, 0x0307, + // Entry C0 - FF + 0x0307, 0x030f, 0x0316, 0x0316, 0x0320, 0x0328, 0x0328, 0x0328, + 0x032f, 0x0335, 0x0335, 0x0340, 0x0347, 0x034d, 0x0356, 0x0362, + 0x036b, 0x036b, 0x0374, 0x0374, 0x037d, 0x0386, 0x038e, 0x0397, + 0x0397, 0x03ac, 0x03b5, 0x03b5, 0x03bb, 0x03c1, 0x03c1, 0x03c1, + 0x03c7, 0x03c7, 0x03cc, 0x03d5, 0x03df, 0x03e7, 0x03f6, 0x0406, + 0x040e, 0x0414, 0x0419, 0x042c, 0x0433, 0x0433, 0x043c, 0x043c, + 0x043c, 0x043c, 0x043c, 0x0445, 0x0445, 0x0445, 0x044e, 0x0468, + 0x0472, 0x0472, 0x0472, 0x047c, 0x0484, 0x0494, 0x049a, 0x049a, + // Entry 100 - 13F + 0x04a1, 0x04a1, 0x04af, 0x04b6, 0x04bf, + }, + }, + { // mgo + "Kamalunaba aben tisɔ̀", + []uint16{ // 262 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 80 - BF + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry C0 - FF + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 100 - 13F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0017, + }, + }, + { // mk + mkRegionStr, + mkRegionIdx, + }, + { // ml + mlRegionStr, + mlRegionIdx, + }, + { // mn + mnRegionStr, + mnRegionIdx, + }, + { // mr + mrRegionStr, + mrRegionIdx, + }, + { // ms + msRegionStr, + msRegionIdx, + }, + { // mt + "Ascension IslandAndorral-Emirati Għarab Magħqudal-AfganistanAntigua u Ba" + + "rbudaAnguillal-Albanijal-Armenjal-Angolal-Antartikal-Arġentinais-Sam" + + "oa Amerikanal-Awstrijal-AwstraljaArubail-Gżejjer Alandl-Ażerbajġanil" + + "-Bożnija-ĦerzegovinaBarbadosil-Bangladeshil-Belġjuil-Burkina Fasoil-" + + "Bulgarijail-Bahrainil-Burundiil-BeninSaint BarthélemyBermudail-Brune" + + "iil-Bolivjain-Netherlands tal-KaribewIl-Brażilil-Bahamasil-BhutanGżi" + + "ra Bouvetil-Botswanail-Belarussjail-Belizeil-KanadaGżejjer Cocos (Ke" + + "eling)ir-Repubblika Demokratika tal-Kongoir-Repubblika Ċentru-Afrika" + + "nail-Kongo - BrazzavilleŻvizzerail-Kosta tal-AvorjuGżejjer Cookiċ-Ċi" + + "liil-KamerunCNil-Kolombjail-Gżira Clippertonil-Costa RicaKubaCape Ve" + + "rdeCuraçaoil-Gżira ChristmasĊipruir-Repubblika Ċekail-ĠermanjaDiego " + + "Garciail-Djiboutiid-DanimarkaDominicair-Repubblika Dominicanal-Alġer" + + "ijaCeuta u Melillal-Ekwadorl-Estonjal-Eġittuis-Saħara tal-Punentl-Er" + + "itreaSpanjal-EtjopjaUnjoni Ewropeail-FinlandjaFiġiil-Gżejjer Falklan" + + "dMikroneżjail-Gżejjer FaeroeFranzail-Gabonir-Renju UnitGrenadail-Geo" + + "rgiail-Guyana FranċiżaGuernseyil-GhanaĠibiltàGreenlandil-Gambjail-Gu" + + "ineaGuadeloupeil-Guinea Ekwatorjaliil-Greċjail-Georgia tan-Nofsinhar" + + " u l-Gżejjer Sandwich tan-Nofsinharil-GwatemalaGuamil-Guinea-Bissaui" + + "l-Guyanair-Reġjun Amministrattiv Speċjali ta’ Hong Kong tar-Repubbli" + + "ka tal-Poplu taċ-Ċinail-Gżejjer Heard u l-Gżejjer McDonaldil-Hondura" + + "sil-Kroazjail-Haitil-Ungerijail-Gżejjer Canaryl-Indoneżjal-IrlandaIż" + + "raelIsle of Manl-IndjaTerritorju Brittaniku tal-Oċean Indjanl-Iraql-" + + "Iranl-iżlandal-ItaljaJerseyil-Ġamajkail-Ġordanil-Ġappunil-Kenjail-Ki" + + "rgiżistanil-KambodjaKiribatiComorosSaint Kitts u Nevisil-Korea ta’ F" + + "uqil-Korea t’Isfelil-Kuwajtil-Gżejjer Caymanil-Każakistanil-Laosil-L" + + "ibanuSaint Luciail-Liechtensteinis-Sri Lankail-Liberjail-Lesotoil-Li" + + "twanjail-Lussemburguil-Latvjail-Libjail-MarokkMonacoil-Moldovail-Mon" + + "tenegroSaint MartinMadagascarGżejjer Marshalll-Eks-Repubblika Jugosl" + + "ava tal-Maċedoniail-Maliil-Myanmar/Burmail-Mongoljair-Reġjun Amminis" + + "trattiv Speċjali tal-Macao tar-Repubblika tal-Poplu taċ-ĊinaĠżejjer " + + "Mariana tat-TramuntanaMartiniqueil-MauritaniaMontserratMaltaMauritiu" + + "sil-Maldiviil-Malawiil-Messikuil-Malasjail-Mozambiquein-NamibjaNew C" + + "aledoniain-NiġerGżira Norfolkin-Niġerjain-Nikaragwain-Netherlandsin-" + + "Norveġjain-NepalNauruNiueNew Zealandl-Omanil-Panamail-PerùPolineżja " + + "FranċiżaPapua New Guineail-Filippiniil-Pakistanil-PolonjaSaint Pierr" + + "e u MiquelonGżejjer PitcairnPuerto Ricoit-Territorji Palestinjaniil-" + + "PortugallPalauil-Paragwajil-QatarRéunionir-Rumanijais-Serbjair-Russj" + + "air-Rwandal-Arabia Sawdijail-Gżejjer Solomonis-Seychellesis-Sudanl-I" + + "żvezjaSingaporeSaint Helenais-SlovenjaSvalbard u Jan Mayenis-Slovak" + + "kjaSierra LeoneSan Marinois-Senegalis-Somaljais-Surinameis-Sudan t’I" + + "sfelSão Tomé u PríncipeEl SalvadorSint Maartenis-Sirjais-SwazilandTr" + + "istan da Cunhail-Gżejjer Turks u Caicosiċ-ChadIt-Territorji Franċiżi" + + " tan-Nofsinharit-Togoit-Tajlandjait-Taġikistanit-TokelauTimor Lestei" + + "t-Turkmenistanit-TuneżijaTongait-TurkijaTrinidad u TobagoTuvaluit-Ta" + + "jwanit-Tanzanijal-Ukrajnal-UgandaIl-Gżejjer Minuri Mbiegħda tal-Ista" + + "ti Unitil-Istati Unitil-Urugwajl-Użbekistanl-Istat tal-Belt tal-Vati" + + "kanSaint Vincent u l-Grenadiniil-Venezwelail-Gżejjer Verġni Brittani" + + "ċiil-Gżejjer Verġni tal-Istati Unitiil-VjetnamVanuatuWallis u Futun" + + "aSamoaKosovoil-JemenMayottel-Afrika t’Isfeliż-Żambjaiż-ŻimbabweReġju" + + "n Mhux MagħrufDinjaAffrikaAmerika t’IsfelOċejanjaAffrika tal-PunentA" + + "merika ĊentraliAffrika tal-LvantAffrika ta’ FuqAffrika NofsaniAffrik" + + "a t’IsfelAmerikaKaribewAsja tal-LvantAsja t’Isfel ĊentraliAsja tax-X" + + "lokkEwropa t’IsfelAwstralja u New ZealandMelanesjaReġjun ta’ Mikrone" + + "żjaPolinesjaAsjaAsja ĊentraliAsja tal-PunentEwropaEwropa tal-LvantE" + + "wropa ta’ FuqEwropa tal-PunentAmerika Latina", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x0032, 0x003e, 0x004f, 0x0057, 0x0061, + 0x006a, 0x0072, 0x007d, 0x0089, 0x009b, 0x00a5, 0x00b0, 0x00b5, + 0x00c6, 0x00d4, 0x00ec, 0x00f4, 0x0101, 0x010b, 0x011a, 0x0126, + 0x0130, 0x013a, 0x0142, 0x0153, 0x015a, 0x0163, 0x016d, 0x0187, + 0x0191, 0x019b, 0x01a4, 0x01b1, 0x01bc, 0x01c9, 0x01d2, 0x01db, + 0x01f3, 0x0216, 0x0234, 0x024a, 0x0253, 0x0266, 0x0273, 0x027c, + 0x0286, 0x0288, 0x0293, 0x02a7, 0x02b4, 0x02b8, 0x02c2, 0x02ca, + 0x02dd, 0x02e3, 0x02f6, 0x0302, 0x030e, 0x0319, 0x0325, 0x032d, + // Entry 40 - 7F + 0x0345, 0x0350, 0x035f, 0x0368, 0x0371, 0x037a, 0x038f, 0x0398, + 0x039e, 0x03a7, 0x03b5, 0x03b5, 0x03c1, 0x03c6, 0x03da, 0x03e5, + 0x03f7, 0x03fd, 0x0405, 0x0412, 0x0419, 0x0423, 0x0437, 0x043f, + 0x0447, 0x0450, 0x0459, 0x0462, 0x046b, 0x0475, 0x048a, 0x0494, + 0x04d0, 0x04dc, 0x04e0, 0x04f0, 0x04f9, 0x0550, 0x0577, 0x0582, + 0x058c, 0x0594, 0x059e, 0x05b0, 0x05bc, 0x05c5, 0x05cc, 0x05d7, + 0x05de, 0x0605, 0x060b, 0x0611, 0x061b, 0x0623, 0x0629, 0x0634, + 0x063e, 0x0648, 0x0650, 0x065f, 0x066a, 0x0672, 0x0679, 0x068c, + // Entry 80 - BF + 0x069e, 0x06b0, 0x06b9, 0x06cb, 0x06d9, 0x06e0, 0x06e9, 0x06f4, + 0x0704, 0x0710, 0x071a, 0x0723, 0x072e, 0x073c, 0x0745, 0x074d, + 0x0756, 0x075c, 0x0766, 0x0773, 0x077f, 0x0789, 0x079a, 0x07c3, + 0x07ca, 0x07da, 0x07e5, 0x0836, 0x0856, 0x0860, 0x086d, 0x0877, + 0x087c, 0x0885, 0x088f, 0x0898, 0x08a2, 0x08ac, 0x08b9, 0x08c3, + 0x08d0, 0x08d9, 0x08e7, 0x08f2, 0x08fe, 0x090c, 0x0918, 0x0920, + 0x0925, 0x0929, 0x0934, 0x093a, 0x0943, 0x094b, 0x0960, 0x0970, + 0x097c, 0x0987, 0x0991, 0x09a8, 0x09b9, 0x09c4, 0x09de, 0x09ea, + // Entry C0 - FF + 0x09ef, 0x09fa, 0x0a02, 0x0a02, 0x0a0a, 0x0a15, 0x0a1e, 0x0a27, + 0x0a30, 0x0a40, 0x0a53, 0x0a60, 0x0a68, 0x0a72, 0x0a7b, 0x0a87, + 0x0a92, 0x0aa6, 0x0ab2, 0x0abe, 0x0ac8, 0x0ad2, 0x0adc, 0x0ae7, + 0x0af9, 0x0b0f, 0x0b1a, 0x0b26, 0x0b2e, 0x0b3a, 0x0b4a, 0x0b64, + 0x0b6c, 0x0b92, 0x0b99, 0x0ba5, 0x0bb3, 0x0bbd, 0x0bc8, 0x0bd7, + 0x0be3, 0x0be8, 0x0bf2, 0x0c03, 0x0c09, 0x0c12, 0x0c1e, 0x0c27, + 0x0c2f, 0x0c5c, 0x0c5c, 0x0c6a, 0x0c73, 0x0c80, 0x0c9c, 0x0cb7, + 0x0cc3, 0x0ce2, 0x0d06, 0x0d10, 0x0d17, 0x0d26, 0x0d2b, 0x0d31, + // Entry 100 - 13F + 0x0d39, 0x0d40, 0x0d52, 0x0d5d, 0x0d6a, 0x0d7f, 0x0d84, 0x0d8b, + 0x0d8b, 0x0d9c, 0x0da5, 0x0db7, 0x0dc8, 0x0dd9, 0x0dea, 0x0df9, + 0x0e0a, 0x0e11, 0x0e11, 0x0e18, 0x0e26, 0x0e3e, 0x0e4c, 0x0e5c, + 0x0e73, 0x0e7c, 0x0e95, 0x0e9e, 0x0ea2, 0x0eb0, 0x0ebf, 0x0ec5, + 0x0ed5, 0x0ee5, 0x0ef6, 0x0f04, + }, + }, + { // mua + "andorraSǝr Arabiya ma tainiafghanistaŋantiguan ne Barbudaanguiyaalbaniya" + + "armeniyaangolaargentiniyasamoa Amerikaaustriyaaustraliyaarubaazerbai" + + "jaŋbosniya ne Herzegovinabarbadiyabangladeshiyabelgikaburkina Fasobu" + + "lgariyabahraiŋburundibeniŋbermudiyabruniyaboliviyabrazilyabahamasbut" + + "aŋbotswanabelarussiyabeliziyakanadaSǝr Kongo ma dii ne zaircentrafri" + + "kakongoSǝr Swissser Ivoiriyakook ma laŋnesyilikameruŋsyiŋkolombiyako" + + "sta RikaKubakap ma laŋneSyipriyaSǝr SyekGermaniyaDjiboutiDaŋmarkDomi" + + "nikSǝr Dominik ma liialgeriyaEkwatǝrEstoniyaSǝr EgyptSǝr EritreEspaŋ" + + "iyaEtiopiaSǝr FinlandSǝr FijiSǝr malouniya ma laŋneMicronesiyaFranss" + + "ǝGaboŋSǝr AnglofoŋGrenadǝGeorgiyaSǝr Guyana ma FranssǝGanaSǝr Gibra" + + "ltarSǝr GroenlandGambiyaGuineSǝr GwadeloupǝSǝr GuineSǝr GrekGwatemal" + + "aGwamGuine ma BissaoGuyanaSǝr HonduraskroatiyaSǝr HaitiHungriyaIndon" + + "esiyaSǝr IrelandSǝr IsraelSǝr Indǝanglofoŋ ma IndiyaIrakIraŋSǝr Isla" + + "ndItaliyaJamaikaJordaniyaJapaŋSǝr KenyaKirgizstaŋkambodiyaSǝr Kiriba" + + "tikomoraSǝr Kristof ne NievǝSǝr Kore fah sǝŋSǝr Kore nekǝsǝŋSǝr Kowa" + + "itkayman ma laŋneKazakstaŋSǝr LaosLibaŋSǝr LuciaLichtǝnsteiŋSǝr Lank" + + "aLiberiyaSǝr LesothoLituaniyaSǝr LuxemburgLetoniyaLibiyaMarokMonakoM" + + "oldoviyaMadagaskarSǝr Marshall ma laŋneMacedoniyaSǝr MaliSǝr Myanmar" + + "MongoliyaSǝr Maria ma laŋneMartinikaMauritaniyaSǝr MontserratSǝr Mal" + + "taSǝr MauricǝMaldivǝSǝr MalawiMexikoMalaysiyaMozambikaNamibiyaKaledo" + + "niya mafuuSǝr NigerNorfolk ma laŋneNigeriyaNikaragwaSǝr ma kasǝŋNorv" + + "egǝSǝr NepalSǝr NauruNiweZeland mafuuOmaŋSǝr PanamaPeruSǝr Polynesiy" + + "a ma FranssǝPapuasiya Guine mafuuFilipiŋPakistaŋPologŋSǝr Pǝtar ne M" + + "ikǝlonPitkairnPorto RikoSǝr PalestiniyaSǝr PortugalSǝr PalauParagwai" + + "KatarSǝr ReunionRomaniyaRussiyaRwandaSǝr ArabiyaSǝr Salomon ma laŋne" + + "SaichelSudaŋSǝr SuedSingapurSǝr HelenaSloveniyaSlovakiyaSierra Leonǝ" + + "Sǝr MarinoSenegalSomaliyaSǝr SurinamSao Tome ne PrincipeSǝr Salvador" + + "SyriaSǝr SwazilandTurkiya ne kaicos ma laŋnesyadSǝr TogoTailandTajik" + + "istaŋSǝr TokelauTimoriyaTurkmenistaŋTunisiyaSǝr TongaTurkiyaTrinite " + + "ne TobagoSǝr TuvaluTaiwaŋTanzaniyaUkraiŋUgandaAmerikaUrugwaiUzbekist" + + "aŋVaticaŋSǝr Vinceŋ ne GrenadiŋSǝr Venezuelaser Anglofon ma laŋneSǝr" + + " amerika ma laŋneSǝr VietnamSǝr VanuatuWallis ne FutunaSǝr SamoaYeme" + + "ŋMayotAfrika nekǝsǝŋZambiyaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x001c, 0x0028, 0x003b, 0x0042, 0x004a, + 0x0052, 0x0058, 0x0058, 0x0063, 0x0070, 0x0078, 0x0082, 0x0087, + 0x0087, 0x0092, 0x00a8, 0x00b1, 0x00be, 0x00c5, 0x00d1, 0x00da, + 0x00e2, 0x00e9, 0x00ef, 0x00ef, 0x00f8, 0x00ff, 0x0107, 0x0107, + 0x010f, 0x0116, 0x011c, 0x011c, 0x0124, 0x012f, 0x0137, 0x013d, + 0x013d, 0x0156, 0x0161, 0x0166, 0x0170, 0x017c, 0x018a, 0x018f, + 0x0197, 0x019c, 0x01a5, 0x01a5, 0x01af, 0x01b3, 0x01c0, 0x01c0, + 0x01c0, 0x01c8, 0x01d1, 0x01da, 0x01da, 0x01e2, 0x01ea, 0x01f1, + // Entry 40 - 7F + 0x0204, 0x020c, 0x020c, 0x0214, 0x021c, 0x0226, 0x0226, 0x0231, + 0x023a, 0x0241, 0x0241, 0x0241, 0x024d, 0x0256, 0x026e, 0x0279, + 0x0279, 0x0281, 0x0287, 0x0295, 0x029d, 0x02a5, 0x02bc, 0x02bc, + 0x02c0, 0x02ce, 0x02dc, 0x02e3, 0x02e8, 0x02f8, 0x0302, 0x030b, + 0x030b, 0x0314, 0x0318, 0x0327, 0x032d, 0x032d, 0x032d, 0x033a, + 0x0342, 0x034c, 0x0354, 0x0354, 0x035e, 0x036a, 0x0375, 0x0375, + 0x037f, 0x0392, 0x0396, 0x039b, 0x03a6, 0x03ad, 0x03ad, 0x03b4, + 0x03bd, 0x03c3, 0x03cd, 0x03d8, 0x03e1, 0x03ee, 0x03f4, 0x040a, + // Entry 80 - BF + 0x041d, 0x0431, 0x043c, 0x044c, 0x0456, 0x045f, 0x0465, 0x046f, + 0x047d, 0x0487, 0x048f, 0x049b, 0x04a4, 0x04b2, 0x04ba, 0x04c0, + 0x04c5, 0x04cb, 0x04d4, 0x04d4, 0x04d4, 0x04de, 0x04f5, 0x04ff, + 0x0508, 0x0514, 0x051d, 0x051d, 0x0531, 0x053a, 0x0545, 0x0554, + 0x055e, 0x056b, 0x0573, 0x057e, 0x0584, 0x058d, 0x0596, 0x059e, + 0x05ae, 0x05b8, 0x05c9, 0x05d1, 0x05da, 0x05e9, 0x05f1, 0x05fb, + 0x0605, 0x0609, 0x0615, 0x061a, 0x0625, 0x0629, 0x0644, 0x0659, + 0x0661, 0x066a, 0x0671, 0x0688, 0x0690, 0x069a, 0x06aa, 0x06b7, + // Entry C0 - FF + 0x06c1, 0x06c9, 0x06ce, 0x06ce, 0x06da, 0x06e2, 0x06e2, 0x06e9, + 0x06ef, 0x06fb, 0x0711, 0x0718, 0x071e, 0x0727, 0x072f, 0x073a, + 0x0743, 0x0743, 0x074c, 0x0759, 0x0764, 0x076b, 0x0773, 0x077f, + 0x077f, 0x0793, 0x07a0, 0x07a0, 0x07a5, 0x07b3, 0x07b3, 0x07ce, + 0x07d2, 0x07d2, 0x07db, 0x07e2, 0x07ed, 0x07f9, 0x0801, 0x080e, + 0x0816, 0x0820, 0x0827, 0x0838, 0x0843, 0x084a, 0x0853, 0x085a, + 0x0860, 0x0860, 0x0860, 0x0867, 0x086e, 0x0879, 0x0881, 0x089a, + 0x08a8, 0x08be, 0x08d4, 0x08e0, 0x08ec, 0x08fc, 0x0906, 0x0906, + // Entry 100 - 13F + 0x090c, 0x0911, 0x0922, 0x0929, 0x0931, + }, + }, + { // my + myRegionStr, + myRegionIdx, + }, + { // mzn + "آسنسیون جزیرهآندورامتحده عربی اماراتافغانستونآنتیگوا و باربوداآنگویلاآلب" + + "انیارمنستونآنگولاجنوبی یخ\u200cبزه قطبآرژانتینآمریکای ِساموآاتریشاس" + + "ترالیاآروباآلند جزیرهآذربایجونبوسنی و هرزگوینباربادوسبنگلادشبلژیکبو" + + "رکینا فاسوبلغارستونبحرینبوروندیبنینسنت بارتلمیبرمودابرونئیبولیویهلن" + + "د ِکاراییبی جزایربرزیلباهامابوتانبووت جزیرهبوتساوانابلاروسبلیزکاناد" + + "اکوک (کیلینگ) جزایرکنگو کینشاسامرکزی آفریقای جمهوریکنگو برازاویلسوی" + + "یسعاج ِساحلکوک جزایرشیلیکامرونچینکلمبیاکلیپرتون جزیرهکاستاریکاکوباک" + + "یپ وردکوراسائوکریسمس جزیرهقبرسچک جمهوریآلماندیگو گارسیاجیبوتیدانمار" + + "کدومنیکادومنیکن جمهوریالجزیرهسوتا و ملیلهاکوادراستونیمصرغربی صحراار" + + "یترهایسپانیااتیوپیاروپا اتحادیهفنلاندفیجیفالکلند جزیره\u200cئونمیکر" + + "ونزیفارو جزایرفرانسهگابونبریتانیاگراناداگرجستونفرانسه\u200cی ِگویان" + + "گرنزیغناجبل طارقگرینلندگامبیاگینهگوادلوپاستوایی گینهیونانجنوبی جورج" + + "یا و جنوبی ساندویچ جزایرگواتمالاگوئامگینه بیسائوگویانهنگ کنگهارد و " + + "مک\u200cدونالد جزایرهندوراسکرواسیهاییتیمجارستونقناری جزایراندونزیای" + + "رلندایسراییلمن ِجزیرههندبریتانیای هند ِاوقیانوس ِمناطقعراقایرانایسل" + + "ندایتالیاجرسیجاماییکااردنجاپونکنیاقرقیزستونکامبوجکیریباتیکومورسنت ک" + + "یتس و نویسشمالی کُرهجنوبی کُرهکویتکیمن جزیره\u200cئونقزاقستونلائوسل" + + "بنانسنت لوسیالیختن اشتاینسریلانکالیبریالسوتولتونیلوکزامبورگلاتویالی" + + "بیمراکشموناکومولداویمونته\u200cنگروسنت مارتینماداگاسکارمارشال جزایر" + + "مقدونیهمالیمیانمارمغولستونماکائو (چین دله)شمالی ماریانا جزایرمارتین" + + "یک جزیره\u200cئونموریتانیمونتسراتمالتمورى تيوسمالدیومالاویمکزیکمالز" + + "یموزامبیکنامبیانیو کالیدونیانیجرنورفولک جزیرهنیجریهنیکاراگوئههلندنر" + + "وژنپالنائورونیئونیوزلندعمانپاناماپروفرانسه\u200cی پولی\u200cنزیپاپو" + + "ا نو گینهفیلیپینپاکستونلهستونسن پییر و میکلنپیتکارین جزایرپورتوریکو" + + "فلسطین ِسرزمینپرتغالپالائوپاراگوئهقطراوقیانوسیه\u200cی ِپرت ِجائونر" + + "ئونیونرومانیصربستونروسیهروآنداعربستونسلیمون جزیرهسیشلسودانسوئدسنگاپ" + + "ورسنت هلنااسلوونیسوالبارد و يان مايناسلواکیسیرالئونسن مارینوسنگالسو" + + "مالیسورینامجنوبی سودانسائوتومه و پرینسیپالسالوادورسنت مارتنسوریهسوا" + + "زیلندتریستان دا جونهاتورکس و کایکوس جزایرچادفرانسه\u200cی جنوبی منا" + + "طقتوگوتایلندتاجیکستونتوکلائوتیمور شرقیترکمونستونتونستونگاترکیهترینی" + + "داد و توباگوتووالوتایوانتانزانیااوکرایناوگانداآمریکای پَرتِ\u200cپِ" + + "لا جزیره\u200cئونمتحده ایالاتاروگوئهازبکستونواتیکانسنت وینسنت و گرن" + + "ادینونزوئلابریتانیای ویرجینآمریکای ویرجینویتناموانواتووالیس و فوتون" + + "اساموآکوزوویمنمایوتجنوبی افریقازامبیازیمبابوهنامَیِّن منطقهجهونآفری" + + "قاشمالی آمریکاجنوبی آمریکااوقیانوسیهغربی آفریقامیونی آمریکاشرقی آفر" + + "یقاشمالی ۀفریقامیونی آفریقاجنوبی آفریقاآمریکاشمالی امریکاکاراییبشرق" + + "ی آسیاجنوبی آسیاآسیای ِجنوب\u200cشرقی\u200cوَرجنوبی اروپااوسترالزیم" + + "لانزیمیکرونزی منقطهپولی\u200cنزیآسیامیونی آسیاغربی آسیااروپاشرقی ار" + + "وپاشمالی اروپاغربی اروپالاتین آمریکا", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0019, 0x0025, 0x0045, 0x0057, 0x0077, 0x0085, 0x0091, + 0x00a1, 0x00ad, 0x00cc, 0x00dc, 0x00f7, 0x0101, 0x0111, 0x011b, + 0x012e, 0x0140, 0x015c, 0x016c, 0x017a, 0x0184, 0x019b, 0x01ad, + 0x01b7, 0x01c5, 0x01cd, 0x01e2, 0x01ee, 0x01fa, 0x0206, 0x022c, + 0x0236, 0x0242, 0x024c, 0x025f, 0x0271, 0x027d, 0x0285, 0x0291, + 0x02b1, 0x02c8, 0x02ee, 0x0307, 0x0311, 0x0322, 0x0333, 0x033b, + 0x0347, 0x034d, 0x0359, 0x0374, 0x0386, 0x038e, 0x039b, 0x03ab, + 0x03c2, 0x03ca, 0x03db, 0x03e5, 0x03fa, 0x0406, 0x0414, 0x0422, + // Entry 40 - 7F + 0x043d, 0x044b, 0x0461, 0x046d, 0x0479, 0x047f, 0x0490, 0x049c, + 0x04ac, 0x04b8, 0x04d1, 0x04d1, 0x04dd, 0x04e5, 0x0507, 0x0517, + 0x052a, 0x0536, 0x0540, 0x0550, 0x055e, 0x056c, 0x058a, 0x0594, + 0x059a, 0x05a9, 0x05b7, 0x05c3, 0x05cb, 0x05d9, 0x05f0, 0x05fa, + 0x0639, 0x0649, 0x0653, 0x0668, 0x0672, 0x067f, 0x06a9, 0x06b7, + 0x06c3, 0x06cf, 0x06df, 0x06f4, 0x0702, 0x070e, 0x071e, 0x072f, + 0x0735, 0x076e, 0x0776, 0x0780, 0x078c, 0x079a, 0x07a2, 0x07b2, + 0x07ba, 0x07c4, 0x07cc, 0x07de, 0x07ea, 0x07fa, 0x0804, 0x081f, + // Entry 80 - BF + 0x0832, 0x0845, 0x084d, 0x0869, 0x0879, 0x0883, 0x088d, 0x089e, + 0x08b5, 0x08c5, 0x08d1, 0x08db, 0x08e5, 0x08f9, 0x0905, 0x090d, + 0x0917, 0x0923, 0x0931, 0x0946, 0x0959, 0x096d, 0x0984, 0x0992, + 0x099a, 0x09a8, 0x09b8, 0x09d4, 0x09f8, 0x0a1c, 0x0a2c, 0x0a3c, + 0x0a44, 0x0a55, 0x0a61, 0x0a6d, 0x0a77, 0x0a81, 0x0a91, 0x0a9d, + 0x0ab6, 0x0abe, 0x0ad7, 0x0ae3, 0x0af7, 0x0aff, 0x0b07, 0x0b0f, + 0x0b1b, 0x0b23, 0x0b31, 0x0b39, 0x0b45, 0x0b4b, 0x0b6e, 0x0b86, + 0x0b94, 0x0ba2, 0x0bae, 0x0bc9, 0x0be4, 0x0bf6, 0x0c11, 0x0c1d, + // Entry C0 - FF + 0x0c29, 0x0c39, 0x0c3f, 0x0c6e, 0x0c7c, 0x0c88, 0x0c96, 0x0ca0, + 0x0cac, 0x0cba, 0x0cd1, 0x0cd9, 0x0ce3, 0x0ceb, 0x0cf9, 0x0d08, + 0x0d16, 0x0d39, 0x0d47, 0x0d57, 0x0d68, 0x0d72, 0x0d7e, 0x0d8c, + 0x0da1, 0x0dc3, 0x0dd7, 0x0de8, 0x0df2, 0x0e02, 0x0e20, 0x0e45, + 0x0e4b, 0x0e72, 0x0e7a, 0x0e86, 0x0e98, 0x0ea6, 0x0eb9, 0x0ecd, + 0x0ed5, 0x0edf, 0x0ee9, 0x0f09, 0x0f15, 0x0f21, 0x0f31, 0x0f3f, + 0x0f4d, 0x0f85, 0x0f85, 0x0f9c, 0x0faa, 0x0fba, 0x0fc8, 0x0fed, + 0x0ffb, 0x101a, 0x1035, 0x1041, 0x104f, 0x1069, 0x1073, 0x107d, + // Entry 100 - 13F + 0x1083, 0x108d, 0x10a4, 0x10b0, 0x10c0, 0x10db, 0x10e3, 0x10ef, + 0x1106, 0x111d, 0x1131, 0x1146, 0x115d, 0x1172, 0x1189, 0x11a0, + 0x11b7, 0x11c3, 0x11da, 0x11e8, 0x11f9, 0x120c, 0x1235, 0x124a, + 0x125c, 0x1268, 0x1283, 0x1294, 0x129c, 0x12af, 0x12c0, 0x12ca, + 0x12dd, 0x12f2, 0x1305, 0x131c, + }, + }, + { // naq + "AndorrabUnited Arab EmiratesAfghanistanniAntiguab tsî BarbudabAnguillabA" + + "lbaniabArmeniabAngolabArgentinabAmericab SamoabAustriabAustraliebAru" + + "babAzerbaijanniBosniab tsî HerzegovinabBarbadosBangladesBelgiummiBur" + + "kina FasobBulgariabBahrainBurundibBeninsBermudasBruneiBoliviabBrazil" + + "iabBahamasBhutansBotswanabBelarusBelizeKanadabDemocratic Republic of" + + " the CongoCentral African RepublikiCongobSwitzerlandiIvoorkusiCook I" + + "slandsChilibCameroonniChinabColombiabCosta RicaCubabCape Verde Islan" + + "dsCyprusCzech RepublikiDuitslandiDjiboutiDenmarkiDominicabDominican " + + "RepublicAlgeriabEcuadoriEstoniabEgiptebEritreabSpaniebEthiopiabFinla" + + "ndiFijibFalkland IslandsMicronesiaFrankreikiGaboniUnited KingdomGren" + + "adaGeorgiabFrench GuianaGhanabGibraltarGreenlandGambiabGuineabGuadel" + + "oupeEquatorial GuineabXrikelandiGuatemalaGuamGuinea-BissauGuyanaHond" + + "urasCroatiabHaitiHongareiebIndonesiabIrlandiIsraeliIndiabBritish Ind" + + "ian Ocean TerritoryIraqiIranniIcelandItaliabJamaicabJordanniJapanniK" + + "enyabKyrgyzstanniCambodiabKiribatiComorosSaint Kitts and NevisKoreab" + + ", NoordKoreab, SuidKuwaitiCayman IslandsKazakhstanniLaosLebanonniSai" + + "nt LuciaLiechtensteinniSri LankabLiberiabLesothobLithuaniabLuxembour" + + "giLatviaLibyabMoroccoMonacoMoldovaMadagascariMarshall IslandsMacedon" + + "iabMalibMyanmarMongoliaNorthern Mariana IslandsMartiniqueMauritaniaM" + + "ontserratMaltaMauritiusMaldivesMalawibMexicobMalaysiabMozambikiNamib" + + "iabNew CaledoniaNigeriNorfolk IslandNigeriebNicaraguabNetherlandsNoo" + + "rweebNepaliNauruNiueNew ZealandiOmanPanamaPerubFrench PolynesiaPapua" + + " New GuineabPhilippinniPakistanniPolandiSaint Pierre and MiquelonPit" + + "cairnPuerto RicoPalestinian West Bank and GazaPortugaliPalauParaguai" + + "bQatarRéunionRomaniaRasiabRwandabSaudi ArabiabSolomon IslandsSeychel" + + "lesSudanniSwedebSingaporeSaint HelenaSloveniaSlovakiaSierra LeoneSan" + + " MarinoSenegaliSomaliabSurinameSão Tomé and PríncipeEl SalvadoriSyri" + + "abSwazilandiTurks and Caicos IslandsChadiTogobThailandiTajikistanTok" + + "elauEast TimorTurkmenistanTunisiabTongaTurkeiebTrinidad and TobagoTu" + + "valuTaiwanTanzaniabUkraineUgandabAmerikabUruguaibUzbekistanVatican S" + + "tateSaint Vincent and the GrenadinesVenezuelabBritish Virgin Islands" + + "U.S. Virgin IslandsVietnammiVanuatuWallis and FutunaSamoaYemenMayott" + + "eSuid AfrikabZambiabZimbabweb", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x001c, 0x0029, 0x003f, 0x0048, 0x0050, + 0x0058, 0x005f, 0x005f, 0x0069, 0x0078, 0x0080, 0x008a, 0x0090, + 0x0090, 0x009c, 0x00b5, 0x00bd, 0x00c6, 0x00cf, 0x00dc, 0x00e5, + 0x00ec, 0x00f4, 0x00fa, 0x00fa, 0x0102, 0x0108, 0x0110, 0x0110, + 0x0119, 0x0120, 0x0127, 0x0127, 0x0130, 0x0137, 0x013d, 0x0144, + 0x0144, 0x0164, 0x017d, 0x0183, 0x018f, 0x0198, 0x01a4, 0x01aa, + 0x01b4, 0x01ba, 0x01c3, 0x01c3, 0x01cd, 0x01d2, 0x01e4, 0x01e4, + 0x01e4, 0x01ea, 0x01f9, 0x0203, 0x0203, 0x020b, 0x0213, 0x021c, + // Entry 40 - 7F + 0x022e, 0x0236, 0x0236, 0x023e, 0x0246, 0x024d, 0x024d, 0x0255, + 0x025c, 0x0265, 0x0265, 0x0265, 0x026d, 0x0272, 0x0282, 0x028c, + 0x028c, 0x0296, 0x029c, 0x02aa, 0x02b1, 0x02b9, 0x02c6, 0x02c6, + 0x02cc, 0x02d5, 0x02de, 0x02e5, 0x02ec, 0x02f6, 0x0308, 0x0312, + 0x0312, 0x031b, 0x031f, 0x032c, 0x0332, 0x0332, 0x0332, 0x033a, + 0x0342, 0x0347, 0x0351, 0x0351, 0x035b, 0x0362, 0x0369, 0x0369, + 0x036f, 0x038d, 0x0392, 0x0398, 0x039f, 0x03a6, 0x03a6, 0x03ae, + 0x03b6, 0x03bd, 0x03c3, 0x03cf, 0x03d8, 0x03e0, 0x03e7, 0x03fc, + // Entry 80 - BF + 0x0409, 0x0415, 0x041c, 0x042a, 0x0436, 0x043a, 0x0443, 0x044e, + 0x045d, 0x0467, 0x046f, 0x0477, 0x0481, 0x048c, 0x0492, 0x0498, + 0x049f, 0x04a5, 0x04ac, 0x04ac, 0x04ac, 0x04b7, 0x04c7, 0x04d1, + 0x04d6, 0x04dd, 0x04e5, 0x04e5, 0x04fd, 0x0507, 0x0511, 0x051b, + 0x0520, 0x0529, 0x0531, 0x0538, 0x053f, 0x0548, 0x0551, 0x0559, + 0x0566, 0x056c, 0x057a, 0x0582, 0x058c, 0x0597, 0x059f, 0x05a5, + 0x05aa, 0x05ae, 0x05ba, 0x05be, 0x05c4, 0x05c9, 0x05d9, 0x05ea, + 0x05f5, 0x05ff, 0x0606, 0x061f, 0x0627, 0x0632, 0x0650, 0x0659, + // Entry C0 - FF + 0x065e, 0x0667, 0x066c, 0x066c, 0x0674, 0x067b, 0x067b, 0x0681, + 0x0688, 0x0695, 0x06a4, 0x06ae, 0x06b5, 0x06bb, 0x06c4, 0x06d0, + 0x06d8, 0x06d8, 0x06e0, 0x06ec, 0x06f6, 0x06fe, 0x0706, 0x070e, + 0x070e, 0x0726, 0x0732, 0x0732, 0x0738, 0x0742, 0x0742, 0x075a, + 0x075f, 0x075f, 0x0764, 0x076d, 0x0777, 0x077e, 0x0788, 0x0794, + 0x079c, 0x07a1, 0x07a9, 0x07bc, 0x07c2, 0x07c8, 0x07d1, 0x07d8, + 0x07df, 0x07df, 0x07df, 0x07e7, 0x07ef, 0x07f9, 0x0806, 0x0826, + 0x0830, 0x0846, 0x0859, 0x0862, 0x0869, 0x087a, 0x087f, 0x087f, + // Entry 100 - 13F + 0x0884, 0x088b, 0x0897, 0x089e, 0x08a7, + }, + }, + { // nd + "AndoraUnited Arab EmiratesAfghanistanAntigua le BarbudaAnguillaAlbaniaAr" + + "meniaAngolaAjentinaSamoa ye AmelikaAustriaAustraliaArubhaAzerbaijanB" + + "hosnia le HerzegovinaBhabhadosiBhangiladeshiBhelgiumBhukina FasoBhul" + + "gariyaBhahareniBhurundiBheniniBhemudaBruneiBholiviyaBraziliBhahamasB" + + "hutaniBotswanaBhelarusiBhelizeKhanadaDemocratic Republic of the Cong" + + "oCentral African RepublicKhongoSwitzerlandIvory CoastCook IslandsChi" + + "leKhameruniChinaKholombiyaKhosta RikhaCubaCape Verde IslandsCyprusCz" + + "ech RepublicGermanyDjiboutiDenmakhiDominikhaDominican RepublicAljeri" + + "yaEcuadorEstoniaEgyptEritreaSpainEthiopiaFinlandFijiFalkland Islands" + + "MicronesiaFuransiGabhoniUnited KingdomGrenadaGeorgiaGwiyana ye Furan" + + "siGhanaGibraltarGreenlandGambiyaGuineaGuadeloupeEquatorial GuineaGre" + + "eceGuatemalaGuamGuinea-BissauGuyanaHondurasCroatiaHayitiHungaryIndon" + + "esiyaIrelandIsuraeliIndiyaBritish Indian Ocean TerritoryIrakiIranIce" + + "landItaliJamaicaJodaniJapanKhenyaKyrgyzstanCambodiaKhiribatiKhomoroS" + + "aint Kitts and NevisNorth KoreaSouth KoreaKhuweitiCayman IslandsKaza" + + "khstanLaosLebhanoniSaint LuciaLiechtensteinSri LankaLibheriyaLesotho" + + "LithuaniaLuxembourgLatviaLibhiyaMorokhoMonakhoMoldovaMadagaskaMarsha" + + "ll IslandsMacedoniaMaliMyanmarMongoliaNorthern Mariana IslandsMartin" + + "iqueMauritaniaMontserratMaltaMauritiusMaldivesMalawiMeksikhoMalezhiy" + + "aMozambiqueNamibhiyaNew CaledoniaNigerNorfolk IslandNigeriyaNicaragu" + + "aNetherlandsNoweyiNephaliNauruNiueNew ZealandOmaniPanamaPheruPholine" + + "siya ye FulansiPapua New GuineaPhilippinesPhakistaniPholandiSaint Pi" + + "erre and MiquelonPitcairnPuerto RicoPalestinian West Bank and GazaPo" + + "rtugalPalauParaguayKathariRéunionRomaniaRashiyaRuwandaSaudi ArabiaSo" + + "lomon IslandsSeychellesSudaniSwedenSingaporeSaint HelenaSloveniaSlov" + + "akiaSierra LeoneSan MarinoSenegaliSomaliyaSurinameSão Tomé and Prínc" + + "ipeEl SalvadorSyriaSwazilandTurks and Caicos IslandsChadiThogoThayil" + + "andiTajikistanThokelawuEast TimorTurkmenistanTunisiyaThongaThekhiTri" + + "nidad le TobagoThuvaluThayiwaniTanzaniyaYukreiniUgandaAmelikaYurugwa" + + "iUzbekistanVatican StateSaint Vincent and the GrenadinesVenezuelaBri" + + "tish Virgin IslandsU.S. Virgin IslandsVietnamVhanuatuWallis and Futu" + + "naSamowaYemeniMayotteMzansi ye AfrikaZambiyaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x001a, 0x0025, 0x0037, 0x003f, 0x0046, + 0x004d, 0x0053, 0x0053, 0x005b, 0x006b, 0x0072, 0x007b, 0x0081, + 0x0081, 0x008b, 0x00a1, 0x00ab, 0x00b8, 0x00c0, 0x00cc, 0x00d6, + 0x00df, 0x00e7, 0x00ee, 0x00ee, 0x00f5, 0x00fb, 0x0104, 0x0104, + 0x010b, 0x0113, 0x011a, 0x011a, 0x0122, 0x012b, 0x0132, 0x0139, + 0x0139, 0x0159, 0x0171, 0x0177, 0x0182, 0x018d, 0x0199, 0x019e, + 0x01a7, 0x01ac, 0x01b6, 0x01b6, 0x01c2, 0x01c6, 0x01d8, 0x01d8, + 0x01d8, 0x01de, 0x01ec, 0x01f3, 0x01f3, 0x01fb, 0x0203, 0x020c, + // Entry 40 - 7F + 0x021e, 0x0226, 0x0226, 0x022d, 0x0234, 0x0239, 0x0239, 0x0240, + 0x0245, 0x024d, 0x024d, 0x024d, 0x0254, 0x0258, 0x0268, 0x0272, + 0x0272, 0x0279, 0x0280, 0x028e, 0x0295, 0x029c, 0x02ae, 0x02ae, + 0x02b3, 0x02bc, 0x02c5, 0x02cc, 0x02d2, 0x02dc, 0x02ed, 0x02f3, + 0x02f3, 0x02fc, 0x0300, 0x030d, 0x0313, 0x0313, 0x0313, 0x031b, + 0x0322, 0x0328, 0x032f, 0x032f, 0x0339, 0x0340, 0x0348, 0x0348, + 0x034e, 0x036c, 0x0371, 0x0375, 0x037c, 0x0381, 0x0381, 0x0388, + 0x038e, 0x0393, 0x0399, 0x03a3, 0x03ab, 0x03b4, 0x03bb, 0x03d0, + // Entry 80 - BF + 0x03db, 0x03e6, 0x03ee, 0x03fc, 0x0406, 0x040a, 0x0413, 0x041e, + 0x042b, 0x0434, 0x043d, 0x0444, 0x044d, 0x0457, 0x045d, 0x0464, + 0x046b, 0x0472, 0x0479, 0x0479, 0x0479, 0x0482, 0x0492, 0x049b, + 0x049f, 0x04a6, 0x04ae, 0x04ae, 0x04c6, 0x04d0, 0x04da, 0x04e4, + 0x04e9, 0x04f2, 0x04fa, 0x0500, 0x0508, 0x0511, 0x051b, 0x0524, + 0x0531, 0x0536, 0x0544, 0x054c, 0x0555, 0x0560, 0x0566, 0x056d, + 0x0572, 0x0576, 0x0581, 0x0586, 0x058c, 0x0591, 0x05a7, 0x05b7, + 0x05c2, 0x05cc, 0x05d4, 0x05ed, 0x05f5, 0x0600, 0x061e, 0x0626, + // Entry C0 - FF + 0x062b, 0x0633, 0x063a, 0x063a, 0x0642, 0x0649, 0x0649, 0x0650, + 0x0657, 0x0663, 0x0672, 0x067c, 0x0682, 0x0688, 0x0691, 0x069d, + 0x06a5, 0x06a5, 0x06ad, 0x06b9, 0x06c3, 0x06cb, 0x06d3, 0x06db, + 0x06db, 0x06f3, 0x06fe, 0x06fe, 0x0703, 0x070c, 0x070c, 0x0724, + 0x0729, 0x0729, 0x072e, 0x0738, 0x0742, 0x074b, 0x0755, 0x0761, + 0x0769, 0x076f, 0x0775, 0x0787, 0x078e, 0x0797, 0x07a0, 0x07a8, + 0x07ae, 0x07ae, 0x07ae, 0x07b5, 0x07bd, 0x07c7, 0x07d4, 0x07f4, + 0x07fd, 0x0813, 0x0826, 0x082d, 0x0835, 0x0846, 0x084c, 0x084c, + // Entry 100 - 13F + 0x0852, 0x0859, 0x0869, 0x0870, 0x0878, + }, + }, + { // ne + neRegionStr, + neRegionIdx, + }, + { // nl + nlRegionStr, + nlRegionIdx, + }, + { // nmg + "Andɔ́raMinlambɔ́ Nsaŋ́nsa mí ArabiaAfganistaŋAntíga bá BarbúdaAnguíllaAl" + + "baniaArméniaAngolaArgentínaSamoa m ́Amɛ́rkaÖtrishÖstraliáÁrúbaAzerba" + + "ïjaŋBosnia na ƐrzegovinaBarbadoBɛŋgladɛshBɛlgikBurkina FasoBulgaria" + + "BahrainBurundiBeninBɛrmudaBrunɛiBoliviaBrésilBahamasButaŋBotswanaBel" + + "arusBɛlizKanadaKongó ZaïreSentrafríkaKongoSwitzɛrlandKote d´IvoireMa" + + "ŋ́ má KookTshiliKamerunShineKɔlɔ́mbiaKosta RíkaKubaMaŋ́ má KapvɛrSi" + + "priaNlambɔ́ bó tschɛkJamanJibútiDanemarkDominíkaNlambɔ́ DominíkaAlge" + + "riaEkuateurƐstoniaÄgyptɛnErytreaPaŋáEthiopiáFinlandeFijiáMaŋ má Falk" + + "landMikronesiaFalaGabɔŋNlambɔ́ NgɛlɛnGrenadaJɔrgiaGuyane FalaGánaGil" + + "bratarGreenlandGambiaGuineGuadeloupGuine EkuatorialGrɛceGuatemalaGua" + + "mGuine BissoGuyanaƆndúrasKroasiaHaïtiƆngríaIndonesiaIrlandÄsrɛlIndia" + + "Nlambɔ́ ngɛlɛn ma yí maŋ ntsiɛhIrakIranIslandItaliaJamaikaJɔrdaniaJa" + + "pɔnKɛnyaKyrgystaŋKambodiaKiribatiKɔmɔrSaint Kitts na NevisKoré yí bv" + + "uɔKoré yí síKowɛitMaŋ́ má kumbiKazakstaŋLaosLibaŋSaint LuciaLishenst" + + "einSri LankaLiberiaLesotoLituaniáLuxembourgLatviaLibyaMarɔkMonakoMɔl" + + "daviaMadagaskarMaŋ́ má MarshallMacedoniaMaliMyanmarMɔngoliaMaŋ́ Mari" + + "áMartinikaMoritaniaMɔnserratMaltaMorisseMaldiviaMalawiMɛxikMalaysia" + + "MozambikNamibiaKaledoni nwanahNigerMaŋ́ má NɔrfɔrkNigeriaNikaraguaNe" + + "dɛrlandNɔrvɛgNepalNoruNiuɛZeland nwanahOmanPanamaPeruPolynesia FalaG" + + "uine PapuasiFilipinPakistanPɔlɔŋSaint Peter ba MikelɔnPitkairnPuɛrto" + + " RikoPalɛstinPɔrtugalPaloParaguayKatarRéuniɔnRoumaniaRussiRwandaSaud" + + "i ArabiaMaŋ́ má SalomɔnSeychɛlleSudaŋSuɛdSingapurSaint LinaSloveniaS" + + "lovakiaSierra LeɔnSan MarinoSenegalSomáliaSurinamSao Tomé ba Prinshi" + + "pSalvadɔrSyriaSwazilandMaŋ́ má Turk na KaikoTshadTogoTaïlandTajikist" + + "aŋTokeloTimɔr tsindikēhTurkmɛnistaŋTunisiáTɔngaTurkiTrinidad ba Tobá" + + "góTuvalúTaïwanTanzáníaUkrɛnUgandaAmɛŕkaUruguayUsbǝkistaŋVatikaŋSaint" + + " Vincent ba GrenadinesVǝnǝzuelaMinsilɛ́ mímaŋ mí ngɛ̄lɛ̄nMinsilɛ mí " + + "maŋ́ m´AmɛrkaViɛtnamVanuatuWallis ba FutunaSamoaYǝmɛnMayɔtAfríka yí " + + "síZambiaZimbabwǝ", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0009, 0x002a, 0x0035, 0x0049, 0x0052, 0x0059, + 0x0061, 0x0067, 0x0067, 0x0071, 0x0084, 0x008b, 0x0095, 0x009c, + 0x009c, 0x00a8, 0x00bd, 0x00c4, 0x00d1, 0x00d8, 0x00e4, 0x00ec, + 0x00f3, 0x00fa, 0x00ff, 0x00ff, 0x0107, 0x010e, 0x0115, 0x0115, + 0x011c, 0x0123, 0x0129, 0x0129, 0x0131, 0x0138, 0x013e, 0x0144, + 0x0144, 0x0151, 0x015d, 0x0162, 0x016e, 0x017c, 0x018b, 0x0191, + 0x0198, 0x019d, 0x01a9, 0x01a9, 0x01b4, 0x01b8, 0x01ca, 0x01ca, + 0x01ca, 0x01d0, 0x01e5, 0x01ea, 0x01ea, 0x01f1, 0x01f9, 0x0202, + // Entry 40 - 7F + 0x0215, 0x021c, 0x021c, 0x0224, 0x022c, 0x0235, 0x0235, 0x023c, + 0x0242, 0x024b, 0x024b, 0x024b, 0x0253, 0x0259, 0x026a, 0x0274, + 0x0274, 0x0278, 0x027f, 0x0291, 0x0298, 0x029f, 0x02aa, 0x02aa, + 0x02af, 0x02b8, 0x02c1, 0x02c7, 0x02cc, 0x02d5, 0x02e5, 0x02eb, + 0x02eb, 0x02f4, 0x02f8, 0x0303, 0x0309, 0x0309, 0x0309, 0x0312, + 0x0319, 0x031f, 0x0327, 0x0327, 0x0330, 0x0336, 0x033d, 0x033d, + 0x0342, 0x0368, 0x036c, 0x0370, 0x0376, 0x037c, 0x037c, 0x0383, + 0x038c, 0x0392, 0x0398, 0x03a2, 0x03aa, 0x03b2, 0x03b9, 0x03cd, + // Entry 80 - BF + 0x03dc, 0x03e9, 0x03f0, 0x0400, 0x040a, 0x040e, 0x0414, 0x041f, + 0x042a, 0x0433, 0x043a, 0x0440, 0x0449, 0x0453, 0x0459, 0x045e, + 0x0464, 0x046a, 0x0473, 0x0473, 0x0473, 0x047d, 0x0490, 0x0499, + 0x049d, 0x04a4, 0x04ad, 0x04ad, 0x04ba, 0x04c3, 0x04cc, 0x04d6, + 0x04db, 0x04e2, 0x04ea, 0x04f0, 0x04f6, 0x04fe, 0x0506, 0x050d, + 0x051c, 0x0521, 0x0535, 0x053c, 0x0545, 0x054f, 0x0557, 0x055c, + 0x0560, 0x0565, 0x0572, 0x0576, 0x057c, 0x0580, 0x058e, 0x059b, + 0x05a2, 0x05aa, 0x05b2, 0x05c9, 0x05d1, 0x05dd, 0x05e6, 0x05ef, + // Entry C0 - FF + 0x05f3, 0x05fb, 0x0600, 0x0600, 0x0609, 0x0611, 0x0611, 0x0616, + 0x061c, 0x0628, 0x063b, 0x0645, 0x064b, 0x0650, 0x0658, 0x0662, + 0x066a, 0x066a, 0x0672, 0x067e, 0x0688, 0x068f, 0x0697, 0x069e, + 0x069e, 0x06b3, 0x06bc, 0x06bc, 0x06c1, 0x06ca, 0x06ca, 0x06e2, + 0x06e7, 0x06e7, 0x06eb, 0x06f3, 0x06fe, 0x0704, 0x0715, 0x0723, + 0x072b, 0x0731, 0x0736, 0x074a, 0x0751, 0x0758, 0x0762, 0x0768, + 0x076e, 0x076e, 0x076e, 0x0776, 0x077d, 0x0789, 0x0791, 0x07ac, + 0x07b7, 0x07da, 0x07f8, 0x0800, 0x0807, 0x0817, 0x081c, 0x081c, + // Entry 100 - 13F + 0x0823, 0x0829, 0x0838, 0x083e, 0x0847, + }, + }, + { // nn + "AscensionAndorraDei sameinte arabiske emirataAfghanistanAntigua og Barbu" + + "daAnguillaAlbaniaArmeniaAngolaAntarktisArgentinaAmerikansk SamoaAust" + + "errikeAustraliaArubaÅlandAserbajdsjanBosnia og HercegovinaBarbadosBa" + + "ngladeshBelgiaBurkina FasoBulgariaBahrainBurundiBeninSaint Barthélem" + + "yBermudaBruneiBoliviaBrasilBahamasBhutanBouvetøyaBotswanaKviterussla" + + "ndBelizeCanadaKokosøyaneKongo-KinshasaDen sentralafrikanske republik" + + "kenKongo-BrazzavilleSveitsElfenbeinskystenCookøyaneChileKamerunKinaC" + + "olombiaClippertonøyaCosta RicaCubaKapp VerdeCuraçaoChristmasøyaKypro" + + "sTsjekkiaTysklandDiego GarciaDjiboutiDanmarkDominicaDen dominikanske" + + " republikkenAlgerieCeuta og MelillaEcuadorEstlandEgyptVest-SaharaEri" + + "treaSpaniaEtiopiaDen europeiske unionenFinlandFijiFalklandsøyaneMikr" + + "onesiaføderasjonenFærøyaneFrankrikeGabonStorbritanniaGrenadaGeorgiaF" + + "ransk GuyanaGuernseyGhanaGibraltarGrønlandGambiaGuineaGuadeloupeEkva" + + "torial-GuineaHellasSør-Georgia og Sør-Sandwich-øyaneGuatemalaGuamGui" + + "nea-BissauGuyanaHongkong S.A.R. KinaHeard- og McDonaldsøyaneHonduras" + + "KroatiaHaitiUngarnKanariøyaneIndonesiaIrlandIsraelManIndiaBritiske o" + + "mråde i Det indiske havIrakIranIslandItaliaJerseyJamaicaJordanJapanK" + + "enyaKirgisistanKambodsjaKiribatiKomoraneSt. Christopher og NevisNord" + + "-KoreaSør-KoreaKuwaitCaymanøyaneKasakhstanLaosLibanonSt. LuciaLiecht" + + "ensteinSri LankaLiberiaLesothoLitauenLuxembourgLatviaLibyaMarokkoMon" + + "acoMoldovaMontenegroSaint MartinMadagaskarMarshalløyaneMakedoniaMali" + + "Myanmar (Burma)MongoliaMacao S.A.R. KinaNord-MariananeMartiniqueMaur" + + "itaniaMontserratMaltaMauritiusMaldivaneMalawiMexicoMalaysiaMosambikN" + + "amibiaNy-CaledoniaNigerNorfolkøyaneNigeriaNicaraguaNederlandNoregNep" + + "alNauruNiueNew ZealandOmanPanamaPeruFransk PolynesiaPapua Ny-GuineaF" + + "ilippinanePakistanPolenSt. Pierre og MiquelonPitcairnPuerto RicoPale" + + "stinsk territoriumPortugalPalauParaguayQatarYtre OseaniaRéunionRoman" + + "iaSerbiaRusslandRwandaSaudi-ArabiaSalomonøyaneSeychellaneSudanSverig" + + "eSingaporeSaint HelenaSloveniaSvalbard og Jan MayenSlovakiaSierra Le" + + "oneSan MarinoSenegalSomaliaSurinamSør-SudanSão Tomé og PríncipeEl Sa" + + "lvadorSint MaartenSyriaSwazilandTristan da CunhaTurks- og Caicosøyan" + + "eTsjadFranske sørområdeTogoThailandTadsjikistanTokelauTimor-Leste (A" + + "ust-Timor)TurkmenistanTunisiaTongaTyrkiaTrinidad og TobagoTuvaluTaiw" + + "anTanzaniaUkrainaUgandaUSAs ytre småøyarUSAUruguayUsbekistanVatikans" + + "tatenSt. Vincent og GrenadinaneVenezuelaDei britiske jomfruøyaneDei " + + "amerikanske jomfruøyaneVietnamVanuatuWallis og FutunaSamoaKosovoJeme" + + "nMayotteSør-AfrikaZambiaZimbabweukjent områdeverdaAfrikaNord-Amerika" + + "Sør-AmerikaOseaniaVest-AfrikaSentral-AmerikaAust-AfrikaNord-AfrikaSe" + + "ntral-AfrikaSørlege AfrikaAmerikanordlege AmerikaKaribiaAust-AsiaSør" + + "-AsiaSøraust-AsiaSør-EuropaAustralia og New ZealandMelanesiaMikrones" + + "iaPolynesiaAsiaSentral-AsiaVest-AsiaEuropaAust-EuropaNord-EuropaVest" + + "-EuropaLatin-Amerika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002d, 0x0038, 0x004a, 0x0052, 0x0059, + 0x0060, 0x0066, 0x006f, 0x0078, 0x0088, 0x0092, 0x009b, 0x00a0, + 0x00a6, 0x00b2, 0x00c7, 0x00cf, 0x00d9, 0x00df, 0x00eb, 0x00f3, + 0x00fa, 0x0101, 0x0106, 0x0117, 0x011e, 0x0124, 0x012b, 0x012b, + 0x0131, 0x0138, 0x013e, 0x0148, 0x0150, 0x015d, 0x0163, 0x0169, + 0x0174, 0x0182, 0x01a3, 0x01b4, 0x01ba, 0x01ca, 0x01d4, 0x01d9, + 0x01e0, 0x01e4, 0x01ec, 0x01fa, 0x0204, 0x0208, 0x0212, 0x021a, + 0x0227, 0x022d, 0x0235, 0x023d, 0x0249, 0x0251, 0x0258, 0x0260, + // Entry 40 - 7F + 0x027c, 0x0283, 0x0293, 0x029a, 0x02a1, 0x02a6, 0x02b1, 0x02b8, + 0x02be, 0x02c5, 0x02db, 0x02db, 0x02e2, 0x02e6, 0x02f5, 0x030c, + 0x0316, 0x031f, 0x0324, 0x0331, 0x0338, 0x033f, 0x034c, 0x0354, + 0x0359, 0x0362, 0x036b, 0x0371, 0x0377, 0x0381, 0x0392, 0x0398, + 0x03bc, 0x03c5, 0x03c9, 0x03d6, 0x03dc, 0x03f0, 0x0409, 0x0411, + 0x0418, 0x041d, 0x0423, 0x042f, 0x0438, 0x043e, 0x0444, 0x0447, + 0x044c, 0x046e, 0x0472, 0x0476, 0x047c, 0x0482, 0x0488, 0x048f, + 0x0495, 0x049a, 0x049f, 0x04aa, 0x04b3, 0x04bb, 0x04c3, 0x04db, + // Entry 80 - BF + 0x04e5, 0x04ef, 0x04f5, 0x0501, 0x050b, 0x050f, 0x0516, 0x051f, + 0x052c, 0x0535, 0x053c, 0x0543, 0x054a, 0x0554, 0x055a, 0x055f, + 0x0566, 0x056c, 0x0573, 0x057d, 0x0589, 0x0593, 0x05a1, 0x05aa, + 0x05ae, 0x05bd, 0x05c5, 0x05d6, 0x05e4, 0x05ee, 0x05f8, 0x0602, + 0x0607, 0x0610, 0x0619, 0x061f, 0x0625, 0x062d, 0x0635, 0x063c, + 0x0648, 0x064d, 0x065a, 0x0661, 0x066a, 0x0673, 0x0678, 0x067d, + 0x0682, 0x0686, 0x0691, 0x0695, 0x069b, 0x069f, 0x06af, 0x06be, + 0x06c9, 0x06d1, 0x06d6, 0x06ec, 0x06f4, 0x06ff, 0x0715, 0x071d, + // Entry C0 - FF + 0x0722, 0x072a, 0x072f, 0x073b, 0x0743, 0x074a, 0x0750, 0x0758, + 0x075e, 0x076a, 0x0777, 0x0782, 0x0787, 0x078e, 0x0797, 0x07a3, + 0x07ab, 0x07c0, 0x07c8, 0x07d4, 0x07de, 0x07e5, 0x07ec, 0x07f3, + 0x07fd, 0x0814, 0x081f, 0x082b, 0x0830, 0x0839, 0x0849, 0x085f, + 0x0864, 0x0877, 0x087b, 0x0883, 0x088f, 0x0896, 0x08ae, 0x08ba, + 0x08c1, 0x08c6, 0x08cc, 0x08de, 0x08e4, 0x08ea, 0x08f2, 0x08f9, + 0x08ff, 0x0912, 0x0912, 0x0915, 0x091c, 0x0926, 0x0933, 0x094d, + 0x0956, 0x096f, 0x098b, 0x0992, 0x0999, 0x09a9, 0x09ae, 0x09b4, + // Entry 100 - 13F + 0x09b9, 0x09c0, 0x09cb, 0x09d1, 0x09d9, 0x09e7, 0x09ec, 0x09f2, + 0x09fe, 0x0a0a, 0x0a11, 0x0a1c, 0x0a2b, 0x0a36, 0x0a41, 0x0a4f, + 0x0a5e, 0x0a65, 0x0a75, 0x0a7c, 0x0a85, 0x0a8e, 0x0a9b, 0x0aa6, + 0x0abe, 0x0ac7, 0x0ad1, 0x0ada, 0x0ade, 0x0aea, 0x0af3, 0x0af9, + 0x0b04, 0x0b0f, 0x0b1a, 0x0b27, + }, + }, + { // nnh + "Kàmalûm", + []uint16{ // 49 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0009, + }, + }, + { // no + noRegionStr, + noRegionIdx, + }, + { // nus + "AndoraAbganithtanAntiguaa kɛnɛ BarbudaAŋguɛlaAlbäniaAɛrmäniaAŋgolaAɛrgen" + + "tinAmerika thamowAthtɛriaAthɔra̱liaArubaAdhe̱rbe̱ja̱nBothnia kɛnɛ ɣä" + + "rgobiniaBärbadothBengeladiecBe̱lgimBurkinɛ pa̱thuBulga̱a̱riaBa̱reenB" + + "urundiBe̱ni̱nBe̱rmudaaBurunɛyBulibiaBäraadhiilBämuɔthButa̱nBothiwaan" + + "aBe̱lɛruthBilidhaKänɛdaCɛntrɔl aprika repuɔblicKɔŋgɔKodibo̱o̱Kuk ɣa̱" + + "ylɛnCili̱KɛmɛrunCaynaKolombiaKothtirikaKɛp bedi ɣa̱ylɛnAlgeriaKorwaa" + + "tiaBurutic ɣe̱ndian oce̱nKombodiaKomruthKaymɛn ɣa̱ylɛnSudanCa̱dBurut" + + "ic dhuɔ̱ɔ̱l be̱rgin", + []uint16{ // 250 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0006, 0x0011, 0x0028, 0x0031, 0x0039, + 0x0043, 0x004a, 0x004a, 0x0054, 0x0062, 0x006b, 0x0077, 0x007c, + 0x007c, 0x008c, 0x00a7, 0x00b1, 0x00bc, 0x00c4, 0x00d4, 0x00e1, + 0x00e9, 0x00f0, 0x00f9, 0x00f9, 0x0103, 0x010b, 0x0112, 0x0112, + 0x011d, 0x0126, 0x012d, 0x012d, 0x0137, 0x0142, 0x0149, 0x0151, + 0x0151, 0x0151, 0x016c, 0x0174, 0x0174, 0x017f, 0x018d, 0x0193, + 0x019c, 0x01a1, 0x01a9, 0x01a9, 0x01b3, 0x01b3, 0x01c7, 0x01c7, + 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, + // Entry 40 - 7F + 0x01c7, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, + 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, + 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, + 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, + 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, + 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + 0x01d7, 0x01f0, 0x01f0, 0x01f0, 0x01f0, 0x01f0, 0x01f0, 0x01f0, + 0x01f0, 0x01f0, 0x01f0, 0x01f0, 0x01f8, 0x01f8, 0x01ff, 0x01ff, + // Entry 80 - BF + 0x01ff, 0x01ff, 0x01ff, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + // Entry C0 - FF + 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, + 0x0211, 0x0211, 0x0211, 0x0211, 0x0216, 0x0216, 0x0216, 0x0216, + 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, + 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, 0x0216, + 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, + 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, + 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, + 0x021b, 0x0238, + }, + }, + { // nyn + "AndoraAmahanga ga Buharabu ageeteereineAfuganistaniAngiguwa na BabudaAng" + + "wiraArubaniaArimeniyaAngoraArigentinaSamowa ya AmeerikaOsituriaOsitu" + + "reeriyaArubaAzabagyaniBoziniya na HezegovinaBabadosiBangaradeshiBubi" + + "rigiBokina FasoBurugariyaBahareniBurundiBeniniBerimudaBuruneiBoriivi" + + "yaBuraziiriBahamaButaniBotswanaBararusiBerizeKanadaDemokoratika Ripa" + + "aburika ya KongoEihanga rya Rwagati ya AfirikaKongoSwisiAivore Kosit" + + "iEbizinga bya KuukuChileKameruuniChinaKorombiyaKositarikaCubaEbizing" + + "a bya KepuvadeSaipurasiRipaaburika ya ZeekiBugirimaaniGyibutiDeenima" + + "akaDominikaRipaaburika ya DominicaArigyeriyaIkwedaEsitoniyaMisiriEri" + + "teriyaSipeyiniEthiyopiyaBufiniFigyiEbizinga bya FaakilandaMikironesi" + + "yaBufaransaGabooniBungyerezaGurenadaGyogiyaGuyana ya BufaransaGanaGi" + + "buraataGuriinirandiGambiyaGineGwaderupeGuniGuriisiGwatemaraGwamuGine" + + "bisauGuyanaHondurasiKorasiyaHaitiHangareIndoneeziyaIrerandiIsirairiI" + + "ndiyaEbizinga bya Indian ebya BungyerezaIraakaIraaniAisilandiItareGy" + + "amaikaYorudaaniGyapaaniKenyaKirigizistaniKambodiyaKiribatiKoromoSent" + + "i Kittis na NevisiKoreya AmatembaKoreya AmashuumaKuweitiEbizinga bya" + + " KayimaniKazakisitaniLayosiLebanoniSenti RusiyaLishenteniSirirankaLi" + + "beriyaLesothoLithuaniaLakizembaagaLatviyaLibyaMoroccoMonacoMoridovaM" + + "adagasikaEbizinga bya MarshaaMasedooniaMariMyanamarMongoriaEbizinga " + + "by’amatemba ga MarianaMartiniqueMauriteeniyaMontserratiMaritaMaurish" + + "iasiMaridivesMarawiMexicomarayiziaMozambiqueNamibiyaNiukaredoniaNaig" + + "yaEkizinga NorifokoNaigyeriyaNikaragwaHoorandiNoorweNepoNauruNiueNiu" + + "zirandiOmaaniPanamaPeruPolinesia ya BufaransaPapuaFiripinoPakisitaan" + + "iPoorandiSenti Piyerre na MikweronPitkainiPwetorikoParestiina na Gaz" + + "aPocugoPalaawuParagwaiKataRiyuniyoniRomaniyaRrashaRwandaSaudi Areebi" + + "yaEbizinga bya SurimaaniShesheresiSudaniSwideniSingapoSenti HerenaSi" + + "rovaaniyaSirovaakiyaSirra RiyooniSamarinoSenegoSomaariyaSurinaamuSaw" + + "o Tome na PurinsipoEri SalivadoSiriyaSwazirandiEbizinga bya Buturuki" + + " na KaikoChadiTogoTairandiTajikisitaniTokerawuBurugweizooba bwa Timo" + + "riTurukimenisitaniTuniziaTongaButuruki /TakeTurinidad na TobagoTuvar" + + "uTayiwaaniTanzaniaUkureiniUgandaAmerikaUrugwaiUzibekisitaniVatikaniS" + + "enti Vinsent na GurenadiniVenezuweraEbizinga bya Virigini ebya Bungy" + + "erezaEbizinga bya Virigini ebya AmerikaViyetinaamuVanuatuWarris na F" + + "utunaSamowaYemeniMayoteSausi AfirikaZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0027, 0x0033, 0x0045, 0x004c, 0x0054, + 0x005d, 0x0063, 0x0063, 0x006d, 0x007f, 0x0087, 0x0093, 0x0098, + 0x0098, 0x00a2, 0x00b8, 0x00c0, 0x00cc, 0x00d4, 0x00df, 0x00e9, + 0x00f1, 0x00f8, 0x00fe, 0x00fe, 0x0106, 0x010d, 0x0116, 0x0116, + 0x011f, 0x0125, 0x012b, 0x012b, 0x0133, 0x013b, 0x0141, 0x0147, + 0x0147, 0x0168, 0x0186, 0x018b, 0x0190, 0x019d, 0x01af, 0x01b4, + 0x01bd, 0x01c2, 0x01cb, 0x01cb, 0x01d5, 0x01d9, 0x01ee, 0x01ee, + 0x01ee, 0x01f7, 0x020b, 0x0216, 0x0216, 0x021d, 0x0227, 0x022f, + // Entry 40 - 7F + 0x0246, 0x0250, 0x0250, 0x0256, 0x025f, 0x0265, 0x0265, 0x026e, + 0x0276, 0x0280, 0x0280, 0x0280, 0x0286, 0x028b, 0x02a2, 0x02ae, + 0x02ae, 0x02b7, 0x02be, 0x02c8, 0x02d0, 0x02d7, 0x02ea, 0x02ea, + 0x02ee, 0x02f7, 0x0303, 0x030a, 0x030e, 0x0317, 0x031b, 0x0322, + 0x0322, 0x032b, 0x0330, 0x0339, 0x033f, 0x033f, 0x033f, 0x0348, + 0x0350, 0x0355, 0x035c, 0x035c, 0x0367, 0x036f, 0x0377, 0x0377, + 0x037d, 0x03a0, 0x03a6, 0x03ac, 0x03b5, 0x03ba, 0x03ba, 0x03c2, + 0x03cb, 0x03d3, 0x03d8, 0x03e5, 0x03ee, 0x03f6, 0x03fc, 0x0412, + // Entry 80 - BF + 0x0421, 0x0431, 0x0438, 0x044d, 0x0459, 0x045f, 0x0467, 0x0473, + 0x047d, 0x0486, 0x048e, 0x0495, 0x049e, 0x04aa, 0x04b1, 0x04b6, + 0x04bd, 0x04c3, 0x04cb, 0x04cb, 0x04cb, 0x04d5, 0x04e9, 0x04f3, + 0x04f7, 0x04ff, 0x0507, 0x0507, 0x0528, 0x0532, 0x053e, 0x0549, + 0x054f, 0x055a, 0x0563, 0x0569, 0x056f, 0x0578, 0x0582, 0x058a, + 0x0596, 0x059c, 0x05ad, 0x05b7, 0x05c0, 0x05c8, 0x05ce, 0x05d2, + 0x05d7, 0x05db, 0x05e5, 0x05eb, 0x05f1, 0x05f5, 0x060b, 0x0610, + 0x0618, 0x0623, 0x062b, 0x0644, 0x064c, 0x0655, 0x0667, 0x066d, + // Entry C0 - FF + 0x0674, 0x067c, 0x0680, 0x0680, 0x068a, 0x0692, 0x0692, 0x0698, + 0x069e, 0x06ac, 0x06c2, 0x06cc, 0x06d2, 0x06d9, 0x06e0, 0x06ec, + 0x06f7, 0x06f7, 0x0702, 0x070f, 0x0717, 0x071d, 0x0726, 0x072f, + 0x072f, 0x0745, 0x0751, 0x0751, 0x0757, 0x0761, 0x0761, 0x077f, + 0x0784, 0x0784, 0x0788, 0x0790, 0x079c, 0x07a4, 0x07bc, 0x07cc, + 0x07d3, 0x07d8, 0x07e6, 0x07f9, 0x07ff, 0x0808, 0x0810, 0x0818, + 0x081e, 0x081e, 0x081e, 0x0825, 0x082c, 0x0839, 0x0841, 0x085c, + 0x0866, 0x088b, 0x08ad, 0x08b8, 0x08bf, 0x08cf, 0x08d5, 0x08d5, + // Entry 100 - 13F + 0x08db, 0x08e1, 0x08ee, 0x08f4, 0x08fc, + }, + }, + { // om + "BrazilChinaGermanyItoophiyaaFranceUnited KingdomIndiaItalyJapanKeeniyaaR" + + "ussiaUnited States", + []uint16{ // 244 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, + 0x000b, 0x000b, 0x000b, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + // Entry 40 - 7F + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, + 0x001c, 0x0022, 0x0022, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003f, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + // Entry 80 - BF + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + // Entry C0 - FF + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x005a, + }, + }, + { // or + "ଆଣ୍ଡୋରାସଂଯୁକ୍ତ ଆରବ ଏମିରେଟସ୍ଆଫାଗାନିସ୍ତାନ୍ଆଣ୍ଟିଗୁଆ ଏବଂ ବାରବୁଦାଆଙ୍ଗୁଇଲ୍ଲାଆଲ" + + "ବାନିଆଆର୍ମେନିଆଆଙ୍ଗୋଲାଆର୍ଣ୍ଟକଟିକାଆର୍ଜେଣ୍ଟିନାଆମେରିକାନ୍ ସାମୋଆଅଷ୍ଟ୍ରିଆଅ" + + "ଷ୍ଟ୍ରେଲିଆଆରୁବାଆଲାଣ୍ଡ ଆଇସଲ୍ୟାଣ୍ଡଆଜେରବାଇଜାନ୍ବୋସନିଆ ଏବଂ ହର୍ଜଗୋଭିନାବାର" + + "ବାଡୋସ୍ବାଙ୍ଗଲାଦେଶ୍ବେଲଜିୟମ୍ବୁର୍କିନୋ ଫାସୋବୁଲଗେରିଆବାହାରିନ୍ବୁରୁନ୍ଦିବେନି" + + "ନ୍ସେଣ୍ଟ ବାର୍ଥେଲେମିବରମୁଡାବ୍ରୁନେଇବୋଲଭିଆବ୍ରାଜିଲ୍ବାହାମାସ୍ଭୁଟାନ୍ବୌଭେଟ୍ " + + "ଆଇସଲ୍ୟାଣ୍ଡବୋଟସ୍ବାନ୍ବେଲାରୁଷ୍ବେଲିଜ୍କାନାଡାକୋକୋସ୍ ଆଇସଲ୍ୟାଣ୍ଡକଙ୍ଗୋ-କିନସ" + + "ାସାମଧ୍ୟ ଆଫ୍ରିକୀୟ ଗଣତନ୍ତ୍ରକଙ୍ଗୋ-ବ୍ରାଜିଭିଲ୍ଲେସ୍ବିଜରଲ୍ୟାଣ୍ଡଆଇବରୀ କୋଷ୍" + + "ଟକୁକ୍ ଆଇସଲ୍ୟାଣ୍ଡଚିଲ୍ଲୀକାମେରୁନ୍ଚିନ୍କୋଲମ୍ବିଆକୋଷ୍ଟା ରିକାକ୍ୱିବାକେପ୍ ଭର" + + "୍ଦେଖ୍ରୀଷ୍ଟମାସ ଆଇଲ୍ୟାଣ୍ଡସାଇପ୍ରସ୍ଚେକ୍ ସାଧାରଣତନ୍ତ୍ରଜର୍ମାନୀଡିବୌଟିଡେନମା" + + "ର୍କଡୋମିନାକାଡୋମିନକାନ୍ ପ୍ରଜାତନ୍ତ୍ରଆଲଜେରିଆଇକ୍ୱାଡୋର୍ଏସ୍ତୋନିଆଇଜିପ୍ଟପଶ୍ଚ" + + "ିମ ସାହାରାଇରିଟ୍ରିୟାସ୍ପେନ୍ଇଥିଓପିଆୟୁରୋପିଆନ୍ ୟୁନିଅନ୍ଫିନଲ୍ୟାଣ୍ଡଫିଜିଫଲ୍କ" + + "ଲ୍ୟାଣ୍ଡ ଦ୍ବୀପପୁଞ୍ଜମାଇକ୍ରୋନେସିଆଫାରୋଇ ଦ୍ବୀପପୁଞ୍ଜଫ୍ରାନ୍ସଗାବୋନ୍ବ୍ରିଟେନ" + + "୍ଗ୍ରେନାଡାଜର୍ଜିଆଫ୍ରେଞ୍ଚ ଗୁଇନାଗୁଏରନେସିଘାନାଜିବ୍ରାଲ୍ଟର୍ଗ୍ରୀନଲ୍ୟାଣ୍ଡଗାମ" + + "୍ବିଆଗୁଏନେଆଗୌଡେଲୌପେଇକ୍ବାଟେରିଆଲ୍ ଗୁଇନିଆଗ୍ରୀସ୍ଦକ୍ଷିଣ ଜର୍ଜିଆ ଏବଂ ଦକ୍ଷି" + + "ଣ ସାଣ୍ଡୱିଚ୍ ଦ୍ବୀପପୁଞ୍ଜଗୁଏତମାଲାଗୁଆମ୍ଗୁଇନିଆ-ବିସାଉଗୁଇନାହଂକଂ ବିଶେଷ ପ୍ର" + + "ଶାସନିକ କ୍ଷେତ୍ର ଚୀନ୍ହାର୍ଡ ଦ୍ବୀପପୁଞ୍ଜ ଏବଂ ମ୍ୟାକଡୋନାଲ୍ ଦ୍ବୀପପୁଞ୍ଜହୋଣ୍" + + "ଡାରୁସ୍କ୍ରୋଆଟିଆହାଇତିହଙ୍ଗେରୀଇଣ୍ଡୋନେସିଆଆୟରଲ୍ୟାଣ୍ଡଇସ୍ରାଏଲ୍ଆଇଲ୍ ଅଫ୍ ମୈନ" + + "୍ଭାରତବ୍ରିଟିଶ୍ ଭାରତୀୟ ସାମୁଦ୍ରିକ କ୍ଷେତ୍ରଇରାକ୍ଇରାନ୍ଆଇସଲ୍ୟାଣ୍ଡଇଟାଲୀଜର୍" + + "ସିଜାମାଇକାଜୋର୍ଡାନ୍ଜାପାନ୍କେନିୟାକିର୍ଗିଜିସ୍ଥାନକାମ୍ବୋଡିଆକିରିବାଟୀକାମୋରସ୍" + + "ସେଣ୍ଟ କିଟସ୍ ଏଣ୍ଡ ନେଭିସ୍ଉତ୍ତର କୋରିଆଦକ୍ଷିଣ କୋରିଆକୁଏତ୍କେମ୍ୟାନ୍ ଦ୍ବୀପପ" + + "ୁଞ୍ଜକାଜାକାସ୍ଥାନ୍ଲାଓସ୍ଲେବାନନ୍ସେଣ୍ଟ ଲୁସିଆଲିଚେସ୍ତିଆନାନ୍ଶ୍ରୀଲଙ୍କାଲିବେର" + + "ିଆଲେସୋଥୋଲିଥାଆନିଆଲକ୍ସେମବର୍ଗଲାଟଭିଆଲିବିଆମୋରୋକ୍କୋମୋନାକୋମାଲଡୋଭାମଣ୍ଟେଗ୍ର" + + "ୋସେଣ୍ଟ ମାର୍ଟିନ୍ମାଡାଗାସ୍କର୍ମାର୍ଶଲ୍ ଦ୍ବୀପପୁଞ୍ଜମାସେଡୋନିଆମାଳୀମିୟାମାର୍ମ" + + "ଙ୍ଗୋଲିଆମାକାଉ SAR ଚିନ୍ଉତ୍ତର ମାରିଆନା ଦ୍ବୀପପୁଞ୍ଜମାର୍ଟିନିକ୍ୟୁମାଉରିଟାନି" + + "ଆମଣ୍ଟେସେରାଟ୍ମାଲ୍ଟାମୌରିସସ୍ମାଳଦ୍ବୀପମାଲୱିମେକ୍ସିକୋମାଲେସିଆମୋଜାମ୍ବିକ୍ୟୁନ" + + "ାମ୍ବିଆନୂତନ କାଲେଡୋନିଆନାଇଜର୍ନରଫ୍ଲକ୍ ଦ୍ବୀପନାଇଜେରିଆନିକାରାଗୁଆନେଦରଲ୍ୟାଣ୍" + + "ଡନରୱେନେପାଳନାଉରୁନିଉନ୍ୟୁଜିଲାଣ୍ଡଓମାନ୍ପାନାମାପେରୁଫ୍ରେଞ୍ଚ ପଲିନେସିଆପପୁଆ ନ" + + "୍ୟୁ ଗୁଏନିଆଫିଲିପାଇନସ୍ପାକିସ୍ତାନପୋଲାଣ୍ଡସେଣ୍ଟ ପିଏରେ ଏବଂ ମିକ୍ବାଲୋନ୍ପିଟକ" + + "ାଇରିନ୍ପୁଏର୍ତ୍ତୋ ରିକୋପାଲେସ୍ତେନିଆପର୍ତ୍ତୁଗାଲ୍ପାଲାଉପାରାଗୁଏକତାର୍ଆଉଟଲେଇଂ" + + " ଓସେନିଆରିୟୁନିଅନ୍ରୋମାନିଆସର୍ବିଆରୁଷିଆରାୱାଣ୍ଡାସାଉଦି ଆରବିଆସୋଲୋମନ୍ ଦ୍ବୀପପୁ" + + "ଞ୍ଜସେଚେଲସ୍ସୁଦାନ୍ସ୍ୱେଡେନ୍ସିଙ୍ଗାପୁର୍ସେଣ୍ଟ ହେଲେନାସ୍ଲୋଭେନିଆସାଲ୍ଭାର୍ଡ ଏ" + + "ବଂ ଜାନ୍ ମାୟୋନ୍ସ୍ଲୋଭାକିଆସିଓରା ଲିଓନ୍ସାନ୍ ମାରିନୋସେନେଗାଲ୍ସୋମାଲିଆସୁରିନା" + + "ମସାଓ ଟୋମେ ଏବଂ ପ୍ରିନସିପିଏଲ୍ ସାଲଭାଡୋର୍ସିରିଆସ୍ବାଜିଲାଣ୍ଡତୁର୍କସ୍ ଏବଂ ସା" + + "ଇକସ୍ ଦ୍ବୀପପୁଞ୍ଜଚାଦ୍ଫରାସୀ ଦକ୍ଷିଣ କ୍ଷେତ୍ରଟୋଗୋଥାଇଲାଣ୍ଡତାଜିକିସ୍ଥାନ୍ଟୋକ" + + "େଲାଉପୁର୍ବ ତିମୋର୍ତୁର୍କମେନିସ୍ତାନ୍ତୁନିସିଆଟୋଙ୍ଗାତୁର୍କୀତ୍ରିନିଦାଦ୍ ଏବଂ ଟ" + + "ୋବାଗୋଟୁଭାଲୁତାଇୱାନ୍ତାଞ୍ଜାନିଆୟୁକ୍ରାଇନ୍ଉଗାଣ୍ଡାୟୁନାଇଟେଡ୍ ଷ୍ଟେଟସ୍ ମାଇନର" + + "୍ ଆଉଟଲେଇଂ ଦ୍ବୀପପୁଞ୍ଜଯୁକ୍ତ ରାଷ୍ଟ୍ର ଆମେରିକାଉରୁଗୁଏଉଜବେକିସ୍ଥାନ୍ଭାଟିକାନ" + + "୍ସେଣ୍ଟ ଭିନସେଣ୍ଟ ଏବଂ ଦି ଗ୍ରେନାଡିସ୍ଭେନଜୁଏଲାବ୍ରିଟିଶ୍ ଭର୍ଜିନ୍ ଦ୍ବୀପପୁଞ" + + "୍ଜୟୁଏସ୍ ଭର୍ଜିନ୍ ଦ୍ବୀପପୁଞ୍ଜଭିଏତନାମ୍ଭାନୁଆତୁୱାଲିସ୍ ଏବଂ ଫୁତୁନାସାମୋଆୟେମ" + + "େନ୍ମାୟୋଟେଦକ୍ଷିଣ ଆଫ୍ରିକାଜାମ୍ବିଆଜିମ୍ବାୱେଅଜଣା କିମ୍ବା ଅବୈଧ ପ୍ରଦେଶବିଶ୍ବ" + + "ଆଫ୍ରିକାଉତ୍ତର ଆମେରିକାଦକ୍ଷିଣ ଆମେରିକାଓସୋନିଆନ୍ପଶ୍ଚିମ ଆଫ୍ରିକାମଧ୍ୟ ଆମେରି" + + "କାପୂର୍ବ ଆଫ୍ରିକାଉତ୍ତର ଆଫ୍ରିକାମଧ୍ୟ ଆଫ୍ରିକାଦକ୍ଷିଣସ୍ଥ ଆଫ୍ରିକାଆମେରିକାସ୍" + + "ଉତ୍ତରସ୍ଥ ଆମେରିକାକାରିବିଆନ୍ପୂର୍ବ ଏସିଆଦକ୍ଷିଣ ଏସିଆଦକ୍ଷିଣ-ପୂର୍ବ ଏସିଆଦକ୍" + + "ଷିଣ ୟୁରୋପ୍ଅଷ୍ଟ୍ରେଲିଆ ଏବଂ ନ୍ୟୁଜିଲ୍ୟାଣ୍ଡମେଲାନେସିଆମାଇକ୍ରୋନେସିଆନ୍ ଅଞ୍ଚ" + + "ଳପଲିନେସିଆଏସିଆମଧ୍ୟ ଏସିଆପଶ୍ଚିମ ଏସିଆୟୁରୋପ୍ପୂର୍ବ ୟୁରୋପ୍ଉତ୍ତର ୟୁରୋପ୍ପଶ୍" + + "ଚିମ ୟୁରୋପ୍ଲାଟିନ୍ ଆମେରିକା ଏବଂ କାରିବିଆନ୍", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0015, 0x004d, 0x0074, 0x00ac, 0x00ca, 0x00df, + 0x00f7, 0x010c, 0x012d, 0x014e, 0x0179, 0x0191, 0x01af, 0x01be, + 0x01ef, 0x0210, 0x024b, 0x0266, 0x0287, 0x029f, 0x02c4, 0x02dc, + 0x02f4, 0x030c, 0x031e, 0x034c, 0x035e, 0x0373, 0x0385, 0x0385, + 0x039d, 0x03b5, 0x03c7, 0x03f8, 0x0413, 0x042b, 0x043d, 0x044f, + 0x0480, 0x04a5, 0x04e3, 0x0517, 0x053e, 0x055d, 0x0588, 0x059a, + 0x05b2, 0x05be, 0x05d6, 0x05d6, 0x05f5, 0x0607, 0x0623, 0x0623, + 0x065d, 0x0675, 0x06a6, 0x06bb, 0x06bb, 0x06cd, 0x06e5, 0x06fd, + // Entry 40 - 7F + 0x073a, 0x074f, 0x074f, 0x076a, 0x0782, 0x0794, 0x07b9, 0x07d4, + 0x07e6, 0x07fb, 0x082c, 0x082c, 0x084a, 0x0856, 0x0896, 0x08ba, + 0x08e8, 0x08fd, 0x090f, 0x0927, 0x093f, 0x0951, 0x0976, 0x098e, + 0x099a, 0x09bb, 0x09df, 0x09f4, 0x0a06, 0x0a1e, 0x0a55, 0x0a67, + 0x0ae4, 0x0afc, 0x0b0b, 0x0b2d, 0x0b3c, 0x0b97, 0x0c10, 0x0c2e, + 0x0c46, 0x0c55, 0x0c6a, 0x0c6a, 0x0c88, 0x0ca6, 0x0cbe, 0x0ce1, + 0x0ced, 0x0d4a, 0x0d59, 0x0d68, 0x0d86, 0x0d95, 0x0da4, 0x0db9, + 0x0dd1, 0x0de3, 0x0df5, 0x0e1c, 0x0e37, 0x0e4f, 0x0e64, 0x0ea3, + // Entry 80 - BF + 0x0ec2, 0x0ee4, 0x0ef3, 0x0f2a, 0x0f4e, 0x0f5d, 0x0f72, 0x0f91, + 0x0fb8, 0x0fd3, 0x0fe8, 0x0ffa, 0x1012, 0x1030, 0x1042, 0x1051, + 0x1069, 0x107b, 0x1090, 0x10ab, 0x10d3, 0x10f4, 0x1128, 0x1143, + 0x114f, 0x1167, 0x117f, 0x119f, 0x11e3, 0x1207, 0x1225, 0x1246, + 0x1258, 0x126d, 0x1285, 0x1294, 0x12ac, 0x12c1, 0x12e5, 0x12fa, + 0x1322, 0x1334, 0x1359, 0x1371, 0x138c, 0x13ad, 0x13b9, 0x13c8, + 0x13d7, 0x13e0, 0x1401, 0x1410, 0x1422, 0x142e, 0x145c, 0x1488, + 0x14a6, 0x14c1, 0x14d6, 0x151e, 0x153c, 0x1564, 0x1585, 0x15a6, + // Entry C0 - FF + 0x15b5, 0x15ca, 0x15d9, 0x1601, 0x161c, 0x1631, 0x1643, 0x1652, + 0x166a, 0x1689, 0x16bd, 0x16d2, 0x16e4, 0x16fc, 0x171a, 0x173c, + 0x1757, 0x179c, 0x17b7, 0x17d6, 0x17f5, 0x180d, 0x1822, 0x1837, + 0x1837, 0x1873, 0x1898, 0x1898, 0x18a7, 0x18c8, 0x18c8, 0x1919, + 0x1925, 0x195d, 0x1969, 0x1981, 0x19a5, 0x19ba, 0x19dc, 0x1a09, + 0x1a1e, 0x1a30, 0x1a42, 0x1a7d, 0x1a8f, 0x1aa4, 0x1abf, 0x1ada, + 0x1aef, 0x1b68, 0x1b68, 0x1ba3, 0x1bb5, 0x1bd9, 0x1bf1, 0x1c49, + 0x1c61, 0x1cae, 0x1cf2, 0x1d0a, 0x1d1f, 0x1d4e, 0x1d5d, 0x1d5d, + // Entry 100 - 13F + 0x1d6f, 0x1d81, 0x1da9, 0x1dbe, 0x1dd6, 0x1e15, 0x1e24, 0x1e39, + 0x1e5e, 0x1e86, 0x1e9e, 0x1ec6, 0x1ee8, 0x1f0d, 0x1f32, 0x1f54, + 0x1f85, 0x1fa0, 0x1fce, 0x1fe9, 0x2005, 0x2024, 0x2053, 0x2078, + 0x20c8, 0x20e3, 0x211d, 0x2135, 0x2141, 0x215a, 0x2179, 0x218b, + 0x21ad, 0x21cf, 0x21f4, 0x2242, + }, + }, + { // os + "БразилиКитайГерманФранцСтыр БританиГуырдзыстонИндиИталиЯпонУӕрӕсеАИШНӕзо" + + "нгӕ бӕстӕДунеАфрикӕОкеаниАмерикӕАзиЕвропӕ", + []uint16{ // 288 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + // Entry 40 - 7F + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + 0x0024, 0x002e, 0x002e, 0x0045, 0x0045, 0x005b, 0x005b, 0x005b, + 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, + 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, + 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x006d, 0x006d, 0x006d, + 0x006d, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + // Entry 80 - BF + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + // Entry C0 - FF + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + // Entry 100 - 13F + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x00a0, 0x00a8, 0x00b4, + 0x00b4, 0x00b4, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, + 0x00c0, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00d4, 0x00d4, 0x00d4, 0x00e0, + }, + }, + { // pa + paRegionStr, + paRegionIdx, + }, + { // pa-Arab + "پاکستان", + []uint16{ // 186 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000e, + }, + }, + { // pl + plRegionStr, + plRegionIdx, + }, + {}, // prg + { // ps + "افغانستانالبانیهانګولاانتارکتیکااتریشبنګله\u200cدیشبلغاریهکاناډاسویسچینک" + + "ولمبیاکیوباالمانډنمارکالجزایرمصرهسپانیهحبشهفنلینډفرانسهبرتانیهګاناګ" + + "یانایونانګواتیمالاهانډوراسمجارستاناندونیزیاهندعراقآیسلینډایټالیهجمی" + + "کاجاپانکمبودیاکویټلاوسلبنانلایبریالیبیامراکشمغولستانمالیزیانایجیریا" + + "نکاراګواهالېنډناروۍنیپالنیوزیلنډپاکستانپولنډفلسطینپورتګالروسیهروندا" + + "سعودی عربستانسویډنسالوېډورسوریهتاجکستانتنزانیایوروګواییمن", + []uint16{ // 257 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0012, 0x0020, + 0x0020, 0x002c, 0x0040, 0x0040, 0x0040, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x005d, 0x005d, 0x005d, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x007f, 0x007f, 0x007f, 0x007f, + 0x007f, 0x0085, 0x0093, 0x0093, 0x0093, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x00a7, 0x00a7, 0x00a7, 0x00b3, 0x00b3, + // Entry 40 - 7F + 0x00b3, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c7, 0x00c7, 0x00c7, + 0x00d5, 0x00dd, 0x00dd, 0x00dd, 0x00e9, 0x00e9, 0x00e9, 0x00e9, + 0x00e9, 0x00f5, 0x00f5, 0x0103, 0x0103, 0x0103, 0x0103, 0x0103, + 0x010b, 0x010b, 0x010b, 0x010b, 0x0115, 0x0115, 0x0115, 0x011f, + 0x011f, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0141, + 0x0141, 0x0141, 0x0151, 0x0151, 0x0163, 0x0163, 0x0163, 0x0163, + 0x0169, 0x0169, 0x0171, 0x0171, 0x017f, 0x018d, 0x018d, 0x0197, + 0x0197, 0x01a1, 0x01a1, 0x01a1, 0x01af, 0x01af, 0x01af, 0x01af, + // Entry 80 - BF + 0x01af, 0x01af, 0x01b7, 0x01b7, 0x01b7, 0x01bf, 0x01c9, 0x01c9, + 0x01c9, 0x01c9, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01e1, + 0x01eb, 0x01eb, 0x01eb, 0x01eb, 0x01eb, 0x01eb, 0x01eb, 0x01eb, + 0x01eb, 0x01eb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, + 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x0209, 0x0209, 0x0209, + 0x0209, 0x0209, 0x0209, 0x0219, 0x0229, 0x0235, 0x023f, 0x0249, + 0x0249, 0x0249, 0x0259, 0x0259, 0x0259, 0x0259, 0x0259, 0x0259, + 0x0259, 0x0267, 0x0271, 0x0271, 0x0271, 0x0271, 0x027d, 0x028b, + // Entry C0 - FF + 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x0295, + 0x029f, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02c2, 0x02c2, 0x02c2, + 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, + 0x02c2, 0x02c2, 0x02d2, 0x02d2, 0x02dc, 0x02dc, 0x02dc, 0x02dc, + 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02ec, 0x02ec, 0x02ec, 0x02ec, + 0x02ec, 0x02ec, 0x02ec, 0x02ec, 0x02ec, 0x02ec, 0x02fa, 0x02fa, + 0x02fa, 0x02fa, 0x02fa, 0x02fa, 0x030a, 0x030a, 0x030a, 0x030a, + 0x030a, 0x030a, 0x030a, 0x030a, 0x030a, 0x030a, 0x030a, 0x030a, + // Entry 100 - 13F + 0x0310, + }, + }, + { // pt + ptRegionStr, + ptRegionIdx, + }, + { // pt-PT + ptPTRegionStr, + ptPTRegionIdx, + }, + { // qu + "AndorraAfganistánAlbaniaArmeniaAngolaArgentinaSamoa AmericanaAustriaAust" + + "raliaAzerbaiyánBangladeshBélgicaBulgariaBaréinBurundiBenínBrunéiBoli" + + "viaBonaireBrasilBahamasButánBotsuanaBelarúsIslas CocosCongo (RDC)Con" + + "goSuizaCôte d’IvoireChileCamerúnChinaColombiaCosta RicaCubaCurazaoIs" + + "la ChristmasChipreAlemaniaYibutiDinamarcaDominicaArgeliaEcuadorEston" + + "iaEgiptoEritreaEspañaEtiopíaFinlandiaFiyiMicronesiaFranciaGabónReino" + + " UnidoGuerneseyGhanaGambiaGuineaGuinea EcuatorialGreciaGuatemalaGuam" + + "Guinea-BisáuGuyanaHong Kong (RAE)Islas Heard y McDonaldHondurasCroac" + + "iaHaitíIndonesiaIsraelIndiaIrakIránIslandiaItaliaJerseyJordaniaKenia" + + "KirguistánCamboyaKiribatiComorasSan Cristóbal y NievesCorea del Nort" + + "eCorea del SurKuwaitKazajistánLaosLíbanoLiechtensteinSri LankaLiberi" + + "aLesotoLituaniaLuxemburgoLetoniaMarruecosMónacoMoldovaSan MartínMada" + + "gascarIslas MarshallERY MacedoniaMalíMyanmarMacao RAEIslas Marianas " + + "del NorteMauritaniaMaltaMauricioMaldivasMalawiMéxicoMozambiqueNamibi" + + "aNueva CaledoniaNígerIsla NorfolkNigeriaNicaraguaPaíses BajosNoruega" + + "NepalNauruOmánPanamáPerúPolinesia FrancesaPapúa Nueva GuineaFilipina" + + "sPakistánPoloniaSan Pedro y MiquelónIslas PitcairnPuerto RicoPalesti" + + "na KamachikuqPortugalPalaosParaguayQatarSerbiaRusiaRuandaArabia Saud" + + "íSeychellesSudánSueciaSingapurEsloveniaEslovaquiaSierra LeonaSan Ma" + + "rinoSenegalSomaliaSurinamSudán del SurSanto Tomé y PríncipeEl Salvad" + + "orSint MaartenSiriaSuazilandiaChadTerritorios Australes FrancesesTog" + + "oTailandiaTayikistánTimor-LesteTúnezTongaTurquíaTrinidad y TobagoTan" + + "zaniaUgandaIslas menores alejadas de los EE.UU.Estados UnidosUruguay" + + "UzbekistánSanta Sede (Ciudad del Vaticano)VenezuelaEE.UU. Islas Vírg" + + "enesVietnamVanuatuWallis y FutunaSamoaYemenSudáfricaZambiaZimbabue", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0007, 0x0012, 0x0012, 0x0012, 0x0019, + 0x0020, 0x0026, 0x0026, 0x002f, 0x003e, 0x0045, 0x004e, 0x004e, + 0x004e, 0x0059, 0x0059, 0x0059, 0x0063, 0x006b, 0x006b, 0x0073, + 0x007a, 0x0081, 0x0087, 0x0087, 0x0087, 0x008e, 0x0095, 0x009c, + 0x00a2, 0x00a9, 0x00af, 0x00af, 0x00b7, 0x00bf, 0x00bf, 0x00bf, + 0x00ca, 0x00d5, 0x00d5, 0x00da, 0x00df, 0x00ef, 0x00ef, 0x00f4, + 0x00fc, 0x0101, 0x0109, 0x0109, 0x0113, 0x0117, 0x0117, 0x011e, + 0x012c, 0x0132, 0x0132, 0x013a, 0x013a, 0x0140, 0x0149, 0x0151, + // Entry 40 - 7F + 0x0151, 0x0158, 0x0158, 0x015f, 0x0166, 0x016c, 0x016c, 0x0173, + 0x017a, 0x0182, 0x0182, 0x0182, 0x018b, 0x018f, 0x018f, 0x0199, + 0x0199, 0x01a0, 0x01a6, 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01ba, + 0x01bf, 0x01bf, 0x01bf, 0x01c5, 0x01cb, 0x01cb, 0x01dc, 0x01e2, + 0x01e2, 0x01eb, 0x01ef, 0x01fc, 0x0202, 0x0211, 0x0227, 0x022f, + 0x0236, 0x023c, 0x023c, 0x023c, 0x0245, 0x0245, 0x024b, 0x024b, + 0x0250, 0x0250, 0x0254, 0x0259, 0x0261, 0x0267, 0x026d, 0x026d, + 0x0275, 0x0275, 0x027a, 0x0285, 0x028c, 0x0294, 0x029b, 0x02b2, + // Entry 80 - BF + 0x02c1, 0x02ce, 0x02d4, 0x02d4, 0x02df, 0x02e3, 0x02ea, 0x02ea, + 0x02f7, 0x0300, 0x0307, 0x030d, 0x0315, 0x031f, 0x0326, 0x0326, + 0x032f, 0x0336, 0x033d, 0x033d, 0x0348, 0x0352, 0x0360, 0x036d, + 0x0372, 0x0379, 0x0379, 0x0382, 0x039a, 0x039a, 0x03a4, 0x03a4, + 0x03a9, 0x03b1, 0x03b9, 0x03bf, 0x03c6, 0x03c6, 0x03d0, 0x03d7, + 0x03e6, 0x03ec, 0x03f8, 0x03ff, 0x0408, 0x0415, 0x041c, 0x0421, + 0x0426, 0x0426, 0x0426, 0x042b, 0x0432, 0x0437, 0x0449, 0x045c, + 0x0465, 0x046e, 0x0475, 0x048a, 0x0498, 0x04a3, 0x04b7, 0x04bf, + // Entry C0 - FF + 0x04c5, 0x04cd, 0x04d2, 0x04d2, 0x04d2, 0x04d2, 0x04d8, 0x04dd, + 0x04e3, 0x04f0, 0x04f0, 0x04fa, 0x0500, 0x0506, 0x050e, 0x050e, + 0x0517, 0x0517, 0x0521, 0x052d, 0x0537, 0x053e, 0x0545, 0x054c, + 0x055a, 0x0571, 0x057c, 0x0588, 0x058d, 0x0598, 0x0598, 0x0598, + 0x059c, 0x05bb, 0x05bf, 0x05c8, 0x05d3, 0x05d3, 0x05de, 0x05de, + 0x05e4, 0x05e9, 0x05f1, 0x0602, 0x0602, 0x0602, 0x060a, 0x060a, + 0x0610, 0x0634, 0x0634, 0x0642, 0x0649, 0x0654, 0x0674, 0x0674, + 0x067d, 0x067d, 0x0693, 0x069a, 0x06a1, 0x06b0, 0x06b5, 0x06b5, + // Entry 100 - 13F + 0x06ba, 0x06ba, 0x06c4, 0x06ca, 0x06d2, + }, + }, + { // rm + "AndorraEmirats Arabs UnidsAfghanistanAntigua e BarbudaAnguillaAlbaniaArm" + + "eniaAngolaAntarcticaArgentiniaSamoa AmericanaAustriaAustraliaArubaIn" + + "slas AlandAserbaidschanBosnia ed ErzegovinaBarbadosBangladeschBelgia" + + "Burkina FasoBulgariaBahrainBurundiBeninSon BarthélemyBermudasBruneiB" + + "oliviaBrasilaBahamasBhutanInsla BouvetBotswanaBielorussiaBelizeCanad" + + "aInslas CocosRepublica Democratica dal CongoRepublica Centralafrican" + + "aCongoSvizraCosta d’IvurInslas CookChileCamerunChinaColumbiaCosta Ri" + + "caCubaCap VerdInsla da ChristmasCipraRepublica TschecaGermaniaDschib" + + "utiDanemarcDominicaRepublica DominicanaAlgeriaEcuadorEstoniaEgiptaSa" + + "hara OccidentalaEritreaSpagnaEtiopiaUniun europeicaFinlandaFidschiIn" + + "slas dal FalklandMicronesiaInslas FeroeFrantschaGabunReginavel UnìGr" + + "enadaGeorgiaGuyana FranzosaGuernseyGhanaGibraltarGrönlandaGambiaGuin" + + "eaGuadeloupeGuinea EquatorialaGreziaGeorgia dal Sid e las Inslas San" + + "dwich dal SidGuatemalaGuamGuinea-BissauGuyanaRegiun d’administraziun" + + " speziala da Hongkong, ChinaInslas da Heard e da McDonladHondurasCro" + + "aziaHaitiUngariaIndonesiaIrlandaIsraelInsla da ManIndiaTerritori Bri" + + "tannic en l’Ocean IndicIracIranIslandaItaliaJerseyGiamaicaJordaniaGi" + + "apunKeniaKirghisistanCambodschaKiribatiComorasSaint Kitts e NevisCor" + + "ea dal NordCorea dal SidKuwaitInslas CaymanKasachstanLaosLibanonSain" + + "t LuciaLiechtensteinSri LankaLiberiaLesothoLituaniaLuxemburgLettonia" + + "LibiaMarocMonacoMoldaviaMontenegroSaint MartinMadagascarInslas da Ma" + + "rshallMacedoniaMaliMyanmarMongoliaRegiun d’administraziun speziala M" + + "acao, ChinaInslas Mariannas dal NordMartiniqueMauretaniaMontserratMa" + + "ltaMauritiusMaldivasMalawiMexicoMalaisiaMosambicNamibiaNova Caledoni" + + "aNigerInsla NorfolkNigeriaNicaraguaPajais BassNorvegiaNepalNauruNiue" + + "Nova ZelandaOmanPanamaPeruPolinesia FranzosaPapua Nova GuineaFilippi" + + "nasPakistanPolognaSaint Pierre e MiquelonPitcairnPuerto RicoTerritor" + + "i PalestinaisPortugalPalauParaguaiKatarOceania PerifericaRéunionRume" + + "niaSerbiaRussiaRuandaArabia SauditaSalomonasSeychellasSudanSveziaSin" + + "gapurSontg’ElenaSloveniaSvalbard e Jan MayenSlovachiaSierra LeoneSan" + + " MarinoSenegalSomaliaSurinamSão Tomé e PrincipeEl SalvadorSiriaSwazi" + + "landInslas Turks e CaicosTschadTerritoris Franzos MeridiunalsTogoTai" + + "landaTadschikistanTokelauTimor da l’OstTurkmenistanTunesiaTongaTirch" + + "iaTrinidad e TobagoTuvaluTaiwanTansaniaUcrainaUgandaInslas pitschnas" + + " perifericas dals Stadis Unids da l’AmericaStadis Unids da l’America" + + "UruguayUsbekistanCitad dal VaticanSaint Vincent e las GrenadinasVene" + + "zuelaInslas Verginas BritannicasInslas Verginas AmericanasVietnamVan" + + "uatuWallis e FutunaSamoaJemenMayotteAfrica dal SidSambiaSimbabweRegi" + + "un betg encouschenta u nunvalaivlamundAfricaAmerica dal NordAmerica " + + "dal SidOceaniaAfrica dal VestAmerica CentralaAfrica da l’OstAfrica d" + + "al NordAfrica CentralaAfrica MeridiunalaAmerica dal Nord, America Ce" + + "ntrala ed America dal SidCaribicaAsia da l’OstAsia dal SidAsia dal S" + + "idostEuropa dal SidAustralia e Nova ZelandaMelanesiaRegiun Micronesi" + + "caPolinesiaAsiaAsia CentralaAsia dal VestEuropaEuropa OrientalaEurop" + + "a dal NordEuropa dal VestAmerica Latina", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x001a, 0x0025, 0x0036, 0x003e, 0x0045, + 0x004c, 0x0052, 0x005c, 0x0066, 0x0075, 0x007c, 0x0085, 0x008a, + 0x0096, 0x00a3, 0x00b7, 0x00bf, 0x00ca, 0x00d0, 0x00dc, 0x00e4, + 0x00eb, 0x00f2, 0x00f7, 0x0106, 0x010e, 0x0114, 0x011b, 0x011b, + 0x0122, 0x0129, 0x012f, 0x013b, 0x0143, 0x014e, 0x0154, 0x015a, + 0x0166, 0x0185, 0x019e, 0x01a3, 0x01a9, 0x01b7, 0x01c2, 0x01c7, + 0x01ce, 0x01d3, 0x01db, 0x01db, 0x01e5, 0x01e9, 0x01f1, 0x01f1, + 0x0203, 0x0208, 0x0219, 0x0221, 0x0221, 0x022a, 0x0232, 0x023a, + // Entry 40 - 7F + 0x024e, 0x0255, 0x0255, 0x025c, 0x0263, 0x0269, 0x027b, 0x0282, + 0x0288, 0x028f, 0x029e, 0x029e, 0x02a6, 0x02ad, 0x02c0, 0x02ca, + 0x02d6, 0x02df, 0x02e4, 0x02f2, 0x02f9, 0x0300, 0x030f, 0x0317, + 0x031c, 0x0325, 0x032f, 0x0335, 0x033b, 0x0345, 0x0357, 0x035d, + 0x038a, 0x0393, 0x0397, 0x03a4, 0x03aa, 0x03df, 0x03fc, 0x0404, + 0x040b, 0x0410, 0x0417, 0x0417, 0x0420, 0x0427, 0x042d, 0x0439, + 0x043e, 0x0464, 0x0468, 0x046c, 0x0473, 0x0479, 0x047f, 0x0487, + 0x048f, 0x0495, 0x049a, 0x04a6, 0x04b0, 0x04b8, 0x04bf, 0x04d2, + // Entry 80 - BF + 0x04e0, 0x04ed, 0x04f3, 0x0500, 0x050a, 0x050e, 0x0515, 0x0520, + 0x052d, 0x0536, 0x053d, 0x0544, 0x054c, 0x0555, 0x055d, 0x0562, + 0x0567, 0x056d, 0x0575, 0x057f, 0x058b, 0x0595, 0x05a7, 0x05b0, + 0x05b4, 0x05bb, 0x05c3, 0x05f2, 0x060b, 0x0615, 0x061f, 0x0629, + 0x062e, 0x0637, 0x063f, 0x0645, 0x064b, 0x0653, 0x065b, 0x0662, + 0x0670, 0x0675, 0x0682, 0x0689, 0x0692, 0x069d, 0x06a5, 0x06aa, + 0x06af, 0x06b3, 0x06bf, 0x06c3, 0x06c9, 0x06cd, 0x06df, 0x06f0, + 0x06fa, 0x0702, 0x0709, 0x0720, 0x0728, 0x0733, 0x0748, 0x0750, + // Entry C0 - FF + 0x0755, 0x075d, 0x0762, 0x0774, 0x077c, 0x0783, 0x0789, 0x078f, + 0x0795, 0x07a3, 0x07ac, 0x07b6, 0x07bb, 0x07c1, 0x07c9, 0x07d6, + 0x07de, 0x07f2, 0x07fb, 0x0807, 0x0811, 0x0818, 0x081f, 0x0826, + 0x0826, 0x083b, 0x0846, 0x0846, 0x084b, 0x0854, 0x0854, 0x0869, + 0x086f, 0x088d, 0x0891, 0x0899, 0x08a6, 0x08ad, 0x08bd, 0x08c9, + 0x08d0, 0x08d5, 0x08dc, 0x08ed, 0x08f3, 0x08f9, 0x0901, 0x0908, + 0x090e, 0x094b, 0x094b, 0x0966, 0x096d, 0x0977, 0x0988, 0x09a6, + 0x09af, 0x09ca, 0x09e4, 0x09eb, 0x09f2, 0x0a01, 0x0a06, 0x0a06, + // Entry 100 - 13F + 0x0a0b, 0x0a12, 0x0a20, 0x0a26, 0x0a2e, 0x0a54, 0x0a58, 0x0a5e, + 0x0a6e, 0x0a7d, 0x0a84, 0x0a93, 0x0aa3, 0x0ab4, 0x0ac3, 0x0ad2, + 0x0ae4, 0x0b19, 0x0b19, 0x0b21, 0x0b30, 0x0b3c, 0x0b4b, 0x0b59, + 0x0b71, 0x0b7a, 0x0b8c, 0x0b95, 0x0b99, 0x0ba6, 0x0bb3, 0x0bb9, + 0x0bc9, 0x0bd8, 0x0be7, 0x0bf5, + }, + }, + { // rn + "AndoraLeta Zunze Ubumwe z’AbarabuAfuganisitaniAntigwa na BaribudaAngwila" + + "AlubaniyaArumeniyaAngolaArijantineSamowa nyamerikaOtirisheOsitaraliy" + + "aArubaAzerubayijaniBosiniya na HerigozevineBarubadosiBangaladeshiUbu" + + "biligiBurukina FasoBuligariyaBahareyiniUburundiBeneBerimudaBuruneyiB" + + "oliviyaBureziliBahamasiButaniBotswanaBelausiBelizeKanadaRepubulika I" + + "haranira Demokarasi ya KongoRepubulika ya SantarafurikaKongoUbusuwis" + + "iKotedivuwareIzinga rya KukuShiliKameruniUbushinwaKolombiyaKositarik" + + "aKibaIbirwa bya KapuveriIzinga rya ShipureRepubulika ya CekeUbudageJ" + + "ibutiDanimarikiDominikaRepubulika ya DominikaAlijeriyaEkwateriEsiton" + + "iyaMisiriElitereyaHisipaniyaEtiyopiyaFinilandiFijiIzinga rya Filikil" + + "andiMikoroniziyaUbufaransaGaboUbwongerezaGerenadaJeworujiyaGwayana y" + + "’AbafaransaGanaJuburalitariGurunilandiGambiyaGuneyaGwadelupeGineya" + + " EkwatoriyaliUbugerekiGwatemalaGwamuGineya BisawuGuyaneHondurasiKoro" + + "wasiyaHayitiHungariyaIndoneziyaIrilandiIsiraheliUbuhindiIntara y’Ubw" + + "ongereza yo mu birwa by’AbahindiIrakiIraniAyisilandiUbutaliyaniJamay" + + "ikaYorudaniyaUbuyapaniKenyaKirigisitaniKambojeKiribatiIzinga rya Kom" + + "oreSekitsi na NevisiKoreya y’amajaruguruKoreya y’amajepfoKowetiIbirw" + + "a bya KeyimaniKazakisitaniLayosiLibaniSelusiyaLishyitenshitayiniSiri" + + "lankaLiberiyaLesotoLituwaniyaLukusamburuLativaLibiyaMarokeMonakoMolu" + + "daviMadagasikariIzinga rya MarishariMasedoniyaMaliBirimaniyaMongoliy" + + "aAmazinga ya Mariyana ryo mu majaruguruMaritinikiMoritaniyaMontesera" + + "tiMalitaIzinga rya MoriseMoludaveMalawiMigizikeMaleziyaMozambikiNami" + + "biyaNiyukaledoniyaNijeriizinga rya NorufolukeNijeriyaNikaragwaUbuhol" + + "andiNoruvejiNepaliNawuruNiyuweNuvelizelandiOmaniPanamaPeruPolineziya" + + " y’AbafaransaPapuwa NiyugineyaAmazinga ya FilipinePakisitaniPolonyeS" + + "empiyeri na MikeloniPitikeyiriniPuwetorikoPalesitina Wesitibanka na " + + "GazaPorutugaliPalawuParagweKatariAmazinga ya ReyiniyoRumaniyaUburusi" + + "yau RwandaArabiya SawuditeAmazinga ya SalumoniAmazinga ya SeyisheliS" + + "udaniSuwediSingapuruSeheleneSiloveniyaSilovakiyaSiyeralewoneSanimari" + + "noSenegaliSomaliyaSurinameSawotome na PerensipeEli SaluvatoriSiriyaS" + + "uwazilandiAmazinga ya Turkisi na CayikosiCadiTogoTayilandiTajikisita" + + "niTokelawuTimoru y’iburasirazubaTurukumenisitaniTuniziyaTongaTurukiy" + + "aTirinidadi na TobagoTuvaluTayiwaniTanzaniyaIkereneUbugandeLeta Zunz" + + "e Ubumwe za AmerikaIrigweUzubekisitaniUmurwa wa VatikaniSevensa na G" + + "erenadineVenezuwelaIbirwa by’isugi by’AbongerezaAmazinga y’Isugi y’A" + + "banyamerikaViyetinamuVanuwatuWalisi na FutunaSamowaYemeniMayoteAfuri" + + "ka y’EpfoZambiyaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0023, 0x0030, 0x0043, 0x004a, 0x0053, + 0x005c, 0x0062, 0x0062, 0x006c, 0x007c, 0x0084, 0x008f, 0x0094, + 0x0094, 0x00a1, 0x00b9, 0x00c3, 0x00cf, 0x00d8, 0x00e5, 0x00ef, + 0x00f9, 0x0101, 0x0105, 0x0105, 0x010d, 0x0115, 0x011d, 0x011d, + 0x0125, 0x012d, 0x0133, 0x0133, 0x013b, 0x0142, 0x0148, 0x014e, + 0x014e, 0x0176, 0x0191, 0x0196, 0x019f, 0x01ab, 0x01ba, 0x01bf, + 0x01c7, 0x01d0, 0x01d9, 0x01d9, 0x01e3, 0x01e7, 0x01fa, 0x01fa, + 0x01fa, 0x020c, 0x021e, 0x0225, 0x0225, 0x022b, 0x0235, 0x023d, + // Entry 40 - 7F + 0x0253, 0x025c, 0x025c, 0x0264, 0x026d, 0x0273, 0x0273, 0x027c, + 0x0286, 0x028f, 0x028f, 0x028f, 0x0298, 0x029c, 0x02b2, 0x02be, + 0x02be, 0x02c8, 0x02cc, 0x02d7, 0x02df, 0x02e9, 0x02ff, 0x02ff, + 0x0303, 0x030f, 0x031a, 0x0321, 0x0327, 0x0330, 0x0343, 0x034c, + 0x034c, 0x0355, 0x035a, 0x0367, 0x036d, 0x036d, 0x036d, 0x0376, + 0x0380, 0x0386, 0x038f, 0x038f, 0x0399, 0x03a1, 0x03aa, 0x03aa, + 0x03b2, 0x03e2, 0x03e7, 0x03ec, 0x03f6, 0x0401, 0x0401, 0x0409, + 0x0413, 0x041c, 0x0421, 0x042d, 0x0434, 0x043c, 0x044d, 0x045e, + // Entry 80 - BF + 0x0474, 0x0487, 0x048d, 0x04a0, 0x04ac, 0x04b2, 0x04b8, 0x04c0, + 0x04d2, 0x04db, 0x04e3, 0x04e9, 0x04f3, 0x04fe, 0x0504, 0x050a, + 0x0510, 0x0516, 0x051e, 0x051e, 0x051e, 0x052a, 0x053e, 0x0548, + 0x054c, 0x0556, 0x055f, 0x055f, 0x0585, 0x058f, 0x0599, 0x05a4, + 0x05aa, 0x05bb, 0x05c3, 0x05c9, 0x05d1, 0x05d9, 0x05e2, 0x05ea, + 0x05f8, 0x05fe, 0x0613, 0x061b, 0x0624, 0x062e, 0x0636, 0x063c, + 0x0642, 0x0648, 0x0655, 0x065a, 0x0660, 0x0664, 0x067d, 0x068e, + 0x06a2, 0x06ac, 0x06b3, 0x06c8, 0x06d4, 0x06de, 0x06fc, 0x0706, + // Entry C0 - FF + 0x070c, 0x0713, 0x0719, 0x0719, 0x072d, 0x0735, 0x0735, 0x073e, + 0x0746, 0x0756, 0x076a, 0x077f, 0x0785, 0x078b, 0x0794, 0x079c, + 0x07a6, 0x07a6, 0x07b0, 0x07bc, 0x07c6, 0x07ce, 0x07d6, 0x07de, + 0x07de, 0x07f3, 0x0801, 0x0801, 0x0807, 0x0812, 0x0812, 0x0831, + 0x0835, 0x0835, 0x0839, 0x0842, 0x084e, 0x0856, 0x086e, 0x087e, + 0x0886, 0x088b, 0x0893, 0x08a7, 0x08ad, 0x08b5, 0x08be, 0x08c5, + 0x08cd, 0x08cd, 0x08cd, 0x08e9, 0x08ef, 0x08fc, 0x090e, 0x0923, + 0x092d, 0x094e, 0x0971, 0x097b, 0x0983, 0x0993, 0x0999, 0x0999, + // Entry 100 - 13F + 0x099f, 0x09a5, 0x09b5, 0x09bc, 0x09c4, + }, + }, + { // ro + roRegionStr, + roRegionIdx, + }, + { // ro-MD + "Myanmar", + []uint16{ // 154 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, + }, + }, + { // rof + "AndoroFalme za KiarabuAfuganistaniAntigua na BabudaAnguilaAlbaniaAmeniaA" + + "ngoloAjentinaSamoa ya MarekaniOstriaAustraliaArubaAzabajaniBosnia na" + + " HezegovinaBabadoBangladeshiUbelgijiBukinafasoBulgariaBahareniBurund" + + "iBeniniBermudaBruneiBoliviaBraziliBahamasiButaniBotswanaBelarusiBeli" + + "zeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya KatiKon" + + "goUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarikaKub" + + "aKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJamhur" + + "i ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfiniFi" + + "jiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJojiaGw" + + "iyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekwetaU" + + "girikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaIndon" + + "esiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIrakiUa" + + "jemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodiaKiri" + + "batiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiVisiw" + + "a vya KaimaiKazakistaniLaosiLebanoniSantalusiaLishenteniSirilankaLib" + + "eriaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukiniVisi" + + "wa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya Kaska" + + "ziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoMales" + + "iaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikaragwa" + + "UholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia ya Uf" + + "aransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkairniPw" + + "etorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPalauP" + + "aragwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonSheli" + + "sheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniSamar" + + "inoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaziVis" + + "iwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori ya M" + + "asharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuvaluTa" + + "iwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSantavi" + + "senti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa vya" + + " Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMayott" + + "eAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0033, 0x003a, 0x0041, + 0x0047, 0x004d, 0x004d, 0x0055, 0x0066, 0x006c, 0x0075, 0x007a, + 0x007a, 0x0083, 0x0097, 0x009d, 0x00a8, 0x00b0, 0x00ba, 0x00c2, + 0x00ca, 0x00d1, 0x00d7, 0x00d7, 0x00de, 0x00e4, 0x00eb, 0x00eb, + 0x00f2, 0x00fa, 0x0100, 0x0100, 0x0108, 0x0110, 0x0116, 0x011c, + 0x011c, 0x013c, 0x0155, 0x015a, 0x0160, 0x0167, 0x0176, 0x017b, + 0x0183, 0x0188, 0x0190, 0x0190, 0x0199, 0x019d, 0x01a5, 0x01a5, + 0x01a5, 0x01ac, 0x01bc, 0x01c5, 0x01c5, 0x01cb, 0x01d2, 0x01da, + // Entry 40 - 7F + 0x01ed, 0x01f4, 0x01f4, 0x01fa, 0x0201, 0x0206, 0x0206, 0x020d, + 0x0215, 0x021d, 0x021d, 0x021d, 0x0222, 0x0226, 0x0239, 0x0243, + 0x0243, 0x024b, 0x0251, 0x025a, 0x0261, 0x0266, 0x0279, 0x0279, + 0x027e, 0x0286, 0x028f, 0x0295, 0x0299, 0x02a2, 0x02ab, 0x02b2, + 0x02b2, 0x02bb, 0x02bf, 0x02c8, 0x02ce, 0x02ce, 0x02ce, 0x02d7, + 0x02de, 0x02e3, 0x02eb, 0x02eb, 0x02f4, 0x02fc, 0x0303, 0x0303, + 0x0308, 0x032d, 0x0332, 0x0338, 0x0340, 0x0346, 0x0346, 0x034d, + 0x0354, 0x035a, 0x035f, 0x036c, 0x0374, 0x037c, 0x0382, 0x0395, + // Entry 80 - BF + 0x03a4, 0x03b0, 0x03b7, 0x03c8, 0x03d3, 0x03d8, 0x03e0, 0x03ea, + 0x03f4, 0x03fd, 0x0404, 0x040a, 0x0412, 0x041b, 0x0422, 0x0427, + 0x042d, 0x0433, 0x043a, 0x043a, 0x043a, 0x0440, 0x0452, 0x045b, + 0x045f, 0x0464, 0x046c, 0x046c, 0x048c, 0x0495, 0x049e, 0x04a9, + 0x04ae, 0x04b4, 0x04ba, 0x04c0, 0x04c7, 0x04ce, 0x04d6, 0x04dd, + 0x04e9, 0x04ef, 0x0500, 0x0507, 0x0510, 0x0518, 0x051d, 0x0523, + 0x0528, 0x052c, 0x0536, 0x053b, 0x0541, 0x0545, 0x055a, 0x055f, + 0x0567, 0x0570, 0x0577, 0x058d, 0x0596, 0x059f, 0x05d1, 0x05d6, + // Entry C0 - FF + 0x05db, 0x05e3, 0x05e9, 0x05e9, 0x05f2, 0x05f9, 0x05f9, 0x05fe, + 0x0604, 0x0609, 0x061b, 0x0625, 0x062b, 0x0631, 0x0639, 0x0644, + 0x064c, 0x064c, 0x0654, 0x065f, 0x0667, 0x066f, 0x0676, 0x067e, + 0x067e, 0x0692, 0x069a, 0x069a, 0x069f, 0x06a5, 0x06a5, 0x06be, + 0x06c3, 0x06c3, 0x06c7, 0x06cf, 0x06da, 0x06e1, 0x06f4, 0x0703, + 0x070a, 0x070f, 0x0716, 0x0728, 0x072e, 0x0735, 0x073d, 0x0744, + 0x074a, 0x074a, 0x074a, 0x0752, 0x0759, 0x0765, 0x076d, 0x0786, + 0x078f, 0x07ae, 0x07cc, 0x07d5, 0x07dc, 0x07eb, 0x07f0, 0x07f0, + // Entry 100 - 13F + 0x07f6, 0x07fd, 0x080a, 0x0810, 0x0818, + }, + }, + { // ru + ruRegionStr, + ruRegionIdx, + }, + { // ru-UA + "О-в ВознесенияОбъединенные Арабские ЭмиратыО-в БувеЦентрально-Африканска" + + "я РеспубликаО-ва КукаО-в КлиппертонО-в РождестваО-ва Херд и Макдона" + + "льдО-в НорфолкТимор-ЛестеМалые Тихоокеанские Отдаленные Острова США", + []uint16{ // 242 elements + // Entry 0 - 3F + 0x0000, 0x001a, 0x001a, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0060, 0x0060, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, + // Entry 40 - 7F + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + // Entry 80 - BF + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + // Entry C0 - FF + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x0133, 0x0133, + 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, + 0x0133, 0x0183, + }, + }, + { // rw + "RwandaIgitonga", + []uint16{ // 234 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x000e, + }, + }, + { // rwk + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // sah + "БразилияКанаадаЧиилиКытайКуубаЭстонияФинляндияУлуу БританияИрландияМэн а" + + "рыыИсландияДьамаайкаЛитваЛатвияЛиибийэМиэксикэНорвегияАрассыыйаСуда" + + "анШвецияАмерика Холбоһуктаах ШтааттараАан дойдуАапырыкаХотугу Эмиэр" + + "икэСоҕуруу Эмиэрикэ", + []uint16{ // 266 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x0028, + 0x0028, 0x0032, 0x0032, 0x0032, 0x0032, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + // Entry 40 - 7F + 0x003c, 0x003c, 0x003c, 0x003c, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0085, 0x0085, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x00a4, 0x00a4, 0x00a4, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + // Entry 80 - BF + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00c0, 0x00c0, 0x00cc, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00ea, 0x00ea, 0x00ea, 0x00ea, + 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00fa, 0x00fa, + 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, + 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, + // Entry C0 - FF + 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x010c, + 0x010c, 0x010c, 0x010c, 0x010c, 0x0118, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x0124, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, + 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, + // Entry 100 - 13F + 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x016f, 0x017f, + 0x019c, 0x01bb, + }, + }, + { // saq + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // sbp + "AndolaWutwa wa shiyalabuAfuganisitaniAnitiguya ni BalubudaAnguillaAluban" + + "iyaAlimeniyaAngolaAjentinaSamoya ya MalekaniAwusitiliyaAwusitilaliya" + + "AlubaAsabajaniBosiniya ni HesegovinaBabadosiBangiladeshiUbeligijiBuk" + + "inafasoBuligaliyaBahaleniBulundiBeniniBelimudaBuluneyiBoliviyaBulasi" + + "liBahamaButaniBotiswanaBelalusiBeliseKanadaJamuhuli ya Kidemokilasiy" + + "a ya KongoJamuhuli ya Afilika ya PakhatiKongoUswisiKodivayaFigunguli" + + " fya KookiShileKameruniShinaKolombiyaKositalikaKubaKepuvedeKupilosiJ" + + "amuhuli ya ShekiWujelumaniJibutiDenimakiDominikaJamuhuli ya Dominika" + + "AlijeliyaEkwadoEsitoniyaMisiliElitileyaHisipaniyaUhabeshiWufiniFijiF" + + "igunguli fya FokolendiMikilonesiyaWufalansaGaboniUwingelesaGilenadaJ" + + "ojiyaGwiyana ya WufalansaKhanaJibulalitaGilinilandiGambiyaGineGwadel" + + "upeGinekwetaWugilikiGwatemalaGwamuGinebisawuGuyanaHondulasiKolasiyaH" + + "ayitiHungaliyaIndonesiyaAyalandiIsilaeliIndiyaUluvala lwa Uwingelesa" + + " ku Bahali ya HindiIlakiUwajemiAyisilendiItaliyaJamaikaYolodaniJapan" + + "iKenyaKiligisisitaniKambodiyaKilibatiKomoloSantakitisi ni NevisiKole" + + "ya ya luvala lwa KunyamandeKoleya ya KusiniKuwaitiFigunguli ifya Kay" + + "imayiKasakisitaniLayosiLebanoniSantalusiyaLisheniteniSililankaLibeli" + + "yaLesotoLitwaniyaLasembagiLativiyaLibiyaMolokoMonakoMolidovaBukiniFi" + + "gunguli ifya MalishaliMasedoniyaMaliMuyamaMongoliyaFigunguli fya Mal" + + "iyana ifya luvala lwa KunyamandeMalitinikiMolitaniyaMonitiselatiMali" + + "taMolisiModivuMalawiMekisikoMalesiyaMusumbijiNamibiyaNyukaledoniyaNi" + + "jeliShigunguli sha NolifokiNijeliyaNikalagwaWuholansiNolweNepaliNawu" + + "luNiwueNyusilendiOmaniPanamaPeluPolinesiya ya WufalansaPapuwaFilipin" + + "oPakisitaniPolandiSantapieli ni MikeloniPitikailiniPwetolikoMunjema " + + "gwa Kusikha nu Luvala lwa Gasa lwa PalesitWulenoPalawuPalagwayiKatal" + + "iLiyunioniLomaniyaWulusiLwandaSawudiFigunguli fya SolomoniShelisheli" + + "SudaniUswidiSingapooSantahelenaSiloveniyaSilovakiyaSiela LiyoniSamal" + + "inoSenegaliSomaliyaSulinamuSayo Tome ni PilinikipeElisavadoSiliyaUsw" + + "asiFigunguli fya Tuliki ni KaikoShadiTogoTailandiTajikisitaniTokelaw" + + "uTimoli ya kunenaTulukimenisitaniTunisiyaTongaUtulukiTilinidadi ni T" + + "obagoTuvaluTaiwaniTansaniyaYukileiniUgandaMalekaniUlugwayiUsibekisit" + + "aniVatikaniSantavisenti na GilenadiniVenesuelaFigunguli ifya Viligin" + + "iya ifya UwingelesaFigunguli fya Viliginiya ifya MalekaniVietinamuVa" + + "nuatuWalisi ni FutunaSamoyaYemeniMayoteAfilika KusiniSambiyaSimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0018, 0x0025, 0x003a, 0x0042, 0x004b, + 0x0054, 0x005a, 0x005a, 0x0062, 0x0074, 0x007f, 0x008c, 0x0091, + 0x0091, 0x009a, 0x00b0, 0x00b8, 0x00c4, 0x00cd, 0x00d7, 0x00e1, + 0x00e9, 0x00f0, 0x00f6, 0x00f6, 0x00fe, 0x0106, 0x010e, 0x010e, + 0x0116, 0x011c, 0x0122, 0x0122, 0x012b, 0x0133, 0x0139, 0x013f, + 0x013f, 0x0162, 0x0180, 0x0185, 0x018b, 0x0193, 0x01a6, 0x01ab, + 0x01b3, 0x01b8, 0x01c1, 0x01c1, 0x01cb, 0x01cf, 0x01d7, 0x01d7, + 0x01d7, 0x01df, 0x01f0, 0x01fa, 0x01fa, 0x0200, 0x0208, 0x0210, + // Entry 40 - 7F + 0x0224, 0x022d, 0x022d, 0x0233, 0x023c, 0x0242, 0x0242, 0x024b, + 0x0255, 0x025d, 0x025d, 0x025d, 0x0263, 0x0267, 0x027e, 0x028a, + 0x028a, 0x0293, 0x0299, 0x02a3, 0x02ab, 0x02b1, 0x02c5, 0x02c5, + 0x02ca, 0x02d4, 0x02df, 0x02e6, 0x02ea, 0x02f3, 0x02fc, 0x0304, + 0x0304, 0x030d, 0x0312, 0x031c, 0x0322, 0x0322, 0x0322, 0x032b, + 0x0333, 0x0339, 0x0342, 0x0342, 0x034c, 0x0354, 0x035c, 0x035c, + 0x0362, 0x038b, 0x0390, 0x0397, 0x03a1, 0x03a8, 0x03a8, 0x03af, + 0x03b7, 0x03bd, 0x03c2, 0x03d0, 0x03d9, 0x03e1, 0x03e7, 0x03fc, + // Entry 80 - BF + 0x041b, 0x042b, 0x0432, 0x0449, 0x0455, 0x045b, 0x0463, 0x046e, + 0x0479, 0x0482, 0x048a, 0x0490, 0x0499, 0x04a2, 0x04aa, 0x04b0, + 0x04b6, 0x04bc, 0x04c4, 0x04c4, 0x04c4, 0x04ca, 0x04e2, 0x04ec, + 0x04f0, 0x04f6, 0x04ff, 0x04ff, 0x0530, 0x053a, 0x0544, 0x0550, + 0x0556, 0x055c, 0x0562, 0x0568, 0x0570, 0x0578, 0x0581, 0x0589, + 0x0596, 0x059c, 0x05b3, 0x05bb, 0x05c4, 0x05cd, 0x05d2, 0x05d8, + 0x05de, 0x05e3, 0x05ed, 0x05f2, 0x05f8, 0x05fc, 0x0613, 0x0619, + 0x0621, 0x062b, 0x0632, 0x0648, 0x0653, 0x065c, 0x068e, 0x0694, + // Entry C0 - FF + 0x069a, 0x06a3, 0x06a9, 0x06a9, 0x06b2, 0x06ba, 0x06ba, 0x06c0, + 0x06c6, 0x06cc, 0x06e2, 0x06ec, 0x06f2, 0x06f8, 0x0700, 0x070b, + 0x0715, 0x0715, 0x071f, 0x072b, 0x0733, 0x073b, 0x0743, 0x074b, + 0x074b, 0x0762, 0x076b, 0x076b, 0x0771, 0x0777, 0x0777, 0x0794, + 0x0799, 0x0799, 0x079d, 0x07a5, 0x07b1, 0x07b9, 0x07c9, 0x07d9, + 0x07e1, 0x07e6, 0x07ed, 0x0801, 0x0807, 0x080e, 0x0817, 0x0820, + 0x0826, 0x0826, 0x0826, 0x082e, 0x0836, 0x0843, 0x084b, 0x0865, + 0x086e, 0x0897, 0x08bd, 0x08c6, 0x08cd, 0x08dd, 0x08e3, 0x08e3, + // Entry 100 - 13F + 0x08e9, 0x08ef, 0x08fd, 0x0904, 0x090c, + }, + }, + { // se + "AscensionAndorraOvttastuvvan ArábaemiráhtatAfghanistanAntigua ja Barbuda" + + "AnguillaAlbániaArmeniaAngolaAntárktisArgentinaAmerihká SamoaNuortari" + + "ikaAustráliaArubaÅlándaAserbaižanBosnia-HercegovinaBarbadosBanglades" + + "hBelgiaBurkina FasoBulgáriaBahrainBurundiBeninSaint BarthélemyBermud" + + "aBruneiBoliviaBrasilBahamasBhutanBouvet-sullotBotswanaVilges-RuoššaB" + + "elizeKanádaCocos-sullotKongo-KinshasaGaska-Afrihká dásseváldiKongo-B" + + "razzavilleŠveicaElfenbenaridduCook-sullotČiileKamerunKiinnáKolombiaC" + + "lipperton-sullotCosta RicaKubaKap VerdeCuraçaoJuovllat-sullotKyprosČ" + + "eahkkaDuiskaDiego GarciaDjiboutiDánmárkuDominicaDominikána dásseváld" + + "iAlgeriaCeuta ja MelillaEcuadorEstlándaEgyptaOarje-SaháraEritreaSpán" + + "iaEtiopiaEurohpa UniovdnaSuopmaFijisullotFalklandsullotMikronesiaFea" + + "rsullotFrankriikaGabonStuorra-BritánniaGrenadaGeorgiaFrankriikka Gua" + + "yanaGuernseyGhanaGibraltarKalaallit NunaatGámbiaGuineaGuadeloupeEkva" + + "toriála GuineaGreikaLulli Georgia ja Lulli Sandwich-sullotGuatemalaG" + + "uamGuinea-BissauGuyanaHongkongHeard- ja McDonald-sullotHondurasKroát" + + "iaHaitiUngárKanáriasullotIndonesiaIrlándaIsraelMann-sullotIndiaIrakI" + + "ranIslándaItáliaJerseyJamaicaJordániaJapánaKeniaKirgisistanKambodžaK" + + "iribatiKomorosSaint Kitts ja NevisDavvi-KoreaMátta-KoreaKuwaitCayman" + + "-sullotKasakstanLaosLibanonSaint LuciaLiechtensteinSri LankaLiberiaL" + + "esothoLietuvaLuxembourgLátviaLibyaMarokkoMonacoMoldáviaMontenegroFra" + + "nkriikka Saint MartinMadagaskarMarshallsullotMakedoniaMaliBurmaMongo" + + "liaMakáoDavvi-MariánatMartiniqueMauretániaMontserratMáltaMauritiusMa" + + "lediivvatMalawiMeksikoMalesiaMosambikNamibiaOđđa-KaledoniaNigerNorfo" + + "lksullotNigeriaNicaraguaVuolleeatnamatNorgaNepalNauruNiueOđđa-Selánd" + + "aOmanPanamaPeruFrankriikka PolynesiaPapua-Ođđa-GuineaFilippiinnatPak" + + "istanPolenSaint Pierre ja MiquelonPitcairnPuerto RicoPalestinaPortug" + + "álaPalauParaguayQatarRéunionRomániaSerbiaRuoššaRwandaSaudi-ArábiaSa" + + "lomon-sullotSeychellsullotDavvisudanRuoŧŧaSingaporeSaint HelenaSlove" + + "niaSvalbárda ja Jan MayenSlovákiaSierra LeoneSan MarinoSenegalSomáli" + + "aSurinamMáttasudanSão Tomé ja PríncipeEl SalvadorVuolleeatnamat Sain" + + "t MartinSyriaSvazieanaTristan da CunhaTurks ja Caicos-sullotTčadTogo" + + "ThaieanaTažikistanTokelauNuorta-TimorTurkmenistanTunisiaTongaDurkaTr" + + "inidad ja TobagoTuvaluTaiwanTanzániaUkrainaUgandaAmerihká ovttastuvv" + + "an stáhtatUruguayUsbekistanVatikánaSaint Vincent ja GrenadineVenezue" + + "laBrittania Virgin-sullotAOS Virgin-sullotVietnamVanuatuWallis ja Fu" + + "tunaSamoaKosovoJemenMayotteMátta-AfrihkáZambiaZimbabwedovdameahttun " + + "guovlumáilbmiAfrihkkádávvi-Amerihkká ja gaska-Amerihkkámátta-Amerihk" + + "káOseaniaoarji-Afrihkkágaska-Amerihkkánuorta-Afrihkkádavvi-Afrihkkág" + + "aska-Afrihkkámátta-AfrihkkáAmerihkkádávvi-AmerihkkáKaribianuorta-Ási" + + "amátta-Ásiamátta-nuorta-Ásiamátta-EurohpáAustrália ja Ođđa-SelándaMe" + + "lanesiaMikronesia guovllusPolynesiaÁsiagaska-Ásiaoarji-ÁsiaEurohpánu" + + "orta-Eurohpádavvi-Eurohpáoarji-Eurohpálulli-Amerihkká", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002d, 0x0038, 0x004a, 0x0052, 0x005a, + 0x0061, 0x0067, 0x0071, 0x007a, 0x0089, 0x0094, 0x009e, 0x00a3, + 0x00ab, 0x00b6, 0x00c8, 0x00d0, 0x00da, 0x00e0, 0x00ec, 0x00f5, + 0x00fc, 0x0103, 0x0108, 0x0119, 0x0120, 0x0126, 0x012d, 0x012d, + 0x0133, 0x013a, 0x0140, 0x014d, 0x0155, 0x0164, 0x016a, 0x0171, + 0x017d, 0x018b, 0x01a6, 0x01b7, 0x01be, 0x01cc, 0x01d7, 0x01dd, + 0x01e4, 0x01eb, 0x01f3, 0x0204, 0x020e, 0x0212, 0x021b, 0x0223, + 0x0232, 0x0238, 0x0240, 0x0246, 0x0252, 0x025a, 0x0264, 0x026c, + // Entry 40 - 7F + 0x0284, 0x028b, 0x029b, 0x02a2, 0x02ab, 0x02b1, 0x02be, 0x02c5, + 0x02cc, 0x02d3, 0x02e3, 0x02e3, 0x02e9, 0x02f3, 0x0301, 0x030b, + 0x0315, 0x031f, 0x0324, 0x0336, 0x033d, 0x0344, 0x0357, 0x035f, + 0x0364, 0x036d, 0x037d, 0x0384, 0x038a, 0x0394, 0x03a7, 0x03ad, + 0x03d3, 0x03dc, 0x03e0, 0x03ed, 0x03f3, 0x03fb, 0x0414, 0x041c, + 0x0424, 0x0429, 0x042f, 0x043d, 0x0446, 0x044e, 0x0454, 0x045f, + 0x0464, 0x0464, 0x0468, 0x046c, 0x0474, 0x047b, 0x0481, 0x0488, + 0x0491, 0x0498, 0x049d, 0x04a8, 0x04b1, 0x04b9, 0x04c0, 0x04d4, + // Entry 80 - BF + 0x04df, 0x04eb, 0x04f1, 0x04fe, 0x0507, 0x050b, 0x0512, 0x051d, + 0x052a, 0x0533, 0x053a, 0x0541, 0x0548, 0x0552, 0x0559, 0x055e, + 0x0565, 0x056b, 0x0574, 0x057e, 0x0596, 0x05a0, 0x05ae, 0x05b7, + 0x05bb, 0x05c0, 0x05c8, 0x05ce, 0x05dd, 0x05e7, 0x05f2, 0x05fc, + 0x0602, 0x060b, 0x0616, 0x061c, 0x0623, 0x062a, 0x0632, 0x0639, + 0x0649, 0x064e, 0x065b, 0x0662, 0x066b, 0x0679, 0x067e, 0x0683, + 0x0688, 0x068c, 0x069b, 0x069f, 0x06a5, 0x06a9, 0x06be, 0x06d1, + 0x06dd, 0x06e5, 0x06ea, 0x0702, 0x070a, 0x0715, 0x071e, 0x0728, + // Entry C0 - FF + 0x072d, 0x0735, 0x073a, 0x073a, 0x0742, 0x074a, 0x0750, 0x0758, + 0x075e, 0x076b, 0x0779, 0x0787, 0x0791, 0x0799, 0x07a2, 0x07ae, + 0x07b6, 0x07cd, 0x07d6, 0x07e2, 0x07ec, 0x07f3, 0x07fb, 0x0802, + 0x080d, 0x0824, 0x082f, 0x084a, 0x084f, 0x0858, 0x0868, 0x087e, + 0x0883, 0x0883, 0x0887, 0x088f, 0x089a, 0x08a1, 0x08ad, 0x08b9, + 0x08c0, 0x08c5, 0x08ca, 0x08dc, 0x08e2, 0x08e8, 0x08f1, 0x08f8, + 0x08fe, 0x08fe, 0x08fe, 0x091d, 0x0924, 0x092e, 0x0937, 0x0951, + 0x095a, 0x0971, 0x0982, 0x0989, 0x0990, 0x09a0, 0x09a5, 0x09ab, + // Entry 100 - 13F + 0x09b0, 0x09b7, 0x09c6, 0x09cc, 0x09d4, 0x09e8, 0x09f0, 0x09f9, + 0x0a1e, 0x0a2f, 0x0a36, 0x0a45, 0x0a55, 0x0a65, 0x0a74, 0x0a83, + 0x0a93, 0x0a9d, 0x0aae, 0x0ab5, 0x0ac1, 0x0acd, 0x0ae0, 0x0aef, + 0x0b0c, 0x0b15, 0x0b28, 0x0b31, 0x0b36, 0x0b41, 0x0b4c, 0x0b54, + 0x0b63, 0x0b71, 0x0b7f, 0x0b8f, + }, + }, + { // se-FI + "Bosnia ja HercegovinaKambožaSudanChadDavvi-Amerihkká ja Gaska-AmerihkkáL" + + "ulli-AmerihkkáGaska-AmerihkkáDavvi-AmerihkkáLatiinnalaš-Amerihkká", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 40 - 7F + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x001d, 0x001d, 0x001d, 0x001d, + // Entry 80 - BF + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + // Entry C0 - FF + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x0022, 0x0022, 0x0022, 0x0022, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + // Entry 100 - 13F + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x004a, 0x005a, 0x005a, 0x005a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, + 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, + 0x007a, 0x007a, 0x007a, 0x0091, + }, + }, + { // seh + "AndorraEmirados Árabes UnidosAfeganistãoAntígua e BarbudaAnguillaAlbânia" + + "ArmêniaAngolaArgentinaSamoa AmericanaÁustriaAustráliaArubaAzerbaijão" + + "Bósnia-HerzegovinaBarbadosBangladeshBélgicaBurquina FasoBulgáriaBahr" + + "ainBurundiBeninBermudasBruneiBolíviaBrasilBahamasButãoBotsuanaBelaru" + + "sBelizeCanadáCongo-KinshasaRepública Centro-AfricanaCongoSuíçaCosta " + + "do MarfimIlhas CookChileRepública dos CamarõesChinaColômbiaCosta Ric" + + "aCubaCabo VerdeChipreRepública TchecaAlemanhaDjibutiDinamarcaDominic" + + "aRepública DominicanaArgéliaEquadorEstôniaEgitoEritréiaEspanhaEtiópi" + + "aFinlândiaFijiIlhas MalvinasMicronésiaFrançaGabãoReino UnidoGranadaG" + + "eórgiaGuiana FrancesaGanaGibraltarGroênlandiaGâmbiaGuinéGuadalupeGui" + + "né EquatorialGréciaGuatemalaGuamGuiné BissauGuianaHondurasCroáciaHai" + + "tiHungriaIndonésiaIrlandaIsraelÍndiaTerritório Britânico do Oceano Í" + + "ndicoIraqueIrãIslândiaItáliaJamaicaJordâniaJapãoQuêniaQuirguistãoCam" + + "bojaQuiribatiComoresSão Cristovão e NevisCoréia do NorteCoréia do Su" + + "lKuwaitIlhas CaimanCasaquistãoLaosLíbanoSanta LúciaLiechtensteinSri " + + "LankaLibériaLesotoLituâniaLuxemburgoLetôniaLíbiaMarrocosMônacoMoldáv" + + "iaMadagascarIlhas MarshallMacedôniaMaliMianmarMongóliaIlhas Marianas" + + " do NorteMartinicaMauritâniaMontserratMaltaMaurícioMaldivasMalawiMéx" + + "icoMalásiaMoçambiqueNamíbiaNova CaledôniaNígerIlhas NorfolkNigériaNi" + + "caráguaHolandaNoruegaNepalNauruNiueNova ZelândiaOmãPanamáPeruPolinés" + + "ia FrancesaPapua-Nova GuinéFilipinasPaquistãoPolôniaSaint Pierre e M" + + "iquelonPitcairnPorto RicoTerritório da PalestinaPortugalPalauParagua" + + "iCatarReuniãoRomêniaRússiaRuandaArábia SauditaIlhas SalomãoSeychelle" + + "sSudãoSuéciaCingapuraSanta HelenaEslovêniaEslováquiaSerra LeoaSan Ma" + + "rinoSenegalSomáliaSurinameSão Tomé e PríncipeEl SalvadorSíriaSuazilâ" + + "ndiaIlhas Turks e CaicosChadeTogoTailândiaTadjiquistãoTokelauTimor L" + + "esteTurcomenistãoTunísiaTongaTurquiaTrinidad e TobagoTuvaluTaiwanUcr" + + "âniaUgandaEstados UnidosUruguaiUzbequistãoVaticanoSão Vicente e Gra" + + "nadinasVenezuelaIlhas Virgens BritânicasIlhas Virgens dos EUAVietnãV" + + "anuatuWallis e FutunaSamoaIêmenMayotteÁfrica do SulZâmbiaZimbábue", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x001e, 0x002a, 0x003c, 0x0044, 0x004c, + 0x0054, 0x005a, 0x005a, 0x0063, 0x0072, 0x007a, 0x0084, 0x0089, + 0x0089, 0x0094, 0x00a7, 0x00af, 0x00b9, 0x00c1, 0x00ce, 0x00d7, + 0x00de, 0x00e5, 0x00ea, 0x00ea, 0x00f2, 0x00f8, 0x0100, 0x0100, + 0x0106, 0x010d, 0x0113, 0x0113, 0x011b, 0x0122, 0x0128, 0x012f, + 0x012f, 0x013d, 0x0157, 0x015c, 0x0163, 0x0172, 0x017c, 0x0181, + 0x0199, 0x019e, 0x01a7, 0x01a7, 0x01b1, 0x01b5, 0x01bf, 0x01bf, + 0x01bf, 0x01c5, 0x01d6, 0x01de, 0x01de, 0x01e5, 0x01ee, 0x01f6, + // Entry 40 - 7F + 0x020b, 0x0213, 0x0213, 0x021a, 0x0222, 0x0227, 0x0227, 0x0230, + 0x0237, 0x023f, 0x023f, 0x023f, 0x0249, 0x024d, 0x025b, 0x0266, + 0x0266, 0x026d, 0x0273, 0x027e, 0x0285, 0x028d, 0x029c, 0x029c, + 0x02a0, 0x02a9, 0x02b5, 0x02bc, 0x02c2, 0x02cb, 0x02dc, 0x02e3, + 0x02e3, 0x02ec, 0x02f0, 0x02fd, 0x0303, 0x0303, 0x0303, 0x030b, + 0x0313, 0x0318, 0x031f, 0x031f, 0x0329, 0x0330, 0x0336, 0x0336, + 0x033c, 0x0364, 0x036a, 0x036e, 0x0377, 0x037e, 0x037e, 0x0385, + 0x038e, 0x0394, 0x039b, 0x03a7, 0x03ae, 0x03b7, 0x03be, 0x03d5, + // Entry 80 - BF + 0x03e5, 0x03f3, 0x03f9, 0x0405, 0x0411, 0x0415, 0x041c, 0x0428, + 0x0435, 0x043e, 0x0446, 0x044c, 0x0455, 0x045f, 0x0467, 0x046d, + 0x0475, 0x047c, 0x0485, 0x0485, 0x0485, 0x048f, 0x049d, 0x04a7, + 0x04ab, 0x04b2, 0x04bb, 0x04bb, 0x04d2, 0x04db, 0x04e6, 0x04f0, + 0x04f5, 0x04fe, 0x0506, 0x050c, 0x0513, 0x051b, 0x0526, 0x052e, + 0x053d, 0x0543, 0x0550, 0x0558, 0x0562, 0x0569, 0x0570, 0x0575, + 0x057a, 0x057e, 0x058c, 0x0590, 0x0597, 0x059b, 0x05ae, 0x05bf, + 0x05c8, 0x05d2, 0x05da, 0x05f1, 0x05f9, 0x0603, 0x061b, 0x0623, + // Entry C0 - FF + 0x0628, 0x0630, 0x0635, 0x0635, 0x063d, 0x0645, 0x0645, 0x064c, + 0x0652, 0x0661, 0x066f, 0x0679, 0x067f, 0x0686, 0x068f, 0x069b, + 0x06a5, 0x06a5, 0x06b0, 0x06ba, 0x06c4, 0x06cb, 0x06d3, 0x06db, + 0x06db, 0x06f1, 0x06fc, 0x06fc, 0x0702, 0x070e, 0x070e, 0x0722, + 0x0727, 0x0727, 0x072b, 0x0735, 0x0742, 0x0749, 0x0754, 0x0762, + 0x076a, 0x076f, 0x0776, 0x0787, 0x078d, 0x0793, 0x0793, 0x079b, + 0x07a1, 0x07a1, 0x07a1, 0x07af, 0x07b6, 0x07c2, 0x07ca, 0x07e3, + 0x07ec, 0x0805, 0x081a, 0x0821, 0x0828, 0x0837, 0x083c, 0x083c, + // Entry 100 - 13F + 0x0842, 0x0849, 0x0857, 0x085e, 0x0867, + }, + }, + { // ses + "AndooraLaaraw Imaarawey MarganteyAfgaanistanAntigua nda BarbuudaAngiiyaA" + + "lbaaniArmeeniAngoolaArgentineAmeriki SamoaOtrišiOstraaliAruubaAzerba" + + "ayijaŋBosni nda HerzegovineBarbaadosBangladešiBelgiikiBurkina fasoBu" + + "lgaariBahareenBurundiBeniŋBermudaBruuneeBooliviBreezilBahamasBuutaŋB" + + "otswaanaBilorišiBeliiziKanaadaKongoo demookaratiki labooCentraafriki" + + " koyraKongooSwisuKudwarKuuk gungeyŠiiliKameruunŠiinKolombiKosta rika" + + "KuubaKapuver gungeyŠiipurCek laboAlmaaɲeJibuutiDanemarkDoominikiDoom" + + "iniki labooAlžeeriEkwateerEstooniMisraEritreeEspaaɲeEcioopiFinlanduF" + + "ijiKalkan gungeyMikroneziFaransiGaabonAlbaasalaama MargantaGrenaadaG" + + "orgiFaransi GuyaanGaanaGibraltarGrinlandGambiGineGwadeluupGinee Ekwa" + + "torialGreeceGwatemaalaGuamGine-BissoGuyaaneHondurasKrwaasiHaitiHunga" + + "ariIndoneeziIrlanduIsrayelIndu labooBritiši Indu teekoo laamaIraakIr" + + "aanAycelandItaaliJamaayikUrdunJaapoŋKeeniyaKyrgyzstanKamboogiKiribaa" + + "tiKomoorSeŋ Kitts nda NevisKooree, GurmaKooree, HawsaKuweetKayman gu" + + "ngeyKaazakstanLaawosLubnaanSeŋ LussiaLiechtensteinSrilankaLiberiaLee" + + "sotoLituaaniLuxembourgLetooniLiibiMaarokMonakoMoldoviMadagascarMarša" + + "l gungeyMaacedooniMaaliMaynamarMongooliMariana Gurma GungeyMartiniik" + + "iMooritaaniMontserratMaltaMooris gungeyMaldiivuMalaawiMexikiMaleeziM" + + "ozambikNaamibiKaaledooni TaagaaNižerNorfolk GungooNaajiriiaNikaragwa" + + "HollanduNorveejNeepalNauruNiueZeelandu TaagaOmaanPanamaPeeruFaransi " + + "PolineeziPapua Ginee TaagaFilipinePaakistanPoloɲeSeŋ Piyer nda Mikel" + + "onPitikarinPorto RikoPalestine Dangay nda GaazaPortugaalPaluParaguwe" + + "yKataarReenioŋRumaaniIriši labooRwandaSaudiyaSolomon GungeySeešelSuu" + + "daŋSweedeSingapurSeŋ HelenaSloveeniSlovaakiSeera LeonSan MarinoSeneg" + + "alSomaaliSurinaamSao Tome nda PrinsipeSalvador labooSuuriaSwazilandT" + + "urk nda Kayikos GungeyCaaduTogoTaayilandTaažikistanTokelauTimoor haw" + + "saTurkmenistaŋTuniziTongaTurkiTrinidad nda TobaagoTuvaluTaayiwanTanz" + + "aaniUkreenUgandaAmeriki Laabu MarganteyUruguweyUzbeekistanVaatikan L" + + "aamaSeŋvinsaŋ nda GrenadineVeneezuyeelaBritiši Virgin gungeyAmeerik " + + "Virgin GungeyVietnaamVanautuWallis nda FutunaSamoaYamanMayootiHawsa " + + "Afriki LabooZambiZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0021, 0x002c, 0x0040, 0x0047, 0x004e, + 0x0055, 0x005c, 0x005c, 0x0065, 0x0072, 0x0079, 0x0081, 0x0087, + 0x0087, 0x0094, 0x00a9, 0x00b2, 0x00bd, 0x00c5, 0x00d1, 0x00d9, + 0x00e1, 0x00e8, 0x00ee, 0x00ee, 0x00f5, 0x00fc, 0x0103, 0x0103, + 0x010a, 0x0111, 0x0118, 0x0118, 0x0121, 0x012a, 0x0131, 0x0138, + 0x0138, 0x0152, 0x0164, 0x016a, 0x016f, 0x0175, 0x0180, 0x0186, + 0x018e, 0x0193, 0x019a, 0x019a, 0x01a4, 0x01a9, 0x01b7, 0x01b7, + 0x01b7, 0x01be, 0x01c6, 0x01ce, 0x01ce, 0x01d5, 0x01dd, 0x01e6, + // Entry 40 - 7F + 0x01f5, 0x01fd, 0x01fd, 0x0205, 0x020c, 0x0211, 0x0211, 0x0218, + 0x0220, 0x0227, 0x0227, 0x0227, 0x022f, 0x0233, 0x0240, 0x0249, + 0x0249, 0x0250, 0x0256, 0x026b, 0x0273, 0x0278, 0x0286, 0x0286, + 0x028b, 0x0294, 0x029c, 0x02a1, 0x02a5, 0x02ae, 0x02be, 0x02c4, + 0x02c4, 0x02ce, 0x02d2, 0x02dc, 0x02e3, 0x02e3, 0x02e3, 0x02eb, + 0x02f2, 0x02f7, 0x02ff, 0x02ff, 0x0308, 0x030f, 0x0316, 0x0316, + 0x0320, 0x033a, 0x033f, 0x0344, 0x034c, 0x0352, 0x0352, 0x035a, + 0x035f, 0x0366, 0x036d, 0x0377, 0x037f, 0x0388, 0x038e, 0x03a2, + // Entry 80 - BF + 0x03af, 0x03bc, 0x03c2, 0x03cf, 0x03d9, 0x03df, 0x03e6, 0x03f1, + 0x03fe, 0x0406, 0x040d, 0x0414, 0x041c, 0x0426, 0x042d, 0x0432, + 0x0438, 0x043e, 0x0445, 0x0445, 0x0445, 0x044f, 0x045d, 0x0467, + 0x046c, 0x0474, 0x047c, 0x047c, 0x0490, 0x049a, 0x04a4, 0x04ae, + 0x04b3, 0x04c0, 0x04c8, 0x04cf, 0x04d5, 0x04dc, 0x04e4, 0x04eb, + 0x04fc, 0x0502, 0x0510, 0x0519, 0x0522, 0x052a, 0x0531, 0x0537, + 0x053c, 0x0540, 0x054e, 0x0553, 0x0559, 0x055e, 0x056f, 0x0580, + 0x0588, 0x0591, 0x0598, 0x05ae, 0x05b7, 0x05c1, 0x05db, 0x05e4, + // Entry C0 - FF + 0x05e8, 0x05f1, 0x05f7, 0x05f7, 0x05ff, 0x0606, 0x0606, 0x0612, + 0x0618, 0x061f, 0x062d, 0x0634, 0x063b, 0x0641, 0x0649, 0x0654, + 0x065c, 0x065c, 0x0664, 0x066e, 0x0678, 0x067f, 0x0686, 0x068e, + 0x068e, 0x06a3, 0x06b1, 0x06b1, 0x06b7, 0x06c0, 0x06c0, 0x06d7, + 0x06dc, 0x06dc, 0x06e0, 0x06e9, 0x06f5, 0x06fc, 0x0708, 0x0715, + 0x071b, 0x0720, 0x0725, 0x0739, 0x073f, 0x0747, 0x074f, 0x0755, + 0x075b, 0x075b, 0x075b, 0x0772, 0x077a, 0x0785, 0x0793, 0x07ac, + 0x07b8, 0x07ce, 0x07e3, 0x07eb, 0x07f2, 0x0803, 0x0808, 0x0808, + // Entry 100 - 13F + 0x080d, 0x0814, 0x0826, 0x082b, 0x0833, + }, + }, + { // sg + "AndôroArâbo Emirâti ÔkoFaganïta, AfganïstäanAntîgua na BarbûdaAngûîlaAlb" + + "anïiArmenïiAngoläaArzantînaSamöa tî AmerîkaOtrîsiOstralïi, SotralïiA" + + "rûbaZerebaidyäan, Azerbaidyäan,Bosnïi na HerzegovînniBarabâdaBenglad" + + "êshiBêleze, BelezîkiBurkina FasoBulugarïiBahrâinaBurundïiBenëenBere" + + "mûdaBrunêiBolivïiBrezîliBahâmasaButäanBotswanaBelarüsiBelîziKanadäaK" + + "ödörösêse tî Ngunuhalëzo tî kongöKödörösêse tî BêafrîkaKongöSûîsiKô" + + "divüäraâzûâ KûkuShilïiKamerûneShînaKolombïiKôsta RîkaKubäaAzûâ tî Kâ" + + "po-VêreSîpriKödörösêse tî TyêkiZâmaniDibutùiiDanemêrkeDömïnîkaKödörö" + + "sêse tî DominîkaAlzerïiEkuatëreEstonïiKâmitâEritrëeEspânyeEtiopïiFël" + + "ândeFidyïiÂzûâ tî MälüîniMikronezïiFarânziGaböonKödörögbïä--ÔkoGren" + + "âdaZorzïiGüyâni tî farânziGanäaZibraltära, ZibaratäraGorolândeGambï" + + "iGinëeGuadelûpuGinëe tî EkuatëreGerêsiGuatêmäläGuâmGninëe-BisauGayân" + + "aHonduräsiKroasïiHaitïiHongirùiiÊnndonezïiIrlândeIsraëliÊnndeSêse tî" + + " Anglëe na Ngûyämä tî ÊnndeIrâkiIräanIslândeItalùiiZamaîkaZordanïiZa" + + "pöonKenyäaKirigizitùaanKämbôziKiribatiKömôroSên-Krïstôfo-na-NevîsiKo" + + "rëe tî BangaKorëe tî MbongoKöwêtiÂzûâ Ngundë, KaimäniKazakisitäanLùa" + + "ôsiLibùaanSênt-LisïiLiechtenstein,Sirî-LankaLiberïaLesôthoLituanïiL" + + "ugzambûruLetonùiiLibïiMarôkoMonaköoMoldavùiiMadagaskäraÂzûâ MärshâlM" + + "aseduäniMalïiMyämâraMongolïiÂzûâ Märïâni tî BangaMärtïnîkiMoritanïiM" + + "onserâteMâltaMörîsiMaldîvaMalawïiMekisîkiMalezïiMözämbîkaNamibùiiFin" + + "î KaledonïiNizëreZûâ NôrfôlkoNizerïaNikaraguaHoländeNörvêziNëpâliNa" + + "uruNiueFinî ZelândeOmâniPanamaPerüuPolinezïi tî farânziPapû Finî Gin" + + "ëe, PapuazïiFilipîniPakistäanPölôniSên-Pyêre na MikelöonPitikêrniPo" + + "rto RîkoSêse tî PalestîniPörtugäle, Ködörö PûraPalauParaguëeKatäraRe" + + "inïonRumanïiRusïiRuandäaSaûdi ArabïiZûâ SalomöonSëyshêleSudäanSuêdeS" + + "ïngäpûruSênt-HelênaSolovenïiSolovakïiSierä-LeôneSên-MarëenSenegäleS" + + "omalïiSurinämSâô Tömê na PrinsîpeSalvadöroSirïiSwäzïlândeÂzûâ Turku " + + "na KaîkiTyâdeTogöTailândeTaazikiistäanTokelauTimôro tî TöTurkumenist" + + "äanTunizïiTongaTurukïiTrinitùee na TobagöTüvalüTâiwâniTanzanïiUkrên" + + "iUgandäaÂLeaa-Ôko tî AmerikaUruguëeUzbekistäanLetëe tî VatikäanSên-V" + + "ensäan na âGrenadîniVenezueläaÂzôâ Viîrîggo tî AnglëeÂzûâ Virîgo tî " + + "AmerîkaVietnämVanuatüWalîsi na FutunaSamoäaYëmêniMäyôteMbongo-Afrîka" + + "ZambïiZimbäbwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x001b, 0x0033, 0x0047, 0x0050, 0x0058, + 0x0060, 0x0068, 0x0068, 0x0072, 0x0085, 0x008c, 0x00a0, 0x00a6, + 0x00a6, 0x00c3, 0x00db, 0x00e4, 0x00f0, 0x0102, 0x010e, 0x0118, + 0x0121, 0x012a, 0x0131, 0x0131, 0x013a, 0x0141, 0x0149, 0x0149, + 0x0151, 0x015a, 0x0161, 0x0161, 0x0169, 0x0172, 0x0179, 0x0181, + 0x0181, 0x01ab, 0x01c8, 0x01ce, 0x01d5, 0x01e1, 0x01ee, 0x01f5, + 0x01fe, 0x0204, 0x020d, 0x020d, 0x0219, 0x021f, 0x0235, 0x0235, + 0x0235, 0x023b, 0x0254, 0x025b, 0x025b, 0x0264, 0x026e, 0x0279, + // Entry 40 - 7F + 0x0295, 0x029d, 0x029d, 0x02a6, 0x02ae, 0x02b6, 0x02b6, 0x02be, + 0x02c6, 0x02ce, 0x02ce, 0x02ce, 0x02d7, 0x02de, 0x02f4, 0x02ff, + 0x02ff, 0x0307, 0x030e, 0x0323, 0x032b, 0x0332, 0x0347, 0x0347, + 0x034d, 0x0365, 0x036f, 0x0376, 0x037c, 0x0386, 0x039a, 0x03a1, + 0x03a1, 0x03ad, 0x03b2, 0x03bf, 0x03c6, 0x03c6, 0x03c6, 0x03d0, + 0x03d8, 0x03df, 0x03e9, 0x03e9, 0x03f5, 0x03fd, 0x0405, 0x0405, + 0x040b, 0x0435, 0x043b, 0x0441, 0x0449, 0x0451, 0x0451, 0x0459, + 0x0462, 0x0469, 0x0470, 0x047e, 0x0487, 0x048f, 0x0497, 0x04b1, + // Entry 80 - BF + 0x04c1, 0x04d2, 0x04da, 0x04f3, 0x0500, 0x0508, 0x0510, 0x051c, + 0x052a, 0x0535, 0x053d, 0x0545, 0x054e, 0x0559, 0x0562, 0x0568, + 0x056f, 0x0577, 0x0581, 0x0581, 0x0581, 0x058d, 0x059e, 0x05a8, + 0x05ae, 0x05b7, 0x05c0, 0x05c0, 0x05dc, 0x05e8, 0x05f2, 0x05fc, + 0x0602, 0x060a, 0x0612, 0x061a, 0x0623, 0x062b, 0x0637, 0x0640, + 0x0650, 0x0657, 0x0667, 0x066f, 0x0678, 0x0680, 0x0689, 0x0691, + 0x0696, 0x069a, 0x06a8, 0x06ae, 0x06b4, 0x06ba, 0x06d1, 0x06ee, + 0x06f7, 0x0701, 0x0709, 0x0721, 0x072b, 0x0736, 0x074a, 0x0766, + // Entry C0 - FF + 0x076b, 0x0774, 0x077b, 0x077b, 0x0783, 0x078b, 0x078b, 0x0791, + 0x0799, 0x07a7, 0x07b6, 0x07c0, 0x07c7, 0x07cd, 0x07d9, 0x07e6, + 0x07f0, 0x07f0, 0x07fa, 0x0807, 0x0813, 0x081c, 0x0824, 0x082c, + 0x082c, 0x0845, 0x084f, 0x084f, 0x0855, 0x0862, 0x0862, 0x0879, + 0x087f, 0x087f, 0x0884, 0x088d, 0x089b, 0x08a2, 0x08b1, 0x08c0, + 0x08c8, 0x08cd, 0x08d5, 0x08ea, 0x08f2, 0x08fb, 0x0904, 0x090b, + 0x0913, 0x0913, 0x0913, 0x092a, 0x0932, 0x093e, 0x0952, 0x096f, + 0x097a, 0x0998, 0x09b4, 0x09bc, 0x09c4, 0x09d5, 0x09dc, 0x09dc, + // Entry 100 - 13F + 0x09e4, 0x09ec, 0x09fa, 0x0a01, 0x0a0a, + }, + }, + { // shi + "ⴰⵏⴷⵓⵔⴰⵍⵉⵎⴰⵔⴰⵜⴰⴼⵖⴰⵏⵉⵙⵜⴰⵏⴰⵏⵜⵉⴳⴰ ⴷ ⴱⵔⴱⵓⴷⴰⴰⵏⴳⵉⵍⴰⴰⵍⴱⴰⵏⵢⴰⴰⵔⵎⵉⵏⵢⴰⴰⵏⴳⵓⵍⴰⴰⵔⵊⴰⵏⵜⵉⵏ" + + "ⵙⴰⵎⵡⴰ ⵜⴰⵎⵉⵔⵉⴽⴰⵏⵉⵜⵏⵏⵎⵙⴰⵓⵙⵜⵔⴰⵍⵢⴰⴰⵔⵓⴱⴰⴰⴷⵔⴰⴱⵉⵊⴰⵏⴱⵓⵙⵏⴰ ⴷ ⵀⵉⵔⵙⵉⴽⴱⴰⵔⴱⴰⴷⴱⴰ" + + "ⵏⴳⵍⴰⴷⵉⵛⴱⵍⵊⵉⴽⴰⴱⵓⵔⴽⵉⵏⴰ ⴼⴰⵙⵓⴱⵍⵖⴰⵔⵢⴰⴱⵃⵔⴰⵢⵏⴱⵓⵔⵓⵏⴷⵉⴱⵉⵏⵉⵏⴱⵔⵎⵓⴷⴰⴱⵔⵓⵏⵉⴱⵓⵍⵉⴼ" + + "ⵢⴰⴱⵔⴰⵣⵉⵍⴱⴰⵀⴰⵎⴰⵙⴱⵀⵓⵜⴰⵏⴱⵓⵜⵙⵡⴰⵏⴰⴱⵉⵍⴰⵔⵓⵙⵢⴰⴱⵉⵍⵉⵣⴽⴰⵏⴰⴷⴰⵜⴰⴳⴷⵓⴷⴰⵏⵜ ⵜⴰⴷⵉⵎⵓⵇ" + + "ⵔⴰⵜⵉⵜ ⵏ ⴽⵓⵏⴳⵓⵜⴰⴳⴷⵓⴷⴰⵏⵜ ⵜⴰⵏⴰⵎⵎⴰⵙⵜ ⵏ ⵉⴼⵔⵉⵇⵢⴰⴽⵓⵏⴳⵓⵙⵡⵉⵙⵔⴰⴽⵓⵜ ⴷⵉⴼⵡⴰⵔⵜⵉⴳ" + + "ⵣⵉⵔⵉⵏ ⵏ ⴽⵓⴽⵛⵛⵉⵍⵉⴽⴰⵎⵉⵔⵓⵏⵛⵛⵉⵏⵡⴰⴽⵓⵍⵓⵎⴱⵢⴰⴽⵓⵙⵜⴰ ⵔⵉⴽⴰⴽⵓⴱⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⴽⴰⴱⴱ" + + "ⵉⵔⴷⵉⵇⵓⴱⵔⵓⵙⵜⴰⴳⴷⵓⴷⴰⵏⵜ ⵜⴰⵜⵛⵉⴽⵉⵜⴰⵍⵎⴰⵏⵢⴰⴷⵊⵉⴱⵓⵜⵉⴷⴰⵏⵎⴰⵔⴽⴷⵓⵎⵉⵏⵉⴽⵜⴰⴳⴷⵓⴷⴰⵏⵜ " + + "ⵜⴰⴷⵓⵎⵉⵏⵉⴽⵜⴷⵣⴰⵢⵔⵉⴽⵡⴰⴷⵓⵔⵉⵙⵜⵓⵏⵢⴰⵎⵉⵚⵕⵉⵔⵉⵜⵉⵔⵢⴰⵙⴱⴰⵏⵢⴰⵉⵜⵢⵓⴱⵢⴰⴼⵉⵍⵍⴰⵏⴷⴰⴼⵉⴷⵊ" + + "ⵉⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵎⴰⵍⴰⵡⵉⵎⵉⴽⵔⵓⵏⵉⵣⵢⴰⴼⵔⴰⵏⵙⴰⴳⴰⴱⵓⵏⵜⴰⴳⵍⴷⵉⵜ ⵉⵎⵓⵏⵏⵖⵔⵏⴰⵟⴰⵊⵓⵔⵊⵢⴰⴳⵡ" + + "ⵉⵢⴰⵏ ⵜⴰⴼⵔⴰⵏⵙⵉⵙⵜⵖⴰⵏⴰⴰⴷⵔⴰⵔ ⵏ ⵟⴰⵕⵉⵇⴳⵔⵉⵍⴰⵏⴷⴳⴰⵎⴱⵢⴰⵖⵉⵏⵢⴰⴳⵡⴰⴷⴰⵍⵓⴱⵖⵉⵏⵢⴰ ⵏ " + + "ⵉⴽⵡⴰⴷⵓⵔⵍⵢⵓⵏⴰⵏⴳⵡⴰⵜⵉⵎⴰⵍⴰⴳⵡⴰⵎⵖⵉⵏⵢⴰ ⴱⵉⵙⴰⵡⴳⵡⵉⵢⴰⵏⴰⵀⵓⵏⴷⵓⵔⴰⵙⴽⵔⵡⴰⵜⵢⴰⵀⴰⵢⵜⵉⵀⵏ" + + "ⵖⴰⵔⵢⴰⴰⵏⴷⵓⵏⵉⵙⵢⴰⵉⵔⵍⴰⵏⴷⴰⵉⵙⵔⴰⵢⵉⵍⵍⵀⵉⵏⴷⵜⴰⵎⵏⴰⴹⵜ ⵜⴰⵏⴳⵍⵉⵣⵉⵜ ⵏ ⵓⴳⴰⵔⵓ ⴰⵀⵉⵏⴷⵉⵍ" + + "ⵄⵉⵔⴰⵇⵉⵔⴰⵏⵉⵙⵍⴰⵏⴷⵉⵟⴰⵍⵢⴰⵊⴰⵎⴰⵢⴽⴰⵍⵓⵔⴷⵓⵏⵍⵢⴰⴱⴰⵏⴽⵉⵏⵢⴰⴽⵉⵔⵖⵉⵣⵉⵙⵜⴰⵏⴽⴰⵎⴱⵓⴷⵢⴰⴽⵉ" + + "ⵔⵉⴱⴰⵜⵉⵇⵓⵎⵓⵔⵙⴰⵏⴽⵔⵉⵙ ⴷ ⵏⵉⴼⵉⵙⴽⵓⵔⵢⴰ ⵏ ⵉⵥⵥⵍⵎⴹⴽⵓⵔⵢⴰ ⵏ ⵉⴼⴼⵓⵙⵍⴽⵡⵉⵜⵜⵉⴳⵣⵉⵔⵉⵏ" + + " ⵏ ⴽⴰⵢⵎⴰⵏⴽⴰⵣⴰⵅⵙⵜⴰⵏⵍⴰⵡⵙⵍⵓⴱⵏⴰⵏⵙⴰⵏⵜⵍⵓⵙⵉⵍⵉⴽⵉⵏⵛⵜⴰⵢⵏⵙⵔⵉⵍⴰⵏⴽⴰⵍⵉⴱⵉⵔⵢⴰⵍⵉⵚⵓⵟⵓⵍ" + + "ⵉⵜⵡⴰⵏⵢⴰⵍⵓⴽⵙⴰⵏⴱⵓⵔⴳⵍⴰⵜⴼⵢⴰⵍⵉⴱⵢⴰⵍⵎⵖⵔⵉⴱⵎⵓⵏⴰⴽⵓⵎⵓⵍⴷⵓⴼⵢⴰⵎⴰⴷⴰⵖⴰⵛⵇⴰⵔⵜⵉⴳⵣⵉⵔⵉⵏ" + + " ⵏ ⵎⴰⵔⵛⴰⵍⵎⴰⵙⵉⴷⵓⵏⵢⴰⵎⴰⵍⵉⵎⵢⴰⵏⵎⴰⵔⵎⵏⵖⵓⵍⵢⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵎⴰⵔⵢⴰⵏ ⵏ ⵉⵥⵥⵍⵎⴹⵎⴰⵔⵜⵉⵏ" + + "ⵉⴽⵎⵓⵕⵉⵟⴰⵏⵢⴰⵎⵓⵏⵙⵉⵔⴰⵜⵎⴰⵍⵟⴰⵎⵓⵔⵉⵙⵎⴰⵍⴷⵉⴼⵎⴰⵍⴰⵡⵉⵎⵉⴽⵙⵉⴽⵎⴰⵍⵉⵣⵢⴰⵎⵓⵣⵏⴱⵉⵇⵏⴰⵎⵉⴱ" + + "ⵢⴰⴽⴰⵍⵉⴷⵓⵏⵢⴰ ⵜⴰⵎⴰⵢⵏⵓⵜⵏⵏⵉⵊⵉⵔⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵏⵓⵔⴼⵓⵍⴽⵏⵉⵊⵉⵔⵢⴰⵏⵉⴽⴰⵔⴰⴳⵡⴰⵀⵓⵍⴰⵏⴷ" + + "ⴰⵏⵏⵔⵡⵉⵊⵏⵉⴱⴰⵍⵏⴰⵡⵔⵓⵏⵉⵡⵉⵏⵢⵓⵣⵉⵍⴰⵏⴷⴰⵄⵓⵎⴰⵏⴱⴰⵏⴰⵎⴰⴱⵉⵔⵓⴱⵓⵍⵉⵏⵉⵣⵢⴰ ⵜⴰⴼⵔⴰⵏⵙⵉⵙⵜ" + + "ⴱⴰⴱⵡⴰ ⵖⵉⵏⵢⴰ ⵜⴰⵎⴰⵢⵏⵓⵜⴼⵉⵍⵉⴱⴱⵉⵏⴱⴰⴽⵉⵙⵜⴰⵏⴱⵓⵍⵓⵏⵢⴰⵙⴰⵏⴱⵢⵉⵔ ⴷ ⵎⵉⴽⵍⵓⵏⴱⵉⵜⴽⴰⵢⵔ" + + "ⵏⴱⵓⵔⵜⵓ ⵔⵉⴽⵓⴰⴳⵎⵎⴰⴹ ⵏ ⵜⴰⴳⵓⵜ ⴷ ⵖⵣⵣⴰⴱⵕⵟⵇⵉⵣⴱⴰⵍⴰⵡⴱⴰⵔⴰⴳⵡⴰⵢⵇⴰⵜⴰⵔⵔⵉⵢⵓⵏⵢⵓⵏⵔⵓ" + + "ⵎⴰⵏⵢⴰⵔⵓⵙⵢⴰⵔⵡⴰⵏⴷⴰⵙⵙⴰⵄⵓⴷⵉⵢⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵙⴰⵍⵓⵎⴰⵏⵙⵙⵉⵛⵉⵍⵙⵙⵓⴷⴰⵏⵙⵙⵡⵉⴷⵙⵏⵖⴰⴼⵓ" + + "ⵔⴰⵙⴰⵏⵜⵉⵍⵉⵏⵙⵍⵓⴼⵉⵏⵢⴰⵙⵍⵓⴼⴰⴽⵢⴰⵙⵙⵉⵔⴰⵍⵢⵓⵏⵙⴰⵏⵎⴰⵔⵉⵏⵓⵙⵙⵉⵏⵉⴳⴰⵍⵚⵚⵓⵎⴰⵍⵙⵓⵔⵉⵏⴰⵎⵙ" + + "ⴰⵡⵟⵓⵎⵉ ⴷ ⴱⵔⴰⵏⵙⵉⴱⵙⴰⵍⴼⴰⴷⵓⵔⵙⵓⵔⵢⴰⵙⵡⴰⵣⵉⵍⴰⵏⴷⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵜⵓⵔⴽⵢⴰ ⴷ ⴽⴰⵢⴽⵜⵛⴰ" + + "ⴷⵟⵓⴳⵓⵟⴰⵢⵍⴰⵏⴷⵜⴰⴷⵊⴰⴽⵉⵙⵜⴰⵏⵟⵓⴽⵍⴰⵡⵜⵉⵎⵓⵔ ⵏ ⵍⵇⴱⵍⵜⵜⵓⵔⴽⵎⴰⵏⵙⵜⴰⵏⵜⵓⵏⵙⵟⵓⵏⴳⴰⵜⵓⵔⴽ" + + "ⵢⴰⵜⵔⵉⵏⵉⴷⴰⴷ ⴷ ⵟⵓⴱⴰⴳⵓⵜⵓⴼⴰⵍⵓⵟⴰⵢⵡⴰⵏⵟⴰⵏⵥⴰⵏⵢⴰⵓⴽⵔⴰⵏⵢⴰⵓⵖⴰⵏⴷⴰⵉⵡⵓⵏⴰⴽ ⵎⵓⵏⵏⵉⵏ " + + "ⵏ ⵎⵉⵔⵉⴽⴰⵏⵓⵔⵓⴳⵡⴰⵢⵓⵣⴱⴰⴽⵉⵙⵜⴰⵏⴰⵡⴰⵏⴽ ⵏ ⴼⴰⵜⵉⴽⴰⵏⵙⴰⵏⴼⴰⵏⵙⴰⵏ ⴷ ⴳⵔⵉⵏⴰⴷⵉⵏⴼⵉⵏⵣⵡ" + + "ⵉⵍⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵜⵉⵎⴳⴰⴷ ⵏ ⵏⵏⴳⵍⵉⵣⵜⵉⴳⵣⵉⵔⵉⵏ ⵜⵉⵎⴳⴰⴷ ⵏ ⵉⵡⵓⵏⴰⴽ ⵎⵓⵏⵏⵉⵏⴼⵉⵜⵏⴰⵎⴼⴰ" + + "ⵏⵡⴰⵟⵓⵡⴰⵍⵉⵙ ⴷ ⴼⵓⵜⵓⵏⴰⵙⴰⵎⵡⴰⵢⴰⵎⴰⵏⵎⴰⵢⵓⵟⴰⴼⵔⵉⵇⵢⴰ ⵏ ⵉⴼⴼⵓⵙⵣⴰⵎⴱⵢⴰⵣⵉⵎⴱⴰⴱⵡⵉ", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0012, 0x0027, 0x0045, 0x006e, 0x0080, 0x0095, + 0x00aa, 0x00bc, 0x00bc, 0x00d4, 0x0105, 0x0114, 0x012c, 0x013b, + 0x013b, 0x0156, 0x017c, 0x018e, 0x01a9, 0x01bb, 0x01dd, 0x01f2, + 0x0204, 0x0219, 0x0228, 0x0228, 0x023a, 0x0249, 0x025e, 0x025e, + 0x0270, 0x0285, 0x0297, 0x0297, 0x02af, 0x02ca, 0x02d9, 0x02eb, + 0x02eb, 0x033f, 0x0390, 0x039f, 0x03b1, 0x03cd, 0x03f3, 0x0402, + 0x0417, 0x0429, 0x0441, 0x0441, 0x045d, 0x0469, 0x049e, 0x049e, + 0x049e, 0x04b0, 0x04e4, 0x04f9, 0x04f9, 0x050e, 0x0523, 0x0538, + // Entry 40 - 7F + 0x0572, 0x0581, 0x0581, 0x0596, 0x05ab, 0x05b7, 0x05b7, 0x05cf, + 0x05e1, 0x05f6, 0x05f6, 0x05f6, 0x060e, 0x061d, 0x064c, 0x066a, + 0x066a, 0x067c, 0x068b, 0x06b0, 0x06c2, 0x06d4, 0x0705, 0x0705, + 0x0711, 0x0734, 0x0749, 0x075b, 0x076a, 0x0782, 0x07ab, 0x07bd, + 0x07bd, 0x07d8, 0x07e4, 0x0803, 0x0818, 0x0818, 0x0818, 0x0830, + 0x0845, 0x0854, 0x0869, 0x0869, 0x0884, 0x0899, 0x08ae, 0x08ae, + 0x08bd, 0x0915, 0x0927, 0x0933, 0x0945, 0x0957, 0x0957, 0x096c, + 0x097e, 0x0990, 0x099f, 0x09c0, 0x09d8, 0x09f0, 0x09ff, 0x0a28, + // Entry 80 - BF + 0x0a4e, 0x0a71, 0x0a80, 0x0aaf, 0x0aca, 0x0ad6, 0x0ae8, 0x0b00, + 0x0b1e, 0x0b36, 0x0b4b, 0x0b5d, 0x0b75, 0x0b93, 0x0ba5, 0x0bb4, + 0x0bc6, 0x0bd8, 0x0bf0, 0x0bf0, 0x0bf0, 0x0c0e, 0x0c3d, 0x0c58, + 0x0c64, 0x0c79, 0x0c8e, 0x0c8e, 0x0cd4, 0x0cec, 0x0d07, 0x0d1f, + 0x0d2e, 0x0d3d, 0x0d4f, 0x0d61, 0x0d73, 0x0d88, 0x0d9d, 0x0db2, + 0x0de6, 0x0df8, 0x0e2a, 0x0e3f, 0x0e5a, 0x0e6f, 0x0e81, 0x0e90, + 0x0e9f, 0x0eab, 0x0ec9, 0x0ed8, 0x0eea, 0x0ef6, 0x0f30, 0x0f68, + 0x0f80, 0x0f98, 0x0fad, 0x0fd9, 0x0ff1, 0x100d, 0x1044, 0x1056, + // Entry C0 - FF + 0x1065, 0x107d, 0x108c, 0x108c, 0x10a4, 0x10b9, 0x10b9, 0x10c8, + 0x10da, 0x10f5, 0x1127, 0x1139, 0x114b, 0x115a, 0x1172, 0x118a, + 0x11a2, 0x11a2, 0x11ba, 0x11d5, 0x11f0, 0x1208, 0x121a, 0x122f, + 0x122f, 0x125e, 0x1276, 0x1276, 0x1285, 0x12a3, 0x12a3, 0x12e3, + 0x12ef, 0x12ef, 0x12fb, 0x1310, 0x1331, 0x1343, 0x1366, 0x1387, + 0x1393, 0x13a2, 0x13b4, 0x13e3, 0x13f5, 0x1407, 0x141f, 0x1434, + 0x1446, 0x1446, 0x1446, 0x1485, 0x149a, 0x14b8, 0x14e1, 0x1519, + 0x1531, 0x1573, 0x15c8, 0x15da, 0x15ef, 0x1615, 0x1624, 0x1624, + // Entry 100 - 13F + 0x1633, 0x1642, 0x166b, 0x167d, 0x1695, + }, + }, + { // shi-Latn + "anduralimaratafɣanistanantiga d brbudaangilaalbanyaarminyaangulaarjantin" + + "samwa tamirikanitnnmsaustralyaarubaadrabijanbusna d hirsikbarbadbang" + + "ladicbljikaburkina fasublɣarabḥraynburundibininbrmudabrunibulibyabra" + + "zilbahamasbhutanbutswanabilarusyabilizkanadatagdudant tadimukratit n" + + " Kongotagdudant tanammast n ifriqyakunguswisrakut difwartigzirin n k" + + "ukccilikamirunccinwaculumbyakusta rikakubatigzirin n kabbirdiqubrust" + + "agdudant tatcikitalmanyadjibutidanmarkduminiktagdudant taduminiktdza" + + "yrikwaduristunyamiṣṛiritiryasbanyaityubyafillandafidjitigzirin n mal" + + "awimikrunizyafransagabuntagldit imunnɣrnaṭajurjyagwiyan tafransistɣa" + + "naadrar n ṭaṛiqgrilandgambyaɣinyagwadalubɣinya n ikwadurlyunangwatim" + + "alagwamɣinya bisawgwiyanahunduraskrwatyahaytihnɣaryaandunisyairlanda" + + "israyillhindtamnaḍt tanglizit n ugaru ahindilɛiraqiranislandiṭalyaja" + + "maykalurdunlyabankinyakirɣizistankambudyakiribaticumursankris d nifi" + + "skurya n iẓẓlmḍkurya n iffuslkwittigzirin n kaymankazaxstanlawslubna" + + "nsantlusilikinctaynsrilankalibiryaliṣuṭulitwanyaluksanburglatfyaliby" + + "almɣribmunakumuldufyamadaɣacqartigzirin n marcalmasidunyamalimyanmar" + + "mnɣulyatigzirin n maryan n iẓẓlmḍmartinikmuṛiṭanyamunsiratmalṭamuris" + + "maldifmalawimiksikmalizyamuznbiqnamibyakalidunya tamaynutnnijirtigzi" + + "rin n nurfulknijiryanikaragwahulandannrwijnibalnawruniwinyuzilandaɛu" + + "manbanamabirubulinizya tafransistbabwa ɣinya tamaynutfilibbinbakista" + + "nbulunyasanbyir d miklunbitkayrnburtu rikuagmmaḍ n tagut d ɣzzabṛṭqi" + + "zbalawbaragwayqatarriyunyunrumanyarusyarwandassaɛudiyatigzirin n sal" + + "umanssicilssudansswidsnɣafurasantilinslufinyaslufakyassiralyunsanmar" + + "inussinigalṣṣumalsurinamsawṭumi d bransibsalfadursuryaswazilandatigz" + + "irin n turkya d kayktcadṭuguṭaylandtadjakistanṭuklawtimur n lqblttur" + + "kmanstantunsṭungaturkyatrinidad d ṭubagutufaluṭaywanṭanẓanyaukranyau" + + "ɣandaiwunak munnin n mirikanurugwayuzbakistanawank n fatikansanfans" + + "an d grinadinfinzwilatigzirin timgad n nngliztigzirin timgad n iwuna" + + "k munninfitnamfanwaṭuwalis d futunasamwayamanmayuṭafriqya n iffuszam" + + "byazimbabwi", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x000d, 0x0018, 0x0027, 0x002d, 0x0034, + 0x003b, 0x0041, 0x0041, 0x0049, 0x005a, 0x005f, 0x0067, 0x006c, + 0x006c, 0x0075, 0x0083, 0x0089, 0x0092, 0x0098, 0x00a4, 0x00ab, + 0x00b3, 0x00ba, 0x00bf, 0x00bf, 0x00c5, 0x00ca, 0x00d1, 0x00d1, + 0x00d7, 0x00de, 0x00e4, 0x00e4, 0x00ec, 0x00f5, 0x00fa, 0x0100, + 0x0100, 0x011e, 0x013b, 0x0140, 0x0146, 0x0150, 0x015e, 0x0163, + 0x016a, 0x0170, 0x0178, 0x0178, 0x0182, 0x0186, 0x0199, 0x0199, + 0x0199, 0x019f, 0x01b1, 0x01b8, 0x01b8, 0x01bf, 0x01c6, 0x01cd, + // Entry 40 - 7F + 0x01e1, 0x01e6, 0x01e6, 0x01ed, 0x01f4, 0x01fc, 0x01fc, 0x0204, + 0x020a, 0x0211, 0x0211, 0x0211, 0x0219, 0x021e, 0x022f, 0x0239, + 0x0239, 0x023f, 0x0244, 0x0251, 0x025a, 0x0260, 0x0271, 0x0271, + 0x0276, 0x0287, 0x028e, 0x0294, 0x029a, 0x02a2, 0x02b2, 0x02b8, + 0x02b8, 0x02c1, 0x02c5, 0x02d1, 0x02d8, 0x02d8, 0x02d8, 0x02e0, + 0x02e7, 0x02ec, 0x02f4, 0x02f4, 0x02fd, 0x0304, 0x030b, 0x030b, + 0x0310, 0x0332, 0x0339, 0x033d, 0x0343, 0x034b, 0x034b, 0x0352, + 0x0358, 0x035e, 0x0363, 0x036f, 0x0377, 0x037f, 0x0384, 0x0393, + // Entry 80 - BF + 0x03a7, 0x03b4, 0x03b9, 0x03ca, 0x03d3, 0x03d7, 0x03dd, 0x03e5, + 0x03ef, 0x03f7, 0x03fe, 0x0408, 0x0410, 0x041a, 0x0420, 0x0425, + 0x042c, 0x0432, 0x043a, 0x043a, 0x043a, 0x0445, 0x0456, 0x045f, + 0x0463, 0x046a, 0x0472, 0x0472, 0x0492, 0x049a, 0x04a7, 0x04af, + 0x04b6, 0x04bb, 0x04c1, 0x04c7, 0x04cd, 0x04d4, 0x04db, 0x04e2, + 0x04f4, 0x04fa, 0x050c, 0x0513, 0x051c, 0x0523, 0x0529, 0x052e, + 0x0533, 0x0537, 0x0541, 0x0547, 0x054d, 0x0551, 0x0565, 0x057a, + 0x0582, 0x058a, 0x0591, 0x05a1, 0x05a9, 0x05b3, 0x05cb, 0x05d5, + // Entry C0 - FF + 0x05da, 0x05e2, 0x05e7, 0x05e7, 0x05ef, 0x05f6, 0x05f6, 0x05fb, + 0x0601, 0x060b, 0x061d, 0x0623, 0x0629, 0x062e, 0x0637, 0x063f, + 0x0647, 0x0647, 0x064f, 0x0658, 0x0661, 0x0669, 0x0673, 0x067a, + 0x067a, 0x068d, 0x0695, 0x0695, 0x069a, 0x06a4, 0x06a4, 0x06bc, + 0x06c0, 0x06c0, 0x06c6, 0x06cf, 0x06da, 0x06e2, 0x06ef, 0x06fa, + 0x06fe, 0x0705, 0x070b, 0x071e, 0x0724, 0x072c, 0x0738, 0x073f, + 0x0746, 0x0746, 0x0746, 0x075d, 0x0764, 0x076e, 0x077d, 0x0791, + 0x0799, 0x07b1, 0x07d0, 0x07d6, 0x07df, 0x07ed, 0x07f2, 0x07f2, + // Entry 100 - 13F + 0x07f7, 0x07fe, 0x080d, 0x0813, 0x081b, + }, + }, + { // si + siRegionStr, + siRegionIdx, + }, + { // sk + skRegionStr, + skRegionIdx, + }, + { // sl + slRegionStr, + slRegionIdx, + }, + { // smn + "Ascension-suáluiAndorraArabiemirkodehAfganistanAntigua já BarbudaAnguill" + + "aAlbaniaArmeniaAngolaAntarktisArgentinaAmerika SamoaNuorttâriijkâAus" + + "traliaArubaVuáskueennâmAzerbaidžanBosnia já HerzegovinaBarbadosBangl" + + "adeshBelgiaBurkina FasoBulgariaBahrainBurundiBeninSt. BarthélemyBerm" + + "udaBruneiBoliviaBrasiliaBahamaBhutanBouvetsuáluiBotswanaVielgis-Ruoš" + + "šâBelizeKanadaKookossuolluuh (Keelingsuolluuh)Koskâ-Afrika täsiväld" + + "iSveitsiCôte d’IvoireCooksuolluuhChileKamerunKiinaKolumbiaClipperton" + + "suáluiCosta RicaKuubaCape VerdeCuraçaoJuovlâsuáluiKyprosTšekkiSaksaD" + + "iego GarciaDjiboutiTanskaDominicaDominikaanisâš täsiväldiAlgeriaCeut" + + "a já MelillaEcuadorEestieennâmEgyptiEritreaEspanjaEtiopiaSuomâFidžiF" + + "alklandsuolluuhMikronesia littoväldiFärsuolluuhRanskaGabonOvtâstum K" + + "unâgâskoddeGrenadaGeorgiaRanska GuyanaGuernseyGhanaGibraltarGrönland" + + "GambiaGuineaGuadeloupePeeivitäsideijee GuineaKreikkaMaadâ-Georgia já" + + " Máddááh SandwichsuolluuhGuatemalaGuamGuinea-BissauGuyanaHongkong – " + + "Kiina e.h.k.Heard já McDonaldsuolluuhHondurasKroatiaHaitiUŋgarKanari" + + "asuolluuhIndonesiaIrlandIsraelMansuáluiIndiaBrittilâš India väldimee" + + "râ kuávluIrakIranIslandItaliaJerseyJamaikaJordanJaapaanKeniaKirgisia" + + "KambodžaKiribatiKomorehSt. Kitts já NevisTave-KoreaMaadâ-KoreaKuwait" + + "CaymansuolluuhKazakstanLaosLibanonSt. LuciaLiechtensteinSri LankaLib" + + "eriaLesothoLiettuaLuxemburgLatviaLibyaMarokkoMonacoMoldovaMontenegro" + + "St. MartinMadagaskarMarshallsuolluuhMaliMyanmar (Burma)MongoliaMacao" + + " - – Kiina e.h.k.Tave-MarianehMartiniqueMauritaniaMontserratMaltaMau" + + "ritiusMaledivehMalawiMeksikoMalaysiaMosambikNamibiaUđđâ-KaledoniaNig" + + "erNorfolksuáluiNigeriaNicaraguaVuáládâhenâmehTaažâNepalNauruNiueUđđâ" + + "-SeelandOmanPanamaPeruRanska PolynesiaPapua-Uđđâ-GuineaFilipinehPaki" + + "stanPuolaSt. Pierre já MiquelonPitcairnPuerto RicoPortugalPalauParag" + + "uayQatarRéunionRomaniaSerbiaRuoššâRuandaSaudi ArabiaSalomosuolluuhSe" + + "ychellehSudanRuotâSingaporeSaint HelenaSloveniaČokkeväärih já Jan Ma" + + "yenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinamMaadâ-SudanSão" + + " Tomé já PríncipeEl SalvadorSint MaartenSyriaSwazieennâmTristan da C" + + "unhaTurks- já CaicossuolluuhTšadRanska máddááh kuávluhTogoThaieennâm" + + "TadžikistanTokelauTimor-LesteTurkmenistanTunisiaTongaTurkkiTrinidad " + + "já TobagoTuvaluTaiwanTansaniaUkrainaUgandaOvtâstum Staatâi sierânâss" + + "uolluuhOvtâstum StaatahUruguayUzbekistanVatikanSt. Vincent já Grenad" + + "inesVenezuelaBrittiliih NieidâsuolluuhOvtâstum Staatâi Nieidâsuolluu" + + "hVietnamVanuatuWallis já FutunaSamoaKosovoJemenMayotteMaadâ-AfrikkaS" + + "ambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0011, 0x0018, 0x0026, 0x0030, 0x0043, 0x004b, 0x0052, + 0x0059, 0x005f, 0x0068, 0x0071, 0x007e, 0x008d, 0x0096, 0x009b, + 0x00a9, 0x00b5, 0x00cb, 0x00d3, 0x00dd, 0x00e3, 0x00ef, 0x00f7, + 0x00fe, 0x0105, 0x010a, 0x0119, 0x0120, 0x0126, 0x012d, 0x012d, + 0x0135, 0x013b, 0x0141, 0x014e, 0x0156, 0x0167, 0x016d, 0x0173, + 0x0193, 0x0193, 0x01ac, 0x01ac, 0x01b3, 0x01c3, 0x01cf, 0x01d4, + 0x01db, 0x01e0, 0x01e8, 0x01f9, 0x0203, 0x0208, 0x0212, 0x021a, + 0x0228, 0x022e, 0x0235, 0x023a, 0x0246, 0x024e, 0x0254, 0x025c, + // Entry 40 - 7F + 0x0278, 0x027f, 0x0290, 0x0297, 0x02a3, 0x02a9, 0x02a9, 0x02b0, + 0x02b7, 0x02be, 0x02be, 0x02be, 0x02c4, 0x02ca, 0x02da, 0x02f0, + 0x02fc, 0x0302, 0x0307, 0x031f, 0x0326, 0x032d, 0x033a, 0x0342, + 0x0347, 0x0350, 0x0359, 0x035f, 0x0365, 0x036f, 0x0387, 0x038e, + 0x03bc, 0x03c5, 0x03c9, 0x03d6, 0x03dc, 0x03f5, 0x040f, 0x0417, + 0x041e, 0x0423, 0x0429, 0x0438, 0x0441, 0x0447, 0x044d, 0x0457, + 0x045c, 0x0482, 0x0486, 0x048a, 0x0490, 0x0496, 0x049c, 0x04a3, + 0x04a9, 0x04b0, 0x04b5, 0x04bd, 0x04c6, 0x04ce, 0x04d5, 0x04e8, + // Entry 80 - BF + 0x04f2, 0x04fe, 0x0504, 0x0512, 0x051b, 0x051f, 0x0526, 0x052f, + 0x053c, 0x0545, 0x054c, 0x0553, 0x055a, 0x0563, 0x0569, 0x056e, + 0x0575, 0x057b, 0x0582, 0x058c, 0x0596, 0x05a0, 0x05b0, 0x05b0, + 0x05b4, 0x05c3, 0x05cb, 0x05e3, 0x05f0, 0x05fa, 0x0604, 0x060e, + 0x0613, 0x061c, 0x0625, 0x062b, 0x0632, 0x063a, 0x0642, 0x0649, + 0x065a, 0x065f, 0x066d, 0x0674, 0x067d, 0x068f, 0x0696, 0x069b, + 0x06a0, 0x06a4, 0x06b3, 0x06b7, 0x06bd, 0x06c1, 0x06d1, 0x06e5, + 0x06ee, 0x06f6, 0x06fb, 0x0712, 0x071a, 0x0725, 0x0725, 0x072d, + // Entry C0 - FF + 0x0732, 0x073a, 0x073f, 0x073f, 0x0747, 0x074e, 0x0754, 0x075d, + 0x0763, 0x076f, 0x077d, 0x0787, 0x078c, 0x0792, 0x079b, 0x07a7, + 0x07af, 0x07cb, 0x07d3, 0x07df, 0x07e9, 0x07f0, 0x07f7, 0x07fe, + 0x080a, 0x0822, 0x082d, 0x0839, 0x083e, 0x084a, 0x085a, 0x0873, + 0x0878, 0x0892, 0x0896, 0x08a1, 0x08ad, 0x08b4, 0x08bf, 0x08cb, + 0x08d2, 0x08d7, 0x08dd, 0x08f0, 0x08f6, 0x08fc, 0x0904, 0x090b, + 0x0911, 0x0936, 0x0936, 0x0947, 0x094e, 0x0958, 0x095f, 0x0979, + 0x0982, 0x099c, 0x09be, 0x09c5, 0x09cc, 0x09dd, 0x09e2, 0x09e8, + // Entry 100 - 13F + 0x09ed, 0x09f4, 0x0a02, 0x0a08, 0x0a10, + }, + }, + { // sn + "AndoraUnited Arab EmiratesAfuganistaniAntigua ne BarbudaAnguilaAlbaniaAr" + + "meniaAngolaAjentinaSamoa ye AmerikaAustriaAustraliaArubhaAzabajaniBo" + + "znia ne HerzegovinaBarbadosBangladeshiBeljiumBukinafasoBulgariaBahar" + + "eniBurundiBeniniBermudaBuruneiBoliviaBrazilBahamaBhutaniBotswanaBela" + + "rusiBelizeKanadaDemocratic Republic of the CongoCentral African Repu" + + "blicKongoSwitzerlandIvory CoastZvitsuwa zveCookChileKameruniChinaKol" + + "ombiaKostarikaCubaZvitsuwa zveCape VerdeCyprusCzech RepublicGermanyD" + + "jiboutiDenmarkDominicaDominican RepublicAljeriaEcuadorEstoniaEgyptEr" + + "itreaSpainEtiopiaFinlandFijiZvitsuwa zveFalklandsMicronesiaFranceGab" + + "onUnited KingdomGrenadaGeorgiaFrench GuianaGhanaGibraltarGreenlandGa" + + "mbiaGuineaGuadeloupeEquatorial GuineaGreeceGuatemalaGuamGuinea-Bissa" + + "uGuyanaHondurasKorasiaHaitiHungaryIndonesiaIrelandIzuraeriIndiaBriti" + + "sh Indian Ocean TerritoryIraqIranIcelandItalyJamaicaJordanJapanKenya" + + "KyrgyzstanKambodiaKiribatiKomoroSaint Kitts and NevisKorea, NorthKor" + + "ea, SouthKuwaitZvitsuwa zveCaymanKazakhstanLaosLebanonSaint LuciaLie" + + "chtensteinSri LankaLiberiaLesothoLithuaniaLuxembourgLatviaLibyaMoroc" + + "coMonacoMoldovaMadagascarZvitsuwa zveMarshallMacedoniaMaliMyanmarMon" + + "goliaZvitsuwa zvekumaodzanyemba eMarianaMartiniqueMauritaniaMontserr" + + "atMaltaMauritiusMaldivesMalawiMexicoMalaysiaMozambiqueNamibiaNew Cal" + + "edoniaNigerChitsuwa cheNorfolkNigeriaNicaraguaNetherlandsNorwayNepal" + + "NauruNiueNew ZealandOmanPanamaPeruFrench PolynesiaPapua New GuineaPh" + + "ilippinesPakistanPolandSaint Pierre and MiquelonPitcairnPuerto RicoP" + + "ortugalPalauParaguayQatarRéunionRomaniaRussiaRwandaSaudi ArabiaZvits" + + "uwa zvaSolomonSeychellesSudanSwedenSingaporeSaint HelenaSloveniaSlov" + + "akiaSierra LeoneSan MarinoSenegalSomaliaSurinameSão Tomé and Príncip" + + "eEl SalvadorSyriaSwazilandZvitsuwa zveTurk neCaicoChadiTogoThailandT" + + "ajikistanTokelauEast TimorTurkmenistanTunisiaTongaTurkeyTrinidad and" + + " TobagoTuvaluTaiwanTanzaniaUkraineUgandaAmerikaUruguayUzbekistanVati" + + "can StateSaint Vincent and the GrenadinesVenezuelaZvitsuwa zveHingir" + + "andiZvitsuwa zveAmerikaVietnamVanuatuWallis and FutunaSamoaYemenMayo" + + "tteSouth AfricaZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x001a, 0x0026, 0x0038, 0x003f, 0x0046, + 0x004d, 0x0053, 0x0053, 0x005b, 0x006b, 0x0072, 0x007b, 0x0081, + 0x0081, 0x008a, 0x009f, 0x00a7, 0x00b2, 0x00b9, 0x00c3, 0x00cb, + 0x00d3, 0x00da, 0x00e0, 0x00e0, 0x00e7, 0x00ee, 0x00f5, 0x00f5, + 0x00fb, 0x0101, 0x0108, 0x0108, 0x0110, 0x0118, 0x011e, 0x0124, + 0x0124, 0x0144, 0x015c, 0x0161, 0x016c, 0x0177, 0x0187, 0x018c, + 0x0194, 0x0199, 0x01a1, 0x01a1, 0x01aa, 0x01ae, 0x01c4, 0x01c4, + 0x01c4, 0x01ca, 0x01d8, 0x01df, 0x01df, 0x01e7, 0x01ee, 0x01f6, + // Entry 40 - 7F + 0x0208, 0x020f, 0x020f, 0x0216, 0x021d, 0x0222, 0x0222, 0x0229, + 0x022e, 0x0235, 0x0235, 0x0235, 0x023c, 0x0240, 0x0255, 0x025f, + 0x025f, 0x0265, 0x026a, 0x0278, 0x027f, 0x0286, 0x0293, 0x0293, + 0x0298, 0x02a1, 0x02aa, 0x02b0, 0x02b6, 0x02c0, 0x02d1, 0x02d7, + 0x02d7, 0x02e0, 0x02e4, 0x02f1, 0x02f7, 0x02f7, 0x02f7, 0x02ff, + 0x0306, 0x030b, 0x0312, 0x0312, 0x031b, 0x0322, 0x032a, 0x032a, + 0x032f, 0x034d, 0x0351, 0x0355, 0x035c, 0x0361, 0x0361, 0x0368, + 0x036e, 0x0373, 0x0378, 0x0382, 0x038a, 0x0392, 0x0398, 0x03ad, + // Entry 80 - BF + 0x03b9, 0x03c5, 0x03cb, 0x03dd, 0x03e7, 0x03eb, 0x03f2, 0x03fd, + 0x040a, 0x0413, 0x041a, 0x0421, 0x042a, 0x0434, 0x043a, 0x043f, + 0x0446, 0x044c, 0x0453, 0x0453, 0x0453, 0x045d, 0x0471, 0x047a, + 0x047e, 0x0485, 0x048d, 0x048d, 0x04b0, 0x04ba, 0x04c4, 0x04ce, + 0x04d3, 0x04dc, 0x04e4, 0x04ea, 0x04f0, 0x04f8, 0x0502, 0x0509, + 0x0516, 0x051b, 0x052e, 0x0535, 0x053e, 0x0549, 0x054f, 0x0554, + 0x0559, 0x055d, 0x0568, 0x056c, 0x0572, 0x0576, 0x0586, 0x0596, + 0x05a1, 0x05a9, 0x05af, 0x05c8, 0x05d0, 0x05db, 0x05db, 0x05e3, + // Entry C0 - FF + 0x05e8, 0x05f0, 0x05f5, 0x05f5, 0x05fd, 0x0604, 0x0604, 0x060a, + 0x0610, 0x061c, 0x062f, 0x0639, 0x063e, 0x0644, 0x064d, 0x0659, + 0x0661, 0x0661, 0x0669, 0x0675, 0x067f, 0x0686, 0x068d, 0x0695, + 0x0695, 0x06ad, 0x06b8, 0x06b8, 0x06bd, 0x06c6, 0x06c6, 0x06de, + 0x06e3, 0x06e3, 0x06e7, 0x06ef, 0x06f9, 0x0700, 0x070a, 0x0716, + 0x071d, 0x0722, 0x0728, 0x073b, 0x0741, 0x0747, 0x074f, 0x0756, + 0x075c, 0x075c, 0x075c, 0x0763, 0x076a, 0x0774, 0x0781, 0x07a1, + 0x07aa, 0x07c0, 0x07d3, 0x07da, 0x07e1, 0x07f2, 0x07f7, 0x07f7, + // Entry 100 - 13F + 0x07fc, 0x0803, 0x080f, 0x0815, 0x081d, + }, + }, + { // so + "AndoraImaaraadka Carabta ee MidoobayAfgaanistaanAntigua iyo BarbudaAngui" + + "llaAlbaaniyaArmeeniyaAngoolaArjantiinSamowa AmeerikaAwsteriyaAwstara" + + "aliyaArubaAzerbajaanBosniya HersigoviinaBaarbadoosBangaaladheeshBilj" + + "amBurkiina FaasoBulgaariyaBaxreynBurundiBiniinBermuudaBuruneeyaBolii" + + "fiyaBraasiilBahaamasBhutanBotuswaanaBelarusBelizeKanadaJamhuuriyadda" + + " Dimuquraadiga KongoJamhuuriyadda Afrikada DhexeKongoSwiiserlaandIvo" + + "ry coastJaziiradda CookJiliKaameruunShiinahaKolombiyaKosta RiikaKuub" + + "aCape Verde IslandsQubrusJamhuuriyadda JekJarmalJabuutiDenmarkDomeen" + + "ikaJamhuuriyadda DomeenikaAljeeriyaIkuwadoorEstooniyaMasarEretereeya" + + "IsbeynItoobiyaFinlandFijiJaziiradaha FooklaanMicronesiaFaransiisGaab" + + "oonUnited KingdomGiriinaadaJoorjiyaFrench GuianaGaanaGibraltarGreenl" + + "andGambiyaGiniGuadeloupeEquatorial GuineaGiriigGuwaatamaalaGuamGini-" + + "BisaawGuyanaHondurasKorweeshiyaHaytiHangeriIndoneesiyaAyrlaandIsraaʼ" + + "iilHindiyaBritish Indian Ocean TerritoryCiraaqIiraanIislaandTalyaani" + + "JameykaUrdunJabaanKiiniyaKirgistaanKamboodiyaKiribatiKomoorosSaint K" + + "itts and NevisKuuriyada WaqooyiKuuriyada KoonfureedKuwaytCayman Isla" + + "ndsKasaakhistaanLaosLubnaanSaint LuciaLiechtensteinSirilaankaLaybeer" + + "iyaLosootoLituweeniyaLuksemboorgLatfiyaLiibiyaMarookoMoonakoMoldofaM" + + "adagaskarMarshall IslandsMakadooniyaMaaliMiyanmarMongooliyaNorthern " + + "Mariana IslandsMartiniqueMuritaaniyaMontserratMaaldaMurishiyoosMaald" + + "iqeenMalaawiMeksikoMalaysiaMusambiigNamiibiyaNew CaledoniaNayjerNorf" + + "olk IslandNayjeeriyaNikaraaguwaNetherlandsNoorweeyNebaalNauruNiueNey" + + "uusilaandCumaanPanamaPeruFrench PolynesiaPapua New GuineaFilibiinBak" + + "istaanBoolandSaint Pierre and MiquelonPitcairnPuerto RicoFalastiin D" + + "aanka galbeed iyo QasaBortuqaalPalauParaguayQadarRéunionRumaaniyaRuu" + + "shRuwandaSacuudi CarabiyaSolomon IslandsSishelisSuudaanIswidhanSinga" + + "boorSaint HelenaSloveniaSlovakiaSiraaliyoonSan MarinoSinigaalSoomaal" + + "iyaSurinameSão Tomé and PríncipeEl SalvadorSuuriyaIswaasilaandTurks " + + "and Caicos IslandsJaadToogoTaylaandTajikistanTokelauTimorka bariTurk" + + "menistanTuniisiyaTongaTurkiTrinidad and TobagoTuvaluTaywaanTansaaniy" + + "aUkraynUgaandaMaraykankaUruguwaayUusbakistaanFaatikaanSaint Vincent " + + "and the GrenadinesFenisuweelaBritish Virgin IslandsU.S. Virgin Islan" + + "dsFiyetnaamVanuatuWallis and FutunaSamoaYamanMayotteKoonfur AfrikaSa" + + "ambiyaSimbaabweFar aan la aqoon amase aan saxnayn", + []uint16{ // 262 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0024, 0x0030, 0x0043, 0x004b, 0x0054, + 0x005d, 0x0064, 0x0064, 0x006d, 0x007c, 0x0085, 0x0091, 0x0096, + 0x0096, 0x00a0, 0x00b4, 0x00be, 0x00cc, 0x00d2, 0x00e0, 0x00ea, + 0x00f1, 0x00f8, 0x00fe, 0x00fe, 0x0106, 0x010f, 0x0118, 0x0118, + 0x0120, 0x0128, 0x012e, 0x012e, 0x0138, 0x013f, 0x0145, 0x014b, + 0x014b, 0x016c, 0x0188, 0x018d, 0x0199, 0x01a4, 0x01b3, 0x01b7, + 0x01c0, 0x01c8, 0x01d1, 0x01d1, 0x01dc, 0x01e1, 0x01f3, 0x01f3, + 0x01f3, 0x01f9, 0x020a, 0x0210, 0x0210, 0x0217, 0x021e, 0x0227, + // Entry 40 - 7F + 0x023e, 0x0247, 0x0247, 0x0250, 0x0259, 0x025e, 0x025e, 0x0268, + 0x026e, 0x0276, 0x0276, 0x0276, 0x027d, 0x0281, 0x0295, 0x029f, + 0x029f, 0x02a8, 0x02af, 0x02bd, 0x02c7, 0x02cf, 0x02dc, 0x02dc, + 0x02e1, 0x02ea, 0x02f3, 0x02fa, 0x02fe, 0x0308, 0x0319, 0x031f, + 0x031f, 0x032b, 0x032f, 0x033a, 0x0340, 0x0340, 0x0340, 0x0348, + 0x0353, 0x0358, 0x035f, 0x035f, 0x036a, 0x0372, 0x037c, 0x037c, + 0x0383, 0x03a1, 0x03a7, 0x03ad, 0x03b5, 0x03bd, 0x03bd, 0x03c4, + 0x03c9, 0x03cf, 0x03d6, 0x03e0, 0x03ea, 0x03f2, 0x03fa, 0x040f, + // Entry 80 - BF + 0x0420, 0x0434, 0x043a, 0x0448, 0x0455, 0x0459, 0x0460, 0x046b, + 0x0478, 0x0482, 0x048c, 0x0493, 0x049e, 0x04a9, 0x04b0, 0x04b7, + 0x04be, 0x04c5, 0x04cc, 0x04cc, 0x04cc, 0x04d6, 0x04e6, 0x04f1, + 0x04f6, 0x04fe, 0x0508, 0x0508, 0x0520, 0x052a, 0x0535, 0x053f, + 0x0545, 0x0550, 0x055a, 0x0561, 0x0568, 0x0570, 0x0579, 0x0582, + 0x058f, 0x0595, 0x05a3, 0x05ad, 0x05b8, 0x05c3, 0x05cb, 0x05d1, + 0x05d6, 0x05da, 0x05e6, 0x05ec, 0x05f2, 0x05f6, 0x0606, 0x0616, + 0x061e, 0x0627, 0x062e, 0x0647, 0x064f, 0x065a, 0x067b, 0x0684, + // Entry C0 - FF + 0x0689, 0x0691, 0x0696, 0x0696, 0x069e, 0x06a7, 0x06a7, 0x06ac, + 0x06b3, 0x06c3, 0x06d2, 0x06da, 0x06e1, 0x06e9, 0x06f2, 0x06fe, + 0x0706, 0x0706, 0x070e, 0x0719, 0x0723, 0x072b, 0x0735, 0x073d, + 0x073d, 0x0755, 0x0760, 0x0760, 0x0767, 0x0773, 0x0773, 0x078b, + 0x078f, 0x078f, 0x0794, 0x079c, 0x07a6, 0x07ad, 0x07b9, 0x07c5, + 0x07ce, 0x07d3, 0x07d8, 0x07eb, 0x07f1, 0x07f8, 0x0802, 0x0808, + 0x080f, 0x080f, 0x080f, 0x0819, 0x0822, 0x082e, 0x0837, 0x0857, + 0x0862, 0x0878, 0x088b, 0x0894, 0x089b, 0x08ac, 0x08b1, 0x08b1, + // Entry 100 - 13F + 0x08b6, 0x08bd, 0x08cb, 0x08d3, 0x08dc, 0x08fe, + }, + }, + { // sq + sqRegionStr, + sqRegionIdx, + }, + { // sr + srRegionStr, + srRegionIdx, + }, + { // sr-Cyrl-BA + "БјелорусијаКонгоОбала Слоноваче (Кот д’Ивоар)Кабо ВердеЧешка РепубликаЊе" + + "мачкаСвети Китс и НевисСАР МакаоСвети Пјер и МикелонРеунионТимор-Ле" + + "сте (Источни Тимор)Мања удаљена острва САДСвети Винсент и Гренадини" + + "Британска Дјевичанска ОстрваАмеричка Дјевичанска Острва", + []uint16{ // 251 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0016, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0020, 0x0020, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0086, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + // Entry 40 - 7F + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x00b5, + // Entry 80 - BF + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, + 0x00c6, 0x00c6, 0x00c6, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, + // Entry C0 - FF + 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00f9, 0x00f9, 0x00f9, 0x00f9, + 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, + 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, + 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, + 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x012a, 0x012a, + 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, + 0x012a, 0x0155, 0x0155, 0x0155, 0x0155, 0x0155, 0x0155, 0x0184, + 0x0184, 0x01ba, 0x01ee, + }, + }, + { // sr-Cyrl-ME + "БјелорусијаКонгоОбала Слоноваче (Кот д’Ивоар)Чешка РепубликаЊемачкаСвети" + + " Китс и НевисСвети Пјер и МикелонРеунионТимор-Лесте (Источни Тимор)М" + + "ања удаљена острва САДСвети Винсент и ГренадиниБританска Дјевичанск" + + "а ОстрваАмеричка Дјевичанска Острва", + []uint16{ // 251 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0016, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0020, 0x0020, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0073, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + // Entry 40 - 7F + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x00a2, + // Entry 80 - BF + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, + // Entry C0 - FF + 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0160, + 0x0160, 0x0196, 0x01ca, + }, + }, + { // sr-Cyrl-XK + "КонгоОбала Слоноваче (Кот д’Ивоар)Кабо ВердеЧешка РепубликаСАР ХонгконгС" + + "вети Китс и НевисСАР МакаоСвети Пјер и МикелонРеунионТимор-Лесте (И" + + "сточни Тимор)Мања удаљена острва САДСвети Винсент и Гренадини", + []uint16{ // 248 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + // Entry 40 - 7F + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x00a8, + // Entry 80 - BF + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00b9, 0x00b9, 0x00b9, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + // Entry C0 - FF + 0x00de, 0x00de, 0x00de, 0x00de, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x011d, 0x011d, + 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, + 0x011d, 0x0148, 0x0148, 0x0148, 0x0148, 0x0148, 0x0148, 0x0177, + }, + }, + { // sr-Latn + srLatnRegionStr, + srLatnRegionIdx, + }, + { // sr-Latn-BA + "BjelorusijaKongoObala Slonovače (Kot d’Ivoar)Kabo VerdeČeška RepublikaNj" + + "emačkaSveti Kits i NevisSAR MakaoSveti Pjer i MikelonReunionTimor-Le" + + "ste (Istočni Timor)Manja udaljena ostrva SADSveti Vinsent i Grenadin" + + "iBritanska Djevičanska OstrvaAmerička Djevičanska Ostrva", + []uint16{ // 251 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x000b, 0x000b, + 0x000b, 0x000b, 0x000b, 0x0010, 0x0010, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x003a, 0x003a, + 0x003a, 0x003a, 0x004b, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + // Entry 40 - 7F + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0066, + // Entry 80 - BF + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, + 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, + 0x006f, 0x006f, 0x006f, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, + // Entry C0 - FF + 0x0083, 0x0083, 0x0083, 0x0083, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x00a6, 0x00a6, + 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, + 0x00a6, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00d8, + 0x00d8, 0x00f5, 0x0112, + }, + }, + { // sr-Latn-ME + "BjelorusijaKongoObala Slonovače (Kot d’Ivoar)Češka RepublikaNjemačkaSvet" + + "i Kits i NevisSveti Pjer i MikelonReunionTimor-Leste (Istočni Timor)" + + "Manja udaljena ostrva SADSveti Vinsent i GrenadiniBritanska Djevičan" + + "ska OstrvaAmerička Djevičanska Ostrva", + []uint16{ // 251 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x000b, 0x000b, + 0x000b, 0x000b, 0x000b, 0x0010, 0x0010, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0041, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + // Entry 40 - 7F + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x005c, + // Entry 80 - BF + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + // Entry C0 - FF + 0x0070, 0x0070, 0x0070, 0x0070, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0093, 0x0093, + 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, + 0x0093, 0x00ac, 0x00ac, 0x00ac, 0x00ac, 0x00ac, 0x00ac, 0x00c5, + 0x00c5, 0x00e2, 0x00ff, + }, + }, + { // sr-Latn-XK + "KongoObala Slonovače (Kot d’Ivoar)Kabo VerdeČeška RepublikaSAR HongkongS" + + "veti Kits i NevisSAR MakaoSveti Pjer i MikelonReunionTimor-Leste (Is" + + "točni Timor)Manja udaljena ostrva SADSveti Vinsent i Grenadini", + []uint16{ // 248 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0005, 0x0005, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x002f, 0x002f, + 0x002f, 0x002f, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + // Entry 40 - 7F + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x005e, + // Entry 80 - BF + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, + 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, + 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, + 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, + 0x0067, 0x0067, 0x0067, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + // Entry C0 - FF + 0x007b, 0x007b, 0x007b, 0x007b, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x009e, 0x009e, + 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, + 0x009e, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00d0, + }, + }, + { // sv + svRegionStr, + svRegionIdx, + }, + {}, // sv-FI + { // sw + swRegionStr, + swRegionIdx, + }, + { // sw-CD + "AfuganistaniAzabajaniBeniniKodivaaKisiwa cha ChristmasSaiprasiDenmakiKro" + + "eshiaYordaniLebanoniLishenteniLasembagiLativiaMorokoMyamaMaldiviNije" + + "riNijeriaNorweNepaliOmaniPuetorikoKatariSudaniSao Tome na PrinsipeCh" + + "adiTimori ya MasharikiVietnamuAsia Mashariki", + []uint16{ // 277 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x0022, 0x0022, 0x0022, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, + 0x0036, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x0045, 0x0045, + // Entry 40 - 7F + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + // Entry 80 - BF + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x005c, 0x005c, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x006f, 0x0076, 0x0076, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0081, 0x0081, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, + 0x0088, 0x008e, 0x008e, 0x0095, 0x0095, 0x0095, 0x009a, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00ae, 0x00ae, 0x00ae, + // Entry C0 - FF + 0x00ae, 0x00ae, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00e6, 0x00e6, + 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, + 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, + 0x00e6, 0x00e6, 0x00e6, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + // Entry 100 - 13F + 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00fc, + }, + }, + { // sw-KE + "AzabajaniIvorikostiKisiwa cha ChristmasSaiprasiGwadelupeYordaniLebanoniL" + + "ishtensteniLesothoLasembagiLativiaMaldiviNijerNijeriaNorweNepaliOman" + + "iPuetorikoKatariSurinameSao Tome na PrinsipeChadiVietnamu", + []uint16{ // 252 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0013, 0x0013, 0x0013, + 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, + 0x0027, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + // Entry 40 - 7F + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + // Entry 80 - BF + 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0047, 0x0047, + 0x0053, 0x0053, 0x0053, 0x005a, 0x005a, 0x0063, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, + 0x0071, 0x0076, 0x0076, 0x007d, 0x007d, 0x007d, 0x0082, 0x0088, + 0x0088, 0x0088, 0x0088, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, + 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x0096, 0x0096, 0x0096, + // Entry C0 - FF + 0x0096, 0x0096, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x00a4, + 0x00a4, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, + 0x00bd, 0x00bd, 0x00bd, 0x00c5, + }, + }, + { // ta + taRegionStr, + taRegionIdx, + }, + { // te + teRegionStr, + teRegionIdx, + }, + { // teo + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKeniaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // th + thRegionStr, + thRegionIdx, + }, + {}, // ti + { // to + "Motu ʻAsenisiniʻAnitolaʻAlepea FakatahatahaʻAfikānisitaniAnitikua mo Pal" + + "aputaAnikuilaʻAlipaniaʻĀmeniaʻAngikolaʻAnitātikaʻAsenitinaHaʻamoa ʻA" + + "melikaʻAosituliaʻAositelēliaʻAlupaʻOtumotu ʻAlaniʻAsapaisaniPosinia " + + "mo HesikōvinaPāpeitosiPengilātesiPelesiumePekano FasoPulukaliaPalein" + + "iPulunitiPeniniSā PatēlemiPēmutaPuluneiPolīviaKalipiane fakahōlaniPa" + + "lāsiliPahamaPūtaniMotu PuvetiPotisiuanaPelalusiPeliseKānataʻOtumotu " + + "KokoKongo - KinisasaLipapilika ʻAfilika LotolotoKongo - PalasavilaSu" + + "isilaniMatafonua ʻAivolīʻOtumotu KukiSiliKameluniSiainaKolomipiaMotu" + + " KilipatoniKosita LikaKiupaMuiʻi VēteKulasaoMotu KilisimasiSaipalesi" + + "Lipapilika SekiSiamaneTieko KāsiaSiputiTenimaʻakeTominikaLipapilika " + + "TominikaʻAisiliaSiuta mo MelilaʻEkuetoaʻEsitōniaʻIsipiteSahala fakah" + + "ihifoʻElituliaSipeiniʻĪtiōpiaʻIulope fakatahatahaFinilaniFisiʻOtumot" + + "u FokulaniMikolonīsiaʻOtumotu FaloeFalanisēKaponiPilitāniaKelenatāSe" + + "ōsiaKuiana fakafalanisēKuenisīKanaSipalālitāKulinilaniKamipiaKiniKu" + + "atalupeʻEkueta KiniKalisiʻOtumotu Seōsia-tonga mo Saniuisi-tongaKuat" + + "amalaKuamuKini-PisauKuianaHongi Kongi SAR SiainaʻOtumotu Heati mo Ma" + + "kitonaliHonitulasiKuloisiaHaitiHungakaliaʻOtumotu KaneliʻInitonēsiaʻ" + + "AealaniʻIsileliMotu ManiʻInitiaPotu fonua moana ʻInitia fakapilitāni" + + "aʻIlaakiʻIlaaniʻAisilaniʻĪtaliSelusīSamaikaSoataneSiapaniKeniāKīkisi" + + "taniKamipōtiaKilipasiKomolosiSā Kitisi mo NevisiKōlea tokelauKōlea t" + + "ongaKueitiʻOtumotu KeimeniKasakitaniLauLepanoniSā LūsiaLikitenisitei" + + "niSīlangikāLaipeliaLesotoLituaniaLakisimipekiLativiaLīpiaMolokoMonak" + + "oMolotovaMonitenikaloSā Mātini (fakafalanisē)MatakasikaʻOtumotu Māso" + + "loMasetōniaMāliPemaMongokōliaMakau SAR SiainaʻOtumotu Maliana tokela" + + "uMātenikiMauliteniaMoʻungaselatiMalitaMaulitiusiMalativisiMalauiMeki" + + "sikouMalēsiaMosēmipikiNamipiaNiu KaletōniaNisiaMotu NōfolikiNaisilia" + + "NikalakuaHōlaniNoauēNepaliNauluNiuēNuʻusilaʻOmaniPanamāPelūPolinisia" + + " fakafalanisēPapuaniukiniFilipainiPākisitaniPolaniSā Piea mo Mikelon" + + "iʻOtumotu PitikeniPuēto LikoPotu PalesitainePotukaliPalauPalakuaiKat" + + "āʻOsēnia mamaʻoLēunioniLomēniaSēpiaLūsiaLuanitāSaute ʻAlepeaʻOtumot" + + "u SolomoneʻOtumotu SeiseliSūteniSuēteniSingapoaSā HelenaSilōveniaSiv" + + "olopāti mo Sani MaieniSilōvakiaSiela LeoneSā MalinoSenekaloSōmaliaSu" + + "linameSūtani fakatongaSao Tomē mo PilinisipeʻEle SalavatoaSā Mātini " + + "(fakahōlani)SīliaSuasilaniTulisitani ta KunuhaʻOtumotu Tuki mo Kaiko" + + "siSātiPotu fonua tonga fakafalanisēTokoTailaniTasikitaniTokelauTimoa" + + " hahakeTūkimenisitaniTunīsiaTongaToakeTilinitati mo TopakoTūvaluTaiu" + + "aniTenisāniaʻŪkalaʻineʻIukanitāʻOtumotu siʻi ʻo ʻAmelikaPuleʻanga fa" + + "katahataha ʻAmelikaʻUlukuaiʻUsipekitaniKolo VatikaniSā Viniseni mo K" + + "ulenatiniVenesuelaʻOtumotu Vilikini fakapilitāniaʻOtumotu Vilikini f" + + "akaʻamelikaVietinamiVanuatuʻUvea mo FutunaHaʻamoaKōsovoIemeniMaioteʻ" + + "Afilika tongaSemipiaSimipapueiPotu fonua taʻeʻiloa pe halaMāmaniʻAfi" + + "likaʻAmelika tokelauʻAmelika tongaʻOsēniaʻAfilika fakahihifoʻAmelika" + + " lotolotoʻAfilika fakahahakeʻAfilika fakatokelauʻAfilika lotolotoʻAf" + + "ilika fakatongaOngo ʻAmelikaʻAmelika fakatokelauKalipianeʻĒsia fakah" + + "ahakeʻĒsia fakatongaʻĒsia fakatongahahakeʻIulope fakatongaʻAositelēl" + + "ēsiaMelanīsiaPotu fonua MikolonīsiaPolinīsiaʻĒsiaʻĒsia lotolotoʻĒsi" + + "a fakahihifoʻIulopeʻIulope fakahahakeʻIulope fakatokelauʻIulope faka" + + "hihifoʻAmelika fakalatina", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0019, 0x002e, 0x003e, 0x0052, 0x005a, 0x0064, + 0x006d, 0x0077, 0x0083, 0x008e, 0x00a0, 0x00ab, 0x00b9, 0x00c0, + 0x00d1, 0x00dd, 0x00f3, 0x00fd, 0x0109, 0x0112, 0x011d, 0x0126, + 0x012d, 0x0135, 0x013b, 0x0148, 0x014f, 0x0156, 0x015e, 0x0173, + 0x017c, 0x0182, 0x0189, 0x0194, 0x019e, 0x01a6, 0x01ac, 0x01b3, + 0x01c1, 0x01d1, 0x01ee, 0x0200, 0x0209, 0x021c, 0x022a, 0x022e, + 0x0236, 0x023c, 0x0245, 0x0254, 0x025f, 0x0264, 0x0270, 0x0277, + 0x0286, 0x028f, 0x029e, 0x02a5, 0x02b1, 0x02b7, 0x02c2, 0x02ca, + // Entry 40 - 7F + 0x02dd, 0x02e6, 0x02f5, 0x02fe, 0x0309, 0x0312, 0x0323, 0x032d, + 0x0334, 0x033f, 0x0354, 0x0354, 0x035c, 0x0360, 0x0372, 0x037e, + 0x038d, 0x0396, 0x039c, 0x03a6, 0x03af, 0x03b6, 0x03ca, 0x03d2, + 0x03d6, 0x03e2, 0x03ec, 0x03f3, 0x03f7, 0x0400, 0x040d, 0x0413, + 0x043c, 0x0445, 0x044a, 0x0454, 0x045a, 0x0470, 0x048d, 0x0497, + 0x049f, 0x04a4, 0x04ae, 0x04be, 0x04cb, 0x04d4, 0x04dd, 0x04e6, + 0x04ee, 0x0516, 0x051e, 0x0526, 0x0530, 0x0538, 0x053f, 0x0546, + 0x054d, 0x0554, 0x055a, 0x0565, 0x056f, 0x0577, 0x057f, 0x0593, + // Entry 80 - BF + 0x05a1, 0x05ad, 0x05b3, 0x05c4, 0x05ce, 0x05d1, 0x05d9, 0x05e3, + 0x05f2, 0x05fd, 0x0605, 0x060b, 0x0613, 0x061f, 0x0626, 0x062c, + 0x0632, 0x0638, 0x0640, 0x064c, 0x0667, 0x0671, 0x0682, 0x068c, + 0x0691, 0x0695, 0x06a0, 0x06b0, 0x06c9, 0x06d2, 0x06dc, 0x06ea, + 0x06f0, 0x06fa, 0x0704, 0x070a, 0x0713, 0x071b, 0x0726, 0x072d, + 0x073b, 0x0740, 0x074e, 0x0756, 0x075f, 0x0766, 0x076c, 0x0772, + 0x0777, 0x077c, 0x0785, 0x078c, 0x0793, 0x0798, 0x07af, 0x07bb, + 0x07c4, 0x07cf, 0x07d5, 0x07e9, 0x07fb, 0x0806, 0x0816, 0x081e, + // Entry C0 - FF + 0x0823, 0x082b, 0x0830, 0x0841, 0x084a, 0x0852, 0x0858, 0x085e, + 0x0866, 0x0874, 0x0886, 0x0897, 0x089e, 0x08a6, 0x08ae, 0x08b8, + 0x08c2, 0x08dc, 0x08e6, 0x08f1, 0x08fb, 0x0903, 0x090b, 0x0913, + 0x0924, 0x093b, 0x094a, 0x0963, 0x0969, 0x0972, 0x0986, 0x099f, + 0x09a4, 0x09c2, 0x09c6, 0x09cd, 0x09d7, 0x09de, 0x09ea, 0x09f9, + 0x0a01, 0x0a06, 0x0a0b, 0x0a1f, 0x0a26, 0x0a2d, 0x0a37, 0x0a44, + 0x0a4f, 0x0a6c, 0x0a6c, 0x0a8d, 0x0a96, 0x0aa3, 0x0ab0, 0x0aca, + 0x0ad3, 0x0af4, 0x0b14, 0x0b1d, 0x0b24, 0x0b34, 0x0b3c, 0x0b43, + // Entry 100 - 13F + 0x0b49, 0x0b4f, 0x0b5e, 0x0b65, 0x0b6f, 0x0b8d, 0x0b94, 0x0b9d, + 0x0bae, 0x0bbd, 0x0bc6, 0x0bda, 0x0bec, 0x0c00, 0x0c15, 0x0c27, + 0x0c3a, 0x0c48, 0x0c5d, 0x0c66, 0x0c78, 0x0c89, 0x0ca0, 0x0cb2, + 0x0cc3, 0x0ccd, 0x0ce4, 0x0cee, 0x0cf5, 0x0d05, 0x0d17, 0x0d1f, + 0x0d32, 0x0d46, 0x0d59, 0x0d6d, + }, + }, + { // tr + trRegionStr, + trRegionIdx, + }, + { // twq + "AndooraLaaraw Imaarawey MarganteyAfgaanistanAntigua nda BarbuudaAngiiyaA" + + "lbaaniArmeeniAngoolaArgentineAmeriki SamoaOtrišiOstraaliAruubaAzerba" + + "ayijaŋBosni nda HerzegovineBarbaadosBangladešiBelgiikiBurkina fasoBu" + + "lgaariBahareenBurundiBeniŋBermudaBruuneeBooliviBreezilBahamasBuutaŋB" + + "otswaanaBilorišiBeliiziKanaadaKongoo demookaratiki labooCentraafriki" + + " koyraKongooSwisuKudwarKuuk gungeyŠiiliKameruunŠiinKolombiKosta rika" + + "KuubaKapuver gungeyŠiipurCek laboAlmaaɲeJibuutiDanemarkDoominikiDoom" + + "iniki labooAlžeeriEkwateerEstooniMisraEritreeEspaaɲeEcioopiFinlanduF" + + "ijiKalkan gungeyMikroneziFaransiGaabonAlbaasalaama MargantaGrenaadaG" + + "orgiFaransi GuyaanGaanaGibraltarGrinlandGambiGineGwadeluupGinee Ekwa" + + "torialGreeceGwatemaalaGuamGine-BissoGuyaaneHondurasKrwaasiHaitiHunga" + + "ariIndoneeziIrlanduIsrayelIndu labooBritiši Indu teekoo laamaIraakIr" + + "aanAyselandItaaliJamaayikUrdunJaapoŋKeeniyaKyrgyzstankamboogiKiribaa" + + "tiKomoorSeŋ Kitts nda NevisKooree, GurmaKooree, HawsaKuweetKayman gu" + + "ngeyKaazakstanLaawosLubnaanSeŋ LussiaLiechtensteinSrilankaLiberiaLee" + + "sotoLituaaniLuxembourgLetooniLiibiMaarokMonakoMoldoviMadagascarMarša" + + "l gungeyMaacedooniMaaliMaynamarMongooliMariana Gurma GungeyMartiniik" + + "iMooritaaniMontserratMaltaMooris gungeyMaldiivuMalaawiMexikiMaleeziM" + + "ozambikNaamibiKaaledooni TaagaaNižerNorfolk GungooNaajiriiaNikaragwa" + + "HollanduNorveejNeepalNauruNiueZeelandu TaagaOmaanPanamaPeeruFaransi " + + "PolineeziPapua Ginee TaagaFilipinePaakistanPoloɲeSeŋ Piyer nda Mikel" + + "onPitikarinPorto RikoPalestine Dangay nda GaazaPortugaalPaluParaguwe" + + "yKataarReenioŋRumaaniIriši labooRwandaSaudiyaSolomon GungeySeešelSuu" + + "daŋSweedeSingapurSeŋ HelenaSloveeniSlovaakiSeera LeonSan MarinoSeneg" + + "alSomaaliSurinaamSao Tome nda PrinsipeSalvador labooSuuriaSwazilandT" + + "urk nda Kayikos GungeyCaaduTogoTaayilandTaažikistanTokelauTimoor haw" + + "saTurkmenistaŋTuniziTongaTurkiTrinidad nda TobaagoTuvaluTaayiwanTanz" + + "aaniUkreenUgandaAmeriki Laabu MarganteyUruguweyUzbeekistanVaatikan L" + + "aamaSeŋvinsaŋ nda GrenadineVeneezuyeelaBritiši Virgin gungeyAmeerik " + + "Virgin GungeyVietnaamVanautuWallis nda FutunaSamoaYamanMayootiHawsa " + + "Afriki LabooZambiZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0007, 0x0021, 0x002c, 0x0040, 0x0047, 0x004e, + 0x0055, 0x005c, 0x005c, 0x0065, 0x0072, 0x0079, 0x0081, 0x0087, + 0x0087, 0x0094, 0x00a9, 0x00b2, 0x00bd, 0x00c5, 0x00d1, 0x00d9, + 0x00e1, 0x00e8, 0x00ee, 0x00ee, 0x00f5, 0x00fc, 0x0103, 0x0103, + 0x010a, 0x0111, 0x0118, 0x0118, 0x0121, 0x012a, 0x0131, 0x0138, + 0x0138, 0x0152, 0x0164, 0x016a, 0x016f, 0x0175, 0x0180, 0x0186, + 0x018e, 0x0193, 0x019a, 0x019a, 0x01a4, 0x01a9, 0x01b7, 0x01b7, + 0x01b7, 0x01be, 0x01c6, 0x01ce, 0x01ce, 0x01d5, 0x01dd, 0x01e6, + // Entry 40 - 7F + 0x01f5, 0x01fd, 0x01fd, 0x0205, 0x020c, 0x0211, 0x0211, 0x0218, + 0x0220, 0x0227, 0x0227, 0x0227, 0x022f, 0x0233, 0x0240, 0x0249, + 0x0249, 0x0250, 0x0256, 0x026b, 0x0273, 0x0278, 0x0286, 0x0286, + 0x028b, 0x0294, 0x029c, 0x02a1, 0x02a5, 0x02ae, 0x02be, 0x02c4, + 0x02c4, 0x02ce, 0x02d2, 0x02dc, 0x02e3, 0x02e3, 0x02e3, 0x02eb, + 0x02f2, 0x02f7, 0x02ff, 0x02ff, 0x0308, 0x030f, 0x0316, 0x0316, + 0x0320, 0x033a, 0x033f, 0x0344, 0x034c, 0x0352, 0x0352, 0x035a, + 0x035f, 0x0366, 0x036d, 0x0377, 0x037f, 0x0388, 0x038e, 0x03a2, + // Entry 80 - BF + 0x03af, 0x03bc, 0x03c2, 0x03cf, 0x03d9, 0x03df, 0x03e6, 0x03f1, + 0x03fe, 0x0406, 0x040d, 0x0414, 0x041c, 0x0426, 0x042d, 0x0432, + 0x0438, 0x043e, 0x0445, 0x0445, 0x0445, 0x044f, 0x045d, 0x0467, + 0x046c, 0x0474, 0x047c, 0x047c, 0x0490, 0x049a, 0x04a4, 0x04ae, + 0x04b3, 0x04c0, 0x04c8, 0x04cf, 0x04d5, 0x04dc, 0x04e4, 0x04eb, + 0x04fc, 0x0502, 0x0510, 0x0519, 0x0522, 0x052a, 0x0531, 0x0537, + 0x053c, 0x0540, 0x054e, 0x0553, 0x0559, 0x055e, 0x056f, 0x0580, + 0x0588, 0x0591, 0x0598, 0x05ae, 0x05b7, 0x05c1, 0x05db, 0x05e4, + // Entry C0 - FF + 0x05e8, 0x05f1, 0x05f7, 0x05f7, 0x05ff, 0x0606, 0x0606, 0x0612, + 0x0618, 0x061f, 0x062d, 0x0634, 0x063b, 0x0641, 0x0649, 0x0654, + 0x065c, 0x065c, 0x0664, 0x066e, 0x0678, 0x067f, 0x0686, 0x068e, + 0x068e, 0x06a3, 0x06b1, 0x06b1, 0x06b7, 0x06c0, 0x06c0, 0x06d7, + 0x06dc, 0x06dc, 0x06e0, 0x06e9, 0x06f5, 0x06fc, 0x0708, 0x0715, + 0x071b, 0x0720, 0x0725, 0x0739, 0x073f, 0x0747, 0x074f, 0x0755, + 0x075b, 0x075b, 0x075b, 0x0772, 0x077a, 0x0785, 0x0793, 0x07ac, + 0x07b8, 0x07ce, 0x07e3, 0x07eb, 0x07f2, 0x0803, 0x0808, 0x0808, + // Entry 100 - 13F + 0x080d, 0x0814, 0x0826, 0x082b, 0x0833, + }, + }, + { // tzm + "AnḍurraImarat Tiεrabin TidduklinAfɣanistanAntigwa d BarbudaAngwillaAlban" + + "yaArminyaAngulaArjuntinSamwa ImirikaniyyinUstriyyaUsṭralyaArubaAzerb" + + "iǧanBusna-d-HirsikBarbadusBangladicBeljikaBurkina FasuBelɣaryaBaḥray" + + "nBurundiBininBirmudaBrunayBulivyaBṛazilBahamasBuṭanButswanaBilarusya" + + "BilizKanadaTagduda Tadimuqraṭit n KunguTagduda n Afrika WammasKunguS" + + "wisraTaɣazut n UszerTigzirin n KukCciliKamerunṢṣinKulumbyaKusṭa Rika" + + "kubaTigzirin n Iɣf UzegzawQubrusTagduda n ČikAlmanyaǦibutiDanmarkḌum" + + "inikaTagduda n ḌuminikanDzayerIkwaḍurIsṭunyaMiṣrIritryaSbanyaItyupya" + + "FinlanḍaFijiTigzirin n FalklandMikrunizyaFṛansaGabunTagelda Taddukel" + + "tGrinadaJyurjyaGuyana TafransistƔanaJibralṭarGrinlanḍaGambyaƔinyaGwa" + + "dalupƔinya Tikwaṭur itYunanGwatimalaGwamƔinya-BissawGuyanaHindurasKr" + + "watyaHaytiHenɣaryaIndunizyaIrlanḍaIsraeilHindAmur n Agaraw Uhindi Ub" + + "ṛiṭaniƐiraqIranIslanḍaIṭalyaJamaykaUrḍunJjappunKinyaKirɣistanKambu" + + "djKiribatiQumurSantekits d NivisKurya TugafatKurya TunẓultKuwwaytTig" + + "zirin n KaymanKazaxistanLawsLubnanSantelusyaLictencṭaynSrilankaLibir" + + "yaLisuṭuLitwanyaLiksumburgLiṭṭunyaLibyaMeṛṛukMunakuMulḍavyaMadaɣacqa" + + "rTigzirin n MarcalMaqdunyaMaliMyanmarManɣulyaTigzirin n Maryana Tuga" + + "fatMartinikMuritanyaMuntsirraMalṭaMurisMaldivMalawiMiksikMalizyaMuza" + + "mbiqNamibyakalidunya TamaynutNnijerTigzirt NurfulkNijiriaNikaragwaHu" + + "lanḍaNnurwijNippalNawruNiwiZilanḍa TamaynutƐummanPanamaPiruPulinizya" + + " TafransistPapwa Ɣinya TamaynutFilippinPakistanPulunyaSantepyir d Mi" + + "kelunPitkirnPurturikuAgemmaḍ Ugut d Ɣazza IfilisṭiniyenPurtuɣalPaluP" + + "aragwayQaṭarRiyyunyunṚumanyaRusyaRuwwanḍaSsaεudiyya TaεrabtTigzirin " + + "n SalumunSsicilSsudanSsewwidSanɣafuraSantehilinSluvinyaSluvakyaSiral" + + "yunSanmarinuSsiniɣalṢṣumalSurinamSawṭumi d PrinsipSalvaḍurSuryaSwazi" + + "lanḍaTigzirin Turkiyyin d TikaykusinTcadṬṭuguṬaylanḍaṬaǧikistanTuklu" + + "Timur TagmuṭTurkmanistanTunesṬungaTurkyaTrinidad d ṬubaguṬuvaluṬaywa" + + "nṬanzanyaUkranyaUɣandaIwunak Idduklen n AmirikaUrugwayUzbakistanAwan" + + "k iɣrem n VatikanSantevinsent d GrinadinVinzwillaTigzirin (Virgin) T" + + "ibṛiṭaniyinTigzirin n Virjin n Iwunak YedduklenViṭnamVanwatuWalis d " + + "FutunaSamwaYamanMayuṭTafrikt TunẓulZambyaZimbabwi", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0009, 0x0023, 0x002e, 0x003f, 0x0047, 0x004e, + 0x0055, 0x005b, 0x005b, 0x0063, 0x0076, 0x007e, 0x0088, 0x008d, + 0x008d, 0x0097, 0x00a5, 0x00ad, 0x00b6, 0x00bd, 0x00c9, 0x00d2, + 0x00db, 0x00e2, 0x00e7, 0x00e7, 0x00ee, 0x00f4, 0x00fb, 0x00fb, + 0x0103, 0x010a, 0x0111, 0x0111, 0x0119, 0x0122, 0x0127, 0x012d, + 0x012d, 0x014b, 0x0162, 0x0167, 0x016d, 0x017d, 0x018b, 0x0190, + 0x0197, 0x019f, 0x01a7, 0x01a7, 0x01b3, 0x01b7, 0x01ce, 0x01ce, + 0x01ce, 0x01d4, 0x01e2, 0x01e9, 0x01e9, 0x01f0, 0x01f7, 0x0201, + // Entry 40 - 7F + 0x0216, 0x021c, 0x021c, 0x0225, 0x022e, 0x0234, 0x0234, 0x023b, + 0x0241, 0x0248, 0x0248, 0x0248, 0x0252, 0x0256, 0x0269, 0x0273, + 0x0273, 0x027b, 0x0280, 0x0291, 0x0298, 0x029f, 0x02b0, 0x02b0, + 0x02b5, 0x02c0, 0x02cb, 0x02d1, 0x02d7, 0x02df, 0x02f3, 0x02f8, + 0x02f8, 0x0301, 0x0305, 0x0312, 0x0318, 0x0318, 0x0318, 0x0320, + 0x0327, 0x032c, 0x0335, 0x0335, 0x033e, 0x0347, 0x034e, 0x034e, + 0x0352, 0x0373, 0x0379, 0x037d, 0x0386, 0x038e, 0x038e, 0x0395, + 0x039c, 0x03a3, 0x03a8, 0x03b2, 0x03b9, 0x03c1, 0x03c6, 0x03d7, + // Entry 80 - BF + 0x03e4, 0x03f3, 0x03fa, 0x040b, 0x0415, 0x0419, 0x041f, 0x0429, + 0x0436, 0x043e, 0x0445, 0x044d, 0x0455, 0x045f, 0x046b, 0x0470, + 0x047a, 0x0480, 0x048a, 0x048a, 0x048a, 0x0495, 0x04a6, 0x04ae, + 0x04b2, 0x04b9, 0x04c2, 0x04c2, 0x04dc, 0x04e4, 0x04ed, 0x04f6, + 0x04fd, 0x0502, 0x0508, 0x050e, 0x0514, 0x051b, 0x0523, 0x052a, + 0x053c, 0x0542, 0x0551, 0x0558, 0x0561, 0x056a, 0x0571, 0x0577, + 0x057c, 0x0580, 0x0592, 0x0599, 0x059f, 0x05a3, 0x05b7, 0x05cc, + 0x05d4, 0x05dc, 0x05e3, 0x05f6, 0x05fd, 0x0606, 0x062d, 0x0636, + // Entry C0 - FF + 0x063a, 0x0642, 0x0649, 0x0649, 0x0652, 0x065b, 0x065b, 0x0660, + 0x066a, 0x067e, 0x0690, 0x0696, 0x069c, 0x06a3, 0x06ad, 0x06b7, + 0x06bf, 0x06bf, 0x06c7, 0x06cf, 0x06d8, 0x06e1, 0x06eb, 0x06f2, + 0x06f2, 0x0705, 0x070f, 0x070f, 0x0714, 0x0720, 0x0720, 0x073f, + 0x0743, 0x0743, 0x074c, 0x0758, 0x0765, 0x076a, 0x0778, 0x0784, + 0x0789, 0x0790, 0x0796, 0x07a9, 0x07b1, 0x07b9, 0x07c3, 0x07ca, + 0x07d1, 0x07d1, 0x07d1, 0x07ea, 0x07f1, 0x07fb, 0x0811, 0x0828, + 0x0831, 0x0853, 0x0877, 0x087f, 0x0886, 0x0894, 0x0899, 0x0899, + // Entry 100 - 13F + 0x089e, 0x08a5, 0x08b5, 0x08bb, 0x08c3, + }, + }, + { // ug + "ئاسسېنسىيون ئارىلىئاندوررائەرەب بىرلەشمە خەلىپىلىكىئافغانىستانئانتىگۇئا " + + "ۋە باربۇدائانگۋىللائالبانىيەئەرمېنىيەئانگولائانتاركتىكائارگېنتىنائا" + + "مېرىكا ساموئائاۋىستىرىيەئاۋسترالىيەئارۇبائالاند ئاراللىرىئەزەربەيجا" + + "نبوسىنىيە ۋە گېرتسېگوۋىناباربادوسبېنگالبېلگىيەبۇركىنا فاسوبۇلغارىيە" + + "بەھرەينبۇرۇندىبېنىنساينت بارتېلېمىبېرمۇدابىرۇنېيبولىۋىيەكارىب دېڭىز" + + "ى گوللاندىيەبىرازىلىيەباھامابۇتانبوۋېت ئارىلىبوتسۋانابېلارۇسىيەبېلى" + + "زكاناداكوكوس (كىلىڭ) ئاراللىرىكونگو - كىنشاسائوتتۇرا ئافرىقا جۇمھۇر" + + "ىيىتىكونگو - بىراززاۋىلشىۋېتسارىيەكوتې دې ئىۋوئىركۇك ئاراللىرىچىلىك" + + "امېرونجۇڭگوكولومبىيەكىلىپپېرتون ئاراللىرىكوستارىكاكۇبايېشىل تۇمشۇقك" + + "ۇراچاۋمىلاد ئارىلىسىپرۇسچېخ جۇمھۇرىيىتىگېرمانىيەدېگو-گارشىياجىبۇتىد" + + "انىيەدومىنىكادومىنىكا جۇمھۇرىيىتىئالجىرىيەسېيتا ۋە مېلىلائېكۋاتورئې" + + "ستونىيەمىسىرغەربىي ساخارائېرىترىيەئىسپانىيەئېفىيوپىيەياۋروپا ئىتتىپ" + + "اقىفىنلاندىيەفىجىفالكلاند ئاراللىرىمىكرونېزىيەفارو ئاراللىرىفىرانسى" + + "يەگابونبىرلەشمە پادىشاھلىقگىرېناداگىرۇزىيەفىرانسىيەگە قاراشلىق گىۋى" + + "ياناگۇرنسېيگاناجەبىلتارىقگىرېنلاندىيەگامبىيەگىۋىنىيەگىۋادېلۇپئېكۋات" + + "ور گىۋىنىيەسىگىرېتسىيەجەنۇبىي جورجىيە ۋە جەنۇبىي ساندۋىچ ئاراللىرىگ" + + "ىۋاتېمالاگۇئامگىۋىنىيە بىسسائۇگىۋىياناشياڭگاڭ ئالاھىدە مەمۇرىي رايو" + + "نى (جۇڭگو)ھېرد ئارىلى ۋە ماكدونالد ئاراللىرىھوندۇراسكىرودىيەھايتىۋې" + + "نگىرىيەكانارى ئاراللىرىھىندونېزىيەئىرېلاندىيەئىسرائىلىيەمان ئارىلىھ" + + "ىندىستانئەنگلىيەگە قاراشلىق ھىندى ئوكيان تېررىتورىيەسىئىراقئىرانئىس" + + "لاندىيەئىتالىيەجېرسېييامايكائىيوردانىيەياپونىيەكېنىيەقىرغىزىستانكام" + + "بودژاكىرىباتىكوموروساينت كىتىس ۋە نېۋىسچاۋشيەنكورېيەكۇۋەيتكايمان ئا" + + "راللىرىقازاقىستانلائوسلىۋانساينت لۇسىيەلىكتېنستېينسىرىلانكالىبېرىيە" + + "لېسوتولىتۋانىيەلىيۇكسېمبۇرگلاتۋىيەلىۋىيەماراكەشموناكومولدوۋاقارا تا" + + "غساينت مارتىنماداغاسقارمارشال ئاراللىرىماكېدونىيەمالىبىرماموڭغۇلىيە" + + "ئاۋمېن ئالاھىدە مەمۇرىي رايونىشىمالىي مارىيانا ئاراللىرىمارتىنىكاما" + + "ۋرىتانىيەمونتسېرراتمالتاماۋرىتىيۇسمالدىۋېمالاۋىمېكسىكامالايسىياموزا" + + "مبىكنامىبىيەيېڭى كالېدونىيەنىگېرنورفولك ئارىلىنىگېرىيەنىكاراگۇئاگول" + + "لاندىيەنورۋېگىيەنېپالناۋرۇنيۇئېيېڭى زېلاندىيەئومانپاناماپېرۇفىرانسى" + + "يەگە قاراشلىق پولىنېزىيەپاپۇئا يېڭى گىۋىنىيەسىفىلىپپىنپاكىستانپولشا" + + "ساينت پىيېر ۋە مىكېلون ئاراللىرىپىتكايرن ئاراللىرىپۇئېرتو رىكوپەلەس" + + "تىن زېمىنىپورتۇگالىيەپالائۇپاراگۋايقاتارئوكيانىيە ئەتراپىدىكى ئارال" + + "لاررېيۇنىيونرومىنىيەسېربىيەرۇسىيەرىۋانداسەئۇدىي ئەرەبىستانسولومون ئ" + + "اراللىرىسېيشېلسۇدانشىۋېتسىيەسىنگاپورساينىت ھېلېناسىلوۋېنىيەسىۋالبار" + + "د ۋە يان مايېنسىلوۋاكىيەسېررالېئونسان مارىنوسېنېگالسومالىسۇرىنامجەن" + + "ۇبىي سۇدانسان تومې ۋە پرىنسىپېسالۋادورسىنت مارتېنسۇرىيەسىۋېزىلاندتر" + + "ىستان داكۇنھاتۇركس ۋە كايكوس ئاراللىرىچادفىرانسىيەنىڭ جەنۇبىي زېمىن" + + "ىتوگوتايلاندتاجىكىستانتوكېلاۋشەرقىي تىمورتۈركمەنىستانتۇنىستونگاتۈرك" + + "ىيەتىرىنىداد ۋە توباگوتۇۋالۇتەيۋەنتانزانىيەئۇكرائىنائۇگاندائا ق ش ت" + + "اشقى ئاراللىرىئامېرىكا قوشما ئىشتاتلىرىئۇرۇگۋايئۆزبېكىستانۋاتىكانسا" + + "ينت ۋىنسېنت ۋە گىرېنادىنېسۋېنېسۇئېلائەنگلىيە ۋىرگىن ئاراللىرىئا ق ش" + + " ۋىرگىن ئاراللىرىۋىيېتنامۋانۇئاتۇۋاللىس ۋە فۇتۇناساموئاكوسوۋويەمەنما" + + "يوتىجەنۇبىي ئافرىقازامبىيەزىمبابۋېيوچۇن جايدۇنيائافرىقاشىمالىي ئامې" + + "رىكاجەنۇبىي ئامېرىكائوكيانىيەغەربىي ئافرىقائوتتۇرا ئامېرىكاشەرقىي ئ" + + "افرىقاشىمالىي ئافرىقائوتتۇرا ئافرىقاجەنۇبىي ئافرىقا رايونىئامېرىكاش" + + "ىمالىي ئامېرىكا رايونىكارىب دېڭىزىشەرقىي ئاسىياجەنۇبىي ئاسىياشەرقىي" + + " جەنۇبىي ئاسىياجەنۇبىي ياۋروپائاۋسترالئاسىيامېلانېسىيەمىكرونېزىيە را" + + "يونىپولىنىزىيەئاسىيائوتتۇرا ئاسىياغەربىي ئاسىياياۋروپاشەرقىي ياۋروپ" + + "اشىمالىي ياۋروپاغەربىي ياۋروپالاتىن ئامېرىكا", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0023, 0x0033, 0x0063, 0x0079, 0x009f, 0x00b1, 0x00c3, + 0x00d5, 0x00e3, 0x00f9, 0x010d, 0x012a, 0x0140, 0x0156, 0x0162, + 0x0181, 0x0197, 0x01c5, 0x01d5, 0x01e1, 0x01ef, 0x0206, 0x0218, + 0x0226, 0x0234, 0x023e, 0x025b, 0x0269, 0x0277, 0x0287, 0x02b3, + 0x02c7, 0x02d3, 0x02dd, 0x02f4, 0x0304, 0x0318, 0x0322, 0x032e, + 0x0358, 0x0373, 0x03a7, 0x03c8, 0x03de, 0x03fa, 0x0413, 0x041b, + 0x0429, 0x0433, 0x0445, 0x046e, 0x0480, 0x0488, 0x049f, 0x04ad, + 0x04c4, 0x04d0, 0x04ed, 0x04ff, 0x0516, 0x0522, 0x052e, 0x053e, + // Entry 40 - 7F + 0x0565, 0x0577, 0x0593, 0x05a3, 0x05b5, 0x05bf, 0x05d8, 0x05ea, + 0x05fc, 0x0610, 0x0631, 0x0631, 0x0645, 0x064d, 0x0670, 0x0686, + 0x06a1, 0x06b3, 0x06bd, 0x06e2, 0x06f2, 0x0702, 0x073a, 0x0748, + 0x0750, 0x0764, 0x077c, 0x078a, 0x079a, 0x07ac, 0x07d1, 0x07e3, + 0x0836, 0x084a, 0x0854, 0x0873, 0x0883, 0x08cb, 0x090b, 0x091b, + 0x092b, 0x0935, 0x0947, 0x0966, 0x097c, 0x0992, 0x09a8, 0x09bb, + 0x09cd, 0x0a25, 0x0a2f, 0x0a39, 0x0a4d, 0x0a5d, 0x0a69, 0x0a77, + 0x0a8d, 0x0a9d, 0x0aa9, 0x0abf, 0x0acf, 0x0adf, 0x0aeb, 0x0b10, + // Entry 80 - BF + 0x0b1e, 0x0b2a, 0x0b36, 0x0b55, 0x0b69, 0x0b73, 0x0b7d, 0x0b94, + 0x0baa, 0x0bbc, 0x0bcc, 0x0bd8, 0x0bea, 0x0c02, 0x0c10, 0x0c1c, + 0x0c2a, 0x0c36, 0x0c44, 0x0c53, 0x0c6a, 0x0c7e, 0x0c9d, 0x0cb1, + 0x0cb9, 0x0cc3, 0x0cd5, 0x0d0e, 0x0d40, 0x0d52, 0x0d68, 0x0d7c, + 0x0d86, 0x0d9a, 0x0da8, 0x0db4, 0x0dc2, 0x0dd4, 0x0de4, 0x0df4, + 0x0e11, 0x0e1b, 0x0e36, 0x0e46, 0x0e5a, 0x0e6e, 0x0e80, 0x0e8a, + 0x0e94, 0x0e9e, 0x0eb9, 0x0ec3, 0x0ecf, 0x0ed7, 0x0f13, 0x0f3d, + 0x0f4d, 0x0f5d, 0x0f67, 0x0fa3, 0x0fc6, 0x0fdd, 0x0ffa, 0x1010, + // Entry C0 - FF + 0x101c, 0x102c, 0x1036, 0x1070, 0x1082, 0x1092, 0x10a0, 0x10ac, + 0x10ba, 0x10dd, 0x10fe, 0x110a, 0x1114, 0x1126, 0x1136, 0x114f, + 0x1163, 0x118c, 0x11a0, 0x11b4, 0x11c7, 0x11d5, 0x11e1, 0x11ef, + 0x1208, 0x122d, 0x123d, 0x1252, 0x125e, 0x1272, 0x128f, 0x12be, + 0x12c4, 0x12f8, 0x1300, 0x130e, 0x1322, 0x1330, 0x1347, 0x135f, + 0x1369, 0x1373, 0x1381, 0x13a5, 0x13b1, 0x13bd, 0x13cf, 0x13e1, + 0x13ef, 0x1417, 0x1417, 0x1447, 0x1457, 0x146d, 0x147b, 0x14b0, + 0x14c4, 0x14f4, 0x151e, 0x152e, 0x153e, 0x155c, 0x1568, 0x1574, + // Entry 100 - 13F + 0x157e, 0x158a, 0x15a7, 0x15b5, 0x15c5, 0x15d6, 0x15e0, 0x15ee, + 0x160d, 0x162c, 0x163e, 0x1659, 0x1678, 0x1693, 0x16b0, 0x16cd, + 0x16f7, 0x1707, 0x1733, 0x174a, 0x1763, 0x177e, 0x17a6, 0x17c3, + 0x17df, 0x17f3, 0x1816, 0x182a, 0x1836, 0x1851, 0x186a, 0x1878, + 0x1893, 0x18b0, 0x18cb, 0x18e6, + }, + }, + { // uk + ukRegionStr, + ukRegionIdx, + }, + { // ur + urRegionStr, + urRegionIdx, + }, + { // ur-IN + "جزیرہ اسینشنجزائر آلینڈجزیرہ بوویتجزائر (کیلنگ) کوکوسجزائر ککجزیرہ کلپرٹ" + + "نڈیگو گارشیاجزائر فاکلینڈجزائر فیروفرانسیسی گیاناجزائر ہرڈ و مکڈونل" + + "ڈجزائر کناریبرطانوی بحرہند خطہجزائر مارشلجزائر شمالی ماریاناجزیرہ ن" + + "ارفوکجزائر پٹکیرنجزائر سلیمانترسٹان دا کونیاجزائر کیکس و ترکیہامریک" + + "ی بیرونی جزائربرطانوی جزائر ورجنامریکی جزائر ورجن", + []uint16{ // 251 elements + // Entry 0 - 3F + 0x0000, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0089, 0x0089, 0x0089, 0x0089, 0x009e, 0x009e, 0x009e, 0x009e, + // Entry 40 - 7F + 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, + 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x00b7, 0x00b7, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00e5, 0x00e5, + 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, + 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x0108, 0x0108, + 0x0108, 0x0108, 0x0108, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, + 0x011d, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + // Entry 80 - BF + 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, + 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x013f, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0178, 0x0178, 0x0178, 0x0178, + 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, + 0x0178, 0x0178, 0x018f, 0x018f, 0x018f, 0x018f, 0x018f, 0x018f, + 0x018f, 0x018f, 0x018f, 0x018f, 0x018f, 0x018f, 0x018f, 0x018f, + 0x018f, 0x018f, 0x018f, 0x018f, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + // Entry C0 - FF + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01bd, + 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01bd, + 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01bd, 0x01d9, 0x01fa, + 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, + 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, 0x01fa, + 0x01fa, 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, + 0x021e, 0x0240, 0x0260, + }, + }, + { // uz + uzRegionStr, + uzRegionIdx, + }, + { // uz-Arab + "افغانستان", + []uint16{ // 5 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, + }, + }, + { // uz-Cyrl + "Меърож оролиАндорраБирлашган Араб АмирликлариАфғонистонАнтигуа ва Барбуд" + + "аАнгиляАлбанияАрманистонАнголаАнтарктидаАргентинаАмерика СамоасиАвс" + + "трияАвстралияАрубаАланд ороллариОзарбайжонБосния ва ГерцеговинаБарб" + + "адосБангладешБельгияБуркина-ФасоБолгарияБаҳрайнБурундиБенинСен-Барт" + + "елемиБермудаБрунейБоливияБонейр, Синт-Эстатиус ва СабаБразилияБагам" + + "а ороллариБутанБуве оролиБотсваннаБелорусияБелизКанадаКокос (Килинг" + + ") ороллариКонго-КиншасаМарказий Африка РеспубликасиКонго БраззавильШ" + + "вейцарияКот-д’ИвуарКук ороллариЧилиКамерунХитойКолумбияКлиппертон о" + + "ролиКоста-РикаКубаКабо-ВердеКюрасаоРождество оролиКипрЧехия Республ" + + "икасиГерманияДиего-ГарсияЖибутиДанияДоминикаДоминикан РеспубликасиЖ" + + "азоирСэута ва МелиллаЭквадорЭстонияМисрҒарбий Саҳрои КабирЭритреяИс" + + "панияЭфиопияЕвропа ИттифоқиФинляндияФижиФолкленд ороллариМикронезия" + + "Фарер ороллариФранцияГабонБуюк БританияГренадаГрузияФранцуз Гвианас" + + "иГернсиГанаГибралтарГренландияГамбияГвинеяГваделупеЭкваториал Гвине" + + "яГрецияЖанубий Георгия ва Жанубий Сендвич ороллариГватемалаГуамГвин" + + "ея-БисауГаянаГонконг (Хитой ММҲ)Херд ва Макдоналд ороллариГондурасХ" + + "орватияГаитиВенгрияКанар ороллариИндонезияИрландияИсроилМэн оролиҲи" + + "ндистонБританиянинг Ҳинд океанидаги ҳудудиИроқЭронИсландияИталияЖер" + + "сиЯмайкаИорданияЯпонияКенияҚирғизистонКамбоджаКирибатиКомор ороллар" + + "иСент-Китс ва НевисШимолий КореяЖанубий КореяҚувайтКайман ороллариҚ" + + "озоғистонЛаосЛиванСент-ЛюсияЛихтенштейнШри-ЛанкаЛиберияЛесотоЛитваЛ" + + "юксембургЛатвияЛивияМарокашМонакоМолдоваЧерногорияСент-МартинМадага" + + "скарМаршал ороллариМакедонияМалиМьянма (Бирма)МонголияМакао (Хитой " + + "ММҲ)Шимолий Марианна ороллариМартиникаМавританияМонтсерратМальтаМав" + + "рикийМальдив ороллариМалавиМексикаМалайзияМозамбикНамибияЯнги Калед" + + "онияНигерНорфолк ороллариНигерияНикарагуаНидерландияНорвегияНепалНа" + + "уруНиуэЯнги ЗеландияУммонПанамаПеруФранцуз ПолинезиясиПапуа - Янги " + + "ГвинеяФилиппинПокистонПольшаСент-Пьер ва МикелонПиткэрн ороллариПуэ" + + "рто-РикоФаластин ҳудудиПортугалияПалауПарагвайҚатарЁндош ОкеанияРею" + + "нионРуминияСербияРоссияРуандаСаудия АрабистониСоломон ороллариСейше" + + "л ороллариСуданШвецияСингапурМуқаддас Елена оролиСловенияСвалбард в" + + "а Ян-МайенСловакияСьерра-ЛеонеСан-МариноСенегалСомалиСуринамЖанубий" + + " СуданСан-Томе ва ПринсипиСалвадорСинт-МартенСурияСвазилендТристан-д" + + "а-КуняТуркс ва Кайкос ороллариЧадФранцуз жанубий худудлариТогоТаила" + + "ндТожикистонТокелауТимор-ЛестеТуркманистонТунисТонгаТуркияТринидад " + + "ва ТобагоТувалуТайванТанзанияУкраинаУгандаАҚШ ёндош ороллариАмерика" + + " Қўшма ШтатлариУругвайЎзбекистонВатиканСент-Винсент ва ГренадинВенес" + + "уэлаБртания Виргин ороллариАҚШ Виргин ороллариВьетнамВануатуУоллис " + + "ва ФутунаСамоаКосовоЯманМайоттаЖанубий Африка РеспубликасиЗамбияЗим" + + "бабвеНомаълум минтақаДунёАфрикаШимолий АмерикаЖанубий АмерикаОкеани" + + "яҒарбий АфрикаМарказий АмерикаШарқий АфрикаШимолий АфрикаМарказий А" + + "фрикаЖануби-АфрикаАмерикаШимоли-АмерикаКариб ҳавзасиШарқий ОсиёЖану" + + "бий ОсиёЖанубий-Шарқий ОсиёЖанубий ЕвропаАвстралазияМеланезияМикрон" + + "езия минтақасиПолинезияОсиёМарказий ОсиёҒарбий ОсиёЕвропаШарқий Евр" + + "опаШимолий ЕвропаҒарбий ЕвропаЛотин Америкаси", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0017, 0x0025, 0x0057, 0x006b, 0x008d, 0x0099, 0x00a7, + 0x00bb, 0x00c7, 0x00db, 0x00ed, 0x010a, 0x0118, 0x012a, 0x0134, + 0x014f, 0x0163, 0x018b, 0x019b, 0x01ad, 0x01bb, 0x01d2, 0x01e2, + 0x01f0, 0x01fe, 0x0208, 0x0221, 0x022f, 0x023b, 0x0249, 0x027e, + 0x028e, 0x02ab, 0x02b5, 0x02c8, 0x02da, 0x02ec, 0x02f6, 0x0302, + 0x032c, 0x0345, 0x037b, 0x039a, 0x03ac, 0x03c2, 0x03d9, 0x03e1, + 0x03ef, 0x03f9, 0x0409, 0x0428, 0x043b, 0x0443, 0x0456, 0x0464, + 0x0481, 0x0489, 0x04ac, 0x04bc, 0x04d3, 0x04df, 0x04e9, 0x04f9, + // Entry 40 - 7F + 0x0524, 0x0530, 0x054e, 0x055c, 0x056a, 0x0572, 0x0596, 0x05a4, + 0x05b2, 0x05c0, 0x05dd, 0x05dd, 0x05ef, 0x05f7, 0x0618, 0x062c, + 0x0647, 0x0655, 0x065f, 0x0678, 0x0686, 0x0692, 0x06b1, 0x06bd, + 0x06c5, 0x06d7, 0x06eb, 0x06f7, 0x0703, 0x0715, 0x0736, 0x0742, + 0x0793, 0x07a5, 0x07ad, 0x07c4, 0x07ce, 0x07f0, 0x0821, 0x0831, + 0x0841, 0x084b, 0x0859, 0x0874, 0x0886, 0x0896, 0x08a2, 0x08b3, + 0x08c5, 0x0908, 0x0910, 0x0918, 0x0928, 0x0934, 0x093e, 0x094a, + 0x095a, 0x0966, 0x0970, 0x0986, 0x0996, 0x09a6, 0x09c1, 0x09e2, + // Entry 80 - BF + 0x09fb, 0x0a14, 0x0a20, 0x0a3d, 0x0a51, 0x0a59, 0x0a63, 0x0a76, + 0x0a8c, 0x0a9d, 0x0aab, 0x0ab7, 0x0ac1, 0x0ad5, 0x0ae1, 0x0aeb, + 0x0af9, 0x0b05, 0x0b13, 0x0b27, 0x0b3c, 0x0b50, 0x0b6d, 0x0b7f, + 0x0b87, 0x0ba0, 0x0bb0, 0x0bce, 0x0bfe, 0x0c10, 0x0c24, 0x0c38, + 0x0c44, 0x0c54, 0x0c73, 0x0c7f, 0x0c8d, 0x0c9d, 0x0cad, 0x0cbb, + 0x0cd6, 0x0ce0, 0x0cff, 0x0d0d, 0x0d1f, 0x0d35, 0x0d45, 0x0d4f, + 0x0d59, 0x0d61, 0x0d7a, 0x0d84, 0x0d90, 0x0d98, 0x0dbd, 0x0ddf, + 0x0def, 0x0dff, 0x0e0b, 0x0e30, 0x0e4f, 0x0e64, 0x0e81, 0x0e95, + // Entry C0 - FF + 0x0e9f, 0x0eaf, 0x0eb9, 0x0ed2, 0x0ee0, 0x0eee, 0x0efa, 0x0f06, + 0x0f12, 0x0f33, 0x0f52, 0x0f6f, 0x0f79, 0x0f85, 0x0f95, 0x0fbb, + 0x0fcb, 0x0ff0, 0x1000, 0x1017, 0x102a, 0x1038, 0x1044, 0x1052, + 0x106b, 0x1090, 0x10a0, 0x10b5, 0x10bf, 0x10d1, 0x10ed, 0x111a, + 0x1120, 0x1150, 0x1158, 0x1166, 0x117a, 0x1188, 0x119d, 0x11b5, + 0x11bf, 0x11c9, 0x11d5, 0x11f7, 0x1203, 0x120f, 0x121f, 0x122d, + 0x1239, 0x125b, 0x125b, 0x1285, 0x1293, 0x12a7, 0x12b5, 0x12e2, + 0x12f4, 0x1320, 0x1344, 0x1352, 0x1360, 0x137e, 0x1388, 0x1394, + // Entry 100 - 13F + 0x139c, 0x13aa, 0x13de, 0x13ea, 0x13fa, 0x1419, 0x1421, 0x142d, + 0x144a, 0x1467, 0x1475, 0x148e, 0x14ad, 0x14c6, 0x14e1, 0x14fe, + 0x1517, 0x1525, 0x1540, 0x1559, 0x156e, 0x1585, 0x15a9, 0x15c4, + 0x15da, 0x15ec, 0x1613, 0x1625, 0x162d, 0x1646, 0x165b, 0x1667, + 0x1680, 0x169b, 0x16b4, 0x16d1, + }, + }, + { // vai + "ꕉꖆꕟꖳꕯꔤꗳ ꕉꕟꔬ ꗡꕆꔓꔻꕉꔱꕭꔕꔻꕚꘋꕉꘋꔳꖶꕎ ꗪ ꕑꖜꕜꕉꕄꕞꕉꔷꕑꕇꕩꕉꕆꕯꕉꖐꕞꕉꘀꘋꔳꕯꕶꕱ ꕢꕹꕎꖺꔻꖤꕎꖺꖬꖤꔃꔷꕩꕉꖩꕑ" + + "ꕉꕤꕑꔤꕧꘋꕷꔻꕇꕰ ꗪ ꗥꕤꖑꔲꕯꕑꔆꖁꔻꕑꕅꕞꗵꔼꗩꕀꗚꘋꕷꕃꕯ ꕘꖇꗂꔠꔸꕩꕑꗸꘋꖜꖩꔺꗩꕇꘋꗩꖷꕜꖜꖩꘉꔧꕷꔷꔲꕩꖜꕟꔘꔀꕑ" + + "ꕌꕮꔻꖜꕚꘋꕷꖬꕎꕯꗩꕞꖩꔻꔆꔷꔘꕪꕯꕜꖏꖐ ꗵꗞꖴꕟꔎ ꕸꖃꔀꕉꔱꔸꕪ ꗳ ꗳ ꕸꖃꔀꖏꖐꖬꔃꕤ ꖨꕮꕊꖏꔳ ꕾꕎꖏꕃ ꔳꘋꗣꔚꔷ" + + "ꕪꔈꖩꘋꕦꔤꕯꗛꗏꔭꕩꖏꔻꕚ ꔸꕪꕃꖳꕑꔞꔪ ꗲꔵ ꔳꘋꗣꕢꗡꖛꗐꔻꗿꕃ ꕸꖃꔀꕧꕮꔧꕀꖜꔳꕜꕇꕮꕃꖁꕆꕇꕪꖁꕆꕇꕪꘋ ꕸꕱꔀꕉꔷꔠ" + + "ꔸꕩꗡꖴꔃꗍꗡꔻꕿꕇꕰꕆꔖꕞꔀꔸꔳꕟꕐꘊꔧꔤꔳꖎꔪꕩꔱꘋ ꖨꕮꕊꔱꔤꕀꕘꔷꕃ ꖨꕮ ꔳꘋꗣꕆꖏꕇꔻꕩꖢꕟꘋꔻꕭꕷꘋꖕꕯꔤꗳꖶꕟꕯꕜꗘ" + + "ꖺꕀꕩꗱꘋꔻ ꖶꕎꕯꕭꕌꕯꕀꖜꕟꕚꕧꕓ ꖴꕎ ꖨꕮꕊꕭꔭꕩꕅꔤꕇꖶꕎꔐꖨꔅꖦꕰꕊ ꗳ ꕅꔤꕇꗥꗷꘋꖶꕎꔎꕮꕞꖶꕎꕆꕅꔤꕇ ꔫꕢꕴꖶꕩ" + + "ꕯꖽꖫꕟꖏꔓꔻꕩꕌꔤꔳꖽꘋꕭꔓꔤꖆꕇꔻꕩꕉꔓ ꖨꕮꕊꕑꕇꔻꕞꔤꕞꔤꔺꕩꔛꔟꔻ ꔤꔺꕩ ꗛꔤꘂ ꕗꕴꔀ ꕮꔤꕟꕃꔤꕟꘋꕉꔤꔻ ꖨꕮꕊꔤ" + + "ꕚꔷꕧꕮꔧꕪꗘꖺꗵꘋꔛꗨꗢꔞꕰꕃꕅꔻꕚꘋꕪꕹꔵꕩꕃꔸꕑꔳꖏꕹꖄꔻꔻꘋ ꕃꔳꔻ ꗪ ꔕꔲꔻꖏꔸꕩ ꗛꔤ ꕪꘋꗒꖏꔸꕩ ꗛꔤ ꔒꘋꗣ ꗏ" + + "ꖴꔃꔳꔞꔀꕮꘋ ꔳꘋꗣꕪꕤꔻꕚꘋꕞꕴꔻꔒꕑꗟꘋꔻꘋ ꖨꔻꕩꔷꗿꘋꔻꗳꘋꖬꔸ ꕞꘋꕪꕞꔤꔫꕩꔷꖇꕿꔷꖤꔃꕇꕰꗏꔻꘋꗂꖺꕞꔳꔲꕩꔒꔫꕩꗞ" + + "ꕟꖏꗞꕯꖏꖒꔷꖁꕙꕮꕜꕭꔻꕪꕮꕊꕣ ꔳꘋꗣꕮꔖꖁꕇꕰꕮꔷꕆꕩꘋꕮꗞꖐꔷꕩꗛꔤ ꕪꘋꗒ ꕮꔸꕩꕯ ꔳꘋꗣꕮꔳꕇꕃꗞꔓꔎꕇꕰꗞꘋꔖꕟꔳꕮ" + + "ꕊꕚꗞꔓꗔꕮꔷꕜꔍꕮꕞꕌꔨꘈꔻꖏꕮꔒꔻꕩꕹꕤꔭꕃꕯꕆꔫꕩꕪꔷꖁꕇꕰ ꕯꕮꕊꕯꔤꕧꗟꖺꗉ ꔳꘋꗣꕯꔤꕀꔸꕩꕇꕪꕟꖶꕎꘉꕜ ꖨꕮꕊꗟꖺꔃ" + + "ꕇꕐꔷꖆꖩꖸꔃꔤꔽꔤ ꖨꕮ ꕯꕮꕊꕱꕮꘋꕐꕯꕮꗨꗡꖩꗱꘋꔻ ꕶꔷꕇꔻꕩꕐꖛꕎ ꕅꔤꕇ ꕯꕮꕊꔱꔒꔪꘋꕐꕃꔻꕚꘋꕶꗷꘋꔻꘋ ꔪꘂ ꗪ " + + "ꕆꔞꗏꘋꔪꔳꕪꕆꔪꖳꕿ ꔸꖏꕐꔒꔻꔳꕯ ꔎꔒ ꕀꔤ ꗛꔤ ꕞ ꗱ ꗪ ꕭꕌꕤꕶꕿꕃꔤ ꕸꖃꔀꕐꖃꕐꕟꗝꔀꕪꕚꕌꔓꗠꖻꖄꕆꕇꕰꗐꖺꔻꕩ" + + "ꕟꖙꕡꕞꕌꖝ ꕸꖃꔀꖬꕞꔤꕮꕊꕯ ꔳꘋꗣꔖꗼꔷꖬꗵꘋꖬꔨꗵꘋꔻꕬꕶꕱꔻꘋ ꗥꔷꕯꔻꖃꔍꕇꕰꔻꖃꕙꕃꕩꔋꕩ ꕒꕌꖺ ꕸꖃꔀꕮꔸꖆ ꕢꘋ" + + "ꔻꕇꕭꕌꖇꕮꔷꕩꖬꔸꕯꔈꕢꕴ ꕿꔈ ꗪ ꕉ ꕮꔧ ꕗꕴꔀꗡꗷ ꕢꔍꗍꖺꔻꕩꘋꖬꕎꔽ ꖨꕮꕊꗋꖺꕃꔻ ꗪ ꕪꔤꖏꔻ ꔳꘋꗣꕦꔵꕿꖑꕚꔤ" + + " ꖨꕮꕊꕚꕀꕃꔻꕚꘋꕿꔞꖃꔎꔒ ꗃ ꔳꗞꖻꗋꖺꕃꕮꕇꔻꕚꘋꖤꕇꔻꕩꗋꕬꗋꖺꕃꖤꔸꔕꕜ ꗪ ꕿꔆꖑꕚꖣꖨꕚꔤꕎꘋꕚꘋꕤꕇꕰꖳꖴꔓꘋꖳꕭꕡꕶ" + + "ꕱꖳꔓꗝꔀꖳꗩꕃꔻꕚꘋꔻꘋ ꔲꘋꔻꘋ ꗪ ꖶꔓꕯꔵꘋ ꖸꕙꔳꕪꘋ ꕸꖃꔀꔛꔟꔻ ꗩꗡ ꗏ ꖷꖬ ꔳꘋꗣꕶꕱ ꗩꗡ ꗏ ꖷꖬ ꔳꘋꗣꗲ" + + "ꕇꖮꔃꕞꕙꖸꕎꖤꕎꔷꔻ ꗪ ꖢꖤꕯꕢꕹꖙꕉꔝꘈꘋꕮꗚꔎꕉꔱꔸꕪ ꗛꔤ ꔒꘋꗣ ꗏ ꕸꖃꔀꕤꔭꕩꔽꕓꖜꔃ", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0009, 0x002c, 0x0041, 0x005e, 0x0067, 0x0076, + 0x007f, 0x0088, 0x0088, 0x0097, 0x00a7, 0x00b3, 0x00c5, 0x00ce, + 0x00ce, 0x00e0, 0x0100, 0x010c, 0x011b, 0x0127, 0x0137, 0x0143, + 0x014c, 0x0155, 0x015e, 0x015e, 0x0167, 0x0173, 0x017f, 0x017f, + 0x018b, 0x0197, 0x01a0, 0x01a0, 0x01ac, 0x01b8, 0x01c1, 0x01ca, + 0x01ca, 0x01ea, 0x0208, 0x020e, 0x0221, 0x022e, 0x023e, 0x0244, + 0x0250, 0x0259, 0x0265, 0x0265, 0x0275, 0x027e, 0x0295, 0x0295, + 0x0295, 0x02a4, 0x02b4, 0x02bd, 0x02bd, 0x02c6, 0x02d2, 0x02de, + // Entry 40 - 7F + 0x02f7, 0x0306, 0x0306, 0x0312, 0x0321, 0x032a, 0x032a, 0x0336, + 0x033f, 0x034e, 0x034e, 0x034e, 0x035e, 0x0367, 0x0381, 0x0390, + 0x0390, 0x039c, 0x03a5, 0x03b1, 0x03bd, 0x03c9, 0x03dc, 0x03dc, + 0x03e5, 0x03f1, 0x0408, 0x0411, 0x041a, 0x0429, 0x0440, 0x0449, + 0x0449, 0x0458, 0x0461, 0x0474, 0x047d, 0x047d, 0x047d, 0x0486, + 0x0492, 0x049b, 0x04a7, 0x04a7, 0x04b6, 0x04c6, 0x04d8, 0x04d8, + 0x04e1, 0x050c, 0x0515, 0x051e, 0x0531, 0x053a, 0x053a, 0x0546, + 0x0552, 0x055b, 0x0561, 0x0570, 0x057c, 0x0588, 0x0594, 0x05b2, + // Entry 80 - BF + 0x05cc, 0x05ea, 0x05f3, 0x0609, 0x0618, 0x0621, 0x062d, 0x063d, + 0x064f, 0x065f, 0x066b, 0x0674, 0x0683, 0x0692, 0x069e, 0x06a7, + 0x06b0, 0x06b9, 0x06c5, 0x06c5, 0x06c5, 0x06d4, 0x06e7, 0x06f6, + 0x06fc, 0x0708, 0x0714, 0x0714, 0x073b, 0x0747, 0x0756, 0x0765, + 0x076e, 0x0777, 0x0783, 0x078f, 0x0798, 0x07a4, 0x07b0, 0x07bc, + 0x07d5, 0x07de, 0x07f1, 0x0800, 0x080f, 0x081f, 0x0828, 0x0831, + 0x0837, 0x0840, 0x0857, 0x0860, 0x0869, 0x0872, 0x088b, 0x08a8, + 0x08b4, 0x08c3, 0x08cc, 0x08ea, 0x08f6, 0x0906, 0x0940, 0x0956, + // Entry C0 - FF + 0x095c, 0x0968, 0x0971, 0x0971, 0x097a, 0x0986, 0x0986, 0x0992, + 0x099b, 0x09ae, 0x09ca, 0x09d3, 0x09dc, 0x09e8, 0x09f4, 0x0a04, + 0x0a13, 0x0a13, 0x0a22, 0x0a3c, 0x0a4c, 0x0a58, 0x0a64, 0x0a70, + 0x0a70, 0x0a96, 0x0aa9, 0x0aa9, 0x0ab2, 0x0ac5, 0x0ac5, 0x0aec, + 0x0af2, 0x0af2, 0x0af8, 0x0b08, 0x0b1a, 0x0b23, 0x0b37, 0x0b4f, + 0x0b5b, 0x0b61, 0x0b6a, 0x0b84, 0x0b8d, 0x0b99, 0x0ba8, 0x0bb4, + 0x0bbd, 0x0bbd, 0x0bbd, 0x0bc3, 0x0bcf, 0x0be1, 0x0be1, 0x0c0c, + 0x0c22, 0x0c47, 0x0c69, 0x0c78, 0x0c84, 0x0c9b, 0x0ca7, 0x0ca7, + // Entry 100 - 13F + 0x0cb0, 0x0cb9, 0x0ce4, 0x0ced, 0x0cf9, + }, + }, + { // vai-Latn + "AŋdóraYunaitɛ Arabhi ƐmireAfigándesitaŋAŋtígwa ƁahabhudaAŋgílaAbhaniyaAm" + + "éniyaAŋgólaAjɛŋtínaPoo SambowaƆ́situwaƆsituwéeliyaArubhaAzabhaijaŋB" + + "hɔsiniyaBhabhedoBhangiladɛ̀shiBhɛgiyɔŋBhokina FásoBhɔgeriyaBharɛŋBhu" + + "rundiBhɛniBhɛmudaBhurunɛĩBholiviyaBhurazeliBahámasiBhutaŋBhosuwanaBh" + + "ɛlarusiBhelizKánádaAvorekooÁfíríka Lumaã Tɛ BoloeKóngoSuweza LumaãK" + + "ódivówaKóki TiŋŋɛChéliKameruŋCháínaKɔlɔmbiyaKósíta RíkoKiyubhaKepi " + + "Vɛdi TiŋŋɛSaɛpurɔChɛki BoloeJamáĩJibhutiDanimahaDomíiníkaDomíiníka Ɓ" + + "oloeAgiriyaƐ́kúwédɔƐsitóninyaMísélaƐriteraPanyɛĩÍtiyópiyaFiŋlɛŋFíjiF" + + "áháki Luma TiŋŋɛMikonisiyaFɛŋsiGabhɔŋYunaitɛ KíŋdɔŋGurinédaJɔɔjiyaF" + + "ɛŋsi GiwanaGanaJibhurataJamba Kuwa LumaãGambiyaGiniGuwadelupeDúúnyá" + + " Tɛ GiiniHɛlɛŋGuwatɛmalaGuwamiGini BhisawoGuyanaHɔnduraKoresiyaHáiti" + + "Hɔ́ngareÍndonisiyaÁre LumaãBhanísiláilaÍndiyaJengéesi Gbawoe Índiya " + + "Kɔiyɛ LɔIrakiIraŋÁisi LumaãÍtaliJamaikaJɔɔdaŋJapaŋKényaKigisitaŋKaŋb" + + "hodiyaKiribhatiKomorosiSiŋ Kisi ɓɛ́ NevisiKoriya Kɔi KaŋndɔKoriya Kɔ" + + "i Leŋŋɛ LɔKuwetiKeemaŋ TiŋŋɛKazasitaŋLawosiLebhanɔSiŋ LusiyaSuri Laŋ" + + "kaLaibhiyaLisótoLituweninyaLusimbɔLativiyaLebhiyaMɔrokoMɔnakoMɔlidov" + + "aMadagasitaMasha TiŋŋɛMasedoninyaMaliMiyamahaMɔngoliyaKɔi Kaŋndɔ Mar" + + "iyana TiŋŋɛMatinikiMɔretaninyaMɔseratiMalitaMɔreshɔMalidaviMalawiMɛs" + + "íkoMalesiyaMozambikiNamibiyaKalidoninya NámaáNaĩjaNɔfɔ TiŋŋɛNaĩjiri" + + "yaNikaraguwaNidɔlɛŋNɔɔweNepaNoruNiweZilɛŋ NámaáOmaŋPanamaPɛruFɛŋsi P" + + "olinísiyaPapuwa Gini NámaáFélepiŋPakisitaŋPólɛŋSiŋ Piiyɛ ɓɛ́ Mikelɔŋ" + + "PitikɛŋPiyuto RikoPalesitininya Tele Jii Kɔiyɛ lá hĩ GazaPotokíiPalo" + + "ParagɔeKatahaRenyɔɔ̃RomininyaRɔshiyaRawundaLahabuSulaimaãna TiŋŋɛSes" + + "hɛɛSudɛŋSuwidɛŋSíingapooSiŋ HɛlinaSuloveninyaSulovakiyaGbeya BahawɔS" + + "aŋ MarindoSinigahaSomaliyaSurinambeSawo Tombe ɓɛ a GbawoeƐlɛ SávádɔS" + + "íyaŋSuwazi LumaãTukisi ɓɛ̀ Kaikóosi TiŋŋɛChádiTogoTai LumaãTajikisi" + + "taŋTokeloTele Ɓɔ́ Timɔɔ̃TukimɛnisitaŋTunisiyaTɔngaTɔ́ɔ́kiTurindeda ɓ" + + "ɛ́ TobhegoTuváluTaiwaŋTaŋzaninyaYukuréŋYugandaPooYuwegɔweYubhɛkisit" + + "aŋVatikaŋ ƁoloeSiŋ ViŋsiVɛnɛzuwelaJengéesi Bhɛɛ Lɔ Musu TiŋŋɛPoo Bhɛ" + + "ɛ lɔ Musu TiŋŋɛViyanamiVanuwátuWalísiSamowaYemɛniMavoteAfirika Kɔi " + + "Leŋŋɛ LɔZambiyaZimbabhuwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x001e, 0x002d, 0x0041, 0x0049, 0x0051, + 0x0059, 0x0061, 0x0061, 0x006c, 0x0077, 0x0081, 0x008f, 0x0095, + 0x0095, 0x00a0, 0x00aa, 0x00b2, 0x00c2, 0x00cd, 0x00da, 0x00e4, + 0x00ec, 0x00f4, 0x00fa, 0x00fa, 0x0102, 0x010c, 0x0115, 0x0115, + 0x011e, 0x0127, 0x012e, 0x012e, 0x0137, 0x0141, 0x0147, 0x014f, + 0x014f, 0x0157, 0x0172, 0x0178, 0x0185, 0x018f, 0x019d, 0x01a3, + 0x01ab, 0x01b3, 0x01be, 0x01be, 0x01cc, 0x01d3, 0x01e6, 0x01e6, + 0x01e6, 0x01ef, 0x01fb, 0x0202, 0x0202, 0x0209, 0x0211, 0x021c, + // Entry 40 - 7F + 0x022e, 0x0235, 0x0235, 0x0242, 0x024e, 0x0256, 0x0256, 0x025e, + 0x0266, 0x0271, 0x0271, 0x0271, 0x027a, 0x027f, 0x0295, 0x029f, + 0x029f, 0x02a6, 0x02ae, 0x02c1, 0x02ca, 0x02d3, 0x02e1, 0x02e1, + 0x02e5, 0x02ee, 0x02ff, 0x0306, 0x030a, 0x0314, 0x0327, 0x032f, + 0x032f, 0x033a, 0x0340, 0x034c, 0x0352, 0x0352, 0x0352, 0x035a, + 0x0362, 0x0368, 0x0372, 0x0372, 0x037d, 0x0388, 0x0396, 0x0396, + 0x039d, 0x03c1, 0x03c6, 0x03cb, 0x03d7, 0x03dd, 0x03dd, 0x03e4, + 0x03ed, 0x03f3, 0x03f9, 0x0403, 0x040e, 0x0417, 0x041f, 0x0436, + // Entry 80 - BF + 0x044a, 0x0462, 0x0468, 0x0478, 0x0482, 0x0488, 0x0490, 0x049b, + 0x049b, 0x04a6, 0x04ae, 0x04b5, 0x04c0, 0x04c8, 0x04d0, 0x04d7, + 0x04de, 0x04e5, 0x04ee, 0x04ee, 0x04ee, 0x04f8, 0x0506, 0x0511, + 0x0515, 0x051d, 0x0527, 0x0527, 0x0546, 0x054e, 0x055a, 0x0563, + 0x0569, 0x0572, 0x057a, 0x0580, 0x0588, 0x0590, 0x0599, 0x05a1, + 0x05b4, 0x05ba, 0x05c9, 0x05d3, 0x05dd, 0x05e7, 0x05ee, 0x05f2, + 0x05f6, 0x05fa, 0x0609, 0x060e, 0x0614, 0x0619, 0x062c, 0x063f, + 0x0648, 0x0652, 0x065a, 0x0676, 0x067f, 0x068a, 0x06b5, 0x06bd, + // Entry C0 - FF + 0x06c1, 0x06c9, 0x06cf, 0x06cf, 0x06d9, 0x06e2, 0x06e2, 0x06ea, + 0x06f1, 0x06f7, 0x070b, 0x0713, 0x071a, 0x0723, 0x072d, 0x0739, + 0x0744, 0x0744, 0x074e, 0x075b, 0x0767, 0x076f, 0x0777, 0x0780, + 0x0780, 0x0798, 0x07a7, 0x07a7, 0x07ae, 0x07bb, 0x07bb, 0x07db, + 0x07e1, 0x07e1, 0x07e5, 0x07ef, 0x07fb, 0x0801, 0x0816, 0x0825, + 0x082d, 0x0833, 0x083e, 0x0856, 0x085d, 0x0864, 0x086f, 0x0878, + 0x087f, 0x087f, 0x087f, 0x0882, 0x088b, 0x0899, 0x08a8, 0x08b3, + 0x08bf, 0x08e1, 0x08fd, 0x0905, 0x090e, 0x0915, 0x091b, 0x091b, + // Entry 100 - 13F + 0x0922, 0x0928, 0x0941, 0x0948, 0x0952, + }, + }, + { // vi + viRegionStr, + viRegionIdx, + }, + { // vun + "AndoraFalme za KiarabuAfuganistaniAntigua na BarbudaAnguillaAlbaniaArmen" + + "iaAngolaAjentinaSamoa ya MarekaniAustriaAustraliaArubaAzabajaniBosni" + + "a na HezegovinaBabadosiBangladeshiUbelgijiBukinafasoBulgariaBahareni" + + "BurundiBeniniBermudaBruneiBoliviaBraziliBahamaButaniBotswanaBelarusi" + + "BelizeKanadaJamhuri ya Kidemokrasia ya KongoJamhuri ya Afrika ya Kat" + + "iKongoUswisiKodivaaVisiwa vya CookChileKameruniChinaKolombiaKostarik" + + "aKubaKepuvedeKuprosiJamhuri ya ChekiUjerumaniJibutiDenmakiDominikaJa" + + "mhuri ya DominikaAljeriaEkwadoEstoniaMisriEritreaHispaniaUhabeshiUfi" + + "niFijiVisiwa vya FalklandMikronesiaUfaransaGaboniUingerezaGrenadaJoj" + + "iaGwiyana ya UfaransaGhanaJibraltaGrinlandiGambiaGineGwadelupeGinekw" + + "etaUgirikiGwatemalaGwamGinebisauGuyanaHondurasiKorasiaHaitiHungariaI" + + "ndonesiaAyalandiIsraeliIndiaEneo la Uingereza katika Bahari HindiIra" + + "kiUajemiAislandiItaliaJamaikaYordaniJapaniKenyaKirigizistaniKambodia" + + "KiribatiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitiV" + + "isiwa vya KaymanKazakistaniLaosiLebanoniSantalusiaLishenteniSirilank" + + "aLiberiaLesotoLitwaniaLasembagiLativiaLibyaMorokoMonakoMoldovaBukini" + + "Visiwa vya MarshalMasedoniaMaliMyamaMongoliaVisiwa vya Mariana vya K" + + "askaziniMartinikiMoritaniaMontserratiMaltaMorisiModivuMalawiMeksikoM" + + "alesiaMsumbijiNamibiaNyukaledoniaNijeriKisiwa cha NorfokNijeriaNikar" + + "agwaUholanziNorweNepaliNauruNiueNyuzilandiOmaniPanamaPeruPolinesia y" + + "a UfaransaPapuaFilipinoPakistaniPolandiSantapieri na MikeloniPitkair" + + "niPwetorikoUkingo wa Magharibi na Ukanda wa Gaza wa PalestinaUrenoPa" + + "lauParagwaiKatariRiyunioniRomaniaUrusiRwandaSaudiVisiwa vya SolomonS" + + "helisheliSudaniUswidiSingapooSantahelenaSloveniaSlovakiaSiera LeoniS" + + "amarinoSenegaliSomaliaSurinamuSao Tome na PrincipeElsavadoSiriaUswaz" + + "iVisiwa vya Turki na KaikoChadiTogoTailandiTajikistaniTokelauTimori " + + "ya MasharikiTurukimenistaniTunisiaTongaUturukiTrinidad na TobagoTuva" + + "luTaiwaniTanzaniaUkrainiUgandaMarekaniUrugwaiUzibekistaniVatikaniSan" + + "tavisenti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa" + + " vya Virgin vya MarekaniVietinamuVanuatuWalis na FutunaSamoaYemeniMa" + + "yotteAfrika KusiniZambiaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0016, 0x0022, 0x0034, 0x003c, 0x0043, + 0x004a, 0x0050, 0x0050, 0x0058, 0x0069, 0x0070, 0x0079, 0x007e, + 0x007e, 0x0087, 0x009b, 0x00a3, 0x00ae, 0x00b6, 0x00c0, 0x00c8, + 0x00d0, 0x00d7, 0x00dd, 0x00dd, 0x00e4, 0x00ea, 0x00f1, 0x00f1, + 0x00f8, 0x00fe, 0x0104, 0x0104, 0x010c, 0x0114, 0x011a, 0x0120, + 0x0120, 0x0140, 0x0159, 0x015e, 0x0164, 0x016b, 0x017a, 0x017f, + 0x0187, 0x018c, 0x0194, 0x0194, 0x019d, 0x01a1, 0x01a9, 0x01a9, + 0x01a9, 0x01b0, 0x01c0, 0x01c9, 0x01c9, 0x01cf, 0x01d6, 0x01de, + // Entry 40 - 7F + 0x01f1, 0x01f8, 0x01f8, 0x01fe, 0x0205, 0x020a, 0x020a, 0x0211, + 0x0219, 0x0221, 0x0221, 0x0221, 0x0226, 0x022a, 0x023d, 0x0247, + 0x0247, 0x024f, 0x0255, 0x025e, 0x0265, 0x026a, 0x027d, 0x027d, + 0x0282, 0x028a, 0x0293, 0x0299, 0x029d, 0x02a6, 0x02af, 0x02b6, + 0x02b6, 0x02bf, 0x02c3, 0x02cc, 0x02d2, 0x02d2, 0x02d2, 0x02db, + 0x02e2, 0x02e7, 0x02ef, 0x02ef, 0x02f8, 0x0300, 0x0307, 0x0307, + 0x030c, 0x0331, 0x0336, 0x033c, 0x0344, 0x034a, 0x034a, 0x0351, + 0x0358, 0x035e, 0x0363, 0x0370, 0x0378, 0x0380, 0x0386, 0x0399, + // Entry 80 - BF + 0x03a8, 0x03b4, 0x03bb, 0x03cc, 0x03d7, 0x03dc, 0x03e4, 0x03ee, + 0x03f8, 0x0401, 0x0408, 0x040e, 0x0416, 0x041f, 0x0426, 0x042b, + 0x0431, 0x0437, 0x043e, 0x043e, 0x043e, 0x0444, 0x0456, 0x045f, + 0x0463, 0x0468, 0x0470, 0x0470, 0x0490, 0x0499, 0x04a2, 0x04ad, + 0x04b2, 0x04b8, 0x04be, 0x04c4, 0x04cb, 0x04d2, 0x04da, 0x04e1, + 0x04ed, 0x04f3, 0x0504, 0x050b, 0x0514, 0x051c, 0x0521, 0x0527, + 0x052c, 0x0530, 0x053a, 0x053f, 0x0545, 0x0549, 0x055e, 0x0563, + 0x056b, 0x0574, 0x057b, 0x0591, 0x059a, 0x05a3, 0x05d5, 0x05da, + // Entry C0 - FF + 0x05df, 0x05e7, 0x05ed, 0x05ed, 0x05f6, 0x05fd, 0x05fd, 0x0602, + 0x0608, 0x060d, 0x061f, 0x0629, 0x062f, 0x0635, 0x063d, 0x0648, + 0x0650, 0x0650, 0x0658, 0x0663, 0x066b, 0x0673, 0x067a, 0x0682, + 0x0682, 0x0696, 0x069e, 0x069e, 0x06a3, 0x06a9, 0x06a9, 0x06c2, + 0x06c7, 0x06c7, 0x06cb, 0x06d3, 0x06de, 0x06e5, 0x06f8, 0x0707, + 0x070e, 0x0713, 0x071a, 0x072c, 0x0732, 0x0739, 0x0741, 0x0748, + 0x074e, 0x074e, 0x074e, 0x0756, 0x075d, 0x0769, 0x0771, 0x078a, + 0x0793, 0x07b2, 0x07d0, 0x07d9, 0x07e0, 0x07ef, 0x07f4, 0x07f4, + // Entry 100 - 13F + 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, + }, + }, + { // wae + "HimmelfártsinslaAndorraVereinigti Arabiše EmiratAfganištanAntigua und Ba" + + "rbudaAnguillaAlbanieArmenieAngolaAntarktisArgentinieAmerikaniš Samoa" + + "ÖštričAustralieArubaAlandinsläAserbaidšanBosnie und HerzegovinaBarb" + + "adosBangladešBelgieBurkina FasoBulgarieBačrainBurundiBeninSt. Bartho" + + "lomäus-InslaBermudaBruneiBoliwieBrasilieBahamasBhutanBouvetinslaBots" + + "wanaWísrusslandBelizeKanadaKokosinsläKongo-KinshasaZentralafrikaniši" + + " RebublikKongo BrazzavilleSchwizElfebeiküštaCookinsläTšileKamerunChi" + + "naKolumbieClipperton InslaCosta RicaKubaKap VerdeWienäčtsinsläZypreT" + + "šečieTitšlandDiego GarciaDšibutiDänemarkDoninicaDominikaniši Rebubl" + + "ikAlgerieCeuta und MelillaEcuadorEštlandEgypteWeštsaharaEritreaSchpa" + + "nieEthiopieEuropäiši UnioFinnlandFidšiFalklandinsläMikronesieFäröeFr" + + "ankričGabonEnglandGrenadaGeorgieFranzösiš GuianaGuernseyGanaGibralta" + + "rGrönlandGambiaGineaGuadeloupeEquatorialgineaGričelandSüdgeorgie und" + + " d’südliče SenwičinsläGuatemalaGuamGinea BissauGuyanaSonderverwaltig" + + "szona HongkongHeard- und McDonald-InsläHondurasKroatieHaitiUngareKan" + + "ariše InsläIndonesieIrlandIsraelIsle of ManIndieBritišes Territorium" + + " em indiše OzeanIrakIranIslandItalieJerseyJamaikaJordanieJapanKenyaK" + + "irgištanKambodšaKiribatiKomoreSt. Kitts und NevisNordkoreaSüdkoreaKu" + + "weitKaimaninsläKasačstanLaosLibanonSt. LuciaLiečtešteiSri LankaLiber" + + "iaLesothoLitaueLuxeburgLettlandLübieMarokoMonagoMoldauMontenegroSt. " + + "MartinMadagaskarMaršalinsläMazedonieMaliBurmaMongoleiSonderverwaltig" + + "szona MakauNördliči MarianeMartiniqueMauretanieMonserratMaltaMauriti" + + "usMalediweMalawiMexikoMalaysiaMosambikNamibiaNiwkaledonieNigerNorfol" + + "kinslaNigeriaNicaraguaHolandNorwägeNepalNauruNiueNiwsélandOmanPanama" + + "PeruFranzösiš PolinesiePapua NiwgineaPhilippinePakištanPoleSt. Pierr" + + "e und MiquelonPitcairnPuerto RicoPaleštinaPortugalPalauParaguaiKatar" + + "Üssers OzeanieRéunionRumänieSerbieRusslandRuandaSaudi ArabieSalomon" + + "eSečelleSudanSchwedeSingapurSt. HelenaSlowenieSvalbard und Jan Mayen" + + "SlowakeiSierra LeoneSan MarinoSenegalSomaliaSurinameSão Tomé and Prí" + + "ncipeEl SalvadorSürieSwasilandTristan da CunhaTurks- und Caicosinslä" + + "TšadFranzösiši Süd- und AntarktisgebietTogoThailandTadšikistanTokela" + + "uOšttimorTurkmeništanTunesieTongaTürkeiTrinidad und TobagoTuvaluTaiw" + + "anTansaniaUkraineUgandaAmerikaniš OzeanieAmerikaUrugauyUsbekištanVat" + + "ikanSt. Vincent und d’GrenadineVenezuelaBritiši JungfröiwinsläAmerik" + + "aniši JungfröiwinsläVietnamVanuatuWallis und FutunaSamoaJémeMoyetteS" + + "üdafrikaSambiaSimbabweUnbekannti RegioWäldAfrikaNordamerikaSüdameri" + + "kaOzeanieWeštafrikaZentralamerikaOštafrikaNordafrikaMittelafrikaSüdl" + + "ičs AfrikaAmerikaniš KontinäntNördličs AmerikaKaribikOštasieSüdasieS" + + "üdoštasieSüdeuropaAuštralie und NiwsélandMelanesieMikronesišes Inse" + + "lgebietPolinesieAsieZentralasieWeštasieEuropaOšteuropaNordeuropaWešt" + + "europaLatíamerika", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0011, 0x0018, 0x0032, 0x003d, 0x0050, 0x0058, 0x005f, + 0x0066, 0x006c, 0x0075, 0x007f, 0x0090, 0x0099, 0x00a2, 0x00a7, + 0x00b2, 0x00be, 0x00d4, 0x00dc, 0x00e6, 0x00ec, 0x00f8, 0x0100, + 0x0108, 0x010f, 0x0114, 0x012b, 0x0132, 0x0138, 0x013f, 0x013f, + 0x0147, 0x014e, 0x0154, 0x015f, 0x0167, 0x0173, 0x0179, 0x017f, + 0x018a, 0x0198, 0x01b3, 0x01c4, 0x01ca, 0x01d8, 0x01e2, 0x01e8, + 0x01ef, 0x01f4, 0x01fc, 0x020c, 0x0216, 0x021a, 0x0223, 0x0223, + 0x0233, 0x0238, 0x0240, 0x0249, 0x0255, 0x025d, 0x0266, 0x026e, + // Entry 40 - 7F + 0x0284, 0x028b, 0x029c, 0x02a3, 0x02ab, 0x02b1, 0x02bc, 0x02c3, + 0x02cb, 0x02d3, 0x02e3, 0x02e3, 0x02eb, 0x02f1, 0x02ff, 0x0309, + 0x0310, 0x0319, 0x031e, 0x0325, 0x032c, 0x0333, 0x0345, 0x034d, + 0x0351, 0x035a, 0x0363, 0x0369, 0x036e, 0x0378, 0x0387, 0x0391, + 0x03bc, 0x03c5, 0x03c9, 0x03d5, 0x03db, 0x03f8, 0x0412, 0x041a, + 0x0421, 0x0426, 0x042c, 0x043c, 0x0445, 0x044b, 0x0451, 0x045c, + 0x0461, 0x0487, 0x048b, 0x048f, 0x0495, 0x049b, 0x04a1, 0x04a8, + 0x04b0, 0x04b5, 0x04ba, 0x04c4, 0x04cd, 0x04d5, 0x04db, 0x04ee, + // Entry 80 - BF + 0x04f7, 0x0500, 0x0506, 0x0512, 0x051c, 0x0520, 0x0527, 0x0530, + 0x053c, 0x0545, 0x054c, 0x0553, 0x0559, 0x0561, 0x0569, 0x056f, + 0x0575, 0x057b, 0x0581, 0x058b, 0x0595, 0x059f, 0x05ac, 0x05b5, + 0x05b9, 0x05be, 0x05c6, 0x05e0, 0x05f2, 0x05fc, 0x0606, 0x060f, + 0x0614, 0x061d, 0x0625, 0x062b, 0x0631, 0x0639, 0x0641, 0x0648, + 0x0654, 0x0659, 0x0665, 0x066c, 0x0675, 0x067b, 0x0683, 0x0688, + 0x068d, 0x0691, 0x069b, 0x069f, 0x06a5, 0x06a9, 0x06be, 0x06cc, + 0x06d6, 0x06df, 0x06e3, 0x06fa, 0x0702, 0x070d, 0x0717, 0x071f, + // Entry C0 - FF + 0x0724, 0x072c, 0x0731, 0x0740, 0x0748, 0x0750, 0x0756, 0x075e, + 0x0764, 0x0770, 0x0778, 0x0780, 0x0785, 0x078c, 0x0794, 0x079e, + 0x07a6, 0x07bc, 0x07c4, 0x07d0, 0x07da, 0x07e1, 0x07e8, 0x07f0, + 0x07f0, 0x0808, 0x0813, 0x0813, 0x0819, 0x0822, 0x0832, 0x0849, + 0x084e, 0x0874, 0x0878, 0x0880, 0x088c, 0x0893, 0x089c, 0x08a9, + 0x08b0, 0x08b5, 0x08bc, 0x08cf, 0x08d5, 0x08db, 0x08e3, 0x08ea, + 0x08f0, 0x0903, 0x0903, 0x090a, 0x0911, 0x091c, 0x0923, 0x0940, + 0x0949, 0x0962, 0x097f, 0x0986, 0x098d, 0x099e, 0x09a3, 0x09a3, + // Entry 100 - 13F + 0x09a8, 0x09af, 0x09b9, 0x09bf, 0x09c7, 0x09d7, 0x09dc, 0x09e2, + 0x09ed, 0x09f8, 0x09ff, 0x0a0a, 0x0a18, 0x0a22, 0x0a2c, 0x0a38, + 0x0a48, 0x0a5e, 0x0a70, 0x0a77, 0x0a7f, 0x0a87, 0x0a93, 0x0a9d, + 0x0ab6, 0x0abf, 0x0ad8, 0x0ae1, 0x0ae5, 0x0af0, 0x0af9, 0x0aff, + 0x0b09, 0x0b13, 0x0b1e, 0x0b2a, + }, + }, + { // xog + "AndoraEmireetiAfaganisitaniAntigwa ni BarabudaAngwilaAlibaniyaArameniyaA" + + "ngolaArigentinaSamowa omumerikaAwusituriyaAwusitureliyaArubaAzerebay" + + "ijaaniBoziniya HezegovinaBarabadosiBangaladesiBubirigiBurukina FasoB" + + "ulugariyaBaareeniBurundiBeniniBeremudaBurunayiBoliviyaBuraziiriBaham" + + "asiButaaniBotiswanaBelarusiBelizeKanadaKongo - ZayireLipabulika ya S" + + "enturafirikiKongoSwitizirandiKote DivwaEbizinga bya KkukiCileKameruu" + + "niCayinaKolombyaKosita RikaCubaEbizinga bya Kepu VerediSipuriyaLipab" + + "ulika ya CeekaBudaakiJjibutiDenimaakaDominikaLipabulika ya DominikaA" + + "ligeryaEkwadoEsitoniyaMisiriEritureyaSipeyiniEsyopyaFinilandiFijiEbi" + + "izinga bya FalikalandiMikuronezyaBufalansaGaboniBungerezaGurenadaGyo" + + "gyaGuyana enfalansaGanaGiburalitaGurenelandiGambyaGiniGwadalupeGayan" + + "a yaku ekwetaBuyonaaniGwatemalaGwamuGini-BisawuGayanaHundurasiKurowe" + + "syaHayitiHangareYindonezyaAyalandiYisirayeriBuyindiEbizinga bya Cago" + + "YiraakaYiraaniAyisirandiYitaleJamayikaYorodaniJapaniKenyaKirigizisit" + + "aaniKambodyaKiribatiEbizinga bya KomoroSenti Kitisi ne NevisiKoreya " + + "eya mumambukaKoreya eya mumaserengetaKuwetiEbizinga bya KayimaaniKaz" + + "akisitaaniLawosiLebanoniSenti LuciyaLicitensitayiniSirilankaLiberyaL" + + "esosoLisuwenyaLukisembaagaLativyaLibyaMorokoMonakoMolodovaMadagasika" + + "Bizinga bya MarisoMasedoniyaMaliMyanimaMongoliyaBizinga bya Mariyana" + + " ebyamumambukaMaritiniikiMawulitenyaMonteseraatiMalitaMawulisyasiEbi" + + "zinga bya MalidiveMalawiMekisikoMalezyaMozambiikiNamibiyaKaledonya m" + + "upyaNijeKizinga ky’eNorofokoNayijeryaNikaraguwaHolandiNoweNepaloNawu" + + "ruNiyuweNiyuziirandiOmaaniPanamaPeruPolinesiya enfalansaPapwa Nyugin" + + "iEbizinga bya FiripinoPakisitaaniPolandiSenti Piyere ni MikeloniPiti" + + "keeniPotorikoPalesitayini ni GazaPotugaaliPalawuParagwayiKataaLeyuny" + + "oniLomaniyaLasaRwandaSawudarebyaEbizanga bya SolomooniSesereSudaaniS" + + "wideniSingapowaSenti HerenaSirovenyaSirovakyaSiyeralewoneSanimarinoS" + + "enegaaloSomaliyaSurinaamuSanitome ni PurincipeEl salivadoSiriyaSwazi" + + "randiEbizinga bya Taaka ni KayikosiCaadiTogoTayirandiTajikisitaaniTo" + + "kelawuTimowaTakimenesitaaniTunisyaTongaTtakeTurindaadi ni TobagoTuva" + + "luTayiwaniYukurayineYugandaAmerikaWurugwayiWuzibekisitaaniVatikaaniS" + + "enti Vinsenti ni GurendadiiniVenzweraEbizinga bya Virigini ebitwalib" + + "wa BungerezaEbizinga bya Virigini eby’AmerikaVyetinaamuVanawuwatuWal" + + "isi ni FutunaSamowaYemeniMayotteSawusafirikaZambyaZimbabwe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x000e, 0x001b, 0x002e, 0x0035, 0x003e, + 0x0047, 0x004d, 0x004d, 0x0057, 0x0067, 0x0072, 0x007f, 0x0084, + 0x0084, 0x0092, 0x00a5, 0x00af, 0x00ba, 0x00c2, 0x00cf, 0x00d9, + 0x00e1, 0x00e8, 0x00ee, 0x00ee, 0x00f6, 0x00fe, 0x0106, 0x0106, + 0x010f, 0x0117, 0x011e, 0x011e, 0x0127, 0x012f, 0x0135, 0x013b, + 0x013b, 0x0149, 0x0164, 0x0169, 0x0175, 0x017f, 0x0191, 0x0195, + 0x019e, 0x01a4, 0x01ac, 0x01ac, 0x01b7, 0x01bb, 0x01d3, 0x01d3, + 0x01d3, 0x01db, 0x01ee, 0x01f5, 0x01f5, 0x01fc, 0x0205, 0x020d, + // Entry 40 - 7F + 0x0223, 0x022b, 0x022b, 0x0231, 0x023a, 0x0240, 0x0240, 0x0249, + 0x0251, 0x0258, 0x0258, 0x0258, 0x0261, 0x0265, 0x027e, 0x0289, + 0x0289, 0x0292, 0x0298, 0x02a1, 0x02a9, 0x02af, 0x02bf, 0x02bf, + 0x02c3, 0x02cd, 0x02d8, 0x02de, 0x02e2, 0x02eb, 0x02fd, 0x0306, + 0x0306, 0x030f, 0x0314, 0x031f, 0x0325, 0x0325, 0x0325, 0x032e, + 0x0337, 0x033d, 0x0344, 0x0344, 0x034e, 0x0356, 0x0360, 0x0360, + 0x0367, 0x0378, 0x037f, 0x0386, 0x0390, 0x0396, 0x0396, 0x039e, + 0x03a6, 0x03ac, 0x03b1, 0x03c0, 0x03c8, 0x03d0, 0x03e3, 0x03f9, + // Entry 80 - BF + 0x040d, 0x0425, 0x042b, 0x0441, 0x044e, 0x0454, 0x045c, 0x0468, + 0x0477, 0x0480, 0x0487, 0x048d, 0x0496, 0x04a2, 0x04a9, 0x04ae, + 0x04b4, 0x04ba, 0x04c2, 0x04c2, 0x04c2, 0x04cc, 0x04de, 0x04e8, + 0x04ec, 0x04f3, 0x04fc, 0x04fc, 0x051e, 0x0529, 0x0534, 0x0540, + 0x0546, 0x0551, 0x0566, 0x056c, 0x0574, 0x057b, 0x0585, 0x058d, + 0x059c, 0x05a0, 0x05b6, 0x05bf, 0x05c9, 0x05d0, 0x05d4, 0x05da, + 0x05e0, 0x05e6, 0x05f2, 0x05f8, 0x05fe, 0x0602, 0x0616, 0x0623, + 0x0638, 0x0643, 0x064a, 0x0662, 0x066b, 0x0673, 0x0687, 0x0690, + // Entry C0 - FF + 0x0696, 0x069f, 0x06a4, 0x06a4, 0x06ad, 0x06b5, 0x06b5, 0x06b9, + 0x06bf, 0x06ca, 0x06e0, 0x06e6, 0x06ed, 0x06f4, 0x06fd, 0x0709, + 0x0712, 0x0712, 0x071b, 0x0727, 0x0731, 0x073a, 0x0742, 0x074b, + 0x074b, 0x0760, 0x076b, 0x076b, 0x0771, 0x077b, 0x077b, 0x0799, + 0x079e, 0x079e, 0x07a2, 0x07ab, 0x07b8, 0x07c0, 0x07c6, 0x07d5, + 0x07dc, 0x07e1, 0x07e6, 0x07fa, 0x0800, 0x0808, 0x0808, 0x0812, + 0x0819, 0x0819, 0x0819, 0x0820, 0x0829, 0x0838, 0x0841, 0x085f, + 0x0867, 0x0892, 0x08b5, 0x08bf, 0x08c9, 0x08d9, 0x08df, 0x08df, + // Entry 100 - 13F + 0x08e5, 0x08ec, 0x08f8, 0x08fe, 0x0906, + }, + }, + { // yav + "Aŋtúlaimiláat i paaláapAfkanistáŋAŋtíka na PalpútaAŋkílaAlpaníAlmaníaAŋk" + + "úlaAlsaŋtínSámua u AmelíkaOtilísOtalalíAlúpaAsɛlpaisáŋPusiní-ɛlkofí" + + "naPalpatósPaŋkalatɛsPɛlsíikPulikínafásóPulukalíiPalɛŋPúlúndíPenɛŋPɛl" + + "mútaPulunéyPolífiaPilesílPahámasPutaŋPosuánaPelalúsPelíseKánátakitɔŋ" + + " kí kongóSantalafilíikKongósuwíisKótifualɛKúukeSilíKemelúnSíineKɔlɔ́" + + "mbíaKóstálíkakúpaKápfɛlsíplɛkitɔŋ kí cɛ́knsámansíputítanemálktúmúnék" + + "ekitɔŋ kí tumunikɛ́ŋAlselíekuatɛ́lɛstoniisípitelitéepanyáetiopífɛnlá" + + "ndfísimaluwínmikolonesífelensíkapɔ́ŋingilíískelenáatsɔlsíikuyáan u f" + + "elensíkanásílpalatáalkuluɛnlándkambíikiinékuatelúupkinéekuatolialkil" + + "ɛ́ɛkkuatemalákuamiɛkiinépisaókuyáanɔndúlasKolowasíiayítiɔngilíɛndon" + + "esíililándísilayɛ́lɛ́ɛndKɔɔ́m kí ndián yi ngilísilákiláŋisláanditalí" + + "samayíiksɔltanísapɔ́ɔŋkéniakilikisistáŋKámbósekilipatíKɔmɔ́ɔlsɛ́ŋkil" + + "istɔ́f eniɛ́fkɔlé u muɛnɛ́kɔlé wu mbátkowéetKáyímanɛkasaksitáŋlawósl" + + "ipáŋsɛ́ŋtɛ́lusílístɛ́nsitáyinsilíláŋkalipélialesotólitiyaníliksambúu" + + "lletonílipíimalóokmonakómoltafímatakaskáalílmalasáalmasetuánmalímiaŋ" + + "máalmongolíil maliyanɛ u muɛnɛ́maltiníikmolitanímɔŋsilámálɛ́tmolísma" + + "letíifmalawímɛksíikmalesímosambíknamipínufɛ́l kaletonínisɛ́ɛlil nɔ́l" + + "fɔ́lɔknisélianikalakánitililáandnɔlfɛ́ɛsnepáalnawulúniyuwénufɛ́l sel" + + "áandomáŋpanamápelúpolinesí u felensípapuasí nufɛ́l kiinéfilipíinpak" + + "istáŋpɔlɔ́ɔnysɛ́ŋpiɛ́l e mikelɔ́ŋpitikɛ́ɛlínɛ́pólótolíkokitɔŋ ki pal" + + "ɛstíinpɔltukáalpalawúpalakúékatáalelewuniɔ́ŋulumaníulusíuluándáalap" + + "ísawutíitil salomɔ́ŋsesɛ́ɛlsutáaŋsuɛ́tsingapúulsɛ́ŋtɛ́ elɛ́ɛnɛsilof" + + "enísilofakísieláleyɔ́ɔnsan malínosenekáalsomalísulináamsáwó tomé e p" + + "elensípesalfatɔ́ɔlsuasiláandtúluk na káyiikSáattokótayiláandtasikist" + + "áaŋtokelótimɔ́ɔl u nipálɛ́ntulukmenisitáaŋtunusítɔ́ŋkatulukíitilini" + + "táat na tupákɔtufalútayiwáantaŋsaníukilɛ́ɛnukándaamálíkaulukuéyusupe" + + "kistáaŋfatikáaŋsɛ́ŋ fɛŋsáŋ elekelenatíinfenesuweláFilisíin ungilíspi" + + "ndisúlɛ́ pi amálíkafiɛtnáamfanuatúwalíis na futúnasamowáyémɛnmayɔ́ɔt" + + "afilí mbátɛ́saambíisimbapuwé", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0008, 0x001b, 0x0027, 0x003b, 0x0043, 0x004a, + 0x0052, 0x005a, 0x005a, 0x0064, 0x0075, 0x007c, 0x0084, 0x008a, + 0x008a, 0x0097, 0x00a9, 0x00b2, 0x00be, 0x00c7, 0x00d6, 0x00e0, + 0x00e7, 0x00f1, 0x00f8, 0x00f8, 0x0101, 0x0109, 0x0111, 0x0111, + 0x0119, 0x0121, 0x0127, 0x0127, 0x012f, 0x0137, 0x013e, 0x0146, + 0x0146, 0x0158, 0x0166, 0x016c, 0x0173, 0x017e, 0x0184, 0x0189, + 0x0191, 0x0197, 0x01a4, 0x01a4, 0x01b0, 0x01b5, 0x01bd, 0x01bd, + 0x01bd, 0x01c4, 0x01d6, 0x01dd, 0x01dd, 0x01e5, 0x01ee, 0x01f9, + // Entry 40 - 7F + 0x0212, 0x0219, 0x0219, 0x0223, 0x022a, 0x0231, 0x0231, 0x0238, + 0x023e, 0x0245, 0x0245, 0x0245, 0x024e, 0x0253, 0x025b, 0x0266, + 0x0266, 0x026e, 0x0277, 0x0281, 0x028a, 0x0292, 0x02a4, 0x02a4, + 0x02a9, 0x02b6, 0x02c2, 0x02c9, 0x02cf, 0x02d9, 0x02e8, 0x02f2, + 0x02f2, 0x02fc, 0x0303, 0x030f, 0x0316, 0x0316, 0x0316, 0x031f, + 0x0329, 0x032f, 0x0337, 0x0337, 0x0341, 0x0349, 0x0355, 0x0355, + 0x035d, 0x037b, 0x0380, 0x0386, 0x038e, 0x0394, 0x0394, 0x039d, + 0x03a6, 0x03b1, 0x03b7, 0x03c5, 0x03ce, 0x03d7, 0x03e2, 0x03fd, + // Entry 80 - BF + 0x040f, 0x041e, 0x0425, 0x0430, 0x043c, 0x0442, 0x0449, 0x045a, + 0x046c, 0x0478, 0x0480, 0x0487, 0x0490, 0x049b, 0x04a2, 0x04a8, + 0x04af, 0x04b6, 0x04be, 0x04be, 0x04be, 0x04ca, 0x04d6, 0x04df, + 0x04e4, 0x04ee, 0x04f6, 0x04f6, 0x050e, 0x0518, 0x0521, 0x052b, + 0x0534, 0x053a, 0x0543, 0x054a, 0x0553, 0x055a, 0x0563, 0x056a, + 0x057c, 0x0586, 0x0598, 0x05a0, 0x05a9, 0x05b5, 0x05c1, 0x05c8, + 0x05cf, 0x05d6, 0x05e7, 0x05ed, 0x05f4, 0x05f9, 0x060d, 0x0625, + 0x062e, 0x0638, 0x0644, 0x0660, 0x0673, 0x0680, 0x0696, 0x06a1, + // Entry C0 - FF + 0x06a8, 0x06b1, 0x06b8, 0x06b8, 0x06c5, 0x06cd, 0x06cd, 0x06d3, + 0x06dc, 0x06eb, 0x06f9, 0x0703, 0x070b, 0x0712, 0x071c, 0x0734, + 0x073d, 0x073d, 0x0746, 0x0756, 0x0761, 0x076a, 0x0771, 0x077a, + 0x077a, 0x0793, 0x07a0, 0x07a0, 0x07a0, 0x07ab, 0x07ab, 0x07bc, + 0x07c1, 0x07c1, 0x07c6, 0x07d0, 0x07dd, 0x07e4, 0x07fc, 0x080d, + 0x0814, 0x081d, 0x0825, 0x083c, 0x0843, 0x084c, 0x0855, 0x0860, + 0x0867, 0x0867, 0x0867, 0x0870, 0x0878, 0x0886, 0x0890, 0x08b1, + 0x08bc, 0x08ce, 0x08e8, 0x08f2, 0x08fa, 0x090c, 0x0913, 0x0913, + // Entry 100 - 13F + 0x091a, 0x0924, 0x0934, 0x093c, 0x0946, + }, + }, + { // yi + "אַנדארעאַפֿגהאַניסטאַןאַנטיגוע און באַרבודעאַלבאַניעאַרמעניעאַנגאלעאַנטא" + + "ַרקטיקעאַרגענטינעעסטרייךאויסטראַליעאַרובאַבאסניע הערצעגאווינעבאַרבא" + + "ַדאסבאַנגלאַדעשבעלגיעבורקינע פֿאַסאבולגאַריעבורונדיבעניןבערמודעברונ" + + "ייבאליוויעבראַזילבאַהאַמאַסבהוטאַןבאצוואַנעבעלאַרוסבעליזקאַנאַדעקאנ" + + "גא־קינשאַזעצענטראַל־אַפֿריקאַנישע רעפּובליקשווייץהעלפֿאַ נדביין באר" + + "טןקוק אינזלעןטשילעקאַמערוןכינעקאלאמביעקאסטאַ ריקאַקובאַקאַפּווערדיש" + + "ע אינזלעןקוראַסאַאטשעכיידייטשלאַנדדזשיבוטידענמאַרקדאמיניקעדאמיניקאַ" + + "נישע רעפּובליקעקוואַדארעסטלאַנדעגיפּטןעריטרעעשפּאַניעעטיאפּיעאייראפ" + + "ּעישער פֿאַרבאַנדפֿינלאַנדפֿידזשיפֿאַלקלאַנד אינזלעןמיקראנעזיעפֿאַר" + + "א אינזלעןפֿראַנקרייךגאַבאןפֿאַראייניגטע קעניגרייךגרענאַדאַגרוזיעפֿר" + + "אַנצויזישע גויאַנעגערנזיגהאַנעגיבראַלטאַרגרינלאַנדגאַמביעגינעגוואַד" + + "עלופעקוואַטארישע גינעגריכנלאַנדגוואַטעמאַלעגוואַםגינע־ביסאַוגויאַנע" + + "האנדוראַסקראאַטיעהאַיטיאונגערןקאַנאַרישע אינזלעןאינדאנעזיעאירלאַנדי" + + "שראלאינדיעאיראַןאיסלאַנדאיטאַליעדזשערזידזשאַמייקעיאַפּאַןקעניעקאַמב" + + "אדיעקיריבאַטיקאמאראסקיימאַן אינזלעןלאַאסלבנוןליכטנשטייןסרי־לאַנקאַל" + + "יבעריעלעסאטאליטעלוקסעמבורגלעטלאַנדליביעמאַראקאמאנאַקאמאלדאוועמאנטענ" + + "עגראמאַדאַגאַסקאַרמאַרשאַל אינזלעןמאַקעדאניעמאַלימיאַנמאַרמאנגאליימ" + + "אַרטיניקמאַריטאַניעמאנטסעראַטמאַלטאַמאריציוסמאַלדיווןמאַלאַווימעקסי" + + "קעמאַלייזיעמאזאַמביקנאַמיביענײַ קאַלעדאניעניזשערנארפֿאלק אינזלניגער" + + "יעניקאַראַגועהאלאַנדנארוועגיענעפּאַלניו זילאַנדפּאַנאַמאַפּערופֿראַ" + + "נצויזישע פּאלינעזיעפּאַפּואַ נײַ גינעפֿיליפּינעןפּאַקיסטאַןפּוילןפּ" + + "יטקערן אינזלעןפּארטא־ריקאפּארטוגאַלפּאַראַגווײַקאַטאַררעאוניאןרומענ" + + "יעסערביערוסלאַנדרוואַנדעסאלאמאן אינזלעןסיישעלסודאַןשוועדןסינגאַפּור" + + "סט העלענעסלאוועניעסלאוואַקייסיערע לעאנעסאַן מאַרינאסענעגאַלסאמאַליע" + + "סורינאַםדרום־סודאַןסאַא טאמע און פּרינסיפּעעל סאַלוואַדארסיריעסוואַ" + + "זילאַנדטשאַדטאגאטיילאַנדטורקמעניסטאַןטוניסיעטאנגאַטערקייטרינידאַד א" + + "ון טאבאַגאטואוואַלוטאַנזאַניעאוקראַינעאוגאַנדעפֿאַראייניגטע שטאַטןא" + + "ורוגווייוואַטיקאַן שטאָטווענעזועלעוויעטנאַםוואַנואַטוסאַמאאַקאסאווא" + + "תימןמאַיאטדרום־אַפֿריקעזאַמביעזימבאַבוועאומבאַוואוסטער ראַיאןוועלטא" + + "ַפֿריקעצפון־אַמעריקעדרום־אַמעריקעאקעאַניעצענטראַל־אַמעריקעאַמעריקעצ" + + "פונדיקע אַמעריקעקאַראַאיבעמזרח אַזיעדרום־אַזיעדרום־מזרח אַזיעדרום־א" + + "ייראפּעפּאלינעזיעאַזיעצענטראַל־אַזיעמערב־אַזיעאייראפּעמזרח־אייראפּע" + + "צפֿון־אייראפּעמערב־אייראפּעלאַטיין־אַמעריקע", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000e, 0x000e, 0x002c, 0x0054, 0x0054, 0x0066, + 0x0076, 0x0084, 0x009c, 0x00b0, 0x00b0, 0x00be, 0x00d4, 0x00e2, + 0x00e2, 0x00e2, 0x0107, 0x011b, 0x0131, 0x013d, 0x0158, 0x016a, + 0x016a, 0x0178, 0x0182, 0x0182, 0x0190, 0x019c, 0x01ac, 0x01ac, + 0x01ba, 0x01ce, 0x01dc, 0x01dc, 0x01ee, 0x01fe, 0x0208, 0x0218, + 0x0218, 0x0234, 0x0273, 0x0273, 0x027f, 0x02a5, 0x02ba, 0x02c4, + 0x02d4, 0x02dc, 0x02ec, 0x02ec, 0x0303, 0x030d, 0x0336, 0x0348, + 0x0348, 0x0348, 0x0354, 0x0368, 0x0368, 0x0378, 0x0388, 0x0398, + // Entry 40 - 7F + 0x03c5, 0x03c5, 0x03c5, 0x03d7, 0x03e7, 0x03f5, 0x03f5, 0x0403, + 0x0413, 0x0423, 0x0450, 0x0450, 0x0462, 0x0470, 0x0495, 0x04a9, + 0x04c4, 0x04da, 0x04e6, 0x0513, 0x0525, 0x0531, 0x055a, 0x0566, + 0x0572, 0x0588, 0x059a, 0x05a8, 0x05b0, 0x05c4, 0x05e5, 0x05f9, + 0x05f9, 0x0611, 0x061d, 0x0633, 0x0641, 0x0641, 0x0641, 0x0653, + 0x0663, 0x066f, 0x067d, 0x06a0, 0x06b4, 0x06c4, 0x06ce, 0x06ce, + 0x06da, 0x06da, 0x06da, 0x06e6, 0x06f6, 0x0706, 0x0714, 0x0728, + 0x0728, 0x0738, 0x0742, 0x0742, 0x0754, 0x0766, 0x0774, 0x0774, + // Entry 80 - BF + 0x0774, 0x0774, 0x0774, 0x0791, 0x0791, 0x079b, 0x07a5, 0x07a5, + 0x07b9, 0x07cf, 0x07dd, 0x07e9, 0x07f1, 0x0805, 0x0815, 0x081f, + 0x082d, 0x083b, 0x084b, 0x085f, 0x085f, 0x087b, 0x089a, 0x08ae, + 0x08b8, 0x08ca, 0x08da, 0x08da, 0x08da, 0x08ec, 0x0902, 0x0916, + 0x0924, 0x0934, 0x0946, 0x0958, 0x0966, 0x0978, 0x098a, 0x099a, + 0x09b5, 0x09c1, 0x09dc, 0x09ea, 0x0a00, 0x0a0e, 0x0a20, 0x0a2e, + 0x0a2e, 0x0a2e, 0x0a43, 0x0a43, 0x0a57, 0x0a61, 0x0a90, 0x0ab2, + 0x0ac8, 0x0ade, 0x0aea, 0x0aea, 0x0b09, 0x0b1f, 0x0b1f, 0x0b33, + // Entry C0 - FF + 0x0b33, 0x0b4b, 0x0b59, 0x0b59, 0x0b69, 0x0b77, 0x0b83, 0x0b93, + 0x0ba3, 0x0ba3, 0x0bc0, 0x0bcc, 0x0bd8, 0x0be4, 0x0bf8, 0x0c09, + 0x0c1b, 0x0c1b, 0x0c2f, 0x0c44, 0x0c5b, 0x0c6b, 0x0c7b, 0x0c8b, + 0x0ca1, 0x0cce, 0x0ce9, 0x0ce9, 0x0cf3, 0x0d0b, 0x0d0b, 0x0d0b, + 0x0d15, 0x0d15, 0x0d1d, 0x0d2d, 0x0d2d, 0x0d2d, 0x0d2d, 0x0d47, + 0x0d55, 0x0d61, 0x0d6d, 0x0d95, 0x0da7, 0x0da7, 0x0dbb, 0x0dcd, + 0x0ddd, 0x0ddd, 0x0ddd, 0x0e04, 0x0e16, 0x0e16, 0x0e35, 0x0e35, + 0x0e49, 0x0e49, 0x0e49, 0x0e5b, 0x0e6f, 0x0e6f, 0x0e7d, 0x0e8b, + // Entry 100 - 13F + 0x0e93, 0x0e9f, 0x0eb9, 0x0ec7, 0x0edb, 0x0f04, 0x0f0e, 0x0f1e, + 0x0f38, 0x0f52, 0x0f62, 0x0f62, 0x0f84, 0x0f84, 0x0f84, 0x0f84, + 0x0f84, 0x0f94, 0x0fb5, 0x0fc9, 0x0fdc, 0x0ff0, 0x100d, 0x1027, + 0x1027, 0x1027, 0x1027, 0x103b, 0x1045, 0x1061, 0x1075, 0x1085, + 0x109f, 0x10bb, 0x10d5, 0x10f5, + }, + }, + { // yo + "Orílẹ́ède ÀàndóràOrílẹ́ède Ẹmirate ti Awọn ArabuOrílẹ́ède ÀfùgànístánìOr" + + "ílẹ́ède Ààntígúà àti BáríbúdàOrílẹ́ède ÀàngúlílàOrílẹ́ède Àlùbàníán" + + "ìOrílẹ́ède AméníàOrílẹ́ède ÀàngólàOrílẹ́ède AgentínàSámóánì ti Oríl" + + "ẹ́ède ÀméríkàOrílẹ́ède AsítíríàOrílẹ́ède ÁstràlìáOrílẹ́ède ÁrúbàOr" + + "ílẹ́ède Asẹ́bájánìOrílẹ́ède Bọ̀síníà àti ẸtisẹgófínàOrílẹ́ède Bábád" + + "ósìOrílẹ́ède BángáládésìOrílẹ́ède Bégíọ́mùOrílẹ́ède Bùùkíná FasòOrí" + + "lẹ́ède BùùgáríàOrílẹ́ède BáránìOrílẹ́ède BùùrúndìOrílẹ́ède Bẹ̀nẹ̀Orí" + + "lẹ́ède BémúdàOrílẹ́ède Búrúnẹ́lìOrílẹ́ède Bọ̀lífíyàOrílẹ́ède Bàràsíl" + + "ìOrílẹ́ède BàhámásìOrílẹ́ède BútánìOrílẹ́ède Bọ̀tìsúwánàOrílẹ́ède B" + + "élárúsìOrílẹ́ède Bèlísẹ̀Orílẹ́ède KánádàOrilẹ́ède KóngòOrílẹ́ède Àr" + + "in gùngun ÁfíríkàOrílẹ́ède KóngòOrílẹ́ède switiṣilandiOrílẹ́ède Kóút" + + "è foràOrílẹ́ède Etíokun KùúkùOrílẹ́ède ṣílèOrílẹ́ède KamerúúnìOrílẹ" + + "́ède ṣáínàOrílẹ́ède KòlómíbìaOrílẹ́ède Kuusita RíkàOrílẹ́ède KúbàOr" + + "ílẹ́ède Etíokun Kápé féndèOrílẹ́ède KúrúsìOrílẹ́ède ṣẹ́ẹ́kìOrílẹ́èd" + + "e GemaniOrílẹ́ède Díbọ́ótìOrílẹ́ède Dẹ́mákìOrílẹ́ède DòmíníkàOrilẹ́è" + + "de DòmíníkánìOrílẹ́ède ÀlùgèríánìOrílẹ́ède EkuádòOrílẹ́ède EsitoniaO" + + "rílẹ́ède ÉgípítìOrílẹ́ède EritiraOrílẹ́ède SipaniOrílẹ́ède EtopiaOrí" + + "lẹ́ède FilandiOrílẹ́ède FijiOrílẹ́ède Etikun FakalandiOrílẹ́ède Mako" + + "ronesiaOrílẹ́ède FaranseOrílẹ́ède GabonOrílẹ́ède OmobabirinOrílẹ́ède" + + " GenadaOrílẹ́ède GọgiaOrílẹ́ède Firenṣi GuanaOrílẹ́ède GanaOrílẹ́ède" + + " GibarataraOrílẹ́ède GerelandiOrílẹ́ède GambiaOrílẹ́ède GeneOrílẹ́èd" + + "e GadelopeOrílẹ́ède Ekutoria GiniOrílẹ́ède GeriisiOrílẹ́ède Guatemal" + + "aOrílẹ́ède GuamuOrílẹ́ède Gene-BusauOrílẹ́ède GuyanaOrílẹ́ède Hondur" + + "asiOrílẹ́ède KòróátíàOrílẹ́ède HaatiOrílẹ́ède HungariOrílẹ́ède Indon" + + "esiaOrílẹ́ède AilandiOrílẹ́ède IserẹliOrílẹ́ède IndiaOrílẹ́ède Etíku" + + "n Índíánì ti Ìlú BírítísìOrílẹ́ède IrakiOrílẹ́ède IraniOrílẹ́ède Aṣi" + + "landiOrílẹ́ède ItaliyiOrílẹ́ède JamaikaOrílẹ́ède JọdaniOrílẹ́ède Jap" + + "aniOrílẹ́ède KenyaOrílẹ́ède KuriṣisitaniOrílẹ́ède KàmùbódíàOrílẹ́ède" + + " KiribatiOrílẹ́ède KòmòrósìOrílẹ́ède Kiiti ati NeefiOrílẹ́ède Guusu " + + "KọriaOrílẹ́ède Ariwa KọriaOrílẹ́ède KuwetiOrílẹ́ède Etíokun KámánìOr" + + "ílẹ́ède KaṣaṣataniOrílẹ́ède LaosiOrílẹ́ède LebanoniOrílẹ́ède LuṣiaO" + + "rílẹ́ède LẹṣitẹnisiteniOrílẹ́ède Siri LankaOrílẹ́ède LaberiaOrílẹ́èd" + + "e LesotoOrílẹ́ède LituaniaOrílẹ́ède LusemogiOrílẹ́ède LatifiaOrílẹ́è" + + "de LibiyaOrílẹ́ède MorokoOrílẹ́ède MonakoOrílẹ́ède ModofiaOrílẹ́ède " + + "MadasikaOrílẹ́ède Etikun MáṣaliOrílẹ́ède MasidoniaOrílẹ́ède MaliOríl" + + "ẹ́ède ManamariOrílẹ́ède MogoliaOrílẹ́ède Etikun Guusu MarianaOrílẹ" + + "́ède MatinikuwiOrílẹ́ède MaritaniaOrílẹ́ède MotseratiOrílẹ́ède Mala" + + "taOrílẹ́ède MaritiusiOrílẹ́ède MaladifiOrílẹ́ède MalawiOrílẹ́ède Mes" + + "ikoOrílẹ́ède MalasiaOrílẹ́ède MoṣamibikuOrílẹ́ède NamibiaOrílẹ́ède K" + + "aledonia TitunOrílẹ́ède NàìjáOrílẹ́ède Etikun Nọ́úfókìOrílẹ́ède Nàìj" + + "íríàOrílẹ́ède NIkaraguaOrílẹ́ède NedalandiOrílẹ́ède NọọwiiOrílẹ́ède" + + " NepaOrílẹ́ède NauruOrílẹ́ède NiueOrílẹ́ède ṣilandi TitunOrílẹ́ède Ọ" + + "ọmaOrílẹ́ède PanamaOrílẹ́ède PeruOrílẹ́ède Firenṣi PolinesiaOrílẹ́" + + "ède Paapu ti GiiniOrílẹ́ède filipiniOrílẹ́ède PakisitanOrílẹ́ède Po" + + "landiOrílẹ́ède Pẹẹri ati mikuloniOrílẹ́ède PikariniOrílẹ́ède Pọto Ri" + + "koOrílẹ́ède Iwọorun Pakisitian ati GaṣaOrílẹ́ède PọtugiOrílẹ́ède Paa" + + "luOrílẹ́ède ParaguyeOrílẹ́ède KotaOrílẹ́ède RiuniyanOrílẹ́ède Romani" + + "yaOrílẹ́ède RọṣiaOrílẹ́ède RuwandaOrílẹ́ède Saudi ArabiaOrílẹ́ède Et" + + "ikun SolomoniOrílẹ́ède seṣẹlẹsiOrílẹ́ède SudaniOrílẹ́ède SwidiniOríl" + + "ẹ́ède SingapoOrílẹ́ède HẹlenaOrílẹ́ède SilofaniaOrílẹ́ède Silofaki" + + "aOrílẹ́ède Siria looniOrílẹ́ède Sani MarinoOrílẹ́ède SẹnẹgaOrílẹ́ède" + + " SomaliaOrílẹ́ède SurinamiOrílẹ́ède Sao tomi ati piriiṣipiOrílẹ́ède " + + "ẸẹsáfádòOrílẹ́ède SiriaOrílẹ́ède SaṣilandOrílẹ́ède Tọọki ati Etiku" + + "n KakọsiOrílẹ́ède ṣààdìOrílẹ́ède TogoOrílẹ́ède TailandiOrílẹ́ède Tak" + + "isitaniOrílẹ́ède TokelauOrílẹ́ède ÌlàOòrùn Tímọ̀Orílẹ́ède Tọọkimenis" + + "itaOrílẹ́ède TuniṣiaOrílẹ́ède TongaOrílẹ́ède TọọkiOrílẹ́ède Tirinida" + + " ati TobagaOrílẹ́ède TufaluOrílẹ́ède TaiwaniOrílẹ́ède TanṣaniaOrílẹ́" + + "ède UkariniOrílẹ́ède UgandaOrílẹ́ède Orilẹede AmerikaOrílẹ́ède Nrug" + + "uayiOrílẹ́ède NṣibẹkisitaniOrílẹ́ède FatikaniOrílẹ́ède Fisẹnnti ati " + + "GenadinaOrílẹ́ède FẹnẹṣuẹlaOrílẹ́ède Etíkun Fágínì ti ìlú BírítísìOr" + + "ílẹ́ède Etikun Fagini ti AmẹrikaOrílẹ́ède FẹtinamiOrílẹ́ède Faniatu" + + "Orílẹ́ède Wali ati futunaOrílẹ́ède SamọOrílẹ́ède yemeniOrílẹ́ède May" + + "oteOrílẹ́ède Ariwa AfirikaOrílẹ́ède ṣamibiaOrílẹ́ède ṣimibabe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x001a, 0x0042, 0x0063, 0x0091, 0x00ae, 0x00cd, + 0x00e5, 0x00ff, 0x00ff, 0x0118, 0x0141, 0x015c, 0x0177, 0x018e, + 0x018e, 0x01ad, 0x01e2, 0x01fd, 0x021c, 0x0239, 0x0259, 0x0275, + 0x028d, 0x02a8, 0x02c3, 0x02c3, 0x02db, 0x02f9, 0x0317, 0x0317, + 0x0332, 0x034d, 0x0365, 0x0365, 0x0386, 0x03a1, 0x03bc, 0x03d4, + 0x03d4, 0x03e9, 0x0411, 0x0427, 0x0444, 0x0461, 0x0481, 0x0498, + 0x04b3, 0x04cc, 0x04e8, 0x04e8, 0x0505, 0x051a, 0x0540, 0x0540, + 0x0540, 0x0558, 0x0577, 0x058c, 0x058c, 0x05a9, 0x05c4, 0x05df, + // Entry 40 - 7F + 0x05fc, 0x061b, 0x061b, 0x0632, 0x0649, 0x0663, 0x0663, 0x0679, + 0x068e, 0x06a3, 0x06a3, 0x06a3, 0x06b9, 0x06cc, 0x06eb, 0x0705, + 0x0705, 0x071b, 0x072f, 0x0748, 0x075d, 0x0773, 0x0791, 0x0791, + 0x07a4, 0x07bd, 0x07d5, 0x07ea, 0x07fd, 0x0814, 0x0830, 0x0846, + 0x0846, 0x085e, 0x0872, 0x088b, 0x08a0, 0x08a0, 0x08a0, 0x08b8, + 0x08d4, 0x08e8, 0x08fe, 0x08fe, 0x0916, 0x092c, 0x0944, 0x0944, + 0x0958, 0x0990, 0x09a4, 0x09b8, 0x09d1, 0x09e7, 0x09e7, 0x09fd, + 0x0a14, 0x0a29, 0x0a3d, 0x0a5a, 0x0a77, 0x0a8e, 0x0aa9, 0x0ac7, + // Entry 80 - BF + 0x0ae3, 0x0aff, 0x0b14, 0x0b35, 0x0b52, 0x0b66, 0x0b7d, 0x0b93, + 0x0bb6, 0x0bcf, 0x0be5, 0x0bfa, 0x0c11, 0x0c28, 0x0c3e, 0x0c53, + 0x0c68, 0x0c7d, 0x0c93, 0x0c93, 0x0c93, 0x0caa, 0x0cc9, 0x0ce1, + 0x0cf4, 0x0d0b, 0x0d21, 0x0d21, 0x0d44, 0x0d5d, 0x0d75, 0x0d8d, + 0x0da2, 0x0dba, 0x0dd1, 0x0de6, 0x0dfb, 0x0e11, 0x0e2c, 0x0e42, + 0x0e60, 0x0e77, 0x0e9b, 0x0eb7, 0x0ecf, 0x0ee7, 0x0f00, 0x0f13, + 0x0f27, 0x0f3a, 0x0f58, 0x0f6f, 0x0f84, 0x0f97, 0x0fb9, 0x0fd6, + 0x0fed, 0x1005, 0x101b, 0x1040, 0x1057, 0x1071, 0x109f, 0x10b6, + // Entry C0 - FF + 0x10ca, 0x10e1, 0x10f4, 0x10f4, 0x110b, 0x1122, 0x1122, 0x113a, + 0x1150, 0x116b, 0x1189, 0x11a6, 0x11bb, 0x11d1, 0x11e7, 0x11fe, + 0x1216, 0x1216, 0x122e, 0x1248, 0x1262, 0x127b, 0x1291, 0x12a8, + 0x12a8, 0x12cf, 0x12ed, 0x12ed, 0x1301, 0x131a, 0x131a, 0x1346, + 0x135f, 0x135f, 0x1372, 0x1389, 0x13a2, 0x13b8, 0x13dd, 0x13fd, + 0x1415, 0x1429, 0x1441, 0x1463, 0x1478, 0x148e, 0x14a7, 0x14bd, + 0x14d2, 0x14d2, 0x14d2, 0x14f3, 0x150a, 0x152a, 0x1541, 0x1567, + 0x1587, 0x15bd, 0x15e6, 0x15ff, 0x1615, 0x1633, 0x1648, 0x1648, + // Entry 100 - 13F + 0x165d, 0x1672, 0x168e, 0x16a6, 0x16bf, + }, + }, + { // yo-BJ + "Orílɛ́ède ÀàndóràOrílɛ́ède Ɛmirate ti Awɔn ArabuOrílɛ́ède ÀfùgànístánìOr" + + "ílɛ́ède Ààntígúà àti BáríbúdàOrílɛ́ède ÀàngúlílàOrílɛ́ède Àlùbàníán" + + "ìOrílɛ́ède AméníàOrílɛ́ède ÀàngólàOrílɛ́ède AgentínàSámóánì ti Oríl" + + "ɛ́ède ÀméríkàOrílɛ́ède AsítíríàOrílɛ́ède ÁstràlìáOrílɛ́ède ÁrúbàOrí" + + "lɛ́ède Asɛ́bájánìOrílɛ́ède Bɔ̀síníà àti ƐtisɛgófínàOrílɛ́ède Bábádós" + + "ìOrílɛ́ède BángáládésìOrílɛ́ède Bégíɔ́mùOrílɛ́ède Bùùkíná FasòOrílɛ" + + "́ède BùùgáríàOrílɛ́ède BáránìOrílɛ́ède BùùrúndìOrílɛ́ède Bɛ̀nɛ̀Oríl" + + "ɛ́ède BémúdàOrílɛ́ède Búrúnɛ́lìOrílɛ́ède Bɔ̀lífíyàOrílɛ́ède Bàràsíl" + + "ìOrílɛ́ède BàhámásìOrílɛ́ède BútánìOrílɛ́ède Bɔ̀tìsúwánàOrílɛ́ède B" + + "élárúsìOrílɛ́ède Bèlísɛ̀Orílɛ́ède KánádàOrilɛ́ède KóngòOrílɛ́ède Àr" + + "in gùngun ÁfíríkàOrílɛ́ède KóngòOrílɛ́ède switishilandiOrílɛ́ède Kóú" + + "tè foràOrílɛ́ède Etíokun KùúkùOrílɛ́ède shílèOrílɛ́ède KamerúúnìOríl" + + "ɛ́ède sháínàOrílɛ́ède KòlómíbìaOrílɛ́ède Kuusita RíkàOrílɛ́ède Kúbà" + + "Orílɛ́ède Etíokun Kápé féndèOrílɛ́ède KúrúsìOrílɛ́ède shɛ́ɛ́kìOrílɛ́" + + "ède GemaniOrílɛ́ède Díbɔ́ótìOrílɛ́ède Dɛ́mákìOrílɛ́ède DòmíníkàOril" + + "ɛ́ède DòmíníkánìOrílɛ́ède ÀlùgèríánìOrílɛ́ède EkuádòOrílɛ́ède Esito" + + "niaOrílɛ́ède ÉgípítìOrílɛ́ède EritiraOrílɛ́ède SipaniOrílɛ́ède Etopi" + + "aOrílɛ́ède FilandiOrílɛ́ède FijiOrílɛ́ède Etikun FakalandiOrílɛ́ède " + + "MakoronesiaOrílɛ́ède FaranseOrílɛ́ède GabonOrílɛ́ède OmobabirinOrílɛ" + + "́ède GenadaOrílɛ́ède GɔgiaOrílɛ́ède Firenshi GuanaOrílɛ́ède GanaOrí" + + "lɛ́ède GibarataraOrílɛ́ède GerelandiOrílɛ́ède GambiaOrílɛ́ède GeneOr" + + "ílɛ́ède GadelopeOrílɛ́ède Ekutoria GiniOrílɛ́ède GeriisiOrílɛ́ède G" + + "uatemalaOrílɛ́ède GuamuOrílɛ́ède Gene-BusauOrílɛ́ède GuyanaOrílɛ́ède" + + " HondurasiOrílɛ́ède KòróátíàOrílɛ́ède HaatiOrílɛ́ède HungariOrílɛ́èd" + + "e IndonesiaOrílɛ́ède AilandiOrílɛ́ède IserɛliOrílɛ́ède IndiaOrílɛ́èd" + + "e Etíkun Índíánì ti Ìlú BírítísìOrílɛ́ède IrakiOrílɛ́ède IraniOrílɛ́" + + "ède AshilandiOrílɛ́ède ItaliyiOrílɛ́ède JamaikaOrílɛ́ède JɔdaniOríl" + + "ɛ́ède JapaniOrílɛ́ède KenyaOrílɛ́ède KurishisitaniOrílɛ́ède Kàmùbód" + + "íàOrílɛ́ède KiribatiOrílɛ́ède KòmòrósìOrílɛ́ède Kiiti ati NeefiOríl" + + "ɛ́ède Guusu KɔriaOrílɛ́ède Ariwa KɔriaOrílɛ́ède KuwetiOrílɛ́ède Etí" + + "okun KámánìOrílɛ́ède KashashataniOrílɛ́ède LaosiOrílɛ́ède LebanoniOr" + + "ílɛ́ède LushiaOrílɛ́ède LɛshitɛnisiteniOrílɛ́ède Siri LankaOrílɛ́èd" + + "e LaberiaOrílɛ́ède LesotoOrílɛ́ède LituaniaOrílɛ́ède LusemogiOrílɛ́è" + + "de LatifiaOrílɛ́ède LibiyaOrílɛ́ède MorokoOrílɛ́ède MonakoOrílɛ́ède " + + "ModofiaOrílɛ́ède MadasikaOrílɛ́ède Etikun MáshaliOrílɛ́ède Masidonia" + + "Orílɛ́ède MaliOrílɛ́ède ManamariOrílɛ́ède MogoliaOrílɛ́ède Etikun Gu" + + "usu MarianaOrílɛ́ède MatinikuwiOrílɛ́ède MaritaniaOrílɛ́ède Motserat" + + "iOrílɛ́ède MalataOrílɛ́ède MaritiusiOrílɛ́ède MaladifiOrílɛ́ède Mala" + + "wiOrílɛ́ède MesikoOrílɛ́ède MalasiaOrílɛ́ède MoshamibikuOrílɛ́ède Na" + + "mibiaOrílɛ́ède Kaledonia TitunOrílɛ́ède NàìjáOrílɛ́ède Etikun Nɔ́úfó" + + "kìOrílɛ́ède NàìjíríàOrílɛ́ède NIkaraguaOrílɛ́ède NedalandiOrílɛ́ède " + + "NɔɔwiiOrílɛ́ède NepaOrílɛ́ède NauruOrílɛ́ède NiueOrílɛ́ède shilandi " + + "TitunOrílɛ́ède ƆɔmaOrílɛ́ède PanamaOrílɛ́ède PeruOrílɛ́ède Firenshi " + + "PolinesiaOrílɛ́ède Paapu ti GiiniOrílɛ́ède filipiniOrílɛ́ède Pakisit" + + "anOrílɛ́ède PolandiOrílɛ́ède Pɛɛri ati mikuloniOrílɛ́ède PikariniOrí" + + "lɛ́ède Pɔto RikoOrílɛ́ède Iwɔorun Pakisitian ati GashaOrílɛ́ède Pɔtu" + + "giOrílɛ́ède PaaluOrílɛ́ède ParaguyeOrílɛ́ède KotaOrílɛ́ède RiuniyanO" + + "rílɛ́ède RomaniyaOrílɛ́ède RɔshiaOrílɛ́ède RuwandaOrílɛ́ède Saudi Ar" + + "abiaOrílɛ́ède Etikun SolomoniOrílɛ́ède seshɛlɛsiOrílɛ́ède SudaniOríl" + + "ɛ́ède SwidiniOrílɛ́ède SingapoOrílɛ́ède HɛlenaOrílɛ́ède SilofaniaOr" + + "ílɛ́ède SilofakiaOrílɛ́ède Siria looniOrílɛ́ède Sani MarinoOrílɛ́èd" + + "e SɛnɛgaOrílɛ́ède SomaliaOrílɛ́ède SurinamiOrílɛ́ède Sao tomi ati pi" + + "riishipiOrílɛ́ède ƐɛsáfádòOrílɛ́ède SiriaOrílɛ́ède SashilandOrílɛ́èd" + + "e Tɔɔki ati Etikun KakɔsiOrílɛ́ède shààdìOrílɛ́ède TogoOrílɛ́ède Tai" + + "landiOrílɛ́ède TakisitaniOrílɛ́ède TokelauOrílɛ́ède ÌlàOòrùn Tímɔ̀Or" + + "ílɛ́ède TɔɔkimenisitaOrílɛ́ède TunishiaOrílɛ́ède TongaOrílɛ́ède Tɔɔ" + + "kiOrílɛ́ède Tirinida ati TobagaOrílɛ́ède TufaluOrílɛ́ède TaiwaniOríl" + + "ɛ́ède TanshaniaOrílɛ́ède UkariniOrílɛ́ède UgandaOrílɛ́ède Orilɛede " + + "AmerikaOrílɛ́ède NruguayiOrílɛ́ède NshibɛkisitaniOrílɛ́ède FatikaniO" + + "rílɛ́ède Fisɛnnti ati GenadinaOrílɛ́ède FɛnɛshuɛlaOrílɛ́ède Etíkun F" + + "ágínì ti ìlú BírítísìOrílɛ́ède Etikun Fagini ti AmɛrikaOrílɛ́ède Fɛ" + + "tinamiOrílɛ́ède FaniatuOrílɛ́ède Wali ati futunaOrílɛ́ède SamɔOrílɛ́" + + "ède yemeniOrílɛ́ède MayoteOrílɛ́ède Ariwa AfirikaOrílɛ́ède shamibia" + + "Orílɛ́ède shimibabe", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0019, 0x003e, 0x005e, 0x008b, 0x00a7, 0x00c5, + 0x00dc, 0x00f5, 0x00f5, 0x010d, 0x0135, 0x014f, 0x0169, 0x017f, + 0x017f, 0x019c, 0x01cd, 0x01e7, 0x0205, 0x0220, 0x023f, 0x025a, + 0x0271, 0x028b, 0x02a3, 0x02a3, 0x02ba, 0x02d6, 0x02f2, 0x02f2, + 0x030c, 0x0326, 0x033d, 0x033d, 0x035c, 0x0376, 0x038f, 0x03a6, + 0x03a6, 0x03ba, 0x03e1, 0x03f6, 0x0411, 0x042d, 0x044c, 0x0461, + 0x047b, 0x0492, 0x04ad, 0x04ad, 0x04c9, 0x04dd, 0x0502, 0x0502, + 0x0502, 0x0519, 0x0534, 0x0548, 0x0548, 0x0563, 0x057c, 0x0596, + // Entry 40 - 7F + 0x05b2, 0x05d0, 0x05d0, 0x05e6, 0x05fc, 0x0615, 0x0615, 0x062a, + 0x063e, 0x0652, 0x0652, 0x0652, 0x0667, 0x0679, 0x0697, 0x06b0, + 0x06b0, 0x06c5, 0x06d8, 0x06f0, 0x0704, 0x0718, 0x0734, 0x0734, + 0x0746, 0x075e, 0x0775, 0x0789, 0x079b, 0x07b1, 0x07cc, 0x07e1, + 0x07e1, 0x07f8, 0x080b, 0x0823, 0x0837, 0x0837, 0x0837, 0x084e, + 0x0869, 0x087c, 0x0891, 0x0891, 0x08a8, 0x08bd, 0x08d3, 0x08d3, + 0x08e6, 0x091d, 0x0930, 0x0943, 0x095a, 0x096f, 0x096f, 0x0984, + 0x0999, 0x09ad, 0x09c0, 0x09db, 0x09f7, 0x0a0d, 0x0a27, 0x0a44, + // Entry 80 - BF + 0x0a5e, 0x0a78, 0x0a8c, 0x0aac, 0x0ac6, 0x0ad9, 0x0aef, 0x0b03, + 0x0b22, 0x0b3a, 0x0b4f, 0x0b63, 0x0b79, 0x0b8f, 0x0ba4, 0x0bb8, + 0x0bcc, 0x0be0, 0x0bf5, 0x0bf5, 0x0bf5, 0x0c0b, 0x0c28, 0x0c3f, + 0x0c51, 0x0c67, 0x0c7c, 0x0c7c, 0x0c9e, 0x0cb6, 0x0ccd, 0x0ce4, + 0x0cf8, 0x0d0f, 0x0d25, 0x0d39, 0x0d4d, 0x0d62, 0x0d7b, 0x0d90, + 0x0dad, 0x0dc3, 0x0de5, 0x0e00, 0x0e17, 0x0e2e, 0x0e44, 0x0e56, + 0x0e69, 0x0e7b, 0x0e97, 0x0eab, 0x0ebf, 0x0ed1, 0x0ef1, 0x0f0d, + 0x0f23, 0x0f3a, 0x0f4f, 0x0f71, 0x0f87, 0x0f9f, 0x0fca, 0x0fdf, + // Entry C0 - FF + 0x0ff2, 0x1008, 0x101a, 0x101a, 0x1030, 0x1046, 0x1046, 0x105b, + 0x1070, 0x108a, 0x10a7, 0x10c0, 0x10d4, 0x10e9, 0x10fe, 0x1113, + 0x112a, 0x112a, 0x1141, 0x115a, 0x1173, 0x1189, 0x119e, 0x11b4, + 0x11b4, 0x11d9, 0x11f4, 0x11f4, 0x1207, 0x121e, 0x121e, 0x1246, + 0x125d, 0x125d, 0x126f, 0x1285, 0x129d, 0x12b2, 0x12d5, 0x12f2, + 0x1308, 0x131b, 0x1330, 0x1351, 0x1365, 0x137a, 0x1391, 0x13a6, + 0x13ba, 0x13ba, 0x13ba, 0x13d9, 0x13ef, 0x140c, 0x1422, 0x1446, + 0x1461, 0x1496, 0x14bd, 0x14d4, 0x14e9, 0x1506, 0x1519, 0x1519, + // Entry 100 - 13F + 0x152d, 0x1541, 0x155c, 0x1572, 0x1589, + }, + }, + { // yue + "阿森松島安道爾阿拉伯聯合大公國阿富汗安提瓜同巴布達安圭拉阿爾巴尼亞亞美尼亞安哥拉南極洲阿根廷美屬薩摩亞奧地利澳洲荷屬阿魯巴奧蘭群島亞塞拜然波斯尼" + + "亞同黑塞哥維那巴貝多孟加拉比利時布吉納法索保加利亞巴林蒲隆地貝南聖巴瑟米百慕達汶萊玻利維亞荷蘭加勒比區巴西巴哈馬不丹布威島波札那白俄" + + "羅斯貝里斯加拿大科科斯(基林)群島剛果(金夏沙)中非共和國剛果(布拉薩)瑞士象牙海岸庫克群島智利喀麥隆中華人民共和國哥倫比亞克里派頓" + + "島哥斯大黎加古巴維德角庫拉索聖誕島賽普勒斯捷克共和國德國迪亞哥加西亞島吉布地丹麥多米尼克多明尼加共和國阿爾及利亞休達與梅利利亞厄瓜多" + + "愛沙尼亞埃及西撒哈拉厄利垂亞西班牙衣索比亞歐盟芬蘭斐濟福克蘭群島密克羅尼西亞群島法羅群島法國加彭英國格瑞那達喬治亞共和國法屬圭亞那根" + + "西島迦納直布羅陀格陵蘭甘比亞幾內亞瓜地洛普赤道幾內亞希臘南佐治亞島同南桑威奇群島瓜地馬拉關島幾內亞比索蓋亞那中華人民共和國香港特別行" + + "政區赫德島同麥克唐納群島宏都拉斯克羅埃西亞海地匈牙利加那利群島印尼愛爾蘭以色列曼島印度英屬印度洋領地伊拉克伊朗冰島義大利澤西島牙買加" + + "約旦日本肯亞吉爾吉斯柬埔寨吉里巴斯葛摩聖基茨同尼維斯北韓南韓科威特開曼群島哈薩克寮國黎巴嫩聖露西亞列支敦斯登斯里蘭卡賴比瑞亞賴索托立" + + "陶宛盧森堡拉脫維亞利比亞摩洛哥摩納哥摩爾多瓦蒙特內哥羅法屬聖馬丁馬達加斯加馬紹爾群島馬其頓馬利緬甸蒙古中華人民共和國澳門特別行政區北" + + "馬里亞納群島馬丁尼克島茅利塔尼亞蒙哲臘馬爾他模里西斯馬爾地夫馬拉威墨西哥馬來西亞莫三比克納米比亞新喀里多尼亞尼日諾福克島奈及利亞尼加" + + "拉瓜荷蘭挪威尼泊爾諾魯紐埃島紐西蘭阿曼王國巴拿馬秘魯法屬玻里尼西亞巴布亞紐幾內亞菲律賓巴基斯坦波蘭聖皮埃爾同密克隆群島皮特肯群島波多" + + "黎各巴勒斯坦自治區葡萄牙帛琉巴拉圭卡達大洋洲邊疆群島留尼旺羅馬尼亞塞爾維亞俄羅斯盧安達沙烏地阿拉伯索羅門群島塞席爾蘇丹瑞典新加坡聖赫" + + "勒拿島斯洛維尼亞斯瓦爾巴特群島同揚馬延島斯洛伐克獅子山聖馬利諾塞內加爾索馬利亞蘇利南南蘇丹聖多美同普林西比薩爾瓦多荷屬聖馬丁敘利亞史" + + "瓦濟蘭特里斯坦達庫尼亞群島土克斯及開科斯群島查德法屬南方屬地多哥泰國塔吉克托克勞群島東帝汶土庫曼突尼西亞東加土耳其千里達同多巴哥吐瓦" + + "魯台灣坦尚尼亞烏克蘭烏干達美國本土外小島嶼美國烏拉圭烏茲別克梵蒂岡聖文森特同格林納丁斯委內瑞拉英屬維京群島美屬維京群島越南萬那杜瓦利" + + "斯同富圖納群島薩摩亞科索沃葉門馬約特南非尚比亞辛巴威未知區域世界非洲北美洲南美洲大洋洲西非中美東非北非中非非洲南部美洲北美加勒比海東" + + "亞南亞東南亞南歐澳洲同紐西蘭美拉尼西亞密克羅尼西亞玻里尼西亞亞洲中亞西亞歐洲東歐北歐西歐拉丁美洲", + []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0015, 0x002d, 0x0036, 0x004b, 0x0054, 0x0063, + 0x006f, 0x0078, 0x0081, 0x008a, 0x0099, 0x00a2, 0x00a8, 0x00b7, + 0x00c3, 0x00cf, 0x00ed, 0x00f6, 0x00ff, 0x0108, 0x0117, 0x0123, + 0x0129, 0x0132, 0x0138, 0x0144, 0x014d, 0x0153, 0x015f, 0x0171, + 0x0177, 0x0180, 0x0186, 0x018f, 0x0198, 0x01a4, 0x01ad, 0x01b6, + 0x01d1, 0x01e6, 0x01f5, 0x020a, 0x0210, 0x021c, 0x0228, 0x022e, + 0x0237, 0x024c, 0x0258, 0x0267, 0x0276, 0x027c, 0x0285, 0x028e, + 0x0297, 0x02a3, 0x02b2, 0x02b8, 0x02cd, 0x02d6, 0x02dc, 0x02e8, + // Entry 40 - 7F + 0x02fd, 0x030c, 0x0321, 0x032a, 0x0336, 0x033c, 0x0348, 0x0354, + 0x035d, 0x0369, 0x036f, 0x036f, 0x0375, 0x037b, 0x038a, 0x03a2, + 0x03ae, 0x03b4, 0x03ba, 0x03c0, 0x03cc, 0x03de, 0x03ed, 0x03f6, + 0x03fc, 0x0408, 0x0411, 0x041a, 0x0423, 0x042f, 0x043e, 0x0444, + 0x0468, 0x0474, 0x047a, 0x0489, 0x0492, 0x04bc, 0x04da, 0x04e6, + 0x04f5, 0x04fb, 0x0504, 0x0513, 0x0519, 0x0522, 0x052b, 0x0531, + 0x0537, 0x054c, 0x0555, 0x055b, 0x0561, 0x056a, 0x0573, 0x057c, + 0x0582, 0x0588, 0x058e, 0x059a, 0x05a3, 0x05af, 0x05b5, 0x05ca, + // Entry 80 - BF + 0x05d0, 0x05d6, 0x05df, 0x05eb, 0x05f4, 0x05fa, 0x0603, 0x060f, + 0x061e, 0x062a, 0x0636, 0x063f, 0x0648, 0x0651, 0x065d, 0x0666, + 0x066f, 0x0678, 0x0684, 0x0693, 0x06a2, 0x06b1, 0x06c0, 0x06c9, + 0x06cf, 0x06d5, 0x06db, 0x0705, 0x071a, 0x0729, 0x0738, 0x0741, + 0x074a, 0x0756, 0x0762, 0x076b, 0x0774, 0x0780, 0x078c, 0x0798, + 0x07aa, 0x07b0, 0x07bc, 0x07c8, 0x07d4, 0x07da, 0x07e0, 0x07e9, + 0x07ef, 0x07f8, 0x0801, 0x080d, 0x0816, 0x081c, 0x0831, 0x0846, + 0x084f, 0x085b, 0x0861, 0x087f, 0x088e, 0x089a, 0x08af, 0x08b8, + // Entry C0 - FF + 0x08be, 0x08c7, 0x08cd, 0x08e2, 0x08eb, 0x08f7, 0x0903, 0x090c, + 0x0915, 0x0927, 0x0936, 0x093f, 0x0945, 0x094b, 0x0954, 0x0963, + 0x0972, 0x0996, 0x09a2, 0x09ab, 0x09b7, 0x09c3, 0x09cf, 0x09d8, + 0x09e1, 0x09f9, 0x0a05, 0x0a14, 0x0a1d, 0x0a29, 0x0a47, 0x0a62, + 0x0a68, 0x0a7a, 0x0a80, 0x0a86, 0x0a8f, 0x0a9e, 0x0aa7, 0x0ab0, + 0x0abc, 0x0ac2, 0x0acb, 0x0ae0, 0x0ae9, 0x0aef, 0x0afb, 0x0b04, + 0x0b0d, 0x0b25, 0x0b25, 0x0b2b, 0x0b34, 0x0b40, 0x0b49, 0x0b67, + 0x0b73, 0x0b85, 0x0b97, 0x0b9d, 0x0ba6, 0x0bc1, 0x0bca, 0x0bd3, + // Entry 100 - 13F + 0x0bd9, 0x0be2, 0x0be8, 0x0bf1, 0x0bfa, 0x0c06, 0x0c0c, 0x0c12, + 0x0c1b, 0x0c24, 0x0c2d, 0x0c33, 0x0c39, 0x0c3f, 0x0c45, 0x0c4b, + 0x0c57, 0x0c5d, 0x0c63, 0x0c6f, 0x0c75, 0x0c7b, 0x0c84, 0x0c8a, + 0x0c9c, 0x0cab, 0x0cbd, 0x0ccc, 0x0cd2, 0x0cd8, 0x0cde, 0x0ce4, + 0x0cea, 0x0cf0, 0x0cf6, 0x0d02, + }, + }, + { // zgh + "ⴰⵏⴷⵓⵔⴰⵍⵉⵎⴰⵔⴰⵜⴰⴼⵖⴰⵏⵉⵙⵜⴰⵏⴰⵏⵜⵉⴳⴰ ⴷ ⴱⵔⴱⵓⴷⴰⴰⵏⴳⵉⵍⴰⴰⵍⴱⴰⵏⵢⴰⴰⵔⵎⵉⵏⵢⴰⴰⵏⴳⵓⵍⴰⴰⵔⵊⴰⵏⵜⵉⵏ" + + "ⵙⴰⵎⵡⴰ ⵜⴰⵎⵉⵔⵉⴽⴰⵏⵉⵜⵏⵏⵎⵙⴰⵓⵙⵜⵔⴰⵍⵢⴰⴰⵔⵓⴱⴰⴰⴷⵔⴰⴱⵉⵊⴰⵏⴱⵓⵙⵏⴰ ⴷ ⵀⵉⵔⵙⵉⴽⴱⴰⵔⴱⴰⴷⴱⴰ" + + "ⵏⴳⵍⴰⴷⵉⵛⴱⵍⵊⵉⴽⴰⴱⵓⵔⴽⵉⵏⴰ ⴼⴰⵙⵓⴱⵍⵖⴰⵔⵢⴰⴱⵃⵔⴰⵢⵏⴱⵓⵔⵓⵏⴷⵉⴱⵉⵏⵉⵏⴱⵔⵎⵓⴷⴰⴱⵔⵓⵏⵉⴱⵓⵍⵉⴱ" + + "ⵢⴰⴱⵔⴰⵣⵉⵍⴱⴰⵀⴰⵎⴰⵙⴱⵀⵓⵜⴰⵏⴱⵓⵜⵙⵡⴰⵏⴰⴱⵉⵍⴰⵔⵓⵙⵢⴰⴱⵉⵍⵉⵣⴽⴰⵏⴰⴷⴰⵜⴰⴳⴷⵓⴷⴰⵏⵜ ⵜⴰⴷⵉⵎⵓⵇ" + + "ⵔⴰⵜⵉⵜ ⵏ ⴽⵓⵏⴳⵓⵜⴰⴳⴷⵓⴷⴰⵏⵜ ⵜⴰⵏⴰⵎⵎⴰⵙⵜ ⵏ ⵉⴼⵔⵉⵇⵢⴰⴽⵓⵏⴳⵓⵙⵡⵉⵙⵔⴰⴽⵓⵜ ⴷⵉⴼⵡⴰⵔⵜⵉⴳ" + + "ⵣⵉⵔⵉⵏ ⵏ ⴽⵓⴽⵛⵛⵉⵍⵉⴽⴰⵎⵉⵔⵓⵏⵛⵛⵉⵏⵡⴰⴽⵓⵍⵓⵎⴱⵢⴰⴽⵓⵙⵜⴰ ⵔⵉⴽⴰⴽⵓⴱⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⴽⴰⴱⴱ" + + "ⵉⵔⴷⵉⵇⵓⴱⵔⵓⵙⵜⴰⴳⴷⵓⴷⴰⵏⵜ ⵜⴰⵜⵛⵉⴽⵉⵜⴰⵍⵎⴰⵏⵢⴰⴷⵊⵉⴱⵓⵜⵉⴷⴰⵏⵎⴰⵔⴽⴷⵓⵎⵉⵏⵉⴽⵜⴰⴳⴷⵓⴷⴰⵏⵜ " + + "ⵜⴰⴷⵓⵎⵉⵏⵉⴽⵜⴷⵣⴰⵢⵔⵉⴽⵡⴰⴷⵓⵔⵉⵙⵜⵓⵏⵢⴰⵎⵉⵚⵕⵉⵔⵉⵜⵉⵔⵢⴰⵙⴱⴰⵏⵢⴰⵉⵜⵢⵓⴱⵢⴰⴼⵉⵍⵍⴰⵏⴷⴰⴼⵉⴷⵊ" + + "ⵉⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵎⴰⵍⴰⵡⵉⵎⵉⴽⵔⵓⵏⵉⵣⵢⴰⴼⵔⴰⵏⵙⴰⴳⴰⴱⵓⵏⵜⴰⴳⵍⴷⵉⵜ ⵉⵎⵓⵏⵏⵖⵔⵏⴰⵟⴰⵊⵓⵔⵊⵢⴰⴳⵡ" + + "ⵉⵢⴰⵏ ⵜⴰⴼⵔⴰⵏⵙⵉⵙⵜⵖⴰⵏⴰⴰⴷⵔⴰⵔ ⵏ ⵟⴰⵕⵉⵇⴳⵔⵉⵍⴰⵏⴷⴳⴰⵎⴱⵢⴰⵖⵉⵏⵢⴰⴳⵡⴰⴷⴰⵍⵓⴱⵖⵉⵏⵢⴰ ⵏ " + + "ⵉⴽⵡⴰⴷⵓⵔⵍⵢⵓⵏⴰⵏⴳⵡⴰⵜⵉⵎⴰⵍⴰⴳⵡⴰⵎⵖⵉⵏⵢⴰ ⴱⵉⵙⴰⵡⴳⵡⵉⵢⴰⵏⴰⵀⵓⵏⴷⵓⵔⴰⵙⴽⵔⵡⴰⵜⵢⴰⵀⴰⵢⵜⵉⵀⵏ" + + "ⵖⴰⵔⵢⴰⴰⵏⴷⵓⵏⵉⵙⵢⴰⵉⵔⵍⴰⵏⴷⴰⵉⵙⵔⴰⵢⵉⵍⵍⵀⵉⵏⴷⵜⴰⵎⵏⴰⴹⵜ ⵜⴰⵏⴳⵍⵉⵣⵉⵜ ⵏ ⵓⴳⴰⵔⵓ ⴰⵀⵉⵏⴷⵉⵍ" + + "ⵄⵉⵔⴰⵇⵉⵔⴰⵏⵉⵙⵍⴰⵏⴷⵉⵟⴰⵍⵢⴰⵊⴰⵎⴰⵢⴽⴰⵍⵓⵔⴷⵓⵏⵍⵢⴰⴱⴰⵏⴽⵉⵏⵢⴰⴽⵉⵔⵖⵉⵣⵉⵙⵜⴰⵏⴽⴰⵎⴱⵓⴷⵢⴰⴽⵉ" + + "ⵔⵉⴱⴰⵜⵉⵇⵓⵎⵓⵔⵙⴰⵏⴽⵔⵉⵙ ⴷ ⵏⵉⴼⵉⵙⴽⵓⵔⵢⴰ ⵏ ⵉⵥⵥⵍⵎⴹⴽⵓⵔⵢⴰ ⵏ ⵉⴼⴼⵓⵙⵍⴽⵡⵉⵜⵜⵉⴳⵣⵉⵔⵉⵏ" + + " ⵏ ⴽⴰⵢⵎⴰⵏⴽⴰⵣⴰⵅⵙⵜⴰⵏⵍⴰⵡⵙⵍⵓⴱⵏⴰⵏⵙⴰⵏⵜⵍⵓⵙⵉⵍⵉⴽⵉⵏⵛⵜⴰⵢⵏⵙⵔⵉⵍⴰⵏⴽⴰⵍⵉⴱⵉⵔⵢⴰⵍⵉⵚⵓⵟⵓⵍ" + + "ⵉⵜⵡⴰⵏⵢⴰⵍⵓⴽⵙⴰⵏⴱⵓⵔⴳⵍⴰⵜⴼⵢⴰⵍⵉⴱⵢⴰⵍⵎⵖⵔⵉⴱⵎⵓⵏⴰⴽⵓⵎⵓⵍⴷⵓⴼⵢⴰⵎⵓⵏⵜⵉⵏⵉⴳⵔⵓⵎⴰⴷⴰⵖⴰⵛⵇ" + + "ⴰⵔⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵎⴰⵔⵛⴰⵍⵎⴰⵙⵉⴷⵓⵏⵢⴰⵎⴰⵍⵉⵎⵢⴰⵏⵎⴰⵔⵎⵏⵖⵓⵍⵢⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵎⴰⵔⵢⴰⵏ ⵏ " + + "ⵉⵥⵥⵍⵎⴹⵎⴰⵔⵜⵉⵏⵉⴽⵎⵓⵕⵉⵟⴰⵏⵢⴰⵎⵓⵏⵙⵉⵔⴰⵜⵎⴰⵍⵟⴰⵎⵓⵔⵉⵙⵎⴰⵍⴷⵉⴼⵎⴰⵍⴰⵡⵉⵎⵉⴽⵙⵉⴽⵎⴰⵍⵉⵣⵢⴰ" + + "ⵎⵓⵣⵏⴱⵉⵇⵏⴰⵎⵉⴱⵢⴰⴽⴰⵍⵉⴷⵓⵏⵢⴰ ⵜⴰⵎⴰⵢⵏⵓⵜⵏⵏⵉⵊⵉⵔⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵏⵓⵔⴼⵓⵍⴽⵏⵉⵊⵉⵔⵢⴰⵏⵉⴽ" + + "ⴰⵔⴰⴳⵡⴰⵀⵓⵍⴰⵏⴷⴰⵏⵏⵔⵡⵉⵊⵏⵉⴱⴰⵍⵏⴰⵡⵔⵓⵏⵉⵡⵉⵏⵢⵓⵣⵉⵍⴰⵏⴷⴰⵄⵓⵎⴰⵏⴱⴰⵏⴰⵎⴰⴱⵉⵔⵓⴱⵓⵍⵉⵏⵉⵣⵢ" + + "ⴰ ⵜⴰⴼⵔⴰⵏⵙⵉⵙⵜⴱⴰⴱⵡⴰ ⵖⵉⵏⵢⴰ ⵜⴰⵎⴰⵢⵏⵓⵜⴼⵉⵍⵉⴱⴱⵉⵏⴱⴰⴽⵉⵙⵜⴰⵏⴱⵓⵍⵓⵏⵢⴰⵙⴰⵏⴱⵢⵉⵔ ⴷ ⵎ" + + "ⵉⴽⵍⵓⵏⴱⵉⵜⴽⴰⵢⵔⵏⴱⵓⵔⵜⵓ ⵔⵉⴽⵓⴰⴳⵎⵎⴰⴹ ⵏ ⵜⴰⴳⵓⵜ ⴷ ⵖⵣⵣⴰⴱⵕⵟⵇⵉⵣⴱⴰⵍⴰⵡⴱⴰⵔⴰⴳⵡⴰⵢⵇⴰⵜ" + + "ⴰⵔⵔⵉⵢⵓⵏⵢⵓⵏⵔⵓⵎⴰⵏⵢⴰⵙⵉⵔⴱⵢⴰⵔⵓⵙⵢⴰⵔⵡⴰⵏⴷⴰⵙⵙⴰⵄⵓⴷⵉⵢⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵙⴰⵍⵓⵎⴰⵏⵙⵙⵉⵛⵉ" + + "ⵍⵙⵙⵓⴷⴰⵏⵙⵙⵡⵉⴷⵙⵏⵖⴰⴼⵓⵔⴰⵙⴰⵏⵜⵉⵍⵉⵏⵙⵍⵓⴼⵉⵏⵢⴰⵙⵍⵓⴼⴰⴽⵢⴰⵙⵙⵉⵔⴰⵍⵢⵓⵏⵙⴰⵏⵎⴰⵔⵉⵏⵓⵙⵙⵉⵏ" + + "ⵉⴳⴰⵍⵚⵚⵓⵎⴰⵍⵙⵓⵔⵉⵏⴰⵎⵙⵙⵓⴷⴰⵏ ⵏ ⵉⴼⴼⵓⵙⵙⴰⵡⵟⵓⵎⵉ ⴷ ⴱⵔⴰⵏⵙⵉⴱⵙⴰⵍⴼⴰⴷⵓⵔⵙⵓⵔⵢⴰⵙⵡⴰⵣⵉ" + + "ⵍⴰⵏⴷⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵏ ⵜⵓⵔⴽⵢⴰ ⴷ ⴽⴰⵢⴽⵜⵛⴰⴷⵟⵓⴳⵓⵟⴰⵢⵍⴰⵏⴷⵜⴰⴷⵊⴰⴽⵉⵙⵜⴰⵏⵟⵓⴽⵍⴰⵡⵜⵉⵎⵓⵔ" + + " ⵏ ⵍⵇⴱⵍⵜⵜⵓⵔⴽⵎⴰⵏⵙⵜⴰⵏⵜⵓⵏⵙⵟⵓⵏⴳⴰⵜⵓⵔⴽⵢⴰⵜⵔⵉⵏⵉⴷⴰⴷ ⴷ ⵟⵓⴱⴰⴳⵓⵜⵓⴼⴰⵍⵓⵟⴰⵢⵡⴰⵏⵟⴰⵏⵥⴰ" + + "ⵏⵢⴰⵓⴽⵔⴰⵏⵢⴰⵓⵖⴰⵏⴷⴰⵉⵡⵓⵏⴰⴽ ⵎⵓⵏⵏⵉⵏ ⵏ ⵎⵉⵔⵉⴽⴰⵏⵓⵔⵓⴳⵡⴰⵢⵓⵣⴱⴰⴽⵉⵙⵜⴰⵏⴰⵡⴰⵏⴽ ⵏ ⴼⴰ" + + "ⵜⵉⴽⴰⵏⵙⴰⵏⴼⴰⵏⵙⴰⵏ ⴷ ⴳⵔⵉⵏⴰⴷⵉⵏⴼⵉⵏⵣⵡⵉⵍⴰⵜⵉⴳⵣⵉⵔⵉⵏ ⵜⵉⵎⴳⴰⴷ ⵏ ⵏⵏⴳⵍⵉⵣⵜⵉⴳⵣⵉⵔⵉⵏ " + + "ⵜⵉⵎⴳⴰⴷ ⵏ ⵉⵡⵓⵏⴰⴽ ⵎⵓⵏⵏⵉⵏⴼⵉⵜⵏⴰⵎⴼⴰⵏⵡⴰⵟⵓⵡⴰⵍⵉⵙ ⴷ ⴼⵓⵜⵓⵏⴰⵙⴰⵎⵡⴰⵢⴰⵎⴰⵏⵎⴰⵢⵓⵟⴰⴼ" + + "ⵔⵉⵇⵢⴰ ⵏ ⵉⴼⴼⵓⵙⵣⴰⵎⴱⵢⴰⵣⵉⵎⴱⴰⴱⵡⵉ", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0012, 0x0027, 0x0045, 0x006e, 0x0080, 0x0095, + 0x00aa, 0x00bc, 0x00bc, 0x00d4, 0x0105, 0x0114, 0x012c, 0x013b, + 0x013b, 0x0156, 0x017c, 0x018e, 0x01a9, 0x01bb, 0x01dd, 0x01f2, + 0x0204, 0x0219, 0x0228, 0x0228, 0x023a, 0x0249, 0x025e, 0x025e, + 0x0270, 0x0285, 0x0297, 0x0297, 0x02af, 0x02ca, 0x02d9, 0x02eb, + 0x02eb, 0x033f, 0x0390, 0x039f, 0x03b1, 0x03cd, 0x03f3, 0x0402, + 0x0417, 0x0429, 0x0441, 0x0441, 0x045d, 0x0469, 0x049e, 0x049e, + 0x049e, 0x04b0, 0x04e4, 0x04f9, 0x04f9, 0x050e, 0x0523, 0x0538, + // Entry 40 - 7F + 0x0572, 0x0581, 0x0581, 0x0596, 0x05ab, 0x05b7, 0x05b7, 0x05cf, + 0x05e1, 0x05f6, 0x05f6, 0x05f6, 0x060e, 0x061d, 0x064c, 0x066a, + 0x066a, 0x067c, 0x068b, 0x06b0, 0x06c2, 0x06d4, 0x0705, 0x0705, + 0x0711, 0x0734, 0x0749, 0x075b, 0x076a, 0x0782, 0x07ab, 0x07bd, + 0x07bd, 0x07d8, 0x07e4, 0x0803, 0x0818, 0x0818, 0x0818, 0x0830, + 0x0845, 0x0854, 0x0869, 0x0869, 0x0884, 0x0899, 0x08ae, 0x08ae, + 0x08bd, 0x0915, 0x0927, 0x0933, 0x0945, 0x0957, 0x0957, 0x096c, + 0x097e, 0x0990, 0x099f, 0x09c0, 0x09d8, 0x09f0, 0x09ff, 0x0a28, + // Entry 80 - BF + 0x0a4e, 0x0a71, 0x0a80, 0x0aaf, 0x0aca, 0x0ad6, 0x0ae8, 0x0b00, + 0x0b1e, 0x0b36, 0x0b4b, 0x0b5d, 0x0b75, 0x0b93, 0x0ba5, 0x0bb4, + 0x0bc6, 0x0bd8, 0x0bf0, 0x0c0e, 0x0c0e, 0x0c2c, 0x0c5b, 0x0c76, + 0x0c82, 0x0c97, 0x0cac, 0x0cac, 0x0cf2, 0x0d0a, 0x0d25, 0x0d3d, + 0x0d4c, 0x0d5b, 0x0d6d, 0x0d7f, 0x0d91, 0x0da6, 0x0dbb, 0x0dd0, + 0x0e04, 0x0e16, 0x0e48, 0x0e5d, 0x0e78, 0x0e8d, 0x0e9f, 0x0eae, + 0x0ebd, 0x0ec9, 0x0ee7, 0x0ef6, 0x0f08, 0x0f14, 0x0f4e, 0x0f86, + 0x0f9e, 0x0fb6, 0x0fcb, 0x0ff7, 0x100f, 0x102b, 0x1062, 0x1074, + // Entry C0 - FF + 0x1083, 0x109b, 0x10aa, 0x10aa, 0x10c2, 0x10d7, 0x10e9, 0x10f8, + 0x110a, 0x1125, 0x1157, 0x1169, 0x117b, 0x118a, 0x11a2, 0x11ba, + 0x11d2, 0x11d2, 0x11ea, 0x1205, 0x1220, 0x1238, 0x124a, 0x125f, + 0x1285, 0x12b4, 0x12cc, 0x12cc, 0x12db, 0x12f9, 0x12f9, 0x1339, + 0x1345, 0x1345, 0x1351, 0x1366, 0x1387, 0x1399, 0x13bc, 0x13dd, + 0x13e9, 0x13f8, 0x140a, 0x1439, 0x144b, 0x145d, 0x1475, 0x148a, + 0x149c, 0x149c, 0x149c, 0x14db, 0x14f0, 0x150e, 0x1537, 0x156f, + 0x1587, 0x15c9, 0x161e, 0x1630, 0x1645, 0x166b, 0x167a, 0x167a, + // Entry 100 - 13F + 0x1689, 0x1698, 0x16c1, 0x16d3, 0x16eb, + }, + }, + { // zh + zhRegionStr, + zhRegionIdx, + }, + { // zh-Hant + zhHantRegionStr, + zhHantRegionIdx, + }, + { // zh-Hant-HK + "阿拉伯聯合酋長國安提瓜和巴布達阿魯巴阿塞拜疆波斯尼亞和黑塞哥維那巴巴多斯布基納法索布隆迪貝寧聖巴泰勒米鮑威特島博茨瓦納伯利茲可可斯群島科特迪瓦克" + + "里珀頓島哥斯達黎加佛得角塞浦路斯吉布提厄瓜多爾厄立特里亞埃塞俄比亞加蓬格林納達格魯吉亞加納岡比亞南佐治亞島與南桑威奇群島危地馬拉幾內" + + "亞比紹圭亞那洪都拉斯克羅地亞馬恩島意大利肯雅科摩羅聖基茨和尼維斯老撾聖盧西亞列支敦士登利比里亞萊索托黑山馬里毛里塔尼亞蒙特塞拉特馬耳" + + "他毛里裘斯馬爾代夫馬拉維莫桑比克尼日爾尼日利亞瑙魯阿曼法屬波利尼西亞巴布亞新幾內亞皮特凱恩島巴勒斯坦領土卡塔爾盧旺達沙地阿拉伯所羅門" + + "群島塞舌爾斯洛文尼亞斯瓦爾巴特群島及揚馬延島塞拉利昂索馬里蘇里南聖多美和普林西比敍利亞斯威士蘭特克斯和凱科斯群島乍得法屬南部領地多哥" + + "共和國湯加千里達和多巴哥圖瓦盧坦桑尼亞聖文森特和格林納丁斯英屬維爾京群島美屬維爾京群島瓦努阿圖也門贊比亞津巴布韋中美洲加勒比波利尼西" + + "亞", + []uint16{ // 284 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0018, 0x0018, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0036, + 0x0036, 0x0042, 0x0060, 0x006c, 0x006c, 0x006c, 0x007b, 0x007b, + 0x007b, 0x0084, 0x008a, 0x0099, 0x0099, 0x0099, 0x0099, 0x0099, + 0x0099, 0x0099, 0x0099, 0x00a5, 0x00b1, 0x00b1, 0x00ba, 0x00ba, + 0x00c9, 0x00c9, 0x00c9, 0x00c9, 0x00c9, 0x00d5, 0x00d5, 0x00d5, + 0x00d5, 0x00d5, 0x00d5, 0x00e4, 0x00f3, 0x00f3, 0x00fc, 0x00fc, + 0x00fc, 0x0108, 0x0108, 0x0108, 0x0108, 0x0111, 0x0111, 0x0111, + // Entry 40 - 7F + 0x0111, 0x0111, 0x0111, 0x011d, 0x011d, 0x011d, 0x011d, 0x012c, + 0x012c, 0x013b, 0x013b, 0x013b, 0x013b, 0x013b, 0x013b, 0x013b, + 0x013b, 0x013b, 0x0141, 0x0141, 0x014d, 0x0159, 0x0159, 0x0159, + 0x015f, 0x015f, 0x015f, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + 0x018c, 0x0198, 0x0198, 0x01a7, 0x01b0, 0x01b0, 0x01b0, 0x01bc, + 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01d1, + 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01da, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e9, 0x01fe, + // Entry 80 - BF + 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x0204, 0x0204, 0x0210, + 0x021f, 0x021f, 0x022b, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, + 0x0234, 0x0234, 0x0234, 0x023a, 0x023a, 0x023a, 0x023a, 0x023a, + 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x024f, 0x025e, + 0x0267, 0x0273, 0x027f, 0x0288, 0x0288, 0x0288, 0x0294, 0x0294, + 0x0294, 0x029d, 0x029d, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, + 0x02af, 0x02af, 0x02af, 0x02b5, 0x02b5, 0x02b5, 0x02ca, 0x02df, + 0x02df, 0x02df, 0x02df, 0x02df, 0x02ee, 0x02ee, 0x0300, 0x0300, + // Entry C0 - FF + 0x0300, 0x0300, 0x0309, 0x0309, 0x0309, 0x0309, 0x0309, 0x0309, + 0x0312, 0x0321, 0x0330, 0x0339, 0x0339, 0x0339, 0x0339, 0x0339, + 0x0348, 0x036c, 0x036c, 0x0378, 0x0378, 0x0378, 0x0381, 0x038a, + 0x038a, 0x03a2, 0x03a2, 0x03a2, 0x03ab, 0x03b7, 0x03b7, 0x03d2, + 0x03d8, 0x03ea, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, + 0x03f9, 0x03ff, 0x03ff, 0x0414, 0x041d, 0x041d, 0x0429, 0x0429, + 0x0429, 0x0429, 0x0429, 0x0429, 0x0429, 0x0429, 0x0429, 0x0447, + 0x0447, 0x045c, 0x0471, 0x0471, 0x047d, 0x047d, 0x047d, 0x047d, + // Entry 100 - 13F + 0x0483, 0x0483, 0x0483, 0x048c, 0x0498, 0x0498, 0x0498, 0x0498, + 0x0498, 0x0498, 0x0498, 0x0498, 0x04a1, 0x04a1, 0x04a1, 0x04a1, + 0x04a1, 0x04a1, 0x04a1, 0x04aa, 0x04aa, 0x04aa, 0x04aa, 0x04aa, + 0x04aa, 0x04aa, 0x04aa, 0x04b9, + }, + }, + { // zu + zuRegionStr, + zuRegionIdx, + }, +} + +const afRegionStr string = "" + // Size: 3019 bytes + "AscensioneilandAndorraVerenigde Arabiese EmirateAfganistanAntigua en Bar" + + "budaAnguillaAlbaniëArmeniëAngolaAntarktikaArgentiniëAmerikaans-SamoaOost" + + "enrykAustraliëArubaÅlandeilandeAzerbeidjanBosnië en HerzegowinaBarbadosB" + + "angladesjBelgiëBurkina FasoBulgaryeBahreinBurundiBeninSint BarthélemyBer" + + "mudaBroeneiBoliviëKaribiese NederlandBrasiliëBahamasBhoetanBouvet-eiland" + + "BotswanaBelarusBelizeKanadaKokos-eilandeDemokratiese Republiek van die K" + + "ongoSentraal-Afrikaanse RepubliekKongo - BrazzavilleSwitserlandIvoorkusC" + + "ookeilandeChiliKameroenSjinaColombiëClippertoneilandCosta RicaKubaKaap V" + + "erdeCuraçaoKerseilandSiprusTjeggiese RepubliekDuitslandDiego GarciaDjibo" + + "etiDenemarkeDominicaDominikaanse RepubliekAlgeriëCeuta en MelillaEcuador" + + "EstlandEgipteWes-SaharaEritreaSpanjeEthiopiëEuropese UnieFinlandFidjiFal" + + "klandeilandeMikronesiëFaroëreilandeFrankrykGaboenVerenigde KoninkrykGren" + + "adaGeorgiëFrans-GuyanaGuernseyGhanaGibraltarGroenlandGambiëGuineeGuadelo" + + "upeEkwatoriaal-GuineeGriekelandSuid-Georgië en die Suidelike Sandwicheil" + + "andeGuatemalaGuamGuinee-BissauGuyanaHongkong SAS SjinaHeard- en McDonald" + + "eilandeHondurasKroasiëHaïtiHongaryeKanariese EilandeIndonesiëIerlandIsra" + + "elEiland ManIndiëBrits-Indiese OseaangebiedIrakIranYslandItaliëJerseyJam" + + "aikaJordaniëJapanKeniaKirgisiëKambodjaKiribatiComoreSt. Kitts en NevisNo" + + "ord-KoreaSuid-KoreaKoeweitKaaimanseilandeKazakstanLaosLibanonSt. LuciaLi" + + "echtensteinSri LankaLiberiëLesothoLitaueLuxemburgLetlandLibiëMarokkoMona" + + "coMoldowaMontenegroSt. MartinMadagaskarMarshalleilandeMacedoniëMaliMianm" + + "ar (Birma)MongoliëMacau SAS SjinaNoord-Mariane-eilandeMartiniqueMauritan" + + "iëMontserratMaltaMauritiusMalediveMalawiMeksikoMaleisiëMosambiekNamibiëN" + + "ieu-KaledoniëNigerNorfolkeilandNigeriëNicaraguaNederlandNoorweëNepalNaur" + + "uNiueNieu-SeelandOmanPanamaPeruFrans-PolinesiëPapoea-Nieu-GuineeFilippyn" + + "ePakistanPoleSt. Pierre en MiquelonPitcairneilandePuerto RicoPalestynse " + + "gebiedePortugalPalauParaguayKatarOmliggende OseaniëRéunionRoemeniëSerwië" + + "RuslandRwandaSaoedi-ArabiëSalomonseilandeSeychelleSoedanSwedeSingapoerSi" + + "nt HelenaSloweniëSvalbard en Jan MayenSlowakyeSierra LeoneSan MarinoSene" + + "galSomaliëSurinameSuid-SoedanSão Tomé en PríncipeEl SalvadorSint Maarten" + + "SiriëSwazilandTristan da CunhaTurks- en CaicoseilandeTsjadFranse Suideli" + + "ke GebiedeTogoThailandTadjikistanTokelauOos-TimorTurkmeniëTunisiëTongaTu" + + "rkyeTrinidad en TobagoTuvaluTaiwanTanzaniëOekraïneUgandaVS klein omligge" + + "nde eilandeverenigde nasiesVerenigde State van AmerikaUruguayOesbekistan" + + "VatikaanstadSt. Vincent en die GrenadineVenezuelaBritse Maagde-eilandeAm" + + "erikaanse Maagde-eilandeViëtnamVanuatuWallis en FutunaSamoaKosovoJemenMa" + + "yotteSuid-AfrikaZambiëZimbabweOnbekende gebiedWêreldAfrikaNoord-AmerikaS" + + "uid-AmerikaOseaniëWes-AfrikaSentraal-AmerikaOos-AfrikaNoord-AfrikaMidde-" + + "AfrikaSuider-AfrikaAmerikasNoordelike AmerikaKaribiesOos-AsiëSuid-AsiëSu" + + "idoos-AsiëSuid-EuropaAustralasiëMelanesiëMikronesiese streekPolinesiëAsi" + + "ëSentraal-AsiëWes-AsiëEuropaOos-EuropaNoord-EuropaWes-EuropaLatyns-Amer" + + "ika" + +var afRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0016, 0x0030, 0x003a, 0x004c, 0x0054, 0x005c, + 0x0064, 0x006a, 0x0074, 0x007f, 0x008f, 0x0098, 0x00a2, 0x00a7, + 0x00b4, 0x00bf, 0x00d5, 0x00dd, 0x00e7, 0x00ee, 0x00fa, 0x0102, + 0x0109, 0x0110, 0x0115, 0x0125, 0x012c, 0x0133, 0x013b, 0x014e, + 0x0157, 0x015e, 0x0165, 0x0172, 0x017a, 0x0181, 0x0187, 0x018d, + 0x019a, 0x01be, 0x01db, 0x01ee, 0x01f9, 0x0201, 0x020c, 0x0211, + 0x0219, 0x021e, 0x0227, 0x0237, 0x0241, 0x0245, 0x024f, 0x0257, + 0x0261, 0x0267, 0x027a, 0x0283, 0x028f, 0x0297, 0x02a0, 0x02a8, + // Entry 40 - 7F + 0x02be, 0x02c6, 0x02d6, 0x02dd, 0x02e4, 0x02ea, 0x02f4, 0x02fb, + 0x0301, 0x030a, 0x0317, 0x0317, 0x031e, 0x0323, 0x0332, 0x033d, + 0x034b, 0x0353, 0x0359, 0x036c, 0x0373, 0x037b, 0x0387, 0x038f, + 0x0394, 0x039d, 0x03a6, 0x03ad, 0x03b3, 0x03bd, 0x03cf, 0x03d9, + 0x0407, 0x0410, 0x0414, 0x0421, 0x0427, 0x0439, 0x0452, 0x045a, + 0x0462, 0x0468, 0x0470, 0x0481, 0x048b, 0x0492, 0x0498, 0x04a2, + 0x04a8, 0x04c2, 0x04c6, 0x04ca, 0x04d0, 0x04d7, 0x04dd, 0x04e4, + 0x04ed, 0x04f2, 0x04f7, 0x0500, 0x0508, 0x0510, 0x0516, 0x0528, + // Entry 80 - BF + 0x0533, 0x053d, 0x0544, 0x0553, 0x055c, 0x0560, 0x0567, 0x0570, + 0x057d, 0x0586, 0x058e, 0x0595, 0x059b, 0x05a4, 0x05ab, 0x05b1, + 0x05b8, 0x05be, 0x05c5, 0x05cf, 0x05d9, 0x05e3, 0x05f2, 0x05fc, + 0x0600, 0x060f, 0x0618, 0x0627, 0x063c, 0x0646, 0x0651, 0x065b, + 0x0660, 0x0669, 0x0671, 0x0677, 0x067e, 0x0687, 0x0690, 0x0698, + 0x06a7, 0x06ac, 0x06b9, 0x06c1, 0x06ca, 0x06d3, 0x06db, 0x06e0, + 0x06e5, 0x06e9, 0x06f5, 0x06f9, 0x06ff, 0x0703, 0x0713, 0x0725, + 0x072e, 0x0736, 0x073a, 0x0750, 0x075f, 0x076a, 0x077c, 0x0784, + // Entry C0 - FF + 0x0789, 0x0791, 0x0796, 0x07a9, 0x07b1, 0x07ba, 0x07c1, 0x07c8, + 0x07ce, 0x07dc, 0x07eb, 0x07f4, 0x07fa, 0x07ff, 0x0808, 0x0813, + 0x081c, 0x0831, 0x0839, 0x0845, 0x084f, 0x0856, 0x085e, 0x0866, + 0x0871, 0x0888, 0x0893, 0x089f, 0x08a5, 0x08ae, 0x08be, 0x08d5, + 0x08da, 0x08f2, 0x08f6, 0x08fe, 0x0909, 0x0910, 0x0919, 0x0923, + 0x092b, 0x0930, 0x0936, 0x0948, 0x094e, 0x0954, 0x095d, 0x0966, + 0x096c, 0x0987, 0x0997, 0x09b2, 0x09b9, 0x09c4, 0x09d0, 0x09ec, + 0x09f5, 0x0a0a, 0x0a24, 0x0a2c, 0x0a33, 0x0a43, 0x0a48, 0x0a4e, + // Entry 100 - 13F + 0x0a53, 0x0a5a, 0x0a65, 0x0a6c, 0x0a74, 0x0a84, 0x0a8b, 0x0a91, + 0x0a9e, 0x0aaa, 0x0ab2, 0x0abc, 0x0acc, 0x0ad6, 0x0ae2, 0x0aee, + 0x0afb, 0x0b03, 0x0b15, 0x0b1d, 0x0b26, 0x0b30, 0x0b3d, 0x0b48, + 0x0b54, 0x0b5e, 0x0b71, 0x0b7b, 0x0b80, 0x0b8e, 0x0b97, 0x0b9d, + 0x0ba7, 0x0bb3, 0x0bbd, 0x0bcb, +} // Size: 608 bytes + +const amRegionStr string = "" + // Size: 5371 bytes + "አሴንሽን ደሴትአንዶራየተባበሩት ዓረብ ኤምሬትስአፍጋኒስታንአንቲጓ እና ባሩዳአንጉኢላአልባኒያአርሜኒያአንጐላአንታርክቲ" + + "ካአርጀንቲናየአሜሪካ ሳሞአኦስትሪያአውስትራልያአሩባየአላንድ ደሴቶችአዘርባጃንቦስኒያ እና ሄርዞጎቪኒያባርቤዶስባንግ" + + "ላዲሽቤልጄምቡርኪና ፋሶቡልጌሪያባህሬንብሩንዲቤኒንቅዱስ በርቴሎሜቤርሙዳብሩኒቦሊቪያየካሪቢያን ኔዘርላንድስብራዚልባሃ" + + "ማስቡህታንቡቬት ደሴትቦትስዋናቤላሩስቤሊዘካናዳኮኮስ(ኬሊንግ) ደሴቶችኮንጎ-ኪንሻሳየመካከለኛው አፍሪካ ሪፐብሊክኮን" + + "ጎ ብራዛቪልስዊዘርላንድኮት ዲቯርኩክ ደሴቶችቺሊካሜሩንቻይናኮሎምቢያክሊፐርቶን ደሴትኮስታ ሪካኩባኬፕ ቬርዴኩራሳዎየ" + + "ገና ደሴትሳይፕረስቼክ ሪፑብሊክጀርመንዲዬጎ ጋርሺያጂቡቲዴንማርክዶሚኒካዶሚኒክ ሪፑብሊክአልጄሪያሴኡታና ሜሊላኢኳዶር" + + "ኤስቶኒያግብጽምዕራባዊ ሳህራኤርትራስፔንኢትዮጵያየአውሮፓ ህብረትፊንላንድፊጂየፎክላንድ ደሴቶችሚክሮኔዢያየፋሮ ደሴቶ" + + "ችፈረንሳይጋቦንእንግሊዝግሬናዳጆርጂያየፈረንሳይ ጉዊአናጉርነሲጋናጂብራልተርግሪንላንድጋምቢያጊኒጉዋደሉፕኢኳቶሪያል ጊ" + + "ኒግሪክደቡብ ጆርጂያ እና የደቡብ ሳንድዊች ደሴቶችጉዋቲማላጉዋምጊኒ ቢሳኦጉያናሆንግ ኮንግ ልዩ የአስተዳደር ክልል" + + " ቻይናኽርድ ደሴቶችና ማክዶናልድ ደሴቶችሆንዱራስክሮኤሽያሀይቲሀንጋሪየካናሪ ደሴቶችኢንዶኔዢያአየርላንድእስራኤልአይል " + + "ኦፍ ማንህንድየብሪታኒያ ህንድ ውቂያኖስ ግዛትኢራቅኢራንአይስላንድጣሊያንጀርሲጃማይካጆርዳንጃፓንኬንያኪርጊስታንካምቦ" + + "ዲያኪሪባቲኮሞሮስቅዱስ ኪትስ እና ኔቪስሰሜን ኮሪያደቡብ ኮሪያክዌትካይማን ደሴቶችካዛኪስታንላኦስሊባኖስሴንት ሉቺያ" + + "ሊችተንስታይንሲሪላንካላይቤሪያሌሶቶሊቱዌኒያሉክሰምበርግላትቪያሊቢያሞሮኮሞናኮሞልዶቫሞንተኔግሮሴንት ማርቲንማዳጋስካር" + + "ማርሻል አይላንድመቄዶንያማሊማይናማር(በርማ)ሞንጎሊያማካኡ ልዩ የአስተዳደር ክልል ቻይናየሰሜናዊ ማሪያና ደሴቶችማ" + + "ርቲኒክሞሪቴኒያሞንትሴራትማልታሞሪሸስማልዲቭስማላዊሜክሲኮማሌዢያሞዛምቢክናሚቢያኒው ካሌዶኒያኒጀርኖርፎልክ ደሴትናይጄ" + + "ሪያኒካራጓኔዘርላንድኖርዌይኔፓልናኡሩኒኡይኒው ዚላንድኦማንፓናማፔሩየፈረንሳይ ፖሊኔዢያፓፑዋ ኒው ጊኒፊሊፒንስፓኪስታ" + + "ንፖላንድቅዱስ ፒዬር እና ሚኩኤሎንፒትካኢርን አይስላንድፖርታ ሪኮየፍልስጤም ግዛትፖርቱጋልፓላውፓራጓይኳታርአውትላይ" + + "ንግ ኦሽንያሪዩኒየንሮሜኒያሰርብያራሽያሩዋንዳሳውድአረቢያሰሎሞን ደሴትሲሼልስሱዳንስዊድንሲንጋፖርሴንት ሄለናስሎቬኒያ" + + "ስቫልባርድ እና ጃን ማየንስሎቫኪያሴራሊዮንሳን ማሪኖሴኔጋልሱማሌሱሪናምደቡብ ሱዳንሳኦ ቶሜ እና ፕሪንሲፔኤል ሳልቫ" + + "ዶርሲንት ማርተንሲሪያሱዋዚላንድትሪስታን ዲ ኩንሃየቱርኮችና የካኢኮስ ደሴቶችቻድየፈረንሳይ ደቡባዊ ግዛቶችቶጐታይላ" + + "ንድታጃኪስታንቶክላውምስራቅ ሌስትቱርክሜኒስታንቱኒዚያቶንጋቱርክትሪናዳድ እና ቶቤጎቱቫሉታይዋንታንዛኒያዩክሬንዩጋንዳ" + + "የዩ ኤስ ጠረፍ ላይ ያሉ ደሴቶችየተባበሩት መንግስታትዩናይትድ ስቴትስኡራጓይኡዝቤኪስታንቫቲካን ከተማቅዱስ ቪንሴን" + + "ት እና ግሬናዲንስቬንዙዌላየእንግሊዝ ቨርጂን ደሴቶችየአሜሪካ ቨርጂን ደሴቶችቬትናምቫኑአቱዋሊስ እና ፉቱና ደሴቶች" + + "ሳሞአኮሶቮየመንሜይኦቴደቡብ አፍሪካዛምቢያዚምቧቤያልታወቀ ክልልዓለምአፍሪካሰሜን አሜሪካደቡብ አሜሪካኦሽኒአምስራቃዊ" + + " አፍሪካመካከለኛው አሜሪካምዕራባዊ አፍሪካሰሜናዊ አፍሪካመካከለኛው አፍሪካደቡባዊ አፍሪካአሜሪካሰሜናዊ አሜሪካካሪቢያ" + + "ንምዕራባዊ እሲያደቡባዊ እሲያምዕራባዊ ደቡብ እሲያደቡባዊ አውሮፓአውስትራሊያሜላኔዥያየማይክሮኔዥያን ክልልፖሊኔዥያ" + + "እሲያመካከለኛው እሲያምስራቃዊ እሲያአውሮፓምዕራባዊ አውሮፓሰሜናዊ አውሮፓምስራቃዊ አውሮፓላቲን አሜሪካ" + +var amRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0019, 0x0025, 0x0051, 0x0066, 0x0083, 0x0092, 0x00a1, + 0x00b0, 0x00bc, 0x00d1, 0x00e3, 0x00fc, 0x010b, 0x0120, 0x0129, + 0x0145, 0x0157, 0x0180, 0x018f, 0x01a1, 0x01ad, 0x01c0, 0x01cf, + 0x01db, 0x01e7, 0x01f0, 0x0209, 0x0215, 0x021e, 0x022a, 0x0252, + 0x025e, 0x026a, 0x0276, 0x0289, 0x0298, 0x02a4, 0x02ad, 0x02b6, + 0x02da, 0x02f0, 0x0322, 0x033b, 0x0350, 0x0360, 0x0373, 0x0379, + 0x0385, 0x038e, 0x039d, 0x03b9, 0x03c9, 0x03cf, 0x03df, 0x03eb, + 0x03fe, 0x040d, 0x0423, 0x042f, 0x0445, 0x044e, 0x045d, 0x0469, + // Entry 40 - 7F + 0x0485, 0x0494, 0x04aa, 0x04b6, 0x04c5, 0x04ce, 0x04e7, 0x04f3, + 0x04fc, 0x050b, 0x0527, 0x0527, 0x0536, 0x053c, 0x055b, 0x056d, + 0x0583, 0x0592, 0x059b, 0x05aa, 0x05b6, 0x05c2, 0x05e1, 0x05ed, + 0x05f3, 0x0605, 0x0617, 0x0623, 0x0629, 0x0638, 0x0651, 0x065a, + 0x06a1, 0x06b0, 0x06b9, 0x06c9, 0x06d2, 0x0716, 0x074f, 0x075e, + 0x076d, 0x0776, 0x0782, 0x079b, 0x07ad, 0x07bf, 0x07ce, 0x07e5, + 0x07ee, 0x0824, 0x082d, 0x0836, 0x0848, 0x0854, 0x085d, 0x0869, + 0x0875, 0x087e, 0x0887, 0x0899, 0x08a8, 0x08b4, 0x08c0, 0x08e4, + // Entry 80 - BF + 0x08f7, 0x090a, 0x0913, 0x092c, 0x093e, 0x0947, 0x0953, 0x0966, + 0x097e, 0x098d, 0x099c, 0x09a5, 0x09b4, 0x09c9, 0x09d5, 0x09de, + 0x09e7, 0x09f0, 0x09fc, 0x0a0e, 0x0a24, 0x0a36, 0x0a52, 0x0a61, + 0x0a67, 0x0a81, 0x0a90, 0x0aca, 0x0af3, 0x0b02, 0x0b11, 0x0b23, + 0x0b2c, 0x0b38, 0x0b47, 0x0b50, 0x0b5c, 0x0b68, 0x0b77, 0x0b83, + 0x0b99, 0x0ba2, 0x0bbb, 0x0bca, 0x0bd6, 0x0be8, 0x0bf4, 0x0bfd, + 0x0c06, 0x0c0f, 0x0c22, 0x0c2b, 0x0c34, 0x0c3a, 0x0c5c, 0x0c73, + 0x0c82, 0x0c91, 0x0c9d, 0x0cc7, 0x0cec, 0x0cfc, 0x0d18, 0x0d27, + // Entry C0 - FF + 0x0d30, 0x0d3c, 0x0d45, 0x0d67, 0x0d76, 0x0d82, 0x0d8e, 0x0d97, + 0x0da3, 0x0db8, 0x0dce, 0x0dda, 0x0de3, 0x0def, 0x0dfe, 0x0e11, + 0x0e20, 0x0e4a, 0x0e59, 0x0e68, 0x0e78, 0x0e84, 0x0e8d, 0x0e99, + 0x0eac, 0x0ed0, 0x0ee6, 0x0efc, 0x0f05, 0x0f17, 0x0f34, 0x0f63, + 0x0f69, 0x0f95, 0x0f9b, 0x0faa, 0x0fbc, 0x0fc8, 0x0fde, 0x0ff6, + 0x1002, 0x100b, 0x1014, 0x1034, 0x103d, 0x1049, 0x1058, 0x1064, + 0x1070, 0x10a2, 0x10c7, 0x10e3, 0x10ef, 0x1104, 0x111a, 0x114d, + 0x115c, 0x1188, 0x11b1, 0x11bd, 0x11c9, 0x11f0, 0x11f9, 0x1202, + // Entry 100 - 13F + 0x120b, 0x1217, 0x122d, 0x1239, 0x1245, 0x125e, 0x1267, 0x1273, + 0x1289, 0x129f, 0x12ab, 0x12c7, 0x12e6, 0x1302, 0x131b, 0x133a, + 0x1353, 0x135f, 0x1378, 0x1387, 0x13a0, 0x13b6, 0x13d9, 0x13f2, + 0x1407, 0x1416, 0x143b, 0x144a, 0x1453, 0x146f, 0x1488, 0x1494, + 0x14b0, 0x14c9, 0x14e5, 0x14fb, +} // Size: 608 bytes + +const arRegionStr string = "" + // Size: 5413 bytes + "جزيرة أسينشيونأندوراالإمارات العربية المتحدةأفغانستانأنتيغوا وبربوداأنغو" + + "يلاألبانياأرمينياأنغولاأنتاركتيكاالأرجنتينساموا الأمريكيةالنمساأستراليا" + + "أروباجزر آلاندأذربيجانالبوسنة والهرسكبربادوسبنغلاديشبلجيكابوركينا فاسوب" + + "لغارياالبحرينبورونديبنينسان بارتليميبرمودابرونايبوليفياهولندا الكاريبية" + + "البرازيلالبهامابوتانجزيرة بوفيهبتسوانابيلاروسبليزكنداجزر كوكوس (كيلينغ)" + + "الكونغو - كينشاساجمهورية أفريقيا الوسطىالكونغو - برازافيلسويسراساحل الع" + + "اججزر كوكتشيليالكاميرونالصينكولومبياجزيرة كليبيرتونكوستاريكاكوباالرأس ا" + + "لأخضركوراساوجزيرة الكريسماسقبرصجمهورية التشيكألمانيادييغو غارسياجيبوتيا" + + "لدانمركدومينيكاجمهورية الدومينيكانالجزائرسيوتا وميليلاالإكوادورإستونيام" + + "صرالصحراء الغربيةإريترياإسبانياإثيوبياالاتحاد الأوروبيفنلندافيجيجزر فوك" + + "لاندميكرونيزياجزر فاروفرنساالغابونالمملكة المتحدةغريناداجورجياغويانا ال" + + "فرنسيةغيرنزيغاناجبل طارقغرينلاندغامبياغينياغوادلوبغينيا الاستوائيةاليون" + + "انجورجيا الجنوبية وجزر ساندويتش الجنوبيةغواتيمالاغوامغينيا بيساوغياناهو" + + "نغ كونغ الصينيةجزيرة هيرد وجزر ماكدونالدهندوراسكرواتياهايتيهنغارياجزر ا" + + "لكناريإندونيسياأيرلنداإسرائيلجزيرة مانالهندالإقليم البريطاني في المحيط " + + "الهنديالعراقإيرانأيسلنداإيطالياجيرسيجامايكاالأردناليابانكينياقيرغيزستان" + + "كمبودياكيريباتيجزر القمرسانت كيتس ونيفيسكوريا الشماليةكوريا الجنوبيةالك" + + "ويتجزر كايمانكازاخستانلاوسلبنانسانت لوسياليختنشتاينسريلانكاليبيرياليسوت" + + "وليتوانيالوكسمبورغلاتفياليبياالمغربموناكومولدوفاالجبل الأسودسانت مارتنم" + + "دغشقرجزر مارشالمقدونياماليميانمار (بورما)منغوليامكاو الصينية (منطقة إدا" + + "رية خاصة)جزر ماريانا الشماليةجزر المارتينيكموريتانيامونتسراتمالطاموريشي" + + "وسجزر المالديفملاويالمكسيكماليزياموزمبيقناميبياكاليدونيا الجديدةالنيجرج" + + "زيرة نورفولكنيجيريانيكاراغواهولنداالنرويجنيبالناورونيوينيوزيلنداعُمانبن" + + "مابيروبولينيزيا الفرنسيةبابوا غينيا الجديدةالفلبينباكستانبولنداسانت بيي" + + "ر وميكولونجزر بيتكيرنبورتوريكوالأراضي الفلسطينيةالبرتغالبالاوباراغوايقط" + + "رأوقيانوسيا النائيةروينيونرومانياصربياروسياروانداالمملكة العربية السعود" + + "يةجزر سليمانسيشلالسودانالسويدسنغافورةسانت هيلانةسلوفينياسفالبارد وجان م" + + "ايانسلوفاكياسيراليونسان مارينوالسنغالالصومالسورينامجنوب السودانساو تومي" + + " وبرينسيبيالسلفادورسينت مارتنسورياسوازيلاندتريستان دي كونهاجزر توركس وكا" + + "يكوستشادالأقاليم الجنوبية الفرنسيةتوغوتايلاندطاجيكستانتوكيلوتيمور- ليشت" + + "يتركمانستانتونستونغاتركياترينيداد وتوباغوتوفالوتايوانتنزانياأوكرانياأوغ" + + "نداجزر الولايات المتحدة النائيةالأمم المتحدةالولايات المتحدةأورغوايأوزب" + + "كستانالفاتيكانسانت فنسنت وجزر غرينادينفنزويلاجزر فيرجن البريطانيةجزر في" + + "رجن التابعة للولايات المتحدةفيتنامفانواتوجزر والس وفوتوناسامواكوسوفوالي" + + "منمايوتجنوب أفريقيازامبيازيمبابويمنطقة غير معروفةالعالمأفريقياأمريكا ال" + + "شماليةأمريكا الجنوبيةأوقيانوسياغرب أفريقياأمريكا الوسطىشرق أفريقياشمال " + + "أفريقياوسط أفريقياأفريقيا الجنوبيةالأمريكتانشمال أمريكاالكاريبيشرق آسيا" + + "جنوب آسياجنوب شرق آسياجنوب أوروباأسترالاسياميلانيزياالجزر الميكرونيزيةب" + + "ولينيزياآسياوسط آسياغرب آسياأوروباشرق أوروباشمال أوروباغرب أوروباأمريكا" + + " اللاتينية" + +var arRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001b, 0x0027, 0x0055, 0x0067, 0x0084, 0x0092, 0x00a0, + 0x00ae, 0x00ba, 0x00ce, 0x00e0, 0x00fd, 0x0109, 0x0119, 0x0123, + 0x0134, 0x0144, 0x0161, 0x016f, 0x017f, 0x018b, 0x01a2, 0x01b0, + 0x01be, 0x01cc, 0x01d4, 0x01eb, 0x01f7, 0x0203, 0x0211, 0x0230, + 0x0240, 0x024e, 0x0258, 0x026d, 0x027b, 0x0289, 0x0291, 0x0299, + 0x02b9, 0x02d8, 0x0302, 0x0323, 0x032f, 0x0342, 0x034f, 0x0359, + 0x036b, 0x0375, 0x0385, 0x03a2, 0x03b4, 0x03bc, 0x03d3, 0x03e1, + 0x03fe, 0x0406, 0x0421, 0x042f, 0x0446, 0x0452, 0x0462, 0x0472, + // Entry 40 - 7F + 0x0497, 0x04a5, 0x04be, 0x04d0, 0x04de, 0x04e4, 0x0501, 0x050f, + 0x051d, 0x052b, 0x054a, 0x054a, 0x0556, 0x055e, 0x0573, 0x0587, + 0x0596, 0x05a0, 0x05ae, 0x05cb, 0x05d9, 0x05e5, 0x0602, 0x060e, + 0x0616, 0x0625, 0x0635, 0x0641, 0x064b, 0x0659, 0x0678, 0x0686, + 0x06ce, 0x06e0, 0x06e8, 0x06fd, 0x0707, 0x0727, 0x0756, 0x0764, + 0x0772, 0x077c, 0x078a, 0x079f, 0x07b1, 0x07bf, 0x07cd, 0x07de, + 0x07e8, 0x0828, 0x0834, 0x083e, 0x084c, 0x085a, 0x0864, 0x0872, + 0x087e, 0x088c, 0x0896, 0x08aa, 0x08b8, 0x08c8, 0x08d9, 0x08f7, + // Entry 80 - BF + 0x0912, 0x092d, 0x0939, 0x094c, 0x095e, 0x0966, 0x0970, 0x0983, + 0x0997, 0x09a7, 0x09b5, 0x09c1, 0x09d1, 0x09e3, 0x09ef, 0x09f9, + 0x0a05, 0x0a11, 0x0a1f, 0x0a36, 0x0a49, 0x0a55, 0x0a68, 0x0a76, + 0x0a7e, 0x0a99, 0x0aa7, 0x0ae1, 0x0b07, 0x0b22, 0x0b34, 0x0b44, + 0x0b4e, 0x0b5e, 0x0b75, 0x0b7f, 0x0b8d, 0x0b9b, 0x0ba9, 0x0bb7, + 0x0bd8, 0x0be4, 0x0bfd, 0x0c0b, 0x0c1d, 0x0c29, 0x0c37, 0x0c41, + 0x0c4b, 0x0c53, 0x0c65, 0x0c6f, 0x0c77, 0x0c7f, 0x0ca2, 0x0cc6, + 0x0cd4, 0x0ce2, 0x0cee, 0x0d10, 0x0d25, 0x0d37, 0x0d5a, 0x0d6a, + // Entry C0 - FF + 0x0d74, 0x0d84, 0x0d8a, 0x0dad, 0x0dbb, 0x0dc9, 0x0dd3, 0x0ddd, + 0x0de9, 0x0e17, 0x0e2a, 0x0e32, 0x0e40, 0x0e4c, 0x0e5c, 0x0e71, + 0x0e81, 0x0ea5, 0x0eb5, 0x0ec5, 0x0ed8, 0x0ee6, 0x0ef4, 0x0f02, + 0x0f19, 0x0f3b, 0x0f4d, 0x0f60, 0x0f6a, 0x0f7c, 0x0f9a, 0x0fba, + 0x0fc2, 0x0ff4, 0x0ffc, 0x100a, 0x101c, 0x1028, 0x103e, 0x1052, + 0x105a, 0x1064, 0x106e, 0x108d, 0x1099, 0x10a5, 0x10b3, 0x10c3, + 0x10cf, 0x1104, 0x111d, 0x113c, 0x114a, 0x115c, 0x116e, 0x119b, + 0x11a9, 0x11cf, 0x120f, 0x121b, 0x1229, 0x1247, 0x1251, 0x125d, + // Entry 100 - 13F + 0x1267, 0x1271, 0x1288, 0x1294, 0x12a4, 0x12c2, 0x12ce, 0x12dc, + 0x12f9, 0x1316, 0x132a, 0x133f, 0x1358, 0x136d, 0x1384, 0x1399, + 0x13b8, 0x13cc, 0x13e1, 0x13f1, 0x1400, 0x1411, 0x1429, 0x143e, + 0x1452, 0x1464, 0x1487, 0x1499, 0x14a1, 0x14b0, 0x14bf, 0x14cb, + 0x14de, 0x14f3, 0x1506, 0x1525, +} // Size: 608 bytes + +const azRegionStr string = "" + // Size: 3273 bytes + "Askenson adasıAndorraBirləşmiş Ərəb ƏmirlikləriƏfqanıstanAntiqua və Barb" + + "udaAngilyaAlbaniyaErmənistanAnqolaAntarktikaArgentinaAmerika SamoasıAvst" + + "riyaAvstraliyaArubaAland adalarıAzərbaycanBosniya və HerseqovinaBarbados" + + "BanqladeşBelçikaBurkina FasoBolqarıstanBəhreynBurundiBeninSent-Bartelemi" + + "Bermud adalarıBruneyBoliviyaKarib NiderlandıBraziliyaBaham adalarıButanB" + + "uve adasıBotsvanaBelarusBelizKanadaKokos (Kilinq) adalarıKonqo - Kinşasa" + + "Mərkəzi Afrika RespublikasıKonqo - BrazzavilİsveçrəKotd’ivuarKuk adaları" + + "ÇiliKamerunÇinKolumbiyaKlipperton adasıKosta RikaKubaKabo-VerdeKurasaoM" + + "ilad adasıKiprÇex RespublikasıAlmaniyaDieqo QarsiyaCibutiDanimarkaDomini" + + "kaDominikan RespublikasıƏlcəzairSeuta və MelilyaEkvadorEstoniyaMisirQərb" + + "i SaxaraEritreyaİspaniyaEfiopiyaAvropa BirliyiFinlandiyaFiciFolklend ada" + + "larıMikroneziyaFarer adalarıFransaQabonBirləşmiş KrallıqQrenadaGürcüstan" + + "Fransa QvianasıGernsiQanaCəbəllütariqQrenlandiyaQambiyaQvineyaQvadelupaE" + + "kvatorial QvineyaYunanıstanCənubi Corciya və Cənubi Sendviç adalarıQvate" + + "malaQuamQvineya-BisauQayanaHonq Konq Xüsusi İnzibati Ərazi ÇinHerd və Ma" + + "kdonald adalarıHondurasXorvatiyaHaitiMacarıstanKanar adalarıİndoneziyaİr" + + "landiyaİsrailMen adasıHindistanBritaniyanın Hind Okeanı Ərazisiİraqİranİ" + + "slandiyaİtaliyaCersiYamaykaİordaniyaYaponiyaKeniyaQırğızıstanKambocaKiri" + + "batiKomor adalarıSent-Kits və NevisŞimali KoreyaCənubi KoreyaKüveytKayma" + + "n adalarıQazaxıstanLaosLivanSent-LusiyaLixtenşteynŞri-LankaLiberiyaLesot" + + "oLitvaLüksemburqLatviyaLiviyaMərakeşMonakoMoldovaMonteneqroSent MartinMa" + + "daqaskarMarşal adalarıMakedoniyaMaliMyanmaMonqolustanMakao Xüsusi İnziba" + + "ti Ərazi ÇinŞimali Marian adalarıMartinikMavritaniyaMonseratMaltaMavriki" + + "Maldiv adalarıMalaviMeksikaMalayziyaMozambikNamibiyaYeni KaledoniyaNiger" + + "Norfolk adasıNigeriyaNikaraquaNiderlandNorveçNepalNauruNiueYeni Zelandiy" + + "aOmanPanamaPeruFransa PolineziyasıPapua-Yeni QvineyaFilippinPakistanPolş" + + "aMüqəddəs Pyer və MikelonPitkern adalarıPuerto RikoFələstin ƏraziləriPor" + + "tuqaliyaPalauParaqvayQətərUzaq OkeaniyaReyunyonRumıniyaSerbiyaRusiyaRuan" + + "daSəudiyyə ƏrəbistanıSolomon adalarıSeyşel adalarıSudanİsveçSinqapurMüqə" + + "ddəs YelenaSloveniyaSvalbard və Yan-MayenSlovakiyaSyerra-LeoneSan-Marino" + + "SeneqalSomaliSurinamCənubi SudanSan-Tome və PrinsipiSalvadorSint-MartenS" + + "uriyaSvazilendTristan da KunyaTörks və Kaykos adalarıÇadFransanın Cənub " + + "ƏraziləriToqoTailandTacikistanTokelauŞərqi TimorTürkmənistanTunisTonqaT" + + "ürkiyəTrinidad və TobaqoTuvaluTayvanTanzaniyaUkraynaUqandaABŞ-a bağlı k" + + "içik adacıqlarBirləşmiş Millətlər TəşkilatıAmerika Birləşmiş ŞtatlarıUru" + + "qvayÖzbəkistanVatikanSent-Vinsent və QrenadinlərVenesuelaBritaniyanın Vi" + + "rgin adalarıABŞ Virgin adalarıVyetnamVanuatuUollis və FutunaSamoaKosovoY" + + "əmənMayotCənub AfrikaZambiyaZimbabveNaməlum RegionDünyaAfrikaŞimali Ame" + + "rikaCənubi AmerikaOkeaniyaQərbi AfrikaMərkəzi AmerikaŞərqi AfrikaŞimali " + + "AfrikaMərkəzi AfrikaCənubi AfrikaAmerikaŞimal AmerikasıKaribŞərqi AsiyaC" + + "ənubi AsiyaCənub-Şərqi AsiyaCənubi AvropaAvstralaziyaMelaneziyaMikronez" + + "iya RegionuPolineziyaAsiyaMərkəzi AsiyaQərbi AsiyaAvropaŞərqi AvropaŞima" + + "li AvropaQərbi AvropaLatın Amerikası" + +var azRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0016, 0x0037, 0x0043, 0x0056, 0x005d, 0x0065, + 0x0070, 0x0076, 0x0080, 0x0089, 0x0099, 0x00a1, 0x00ab, 0x00b0, + 0x00be, 0x00c9, 0x00e0, 0x00e8, 0x00f2, 0x00fa, 0x0106, 0x0112, + 0x011a, 0x0121, 0x0126, 0x0134, 0x0143, 0x0149, 0x0151, 0x0162, + 0x016b, 0x0179, 0x017e, 0x0189, 0x0191, 0x0198, 0x019d, 0x01a3, + 0x01ba, 0x01ca, 0x01e8, 0x01f9, 0x0203, 0x020f, 0x021b, 0x0220, + 0x0227, 0x022b, 0x0234, 0x0245, 0x024f, 0x0253, 0x025d, 0x0264, + 0x0270, 0x0274, 0x0286, 0x028e, 0x029b, 0x02a1, 0x02aa, 0x02b2, + // Entry 40 - 7F + 0x02c9, 0x02d3, 0x02e4, 0x02eb, 0x02f3, 0x02f8, 0x0305, 0x030d, + 0x0316, 0x031e, 0x032c, 0x032c, 0x0336, 0x033a, 0x034b, 0x0356, + 0x0364, 0x036a, 0x036f, 0x0384, 0x038b, 0x0396, 0x03a6, 0x03ac, + 0x03b0, 0x03bf, 0x03ca, 0x03d1, 0x03d8, 0x03e1, 0x03f3, 0x03fe, + 0x042b, 0x0434, 0x0438, 0x0445, 0x044b, 0x0472, 0x048d, 0x0495, + 0x049e, 0x04a3, 0x04ae, 0x04bc, 0x04c7, 0x04d1, 0x04d8, 0x04e2, + 0x04eb, 0x050e, 0x0513, 0x0518, 0x0522, 0x052a, 0x052f, 0x0536, + 0x0540, 0x0548, 0x054e, 0x055d, 0x0564, 0x056c, 0x057a, 0x058d, + // Entry 80 - BF + 0x059b, 0x05a9, 0x05b0, 0x05bf, 0x05ca, 0x05ce, 0x05d3, 0x05de, + 0x05ea, 0x05f4, 0x05fc, 0x0602, 0x0607, 0x0612, 0x0619, 0x061f, + 0x0628, 0x062e, 0x0635, 0x063f, 0x064a, 0x0654, 0x0664, 0x066e, + 0x0672, 0x0678, 0x0683, 0x06a6, 0x06bd, 0x06c5, 0x06d0, 0x06d8, + 0x06dd, 0x06e4, 0x06f3, 0x06f9, 0x0700, 0x0709, 0x0711, 0x0719, + 0x0728, 0x072d, 0x073b, 0x0743, 0x074c, 0x0755, 0x075c, 0x0761, + 0x0766, 0x076a, 0x0778, 0x077c, 0x0782, 0x0786, 0x079a, 0x07ac, + 0x07b4, 0x07bc, 0x07c2, 0x07de, 0x07ee, 0x07f9, 0x080f, 0x081a, + // Entry C0 - FF + 0x081f, 0x0827, 0x082e, 0x083b, 0x0843, 0x084c, 0x0853, 0x0859, + 0x085f, 0x0877, 0x0887, 0x0897, 0x089c, 0x08a3, 0x08ab, 0x08bd, + 0x08c6, 0x08dc, 0x08e5, 0x08f1, 0x08fb, 0x0902, 0x0908, 0x090f, + 0x091c, 0x0931, 0x0939, 0x0944, 0x094a, 0x0953, 0x0963, 0x097d, + 0x0981, 0x099e, 0x09a2, 0x09a9, 0x09b3, 0x09ba, 0x09c7, 0x09d5, + 0x09da, 0x09df, 0x09e8, 0x09fb, 0x0a01, 0x0a07, 0x0a10, 0x0a17, + 0x0a1d, 0x0a3d, 0x0a62, 0x0a81, 0x0a88, 0x0a94, 0x0a9b, 0x0ab8, + 0x0ac1, 0x0ade, 0x0af2, 0x0af9, 0x0b00, 0x0b11, 0x0b16, 0x0b1c, + // Entry 100 - 13F + 0x0b23, 0x0b28, 0x0b35, 0x0b3c, 0x0b44, 0x0b53, 0x0b59, 0x0b5f, + 0x0b6e, 0x0b7d, 0x0b85, 0x0b92, 0x0ba3, 0x0bb1, 0x0bbf, 0x0bcf, + 0x0bdd, 0x0be4, 0x0bf5, 0x0bfa, 0x0c07, 0x0c14, 0x0c28, 0x0c36, + 0x0c42, 0x0c4c, 0x0c5f, 0x0c69, 0x0c6e, 0x0c7d, 0x0c89, 0x0c8f, + 0x0c9d, 0x0cab, 0x0cb8, 0x0cc9, +} // Size: 608 bytes + +const bgRegionStr string = "" + // Size: 5929 bytes + "остров ВъзнесениеАндораОбединени арабски емирстваАфганистанАнтигуа и Бар" + + "будаАнгуилаАлбанияАрменияАнголаАнтарктикаАржентинаАмериканска СамоаАвст" + + "рияАвстралияАрубаОландски островиАзербайджанБосна и ХерцеговинаБарбадос" + + "БангладешБелгияБуркина ФасоБългарияБахрейнБурундиБенинСен БартелемиБерм" + + "удаБруней ДаруссаламБоливияКарибска НидерландияБразилияБахамиБутаностро" + + "в БувеБотсванаБеларусБелизКанадаКокосови острови (острови Кийлинг)Конго" + + " (Киншаса)Централноафриканска републикаКонго (Бразавил)ШвейцарияКот д’Ив" + + "оарострови КукЧилиКамерунКитайКолумбияостров КлипертонКоста РикаКубаКаб" + + "о ВердеКюрасаоостров РождествоКипърЧешка републикаГерманияДиего ГарсияД" + + "жибутиДанияДоминикаДоминиканска републикаАлжирСеута и МелияЕквадорЕстон" + + "ияЕгипетЗападна СахараЕритреяИспанияЕтиопияЕвропейски съюзФинландияФидж" + + "иФолклендски островиМикронезияФарьорски островиФранцияГабонОбединеното " + + "кралствоГренадаГрузияФренска ГвианаГърнзиГанаГибралтарГренландияГамбияГ" + + "винеяГваделупаЕкваториална ГвинеяГърцияЮжна Джорджия и Южни Сандвичеви " + + "островиГватемалаГуамГвинея-БисауГаянаХонконг, САР на Китайостров Хърд и" + + " острови МакдоналдХондурасХърватияХаитиУнгарияКанарски островиИндонезияИ" + + "рландияИзраелостров МанИндияБританска територия в Индийския океанИракИр" + + "анИсландияИталияДжърсиЯмайкаЙорданияЯпонияКенияКиргизстанКамбоджаКириба" + + "тиКоморски островиСейнт Китс и НевисСеверна КореяЮжна КореяКувейтКайман" + + "ови островиКазахстанЛаосЛиванСейнт ЛусияЛихтенщайнШри ЛанкаЛиберияЛесот" + + "оЛитваЛюксембургЛатвияЛибияМарокоМонакоМолдоваЧерна гораСен МартенМадаг" + + "аскарМаршалови островиМакедонияМалиМианмар (Бирма)МонголияМакао, САР на" + + " КитайСеверни Мариански островиМартиникаМавританияМонтсератМалтаМавриций" + + "МалдивиМалавиМексикоМалайзияМозамбикНамибияНова КаледонияНигеростров Но" + + "рфолкНигерияНикарагуаНидерландияНорвегияНепалНауруНиуеНова ЗеландияОман" + + "ПанамаПеруФренска ПолинезияПапуа-Нова ГвинеяФилипиниПакистанПолшаСен Пи" + + "ер и МикелонОстрови ПиткернПуерто РикоПалестински територииПортугалияПа" + + "лауПарагвайКатарОтдалечени острови на ОкеанияРеюнионРумънияСърбияРусияР" + + "уандаСаудитска АрабияСоломонови островиСейшелиСуданШвецияСингапурСвета " + + "ЕленаСловенияСвалбард и Ян МайенСловакияСиера ЛеонеСан МариноСенегалСом" + + "алияСуринамЮжен СуданСао Томе и ПринсипиСалвадорСинт МартенСирияСвазиле" + + "ндТристан да Куняострови Търкс и КайкосЧадФренски южни територииТогоТай" + + "ландТаджикистанТокелауИзточен ТиморТуркменистанТунисТонгаТурцияТринидад" + + " и ТобагоТувалуТайванТанзанияУкрайнаУгандаОтдалечени острови на САЩОрган" + + "изация на обединените нацииСъединени щатиУругвайУзбекистанВатиканСейнт " + + "Винсънт и ГренадиниВенецуелаБритански Вирджински островиАмерикански Вир" + + "джински островиВиетнамВануатуУолис и ФутунаСамоаКосовоЙеменМайотЮжна Аф" + + "рикаЗамбияЗимбабвенепознат регионСвятАфрикаСеверноамерикански континент" + + "Южна АмерикаОкеанияЗападна АфиркаЦентрална АмерикаИзточна АфрикаСеверна" + + " АфрикаЦентрална АфрикаЮжноафрикански регионАмерикаСеверна АмерикаКарибс" + + "ки регионИзточна АзияЮжна АзияЮгоизточна АзияЮжна ЕвропаАвстралазияМела" + + "незияМикронезийски регионПолинезияАзияЦентрална АзияЗападна АзияЕвропаИ" + + "зточна ЕвропаСеверна ЕвропаЗападна ЕвропаЛатинска Америка" + +var bgRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0021, 0x002d, 0x005f, 0x0073, 0x0093, 0x00a1, 0x00af, + 0x00bd, 0x00c9, 0x00dd, 0x00ef, 0x0110, 0x011e, 0x0130, 0x013a, + 0x0159, 0x016f, 0x0193, 0x01a3, 0x01b5, 0x01c1, 0x01d8, 0x01e8, + 0x01f6, 0x0204, 0x020e, 0x0227, 0x0235, 0x0256, 0x0264, 0x028b, + 0x029b, 0x02a7, 0x02b1, 0x02c6, 0x02d6, 0x02e4, 0x02ee, 0x02fa, + 0x0339, 0x0354, 0x038d, 0x03aa, 0x03bc, 0x03d2, 0x03e7, 0x03ef, + 0x03fd, 0x0407, 0x0417, 0x0436, 0x0449, 0x0451, 0x0464, 0x0472, + 0x0491, 0x049b, 0x04b8, 0x04c8, 0x04df, 0x04ed, 0x04f7, 0x0507, + // Entry 40 - 7F + 0x0532, 0x053c, 0x0554, 0x0562, 0x0570, 0x057c, 0x0597, 0x05a5, + 0x05b3, 0x05c1, 0x05de, 0x05de, 0x05f0, 0x05fa, 0x061f, 0x0633, + 0x0654, 0x0662, 0x066c, 0x0693, 0x06a1, 0x06ad, 0x06c8, 0x06d4, + 0x06dc, 0x06ee, 0x0702, 0x070e, 0x071a, 0x072c, 0x0751, 0x075d, + 0x07a6, 0x07b8, 0x07c0, 0x07d7, 0x07e1, 0x0807, 0x0841, 0x0851, + 0x0861, 0x086b, 0x0879, 0x0898, 0x08aa, 0x08ba, 0x08c6, 0x08d9, + 0x08e3, 0x0929, 0x0931, 0x0939, 0x0949, 0x0955, 0x0961, 0x096d, + 0x097d, 0x0989, 0x0993, 0x09a7, 0x09b7, 0x09c7, 0x09e6, 0x0a07, + // Entry 80 - BF + 0x0a20, 0x0a33, 0x0a3f, 0x0a60, 0x0a72, 0x0a7a, 0x0a84, 0x0a99, + 0x0aad, 0x0abe, 0x0acc, 0x0ad8, 0x0ae2, 0x0af6, 0x0b02, 0x0b0c, + 0x0b18, 0x0b24, 0x0b32, 0x0b45, 0x0b58, 0x0b6c, 0x0b8d, 0x0b9f, + 0x0ba7, 0x0bc2, 0x0bd2, 0x0bf4, 0x0c24, 0x0c36, 0x0c4a, 0x0c5c, + 0x0c66, 0x0c76, 0x0c84, 0x0c90, 0x0c9e, 0x0cae, 0x0cbe, 0x0ccc, + 0x0ce7, 0x0cf1, 0x0d0c, 0x0d1a, 0x0d2c, 0x0d42, 0x0d52, 0x0d5c, + 0x0d66, 0x0d6e, 0x0d87, 0x0d8f, 0x0d9b, 0x0da3, 0x0dc4, 0x0de4, + 0x0df4, 0x0e04, 0x0e0e, 0x0e2f, 0x0e4c, 0x0e61, 0x0e8a, 0x0e9e, + // Entry C0 - FF + 0x0ea8, 0x0eb8, 0x0ec2, 0x0ef9, 0x0f07, 0x0f15, 0x0f21, 0x0f2b, + 0x0f37, 0x0f56, 0x0f79, 0x0f87, 0x0f91, 0x0f9d, 0x0fad, 0x0fc2, + 0x0fd2, 0x0ff5, 0x1005, 0x101a, 0x102d, 0x103b, 0x1049, 0x1057, + 0x106a, 0x108d, 0x109d, 0x10b2, 0x10bc, 0x10ce, 0x10ea, 0x1113, + 0x1119, 0x1143, 0x114b, 0x1159, 0x116f, 0x117d, 0x1196, 0x11ae, + 0x11b8, 0x11c2, 0x11ce, 0x11ee, 0x11fa, 0x1206, 0x1216, 0x1224, + 0x1230, 0x125f, 0x129c, 0x12b7, 0x12c5, 0x12d9, 0x12e7, 0x1316, + 0x1328, 0x135e, 0x1398, 0x13a6, 0x13b4, 0x13ce, 0x13d8, 0x13e4, + // Entry 100 - 13F + 0x13ee, 0x13f8, 0x140d, 0x1419, 0x1429, 0x1446, 0x144e, 0x145a, + 0x1491, 0x14a8, 0x14b6, 0x14d1, 0x14f2, 0x150d, 0x1528, 0x1547, + 0x1570, 0x157e, 0x159b, 0x15b8, 0x15cf, 0x15e0, 0x15fd, 0x1612, + 0x1628, 0x163a, 0x1661, 0x1673, 0x167b, 0x1696, 0x16ad, 0x16b9, + 0x16d4, 0x16ef, 0x170a, 0x1729, +} // Size: 608 bytes + +const bnRegionStr string = "" + // Size: 9531 bytes + "অ্যাসসেনশন আইল্যান্ডআন্ডোরাসংযুক্ত আরব আমিরাতআফগানিস্তানএন্টিগুয়া ও বার" + + "বুডাএ্যাঙ্গুইলাআলবেনিয়াআর্মেনিয়াঅ্যাঙ্গোলাঅ্যান্টার্কটিকাআর্জেন্টিনা" + + "আমেরিকান সামোয়াঅস্ট্রিয়াঅস্ট্রেলিয়াআরুবাআলান্ড দ্বীপপুঞ্জআজারবাইজান" + + "বসনিয়া ও হার্জেগোভিনাবারবাদোসবাংলাদেশবেলজিয়ামবুরকিনা ফাসোবুলগেরিয়াব" + + "াহরাইনবুরুন্ডিবেনিনসেন্ট বারথেলিমিবারমুডাব্রুনেইবলিভিয়াক্যারিবিয়ান ন" + + "েদারল্যান্ডসব্রাজিলবাহামা দ্বীপপুঞ্জভুটানবোভেট দ্বীপবতসোয়ানাবেলারুশবে" + + "লিজকানাডাকোকোস (কিলিং) দ্বীপপুঞ্জকঙ্গো-কিনশাসামধ্য আফ্রিকার প্রজাতন্ত্" + + "রকঙ্গো - ব্রাজাভিলসুইজারল্যান্ডআইভরি কোস্টকুক দ্বীপপুঞ্জচিলিক্যামেরুনচ" + + "ীনকলম্বিয়াক্লিপারটন আইল্যান্ডকোস্টারিকাকিউবাকেপভার্দেকিউরাসাওক্রিসমাস" + + " দ্বীপসাইপ্রাসচেক প্রজাতন্ত্রজার্মানিদিয়েগো গার্সিয়াজিবুতিডেনমার্কডোমি" + + "নিকাডোমেনিকান প্রজাতন্ত্রআলজেরিয়াকুউটা এবং মেলিলাইকুয়েডরএস্তোনিয়ামি" + + "শরপশ্চিম সাহারাইরিত্রিয়াস্পেনইফিওপিয়াইউরোপীয় ইউনিয়নফিনল্যান্ডফিজিফ" + + "কল্যান্ড দ্বীপপুঞ্জমাইক্রোনেশিয়াফ্যারও দ্বীপপুঞ্জফ্রান্সগ্যাবনযুক্তরা" + + "জ্যগ্রেনাডাজর্জিয়াফরাসী গায়ানাগ্রাঞ্জিঘানাজিব্রাল্টারগ্রীনল্যান্ডগাম" + + "্বিয়াগিনিগুয়াদেলৌপনিরক্ষীয় গিনিগ্রীসদক্ষিণ জর্জিয়া ও দক্ষিণ স্যান্" + + "ডউইচ দ্বীপপুঞ্জগুয়াতেমালাগুয়ামগিনি-বিসাউগিয়ানাহংকং এসএআর চীনাহার্ড " + + "দ্বীপ এবং ম্যাকডোনাল্ড দ্বীপপুঞ্জহণ্ডুরাসক্রোয়েশিয়াহাইতিহাঙ্গেরিক্যা" + + "নারি দ্বীপপুঞ্জইন্দোনেশিয়াআয়ারল্যান্ডইজরায়েলআইল অফ ম্যানভারতব্রিটিশ" + + " ভারত মহাসাগরীয় অঞ্চলইরাকইরানআইসল্যান্ডইতালিজার্সিজামাইকাজর্ডনজাপানকেনি" + + "য়াকিরগিজিস্তানকম্বোডিয়াকিরিবাতিকমোরোসসেন্ট কিটস ও নেভিসউত্তর কোরিয়া" + + "দক্ষিণ কোরিয়াকুয়েতকেম্যান দ্বীপপুঞ্জকাজাখস্তানলাওসলেবাননসেন্ট লুসিয়" + + "ালিচেনস্টেইনশ্রীলঙ্কালাইবেরিয়ালেসোথোলিথুয়ানিয়ালাক্সেমবার্গলাত্ভিয়া" + + "লিবিয়ামোরক্কোমোনাকোমোল্দাভিয়ামন্টিনিগ্রোসেন্ট মার্টিনমাদাগাস্কারমার্" + + "শাল দ্বীপপুঞ্জম্যাসাডোনিয়ামালিমায়ানমার (বার্মা)মঙ্গোলিয়াম্যাকাও এসএ" + + "আর চীনাউত্তরাঞ্চলীয় মারিয়ানা দ্বীপপুঞ্জমার্টিনিকমরিতানিয়ামন্টসেরাটম" + + "াল্টামরিশাসমালদ্বীপমালাউইমেক্সিকোমালয়েশিয়ামোজাম্বিকনামিবিয়ানিউ ক্যা" + + "লেডোনিয়ানাইজারনিরফোক দ্বীপনাইজেরিয়ানিকারাগুয়ানেদারল্যান্ডসনরওয়েনেপ" + + "ালনাউরুনিউয়েনিউজিল্যান্ডওমানপানামাপেরুফরাসী পলিনেশিয়াপাপুয়া নিউ গিন" + + "িফিলিপাইনপাকিস্তানপোল্যান্ডসেন্ট পিয়ের ও মিকুয়েলনপিটকেয়ার্ন দ্বীপপু" + + "ঞ্জপুয়ের্তো রিকোফিলিস্তিন অঞ্চলসমূহপর্তুগালপালাউপ্যারাগুয়েকাতারআউটলা" + + "ইনিং ওসানিয়ারিইউনিয়নরোমানিয়াসার্বিয়ারাশিয়ারুয়ান্ডাসৌদি আরবসলোমন " + + "দ্বীপপুঞ্জসিসিলিসুদানসুইডেনসিঙ্গাপুরসেন্ট হেলেনাস্লোভানিয়াস্বালবার্ড " + + "ও জান মেয়েনস্লোভাকিয়াসিয়েরালিওনসান মারিনোসেনেগালসোমালিয়াসুরিনামদক্" + + "ষিণ সুদানসাওটোমা ও প্রিন্সিপিএল সালভেদরসিন্ট মার্টেনসিরিয়াসোয়াজিল্যা" + + "ন্ডট্রিস্টান ডা কুনহাতুর্কস ও কাইকোস দ্বীপপুঞ্জচাদফরাসী দক্ষিণাঞ্চলটোগ" + + "োথাইল্যান্ডতাজিকস্থানটোকেলাউতিমুর-লেস্তেতুর্কমেনিস্তানতিউনিসিয়াটোঙ্গা" + + "তুরস্কত্রিনিনাদ ও টোব্যাগোটুভালুতাইওয়ানতাঞ্জানিয়াইউক্রেনউগান্ডাযুক্ত" + + "রাষ্ট্রের পার্শ্ববর্তী দ্বীপপুঞ্জজাতিসংঘমার্কিন যুক্তরাষ্ট্রউরুগুয়েউজ" + + "বেকিস্তানভ্যাটিকান সিটিসেন্ট ভিনসেন্ট ও দ্যা গ্রেনাডিনসভেনেজুয়েলাব্রি" + + "টিশ ভার্জিন দ্বীপপুঞ্জমার্কিন যুক্তরাষ্ট্রের ভার্জিন দ্বীপপুঞ্জভিয়েতন" + + "ামভানুয়াটুওয়ালিস ও ফুটুনাসামোয়াকসোভোইয়েমেনমায়োত্তেদক্ষিণ আফ্রিকাজ" + + "াম্বিয়াজিম্বাবোয়েঅজানা অঞ্চলপৃথিবীআফ্রিকাউত্তর আমেরিকাদক্ষিণ আমেরিকা" + + "ওশিয়ানিয়াপশ্চিম আফ্রিকামধ্য আমেরিকাপূর্ব আফ্রিকাউত্তর আফ্রিকামধ্য আফ" + + "্রিকাদক্ষিন আফ্রিকাআমেরিকাসউত্তরাঞ্চলীয় আমেরিকাক্যারাবিয়ানপূর্ব এশিয" + + "়াদক্ষিণ এশিয়াদক্ষিণ পূর্ব এশিয়াদক্ষিণ ইউরোপঅস্ট্রালেশিয়াম্যালেনেশি" + + "য়ামাইক্রোনেশিয়া অঞ্চলপলিনেশিয়াএশিয়ামধ্য এশিয়াপশ্চিম এশিয়াইউরোপপূ" + + "র্ব ইউরোপউত্তর ইউরোপপশ্চিম ইউরোপল্যাটিন আমেরিকা" + +var bnRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x003a, 0x004f, 0x0081, 0x00a2, 0x00da, 0x00fb, 0x0116, + 0x0134, 0x0152, 0x017f, 0x01a0, 0x01ce, 0x01ec, 0x0210, 0x021f, + 0x0250, 0x026e, 0x02ac, 0x02c4, 0x02dc, 0x02f7, 0x0319, 0x0337, + 0x034c, 0x0364, 0x0373, 0x039e, 0x03b3, 0x03c8, 0x03e0, 0x042c, + 0x0441, 0x0472, 0x0481, 0x04a0, 0x04bb, 0x04d0, 0x04df, 0x04f1, + 0x0531, 0x0556, 0x059d, 0x05ca, 0x05f1, 0x0610, 0x0638, 0x0644, + 0x065f, 0x0668, 0x0683, 0x06ba, 0x06d8, 0x06e7, 0x0702, 0x071a, + 0x0742, 0x075a, 0x0785, 0x079d, 0x07ce, 0x07e0, 0x07f8, 0x0810, + // Entry 40 - 7F + 0x084d, 0x0868, 0x0894, 0x08ac, 0x08ca, 0x08d6, 0x08fb, 0x0919, + 0x0928, 0x0943, 0x0971, 0x0971, 0x098f, 0x099b, 0x09d5, 0x09ff, + 0x0a30, 0x0a45, 0x0a57, 0x0a75, 0x0a8d, 0x0aa5, 0x0aca, 0x0ae2, + 0x0aee, 0x0b0f, 0x0b33, 0x0b4e, 0x0b5a, 0x0b78, 0x0ba0, 0x0baf, + 0x0c2f, 0x0c50, 0x0c62, 0x0c7e, 0x0c93, 0x0cbc, 0x0d29, 0x0d41, + 0x0d65, 0x0d74, 0x0d8c, 0x0dc3, 0x0de7, 0x0e0b, 0x0e23, 0x0e43, + 0x0e4f, 0x0ea0, 0x0eac, 0x0eb8, 0x0ed6, 0x0ee5, 0x0ef7, 0x0f0c, + 0x0f1b, 0x0f2a, 0x0f3f, 0x0f63, 0x0f81, 0x0f99, 0x0fab, 0x0fdb, + // Entry 80 - BF + 0x1000, 0x1028, 0x103a, 0x106e, 0x108c, 0x1098, 0x10aa, 0x10cf, + 0x10f0, 0x110b, 0x1129, 0x113b, 0x115f, 0x1183, 0x119e, 0x11b3, + 0x11c8, 0x11da, 0x11fb, 0x121c, 0x1241, 0x1262, 0x1296, 0x12bd, + 0x12c9, 0x12f9, 0x1317, 0x1349, 0x13ab, 0x13c6, 0x13e4, 0x13ff, + 0x1411, 0x1423, 0x143b, 0x144d, 0x1465, 0x1486, 0x14a1, 0x14bc, + 0x14ed, 0x14ff, 0x1521, 0x153f, 0x1560, 0x1587, 0x1599, 0x15a8, + 0x15b7, 0x15c9, 0x15ed, 0x15f9, 0x160b, 0x1617, 0x1645, 0x1671, + 0x1689, 0x16a4, 0x16bf, 0x1701, 0x1741, 0x1769, 0x17a0, 0x17b8, + // Entry C0 - FF + 0x17c7, 0x17e8, 0x17f7, 0x182b, 0x1846, 0x1861, 0x187c, 0x1891, + 0x18ac, 0x18c2, 0x18f0, 0x1902, 0x1911, 0x1923, 0x193e, 0x1960, + 0x1981, 0x19c0, 0x19e1, 0x1a02, 0x1a1e, 0x1a33, 0x1a4e, 0x1a63, + 0x1a85, 0x1abd, 0x1ad9, 0x1afe, 0x1b13, 0x1b3d, 0x1b6f, 0x1bb7, + 0x1bc0, 0x1bf1, 0x1bfd, 0x1c1b, 0x1c39, 0x1c4e, 0x1c70, 0x1c9a, + 0x1cb8, 0x1cca, 0x1cdc, 0x1d14, 0x1d26, 0x1d3e, 0x1d5f, 0x1d74, + 0x1d89, 0x1df7, 0x1e0c, 0x1e46, 0x1e5e, 0x1e7f, 0x1ea7, 0x1eff, + 0x1f20, 0x1f6a, 0x1fdf, 0x1ffa, 0x2015, 0x2041, 0x2056, 0x2065, + // Entry 100 - 13F + 0x207a, 0x2095, 0x20bd, 0x20d8, 0x20f9, 0x2118, 0x212a, 0x213f, + 0x2164, 0x218c, 0x21ad, 0x21d5, 0x21f7, 0x221c, 0x2241, 0x2263, + 0x228b, 0x22a3, 0x22e0, 0x2304, 0x2326, 0x234b, 0x2380, 0x23a2, + 0x23cc, 0x23f3, 0x242d, 0x244b, 0x245d, 0x247c, 0x24a1, 0x24b0, + 0x24cf, 0x24ee, 0x2510, 0x253b, +} // Size: 608 bytes + +const caRegionStr string = "" + // Size: 3175 bytes + "Illa de l’AscensióAndorraEmirats Àrabs UnitsAfganistanAntigua i BarbudaA" + + "nguillaAlbàniaArmèniaAngolaAntàrtidaArgentinaSamoa Nord-americanaÀustria" + + "AustràliaArubaIlles ÅlandAzerbaidjanBòsnia i HercegovinaBarbadosBangla D" + + "eshBèlgicaBurkina FasoBulgàriaBahrainBurundiBenínSaint BarthélemyBermude" + + "sBruneiBolíviaCarib NeerlandèsBrasilBahamesBhutanBouvetBotswanaBelarúsBe" + + "lizeCanadàIlles CocosCongo - KinshasaRepública CentreafricanaCongo - Bra" + + "zzavilleSuïssaCosta d’IvoriIlles CookXileCamerunXinaColòmbiaIlla Clipper" + + "tonCosta RicaCubaCap VerdCuraçaoIlla ChristmasXipreRepública TxecaAleman" + + "yaDiego GarciaDjiboutiDinamarcaDominicaRepública DominicanaAlgèriaCeuta " + + "i MelillaEquadorEstòniaEgipteSàhara OccidentalEritreaEspanyaEtiòpiaUnió " + + "EuropeaFinlàndiaFijiIlles MalvinesMicronèsiaIlles FèroeFrançaGabonRegne " + + "UnitGrenadaGeòrgiaGuaiana FrancesaGuernseyGhanaGibraltarGrenlàndiaGàmbia" + + "GuineaGuadeloupeGuinea EquatorialGrèciaIlles Geòrgia del Sud i Sandwich " + + "del SudGuatemalaGuamGuinea BissauGuyanaHong Kong (RAE Xina)Illa Heard i " + + "Illes McDonaldHonduresCroàciaHaitíHongriaIlles CanàriesIndonèsiaIrlandaI" + + "sraelIlla de ManÍndiaTerritori Britànic de l’Oceà ÍndicIraqIranIslàndiaI" + + "tàliaJerseyJamaicaJordàniaJapóKenyaKirguizistanCambodjaKiribatiComoresSa" + + "int Christopher i NevisCorea del NordCorea del SudKuwaitIlles CaimanKaza" + + "khstanLaosLíbanSaint LuciaLiechtensteinSri LankaLibèriaLesothoLituàniaLu" + + "xemburgLetòniaLíbiaMarrocMònacoMoldàviaMontenegroSaint MartinMadagascarI" + + "lles MarshallMacedòniaMaliMyanmar (Birmània)MongòliaMacau (RAE Xina)Ille" + + "s Mariannes del NordMartinicaMauritàniaMontserratMaltaMauriciMaldivesMal" + + "awiMèxicMalàisiaMoçambicNamíbiaNova CaledòniaNígerNorfolkNigèriaNicaragu" + + "aPaïsos BaixosNoruegaNepalNauruNiueNova ZelandaOmanPanamàPerúPolinèsia F" + + "rancesaPapua Nova GuineaFilipinesPakistanPolòniaSaint-Pierre-et-Miquelon" + + "Illes PitcairnPuerto Ricoterritoris palestinsPortugalPalauParaguaiQatarT" + + "erritoris allunyats d’OceaniaIlla de la ReunióRomaniaSèrbiaRússiaRuandaA" + + "ràbia SauditaIlles SalomóSeychellesSudanSuèciaSingapurSaint HelenaEslovè" + + "niaSvalbard i Jan MayenEslovàquiaSierra LeoneSan MarinoSenegalSomàliaSur" + + "inamSudan del SudSão Tomé i PríncipeEl SalvadorSint MaartenSíriaSwazilàn" + + "diaTristão da CunhaIlles Turks i CaicosTxadTerritoris Francesos del SudT" + + "ogoTailàndiaTadjikistanTokelauTimor OrientalTurkmenistanTunísiaTongaTurq" + + "uiaTrinitat i TobagoTuvaluTaiwanTanzàniaUcraïnaUgandaIlles Perifèriques " + + "Menors dels EUANacions UnidesEstats UnitsUruguaiUzbekistanCiutat del Vat" + + "icàSaint Vincent i les GrenadinesVeneçuelaIlles Verges BritàniquesIlles " + + "Verges Nord-americanesVietnamVanuatuWallis i FutunaSamoaKosovoIemenMayot" + + "teRepública de Sud-àfricaZàmbiaZimbàbueRegió desconegudaMónÀfricaAmèrica" + + " del NordAmèrica del SudOceaniaÀfrica occidentalAmèrica CentralÀfrica or" + + "ientalÀfrica septentrionalÀfrica centralÀfrica meridionalAmèricaAmèrica " + + "septentrionalCaribÀsia orientalÀsia meridionalÀsia sud-orientalEuropa me" + + "ridionalAustralàsiaMelanèsiaRegió de la MicronèsiaPolinèsiaÀsiaÀsia cent" + + "ralÀsia occidentalEuropaEuropa orientalEuropa septentrionalEuropa occide" + + "ntalAmèrica Llatina" + +var caRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0015, 0x001c, 0x0030, 0x003a, 0x004b, 0x0053, 0x005b, + 0x0063, 0x0069, 0x0073, 0x007c, 0x0090, 0x0098, 0x00a2, 0x00a7, + 0x00b3, 0x00be, 0x00d3, 0x00db, 0x00e6, 0x00ee, 0x00fa, 0x0103, + 0x010a, 0x0111, 0x0117, 0x0128, 0x0130, 0x0136, 0x013e, 0x014f, + 0x0155, 0x015c, 0x0162, 0x0168, 0x0170, 0x0178, 0x017e, 0x0185, + 0x0190, 0x01a0, 0x01b9, 0x01cc, 0x01d3, 0x01e2, 0x01ec, 0x01f0, + 0x01f7, 0x01fb, 0x0204, 0x0213, 0x021d, 0x0221, 0x0229, 0x0231, + 0x023f, 0x0244, 0x0254, 0x025c, 0x0268, 0x0270, 0x0279, 0x0281, + // Entry 40 - 7F + 0x0296, 0x029e, 0x02ad, 0x02b4, 0x02bc, 0x02c2, 0x02d4, 0x02db, + 0x02e2, 0x02ea, 0x02f7, 0x02f7, 0x0301, 0x0305, 0x0313, 0x031e, + 0x032a, 0x0331, 0x0336, 0x0340, 0x0347, 0x034f, 0x035f, 0x0367, + 0x036c, 0x0375, 0x0380, 0x0387, 0x038d, 0x0397, 0x03a8, 0x03af, + 0x03d8, 0x03e1, 0x03e5, 0x03f2, 0x03f8, 0x040c, 0x0427, 0x042f, + 0x0437, 0x043d, 0x0444, 0x0453, 0x045d, 0x0464, 0x046a, 0x0475, + 0x047b, 0x04a2, 0x04a6, 0x04aa, 0x04b3, 0x04ba, 0x04c0, 0x04c7, + 0x04d0, 0x04d5, 0x04da, 0x04e6, 0x04ee, 0x04f6, 0x04fd, 0x0516, + // Entry 80 - BF + 0x0524, 0x0531, 0x0537, 0x0543, 0x054d, 0x0551, 0x0557, 0x0562, + 0x056f, 0x0578, 0x0580, 0x0587, 0x0590, 0x0599, 0x05a1, 0x05a7, + 0x05ad, 0x05b4, 0x05bd, 0x05c7, 0x05d3, 0x05dd, 0x05eb, 0x05f5, + 0x05f9, 0x060c, 0x0615, 0x0625, 0x063d, 0x0646, 0x0651, 0x065b, + 0x0660, 0x0667, 0x066f, 0x0675, 0x067b, 0x0684, 0x068d, 0x0695, + 0x06a4, 0x06aa, 0x06b1, 0x06b9, 0x06c2, 0x06d0, 0x06d7, 0x06dc, + 0x06e1, 0x06e5, 0x06f1, 0x06f5, 0x06fc, 0x0701, 0x0714, 0x0725, + 0x072e, 0x0736, 0x073e, 0x0756, 0x0764, 0x076f, 0x0783, 0x078b, + // Entry C0 - FF + 0x0790, 0x0798, 0x079d, 0x07bd, 0x07cf, 0x07d6, 0x07dd, 0x07e4, + 0x07ea, 0x07f9, 0x0806, 0x0810, 0x0815, 0x081c, 0x0824, 0x0830, + 0x083a, 0x084e, 0x0859, 0x0865, 0x086f, 0x0876, 0x087e, 0x0885, + 0x0892, 0x08a8, 0x08b3, 0x08bf, 0x08c5, 0x08d1, 0x08e2, 0x08f6, + 0x08fa, 0x0916, 0x091a, 0x0924, 0x092f, 0x0936, 0x0944, 0x0950, + 0x0958, 0x095d, 0x0964, 0x0975, 0x097b, 0x0981, 0x098a, 0x0992, + 0x0998, 0x09bb, 0x09c9, 0x09d5, 0x09dc, 0x09e6, 0x09f8, 0x0a16, + 0x0a20, 0x0a39, 0x0a55, 0x0a5c, 0x0a63, 0x0a72, 0x0a77, 0x0a7d, + // Entry 100 - 13F + 0x0a82, 0x0a89, 0x0aa2, 0x0aa9, 0x0ab2, 0x0ac4, 0x0ac8, 0x0acf, + 0x0ae0, 0x0af0, 0x0af7, 0x0b09, 0x0b19, 0x0b29, 0x0b3e, 0x0b4d, + 0x0b5f, 0x0b67, 0x0b7d, 0x0b82, 0x0b90, 0x0ba0, 0x0bb2, 0x0bc3, + 0x0bcf, 0x0bd9, 0x0bf1, 0x0bfb, 0x0c00, 0x0c0d, 0x0c1d, 0x0c23, + 0x0c32, 0x0c46, 0x0c57, 0x0c67, +} // Size: 608 bytes + +const csRegionStr string = "" + // Size: 3219 bytes + "AscensionAndorraSpojené arabské emirátyAfghánistánAntigua a BarbudaAngui" + + "llaAlbánieArménieAngolaAntarktidaArgentinaAmerická SamoaRakouskoAustráli" + + "eArubaÅlandyÁzerbájdžánBosna a HercegovinaBarbadosBangladéšBelgieBurkina" + + " FasoBulharskoBahrajnBurundiBeninSvatý BartolomějBermudyBrunejBolívieKar" + + "ibské NizozemskoBrazílieBahamyBhútánBouvetův ostrovBotswanaBěloruskoBeli" + + "zeKanadaKokosové ostrovyKongo – KinshasaStředoafrická republikaKongo – B" + + "razzavilleŠvýcarskoPobřeží slonovinyCookovy ostrovyChileKamerunČínaKolum" + + "bieClippertonův ostrovKostarikaKubaKapverdyCuraçaoVánoční ostrovKyprČesk" + + "á republikaNěmeckoDiego GarcíaDžibutskoDánskoDominikaDominikánská repub" + + "likaAlžírskoCeuta a MelillaEkvádorEstonskoEgyptZápadní SaharaEritreaŠpan" + + "ělskoEtiopieEvropská unieFinskoFidžiFalklandské ostrovyMikronésieFaersk" + + "é ostrovyFrancieGabonSpojené královstvíGrenadaGruzieFrancouzská GuyanaG" + + "uernseyGhanaGibraltarGrónskoGambieGuineaGuadeloupeRovníková GuineaŘeckoJ" + + "ižní Georgie a Jižní Sandwichovy ostrovyGuatemalaGuamGuinea-BissauGuyana" + + "Hongkong – ZAO ČínyHeardův ostrov a McDonaldovy ostrovyHondurasChorvatsk" + + "oHaitiMaďarskoKanárské ostrovyIndonésieIrskoIzraelOstrov ManIndieBritské" + + " indickooceánské územíIrákÍránIslandItálieJerseyJamajkaJordánskoJaponsko" + + "KeňaKyrgyzstánKambodžaKiribatiKomorySvatý Kryštof a NevisSeverní KoreaJi" + + "žní KoreaKuvajtKajmanské ostrovyKazachstánLaosLibanonSvatá LucieLichten" + + "štejnskoSrí LankaLibérieLesothoLitvaLucemburskoLotyšskoLibyeMarokoMonak" + + "oMoldavskoČerná HoraSvatý Martin (Francie)MadagaskarMarshallovy ostrovyM" + + "akedonieMaliMyanmar (Barma)MongolskoMacao – ZAO ČínySeverní MarianyMarti" + + "nikMauritánieMontserratMaltaMauriciusMaledivyMalawiMexikoMalajsieMosambi" + + "kNamibieNová KaledonieNigerNorfolkNigérieNikaraguaNizozemskoNorskoNepálN" + + "auruNiueNový ZélandOmánPanamaPeruFrancouzská PolynésiePapua-Nová GuineaF" + + "ilipínyPákistánPolskoSaint-Pierre a MiquelonPitcairnovy ostrovyPortoriko" + + "Palestinská územíPortugalskoPalauParaguayKatarVnější OceánieRéunionRumun" + + "skoSrbskoRuskoRwandaSaúdská ArábieŠalamounovy ostrovySeychelySúdánŠvédsk" + + "oSingapurSvatá HelenaSlovinskoŠpicberky a Jan MayenSlovenskoSierra Leone" + + "San MarinoSenegalSomálskoSurinamJižní SúdánSvatý Tomáš a Princův ostrovS" + + "alvadorSvatý Martin (Nizozemsko)SýrieSvazijskoTristan da CunhaTurks a Ca" + + "icosČadFrancouzská jižní územíTogoThajskoTádžikistánTokelauVýchodní Timo" + + "rTurkmenistánTuniskoTongaTureckoTrinidad a TobagoTuvaluTchaj-wanTanzanie" + + "UkrajinaUgandaMenší odlehlé ostrovy USAOSNSpojené státyUruguayUzbekistán" + + "VatikánSvatý Vincenc a GrenadinyVenezuelaBritské Panenské ostrovyAmerick" + + "é Panenské ostrovyVietnamVanuatuWallis a FutunaSamoaKosovoJemenMayotteJ" + + "ihoafrická republikaZambieZimbabweNeznámá oblastSvětAfrikaSeverní Amerik" + + "aJižní AmerikaOceánieZápadní AfrikaStřední AmerikaVýchodní AfrikaSeverní" + + " AfrikaStřední AfrikaJižní AfrikaAmerikaSeverní Amerika (oblast)KaribikV" + + "ýchodní AsieJižní AsieJihovýchodní AsieJižní EvropaAustralasieMelanésie" + + "Mikronésie (region)PolynésieAsieStřední AsieZápadní AsieEvropaVýchodní E" + + "vropaSeverní EvropaZápadní EvropaLatinská Amerika" + +var csRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002a, 0x0037, 0x0048, 0x0050, 0x0058, + 0x0060, 0x0066, 0x0070, 0x0079, 0x0088, 0x0090, 0x009a, 0x009f, + 0x00a6, 0x00b5, 0x00c8, 0x00d0, 0x00db, 0x00e1, 0x00ed, 0x00f6, + 0x00fd, 0x0104, 0x0109, 0x011b, 0x0122, 0x0128, 0x0130, 0x0144, + 0x014d, 0x0153, 0x015b, 0x016b, 0x0173, 0x017d, 0x0183, 0x0189, + 0x019a, 0x01ac, 0x01c5, 0x01da, 0x01e5, 0x01f9, 0x0208, 0x020d, + 0x0214, 0x021a, 0x0222, 0x0236, 0x023f, 0x0243, 0x024b, 0x0253, + 0x0264, 0x0268, 0x0279, 0x0281, 0x028e, 0x0298, 0x029f, 0x02a7, + // Entry 40 - 7F + 0x02bf, 0x02c9, 0x02d8, 0x02e0, 0x02e8, 0x02ed, 0x02fd, 0x0304, + 0x030f, 0x0316, 0x0324, 0x0324, 0x032a, 0x0330, 0x0344, 0x034f, + 0x035f, 0x0366, 0x036b, 0x0380, 0x0387, 0x038d, 0x03a0, 0x03a8, + 0x03ad, 0x03b6, 0x03be, 0x03c4, 0x03ca, 0x03d4, 0x03e6, 0x03ec, + 0x0419, 0x0422, 0x0426, 0x0433, 0x0439, 0x0450, 0x0475, 0x047d, + 0x0487, 0x048c, 0x0495, 0x04a7, 0x04b1, 0x04b6, 0x04bc, 0x04c6, + 0x04cb, 0x04ed, 0x04f2, 0x04f8, 0x04fe, 0x0505, 0x050b, 0x0512, + 0x051c, 0x0524, 0x0529, 0x0534, 0x053d, 0x0545, 0x054b, 0x0562, + // Entry 80 - BF + 0x0570, 0x057d, 0x0583, 0x0595, 0x05a0, 0x05a4, 0x05ab, 0x05b7, + 0x05c7, 0x05d1, 0x05d9, 0x05e0, 0x05e5, 0x05f0, 0x05f9, 0x05fe, + 0x0604, 0x060a, 0x0613, 0x061f, 0x0636, 0x0640, 0x0653, 0x065c, + 0x0660, 0x066f, 0x0678, 0x068c, 0x069c, 0x06a4, 0x06af, 0x06b9, + 0x06be, 0x06c7, 0x06cf, 0x06d5, 0x06db, 0x06e3, 0x06eb, 0x06f2, + 0x0701, 0x0706, 0x070d, 0x0715, 0x071e, 0x0728, 0x072e, 0x0734, + 0x0739, 0x073d, 0x074a, 0x074f, 0x0755, 0x0759, 0x0770, 0x0782, + 0x078b, 0x0795, 0x079b, 0x07b2, 0x07c5, 0x07ce, 0x07e2, 0x07ed, + // Entry C0 - FF + 0x07f2, 0x07fa, 0x07ff, 0x0811, 0x0819, 0x0821, 0x0827, 0x082c, + 0x0832, 0x0843, 0x0857, 0x085f, 0x0866, 0x086f, 0x0877, 0x0884, + 0x088d, 0x08a3, 0x08ac, 0x08b8, 0x08c2, 0x08c9, 0x08d2, 0x08d9, + 0x08e8, 0x0908, 0x0910, 0x092a, 0x0930, 0x0939, 0x0949, 0x0957, + 0x095b, 0x0977, 0x097b, 0x0982, 0x0990, 0x0997, 0x09a7, 0x09b4, + 0x09bb, 0x09c0, 0x09c7, 0x09d8, 0x09de, 0x09e7, 0x09ef, 0x09f7, + 0x09fd, 0x0a19, 0x0a1c, 0x0a2b, 0x0a32, 0x0a3d, 0x0a45, 0x0a5f, + 0x0a68, 0x0a82, 0x0a9d, 0x0aa4, 0x0aab, 0x0aba, 0x0abf, 0x0ac5, + // Entry 100 - 13F + 0x0aca, 0x0ad1, 0x0ae7, 0x0aed, 0x0af5, 0x0b05, 0x0b0a, 0x0b10, + 0x0b20, 0x0b2f, 0x0b37, 0x0b47, 0x0b58, 0x0b69, 0x0b78, 0x0b88, + 0x0b96, 0x0b9d, 0x0bb6, 0x0bbd, 0x0bcc, 0x0bd8, 0x0beb, 0x0bf9, + 0x0c04, 0x0c0e, 0x0c22, 0x0c2c, 0x0c30, 0x0c3e, 0x0c4c, 0x0c52, + 0x0c63, 0x0c72, 0x0c82, 0x0c93, +} // Size: 608 bytes + +const daRegionStr string = "" + // Size: 2960 bytes + "AscensionøenAndorraDe Forenede Arabiske EmiraterAfghanistanAntigua og Ba" + + "rbudaAnguillaAlbanienArmenienAngolaAntarktisArgentinaAmerikansk SamoaØst" + + "rigAustralienArubaÅlandAserbajdsjanBosnien-HercegovinaBarbadosBangladesh" + + "BelgienBurkina FasoBulgarienBahrainBurundiBeninSaint BarthélemyBermudaBr" + + "uneiBoliviaDe tidligere Nederlandske AntillerBrasilienBahamasBhutanBouve" + + "tøenBotswanaHvideruslandBelizeCanadaCocosøerneCongo-KinshasaDen Centrala" + + "frikanske RepublikCongo-BrazzavilleSchweizElfenbenskystenCookøerneChileC" + + "amerounKinaColombiaClippertonøenCosta RicaCubaKap VerdeCuraçaoJuleøenCyp" + + "ernTjekkietTysklandDiego GarciaDjiboutiDanmarkDominicaDen Dominikanske R" + + "epublikAlgerietCeuta og MelillaEcuadorEstlandEgyptenVestsaharaEritreaSpa" + + "nienEtiopienDen Europæiske UnionFinlandFijiFalklandsøerneMikronesiens Fo" + + "renede StaterFærøerneFrankrigGabonStorbritannienGrenadaGeorgienFransk Gu" + + "yanaGuernseyGhanaGibraltarGrønlandGambiaGuineaGuadeloupeÆkvatorialguinea" + + "GrækenlandSouth Georgia og De Sydlige SandwichøerGuatemalaGuamGuinea-Bis" + + "sauGuyanaSAR HongkongHeard Island og McDonald IslandsHondurasKroatienHai" + + "tiUngarnKanariske øerIndonesienIrlandIsraelIsle of ManIndienDet britiske" + + " territorium i Det Indiske OceanIrakIranIslandItalienJerseyJamaicaJordan" + + "JapanKenyaKirgisistanCambodjaKiribatiComorerneSaint Kitts og NevisNordko" + + "reaSydkoreaKuwaitCaymanøerneKasakhstanLaosLibanonSaint LuciaLiechtenstei" + + "nSri LankaLiberiaLesothoLitauenLuxembourgLetlandLibyenMarokkoMonacoMoldo" + + "vaMontenegroSaint MartinMadagaskarMarshalløerneMakedonienMaliMyanmar (Bu" + + "rma)MongolietSAR MacaoNordmarianerneMartiniqueMauretanienMontserratMalta" + + "MauritiusMaldiverneMalawiMexicoMalaysiaMozambiqueNamibiaNy KaledonienNig" + + "erNorfolk IslandNigeriaNicaraguaHollandNorgeNepalNauruNiueNew ZealandOma" + + "nPanamaPeruFransk PolynesienPapua Ny GuineaFilippinernePakistanPolenSain" + + "t Pierre og MiquelonPitcairnPuerto RicoDe palæstinensiske områderPortuga" + + "lPalauParaguayQatarYdre OceanienRéunionRumænienSerbienRuslandRwandaSaudi" + + "-ArabienSalomonøerneSeychellerneSudanSverigeSingaporeSt. HelenaSlovenien" + + "Svalbard og Jan MayenSlovakietSierra LeoneSan MarinoSenegalSomaliaSurina" + + "mSydsudanSão Tomé og PríncipeEl SalvadorSint MaartenSyrienSwazilandTrist" + + "an da CunhaTurks- og CaicosøerneTchadDe franske besiddelser i Det Sydlig" + + "e Indiske OceanTogoThailandTadsjikistanTokelauTimor-LesteTurkmenistanTun" + + "esienTongaTyrkietTrinidad og TobagoTuvaluTaiwanTanzaniaUkraineUgandaAmer" + + "ikanske oversøiske øerForenede NationerUSAUruguayUsbekistanVatikanstaten" + + "Saint Vincent og GrenadinerneVenezuelaDe Britiske JomfruøerDe Amerikansk" + + "e JomfruøerVietnamVanuatuWallis og FutunaSamoaKosovoYemenMayotteSydafrik" + + "aZambiaZimbabweUkendt områdeVerdenAfrikaNordamerikaSydamerikaOceanienVes" + + "tafrikaMellemamerikaØstafrikaNordafrikaCentralafrikaDet sydlige AfrikaAm" + + "erikaDet nordlige AmerikaCaribienØstasienSydasienSydøstasienSydeuropaAus" + + "tralasienMelanesienMikronesienPolynesienAsienCentralasienVestasienEuropa" + + "ØsteuropaNordeuropaVesteuropaLatinamerika" + +var daRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000d, 0x0014, 0x0031, 0x003c, 0x004e, 0x0056, 0x005e, + 0x0066, 0x006c, 0x0075, 0x007e, 0x008e, 0x0095, 0x009f, 0x00a4, + 0x00aa, 0x00b6, 0x00c9, 0x00d1, 0x00db, 0x00e2, 0x00ee, 0x00f7, + 0x00fe, 0x0105, 0x010a, 0x011b, 0x0122, 0x0128, 0x012f, 0x0151, + 0x015a, 0x0161, 0x0167, 0x0171, 0x0179, 0x0185, 0x018b, 0x0191, + 0x019c, 0x01aa, 0x01c8, 0x01d9, 0x01e0, 0x01ef, 0x01f9, 0x01fe, + 0x0206, 0x020a, 0x0212, 0x0220, 0x022a, 0x022e, 0x0237, 0x023f, + 0x0247, 0x024d, 0x0255, 0x025d, 0x0269, 0x0271, 0x0278, 0x0280, + // Entry 40 - 7F + 0x0299, 0x02a1, 0x02b1, 0x02b8, 0x02bf, 0x02c6, 0x02d0, 0x02d7, + 0x02de, 0x02e6, 0x02fb, 0x02fb, 0x0302, 0x0306, 0x0315, 0x0331, + 0x033b, 0x0343, 0x0348, 0x0356, 0x035d, 0x0365, 0x0372, 0x037a, + 0x037f, 0x0388, 0x0391, 0x0397, 0x039d, 0x03a7, 0x03b8, 0x03c3, + 0x03eb, 0x03f4, 0x03f8, 0x0405, 0x040b, 0x0417, 0x0437, 0x043f, + 0x0447, 0x044c, 0x0452, 0x0460, 0x046a, 0x0470, 0x0476, 0x0481, + 0x0487, 0x04b3, 0x04b7, 0x04bb, 0x04c1, 0x04c8, 0x04ce, 0x04d5, + 0x04db, 0x04e0, 0x04e5, 0x04f0, 0x04f8, 0x0500, 0x0509, 0x051d, + // Entry 80 - BF + 0x0526, 0x052e, 0x0534, 0x0540, 0x054a, 0x054e, 0x0555, 0x0560, + 0x056d, 0x0576, 0x057d, 0x0584, 0x058b, 0x0595, 0x059c, 0x05a2, + 0x05a9, 0x05af, 0x05b6, 0x05c0, 0x05cc, 0x05d6, 0x05e4, 0x05ee, + 0x05f2, 0x0601, 0x060a, 0x0613, 0x0621, 0x062b, 0x0636, 0x0640, + 0x0645, 0x064e, 0x0658, 0x065e, 0x0664, 0x066c, 0x0676, 0x067d, + 0x068a, 0x068f, 0x069d, 0x06a4, 0x06ad, 0x06b4, 0x06b9, 0x06be, + 0x06c3, 0x06c7, 0x06d2, 0x06d6, 0x06dc, 0x06e0, 0x06f1, 0x0700, + 0x070c, 0x0714, 0x0719, 0x0731, 0x0739, 0x0744, 0x0760, 0x0768, + // Entry C0 - FF + 0x076d, 0x0775, 0x077a, 0x0787, 0x078f, 0x0798, 0x079f, 0x07a6, + 0x07ac, 0x07b9, 0x07c6, 0x07d2, 0x07d7, 0x07de, 0x07e7, 0x07f1, + 0x07fa, 0x080f, 0x0818, 0x0824, 0x082e, 0x0835, 0x083c, 0x0843, + 0x084b, 0x0862, 0x086d, 0x0879, 0x087f, 0x0888, 0x0898, 0x08ae, + 0x08b3, 0x08e5, 0x08e9, 0x08f1, 0x08fd, 0x0904, 0x090f, 0x091b, + 0x0923, 0x0928, 0x092f, 0x0941, 0x0947, 0x094d, 0x0955, 0x095c, + 0x0962, 0x097e, 0x098f, 0x0992, 0x0999, 0x09a3, 0x09b0, 0x09cd, + 0x09d6, 0x09ec, 0x0a05, 0x0a0c, 0x0a13, 0x0a23, 0x0a28, 0x0a2e, + // Entry 100 - 13F + 0x0a33, 0x0a3a, 0x0a43, 0x0a49, 0x0a51, 0x0a5f, 0x0a65, 0x0a6b, + 0x0a76, 0x0a80, 0x0a88, 0x0a92, 0x0a9f, 0x0aa9, 0x0ab3, 0x0ac0, + 0x0ad2, 0x0ad9, 0x0aed, 0x0af5, 0x0afe, 0x0b06, 0x0b12, 0x0b1b, + 0x0b27, 0x0b31, 0x0b3c, 0x0b46, 0x0b4b, 0x0b57, 0x0b60, 0x0b66, + 0x0b70, 0x0b7a, 0x0b84, 0x0b90, +} // Size: 608 bytes + +const deRegionStr string = "" + // Size: 3086 bytes + "AscensionAndorraVereinigte Arabische EmirateAfghanistanAntigua und Barbu" + + "daAnguillaAlbanienArmenienAngolaAntarktisArgentinienAmerikanisch-SamoaÖs" + + "terreichAustralienArubaÅlandinselnAserbaidschanBosnien und HerzegowinaBa" + + "rbadosBangladeschBelgienBurkina FasoBulgarienBahrainBurundiBeninSt. Bart" + + "hélemyBermudaBrunei DarussalamBolivienBonaire, Sint Eustatius und SabaBr" + + "asilienBahamasBhutanBouvetinselBotsuanaBelarusBelizeKanadaKokosinselnKon" + + "go-KinshasaZentralafrikanische RepublikKongo-BrazzavilleSchweizCôte d’Iv" + + "oireCookinselnChileKamerunChinaKolumbienClipperton-InselCosta RicaKubaCa" + + "bo VerdeCuraçaoWeihnachtsinselZypernTschechische RepublikDeutschlandDieg" + + "o GarciaDschibutiDänemarkDominicaDominikanische RepublikAlgerienCeuta un" + + "d MelillaEcuadorEstlandÄgyptenWestsaharaEritreaSpanienÄthiopienEuropäisc" + + "he UnionFinnlandFidschiFalklandinselnMikronesienFäröerFrankreichGabunVer" + + "einigtes KönigreichGrenadaGeorgienFranzösisch-GuayanaGuernseyGhanaGibral" + + "tarGrönlandGambiaGuineaGuadeloupeÄquatorialguineaGriechenlandSüdgeorgien" + + " und die Südlichen SandwichinselnGuatemalaGuamGuinea-BissauGuyanaSonderv" + + "erwaltungszone HongkongHeard und McDonaldinselnHondurasKroatienHaitiUnga" + + "rnKanarische InselnIndonesienIrlandIsraelIsle of ManIndienBritisches Ter" + + "ritorium im Indischen OzeanIrakIranIslandItalienJerseyJamaikaJordanienJa" + + "panKeniaKirgisistanKambodschaKiribatiKomorenSt. Kitts und NevisNordkorea" + + "SüdkoreaKuwaitKaimaninselnKasachstanLaosLibanonSt. LuciaLiechtensteinSri" + + " LankaLiberiaLesothoLitauenLuxemburgLettlandLibyenMarokkoMonacoRepublik " + + "MoldauMontenegroSt. MartinMadagaskarMarshallinselnMazedonienMaliMyanmarM" + + "ongoleiSonderverwaltungsregion MacauNördliche MarianenMartiniqueMauretan" + + "ienMontserratMaltaMauritiusMaledivenMalawiMexikoMalaysiaMosambikNamibiaN" + + "eukaledonienNigerNorfolkinselNigeriaNicaraguaNiederlandeNorwegenNepalNau" + + "ruNiueNeuseelandOmanPanamaPeruFranzösisch-PolynesienPapua-NeuguineaPhili" + + "ppinenPakistanPolenSt. Pierre und MiquelonPitcairninselnPuerto RicoPaläs" + + "tinensische AutonomiegebietePortugalPalauParaguayKatarÄußeres OzeanienRé" + + "unionRumänienSerbienRusslandRuandaSaudi-ArabienSalomonenSeychellenSudanS" + + "chwedenSingapurSt. HelenaSlowenienSpitzbergenSlowakeiSierra LeoneSan Mar" + + "inoSenegalSomaliaSurinameSüdsudanSão Tomé und PríncipeEl SalvadorSint Ma" + + "artenSyrienSwasilandTristan da CunhaTurks- und CaicosinselnTschadFranzös" + + "ische Süd- und AntarktisgebieteTogoThailandTadschikistanTokelauOsttimorT" + + "urkmenistanTunesienTongaTürkeiTrinidad und TobagoTuvaluTaiwanTansaniaUkr" + + "aineUgandaAmerikanische ÜberseeinselnVereinte NationenVereinigte Staaten" + + "UruguayUsbekistanVatikanstadtSt. Vincent und die GrenadinenVenezuelaBrit" + + "ische JungferninselnAmerikanische JungferninselnVietnamVanuatuWallis und" + + " FutunaSamoaKosovoJemenMayotteSüdafrikaSambiaSimbabweUnbekannte RegionWe" + + "ltAfrikaNordamerikaSüdamerikaOzeanienWestafrikaMittelamerikaOstafrikaNor" + + "dafrikaZentralafrikaSüdliches AfrikaAmerikaNördliches AmerikaKaribikOsta" + + "sienSüdasienSüdostasienSüdeuropaAustralasienMelanesienMikronesisches Ins" + + "elgebietPolynesienAsienZentralasienWestasienEuropaOsteuropaNordeuropaWes" + + "teuropaLateinamerika" + +var deRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002c, 0x0037, 0x004a, 0x0052, 0x005a, + 0x0062, 0x0068, 0x0071, 0x007c, 0x008e, 0x0099, 0x00a3, 0x00a8, + 0x00b4, 0x00c1, 0x00d8, 0x00e0, 0x00eb, 0x00f2, 0x00fe, 0x0107, + 0x010e, 0x0115, 0x011a, 0x0129, 0x0130, 0x0141, 0x0149, 0x0169, + 0x0172, 0x0179, 0x017f, 0x018a, 0x0192, 0x0199, 0x019f, 0x01a5, + 0x01b0, 0x01be, 0x01da, 0x01eb, 0x01f2, 0x0202, 0x020c, 0x0211, + 0x0218, 0x021d, 0x0226, 0x0236, 0x0240, 0x0244, 0x024e, 0x0256, + 0x0265, 0x026b, 0x0280, 0x028b, 0x0297, 0x02a0, 0x02a9, 0x02b1, + // Entry 40 - 7F + 0x02c8, 0x02d0, 0x02e1, 0x02e8, 0x02ef, 0x02f7, 0x0301, 0x0308, + 0x030f, 0x0319, 0x032b, 0x032b, 0x0333, 0x033a, 0x0348, 0x0353, + 0x035b, 0x0365, 0x036a, 0x0381, 0x0388, 0x0390, 0x03a4, 0x03ac, + 0x03b1, 0x03ba, 0x03c3, 0x03c9, 0x03cf, 0x03d9, 0x03ea, 0x03f6, + 0x0424, 0x042d, 0x0431, 0x043e, 0x0444, 0x0462, 0x047a, 0x0482, + 0x048a, 0x048f, 0x0495, 0x04a6, 0x04b0, 0x04b6, 0x04bc, 0x04c7, + 0x04cd, 0x04f6, 0x04fa, 0x04fe, 0x0504, 0x050b, 0x0511, 0x0518, + 0x0521, 0x0526, 0x052b, 0x0536, 0x0540, 0x0548, 0x054f, 0x0562, + // Entry 80 - BF + 0x056b, 0x0574, 0x057a, 0x0586, 0x0590, 0x0594, 0x059b, 0x05a4, + 0x05b1, 0x05ba, 0x05c1, 0x05c8, 0x05cf, 0x05d8, 0x05e0, 0x05e6, + 0x05ed, 0x05f3, 0x0602, 0x060c, 0x0616, 0x0620, 0x062e, 0x0638, + 0x063c, 0x0643, 0x064b, 0x0668, 0x067b, 0x0685, 0x0690, 0x069a, + 0x069f, 0x06a8, 0x06b1, 0x06b7, 0x06bd, 0x06c5, 0x06cd, 0x06d4, + 0x06e1, 0x06e6, 0x06f2, 0x06f9, 0x0702, 0x070d, 0x0715, 0x071a, + 0x071f, 0x0723, 0x072d, 0x0731, 0x0737, 0x073b, 0x0752, 0x0761, + 0x076c, 0x0774, 0x0779, 0x0790, 0x079e, 0x07a9, 0x07cb, 0x07d3, + // Entry C0 - FF + 0x07d8, 0x07e0, 0x07e5, 0x07f7, 0x07ff, 0x0808, 0x080f, 0x0817, + 0x081d, 0x082a, 0x0833, 0x083d, 0x0842, 0x084a, 0x0852, 0x085c, + 0x0865, 0x0870, 0x0878, 0x0884, 0x088e, 0x0895, 0x089c, 0x08a4, + 0x08ad, 0x08c5, 0x08d0, 0x08dc, 0x08e2, 0x08eb, 0x08fb, 0x0912, + 0x0918, 0x0940, 0x0944, 0x094c, 0x0959, 0x0960, 0x0968, 0x0974, + 0x097c, 0x0981, 0x0988, 0x099b, 0x09a1, 0x09a7, 0x09af, 0x09b6, + 0x09bc, 0x09d8, 0x09e9, 0x09fb, 0x0a02, 0x0a0c, 0x0a18, 0x0a36, + 0x0a3f, 0x0a57, 0x0a73, 0x0a7a, 0x0a81, 0x0a92, 0x0a97, 0x0a9d, + // Entry 100 - 13F + 0x0aa2, 0x0aa9, 0x0ab3, 0x0ab9, 0x0ac1, 0x0ad2, 0x0ad6, 0x0adc, + 0x0ae7, 0x0af2, 0x0afa, 0x0b04, 0x0b11, 0x0b1a, 0x0b24, 0x0b31, + 0x0b42, 0x0b49, 0x0b5c, 0x0b63, 0x0b6b, 0x0b74, 0x0b80, 0x0b8a, + 0x0b96, 0x0ba0, 0x0bba, 0x0bc4, 0x0bc9, 0x0bd5, 0x0bde, 0x0be4, + 0x0bed, 0x0bf7, 0x0c01, 0x0c0e, +} // Size: 608 bytes + +const elRegionStr string = "" + // Size: 6246 bytes + "Νήσος ΑσενσιόνΑνδόραΗνωμένα Αραβικά ΕμιράταΑφγανιστάνΑντίγκουα και Μπαρμ" + + "πούνταΑνγκουίλαΑλβανίαΑρμενίαΑνγκόλαΑνταρκτικήΑργεντινήΑμερικανική Σαμό" + + "αΑυστρίαΑυστραλίαΑρούμπαΝήσοι ΌλαντΑζερμπαϊτζάνΒοσνία - ΕρζεγοβίνηΜπαρμ" + + "πάντοςΜπανγκλαντέςΒέλγιοΜπουρκίνα ΦάσοΒουλγαρίαΜπαχρέινΜπουρούντιΜπενίν" + + "Άγιος ΒαρθολομαίοςΒερμούδεςΜπρουνέιΒολιβίαΟλλανδία ΚαραϊβικήςΒραζιλίαΜπ" + + "αχάμεςΜπουτάνΝήσος ΜπουβέΜποτσουάναΛευκορωσίαΜπελίζΚαναδάςΝήσοι Κόκος (" + + "Κίλινγκ)Κονγκό - ΚινσάσαΚεντροαφρικανική ΔημοκρατίαΚονγκό - ΜπραζαβίλΕλ" + + "βετίαΑκτή ΕλεφαντοστούΝήσοι ΚουκΧιλήΚαμερούνΚίναΚολομβίαΝήσος Κλίπερτον" + + "Κόστα ΡίκαΚούβαΠράσινο ΑκρωτήριοΚουρασάοΝήσος των ΧριστουγέννωνΚύπροςΤσ" + + "εχική ΔημοκρατίαΓερμανίαΝτιέγκο ΓκαρσίαΤζιμπουτίΔανίαΝτομίνικαΔομινικαν" + + "ή ΔημοκρατίαΑλγερίαΘεούτα και ΜελίλαΕκουαδόρΕσθονίαΑίγυπτοςΔυτική Σαχάρ" + + "αΕρυθραίαΙσπανίαΑιθιοπίαΕυρωπαϊκή ΈνωσηΦινλανδίαΦίτζιΝήσοι ΦόκλαντΜικρο" + + "νησίαΝήσοι ΦερόεςΓαλλίαΓκαμπόνΗνωμένο ΒασίλειοΓρενάδαΓεωργίαΓαλλική Γου" + + "ιάναΓκέρνζιΓκάναΓιβραλτάρΓροιλανδίαΓκάμπιαΓουινέαΓουαδελούπηΙσημερινή Γ" + + "ουινέαΕλλάδαΝήσοι Νότια Γεωργία και Νότιες ΣάντουιτςΓουατεμάλαΓκουάμΓου" + + "ινέα ΜπισάουΓουιάναΧονγκ Κονγκ ΕΔΠ ΚίναςΝήσοι Χερντ και ΜακντόναλντΟνδο" + + "ύραΚροατίαΑϊτήΟυγγαρίαΚανάριοι ΝήσοιΙνδονησίαΙρλανδίαΙσραήλΝήσος ΜανΙνδ" + + "ίαΒρετανικά Εδάφη Ινδικού ΩκεανούΙράκΙράνΙσλανδίαΙταλίαΤζέρζιΤζαμάικαΙο" + + "ρδανίαΙαπωνίαΚένυαΚιργιστάνΚαμπότζηΚιριμπάτιΚομόρεςΆγιος Χριστόφορος κα" + + "ι ΝέβιςΒόρεια ΚορέαΝότια ΚορέαΚουβέιτΝήσοι ΚάιμανΚαζακστάνΛάοςΛίβανοςΑγ" + + "ία ΛουκίαΛιχτενστάινΣρι ΛάνκαΛιβερίαΛεσότοΛιθουανίαΛουξεμβούργοΛετονίαΛ" + + "ιβύηΜαρόκοΜονακόΜολδαβίαΜαυροβούνιοΆγιος Μαρτίνος (Γαλλικό τμήμα)Μαδαγα" + + "σκάρηΝήσοι ΜάρσαλΠρώην Γιουγκοσλαβική Δημοκρατία της ΜακεδονίαςΜάλιΜιαν" + + "μάρ/ΒιρμανίαΜογγολίαΜακάο ΕΔΠ ΚίναςΝήσοι Βόρειες ΜαριάνεςΜαρτινίκαΜαυρι" + + "τανίαΜονσεράτΜάλταΜαυρίκιοςΜαλδίβεςΜαλάουιΜεξικόΜαλαισίαΜοζαμβίκηΝαμίμπ" + + "ιαΝέα ΚαληδονίαΝίγηραςΝήσος ΝόρφολκΝιγηρίαΝικαράγουαΟλλανδίαΝορβηγίαΝεπ" + + "άλΝαουρούΝιούεΝέα ΖηλανδίαΟμάνΠαναμάςΠερούΓαλλική ΠολυνησίαΠαπούα Νέα Γ" + + "ουινέαΦιλιππίνεςΠακιστάνΠολωνίαΣεν Πιερ και ΜικελόνΝήσοι ΠίτκερνΠουέρτο" + + " ΡίκοΠαλαιστινιακά ΕδάφηΠορτογαλίαΠαλάουΠαραγουάηΚατάρΠεριφερειακή Ωκεαν" + + "ίαΡεϊνιόνΡουμανίαΣερβίαΡωσίαΡουάνταΣαουδική ΑραβίαΝήσοι ΣολομώντοςΣεϋχέ" + + "λλεςΣουδάνΣουηδίαΣιγκαπούρηΑγία ΕλένηΣλοβενίαΣβάλμπαρντ και Γιαν Μαγιέν" + + "ΣλοβακίαΣιέρα ΛεόνεΆγιος ΜαρίνοςΣενεγάληΣομαλίαΣουρινάμΝότιο ΣουδάνΣάο " + + "Τομέ και ΠρίνσιπεΕλ ΣαλβαδόρΆγιος Μαρτίνος (Ολλανδικό τμήμα)ΣυρίαΣουαζι" + + "λάνδηΤριστάν ντα ΚούνιαΝήσοι Τερκ και ΚάικοςΤσαντΓαλλικές περιοχές του " + + "νοτίου ημισφαιρίουΤόγκοΤαϊλάνδηΤατζικιστάνΤοκελάουΤιμόρ-ΛέστεΤουρκμενισ" + + "τάνΤυνησίαΤόνγκαΤουρκίαΤρινιντάντ και ΤομπάγκοΤουβαλούΤαϊβάνΤανζανίαΟυκ" + + "ρανίαΟυγκάνταΑπομακρυσμένες Νησίδες ΗΠΑΗνωμένα ΈθνηΗνωμένες ΠολιτείεςΟυ" + + "ρουγουάηΟυζμπεκιστάνΒατικανόΆγιος Βικέντιος και ΓρεναδίνεςΒενεζουέλαΒρε" + + "τανικές Παρθένοι ΝήσοιΑμερικανικές Παρθένοι ΝήσοιΒιετνάμΒανουάτουΟυάλις" + + " και ΦουτούναΣαμόαΚόσοβοΥεμένηΜαγιότΝότια ΑφρικήΖάμπιαΖιμπάμπουεΆγνωστη " + + "περιοχήΚόσμοςΑφρικήΒόρεια ΑμερικήΝότια ΑμερικήΩκεανίαΔυτική ΑφρικήΚεντρ" + + "ική ΑμερικήΑνατολική ΑφρικήΒόρεια ΑφρικήΜέση ΑφρικήΝότιος ΑφρικήΑμερική" + + "Βόρειος ΑμερικήΚαραϊβικήΑνατολική ΑσίαΝότια ΑσίαΝοτιοανατολική ΑσίαΝότι" + + "α ΕυρώπηΑυστραλασίαΜελανησίαΠεριοχή ΜικρονησίαςΠολυνησίαΑσίαΚεντρική Ασ" + + "ίαΔυτική ΑσίαΕυρώπηΑνατολική ΕυρώπηΒόρεια ΕυρώπηΔυτική ΕυρώπηΛατινική Α" + + "μερική" + +var elRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001b, 0x0027, 0x0053, 0x0067, 0x0097, 0x00a9, 0x00b7, + 0x00c5, 0x00d3, 0x00e7, 0x00f9, 0x011a, 0x0128, 0x013a, 0x0148, + 0x015d, 0x0175, 0x0198, 0x01ae, 0x01c6, 0x01d2, 0x01ed, 0x01ff, + 0x020f, 0x0223, 0x022f, 0x0252, 0x0264, 0x0274, 0x0282, 0x02a7, + 0x02b7, 0x02c7, 0x02d5, 0x02ec, 0x0300, 0x0314, 0x0320, 0x032e, + 0x0354, 0x0371, 0x03a6, 0x03c7, 0x03d5, 0x03f6, 0x0409, 0x0411, + 0x0421, 0x0429, 0x0439, 0x0456, 0x0469, 0x0473, 0x0494, 0x04a4, + 0x04d0, 0x04dc, 0x04ff, 0x050f, 0x052c, 0x053e, 0x0548, 0x055a, + // Entry 40 - 7F + 0x0583, 0x0591, 0x05b1, 0x05c1, 0x05cf, 0x05df, 0x05f8, 0x0608, + 0x0616, 0x0626, 0x0643, 0x0643, 0x0655, 0x065f, 0x0678, 0x068c, + 0x06a3, 0x06af, 0x06bd, 0x06dc, 0x06ea, 0x06f8, 0x0715, 0x0723, + 0x072d, 0x073f, 0x0753, 0x0761, 0x076f, 0x0785, 0x07a6, 0x07b2, + 0x07fd, 0x0811, 0x081d, 0x083a, 0x0848, 0x086f, 0x08a2, 0x08b0, + 0x08be, 0x08c6, 0x08d6, 0x08f1, 0x0903, 0x0913, 0x091f, 0x0930, + 0x093a, 0x0975, 0x097d, 0x0985, 0x0995, 0x09a1, 0x09ad, 0x09bd, + 0x09cd, 0x09db, 0x09e5, 0x09f7, 0x0a07, 0x0a19, 0x0a27, 0x0a5a, + // Entry 80 - BF + 0x0a71, 0x0a86, 0x0a94, 0x0aab, 0x0abd, 0x0ac5, 0x0ad3, 0x0ae8, + 0x0afe, 0x0b0f, 0x0b1d, 0x0b29, 0x0b3b, 0x0b53, 0x0b61, 0x0b6b, + 0x0b77, 0x0b83, 0x0b93, 0x0ba9, 0x0be0, 0x0bf6, 0x0c0d, 0x0c65, + 0x0c6d, 0x0c8c, 0x0c9c, 0x0cb8, 0x0ce2, 0x0cf4, 0x0d08, 0x0d18, + 0x0d22, 0x0d34, 0x0d44, 0x0d52, 0x0d5e, 0x0d6e, 0x0d80, 0x0d90, + 0x0da9, 0x0db7, 0x0dd0, 0x0dde, 0x0df2, 0x0e02, 0x0e12, 0x0e1c, + 0x0e2a, 0x0e34, 0x0e4b, 0x0e53, 0x0e61, 0x0e6b, 0x0e8c, 0x0eae, + 0x0ec2, 0x0ed2, 0x0ee0, 0x0f05, 0x0f1e, 0x0f35, 0x0f5a, 0x0f6e, + // Entry C0 - FF + 0x0f7a, 0x0f8c, 0x0f96, 0x0fbd, 0x0fcb, 0x0fdb, 0x0fe7, 0x0ff1, + 0x0fff, 0x101c, 0x103b, 0x104d, 0x1059, 0x1067, 0x107b, 0x108e, + 0x109e, 0x10cf, 0x10df, 0x10f4, 0x110d, 0x111d, 0x112b, 0x113b, + 0x1152, 0x1179, 0x118e, 0x11c9, 0x11d3, 0x11e9, 0x120b, 0x1232, + 0x123c, 0x1288, 0x1292, 0x12a2, 0x12b8, 0x12c8, 0x12dd, 0x12f7, + 0x1305, 0x1311, 0x131f, 0x134b, 0x135b, 0x1367, 0x1377, 0x1387, + 0x1397, 0x13c9, 0x13e0, 0x1403, 0x1417, 0x142f, 0x143f, 0x1478, + 0x148c, 0x14bc, 0x14f0, 0x14fe, 0x1510, 0x1534, 0x153e, 0x154a, + // Entry 100 - 13F + 0x1556, 0x1562, 0x1579, 0x1585, 0x1599, 0x15b6, 0x15c2, 0x15ce, + 0x15e9, 0x1602, 0x1610, 0x1629, 0x1648, 0x1667, 0x1680, 0x1695, + 0x16ae, 0x16bc, 0x16d9, 0x16eb, 0x1706, 0x1719, 0x173e, 0x1755, + 0x176b, 0x177d, 0x17a2, 0x17b4, 0x17bc, 0x17d5, 0x17ea, 0x17f6, + 0x1815, 0x182e, 0x1847, 0x1866, +} // Size: 608 bytes + +const enRegionStr string = "" + // Size: 2942 bytes + "Ascension IslandAndorraUnited Arab EmiratesAfghanistanAntigua & BarbudaA" + + "nguillaAlbaniaArmeniaAngolaAntarcticaArgentinaAmerican SamoaAustriaAustr" + + "aliaArubaÅland IslandsAzerbaijanBosnia & HerzegovinaBarbadosBangladeshBe" + + "lgiumBurkina FasoBulgariaBahrainBurundiBeninSt. BarthélemyBermudaBruneiB" + + "oliviaCaribbean NetherlandsBrazilBahamasBhutanBouvet IslandBotswanaBelar" + + "usBelizeCanadaCocos (Keeling) IslandsCongo - KinshasaCentral African Rep" + + "ublicCongo - BrazzavilleSwitzerlandCôte d’IvoireCook IslandsChileCameroo" + + "nChinaColombiaClipperton IslandCosta RicaCubaCape VerdeCuraçaoChristmas " + + "IslandCyprusCzech RepublicGermanyDiego GarciaDjiboutiDenmarkDominicaDomi" + + "nican RepublicAlgeriaCeuta & MelillaEcuadorEstoniaEgyptWestern SaharaEri" + + "treaSpainEthiopiaEuropean UnionEurozoneFinlandFijiFalkland IslandsMicron" + + "esiaFaroe IslandsFranceGabonUnited KingdomGrenadaGeorgiaFrench GuianaGue" + + "rnseyGhanaGibraltarGreenlandGambiaGuineaGuadeloupeEquatorial GuineaGreec" + + "eSouth Georgia & South Sandwich IslandsGuatemalaGuamGuinea-BissauGuyanaH" + + "ong Kong SAR ChinaHeard & McDonald IslandsHondurasCroatiaHaitiHungaryCan" + + "ary IslandsIndonesiaIrelandIsraelIsle of ManIndiaBritish Indian Ocean Te" + + "rritoryIraqIranIcelandItalyJerseyJamaicaJordanJapanKenyaKyrgyzstanCambod" + + "iaKiribatiComorosSt. Kitts & NevisNorth KoreaSouth KoreaKuwaitCayman Isl" + + "andsKazakhstanLaosLebanonSt. LuciaLiechtensteinSri LankaLiberiaLesothoLi" + + "thuaniaLuxembourgLatviaLibyaMoroccoMonacoMoldovaMontenegroSt. MartinMada" + + "gascarMarshall IslandsMacedoniaMaliMyanmar (Burma)MongoliaMacau SAR Chin" + + "aNorthern Mariana IslandsMartiniqueMauritaniaMontserratMaltaMauritiusMal" + + "divesMalawiMexicoMalaysiaMozambiqueNamibiaNew CaledoniaNigerNorfolk Isla" + + "ndNigeriaNicaraguaNetherlandsNorwayNepalNauruNiueNew ZealandOmanPanamaPe" + + "ruFrench PolynesiaPapua New GuineaPhilippinesPakistanPolandSt. Pierre & " + + "MiquelonPitcairn IslandsPuerto RicoPalestinian TerritoriesPortugalPalauP" + + "araguayQatarOutlying OceaniaRéunionRomaniaSerbiaRussiaRwandaSaudi Arabia" + + "Solomon IslandsSeychellesSudanSwedenSingaporeSt. HelenaSloveniaSvalbard " + + "& Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinameSouth Sud" + + "anSão Tomé & PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da Cun" + + "haTurks & Caicos IslandsChadFrench Southern TerritoriesTogoThailandTajik" + + "istanTokelauTimor-LesteTurkmenistanTunisiaTongaTurkeyTrinidad & TobagoTu" + + "valuTaiwanTanzaniaUkraineUgandaU.S. Outlying IslandsUnited NationsUnited" + + " StatesUruguayUzbekistanVatican CitySt. Vincent & GrenadinesVenezuelaBri" + + "tish Virgin IslandsU.S. Virgin IslandsVietnamVanuatuWallis & FutunaSamoa" + + "KosovoYemenMayotteSouth AfricaZambiaZimbabweUnknown RegionWorldAfricaNor" + + "th AmericaSouth AmericaOceaniaWestern AfricaCentral AmericaEastern Afric" + + "aNorthern AfricaMiddle AfricaSouthern AfricaAmericasNorthern AmericaCari" + + "bbeanEastern AsiaSouthern AsiaSoutheast AsiaSouthern EuropeAustralasiaMe" + + "lanesiaMicronesian RegionPolynesiaAsiaCentral AsiaWestern AsiaEuropeEast" + + "ern EuropeNorthern EuropeWestern EuropeLatin America" + +var enRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x002b, 0x0036, 0x0047, 0x004f, 0x0056, + 0x005d, 0x0063, 0x006d, 0x0076, 0x0084, 0x008b, 0x0094, 0x0099, + 0x00a7, 0x00b1, 0x00c5, 0x00cd, 0x00d7, 0x00de, 0x00ea, 0x00f2, + 0x00f9, 0x0100, 0x0105, 0x0114, 0x011b, 0x0121, 0x0128, 0x013d, + 0x0143, 0x014a, 0x0150, 0x015d, 0x0165, 0x016c, 0x0172, 0x0178, + 0x018f, 0x019f, 0x01b7, 0x01ca, 0x01d5, 0x01e5, 0x01f1, 0x01f6, + 0x01fe, 0x0203, 0x020b, 0x021c, 0x0226, 0x022a, 0x0234, 0x023c, + 0x024c, 0x0252, 0x0260, 0x0267, 0x0273, 0x027b, 0x0282, 0x028a, + // Entry 40 - 7F + 0x029c, 0x02a3, 0x02b2, 0x02b9, 0x02c0, 0x02c5, 0x02d3, 0x02da, + 0x02df, 0x02e7, 0x02f5, 0x02fd, 0x0304, 0x0308, 0x0318, 0x0322, + 0x032f, 0x0335, 0x033a, 0x0348, 0x034f, 0x0356, 0x0363, 0x036b, + 0x0370, 0x0379, 0x0382, 0x0388, 0x038e, 0x0398, 0x03a9, 0x03af, + 0x03d5, 0x03de, 0x03e2, 0x03ef, 0x03f5, 0x0408, 0x0420, 0x0428, + 0x042f, 0x0434, 0x043b, 0x0449, 0x0452, 0x0459, 0x045f, 0x046a, + 0x046f, 0x048d, 0x0491, 0x0495, 0x049c, 0x04a1, 0x04a7, 0x04ae, + 0x04b4, 0x04b9, 0x04be, 0x04c8, 0x04d0, 0x04d8, 0x04df, 0x04f0, + // Entry 80 - BF + 0x04fb, 0x0506, 0x050c, 0x051a, 0x0524, 0x0528, 0x052f, 0x0538, + 0x0545, 0x054e, 0x0555, 0x055c, 0x0565, 0x056f, 0x0575, 0x057a, + 0x0581, 0x0587, 0x058e, 0x0598, 0x05a2, 0x05ac, 0x05bc, 0x05c5, + 0x05c9, 0x05d8, 0x05e0, 0x05ef, 0x0607, 0x0611, 0x061b, 0x0625, + 0x062a, 0x0633, 0x063b, 0x0641, 0x0647, 0x064f, 0x0659, 0x0660, + 0x066d, 0x0672, 0x0680, 0x0687, 0x0690, 0x069b, 0x06a1, 0x06a6, + 0x06ab, 0x06af, 0x06ba, 0x06be, 0x06c4, 0x06c8, 0x06d8, 0x06e8, + 0x06f3, 0x06fb, 0x0701, 0x0716, 0x0726, 0x0731, 0x0748, 0x0750, + // Entry C0 - FF + 0x0755, 0x075d, 0x0762, 0x0772, 0x077a, 0x0781, 0x0787, 0x078d, + 0x0793, 0x079f, 0x07ae, 0x07b8, 0x07bd, 0x07c3, 0x07cc, 0x07d6, + 0x07de, 0x07f2, 0x07fa, 0x0806, 0x0810, 0x0817, 0x081e, 0x0826, + 0x0831, 0x0847, 0x0852, 0x085e, 0x0863, 0x086c, 0x087c, 0x0892, + 0x0896, 0x08b1, 0x08b5, 0x08bd, 0x08c7, 0x08ce, 0x08d9, 0x08e5, + 0x08ec, 0x08f1, 0x08f7, 0x0908, 0x090e, 0x0914, 0x091c, 0x0923, + 0x0929, 0x093e, 0x094c, 0x0959, 0x0960, 0x096a, 0x0976, 0x098e, + 0x0997, 0x09ad, 0x09c0, 0x09c7, 0x09ce, 0x09dd, 0x09e2, 0x09e8, + // Entry 100 - 13F + 0x09ed, 0x09f4, 0x0a00, 0x0a06, 0x0a0e, 0x0a1c, 0x0a21, 0x0a27, + 0x0a34, 0x0a41, 0x0a48, 0x0a56, 0x0a65, 0x0a73, 0x0a82, 0x0a8f, + 0x0a9e, 0x0aa6, 0x0ab6, 0x0abf, 0x0acb, 0x0ad8, 0x0ae6, 0x0af5, + 0x0b00, 0x0b09, 0x0b1b, 0x0b24, 0x0b28, 0x0b34, 0x0b40, 0x0b46, + 0x0b54, 0x0b63, 0x0b71, 0x0b7e, +} // Size: 608 bytes + +const esRegionStr string = "" + // Size: 3106 bytes + "Isla de la AscensiónAndorraEmiratos Árabes UnidosAfganistánAntigua y Bar" + + "budaAnguilaAlbaniaArmeniaAngolaAntártidaArgentinaSamoa AmericanaAustriaA" + + "ustraliaArubaIslas ÅlandAzerbaiyánBosnia-HerzegovinaBarbadosBangladésBél" + + "gicaBurkina FasoBulgariaBaréinBurundiBenínSan BartoloméBermudasBrunéiBol" + + "iviaCaribe neerlandésBrasilBahamasButánIsla BouvetBotsuanaBielorrusiaBel" + + "iceCanadáIslas CocosRepública Democrática del CongoRepública Centroafric" + + "anaRepública del CongoSuizaCôte d’IvoireIslas CookChileCamerúnChinaColom" + + "biaIsla ClippertonCosta RicaCubaCabo VerdeCurazaoIsla de NavidadChipreRe" + + "pública ChecaAlemaniaDiego GarcíaYibutiDinamarcaDominicaRepública Domini" + + "canaArgeliaCeuta y MelillaEcuadorEstoniaEgiptoSáhara OccidentalEritreaEs" + + "pañaEtiopíaUnión EuropeaFinlandiaFiyiIslas MalvinasMicronesiaIslas Feroe" + + "FranciaGabónReino UnidoGranadaGeorgiaGuayana FrancesaGuerneseyGhanaGibra" + + "ltarGroenlandiaGambiaGuineaGuadalupeGuinea EcuatorialGreciaIslas Georgia" + + " del Sur y Sandwich del SurGuatemalaGuamGuinea-BisáuGuyanaRAE de Hong Ko" + + "ng (China)Islas Heard y McDonaldHondurasCroaciaHaitíHungríaCanariasIndon" + + "esiaIrlandaIsraelIsla de ManIndiaTerritorio Británico del Océano ÍndicoI" + + "rakIránIslandiaItaliaJerseyJamaicaJordaniaJapónKeniaKirguistánCamboyaKir" + + "ibatiComorasSan Cristóbal y NievesCorea del NorteCorea del SurKuwaitIsla" + + "s CaimánKazajistánLaosLíbanoSanta LucíaLiechtensteinSri LankaLiberiaLeso" + + "toLituaniaLuxemburgoLetoniaLibiaMarruecosMónacoMoldaviaMontenegroSan Mar" + + "tínMadagascarIslas MarshallMacedoniaMaliMyanmar (Birmania)MongoliaRAE de" + + " Macao (China)Islas Marianas del NorteMartinicaMauritaniaMontserratMalta" + + "MauricioMaldivasMalauiMéxicoMalasiaMozambiqueNamibiaNueva CaledoniaNíger" + + "Isla NorfolkNigeriaNicaraguaPaíses BajosNoruegaNepalNauruNiueNueva Zelan" + + "daOmánPanamáPerúPolinesia FrancesaPapúa Nueva GuineaFilipinasPakistánPol" + + "oniaSan Pedro y MiquelónIslas PitcairnPuerto RicoTerritorios PalestinosP" + + "ortugalPalaosParaguayCatarTerritorios alejados de OceaníaReuniónRumaníaS" + + "erbiaRusiaRuandaArabia SaudíIslas SalomónSeychellesSudánSueciaSingapurSa" + + "nta ElenaEsloveniaSvalbard y Jan MayenEslovaquiaSierra LeonaSan MarinoSe" + + "negalSomaliaSurinamSudán del SurSanto Tomé y PríncipeEl SalvadorSint Maa" + + "rtenSiriaSuazilandiaTristán de AcuñaIslas Turcas y CaicosChadTerritorios" + + " Australes FrancesesTogoTailandiaTayikistánTokelauTimor-LesteTurkmenistá" + + "nTúnezTongaTurquíaTrinidad y TobagoTuvaluTaiwánTanzaniaUcraniaUgandaIsla" + + "s menores alejadas de EE. UU.Estados UnidosUruguayUzbekistánCiudad del V" + + "aticanoSan Vicente y las GranadinasVenezuelaIslas Vírgenes BritánicasIsl" + + "as Vírgenes de EE. UU.VietnamVanuatuWallis y FutunaSamoaKosovoYemenMayot" + + "teSudáfricaZambiaZimbabueRegión desconocidaMundoÁfricaAmérica del NorteS" + + "udaméricaOceaníaÁfrica occidentalCentroaméricaÁfrica orientalÁfrica sept" + + "entrionalÁfrica centralÁfrica meridionalAméricaNorteaméricaCaribeAsia or" + + "ientalAsia meridionalSudeste asiáticoEuropa meridionalAustralasiaMelanes" + + "iaRegión de MicronesiaPolinesiaAsiaAsia centralAsia occidentalEuropaEuro" + + "pa orientalEuropa septentrionalEuropa occidentalLatinoamérica" + +var esRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0015, 0x001c, 0x0033, 0x003e, 0x004f, 0x0056, 0x005d, + 0x0064, 0x006a, 0x0074, 0x007d, 0x008c, 0x0093, 0x009c, 0x00a1, + 0x00ad, 0x00b8, 0x00ca, 0x00d2, 0x00dc, 0x00e4, 0x00f0, 0x00f8, + 0x00ff, 0x0106, 0x010c, 0x011a, 0x0122, 0x0129, 0x0130, 0x0142, + 0x0148, 0x014f, 0x0155, 0x0160, 0x0168, 0x0173, 0x0179, 0x0180, + 0x018b, 0x01ac, 0x01c5, 0x01d9, 0x01de, 0x01ee, 0x01f8, 0x01fd, + 0x0205, 0x020a, 0x0212, 0x0221, 0x022b, 0x022f, 0x0239, 0x0240, + 0x024f, 0x0255, 0x0265, 0x026d, 0x027a, 0x0280, 0x0289, 0x0291, + // Entry 40 - 7F + 0x02a6, 0x02ad, 0x02bc, 0x02c3, 0x02ca, 0x02d0, 0x02e2, 0x02e9, + 0x02f0, 0x02f8, 0x0306, 0x0306, 0x030f, 0x0313, 0x0321, 0x032b, + 0x0336, 0x033d, 0x0343, 0x034e, 0x0355, 0x035c, 0x036c, 0x0375, + 0x037a, 0x0383, 0x038e, 0x0394, 0x039a, 0x03a3, 0x03b4, 0x03ba, + 0x03e2, 0x03eb, 0x03ef, 0x03fc, 0x0402, 0x041a, 0x0430, 0x0438, + 0x043f, 0x0445, 0x044d, 0x0455, 0x045e, 0x0465, 0x046b, 0x0476, + 0x047b, 0x04a4, 0x04a8, 0x04ad, 0x04b5, 0x04bb, 0x04c1, 0x04c8, + 0x04d0, 0x04d6, 0x04db, 0x04e6, 0x04ed, 0x04f5, 0x04fc, 0x0513, + // Entry 80 - BF + 0x0522, 0x052f, 0x0535, 0x0542, 0x054d, 0x0551, 0x0558, 0x0564, + 0x0571, 0x057a, 0x0581, 0x0587, 0x058f, 0x0599, 0x05a0, 0x05a5, + 0x05ae, 0x05b5, 0x05bd, 0x05c7, 0x05d2, 0x05dc, 0x05ea, 0x05f3, + 0x05f7, 0x0609, 0x0611, 0x0625, 0x063d, 0x0646, 0x0650, 0x065a, + 0x065f, 0x0667, 0x066f, 0x0675, 0x067c, 0x0683, 0x068d, 0x0694, + 0x06a3, 0x06a9, 0x06b5, 0x06bc, 0x06c5, 0x06d2, 0x06d9, 0x06de, + 0x06e3, 0x06e7, 0x06f4, 0x06f9, 0x0700, 0x0705, 0x0717, 0x072a, + 0x0733, 0x073c, 0x0743, 0x0758, 0x0766, 0x0771, 0x0787, 0x078f, + // Entry C0 - FF + 0x0795, 0x079d, 0x07a2, 0x07c2, 0x07ca, 0x07d2, 0x07d8, 0x07dd, + 0x07e3, 0x07f0, 0x07fe, 0x0808, 0x080e, 0x0814, 0x081c, 0x0827, + 0x0830, 0x0844, 0x084e, 0x085a, 0x0864, 0x086b, 0x0872, 0x0879, + 0x0887, 0x089e, 0x08a9, 0x08b5, 0x08ba, 0x08c5, 0x08d7, 0x08ec, + 0x08f0, 0x090f, 0x0913, 0x091c, 0x0927, 0x092e, 0x0939, 0x0946, + 0x094c, 0x0951, 0x0959, 0x096a, 0x0970, 0x0977, 0x097f, 0x0986, + 0x098c, 0x09ad, 0x09ad, 0x09bb, 0x09c2, 0x09cd, 0x09e0, 0x09fc, + 0x0a05, 0x0a20, 0x0a3a, 0x0a41, 0x0a48, 0x0a57, 0x0a5c, 0x0a62, + // Entry 100 - 13F + 0x0a67, 0x0a6e, 0x0a78, 0x0a7e, 0x0a86, 0x0a99, 0x0a9e, 0x0aa5, + 0x0ab7, 0x0ac2, 0x0aca, 0x0adc, 0x0aea, 0x0afa, 0x0b0f, 0x0b1e, + 0x0b30, 0x0b38, 0x0b45, 0x0b4b, 0x0b58, 0x0b67, 0x0b78, 0x0b89, + 0x0b94, 0x0b9d, 0x0bb2, 0x0bbb, 0x0bbf, 0x0bcb, 0x0bda, 0x0be0, + 0x0bef, 0x0c03, 0x0c14, 0x0c22, +} // Size: 608 bytes + +const es419RegionStr string = "" + // Size: 122 bytes + "Costa de MarfilIslas CanariasIslas UltramarinasTristán da CunhaTimor Ori" + + "entalIslas Ultramarinas de EE.UU.Asia sudoriental" + +var es419RegionIdx = []uint16{ // 279 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + // Entry 40 - 7F + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x000f, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + // Entry 80 - BF + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + // Entry C0 - FF + 0x001d, 0x001d, 0x001d, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0040, 0x0040, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + // Entry 100 - 13F + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x007a, +} // Size: 582 bytes + +const etRegionStr string = "" + // Size: 3011 bytes + "Ascensioni saarAndorraAraabia ÜhendemiraadidAfganistanAntigua ja Barbuda" + + "AnguillaAlbaaniaArmeeniaAngolaAntarktikaArgentinaAmeerika SamoaAustriaAu" + + "straaliaArubaAhvenamaaAserbaidžaanBosnia ja HertsegoviinaBarbadosBanglad" + + "eshBelgiaBurkina FasoBulgaariaBahreinBurundiBeninSaint BarthélemyBermuda" + + "BruneiBoliiviaHollandi Kariibi mere saaredBrasiiliaBahamaBhutanBouvet’ s" + + "aarBotswanaValgeveneBelizeKanadaKookossaaredKongo DVKesk-Aafrika Vabarii" + + "kKongo VabariikŠveitsCôte d’IvoireCooki saaredTšiiliKamerunHiinaColombia" + + "Clippertoni saarCosta RicaKuubaRoheneemesaaredCuraçaoJõulusaarKüprosTšeh" + + "hiSaksamaaDiego GarciaDjiboutiTaaniDominicaDominikaani VabariikAlžeeriaC" + + "euta ja MelillaEcuadorEestiEgiptusLääne-SaharaEritreaHispaaniaEtioopiaEu" + + "roopa LiitSoomeFidžiFalklandi saaredMikroneesiaFääri saaredPrantsusmaaGa" + + "bonSuurbritanniaGrenadaGruusiaPrantsuse GuajaanaGuernseyGhanaGibraltarGr" + + "öönimaaGambiaGuineaGuadeloupeEkvatoriaal-GuineaKreekaLõuna-Georgia ja L" + + "õuna-Sandwichi saaredGuatemalaGuamGuinea-BissauGuyanaHongkongi erihaldu" + + "spiirkondHeardi ja McDonaldi saaredHondurasHorvaatiaHaitiUngariKanaari s" + + "aaredIndoneesiaIirimaaIisraelMani saarIndiaBriti India ookeani alaIraakI" + + "raanIslandItaaliaJerseyJamaicaJordaaniaJaapanKeeniaKõrgõzstanKambodžaKir" + + "ibatiKomooridSaint Kitts ja NevisPõhja-KoreaLõuna-KoreaKuveitKaimanisaar" + + "edKasahstanLaosLiibanonSaint LuciaLiechtensteinSri LankaLibeeriaLesothoL" + + "eeduLuksemburgLätiLiibüaMarokoMonacoMoldovaMontenegroSaint-MartinMadagas" + + "karMarshalli SaaredMakedooniaMaliMyanmar (Birma)MongooliaMacau erihaldus" + + "piirkondPõhja-MariaanidMartiniqueMauritaaniaMontserratMaltaMauritiusMald" + + "iividMalawiMehhikoMalaisiaMosambiikNamiibiaUus-KaledooniaNigerNorfolkNig" + + "eeriaNicaraguaHollandNorraNepalNauruNiueUus-MeremaaOmaanPanamaPeruuPrant" + + "suse PolüneesiaPaapua Uus-GuineaFilipiinidPakistanPoolaSaint Pierre ja M" + + "iquelonPitcairni saaredPuerto RicoPalestiina aladPortugalBelauParaguayKa" + + "tarOkeaania hajasaaredRéunionRumeeniaSerbiaVenemaaRwandaSaudi AraabiaSaa" + + "lomoni SaaredSeišellidSudaanRootsiSingapurSaint HelenaSloveeniaSvalbard " + + "ja Jan MayenSlovakkiaSierra LeoneSan MarinoSenegalSomaaliaSurinameLõuna-" + + "SudaanSão Tomé ja PríncipeEl SalvadorSint MaartenSüüriaSvaasimaaTristan " + + "da CunhaTurks ja CaicosTšaadPrantsuse LõunaaladTogoTaiTadžikistanTokelau" + + "Ida-TimorTürkmenistanTuneesiaTongaTürgiTrinidad ja TobagoTuvaluTaiwanTan" + + "saaniaUkrainaUgandaÜhendriikide hajasaaredÜhendatud Rahvaste Organisatsi" + + "oonAmeerika ÜhendriigidUruguayUsbekistanVatikanSaint Vincent ja Grenadii" + + "nidVenezuelaBriti NeitsisaaredUSA NeitsisaaredVietnamVanuatuWallis ja Fu" + + "tunaSamoaKosovoJeemenMayotteLõuna-Aafrika VabariikSambiaZimbabweTundmatu" + + " piirkondmaailmAafrikaPõhja-AmeerikaLõuna-AmeerikaOkeaaniaLääne-AafrikaK" + + "esk-AmeerikaIda-AafrikaPõhja-AafrikaKesk-AafrikaLõuna-AafrikaAmeerikaAme" + + "erika põhjaosaKariibi piirkondIda-AasiaLõuna-AasiaKagu-AasiaLõuna-Euroop" + + "aAustralaasiaMelaneesiaMikroneesia (piirkond)PolüneesiaAasiaKesk-AasiaLä" + + "äne-AasiaEuroopaIda-EuroopaPõhja-EuroopaLääne-EuroopaLadina-Ameerika" + +var etRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0016, 0x002d, 0x0037, 0x0049, 0x0051, 0x0059, + 0x0061, 0x0067, 0x0071, 0x007a, 0x0088, 0x008f, 0x0099, 0x009e, + 0x00a7, 0x00b4, 0x00cb, 0x00d3, 0x00dd, 0x00e3, 0x00ef, 0x00f8, + 0x00ff, 0x0106, 0x010b, 0x011c, 0x0123, 0x0129, 0x0131, 0x014d, + 0x0156, 0x015c, 0x0162, 0x0170, 0x0178, 0x0181, 0x0187, 0x018d, + 0x0199, 0x01a1, 0x01b6, 0x01c4, 0x01cb, 0x01db, 0x01e7, 0x01ee, + 0x01f5, 0x01fa, 0x0202, 0x0212, 0x021c, 0x0221, 0x0230, 0x0238, + 0x0242, 0x0249, 0x0250, 0x0258, 0x0264, 0x026c, 0x0271, 0x0279, + // Entry 40 - 7F + 0x028d, 0x0296, 0x02a6, 0x02ad, 0x02b2, 0x02b9, 0x02c7, 0x02ce, + 0x02d7, 0x02df, 0x02eb, 0x02eb, 0x02f0, 0x02f6, 0x0306, 0x0311, + 0x031f, 0x032a, 0x032f, 0x033c, 0x0343, 0x034a, 0x035c, 0x0364, + 0x0369, 0x0372, 0x037d, 0x0383, 0x0389, 0x0393, 0x03a5, 0x03ab, + 0x03d4, 0x03dd, 0x03e1, 0x03ee, 0x03f4, 0x040f, 0x0429, 0x0431, + 0x043a, 0x043f, 0x0445, 0x0453, 0x045d, 0x0464, 0x046b, 0x0474, + 0x0479, 0x0490, 0x0495, 0x049a, 0x04a0, 0x04a7, 0x04ad, 0x04b4, + 0x04bd, 0x04c3, 0x04c9, 0x04d5, 0x04de, 0x04e6, 0x04ee, 0x0502, + // Entry 80 - BF + 0x050e, 0x051a, 0x0520, 0x052d, 0x0536, 0x053a, 0x0542, 0x054d, + 0x055a, 0x0563, 0x056b, 0x0572, 0x0577, 0x0581, 0x0586, 0x058d, + 0x0593, 0x0599, 0x05a0, 0x05aa, 0x05b6, 0x05c0, 0x05d0, 0x05da, + 0x05de, 0x05ed, 0x05f6, 0x060d, 0x061d, 0x0627, 0x0632, 0x063c, + 0x0641, 0x064a, 0x0653, 0x0659, 0x0660, 0x0668, 0x0671, 0x0679, + 0x0687, 0x068c, 0x0693, 0x069b, 0x06a4, 0x06ab, 0x06b0, 0x06b5, + 0x06ba, 0x06be, 0x06c9, 0x06ce, 0x06d4, 0x06d9, 0x06ee, 0x06ff, + 0x0709, 0x0711, 0x0716, 0x072e, 0x073e, 0x0749, 0x0758, 0x0760, + // Entry C0 - FF + 0x0765, 0x076d, 0x0772, 0x0785, 0x078d, 0x0795, 0x079b, 0x07a2, + 0x07a8, 0x07b5, 0x07c5, 0x07cf, 0x07d5, 0x07db, 0x07e3, 0x07ef, + 0x07f8, 0x080d, 0x0816, 0x0822, 0x082c, 0x0833, 0x083b, 0x0843, + 0x0850, 0x0867, 0x0872, 0x087e, 0x0886, 0x088f, 0x089f, 0x08ae, + 0x08b4, 0x08c8, 0x08cc, 0x08cf, 0x08db, 0x08e2, 0x08eb, 0x08f8, + 0x0900, 0x0905, 0x090b, 0x091d, 0x0923, 0x0929, 0x0932, 0x0939, + 0x093f, 0x0957, 0x0979, 0x098e, 0x0995, 0x099f, 0x09a6, 0x09c2, + 0x09cb, 0x09dd, 0x09ed, 0x09f4, 0x09fb, 0x0a0b, 0x0a10, 0x0a16, + // Entry 100 - 13F + 0x0a1c, 0x0a23, 0x0a3a, 0x0a40, 0x0a48, 0x0a59, 0x0a5f, 0x0a66, + 0x0a75, 0x0a84, 0x0a8c, 0x0a9b, 0x0aa8, 0x0ab3, 0x0ac1, 0x0acd, + 0x0adb, 0x0ae3, 0x0af5, 0x0b05, 0x0b0e, 0x0b1a, 0x0b24, 0x0b32, + 0x0b3e, 0x0b48, 0x0b5e, 0x0b69, 0x0b6e, 0x0b78, 0x0b85, 0x0b8c, + 0x0b97, 0x0ba5, 0x0bb4, 0x0bc3, +} // Size: 608 bytes + +const faRegionStr string = "" + // Size: 5004 bytes + "جزایر آسنسیونآندوراامارات متحدهٔ عربیافغانستانآنتیگوا و باربوداآنگویلاآل" + + "بانیارمنستانآنگولاجنوبگانآرژانتینساموآی امریکااتریشاسترالیاآروباجزایر آ" + + "لاندجمهوری آذربایجانبوسنی و هرزگوینباربادوسبنگلادشبلژیکبورکینافاسوبلغار" + + "ستانبحرینبوروندیبنینسن بارتلمیبرمودابرونئیبولیویجزایر کارائیب هلندبرزیل" + + "باهامابوتانجزیرهٔ بووهبوتسوانابلاروسبلیزکاناداجزایر کوکوسکنگو - کینشاسا" + + "جمهوری افریقای مرکزیکنگو - برازویلسوئیسساحل عاججزایر کوکشیلیکامرونچینکل" + + "مبیاجزایر کلیپرتونکاستاریکاکوباکیپ\u200cوردکوراسائوجزیرهٔ کریسمسقبرسجمه" + + "وری چکآلماندیه\u200cگو گارسیاجیبوتیدانمارکدومینیکاجمهوری دومینیکنالجزای" + + "رسبته و ملیلهاکوادوراستونیمصرصحرای غربیاریترهاسپانیااتیوپیاتحادیهٔ اروپ" + + "افنلاندفیجیجزایر فالکلندمیکرونزیجزایر فاروفرانسهگابنبریتانیاگرناداگرجست" + + "انگویان فرانسهگرنزیغناجبل\u200cالطارقگرینلندگامبیاگینهگوادلوپگینهٔ استو" + + "ایییونانجزایر جورجیای جنوبی و ساندویچ جنوبیگواتمالاگوامگینهٔ بیسائوگویا" + + "نهنگ\u200cکنگ، ناحیهٔ ویژهٔ حکومتی چینجزیرهٔ هرد و جزایر مک\u200cدونالد" + + "هندوراسکرواسیهائیتیمجارستانجزایر قناریاندونزیایرلنداسرائیلجزیرهٔ منهندق" + + "لمرو بریتانیا در اقیانوس هندعراقایرانایسلندایتالیاجرزیجامائیکااردنژاپنک" + + "نیاقرقیزستانکامبوجکیریباتیکوموروسنت کیتس و نویسکرهٔ شمالیکرهٔ جنوبیکویت" + + "جزایر کِیمنقزاقستانلائوسلبنانسنت لوسیالیختن\u200cاشتاینسری\u200cلانکالی" + + "بریالسوتولیتوانیلوکزامبورگلتونیلیبیمراکشموناکومولداویمونته\u200cنگروسنت" + + " مارتینماداگاسکارجزایر مارشالمقدونیهمالیمیانمار (برمه)مغولستانماکائو، نا" + + "حیهٔ ویژهٔ حکومتی چینجزایر ماریانای شمالیمارتینیکموریتانیمونت\u200cسرات" + + "مالتموریسمالدیومالاویمکزیکمالزیموزامبیکنامیبیاکالدونیای جدیدنیجرجزیرهٔ " + + "نورفولکنیجریهنیکاراگوئههلندنروژنپالنائورونیوئهنیوزیلندعمانپاناماپروپلی" + + "\u200cنزی فرانسهپاپوا گینهٔ نوفیلیپینپاکستانلهستانسن پیر و میکلنجزایر پی" + + "ت\u200cکرنپورتوریکوسرزمین\u200cهای فلسطینیپرتغالپالائوپاراگوئهقطربخش" + + "\u200cهای دورافتادهٔ اقیانوسیهرئونیونرومانیصربستانروسیهروانداعربستان سعو" + + "دیجزایر سلیمانسیشلسودانسوئدسنگاپورسنت هلناسلوونیاسوالبارد و جان\u200cما" + + "یناسلواکیسیرالئونسان\u200cمارینوسنگالسومالیسورینامسودان جنوبیسائوتومه و" + + " پرینسیپالسالوادورسنت مارتنسوریهسوازیلندتریستان دا کوناجزایر تورکس و کای" + + "کوسچادقلمروهای جنوبی فرانسهتوگوتایلندتاجیکستانتوکلائوتیمور-لستهترکمنستا" + + "نتونستونگاترکیهترینیداد و توباگوتووالوتایوانتانزانیااوکرایناوگانداجزایر" + + " دورافتادهٔ ایالات متحدهسازمان ملل متحدایالات متحدهاروگوئهازبکستانواتیکا" + + "نسنت وینسنت و گرنادینونزوئلاجزایر ویرجین بریتانیاجزایر ویرجین ایالات مت" + + "حدهویتناموانواتووالیس و فوتوناساموآکوزوویمنمایوتافریقای جنوبیزامبیازیمب" + + "ابوهناحیهٔ نامشخصجهانافریقاامریکای شمالیامریکای جنوبیاقیانوسیهغرب افریق" + + "اامریکای مرکزیشرق افریقاشمال افریقامرکز افریقاجنوب افریقاامریکاشمال امر" + + "یکاکارائیبشرق آسیاجنوب آسیاجنوب شرق آسیاجنوب اروپااسترالزیملانزیناحیهٔ " + + "میکرونزیپلی\u200cنزیآسیاآسیای مرکزیغرب آسیااروپاشرق اروپاشمال اروپاغرب " + + "اروپاامریکای لاتین" + +var faRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0019, 0x0025, 0x0047, 0x0059, 0x0079, 0x0087, 0x0093, + 0x00a3, 0x00af, 0x00bd, 0x00cd, 0x00e6, 0x00f0, 0x0100, 0x010a, + 0x011f, 0x013e, 0x015a, 0x016a, 0x0178, 0x0182, 0x0198, 0x01aa, + 0x01b4, 0x01c2, 0x01ca, 0x01dd, 0x01e9, 0x01f5, 0x0201, 0x0223, + 0x022d, 0x0239, 0x0243, 0x0258, 0x0268, 0x0274, 0x027c, 0x0288, + 0x029d, 0x02b6, 0x02dc, 0x02f5, 0x02ff, 0x030e, 0x031f, 0x0327, + 0x0333, 0x0339, 0x0345, 0x0360, 0x0372, 0x037a, 0x0389, 0x0399, + 0x03b2, 0x03ba, 0x03cb, 0x03d5, 0x03ef, 0x03fb, 0x0409, 0x0419, + // Entry 40 - 7F + 0x0436, 0x0444, 0x045a, 0x0468, 0x0474, 0x047a, 0x048d, 0x0499, + 0x04a7, 0x04b3, 0x04ce, 0x04ce, 0x04da, 0x04e2, 0x04fb, 0x050b, + 0x051e, 0x052a, 0x0532, 0x0542, 0x054e, 0x055c, 0x0573, 0x057d, + 0x0583, 0x0598, 0x05a6, 0x05b2, 0x05ba, 0x05c8, 0x05e1, 0x05eb, + 0x062c, 0x063c, 0x0644, 0x065b, 0x0665, 0x06a2, 0x06d7, 0x06e5, + 0x06f1, 0x06fd, 0x070d, 0x0722, 0x0730, 0x073c, 0x074a, 0x075b, + 0x0761, 0x0797, 0x079f, 0x07a9, 0x07b5, 0x07c3, 0x07cb, 0x07db, + 0x07e3, 0x07eb, 0x07f3, 0x0805, 0x0811, 0x0821, 0x082d, 0x0848, + // Entry 80 - BF + 0x085b, 0x086e, 0x0876, 0x088b, 0x089b, 0x08a5, 0x08af, 0x08c0, + 0x08d9, 0x08ec, 0x08f8, 0x0902, 0x0910, 0x0924, 0x092e, 0x0936, + 0x0940, 0x094c, 0x095a, 0x096f, 0x0982, 0x0996, 0x09ad, 0x09bb, + 0x09c3, 0x09dc, 0x09ec, 0x0a26, 0x0a4c, 0x0a5c, 0x0a6c, 0x0a7f, + 0x0a87, 0x0a91, 0x0a9d, 0x0aa9, 0x0ab3, 0x0abd, 0x0acd, 0x0adb, + 0x0af6, 0x0afe, 0x0b19, 0x0b25, 0x0b39, 0x0b41, 0x0b49, 0x0b51, + 0x0b5d, 0x0b67, 0x0b77, 0x0b7f, 0x0b8b, 0x0b91, 0x0bad, 0x0bc7, + 0x0bd5, 0x0be3, 0x0bef, 0x0c08, 0x0c22, 0x0c34, 0x0c58, 0x0c64, + // Entry C0 - FF + 0x0c70, 0x0c80, 0x0c86, 0x0cbd, 0x0ccb, 0x0cd7, 0x0ce5, 0x0cef, + 0x0cfb, 0x0d14, 0x0d2b, 0x0d33, 0x0d3d, 0x0d45, 0x0d53, 0x0d60, + 0x0d6e, 0x0d95, 0x0da3, 0x0db3, 0x0dc8, 0x0dd2, 0x0dde, 0x0dec, + 0x0e01, 0x0e23, 0x0e37, 0x0e48, 0x0e52, 0x0e62, 0x0e7e, 0x0ea3, + 0x0ea9, 0x0ed1, 0x0ed9, 0x0ee5, 0x0ef7, 0x0f05, 0x0f18, 0x0f2a, + 0x0f32, 0x0f3c, 0x0f46, 0x0f66, 0x0f72, 0x0f7e, 0x0f8e, 0x0f9c, + 0x0faa, 0x0fe1, 0x0ffd, 0x1014, 0x1022, 0x1032, 0x1040, 0x1065, + 0x1073, 0x109b, 0x10ca, 0x10d6, 0x10e4, 0x10fe, 0x1108, 0x1112, + // Entry 100 - 13F + 0x1118, 0x1122, 0x113b, 0x1147, 0x1157, 0x1170, 0x1178, 0x1184, + 0x119d, 0x11b6, 0x11c8, 0x11db, 0x11f4, 0x1207, 0x121c, 0x1231, + 0x1246, 0x1252, 0x1267, 0x1275, 0x1284, 0x1295, 0x12ad, 0x12c0, + 0x12d0, 0x12dc, 0x12f9, 0x1308, 0x1310, 0x1325, 0x1334, 0x133e, + 0x134f, 0x1362, 0x1373, 0x138c, +} // Size: 608 bytes + +const fiRegionStr string = "" + // Size: 3020 bytes + "Ascension-saariAndorraArabiemiirikunnatAfganistanAntigua ja BarbudaAngui" + + "llaAlbaniaArmeniaAngolaAntarktisArgentiinaAmerikan SamoaItävaltaAustrali" + + "aArubaAhvenanmaaAzerbaidžanBosnia ja HertsegovinaBarbadosBangladeshBelgi" + + "aBurkina FasoBulgariaBahrainBurundiBeninSaint-BarthélemyBermudaBruneiBol" + + "iviaKaribian AlankomaatBrasiliaBahamaBhutanBouvet’nsaariBotswanaValko-Ve" + + "näjäBelizeKanadaKookossaaret (Keelingsaaret)Kongon demokraattinen tasava" + + "ltaKeski-Afrikan tasavaltaKongon tasavaltaSveitsiNorsunluurannikkoCookin" + + "saaretChileKamerunKiinaKolumbiaClippertoninsaariCosta RicaKuubaKap Verde" + + "CuraçaoJoulusaariKyprosTšekkiSaksaDiego GarciaDjiboutiTanskaDominicaDomi" + + "nikaaninen tasavaltaAlgeriaCeuta ja MelillaEcuadorViroEgyptiLänsi-Sahara" + + "EritreaEspanjaEtiopiaEuroopan unioniSuomiFidžiFalklandinsaaretMikronesia" + + "n liittovaltioFärsaaretRanskaGabonIso-BritanniaGrenadaGeorgiaRanskan Gua" + + "yanaGuernseyGhanaGibraltarGrönlantiGambiaGuineaGuadeloupePäiväntasaajan " + + "GuineaKreikkaEtelä-Georgia ja Eteläiset SandwichsaaretGuatemalaGuamGuine" + + "a-BissauGuyanaHongkong – Kiinan e.h.a.Heard ja McDonaldinsaaretHondurasK" + + "roatiaHaitiUnkariKanariansaaretIndonesiaIrlantiIsraelMansaariIntiaBritti" + + "läinen Intian valtameren alueIrakIranIslantiItaliaJerseyJamaikaJordaniaJ" + + "apaniKeniaKirgisiaKambodžaKiribatiKomoritSaint Kitts ja NevisPohjois-Kor" + + "eaEtelä-KoreaKuwaitCaymansaaretKazakstanLaosLibanonSaint LuciaLiechtenst" + + "einSri LankaLiberiaLesothoLiettuaLuxemburgLatviaLibyaMarokkoMonacoMoldov" + + "aMontenegroSaint-MartinMadagaskarMarshallinsaaretMakedoniaMaliMyanmar (B" + + "urma)MongoliaMacao – Kiinan e.h.a.Pohjois-MariaanitMartiniqueMauritaniaM" + + "ontserratMaltaMauritiusMalediivitMalawiMeksikoMalesiaMosambikNamibiaUusi" + + "-KaledoniaNigerNorfolkinsaariNigeriaNicaraguaAlankomaatNorjaNepalNauruNi" + + "ueUusi-SeelantiOmanPanamaPeruRanskan PolynesiaPapua-Uusi-GuineaFilippiin" + + "itPakistanPuolaSaint-Pierre ja MiquelonPitcairnPuerto RicoPalestiinalais" + + "alueetPortugaliPalauParaguayQatarulkomeriRéunionRomaniaSerbiaVenäjäRuand" + + "aSaudi-ArabiaSalomonsaaretSeychellitSudanRuotsiSingaporeSaint HelenaSlov" + + "eniaHuippuvuoret ja Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomali" + + "aSurinameEtelä-SudanSão Tomé ja PríncipeEl SalvadorSint MaartenSyyriaSwa" + + "zimaaTristan da CunhaTurks- ja CaicossaaretTšadRanskan eteläiset alueetT" + + "ogoThaimaaTadžikistanTokelauItä-TimorTurkmenistanTunisiaTongaTurkkiTrini" + + "dad ja TobagoTuvaluTaiwanTansaniaUkrainaUgandaYhdysvaltain erillissaaret" + + "Yhdistyneet kansakunnatYhdysvallatUruguayUzbekistanVatikaaniSaint Vincen" + + "t ja GrenadiinitVenezuelaBrittiläiset NeitsytsaaretYhdysvaltain Neitsyts" + + "aaretVietnamVanuatuWallis ja FutunaSamoaKosovoJemenMayotteEtelä-AfrikkaS" + + "ambiaZimbabwetuntematon aluemaailmaAfrikkaPohjois-AmerikkaEtelä-Amerikka" + + "OseaniaLänsi-AfrikkaVäli-AmerikkaItä-AfrikkaPohjois-AfrikkaKeski-Afrikka" + + "eteläinen AfrikkaAmerikkapohjoinen AmerikkaKaribiaItä-AasiaEtelä-AasiaKa" + + "akkois-AasiaEtelä-EurooppaAustralaasiaMelanesiaMikronesiaPolynesiaAasiaK" + + "eski-AasiaLänsi-AasiaEurooppaItä-EurooppaPohjois-EurooppaLänsi-EurooppaL" + + "atinalainen Amerikka" + +var fiRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0016, 0x0027, 0x0031, 0x0043, 0x004b, 0x0052, + 0x0059, 0x005f, 0x0068, 0x0072, 0x0080, 0x0089, 0x0092, 0x0097, + 0x00a1, 0x00ad, 0x00c3, 0x00cb, 0x00d5, 0x00db, 0x00e7, 0x00ef, + 0x00f6, 0x00fd, 0x0102, 0x0113, 0x011a, 0x0120, 0x0127, 0x013a, + 0x0142, 0x0148, 0x014e, 0x015d, 0x0165, 0x0173, 0x0179, 0x017f, + 0x019b, 0x01ba, 0x01d1, 0x01e1, 0x01e8, 0x01f9, 0x0205, 0x020a, + 0x0211, 0x0216, 0x021e, 0x022f, 0x0239, 0x023e, 0x0247, 0x024f, + 0x0259, 0x025f, 0x0266, 0x026b, 0x0277, 0x027f, 0x0285, 0x028d, + // Entry 40 - 7F + 0x02a5, 0x02ac, 0x02bc, 0x02c3, 0x02c7, 0x02cd, 0x02da, 0x02e1, + 0x02e8, 0x02ef, 0x02fe, 0x02fe, 0x0303, 0x0309, 0x0319, 0x0331, + 0x033b, 0x0341, 0x0346, 0x0353, 0x035a, 0x0361, 0x0370, 0x0378, + 0x037d, 0x0386, 0x0390, 0x0396, 0x039c, 0x03a6, 0x03bd, 0x03c4, + 0x03ef, 0x03f8, 0x03fc, 0x0409, 0x040f, 0x0429, 0x0442, 0x044a, + 0x0451, 0x0456, 0x045c, 0x046a, 0x0473, 0x047a, 0x0480, 0x0488, + 0x048d, 0x04b1, 0x04b5, 0x04b9, 0x04c0, 0x04c6, 0x04cc, 0x04d3, + 0x04db, 0x04e1, 0x04e6, 0x04ee, 0x04f7, 0x04ff, 0x0506, 0x051a, + // Entry 80 - BF + 0x0527, 0x0533, 0x0539, 0x0545, 0x054e, 0x0552, 0x0559, 0x0564, + 0x0571, 0x057a, 0x0581, 0x0588, 0x058f, 0x0598, 0x059e, 0x05a3, + 0x05aa, 0x05b0, 0x05b7, 0x05c1, 0x05cd, 0x05d7, 0x05e7, 0x05f0, + 0x05f4, 0x0603, 0x060b, 0x0622, 0x0633, 0x063d, 0x0647, 0x0651, + 0x0656, 0x065f, 0x0669, 0x066f, 0x0676, 0x067d, 0x0685, 0x068c, + 0x069a, 0x069f, 0x06ad, 0x06b4, 0x06bd, 0x06c7, 0x06cc, 0x06d1, + 0x06d6, 0x06da, 0x06e7, 0x06eb, 0x06f1, 0x06f5, 0x0706, 0x0717, + 0x0722, 0x072a, 0x072f, 0x0747, 0x074f, 0x075a, 0x076e, 0x0777, + // Entry C0 - FF + 0x077c, 0x0784, 0x0789, 0x0791, 0x0799, 0x07a0, 0x07a6, 0x07ae, + 0x07b4, 0x07c0, 0x07cd, 0x07d7, 0x07dc, 0x07e2, 0x07eb, 0x07f7, + 0x07ff, 0x0818, 0x0820, 0x082c, 0x0836, 0x083d, 0x0844, 0x084c, + 0x0858, 0x086f, 0x087a, 0x0886, 0x088c, 0x0894, 0x08a4, 0x08ba, + 0x08bf, 0x08d8, 0x08dc, 0x08e3, 0x08ef, 0x08f6, 0x0900, 0x090c, + 0x0913, 0x0918, 0x091e, 0x0930, 0x0936, 0x093c, 0x0944, 0x094b, + 0x0951, 0x096b, 0x0982, 0x098d, 0x0994, 0x099e, 0x09a7, 0x09c3, + 0x09cc, 0x09e7, 0x0a01, 0x0a08, 0x0a0f, 0x0a1f, 0x0a24, 0x0a2a, + // Entry 100 - 13F + 0x0a2f, 0x0a36, 0x0a44, 0x0a4a, 0x0a52, 0x0a61, 0x0a68, 0x0a6f, + 0x0a7f, 0x0a8e, 0x0a95, 0x0aa3, 0x0ab1, 0x0abd, 0x0acc, 0x0ad9, + 0x0aeb, 0x0af3, 0x0b05, 0x0b0c, 0x0b16, 0x0b22, 0x0b30, 0x0b3f, + 0x0b4b, 0x0b54, 0x0b5e, 0x0b67, 0x0b6c, 0x0b77, 0x0b83, 0x0b8b, + 0x0b98, 0x0ba8, 0x0bb7, 0x0bcc, +} // Size: 608 bytes + +const filRegionStr string = "" + // Size: 3037 bytes + "Acsencion islandAndorraUnited Arab EmiratesAfghanistanAntigua and Barbud" + + "aAnguillaAlbaniaArmeniaAngolaAntarcticaArgentinaAmerican SamoaAustriaAus" + + "traliaArubaÅland IslandsAzerbaijanBosnia and HerzegovinaBarbadosBanglade" + + "shBelgiumBurkina FasoBulgariaBahrainBurundiBeninSaint BarthélemyBermudaB" + + "runeiBoliviaCaribbean NetherlandsBrazilBahamasBhutanBouvet IslandBotswan" + + "aBelarusBelizeCanadaCocos (Keeling) IslandsCongo - KinshasaCentral Afric" + + "an RepublicCongo - BrazzavilleSwitzerlandCôte d’IvoireCook IslandsChileC" + + "ameroonChinaColombiaClipperton IslandCosta RicaCubaCape VerdeCuraçaoChri" + + "stmas IslandCyprusCzech RepublicGermanyDiego GarciaDjiboutiDenmarkDomini" + + "caDominican RepublicAlgeriaCeuta and MelillaEcuadorEstoniaEgyptKanlurang" + + " SaharaEritreaSpainEthiopiaEuropean UnionFinlandFijiFalkland IslandsMicr" + + "onesiaFaroe IslandsFranceGabonUnited KingdomGrenadaGeorgiaFrench GuianaG" + + "uernseyGhanaGibraltarGreenlandGambiaGuineaGuadeloupeEquatorial GuineaGre" + + "eceSouth Georgia and the South Sandwich IslandsGuatemalaGuamGuinea-Bissa" + + "uGuyanaHong Kong SAR ChinaHeard Island and McDonald IslandsHondurasCroat" + + "iaHaitiHungaryCanary IslandsIndonesiaIrelandIsraelIsle of ManIndiaBritis" + + "h Indian Ocean TerritoryIraqIranIcelandItalyJerseyJamaicaJordanJapanKeny" + + "aKyrgyzstanCambodiaKiribatiComorosSaint Kitts and NevisHilagang KoreaTim" + + "og KoreaKuwaitCayman IslandsKazakhstanLaosLebanonSaint LuciaLiechtenstei" + + "nSri LankaLiberiaLesothoLithuaniaLuxembourgLatviaLibyaMoroccoMonacoMoldo" + + "vaMontenegroSaint MartinMadagascarMarshall IslandsMacedoniaMaliMyanmar (" + + "Burma)MongoliaMacau SAR ChinaNorthern Mariana IslandsMartiniqueMauritani" + + "aMontserratMaltaMauritiusMaldivesMalawiMexicoMalaysiaMozambiqueNamibiaNe" + + "w CaledoniaNigerNorfolk IslandNigeriaNicaraguaNetherlandsNorwayNepalNaur" + + "uNiueNew ZealandOmanPanamaPeruFrench PolynesiaPapua New GuineaPilipinasP" + + "akistanPolandSaint Pierre and MiquelonPitcairn IslandsPuerto RicoPalesti" + + "nian TerritoriesPortugalPalauParaguayQatarOutlying OceaniaRéunionRomania" + + "SerbiaRussiaRwandaSaudi ArabiaSolomon IslandsSeychellesSudanSwedenSingap" + + "oreSaint HelenaSloveniaSvalbard and Jan MayenSlovakiaSierra LeoneSan Mar" + + "inoSenegalSomaliaSurinameTimog SudanSão Tomé and PríncipeEl SalvadorSint" + + " MaartenSyriaSwazilandTristan de CunhaTurks and Caicos IslandsChadFrench" + + " Southern TerritoriesTogoThailandTajikistanTokelauTimor-LesteTurkmenista" + + "nTunisiaTongaTurkeyTrinidad and TobagoTuvaluTaiwanTanzaniaUkraineUgandaU" + + ".S. Outlying IslandsNagkakaisang BansaEstados UnidosUruguayUzbekistanVat" + + "ican CitySaint Vincent and the GrenadinesVenezuelaBritish Virgin Islands" + + "U.S. Virgin IslandsVietnamVanuatuWallis and FutunaSamoaKosovoYemenMayott" + + "eSouth AfricaZambiaZimbabweHindi Kilalang RehiyonMundoAfricaHilagang Ame" + + "rikaTimog AmerikaOceaniaKanlurang AfricaGitnang AmerikaSilangang AfricaH" + + "ilagang AfricaGitnang AfricaKatimugang AfricaAmericasNorthern AmericaCar" + + "ribbeanSilangang AsyaKatimugang AsyaTimog-Silangang AsyaKatimugang Europ" + + "eAustralasiaMelanesiaRehiyon ng MicronesiaPolynesiaAsyaGitnang AsyaKanlu" + + "rang AsyaEuropeSilangang EuropeHilagang EuropeKanlurang EuropeLatin Amer" + + "ica" + +var filRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x002b, 0x0036, 0x0049, 0x0051, 0x0058, + 0x005f, 0x0065, 0x006f, 0x0078, 0x0086, 0x008d, 0x0096, 0x009b, + 0x00a9, 0x00b3, 0x00c9, 0x00d1, 0x00db, 0x00e2, 0x00ee, 0x00f6, + 0x00fd, 0x0104, 0x0109, 0x011a, 0x0121, 0x0127, 0x012e, 0x0143, + 0x0149, 0x0150, 0x0156, 0x0163, 0x016b, 0x0172, 0x0178, 0x017e, + 0x0195, 0x01a5, 0x01bd, 0x01d0, 0x01db, 0x01eb, 0x01f7, 0x01fc, + 0x0204, 0x0209, 0x0211, 0x0222, 0x022c, 0x0230, 0x023a, 0x0242, + 0x0252, 0x0258, 0x0266, 0x026d, 0x0279, 0x0281, 0x0288, 0x0290, + // Entry 40 - 7F + 0x02a2, 0x02a9, 0x02ba, 0x02c1, 0x02c8, 0x02cd, 0x02dd, 0x02e4, + 0x02e9, 0x02f1, 0x02ff, 0x02ff, 0x0306, 0x030a, 0x031a, 0x0324, + 0x0331, 0x0337, 0x033c, 0x034a, 0x0351, 0x0358, 0x0365, 0x036d, + 0x0372, 0x037b, 0x0384, 0x038a, 0x0390, 0x039a, 0x03ab, 0x03b1, + 0x03dd, 0x03e6, 0x03ea, 0x03f7, 0x03fd, 0x0410, 0x0431, 0x0439, + 0x0440, 0x0445, 0x044c, 0x045a, 0x0463, 0x046a, 0x0470, 0x047b, + 0x0480, 0x049e, 0x04a2, 0x04a6, 0x04ad, 0x04b2, 0x04b8, 0x04bf, + 0x04c5, 0x04ca, 0x04cf, 0x04d9, 0x04e1, 0x04e9, 0x04f0, 0x0505, + // Entry 80 - BF + 0x0513, 0x051e, 0x0524, 0x0532, 0x053c, 0x0540, 0x0547, 0x0552, + 0x055f, 0x0568, 0x056f, 0x0576, 0x057f, 0x0589, 0x058f, 0x0594, + 0x059b, 0x05a1, 0x05a8, 0x05b2, 0x05be, 0x05c8, 0x05d8, 0x05e1, + 0x05e5, 0x05f4, 0x05fc, 0x060b, 0x0623, 0x062d, 0x0637, 0x0641, + 0x0646, 0x064f, 0x0657, 0x065d, 0x0663, 0x066b, 0x0675, 0x067c, + 0x0689, 0x068e, 0x069c, 0x06a3, 0x06ac, 0x06b7, 0x06bd, 0x06c2, + 0x06c7, 0x06cb, 0x06d6, 0x06da, 0x06e0, 0x06e4, 0x06f4, 0x0704, + 0x070d, 0x0715, 0x071b, 0x0734, 0x0744, 0x074f, 0x0766, 0x076e, + // Entry C0 - FF + 0x0773, 0x077b, 0x0780, 0x0790, 0x0798, 0x079f, 0x07a5, 0x07ab, + 0x07b1, 0x07bd, 0x07cc, 0x07d6, 0x07db, 0x07e1, 0x07ea, 0x07f6, + 0x07fe, 0x0814, 0x081c, 0x0828, 0x0832, 0x0839, 0x0840, 0x0848, + 0x0853, 0x086b, 0x0876, 0x0882, 0x0887, 0x0890, 0x08a0, 0x08b8, + 0x08bc, 0x08d7, 0x08db, 0x08e3, 0x08ed, 0x08f4, 0x08ff, 0x090b, + 0x0912, 0x0917, 0x091d, 0x0930, 0x0936, 0x093c, 0x0944, 0x094b, + 0x0951, 0x0966, 0x0978, 0x0986, 0x098d, 0x0997, 0x09a3, 0x09c3, + 0x09cc, 0x09e2, 0x09f5, 0x09fc, 0x0a03, 0x0a14, 0x0a19, 0x0a1f, + // Entry 100 - 13F + 0x0a24, 0x0a2b, 0x0a37, 0x0a3d, 0x0a45, 0x0a5b, 0x0a60, 0x0a66, + 0x0a76, 0x0a83, 0x0a8a, 0x0a9a, 0x0aa9, 0x0ab9, 0x0ac8, 0x0ad6, + 0x0ae7, 0x0aef, 0x0aff, 0x0b09, 0x0b17, 0x0b26, 0x0b3a, 0x0b4b, + 0x0b56, 0x0b5f, 0x0b74, 0x0b7d, 0x0b81, 0x0b8d, 0x0b9b, 0x0ba1, + 0x0bb1, 0x0bc0, 0x0bd0, 0x0bdd, +} // Size: 608 bytes + +const frRegionStr string = "" + // Size: 3320 bytes + "Île de l’AscensionAndorreÉmirats arabes unisAfghanistanAntigua-et-Barbud" + + "aAnguillaAlbanieArménieAngolaAntarctiqueArgentineSamoa américainesAutric" + + "heAustralieArubaÎles ÅlandAzerbaïdjanBosnie-HerzégovineBarbadeBangladesh" + + "BelgiqueBurkina FasoBulgarieBahreïnBurundiBéninSaint-BarthélemyBermudesB" + + "runéi DarussalamBoliviePays-Bas caribéensBrésilBahamasBhoutanÎle BouvetB" + + "otswanaBiélorussieBelizeCanadaÎles CocosCongo-KinshasaRépublique centraf" + + "ricaineCongo-BrazzavilleSuisseCôte d’IvoireÎles CookChiliCamerounChineCo" + + "lombieÎle ClippertonCosta RicaCubaCap-VertCuraçaoÎle ChristmasChypreRépu" + + "blique tchèqueAllemagneDiego GarciaDjiboutiDanemarkDominiqueRépublique d" + + "ominicaineAlgérieCeuta et MelillaÉquateurEstonieÉgypteSahara occidentalÉ" + + "rythréeEspagneÉthiopieUnion européenneFinlandeFidjiÎles MalouinesÉtats f" + + "édérés de MicronésieÎles FéroéFranceGabonRoyaume-UniGrenadeGéorgieGuyan" + + "e françaiseGuerneseyGhanaGibraltarGroenlandGambieGuinéeGuadeloupeGuinée " + + "équatorialeGrèceGéorgie du Sud et îles Sandwich du SudGuatemalaGuamGuin" + + "ée-BissauGuyanaR.A.S. chinoise de Hong KongÎles Heard et McDonaldHondur" + + "asCroatieHaïtiHongrieÎles CanariesIndonésieIrlandeIsraëlÎle de ManIndeTe" + + "rritoire britannique de l’océan IndienIrakIranIslandeItalieJerseyJamaïqu" + + "eJordanieJaponKenyaKirghizistanCambodgeKiribatiComoresSaint-Christophe-e" + + "t-NiévèsCorée du NordCorée du SudKoweïtÎles CaïmansKazakhstanLaosLibanSa" + + "inte-LucieLiechtensteinSri LankaLibériaLesothoLituanieLuxembourgLettonie" + + "LibyeMarocMonacoMoldavieMonténégroSaint-MartinMadagascarÎles MarshallMac" + + "édoineMaliMyanmar (Birmanie)MongolieR.A.S. chinoise de MacaoÎles Marian" + + "nes du NordMartiniqueMauritanieMontserratMalteMauriceMaldivesMalawiMexiq" + + "ueMalaisieMozambiqueNamibieNouvelle-CalédonieNigerÎle NorfolkNigériaNica" + + "raguaPays-BasNorvègeNépalNauruNiueNouvelle-ZélandeOmanPanamaPérouPolynés" + + "ie françaisePapouasie-Nouvelle-GuinéePhilippinesPakistanPologneSaint-Pie" + + "rre-et-MiquelonÎles PitcairnPorto RicoTerritoires palestiniensPortugalPa" + + "laosParaguayQatarrégions éloignées de l’OcéanieLa RéunionRoumanieSerbieR" + + "ussieRwandaArabie saouditeÎles SalomonSeychellesSoudanSuèdeSingapourSain" + + "te-HélèneSlovénieSvalbard et Jan MayenSlovaquieSierra LeoneSaint-MarinSé" + + "négalSomalieSurinameSoudan du SudSao Tomé-et-PrincipeEl SalvadorSaint-Ma" + + "rtin (partie néerlandaise)SyrieSwazilandTristan da CunhaÎles Turques-et-" + + "CaïquesTchadTerres australes françaisesTogoThaïlandeTadjikistanTokélaouT" + + "imor orientalTurkménistanTunisieTongaTurquieTrinité-et-TobagoTuvaluTaïwa" + + "nTanzanieUkraineOugandaÎles mineures éloignées des États-UnisNations Uni" + + "esÉtats-UnisUruguayOuzbékistanÉtat de la Cité du VaticanSaint-Vincent-et" + + "-les-GrenadinesVenezuelaÎles Vierges britanniquesÎles Vierges des États-" + + "UnisVietnamVanuatuWallis-et-FutunaSamoaKosovoYémenMayotteAfrique du SudZ" + + "ambieZimbabwerégion indéterminéeMondeAfriqueAmérique du NordAmérique du " + + "SudOcéanieAfrique occidentaleAmérique centraleAfrique orientaleAfrique s" + + "eptentrionaleAfrique centraleAfrique australeAmériquesAmérique septentri" + + "onaleCaraïbesAsie orientaleAsie du SudAsie du Sud-EstEurope méridionaleA" + + "ustralasieMélanésierégion micronésiennePolynésieAsieAsie centraleAsie oc" + + "cidentaleEuropeEurope de l’EstEurope septentrionaleEurope occidentaleAmé" + + "rique latine" + +var frRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0015, 0x001c, 0x0030, 0x003b, 0x004d, 0x0055, 0x005c, + 0x0064, 0x006a, 0x0075, 0x007e, 0x0090, 0x0098, 0x00a1, 0x00a6, + 0x00b2, 0x00be, 0x00d1, 0x00d8, 0x00e2, 0x00ea, 0x00f6, 0x00fe, + 0x0106, 0x010d, 0x0113, 0x0124, 0x012c, 0x013e, 0x0145, 0x0158, + 0x015f, 0x0166, 0x016d, 0x0178, 0x0180, 0x018c, 0x0192, 0x0198, + 0x01a3, 0x01b1, 0x01cb, 0x01dc, 0x01e2, 0x01f2, 0x01fc, 0x0201, + 0x0209, 0x020e, 0x0216, 0x0225, 0x022f, 0x0233, 0x023b, 0x0243, + 0x0251, 0x0257, 0x026b, 0x0274, 0x0280, 0x0288, 0x0290, 0x0299, + // Entry 40 - 7F + 0x02b0, 0x02b8, 0x02c8, 0x02d1, 0x02d8, 0x02df, 0x02f0, 0x02fa, + 0x0301, 0x030a, 0x031b, 0x031b, 0x0323, 0x0328, 0x0337, 0x0357, + 0x0364, 0x036a, 0x036f, 0x037a, 0x0381, 0x0389, 0x039a, 0x03a3, + 0x03a8, 0x03b1, 0x03ba, 0x03c0, 0x03c7, 0x03d1, 0x03e5, 0x03eb, + 0x0413, 0x041c, 0x0420, 0x042e, 0x0434, 0x0450, 0x0467, 0x046f, + 0x0476, 0x047c, 0x0483, 0x0491, 0x049b, 0x04a2, 0x04a9, 0x04b4, + 0x04b8, 0x04e3, 0x04e7, 0x04eb, 0x04f2, 0x04f8, 0x04fe, 0x0507, + 0x050f, 0x0514, 0x0519, 0x0525, 0x052d, 0x0535, 0x053c, 0x0558, + // Entry 80 - BF + 0x0566, 0x0573, 0x057a, 0x0588, 0x0592, 0x0596, 0x059b, 0x05a7, + 0x05b4, 0x05bd, 0x05c5, 0x05cc, 0x05d4, 0x05de, 0x05e6, 0x05eb, + 0x05f0, 0x05f6, 0x05fe, 0x060a, 0x0616, 0x0620, 0x062e, 0x0638, + 0x063c, 0x064e, 0x0656, 0x066e, 0x0685, 0x068f, 0x0699, 0x06a3, + 0x06a8, 0x06af, 0x06b7, 0x06bd, 0x06c4, 0x06cc, 0x06d6, 0x06dd, + 0x06f0, 0x06f5, 0x0701, 0x0709, 0x0712, 0x071a, 0x0722, 0x0728, + 0x072d, 0x0731, 0x0742, 0x0746, 0x074c, 0x0752, 0x0767, 0x0781, + 0x078c, 0x0794, 0x079b, 0x07b3, 0x07c1, 0x07cb, 0x07e3, 0x07eb, + // Entry C0 - FF + 0x07f1, 0x07f9, 0x07fe, 0x0822, 0x082d, 0x0835, 0x083b, 0x0841, + 0x0847, 0x0856, 0x0863, 0x086d, 0x0873, 0x0879, 0x0882, 0x0891, + 0x089a, 0x08af, 0x08b8, 0x08c4, 0x08cf, 0x08d8, 0x08df, 0x08e7, + 0x08f4, 0x0909, 0x0914, 0x0937, 0x093c, 0x0945, 0x0955, 0x096e, + 0x0973, 0x098f, 0x0993, 0x099d, 0x09a8, 0x09b1, 0x09bf, 0x09cc, + 0x09d3, 0x09d8, 0x09df, 0x09f1, 0x09f7, 0x09fe, 0x0a06, 0x0a0d, + 0x0a14, 0x0a3e, 0x0a4b, 0x0a56, 0x0a5d, 0x0a69, 0x0a85, 0x0aa4, + 0x0aad, 0x0ac7, 0x0ae4, 0x0aeb, 0x0af2, 0x0b02, 0x0b07, 0x0b0d, + // Entry 100 - 13F + 0x0b13, 0x0b1a, 0x0b28, 0x0b2e, 0x0b36, 0x0b4c, 0x0b51, 0x0b58, + 0x0b69, 0x0b79, 0x0b81, 0x0b94, 0x0ba6, 0x0bb7, 0x0bcd, 0x0bdd, + 0x0bed, 0x0bf7, 0x0c0f, 0x0c18, 0x0c26, 0x0c31, 0x0c40, 0x0c53, + 0x0c5e, 0x0c69, 0x0c7f, 0x0c89, 0x0c8d, 0x0c9a, 0x0caa, 0x0cb0, + 0x0cc1, 0x0cd6, 0x0ce8, 0x0cf8, +} // Size: 608 bytes + +const frCARegionStr string = "" + // Size: 492 bytes + "île de l’Ascensionîles d’ÅlandBruneiîle BouvetBélarusîles Cocos (Keeling" + + ")îles Cookîle Christmasîles MalouinesMicronésieîles Féroéîles Heard et M" + + "cDonaldîles Canariesîle de ManSaint-Martin (France)MyanmarMariannes du N" + + "ordîle Norfolkîles PitcairnOcéanie lointainela RéunionSaint-Martin (Pays" + + "-Bas)TokelauTimor-Lesteîles mineures éloignées des États-UnisCité du Vat" + + "icanSaint-Vincent-et-les Grenadinesîles Vierges britanniquesîles Vierges" + + " américainesEurope orientale" + +var frCARegionIdx = []uint16{ // 289 elements + // Entry 0 - 3F + 0x0000, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x0036, 0x0036, 0x003e, 0x003e, 0x003e, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x005d, 0x005d, + 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + // Entry 40 - 7F + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x007a, 0x0085, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x00a9, 0x00a9, + 0x00a9, 0x00a9, 0x00a9, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00c2, + 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + // Entry 80 - BF + 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00d7, 0x00d7, 0x00d7, 0x00d7, + 0x00d7, 0x00de, 0x00de, 0x00de, 0x00ef, 0x00ef, 0x00ef, 0x00ef, + 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, + 0x00ef, 0x00ef, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x0109, 0x0109, 0x0109, 0x0109, + // Entry C0 - FF + 0x0109, 0x0109, 0x0109, 0x011b, 0x0126, 0x0126, 0x0126, 0x0126, + 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, + 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, + 0x0126, 0x0126, 0x0126, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x0144, 0x014f, 0x014f, + 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, + 0x014f, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0189, 0x01a8, + 0x01a8, 0x01c2, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, + // Entry 100 - 13F + 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, + 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, + 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, + 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, + 0x01ec, +} // Size: 602 bytes + +const guRegionStr string = "" + // Size: 8703 bytes + "એસેન્શન આઇલેન્ડઍંડોરાયુનાઇટેડ આરબ અમીરાતઅફઘાનિસ્તાનએન્ટીગુઆ અને બર્મુડાઍ" + + "ંગ્વિલાઅલ્બેનિયાઆર્મેનિયાઅંગોલાએન્ટાર્કટિકાઆર્જેન્ટીનાઅમેરીકન સમોઆઑસ્ટ" + + "્રિયાઑસ્ટ્રેલિયાઅરુબાએલેંડ ટાપુઓઅઝરબૈજાનબોસ્નિયા અને હર્ઝેગોવિનાબાર્બા" + + "ડોસબાંગ્લાદેશબેલ્જીયમબુર્કિના ફાસોબલ્ગેરિયાબેહરીનબુરુંડીબેનિનસેન્ટ બાર" + + "્થેલેમીબર્મુડાબ્રુનેઇબોલિવિયાકેરેબિયન નેધરલેન્ડ્ઝબ્રાઝિલબહામાસભૂટાનબૌવ" + + "ેત આઇલેન્ડબોત્સ્વાનાબેલારુસબેલીઝકેનેડાકોકોઝ (કીલીંગ) આઇલેન્ડ્સકોંગો - " + + "કિંશાસાસેન્ટ્રલ આફ્રિકન રીપબ્લિકકોંગો - બ્રાઝાવિલેસ્વિટ્ઝર્લૅન્ડકોટ ડી" + + " આઇવરીકુક આઇલેન્ડ્સચિલીકૅમરૂનચીનકોલમ્બિયાક્લિપરટન આઇલેન્ડકોસ્ટા રિકાક્યુ" + + "બાકૅપ વર્ડેક્યુરાસાઓક્રિસમસ આઇલેન્ડસાયપ્રસચેક રીપબ્લિકજર્મનીડિએગો ગારસ" + + "િઆજીબૌટીડેનમાર્કડોમિનિકાડોમિનિકન રીપબ્લિકઅલ્જીરિયાસ્યુટા અને મેલિલાએક્" + + "વાડોરએસ્ટોનિયાઇજિપ્તપશ્ચિમી સહારાએરિટ્રિયાસ્પેનઇથિઓપિયાયુરોપિયન સંઘફિન" + + "લેન્ડફીજીફૉકલેન્ડ ટાપુઓમાઇક્રોનેશિયાફૅરો ટાપુઓફ્રાંસગેબનયુનાઇટેડ કિંગડ" + + "મગ્રેનેડાજ્યોર્જીયાફ્રેંચ ગયાનાગ્વેર્નસેઘાનાજીબ્રાલ્ટરગ્રીનલેન્ડગેમ્બિ" + + "યાગિનીગ્વાડેલોપઇક્વેટોરિયલ ગિનીગ્રીસદક્ષિણ જ્યોર્જીયા અને દક્ષિણ સેન્ડ" + + "વિચ આઇલેન્ડ્સગ્વાટેમાલાગ્વામગિની-બિસાઉગયાનાહોંગકોંગ SAR ચીનહર્ડ અને મે" + + "કડોનાલ્ડ આઇલેન્ડ્સહોન્ડુરસક્રોએશિયાહૈતિહંગેરીકૅનેરી ટાપુઓઇન્ડોનેશિયાઆય" + + "ર્લેન્ડઇઝરાઇલઆઈલ ઓફ મૅનભારતબ્રિટિશ ઇન્ડિયન ઓશન ટેરિટરીઇરાકઈરાનઆઇસલેન્ડ" + + "ઇટાલીજર્સીજમૈકાજોર્ડનજાપાનકેન્યાકિર્ગિઝ્સ્તાનકંબોડિયાકિરિબાટીકોમોરસસેન" + + "્ટ કિટ્સ અને નેવિસઉત્તર કોરિયાદક્ષિણ કોરિયાકુવૈતકેમેન ટાપુઓકઝાકિસ્તાનલ" + + "ાઓસલેબનોનસેન્ટ લુસિયાલૈચટેંસ્ટેઇનશ્રીલંકાલાઇબેરિયાલેસોથોલિથુઆનિયાલક્ઝમ" + + "બર્ગલાત્વિયાલિબિયામોરોક્કોમોનાકોમોલડોવામૉન્ટેંનેગ્રોસેન્ટ માર્ટિનમેડાગ" + + "ાસ્કરમાર્શલ આઇલેન્ડ્સમેસેડોનિયામાલીમ્યાંમાર (બર્મા)મંગોલિયામકાઉ SAR ચી" + + "નઉત્તરીય મારિયાના આઇલેન્ડ્સમાર્ટીનીકમૌરિટાનિયામોંટસેરાતમાલ્ટામોરિશિયસમ" + + "ાલદિવ્સમાલાવીમેક્સિકોમલેશિયામોઝામ્બિકનામિબિયાન્યુ સેલેડોનિયાનાઇજરનોરફૉ" + + "ક ટાપુનાઇજીરીયાનિકારાગુઆનેધરલેન્ડનૉર્વેનેપાળનૌરુનીયુન્યુઝીલેન્ડઓમાનપના" + + "માપેરુફ્રેંચ પોલિનેશિયાપાપુઆ ન્યૂ ગિનીફિલીપાઇન્સપાકિસ્તાનપોલેંડસેન્ટ પ" + + "િયર અને મીક્વેલનપીટકૈર્ન આઇલેન્ડ્સપ્યુઅર્ટો રિકોપેલેસ્ટિનિયન ટેરિટરીપો" + + "ર્ટુગલપલાઉપેરાગ્વેકતારઆઉટલાઈન્ગ ઓશનિયારીયુનિયનરોમાનિયાસર્બિયારશિયારવાં" + + "ડાસાઉદી અરેબિયાસોલોમન આઇલેન્ડ્સસેશેલ્સસુદાનસ્વીડનસિંગાપુરસેન્ટ હેલેનાસ" + + "્લોવેનિયાસ્વાલબર્ડ અને જેન મેયનસ્લોવેકિયાસીએરા લેઓનસૅન મેરિનોસેનેગલસોમ" + + "ાલિયાસુરીનામદક્ષિણ સુદાનસાઓ ટૉમ અને પ્રિંસિપેએલ સેલ્વાડોરસિંટ માર્ટેનસ" + + "ીરિયાસ્વાઝિલેન્ડત્રિસ્તાન દા કુન્હાતુર્ક્સ અને કાઇકોસ ટાપુઓચાડફ્રેંચ સ" + + "દર્ન ટેરિટરીઝટોગોથાઇલેંડતાજીકિસ્તાનટોકેલાઉતિમોર-લેસ્તેતુર્કમેનિસ્તાનટ્" + + "યુનિશિયાટોંગાતુર્કીટ્રિનીદાદ અને ટોબેગોતુવાલુતાઇવાનતાંઝાનિયાયુક્રેનયુગ" + + "ાંડાસંયુક્ત રાજ્ય આઉટલાઇંગ આયલેન્ડ્સસંયુક્ત રાષ્ટ્રસંયુકત રાજ્ય અમેરિક" + + "ાઉરુગ્વેઉઝ્બેકિસ્તાનવેટિકન સિટીસેન્ટ વિન્સેટ અને ગ્રેનેડીન્સવેનેઝુએલાબ" + + "્રિટિશ વર્જિન ટાપુઓયુ.એસ. વર્જિન ટાપુઓવિયેતનામવાનુઆતુવેલીસ અને ફ્યુટુન" + + "ાસમોઆકોસોવોયેમેનમેયોટદક્ષિણ આફ્રિકાઝામ્બિયાઝિમ્બાબ્વેઅજ્ઞાત પ્રદેશવિશ્" + + "વઆફ્રિકાઉત્તર અમેરિકાદક્ષિણ અમેરિકાઓશનિયાપશ્ચિમી આફ્રિકામધ્ય અમેરિકાપૂ" + + "ર્વીય આફ્રિકાઉત્તરીય આફ્રિકામધ્ય આફ્રિકાસધર્ન આફ્રિકાઅમેરિકાઉત્તરીય અમ" + + "ેરિકાકેરિબિયનપૂર્વીય એશિયાસર્ધન એશિયાદક્ષિણપૂર્વ એશિયાસધર્ન યુરોપઓસ્ટ્" + + "રેલેશિયામેલાનેશિયામાઈક્રોનેશિયન ક્ષેત્રપોલિનેશિયાએશિયામધ્ય એશિયાપશ્ચિમ" + + "ી એશિયાયુરોપપૂર્વીય યુરોપઉત્તરીય યુરોપપશ્ચિમ યુરોપલેટિન અમેરિકા" + +var guRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x002b, 0x003d, 0x0072, 0x0093, 0x00cb, 0x00e3, 0x00fe, + 0x0119, 0x012b, 0x014f, 0x0170, 0x0192, 0x01ad, 0x01ce, 0x01dd, + 0x01fc, 0x0214, 0x0258, 0x0273, 0x0291, 0x02a9, 0x02ce, 0x02e9, + 0x02fb, 0x0310, 0x031f, 0x034d, 0x0362, 0x0377, 0x038f, 0x03c9, + 0x03de, 0x03f0, 0x03ff, 0x0424, 0x0442, 0x0457, 0x0466, 0x0478, + 0x04b8, 0x04df, 0x0526, 0x0556, 0x0580, 0x05a0, 0x05c5, 0x05d1, + 0x05e3, 0x05ec, 0x0607, 0x0635, 0x0654, 0x0666, 0x067f, 0x069a, + 0x06c5, 0x06da, 0x06fc, 0x070e, 0x0730, 0x0742, 0x075a, 0x0772, + // Entry 40 - 7F + 0x07a3, 0x07be, 0x07ed, 0x0805, 0x0820, 0x0832, 0x0857, 0x0872, + 0x0881, 0x0899, 0x08bb, 0x08bb, 0x08d3, 0x08df, 0x0907, 0x092e, + 0x094a, 0x095c, 0x0968, 0x0993, 0x09ab, 0x09c9, 0x09eb, 0x0a06, + 0x0a12, 0x0a30, 0x0a4e, 0x0a66, 0x0a72, 0x0a8d, 0x0abb, 0x0aca, + 0x0b4d, 0x0b6b, 0x0b7a, 0x0b96, 0x0ba5, 0x0bcb, 0x0c1c, 0x0c34, + 0x0c4f, 0x0c5b, 0x0c6d, 0x0c8f, 0x0cb0, 0x0ccb, 0x0cdd, 0x0cf7, + 0x0d03, 0x0d4e, 0x0d5a, 0x0d66, 0x0d7e, 0x0d8d, 0x0d9c, 0x0dab, + 0x0dbd, 0x0dcc, 0x0dde, 0x0e05, 0x0e1d, 0x0e35, 0x0e47, 0x0e80, + // Entry 80 - BF + 0x0ea2, 0x0ec7, 0x0ed6, 0x0ef5, 0x0f13, 0x0f1f, 0x0f31, 0x0f53, + 0x0f77, 0x0f8f, 0x0faa, 0x0fbc, 0x0fd7, 0x0ff2, 0x100a, 0x101c, + 0x1034, 0x1046, 0x105b, 0x1082, 0x10a7, 0x10c5, 0x10f3, 0x1111, + 0x111d, 0x1147, 0x115f, 0x1179, 0x11c3, 0x11de, 0x11fc, 0x1217, + 0x1229, 0x1241, 0x1259, 0x126b, 0x1283, 0x1298, 0x12b3, 0x12cb, + 0x12f6, 0x1305, 0x1324, 0x133f, 0x135a, 0x1375, 0x1387, 0x1396, + 0x13a2, 0x13ae, 0x13cf, 0x13db, 0x13ea, 0x13f6, 0x1427, 0x1450, + 0x146e, 0x1489, 0x149b, 0x14da, 0x150e, 0x1536, 0x1570, 0x1588, + // Entry C0 - FF + 0x1594, 0x15ac, 0x15b8, 0x15e6, 0x15fe, 0x1616, 0x162b, 0x163a, + 0x164c, 0x1671, 0x169f, 0x16b4, 0x16c3, 0x16d5, 0x16ed, 0x170f, + 0x172d, 0x1769, 0x1787, 0x17a3, 0x17bf, 0x17d1, 0x17e9, 0x17fe, + 0x1820, 0x1859, 0x187b, 0x189d, 0x18af, 0x18d0, 0x1905, 0x1947, + 0x1950, 0x198b, 0x1997, 0x19ac, 0x19cd, 0x19e2, 0x1a04, 0x1a2e, + 0x1a4c, 0x1a5b, 0x1a6d, 0x1aa5, 0x1ab7, 0x1ac9, 0x1ae4, 0x1af9, + 0x1b0e, 0x1b68, 0x1b93, 0x1bcb, 0x1be0, 0x1c04, 0x1c23, 0x1c74, + 0x1c8f, 0x1cc7, 0x1cf8, 0x1d10, 0x1d25, 0x1d57, 0x1d63, 0x1d75, + // Entry 100 - 13F + 0x1d84, 0x1d93, 0x1dbb, 0x1dd3, 0x1df1, 0x1e16, 0x1e25, 0x1e3a, + 0x1e5f, 0x1e87, 0x1e99, 0x1ec4, 0x1ee6, 0x1f11, 0x1f3c, 0x1f5e, + 0x1f83, 0x1f98, 0x1fc3, 0x1fdb, 0x2000, 0x201f, 0x2050, 0x206f, + 0x2096, 0x20b4, 0x20f1, 0x210f, 0x211e, 0x213a, 0x215f, 0x216e, + 0x2193, 0x21b8, 0x21da, 0x21ff, +} // Size: 608 bytes + +const heRegionStr string = "" + // Size: 5046 bytes + "האי אסנשןאנדורהאיחוד האמירויות הערביותאפגניסטןאנטיגואה וברבודהאנגילהאלבנ" + + "יהארמניהאנגולהאנטארקטיקהארגנטינהסמואה האמריקניתאוסטריהאוסטרליהארובהאיי " + + "אולנדאזרבייג׳ןבוסניה והרצגובינהברבדוסבנגלדשבלגיהבורקינה פאסובולגריהבחרי" + + "יןבורונדיבניןסנט ברתולומיאוברמודהברונייבוליביההאיים הקריביים ההולנדייםב" + + "רזילאיי בהאמהבהוטןאיי בובהבוצוואנהבלארוסבליזקנדהאיי קוקוס (קילינג)קונגו" + + " - קינשאסההרפובליקה של מרכז אפריקהקונגו - ברזאוילשווייץחוף השנהבאיי קוקצ" + + "׳ילהקמרוןסיןקולומביההאי קליפרטוןקוסטה ריקהקובהכף ורדהקוראסאוהאי כריסטמס" + + "קפריסיןהרפובליקה הצ׳כיתגרמניהדייגו גרסיהג׳יבוטידנמרקדומיניקההרפובליקה ה" + + "דומיניקניתאלג׳יריהסאוטה ומלייהאקוודוראסטוניהמצריםסהרה המערביתאריתריאהספ" + + "רדאתיופיההאיחוד האירופיפינלנדפיג׳יאיי פוקלנדמיקרונזיהאיי פארוצרפתגבוןהמ" + + "מלכה המאוחדתגרנדהגאורגיהגיאנה הצרפתיתגרנסיגאנהגיברלטרגרינלנדגמביהגינאהג" + + "וואדלופגינאה המשווניתיווןג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומייםגואטמלה" + + "גואםגינאה ביסאוגיאנההונג קונג (מחוז מנהלי מיוחד של סין)איי הרד ומקדונלד" + + "הונדורסקרואטיההאיטיהונגריההאיים הקנרייםאינדונזיהאירלנדישראלהאי מאןהודוה" + + "טריטוריה הבריטית באוקיינוס ההודיעיראקאיראןאיסלנדאיטליהג׳רסיג׳מייקהירדןי" + + "פןקניהקירגיזסטןקמבודיהקיריבאטיקומורוסנט קיטס ונוויסקוריאה הצפוניתקוריאה" + + " הדרומיתכוויתאיי קיימןקזחסטןלאוסלבנוןסנט לוסיהליכטנשטייןסרי לנקהליבריהלס" + + "וטוליטאלוקסמבורגלטביהלובמרוקומונקומולדובהמונטנגרוסן מרטןמדגסקראיי מרשלמ" + + "קדוניהמאלימיאנמר (בורמה)מונגוליהמקאו (מחוז מנהלי מיוחד של סין)איי מריאנ" + + "ה הצפונייםמרטיניקמאוריטניהמונסראטמלטהמאוריציוסהאיים המלדיבייםמלאווימקסי" + + "קומלזיהמוזמביקנמיביהקלדוניה החדשהניז׳ראיי נורפוקניגריהניקרגואההולנדנורו" + + "וגיהנפאלנאורוניווהניו זילנדעומאןפנמהפרופולינזיה הצרפתיתפפואה גינאה החדש" + + "ההפיליפיניםפקיסטןפוליןסנט פייר ומיקלוןאיי פיטקרןפוארטו ריקוהשטחים הפלסט" + + "ינייםפורטוגלפלאופרגוואיקטארטריטוריות באוקיאניהראוניוןרומניהסרביהרוסיהרו" + + "אנדהערב הסעודיתאיי שלמהאיי סיישלסודןשוודיהסינגפורסנט הלנהסלובניהסוולבאר" + + "ד ויאן מאייןסלובקיהסיירה לאונהסן מרינוסנגלסומליהסורינםדרום סודןסאו טומה" + + " ופרינסיפהאל סלבדורסנט מארטןסוריהסווזילנדטריסטן דה קונהאיי טורקס וקאיקוס" + + "צ׳אדהטריטוריות הדרומיות של צרפתטוגותאילנדטג׳יקיסטןטוקלאוטימור לסטהטורקמ" + + "ניסטןטוניסיהטונגהטורקיהטרינידד וטובגוטובאלוטייוואןטנזניהאוקראינהאוגנדהה" + + "איים המרוחקים הקטנים של ארה״בהאומות המאוחדותארצות הבריתאורוגוואיאוזבקיס" + + "טןהוותיקןסנט וינסנט והגרנדיניםונצואלהאיי הבתולה הבריטייםאיי הבתולה של א" + + "רצות הבריתוייטנאםונואטואיי ווליס ופוטונהסמואהקוסובותימןמאיוטדרום אפריקה" + + "זמביהזימבבואהאזור לא ידועהעולםאפריקהצפון אמריקהדרום אמריקהאוקיאניהמערב " + + "אפריקהמרכז אמריקהמזרח אפריקהצפון אפריקהמרכז אפריקהדרום יבשת אפריקהאמריק" + + "האמריקה הצפוניתהאיים הקריבייםמזרח אסיהדרום אסיהדרום־מזרח אסיהדרום אירופ" + + "האוסטרלאסיהמלנזיהאזור מיקרונזיהפולינזיהאסיהמרכז אסיהמערב אסיהאירופהמזרח" + + " אירופהצפון אירופהמערב אירופהאמריקה הלטינית" + +var heRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0011, 0x001d, 0x0049, 0x0059, 0x0078, 0x0084, 0x0090, + 0x009c, 0x00a8, 0x00bc, 0x00cc, 0x00e9, 0x00f7, 0x0107, 0x0111, + 0x0122, 0x0134, 0x0155, 0x0161, 0x016d, 0x0177, 0x018e, 0x019c, + 0x01a8, 0x01b6, 0x01be, 0x01d9, 0x01e5, 0x01f1, 0x01ff, 0x022d, + 0x0237, 0x0248, 0x0252, 0x0261, 0x0271, 0x027d, 0x0285, 0x028d, + 0x02ad, 0x02c8, 0x02f5, 0x0310, 0x031c, 0x032d, 0x033a, 0x0344, + 0x034e, 0x0354, 0x0364, 0x037b, 0x038e, 0x0396, 0x03a3, 0x03b1, + 0x03c6, 0x03d4, 0x03f3, 0x03ff, 0x0414, 0x0422, 0x042c, 0x043c, + // Entry 40 - 7F + 0x0465, 0x0475, 0x048c, 0x049a, 0x04a8, 0x04b2, 0x04c9, 0x04d9, + 0x04e1, 0x04ef, 0x050a, 0x050a, 0x0516, 0x0520, 0x0533, 0x0545, + 0x0554, 0x055c, 0x0564, 0x057f, 0x0589, 0x0597, 0x05b0, 0x05ba, + 0x05c2, 0x05d0, 0x05de, 0x05e8, 0x05f2, 0x0602, 0x061d, 0x0625, + 0x066f, 0x067d, 0x0685, 0x069a, 0x06a4, 0x06e2, 0x0700, 0x070e, + 0x071c, 0x0726, 0x0734, 0x074d, 0x075f, 0x076b, 0x0775, 0x0782, + 0x078a, 0x07c9, 0x07d3, 0x07dd, 0x07e9, 0x07f5, 0x07ff, 0x080d, + 0x0815, 0x081b, 0x0823, 0x0835, 0x0843, 0x0853, 0x085f, 0x087b, + // Entry 80 - BF + 0x0896, 0x08b1, 0x08bb, 0x08cc, 0x08d8, 0x08e0, 0x08ea, 0x08fb, + 0x090f, 0x091e, 0x092a, 0x0934, 0x093c, 0x094e, 0x0958, 0x095e, + 0x0968, 0x0972, 0x0980, 0x0990, 0x099d, 0x09a9, 0x09b8, 0x09c6, + 0x09ce, 0x09e7, 0x09f7, 0x0a2c, 0x0a50, 0x0a5e, 0x0a70, 0x0a7e, + 0x0a86, 0x0a98, 0x0ab5, 0x0ac1, 0x0acd, 0x0ad7, 0x0ae5, 0x0af1, + 0x0b0a, 0x0b14, 0x0b27, 0x0b33, 0x0b43, 0x0b4d, 0x0b5d, 0x0b65, + 0x0b6f, 0x0b79, 0x0b8a, 0x0b94, 0x0b9c, 0x0ba2, 0x0bc1, 0x0be1, + 0x0bf5, 0x0c01, 0x0c0b, 0x0c29, 0x0c3c, 0x0c51, 0x0c72, 0x0c80, + // Entry C0 - FF + 0x0c88, 0x0c96, 0x0c9e, 0x0cc3, 0x0cd1, 0x0cdd, 0x0ce7, 0x0cf1, + 0x0cfd, 0x0d12, 0x0d21, 0x0d32, 0x0d3a, 0x0d46, 0x0d54, 0x0d63, + 0x0d71, 0x0d95, 0x0da3, 0x0db8, 0x0dc7, 0x0dcf, 0x0ddb, 0x0de7, + 0x0df8, 0x0e1a, 0x0e2b, 0x0e3c, 0x0e46, 0x0e56, 0x0e70, 0x0e90, + 0x0e98, 0x0ecb, 0x0ed3, 0x0edf, 0x0ef1, 0x0efd, 0x0f10, 0x0f24, + 0x0f32, 0x0f3c, 0x0f48, 0x0f63, 0x0f6f, 0x0f7d, 0x0f89, 0x0f99, + 0x0fa5, 0x0fdd, 0x0ffa, 0x100f, 0x1021, 0x1033, 0x1041, 0x1069, + 0x1077, 0x109b, 0x10c9, 0x10d7, 0x10e3, 0x1103, 0x110d, 0x1119, + // Entry 100 - 13F + 0x1121, 0x112b, 0x1140, 0x114a, 0x115a, 0x1170, 0x117a, 0x1186, + 0x119b, 0x11b0, 0x11c0, 0x11d5, 0x11ea, 0x11ff, 0x1214, 0x1229, + 0x1247, 0x1253, 0x126e, 0x1289, 0x129a, 0x12ab, 0x12c6, 0x12db, + 0x12ef, 0x12fb, 0x1316, 0x1326, 0x132e, 0x133f, 0x1350, 0x135c, + 0x1371, 0x1386, 0x139b, 0x13b6, +} // Size: 608 bytes + +const hiRegionStr string = "" + // Size: 8766 bytes + "असेंशन द्वीपएंडोरासंयुक्त अरब अमीरातअफ़गानिस्तानएंटिगुआ और बरबुडाएंग्विल" + + "ाअल्बानियाआर्मेनियाअंगोलाअंटार्कटिकाअर्जेंटीनाअमेरिकी समोआऑस्ट्रियाऑस्" + + "ट्रेलियाअरूबाएलैंड द्वीपसमूहअज़रबैजानबोस्निया और हर्ज़ेगोविनाबारबाडोसब" + + "ांग्लादेशबेल्जियमबुर्किना फ़ासोबुल्गारियाबहरीनबुरुंडीबेनिनसेंट बार्थेल" + + "ेमीबरमूडाब्रूनेईबोलीवियाकैरिबियन नीदरलैंडब्राज़ीलबहामासभूटानबोवेत द्वी" + + "पबोत्स्वानाबेलारूसबेलीज़कनाडाकोकोस (कीलिंग) द्वीपसमूहकांगो - किंशासामध" + + "्य अफ़्रीकी गणराज्यकांगो – ब्राज़ाविलस्विट्ज़रलैंडकोट डी आइवरकुक द्वीप" + + "समूहचिलीकैमरूनचीनकोलंबियाक्लिपर्टन द्वीपकोस्टारिकाक्यूबाकेप वर्डक्यूरा" + + "साओक्रिसमस द्वीपसाइप्रसचेक गणराज्यजर्मनीडिएगो गार्सियाजिबूतीडेनमार्कडो" + + "मिनिकाडोमिनिकन गणराज्यअल्जीरियासेउटा और मेलिलाइक्वाडोरएस्टोनियामिस्रपश" + + "्चिमी सहाराइरिट्रियास्पेनइथियोपियायूरोपीय संघफ़िनलैंडफ़िजीफ़ॉकलैंड द्व" + + "ीपसमूहमाइक्रोनेशियाफ़ेरो द्वीपसमूहफ़्रांसगैबॉनयूनाइटेड किंगडमग्रेनाडाज" + + "ॉर्जियाफ़्रेंच गयानागर्नसीघानाजिब्राल्टरग्रीनलैंडगाम्बियागिनीग्वाडेलूप" + + "इक्वेटोरियल गिनीयूनानदक्षिण जॉर्जिया और दक्षिण सैंडविच द्वीपसमूहग्वाटे" + + "मालागुआमगिनी-बिसाउगयानाहाँग काँग (चीन विशेष प्रशासनिक क्षेत्र)हर्ड द्व" + + "ीप और मैकडोनॉल्ड द्वीपसमूहहोंडूरासक्रोएशियाहैतीहंगरीकैनेरी द्वीपसमूहइं" + + "डोनेशियाआयरलैंडइज़राइलआइल ऑफ़ मैनभारतब्रिटिश हिंद महासागरीय क्षेत्रइरा" + + "कईरानआइसलैंडइटलीजर्सीजमैकाजॉर्डनजापानकेन्याकिर्गिज़स्तानकंबोडियाकिरिबा" + + "तीकोमोरोससेंट किट्स और नेविसउत्तर कोरियादक्षिण कोरियाकुवैतकेमैन द्वीपस" + + "मूहकज़ाखस्तानलाओसलेबनानसेंट लूसियालिचेंस्टीनश्रीलंकालाइबेरियालेसोथोलिथ" + + "ुआनियालग्ज़मबर्गलातवियालीबियामोरक्कोमोनाकोमॉल्डोवामोंटेनेग्रोसेंट मार्" + + "टिनमेडागास्करमार्शल द्वीपसमूहमैसिडोनियामालीम्यांमार (बर्मा)मंगोलियामका" + + "ऊ (विशेष प्रशासनिक क्षेत्र चीन)उत्तरी मारियाना द्वीपसमूहमार्टीनिकमॉरिट" + + "ानियामोंटसेरातमाल्टामॉरिशसमालदीवमलावीमैक्सिकोमलेशियामोज़ांबिकनामीबियान" + + "्यू कैलेडोनियानाइजरनॉरफ़ॉक द्वीपनाइजीरियानिकारागुआनीदरलैंडनॉर्वेनेपालन" + + "ाउरुनीयून्यूज़ीलैंडओमानपनामापेरूफ़्रेंच पोलिनेशियापापुआ न्यू गिनीफ़िलि" + + "पींसपाकिस्तानपोलैंडसेंट पिएरे और मिक्वेलानपिटकैर्न द्वीपसमूहपोर्टो रिक" + + "ोफ़िलिस्तीनी क्षेत्रपुर्तगालपलाऊपेराग्वेक़तरआउटलाइंग ओशिनियारियूनियनरो" + + "मानियासर्बियारूसरवांडासऊदी अरबसोलोमन द्वीपसमूहसेशेल्ससूडानस्वीडनसिंगाप" + + "ुरसेंट हेलेनास्लोवेनियास्वालबार्ड और जान मायेनस्लोवाकियासिएरा लियोनसैन" + + " मेरीनोसेनेगलसोमालियासूरीनामदक्षिण सूडानसाओ टोम और प्रिंसिपेअल सल्वाडोरस" + + "िंट मार्टिनसीरियास्वाज़ीलैंडत्रिस्टान डा कुनातुर्क और कैकोज़ द्वीपसमूह" + + "चाडफ़्रांसीसी दक्षिणी क्षेत्रटोगोथाईलैंडताज़िकिस्तानतोकेलाउतिमोर-लेस्त" + + "तुर्कमेनिस्तानट्यूनीशियाटोंगातुर्कीत्रिनिदाद और टोबैगोतुवालूताइवानतंज़" + + "ानियायूक्रेनयुगांडायू.एस. आउटलाइंग द्वीपसमूहसंयुक्त राष्ट्रसंयुक्त राज" + + "्यउरूग्वेउज़्बेकिस्तानवेटिकन सिटीसेंट विंसेंट और ग्रेनाडाइंसवेनेज़ुएला" + + "ब्रिटिश वर्जिन द्वीपसमूहयू.एस. वर्जिन द्वीपसमूहवियतनामवनुआतूवालिस और फ" + + "़्यूचूनासमोआकोसोवोयमनमायोतेदक्षिण अफ़्रीकाज़ाम्बियाज़िम्बाब्वेअज्ञात क" + + "्षेत्रविश्वअफ़्रीकाउत्तर अमेरिकादक्षिण अमेरिकाओशिआनियापश्चिमी अफ़्रीका" + + "मध्य अमेरिकापूर्वी अफ़्रीकाउत्तरी अफ़्रीकामध्य अफ़्रीकादक्षिणी अफ़्रीक" + + "ाअमेरिकाज़उत्तरी अमेरिकाकैरिबियनपूर्वी एशियादक्षिणी एशियादक्षिण-पूर्व " + + "एशियादक्षिणी यूरोपऑस्ट्रेलेशियामेलानेशियामाइक्रोनेशियाई क्षेत्रपोलीनेश" + + "ियाएशियामध्य एशियापश्चिमी एशियायूरोपपूर्वी यूरोपउत्तरी यूरोपपश्चिमी यू" + + "रोपलैटिन अमेरिका" + +var hiRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0022, 0x0034, 0x0066, 0x008a, 0x00b9, 0x00d1, 0x00ec, + 0x0107, 0x0119, 0x013a, 0x0158, 0x017a, 0x0195, 0x01b6, 0x01c5, + 0x01f0, 0x020b, 0x024f, 0x0267, 0x0285, 0x029d, 0x02c5, 0x02e3, + 0x02f2, 0x0307, 0x0316, 0x0341, 0x0353, 0x0368, 0x0380, 0x03b1, + 0x03c9, 0x03db, 0x03ea, 0x0409, 0x0427, 0x043c, 0x044e, 0x045d, + 0x049d, 0x04c4, 0x04ff, 0x0531, 0x0558, 0x0575, 0x059a, 0x05a6, + 0x05b8, 0x05c1, 0x05d9, 0x0604, 0x0622, 0x0634, 0x064a, 0x0665, + 0x068a, 0x069f, 0x06be, 0x06d0, 0x06f8, 0x070a, 0x0722, 0x073a, + // Entry 40 - 7F + 0x0768, 0x0783, 0x07ac, 0x07c4, 0x07df, 0x07ee, 0x0813, 0x082e, + 0x083d, 0x0858, 0x0877, 0x0877, 0x088f, 0x089e, 0x08d2, 0x08f9, + 0x0924, 0x0939, 0x0948, 0x0973, 0x098b, 0x09a3, 0x09c8, 0x09da, + 0x09e6, 0x0a04, 0x0a1f, 0x0a37, 0x0a43, 0x0a5e, 0x0a8c, 0x0a9b, + 0x0b12, 0x0b30, 0x0b3c, 0x0b58, 0x0b67, 0x0bce, 0x0c2c, 0x0c44, + 0x0c5f, 0x0c6b, 0x0c7a, 0x0ca8, 0x0cc6, 0x0cdb, 0x0cf0, 0x0d0d, + 0x0d19, 0x0d6d, 0x0d79, 0x0d85, 0x0d9a, 0x0da6, 0x0db5, 0x0dc4, + 0x0dd6, 0x0de5, 0x0df7, 0x0e1e, 0x0e36, 0x0e4e, 0x0e63, 0x0e96, + // Entry 80 - BF + 0x0eb8, 0x0edd, 0x0eec, 0x0f17, 0x0f35, 0x0f41, 0x0f53, 0x0f72, + 0x0f90, 0x0fa8, 0x0fc3, 0x0fd5, 0x0ff0, 0x100e, 0x1023, 0x1035, + 0x104a, 0x105c, 0x1074, 0x1095, 0x10b7, 0x10d5, 0x1103, 0x1121, + 0x112d, 0x1157, 0x116f, 0x11c9, 0x1210, 0x122b, 0x1249, 0x1264, + 0x1276, 0x1288, 0x129a, 0x12a9, 0x12c1, 0x12d6, 0x12f1, 0x1309, + 0x1334, 0x1343, 0x1368, 0x1383, 0x139e, 0x13b6, 0x13c8, 0x13d7, + 0x13e6, 0x13f2, 0x1413, 0x141f, 0x142e, 0x143a, 0x146e, 0x1497, + 0x14b2, 0x14cd, 0x14df, 0x151e, 0x1552, 0x1571, 0x15a8, 0x15c0, + // Entry C0 - FF + 0x15cc, 0x15e4, 0x15f0, 0x161e, 0x1636, 0x164e, 0x1663, 0x166c, + 0x167e, 0x1694, 0x16c2, 0x16d7, 0x16e6, 0x16f8, 0x1710, 0x172f, + 0x174d, 0x178c, 0x17aa, 0x17c9, 0x17e5, 0x17f7, 0x180f, 0x1824, + 0x1846, 0x187c, 0x189b, 0x18bd, 0x18cf, 0x18f0, 0x191f, 0x1964, + 0x196d, 0x19b7, 0x19c3, 0x19d8, 0x19fc, 0x1a11, 0x1a30, 0x1a5a, + 0x1a78, 0x1a87, 0x1a99, 0x1ace, 0x1ae0, 0x1af2, 0x1b0d, 0x1b22, + 0x1b37, 0x1b7a, 0x1ba5, 0x1bca, 0x1bdf, 0x1c06, 0x1c25, 0x1c70, + 0x1c8e, 0x1cd2, 0x1d0f, 0x1d24, 0x1d36, 0x1d68, 0x1d74, 0x1d86, + // Entry 100 - 13F + 0x1d8f, 0x1da1, 0x1dcc, 0x1de7, 0x1e08, 0x1e30, 0x1e3f, 0x1e57, + 0x1e7c, 0x1ea4, 0x1ebc, 0x1eea, 0x1f0c, 0x1f37, 0x1f62, 0x1f87, + 0x1fb5, 0x1fd0, 0x1ff8, 0x2010, 0x2032, 0x2057, 0x2089, 0x20ae, + 0x20d5, 0x20f3, 0x2133, 0x2151, 0x2160, 0x217c, 0x21a1, 0x21b0, + 0x21d2, 0x21f4, 0x2219, 0x223e, +} // Size: 608 bytes + +const hrRegionStr string = "" + // Size: 3142 bytes + "Otok AscensionAndoraUjedinjeni Arapski EmiratiAfganistanAntigva i Barbud" + + "aAngvilaAlbanijaArmenijaAngolaAntarktikaArgentinaAmerička SamoaAustrijaA" + + "ustralijaArubaÅlandski otociAzerbajdžanBosna i HercegovinaBarbadosBangla" + + "dešBelgijaBurkina FasoBugarskaBahreinBurundiBeninSaint BarthélemyBermudi" + + "BrunejBolivijaKaripski otoci NizozemskeBrazilBahamiButanOtok BouvetBocva" + + "naBjelorusijaBelizeKanadaKokosovi (Keelingovi) otociKongo - KinshasaSred" + + "njoafrička RepublikaKongo - BrazzavilleŠvicarskaObala BjelokostiCookovi " + + "OtociČileKamerunKinaKolumbijaOtok ClippertonKostarikaKubaZelenortska Rep" + + "ublikaCuraçaoBožićni otokCiparČeška RepublikaNjemačkaDiego GarciaDžibuti" + + "DanskaDominikaDominikanska RepublikaAlžirCeuta i MelillaEkvadorEstonijaE" + + "gipatZapadna SaharaEritrejaŠpanjolskaEtiopijaEuropska unijaFinskaFidžiFa" + + "lklandski otociMikronezijaFarski otociFrancuskaGabonUjedinjeno Kraljevst" + + "voGrenadaGruzijaFrancuska GijanaGuernseyGanaGibraltarGrenlandGambijaGvin" + + "ejaGuadalupeEkvatorska GvinejaGrčkaJužna Georgija i Južni Sendvički Otoc" + + "iGvatemalaGuamGvineja BisauGvajanaPUP Hong Kong KinaOtoci Heard i McDona" + + "ldHondurasHrvatskaHaitiMađarskaKanarski otociIndonezijaIrskaIzraelOtok M" + + "anIndijaBritanski Indijskooceanski teritorijIrakIranIslandItalijaJerseyJ" + + "amajkaJordanJapanKenijaKirgistanKambodžaKiribatiKomoriSveti Kristofor i " + + "NevisSjeverna KorejaJužna KorejaKuvajtKajmanski otociKazahstanLaosLibano" + + "nSveta LucijaLihtenštajnŠri LankaLiberijaLesotoLitvaLuksemburgLatvijaLib" + + "ijaMarokoMonakoMoldavijaCrna GoraSaint MartinMadagaskarMaršalovi OtociMa" + + "kedonijaMaliMjanmar (Burma)MongolijaPUP Makao KinaSjevernomarijanski oto" + + "ciMartiniqueMauretanijaMontserratMaltaMauricijusMaldiviMalaviMeksikoMale" + + "zijaMozambikNamibijaNova KaledonijaNigerOtok NorfolkNigerijaNikaragvaNiz" + + "ozemskaNorveškaNepalNauruNiueNovi ZelandOmanPanamaPeruFrancuska Polinezi" + + "jaPapua Nova GvinejaFilipiniPakistanPoljskaSaint-Pierre-et-MiquelonOtoci" + + " PitcairnPortorikoPalestinsko PodručjePortugalPalauParagvajKatarVanjska " + + "područja OceanijeRéunionRumunjskaSrbijaRusijaRuandaSaudijska ArabijaSalo" + + "monski OtociSejšeliSudanŠvedskaSingapurSveta HelenaSlovenijaSvalbard i J" + + "an MayenSlovačkaSijera LeoneSan MarinoSenegalSomalijaSurinamJužni SudanS" + + "veti Toma i PrincipSalvadorSint MaartenSirijaSvaziTristan da CunhaOtoci " + + "Turks i CaicosČadFrancuski južni i antarktički teritorijiTogoTajlandTadž" + + "ikistanTokelauTimor-LesteTurkmenistanTunisTongaTurskaTrinidad i TobagoTu" + + "valuTajvanTanzanijaUkrajinaUgandaMali udaljeni otoci SAD-aUjedinjeni nar" + + "odiSjedinjene Američke DržaveUrugvajUzbekistanVatikanski GradSveti Vince" + + "nt i GrenadiniVenezuelaBritanski Djevičanski otociAmerički Djevičanski o" + + "tociVijetnamVanuatuWallis i FutunaSamoaKosovoJemenMayotteJužnoafrička Re" + + "publikaZambijaZimbabvenepoznato područjeSvijetAfrikaSjevernoamerički kon" + + "tinentJužna AmerikaOceanijaZapadna AfrikaCentralna AmerikaIstočna Afrika" + + "Sjeverna AfrikaSredišnja AfrikaJužna AfrikaAmerikeSjeverna AmerikaKaribi" + + "Istočna AzijaJužna AzijaJugoistočna AzijaJužna EuropaAustralazijaMelanez" + + "ijaMikronezijsko područjePolinezijaAzijaSrednja AzijaZapadna AzijaEuropa" + + "Istočna EuropaSjeverna EuropaZapadna EuropaLatinska Amerika" + +var hrRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x0014, 0x002e, 0x0038, 0x0049, 0x0050, 0x0058, + 0x0060, 0x0066, 0x0070, 0x0079, 0x0088, 0x0090, 0x009a, 0x009f, + 0x00ae, 0x00ba, 0x00cd, 0x00d5, 0x00df, 0x00e6, 0x00f2, 0x00fa, + 0x0101, 0x0108, 0x010d, 0x011e, 0x0125, 0x012b, 0x0133, 0x014c, + 0x0152, 0x0158, 0x015d, 0x0168, 0x016f, 0x017a, 0x0180, 0x0186, + 0x01a1, 0x01b1, 0x01ca, 0x01dd, 0x01e7, 0x01f7, 0x0204, 0x0209, + 0x0210, 0x0214, 0x021d, 0x022c, 0x0235, 0x0239, 0x024e, 0x0256, + 0x0264, 0x0269, 0x027a, 0x0283, 0x028f, 0x0297, 0x029d, 0x02a5, + // Entry 40 - 7F + 0x02bb, 0x02c1, 0x02d0, 0x02d7, 0x02df, 0x02e5, 0x02f3, 0x02fb, + 0x0306, 0x030e, 0x031c, 0x031c, 0x0322, 0x0328, 0x0339, 0x0344, + 0x0350, 0x0359, 0x035e, 0x0374, 0x037b, 0x0382, 0x0392, 0x039a, + 0x039e, 0x03a7, 0x03af, 0x03b6, 0x03bd, 0x03c6, 0x03d8, 0x03de, + 0x0407, 0x0410, 0x0414, 0x0421, 0x0428, 0x043a, 0x0450, 0x0458, + 0x0460, 0x0465, 0x046e, 0x047c, 0x0486, 0x048b, 0x0491, 0x0499, + 0x049f, 0x04c3, 0x04c7, 0x04cb, 0x04d1, 0x04d8, 0x04de, 0x04e5, + 0x04eb, 0x04f0, 0x04f6, 0x04ff, 0x0508, 0x0510, 0x0516, 0x052d, + // Entry 80 - BF + 0x053c, 0x0549, 0x054f, 0x055e, 0x0567, 0x056b, 0x0572, 0x057e, + 0x058a, 0x0594, 0x059c, 0x05a2, 0x05a7, 0x05b1, 0x05b8, 0x05be, + 0x05c4, 0x05ca, 0x05d3, 0x05dc, 0x05e8, 0x05f2, 0x0602, 0x060c, + 0x0610, 0x061f, 0x0628, 0x0636, 0x064e, 0x0658, 0x0663, 0x066d, + 0x0672, 0x067c, 0x0683, 0x0689, 0x0690, 0x0698, 0x06a0, 0x06a8, + 0x06b7, 0x06bc, 0x06c8, 0x06d0, 0x06d9, 0x06e3, 0x06ec, 0x06f1, + 0x06f6, 0x06fa, 0x0705, 0x0709, 0x070f, 0x0713, 0x0727, 0x0739, + 0x0741, 0x0749, 0x0750, 0x0768, 0x0776, 0x077f, 0x0794, 0x079c, + // Entry C0 - FF + 0x07a1, 0x07a9, 0x07ae, 0x07c8, 0x07d0, 0x07d9, 0x07df, 0x07e5, + 0x07eb, 0x07fc, 0x080c, 0x0814, 0x0819, 0x0821, 0x0829, 0x0835, + 0x083e, 0x0852, 0x085b, 0x0867, 0x0871, 0x0878, 0x0880, 0x0887, + 0x0893, 0x08a7, 0x08af, 0x08bb, 0x08c1, 0x08c6, 0x08d6, 0x08ea, + 0x08ee, 0x0918, 0x091c, 0x0923, 0x092f, 0x0936, 0x0941, 0x094d, + 0x0952, 0x0957, 0x095d, 0x096e, 0x0974, 0x097a, 0x0983, 0x098b, + 0x0991, 0x09aa, 0x09bb, 0x09d7, 0x09de, 0x09e8, 0x09f7, 0x0a10, + 0x0a19, 0x0a35, 0x0a51, 0x0a59, 0x0a60, 0x0a6f, 0x0a74, 0x0a7a, + // Entry 100 - 13F + 0x0a7f, 0x0a86, 0x0a9e, 0x0aa5, 0x0aad, 0x0ac0, 0x0ac6, 0x0acc, + 0x0ae7, 0x0af5, 0x0afd, 0x0b0b, 0x0b1c, 0x0b2b, 0x0b3a, 0x0b4b, + 0x0b58, 0x0b5f, 0x0b6f, 0x0b75, 0x0b83, 0x0b8f, 0x0ba1, 0x0bae, + 0x0bba, 0x0bc4, 0x0bdb, 0x0be5, 0x0bea, 0x0bf7, 0x0c04, 0x0c0a, + 0x0c19, 0x0c28, 0x0c36, 0x0c46, +} // Size: 608 bytes + +const huRegionStr string = "" + // Size: 3325 bytes + "Ascension-szigetAndorraEgyesült Arab EmírségekAfganisztánAntigua és Barb" + + "udaAnguillaAlbániaÖrményországAngolaAntarktiszArgentínaAmerikai SzamoaAu" + + "sztriaAusztráliaArubaÅland-szigetekAzerbajdzsánBosznia-HercegovinaBarbad" + + "osBangladesBelgiumBurkina FasoBulgáriaBahreinBurundiBeninSaint-Barthélem" + + "yBermudaBruneiBolíviaHolland Karib-térségBrazíliaBahama-szigetekBhutánBo" + + "uvet-szigetBotswanaBelaruszBelizeKanadaKókusz (Keeling)-szigetekKongó - " + + "KinshasaKözép-afrikai KöztársaságKongó - BrazzavilleSvájcElefántcsontpar" + + "tCook-szigetekChileKamerunKínaKolumbiaClipperton-szigetCosta RicaKubaZöl" + + "d-foki KöztársaságCuraçaoKarácsony-szigetCiprusCsehországNémetországDieg" + + "o GarciaDzsibutiDániaDominikaDominikai KöztársaságAlgériaCeuta és Melill" + + "aEcuadorÉsztországEgyiptomNyugat-SzaharaEritreaSpanyolországEtiópiaEuróp" + + "ai UnióFinnországFidzsiFalkland-szigetekMikronéziaFeröer-szigetekFrancia" + + "országGabonEgyesült KirályságGrenadaGrúziaFrancia GuyanaGuernseyGhánaGib" + + "raltárGrönlandGambiaGuineaGuadeloupeEgyenlítői-GuineaGörögországDéli-Geo" + + "rgia és Déli-Sandwich-szigetekGuatemalaGuamBissau-GuineaGuyanaHongkong K" + + "KTHeard-sziget és McDonald-szigetekHondurasHorvátországHaitiMagyarország" + + "Kanári-szigetekIndonéziaÍrországIzraelMan-szigetIndiaBrit Indiai-óceáni " + + "TerületIrakIránIzlandOlaszországJerseyJamaicaJordániaJapánKenyaKirgizisz" + + "tánKambodzsaKiribatiComore-szigetekSaint Kitts és NevisÉszak-KoreaDél-Ko" + + "reaKuvaitKajmán-szigetekKazahsztánLaoszLibanonSaint LuciaLiechtensteinSr" + + "í LankaLibériaLesothoLitvániaLuxemburgLettországLíbiaMarokkóMonacoMoldo" + + "vaMontenegróSaint MartinMadagaszkárMarshall-szigetekMacedóniaMaliMianmar" + + " (Burma)MongóliaMakaó KKTÉszaki Mariana-szigetekMartiniqueMauritániaMont" + + "serratMáltaMauritiusMaldív-szigetekMalawiMexikóMalajziaMozambikNamíbiaÚj" + + "-KaledóniaNigerNorfolk-szigetNigériaNicaraguaHollandiaNorvégiaNepálNauru" + + "NiueÚj-ZélandOmánPanamaPeruFrancia PolinéziaPápua Új-GuineaFülöp-szigete" + + "kPakisztánLengyelországSaint-Pierre és MiquelonPitcairn-szigetekPuerto R" + + "icoPalesztin TerületPortugáliaPalauParaguayKatarKülső-ÓceániaRéunionRomá" + + "niaSzerbiaOroszországRuandaSzaúd-ArábiaSalamon-szigetekSeychelle-szigete" + + "kSzudánSvédországSzingapúrSzent IlonaSzlovéniaSvalbard és Jan MayenSzlov" + + "ákiaSierra LeoneSan MarinoSzenegálSzomáliaSurinameDél-SzudánSao Tomé és" + + " PríncipeSalvadorSint MaartenSzíriaSzváziföldTristan da CunhaTurks- és C" + + "aicos-szigetekCsádFrancia Déli TerületekTogoThaiföldTádzsikisztánTokelau" + + "Kelet-TimorTürkmenisztánTunéziaTongaTörökországTrinidad és TobagoTuvaluT" + + "ajvanTanzániaUkrajnaUgandaAz Amerikai Egyesült Államok lakatlan külbirto" + + "kaiENSZEgyesült ÁllamokUruguayÜzbegisztánVatikánSaint Vincent és a Grena" + + "dine-szigetekVenezuelaBrit Virgin-szigetekAmerikai Virgin-szigetekVietna" + + "mVanuatuWallis és FutunaSzamoaKoszovóJemenMayotteDél-afrikai Köztársaság" + + "ZambiaZimbabweIsmeretlen körzetVilágAfrikaÉszak-AmerikaDél-AmerikaÓceáni" + + "aNyugat-AfrikaKözép-AmerikaKelet-AfrikaÉszak-AfrikaKözép-AfrikaAfrika dé" + + "li részeAmerikaAmerika északi részeKarib-térségKelet-ÁzsiaDél-ÁzsiaDélke" + + "let-ÁzsiaDél-EurópaAusztrálázsiaMelanéziaMikronéziai régióPolinéziaÁzsia" + + "Közép-ÁzsiaNyugat-ÁzsiaEurópaKelet-EurópaÉszak-EurópaNyugat-EurópaLatin-" + + "Amerika" + +var huRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x0031, 0x003d, 0x0050, 0x0058, 0x0060, + 0x006f, 0x0075, 0x007f, 0x0089, 0x0098, 0x00a0, 0x00ab, 0x00b0, + 0x00bf, 0x00cc, 0x00df, 0x00e7, 0x00f0, 0x00f7, 0x0103, 0x010c, + 0x0113, 0x011a, 0x011f, 0x0130, 0x0137, 0x013d, 0x0145, 0x015b, + 0x0164, 0x0173, 0x017a, 0x0187, 0x018f, 0x0197, 0x019d, 0x01a3, + 0x01bd, 0x01ce, 0x01ec, 0x0200, 0x0206, 0x0217, 0x0224, 0x0229, + 0x0230, 0x0235, 0x023d, 0x024e, 0x0258, 0x025c, 0x0275, 0x027d, + 0x028e, 0x0294, 0x029f, 0x02ac, 0x02b8, 0x02c0, 0x02c6, 0x02ce, + // Entry 40 - 7F + 0x02e6, 0x02ee, 0x02ff, 0x0306, 0x0312, 0x031a, 0x0328, 0x032f, + 0x033d, 0x0345, 0x0353, 0x0353, 0x035e, 0x0364, 0x0375, 0x0380, + 0x0390, 0x039e, 0x03a3, 0x03b8, 0x03bf, 0x03c6, 0x03d4, 0x03dc, + 0x03e2, 0x03ec, 0x03f5, 0x03fb, 0x0401, 0x040b, 0x041e, 0x042c, + 0x0455, 0x045e, 0x0462, 0x046f, 0x0475, 0x0481, 0x04a3, 0x04ab, + 0x04b9, 0x04be, 0x04cb, 0x04db, 0x04e5, 0x04ef, 0x04f5, 0x04ff, + 0x0504, 0x0521, 0x0525, 0x052a, 0x0530, 0x053c, 0x0542, 0x0549, + 0x0552, 0x0558, 0x055d, 0x056a, 0x0573, 0x057b, 0x058a, 0x059f, + // Entry 80 - BF + 0x05ab, 0x05b5, 0x05bb, 0x05cb, 0x05d6, 0x05db, 0x05e2, 0x05ed, + 0x05fa, 0x0604, 0x060c, 0x0613, 0x061c, 0x0625, 0x0630, 0x0636, + 0x063e, 0x0644, 0x064b, 0x0656, 0x0662, 0x066e, 0x067f, 0x0689, + 0x068d, 0x069c, 0x06a5, 0x06af, 0x06c7, 0x06d1, 0x06dc, 0x06e6, + 0x06ec, 0x06f5, 0x0705, 0x070b, 0x0712, 0x071a, 0x0722, 0x072a, + 0x0738, 0x073d, 0x074b, 0x0753, 0x075c, 0x0765, 0x076e, 0x0774, + 0x0779, 0x077d, 0x0788, 0x078d, 0x0793, 0x0797, 0x07a9, 0x07ba, + 0x07ca, 0x07d4, 0x07e2, 0x07fb, 0x080c, 0x0817, 0x0829, 0x0834, + // Entry C0 - FF + 0x0839, 0x0841, 0x0846, 0x0857, 0x085f, 0x0867, 0x086e, 0x087a, + 0x0880, 0x088e, 0x089e, 0x08b0, 0x08b7, 0x08c3, 0x08cd, 0x08d8, + 0x08e2, 0x08f8, 0x0902, 0x090e, 0x0918, 0x0921, 0x092a, 0x0932, + 0x093e, 0x0955, 0x095d, 0x0969, 0x0970, 0x097c, 0x098c, 0x09a6, + 0x09ab, 0x09c3, 0x09c7, 0x09d0, 0x09df, 0x09e6, 0x09f1, 0x0a00, + 0x0a08, 0x0a0d, 0x0a1b, 0x0a2e, 0x0a34, 0x0a3a, 0x0a43, 0x0a4a, + 0x0a50, 0x0a84, 0x0a88, 0x0a9a, 0x0aa1, 0x0aae, 0x0ab6, 0x0adc, + 0x0ae5, 0x0af9, 0x0b11, 0x0b18, 0x0b1f, 0x0b30, 0x0b36, 0x0b3e, + // Entry 100 - 13F + 0x0b43, 0x0b4a, 0x0b65, 0x0b6b, 0x0b73, 0x0b85, 0x0b8b, 0x0b91, + 0x0b9f, 0x0bab, 0x0bb4, 0x0bc1, 0x0bd0, 0x0bdc, 0x0be9, 0x0bf7, + 0x0c0a, 0x0c11, 0x0c27, 0x0c35, 0x0c41, 0x0c4c, 0x0c5c, 0x0c68, + 0x0c77, 0x0c81, 0x0c95, 0x0c9f, 0x0ca5, 0x0cb3, 0x0cc0, 0x0cc7, + 0x0cd4, 0x0ce2, 0x0cf0, 0x0cfd, +} // Size: 608 bytes + +const hyRegionStr string = "" + // Size: 6248 bytes + "Համբարձման կղզիԱնդորրաԱրաբական Միացյալ ԷմիրություններԱֆղանստանԱնտիգուա և" + + " ԲարբուդաԱնգուիլաԱլբանիաՀայաստանԱնգոլաԱնտարկտիդաԱրգենտինաԱմերիկյան Սամոա" + + "ԱվստրիաԱվստրալիաԱրուբաԱլանդյան կղզիներԱդրբեջանԲոսնիա և ՀերցեգովինաԲարբա" + + "դոսԲանգլադեշԲելգիաԲուրկինա ՖասոԲուլղարիաԲահրեյնԲուրունդիԲենինՍեն Բարտել" + + "միԲերմուդներԲրունեյԲոլիվիաԿարիբյան ՆիդեռլանդներԲրազիլիաԲահամաներԲութանԲ" + + "ուվե կղզիԲոթսվանաԲելառուսԲելիզԿանադաԿոկոսյան (Քիլինգ) կղզիներԿոնգո - Կի" + + "նշասաԿենտրոնական Աֆրիկյան ՀանրապետությունԿոնգո - ԲրազավիլՇվեյցարիաԿոտ դ" + + "’ԻվուարԿուկի կղզիներՉիլիԿամերունՉինաստանԿոլումբիաՔլիփերթոն կղզիԿոստա Ռ" + + "իկաԿուբաԿաբո ՎերդեԿյուրասաոՍուրբ Ծննդյան կղզիԿիպրոսՉեխիաԳերմանիաԴիեգո Գ" + + "արսիաՋիբութիԴանիաԴոմինիկաԴոմինիկյան ՀանրապետությունԱլժիրՍեուտա և Մելիլյ" + + "աԷկվադորԷստոնիաԵգիպտոսԱրևմտյան ՍահարաԷրիթրեաԻսպանիաԵթովպիաԵվրոպական Միո" + + "ւթյունՖինլանդիաՖիջիՖոլքլենդյան կղզիներՄիկրոնեզիաՖարերյան կղզիներՖրանսիա" + + "ԳաբոնՄիացյալ ԹագավորությունԳրենադաՎրաստանՖրանսիական ԳվիանաԳերնսիԳանաՋիբ" + + "րալթարԳրենլանդիաԳամբիաԳվինեաԳվադելուպաՀասարակածային ԳվինեաՀունաստանՀարա" + + "վային Ջորջիա և Հարավային Սենդվիչյան կղզիներԳվատեմալաԳուամԳվինեա-Բիսսաու" + + "ԳայանաՀոնկոնգի ՀՎՇՀերդ կղզի և ՄակԴոնալդի կղզիներՀոնդուրասԽորվաթիաՀայիթի" + + "ՀունգարիաԿանարյան կղզիներԻնդոնեզիաԻռլանդիաԻսրայելՄեն կղզիՀնդկաստանԲրիտա" + + "նական Տարածք Հնդկական ՕվկիանոսումԻրաքԻրանԻսլանդիաԻտալիաՋերսիՃամայկաՀորդ" + + "անանՃապոնիաՔենիաՂրղզստանԿամբոջաԿիրիբատիԿոմորյան կղզիներՍենտ Քիտս և Նևիս" + + "Հյուսիսային ԿորեաՀարավային ԿորեաՔուվեյթԿայմանյան կղզիներՂազախստանԼաոսԼի" + + "բանանՍենթ ԼյուսիաԼիխտենշտեյնՇրի ԼանկաԼիբերիաԼեսոտոԼիտվաԼյուքսեմբուրգԼատ" + + "վիաԼիբիաՄարոկկոՄոնակոՄոլդովաՉեռնոգորիաՍեն ՄարտենՄադագասկարՄարշալյան կղզ" + + "իներՄակեդոնիաՄալիՄյանմա (Բիրմա)ՄոնղոլիաՉինաստանի Մակաո ՀՎՇՀյուսիսային Մ" + + "արիանյան կղզիներՄարտինիկաՄավրիտանիաՄոնսեռատՄալթաՄավրիկիոսՄալդիվներՄալավ" + + "իՄեքսիկաՄալայզիաՄոզամբիկՆամիբիաՆոր ԿալեդոնիաՆիգերՆորֆոլկ կղզիՆիգերիաՆիկ" + + "արագուաՆիդեռլանդներՆորվեգիաՆեպալՆաուրուՆիուեՆոր ԶելանդիաՕմանՊանամաՊերու" + + "Ֆրանսիական ՊոլինեզիաՊապուա Նոր ԳվինեաՖիլիպիններՊակիստանԼեհաստանՍեն Պիեռ" + + " և ՄիքելոնՊիտկեռն կղզիներՊուերտո ՌիկոՊաղեստինյան տարածքներՊորտուգալիաՊալ" + + "աուՊարագվայԿատարԱրտաքին ՕվկիանիաՌեյունիոնՌումինիաՍերբիաՌուսաստանՌուանդա" + + "Սաուդյան ԱրաբիաՍողոմոնյան կղզիներՍեյշելներՍուդանՇվեդիաՍինգապուրՍուրբ Հե" + + "ղինեի կղզիՍլովենիաՍվալբարդ և Յան ՄայենՍլովակիաՍիեռա ԼեոնեՍան ՄարինոՍենե" + + "գալՍոմալիՍուրինամՀարավային ՍուդանՍան Տոմե և ՓրինսիպիՍալվադորՍինտ Մարտեն" + + "ՍիրիաՍվազիլենդՏրիստան դա ԿունյաԹըրքս և Կայկոս կղզիներՉադՖրանսիական Հարա" + + "վային ՏարածքներՏոգոԹայլանդՏաջիկստանՏոկելաուԹիմոր ԼեշտիԹուրքմենստանԹունի" + + "սՏոնգաԹուրքիաՏրինիդադ և ՏոբագոՏուվալուԹայվանՏանզանիաՈւկրաինաՈւգանդաԱրտա" + + "քին կղզիներ (ԱՄՆ)Միավորված ազգերի կազմակերպությունՄիացյալ ՆահանգներՈւրո" + + "ւգվայՈւզբեկստանՎատիկանՍենթ Վինսենթ և ԳրենադիններՎենեսուելաԲրիտանական Վի" + + "րջինյան կղզիներԱՄՆ Վիրջինյան կղզիներՎիետնամՎանուատուՈւոլիս և ՖուտունաՍա" + + "մոաԿոսովոԵմենՄայոտՀարավաֆրիկյան ՀանրապետությունԶամբիաԶիմբաբվեԱնհայտ տար" + + "ածաշրջանԱշխարհԱֆրիկաՀյուսիսային ԱմերիկաՀարավային ԱմերիկաՕվկիանիաԱրևմտյա" + + "ն ԱֆրիկաԿենտրոնական ԱմերիկաԱրևելյան ԱֆրիկաՀյուսիսային ԱֆրիկաԿենտրոնական" + + " ԱֆրիկաՀարավային ԱֆրիկաԱմերիկաՀյուսիսային Ամերիկա - ԱՄՆ և ԿանադաԿարիբներ" + + "Արևելյան ԱսիաՀարավային ԱսիաՀարավարևելյան ԱսիաՀարավային ԵվրոպաԱվստրալասի" + + "աՄելանեզիաՄիկրոնեզյան տարածաշրջանՊոլինեզիաԱսիաԿենտրոնական ԱսիաԱրևմտյան " + + "ԱսիաԵվրոպաԱրևելյան ԵվրոպաՀյուսիսային ԵվրոպաԱրևմտյան ԵվրոպաԼատինական Ամե" + + "րիկա" + +var hyRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001d, 0x002b, 0x0067, 0x0079, 0x009d, 0x00ad, 0x00bb, + 0x00cb, 0x00d7, 0x00eb, 0x00fd, 0x011a, 0x0128, 0x013a, 0x0146, + 0x0165, 0x0175, 0x019b, 0x01ab, 0x01bd, 0x01c9, 0x01e2, 0x01f4, + 0x0202, 0x0214, 0x021e, 0x0235, 0x0249, 0x0257, 0x0265, 0x028e, + 0x029e, 0x02b0, 0x02bc, 0x02cf, 0x02df, 0x02ef, 0x02f9, 0x0305, + 0x0333, 0x034e, 0x0394, 0x03b1, 0x03c3, 0x03db, 0x03f4, 0x03fc, + 0x040c, 0x041c, 0x042e, 0x0449, 0x045c, 0x0466, 0x0479, 0x048b, + 0x04ad, 0x04b9, 0x04c3, 0x04d3, 0x04ea, 0x04f8, 0x0502, 0x0512, + // Entry 40 - 7F + 0x0545, 0x054f, 0x056d, 0x057b, 0x0589, 0x0597, 0x05b4, 0x05c2, + 0x05d0, 0x05de, 0x0603, 0x0603, 0x0615, 0x061d, 0x0642, 0x0656, + 0x0675, 0x0683, 0x068d, 0x06b8, 0x06c6, 0x06d4, 0x06f5, 0x0701, + 0x0709, 0x071b, 0x072f, 0x073b, 0x0747, 0x075b, 0x0782, 0x0794, + 0x07ed, 0x07ff, 0x0809, 0x0824, 0x0830, 0x0847, 0x087f, 0x0891, + 0x08a1, 0x08ad, 0x08bf, 0x08de, 0x08f0, 0x0900, 0x090e, 0x091d, + 0x092f, 0x0978, 0x0980, 0x0988, 0x0998, 0x09a4, 0x09ae, 0x09bc, + 0x09cc, 0x09da, 0x09e4, 0x09f4, 0x0a02, 0x0a12, 0x0a31, 0x0a4e, + // Entry 80 - BF + 0x0a6f, 0x0a8c, 0x0a9a, 0x0abb, 0x0acd, 0x0ad5, 0x0ae3, 0x0afa, + 0x0b10, 0x0b21, 0x0b2f, 0x0b3b, 0x0b45, 0x0b5f, 0x0b6b, 0x0b75, + 0x0b83, 0x0b8f, 0x0b9d, 0x0bb1, 0x0bc4, 0x0bd8, 0x0bf9, 0x0c0b, + 0x0c13, 0x0c2c, 0x0c3c, 0x0c60, 0x0c98, 0x0caa, 0x0cbe, 0x0cce, + 0x0cd8, 0x0cea, 0x0cfc, 0x0d08, 0x0d16, 0x0d26, 0x0d36, 0x0d44, + 0x0d5d, 0x0d67, 0x0d7e, 0x0d8c, 0x0da0, 0x0db8, 0x0dc8, 0x0dd2, + 0x0de0, 0x0dea, 0x0e01, 0x0e09, 0x0e15, 0x0e1f, 0x0e46, 0x0e66, + 0x0e7a, 0x0e8a, 0x0e9a, 0x0ebb, 0x0ed8, 0x0eef, 0x0f18, 0x0f2e, + // Entry C0 - FF + 0x0f3a, 0x0f4a, 0x0f54, 0x0f73, 0x0f85, 0x0f95, 0x0fa1, 0x0fb3, + 0x0fc1, 0x0fde, 0x1001, 0x1013, 0x101f, 0x102b, 0x103d, 0x105f, + 0x106f, 0x1094, 0x10a4, 0x10b9, 0x10cc, 0x10da, 0x10e6, 0x10f6, + 0x1115, 0x1138, 0x1148, 0x115d, 0x1167, 0x1179, 0x1199, 0x11c2, + 0x11c8, 0x1202, 0x120a, 0x1218, 0x122a, 0x123a, 0x124f, 0x1267, + 0x1273, 0x127d, 0x128b, 0x12ab, 0x12bb, 0x12c7, 0x12d7, 0x12e7, + 0x12f5, 0x131b, 0x135b, 0x137c, 0x138e, 0x13a2, 0x13b0, 0x13e1, + 0x13f5, 0x142b, 0x1453, 0x1461, 0x1473, 0x1493, 0x149d, 0x14a9, + // Entry 100 - 13F + 0x14b1, 0x14bb, 0x14f4, 0x1500, 0x1510, 0x1533, 0x153f, 0x154b, + 0x1570, 0x1591, 0x15a1, 0x15be, 0x15e3, 0x1600, 0x1623, 0x1646, + 0x1665, 0x1673, 0x16b1, 0x16c1, 0x16da, 0x16f5, 0x1718, 0x1737, + 0x174d, 0x175f, 0x178c, 0x179e, 0x17a6, 0x17c5, 0x17de, 0x17ea, + 0x1807, 0x182a, 0x1847, 0x1868, +} // Size: 608 bytes + +const idRegionStr string = "" + // Size: 3077 bytes + "Pulau AscensionAndorraUni Emirat ArabAfganistanAntigua dan BarbudaAnguil" + + "laAlbaniaArmeniaAngolaAntartikaArgentinaSamoa AmerikaAustriaAustraliaAru" + + "baKepulauan AlandAzerbaijanBosnia dan HerzegovinaBarbadosBangladeshBelgi" + + "aBurkina FasoBulgariaBahrainBurundiBeninSaint BarthélemyBermudaBruneiBol" + + "iviaKaribia BelandaBrasilBahamaBhutanPulau BouvetBotswanaBelarusBelizeKa" + + "nadaKepulauan Cocos (Keeling)Kongo - KinshasaRepublik Afrika TengahKongo" + + " - BrazzavilleSwissCote d’IvoireKepulauan CookCileKamerunTiongkokKolombi" + + "aPulau ClippertonKosta RikaKubaTanjung VerdeCuraçaoPulau ChristmasSiprus" + + "Republik CheskaJermanDiego GarciaJibutiDenmarkDominikaRepublik DominikaA" + + "ljazairCeuta dan MelillaEkuadorEstoniaMesirSahara BaratEritreaSpanyolEti" + + "opiaUni EropaFinlandiaFijiKepulauan MalvinasMikronesiaKepulauan FaroePra" + + "ncisGabonInggris RayaGrenadaGeorgiaGuyana PrancisGuernseyGhanaGibraltarG" + + "rinlandiaGambiaGuineaGuadeloupeGuinea EkuatorialYunaniGeorgia Selatan & " + + "Kep. Sandwich SelatanGuatemalaGuamGuinea-BissauGuyanaHong Kong SAR Tiong" + + "kokPulau Heard dan Kepulauan McDonaldHondurasKroasiaHaitiHungariaKepulau" + + "an CanaryIndonesiaIrlandiaIsraelPulau ManIndiaWilayah Inggris di Samudra" + + " HindiaIrakIranIslandiaItaliaJerseyJamaikaYordaniaJepangKenyaKirgistanKa" + + "mbojaKiribatiKomoroSaint Kitts dan NevisKorea UtaraKorea SelatanKuwaitKe" + + "pulauan CaymanKazakstanLaosLebanonSaint LuciaLiechtensteinSri LankaLiber" + + "iaLesothoLituaniaLuksemburgLatviaLibiaMarokoMonakoMoldovaMontenegroSaint" + + " MartinMadagaskarKepulauan MarshallMakedoniaMaliMyanmar (Burma)MongoliaM" + + "akau SAR TiongkokKepulauan Mariana UtaraMartinikMauritaniaMontserratMalt" + + "aMauritiusMaladewaMalawiMeksikoMalaysiaMozambikNamibiaKaledonia BaruNige" + + "rKepulauan NorfolkNigeriaNikaraguaBelandaNorwegiaNepalNauruNiueSelandia " + + "BaruOmanPanamaPeruPolinesia PrancisPapua NuginiFilipinaPakistanPolandiaS" + + "aint Pierre dan MiquelonKepulauan PitcairnPuerto RikoWilayah PalestinaPo" + + "rtugalPalauParaguayQatarOseania LuarRéunionRumaniaSerbiaRusiaRwandaArab " + + "SaudiKepulauan SolomonSeychellesSudanSwediaSingapuraSaint HelenaSlovenia" + + "Kepulauan Svalbard dan Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSom" + + "aliaSurinameSudan SelatanSao Tome dan PrincipeEl SalvadorSint MaartenSur" + + "iahSwazilandTristan da CunhaKepulauan Turks dan CaicosCadWilayah Kutub S" + + "elatan PrancisTogoThailandTajikistanTokelauTimor LesteTurkimenistanTunis" + + "iaTongaTurkiTrinidad dan TobagoTuvaluTaiwanTanzaniaUkrainaUgandaKepulaua" + + "n Terluar A.S.Perserikatan Bangsa-BangsaAmerika SerikatUruguayUzbekistan" + + "VatikanSaint Vincent dan GrenadinesVenezuelaKepulauan Virgin InggrisKepu" + + "lauan Virgin A.S.VietnamVanuatuKepulauan Wallis dan FutunaSamoaKosovoYam" + + "anMayotteAfrika SelatanZambiaZimbabweWilayah Tidak DikenalDuniaAfrikaAme" + + "rika UtaraAmerika SelatanOseaniaAfrika Bagian BaratAmerika TengahAfrika " + + "Bagian TimurAfrika Bagian UtaraAfrika Bagian TengahAfrika Bagian Selatan" + + "AmerikaAmerika Bagian UtaraKepulauan KaribiaAsia Bagian TimurAsia Bagian" + + " SelatanAsia TenggaraEropa Bagian SelatanAustralasiaMelanesiaWilayah Mik" + + "ronesiaPolinesiaAsiaAsia TengahAsia Bagian BaratEropaEropa Bagian TimurE" + + "ropa Bagian UtaraEropa Bagian BaratAmerika Latin" + +var idRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0016, 0x0025, 0x002f, 0x0042, 0x004a, 0x0051, + 0x0058, 0x005e, 0x0067, 0x0070, 0x007d, 0x0084, 0x008d, 0x0092, + 0x00a1, 0x00ab, 0x00c1, 0x00c9, 0x00d3, 0x00d9, 0x00e5, 0x00ed, + 0x00f4, 0x00fb, 0x0100, 0x0111, 0x0118, 0x011e, 0x0125, 0x0134, + 0x013a, 0x0140, 0x0146, 0x0152, 0x015a, 0x0161, 0x0167, 0x016d, + 0x0186, 0x0196, 0x01ac, 0x01bf, 0x01c4, 0x01d3, 0x01e1, 0x01e5, + 0x01ec, 0x01f4, 0x01fc, 0x020c, 0x0216, 0x021a, 0x0227, 0x022f, + 0x023e, 0x0244, 0x0253, 0x0259, 0x0265, 0x026b, 0x0272, 0x027a, + // Entry 40 - 7F + 0x028b, 0x0293, 0x02a4, 0x02ab, 0x02b2, 0x02b7, 0x02c3, 0x02ca, + 0x02d1, 0x02d8, 0x02e1, 0x02e1, 0x02ea, 0x02ee, 0x0300, 0x030a, + 0x0319, 0x0320, 0x0325, 0x0331, 0x0338, 0x033f, 0x034d, 0x0355, + 0x035a, 0x0363, 0x036d, 0x0373, 0x0379, 0x0383, 0x0394, 0x039a, + 0x03c1, 0x03ca, 0x03ce, 0x03db, 0x03e1, 0x03f7, 0x0419, 0x0421, + 0x0428, 0x042d, 0x0435, 0x0445, 0x044e, 0x0456, 0x045c, 0x0465, + 0x046a, 0x048b, 0x048f, 0x0493, 0x049b, 0x04a1, 0x04a7, 0x04ae, + 0x04b6, 0x04bc, 0x04c1, 0x04ca, 0x04d1, 0x04d9, 0x04df, 0x04f4, + // Entry 80 - BF + 0x04ff, 0x050c, 0x0512, 0x0522, 0x052b, 0x052f, 0x0536, 0x0541, + 0x054e, 0x0557, 0x055e, 0x0565, 0x056d, 0x0577, 0x057d, 0x0582, + 0x0588, 0x058e, 0x0595, 0x059f, 0x05ab, 0x05b5, 0x05c7, 0x05d0, + 0x05d4, 0x05e3, 0x05eb, 0x05fd, 0x0614, 0x061c, 0x0626, 0x0630, + 0x0635, 0x063e, 0x0646, 0x064c, 0x0653, 0x065b, 0x0663, 0x066a, + 0x0678, 0x067d, 0x068e, 0x0695, 0x069e, 0x06a5, 0x06ad, 0x06b2, + 0x06b7, 0x06bb, 0x06c8, 0x06cc, 0x06d2, 0x06d6, 0x06e7, 0x06f3, + 0x06fb, 0x0703, 0x070b, 0x0724, 0x0736, 0x0741, 0x0752, 0x075a, + // Entry C0 - FF + 0x075f, 0x0767, 0x076c, 0x0778, 0x0780, 0x0787, 0x078d, 0x0792, + 0x0798, 0x07a2, 0x07b3, 0x07bd, 0x07c2, 0x07c8, 0x07d1, 0x07dd, + 0x07e5, 0x0805, 0x080d, 0x0819, 0x0823, 0x082a, 0x0831, 0x0839, + 0x0846, 0x085b, 0x0866, 0x0872, 0x0878, 0x0881, 0x0891, 0x08ab, + 0x08ae, 0x08cb, 0x08cf, 0x08d7, 0x08e1, 0x08e8, 0x08f3, 0x0900, + 0x0907, 0x090c, 0x0911, 0x0924, 0x092a, 0x0930, 0x0938, 0x093f, + 0x0945, 0x095b, 0x0975, 0x0984, 0x098b, 0x0995, 0x099c, 0x09b8, + 0x09c1, 0x09d9, 0x09ee, 0x09f5, 0x09fc, 0x0a17, 0x0a1c, 0x0a22, + // Entry 100 - 13F + 0x0a27, 0x0a2e, 0x0a3c, 0x0a42, 0x0a4a, 0x0a5f, 0x0a64, 0x0a6a, + 0x0a77, 0x0a86, 0x0a8d, 0x0aa0, 0x0aae, 0x0ac1, 0x0ad4, 0x0ae8, + 0x0afd, 0x0b04, 0x0b18, 0x0b29, 0x0b3a, 0x0b4d, 0x0b5a, 0x0b6e, + 0x0b79, 0x0b82, 0x0b94, 0x0b9d, 0x0ba1, 0x0bac, 0x0bbd, 0x0bc2, + 0x0bd4, 0x0be6, 0x0bf8, 0x0c05, +} // Size: 608 bytes + +const isRegionStr string = "" + // Size: 3329 bytes + "Ascension-eyjaAndorraSameinuðu arabísku furstadæminAfganistanAntígva og " + + "BarbúdaAngvillaAlbaníaArmeníaAngólaSuðurskautslandiðArgentínaBandaríska " + + "SamóaAusturríkiÁstralíaArúbaÁlandseyjarAserbaídsjanBosnía og Hersegóvína" + + "BarbadosBangladessBelgíaBúrkína FasóBúlgaríaBareinBúrúndíBenínSankti Bar" + + "tólómeusareyjarBermúdaeyjarBrúneiBólivíaKaríbahafshluti HollandsBrasilía" + + "BahamaeyjarBútanBouveteyjaBotsvanaHvíta-RússlandBelísKanadaKókoseyjar (K" + + "eeling)Kongó-KinshasaMið-AfríkulýðveldiðKongó-BrazzavilleSvissFílabeinss" + + "tröndinCooks-eyjarSíleKamerúnKínaKólumbíaClipperton-eyjaKostaríkaKúbaGræ" + + "nhöfðaeyjarCuracaoJólaeyKýpurTékklandÞýskalandDiego GarciaDjíbútíDanmörk" + + "DóminíkaDóminíska lýðveldiðAlsírCeuta og MelillaEkvadorEistlandEgyptalan" + + "dVestur-SaharaErítreaSpánnEþíópíaEvrópusambandiðFinnlandFídjíeyjarFalkla" + + "ndseyjarMíkrónesíaFæreyjarFrakklandGabonBretlandGrenadaGeorgíaFranska Gv" + + "æjanaGuernseyGanaGíbraltarGrænlandGambíaGíneaGvadelúpeyjarMiðbaugs-Gíne" + + "aGrikklandSuður-Georgía og Suður-SandvíkureyjarGvatemalaGvamGínea-BissáG" + + "væjanaSjálfstjórnarsvæðið Hong KongHeard og McDonaldseyjarHondúrasKróatí" + + "aHaítíUngverjalandKanaríeyjarIndónesíaÍrlandÍsraelMönIndlandBresku Indla" + + "ndshafseyjarÍrakÍranÍslandÍtalíaJerseyJamaíkaJórdaníaJapanKeníaKirgistan" + + "KambódíaKíribatíKómoreyjarSankti Kitts og NevisNorður-KóreaSuður-KóreaKú" + + "veitCaymaneyjarKasakstanLaosLíbanonSankti LúsíaLiechtensteinSrí LankaLíb" + + "eríaLesótóLitháenLúxemborgLettlandLíbíaMarokkóMónakóMoldóvaSvartfjallala" + + "ndSt. MartinMadagaskarMarshalleyjarMakedóníaMalíMjanmar (Búrma)MongólíaS" + + "jálfstjórnarsvæðið MakaóNorður-MaríanaeyjarMartiníkMáritaníaMontserratMa" + + "ltaMáritíusMaldíveyjarMalavíMexíkóMalasíaMósambíkNamibíaNýja-KaledóníaNí" + + "gerNorfolkeyjaNígeríaNíkaragvaHollandNoregurNepalNárúNiueNýja-SjálandÓma" + + "nPanamaPerúFranska PólýnesíaPapúa Nýja-GíneaFilippseyjarPakistanPóllandS" + + "ankti Pierre og MiquelonPitcairn-eyjarPúertó RíkóHeimastjórnarsvæði Pale" + + "stínumannaPortúgalPaláParagvæKatarYtri EyjaálfaRéunionRúmeníaSerbíaRússl" + + "andRúandaSádi-ArabíaSalómonseyjarSeychelles-eyjarSúdanSvíþjóðSingapúrSan" + + "kti HelenaSlóveníaSvalbarði og Jan MayenSlóvakíaSíerra LeóneSan MarínóSe" + + "negalSómalíaSúrínamSuður-SúdanSaó Tóme og PrinsípeEl SalvadorSankti Mart" + + "inSýrlandSvasílandTristan da CunhaTurks- og CaicoseyjarTsjadFrönsku suðl" + + "ægu landsvæðinTógóTaílandTadsjikistanTókeláTímor-LesteTúrkmenistanTúnis" + + "TongaTyrklandTrínidad og TóbagóTúvalúTaívanTansaníaÚkraínaÚgandaSmáeyjar" + + " BandaríkjannaSameinuðu þjóðirnarBandaríkinÚrúgvæÚsbekistanVatíkaniðSank" + + "ti Vinsent og GrenadíneyjarVenesúelaBresku JómfrúaeyjarBandarísku Jómfrú" + + "aeyjarVíetnamVanúatúWallis- og FútúnaeyjarSamóaKósóvóJemenMayotteSuður-A" + + "fríkaSambíaSimbabveÓþekkt svæðiHeimurinnAfríkaNorður-AmeríkaSuður-Amerík" + + "aEyjaálfaVestur-AfríkaMið-AmeríkaAustur-AfríkaNorður-AfríkaMið-AfríkaSuð" + + "urhluti AfríkuAmeríkaAmeríka norðan MexikóKaríbahafiðAustur-AsíaSuður-As" + + "íaSuðaustur-AsíaSuður-EvrópaÁstralasíaMelanesíaMíkrónesíusvæðiðPólýnesí" + + "aAsíaMið-AsíaVestur-AsíaEvrópaAustur-EvrópaNorður-EvrópaVestur-EvrópaRóm" + + "anska Ameríka" + +var isRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x0015, 0x0036, 0x0040, 0x0054, 0x005c, 0x0064, + 0x006c, 0x0073, 0x0086, 0x0090, 0x00a2, 0x00ad, 0x00b7, 0x00bd, + 0x00c9, 0x00d6, 0x00ee, 0x00f6, 0x0100, 0x0107, 0x0116, 0x0120, + 0x0126, 0x0130, 0x0136, 0x0151, 0x015e, 0x0165, 0x016e, 0x0187, + 0x0190, 0x019b, 0x01a1, 0x01ab, 0x01b3, 0x01c3, 0x01c9, 0x01cf, + 0x01e4, 0x01f3, 0x020b, 0x021d, 0x0222, 0x0235, 0x0240, 0x0245, + 0x024d, 0x0252, 0x025c, 0x026b, 0x0275, 0x027a, 0x028b, 0x0292, + 0x0299, 0x029f, 0x02a8, 0x02b3, 0x02bf, 0x02c9, 0x02d1, 0x02db, + // Entry 40 - 7F + 0x02f3, 0x02f9, 0x0309, 0x0310, 0x0318, 0x0322, 0x032f, 0x0337, + 0x033d, 0x0348, 0x0359, 0x0359, 0x0361, 0x036d, 0x037b, 0x0388, + 0x0391, 0x039a, 0x039f, 0x03a7, 0x03ae, 0x03b6, 0x03c6, 0x03ce, + 0x03d2, 0x03dc, 0x03e5, 0x03ec, 0x03f2, 0x0400, 0x0410, 0x0419, + 0x0442, 0x044b, 0x044f, 0x045c, 0x0464, 0x0486, 0x049d, 0x04a6, + 0x04af, 0x04b6, 0x04c2, 0x04ce, 0x04d9, 0x04e0, 0x04e7, 0x04eb, + 0x04f2, 0x050a, 0x050f, 0x0514, 0x051b, 0x0523, 0x0529, 0x0531, + 0x053b, 0x0540, 0x0546, 0x054f, 0x0559, 0x0563, 0x056e, 0x0583, + // Entry 80 - BF + 0x0591, 0x059e, 0x05a5, 0x05b0, 0x05b9, 0x05bd, 0x05c5, 0x05d3, + 0x05e0, 0x05ea, 0x05f3, 0x05fb, 0x0603, 0x060d, 0x0615, 0x061c, + 0x0624, 0x062c, 0x0634, 0x0643, 0x064d, 0x0657, 0x0664, 0x066f, + 0x0674, 0x0684, 0x068e, 0x06ad, 0x06c2, 0x06cb, 0x06d6, 0x06e0, + 0x06e5, 0x06ef, 0x06fb, 0x0702, 0x070a, 0x0712, 0x071c, 0x0724, + 0x0735, 0x073b, 0x0746, 0x074f, 0x0759, 0x0760, 0x0767, 0x076c, + 0x0772, 0x0776, 0x0784, 0x0789, 0x078f, 0x0794, 0x07a8, 0x07bb, + 0x07c7, 0x07cf, 0x07d7, 0x07f0, 0x07fe, 0x080d, 0x0832, 0x083b, + // Entry C0 - FF + 0x0840, 0x0848, 0x084d, 0x085b, 0x0863, 0x086c, 0x0873, 0x087c, + 0x0883, 0x0890, 0x089e, 0x08ae, 0x08b4, 0x08bf, 0x08c8, 0x08d5, + 0x08df, 0x08f6, 0x0900, 0x090e, 0x091a, 0x0921, 0x092a, 0x0933, + 0x0940, 0x0957, 0x0962, 0x096f, 0x0977, 0x0981, 0x0991, 0x09a6, + 0x09ab, 0x09ca, 0x09d0, 0x09d8, 0x09e4, 0x09ec, 0x09f8, 0x0a05, + 0x0a0b, 0x0a10, 0x0a18, 0x0a2d, 0x0a35, 0x0a3c, 0x0a45, 0x0a4e, + 0x0a55, 0x0a6d, 0x0a84, 0x0a8f, 0x0a98, 0x0aa3, 0x0aae, 0x0ace, + 0x0ad8, 0x0aed, 0x0b07, 0x0b0f, 0x0b18, 0x0b30, 0x0b36, 0x0b3f, + // Entry 100 - 13F + 0x0b44, 0x0b4b, 0x0b59, 0x0b60, 0x0b68, 0x0b78, 0x0b81, 0x0b88, + 0x0b98, 0x0ba7, 0x0bb0, 0x0bbe, 0x0bcb, 0x0bd9, 0x0be8, 0x0bf4, + 0x0c07, 0x0c0f, 0x0c27, 0x0c34, 0x0c40, 0x0c4c, 0x0c5c, 0x0c6a, + 0x0c76, 0x0c80, 0x0c96, 0x0ca2, 0x0ca7, 0x0cb1, 0x0cbd, 0x0cc4, + 0x0cd2, 0x0ce1, 0x0cef, 0x0d01, +} // Size: 608 bytes + +const itRegionStr string = "" + // Size: 3040 bytes + "Isola AscensioneAndorraEmirati Arabi UnitiAfghanistanAntigua e BarbudaAn" + + "guillaAlbaniaArmeniaAngolaAntartideArgentinaSamoa americaneAustriaAustra" + + "liaArubaIsole ÅlandAzerbaigianBosnia ed ErzegovinaBarbadosBangladeshBelg" + + "ioBurkina FasoBulgariaBahreinBurundiBeninSaint-BarthélemyBermudaBruneiBo" + + "liviaCaraibi olandesiBrasileBahamasBhutanIsola BouvetBotswanaBielorussia" + + "BelizeCanadaIsole Cocos (Keeling)Congo - KinshasaRepubblica Centrafrican" + + "aCongo-BrazzavilleSvizzeraCosta d’AvorioIsole CookCileCamerunCinaColombi" + + "aIsola di ClippertonCosta RicaCubaCapo VerdeCuraçaoIsola ChristmasCiproR" + + "epubblica CecaGermaniaDiego GarciaGibutiDanimarcaDominicaRepubblica Domi" + + "nicanaAlgeriaCeuta e MelillaEcuadorEstoniaEgittoSahara occidentaleEritre" + + "aSpagnaEtiopiaUnione EuropeaFinlandiaFigiIsole FalklandMicronesiaIsole F" + + "ær ØerFranciaGabonRegno UnitoGrenadaGeorgiaGuyana franceseGuernseyGhana" + + "GibilterraGroenlandiaGambiaGuineaGuadalupaGuinea EquatorialeGreciaGeorgi" + + "a del Sud e Sandwich australiGuatemalaGuamGuinea-BissauGuyanaRAS di Hong" + + " KongIsole Heard e McDonaldHondurasCroaziaHaitiUngheriaIsole CanarieIndo" + + "nesiaIrlandaIsraeleIsola di ManIndiaTerritorio britannico dell’Oceano In" + + "dianoIraqIranIslandaItaliaJerseyGiamaicaGiordaniaGiapponeKenyaKirghizist" + + "anCambogiaKiribatiComoreSaint Kitts e NevisCorea del NordCorea del SudKu" + + "waitIsole CaymanKazakistanLaosLibanoSaint LuciaLiechtensteinSri LankaLib" + + "eriaLesothoLituaniaLussemburgoLettoniaLibiaMaroccoMonacoMoldaviaMonteneg" + + "roSaint MartinMadagascarIsole MarshallRepubblica di MacedoniaMaliMyanmar" + + " (Birmania)MongoliaRAS di MacaoIsole Marianne settentrionaliMartinicaMau" + + "ritaniaMontserratMaltaMauritiusMaldiveMalawiMessicoMalaysiaMozambicoNami" + + "biaNuova CaledoniaNigerIsola NorfolkNigeriaNicaraguaPaesi BassiNorvegiaN" + + "epalNauruNiueNuova ZelandaOmanPanamáPerùPolinesia francesePapua Nuova Gu" + + "ineaFilippinePakistanPoloniaSaint Pierre e MiquelonIsole PitcairnPortori" + + "coTerritori palestinesiPortogalloPalauParaguayQatarOceania lontanaRiunio" + + "neRomaniaSerbiaRussiaRuandaArabia SauditaIsole SalomoneSeychellesSudanSv" + + "eziaSingaporeSant’ElenaSloveniaSvalbard e Jan MayenSlovacchiaSierra Leon" + + "eSan MarinoSenegalSomaliaSurinameSud SudanSão Tomé e PríncipeEl Salvador" + + "Sint MaartenSiriaSwazilandTristan da CunhaIsole Turks e CaicosCiadTerre " + + "australi francesiTogoThailandiaTagikistanTokelauTimor LesteTurkmenistanT" + + "unisiaTongaTurchiaTrinidad e TobagoTuvaluTaiwanTanzaniaUcrainaUgandaAltr" + + "e isole americane del Pacificonazioni uniteStati UnitiUruguayUzbekistanC" + + "ittà del VaticanoSaint Vincent e GrenadinesVenezuelaIsole Vergini Britan" + + "nicheIsole Vergini AmericaneVietnamVanuatuWallis e FutunaSamoaKosovoYeme" + + "nMayotteSudafricaZambiaZimbabweRegione sconosciutaMondoAfricaNord Americ" + + "aAmerica del SudOceaniaAfrica occidentaleAmerica CentraleAfrica oriental" + + "eNordafricaAfrica centraleAfrica del SudAmericheAmerica del NordCaraibiA" + + "sia orientaleAsia del SudSud-est asiaticoEuropa meridionaleAustralasiaMe" + + "lanesiaRegione micronesianaPolinesiaAsiaAsia centraleAsia occidentaleEur" + + "opaEuropa orientaleEuropa settentrionaleEuropa occidentaleAmerica Latina" + +var itRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x002a, 0x0035, 0x0046, 0x004e, 0x0055, + 0x005c, 0x0062, 0x006b, 0x0074, 0x0083, 0x008a, 0x0093, 0x0098, + 0x00a4, 0x00af, 0x00c3, 0x00cb, 0x00d5, 0x00db, 0x00e7, 0x00ef, + 0x00f6, 0x00fd, 0x0102, 0x0113, 0x011a, 0x0120, 0x0127, 0x0137, + 0x013e, 0x0145, 0x014b, 0x0157, 0x015f, 0x016a, 0x0170, 0x0176, + 0x018b, 0x019b, 0x01b3, 0x01c4, 0x01cc, 0x01dc, 0x01e6, 0x01ea, + 0x01f1, 0x01f5, 0x01fd, 0x0210, 0x021a, 0x021e, 0x0228, 0x0230, + 0x023f, 0x0244, 0x0253, 0x025b, 0x0267, 0x026d, 0x0276, 0x027e, + // Entry 40 - 7F + 0x0293, 0x029a, 0x02a9, 0x02b0, 0x02b7, 0x02bd, 0x02cf, 0x02d6, + 0x02dc, 0x02e3, 0x02f1, 0x02f1, 0x02fa, 0x02fe, 0x030c, 0x0316, + 0x0325, 0x032c, 0x0331, 0x033c, 0x0343, 0x034a, 0x0359, 0x0361, + 0x0366, 0x0370, 0x037b, 0x0381, 0x0387, 0x0390, 0x03a2, 0x03a8, + 0x03cb, 0x03d4, 0x03d8, 0x03e5, 0x03eb, 0x03fb, 0x0411, 0x0419, + 0x0420, 0x0425, 0x042d, 0x043a, 0x0443, 0x044a, 0x0451, 0x045d, + 0x0462, 0x048d, 0x0491, 0x0495, 0x049c, 0x04a2, 0x04a8, 0x04b0, + 0x04b9, 0x04c1, 0x04c6, 0x04d2, 0x04da, 0x04e2, 0x04e8, 0x04fb, + // Entry 80 - BF + 0x0509, 0x0516, 0x051c, 0x0528, 0x0532, 0x0536, 0x053c, 0x0547, + 0x0554, 0x055d, 0x0564, 0x056b, 0x0573, 0x057e, 0x0586, 0x058b, + 0x0592, 0x0598, 0x05a0, 0x05aa, 0x05b6, 0x05c0, 0x05ce, 0x05e5, + 0x05e9, 0x05fb, 0x0603, 0x060f, 0x062c, 0x0635, 0x063f, 0x0649, + 0x064e, 0x0657, 0x065e, 0x0664, 0x066b, 0x0673, 0x067c, 0x0683, + 0x0692, 0x0697, 0x06a4, 0x06ab, 0x06b4, 0x06bf, 0x06c7, 0x06cc, + 0x06d1, 0x06d5, 0x06e2, 0x06e6, 0x06ed, 0x06f2, 0x0704, 0x0716, + 0x071f, 0x0727, 0x072e, 0x0745, 0x0753, 0x075c, 0x0771, 0x077b, + // Entry C0 - FF + 0x0780, 0x0788, 0x078d, 0x079c, 0x07a4, 0x07ab, 0x07b1, 0x07b7, + 0x07bd, 0x07cb, 0x07d9, 0x07e3, 0x07e8, 0x07ee, 0x07f7, 0x0803, + 0x080b, 0x081f, 0x0829, 0x0835, 0x083f, 0x0846, 0x084d, 0x0855, + 0x085e, 0x0874, 0x087f, 0x088b, 0x0890, 0x0899, 0x08a9, 0x08bd, + 0x08c1, 0x08d8, 0x08dc, 0x08e6, 0x08f0, 0x08f7, 0x0902, 0x090e, + 0x0915, 0x091a, 0x0921, 0x0932, 0x0938, 0x093e, 0x0946, 0x094d, + 0x0953, 0x0975, 0x0982, 0x098d, 0x0994, 0x099e, 0x09b1, 0x09cb, + 0x09d4, 0x09ed, 0x0a04, 0x0a0b, 0x0a12, 0x0a21, 0x0a26, 0x0a2c, + // Entry 100 - 13F + 0x0a31, 0x0a38, 0x0a41, 0x0a47, 0x0a4f, 0x0a62, 0x0a67, 0x0a6d, + 0x0a79, 0x0a88, 0x0a8f, 0x0aa1, 0x0ab1, 0x0ac1, 0x0acb, 0x0ada, + 0x0ae8, 0x0af0, 0x0b00, 0x0b07, 0x0b15, 0x0b21, 0x0b31, 0x0b43, + 0x0b4e, 0x0b57, 0x0b6b, 0x0b74, 0x0b78, 0x0b85, 0x0b95, 0x0b9b, + 0x0bab, 0x0bc0, 0x0bd2, 0x0be0, +} // Size: 608 bytes + +const jaRegionStr string = "" + // Size: 4848 bytes + "アセンション島アンドラアラブ首長国連邦アフガニスタンアンティグア・バーブーダアンギラアルバニアアルメニアアンゴラ南極アルゼンチン米領サモアオース" + + "トリアオーストラリアアルバオーランド諸島アゼルバイジャンボスニア・ヘルツェゴビナバルバドスバングラデシュベルギーブルキナファソブルガリアバー" + + "レーンブルンジベナンサン・バルテルミー島バミューダブルネイボリビアオランダ領カリブブラジルバハマブータンブーベ島ボツワナベラルーシベリーズカ" + + "ナダココス(キーリング)諸島コンゴ民主共和国(キンシャサ)中央アフリカ共和国コンゴ共和国(ブラザビル)スイスコートジボワールクック諸島チリカ" + + "メルーン中国コロンビアクリッパートン島コスタリカキューバカーボベルデキュラソークリスマス島キプロスチェコ共和国ドイツディエゴガルシア島ジブチ" + + "デンマークドミニカ国ドミニカ共和国アルジェリアセウタ・メリリャエクアドルエストニアエジプト西サハラエリトリアスペインエチオピア欧州連合フィン" + + "ランドフィジーフォークランド諸島ミクロネシア連邦フェロー諸島フランスガボンイギリスグレナダジョージア仏領ギアナガーンジーガーナジブラルタルグ" + + "リーンランドガンビアギニアグアドループ赤道ギニアギリシャ南ジョージア島・南サンドイッチ諸島グアテマラグアムギニアビサウガイアナ中華人民共和国" + + "香港特別行政区ハード島・マクドナルド諸島ホンジュラスクロアチアハイチハンガリーカナリア諸島インドネシアアイルランドイスラエルマン島インド英領" + + "インド洋地域イラクイランアイスランドイタリアジャージージャマイカヨルダン日本ケニアキルギスカンボジアキリバスコモロセントクリストファー・ネー" + + "ヴィス朝鮮民主主義人民共和国大韓民国クウェートケイマン諸島カザフスタンラオスレバノンセントルシアリヒテンシュタインスリランカリベリアレソトリ" + + "トアニアルクセンブルクラトビアリビアモロッコモナコモルドバモンテネグロサン・マルタンマダガスカルマーシャル諸島マケドニアマリミャンマーモンゴ" + + "ル中華人民共和国マカオ特別行政区北マリアナ諸島マルティニークモーリタニアモントセラトマルタモーリシャスモルディブマラウイメキシコマレーシアモ" + + "ザンビークナミビアニューカレドニアニジェールノーフォーク島ナイジェリアニカラグアオランダノルウェーネパールナウルニウエニュージーランドオマー" + + "ンパナマペルー仏領ポリネシアパプアニューギニアフィリピンパキスタンポーランドサンピエール島・ミクロン島ピトケアン諸島プエルトリコパレスチナ自" + + "治区ポルトガルパラオパラグアイカタールオセアニア周辺地域レユニオン島ルーマニアセルビアロシアルワンダサウジアラビアソロモン諸島セーシェルスー" + + "ダンスウェーデンシンガポールセントヘレナスロベニアスバールバル諸島・ヤンマイエン島スロバキアシエラレオネサンマリノセネガルソマリアスリナム南" + + "スーダンサントメ・プリンシペエルサルバドルシント・マールテンシリアスワジランドトリスタン・ダ・クーニャタークス・カイコス諸島チャド仏領極南諸" + + "島トーゴタイタジキスタントケラウ東ティモールトルクメニスタンチュニジアトンガトルコトリニダード・トバゴツバル台湾タンザニアウクライナウガンダ" + + "合衆国領有小離島こくさいれんごうアメリカ合衆国ウルグアイウズベキスタンバチカン市国セントビンセント及びグレナディーン諸島ベネズエラ英領ヴァー" + + "ジン諸島米領ヴァージン諸島ベトナムバヌアツウォリス・フツナサモアコソボイエメンマヨット島南アフリカザンビアジンバブエ不明な地域世界アフリカ北" + + "アメリカ大陸南アメリカオセアニア西アフリカ中央アメリカ東アフリカ北アフリカ中部アフリカ南部アフリカアメリカ大陸北アメリカカリブ東アジア南アジ" + + "ア東南アジア南ヨーロッパオーストララシアメラネシアミクロネシアポリネシアアジア中央アジア西アジアヨーロッパ東ヨーロッパ北ヨーロッパ西ヨーロッ" + + "パラテンアメリカ" + +var jaRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0015, 0x0021, 0x0039, 0x004e, 0x0072, 0x007e, 0x008d, + 0x009c, 0x00a8, 0x00ae, 0x00c0, 0x00cf, 0x00e1, 0x00f6, 0x00ff, + 0x0114, 0x012c, 0x0150, 0x015f, 0x0174, 0x0180, 0x0195, 0x01a4, + 0x01b3, 0x01bf, 0x01c8, 0x01e6, 0x01f5, 0x0201, 0x020d, 0x0225, + 0x0231, 0x023a, 0x0246, 0x0252, 0x025e, 0x026d, 0x0279, 0x0282, + 0x02a2, 0x02cb, 0x02e6, 0x0309, 0x0312, 0x032a, 0x0339, 0x033f, + 0x034e, 0x0354, 0x0363, 0x037b, 0x038a, 0x0396, 0x03a8, 0x03b7, + 0x03c9, 0x03d5, 0x03e7, 0x03f0, 0x040b, 0x0414, 0x0423, 0x0432, + // Entry 40 - 7F + 0x0447, 0x0459, 0x0471, 0x0480, 0x048f, 0x049b, 0x04a7, 0x04b6, + 0x04c2, 0x04d1, 0x04dd, 0x04dd, 0x04ef, 0x04fb, 0x0516, 0x052e, + 0x0540, 0x054c, 0x0555, 0x0561, 0x056d, 0x057c, 0x058b, 0x059a, + 0x05a3, 0x05b5, 0x05ca, 0x05d6, 0x05df, 0x05f1, 0x0600, 0x060c, + 0x063f, 0x064e, 0x0657, 0x0669, 0x0675, 0x069f, 0x06c6, 0x06d8, + 0x06e7, 0x06f0, 0x06ff, 0x0711, 0x0723, 0x0735, 0x0744, 0x074d, + 0x0756, 0x076e, 0x0777, 0x0780, 0x0792, 0x079e, 0x07ad, 0x07bc, + 0x07c8, 0x07ce, 0x07d7, 0x07e3, 0x07f2, 0x07fe, 0x0807, 0x0837, + // Entry 80 - BF + 0x0858, 0x0864, 0x0873, 0x0885, 0x0897, 0x08a0, 0x08ac, 0x08be, + 0x08d9, 0x08e8, 0x08f4, 0x08fd, 0x090c, 0x0921, 0x092d, 0x0936, + 0x0942, 0x094b, 0x0957, 0x0969, 0x097e, 0x0990, 0x09a5, 0x09b4, + 0x09ba, 0x09c9, 0x09d5, 0x0a02, 0x0a17, 0x0a2c, 0x0a3e, 0x0a50, + 0x0a59, 0x0a6b, 0x0a7a, 0x0a86, 0x0a92, 0x0aa1, 0x0ab3, 0x0abf, + 0x0ad7, 0x0ae6, 0x0afb, 0x0b0d, 0x0b1c, 0x0b28, 0x0b37, 0x0b43, + 0x0b4c, 0x0b55, 0x0b6d, 0x0b79, 0x0b82, 0x0b8b, 0x0ba0, 0x0bbb, + 0x0bca, 0x0bd9, 0x0be8, 0x0c0f, 0x0c24, 0x0c36, 0x0c4e, 0x0c5d, + // Entry C0 - FF + 0x0c66, 0x0c75, 0x0c81, 0x0c9c, 0x0cae, 0x0cbd, 0x0cc9, 0x0cd2, + 0x0cde, 0x0cf3, 0x0d05, 0x0d14, 0x0d20, 0x0d32, 0x0d44, 0x0d56, + 0x0d65, 0x0d95, 0x0da4, 0x0db6, 0x0dc5, 0x0dd1, 0x0ddd, 0x0de9, + 0x0df8, 0x0e16, 0x0e2b, 0x0e46, 0x0e4f, 0x0e61, 0x0e85, 0x0ea6, + 0x0eaf, 0x0ec1, 0x0eca, 0x0ed0, 0x0ee2, 0x0eee, 0x0f00, 0x0f18, + 0x0f27, 0x0f30, 0x0f39, 0x0f57, 0x0f60, 0x0f66, 0x0f75, 0x0f84, + 0x0f90, 0x0fa8, 0x0fc0, 0x0fd5, 0x0fe4, 0x0ff9, 0x100b, 0x1044, + 0x1053, 0x106e, 0x1089, 0x1095, 0x10a1, 0x10b9, 0x10c2, 0x10cb, + // Entry 100 - 13F + 0x10d7, 0x10e6, 0x10f5, 0x1101, 0x1110, 0x111f, 0x1125, 0x1131, + 0x1146, 0x1155, 0x1164, 0x1173, 0x1185, 0x1194, 0x11a3, 0x11b5, + 0x11c7, 0x11d9, 0x11e8, 0x11f1, 0x11fd, 0x1209, 0x1218, 0x122a, + 0x1242, 0x1251, 0x1263, 0x1272, 0x127b, 0x128a, 0x1296, 0x12a5, + 0x12b7, 0x12c9, 0x12db, 0x12f0, +} // Size: 608 bytes + +const kaRegionStr string = "" + // Size: 9470 bytes + "ამაღლების კუნძულიანდორაარაბთა გაერთიანებული საამიროებიავღანეთიანტიგუა და" + + " ბარბუდაანგვილაალბანეთისომხეთიანგოლაანტარქტიკაარგენტინაამერიკის სამოაავს" + + "ტრიაავსტრალიაარუბაალანდის კუნძულებიაზერბაიჯანიბოსნია და ჰერცეგოვინაბარ" + + "ბადოსიბანგლადეშიბელგიაბურკინა-ფასობულგარეთიბაჰრეინიბურუნდიბენინისენ-ბა" + + "რთელმიბერმუდაბრუნეიბოლივიაკარიბის ნიდერლანდებიბრაზილიაბაჰამის კუნძულებ" + + "იბუტანიბუვებოტსვანაბელარუსიბელიზიკანადაქოქოსის (კილინგის) კუნძულებიკონ" + + "გო - კინშასაცენტრალური აფრიკის რესპუბლიკაკონგო - ბრაზავილიშვეიცარიაკოტ" + + "-დივუარიკუკის კუნძულებიჩილეკამერუნიჩინეთიკოლუმბიაკლიპერტონის კუნძულიკოსტ" + + "ა-რიკაკუბაკაბო-ვერდეკიურასაოშობის კუნძულიკვიპროსიჩეხეთის რესპუბლიკაგერ" + + "მანიადიეგო-გარსიაჯიბუტიდანიადომინიკადომინიკელთა რესპუბლიკაალჟირისეუტა " + + "და მელილაეკვადორიესტონეთიეგვიპტედასავლეთ საჰარაერიტრეაესპანეთიეთიოპიაე" + + "ვროკავშირიფინეთიფიჯიფოლკლენდის კუნძულებიმიკრონეზიაფარერის კუნძულებისაფ" + + "რანგეთიგაბონიგაერთიანებული სამეფოგრენადასაქართველოსაფრანგეთის გვიანაგე" + + "რნსიგანაგიბრალტარიგრენლანდიაგამბიაგვინეაგვადელუპაეკვატორული გვინეასაბე" + + "რძნეთისამხრეთ ჯორჯია და სამხრეთ სენდვიჩის კუნძულებიგვატემალაგუამიგვინე" + + "ა-ბისაუგაიანაჰონკონგის სპეციალური ადმინისტრაციული რეგიონი ჩინეთიჰერდი " + + "და მაკდონალდის კუნძულებიჰონდურასიხორვატიაჰაიტიუნგრეთიკანარის კუნძულები" + + "ინდონეზიაირლანდიაისრაელიმენის კუნძულიინდოეთიბრიტანეთის ტერიტორია ინდოე" + + "თის ოკეანეშიერაყიირანიისლანდიაიტალიაჯერსიიამაიკაიორდანიაიაპონიაკენიაყი" + + "რგიზეთიკამბოჯაკირიბატიკომორის კუნძულებისენტ-კიტსი და ნევისიჩრდილოეთ კო" + + "რეასამხრეთ კორეაქუვეითიკაიმანის კუნძულებიყაზახეთილაოსილიბანისენტ-ლუსია" + + "ლიხტენშტაინიშრი-ლანკალიბერიალესოთოლიტვალუქსემბურგილატვიალიბიამაროკომონ" + + "აკომოლდოვამონტენეგროსენ-მარტენიმადაგასკარიმარშალის კუნძულებიმაკედონიამ" + + "ალიმიანმარი (ბირმა)მონღოლეთიმაკაოს სპეციალური ადმინისტრაციული რეგიონი " + + "ჩინეთიჩრდილოეთ მარიანას კუნძულებიმარტინიკამავრიტანიამონსერატიმალტამავრ" + + "იკიმალდივებიმალავიმექსიკამალაიზიამოზამბიკინამიბიაახალი კალედონიანიგერი" + + "ნორფოლკის კუნძულინიგერიანიკარაგუანიდერლანდებინორვეგიანეპალინაურუნიუეახ" + + "ალი ზელანდიაომანიპანამაპერუსაფრანგეთის პოლინეზიაპაპუა-ახალი გვინეაფილი" + + "პინებიპაკისტანიპოლონეთისენ-პიერი და მიკელონიპიტკერნის კუნძულებიპუერტო-" + + "რიკოპალესტინის ტერიტორიებიპორტუგალიაპალაუპარაგვაიკატარიშორეული ოკეანეთ" + + "ირეუნიონირუმინეთისერბეთირუსეთირუანდასაუდის არაბეთისოლომონის კუნძულების" + + "ეიშელის კუნძულებისუდანიშვედეთისინგაპურიწმინდა ელენეს კუნძულისლოვენიაშპ" + + "იცბერგენი და იან-მაიენისლოვაკეთისიერა-ლეონესან-მარინოსენეგალისომალისურ" + + "ინამისამხრეთ სუდანისან-ტომე და პრინსიპისალვადორისინტ-მარტენისირიასვაზი" + + "ლენდიტრისტან-და-კუნიათერქს-ქაიქოსის კუნძულებიჩადიფრანგული სამხრეთის ტე" + + "რიტორიებიტოგოტაილანდიტაჯიკეთიტოკელაუტიმორ-ლესტეთურქმენეთიტუნისიტონგათუ" + + "რქეთიტრინიდადი და ტობაგოტუვალუტაივანიტანზანიაუკრაინაუგანდააშშ-ის შორეუ" + + "ლი კუნძულებიგაეროამერიკის შეერთებული შტატებიურუგვაიუზბეკეთიქალაქი ვატი" + + "კანისენტ-ვინსენტი და გრენადინებივენესუელაბრიტანეთის ვირჯინის კუნძულები" + + "აშშ-ის ვირჯინის კუნძულებივიეტნამივანუატუუოლისი და ფუტუნასამოაკოსოვოიემ" + + "ენიმაიოტასამხრეთ აფრიკის რესპუბლიკაზამბიაზიმბაბვეუცნობი რეგიონიმსოფლიო" + + "აფრიკაჩრდილოეთ ამერიკასამხრეთ ამერიკაოკეანეთიდასავლეთ აფრიკაცენტრალური" + + " ამერიკააღმოსავლეთ აფრიკაჩრდილოეთ აფრიკაშუა აფრიკასამხრეთ აფრიკაამერიკებ" + + "იამერიკის ჩრდილოეთიკარიბის ზღვააღმოსავლეთ აზიასამხრეთ აზიასამხრეთ-აღმო" + + "სავლეთ აზიასამხრეთ ევროპაავსტრალაზიამელანეზიამიკრონეზიის რეგიონიპოლინე" + + "ზიააზიაცენტრალური აზიადასავლეთ აზიაევროპააღმოსავლეთ ევროპაჩრდილოეთ ევრ" + + "ოპადასავლეთ ევროპალათინური ამერიკა" + +var kaRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0031, 0x0043, 0x009c, 0x00b4, 0x00e6, 0x00fb, 0x0113, + 0x0128, 0x013a, 0x0158, 0x0173, 0x019b, 0x01b0, 0x01cb, 0x01da, + 0x020b, 0x022c, 0x0267, 0x0282, 0x02a0, 0x02b2, 0x02d4, 0x02ef, + 0x0307, 0x031c, 0x032e, 0x0350, 0x0365, 0x0377, 0x038c, 0x03c6, + 0x03de, 0x040f, 0x0421, 0x042d, 0x0445, 0x045d, 0x046f, 0x0481, + 0x04cd, 0x04f4, 0x0547, 0x0574, 0x058f, 0x05ae, 0x05d9, 0x05e5, + 0x05fd, 0x060f, 0x0627, 0x065e, 0x067a, 0x0686, 0x06a2, 0x06ba, + 0x06df, 0x06f7, 0x072b, 0x0743, 0x0765, 0x0777, 0x0786, 0x079e, + // Entry 40 - 7F + 0x07de, 0x07f0, 0x0819, 0x0831, 0x0849, 0x085e, 0x0889, 0x089e, + 0x08b6, 0x08cb, 0x08ec, 0x08ec, 0x08fe, 0x090a, 0x0944, 0x0962, + 0x0993, 0x09b1, 0x09c3, 0x09fd, 0x0a12, 0x0a30, 0x0a64, 0x0a76, + 0x0a82, 0x0aa0, 0x0abe, 0x0ad0, 0x0ae2, 0x0afd, 0x0b2e, 0x0b4c, + 0x0bc9, 0x0be4, 0x0bf3, 0x0c15, 0x0c27, 0x0cb8, 0x0d0c, 0x0d27, + 0x0d3f, 0x0d4e, 0x0d63, 0x0d94, 0x0daf, 0x0dc7, 0x0ddc, 0x0e01, + 0x0e16, 0x0e82, 0x0e91, 0x0ea0, 0x0eb8, 0x0eca, 0x0ed9, 0x0eee, + 0x0f06, 0x0f1b, 0x0f2a, 0x0f45, 0x0f5a, 0x0f72, 0x0fa3, 0x0fd9, + // Entry 80 - BF + 0x1001, 0x1026, 0x103b, 0x106f, 0x1087, 0x1096, 0x10a8, 0x10c4, + 0x10e8, 0x1101, 0x1116, 0x1128, 0x1137, 0x1158, 0x116a, 0x1179, + 0x118b, 0x119d, 0x11b2, 0x11d0, 0x11ef, 0x1210, 0x1244, 0x125f, + 0x126b, 0x1295, 0x12b0, 0x1338, 0x1385, 0x13a0, 0x13be, 0x13d9, + 0x13e8, 0x13fd, 0x1418, 0x142a, 0x143f, 0x1457, 0x1472, 0x1487, + 0x14b2, 0x14c4, 0x14f5, 0x150a, 0x1525, 0x1549, 0x1561, 0x1573, + 0x1582, 0x158e, 0x15b6, 0x15c5, 0x15d7, 0x15e3, 0x1620, 0x1652, + 0x1670, 0x168b, 0x16a3, 0x16dc, 0x1713, 0x1732, 0x1772, 0x1790, + // Entry C0 - FF + 0x179f, 0x17b7, 0x17c9, 0x17f7, 0x180f, 0x1827, 0x183c, 0x184e, + 0x1860, 0x1888, 0x18bf, 0x18f3, 0x1905, 0x191a, 0x1935, 0x1970, + 0x1988, 0x19cd, 0x19e8, 0x1a07, 0x1a23, 0x1a3b, 0x1a4d, 0x1a65, + 0x1a8d, 0x1ac3, 0x1ade, 0x1b00, 0x1b0f, 0x1b2d, 0x1b59, 0x1b9d, + 0x1ba9, 0x1bff, 0x1c0b, 0x1c23, 0x1c3b, 0x1c50, 0x1c6f, 0x1c8d, + 0x1c9f, 0x1cae, 0x1cc3, 0x1cf8, 0x1d0a, 0x1d1f, 0x1d37, 0x1d4c, + 0x1d5e, 0x1da0, 0x1daf, 0x1dfc, 0x1e11, 0x1e29, 0x1e54, 0x1ea2, + 0x1ebd, 0x1f10, 0x1f55, 0x1f6d, 0x1f82, 0x1fae, 0x1fbd, 0x1fcf, + // Entry 100 - 13F + 0x1fe1, 0x1ff3, 0x203d, 0x204f, 0x2067, 0x208f, 0x20a4, 0x20b6, + 0x20e4, 0x210f, 0x2127, 0x2152, 0x2186, 0x21b7, 0x21e2, 0x21fe, + 0x2226, 0x2241, 0x2275, 0x2297, 0x22c2, 0x22e4, 0x2325, 0x234d, + 0x236e, 0x2389, 0x23c0, 0x23db, 0x23e7, 0x2412, 0x2437, 0x2449, + 0x247a, 0x24a5, 0x24d0, 0x24fe, +} // Size: 608 bytes + +const kkRegionStr string = "" + // Size: 6176 bytes + "Әскенжін аралыАндорраБіріккен Араб ӘмірліктеріАуғанстанАнтигуа және Барб" + + "удаАнгильяАлбанияАрменияАнголаАнтарктидаАргентинаАмерикалық СамоаАвстри" + + "яАвстралияАрубаАланд аралдарыӘзірбайжанБосния және ГерцеговинаБарбадосБ" + + "англадешБельгияБуркина-ФасоБолгарияБахрейнБурундиБенинСен-БартелемиБерм" + + "уд аралдарыБрунейБоливияКариб НидерландысыБразилияБагам аралдарыБутанБу" + + "ве аралыБотсванаБеларусьБелизКанадаКокос (Килинг) аралдарыКонгоОрталық " + + "Африка РеспубликасыКонго-Браззавиль РеспубликасыШвейцарияКот-д’ИвуарКук" + + " аралдарыЧилиКамерунҚытайКолумбияКлиппертон аралыКоста-РикаКубаКабо-Верд" + + "еКюрасаоРождество аралыКипрЧех РеспубликасыГерманияДиего-ГарсияДжибутиД" + + "анияДоминикаДоминикан РеспубликасыАлжирСеута және МелильяЭквадорЭстония" + + "МысырБатыс СахараЭритреяИспанияЭфиопияЕуропалық ОдақФинляндияФиджиФолкл" + + "енд аралдарыМикронезияФарер аралдарыФранцияГабонҰлыбританияГренадаГрузи" + + "яФранцуз ГвианасыГернсиГанаГибралтарГренландияГамбияГвинеяГваделупаЭква" + + "торлық ГвинеяГрекияОңтүстік Георгия және Оңтүстік Сандвич аралдарыГвате" + + "малаГуамГвинея-БисауГайанаҚытай Халық Республикасының Гонконг арнайы әк" + + "імшілік ауданыХерд аралы және Макдональд аралдарыГондурасХорватияГаитиВ" + + "енгрияКанар аралдарыИндонезияИрландияИзраильМэн аралыҮндістанҮнді мұхит" + + "ындағы Британ аймағыИракИранИсландияИталияДжерсиЯмайкаИорданияЖапонияКе" + + "нияҚырғызстанКамбоджаКирибатиКомор аралдарыСент-Китс және НевисСолтүсті" + + "к КореяОңтүстік КореяКувейтКайман аралдарыҚазақстанЛаосЛиванСент-ЛюсияЛ" + + "ихтенштейнШри-ЛанкаЛиберияЛесотоЛитваЛюксембургЛатвияЛивияМароккоМонако" + + "МолдоваЧерногорияСен-МартенМадагаскарМаршалл аралдарыМакедонияМалиМьянм" + + "а (Бирма)МоңғолияҚытай Халық Республикасының Макао арнайы әкімшілік ауд" + + "аныСолтүстік Мариана аралдарыМартиникаМавританияМонтсерратМальтаМаврики" + + "йМальдив аралдарыМалавиМексикаМалайзияМозамбикНамибияЖаңа КаледонияНиге" + + "рНорфолк аралыНигерияНикарагуаНидерландНорвегияНепалНауруНиуэЖаңа Зелан" + + "дияОманПанамаПеруФранцуз ПолинезиясыПапуа — Жаңа ГвинеяФилиппинПәкістан" + + "ПольшаСен-Пьер және МикелонПиткэрн аралдарыПуэрто-РикоПалестина аймақта" + + "рыПортугалияПалауПарагвайКатарАлыс ОкеанияРеюньонРумынияСербияРесейРуан" + + "даСауд АрабиясыСоломон аралдарыСейшель аралдарыСуданШвецияСингапурӘулие" + + " Елена аралыСловенияШпицберген және Ян-МайенСловакияСьерра-ЛеонеСан-Мари" + + "ноСенегалСомалиСуринамОңтүстік СуданСан-Томе және ПринсипиСальвадорСинт" + + "-МартенСирияСвазилендТристан-да-КуньяТеркс және Кайкос аралдарыЧадФранци" + + "яның оңтүстік аймақтарыТогоТайландТәжікстанТокелауТимор-ЛестеТүрікменст" + + "анТунисТонгаТүркияТринидад және ТобагоТувалуТайваньТанзанияУкраинаУганд" + + "аАҚШ-тың сыртқы кіші аралдарыБіріккен Ұлттар ҰйымыАмерика Құрама Штатта" + + "рыУругвайӨзбекстанВатиканСент-Винсент және Гренадин аралдарыВенесуэлаБр" + + "итандық Виргин аралдарыАҚШ-тың Виргин аралдарыВьетнамВануатуУоллис және" + + " ФутунаСамоаКосовоЙеменМайоттаОңтүстік Африка РеспубликасыЗамбияЗимбабве" + + "Белгісіз аймақӘлемАфрикаСолтүстік АмерикаОңтүстік АмерикаОкеанияБатыс А" + + "фрикаОрталық АмерикаШығыс АфрикаСолтүстік АфрикаОрталық АфрикаОңтүстік " + + "АфрикаСолтүстік және Оңтүстік АмерикаСолтүстік Америка (аймақ)КарибШығы" + + "с АзияОңтүстік АзияОңтүстік-Шығыс АзияОңтүстік ЕуропаАвстралазияМеланез" + + "ияМикронезия аймағыПолинезияАзияОрталық АзияБатыс АзияЕуропаШығыс Еуроп" + + "аСолтүстік ЕуропаБатыс ЕуропаЛатын Америкасы" + +var kkRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001b, 0x0029, 0x0059, 0x006b, 0x0091, 0x009f, 0x00ad, + 0x00bb, 0x00c7, 0x00db, 0x00ed, 0x010c, 0x011a, 0x012c, 0x0136, + 0x0151, 0x0165, 0x0191, 0x01a1, 0x01b3, 0x01c1, 0x01d8, 0x01e8, + 0x01f6, 0x0204, 0x020e, 0x0227, 0x0244, 0x0250, 0x025e, 0x0281, + 0x0291, 0x02ac, 0x02b6, 0x02c9, 0x02d9, 0x02e9, 0x02f3, 0x02ff, + 0x0329, 0x0333, 0x0367, 0x039f, 0x03b1, 0x03c7, 0x03de, 0x03e6, + 0x03f4, 0x03fe, 0x040e, 0x042d, 0x0440, 0x0448, 0x045b, 0x0469, + 0x0486, 0x048e, 0x04ad, 0x04bd, 0x04d4, 0x04e2, 0x04ec, 0x04fc, + // Entry 40 - 7F + 0x0527, 0x0531, 0x0553, 0x0561, 0x056f, 0x0579, 0x0590, 0x059e, + 0x05ac, 0x05ba, 0x05d5, 0x05d5, 0x05e7, 0x05f1, 0x0612, 0x0626, + 0x0641, 0x064f, 0x0659, 0x066f, 0x067d, 0x0689, 0x06a8, 0x06b4, + 0x06bc, 0x06ce, 0x06e2, 0x06ee, 0x06fa, 0x070c, 0x072d, 0x0739, + 0x0792, 0x07a4, 0x07ac, 0x07c3, 0x07cf, 0x083f, 0x0881, 0x0891, + 0x08a1, 0x08ab, 0x08b9, 0x08d4, 0x08e6, 0x08f6, 0x0904, 0x0915, + 0x0925, 0x095e, 0x0966, 0x096e, 0x097e, 0x098a, 0x0996, 0x09a2, + 0x09b2, 0x09c0, 0x09ca, 0x09de, 0x09ee, 0x09fe, 0x0a19, 0x0a3e, + // Entry 80 - BF + 0x0a5b, 0x0a76, 0x0a82, 0x0a9f, 0x0ab1, 0x0ab9, 0x0ac3, 0x0ad6, + 0x0aec, 0x0afd, 0x0b0b, 0x0b17, 0x0b21, 0x0b35, 0x0b41, 0x0b4b, + 0x0b59, 0x0b65, 0x0b73, 0x0b87, 0x0b9a, 0x0bae, 0x0bcd, 0x0bdf, + 0x0be7, 0x0c00, 0x0c10, 0x0c7c, 0x0cae, 0x0cc0, 0x0cd4, 0x0ce8, + 0x0cf4, 0x0d04, 0x0d23, 0x0d2f, 0x0d3d, 0x0d4d, 0x0d5d, 0x0d6b, + 0x0d86, 0x0d90, 0x0da9, 0x0db7, 0x0dc9, 0x0ddb, 0x0deb, 0x0df5, + 0x0dff, 0x0e07, 0x0e20, 0x0e28, 0x0e34, 0x0e3c, 0x0e61, 0x0e85, + 0x0e95, 0x0ea5, 0x0eb1, 0x0ed8, 0x0ef7, 0x0f0c, 0x0f31, 0x0f45, + // Entry C0 - FF + 0x0f4f, 0x0f5f, 0x0f69, 0x0f80, 0x0f8e, 0x0f9c, 0x0fa8, 0x0fb2, + 0x0fbe, 0x0fd7, 0x0ff6, 0x1015, 0x101f, 0x102b, 0x103b, 0x105b, + 0x106b, 0x1098, 0x10a8, 0x10bf, 0x10d2, 0x10e0, 0x10ec, 0x10fa, + 0x1115, 0x113e, 0x1150, 0x1165, 0x116f, 0x1181, 0x119f, 0x11d0, + 0x11d6, 0x120e, 0x1216, 0x1224, 0x1236, 0x1244, 0x1259, 0x1271, + 0x127b, 0x1285, 0x1291, 0x12b7, 0x12c3, 0x12d1, 0x12e1, 0x12ef, + 0x12fb, 0x132f, 0x1357, 0x1383, 0x1391, 0x13a3, 0x13b1, 0x13f3, + 0x1405, 0x1435, 0x1460, 0x146e, 0x147c, 0x149e, 0x14a8, 0x14b4, + // Entry 100 - 13F + 0x14be, 0x14cc, 0x1502, 0x150e, 0x151e, 0x1539, 0x1541, 0x154d, + 0x156e, 0x158d, 0x159b, 0x15b2, 0x15cf, 0x15e6, 0x1605, 0x1620, + 0x163d, 0x1678, 0x16a6, 0x16b0, 0x16c3, 0x16dc, 0x1700, 0x171d, + 0x1733, 0x1745, 0x1766, 0x1778, 0x1780, 0x1797, 0x17aa, 0x17b6, + 0x17cd, 0x17ec, 0x1803, 0x1820, +} // Size: 608 bytes + +const kmRegionStr string = "" + // Size: 9020 bytes + "កោះ\u200bអាសេនសិនអង់ដូរ៉ាអារ៉ាប់រួមអាហ្វហ្គានីស្ថានអង់ទីហ្គា និង បាប៊ុយដ" + + "ាអង់ហ្គីឡាអាល់បានីអាមេនីអង់ហ្គោឡាអង់តាក់ទិកអាហ្សង់ទីនសាម័រ អាមេរិកាំងអ" + + "ូទ្រីសអូស្ត្រាលីអារូបាកោះ\u200bអាឡាំងអាស៊ែបៃហ្សង់បូស្នី និងហឺហ្សីហ្គូវ" + + "ីណាបាបាដុសបង់ក្លាដែសបែលហ្ស៊ិកបួគីណាហ្វាសូប៊ុលហ្គារីបារ៉ែនប៊ូរុនឌីបេណាំ" + + "ងសង់ បាតេឡេម៉ីប៊ឺមុយដាប្រ៊ុយណេបូលីវីហុល្លង់ ការ៉ាប៊ីនប្រេស៊ីលបាហាម៉ាប៊" + + "ូតានកោះ\u200bប៊ូវ៉េតបុតស្វាណាបេឡារុស្សបេលីហ្សកាណាដាកោះ\u200bកូកូស (គីល" + + "ីង)កុងហ្គោ- គីនស្ហាសាសាធារណរដ្ឋអាហ្វ្រិកកណ្ដាលកុងហ្គោ - ប្រាហ្សាវីលស្វ" + + "ីសកូដឌីវ័រកោះ\u200bខូកស៊ីលីកាមេរូនចិនកូឡុំប៊ីកោះ\u200bឃ្លីភឺតុនកូស្តារ" + + "ីកាគុយបាកាបវែរកូរ៉ាកៅកោះ\u200bគ្រីស្មាសស៊ីបសាធារណរដ្ឋឆេកអាល្លឺម៉ង់ឌៀហ្" + + "គោហ្គាស៊ីជីប៊ូទីដាណឺម៉ាកដូមីនីកសាធារណរដ្ឋ\u200bដូមីនីកអាល់ហ្សេរីជឺតា ន" + + "ិង\u200bម៉េលីឡាអេក្វាឌ័រអេស្តូនីអេហ្ស៊ីបសាហារ៉ាខាងលិចអេរីទ្រាអេស្ប៉ាញអ" + + "េត្យូពីសហភាព\u200bអឺរ៉ុបហ្វាំងឡង់ហ្វីជីកោះ\u200bហ្វក់ឡែនមីក្រូណេស៊ីកោះ" + + "\u200bហ្វារ៉ូបារាំងហ្គាបុងចក្រភព\u200bអង់គ្លេសហ្គ្រីណាដាហ្សកហ្ស៊ីហ្គៀណាប" + + "ារាំងហ្គេនស៊ីហ្គាណាហ្គីប្រាលតាហ្គ្រោអង់ឡង់ហ្គាំប៊ីហ្គីណេហ្គោដឺឡុបហ្គីណ" + + "េអេក្វាទ័រក្រិកកោះ\u200bហ្សកហ្ស៊ី\u200bខាង\u200bត្បូង និង សាន់វិច" + + "\u200bខាង\u200bត្បូងហ្គាតេម៉ាឡាហ្គាំហ្គីណេប៊ីសូហ្គីយ៉ាណាហុងកុងកោះ\u200bហ" + + "ឺដ និង\u200bម៉ាក់ដូណាល់ហុងឌូរ៉ាសក្រូអាតហៃទីហុងគ្រីកោះ\u200bកាណារីឥណ្ឌូ" + + "ណេស៊ីអៀរឡង់អ៊ីស្រាអែលអែលអុហ្វមែនឥណ្ឌាដែនដី\u200bអង់គ្លេស\u200bនៅ\u200b" + + "មហា\u200bសមុទ្រ\u200bឥណ្ឌាអ៊ីរ៉ាក់អ៊ីរ៉ង់អ៊ីស្លង់អ៊ីតាលីជឺស៊ីចាម៉ៃកាហ៊" + + "្សកដានីជប៉ុនកេនយ៉ាកៀហ្ស៊ីស៊ីស្ថានកម្ពុជាគិរិបាទីកូម័រសង់ឃីត និង\u200bណ" + + "េវីសកូរ៉េ\u200bខាង\u200bជើងកូរ៉េ\u200bខាង\u200bត្បូងគុយវ៉ែតកោះ\u200bកៃ" + + "ម៉ង់កាហ្សាក់ស្ថានឡាវលីបង់សង់\u200bលូសៀលិចទេនស្តែនស្រីលង្កាលីបេរីយ៉ាឡេស" + + "ូតូលីទុយអានីលុចហ្សំបួរឡាតវីយ៉ាលីប៊ីម៉ារ៉ុកម៉ូណាកូម៉ុលដាវីម៉ុងតេណេហ្គ្រ" + + "ោសង់\u200bម៉ាទីនម៉ាដាហ្គាស្កាកោះ\u200bម៉ាស់សលម៉ាសេដូនាម៉ាលីមីយ៉ាន់ម៉ា " + + "(ភូមា)ម៉ុងហ្គោលីម៉ាកាវកោះ\u200bម៉ារីណា\u200bខាង\u200bជើងម៉ាទីនីកម៉ូរីតាន" + + "ីម៉ុង\u200bសេរ៉ង់ម៉ាល់តាម៉ូរីសម៉ាល់ឌីវម៉ាឡាវីម៉ិកស៊ិកម៉ាឡេស៊ីម៉ូហ្សាំប" + + "៊ិកណាមីប៊ីញូកាឡេដូនៀនីហ្សេរកោះ\u200bណ័រហ្វក់នីហ្សេរីយ៉ានីការ៉ាហ្គ័រហូឡ" + + "ង់ន័រវែសនេប៉ាល់ណូរូណៀនូវែលហ្សេឡង់អូម៉ង់ប៉ាណាម៉ាប៉េរូប៉ូលី\u200bណេស៊ី" + + "\u200bបារាំងប៉ាពួញ៉ូហ្គីណេហ្វីលីពីនប៉ាគីស្ថានប៉ូឡូញសង់ព្យែរ និង\u200bមីគ" + + "ីឡុងកោះ\u200bភីតកានព័រតូរីកូដែន\u200bប៉ាលេស្ទីនព័រទុយហ្គាល់ផៅឡូប៉ារ៉ាហ" + + "្គាយកាតាតំបន់ជាយអូសេអានីរេអុយញ៉ុងរូម៉ានីស៊ែបរុស្ស៊ីរវ៉ាន់ដាអារ៉ាប៊ីសាអ" + + "ូឌីតកោះ\u200bសូឡូម៉ុងសីសែលស៊ូដង់ស៊ុយអែតសិង្ហបុរីសង់\u200bហេឡេណាស្លូវេន" + + "ីស្វាលបាដ និង ហ្សង់ម៉ាយេនស្លូវ៉ាគីសេរ៉ាឡេអូនសាន\u200bម៉ារីណូសេណេហ្គាល់" + + "សូម៉ាលីសូរីណាមស៊ូដង់\u200bខាង\u200bត្បូងសៅតូម៉េ និង ប្រាំងស៊ីបអែលសាល់វ" + + "៉ាឌ័រសីង\u200bម៉ាធីនស៊ីរីស្វាហ្ស៊ីឡង់ទ្រីស្តង់\u200bដា\u200bចូនហាកោះ" + + "\u200bទួគ និង កៃកូសឆាដដែនដី\u200bបារាំង\u200bនៅ\u200bភាគខាងត្បូងតូហ្គោថៃ" + + "តាហ្ស៊ីគីស្ថានតូខេឡៅទីម័រតួកម៉េនីស្ថានទុយនេស៊ីតុងហ្គាទួរគីទ្រីនីដាត និ" + + "ង\u200bតូបាហ្គោទូវ៉ាលូតៃវ៉ាន់តង់ហ្សានីអ៊ុយក្រែនអ៊ូហ្គង់ដាកោះ\u200bអៅឡា" + + "យីង\u200bអាមេរិកអង្គការសហប្រជាជាតិសហរដ្ឋអាមេរិកអ៊ុយរ៉ាហ្គាយអ៊ូសបេគីស្ថ" + + "ានបុរី\u200bវ៉ាទីកង់សាំង\u200bវីនសេន និង\u200bឌឹ\u200bហ្គ្រីណាឌីនីសវេន" + + "េហ្ស៊ុយឡាកោះ\u200bវឺជិន\u200bចក្រភព\u200bអង់គ្លេសកោះ\u200bវឺជីន\u200bអ" + + "ាមេរិកវៀតណាមវ៉ានូអាទូវ៉ាលីស និង\u200bហ្វូទូណាសាម័រកូសូវ៉ូយេមែនម៉ាយុតអា" + + "ហ្វ្រិកខាងត្បូងហ្សាំប៊ីហ្ស៊ីមបាវ៉េតំបន់មិនស្គាល់ពិភពលោកអាហ្វ្រិកអាមេរិ" + + "ក\u200bខាង\u200bជើងអាមេរិក\u200bខាង\u200bត្បូងអូសេអានីអាហ្វ្រិក\u200bខ" + + "ាង\u200bលិចអាមេរិក\u200bកណ្ដាលអាហ្វ្រិកខាងកើតអាហ្វ្រិក\u200bខាង\u200bជ" + + "ើងអាហ្វ្រិក\u200bកណ្តាលអាហ្វ្រិកភាគខាងត្បូងអាមេរិកអាមេរិក\u200bភាគ" + + "\u200bខាង\u200bជើងការ៉ាប៊ីនអាស៊ី\u200bខាង\u200bកើតអាស៊ី\u200bខាង\u200bត្" + + "បូងអាស៊ីអាគ្នេយ៍អឺរ៉ុប\u200bខាង\u200bត្បូងអូស្ត្រាឡាស៊ីមេឡាណេស៊ីតំបន់" + + "\u200bមីក្រូណេស៊ីប៉ូលីណេស៊ីអាស៊ីអាស៊ី\u200bកណ្ដាលអាស៊ី\u200bខាង\u200bលិច" + + "អឺរ៉ុបអឺរ៉ុប\u200bខាង\u200bកើតអឺរ៉ុប\u200bខាង\u200bជើងអឺរ៉ុប\u200bខាង" + + "\u200bលិចអាមេរិក\u200bឡាទីន" + +var kmRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0024, 0x003c, 0x005a, 0x008a, 0x00c8, 0x00e3, 0x00fb, + 0x010d, 0x0128, 0x0146, 0x0164, 0x0192, 0x01a7, 0x01c5, 0x01d7, + 0x01f5, 0x0219, 0x025f, 0x0274, 0x0292, 0x02ad, 0x02d1, 0x02ef, + 0x0301, 0x0319, 0x032b, 0x0350, 0x0368, 0x0380, 0x0392, 0x03c3, + 0x03db, 0x03f0, 0x0402, 0x0423, 0x043e, 0x0459, 0x046e, 0x0480, + 0x04ad, 0x04df, 0x052a, 0x0563, 0x0572, 0x058a, 0x059f, 0x05ae, + 0x05c3, 0x05cc, 0x05e4, 0x060b, 0x0629, 0x0638, 0x064a, 0x065f, + 0x0686, 0x0692, 0x06b9, 0x06d7, 0x06fe, 0x0713, 0x072b, 0x0740, + // Entry 40 - 7F + 0x0776, 0x0794, 0x07c2, 0x07dd, 0x07f5, 0x080d, 0x0834, 0x084c, + 0x0864, 0x087c, 0x08a0, 0x08a0, 0x08bb, 0x08cd, 0x08f1, 0x0912, + 0x0933, 0x0945, 0x095a, 0x0987, 0x09a5, 0x09c0, 0x09e4, 0x09fc, + 0x0a0e, 0x0a2f, 0x0a53, 0x0a6b, 0x0a7d, 0x0a98, 0x0ac5, 0x0ad4, + 0x0b57, 0x0b78, 0x0b87, 0x0ba8, 0x0bc3, 0x0bd5, 0x0c18, 0x0c33, + 0x0c48, 0x0c54, 0x0c69, 0x0c87, 0x0ca5, 0x0cb7, 0x0cd5, 0x0cf6, + 0x0d05, 0x0d6b, 0x0d83, 0x0d98, 0x0db0, 0x0dc5, 0x0dd4, 0x0de9, + 0x0e04, 0x0e13, 0x0e25, 0x0e52, 0x0e67, 0x0e7f, 0x0e8e, 0x0ebc, + // Entry 80 - BF + 0x0ee3, 0x0f10, 0x0f25, 0x0f43, 0x0f6a, 0x0f73, 0x0f82, 0x0f9a, + 0x0fbb, 0x0fd6, 0x0ff1, 0x1003, 0x101e, 0x103c, 0x1054, 0x1063, + 0x1078, 0x108d, 0x10a5, 0x10cf, 0x10ed, 0x1114, 0x1135, 0x1150, + 0x115f, 0x118c, 0x11aa, 0x11bc, 0x11f5, 0x120d, 0x1228, 0x1249, + 0x125e, 0x1270, 0x1288, 0x129d, 0x12b5, 0x12cd, 0x12f1, 0x1306, + 0x1324, 0x1339, 0x135d, 0x137e, 0x13a2, 0x13b1, 0x13c3, 0x13d8, + 0x13e4, 0x13ea, 0x140e, 0x1420, 0x1438, 0x1447, 0x147d, 0x14a7, + 0x14c2, 0x14e0, 0x14f2, 0x152c, 0x154a, 0x1565, 0x158f, 0x15b3, + // Entry C0 - FF + 0x15bf, 0x15e0, 0x15ec, 0x161c, 0x1637, 0x164c, 0x1658, 0x166d, + 0x1685, 0x16b2, 0x16d6, 0x16e5, 0x16f7, 0x170c, 0x1727, 0x1745, + 0x175d, 0x17a1, 0x17bc, 0x17da, 0x17fb, 0x1819, 0x182e, 0x1843, + 0x1873, 0x18b1, 0x18d8, 0x18f6, 0x1905, 0x1929, 0x195f, 0x198e, + 0x1997, 0x19e8, 0x19fa, 0x1a00, 0x1a2a, 0x1a3c, 0x1a4b, 0x1a72, + 0x1a8a, 0x1a9f, 0x1aae, 0x1aee, 0x1b03, 0x1b18, 0x1b33, 0x1b4e, + 0x1b6c, 0x1ba5, 0x1bdb, 0x1c02, 0x1c26, 0x1c4d, 0x1c74, 0x1cd2, + 0x1cf6, 0x1d41, 0x1d74, 0x1d86, 0x1da1, 0x1dd8, 0x1de7, 0x1dfc, + // Entry 100 - 13F + 0x1e0b, 0x1e1d, 0x1e50, 0x1e68, 0x1e89, 0x1eb3, 0x1ec8, 0x1ee3, + 0x1f10, 0x1f43, 0x1f5b, 0x1f8e, 0x1fb8, 0x1fe5, 0x2018, 0x2048, + 0x2084, 0x2099, 0x20d2, 0x20ed, 0x2114, 0x2141, 0x2168, 0x2198, + 0x21bf, 0x21da, 0x220d, 0x222b, 0x223a, 0x225e, 0x2285, 0x2297, + 0x22c1, 0x22eb, 0x2315, 0x233c, +} // Size: 608 bytes + +const knRegionStr string = "" + // Size: 9421 bytes + "ಅಸೆನ್ಶನ್ ದ್ವೀಪಅಂಡೋರಾಸಂಯುಕ್ತ ಅರಬ್ ಎಮಿರೇಟಸ್ಅಫಘಾನಿಸ್ಥಾನ್ಆಂಟಿಗುವಾ ಮತ್ತು ಬರ್ಬ" + + "ುಡಾಆಂಗ್ವಿಲ್ಲಾಅಲ್ಬೇನಿಯಾಅರ್ಮೇನಿಯಾಅಂಗೋಲಾಅಂಟಾರ್ಟಿಕಾಅರ್ಜೆಂಟಿನಾಅಮೇರಿಕನ್ ಸಮೋವ" + + "ಾಆಸ್ಟ್ರಿಯಾಆಸ್ಟ್ರೇಲಿಯಅರುಬಾಆಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳುಅಜರ್ಬೈಜಾನ್ಬೋಸ್ನಿಯಾ ಮತ್ತು ಹರ್" + + "ಜೆಗೋವಿನಾಬಾರ್ಬಡೋಸ್ಬಾಂಗ್ಲಾದೇಶ್ಬೆಲ್ಜಿಯಮ್ಬುರ್ಕಿನಾ ಫಾಸೋಬಲ್ಗೇರಿಯಾಬಹ್ರೇನ್ಬುರು" + + "ಂಡಿಬೆನಿನ್ಸೇಂಟ್ ಬಾರ್ಥೆಲೆಮಿಬರ್ಮುಡಾಬ್ರೂನಿಬೊಲಿವಿಯಾಕೆರೀಬಿಯನ್ ನೆದರ್\u200cಲ್ಯ" + + "ಾಂಡ್ಸ್ಬ್ರೆಜಿಲ್ಬಹಾಮಾಸ್ಭೂತಾನ್ಬೋವೆಟ್ ದ್ವೀಪಬೋಟ್ಸ್\u200cವಾನಾಬೆಲಾರಸ್ಬೆಲಿಜ್ಕೆ" + + "ನಡಾಕೊಕೊಸ್ (ಕೀಲಿಂಗ್) ದ್ವೀಪಗಳುಕಾಂಗೋ - ಕಿನ್ಶಾಸಾಮಧ್ಯ ಆಫ್ರಿಕಾ ಗಣರಾಜ್ಯಕಾಂಗೋ " + + "- ಬ್ರಾಜಾವಿಲ್ಲೇಸ್ವಿಟ್ಜರ್ಲ್ಯಾಂಡ್ಕೋತ್\u200c ದಿವಾರ್\u200dಕುಕ್ ದ್ವೀಪಗಳುಚಿಲಿಕ್" + + "ಯಾಮರೋನ್ಚೀನಾಕೊಲಂಬಿಯಾಕ್ಲಿಪ್ಪರ್\u200cಟಾನ್ ದ್ವೀಪಗಳುಕೊಸ್ಟಾ ರಿಕಾಕ್ಯೂಬಾಕೇಪ್ ವ" + + "ರ್ಡೆಕುರಾಕಾವ್ಕ್ರಿಸ್ಮಸ್ ದ್ವೀಪಸೈಪ್ರಸ್ಝೆಕ್ ರಿಪಬ್ಲಿಕ್ಜರ್ಮನಿಡೈಗೋ ಗಾರ್ಸಿಯಜಿಬೋ" + + "ಟಿಡೆನ್ಮಾರ್ಕ್ಡೊಮಿನಿಕಾಡೊಮೆನಿಕನ್ ರಿಪಬ್ಲಿಕ್ಅಲ್ಗೇರಿಯಾಸೆಯುಟಾ ಹಾಗೂ ಮೆಲಿಲ್ಲಾಈಕ" + + "್ವೆಡಾರ್ಎಸ್ಟೋನಿಯಾಈಜಿಪ್ಟ್ಪಶ್ಚಿಮ ಸಹಾರಾಏರಿಟ್ರಿಯಾಸ್ಪೇನ್ಇಥಿಯೋಪಿಯಾಯುರೋಪಿಯನ್ ಒ" + + "ಕ್ಕೂಟಫಿನ್\u200cಲ್ಯಾಂಡ್ಫಿಜಿಫಾಲ್ಕ್\u200cಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳುಮೈಕ್ರೋನೇಶಿಯಾಫರೋ " + + "ದ್ವೀಪಗಳುಫ್ರಾನ್ಸ್ಗೆಬೊನ್ಬ್ರಿಟನ್/ಇಂಗ್ಲೆಂಡ್ಗ್ರೆನೆಡಾಜಾರ್ಜಿಯಾಫ್ರೆಂಚ್ ಗಯಾನಾಗು" + + "ರ್ನ್\u200cಸೆಘಾನಾಗಿಬ್ರಾಲ್ಟರ್ಗ್ರೀನ್\u200cಲ್ಯಾಂಡ್ಗ್ಯಾಂಬಿಯಾಗಿನಿಗುಡೆಲೋಪ್ಈಕ್" + + "ವೆಟೋರಿಯಲ್ ಗಿನಿಗ್ರೀಸ್ದಕ್ಷಿಣ ಜಾರ್ಜಿಯಾ ಮತ್ತು ದಕ್ಷಿಣ ಸ್ಯಾಂಡ್\u200dವಿಚ್ ದ್ವ" + + "ೀಪಗಳುಗ್ವಾಟೆಮಾಲಾಗುಯಾಮ್ಗಿನಿ-ಬಿಸ್ಸಾವ್ಗಯಾನಾಹಾಂಗ್ ಕಾಂಗ್ SAR ಚೈನಾಹರ್ಡ್ ಮತ್ತು" + + " ಮ್ಯಾಕ್\u200cಡೋನಾಲ್ಡ್ ದ್ವೀಪಗಳುಹೊಂಡುರಾಸ್ಕ್ರೊಯೇಶಿಯಾಹೈಟಿಹಂಗೇರಿಕ್ಯಾನರಿ ದ್ವೀಪ" + + "ಗಳುಇಂಡೋನೇಶಿಯಾಐರ್ಲೆಂಡ್ಇಸ್ರೇಲ್ಐಲ್ ಆಫ್ ಮ್ಯಾನ್ಭಾರತಬ್ರಿಟೀಷ್ ಹಿಂದೂ ಮಹಾಸಾಗರದ " + + "ಪ್ರದೇಶಇರಾಕ್ಇರಾನ್ಐಸ್\u200cಲ್ಯಾಂಡ್ಇಟಲಿಜೆರ್ಸಿಜಮೈಕಾಜೋರ್ಡಾನ್ಜಪಾನ್ಕೀನ್ಯಾಕಿರ್" + + "ಗಿಸ್ಥಾನ್ಕಾಂಬೋಡಿಯಾಕಿರಿಬಾತಿಕೊಮೊರೊಸ್ಸೇಂಟ್ ಕಿಟ್ಸ್ ಮತ್ತು ನೆವಿಸ್ಉತ್ತರ ಕೋರಿಯಾ" + + "ದಕ್ಷಿಣ ಕೋರಿಯಾಕುವೈತ್ಕೇಮನ್ ದ್ವೀಪಗಳುಕಝಾಕಿಸ್ಥಾನ್ಲಾವೋಸ್ಲೆಬನಾನ್ಸೇಂಟ್ ಲೂಸಿಯಾಲ" + + "ಿಚೆನ್\u200cಸ್ಟೈನ್ಶ್ರೀಲಂಕಾಲಿಬೇರಿಯಾಲೆಸೊಥೋಲಿಥುವೇನಿಯಾಲಕ್ಸಂಬರ್ಗ್ಲಾಟ್ವಿಯಾಲಿಬ" + + "ಿಯಾಮೊರಾಕ್ಕೊಮೊನಾಕೊಮೊಲ್ಡೋವಾಮೊಂಟೆನೆಗ್ರೋಸೇಂಟ್ ಮಾರ್ಟಿನ್ಮಡಗಾಸ್ಕರ್ಮಾರ್ಷಲ್ ದ್ವ" + + "ೀಪಗಳುಮ್ಯಾಸಿಡೋನಿಯಾಮಾಲಿಮಯನ್ಮಾರ್ (ಬರ್ಮಾ)ಮೊಂಗೋಲಿಯಾಮಖಾವು (SAR) ಚೈನಾಉತ್ತರ ಮರ" + + "ಿಯಾನಾ ದ್ವೀಪಗಳುಮಾರ್ಟಿನಿಕ್ಮಾರಿಟೇನಿಯಾಮಾಂಟ್\u200cಸೆರೇಟ್ಮಾಲ್ಟಾಮಾರಿಷಸ್ಮಾಲ್ಡಿ" + + "ವ್ಸ್ಮಲಾವಿಮೆಕ್ಸಿಕೊಮಲೇಶಿಯಾಮೊಜಾಂಬಿಕ್ನಮೀಬಿಯಾನ್ಯೂ ಕ್ಯಾಲಿಡೋನಿಯಾನೈಜರ್ನಾರ್ಫೋಕ್" + + " ದ್ವೀಪನೈಜೀರಿಯಾನಿಕಾರಾಗುವಾನೆದರ್\u200cಲ್ಯಾಂಡ್ಸ್ನಾರ್ವೇನೇಪಾಳನೌರುನಿಯುನ್ಯೂಜಿಲೆಂ" + + "ಡ್ಓಮನ್ಪನಾಮಾಪೆರುಫ್ರೆಂಚ್ ಪಾಲಿನೇಷ್ಯಾಪಪುವಾ ನ್ಯೂಗಿನಿಯಾಫಿಲಿಫೈನ್ಸ್ಪಾಕಿಸ್ತಾನಪೋ" + + "ಲ್ಯಾಂಡ್ಸೇಂಟ್ ಪಿಯರೆ ಮತ್ತು ಮಿಕೆಲನ್ಪಿಟ್\u200cಕೈರ್ನ್ ದ್ವೀಪಗಳುಪ್ಯೂರ್ಟೋ ರಿಕೊ" + + "ಪ್ಯಾಲೇಸ್ಟೇನಿಯನ್ ಪ್ರದೇಶಗಳುಪೋರ್ಚುಗಲ್ಪಲಾವುಪರಾಗ್ವೇಖತಾರ್ಔಟ್ ಲೈಯಿಂಗ್ ಓಷಿಯಾನಿ" + + "ಯಾರೀಯೂನಿಯನ್ರೊಮೇನಿಯಾಸೆರ್ಬಿಯಾರಷ್ಯಾರುವಾಂಡಾಸೌದಿ ಅರೇಬಿಯಾಸೊಲೊಮನ್ ದ್ವೀಪಗಳುಸೀಶ" + + "ೆಲ್ಲೆಸ್ಸೂಡಾನ್ಸ್ವೀಡನ್ಸಿಂಗಾಪುರ್ಸೇಂಟ್ ಹೆಲೆನಾಸ್ಲೋವೇನಿಯಾಸ್ವಾಲ್ಬಾರ್ಡ್ ಮತ್ತು " + + "ಜಾನ್ ಮೆಯನ್ಸ್ಲೋವಾಕಿಯಾಸಿಯೆರ್ರಾ ಲಿಯೋನ್ಸ್ಯಾನ್ ಮೆರಿನೋಸೆನೆಗಲ್ಸೊಮಾಲಿಯಾಸುರಿನಾಮ" + + "ದಕ್ಷಿಣ ಸೂಡಾನ್ಸಾವೋ ಟೋಮ್ ಮತ್ತು ಪ್ರಿನ್ಸಿಪಿಎಲ್ ಸಾಲ್ವೇಡಾರ್ಸಿಂಟ್ ಮಾರ್ಟೆನ್ಸಿರ" + + "ಿಯಾಸ್ವಾಜಿಲ್ಯಾಂಡ್ಟ್ರಿಸ್ತನ್ ಡಾ ಕುನ್ಹಾಟರ್ಕ್ಸ್ ಮತ್ತು ಕೈಕೋಸ್ ದ್ವೀಪಗಳುಚಾದ್ಫ್" + + "ರೆಂಚ್ ದಕ್ಷಿಣ ಪ್ರದೇಶಗಳುಟೋಗೋಥೈಲ್ಯಾಂಡ್ತಜಿಕಿಸ್ತಾನ್ಟೊಕೆಲಾವ್ಪೂರ್ವ ತಿಮೋರ್ತುರ್" + + "ಕಮೆನಿಸ್ತಾನ್ಟುನಿಶಿಯಾಟೊಂಗಟರ್ಕಿಟ್ರಿನಿಡಾಡ್ ಮತ್ತು ಟೊಬಾಗೊಟುವಾಲುಥೈವಾನ್ತಾಂಜೇನಿ" + + "ಯಾಉಕ್ರೈನ್ಉಗಾಂಡಾಯುಎಸ್\u200c. ಔಟ್\u200cಲೇಯಿಂಗ್ ದ್ವೀಪಗಳುಸಂಯುಕ್ತ ಸಂಸ್ಥಾನಗಳ" + + "ುಅಮೇರಿಕಾ ಸಂಯುಕ್ತ ಸಂಸ್ಥಾನಉರುಗ್ವೇಉಜ್ಬೇಕಿಸ್ಥಾನ್ವ್ಯಾಟಿಕನ್ಸೇಂಟ್. ವಿನ್ಸೆಂಟ್ " + + "ಮತ್ತು ಗ್ರೆನೆಡೈನ್ಸ್ವೆನೆಜುವೆಲಾಬ್ರಿಟಿಷ್ ವರ್ಜಿನ್ ದ್ವೀಪಗಳುಯು.ಎಸ್. ವರ್ಜಿನ್ ದ" + + "್ವೀಪಗಳುವಿಯೇಟ್ನಾಮ್ವನೌಟುವಾಲಿಸ್ ಮತ್ತು ಫುಟುನಾಸಮೋವಾಕೊಸೊವೊಯೆಮನ್ಮಯೊಟ್ಟೆದಕ್ಷಿಣ" + + " ಆಫ್ರಿಕಾಝಾಂಬಿಯಾಜಿಂಬಾಬ್ವೆಅಜ್ಞಾತ ಪ್ರದೇಶಪ್ರಪಂಚಆಫ್ರಿಕಾಉತ್ತರ ಅಮೇರಿಕಾದಕ್ಷಿಣ ಅಮ" + + "ೇರಿಕಾಓಶಿಯೇನಿಯಾಪಶ್ಚಿಮ ಆಫ್ರಿಕಾಮಧ್ಯ ಅಮೇರಿಕಾಪೂರ್ವ ಆಫ್ರಿಕಾಉತ್ತರ ಆಫ್ರಿಕಾಮಧ್ಯ" + + " ಆಫ್ರಿಕಾಆಫ್ರಿಕಾದ ದಕ್ಷಿಣ ಭಾಗಅಮೆರಿಕಾಸ್ಅಮೇರಿಕಾದ ಉತ್ತರ ಭಾಗಕೆರೀಬಿಯನ್ಪೂರ್ವ ಏಷ್" + + "ಯಾದಕ್ಷಿಣ ಏಷ್ಯಾಆಗ್ನೇಯ ಏಷ್ಯಾದಕ್ಷಿಣ ಯೂರೋಪ್ಆಸ್ಟ್ರೇಲೇಷ್ಯಾಮೆಲನೇಷಿಯಾಮೈಕ್ರೋನೇಶ" + + "ಿಯನ್ ಪ್ರದೇಶಪಾಲಿನೇಷ್ಯಾಏಷ್ಯಾಮಧ್ಯ ಏಷ್ಯಾಪಶ್ಚಿಮ ಏಷ್ಯಾಯೂರೋಪ್ಪೂರ್ವ ಯೂರೋಪ್ಉತ್ತ" + + "ರ ಯೂರೋಪ್ಪಶ್ಚಿಮ ಯೂರೋಪ್ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕಾ" + +var knRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0028, 0x003a, 0x0075, 0x0099, 0x00d7, 0x00f5, 0x0110, + 0x012b, 0x013d, 0x015b, 0x0179, 0x01a1, 0x01bc, 0x01da, 0x01e9, + 0x021a, 0x0238, 0x0282, 0x029d, 0x02be, 0x02d9, 0x02fe, 0x0319, + 0x032e, 0x0343, 0x0355, 0x0383, 0x0398, 0x03aa, 0x03c2, 0x040b, + 0x0423, 0x0438, 0x044a, 0x046c, 0x048d, 0x04a2, 0x04b4, 0x04c3, + 0x0506, 0x0530, 0x0568, 0x059e, 0x05ce, 0x05f3, 0x0618, 0x0624, + 0x063f, 0x064b, 0x0663, 0x06a6, 0x06c5, 0x06d7, 0x06f3, 0x070b, + 0x0736, 0x074b, 0x0773, 0x0785, 0x07a7, 0x07b9, 0x07d7, 0x07ef, + // Entry 40 - 7F + 0x0826, 0x0841, 0x0879, 0x0894, 0x08af, 0x08c4, 0x08e6, 0x0901, + 0x0913, 0x092e, 0x095c, 0x095c, 0x0980, 0x098c, 0x09cf, 0x09f3, + 0x0a15, 0x0a2d, 0x0a3f, 0x0a70, 0x0a88, 0x0aa0, 0x0ac5, 0x0ae0, + 0x0aec, 0x0b0d, 0x0b37, 0x0b52, 0x0b5e, 0x0b76, 0x0ba7, 0x0bb9, + 0x0c45, 0x0c63, 0x0c75, 0x0c9a, 0x0ca9, 0x0cd9, 0x0d3f, 0x0d5a, + 0x0d78, 0x0d84, 0x0d96, 0x0dc4, 0x0de2, 0x0dfa, 0x0e0f, 0x0e35, + 0x0e41, 0x0e95, 0x0ea4, 0x0eb3, 0x0ed4, 0x0ee0, 0x0ef2, 0x0f01, + 0x0f19, 0x0f28, 0x0f3a, 0x0f5e, 0x0f79, 0x0f91, 0x0fa9, 0x0fee, + // Entry 80 - BF + 0x1010, 0x1035, 0x1047, 0x106f, 0x1090, 0x10a2, 0x10b7, 0x10d9, + 0x1100, 0x1118, 0x1130, 0x1142, 0x1160, 0x117e, 0x1196, 0x11a8, + 0x11c0, 0x11d2, 0x11ea, 0x120b, 0x1233, 0x124e, 0x127c, 0x12a0, + 0x12ac, 0x12d6, 0x12f1, 0x1313, 0x1351, 0x136f, 0x138d, 0x13b1, + 0x13c3, 0x13d8, 0x13f6, 0x1405, 0x141d, 0x1432, 0x144d, 0x1462, + 0x1493, 0x14a2, 0x14ca, 0x14e2, 0x1500, 0x152d, 0x153f, 0x154e, + 0x155a, 0x1566, 0x1587, 0x1593, 0x15a2, 0x15ae, 0x15e2, 0x1610, + 0x162e, 0x1649, 0x1664, 0x16a9, 0x16e3, 0x1708, 0x1751, 0x176c, + // Entry C0 - FF + 0x177b, 0x1790, 0x179f, 0x17da, 0x17f5, 0x180d, 0x1825, 0x1834, + 0x1849, 0x186b, 0x1899, 0x18b7, 0x18c9, 0x18de, 0x18f9, 0x191b, + 0x1939, 0x198a, 0x19a8, 0x19d3, 0x19f8, 0x1a0d, 0x1a25, 0x1a3a, + 0x1a5f, 0x1aa7, 0x1acf, 0x1af7, 0x1b09, 0x1b30, 0x1b65, 0x1bb6, + 0x1bc2, 0x1c06, 0x1c12, 0x1c2d, 0x1c4e, 0x1c66, 0x1c88, 0x1cb5, + 0x1ccd, 0x1cd9, 0x1ce8, 0x1d29, 0x1d3b, 0x1d4d, 0x1d68, 0x1d7d, + 0x1d8f, 0x1ddd, 0x1e11, 0x1e52, 0x1e67, 0x1e8e, 0x1ea9, 0x1f0a, + 0x1f28, 0x1f6f, 0x1faf, 0x1fcd, 0x1fdc, 0x2011, 0x2020, 0x2032, + // Entry 100 - 13F + 0x2041, 0x2056, 0x207e, 0x2093, 0x20ae, 0x20d3, 0x20e5, 0x20fa, + 0x211f, 0x2147, 0x2162, 0x218a, 0x21ac, 0x21d1, 0x21f6, 0x2218, + 0x224d, 0x2268, 0x229a, 0x22b5, 0x22d4, 0x22f6, 0x2318, 0x233d, + 0x2364, 0x237f, 0x23b9, 0x23d7, 0x23e6, 0x2402, 0x2424, 0x2436, + 0x2458, 0x247a, 0x249f, 0x24cd, +} // Size: 608 bytes + +const koRegionStr string = "" + // Size: 3880 bytes + "어센션 섬안도라아랍에미리트아프가니스탄앤티가 바부다앵귈라알바니아아르메니아앙골라남극 대륙아르헨티나아메리칸 사모아오스트리아오스트레일리아" + + "아루바올란드 제도아제르바이잔보스니아 헤르체고비나바베이도스방글라데시벨기에부르키나파소불가리아바레인부룬디베냉생바르텔레미버뮤다브루나이" + + "볼리비아네덜란드령 카리브브라질바하마부탄부베섬보츠와나벨라루스벨리즈캐나다코코스 제도콩고-킨샤사중앙 아프리카 공화국콩고-브라자빌스위" + + "스코트디부아르쿡 제도칠레카메룬중국콜롬비아클립퍼튼 섬코스타리카쿠바카보베르데퀴라소크리스마스섬키프로스체코독일디에고 가르시아지부티덴마" + + "크도미니카도미니카 공화국알제리세우타 및 멜리야에콰도르에스토니아이집트서사하라에리트리아스페인에티오피아유럽 연합핀란드피지포클랜드 제" + + "도미크로네시아페로 제도프랑스가봉영국그레나다조지아프랑스령 기아나건지가나지브롤터그린란드감비아기니과들루프적도 기니그리스사우스조지아 " + + "사우스샌드위치 제도과테말라괌기니비사우가이아나홍콩(중국 특별행정구)허드 맥도널드 제도온두라스크로아티아아이티헝가리카나리아 제도인도" + + "네시아아일랜드이스라엘맨 섬인도영국령 인도양 식민지이라크이란아이슬란드이탈리아저지자메이카요르단일본케냐키르기스스탄캄보디아키리바시코모" + + "로세인트키츠 네비스북한대한민국쿠웨이트케이맨 제도카자흐스탄라오스레바논세인트루시아리히텐슈타인스리랑카라이베리아레소토리투아니아룩셈부르" + + "크라트비아리비아모로코모나코몰도바몬테네그로생마르탱마다가스카르마셜 제도마케도니아말리미얀마몽골마카오(중국 특별행정구)북마리아나제도마" + + "르티니크모리타니몬트세라트몰타모리셔스몰디브말라위멕시코말레이시아모잠비크나미비아뉴칼레도니아니제르노퍽섬나이지리아니카라과네덜란드노르웨이" + + "네팔나우루니우에뉴질랜드오만파나마페루프랑스령 폴리네시아파푸아뉴기니필리핀파키스탄폴란드생피에르 미클롱핏케언 섬푸에르토리코팔레스타인 " + + "지구포르투갈팔라우파라과이카타르오세아니아 외곽리유니온루마니아세르비아러시아르완다사우디아라비아솔로몬 제도세이셸수단스웨덴싱가포르세인트" + + "헬레나슬로베니아스발바르제도-얀마웬섬슬로바키아시에라리온산마리노세네갈소말리아수리남남수단상투메 프린시페엘살바도르신트마르턴시리아스와질" + + "란드트리스탄다쿠나터크스 케이커스 제도차드프랑스 남부 지방토고태국타지키스탄토켈라우동티모르투르크메니스탄튀니지통가터키트리니다드 토바" + + "고투발루대만탄자니아우크라이나우간다미국령 해외 제도유엔미국우루과이우즈베키스탄바티칸 시국세인트빈센트그레나딘베네수엘라영국령 버진아일" + + "랜드미국령 버진아일랜드베트남바누아투왈리스-푸투나 제도사모아코소보예멘마요트남아프리카잠비아짐바브웨알려지지 않은 지역세계아프리카북아" + + "메리카남아메리카(남미)오세아니아서부 아프리카중앙 아메리카동부 아프리카북부 아프리카중부 아프리카남부 아프리카아메리카 대륙북부 아" + + "메리카카리브 제도동아시아남아시아동남아시아남유럽오스트랄라시아멜라네시아미크로네시아 지역폴리네시아아시아중앙 아시아서아시아유럽동유럽북" + + "유럽서유럽라틴 아메리카" + +var koRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000d, 0x0016, 0x0028, 0x003a, 0x004d, 0x0056, 0x0062, + 0x0071, 0x007a, 0x0087, 0x0096, 0x00ac, 0x00bb, 0x00d0, 0x00d9, + 0x00e9, 0x00fb, 0x011a, 0x0129, 0x0138, 0x0141, 0x0153, 0x015f, + 0x0168, 0x0171, 0x0177, 0x0189, 0x0192, 0x019e, 0x01aa, 0x01c3, + 0x01cc, 0x01d5, 0x01db, 0x01e4, 0x01f0, 0x01fc, 0x0205, 0x020e, + 0x021e, 0x022e, 0x024b, 0x025e, 0x0267, 0x0279, 0x0283, 0x0289, + 0x0292, 0x0298, 0x02a4, 0x02b4, 0x02c3, 0x02c9, 0x02d8, 0x02e1, + 0x02f3, 0x02ff, 0x0305, 0x030b, 0x0321, 0x032a, 0x0333, 0x033f, + // Entry 40 - 7F + 0x0355, 0x035e, 0x0375, 0x0381, 0x0390, 0x0399, 0x03a5, 0x03b4, + 0x03bd, 0x03cc, 0x03d9, 0x03d9, 0x03e2, 0x03e8, 0x03fb, 0x040d, + 0x041a, 0x0423, 0x0429, 0x042f, 0x043b, 0x0444, 0x045a, 0x0460, + 0x0466, 0x0472, 0x047e, 0x0487, 0x048d, 0x0499, 0x04a6, 0x04af, + 0x04de, 0x04ea, 0x04ed, 0x04fc, 0x0508, 0x0526, 0x0540, 0x054c, + 0x055b, 0x0564, 0x056d, 0x0580, 0x058f, 0x059b, 0x05a7, 0x05ae, + 0x05b4, 0x05d1, 0x05da, 0x05e0, 0x05ef, 0x05fb, 0x0601, 0x060d, + 0x0616, 0x061c, 0x0622, 0x0634, 0x0640, 0x064c, 0x0655, 0x066e, + // Entry 80 - BF + 0x0674, 0x0680, 0x068c, 0x069c, 0x06ab, 0x06b4, 0x06bd, 0x06cf, + 0x06e1, 0x06ed, 0x06fc, 0x0705, 0x0714, 0x0723, 0x072f, 0x0738, + 0x0741, 0x074a, 0x0753, 0x0762, 0x076e, 0x0780, 0x078d, 0x079c, + 0x07a2, 0x07ab, 0x07b1, 0x07d2, 0x07e7, 0x07f6, 0x0802, 0x0811, + 0x0817, 0x0823, 0x082c, 0x0835, 0x083e, 0x084d, 0x0859, 0x0865, + 0x0877, 0x0880, 0x0889, 0x0898, 0x08a4, 0x08b0, 0x08bc, 0x08c2, + 0x08cb, 0x08d4, 0x08e0, 0x08e6, 0x08ef, 0x08f5, 0x0911, 0x0923, + 0x092c, 0x0938, 0x0941, 0x0957, 0x0964, 0x0976, 0x098c, 0x0998, + // Entry C0 - FF + 0x09a1, 0x09ad, 0x09b6, 0x09cc, 0x09d8, 0x09e4, 0x09f0, 0x09f9, + 0x0a02, 0x0a17, 0x0a27, 0x0a30, 0x0a36, 0x0a3f, 0x0a4b, 0x0a5d, + 0x0a6c, 0x0a8b, 0x0a9a, 0x0aa9, 0x0ab5, 0x0abe, 0x0aca, 0x0ad3, + 0x0adc, 0x0af2, 0x0b01, 0x0b10, 0x0b19, 0x0b28, 0x0b3d, 0x0b5a, + 0x0b60, 0x0b77, 0x0b7d, 0x0b83, 0x0b92, 0x0b9e, 0x0baa, 0x0bbf, + 0x0bc8, 0x0bce, 0x0bd4, 0x0bed, 0x0bf6, 0x0bfc, 0x0c08, 0x0c17, + 0x0c20, 0x0c37, 0x0c3d, 0x0c43, 0x0c4f, 0x0c61, 0x0c71, 0x0c8f, + 0x0c9e, 0x0cba, 0x0cd6, 0x0cdf, 0x0ceb, 0x0d05, 0x0d0e, 0x0d17, + // Entry 100 - 13F + 0x0d1d, 0x0d26, 0x0d35, 0x0d3e, 0x0d4a, 0x0d64, 0x0d6a, 0x0d76, + 0x0d85, 0x0d9c, 0x0dab, 0x0dbe, 0x0dd1, 0x0de4, 0x0df7, 0x0e0a, + 0x0e1d, 0x0e30, 0x0e43, 0x0e53, 0x0e5f, 0x0e6b, 0x0e7a, 0x0e83, + 0x0e98, 0x0ea7, 0x0ec0, 0x0ecf, 0x0ed8, 0x0ee8, 0x0ef4, 0x0efa, + 0x0f03, 0x0f0c, 0x0f15, 0x0f28, +} // Size: 608 bytes + +const kyRegionStr string = "" + // Size: 5830 bytes + "Ассеншин аралыАндорраБириккен Араб ЭмираттарыАфганистанАнтигуа жана Барб" + + "удаАнгуилаАлбанияАрменияАнголаАнтарктикаАргентинаАмерика СамоасыАвстрия" + + "АвстралияАрубаАланд аралдарыАзербайжанБосния жана ГерцеговинаБарбадосБа" + + "нгладешБельгияБуркина-ФасоБолгарияБахрейнБурундиБенинСент БартелемиБерм" + + "уд аралдарыБрунейБоливияКариб НидерланддарыБразилияБагам аралдарыБутанБ" + + "уве аралдарыБотсванаБеларусьБелизКанадаКокос (Килиӊ) аралдарыКонго-Кинш" + + "асаБорбордук Африка РеспубликасыКонго-БраззавилШвейцарияКот-д’ИвуарКук " + + "аралдарыЧилиКамерунКытайКолумбияКлиппертон аралыКоста-РикаКубаКапе Верд" + + "еКюрасаоКрисмас аралыКипрЧех РеспубликасыГерманияДиего ГарсияДжибутиДан" + + "ияДоминикаДоминика РеспубликасыАлжирСеута жана МелиллаЭквадорЭстонияЕги" + + "петБатыш СахараЭритреяИспанияЭфиопияЕвропа БиримдигиФинляндияФиджиФолкл" + + "энд аралдарыМикронезияФарер аралдарыФранцияГабонУлуу БританияГренадаГру" + + "зияГвиана (Франция)ГернсиГанаГибралтарГренландияГамбияГвинеяГваделупаЭк" + + "ваториалдык ГвинеяГрецияТүштүк Жоржия жана Түштүк Сэндвич аралдарыГвате" + + "малаГуамГвинея-БисауГайанаГонконг Кытай АААХерд жана Макдоналд аралдары" + + "ГондурасХорватияГаитиВенгрияКанар аралдарыИндонезияИрландияИзраильМэн а" + + "ралыИндияБританиянын Индия океанындагы аймагыИракИранИсландияИталияЖерс" + + "иЯмайкаИорданияЯпонияКенияКыргызстанКамбоджаКирибатиКоморосСент-Китс жа" + + "на НевисТүндүк КореяТүштүк КореяКувейтКайман АралдарыКазакстанЛаосЛиван" + + "Сент-ЛюсияЛихтенштейнШри-ЛанкаЛиберияЛесотоЛитваЛюксембургЛатвияЛивияМа" + + "роккоМонакоМолдоваЧерногорияСент-МартинМадагаскарМаршалл аралдарыМакедо" + + "нияМалиМьянма (Бирма)МонголияМакау Кытай АААТүндүк Мариана аралдарыМарт" + + "иникаМавританияМонсерратМальтаМаврикийМалдив аралдарыМалавиМексикаМалай" + + "зияМозамбикНамибияЖаӊы КаледонияНигерНорфолк аралыНигерияНикарагуаНидер" + + "ланддарНорвегияНепалНауруНиуэЖаӊы ЗеландияОманПанамаПеруФранцуз Полинез" + + "иясыПапуа Жаңы-ГвинеяФиллипинПакистанПольшаСен-Пьер жана МикелонПиткэрн" + + " аралдарыПуэрто-РикоПалестина аймактарыПортугалияПалауПарагвайКатарАлыск" + + "ы ОкеанияРеюнионРумынияСербияРоссияРуандаСауд АрабиясыСоломон аралдарыС" + + "ейшелдерСуданШвецияСингапурЫйык ЕленаСловенияСвалбард жана Жан МайенСло" + + "вакияСьерра-ЛеонеСан МариноСенегалСомалиСуринамеТүштүк СуданСан-Томе жа" + + "на ПринсипиЭл СалвадорСинт МаартенСирияСвазилендТристан да КуньяТүркс ж" + + "ана Кайкос аралдарыЧадФранциянын Түштүктөгү аймактарыТогоТаиландТажикст" + + "анТокелауТимор-ЛестеТүркмөнстанТунисТонгаТүркияТринидад жана ТобагоТува" + + "луТайваньТанзанияУкраинаУгандаАКШнын сырткы аралдарыБУАмерика Кошмо Шта" + + "ттарыУругвайӨзбекстанВатиканСент-Винсент жана ГренадиналарВенесуэлаВирг" + + "ин аралдары (Британия)Виргин аралдары (АКШ)ВьетнамВануатуУоллис жана Фу" + + "тунаСамоаКосовоЙеменМайоттаТүштүк Африка РеспубликасыЗамбияЗимбабвеБелг" + + "исиз чөлкөмДүйнөАфрикаТүндүк АмерикаТүштүк АмерикаОкеанияБатыш АфрикаБо" + + "рбордук АмерикаЧыгыш АфрикаТүндүк АфрикаБорбордук АфрикаТүштүк АфрикаАм" + + "ерикаТүндүк Америка (чөлкөм)Кариб аралдарыЧыгыш АзияТүштүк АзияТүштүк-Ч" + + "ыгыш АзияТүштүк ЕвропаАвстралазияМеланезияМикронезия чөлкөмүПолинезияАз" + + "ияБорбор АзияБатыш АзияЕвропаЧыгыш ЕвропаТүндүк ЕвропаБатыш ЕвропаЛатын" + + " Америкасы" + +var kyRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001b, 0x0029, 0x0057, 0x006b, 0x0091, 0x009f, 0x00ad, + 0x00bb, 0x00c7, 0x00db, 0x00ed, 0x010a, 0x0118, 0x012a, 0x0134, + 0x014f, 0x0163, 0x018f, 0x019f, 0x01b1, 0x01bf, 0x01d6, 0x01e6, + 0x01f4, 0x0202, 0x020c, 0x0227, 0x0244, 0x0250, 0x025e, 0x0283, + 0x0293, 0x02ae, 0x02b8, 0x02d1, 0x02e1, 0x02f1, 0x02fb, 0x0307, + 0x032f, 0x0348, 0x0380, 0x039d, 0x03af, 0x03c5, 0x03dc, 0x03e4, + 0x03f2, 0x03fc, 0x040c, 0x042b, 0x043e, 0x0446, 0x0459, 0x0467, + 0x0480, 0x0488, 0x04a7, 0x04b7, 0x04ce, 0x04dc, 0x04e6, 0x04f6, + // Entry 40 - 7F + 0x051f, 0x0529, 0x054b, 0x0559, 0x0567, 0x0573, 0x058a, 0x0598, + 0x05a6, 0x05b4, 0x05d3, 0x05d3, 0x05e5, 0x05ef, 0x0610, 0x0624, + 0x063f, 0x064d, 0x0657, 0x0670, 0x067e, 0x068a, 0x06a7, 0x06b3, + 0x06bb, 0x06cd, 0x06e1, 0x06ed, 0x06f9, 0x070b, 0x0732, 0x073e, + 0x078d, 0x079f, 0x07a7, 0x07be, 0x07ca, 0x07ea, 0x081f, 0x082f, + 0x083f, 0x0849, 0x0857, 0x0872, 0x0884, 0x0894, 0x08a2, 0x08b3, + 0x08bd, 0x0902, 0x090a, 0x0912, 0x0922, 0x092e, 0x0938, 0x0944, + 0x0954, 0x0960, 0x096a, 0x097e, 0x098e, 0x099e, 0x09ac, 0x09d1, + // Entry 80 - BF + 0x09e8, 0x09ff, 0x0a0b, 0x0a28, 0x0a3a, 0x0a42, 0x0a4c, 0x0a5f, + 0x0a75, 0x0a86, 0x0a94, 0x0aa0, 0x0aaa, 0x0abe, 0x0aca, 0x0ad4, + 0x0ae2, 0x0aee, 0x0afc, 0x0b10, 0x0b25, 0x0b39, 0x0b58, 0x0b6a, + 0x0b72, 0x0b8b, 0x0b9b, 0x0bb7, 0x0be3, 0x0bf5, 0x0c09, 0x0c1b, + 0x0c27, 0x0c37, 0x0c54, 0x0c60, 0x0c6e, 0x0c7e, 0x0c8e, 0x0c9c, + 0x0cb7, 0x0cc1, 0x0cda, 0x0ce8, 0x0cfa, 0x0d12, 0x0d22, 0x0d2c, + 0x0d36, 0x0d3e, 0x0d57, 0x0d5f, 0x0d6b, 0x0d73, 0x0d98, 0x0db8, + 0x0dc8, 0x0dd8, 0x0de4, 0x0e0b, 0x0e2a, 0x0e3f, 0x0e64, 0x0e78, + // Entry C0 - FF + 0x0e82, 0x0e92, 0x0e9c, 0x0eb7, 0x0ec5, 0x0ed3, 0x0edf, 0x0eeb, + 0x0ef7, 0x0f10, 0x0f2f, 0x0f41, 0x0f4b, 0x0f57, 0x0f67, 0x0f7a, + 0x0f8a, 0x0fb5, 0x0fc5, 0x0fdc, 0x0fef, 0x0ffd, 0x1009, 0x1019, + 0x1030, 0x1059, 0x106e, 0x1085, 0x108f, 0x10a1, 0x10bf, 0x10f0, + 0x10f6, 0x1132, 0x113a, 0x1148, 0x115a, 0x1168, 0x117d, 0x1193, + 0x119d, 0x11a7, 0x11b3, 0x11d9, 0x11e5, 0x11f3, 0x1203, 0x1211, + 0x121d, 0x1247, 0x124b, 0x1275, 0x1283, 0x1295, 0x12a3, 0x12dc, + 0x12ee, 0x131e, 0x1344, 0x1352, 0x1360, 0x1382, 0x138c, 0x1398, + // Entry 100 - 13F + 0x13a2, 0x13b0, 0x13e2, 0x13ee, 0x13fe, 0x141b, 0x1425, 0x1431, + 0x144c, 0x1467, 0x1475, 0x148c, 0x14ad, 0x14c4, 0x14dd, 0x14fc, + 0x1515, 0x1523, 0x154d, 0x1568, 0x157b, 0x1590, 0x15b0, 0x15c9, + 0x15df, 0x15f1, 0x1614, 0x1626, 0x162e, 0x1643, 0x1656, 0x1662, + 0x1679, 0x1692, 0x16a9, 0x16c6, +} // Size: 608 bytes + +const loRegionStr string = "" + // Size: 8118 bytes + "ເກາະອາເຊນຊັນອັນດໍຣາສະຫະລັດອາຣັບເອມິເຣດອາຟການິດສະຖານແອນທິກົວ ແລະ ບາບູດາແອ" + + "ນກຸຍລາແອວເບເນຍອາເມເນຍແອງໂກລາແອນຕາດຕິກາອາເຈນທິນາອາເມຣິກາ ຊາມົວອອສເທຣຍອອ" + + "ສເຕຣເລຍອາຣູບາຫມູ່ເກາະໂອລັນອາເຊີໄບຈານບອດສະເນຍ ແລະ ແຮສໂກວີນາບາບາໂດສບັງກະ" + + "ລາເທດເບວຢຽມເບີກິນາ ຟາໂຊບັງກາເຣຍບາເຣນບູຣຸນດິເບນິນເຊນ ບາເທເລມີເບີມິວດາບຣ" + + "ູໄນໂບລິເວຍຄາຣິບບຽນ ເນເທີແລນບະເລຊີນບາຮາມາສພູຖານເກາະບູເວດບອດສະວານາເບວບາຣ" + + "ຸສເບລີຊແຄນາດາຫມູ່ເກາະໂກໂກສຄອງໂກ - ຄິນຊາຊາສາທາລະນະລັດອາຟຣິກາກາງຄອງໂກ - " + + "ບຣາຊາວິວສະວິດເຊີແລນໂຄຕີ ວົວໝູ່ເກາະຄຸກຈີເລຄາເມຣູນຈີນໂຄລົມເບຍເກາະຄລິບເປີ" + + "ຕັນໂຄສຕາ ຣິກາຄິວບາເຄບ ເວີດຄູຣາຊາວເກາະຄຣິສມາດໄຊປຣັສສາທາລະນະລັດເຊັກເຢຍລະ" + + "ມັນດິເອໂກ ກາເຊຍຈິບູຕິເດນມາກໂດມີນິຄາສາທາລະນະລັດ ໂດມິນິກັນອັລຈິເຣຍເຊວຕາ " + + "ແລະເມລິນລາເອກວາດໍເອສໂຕເນຍອີຢິບຊາຮາຣາຕາເວັນຕົກເອຣິເທຣຍສະເປນອີທິໂອເປຍສະຫ" + + "ະພາບຢູໂຣບຟິນແລນຟິຈິຫມູ່ເກາະຟອກແລນໄມໂຄຣນີເຊຍຫມູ່ເກາະແຟໂຣຝຣັ່ງກາບອນສະຫະລ" + + "າດຊະອະນາຈັກເກຣເນດາຈໍເຈຍເຟຣນຊ໌ ກຸຍອານາເກີນຊີການາຈິບບຣອນທາກຣີນແລນສາທາລະນ" + + "ະລັດແກມເບຍກິນີກົວດາລູບເອຄົວໂທຣຽວ ກີນີກຣີຊໝູ່ເກາະຈໍເຈຍ & ເຊົາ ແຊນວິດກົວ" + + "ເທມາລາກວາມກິນີ-ບິສເຊົາກາຍຢານາຮອງກົງ ເຂດປົກຄອງພິເສດ ຈີນໝູ່ເກາະເຮີດ & ແມ" + + "ັກໂດນອລຮອນດູຣັສໂຄຣເອເທຍໄຮຕິຮັງກາຣີໝູ່ເກາະຄານາຣີອິນໂດເນເຊຍໄອຣ໌ແລນອິສຣາເ" + + "ອວເອວ ອອບ ແມນອິນເດຍເຂດແດນອັງກິດໃນມະຫາສະມຸດອິນເດຍອີຣັກອີຣານໄອສແລນອິຕາລີ" + + "ເຈີຊີຈາໄມຄາຈໍແດນຍີ່ປຸ່ນເຄນຢາຄີກິສຖານກຳປູເຈຍຄິຣິບາທິໂຄໂມໂຣສເຊນ ຄິດ ແລະ " + + "ເນວິສເກົາຫລີເໜືອເກົາຫລີໃຕ້ກູເວດໝູ່ເກາະ ເຄແມນຄາຊັກສະຖານລາວເລບານອນເຊນ ລູ" + + "ເຊຍລິດເທນສະຕາຍສີລັງກາລິເບີເຣຍເລໂຊໂທລິທົວເນຍລຸກຊຳບົວລັດເວຍລິເບຍໂມຣັອກໂຄ" + + "ໂມນາໂຄໂມນໂດວາມອນເຕເນໂກຣເຊນ ມາທິນມາດາກາສກາຫມູ່ເກາະມາແຊວແມຊິໂດເນຍມາລີມຽນ" + + "ມາ (ເບີມາ)ມອງໂກເລຍມາເກົ້າ ເຂດປົກຄອງພິເສດ ຈີນຫມູ່ເກາະມາແຊວຕອນເຫນືອມາຕິນ" + + "ີກມົວຣິເທເນຍມອນເຊີຣາດມອນທາມົວຣິຊຽສມັນດິຟມາລາວີເມັກຊິໂກມາເລເຊຍໂມແຊມບິກນ" + + "າມີເບຍນິວ ຄາເລໂດເນຍນິເຈີເກາະນໍໂຟກໄນຈີເຣຍນິກຄາຣາກົວເນເທີແລນນໍເວເນປານນາອ" + + "ູຣູນີອູເອນິວຊີແລນໂອມານພານາມາເປຣູເຟຣນຊ໌ ໂພລິນີເຊຍປາປົວນິວກີນີຟິລິບປິນປາ" + + "ກິດສະຖານໂປແລນເຊນ ປີແອ ມິເກວລອນໝູ່ເກາະພິດແຄນເພືອໂຕ ຣິໂກດິນແດນ ປາເລສຕິນຽ" + + "ນພອລທູໂກປາລາວພາຣາກວຍກາຕາເຂດຫ່າງໄກໂອຊີເນຍເຣອູນິຍົງໂຣແມເນຍເຊີເບຍຣັດເຊຍຣວ" + + "ັນດາຊາອຸດິ ອາຣາເບຍຫມູ່ເກາະໂຊໂລມອນເຊເຊວເລສຊູດານສະວີເດັນສິງກະໂປເຊນ ເຮເລນ" + + "າສະໂລເວເນຍສະວາບາ ແລະ ແຢນ ມາເຢນສະໂລວາເກຍເຊຍຣາ ລີໂອນແຊນ ມາຣິໂນເຊນີໂກລໂຊມ" + + "າລີຊູຣິນາມຊູດານໃຕ້ເຊົາທູເມ ແລະ ພຣິນຊິບເອວ ຊໍວາດໍຊິນ ມາເທັນຊີເຣຍສະວາຊິແ" + + "ລນທຣິສຕັນ ດາ ກັນຮາໝູ່ເກາະ ເທີກ ແລະ ໄຄໂຄສຊາດເຂດແດນທາງໃຕ້ຂອຝຮັ່ງໂຕໂກໄທທາ" + + "ຈິກິດສະຖານໂຕເກເລົາທິມໍ-ເລສເຕເທີກເມນິສະຖານຕູນິເຊຍທອງກາເທີຄີທຣິນິແດດ ແລະ" + + " ໂທແບໂກຕູວາລູໄຕ້ຫວັນທານຊາເນຍຢູເຄຣນອູການດາໝູ່ເກາະຮອບນອກຂອງສະຫະລັດຯສະຫະປະຊ" + + "າຊາດສະຫະລັດອູຣຸກວຍອຸສເບກິສະຖານນະຄອນ ວາຕິກັນເຊນ ວິນເຊນ ແລະ ເກຣເນດິນເວເນ" + + "ຊູເອລາໝູ່ເກາະ ບຣິທິຊ ເວີຈິນໝູ່ເກາະ ຢູເອສ ເວີຈິນຫວຽດນາມວານົວຕູວາລລິສ ແລ" + + "ະ ຟູຕູນາຊາມົວໂຄໂຊໂວເຢເມນມາຢັອດອາຟຣິກາໃຕ້ແຊມເບຍຊິມບັບເວຂົງເຂດທີ່ບໍ່ຮູ້ຈ" + + "ັກໂລກອາຟຣິກາອາເມລິກາເໜືອອາເມລິກາໃຕ້ໂອຊີອານີອາຟຣິກາຕາເວັນຕົກອາເມລິກາກາງ" + + "ອາຟຣິກາຕາເວັນອອກອາຟຣິກາເໜືອອາຟຣິກາກາງອາເມຣິກາພາກເໜືອອາເມລີກາຄາຣິບບຽນອາ" + + "ຊີຕາເວັນອອກອາຊີໄຕ້ອາຊີຕາເວັນອອກສ່ຽງໄຕ້ຢູໂຣບໃຕ້ໂອດສະຕາລີເມລານີເຊຍເຂດໄມໂ" + + "ຄຣເນຊຽນໂພລີນີເຊຍອາຊີອາຊີກາງອາຊີຕາເວັນຕົກຢູໂຣບຢູໂຣບຕາເວັນອອກຢູໂຣບເໜືອຢູ" + + "ໂຣບຕາເວັນຕົກລາຕິນ ອາເມລິກາ" + +var loRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0024, 0x0039, 0x0072, 0x0099, 0x00ce, 0x00e6, 0x00fe, + 0x0113, 0x0128, 0x0146, 0x0161, 0x0189, 0x019e, 0x01b9, 0x01cb, + 0x01f2, 0x0210, 0x024e, 0x0263, 0x0281, 0x0293, 0x02b5, 0x02cd, + 0x02dc, 0x02f1, 0x0300, 0x0322, 0x033a, 0x0349, 0x035e, 0x038f, + 0x03a4, 0x03b9, 0x03c8, 0x03e3, 0x03fe, 0x0416, 0x0425, 0x0437, + 0x045e, 0x0485, 0x04c4, 0x04ee, 0x050f, 0x0525, 0x0543, 0x054f, + 0x0564, 0x056d, 0x0585, 0x05af, 0x05cb, 0x05da, 0x05f0, 0x0605, + 0x0626, 0x0638, 0x0665, 0x067d, 0x069f, 0x06b1, 0x06c3, 0x06db, + // Entry 40 - 7F + 0x0718, 0x0730, 0x075e, 0x0773, 0x078b, 0x079a, 0x07c7, 0x07df, + 0x07ee, 0x0809, 0x082d, 0x082d, 0x083f, 0x084b, 0x0875, 0x0893, + 0x08b7, 0x08c6, 0x08d5, 0x0905, 0x091a, 0x0929, 0x0951, 0x0963, + 0x096f, 0x098a, 0x099f, 0x09d2, 0x09de, 0x09f6, 0x0a21, 0x0a2d, + 0x0a73, 0x0a8e, 0x0a9a, 0x0abc, 0x0ad1, 0x0b18, 0x0b57, 0x0b6f, + 0x0b87, 0x0b93, 0x0ba8, 0x0bcf, 0x0bed, 0x0c02, 0x0c1a, 0x0c37, + 0x0c49, 0x0ca0, 0x0caf, 0x0cbe, 0x0cd0, 0x0ce2, 0x0cf1, 0x0d03, + 0x0d12, 0x0d27, 0x0d36, 0x0d4e, 0x0d63, 0x0d7b, 0x0d90, 0x0dbd, + // Entry 80 - BF + 0x0dde, 0x0dfc, 0x0e0b, 0x0e30, 0x0e4e, 0x0e57, 0x0e6c, 0x0e85, + 0x0ea6, 0x0ebb, 0x0ed3, 0x0ee5, 0x0efd, 0x0f15, 0x0f27, 0x0f36, + 0x0f4e, 0x0f60, 0x0f75, 0x0f93, 0x0fac, 0x0fc7, 0x0fee, 0x1009, + 0x1015, 0x1036, 0x104e, 0x1098, 0x10d7, 0x10ec, 0x110a, 0x1125, + 0x1134, 0x114c, 0x115e, 0x1170, 0x1188, 0x119d, 0x11b5, 0x11ca, + 0x11ef, 0x11fe, 0x1219, 0x122e, 0x124c, 0x1264, 0x1270, 0x127f, + 0x1291, 0x12a3, 0x12bb, 0x12ca, 0x12dc, 0x12e8, 0x1316, 0x133a, + 0x1352, 0x1370, 0x137f, 0x13ae, 0x13d5, 0x13f4, 0x1425, 0x143a, + // Entry C0 - FF + 0x1449, 0x145e, 0x146a, 0x149a, 0x14b5, 0x14ca, 0x14dc, 0x14ee, + 0x1500, 0x1528, 0x1555, 0x156d, 0x157c, 0x1594, 0x15a9, 0x15c5, + 0x15e0, 0x1616, 0x1631, 0x1650, 0x166c, 0x1681, 0x1693, 0x16a8, + 0x16c0, 0x16f8, 0x1714, 0x1730, 0x173f, 0x175a, 0x1786, 0x17c2, + 0x17cb, 0x1804, 0x1810, 0x1816, 0x183a, 0x1852, 0x186e, 0x1895, + 0x18aa, 0x18b9, 0x18c8, 0x18fd, 0x190f, 0x1924, 0x193c, 0x194e, + 0x1963, 0x19ab, 0x19cc, 0x19e1, 0x19f6, 0x1a1a, 0x1a3f, 0x1a7e, + 0x1a9c, 0x1ad7, 0x1b0f, 0x1b24, 0x1b39, 0x1b68, 0x1b77, 0x1b89, + // Entry 100 - 13F + 0x1b98, 0x1baa, 0x1bc8, 0x1bda, 0x1bf2, 0x1c28, 0x1c31, 0x1c46, + 0x1c6a, 0x1c8b, 0x1ca3, 0x1cd3, 0x1cf4, 0x1d24, 0x1d45, 0x1d63, + 0x1d63, 0x1d7b, 0x1da8, 0x1dc0, 0x1de7, 0x1dfc, 0x1e38, 0x1e50, + 0x1e6b, 0x1e86, 0x1ead, 0x1ec8, 0x1ed4, 0x1ee9, 0x1f10, 0x1f1f, + 0x1f49, 0x1f64, 0x1f8e, 0x1fb6, +} // Size: 608 bytes + +const ltRegionStr string = "" + // Size: 3399 bytes + "Dangun Žengimo salaAndoraJungtiniai Arabų EmyrataiAfganistanasAntigva ir" + + " BarbudaAngilijaAlbanijaArmėnijaAngolaAntarktidaArgentinaAmerikos SamoaA" + + "ustrijaAustralijaArubaAlandų SalosAzerbaidžanasBosnija ir HercegovinaBar" + + "badosasBangladešasBelgijaBurkina FasasBulgarijaBahreinasBurundisBeninasS" + + "en BartelemiBermudaBrunėjusBolivijaKaribų NyderlandaiBrazilijaBahamosBut" + + "anasBuvė SalaBotsvanaBaltarusijaBelizasKanadaKokosų (Kilingo) SalosKonga" + + "s-KinšasaCentrinės Afrikos RespublikaKongas-BrazavilisŠveicarijaDramblio" + + " Kaulo KrantasKuko SalosČilėKamerūnasKinijaKolumbijaKlipertono salaKosta" + + " RikaKubaŽaliasis KyšulysKiurasaoKalėdų SalaKiprasČekijaVokietijaDiego G" + + "arsijaDžibutisDanijaDominikaDominikos RespublikaAlžyrasSeuta ir MelilaEk" + + "vadorasEstijaEgiptasVakarų SacharaEritrėjaIspanijaEtiopijaEuropos Sąjung" + + "aSuomijaFidžisFolklando SalosMikronezijaFarerų SalosPrancūzijaGabonasJun" + + "gtinė KaralystėGrenadaGruzijaPrancūzijos GvianaGernsisGanaGibraltarasGre" + + "nlandijaGambijaGvinėjaGvadelupaPusiaujo GvinėjaGraikijaPietų Džordžija i" + + "r Pietų Sandvičo salosGvatemalaGuamasBisau GvinėjaGajanaYpatingasis Admi" + + "nistracinis Kinijos Regionas HonkongasHerdo ir Makdonaldo SalosHondūrasK" + + "roatijaHaitisVengrijaKanarų salosIndonezijaAirijaIzraelisMeno SalaIndija" + + "Indijos Vandenyno Britų SritisIrakasIranasIslandijaItalijaDžersisJamaika" + + "JordanijaJaponijaKenijaKirgizijaKambodžaKiribatisKomoraiSent Kitsas ir N" + + "evisŠiaurės KorėjaPietų KorėjaKuveitasKaimanų SalosKazachstanasLaosasLib" + + "anasSent LusijaLichtenšteinasŠri LankaLiberijaLesotasLietuvaLiuksemburga" + + "sLatvijaLibijaMarokasMonakasMoldovaJuodkalnijaSen MartenasMadagaskarasMa" + + "ršalo SalosMakedonijaMalisMianmaras (Birma)MongolijaYpatingasis Administ" + + "racinis Kinijos Regionas MakaoMarianos Šiaurinės SalosMartinikaMauritani" + + "jaMontseratasMaltaMauricijusMaldyvaiMalavisMeksikaMalaizijaMozambikasNam" + + "ibijaNaujoji KaledonijaNigerisNorfolko salaNigerijaNikaragvaNyderlandaiN" + + "orvegijaNepalasNauruNiujėNaujoji ZelandijaOmanasPanamaPeruPrancūzijos Po" + + "linezijaPapua Naujoji GvinėjaFilipinaiPakistanasLenkijaSen Pjeras ir Mik" + + "elonasPitkerno salosPuerto RikasPalestinos teritorijaPortugalijaPalauPar" + + "agvajusKatarasNuošali OkeanijaReunjonasRumunijaSerbijaRusijaRuandaSaudo " + + "ArabijaSaliamono SalosSeišeliaiSudanasŠvedijaSingapūrasŠv. Elenos SalaSl" + + "ovėnijaSvalbardas ir Janas MajenasSlovakijaSiera LeonėSan MarinasSenegal" + + "asSomalisSurinamasPietų SudanasSan Tomė ir PrinsipėSalvadorasSint Marten" + + "asSirijaSvazilandasTristanas da KunjaTerkso ir Kaikoso SalosČadasPrancūz" + + "ijos Pietų sritysTogasTailandasTadžikijaTokelauRytų TimorasTurkmėnistana" + + "sTunisasTongaTurkijaTrinidadas ir TobagasTuvaluTaivanasTanzanijaUkrainaU" + + "gandaJungtinių Valstijų Mažosios Tolimosios SalosJungtinės TautosJungtin" + + "ės ValstijosUrugvajusUzbekistanasVatikano Miesto ValstybėŠventasis Vinc" + + "entas ir GrenadinaiVenesuelaDidžiosios Britanijos Mergelių SalosJungtini" + + "ų Valstijų Mergelių SalosVietnamasVanuatuVolisas ir FutūnaSamoaKosovasJ" + + "emenasMajotasPietų AfrikaZambijaZimbabvėnežinoma sritispasaulisAfrikaŠia" + + "urės AmerikaPietų AmerikaOkeanijaVakarų AfrikaCentrinė AmerikaRytų Afrik" + + "aŠiaurės AfrikaVidurio AfrikaPietinė AfrikaAmerikaŠiaurinė AmerikaKariba" + + "iRytų AzijaPietų AzijaPietryčių AzijaPietų EuropaAustralazijaMelanezijaM" + + "ikronezijos regionasPolinezijaAzijaCentrinė AzijaVakarų AzijaEuropaRytų " + + "EuropaŠiaurės EuropaVakarų EuropaLotynų Amerika" + +var ltRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0014, 0x001a, 0x0034, 0x0040, 0x0052, 0x005a, 0x0062, + 0x006b, 0x0071, 0x007b, 0x0084, 0x0092, 0x009a, 0x00a4, 0x00a9, + 0x00b6, 0x00c4, 0x00da, 0x00e4, 0x00f0, 0x00f7, 0x0104, 0x010d, + 0x0116, 0x011e, 0x0125, 0x0132, 0x0139, 0x0142, 0x014a, 0x015d, + 0x0166, 0x016d, 0x0174, 0x017e, 0x0186, 0x0191, 0x0198, 0x019e, + 0x01b5, 0x01c4, 0x01e1, 0x01f2, 0x01fd, 0x0213, 0x021d, 0x0223, + 0x022d, 0x0233, 0x023c, 0x024b, 0x0255, 0x0259, 0x026b, 0x0273, + 0x0280, 0x0286, 0x028d, 0x0296, 0x02a3, 0x02ac, 0x02b2, 0x02ba, + // Entry 40 - 7F + 0x02ce, 0x02d6, 0x02e5, 0x02ee, 0x02f4, 0x02fb, 0x030a, 0x0313, + 0x031b, 0x0323, 0x0333, 0x0333, 0x033a, 0x0341, 0x0350, 0x035b, + 0x0368, 0x0373, 0x037a, 0x038e, 0x0395, 0x039c, 0x03af, 0x03b6, + 0x03ba, 0x03c5, 0x03d0, 0x03d7, 0x03df, 0x03e8, 0x03f9, 0x0401, + 0x042d, 0x0436, 0x043c, 0x044a, 0x0450, 0x0486, 0x049f, 0x04a8, + 0x04b0, 0x04b6, 0x04be, 0x04cb, 0x04d5, 0x04db, 0x04e3, 0x04ec, + 0x04f2, 0x0511, 0x0517, 0x051d, 0x0526, 0x052d, 0x0535, 0x053c, + 0x0545, 0x054d, 0x0553, 0x055c, 0x0565, 0x056e, 0x0575, 0x0589, + // Entry 80 - BF + 0x059a, 0x05a8, 0x05b0, 0x05be, 0x05ca, 0x05d0, 0x05d7, 0x05e2, + 0x05f1, 0x05fb, 0x0603, 0x060a, 0x0611, 0x061e, 0x0625, 0x062b, + 0x0632, 0x0639, 0x0640, 0x064b, 0x0657, 0x0663, 0x0671, 0x067b, + 0x0680, 0x0691, 0x069a, 0x06cc, 0x06e6, 0x06ef, 0x06fa, 0x0705, + 0x070a, 0x0714, 0x071c, 0x0723, 0x072a, 0x0733, 0x073d, 0x0745, + 0x0757, 0x075e, 0x076b, 0x0773, 0x077c, 0x0787, 0x0790, 0x0797, + 0x079c, 0x07a2, 0x07b3, 0x07b9, 0x07bf, 0x07c3, 0x07da, 0x07f0, + 0x07f9, 0x0803, 0x080a, 0x0821, 0x082f, 0x083b, 0x0850, 0x085b, + // Entry C0 - FF + 0x0860, 0x086a, 0x0871, 0x0882, 0x088b, 0x0893, 0x089a, 0x08a0, + 0x08a6, 0x08b3, 0x08c2, 0x08cc, 0x08d3, 0x08db, 0x08e6, 0x08f6, + 0x0900, 0x091b, 0x0924, 0x0930, 0x093b, 0x0944, 0x094b, 0x0954, + 0x0962, 0x0978, 0x0982, 0x098f, 0x0995, 0x09a0, 0x09b2, 0x09c9, + 0x09cf, 0x09e9, 0x09ee, 0x09f7, 0x0a01, 0x0a08, 0x0a15, 0x0a24, + 0x0a2b, 0x0a30, 0x0a37, 0x0a4c, 0x0a52, 0x0a5a, 0x0a63, 0x0a6a, + 0x0a70, 0x0a9f, 0x0ab0, 0x0ac4, 0x0acd, 0x0ad9, 0x0af2, 0x0b14, + 0x0b1d, 0x0b43, 0x0b67, 0x0b70, 0x0b77, 0x0b89, 0x0b8e, 0x0b95, + // Entry 100 - 13F + 0x0b9c, 0x0ba3, 0x0bb0, 0x0bb7, 0x0bc0, 0x0bd0, 0x0bd8, 0x0bde, + 0x0bef, 0x0bfd, 0x0c05, 0x0c13, 0x0c24, 0x0c30, 0x0c40, 0x0c4e, + 0x0c5d, 0x0c64, 0x0c76, 0x0c7d, 0x0c88, 0x0c94, 0x0ca5, 0x0cb2, + 0x0cbe, 0x0cc8, 0x0cdd, 0x0ce7, 0x0cec, 0x0cfb, 0x0d08, 0x0d0e, + 0x0d1a, 0x0d2a, 0x0d38, 0x0d47, +} // Size: 608 bytes + +const lvRegionStr string = "" + // Size: 3342 bytes + "Debesbraukšanas salaAndoraApvienotie Arābu EmirātiAfganistānaAntigva un " + + "BarbudaAngiljaAlbānijaArmēnijaAngolaAntarktikaArgentīnaASV SamoaAustrija" + + "AustrālijaArubaOlandes salasAzerbaidžānaBosnija un HercegovinaBarbadosaB" + + "angladešaBeļģijaBurkinafasoBulgārijaBahreinaBurundijaBeninaSenbartelmīBe" + + "rmudu salasBrunejaBolīvijaNīderlandes Karību salasBrazīlijaBahamu salasB" + + "utānaBuvē salaBotsvānaBaltkrievijaBelizaKanādaKokosu (Kīlinga) salasKong" + + "o (Kinšasa)Centrālāfrikas RepublikaKongo (Brazavila)ŠveiceKotdivuāraKuka" + + " salasČīleKamerūnaĶīnaKolumbijaKlipertona salaKostarikaKubaKaboverdeKira" + + "saoZiemsvētku salaKipraČehijas RepublikaVācijaDjego Garsijas atolsDžibut" + + "ijaDānijaDominikaDominikānaAlžīrijaSeūta un MeliljaEkvadoraIgaunijaĒģipt" + + "eRietumsahāraEritrejaSpānijaEtiopijaEiropas SavienībaSomijaFidžiFolklend" + + "a salasMikronēzijaFēru salasFrancijaGabonaLielbritānijaGrenādaGruzijaFra" + + "ncijas GviānaGērnsijaGanaGibraltārsGrenlandeGambijaGvinejaGvadelupaEkvat" + + "oriālā GvinejaGrieķijaDienviddžordžija un Dienvidsendviču salasGvatemala" + + "GuamaGvineja-BisavaGajānaĶīnas īpašās pārvaldes apgabals HonkongaHērda s" + + "ala un Makdonalda salasHondurasaHorvātijaHaitiUngārijaKanāriju salasIndo" + + "nēzijaĪrijaIzraēlaMenaIndijaIndijas okeāna Britu teritorijaIrākaIrānaĪsl" + + "andeItālijaDžērsijaJamaikaJordānijaJapānaKenijaKirgizstānaKambodžaKiriba" + + "tiKomoru salasSentkitsa un NevisaZiemeļkorejaDienvidkorejaKuveitaKaimanu" + + " salasKazahstānaLaosaLibānaSentlūsijaLihtenšteinaŠrilankaLibērijaLesotoL" + + "ietuvaLuksemburgaLatvijaLībijaMarokaMonakoMoldovaMelnkalneSenmartēnaMada" + + "gaskaraMāršala salasMaķedonijaMaliMjanma (Birma)MongolijaĶīnas īpašās pā" + + "rvaldes apgabals MakaoZiemeļu Marianas salasMartinikaMauritānijaMontserr" + + "ataMaltaMaurīcijaMaldīvijaMalāvijaMeksikaMalaizijaMozambikaNamībijaJaunk" + + "aledonijaNigēraNorfolkas salaNigērijaNikaragvaNīderlandeNorvēģijaNepālaN" + + "auruNiueJaunzēlandeOmānaPanamaPeruFrancijas PolinēzijaPapua-JaungvinejaF" + + "ilipīnasPakistānaPolijaSenpjēra un MikelonaPitkērnas salasPuertorikoPale" + + "stīnaPortugālePalauParagvajaKataraOkeānijas attālās salasReinjonaRumānij" + + "aSerbijaKrievijaRuandaSaūda ArābijaZālamana salasSeišelu salasSudānaZvie" + + "drijaSingapūraSv.Helēnas salaSlovēnijaSvalbāra un Jana Majena salaSlovāk" + + "ijaSjerraleoneSanmarīnoSenegālaSomālijaSurinamaDienvidsudānaSantome un P" + + "rinsipiSalvadoraSintmārtenaSīrijaSvazilendaTristana da Kuņas salasTērksa" + + "s un Kaikosas salasČadaFrancijas Dienvidjūru teritorijaTogoTaizemeTadžik" + + "istānaTokelauAustrumtimoraTurkmenistānaTunisijaTongaTurcijaTrinidāda un " + + "TobāgoTuvaluTaivānaTanzānijaUkrainaUgandaASV Mazās Aizjūras salasApvieno" + + "to Nāciju OrganizācijaAmerikas Savienotās ValstisUrugvajaUzbekistānaVati" + + "kānsSentvinsenta un GrenadīnasVenecuēlaBritu VirdžīnasASV VirdžīnasVjetn" + + "amaVanuatuVolisa un Futunas salasSamoaKosovaJemenaMajotaDienvidāfrikas R" + + "epublikaZambijaZimbabvenezināms reģionspasauleĀfrikaZiemeļamerikaDienvid" + + "amerikaOkeānijaRietumāfrikaCentrālamerikaAustrumāfrikaZiemeļāfrikaVidusā" + + "frikaDienvidāfrikaAmerikaAmerikas ziemeļu daļaKarību jūras reģionsAustru" + + "māzijaDienvidāzijaCentrālaustrumāzijaDienvideiropaAustrālāzijaMelanēzija" + + "Mikronēzijas reģionsPolinēzijaĀzijaCentrālāzijaRietumāzijaEiropaAustrume" + + "iropaZiemeļeiropaRietumeiropaLatīņamerika" + +var lvRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0015, 0x001b, 0x0035, 0x0041, 0x0053, 0x005a, 0x0063, + 0x006c, 0x0072, 0x007c, 0x0086, 0x008f, 0x0097, 0x00a2, 0x00a7, + 0x00b4, 0x00c2, 0x00d8, 0x00e1, 0x00ec, 0x00f5, 0x0100, 0x010a, + 0x0112, 0x011b, 0x0121, 0x012d, 0x013a, 0x0141, 0x014a, 0x0164, + 0x016e, 0x017a, 0x0181, 0x018b, 0x0194, 0x01a0, 0x01a6, 0x01ad, + 0x01c4, 0x01d4, 0x01ee, 0x01ff, 0x0206, 0x0211, 0x021b, 0x0221, + 0x022a, 0x0230, 0x0239, 0x0248, 0x0251, 0x0255, 0x025e, 0x0265, + 0x0275, 0x027a, 0x028c, 0x0293, 0x02a7, 0x02b1, 0x02b8, 0x02c0, + // Entry 40 - 7F + 0x02cb, 0x02d5, 0x02e6, 0x02ee, 0x02f6, 0x02fe, 0x030b, 0x0313, + 0x031b, 0x0323, 0x0335, 0x0335, 0x033b, 0x0341, 0x0350, 0x035c, + 0x0367, 0x036f, 0x0375, 0x0383, 0x038b, 0x0392, 0x03a3, 0x03ac, + 0x03b0, 0x03bb, 0x03c4, 0x03cb, 0x03d2, 0x03db, 0x03f0, 0x03f9, + 0x0425, 0x042e, 0x0433, 0x0441, 0x0448, 0x0476, 0x0495, 0x049e, + 0x04a8, 0x04ad, 0x04b6, 0x04c5, 0x04d0, 0x04d6, 0x04de, 0x04e2, + 0x04e8, 0x0508, 0x050e, 0x0514, 0x051c, 0x0524, 0x052e, 0x0535, + 0x053f, 0x0546, 0x054c, 0x0558, 0x0561, 0x0569, 0x0575, 0x0588, + // Entry 80 - BF + 0x0595, 0x05a2, 0x05a9, 0x05b6, 0x05c1, 0x05c6, 0x05cd, 0x05d8, + 0x05e5, 0x05ee, 0x05f7, 0x05fd, 0x0604, 0x060f, 0x0616, 0x061d, + 0x0623, 0x0629, 0x0630, 0x0639, 0x0644, 0x064f, 0x065e, 0x0669, + 0x066d, 0x067b, 0x0684, 0x06af, 0x06c6, 0x06cf, 0x06db, 0x06e6, + 0x06eb, 0x06f5, 0x06ff, 0x0708, 0x070f, 0x0718, 0x0721, 0x072a, + 0x0738, 0x073f, 0x074d, 0x0756, 0x075f, 0x076a, 0x0775, 0x077c, + 0x0781, 0x0785, 0x0791, 0x0797, 0x079d, 0x07a1, 0x07b6, 0x07c7, + 0x07d1, 0x07db, 0x07e1, 0x07f6, 0x0806, 0x0810, 0x081a, 0x0824, + // Entry C0 - FF + 0x0829, 0x0832, 0x0838, 0x0852, 0x085a, 0x0863, 0x086a, 0x0872, + 0x0878, 0x0887, 0x0896, 0x08a4, 0x08ab, 0x08b4, 0x08be, 0x08ce, + 0x08d8, 0x08f5, 0x08ff, 0x090a, 0x0914, 0x091d, 0x0926, 0x092e, + 0x093c, 0x094f, 0x0958, 0x0964, 0x096b, 0x0975, 0x098d, 0x09a7, + 0x09ac, 0x09cd, 0x09d1, 0x09d8, 0x09e6, 0x09ed, 0x09fa, 0x0a08, + 0x0a10, 0x0a15, 0x0a1c, 0x0a31, 0x0a37, 0x0a3f, 0x0a49, 0x0a50, + 0x0a56, 0x0a70, 0x0a8f, 0x0aab, 0x0ab3, 0x0abf, 0x0ac8, 0x0ae3, + 0x0aed, 0x0afe, 0x0b0d, 0x0b15, 0x0b1c, 0x0b33, 0x0b38, 0x0b3e, + // Entry 100 - 13F + 0x0b44, 0x0b4a, 0x0b63, 0x0b6a, 0x0b72, 0x0b84, 0x0b8b, 0x0b92, + 0x0ba0, 0x0bae, 0x0bb7, 0x0bc4, 0x0bd3, 0x0be1, 0x0bef, 0x0bfb, + 0x0c09, 0x0c10, 0x0c27, 0x0c3e, 0x0c4b, 0x0c58, 0x0c6d, 0x0c7a, + 0x0c88, 0x0c93, 0x0ca9, 0x0cb4, 0x0cba, 0x0cc8, 0x0cd4, 0x0cda, + 0x0ce7, 0x0cf4, 0x0d00, 0x0d0e, +} // Size: 608 bytes + +const mkRegionStr string = "" + // Size: 6045 bytes + "Остров АсенсионАндораОбединети Арапски ЕмиратиАвганистанАнтигва и Барбуд" + + "аАнгвилаАлбанијаЕрменијаАнголаАнтарктикАргентинаАмериканска СамоаАвстри" + + "јаАвстралијаАрубаОландски ОстровиАзербејџанБосна и ХерцеговинаБарбадосБ" + + "англадешБелгијаБуркина ФасоБугаријаБахреинБурундиБенинСвети ВартоломејБ" + + "ермудиБрунејБоливијаКарипска ХоландијаБразилБахамиБутанОстров БувеБоцва" + + "наБелорусијаБелизеКанадаКокосови (Килиншки) ОстровиКонго - КиншасаЦентр" + + "алноафриканска РепубликаКонго - БразавилШвајцаријаБрегот на Слоновата К" + + "оскаКукови ОстровиЧилеКамерунКинаКолумбијаОстров КлипертонКостарикаКуба" + + "Зелен ’РтКурасаоБожиќен ОстровКипарРепублика ЧешкаГерманијаДиего Гарсиј" + + "аЏибутиДанскаДоминикаДоминиканска РепубликаАлжирСеута и МелиљаЕквадорЕс" + + "тонијаЕгипетЗападна СахараЕритрејаШпанијаЕтиопијаЕвропска унијаФинскаФи" + + "џиФолкландски ОстровиМикронезијаФарски ОстровиФранцијаГабонОбединето Кр" + + "алствоГренадаГрузијаФранцуска ГвајанаГернзиГанаГибралтарГренландГамбија" + + "ГвинејаГвадалупеЕкваторска ГвинејаГрцијаЈужна Џорџија и Јужни Сендвички" + + " ОстровиГватемалаГуамГвинеја-БисауГвајанаХонг Конг С.А.Р КинаОстров Херд" + + " и Острови МекдоналдХондурасХрватскаХаитиУнгаријаКанарски ОстровиИндонез" + + "ијаИрскаИзраелОстров МанИндијаБританска Индоокеанска ТериторијаИракИран" + + "ИсландИталијаЏерсиЈамајкаЈорданЈапонијаКенијаКиргистанКамбоџаКирибатиКо" + + "морски ОстровиСвети Кристофер и НевисСеверна КорејаЈужна КорејаКувајтКа" + + "јмански ОстровиКазахстанЛаосЛибанСвета ЛуцијаЛихтенштајнШри ЛанкаЛибери" + + "јаЛесотоЛитванијаЛуксембургЛатвијаЛибијаМарокоМонакоМолдавијаЦрна ГораС" + + "ент МартинМадагаскарМаршалски ОстровиМакедонијаМалиМјанмар (Бурма)Монго" + + "лијаМакао САРСеверни Маријански ОстровиМартиникМавританијаМонсератМалта" + + "МаврициусМалдивиМалавиМексикоМалезијаМозамбикНамибијаНова КаледонијаНиг" + + "ерНорфолшки ОстровНигеријаНикарагваХоландијаНорвешкаНепалНауруНиујеНов " + + "ЗеландОманПанамаПеруФранцуска ПолинезијаПапуа Нова ГвинејаФилипиниПакис" + + "танПолскаСент Пјер и МикеланПиткернски ОстровиПорторикоПалестински тери" + + "торииПортугалијаПалауПарагвајКатарЗависни земји во ОкеанијаРеунионРоман" + + "ијаСрбијаРусијаРуандаСаудиска АрабијаСоломонски ОстровиСејшелиСуданШвед" + + "скаСингапурСвета ЕленаСловенијаСвалбард и Жан МејенСловачкаСиера ЛеонеС" + + "ан МариноСенегалСомалијаСуринамЈужен СуданСао Томе и ПринсипеЕл Салвадо" + + "рСвети МартинСиријаСвазилендТристан да КуњаОстрови Туркс и КаикосЧадФра" + + "нцуски Јужни ТериторииТогоТајландТаџикистанТокелауИсточен Тимор (Тимор " + + "Лесте)ТуркменистанТунисТонгаТурцијаТринидад и ТобагоТувалуТајванТанзани" + + "јаУкраинаУгандаАмерикански територии во Пацификотобединети нацииСоедине" + + "ти Американски ДржавиУругвајУзбекистанВатиканСвети Винсент и Гренадинит" + + "еВенецуелаБритански Девствени ОстровиАмерикански Девствени ОстровиВиетн" + + "амВануатуВалис и ФутунаСамоаКосовоЈеменМајотЈужноафриканска РепубликаЗа" + + "мбијаЗимбабвеНепознат регионСветАфрикаСеверна АмерикаЈужна АмерикаОкеан" + + "ијаЗападна АфрикаЦентрална АмерикаИсточна АфрикаСеверна АфрикаСредна Аф" + + "рикаЈужна АфрикаАмерикиСеверна континентална АмерикаКарибиИсточна Азија" + + "Јужна АзијаЈугоисточна АзијаЈужна ЕвропаАвстралазијаМеланезијаМикронези" + + "ски регионПолинезијаАзијаЦентрална АзијаЗападна АзијаЕвропаИсточна Евро" + + "паСеверна ЕвропаЗападна ЕвропаЛатинска Америка" + +var mkRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001d, 0x0029, 0x0059, 0x006d, 0x008d, 0x009b, 0x00ab, + 0x00bb, 0x00c7, 0x00d9, 0x00eb, 0x010c, 0x011c, 0x0130, 0x013a, + 0x0159, 0x016d, 0x0191, 0x01a1, 0x01b3, 0x01c1, 0x01d8, 0x01e8, + 0x01f6, 0x0204, 0x020e, 0x022d, 0x023b, 0x0247, 0x0257, 0x027a, + 0x0286, 0x0292, 0x029c, 0x02b1, 0x02bf, 0x02d3, 0x02df, 0x02eb, + 0x031d, 0x0338, 0x0371, 0x038e, 0x03a2, 0x03d1, 0x03ec, 0x03f4, + 0x0402, 0x040a, 0x041c, 0x043b, 0x044d, 0x0455, 0x0467, 0x0475, + 0x0490, 0x049a, 0x04b7, 0x04c9, 0x04e2, 0x04ee, 0x04fa, 0x050a, + // Entry 40 - 7F + 0x0535, 0x053f, 0x0559, 0x0567, 0x0577, 0x0583, 0x059e, 0x05ae, + 0x05bc, 0x05cc, 0x05e7, 0x05e7, 0x05f3, 0x05fb, 0x0620, 0x0636, + 0x0651, 0x0661, 0x066b, 0x068e, 0x069c, 0x06aa, 0x06cb, 0x06d7, + 0x06df, 0x06f1, 0x0701, 0x070f, 0x071d, 0x072f, 0x0752, 0x075e, + 0x07a7, 0x07b9, 0x07c1, 0x07da, 0x07e8, 0x080b, 0x0845, 0x0855, + 0x0865, 0x086f, 0x087f, 0x089e, 0x08b2, 0x08bc, 0x08c8, 0x08db, + 0x08e7, 0x0927, 0x092f, 0x0937, 0x0943, 0x0951, 0x095b, 0x0969, + 0x0975, 0x0985, 0x0991, 0x09a3, 0x09b1, 0x09c1, 0x09e0, 0x0a0b, + // Entry 80 - BF + 0x0a26, 0x0a3d, 0x0a49, 0x0a6a, 0x0a7c, 0x0a84, 0x0a8e, 0x0aa5, + 0x0abb, 0x0acc, 0x0adc, 0x0ae8, 0x0afa, 0x0b0e, 0x0b1c, 0x0b28, + 0x0b34, 0x0b40, 0x0b52, 0x0b63, 0x0b78, 0x0b8c, 0x0bad, 0x0bc1, + 0x0bc9, 0x0be4, 0x0bf6, 0x0c07, 0x0c39, 0x0c49, 0x0c5f, 0x0c6f, + 0x0c79, 0x0c8b, 0x0c99, 0x0ca5, 0x0cb3, 0x0cc3, 0x0cd3, 0x0ce3, + 0x0d00, 0x0d0a, 0x0d29, 0x0d39, 0x0d4b, 0x0d5d, 0x0d6d, 0x0d77, + 0x0d81, 0x0d8b, 0x0d9e, 0x0da6, 0x0db2, 0x0dba, 0x0de1, 0x0e03, + 0x0e13, 0x0e23, 0x0e2f, 0x0e52, 0x0e75, 0x0e87, 0x0eb0, 0x0ec6, + // Entry C0 - FF + 0x0ed0, 0x0ee0, 0x0eea, 0x0f19, 0x0f27, 0x0f37, 0x0f43, 0x0f4f, + 0x0f5b, 0x0f7a, 0x0f9d, 0x0fab, 0x0fb5, 0x0fc3, 0x0fd3, 0x0fe8, + 0x0ffa, 0x101f, 0x102f, 0x1044, 0x1057, 0x1065, 0x1075, 0x1083, + 0x1098, 0x10bb, 0x10d0, 0x10e7, 0x10f3, 0x1105, 0x1121, 0x114a, + 0x1150, 0x1180, 0x1188, 0x1196, 0x11aa, 0x11b8, 0x11e9, 0x1201, + 0x120b, 0x1215, 0x1223, 0x1243, 0x124f, 0x125b, 0x126d, 0x127b, + 0x1287, 0x12c8, 0x12e5, 0x131b, 0x1329, 0x133d, 0x134b, 0x137e, + 0x1390, 0x13c4, 0x13fc, 0x140a, 0x1418, 0x1432, 0x143c, 0x1448, + // Entry 100 - 13F + 0x1452, 0x145c, 0x148d, 0x149b, 0x14ab, 0x14c8, 0x14d0, 0x14dc, + 0x14f9, 0x1512, 0x1522, 0x153d, 0x155e, 0x1579, 0x1594, 0x15ad, + 0x15c4, 0x15d2, 0x160a, 0x1616, 0x162f, 0x1644, 0x1665, 0x167c, + 0x1694, 0x16a8, 0x16cd, 0x16e1, 0x16eb, 0x1708, 0x1721, 0x172d, + 0x1748, 0x1763, 0x177e, 0x179d, +} // Size: 608 bytes + +const mlRegionStr string = "" + // Size: 9182 bytes + "അസൻഷൻ ദ്വീപ്അന്റോറയുണൈറ്റഡ് അറബ് എമിറൈറ്റ്\u200cസ്അഫ്\u200cഗാനിസ്ഥാൻആൻറി" + + "ഗ്വയും ബർബുഡയുംആൻഗ്വില്ലഅൽബേനിയഅർമേനിയഅംഗോളഅൻറാർട്ടിക്കഅർജൻറീനഅമേരിക്ക" + + "ൻ സമോവഓസ്ട്രിയഓസ്\u200cട്രേലിയഅറൂബഅലൻഡ് ദ്വീപുകൾഅസർബൈജാൻബോസ്നിയയും ഹെർ" + + "സഗോവിനയുംബാർബഡോസ്ബംഗ്ലാദേശ്ബെൽജിയംബുർക്കിനാ ഫാസോബൾഗേറിയബഹ്റിൻബറുണ്ടിബെ" + + "നിൻസെന്റ് ബാർത്തലമിബർമുഡബ്രൂണൈബൊളീവിയകരീബിയൻ നെതർലാൻഡ്സ്ബ്രസീൽബഹാമാസ്ഭ" + + "ൂട്ടാൻബൗവെട്ട് ദ്വീപ്ബോട്സ്വാനബെലറൂസ്ബെലീസ്കാനഡകോക്കസ് (കീലിംഗ്) ദ്വീപ" + + "ുകൾകോംഗോ - കിൻഷാസസെൻട്രൽ ആഫ്രിക്കൻ റിപ്പബ്ലിക്കോംഗോ - ബ്രാസവില്ലിസ്വിറ" + + "്റ്സർലാൻഡ്കോട്ട് ഡി വാർകുക്ക് ദ്വീപുകൾചിലികാമറൂൺചൈനകൊളംബിയക്ലിപ്പെർട്ട" + + "ൻ ദ്വീപ്കോസ്റ്ററിക്കക്യൂബകേപ്പ് വെർദെകുറാകാവോക്രിസ്മസ് ദ്വീപ്സൈപ്രസ്ചെ" + + "ക്ക് റിപ്പബ്ലിക്ജർമനിഡീഗോ ഗ്രാഷ്യദിജിബൗട്ടിഡെൻമാർക്ക്ഡൊമിനിക്കഡൊമിനിക്" + + "കൻ റിപ്പബ്ലിക്അൾജീരിയസെയൂത്ത ആൻഡ് മെലിയഇക്വഡോർഎസ്റ്റോണിയ\u200dഈജിപ്ത്പ" + + "ശ്ചിമ സഹാറഎറിത്രിയസ്\u200cപെയിൻഎത്യോപ്യയൂറോപ്യൻ യൂണിയൻഫിൻലാൻഡ്ഫിജിഫാക്" + + "ക്\u200cലാന്റ് ദ്വീപുകൾമൈക്രോനേഷ്യഫറോ ദ്വീപുകൾഫ്രാൻസ്ഗാബൺയുണൈറ്റഡ് കിം" + + "ഗ്ഡംഗ്രനേഡജോർജ്ജിയഫ്രഞ്ച് ഗയാനഗേൺസിഘാനജിബ്രാൾട്ടർഗ്രീൻലാൻറ്ഗാംബിയഗിനിയ" + + "ഗ്വാഡലൂപ്പ്ഇക്വറ്റോറിയൽ ഗിനിയഗ്രീസ്ദക്ഷിണ ജോർജ്ജിയയും ദക്ഷിണ സാൻഡ്" + + "\u200cവിച്ച് ദ്വീപുകളുംഗ്വാട്ടിമാലഗ്വാംഗിനിയ-ബിസൗഗയാനഹോങ്കോങ്ങ് (SAR) ചൈ" + + "നഹിയേർഡും മക്\u200cഡൊണാൾഡ് ദ്വീപുകളുംഹോണ്ടുറാസ്ക്രൊയേഷ്യഹെയ്തിഹംഗറികാന" + + "റി ദ്വീപുകൾഇന്തോനേഷ്യഅയർലൻഡ്ഇസ്രായേൽഐൽ ഓഫ് മാൻഇന്ത്യബ്രിട്ടീഷ് ഇന്ത്യൻ" + + " മഹാസമുദ്ര പ്രദേശംഇറാഖ്ഇറാൻഐസ്\u200cലാന്റ്ഇറ്റലിജേഴ്സിജമൈക്കജോർദ്ദാൻജപ്പ" + + "ാൻകെനിയകിർഗിസ്ഥാൻകംബോഡിയകിരിബാട്ടികോമൊറോസ്സെന്റ് കിറ്റ്\u200cസും നെവിസ" + + "ുംഉത്തരകൊറിയദക്ഷിണകൊറിയകുവൈറ്റ്കേമാൻ ദ്വീപുകൾകസാഖിസ്ഥാൻലാവോസ്ലെബനൻസെൻറ" + + "് ലൂസിയലിച്ചൺസ്റ്റൈൻശ്രീലങ്കലൈബീരിയലെസോതോലിത്വാനിയലക്സംബർഗ്ലാറ്റ്വിയലി" + + "ബിയമൊറോക്കൊമൊണാക്കോമൾഡോവമോണ്ടെനെഗ്രോസെൻറ് മാർട്ടിൻമഡഗാസ്കർമാർഷൽ\u200d" + + "\u200d ദ്വീപുകൾമാസിഡോണിയമാലിമ്യാൻമാർ (ബർമ്മ)മംഗോളിയമക്കാവു (SAR) ചൈനഉത്ത" + + "ര മറിയാനാ ദ്വീപുകൾമാർട്ടിനിക്ക്മൗറിറ്റാനിയമൊണ്ടെസരത്ത്മാൾട്ടമൗറീഷ്യസ്മ" + + "ാലിദ്വീപ്മലാവിമെക്സിക്കോമലേഷ്യമൊസാംബിക്ക്നമീബിയന്യൂ കാലിഡോണിയനൈജർനോർഫോ" + + "ക് ദ്വീപ്നൈജീരിയനിക്കരാഗ്വനെതർലാൻഡ്\u200cസ്നോർവെനേപ്പാൾനൗറുന്യൂയിന്യൂസ" + + "ിലാൻറ്ഒമാൻപനാമപെറുഫ്രഞ്ച് പോളിനേഷ്യപാപ്പുവ ന്യൂ ഗിനിയഫിലിപ്പീൻസ്പാക്കി" + + "സ്ഥാൻപോളണ്ട്സെന്റ് പിയറിയും മിക്കലണുംപിറ്റ്\u200cകെയ്\u200cൻ ദ്വീപുകൾപ" + + "്യൂർട്ടോ റിക്കോപാലസ്\u200cതീൻ പ്രദേശങ്ങൾപോർച്ചുഗൽപലാവുപരാഗ്വേഖത്തർദ്വീ" + + "പസമൂഹംറീയൂണിയൻറൊമാനിയസെർബിയറഷ്യറുവാണ്ടസൗദി അറേബ്യസോളമൻ\u200d ദ്വീപുകൾസ" + + "ീഷെൽസ്സുഡാൻസ്വീഡൻസിംഗപ്പുർസെൻറ് ഹെലീനസ്ലോവേനിയസ്വാൽബാഡും ജാൻ മായേനുംസ്" + + "ലോവാക്യസിയെറ ലിയോൺസാൻ മറിനോസെനഗൽസോമാലിയസുരിനാംദക്ഷിണ സുഡാൻസാവോ ടോമും പ" + + "്രിൻസിപെയുംഎൽ സാൽവദോർസിന്റ് മാർട്ടെൻസിറിയസ്വാസിലാൻറ്ട്രസ്റ്റൻ ഡ കൂനടർക" + + "്ക്\u200cസും കെയ്\u200cക്കോ ദ്വീപുകളുംഛാഡ്ഫ്രഞ്ച് ദക്ഷിണ ഭൂപ്രദേശംടോഗോ" + + "തായ്\u200cലാൻഡ്താജിക്കിസ്ഥാൻടോക്കെലൂതിമോർ-ലെസ്റ്റെതുർക്ക്മെനിസ്ഥാൻടുണീ" + + "ഷ്യടോംഗതുർക്കിട്രിനിഡാഡും ടുബാഗോയുംടുവാലുതായ്\u200cവാൻടാൻസാനിയഉക്രെയ്" + + "\u200cൻഉഗാണ്ടയു.എസ്. ദ്വീപസമൂഹങ്ങൾഐക്യരാഷ്ട്രസഭഅമേരിക്കൻ ഐക്യനാടുകൾഉറുഗ്" + + "വേഉസ്\u200cബെക്കിസ്ഥാൻവത്തിക്കാൻസെന്റ് വിൻസെന്റും ഗ്രനെഡൈൻസുംവെനിസ്വേല" + + "ബ്രിട്ടീഷ് വെർജിൻ ദ്വീപുകൾയു.എസ്. വെർജിൻ ദ്വീപുകൾവിയറ്റ്നാംവന്വാതുവാലി" + + "സ് ആന്റ് ഫ്യൂച്യുനസമോവകൊസോവൊയെമൻമയോട്ടിദക്ഷിണാഫ്രിക്കസാംബിയസിംബാബ്" + + "\u200cവേഅജ്ഞാത പ്രദേശംലോകംആഫ്രിക്കവടക്കേ അമേരിക്കതെക്കേ അമേരിക്കഓഷ്യാനിയ" + + "പശ്ചിമ ആഫ്രിക്കമദ്ധ്യഅമേരിക്കകിഴക്കൻ ആഫ്രിക്കഉത്തരാഫ്രിക്കമദ്ധ്യആഫ്രിക" + + "്കതെക്കേ ആഫ്രിക്കഅമേരിക്കകൾവടക്കൻ അമേരിക്കകരീബിയൻകിഴക്കൻ ഏഷ്യതെക്കേ ഏഷ" + + "്യതെക്ക്-കിഴക്കൻ ഏഷ്യതെക്കേ യൂറോപ്പ്ഓസ്\u200cട്രേലിയയും ന്യൂസിലാൻഡുംമെ" + + "ലനേഷ്യമൈക്രോനേഷ്യൻ പ്രദേശംപോളിനേഷ്യഏഷ്യമദ്ധ്യേഷ്യപശ്ചിമേഷ്യയൂറോപ്പ്കിഴ" + + "ക്കൻ യൂറോപ്പ്വടക്കേ യൂറോപ്പ്പശ്ചിമ യൂറോപ്പ്ലാറ്റിനമേരിക്ക" + +var mlRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0022, 0x0034, 0x0081, 0x00a8, 0x00df, 0x00fa, 0x010f, + 0x0124, 0x0133, 0x0157, 0x016c, 0x0194, 0x01ac, 0x01cd, 0x01d9, + 0x0201, 0x0219, 0x025c, 0x0274, 0x0292, 0x02a7, 0x02cf, 0x02e4, + 0x02f6, 0x030b, 0x031a, 0x0348, 0x0357, 0x0369, 0x037e, 0x03b5, + 0x03c7, 0x03dc, 0x03f1, 0x041c, 0x0437, 0x044c, 0x045e, 0x046a, + 0x04b0, 0x04d4, 0x0527, 0x055a, 0x0587, 0x05aa, 0x05d5, 0x05e1, + 0x05f3, 0x05fc, 0x0611, 0x064b, 0x066f, 0x067e, 0x06a0, 0x06b8, + 0x06e6, 0x06fb, 0x072f, 0x073e, 0x0760, 0x077e, 0x079c, 0x07b7, + // Entry 40 - 7F + 0x07f7, 0x080c, 0x083e, 0x0853, 0x0874, 0x0889, 0x08a8, 0x08c0, + 0x08d8, 0x08f0, 0x091b, 0x091b, 0x0933, 0x093f, 0x097f, 0x09a0, + 0x09c2, 0x09d7, 0x09e3, 0x0a14, 0x0a26, 0x0a3e, 0x0a60, 0x0a6f, + 0x0a78, 0x0a99, 0x0ab7, 0x0ac9, 0x0ad8, 0x0af9, 0x0b2d, 0x0b3f, + 0x0bca, 0x0beb, 0x0bfa, 0x0c16, 0x0c22, 0x0c50, 0x0ca9, 0x0cc7, + 0x0ce2, 0x0cf4, 0x0d03, 0x0d2b, 0x0d49, 0x0d5e, 0x0d76, 0x0d90, + 0x0da2, 0x0e08, 0x0e17, 0x0e23, 0x0e41, 0x0e53, 0x0e65, 0x0e77, + 0x0e8f, 0x0ea1, 0x0eb0, 0x0ece, 0x0ee3, 0x0f01, 0x0f19, 0x0f60, + // Entry 80 - BF + 0x0f7e, 0x0f9f, 0x0fb7, 0x0fdf, 0x0ffd, 0x100f, 0x101e, 0x103d, + 0x1064, 0x107c, 0x1091, 0x10a3, 0x10be, 0x10d9, 0x10f4, 0x1103, + 0x111b, 0x1133, 0x1142, 0x1166, 0x118e, 0x11a6, 0x11d4, 0x11ef, + 0x11fb, 0x1225, 0x123a, 0x125f, 0x129d, 0x12c4, 0x12e5, 0x1309, + 0x131b, 0x1336, 0x1354, 0x1363, 0x1381, 0x1393, 0x13b4, 0x13c6, + 0x13ee, 0x13fa, 0x1422, 0x1437, 0x1455, 0x1479, 0x1488, 0x149d, + 0x14a9, 0x14bb, 0x14dc, 0x14e8, 0x14f4, 0x1500, 0x1531, 0x1563, + 0x1584, 0x15a5, 0x15ba, 0x1601, 0x1641, 0x166f, 0x16a9, 0x16c4, + // Entry C0 - FF + 0x16d3, 0x16e8, 0x16f7, 0x1715, 0x172d, 0x1742, 0x1754, 0x1760, + 0x1775, 0x1794, 0x17bf, 0x17d4, 0x17e3, 0x17f5, 0x1810, 0x182f, + 0x184a, 0x1888, 0x18a3, 0x18c2, 0x18db, 0x18ea, 0x18ff, 0x1914, + 0x1936, 0x1977, 0x1993, 0x19be, 0x19cd, 0x19ee, 0x1a17, 0x1a70, + 0x1a7c, 0x1ac0, 0x1acc, 0x1aea, 0x1b11, 0x1b29, 0x1b51, 0x1b81, + 0x1b96, 0x1ba2, 0x1bb7, 0x1bf4, 0x1c06, 0x1c1e, 0x1c36, 0x1c51, + 0x1c63, 0x1c9c, 0x1cc3, 0x1cfd, 0x1d12, 0x1d3f, 0x1d5d, 0x1db0, + 0x1dcb, 0x1e15, 0x1e52, 0x1e70, 0x1e85, 0x1ec3, 0x1ecf, 0x1ee1, + // Entry 100 - 13F + 0x1eed, 0x1f02, 0x1f2c, 0x1f3e, 0x1f5c, 0x1f84, 0x1f90, 0x1fa8, + 0x1fd3, 0x1ffe, 0x2016, 0x2041, 0x206b, 0x2099, 0x20c0, 0x20ea, + 0x2115, 0x2133, 0x215e, 0x2173, 0x2195, 0x21b4, 0x21e9, 0x2214, + 0x2263, 0x227b, 0x22b5, 0x22d0, 0x22dc, 0x22fa, 0x2318, 0x2330, + 0x235e, 0x2389, 0x23b4, 0x23de, +} // Size: 608 bytes + +const mnRegionStr string = "" + // Size: 5564 bytes + "Аскенсион аралАндорраАрабын Нэгдсэн ЭмиратАфганистанАнтигуа ба БарбудаАн" + + "гилаАлбаниАрмениАнголАнтарктикАргентинАмерикийн СамоаАвстриАвстралиАруб" + + "аАландын АрлуудАзербайжанБосни ГерцеговинБарбадосБангладешБелгиБуркина " + + "фасоБолгарБахрейнБурундиБенинСент БартельмиБермудБрунейБоливиКарибын Ни" + + "дерландБразилБагамБутанБуветын арлуудБотсванаБеларусьБелизКанадКокос (К" + + "ийлинг) арлуудКонго-КиншасаТөв Африкийн Бүгд Найрамдах УлсКонго Браззав" + + "ильШвейцариКот д’ИвуарКүүкийн арлуудЧилиКамерунХятадКолумбКлиппертон ар" + + "алКоста РикаКубаКапе ВердеКуракаоЗул сарын аралКипрБүгд Найрамдах Чех У" + + "лсГерманДиего ГарсиаДжибутиДаниДоминикБүгд Найрамдах Доминикан УлсАлжир" + + "Сеута ба МелильяЭквадорЭстониЕгипетБаруун СахарЭритриИспаниЭтиопЕвропын" + + " ХолбооФинландФижиФолькландын АрлуудМикронезиФароэ АрлуудФранцГабонИх Бр" + + "итаниГренадаГүржФранцын ГайанаГернсиГанаГибралтарГренландГамбиГвинейГва" + + "делупЭкваторын ГвинейГрекӨмнөд Жоржиа ба Өмнөд Сэндвичийн АрлуудГватема" + + "лГуамГвиней-БисауГайанаБНХАУ-ын Тусгай захиргааны бүс Хонг КонгХэрд бол" + + "он Макдоналд арлуудГондурасХорватГаитиУнгарКанарын арлуудИндонезиИрланд" + + "ИзраильМэн АралЭнэтхэгБританийн харьяа Энэтхэгийн далай дахь нутаг дэвс" + + "гэрүүдИракИранИсландИталиЖерсиЯмайкЙорданЯпонКениКыргызстанКамбожКириба" + + "тиКоморосСент-Киттс ба НевисХойд СолонгосӨмнөд СолонгосКувейтКайманы Ар" + + "луудКазахстанЛаосЛиванСент ЛюсиаЛихтенштейнШри ЛанкаЛибериЛесотоЛитваЛю" + + "ксембургЛатвиЛивиМароккоМонакоМолдавМонтенегроСент-МартинМадагаскарМарш" + + "аллын арлуудМакедонМалиМьянмар (Бурма)МонголБНХАУ-ын Тусгай захиргааны " + + "бүс МакаоХойд Марианы арлуудМартиникМавританиМонтсерратМальтаМавритусМа" + + "льдивМалавиМексикМалайзМозамбикНамибиШинэ КаледониНигерНорфолк арлуудНи" + + "гериНикарагуаНидерландНорвегиБалбаНауруНиуэШинэ ЗеландОманПанамПеруФран" + + "цын ПолинезПапуа Шинэ ГвинейФилиппинПакистанПольшСэнт Пьер ба МикелонПи" + + "ткэрн арлуудПуэрто РикоПалестины нутаг дэвсгэрүүдПортугальПалауПарагвай" + + "КатарНомхон далайг тойрсон улс орнуудРеюньонРумынСербиОросРуандаСаудын " + + "АрабСоломоны АрлуудСейшелСуданШведСингапурСент ХеленаСловениСвалбард ба" + + " Ян МайенСловакСьерра-ЛеонеСан-МариноСенегалСомалиСуринамӨмнөд СуданСан-" + + "Томе ба ПринсипиЭль СальвадорСинт МартенСириСвазиландТристан да КуньяТу" + + "рк ба Кайкосын АрлуудЧадФранцын өмнөд газар нутагТогоТайландТажикистанТ" + + "окелауТимор-ЛестеТуркменистанТунисТонгаТуркТринидад ТобагоТувалуТайвань" + + "ТанзаниУкраинУгандаАНУ-ын тойрсон арлуудНэгдсэн Үндэстний БайгууллагаАм" + + "ерикийн Нэгдсэн УлсУругвайУзбекистанВатикан хот улсСэнт Винсэнт ба Грен" + + "адинВенесуэлБританийн Виржиний АрлуудАНУ-ын Виржиний АрлуудВьетнамВануа" + + "туУоллис ба ФутунаСамоаКосовоЙеменМайоттеӨмнөд Африк тивЗамбиЗимбабвеТо" + + "дорхойгүй бүсДэлхийАфрикХойд АмерикӨмнөд АмерикНомхон далайн орнуудБару" + + "ун АфрикТөв АмерикЗүүн АфрикХойд АфрикТөв АфрикӨмнөд АфрикАмерикХойд Ам" + + "ерик тивКарибынЗүүн АзиӨмнөд АзиЗүүн өмнөд АзиӨмнөд ЕвропАвстралиазиМел" + + "анезиМикронезийн бүсПолинезиАзиТөв АзиБаруун АзиЕвропЗүүн ЕвропХойд Евр" + + "опБаруун ЕвропЛатин Америк" + +var mnRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001b, 0x0029, 0x0051, 0x0065, 0x0087, 0x0093, 0x009f, + 0x00ab, 0x00b5, 0x00c7, 0x00d7, 0x00f4, 0x0100, 0x0110, 0x011a, + 0x0135, 0x0149, 0x0168, 0x0178, 0x018a, 0x0194, 0x01ab, 0x01b7, + 0x01c5, 0x01d3, 0x01dd, 0x01f8, 0x0204, 0x0210, 0x021c, 0x023d, + 0x0249, 0x0253, 0x025d, 0x0278, 0x0288, 0x0298, 0x02a2, 0x02ac, + 0x02d4, 0x02ed, 0x0327, 0x0346, 0x0356, 0x036c, 0x0387, 0x038f, + 0x039d, 0x03a7, 0x03b3, 0x03d0, 0x03e3, 0x03eb, 0x03fe, 0x040c, + 0x0426, 0x042e, 0x0457, 0x0463, 0x047a, 0x0488, 0x0490, 0x049e, + // Entry 40 - 7F + 0x04d3, 0x04dd, 0x04fb, 0x0509, 0x0515, 0x0521, 0x0538, 0x0544, + 0x0550, 0x055a, 0x0575, 0x0575, 0x0583, 0x058b, 0x05ae, 0x05c0, + 0x05d7, 0x05e1, 0x05eb, 0x05fe, 0x060c, 0x0614, 0x062f, 0x063b, + 0x0643, 0x0655, 0x0665, 0x066f, 0x067b, 0x068b, 0x06aa, 0x06b2, + 0x06fb, 0x070b, 0x0713, 0x072a, 0x0736, 0x0780, 0x07b3, 0x07c3, + 0x07cf, 0x07d9, 0x07e3, 0x07fe, 0x080e, 0x081a, 0x0828, 0x0837, + 0x0845, 0x08ad, 0x08b5, 0x08bd, 0x08c9, 0x08d3, 0x08dd, 0x08e7, + 0x08f3, 0x08fb, 0x0903, 0x0917, 0x0923, 0x0933, 0x0941, 0x0964, + // Entry 80 - BF + 0x097d, 0x0998, 0x09a4, 0x09bf, 0x09d1, 0x09d9, 0x09e3, 0x09f6, + 0x0a0c, 0x0a1d, 0x0a29, 0x0a35, 0x0a3f, 0x0a53, 0x0a5d, 0x0a65, + 0x0a73, 0x0a7f, 0x0a8b, 0x0a9f, 0x0ab4, 0x0ac8, 0x0ae7, 0x0af5, + 0x0afd, 0x0b18, 0x0b24, 0x0b67, 0x0b8b, 0x0b9b, 0x0bad, 0x0bc1, + 0x0bcd, 0x0bdd, 0x0beb, 0x0bf7, 0x0c03, 0x0c0f, 0x0c1f, 0x0c2b, + 0x0c44, 0x0c4e, 0x0c69, 0x0c75, 0x0c87, 0x0c99, 0x0ca7, 0x0cb1, + 0x0cbb, 0x0cc3, 0x0cd8, 0x0ce0, 0x0cea, 0x0cf2, 0x0d0f, 0x0d2f, + 0x0d3f, 0x0d4f, 0x0d59, 0x0d7e, 0x0d99, 0x0dae, 0x0de0, 0x0df2, + // Entry C0 - FF + 0x0dfc, 0x0e0c, 0x0e16, 0x0e52, 0x0e60, 0x0e6a, 0x0e74, 0x0e7c, + 0x0e88, 0x0e9d, 0x0eba, 0x0ec6, 0x0ed0, 0x0ed8, 0x0ee8, 0x0efd, + 0x0f0b, 0x0f30, 0x0f3c, 0x0f53, 0x0f66, 0x0f74, 0x0f80, 0x0f8e, + 0x0fa3, 0x0fc8, 0x0fe1, 0x0ff6, 0x0ffe, 0x1010, 0x102e, 0x1059, + 0x105f, 0x108e, 0x1096, 0x10a4, 0x10b8, 0x10c6, 0x10db, 0x10f3, + 0x10fd, 0x1107, 0x110f, 0x112c, 0x1138, 0x1146, 0x1154, 0x1160, + 0x116c, 0x1193, 0x11cb, 0x11f3, 0x1201, 0x1215, 0x1231, 0x125e, + 0x126e, 0x129e, 0x12c7, 0x12d5, 0x12e3, 0x1301, 0x130b, 0x1317, + // Entry 100 - 13F + 0x1321, 0x132f, 0x134b, 0x1355, 0x1365, 0x1382, 0x138e, 0x1398, + 0x13ad, 0x13c4, 0x13ea, 0x1401, 0x1414, 0x1427, 0x143a, 0x144b, + 0x1460, 0x146c, 0x1488, 0x1496, 0x14a5, 0x14b6, 0x14d0, 0x14e5, + 0x14fb, 0x150b, 0x1528, 0x1538, 0x153e, 0x154b, 0x155e, 0x1568, + 0x157b, 0x158e, 0x15a5, 0x15bc, +} // Size: 608 bytes + +const mrRegionStr string = "" + // Size: 8475 bytes + "अ\u200dॅसेन्शियन बेटअँडोरासंयुक्त अरब अमीरातअफगाणिस्तानअँटिग्वा आणि बर्ब" + + "ुडाअँग्विलाअल्बानियाअर्मेनियाअंगोलाअंटार्क्टिकाअर्जेंटिनाअमेरिकन सामोआ" + + "ऑस्ट्रियाऑस्ट्रेलियाअरुबाअ\u200dॅलँड बेटेअझरबैजानबोस्निया अणि हर्जेगोव" + + "िनाबार्बाडोसबांगलादेशबेल्जियमबुर्किना फासोबल्गेरियाबहारीनबुरुंडीबेनिनस" + + "ेंट बार्थेलेमीबर्मुडाब्रुनेईबोलिव्हियाकॅरिबियन नेदरलँड्सब्राझिलबहामाजभ" + + "ूतानबोउवेट बेटबोट्सवानाबेलारूसबलिझकॅनडाकोकोस (कीलिंग) बेटेकाँगो - किंश" + + "ासाकेंद्रीय अफ्रिकी प्रजासत्ताककाँगो - ब्राझाविलेस्वित्झर्लंडआयव्हरी क" + + "ोस्टकुक बेटेचिलीकॅमेरूनचीनकोलम्बियाक्लिपरटोन बेटकोस्टा रिकाक्यूबाकेप व" + + "्हर्डेक्युरासाओख्रिसमस बेटसायप्रसझेक प्रजासत्ताकजर्मनीदिएगो गार्सियाजि" + + "बौटीडेन्मार्कडोमिनिकाडोमिनिकन प्रजासत्ताकअल्जीरियास्यूटा आणि मेलिलाइक्" + + "वाडोरएस्टोनियाइजिप्तपश्चिम सहाराएरिट्रियास्पेनइथिओपियायुरोपीय संघफिनलं" + + "डफिजीफॉकलंड बेटेमायक्रोनेशियाफेरो बेटेफ्रान्सगॅबॉनयुनायटेड किंगडमग्रेन" + + "ेडाजॉर्जियाफ्रेंच गयानाग्वेर्नसेघानाजिब्राल्टरग्रीनलंडगाम्बियागिनीग्वा" + + "डेलोउपेइक्वेटोरियल गिनीग्रीसदक्षिण जॉर्जिया आणि दक्षिण सँडविच बेटेग्वा" + + "टेमालागुआमगिनी-बिसाउगयानाहाँगकाँग एसएआर चीनहर्ड आणि मॅक्डोनाल्ड बेटेहो" + + "ंडुरासक्रोएशियाहैतीहंगेरीकॅनरी बेटेइंडोनेशियाआयर्लंडइस्त्राइलआयल ऑफ मॅ" + + "नभारतब्रिटिश हिंदी महासागर क्षेत्रइराकइराणआइसलँडइटलीजर्सीजमैकाजॉर्डनजप" + + "ानकेनियाकिरगिझस्तानकंबोडियाकिरीबाटीकोमोरोजसेंट किट्स आणि नेव्हिसउत्तर " + + "कोरियादक्षिण कोरियाकुवेतकेमन बेटेकझाकस्तानलाओसलेबनॉनसेंट ल्यूसियालिक्ट" + + "ेनस्टाइनश्रीलंकालायबेरियालेसोथोलिथुआनियालक्झेंबर्गलात्वियालिबियामोरोक्" + + "कोमोनॅकोमोल्डोव्हामोंटेनेग्रोसेंट मार्टिनमादागास्करमार्शल बेटेमॅसेडोनि" + + "यामालीम्यानमार (बर्मा)मंगोलियामकाओ एसएआर चीनउत्तरी मारियाना बेटेमार्टि" + + "निकमॉरिटानियामॉन्ट्सेराटमाल्टामॉरिशसमालदीवमलावीमेक्सिकोमलेशियामोझाम्बि" + + "कनामिबियान्यू कॅलेडोनियानाइजरनॉरफॉक बेटनायजेरियानिकाराग्वानेदरलँडनॉर्व" + + "ेनेपाळनाउरूनीयून्यूझीलंडओमानपनामापेरूफ्रेंच पॉलिनेशियापापुआ न्यू गिनीफ" + + "िलिपिन्सपाकिस्तानपोलंडसेंट पियरे आणि मिक्वेलोनपिटकैर्न बेटेप्युएर्तो र" + + "िकोपॅलेस्टिनियन प्रदेशपोर्तुगालपलाऊपराग्वेकतारआउटलाईंग ओशनियारियुनियनर" + + "ोमानियासर्बियारशियारवांडासौदी अरबसोलोमन बेटेसेशेल्ससुदानस्वीडनसिंगापूर" + + "सेंट हेलेनास्लोव्हेनियास्वालबर्ड आणि जान मायेनस्लोव्हाकियासिएरा लिओनसॅ" + + "न मरीनोसेनेगलसोमालियासुरिनामदक्षिण सुदानसाओ टोम आणि प्रिंसिपेअल साल्वा" + + "डोरसिंट मार्टेनसीरियास्वाझिलँडट्रिस्टन दा कुन्हाटर्क्स आणि कैकोस बेटेच" + + "ाडफ्रेंच दाक्षिणात्य प्रदेशटोगोथायलंडताजिकिस्तानतोकेलाउतिमोर-लेस्तेतुर" + + "्कमेनिस्तानट्यूनिशियाटोंगातुर्कीत्रिनिदाद आणि टोबॅगोटुवालुतैवानटांझानि" + + "यायुक्रेनयुगांडायू.एस. आउटलाइंग बेटेसंयुक्त राष्ट्रयुनायटेड स्टेट्सउरु" + + "ग्वेउझबेकिस्तानव्हॅटिकन सिटीसेंट व्हिन्सेंट आणि ग्रेनडाइन्सव्हेनेझुएला" + + "ब्रिटिश व्हर्जिन बेटेयू.एस. व्हर्जिन बेटेव्हिएतनामवानुआतुवालिस आणि फ्य" + + "ूचूनासामोआकोसोव्होयेमेनमायोट्टेदक्षिण आफ्रिकाझाम्बियाझिम्बाब्वेअज्ञात " + + "प्रदेशविश्वआफ्रिकाउत्तर अमेरिकादक्षिण अमेरिकाओशनियापश्चिम आफ्रिकामध्य " + + "अमेरिकापूर्व आफ्रिकाउत्तर आफ्रिकामध्य आफ्रिकादक्षिणी आफ्रिकाअमेरिकाउत्" + + "तरी अमेरिकाकॅरीबियनपूर्व आशियादक्षिण आशियादक्षिण पूर्व आशियादक्षिण युर" + + "ोपऑस्\u200dट्रेलेशियामेलानेशियामायक्रोनेशियन प्रदेशपॉलिनेशियाअशियामध्य" + + " आशियापश्चिम आशियायुरोपपूर्व युरोपउत्तर युरोपपश्चिम युरोपलॅटिन अमेरिका" + +var mrRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x002b, 0x003d, 0x006f, 0x0090, 0x00c8, 0x00e0, 0x00fb, + 0x0116, 0x0128, 0x014c, 0x016a, 0x018f, 0x01aa, 0x01cb, 0x01da, + 0x01f9, 0x0211, 0x0255, 0x0270, 0x028b, 0x02a3, 0x02c8, 0x02e3, + 0x02f5, 0x030a, 0x0319, 0x0344, 0x0359, 0x036e, 0x038c, 0x03c0, + 0x03d5, 0x03e7, 0x03f6, 0x0412, 0x042d, 0x0442, 0x044e, 0x045d, + 0x048e, 0x04b5, 0x0505, 0x0535, 0x0559, 0x057e, 0x0594, 0x05a0, + 0x05b5, 0x05be, 0x05d9, 0x05fe, 0x061d, 0x062f, 0x064e, 0x0669, + 0x0688, 0x069d, 0x06c8, 0x06da, 0x0702, 0x0714, 0x072f, 0x0747, + // Entry 40 - 7F + 0x0781, 0x079c, 0x07cb, 0x07e3, 0x07fe, 0x0810, 0x0832, 0x084d, + 0x085c, 0x0874, 0x0893, 0x0893, 0x08a5, 0x08b1, 0x08d0, 0x08f7, + 0x0910, 0x0925, 0x0934, 0x095f, 0x0977, 0x098f, 0x09b1, 0x09cc, + 0x09d8, 0x09f6, 0x0a0e, 0x0a26, 0x0a32, 0x0a53, 0x0a81, 0x0a90, + 0x0af8, 0x0b16, 0x0b22, 0x0b3e, 0x0b4d, 0x0b7f, 0x0bc4, 0x0bdc, + 0x0bf7, 0x0c03, 0x0c15, 0x0c31, 0x0c4f, 0x0c64, 0x0c7f, 0x0c99, + 0x0ca5, 0x0cf6, 0x0d02, 0x0d0e, 0x0d20, 0x0d2c, 0x0d3b, 0x0d4a, + 0x0d5c, 0x0d68, 0x0d7a, 0x0d9b, 0x0db3, 0x0dcb, 0x0de0, 0x0e1c, + // Entry 80 - BF + 0x0e3e, 0x0e63, 0x0e72, 0x0e8b, 0x0ea6, 0x0eb2, 0x0ec4, 0x0ee9, + 0x0f10, 0x0f28, 0x0f43, 0x0f55, 0x0f70, 0x0f8e, 0x0fa6, 0x0fb8, + 0x0fd0, 0x0fe2, 0x1000, 0x1021, 0x1043, 0x1061, 0x1080, 0x109e, + 0x10aa, 0x10d4, 0x10ec, 0x1112, 0x114a, 0x1165, 0x1183, 0x11a4, + 0x11b6, 0x11c8, 0x11da, 0x11e9, 0x1201, 0x1216, 0x1231, 0x1249, + 0x1274, 0x1283, 0x129f, 0x12ba, 0x12d8, 0x12ed, 0x12ff, 0x130e, + 0x131d, 0x1329, 0x1344, 0x1350, 0x135f, 0x136b, 0x139c, 0x13c5, + 0x13e0, 0x13fb, 0x140a, 0x144c, 0x1471, 0x1499, 0x14d0, 0x14eb, + // Entry C0 - FF + 0x14f7, 0x150c, 0x1518, 0x1543, 0x155b, 0x1573, 0x1588, 0x1597, + 0x15a9, 0x15bf, 0x15de, 0x15f3, 0x1602, 0x1614, 0x162c, 0x164b, + 0x166f, 0x16ae, 0x16d2, 0x16ee, 0x1707, 0x1719, 0x1731, 0x1746, + 0x1768, 0x17a1, 0x17c3, 0x17e5, 0x17f7, 0x1812, 0x1844, 0x187d, + 0x1886, 0x18cd, 0x18d9, 0x18eb, 0x190c, 0x1921, 0x1943, 0x196d, + 0x198b, 0x199a, 0x19ac, 0x19e4, 0x19f6, 0x1a05, 0x1a20, 0x1a35, + 0x1a4a, 0x1a7e, 0x1aa9, 0x1ad7, 0x1aec, 0x1b0d, 0x1b32, 0x1b89, + 0x1baa, 0x1be5, 0x1c19, 0x1c34, 0x1c49, 0x1c7b, 0x1c8a, 0x1ca2, + // Entry 100 - 13F + 0x1cb1, 0x1cc9, 0x1cf1, 0x1d09, 0x1d27, 0x1d4c, 0x1d5b, 0x1d70, + 0x1d95, 0x1dbd, 0x1dcf, 0x1df7, 0x1e19, 0x1e3e, 0x1e63, 0x1e85, + 0x1eb0, 0x1ec5, 0x1eed, 0x1f05, 0x1f24, 0x1f46, 0x1f78, 0x1f9a, + 0x1fc4, 0x1fe2, 0x201c, 0x203a, 0x2049, 0x2065, 0x2087, 0x2096, + 0x20b5, 0x20d4, 0x20f6, 0x211b, +} // Size: 608 bytes + +const msRegionStr string = "" + // Size: 2967 bytes + "Pulau AscensionAndorraEmiriah Arab BersatuAfghanistanAntigua dan Barbuda" + + "AnguillaAlbaniaArmeniaAngolaAntartikaArgentinaSamoa AmerikaAustriaAustra" + + "liaArubaKepulauan AlandAzerbaijanBosnia dan HerzegovinaBarbadosBanglades" + + "hBelgiumBurkina FasoBulgariaBahrainBurundiBeninSaint BarthélemyBermudaBr" + + "uneiBoliviaBelanda CaribbeanBrazilBahamasBhutanPulau BouvetBotswanaBelar" + + "usBelizeKanadaKepulauan Cocos (Keeling)Congo - KinshasaRepublik Afrika T" + + "engahCongo - BrazzavilleSwitzerlandCote d’IvoireKepulauan CookChileCamer" + + "oonChinaColombiaPulau ClippertonCosta RicaCubaCape VerdeCuracaoPulau Kri" + + "smasCyprusRepublik CzechJermanDiego GarciaDjiboutiDenmarkDominicaRepubli" + + "k DominicaAlgeriaCeuta dan MelillaEcuadorEstoniaMesirSahara BaratEritrea" + + "SepanyolEthiopiaKesatuan EropahFinlandFijiKepulauan FalklandMicronesiaKe" + + "pulauan FaroePerancisGabonUnited KingdomGrenadaGeorgiaGuiana PerancisGue" + + "rnseyGhanaGibraltarGreenlandGambiaGuineaGuadeloupeGuinea KhatulistiwaGre" + + "eceKepulauan Georgia Selatan & Sandwich SelatanGuatemalaGuamGuinea Bissa" + + "uGuyanaHong Kong SAR ChinaKepulauan Heard & McDonaldHondurasCroatiaHaiti" + + "HungaryKepulauan CanaryIndonesiaIrelandIsraelIsle of ManIndiaWilayah Lau" + + "tan Hindi BritishIraqIranIcelandItaliJerseyJamaicaJordanJepunKenyaKyrgyz" + + "stanKembojaKiribatiComorosSaint Kitts dan NevisKorea UtaraKorea SelatanK" + + "uwaitKepulauan CaymanKazakhstanLaosLubnanSaint LuciaLiechtensteinSri Lan" + + "kaLiberiaLesothoLithuaniaLuxembourgLatviaLibyaMaghribiMonacoMoldovaMonte" + + "negroSaint MartinMadagaskarKepulauan MarshallMacedoniaMaliMyanmar (Burma" + + ")MongoliaMacau SAR ChinaKepulauan Mariana UtaraMartiniqueMauritaniaMonts" + + "erratMaltaMauritiusMaldivesMalawiMexicoMalaysiaMozambiqueNamibiaNew Cale" + + "doniaNigerPulau NorfolkNigeriaNicaraguaBelandaNorwayNepalNauruNiueNew Ze" + + "alandOmanPanamaPeruPolinesia PerancisPapua New GuineaFilipinaPakistanPol" + + "andSaint Pierre dan MiquelonKepulauan PitcairnPuerto RicoWilayah Palesti" + + "nPortugalPalauParaguayQatarOceania TerpencilReunionRomaniaSerbiaRusiaRwa" + + "ndaArab SaudiKepulauan SolomonSeychellesSudanSwedenSingapuraSaint Helena" + + "SloveniaSvalbard dan Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomal" + + "iaSurinamSudan SelatanSao Tome dan PrincipeEl SalvadorSint MaartenSyriaS" + + "wazilandTristan da CunhaKepulauan Turks dan CaicosChadWilayah Selatan Pe" + + "rancisTogoThailandTajikistanTokelauTimor-LesteTurkmenistanTunisiaTongaTu" + + "rkiTrinidad dan TobagoTuvaluTaiwanTanzaniaUkraineUgandaKepulauan Terpenc" + + "il A.S.Bangsa-bangsa BersatuAmerika SyarikatUruguayUzbekistanKota Vatica" + + "nSaint Vincent dan GrenadinesVenezuelaKepulauan Virgin BritishKepulauan " + + "Virgin A.S.VietnamVanuatuWallis dan FutunaSamoaKosovoYamanMayotteAfrika " + + "SelatanZambiaZimbabweWilayah Tidak DiketahuiDuniaAfrikaAmerika UtaraAmer" + + "ika SelatanOceaniaAfrika BaratAmerika TengahAfrika TimurAfrika UtaraAfri" + + "ka TengahSelatan AfrikaAmerikaUtara AmerikaCaribbeanAsia TimurAsia Selat" + + "anAsia TenggaraEropah SelatanAustralasiaMelanesiaWilayah MikronesiaPolin" + + "esiaAsiaAsia TengahAsia BaratEropahEropah TimurEropah UtaraEropah BaratA" + + "merika Latin" + +var msRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0016, 0x002a, 0x0035, 0x0048, 0x0050, 0x0057, + 0x005e, 0x0064, 0x006d, 0x0076, 0x0083, 0x008a, 0x0093, 0x0098, + 0x00a7, 0x00b1, 0x00c7, 0x00cf, 0x00d9, 0x00e0, 0x00ec, 0x00f4, + 0x00fb, 0x0102, 0x0107, 0x0118, 0x011f, 0x0125, 0x012c, 0x013d, + 0x0143, 0x014a, 0x0150, 0x015c, 0x0164, 0x016b, 0x0171, 0x0177, + 0x0190, 0x01a0, 0x01b6, 0x01c9, 0x01d4, 0x01e3, 0x01f1, 0x01f6, + 0x01fe, 0x0203, 0x020b, 0x021b, 0x0225, 0x0229, 0x0233, 0x023a, + 0x0247, 0x024d, 0x025b, 0x0261, 0x026d, 0x0275, 0x027c, 0x0284, + // Entry 40 - 7F + 0x0295, 0x029c, 0x02ad, 0x02b4, 0x02bb, 0x02c0, 0x02cc, 0x02d3, + 0x02db, 0x02e3, 0x02f2, 0x02f2, 0x02f9, 0x02fd, 0x030f, 0x0319, + 0x0328, 0x0330, 0x0335, 0x0343, 0x034a, 0x0351, 0x0360, 0x0368, + 0x036d, 0x0376, 0x037f, 0x0385, 0x038b, 0x0395, 0x03a8, 0x03ae, + 0x03da, 0x03e3, 0x03e7, 0x03f4, 0x03fa, 0x040d, 0x0427, 0x042f, + 0x0436, 0x043b, 0x0442, 0x0452, 0x045b, 0x0462, 0x0468, 0x0473, + 0x0478, 0x0494, 0x0498, 0x049c, 0x04a3, 0x04a8, 0x04ae, 0x04b5, + 0x04bb, 0x04c0, 0x04c5, 0x04cf, 0x04d6, 0x04de, 0x04e5, 0x04fa, + // Entry 80 - BF + 0x0505, 0x0512, 0x0518, 0x0528, 0x0532, 0x0536, 0x053c, 0x0547, + 0x0554, 0x055d, 0x0564, 0x056b, 0x0574, 0x057e, 0x0584, 0x0589, + 0x0591, 0x0597, 0x059e, 0x05a8, 0x05b4, 0x05be, 0x05d0, 0x05d9, + 0x05dd, 0x05ec, 0x05f4, 0x0603, 0x061a, 0x0624, 0x062e, 0x0638, + 0x063d, 0x0646, 0x064e, 0x0654, 0x065a, 0x0662, 0x066c, 0x0673, + 0x0680, 0x0685, 0x0692, 0x0699, 0x06a2, 0x06a9, 0x06af, 0x06b4, + 0x06b9, 0x06bd, 0x06c8, 0x06cc, 0x06d2, 0x06d6, 0x06e8, 0x06f8, + 0x0700, 0x0708, 0x070e, 0x0727, 0x0739, 0x0744, 0x0754, 0x075c, + // Entry C0 - FF + 0x0761, 0x0769, 0x076e, 0x077f, 0x0786, 0x078d, 0x0793, 0x0798, + 0x079e, 0x07a8, 0x07b9, 0x07c3, 0x07c8, 0x07ce, 0x07d7, 0x07e3, + 0x07eb, 0x0801, 0x0809, 0x0815, 0x081f, 0x0826, 0x082d, 0x0834, + 0x0841, 0x0856, 0x0861, 0x086d, 0x0872, 0x087b, 0x088b, 0x08a5, + 0x08a9, 0x08c1, 0x08c5, 0x08cd, 0x08d7, 0x08de, 0x08e9, 0x08f5, + 0x08fc, 0x0901, 0x0906, 0x0919, 0x091f, 0x0925, 0x092d, 0x0934, + 0x093a, 0x0952, 0x0967, 0x0977, 0x097e, 0x0988, 0x0994, 0x09b0, + 0x09b9, 0x09d1, 0x09e6, 0x09ed, 0x09f4, 0x0a05, 0x0a0a, 0x0a10, + // Entry 100 - 13F + 0x0a15, 0x0a1c, 0x0a2a, 0x0a30, 0x0a38, 0x0a4f, 0x0a54, 0x0a5a, + 0x0a67, 0x0a76, 0x0a7d, 0x0a89, 0x0a97, 0x0aa3, 0x0aaf, 0x0abc, + 0x0aca, 0x0ad1, 0x0ade, 0x0ae7, 0x0af1, 0x0afd, 0x0b0a, 0x0b18, + 0x0b23, 0x0b2c, 0x0b3e, 0x0b47, 0x0b4b, 0x0b56, 0x0b60, 0x0b66, + 0x0b72, 0x0b7e, 0x0b8a, 0x0b97, +} // Size: 608 bytes + +const myRegionStr string = "" + // Size: 9670 bytes + "တက်တော်မူကျွန်းအင်ဒိုရာယူအေအီးအာဖဂန်နစ္စတန်အင်တီဂွါနှင့် ဘာဘူဒါအန်ဂီလာအယ" + + "်လ်ဘေးနီးယားအာမေးနီးယားအင်ဂိုလာအန္တာတိကအာဂျင်တီးနားအမေရိကန် ဆမိုးအားဩစ" + + "တြီးယားဩစတြေးလျအာရူးဗားအာလန်ကျွန်းအဇာဘိုင်ဂျန်ဘော့စနီးယားနှင့် ဟာဇီဂို" + + "ဗီနားဘာဘေးဒိုးစ်ဘင်္ဂလားဒေ့ရှ်ဘယ်လ်ဂျီယမ်ဘာကီးနား ဖားဆိုဘူလ်ဂေးရီးယားဘ" + + "ာရိန်းဘူရွန်ဒီဘီနင်စိန့်ဘာသယ်လ်မီဘာမြူဒါဘရူနိုင်းဘိုလီးဗီးယားကာရစ်ဘီယံ" + + " နယ်သာလန်ဘရာဇီးဘဟားမားဘူတန်ဘူဗက်ကျွန်းဘော့ဆွာနာဘီလာရုဇ်ဘလိဇ်ကနေဒါကိုကိုး" + + "ကျွန်းကွန်ဂိုဗဟို အာဖရိက ပြည်ထောင်စုကွန်ဂို-ဘရာဇာဗီးလ်ဆွစ်ဇာလန်ကို့တ် " + + "ဒီဗွာကွတ် ကျွန်းစုချီလီကင်မရွန်းတရုတ်ကိုလံဘီယာကလစ်ပါတန်ကျွန်းကို့စ်တာရ" + + "ီကာကျူးဘားကိတ်ဗာဒီကျူရေးကိုးစ်ခရစ်စမတ် ကျွန်းဆိုက်ပရပ်စ်ချက် ပြည်ထောင်" + + "စုဂျာမဏီဒီအဲဂိုဂါစီရာဂျီဘူတီဒိန်းမတ်ဒိုမီနီကာဒိုမီနီကန်အယ်လ်ဂျီးရီးယား" + + "ဆယ်ဥတာနှင့်မယ်လီလ်လာအီကွေဒေါအက်စတိုးနီးယားအီဂျစ်အနောက် ဆာဟာရအီရီထရီးယာ" + + "းစပိန်အီသီယိုးပီးယားဥရောပသမဂ္ဂဖင်လန်ဖီဂျီဖော့ကလန် ကျွန်းစုမိုင်ခရိုနီရ" + + "ှားဖာရိုး ကျွန်းစုများပြင်သစ်ဂါဘွန်ယူနိုက်တက်ကင်းဒမ်းဂရီနေဒါဂျော်ဂျီယာ" + + "ပြင်သစ် ဂိုင်ယာနာဂွန်းဇီဂါနာဂျီဘရော်လ်တာဂရင်းလန်းဂမ်ဘီရာဂီနီဂွါဒီလုအီက" + + "ွေတာ ဂီနီဂရိတောင် ဂျော်ဂျီယာ နှင့် တောင် ဆင်းဒဝစ်ဂျ် ကျွန်းစုများဂွါတီ" + + "မာလာဂူအမ်ဂီနီ-ဘီစောဂိုင်ယာနာဟောင်ကောင် (တရုတ်ပြည်)ဟတ်ကျွန်းနှင့်မက်ဒေါ" + + "နယ်ကျွန်းစုဟွန်ဒူးရပ်စ်ခရိုအေးရှားဟေတီဟန်ဂေရီကနေရီ ကျွန်းစုအင်ဒိုနီးရှ" + + "ားအိုင်ယာလန်အစ္စရေးမန်ကျွန်းအိန္ဒိယဗြိတိသျှပိုင် အိန္ဒိယသမုဒ္ဒရာကျွန်း" + + "များအီရတ်အီရန်အိုက်စလန်အီတလီဂျာစီဂျမေကာဂျော်ဒန်ဂျပန်ကင်ညာကာဂျစ္စတန်ကမ္" + + "ဘောဒီးယားခီရီဘာတီကိုမိုရိုစ်စိန့်ကစ်နှင့်နီဗီစ်မြောက်ကိုရီးယားတောင်ကို" + + "ရီးယားကူဝိတ်ကေမန် ကျွန်းစုကာဇက်စတန်လာအိုလက်ဘနွန်စိန့်လူစီယာလစ်တန်စတိန်" + + "းသီရိလင်္ကာလိုက်ဘေးရီးယားလီဆိုသိုလစ်သူယေးနီးယားလူဇင်ဘတ်လတ်ဗီးယားလစ်ဗျာ" + + "းမော်ရိုကိုမိုနာကိုမောလ်ဒိုဗာမွန်တီနိဂရိုးစိန့်မာတင်မဒါဂတ်စကားမာရှယ် က" + + "ျွန်းစုမက်စီဒိုးနီးယားမာလီမြန်မာ (Burma)မွန်ဂိုးလီးယားမကာအို (တရုတ်ပြည" + + "်)တောင်ပိုင်းမာရီအာနာကျွန်းစုမာတီနိခ်မော်ရီတေးနီးယားမောင့်စဲရက်မောလ်တာ" + + "မောရစ်ရှမော်လ်ဒိုက်မာလာဝီမက္ကဆီကိုမလေးရှားမိုဇမ်ဘစ်နမီးဘီးယားနယူး ကယ်လ" + + "ီဒိုနီးယားနိုင်ဂျာနောဖုတ်ကျွန်းနိုင်ဂျီးရီးယားနီကာရာဂွါနယ်သာလန်နော်ဝေန" + + "ီပေါနော်ရူးနီဥူအေနယူးဇီလန်အိုမန်ပနားမားပီရူးပြင်သစ် ပေါ်လီနီးရှားပါပူအ" + + "ာ နယူးဂီနီဖိလစ်ပိုင်ပါကစ္စတန်ပိုလန်စိန့်ပီအဲရ်နှင့် မီကွီလွန်ပစ်တ်ကိန်" + + "းကျွန်းစုပေါ်တိုရီကိုပါလက်စတိုင်း ပိုင်နက်ပေါ်တူဂီပလာအိုပါရာဂွေးကာတာသမ" + + "ုဒ္ဒရာ အပြင်ဘက်ရှိ ကျွန်းနိုင်ငံများဟေညွန်ရိုမေးနီးယားဆားဘီးယားရုရှရဝန" + + "်ဒါဆော်ဒီအာရေးဘီးယားဆော်လမွန်ကျွန်းစုဆေးရှဲဆူဒန်ဆွီဒင်စင်္ကာပူစိန့်ဟယ်" + + "လယ်နာစလိုဗေးနီးယားစဗိုလ်ဘတ်နှင့်ဂျန်မေရန်ဆလိုဗက်ကီးယားဆီယာရာ လီယွန်းဆန" + + "်မာရီနိုဆီနီဂေါဆိုမာလီယာဆူရာနမ်တောင် ဆူဒန်ဆောင်တူမေးနှင့် ပရင်စီပီအယ်လ" + + "်ဆာဗေးဒိုးစင့်မာတင်ဆီးရီးယားဆွာဇီလန်ထရစ္စတန် ဒါ ကွန်ဟာတခ်စ်နှင့်ကာအီကိ" + + "ုစ်ကျွန်းစုချဒ်ပြင်သစ် တောင်ပိုင်း ပိုင်နက်များတိုဂိုထိုင်းတာဂျီကစ္စတန" + + "်တိုကလောင်အရှေ့တီမောတာ့ခ်မင်နစ္စတန်တူနီးရှားတွန်ဂါတူရကီထရီနီဒတ်နှင့် တ" + + "ိုဘက်ဂိုတူဗားလူထိုင်ဝမ်တန်ဇန်းနီးယားယူကရိန်းယူဂန်းဒါးယူနိုက်တက်စတိတ် က" + + "ျွန်းနိုင်ငံများကုလသမဂ္ဂယူနိုက်တက်စတိတ်ဥရုဂွေးဉဇဘက်ကစ္စတန်ဗာတီကန်စီတီး" + + "စိန့်ဗင်းဆင့်နှင့် ဂရိနေဒိုင်ဗင်နီဇွဲလားဗြိတိသျှ ဗာဂျင်း ကျွန်းစုယူအက်" + + "စ် ဗာဂျင်း ကျွန်းစုဗီယက်နမ်ဗနွားတူဝေါလစ်နှင့် ဖူကျူးနားဆမိုးအားကိုဆိုဗ" + + "ိုယီမင်မာယိုတေးတောင်အာဖရိကဇမ်ဘီယာဇင်ဘာဘွေမသိ (သို့) မရှိသော ဒေသကမ္ဘာအာ" + + "ဖရိကမြောက် အမေရိကတိုက်တောင် အမေရိကသမုဒ္ဒရာဒေသအနောက် အာဖရိကဗဟို အမေရိကအ" + + "ရှေ့ အာဖရိကမြောက် အာဖရိကအလယ် အာဖရိကအာဖရိက တောင်ပိုင်းအမေရိကန်မြောက် အမ" + + "ေရိကကာရစ်ဘီယံအရှေ့အာရှတောင်အာရှအရှေ့တောင်အာရှတောင်ဥရောပဩစတြေးလျနှင့် န" + + "ယူးဇီလန်မီလာနီးရှားမိုက်ခရိုနီးရှား ဒေသပိုလီနီရှားအာရှအလယ်အာရှအနောက်အာ" + + "ရှဥရောပအရှေ့ ဥရောပမြောက် ဥရောပအနောက် ဥရောပလက်တင်အမေရိက" + +var myRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x002d, 0x0045, 0x005a, 0x0081, 0x00bb, 0x00d0, 0x00fa, + 0x011b, 0x0133, 0x014b, 0x016f, 0x01a0, 0x01bb, 0x01d3, 0x01eb, + 0x020c, 0x0230, 0x0285, 0x02a6, 0x02d0, 0x02f1, 0x031c, 0x0343, + 0x0358, 0x0370, 0x037f, 0x03a9, 0x03be, 0x03d9, 0x03fd, 0x0431, + 0x0443, 0x0458, 0x0467, 0x0488, 0x04a3, 0x04bb, 0x04ca, 0x04d9, + 0x0500, 0x0515, 0x0556, 0x058a, 0x05a5, 0x05c7, 0x05ec, 0x05fb, + 0x0616, 0x0625, 0x0640, 0x066d, 0x0691, 0x06a6, 0x06be, 0x06e2, + 0x070d, 0x072e, 0x075c, 0x076e, 0x0795, 0x07aa, 0x07c2, 0x07dd, + // Entry 40 - 7F + 0x07fb, 0x0828, 0x0864, 0x087c, 0x08a6, 0x08b8, 0x08da, 0x08fb, + 0x090a, 0x0934, 0x0952, 0x0952, 0x0964, 0x0973, 0x09a4, 0x09d1, + 0x0a08, 0x0a1d, 0x0a2f, 0x0a65, 0x0a7a, 0x0a98, 0x0ac9, 0x0ade, + 0x0aea, 0x0b0e, 0x0b29, 0x0b3e, 0x0b4a, 0x0b5f, 0x0b81, 0x0b8a, + 0x0c1f, 0x0c3a, 0x0c49, 0x0c65, 0x0c80, 0x0cbc, 0x0d19, 0x0d3d, + 0x0d5e, 0x0d6a, 0x0d7f, 0x0da7, 0x0dce, 0x0dec, 0x0e01, 0x0e1c, + 0x0e31, 0x0ea4, 0x0eb3, 0x0ec2, 0x0edd, 0x0eec, 0x0efb, 0x0f0d, + 0x0f25, 0x0f34, 0x0f43, 0x0f61, 0x0f85, 0x0f9d, 0x0fbe, 0x0ff7, + // Entry 80 - BF + 0x1024, 0x104e, 0x1060, 0x1088, 0x10a3, 0x10b2, 0x10ca, 0x10eb, + 0x110f, 0x112d, 0x1157, 0x116f, 0x1199, 0x11b1, 0x11cc, 0x11e1, + 0x11ff, 0x1217, 0x1235, 0x125c, 0x127a, 0x1298, 0x12c3, 0x12f0, + 0x12fc, 0x1316, 0x1340, 0x1370, 0x13c1, 0x13d9, 0x1406, 0x1427, + 0x143c, 0x1454, 0x1475, 0x1487, 0x14a2, 0x14ba, 0x14d5, 0x14f3, + 0x152a, 0x1542, 0x1569, 0x1596, 0x15b1, 0x15c9, 0x15db, 0x15ea, + 0x15ff, 0x1611, 0x162c, 0x163e, 0x1653, 0x1662, 0x169f, 0x16ca, + 0x16e8, 0x1703, 0x1715, 0x1761, 0x1797, 0x17bb, 0x17f8, 0x1810, + // Entry C0 - FF + 0x1822, 0x183a, 0x1846, 0x18b4, 0x18c6, 0x18ea, 0x1905, 0x1911, + 0x1923, 0x1956, 0x1989, 0x199b, 0x19aa, 0x19bc, 0x19d4, 0x19fb, + 0x1a22, 0x1a67, 0x1a8e, 0x1ab6, 0x1ad4, 0x1ae9, 0x1b04, 0x1b19, + 0x1b38, 0x1b7e, 0x1ba8, 0x1bc3, 0x1bde, 0x1bf6, 0x1c28, 0x1c79, + 0x1c85, 0x1ce1, 0x1cf3, 0x1d05, 0x1d29, 0x1d44, 0x1d62, 0x1d8f, + 0x1daa, 0x1dbc, 0x1dcb, 0x1e0e, 0x1e23, 0x1e3b, 0x1e62, 0x1e7a, + 0x1e95, 0x1ef6, 0x1f0e, 0x1f3b, 0x1f50, 0x1f74, 0x1f98, 0x1fed, + 0x200e, 0x2055, 0x2099, 0x20b1, 0x20c6, 0x2103, 0x211b, 0x2136, + // Entry 100 - 13F + 0x2145, 0x215d, 0x217e, 0x2193, 0x21ab, 0x21e3, 0x21f2, 0x2204, + 0x2238, 0x225a, 0x227b, 0x22a0, 0x22bf, 0x22e1, 0x2306, 0x2325, + 0x2359, 0x2371, 0x2396, 0x23b1, 0x23cc, 0x23e7, 0x2411, 0x242f, + 0x2472, 0x2493, 0x24cd, 0x24ee, 0x24fa, 0x2512, 0x2530, 0x253f, + 0x255e, 0x2580, 0x25a2, 0x25c6, +} // Size: 608 bytes + +const neRegionStr string = "" + // Size: 9070 bytes + "एस्केन्सन टापुअन्डोर्रासंयुक्त अरब इमिराट्सअफगानिस्तानएन्टिगुआ र बारबुडा" + + "आङ्गुइलाअल्बानियाआर्मेनियाअङ्गोलाअन्टारटिकाअर्जेन्टिनाअमेरिकी समोआअष्ट" + + "्रियाअष्ट्रेलियाआरूबाअलान्ड टापुहरुअजरबैजानबोस्निया एण्ड हर्जगोभिनियाब" + + "ार्बाडोसबङ्गलादेशबेल्जियमबर्किना फासोबुल्गेरियाबहराइनबुरूण्डीबेनिनसेन्" + + "ट बार्थालेमीबर्मुडाब्रुनाइबोलिभियाक्यारिवियन नेदरल्याण्ड्सब्राजिलबहामा" + + "सभुटानबुभेट टापुबोट्स्वानाबेलारूसबेलिजक्यानाडाकोकोस (किलिंग) टापुहरुको" + + "ङ्गो-किन्शासाकेन्द्रीय अफ्रिकी गणतन्त्रकोङ्गो - ब्राज्जाभिल्लेस्विजरल्" + + "याण्डआइभोरी कोस्टकुक टापुहरुचिलीक्यामरूनचीनकोलोम्बियाक्लिप्पेर्टन टापु" + + "कोष्टारिकाक्युबाकेप भर्डेकुराकाओक्रिष्टमस टापुसाइप्रसचेक गणतन्त्रजर्मन" + + "ीडियगो गार्सियाडिजिबुटीडेनमार्कडोमिनिकाडोमिनिकन गणतन्त्रअल्जेरियासिउटा" + + " र मेलिलाइक्वडेरइस्टोनियाइजिप्टपश्चिमी साहाराएरित्रियास्पेनइथियोपियायुरो" + + "पियन युनियनफिन्ल्याण्डफिजीफकल्याण्ड टापुहरुमाइक्रोनेसियाफारो टापुहरूफ्" + + "रान्सगावोनबेलायतग्रेनाडाजर्जियाफ्रान्सेली गायनागुएर्नसेघानाजिब्राल्टार" + + "ग्रिनल्याण्डगाम्वियागिनीग्वाडेलुपभू-मध्यीय गिनीग्रिसदक्षिण जर्जिया र द" + + "क्षिण स्यान्डवीच टापुहरूग्वाटेमालागुवामगिनी-बिसाउगुयानाहङकङ चिनिया समा" + + "जवादी स्वायत्त क्षेत्रहर्ड टापु र म्याकडोनाल्ड टापुहरुहन्डुरासक्रोएशिय" + + "ाहैटीहङ्गेरीक्यानारी टापुहरूइन्डोनेशियाआयरल्याण्डइजरायलआइज्ले अफ् म्या" + + "नभारतबेलायती हिन्द महासागर क्षेत्रइराकइरानआइस्ल्याण्डइटालीजर्सीजमाइकाज" + + "ोर्डनजापानकेन्याकिर्गिस्थानकम्बोडियाकिरिबाटीकोमोरोससेन्ट किट्स र नेभिस" + + "उत्तर कोरियादक्षिण कोरियाकुवेतकेयमान टापुकाजाकस्तानलाओसलेबननसेन्ट लुसि" + + "यालिएखटेन्स्टाइनश्रीलङ्कालाइबेरियालेसोथोलिथुअनियालक्जेमबर्गलाट्भियालिब" + + "ियामोरोक्कोमोनाकोमाल्डोभामोन्टेनेग्रोसेन्ट मार्टिनमडागास्करमार्शल टापु" + + "हरुम्याकेडोनियामालीम्यान्मार (बर्मा)मङ्गोलियामकावो चिनिँया स्वशासित क्" + + "षेत्रउत्तरी मारिआना टापुमार्टिनिकमाउरिटानियामोन्टसेर्राटमाल्टामाउरिटसम" + + "ाल्दिभ्समालावीमेक्सिकोमलेसियामोजाम्बिकनामिबियानयाँ कालेडोनियानाइजरनोरफ" + + "ोल्क टापुनाइजेरियानिकारागुवानेदरल्याण्ड्सनर्वेनेपालनाउरूनियुइन्युजिल्य" + + "ाण्डओमनपनामापेरूफ्रान्सेली पोलिनेसियापपुआ न्यू गाइनियाफिलिपिन्सपाकिस्त" + + "ानपोल्याण्डसेन्ट पिर्रे र मिक्केलोनपिटकाइर्न टापुहरुपुएर्टो रिकोप्याले" + + "स्टनी भू-भागहरुपोर्चुगलपलाउप्याराग्वेकतारबाह्य ओसनियारियुनियनरोमानियास" + + "र्बियारूसरवाण्डासाउदी अरबसोलोमोन टापुहरुसेचेलेससुडानस्विडेनसिङ्गापुरसे" + + "न्ट हेलेनास्लोभेनियासभाल्बार्ड र जान मायेनस्लोभाकियासिएर्रा लिओनसान् म" + + "ारिनोसेनेगालसोमालियासुरिनेमदक्षिणी सुडानसाओ टोमे र प्रिन्सिपएल् साल्भा" + + "डोरसिन्ट मार्टेनसिरियास्वाजिल्याण्डट्रिस्टान डा कुन्हातुर्क र काइकोस ट" + + "ापुचाडफ्रान्सेली दक्षिणी क्षेत्रहरुटोगोथाइल्याण्डताजिकिस्तानतोकेलाउटिम" + + "ोर-लेस्टेतुर्कमेनिस्तानट्युनिसियाटोंगाटर्कीत्रिनिडाड एण्ड टोबागोतुभालु" + + "ताइवानतान्जानियायुक्रेनयुगाण्डासंयुक्त राज्यका बाह्य टापुहरुसंयुक्त रा" + + "ष्ट्र संघसंयुक्त राज्यउरूग्वेउज्बेकिस्तानभेटिकन सिटीसेन्ट भिन्सेन्ट र " + + "ग्रेनाडिन्सभेनेजुएलाबेलायती भर्जिन टापुहरुसंयुक्त राज्य भर्जिन टापुहरु" + + "भिएतनामभानुआतुवालिस र फुटुनासामोआकोसोवोयेमेनमायोट्टदक्षिण अफ्रिकाजाम्ब" + + "ियाजिम्बाबेअज्ञात क्षेत्रविश्वअफ्रिकाउत्तर अमेरिकादक्षिण अमेरिकाओसनिया" + + "पश्चिमी अफ्रिकाकेन्द्रीय अमेरिकापूर्वी अफ्रिकाउत्तरी अफ्रिकामध्य अफ्रि" + + "कादक्षिणी अफ्रिकाअमेरिकासउत्तरी अमेरिकाक्यारिबियनपूर्वी एशियादक्षिणी ए" + + "शियादक्षिण पूर्वी एशियादक्षिणी युरोपअष्ट्रालासियामेलानेसियामाइक्रोनेसि" + + "याली क्षेत्रपोलिनेशियाएशियाकेन्द्रीय एशियापश्चिमी एशियायुरोपपूर्वी युर" + + "ोपउत्तरी युरोपपश्चिमी युरोपल्याटिन अमेरिका" + +var neRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0028, 0x0043, 0x007b, 0x009c, 0x00ce, 0x00e6, 0x0101, + 0x011c, 0x0131, 0x014f, 0x0170, 0x0192, 0x01ad, 0x01ce, 0x01dd, + 0x0205, 0x021d, 0x0267, 0x0282, 0x029d, 0x02b5, 0x02d7, 0x02f5, + 0x0307, 0x031f, 0x032e, 0x035c, 0x0371, 0x0386, 0x039e, 0x03e4, + 0x03f9, 0x040b, 0x041a, 0x0436, 0x0454, 0x0469, 0x0478, 0x0490, + 0x04ca, 0x04f5, 0x053f, 0x057e, 0x05a5, 0x05c7, 0x05e6, 0x05f2, + 0x060a, 0x0613, 0x0631, 0x0662, 0x0680, 0x0692, 0x06ab, 0x06c0, + 0x06e8, 0x06fd, 0x071f, 0x0731, 0x0759, 0x0771, 0x0789, 0x07a1, + // Entry 40 - 7F + 0x07d2, 0x07ed, 0x0813, 0x0828, 0x0843, 0x0855, 0x087d, 0x0898, + 0x08a7, 0x08c2, 0x08ed, 0x08ed, 0x090e, 0x091a, 0x094b, 0x0972, + 0x0994, 0x09a9, 0x09b8, 0x09ca, 0x09e2, 0x09f7, 0x0a25, 0x0a3d, + 0x0a49, 0x0a6a, 0x0a8e, 0x0aa6, 0x0ab2, 0x0acd, 0x0af3, 0x0b02, + 0x0b76, 0x0b94, 0x0ba3, 0x0bbf, 0x0bd1, 0x0c38, 0x0c90, 0x0ca8, + 0x0cc3, 0x0ccf, 0x0ce4, 0x0d12, 0x0d33, 0x0d51, 0x0d63, 0x0d8f, + 0x0d9b, 0x0dec, 0x0df8, 0x0e04, 0x0e25, 0x0e34, 0x0e43, 0x0e55, + 0x0e67, 0x0e76, 0x0e88, 0x0ea9, 0x0ec4, 0x0edc, 0x0ef1, 0x0f24, + // Entry 80 - BF + 0x0f46, 0x0f6b, 0x0f7a, 0x0f99, 0x0fb7, 0x0fc3, 0x0fd2, 0x0ff4, + 0x101e, 0x1039, 0x1054, 0x1066, 0x1081, 0x109f, 0x10b7, 0x10c9, + 0x10e1, 0x10f3, 0x110b, 0x112f, 0x1154, 0x116f, 0x1197, 0x11bb, + 0x11c7, 0x11f4, 0x120f, 0x1263, 0x1298, 0x12b3, 0x12d4, 0x12f8, + 0x130a, 0x131f, 0x133a, 0x134c, 0x1364, 0x1379, 0x1394, 0x13ac, + 0x13d7, 0x13e6, 0x140b, 0x1426, 0x1444, 0x146b, 0x147a, 0x1489, + 0x1498, 0x14a7, 0x14ce, 0x14d7, 0x14e6, 0x14f2, 0x152f, 0x155e, + 0x1579, 0x1594, 0x15af, 0x15f1, 0x1622, 0x1644, 0x167f, 0x1697, + // Entry C0 - FF + 0x16a3, 0x16c1, 0x16cd, 0x16ef, 0x1707, 0x171f, 0x1734, 0x173d, + 0x1752, 0x176b, 0x1796, 0x17ab, 0x17ba, 0x17cf, 0x17ea, 0x180c, + 0x182a, 0x1866, 0x1884, 0x18a6, 0x18c5, 0x18da, 0x18f2, 0x1907, + 0x192c, 0x1962, 0x1987, 0x19ac, 0x19be, 0x19e5, 0x1a1a, 0x1a4d, + 0x1a56, 0x1aa9, 0x1ab5, 0x1ad3, 0x1af4, 0x1b09, 0x1b2b, 0x1b55, + 0x1b73, 0x1b82, 0x1b91, 0x1bcc, 0x1bde, 0x1bf0, 0x1c0e, 0x1c23, + 0x1c3b, 0x1c8c, 0x1cc1, 0x1ce6, 0x1cfb, 0x1d1f, 0x1d3e, 0x1d8f, + 0x1daa, 0x1de8, 0x1e36, 0x1e4b, 0x1e60, 0x1e86, 0x1e95, 0x1ea7, + // Entry 100 - 13F + 0x1eb6, 0x1ecb, 0x1ef3, 0x1f0b, 0x1f23, 0x1f4b, 0x1f5a, 0x1f6f, + 0x1f94, 0x1fbc, 0x1fce, 0x1ff9, 0x202a, 0x2052, 0x207a, 0x209c, + 0x20c7, 0x20df, 0x2107, 0x2125, 0x2147, 0x216c, 0x21a1, 0x21c6, + 0x21ed, 0x220b, 0x224e, 0x226c, 0x227b, 0x22a6, 0x22cb, 0x22da, + 0x22fc, 0x231e, 0x2343, 0x236e, +} // Size: 608 bytes + +const nlRegionStr string = "" + // Size: 3078 bytes + "AscensionAndorraVerenigde Arabische EmiratenAfghanistanAntigua en Barbud" + + "aAnguillaAlbaniëArmeniëAngolaAntarcticaArgentiniëAmerikaans-SamoaOostenr" + + "ijkAustraliëArubaÅlandAzerbeidzjanBosnië en HerzegovinaBarbadosBanglades" + + "hBelgiëBurkina FasoBulgarijeBahreinBurundiBeninSaint-BarthélemyBermudaBr" + + "uneiBoliviaCaribisch NederlandBraziliëBahama’sBhutanBouveteilandBotswana" + + "BelarusBelizeCanadaCocoseilandenCongo-KinshasaCentraal-Afrikaanse Republ" + + "iekCongo-BrazzavilleZwitserlandIvoorkustCookeilandenChiliKameroenChinaCo" + + "lombiaClippertonCosta RicaCubaKaapverdiëCuraçaoChristmaseilandCyprusTsje" + + "chiëDuitslandDiego GarciaDjiboutiDenemarkenDominicaDominicaanse Republie" + + "kAlgerijeCeuta en MelillaEcuadorEstlandEgypteWestelijke SaharaEritreaSpa" + + "njeEthiopiëEuropese UnieFinlandFijiFalklandeilandenMicronesiaFaeröerFran" + + "krijkGabonVerenigd KoninkrijkGrenadaGeorgiëFrans-GuyanaGuernseyGhanaGibr" + + "altarGroenlandGambiaGuineeGuadeloupeEquatoriaal-GuineaGriekenlandZuid-Ge" + + "orgia en Zuidelijke SandwicheilandenGuatemalaGuamGuinee-BissauGuyanaHong" + + "kong SAR van ChinaHeard en McDonaldeilandenHondurasKroatiëHaïtiHongarije" + + "Canarische EilandenIndonesiëIerlandIsraëlIsle of ManIndiaBritse Gebieden" + + " in de Indische OceaanIrakIranIJslandItaliëJerseyJamaicaJordaniëJapanKen" + + "iaKirgiziëCambodjaKiribatiComorenSaint Kitts en NevisNoord-KoreaZuid-Kor" + + "eaKoeweitKaaimaneilandenKazachstanLaosLibanonSaint LuciaLiechtensteinSri" + + " LankaLiberiaLesothoLitouwenLuxemburgLetlandLibiëMarokkoMonacoMoldaviëMo" + + "ntenegroSaint-MartinMadagaskarMarshalleilandenMacedoniëMaliMyanmar (Birm" + + "a)MongoliëMacau SAR van ChinaNoordelijke MarianenMartiniqueMauritaniëMon" + + "tserratMaltaMauritiusMaldivenMalawiMexicoMaleisiëMozambiqueNamibiëNieuw-" + + "CaledoniëNigerNorfolkNigeriaNicaraguaNederlandNoorwegenNepalNauruNiueNie" + + "uw-ZeelandOmanPanamaPeruFrans-PolynesiëPapoea-Nieuw-GuineaFilipijnenPaki" + + "stanPolenSaint-Pierre en MiquelonPitcairneilandenPuerto RicoPalestijnse " + + "gebiedenPortugalPalauParaguayQataroverig OceaniëRéunionRoemeniëServiëRus" + + "landRwandaSaoedi-ArabiëSalomonseilandenSeychellenSoedanZwedenSingaporeSi" + + "nt-HelenaSloveniëSpitsbergen en Jan MayenSlowakijeSierra LeoneSan Marino" + + "SenegalSomaliëSurinameZuid-SoedanSao Tomé en PrincipeEl SalvadorSint-Maa" + + "rtenSyriëSwazilandTristan da CunhaTurks- en CaicoseilandenTsjaadFranse G" + + "ebieden in de zuidelijke Indische OceaanTogoThailandTadzjikistanTokelauO" + + "ost-TimorTurkmenistanTunesiëTongaTurkijeTrinidad en TobagoTuvaluTaiwanTa" + + "nzaniaOekraïneOegandaKleine afgelegen eilanden van de Verenigde Statenve" + + "renigde natiesVerenigde StatenUruguayOezbekistanVaticaanstadSaint Vincen" + + "t en de GrenadinesVenezuelaBritse MaagdeneilandenAmerikaanse Maagdeneila" + + "ndenVietnamVanuatuWallis en FutunaSamoaKosovoJemenMayotteZuid-AfrikaZamb" + + "iaZimbabweonbekend gebiedwereldAfrikaNoord-AmerikaZuid-AmerikaOceaniëWes" + + "t-AfrikaMidden-AmerikaOost-AfrikaNoord-AfrikaCentraal-AfrikaZuidelijk Af" + + "rikaAmerikaNoordelijk AmerikaCaribisch gebiedOost-AziëZuid-AziëZuidoost-" + + "AziëZuid-EuropaAustralaziëMelanesiëMicronesische regioPolynesiëAziëCentr" + + "aal-AziëWest-AziëEuropaOost-EuropaNoord-EuropaWest-EuropaLatijns-Amerika" + +var nlRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002c, 0x0037, 0x0049, 0x0051, 0x0059, + 0x0061, 0x0067, 0x0071, 0x007c, 0x008c, 0x0096, 0x00a0, 0x00a5, + 0x00ab, 0x00b7, 0x00cd, 0x00d5, 0x00df, 0x00e6, 0x00f2, 0x00fb, + 0x0102, 0x0109, 0x010e, 0x011f, 0x0126, 0x012c, 0x0133, 0x0146, + 0x014f, 0x0159, 0x015f, 0x016b, 0x0173, 0x017a, 0x0180, 0x0186, + 0x0193, 0x01a1, 0x01be, 0x01cf, 0x01da, 0x01e3, 0x01ef, 0x01f4, + 0x01fc, 0x0201, 0x0209, 0x0213, 0x021d, 0x0221, 0x022c, 0x0234, + 0x0243, 0x0249, 0x0252, 0x025b, 0x0267, 0x026f, 0x0279, 0x0281, + // Entry 40 - 7F + 0x0297, 0x029f, 0x02af, 0x02b6, 0x02bd, 0x02c3, 0x02d4, 0x02db, + 0x02e1, 0x02ea, 0x02f7, 0x02f7, 0x02fe, 0x0302, 0x0312, 0x031c, + 0x0324, 0x032d, 0x0332, 0x0345, 0x034c, 0x0354, 0x0360, 0x0368, + 0x036d, 0x0376, 0x037f, 0x0385, 0x038b, 0x0395, 0x03a7, 0x03b2, + 0x03dd, 0x03e6, 0x03ea, 0x03f7, 0x03fd, 0x0413, 0x042c, 0x0434, + 0x043c, 0x0442, 0x044b, 0x045e, 0x0468, 0x046f, 0x0476, 0x0481, + 0x0486, 0x04ab, 0x04af, 0x04b3, 0x04ba, 0x04c1, 0x04c7, 0x04ce, + 0x04d7, 0x04dc, 0x04e1, 0x04ea, 0x04f2, 0x04fa, 0x0501, 0x0515, + // Entry 80 - BF + 0x0520, 0x052a, 0x0531, 0x0540, 0x054a, 0x054e, 0x0555, 0x0560, + 0x056d, 0x0576, 0x057d, 0x0584, 0x058c, 0x0595, 0x059c, 0x05a2, + 0x05a9, 0x05af, 0x05b8, 0x05c2, 0x05ce, 0x05d8, 0x05e8, 0x05f2, + 0x05f6, 0x0605, 0x060e, 0x0621, 0x0635, 0x063f, 0x064a, 0x0654, + 0x0659, 0x0662, 0x066a, 0x0670, 0x0676, 0x067f, 0x0689, 0x0691, + 0x06a1, 0x06a6, 0x06ad, 0x06b4, 0x06bd, 0x06c6, 0x06cf, 0x06d4, + 0x06d9, 0x06dd, 0x06ea, 0x06ee, 0x06f4, 0x06f8, 0x0708, 0x071b, + 0x0725, 0x072d, 0x0732, 0x074a, 0x075a, 0x0765, 0x0779, 0x0781, + // Entry C0 - FF + 0x0786, 0x078e, 0x0793, 0x07a2, 0x07aa, 0x07b3, 0x07ba, 0x07c1, + 0x07c7, 0x07d5, 0x07e5, 0x07ef, 0x07f5, 0x07fb, 0x0804, 0x080f, + 0x0818, 0x0830, 0x0839, 0x0845, 0x084f, 0x0856, 0x085e, 0x0866, + 0x0871, 0x0886, 0x0891, 0x089d, 0x08a3, 0x08ac, 0x08bc, 0x08d4, + 0x08da, 0x090a, 0x090e, 0x0916, 0x0922, 0x0929, 0x0933, 0x093f, + 0x0947, 0x094c, 0x0953, 0x0965, 0x096b, 0x0971, 0x0979, 0x0982, + 0x0989, 0x09ba, 0x09ca, 0x09da, 0x09e1, 0x09ec, 0x09f8, 0x0a16, + 0x0a1f, 0x0a35, 0x0a50, 0x0a57, 0x0a5e, 0x0a6e, 0x0a73, 0x0a79, + // Entry 100 - 13F + 0x0a7e, 0x0a85, 0x0a90, 0x0a96, 0x0a9e, 0x0aad, 0x0ab3, 0x0ab9, + 0x0ac6, 0x0ad2, 0x0ada, 0x0ae5, 0x0af3, 0x0afe, 0x0b0a, 0x0b19, + 0x0b29, 0x0b30, 0x0b42, 0x0b52, 0x0b5c, 0x0b66, 0x0b74, 0x0b7f, + 0x0b8b, 0x0b95, 0x0ba8, 0x0bb2, 0x0bb7, 0x0bc5, 0x0bcf, 0x0bd5, + 0x0be0, 0x0bec, 0x0bf7, 0x0c06, +} // Size: 608 bytes + +const noRegionStr string = "" + // Size: 2830 bytes + "AscensionAndorraDe forente arabiske emiraterAfghanistanAntigua og Barbud" + + "aAnguillaAlbaniaArmeniaAngolaAntarktisArgentinaAmerikansk SamoaØsterrike" + + "AustraliaArubaÅlandAserbajdsjanBosnia-HercegovinaBarbadosBangladeshBelgi" + + "aBurkina FasoBulgariaBahrainBurundiBeninSaint-BarthélemyBermudaBruneiBol" + + "iviaKaribisk NederlandBrasilBahamasBhutanBouvetøyaBotswanaHviterusslandB" + + "elizeCanadaKokosøyeneKongo-KinshasaDen sentralafrikanske republikkKongo-" + + "BrazzavilleSveitsElfenbenskystenCookøyeneChileKamerunKinaColombiaClipper" + + "tonøyaCosta RicaCubaKapp VerdeCuraçaoChristmasøyaKyprosDen tsjekkiske re" + + "publikkTysklandDiego GarciaDjiboutiDanmarkDominicaDen dominikanske repub" + + "likkAlgerieCeuta og MelillaEcuadorEstlandEgyptVest-SaharaEritreaSpaniaEt" + + "iopiaEUFinlandFijiFalklandsøyeneMikronesiaføderasjonenFærøyeneFrankrikeG" + + "abonStorbritanniaGrenadaGeorgiaFransk GuyanaGuernseyGhanaGibraltarGrønla" + + "ndGambiaGuineaGuadeloupeEkvatorial-GuineaHellasSør-Georgia og Sør-Sandwi" + + "chøyeneGuatemalaGuamGuinea-BissauGuyanaHongkong S.A.R. KinaHeard- og McD" + + "onaldøyeneHondurasKroatiaHaitiUngarnKanariøyeneIndonesiaIrlandIsraelManI" + + "ndiaDet britiske territoriet i IndiahavetIrakIranIslandItaliaJerseyJamai" + + "caJordanJapanKenyaKirgisistanKambodsjaKiribatiKomoreneSaint Kitts og Nev" + + "isNord-KoreaSør-KoreaKuwaitCaymanøyeneKasakhstanLaosLibanonSt. LuciaLiec" + + "htensteinSri LankaLiberiaLesothoLitauenLuxemburgLatviaLibyaMarokkoMonaco" + + "MoldovaMontenegroSaint-MartinMadagaskarMarshalløyeneMakedoniaMaliMyanmar" + + " (Burma)MongoliaMacao S.A.R. KinaNord-MarianeneMartiniqueMauritaniaMonts" + + "erratMaltaMauritiusMaldiveneMalawiMexicoMalaysiaMosambikNamibiaNy-Caledo" + + "niaNigerNorfolkøyaNigeriaNicaraguaNederlandNorgeNepalNauruNiueNew Zealan" + + "dOmanPanamaPeruFransk PolynesiaPapua Ny-GuineaFilippinenePakistanPolenSt" + + ". Pierre og MiquelonPitcairnPuerto RicoDet palestinske områdetPortugalPa" + + "lauParaguayQatarYtre OseaniaRéunionRomaniaSerbiaRusslandRwandaSaudi-Arab" + + "iaSalomonøyeneSeychelleneSudanSverigeSingaporeSt. HelenaSloveniaSvalbard" + + " og Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinamSør-Suda" + + "nSão Tomé og PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da Cun" + + "haTurks- og CaicosøyeneTsjadDe franske sørterritorierTogoThailandTadsjik" + + "istanTokelauØst-TimorTurkmenistanTunisiaTongaTyrkiaTrinidad og TobagoTuv" + + "aluTaiwanTanzaniaUkrainaUgandaUSAs ytre øyerFNUSAUruguayUsbekistanVatika" + + "nstatenSt. Vincent og GrenadineneVenezuelaDe britiske jomfruøyeneDe amer" + + "ikanske jomfruøyeneVietnamVanuatuWallis og FutunaSamoaKosovoJemenMayotte" + + "Sør-AfrikaZambiaZimbabweukjent områdeverdenAfrikaNord-AmerikaSør-Amerika" + + "OseaniaVest-AfrikaMellom-AmerikaØst-AfrikaNord-AfrikaSentral-AfrikaSørli" + + "ge AfrikaAmerikaNordlige AmerikaKaribiaØst-AsiaSør-AsiaSørøst-AsiaSør-Eu" + + "ropaAustralasiaMelanesiaMikronesiaPolynesiaAsiaSentral-AsiaVest-AsiaEuro" + + "paØst-EuropaNord-EuropaVest-EuropaLatin-Amerika" + +var noRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002c, 0x0037, 0x0049, 0x0051, 0x0058, + 0x005f, 0x0065, 0x006e, 0x0077, 0x0087, 0x0091, 0x009a, 0x009f, + 0x00a5, 0x00b1, 0x00c3, 0x00cb, 0x00d5, 0x00db, 0x00e7, 0x00ef, + 0x00f6, 0x00fd, 0x0102, 0x0113, 0x011a, 0x0120, 0x0127, 0x0139, + 0x013f, 0x0146, 0x014c, 0x0156, 0x015e, 0x016b, 0x0171, 0x0177, + 0x0182, 0x0190, 0x01af, 0x01c0, 0x01c6, 0x01d5, 0x01df, 0x01e4, + 0x01eb, 0x01ef, 0x01f7, 0x0205, 0x020f, 0x0213, 0x021d, 0x0225, + 0x0232, 0x0238, 0x0250, 0x0258, 0x0264, 0x026c, 0x0273, 0x027b, + // Entry 40 - 7F + 0x0295, 0x029c, 0x02ac, 0x02b3, 0x02ba, 0x02bf, 0x02ca, 0x02d1, + 0x02d7, 0x02de, 0x02e0, 0x02e0, 0x02e7, 0x02eb, 0x02fa, 0x0311, + 0x031b, 0x0324, 0x0329, 0x0336, 0x033d, 0x0344, 0x0351, 0x0359, + 0x035e, 0x0367, 0x0370, 0x0376, 0x037c, 0x0386, 0x0397, 0x039d, + 0x03c0, 0x03c9, 0x03cd, 0x03da, 0x03e0, 0x03f4, 0x040c, 0x0414, + 0x041b, 0x0420, 0x0426, 0x0432, 0x043b, 0x0441, 0x0447, 0x044a, + 0x044f, 0x0474, 0x0478, 0x047c, 0x0482, 0x0488, 0x048e, 0x0495, + 0x049b, 0x04a0, 0x04a5, 0x04b0, 0x04b9, 0x04c1, 0x04c9, 0x04dd, + // Entry 80 - BF + 0x04e7, 0x04f1, 0x04f7, 0x0503, 0x050d, 0x0511, 0x0518, 0x0521, + 0x052e, 0x0537, 0x053e, 0x0545, 0x054c, 0x0555, 0x055b, 0x0560, + 0x0567, 0x056d, 0x0574, 0x057e, 0x058a, 0x0594, 0x05a2, 0x05ab, + 0x05af, 0x05be, 0x05c6, 0x05d7, 0x05e5, 0x05ef, 0x05f9, 0x0603, + 0x0608, 0x0611, 0x061a, 0x0620, 0x0626, 0x062e, 0x0636, 0x063d, + 0x0649, 0x064e, 0x0659, 0x0660, 0x0669, 0x0672, 0x0677, 0x067c, + 0x0681, 0x0685, 0x0690, 0x0694, 0x069a, 0x069e, 0x06ae, 0x06bd, + 0x06c8, 0x06d0, 0x06d5, 0x06eb, 0x06f3, 0x06fe, 0x0716, 0x071e, + // Entry C0 - FF + 0x0723, 0x072b, 0x0730, 0x073c, 0x0744, 0x074b, 0x0751, 0x0759, + 0x075f, 0x076b, 0x0778, 0x0783, 0x0788, 0x078f, 0x0798, 0x07a2, + 0x07aa, 0x07bf, 0x07c7, 0x07d3, 0x07dd, 0x07e4, 0x07eb, 0x07f2, + 0x07fc, 0x0813, 0x081e, 0x082a, 0x082f, 0x0838, 0x0848, 0x085e, + 0x0863, 0x087d, 0x0881, 0x0889, 0x0895, 0x089c, 0x08a6, 0x08b2, + 0x08b9, 0x08be, 0x08c4, 0x08d6, 0x08dc, 0x08e2, 0x08ea, 0x08f1, + 0x08f7, 0x0906, 0x0908, 0x090b, 0x0912, 0x091c, 0x0929, 0x0943, + 0x094c, 0x0964, 0x097f, 0x0986, 0x098d, 0x099d, 0x09a2, 0x09a8, + // Entry 100 - 13F + 0x09ad, 0x09b4, 0x09bf, 0x09c5, 0x09cd, 0x09db, 0x09e1, 0x09e7, + 0x09f3, 0x09ff, 0x0a06, 0x0a11, 0x0a1f, 0x0a2a, 0x0a35, 0x0a43, + 0x0a52, 0x0a59, 0x0a69, 0x0a70, 0x0a79, 0x0a82, 0x0a8f, 0x0a9a, + 0x0aa5, 0x0aae, 0x0ab8, 0x0ac1, 0x0ac5, 0x0ad1, 0x0ada, 0x0ae0, + 0x0aeb, 0x0af6, 0x0b01, 0x0b0e, +} // Size: 608 bytes + +const paRegionStr string = "" + // Size: 7713 bytes + "ਅਸੈਂਸ਼ਨ ਟਾਪੂਅੰਡੋਰਾਸੰਯੁਕਤ ਅਰਬ ਅਮੀਰਾਤਅਫ਼ਗਾਨਿਸਤਾਨਐਂਟੀਗੁਆ ਅਤੇ ਬਾਰਬੁਡਾਅੰਗੁਇਲਾ" + + "ਅਲਬਾਨੀਆਅਰਮੀਨੀਆਅੰਗੋਲਾਅੰਟਾਰਕਟਿਕਾਅਰਜਨਟੀਨਾਅਮੈਰੀਕਨ ਸਮੋਆਆਸਟਰੀਆਆਸਟ੍ਰੇਲੀਆਅਰੂਬਾ" + + "ਅਲੈਂਡ ਟਾਪੂਅਜ਼ਰਬਾਈਜਾਨਬੋਸਨੀਆ ਅਤੇ ਹਰਜ਼ੇਗੋਵੀਨਾਬਾਰਬਾਡੋਸਬੰਗਲਾਦੇਸ਼ਬੈਲਜੀਅਮਬੁਰਕ" + + "ੀਨਾ ਫ਼ਾਸੋਬੁਲਗਾਰੀਆਬਹਿਰੀਨਬੁਰੁੰਡੀਬੇਨਿਨਸੇਂਟ ਬਾਰਥੇਲੇਮੀਬਰਮੂਡਾਬਰੂਨੇਈਬੋਲੀਵੀਆਕੈ" + + "ਰੇਬੀਆਈ ਨੀਦਰਲੈਂਡਬ੍ਰਾਜ਼ੀਲਬਹਾਮਾਸਭੂਟਾਨਬੌਵੇਟ ਟਾਪੂਬੋਤਸਵਾਨਾਬੇਲਾਰੂਸਬੇਲੀਜ਼ਕੈਨੇਡ" + + "ਾਕੋਕੋਸ (ਕੀਲਿੰਗ) ਟਾਪੂਕਾਂਗੋ - ਕਿੰਸ਼ਾਸਾਕੇਂਦਰੀ ਅਫ਼ਰੀਕੀ ਗਣਰਾਜਕਾਂਗੋ - ਬ੍ਰਾਜ਼" + + "ਾਵਿਲੇਸਵਿਟਜ਼ਰਲੈਂਡਕੋਟ ਡੀਵੋਆਰਕੁੱਕ ਟਾਪੂਚਿਲੀਕੈਮਰੂਨਚੀਨਕੋਲੰਬੀਆਕਲਿੱਪਰਟਨ ਟਾਪੂਕੋ" + + "ਸਟਾ ਰੀਕਾਕਿਊਬਾਕੇਪ ਵਰਡੇਕੁਰਾਕਾਓਕ੍ਰਿਸਮਿਸ ਟਾਪੂਸਾਇਪ੍ਰਸਚੈੱਕ ਗਣਰਾਜਜਰਮਨੀਡੀਇਗੋ ਗ" + + "ਾਰਸੀਆਜ਼ੀਬੂਤੀਡੈਨਮਾਰਕਡੋਮੀਨਿਕਾਡੋਮੀਨਿਕਾਈ ਗਣਰਾਜਅਲਜੀਰੀਆਸਿਓਟਾ ਅਤੇ ਮੇਲਿੱਲਾਇਕਵੇ" + + "ਡੋਰਇਸਟੋਨੀਆਮਿਸਰਪੱਛਮੀ ਸਹਾਰਾਇਰੀਟ੍ਰਿਆਸਪੇਨਇਥੋਪੀਆਯੂਰਪੀ ਸੰਘਫਿਨਲੈਂਡਫ਼ਿਜੀਫ਼ਾਕਲੈ" + + "ਂਡ ਟਾਪੂਮਾਇਕ੍ਰੋਨੇਸ਼ੀਆਫੈਰੋ ਟਾਪੂਫ਼ਰਾਂਸਗਬੋਨਯੂਨਾਈਟਡ ਕਿੰਗਡਮਗ੍ਰੇਨਾਡਾਜਾਰਜੀਆਫਰੈ" + + "ਂਚ ਗੁਇਆਨਾਗਰਨਜੀਘਾਨਾਜਿਬਰਾਲਟਰਗ੍ਰੀਨਲੈਂਡਗੈਂਬੀਆਗਿਨੀਗੁਆਡੇਲੋਪਭੂ-ਖੰਡੀ ਗਿਨੀਗ੍ਰੀਸ" + + "ਦੱਖਣੀ ਜਾਰਜੀਆ ਅਤੇ ਦੱਖਣੀ ਸੈਂਡਵਿਚ ਟਾਪੂਗੁਆਟੇਮਾਲਾਗੁਆਮਗਿਨੀ-ਬਿਸਾਉਗੁਯਾਨਾਹਾਂਗ ਕ" + + "ਾਂਗ ਐਸਏਆਰ ਚੀਨਹਰਡ ਤੇ ਮੈਕਡੋਨਾਲਡ ਟਾਪੂਹੋਂਡੁਰਸਕਰੋਏਸ਼ੀਆਹੈਤੀਹੰਗਰੀਕੇਨਾਰੀ ਟਾਪੂਇ" + + "ੰਡੋਨੇਸ਼ੀਆਆਇਰਲੈਂਡਇਜ਼ਰਾਈਲਆਇਲ ਆਫ ਮੈਨਭਾਰਤਬਰਤਾਨਵੀ ਹਿੰਦ ਮਹਾਂਸਾਗਰ ਖਿੱਤਾਇਰਾਕਈਰ" + + "ਾਨਆਈਸਲੈਂਡਇਟਲੀਜਰਸੀਜਮਾਇਕਾਜਾਰਡਨਜਪਾਨਕੀਨੀਆਕਿਰਗਿਜ਼ਸਤਾਨਕੰਬੋਡੀਆਕਿਰਬਾਤੀਕੋਮੋਰੋਸਸ" + + "ੇਂਟ ਕਿਟਸ ਐਂਡ ਨੇਵਿਸਉੱਤਰ ਕੋਰੀਆਦੱਖਣ ਕੋਰੀਆਕੁਵੈਤਕੇਮੈਨ ਟਾਪੂਕਜ਼ਾਖਸਤਾਨਲਾਓਸਲੈਬਨ" + + "ਾਨਸੇਂਟ ਲੂਸੀਆਲਿਚੇਂਸਟਾਇਨਸ੍ਰੀ ਲੰਕਾਲਾਈਬੀਰੀਆਲੇਸੋਥੋਲਿਥੁਆਨੀਆਲਕਜ਼ਮਬਰਗਲਾਤਵੀਆਲੀਬ" + + "ੀਆਮੋਰੱਕੋਮੋਨਾਕੋਮੋਲਡੋਵਾਮੋਂਟੇਨੇਗਰੋਸੇਂਟ ਮਾਰਟਿਨਮੈਡਾਗਾਸਕਰਮਾਰਸ਼ਲ ਟਾਪੂਮੈਕਡੋਨੀਆ" + + "ਮਾਲੀਮਿਆਂਮਾਰ (ਬਰਮਾ)ਮੰਗੋਲੀਆਮਕਾਉ ਐਸਏਆਰ ਚੀਨਉੱਤਰੀ ਮਾਰੀਆਨਾ ਟਾਪੂਮਾਰਟੀਨਿਕਮੋਰਿਟ" + + "ਾਨੀਆਮੋਂਟਸੇਰਾਤਮਾਲਟਾਮੌਰਿਸ਼ਸਮਾਲਦੀਵਮਲਾਵੀਮੈਕਸੀਕੋਮਲੇਸ਼ੀਆਮੋਜ਼ਾਮਬੀਕਨਾਮੀਬੀਆਨਿਊ " + + "ਕੈਲੇਡੋਨੀਆਨਾਈਜਰਨੋਰਫੌਕ ਟਾਪੂਨਾਈਜੀਰੀਆਨਿਕਾਰਾਗੁਆਨੀਦਰਲੈਂਡਨਾਰਵੇਨੇਪਾਲਨਾਉਰੂਨਿਯੂਨ" + + "ਿਊਜ਼ੀਲੈਂਡਓਮਾਨਪਨਾਮਾਪੇਰੂਫਰੈਂਚ ਪੋਲੀਨੇਸ਼ੀਆਪਾਪੂਆ ਨਿਊ ਗਿਨੀਫਿਲੀਪੀਨਜਪਾਕਿਸਤਾਨਪੋ" + + "ਲੈਂਡਸੇਂਟ ਪੀਅਰੇ ਐਂਡ ਮਿਕੇਲਨਪਿਟਕੇਰਨ ਟਾਪੂਪਿਊਰਟੋ ਰਿਕੋਫਿਲੀਸਤੀਨੀ ਇਲਾਕਾਪੁਰਤਗਾਲ" + + "ਪਲਾਉਪੈਰਾਗਵੇਕਤਰਆਊਟਲਾਇੰਗ ਓਸ਼ੀਨੀਆਰਿਯੂਨੀਅਨਰੋਮਾਨੀਆਸਰਬੀਆਰੂਸਰਵਾਂਡਾਸਾਊਦੀ ਅਰਬਸੋ" + + "ਲੋਮਨ ਟਾਪੂਸੇਸ਼ਲਸਸੂਡਾਨਸਵੀਡਨਸਿੰਗਾਪੁਰਸੇਂਟ ਹੇਲੇਨਾਸਲੋਵੇਨੀਆਸਵਾਲਬਰਡ ਅਤੇ ਜਾਨ ਮਾ" + + "ਯੇਨਸਲੋਵਾਕੀਆਸਿਏਰਾ ਲਿਓਨਸੈਨ ਮਰੀਨੋਸੇਨੇਗਲਸੋਮਾਲੀਆਸੂਰੀਨਾਮਦੱਖਣ ਸੁਡਾਨਸਾਓ ਟੋਮ ਅਤ" + + "ੇ ਪ੍ਰਿੰਸੀਪੇਅਲ ਸਲਵਾਡੋਰਸਿੰਟ ਮਾਰਟੀਨਸੀਰੀਆਸਵਾਜ਼ੀਲੈਂਡਟ੍ਰਿਸਟਾਨ ਦਾ ਕੁੰਹਾਟੁਰਕਸ " + + "ਅਤੇ ਕੈਕੋਸ ਟਾਪੂਚਾਡਫਰੈਂਚ ਦੱਖਣੀ ਪ੍ਰਦੇਸ਼ਟੋਗੋਥਾਈਲੈਂਡਤਾਜਿਕਿਸਤਾਨਟੋਕੇਲਾਉਤਿਮੋਰ-" + + "ਲੇਸਤੇਤੁਰਕਮੇਨਿਸਤਾਨਟਿਊਨੀਸ਼ੀਆਟੌਂਗਾਤੁਰਕੀਟ੍ਰਿਨੀਡਾਡ ਅਤੇ ਟੋਬਾਗੋਟੁਵਾਲੂਤਾਇਵਾਨਤਨ" + + "ਜ਼ਾਨੀਆਯੂਕਰੇਨਯੂਗਾਂਡਾਯੂ.ਐੱਸ. ਦੂਰ-ਦੁਰਾਡੇ ਟਾਪੂਸੰਯੁਕਤ ਰਾਸ਼ਟਰਸੰਯੁਕਤ ਰਾਜਉਰੂਗਵ" + + "ੇਉਜ਼ਬੇਕਿਸਤਾਨਵੈਟੀਕਨ ਸਿਟੀਸੇਂਟ ਵਿਨਸੈਂਟ ਐਂਡ ਗ੍ਰੇਨਾਡੀਨਸਵੇਨੇਜ਼ੂਏਲਾਬ੍ਰਿਟਿਸ਼ ਵ" + + "ਰਜਿਨ ਟਾਪੂਯੂ ਐੱਸ ਵਰਜਿਨ ਟਾਪੂਵੀਅਤਨਾਮਵਾਨੂਆਟੂਵਾਲਿਸ ਅਤੇ ਫੂਟੂਨਾਸਾਮੋਆਕੋਸੋਵੋਯਮਨ" + + "ਮਾਯੋਟੀਦੱਖਣ ਅਫਰੀਕਾਜ਼ਾਮਬੀਆਜ਼ਿੰਬਾਬਵੇਅਣਪਛਾਤਾ ਇਲਾਕਾਸੰਸਾਰਅਫ਼ਰੀਕਾਉੱਤਰ ਅਮਰੀਕਾਦ" + + "ੱਖਣ ਅਮਰੀਕਾਓਸ਼ੇਨੀਆਪੱਛਮੀ ਅਫ਼ਰੀਕਾਕੇਂਦਰੀ ਅਮਰੀਕਾਪੂਰਬੀ ਅਫ਼ਰੀਕਾਉੱਤਰੀ ਅਫ਼ਰੀਕਾਮ" + + "ੱਧ ਅਫ਼ਰੀਕਾਦੱਖਣੀ ਅਫ਼ਰੀਕਾਅਮਰੀਕਾਉੱਤਰੀ ਅਮਰੀਕਾਕੈਰੇਬੀਆਈਪੂਰਬੀ ਏਸ਼ੀਆਦੱਖਣੀ ਏਸ਼ੀ" + + "ਆਦੱਖਣ-ਪੂਰਬੀ ਏਸ਼ੀਆਦੱਖਣੀ ਯੂਰਪਆਸਟਰੇਲੇਸ਼ੀਆਮੇਲਾਨੇਸ਼ੀਆਮਾਇਕ੍ਰੋਨੇਸ਼ੀਆਈ ਇਲਾਕਾਪੋ" + + "ਲੀਨੇਸ਼ੀਆਏਸ਼ੀਆਕੇਂਦਰੀ ਏਸ਼ੀਆਪੱਛਮੀ ਏਸ਼ੀਆਯੂਰਪਪੂਰਬੀ ਯੂਰਪਉੱਤਰੀ ਯੂਰਪਪੱਛਮੀ ਯੂਰਪ" + + "ਲਾਤੀਨੀ ਅਮਰੀਕਾ" + +var paRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0022, 0x0034, 0x0063, 0x0084, 0x00b9, 0x00ce, 0x00e3, + 0x00f8, 0x010a, 0x0128, 0x0140, 0x0162, 0x0174, 0x018f, 0x019e, + 0x01ba, 0x01d8, 0x0216, 0x022e, 0x0249, 0x025e, 0x0283, 0x029b, + 0x02ad, 0x02c2, 0x02d1, 0x02f9, 0x030b, 0x031d, 0x0332, 0x0363, + 0x037b, 0x038d, 0x039c, 0x03b8, 0x03d0, 0x03e5, 0x03f7, 0x0409, + 0x043a, 0x0464, 0x049c, 0x04cf, 0x04f0, 0x050c, 0x0525, 0x0531, + 0x0543, 0x054c, 0x0561, 0x0586, 0x05a2, 0x05b1, 0x05c7, 0x05dc, + 0x0601, 0x0616, 0x0632, 0x0641, 0x0663, 0x0678, 0x068d, 0x06a5, + // Entry 40 - 7F + 0x06d0, 0x06e5, 0x0714, 0x0729, 0x073e, 0x074a, 0x0769, 0x0781, + 0x078d, 0x079f, 0x07b8, 0x07b8, 0x07cd, 0x07dc, 0x0801, 0x0828, + 0x0841, 0x0853, 0x085f, 0x0887, 0x089f, 0x08b1, 0x08d3, 0x08e2, + 0x08ee, 0x0906, 0x0921, 0x0933, 0x093f, 0x0957, 0x0977, 0x0986, + 0x09e5, 0x0a00, 0x0a0c, 0x0a28, 0x0a3a, 0x0a6d, 0x0aa6, 0x0abb, + 0x0ad3, 0x0adf, 0x0aee, 0x0b0d, 0x0b2b, 0x0b40, 0x0b55, 0x0b6f, + 0x0b7b, 0x0bc6, 0x0bd2, 0x0bde, 0x0bf3, 0x0bff, 0x0c0b, 0x0c1d, + 0x0c2c, 0x0c38, 0x0c47, 0x0c68, 0x0c7d, 0x0c92, 0x0ca7, 0x0cda, + // Entry 80 - BF + 0x0cf6, 0x0d12, 0x0d21, 0x0d3d, 0x0d58, 0x0d64, 0x0d76, 0x0d92, + 0x0db0, 0x0dc9, 0x0de1, 0x0df3, 0x0e0b, 0x0e23, 0x0e35, 0x0e44, + 0x0e56, 0x0e68, 0x0e7d, 0x0e9b, 0x0eba, 0x0ed5, 0x0ef4, 0x0f0c, + 0x0f18, 0x0f3c, 0x0f51, 0x0f77, 0x0fa9, 0x0fc1, 0x0fdc, 0x0ff7, + 0x1006, 0x101b, 0x102d, 0x103c, 0x1051, 0x1066, 0x1081, 0x1096, + 0x10bb, 0x10ca, 0x10e9, 0x1101, 0x111c, 0x1134, 0x1143, 0x1152, + 0x1161, 0x116d, 0x118b, 0x1197, 0x11a6, 0x11b2, 0x11e0, 0x1206, + 0x121e, 0x1236, 0x1248, 0x1281, 0x12a3, 0x12c2, 0x12ed, 0x1302, + // Entry C0 - FF + 0x130e, 0x1323, 0x132c, 0x135a, 0x1372, 0x1387, 0x1396, 0x139f, + 0x13b1, 0x13ca, 0x13e9, 0x13fb, 0x140a, 0x1419, 0x1431, 0x1450, + 0x1468, 0x14a1, 0x14b9, 0x14d5, 0x14ee, 0x1500, 0x1515, 0x152a, + 0x1546, 0x157f, 0x159b, 0x15ba, 0x15c9, 0x15e7, 0x1616, 0x164c, + 0x1655, 0x168a, 0x1696, 0x16ab, 0x16c9, 0x16de, 0x16fd, 0x1721, + 0x173c, 0x174b, 0x175a, 0x1792, 0x17a4, 0x17b6, 0x17ce, 0x17e0, + 0x17f5, 0x1830, 0x1855, 0x1871, 0x1883, 0x18a4, 0x18c3, 0x190e, + 0x192c, 0x1961, 0x198e, 0x19a3, 0x19b8, 0x19e4, 0x19f3, 0x1a05, + // Entry 100 - 13F + 0x1a0e, 0x1a20, 0x1a3f, 0x1a54, 0x1a6f, 0x1a94, 0x1aa3, 0x1ab8, + 0x1ad7, 0x1af6, 0x1b0b, 0x1b30, 0x1b55, 0x1b7a, 0x1b9f, 0x1bbe, + 0x1be3, 0x1bf5, 0x1c17, 0x1c2f, 0x1c4e, 0x1c6d, 0x1c99, 0x1cb5, + 0x1cd6, 0x1cf4, 0x1d2e, 0x1d4c, 0x1d5b, 0x1d7d, 0x1d9c, 0x1da8, + 0x1dc4, 0x1de0, 0x1dfc, 0x1e21, +} // Size: 608 bytes + +const plRegionStr string = "" + // Size: 3165 bytes + "Wyspa WniebowstąpieniaAndoraZjednoczone Emiraty ArabskieAfganistanAntigu" + + "a i BarbudaAnguillaAlbaniaArmeniaAngolaAntarktykaArgentynaSamoa Amerykań" + + "skieAustriaAustraliaArubaWyspy AlandzkieAzerbejdżanBośnia i HercegowinaB" + + "arbadosBangladeszBelgiaBurkina FasoBułgariaBahrajnBurundiBeninSaint-Bart" + + "hélemyBermudyBruneiBoliwiaNiderlandy KaraibskieBrazyliaBahamyBhutanWyspa" + + " BouvetaBotswanaBiałoruśBelizeKanadaWyspy KokosoweDemokratyczna Republik" + + "a KongaRepublika ŚrodkowoafrykańskaKongoSzwajcariaCôte d’IvoireWyspy Coo" + + "kaChileKamerunChinyKolumbiaClippertonKostarykaKubaRepublika Zielonego Pr" + + "zylądkaCuraçaoWyspa Bożego NarodzeniaCyprCzechyNiemcyDiego GarciaDżibuti" + + "DaniaDominikaDominikanaAlgieriaCeuta i MelillaEkwadorEstoniaEgiptSahara " + + "ZachodniaErytreaHiszpaniaEtiopiaUnia EuropejskaFinlandiaFidżiFalklandyMi" + + "kronezjaWyspy OwczeFrancjaGabonWielka BrytaniaGrenadaGruzjaGujana Francu" + + "skaGuernseyGhanaGibraltarGrenlandiaGambiaGwineaGwadelupaGwinea Równikowa" + + "GrecjaGeorgia Południowa i Sandwich PołudniowyGwatemalaGuamGwinea Bissau" + + "GujanaSRA Hongkong (Chiny)Wyspy Heard i McDonaldaHondurasChorwacjaHaitiW" + + "ęgryWyspy KanaryjskieIndonezjaIrlandiaIzraelWyspa ManIndieBrytyjskie Te" + + "rytorium Oceanu IndyjskiegoIrakIranIslandiaWłochyJerseyJamajkaJordaniaJa" + + "poniaKeniaKirgistanKambodżaKiribatiKomorySaint Kitts i NevisKorea Północ" + + "naKorea PołudniowaKuwejtKajmanyKazachstanLaosLibanSaint LuciaLiechtenste" + + "inSri LankaLiberiaLesothoLitwaLuksemburgŁotwaLibiaMarokoMonakoMołdawiaCz" + + "arnogóraSaint-MartinMadagaskarWyspy MarshallaMacedoniaMaliMjanma (Birma)" + + "MongoliaSRA Makau (Chiny)Mariany PółnocneMartynikaMauretaniaMontserratMa" + + "ltaMauritiusMalediwyMalawiMeksykMalezjaMozambikNamibiaNowa KaledoniaNige" + + "rNorfolkNigeriaNikaraguaHolandiaNorwegiaNepalNauruNiueNowa ZelandiaOmanP" + + "anamaPeruPolinezja FrancuskaPapua-Nowa GwineaFilipinyPakistanPolskaSaint" + + "-Pierre i MiquelonPitcairnPortorykoTerytoria PalestyńskiePortugaliaPalau" + + "ParagwajKatarOceania inneReunionRumuniaSerbiaRosjaRwandaArabia Saudyjska" + + "Wyspy SalomonaSeszeleSudanSzwecjaSingapurWyspa Świętej HelenySłoweniaSva" + + "lbard i Jan MayenSłowacjaSierra LeoneSan MarinoSenegalSomaliaSurinamSuda" + + "n PołudniowyWyspy Świętego Tomasza i KsiążęcaSalwadorSint MaartenSyriaSu" + + "aziTristan da CunhaTurks i CaicosCzadFrancuskie Terytoria Południowe i A" + + "ntarktyczneTogoTajlandiaTadżykistanTokelauTimor WschodniTurkmenistanTune" + + "zjaTongaTurcjaTrynidad i TobagoTuvaluTajwanTanzaniaUkrainaUgandaDalekie " + + "Wyspy Mniejsze Stanów ZjednoczonychOrganizacja Narodów ZjednoczonychStan" + + "y ZjednoczoneUrugwajUzbekistanWatykanSaint Vincent i GrenadynyWenezuelaB" + + "rytyjskie Wyspy DziewiczeWyspy Dziewicze Stanów ZjednoczonychWietnamVanu" + + "atuWallis i FutunaSamoaKosowoJemenMajottaRepublika Południowej AfrykiZam" + + "biaZimbabweNieznany regionświatAfrykaAmeryka PółnocnaAmeryka PołudniowaO" + + "ceaniaAfryka ZachodniaAmeryka ŚrodkowaAfryka WschodniaAfryka PółnocnaAfr" + + "yka ŚrodkowaAfryka PołudniowaAmerykaAmeryka Północna (USA, Kanada)Karaib" + + "yAzja WschodniaAzja PołudniowaAzja Południowo-WschodniaEuropa Południowa" + + "AustralazjaMelanezjaRegion MikronezjiPolinezjaAzjaAzja ŚrodkowaAzja Zach" + + "odniaEuropaEuropa WschodniaEuropa PółnocnaEuropa ZachodniaAmeryka Łacińs" + + "ka" + +var plRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0017, 0x001d, 0x0039, 0x0043, 0x0054, 0x005c, 0x0063, + 0x006a, 0x0070, 0x007a, 0x0083, 0x0096, 0x009d, 0x00a6, 0x00ab, + 0x00ba, 0x00c6, 0x00db, 0x00e3, 0x00ed, 0x00f3, 0x00ff, 0x0108, + 0x010f, 0x0116, 0x011b, 0x012c, 0x0133, 0x0139, 0x0140, 0x0155, + 0x015d, 0x0163, 0x0169, 0x0176, 0x017e, 0x0188, 0x018e, 0x0194, + 0x01a2, 0x01bf, 0x01dd, 0x01e2, 0x01ec, 0x01fc, 0x0207, 0x020c, + 0x0213, 0x0218, 0x0220, 0x022a, 0x0233, 0x0237, 0x0255, 0x025d, + 0x0275, 0x0279, 0x027f, 0x0285, 0x0291, 0x0299, 0x029e, 0x02a6, + // Entry 40 - 7F + 0x02b0, 0x02b8, 0x02c7, 0x02ce, 0x02d5, 0x02da, 0x02ea, 0x02f1, + 0x02fa, 0x0301, 0x0310, 0x0310, 0x0319, 0x031f, 0x0328, 0x0332, + 0x033d, 0x0344, 0x0349, 0x0358, 0x035f, 0x0365, 0x0375, 0x037d, + 0x0382, 0x038b, 0x0395, 0x039b, 0x03a1, 0x03aa, 0x03bb, 0x03c1, + 0x03eb, 0x03f4, 0x03f8, 0x0405, 0x040b, 0x041f, 0x0436, 0x043e, + 0x0447, 0x044c, 0x0452, 0x0463, 0x046c, 0x0474, 0x047a, 0x0483, + 0x0488, 0x04b0, 0x04b4, 0x04b8, 0x04c0, 0x04c7, 0x04cd, 0x04d4, + 0x04dc, 0x04e3, 0x04e8, 0x04f1, 0x04fa, 0x0502, 0x0508, 0x051b, + // Entry 80 - BF + 0x052b, 0x053c, 0x0542, 0x0549, 0x0553, 0x0557, 0x055c, 0x0567, + 0x0574, 0x057d, 0x0584, 0x058b, 0x0590, 0x059a, 0x05a0, 0x05a5, + 0x05ab, 0x05b1, 0x05ba, 0x05c5, 0x05d1, 0x05db, 0x05ea, 0x05f3, + 0x05f7, 0x0605, 0x060d, 0x061e, 0x0630, 0x0639, 0x0643, 0x064d, + 0x0652, 0x065b, 0x0663, 0x0669, 0x066f, 0x0676, 0x067e, 0x0685, + 0x0693, 0x0698, 0x069f, 0x06a6, 0x06af, 0x06b7, 0x06bf, 0x06c4, + 0x06c9, 0x06cd, 0x06da, 0x06de, 0x06e4, 0x06e8, 0x06fb, 0x070c, + 0x0714, 0x071c, 0x0722, 0x0739, 0x0741, 0x074a, 0x0761, 0x076b, + // Entry C0 - FF + 0x0770, 0x0778, 0x077d, 0x0789, 0x0790, 0x0797, 0x079d, 0x07a2, + 0x07a8, 0x07b8, 0x07c6, 0x07cd, 0x07d2, 0x07d9, 0x07e1, 0x07f7, + 0x0800, 0x0814, 0x081d, 0x0829, 0x0833, 0x083a, 0x0841, 0x0848, + 0x0859, 0x087f, 0x0887, 0x0893, 0x0898, 0x089d, 0x08ad, 0x08bb, + 0x08bf, 0x08ee, 0x08f2, 0x08fb, 0x0907, 0x090e, 0x091c, 0x0928, + 0x092f, 0x0934, 0x093a, 0x094b, 0x0951, 0x0957, 0x095f, 0x0966, + 0x096c, 0x0998, 0x09ba, 0x09cb, 0x09d2, 0x09dc, 0x09e3, 0x09fc, + 0x0a05, 0x0a1f, 0x0a44, 0x0a4b, 0x0a52, 0x0a61, 0x0a66, 0x0a6c, + // Entry 100 - 13F + 0x0a71, 0x0a78, 0x0a95, 0x0a9b, 0x0aa3, 0x0ab2, 0x0ab8, 0x0abe, + 0x0ad0, 0x0ae3, 0x0aea, 0x0afa, 0x0b0b, 0x0b1b, 0x0b2c, 0x0b3c, + 0x0b4e, 0x0b55, 0x0b75, 0x0b7c, 0x0b8a, 0x0b9a, 0x0bb4, 0x0bc6, + 0x0bd1, 0x0bda, 0x0beb, 0x0bf4, 0x0bf8, 0x0c06, 0x0c14, 0x0c1a, + 0x0c2a, 0x0c3b, 0x0c4b, 0x0c5d, +} // Size: 608 bytes + +const ptRegionStr string = "" + // Size: 3182 bytes + "Ilha de AscensãoAndorraEmirados Árabes UnidosAfeganistãoAntígua e Barbud" + + "aAnguillaAlbâniaArmêniaAngolaAntártidaArgentinaSamoa AmericanaÁustriaAus" + + "tráliaArubaIlhas ÅlandAzerbaijãoBósnia e HerzegovinaBarbadosBangladeshBé" + + "lgicaBurquina FasoBulgáriaBahreinBurundiBeninSão BartolomeuBermudasBrune" + + "iBolíviaPaíses Baixos CaribenhosBrasilBahamasButãoIlha BouvetBotsuanaBie" + + "lorrússiaBelizeCanadáIlhas Cocos (Keeling)Congo - KinshasaRepública Cent" + + "ro-AfricanaCongo - BrazzavilleSuíçaCosta do MarfimIlhas CookChileRepúbli" + + "ca dos CamarõesChinaColômbiaIlha de ClippertonCosta RicaCubaCabo VerdeCu" + + "raçaoIlha ChristmasChipreRepública TchecaAlemanhaDiego GarciaDjibutiDina" + + "marcaDominicaRepública DominicanaArgéliaCeuta e MelilhaEquadorEstôniaEgi" + + "toSaara OcidentalEritreiaEspanhaEtiópiaUnião EuropeiaFinlândiaFijiIlhas " + + "MalvinasMicronésiaIlhas FaroeFrançaGabãoReino UnidoGranadaGeórgiaGuiana " + + "FrancesaGuernseyGanaGibraltarGroenlândiaGâmbiaGuinéGuadalupeGuiné Equato" + + "rialGréciaIlhas Geórgia do Sul e Sandwich do SulGuatemalaGuamGuiné-Bissa" + + "uGuianaHong Kong, RAE da ChinaIlhas Heard e McDonaldHondurasCroáciaHaiti" + + "HungriaIlhas CanáriasIndonésiaIrlandaIsraelIlha de ManÍndiaTerritório Br" + + "itânico do Oceano ÍndicoIraqueIrãIslândiaItáliaJerseyJamaicaJordâniaJapã" + + "oQuêniaQuirguistãoCambojaQuiribatiComoresSão Cristóvão e NevisCoreia do " + + "NorteCoreia do SulKuwaitIlhas CaymanCazaquistãoLaosLíbanoSanta LúciaLiec" + + "htensteinSri LankaLibériaLesotoLituâniaLuxemburgoLetôniaLíbiaMarrocosMôn" + + "acoMoldáviaMontenegroSão MartinhoMadagascarIlhas MarshallMacedôniaMaliMi" + + "anmar (Birmânia)MongóliaMacau, RAE da ChinaIlhas Marianas do NorteMartin" + + "icaMauritâniaMontserratMaltaMaurícioMaldivasMalawiMéxicoMalásiaMoçambiqu" + + "eNamíbiaNova CaledôniaNígerIlha NorfolkNigériaNicaráguaHolandaNoruegaNep" + + "alNauruNiueNova ZelândiaOmãPanamáPeruPolinésia FrancesaPapua-Nova GuinéF" + + "ilipinasPaquistãoPolôniaSaint Pierre e MiquelonIlhas PitcairnPorto RicoT" + + "erritórios palestinosPortugalPalauParaguaiCatarOceania RemotaReuniãoRomê" + + "niaSérviaRússiaRuandaArábia SauditaIlhas SalomãoSeichelesSudãoSuéciaCing" + + "apuraSanta HelenaEslovêniaSvalbard e Jan MayenEslováquiaSerra LeoaSan Ma" + + "rinoSenegalSomáliaSurinameSudão do SulSão Tomé e PríncipeEl SalvadorSint" + + " MaartenSíriaSuazilândiaTristão da CunhaIlhas Turks e CaicosChadeTerritó" + + "rios Franceses do SulTogoTailândiaTajiquistãoTokelauTimor-LesteTurcomeni" + + "stãoTunísiaTongaTurquiaTrinidad e TobagoTuvaluTaiwanTanzâniaUcrâniaUgand" + + "aIlhas Menores Distantes dos EUANações UnidasEstados UnidosUruguaiUzbequ" + + "istãoCidade do VaticanoSão Vicente e GranadinasVenezuelaIlhas Virgens Br" + + "itânicasIlhas Virgens dos EUAVietnãVanuatuWallis e FutunaSamoaKosovoIême" + + "nMayotteÁfrica do SulZâmbiaZimbábueRegião desconhecidaMundoÁfricaAmérica" + + " do NorteAmérica do SulOceaniaÁfrica OcidentalAmérica CentralÁfrica Orie" + + "ntalÁfrica do NorteÁfrica CentralÁfrica MeridionalAméricasAmérica Setent" + + "rionalCaribeÁsia OrientalÁsia MeridionalSudeste AsiáticoEuropa Meridiona" + + "lAustralásiaMelanésiaRegião da MicronésiaPolinésiaÁsiaÁsia CentralÁsia O" + + "cidentalEuropaEuropa OrientalEuropa SetentrionalEuropa OcidentalAmérica " + + "Latina" + +var ptRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0011, 0x0018, 0x002f, 0x003b, 0x004d, 0x0055, 0x005d, + 0x0065, 0x006b, 0x0075, 0x007e, 0x008d, 0x0095, 0x009f, 0x00a4, + 0x00b0, 0x00bb, 0x00d0, 0x00d8, 0x00e2, 0x00ea, 0x00f7, 0x0100, + 0x0107, 0x010e, 0x0113, 0x0122, 0x012a, 0x0130, 0x0138, 0x0151, + 0x0157, 0x015e, 0x0164, 0x016f, 0x0177, 0x0184, 0x018a, 0x0191, + 0x01a6, 0x01b6, 0x01d0, 0x01e3, 0x01ea, 0x01f9, 0x0203, 0x0208, + 0x0220, 0x0225, 0x022e, 0x0240, 0x024a, 0x024e, 0x0258, 0x0260, + 0x026e, 0x0274, 0x0285, 0x028d, 0x0299, 0x02a0, 0x02a9, 0x02b1, + // Entry 40 - 7F + 0x02c6, 0x02ce, 0x02dd, 0x02e4, 0x02ec, 0x02f1, 0x0300, 0x0308, + 0x030f, 0x0317, 0x0326, 0x0326, 0x0330, 0x0334, 0x0342, 0x034d, + 0x0358, 0x035f, 0x0365, 0x0370, 0x0377, 0x037f, 0x038e, 0x0396, + 0x039a, 0x03a3, 0x03af, 0x03b6, 0x03bc, 0x03c5, 0x03d6, 0x03dd, + 0x0404, 0x040d, 0x0411, 0x041e, 0x0424, 0x043b, 0x0451, 0x0459, + 0x0461, 0x0466, 0x046d, 0x047c, 0x0486, 0x048d, 0x0493, 0x049e, + 0x04a4, 0x04cc, 0x04d2, 0x04d6, 0x04df, 0x04e6, 0x04ec, 0x04f3, + 0x04fc, 0x0502, 0x0509, 0x0515, 0x051c, 0x0525, 0x052c, 0x0544, + // Entry 80 - BF + 0x0553, 0x0560, 0x0566, 0x0572, 0x057e, 0x0582, 0x0589, 0x0595, + 0x05a2, 0x05ab, 0x05b3, 0x05b9, 0x05c2, 0x05cc, 0x05d4, 0x05da, + 0x05e2, 0x05e9, 0x05f2, 0x05fc, 0x0609, 0x0613, 0x0621, 0x062b, + 0x062f, 0x0642, 0x064b, 0x065e, 0x0675, 0x067e, 0x0689, 0x0693, + 0x0698, 0x06a1, 0x06a9, 0x06af, 0x06b6, 0x06be, 0x06c9, 0x06d1, + 0x06e0, 0x06e6, 0x06f2, 0x06fa, 0x0704, 0x070b, 0x0712, 0x0717, + 0x071c, 0x0720, 0x072e, 0x0732, 0x0739, 0x073d, 0x0750, 0x0761, + 0x076a, 0x0774, 0x077c, 0x0793, 0x07a1, 0x07ab, 0x07c2, 0x07ca, + // Entry C0 - FF + 0x07cf, 0x07d7, 0x07dc, 0x07ea, 0x07f2, 0x07fa, 0x0801, 0x0808, + 0x080e, 0x081d, 0x082b, 0x0834, 0x083a, 0x0841, 0x084a, 0x0856, + 0x0860, 0x0874, 0x087f, 0x0889, 0x0893, 0x089a, 0x08a2, 0x08aa, + 0x08b7, 0x08cd, 0x08d8, 0x08e4, 0x08ea, 0x08f6, 0x0907, 0x091b, + 0x0920, 0x093d, 0x0941, 0x094b, 0x0957, 0x095e, 0x0969, 0x0977, + 0x097f, 0x0984, 0x098b, 0x099c, 0x09a2, 0x09a8, 0x09b1, 0x09b9, + 0x09bf, 0x09de, 0x09ed, 0x09fb, 0x0a02, 0x0a0e, 0x0a20, 0x0a39, + 0x0a42, 0x0a5b, 0x0a70, 0x0a77, 0x0a7e, 0x0a8d, 0x0a92, 0x0a98, + // Entry 100 - 13F + 0x0a9e, 0x0aa5, 0x0ab3, 0x0aba, 0x0ac3, 0x0ad7, 0x0adc, 0x0ae3, + 0x0af4, 0x0b03, 0x0b0a, 0x0b1b, 0x0b2b, 0x0b3b, 0x0b4b, 0x0b5a, + 0x0b6c, 0x0b75, 0x0b8a, 0x0b90, 0x0b9e, 0x0bae, 0x0bbf, 0x0bd0, + 0x0bdc, 0x0be6, 0x0bfc, 0x0c06, 0x0c0b, 0x0c18, 0x0c27, 0x0c2d, + 0x0c3c, 0x0c4f, 0x0c5f, 0x0c6e, +} // Size: 608 bytes + +const ptPTRegionStr string = "" + // Size: 718 bytes + "AnguilaArméniaAlandaBangladecheBarémBenimBaamasIlhas dos Cocos (Keeling)" + + "Congo-KinshasaCongo-BrazzavilleCamarõesCuraçauIlha do NatalRepública Che" + + "caJibutiDomínicaEstóniaIlhas FalklandIlhas FaroéGronelândiaGuameIrãoQuén" + + "iaSão Cristóvão e NevesIlhas CaimãoListenstaineSri LancaLetóniaMónacoMad" + + "agáscarMacedóniaMonserrateMauríciaMaláuiNova CaledóniaPaíses BaixosPolón" + + "iaSão Pedro e MiquelãoTerritórios palestinianosOceânia InsularRoméniaSin" + + "gapuraEslovéniaSão MarinhoSalvadorIlhas Turcas e CaicosToquelauTurquemen" + + "istãoTrindade e TobagoIlhas Menores Afastadas dos EUAUsbequistãoVietname" + + "IémenMaioteZimbabuéOceâniaNorte de ÁfricaÁfrica AustralCaraíbasÁsia do S" + + "ulEuropa do SulEuropa do Norte" + +var ptPTRegionIdx = []uint16{ // 290 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, + 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0026, 0x0026, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x004a, 0x0058, 0x0058, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x007a, + 0x0087, 0x0087, 0x0097, 0x0097, 0x0097, 0x009d, 0x009d, 0x00a6, + // Entry 40 - 7F + 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00bc, 0x00bc, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00d4, 0x00d4, 0x00d4, 0x00d4, 0x00d4, 0x00d4, + 0x00d4, 0x00d4, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00fd, + // Entry 80 - BF + 0x00fd, 0x00fd, 0x00fd, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x0116, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x0127, 0x0127, + 0x0127, 0x012e, 0x012e, 0x012e, 0x012e, 0x0139, 0x0139, 0x0143, + 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x014d, + 0x014d, 0x0156, 0x0156, 0x015d, 0x015d, 0x015d, 0x015d, 0x015d, + 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x017a, 0x017a, 0x017a, + 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, + 0x017a, 0x017a, 0x0182, 0x0198, 0x0198, 0x0198, 0x01b2, 0x01b2, + // Entry C0 - FF + 0x01b2, 0x01b2, 0x01b2, 0x01c2, 0x01c2, 0x01ca, 0x01ca, 0x01ca, + 0x01ca, 0x01ca, 0x01ca, 0x01ca, 0x01ca, 0x01ca, 0x01d3, 0x01d3, + 0x01dd, 0x01dd, 0x01dd, 0x01dd, 0x01e9, 0x01e9, 0x01e9, 0x01e9, + 0x01e9, 0x01e9, 0x01f1, 0x01f1, 0x01f1, 0x01f1, 0x01f1, 0x0206, + 0x0206, 0x0206, 0x0206, 0x0206, 0x0206, 0x020e, 0x020e, 0x021d, + 0x021d, 0x021d, 0x021d, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, + 0x022e, 0x024d, 0x024d, 0x024d, 0x024d, 0x0259, 0x0259, 0x0259, + 0x0259, 0x0259, 0x0259, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + // Entry 100 - 13F + 0x0267, 0x026d, 0x026d, 0x026d, 0x0276, 0x0276, 0x0276, 0x0276, + 0x0276, 0x0276, 0x027e, 0x027e, 0x027e, 0x027e, 0x028e, 0x028e, + 0x029d, 0x029d, 0x029d, 0x02a6, 0x02a6, 0x02b2, 0x02b2, 0x02bf, + 0x02bf, 0x02bf, 0x02bf, 0x02bf, 0x02bf, 0x02bf, 0x02bf, 0x02bf, + 0x02bf, 0x02ce, +} // Size: 604 bytes + +const roRegionStr string = "" + // Size: 3252 bytes + "Insula AscensionAndorraEmiratele Arabe UniteAfganistanAntigua și Barbuda" + + "AnguillaAlbaniaArmeniaAngolaAntarcticaArgentinaSamoa AmericanăAustriaAus" + + "traliaArubaInsulele ÅlandAzerbaidjanBosnia și HerțegovinaBarbadosBanglad" + + "eshBelgiaBurkina FasoBulgariaBahrainBurundiBeninSfântul BartolomeuBermud" + + "aBruneiBoliviaInsulele Caraibe OlandezeBraziliaBahamasBhutanInsula Bouve" + + "tBotswanaBelarusBelizeCanadaInsulele Cocos (Keeling)Congo - KinshasaRepu" + + "blica CentrafricanăCongo - BrazzavilleElvețiaCôte d’IvoireInsulele CookC" + + "hileCamerunChinaColumbiaInsula ClippertonCosta RicaCubaCapul VerdeCuraça" + + "oInsula ChristmasCipruRepublica CehăGermaniaDiego GarciaDjiboutiDanemarc" + + "aDominicaRepublica DominicanăAlgeriaCeuta și MelillaEcuadorEstoniaEgiptS" + + "ahara OccidentalăEritreeaSpaniaEtiopiaUniunea EuropeanăFinlandaFijiInsul" + + "ele FalklandMicroneziaInsulele FeroeFranțaGabonRegatul UnitGrenadaGeorgi" + + "aGuyana FrancezăGuernseyGhanaGibraltarGroenlandaGambiaGuineeaGuadelupaGu" + + "ineea EcuatorialăGreciaGeorgia de Sud și Insulele Sandwich de SudGuatema" + + "laGuamGuineea-BissauGuyanaR.A.S. Hong Kong a ChineiInsula Heard și Insul" + + "ele McDonaldHondurasCroațiaHaitiUngariaInsulele CanareIndoneziaIrlandaIs" + + "raelInsula ManIndiaTeritoriul Britanic din Oceanul IndianIrakIranIslanda" + + "ItaliaJerseyJamaicaIordaniaJaponiaKenyaKârgâzstanCambodgiaKiribatiComore" + + "Saint Kitts și NevisCoreea de NordCoreea de SudKuweitInsulele CaymanKaza" + + "hstanLaosLibanSfânta LuciaLiechtensteinSri LankaLiberiaLesothoLituaniaLu" + + "xemburgLetoniaLibiaMarocMonacoRepublica MoldovaMuntenegruSfântul MartinM" + + "adagascarInsulele MarshallRepublica MacedoniaMaliMyanmar (Birmania)Mongo" + + "liaR.A.S. Macao a ChineiInsulele Mariane de NordMartinicaMauritaniaMonts" + + "erratMaltaMauritiusMaldiveMalawiMexicMalaysiaMozambicNamibiaNoua Caledon" + + "ieNigerInsula NorfolkNigeriaNicaraguaȚările de JosNorvegiaNepalNauruNiue" + + "Noua ZeelandăOmanPanamaPeruPolinezia FrancezăPapua-Noua GuineeFilipinePa" + + "kistanPoloniaSaint-Pierre și MiquelonInsulele PitcairnPuerto RicoTeritor" + + "iile PalestinienePortugaliaPalauParaguayQatarOceania PerifericăRéunionRo" + + "mâniaSerbiaRusiaRwandaArabia SaudităInsulele SolomonSeychellesSudanSuedi" + + "aSingaporeSfânta ElenaSloveniaSvalbard și Jan MayenSlovaciaSierra LeoneS" + + "an MarinoSenegalSomaliaSurinameSudanul de SudSao Tomé și PríncipeEl Salv" + + "adorSint-MaartenSiriaSwazilandTristan da CunhaInsulele Turks și CaicosCi" + + "adTeritoriile Australe și Antarctice FrancezeTogoThailandaTadjikistanTok" + + "elauTimorul de EstTurkmenistanTunisiaTongaTurciaTrinidad și TobagoTuvalu" + + "TaiwanTanzaniaUcrainaUgandaInsulele Îndepărtate ale S.U.A.Națiunile Unit" + + "eStatele Unite ale AmericiiUruguayUzbekistanStatul Cetății VaticanuluiSa" + + "int Vincent și GrenadineleVenezuelaInsulele Virgine BritaniceInsulele Vi" + + "rgine AmericaneVietnamVanuatuWallis și FutunaSamoaKosovoYemenMayotteAfri" + + "ca de SudZambiaZimbabweRegiune necunoscutăLumeAfricaAmerica de NordAmeri" + + "ca de SudOceaniaAfrica OccidentalăAmerica CentralăAfrica OrientalăAfrica" + + " SeptentrionalăAfrica CentralăAfrica MeridionalăAmericiAmerica Septentri" + + "onalăCaraibeAsia OrientalăAsia MeridionalăAsia de Sud-EstEuropa Meridion" + + "alăAustralasiaMelaneziaRegiunea MicroneziaPolineziaAsiaAsia CentralăAsia" + + " OccidentalăEuropaEuropa OrientalăEuropa SeptentrionalăEuropa Occidental" + + "ăAmerica Latină" + +var roRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x002c, 0x0036, 0x0049, 0x0051, 0x0058, + 0x005f, 0x0065, 0x006f, 0x0078, 0x0088, 0x008f, 0x0098, 0x009d, + 0x00ac, 0x00b7, 0x00ce, 0x00d6, 0x00e0, 0x00e6, 0x00f2, 0x00fa, + 0x0101, 0x0108, 0x010d, 0x0120, 0x0127, 0x012d, 0x0134, 0x014d, + 0x0155, 0x015c, 0x0162, 0x016f, 0x0177, 0x017e, 0x0184, 0x018a, + 0x01a2, 0x01b2, 0x01ca, 0x01dd, 0x01e5, 0x01f5, 0x0202, 0x0207, + 0x020e, 0x0213, 0x021b, 0x022c, 0x0236, 0x023a, 0x0245, 0x024d, + 0x025d, 0x0262, 0x0271, 0x0279, 0x0285, 0x028d, 0x0296, 0x029e, + // Entry 40 - 7F + 0x02b3, 0x02ba, 0x02cb, 0x02d2, 0x02d9, 0x02de, 0x02f1, 0x02f9, + 0x02ff, 0x0306, 0x0318, 0x0318, 0x0320, 0x0324, 0x0335, 0x033f, + 0x034d, 0x0354, 0x0359, 0x0365, 0x036c, 0x0373, 0x0383, 0x038b, + 0x0390, 0x0399, 0x03a3, 0x03a9, 0x03b0, 0x03b9, 0x03cd, 0x03d3, + 0x03fe, 0x0407, 0x040b, 0x0419, 0x041f, 0x0438, 0x045a, 0x0462, + 0x046a, 0x046f, 0x0476, 0x0485, 0x048e, 0x0495, 0x049b, 0x04a5, + 0x04aa, 0x04d0, 0x04d4, 0x04d8, 0x04df, 0x04e5, 0x04eb, 0x04f2, + 0x04fa, 0x0501, 0x0506, 0x0512, 0x051b, 0x0523, 0x0529, 0x053e, + // Entry 80 - BF + 0x054c, 0x0559, 0x055f, 0x056e, 0x0577, 0x057b, 0x0580, 0x058d, + 0x059a, 0x05a3, 0x05aa, 0x05b1, 0x05b9, 0x05c2, 0x05c9, 0x05ce, + 0x05d3, 0x05d9, 0x05ea, 0x05f4, 0x0603, 0x060d, 0x061e, 0x0631, + 0x0635, 0x0647, 0x064f, 0x0664, 0x067c, 0x0685, 0x068f, 0x0699, + 0x069e, 0x06a7, 0x06ae, 0x06b4, 0x06b9, 0x06c1, 0x06c9, 0x06d0, + 0x06de, 0x06e3, 0x06f1, 0x06f8, 0x0701, 0x0710, 0x0718, 0x071d, + 0x0722, 0x0726, 0x0734, 0x0738, 0x073e, 0x0742, 0x0755, 0x0766, + 0x076e, 0x0776, 0x077d, 0x0796, 0x07a7, 0x07b2, 0x07ca, 0x07d4, + // Entry C0 - FF + 0x07d9, 0x07e1, 0x07e6, 0x07f9, 0x0801, 0x0809, 0x080f, 0x0814, + 0x081a, 0x0829, 0x0839, 0x0843, 0x0848, 0x084e, 0x0857, 0x0864, + 0x086c, 0x0882, 0x088a, 0x0896, 0x08a0, 0x08a7, 0x08ae, 0x08b6, + 0x08c4, 0x08db, 0x08e6, 0x08f2, 0x08f7, 0x0900, 0x0910, 0x0929, + 0x092d, 0x0959, 0x095d, 0x0966, 0x0971, 0x0978, 0x0986, 0x0992, + 0x0999, 0x099e, 0x09a4, 0x09b7, 0x09bd, 0x09c3, 0x09cb, 0x09d2, + 0x09d8, 0x09f9, 0x0a09, 0x0a23, 0x0a2a, 0x0a34, 0x0a50, 0x0a6d, + 0x0a76, 0x0a90, 0x0aaa, 0x0ab1, 0x0ab8, 0x0ac9, 0x0ace, 0x0ad4, + // Entry 100 - 13F + 0x0ad9, 0x0ae0, 0x0aed, 0x0af3, 0x0afb, 0x0b0f, 0x0b13, 0x0b19, + 0x0b28, 0x0b36, 0x0b3d, 0x0b50, 0x0b61, 0x0b72, 0x0b88, 0x0b98, + 0x0bab, 0x0bb2, 0x0bc9, 0x0bd0, 0x0bdf, 0x0bf0, 0x0bff, 0x0c12, + 0x0c1d, 0x0c26, 0x0c39, 0x0c42, 0x0c46, 0x0c54, 0x0c65, 0x0c6b, + 0x0c7c, 0x0c92, 0x0ca5, 0x0cb4, +} // Size: 608 bytes + +const ruRegionStr string = "" + // Size: 5849 bytes + "о-в ВознесенияАндорраОАЭАфганистанАнтигуа и БарбудаАнгильяАлбанияАрмения" + + "АнголаАнтарктидаАргентинаАмериканское СамоаАвстрияАвстралияАрубаАландск" + + "ие о-ваАзербайджанБосния и ГерцеговинаБарбадосБангладешБельгияБуркина-Ф" + + "асоБолгарияБахрейнБурундиБенинСен-БартелемиБермудыБруней-ДаруссаламБоли" + + "вияБонэйр, Синт-Эстатиус и СабаБразилияБагамыБутано-в БувеБотсванаБелар" + + "усьБелизКанадаКокосовые о-ваКонго - КиншасаЦАРКонго - БраззавильШвейцар" + + "ияКот-д’ИвуарОстрова КукаЧилиКамерунКитайКолумбияо-в КлиппертонКоста-Ри" + + "каКубаКабо-ВердеКюрасаоо-в РождестваКипрЧехияГерманияДиего-ГарсияДжибут" + + "иДанияДоминикаДоминиканская РеспубликаАлжирСеута и МелильяЭквадорЭстони" + + "яЕгипетЗападная СахараЭритреяИспанияЭфиопияЕвропейский союзФинляндияФид" + + "жиФолклендские о-ваФедеративные Штаты МикронезииФарерские о-ваФранцияГа" + + "бонВеликобританияГренадаГрузияФранцузская ГвианаГернсиГанаГибралтарГрен" + + "ландияГамбияГвинеяГваделупаЭкваториальная ГвинеяГрецияЮжная Георгия и Ю" + + "жные Сандвичевы о-ваГватемалаГуамГвинея-БисауГайанаГонконг (специальный" + + " административный район)о-ва Херд и МакдональдГондурасХорватияГаитиВенгр" + + "ияКанарские о-ваИндонезияИрландияИзраильо-в МэнИндияБританская территор" + + "ия в Индийском океанеИракИранИсландияИталияДжерсиЯмайкаИорданияЯпонияКе" + + "нияКиргизияКамбоджаКирибатиКоморыСент-Китс и НевисКНДРРеспублика КореяК" + + "увейтКаймановы о-ваКазахстанЛаосЛиванСент-ЛюсияЛихтенштейнШри-ЛанкаЛибе" + + "рияЛесотоЛитваЛюксембургЛатвияЛивияМароккоМонакоМолдоваЧерногорияСен-Ма" + + "ртенМадагаскарМаршалловы ОстроваМакедонияМалиМьянма (Бирма)МонголияМака" + + "о (специальный административный район)Северные Марианские о-ваМартиника" + + "МавританияМонтсерратМальтаМаврикийМальдивыМалавиМексикаМалайзияМозамбик" + + "НамибияНовая КаледонияНигеро-в НорфолкНигерияНикарагуаНидерландыНорвеги" + + "яНепалНауруНиуэНовая ЗеландияОманПанамаПеруФранцузская ПолинезияПапуа –" + + " Новая ГвинеяФилиппиныПакистанПольшаСен-Пьер и Микелонострова ПиткэрнПуэ" + + "рто-РикоПалестинские территорииПортугалияПалауПарагвайКатарВнешняя Океа" + + "нияРеюньонРумынияСербияРоссияРуандаСаудовская АравияСоломоновы ОстроваС" + + "ейшельские ОстроваСуданШвецияСингапуро-в Св. ЕленыСловенияШпицберген и " + + "Ян-МайенСловакияСьерра-ЛеонеСан-МариноСенегалСомалиСуринамЮжный СуданСа" + + "н-Томе и ПринсипиСальвадорСинт-МартенСирияСвазилендТристан-да-Куньяо-ва" + + " Тёркс и КайкосЧадФранцузские Южные территорииТогоТаиландТаджикистанТоке" + + "лауВосточный ТиморТуркменистанТунисТонгаТурцияТринидад и ТобагоТувалуТа" + + "йваньТанзанияУкраинаУгандаВнешние малые о-ва (США)Организация Объединен" + + "ных НацийСоединенные ШтатыУругвайУзбекистанВатиканСент-Винсент и Гренад" + + "иныВенесуэлаВиргинские о-ва (Британские)Виргинские о-ва (США)ВьетнамВан" + + "уатуУоллис и ФутунаСамоаКосовоЙеменМайоттаЮАРЗамбияЗимбабвеНеизвестный " + + "регионМирАфрикаСеверная АмерикаЮжная АмерикаОкеанияЗападная АфрикаЦентр" + + "альная АмерикаВосточная АфрикаСеверная АфрикаЦентральная АфрикаЮжная Аф" + + "рикаАмерикаСеверная Америка – США и КанадаКарибыВосточная АзияЮжная Ази" + + "яЮго-Восточная АзияЮжная ЕвропаАвстралазияМеланезияМикронезияПолинезияА" + + "зияЦентральная АзияЗападная АзияЕвропаВосточная ЕвропаСеверная ЕвропаЗа" + + "падная ЕвропаЛатинская Америка" + +var ruRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001a, 0x0028, 0x002e, 0x0042, 0x0062, 0x0070, 0x007e, + 0x008c, 0x0098, 0x00ac, 0x00be, 0x00e1, 0x00ef, 0x0101, 0x010b, + 0x0125, 0x013b, 0x0161, 0x0171, 0x0183, 0x0191, 0x01a8, 0x01b8, + 0x01c6, 0x01d4, 0x01de, 0x01f7, 0x0205, 0x0226, 0x0234, 0x0267, + 0x0277, 0x0283, 0x028d, 0x029b, 0x02ab, 0x02bb, 0x02c5, 0x02d1, + 0x02eb, 0x0306, 0x030c, 0x032d, 0x033f, 0x0355, 0x036c, 0x0374, + 0x0382, 0x038c, 0x039c, 0x03b6, 0x03c9, 0x03d1, 0x03e4, 0x03f2, + 0x040a, 0x0412, 0x041c, 0x042c, 0x0443, 0x0451, 0x045b, 0x046b, + // Entry 40 - 7F + 0x049a, 0x04a4, 0x04c0, 0x04ce, 0x04dc, 0x04e8, 0x0505, 0x0513, + 0x0521, 0x052f, 0x054e, 0x054e, 0x0560, 0x056a, 0x058a, 0x05c2, + 0x05dc, 0x05ea, 0x05f4, 0x0610, 0x061e, 0x062a, 0x064d, 0x0659, + 0x0661, 0x0673, 0x0687, 0x0693, 0x069f, 0x06b1, 0x06da, 0x06e6, + 0x072a, 0x073c, 0x0744, 0x075b, 0x0767, 0x07ba, 0x07e2, 0x07f2, + 0x0802, 0x080c, 0x081a, 0x0834, 0x0846, 0x0856, 0x0864, 0x0870, + 0x087a, 0x08c6, 0x08ce, 0x08d6, 0x08e6, 0x08f2, 0x08fe, 0x090a, + 0x091a, 0x0926, 0x0930, 0x0940, 0x0950, 0x0960, 0x096c, 0x098b, + // Entry 80 - BF + 0x0993, 0x09b2, 0x09be, 0x09d8, 0x09ea, 0x09f2, 0x09fc, 0x0a0f, + 0x0a25, 0x0a36, 0x0a44, 0x0a50, 0x0a5a, 0x0a6e, 0x0a7a, 0x0a84, + 0x0a92, 0x0a9e, 0x0aac, 0x0ac0, 0x0ad3, 0x0ae7, 0x0b0a, 0x0b1c, + 0x0b24, 0x0b3d, 0x0b4d, 0x0b9c, 0x0bc9, 0x0bdb, 0x0bef, 0x0c03, + 0x0c0f, 0x0c1f, 0x0c2f, 0x0c3b, 0x0c49, 0x0c59, 0x0c69, 0x0c77, + 0x0c94, 0x0c9e, 0x0cb2, 0x0cc0, 0x0cd2, 0x0ce6, 0x0cf6, 0x0d00, + 0x0d0a, 0x0d12, 0x0d2d, 0x0d35, 0x0d41, 0x0d49, 0x0d72, 0x0d98, + 0x0daa, 0x0dba, 0x0dc6, 0x0de7, 0x0e04, 0x0e19, 0x0e46, 0x0e5a, + // Entry C0 - FF + 0x0e64, 0x0e74, 0x0e7e, 0x0e9b, 0x0ea9, 0x0eb7, 0x0ec3, 0x0ecf, + 0x0edb, 0x0efc, 0x0f1f, 0x0f44, 0x0f4e, 0x0f5a, 0x0f6a, 0x0f80, + 0x0f90, 0x0fb7, 0x0fc7, 0x0fde, 0x0ff1, 0x0fff, 0x100b, 0x1019, + 0x102e, 0x1051, 0x1063, 0x1078, 0x1082, 0x1094, 0x10b2, 0x10d4, + 0x10da, 0x1110, 0x1118, 0x1126, 0x113c, 0x114a, 0x1167, 0x117f, + 0x1189, 0x1193, 0x119f, 0x11bf, 0x11cb, 0x11d9, 0x11e9, 0x11f7, + 0x1203, 0x122d, 0x1267, 0x1288, 0x1296, 0x12aa, 0x12b8, 0x12e5, + 0x12f7, 0x132a, 0x134f, 0x135d, 0x136b, 0x1387, 0x1391, 0x139d, + // Entry 100 - 13F + 0x13a7, 0x13b5, 0x13bb, 0x13c7, 0x13d7, 0x13fa, 0x1400, 0x140c, + 0x142b, 0x1444, 0x1452, 0x146f, 0x1494, 0x14b3, 0x14d0, 0x14f3, + 0x150a, 0x1518, 0x1552, 0x155e, 0x1579, 0x158c, 0x15ae, 0x15c5, + 0x15db, 0x15ed, 0x1601, 0x1613, 0x161b, 0x163a, 0x1653, 0x165f, + 0x167e, 0x169b, 0x16b8, 0x16d9, +} // Size: 608 bytes + +const siRegionStr string = "" + // Size: 9335 bytes + "ඇසෙන්ෂන් දිවයිනඇන්ඩෝරාවඑක්සත් අරාබි එමිර් රාජ්\u200dයයඇෆ්ගනිස්ථානයඇන්ටිග" + + "ුවා සහ බාබියුඩාවඇන්ගුයිලාවඇල්බේනියාවආර්මේනියාවඇන්ගෝලාවඇන්ටාක්ටිකාවආර්ජ" + + "ෙන්ටිනාවඇමරිකානු සැමෝවාවඔස්ට්\u200dරියාවඕස්ට්\u200dරේලියාවඅරුබාවඕලන්ඩ්" + + " දූපත්අසර්බයිජානයබොස්නියාව සහ හර්සගොවීනාවබාර්බඩෝස්බංග්ලාදේශයබෙල්ජියමබර්ක" + + "ිනා ෆාසෝබල්ගේරියාවබහරේන්බුරුන්දිබෙනින්ශාන්ත බර්තලෙමිබර්මියුඩාබෲනායිබොල" + + "ීවියාවකැරිබියානු නෙදර්ලන්තයබ්\u200dරසීලයබහමාස්භූතානයබුවට් දුපත්බොට්ස්ව" + + "ානාබෙලරුස්බෙලීස්කැනඩාවකොකෝස් දූපත්කොංගො - කින්ශාසාමධ්\u200dයම අප්" + + "\u200dරිකානු ජනරජයකොංගො - බ්\u200dරසාවිල්ස්විස්ටර්ලන්තයකෝට් දි අයිවරිකුක" + + "් දූපත්චිලීකැමරූන්චීනයකොළොම්බියාවක්ලීපර්ටන් දූපතකොස්ටරිකාවකියුබාවකේප් " + + "වර්ඩ්කුරකාවෝක්\u200dරිස්මස් දූපතසයිප්\u200dරසයචෙක් ජනරජයජර්මනියදියාගෝ " + + "ගාර්සියාජිබුටිඩෙන්මාර්කයඩොමිනිකාවඩොමිනිකා ජනරජයඇල්ජීරියාවසෙයුටා සහ මෙල" + + "ිල්ලාඉක්වදෝරයඑස්තෝනියාවඊජිප්තුවබටහිර සහරාවඑරිත්\u200dරියාවස්පාඤ්ඤයඉතිය" + + "ෝපියාවයුරෝපා සංගමයෆින්ලන්තයෆීජීෆෝක්ලන්ත දූපත්මයික්\u200dරොනීසියාවෆැරෝ " + + "දූපත්ප්\u200dරංශයගැබොන්එක්සත් රාජධානියග්\u200dරැනඩාවජෝර්ජියාවප්\u200dර" + + "ංශ ගයනාවගර්න්සියඝානාවජිබ්\u200dරෝල්ටාවග්\u200dරීන්ලන්තයගැම්බියාවගිණියා" + + "වග්වෝඩලෝප්සමක ගිනියාවග්\u200dරීසියදකුණු ජෝර්ජියාව සහ දකුණු සැන්ඩ්විච් " + + "දූපත්ගෝතමාලාවගුවාම්ගිනි බිසව්ගයනාවහොංකොං චීන විශේෂ පරිපාලන කලාපයහර්ඩ් " + + "දූපත සහ මැක්ඩොනල්ඩ් දූපත්හොන්ඩුරාස්ක්\u200dරොඒෂියාවහයිටිහන්ගේරියාවකැනර" + + "ි සූපත්ඉන්දුනීසියාවඅයර්ලන්තයඊශ්\u200dරායලයඅයිල් ඔෆ් මෑන්ඉන්දියාවබ්" + + "\u200dරිතාන්\u200dය ඉන්දීය සාගර බල ප්\u200dරදේශයඉරාකයඉරානයඅයිස්ලන්තයඉතාල" + + "ියජර්සිජැමෙයිකාවජෝර්දානයජපානයකෙන්යාවකිර්ගිස්තානයකාම්බෝජයකිරිබතිකොමොරෝස" + + "්ශාන්ත කිට්ස් සහ නේවිස්උතුරු කොරියාවදකුණු කොරියාවකුවේටයකේමන් දූපත්කසකස" + + "්තානයලාඕසයලෙබනනයශාන්ත ලුසියාලික්ටන්ස්ටයින්ශ්\u200dරී ලංකාවලයිබීරියාවලෙ" + + "සතෝලිතුවේනියාවලක්ශම්බර්ග්ලැට්වියාවලිබියාවමොරොක්කෝවමොනාකෝවමොල්ඩෝවාවමොන්" + + "ටෙනීග්\u200dරෝශාන්ත මාර්ටින්මැඩගස්කරයමාෂල් දූපත්මැසිඩෝනියාවමාලිමියන්මා" + + "රය (බුරුමය)මොන්ගෝලියාවමකාවු චීන විශේෂ පරිපාලන කලාපයඋතුරු මරියානා දූපත්" + + "මර්ටිනික්මොරිටේනියාවමොන්සෙරාට්මෝල්ටාවමුරුසියමාල දිවයිනමලාවිමෙක්සිකෝවමැ" + + "ලේසියාවමොසැම්බික්නැමීබියාවනව කැලිඩෝනියාවනයිජර්නෝෆෝක් දූපතනයිජීරියාවනික" + + "රගුවාවනෙදර්ලන්තයනෝර්වේනේපාලයනාවුරුනියූනවසීලන්තයඕමානයපැනමාවපේරුප්\u200d" + + "රංශ පොලිනීසියාවපැපුවා නිව් ගිනියාවපිලිපීනයපාකිස්තානයපෝලන්තයශාන්ත පියරේ" + + " සහ මැකෝලන්පිට්කෙය්න් දූපත්පුවර්ටෝ රිකෝපලස්තීන රාජ්\u200dයයපෘතුගාලයපලාවු" + + "පැරගුවේකටාර්ඈත ඕෂනියාවරීයුනියන්රුමේනියාවසර්බියාවරුසියාවරුවන්ඩාවසෞදි අර" + + "ාබියසොලමන් දූපත්සීශෙල්ස්සූඩානයස්වීඩනයසිංගප්පූරුවශාන්ත හෙලේනාස්ලෝවේනියා" + + "වස්වෙල්බර්ඩ් සහ ජේන් මයේන්ස්ලෝවැකියාවසියරාලියෝන්සැන් මැරිනෝසෙනගාලයසෝමා" + + "ලියාවසුරිනාමයදකුණු සුඩානයසාඕ තෝම් සහ ප්\u200dරින්සිප්එල් සැල්වදෝරයශාන්" + + "ත මාර්ටෙන්සිරියාවස්වාසිලන්තයට්\u200dරිස්ටන් ද කුන්හාටර්ක්ස් සහ කයිකොස්" + + " දූපත්චැච්දකුණු ප්\u200dරංශ දූපත් සමූහයටොගෝතායිලන්තයටජිකිස්තානයටොකලාවුටි" + + "මෝර් - ලෙස්ත්ටර්ක්මෙනිස්ථානයටියුනීසියාවටොංගාතුර්කියට්\u200dරිනිඩෑඩ් සහ" + + " ටොබැගෝටුවාලූතායිවානයටැන්සානියාවයුක්රේනයඋගන්ඩාවඑක්සත් ජනපද ඈත දූපත්එක්සත" + + "් ජාතීන්එක්සත් ජනපදයඋරුගුවේඋස්බෙකිස්ථානයවතිකානු නගරයශාන්ත වින්සන්ට් සහ" + + " ග්\u200dරෙනඩින්ස්වෙනිසියුලාවබ්\u200dරිතාන්\u200dය වර්ජින් දූපත්ඇමරිකානු" + + " වර්ජින් දූපත්වියට්නාමයවනුවාටුවැලිස් සහ ෆුටුනාසැමෝවාකොසෝවෝයේමනයමයෝට්දකුණ" + + "ු අප්\u200dරිකාවසැම්බියාවසිම්බාබ්වේහඳුනා නොගත් කළාපයලෝකයඅප්\u200dරිකාව" + + "උතුරු ඇමෙරිකාවදකුණු ඇමෙරිකාවඕෂනියාවබටහිරදිග අප්\u200dරිකාවමධ්\u200dයම " + + "ඇමෙරිකාවපෙරදිග අප්\u200dරිකාවඋතුරුදිග අප්\u200dරිකාවමධ්\u200dයම අප්" + + "\u200dරිකාවදකුණුදිග අප්\u200dරිකාවඇමරිකාවඋතුරුදිග ඇමෙරිකාවකැරීබියන්නැගෙන" + + "හිර ආසියාවදකුණු ආසියාවඅග්නිදිග ආසියාවදකුණුදිග යුරෝපයඕස්ට්\u200dරලේෂියා" + + "වමෙලනීසියාවමයික්\u200dරෝනීසියානු කළාපයපොලිනීසියාවආසියාවමධ්\u200dයම ආසි" + + "යාවබටහිර ආසියාවයුරෝපයනැගෙනහිර යුරෝපයඋතුරු යුරෝපයබටහිර යුරෝපයලතින් ඇමෙර" + + "ිකාව" + +var siRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x002b, 0x0043, 0x008b, 0x00af, 0x00ed, 0x010b, 0x0129, + 0x0147, 0x015f, 0x0183, 0x01a7, 0x01d5, 0x01f6, 0x021d, 0x022f, + 0x0251, 0x0272, 0x02b6, 0x02d1, 0x02ef, 0x0307, 0x0329, 0x0347, + 0x0359, 0x0371, 0x0383, 0x03ab, 0x03c6, 0x03d8, 0x03f3, 0x0430, + 0x0448, 0x045a, 0x046c, 0x048b, 0x04a9, 0x04be, 0x04d0, 0x04e2, + 0x0504, 0x052e, 0x056f, 0x059f, 0x05c9, 0x05ef, 0x060b, 0x0617, + 0x062c, 0x0638, 0x0659, 0x0684, 0x06a2, 0x06b7, 0x06d3, 0x06e8, + 0x0713, 0x072e, 0x074a, 0x075f, 0x078a, 0x079c, 0x07ba, 0x07d5, + // Entry 40 - 7F + 0x07fd, 0x081b, 0x084d, 0x0865, 0x0883, 0x089b, 0x08ba, 0x08db, + 0x08f3, 0x0911, 0x0933, 0x0933, 0x094e, 0x095a, 0x0982, 0x09af, + 0x09cb, 0x09e0, 0x09f2, 0x0a1d, 0x0a38, 0x0a53, 0x0a75, 0x0a8d, + 0x0a9c, 0x0ac0, 0x0ae4, 0x0aff, 0x0b14, 0x0b2f, 0x0b4e, 0x0b66, + 0x0bd7, 0x0bef, 0x0c01, 0x0c1d, 0x0c2c, 0x0c7e, 0x0cd3, 0x0cf1, + 0x0d12, 0x0d21, 0x0d3f, 0x0d5e, 0x0d82, 0x0d9d, 0x0db8, 0x0dde, + 0x0df6, 0x0e57, 0x0e66, 0x0e75, 0x0e93, 0x0ea5, 0x0eb4, 0x0ecf, + 0x0ee7, 0x0ef6, 0x0f0b, 0x0f2f, 0x0f47, 0x0f5c, 0x0f74, 0x0fb0, + // Entry 80 - BF + 0x0fd5, 0x0ffa, 0x100c, 0x102b, 0x1046, 0x1055, 0x1067, 0x1089, + 0x10b3, 0x10d2, 0x10f0, 0x10ff, 0x1120, 0x1141, 0x115c, 0x1171, + 0x118c, 0x11a1, 0x11bc, 0x11e3, 0x120b, 0x1226, 0x1245, 0x1266, + 0x1272, 0x12a2, 0x12c3, 0x1312, 0x1347, 0x1362, 0x1383, 0x13a1, + 0x13b6, 0x13cb, 0x13e7, 0x13f6, 0x1411, 0x142c, 0x144a, 0x1465, + 0x148d, 0x149f, 0x14be, 0x14dc, 0x14f7, 0x1515, 0x1527, 0x1539, + 0x154b, 0x1557, 0x1572, 0x1581, 0x1593, 0x159f, 0x15d3, 0x1608, + 0x1620, 0x163e, 0x1653, 0x168f, 0x16bd, 0x16df, 0x170a, 0x1722, + // Entry C0 - FF + 0x1731, 0x1746, 0x1755, 0x1771, 0x178c, 0x17a7, 0x17bf, 0x17d4, + 0x17ec, 0x180b, 0x182d, 0x1845, 0x1857, 0x186c, 0x188d, 0x18af, + 0x18d0, 0x1915, 0x1936, 0x1957, 0x1976, 0x198b, 0x19a6, 0x19be, + 0x19e0, 0x1a1f, 0x1a44, 0x1a6c, 0x1a81, 0x1aa2, 0x1ad7, 0x1b19, + 0x1b25, 0x1b67, 0x1b73, 0x1b8e, 0x1baf, 0x1bc4, 0x1beb, 0x1c18, + 0x1c39, 0x1c48, 0x1c5d, 0x1c98, 0x1caa, 0x1cc2, 0x1ce3, 0x1cfb, + 0x1d10, 0x1d46, 0x1d6b, 0x1d8d, 0x1da2, 0x1dc9, 0x1deb, 0x1e42, + 0x1e63, 0x1eaa, 0x1ee8, 0x1f03, 0x1f18, 0x1f44, 0x1f56, 0x1f68, + // Entry 100 - 13F + 0x1f77, 0x1f86, 0x1fb1, 0x1fcc, 0x1fea, 0x2019, 0x2025, 0x2040, + 0x2068, 0x2090, 0x20a5, 0x20d9, 0x2104, 0x2132, 0x2166, 0x2194, + 0x21c8, 0x21dd, 0x220e, 0x2229, 0x2254, 0x2276, 0x22a1, 0x22cc, + 0x22f6, 0x2314, 0x2354, 0x2375, 0x2387, 0x23ac, 0x23ce, 0x23e0, + 0x240b, 0x242d, 0x244f, 0x2477, +} // Size: 608 bytes + +const skRegionStr string = "" + // Size: 3227 bytes + "AscensionAndorraSpojené arabské emirátyAfganistanAntigua a BarbudaAnguil" + + "laAlbánskoArménskoAngolaAntarktídaArgentínaAmerická SamoaRakúskoAustráli" + + "aArubaAlandyAzerbajdžanBosna a HercegovinaBarbadosBangladéšBelgickoBurki" + + "na FasoBulharskoBahrajnBurundiBeninSvätý BartolomejBermudyBrunejBolíviaK" + + "aribské HolandskoBrazíliaBahamyBhutánBouvetov ostrovBotswanaBieloruskoBe" + + "lizeKanadaKokosové ostrovyKonžská demokratická republikaStredoafrická re" + + "publikaKonžská republikaŠvajčiarskoPobrežie SlonovinyCookove ostrovyČile" + + "KamerunČínaKolumbiaClippertonKostarikaKubaKapverdyCuraçaoVianočný ostrov" + + "CyprusČeská republikaNemeckoDiego GarciaDžibutskoDánskoDominikaDominikán" + + "ska republikaAlžírskoCeuta a MelillaEkvádorEstónskoEgyptZápadná SaharaEr" + + "itreaŠpanielskoEtiópiaEurópska úniaFínskoFidžiFalklandyMikronéziaFaerské" + + " ostrovyFrancúzskoGabonSpojené kráľovstvoGrenadaGruzínskoFrancúzska Guay" + + "anaGuernseyGhanaGibraltárGrónskoGambiaGuineaGuadeloupeRovníková GuineaGr" + + "éckoJužná Georgia a Južné Sandwichove ostrovyGuatemalaGuamGuinea-Bissau" + + "GuayanaHongkong – OAO ČínyHeardov ostrov a Macdonaldove ostrovyHondurasC" + + "horvátskoHaitiMaďarskoKanárske ostrovyIndonéziaÍrskoIzraelOstrov ManIndi" + + "aBritské indickooceánske územieIrakIránIslandTalianskoJerseyJamajkaJordá" + + "nskoJaponskoKeňaKirgizskoKambodžaKiribatiKomorySvätý Krištof a NevisSeve" + + "rná KóreaJužná KóreaKuvajtKajmanie ostrovyKazachstanLaosLibanonSvätá Luc" + + "iaLichtenštajnskoSrí LankaLibériaLesothoLitvaLuxemburskoLotyšskoLíbyaMar" + + "okoMonakoMoldavskoČierna HoraSvätý Martin (fr.)MadagaskarMarshallove ost" + + "rovyMacedónskoMaliMjanmarskoMongolskoMacao – OAO ČínySeverné MariányMart" + + "inikMauritániaMontserratMaltaMauríciusMaldivyMalawiMexikoMalajziaMozambi" + + "kNamíbiaNová KaledóniaNigerNorfolkNigériaNikaraguaHolandskoNórskoNepálNa" + + "uruNiueNový ZélandOmánPanamaPeruFrancúzska PolynéziaPapua Nová GuineaFil" + + "ipínyPakistanPoľskoSaint Pierre a MiquelonPitcairnove ostrovyPortorikoPa" + + "lestínske územiaPortugalskoPalauParaguajKatarostatné TichomorieRéunionRu" + + "munskoSrbskoRuskoRwandaSaudská ArábiaŠalamúnove ostrovySeychelySudánŠvéd" + + "skoSingapurSvätá HelenaSlovinskoSvalbard a Jan MayenSlovenskoSierra Leon" + + "eSan MarínoSenegalSomálskoSurinamJužný SudánSvätý Tomáš a Princov ostrov" + + "SalvádorSvätý Martin (hol.)SýriaSvazijskoTristan da CunhaTurks a CaicosČ" + + "adFrancúzske južné a antarktické územiaTogoThajskoTadžikistanTokelauVých" + + "odný TimorTurkménskoTuniskoTongaTureckoTrinidad a TobagoTuvaluTaiwanTanz" + + "ániaUkrajinaUgandaMenšie odľahlé ostrovy USAOSNSpojené štátyUruguajUzbe" + + "kistanVatikánSvätý Vincent a GrenadínyVenezuelaBritské Panenské ostrovyA" + + "merické Panenské ostrovyVietnamVanuatuWallis a FutunaSamoaKosovoJemenMay" + + "otteJužná AfrikaZambiaZimbabweneznámy regiónsvetAfrikaSeverná AmerikaJuž" + + "ná AmerikaOceániazápadná AfrikaStredná Amerikavýchodná Afrikaseverná Afr" + + "ikastredná Afrikajužné územia AfrikyAmerikaseverné územia AmerikyKaribik" + + "východná Áziajužná Áziajuhovýchodná Áziajužná EurópaAustraláziaMelanézia" + + "oblasť MikronéziePolynéziaÁziastredná Áziazápadná ÁziaEurópavýchodná Eur" + + "ópaseverná Európazápadná EurópaLatinská Amerika" + +var skRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x002a, 0x0034, 0x0045, 0x004d, 0x0056, + 0x005f, 0x0065, 0x0070, 0x007a, 0x0089, 0x0091, 0x009b, 0x00a0, + 0x00a6, 0x00b2, 0x00c5, 0x00cd, 0x00d8, 0x00e0, 0x00ec, 0x00f5, + 0x00fc, 0x0103, 0x0108, 0x011a, 0x0121, 0x0127, 0x012f, 0x0142, + 0x014b, 0x0151, 0x0158, 0x0167, 0x016f, 0x0179, 0x017f, 0x0185, + 0x0196, 0x01b7, 0x01cf, 0x01e2, 0x01ef, 0x0202, 0x0211, 0x0216, + 0x021d, 0x0223, 0x022b, 0x0235, 0x023e, 0x0242, 0x024a, 0x0252, + 0x0263, 0x0269, 0x027a, 0x0281, 0x028d, 0x0297, 0x029e, 0x02a6, + // Entry 40 - 7F + 0x02bd, 0x02c7, 0x02d6, 0x02de, 0x02e7, 0x02ec, 0x02fc, 0x0303, + 0x030e, 0x0316, 0x0325, 0x0325, 0x032c, 0x0332, 0x033b, 0x0346, + 0x0356, 0x0361, 0x0366, 0x037b, 0x0382, 0x038c, 0x039f, 0x03a7, + 0x03ac, 0x03b6, 0x03be, 0x03c4, 0x03ca, 0x03d4, 0x03e6, 0x03ed, + 0x041a, 0x0423, 0x0427, 0x0434, 0x043b, 0x0452, 0x0477, 0x047f, + 0x048a, 0x048f, 0x0498, 0x04a9, 0x04b3, 0x04b9, 0x04bf, 0x04c9, + 0x04ce, 0x04ef, 0x04f3, 0x04f8, 0x04fe, 0x0507, 0x050d, 0x0514, + 0x051e, 0x0526, 0x052b, 0x0534, 0x053d, 0x0545, 0x054b, 0x0563, + // Entry 80 - BF + 0x0572, 0x0580, 0x0586, 0x0596, 0x05a0, 0x05a4, 0x05ab, 0x05b8, + 0x05c8, 0x05d2, 0x05da, 0x05e1, 0x05e6, 0x05f1, 0x05fa, 0x0600, + 0x0606, 0x060c, 0x0615, 0x0621, 0x0635, 0x063f, 0x0652, 0x065d, + 0x0661, 0x066b, 0x0674, 0x0688, 0x0699, 0x06a1, 0x06ac, 0x06b6, + 0x06bb, 0x06c5, 0x06cc, 0x06d2, 0x06d8, 0x06e0, 0x06e8, 0x06f0, + 0x0700, 0x0705, 0x070c, 0x0714, 0x071d, 0x0726, 0x072d, 0x0733, + 0x0738, 0x073c, 0x0749, 0x074e, 0x0754, 0x0758, 0x076e, 0x0780, + 0x0789, 0x0791, 0x0798, 0x07af, 0x07c2, 0x07cb, 0x07df, 0x07ea, + // Entry C0 - FF + 0x07ef, 0x07f7, 0x07fc, 0x080f, 0x0817, 0x081f, 0x0825, 0x082a, + 0x0830, 0x0840, 0x0854, 0x085c, 0x0862, 0x086b, 0x0873, 0x0881, + 0x088a, 0x089e, 0x08a7, 0x08b3, 0x08be, 0x08c5, 0x08ce, 0x08d5, + 0x08e3, 0x0903, 0x090c, 0x0921, 0x0927, 0x0930, 0x0940, 0x094e, + 0x0952, 0x097c, 0x0980, 0x0987, 0x0993, 0x099a, 0x09aa, 0x09b5, + 0x09bc, 0x09c1, 0x09c8, 0x09d9, 0x09df, 0x09e5, 0x09ee, 0x09f6, + 0x09fc, 0x0a19, 0x0a1c, 0x0a2c, 0x0a33, 0x0a3d, 0x0a45, 0x0a61, + 0x0a6a, 0x0a84, 0x0a9f, 0x0aa6, 0x0aad, 0x0abc, 0x0ac1, 0x0ac7, + // Entry 100 - 13F + 0x0acc, 0x0ad3, 0x0ae1, 0x0ae7, 0x0aef, 0x0aff, 0x0b03, 0x0b09, + 0x0b19, 0x0b28, 0x0b30, 0x0b40, 0x0b50, 0x0b61, 0x0b70, 0x0b7f, + 0x0b95, 0x0b9c, 0x0bb4, 0x0bbb, 0x0bcb, 0x0bd8, 0x0bec, 0x0bfb, + 0x0c07, 0x0c11, 0x0c24, 0x0c2e, 0x0c33, 0x0c41, 0x0c50, 0x0c57, + 0x0c69, 0x0c79, 0x0c8a, 0x0c9b, +} // Size: 608 bytes + +const slRegionStr string = "" + // Size: 3201 bytes + "Otok AscensionAndoraZdruženi arabski emiratiAfganistanAntigva in Barbuda" + + "AngvilaAlbanijaArmenijaAngolaAntarktikaArgentinaAmeriška SamoaAvstrijaAv" + + "stralijaArubaÅlandski otokiAzerbajdžanBosna in HercegovinaBarbadosBangla" + + "dešBelgijaBurkina FasoBolgarijaBahrajnBurundiBeninSaint BarthélemyBermud" + + "iBrunejBolivijaNizozemski KaribiBrazilijaBahamiButanBouvetov otokBocvana" + + "BelorusijaBelizeKanadaKokosovi otokiDemokratična republika KongoCentraln" + + "oafriška republikaKongo - BrazzavilleŠvicaSlonokoščena obalaCookovi otok" + + "iČileKamerunKitajskaKolumbijaOtok ClippertonKostarikaKubaZelenortski oto" + + "kiCuraçaoBožični otokCiperČeškaNemčijaDiego GarciaDžibutiDanskaDominikaD" + + "ominikanska republikaAlžirijaCeuta in MelillaEkvadorEstonijaEgiptZahodna" + + " SaharaEritrejaŠpanijaEtiopijaEvropska unijaFinskaFidžiFalklandski otoki" + + "MikronezijaFerski otokiFrancijaGabonZdruženo kraljestvoGrenadaGruzijaFra" + + "ncoska GvajanaGuernseyGanaGibraltarGrenlandijaGambijaGvinejaGvadalupeEkv" + + "atorialna GvinejaGrčijaJužna Georgia in Južni Sandwichevi otokiGvatemala" + + "GuamGvineja BissauGvajanaPosebno administrativno območje LR Kitajske Hon" + + "gkongHeardov otok in McDonaldovi otokiHondurasHrvaškaHaitiMadžarskaKanar" + + "ski otokiIndonezijaIrskaIzraelOtok ManIndijaBritansko ozemlje v Indijske" + + "m oceanuIrakIranIslandijaItalijaJerseyJamajkaJordanijaJaponskaKenijaKirg" + + "izistanKambodžaKiribatiKomoriSaint Kitts in NevisSeverna KorejaJužna Kor" + + "ejaKuvajtKajmanski otokiKazahstanLaosLibanonSaint LuciaLihtenštajnŠrilan" + + "kaLiberijaLesotoLitvaLuksemburgLatvijaLibijaMarokoMonakoMoldavijaČrna go" + + "raSaint MartinMadagaskarMarshallovi otokiMakedonijaMaliMjanmar (Burma)Mo" + + "ngolijaPosebno administrativno območje LR Kitajske MacaoSeverni Mariansk" + + "i otokiMartinikMavretanijaMontserratMaltaMauritiusMaldiviMalaviMehikaMal" + + "ezijaMozambikNamibijaNova KaledonijaNigerNorfolški otokNigerijaNikaragva" + + "NizozemskaNorveškaNepalNauruNiueNova ZelandijaOmanPanamaPeruFrancoska Po" + + "linezijaPapua Nova GvinejaFilipiniPakistanPoljskaSaint Pierre in Miquelo" + + "nPitcairnPortorikoPalestinsko ozemljePortugalskaPalauParagvajKatarOstala" + + " oceanijaReunionRomunijaSrbijaRusijaRuandaSaudova ArabijaSalomonovi otok" + + "iSejšeliSudanŠvedskaSingapurSveta HelenaSlovenijaSvalbard in Jan MayenSl" + + "ovaškaSierra LeoneSan MarinoSenegalSomalijaSurinamJužni SudanSao Tome in" + + " PrincipeSalvadorSint MaartenSirijaSvaziTristan da CunhaOtoki Turks in C" + + "aicosČadFrancosko južno ozemljeTogoTajskaTadžikistanTokelauTimor-LesteTu" + + "rkmenistanTunizijaTongaTurčijaTrinidad in TobagoTuvaluTajvanTanzanijaUkr" + + "ajinaUgandaStranski zunanji otoki Združenih državZdruženi narodiZdružene" + + " države AmerikeUrugvajUzbekistanVatikanSaint Vincent in GrenadineVenezue" + + "laBritanski Deviški otokiAmeriški Deviški otokiVietnamVanuatuWallis in F" + + "utunaSamoaKosovoJemenMayotteJužnoafriška republikaZambijaZimbabveNeznano" + + " ali neveljavno območjeSvetAfrikaSeverna AmerikaJužna AmerikaOceanijaZah" + + "odna AfrikaSrednja AmerikaVzhodna AfrikaSeverna AfrikaSrednja AfrikaJužn" + + "a AfrikaAmerikesevernoameriška celinaKaribiVzhodna AzijaJužna AzijaJugov" + + "zhodna AzijaJužna EvropaAvstralija in Nova ZelandijaMelanezijamikronezij" + + "ska regijaPolinezijaAzijaOsrednja AzijaZahodna AzijaEvropaVzhodna Evropa" + + "Severna EvropaZahodna EvropaLatinska Amerika" + +var slRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x0014, 0x002d, 0x0037, 0x0049, 0x0050, 0x0058, + 0x0060, 0x0066, 0x0070, 0x0079, 0x0088, 0x0090, 0x009a, 0x009f, + 0x00ae, 0x00ba, 0x00ce, 0x00d6, 0x00e0, 0x00e7, 0x00f3, 0x00fc, + 0x0103, 0x010a, 0x010f, 0x0120, 0x0127, 0x012d, 0x0135, 0x0146, + 0x014f, 0x0155, 0x015a, 0x0167, 0x016e, 0x0178, 0x017e, 0x0184, + 0x0192, 0x01af, 0x01ca, 0x01dd, 0x01e3, 0x01f7, 0x0204, 0x0209, + 0x0210, 0x0218, 0x0221, 0x0230, 0x0239, 0x023d, 0x024e, 0x0256, + 0x0264, 0x0269, 0x0270, 0x0278, 0x0284, 0x028c, 0x0292, 0x029a, + // Entry 40 - 7F + 0x02b0, 0x02b9, 0x02c9, 0x02d0, 0x02d8, 0x02dd, 0x02eb, 0x02f3, + 0x02fb, 0x0303, 0x0311, 0x0311, 0x0317, 0x031d, 0x032e, 0x0339, + 0x0345, 0x034d, 0x0352, 0x0366, 0x036d, 0x0374, 0x0385, 0x038d, + 0x0391, 0x039a, 0x03a5, 0x03ac, 0x03b3, 0x03bc, 0x03d0, 0x03d7, + 0x0401, 0x040a, 0x040e, 0x041c, 0x0423, 0x0458, 0x0479, 0x0481, + 0x0489, 0x048e, 0x0498, 0x04a6, 0x04b0, 0x04b5, 0x04bb, 0x04c3, + 0x04c9, 0x04ed, 0x04f1, 0x04f5, 0x04fe, 0x0505, 0x050b, 0x0512, + 0x051b, 0x0523, 0x0529, 0x0534, 0x053d, 0x0545, 0x054b, 0x055f, + // Entry 80 - BF + 0x056d, 0x057a, 0x0580, 0x058f, 0x0598, 0x059c, 0x05a3, 0x05ae, + 0x05ba, 0x05c3, 0x05cb, 0x05d1, 0x05d6, 0x05e0, 0x05e7, 0x05ed, + 0x05f3, 0x05f9, 0x0602, 0x060c, 0x0618, 0x0622, 0x0633, 0x063d, + 0x0641, 0x0650, 0x0659, 0x068b, 0x06a2, 0x06aa, 0x06b5, 0x06bf, + 0x06c4, 0x06cd, 0x06d4, 0x06da, 0x06e0, 0x06e8, 0x06f0, 0x06f8, + 0x0707, 0x070c, 0x071b, 0x0723, 0x072c, 0x0736, 0x073f, 0x0744, + 0x0749, 0x074d, 0x075b, 0x075f, 0x0765, 0x0769, 0x077d, 0x078f, + 0x0797, 0x079f, 0x07a6, 0x07be, 0x07c6, 0x07cf, 0x07e2, 0x07ed, + // Entry C0 - FF + 0x07f2, 0x07fa, 0x07ff, 0x080e, 0x0815, 0x081d, 0x0823, 0x0829, + 0x082f, 0x083e, 0x084e, 0x0856, 0x085b, 0x0863, 0x086b, 0x0877, + 0x0880, 0x0895, 0x089e, 0x08aa, 0x08b4, 0x08bb, 0x08c3, 0x08ca, + 0x08d6, 0x08ea, 0x08f2, 0x08fe, 0x0904, 0x0909, 0x0919, 0x092e, + 0x0932, 0x094a, 0x094e, 0x0954, 0x0960, 0x0967, 0x0972, 0x097e, + 0x0986, 0x098b, 0x0993, 0x09a5, 0x09ab, 0x09b1, 0x09ba, 0x09c2, + 0x09c8, 0x09f0, 0x0a00, 0x0a19, 0x0a20, 0x0a2a, 0x0a31, 0x0a4b, + 0x0a54, 0x0a6c, 0x0a84, 0x0a8b, 0x0a92, 0x0aa2, 0x0aa7, 0x0aad, + // Entry 100 - 13F + 0x0ab2, 0x0ab9, 0x0ad1, 0x0ad8, 0x0ae0, 0x0aff, 0x0b03, 0x0b09, + 0x0b18, 0x0b26, 0x0b2e, 0x0b3c, 0x0b4b, 0x0b59, 0x0b67, 0x0b75, + 0x0b82, 0x0b89, 0x0ba0, 0x0ba6, 0x0bb3, 0x0bbf, 0x0bd0, 0x0bdd, + 0x0bf9, 0x0c03, 0x0c17, 0x0c21, 0x0c26, 0x0c34, 0x0c41, 0x0c47, + 0x0c55, 0x0c63, 0x0c71, 0x0c81, +} // Size: 608 bytes + +const sqRegionStr string = "" + // Size: 3074 bytes + "Ishulli AsenshionAndorrëEmiratet e Bashkuara ArabeAfganistanAntigua e Ba" + + "rbudaAnguilëShqipëriArmeniAngolëAntarktikëArgjentinëSamoa AmerikaneAustr" + + "iAustraliArubëIshujt AlandëAzerbajxhanBosnjë-HercegovinëBarbadosBanglade" + + "shBelgjikëBurkina-FasoBullgariBahrejnBurundiBeninShën BartolomeuBermudëB" + + "runeiBoliviKaraibet holandezeBrazilBahamasButanIshulli Bove’BotsvanëBjel" + + "lorusiBelizëKanadaIshujt KokosKongo-KinshasaRepubika e Afrikës QendroreK" + + "ongo-BrazavilëZvicërCôte d’IvoireIshujt KukKiliKamerunKinëKolumbiIshulli" + + " KlipërtonKosta-RikëKubëKepi i GjelbërKuraçaoIshulli i KrishtlindjesQipr" + + "oRepublika ÇekeGjermaniDiego-GarsiaXhibutiDanimarkëDominikëRepublika Dom" + + "inikaneAlgjeriTheuta e MelilaEkuadorEstoniEgjiptSaharaja PerëndimoreErit" + + "reSpanjëEtiopiBashkimi EuropianFinlandëFixhiIshujt FalklandMikroneziIshu" + + "jt FaroeFrancëGabonMbretëria e BashkuarGrenadëGjeorgjiGuajana FrancezeGe" + + "rnsejGanëGjibraltarGrenlandëGambiaGuineGuadalupeGuineja EkuatorialeGreqi" + + "Xhorxha Jugore dhe Ishujt Senduiçë të JugutGuatemalëGuamGuine-BisauGuaja" + + "nëRVAK i Hong KongutIshulli Hërd dhe Ishujt MekdonaldHondurasKroaciHaiti" + + "HungariIshujt KanarieIndoneziIrlandëIzraelIshulli i ManitIndiTerritori B" + + "ritanik i Oqeanit IndianIrakIranIslandëItaliXhersejXhamajkëJordaniJaponi" + + "KeniaKirgistanKamboxhiaKiribatiKomoreShën Kits dhe NevisKoreja e VeriutK" + + "oreja e JugutKuvajtIshujt KajmanKazakistanLaosLibanShën-LuçiaLihtenshtaj" + + "nSri-LankëLiberiLesotoLituaniLuksemburgLetoniLibiMarokMonakoMoldaviMal i" + + " ZiShën-MartinMadagaskarIshujt MarshallMaqedoniMaliMianmar (Burma)Mongol" + + "iRVAK i MakaosIshujt e Marianës VerioreMartinikëMauritaniMontseratMaltëM" + + "auritiusMaldiveMalaviMeksikëMalajziMozambikNamibiKaledonia e ReNigerIshu" + + "lli NorfolkNigeriNikaraguaHolandëNorvegjiNepalNauruNiueZelandë e ReOmanP" + + "anamaPeruPolinezia FrancezePapua Guineja e ReFilipinePakistanPoloniShën " + + "Pier dhe MikelonIshujt PitkernPorto-RikoTerritoret PalestinezePortugaliP" + + "alauParaguaiKatarOqeania e Largët (Lindja e Largët)ReunionRumaniSerbiRus" + + "iRuandëArabia SauditeIshujt SolomonSejshelleSudanSuediSingaporShën-Helen" + + "ëSlloveniSvalbard e Jan-MajenSllovakiSiera-LeoneSan-MarinoSenegalSomali" + + "SurinamiSudani i JugutSao-Tome e PrinsipeSalvadorSint MartenSiriSvazilan" + + "dëTristan-da-KunaIshujt Turks dhe KaikosÇadTerritoret Jugore FrancezeTog" + + "oTajlandëTaxhikistanTokelauTimor-LesteTurkmenistanTuniziTongaTurqiTrinid" + + "ad e TobagoTuvaluTajvanTanzaniUkrainëUgandëIshujt periferikë të SHBA-sëk" + + "ombet e bashkuaraShtetet e Bashkuara të AmerikësUruguaiUzbekistanVatikan" + + "Shën Vincent dhe GrenadineVenezuelëIshujt e Virgjër BritanikëIshujt e Vi" + + "rgjër AmerikanëVietnamVanuatuUollis e FutunaSamoaKosovëJemenMajotëAfrika" + + " e JugutZambiaZimbabveI panjohurBotaAfrikëAmerika e VeriutAmerika e Jugu" + + "tOqeaniAfrika PerëndimoreAmerika QendroreAfrika LindoreAfrika VerioreAfr" + + "ika e MesmeAfrika JugoreAmerikëAmerika VerioreKaraibeAzia LindoreAzia Ju" + + "goreAzia JuglindoreEuropa JugoreAustralaziaMelaneziaRajoni MikronezianPo" + + "lineziaAziAzia QendroreAzia PerëndimoreEuropëEuropa LindoreEuropa Verior" + + "eEuropa PerëndimoreAmerika Latine" + +var sqRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0011, 0x0019, 0x0033, 0x003d, 0x004e, 0x0056, 0x005f, + 0x0065, 0x006c, 0x0077, 0x0082, 0x0091, 0x0097, 0x009f, 0x00a5, + 0x00b3, 0x00be, 0x00d2, 0x00da, 0x00e4, 0x00ed, 0x00f9, 0x0101, + 0x0108, 0x010f, 0x0114, 0x0124, 0x012c, 0x0132, 0x0138, 0x014a, + 0x0150, 0x0157, 0x015c, 0x016b, 0x0174, 0x017e, 0x0185, 0x018b, + 0x0197, 0x01a5, 0x01c1, 0x01d1, 0x01d8, 0x01e8, 0x01f2, 0x01f6, + 0x01fd, 0x0202, 0x0209, 0x021b, 0x0226, 0x022b, 0x023a, 0x0242, + 0x0259, 0x025e, 0x026d, 0x0275, 0x0281, 0x0288, 0x0292, 0x029b, + // Entry 40 - 7F + 0x02af, 0x02b6, 0x02c5, 0x02cc, 0x02d2, 0x02d8, 0x02ed, 0x02f3, + 0x02fa, 0x0300, 0x0311, 0x0311, 0x031a, 0x031f, 0x032e, 0x0337, + 0x0343, 0x034a, 0x034f, 0x0364, 0x036c, 0x0374, 0x0384, 0x038b, + 0x0390, 0x039a, 0x03a4, 0x03aa, 0x03af, 0x03b8, 0x03cb, 0x03d0, + 0x03fe, 0x0408, 0x040c, 0x0417, 0x041f, 0x0431, 0x0453, 0x045b, + 0x0461, 0x0466, 0x046d, 0x047b, 0x0483, 0x048b, 0x0491, 0x04a0, + 0x04a4, 0x04c7, 0x04cb, 0x04cf, 0x04d7, 0x04dc, 0x04e3, 0x04ec, + 0x04f3, 0x04f9, 0x04fe, 0x0507, 0x0510, 0x0518, 0x051e, 0x0532, + // Entry 80 - BF + 0x0541, 0x054f, 0x0555, 0x0562, 0x056c, 0x0570, 0x0575, 0x0581, + 0x058d, 0x0597, 0x059d, 0x05a3, 0x05aa, 0x05b4, 0x05ba, 0x05be, + 0x05c3, 0x05c9, 0x05d0, 0x05d8, 0x05e4, 0x05ee, 0x05fd, 0x0605, + 0x0609, 0x0618, 0x061f, 0x062c, 0x0646, 0x0650, 0x0659, 0x0662, + 0x0668, 0x0671, 0x0678, 0x067e, 0x0686, 0x068d, 0x0695, 0x069b, + 0x06a9, 0x06ae, 0x06bd, 0x06c3, 0x06cc, 0x06d4, 0x06dc, 0x06e1, + 0x06e6, 0x06ea, 0x06f7, 0x06fb, 0x0701, 0x0705, 0x0717, 0x0729, + 0x0731, 0x0739, 0x073f, 0x0755, 0x0763, 0x076d, 0x0783, 0x078c, + // Entry C0 - FF + 0x0791, 0x0799, 0x079e, 0x07c2, 0x07c9, 0x07cf, 0x07d4, 0x07d8, + 0x07df, 0x07ed, 0x07fb, 0x0804, 0x0809, 0x080e, 0x0816, 0x0823, + 0x082b, 0x083f, 0x0847, 0x0852, 0x085c, 0x0863, 0x0869, 0x0871, + 0x087f, 0x0892, 0x089a, 0x08a5, 0x08a9, 0x08b4, 0x08c3, 0x08da, + 0x08de, 0x08f8, 0x08fc, 0x0905, 0x0910, 0x0917, 0x0922, 0x092e, + 0x0934, 0x0939, 0x093e, 0x094f, 0x0955, 0x095b, 0x0962, 0x096a, + 0x0971, 0x0990, 0x09a2, 0x09c3, 0x09ca, 0x09d4, 0x09db, 0x09f6, + 0x0a00, 0x0a1c, 0x0a38, 0x0a3f, 0x0a46, 0x0a55, 0x0a5a, 0x0a61, + // Entry 100 - 13F + 0x0a66, 0x0a6d, 0x0a7b, 0x0a81, 0x0a89, 0x0a93, 0x0a97, 0x0a9e, + 0x0aae, 0x0abd, 0x0ac3, 0x0ad6, 0x0ae6, 0x0af4, 0x0b02, 0x0b10, + 0x0b1d, 0x0b25, 0x0b34, 0x0b3b, 0x0b47, 0x0b52, 0x0b61, 0x0b6e, + 0x0b79, 0x0b82, 0x0b94, 0x0b9d, 0x0ba0, 0x0bad, 0x0bbe, 0x0bc5, + 0x0bd3, 0x0be1, 0x0bf4, 0x0c02, +} // Size: 608 bytes + +const srRegionStr string = "" + // Size: 5976 bytes + "Острво АсенсионАндораУједињени Арапски ЕмиратиАвганистанАнтигва и Барбуд" + + "аАнгвилаАлбанијаЈерменијаАнголаАнтарктикАргентинаАмеричка СамоаАустрија" + + "АустралијаАрубаОландска ОстрваАзербејџанБосна и ХерцеговинаБарбадосБанг" + + "ладешБелгијаБуркина ФасоБугарскаБахреинБурундиБенинСен БартелемиБермуда" + + "БрунејБоливијаКарипска ХоландијаБразилБахамиБутанОстрво БувеБоцванаБело" + + "русијаБелизеКанадаКокосова (Килингова) ОстрваКонго - КиншасаЦентралноаф" + + "ричка РепубликаКонго - БразавилШвајцарскаОбала СлоновачеКукова ОстрваЧи" + + "леКамерунКинаКолумбијаОстрво КлипертонКостарикаКубаЗеленортска ОстрваКу" + + "расаоБожићно ОстрвоКипарЧешкаНемачкаДијего ГарсијаЏибутиДанскаДоминикаД" + + "оминиканска РепубликаАлжирСеута и МелиљаЕквадорЕстонијаЕгипатЗападна Са" + + "хараЕритрејаШпанијаЕтиопијаЕвропска УнијаФинскаФиџиФокландска ОстрваМик" + + "ронезијаФарска ОстрваФранцускаГабонУједињено КраљевствоГренадаГрузијаФр" + + "анцуска ГвајанаГернзиГанаГибралтарГренландГамбијаГвинејаГваделупЕкватор" + + "ијална ГвинејаГрчкаЈужна Џорџија и Јужна Сендвичка ОстрваГватемалаГуамГ" + + "винеја-БисаоГвајанаСАР Хонгконг (Кина)Острво Херд и Мекдоналдова острва" + + "ХондурасХрватскаХаитиМађарскаКанарска ОстрваИндонезијаИрскаИзраелОстрво" + + " МанИндијаБританска територија Индијског океанаИракИранИсландИталијаЏерз" + + "иЈамајкаЈорданЈапанКенијаКиргистанКамбоџаКирибатиКоморска ОстрваСент Ки" + + "тс и НевисСеверна КорејаЈужна КорејаКувајтКајманска ОстрваКазахстанЛаос" + + "ЛибанСвета ЛуцијаЛихтенштајнШри ЛанкаЛиберијаЛесотоЛитванијаЛуксембургЛ" + + "етонијаЛибијаМарокоМонакоМолдавијаЦрна ГораСвети Мартин (Француска)Мада" + + "гаскарМаршалска ОстрваМакедонијаМалиМијанмар (Бурма)МонголијаСАР Макао " + + "(Кина)Северна Маријанска ОстрваМартиникМауританијаМонсератМалтаМаурицију" + + "сМалдивиМалавиМексикоМалезијаМозамбикНамибијаНова КаледонијаНигерОстрво" + + " НорфокНигеријаНикарагваХоландијаНорвешкаНепалНауруНиуеНови ЗеландОманПа" + + "намаПеруФранцуска ПолинезијаПапуа Нова ГвинејаФилипиниПакистанПољскаСен" + + " Пјер и МикелонПиткернПорторикоПалестинске територијеПортугалијаПалауПар" + + "агвајКатарОкеанија (удаљена острва)РеинионРумунијаСрбијаРусијаРуандаСау" + + "дијска АрабијаСоломонска ОстрваСејшелиСуданШведскаСингапурСвета ЈеленаС" + + "ловенијаСвалбард и Јан МајенСловачкаСијера ЛеонеСан МариноСенегалСомали" + + "јаСуринамЈужни СуданСао Томе и ПринципеСалвадорСвети Мартин (Холандија)" + + "СиријаСвазилендТристан да КуњаОстрва Туркс и КаикосЧадФранцуске Јужне Т" + + "ериторијеТогоТајландТаџикистанТокелауИсточни ТиморТуркменистанТунисТонг" + + "аТурскаТринидад и ТобагоТувалуТајванТанзанијаУкрајинаУгандаУдаљена остр" + + "ва САДУједињене нацијеСједињене ДржавеУругвајУзбекистанВатиканСент Винс" + + "ент и ГренадиниВенецуелаБританска Девичанска ОстрваАмеричка Девичанска " + + "ОстрваВијетнамВануатуВалис и ФутунаСамоаКосовоЈеменМајотЈужноафричка Ре" + + "публикаЗамбијаЗимбабвеНепознат регионсветАфрикаСеверноамерички континен" + + "тЈужна АмерикаОкеанијаЗападна АфрикаЦентрална АмерикаИсточна АфрикаСеве" + + "рна АфрикаЦентрална АфрикаЈужна АфрикаСеверна и Јужна АмерикаСеверна Ам" + + "ерикаКарибиИсточна АзијаЈужна АзијаЈугоисточна АзијаЈужна ЕвропаАустрал" + + "ија и Нови ЗеландМеланезијаМикронезијски регионПолинезијаАзијаЦентрална" + + " АзијаЗападна АзијаЕвропаИсточна ЕвропаСеверна ЕвропаЗападна ЕвропаЛатин" + + "ска Америка" + +var srRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001d, 0x0029, 0x0059, 0x006d, 0x008d, 0x009b, 0x00ab, + 0x00bd, 0x00c9, 0x00db, 0x00ed, 0x0108, 0x0118, 0x012c, 0x0136, + 0x0153, 0x0167, 0x018b, 0x019b, 0x01ad, 0x01bb, 0x01d2, 0x01e2, + 0x01f0, 0x01fe, 0x0208, 0x0221, 0x022f, 0x023b, 0x024b, 0x026e, + 0x027a, 0x0286, 0x0290, 0x02a5, 0x02b3, 0x02c7, 0x02d3, 0x02df, + 0x0311, 0x032c, 0x035f, 0x037c, 0x0390, 0x03ad, 0x03c6, 0x03ce, + 0x03dc, 0x03e4, 0x03f6, 0x0415, 0x0427, 0x042f, 0x0452, 0x0460, + 0x047b, 0x0485, 0x048f, 0x049d, 0x04b8, 0x04c4, 0x04d0, 0x04e0, + // Entry 40 - 7F + 0x050b, 0x0515, 0x052f, 0x053d, 0x054d, 0x0559, 0x0574, 0x0584, + 0x0592, 0x05a2, 0x05bd, 0x05bd, 0x05c9, 0x05d1, 0x05f2, 0x0608, + 0x0621, 0x0633, 0x063d, 0x0664, 0x0672, 0x0680, 0x06a1, 0x06ad, + 0x06b5, 0x06c7, 0x06d7, 0x06e5, 0x06f3, 0x0703, 0x072c, 0x0736, + 0x077d, 0x078f, 0x0797, 0x07b0, 0x07be, 0x07e0, 0x081e, 0x082e, + 0x083e, 0x0848, 0x0858, 0x0875, 0x0889, 0x0893, 0x089f, 0x08b2, + 0x08be, 0x0905, 0x090d, 0x0915, 0x0921, 0x092f, 0x0939, 0x0947, + 0x0953, 0x095d, 0x0969, 0x097b, 0x0989, 0x0999, 0x09b6, 0x09d5, + // Entry 80 - BF + 0x09f0, 0x0a07, 0x0a13, 0x0a32, 0x0a44, 0x0a4c, 0x0a56, 0x0a6d, + 0x0a83, 0x0a94, 0x0aa4, 0x0ab0, 0x0ac2, 0x0ad6, 0x0ae6, 0x0af2, + 0x0afe, 0x0b0a, 0x0b1c, 0x0b2d, 0x0b59, 0x0b6d, 0x0b8c, 0x0ba0, + 0x0ba8, 0x0bc5, 0x0bd7, 0x0bf3, 0x0c23, 0x0c33, 0x0c49, 0x0c59, + 0x0c63, 0x0c77, 0x0c85, 0x0c91, 0x0c9f, 0x0caf, 0x0cbf, 0x0ccf, + 0x0cec, 0x0cf6, 0x0d0f, 0x0d1f, 0x0d31, 0x0d43, 0x0d53, 0x0d5d, + 0x0d67, 0x0d6f, 0x0d84, 0x0d8c, 0x0d98, 0x0da0, 0x0dc7, 0x0de9, + 0x0df9, 0x0e09, 0x0e15, 0x0e36, 0x0e44, 0x0e56, 0x0e81, 0x0e97, + // Entry C0 - FF + 0x0ea1, 0x0eb1, 0x0ebb, 0x0ee9, 0x0ef7, 0x0f07, 0x0f13, 0x0f1f, + 0x0f2b, 0x0f4c, 0x0f6d, 0x0f7b, 0x0f85, 0x0f93, 0x0fa3, 0x0fba, + 0x0fcc, 0x0ff1, 0x1001, 0x1018, 0x102b, 0x1039, 0x1049, 0x1057, + 0x106c, 0x108f, 0x109f, 0x10cb, 0x10d7, 0x10e9, 0x1105, 0x112c, + 0x1132, 0x1164, 0x116c, 0x117a, 0x118e, 0x119c, 0x11b5, 0x11cd, + 0x11d7, 0x11e1, 0x11ed, 0x120d, 0x1219, 0x1225, 0x1237, 0x1247, + 0x1253, 0x1275, 0x1294, 0x12b3, 0x12c1, 0x12d5, 0x12e3, 0x1310, + 0x1322, 0x1356, 0x1388, 0x1398, 0x13a6, 0x13c0, 0x13ca, 0x13d6, + // Entry 100 - 13F + 0x13e0, 0x13ea, 0x1415, 0x1423, 0x1433, 0x1450, 0x1458, 0x1464, + 0x1495, 0x14ae, 0x14be, 0x14d9, 0x14fa, 0x1515, 0x1530, 0x154f, + 0x1566, 0x1591, 0x15ae, 0x15ba, 0x15d3, 0x15e8, 0x1609, 0x1620, + 0x164d, 0x1661, 0x1688, 0x169c, 0x16a6, 0x16c3, 0x16dc, 0x16e8, + 0x1703, 0x171e, 0x1739, 0x1758, +} // Size: 608 bytes + +const srLatnRegionStr string = "" + // Size: 3143 bytes + "Ostrvo AsensionAndoraUjedinjeni Arapski EmiratiAvganistanAntigva i Barbu" + + "daAngvilaAlbanijaJermenijaAngolaAntarktikArgentinaAmerička SamoaAustrija" + + "AustralijaArubaOlandska OstrvaAzerbejdžanBosna i HercegovinaBarbadosBang" + + "ladešBelgijaBurkina FasoBugarskaBahreinBurundiBeninSen BartelemiBermudaB" + + "runejBolivijaKaripska HolandijaBrazilBahamiButanOstrvo BuveBocvanaBeloru" + + "sijaBelizeKanadaKokosova (Kilingova) OstrvaKongo - KinšasaCentralnoafrič" + + "ka RepublikaKongo - BrazavilŠvajcarskaObala SlonovačeKukova OstrvaČileKa" + + "merunKinaKolumbijaOstrvo KlipertonKostarikaKubaZelenortska OstrvaKurasao" + + "Božićno OstrvoKiparČeškaNemačkaDijego GarsijaDžibutiDanskaDominikaDomini" + + "kanska RepublikaAlžirSeuta i MeliljaEkvadorEstonijaEgipatZapadna SaharaE" + + "ritrejaŠpanijaEtiopijaEvropska UnijaFinskaFidžiFoklandska OstrvaMikronez" + + "ijaFarska OstrvaFrancuskaGabonUjedinjeno KraljevstvoGrenadaGruzijaFrancu" + + "ska GvajanaGernziGanaGibraltarGrenlandGambijaGvinejaGvadelupEkvatorijaln" + + "a GvinejaGrčkaJužna Džordžija i Južna Sendvička OstrvaGvatemalaGuamGvine" + + "ja-BisaoGvajanaSAR Hongkong (Kina)Ostrvo Herd i Mekdonaldova ostrvaHondu" + + "rasHrvatskaHaitiMađarskaKanarska OstrvaIndonezijaIrskaIzraelOstrvo ManIn" + + "dijaBritanska teritorija Indijskog okeanaIrakIranIslandItalijaDžerziJama" + + "jkaJordanJapanKenijaKirgistanKambodžaKiribatiKomorska OstrvaSent Kits i " + + "NevisSeverna KorejaJužna KorejaKuvajtKajmanska OstrvaKazahstanLaosLibanS" + + "veta LucijaLihtenštajnŠri LankaLiberijaLesotoLitvanijaLuksemburgLetonija" + + "LibijaMarokoMonakoMoldavijaCrna GoraSveti Martin (Francuska)MadagaskarMa" + + "ršalska OstrvaMakedonijaMaliMijanmar (Burma)MongolijaSAR Makao (Kina)Sev" + + "erna Marijanska OstrvaMartinikMauritanijaMonseratMaltaMauricijusMaldiviM" + + "alaviMeksikoMalezijaMozambikNamibijaNova KaledonijaNigerOstrvo NorfokNig" + + "erijaNikaragvaHolandijaNorveškaNepalNauruNiueNovi ZelandOmanPanamaPeruFr" + + "ancuska PolinezijaPapua Nova GvinejaFilipiniPakistanPoljskaSen Pjer i Mi" + + "kelonPitkernPortorikoPalestinske teritorijePortugalijaPalauParagvajKatar" + + "Okeanija (udaljena ostrva)ReinionRumunijaSrbijaRusijaRuandaSaudijska Ara" + + "bijaSolomonska OstrvaSejšeliSudanŠvedskaSingapurSveta JelenaSlovenijaSva" + + "lbard i Jan MajenSlovačkaSijera LeoneSan MarinoSenegalSomalijaSurinamJuž" + + "ni SudanSao Tome i PrincipeSalvadorSveti Martin (Holandija)SirijaSvazile" + + "ndTristan da KunjaOstrva Turks i KaikosČadFrancuske Južne TeritorijeTogo" + + "TajlandTadžikistanTokelauIstočni TimorTurkmenistanTunisTongaTurskaTrinid" + + "ad i TobagoTuvaluTajvanTanzanijaUkrajinaUgandaUdaljena ostrva SADUjedinj" + + "ene nacijeSjedinjene DržaveUrugvajUzbekistanVatikanSent Vinsent i Grenad" + + "iniVenecuelaBritanska Devičanska OstrvaAmerička Devičanska OstrvaVijetna" + + "mVanuatuValis i FutunaSamoaKosovoJemenMajotJužnoafrička RepublikaZambija" + + "ZimbabveNepoznat regionsvetAfrikaSevernoamerički kontinentJužna AmerikaO" + + "keanijaZapadna AfrikaCentralna AmerikaIstočna AfrikaSeverna AfrikaCentra" + + "lna AfrikaJužna AfrikaSeverna i Južna AmerikaSeverna AmerikaKaribiIstočn" + + "a AzijaJužna AzijaJugoistočna AzijaJužna EvropaAustralija i Novi ZelandM" + + "elanezijaMikronezijski regionPolinezijaAzijaCentralna AzijaZapadna Azija" + + "EvropaIstočna EvropaSeverna EvropaZapadna EvropaLatinska Amerika" + +var srLatnRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x0015, 0x002f, 0x0039, 0x004a, 0x0051, 0x0059, + 0x0062, 0x0068, 0x0071, 0x007a, 0x0089, 0x0091, 0x009b, 0x00a0, + 0x00af, 0x00bb, 0x00ce, 0x00d6, 0x00e0, 0x00e7, 0x00f3, 0x00fb, + 0x0102, 0x0109, 0x010e, 0x011b, 0x0122, 0x0128, 0x0130, 0x0142, + 0x0148, 0x014e, 0x0153, 0x015e, 0x0165, 0x016f, 0x0175, 0x017b, + 0x0196, 0x01a6, 0x01c1, 0x01d1, 0x01dc, 0x01ec, 0x01f9, 0x01fe, + 0x0205, 0x0209, 0x0212, 0x0222, 0x022b, 0x022f, 0x0241, 0x0248, + 0x0258, 0x025d, 0x0264, 0x026c, 0x027a, 0x0282, 0x0288, 0x0290, + // Entry 40 - 7F + 0x02a6, 0x02ac, 0x02bb, 0x02c2, 0x02ca, 0x02d0, 0x02de, 0x02e6, + 0x02ee, 0x02f6, 0x0304, 0x0304, 0x030a, 0x0310, 0x0321, 0x032c, + 0x0339, 0x0342, 0x0347, 0x035d, 0x0364, 0x036b, 0x037c, 0x0382, + 0x0386, 0x038f, 0x0397, 0x039e, 0x03a5, 0x03ad, 0x03c2, 0x03c8, + 0x03f5, 0x03fe, 0x0402, 0x040f, 0x0416, 0x0429, 0x044a, 0x0452, + 0x045a, 0x045f, 0x0468, 0x0477, 0x0481, 0x0486, 0x048c, 0x0496, + 0x049c, 0x04c1, 0x04c5, 0x04c9, 0x04cf, 0x04d6, 0x04dd, 0x04e4, + 0x04ea, 0x04ef, 0x04f5, 0x04fe, 0x0507, 0x050f, 0x051e, 0x052f, + // Entry 80 - BF + 0x053d, 0x054a, 0x0550, 0x0560, 0x0569, 0x056d, 0x0572, 0x057e, + 0x058a, 0x0594, 0x059c, 0x05a2, 0x05ab, 0x05b5, 0x05bd, 0x05c3, + 0x05c9, 0x05cf, 0x05d8, 0x05e1, 0x05f9, 0x0603, 0x0614, 0x061e, + 0x0622, 0x0632, 0x063b, 0x064b, 0x0664, 0x066c, 0x0677, 0x067f, + 0x0684, 0x068e, 0x0695, 0x069b, 0x06a2, 0x06aa, 0x06b2, 0x06ba, + 0x06c9, 0x06ce, 0x06db, 0x06e3, 0x06ec, 0x06f5, 0x06fe, 0x0703, + 0x0708, 0x070c, 0x0717, 0x071b, 0x0721, 0x0725, 0x0739, 0x074b, + 0x0753, 0x075b, 0x0762, 0x0774, 0x077b, 0x0784, 0x079a, 0x07a5, + // Entry C0 - FF + 0x07aa, 0x07b2, 0x07b7, 0x07d1, 0x07d8, 0x07e0, 0x07e6, 0x07ec, + 0x07f2, 0x0803, 0x0814, 0x081c, 0x0821, 0x0829, 0x0831, 0x083d, + 0x0846, 0x085a, 0x0863, 0x086f, 0x0879, 0x0880, 0x0888, 0x088f, + 0x089b, 0x08ae, 0x08b6, 0x08ce, 0x08d4, 0x08dd, 0x08ed, 0x0902, + 0x0906, 0x0921, 0x0925, 0x092c, 0x0938, 0x093f, 0x094d, 0x0959, + 0x095e, 0x0963, 0x0969, 0x097a, 0x0980, 0x0986, 0x098f, 0x0997, + 0x099d, 0x09b0, 0x09c1, 0x09d3, 0x09da, 0x09e4, 0x09eb, 0x0a03, + 0x0a0c, 0x0a28, 0x0a44, 0x0a4c, 0x0a53, 0x0a61, 0x0a66, 0x0a6c, + // Entry 100 - 13F + 0x0a71, 0x0a76, 0x0a8e, 0x0a95, 0x0a9d, 0x0aac, 0x0ab0, 0x0ab6, + 0x0ad0, 0x0ade, 0x0ae6, 0x0af4, 0x0b05, 0x0b14, 0x0b22, 0x0b32, + 0x0b3f, 0x0b57, 0x0b66, 0x0b6c, 0x0b7a, 0x0b86, 0x0b98, 0x0ba5, + 0x0bbd, 0x0bc7, 0x0bdb, 0x0be5, 0x0bea, 0x0bf9, 0x0c06, 0x0c0c, + 0x0c1b, 0x0c29, 0x0c37, 0x0c47, +} // Size: 608 bytes + +const svRegionStr string = "" + // Size: 2921 bytes + "AscensionAndorraFörenade ArabemiratenAfghanistanAntigua och BarbudaAngui" + + "llaAlbanienArmenienAngolaAntarktisArgentinaAmerikanska SamoaÖsterrikeAus" + + "tralienArubaÅlandAzerbajdzjanBosnien och HercegovinaBarbadosBangladeshBe" + + "lgienBurkina FasoBulgarienBahrainBurundiBeninS:t BarthélemyBermudaBrunei" + + "BoliviaKaribiska NederländernaBrasilienBahamasBhutanBouvetönBotswanaVitr" + + "ysslandBelizeKanadaKokosöarnaKongo-KinshasaCentralafrikanska republikenK" + + "ongo-BrazzavilleSchweizElfenbenskustenCooköarnaChileKamerunKinaColombiaC" + + "lippertonönCosta RicaKubaKap VerdeCuraçaoJulönCypernTjeckienTysklandDieg" + + "o GarciaDjiboutiDanmarkDominicaDominikanska republikenAlgerietCeuta och " + + "MelillaEcuadorEstlandEgyptenVästsaharaEritreaSpanienEtiopienEuropeiska u" + + "nionenFinlandFijiFalklandsöarnaMikronesienFäröarnaFrankrikeGabonStorbrit" + + "annienGrenadaGeorgienFranska GuyanaGuernseyGhanaGibraltarGrönlandGambiaG" + + "uineaGuadeloupeEkvatorialguineaGreklandSydgeorgien och SydsandwichöarnaG" + + "uatemalaGuamGuinea-BissauGuyanaHongkong, S.A.R. KinaHeardön och McDonald" + + "öarnaHondurasKroatienHaitiUngernKanarieöarnaIndonesienIrlandIsraelIsle " + + "of ManIndienBrittiska territoriet i Indiska oceanenIrakIranIslandItalien" + + "JerseyJamaicaJordanienJapanKenyaKirgizistanKambodjaKiribatiKomorernaS:t " + + "Kitts och NevisNordkoreaSydkoreaKuwaitCaymanöarnaKazakstanLaosLibanonS:t" + + " LuciaLiechtensteinSri LankaLiberiaLesothoLitauenLuxemburgLettlandLibyen" + + "MarockoMonacoMoldavienMontenegroSaint-MartinMadagaskarMarshallöarnaMaked" + + "onienMaliMyanmar (Burma)MongolietMacao, S.A.R. KinaNordmarianernaMartini" + + "queMauretanienMontserratMaltaMauritiusMaldivernaMalawiMexikoMalaysiaMoça" + + "mbiqueNamibiaNya KaledonienNigerNorfolkönNigeriaNicaraguaNederländernaNo" + + "rgeNepalNauruNiueNya ZeelandOmanPanamaPeruFranska PolynesienPapua Nya Gu" + + "ineaFilippinernaPakistanPolenS:t Pierre och MiquelonPitcairnöarnaPuerto " + + "RicoPalestinska territoriernaPortugalPalauParaguayQataryttre öar i Ocean" + + "ienRéunionRumänienSerbienRysslandRwandaSaudiarabienSalomonöarnaSeychelle" + + "rnaSudanSverigeSingaporeS:t HelenaSlovenienSvalbard och Jan MayenSlovaki" + + "enSierra LeoneSan MarinoSenegalSomaliaSurinamSydsudanSão Tomé och Prínci" + + "peEl SalvadorSint MaartenSyrienSwazilandTristan da CunhaTurks- och Caico" + + "söarnaTchadFranska sydterritoriernaTogoThailandTadzjikistanTokelauÖsttim" + + "orTurkmenistanTunisienTongaTurkietTrinidad och TobagoTuvaluTaiwanTanzani" + + "aUkrainaUgandaUSA:s yttre öarFörenta NationernaUSAUruguayUzbekistanVatik" + + "anstatenS:t Vincent och GrenadinernaVenezuelaBrittiska JungfruöarnaAmeri" + + "kanska JungfruöarnaVietnamVanuatuWallis- och FutunaöarnaSamoaKosovoJemen" + + "MayotteSydafrikaZambiaZimbabweokänd regionvärldenAfrikaNordamerikaSydame" + + "rikaOceanienVästafrikaCentralamerikaÖstafrikaNordafrikaCentralafrikasödr" + + "a AfrikaNord- och Sydamerikanorra AmerikaKaribienÖstasienSydasienSydosta" + + "sienSydeuropaAustralasienMelanesienMikronesiska öarnaPolynesienAsienCent" + + "ralasienVästasienEuropaÖsteuropaNordeuropaVästeuropaLatinamerika" + +var svRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0010, 0x0026, 0x0031, 0x0044, 0x004c, 0x0054, + 0x005c, 0x0062, 0x006b, 0x0074, 0x0085, 0x008f, 0x0099, 0x009e, + 0x00a4, 0x00b0, 0x00c7, 0x00cf, 0x00d9, 0x00e0, 0x00ec, 0x00f5, + 0x00fc, 0x0103, 0x0108, 0x0117, 0x011e, 0x0124, 0x012b, 0x0143, + 0x014c, 0x0153, 0x0159, 0x0162, 0x016a, 0x0175, 0x017b, 0x0181, + 0x018c, 0x019a, 0x01b6, 0x01c7, 0x01ce, 0x01dd, 0x01e7, 0x01ec, + 0x01f3, 0x01f7, 0x01ff, 0x020c, 0x0216, 0x021a, 0x0223, 0x022b, + 0x0231, 0x0237, 0x023f, 0x0247, 0x0253, 0x025b, 0x0262, 0x026a, + // Entry 40 - 7F + 0x0281, 0x0289, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02ba, 0x02c1, + 0x02c8, 0x02d0, 0x02e2, 0x02e2, 0x02e9, 0x02ed, 0x02fc, 0x0307, + 0x0311, 0x031a, 0x031f, 0x032d, 0x0334, 0x033c, 0x034a, 0x0352, + 0x0357, 0x0360, 0x0369, 0x036f, 0x0375, 0x037f, 0x038f, 0x0397, + 0x03b8, 0x03c1, 0x03c5, 0x03d2, 0x03d8, 0x03ed, 0x0408, 0x0410, + 0x0418, 0x041d, 0x0423, 0x0430, 0x043a, 0x0440, 0x0446, 0x0451, + 0x0457, 0x047e, 0x0482, 0x0486, 0x048c, 0x0493, 0x0499, 0x04a0, + 0x04a9, 0x04ae, 0x04b3, 0x04be, 0x04c6, 0x04ce, 0x04d7, 0x04ea, + // Entry 80 - BF + 0x04f3, 0x04fb, 0x0501, 0x050d, 0x0516, 0x051a, 0x0521, 0x052a, + 0x0537, 0x0540, 0x0547, 0x054e, 0x0555, 0x055e, 0x0566, 0x056c, + 0x0573, 0x0579, 0x0582, 0x058c, 0x0598, 0x05a2, 0x05b0, 0x05ba, + 0x05be, 0x05cd, 0x05d6, 0x05e8, 0x05f6, 0x0600, 0x060b, 0x0615, + 0x061a, 0x0623, 0x062d, 0x0633, 0x0639, 0x0641, 0x064c, 0x0653, + 0x0661, 0x0666, 0x0670, 0x0677, 0x0680, 0x068e, 0x0693, 0x0698, + 0x069d, 0x06a1, 0x06ac, 0x06b0, 0x06b6, 0x06ba, 0x06cc, 0x06dc, + 0x06e8, 0x06f0, 0x06f5, 0x070c, 0x071a, 0x0725, 0x073e, 0x0746, + // Entry C0 - FF + 0x074b, 0x0753, 0x0758, 0x076d, 0x0775, 0x077e, 0x0785, 0x078d, + 0x0793, 0x079f, 0x07ac, 0x07b8, 0x07bd, 0x07c4, 0x07cd, 0x07d7, + 0x07e0, 0x07f6, 0x07ff, 0x080b, 0x0815, 0x081c, 0x0823, 0x082a, + 0x0832, 0x084a, 0x0855, 0x0861, 0x0867, 0x0870, 0x0880, 0x0897, + 0x089c, 0x08b4, 0x08b8, 0x08c0, 0x08cc, 0x08d3, 0x08dc, 0x08e8, + 0x08f0, 0x08f5, 0x08fc, 0x090f, 0x0915, 0x091b, 0x0923, 0x092a, + 0x0930, 0x0940, 0x0953, 0x0956, 0x095d, 0x0967, 0x0974, 0x0990, + 0x0999, 0x09b0, 0x09c9, 0x09d0, 0x09d7, 0x09ef, 0x09f4, 0x09fa, + // Entry 100 - 13F + 0x09ff, 0x0a06, 0x0a0f, 0x0a15, 0x0a1d, 0x0a2a, 0x0a32, 0x0a38, + 0x0a43, 0x0a4d, 0x0a55, 0x0a60, 0x0a6e, 0x0a78, 0x0a82, 0x0a8f, + 0x0a9c, 0x0ab0, 0x0abd, 0x0ac5, 0x0ace, 0x0ad6, 0x0ae1, 0x0aea, + 0x0af6, 0x0b00, 0x0b13, 0x0b1d, 0x0b22, 0x0b2e, 0x0b38, 0x0b3e, + 0x0b48, 0x0b52, 0x0b5d, 0x0b69, +} // Size: 608 bytes + +const swRegionStr string = "" + // Size: 3125 bytes + "Kisiwa cha AscensionAndoraFalme za KiarabuAfghanistanAntigua na BarbudaA" + + "nguillaAlbaniaArmeniaAngolaAntaktikaAjentinaSamoa ya MarekaniAustriaAust" + + "raliaArubaVisiwa vya AlandiAzerbaijanBosnia na HezegovinaBabadosiBanglad" + + "eshiUbelgijiBukinafasoBulgariaBahareniBurundiBeninSantabathelemiBermudaB" + + "runeiBoliviaUholanzi ya KaribianiBraziliBahamaBhutanKisiwa cha BouvetBot" + + "swanaBelarusiBelizeKanadaVisiwa vya Cocos (Keeling)Jamhuri ya Kidemokras" + + "ia ya KongoJamhuri ya Afrika ya KatiKongo - BrazzavilleUswisiCôte d’Ivoi" + + "reVisiwa vya CookChileKameruniChinaKolombiaKisiwa cha ClippertonKostarik" + + "aKubaCape VerdeKurakaoKisiwa cha KrismasiCyprusJamhuri ya ChekiUjerumani" + + "Diego GarciaJibutiDenmarkDominikaJamhuri ya DominikaAljeriaCeuta na Meli" + + "llaEkwadoEstoniaMisriSahara MagharibiEritreaHispaniaEthiopiaUmoja wa Ula" + + "yaUfiniFijiVisiwa vya FalklandMikronesiaVisiwa vya FaroeUfaransaGabonUin" + + "gerezaGrenadaJojiaGwiyana ya UfaransaGuernseyGhanaJibraltaGrinlandiGambi" + + "aGineGuadeloupeGinekwetaUgirikiJojia Kusini na Visiwa vya Sandwich Kusin" + + "iGuatemalaGuamGinebisauGuyanaHong Kong SAR ChinaKisiwa cha Heard na Visi" + + "wa vya McDonaldHondurasiKorasiaHaitiHungariaVisiwa vya KanariIndonesiaAy" + + "alandiIsraeliIsle of ManIndiaEneo la Uingereza katika Bahari HindiIrakiI" + + "ranAislandiItaliaJerseyJamaikaJordanJapaniKenyaKirigizistaniKambodiaKiri" + + "batiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitVisiwa vya" + + " KaymanKazakistaniLaosiLebanonSantalusiaLiechtensteinSri LankaLiberiaLes" + + "otoLithuaniaLuxembourgLatviaLibyaMoroccoMonakoMoldovaMontenegroSaint Mar" + + "tinMadagaskaVisiwa vya MarshallMacedoniaMaliMyanmar (Burma)MongoliaMacau" + + " SAR ChinaVisiwa vya Mariana vya KaskaziniMartinikiMoritaniaMontserratiM" + + "altaMorisiMaldivesMalawiMeksikoMalesiaMsumbijiNamibiaNyukaledoniaNigerKi" + + "siwa cha NorfolkNigeriaNikaragwaUholanziNorwayNepalNauruNiueNyuzilandiOm" + + "anPanamaPeruPolinesia ya UfaransaPapua New GuineaUfilipinoPakistaniPolan" + + "diSantapierre na MiquelonVisiwa vya PitcairnPuerto RicoMaeneo ya Palesti" + + "naUrenoPalauParagwaiQatarOceania ya NjeRiyunioniRomaniaSerbiaUrusiRwanda" + + "SaudiaVisiwa vya SolomonUshelisheliSudanUswidiSingaporeSantahelenaSloven" + + "iaSvalbard na Jan MayenSlovakiaSiera LeoniSan MarinoSenegaliSomaliaSurin" + + "amuSudan KusiniSão Tomé na PríncipeElsavadoSint MaartenSyriaUswaziTrista" + + "n da CunhaVisiwa vya Turki na KaikoChadMaeneo ya Kusini ya UfaransaTogoT" + + "ailandiTajikistaniTokelauTimor-LesteTurukimenistaniTunisiaTongaUturukiTr" + + "inidad na TobagoTuvaluTaiwanTanzaniaUkraineUgandaVisiwa Vidogo vya Nje v" + + "ya MarekaniUmoja wa MataifaMarekaniUrugwaiUzibekistaniVatikaniSantavisen" + + "ti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa vya Virgin" + + " vya MarekaniVietnamVanuatuWalis na FutunaSamoaKosovoYemeniMayotteAfrika" + + " KusiniZambiaZimbabweEneo lisilojulikanaDuniaAfrikaAmerika KaskaziniAmer" + + "ika KusiniOceaniaAfrika ya MagharibiAmerika ya KatiAfrika ya MasharikiAf" + + "rika ya KaskaziniAfrika ya KatiAfrika ya KusiniAmerikaAmerika ya Kaskazi" + + "niKaribianiAsia ya MasharikiAsia ya KusiniAsia ya Kusini MasharikiUlaya " + + "ya KusiniAustralasiaMelanesiaEneo la MikronesiaPolynesiaAsiaAsia ya Kati" + + "Asia ya MagharibiUlayaUlaya ya MasharikiUlaya ya KaskaziniUlaya ya Magha" + + "ribiAmerika ya Kilatini" + +var swRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0014, 0x001a, 0x002a, 0x0035, 0x0047, 0x004f, 0x0056, + 0x005d, 0x0063, 0x006c, 0x0074, 0x0085, 0x008c, 0x0095, 0x009a, + 0x00ab, 0x00b5, 0x00c9, 0x00d1, 0x00dc, 0x00e4, 0x00ee, 0x00f6, + 0x00fe, 0x0105, 0x010a, 0x0118, 0x011f, 0x0125, 0x012c, 0x0141, + 0x0148, 0x014e, 0x0154, 0x0165, 0x016d, 0x0175, 0x017b, 0x0181, + 0x019b, 0x01bb, 0x01d4, 0x01e7, 0x01ed, 0x01fd, 0x020c, 0x0211, + 0x0219, 0x021e, 0x0226, 0x023b, 0x0244, 0x0248, 0x0252, 0x0259, + 0x026c, 0x0272, 0x0282, 0x028b, 0x0297, 0x029d, 0x02a4, 0x02ac, + // Entry 40 - 7F + 0x02bf, 0x02c6, 0x02d6, 0x02dc, 0x02e3, 0x02e8, 0x02f8, 0x02ff, + 0x0307, 0x030f, 0x031d, 0x031d, 0x0322, 0x0326, 0x0339, 0x0343, + 0x0353, 0x035b, 0x0360, 0x0369, 0x0370, 0x0375, 0x0388, 0x0390, + 0x0395, 0x039d, 0x03a6, 0x03ac, 0x03b0, 0x03ba, 0x03c3, 0x03ca, + 0x03f4, 0x03fd, 0x0401, 0x040a, 0x0410, 0x0423, 0x044a, 0x0453, + 0x045a, 0x045f, 0x0467, 0x0478, 0x0481, 0x0489, 0x0490, 0x049b, + 0x04a0, 0x04c5, 0x04ca, 0x04ce, 0x04d6, 0x04dc, 0x04e2, 0x04e9, + 0x04ef, 0x04f5, 0x04fa, 0x0507, 0x050f, 0x0517, 0x051d, 0x0530, + // Entry 80 - BF + 0x053f, 0x054b, 0x0551, 0x0562, 0x056d, 0x0572, 0x0579, 0x0583, + 0x0590, 0x0599, 0x05a0, 0x05a6, 0x05af, 0x05b9, 0x05bf, 0x05c4, + 0x05cb, 0x05d1, 0x05d8, 0x05e2, 0x05ee, 0x05f7, 0x060a, 0x0613, + 0x0617, 0x0626, 0x062e, 0x063d, 0x065d, 0x0666, 0x066f, 0x067a, + 0x067f, 0x0685, 0x068d, 0x0693, 0x069a, 0x06a1, 0x06a9, 0x06b0, + 0x06bc, 0x06c1, 0x06d3, 0x06da, 0x06e3, 0x06eb, 0x06f1, 0x06f6, + 0x06fb, 0x06ff, 0x0709, 0x070d, 0x0713, 0x0717, 0x072c, 0x073c, + 0x0745, 0x074e, 0x0755, 0x076c, 0x077f, 0x078a, 0x079d, 0x07a2, + // Entry C0 - FF + 0x07a7, 0x07af, 0x07b4, 0x07c2, 0x07cb, 0x07d2, 0x07d8, 0x07dd, + 0x07e3, 0x07e9, 0x07fb, 0x0806, 0x080b, 0x0811, 0x081a, 0x0825, + 0x082d, 0x0842, 0x084a, 0x0855, 0x085f, 0x0867, 0x086e, 0x0876, + 0x0882, 0x0899, 0x08a1, 0x08ad, 0x08b2, 0x08b8, 0x08c8, 0x08e1, + 0x08e5, 0x0901, 0x0905, 0x090d, 0x0918, 0x091f, 0x092a, 0x0939, + 0x0940, 0x0945, 0x094c, 0x095e, 0x0964, 0x096a, 0x0972, 0x0979, + 0x097f, 0x09a1, 0x09b1, 0x09b9, 0x09c0, 0x09cc, 0x09d4, 0x09ed, + 0x09f6, 0x0a15, 0x0a33, 0x0a3a, 0x0a41, 0x0a50, 0x0a55, 0x0a5b, + // Entry 100 - 13F + 0x0a61, 0x0a68, 0x0a75, 0x0a7b, 0x0a83, 0x0a96, 0x0a9b, 0x0aa1, + 0x0ab2, 0x0ac0, 0x0ac7, 0x0ada, 0x0ae9, 0x0afc, 0x0b0f, 0x0b1d, + 0x0b2d, 0x0b34, 0x0b48, 0x0b51, 0x0b62, 0x0b70, 0x0b88, 0x0b97, + 0x0ba2, 0x0bab, 0x0bbd, 0x0bc6, 0x0bca, 0x0bd6, 0x0be7, 0x0bec, + 0x0bfe, 0x0c10, 0x0c22, 0x0c35, +} // Size: 608 bytes + +const taRegionStr string = "" + // Size: 9564 bytes + "அஷன்ஷியன் தீவுஅன்டோராஐக்கிய அரபு எமிரேட்ஸ்ஆப்கானிஸ்தான்ஆண்டிகுவா மற்றும்" + + " பார்புடாஅங்குய்லாஅல்பேனியாஅர்மேனியாஅங்கோலாஅண்டார்டிகாஅர்ஜென்டினாஅமெரிக்" + + "க சமோவாஆஸ்திரியாஆஸ்திரேலியாஅரூபாஆலந்து தீவுகள்அசர்பைஜான்போஸ்னியா & ஹெர" + + "்ஸகோவினாபார்படோஸ்பங்களாதேஷ்பெல்ஜியம்புர்கினா ஃபாஸோபல்கேரியாபஹ்ரைன்புரு" + + "ண்டிபெனின்செயின்ட் பார்தேலெமிபெர்முடாபுருனேபொலிவியாகரீபியன் நெதர்லாந்த" + + "ுபிரேசில்பஹாமாஸ்பூடான்பொவேட் தீவுகள்போட்ஸ்வானாபெலாரூஸ்பெலிஸ்கனடாகோகோஸ்" + + " (கீலிங்) தீவுகள்காங்கோ - கின்ஷாசாமத்திய ஆப்ரிக்கக் குடியரசுகாங்கோ - ப்ர" + + "ாஸாவில்லேஸ்விட்சர்லாந்துகோட் தி’வாயர்குக் தீவுகள்சிலிகேமரூன்சீனாகொலம்ப" + + "ியாகிலிப்பர்டன் தீவுகோஸ்டாரிகாகியூபாகேப் வெர்டேகுராகவ்கிறிஸ்துமஸ் தீவு" + + "சைப்ரஸ்செக் குடியரசுஜெர்மனிடியகோ கார்ஷியாஜிபௌட்டிடென்மார்க்டொமினிகாடொம" + + "ினிகன் குடியரசுஅல்ஜீரியாசியூடா & மெலில்லாஈக்வடார்எஸ்டோனியாஎகிப்துமேற்க" + + "ு சஹாராஎரிட்ரியாஸ்பெயின்எத்தியோப்பியாஐரோப்பிய யூனியன்பின்லாந்துஃபிஜிஃப" + + "ாக்லாந்து தீவுகள்மைக்ரோனேஷியாஃபாரோ தீவுகள்பிரான்ஸ்கேபான்யுனைடெட் கிங்ட" + + "ம்கிரனெடாஜார்ஜியாபிரெஞ்சு கயானாகெர்ன்சிகானாஜிப்ரால்டர்கிரீன்லாந்துகாம்" + + "பியாகினியாக்வாதேலோப்ஈக்வடோரியல் கினியாகிரீஸ்தெற்கு ஜார்ஜியா மற்றும் தெ" + + "ற்கு சாண்ட்விச் தீவுகள்கவுதமாலாகுவாம்கினியா-பிஸ்ஸாவ்கயானாஹாங்காங் எஸ்ஏ" + + "ஆர் சீனாஹேர்ட் மற்றும் மெக்டொனால்டு தீவுகள்ஹோண்டூராஸ்குரேஷியாஹைட்டிஹங்" + + "கேரிகேனரி தீவுகள்இந்தோனேசியாஅயர்லாந்துஇஸ்ரேல்ஐல் ஆஃப் மேன்இந்தியாபிரிட" + + "்டிஷ் இந்தியப் பெருங்கடல் பிரதேசம்ஈராக்ஈரான்ஐஸ்லாந்துஇத்தாலிஜெர்சிஜமைக" + + "ாஜோர்டான்ஜப்பான்கென்யாகிர்கிஸ்தான்கம்போடியாகிரிபாட்டிகோமரோஸ்செயின்ட் க" + + "ிட்ஸ் & நெவிஸ்வட கொரியாதென் கொரியாகுவைத்கெய்மென் தீவுகள்கஸகஸ்தான்லாவோஸ" + + "்லெபனான்செயின்ட் லூசியாலிச்செண்ஸ்டெய்ன்இலங்கைலைபீரியாலெசோதோலிதுவேனியால" + + "க்ஸ்சம்பர்க்லாட்வியாலிபியாமொராக்கோமொனாக்கோமால்டோவாமான்டேனெக்ரோசெயின்ட்" + + " மார்ட்டீன்மடகாஸ்கர்மார்ஷல் தீவுகள்மாசிடோனியாமாலிமியான்மார் (பர்மா)மங்கோ" + + "லியாமகாவ் எஸ்ஏஆர் சீனாவடக்கு மரியானா தீவுகள்மார்டினிக்மௌரிடானியாமாண்ட்" + + "செராட்மால்டாமொரிசியஸ்மாலத்தீவுமலாவிமெக்சிகோமலேசியாமொசாம்பிக்நமீபியாநிய" + + "ூ கேலிடோனியாநைஜர்நார்ஃபோக் தீவுகள்நைஜீரியாநிகரகுவாநெதர்லாந்துநார்வேநேப" + + "ாளம்நௌருநியூநியூசிலாந்துஓமன்பனாமாபெருபிரெஞ்சு பாலினேஷியாபப்புவா நியூ க" + + "ினியாபிலிப்பைன்ஸ்பாகிஸ்தான்போலந்துசெயின்ட் பியர் & மிக்வேலான்பிட்கெய்ர" + + "்ன் தீவுகள்பியூர்டோ ரிகோபாலஸ்தீனிய பிரதேசங்கள்போர்ச்சுக்கல்பாலோபராகுவே" + + "கத்தார்வெளிப்புற ஓஷியானியாரீயூனியன்ருமேனியாசெர்பியாரஷ்யாருவாண்டாசவூதி " + + "அரேபியாசாலமன் தீவுகள்சீஷெல்ஸ்சூடான்ஸ்வீடன்சிங்கப்பூர்செயின்ட் ஹெலெனாஸ்" + + "லோவேனியாஸ்வல்பார்டு & ஜான் மேயன்ஸ்லோவாகியாசியாரா லியோன்சான் மரினோசெனெக" + + "ல்சோமாலியாசுரினாம்தெற்கு சூடான்சாவ் தோம் & ப்ரின்சிபிஎல் சால்வடார்சின்" + + "ட் மார்டென்சிரியாஸ்வாஸிலாந்துடிரிஸ்டன் டா குன்ஹாடர்க்ஸ் & கைகோஸ் தீவுக" + + "ள்சாட்பிரெஞ்சு தெற்கு பிரதேசங்கள்டோகோதாய்லாந்துதஜிகிஸ்தான்டோகேலோதைமூர்" + + "-லெஸ்தேதுர்க்மெனிஸ்தான்டுனிசியாடோங்காதுருக்கிடிரினிடாட் & டொபாகோதுவாலூதை" + + "வான்தான்சானியாஉக்ரைன்உகாண்டாயூ.எஸ். வெளிப்புறத் தீவுகள்ஐக்கிய நாடுகள்அ" + + "மெரிக்காஉருகுவேஉஸ்பெகிஸ்தான்வாடிகன் நகரம்செயின்ட் வின்சென்ட் & கிரெனடை" + + "ன்ஸ்வெனிசுலாபிரிட்டீஷ் கன்னித் தீவுகள்யூ.எஸ். கன்னித் தீவுகள்வியட்நாம்" + + "வனுவாட்டுவாலிஸ் மற்றும் ஃபுடுனாசமோவாகொசோவோஏமன்மயோட்தென் ஆப்பிரிக்காஜாம" + + "்பியாஜிம்பாப்வேஅறியப்படாத பிரதேசம்உலகம்ஆப்ரிக்காவட அமெரிக்காதென் அமெரி" + + "க்காஓஷியானியாமேற்கு ஆப்ரிக்காமத்திய அமெரிக்காகிழக்கு ஆப்ரிக்காவடக்கு ஆ" + + "ப்ரிக்காமத்திய ஆப்ரிக்காதெற்கு ஆப்ரிக்காஅமெரிக்காஸ்வடக்கு அமெரிக்காகரீ" + + "பியன்கிழக்காசியாதெற்காசியாதென்கிழக்காசியாதெற்கு ஐரோப்பாஆஸ்திரலேசியாமெல" + + "னேஷியாமைக்ரோ நேஷியா பிரதேசம்பாலினேஷியாஆசியாமத்திய ஆசியாமேற்காசியாஐரோப்" + + "பாகிழக்கு ஐரோப்பாவடக்கு ஐரோப்பாமேற்கு ஐரோப்பாலத்தீன் அமெரிக்கா" + +var taRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0028, 0x003d, 0x0078, 0x009f, 0x00e9, 0x0104, 0x011f, + 0x013a, 0x014f, 0x0170, 0x0191, 0x01b9, 0x01d4, 0x01f5, 0x0204, + 0x022c, 0x024a, 0x0286, 0x02a1, 0x02bf, 0x02da, 0x0302, 0x031d, + 0x0332, 0x034a, 0x035c, 0x0393, 0x03ab, 0x03bd, 0x03d5, 0x040f, + 0x0427, 0x043c, 0x044e, 0x0476, 0x0494, 0x04ac, 0x04be, 0x04ca, + 0x0507, 0x0534, 0x057e, 0x05b7, 0x05e4, 0x0609, 0x062b, 0x0637, + 0x064c, 0x0658, 0x0673, 0x06a4, 0x06c2, 0x06d4, 0x06f3, 0x0708, + 0x0736, 0x074b, 0x0770, 0x0785, 0x07ad, 0x07c5, 0x07e3, 0x07fb, + // Entry 40 - 7F + 0x082f, 0x084a, 0x0877, 0x088f, 0x08aa, 0x08bf, 0x08e1, 0x08fc, + 0x0914, 0x093b, 0x0969, 0x0969, 0x0987, 0x0996, 0x09cd, 0x09f1, + 0x0a16, 0x0a2e, 0x0a40, 0x0a6e, 0x0a83, 0x0a9b, 0x0ac3, 0x0adb, + 0x0ae7, 0x0b08, 0x0b2c, 0x0b44, 0x0b56, 0x0b74, 0x0ba8, 0x0bba, + 0x0c43, 0x0c5b, 0x0c6d, 0x0c98, 0x0ca7, 0x0ce2, 0x0d45, 0x0d63, + 0x0d7b, 0x0d8d, 0x0da2, 0x0dc7, 0x0de8, 0x0e06, 0x0e1b, 0x0e3e, + 0x0e53, 0x0ec2, 0x0ed1, 0x0ee0, 0x0efb, 0x0f10, 0x0f22, 0x0f31, + 0x0f49, 0x0f5e, 0x0f70, 0x0f94, 0x0faf, 0x0fcd, 0x0fe2, 0x1022, + // Entry 80 - BF + 0x103b, 0x105a, 0x106c, 0x109a, 0x10b5, 0x10c7, 0x10dc, 0x1107, + 0x1137, 0x1149, 0x1161, 0x1173, 0x1191, 0x11b8, 0x11d0, 0x11e2, + 0x11fa, 0x1212, 0x122a, 0x124e, 0x1285, 0x12a0, 0x12cb, 0x12e9, + 0x12f5, 0x1325, 0x1340, 0x1372, 0x13b0, 0x13ce, 0x13ec, 0x1410, + 0x1422, 0x143d, 0x1458, 0x1467, 0x147f, 0x1494, 0x14b2, 0x14c7, + 0x14f2, 0x1501, 0x1532, 0x154a, 0x1562, 0x1583, 0x1595, 0x15aa, + 0x15b6, 0x15c2, 0x15e6, 0x15f2, 0x1601, 0x160d, 0x1644, 0x1679, + 0x169d, 0x16bb, 0x16d0, 0x1719, 0x1753, 0x1778, 0x17b8, 0x17df, + // Entry C0 - FF + 0x17eb, 0x1800, 0x1815, 0x184c, 0x1867, 0x187f, 0x1897, 0x18a6, + 0x18be, 0x18e3, 0x190b, 0x1923, 0x1935, 0x194a, 0x196b, 0x1996, + 0x19b4, 0x19f4, 0x1a12, 0x1a37, 0x1a53, 0x1a68, 0x1a80, 0x1a98, + 0x1abd, 0x1af7, 0x1b1c, 0x1b47, 0x1b59, 0x1b7d, 0x1bb2, 0x1bf2, + 0x1bfe, 0x1c4b, 0x1c57, 0x1c75, 0x1c96, 0x1ca8, 0x1ccd, 0x1cfd, + 0x1d15, 0x1d27, 0x1d3f, 0x1d72, 0x1d84, 0x1d96, 0x1db4, 0x1dc9, + 0x1dde, 0x1e27, 0x1e4f, 0x1e6a, 0x1e7f, 0x1ea6, 0x1ecb, 0x1f26, + 0x1f3e, 0x1f88, 0x1fc5, 0x1fe0, 0x1ffb, 0x2039, 0x2048, 0x205a, + // Entry 100 - 13F + 0x2066, 0x2075, 0x20a3, 0x20bb, 0x20d9, 0x2110, 0x211f, 0x213a, + 0x215c, 0x2184, 0x219f, 0x21cd, 0x21fb, 0x222c, 0x225a, 0x2288, + 0x22b6, 0x22d7, 0x2305, 0x231d, 0x233e, 0x235c, 0x2389, 0x23b1, + 0x23d5, 0x23f0, 0x242e, 0x244c, 0x245b, 0x247d, 0x249b, 0x24b0, + 0x24db, 0x2503, 0x252b, 0x255c, +} // Size: 608 bytes + +const teRegionStr string = "" + // Size: 9323 bytes + "ఎసెషన్ దీవిఅండొర్రాయునైటెడ్ అరబ్ ఎమిరేట్స్ఆఫ్ఘనిస్తాన్ఆంటిగ్వా మరియు బార" + + "్బుడాఆంగవిల్లాఅల్బేనియాఆర్మేనియాఅంగోలాఅంటార్కటికాఅర్జెంటీనాఅమెరికన్ సమ" + + "ోవాఆస్ట్రియాఆస్ట్రేలియాఅరుబాఆలేండ్ దీవులుఅజర్బైజాన్బోస్నియా మరియు హెర్" + + "జెగొవీనాబార్బడోస్బంగ్లాదేశ్బెల్జియంబుర్కినా ఫాసోబల్గేరియాబహ్రెయిన్బురు" + + "ండిబెనిన్సెంట్ బర్తేలెమీబెర్ముడాబ్రూనైబొలీవియాకరీబియన్ నెదర్లాండ్స్బ్ర" + + "ెజిల్బహామాస్భూటాన్బొవెట్ దీవిబోట్స్వానాబెలారస్బెలిజ్కెనడాకోకోస్ (కీలిం" + + "గ్) దీవులుకాంగో- కిన్షాసాసెంట్రల్ ఆఫ్రికన్ రిపబ్లిక్కాంగో- బ్రాజావిల్ల" + + "ిస్విట్జర్లాండ్కోటెడ్ ఐవోయిర్కుక్ దీవులుచిలీకామెరూన్చైనాకొలంబియాక్లిప్" + + "పర్టన్ దీవికోస్టా రికాక్యూబాకేప్ వెర్డేకురాకవోక్రిస్మస్ దీవిసైప్రస్చెక" + + "్ రిపబ్లిక్జర్మనీడియాగో గార్సియాజిబౌటిడెన్మార్క్డొమెనికాడొమెనికన్ రిపబ" + + "్లిక్అల్జీరియాస్యూటా & మెలిల్లాఈక్వడార్ఎస్టోనియాఈజిప్ట్పడమటి సహారాఎరిట" + + "్రియాస్పెయిన్ఇథియోపియాయూరోపియన్ యూనియన్ఫిన్లాండ్ఫిజీఫాక్\u200cల్యాండ్ " + + "దీవులుమైక్రోనేషియాఫారో దీవులుఫ్రాన్స్\u200cగాబన్యునైటెడ్ కింగ్\u200cడమ" + + "్గ్రెనెడాజార్జియాఫ్రెంచ్ గియానాగ్వేర్నసేఘనాజిబ్రాల్టార్గ్రీన్\u200cలాం" + + "డ్గాంబియాగినియాగ్వాడేలోప్ఈక్వటోరియల్ గినియాగ్రీస్దక్షిణ జార్జియా & దక్" + + "షిణ శాండ్విచ్ దీవులుగ్వాటిమాలగ్వామ్గినియా-బిస్సావ్గయానాహాంకాంగ్ ఎస్ఏఆర" + + "్ చైనాహెర్డ్ & మెక్ డొనాల్డ్ దీవులుహోండురాస్క్రోయేషియాహైటిహంగేరీకేనరీ " + + "దీవులుఇండోనేషియాఐర్లాండ్ఇజ్రాయిల్ఐల్ ఆఫ్ మాన్భారత దేశంబ్రిటీష్ భారతీయ " + + "సముద్రపు ప్రాంతంఇరాక్ఇరాన్ఐస్లాండ్ఇటలీజెర్సీజమైకాజోర్డాన్జపాన్కెన్యాకి" + + "ర్గిజిస్తాన్కంబోడియాకిరిబాటికొమొరోస్సెంట్ కిట్ట్స్ మరియు నెవిస్ఉత్తర క" + + "ొరియాదక్షిణ కొరియాకువైట్కేమాన్ దీవులుకజకస్తాన్లావోస్లెబనాన్సెంట్ లూసియ" + + "ాలిక్టెస్టేన్శ్రీలంకలైబీరియాలెసోతోలిథువేనియాలక్సంబర్గ్లాత్వియాలిబియామొ" + + "రాకోమొనాకోమోల్డోవామోంటేనేగ్రోసెంట్ మార్టిన్మడగాస్కర్మార్షల్ దీవులుమేసి" + + "డోనియామాలిమయన్మార్ (బర్మా)మంగోలియామకావు ఎస్ఏఆర్ చైనాఉత్తర మరియానా దీవు" + + "లుమార్టినిక్మౌరిటేనియామోంట్సేర్రాట్మాల్టామారిషస్మాల్దీవులుమాలావిమెక్సి" + + "కోమలేషియామొజాంబిక్నమీబియాక్రొత్త కాలెడోనియానైజర్నార్ఫోక్ దీవినైజీరియాన" + + "ికరాగువానెదర్లాండ్స్నార్వేనేపాల్నౌరునియున్యూజిలాండ్ఒమన్పనామాపెరూఫ్రెంచ" + + "్ పోలినిషియాపాపువా న్యు గినియాఫిలిప్పీన్స్పాకిస్తాన్పోలాండ్సెంట్ పియెర" + + "్ మరియు మికెలాన్పిట్\u200cకెయిర్న్ దీవులుఫ్యూర్టో రికోపాలస్తీనియన్ ప్ర" + + "ాంతాలుపోర్చుగల్పలావుపరాగ్వేఖతర్ఒషీనియా బయటున్నవిరియూనియన్రోమానియాసెర్బ" + + "ియారష్యారువాండాసౌదీ అరేబియాసోలమన్ దీవులుసీషెల్స్సూడాన్స్వీడన్సింగపూర్స" + + "ెయింట్ హెలినాస్లోవేనియాస్వాల్బార్డ్ మరియు యాన్ మాయేన్స్లోవేకియాసియెర్ర" + + "ా లియాన్సాన్ మారినోసెనెగల్సోమాలియాసూరినామ్దక్షిణ సూడాన్సావోటోమ్ & ప్రి" + + "న్సిపేఎల్ సాల్వడోర్సింట్ మార్టెన్సిరియాస్వాజిల్యాండ్ట్రిస్టన్ డ కన్హాత" + + "ుర్క్ మరియు కాలికోస్ దీవులుచాద్ఫ్రెంచ్ దక్షిణ ప్రాంతాలుటోగోథాయిలాండ్తజ" + + "ికిస్తాన్టోకేలావ్టిమోర్-లెస్టెతుర్కమేనిస్తాన్ట్యునీషియాటోంగాటర్కీట్రిన" + + "ిడాడ్ మరియు టొబాగోటువాలుతైవాన్టాంజానియాఉక్రెయిన్ఉగాండాసంయుక్త రాజ్య అమ" + + "ెరికా బయట ఉన్న దీవులుయునైటెడ్ నేషన్స్అమెరికా సంయుక్త రాష్ట్రాలుఊరుగ్వే" + + "ఉజ్బెకిస్తాన్వాటికన్ నగరంసెంట్ విన్సెంట్ మరియు గ్రెనడీన్స్వెనుజులాబ్రి" + + "టిష్ వర్జిన్ దీవులుయు.ఎస్. వర్జిన్ దీవులువియత్నాంవనాటువాలిస్ & ఫ్యుత్య" + + "ునాసమోవాకొసోవోయెమెన్మాయొట్టిదక్షిణ ఆఫ్రికాజాంబియాజింబాబ్వేతెలియని ప్రా" + + "ంతంప్రపంచంఆఫ్రికాఉత్తర అమెరికాదక్షిణ అమెరికాఓషినియాపశ్చిమ ఆఫ్రికా భూభా" + + "గంమధ్యమ అమెరికాతూర్పు ఆఫ్రికాఉత్తర ఆఫ్రికామధ్యమ ఆఫ్రికాదక్షిణ ఆఫ్రికా " + + "భూభాగంఅమెరికాస్ఉత్తర అమెరికా భూభాగంకరిబ్బియన్తూర్పు ఆసియాదక్షిణ ఆసియాన" + + "ైరుతి ఆసియాదక్షిణ యూరోప్ఆస్ట్రేలేసియామెలనేశియమైక్రోనేశియ ప్రాంతంపాలినే" + + "షియాఆసియామధ్య ఆసియాపడమటి ఆసియాయూరోప్తూర్పు యూరోప్ఉత్తర యూరోప్పశ్చిమ యూ" + + "రోప్లాటిన్ అమెరికా" + +var teRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x001f, 0x0037, 0x0078, 0x009c, 0x00dd, 0x00f8, 0x0113, + 0x012e, 0x0140, 0x0161, 0x017f, 0x01a7, 0x01c2, 0x01e3, 0x01f2, + 0x0217, 0x0235, 0x0282, 0x029d, 0x02bb, 0x02d3, 0x02f8, 0x0313, + 0x032e, 0x0343, 0x0355, 0x0380, 0x0398, 0x03aa, 0x03c2, 0x03ff, + 0x0417, 0x042c, 0x043e, 0x045d, 0x047b, 0x0490, 0x04a2, 0x04b1, + 0x04ee, 0x0517, 0x0564, 0x0599, 0x05c3, 0x05eb, 0x060a, 0x0616, + 0x062e, 0x063a, 0x0652, 0x0683, 0x06a2, 0x06b4, 0x06d3, 0x06e8, + 0x0710, 0x0725, 0x074d, 0x075f, 0x078a, 0x079c, 0x07ba, 0x07d2, + // Entry 40 - 7F + 0x0809, 0x0824, 0x0851, 0x0869, 0x0884, 0x0899, 0x08b8, 0x08d3, + 0x08eb, 0x0906, 0x0937, 0x0937, 0x0952, 0x095e, 0x0995, 0x09b9, + 0x09d8, 0x09f3, 0x0a02, 0x0a36, 0x0a4e, 0x0a66, 0x0a8e, 0x0aa9, + 0x0ab2, 0x0ad6, 0x0afa, 0x0b0f, 0x0b21, 0x0b3f, 0x0b73, 0x0b85, + 0x0bf4, 0x0c0f, 0x0c21, 0x0c4c, 0x0c5b, 0x0c96, 0x0ce3, 0x0cfe, + 0x0d1c, 0x0d28, 0x0d3a, 0x0d5c, 0x0d7a, 0x0d92, 0x0dad, 0x0dcd, + 0x0de6, 0x0e40, 0x0e4f, 0x0e5e, 0x0e76, 0x0e82, 0x0e94, 0x0ea3, + 0x0ebb, 0x0eca, 0x0edc, 0x0f06, 0x0f1e, 0x0f36, 0x0f4e, 0x0f99, + // Entry 80 - BF + 0x0fbb, 0x0fe0, 0x0ff2, 0x1017, 0x1032, 0x1044, 0x1059, 0x107b, + 0x109f, 0x10b4, 0x10cc, 0x10de, 0x10fc, 0x111a, 0x1132, 0x1144, + 0x1156, 0x1168, 0x1180, 0x11a1, 0x11c9, 0x11e4, 0x120c, 0x122a, + 0x1236, 0x1260, 0x1278, 0x12aa, 0x12e2, 0x1300, 0x131e, 0x1345, + 0x1357, 0x136c, 0x138a, 0x139c, 0x13b4, 0x13c9, 0x13e4, 0x13f9, + 0x142d, 0x143c, 0x1461, 0x1479, 0x1494, 0x14b8, 0x14ca, 0x14dc, + 0x14e8, 0x14f4, 0x1515, 0x1521, 0x1530, 0x153c, 0x1570, 0x15a2, + 0x15c6, 0x15e4, 0x15f9, 0x1644, 0x167e, 0x16a3, 0x16e3, 0x16fe, + // Entry C0 - FF + 0x170d, 0x1722, 0x172e, 0x175f, 0x177a, 0x1792, 0x17aa, 0x17b9, + 0x17ce, 0x17f0, 0x1815, 0x182d, 0x183f, 0x1854, 0x186c, 0x1894, + 0x18b2, 0x1906, 0x1924, 0x194f, 0x196e, 0x1983, 0x199b, 0x19b3, + 0x19d8, 0x1a11, 0x1a36, 0x1a5e, 0x1a70, 0x1a97, 0x1ac6, 0x1b14, + 0x1b20, 0x1b64, 0x1b70, 0x1b8b, 0x1bac, 0x1bc4, 0x1be9, 0x1c16, + 0x1c34, 0x1c43, 0x1c52, 0x1c93, 0x1ca5, 0x1cb7, 0x1cd2, 0x1ced, + 0x1cff, 0x1d64, 0x1d92, 0x1ddc, 0x1df1, 0x1e18, 0x1e3a, 0x1e97, + 0x1eaf, 0x1ef0, 0x1f2a, 0x1f42, 0x1f51, 0x1f84, 0x1f93, 0x1fa5, + // Entry 100 - 13F + 0x1fb7, 0x1fcf, 0x1ff7, 0x200c, 0x2027, 0x2052, 0x2067, 0x207c, + 0x20a1, 0x20c9, 0x20de, 0x2119, 0x213e, 0x2166, 0x218b, 0x21b0, + 0x21eb, 0x2206, 0x223e, 0x225c, 0x227e, 0x22a0, 0x22c2, 0x22e7, + 0x230e, 0x2326, 0x235d, 0x237b, 0x238a, 0x23a6, 0x23c5, 0x23d7, + 0x23fc, 0x241e, 0x2443, 0x246b, +} // Size: 608 bytes + +const thRegionStr string = "" + // Size: 9033 bytes + "เกาะแอสเซนชันอันดอร์ราสหรัฐอาหรับเอมิเรตส์อัฟกานิสถานแอนติกาและบาร์บูดาแ" + + "องกวิลลาแอลเบเนียอาร์เมเนียแองโกลาแอนตาร์กติกาอาร์เจนตินาอเมริกันซามัว" + + "ออสเตรียออสเตรเลียอารูบาหมู่เกาะโอลันด์อาเซอร์ไบจานบอสเนียและเฮอร์เซโก" + + "วีนาบาร์เบโดสบังกลาเทศเบลเยียมบูร์กินาฟาโซบัลแกเรียบาห์เรนบุรุนดีเบนิน" + + "เซนต์บาร์เธเลมีเบอร์มิวดาบรูไนโบลิเวียเนเธอร์แลนด์แคริบเบียนบราซิลบาฮา" + + "มาสภูฏานเกาะบูเวตบอตสวานาเบลารุสเบลีซแคนาดาหมู่เกาะโคโคส (คีลิง)คองโก-" + + "กินชาซาสาธารณรัฐแอฟริกากลางคองโก-บราซซาวิลสวิตเซอร์แลนด์โกตดิวัวร์หมู่" + + "เกาะคุกชิลีแคเมอรูนจีนโคลอมเบียเกาะคลิปเปอร์ตันคอสตาริกาคิวบาเคปเวิร์ด" + + "คูราเซาเกาะคริสต์มาสไซปรัสสาธารณรัฐเช็กเยอรมนีดิเอโกการ์เซียจิบูตีเดนม" + + "าร์กโดมินิกาสาธารณรัฐโดมินิกันแอลจีเรียเซวตาและเมลียาเอกวาดอร์เอสโตเนี" + + "ยอียิปต์ซาฮาราตะวันตกเอริเทรียสเปนเอธิโอเปียสหภาพยุโรปฟินแลนด์ฟิจิหมู่" + + "เกาะฟอล์กแลนด์ไมโครนีเซียหมู่เกาะแฟโรฝรั่งเศสกาบองสหราชอาณาจักรเกรเนดา" + + "จอร์เจียเฟรนช์เกียนาเกิร์นซีย์กานายิบรอลตาร์กรีนแลนด์แกมเบียกินีกวาเดอ" + + "ลูปอิเควทอเรียลกินีกรีซเกาะเซาท์จอร์เจียและหมู่เกาะเซาท์แซนด์วิชกัวเตม" + + "าลากวมกินี-บิสเซากายอานาเขตปกครองพิเศษฮ่องกงแห่งสาธารณรัฐประชาชนจีนเกา" + + "ะเฮิร์ดและหมู่เกาะแมกดอนัลด์ฮอนดูรัสโครเอเชียเฮติฮังการีหมู่เกาะคานารี" + + "อินโดนีเซียไอร์แลนด์อิสราเอลเกาะแมนอินเดียบริติชอินเดียนโอเชียนเทร์ริท" + + "อรีอิรักอิหร่านไอซ์แลนด์อิตาลีเจอร์ซีย์จาเมกาจอร์แดนญี่ปุ่นเคนยาคีร์กี" + + "ซสถานกัมพูชาคิริบาสคอโมโรสเซนต์คิตส์และเนวิสเกาหลีเหนือเกาหลีใต้คูเวตห" + + "มู่เกาะเคย์แมนคาซัคสถานลาวเลบานอนเซนต์ลูเซียลิกเตนสไตน์ศรีลังกาไลบีเรี" + + "ยเลโซโทลิทัวเนียลักเซมเบิร์กลัตเวียลิเบียโมร็อกโกโมนาโกมอลโดวามอนเตเนโ" + + "กรเซนต์มาตินมาดากัสการ์หมู่เกาะมาร์แชลล์มาซิโดเนียมาลีเมียนมาร์ (พม่า)" + + "มองโกเลียเขตปกครองพิเศษมาเก๊าแห่งสาธารณรัฐประชาชนจีนหมู่เกาะนอร์เทิร์น" + + "มาเรียนามาร์ตินีกมอริเตเนียมอนต์เซอร์รัตมอลตามอริเชียสมัลดีฟส์มาลาวีเม" + + "็กซิโกมาเลเซียโมซัมบิกนามิเบียนิวแคลิโดเนียไนเจอร์เกาะนอร์ฟอล์กไนจีเรี" + + "ยนิการากัวเนเธอร์แลนด์นอร์เวย์เนปาลนาอูรูนีอูเอนิวซีแลนด์โอมานปานามาเป" + + "รูเฟรนช์โปลินีเซียปาปัวนิวกินีฟิลิปปินส์ปากีสถานโปแลนด์แซงปีแยร์และมีเ" + + "กอลงหมู่เกาะพิตแคร์นเปอร์โตริโกดินแดนปาเลสไตน์โปรตุเกสปาเลาปารากวัยกาต" + + "าร์เอาต์ไลอิงโอเชียเนียเรอูนียงโรมาเนียเซอร์เบียรัสเซียรวันดาซาอุดีอาร" + + "ะเบียหมู่เกาะโซโลมอนเซเชลส์ซูดานสวีเดนสิงคโปร์เซนต์เฮเลนาสโลวีเนียสฟาล" + + "บาร์และยานไมเอนสโลวะเกียเซียร์ราลีโอนซานมารีโนเซเนกัลโซมาเลียซูรินาเมซ" + + "ูดานใต้เซาตูเมและปรินซิปีเอลซัลวาดอร์เซนต์มาร์ตินซีเรียสวาซิแลนด์ทริสต" + + "ัน เดอ คูนาหมู่เกาะเติกส์และหมู่เกาะเคคอสชาดเฟรนช์เซาเทิร์นเทร์ริทอรีส" + + "์โตโกไทยทาจิกิสถานโตเกเลาติมอร์-เลสเตเติร์กเมนิสถานตูนิเซียตองกาตุรกีต" + + "รินิแดดและโตเบโกตูวาลูไต้หวันแทนซาเนียยูเครนยูกันดาหมู่เกาะรอบนอกของสห" + + "รัฐอเมริกาสหประชาชาติสหรัฐอเมริกาอุรุกวัยอุซเบกิสถานนครวาติกันเซนต์วิน" + + "เซนต์และเกรนาดีนส์เวเนซุเอลาหมู่เกาะบริติชเวอร์จินหมู่เกาะยูเอสเวอร์จิ" + + "นเวียดนามวานูอาตูวาลลิสและฟุตูนาซามัวโคโซโวเยเมนมายอตแอฟริกาใต้แซมเบีย" + + "ซิมบับเวภูมิภาคที่ไม่รู้จักโลกแอฟริกาอเมริกาเหนืออเมริกาใต้โอเชียเนียแ" + + "อฟริกาตะวันตกอเมริกากลางแอฟริกาตะวันออกแอฟริกาเหนือแอฟริกากลางแอฟริกาต" + + "อนใต้อเมริกาอเมริกาตอนเหนือแคริบเบียนเอเชียตะวันออกเอเชียใต้เอเชียตะวั" + + "นออกเฉียงใต้ยุโรปใต้ออสตราเลเซียเมลานีเซียเขตไมโครนีเซียโปลินีเซียเอเช" + + "ียเอเชียกลางเอเชียตะวันตกยุโรปยุโรปตะวันออกยุโรปเหนือยุโรปตะวันตกละติน" + + "อเมริกา" + +var thRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0027, 0x0042, 0x007e, 0x009f, 0x00d5, 0x00f0, 0x010b, + 0x0129, 0x013e, 0x0162, 0x0183, 0x01aa, 0x01c2, 0x01e0, 0x01f2, + 0x021f, 0x0243, 0x0288, 0x02a3, 0x02be, 0x02d6, 0x02fa, 0x0315, + 0x032a, 0x033f, 0x034e, 0x037b, 0x0399, 0x03a8, 0x03c0, 0x0402, + 0x0414, 0x0429, 0x0438, 0x0453, 0x046b, 0x0480, 0x048f, 0x04a1, + 0x04da, 0x04ff, 0x053b, 0x0566, 0x0590, 0x05ae, 0x05cf, 0x05db, + 0x05f3, 0x05fc, 0x0617, 0x0647, 0x0662, 0x0671, 0x068c, 0x06a1, + 0x06c8, 0x06da, 0x0701, 0x0716, 0x0740, 0x0752, 0x076a, 0x0782, + // Entry 40 - 7F + 0x07b8, 0x07d3, 0x07fd, 0x0818, 0x0833, 0x0848, 0x086f, 0x088a, + 0x0896, 0x08b4, 0x08d2, 0x08d2, 0x08ea, 0x08f6, 0x092c, 0x094d, + 0x0971, 0x0989, 0x0998, 0x09bf, 0x09d4, 0x09ec, 0x0a10, 0x0a2e, + 0x0a3a, 0x0a58, 0x0a73, 0x0a88, 0x0a94, 0x0aaf, 0x0adf, 0x0aeb, + 0x0b66, 0x0b81, 0x0b8a, 0x0ba9, 0x0bbe, 0x0c3f, 0x0c9c, 0x0cb4, + 0x0ccf, 0x0cdb, 0x0cf0, 0x0d1a, 0x0d3b, 0x0d56, 0x0d6e, 0x0d83, + 0x0d98, 0x0df5, 0x0e04, 0x0e19, 0x0e34, 0x0e46, 0x0e61, 0x0e73, + 0x0e88, 0x0e9d, 0x0eac, 0x0ecd, 0x0ee2, 0x0ef7, 0x0f0c, 0x0f42, + // Entry 80 - BF + 0x0f63, 0x0f7e, 0x0f8d, 0x0fba, 0x0fd5, 0x0fde, 0x0ff3, 0x1014, + 0x1035, 0x104d, 0x1065, 0x1077, 0x1092, 0x10b6, 0x10cb, 0x10dd, + 0x10f5, 0x1107, 0x111c, 0x113a, 0x1158, 0x1179, 0x11ac, 0x11ca, + 0x11d6, 0x1200, 0x121b, 0x129c, 0x12ea, 0x1305, 0x1323, 0x134a, + 0x1359, 0x1374, 0x138c, 0x139e, 0x13b6, 0x13ce, 0x13e6, 0x13fe, + 0x1425, 0x143a, 0x1461, 0x1479, 0x1494, 0x14b8, 0x14d0, 0x14df, + 0x14f1, 0x1503, 0x1521, 0x1530, 0x1542, 0x154e, 0x157e, 0x15a2, + 0x15c0, 0x15d8, 0x15ed, 0x1626, 0x1656, 0x1677, 0x16a4, 0x16bc, + // Entry C0 - FF + 0x16cb, 0x16e3, 0x16f5, 0x1731, 0x1749, 0x1761, 0x177c, 0x1791, + 0x17a3, 0x17cd, 0x17fa, 0x180f, 0x181e, 0x1830, 0x1848, 0x1869, + 0x1884, 0x18bd, 0x18d8, 0x18ff, 0x191a, 0x192f, 0x1947, 0x195f, + 0x1977, 0x19ad, 0x19d1, 0x19f5, 0x1a07, 0x1a25, 0x1a51, 0x1aab, + 0x1ab4, 0x1b05, 0x1b11, 0x1b1a, 0x1b38, 0x1b4d, 0x1b6f, 0x1b99, + 0x1bb1, 0x1bc0, 0x1bcf, 0x1c02, 0x1c14, 0x1c29, 0x1c44, 0x1c56, + 0x1c6b, 0x1cc2, 0x1ce3, 0x1d07, 0x1d1f, 0x1d40, 0x1d5e, 0x1dac, + 0x1dca, 0x1e0c, 0x1e4b, 0x1e63, 0x1e7b, 0x1ea8, 0x1eb7, 0x1ec9, + // Entry 100 - 13F + 0x1ed8, 0x1ee7, 0x1f05, 0x1f1a, 0x1f32, 0x1f6b, 0x1f74, 0x1f89, + 0x1fad, 0x1fcb, 0x1fe9, 0x2013, 0x2034, 0x2061, 0x2085, 0x20a6, + 0x20cd, 0x20e2, 0x210f, 0x212d, 0x2157, 0x2172, 0x21b4, 0x21cc, + 0x21f0, 0x220e, 0x2238, 0x2256, 0x2268, 0x2286, 0x22ad, 0x22bc, + 0x22e3, 0x2301, 0x2325, 0x2349, +} // Size: 608 bytes + +const trRegionStr string = "" + // Size: 3043 bytes + "Ascension AdasıAndorraBirleşik Arap EmirlikleriAfganistanAntigua ve Barb" + + "udaAnguillaArnavutlukErmenistanAngolaAntarktikaArjantinAmerikan SamoasıA" + + "vusturyaAvustralyaArubaÅland AdalarıAzerbaycanBosna-HersekBarbadosBangla" + + "deşBelçikaBurkina FasoBulgaristanBahreynBurundiBeninSaint BarthelemyBerm" + + "udaBruneiBolivyaKarayip HollandaBrezilyaBahamalarButanBouvet AdasıBotsva" + + "naBelarusBelizeKanadaCocos (Keeling) AdalarıKongo - KinşasaOrta Afrika C" + + "umhuriyetiKongo - BrazavilİsviçreFildişi SahiliCook AdalarıŞiliKamerunÇi" + + "nKolombiyaClipperton AdasıKosta RikaKübaCape VerdeCuraçaoChristmas Adası" + + "KıbrısÇek CumhuriyetiAlmanyaDiego GarciaCibutiDanimarkaDominikaDominik C" + + "umhuriyetiCezayirSepte ve MelillaEkvadorEstonyaMısırBatı SahraEritreİspa" + + "nyaEtiyopyaAvrupa BirliğiFinlandiyaFijiFalkland AdalarıMikronezyaFaroe A" + + "dalarıFransaGabonBirleşik KrallıkGrenadaGürcistanFransız GuyanasıGuernse" + + "yGanaCebelitarıkGrönlandGambiyaGineGuadalupeEkvator GinesiYunanistanGüne" + + "y Georgia ve Güney Sandwich AdalarıGuatemalaGuamGine-BissauGuyanaÇin Hon" + + "g Kong ÖİBHeard Adası ve McDonald AdalarıHondurasHırvatistanHaitiMacaris" + + "tanKanarya AdalarıEndonezyaİrlandaİsrailMan AdasıHindistanBritanya Hint " + + "Okyanusu TopraklarıIrakİranİzlandaİtalyaJerseyJamaikaÜrdünJaponyaKenyaKı" + + "rgızistanKamboçyaKiribatiKomorlarSaint Kitts ve NevisKuzey KoreGüney Kor" + + "eKuveytCayman AdalarıKazakistanLaosLübnanSaint LuciaLiechtensteinSri Lan" + + "kaLiberyaLesothoLitvanyaLüksemburgLetonyaLibyaFasMonakoMoldovaKaradağSai" + + "nt MartinMadagaskarMarshall AdalarıMakedonyaMaliMyanmar (Burma)Moğolista" + + "nÇin Makao ÖİBKuzey Mariana AdalarıMartinikMoritanyaMontserratMaltaMauri" + + "tiusMaldivlerMalaviMeksikaMalezyaMozambikNamibyaYeni KaledonyaNijerNorfo" + + "lk AdasıNijeryaNikaraguaHollandaNorveçNepalNauruNiueYeni ZelandaUmmanPan" + + "amaPeruFransız PolinezyasıPapua Yeni GineFilipinlerPakistanPolonyaSaint " + + "Pierre ve MiquelonPitcairn AdalarıPorto RikoFilistin BölgeleriPortekizPa" + + "lauParaguayKatarUzak OkyanusyaRéunionRomanyaSırbistanRusyaRuandaSuudi Ar" + + "abistanSolomon AdalarıSeyşellerSudanİsveçSingapurSaint HelenaSlovenyaSva" + + "lbard ve Jan MayenSlovakyaSierra LeoneSan MarinoSenegalSomaliSurinamGüne" + + "y SudanSão Tomé ve PríncipeEl SalvadorSint MaartenSuriyeSvazilandTristan" + + " da CunhaTurks ve Caicos AdalarıÇadFransız Güney TopraklarıTogoTaylandTa" + + "cikistanTokelauTimor-LesteTürkmenistanTunusTongaTürkiyeTrinidad ve Tobag" + + "oTuvaluTayvanTanzanyaUkraynaUgandaABD Uzak AdalarıBirleşmiş MilletlerAme" + + "rika Birleşik DevletleriUruguayÖzbekistanVatikanSaint Vincent ve Grenadi" + + "nlerVenezuelaBritanya Virjin AdalarıABD Virjin AdalarıVietnamVanuatuWall" + + "is ve FutunaSamoaKosovaYemenMayotteGüney AfrikaZambiyaZimbabveBilinmeyen" + + " BölgeDünyaAfrikaKuzey AmerikaGüney AmerikaOkyanusyaBatı AfrikaOrta Amer" + + "ikaDoğu AfrikaKuzey AfrikaOrta AfrikaAfrika’nın GüneyiAmerikaAmerika’nın" + + " KuzeyiKarayiplerDoğu AsyaGüney AsyaGüneydoğu AsyaGüney AvrupaAvustralas" + + "yaMelanezyaMikronezya BölgesiPolinezyaAsyaOrta AsyaBatı AsyaAvrupaDoğu A" + + "vrupaKuzey AvrupaBatı AvrupaLatin Amerika" + +var trRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x0031, 0x003b, 0x004d, 0x0055, 0x005f, + 0x0069, 0x006f, 0x0079, 0x0081, 0x0092, 0x009b, 0x00a5, 0x00aa, + 0x00b9, 0x00c3, 0x00cf, 0x00d7, 0x00e1, 0x00e9, 0x00f5, 0x0100, + 0x0107, 0x010e, 0x0113, 0x0123, 0x012a, 0x0130, 0x0137, 0x0147, + 0x014f, 0x0158, 0x015d, 0x016a, 0x0172, 0x0179, 0x017f, 0x0185, + 0x019d, 0x01ad, 0x01c4, 0x01d4, 0x01dd, 0x01ec, 0x01f9, 0x01fe, + 0x0205, 0x0209, 0x0212, 0x0223, 0x022d, 0x0232, 0x023c, 0x0244, + 0x0254, 0x025c, 0x026c, 0x0273, 0x027f, 0x0285, 0x028e, 0x0296, + // Entry 40 - 7F + 0x02a9, 0x02b0, 0x02c0, 0x02c7, 0x02ce, 0x02d5, 0x02e0, 0x02e6, + 0x02ee, 0x02f6, 0x0305, 0x0305, 0x030f, 0x0313, 0x0324, 0x032e, + 0x033c, 0x0342, 0x0347, 0x0359, 0x0360, 0x036a, 0x037c, 0x0384, + 0x0388, 0x0394, 0x039d, 0x03a4, 0x03a8, 0x03b1, 0x03bf, 0x03c9, + 0x03f3, 0x03fc, 0x0400, 0x040b, 0x0411, 0x0425, 0x0446, 0x044e, + 0x045a, 0x045f, 0x0469, 0x0479, 0x0482, 0x048a, 0x0491, 0x049b, + 0x04a4, 0x04c6, 0x04ca, 0x04cf, 0x04d7, 0x04de, 0x04e4, 0x04eb, + 0x04f2, 0x04f9, 0x04fe, 0x050b, 0x0514, 0x051c, 0x0524, 0x0538, + // Entry 80 - BF + 0x0542, 0x054d, 0x0553, 0x0562, 0x056c, 0x0570, 0x0577, 0x0582, + 0x058f, 0x0598, 0x059f, 0x05a6, 0x05ae, 0x05b9, 0x05c0, 0x05c5, + 0x05c8, 0x05ce, 0x05d5, 0x05dd, 0x05e9, 0x05f3, 0x0604, 0x060d, + 0x0611, 0x0620, 0x062b, 0x063b, 0x0651, 0x0659, 0x0662, 0x066c, + 0x0671, 0x067a, 0x0683, 0x0689, 0x0690, 0x0697, 0x069f, 0x06a6, + 0x06b4, 0x06b9, 0x06c7, 0x06ce, 0x06d7, 0x06df, 0x06e6, 0x06eb, + 0x06f0, 0x06f4, 0x0700, 0x0705, 0x070b, 0x070f, 0x0724, 0x0733, + 0x073d, 0x0745, 0x074c, 0x0764, 0x0775, 0x077f, 0x0792, 0x079a, + // Entry C0 - FF + 0x079f, 0x07a7, 0x07ac, 0x07ba, 0x07c2, 0x07c9, 0x07d3, 0x07d8, + 0x07de, 0x07ed, 0x07fd, 0x0807, 0x080c, 0x0813, 0x081b, 0x0827, + 0x082f, 0x0844, 0x084c, 0x0858, 0x0862, 0x0869, 0x086f, 0x0876, + 0x0882, 0x0899, 0x08a4, 0x08b0, 0x08b6, 0x08bf, 0x08cf, 0x08e7, + 0x08eb, 0x0906, 0x090a, 0x0911, 0x091b, 0x0922, 0x092d, 0x093a, + 0x093f, 0x0944, 0x094c, 0x095e, 0x0964, 0x096a, 0x0972, 0x0979, + 0x097f, 0x0990, 0x09a5, 0x09c1, 0x09c8, 0x09d3, 0x09da, 0x09f6, + 0x09ff, 0x0a17, 0x0a2a, 0x0a31, 0x0a38, 0x0a48, 0x0a4d, 0x0a53, + // Entry 100 - 13F + 0x0a58, 0x0a5f, 0x0a6c, 0x0a73, 0x0a7b, 0x0a8c, 0x0a92, 0x0a98, + 0x0aa5, 0x0ab3, 0x0abc, 0x0ac8, 0x0ad4, 0x0ae0, 0x0aec, 0x0af7, + 0x0b0c, 0x0b13, 0x0b28, 0x0b32, 0x0b3c, 0x0b47, 0x0b57, 0x0b64, + 0x0b70, 0x0b79, 0x0b8c, 0x0b95, 0x0b99, 0x0ba2, 0x0bac, 0x0bb2, + 0x0bbe, 0x0bca, 0x0bd6, 0x0be3, +} // Size: 608 bytes + +const ukRegionStr string = "" + // Size: 6162 bytes + "Острів ВознесінняАндорраОбʼєднані Арабські ЕміратиАфганістанАнтигуа і Ба" + + "рбудаАнгільяАлбаніяВірменіяАнголаАнтарктикаАргентинаАмериканське СамоаА" + + "встріяАвстраліяАрубаАландські островиАзербайджанБоснія і ГерцоговинаБар" + + "бадосБангладешБельгіяБуркіна-ФасоБолгаріяБахрейнБурундіБенінСен-Бартель" + + "міБермудські островиБрунейБолівіяНідерландські Карибські островиБразилі" + + "яБагамські ОстровиБутанОстрів БувеБотсванаБілорусьБелізКанадаКокосові (" + + "Кілінгові) островиКонго – КіншасаЦентральноафриканська РеспублікаКонго " + + "– БраззавільШвейцаріяКот-д’ІвуарОстрови КукаЧиліКамерунКитайКолумбіяОс" + + "трів КліппертонКоста-РикаКубаКабо-ВердеКюрасаоОстрів РіздваКіпрЧеська Р" + + "еспублікаНімеччинаДієго-ГарсіяДжибутіДаніяДомінікаДомініканська Республ" + + "ікаАлжирСеута і МелільяЕквадорЕстоніяЄгипетЗахідна СахараЕритреяІспанія" + + "ЕфіопіяЄвропейський СоюзФінляндіяФіджіФолклендські островиМікронезіяФар" + + "ерські ОстровиФранціяГабонВелика БританіяГренадаГрузіяФранцузька Гвіана" + + "ГернсіГанаГібралтарГренландіяГамбіяГвінеяГваделупаЕкваторіальна ГвінеяГ" + + "реціяПівденна Джорджія та Південні Сандвічеві островиГватемалаГуамГвіне" + + "я-БісауГаянаГонконг, О.А.Р. КитаюОстрови Херд і Мак-ДональдГондурасХорв" + + "атіяГаїтіУгорщинаКанарські островиІндонезіяІрландіяІзраїльОстрів МенІнд" + + "іяБританські території в Індійському океаніІракІранІсландіяІталіяДжерсі" + + "ЯмайкаЙорданіяЯпоніяКеніяКиргизстанКамбоджаКірибатіКоморські островиСен" + + "т-Кітс і НевісПівнічна КореяПівденна КореяКувейтКайманові островиКазахс" + + "танЛаосЛіванСент-ЛюсіяЛіхтенштейнШрі-ЛанкаЛіберіяЛесотоЛитваЛюксембургЛ" + + "атвіяЛівіяМароккоМонакоМолдоваЧорногоріяСен-МартенМадагаскарМаршаллові " + + "ОстровиМакедоніяМаліМʼянма (Бірма)МонголіяМакао, О.А.Р КитаюПівнічні Ма" + + "ріанські ОстровиМартинікаМавританіяМонтсерратМальтаМаврикійМальдівиМала" + + "віМексикаМалайзіяМозамбікНамібіяНова КаледоніяНігерОстрів НорфолкНігері" + + "яНікарагуаНідерландиНорвегіяНепалНауруНіуеНова ЗеландіяОманПанамаПеруФр" + + "анцузька ПолінезіяПапуа Нова ГвінеяФіліппіниПакистанПольщаСен-Пʼєр і Мі" + + "келонОстрови ПіткернПуерто-РикоПалестинські територіїПортугаліяПалауПар" + + "агвайКатарВіддалені острови ОкеаніїРеюньйонРумуніяСербіяРосіяРуандаСауд" + + "івська АравіяСоломонові ОстровиСейшельські ОстровиСуданШвеціяСінгапурОс" + + "трів Святої ЄлениСловеніяОстрови Свальбард і Ян-МаєнСловаччинаСьєрра-Ле" + + "онеСан-МариноСенегалСомаліСуринамПівденний СуданСан-Томе і ПрінсіпіСаль" + + "вадорСінт-МартенСиріяСвазілендТрістан-да-КуньяОстрови Теркс і КайкосЧад" + + "Французькі Південні ТериторіїТогоТаїландТаджикистанТокелауТимор-ЛештіТу" + + "ркменістанТунісТонгаТуреччинаТринідад і ТобагоТувалуТайваньТанзаніяУкра" + + "їнаУгандаВіддалені острови СШАОрганізація Об’єднаних НаційСШАУругвайУзб" + + "екистанВатиканСент-Вінсент і ГренадиниВенесуелаБританські Віргінські ос" + + "тровиВіргінські острови, СШАВʼєтнамВануатуВолліс і ФутунаСамоаКосовоЄме" + + "нМайоттаПівденно-Африканська РеспублікаЗамбіяЗімбабвеНевідомий регіонСв" + + "ітАфрикаПівнічна АмерикаПівденна АмерикаОкеаніяЗахідна АфрикаЦентральна" + + " АмерикаСхідна АфрикаПівнічна АфрикаЦентральна АфрикаПівденна АфрикаАмер" + + "икаПівнічна Америка (регіон)Карибський басейнСхідна АзіяПівденна АзіяПі" + + "вденно-Східна АзіяПівденна ЄвропаАвстралазіяМеланезіяМікронезійський ре" + + "гіонПолінезіяАзіяЦентральна АзіяЗахідна АзіяЄвропаСхідна ЄвропаПівнічна" + + " ЄвропаЗахідна ЄвропаЛатинська Америка" + +var ukRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0021, 0x002f, 0x0061, 0x0075, 0x0095, 0x00a3, 0x00b1, + 0x00c1, 0x00cd, 0x00e1, 0x00f3, 0x0116, 0x0124, 0x0136, 0x0140, + 0x0161, 0x0177, 0x019d, 0x01ad, 0x01bf, 0x01cd, 0x01e4, 0x01f4, + 0x0202, 0x0210, 0x021a, 0x0233, 0x0256, 0x0262, 0x0270, 0x02ac, + 0x02bc, 0x02dd, 0x02e7, 0x02fc, 0x030c, 0x031c, 0x0326, 0x0332, + 0x0366, 0x0383, 0x03c2, 0x03e5, 0x03f7, 0x040d, 0x0424, 0x042c, + 0x043a, 0x0444, 0x0454, 0x0475, 0x0488, 0x0490, 0x04a3, 0x04b1, + 0x04ca, 0x04d2, 0x04f3, 0x0505, 0x051c, 0x052a, 0x0534, 0x0544, + // Entry 40 - 7F + 0x0573, 0x057d, 0x0599, 0x05a7, 0x05b5, 0x05c1, 0x05dc, 0x05ea, + 0x05f8, 0x0606, 0x0627, 0x0627, 0x0639, 0x0643, 0x066a, 0x067e, + 0x069f, 0x06ad, 0x06b7, 0x06d4, 0x06e2, 0x06ee, 0x070f, 0x071b, + 0x0723, 0x0735, 0x0749, 0x0755, 0x0761, 0x0773, 0x079a, 0x07a6, + 0x0801, 0x0813, 0x081b, 0x0832, 0x083c, 0x0860, 0x0890, 0x08a0, + 0x08b0, 0x08ba, 0x08ca, 0x08eb, 0x08fd, 0x090d, 0x091b, 0x092e, + 0x0938, 0x0986, 0x098e, 0x0996, 0x09a6, 0x09b2, 0x09be, 0x09ca, + 0x09da, 0x09e6, 0x09f0, 0x0a04, 0x0a14, 0x0a24, 0x0a45, 0x0a64, + // Entry 80 - BF + 0x0a7f, 0x0a9a, 0x0aa6, 0x0ac7, 0x0ad9, 0x0ae1, 0x0aeb, 0x0afe, + 0x0b14, 0x0b25, 0x0b33, 0x0b3f, 0x0b49, 0x0b5d, 0x0b69, 0x0b73, + 0x0b81, 0x0b8d, 0x0b9b, 0x0baf, 0x0bc2, 0x0bd6, 0x0bf9, 0x0c0b, + 0x0c13, 0x0c2c, 0x0c3c, 0x0c5b, 0x0c8f, 0x0ca1, 0x0cb5, 0x0cc9, + 0x0cd5, 0x0ce5, 0x0cf5, 0x0d01, 0x0d0f, 0x0d1f, 0x0d2f, 0x0d3d, + 0x0d58, 0x0d62, 0x0d7d, 0x0d8b, 0x0d9d, 0x0db1, 0x0dc1, 0x0dcb, + 0x0dd5, 0x0ddd, 0x0df6, 0x0dfe, 0x0e0a, 0x0e12, 0x0e39, 0x0e59, + 0x0e6b, 0x0e7b, 0x0e87, 0x0ea8, 0x0ec5, 0x0eda, 0x0f05, 0x0f19, + // Entry C0 - FF + 0x0f23, 0x0f33, 0x0f3d, 0x0f6d, 0x0f7d, 0x0f8b, 0x0f97, 0x0fa1, + 0x0fad, 0x0fce, 0x0ff1, 0x1016, 0x1020, 0x102c, 0x103c, 0x1060, + 0x1070, 0x10a2, 0x10b6, 0x10cd, 0x10e0, 0x10ee, 0x10fa, 0x1108, + 0x1125, 0x1148, 0x115a, 0x116f, 0x1179, 0x118b, 0x11a9, 0x11d2, + 0x11d8, 0x1210, 0x1218, 0x1226, 0x123c, 0x124a, 0x125f, 0x1277, + 0x1281, 0x128b, 0x129d, 0x12bd, 0x12c9, 0x12d7, 0x12e7, 0x12f5, + 0x1301, 0x1329, 0x1360, 0x1366, 0x1374, 0x1388, 0x1396, 0x13c3, + 0x13d5, 0x140d, 0x1438, 0x1446, 0x1454, 0x1470, 0x147a, 0x1486, + // Entry 100 - 13F + 0x148e, 0x149c, 0x14d8, 0x14e4, 0x14f4, 0x1513, 0x151b, 0x1527, + 0x1546, 0x1565, 0x1573, 0x158e, 0x15b1, 0x15ca, 0x15e7, 0x1608, + 0x1625, 0x1633, 0x1661, 0x1682, 0x1697, 0x16b0, 0x16d6, 0x16f3, + 0x1709, 0x171b, 0x1746, 0x1758, 0x1760, 0x177d, 0x1794, 0x17a0, + 0x17b9, 0x17d6, 0x17f1, 0x1812, +} // Size: 608 bytes + +const urRegionStr string = "" + // Size: 5123 bytes + "اسینشن آئلینڈانڈورامتحدہ عرب اماراتافغانستانانٹیگوا اور باربوداانگوئیلاا" + + "لبانیہآرمینیاانگولاانٹارکٹیکاارجنٹیناامریکی ساموآآسٹریاآسٹریلیااروباآلی" + + "نڈ آئلینڈزآذر بائیجانبوسنیا اور ہرزیگووینابارباڈوسبنگلہ دیشبیلجیمبرکینا" + + " فاسوبلغاریہبحرینبرونڈیبیننسینٹ برتھلیمیبرمودابرونائیبولیویاکریبیائی نید" + + "رلینڈزبرازیلبہاماسبھوٹانبؤویٹ آئلینڈبوتسوانابیلاروسبیلائزکینیڈاکوکوس (ک" + + "یلنگ) جزائرکانگو - کنشاساوسط افریقی جمہوریہکانگو - برازاویلےسوئٹزر لینڈ" + + "کوٹ ڈی آئیوریکک آئلینڈزچلیکیمرونچینکولمبیاکلپرٹن آئلینڈکوسٹا ریکاکیوباک" + + "یپ ورڈیکیوراکاؤجزیرہ کرسمسقبرصچیک جمہوریہجرمنیڈائجو گارسیاجبوتیڈنمارکڈو" + + "منیکاڈومنیکن جمہوریہالجیریاسیئوٹا اور میلیلاایکواڈوراسٹونیامصرمغربی صحا" + + "رااریٹیریاہسپانیہایتھوپیایوروپی یونینفن لینڈفجیفاکلینڈ جزائرمائکرونیشیا" + + "جزائر فاروفرانسگیبونسلطنت متحدہگریناڈاجارجیافرینچ گیاناگوئرنسیگھاناجبل " + + "الطارقگرین لینڈگیمبیاگنیگواڈیلوپاستوائی گیانایونانجنوبی جارجیا اور جنوب" + + "ی سینڈوچ جزائرگواٹے مالاگوامگنی بساؤگیاناہانگ کانگ SAR چینہیرڈ جزیرہ و " + + "میکڈولینڈ جزائرہونڈاروسکروشیاہیٹیہنگریکینری آئلینڈزانڈونیشیاآئرلینڈاسرا" + + "ئیلآئل آف مینبھارتبرطانوی بحر ہند کا علاقہعراقایرانآئس لینڈاٹلیجرسیجمائ" + + "یکااردنجاپانکینیاکرغزستانکمبوڈیاکریباتیکوموروسسینٹ کٹس اور نیویسشمالی ک" + + "وریاجنوبی کوریاکویتکیمین آئلینڈزقازقستانلاؤسلبنانسینٹ لوسیالیشٹنسٹائنسر" + + "ی لنکالائبیریالیسوتھولیتھونیالکسمبرگلٹویالیبیامراکشموناکومالدووامونٹے ن" + + "یگروسینٹ مارٹنمڈغاسکرمارشل آئلینڈزمقدونیہمالیمیانمار (برما)منگولیامکاؤ " + + "SAR چینشمالی ماریانا آئلینڈزمارٹینکموریطانیہمونٹسیراٹمالٹاماریشسمالدیپمل" + + "اویمیکسیکوملائشیاموزمبیقنامیبیانیو کلیڈونیانائجرنارفوک آئلینڈنائجیریانک" + + "اراگووانیدر لینڈزناروےنیپالنؤرونیئونیوزی لینڈعمانپانامہپیروفرانسیسی پول" + + "ینیشیاپاپوآ نیو گنیفلپائنپاکستانپولینڈسینٹ پیئر اور میکلیئونپٹکائرن جزا" + + "ئرپیورٹو ریکوفلسطینی خطےپرتگالپلاؤپیراگوئےقطربیرونی اوشیانیاری یونینروم" + + "انیہسربیاروسروانڈاسعودی عربسولومن آئلینڈزسشلیزسوڈانسویڈنسنگاپورسینٹ ہیل" + + "یناسلووینیاسوالبرڈ اور جان ماینسلوواکیہسیئر لیونسان مارینوسینیگلصومالیہ" + + "سورینامجنوبی سوڈانساؤ ٹوم اور پرنسپےال سلواڈورسنٹ مارٹنشامسوازی لینڈٹرس" + + "ٹن ڈا کیونہاترکس اور کیکاؤس جزائرچاڈفرانسیسی جنوبی خطےٹوگوتھائی لینڈتاج" + + "کستانٹوکیلاؤتیمور لیسٹترکمانستانتونسٹونگاترکیترینیداد اور ٹوباگوٹووالوت" + + "ائیوانتنزانیہیوکرینیوگنڈاامریکہ سے باہر کے چھوٹے جزائزاقوام متحدہریاستہ" + + "ائے متحدہیوروگوئےازبکستانواٹیکن سٹیسینٹ ونسنٹ اور گرینیڈائنزوینزوئیلابر" + + "ٹش ورجن آئلینڈزامریکی ورجن آئلینڈزویتناموینوآٹوویلیز اور فیوٹیوناساموآک" + + "وسووویمنمایوٹجنوبی افریقہزامبیازمبابوےنامعلوم علاقہدنیاافریقہشمالی امری" + + "کہجنوبی امریکہاوشیانیامغربی افریقہوسطی امریکہمشرقی افریقہشمالی افریقہوس" + + "طی افریقہجنوبی افریقہ کے علاقہامیریکازشمالی امریکہ کا علاقہکریبیائیمشرق" + + "ی ایشیاجنوبی ایشیاجنوب مشرقی ایشیاجنوبی یورپآسٹریلیشیامالینیشیامائکرونی" + + "شیائی علاقہپولینیشیاایشیاوسطی ایشیامغربی ایشیایورپمشرقی یورپشمالی یورپم" + + "غربی یورپلاطینی امریکہ" + +var urRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0019, 0x0025, 0x0043, 0x0055, 0x0079, 0x0089, 0x0097, + 0x00a5, 0x00b1, 0x00c5, 0x00d5, 0x00ec, 0x00f8, 0x0108, 0x0112, + 0x012b, 0x0140, 0x0168, 0x0178, 0x0189, 0x0195, 0x01aa, 0x01b8, + 0x01c2, 0x01ce, 0x01d6, 0x01ef, 0x01fb, 0x0209, 0x0217, 0x023a, + 0x0246, 0x0252, 0x025e, 0x0275, 0x0285, 0x0293, 0x029f, 0x02ab, + 0x02cd, 0x02e6, 0x0308, 0x0327, 0x033c, 0x0354, 0x0367, 0x036d, + 0x0379, 0x037f, 0x038d, 0x03a6, 0x03b9, 0x03c3, 0x03d2, 0x03e2, + 0x03f7, 0x03ff, 0x0414, 0x041e, 0x0435, 0x043f, 0x044b, 0x0459, + // Entry 40 - 7F + 0x0476, 0x0484, 0x04a4, 0x04b4, 0x04c2, 0x04c8, 0x04dd, 0x04ed, + 0x04fb, 0x050b, 0x0522, 0x0522, 0x052f, 0x0535, 0x054e, 0x0564, + 0x0577, 0x0581, 0x058b, 0x05a0, 0x05ae, 0x05ba, 0x05cf, 0x05dd, + 0x05e7, 0x05fa, 0x060b, 0x0617, 0x061d, 0x062d, 0x0646, 0x0650, + 0x0691, 0x06a4, 0x06ac, 0x06bb, 0x06c5, 0x06e1, 0x0715, 0x0725, + 0x0731, 0x0739, 0x0743, 0x075c, 0x076e, 0x077c, 0x078a, 0x079c, + 0x07a6, 0x07d2, 0x07da, 0x07e4, 0x07f3, 0x07fb, 0x0803, 0x0811, + 0x0819, 0x0823, 0x082d, 0x083d, 0x084b, 0x0859, 0x0867, 0x0888, + // Entry 80 - BF + 0x089d, 0x08b2, 0x08ba, 0x08d3, 0x08e3, 0x08eb, 0x08f5, 0x0908, + 0x091c, 0x092b, 0x093b, 0x0949, 0x0959, 0x0967, 0x0971, 0x097b, + 0x0985, 0x0991, 0x099f, 0x09b4, 0x09c7, 0x09d5, 0x09ee, 0x09fc, + 0x0a04, 0x0a1d, 0x0a2b, 0x0a3e, 0x0a66, 0x0a74, 0x0a86, 0x0a98, + 0x0aa2, 0x0aae, 0x0aba, 0x0ac4, 0x0ad2, 0x0ae0, 0x0aee, 0x0afc, + 0x0b13, 0x0b1d, 0x0b36, 0x0b46, 0x0b58, 0x0b6b, 0x0b75, 0x0b7f, + 0x0b87, 0x0b8f, 0x0ba2, 0x0baa, 0x0bb6, 0x0bbe, 0x0be1, 0x0bf9, + 0x0c05, 0x0c13, 0x0c1f, 0x0c48, 0x0c61, 0x0c76, 0x0c8b, 0x0c97, + // Entry C0 - FF + 0x0c9f, 0x0caf, 0x0cb5, 0x0cd2, 0x0ce1, 0x0cef, 0x0cf9, 0x0cff, + 0x0d0b, 0x0d1c, 0x0d37, 0x0d41, 0x0d4b, 0x0d55, 0x0d63, 0x0d78, + 0x0d88, 0x0dad, 0x0dbd, 0x0dce, 0x0de1, 0x0ded, 0x0dfb, 0x0e09, + 0x0e1e, 0x0e3f, 0x0e52, 0x0e63, 0x0e69, 0x0e7c, 0x0e98, 0x0ebf, + 0x0ec5, 0x0ee7, 0x0eef, 0x0f02, 0x0f12, 0x0f20, 0x0f33, 0x0f47, + 0x0f4f, 0x0f59, 0x0f61, 0x0f85, 0x0f91, 0x0f9f, 0x0fad, 0x0fb9, + 0x0fc5, 0x0ffa, 0x100f, 0x102c, 0x103c, 0x104c, 0x105f, 0x108e, + 0x10a0, 0x10c0, 0x10e4, 0x10f0, 0x10fe, 0x1120, 0x112a, 0x1136, + // Entry 100 - 13F + 0x113c, 0x1146, 0x115d, 0x1169, 0x1177, 0x1190, 0x1198, 0x11a4, + 0x11bb, 0x11d2, 0x11e2, 0x11f9, 0x120e, 0x1225, 0x123c, 0x1251, + 0x1278, 0x1288, 0x12af, 0x12bf, 0x12d4, 0x12e9, 0x1307, 0x131a, + 0x132e, 0x1340, 0x1365, 0x1377, 0x1381, 0x1394, 0x13a9, 0x13b1, + 0x13c4, 0x13d7, 0x13ea, 0x1403, +} // Size: 608 bytes + +const uzRegionStr string = "" + // Size: 3234 bytes + "Me’roj oroliAndorraBirlashgan Arab AmirliklariAfgʻonistonAntigua va Barb" + + "udaAngilyaAlbaniyaArmanistonAngolaAntarktidaArgentinaAmerika SamoasiAvst" + + "riyaAvstraliyaArubaAland orollariOzarbayjonBosniya va GertsegovinaBarbad" + + "osBangladeshBelgiyaBurkina-FasoBolgariyaBahraynBurundiBeninSen-Bartelemi" + + "Bermuda orollariBruneyBoliviyaBoneyr, Sint-Estatius va SabaBraziliyaBaga" + + "ma orollariButanBuve oroliBotsvanaBelarusBelizKanadaKokos (Kiling) oroll" + + "ariKongo – KinshasaMarkaziy Afrika RespublikasiKongo – BrazzavilShveytsa" + + "riyaKot-d’IvuarKuk orollariChiliKamerunXitoyKolumbiyaKlipperton oroliKos" + + "ta-RikaKubaKabo-VerdeKyurasaoRojdestvo oroliKiprChexiya RespublikasiGerm" + + "aniyaDiyego-GarsiyaJibutiDaniyaDominikaDominikan RespublikasiJazoirSeuta" + + " va MelilyaEkvadorEstoniyaMisrG‘arbiy Sahroi KabirEritreyaIspaniyaEfiopi" + + "yaYevropa IttifoqiFinlandiyaFijiFolklend orollariMikroneziyaFarer orolla" + + "riFransiyaGabonBuyuk BritaniyaGrenadaGruziyaFransuz GvianasiGernsiGanaGi" + + "braltarGrenlandiyaGambiyaGvineyaGvadelupeEkvatorial GvineyaGretsiyaJanub" + + "iy Georgiya va Janubiy Sendvich orollariGvatemalaGuamGvineya-BisauGayana" + + "Gonkong (Xitoy MMH)Xerd va Makdonald orollariGondurasXorvatiyaGaitiVengr" + + "iyaKanar orollariIndoneziyaIrlandiyaIsroilMen oroliHindistonBritaniyanin" + + "g Hind okeanidagi hududiIroqEronIslandiyaItaliyaJersiYamaykaIordaniyaYap" + + "oniyaKeniyaQirgʻizistonKambodjaKiribatiKomor orollariSent-Kits va NevisS" + + "himoliy KoreyaJanubiy KoreyaQuvaytKayman orollariQozogʻistonLaosLivanSen" + + "t-LyusiyaLixtenshteynShri-LankaLiberiyaLesotoLitvaLyuksemburgLatviyaLivi" + + "yaMarokashMonakoMoldovaChernogoriyaSent-MartinMadagaskarMarshall orollar" + + "iMakedoniyaMaliMyanma (Birma)MongoliyaMakao (Xitoy MMH)Shimoliy Mariana " + + "orollariMartinikaMavritaniyaMontserratMaltaMavrikiyMaldiv orollariMalavi" + + "MeksikaMalayziyaMozambikNamibiyaYangi KaledoniyaNigerNorfolk oroliNigeri" + + "yaNikaraguaNiderlandiyaNorvegiyaNepalNauruNiueYangi ZelandiyaUmmonPanama" + + "PeruFransuz PolineziyasiPapua – Yangi GvineyaFilippinPokistonPolshaSen-P" + + "yer va MikelonPitkern orollariPuerto-RikoFalastin hududiPortugaliyaPalau" + + "ParagvayQatarTashqi OkeaniyaReyunionRuminiyaSerbiyaRossiyaRuandaSaudiya " + + "ArabistoniSolomon orollariSeyshel orollariSudanShvetsiyaSingapurMuqaddas" + + " Yelena oroliSloveniyaSvalbard va Yan-MayenSlovakiyaSyerra-LeoneSan-Mari" + + "noSenegalSomaliSurinamJanubiy SudanSan-Tome va PrinsipiSalvadorSint-Mart" + + "enSuriyaSvazilendTristan-da-KunyaTurks va Kaykos orollariChadFransuz Jan" + + "ubiy hududlariTogoTailandTojikistonTokelauTimor-LesteTurkmanistonTunisTo" + + "ngaTurkiyaTrinidad va TobagoTuvaluTayvanTanzaniyaUkrainaUgandaAQSH yondo" + + "sh orollariBirlashgan Millatlar TashkilotiAmerika Qo‘shma ShtatlariUrugv" + + "ayOʻzbekistonVatikanSent-Vinsent va GrenadinVenesuelaBritaniya Virgin or" + + "ollariAQSH Virgin orollariVyetnamVanuatuUollis va FutunaSamoaKosovoYaman" + + "MayottaJanubiy Afrika RespublikasiZambiyaZimbabveNoma’lum mintaqaDunyoAf" + + "rikaShimoliy AmerikaJanubiy AmerikaOkeaniyaG‘arbiy AfrikaMarkaziy Amerik" + + "aSharqiy AfrikaShimoliy AfrikaMarkaziy AfrikaJanubiy AfrikaAmerikaShimol" + + "iy Amerika – AQSH va KanadaKarib havzasiSharqiy OsiyoJanubiy OsiyoJanubi" + + "-sharqiy OsiyoJanubiy YevropaAvstralaziyaMelaneziyaMikroneziya mintaqasi" + + "PolineziyaOsiyoMarkaziy OsiyoG‘arbiy OsiyoYevropaSharqiy YevropaShimoliy" + + " YevropaG‘arbiy YevropaLotin Amerikasi" + +var uzRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x0015, 0x0030, 0x003c, 0x004e, 0x0055, 0x005d, + 0x0067, 0x006d, 0x0077, 0x0080, 0x008f, 0x0097, 0x00a1, 0x00a6, + 0x00b4, 0x00be, 0x00d5, 0x00dd, 0x00e7, 0x00ee, 0x00fa, 0x0103, + 0x010a, 0x0111, 0x0116, 0x0123, 0x0133, 0x0139, 0x0141, 0x015e, + 0x0167, 0x0176, 0x017b, 0x0185, 0x018d, 0x0194, 0x0199, 0x019f, + 0x01b6, 0x01c8, 0x01e4, 0x01f7, 0x0203, 0x0210, 0x021c, 0x0221, + 0x0228, 0x022d, 0x0236, 0x0246, 0x0250, 0x0254, 0x025e, 0x0266, + 0x0275, 0x0279, 0x028d, 0x0296, 0x02a4, 0x02aa, 0x02b0, 0x02b8, + // Entry 40 - 7F + 0x02ce, 0x02d4, 0x02e4, 0x02eb, 0x02f3, 0x02f7, 0x030d, 0x0315, + 0x031d, 0x0325, 0x0335, 0x0335, 0x033f, 0x0343, 0x0354, 0x035f, + 0x036d, 0x0375, 0x037a, 0x0389, 0x0390, 0x0397, 0x03a7, 0x03ad, + 0x03b1, 0x03ba, 0x03c5, 0x03cc, 0x03d3, 0x03dc, 0x03ee, 0x03f6, + 0x0423, 0x042c, 0x0430, 0x043d, 0x0443, 0x0456, 0x0470, 0x0478, + 0x0481, 0x0486, 0x048e, 0x049c, 0x04a6, 0x04af, 0x04b5, 0x04be, + 0x04c7, 0x04eb, 0x04ef, 0x04f3, 0x04fc, 0x0503, 0x0508, 0x050f, + 0x0518, 0x0520, 0x0526, 0x0533, 0x053b, 0x0543, 0x0551, 0x0563, + // Entry 80 - BF + 0x0572, 0x0580, 0x0586, 0x0595, 0x05a1, 0x05a5, 0x05aa, 0x05b6, + 0x05c2, 0x05cc, 0x05d4, 0x05da, 0x05df, 0x05ea, 0x05f1, 0x05f7, + 0x05ff, 0x0605, 0x060c, 0x0618, 0x0623, 0x062d, 0x063e, 0x0648, + 0x064c, 0x065a, 0x0663, 0x0674, 0x068d, 0x0696, 0x06a1, 0x06ab, + 0x06b0, 0x06b8, 0x06c7, 0x06cd, 0x06d4, 0x06dd, 0x06e5, 0x06ed, + 0x06fd, 0x0702, 0x070f, 0x0717, 0x0720, 0x072c, 0x0735, 0x073a, + 0x073f, 0x0743, 0x0752, 0x0757, 0x075d, 0x0761, 0x0775, 0x078c, + 0x0794, 0x079c, 0x07a2, 0x07b5, 0x07c5, 0x07d0, 0x07df, 0x07ea, + // Entry C0 - FF + 0x07ef, 0x07f7, 0x07fc, 0x080b, 0x0813, 0x081b, 0x0822, 0x0829, + 0x082f, 0x0841, 0x0851, 0x0861, 0x0866, 0x086f, 0x0877, 0x088c, + 0x0895, 0x08aa, 0x08b3, 0x08bf, 0x08c9, 0x08d0, 0x08d6, 0x08dd, + 0x08ea, 0x08fe, 0x0906, 0x0911, 0x0917, 0x0920, 0x0930, 0x0948, + 0x094c, 0x0965, 0x0969, 0x0970, 0x097a, 0x0981, 0x098c, 0x0998, + 0x099d, 0x09a2, 0x09a9, 0x09bb, 0x09c1, 0x09c7, 0x09d0, 0x09d7, + 0x09dd, 0x09f2, 0x0a11, 0x0a2c, 0x0a33, 0x0a3f, 0x0a46, 0x0a5e, + 0x0a67, 0x0a80, 0x0a94, 0x0a9b, 0x0aa2, 0x0ab2, 0x0ab7, 0x0abd, + // Entry 100 - 13F + 0x0ac2, 0x0ac9, 0x0ae4, 0x0aeb, 0x0af3, 0x0b05, 0x0b0a, 0x0b10, + 0x0b20, 0x0b2f, 0x0b37, 0x0b47, 0x0b57, 0x0b65, 0x0b74, 0x0b83, + 0x0b91, 0x0b98, 0x0bbb, 0x0bc8, 0x0bd5, 0x0be2, 0x0bf6, 0x0c05, + 0x0c11, 0x0c1b, 0x0c30, 0x0c3a, 0x0c3f, 0x0c4d, 0x0c5c, 0x0c63, + 0x0c72, 0x0c82, 0x0c93, 0x0ca2, +} // Size: 608 bytes + +const viRegionStr string = "" + // Size: 3234 bytes + "Đảo AscensionAndorraCác Tiểu Vương quốc Ả Rập Thống nhấtAfghanistanAntig" + + "ua và BarbudaAnguillaAlbaniaArmeniaAngolaNam CựcArgentinaĐảo Somoa thuộc" + + " MỹÁoAustraliaArubaQuần đảo ÅlandAzerbaijanBosnia và HerzegovinaBarbados" + + "BangladeshBỉBurkina FasoBulgariaBahrainBurundiBeninSt. BarthélemyBermuda" + + "BruneiBoliviaCa-ri-bê Hà LanBrazilBahamasBhutanĐảo BouvetBotswanaBelarus" + + "BelizeCanadaQuần đảo Cocos (Keeling)Congo - KinshasaCộng hòa Trung PhiCo" + + "ngo - BrazzavilleThụy SĩCôte d’IvoireQuần đảo CookChileCameroonTrung Quố" + + "cColombiaĐảo ClippertonCosta RicaCubaCape VerdeCuraçaoĐảo Giáng SinhSípC" + + "ộng hòa SécĐứcDiego GarciaDjiboutiĐan MạchDominicaCộng hòa DominicaAlg" + + "eriaCeuta và MelillaEcuadorEstoniaAi CậpTây SaharaEritreaTây Ban NhaEthi" + + "opiaLiên Minh Châu ÂuPhần LanFijiQuần đảo FalklandMicronesiaQuần đảo Far" + + "oePhápGabonVương quốc AnhGrenadaGruziaGuiana thuộc PhápGuernseyGhanaGibr" + + "altarGreenlandGambiaGuineaGuadeloupeGuinea Xích ĐạoHy LạpQuần đảo Nam Ge" + + "orgia và Nam SandwichGuatemalaGuamGuinea-BissauGuyanaHồng Kông, Trung Qu" + + "ốcQuần đảo Heard và McDonaldHondurasCroatiaHaitiHungaryQuần đảo Canary" + + "IndonesiaIrelandIsraelĐảo ManẤn ĐộLãnh thổ Anh tại Ấn Độ DươngIraqIranIc" + + "elandÝJerseyJamaicaJordanNhật BảnKenyaKyrgyzstanCampuchiaKiribatiComoros" + + "St. Kitts và NevisTriều TiênHàn QuốcKuwaitQuần đảo CaymanKazakhstanLàoLi" + + "-băngSt. LuciaLiechtensteinSri LankaLiberiaLesothoLitvaLuxembourgLatviaL" + + "ibyaMa-rốcMonacoMoldovaMontenegroSt. MartinMadagascarQuần đảo MarshallMa" + + "cedoniaMaliMyanmar (Miến Điện)Mông CổMacao, Trung QuốcQuần đảo Bắc Maria" + + "naMartiniqueMauritaniaMontserratMaltaMauritiusMaldivesMalawiMexicoMalays" + + "iaMozambiqueNamibiaNew CaledoniaNigerĐảo NorfolkNigeriaNicaraguaHà LanNa" + + " UyNepalNauruNiueNew ZealandOmanPanamaPeruPolynesia thuộc PhápPapua New " + + "GuineaPhilippinesPakistanBa LanSaint Pierre và MiquelonQuần đảo Pitcairn" + + "Puerto RicoLãnh thổ PalestineBồ Đào NhaPalauParaguayQatarVùng xa xôi thu" + + "ộc Châu Đại DươngRéunionRomaniaSerbiaNgaRwandaẢ Rập Xê-útQuần đảo Solo" + + "monSeychellesSudanThụy ĐiểnSingaporeSt. HelenaSloveniaSvalbard và Jan Ma" + + "yenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinameNam SudanSão Tomé" + + " và PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da CunhaQuần đả" + + "o Turk và CaicosChadLãnh thổ phía Nam Thuộc PhápTogoThái LanTajikistanTo" + + "kelauTimor-LesteTurkmenistanTunisiaTongaThổ Nhĩ KỳTrinidad và TobagoTuva" + + "luĐài LoanTanzaniaUkrainaUgandaCác đảo xa thuộc Hoa KỳLiên hiệp quốcHoa " + + "KỳUruguayUzbekistanThành VaticanSt. Vincent và GrenadinesVenezuelaQuần đ" + + "ảo Virgin thuộc AnhQuần đảo Virgin thuộc MỹViệt NamVanuatuWallis và Fu" + + "tunaSamoaKosovoYemenMayotteNam PhiZambiaZimbabweVùng không xác địnhThế g" + + "iớiChâu PhiBắc MỹNam MỹChâu Đại DươngTây PhiTrung MỹĐông PhiBắc PhiTrung" + + " PhiMiền Nam Châu PhiChâu MỹMiền Bắc Châu MỹCa-ri-bêĐông ÁNam ÁĐông Nam " + + "ÁNam ÂuÚc và New ZealandMelanesiaVùng MicronesianPolynesiaChâu ÁTrung Á" + + "Tây ÁChâu ÂuĐông ÂuBắc ÂuTây ÂuChâu Mỹ La-tinh" + +var viRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x004a, 0x0055, 0x0068, 0x0070, 0x0077, + 0x007e, 0x0084, 0x008d, 0x0096, 0x00af, 0x00b2, 0x00bb, 0x00c0, + 0x00d4, 0x00de, 0x00f4, 0x00fc, 0x0106, 0x010a, 0x0116, 0x011e, + 0x0125, 0x012c, 0x0131, 0x0140, 0x0147, 0x014d, 0x0154, 0x0165, + 0x016b, 0x0172, 0x0178, 0x0185, 0x018d, 0x0194, 0x019a, 0x01a0, + 0x01bd, 0x01cd, 0x01e2, 0x01f5, 0x01ff, 0x020f, 0x0221, 0x0226, + 0x022e, 0x023a, 0x0242, 0x0253, 0x025d, 0x0261, 0x026b, 0x0273, + 0x0285, 0x0289, 0x0299, 0x029f, 0x02ab, 0x02b3, 0x02be, 0x02c6, + // Entry 40 - 7F + 0x02da, 0x02e1, 0x02f2, 0x02f9, 0x0300, 0x0308, 0x0313, 0x031a, + 0x0326, 0x032e, 0x0342, 0x0342, 0x034c, 0x0350, 0x0366, 0x0370, + 0x0383, 0x0388, 0x038d, 0x039f, 0x03a6, 0x03ac, 0x03c0, 0x03c8, + 0x03cd, 0x03d6, 0x03df, 0x03e5, 0x03eb, 0x03f5, 0x0408, 0x0410, + 0x043a, 0x0443, 0x0447, 0x0454, 0x045a, 0x0474, 0x0494, 0x049c, + 0x04a3, 0x04a8, 0x04af, 0x04c3, 0x04cc, 0x04d3, 0x04d9, 0x04e3, + 0x04ed, 0x0515, 0x0519, 0x051d, 0x0524, 0x0526, 0x052c, 0x0533, + 0x0539, 0x0545, 0x054a, 0x0554, 0x055d, 0x0565, 0x056c, 0x057f, + // Entry 80 - BF + 0x058c, 0x0597, 0x059d, 0x05b1, 0x05bb, 0x05bf, 0x05c7, 0x05d0, + 0x05dd, 0x05e6, 0x05ed, 0x05f4, 0x05f9, 0x0603, 0x0609, 0x060e, + 0x0616, 0x061c, 0x0623, 0x062d, 0x0637, 0x0641, 0x0657, 0x0660, + 0x0664, 0x067c, 0x0686, 0x0699, 0x06b4, 0x06be, 0x06c8, 0x06d2, + 0x06d7, 0x06e0, 0x06e8, 0x06ee, 0x06f4, 0x06fc, 0x0706, 0x070d, + 0x071a, 0x071f, 0x072d, 0x0734, 0x073d, 0x0744, 0x0749, 0x074e, + 0x0753, 0x0757, 0x0762, 0x0766, 0x076c, 0x0770, 0x0787, 0x0797, + 0x07a2, 0x07aa, 0x07b0, 0x07c9, 0x07df, 0x07ea, 0x07ff, 0x080d, + // Entry C0 - FF + 0x0812, 0x081a, 0x081f, 0x0849, 0x0851, 0x0858, 0x085e, 0x0861, + 0x0867, 0x0878, 0x088d, 0x0897, 0x089c, 0x08aa, 0x08b3, 0x08bd, + 0x08c5, 0x08db, 0x08e3, 0x08ef, 0x08f9, 0x0900, 0x0907, 0x090f, + 0x0918, 0x0930, 0x093b, 0x0947, 0x094c, 0x0955, 0x0965, 0x0982, + 0x0986, 0x09a9, 0x09ad, 0x09b6, 0x09c0, 0x09c7, 0x09d2, 0x09de, + 0x09e5, 0x09ea, 0x09f9, 0x0a0c, 0x0a12, 0x0a1c, 0x0a24, 0x0a2b, + 0x0a31, 0x0a50, 0x0a63, 0x0a6b, 0x0a72, 0x0a7c, 0x0a8a, 0x0aa4, + 0x0aad, 0x0acd, 0x0aee, 0x0af8, 0x0aff, 0x0b10, 0x0b15, 0x0b1b, + // Entry 100 - 13F + 0x0b20, 0x0b27, 0x0b2e, 0x0b34, 0x0b3c, 0x0b55, 0x0b61, 0x0b6a, + 0x0b74, 0x0b7c, 0x0b90, 0x0b98, 0x0ba2, 0x0bac, 0x0bb5, 0x0bbe, + 0x0bd2, 0x0bdc, 0x0bf3, 0x0bfc, 0x0c05, 0x0c0b, 0x0c18, 0x0c1f, + 0x0c32, 0x0c3b, 0x0c4c, 0x0c55, 0x0c5d, 0x0c65, 0x0c6c, 0x0c75, + 0x0c7f, 0x0c88, 0x0c90, 0x0ca2, +} // Size: 608 bytes + +const zhRegionStr string = "" + // Size: 3319 bytes + "阿森松岛安道尔阿拉伯联合酋长国阿富汗安提瓜和巴布达安圭拉阿尔巴尼亚亚美尼亚安哥拉南极洲阿根廷美属萨摩亚奥地利澳大利亚阿鲁巴奥兰群岛阿塞拜疆波斯尼" + + "亚和黑塞哥维那巴巴多斯孟加拉国比利时布基纳法索保加利亚巴林布隆迪贝宁圣巴泰勒米百慕大文莱玻利维亚荷属加勒比区巴西巴哈马不丹布韦岛博茨瓦纳白俄" + + "罗斯伯利兹加拿大科科斯(基林)群岛刚果(金)中非共和国刚果(布)瑞士科特迪瓦库克群岛智利喀麦隆中国哥伦比亚克利珀顿岛哥斯达黎加古巴佛得角库拉" + + "索圣诞岛塞浦路斯捷克共和国德国迪戈加西亚岛吉布提丹麦多米尼克多米尼加共和国阿尔及利亚休达及梅利利亚厄瓜多尔爱沙尼亚埃及西撒哈拉厄立特里亚西班" + + "牙埃塞俄比亚欧盟芬兰斐济福克兰群岛密克罗尼西亚法罗群岛法国加蓬英国格林纳达格鲁吉亚法属圭亚那格恩西岛加纳直布罗陀格陵兰冈比亚几内亚瓜德罗普赤" + + "道几内亚希腊南乔治亚和南桑威奇群岛危地马拉关岛几内亚比绍圭亚那中国香港特别行政区赫德岛和麦克唐纳群岛洪都拉斯克罗地亚海地匈牙利加纳利群岛印度" + + "尼西亚爱尔兰以色列马恩岛印度英属印度洋领地伊拉克伊朗冰岛意大利泽西岛牙买加约旦日本肯尼亚吉尔吉斯斯坦柬埔寨基里巴斯科摩罗圣基茨和尼维斯朝鲜韩" + + "国科威特开曼群岛哈萨克斯坦老挝黎巴嫩圣卢西亚列支敦士登斯里兰卡利比里亚莱索托立陶宛卢森堡拉脱维亚利比亚摩洛哥摩纳哥摩尔多瓦黑山圣马丁岛马达加" + + "斯加马绍尔群岛马其顿马里缅甸蒙古中国澳门特别行政区北马里亚纳群岛马提尼克毛里塔尼亚蒙特塞拉特马耳他毛里求斯马尔代夫马拉维墨西哥马来西亚莫桑比" + + "克纳米比亚新喀里多尼亚尼日尔诺福克岛尼日利亚尼加拉瓜荷兰挪威尼泊尔瑙鲁纽埃新西兰阿曼巴拿马秘鲁法属波利尼西亚巴布亚新几内亚菲律宾巴基斯坦波兰" + + "圣皮埃尔和密克隆群岛皮特凯恩群岛波多黎各巴勒斯坦领土葡萄牙帕劳巴拉圭卡塔尔大洋洲边远群岛留尼汪罗马尼亚塞尔维亚俄罗斯卢旺达沙特阿拉伯所罗门群" + + "岛塞舌尔苏丹瑞典新加坡圣赫勒拿斯洛文尼亚斯瓦尔巴和扬马延斯洛伐克塞拉利昂圣马力诺塞内加尔索马里苏里南南苏丹圣多美和普林西比萨尔瓦多荷属圣马丁" + + "叙利亚斯威士兰特里斯坦-达库尼亚群岛特克斯和凯科斯群岛乍得法属南部领地多哥泰国塔吉克斯坦托克劳东帝汶土库曼斯坦突尼斯汤加土耳其特立尼达和多巴" + + "哥图瓦卢台湾坦桑尼亚乌克兰乌干达美国本土外小岛屿联合国美国乌拉圭乌兹别克斯坦梵蒂冈圣文森特和格林纳丁斯委内瑞拉英属维尔京群岛美属维尔京群岛越" + + "南瓦努阿图瓦利斯和富图纳萨摩亚科索沃也门马约特南非赞比亚津巴布韦未知地区世界非洲北美洲南美洲大洋洲西非中美洲东非北非中非南部非洲美洲美洲北部" + + "加勒比地区东亚南亚东南亚南欧澳大拉西亚美拉尼西亚密克罗尼西亚地区玻利尼西亚亚洲中亚西亚欧洲东欧北欧西欧拉丁美洲" + +var zhRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0015, 0x002d, 0x0036, 0x004b, 0x0054, 0x0063, + 0x006f, 0x0078, 0x0081, 0x008a, 0x0099, 0x00a2, 0x00ae, 0x00b7, + 0x00c3, 0x00cf, 0x00ed, 0x00f9, 0x0105, 0x010e, 0x011d, 0x0129, + 0x012f, 0x0138, 0x013e, 0x014d, 0x0156, 0x015c, 0x0168, 0x017a, + 0x0180, 0x0189, 0x018f, 0x0198, 0x01a4, 0x01b0, 0x01b9, 0x01c2, + 0x01dd, 0x01ec, 0x01fb, 0x020a, 0x0210, 0x021c, 0x0228, 0x022e, + 0x0237, 0x023d, 0x0249, 0x0258, 0x0267, 0x026d, 0x0276, 0x027f, + 0x0288, 0x0294, 0x02a3, 0x02a9, 0x02bb, 0x02c4, 0x02ca, 0x02d6, + // Entry 40 - 7F + 0x02eb, 0x02fa, 0x030f, 0x031b, 0x0327, 0x032d, 0x0339, 0x0348, + 0x0351, 0x0360, 0x0366, 0x0366, 0x036c, 0x0372, 0x0381, 0x0393, + 0x039f, 0x03a5, 0x03ab, 0x03b1, 0x03bd, 0x03c9, 0x03d8, 0x03e4, + 0x03ea, 0x03f6, 0x03ff, 0x0408, 0x0411, 0x041d, 0x042c, 0x0432, + 0x0453, 0x045f, 0x0465, 0x0474, 0x047d, 0x0498, 0x04b6, 0x04c2, + 0x04ce, 0x04d4, 0x04dd, 0x04ec, 0x04fb, 0x0504, 0x050d, 0x0516, + 0x051c, 0x0531, 0x053a, 0x0540, 0x0546, 0x054f, 0x0558, 0x0561, + 0x0567, 0x056d, 0x0576, 0x0588, 0x0591, 0x059d, 0x05a6, 0x05bb, + // Entry 80 - BF + 0x05c1, 0x05c7, 0x05d0, 0x05dc, 0x05eb, 0x05f1, 0x05fa, 0x0606, + 0x0615, 0x0621, 0x062d, 0x0636, 0x063f, 0x0648, 0x0654, 0x065d, + 0x0666, 0x066f, 0x067b, 0x0681, 0x068d, 0x069c, 0x06ab, 0x06b4, + 0x06ba, 0x06c0, 0x06c6, 0x06e1, 0x06f6, 0x0702, 0x0711, 0x0720, + 0x0729, 0x0735, 0x0741, 0x074a, 0x0753, 0x075f, 0x076b, 0x0777, + 0x0789, 0x0792, 0x079e, 0x07aa, 0x07b6, 0x07bc, 0x07c2, 0x07cb, + 0x07d1, 0x07d7, 0x07e0, 0x07e6, 0x07ef, 0x07f5, 0x080a, 0x081f, + 0x0828, 0x0834, 0x083a, 0x0858, 0x086a, 0x0876, 0x0888, 0x0891, + // Entry C0 - FF + 0x0897, 0x08a0, 0x08a9, 0x08be, 0x08c7, 0x08d3, 0x08df, 0x08e8, + 0x08f1, 0x0900, 0x090f, 0x0918, 0x091e, 0x0924, 0x092d, 0x0939, + 0x0948, 0x0960, 0x096c, 0x0978, 0x0984, 0x0990, 0x0999, 0x09a2, + 0x09ab, 0x09c3, 0x09cf, 0x09de, 0x09e7, 0x09f3, 0x0a12, 0x0a2d, + 0x0a33, 0x0a45, 0x0a4b, 0x0a51, 0x0a60, 0x0a69, 0x0a72, 0x0a81, + 0x0a8a, 0x0a90, 0x0a99, 0x0ab1, 0x0aba, 0x0ac0, 0x0acc, 0x0ad5, + 0x0ade, 0x0af6, 0x0aff, 0x0b05, 0x0b0e, 0x0b20, 0x0b29, 0x0b47, + 0x0b53, 0x0b68, 0x0b7d, 0x0b83, 0x0b8f, 0x0ba4, 0x0bad, 0x0bb6, + // Entry 100 - 13F + 0x0bbc, 0x0bc5, 0x0bcb, 0x0bd4, 0x0be0, 0x0bec, 0x0bf2, 0x0bf8, + 0x0c01, 0x0c0a, 0x0c13, 0x0c19, 0x0c22, 0x0c28, 0x0c2e, 0x0c34, + 0x0c40, 0x0c46, 0x0c52, 0x0c61, 0x0c67, 0x0c6d, 0x0c76, 0x0c7c, + 0x0c8b, 0x0c9a, 0x0cb2, 0x0cc1, 0x0cc7, 0x0ccd, 0x0cd3, 0x0cd9, + 0x0cdf, 0x0ce5, 0x0ceb, 0x0cf7, +} // Size: 608 bytes + +const zhHantRegionStr string = "" + // Size: 3264 bytes + "阿森松島安道爾阿拉伯聯合大公國阿富汗安地卡及巴布達安圭拉阿爾巴尼亞亞美尼亞安哥拉南極洲阿根廷美屬薩摩亞奧地利澳洲荷屬阿魯巴奧蘭群島亞塞拜然波士尼" + + "亞與赫塞哥維納巴貝多孟加拉比利時布吉納法索保加利亞巴林蒲隆地貝南聖巴瑟米百慕達汶萊玻利維亞荷蘭加勒比區巴西巴哈馬不丹布威島波札那白俄羅斯貝里" + + "斯加拿大科科斯(基林)群島剛果(金夏沙)中非共和國剛果(布拉薩)瑞士象牙海岸庫克群島智利喀麥隆中國哥倫比亞克里派頓島哥斯大黎加古巴維德角庫拉" + + "索聖誕島賽普勒斯捷克共和國德國迪亞哥加西亞島吉布地丹麥多米尼克多明尼加共和國阿爾及利亞休達與梅利利亞厄瓜多愛沙尼亞埃及西撒哈拉厄利垂亞西班牙" + + "衣索比亞歐盟芬蘭斐濟福克蘭群島密克羅尼西亞群島法羅群島法國加彭英國格瑞那達喬治亞法屬圭亞那根息迦納直布羅陀格陵蘭甘比亞幾內亞瓜地洛普赤道幾內" + + "亞希臘南喬治亞與南三明治群島瓜地馬拉關島幾內亞比索蓋亞那中國香港特別行政區赫德島和麥克唐納群島宏都拉斯克羅埃西亞海地匈牙利加那利群島印尼愛爾" + + "蘭以色列曼島印度英屬印度洋領地伊拉克伊朗冰島義大利澤西島牙買加約旦日本肯亞吉爾吉斯柬埔寨吉里巴斯葛摩聖克里斯多福及尼維斯北韓南韓科威特開曼群" + + "島哈薩克寮國黎巴嫩聖露西亞列支敦斯登斯里蘭卡賴比瑞亞賴索托立陶宛盧森堡拉脫維亞利比亞摩洛哥摩納哥摩爾多瓦蒙特內哥羅法屬聖馬丁馬達加斯加馬紹爾" + + "群島馬其頓馬利緬甸蒙古中國澳門特別行政區北馬里亞納群島馬丁尼克島茅利塔尼亞蒙哲臘馬爾他模里西斯馬爾地夫馬拉威墨西哥馬來西亞莫三比克納米比亞新" + + "喀里多尼亞尼日諾福克島奈及利亞尼加拉瓜荷蘭挪威尼泊爾諾魯紐埃島紐西蘭阿曼王國巴拿馬秘魯法屬玻里尼西亞巴布亞紐幾內亞菲律賓巴基斯坦波蘭聖皮埃爾" + + "和密克隆群島皮特肯群島波多黎各巴勒斯坦自治區葡萄牙帛琉巴拉圭卡達大洋洲邊疆群島留尼旺羅馬尼亞塞爾維亞俄羅斯盧安達沙烏地阿拉伯索羅門群島塞席爾" + + "蘇丹瑞典新加坡聖赫勒拿島斯洛維尼亞冷岸及央棉斯洛伐克獅子山聖馬利諾塞內加爾索馬利亞蘇利南南蘇丹聖多美普林西比薩爾瓦多荷屬聖馬丁敘利亞史瓦濟蘭" + + "特里斯坦達庫尼亞群島土克斯及開科斯群島查德法屬南方屬地多哥泰國塔吉克托克勞群島東帝汶土庫曼突尼西亞東加土耳其千里達及托巴哥吐瓦魯台灣坦尚尼亞" + + "烏克蘭烏干達美國本土外小島嶼聯合國美國烏拉圭烏茲別克梵蒂岡聖文森及格瑞那丁委內瑞拉英屬維京群島美屬維京群島越南萬那杜瓦利斯群島和富圖那群島薩" + + "摩亞科索沃葉門馬約特南非尚比亞辛巴威未知區域世界非洲北美洲南美洲大洋洲西非中美東非北非中非非洲南部美洲北美加勒比海東亞南亞東南亞南歐澳洲與紐" + + "西蘭美拉尼西亞密克羅尼西亞玻里尼西亞亞洲中亞西亞歐洲東歐北歐西歐拉丁美洲" + +var zhHantRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0015, 0x002d, 0x0036, 0x004b, 0x0054, 0x0063, + 0x006f, 0x0078, 0x0081, 0x008a, 0x0099, 0x00a2, 0x00a8, 0x00b7, + 0x00c3, 0x00cf, 0x00ed, 0x00f6, 0x00ff, 0x0108, 0x0117, 0x0123, + 0x0129, 0x0132, 0x0138, 0x0144, 0x014d, 0x0153, 0x015f, 0x0171, + 0x0177, 0x0180, 0x0186, 0x018f, 0x0198, 0x01a4, 0x01ad, 0x01b6, + 0x01d1, 0x01e6, 0x01f5, 0x020a, 0x0210, 0x021c, 0x0228, 0x022e, + 0x0237, 0x023d, 0x0249, 0x0258, 0x0267, 0x026d, 0x0276, 0x027f, + 0x0288, 0x0294, 0x02a3, 0x02a9, 0x02be, 0x02c7, 0x02cd, 0x02d9, + // Entry 40 - 7F + 0x02ee, 0x02fd, 0x0312, 0x031b, 0x0327, 0x032d, 0x0339, 0x0345, + 0x034e, 0x035a, 0x0360, 0x0360, 0x0366, 0x036c, 0x037b, 0x0393, + 0x039f, 0x03a5, 0x03ab, 0x03b1, 0x03bd, 0x03c6, 0x03d5, 0x03db, + 0x03e1, 0x03ed, 0x03f6, 0x03ff, 0x0408, 0x0414, 0x0423, 0x0429, + 0x044a, 0x0456, 0x045c, 0x046b, 0x0474, 0x048f, 0x04ad, 0x04b9, + 0x04c8, 0x04ce, 0x04d7, 0x04e6, 0x04ec, 0x04f5, 0x04fe, 0x0504, + 0x050a, 0x051f, 0x0528, 0x052e, 0x0534, 0x053d, 0x0546, 0x054f, + 0x0555, 0x055b, 0x0561, 0x056d, 0x0576, 0x0582, 0x0588, 0x05a6, + // Entry 80 - BF + 0x05ac, 0x05b2, 0x05bb, 0x05c7, 0x05d0, 0x05d6, 0x05df, 0x05eb, + 0x05fa, 0x0606, 0x0612, 0x061b, 0x0624, 0x062d, 0x0639, 0x0642, + 0x064b, 0x0654, 0x0660, 0x066f, 0x067e, 0x068d, 0x069c, 0x06a5, + 0x06ab, 0x06b1, 0x06b7, 0x06d2, 0x06e7, 0x06f6, 0x0705, 0x070e, + 0x0717, 0x0723, 0x072f, 0x0738, 0x0741, 0x074d, 0x0759, 0x0765, + 0x0777, 0x077d, 0x0789, 0x0795, 0x07a1, 0x07a7, 0x07ad, 0x07b6, + 0x07bc, 0x07c5, 0x07ce, 0x07da, 0x07e3, 0x07e9, 0x07fe, 0x0813, + 0x081c, 0x0828, 0x082e, 0x084c, 0x085b, 0x0867, 0x087c, 0x0885, + // Entry C0 - FF + 0x088b, 0x0894, 0x089a, 0x08af, 0x08b8, 0x08c4, 0x08d0, 0x08d9, + 0x08e2, 0x08f4, 0x0903, 0x090c, 0x0912, 0x0918, 0x0921, 0x0930, + 0x093f, 0x094e, 0x095a, 0x0963, 0x096f, 0x097b, 0x0987, 0x0990, + 0x0999, 0x09ae, 0x09ba, 0x09c9, 0x09d2, 0x09de, 0x09fc, 0x0a17, + 0x0a1d, 0x0a2f, 0x0a35, 0x0a3b, 0x0a44, 0x0a53, 0x0a5c, 0x0a65, + 0x0a71, 0x0a77, 0x0a80, 0x0a95, 0x0a9e, 0x0aa4, 0x0ab0, 0x0ab9, + 0x0ac2, 0x0ada, 0x0ae3, 0x0ae9, 0x0af2, 0x0afe, 0x0b07, 0x0b1f, + 0x0b2b, 0x0b3d, 0x0b4f, 0x0b55, 0x0b5e, 0x0b7f, 0x0b88, 0x0b91, + // Entry 100 - 13F + 0x0b97, 0x0ba0, 0x0ba6, 0x0baf, 0x0bb8, 0x0bc4, 0x0bca, 0x0bd0, + 0x0bd9, 0x0be2, 0x0beb, 0x0bf1, 0x0bf7, 0x0bfd, 0x0c03, 0x0c09, + 0x0c15, 0x0c1b, 0x0c21, 0x0c2d, 0x0c33, 0x0c39, 0x0c42, 0x0c48, + 0x0c5a, 0x0c69, 0x0c7b, 0x0c8a, 0x0c90, 0x0c96, 0x0c9c, 0x0ca2, + 0x0ca8, 0x0cae, 0x0cb4, 0x0cc0, +} // Size: 608 bytes + +const zuRegionStr string = "" + // Size: 3568 bytes + "i-Ascension Islandi-Andorrai-United Arab Emiratesi-Afghanistani-Antigua " + + "ne-Barbudai-Anguillai-Albaniai-Armeniai-Angolai-Antarcticai-Argentinai-A" + + "merican Samoai-Austriai-Australiai-Arubai-Åland Islandsi-Azerbaijani-Bos" + + "nia ne-Herzegovinai-Barbadosi-Bangladeshi-Belgiumi-Burkina Fasoi-Bulgari" + + "ai-Bahraini-Burundii-Benini-Saint Barthélemyi-Bermudai-Bruneii-Boliviai-" + + "Caribbean Netherlandsi-Brazili-Bahamasi-Bhutani-Bouvet IslandiBotswanai-" + + "Belarusi-Belizei-Canadai-Cocos (Keeling) Islandsi-Congo - Kinshasai-Cent" + + "ral African Republici-Congo - Brazzavillei-Switzerlandi-Côte d’Ivoirei-C" + + "ook Islandsi-Chilei-Camerooni-Chinai-Colombiai-Clipperton Islandi-Costa " + + "Ricai-Cubai-Cape Verdei-Curaçaoi-Christmas Islandi-Cyprusi-Czech Republi" + + "ci-Germanyi-Diego Garciai-Djiboutii-Denmarki-Dominicai-Dominican Republi" + + "ci-Algeriai-Cueta ne-Melillai-Ecuadori-Estoniai-Egypti-Western Saharai-E" + + "ritreai-Spaini-Ethiopiai-European Unioni-Finlandi-Fijii-Falkland Islands" + + "i-Micronesiai-Faroe Islandsi-Francei-Gaboni-United Kingdomi-Grenadai-Geo" + + "rgiai-French Guianai-Guernseyi-Ghanai-Gibraltari-Greenlandi-Gambiai-Guin" + + "eai-Guadeloupei-Equatorial Guineai-Greecei-South Georgia ne-South Sandwi" + + "ch Islandsi-Guatemalai-Guami-Guinea-Bissaui-Guyanai-Hong Kong SAR Chinai" + + "-Heard Island ne-McDonald Islandsi-Hondurasi-Croatiai-Haitii-Hungaryi-Ca" + + "nary Islandsi-Indonesiai-Irelandkwa-Israeli-Isle of Mani-Indiai-British " + + "Indian Ocean Territoryi-Iraqi-Irani-Icelandi-Italyi-Jerseyi-Jamaicai-Jor" + + "dani-Japani-Kenyai-Kyrgyzstani-Cambodiai-Kiribatii-Comorosi-Saint Kitts " + + "ne-Nevisi-North Koreai-South Koreai-Kuwaiti-Cayman Islandsi-Kazakhstani-" + + "Laosi-Lebanoni-Saint Luciai-Liechtensteini-Sri Lankai-LiberiaiLesothoi-L" + + "ithuaniai-Luxembourgi-Latviai-Libyai-Moroccoi-Monacoi-Moldovai-Montenegr" + + "oi-Saint Martini-Madagascari-Marshall Islandsi-MacedoniaiMalii-Myanmar (" + + "Burma)i-Mongoliai-Macau SAR Chinai-Northern Mariana Islandsi-Martiniquei" + + "-Mauritaniai-Montserrati-Maltai-Mauritiusi-MaldivesiMalawii-Mexicoi-Mala" + + "ysiai-Mozambiquei-Namibiai-New Caledoniai-Nigeri-Norfolk Islandi-Nigeria" + + "i-Nicaraguai-Netherlandsi-Norwayi-Nepali-Naurui-Niuei-New Zealandi-Omani" + + "-Panamai-Perui-French Polynesiai-Papua New Guineai-Philippinesi-Pakistan" + + "i-Polandi-Saint Pierre kanye ne-Miqueloni-Pitcairn Islandsi-Puerto Ricoi" + + "-Palestinian Territoriesi-Portugali-Palaui-Paraguayi-Qatari-Outlying Oce" + + "aniai-Réunioni-Romaniai-Serbiai-Russiai-Rwandai-Saudi Arabiai-Solomon Is" + + "landsi-Seychellesi-Sudani-Swedeni-Singaporei-St. Helenai-Sloveniai-Svalb" + + "ard ne-Jan Mayeni-Slovakiai-Sierra Leonei-San Marinoi-Senegali-Somaliai-" + + "Surinamei-South Sudani-São Tomé kanye ne-Príncipei-El Salvadori-Sint Maa" + + "rteni-Syriai-Swazilandi-Tristan da Cunhai-Turks ne-Caicos Islandsi-Chadi" + + "-French Southern Territoriesi-Togoi-Thailandi-Tajikistani-Tokelaui-Timor" + + "-Lestei-Turkmenistani-Tunisiai-Tongai-Turkeyi-Trinidad ne-Tobagoi-Tuvalu" + + "i-Taiwani-Tanzaniai-Ukrainei-Ugandai-U.S. Minor Outlying IslandsI-United" + + " Nationsi-United Statesi-Uruguayi-Uzbekistani-Vatican Cityi-Saint Vincen" + + "t ne-Grenadinesi-Venezuelai-British Virgin Islandsi-U.S. Virgin Islandsi" + + "-Vietnami-Vanuatui-Wallis ne-Futunai-Samoai-Kosovoi-Yemeni-Mayottei-Sout" + + "h Africai-ZambiaiZimbabweiSifunda esingaziwaumhlabai-Africai-North Ameri" + + "cai-South Americai-Oceaniai-Western Africai-Central Americai-Eastern Afr" + + "icai-Northern Africai-Middle Africai-Southern Africai-Americasi-Northern" + + " Americai-Caribbeani-Eastern Asiai-Southern Asiai-South-Eastern Asiai-So" + + "uthern Europei-Australasiai-Melanesiai-Micronesian Regioni-Polynesiai-As" + + "iai-Central Asiai-Western Asiai-Europei-Eastern Europei-Northern Europei" + + "-Western Europei-Latin America" + +var zuRegionIdx = []uint16{ // 292 elements + // Entry 0 - 3F + 0x0000, 0x0012, 0x001b, 0x0031, 0x003e, 0x0052, 0x005c, 0x0065, + 0x006e, 0x0076, 0x0082, 0x008d, 0x009d, 0x00a6, 0x00b1, 0x00b8, + 0x00c8, 0x00d4, 0x00eb, 0x00f5, 0x0101, 0x010a, 0x0118, 0x0122, + 0x012b, 0x0134, 0x013b, 0x014e, 0x0157, 0x015f, 0x0168, 0x017f, + 0x0187, 0x0190, 0x0198, 0x01a7, 0x01b0, 0x01b9, 0x01c1, 0x01c9, + 0x01e2, 0x01f4, 0x020e, 0x0223, 0x0230, 0x0242, 0x0250, 0x0257, + 0x0261, 0x0268, 0x0272, 0x0285, 0x0291, 0x0297, 0x02a3, 0x02ad, + 0x02bf, 0x02c7, 0x02d7, 0x02e0, 0x02ee, 0x02f8, 0x0301, 0x030b, + // Entry 40 - 7F + 0x031f, 0x0328, 0x033a, 0x0343, 0x034c, 0x0353, 0x0363, 0x036c, + 0x0373, 0x037d, 0x038d, 0x038d, 0x0396, 0x039c, 0x03ae, 0x03ba, + 0x03c9, 0x03d1, 0x03d8, 0x03e8, 0x03f1, 0x03fa, 0x0409, 0x0413, + 0x041a, 0x0425, 0x0430, 0x0438, 0x0440, 0x044c, 0x045f, 0x0467, + 0x0490, 0x049b, 0x04a1, 0x04b0, 0x04b8, 0x04cd, 0x04ef, 0x04f9, + 0x0502, 0x0509, 0x0512, 0x0522, 0x052d, 0x0536, 0x0540, 0x054d, + 0x0554, 0x0574, 0x057a, 0x0580, 0x0589, 0x0590, 0x0598, 0x05a1, + 0x05a9, 0x05b0, 0x05b7, 0x05c3, 0x05cd, 0x05d7, 0x05e0, 0x05f6, + // Entry 80 - BF + 0x0603, 0x0610, 0x0618, 0x0628, 0x0634, 0x063a, 0x0643, 0x0650, + 0x065f, 0x066a, 0x0673, 0x067b, 0x0686, 0x0692, 0x069a, 0x06a1, + 0x06aa, 0x06b2, 0x06bb, 0x06c7, 0x06d5, 0x06e1, 0x06f3, 0x06fe, + 0x0703, 0x0714, 0x071e, 0x072f, 0x0749, 0x0755, 0x0761, 0x076d, + 0x0774, 0x077f, 0x0789, 0x0790, 0x0798, 0x07a2, 0x07ae, 0x07b7, + 0x07c6, 0x07cd, 0x07dd, 0x07e6, 0x07f1, 0x07fe, 0x0806, 0x080d, + 0x0814, 0x081a, 0x0827, 0x082d, 0x0835, 0x083b, 0x084d, 0x085f, + 0x086c, 0x0876, 0x087e, 0x089e, 0x08b0, 0x08bd, 0x08d6, 0x08e0, + // Entry C0 - FF + 0x08e7, 0x08f1, 0x08f8, 0x090a, 0x0914, 0x091d, 0x0925, 0x092d, + 0x0935, 0x0943, 0x0954, 0x0960, 0x0967, 0x096f, 0x097a, 0x0986, + 0x0990, 0x09a7, 0x09b1, 0x09bf, 0x09cb, 0x09d4, 0x09dd, 0x09e7, + 0x09f4, 0x0a13, 0x0a20, 0x0a2e, 0x0a35, 0x0a40, 0x0a52, 0x0a6b, + 0x0a71, 0x0a8e, 0x0a94, 0x0a9e, 0x0aaa, 0x0ab3, 0x0ac0, 0x0ace, + 0x0ad7, 0x0ade, 0x0ae6, 0x0afa, 0x0b02, 0x0b0a, 0x0b14, 0x0b1d, + 0x0b25, 0x0b42, 0x0b52, 0x0b61, 0x0b6a, 0x0b76, 0x0b84, 0x0ba1, + 0x0bac, 0x0bc4, 0x0bd9, 0x0be2, 0x0beb, 0x0bfd, 0x0c04, 0x0c0c, + // Entry 100 - 13F + 0x0c13, 0x0c1c, 0x0c2a, 0x0c32, 0x0c3b, 0x0c4e, 0x0c55, 0x0c5d, + 0x0c6c, 0x0c7b, 0x0c84, 0x0c94, 0x0ca5, 0x0cb5, 0x0cc6, 0x0cd5, + 0x0ce6, 0x0cf0, 0x0d02, 0x0d0d, 0x0d1b, 0x0d2a, 0x0d3e, 0x0d4f, + 0x0d5c, 0x0d67, 0x0d7b, 0x0d86, 0x0d8c, 0x0d9a, 0x0da8, 0x0db0, + 0x0dc0, 0x0dd1, 0x0de1, 0x0df0, +} // Size: 608 bytes + +// Total size for region: 847628 bytes (847 KB) + +const numSupported = 252 + +const supported string = "" + // Size: 1065 bytes + "af|agq|ak|am|ar|ar-EG|ar-LY|ar-SA|as|asa|ast|az|az-Cyrl|bas|be|bem|bez|b" + + "g|bm|bn|bn-IN|bo|bo-IN|br|brx|bs|bs-Cyrl|ca|ce|cgg|chr|ckb|cs|cy|da|dav|" + + "de|de-AT|de-CH|de-LU|dje|dsb|dua|dyo|dz|ebu|ee|el|en|en-AU|en-IN|en-NZ|e" + + "o|es|es-419|es-AR|es-BO|es-CL|es-CO|es-CR|es-DO|es-EC|es-GT|es-HN|es-MX|" + + "es-NI|es-PA|es-PE|es-PR|es-PY|es-SV|es-US|es-VE|et|eu|ewo|fa|fa-AF|ff|fi" + + "|fil|fo|fr|fr-BE|fr-CA|fr-CH|fur|fy|ga|gd|gl|gsw|gu|guz|gv|ha|haw|he|hi|" + + "hr|hsb|hu|hy|id|ig|ii|is|it|ja|jgo|jmc|ka|kab|kam|kde|kea|khq|ki|kk|kkj|" + + "kl|kln|km|kn|ko|ko-KP|kok|ks|ksb|ksf|ksh|kw|ky|lag|lb|lg|lkt|ln|lo|lrc|l" + + "t|lu|luo|luy|lv|mas|mer|mfe|mg|mgh|mgo|mk|ml|mn|mr|ms|mt|mua|my|mzn|naq|" + + "nd|ne|nl|nmg|nn|nnh|no|nus|nyn|om|or|os|pa|pa-Arab|pl|prg|ps|pt|pt-PT|qu" + + "|rm|rn|ro|ro-MD|rof|ru|ru-UA|rw|rwk|sah|saq|sbp|se|se-FI|seh|ses|sg|shi|" + + "shi-Latn|si|sk|sl|smn|sn|so|sq|sr|sr-Cyrl-BA|sr-Cyrl-ME|sr-Cyrl-XK|sr-La" + + "tn|sr-Latn-BA|sr-Latn-ME|sr-Latn-XK|sv|sv-FI|sw|sw-CD|sw-KE|ta|te|teo|th" + + "|ti|to|tr|twq|tzm|ug|uk|ur|ur-IN|uz|uz-Arab|uz-Cyrl|vai|vai-Latn|vi|vun|" + + "wae|xog|yav|yi|yo|yo-BJ|yue|zgh|zh|zh-Hant|zh-Hant-HK|zu|" + +// Dictionary entries of frequent languages +var ( + af = Dictionary{ // af + nil, + header{afLangStr, afLangIdx}, + header{afScriptStr, afScriptIdx}, + header{afRegionStr, afRegionIdx}, + } + am = Dictionary{ // am + nil, + header{amLangStr, amLangIdx}, + header{amScriptStr, amScriptIdx}, + header{amRegionStr, amRegionIdx}, + } + ar = Dictionary{ // ar + nil, + header{arLangStr, arLangIdx}, + header{arScriptStr, arScriptIdx}, + header{arRegionStr, arRegionIdx}, + } + az = Dictionary{ // az + nil, + header{azLangStr, azLangIdx}, + header{azScriptStr, azScriptIdx}, + header{azRegionStr, azRegionIdx}, + } + bg = Dictionary{ // bg + nil, + header{bgLangStr, bgLangIdx}, + header{bgScriptStr, bgScriptIdx}, + header{bgRegionStr, bgRegionIdx}, + } + bn = Dictionary{ // bn + nil, + header{bnLangStr, bnLangIdx}, + header{bnScriptStr, bnScriptIdx}, + header{bnRegionStr, bnRegionIdx}, + } + ca = Dictionary{ // ca + nil, + header{caLangStr, caLangIdx}, + header{caScriptStr, caScriptIdx}, + header{caRegionStr, caRegionIdx}, + } + cs = Dictionary{ // cs + nil, + header{csLangStr, csLangIdx}, + header{csScriptStr, csScriptIdx}, + header{csRegionStr, csRegionIdx}, + } + da = Dictionary{ // da + nil, + header{daLangStr, daLangIdx}, + header{daScriptStr, daScriptIdx}, + header{daRegionStr, daRegionIdx}, + } + de = Dictionary{ // de + nil, + header{deLangStr, deLangIdx}, + header{deScriptStr, deScriptIdx}, + header{deRegionStr, deRegionIdx}, + } + el = Dictionary{ // el + nil, + header{elLangStr, elLangIdx}, + header{elScriptStr, elScriptIdx}, + header{elRegionStr, elRegionIdx}, + } + en = Dictionary{ // en + nil, + header{enLangStr, enLangIdx}, + header{enScriptStr, enScriptIdx}, + header{enRegionStr, enRegionIdx}, + } + es = Dictionary{ // es + nil, + header{esLangStr, esLangIdx}, + header{esScriptStr, esScriptIdx}, + header{esRegionStr, esRegionIdx}, + } + es419 = Dictionary{ // es-419 + &es, + header{es419LangStr, es419LangIdx}, + header{es419ScriptStr, es419ScriptIdx}, + header{es419RegionStr, es419RegionIdx}, + } + et = Dictionary{ // et + nil, + header{etLangStr, etLangIdx}, + header{etScriptStr, etScriptIdx}, + header{etRegionStr, etRegionIdx}, + } + fa = Dictionary{ // fa + nil, + header{faLangStr, faLangIdx}, + header{faScriptStr, faScriptIdx}, + header{faRegionStr, faRegionIdx}, + } + fi = Dictionary{ // fi + nil, + header{fiLangStr, fiLangIdx}, + header{fiScriptStr, fiScriptIdx}, + header{fiRegionStr, fiRegionIdx}, + } + fil = Dictionary{ // fil + nil, + header{filLangStr, filLangIdx}, + header{filScriptStr, filScriptIdx}, + header{filRegionStr, filRegionIdx}, + } + fr = Dictionary{ // fr + nil, + header{frLangStr, frLangIdx}, + header{frScriptStr, frScriptIdx}, + header{frRegionStr, frRegionIdx}, + } + frCA = Dictionary{ // fr-CA + &fr, + header{frCALangStr, frCALangIdx}, + header{frCAScriptStr, frCAScriptIdx}, + header{frCARegionStr, frCARegionIdx}, + } + gu = Dictionary{ // gu + nil, + header{guLangStr, guLangIdx}, + header{guScriptStr, guScriptIdx}, + header{guRegionStr, guRegionIdx}, + } + he = Dictionary{ // he + nil, + header{heLangStr, heLangIdx}, + header{heScriptStr, heScriptIdx}, + header{heRegionStr, heRegionIdx}, + } + hi = Dictionary{ // hi + nil, + header{hiLangStr, hiLangIdx}, + header{hiScriptStr, hiScriptIdx}, + header{hiRegionStr, hiRegionIdx}, + } + hr = Dictionary{ // hr + nil, + header{hrLangStr, hrLangIdx}, + header{hrScriptStr, hrScriptIdx}, + header{hrRegionStr, hrRegionIdx}, + } + hu = Dictionary{ // hu + nil, + header{huLangStr, huLangIdx}, + header{huScriptStr, huScriptIdx}, + header{huRegionStr, huRegionIdx}, + } + hy = Dictionary{ // hy + nil, + header{hyLangStr, hyLangIdx}, + header{hyScriptStr, hyScriptIdx}, + header{hyRegionStr, hyRegionIdx}, + } + id = Dictionary{ // id + nil, + header{idLangStr, idLangIdx}, + header{idScriptStr, idScriptIdx}, + header{idRegionStr, idRegionIdx}, + } + is = Dictionary{ // is + nil, + header{isLangStr, isLangIdx}, + header{isScriptStr, isScriptIdx}, + header{isRegionStr, isRegionIdx}, + } + it = Dictionary{ // it + nil, + header{itLangStr, itLangIdx}, + header{itScriptStr, itScriptIdx}, + header{itRegionStr, itRegionIdx}, + } + ja = Dictionary{ // ja + nil, + header{jaLangStr, jaLangIdx}, + header{jaScriptStr, jaScriptIdx}, + header{jaRegionStr, jaRegionIdx}, + } + ka = Dictionary{ // ka + nil, + header{kaLangStr, kaLangIdx}, + header{kaScriptStr, kaScriptIdx}, + header{kaRegionStr, kaRegionIdx}, + } + kk = Dictionary{ // kk + nil, + header{kkLangStr, kkLangIdx}, + header{kkScriptStr, kkScriptIdx}, + header{kkRegionStr, kkRegionIdx}, + } + km = Dictionary{ // km + nil, + header{kmLangStr, kmLangIdx}, + header{kmScriptStr, kmScriptIdx}, + header{kmRegionStr, kmRegionIdx}, + } + kn = Dictionary{ // kn + nil, + header{knLangStr, knLangIdx}, + header{knScriptStr, knScriptIdx}, + header{knRegionStr, knRegionIdx}, + } + ko = Dictionary{ // ko + nil, + header{koLangStr, koLangIdx}, + header{koScriptStr, koScriptIdx}, + header{koRegionStr, koRegionIdx}, + } + ky = Dictionary{ // ky + nil, + header{kyLangStr, kyLangIdx}, + header{kyScriptStr, kyScriptIdx}, + header{kyRegionStr, kyRegionIdx}, + } + lo = Dictionary{ // lo + nil, + header{loLangStr, loLangIdx}, + header{loScriptStr, loScriptIdx}, + header{loRegionStr, loRegionIdx}, + } + lt = Dictionary{ // lt + nil, + header{ltLangStr, ltLangIdx}, + header{ltScriptStr, ltScriptIdx}, + header{ltRegionStr, ltRegionIdx}, + } + lv = Dictionary{ // lv + nil, + header{lvLangStr, lvLangIdx}, + header{lvScriptStr, lvScriptIdx}, + header{lvRegionStr, lvRegionIdx}, + } + mk = Dictionary{ // mk + nil, + header{mkLangStr, mkLangIdx}, + header{mkScriptStr, mkScriptIdx}, + header{mkRegionStr, mkRegionIdx}, + } + ml = Dictionary{ // ml + nil, + header{mlLangStr, mlLangIdx}, + header{mlScriptStr, mlScriptIdx}, + header{mlRegionStr, mlRegionIdx}, + } + mn = Dictionary{ // mn + nil, + header{mnLangStr, mnLangIdx}, + header{mnScriptStr, mnScriptIdx}, + header{mnRegionStr, mnRegionIdx}, + } + mr = Dictionary{ // mr + nil, + header{mrLangStr, mrLangIdx}, + header{mrScriptStr, mrScriptIdx}, + header{mrRegionStr, mrRegionIdx}, + } + ms = Dictionary{ // ms + nil, + header{msLangStr, msLangIdx}, + header{msScriptStr, msScriptIdx}, + header{msRegionStr, msRegionIdx}, + } + my = Dictionary{ // my + nil, + header{myLangStr, myLangIdx}, + header{myScriptStr, myScriptIdx}, + header{myRegionStr, myRegionIdx}, + } + ne = Dictionary{ // ne + nil, + header{neLangStr, neLangIdx}, + header{neScriptStr, neScriptIdx}, + header{neRegionStr, neRegionIdx}, + } + nl = Dictionary{ // nl + nil, + header{nlLangStr, nlLangIdx}, + header{nlScriptStr, nlScriptIdx}, + header{nlRegionStr, nlRegionIdx}, + } + no = Dictionary{ // no + nil, + header{noLangStr, noLangIdx}, + header{noScriptStr, noScriptIdx}, + header{noRegionStr, noRegionIdx}, + } + pa = Dictionary{ // pa + nil, + header{paLangStr, paLangIdx}, + header{paScriptStr, paScriptIdx}, + header{paRegionStr, paRegionIdx}, + } + pl = Dictionary{ // pl + nil, + header{plLangStr, plLangIdx}, + header{plScriptStr, plScriptIdx}, + header{plRegionStr, plRegionIdx}, + } + pt = Dictionary{ // pt + nil, + header{ptLangStr, ptLangIdx}, + header{ptScriptStr, ptScriptIdx}, + header{ptRegionStr, ptRegionIdx}, + } + ptPT = Dictionary{ // pt-PT + &pt, + header{ptPTLangStr, ptPTLangIdx}, + header{ptPTScriptStr, ptPTScriptIdx}, + header{ptPTRegionStr, ptPTRegionIdx}, + } + ro = Dictionary{ // ro + nil, + header{roLangStr, roLangIdx}, + header{roScriptStr, roScriptIdx}, + header{roRegionStr, roRegionIdx}, + } + ru = Dictionary{ // ru + nil, + header{ruLangStr, ruLangIdx}, + header{ruScriptStr, ruScriptIdx}, + header{ruRegionStr, ruRegionIdx}, + } + si = Dictionary{ // si + nil, + header{siLangStr, siLangIdx}, + header{siScriptStr, siScriptIdx}, + header{siRegionStr, siRegionIdx}, + } + sk = Dictionary{ // sk + nil, + header{skLangStr, skLangIdx}, + header{skScriptStr, skScriptIdx}, + header{skRegionStr, skRegionIdx}, + } + sl = Dictionary{ // sl + nil, + header{slLangStr, slLangIdx}, + header{slScriptStr, slScriptIdx}, + header{slRegionStr, slRegionIdx}, + } + sq = Dictionary{ // sq + nil, + header{sqLangStr, sqLangIdx}, + header{sqScriptStr, sqScriptIdx}, + header{sqRegionStr, sqRegionIdx}, + } + sr = Dictionary{ // sr + nil, + header{srLangStr, srLangIdx}, + header{srScriptStr, srScriptIdx}, + header{srRegionStr, srRegionIdx}, + } + srLatn = Dictionary{ // sr-Latn + nil, + header{srLatnLangStr, srLatnLangIdx}, + header{srLatnScriptStr, srLatnScriptIdx}, + header{srLatnRegionStr, srLatnRegionIdx}, + } + sv = Dictionary{ // sv + nil, + header{svLangStr, svLangIdx}, + header{svScriptStr, svScriptIdx}, + header{svRegionStr, svRegionIdx}, + } + sw = Dictionary{ // sw + nil, + header{swLangStr, swLangIdx}, + header{swScriptStr, swScriptIdx}, + header{swRegionStr, swRegionIdx}, + } + ta = Dictionary{ // ta + nil, + header{taLangStr, taLangIdx}, + header{taScriptStr, taScriptIdx}, + header{taRegionStr, taRegionIdx}, + } + te = Dictionary{ // te + nil, + header{teLangStr, teLangIdx}, + header{teScriptStr, teScriptIdx}, + header{teRegionStr, teRegionIdx}, + } + th = Dictionary{ // th + nil, + header{thLangStr, thLangIdx}, + header{thScriptStr, thScriptIdx}, + header{thRegionStr, thRegionIdx}, + } + tr = Dictionary{ // tr + nil, + header{trLangStr, trLangIdx}, + header{trScriptStr, trScriptIdx}, + header{trRegionStr, trRegionIdx}, + } + uk = Dictionary{ // uk + nil, + header{ukLangStr, ukLangIdx}, + header{ukScriptStr, ukScriptIdx}, + header{ukRegionStr, ukRegionIdx}, + } + ur = Dictionary{ // ur + nil, + header{urLangStr, urLangIdx}, + header{urScriptStr, urScriptIdx}, + header{urRegionStr, urRegionIdx}, + } + uz = Dictionary{ // uz + nil, + header{uzLangStr, uzLangIdx}, + header{uzScriptStr, uzScriptIdx}, + header{uzRegionStr, uzRegionIdx}, + } + vi = Dictionary{ // vi + nil, + header{viLangStr, viLangIdx}, + header{viScriptStr, viScriptIdx}, + header{viRegionStr, viRegionIdx}, + } + zh = Dictionary{ // zh + nil, + header{zhLangStr, zhLangIdx}, + header{zhScriptStr, zhScriptIdx}, + header{zhRegionStr, zhRegionIdx}, + } + zhHant = Dictionary{ // zh-Hant + nil, + header{zhHantLangStr, zhHantLangIdx}, + header{zhHantScriptStr, zhHantScriptIdx}, + header{zhHantRegionStr, zhHantRegionIdx}, + } + zu = Dictionary{ // zu + nil, + header{zuLangStr, zuLangIdx}, + header{zuScriptStr, zuScriptIdx}, + header{zuRegionStr, zuRegionIdx}, + } +) + +// Total size for 79 entries: 10112 bytes (10 KB) + +// Number of keys: 217 +var ( + selfIndex = tagIndex{ + "afakamarasazbebgbmbnbobrbscacecscydadedzeeeleneoeseteufafffifofrfygagdgl" + + "gugvhahehihrhuhyidigiiisitjakakikkklkmknkokskwkylblglnloltlulvmgmkml" + + "mnmrmsmtmyndnenlnnnoomorospaplpsptqurmrnrorurwsesgsiskslsnsosqsrsvsw" + + "tatethtitotrugukuruzviyiyozhzu", + "agqasaastbasbembezbrxcggchrckbdavdjedsbduadyoebuewofilfurgswguzhawhsbjgo" + + "jmckabkamkdekeakhqkkjklnkokksbksfkshlaglktlrcluoluymasmermfemghmgomu" + + "amznnaqnnhnusnynprgrofrwksahsaqsbpsehsesshismnteotwqtzmvaivunwaexogy" + + "avyuezgh", + "", + } + selfTagsLong = []string{ // 26 elements + "ar-001", + "az-Cyrl", + "bs-Cyrl", + "de-AT", + "de-CH", + "en-AU", + "en-CA", + "en-GB", + "en-US", + "es-419", + "es-ES", + "es-MX", + "fa-AF", + "fr-CA", + "fr-CH", + "pa-Arab", + "pt-PT", + "ro-MD", + "shi-Latn", + "sr-Latn", + "sw-CD", + "uz-Arab", + "uz-Cyrl", + "vai-Latn", + "zh-Hans", + "zh-Hant", + } +) + +var selfHeaders = [1]header{ + { // mul + "AfrikaansAkanአማርኛالعربيةঅসমীয়াazərbaycanбеларускаябългарскиbamanakanবাং" + + "লাབོད་སྐད་brezhonegbosanskicatalàнохчийнčeštinaCymraegdanskDeutsch" + + "རྫོང་ཁEʋegbeΕλληνικάEnglishesperantoespañoleestieuskaraفارسیPulaar" + + "suomiføroysktfrançaisWest-FryskGaeilgeGàidhliggalegoગુજરાતીGaelgHaus" + + "aעבריתहिन्दीhrvatskimagyarհայերենIndonesiaIgboꆈꌠꉙíslenskaitaliano日本語" + + "ქართულიGikuyuқазақ тіліkalaallisutខ្មែរಕನ್ನಡ한국어کٲشُرkernewekкыргыз" + + "чаLëtzebuergeschLugandalingálaລາວlietuviųTshilubalatviešuMalagasyма" + + "кедонскиമലയാളംмонголमराठीBahasa MelayuMaltiမြန်မာisiNdebeleनेपालीNe" + + "derlandsnynorsknorsk bokmålOromooଓଡ଼ିଆиронਪੰਜਾਬੀpolskiپښتوportuguêsR" + + "unasimirumantschIkirundiromânăрусскийKinyarwandadavvisámegiellaSängö" + + "සිංහලslovenčinaslovenščinachiShonaSoomaalishqipсрпскиsvenskaKiswah" + + "iliதமிழ்తెలుగుไทยትግርኛlea fakatongaTürkçeئۇيغۇرچەукраїнськаاردوo‘zbek" + + "Tiếng ViệtייִדישÈdè Yorùbá中文isiZuluAghemKipareasturianuƁàsàaIchibemb" + + "aHibenaबड़ोRukigaᏣᎳᎩکوردیی ناوەندیKitaitaZarmaciinedolnoserbšćinaduá" + + "lájoolaKĩembuewondoFilipinofurlanSchwiizertüütschEkegusiiʻŌlelo Hawa" + + "iʻihornjoserbšćinaNdaꞌaKimachameTaqbaylitKikambaChimakondekabuverdia" + + "nuKoyra ciinikakɔKalenjinकोंकणीKishambaarikpaKölschKɨlaangiLakȟólʼiy" + + "apiلۊری شومالیDholuoLuluhiaMaaKĩmĩrũkreol morisienMakuametaʼMUNDAŊما" + + "زرونیKhoekhoegowabShwóŋò ngiembɔɔnThok NathRunyankoreprūsiskanKihor" + + "omboKiruwaсаха тылаKisampurIshisangusenaKoyraboro senniⵜⴰⵛⵍⵃⵉⵜanarâš" + + "kielâKitesoTasawaq senniTamaziɣt n laṭlaṣꕙꔤKyivunjoWalserOlusoganuas" + + "ue粵語ⵜⴰⵎⴰⵣⵉⵖⵜالعربية الرسمية الحديثةазәрбајҹанбосанскиÖsterreichische" + + "s DeutschSchweizer HochdeutschAustralian EnglishCanadian EnglishBrit" + + "ish EnglishAmerican Englishespañol latinoamericanoespañol de Españae" + + "spañol de Méxicoدریfrançais canadienfrançais suisseپنجابیportuguês e" + + "uropeumoldoveneascăTashelḥiytsrpskohrvatskiKingwanaاوزبیکўзбекчаVai简" + + "体中文繁體中文", + []uint16{ // 218 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x000d, 0x0019, 0x0027, 0x003c, 0x0047, 0x005b, + 0x006d, 0x0076, 0x0085, 0x009d, 0x00a6, 0x00ae, 0x00b5, 0x00c3, + 0x00cc, 0x00d3, 0x00d8, 0x00df, 0x00f1, 0x00f8, 0x0108, 0x010f, + 0x0118, 0x0120, 0x0125, 0x012c, 0x0136, 0x013c, 0x0141, 0x014a, + 0x0153, 0x015d, 0x0164, 0x016d, 0x0173, 0x0188, 0x018d, 0x0192, + 0x019c, 0x01ae, 0x01b6, 0x01bc, 0x01ca, 0x01d3, 0x01d7, 0x01e0, + 0x01e9, 0x01f1, 0x01fa, 0x020f, 0x0215, 0x0228, 0x0233, 0x0242, + 0x0251, 0x025a, 0x0264, 0x026c, 0x027c, 0x028b, 0x0292, 0x029a, + // Entry 40 - 7F + 0x02a3, 0x02ac, 0x02b4, 0x02bd, 0x02c5, 0x02d9, 0x02eb, 0x02f7, + 0x0306, 0x0313, 0x0318, 0x032a, 0x0334, 0x0346, 0x0350, 0x0357, + 0x0364, 0x036a, 0x0379, 0x0381, 0x0393, 0x0399, 0x03a1, 0x03ab, + 0x03b3, 0x03bc, 0x03c4, 0x03cc, 0x03da, 0x03e5, 0x03f5, 0x03fc, + 0x040b, 0x0416, 0x0423, 0x042b, 0x0433, 0x0438, 0x0444, 0x044b, + 0x0454, 0x0463, 0x0475, 0x047e, 0x048a, 0x0497, 0x049f, 0x04af, + 0x04c3, 0x04cb, 0x04d3, 0x04e1, 0x04ed, 0x04fb, 0x0501, 0x0508, + 0x050d, 0x0513, 0x051c, 0x0524, 0x052d, 0x0533, 0x053f, 0x0545, + // Entry 80 - BF + 0x054e, 0x0569, 0x0570, 0x057a, 0x058a, 0x0591, 0x0596, 0x059d, + 0x05a3, 0x05ab, 0x05b1, 0x05c3, 0x05cb, 0x05dc, 0x05ed, 0x05f4, + 0x05fd, 0x0606, 0x060d, 0x0617, 0x0623, 0x062e, 0x0633, 0x063b, + 0x064d, 0x0656, 0x065b, 0x0662, 0x066b, 0x067a, 0x068f, 0x0695, + 0x069c, 0x069f, 0x06a8, 0x06b6, 0x06bb, 0x06c1, 0x06c8, 0x06d6, + 0x06e3, 0x06f8, 0x0701, 0x070b, 0x0715, 0x071e, 0x0724, 0x0735, + 0x073d, 0x0746, 0x074a, 0x0759, 0x076e, 0x077c, 0x0782, 0x078f, + 0x07a5, 0x07ab, 0x07b3, 0x07b9, 0x07c0, 0x07c6, 0x07cc, 0x07e4, + // Entry C0 - FF + 0x0810, 0x0824, 0x0834, 0x084d, 0x0862, 0x0874, 0x0884, 0x0893, + 0x08a3, 0x08bb, 0x08ce, 0x08e1, 0x08e7, 0x08f9, 0x0909, 0x0915, + 0x0927, 0x0935, 0x0941, 0x094f, 0x0957, 0x0963, 0x0971, 0x0974, + 0x0980, 0x098c, + }, + }, +} + +// Total size for self: 4040 bytes (4 KB) + +// Total table size 2128615 bytes (2078KiB); checksum: A83731D5 diff --git a/vendor/golang.org/x/text/language/examples_test.go b/vendor/golang.org/x/text/language/examples_test.go new file mode 100644 index 0000000..05e712d --- /dev/null +++ b/vendor/golang.org/x/text/language/examples_test.go @@ -0,0 +1,396 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language_test + +import ( + "fmt" + + "golang.org/x/text/language" +) + +func ExampleCanonType() { + p := func(id string) { + fmt.Printf("Default(%s) -> %s\n", id, language.Make(id)) + fmt.Printf("BCP47(%s) -> %s\n", id, language.BCP47.Make(id)) + fmt.Printf("Macro(%s) -> %s\n", id, language.Macro.Make(id)) + fmt.Printf("All(%s) -> %s\n", id, language.All.Make(id)) + } + p("en-Latn") + p("sh") + p("zh-cmn") + p("bjd") + p("iw-Latn-fonipa-u-cu-usd") + // Output: + // Default(en-Latn) -> en-Latn + // BCP47(en-Latn) -> en + // Macro(en-Latn) -> en-Latn + // All(en-Latn) -> en + // Default(sh) -> sr-Latn + // BCP47(sh) -> sh + // Macro(sh) -> sh + // All(sh) -> sr-Latn + // Default(zh-cmn) -> cmn + // BCP47(zh-cmn) -> cmn + // Macro(zh-cmn) -> zh + // All(zh-cmn) -> zh + // Default(bjd) -> drl + // BCP47(bjd) -> drl + // Macro(bjd) -> bjd + // All(bjd) -> drl + // Default(iw-Latn-fonipa-u-cu-usd) -> he-Latn-fonipa-u-cu-usd + // BCP47(iw-Latn-fonipa-u-cu-usd) -> he-Latn-fonipa-u-cu-usd + // Macro(iw-Latn-fonipa-u-cu-usd) -> iw-Latn-fonipa-u-cu-usd + // All(iw-Latn-fonipa-u-cu-usd) -> he-Latn-fonipa-u-cu-usd +} + +func ExampleTag_Base() { + fmt.Println(language.Make("und").Base()) + fmt.Println(language.Make("und-US").Base()) + fmt.Println(language.Make("und-NL").Base()) + fmt.Println(language.Make("und-419").Base()) // Latin America + fmt.Println(language.Make("und-ZZ").Base()) + // Output: + // en Low + // en High + // nl High + // es Low + // en Low +} + +func ExampleTag_Script() { + en := language.Make("en") + sr := language.Make("sr") + sr_Latn := language.Make("sr_Latn") + fmt.Println(en.Script()) + fmt.Println(sr.Script()) + // Was a script explicitly specified? + _, c := sr.Script() + fmt.Println(c == language.Exact) + _, c = sr_Latn.Script() + fmt.Println(c == language.Exact) + // Output: + // Latn High + // Cyrl Low + // false + // true +} + +func ExampleTag_Region() { + ru := language.Make("ru") + en := language.Make("en") + fmt.Println(ru.Region()) + fmt.Println(en.Region()) + // Output: + // RU Low + // US Low +} + +func ExampleRegion_TLD() { + us := language.MustParseRegion("US") + gb := language.MustParseRegion("GB") + uk := language.MustParseRegion("UK") + bu := language.MustParseRegion("BU") + + fmt.Println(us.TLD()) + fmt.Println(gb.TLD()) + fmt.Println(uk.TLD()) + fmt.Println(bu.TLD()) + + fmt.Println(us.Canonicalize().TLD()) + fmt.Println(gb.Canonicalize().TLD()) + fmt.Println(uk.Canonicalize().TLD()) + fmt.Println(bu.Canonicalize().TLD()) + // Output: + // US <nil> + // UK <nil> + // UK <nil> + // ZZ language: region is not a valid ccTLD + // US <nil> + // UK <nil> + // UK <nil> + // MM <nil> +} + +func ExampleCompose() { + nl, _ := language.ParseBase("nl") + us, _ := language.ParseRegion("US") + de := language.Make("de-1901-u-co-phonebk") + jp := language.Make("ja-JP") + fi := language.Make("fi-x-ing") + + u, _ := language.ParseExtension("u-nu-arabic") + x, _ := language.ParseExtension("x-piglatin") + + // Combine a base language and region. + fmt.Println(language.Compose(nl, us)) + // Combine a base language and extension. + fmt.Println(language.Compose(nl, x)) + // Replace the region. + fmt.Println(language.Compose(jp, us)) + // Combine several tags. + fmt.Println(language.Compose(us, nl, u)) + + // Replace the base language of a tag. + fmt.Println(language.Compose(de, nl)) + fmt.Println(language.Compose(de, nl, u)) + // Remove the base language. + fmt.Println(language.Compose(de, language.Base{})) + // Remove all variants. + fmt.Println(language.Compose(de, []language.Variant{})) + // Remove all extensions. + fmt.Println(language.Compose(de, []language.Extension{})) + fmt.Println(language.Compose(fi, []language.Extension{})) + // Remove all variants and extensions. + fmt.Println(language.Compose(de.Raw())) + + // An error is gobbled or returned if non-nil. + fmt.Println(language.Compose(language.ParseRegion("ZA"))) + fmt.Println(language.Compose(language.ParseRegion("HH"))) + + // Compose uses the same Default canonicalization as Make. + fmt.Println(language.Compose(language.Raw.Parse("en-Latn-UK"))) + + // Call compose on a different CanonType for different results. + fmt.Println(language.All.Compose(language.Raw.Parse("en-Latn-UK"))) + + // Output: + // nl-US <nil> + // nl-x-piglatin <nil> + // ja-US <nil> + // nl-US-u-nu-arabic <nil> + // nl-1901-u-co-phonebk <nil> + // nl-1901-u-nu-arabic <nil> + // und-1901-u-co-phonebk <nil> + // de-u-co-phonebk <nil> + // de-1901 <nil> + // fi <nil> + // de <nil> + // und-ZA <nil> + // und language: subtag "HH" is well-formed but unknown + // en-Latn-GB <nil> + // en-GB <nil> +} + +func ExampleParse_errors() { + for _, s := range []string{"Foo", "Bar", "Foobar"} { + _, err := language.Parse(s) + if err != nil { + if inv, ok := err.(language.ValueError); ok { + fmt.Println(inv.Subtag()) + } else { + fmt.Println(s) + } + } + } + for _, s := range []string{"en", "aa-Uuuu", "AC", "ac-u"} { + _, err := language.Parse(s) + switch e := err.(type) { + case language.ValueError: + fmt.Printf("%s: culprit %q\n", s, e.Subtag()) + case nil: + // No error. + default: + // A syntax error. + fmt.Printf("%s: ill-formed\n", s) + } + } + // Output: + // foo + // Foobar + // aa-Uuuu: culprit "Uuuu" + // AC: culprit "ac" + // ac-u: ill-formed +} + +func ExampleParent() { + p := func(tag string) { + fmt.Printf("parent(%v): %v\n", tag, language.Make(tag).Parent()) + } + p("zh-CN") + + // Australian English inherits from World English. + p("en-AU") + + // If the tag has a different maximized script from its parent, a tag with + // this maximized script is inserted. This allows different language tags + // which have the same base language and script in common to inherit from + // a common set of settings. + p("zh-HK") + + // If the maximized script of the parent is not identical, CLDR will skip + // inheriting from it, as it means there will not be many entries in common + // and inheriting from it is nonsensical. + p("zh-Hant") + + // The parent of a tag with variants and extensions is the tag with all + // variants and extensions removed. + p("de-1994-u-co-phonebk") + + // Remove default script. + p("de-Latn-LU") + + // Output: + // parent(zh-CN): zh + // parent(en-AU): en-001 + // parent(zh-HK): zh-Hant + // parent(zh-Hant): und + // parent(de-1994-u-co-phonebk): de + // parent(de-Latn-LU): de +} + +// ExampleMatcher_bestMatch gives some examples of getting the best match of +// a set of tags to any of the tags of given set. +func ExampleMatcher() { + // This is the set of tags from which we want to pick the best match. These + // can be, for example, the supported languages for some package. + tags := []language.Tag{ + language.English, + language.BritishEnglish, + language.French, + language.Afrikaans, + language.BrazilianPortuguese, + language.EuropeanPortuguese, + language.Croatian, + language.SimplifiedChinese, + language.Raw.Make("iw-IL"), + language.Raw.Make("iw"), + language.Raw.Make("he"), + } + m := language.NewMatcher(tags) + + // A simple match. + fmt.Println(m.Match(language.Make("fr"))) + + // Australian English is closer to British than American English. + fmt.Println(m.Match(language.Make("en-AU"))) + + // Default to the first tag passed to the Matcher if there is no match. + fmt.Println(m.Match(language.Make("ar"))) + + // Get the default tag. + fmt.Println(m.Match()) + + fmt.Println("----") + + // Croatian speakers will likely understand Serbian written in Latin script. + fmt.Println(m.Match(language.Make("sr-Latn"))) + + // We match SimplifiedChinese, but with Low confidence. + fmt.Println(m.Match(language.TraditionalChinese)) + + // Serbian in Latin script is a closer match to Croatian than Traditional + // Chinese to Simplified Chinese. + fmt.Println(m.Match(language.TraditionalChinese, language.Make("sr-Latn"))) + + fmt.Println("----") + + // In case a multiple variants of a language are available, the most spoken + // variant is typically returned. + fmt.Println(m.Match(language.Portuguese)) + + // Pick the first value passed to Match in case of a tie. + fmt.Println(m.Match(language.Dutch, language.Make("fr-BE"), language.Make("af-NA"))) + fmt.Println(m.Match(language.Dutch, language.Make("af-NA"), language.Make("fr-BE"))) + + fmt.Println("----") + + // If a Matcher is initialized with a language and it's deprecated version, + // it will distinguish between them. + fmt.Println(m.Match(language.Raw.Make("iw"))) + + // However, for non-exact matches, it will treat deprecated versions as + // equivalent and consider other factors first. + fmt.Println(m.Match(language.Raw.Make("he-IL"))) + + fmt.Println("----") + + // User settings passed to the Unicode extension are ignored for matching + // and preserved in the returned tag. + fmt.Println(m.Match(language.Make("de-u-co-phonebk"), language.Make("fr-u-cu-frf"))) + + // Even if the matching language is different. + fmt.Println(m.Match(language.Make("de-u-co-phonebk"), language.Make("br-u-cu-frf"))) + + // If there is no matching language, the options of the first preferred tag are used. + fmt.Println(m.Match(language.Make("de-u-co-phonebk"))) + + // Output: + // fr 2 Exact + // en-GB 1 High + // en 0 No + // en 0 No + // ---- + // hr 6 High + // zh-Hans 7 Low + // hr 6 High + // ---- + // pt-BR 4 High + // fr 2 High + // af 3 High + // ---- + // iw 9 Exact + // iw-IL 8 Exact + // ---- + // fr-u-cu-frf 2 Exact + // fr-u-cu-frf 2 High + // en-u-co-phonebk 0 No +} + +func ExampleComprehends() { + // Various levels of comprehensibility. + fmt.Println(language.Comprehends(language.English, language.English)) + fmt.Println(language.Comprehends(language.AmericanEnglish, language.BritishEnglish)) + + // An explicit Und results in no match. + fmt.Println(language.Comprehends(language.English, language.Und)) + + fmt.Println("----") + + // There is usually no mutual comprehensibility between different scripts. + fmt.Println(language.Comprehends(language.Make("en-Dsrt"), language.English)) + + // One exception is for Traditional versus Simplified Chinese, albeit with + // a low confidence. + fmt.Println(language.Comprehends(language.TraditionalChinese, language.SimplifiedChinese)) + + fmt.Println("----") + + // A Swiss German speaker will often understand High German. + fmt.Println(language.Comprehends(language.Make("gsw"), language.Make("de"))) + + // The converse is not generally the case. + fmt.Println(language.Comprehends(language.Make("de"), language.Make("gsw"))) + + // Output: + // Exact + // High + // No + // ---- + // No + // Low + // ---- + // High + // No +} + +func ExampleTag_values() { + us := language.MustParseRegion("US") + en := language.MustParseBase("en") + + lang, _, region := language.AmericanEnglish.Raw() + fmt.Println(lang == en, region == us) + + lang, _, region = language.BritishEnglish.Raw() + fmt.Println(lang == en, region == us) + + // Tags can be compared for exact equivalence using '=='. + en_us, _ := language.Compose(en, us) + fmt.Println(en_us == language.AmericanEnglish) + + // Output: + // true true + // true false + // true +} diff --git a/vendor/golang.org/x/text/language/gen_common.go b/vendor/golang.org/x/text/language/gen_common.go new file mode 100644 index 0000000..83ce180 --- /dev/null +++ b/vendor/golang.org/x/text/language/gen_common.go @@ -0,0 +1,20 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This file contains code common to the maketables.go and the package code. + +// langAliasType is the type of an alias in langAliasMap. +type langAliasType int8 + +const ( + langDeprecated langAliasType = iota + langMacro + langLegacy + + langAliasTypeUnknown langAliasType = -1 +) diff --git a/vendor/golang.org/x/text/language/gen_index.go b/vendor/golang.org/x/text/language/gen_index.go new file mode 100644 index 0000000..eef555c --- /dev/null +++ b/vendor/golang.org/x/text/language/gen_index.go @@ -0,0 +1,162 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This file generates derivative tables based on the language package itself. + +import ( + "bytes" + "flag" + "fmt" + "io/ioutil" + "log" + "reflect" + "sort" + "strings" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", false, + "test existing tables; can be used to compare web data with package data.") + + draft = flag.String("draft", + "contributed", + `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`) +) + +func main() { + gen.Init() + + // Read the CLDR zip file. + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + data, err := d.DecodeZip(r) + if err != nil { + log.Fatalf("DecodeZip: %v", err) + } + + w := gen.NewCodeWriter() + defer func() { + buf := &bytes.Buffer{} + + if _, err = w.WriteGo(buf, "language"); err != nil { + log.Fatalf("Error formatting file index.go: %v", err) + } + + // Since we're generating a table for our own package we need to rewrite + // doing the equivalent of go fmt -r 'language.b -> b'. Using + // bytes.Replace will do. + out := bytes.Replace(buf.Bytes(), []byte("language."), nil, -1) + if err := ioutil.WriteFile("index.go", out, 0600); err != nil { + log.Fatalf("Could not create file index.go: %v", err) + } + }() + + m := map[language.Tag]bool{} + for _, lang := range data.Locales() { + // We include all locales unconditionally to be consistent with en_US. + // We want en_US, even though it has no data associated with it. + + // TODO: put any of the languages for which no data exists at the end + // of the index. This allows all components based on ICU to use that + // as the cutoff point. + // if x := data.RawLDML(lang); false || + // x.LocaleDisplayNames != nil || + // x.Characters != nil || + // x.Delimiters != nil || + // x.Measurement != nil || + // x.Dates != nil || + // x.Numbers != nil || + // x.Units != nil || + // x.ListPatterns != nil || + // x.Collations != nil || + // x.Segmentations != nil || + // x.Rbnf != nil || + // x.Annotations != nil || + // x.Metadata != nil { + + // TODO: support POSIX natively, albeit non-standard. + tag := language.Make(strings.Replace(lang, "_POSIX", "-u-va-posix", 1)) + m[tag] = true + // } + } + // Include locales for plural rules, which uses a different structure. + for _, plurals := range data.Supplemental().Plurals { + for _, rules := range plurals.PluralRules { + for _, lang := range strings.Split(rules.Locales, " ") { + m[language.Make(lang)] = true + } + } + } + + var core, special []language.Tag + + for t := range m { + if x := t.Extensions(); len(x) != 0 && fmt.Sprint(x) != "[u-va-posix]" { + log.Fatalf("Unexpected extension %v in %v", x, t) + } + if len(t.Variants()) == 0 && len(t.Extensions()) == 0 { + core = append(core, t) + } else { + special = append(special, t) + } + } + + w.WriteComment(` + NumCompactTags is the number of common tags. The maximum tag is + NumCompactTags-1.`) + w.WriteConst("NumCompactTags", len(core)+len(special)) + + sort.Sort(byAlpha(special)) + w.WriteVar("specialTags", special) + + // TODO: order by frequency? + sort.Sort(byAlpha(core)) + + // Size computations are just an estimate. + w.Size += int(reflect.TypeOf(map[uint32]uint16{}).Size()) + w.Size += len(core) * 6 // size of uint32 and uint16 + + fmt.Fprintln(w) + fmt.Fprintln(w, "var coreTags = map[uint32]uint16{") + fmt.Fprintln(w, "0x0: 0, // und") + i := len(special) + 1 // Und and special tags already written. + for _, t := range core { + if t == language.Und { + continue + } + fmt.Fprint(w.Hash, t, i) + b, s, r := t.Raw() + fmt.Fprintf(w, "0x%s%s%s: %d, // %s\n", + getIndex(b, 3), // 3 is enough as it is guaranteed to be a compact number + getIndex(s, 2), + getIndex(r, 3), + i, t) + i++ + } + fmt.Fprintln(w, "}") +} + +// getIndex prints the subtag type and extracts its index of size nibble. +// If the index is less than n nibbles, the result is prefixed with 0s. +func getIndex(x interface{}, n int) string { + s := fmt.Sprintf("%#v", x) // s is of form Type{typeID: 0x00} + s = s[strings.Index(s, "0x")+2 : len(s)-1] + return strings.Repeat("0", n-len(s)) + s +} + +type byAlpha []language.Tag + +func (a byAlpha) Len() int { return len(a) } +func (a byAlpha) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byAlpha) Less(i, j int) bool { return a[i].String() < a[j].String() } diff --git a/vendor/golang.org/x/text/language/go1_1.go b/vendor/golang.org/x/text/language/go1_1.go new file mode 100644 index 0000000..380f4c0 --- /dev/null +++ b/vendor/golang.org/x/text/language/go1_1.go @@ -0,0 +1,38 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.2 + +package language + +import "sort" + +func sortStable(s sort.Interface) { + ss := stableSort{ + s: s, + pos: make([]int, s.Len()), + } + for i := range ss.pos { + ss.pos[i] = i + } + sort.Sort(&ss) +} + +type stableSort struct { + s sort.Interface + pos []int +} + +func (s *stableSort) Len() int { + return len(s.pos) +} + +func (s *stableSort) Less(i, j int) bool { + return s.s.Less(i, j) || !s.s.Less(j, i) && s.pos[i] < s.pos[j] +} + +func (s *stableSort) Swap(i, j int) { + s.s.Swap(i, j) + s.pos[i], s.pos[j] = s.pos[j], s.pos[i] +} diff --git a/vendor/golang.org/x/text/language/go1_2.go b/vendor/golang.org/x/text/language/go1_2.go new file mode 100644 index 0000000..38268c5 --- /dev/null +++ b/vendor/golang.org/x/text/language/go1_2.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.2 + +package language + +import "sort" + +var sortStable = sort.Stable diff --git a/vendor/golang.org/x/text/language/httpexample_test.go b/vendor/golang.org/x/text/language/httpexample_test.go new file mode 100644 index 0000000..40d0663 --- /dev/null +++ b/vendor/golang.org/x/text/language/httpexample_test.go @@ -0,0 +1,48 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language_test + +import ( + "fmt" + "net/http" + "strings" + + "golang.org/x/text/language" +) + +// matcher is a language.Matcher configured for all supported languages. +var matcher = language.NewMatcher([]language.Tag{ + language.BritishEnglish, + language.Norwegian, + language.German, +}) + +// handler is a http.HandlerFunc. +func handler(w http.ResponseWriter, r *http.Request) { + t, q, err := language.ParseAcceptLanguage(r.Header.Get("Accept-Language")) + // We ignore the error: the default language will be selected for t == nil. + tag, _, _ := matcher.Match(t...) + fmt.Printf("%5v (t: %6v; q: %3v; err: %v)\n", tag, t, q, err) +} + +func ExampleParseAcceptLanguage() { + for _, al := range []string{ + "nn;q=0.3, en-us;q=0.8, en,", + "gsw, en;q=0.7, en-US;q=0.8", + "gsw, nl, da", + "invalid", + } { + // Create dummy request with Accept-Language set and pass it to handler. + r, _ := http.NewRequest("GET", "example.com", strings.NewReader("Hello")) + r.Header.Set("Accept-Language", al) + handler(nil, r) + } + + // Output: + // en-GB (t: [ en en-US nn]; q: [ 1 0.8 0.3]; err: <nil>) + // en-GB (t: [ gsw en-US en]; q: [ 1 0.8 0.7]; err: <nil>) + // de (t: [ gsw nl da]; q: [ 1 1 1]; err: <nil>) + // en-GB (t: []; q: []; err: language: tag is not well-formed) +} diff --git a/vendor/golang.org/x/text/language/index.go b/vendor/golang.org/x/text/language/index.go new file mode 100644 index 0000000..b370ffa --- /dev/null +++ b/vendor/golang.org/x/text/language/index.go @@ -0,0 +1,767 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package language + +// NumCompactTags is the number of common tags. The maximum tag is +// NumCompactTags-1. +const NumCompactTags = 752 + +var specialTags = []Tag{ // 2 elements + 0: {lang: 0xd5, region: 0x6d, script: 0x0, pVariant: 0x5, pExt: 0xe, str: "ca-ES-valencia"}, + 1: {lang: 0x134, region: 0x134, script: 0x0, pVariant: 0x5, pExt: 0x5, str: "en-US-u-va-posix"}, +} // Size: 72 bytes + +var coreTags = map[uint32]uint16{ + 0x0: 0, // und + 0x01500000: 3, // af + 0x015000d1: 4, // af-NA + 0x01500160: 5, // af-ZA + 0x01b00000: 6, // agq + 0x01b00051: 7, // agq-CM + 0x02000000: 8, // ak + 0x0200007f: 9, // ak-GH + 0x02600000: 10, // am + 0x0260006e: 11, // am-ET + 0x03900000: 12, // ar + 0x03900001: 13, // ar-001 + 0x03900022: 14, // ar-AE + 0x03900038: 15, // ar-BH + 0x03900061: 16, // ar-DJ + 0x03900066: 17, // ar-DZ + 0x0390006a: 18, // ar-EG + 0x0390006b: 19, // ar-EH + 0x0390006c: 20, // ar-ER + 0x03900096: 21, // ar-IL + 0x0390009a: 22, // ar-IQ + 0x039000a0: 23, // ar-JO + 0x039000a7: 24, // ar-KM + 0x039000ab: 25, // ar-KW + 0x039000af: 26, // ar-LB + 0x039000b8: 27, // ar-LY + 0x039000b9: 28, // ar-MA + 0x039000c8: 29, // ar-MR + 0x039000e0: 30, // ar-OM + 0x039000ec: 31, // ar-PS + 0x039000f2: 32, // ar-QA + 0x03900107: 33, // ar-SA + 0x0390010a: 34, // ar-SD + 0x03900114: 35, // ar-SO + 0x03900116: 36, // ar-SS + 0x0390011b: 37, // ar-SY + 0x0390011f: 38, // ar-TD + 0x03900127: 39, // ar-TN + 0x0390015d: 40, // ar-YE + 0x03f00000: 41, // ars + 0x04200000: 42, // as + 0x04200098: 43, // as-IN + 0x04300000: 44, // asa + 0x0430012e: 45, // asa-TZ + 0x04700000: 46, // ast + 0x0470006d: 47, // ast-ES + 0x05700000: 48, // az + 0x0571e000: 49, // az-Cyrl + 0x0571e031: 50, // az-Cyrl-AZ + 0x05752000: 51, // az-Latn + 0x05752031: 52, // az-Latn-AZ + 0x05d00000: 53, // bas + 0x05d00051: 54, // bas-CM + 0x07000000: 55, // be + 0x07000046: 56, // be-BY + 0x07400000: 57, // bem + 0x07400161: 58, // bem-ZM + 0x07800000: 59, // bez + 0x0780012e: 60, // bez-TZ + 0x07d00000: 61, // bg + 0x07d00037: 62, // bg-BG + 0x08100000: 63, // bh + 0x09e00000: 64, // bm + 0x09e000c2: 65, // bm-ML + 0x0a300000: 66, // bn + 0x0a300034: 67, // bn-BD + 0x0a300098: 68, // bn-IN + 0x0a700000: 69, // bo + 0x0a700052: 70, // bo-CN + 0x0a700098: 71, // bo-IN + 0x0b000000: 72, // br + 0x0b000077: 73, // br-FR + 0x0b300000: 74, // brx + 0x0b300098: 75, // brx-IN + 0x0b500000: 76, // bs + 0x0b51e000: 77, // bs-Cyrl + 0x0b51e032: 78, // bs-Cyrl-BA + 0x0b552000: 79, // bs-Latn + 0x0b552032: 80, // bs-Latn-BA + 0x0d500000: 81, // ca + 0x0d500021: 82, // ca-AD + 0x0d50006d: 83, // ca-ES + 0x0d500077: 84, // ca-FR + 0x0d50009d: 85, // ca-IT + 0x0da00000: 86, // ce + 0x0da00105: 87, // ce-RU + 0x0dd00000: 88, // cgg + 0x0dd00130: 89, // cgg-UG + 0x0e300000: 90, // chr + 0x0e300134: 91, // chr-US + 0x0e700000: 92, // ckb + 0x0e70009a: 93, // ckb-IQ + 0x0e70009b: 94, // ckb-IR + 0x0f600000: 95, // cs + 0x0f60005d: 96, // cs-CZ + 0x0fa00000: 97, // cu + 0x0fa00105: 98, // cu-RU + 0x0fc00000: 99, // cy + 0x0fc0007a: 100, // cy-GB + 0x0fd00000: 101, // da + 0x0fd00062: 102, // da-DK + 0x0fd00081: 103, // da-GL + 0x10400000: 104, // dav + 0x104000a3: 105, // dav-KE + 0x10900000: 106, // de + 0x1090002d: 107, // de-AT + 0x10900035: 108, // de-BE + 0x1090004d: 109, // de-CH + 0x1090005f: 110, // de-DE + 0x1090009d: 111, // de-IT + 0x109000b1: 112, // de-LI + 0x109000b6: 113, // de-LU + 0x11300000: 114, // dje + 0x113000d3: 115, // dje-NE + 0x11b00000: 116, // dsb + 0x11b0005f: 117, // dsb-DE + 0x12000000: 118, // dua + 0x12000051: 119, // dua-CM + 0x12400000: 120, // dv + 0x12700000: 121, // dyo + 0x12700113: 122, // dyo-SN + 0x12900000: 123, // dz + 0x12900042: 124, // dz-BT + 0x12b00000: 125, // ebu + 0x12b000a3: 126, // ebu-KE + 0x12c00000: 127, // ee + 0x12c0007f: 128, // ee-GH + 0x12c00121: 129, // ee-TG + 0x13100000: 130, // el + 0x1310005c: 131, // el-CY + 0x13100086: 132, // el-GR + 0x13400000: 133, // en + 0x13400001: 134, // en-001 + 0x1340001a: 135, // en-150 + 0x13400024: 136, // en-AG + 0x13400025: 137, // en-AI + 0x1340002c: 138, // en-AS + 0x1340002d: 139, // en-AT + 0x1340002e: 140, // en-AU + 0x13400033: 141, // en-BB + 0x13400035: 142, // en-BE + 0x13400039: 143, // en-BI + 0x1340003c: 144, // en-BM + 0x13400041: 145, // en-BS + 0x13400045: 146, // en-BW + 0x13400047: 147, // en-BZ + 0x13400048: 148, // en-CA + 0x13400049: 149, // en-CC + 0x1340004d: 150, // en-CH + 0x1340004f: 151, // en-CK + 0x13400051: 152, // en-CM + 0x1340005b: 153, // en-CX + 0x1340005c: 154, // en-CY + 0x1340005f: 155, // en-DE + 0x13400060: 156, // en-DG + 0x13400062: 157, // en-DK + 0x13400063: 158, // en-DM + 0x1340006c: 159, // en-ER + 0x13400071: 160, // en-FI + 0x13400072: 161, // en-FJ + 0x13400073: 162, // en-FK + 0x13400074: 163, // en-FM + 0x1340007a: 164, // en-GB + 0x1340007b: 165, // en-GD + 0x1340007e: 166, // en-GG + 0x1340007f: 167, // en-GH + 0x13400080: 168, // en-GI + 0x13400082: 169, // en-GM + 0x13400089: 170, // en-GU + 0x1340008b: 171, // en-GY + 0x1340008c: 172, // en-HK + 0x13400095: 173, // en-IE + 0x13400096: 174, // en-IL + 0x13400097: 175, // en-IM + 0x13400098: 176, // en-IN + 0x13400099: 177, // en-IO + 0x1340009e: 178, // en-JE + 0x1340009f: 179, // en-JM + 0x134000a3: 180, // en-KE + 0x134000a6: 181, // en-KI + 0x134000a8: 182, // en-KN + 0x134000ac: 183, // en-KY + 0x134000b0: 184, // en-LC + 0x134000b3: 185, // en-LR + 0x134000b4: 186, // en-LS + 0x134000be: 187, // en-MG + 0x134000bf: 188, // en-MH + 0x134000c5: 189, // en-MO + 0x134000c6: 190, // en-MP + 0x134000c9: 191, // en-MS + 0x134000ca: 192, // en-MT + 0x134000cb: 193, // en-MU + 0x134000cd: 194, // en-MW + 0x134000cf: 195, // en-MY + 0x134000d1: 196, // en-NA + 0x134000d4: 197, // en-NF + 0x134000d5: 198, // en-NG + 0x134000d8: 199, // en-NL + 0x134000dc: 200, // en-NR + 0x134000de: 201, // en-NU + 0x134000df: 202, // en-NZ + 0x134000e5: 203, // en-PG + 0x134000e6: 204, // en-PH + 0x134000e7: 205, // en-PK + 0x134000ea: 206, // en-PN + 0x134000eb: 207, // en-PR + 0x134000ef: 208, // en-PW + 0x13400106: 209, // en-RW + 0x13400108: 210, // en-SB + 0x13400109: 211, // en-SC + 0x1340010a: 212, // en-SD + 0x1340010b: 213, // en-SE + 0x1340010c: 214, // en-SG + 0x1340010d: 215, // en-SH + 0x1340010e: 216, // en-SI + 0x13400111: 217, // en-SL + 0x13400116: 218, // en-SS + 0x1340011a: 219, // en-SX + 0x1340011c: 220, // en-SZ + 0x1340011e: 221, // en-TC + 0x13400124: 222, // en-TK + 0x13400128: 223, // en-TO + 0x1340012b: 224, // en-TT + 0x1340012c: 225, // en-TV + 0x1340012e: 226, // en-TZ + 0x13400130: 227, // en-UG + 0x13400132: 228, // en-UM + 0x13400134: 229, // en-US + 0x13400138: 230, // en-VC + 0x1340013b: 231, // en-VG + 0x1340013c: 232, // en-VI + 0x1340013e: 233, // en-VU + 0x13400141: 234, // en-WS + 0x13400160: 235, // en-ZA + 0x13400161: 236, // en-ZM + 0x13400163: 237, // en-ZW + 0x13700000: 238, // eo + 0x13700001: 239, // eo-001 + 0x13900000: 240, // es + 0x1390001e: 241, // es-419 + 0x1390002b: 242, // es-AR + 0x1390003e: 243, // es-BO + 0x13900040: 244, // es-BR + 0x13900050: 245, // es-CL + 0x13900053: 246, // es-CO + 0x13900055: 247, // es-CR + 0x13900058: 248, // es-CU + 0x13900064: 249, // es-DO + 0x13900067: 250, // es-EA + 0x13900068: 251, // es-EC + 0x1390006d: 252, // es-ES + 0x13900085: 253, // es-GQ + 0x13900088: 254, // es-GT + 0x1390008e: 255, // es-HN + 0x13900093: 256, // es-IC + 0x139000ce: 257, // es-MX + 0x139000d7: 258, // es-NI + 0x139000e1: 259, // es-PA + 0x139000e3: 260, // es-PE + 0x139000e6: 261, // es-PH + 0x139000eb: 262, // es-PR + 0x139000f0: 263, // es-PY + 0x13900119: 264, // es-SV + 0x13900134: 265, // es-US + 0x13900135: 266, // es-UY + 0x1390013a: 267, // es-VE + 0x13b00000: 268, // et + 0x13b00069: 269, // et-EE + 0x14000000: 270, // eu + 0x1400006d: 271, // eu-ES + 0x14100000: 272, // ewo + 0x14100051: 273, // ewo-CM + 0x14300000: 274, // fa + 0x14300023: 275, // fa-AF + 0x1430009b: 276, // fa-IR + 0x14900000: 277, // ff + 0x14900051: 278, // ff-CM + 0x14900083: 279, // ff-GN + 0x149000c8: 280, // ff-MR + 0x14900113: 281, // ff-SN + 0x14c00000: 282, // fi + 0x14c00071: 283, // fi-FI + 0x14e00000: 284, // fil + 0x14e000e6: 285, // fil-PH + 0x15300000: 286, // fo + 0x15300062: 287, // fo-DK + 0x15300075: 288, // fo-FO + 0x15900000: 289, // fr + 0x15900035: 290, // fr-BE + 0x15900036: 291, // fr-BF + 0x15900039: 292, // fr-BI + 0x1590003a: 293, // fr-BJ + 0x1590003b: 294, // fr-BL + 0x15900048: 295, // fr-CA + 0x1590004a: 296, // fr-CD + 0x1590004b: 297, // fr-CF + 0x1590004c: 298, // fr-CG + 0x1590004d: 299, // fr-CH + 0x1590004e: 300, // fr-CI + 0x15900051: 301, // fr-CM + 0x15900061: 302, // fr-DJ + 0x15900066: 303, // fr-DZ + 0x15900077: 304, // fr-FR + 0x15900079: 305, // fr-GA + 0x1590007d: 306, // fr-GF + 0x15900083: 307, // fr-GN + 0x15900084: 308, // fr-GP + 0x15900085: 309, // fr-GQ + 0x15900090: 310, // fr-HT + 0x159000a7: 311, // fr-KM + 0x159000b6: 312, // fr-LU + 0x159000b9: 313, // fr-MA + 0x159000ba: 314, // fr-MC + 0x159000bd: 315, // fr-MF + 0x159000be: 316, // fr-MG + 0x159000c2: 317, // fr-ML + 0x159000c7: 318, // fr-MQ + 0x159000c8: 319, // fr-MR + 0x159000cb: 320, // fr-MU + 0x159000d2: 321, // fr-NC + 0x159000d3: 322, // fr-NE + 0x159000e4: 323, // fr-PF + 0x159000e9: 324, // fr-PM + 0x15900101: 325, // fr-RE + 0x15900106: 326, // fr-RW + 0x15900109: 327, // fr-SC + 0x15900113: 328, // fr-SN + 0x1590011b: 329, // fr-SY + 0x1590011f: 330, // fr-TD + 0x15900121: 331, // fr-TG + 0x15900127: 332, // fr-TN + 0x1590013e: 333, // fr-VU + 0x1590013f: 334, // fr-WF + 0x1590015e: 335, // fr-YT + 0x16400000: 336, // fur + 0x1640009d: 337, // fur-IT + 0x16800000: 338, // fy + 0x168000d8: 339, // fy-NL + 0x16900000: 340, // ga + 0x16900095: 341, // ga-IE + 0x17800000: 342, // gd + 0x1780007a: 343, // gd-GB + 0x18a00000: 344, // gl + 0x18a0006d: 345, // gl-ES + 0x19c00000: 346, // gsw + 0x19c0004d: 347, // gsw-CH + 0x19c00077: 348, // gsw-FR + 0x19c000b1: 349, // gsw-LI + 0x19d00000: 350, // gu + 0x19d00098: 351, // gu-IN + 0x1a200000: 352, // guw + 0x1a400000: 353, // guz + 0x1a4000a3: 354, // guz-KE + 0x1a500000: 355, // gv + 0x1a500097: 356, // gv-IM + 0x1ad00000: 357, // ha + 0x1ad0007f: 358, // ha-GH + 0x1ad000d3: 359, // ha-NE + 0x1ad000d5: 360, // ha-NG + 0x1b100000: 361, // haw + 0x1b100134: 362, // haw-US + 0x1b500000: 363, // he + 0x1b500096: 364, // he-IL + 0x1b700000: 365, // hi + 0x1b700098: 366, // hi-IN + 0x1ca00000: 367, // hr + 0x1ca00032: 368, // hr-BA + 0x1ca0008f: 369, // hr-HR + 0x1cb00000: 370, // hsb + 0x1cb0005f: 371, // hsb-DE + 0x1ce00000: 372, // hu + 0x1ce00091: 373, // hu-HU + 0x1d000000: 374, // hy + 0x1d000027: 375, // hy-AM + 0x1da00000: 376, // id + 0x1da00094: 377, // id-ID + 0x1df00000: 378, // ig + 0x1df000d5: 379, // ig-NG + 0x1e200000: 380, // ii + 0x1e200052: 381, // ii-CN + 0x1f000000: 382, // is + 0x1f00009c: 383, // is-IS + 0x1f100000: 384, // it + 0x1f10004d: 385, // it-CH + 0x1f10009d: 386, // it-IT + 0x1f100112: 387, // it-SM + 0x1f200000: 388, // iu + 0x1f800000: 389, // ja + 0x1f8000a1: 390, // ja-JP + 0x1fb00000: 391, // jbo + 0x1ff00000: 392, // jgo + 0x1ff00051: 393, // jgo-CM + 0x20200000: 394, // jmc + 0x2020012e: 395, // jmc-TZ + 0x20600000: 396, // jv + 0x20800000: 397, // ka + 0x2080007c: 398, // ka-GE + 0x20a00000: 399, // kab + 0x20a00066: 400, // kab-DZ + 0x20e00000: 401, // kaj + 0x20f00000: 402, // kam + 0x20f000a3: 403, // kam-KE + 0x21700000: 404, // kcg + 0x21b00000: 405, // kde + 0x21b0012e: 406, // kde-TZ + 0x21f00000: 407, // kea + 0x21f00059: 408, // kea-CV + 0x22c00000: 409, // khq + 0x22c000c2: 410, // khq-ML + 0x23100000: 411, // ki + 0x231000a3: 412, // ki-KE + 0x23a00000: 413, // kk + 0x23a000ad: 414, // kk-KZ + 0x23c00000: 415, // kkj + 0x23c00051: 416, // kkj-CM + 0x23d00000: 417, // kl + 0x23d00081: 418, // kl-GL + 0x23e00000: 419, // kln + 0x23e000a3: 420, // kln-KE + 0x24200000: 421, // km + 0x242000a5: 422, // km-KH + 0x24900000: 423, // kn + 0x24900098: 424, // kn-IN + 0x24b00000: 425, // ko + 0x24b000a9: 426, // ko-KP + 0x24b000aa: 427, // ko-KR + 0x24d00000: 428, // kok + 0x24d00098: 429, // kok-IN + 0x26100000: 430, // ks + 0x26100098: 431, // ks-IN + 0x26200000: 432, // ksb + 0x2620012e: 433, // ksb-TZ + 0x26400000: 434, // ksf + 0x26400051: 435, // ksf-CM + 0x26500000: 436, // ksh + 0x2650005f: 437, // ksh-DE + 0x26b00000: 438, // ku + 0x27800000: 439, // kw + 0x2780007a: 440, // kw-GB + 0x28100000: 441, // ky + 0x281000a4: 442, // ky-KG + 0x28800000: 443, // lag + 0x2880012e: 444, // lag-TZ + 0x28c00000: 445, // lb + 0x28c000b6: 446, // lb-LU + 0x29a00000: 447, // lg + 0x29a00130: 448, // lg-UG + 0x2a600000: 449, // lkt + 0x2a600134: 450, // lkt-US + 0x2ac00000: 451, // ln + 0x2ac00029: 452, // ln-AO + 0x2ac0004a: 453, // ln-CD + 0x2ac0004b: 454, // ln-CF + 0x2ac0004c: 455, // ln-CG + 0x2af00000: 456, // lo + 0x2af000ae: 457, // lo-LA + 0x2b600000: 458, // lrc + 0x2b60009a: 459, // lrc-IQ + 0x2b60009b: 460, // lrc-IR + 0x2b700000: 461, // lt + 0x2b7000b5: 462, // lt-LT + 0x2b900000: 463, // lu + 0x2b90004a: 464, // lu-CD + 0x2bb00000: 465, // luo + 0x2bb000a3: 466, // luo-KE + 0x2bc00000: 467, // luy + 0x2bc000a3: 468, // luy-KE + 0x2be00000: 469, // lv + 0x2be000b7: 470, // lv-LV + 0x2c800000: 471, // mas + 0x2c8000a3: 472, // mas-KE + 0x2c80012e: 473, // mas-TZ + 0x2e000000: 474, // mer + 0x2e0000a3: 475, // mer-KE + 0x2e400000: 476, // mfe + 0x2e4000cb: 477, // mfe-MU + 0x2e800000: 478, // mg + 0x2e8000be: 479, // mg-MG + 0x2e900000: 480, // mgh + 0x2e9000d0: 481, // mgh-MZ + 0x2eb00000: 482, // mgo + 0x2eb00051: 483, // mgo-CM + 0x2f600000: 484, // mk + 0x2f6000c1: 485, // mk-MK + 0x2fb00000: 486, // ml + 0x2fb00098: 487, // ml-IN + 0x30200000: 488, // mn + 0x302000c4: 489, // mn-MN + 0x31200000: 490, // mr + 0x31200098: 491, // mr-IN + 0x31600000: 492, // ms + 0x3160003d: 493, // ms-BN + 0x316000cf: 494, // ms-MY + 0x3160010c: 495, // ms-SG + 0x31700000: 496, // mt + 0x317000ca: 497, // mt-MT + 0x31c00000: 498, // mua + 0x31c00051: 499, // mua-CM + 0x32800000: 500, // my + 0x328000c3: 501, // my-MM + 0x33100000: 502, // mzn + 0x3310009b: 503, // mzn-IR + 0x33800000: 504, // nah + 0x33c00000: 505, // naq + 0x33c000d1: 506, // naq-NA + 0x33e00000: 507, // nb + 0x33e000d9: 508, // nb-NO + 0x33e0010f: 509, // nb-SJ + 0x34500000: 510, // nd + 0x34500163: 511, // nd-ZW + 0x34700000: 512, // nds + 0x3470005f: 513, // nds-DE + 0x347000d8: 514, // nds-NL + 0x34800000: 515, // ne + 0x34800098: 516, // ne-IN + 0x348000da: 517, // ne-NP + 0x35e00000: 518, // nl + 0x35e0002f: 519, // nl-AW + 0x35e00035: 520, // nl-BE + 0x35e0003f: 521, // nl-BQ + 0x35e0005a: 522, // nl-CW + 0x35e000d8: 523, // nl-NL + 0x35e00115: 524, // nl-SR + 0x35e0011a: 525, // nl-SX + 0x35f00000: 526, // nmg + 0x35f00051: 527, // nmg-CM + 0x36100000: 528, // nn + 0x361000d9: 529, // nn-NO + 0x36300000: 530, // nnh + 0x36300051: 531, // nnh-CM + 0x36600000: 532, // no + 0x36c00000: 533, // nqo + 0x36d00000: 534, // nr + 0x37100000: 535, // nso + 0x37700000: 536, // nus + 0x37700116: 537, // nus-SS + 0x37e00000: 538, // ny + 0x38000000: 539, // nyn + 0x38000130: 540, // nyn-UG + 0x38700000: 541, // om + 0x3870006e: 542, // om-ET + 0x387000a3: 543, // om-KE + 0x38c00000: 544, // or + 0x38c00098: 545, // or-IN + 0x38f00000: 546, // os + 0x38f0007c: 547, // os-GE + 0x38f00105: 548, // os-RU + 0x39400000: 549, // pa + 0x39405000: 550, // pa-Arab + 0x394050e7: 551, // pa-Arab-PK + 0x3942f000: 552, // pa-Guru + 0x3942f098: 553, // pa-Guru-IN + 0x39800000: 554, // pap + 0x3aa00000: 555, // pl + 0x3aa000e8: 556, // pl-PL + 0x3b400000: 557, // prg + 0x3b400001: 558, // prg-001 + 0x3b500000: 559, // ps + 0x3b500023: 560, // ps-AF + 0x3b700000: 561, // pt + 0x3b700029: 562, // pt-AO + 0x3b700040: 563, // pt-BR + 0x3b70004d: 564, // pt-CH + 0x3b700059: 565, // pt-CV + 0x3b700085: 566, // pt-GQ + 0x3b70008a: 567, // pt-GW + 0x3b7000b6: 568, // pt-LU + 0x3b7000c5: 569, // pt-MO + 0x3b7000d0: 570, // pt-MZ + 0x3b7000ed: 571, // pt-PT + 0x3b700117: 572, // pt-ST + 0x3b700125: 573, // pt-TL + 0x3bb00000: 574, // qu + 0x3bb0003e: 575, // qu-BO + 0x3bb00068: 576, // qu-EC + 0x3bb000e3: 577, // qu-PE + 0x3cb00000: 578, // rm + 0x3cb0004d: 579, // rm-CH + 0x3d000000: 580, // rn + 0x3d000039: 581, // rn-BI + 0x3d300000: 582, // ro + 0x3d3000bb: 583, // ro-MD + 0x3d300103: 584, // ro-RO + 0x3d500000: 585, // rof + 0x3d50012e: 586, // rof-TZ + 0x3d900000: 587, // ru + 0x3d900046: 588, // ru-BY + 0x3d9000a4: 589, // ru-KG + 0x3d9000ad: 590, // ru-KZ + 0x3d9000bb: 591, // ru-MD + 0x3d900105: 592, // ru-RU + 0x3d90012f: 593, // ru-UA + 0x3dc00000: 594, // rw + 0x3dc00106: 595, // rw-RW + 0x3dd00000: 596, // rwk + 0x3dd0012e: 597, // rwk-TZ + 0x3e200000: 598, // sah + 0x3e200105: 599, // sah-RU + 0x3e300000: 600, // saq + 0x3e3000a3: 601, // saq-KE + 0x3e900000: 602, // sbp + 0x3e90012e: 603, // sbp-TZ + 0x3f200000: 604, // sdh + 0x3f300000: 605, // se + 0x3f300071: 606, // se-FI + 0x3f3000d9: 607, // se-NO + 0x3f30010b: 608, // se-SE + 0x3f500000: 609, // seh + 0x3f5000d0: 610, // seh-MZ + 0x3f700000: 611, // ses + 0x3f7000c2: 612, // ses-ML + 0x3f800000: 613, // sg + 0x3f80004b: 614, // sg-CF + 0x3fe00000: 615, // shi + 0x3fe52000: 616, // shi-Latn + 0x3fe520b9: 617, // shi-Latn-MA + 0x3fed2000: 618, // shi-Tfng + 0x3fed20b9: 619, // shi-Tfng-MA + 0x40200000: 620, // si + 0x402000b2: 621, // si-LK + 0x40800000: 622, // sk + 0x40800110: 623, // sk-SK + 0x40c00000: 624, // sl + 0x40c0010e: 625, // sl-SI + 0x41200000: 626, // sma + 0x41300000: 627, // smi + 0x41400000: 628, // smj + 0x41500000: 629, // smn + 0x41500071: 630, // smn-FI + 0x41800000: 631, // sms + 0x41900000: 632, // sn + 0x41900163: 633, // sn-ZW + 0x41f00000: 634, // so + 0x41f00061: 635, // so-DJ + 0x41f0006e: 636, // so-ET + 0x41f000a3: 637, // so-KE + 0x41f00114: 638, // so-SO + 0x42700000: 639, // sq + 0x42700026: 640, // sq-AL + 0x427000c1: 641, // sq-MK + 0x4270014c: 642, // sq-XK + 0x42800000: 643, // sr + 0x4281e000: 644, // sr-Cyrl + 0x4281e032: 645, // sr-Cyrl-BA + 0x4281e0bc: 646, // sr-Cyrl-ME + 0x4281e104: 647, // sr-Cyrl-RS + 0x4281e14c: 648, // sr-Cyrl-XK + 0x42852000: 649, // sr-Latn + 0x42852032: 650, // sr-Latn-BA + 0x428520bc: 651, // sr-Latn-ME + 0x42852104: 652, // sr-Latn-RS + 0x4285214c: 653, // sr-Latn-XK + 0x42d00000: 654, // ss + 0x43000000: 655, // ssy + 0x43100000: 656, // st + 0x43a00000: 657, // sv + 0x43a00030: 658, // sv-AX + 0x43a00071: 659, // sv-FI + 0x43a0010b: 660, // sv-SE + 0x43b00000: 661, // sw + 0x43b0004a: 662, // sw-CD + 0x43b000a3: 663, // sw-KE + 0x43b0012e: 664, // sw-TZ + 0x43b00130: 665, // sw-UG + 0x44400000: 666, // syr + 0x44600000: 667, // ta + 0x44600098: 668, // ta-IN + 0x446000b2: 669, // ta-LK + 0x446000cf: 670, // ta-MY + 0x4460010c: 671, // ta-SG + 0x45700000: 672, // te + 0x45700098: 673, // te-IN + 0x45a00000: 674, // teo + 0x45a000a3: 675, // teo-KE + 0x45a00130: 676, // teo-UG + 0x46100000: 677, // th + 0x46100122: 678, // th-TH + 0x46500000: 679, // ti + 0x4650006c: 680, // ti-ER + 0x4650006e: 681, // ti-ET + 0x46700000: 682, // tig + 0x46c00000: 683, // tk + 0x46c00126: 684, // tk-TM + 0x47600000: 685, // tn + 0x47800000: 686, // to + 0x47800128: 687, // to-TO + 0x48000000: 688, // tr + 0x4800005c: 689, // tr-CY + 0x4800012a: 690, // tr-TR + 0x48400000: 691, // ts + 0x49a00000: 692, // twq + 0x49a000d3: 693, // twq-NE + 0x49f00000: 694, // tzm + 0x49f000b9: 695, // tzm-MA + 0x4a200000: 696, // ug + 0x4a200052: 697, // ug-CN + 0x4a400000: 698, // uk + 0x4a40012f: 699, // uk-UA + 0x4aa00000: 700, // ur + 0x4aa00098: 701, // ur-IN + 0x4aa000e7: 702, // ur-PK + 0x4b200000: 703, // uz + 0x4b205000: 704, // uz-Arab + 0x4b205023: 705, // uz-Arab-AF + 0x4b21e000: 706, // uz-Cyrl + 0x4b21e136: 707, // uz-Cyrl-UZ + 0x4b252000: 708, // uz-Latn + 0x4b252136: 709, // uz-Latn-UZ + 0x4b400000: 710, // vai + 0x4b452000: 711, // vai-Latn + 0x4b4520b3: 712, // vai-Latn-LR + 0x4b4d9000: 713, // vai-Vaii + 0x4b4d90b3: 714, // vai-Vaii-LR + 0x4b600000: 715, // ve + 0x4b900000: 716, // vi + 0x4b90013d: 717, // vi-VN + 0x4bf00000: 718, // vo + 0x4bf00001: 719, // vo-001 + 0x4c200000: 720, // vun + 0x4c20012e: 721, // vun-TZ + 0x4c400000: 722, // wa + 0x4c500000: 723, // wae + 0x4c50004d: 724, // wae-CH + 0x4db00000: 725, // wo + 0x4e800000: 726, // xh + 0x4f100000: 727, // xog + 0x4f100130: 728, // xog-UG + 0x4ff00000: 729, // yav + 0x4ff00051: 730, // yav-CM + 0x50800000: 731, // yi + 0x50800001: 732, // yi-001 + 0x50e00000: 733, // yo + 0x50e0003a: 734, // yo-BJ + 0x50e000d5: 735, // yo-NG + 0x51500000: 736, // yue + 0x5150008c: 737, // yue-HK + 0x51e00000: 738, // zgh + 0x51e000b9: 739, // zgh-MA + 0x51f00000: 740, // zh + 0x51f34000: 741, // zh-Hans + 0x51f34052: 742, // zh-Hans-CN + 0x51f3408c: 743, // zh-Hans-HK + 0x51f340c5: 744, // zh-Hans-MO + 0x51f3410c: 745, // zh-Hans-SG + 0x51f35000: 746, // zh-Hant + 0x51f3508c: 747, // zh-Hant-HK + 0x51f350c5: 748, // zh-Hant-MO + 0x51f3512d: 749, // zh-Hant-TW + 0x52400000: 750, // zu + 0x52400160: 751, // zu-ZA +} + +// Total table size 4580 bytes (4KiB); checksum: A7F72A2A diff --git a/vendor/golang.org/x/text/language/language.go b/vendor/golang.org/x/text/language/language.go new file mode 100644 index 0000000..5eecceb --- /dev/null +++ b/vendor/golang.org/x/text/language/language.go @@ -0,0 +1,975 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run maketables.go gen_common.go -output tables.go +//go:generate go run gen_index.go + +// Package language implements BCP 47 language tags and related functionality. +// +// The Tag type, which is used to represent languages, is agnostic to the +// meaning of its subtags. Tags are not fully canonicalized to preserve +// information that may be valuable in certain contexts. As a consequence, two +// different tags may represent identical languages. +// +// Initializing language- or locale-specific components usually consists of +// two steps. The first step is to select a display language based on the +// preferred languages of the user and the languages supported by an application. +// The second step is to create the language-specific services based on +// this selection. Each is discussed in more details below. +// +// Matching preferred against supported languages +// +// An application may support various languages. This list is typically limited +// by the languages for which there exists translations of the user interface. +// Similarly, a user may provide a list of preferred languages which is limited +// by the languages understood by this user. +// An application should use a Matcher to find the best supported language based +// on the user's preferred list. +// Matchers are aware of the intricacies of equivalence between languages. +// The default Matcher implementation takes into account things such as +// deprecated subtags, legacy tags, and mutual intelligibility between scripts +// and languages. +// +// A Matcher for English, Australian English, Danish, and standard Mandarin can +// be defined as follows: +// +// var matcher = language.NewMatcher([]language.Tag{ +// language.English, // The first language is used as fallback. +// language.MustParse("en-AU"), +// language.Danish, +// language.Chinese, +// }) +// +// The following code selects the best match for someone speaking Spanish and +// Norwegian: +// +// preferred := []language.Tag{ language.Spanish, language.Norwegian } +// tag, _, _ := matcher.Match(preferred...) +// +// In this case, the best match is Danish, as Danish is sufficiently a match to +// Norwegian to not have to fall back to the default. +// See ParseAcceptLanguage on how to handle the Accept-Language HTTP header. +// +// Selecting language-specific services +// +// One should always use the Tag returned by the Matcher to create an instance +// of any of the language-specific services provided by the text repository. +// This prevents the mixing of languages, such as having a different language for +// messages and display names, as well as improper casing or sorting order for +// the selected language. +// Using the returned Tag also allows user-defined settings, such as collation +// order or numbering system to be transparently passed as options. +// +// If you have language-specific data in your application, however, it will in +// most cases suffice to use the index returned by the matcher to identify +// the user language. +// The following loop provides an alternative in case this is not sufficient: +// +// supported := map[language.Tag]data{ +// language.English: enData, +// language.MustParse("en-AU"): enAUData, +// language.Danish: daData, +// language.Chinese: zhData, +// } +// tag, _, _ := matcher.Match(preferred...) +// for ; tag != language.Und; tag = tag.Parent() { +// if v, ok := supported[tag]; ok { +// return v +// } +// } +// return enData // should not reach here +// +// Repeatedly taking the Parent of the tag returned by Match will eventually +// match one of the tags used to initialize the Matcher. +// +// Canonicalization +// +// By default, only legacy and deprecated tags are converted into their +// canonical equivalent. All other information is preserved. This approach makes +// the confidence scores more accurate and allows matchers to distinguish +// between variants that are otherwise lost. +// +// As a consequence, two tags that should be treated as identical according to +// BCP 47 or CLDR, like "en-Latn" and "en", will be represented differently. The +// Matchers will handle such distinctions, though, and are aware of the +// equivalence relations. The CanonType type can be used to alter the +// canonicalization form. +// +// References +// +// BCP 47 - Tags for Identifying Languages +// http://tools.ietf.org/html/bcp47 +package language // import "golang.org/x/text/language" + +// TODO: Remove above NOTE after: +// - verifying that tables are dropped correctly (most notably matcher tables). + +import ( + "errors" + "fmt" + "strings" +) + +const ( + // maxCoreSize is the maximum size of a BCP 47 tag without variants and + // extensions. Equals max lang (3) + script (4) + max reg (3) + 2 dashes. + maxCoreSize = 12 + + // max99thPercentileSize is a somewhat arbitrary buffer size that presumably + // is large enough to hold at least 99% of the BCP 47 tags. + max99thPercentileSize = 32 + + // maxSimpleUExtensionSize is the maximum size of a -u extension with one + // key-type pair. Equals len("-u-") + key (2) + dash + max value (8). + maxSimpleUExtensionSize = 14 +) + +// Tag represents a BCP 47 language tag. It is used to specify an instance of a +// specific language or locale. All language tag values are guaranteed to be +// well-formed. +type Tag struct { + lang langID + region regionID + script scriptID + pVariant byte // offset in str, includes preceding '-' + pExt uint16 // offset of first extension, includes preceding '-' + + // str is the string representation of the Tag. It will only be used if the + // tag has variants or extensions. + str string +} + +// Make is a convenience wrapper for Parse that omits the error. +// In case of an error, a sensible default is returned. +func Make(s string) Tag { + return Default.Make(s) +} + +// Make is a convenience wrapper for c.Parse that omits the error. +// In case of an error, a sensible default is returned. +func (c CanonType) Make(s string) Tag { + t, _ := c.Parse(s) + return t +} + +// Raw returns the raw base language, script and region, without making an +// attempt to infer their values. +func (t Tag) Raw() (b Base, s Script, r Region) { + return Base{t.lang}, Script{t.script}, Region{t.region} +} + +// equalTags compares language, script and region subtags only. +func (t Tag) equalTags(a Tag) bool { + return t.lang == a.lang && t.script == a.script && t.region == a.region +} + +// IsRoot returns true if t is equal to language "und". +func (t Tag) IsRoot() bool { + if int(t.pVariant) < len(t.str) { + return false + } + return t.equalTags(und) +} + +// private reports whether the Tag consists solely of a private use tag. +func (t Tag) private() bool { + return t.str != "" && t.pVariant == 0 +} + +// CanonType can be used to enable or disable various types of canonicalization. +type CanonType int + +const ( + // Replace deprecated base languages with their preferred replacements. + DeprecatedBase CanonType = 1 << iota + // Replace deprecated scripts with their preferred replacements. + DeprecatedScript + // Replace deprecated regions with their preferred replacements. + DeprecatedRegion + // Remove redundant scripts. + SuppressScript + // Normalize legacy encodings. This includes legacy languages defined in + // CLDR as well as bibliographic codes defined in ISO-639. + Legacy + // Map the dominant language of a macro language group to the macro language + // subtag. For example cmn -> zh. + Macro + // The CLDR flag should be used if full compatibility with CLDR is required. + // There are a few cases where language.Tag may differ from CLDR. To follow all + // of CLDR's suggestions, use All|CLDR. + CLDR + + // Raw can be used to Compose or Parse without Canonicalization. + Raw CanonType = 0 + + // Replace all deprecated tags with their preferred replacements. + Deprecated = DeprecatedBase | DeprecatedScript | DeprecatedRegion + + // All canonicalizations recommended by BCP 47. + BCP47 = Deprecated | SuppressScript + + // All canonicalizations. + All = BCP47 | Legacy | Macro + + // Default is the canonicalization used by Parse, Make and Compose. To + // preserve as much information as possible, canonicalizations that remove + // potentially valuable information are not included. The Matcher is + // designed to recognize similar tags that would be the same if + // they were canonicalized using All. + Default = Deprecated | Legacy + + canonLang = DeprecatedBase | Legacy | Macro + + // TODO: LikelyScript, LikelyRegion: suppress similar to ICU. +) + +// canonicalize returns the canonicalized equivalent of the tag and +// whether there was any change. +func (t Tag) canonicalize(c CanonType) (Tag, bool) { + if c == Raw { + return t, false + } + changed := false + if c&SuppressScript != 0 { + if t.lang < langNoIndexOffset && uint8(t.script) == suppressScript[t.lang] { + t.script = 0 + changed = true + } + } + if c&canonLang != 0 { + for { + if l, aliasType := normLang(t.lang); l != t.lang { + switch aliasType { + case langLegacy: + if c&Legacy != 0 { + if t.lang == _sh && t.script == 0 { + t.script = _Latn + } + t.lang = l + changed = true + } + case langMacro: + if c&Macro != 0 { + // We deviate here from CLDR. The mapping "nb" -> "no" + // qualifies as a typical Macro language mapping. However, + // for legacy reasons, CLDR maps "no", the macro language + // code for Norwegian, to the dominant variant "nb". This + // change is currently under consideration for CLDR as well. + // See http://unicode.org/cldr/trac/ticket/2698 and also + // http://unicode.org/cldr/trac/ticket/1790 for some of the + // practical implications. TODO: this check could be removed + // if CLDR adopts this change. + if c&CLDR == 0 || t.lang != _nb { + changed = true + t.lang = l + } + } + case langDeprecated: + if c&DeprecatedBase != 0 { + if t.lang == _mo && t.region == 0 { + t.region = _MD + } + t.lang = l + changed = true + // Other canonicalization types may still apply. + continue + } + } + } else if c&Legacy != 0 && t.lang == _no && c&CLDR != 0 { + t.lang = _nb + changed = true + } + break + } + } + if c&DeprecatedScript != 0 { + if t.script == _Qaai { + changed = true + t.script = _Zinh + } + } + if c&DeprecatedRegion != 0 { + if r := normRegion(t.region); r != 0 { + changed = true + t.region = r + } + } + return t, changed +} + +// Canonicalize returns the canonicalized equivalent of the tag. +func (c CanonType) Canonicalize(t Tag) (Tag, error) { + t, changed := t.canonicalize(c) + if changed { + t.remakeString() + } + return t, nil +} + +// Confidence indicates the level of certainty for a given return value. +// For example, Serbian may be written in Cyrillic or Latin script. +// The confidence level indicates whether a value was explicitly specified, +// whether it is typically the only possible value, or whether there is +// an ambiguity. +type Confidence int + +const ( + No Confidence = iota // full confidence that there was no match + Low // most likely value picked out of a set of alternatives + High // value is generally assumed to be the correct match + Exact // exact match or explicitly specified value +) + +var confName = []string{"No", "Low", "High", "Exact"} + +func (c Confidence) String() string { + return confName[c] +} + +// remakeString is used to update t.str in case lang, script or region changed. +// It is assumed that pExt and pVariant still point to the start of the +// respective parts. +func (t *Tag) remakeString() { + if t.str == "" { + return + } + extra := t.str[t.pVariant:] + if t.pVariant > 0 { + extra = extra[1:] + } + if t.equalTags(und) && strings.HasPrefix(extra, "x-") { + t.str = extra + t.pVariant = 0 + t.pExt = 0 + return + } + var buf [max99thPercentileSize]byte // avoid extra memory allocation in most cases. + b := buf[:t.genCoreBytes(buf[:])] + if extra != "" { + diff := len(b) - int(t.pVariant) + b = append(b, '-') + b = append(b, extra...) + t.pVariant = uint8(int(t.pVariant) + diff) + t.pExt = uint16(int(t.pExt) + diff) + } else { + t.pVariant = uint8(len(b)) + t.pExt = uint16(len(b)) + } + t.str = string(b) +} + +// genCoreBytes writes a string for the base languages, script and region tags +// to the given buffer and returns the number of bytes written. It will never +// write more than maxCoreSize bytes. +func (t *Tag) genCoreBytes(buf []byte) int { + n := t.lang.stringToBuf(buf[:]) + if t.script != 0 { + n += copy(buf[n:], "-") + n += copy(buf[n:], t.script.String()) + } + if t.region != 0 { + n += copy(buf[n:], "-") + n += copy(buf[n:], t.region.String()) + } + return n +} + +// String returns the canonical string representation of the language tag. +func (t Tag) String() string { + if t.str != "" { + return t.str + } + if t.script == 0 && t.region == 0 { + return t.lang.String() + } + buf := [maxCoreSize]byte{} + return string(buf[:t.genCoreBytes(buf[:])]) +} + +// Base returns the base language of the language tag. If the base language is +// unspecified, an attempt will be made to infer it from the context. +// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change. +func (t Tag) Base() (Base, Confidence) { + if t.lang != 0 { + return Base{t.lang}, Exact + } + c := High + if t.script == 0 && !(Region{t.region}).IsCountry() { + c = Low + } + if tag, err := addTags(t); err == nil && tag.lang != 0 { + return Base{tag.lang}, c + } + return Base{0}, No +} + +// Script infers the script for the language tag. If it was not explicitly given, it will infer +// a most likely candidate. +// If more than one script is commonly used for a language, the most likely one +// is returned with a low confidence indication. For example, it returns (Cyrl, Low) +// for Serbian. +// If a script cannot be inferred (Zzzz, No) is returned. We do not use Zyyy (undetermined) +// as one would suspect from the IANA registry for BCP 47. In a Unicode context Zyyy marks +// common characters (like 1, 2, 3, '.', etc.) and is therefore more like multiple scripts. +// See http://www.unicode.org/reports/tr24/#Values for more details. Zzzz is also used for +// unknown value in CLDR. (Zzzz, Exact) is returned if Zzzz was explicitly specified. +// Note that an inferred script is never guaranteed to be the correct one. Latin is +// almost exclusively used for Afrikaans, but Arabic has been used for some texts +// in the past. Also, the script that is commonly used may change over time. +// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change. +func (t Tag) Script() (Script, Confidence) { + if t.script != 0 { + return Script{t.script}, Exact + } + sc, c := scriptID(_Zzzz), No + if t.lang < langNoIndexOffset { + if scr := scriptID(suppressScript[t.lang]); scr != 0 { + // Note: it is not always the case that a language with a suppress + // script value is only written in one script (e.g. kk, ms, pa). + if t.region == 0 { + return Script{scriptID(scr)}, High + } + sc, c = scr, High + } + } + if tag, err := addTags(t); err == nil { + if tag.script != sc { + sc, c = tag.script, Low + } + } else { + t, _ = (Deprecated | Macro).Canonicalize(t) + if tag, err := addTags(t); err == nil && tag.script != sc { + sc, c = tag.script, Low + } + } + return Script{sc}, c +} + +// Region returns the region for the language tag. If it was not explicitly given, it will +// infer a most likely candidate from the context. +// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change. +func (t Tag) Region() (Region, Confidence) { + if t.region != 0 { + return Region{t.region}, Exact + } + if t, err := addTags(t); err == nil { + return Region{t.region}, Low // TODO: differentiate between high and low. + } + t, _ = (Deprecated | Macro).Canonicalize(t) + if tag, err := addTags(t); err == nil { + return Region{tag.region}, Low + } + return Region{_ZZ}, No // TODO: return world instead of undetermined? +} + +// Variant returns the variants specified explicitly for this language tag. +// or nil if no variant was specified. +func (t Tag) Variants() []Variant { + v := []Variant{} + if int(t.pVariant) < int(t.pExt) { + for x, str := "", t.str[t.pVariant:t.pExt]; str != ""; { + x, str = nextToken(str) + v = append(v, Variant{x}) + } + } + return v +} + +// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a +// specific language are substituted with fields from the parent language. +// The parent for a language may change for newer versions of CLDR. +func (t Tag) Parent() Tag { + if t.str != "" { + // Strip the variants and extensions. + t, _ = Raw.Compose(t.Raw()) + if t.region == 0 && t.script != 0 && t.lang != 0 { + base, _ := addTags(Tag{lang: t.lang}) + if base.script == t.script { + return Tag{lang: t.lang} + } + } + return t + } + if t.lang != 0 { + if t.region != 0 { + maxScript := t.script + if maxScript == 0 { + max, _ := addTags(t) + maxScript = max.script + } + + for i := range parents { + if langID(parents[i].lang) == t.lang && scriptID(parents[i].maxScript) == maxScript { + for _, r := range parents[i].fromRegion { + if regionID(r) == t.region { + return Tag{ + lang: t.lang, + script: scriptID(parents[i].script), + region: regionID(parents[i].toRegion), + } + } + } + } + } + + // Strip the script if it is the default one. + base, _ := addTags(Tag{lang: t.lang}) + if base.script != maxScript { + return Tag{lang: t.lang, script: maxScript} + } + return Tag{lang: t.lang} + } else if t.script != 0 { + // The parent for an base-script pair with a non-default script is + // "und" instead of the base language. + base, _ := addTags(Tag{lang: t.lang}) + if base.script != t.script { + return und + } + return Tag{lang: t.lang} + } + } + return und +} + +// returns token t and the rest of the string. +func nextToken(s string) (t, tail string) { + p := strings.Index(s[1:], "-") + if p == -1 { + return s[1:], "" + } + p++ + return s[1:p], s[p:] +} + +// Extension is a single BCP 47 extension. +type Extension struct { + s string +} + +// String returns the string representation of the extension, including the +// type tag. +func (e Extension) String() string { + return e.s +} + +// ParseExtension parses s as an extension and returns it on success. +func ParseExtension(s string) (e Extension, err error) { + scan := makeScannerString(s) + var end int + if n := len(scan.token); n != 1 { + return Extension{}, errSyntax + } + scan.toLower(0, len(scan.b)) + end = parseExtension(&scan) + if end != len(s) { + return Extension{}, errSyntax + } + return Extension{string(scan.b)}, nil +} + +// Type returns the one-byte extension type of e. It returns 0 for the zero +// exception. +func (e Extension) Type() byte { + if e.s == "" { + return 0 + } + return e.s[0] +} + +// Tokens returns the list of tokens of e. +func (e Extension) Tokens() []string { + return strings.Split(e.s, "-") +} + +// Extension returns the extension of type x for tag t. It will return +// false for ok if t does not have the requested extension. The returned +// extension will be invalid in this case. +func (t Tag) Extension(x byte) (ext Extension, ok bool) { + for i := int(t.pExt); i < len(t.str)-1; { + var ext string + i, ext = getExtension(t.str, i) + if ext[0] == x { + return Extension{ext}, true + } + } + return Extension{}, false +} + +// Extensions returns all extensions of t. +func (t Tag) Extensions() []Extension { + e := []Extension{} + for i := int(t.pExt); i < len(t.str)-1; { + var ext string + i, ext = getExtension(t.str, i) + e = append(e, Extension{ext}) + } + return e +} + +// TypeForKey returns the type associated with the given key, where key and type +// are of the allowed values defined for the Unicode locale extension ('u') in +// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. +// TypeForKey will traverse the inheritance chain to get the correct value. +func (t Tag) TypeForKey(key string) string { + if start, end, _ := t.findTypeForKey(key); end != start { + return t.str[start:end] + } + return "" +} + +var ( + errPrivateUse = errors.New("cannot set a key on a private use tag") + errInvalidArguments = errors.New("invalid key or type") +) + +// SetTypeForKey returns a new Tag with the key set to type, where key and type +// are of the allowed values defined for the Unicode locale extension ('u') in +// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. +// An empty value removes an existing pair with the same key. +func (t Tag) SetTypeForKey(key, value string) (Tag, error) { + if t.private() { + return t, errPrivateUse + } + if len(key) != 2 { + return t, errInvalidArguments + } + + // Remove the setting if value is "". + if value == "" { + start, end, _ := t.findTypeForKey(key) + if start != end { + // Remove key tag and leading '-'. + start -= 4 + + // Remove a possible empty extension. + if (end == len(t.str) || t.str[end+2] == '-') && t.str[start-2] == '-' { + start -= 2 + } + if start == int(t.pVariant) && end == len(t.str) { + t.str = "" + t.pVariant, t.pExt = 0, 0 + } else { + t.str = fmt.Sprintf("%s%s", t.str[:start], t.str[end:]) + } + } + return t, nil + } + + if len(value) < 3 || len(value) > 8 { + return t, errInvalidArguments + } + + var ( + buf [maxCoreSize + maxSimpleUExtensionSize]byte + uStart int // start of the -u extension. + ) + + // Generate the tag string if needed. + if t.str == "" { + uStart = t.genCoreBytes(buf[:]) + buf[uStart] = '-' + uStart++ + } + + // Create new key-type pair and parse it to verify. + b := buf[uStart:] + copy(b, "u-") + copy(b[2:], key) + b[4] = '-' + b = b[:5+copy(b[5:], value)] + scan := makeScanner(b) + if parseExtensions(&scan); scan.err != nil { + return t, scan.err + } + + // Assemble the replacement string. + if t.str == "" { + t.pVariant, t.pExt = byte(uStart-1), uint16(uStart-1) + t.str = string(buf[:uStart+len(b)]) + } else { + s := t.str + start, end, hasExt := t.findTypeForKey(key) + if start == end { + if hasExt { + b = b[2:] + } + t.str = fmt.Sprintf("%s-%s%s", s[:start], b, s[end:]) + } else { + t.str = fmt.Sprintf("%s%s%s", s[:start], value, s[end:]) + } + } + return t, nil +} + +// findKeyAndType returns the start and end position for the type corresponding +// to key or the point at which to insert the key-value pair if the type +// wasn't found. The hasExt return value reports whether an -u extension was present. +// Note: the extensions are typically very small and are likely to contain +// only one key-type pair. +func (t Tag) findTypeForKey(key string) (start, end int, hasExt bool) { + p := int(t.pExt) + if len(key) != 2 || p == len(t.str) || p == 0 { + return p, p, false + } + s := t.str + + // Find the correct extension. + for p++; s[p] != 'u'; p++ { + if s[p] > 'u' { + p-- + return p, p, false + } + if p = nextExtension(s, p); p == len(s) { + return len(s), len(s), false + } + } + // Proceed to the hyphen following the extension name. + p++ + + // curKey is the key currently being processed. + curKey := "" + + // Iterate over keys until we get the end of a section. + for { + // p points to the hyphen preceding the current token. + if p3 := p + 3; s[p3] == '-' { + // Found a key. + // Check whether we just processed the key that was requested. + if curKey == key { + return start, p, true + } + // Set to the next key and continue scanning type tokens. + curKey = s[p+1 : p3] + if curKey > key { + return p, p, true + } + // Start of the type token sequence. + start = p + 4 + // A type is at least 3 characters long. + p += 7 // 4 + 3 + } else { + // Attribute or type, which is at least 3 characters long. + p += 4 + } + // p points past the third character of a type or attribute. + max := p + 5 // maximum length of token plus hyphen. + if len(s) < max { + max = len(s) + } + for ; p < max && s[p] != '-'; p++ { + } + // Bail if we have exhausted all tokens or if the next token starts + // a new extension. + if p == len(s) || s[p+2] == '-' { + if curKey == key { + return start, p, true + } + return p, p, true + } + } +} + +// CompactIndex returns an index, where 0 <= index < NumCompactTags, for tags +// for which data exists in the text repository. The index will change over time +// and should not be stored in persistent storage. Extensions, except for the +// 'va' type of the 'u' extension, are ignored. It will return 0, false if no +// compact tag exists, where 0 is the index for the root language (Und). +func CompactIndex(t Tag) (index int, ok bool) { + // TODO: perhaps give more frequent tags a lower index. + // TODO: we could make the indexes stable. This will excluded some + // possibilities for optimization, so don't do this quite yet. + b, s, r := t.Raw() + if len(t.str) > 0 { + if strings.HasPrefix(t.str, "x-") { + // We have no entries for user-defined tags. + return 0, false + } + if uint16(t.pVariant) != t.pExt { + // There are no tags with variants and an u-va type. + if t.TypeForKey("va") != "" { + return 0, false + } + t, _ = Raw.Compose(b, s, r, t.Variants()) + } else if _, ok := t.Extension('u'); ok { + // Strip all but the 'va' entry. + variant := t.TypeForKey("va") + t, _ = Raw.Compose(b, s, r) + t, _ = t.SetTypeForKey("va", variant) + } + if len(t.str) > 0 { + // We have some variants. + for i, s := range specialTags { + if s == t { + return i + 1, true + } + } + return 0, false + } + } + // No variants specified: just compare core components. + // The key has the form lllssrrr, where l, s, and r are nibbles for + // respectively the langID, scriptID, and regionID. + key := uint32(b.langID) << (8 + 12) + key |= uint32(s.scriptID) << 12 + key |= uint32(r.regionID) + x, ok := coreTags[key] + return int(x), ok +} + +// Base is an ISO 639 language code, used for encoding the base language +// of a language tag. +type Base struct { + langID +} + +// ParseBase parses a 2- or 3-letter ISO 639 code. +// It returns a ValueError if s is a well-formed but unknown language identifier +// or another error if another error occurred. +func ParseBase(s string) (Base, error) { + if n := len(s); n < 2 || 3 < n { + return Base{}, errSyntax + } + var buf [3]byte + l, err := getLangID(buf[:copy(buf[:], s)]) + return Base{l}, err +} + +// Script is a 4-letter ISO 15924 code for representing scripts. +// It is idiomatically represented in title case. +type Script struct { + scriptID +} + +// ParseScript parses a 4-letter ISO 15924 code. +// It returns a ValueError if s is a well-formed but unknown script identifier +// or another error if another error occurred. +func ParseScript(s string) (Script, error) { + if len(s) != 4 { + return Script{}, errSyntax + } + var buf [4]byte + sc, err := getScriptID(script, buf[:copy(buf[:], s)]) + return Script{sc}, err +} + +// Region is an ISO 3166-1 or UN M.49 code for representing countries and regions. +type Region struct { + regionID +} + +// EncodeM49 returns the Region for the given UN M.49 code. +// It returns an error if r is not a valid code. +func EncodeM49(r int) (Region, error) { + rid, err := getRegionM49(r) + return Region{rid}, err +} + +// ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code. +// It returns a ValueError if s is a well-formed but unknown region identifier +// or another error if another error occurred. +func ParseRegion(s string) (Region, error) { + if n := len(s); n < 2 || 3 < n { + return Region{}, errSyntax + } + var buf [3]byte + r, err := getRegionID(buf[:copy(buf[:], s)]) + return Region{r}, err +} + +// IsCountry returns whether this region is a country or autonomous area. This +// includes non-standard definitions from CLDR. +func (r Region) IsCountry() bool { + if r.regionID == 0 || r.IsGroup() || r.IsPrivateUse() && r.regionID != _XK { + return false + } + return true +} + +// IsGroup returns whether this region defines a collection of regions. This +// includes non-standard definitions from CLDR. +func (r Region) IsGroup() bool { + if r.regionID == 0 { + return false + } + return int(regionInclusion[r.regionID]) < len(regionContainment) +} + +// Contains returns whether Region c is contained by Region r. It returns true +// if c == r. +func (r Region) Contains(c Region) bool { + return r.regionID.contains(c.regionID) +} + +func (r regionID) contains(c regionID) bool { + if r == c { + return true + } + g := regionInclusion[r] + if g >= nRegionGroups { + return false + } + m := regionContainment[g] + + d := regionInclusion[c] + b := regionInclusionBits[d] + + // A contained country may belong to multiple disjoint groups. Matching any + // of these indicates containment. If the contained region is a group, it + // must strictly be a subset. + if d >= nRegionGroups { + return b&m != 0 + } + return b&^m == 0 +} + +var errNoTLD = errors.New("language: region is not a valid ccTLD") + +// TLD returns the country code top-level domain (ccTLD). UK is returned for GB. +// In all other cases it returns either the region itself or an error. +// +// This method may return an error for a region for which there exists a +// canonical form with a ccTLD. To get that ccTLD canonicalize r first. The +// region will already be canonicalized it was obtained from a Tag that was +// obtained using any of the default methods. +func (r Region) TLD() (Region, error) { + // See http://en.wikipedia.org/wiki/Country_code_top-level_domain for the + // difference between ISO 3166-1 and IANA ccTLD. + if r.regionID == _GB { + r = Region{_UK} + } + if (r.typ() & ccTLD) == 0 { + return Region{}, errNoTLD + } + return r, nil +} + +// Canonicalize returns the region or a possible replacement if the region is +// deprecated. It will not return a replacement for deprecated regions that +// are split into multiple regions. +func (r Region) Canonicalize() Region { + if cr := normRegion(r.regionID); cr != 0 { + return Region{cr} + } + return r +} + +// Variant represents a registered variant of a language as defined by BCP 47. +type Variant struct { + variant string +} + +// ParseVariant parses and returns a Variant. An error is returned if s is not +// a valid variant. +func ParseVariant(s string) (Variant, error) { + s = strings.ToLower(s) + if _, ok := variantIndex[s]; ok { + return Variant{s}, nil + } + return Variant{}, mkErrInvalid([]byte(s)) +} + +// String returns the string representation of the variant. +func (v Variant) String() string { + return v.variant +} diff --git a/vendor/golang.org/x/text/language/language_test.go b/vendor/golang.org/x/text/language/language_test.go new file mode 100644 index 0000000..f7c2d88 --- /dev/null +++ b/vendor/golang.org/x/text/language/language_test.go @@ -0,0 +1,878 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import ( + "reflect" + "testing" + + "golang.org/x/text/internal/testtext" +) + +func TestTagSize(t *testing.T) { + id := Tag{} + typ := reflect.TypeOf(id) + if typ.Size() > 24 { + t.Errorf("size of Tag was %d; want 24", typ.Size()) + } +} + +func TestIsRoot(t *testing.T) { + loc := Tag{} + if !loc.IsRoot() { + t.Errorf("unspecified should be root.") + } + for i, tt := range parseTests() { + loc, _ := Parse(tt.in) + undef := tt.lang == "und" && tt.script == "" && tt.region == "" && tt.ext == "" + if loc.IsRoot() != undef { + t.Errorf("%d: was %v; want %v", i, loc.IsRoot(), undef) + } + } +} + +func TestEquality(t *testing.T) { + for i, tt := range parseTests()[48:49] { + s := tt.in + tag := Make(s) + t1 := Make(tag.String()) + if tag != t1 { + t.Errorf("%d:%s: equality test 1 failed\n got: %#v\nwant: %#v)", i, s, t1, tag) + } + t2, _ := Compose(tag) + if tag != t2 { + t.Errorf("%d:%s: equality test 2 failed\n got: %#v\nwant: %#v", i, s, t2, tag) + } + } +} + +func TestMakeString(t *testing.T) { + tests := []struct{ in, out string }{ + {"und", "und"}, + {"und", "und-CW"}, + {"nl", "nl-NL"}, + {"de-1901", "nl-1901"}, + {"de-1901", "de-Arab-1901"}, + {"x-a-b", "de-Arab-x-a-b"}, + {"x-a-b", "x-a-b"}, + } + for i, tt := range tests { + id, _ := Parse(tt.in) + mod, _ := Parse(tt.out) + id.setTagsFrom(mod) + for j := 0; j < 2; j++ { + id.remakeString() + if str := id.String(); str != tt.out { + t.Errorf("%d:%d: found %s; want %s", i, j, id.String(), tt.out) + } + } + // The bytes to string conversion as used in remakeString + // occasionally measures as more than one alloc, breaking this test. + // To alleviate this we set the number of runs to more than 1. + if n := testtext.AllocsPerRun(8, id.remakeString); n > 1 { + t.Errorf("%d: # allocs got %.1f; want <= 1", i, n) + } + } +} + +func TestCompactIndex(t *testing.T) { + tests := []struct { + tag string + index int + ok bool + }{ + // TODO: these values will change with each CLDR update. This issue + // will be solved if we decide to fix the indexes. + {"und", 0, true}, + {"ca-ES-valencia", 1, true}, + {"ca-ES-valencia-u-va-posix", 0, false}, + {"ca-ES-valencia-u-co-phonebk", 1, true}, + {"ca-ES-valencia-u-co-phonebk-va-posix", 0, false}, + {"x-klingon", 0, false}, + {"en-US", 229, true}, + {"en-US-u-va-posix", 2, true}, + {"en", 133, true}, + {"en-u-co-phonebk", 133, true}, + {"en-001", 134, true}, + {"sh", 0, false}, // We don't normalize. + } + for _, tt := range tests { + x, ok := CompactIndex(Raw.MustParse(tt.tag)) + if x != tt.index || ok != tt.ok { + t.Errorf("%s: got %d, %v; want %d %v", tt.tag, x, ok, tt.index, tt.ok) + } + } +} + +func TestBase(t *testing.T) { + tests := []struct { + loc, lang string + conf Confidence + }{ + {"und", "en", Low}, + {"x-abc", "und", No}, + {"en", "en", Exact}, + {"und-Cyrl", "ru", High}, + // If a region is not included, the official language should be English. + {"und-US", "en", High}, + // TODO: not-explicitly listed scripts should probably be und, No + // Modify addTags to return info on how the match was derived. + // {"und-Aghb", "und", No}, + } + for i, tt := range tests { + loc, _ := Parse(tt.loc) + lang, conf := loc.Base() + if lang.String() != tt.lang { + t.Errorf("%d: language was %s; want %s", i, lang, tt.lang) + } + if conf != tt.conf { + t.Errorf("%d: confidence was %d; want %d", i, conf, tt.conf) + } + } +} + +func TestParseBase(t *testing.T) { + tests := []struct { + in string + out string + ok bool + }{ + {"en", "en", true}, + {"EN", "en", true}, + {"nld", "nl", true}, + {"dut", "dut", true}, // bibliographic + {"aaj", "und", false}, // unknown + {"qaa", "qaa", true}, + {"a", "und", false}, + {"", "und", false}, + {"aaaa", "und", false}, + } + for i, tt := range tests { + x, err := ParseBase(tt.in) + if x.String() != tt.out || err == nil != tt.ok { + t.Errorf("%d:%s: was %s, %v; want %s, %v", i, tt.in, x, err == nil, tt.out, tt.ok) + } + if y, _, _ := Raw.Make(tt.out).Raw(); x != y { + t.Errorf("%d:%s: tag was %s; want %s", i, tt.in, x, y) + } + } +} + +func TestScript(t *testing.T) { + tests := []struct { + loc, scr string + conf Confidence + }{ + {"und", "Latn", Low}, + {"en-Latn", "Latn", Exact}, + {"en", "Latn", High}, + {"sr", "Cyrl", Low}, + {"kk", "Cyrl", High}, + {"kk-CN", "Arab", Low}, + {"cmn", "Hans", Low}, + {"ru", "Cyrl", High}, + {"ru-RU", "Cyrl", High}, + {"yue", "Hant", Low}, + {"x-abc", "Zzzz", Low}, + {"und-zyyy", "Zyyy", Exact}, + } + for i, tt := range tests { + loc, _ := Parse(tt.loc) + sc, conf := loc.Script() + if sc.String() != tt.scr { + t.Errorf("%d:%s: script was %s; want %s", i, tt.loc, sc, tt.scr) + } + if conf != tt.conf { + t.Errorf("%d:%s: confidence was %d; want %d", i, tt.loc, conf, tt.conf) + } + } +} + +func TestParseScript(t *testing.T) { + tests := []struct { + in string + out string + ok bool + }{ + {"Latn", "Latn", true}, + {"zzzz", "Zzzz", true}, + {"zyyy", "Zyyy", true}, + {"Latm", "Zzzz", false}, + {"Zzz", "Zzzz", false}, + {"", "Zzzz", false}, + {"Zzzxx", "Zzzz", false}, + } + for i, tt := range tests { + x, err := ParseScript(tt.in) + if x.String() != tt.out || err == nil != tt.ok { + t.Errorf("%d:%s: was %s, %v; want %s, %v", i, tt.in, x, err == nil, tt.out, tt.ok) + } + if err == nil { + if _, y, _ := Raw.Make("und-" + tt.out).Raw(); x != y { + t.Errorf("%d:%s: tag was %s; want %s", i, tt.in, x, y) + } + } + } +} + +func TestRegion(t *testing.T) { + tests := []struct { + loc, reg string + conf Confidence + }{ + {"und", "US", Low}, + {"en", "US", Low}, + {"zh-Hant", "TW", Low}, + {"en-US", "US", Exact}, + {"cmn", "CN", Low}, + {"ru", "RU", Low}, + {"yue", "HK", Low}, + {"x-abc", "ZZ", Low}, + } + for i, tt := range tests { + loc, _ := Raw.Parse(tt.loc) + reg, conf := loc.Region() + if reg.String() != tt.reg { + t.Errorf("%d:%s: region was %s; want %s", i, tt.loc, reg, tt.reg) + } + if conf != tt.conf { + t.Errorf("%d:%s: confidence was %d; want %d", i, tt.loc, conf, tt.conf) + } + } +} + +func TestEncodeM49(t *testing.T) { + tests := []struct { + m49 int + code string + ok bool + }{ + {1, "001", true}, + {840, "US", true}, + {899, "ZZ", false}, + } + for i, tt := range tests { + if r, err := EncodeM49(tt.m49); r.String() != tt.code || err == nil != tt.ok { + t.Errorf("%d:%d: was %s, %v; want %s, %v", i, tt.m49, r, err == nil, tt.code, tt.ok) + } + } + for i := 1; i <= 1000; i++ { + if r, err := EncodeM49(i); err == nil && r.M49() == 0 { + t.Errorf("%d has no error, but maps to undefined region", i) + } + } +} + +func TestParseRegion(t *testing.T) { + tests := []struct { + in string + out string + ok bool + }{ + {"001", "001", true}, + {"840", "US", true}, + {"899", "ZZ", false}, + {"USA", "US", true}, + {"US", "US", true}, + {"BC", "ZZ", false}, + {"C", "ZZ", false}, + {"CCCC", "ZZ", false}, + {"01", "ZZ", false}, + } + for i, tt := range tests { + r, err := ParseRegion(tt.in) + if r.String() != tt.out || err == nil != tt.ok { + t.Errorf("%d:%s: was %s, %v; want %s, %v", i, tt.in, r, err == nil, tt.out, tt.ok) + } + if err == nil { + if _, _, y := Raw.Make("und-" + tt.out).Raw(); r != y { + t.Errorf("%d:%s: tag was %s; want %s", i, tt.in, r, y) + } + } + } +} + +func TestIsCountry(t *testing.T) { + tests := []struct { + reg string + country bool + }{ + {"US", true}, + {"001", false}, + {"958", false}, + {"419", false}, + {"203", true}, + {"020", true}, + {"900", false}, + {"999", false}, + {"QO", false}, + {"EU", false}, + {"AA", false}, + {"XK", true}, + } + for i, tt := range tests { + reg, _ := getRegionID([]byte(tt.reg)) + r := Region{reg} + if r.IsCountry() != tt.country { + t.Errorf("%d: IsCountry(%s) was %v; want %v", i, tt.reg, r.IsCountry(), tt.country) + } + } +} + +func TestIsGroup(t *testing.T) { + tests := []struct { + reg string + group bool + }{ + {"US", false}, + {"001", true}, + {"958", false}, + {"419", true}, + {"203", false}, + {"020", false}, + {"900", false}, + {"999", false}, + {"QO", true}, + {"EU", true}, + {"AA", false}, + {"XK", false}, + } + for i, tt := range tests { + reg, _ := getRegionID([]byte(tt.reg)) + r := Region{reg} + if r.IsGroup() != tt.group { + t.Errorf("%d: IsGroup(%s) was %v; want %v", i, tt.reg, r.IsGroup(), tt.group) + } + } +} + +func TestContains(t *testing.T) { + tests := []struct { + enclosing, contained string + contains bool + }{ + // A region contains itself. + {"US", "US", true}, + {"001", "001", true}, + + // Direct containment. + {"001", "002", true}, + {"039", "XK", true}, + {"150", "XK", true}, + {"EU", "AT", true}, + {"QO", "AQ", true}, + + // Indirect containemnt. + {"001", "US", true}, + {"001", "419", true}, + {"001", "013", true}, + + // No containment. + {"US", "001", false}, + {"155", "EU", false}, + } + for i, tt := range tests { + enc, _ := getRegionID([]byte(tt.enclosing)) + con, _ := getRegionID([]byte(tt.contained)) + r := Region{enc} + if got := r.Contains(Region{con}); got != tt.contains { + t.Errorf("%d: %s.Contains(%s) was %v; want %v", i, tt.enclosing, tt.contained, got, tt.contains) + } + } +} + +func TestRegionCanonicalize(t *testing.T) { + for i, tt := range []struct{ in, out string }{ + {"UK", "GB"}, + {"TP", "TL"}, + {"QU", "EU"}, + {"SU", "SU"}, + {"VD", "VN"}, + {"DD", "DE"}, + } { + r := MustParseRegion(tt.in) + want := MustParseRegion(tt.out) + if got := r.Canonicalize(); got != want { + t.Errorf("%d: got %v; want %v", i, got, want) + } + } +} + +func TestRegionTLD(t *testing.T) { + for _, tt := range []struct { + in, out string + ok bool + }{ + {"EH", "EH", true}, + {"FR", "FR", true}, + {"TL", "TL", true}, + + // In ccTLD before in ISO. + {"GG", "GG", true}, + + // Non-standard assignment of ccTLD to ISO code. + {"GB", "UK", true}, + + // Exceptionally reserved in ISO and valid ccTLD. + {"UK", "UK", true}, + {"AC", "AC", true}, + {"EU", "EU", true}, + {"SU", "SU", true}, + + // Exceptionally reserved in ISO and invalid ccTLD. + {"CP", "ZZ", false}, + {"DG", "ZZ", false}, + {"EA", "ZZ", false}, + {"FX", "ZZ", false}, + {"IC", "ZZ", false}, + {"TA", "ZZ", false}, + + // Transitionally reserved in ISO (e.g. deprecated) but valid ccTLD as + // it is still being phased out. + {"AN", "AN", true}, + {"TP", "TP", true}, + + // Transitionally reserved in ISO (e.g. deprecated) and invalid ccTLD. + // Defined in package language as it has a mapping in CLDR. + {"BU", "ZZ", false}, + {"CS", "ZZ", false}, + {"NT", "ZZ", false}, + {"YU", "ZZ", false}, + {"ZR", "ZZ", false}, + // Not defined in package: SF. + + // Indeterminately reserved in ISO. + // Defined in package language as it has a legacy mapping in CLDR. + {"DY", "ZZ", false}, + {"RH", "ZZ", false}, + {"VD", "ZZ", false}, + // Not defined in package: EW, FL, JA, LF, PI, RA, RB, RC, RI, RL, RM, + // RN, RP, WG, WL, WV, and YV. + + // Not assigned in ISO, but legacy definitions in CLDR. + {"DD", "ZZ", false}, + {"YD", "ZZ", false}, + + // Normal mappings but somewhat special status in ccTLD. + {"BL", "BL", true}, + {"MF", "MF", true}, + {"BV", "BV", true}, + {"SJ", "SJ", true}, + + // Have values when normalized, but not as is. + {"QU", "ZZ", false}, + + // ISO Private Use. + {"AA", "ZZ", false}, + {"QM", "ZZ", false}, + {"QO", "ZZ", false}, + {"XA", "ZZ", false}, + {"XK", "ZZ", false}, // Sometimes used for Kosovo, but invalid ccTLD. + } { + if tt.in == "" { + continue + } + + r := MustParseRegion(tt.in) + var want Region + if tt.out != "ZZ" { + want = MustParseRegion(tt.out) + } + tld, err := r.TLD() + if got := err == nil; got != tt.ok { + t.Errorf("error(%v): got %v; want %v", r, got, tt.ok) + } + if tld != want { + t.Errorf("TLD(%v): got %v; want %v", r, tld, want) + } + } +} + +func TestCanonicalize(t *testing.T) { + // TODO: do a full test using CLDR data in a separate regression test. + tests := []struct { + in, out string + option CanonType + }{ + {"en-Latn", "en", SuppressScript}, + {"sr-Cyrl", "sr-Cyrl", SuppressScript}, + {"sh", "sr-Latn", Legacy}, + {"sh-HR", "sr-Latn-HR", Legacy}, + {"sh-Cyrl-HR", "sr-Cyrl-HR", Legacy}, + {"tl", "fil", Legacy}, + {"no", "no", Legacy}, + {"no", "nb", Legacy | CLDR}, + {"cmn", "cmn", Legacy}, + {"cmn", "zh", Macro}, + {"cmn-u-co-stroke", "zh-u-co-stroke", Macro}, + {"yue", "yue", Macro}, + {"nb", "no", Macro}, + {"nb", "nb", Macro | CLDR}, + {"no", "no", Macro}, + {"no", "no", Macro | CLDR}, + {"iw", "he", DeprecatedBase}, + {"iw", "he", Deprecated | CLDR}, + {"mo", "ro-MD", Deprecated}, // Adopted by CLDR as of version 25. + {"alb", "sq", Legacy}, // bibliographic + {"dut", "nl", Legacy}, // bibliographic + // As of CLDR 25, mo is no longer considered a legacy mapping. + {"mo", "mo", Legacy | CLDR}, + {"und-AN", "und-AN", Deprecated}, + {"und-YD", "und-YE", DeprecatedRegion}, + {"und-YD", "und-YD", DeprecatedBase}, + {"und-Qaai", "und-Zinh", DeprecatedScript}, + {"und-Qaai", "und-Qaai", DeprecatedBase}, + {"drh", "mn", All}, // drh -> khk -> mn + } + for i, tt := range tests { + in, _ := Raw.Parse(tt.in) + in, _ = tt.option.Canonicalize(in) + if in.String() != tt.out { + t.Errorf("%d:%s: was %s; want %s", i, tt.in, in.String(), tt.out) + } + if int(in.pVariant) > int(in.pExt) || int(in.pExt) > len(in.str) { + t.Errorf("%d:%s:offsets %d <= %d <= %d must be true", i, tt.in, in.pVariant, in.pExt, len(in.str)) + } + } + // Test idempotence. + for _, base := range Supported.BaseLanguages() { + tag, _ := Raw.Compose(base) + got, _ := All.Canonicalize(tag) + want, _ := All.Canonicalize(got) + if got != want { + t.Errorf("idem(%s): got %s; want %s", tag, got, want) + } + } +} + +func TestTypeForKey(t *testing.T) { + tests := []struct{ key, in, out string }{ + {"co", "en", ""}, + {"co", "en-u-abc", ""}, + {"co", "en-u-co-phonebk", "phonebk"}, + {"co", "en-u-co-phonebk-cu-aud", "phonebk"}, + {"co", "x-foo-u-co-phonebk", ""}, + {"nu", "en-u-co-phonebk-nu-arabic", "arabic"}, + {"kc", "cmn-u-co-stroke", ""}, + } + for _, tt := range tests { + if v := Make(tt.in).TypeForKey(tt.key); v != tt.out { + t.Errorf("%q[%q]: was %q; want %q", tt.in, tt.key, v, tt.out) + } + } +} + +func TestSetTypeForKey(t *testing.T) { + tests := []struct { + key, value, in, out string + err bool + }{ + // replace existing value + {"co", "pinyin", "en-u-co-phonebk", "en-u-co-pinyin", false}, + {"co", "pinyin", "en-u-co-phonebk-cu-xau", "en-u-co-pinyin-cu-xau", false}, + {"co", "pinyin", "en-u-co-phonebk-v-xx", "en-u-co-pinyin-v-xx", false}, + {"co", "pinyin", "en-u-co-phonebk-x-x", "en-u-co-pinyin-x-x", false}, + {"nu", "arabic", "en-u-co-phonebk-nu-vaai", "en-u-co-phonebk-nu-arabic", false}, + // add to existing -u extension + {"co", "pinyin", "en-u-ca-gregory", "en-u-ca-gregory-co-pinyin", false}, + {"co", "pinyin", "en-u-ca-gregory-nu-vaai", "en-u-ca-gregory-co-pinyin-nu-vaai", false}, + {"co", "pinyin", "en-u-ca-gregory-v-va", "en-u-ca-gregory-co-pinyin-v-va", false}, + {"co", "pinyin", "en-u-ca-gregory-x-a", "en-u-ca-gregory-co-pinyin-x-a", false}, + {"ca", "gregory", "en-u-co-pinyin", "en-u-ca-gregory-co-pinyin", false}, + // remove pair + {"co", "", "en-u-co-phonebk", "en", false}, + {"co", "", "en-u-ca-gregory-co-phonebk", "en-u-ca-gregory", false}, + {"co", "", "en-u-co-phonebk-nu-arabic", "en-u-nu-arabic", false}, + {"co", "", "en", "en", false}, + // add -u extension + {"co", "pinyin", "en", "en-u-co-pinyin", false}, + {"co", "pinyin", "und", "und-u-co-pinyin", false}, + {"co", "pinyin", "en-a-aaa", "en-a-aaa-u-co-pinyin", false}, + {"co", "pinyin", "en-x-aaa", "en-u-co-pinyin-x-aaa", false}, + {"co", "pinyin", "en-v-aa", "en-u-co-pinyin-v-aa", false}, + {"co", "pinyin", "en-a-aaa-x-x", "en-a-aaa-u-co-pinyin-x-x", false}, + {"co", "pinyin", "en-a-aaa-v-va", "en-a-aaa-u-co-pinyin-v-va", false}, + // error on invalid values + {"co", "pinyinxxx", "en", "en", true}, + {"co", "piny.n", "en", "en", true}, + {"co", "pinyinxxx", "en-a-aaa", "en-a-aaa", true}, + {"co", "pinyinxxx", "en-u-aaa", "en-u-aaa", true}, + {"co", "pinyinxxx", "en-u-aaa-co-pinyin", "en-u-aaa-co-pinyin", true}, + {"co", "pinyi.", "en-u-aaa-co-pinyin", "en-u-aaa-co-pinyin", true}, + {"col", "pinyin", "en", "en", true}, + {"co", "cu", "en", "en", true}, + // error when setting on a private use tag + {"co", "phonebook", "x-foo", "x-foo", true}, + } + for i, tt := range tests { + tag := Make(tt.in) + if v, err := tag.SetTypeForKey(tt.key, tt.value); v.String() != tt.out { + t.Errorf("%d:%q[%q]=%q: was %q; want %q", i, tt.in, tt.key, tt.value, v, tt.out) + } else if (err != nil) != tt.err { + t.Errorf("%d:%q[%q]=%q: error was %v; want %v", i, tt.in, tt.key, tt.value, err != nil, tt.err) + } else if val := v.TypeForKey(tt.key); err == nil && val != tt.value { + t.Errorf("%d:%q[%q]==%q: was %v; want %v", i, tt.out, tt.key, tt.value, val, tt.value) + } + if len(tag.String()) <= 3 { + // Simulate a tag for which the string has not been set. + tag.str, tag.pExt, tag.pVariant = "", 0, 0 + if tag, err := tag.SetTypeForKey(tt.key, tt.value); err == nil { + if val := tag.TypeForKey(tt.key); err == nil && val != tt.value { + t.Errorf("%d:%q[%q]==%q: was %v; want %v", i, tt.out, tt.key, tt.value, val, tt.value) + } + } + } + } +} + +func TestFindKeyAndType(t *testing.T) { + // out is either the matched type in case of a match or the original + // string up till the insertion point. + tests := []struct { + key string + hasExt bool + in, out string + }{ + // Don't search past a private use extension. + {"co", false, "en-x-foo-u-co-pinyin", "en"}, + {"co", false, "x-foo-u-co-pinyin", ""}, + {"co", false, "en-s-fff-x-foo", "en-s-fff"}, + // Insertion points in absence of -u extension. + {"cu", false, "en", ""}, // t.str is "" + {"cu", false, "en-v-va", "en"}, + {"cu", false, "en-a-va", "en-a-va"}, + {"cu", false, "en-a-va-v-va", "en-a-va"}, + {"cu", false, "en-x-a", "en"}, + // Tags with the -u extension. + {"co", true, "en-u-co-standard", "standard"}, + {"co", true, "yue-u-co-pinyin", "pinyin"}, + {"co", true, "en-u-co-abc", "abc"}, + {"co", true, "en-u-co-abc-def", "abc-def"}, + {"co", true, "en-u-co-abc-def-x-foo", "abc-def"}, + {"co", true, "en-u-co-standard-nu-arab", "standard"}, + {"co", true, "yue-u-co-pinyin-nu-arab", "pinyin"}, + // Insertion points. + {"cu", true, "en-u-co-standard", "en-u-co-standard"}, + {"cu", true, "yue-u-co-pinyin-x-foo", "yue-u-co-pinyin"}, + {"cu", true, "en-u-co-abc", "en-u-co-abc"}, + {"cu", true, "en-u-nu-arabic", "en-u"}, + {"cu", true, "en-u-co-abc-def-nu-arabic", "en-u-co-abc-def"}, + } + for i, tt := range tests { + start, end, hasExt := Make(tt.in).findTypeForKey(tt.key) + if start != end { + res := tt.in[start:end] + if res != tt.out { + t.Errorf("%d:%s: was %q; want %q", i, tt.in, res, tt.out) + } + } else { + if hasExt != tt.hasExt { + t.Errorf("%d:%s: hasExt was %v; want %v", i, tt.in, hasExt, tt.hasExt) + continue + } + if tt.in[:start] != tt.out { + t.Errorf("%d:%s: insertion point was %q; want %q", i, tt.in, tt.in[:start], tt.out) + } + } + } +} + +func TestParent(t *testing.T) { + tests := []struct{ in, out string }{ + // Strip variants and extensions first + {"de-u-co-phonebk", "de"}, + {"de-1994", "de"}, + {"de-Latn-1994", "de"}, // remove superfluous script. + + // Ensure the canonical Tag for an entry is in the chain for base-script + // pairs. + {"zh-Hans", "zh"}, + + // Skip the script if it is the maximized version. CLDR files for the + // skipped tag are always empty. + {"zh-Hans-TW", "zh"}, + {"zh-Hans-CN", "zh"}, + + // Insert the script if the maximized script is not the same as the + // maximized script of the base language. + {"zh-TW", "zh-Hant"}, + {"zh-HK", "zh-Hant"}, + {"zh-Hant-TW", "zh-Hant"}, + {"zh-Hant-HK", "zh-Hant"}, + + // Non-default script skips to und. + // CLDR + {"az-Cyrl", "und"}, + {"bs-Cyrl", "und"}, + {"en-Dsrt", "und"}, + {"ha-Arab", "und"}, + {"mn-Mong", "und"}, + {"pa-Arab", "und"}, + {"shi-Latn", "und"}, + {"sr-Latn", "und"}, + {"uz-Arab", "und"}, + {"uz-Cyrl", "und"}, + {"vai-Latn", "und"}, + {"zh-Hant", "und"}, + // extra + {"nl-Cyrl", "und"}, + + // World english inherits from en-001. + {"en-150", "en-001"}, + {"en-AU", "en-001"}, + {"en-BE", "en-001"}, + {"en-GG", "en-001"}, + {"en-GI", "en-001"}, + {"en-HK", "en-001"}, + {"en-IE", "en-001"}, + {"en-IM", "en-001"}, + {"en-IN", "en-001"}, + {"en-JE", "en-001"}, + {"en-MT", "en-001"}, + {"en-NZ", "en-001"}, + {"en-PK", "en-001"}, + {"en-SG", "en-001"}, + + // Spanish in Latin-American countries have es-419 as parent. + {"es-AR", "es-419"}, + {"es-BO", "es-419"}, + {"es-CL", "es-419"}, + {"es-CO", "es-419"}, + {"es-CR", "es-419"}, + {"es-CU", "es-419"}, + {"es-DO", "es-419"}, + {"es-EC", "es-419"}, + {"es-GT", "es-419"}, + {"es-HN", "es-419"}, + {"es-MX", "es-419"}, + {"es-NI", "es-419"}, + {"es-PA", "es-419"}, + {"es-PE", "es-419"}, + {"es-PR", "es-419"}, + {"es-PY", "es-419"}, + {"es-SV", "es-419"}, + {"es-US", "es-419"}, + {"es-UY", "es-419"}, + {"es-VE", "es-419"}, + // exceptions (according to CLDR) + {"es-CW", "es"}, + + // Inherit from pt-PT, instead of pt for these countries. + {"pt-AO", "pt-PT"}, + {"pt-CV", "pt-PT"}, + {"pt-GW", "pt-PT"}, + {"pt-MO", "pt-PT"}, + {"pt-MZ", "pt-PT"}, + {"pt-ST", "pt-PT"}, + {"pt-TL", "pt-PT"}, + } + for _, tt := range tests { + tag := Raw.MustParse(tt.in) + if p := Raw.MustParse(tt.out); p != tag.Parent() { + t.Errorf("%s: was %v; want %v", tt.in, tag.Parent(), p) + } + } +} + +var ( + // Tags without error that don't need to be changed. + benchBasic = []string{ + "en", + "en-Latn", + "en-GB", + "za", + "zh-Hant", + "zh", + "zh-HK", + "ar-MK", + "en-CA", + "fr-CA", + "fr-CH", + "fr", + "lv", + "he-IT", + "tlh", + "ja", + "ja-Jpan", + "ja-Jpan-JP", + "de-1996", + "de-CH", + "sr", + "sr-Latn", + } + // Tags with extensions, not changes required. + benchExt = []string{ + "x-a-b-c-d", + "x-aa-bbbb-cccccccc-d", + "en-x_cc-b-bbb-a-aaa", + "en-c_cc-b-bbb-a-aaa-x-x", + "en-u-co-phonebk", + "en-Cyrl-u-co-phonebk", + "en-US-u-co-phonebk-cu-xau", + "en-nedix-u-co-phonebk", + "en-t-t0-abcd", + "en-t-nl-latn", + "en-t-t0-abcd-x-a", + } + // Change, but not memory allocation required. + benchSimpleChange = []string{ + "EN", + "i-klingon", + "en-latn", + "zh-cmn-Hans-CN", + "iw-NL", + } + // Change and memory allocation required. + benchChangeAlloc = []string{ + "en-c_cc-b-bbb-a-aaa", + "en-u-cu-xua-co-phonebk", + "en-u-cu-xua-co-phonebk-a-cd", + "en-u-def-abc-cu-xua-co-phonebk", + "en-t-en-Cyrl-NL-1994", + "en-t-en-Cyrl-NL-1994-t0-abc-def", + } + // Tags that result in errors. + benchErr = []string{ + // IllFormed + "x_A.-B-C_D", + "en-u-cu-co-phonebk", + "en-u-cu-xau-co", + "en-t-nl-abcd", + // Invalid + "xx", + "nl-Uuuu", + "nl-QB", + } + benchChange = append(benchSimpleChange, benchChangeAlloc...) + benchAll = append(append(append(benchBasic, benchExt...), benchChange...), benchErr...) +) + +func doParse(b *testing.B, tag []string) { + for i := 0; i < b.N; i++ { + // Use the modulo instead of looping over all tags so that we get a somewhat + // meaningful ns/op. + Parse(tag[i%len(tag)]) + } +} + +func BenchmarkParse(b *testing.B) { + doParse(b, benchAll) +} + +func BenchmarkParseBasic(b *testing.B) { + doParse(b, benchBasic) +} + +func BenchmarkParseError(b *testing.B) { + doParse(b, benchErr) +} + +func BenchmarkParseSimpleChange(b *testing.B) { + doParse(b, benchSimpleChange) +} + +func BenchmarkParseChangeAlloc(b *testing.B) { + doParse(b, benchChangeAlloc) +} diff --git a/vendor/golang.org/x/text/language/lookup.go b/vendor/golang.org/x/text/language/lookup.go new file mode 100644 index 0000000..1d80ac3 --- /dev/null +++ b/vendor/golang.org/x/text/language/lookup.go @@ -0,0 +1,396 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import ( + "bytes" + "fmt" + "sort" + "strconv" + + "golang.org/x/text/internal/tag" +) + +// findIndex tries to find the given tag in idx and returns a standardized error +// if it could not be found. +func findIndex(idx tag.Index, key []byte, form string) (index int, err error) { + if !tag.FixCase(form, key) { + return 0, errSyntax + } + i := idx.Index(key) + if i == -1 { + return 0, mkErrInvalid(key) + } + return i, nil +} + +func searchUint(imap []uint16, key uint16) int { + return sort.Search(len(imap), func(i int) bool { + return imap[i] >= key + }) +} + +type langID uint16 + +// getLangID returns the langID of s if s is a canonical subtag +// or langUnknown if s is not a canonical subtag. +func getLangID(s []byte) (langID, error) { + if len(s) == 2 { + return getLangISO2(s) + } + return getLangISO3(s) +} + +// mapLang returns the mapped langID of id according to mapping m. +func normLang(id langID) (langID, langAliasType) { + k := sort.Search(len(langAliasMap), func(i int) bool { + return langAliasMap[i].from >= uint16(id) + }) + if k < len(langAliasMap) && langAliasMap[k].from == uint16(id) { + return langID(langAliasMap[k].to), langAliasTypes[k] + } + return id, langAliasTypeUnknown +} + +// getLangISO2 returns the langID for the given 2-letter ISO language code +// or unknownLang if this does not exist. +func getLangISO2(s []byte) (langID, error) { + if !tag.FixCase("zz", s) { + return 0, errSyntax + } + if i := lang.Index(s); i != -1 && lang.Elem(i)[3] != 0 { + return langID(i), nil + } + return 0, mkErrInvalid(s) +} + +const base = 'z' - 'a' + 1 + +func strToInt(s []byte) uint { + v := uint(0) + for i := 0; i < len(s); i++ { + v *= base + v += uint(s[i] - 'a') + } + return v +} + +// converts the given integer to the original ASCII string passed to strToInt. +// len(s) must match the number of characters obtained. +func intToStr(v uint, s []byte) { + for i := len(s) - 1; i >= 0; i-- { + s[i] = byte(v%base) + 'a' + v /= base + } +} + +// getLangISO3 returns the langID for the given 3-letter ISO language code +// or unknownLang if this does not exist. +func getLangISO3(s []byte) (langID, error) { + if tag.FixCase("und", s) { + // first try to match canonical 3-letter entries + for i := lang.Index(s[:2]); i != -1; i = lang.Next(s[:2], i) { + if e := lang.Elem(i); e[3] == 0 && e[2] == s[2] { + // We treat "und" as special and always translate it to "unspecified". + // Note that ZZ and Zzzz are private use and are not treated as + // unspecified by default. + id := langID(i) + if id == nonCanonicalUnd { + return 0, nil + } + return id, nil + } + } + if i := altLangISO3.Index(s); i != -1 { + return langID(altLangIndex[altLangISO3.Elem(i)[3]]), nil + } + n := strToInt(s) + if langNoIndex[n/8]&(1<<(n%8)) != 0 { + return langID(n) + langNoIndexOffset, nil + } + // Check for non-canonical uses of ISO3. + for i := lang.Index(s[:1]); i != -1; i = lang.Next(s[:1], i) { + if e := lang.Elem(i); e[2] == s[1] && e[3] == s[2] { + return langID(i), nil + } + } + return 0, mkErrInvalid(s) + } + return 0, errSyntax +} + +// stringToBuf writes the string to b and returns the number of bytes +// written. cap(b) must be >= 3. +func (id langID) stringToBuf(b []byte) int { + if id >= langNoIndexOffset { + intToStr(uint(id)-langNoIndexOffset, b[:3]) + return 3 + } else if id == 0 { + return copy(b, "und") + } + l := lang[id<<2:] + if l[3] == 0 { + return copy(b, l[:3]) + } + return copy(b, l[:2]) +} + +// String returns the BCP 47 representation of the langID. +// Use b as variable name, instead of id, to ensure the variable +// used is consistent with that of Base in which this type is embedded. +func (b langID) String() string { + if b == 0 { + return "und" + } else if b >= langNoIndexOffset { + b -= langNoIndexOffset + buf := [3]byte{} + intToStr(uint(b), buf[:]) + return string(buf[:]) + } + l := lang.Elem(int(b)) + if l[3] == 0 { + return l[:3] + } + return l[:2] +} + +// ISO3 returns the ISO 639-3 language code. +func (b langID) ISO3() string { + if b == 0 || b >= langNoIndexOffset { + return b.String() + } + l := lang.Elem(int(b)) + if l[3] == 0 { + return l[:3] + } else if l[2] == 0 { + return altLangISO3.Elem(int(l[3]))[:3] + } + // This allocation will only happen for 3-letter ISO codes + // that are non-canonical BCP 47 language identifiers. + return l[0:1] + l[2:4] +} + +// IsPrivateUse reports whether this language code is reserved for private use. +func (b langID) IsPrivateUse() bool { + return langPrivateStart <= b && b <= langPrivateEnd +} + +type regionID uint16 + +// getRegionID returns the region id for s if s is a valid 2-letter region code +// or unknownRegion. +func getRegionID(s []byte) (regionID, error) { + if len(s) == 3 { + if isAlpha(s[0]) { + return getRegionISO3(s) + } + if i, err := strconv.ParseUint(string(s), 10, 10); err == nil { + return getRegionM49(int(i)) + } + } + return getRegionISO2(s) +} + +// getRegionISO2 returns the regionID for the given 2-letter ISO country code +// or unknownRegion if this does not exist. +func getRegionISO2(s []byte) (regionID, error) { + i, err := findIndex(regionISO, s, "ZZ") + if err != nil { + return 0, err + } + return regionID(i) + isoRegionOffset, nil +} + +// getRegionISO3 returns the regionID for the given 3-letter ISO country code +// or unknownRegion if this does not exist. +func getRegionISO3(s []byte) (regionID, error) { + if tag.FixCase("ZZZ", s) { + for i := regionISO.Index(s[:1]); i != -1; i = regionISO.Next(s[:1], i) { + if e := regionISO.Elem(i); e[2] == s[1] && e[3] == s[2] { + return regionID(i) + isoRegionOffset, nil + } + } + for i := 0; i < len(altRegionISO3); i += 3 { + if tag.Compare(altRegionISO3[i:i+3], s) == 0 { + return regionID(altRegionIDs[i/3]), nil + } + } + return 0, mkErrInvalid(s) + } + return 0, errSyntax +} + +func getRegionM49(n int) (regionID, error) { + if 0 < n && n <= 999 { + const ( + searchBits = 7 + regionBits = 9 + regionMask = 1<<regionBits - 1 + ) + idx := n >> searchBits + buf := fromM49[m49Index[idx]:m49Index[idx+1]] + val := uint16(n) << regionBits // we rely on bits shifting out + i := sort.Search(len(buf), func(i int) bool { + return buf[i] >= val + }) + if r := fromM49[int(m49Index[idx])+i]; r&^regionMask == val { + return regionID(r & regionMask), nil + } + } + var e ValueError + fmt.Fprint(bytes.NewBuffer([]byte(e.v[:])), n) + return 0, e +} + +// normRegion returns a region if r is deprecated or 0 otherwise. +// TODO: consider supporting BYS (-> BLR), CSK (-> 200 or CZ), PHI (-> PHL) and AFI (-> DJ). +// TODO: consider mapping split up regions to new most populous one (like CLDR). +func normRegion(r regionID) regionID { + m := regionOldMap + k := sort.Search(len(m), func(i int) bool { + return m[i].from >= uint16(r) + }) + if k < len(m) && m[k].from == uint16(r) { + return regionID(m[k].to) + } + return 0 +} + +const ( + iso3166UserAssigned = 1 << iota + ccTLD + bcp47Region +) + +func (r regionID) typ() byte { + return regionTypes[r] +} + +// String returns the BCP 47 representation for the region. +// It returns "ZZ" for an unspecified region. +func (r regionID) String() string { + if r < isoRegionOffset { + if r == 0 { + return "ZZ" + } + return fmt.Sprintf("%03d", r.M49()) + } + r -= isoRegionOffset + return regionISO.Elem(int(r))[:2] +} + +// ISO3 returns the 3-letter ISO code of r. +// Note that not all regions have a 3-letter ISO code. +// In such cases this method returns "ZZZ". +func (r regionID) ISO3() string { + if r < isoRegionOffset { + return "ZZZ" + } + r -= isoRegionOffset + reg := regionISO.Elem(int(r)) + switch reg[2] { + case 0: + return altRegionISO3[reg[3]:][:3] + case ' ': + return "ZZZ" + } + return reg[0:1] + reg[2:4] +} + +// M49 returns the UN M.49 encoding of r, or 0 if this encoding +// is not defined for r. +func (r regionID) M49() int { + return int(m49[r]) +} + +// IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This +// may include private-use tags that are assigned by CLDR and used in this +// implementation. So IsPrivateUse and IsCountry can be simultaneously true. +func (r regionID) IsPrivateUse() bool { + return r.typ()&iso3166UserAssigned != 0 +} + +type scriptID uint8 + +// getScriptID returns the script id for string s. It assumes that s +// is of the format [A-Z][a-z]{3}. +func getScriptID(idx tag.Index, s []byte) (scriptID, error) { + i, err := findIndex(idx, s, "Zzzz") + return scriptID(i), err +} + +// String returns the script code in title case. +// It returns "Zzzz" for an unspecified script. +func (s scriptID) String() string { + if s == 0 { + return "Zzzz" + } + return script.Elem(int(s)) +} + +// IsPrivateUse reports whether this script code is reserved for private use. +func (s scriptID) IsPrivateUse() bool { + return _Qaaa <= s && s <= _Qabx +} + +const ( + maxAltTaglen = len("en-US-POSIX") + maxLen = maxAltTaglen +) + +var ( + // grandfatheredMap holds a mapping from legacy and grandfathered tags to + // their base language or index to more elaborate tag. + grandfatheredMap = map[[maxLen]byte]int16{ + [maxLen]byte{'a', 'r', 't', '-', 'l', 'o', 'j', 'b', 'a', 'n'}: _jbo, // art-lojban + [maxLen]byte{'i', '-', 'a', 'm', 'i'}: _ami, // i-ami + [maxLen]byte{'i', '-', 'b', 'n', 'n'}: _bnn, // i-bnn + [maxLen]byte{'i', '-', 'h', 'a', 'k'}: _hak, // i-hak + [maxLen]byte{'i', '-', 'k', 'l', 'i', 'n', 'g', 'o', 'n'}: _tlh, // i-klingon + [maxLen]byte{'i', '-', 'l', 'u', 'x'}: _lb, // i-lux + [maxLen]byte{'i', '-', 'n', 'a', 'v', 'a', 'j', 'o'}: _nv, // i-navajo + [maxLen]byte{'i', '-', 'p', 'w', 'n'}: _pwn, // i-pwn + [maxLen]byte{'i', '-', 't', 'a', 'o'}: _tao, // i-tao + [maxLen]byte{'i', '-', 't', 'a', 'y'}: _tay, // i-tay + [maxLen]byte{'i', '-', 't', 's', 'u'}: _tsu, // i-tsu + [maxLen]byte{'n', 'o', '-', 'b', 'o', 'k'}: _nb, // no-bok + [maxLen]byte{'n', 'o', '-', 'n', 'y', 'n'}: _nn, // no-nyn + [maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'f', 'r'}: _sfb, // sgn-BE-FR + [maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'n', 'l'}: _vgt, // sgn-BE-NL + [maxLen]byte{'s', 'g', 'n', '-', 'c', 'h', '-', 'd', 'e'}: _sgg, // sgn-CH-DE + [maxLen]byte{'z', 'h', '-', 'g', 'u', 'o', 'y', 'u'}: _cmn, // zh-guoyu + [maxLen]byte{'z', 'h', '-', 'h', 'a', 'k', 'k', 'a'}: _hak, // zh-hakka + [maxLen]byte{'z', 'h', '-', 'm', 'i', 'n', '-', 'n', 'a', 'n'}: _nan, // zh-min-nan + [maxLen]byte{'z', 'h', '-', 'x', 'i', 'a', 'n', 'g'}: _hsn, // zh-xiang + + // Grandfathered tags with no modern replacement will be converted as + // follows: + [maxLen]byte{'c', 'e', 'l', '-', 'g', 'a', 'u', 'l', 'i', 's', 'h'}: -1, // cel-gaulish + [maxLen]byte{'e', 'n', '-', 'g', 'b', '-', 'o', 'e', 'd'}: -2, // en-GB-oed + [maxLen]byte{'i', '-', 'd', 'e', 'f', 'a', 'u', 'l', 't'}: -3, // i-default + [maxLen]byte{'i', '-', 'e', 'n', 'o', 'c', 'h', 'i', 'a', 'n'}: -4, // i-enochian + [maxLen]byte{'i', '-', 'm', 'i', 'n', 'g', 'o'}: -5, // i-mingo + [maxLen]byte{'z', 'h', '-', 'm', 'i', 'n'}: -6, // zh-min + + // CLDR-specific tag. + [maxLen]byte{'r', 'o', 'o', 't'}: 0, // root + [maxLen]byte{'e', 'n', '-', 'u', 's', '-', 'p', 'o', 's', 'i', 'x'}: -7, // en_US_POSIX" + } + + altTagIndex = [...]uint8{0, 17, 31, 45, 61, 74, 86, 102} + + altTags = "xtg-x-cel-gaulishen-GB-oxendicten-x-i-defaultund-x-i-enochiansee-x-i-mingonan-x-zh-minen-US-u-va-posix" +) + +func grandfathered(s [maxAltTaglen]byte) (t Tag, ok bool) { + if v, ok := grandfatheredMap[s]; ok { + if v < 0 { + return Make(altTags[altTagIndex[-v-1]:altTagIndex[-v]]), true + } + t.lang = langID(v) + return t, true + } + return t, false +} diff --git a/vendor/golang.org/x/text/language/lookup_test.go b/vendor/golang.org/x/text/language/lookup_test.go new file mode 100644 index 0000000..9833830 --- /dev/null +++ b/vendor/golang.org/x/text/language/lookup_test.go @@ -0,0 +1,457 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import ( + "testing" + + "golang.org/x/text/internal/tag" +) + +func b(s string) []byte { + return []byte(s) +} + +func TestLangID(t *testing.T) { + tests := []struct { + id, bcp47, iso3, norm string + err error + }{ + {id: "", bcp47: "und", iso3: "und", err: errSyntax}, + {id: " ", bcp47: "und", iso3: "und", err: errSyntax}, + {id: " ", bcp47: "und", iso3: "und", err: errSyntax}, + {id: " ", bcp47: "und", iso3: "und", err: errSyntax}, + {id: "xxx", bcp47: "und", iso3: "und", err: mkErrInvalid([]byte("xxx"))}, + {id: "und", bcp47: "und", iso3: "und"}, + {id: "aju", bcp47: "aju", iso3: "aju", norm: "jrb"}, + {id: "jrb", bcp47: "jrb", iso3: "jrb"}, + {id: "es", bcp47: "es", iso3: "spa"}, + {id: "spa", bcp47: "es", iso3: "spa"}, + {id: "ji", bcp47: "ji", iso3: "yid-", norm: "yi"}, + {id: "jw", bcp47: "jw", iso3: "jav-", norm: "jv"}, + {id: "ar", bcp47: "ar", iso3: "ara"}, + {id: "kw", bcp47: "kw", iso3: "cor"}, + {id: "arb", bcp47: "arb", iso3: "arb", norm: "ar"}, + {id: "ar", bcp47: "ar", iso3: "ara"}, + {id: "kur", bcp47: "ku", iso3: "kur"}, + {id: "nl", bcp47: "nl", iso3: "nld"}, + {id: "NL", bcp47: "nl", iso3: "nld"}, + {id: "gsw", bcp47: "gsw", iso3: "gsw"}, + {id: "gSW", bcp47: "gsw", iso3: "gsw"}, + {id: "und", bcp47: "und", iso3: "und"}, + {id: "sh", bcp47: "sh", iso3: "hbs", norm: "sr"}, + {id: "hbs", bcp47: "sh", iso3: "hbs", norm: "sr"}, + {id: "no", bcp47: "no", iso3: "nor", norm: "no"}, + {id: "nor", bcp47: "no", iso3: "nor", norm: "no"}, + {id: "cmn", bcp47: "cmn", iso3: "cmn", norm: "zh"}, + } + for i, tt := range tests { + want, err := getLangID(b(tt.id)) + if err != tt.err { + t.Errorf("%d:err(%s): found %q; want %q", i, tt.id, err, tt.err) + } + if err != nil { + continue + } + if id, _ := getLangISO2(b(tt.bcp47)); len(tt.bcp47) == 2 && want != id { + t.Errorf("%d:getISO2(%s): found %v; want %v", i, tt.bcp47, id, want) + } + if len(tt.iso3) == 3 { + if id, _ := getLangISO3(b(tt.iso3)); want != id { + t.Errorf("%d:getISO3(%s): found %q; want %q", i, tt.iso3, id, want) + } + if id, _ := getLangID(b(tt.iso3)); want != id { + t.Errorf("%d:getID3(%s): found %v; want %v", i, tt.iso3, id, want) + } + } + norm := want + if tt.norm != "" { + norm, _ = getLangID(b(tt.norm)) + } + id, _ := normLang(want) + if id != norm { + t.Errorf("%d:norm(%s): found %v; want %v", i, tt.id, id, norm) + } + if id := want.String(); tt.bcp47 != id { + t.Errorf("%d:String(): found %s; want %s", i, id, tt.bcp47) + } + if id := want.ISO3(); tt.iso3[:3] != id { + t.Errorf("%d:iso3(): found %s; want %s", i, id, tt.iso3[:3]) + } + } +} + +func TestGrandfathered(t *testing.T) { + for _, tt := range []struct{ in, out string }{ + {"art-lojban", "jbo"}, + {"i-ami", "ami"}, + {"i-bnn", "bnn"}, + {"i-hak", "hak"}, + {"i-klingon", "tlh"}, + {"i-lux", "lb"}, + {"i-navajo", "nv"}, + {"i-pwn", "pwn"}, + {"i-tao", "tao"}, + {"i-tay", "tay"}, + {"i-tsu", "tsu"}, + {"no-bok", "nb"}, + {"no-nyn", "nn"}, + {"sgn-BE-FR", "sfb"}, + {"sgn-BE-NL", "vgt"}, + {"sgn-CH-DE", "sgg"}, + {"sgn-ch-de", "sgg"}, + {"zh-guoyu", "cmn"}, + {"zh-hakka", "hak"}, + {"zh-min-nan", "nan"}, + {"zh-xiang", "hsn"}, + + // Grandfathered tags with no modern replacement will be converted as follows: + {"cel-gaulish", "xtg-x-cel-gaulish"}, + {"en-GB-oed", "en-GB-oxendict"}, + {"en-gb-oed", "en-GB-oxendict"}, + {"i-default", "en-x-i-default"}, + {"i-enochian", "und-x-i-enochian"}, + {"i-mingo", "see-x-i-mingo"}, + {"zh-min", "nan-x-zh-min"}, + + {"root", "und"}, + {"en_US_POSIX", "en-US-u-va-posix"}, + {"en_us_posix", "en-US-u-va-posix"}, + {"en-us-posix", "en-US-u-va-posix"}, + } { + got := Raw.Make(tt.in) + want := Raw.MustParse(tt.out) + if got != want { + t.Errorf("%s: got %q; want %q", tt.in, got, want) + } + } +} + +func TestRegionID(t *testing.T) { + tests := []struct { + in, out string + }{ + {"_ ", ""}, + {"_000", ""}, + {"419", "419"}, + {"AA", "AA"}, + {"ATF", "TF"}, + {"HV", "HV"}, + {"CT", "CT"}, + {"DY", "DY"}, + {"IC", "IC"}, + {"FQ", "FQ"}, + {"JT", "JT"}, + {"ZZ", "ZZ"}, + {"EU", "EU"}, + {"QO", "QO"}, + {"FX", "FX"}, + } + for i, tt := range tests { + if tt.in[0] == '_' { + id := tt.in[1:] + if _, err := getRegionID(b(id)); err == nil { + t.Errorf("%d:err(%s): found nil; want error", i, id) + } + continue + } + want, _ := getRegionID(b(tt.in)) + if s := want.String(); s != tt.out { + t.Errorf("%d:%s: found %q; want %q", i, tt.in, s, tt.out) + } + if len(tt.in) == 2 { + want, _ := getRegionISO2(b(tt.in)) + if s := want.String(); s != tt.out { + t.Errorf("%d:getISO2(%s): found %q; want %q", i, tt.in, s, tt.out) + } + } + } +} + +func TestRegionType(t *testing.T) { + for _, tt := range []struct { + r string + t byte + }{ + {"NL", bcp47Region | ccTLD}, + {"EU", bcp47Region | ccTLD}, // exceptionally reserved + {"AN", bcp47Region | ccTLD}, // transitionally reserved + + {"DD", bcp47Region}, // deleted in ISO, deprecated in BCP 47 + {"NT", bcp47Region}, // transitionally reserved, deprecated in BCP 47 + + {"XA", iso3166UserAssigned | bcp47Region}, + {"ZZ", iso3166UserAssigned | bcp47Region}, + {"AA", iso3166UserAssigned | bcp47Region}, + {"QO", iso3166UserAssigned | bcp47Region}, + {"QM", iso3166UserAssigned | bcp47Region}, + {"XK", iso3166UserAssigned | bcp47Region}, + + {"CT", 0}, // deleted in ISO, not in BCP 47, canonicalized in CLDR + } { + r := MustParseRegion(tt.r) + if tp := r.typ(); tp != tt.t { + t.Errorf("Type(%s): got %x; want %x", tt.r, tp, tt.t) + } + } +} + +func TestRegionISO3(t *testing.T) { + tests := []struct { + from, iso3, to string + }{ + {" ", "ZZZ", "ZZ"}, + {"000", "ZZZ", "ZZ"}, + {"AA", "AAA", ""}, + {"CT", "CTE", ""}, + {"DY", "DHY", ""}, + {"EU", "QUU", ""}, + {"HV", "HVO", ""}, + {"IC", "ZZZ", "ZZ"}, + {"JT", "JTN", ""}, + {"PZ", "PCZ", ""}, + {"QU", "QUU", "EU"}, + {"QO", "QOO", ""}, + {"YD", "YMD", ""}, + {"FQ", "ATF", "TF"}, + {"TF", "ATF", ""}, + {"FX", "FXX", ""}, + {"ZZ", "ZZZ", ""}, + {"419", "ZZZ", "ZZ"}, + } + for _, tt := range tests { + r, _ := getRegionID(b(tt.from)) + if s := r.ISO3(); s != tt.iso3 { + t.Errorf("iso3(%q): found %q; want %q", tt.from, s, tt.iso3) + } + if tt.iso3 == "" { + continue + } + want := tt.to + if tt.to == "" { + want = tt.from + } + r, _ = getRegionID(b(want)) + if id, _ := getRegionISO3(b(tt.iso3)); id != r { + t.Errorf("%s: found %q; want %q", tt.iso3, id, want) + } + } +} + +func TestRegionM49(t *testing.T) { + fromTests := []struct { + m49 int + id string + }{ + {0, ""}, + {-1, ""}, + {1000, ""}, + {10000, ""}, + + {001, "001"}, + {104, "MM"}, + {180, "CD"}, + {230, "ET"}, + {231, "ET"}, + {249, "FX"}, + {250, "FR"}, + {276, "DE"}, + {278, "DD"}, + {280, "DE"}, + {419, "419"}, + {626, "TL"}, + {736, "SD"}, + {840, "US"}, + {854, "BF"}, + {891, "CS"}, + {899, ""}, + {958, "AA"}, + {966, "QT"}, + {967, "EU"}, + {999, "ZZ"}, + } + for _, tt := range fromTests { + id, err := getRegionM49(tt.m49) + if want, have := err != nil, tt.id == ""; want != have { + t.Errorf("error(%d): have %v; want %v", tt.m49, have, want) + continue + } + r, _ := getRegionID(b(tt.id)) + if r != id { + t.Errorf("region(%d): have %s; want %s", tt.m49, id, r) + } + } + + toTests := []struct { + m49 int + id string + }{ + {0, "000"}, + {0, "IC"}, // Some codes don't have an ID + + {001, "001"}, + {104, "MM"}, + {104, "BU"}, + {180, "CD"}, + {180, "ZR"}, + {231, "ET"}, + {250, "FR"}, + {249, "FX"}, + {276, "DE"}, + {278, "DD"}, + {419, "419"}, + {626, "TL"}, + {626, "TP"}, + {729, "SD"}, + {826, "GB"}, + {840, "US"}, + {854, "BF"}, + {891, "YU"}, + {891, "CS"}, + {958, "AA"}, + {966, "QT"}, + {967, "EU"}, + {967, "QU"}, + {999, "ZZ"}, + // For codes that don't have an M49 code use the replacement value, + // if available. + {854, "HV"}, // maps to Burkino Faso + } + for _, tt := range toTests { + r, _ := getRegionID(b(tt.id)) + if r.M49() != tt.m49 { + t.Errorf("m49(%q): have %d; want %d", tt.id, r.M49(), tt.m49) + } + } +} + +func TestRegionDeprecation(t *testing.T) { + tests := []struct{ in, out string }{ + {"BU", "MM"}, + {"BUR", "MM"}, + {"CT", "KI"}, + {"DD", "DE"}, + {"DDR", "DE"}, + {"DY", "BJ"}, + {"FX", "FR"}, + {"HV", "BF"}, + {"JT", "UM"}, + {"MI", "UM"}, + {"NH", "VU"}, + {"NQ", "AQ"}, + {"PU", "UM"}, + {"PZ", "PA"}, + {"QU", "EU"}, + {"RH", "ZW"}, + {"TP", "TL"}, + {"UK", "GB"}, + {"VD", "VN"}, + {"WK", "UM"}, + {"YD", "YE"}, + {"NL", "NL"}, + } + for _, tt := range tests { + rIn, _ := getRegionID([]byte(tt.in)) + rOut, _ := getRegionISO2([]byte(tt.out)) + r := normRegion(rIn) + if rOut == rIn && r != 0 { + t.Errorf("%s: was %q; want %q", tt.in, r, tt.in) + } + if rOut != rIn && r != rOut { + t.Errorf("%s: was %q; want %q", tt.in, r, tt.out) + } + + } +} + +func TestGetScriptID(t *testing.T) { + idx := tag.Index("0000BbbbDdddEeeeZzzz\xff\xff\xff\xff") + tests := []struct { + in string + out scriptID + }{ + {" ", 0}, + {" ", 0}, + {" ", 0}, + {"", 0}, + {"Aaaa", 0}, + {"Bbbb", 1}, + {"Dddd", 2}, + {"dddd", 2}, + {"dDDD", 2}, + {"Eeee", 3}, + {"Zzzz", 4}, + } + for i, tt := range tests { + if id, err := getScriptID(idx, b(tt.in)); id != tt.out { + t.Errorf("%d:%s: found %d; want %d", i, tt.in, id, tt.out) + } else if id == 0 && err == nil { + t.Errorf("%d:%s: no error; expected one", i, tt.in) + } + } +} + +func TestIsPrivateUse(t *testing.T) { + type test struct { + s string + private bool + } + tests := []test{ + {"en", false}, + {"und", false}, + {"pzn", false}, + {"qaa", true}, + {"qtz", true}, + {"qua", false}, + } + for i, tt := range tests { + x, _ := getLangID([]byte(tt.s)) + if b := x.IsPrivateUse(); b != tt.private { + t.Errorf("%d: langID.IsPrivateUse(%s) was %v; want %v", i, tt.s, b, tt.private) + } + } + tests = []test{ + {"001", false}, + {"419", false}, + {"899", false}, + {"900", false}, + {"957", false}, + {"958", true}, + {"AA", true}, + {"AC", false}, + {"EU", false}, // CLDR grouping, exceptionally reserved in ISO. + {"QU", true}, // Canonicalizes to EU, User-assigned in ISO. + {"QO", true}, // CLDR grouping, User-assigned in ISO. + {"QA", false}, + {"QM", true}, + {"QZ", true}, + {"XA", true}, + {"XK", true}, // Assigned to Kosovo in CLDR, User-assigned in ISO. + {"XZ", true}, + {"ZW", false}, + {"ZZ", true}, + } + for i, tt := range tests { + x, _ := getRegionID([]byte(tt.s)) + if b := x.IsPrivateUse(); b != tt.private { + t.Errorf("%d: regionID.IsPrivateUse(%s) was %v; want %v", i, tt.s, b, tt.private) + } + } + tests = []test{ + {"Latn", false}, + {"Laaa", false}, // invalid + {"Qaaa", true}, + {"Qabx", true}, + {"Qaby", false}, + {"Zyyy", false}, + {"Zzzz", false}, + } + for i, tt := range tests { + x, _ := getScriptID(script, []byte(tt.s)) + if b := x.IsPrivateUse(); b != tt.private { + t.Errorf("%d: scriptID.IsPrivateUse(%s) was %v; want %v", i, tt.s, b, tt.private) + } + } +} diff --git a/vendor/golang.org/x/text/language/maketables.go b/vendor/golang.org/x/text/language/maketables.go new file mode 100644 index 0000000..107f992 --- /dev/null +++ b/vendor/golang.org/x/text/language/maketables.go @@ -0,0 +1,1648 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// Language tag table generator. +// Data read from the web. + +package main + +import ( + "bufio" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "math" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/tag" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", + false, + "test existing tables; can be used to compare web data with package data.") + outputFile = flag.String("output", + "tables.go", + "output file for generated tables") +) + +var comment = []string{ + ` +lang holds an alphabetically sorted list of ISO-639 language identifiers. +All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag. +For 2-byte language identifiers, the two successive bytes have the following meaning: + - if the first letter of the 2- and 3-letter ISO codes are the same: + the second and third letter of the 3-letter ISO code. + - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3. +For 3-byte language identifiers the 4th byte is 0.`, + ` +langNoIndex is a bit vector of all 3-letter language codes that are not used as an index +in lookup tables. The language ids for these language codes are derived directly +from the letters and are not consecutive.`, + ` +altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives +to 2-letter language codes that cannot be derived using the method described above. +Each 3-letter code is followed by its 1-byte langID.`, + ` +altLangIndex is used to convert indexes in altLangISO3 to langIDs.`, + ` +langAliasMap maps langIDs to their suggested replacements.`, + ` +script is an alphabetically sorted list of ISO 15924 codes. The index +of the script in the string, divided by 4, is the internal scriptID.`, + ` +isoRegionOffset needs to be added to the index of regionISO to obtain the regionID +for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for +the UN.M49 codes used for groups.)`, + ` +regionISO holds a list of alphabetically sorted 2-letter ISO region codes. +Each 2-letter codes is followed by two bytes with the following meaning: + - [A-Z}{2}: the first letter of the 2-letter code plus these two + letters form the 3-letter ISO code. + - 0, n: index into altRegionISO3.`, + ` +regionTypes defines the status of a region for various standards.`, + ` +m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are +codes indicating collections of regions.`, + ` +m49Index gives indexes into fromM49 based on the three most significant bits +of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in + fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]] +for an entry where the first 7 bits match the 7 lsb of the UN.M49 code. +The region code is stored in the 9 lsb of the indexed value.`, + ` +fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.`, + ` +altRegionISO3 holds a list of 3-letter region codes that cannot be +mapped to 2-letter codes using the default algorithm. This is a short list.`, + ` +altRegionIDs holds a list of regionIDs the positions of which match those +of the 3-letter ISO codes in altRegionISO3.`, + ` +variantNumSpecialized is the number of specialized variants in variants.`, + ` +suppressScript is an index from langID to the dominant script for that language, +if it exists. If a script is given, it should be suppressed from the language tag.`, + ` +likelyLang is a lookup table, indexed by langID, for the most likely +scripts and regions given incomplete information. If more entries exist for a +given language, region and script are the index and size respectively +of the list in likelyLangList.`, + ` +likelyLangList holds lists info associated with likelyLang.`, + ` +likelyRegion is a lookup table, indexed by regionID, for the most likely +languages and scripts given incomplete information. If more entries exist +for a given regionID, lang and script are the index and size respectively +of the list in likelyRegionList. +TODO: exclude containers and user-definable regions from the list.`, + ` +likelyRegionList holds lists info associated with likelyRegion.`, + ` +likelyScript is a lookup table, indexed by scriptID, for the most likely +languages and regions given a script.`, + ` +matchLang holds pairs of langIDs of base languages that are typically +mutually intelligible. Each pair is associated with a confidence and +whether the intelligibility goes one or both ways.`, + ` +matchScript holds pairs of scriptIDs where readers of one script +can typically also read the other. Each is associated with a confidence.`, + ` +nRegionGroups is the number of region groups.`, + ` +regionInclusion maps region identifiers to sets of regions in regionInclusionBits, +where each set holds all groupings that are directly connected in a region +containment graph.`, + ` +regionInclusionBits is an array of bit vectors where every vector represents +a set of region groupings. These sets are used to compute the distance +between two regions for the purpose of language matching.`, + ` +regionInclusionNext marks, for each entry in regionInclusionBits, the set of +all groups that are reachable from the groups set in the respective entry.`, +} + +// TODO: consider changing some of these structures to tries. This can reduce +// memory, but may increase the need for memory allocations. This could be +// mitigated if we can piggyback on language tags for common cases. + +func failOnError(e error) { + if e != nil { + log.Panic(e) + } +} + +type setType int + +const ( + Indexed setType = 1 + iota // all elements must be of same size + Linear +) + +type stringSet struct { + s []string + sorted, frozen bool + + // We often need to update values after the creation of an index is completed. + // We include a convenience map for keeping track of this. + update map[string]string + typ setType // used for checking. +} + +func (ss *stringSet) clone() stringSet { + c := *ss + c.s = append([]string(nil), c.s...) + return c +} + +func (ss *stringSet) setType(t setType) { + if ss.typ != t && ss.typ != 0 { + log.Panicf("type %d cannot be assigned as it was already %d", t, ss.typ) + } +} + +// parse parses a whitespace-separated string and initializes ss with its +// components. +func (ss *stringSet) parse(s string) { + scan := bufio.NewScanner(strings.NewReader(s)) + scan.Split(bufio.ScanWords) + for scan.Scan() { + ss.add(scan.Text()) + } +} + +func (ss *stringSet) assertChangeable() { + if ss.frozen { + log.Panic("attempt to modify a frozen stringSet") + } +} + +func (ss *stringSet) add(s string) { + ss.assertChangeable() + ss.s = append(ss.s, s) + ss.sorted = ss.frozen +} + +func (ss *stringSet) freeze() { + ss.compact() + ss.frozen = true +} + +func (ss *stringSet) compact() { + if ss.sorted { + return + } + a := ss.s + sort.Strings(a) + k := 0 + for i := 1; i < len(a); i++ { + if a[k] != a[i] { + a[k+1] = a[i] + k++ + } + } + ss.s = a[:k+1] + ss.sorted = ss.frozen +} + +type funcSorter struct { + fn func(a, b string) bool + sort.StringSlice +} + +func (s funcSorter) Less(i, j int) bool { + return s.fn(s.StringSlice[i], s.StringSlice[j]) +} + +func (ss *stringSet) sortFunc(f func(a, b string) bool) { + ss.compact() + sort.Sort(funcSorter{f, sort.StringSlice(ss.s)}) +} + +func (ss *stringSet) remove(s string) { + ss.assertChangeable() + if i, ok := ss.find(s); ok { + copy(ss.s[i:], ss.s[i+1:]) + ss.s = ss.s[:len(ss.s)-1] + } +} + +func (ss *stringSet) replace(ol, nu string) { + ss.s[ss.index(ol)] = nu + ss.sorted = ss.frozen +} + +func (ss *stringSet) index(s string) int { + ss.setType(Indexed) + i, ok := ss.find(s) + if !ok { + if i < len(ss.s) { + log.Panicf("find: item %q is not in list. Closest match is %q.", s, ss.s[i]) + } + log.Panicf("find: item %q is not in list", s) + + } + return i +} + +func (ss *stringSet) find(s string) (int, bool) { + ss.compact() + i := sort.SearchStrings(ss.s, s) + return i, i != len(ss.s) && ss.s[i] == s +} + +func (ss *stringSet) slice() []string { + ss.compact() + return ss.s +} + +func (ss *stringSet) updateLater(v, key string) { + if ss.update == nil { + ss.update = map[string]string{} + } + ss.update[v] = key +} + +// join joins the string and ensures that all entries are of the same length. +func (ss *stringSet) join() string { + ss.setType(Indexed) + n := len(ss.s[0]) + for _, s := range ss.s { + if len(s) != n { + log.Panicf("join: not all entries are of the same length: %q", s) + } + } + ss.s = append(ss.s, strings.Repeat("\xff", n)) + return strings.Join(ss.s, "") +} + +// ianaEntry holds information for an entry in the IANA Language Subtag Repository. +// All types use the same entry. +// See http://tools.ietf.org/html/bcp47#section-5.1 for a description of the various +// fields. +type ianaEntry struct { + typ string + description []string + scope string + added string + preferred string + deprecated string + suppressScript string + macro string + prefix []string +} + +type builder struct { + w *gen.CodeWriter + hw io.Writer // MultiWriter for w and w.Hash + data *cldr.CLDR + supp *cldr.SupplementalData + + // indices + locale stringSet // common locales + lang stringSet // canonical language ids (2 or 3 letter ISO codes) with data + langNoIndex stringSet // 3-letter ISO codes with no associated data + script stringSet // 4-letter ISO codes + region stringSet // 2-letter ISO or 3-digit UN M49 codes + variant stringSet // 4-8-alphanumeric variant code. + + // Region codes that are groups with their corresponding group IDs. + groups map[int]index + + // langInfo + registry map[string]*ianaEntry +} + +type index uint + +func newBuilder(w *gen.CodeWriter) *builder { + r := gen.OpenCLDRCoreZip() + defer r.Close() + d := &cldr.Decoder{} + data, err := d.DecodeZip(r) + failOnError(err) + b := builder{ + w: w, + hw: io.MultiWriter(w, w.Hash), + data: data, + supp: data.Supplemental(), + } + b.parseRegistry() + return &b +} + +func (b *builder) parseRegistry() { + r := gen.OpenIANAFile("assignments/language-subtag-registry") + defer r.Close() + b.registry = make(map[string]*ianaEntry) + + scan := bufio.NewScanner(r) + scan.Split(bufio.ScanWords) + var record *ianaEntry + for more := scan.Scan(); more; { + key := scan.Text() + more = scan.Scan() + value := scan.Text() + switch key { + case "Type:": + record = &ianaEntry{typ: value} + case "Subtag:", "Tag:": + if s := strings.SplitN(value, "..", 2); len(s) > 1 { + for a := s[0]; a <= s[1]; a = inc(a) { + b.addToRegistry(a, record) + } + } else { + b.addToRegistry(value, record) + } + case "Suppress-Script:": + record.suppressScript = value + case "Added:": + record.added = value + case "Deprecated:": + record.deprecated = value + case "Macrolanguage:": + record.macro = value + case "Preferred-Value:": + record.preferred = value + case "Prefix:": + record.prefix = append(record.prefix, value) + case "Scope:": + record.scope = value + case "Description:": + buf := []byte(value) + for more = scan.Scan(); more; more = scan.Scan() { + b := scan.Bytes() + if b[0] == '%' || b[len(b)-1] == ':' { + break + } + buf = append(buf, ' ') + buf = append(buf, b...) + } + record.description = append(record.description, string(buf)) + continue + default: + continue + } + more = scan.Scan() + } + if scan.Err() != nil { + log.Panic(scan.Err()) + } +} + +func (b *builder) addToRegistry(key string, entry *ianaEntry) { + if info, ok := b.registry[key]; ok { + if info.typ != "language" || entry.typ != "extlang" { + log.Fatalf("parseRegistry: tag %q already exists", key) + } + } else { + b.registry[key] = entry + } +} + +var commentIndex = make(map[string]string) + +func init() { + for _, s := range comment { + key := strings.TrimSpace(strings.SplitN(s, " ", 2)[0]) + commentIndex[key] = s + } +} + +func (b *builder) comment(name string) { + if s := commentIndex[name]; len(s) > 0 { + b.w.WriteComment(s) + } else { + fmt.Fprintln(b.w) + } +} + +func (b *builder) pf(f string, x ...interface{}) { + fmt.Fprintf(b.hw, f, x...) + fmt.Fprint(b.hw, "\n") +} + +func (b *builder) p(x ...interface{}) { + fmt.Fprintln(b.hw, x...) +} + +func (b *builder) addSize(s int) { + b.w.Size += s + b.pf("// Size: %d bytes", s) +} + +func (b *builder) writeConst(name string, x interface{}) { + b.comment(name) + b.w.WriteConst(name, x) +} + +// writeConsts computes f(v) for all v in values and writes the results +// as constants named _v to a single constant block. +func (b *builder) writeConsts(f func(string) int, values ...string) { + b.pf("const (") + for _, v := range values { + b.pf("\t_%s = %v", v, f(v)) + } + b.pf(")") +} + +// writeType writes the type of the given value, which must be a struct. +func (b *builder) writeType(value interface{}) { + b.comment(reflect.TypeOf(value).Name()) + b.w.WriteType(value) +} + +func (b *builder) writeSlice(name string, ss interface{}) { + b.writeSliceAddSize(name, 0, ss) +} + +func (b *builder) writeSliceAddSize(name string, extraSize int, ss interface{}) { + b.comment(name) + b.w.Size += extraSize + v := reflect.ValueOf(ss) + t := v.Type().Elem() + b.pf("// Size: %d bytes, %d elements", v.Len()*int(t.Size())+extraSize, v.Len()) + + fmt.Fprintf(b.w, "var %s = ", name) + b.w.WriteArray(ss) + b.p() +} + +type fromTo struct { + from, to uint16 +} + +func (b *builder) writeSortedMap(name string, ss *stringSet, index func(s string) uint16) { + ss.sortFunc(func(a, b string) bool { + return index(a) < index(b) + }) + m := []fromTo{} + for _, s := range ss.s { + m = append(m, fromTo{index(s), index(ss.update[s])}) + } + b.writeSlice(name, m) +} + +const base = 'z' - 'a' + 1 + +func strToInt(s string) uint { + v := uint(0) + for i := 0; i < len(s); i++ { + v *= base + v += uint(s[i] - 'a') + } + return v +} + +// converts the given integer to the original ASCII string passed to strToInt. +// len(s) must match the number of characters obtained. +func intToStr(v uint, s []byte) { + for i := len(s) - 1; i >= 0; i-- { + s[i] = byte(v%base) + 'a' + v /= base + } +} + +func (b *builder) writeBitVector(name string, ss []string) { + vec := make([]uint8, int(math.Ceil(math.Pow(base, float64(len(ss[0])))/8))) + for _, s := range ss { + v := strToInt(s) + vec[v/8] |= 1 << (v % 8) + } + b.writeSlice(name, vec) +} + +// TODO: convert this type into a list or two-stage trie. +func (b *builder) writeMapFunc(name string, m map[string]string, f func(string) uint16) { + b.comment(name) + v := reflect.ValueOf(m) + sz := v.Len() * (2 + int(v.Type().Key().Size())) + for _, k := range m { + sz += len(k) + } + b.addSize(sz) + keys := []string{} + b.pf(`var %s = map[string]uint16{`, name) + for k := range m { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + b.pf("\t%q: %v,", k, f(m[k])) + } + b.p("}") +} + +func (b *builder) writeMap(name string, m interface{}) { + b.comment(name) + v := reflect.ValueOf(m) + sz := v.Len() * (2 + int(v.Type().Key().Size()) + int(v.Type().Elem().Size())) + b.addSize(sz) + f := strings.FieldsFunc(fmt.Sprintf("%#v", m), func(r rune) bool { + return strings.IndexRune("{}, ", r) != -1 + }) + sort.Strings(f[1:]) + b.pf(`var %s = %s{`, name, f[0]) + for _, kv := range f[1:] { + b.pf("\t%s,", kv) + } + b.p("}") +} + +func (b *builder) langIndex(s string) uint16 { + if s == "und" { + return 0 + } + if i, ok := b.lang.find(s); ok { + return uint16(i) + } + return uint16(strToInt(s)) + uint16(len(b.lang.s)) +} + +// inc advances the string to its lexicographical successor. +func inc(s string) string { + const maxTagLength = 4 + var buf [maxTagLength]byte + intToStr(strToInt(strings.ToLower(s))+1, buf[:len(s)]) + for i := 0; i < len(s); i++ { + if s[i] <= 'Z' { + buf[i] -= 'a' - 'A' + } + } + return string(buf[:len(s)]) +} + +func (b *builder) parseIndices() { + meta := b.supp.Metadata + + for k, v := range b.registry { + var ss *stringSet + switch v.typ { + case "language": + if len(k) == 2 || v.suppressScript != "" || v.scope == "special" { + b.lang.add(k) + continue + } else { + ss = &b.langNoIndex + } + case "region": + ss = &b.region + case "script": + ss = &b.script + case "variant": + ss = &b.variant + default: + continue + } + ss.add(k) + } + // Include any language for which there is data. + for _, lang := range b.data.Locales() { + if x := b.data.RawLDML(lang); false || + x.LocaleDisplayNames != nil || + x.Characters != nil || + x.Delimiters != nil || + x.Measurement != nil || + x.Dates != nil || + x.Numbers != nil || + x.Units != nil || + x.ListPatterns != nil || + x.Collations != nil || + x.Segmentations != nil || + x.Rbnf != nil || + x.Annotations != nil || + x.Metadata != nil { + + from := strings.Split(lang, "_") + if lang := from[0]; lang != "root" { + b.lang.add(lang) + } + } + } + // Include locales for plural rules, which uses a different structure. + for _, plurals := range b.data.Supplemental().Plurals { + for _, rules := range plurals.PluralRules { + for _, lang := range strings.Split(rules.Locales, " ") { + if lang = strings.Split(lang, "_")[0]; lang != "root" { + b.lang.add(lang) + } + } + } + } + // Include languages in likely subtags. + for _, m := range b.supp.LikelySubtags.LikelySubtag { + from := strings.Split(m.From, "_") + b.lang.add(from[0]) + } + // Include ISO-639 alpha-3 bibliographic entries. + for _, a := range meta.Alias.LanguageAlias { + if a.Reason == "bibliographic" { + b.langNoIndex.add(a.Type) + } + } + // Include regions in territoryAlias (not all are in the IANA registry!) + for _, reg := range b.supp.Metadata.Alias.TerritoryAlias { + if len(reg.Type) == 2 { + b.region.add(reg.Type) + } + } + + for _, s := range b.lang.s { + if len(s) == 3 { + b.langNoIndex.remove(s) + } + } + b.writeConst("numLanguages", len(b.lang.slice())+len(b.langNoIndex.slice())) + b.writeConst("numScripts", len(b.script.slice())) + b.writeConst("numRegions", len(b.region.slice())) + + // Add dummy codes at the start of each list to represent "unspecified". + b.lang.add("---") + b.script.add("----") + b.region.add("---") + + // common locales + b.locale.parse(meta.DefaultContent.Locales) +} + +// TODO: region inclusion data will probably not be use used in future matchers. + +func (b *builder) computeRegionGroups() { + b.groups = make(map[int]index) + + // Create group indices. + for i := 1; b.region.s[i][0] < 'A'; i++ { // Base M49 indices on regionID. + b.groups[i] = index(len(b.groups)) + } + for _, g := range b.supp.TerritoryContainment.Group { + // Skip UN and EURO zone as they are flattening the containment + // relationship. + if g.Type == "EZ" || g.Type == "UN" { + continue + } + group := b.region.index(g.Type) + if _, ok := b.groups[group]; !ok { + b.groups[group] = index(len(b.groups)) + } + } + if len(b.groups) > 32 { + log.Fatalf("only 32 groups supported, found %d", len(b.groups)) + } + b.writeConst("nRegionGroups", len(b.groups)) +} + +var langConsts = []string{ + "af", "am", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es", + "et", "fa", "fi", "fil", "fr", "gu", "he", "hi", "hr", "hu", "hy", "id", "is", + "it", "ja", "ka", "kk", "km", "kn", "ko", "ky", "lo", "lt", "lv", "mk", "ml", + "mn", "mo", "mr", "ms", "mul", "my", "nb", "ne", "nl", "no", "pa", "pl", "pt", + "ro", "ru", "sh", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", + "tl", "tn", "tr", "uk", "ur", "uz", "vi", "zh", "zu", + + // constants for grandfathered tags (if not already defined) + "jbo", "ami", "bnn", "hak", "tlh", "lb", "nv", "pwn", "tao", "tay", "tsu", + "nn", "sfb", "vgt", "sgg", "cmn", "nan", "hsn", +} + +// writeLanguage generates all tables needed for language canonicalization. +func (b *builder) writeLanguage() { + meta := b.supp.Metadata + + b.writeConst("nonCanonicalUnd", b.lang.index("und")) + b.writeConsts(func(s string) int { return int(b.langIndex(s)) }, langConsts...) + b.writeConst("langPrivateStart", b.langIndex("qaa")) + b.writeConst("langPrivateEnd", b.langIndex("qtz")) + + // Get language codes that need to be mapped (overlong 3-letter codes, + // deprecated 2-letter codes, legacy and grandfathered tags.) + langAliasMap := stringSet{} + aliasTypeMap := map[string]langAliasType{} + + // altLangISO3 get the alternative ISO3 names that need to be mapped. + altLangISO3 := stringSet{} + // Add dummy start to avoid the use of index 0. + altLangISO3.add("---") + altLangISO3.updateLater("---", "aa") + + lang := b.lang.clone() + for _, a := range meta.Alias.LanguageAlias { + if a.Replacement == "" { + a.Replacement = "und" + } + // TODO: support mapping to tags + repl := strings.SplitN(a.Replacement, "_", 2)[0] + if a.Reason == "overlong" { + if len(a.Replacement) == 2 && len(a.Type) == 3 { + lang.updateLater(a.Replacement, a.Type) + } + } else if len(a.Type) <= 3 { + switch a.Reason { + case "macrolanguage": + aliasTypeMap[a.Type] = langMacro + case "deprecated": + // handled elsewhere + continue + case "bibliographic", "legacy": + if a.Type == "no" { + continue + } + aliasTypeMap[a.Type] = langLegacy + default: + log.Fatalf("new %s alias: %s", a.Reason, a.Type) + } + langAliasMap.add(a.Type) + langAliasMap.updateLater(a.Type, repl) + } + } + // Manually add the mapping of "nb" (Norwegian) to its macro language. + // This can be removed if CLDR adopts this change. + langAliasMap.add("nb") + langAliasMap.updateLater("nb", "no") + aliasTypeMap["nb"] = langMacro + + for k, v := range b.registry { + // Also add deprecated values for 3-letter ISO codes, which CLDR omits. + if v.typ == "language" && v.deprecated != "" && v.preferred != "" { + langAliasMap.add(k) + langAliasMap.updateLater(k, v.preferred) + aliasTypeMap[k] = langDeprecated + } + } + // Fix CLDR mappings. + lang.updateLater("tl", "tgl") + lang.updateLater("sh", "hbs") + lang.updateLater("mo", "mol") + lang.updateLater("no", "nor") + lang.updateLater("tw", "twi") + lang.updateLater("nb", "nob") + lang.updateLater("ak", "aka") + lang.updateLater("bh", "bih") + + // Ensure that each 2-letter code is matched with a 3-letter code. + for _, v := range lang.s[1:] { + s, ok := lang.update[v] + if !ok { + if s, ok = lang.update[langAliasMap.update[v]]; !ok { + continue + } + lang.update[v] = s + } + if v[0] != s[0] { + altLangISO3.add(s) + altLangISO3.updateLater(s, v) + } + } + + // Complete canonialized language tags. + lang.freeze() + for i, v := range lang.s { + // We can avoid these manual entries by using the IANI registry directly. + // Seems easier to update the list manually, as changes are rare. + // The panic in this loop will trigger if we miss an entry. + add := "" + if s, ok := lang.update[v]; ok { + if s[0] == v[0] { + add = s[1:] + } else { + add = string([]byte{0, byte(altLangISO3.index(s))}) + } + } else if len(v) == 3 { + add = "\x00" + } else { + log.Panicf("no data for long form of %q", v) + } + lang.s[i] += add + } + b.writeConst("lang", tag.Index(lang.join())) + + b.writeConst("langNoIndexOffset", len(b.lang.s)) + + // space of all valid 3-letter language identifiers. + b.writeBitVector("langNoIndex", b.langNoIndex.slice()) + + altLangIndex := []uint16{} + for i, s := range altLangISO3.slice() { + altLangISO3.s[i] += string([]byte{byte(len(altLangIndex))}) + if i > 0 { + idx := b.lang.index(altLangISO3.update[s]) + altLangIndex = append(altLangIndex, uint16(idx)) + } + } + b.writeConst("altLangISO3", tag.Index(altLangISO3.join())) + b.writeSlice("altLangIndex", altLangIndex) + + b.writeSortedMap("langAliasMap", &langAliasMap, b.langIndex) + types := make([]langAliasType, len(langAliasMap.s)) + for i, s := range langAliasMap.s { + types[i] = aliasTypeMap[s] + } + b.writeSlice("langAliasTypes", types) +} + +var scriptConsts = []string{ + "Latn", "Hani", "Hans", "Hant", "Qaaa", "Qaai", "Qabx", "Zinh", "Zyyy", + "Zzzz", +} + +func (b *builder) writeScript() { + b.writeConsts(b.script.index, scriptConsts...) + b.writeConst("script", tag.Index(b.script.join())) + + supp := make([]uint8, len(b.lang.slice())) + for i, v := range b.lang.slice()[1:] { + if sc := b.registry[v].suppressScript; sc != "" { + supp[i+1] = uint8(b.script.index(sc)) + } + } + b.writeSlice("suppressScript", supp) + + // There is only one deprecated script in CLDR. This value is hard-coded. + // We check here if the code must be updated. + for _, a := range b.supp.Metadata.Alias.ScriptAlias { + if a.Type != "Qaai" { + log.Panicf("unexpected deprecated stript %q", a.Type) + } + } +} + +func parseM49(s string) int16 { + if len(s) == 0 { + return 0 + } + v, err := strconv.ParseUint(s, 10, 10) + failOnError(err) + return int16(v) +} + +var regionConsts = []string{ + "001", "419", "BR", "CA", "ES", "GB", "MD", "PT", "UK", "US", + "ZZ", "XA", "XC", "XK", // Unofficial tag for Kosovo. +} + +func (b *builder) writeRegion() { + b.writeConsts(b.region.index, regionConsts...) + + isoOffset := b.region.index("AA") + m49map := make([]int16, len(b.region.slice())) + fromM49map := make(map[int16]int) + altRegionISO3 := "" + altRegionIDs := []uint16{} + + b.writeConst("isoRegionOffset", isoOffset) + + // 2-letter region lookup and mapping to numeric codes. + regionISO := b.region.clone() + regionISO.s = regionISO.s[isoOffset:] + regionISO.sorted = false + + regionTypes := make([]byte, len(b.region.s)) + + // Is the region valid BCP 47? + for s, e := range b.registry { + if len(s) == 2 && s == strings.ToUpper(s) { + i := b.region.index(s) + for _, d := range e.description { + if strings.Contains(d, "Private use") { + regionTypes[i] = iso3166UserAssgined + } + } + regionTypes[i] |= bcp47Region + } + } + + // Is the region a valid ccTLD? + r := gen.OpenIANAFile("domains/root/db") + defer r.Close() + + buf, err := ioutil.ReadAll(r) + failOnError(err) + re := regexp.MustCompile(`"/domains/root/db/([a-z]{2}).html"`) + for _, m := range re.FindAllSubmatch(buf, -1) { + i := b.region.index(strings.ToUpper(string(m[1]))) + regionTypes[i] |= ccTLD + } + + b.writeSlice("regionTypes", regionTypes) + + iso3Set := make(map[string]int) + update := func(iso2, iso3 string) { + i := regionISO.index(iso2) + if j, ok := iso3Set[iso3]; !ok && iso3[0] == iso2[0] { + regionISO.s[i] += iso3[1:] + iso3Set[iso3] = -1 + } else { + if ok && j >= 0 { + regionISO.s[i] += string([]byte{0, byte(j)}) + } else { + iso3Set[iso3] = len(altRegionISO3) + regionISO.s[i] += string([]byte{0, byte(len(altRegionISO3))}) + altRegionISO3 += iso3 + altRegionIDs = append(altRegionIDs, uint16(isoOffset+i)) + } + } + } + for _, tc := range b.supp.CodeMappings.TerritoryCodes { + i := regionISO.index(tc.Type) + isoOffset + if d := m49map[i]; d != 0 { + log.Panicf("%s found as a duplicate UN.M49 code of %03d", tc.Numeric, d) + } + m49 := parseM49(tc.Numeric) + m49map[i] = m49 + if r := fromM49map[m49]; r == 0 { + fromM49map[m49] = i + } else if r != i { + dep := b.registry[regionISO.s[r-isoOffset]].deprecated + if t := b.registry[tc.Type]; t != nil && dep != "" && (t.deprecated == "" || t.deprecated > dep) { + fromM49map[m49] = i + } + } + } + for _, ta := range b.supp.Metadata.Alias.TerritoryAlias { + if len(ta.Type) == 3 && ta.Type[0] <= '9' && len(ta.Replacement) == 2 { + from := parseM49(ta.Type) + if r := fromM49map[from]; r == 0 { + fromM49map[from] = regionISO.index(ta.Replacement) + isoOffset + } + } + } + for _, tc := range b.supp.CodeMappings.TerritoryCodes { + if len(tc.Alpha3) == 3 { + update(tc.Type, tc.Alpha3) + } + } + // This entries are not included in territoryCodes. Mostly 3-letter variants + // of deleted codes and an entry for QU. + for _, m := range []struct{ iso2, iso3 string }{ + {"CT", "CTE"}, + {"DY", "DHY"}, + {"HV", "HVO"}, + {"JT", "JTN"}, + {"MI", "MID"}, + {"NH", "NHB"}, + {"NQ", "ATN"}, + {"PC", "PCI"}, + {"PU", "PUS"}, + {"PZ", "PCZ"}, + {"RH", "RHO"}, + {"VD", "VDR"}, + {"WK", "WAK"}, + // These three-letter codes are used for others as well. + {"FQ", "ATF"}, + } { + update(m.iso2, m.iso3) + } + for i, s := range regionISO.s { + if len(s) != 4 { + regionISO.s[i] = s + " " + } + } + b.writeConst("regionISO", tag.Index(regionISO.join())) + b.writeConst("altRegionISO3", altRegionISO3) + b.writeSlice("altRegionIDs", altRegionIDs) + + // Create list of deprecated regions. + // TODO: consider inserting SF -> FI. Not included by CLDR, but is the only + // Transitionally-reserved mapping not included. + regionOldMap := stringSet{} + // Include regions in territoryAlias (not all are in the IANA registry!) + for _, reg := range b.supp.Metadata.Alias.TerritoryAlias { + if len(reg.Type) == 2 && reg.Reason == "deprecated" && len(reg.Replacement) == 2 { + regionOldMap.add(reg.Type) + regionOldMap.updateLater(reg.Type, reg.Replacement) + i, _ := regionISO.find(reg.Type) + j, _ := regionISO.find(reg.Replacement) + if k := m49map[i+isoOffset]; k == 0 { + m49map[i+isoOffset] = m49map[j+isoOffset] + } + } + } + b.writeSortedMap("regionOldMap", ®ionOldMap, func(s string) uint16 { + return uint16(b.region.index(s)) + }) + // 3-digit region lookup, groupings. + for i := 1; i < isoOffset; i++ { + m := parseM49(b.region.s[i]) + m49map[i] = m + fromM49map[m] = i + } + b.writeSlice("m49", m49map) + + const ( + searchBits = 7 + regionBits = 9 + ) + if len(m49map) >= 1<<regionBits { + log.Fatalf("Maximum number of regions exceeded: %d > %d", len(m49map), 1<<regionBits) + } + m49Index := [9]int16{} + fromM49 := []uint16{} + m49 := []int{} + for k, _ := range fromM49map { + m49 = append(m49, int(k)) + } + sort.Ints(m49) + for _, k := range m49[1:] { + val := (k & (1<<searchBits - 1)) << regionBits + fromM49 = append(fromM49, uint16(val|fromM49map[int16(k)])) + m49Index[1:][k>>searchBits] = int16(len(fromM49)) + } + b.writeSlice("m49Index", m49Index) + b.writeSlice("fromM49", fromM49) +} + +const ( + // TODO: put these lists in regionTypes as user data? Could be used for + // various optimizations and refinements and could be exposed in the API. + iso3166Except = "AC CP DG EA EU FX IC SU TA UK" + iso3166Trans = "AN BU CS NT TP YU ZR" // SF is not in our set of Regions. + // DY and RH are actually not deleted, but indeterminately reserved. + iso3166DelCLDR = "CT DD DY FQ HV JT MI NH NQ PC PU PZ RH VD WK YD" +) + +const ( + iso3166UserAssgined = 1 << iota + ccTLD + bcp47Region +) + +func find(list []string, s string) int { + for i, t := range list { + if t == s { + return i + } + } + return -1 +} + +// writeVariants generates per-variant information and creates a map from variant +// name to index value. We assign index values such that sorting multiple +// variants by index value will result in the correct order. +// There are two types of variants: specialized and general. Specialized variants +// are only applicable to certain language or language-script pairs. Generalized +// variants apply to any language. Generalized variants always sort after +// specialized variants. We will therefore always assign a higher index value +// to a generalized variant than any other variant. Generalized variants are +// sorted alphabetically among themselves. +// Specialized variants may also sort after other specialized variants. Such +// variants will be ordered after any of the variants they may follow. +// We assume that if a variant x is followed by a variant y, then for any prefix +// p of x, p-x is a prefix of y. This allows us to order tags based on the +// maximum of the length of any of its prefixes. +// TODO: it is possible to define a set of Prefix values on variants such that +// a total order cannot be defined to the point that this algorithm breaks. +// In other words, we cannot guarantee the same order of variants for the +// future using the same algorithm or for non-compliant combinations of +// variants. For this reason, consider using simple alphabetic sorting +// of variants and ignore Prefix restrictions altogether. +func (b *builder) writeVariant() { + generalized := stringSet{} + specialized := stringSet{} + specializedExtend := stringSet{} + // Collate the variants by type and check assumptions. + for _, v := range b.variant.slice() { + e := b.registry[v] + if len(e.prefix) == 0 { + generalized.add(v) + continue + } + c := strings.Split(e.prefix[0], "-") + hasScriptOrRegion := false + if len(c) > 1 { + _, hasScriptOrRegion = b.script.find(c[1]) + if !hasScriptOrRegion { + _, hasScriptOrRegion = b.region.find(c[1]) + + } + } + if len(c) == 1 || len(c) == 2 && hasScriptOrRegion { + // Variant is preceded by a language. + specialized.add(v) + continue + } + // Variant is preceded by another variant. + specializedExtend.add(v) + prefix := c[0] + "-" + if hasScriptOrRegion { + prefix += c[1] + } + for _, p := range e.prefix { + // Verify that the prefix minus the last element is a prefix of the + // predecessor element. + i := strings.LastIndex(p, "-") + pred := b.registry[p[i+1:]] + if find(pred.prefix, p[:i]) < 0 { + log.Fatalf("prefix %q for variant %q not consistent with predecessor spec", p, v) + } + // The sorting used below does not work in the general case. It works + // if we assume that variants that may be followed by others only have + // prefixes of the same length. Verify this. + count := strings.Count(p[:i], "-") + for _, q := range pred.prefix { + if c := strings.Count(q, "-"); c != count { + log.Fatalf("variant %q preceding %q has a prefix %q of size %d; want %d", p[i+1:], v, q, c, count) + } + } + if !strings.HasPrefix(p, prefix) { + log.Fatalf("prefix %q of variant %q should start with %q", p, v, prefix) + } + } + } + + // Sort extended variants. + a := specializedExtend.s + less := func(v, w string) bool { + // Sort by the maximum number of elements. + maxCount := func(s string) (max int) { + for _, p := range b.registry[s].prefix { + if c := strings.Count(p, "-"); c > max { + max = c + } + } + return + } + if cv, cw := maxCount(v), maxCount(w); cv != cw { + return cv < cw + } + // Sort by name as tie breaker. + return v < w + } + sort.Sort(funcSorter{less, sort.StringSlice(a)}) + specializedExtend.frozen = true + + // Create index from variant name to index. + variantIndex := make(map[string]uint8) + add := func(s []string) { + for _, v := range s { + variantIndex[v] = uint8(len(variantIndex)) + } + } + add(specialized.slice()) + add(specializedExtend.s) + numSpecialized := len(variantIndex) + add(generalized.slice()) + if n := len(variantIndex); n > 255 { + log.Fatalf("maximum number of variants exceeded: was %d; want <= 255", n) + } + b.writeMap("variantIndex", variantIndex) + b.writeConst("variantNumSpecialized", numSpecialized) +} + +func (b *builder) writeLanguageInfo() { +} + +// writeLikelyData writes tables that are used both for finding parent relations and for +// language matching. Each entry contains additional bits to indicate the status of the +// data to know when it cannot be used for parent relations. +func (b *builder) writeLikelyData() { + const ( + isList = 1 << iota + scriptInFrom + regionInFrom + ) + type ( // generated types + likelyScriptRegion struct { + region uint16 + script uint8 + flags uint8 + } + likelyLangScript struct { + lang uint16 + script uint8 + flags uint8 + } + likelyLangRegion struct { + lang uint16 + region uint16 + } + // likelyTag is used for getting likely tags for group regions, where + // the likely region might be a region contained in the group. + likelyTag struct { + lang uint16 + region uint16 + script uint8 + } + ) + var ( // generated variables + likelyRegionGroup = make([]likelyTag, len(b.groups)) + likelyLang = make([]likelyScriptRegion, len(b.lang.s)) + likelyRegion = make([]likelyLangScript, len(b.region.s)) + likelyScript = make([]likelyLangRegion, len(b.script.s)) + likelyLangList = []likelyScriptRegion{} + likelyRegionList = []likelyLangScript{} + ) + type fromTo struct { + from, to []string + } + langToOther := map[int][]fromTo{} + regionToOther := map[int][]fromTo{} + for _, m := range b.supp.LikelySubtags.LikelySubtag { + from := strings.Split(m.From, "_") + to := strings.Split(m.To, "_") + if len(to) != 3 { + log.Fatalf("invalid number of subtags in %q: found %d, want 3", m.To, len(to)) + } + if len(from) > 3 { + log.Fatalf("invalid number of subtags: found %d, want 1-3", len(from)) + } + if from[0] != to[0] && from[0] != "und" { + log.Fatalf("unexpected language change in expansion: %s -> %s", from, to) + } + if len(from) == 3 { + if from[2] != to[2] { + log.Fatalf("unexpected region change in expansion: %s -> %s", from, to) + } + if from[0] != "und" { + log.Fatalf("unexpected fully specified from tag: %s -> %s", from, to) + } + } + if len(from) == 1 || from[0] != "und" { + id := 0 + if from[0] != "und" { + id = b.lang.index(from[0]) + } + langToOther[id] = append(langToOther[id], fromTo{from, to}) + } else if len(from) == 2 && len(from[1]) == 4 { + sid := b.script.index(from[1]) + likelyScript[sid].lang = uint16(b.langIndex(to[0])) + likelyScript[sid].region = uint16(b.region.index(to[2])) + } else { + r := b.region.index(from[len(from)-1]) + if id, ok := b.groups[r]; ok { + if from[0] != "und" { + log.Fatalf("region changed unexpectedly: %s -> %s", from, to) + } + likelyRegionGroup[id].lang = uint16(b.langIndex(to[0])) + likelyRegionGroup[id].script = uint8(b.script.index(to[1])) + likelyRegionGroup[id].region = uint16(b.region.index(to[2])) + } else { + regionToOther[r] = append(regionToOther[r], fromTo{from, to}) + } + } + } + b.writeType(likelyLangRegion{}) + b.writeSlice("likelyScript", likelyScript) + + for id := range b.lang.s { + list := langToOther[id] + if len(list) == 1 { + likelyLang[id].region = uint16(b.region.index(list[0].to[2])) + likelyLang[id].script = uint8(b.script.index(list[0].to[1])) + } else if len(list) > 1 { + likelyLang[id].flags = isList + likelyLang[id].region = uint16(len(likelyLangList)) + likelyLang[id].script = uint8(len(list)) + for _, x := range list { + flags := uint8(0) + if len(x.from) > 1 { + if x.from[1] == x.to[2] { + flags = regionInFrom + } else { + flags = scriptInFrom + } + } + likelyLangList = append(likelyLangList, likelyScriptRegion{ + region: uint16(b.region.index(x.to[2])), + script: uint8(b.script.index(x.to[1])), + flags: flags, + }) + } + } + } + // TODO: merge suppressScript data with this table. + b.writeType(likelyScriptRegion{}) + b.writeSlice("likelyLang", likelyLang) + b.writeSlice("likelyLangList", likelyLangList) + + for id := range b.region.s { + list := regionToOther[id] + if len(list) == 1 { + likelyRegion[id].lang = uint16(b.langIndex(list[0].to[0])) + likelyRegion[id].script = uint8(b.script.index(list[0].to[1])) + if len(list[0].from) > 2 { + likelyRegion[id].flags = scriptInFrom + } + } else if len(list) > 1 { + likelyRegion[id].flags = isList + likelyRegion[id].lang = uint16(len(likelyRegionList)) + likelyRegion[id].script = uint8(len(list)) + for i, x := range list { + if len(x.from) == 2 && i != 0 || i > 0 && len(x.from) != 3 { + log.Fatalf("unspecified script must be first in list: %v at %d", x.from, i) + } + x := likelyLangScript{ + lang: uint16(b.langIndex(x.to[0])), + script: uint8(b.script.index(x.to[1])), + } + if len(list[0].from) > 2 { + x.flags = scriptInFrom + } + likelyRegionList = append(likelyRegionList, x) + } + } + } + b.writeType(likelyLangScript{}) + b.writeSlice("likelyRegion", likelyRegion) + b.writeSlice("likelyRegionList", likelyRegionList) + + b.writeType(likelyTag{}) + b.writeSlice("likelyRegionGroup", likelyRegionGroup) +} + +type mutualIntelligibility struct { + want, have uint16 + conf uint8 + oneway bool +} + +type scriptIntelligibility struct { + lang uint16 // langID or 0 if * + want, have uint8 + conf uint8 +} + +type sortByConf []mutualIntelligibility + +func (l sortByConf) Less(a, b int) bool { + return l[a].conf > l[b].conf +} + +func (l sortByConf) Swap(a, b int) { + l[a], l[b] = l[b], l[a] +} + +func (l sortByConf) Len() int { + return len(l) +} + +// toConf converts a percentage value [0, 100] to a confidence class. +func toConf(pct uint8) uint8 { + switch { + case pct == 100: + return 3 // Exact + case pct >= 90: + return 2 // High + case pct > 50: + return 1 // Low + default: + return 0 // No + } +} + +// writeMatchData writes tables with languages and scripts for which there is +// mutual intelligibility. The data is based on CLDR's languageMatching data. +// Note that we use a different algorithm than the one defined by CLDR and that +// we slightly modify the data. For example, we convert scores to confidence levels. +// We also drop all region-related data as we use a different algorithm to +// determine region equivalence. +func (b *builder) writeMatchData() { + b.writeType(mutualIntelligibility{}) + b.writeType(scriptIntelligibility{}) + lm := b.supp.LanguageMatching.LanguageMatches + cldr.MakeSlice(&lm).SelectAnyOf("type", "written") + + matchLang := []mutualIntelligibility{} + matchScript := []scriptIntelligibility{} + // Convert the languageMatch entries in lists keyed by desired language. + for _, m := range lm[0].LanguageMatch { + // Different versions of CLDR use different separators. + desired := strings.Replace(m.Desired, "-", "_", -1) + supported := strings.Replace(m.Supported, "-", "_", -1) + d := strings.Split(desired, "_") + s := strings.Split(supported, "_") + if len(d) != len(s) || len(d) > 2 { + // Skip all entries with regions and work around CLDR bug. + continue + } + pct, _ := strconv.ParseInt(m.Percent, 10, 8) + if len(d) == 2 && d[0] == s[0] && len(d[1]) == 4 { + // language-script pair. + lang := uint16(0) + if d[0] != "*" { + lang = uint16(b.langIndex(d[0])) + } + matchScript = append(matchScript, scriptIntelligibility{ + lang: lang, + want: uint8(b.script.index(d[1])), + have: uint8(b.script.index(s[1])), + conf: toConf(uint8(pct)), + }) + if m.Oneway != "true" { + matchScript = append(matchScript, scriptIntelligibility{ + lang: lang, + want: uint8(b.script.index(s[1])), + have: uint8(b.script.index(d[1])), + conf: toConf(uint8(pct)), + }) + } + } else if len(d) == 1 && d[0] != "*" { + if pct == 100 { + // nb == no is already handled by macro mapping. Check there + // really is only this case. + if d[0] != "no" || s[0] != "nb" { + log.Fatalf("unhandled equivalence %s == %s", s[0], d[0]) + } + continue + } + matchLang = append(matchLang, mutualIntelligibility{ + want: uint16(b.langIndex(d[0])), + have: uint16(b.langIndex(s[0])), + conf: uint8(pct), + oneway: m.Oneway == "true", + }) + } else { + // TODO: Handle other mappings. + a := []string{"*;*", "*_*;*_*", "es_MX;es_419"} + s := strings.Join([]string{desired, supported}, ";") + if i := sort.SearchStrings(a, s); i == len(a) || a[i] != s { + log.Printf("%q not handled", s) + } + } + } + sort.Stable(sortByConf(matchLang)) + // collapse percentage into confidence classes + for i, m := range matchLang { + matchLang[i].conf = toConf(m.conf) + } + b.writeSlice("matchLang", matchLang) + b.writeSlice("matchScript", matchScript) +} + +func (b *builder) writeRegionInclusionData() { + var ( + // mm holds for each group the set of groups with a distance of 1. + mm = make(map[int][]index) + + // containment holds for each group the transitive closure of + // containment of other groups. + containment = make(map[index][]index) + ) + for _, g := range b.supp.TerritoryContainment.Group { + // Skip UN and EURO zone as they are flattening the containment + // relationship. + if g.Type == "EZ" || g.Type == "UN" { + continue + } + group := b.region.index(g.Type) + groupIdx := b.groups[group] + for _, mem := range strings.Split(g.Contains, " ") { + r := b.region.index(mem) + mm[r] = append(mm[r], groupIdx) + if g, ok := b.groups[r]; ok { + mm[group] = append(mm[group], g) + containment[groupIdx] = append(containment[groupIdx], g) + } + } + } + + regionContainment := make([]uint32, len(b.groups)) + for _, g := range b.groups { + l := containment[g] + + // Compute the transitive closure of containment. + for i := 0; i < len(l); i++ { + l = append(l, containment[l[i]]...) + } + + // Compute the bitmask. + regionContainment[g] = 1 << g + for _, v := range l { + regionContainment[g] |= 1 << v + } + // log.Printf("%d: %X", g, regionContainment[g]) + } + b.writeSlice("regionContainment", regionContainment) + + regionInclusion := make([]uint8, len(b.region.s)) + bvs := make(map[uint32]index) + // Make the first bitvector positions correspond with the groups. + for r, i := range b.groups { + bv := uint32(1 << i) + for _, g := range mm[r] { + bv |= 1 << g + } + bvs[bv] = i + regionInclusion[r] = uint8(bvs[bv]) + } + for r := 1; r < len(b.region.s); r++ { + if _, ok := b.groups[r]; !ok { + bv := uint32(0) + for _, g := range mm[r] { + bv |= 1 << g + } + if bv == 0 { + // Pick the world for unspecified regions. + bv = 1 << b.groups[b.region.index("001")] + } + if _, ok := bvs[bv]; !ok { + bvs[bv] = index(len(bvs)) + } + regionInclusion[r] = uint8(bvs[bv]) + } + } + b.writeSlice("regionInclusion", regionInclusion) + regionInclusionBits := make([]uint32, len(bvs)) + for k, v := range bvs { + regionInclusionBits[v] = uint32(k) + } + // Add bit vectors for increasingly large distances until a fixed point is reached. + regionInclusionNext := []uint8{} + for i := 0; i < len(regionInclusionBits); i++ { + bits := regionInclusionBits[i] + next := bits + for i := uint(0); i < uint(len(b.groups)); i++ { + if bits&(1<<i) != 0 { + next |= regionInclusionBits[i] + } + } + if _, ok := bvs[next]; !ok { + bvs[next] = index(len(bvs)) + regionInclusionBits = append(regionInclusionBits, next) + } + regionInclusionNext = append(regionInclusionNext, uint8(bvs[next])) + } + b.writeSlice("regionInclusionBits", regionInclusionBits) + b.writeSlice("regionInclusionNext", regionInclusionNext) +} + +type parentRel struct { + lang uint16 + script uint8 + maxScript uint8 + toRegion uint16 + fromRegion []uint16 +} + +func (b *builder) writeParents() { + b.writeType(parentRel{}) + + parents := []parentRel{} + + // Construct parent overrides. + n := 0 + for _, p := range b.data.Supplemental().ParentLocales.ParentLocale { + // Skipping non-standard scripts to root is implemented using addTags. + if p.Parent == "root" { + continue + } + + sub := strings.Split(p.Parent, "_") + parent := parentRel{lang: b.langIndex(sub[0])} + if len(sub) == 2 { + // TODO: check that all undefined scripts are indeed Latn in these + // cases. + parent.maxScript = uint8(b.script.index("Latn")) + parent.toRegion = uint16(b.region.index(sub[1])) + } else { + parent.script = uint8(b.script.index(sub[1])) + parent.maxScript = parent.script + parent.toRegion = uint16(b.region.index(sub[2])) + } + for _, c := range strings.Split(p.Locales, " ") { + region := b.region.index(c[strings.LastIndex(c, "_")+1:]) + parent.fromRegion = append(parent.fromRegion, uint16(region)) + } + parents = append(parents, parent) + n += len(parent.fromRegion) + } + b.writeSliceAddSize("parents", n*2, parents) +} + +func main() { + gen.Init() + + gen.Repackage("gen_common.go", "common.go", "language") + + w := gen.NewCodeWriter() + defer w.WriteGoFile("tables.go", "language") + + fmt.Fprintln(w, `import "golang.org/x/text/internal/tag"`) + + b := newBuilder(w) + gen.WriteCLDRVersion(w) + + b.parseIndices() + b.writeType(fromTo{}) + b.writeLanguage() + b.writeScript() + b.writeRegion() + b.writeVariant() + // TODO: b.writeLocale() + b.computeRegionGroups() + b.writeLikelyData() + b.writeMatchData() + b.writeRegionInclusionData() + b.writeParents() +} diff --git a/vendor/golang.org/x/text/language/match.go b/vendor/golang.org/x/text/language/match.go new file mode 100644 index 0000000..8ad9505 --- /dev/null +++ b/vendor/golang.org/x/text/language/match.go @@ -0,0 +1,841 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import "errors" + +// Matcher is the interface that wraps the Match method. +// +// Match returns the best match for any of the given tags, along with +// a unique index associated with the returned tag and a confidence +// score. +type Matcher interface { + Match(t ...Tag) (tag Tag, index int, c Confidence) +} + +// Comprehends reports the confidence score for a speaker of a given language +// to being able to comprehend the written form of an alternative language. +func Comprehends(speaker, alternative Tag) Confidence { + _, _, c := NewMatcher([]Tag{alternative}).Match(speaker) + return c +} + +// NewMatcher returns a Matcher that matches an ordered list of preferred tags +// against a list of supported tags based on written intelligibility, closeness +// of dialect, equivalence of subtags and various other rules. It is initialized +// with the list of supported tags. The first element is used as the default +// value in case no match is found. +// +// Its Match method matches the first of the given Tags to reach a certain +// confidence threshold. The tags passed to Match should therefore be specified +// in order of preference. Extensions are ignored for matching. +// +// The index returned by the Match method corresponds to the index of the +// matched tag in t, but is augmented with the Unicode extension ('u')of the +// corresponding preferred tag. This allows user locale options to be passed +// transparently. +func NewMatcher(t []Tag) Matcher { + return newMatcher(t) +} + +func (m *matcher) Match(want ...Tag) (t Tag, index int, c Confidence) { + match, w, c := m.getBest(want...) + if match == nil { + t = m.default_.tag + } else { + t, index = match.tag, match.index + } + // Copy options from the user-provided tag into the result tag. This is hard + // to do after the fact, so we do it here. + // TODO: consider also adding in variants that are compatible with the + // matched language. + // TODO: Add back region if it is non-ambiguous? Or create another tag to + // preserve the region? + if u, ok := w.Extension('u'); ok { + t, _ = Raw.Compose(t, u) + } + return t, index, c +} + +type scriptRegionFlags uint8 + +const ( + isList = 1 << iota + scriptInFrom + regionInFrom +) + +func (t *Tag) setUndefinedLang(id langID) { + if t.lang == 0 { + t.lang = id + } +} + +func (t *Tag) setUndefinedScript(id scriptID) { + if t.script == 0 { + t.script = id + } +} + +func (t *Tag) setUndefinedRegion(id regionID) { + if t.region == 0 || t.region.contains(id) { + t.region = id + } +} + +// ErrMissingLikelyTagsData indicates no information was available +// to compute likely values of missing tags. +var ErrMissingLikelyTagsData = errors.New("missing likely tags data") + +// addLikelySubtags sets subtags to their most likely value, given the locale. +// In most cases this means setting fields for unknown values, but in some +// cases it may alter a value. It returns a ErrMissingLikelyTagsData error +// if the given locale cannot be expanded. +func (t Tag) addLikelySubtags() (Tag, error) { + id, err := addTags(t) + if err != nil { + return t, err + } else if id.equalTags(t) { + return t, nil + } + id.remakeString() + return id, nil +} + +// specializeRegion attempts to specialize a group region. +func specializeRegion(t *Tag) bool { + if i := regionInclusion[t.region]; i < nRegionGroups { + x := likelyRegionGroup[i] + if langID(x.lang) == t.lang && scriptID(x.script) == t.script { + t.region = regionID(x.region) + } + return true + } + return false +} + +func addTags(t Tag) (Tag, error) { + // We leave private use identifiers alone. + if t.private() { + return t, nil + } + if t.script != 0 && t.region != 0 { + if t.lang != 0 { + // already fully specified + specializeRegion(&t) + return t, nil + } + // Search matches for und-script-region. Note that for these cases + // region will never be a group so there is no need to check for this. + list := likelyRegion[t.region : t.region+1] + if x := list[0]; x.flags&isList != 0 { + list = likelyRegionList[x.lang : x.lang+uint16(x.script)] + } + for _, x := range list { + // Deviating from the spec. See match_test.go for details. + if scriptID(x.script) == t.script { + t.setUndefinedLang(langID(x.lang)) + return t, nil + } + } + } + if t.lang != 0 { + // Search matches for lang-script and lang-region, where lang != und. + if t.lang < langNoIndexOffset { + x := likelyLang[t.lang] + if x.flags&isList != 0 { + list := likelyLangList[x.region : x.region+uint16(x.script)] + if t.script != 0 { + for _, x := range list { + if scriptID(x.script) == t.script && x.flags&scriptInFrom != 0 { + t.setUndefinedRegion(regionID(x.region)) + return t, nil + } + } + } else if t.region != 0 { + count := 0 + goodScript := true + tt := t + for _, x := range list { + // We visit all entries for which the script was not + // defined, including the ones where the region was not + // defined. This allows for proper disambiguation within + // regions. + if x.flags&scriptInFrom == 0 && t.region.contains(regionID(x.region)) { + tt.region = regionID(x.region) + tt.setUndefinedScript(scriptID(x.script)) + goodScript = goodScript && tt.script == scriptID(x.script) + count++ + } + } + if count == 1 { + return tt, nil + } + // Even if we fail to find a unique Region, we might have + // an unambiguous script. + if goodScript { + t.script = tt.script + } + } + } + } + } else { + // Search matches for und-script. + if t.script != 0 { + x := likelyScript[t.script] + if x.region != 0 { + t.setUndefinedRegion(regionID(x.region)) + t.setUndefinedLang(langID(x.lang)) + return t, nil + } + } + // Search matches for und-region. If und-script-region exists, it would + // have been found earlier. + if t.region != 0 { + if i := regionInclusion[t.region]; i < nRegionGroups { + x := likelyRegionGroup[i] + if x.region != 0 { + t.setUndefinedLang(langID(x.lang)) + t.setUndefinedScript(scriptID(x.script)) + t.region = regionID(x.region) + } + } else { + x := likelyRegion[t.region] + if x.flags&isList != 0 { + x = likelyRegionList[x.lang] + } + if x.script != 0 && x.flags != scriptInFrom { + t.setUndefinedLang(langID(x.lang)) + t.setUndefinedScript(scriptID(x.script)) + return t, nil + } + } + } + } + + // Search matches for lang. + if t.lang < langNoIndexOffset { + x := likelyLang[t.lang] + if x.flags&isList != 0 { + x = likelyLangList[x.region] + } + if x.region != 0 { + t.setUndefinedScript(scriptID(x.script)) + t.setUndefinedRegion(regionID(x.region)) + } + specializeRegion(&t) + if t.lang == 0 { + t.lang = _en // default language + } + return t, nil + } + return t, ErrMissingLikelyTagsData +} + +func (t *Tag) setTagsFrom(id Tag) { + t.lang = id.lang + t.script = id.script + t.region = id.region +} + +// minimize removes the region or script subtags from t such that +// t.addLikelySubtags() == t.minimize().addLikelySubtags(). +func (t Tag) minimize() (Tag, error) { + t, err := minimizeTags(t) + if err != nil { + return t, err + } + t.remakeString() + return t, nil +} + +// minimizeTags mimics the behavior of the ICU 51 C implementation. +func minimizeTags(t Tag) (Tag, error) { + if t.equalTags(und) { + return t, nil + } + max, err := addTags(t) + if err != nil { + return t, err + } + for _, id := range [...]Tag{ + {lang: t.lang}, + {lang: t.lang, region: t.region}, + {lang: t.lang, script: t.script}, + } { + if x, err := addTags(id); err == nil && max.equalTags(x) { + t.setTagsFrom(id) + break + } + } + return t, nil +} + +// Tag Matching +// CLDR defines an algorithm for finding the best match between two sets of language +// tags. The basic algorithm defines how to score a possible match and then find +// the match with the best score +// (see http://www.unicode.org/reports/tr35/#LanguageMatching). +// Using scoring has several disadvantages. The scoring obfuscates the importance of +// the various factors considered, making the algorithm harder to understand. Using +// scoring also requires the full score to be computed for each pair of tags. +// +// We will use a different algorithm which aims to have the following properties: +// - clarity on the precedence of the various selection factors, and +// - improved performance by allowing early termination of a comparison. +// +// Matching algorithm (overview) +// Input: +// - supported: a set of supported tags +// - default: the default tag to return in case there is no match +// - desired: list of desired tags, ordered by preference, starting with +// the most-preferred. +// +// Algorithm: +// 1) Set the best match to the lowest confidence level +// 2) For each tag in "desired": +// a) For each tag in "supported": +// 1) compute the match between the two tags. +// 2) if the match is better than the previous best match, replace it +// with the new match. (see next section) +// b) if the current best match is above a certain threshold, return this +// match without proceeding to the next tag in "desired". [See Note 1] +// 3) If the best match so far is below a certain threshold, return "default". +// +// Ranking: +// We use two phases to determine whether one pair of tags are a better match +// than another pair of tags. First, we determine a rough confidence level. If the +// levels are different, the one with the highest confidence wins. +// Second, if the rough confidence levels are identical, we use a set of tie-breaker +// rules. +// +// The confidence level of matching a pair of tags is determined by finding the +// lowest confidence level of any matches of the corresponding subtags (the +// result is deemed as good as its weakest link). +// We define the following levels: +// Exact - An exact match of a subtag, before adding likely subtags. +// MaxExact - An exact match of a subtag, after adding likely subtags. +// [See Note 2]. +// High - High level of mutual intelligibility between different subtag +// variants. +// Low - Low level of mutual intelligibility between different subtag +// variants. +// No - No mutual intelligibility. +// +// The following levels can occur for each type of subtag: +// Base: Exact, MaxExact, High, Low, No +// Script: Exact, MaxExact [see Note 3], Low, No +// Region: Exact, MaxExact, High +// Variant: Exact, High +// Private: Exact, No +// +// Any result with a confidence level of Low or higher is deemed a possible match. +// Once a desired tag matches any of the supported tags with a level of MaxExact +// or higher, the next desired tag is not considered (see Step 2.b). +// Note that CLDR provides languageMatching data that defines close equivalence +// classes for base languages, scripts and regions. +// +// Tie-breaking +// If we get the same confidence level for two matches, we apply a sequence of +// tie-breaking rules. The first that succeeds defines the result. The rules are +// applied in the following order. +// 1) Original language was defined and was identical. +// 2) Original region was defined and was identical. +// 3) Distance between two maximized regions was the smallest. +// 4) Original script was defined and was identical. +// 5) Distance from want tag to have tag using the parent relation [see Note 5.] +// If there is still no winner after these rules are applied, the first match +// found wins. +// +// Notes: +// [1] Note that even if we may not have a perfect match, if a match is above a +// certain threshold, it is considered a better match than any other match +// to a tag later in the list of preferred language tags. +// [2] In practice, as matching of Exact is done in a separate phase from +// matching the other levels, we reuse the Exact level to mean MaxExact in +// the second phase. As a consequence, we only need the levels defined by +// the Confidence type. The MaxExact confidence level is mapped to High in +// the public API. +// [3] We do not differentiate between maximized script values that were derived +// from suppressScript versus most likely tag data. We determined that in +// ranking the two, one ranks just after the other. Moreover, the two cannot +// occur concurrently. As a consequence, they are identical for practical +// purposes. +// [4] In case of deprecated, macro-equivalents and legacy mappings, we assign +// the MaxExact level to allow iw vs he to still be a closer match than +// en-AU vs en-US, for example. +// [5] In CLDR a locale inherits fields that are unspecified for this locale +// from its parent. Therefore, if a locale is a parent of another locale, +// it is a strong measure for closeness, especially when no other tie +// breaker rule applies. One could also argue it is inconsistent, for +// example, when pt-AO matches pt (which CLDR equates with pt-BR), even +// though its parent is pt-PT according to the inheritance rules. +// +// Implementation Details: +// There are several performance considerations worth pointing out. Most notably, +// we preprocess as much as possible (within reason) at the time of creation of a +// matcher. This includes: +// - creating a per-language map, which includes data for the raw base language +// and its canonicalized variant (if applicable), +// - expanding entries for the equivalence classes defined in CLDR's +// languageMatch data. +// The per-language map ensures that typically only a very small number of tags +// need to be considered. The pre-expansion of canonicalized subtags and +// equivalence classes reduces the amount of map lookups that need to be done at +// runtime. + +// matcher keeps a set of supported language tags, indexed by language. +type matcher struct { + default_ *haveTag + index map[langID]*matchHeader + passSettings bool +} + +// matchHeader has the lists of tags for exact matches and matches based on +// maximized and canonicalized tags for a given language. +type matchHeader struct { + exact []*haveTag + max []*haveTag +} + +// haveTag holds a supported Tag and its maximized script and region. The maximized +// or canonicalized language is not stored as it is not needed during matching. +type haveTag struct { + tag Tag + + // index of this tag in the original list of supported tags. + index int + + // conf is the maximum confidence that can result from matching this haveTag. + // When conf < Exact this means it was inserted after applying a CLDR equivalence rule. + conf Confidence + + // Maximized region and script. + maxRegion regionID + maxScript scriptID + + // altScript may be checked as an alternative match to maxScript. If altScript + // matches, the confidence level for this match is Low. Theoretically there + // could be multiple alternative scripts. This does not occur in practice. + altScript scriptID + + // nextMax is the index of the next haveTag with the same maximized tags. + nextMax uint16 +} + +func makeHaveTag(tag Tag, index int) (haveTag, langID) { + max := tag + if tag.lang != 0 { + max, _ = max.canonicalize(All) + max, _ = addTags(max) + max.remakeString() + } + return haveTag{tag, index, Exact, max.region, max.script, altScript(max.lang, max.script), 0}, max.lang +} + +// altScript returns an alternative script that may match the given script with +// a low confidence. At the moment, the langMatch data allows for at most one +// script to map to another and we rely on this to keep the code simple. +func altScript(l langID, s scriptID) scriptID { + for _, alt := range matchScript { + if (alt.lang == 0 || langID(alt.lang) == l) && scriptID(alt.have) == s { + return scriptID(alt.want) + } + } + return 0 +} + +// addIfNew adds a haveTag to the list of tags only if it is a unique tag. +// Tags that have the same maximized values are linked by index. +func (h *matchHeader) addIfNew(n haveTag, exact bool) { + // Don't add new exact matches. + for _, v := range h.exact { + if v.tag.equalsRest(n.tag) { + return + } + } + if exact { + h.exact = append(h.exact, &n) + } + // Allow duplicate maximized tags, but create a linked list to allow quickly + // comparing the equivalents and bail out. + for i, v := range h.max { + if v.maxScript == n.maxScript && + v.maxRegion == n.maxRegion && + v.tag.variantOrPrivateTagStr() == n.tag.variantOrPrivateTagStr() { + for h.max[i].nextMax != 0 { + i = int(h.max[i].nextMax) + } + h.max[i].nextMax = uint16(len(h.max)) + break + } + } + h.max = append(h.max, &n) +} + +// header returns the matchHeader for the given language. It creates one if +// it doesn't already exist. +func (m *matcher) header(l langID) *matchHeader { + if h := m.index[l]; h != nil { + return h + } + h := &matchHeader{} + m.index[l] = h + return h +} + +// newMatcher builds an index for the given supported tags and returns it as +// a matcher. It also expands the index by considering various equivalence classes +// for a given tag. +func newMatcher(supported []Tag) *matcher { + m := &matcher{ + index: make(map[langID]*matchHeader), + } + if len(supported) == 0 { + m.default_ = &haveTag{} + return m + } + // Add supported languages to the index. Add exact matches first to give + // them precedence. + for i, tag := range supported { + pair, _ := makeHaveTag(tag, i) + m.header(tag.lang).addIfNew(pair, true) + } + m.default_ = m.header(supported[0].lang).exact[0] + for i, tag := range supported { + pair, max := makeHaveTag(tag, i) + if max != tag.lang { + m.header(max).addIfNew(pair, false) + } + } + + // update is used to add indexes in the map for equivalent languages. + // If force is true, the update will also apply to derived entries. To + // avoid applying a "transitive closure", use false. + update := func(want, have uint16, conf Confidence, force bool) { + if hh := m.index[langID(have)]; hh != nil { + if !force && len(hh.exact) == 0 { + return + } + hw := m.header(langID(want)) + for _, ht := range hh.max { + v := *ht + if conf < v.conf { + v.conf = conf + } + v.nextMax = 0 // this value needs to be recomputed + if v.altScript != 0 { + v.altScript = altScript(langID(want), v.maxScript) + } + hw.addIfNew(v, conf == Exact && len(hh.exact) > 0) + } + } + } + + // Add entries for languages with mutual intelligibility as defined by CLDR's + // languageMatch data. + for _, ml := range matchLang { + update(ml.want, ml.have, Confidence(ml.conf), false) + if !ml.oneway { + update(ml.have, ml.want, Confidence(ml.conf), false) + } + } + + // Add entries for possible canonicalizations. This is an optimization to + // ensure that only one map lookup needs to be done at runtime per desired tag. + // First we match deprecated equivalents. If they are perfect equivalents + // (their canonicalization simply substitutes a different language code, but + // nothing else), the match confidence is Exact, otherwise it is High. + for i, lm := range langAliasMap { + if lm.from == _sh { + continue + } + + // If deprecated codes match and there is no fiddling with the script or + // or region, we consider it an exact match. + conf := Exact + if langAliasTypes[i] != langMacro { + if !isExactEquivalent(langID(lm.from)) { + conf = High + } + update(lm.to, lm.from, conf, true) + } + update(lm.from, lm.to, conf, true) + } + return m +} + +// getBest gets the best matching tag in m for any of the given tags, taking into +// account the order of preference of the given tags. +func (m *matcher) getBest(want ...Tag) (got *haveTag, orig Tag, c Confidence) { + best := bestMatch{} + for _, w := range want { + var max Tag + // Check for exact match first. + h := m.index[w.lang] + if w.lang != 0 { + // Base language is defined. + if h == nil { + continue + } + for i := range h.exact { + have := h.exact[i] + if have.tag.equalsRest(w) { + return have, w, Exact + } + } + max, _ = w.canonicalize(Legacy | Deprecated) + max, _ = addTags(max) + } else { + // Base language is not defined. + if h != nil { + for i := range h.exact { + have := h.exact[i] + if have.tag.equalsRest(w) { + return have, w, Exact + } + } + } + if w.script == 0 && w.region == 0 { + // We skip all tags matching und for approximate matching, including + // private tags. + continue + } + max, _ = addTags(w) + if h = m.index[max.lang]; h == nil { + continue + } + } + // Check for match based on maximized tag. + for i := range h.max { + have := h.max[i] + best.update(have, w, max.script, max.region) + if best.conf == Exact { + for have.nextMax != 0 { + have = h.max[have.nextMax] + best.update(have, w, max.script, max.region) + } + return best.have, best.want, High + } + } + } + if best.conf <= No { + if len(want) != 0 { + return nil, want[0], No + } + return nil, Tag{}, No + } + return best.have, best.want, best.conf +} + +// bestMatch accumulates the best match so far. +type bestMatch struct { + have *haveTag + want Tag + conf Confidence + // Cached results from applying tie-breaking rules. + origLang bool + origReg bool + regDist uint8 + origScript bool + parentDist uint8 // 255 if have is not an ancestor of want tag. +} + +// update updates the existing best match if the new pair is considered to be a +// better match. +// To determine if the given pair is a better match, it first computes the rough +// confidence level. If this surpasses the current match, it will replace it and +// update the tie-breaker rule cache. If there is a tie, it proceeds with applying +// a series of tie-breaker rules. If there is no conclusive winner after applying +// the tie-breaker rules, it leaves the current match as the preferred match. +func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion regionID) { + // Bail if the maximum attainable confidence is below that of the current best match. + c := have.conf + if c < m.conf { + return + } + if have.maxScript != maxScript { + // There is usually very little comprehension between different scripts. + // In a few cases there may still be Low comprehension. This possibility is + // pre-computed and stored in have.altScript. + if Low < m.conf || have.altScript != maxScript { + return + } + c = Low + } else if have.maxRegion != maxRegion { + // There is usually a small difference between languages across regions. + // We use the region distance (below) to disambiguate between equal matches. + if High < c { + c = High + } + } + + // We store the results of the computations of the tie-breaker rules along + // with the best match. There is no need to do the checks once we determine + // we have a winner, but we do still need to do the tie-breaker computations. + // We use "beaten" to keep track if we still need to do the checks. + beaten := false // true if the new pair defeats the current one. + if c != m.conf { + if c < m.conf { + return + } + beaten = true + } + + // Tie-breaker rules: + // We prefer if the pre-maximized language was specified and identical. + origLang := have.tag.lang == tag.lang && tag.lang != 0 + if !beaten && m.origLang != origLang { + if m.origLang { + return + } + beaten = true + } + + // We prefer if the pre-maximized region was specified and identical. + origReg := have.tag.region == tag.region && tag.region != 0 + if !beaten && m.origReg != origReg { + if m.origReg { + return + } + beaten = true + } + + // Next we prefer smaller distances between regions, as defined by regionDist. + regDist := regionDist(have.maxRegion, maxRegion, tag.lang) + if !beaten && m.regDist != regDist { + if regDist > m.regDist { + return + } + beaten = true + } + + // Next we prefer if the pre-maximized script was specified and identical. + origScript := have.tag.script == tag.script && tag.script != 0 + if !beaten && m.origScript != origScript { + if m.origScript { + return + } + beaten = true + } + + // Finally we prefer tags which have a closer parent relationship. + parentDist := parentDistance(have.tag.region, tag) + if !beaten && m.parentDist != parentDist { + if parentDist > m.parentDist { + return + } + beaten = true + } + + // Update m to the newly found best match. + if beaten { + m.have = have + m.want = tag + m.conf = c + m.origLang = origLang + m.origReg = origReg + m.origScript = origScript + m.regDist = regDist + m.parentDist = parentDist + } +} + +// parentDistance returns the number of times Parent must be called before the +// regions match. It is assumed that it has already been checked that lang and +// script are identical. If haveRegion does not occur in the ancestor chain of +// tag, it returns 255. +func parentDistance(haveRegion regionID, tag Tag) uint8 { + p := tag.Parent() + d := uint8(1) + for haveRegion != p.region { + if p.region == 0 { + return 255 + } + p = p.Parent() + d++ + } + return d +} + +// regionDist wraps regionDistance with some exceptions to the algorithmic distance. +func regionDist(a, b regionID, lang langID) uint8 { + if lang == _en { + // Two variants of non-US English are close to each other, regardless of distance. + if a != _US && b != _US { + return 2 + } + } + return uint8(regionDistance(a, b)) +} + +// regionDistance computes the distance between two regions based on the +// distance in the graph of region containments as defined in CLDR. It iterates +// over increasingly inclusive sets of groups, represented as bit vectors, until +// the source bit vector has bits in common with the destination vector. +func regionDistance(a, b regionID) int { + if a == b { + return 0 + } + p, q := regionInclusion[a], regionInclusion[b] + if p < nRegionGroups { + p, q = q, p + } + set := regionInclusionBits + if q < nRegionGroups && set[p]&(1<<q) != 0 { + return 1 + } + d := 2 + for goal := set[q]; set[p]&goal == 0; p = regionInclusionNext[p] { + d++ + } + return d +} + +func (t Tag) variants() string { + if t.pVariant == 0 { + return "" + } + return t.str[t.pVariant:t.pExt] +} + +// variantOrPrivateTagStr returns variants or private use tags. +func (t Tag) variantOrPrivateTagStr() string { + if t.pExt > 0 { + return t.str[t.pVariant:t.pExt] + } + return t.str[t.pVariant:] +} + +// equalsRest compares everything except the language. +func (a Tag) equalsRest(b Tag) bool { + // TODO: don't include extensions in this comparison. To do this efficiently, + // though, we should handle private tags separately. + return a.script == b.script && a.region == b.region && a.variantOrPrivateTagStr() == b.variantOrPrivateTagStr() +} + +// isExactEquivalent returns true if canonicalizing the language will not alter +// the script or region of a tag. +func isExactEquivalent(l langID) bool { + for _, o := range notEquivalent { + if o == l { + return false + } + } + return true +} + +var notEquivalent []langID + +func init() { + // Create a list of all languages for which canonicalization may alter the + // script or region. + for _, lm := range langAliasMap { + tag := Tag{lang: langID(lm.from)} + if tag, _ = tag.canonicalize(All); tag.script != 0 || tag.region != 0 { + notEquivalent = append(notEquivalent, langID(lm.from)) + } + } +} diff --git a/vendor/golang.org/x/text/language/match_test.go b/vendor/golang.org/x/text/language/match_test.go new file mode 100644 index 0000000..26cc2af --- /dev/null +++ b/vendor/golang.org/x/text/language/match_test.go @@ -0,0 +1,409 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import ( + "bytes" + "flag" + "fmt" + "strings" + "testing" + + "golang.org/x/text/internal/testtext" +) + +var verbose = flag.Bool("verbose", false, "set to true to print the internal tables of matchers") + +func TestAddLikelySubtags(t *testing.T) { + tests := []struct{ in, out string }{ + {"aa", "aa-Latn-ET"}, + {"aa-Latn", "aa-Latn-ET"}, + {"aa-Arab", "aa-Arab-ET"}, + {"aa-Arab-ER", "aa-Arab-ER"}, + {"kk", "kk-Cyrl-KZ"}, + {"kk-CN", "kk-Arab-CN"}, + {"cmn", "cmn"}, + {"zh-AU", "zh-Hant-AU"}, + {"zh-VN", "zh-Hant-VN"}, + {"zh-SG", "zh-Hans-SG"}, + {"zh-Hant", "zh-Hant-TW"}, + {"zh-Hani", "zh-Hani-CN"}, + {"und-Hani", "zh-Hani-CN"}, + {"und", "en-Latn-US"}, + {"und-GB", "en-Latn-GB"}, + {"und-CW", "pap-Latn-CW"}, + {"und-YT", "fr-Latn-YT"}, + {"und-Arab", "ar-Arab-EG"}, + {"und-AM", "hy-Armn-AM"}, + {"und-002", "en-Latn-NG"}, + {"und-Latn-002", "en-Latn-NG"}, + {"en-Latn-002", "en-Latn-NG"}, + {"en-002", "en-Latn-NG"}, + {"en-001", "en-Latn-US"}, + {"und-003", "en-Latn-US"}, + {"und-GB", "en-Latn-GB"}, + {"Latn-001", "en-Latn-US"}, + {"en-001", "en-Latn-US"}, + {"es-419", "es-Latn-419"}, + {"he-145", "he-Hebr-IL"}, + {"ky-145", "ky-Latn-TR"}, + {"kk", "kk-Cyrl-KZ"}, + // Don't specialize duplicate and ambiguous matches. + {"kk-034", "kk-Arab-034"}, // Matches IR and AF. Both are Arab. + {"ku-145", "ku-Latn-TR"}, // Matches IQ, TR, and LB, but kk -> TR. + {"und-Arab-CC", "ms-Arab-CC"}, + {"und-Arab-GB", "ks-Arab-GB"}, + {"und-Hans-CC", "zh-Hans-CC"}, + {"und-CC", "en-Latn-CC"}, + {"sr", "sr-Cyrl-RS"}, + {"sr-151", "sr-Latn-151"}, // Matches RO and RU. + // We would like addLikelySubtags to generate the same results if the input + // only changes by adding tags that would otherwise have been added + // by the expansion. + // In other words: + // und-AA -> xx-Scrp-AA implies und-Scrp-AA -> xx-Scrp-AA + // und-AA -> xx-Scrp-AA implies xx-AA -> xx-Scrp-AA + // und-Scrp -> xx-Scrp-AA implies und-Scrp-AA -> xx-Scrp-AA + // und-Scrp -> xx-Scrp-AA implies xx-Scrp -> xx-Scrp-AA + // xx -> xx-Scrp-AA implies xx-Scrp -> xx-Scrp-AA + // xx -> xx-Scrp-AA implies xx-AA -> xx-Scrp-AA + // + // The algorithm specified in + // http://unicode.org/reports/tr35/tr35-9.html#Supplemental_Data, + // Section C.10, does not handle the first case. For example, + // the CLDR data contains an entry und-BJ -> fr-Latn-BJ, but not + // there is no rule for und-Latn-BJ. According to spec, und-Latn-BJ + // would expand to en-Latn-BJ, violating the aforementioned principle. + // We deviate from the spec by letting und-Scrp-AA expand to xx-Scrp-AA + // if a rule of the form und-AA -> xx-Scrp-AA is defined. + // Note that as of version 23, CLDR has some explicitly specified + // entries that do not conform to these rules. The implementation + // will not correct these explicit inconsistencies. A later versions of CLDR + // is supposed to fix this. + {"und-Latn-BJ", "fr-Latn-BJ"}, + {"und-Bugi-ID", "bug-Bugi-ID"}, + // regions, scripts and languages without definitions + {"und-Arab-AA", "ar-Arab-AA"}, + {"und-Afak-RE", "fr-Afak-RE"}, + {"und-Arab-GB", "ks-Arab-GB"}, + {"abp-Arab-GB", "abp-Arab-GB"}, + // script has preference over region + {"und-Arab-NL", "ar-Arab-NL"}, + {"zza", "zza-Latn-TR"}, + // preserve variants and extensions + {"de-1901", "de-Latn-DE-1901"}, + {"de-x-abc", "de-Latn-DE-x-abc"}, + {"de-1901-x-abc", "de-Latn-DE-1901-x-abc"}, + {"x-abc", "x-abc"}, // TODO: is this the desired behavior? + } + for i, tt := range tests { + in, _ := Parse(tt.in) + out, _ := Parse(tt.out) + in, _ = in.addLikelySubtags() + if in.String() != out.String() { + t.Errorf("%d: add(%s) was %s; want %s", i, tt.in, in, tt.out) + } + } +} +func TestMinimize(t *testing.T) { + tests := []struct{ in, out string }{ + {"aa", "aa"}, + {"aa-Latn", "aa"}, + {"aa-Latn-ET", "aa"}, + {"aa-ET", "aa"}, + {"aa-Arab", "aa-Arab"}, + {"aa-Arab-ER", "aa-Arab-ER"}, + {"aa-Arab-ET", "aa-Arab"}, + {"und", "und"}, + {"und-Latn", "und"}, + {"und-Latn-US", "und"}, + {"en-Latn-US", "en"}, + {"cmn", "cmn"}, + {"cmn-Hans", "cmn-Hans"}, + {"cmn-Hant", "cmn-Hant"}, + {"zh-AU", "zh-AU"}, + {"zh-VN", "zh-VN"}, + {"zh-SG", "zh-SG"}, + {"zh-Hant", "zh-Hant"}, + {"zh-Hant-TW", "zh-TW"}, + {"zh-Hans", "zh"}, + {"zh-Hani", "zh-Hani"}, + {"und-Hans", "und-Hans"}, + {"und-Hani", "und-Hani"}, + + {"und-CW", "und-CW"}, + {"und-YT", "und-YT"}, + {"und-Arab", "und-Arab"}, + {"und-AM", "und-AM"}, + {"und-Arab-CC", "und-Arab-CC"}, + {"und-CC", "und-CC"}, + {"und-Latn-BJ", "und-BJ"}, + {"und-Bugi-ID", "und-Bugi"}, + {"bug-Bugi-ID", "bug-Bugi"}, + // regions, scripts and languages without definitions + {"und-Arab-AA", "und-Arab-AA"}, + // preserve variants and extensions + {"de-Latn-1901", "de-1901"}, + {"de-Latn-x-abc", "de-x-abc"}, + {"de-DE-1901-x-abc", "de-1901-x-abc"}, + {"x-abc", "x-abc"}, // TODO: is this the desired behavior? + } + for i, tt := range tests { + in, _ := Parse(tt.in) + out, _ := Parse(tt.out) + min, _ := in.minimize() + if min.String() != out.String() { + t.Errorf("%d: min(%s) was %s; want %s", i, tt.in, min, tt.out) + } + max, _ := min.addLikelySubtags() + if x, _ := in.addLikelySubtags(); x.String() != max.String() { + t.Errorf("%d: max(min(%s)) = %s; want %s", i, tt.in, max, x) + } + } +} + +func TestRegionDistance(t *testing.T) { + tests := []struct { + a, b string + d int + }{ + {"NL", "NL", 0}, + {"NL", "EU", 1}, + {"EU", "NL", 1}, + {"005", "005", 0}, + {"NL", "BE", 2}, + {"CO", "005", 1}, + {"005", "CO", 1}, + {"CO", "419", 2}, + {"419", "CO", 2}, + {"005", "419", 1}, + {"419", "005", 1}, + {"001", "013", 2}, + {"013", "001", 2}, + {"CO", "CW", 4}, + {"CO", "PW", 6}, + {"CO", "BV", 6}, + {"ZZ", "QQ", 2}, + } + for i, tt := range tests { + testtext.Run(t, tt.a+"/"+tt.b, func(t *testing.T) { + ra, _ := getRegionID([]byte(tt.a)) + rb, _ := getRegionID([]byte(tt.b)) + if d := regionDistance(ra, rb); d != tt.d { + t.Errorf("%d: d(%s, %s) = %v; want %v", i, tt.a, tt.b, d, tt.d) + } + }) + } +} + +func TestParentDistance(t *testing.T) { + tests := []struct { + parent string + tag string + d uint8 + }{ + {"en-001", "en-AU", 1}, + {"pt-PT", "pt-AO", 1}, + {"pt", "pt-AO", 2}, + {"en-AU", "en-GB", 255}, + {"en-NL", "en-AU", 255}, + // Note that pt-BR and en-US are not automatically minimized. + {"pt-BR", "pt-AO", 255}, + {"en-US", "en-AU", 255}, + } + for _, tt := range tests { + r := Raw.MustParse(tt.parent).region + tag := Raw.MustParse(tt.tag) + if d := parentDistance(r, tag); d != tt.d { + t.Errorf("d(%s, %s) was %d; want %d", r, tag, d, tt.d) + } + } +} + +// Implementation of String methods for various types for debugging purposes. + +func (m *matcher) String() string { + w := &bytes.Buffer{} + fmt.Fprintln(w, "Default:", m.default_) + for tag, h := range m.index { + fmt.Fprintf(w, " %s: %v\n", tag, h) + } + return w.String() +} + +func (h *matchHeader) String() string { + w := &bytes.Buffer{} + fmt.Fprintf(w, "exact: ") + for _, h := range h.exact { + fmt.Fprintf(w, "%v, ", h) + } + fmt.Fprint(w, "; max: ") + for _, h := range h.max { + fmt.Fprintf(w, "%v, ", h) + } + return w.String() +} + +func (t haveTag) String() string { + return fmt.Sprintf("%v:%d:%v:%v-%v|%v", t.tag, t.index, t.conf, t.maxRegion, t.maxScript, t.altScript) +} + +func parseSupported(list string) (out []Tag) { + for _, s := range strings.Split(list, ",") { + out = append(out, mk(strings.TrimSpace(s))) + } + return out +} + +// The test set for TestBestMatch is defined in data_test.go. +func TestBestMatch(t *testing.T) { + for i, tt := range matchTests { + supported := parseSupported(tt.supported) + m := newMatcher(supported) + if *verbose { + fmt.Printf("%s:\n%v\n", tt.comment, m) + } + for _, tm := range tt.test { + tag, _, conf := m.Match(parseSupported(tm.desired)...) + if tag.String() != tm.match { + t.Errorf("%d:%s: find %s in %q: have %s; want %s (%v)\n", i, tt.comment, tm.desired, tt.supported, tag, tm.match, conf) + } + } + } +} + +func TestBestMatchAlloc(t *testing.T) { + m := NewMatcher(parseSupported("en sr nl")) + // Go allocates when creating a list of tags from a single tag! + list := []Tag{English} + avg := testtext.AllocsPerRun(1, func() { + m.Match(list...) + }) + if avg > 0 { + t.Errorf("got %f; want 0", avg) + } +} + +var benchHave = []Tag{ + mk("en"), + mk("en-GB"), + mk("za"), + mk("zh-Hant"), + mk("zh-Hans-CN"), + mk("zh"), + mk("zh-HK"), + mk("ar-MK"), + mk("en-CA"), + mk("fr-CA"), + mk("fr-US"), + mk("fr-CH"), + mk("fr"), + mk("lt"), + mk("lv"), + mk("iw"), + mk("iw-NL"), + mk("he"), + mk("he-IT"), + mk("tlh"), + mk("ja"), + mk("ja-Jpan"), + mk("ja-Jpan-JP"), + mk("de"), + mk("de-CH"), + mk("de-AT"), + mk("de-DE"), + mk("sr"), + mk("sr-Latn"), + mk("sr-Cyrl"), + mk("sr-ME"), +} + +var benchWant = [][]Tag{ + []Tag{ + mk("en"), + }, + []Tag{ + mk("en-AU"), + mk("de-HK"), + mk("nl"), + mk("fy"), + mk("lv"), + }, + []Tag{ + mk("en-AU"), + mk("de-HK"), + mk("nl"), + mk("fy"), + }, + []Tag{ + mk("ja-Hant"), + mk("da-HK"), + mk("nl"), + mk("zh-TW"), + }, + []Tag{ + mk("ja-Hant"), + mk("da-HK"), + mk("nl"), + mk("hr"), + }, +} + +func BenchmarkMatch(b *testing.B) { + m := newMatcher(benchHave) + for i := 0; i < b.N; i++ { + for _, want := range benchWant { + m.getBest(want...) + } + } +} + +func BenchmarkMatchExact(b *testing.B) { + want := mk("en") + m := newMatcher(benchHave) + for i := 0; i < b.N; i++ { + m.getBest(want) + } +} + +func BenchmarkMatchAltLanguagePresent(b *testing.B) { + want := mk("hr") + m := newMatcher(benchHave) + for i := 0; i < b.N; i++ { + m.getBest(want) + } +} + +func BenchmarkMatchAltLanguageNotPresent(b *testing.B) { + want := mk("nn") + m := newMatcher(benchHave) + for i := 0; i < b.N; i++ { + m.getBest(want) + } +} + +func BenchmarkMatchAltScriptPresent(b *testing.B) { + want := mk("zh-Hant-CN") + m := newMatcher(benchHave) + for i := 0; i < b.N; i++ { + m.getBest(want) + } +} + +func BenchmarkMatchAltScriptNotPresent(b *testing.B) { + want := mk("fr-Cyrl") + m := newMatcher(benchHave) + for i := 0; i < b.N; i++ { + m.getBest(want) + } +} + +func BenchmarkMatchLimitedExact(b *testing.B) { + want := []Tag{mk("he-NL"), mk("iw-NL")} + m := newMatcher(benchHave) + for i := 0; i < b.N; i++ { + m.getBest(want...) + } +} diff --git a/vendor/golang.org/x/text/language/parse.go b/vendor/golang.org/x/text/language/parse.go new file mode 100644 index 0000000..cfa28f5 --- /dev/null +++ b/vendor/golang.org/x/text/language/parse.go @@ -0,0 +1,859 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import ( + "bytes" + "errors" + "fmt" + "sort" + "strconv" + "strings" + + "golang.org/x/text/internal/tag" +) + +// isAlpha returns true if the byte is not a digit. +// b must be an ASCII letter or digit. +func isAlpha(b byte) bool { + return b > '9' +} + +// isAlphaNum returns true if the string contains only ASCII letters or digits. +func isAlphaNum(s []byte) bool { + for _, c := range s { + if !('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9') { + return false + } + } + return true +} + +// errSyntax is returned by any of the parsing functions when the +// input is not well-formed, according to BCP 47. +// TODO: return the position at which the syntax error occurred? +var errSyntax = errors.New("language: tag is not well-formed") + +// ValueError is returned by any of the parsing functions when the +// input is well-formed but the respective subtag is not recognized +// as a valid value. +type ValueError struct { + v [8]byte +} + +func mkErrInvalid(s []byte) error { + var e ValueError + copy(e.v[:], s) + return e +} + +func (e ValueError) tag() []byte { + n := bytes.IndexByte(e.v[:], 0) + if n == -1 { + n = 8 + } + return e.v[:n] +} + +// Error implements the error interface. +func (e ValueError) Error() string { + return fmt.Sprintf("language: subtag %q is well-formed but unknown", e.tag()) +} + +// Subtag returns the subtag for which the error occurred. +func (e ValueError) Subtag() string { + return string(e.tag()) +} + +// scanner is used to scan BCP 47 tokens, which are separated by _ or -. +type scanner struct { + b []byte + bytes [max99thPercentileSize]byte + token []byte + start int // start position of the current token + end int // end position of the current token + next int // next point for scan + err error + done bool +} + +func makeScannerString(s string) scanner { + scan := scanner{} + if len(s) <= len(scan.bytes) { + scan.b = scan.bytes[:copy(scan.bytes[:], s)] + } else { + scan.b = []byte(s) + } + scan.init() + return scan +} + +// makeScanner returns a scanner using b as the input buffer. +// b is not copied and may be modified by the scanner routines. +func makeScanner(b []byte) scanner { + scan := scanner{b: b} + scan.init() + return scan +} + +func (s *scanner) init() { + for i, c := range s.b { + if c == '_' { + s.b[i] = '-' + } + } + s.scan() +} + +// restToLower converts the string between start and end to lower case. +func (s *scanner) toLower(start, end int) { + for i := start; i < end; i++ { + c := s.b[i] + if 'A' <= c && c <= 'Z' { + s.b[i] += 'a' - 'A' + } + } +} + +func (s *scanner) setError(e error) { + if s.err == nil || (e == errSyntax && s.err != errSyntax) { + s.err = e + } +} + +// resizeRange shrinks or grows the array at position oldStart such that +// a new string of size newSize can fit between oldStart and oldEnd. +// Sets the scan point to after the resized range. +func (s *scanner) resizeRange(oldStart, oldEnd, newSize int) { + s.start = oldStart + if end := oldStart + newSize; end != oldEnd { + diff := end - oldEnd + if end < cap(s.b) { + b := make([]byte, len(s.b)+diff) + copy(b, s.b[:oldStart]) + copy(b[end:], s.b[oldEnd:]) + s.b = b + } else { + s.b = append(s.b[end:], s.b[oldEnd:]...) + } + s.next = end + (s.next - s.end) + s.end = end + } +} + +// replace replaces the current token with repl. +func (s *scanner) replace(repl string) { + s.resizeRange(s.start, s.end, len(repl)) + copy(s.b[s.start:], repl) +} + +// gobble removes the current token from the input. +// Caller must call scan after calling gobble. +func (s *scanner) gobble(e error) { + s.setError(e) + if s.start == 0 { + s.b = s.b[:+copy(s.b, s.b[s.next:])] + s.end = 0 + } else { + s.b = s.b[:s.start-1+copy(s.b[s.start-1:], s.b[s.end:])] + s.end = s.start - 1 + } + s.next = s.start +} + +// deleteRange removes the given range from s.b before the current token. +func (s *scanner) deleteRange(start, end int) { + s.setError(errSyntax) + s.b = s.b[:start+copy(s.b[start:], s.b[end:])] + diff := end - start + s.next -= diff + s.start -= diff + s.end -= diff +} + +// scan parses the next token of a BCP 47 string. Tokens that are larger +// than 8 characters or include non-alphanumeric characters result in an error +// and are gobbled and removed from the output. +// It returns the end position of the last token consumed. +func (s *scanner) scan() (end int) { + end = s.end + s.token = nil + for s.start = s.next; s.next < len(s.b); { + i := bytes.IndexByte(s.b[s.next:], '-') + if i == -1 { + s.end = len(s.b) + s.next = len(s.b) + i = s.end - s.start + } else { + s.end = s.next + i + s.next = s.end + 1 + } + token := s.b[s.start:s.end] + if i < 1 || i > 8 || !isAlphaNum(token) { + s.gobble(errSyntax) + continue + } + s.token = token + return end + } + if n := len(s.b); n > 0 && s.b[n-1] == '-' { + s.setError(errSyntax) + s.b = s.b[:len(s.b)-1] + } + s.done = true + return end +} + +// acceptMinSize parses multiple tokens of the given size or greater. +// It returns the end position of the last token consumed. +func (s *scanner) acceptMinSize(min int) (end int) { + end = s.end + s.scan() + for ; len(s.token) >= min; s.scan() { + end = s.end + } + return end +} + +// Parse parses the given BCP 47 string and returns a valid Tag. If parsing +// failed it returns an error and any part of the tag that could be parsed. +// If parsing succeeded but an unknown value was found, it returns +// ValueError. The Tag returned in this case is just stripped of the unknown +// value. All other values are preserved. It accepts tags in the BCP 47 format +// and extensions to this standard defined in +// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. +// The resulting tag is canonicalized using the default canonicalization type. +func Parse(s string) (t Tag, err error) { + return Default.Parse(s) +} + +// Parse parses the given BCP 47 string and returns a valid Tag. If parsing +// failed it returns an error and any part of the tag that could be parsed. +// If parsing succeeded but an unknown value was found, it returns +// ValueError. The Tag returned in this case is just stripped of the unknown +// value. All other values are preserved. It accepts tags in the BCP 47 format +// and extensions to this standard defined in +// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. +// The resulting tag is canonicalized using the the canonicalization type c. +func (c CanonType) Parse(s string) (t Tag, err error) { + // TODO: consider supporting old-style locale key-value pairs. + if s == "" { + return und, errSyntax + } + if len(s) <= maxAltTaglen { + b := [maxAltTaglen]byte{} + for i, c := range s { + // Generating invalid UTF-8 is okay as it won't match. + if 'A' <= c && c <= 'Z' { + c += 'a' - 'A' + } else if c == '_' { + c = '-' + } + b[i] = byte(c) + } + if t, ok := grandfathered(b); ok { + return t, nil + } + } + scan := makeScannerString(s) + t, err = parse(&scan, s) + t, changed := t.canonicalize(c) + if changed { + t.remakeString() + } + return t, err +} + +func parse(scan *scanner, s string) (t Tag, err error) { + t = und + var end int + if n := len(scan.token); n <= 1 { + scan.toLower(0, len(scan.b)) + if n == 0 || scan.token[0] != 'x' { + return t, errSyntax + } + end = parseExtensions(scan) + } else if n >= 4 { + return und, errSyntax + } else { // the usual case + t, end = parseTag(scan) + if n := len(scan.token); n == 1 { + t.pExt = uint16(end) + end = parseExtensions(scan) + } else if end < len(scan.b) { + scan.setError(errSyntax) + scan.b = scan.b[:end] + } + } + if int(t.pVariant) < len(scan.b) { + if end < len(s) { + s = s[:end] + } + if len(s) > 0 && tag.Compare(s, scan.b) == 0 { + t.str = s + } else { + t.str = string(scan.b) + } + } else { + t.pVariant, t.pExt = 0, 0 + } + return t, scan.err +} + +// parseTag parses language, script, region and variants. +// It returns a Tag and the end position in the input that was parsed. +func parseTag(scan *scanner) (t Tag, end int) { + var e error + // TODO: set an error if an unknown lang, script or region is encountered. + t.lang, e = getLangID(scan.token) + scan.setError(e) + scan.replace(t.lang.String()) + langStart := scan.start + end = scan.scan() + for len(scan.token) == 3 && isAlpha(scan.token[0]) { + // From http://tools.ietf.org/html/bcp47, <lang>-<extlang> tags are equivalent + // to a tag of the form <extlang>. + lang, e := getLangID(scan.token) + if lang != 0 { + t.lang = lang + copy(scan.b[langStart:], lang.String()) + scan.b[langStart+3] = '-' + scan.start = langStart + 4 + } + scan.gobble(e) + end = scan.scan() + } + if len(scan.token) == 4 && isAlpha(scan.token[0]) { + t.script, e = getScriptID(script, scan.token) + if t.script == 0 { + scan.gobble(e) + } + end = scan.scan() + } + if n := len(scan.token); n >= 2 && n <= 3 { + t.region, e = getRegionID(scan.token) + if t.region == 0 { + scan.gobble(e) + } else { + scan.replace(t.region.String()) + } + end = scan.scan() + } + scan.toLower(scan.start, len(scan.b)) + t.pVariant = byte(end) + end = parseVariants(scan, end, t) + t.pExt = uint16(end) + return t, end +} + +var separator = []byte{'-'} + +// parseVariants scans tokens as long as each token is a valid variant string. +// Duplicate variants are removed. +func parseVariants(scan *scanner, end int, t Tag) int { + start := scan.start + varIDBuf := [4]uint8{} + variantBuf := [4][]byte{} + varID := varIDBuf[:0] + variant := variantBuf[:0] + last := -1 + needSort := false + for ; len(scan.token) >= 4; scan.scan() { + // TODO: measure the impact of needing this conversion and redesign + // the data structure if there is an issue. + v, ok := variantIndex[string(scan.token)] + if !ok { + // unknown variant + // TODO: allow user-defined variants? + scan.gobble(mkErrInvalid(scan.token)) + continue + } + varID = append(varID, v) + variant = append(variant, scan.token) + if !needSort { + if last < int(v) { + last = int(v) + } else { + needSort = true + // There is no legal combinations of more than 7 variants + // (and this is by no means a useful sequence). + const maxVariants = 8 + if len(varID) > maxVariants { + break + } + } + } + end = scan.end + } + if needSort { + sort.Sort(variantsSort{varID, variant}) + k, l := 0, -1 + for i, v := range varID { + w := int(v) + if l == w { + // Remove duplicates. + continue + } + varID[k] = varID[i] + variant[k] = variant[i] + k++ + l = w + } + if str := bytes.Join(variant[:k], separator); len(str) == 0 { + end = start - 1 + } else { + scan.resizeRange(start, end, len(str)) + copy(scan.b[scan.start:], str) + end = scan.end + } + } + return end +} + +type variantsSort struct { + i []uint8 + v [][]byte +} + +func (s variantsSort) Len() int { + return len(s.i) +} + +func (s variantsSort) Swap(i, j int) { + s.i[i], s.i[j] = s.i[j], s.i[i] + s.v[i], s.v[j] = s.v[j], s.v[i] +} + +func (s variantsSort) Less(i, j int) bool { + return s.i[i] < s.i[j] +} + +type bytesSort [][]byte + +func (b bytesSort) Len() int { + return len(b) +} + +func (b bytesSort) Swap(i, j int) { + b[i], b[j] = b[j], b[i] +} + +func (b bytesSort) Less(i, j int) bool { + return bytes.Compare(b[i], b[j]) == -1 +} + +// parseExtensions parses and normalizes the extensions in the buffer. +// It returns the last position of scan.b that is part of any extension. +// It also trims scan.b to remove excess parts accordingly. +func parseExtensions(scan *scanner) int { + start := scan.start + exts := [][]byte{} + private := []byte{} + end := scan.end + for len(scan.token) == 1 { + extStart := scan.start + ext := scan.token[0] + end = parseExtension(scan) + extension := scan.b[extStart:end] + if len(extension) < 3 || (ext != 'x' && len(extension) < 4) { + scan.setError(errSyntax) + end = extStart + continue + } else if start == extStart && (ext == 'x' || scan.start == len(scan.b)) { + scan.b = scan.b[:end] + return end + } else if ext == 'x' { + private = extension + break + } + exts = append(exts, extension) + } + sort.Sort(bytesSort(exts)) + if len(private) > 0 { + exts = append(exts, private) + } + scan.b = scan.b[:start] + if len(exts) > 0 { + scan.b = append(scan.b, bytes.Join(exts, separator)...) + } else if start > 0 { + // Strip trailing '-'. + scan.b = scan.b[:start-1] + } + return end +} + +// parseExtension parses a single extension and returns the position of +// the extension end. +func parseExtension(scan *scanner) int { + start, end := scan.start, scan.end + switch scan.token[0] { + case 'u': + attrStart := end + scan.scan() + for last := []byte{}; len(scan.token) > 2; scan.scan() { + if bytes.Compare(scan.token, last) != -1 { + // Attributes are unsorted. Start over from scratch. + p := attrStart + 1 + scan.next = p + attrs := [][]byte{} + for scan.scan(); len(scan.token) > 2; scan.scan() { + attrs = append(attrs, scan.token) + end = scan.end + } + sort.Sort(bytesSort(attrs)) + copy(scan.b[p:], bytes.Join(attrs, separator)) + break + } + last = scan.token + end = scan.end + } + var last, key []byte + for attrEnd := end; len(scan.token) == 2; last = key { + key = scan.token + keyEnd := scan.end + end = scan.acceptMinSize(3) + // TODO: check key value validity + if keyEnd == end || bytes.Compare(key, last) != 1 { + // We have an invalid key or the keys are not sorted. + // Start scanning keys from scratch and reorder. + p := attrEnd + 1 + scan.next = p + keys := [][]byte{} + for scan.scan(); len(scan.token) == 2; { + keyStart, keyEnd := scan.start, scan.end + end = scan.acceptMinSize(3) + if keyEnd != end { + keys = append(keys, scan.b[keyStart:end]) + } else { + scan.setError(errSyntax) + end = keyStart + } + } + sort.Sort(bytesSort(keys)) + reordered := bytes.Join(keys, separator) + if e := p + len(reordered); e < end { + scan.deleteRange(e, end) + end = e + } + copy(scan.b[p:], bytes.Join(keys, separator)) + break + } + } + case 't': + scan.scan() + if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) { + _, end = parseTag(scan) + scan.toLower(start, end) + } + for len(scan.token) == 2 && !isAlpha(scan.token[1]) { + end = scan.acceptMinSize(3) + } + case 'x': + end = scan.acceptMinSize(1) + default: + end = scan.acceptMinSize(2) + } + return end +} + +// Compose creates a Tag from individual parts, which may be of type Tag, Base, +// Script, Region, Variant, []Variant, Extension, []Extension or error. If a +// Base, Script or Region or slice of type Variant or Extension is passed more +// than once, the latter will overwrite the former. Variants and Extensions are +// accumulated, but if two extensions of the same type are passed, the latter +// will replace the former. A Tag overwrites all former values and typically +// only makes sense as the first argument. The resulting tag is returned after +// canonicalizing using the Default CanonType. If one or more errors are +// encountered, one of the errors is returned. +func Compose(part ...interface{}) (t Tag, err error) { + return Default.Compose(part...) +} + +// Compose creates a Tag from individual parts, which may be of type Tag, Base, +// Script, Region, Variant, []Variant, Extension, []Extension or error. If a +// Base, Script or Region or slice of type Variant or Extension is passed more +// than once, the latter will overwrite the former. Variants and Extensions are +// accumulated, but if two extensions of the same type are passed, the latter +// will replace the former. A Tag overwrites all former values and typically +// only makes sense as the first argument. The resulting tag is returned after +// canonicalizing using CanonType c. If one or more errors are encountered, +// one of the errors is returned. +func (c CanonType) Compose(part ...interface{}) (t Tag, err error) { + var b builder + if err = b.update(part...); err != nil { + return und, err + } + t, _ = b.tag.canonicalize(c) + + if len(b.ext) > 0 || len(b.variant) > 0 { + sort.Sort(sortVariant(b.variant)) + sort.Strings(b.ext) + if b.private != "" { + b.ext = append(b.ext, b.private) + } + n := maxCoreSize + tokenLen(b.variant...) + tokenLen(b.ext...) + buf := make([]byte, n) + p := t.genCoreBytes(buf) + t.pVariant = byte(p) + p += appendTokens(buf[p:], b.variant...) + t.pExt = uint16(p) + p += appendTokens(buf[p:], b.ext...) + t.str = string(buf[:p]) + } else if b.private != "" { + t.str = b.private + t.remakeString() + } + return +} + +type builder struct { + tag Tag + + private string // the x extension + ext []string + variant []string + + err error +} + +func (b *builder) addExt(e string) { + if e == "" { + } else if e[0] == 'x' { + b.private = e + } else { + b.ext = append(b.ext, e) + } +} + +var errInvalidArgument = errors.New("invalid Extension or Variant") + +func (b *builder) update(part ...interface{}) (err error) { + replace := func(l *[]string, s string, eq func(a, b string) bool) bool { + if s == "" { + b.err = errInvalidArgument + return true + } + for i, v := range *l { + if eq(v, s) { + (*l)[i] = s + return true + } + } + return false + } + for _, x := range part { + switch v := x.(type) { + case Tag: + b.tag.lang = v.lang + b.tag.region = v.region + b.tag.script = v.script + if v.str != "" { + b.variant = nil + for x, s := "", v.str[v.pVariant:v.pExt]; s != ""; { + x, s = nextToken(s) + b.variant = append(b.variant, x) + } + b.ext, b.private = nil, "" + for i, e := int(v.pExt), ""; i < len(v.str); { + i, e = getExtension(v.str, i) + b.addExt(e) + } + } + case Base: + b.tag.lang = v.langID + case Script: + b.tag.script = v.scriptID + case Region: + b.tag.region = v.regionID + case Variant: + if !replace(&b.variant, v.variant, func(a, b string) bool { return a == b }) { + b.variant = append(b.variant, v.variant) + } + case Extension: + if !replace(&b.ext, v.s, func(a, b string) bool { return a[0] == b[0] }) { + b.addExt(v.s) + } + case []Variant: + b.variant = nil + for _, x := range v { + b.update(x) + } + case []Extension: + b.ext, b.private = nil, "" + for _, e := range v { + b.update(e) + } + // TODO: support parsing of raw strings based on morphology or just extensions? + case error: + err = v + } + } + return +} + +func tokenLen(token ...string) (n int) { + for _, t := range token { + n += len(t) + 1 + } + return +} + +func appendTokens(b []byte, token ...string) int { + p := 0 + for _, t := range token { + b[p] = '-' + copy(b[p+1:], t) + p += 1 + len(t) + } + return p +} + +type sortVariant []string + +func (s sortVariant) Len() int { + return len(s) +} + +func (s sortVariant) Swap(i, j int) { + s[j], s[i] = s[i], s[j] +} + +func (s sortVariant) Less(i, j int) bool { + return variantIndex[s[i]] < variantIndex[s[j]] +} + +func findExt(list []string, x byte) int { + for i, e := range list { + if e[0] == x { + return i + } + } + return -1 +} + +// getExtension returns the name, body and end position of the extension. +func getExtension(s string, p int) (end int, ext string) { + if s[p] == '-' { + p++ + } + if s[p] == 'x' { + return len(s), s[p:] + } + end = nextExtension(s, p) + return end, s[p:end] +} + +// nextExtension finds the next extension within the string, searching +// for the -<char>- pattern from position p. +// In the fast majority of cases, language tags will have at most +// one extension and extensions tend to be small. +func nextExtension(s string, p int) int { + for n := len(s) - 3; p < n; { + if s[p] == '-' { + if s[p+2] == '-' { + return p + } + p += 3 + } else { + p++ + } + } + return len(s) +} + +var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight") + +// ParseAcceptLanguage parses the contents of a Accept-Language header as +// defined in http://www.ietf.org/rfc/rfc2616.txt and returns a list of Tags and +// a list of corresponding quality weights. It is more permissive than RFC 2616 +// and may return non-nil slices even if the input is not valid. +// The Tags will be sorted by highest weight first and then by first occurrence. +// Tags with a weight of zero will be dropped. An error will be returned if the +// input could not be parsed. +func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) { + var entry string + for s != "" { + if entry, s = split(s, ','); entry == "" { + continue + } + + entry, weight := split(entry, ';') + + // Scan the language. + t, err := Parse(entry) + if err != nil { + id, ok := acceptFallback[entry] + if !ok { + return nil, nil, err + } + t = Tag{lang: id} + } + + // Scan the optional weight. + w := 1.0 + if weight != "" { + weight = consume(weight, 'q') + weight = consume(weight, '=') + // consume returns the empty string when a token could not be + // consumed, resulting in an error for ParseFloat. + if w, err = strconv.ParseFloat(weight, 32); err != nil { + return nil, nil, errInvalidWeight + } + // Drop tags with a quality weight of 0. + if w <= 0 { + continue + } + } + + tag = append(tag, t) + q = append(q, float32(w)) + } + sortStable(&tagSort{tag, q}) + return tag, q, nil +} + +// consume removes a leading token c from s and returns the result or the empty +// string if there is no such token. +func consume(s string, c byte) string { + if s == "" || s[0] != c { + return "" + } + return strings.TrimSpace(s[1:]) +} + +func split(s string, c byte) (head, tail string) { + if i := strings.IndexByte(s, c); i >= 0 { + return strings.TrimSpace(s[:i]), strings.TrimSpace(s[i+1:]) + } + return strings.TrimSpace(s), "" +} + +// Add hack mapping to deal with a small number of cases that that occur +// in Accept-Language (with reasonable frequency). +var acceptFallback = map[string]langID{ + "english": _en, + "deutsch": _de, + "italian": _it, + "french": _fr, + "*": _mul, // defined in the spec to match all languages. +} + +type tagSort struct { + tag []Tag + q []float32 +} + +func (s *tagSort) Len() int { + return len(s.q) +} + +func (s *tagSort) Less(i, j int) bool { + return s.q[i] > s.q[j] +} + +func (s *tagSort) Swap(i, j int) { + s.tag[i], s.tag[j] = s.tag[j], s.tag[i] + s.q[i], s.q[j] = s.q[j], s.q[i] +} diff --git a/vendor/golang.org/x/text/language/parse_test.go b/vendor/golang.org/x/text/language/parse_test.go new file mode 100644 index 0000000..9b40eb4 --- /dev/null +++ b/vendor/golang.org/x/text/language/parse_test.go @@ -0,0 +1,517 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +import ( + "bytes" + "strings" + "testing" + + "golang.org/x/text/internal/tag" +) + +type scanTest struct { + ok bool // true if scanning does not result in an error + in string + tok []string // the expected tokens +} + +var tests = []scanTest{ + {true, "", []string{}}, + {true, "1", []string{"1"}}, + {true, "en", []string{"en"}}, + {true, "root", []string{"root"}}, + {true, "maxchars", []string{"maxchars"}}, + {false, "bad/", []string{}}, + {false, "morethan8", []string{}}, + {false, "-", []string{}}, + {false, "----", []string{}}, + {false, "_", []string{}}, + {true, "en-US", []string{"en", "US"}}, + {true, "en_US", []string{"en", "US"}}, + {false, "en-US-", []string{"en", "US"}}, + {false, "en-US--", []string{"en", "US"}}, + {false, "en-US---", []string{"en", "US"}}, + {false, "en--US", []string{"en", "US"}}, + {false, "-en-US", []string{"en", "US"}}, + {false, "-en--US-", []string{"en", "US"}}, + {false, "-en--US-", []string{"en", "US"}}, + {false, "en-.-US", []string{"en", "US"}}, + {false, ".-en--US-.", []string{"en", "US"}}, + {false, "en-u.-US", []string{"en", "US"}}, + {true, "en-u1-US", []string{"en", "u1", "US"}}, + {true, "maxchar1_maxchar2-maxchar3", []string{"maxchar1", "maxchar2", "maxchar3"}}, + {false, "moreThan8-moreThan8-e", []string{"e"}}, +} + +func TestScan(t *testing.T) { + for i, tt := range tests { + scan := makeScannerString(tt.in) + for j := 0; !scan.done; j++ { + if j >= len(tt.tok) { + t.Errorf("%d: extra token %q", i, scan.token) + } else if tag.Compare(tt.tok[j], scan.token) != 0 { + t.Errorf("%d: token %d: found %q; want %q", i, j, scan.token, tt.tok[j]) + break + } + scan.scan() + } + if s := strings.Join(tt.tok, "-"); tag.Compare(s, bytes.Replace(scan.b, b("_"), b("-"), -1)) != 0 { + t.Errorf("%d: input: found %q; want %q", i, scan.b, s) + } + if (scan.err == nil) != tt.ok { + t.Errorf("%d: ok: found %v; want %v", i, scan.err == nil, tt.ok) + } + } +} + +func TestAcceptMinSize(t *testing.T) { + for i, tt := range tests { + // count number of successive tokens with a minimum size. + for sz := 1; sz <= 8; sz++ { + scan := makeScannerString(tt.in) + scan.end, scan.next = 0, 0 + end := scan.acceptMinSize(sz) + n := 0 + for i := 0; i < len(tt.tok) && len(tt.tok[i]) >= sz; i++ { + n += len(tt.tok[i]) + if i > 0 { + n++ + } + } + if end != n { + t.Errorf("%d:%d: found len %d; want %d", i, sz, end, n) + } + } + } +} + +type parseTest struct { + i int // the index of this test + in string + lang, script, region string + variants, ext string + extList []string // only used when more than one extension is present + invalid bool + rewrite bool // special rewrite not handled by parseTag + changed bool // string needed to be reformatted +} + +func parseTests() []parseTest { + tests := []parseTest{ + {in: "root", lang: "und"}, + {in: "und", lang: "und"}, + {in: "en", lang: "en"}, + {in: "xy", lang: "und", invalid: true}, + {in: "en-ZY", lang: "en", invalid: true}, + {in: "gsw", lang: "gsw"}, + {in: "sr_Latn", lang: "sr", script: "Latn"}, + {in: "af-Arab", lang: "af", script: "Arab"}, + {in: "nl-BE", lang: "nl", region: "BE"}, + {in: "es-419", lang: "es", region: "419"}, + {in: "und-001", lang: "und", region: "001"}, + {in: "de-latn-be", lang: "de", script: "Latn", region: "BE"}, + // Variants + {in: "de-1901", lang: "de", variants: "1901"}, + // Accept with unsuppressed script. + {in: "de-Latn-1901", lang: "de", script: "Latn", variants: "1901"}, + // Specialized. + {in: "sl-rozaj", lang: "sl", variants: "rozaj"}, + {in: "sl-rozaj-lipaw", lang: "sl", variants: "rozaj-lipaw"}, + {in: "sl-rozaj-biske", lang: "sl", variants: "rozaj-biske"}, + {in: "sl-rozaj-biske-1994", lang: "sl", variants: "rozaj-biske-1994"}, + {in: "sl-rozaj-1994", lang: "sl", variants: "rozaj-1994"}, + // Maximum number of variants while adhering to prefix rules. + {in: "sl-rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp", lang: "sl", variants: "rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp"}, + + // Sorting. + {in: "sl-1994-biske-rozaj", lang: "sl", variants: "rozaj-biske-1994", changed: true}, + {in: "sl-rozaj-biske-1994-alalc97-fonupa-fonipa-fonxsamp", lang: "sl", variants: "rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp", changed: true}, + {in: "nl-fonxsamp-alalc97-fonipa-fonupa", lang: "nl", variants: "alalc97-fonipa-fonupa-fonxsamp", changed: true}, + + // Duplicates variants are removed, but not an error. + {in: "nl-fonupa-fonupa", lang: "nl", variants: "fonupa"}, + + // Variants that do not have correct prefixes. We still accept these. + {in: "de-Cyrl-1901", lang: "de", script: "Cyrl", variants: "1901"}, + {in: "sl-rozaj-lipaw-1994", lang: "sl", variants: "rozaj-lipaw-1994"}, + {in: "sl-1994-biske-rozaj-1994-biske-rozaj", lang: "sl", variants: "rozaj-biske-1994", changed: true}, + {in: "de-Cyrl-1901", lang: "de", script: "Cyrl", variants: "1901"}, + + // Invalid variant. + {in: "de-1902", lang: "de", variants: "", invalid: true}, + + {in: "EN_CYRL", lang: "en", script: "Cyrl"}, + // private use and extensions + {in: "x-a-b-c-d", ext: "x-a-b-c-d"}, + {in: "x_A.-B-C_D", ext: "x-b-c-d", invalid: true, changed: true}, + {in: "x-aa-bbbb-cccccccc-d", ext: "x-aa-bbbb-cccccccc-d"}, + {in: "en-c_cc-b-bbb-a-aaa", lang: "en", changed: true, extList: []string{"a-aaa", "b-bbb", "c-cc"}}, + {in: "en-x_cc-b-bbb-a-aaa", lang: "en", ext: "x-cc-b-bbb-a-aaa", changed: true}, + {in: "en-c_cc-b-bbb-a-aaa-x-x", lang: "en", changed: true, extList: []string{"a-aaa", "b-bbb", "c-cc", "x-x"}}, + {in: "en-v-c", lang: "en", ext: "", invalid: true}, + {in: "en-v-abcdefghi", lang: "en", ext: "", invalid: true}, + {in: "en-v-abc-x", lang: "en", ext: "v-abc", invalid: true}, + {in: "en-v-abc-x-", lang: "en", ext: "v-abc", invalid: true}, + {in: "en-v-abc-w-x-xx", lang: "en", extList: []string{"v-abc", "x-xx"}, invalid: true, changed: true}, + {in: "en-v-abc-w-y-yx", lang: "en", extList: []string{"v-abc", "y-yx"}, invalid: true, changed: true}, + {in: "en-v-c-abc", lang: "en", ext: "c-abc", invalid: true, changed: true}, + {in: "en-v-w-abc", lang: "en", ext: "w-abc", invalid: true, changed: true}, + {in: "en-v-x-abc", lang: "en", ext: "x-abc", invalid: true, changed: true}, + {in: "en-v-x-a", lang: "en", ext: "x-a", invalid: true, changed: true}, + {in: "en-9-aa-0-aa-z-bb-x-a", lang: "en", extList: []string{"0-aa", "9-aa", "z-bb", "x-a"}, changed: true}, + {in: "en-u-c", lang: "en", ext: "", invalid: true}, + {in: "en-u-co-phonebk", lang: "en", ext: "u-co-phonebk"}, + {in: "en-u-co-phonebk-ca", lang: "en", ext: "u-co-phonebk", invalid: true}, + {in: "en-u-nu-arabic-co-phonebk-ca", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-x", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-s", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-a12345678", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-co-phonebook", lang: "en", ext: "", invalid: true}, + {in: "en-u-co-phonebook-cu-xau", lang: "en", ext: "u-cu-xau", invalid: true, changed: true}, + {in: "en-Cyrl-u-co-phonebk", lang: "en", script: "Cyrl", ext: "u-co-phonebk"}, + {in: "en-US-u-co-phonebk", lang: "en", region: "US", ext: "u-co-phonebk"}, + {in: "en-US-u-co-phonebk-cu-xau", lang: "en", region: "US", ext: "u-co-phonebk-cu-xau"}, + {in: "en-scotland-u-co-phonebk", lang: "en", variants: "scotland", ext: "u-co-phonebk"}, + {in: "en-u-cu-xua-co-phonebk", lang: "en", ext: "u-co-phonebk-cu-xua", changed: true}, + {in: "en-u-def-abc-cu-xua-co-phonebk", lang: "en", ext: "u-abc-def-co-phonebk-cu-xua", changed: true}, + {in: "en-u-def-abc", lang: "en", ext: "u-abc-def", changed: true}, + {in: "en-u-cu-xua-co-phonebk-a-cd", lang: "en", extList: []string{"a-cd", "u-co-phonebk-cu-xua"}, changed: true}, + // Invalid "u" extension. Drop invalid parts. + {in: "en-u-cu-co-phonebk", lang: "en", extList: []string{"u-co-phonebk"}, invalid: true, changed: true}, + {in: "en-u-cu-xau-co", lang: "en", extList: []string{"u-cu-xau"}, invalid: true}, + // We allow duplicate keys as the LDML spec does not explicitly prohibit it. + // TODO: Consider eliminating duplicates and returning an error. + {in: "en-u-cu-xau-co-phonebk-cu-xau", lang: "en", ext: "u-co-phonebk-cu-xau-cu-xau", changed: true}, + {in: "en-t-en-Cyrl-NL-fonipa", lang: "en", ext: "t-en-cyrl-nl-fonipa", changed: true}, + {in: "en-t-en-Cyrl-NL-fonipa-t0-abc-def", lang: "en", ext: "t-en-cyrl-nl-fonipa-t0-abc-def", changed: true}, + {in: "en-t-t0-abcd", lang: "en", ext: "t-t0-abcd"}, + // Not necessary to have changed here. + {in: "en-t-nl-abcd", lang: "en", ext: "t-nl", invalid: true}, + {in: "en-t-nl-latn", lang: "en", ext: "t-nl-latn"}, + {in: "en-t-t0-abcd-x-a", lang: "en", extList: []string{"t-t0-abcd", "x-a"}}, + // invalid + {in: "", lang: "und", invalid: true}, + {in: "-", lang: "und", invalid: true}, + {in: "x", lang: "und", invalid: true}, + {in: "x-", lang: "und", invalid: true}, + {in: "x--", lang: "und", invalid: true}, + {in: "a-a-b-c-d", lang: "und", invalid: true}, + {in: "en-", lang: "en", invalid: true}, + {in: "enne-", lang: "und", invalid: true}, + {in: "en.", lang: "und", invalid: true}, + {in: "en.-latn", lang: "und", invalid: true}, + {in: "en.-en", lang: "en", invalid: true}, + {in: "x-a-tooManyChars-c-d", ext: "x-a-c-d", invalid: true, changed: true}, + {in: "a-tooManyChars-c-d", lang: "und", invalid: true}, + // TODO: check key-value validity + // { in: "en-u-cu-xd", lang: "en", ext: "u-cu-xd", invalid: true }, + {in: "en-t-abcd", lang: "en", invalid: true}, + {in: "en-Latn-US-en", lang: "en", script: "Latn", region: "US", invalid: true}, + // rewrites (more tests in TestGrandfathered) + {in: "zh-min-nan", lang: "nan"}, + {in: "zh-yue", lang: "yue"}, + {in: "zh-xiang", lang: "hsn", rewrite: true}, + {in: "zh-guoyu", lang: "cmn", rewrite: true}, + {in: "iw", lang: "iw"}, + {in: "sgn-BE-FR", lang: "sfb", rewrite: true}, + {in: "i-klingon", lang: "tlh", rewrite: true}, + } + for i, tt := range tests { + tests[i].i = i + if tt.extList != nil { + tests[i].ext = strings.Join(tt.extList, "-") + } + if tt.ext != "" && tt.extList == nil { + tests[i].extList = []string{tt.ext} + } + } + return tests +} + +func TestParseExtensions(t *testing.T) { + for i, tt := range parseTests() { + if tt.ext == "" || tt.rewrite { + continue + } + scan := makeScannerString(tt.in) + if len(scan.b) > 1 && scan.b[1] != '-' { + scan.end = nextExtension(string(scan.b), 0) + scan.next = scan.end + 1 + scan.scan() + } + start := scan.start + scan.toLower(start, len(scan.b)) + parseExtensions(&scan) + ext := string(scan.b[start:]) + if ext != tt.ext { + t.Errorf("%d(%s): ext was %v; want %v", i, tt.in, ext, tt.ext) + } + if changed := !strings.HasPrefix(tt.in[start:], ext); changed != tt.changed { + t.Errorf("%d(%s): changed was %v; want %v", i, tt.in, changed, tt.changed) + } + } +} + +// partChecks runs checks for each part by calling the function returned by f. +func partChecks(t *testing.T, f func(*parseTest) (Tag, bool)) { + for i, tt := range parseTests() { + tag, skip := f(&tt) + if skip { + continue + } + if l, _ := getLangID(b(tt.lang)); l != tag.lang { + t.Errorf("%d: lang was %q; want %q", i, tag.lang, l) + } + if sc, _ := getScriptID(script, b(tt.script)); sc != tag.script { + t.Errorf("%d: script was %q; want %q", i, tag.script, sc) + } + if r, _ := getRegionID(b(tt.region)); r != tag.region { + t.Errorf("%d: region was %q; want %q", i, tag.region, r) + } + if tag.str == "" { + continue + } + p := int(tag.pVariant) + if p < int(tag.pExt) { + p++ + } + if s, g := tag.str[p:tag.pExt], tt.variants; s != g { + t.Errorf("%d: variants was %q; want %q", i, s, g) + } + p = int(tag.pExt) + if p > 0 && p < len(tag.str) { + p++ + } + if s, g := (tag.str)[p:], tt.ext; s != g { + t.Errorf("%d: extensions were %q; want %q", i, s, g) + } + } +} + +func TestParseTag(t *testing.T) { + partChecks(t, func(tt *parseTest) (id Tag, skip bool) { + if strings.HasPrefix(tt.in, "x-") || tt.rewrite { + return Tag{}, true + } + scan := makeScannerString(tt.in) + id, end := parseTag(&scan) + id.str = string(scan.b[:end]) + tt.ext = "" + tt.extList = []string{} + return id, false + }) +} + +func TestParse(t *testing.T) { + partChecks(t, func(tt *parseTest) (id Tag, skip bool) { + id, err := Raw.Parse(tt.in) + ext := "" + if id.str != "" { + if strings.HasPrefix(id.str, "x-") { + ext = id.str + } else if int(id.pExt) < len(id.str) && id.pExt > 0 { + ext = id.str[id.pExt+1:] + } + } + if tag, _ := Raw.Parse(id.String()); tag.String() != id.String() { + t.Errorf("%d:%s: reparse was %q; want %q", tt.i, tt.in, id.String(), tag.String()) + } + if ext != tt.ext { + t.Errorf("%d:%s: ext was %q; want %q", tt.i, tt.in, ext, tt.ext) + } + changed := id.str != "" && !strings.HasPrefix(tt.in, id.str) + if changed != tt.changed { + t.Errorf("%d:%s: changed was %v; want %v", tt.i, tt.in, changed, tt.changed) + } + if (err != nil) != tt.invalid { + t.Errorf("%d:%s: invalid was %v; want %v. Error: %v", tt.i, tt.in, err != nil, tt.invalid, err) + } + return id, false + }) +} + +func TestErrors(t *testing.T) { + mkInvalid := func(s string) error { + return mkErrInvalid([]byte(s)) + } + tests := []struct { + in string + out error + }{ + // invalid subtags. + {"ac", mkInvalid("ac")}, + {"AC", mkInvalid("ac")}, + {"aa-Uuuu", mkInvalid("Uuuu")}, + {"aa-AB", mkInvalid("AB")}, + // ill-formed wins over invalid. + {"ac-u", errSyntax}, + {"ac-u-ca", errSyntax}, + {"ac-u-ca-co-pinyin", errSyntax}, + {"noob", errSyntax}, + } + for _, tt := range tests { + _, err := Parse(tt.in) + if err != tt.out { + t.Errorf("%s: was %q; want %q", tt.in, err, tt.out) + } + } +} + +func TestCompose1(t *testing.T) { + partChecks(t, func(tt *parseTest) (id Tag, skip bool) { + l, _ := ParseBase(tt.lang) + s, _ := ParseScript(tt.script) + r, _ := ParseRegion(tt.region) + v := []Variant{} + for _, x := range strings.Split(tt.variants, "-") { + p, _ := ParseVariant(x) + v = append(v, p) + } + e := []Extension{} + for _, x := range tt.extList { + p, _ := ParseExtension(x) + e = append(e, p) + } + id, _ = Raw.Compose(l, s, r, v, e) + return id, false + }) +} + +func TestCompose2(t *testing.T) { + partChecks(t, func(tt *parseTest) (id Tag, skip bool) { + l, _ := ParseBase(tt.lang) + s, _ := ParseScript(tt.script) + r, _ := ParseRegion(tt.region) + p := []interface{}{l, s, r, s, r, l} + for _, x := range strings.Split(tt.variants, "-") { + v, _ := ParseVariant(x) + p = append(p, v) + } + for _, x := range tt.extList { + e, _ := ParseExtension(x) + p = append(p, e) + } + id, _ = Raw.Compose(p...) + return id, false + }) +} + +func TestCompose3(t *testing.T) { + partChecks(t, func(tt *parseTest) (id Tag, skip bool) { + id, _ = Raw.Parse(tt.in) + id, _ = Raw.Compose(id) + return id, false + }) +} + +func mk(s string) Tag { + return Raw.Make(s) +} + +func TestParseAcceptLanguage(t *testing.T) { + type res struct { + t Tag + q float32 + } + en := []res{{mk("en"), 1.0}} + tests := []struct { + out []res + in string + ok bool + }{ + {en, "en", true}, + {en, " en", true}, + {en, "en ", true}, + {en, " en ", true}, + {en, "en,", true}, + {en, ",en", true}, + {en, ",,,en,,,", true}, + {en, ",en;q=1", true}, + + // We allow an empty input, contrary to spec. + {nil, "", true}, + {[]res{{mk("aa"), 1}}, "aa;", true}, // allow unspecified weight + + // errors + {nil, ";", false}, + {nil, "$", false}, + {nil, "e;", false}, + {nil, "x;", false}, + {nil, "x", false}, + {nil, "ac", false}, // non-existing language + {nil, "aa;q", false}, + {nil, "aa;q=", false}, + {nil, "aa;q=.", false}, + + // odd fallbacks + { + []res{{mk("en"), 0.1}}, + " english ;q=.1", + true, + }, + { + []res{{mk("it"), 1.0}, {mk("de"), 1.0}, {mk("fr"), 1.0}}, + " italian, deutsch, french", + true, + }, + + // lists + { + []res{{mk("en"), 0.1}}, + "en;q=.1", + true, + }, + { + []res{{mk("mul"), 1.0}}, + "*", + true, + }, + { + []res{{mk("en"), 1.0}, {mk("de"), 1.0}}, + "en,de", + true, + }, + { + []res{{mk("en"), 1.0}, {mk("de"), .5}}, + "en,de;q=0.5", + true, + }, + { + []res{{mk("de"), 0.8}, {mk("en"), 0.5}}, + " en ; q = 0.5 , , de;q=0.8", + true, + }, + { + []res{{mk("en"), 1.0}, {mk("de"), 1.0}, {mk("fr"), 1.0}, {mk("tlh"), 1.0}}, + "en,de,fr,i-klingon", + true, + }, + // sorting + { + []res{{mk("tlh"), 0.4}, {mk("de"), 0.2}, {mk("fr"), 0.2}, {mk("en"), 0.1}}, + "en;q=0.1,de;q=0.2,fr;q=0.2,i-klingon;q=0.4", + true, + }, + // dropping + { + []res{{mk("fr"), 0.2}, {mk("en"), 0.1}}, + "en;q=0.1,de;q=0,fr;q=0.2,i-klingon;q=0.0", + true, + }, + } + for i, tt := range tests { + tags, qs, e := ParseAcceptLanguage(tt.in) + if e == nil != tt.ok { + t.Errorf("%d:%s:err: was %v; want %v", i, tt.in, e == nil, tt.ok) + } + for j, tag := range tags { + if out := tt.out[j]; !tag.equalTags(out.t) || qs[j] != out.q { + t.Errorf("%d:%s: was %s, %1f; want %s, %1f", i, tt.in, tag, qs[j], out.t, out.q) + break + } + } + } +} diff --git a/vendor/golang.org/x/text/language/tables.go b/vendor/golang.org/x/text/language/tables.go new file mode 100644 index 0000000..a2aec62 --- /dev/null +++ b/vendor/golang.org/x/text/language/tables.go @@ -0,0 +1,3547 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package language + +import "golang.org/x/text/internal/tag" + +// CLDRVersion is the CLDR version from which the tables in this package are derived. +const CLDRVersion = "30" + +const numLanguages = 8654 + +const numScripts = 230 + +const numRegions = 356 + +type fromTo struct { + from uint16 + to uint16 +} + +const nonCanonicalUnd = 1191 +const ( + _af = 21 + _am = 38 + _ar = 57 + _az = 87 + _bg = 125 + _bn = 163 + _ca = 213 + _cs = 246 + _da = 253 + _de = 265 + _el = 305 + _en = 308 + _es = 313 + _et = 315 + _fa = 323 + _fi = 332 + _fil = 334 + _fr = 345 + _gu = 413 + _he = 437 + _hi = 439 + _hr = 458 + _hu = 462 + _hy = 464 + _id = 474 + _is = 496 + _it = 497 + _ja = 504 + _ka = 520 + _kk = 570 + _km = 578 + _kn = 585 + _ko = 587 + _ky = 641 + _lo = 687 + _lt = 695 + _lv = 702 + _mk = 758 + _ml = 763 + _mn = 770 + _mo = 775 + _mr = 786 + _ms = 790 + _mul = 797 + _my = 808 + _nb = 830 + _ne = 840 + _nl = 862 + _no = 870 + _pa = 916 + _pl = 938 + _pt = 951 + _ro = 979 + _ru = 985 + _sh = 1021 + _si = 1026 + _sk = 1032 + _sl = 1036 + _sq = 1063 + _sr = 1064 + _sv = 1082 + _sw = 1083 + _ta = 1094 + _te = 1111 + _th = 1121 + _tl = 1136 + _tn = 1142 + _tr = 1152 + _uk = 1188 + _ur = 1194 + _uz = 1202 + _vi = 1209 + _zh = 1311 + _zu = 1316 + _jbo = 507 + _ami = 1639 + _bnn = 2346 + _hak = 431 + _tlh = 14456 + _lb = 652 + _nv = 890 + _pwn = 12044 + _tao = 14177 + _tay = 14187 + _tsu = 14651 + _nn = 865 + _sfb = 13618 + _vgt = 15690 + _sgg = 13649 + _cmn = 2996 + _nan = 826 + _hsn = 460 +) + +const langPrivateStart = 0x2f67 + +const langPrivateEnd = 0x316e + +// lang holds an alphabetically sorted list of ISO-639 language identifiers. +// All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag. +// For 2-byte language identifiers, the two successive bytes have the following meaning: +// - if the first letter of the 2- and 3-letter ISO codes are the same: +// the second and third letter of the 3-letter ISO code. +// - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3. +// For 3-byte language identifiers the 4th byte is 0. +const lang tag.Index = "" + // Size: 5280 bytes + "---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abr\x00abt\x00aby\x00acd\x00a" + + "ce\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey\x00affrag" + + "c\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00ajg\x00akka" + + "akk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00amp\x00anrga" + + "nc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00ape\x00apr" + + "\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars\x00ary\x00a" + + "rz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00atj\x00auy" + + "\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx\x00ayymayb" + + "\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00bba\x00bbb" + + "\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bcm\x00bcn" + + "\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00bet\x00b" + + "ew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn\x00bgx" + + "\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib\x00big" + + "\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn\x00bjo" + + "\x00bjr\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt\x00bmambmh\x00b" + + "mk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00bom\x00bon\x00bp" + + "y\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx\x00brz\x00bsosbsj" + + "\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00buc\x00bud\x00bug" + + "\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr\x00bxh\x00bye" + + "\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf\x00bzh\x00bzw" + + "\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg\x00chhachk\x00" + + "chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00ckl\x00cko\x00ck" + + "y\x00cla\x00cme\x00cooscop\x00cps\x00crrecrj\x00crk\x00crl\x00crm\x00crs" + + "\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymdaandad\x00daf\x00dag\x00dah" + + "\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00ddn\x00deeuded\x00den\x00d" + + "ga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia\x00dje\x00dnj\x00dob\x00doi" + + "\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm\x00dtp\x00dts\x00dty\x00dua" + + "\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00dyo\x00dyu\x00dzzodzg\x00ebu" + + "\x00eeweefi\x00egl\x00egy\x00eky\x00elllema\x00emi\x00enngenn\x00enq\x00" + + "eopoeri\x00es\x00\x05esu\x00etstetr\x00ett\x00etu\x00etx\x00euusewo\x00e" + + "xt\x00faasfaa\x00fab\x00fag\x00fai\x00fan\x00ffulffi\x00ffm\x00fiinfia" + + "\x00fil\x00fit\x00fjijflr\x00fmp\x00foaofod\x00fon\x00for\x00fpe\x00fqs" + + "\x00frrafrc\x00frp\x00frr\x00frs\x00fub\x00fud\x00fue\x00fuf\x00fuh\x00f" + + "uq\x00fur\x00fuv\x00fuy\x00fvr\x00fyrygalegaa\x00gaf\x00gag\x00gah\x00ga" + + "j\x00gam\x00gan\x00gaw\x00gay\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdla" + + "gde\x00gdn\x00gdr\x00geb\x00gej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gi" + + "l\x00gim\x00gjk\x00gjn\x00gju\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00" + + "gnrngnd\x00gng\x00god\x00gof\x00goi\x00gom\x00gon\x00gor\x00gos\x00got" + + "\x00grc\x00grt\x00grw\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00g" + + "ux\x00guz\x00gvlvgvf\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauha" + + "g\x00hak\x00ham\x00haw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif" + + "\x00hig\x00hih\x00hil\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj" + + "\x00hnn\x00hno\x00homohoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui" + + "\x00hyyehzerianaian\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd" + + "\x00idi\x00idu\x00ieleigboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw" + + "\x00ikx\x00ilo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00" + + "\x03iwm\x00iws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00j" + + "gk\x00jgo\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatka" + + "a\x00kab\x00kac\x00kad\x00kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp" + + "\x00kbq\x00kbx\x00kby\x00kcg\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl" + + "\x00kdt\x00kea\x00ken\x00kez\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00k" + + "gp\x00kha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij" + + "\x00kiu\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klal" + + "kln\x00klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw" + + "\x00knanknp\x00koorkoi\x00kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo" + + "\x00kpr\x00kpx\x00kqb\x00kqf\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00k" + + "rl\x00krs\x00kru\x00ksasksb\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb" + + "\x00ktm\x00kto\x00kuurkub\x00kud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00k" + + "us\x00kvomkvg\x00kvr\x00kvx\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm" + + "\x00kxp\x00kxw\x00kxz\x00kyirkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag" + + "\x00lah\x00laj\x00las\x00lbtzlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00l" + + "ed\x00lee\x00lem\x00lep\x00leq\x00leu\x00lez\x00lguglgg\x00liimlia\x00li" + + "d\x00lif\x00lig\x00lih\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln" + + "\x00lmn\x00lmo\x00lmp\x00lninlns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor" + + "\x00los\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy\x00luz\x00lvav" + + "lwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00man\x00mas\x00ma" + + "w\x00maz\x00mbh\x00mbo\x00mbq\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr" + + "\x00mcu\x00mda\x00mde\x00mdf\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee" + + "\x00mek\x00men\x00mer\x00met\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq" + + "\x00mglgmgh\x00mgl\x00mgo\x00mgp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00" + + "min\x00mis\x00miw\x00mkkdmki\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00m" + + "ls\x00mmo\x00mmu\x00mmx\x00mnonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00mo" + + "e\x00moh\x00mos\x00mox\x00mpp\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00" + + "mrj\x00mro\x00mssamtltmtc\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00m" + + "us\x00mva\x00mvn\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk" + + "\x00mym\x00myv\x00myw\x00myx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw" + + "\x00mzz\x00naaunac\x00naf\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00n" + + "bobnca\x00nce\x00ncf\x00nch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb" + + "\x00new\x00nex\x00nfr\x00ngdonga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00n" + + "if\x00nii\x00nij\x00nin\x00niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nll" + + "dnmg\x00nmz\x00nnnonnf\x00nnh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00" + + "nop\x00nou\x00nqo\x00nrblnrb\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr" + + "\x00nui\x00nup\x00nus\x00nuv\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym" + + "\x00nyn\x00nzi\x00occiogc\x00ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00" + + "opm\x00orrioro\x00oru\x00osssosa\x00ota\x00otk\x00ozm\x00paanpag\x00pal" + + "\x00pam\x00pap\x00pau\x00pbi\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo" + + "\x00pex\x00pfl\x00phl\x00phn\x00pilipil\x00pip\x00pka\x00pko\x00plolpla" + + "\x00pms\x00png\x00pnn\x00pnt\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psusp" + + "ss\x00ptorptp\x00puu\x00pwa\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rc" + + "f\x00rej\x00rel\x00res\x00rgn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmoh" + + "rmf\x00rmo\x00rmt\x00rmu\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00r" + + "ro\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf" + + "\x00sah\x00saq\x00sas\x00sat\x00saz\x00sba\x00sbe\x00sbp\x00scrdsck\x00s" + + "cl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00sei\x00se" + + "s\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn\x00shu" + + "\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks\x00sllv" + + "sld\x00sli\x00sll\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp\x00smq" + + "\x00sms\x00snnasnc\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq\x00sou" + + "\x00soy\x00spd\x00spl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx\x00sssw" + + "ssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00sur\x00s" + + "us\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00syl\x00sy" + + "r\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf\x00tbg\x00" + + "tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelted\x00tem" + + "\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00thq\x00thr" + + "\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr\x00tkt" + + "\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00tog\x00" + + "toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssotsd\x00t" + + "sf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts\x00ttt" + + "\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00twq\x00t" + + "xg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli\x00umb" + + "\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00uvh\x00u" + + "vl\x00uzzbvag\x00vai\x00van\x00veenvec\x00vep\x00viievic\x00viv\x00vls" + + "\x00vmf\x00vmw\x00voolvot\x00vro\x00vun\x00vut\x00walnwae\x00waj\x00wal" + + "\x00wan\x00war\x00wbp\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg\x00wib" + + "\x00wiu\x00wiv\x00wja\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu\x00woolw" + + "ob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00xbi\x00xcr" + + "\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna\x00xnr\x00x" + + "og\x00xon\x00xpr\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe\x00yam\x00yao" + + "\x00yap\x00yas\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb\x00yby\x00yer" + + "\x00ygr\x00ygw\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00yooryon\x00yrb" + + "\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw\x00zahazag\x00z" + + "bl\x00zdj\x00zea\x00zgh\x00zhhozia\x00zlm\x00zmi\x00zne\x00zuulzxx\x00zz" + + "a\x00\xff\xff\xff\xff" + +const langNoIndexOffset = 1319 + +// langNoIndex is a bit vector of all 3-letter language codes that are not used as an index +// in lookup tables. The language ids for these language codes are derived directly +// from the letters and are not consecutive. +// Size: 2197 bytes, 2197 elements +var langNoIndex = [2197]uint8{ + // Entry 0 - 3F + 0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd7, 0x3b, 0xd2, + 0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57, + 0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70, + 0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x62, + 0xe9, 0xbf, 0xfd, 0xbf, 0xbf, 0xf7, 0xfd, 0x77, + 0x0f, 0xff, 0xef, 0x6f, 0xff, 0xfb, 0xdf, 0xe2, + 0xc9, 0xf8, 0x7f, 0x7e, 0x4d, 0xb8, 0x0a, 0x6a, + 0x7c, 0xea, 0xe3, 0xfa, 0x7a, 0xbf, 0x67, 0xff, + // Entry 40 - 7F + 0xff, 0xff, 0xff, 0xdf, 0x2a, 0x54, 0x91, 0xc0, + 0x5d, 0xe3, 0x97, 0x14, 0x07, 0x20, 0xdd, 0xed, + 0x9f, 0x3f, 0xc9, 0x21, 0xf8, 0x3f, 0x94, 0x35, + 0x7c, 0x5f, 0xff, 0x5f, 0x8e, 0x6e, 0xdf, 0xff, + 0xff, 0xff, 0x55, 0x7c, 0xd3, 0xfd, 0xbf, 0xb5, + 0x7b, 0xdf, 0x7f, 0xf7, 0xca, 0xfe, 0xdb, 0xa3, + 0xa8, 0xff, 0x1f, 0x67, 0x7f, 0xeb, 0xef, 0xce, + 0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf, + // Entry 80 - BF + 0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x2f, 0xff, 0xff, + 0xbb, 0xee, 0xf7, 0xbd, 0xdb, 0xff, 0x5f, 0xf7, + 0xfd, 0xf2, 0xfd, 0xff, 0x5e, 0x2f, 0x3b, 0xba, + 0x7e, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xdd, 0xff, + 0xfd, 0xdf, 0xfb, 0xfe, 0x9d, 0xb4, 0xd3, 0xff, + 0xef, 0xff, 0xdf, 0xf7, 0x7f, 0xb7, 0xfd, 0xd5, + 0xa5, 0x77, 0x40, 0xff, 0x9c, 0xc1, 0x41, 0x2c, + 0x08, 0x20, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80, + // Entry C0 - FF + 0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96, + 0x1b, 0x14, 0x08, 0xf2, 0x2b, 0xe7, 0x17, 0x56, + 0x45, 0x7d, 0x0e, 0x1c, 0x37, 0x71, 0xf3, 0xef, + 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10, + 0xbc, 0x87, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35, + 0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x00, 0x81, 0x00, + 0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d, + // Entry 100 - 13F + 0xfd, 0xdc, 0xbe, 0x5e, 0x00, 0x00, 0x02, 0x64, + 0x0d, 0x19, 0x41, 0xdf, 0x79, 0x22, 0x00, 0x00, + 0x00, 0x5e, 0x64, 0xdc, 0x24, 0xe5, 0xd9, 0xe3, + 0xfe, 0xff, 0xfd, 0xcb, 0x9f, 0x14, 0x01, 0x0c, + 0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc5, 0x67, 0x5f, + 0x56, 0x89, 0x5e, 0xb5, 0x6c, 0xaf, 0x03, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xc0, 0x37, 0xda, 0x56, + 0x90, 0x69, 0x01, 0x2c, 0x96, 0x69, 0x20, 0xfb, + // Entry 140 - 17F + 0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x08, 0x16, + 0x01, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x06, + 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x09, + 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04, + 0x08, 0x00, 0x00, 0x04, 0x00, 0x80, 0x28, 0x04, + 0x00, 0x00, 0x50, 0xd5, 0x2d, 0x00, 0x64, 0x35, + 0x24, 0x52, 0xf4, 0xd4, 0xbd, 0x62, 0xc9, 0x03, + // Entry 180 - 1BF + 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x13, 0x39, 0x01, 0xdd, 0x57, 0x98, + 0x21, 0x18, 0x81, 0x00, 0x00, 0x01, 0x40, 0x82, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0x80, 0xea, + 0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + // Entry 1C0 - 1FF + 0x00, 0x01, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x20, 0x04, 0xa6, 0x00, 0x04, 0x00, 0x00, + 0x81, 0x50, 0x00, 0x00, 0x00, 0x11, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x55, + 0x02, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x40, + 0x30, 0x83, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1e, 0xcd, 0xbf, 0x7e, 0xbf, + // Entry 200 - 23F + 0xdf, 0xc3, 0x83, 0x82, 0xc0, 0xfb, 0x57, 0x27, + 0xcd, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5, + 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xcf, 0xe0, 0xdf, + 0x03, 0x44, 0x08, 0x10, 0x01, 0x04, 0x01, 0xe3, + 0x92, 0x54, 0xdb, 0x28, 0xd1, 0x5f, 0xf6, 0x6d, + 0x79, 0xed, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01, + 0x21, 0x12, 0x6c, 0x5f, 0xdd, 0x0e, 0x85, 0x4f, + 0x40, 0x40, 0x00, 0x04, 0xf1, 0xfd, 0x3d, 0x54, + // Entry 240 - 27F + 0xe8, 0x03, 0xb4, 0x27, 0x23, 0x0d, 0x00, 0x00, + 0x20, 0x7b, 0x38, 0x02, 0x05, 0x84, 0x00, 0xf0, + 0xbb, 0x7e, 0x5a, 0x00, 0x18, 0x04, 0x81, 0x00, + 0x00, 0x00, 0x80, 0x10, 0x90, 0x1c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x04, + 0x08, 0xa0, 0x70, 0xa5, 0x0c, 0x40, 0x00, 0x00, + 0x11, 0x04, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff, + 0x7b, 0x7f, 0x60, 0x00, 0x05, 0x9b, 0xdd, 0x66, + // Entry 280 - 2BF + 0x03, 0x00, 0x11, 0x00, 0x00, 0x00, 0x40, 0x05, + 0xb5, 0xb6, 0x80, 0x08, 0x04, 0x00, 0x04, 0x51, + 0xe2, 0xef, 0xfd, 0x3f, 0x05, 0x09, 0x08, 0x05, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60, + 0xe5, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80, + 0x03, 0x00, 0x00, 0x00, 0xcc, 0x50, 0x40, 0x04, + 0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20, + // Entry 2C0 - 2FF + 0x02, 0x50, 0x80, 0x11, 0x00, 0x91, 0x6c, 0xe2, + 0x50, 0x27, 0x1d, 0x11, 0x29, 0x06, 0x59, 0xe9, + 0x33, 0x08, 0x00, 0x20, 0x04, 0x40, 0x10, 0x00, + 0x00, 0x00, 0x50, 0x44, 0x92, 0x49, 0xd6, 0x5d, + 0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x80, 0x00, 0x40, 0x04, 0x00, 0x01, + 0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x00, 0x08, + 0xd8, 0xeb, 0xf6, 0x39, 0xc4, 0x89, 0x12, 0x00, + // Entry 300 - 33F + 0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x04, 0x10, 0xd0, 0x9d, 0x95, 0x13, 0x04, 0x80, + 0x00, 0x01, 0xd0, 0x12, 0x40, 0x00, 0x10, 0xb0, + 0x10, 0x62, 0x4c, 0xd2, 0x02, 0x01, 0x4a, 0x00, + 0x46, 0x04, 0x00, 0x08, 0x02, 0x00, 0x20, 0x80, + 0x00, 0x80, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0xd8, 0x6f, 0x15, 0x02, 0x08, 0x00, + // Entry 340 - 37F + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, + 0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x84, 0xe3, + 0xdd, 0xbf, 0xf9, 0xf9, 0x3b, 0x7f, 0x7f, 0xdb, + 0xfd, 0xfc, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xf6, + 0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xb3, 0x6c, 0xff, + 0xd9, 0xad, 0xdf, 0xfe, 0xef, 0xba, 0xdf, 0xff, + 0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0xff, + 0xfd, 0xfd, 0xdf, 0x2f, 0x9c, 0xdf, 0xf3, 0x6f, + // Entry 380 - 3BF + 0xdf, 0xdd, 0xff, 0xfb, 0xee, 0xd2, 0xab, 0x5f, + 0xd5, 0xdf, 0x7f, 0xff, 0xeb, 0xff, 0xe4, 0x4d, + 0xf9, 0xff, 0xfe, 0xf7, 0xfd, 0xdf, 0xfb, 0xbf, + 0xee, 0xdb, 0x6f, 0xef, 0xff, 0x7f, 0xff, 0xff, + 0xf7, 0x5f, 0xd3, 0x3b, 0xfd, 0xd9, 0xdf, 0xeb, + 0xbc, 0x08, 0x05, 0x24, 0xff, 0x07, 0x70, 0xfe, + 0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x3d, 0x1b, + 0x06, 0xe6, 0x72, 0x60, 0xd1, 0x3c, 0x7f, 0x44, + // Entry 3C0 - 3FF + 0x02, 0x30, 0x9f, 0x7a, 0x16, 0xbd, 0x7f, 0x57, + 0xf2, 0xff, 0x31, 0xff, 0xf2, 0x1e, 0x90, 0xf7, + 0xf1, 0xf9, 0x45, 0x80, 0x01, 0x02, 0x00, 0x00, + 0x40, 0x54, 0x9f, 0x8a, 0xd9, 0xd9, 0x0e, 0x11, + 0x84, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x00, 0x01, + 0x05, 0xd1, 0x50, 0x58, 0x00, 0x00, 0x00, 0x10, + 0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2, + 0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe, + // Entry 400 - 43F + 0x53, 0x6f, 0xdf, 0xe7, 0xdb, 0x65, 0xbb, 0x7f, + 0xfa, 0xff, 0x77, 0xf3, 0xef, 0xbf, 0xfd, 0xf7, + 0xdf, 0xdf, 0x9b, 0x7f, 0xff, 0xff, 0x7f, 0x6f, + 0xf7, 0xfb, 0xeb, 0xdf, 0xbc, 0xff, 0xbf, 0x6b, + 0x7b, 0xfb, 0xff, 0xce, 0x76, 0xbd, 0xf7, 0xf7, + 0xdf, 0xdc, 0xf7, 0xf7, 0xff, 0xdf, 0xf3, 0xfe, + 0xef, 0xff, 0xff, 0xff, 0xb6, 0x7f, 0x7f, 0xde, + 0xf7, 0xb9, 0xeb, 0x77, 0xff, 0xfb, 0xbf, 0xdf, + // Entry 440 - 47F + 0xfd, 0xfe, 0xfb, 0xff, 0xfe, 0xeb, 0x1f, 0x7d, + 0x2f, 0xfd, 0xb6, 0xb5, 0xa5, 0xfc, 0xff, 0xfd, + 0x7f, 0x4e, 0xbf, 0x8e, 0xae, 0xff, 0xee, 0xdf, + 0x7f, 0xf7, 0x73, 0x02, 0x02, 0x04, 0xfc, 0xf7, + 0xff, 0xb7, 0xd7, 0xef, 0xfe, 0xcd, 0xf5, 0xce, + 0xe2, 0x8e, 0xe7, 0xbf, 0xb7, 0xff, 0x56, 0xbd, + 0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff, + 0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x04, 0x44, + // Entry 480 - 4BF + 0x13, 0x50, 0x5d, 0xaf, 0xa6, 0xfd, 0x99, 0xfb, + 0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20, + 0x14, 0x00, 0x55, 0x51, 0x82, 0x65, 0xf5, 0x41, + 0xe2, 0xff, 0xfc, 0xdf, 0x00, 0x05, 0xc5, 0x05, + 0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x04, + 0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x51, 0x20, 0x05, 0x04, 0x01, 0x00, 0x00, + 0x06, 0x01, 0x20, 0x00, 0x18, 0x01, 0x92, 0xb1, + // Entry 4C0 - 4FF + 0xfd, 0x47, 0x49, 0x06, 0x95, 0x06, 0x57, 0xed, + 0xfb, 0x4c, 0x1c, 0x6b, 0x83, 0x04, 0x62, 0x40, + 0x00, 0x11, 0x42, 0x00, 0x00, 0x00, 0x54, 0x83, + 0xb8, 0x4f, 0x10, 0x8c, 0x89, 0x46, 0xde, 0xf7, + 0x13, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00, + 0x01, 0x00, 0x00, 0xf0, 0x5b, 0xf4, 0xbe, 0x3d, + 0xba, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41, + // Entry 500 - 53F + 0x30, 0xff, 0x79, 0x72, 0x04, 0x00, 0x00, 0x49, + 0x2d, 0x14, 0x27, 0x57, 0xed, 0xf1, 0x3f, 0xe7, + 0x3f, 0x00, 0x00, 0x02, 0xc6, 0xa0, 0x1e, 0xf8, + 0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xe5, 0xf7, + 0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10, + 0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9, + 0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c, + 0x00, 0x00, 0x00, 0x42, 0x71, 0x42, 0x00, 0x40, + // Entry 540 - 57F + 0x00, 0x00, 0x01, 0x43, 0x19, 0x00, 0x08, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + // Entry 580 - 5BF + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xab, 0xbd, 0xe7, 0x57, 0xee, 0x13, 0x5d, + 0x09, 0xc1, 0x40, 0x21, 0xfa, 0x17, 0x01, 0x80, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xce, 0xfb, 0xbf, + 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x30, 0x15, 0xa3, 0x10, 0x00, 0x00, 0x00, + 0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x00, 0x81, + 0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40, + // Entry 5C0 - 5FF + 0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0x3e, 0x02, + 0xaa, 0x10, 0x5d, 0x98, 0x52, 0x00, 0x80, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02, + 0x19, 0x00, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d, + 0x31, 0x00, 0x00, 0x00, 0x01, 0x10, 0x02, 0x20, + 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00, + 0x00, 0x1f, 0xdf, 0xf2, 0xb9, 0xff, 0xfd, 0x3f, + 0x1f, 0x18, 0xcf, 0x9c, 0xbf, 0xaf, 0x5f, 0xfe, + // Entry 600 - 63F + 0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9, + 0xb7, 0xf6, 0xfb, 0xb3, 0xc7, 0xff, 0x6f, 0xf1, + 0x73, 0xb1, 0x7f, 0x9f, 0x7f, 0xbd, 0xfc, 0xb7, + 0xee, 0x1c, 0xfa, 0xcb, 0xef, 0xdd, 0xf9, 0xbd, + 0x6e, 0xae, 0x55, 0xfd, 0x6e, 0x81, 0x76, 0x1f, + 0xd4, 0x77, 0xf5, 0x7d, 0xfb, 0xff, 0xeb, 0xfe, + 0xbe, 0x5f, 0x46, 0x1b, 0xe9, 0x5f, 0x50, 0x18, + 0x02, 0xfa, 0xf7, 0x9d, 0x15, 0x97, 0x05, 0x0f, + // Entry 640 - 67F + 0x75, 0xc4, 0x7d, 0x81, 0x82, 0xf1, 0x57, 0x6c, + 0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde, + 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x1f, 0x00, 0x98, + 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff, + 0xb9, 0xda, 0x7d, 0x50, 0x1e, 0x15, 0x7b, 0xb4, + 0xf5, 0x3e, 0xff, 0xff, 0xf1, 0xf7, 0xff, 0xe7, + 0x5f, 0xff, 0xff, 0x9e, 0xdb, 0xf6, 0xd7, 0xb9, + 0xef, 0x27, 0x80, 0xbb, 0xc5, 0xff, 0xff, 0xe3, + // Entry 680 - 6BF + 0x97, 0x9d, 0xbf, 0x9f, 0xf7, 0xc7, 0xfd, 0x37, + 0xce, 0x7f, 0x04, 0x1d, 0x53, 0x7f, 0xf8, 0xda, + 0x5d, 0xce, 0x7d, 0x06, 0xb9, 0xea, 0x69, 0xa0, + 0x1a, 0x20, 0x00, 0x30, 0x02, 0x04, 0x24, 0x08, + 0x04, 0x00, 0x00, 0x40, 0xd4, 0x02, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x01, 0x06, + 0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x04, 0x00, 0x10, 0x8c, 0x58, 0xd5, 0x0d, 0x0f, + // Entry 6C0 - 6FF + 0x14, 0x4d, 0xf1, 0x16, 0x44, 0xd1, 0x42, 0x08, + 0x40, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, + 0x00, 0xdc, 0xfb, 0xcb, 0x0e, 0x58, 0x08, 0x41, + 0x04, 0x20, 0x04, 0x00, 0x30, 0x12, 0x40, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xab, + 0x6d, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00, + // Entry 700 - 73F + 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x80, 0x86, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xdf, 0x18, 0x00, 0x00, 0x02, 0xf0, 0xfd, 0x79, + 0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x09, 0x20, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 740 - 77F + 0x00, 0x00, 0x00, 0xef, 0xd5, 0xfd, 0xcf, 0x7e, + 0xa0, 0x11, 0x00, 0x00, 0x00, 0x92, 0x01, 0x44, + 0xcd, 0xf9, 0x5c, 0x00, 0x01, 0x00, 0x30, 0x04, + 0x04, 0x55, 0x00, 0x01, 0x04, 0xf4, 0x3f, 0x4a, + 0x01, 0x00, 0x00, 0xb0, 0x80, 0x00, 0x55, 0x55, + 0x97, 0x7c, 0x9f, 0x31, 0xcc, 0x68, 0xd1, 0x03, + 0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60, + // Entry 780 - 7BF + 0x03, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01, + 0x00, 0x00, 0x20, 0x00, 0x24, 0x44, 0x00, 0x00, + 0x10, 0x03, 0x11, 0x02, 0x01, 0x00, 0x00, 0xf0, + 0xf5, 0xff, 0xd5, 0x97, 0xbc, 0x70, 0xd6, 0x78, + 0x78, 0x15, 0x50, 0x00, 0xa4, 0x84, 0xa9, 0x41, + 0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x00, + 0xe8, 0x30, 0x90, 0x6a, 0x92, 0x00, 0x00, 0x02, + 0xff, 0xef, 0xff, 0x4b, 0x85, 0x53, 0xf4, 0xed, + // Entry 7C0 - 7FF + 0xdd, 0xbf, 0x72, 0x19, 0xc7, 0x0c, 0xd5, 0x42, + 0x54, 0xdd, 0x77, 0x14, 0x00, 0x80, 0x40, 0x56, + 0xcc, 0x16, 0x9e, 0xea, 0x35, 0x7d, 0xef, 0xff, + 0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d, + 0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80, + 0x10, 0x20, 0x24, 0x00, 0xff, 0x2f, 0xd3, 0x60, + 0xfe, 0x01, 0x02, 0x88, 0x0a, 0x40, 0x16, 0x01, + 0x01, 0x15, 0x2b, 0x3c, 0x01, 0x00, 0x00, 0x10, + // Entry 800 - 83F + 0x90, 0x49, 0x41, 0x02, 0x02, 0x01, 0xe1, 0xbf, + 0xbf, 0x03, 0x00, 0x00, 0x10, 0xd4, 0xa3, 0xd1, + 0x40, 0x9c, 0x44, 0xdf, 0xf5, 0x8f, 0x66, 0xb3, + 0x55, 0x20, 0xd4, 0xc1, 0xd8, 0x30, 0x3d, 0x80, + 0x00, 0x00, 0x00, 0x04, 0xd4, 0x11, 0xc5, 0x84, + 0x2e, 0x50, 0x00, 0x22, 0x50, 0x6e, 0xbd, 0x93, + 0x07, 0x00, 0x20, 0x10, 0x84, 0xb2, 0x45, 0x10, + 0x06, 0x44, 0x00, 0x00, 0x12, 0x02, 0x11, 0x00, + // Entry 840 - 87F + 0xf0, 0xfb, 0xfd, 0x3f, 0x05, 0x00, 0x12, 0x81, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28, + 0x84, 0x00, 0x23, 0xc0, 0x23, 0x24, 0x00, 0x00, + 0x00, 0xcb, 0xe4, 0x3a, 0x42, 0x88, 0x14, 0xf1, + 0xef, 0xff, 0x7f, 0x12, 0x01, 0x01, 0x84, 0x50, + 0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40, + 0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1, + // Entry 880 - 8BF + 0x76, 0x16, 0x08, 0x03, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, + 0x0a, 0x00, 0x80, 0x00, 0x00, +} + +// altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives +// to 2-letter language codes that cannot be derived using the method described above. +// Each 3-letter code is followed by its 1-byte langID. +const altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff" + +// altLangIndex is used to convert indexes in altLangISO3 to langIDs. +// Size: 12 bytes, 6 elements +var altLangIndex = [6]uint16{ + 0x0278, 0x03fd, 0x01f3, 0x03dc, 0x0139, 0x0200, +} + +// langAliasMap maps langIDs to their suggested replacements. +// Size: 644 bytes, 161 elements +var langAliasMap = [161]fromTo{ + 0: {from: 0x81, to: 0x87}, + 1: {from: 0x181, to: 0x1a7}, + 2: {from: 0x1eb, to: 0x1da}, + 3: {from: 0x1f3, to: 0x1b5}, + 4: {from: 0x200, to: 0x508}, + 5: {from: 0x207, to: 0x206}, + 6: {from: 0x307, to: 0x3d3}, + 7: {from: 0x33e, to: 0x366}, + 8: {from: 0x3fd, to: 0x428}, + 9: {from: 0x470, to: 0x14e}, + 10: {from: 0x486, to: 0x447}, + 11: {from: 0x498, to: 0x20}, + 12: {from: 0x533, to: 0x539}, + 13: {from: 0x584, to: 0x129}, + 14: {from: 0x625, to: 0x1ea6}, + 15: {from: 0x646, to: 0x427}, + 16: {from: 0x657, to: 0x427}, + 17: {from: 0x6e2, to: 0x39}, + 18: {from: 0x6ed, to: 0x1d0}, + 19: {from: 0x733, to: 0x2196}, + 20: {from: 0x7a8, to: 0x55}, + 21: {from: 0x7ae, to: 0x2990}, + 22: {from: 0x7ba, to: 0x57}, + 23: {from: 0x7db, to: 0x140}, + 24: {from: 0x801, to: 0x59}, + 25: {from: 0x80a, to: 0x8c}, + 26: {from: 0x873, to: 0x805}, + 27: {from: 0x8b8, to: 0xed8}, + 28: {from: 0x9e4, to: 0x328}, + 29: {from: 0xa2b, to: 0x2bc}, + 30: {from: 0xa32, to: 0xbd}, + 31: {from: 0xab3, to: 0x3317}, + 32: {from: 0xb2d, to: 0x51f}, + 33: {from: 0xb6a, to: 0x264f}, + 34: {from: 0xb73, to: 0xbb8}, + 35: {from: 0xb90, to: 0x444}, + 36: {from: 0xbb1, to: 0x421e}, + 37: {from: 0xbb4, to: 0x51f}, + 38: {from: 0xbf3, to: 0x2d9c}, + 39: {from: 0xc23, to: 0x3176}, + 40: {from: 0xcae, to: 0xf0}, + 41: {from: 0xcfd, to: 0xf6}, + 42: {from: 0xdbd, to: 0x116}, + 43: {from: 0xdcc, to: 0x324}, + 44: {from: 0xded, to: 0xdf0}, + 45: {from: 0xdf3, to: 0x526}, + 46: {from: 0xed4, to: 0x204f}, + 47: {from: 0xee3, to: 0x2e8f}, + 48: {from: 0xf2e, to: 0x35e}, + 49: {from: 0x10c5, to: 0x13b}, + 50: {from: 0x10f9, to: 0x2c7}, + 51: {from: 0x1195, to: 0x1e4}, + 52: {from: 0x126e, to: 0x20}, + 53: {from: 0x1419, to: 0x159}, + 54: {from: 0x1465, to: 0x149}, + 55: {from: 0x1514, to: 0xd90}, + 56: {from: 0x1518, to: 0x387}, + 57: {from: 0x1527, to: 0x16ba}, + 58: {from: 0x1575, to: 0x208}, + 59: {from: 0x1578, to: 0x109}, + 60: {from: 0x1598, to: 0x3ca4}, + 61: {from: 0x165f, to: 0x195}, + 62: {from: 0x16bd, to: 0x131}, + 63: {from: 0x16f5, to: 0x29ed}, + 64: {from: 0x170d, to: 0x18e}, + 65: {from: 0x171c, to: 0xf34}, + 66: {from: 0x176f, to: 0x1519}, + 67: {from: 0x17fe, to: 0x17ab}, + 68: {from: 0x180b, to: 0x18e8}, + 69: {from: 0x187f, to: 0x42c}, + 70: {from: 0x196e, to: 0x1cf6}, + 71: {from: 0x1a69, to: 0x2ba5}, + 72: {from: 0x1a7f, to: 0x1f0}, + 73: {from: 0x1b4f, to: 0x1f2}, + 74: {from: 0x1b7b, to: 0x150a}, + 75: {from: 0x202d, to: 0x37a6}, + 76: {from: 0x2032, to: 0x20d2}, + 77: {from: 0x204f, to: 0x302}, + 78: {from: 0x20d8, to: 0x26b}, + 79: {from: 0x20e3, to: 0x25a}, + 80: {from: 0x20e7, to: 0x225}, + 81: {from: 0x20ee, to: 0x24d}, + 82: {from: 0x2104, to: 0x21e0}, + 83: {from: 0x212a, to: 0x274}, + 84: {from: 0x218e, to: 0x11d}, + 85: {from: 0x21c3, to: 0x1556}, + 86: {from: 0x21db, to: 0x4fa}, + 87: {from: 0x21e9, to: 0x495}, + 88: {from: 0x2222, to: 0x11d}, + 89: {from: 0x222c, to: 0x11d}, + 90: {from: 0x2257, to: 0x91f}, + 91: {from: 0x230b, to: 0x321b}, + 92: {from: 0x2377, to: 0x335a}, + 93: {from: 0x2467, to: 0x2be}, + 94: {from: 0x24d9, to: 0x2f6}, + 95: {from: 0x24e5, to: 0x2f1}, + 96: {from: 0x24ef, to: 0x316}, + 97: {from: 0x2545, to: 0xb50}, + 98: {from: 0x259e, to: 0xe0}, + 99: {from: 0x2633, to: 0x2c7}, + 100: {from: 0x26be, to: 0x26a9}, + 101: {from: 0x26ee, to: 0x3bf}, + 102: {from: 0x271c, to: 0x3ca4}, + 103: {from: 0x275a, to: 0x26a9}, + 104: {from: 0x277e, to: 0x434d}, + 105: {from: 0x28e4, to: 0x282c}, + 106: {from: 0x2909, to: 0x348}, + 107: {from: 0x297b, to: 0x2d9c}, + 108: {from: 0x2b0f, to: 0x384}, + 109: {from: 0x2bf1, to: 0x38c}, + 110: {from: 0x2c34, to: 0x3ca4}, + 111: {from: 0x2cf1, to: 0x3b5}, + 112: {from: 0x2d08, to: 0x58c}, + 113: {from: 0x2d3c, to: 0x143}, + 114: {from: 0x2d3d, to: 0x143}, + 115: {from: 0x2df4, to: 0x2e8}, + 116: {from: 0x2dfd, to: 0x19c1}, + 117: {from: 0x2e0f, to: 0x2d8a}, + 118: {from: 0x2e16, to: 0x289}, + 119: {from: 0x2e49, to: 0x7c}, + 120: {from: 0x2e5a, to: 0x2277}, + 121: {from: 0x2e95, to: 0x2e90}, + 122: {from: 0x2ee4, to: 0x2ecc}, + 123: {from: 0x3188, to: 0x3bb}, + 124: {from: 0x335b, to: 0x3383}, + 125: {from: 0x341f, to: 0x3d3}, + 126: {from: 0x34e3, to: 0x18c5}, + 127: {from: 0x35db, to: 0x408}, + 128: {from: 0x364d, to: 0x23e}, + 129: {from: 0x366b, to: 0x3ea}, + 130: {from: 0x36f2, to: 0x43b}, + 131: {from: 0x37b5, to: 0x11d}, + 132: {from: 0x380b, to: 0x38e7}, + 133: {from: 0x3820, to: 0x2c90}, + 134: {from: 0x3824, to: 0xa7}, + 135: {from: 0x3827, to: 0x321d}, + 136: {from: 0x3861, to: 0x399b}, + 137: {from: 0x3887, to: 0x3fb5}, + 138: {from: 0x389a, to: 0x39cc}, + 139: {from: 0x38a9, to: 0x1f99}, + 140: {from: 0x38aa, to: 0x2e8f}, + 141: {from: 0x3951, to: 0x474}, + 142: {from: 0x3b43, to: 0xd86}, + 143: {from: 0x3b6d, to: 0x132}, + 144: {from: 0x3c8e, to: 0x4b2}, + 145: {from: 0x3fb2, to: 0xfc}, + 146: {from: 0x41fd, to: 0xa86}, + 147: {from: 0x42b3, to: 0x568}, + 148: {from: 0x42ee, to: 0x3f55}, + 149: {from: 0x436d, to: 0x251}, + 150: {from: 0x43c0, to: 0x36c0}, + 151: {from: 0x43c2, to: 0x10b}, + 152: {from: 0x44a4, to: 0x3317}, + 153: {from: 0x44d8, to: 0x508}, + 154: {from: 0x45bf, to: 0x23fe}, + 155: {from: 0x45d2, to: 0x26d1}, + 156: {from: 0x4605, to: 0x48a3}, + 157: {from: 0x46a3, to: 0x4695}, + 158: {from: 0x4733, to: 0x473a}, + 159: {from: 0x490b, to: 0x316}, + 160: {from: 0x499c, to: 0x519}, +} + +// Size: 161 bytes, 161 elements +var langAliasTypes = [161]langAliasType{ + // Entry 0 - 3F + 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2, + 1, 1, 2, 0, 1, 0, 1, 2, 1, 1, 0, 0, 2, 1, 1, 0, + 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0, 0, + 2, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2, 2, 0, 1, 2, 0, + // Entry 40 - 7F + 1, 0, 1, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 1, 1, 1, + 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 2, 2, + 2, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, + 0, 2, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 2, + // Entry 80 - BF + 1, 1, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 1, 2, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, + 1, +} + +const ( + _Latn = 82 + _Hani = 50 + _Hans = 52 + _Hant = 53 + _Qaaa = 131 + _Qaai = 139 + _Qabx = 180 + _Zinh = 224 + _Zyyy = 229 + _Zzzz = 230 +) + +// script is an alphabetically sorted list of ISO 15924 codes. The index +// of the script in the string, divided by 4, is the internal scriptID. +const script tag.Index = "" + // Size: 928 bytes + "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" + + "BrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCprtCyrlCyrsDevaDsrtDuplEgyd" + + "EgyhEgypElbaEthiGeokGeorGlagGothGranGrekGujrGuruHanbHangHaniHanoHansHant" + + "HatrHebrHiraHluwHmngHrktHungIndsItalJamoJavaJpanJurcKaliKanaKharKhmrKhoj" + + "KitlKitsKndaKoreKpelKthiLanaLaooLatfLatgLatnLekeLepcLimbLinaLinbLisuLoma" + + "LyciLydiMahjMandManiMarcMayaMendMercMeroMlymModiMongMoonMrooMteiMultMymr" + + "NarbNbatNewaNkgbNkooNshuOgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhliPhlp" + + "PhlvPhnxPiqdPlrdPrtiQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaam" + + "QaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabe" + + "QabfQabgQabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabw" + + "QabxRjngRoroRunrSamrSaraSarbSaurSgnwShawShrdSiddSindSinhSoraSundSyloSyrc" + + "SyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglgThaaThaiTibtTirh" + + "UgarVaiiVispWaraWoleXpeoXsuxYiiiZinhZmthZsyeZsymZxxxZyyyZzzz\xff\xff\xff" + + "\xff" + +// suppressScript is an index from langID to the dominant script for that language, +// if it exists. If a script is given, it should be suppressed from the language tag. +// Size: 1319 bytes, 1319 elements +var suppressScript = [1319]uint8{ + // Entry 0 - 3F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 40 - 7F + 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + // Entry 80 - BF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry C0 - FF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00, + // Entry 100 - 13F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52, + 0x00, 0x52, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, + // Entry 140 - 17F + 0x52, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 180 - 1BF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x2e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 1C0 - 1FF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x52, 0x00, 0x52, 0x52, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x52, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 200 - 23F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1e, 0x00, 0x00, 0x52, 0x00, 0x00, + // Entry 240 - 27F + 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 280 - 2BF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x4f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + // Entry 2C0 - 2FF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, + // Entry 300 - 33F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x52, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + // Entry 340 - 37F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x52, 0x00, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + // Entry 380 - 3BF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, + // Entry 3C0 - 3FF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 400 - 43F + 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00, + // Entry 440 - 47F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, + 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xd5, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, + // Entry 480 - 4BF + 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 4C0 - 4FF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 500 - 53F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, +} + +const ( + _001 = 1 + _419 = 30 + _BR = 64 + _CA = 72 + _ES = 109 + _GB = 122 + _MD = 187 + _PT = 237 + _UK = 305 + _US = 308 + _ZZ = 356 + _XA = 322 + _XC = 324 + _XK = 332 +) + +// isoRegionOffset needs to be added to the index of regionISO to obtain the regionID +// for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for +// the UN.M49 codes used for groups.) +const isoRegionOffset = 31 + +// regionTypes defines the status of a region for various standards. +// Size: 357 bytes, 357 elements +var regionTypes = [357]uint8{ + // Entry 0 - 3F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + // Entry 40 - 7F + 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x04, 0x00, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, + 0x04, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, + 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + // Entry 80 - BF + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x00, 0x04, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + // Entry C0 - FF + 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, + 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, 0x06, 0x06, + 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, + 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + // Entry 100 - 13F + 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x02, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + // Entry 140 - 17F + 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x06, 0x04, + 0x06, 0x06, 0x04, 0x06, 0x05, +} + +// regionISO holds a list of alphabetically sorted 2-letter ISO region codes. +// Each 2-letter codes is followed by two bytes with the following meaning: +// - [A-Z}{2}: the first letter of the 2-letter code plus these two +// letters form the 3-letter ISO code. +// - 0, n: index into altRegionISO3. +const regionISO tag.Index = "" + // Size: 1308 bytes + "AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" + + "AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" + + "BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" + + "CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADOOMDY" + + "HYDZZAEA ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ FIINFJJIFKLKFMSMFORO" + + "FQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQNQGR" + + "RCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC IDDNIERLILSR" + + "IMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM\x00" + + "\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSOLTTU" + + "LUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNPMQTQ" + + "MRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLDNOOR" + + "NPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM\x00" + + "\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSSQTTT" + + "QU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLBSCYC" + + "SDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXMSYYR" + + "SZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTTTOTV" + + "UVTWWNTZZAUAKRUGGAUK UMMIUN USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVNNMVU" + + "UTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXNNNXO" + + "OOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUGZAAF" + + "ZMMBZRARZWWEZZZZ\xff\xff\xff\xff" + +// altRegionISO3 holds a list of 3-letter region codes that cannot be +// mapped to 2-letter codes using the default algorithm. This is a short list. +const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN" + +// altRegionIDs holds a list of regionIDs the positions of which match those +// of the 3-letter ISO codes in altRegionISO3. +// Size: 22 bytes, 11 elements +var altRegionIDs = [11]uint16{ + 0x0056, 0x006f, 0x0087, 0x00a7, 0x00a9, 0x00ac, 0x00e9, 0x0104, + 0x0120, 0x015e, 0x00db, +} + +// Size: 80 bytes, 20 elements +var regionOldMap = [20]fromTo{ + 0: {from: 0x43, to: 0xc3}, + 1: {from: 0x57, to: 0xa6}, + 2: {from: 0x5e, to: 0x5f}, + 3: {from: 0x65, to: 0x3a}, + 4: {from: 0x78, to: 0x77}, + 5: {from: 0x92, to: 0x36}, + 6: {from: 0xa2, to: 0x132}, + 7: {from: 0xc0, to: 0x132}, + 8: {from: 0xd6, to: 0x13e}, + 9: {from: 0xdb, to: 0x2a}, + 10: {from: 0xee, to: 0x132}, + 11: {from: 0xf1, to: 0xe1}, + 12: {from: 0xfb, to: 0x6f}, + 13: {from: 0x102, to: 0x163}, + 14: {from: 0x129, to: 0x125}, + 15: {from: 0x131, to: 0x7a}, + 16: {from: 0x139, to: 0x13d}, + 17: {from: 0x140, to: 0x132}, + 18: {from: 0x15c, to: 0x15d}, + 19: {from: 0x162, to: 0x4a}, +} + +// m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are +// codes indicating collections of regions. +// Size: 714 bytes, 357 elements +var m49 = [357]int16{ + // Entry 0 - 3F + 0, 1, 2, 3, 5, 9, 11, 13, + 14, 15, 17, 18, 19, 21, 29, 30, + 34, 35, 39, 53, 54, 57, 61, 142, + 143, 145, 150, 151, 154, 155, 419, 958, + 0, 20, 784, 4, 28, 660, 8, 51, + 530, 24, 10, 32, 16, 40, 36, 533, + 248, 31, 70, 52, 50, 56, 854, 100, + 48, 108, 204, 652, 60, 96, 68, 535, + // Entry 40 - 7F + 76, 44, 64, 104, 74, 72, 112, 84, + 124, 166, 180, 140, 178, 756, 384, 184, + 152, 120, 156, 170, 0, 188, 891, 296, + 192, 132, 531, 162, 196, 203, 278, 276, + 0, 262, 208, 212, 214, 204, 12, 0, + 218, 233, 818, 732, 232, 724, 231, 967, + 0, 246, 242, 238, 583, 234, 0, 250, + 249, 266, 826, 308, 268, 254, 831, 288, + // Entry 80 - BF + 292, 304, 270, 324, 312, 226, 300, 239, + 320, 316, 624, 328, 344, 334, 340, 191, + 332, 348, 854, 0, 360, 372, 376, 833, + 356, 86, 368, 364, 352, 380, 832, 388, + 400, 392, 581, 404, 417, 116, 296, 174, + 659, 408, 410, 414, 136, 398, 418, 422, + 662, 438, 144, 430, 426, 440, 442, 428, + 434, 504, 492, 498, 499, 663, 450, 584, + // Entry C0 - FF + 581, 807, 466, 104, 496, 446, 580, 474, + 478, 500, 470, 480, 462, 454, 484, 458, + 508, 516, 540, 562, 574, 566, 548, 558, + 528, 578, 524, 10, 520, 536, 570, 554, + 512, 591, 0, 604, 258, 598, 608, 586, + 616, 666, 612, 630, 275, 620, 581, 585, + 600, 591, 634, 959, 960, 961, 962, 963, + 964, 965, 966, 967, 968, 969, 970, 971, + // Entry 100 - 13F + 972, 638, 716, 642, 688, 643, 646, 682, + 90, 690, 729, 752, 702, 654, 705, 744, + 703, 694, 674, 686, 706, 740, 728, 678, + 810, 222, 534, 760, 748, 0, 796, 148, + 260, 768, 764, 762, 772, 626, 795, 788, + 776, 626, 792, 780, 798, 158, 834, 804, + 800, 826, 581, 0, 840, 858, 860, 336, + 670, 704, 862, 92, 850, 704, 548, 876, + // Entry 140 - 17F + 581, 882, 973, 974, 975, 976, 977, 978, + 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, + 995, 996, 997, 998, 720, 887, 175, 891, + 710, 894, 180, 716, 999, +} + +// m49Index gives indexes into fromM49 based on the three most significant bits +// of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in +// fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]] +// for an entry where the first 7 bits match the 7 lsb of the UN.M49 code. +// The region code is stored in the 9 lsb of the indexed value. +// Size: 18 bytes, 9 elements +var m49Index = [9]int16{ + 0, 59, 107, 142, 180, 219, 258, 290, + 332, +} + +// fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details. +// Size: 664 bytes, 332 elements +var fromM49 = [332]uint16{ + // Entry 0 - 3F + 0x0201, 0x0402, 0x0603, 0x0823, 0x0a04, 0x1026, 0x1205, 0x142a, + 0x1606, 0x1866, 0x1a07, 0x1c08, 0x1e09, 0x202c, 0x220a, 0x240b, + 0x260c, 0x2821, 0x2a0d, 0x3029, 0x3824, 0x3a0e, 0x3c0f, 0x3e31, + 0x402b, 0x4410, 0x4611, 0x482e, 0x4e12, 0x502d, 0x5841, 0x6038, + 0x6434, 0x6627, 0x6833, 0x6a13, 0x6c14, 0x7035, 0x7215, 0x783c, + 0x7a16, 0x8042, 0x883e, 0x8c32, 0x9045, 0x9444, 0x9840, 0xa847, + 0xac99, 0xb508, 0xb93b, 0xc03d, 0xc837, 0xd0c3, 0xd839, 0xe046, + 0xe8a5, 0xf051, 0xf848, 0x0859, 0x10ac, 0x184b, 0x1c17, 0x1e18, + // Entry 40 - 7F + 0x20b2, 0x2219, 0x291f, 0x2c1a, 0x2e1b, 0x3050, 0x341c, 0x361d, + 0x3852, 0x3d2d, 0x445b, 0x4c49, 0x5453, 0x5ca7, 0x5f5e, 0x644c, + 0x684a, 0x704f, 0x7855, 0x7e8f, 0x8058, 0x885c, 0x965d, 0x983a, + 0xa062, 0xa863, 0xac64, 0xb468, 0xbd19, 0xc485, 0xcc6e, 0xce6e, + 0xd06c, 0xd269, 0xd475, 0xdc73, 0xde87, 0xe472, 0xec71, 0xf030, + 0xf278, 0xf477, 0xfc7d, 0x04e4, 0x0920, 0x0c61, 0x1479, 0x187c, + 0x1c82, 0x26ec, 0x285f, 0x2c5e, 0x305f, 0x407f, 0x4880, 0x50a6, + 0x5886, 0x6081, 0x687b, 0x7084, 0x7889, 0x8088, 0x8883, 0x908b, + // Entry 80 - BF + 0x9890, 0x9c8d, 0xa137, 0xa88e, 0xb08c, 0xb891, 0xc09c, 0xc898, + 0xd094, 0xd89b, 0xe09a, 0xe895, 0xf096, 0xf89d, 0x004e, 0x089f, + 0x10a1, 0x1cad, 0x20a0, 0x28a3, 0x30a9, 0x34aa, 0x3cab, 0x42a4, + 0x44ae, 0x461e, 0x4caf, 0x54b4, 0x58b7, 0x5cb3, 0x64b8, 0x6cb1, + 0x70b5, 0x74b6, 0x7cc5, 0x84be, 0x8ccd, 0x94cf, 0x9ccc, 0xa4c2, + 0xacca, 0xb4c7, 0xbcc8, 0xc0cb, 0xc8ce, 0xd8ba, 0xe0c4, 0xe4bb, + 0xe6bc, 0xe8c9, 0xf0b9, 0xf8d0, 0x00e0, 0x08d1, 0x10dc, 0x18da, + 0x20d8, 0x2428, 0x265a, 0x2a2f, 0x2d1a, 0x2e3f, 0x30dd, 0x38d2, + // Entry C0 - FF + 0x493e, 0x54df, 0x5cd7, 0x64d3, 0x6cd5, 0x74de, 0x7cd4, 0x84d9, + 0x88c6, 0x8b32, 0x8e74, 0x90bf, 0x92ef, 0x94e7, 0x9ee1, 0xace5, + 0xb0f0, 0xb8e3, 0xc0e6, 0xc8ea, 0xd0e8, 0xd8ed, 0xe08a, 0xe525, + 0xeceb, 0xf4f2, 0xfd01, 0x0503, 0x0705, 0x0d06, 0x183b, 0x1d0d, + 0x26a8, 0x2825, 0x2cb0, 0x2ebd, 0x34e9, 0x3d38, 0x4512, 0x4d17, + 0x5507, 0x5d13, 0x6104, 0x6509, 0x6d11, 0x7d0c, 0x7f10, 0x813d, + 0x830e, 0x8514, 0x8d60, 0x9963, 0xa15c, 0xa86d, 0xb116, 0xb30a, + 0xb86b, 0xc10a, 0xc915, 0xd10f, 0xd91c, 0xe10b, 0xe84d, 0xf11b, + // Entry 100 - 13F + 0xf523, 0xf922, 0x0121, 0x0924, 0x1128, 0x192b, 0x2022, 0x2927, + 0x312a, 0x3726, 0x391e, 0x3d2c, 0x4130, 0x492f, 0x4ec1, 0x5518, + 0x646a, 0x747a, 0x7e7e, 0x809e, 0x8297, 0x852e, 0x9134, 0xa53c, + 0xac36, 0xb535, 0xb936, 0xbd3a, 0xd93f, 0xe541, 0xed5d, 0xef5d, + 0xf656, 0xfd61, 0x7c1f, 0x7ef3, 0x80f4, 0x82f5, 0x84f6, 0x86f7, + 0x88f8, 0x8af9, 0x8cfa, 0x8e6f, 0x90fc, 0x92fd, 0x94fe, 0x96ff, + 0x9900, 0x9b42, 0x9d43, 0x9f44, 0xa145, 0xa346, 0xa547, 0xa748, + 0xa949, 0xab4a, 0xad4b, 0xaf4c, 0xb14d, 0xb34e, 0xb54f, 0xb750, + // Entry 140 - 17F + 0xb951, 0xbb52, 0xbd53, 0xbf54, 0xc155, 0xc356, 0xc557, 0xc758, + 0xc959, 0xcb5a, 0xcd5b, 0xcf64, +} + +// Size: 1463 bytes +var variantIndex = map[string]uint8{ + "1606nict": 0x0, + "1694acad": 0x1, + "1901": 0x2, + "1959acad": 0x3, + "1994": 0x45, + "1996": 0x4, + "abl1943": 0x5, + "alalc97": 0x47, + "aluku": 0x6, + "ao1990": 0x7, + "arevela": 0x8, + "arevmda": 0x9, + "baku1926": 0xa, + "balanka": 0xb, + "barla": 0xc, + "basiceng": 0xd, + "bauddha": 0xe, + "biscayan": 0xf, + "biske": 0x40, + "bohoric": 0x10, + "boont": 0x11, + "colb1945": 0x12, + "cornu": 0x13, + "dajnko": 0x14, + "ekavsk": 0x15, + "emodeng": 0x16, + "fonipa": 0x48, + "fonnapa": 0x49, + "fonupa": 0x4a, + "fonxsamp": 0x4b, + "hepburn": 0x17, + "heploc": 0x46, + "hognorsk": 0x18, + "ijekavsk": 0x19, + "itihasa": 0x1a, + "jauer": 0x1b, + "jyutping": 0x1c, + "kkcor": 0x1d, + "kociewie": 0x1e, + "kscor": 0x1f, + "laukika": 0x20, + "lipaw": 0x41, + "luna1918": 0x21, + "metelko": 0x22, + "monoton": 0x23, + "ndyuka": 0x24, + "nedis": 0x25, + "newfound": 0x26, + "njiva": 0x42, + "nulik": 0x27, + "osojs": 0x43, + "oxendict": 0x28, + "pamaka": 0x29, + "petr1708": 0x2a, + "pinyin": 0x2b, + "polyton": 0x2c, + "puter": 0x2d, + "rigik": 0x2e, + "rozaj": 0x2f, + "rumgr": 0x30, + "scotland": 0x31, + "scouse": 0x32, + "simple": 0x4c, + "solba": 0x44, + "sotav": 0x33, + "surmiran": 0x34, + "sursilv": 0x35, + "sutsilv": 0x36, + "tarask": 0x37, + "uccor": 0x38, + "ucrcor": 0x39, + "ulster": 0x3a, + "unifon": 0x3b, + "vaidika": 0x3c, + "valencia": 0x3d, + "vallader": 0x3e, + "wadegile": 0x3f, +} + +// variantNumSpecialized is the number of specialized variants in variants. +const variantNumSpecialized = 71 + +// nRegionGroups is the number of region groups. +const nRegionGroups = 32 + +type likelyLangRegion struct { + lang uint16 + region uint16 +} + +// likelyScript is a lookup table, indexed by scriptID, for the most likely +// languages and regions given a script. +// Size: 928 bytes, 232 elements +var likelyScript = [232]likelyLangRegion{ + 1: {lang: 0x149, region: 0x83}, + 3: {lang: 0x299, region: 0x105}, + 4: {lang: 0x1e, region: 0x98}, + 5: {lang: 0x39, region: 0x6a}, + 7: {lang: 0x3a, region: 0x9b}, + 8: {lang: 0x1d0, region: 0x27}, + 9: {lang: 0x12, region: 0x9b}, + 10: {lang: 0x5a, region: 0x94}, + 11: {lang: 0x5f, region: 0x51}, + 12: {lang: 0xb7, region: 0xb3}, + 13: {lang: 0x62, region: 0x94}, + 14: {lang: 0xa3, region: 0x34}, + 15: {lang: 0x3e0, region: 0x98}, + 17: {lang: 0x51f, region: 0x12d}, + 18: {lang: 0x3a8, region: 0x98}, + 19: {lang: 0x159, region: 0x77}, + 20: {lang: 0xc0, region: 0x94}, + 21: {lang: 0x9b, region: 0xe6}, + 22: {lang: 0xd9, region: 0x34}, + 23: {lang: 0xf0, region: 0x48}, + 24: {lang: 0x4e6, region: 0x12a}, + 25: {lang: 0xe5, region: 0x13d}, + 26: {lang: 0xe3, region: 0x134}, + 28: {lang: 0xee, region: 0x6a}, + 29: {lang: 0x199, region: 0x5c}, + 30: {lang: 0x3d9, region: 0x105}, + 32: {lang: 0x1b7, region: 0x98}, + 34: {lang: 0x159, region: 0x77}, + 37: {lang: 0x12f, region: 0x6a}, + 38: {lang: 0x427, region: 0x26}, + 39: {lang: 0x26, region: 0x6e}, + 41: {lang: 0x208, region: 0x7c}, + 42: {lang: 0xfa, region: 0x37}, + 43: {lang: 0x198, region: 0x12f}, + 44: {lang: 0x3e0, region: 0x98}, + 45: {lang: 0x131, region: 0x86}, + 46: {lang: 0x19d, region: 0x98}, + 47: {lang: 0x394, region: 0x98}, + 48: {lang: 0x51f, region: 0x12d}, + 49: {lang: 0x24b, region: 0xaa}, + 50: {lang: 0x51f, region: 0x52}, + 51: {lang: 0x1c4, region: 0xe6}, + 52: {lang: 0x51f, region: 0x52}, + 53: {lang: 0x51f, region: 0x12d}, + 54: {lang: 0x2f4, region: 0x9a}, + 55: {lang: 0x1b5, region: 0x96}, + 56: {lang: 0x1f8, region: 0xa1}, + 57: {lang: 0x1be, region: 0x12a}, + 58: {lang: 0x1c3, region: 0xae}, + 60: {lang: 0x1ce, region: 0x91}, + 62: {lang: 0x13d, region: 0x9d}, + 63: {lang: 0x24b, region: 0xaa}, + 64: {lang: 0x206, region: 0x94}, + 65: {lang: 0x1f8, region: 0xa1}, + 67: {lang: 0x130, region: 0xc3}, + 68: {lang: 0x1f8, region: 0xa1}, + 69: {lang: 0x3b2, region: 0xe7}, + 70: {lang: 0x242, region: 0xa5}, + 71: {lang: 0x3f0, region: 0x98}, + 74: {lang: 0x249, region: 0x98}, + 75: {lang: 0x24b, region: 0xaa}, + 77: {lang: 0x87, region: 0x98}, + 78: {lang: 0x367, region: 0x122}, + 79: {lang: 0x2af, region: 0xae}, + 84: {lang: 0x296, region: 0x98}, + 85: {lang: 0x29f, region: 0x98}, + 86: {lang: 0x286, region: 0x86}, + 87: {lang: 0x199, region: 0x86}, + 88: {lang: 0x2a3, region: 0x52}, + 90: {lang: 0x4ea, region: 0x12a}, + 91: {lang: 0x4eb, region: 0x12a}, + 92: {lang: 0x1b7, region: 0x98}, + 93: {lang: 0x32e, region: 0x9b}, + 94: {lang: 0x4ed, region: 0x52}, + 95: {lang: 0xa7, region: 0x52}, + 97: {lang: 0x2df, region: 0x111}, + 98: {lang: 0x4ee, region: 0x10a}, + 99: {lang: 0x4ee, region: 0x10a}, + 100: {lang: 0x2fb, region: 0x98}, + 101: {lang: 0x312, region: 0x98}, + 102: {lang: 0x302, region: 0x52}, + 104: {lang: 0x315, region: 0x34}, + 105: {lang: 0x305, region: 0x98}, + 106: {lang: 0x40a, region: 0xe7}, + 107: {lang: 0x328, region: 0xc3}, + 108: {lang: 0x4ef, region: 0x107}, + 109: {lang: 0x3a, region: 0xa0}, + 110: {lang: 0x34a, region: 0xda}, + 112: {lang: 0x2c7, region: 0x83}, + 114: {lang: 0x3f9, region: 0x95}, + 115: {lang: 0x3e5, region: 0x98}, + 116: {lang: 0x392, region: 0xc4}, + 117: {lang: 0x38c, region: 0x98}, + 118: {lang: 0x390, region: 0x134}, + 119: {lang: 0x41f, region: 0x114}, + 120: {lang: 0x3a, region: 0x11b}, + 121: {lang: 0xf9, region: 0xc3}, + 122: {lang: 0x274, region: 0x105}, + 123: {lang: 0x2c0, region: 0x52}, + 124: {lang: 0x396, region: 0x9b}, + 125: {lang: 0x396, region: 0x52}, + 127: {lang: 0x3a4, region: 0xaf}, + 129: {lang: 0x1bf, region: 0x52}, + 130: {lang: 0x4f3, region: 0x9b}, + 181: {lang: 0x3c2, region: 0x94}, + 183: {lang: 0x369, region: 0x10b}, + 184: {lang: 0x416, region: 0x96}, + 186: {lang: 0x4f5, region: 0x15d}, + 187: {lang: 0x3e6, region: 0x98}, + 188: {lang: 0x44, region: 0x134}, + 189: {lang: 0x134, region: 0x7a}, + 190: {lang: 0x3e0, region: 0x98}, + 191: {lang: 0x3e0, region: 0x98}, + 192: {lang: 0x3f0, region: 0x98}, + 193: {lang: 0x402, region: 0xb2}, + 194: {lang: 0x429, region: 0x98}, + 195: {lang: 0x434, region: 0x94}, + 196: {lang: 0x443, region: 0x34}, + 197: {lang: 0x444, region: 0x9a}, + 201: {lang: 0x450, region: 0xe6}, + 202: {lang: 0x116, region: 0x98}, + 203: {lang: 0x454, region: 0x52}, + 204: {lang: 0x22a, region: 0x52}, + 205: {lang: 0x446, region: 0x98}, + 206: {lang: 0x49b, region: 0x52}, + 207: {lang: 0x9d, region: 0x13d}, + 208: {lang: 0x457, region: 0x98}, + 210: {lang: 0x51e, region: 0xb9}, + 211: {lang: 0x14e, region: 0xe6}, + 212: {lang: 0x124, region: 0xcc}, + 213: {lang: 0x461, region: 0x122}, + 214: {lang: 0xa7, region: 0x52}, + 215: {lang: 0x2c5, region: 0x98}, + 216: {lang: 0x4a3, region: 0x11b}, + 217: {lang: 0x4b4, region: 0xb3}, + 219: {lang: 0x1c7, region: 0x98}, + 221: {lang: 0x3a0, region: 0x9b}, + 222: {lang: 0x21, region: 0x9a}, + 223: {lang: 0x1e2, region: 0x52}, +} + +type likelyScriptRegion struct { + region uint16 + script uint8 + flags uint8 +} + +// likelyLang is a lookup table, indexed by langID, for the most likely +// scripts and regions given incomplete information. If more entries exist for a +// given language, region and script are the index and size respectively +// of the list in likelyLangList. +// Size: 5276 bytes, 1319 elements +var likelyLang = [1319]likelyScriptRegion{ + 0: {region: 0x134, script: 0x52, flags: 0x0}, + 1: {region: 0x6e, script: 0x52, flags: 0x0}, + 2: {region: 0x164, script: 0x52, flags: 0x0}, + 3: {region: 0x164, script: 0x52, flags: 0x0}, + 4: {region: 0x164, script: 0x52, flags: 0x0}, + 5: {region: 0x7c, script: 0x1e, flags: 0x0}, + 6: {region: 0x164, script: 0x52, flags: 0x0}, + 7: {region: 0x7f, script: 0x52, flags: 0x0}, + 8: {region: 0x164, script: 0x52, flags: 0x0}, + 9: {region: 0x164, script: 0x52, flags: 0x0}, + 10: {region: 0x164, script: 0x52, flags: 0x0}, + 11: {region: 0x94, script: 0x52, flags: 0x0}, + 12: {region: 0x130, script: 0x52, flags: 0x0}, + 13: {region: 0x7f, script: 0x52, flags: 0x0}, + 14: {region: 0x164, script: 0x52, flags: 0x0}, + 15: {region: 0x164, script: 0x52, flags: 0x0}, + 16: {region: 0x105, script: 0x1e, flags: 0x0}, + 17: {region: 0x164, script: 0x52, flags: 0x0}, + 18: {region: 0x9b, script: 0x9, flags: 0x0}, + 19: {region: 0x127, script: 0x5, flags: 0x0}, + 20: {region: 0x164, script: 0x52, flags: 0x0}, + 21: {region: 0x160, script: 0x52, flags: 0x0}, + 22: {region: 0x164, script: 0x52, flags: 0x0}, + 23: {region: 0x164, script: 0x52, flags: 0x0}, + 24: {region: 0x164, script: 0x52, flags: 0x0}, + 25: {region: 0x164, script: 0x52, flags: 0x0}, + 26: {region: 0x164, script: 0x52, flags: 0x0}, + 27: {region: 0x51, script: 0x52, flags: 0x0}, + 28: {region: 0x164, script: 0x52, flags: 0x0}, + 29: {region: 0x164, script: 0x52, flags: 0x0}, + 30: {region: 0x98, script: 0x4, flags: 0x0}, + 31: {region: 0x164, script: 0x52, flags: 0x0}, + 32: {region: 0x7f, script: 0x52, flags: 0x0}, + 33: {region: 0x9a, script: 0xde, flags: 0x0}, + 34: {region: 0x164, script: 0x52, flags: 0x0}, + 35: {region: 0x164, script: 0x52, flags: 0x0}, + 36: {region: 0x14c, script: 0x52, flags: 0x0}, + 37: {region: 0x105, script: 0x1e, flags: 0x0}, + 38: {region: 0x6e, script: 0x27, flags: 0x0}, + 39: {region: 0x164, script: 0x52, flags: 0x0}, + 40: {region: 0x164, script: 0x52, flags: 0x0}, + 41: {region: 0xd5, script: 0x52, flags: 0x0}, + 42: {region: 0x164, script: 0x52, flags: 0x0}, + 44: {region: 0x164, script: 0x52, flags: 0x0}, + 45: {region: 0x164, script: 0x52, flags: 0x0}, + 46: {region: 0x164, script: 0x52, flags: 0x0}, + 47: {region: 0x164, script: 0x52, flags: 0x0}, + 48: {region: 0x164, script: 0x52, flags: 0x0}, + 49: {region: 0x164, script: 0x52, flags: 0x0}, + 50: {region: 0x94, script: 0x52, flags: 0x0}, + 51: {region: 0x164, script: 0x5, flags: 0x0}, + 52: {region: 0x121, script: 0x5, flags: 0x0}, + 53: {region: 0x164, script: 0x52, flags: 0x0}, + 54: {region: 0x164, script: 0x52, flags: 0x0}, + 55: {region: 0x164, script: 0x52, flags: 0x0}, + 56: {region: 0x164, script: 0x52, flags: 0x0}, + 57: {region: 0x6a, script: 0x5, flags: 0x0}, + 58: {region: 0x0, script: 0x3, flags: 0x1}, + 59: {region: 0x164, script: 0x52, flags: 0x0}, + 60: {region: 0x50, script: 0x52, flags: 0x0}, + 61: {region: 0x3e, script: 0x52, flags: 0x0}, + 62: {region: 0x66, script: 0x5, flags: 0x0}, + 64: {region: 0xb9, script: 0x5, flags: 0x0}, + 65: {region: 0x6a, script: 0x5, flags: 0x0}, + 66: {region: 0x98, script: 0xe, flags: 0x0}, + 67: {region: 0x12e, script: 0x52, flags: 0x0}, + 68: {region: 0x134, script: 0xbc, flags: 0x0}, + 69: {region: 0x164, script: 0x52, flags: 0x0}, + 70: {region: 0x164, script: 0x52, flags: 0x0}, + 71: {region: 0x6d, script: 0x52, flags: 0x0}, + 72: {region: 0x164, script: 0x52, flags: 0x0}, + 73: {region: 0x164, script: 0x52, flags: 0x0}, + 74: {region: 0x48, script: 0x52, flags: 0x0}, + 75: {region: 0x164, script: 0x52, flags: 0x0}, + 76: {region: 0x105, script: 0x1e, flags: 0x0}, + 77: {region: 0x164, script: 0x5, flags: 0x0}, + 78: {region: 0x164, script: 0x52, flags: 0x0}, + 79: {region: 0x164, script: 0x52, flags: 0x0}, + 80: {region: 0x164, script: 0x52, flags: 0x0}, + 81: {region: 0x98, script: 0x20, flags: 0x0}, + 82: {region: 0x164, script: 0x52, flags: 0x0}, + 83: {region: 0x164, script: 0x52, flags: 0x0}, + 84: {region: 0x164, script: 0x52, flags: 0x0}, + 85: {region: 0x3e, script: 0x52, flags: 0x0}, + 86: {region: 0x164, script: 0x52, flags: 0x0}, + 87: {region: 0x3, script: 0x5, flags: 0x1}, + 88: {region: 0x105, script: 0x1e, flags: 0x0}, + 89: {region: 0xe7, script: 0x5, flags: 0x0}, + 90: {region: 0x94, script: 0x52, flags: 0x0}, + 91: {region: 0xda, script: 0x20, flags: 0x0}, + 92: {region: 0x2d, script: 0x52, flags: 0x0}, + 93: {region: 0x51, script: 0x52, flags: 0x0}, + 94: {region: 0x164, script: 0x52, flags: 0x0}, + 95: {region: 0x51, script: 0xb, flags: 0x0}, + 96: {region: 0x164, script: 0x52, flags: 0x0}, + 97: {region: 0x164, script: 0x52, flags: 0x0}, + 98: {region: 0x94, script: 0x52, flags: 0x0}, + 99: {region: 0x164, script: 0x52, flags: 0x0}, + 100: {region: 0x51, script: 0x52, flags: 0x0}, + 101: {region: 0x164, script: 0x52, flags: 0x0}, + 102: {region: 0x164, script: 0x52, flags: 0x0}, + 103: {region: 0x164, script: 0x52, flags: 0x0}, + 104: {region: 0x164, script: 0x52, flags: 0x0}, + 105: {region: 0x4e, script: 0x52, flags: 0x0}, + 106: {region: 0x164, script: 0x52, flags: 0x0}, + 107: {region: 0x164, script: 0x52, flags: 0x0}, + 108: {region: 0x164, script: 0x52, flags: 0x0}, + 109: {region: 0x164, script: 0x27, flags: 0x0}, + 110: {region: 0x164, script: 0x52, flags: 0x0}, + 111: {region: 0x164, script: 0x52, flags: 0x0}, + 112: {region: 0x46, script: 0x1e, flags: 0x0}, + 113: {region: 0x164, script: 0x52, flags: 0x0}, + 114: {region: 0x164, script: 0x52, flags: 0x0}, + 115: {region: 0x10a, script: 0x5, flags: 0x0}, + 116: {region: 0x161, script: 0x52, flags: 0x0}, + 117: {region: 0x164, script: 0x52, flags: 0x0}, + 118: {region: 0x94, script: 0x52, flags: 0x0}, + 119: {region: 0x164, script: 0x52, flags: 0x0}, + 120: {region: 0x12e, script: 0x52, flags: 0x0}, + 121: {region: 0x51, script: 0x52, flags: 0x0}, + 122: {region: 0x98, script: 0xcd, flags: 0x0}, + 123: {region: 0xe7, script: 0x5, flags: 0x0}, + 124: {region: 0x98, script: 0x20, flags: 0x0}, + 125: {region: 0x37, script: 0x1e, flags: 0x0}, + 126: {region: 0x98, script: 0x20, flags: 0x0}, + 127: {region: 0xe7, script: 0x5, flags: 0x0}, + 128: {region: 0x12a, script: 0x2d, flags: 0x0}, + 130: {region: 0x98, script: 0x20, flags: 0x0}, + 131: {region: 0x164, script: 0x52, flags: 0x0}, + 132: {region: 0x98, script: 0x20, flags: 0x0}, + 133: {region: 0xe6, script: 0x52, flags: 0x0}, + 134: {region: 0x164, script: 0x52, flags: 0x0}, + 135: {region: 0x98, script: 0x20, flags: 0x0}, + 136: {region: 0x164, script: 0x52, flags: 0x0}, + 137: {region: 0x13e, script: 0x52, flags: 0x0}, + 138: {region: 0x164, script: 0x52, flags: 0x0}, + 139: {region: 0x164, script: 0x52, flags: 0x0}, + 140: {region: 0xe6, script: 0x52, flags: 0x0}, + 141: {region: 0x164, script: 0x52, flags: 0x0}, + 142: {region: 0xd5, script: 0x52, flags: 0x0}, + 143: {region: 0x164, script: 0x52, flags: 0x0}, + 144: {region: 0x164, script: 0x52, flags: 0x0}, + 145: {region: 0x164, script: 0x52, flags: 0x0}, + 146: {region: 0x164, script: 0x27, flags: 0x0}, + 147: {region: 0x98, script: 0x20, flags: 0x0}, + 148: {region: 0x94, script: 0x52, flags: 0x0}, + 149: {region: 0x164, script: 0x52, flags: 0x0}, + 150: {region: 0x164, script: 0x52, flags: 0x0}, + 151: {region: 0x164, script: 0x52, flags: 0x0}, + 152: {region: 0x164, script: 0x52, flags: 0x0}, + 153: {region: 0x51, script: 0x52, flags: 0x0}, + 154: {region: 0x164, script: 0x52, flags: 0x0}, + 155: {region: 0xe6, script: 0x52, flags: 0x0}, + 156: {region: 0x164, script: 0x52, flags: 0x0}, + 157: {region: 0x13d, script: 0xcf, flags: 0x0}, + 158: {region: 0xc2, script: 0x52, flags: 0x0}, + 159: {region: 0x164, script: 0x52, flags: 0x0}, + 160: {region: 0x164, script: 0x52, flags: 0x0}, + 161: {region: 0xc2, script: 0x52, flags: 0x0}, + 162: {region: 0x164, script: 0x52, flags: 0x0}, + 163: {region: 0x34, script: 0xe, flags: 0x0}, + 164: {region: 0x164, script: 0x52, flags: 0x0}, + 165: {region: 0x164, script: 0x52, flags: 0x0}, + 166: {region: 0x164, script: 0x52, flags: 0x0}, + 167: {region: 0x52, script: 0xd6, flags: 0x0}, + 168: {region: 0x164, script: 0x52, flags: 0x0}, + 169: {region: 0x164, script: 0x52, flags: 0x0}, + 170: {region: 0x164, script: 0x52, flags: 0x0}, + 171: {region: 0x98, script: 0xe, flags: 0x0}, + 172: {region: 0x164, script: 0x52, flags: 0x0}, + 173: {region: 0x9b, script: 0x5, flags: 0x0}, + 174: {region: 0x164, script: 0x52, flags: 0x0}, + 175: {region: 0x4e, script: 0x52, flags: 0x0}, + 176: {region: 0x77, script: 0x52, flags: 0x0}, + 177: {region: 0x98, script: 0x20, flags: 0x0}, + 178: {region: 0xe7, script: 0x5, flags: 0x0}, + 179: {region: 0x98, script: 0x20, flags: 0x0}, + 180: {region: 0x164, script: 0x52, flags: 0x0}, + 181: {region: 0x32, script: 0x52, flags: 0x0}, + 182: {region: 0x164, script: 0x52, flags: 0x0}, + 183: {region: 0xb3, script: 0xc, flags: 0x0}, + 184: {region: 0x51, script: 0x52, flags: 0x0}, + 185: {region: 0x164, script: 0x27, flags: 0x0}, + 186: {region: 0xe6, script: 0x52, flags: 0x0}, + 187: {region: 0x164, script: 0x52, flags: 0x0}, + 188: {region: 0xe7, script: 0x20, flags: 0x0}, + 189: {region: 0x105, script: 0x1e, flags: 0x0}, + 190: {region: 0x15e, script: 0x52, flags: 0x0}, + 191: {region: 0x164, script: 0x52, flags: 0x0}, + 192: {region: 0x94, script: 0x52, flags: 0x0}, + 193: {region: 0x164, script: 0x52, flags: 0x0}, + 194: {region: 0x51, script: 0x52, flags: 0x0}, + 195: {region: 0x164, script: 0x52, flags: 0x0}, + 196: {region: 0x164, script: 0x52, flags: 0x0}, + 197: {region: 0x164, script: 0x52, flags: 0x0}, + 198: {region: 0x85, script: 0x52, flags: 0x0}, + 199: {region: 0x164, script: 0x52, flags: 0x0}, + 200: {region: 0x164, script: 0x52, flags: 0x0}, + 201: {region: 0x164, script: 0x52, flags: 0x0}, + 202: {region: 0x164, script: 0x52, flags: 0x0}, + 203: {region: 0x6c, script: 0x27, flags: 0x0}, + 204: {region: 0x164, script: 0x52, flags: 0x0}, + 205: {region: 0x164, script: 0x52, flags: 0x0}, + 206: {region: 0x51, script: 0x52, flags: 0x0}, + 207: {region: 0x164, script: 0x52, flags: 0x0}, + 208: {region: 0x164, script: 0x52, flags: 0x0}, + 209: {region: 0xc2, script: 0x52, flags: 0x0}, + 210: {region: 0x164, script: 0x52, flags: 0x0}, + 211: {region: 0x164, script: 0x52, flags: 0x0}, + 212: {region: 0x164, script: 0x52, flags: 0x0}, + 213: {region: 0x6d, script: 0x52, flags: 0x0}, + 214: {region: 0x164, script: 0x52, flags: 0x0}, + 215: {region: 0x164, script: 0x52, flags: 0x0}, + 216: {region: 0xd5, script: 0x52, flags: 0x0}, + 217: {region: 0x8, script: 0x2, flags: 0x1}, + 218: {region: 0x105, script: 0x1e, flags: 0x0}, + 219: {region: 0xe6, script: 0x52, flags: 0x0}, + 220: {region: 0x164, script: 0x52, flags: 0x0}, + 221: {region: 0x130, script: 0x52, flags: 0x0}, + 222: {region: 0x89, script: 0x52, flags: 0x0}, + 223: {region: 0x74, script: 0x52, flags: 0x0}, + 224: {region: 0x105, script: 0x1e, flags: 0x0}, + 225: {region: 0x134, script: 0x52, flags: 0x0}, + 226: {region: 0x48, script: 0x52, flags: 0x0}, + 227: {region: 0x134, script: 0x1a, flags: 0x0}, + 228: {region: 0xa5, script: 0x5, flags: 0x0}, + 229: {region: 0x13d, script: 0x19, flags: 0x0}, + 230: {region: 0x164, script: 0x52, flags: 0x0}, + 231: {region: 0x9a, script: 0x5, flags: 0x0}, + 232: {region: 0x164, script: 0x52, flags: 0x0}, + 233: {region: 0x164, script: 0x52, flags: 0x0}, + 234: {region: 0x164, script: 0x52, flags: 0x0}, + 235: {region: 0x164, script: 0x52, flags: 0x0}, + 236: {region: 0x164, script: 0x52, flags: 0x0}, + 237: {region: 0x77, script: 0x52, flags: 0x0}, + 238: {region: 0x6a, script: 0x1c, flags: 0x0}, + 239: {region: 0xe6, script: 0x52, flags: 0x0}, + 240: {region: 0x48, script: 0x17, flags: 0x0}, + 241: {region: 0x48, script: 0x17, flags: 0x0}, + 242: {region: 0x48, script: 0x17, flags: 0x0}, + 243: {region: 0x48, script: 0x17, flags: 0x0}, + 244: {region: 0x48, script: 0x17, flags: 0x0}, + 245: {region: 0x109, script: 0x52, flags: 0x0}, + 246: {region: 0x5d, script: 0x52, flags: 0x0}, + 247: {region: 0xe8, script: 0x52, flags: 0x0}, + 248: {region: 0x48, script: 0x17, flags: 0x0}, + 249: {region: 0xc3, script: 0x79, flags: 0x0}, + 250: {region: 0xa, script: 0x2, flags: 0x1}, + 251: {region: 0x105, script: 0x1e, flags: 0x0}, + 252: {region: 0x7a, script: 0x52, flags: 0x0}, + 253: {region: 0x62, script: 0x52, flags: 0x0}, + 254: {region: 0x164, script: 0x52, flags: 0x0}, + 255: {region: 0x164, script: 0x52, flags: 0x0}, + 256: {region: 0x164, script: 0x52, flags: 0x0}, + 257: {region: 0x164, script: 0x52, flags: 0x0}, + 258: {region: 0x134, script: 0x52, flags: 0x0}, + 259: {region: 0x105, script: 0x1e, flags: 0x0}, + 260: {region: 0xa3, script: 0x52, flags: 0x0}, + 261: {region: 0x164, script: 0x52, flags: 0x0}, + 262: {region: 0x164, script: 0x52, flags: 0x0}, + 263: {region: 0x98, script: 0x5, flags: 0x0}, + 264: {region: 0x164, script: 0x52, flags: 0x0}, + 265: {region: 0x5f, script: 0x52, flags: 0x0}, + 266: {region: 0x164, script: 0x52, flags: 0x0}, + 267: {region: 0x48, script: 0x52, flags: 0x0}, + 268: {region: 0x164, script: 0x52, flags: 0x0}, + 269: {region: 0x164, script: 0x52, flags: 0x0}, + 270: {region: 0x164, script: 0x52, flags: 0x0}, + 271: {region: 0x164, script: 0x5, flags: 0x0}, + 272: {region: 0x48, script: 0x52, flags: 0x0}, + 273: {region: 0x164, script: 0x52, flags: 0x0}, + 274: {region: 0x164, script: 0x52, flags: 0x0}, + 275: {region: 0xd3, script: 0x52, flags: 0x0}, + 276: {region: 0x4e, script: 0x52, flags: 0x0}, + 277: {region: 0x164, script: 0x52, flags: 0x0}, + 278: {region: 0x98, script: 0x5, flags: 0x0}, + 279: {region: 0x164, script: 0x52, flags: 0x0}, + 280: {region: 0x164, script: 0x52, flags: 0x0}, + 281: {region: 0x164, script: 0x52, flags: 0x0}, + 282: {region: 0x164, script: 0x27, flags: 0x0}, + 283: {region: 0x5f, script: 0x52, flags: 0x0}, + 284: {region: 0xc2, script: 0x52, flags: 0x0}, + 285: {region: 0xcf, script: 0x52, flags: 0x0}, + 286: {region: 0x164, script: 0x52, flags: 0x0}, + 287: {region: 0xda, script: 0x20, flags: 0x0}, + 288: {region: 0x51, script: 0x52, flags: 0x0}, + 289: {region: 0x164, script: 0x52, flags: 0x0}, + 290: {region: 0x164, script: 0x52, flags: 0x0}, + 291: {region: 0x164, script: 0x52, flags: 0x0}, + 292: {region: 0xcc, script: 0xd4, flags: 0x0}, + 293: {region: 0x164, script: 0x52, flags: 0x0}, + 294: {region: 0x164, script: 0x52, flags: 0x0}, + 295: {region: 0x113, script: 0x52, flags: 0x0}, + 296: {region: 0x36, script: 0x52, flags: 0x0}, + 297: {region: 0x42, script: 0xd6, flags: 0x0}, + 298: {region: 0x164, script: 0x52, flags: 0x0}, + 299: {region: 0xa3, script: 0x52, flags: 0x0}, + 300: {region: 0x7f, script: 0x52, flags: 0x0}, + 301: {region: 0xd5, script: 0x52, flags: 0x0}, + 302: {region: 0x9d, script: 0x52, flags: 0x0}, + 303: {region: 0x6a, script: 0x25, flags: 0x0}, + 304: {region: 0xc3, script: 0x43, flags: 0x0}, + 305: {region: 0x86, script: 0x2d, flags: 0x0}, + 306: {region: 0x164, script: 0x52, flags: 0x0}, + 307: {region: 0x164, script: 0x52, flags: 0x0}, + 308: {region: 0xc, script: 0x2, flags: 0x1}, + 309: {region: 0x164, script: 0x52, flags: 0x0}, + 310: {region: 0x164, script: 0x52, flags: 0x0}, + 311: {region: 0x1, script: 0x52, flags: 0x0}, + 312: {region: 0x164, script: 0x52, flags: 0x0}, + 313: {region: 0x6d, script: 0x52, flags: 0x0}, + 314: {region: 0x134, script: 0x52, flags: 0x0}, + 315: {region: 0x69, script: 0x52, flags: 0x0}, + 316: {region: 0x164, script: 0x52, flags: 0x0}, + 317: {region: 0x9d, script: 0x3e, flags: 0x0}, + 318: {region: 0x164, script: 0x52, flags: 0x0}, + 319: {region: 0x164, script: 0x52, flags: 0x0}, + 320: {region: 0x6d, script: 0x52, flags: 0x0}, + 321: {region: 0x51, script: 0x52, flags: 0x0}, + 322: {region: 0x6d, script: 0x52, flags: 0x0}, + 323: {region: 0x9b, script: 0x5, flags: 0x0}, + 324: {region: 0x164, script: 0x52, flags: 0x0}, + 325: {region: 0x164, script: 0x52, flags: 0x0}, + 326: {region: 0x164, script: 0x52, flags: 0x0}, + 327: {region: 0x164, script: 0x52, flags: 0x0}, + 328: {region: 0x85, script: 0x52, flags: 0x0}, + 329: {region: 0xe, script: 0x2, flags: 0x1}, + 330: {region: 0x164, script: 0x52, flags: 0x0}, + 331: {region: 0xc2, script: 0x52, flags: 0x0}, + 332: {region: 0x71, script: 0x52, flags: 0x0}, + 333: {region: 0x10a, script: 0x5, flags: 0x0}, + 334: {region: 0xe6, script: 0x52, flags: 0x0}, + 335: {region: 0x10b, script: 0x52, flags: 0x0}, + 336: {region: 0x72, script: 0x52, flags: 0x0}, + 337: {region: 0x164, script: 0x52, flags: 0x0}, + 338: {region: 0x164, script: 0x52, flags: 0x0}, + 339: {region: 0x75, script: 0x52, flags: 0x0}, + 340: {region: 0x164, script: 0x52, flags: 0x0}, + 341: {region: 0x3a, script: 0x52, flags: 0x0}, + 342: {region: 0x164, script: 0x52, flags: 0x0}, + 343: {region: 0x164, script: 0x52, flags: 0x0}, + 344: {region: 0x164, script: 0x52, flags: 0x0}, + 345: {region: 0x77, script: 0x52, flags: 0x0}, + 346: {region: 0x134, script: 0x52, flags: 0x0}, + 347: {region: 0x77, script: 0x52, flags: 0x0}, + 348: {region: 0x5f, script: 0x52, flags: 0x0}, + 349: {region: 0x5f, script: 0x52, flags: 0x0}, + 350: {region: 0x51, script: 0x5, flags: 0x0}, + 351: {region: 0x13f, script: 0x52, flags: 0x0}, + 352: {region: 0x164, script: 0x52, flags: 0x0}, + 353: {region: 0x83, script: 0x52, flags: 0x0}, + 354: {region: 0x164, script: 0x52, flags: 0x0}, + 355: {region: 0xd3, script: 0x52, flags: 0x0}, + 356: {region: 0x9d, script: 0x52, flags: 0x0}, + 357: {region: 0xd5, script: 0x52, flags: 0x0}, + 358: {region: 0x164, script: 0x52, flags: 0x0}, + 359: {region: 0x10a, script: 0x52, flags: 0x0}, + 360: {region: 0xd8, script: 0x52, flags: 0x0}, + 361: {region: 0x95, script: 0x52, flags: 0x0}, + 362: {region: 0x7f, script: 0x52, flags: 0x0}, + 363: {region: 0x164, script: 0x52, flags: 0x0}, + 364: {region: 0xbb, script: 0x52, flags: 0x0}, + 365: {region: 0x164, script: 0x52, flags: 0x0}, + 366: {region: 0x164, script: 0x52, flags: 0x0}, + 367: {region: 0x164, script: 0x52, flags: 0x0}, + 368: {region: 0x52, script: 0x34, flags: 0x0}, + 369: {region: 0x164, script: 0x52, flags: 0x0}, + 370: {region: 0x94, script: 0x52, flags: 0x0}, + 371: {region: 0x164, script: 0x52, flags: 0x0}, + 372: {region: 0x98, script: 0x20, flags: 0x0}, + 373: {region: 0x164, script: 0x52, flags: 0x0}, + 374: {region: 0x9b, script: 0x5, flags: 0x0}, + 375: {region: 0x7d, script: 0x52, flags: 0x0}, + 376: {region: 0x7a, script: 0x52, flags: 0x0}, + 377: {region: 0x164, script: 0x52, flags: 0x0}, + 378: {region: 0x164, script: 0x52, flags: 0x0}, + 379: {region: 0x164, script: 0x52, flags: 0x0}, + 380: {region: 0x164, script: 0x52, flags: 0x0}, + 381: {region: 0x164, script: 0x52, flags: 0x0}, + 382: {region: 0x164, script: 0x52, flags: 0x0}, + 383: {region: 0x6e, script: 0x27, flags: 0x0}, + 384: {region: 0x164, script: 0x52, flags: 0x0}, + 385: {region: 0xda, script: 0x20, flags: 0x0}, + 386: {region: 0x164, script: 0x52, flags: 0x0}, + 387: {region: 0xa6, script: 0x52, flags: 0x0}, + 388: {region: 0x164, script: 0x52, flags: 0x0}, + 389: {region: 0xe7, script: 0x5, flags: 0x0}, + 390: {region: 0x164, script: 0x52, flags: 0x0}, + 391: {region: 0xe7, script: 0x5, flags: 0x0}, + 392: {region: 0x164, script: 0x52, flags: 0x0}, + 393: {region: 0x164, script: 0x52, flags: 0x0}, + 394: {region: 0x6d, script: 0x52, flags: 0x0}, + 395: {region: 0x9b, script: 0x5, flags: 0x0}, + 396: {region: 0x164, script: 0x52, flags: 0x0}, + 397: {region: 0x164, script: 0x27, flags: 0x0}, + 398: {region: 0xf0, script: 0x52, flags: 0x0}, + 399: {region: 0x164, script: 0x52, flags: 0x0}, + 400: {region: 0x164, script: 0x52, flags: 0x0}, + 401: {region: 0x164, script: 0x52, flags: 0x0}, + 402: {region: 0x164, script: 0x27, flags: 0x0}, + 403: {region: 0x164, script: 0x52, flags: 0x0}, + 404: {region: 0x98, script: 0x20, flags: 0x0}, + 405: {region: 0x98, script: 0xd0, flags: 0x0}, + 406: {region: 0x94, script: 0x52, flags: 0x0}, + 407: {region: 0xd8, script: 0x52, flags: 0x0}, + 408: {region: 0x12f, script: 0x2b, flags: 0x0}, + 409: {region: 0x10, script: 0x2, flags: 0x1}, + 410: {region: 0x98, script: 0xe, flags: 0x0}, + 411: {region: 0x164, script: 0x52, flags: 0x0}, + 412: {region: 0x4d, script: 0x52, flags: 0x0}, + 413: {region: 0x98, script: 0x2e, flags: 0x0}, + 414: {region: 0x40, script: 0x52, flags: 0x0}, + 415: {region: 0x53, script: 0x52, flags: 0x0}, + 416: {region: 0x164, script: 0x52, flags: 0x0}, + 417: {region: 0x7f, script: 0x52, flags: 0x0}, + 418: {region: 0x164, script: 0x52, flags: 0x0}, + 419: {region: 0x164, script: 0x52, flags: 0x0}, + 420: {region: 0xa3, script: 0x52, flags: 0x0}, + 421: {region: 0x97, script: 0x52, flags: 0x0}, + 422: {region: 0x164, script: 0x52, flags: 0x0}, + 423: {region: 0xda, script: 0x20, flags: 0x0}, + 424: {region: 0x164, script: 0x52, flags: 0x0}, + 425: {region: 0x164, script: 0x5, flags: 0x0}, + 426: {region: 0x48, script: 0x52, flags: 0x0}, + 427: {region: 0x164, script: 0x5, flags: 0x0}, + 428: {region: 0x164, script: 0x52, flags: 0x0}, + 429: {region: 0x12, script: 0x3, flags: 0x1}, + 430: {region: 0x164, script: 0x52, flags: 0x0}, + 431: {region: 0x52, script: 0x34, flags: 0x0}, + 432: {region: 0x164, script: 0x52, flags: 0x0}, + 433: {region: 0x134, script: 0x52, flags: 0x0}, + 434: {region: 0x23, script: 0x5, flags: 0x0}, + 435: {region: 0x164, script: 0x52, flags: 0x0}, + 436: {region: 0x164, script: 0x27, flags: 0x0}, + 437: {region: 0x96, script: 0x37, flags: 0x0}, + 438: {region: 0x164, script: 0x52, flags: 0x0}, + 439: {region: 0x98, script: 0x20, flags: 0x0}, + 440: {region: 0x164, script: 0x52, flags: 0x0}, + 441: {region: 0x72, script: 0x52, flags: 0x0}, + 442: {region: 0x164, script: 0x52, flags: 0x0}, + 443: {region: 0x164, script: 0x52, flags: 0x0}, + 444: {region: 0xe6, script: 0x52, flags: 0x0}, + 445: {region: 0x164, script: 0x52, flags: 0x0}, + 446: {region: 0x12a, script: 0x39, flags: 0x0}, + 447: {region: 0x52, script: 0x81, flags: 0x0}, + 448: {region: 0x164, script: 0x52, flags: 0x0}, + 449: {region: 0xe7, script: 0x5, flags: 0x0}, + 450: {region: 0x98, script: 0x20, flags: 0x0}, + 451: {region: 0xae, script: 0x3a, flags: 0x0}, + 452: {region: 0xe6, script: 0x52, flags: 0x0}, + 453: {region: 0xe7, script: 0x5, flags: 0x0}, + 454: {region: 0xe5, script: 0x52, flags: 0x0}, + 455: {region: 0x98, script: 0x20, flags: 0x0}, + 456: {region: 0x98, script: 0x20, flags: 0x0}, + 457: {region: 0x164, script: 0x52, flags: 0x0}, + 458: {region: 0x8f, script: 0x52, flags: 0x0}, + 459: {region: 0x5f, script: 0x52, flags: 0x0}, + 460: {region: 0x52, script: 0x34, flags: 0x0}, + 461: {region: 0x90, script: 0x52, flags: 0x0}, + 462: {region: 0x91, script: 0x52, flags: 0x0}, + 463: {region: 0x164, script: 0x52, flags: 0x0}, + 464: {region: 0x27, script: 0x8, flags: 0x0}, + 465: {region: 0xd1, script: 0x52, flags: 0x0}, + 466: {region: 0x77, script: 0x52, flags: 0x0}, + 467: {region: 0x164, script: 0x52, flags: 0x0}, + 468: {region: 0x164, script: 0x52, flags: 0x0}, + 469: {region: 0xcf, script: 0x52, flags: 0x0}, + 470: {region: 0xd5, script: 0x52, flags: 0x0}, + 471: {region: 0x164, script: 0x52, flags: 0x0}, + 472: {region: 0x164, script: 0x52, flags: 0x0}, + 473: {region: 0x164, script: 0x52, flags: 0x0}, + 474: {region: 0x94, script: 0x52, flags: 0x0}, + 475: {region: 0x164, script: 0x52, flags: 0x0}, + 476: {region: 0x164, script: 0x52, flags: 0x0}, + 477: {region: 0x164, script: 0x52, flags: 0x0}, + 479: {region: 0xd5, script: 0x52, flags: 0x0}, + 480: {region: 0x164, script: 0x52, flags: 0x0}, + 481: {region: 0x164, script: 0x52, flags: 0x0}, + 482: {region: 0x52, script: 0xdf, flags: 0x0}, + 483: {region: 0x164, script: 0x52, flags: 0x0}, + 484: {region: 0x134, script: 0x52, flags: 0x0}, + 485: {region: 0x164, script: 0x52, flags: 0x0}, + 486: {region: 0x48, script: 0x52, flags: 0x0}, + 487: {region: 0x164, script: 0x52, flags: 0x0}, + 488: {region: 0x164, script: 0x52, flags: 0x0}, + 489: {region: 0xe6, script: 0x52, flags: 0x0}, + 490: {region: 0x164, script: 0x52, flags: 0x0}, + 491: {region: 0x94, script: 0x52, flags: 0x0}, + 492: {region: 0x105, script: 0x1e, flags: 0x0}, + 494: {region: 0x164, script: 0x52, flags: 0x0}, + 495: {region: 0x164, script: 0x52, flags: 0x0}, + 496: {region: 0x9c, script: 0x52, flags: 0x0}, + 497: {region: 0x9d, script: 0x52, flags: 0x0}, + 498: {region: 0x48, script: 0x17, flags: 0x0}, + 499: {region: 0x96, script: 0x37, flags: 0x0}, + 500: {region: 0x164, script: 0x52, flags: 0x0}, + 501: {region: 0x164, script: 0x52, flags: 0x0}, + 502: {region: 0x105, script: 0x52, flags: 0x0}, + 503: {region: 0x164, script: 0x52, flags: 0x0}, + 504: {region: 0xa1, script: 0x41, flags: 0x0}, + 505: {region: 0x164, script: 0x52, flags: 0x0}, + 506: {region: 0x9f, script: 0x52, flags: 0x0}, + 508: {region: 0x164, script: 0x52, flags: 0x0}, + 509: {region: 0x164, script: 0x52, flags: 0x0}, + 510: {region: 0x164, script: 0x52, flags: 0x0}, + 511: {region: 0x51, script: 0x52, flags: 0x0}, + 512: {region: 0x12f, script: 0x37, flags: 0x0}, + 513: {region: 0x164, script: 0x52, flags: 0x0}, + 514: {region: 0x12e, script: 0x52, flags: 0x0}, + 515: {region: 0xda, script: 0x20, flags: 0x0}, + 516: {region: 0x164, script: 0x52, flags: 0x0}, + 517: {region: 0x62, script: 0x52, flags: 0x0}, + 518: {region: 0x94, script: 0x52, flags: 0x0}, + 519: {region: 0x94, script: 0x52, flags: 0x0}, + 520: {region: 0x7c, script: 0x29, flags: 0x0}, + 521: {region: 0x136, script: 0x1e, flags: 0x0}, + 522: {region: 0x66, script: 0x52, flags: 0x0}, + 523: {region: 0xc3, script: 0x52, flags: 0x0}, + 524: {region: 0x164, script: 0x52, flags: 0x0}, + 525: {region: 0x164, script: 0x52, flags: 0x0}, + 526: {region: 0xd5, script: 0x52, flags: 0x0}, + 527: {region: 0xa3, script: 0x52, flags: 0x0}, + 528: {region: 0xc2, script: 0x52, flags: 0x0}, + 529: {region: 0x105, script: 0x1e, flags: 0x0}, + 530: {region: 0x164, script: 0x52, flags: 0x0}, + 531: {region: 0x164, script: 0x52, flags: 0x0}, + 532: {region: 0x164, script: 0x52, flags: 0x0}, + 533: {region: 0x164, script: 0x52, flags: 0x0}, + 534: {region: 0xd3, script: 0x5, flags: 0x0}, + 535: {region: 0xd5, script: 0x52, flags: 0x0}, + 536: {region: 0x163, script: 0x52, flags: 0x0}, + 537: {region: 0x164, script: 0x52, flags: 0x0}, + 538: {region: 0x164, script: 0x52, flags: 0x0}, + 539: {region: 0x12e, script: 0x52, flags: 0x0}, + 540: {region: 0x121, script: 0x5, flags: 0x0}, + 541: {region: 0x164, script: 0x52, flags: 0x0}, + 542: {region: 0x122, script: 0xd5, flags: 0x0}, + 543: {region: 0x59, script: 0x52, flags: 0x0}, + 544: {region: 0x51, script: 0x52, flags: 0x0}, + 545: {region: 0x164, script: 0x52, flags: 0x0}, + 546: {region: 0x4e, script: 0x52, flags: 0x0}, + 547: {region: 0x98, script: 0x20, flags: 0x0}, + 548: {region: 0x98, script: 0x20, flags: 0x0}, + 549: {region: 0x4a, script: 0x52, flags: 0x0}, + 550: {region: 0x94, script: 0x52, flags: 0x0}, + 551: {region: 0x164, script: 0x52, flags: 0x0}, + 552: {region: 0x40, script: 0x52, flags: 0x0}, + 553: {region: 0x98, script: 0x52, flags: 0x0}, + 554: {region: 0x52, script: 0xcc, flags: 0x0}, + 555: {region: 0x98, script: 0x20, flags: 0x0}, + 556: {region: 0xc2, script: 0x52, flags: 0x0}, + 557: {region: 0x164, script: 0x52, flags: 0x0}, + 558: {region: 0x98, script: 0x6b, flags: 0x0}, + 559: {region: 0xe7, script: 0x5, flags: 0x0}, + 560: {region: 0x164, script: 0x52, flags: 0x0}, + 561: {region: 0xa3, script: 0x52, flags: 0x0}, + 562: {region: 0x164, script: 0x52, flags: 0x0}, + 563: {region: 0x12a, script: 0x52, flags: 0x0}, + 564: {region: 0x164, script: 0x52, flags: 0x0}, + 565: {region: 0xd1, script: 0x52, flags: 0x0}, + 566: {region: 0x164, script: 0x52, flags: 0x0}, + 567: {region: 0xae, script: 0x4f, flags: 0x0}, + 568: {region: 0x164, script: 0x52, flags: 0x0}, + 569: {region: 0x164, script: 0x52, flags: 0x0}, + 570: {region: 0x15, script: 0x6, flags: 0x1}, + 571: {region: 0x164, script: 0x52, flags: 0x0}, + 572: {region: 0x51, script: 0x52, flags: 0x0}, + 573: {region: 0x81, script: 0x52, flags: 0x0}, + 574: {region: 0xa3, script: 0x52, flags: 0x0}, + 575: {region: 0x164, script: 0x52, flags: 0x0}, + 576: {region: 0x164, script: 0x52, flags: 0x0}, + 577: {region: 0x164, script: 0x52, flags: 0x0}, + 578: {region: 0xa5, script: 0x46, flags: 0x0}, + 579: {region: 0x29, script: 0x52, flags: 0x0}, + 580: {region: 0x164, script: 0x52, flags: 0x0}, + 581: {region: 0x164, script: 0x52, flags: 0x0}, + 582: {region: 0x164, script: 0x52, flags: 0x0}, + 583: {region: 0x164, script: 0x52, flags: 0x0}, + 584: {region: 0x164, script: 0x52, flags: 0x0}, + 585: {region: 0x98, script: 0x4a, flags: 0x0}, + 586: {region: 0x164, script: 0x52, flags: 0x0}, + 587: {region: 0xaa, script: 0x4b, flags: 0x0}, + 588: {region: 0x105, script: 0x1e, flags: 0x0}, + 589: {region: 0x98, script: 0x20, flags: 0x0}, + 590: {region: 0x164, script: 0x52, flags: 0x0}, + 591: {region: 0x74, script: 0x52, flags: 0x0}, + 592: {region: 0x164, script: 0x52, flags: 0x0}, + 593: {region: 0xb3, script: 0x52, flags: 0x0}, + 594: {region: 0x164, script: 0x52, flags: 0x0}, + 595: {region: 0x164, script: 0x52, flags: 0x0}, + 596: {region: 0x164, script: 0x52, flags: 0x0}, + 597: {region: 0x164, script: 0x52, flags: 0x0}, + 598: {region: 0x164, script: 0x52, flags: 0x0}, + 599: {region: 0x164, script: 0x52, flags: 0x0}, + 600: {region: 0x164, script: 0x52, flags: 0x0}, + 601: {region: 0x164, script: 0x27, flags: 0x0}, + 603: {region: 0x105, script: 0x1e, flags: 0x0}, + 604: {region: 0x111, script: 0x52, flags: 0x0}, + 605: {region: 0xe6, script: 0x52, flags: 0x0}, + 606: {region: 0x105, script: 0x52, flags: 0x0}, + 607: {region: 0x164, script: 0x52, flags: 0x0}, + 608: {region: 0x98, script: 0x20, flags: 0x0}, + 609: {region: 0x98, script: 0x5, flags: 0x0}, + 610: {region: 0x12e, script: 0x52, flags: 0x0}, + 611: {region: 0x164, script: 0x52, flags: 0x0}, + 612: {region: 0x51, script: 0x52, flags: 0x0}, + 613: {region: 0x5f, script: 0x52, flags: 0x0}, + 614: {region: 0x164, script: 0x52, flags: 0x0}, + 615: {region: 0x164, script: 0x52, flags: 0x0}, + 616: {region: 0x164, script: 0x27, flags: 0x0}, + 617: {region: 0x164, script: 0x52, flags: 0x0}, + 618: {region: 0x164, script: 0x52, flags: 0x0}, + 619: {region: 0x1b, script: 0x3, flags: 0x1}, + 620: {region: 0x164, script: 0x52, flags: 0x0}, + 621: {region: 0x164, script: 0x52, flags: 0x0}, + 622: {region: 0x164, script: 0x52, flags: 0x0}, + 623: {region: 0x164, script: 0x52, flags: 0x0}, + 624: {region: 0x105, script: 0x1e, flags: 0x0}, + 625: {region: 0x164, script: 0x52, flags: 0x0}, + 626: {region: 0x164, script: 0x52, flags: 0x0}, + 627: {region: 0x164, script: 0x52, flags: 0x0}, + 628: {region: 0x105, script: 0x1e, flags: 0x0}, + 629: {region: 0x164, script: 0x52, flags: 0x0}, + 630: {region: 0x94, script: 0x52, flags: 0x0}, + 631: {region: 0xe7, script: 0x5, flags: 0x0}, + 632: {region: 0x7a, script: 0x52, flags: 0x0}, + 633: {region: 0x164, script: 0x52, flags: 0x0}, + 634: {region: 0x164, script: 0x52, flags: 0x0}, + 635: {region: 0x164, script: 0x52, flags: 0x0}, + 636: {region: 0x164, script: 0x27, flags: 0x0}, + 637: {region: 0x122, script: 0xd5, flags: 0x0}, + 638: {region: 0xe7, script: 0x5, flags: 0x0}, + 639: {region: 0x164, script: 0x52, flags: 0x0}, + 640: {region: 0x164, script: 0x52, flags: 0x0}, + 641: {region: 0x1e, script: 0x5, flags: 0x1}, + 642: {region: 0x164, script: 0x52, flags: 0x0}, + 643: {region: 0x164, script: 0x52, flags: 0x0}, + 644: {region: 0x164, script: 0x52, flags: 0x0}, + 645: {region: 0x137, script: 0x52, flags: 0x0}, + 646: {region: 0x86, script: 0x56, flags: 0x0}, + 647: {region: 0x96, script: 0x37, flags: 0x0}, + 648: {region: 0x12e, script: 0x52, flags: 0x0}, + 649: {region: 0xe7, script: 0x5, flags: 0x0}, + 650: {region: 0x130, script: 0x52, flags: 0x0}, + 651: {region: 0x164, script: 0x52, flags: 0x0}, + 652: {region: 0xb6, script: 0x52, flags: 0x0}, + 653: {region: 0x105, script: 0x1e, flags: 0x0}, + 654: {region: 0x164, script: 0x52, flags: 0x0}, + 655: {region: 0x94, script: 0x52, flags: 0x0}, + 656: {region: 0x164, script: 0x52, flags: 0x0}, + 657: {region: 0x52, script: 0xd5, flags: 0x0}, + 658: {region: 0x164, script: 0x52, flags: 0x0}, + 659: {region: 0x164, script: 0x52, flags: 0x0}, + 660: {region: 0x164, script: 0x52, flags: 0x0}, + 661: {region: 0x164, script: 0x52, flags: 0x0}, + 662: {region: 0x98, script: 0x54, flags: 0x0}, + 663: {region: 0x164, script: 0x52, flags: 0x0}, + 664: {region: 0x164, script: 0x52, flags: 0x0}, + 665: {region: 0x105, script: 0x1e, flags: 0x0}, + 666: {region: 0x130, script: 0x52, flags: 0x0}, + 667: {region: 0x164, script: 0x52, flags: 0x0}, + 668: {region: 0xd8, script: 0x52, flags: 0x0}, + 669: {region: 0x164, script: 0x52, flags: 0x0}, + 670: {region: 0x164, script: 0x52, flags: 0x0}, + 671: {region: 0x23, script: 0x2, flags: 0x1}, + 672: {region: 0x164, script: 0x52, flags: 0x0}, + 673: {region: 0x164, script: 0x52, flags: 0x0}, + 674: {region: 0x9d, script: 0x52, flags: 0x0}, + 675: {region: 0x52, script: 0x58, flags: 0x0}, + 676: {region: 0x94, script: 0x52, flags: 0x0}, + 677: {region: 0x9b, script: 0x5, flags: 0x0}, + 678: {region: 0x134, script: 0x52, flags: 0x0}, + 679: {region: 0x164, script: 0x52, flags: 0x0}, + 680: {region: 0x164, script: 0x52, flags: 0x0}, + 681: {region: 0x98, script: 0xd0, flags: 0x0}, + 682: {region: 0x9d, script: 0x52, flags: 0x0}, + 683: {region: 0x164, script: 0x52, flags: 0x0}, + 684: {region: 0x4a, script: 0x52, flags: 0x0}, + 685: {region: 0x164, script: 0x52, flags: 0x0}, + 686: {region: 0x164, script: 0x52, flags: 0x0}, + 687: {region: 0xae, script: 0x4f, flags: 0x0}, + 688: {region: 0x164, script: 0x52, flags: 0x0}, + 689: {region: 0x164, script: 0x52, flags: 0x0}, + 690: {region: 0x4a, script: 0x52, flags: 0x0}, + 691: {region: 0x164, script: 0x52, flags: 0x0}, + 692: {region: 0x164, script: 0x52, flags: 0x0}, + 693: {region: 0x161, script: 0x52, flags: 0x0}, + 694: {region: 0x9b, script: 0x5, flags: 0x0}, + 695: {region: 0xb5, script: 0x52, flags: 0x0}, + 696: {region: 0xb7, script: 0x52, flags: 0x0}, + 697: {region: 0x4a, script: 0x52, flags: 0x0}, + 698: {region: 0x4a, script: 0x52, flags: 0x0}, + 699: {region: 0xa3, script: 0x52, flags: 0x0}, + 700: {region: 0xa3, script: 0x52, flags: 0x0}, + 701: {region: 0x9b, script: 0x5, flags: 0x0}, + 702: {region: 0xb7, script: 0x52, flags: 0x0}, + 703: {region: 0x122, script: 0xd5, flags: 0x0}, + 704: {region: 0x52, script: 0x34, flags: 0x0}, + 705: {region: 0x12a, script: 0x52, flags: 0x0}, + 706: {region: 0x94, script: 0x52, flags: 0x0}, + 707: {region: 0x51, script: 0x52, flags: 0x0}, + 708: {region: 0x98, script: 0x20, flags: 0x0}, + 709: {region: 0x98, script: 0x20, flags: 0x0}, + 710: {region: 0x94, script: 0x52, flags: 0x0}, + 711: {region: 0x25, script: 0x3, flags: 0x1}, + 712: {region: 0xa3, script: 0x52, flags: 0x0}, + 713: {region: 0x164, script: 0x52, flags: 0x0}, + 714: {region: 0xce, script: 0x52, flags: 0x0}, + 715: {region: 0x164, script: 0x52, flags: 0x0}, + 716: {region: 0x164, script: 0x52, flags: 0x0}, + 717: {region: 0x164, script: 0x52, flags: 0x0}, + 718: {region: 0x164, script: 0x52, flags: 0x0}, + 719: {region: 0x164, script: 0x52, flags: 0x0}, + 720: {region: 0x164, script: 0x52, flags: 0x0}, + 721: {region: 0x164, script: 0x52, flags: 0x0}, + 722: {region: 0x164, script: 0x52, flags: 0x0}, + 723: {region: 0x164, script: 0x52, flags: 0x0}, + 724: {region: 0x164, script: 0x52, flags: 0x0}, + 725: {region: 0x164, script: 0x52, flags: 0x0}, + 726: {region: 0x164, script: 0x5, flags: 0x0}, + 727: {region: 0x105, script: 0x1e, flags: 0x0}, + 728: {region: 0xe6, script: 0x52, flags: 0x0}, + 729: {region: 0x164, script: 0x52, flags: 0x0}, + 730: {region: 0x94, script: 0x52, flags: 0x0}, + 731: {region: 0x164, script: 0x27, flags: 0x0}, + 732: {region: 0x164, script: 0x52, flags: 0x0}, + 733: {region: 0x164, script: 0x52, flags: 0x0}, + 734: {region: 0x164, script: 0x52, flags: 0x0}, + 735: {region: 0x111, script: 0x52, flags: 0x0}, + 736: {region: 0xa3, script: 0x52, flags: 0x0}, + 737: {region: 0x164, script: 0x52, flags: 0x0}, + 738: {region: 0x164, script: 0x52, flags: 0x0}, + 739: {region: 0x122, script: 0x5, flags: 0x0}, + 740: {region: 0xcb, script: 0x52, flags: 0x0}, + 741: {region: 0x164, script: 0x52, flags: 0x0}, + 742: {region: 0x164, script: 0x52, flags: 0x0}, + 743: {region: 0x164, script: 0x52, flags: 0x0}, + 744: {region: 0xbe, script: 0x52, flags: 0x0}, + 745: {region: 0xd0, script: 0x52, flags: 0x0}, + 746: {region: 0x164, script: 0x52, flags: 0x0}, + 747: {region: 0x51, script: 0x52, flags: 0x0}, + 748: {region: 0xda, script: 0x20, flags: 0x0}, + 749: {region: 0x12e, script: 0x52, flags: 0x0}, + 750: {region: 0xbf, script: 0x52, flags: 0x0}, + 751: {region: 0x164, script: 0x52, flags: 0x0}, + 752: {region: 0x164, script: 0x52, flags: 0x0}, + 753: {region: 0xdf, script: 0x52, flags: 0x0}, + 754: {region: 0x164, script: 0x52, flags: 0x0}, + 755: {region: 0x94, script: 0x52, flags: 0x0}, + 756: {region: 0x9a, script: 0x36, flags: 0x0}, + 757: {region: 0x164, script: 0x52, flags: 0x0}, + 758: {region: 0xc1, script: 0x1e, flags: 0x0}, + 759: {region: 0x164, script: 0x5, flags: 0x0}, + 760: {region: 0x164, script: 0x52, flags: 0x0}, + 761: {region: 0x164, script: 0x52, flags: 0x0}, + 762: {region: 0x164, script: 0x52, flags: 0x0}, + 763: {region: 0x98, script: 0x64, flags: 0x0}, + 764: {region: 0x164, script: 0x52, flags: 0x0}, + 765: {region: 0x164, script: 0x52, flags: 0x0}, + 766: {region: 0x10a, script: 0x52, flags: 0x0}, + 767: {region: 0x164, script: 0x52, flags: 0x0}, + 768: {region: 0x164, script: 0x52, flags: 0x0}, + 769: {region: 0x164, script: 0x52, flags: 0x0}, + 770: {region: 0x28, script: 0x3, flags: 0x1}, + 771: {region: 0x164, script: 0x52, flags: 0x0}, + 772: {region: 0x164, script: 0x52, flags: 0x0}, + 773: {region: 0x98, script: 0xe, flags: 0x0}, + 774: {region: 0xc3, script: 0x6b, flags: 0x0}, + 776: {region: 0x164, script: 0x52, flags: 0x0}, + 777: {region: 0x48, script: 0x52, flags: 0x0}, + 778: {region: 0x48, script: 0x52, flags: 0x0}, + 779: {region: 0x36, script: 0x52, flags: 0x0}, + 780: {region: 0x164, script: 0x52, flags: 0x0}, + 781: {region: 0x164, script: 0x52, flags: 0x0}, + 782: {region: 0x164, script: 0x52, flags: 0x0}, + 783: {region: 0x164, script: 0x52, flags: 0x0}, + 784: {region: 0x164, script: 0x52, flags: 0x0}, + 785: {region: 0x164, script: 0x52, flags: 0x0}, + 786: {region: 0x98, script: 0x20, flags: 0x0}, + 787: {region: 0xda, script: 0x20, flags: 0x0}, + 788: {region: 0x105, script: 0x1e, flags: 0x0}, + 789: {region: 0x34, script: 0x68, flags: 0x0}, + 790: {region: 0x2b, script: 0x3, flags: 0x1}, + 791: {region: 0xca, script: 0x52, flags: 0x0}, + 792: {region: 0x164, script: 0x52, flags: 0x0}, + 793: {region: 0x164, script: 0x52, flags: 0x0}, + 794: {region: 0x164, script: 0x52, flags: 0x0}, + 795: {region: 0x98, script: 0x20, flags: 0x0}, + 796: {region: 0x51, script: 0x52, flags: 0x0}, + 798: {region: 0x164, script: 0x52, flags: 0x0}, + 799: {region: 0x134, script: 0x52, flags: 0x0}, + 800: {region: 0x164, script: 0x52, flags: 0x0}, + 801: {region: 0x164, script: 0x52, flags: 0x0}, + 802: {region: 0xe7, script: 0x5, flags: 0x0}, + 803: {region: 0xc2, script: 0x52, flags: 0x0}, + 804: {region: 0x98, script: 0x20, flags: 0x0}, + 805: {region: 0x94, script: 0x52, flags: 0x0}, + 806: {region: 0x163, script: 0x52, flags: 0x0}, + 807: {region: 0x164, script: 0x52, flags: 0x0}, + 808: {region: 0xc3, script: 0x6b, flags: 0x0}, + 809: {region: 0x164, script: 0x52, flags: 0x0}, + 810: {region: 0x164, script: 0x27, flags: 0x0}, + 811: {region: 0x105, script: 0x1e, flags: 0x0}, + 812: {region: 0x164, script: 0x52, flags: 0x0}, + 813: {region: 0x130, script: 0x52, flags: 0x0}, + 814: {region: 0x9b, script: 0x5d, flags: 0x0}, + 815: {region: 0x164, script: 0x52, flags: 0x0}, + 816: {region: 0x164, script: 0x52, flags: 0x0}, + 817: {region: 0x9b, script: 0x5, flags: 0x0}, + 818: {region: 0x164, script: 0x52, flags: 0x0}, + 819: {region: 0x164, script: 0x52, flags: 0x0}, + 820: {region: 0x164, script: 0x52, flags: 0x0}, + 821: {region: 0xdc, script: 0x52, flags: 0x0}, + 822: {region: 0x164, script: 0x52, flags: 0x0}, + 823: {region: 0x164, script: 0x52, flags: 0x0}, + 825: {region: 0x164, script: 0x52, flags: 0x0}, + 826: {region: 0x52, script: 0x34, flags: 0x0}, + 827: {region: 0x9d, script: 0x52, flags: 0x0}, + 828: {region: 0xd1, script: 0x52, flags: 0x0}, + 829: {region: 0x164, script: 0x52, flags: 0x0}, + 830: {region: 0xd9, script: 0x52, flags: 0x0}, + 831: {region: 0x164, script: 0x52, flags: 0x0}, + 832: {region: 0x164, script: 0x52, flags: 0x0}, + 833: {region: 0x164, script: 0x52, flags: 0x0}, + 834: {region: 0xce, script: 0x52, flags: 0x0}, + 835: {region: 0x164, script: 0x52, flags: 0x0}, + 836: {region: 0x164, script: 0x52, flags: 0x0}, + 837: {region: 0x163, script: 0x52, flags: 0x0}, + 838: {region: 0xd0, script: 0x52, flags: 0x0}, + 839: {region: 0x5f, script: 0x52, flags: 0x0}, + 840: {region: 0xda, script: 0x20, flags: 0x0}, + 841: {region: 0x164, script: 0x52, flags: 0x0}, + 842: {region: 0xda, script: 0x20, flags: 0x0}, + 843: {region: 0x164, script: 0x52, flags: 0x0}, + 844: {region: 0x164, script: 0x52, flags: 0x0}, + 845: {region: 0xd1, script: 0x52, flags: 0x0}, + 846: {region: 0x164, script: 0x52, flags: 0x0}, + 847: {region: 0x164, script: 0x52, flags: 0x0}, + 848: {region: 0xd0, script: 0x52, flags: 0x0}, + 849: {region: 0x164, script: 0x52, flags: 0x0}, + 850: {region: 0xce, script: 0x52, flags: 0x0}, + 851: {region: 0xce, script: 0x52, flags: 0x0}, + 852: {region: 0x164, script: 0x52, flags: 0x0}, + 853: {region: 0x164, script: 0x52, flags: 0x0}, + 854: {region: 0x94, script: 0x52, flags: 0x0}, + 855: {region: 0x164, script: 0x52, flags: 0x0}, + 856: {region: 0xde, script: 0x52, flags: 0x0}, + 857: {region: 0x164, script: 0x52, flags: 0x0}, + 858: {region: 0x164, script: 0x52, flags: 0x0}, + 859: {region: 0x98, script: 0x52, flags: 0x0}, + 860: {region: 0x164, script: 0x52, flags: 0x0}, + 861: {region: 0x164, script: 0x52, flags: 0x0}, + 862: {region: 0xd8, script: 0x52, flags: 0x0}, + 863: {region: 0x51, script: 0x52, flags: 0x0}, + 864: {region: 0x164, script: 0x52, flags: 0x0}, + 865: {region: 0xd9, script: 0x52, flags: 0x0}, + 866: {region: 0x164, script: 0x52, flags: 0x0}, + 867: {region: 0x51, script: 0x52, flags: 0x0}, + 868: {region: 0x164, script: 0x52, flags: 0x0}, + 869: {region: 0x164, script: 0x52, flags: 0x0}, + 870: {region: 0xd9, script: 0x52, flags: 0x0}, + 871: {region: 0x122, script: 0x4e, flags: 0x0}, + 872: {region: 0x98, script: 0x20, flags: 0x0}, + 873: {region: 0x10b, script: 0xb7, flags: 0x0}, + 874: {region: 0x164, script: 0x52, flags: 0x0}, + 875: {region: 0x164, script: 0x52, flags: 0x0}, + 876: {region: 0x83, script: 0x70, flags: 0x0}, + 877: {region: 0x160, script: 0x52, flags: 0x0}, + 878: {region: 0x164, script: 0x52, flags: 0x0}, + 879: {region: 0x48, script: 0x17, flags: 0x0}, + 880: {region: 0x164, script: 0x52, flags: 0x0}, + 881: {region: 0x160, script: 0x52, flags: 0x0}, + 882: {region: 0x164, script: 0x52, flags: 0x0}, + 883: {region: 0x164, script: 0x52, flags: 0x0}, + 884: {region: 0x164, script: 0x52, flags: 0x0}, + 885: {region: 0x164, script: 0x52, flags: 0x0}, + 886: {region: 0x164, script: 0x52, flags: 0x0}, + 887: {region: 0x116, script: 0x52, flags: 0x0}, + 888: {region: 0x164, script: 0x52, flags: 0x0}, + 889: {region: 0x164, script: 0x52, flags: 0x0}, + 890: {region: 0x134, script: 0x52, flags: 0x0}, + 891: {region: 0x164, script: 0x52, flags: 0x0}, + 892: {region: 0x52, script: 0x52, flags: 0x0}, + 893: {region: 0x164, script: 0x52, flags: 0x0}, + 894: {region: 0xcd, script: 0x52, flags: 0x0}, + 895: {region: 0x12e, script: 0x52, flags: 0x0}, + 896: {region: 0x130, script: 0x52, flags: 0x0}, + 897: {region: 0x7f, script: 0x52, flags: 0x0}, + 898: {region: 0x77, script: 0x52, flags: 0x0}, + 899: {region: 0x164, script: 0x52, flags: 0x0}, + 901: {region: 0x164, script: 0x52, flags: 0x0}, + 902: {region: 0x164, script: 0x52, flags: 0x0}, + 903: {region: 0x6e, script: 0x52, flags: 0x0}, + 904: {region: 0x164, script: 0x52, flags: 0x0}, + 905: {region: 0x164, script: 0x52, flags: 0x0}, + 906: {region: 0x164, script: 0x52, flags: 0x0}, + 907: {region: 0x164, script: 0x52, flags: 0x0}, + 908: {region: 0x98, script: 0x75, flags: 0x0}, + 909: {region: 0x164, script: 0x52, flags: 0x0}, + 910: {region: 0x164, script: 0x5, flags: 0x0}, + 911: {region: 0x7c, script: 0x1e, flags: 0x0}, + 912: {region: 0x134, script: 0x76, flags: 0x0}, + 913: {region: 0x164, script: 0x5, flags: 0x0}, + 914: {region: 0xc4, script: 0x74, flags: 0x0}, + 915: {region: 0x164, script: 0x52, flags: 0x0}, + 916: {region: 0x2e, script: 0x3, flags: 0x1}, + 917: {region: 0xe6, script: 0x52, flags: 0x0}, + 918: {region: 0x31, script: 0x2, flags: 0x1}, + 919: {region: 0xe6, script: 0x52, flags: 0x0}, + 920: {region: 0x2f, script: 0x52, flags: 0x0}, + 921: {region: 0xef, script: 0x52, flags: 0x0}, + 922: {region: 0x164, script: 0x52, flags: 0x0}, + 923: {region: 0x77, script: 0x52, flags: 0x0}, + 924: {region: 0xd5, script: 0x52, flags: 0x0}, + 925: {region: 0x134, script: 0x52, flags: 0x0}, + 926: {region: 0x48, script: 0x52, flags: 0x0}, + 927: {region: 0x164, script: 0x52, flags: 0x0}, + 928: {region: 0x9b, script: 0xdd, flags: 0x0}, + 929: {region: 0x164, script: 0x52, flags: 0x0}, + 930: {region: 0x5f, script: 0x52, flags: 0x0}, + 931: {region: 0x164, script: 0x5, flags: 0x0}, + 932: {region: 0xaf, script: 0x7f, flags: 0x0}, + 934: {region: 0x164, script: 0x52, flags: 0x0}, + 935: {region: 0x164, script: 0x52, flags: 0x0}, + 936: {region: 0x98, script: 0x12, flags: 0x0}, + 937: {region: 0xa3, script: 0x52, flags: 0x0}, + 938: {region: 0xe8, script: 0x52, flags: 0x0}, + 939: {region: 0x164, script: 0x52, flags: 0x0}, + 940: {region: 0x9d, script: 0x52, flags: 0x0}, + 941: {region: 0x164, script: 0x52, flags: 0x0}, + 942: {region: 0x164, script: 0x52, flags: 0x0}, + 943: {region: 0x86, script: 0x2d, flags: 0x0}, + 944: {region: 0x74, script: 0x52, flags: 0x0}, + 945: {region: 0x164, script: 0x52, flags: 0x0}, + 946: {region: 0xe7, script: 0x45, flags: 0x0}, + 947: {region: 0x9b, script: 0x5, flags: 0x0}, + 948: {region: 0x1, script: 0x52, flags: 0x0}, + 949: {region: 0x23, script: 0x5, flags: 0x0}, + 950: {region: 0x164, script: 0x52, flags: 0x0}, + 951: {region: 0x40, script: 0x52, flags: 0x0}, + 952: {region: 0x164, script: 0x52, flags: 0x0}, + 953: {region: 0x79, script: 0x52, flags: 0x0}, + 954: {region: 0x164, script: 0x52, flags: 0x0}, + 955: {region: 0xe3, script: 0x52, flags: 0x0}, + 956: {region: 0x88, script: 0x52, flags: 0x0}, + 957: {region: 0x68, script: 0x52, flags: 0x0}, + 958: {region: 0x164, script: 0x52, flags: 0x0}, + 959: {region: 0x98, script: 0x20, flags: 0x0}, + 960: {region: 0x164, script: 0x52, flags: 0x0}, + 961: {region: 0x101, script: 0x52, flags: 0x0}, + 962: {region: 0x94, script: 0x52, flags: 0x0}, + 963: {region: 0x164, script: 0x52, flags: 0x0}, + 964: {region: 0x164, script: 0x52, flags: 0x0}, + 965: {region: 0x9d, script: 0x52, flags: 0x0}, + 966: {region: 0x164, script: 0x5, flags: 0x0}, + 967: {region: 0x98, script: 0x52, flags: 0x0}, + 968: {region: 0x33, script: 0x2, flags: 0x1}, + 969: {region: 0xda, script: 0x20, flags: 0x0}, + 970: {region: 0x34, script: 0xe, flags: 0x0}, + 971: {region: 0x4d, script: 0x52, flags: 0x0}, + 972: {region: 0x71, script: 0x52, flags: 0x0}, + 973: {region: 0x4d, script: 0x52, flags: 0x0}, + 974: {region: 0x9b, script: 0x5, flags: 0x0}, + 975: {region: 0x10b, script: 0x52, flags: 0x0}, + 976: {region: 0x39, script: 0x52, flags: 0x0}, + 977: {region: 0x164, script: 0x52, flags: 0x0}, + 978: {region: 0xd0, script: 0x52, flags: 0x0}, + 979: {region: 0x103, script: 0x52, flags: 0x0}, + 980: {region: 0x94, script: 0x52, flags: 0x0}, + 981: {region: 0x12e, script: 0x52, flags: 0x0}, + 982: {region: 0x164, script: 0x52, flags: 0x0}, + 983: {region: 0x164, script: 0x52, flags: 0x0}, + 984: {region: 0x72, script: 0x52, flags: 0x0}, + 985: {region: 0x105, script: 0x1e, flags: 0x0}, + 986: {region: 0x12f, script: 0x1e, flags: 0x0}, + 987: {region: 0x108, script: 0x52, flags: 0x0}, + 988: {region: 0x106, script: 0x52, flags: 0x0}, + 989: {region: 0x12e, script: 0x52, flags: 0x0}, + 990: {region: 0x164, script: 0x52, flags: 0x0}, + 991: {region: 0xa1, script: 0x44, flags: 0x0}, + 992: {region: 0x98, script: 0x20, flags: 0x0}, + 993: {region: 0x7f, script: 0x52, flags: 0x0}, + 994: {region: 0x105, script: 0x1e, flags: 0x0}, + 995: {region: 0xa3, script: 0x52, flags: 0x0}, + 996: {region: 0x94, script: 0x52, flags: 0x0}, + 997: {region: 0x98, script: 0x52, flags: 0x0}, + 998: {region: 0x98, script: 0xbb, flags: 0x0}, + 999: {region: 0x164, script: 0x52, flags: 0x0}, + 1000: {region: 0x164, script: 0x52, flags: 0x0}, + 1001: {region: 0x12e, script: 0x52, flags: 0x0}, + 1002: {region: 0x9d, script: 0x52, flags: 0x0}, + 1003: {region: 0x98, script: 0x20, flags: 0x0}, + 1004: {region: 0x164, script: 0x5, flags: 0x0}, + 1005: {region: 0x9d, script: 0x52, flags: 0x0}, + 1006: {region: 0x7a, script: 0x52, flags: 0x0}, + 1007: {region: 0x48, script: 0x52, flags: 0x0}, + 1008: {region: 0x35, script: 0x4, flags: 0x1}, + 1009: {region: 0x9d, script: 0x52, flags: 0x0}, + 1010: {region: 0x9b, script: 0x5, flags: 0x0}, + 1011: {region: 0xd9, script: 0x52, flags: 0x0}, + 1012: {region: 0x4e, script: 0x52, flags: 0x0}, + 1013: {region: 0xd0, script: 0x52, flags: 0x0}, + 1014: {region: 0xce, script: 0x52, flags: 0x0}, + 1015: {region: 0xc2, script: 0x52, flags: 0x0}, + 1016: {region: 0x4b, script: 0x52, flags: 0x0}, + 1017: {region: 0x95, script: 0x72, flags: 0x0}, + 1018: {region: 0xb5, script: 0x52, flags: 0x0}, + 1019: {region: 0x164, script: 0x27, flags: 0x0}, + 1020: {region: 0x164, script: 0x52, flags: 0x0}, + 1022: {region: 0xb9, script: 0xd2, flags: 0x0}, + 1023: {region: 0x164, script: 0x52, flags: 0x0}, + 1024: {region: 0xc3, script: 0x6b, flags: 0x0}, + 1025: {region: 0x164, script: 0x5, flags: 0x0}, + 1026: {region: 0xb2, script: 0xc1, flags: 0x0}, + 1027: {region: 0x6e, script: 0x52, flags: 0x0}, + 1028: {region: 0x164, script: 0x52, flags: 0x0}, + 1029: {region: 0x164, script: 0x52, flags: 0x0}, + 1030: {region: 0x164, script: 0x52, flags: 0x0}, + 1031: {region: 0x164, script: 0x52, flags: 0x0}, + 1032: {region: 0x110, script: 0x52, flags: 0x0}, + 1033: {region: 0x164, script: 0x52, flags: 0x0}, + 1034: {region: 0xe7, script: 0x5, flags: 0x0}, + 1035: {region: 0x164, script: 0x52, flags: 0x0}, + 1036: {region: 0x10e, script: 0x52, flags: 0x0}, + 1037: {region: 0x164, script: 0x52, flags: 0x0}, + 1038: {region: 0xe8, script: 0x52, flags: 0x0}, + 1039: {region: 0x164, script: 0x52, flags: 0x0}, + 1040: {region: 0x94, script: 0x52, flags: 0x0}, + 1041: {region: 0x141, script: 0x52, flags: 0x0}, + 1042: {region: 0x10b, script: 0x52, flags: 0x0}, + 1044: {region: 0x10b, script: 0x52, flags: 0x0}, + 1045: {region: 0x71, script: 0x52, flags: 0x0}, + 1046: {region: 0x96, script: 0xb8, flags: 0x0}, + 1047: {region: 0x164, script: 0x52, flags: 0x0}, + 1048: {region: 0x71, script: 0x52, flags: 0x0}, + 1049: {region: 0x163, script: 0x52, flags: 0x0}, + 1050: {region: 0x164, script: 0x52, flags: 0x0}, + 1051: {region: 0xc2, script: 0x52, flags: 0x0}, + 1052: {region: 0x164, script: 0x52, flags: 0x0}, + 1053: {region: 0x164, script: 0x52, flags: 0x0}, + 1054: {region: 0x164, script: 0x52, flags: 0x0}, + 1055: {region: 0x114, script: 0x52, flags: 0x0}, + 1056: {region: 0x164, script: 0x52, flags: 0x0}, + 1057: {region: 0x164, script: 0x52, flags: 0x0}, + 1058: {region: 0x122, script: 0xd5, flags: 0x0}, + 1059: {region: 0x164, script: 0x52, flags: 0x0}, + 1060: {region: 0x164, script: 0x52, flags: 0x0}, + 1061: {region: 0x164, script: 0x52, flags: 0x0}, + 1062: {region: 0x164, script: 0x52, flags: 0x0}, + 1063: {region: 0x26, script: 0x52, flags: 0x0}, + 1064: {region: 0x39, script: 0x5, flags: 0x1}, + 1065: {region: 0x98, script: 0xc2, flags: 0x0}, + 1066: {region: 0x115, script: 0x52, flags: 0x0}, + 1067: {region: 0x113, script: 0x52, flags: 0x0}, + 1068: {region: 0x98, script: 0x20, flags: 0x0}, + 1069: {region: 0x160, script: 0x52, flags: 0x0}, + 1070: {region: 0x164, script: 0x52, flags: 0x0}, + 1071: {region: 0x164, script: 0x52, flags: 0x0}, + 1072: {region: 0x6c, script: 0x52, flags: 0x0}, + 1073: {region: 0x160, script: 0x52, flags: 0x0}, + 1074: {region: 0x164, script: 0x52, flags: 0x0}, + 1075: {region: 0x5f, script: 0x52, flags: 0x0}, + 1076: {region: 0x94, script: 0x52, flags: 0x0}, + 1077: {region: 0x164, script: 0x52, flags: 0x0}, + 1078: {region: 0x164, script: 0x52, flags: 0x0}, + 1079: {region: 0x12e, script: 0x52, flags: 0x0}, + 1080: {region: 0x164, script: 0x52, flags: 0x0}, + 1081: {region: 0x83, script: 0x52, flags: 0x0}, + 1082: {region: 0x10b, script: 0x52, flags: 0x0}, + 1083: {region: 0x12e, script: 0x52, flags: 0x0}, + 1084: {region: 0x15e, script: 0x5, flags: 0x0}, + 1085: {region: 0x4a, script: 0x52, flags: 0x0}, + 1086: {region: 0x5f, script: 0x52, flags: 0x0}, + 1087: {region: 0x164, script: 0x52, flags: 0x0}, + 1088: {region: 0x98, script: 0x20, flags: 0x0}, + 1089: {region: 0x94, script: 0x52, flags: 0x0}, + 1090: {region: 0x164, script: 0x52, flags: 0x0}, + 1091: {region: 0x34, script: 0xe, flags: 0x0}, + 1092: {region: 0x9a, script: 0xc5, flags: 0x0}, + 1093: {region: 0xe8, script: 0x52, flags: 0x0}, + 1094: {region: 0x98, script: 0xcd, flags: 0x0}, + 1095: {region: 0xda, script: 0x20, flags: 0x0}, + 1096: {region: 0x164, script: 0x52, flags: 0x0}, + 1097: {region: 0x164, script: 0x52, flags: 0x0}, + 1098: {region: 0x164, script: 0x52, flags: 0x0}, + 1099: {region: 0x164, script: 0x52, flags: 0x0}, + 1100: {region: 0x164, script: 0x52, flags: 0x0}, + 1101: {region: 0x164, script: 0x52, flags: 0x0}, + 1102: {region: 0x164, script: 0x52, flags: 0x0}, + 1103: {region: 0x164, script: 0x52, flags: 0x0}, + 1104: {region: 0xe6, script: 0x52, flags: 0x0}, + 1105: {region: 0x164, script: 0x52, flags: 0x0}, + 1106: {region: 0x164, script: 0x52, flags: 0x0}, + 1107: {region: 0x98, script: 0x4a, flags: 0x0}, + 1108: {region: 0x52, script: 0xcb, flags: 0x0}, + 1109: {region: 0xda, script: 0x20, flags: 0x0}, + 1110: {region: 0xda, script: 0x20, flags: 0x0}, + 1111: {region: 0x98, script: 0xd0, flags: 0x0}, + 1112: {region: 0x164, script: 0x52, flags: 0x0}, + 1113: {region: 0x111, script: 0x52, flags: 0x0}, + 1114: {region: 0x130, script: 0x52, flags: 0x0}, + 1115: {region: 0x125, script: 0x52, flags: 0x0}, + 1116: {region: 0x164, script: 0x52, flags: 0x0}, + 1117: {region: 0x3e, script: 0x3, flags: 0x1}, + 1118: {region: 0x164, script: 0x52, flags: 0x0}, + 1119: {region: 0x164, script: 0x52, flags: 0x0}, + 1120: {region: 0x164, script: 0x52, flags: 0x0}, + 1121: {region: 0x122, script: 0xd5, flags: 0x0}, + 1122: {region: 0xda, script: 0x20, flags: 0x0}, + 1123: {region: 0xda, script: 0x20, flags: 0x0}, + 1124: {region: 0xda, script: 0x20, flags: 0x0}, + 1125: {region: 0x6e, script: 0x27, flags: 0x0}, + 1126: {region: 0x164, script: 0x52, flags: 0x0}, + 1127: {region: 0x6c, script: 0x27, flags: 0x0}, + 1128: {region: 0x164, script: 0x52, flags: 0x0}, + 1129: {region: 0x164, script: 0x52, flags: 0x0}, + 1130: {region: 0x164, script: 0x52, flags: 0x0}, + 1131: {region: 0xd5, script: 0x52, flags: 0x0}, + 1132: {region: 0x126, script: 0x52, flags: 0x0}, + 1133: {region: 0x124, script: 0x52, flags: 0x0}, + 1134: {region: 0x31, script: 0x52, flags: 0x0}, + 1135: {region: 0xda, script: 0x20, flags: 0x0}, + 1136: {region: 0xe6, script: 0x52, flags: 0x0}, + 1137: {region: 0x164, script: 0x52, flags: 0x0}, + 1138: {region: 0x164, script: 0x52, flags: 0x0}, + 1139: {region: 0x31, script: 0x52, flags: 0x0}, + 1140: {region: 0xd3, script: 0x52, flags: 0x0}, + 1141: {region: 0x164, script: 0x52, flags: 0x0}, + 1142: {region: 0x160, script: 0x52, flags: 0x0}, + 1143: {region: 0x164, script: 0x52, flags: 0x0}, + 1144: {region: 0x128, script: 0x52, flags: 0x0}, + 1145: {region: 0x164, script: 0x52, flags: 0x0}, + 1146: {region: 0xcd, script: 0x52, flags: 0x0}, + 1147: {region: 0x164, script: 0x52, flags: 0x0}, + 1148: {region: 0xe5, script: 0x52, flags: 0x0}, + 1149: {region: 0x164, script: 0x52, flags: 0x0}, + 1150: {region: 0x164, script: 0x52, flags: 0x0}, + 1151: {region: 0x164, script: 0x52, flags: 0x0}, + 1152: {region: 0x12a, script: 0x52, flags: 0x0}, + 1153: {region: 0x12a, script: 0x52, flags: 0x0}, + 1154: {region: 0x12d, script: 0x52, flags: 0x0}, + 1155: {region: 0x164, script: 0x5, flags: 0x0}, + 1156: {region: 0x160, script: 0x52, flags: 0x0}, + 1157: {region: 0x86, script: 0x2d, flags: 0x0}, + 1158: {region: 0xda, script: 0x20, flags: 0x0}, + 1159: {region: 0xe6, script: 0x52, flags: 0x0}, + 1160: {region: 0x42, script: 0xd6, flags: 0x0}, + 1161: {region: 0x164, script: 0x52, flags: 0x0}, + 1162: {region: 0x105, script: 0x1e, flags: 0x0}, + 1163: {region: 0x164, script: 0x52, flags: 0x0}, + 1164: {region: 0x164, script: 0x52, flags: 0x0}, + 1165: {region: 0x130, script: 0x52, flags: 0x0}, + 1166: {region: 0x164, script: 0x52, flags: 0x0}, + 1167: {region: 0x122, script: 0xd5, flags: 0x0}, + 1168: {region: 0x31, script: 0x52, flags: 0x0}, + 1169: {region: 0x164, script: 0x52, flags: 0x0}, + 1170: {region: 0x164, script: 0x52, flags: 0x0}, + 1171: {region: 0xcd, script: 0x52, flags: 0x0}, + 1172: {region: 0x164, script: 0x52, flags: 0x0}, + 1173: {region: 0x164, script: 0x52, flags: 0x0}, + 1174: {region: 0x12c, script: 0x52, flags: 0x0}, + 1175: {region: 0x164, script: 0x52, flags: 0x0}, + 1177: {region: 0x164, script: 0x52, flags: 0x0}, + 1178: {region: 0xd3, script: 0x52, flags: 0x0}, + 1179: {region: 0x52, script: 0xce, flags: 0x0}, + 1180: {region: 0xe4, script: 0x52, flags: 0x0}, + 1181: {region: 0x164, script: 0x52, flags: 0x0}, + 1182: {region: 0x105, script: 0x1e, flags: 0x0}, + 1183: {region: 0xb9, script: 0x52, flags: 0x0}, + 1184: {region: 0x164, script: 0x52, flags: 0x0}, + 1185: {region: 0x105, script: 0x1e, flags: 0x0}, + 1186: {region: 0x41, script: 0x4, flags: 0x1}, + 1187: {region: 0x11b, script: 0xd8, flags: 0x0}, + 1188: {region: 0x12f, script: 0x1e, flags: 0x0}, + 1189: {region: 0x74, script: 0x52, flags: 0x0}, + 1190: {region: 0x29, script: 0x52, flags: 0x0}, + 1192: {region: 0x45, script: 0x3, flags: 0x1}, + 1193: {region: 0x98, script: 0xe, flags: 0x0}, + 1194: {region: 0xe7, script: 0x5, flags: 0x0}, + 1195: {region: 0x164, script: 0x52, flags: 0x0}, + 1196: {region: 0x164, script: 0x52, flags: 0x0}, + 1197: {region: 0x164, script: 0x52, flags: 0x0}, + 1198: {region: 0x164, script: 0x52, flags: 0x0}, + 1199: {region: 0x164, script: 0x52, flags: 0x0}, + 1200: {region: 0x164, script: 0x52, flags: 0x0}, + 1201: {region: 0x164, script: 0x52, flags: 0x0}, + 1202: {region: 0x48, script: 0x4, flags: 0x1}, + 1203: {region: 0x164, script: 0x52, flags: 0x0}, + 1204: {region: 0xb3, script: 0xd9, flags: 0x0}, + 1205: {region: 0x164, script: 0x52, flags: 0x0}, + 1206: {region: 0x160, script: 0x52, flags: 0x0}, + 1207: {region: 0x9d, script: 0x52, flags: 0x0}, + 1208: {region: 0x105, script: 0x52, flags: 0x0}, + 1209: {region: 0x13d, script: 0x52, flags: 0x0}, + 1210: {region: 0x11a, script: 0x52, flags: 0x0}, + 1211: {region: 0x164, script: 0x52, flags: 0x0}, + 1212: {region: 0x35, script: 0x52, flags: 0x0}, + 1213: {region: 0x5f, script: 0x52, flags: 0x0}, + 1214: {region: 0xd0, script: 0x52, flags: 0x0}, + 1215: {region: 0x1, script: 0x52, flags: 0x0}, + 1216: {region: 0x105, script: 0x52, flags: 0x0}, + 1217: {region: 0x69, script: 0x52, flags: 0x0}, + 1218: {region: 0x12e, script: 0x52, flags: 0x0}, + 1219: {region: 0x164, script: 0x52, flags: 0x0}, + 1220: {region: 0x35, script: 0x52, flags: 0x0}, + 1221: {region: 0x4d, script: 0x52, flags: 0x0}, + 1222: {region: 0x164, script: 0x52, flags: 0x0}, + 1223: {region: 0x6e, script: 0x27, flags: 0x0}, + 1224: {region: 0x164, script: 0x52, flags: 0x0}, + 1225: {region: 0xe6, script: 0x52, flags: 0x0}, + 1226: {region: 0x2e, script: 0x52, flags: 0x0}, + 1227: {region: 0x98, script: 0xd0, flags: 0x0}, + 1228: {region: 0x98, script: 0x20, flags: 0x0}, + 1229: {region: 0x164, script: 0x52, flags: 0x0}, + 1230: {region: 0x164, script: 0x52, flags: 0x0}, + 1231: {region: 0x164, script: 0x52, flags: 0x0}, + 1232: {region: 0x164, script: 0x52, flags: 0x0}, + 1233: {region: 0x164, script: 0x52, flags: 0x0}, + 1234: {region: 0x164, script: 0x52, flags: 0x0}, + 1235: {region: 0x164, script: 0x52, flags: 0x0}, + 1236: {region: 0x164, script: 0x52, flags: 0x0}, + 1237: {region: 0x164, script: 0x52, flags: 0x0}, + 1238: {region: 0x13f, script: 0x52, flags: 0x0}, + 1239: {region: 0x164, script: 0x52, flags: 0x0}, + 1240: {region: 0x164, script: 0x52, flags: 0x0}, + 1241: {region: 0xa7, script: 0x5, flags: 0x0}, + 1242: {region: 0x164, script: 0x52, flags: 0x0}, + 1243: {region: 0x113, script: 0x52, flags: 0x0}, + 1244: {region: 0x164, script: 0x52, flags: 0x0}, + 1245: {region: 0x164, script: 0x52, flags: 0x0}, + 1246: {region: 0x164, script: 0x52, flags: 0x0}, + 1247: {region: 0x164, script: 0x52, flags: 0x0}, + 1248: {region: 0x98, script: 0x20, flags: 0x0}, + 1249: {region: 0x52, script: 0x34, flags: 0x0}, + 1250: {region: 0x164, script: 0x52, flags: 0x0}, + 1251: {region: 0x164, script: 0x52, flags: 0x0}, + 1252: {region: 0x40, script: 0x52, flags: 0x0}, + 1253: {region: 0x164, script: 0x52, flags: 0x0}, + 1254: {region: 0x12a, script: 0x18, flags: 0x0}, + 1255: {region: 0x164, script: 0x52, flags: 0x0}, + 1256: {region: 0x160, script: 0x52, flags: 0x0}, + 1257: {region: 0x164, script: 0x52, flags: 0x0}, + 1258: {region: 0x12a, script: 0x5a, flags: 0x0}, + 1259: {region: 0x12a, script: 0x5b, flags: 0x0}, + 1260: {region: 0x7c, script: 0x29, flags: 0x0}, + 1261: {region: 0x52, script: 0x5e, flags: 0x0}, + 1262: {region: 0x10a, script: 0x62, flags: 0x0}, + 1263: {region: 0x107, script: 0x6c, flags: 0x0}, + 1264: {region: 0x98, script: 0x20, flags: 0x0}, + 1265: {region: 0x130, script: 0x52, flags: 0x0}, + 1266: {region: 0x164, script: 0x52, flags: 0x0}, + 1267: {region: 0x9b, script: 0x82, flags: 0x0}, + 1268: {region: 0x164, script: 0x52, flags: 0x0}, + 1269: {region: 0x15d, script: 0xba, flags: 0x0}, + 1270: {region: 0x164, script: 0x52, flags: 0x0}, + 1271: {region: 0x164, script: 0x52, flags: 0x0}, + 1272: {region: 0xda, script: 0x20, flags: 0x0}, + 1273: {region: 0x164, script: 0x52, flags: 0x0}, + 1274: {region: 0x164, script: 0x52, flags: 0x0}, + 1275: {region: 0xd0, script: 0x52, flags: 0x0}, + 1276: {region: 0x74, script: 0x52, flags: 0x0}, + 1277: {region: 0x164, script: 0x52, flags: 0x0}, + 1278: {region: 0x164, script: 0x52, flags: 0x0}, + 1279: {region: 0x51, script: 0x52, flags: 0x0}, + 1280: {region: 0x164, script: 0x52, flags: 0x0}, + 1281: {region: 0x164, script: 0x52, flags: 0x0}, + 1282: {region: 0x164, script: 0x52, flags: 0x0}, + 1283: {region: 0x51, script: 0x52, flags: 0x0}, + 1284: {region: 0x164, script: 0x52, flags: 0x0}, + 1285: {region: 0x164, script: 0x52, flags: 0x0}, + 1286: {region: 0x164, script: 0x52, flags: 0x0}, + 1287: {region: 0x164, script: 0x52, flags: 0x0}, + 1288: {region: 0x1, script: 0x37, flags: 0x0}, + 1289: {region: 0x164, script: 0x52, flags: 0x0}, + 1290: {region: 0x164, script: 0x52, flags: 0x0}, + 1291: {region: 0x164, script: 0x52, flags: 0x0}, + 1292: {region: 0x164, script: 0x52, flags: 0x0}, + 1293: {region: 0x164, script: 0x52, flags: 0x0}, + 1294: {region: 0xd5, script: 0x52, flags: 0x0}, + 1295: {region: 0x164, script: 0x52, flags: 0x0}, + 1296: {region: 0x164, script: 0x52, flags: 0x0}, + 1297: {region: 0x164, script: 0x52, flags: 0x0}, + 1298: {region: 0x40, script: 0x52, flags: 0x0}, + 1299: {region: 0x164, script: 0x52, flags: 0x0}, + 1300: {region: 0xce, script: 0x52, flags: 0x0}, + 1301: {region: 0x4c, script: 0x3, flags: 0x1}, + 1302: {region: 0x164, script: 0x52, flags: 0x0}, + 1303: {region: 0x164, script: 0x52, flags: 0x0}, + 1304: {region: 0x164, script: 0x52, flags: 0x0}, + 1305: {region: 0x52, script: 0x52, flags: 0x0}, + 1306: {region: 0x10a, script: 0x52, flags: 0x0}, + 1308: {region: 0xa7, script: 0x5, flags: 0x0}, + 1309: {region: 0xd8, script: 0x52, flags: 0x0}, + 1310: {region: 0xb9, script: 0xd2, flags: 0x0}, + 1311: {region: 0x4f, script: 0x14, flags: 0x1}, + 1312: {region: 0x164, script: 0x52, flags: 0x0}, + 1313: {region: 0x121, script: 0x52, flags: 0x0}, + 1314: {region: 0xcf, script: 0x52, flags: 0x0}, + 1315: {region: 0x164, script: 0x52, flags: 0x0}, + 1316: {region: 0x160, script: 0x52, flags: 0x0}, + 1318: {region: 0x12a, script: 0x52, flags: 0x0}, +} + +// likelyLangList holds lists info associated with likelyLang. +// Size: 396 bytes, 99 elements +var likelyLangList = [99]likelyScriptRegion{ + 0: {region: 0x9b, script: 0x7, flags: 0x0}, + 1: {region: 0xa0, script: 0x6d, flags: 0x2}, + 2: {region: 0x11b, script: 0x78, flags: 0x2}, + 3: {region: 0x31, script: 0x52, flags: 0x0}, + 4: {region: 0x9a, script: 0x5, flags: 0x4}, + 5: {region: 0x9b, script: 0x5, flags: 0x4}, + 6: {region: 0x105, script: 0x1e, flags: 0x4}, + 7: {region: 0x9b, script: 0x5, flags: 0x2}, + 8: {region: 0x98, script: 0xe, flags: 0x0}, + 9: {region: 0x34, script: 0x16, flags: 0x2}, + 10: {region: 0x105, script: 0x1e, flags: 0x0}, + 11: {region: 0x37, script: 0x2a, flags: 0x2}, + 12: {region: 0x134, script: 0x52, flags: 0x0}, + 13: {region: 0x7a, script: 0xbd, flags: 0x2}, + 14: {region: 0x113, script: 0x52, flags: 0x0}, + 15: {region: 0x83, script: 0x1, flags: 0x2}, + 16: {region: 0x5c, script: 0x1d, flags: 0x0}, + 17: {region: 0x86, script: 0x57, flags: 0x2}, + 18: {region: 0xd5, script: 0x52, flags: 0x0}, + 19: {region: 0x51, script: 0x5, flags: 0x4}, + 20: {region: 0x10a, script: 0x5, flags: 0x4}, + 21: {region: 0xad, script: 0x1e, flags: 0x0}, + 22: {region: 0x23, script: 0x5, flags: 0x4}, + 23: {region: 0x52, script: 0x5, flags: 0x4}, + 24: {region: 0x9b, script: 0x5, flags: 0x4}, + 25: {region: 0xc4, script: 0x5, flags: 0x4}, + 26: {region: 0x52, script: 0x5, flags: 0x2}, + 27: {region: 0x12a, script: 0x52, flags: 0x0}, + 28: {region: 0xaf, script: 0x5, flags: 0x4}, + 29: {region: 0x9a, script: 0x5, flags: 0x2}, + 30: {region: 0xa4, script: 0x1e, flags: 0x0}, + 31: {region: 0x52, script: 0x5, flags: 0x4}, + 32: {region: 0x12a, script: 0x52, flags: 0x4}, + 33: {region: 0x52, script: 0x5, flags: 0x2}, + 34: {region: 0x12a, script: 0x52, flags: 0x2}, + 35: {region: 0xda, script: 0x20, flags: 0x0}, + 36: {region: 0x98, script: 0x55, flags: 0x2}, + 37: {region: 0x82, script: 0x52, flags: 0x0}, + 38: {region: 0x83, script: 0x70, flags: 0x4}, + 39: {region: 0x83, script: 0x70, flags: 0x2}, + 40: {region: 0xc4, script: 0x1e, flags: 0x0}, + 41: {region: 0x52, script: 0x66, flags: 0x4}, + 42: {region: 0x52, script: 0x66, flags: 0x2}, + 43: {region: 0xcf, script: 0x52, flags: 0x0}, + 44: {region: 0x49, script: 0x5, flags: 0x4}, + 45: {region: 0x94, script: 0x5, flags: 0x4}, + 46: {region: 0x98, script: 0x2f, flags: 0x0}, + 47: {region: 0xe7, script: 0x5, flags: 0x4}, + 48: {region: 0xe7, script: 0x5, flags: 0x2}, + 49: {region: 0x9b, script: 0x7c, flags: 0x0}, + 50: {region: 0x52, script: 0x7d, flags: 0x2}, + 51: {region: 0xb9, script: 0xd2, flags: 0x0}, + 52: {region: 0xd8, script: 0x52, flags: 0x4}, + 53: {region: 0xe7, script: 0x5, flags: 0x0}, + 54: {region: 0x98, script: 0x20, flags: 0x2}, + 55: {region: 0x98, script: 0x47, flags: 0x2}, + 56: {region: 0x98, script: 0xc0, flags: 0x2}, + 57: {region: 0x104, script: 0x1e, flags: 0x0}, + 58: {region: 0xbc, script: 0x52, flags: 0x4}, + 59: {region: 0x103, script: 0x52, flags: 0x4}, + 60: {region: 0x105, script: 0x52, flags: 0x4}, + 61: {region: 0x12a, script: 0x52, flags: 0x4}, + 62: {region: 0x123, script: 0x1e, flags: 0x0}, + 63: {region: 0xe7, script: 0x5, flags: 0x4}, + 64: {region: 0xe7, script: 0x5, flags: 0x2}, + 65: {region: 0x52, script: 0x5, flags: 0x0}, + 66: {region: 0xad, script: 0x1e, flags: 0x4}, + 67: {region: 0xc4, script: 0x1e, flags: 0x4}, + 68: {region: 0xad, script: 0x1e, flags: 0x2}, + 69: {region: 0x98, script: 0xe, flags: 0x0}, + 70: {region: 0xda, script: 0x20, flags: 0x4}, + 71: {region: 0xda, script: 0x20, flags: 0x2}, + 72: {region: 0x136, script: 0x52, flags: 0x0}, + 73: {region: 0x23, script: 0x5, flags: 0x4}, + 74: {region: 0x52, script: 0x1e, flags: 0x4}, + 75: {region: 0x23, script: 0x5, flags: 0x2}, + 76: {region: 0x8c, script: 0x35, flags: 0x0}, + 77: {region: 0x52, script: 0x34, flags: 0x4}, + 78: {region: 0x52, script: 0x34, flags: 0x2}, + 79: {region: 0x52, script: 0x34, flags: 0x0}, + 80: {region: 0x2e, script: 0x35, flags: 0x4}, + 81: {region: 0x3d, script: 0x35, flags: 0x4}, + 82: {region: 0x7a, script: 0x35, flags: 0x4}, + 83: {region: 0x7d, script: 0x35, flags: 0x4}, + 84: {region: 0x8c, script: 0x35, flags: 0x4}, + 85: {region: 0x94, script: 0x35, flags: 0x4}, + 86: {region: 0xc5, script: 0x35, flags: 0x4}, + 87: {region: 0xcf, script: 0x35, flags: 0x4}, + 88: {region: 0xe1, script: 0x35, flags: 0x4}, + 89: {region: 0xe4, script: 0x35, flags: 0x4}, + 90: {region: 0xe6, script: 0x35, flags: 0x4}, + 91: {region: 0x115, script: 0x35, flags: 0x4}, + 92: {region: 0x122, script: 0x35, flags: 0x4}, + 93: {region: 0x12d, script: 0x35, flags: 0x4}, + 94: {region: 0x134, script: 0x35, flags: 0x4}, + 95: {region: 0x13d, script: 0x35, flags: 0x4}, + 96: {region: 0x12d, script: 0x11, flags: 0x2}, + 97: {region: 0x12d, script: 0x30, flags: 0x2}, + 98: {region: 0x12d, script: 0x35, flags: 0x2}, +} + +type likelyLangScript struct { + lang uint16 + script uint8 + flags uint8 +} + +// likelyRegion is a lookup table, indexed by regionID, for the most likely +// languages and scripts given incomplete information. If more entries exist +// for a given regionID, lang and script are the index and size respectively +// of the list in likelyRegionList. +// TODO: exclude containers and user-definable regions from the list. +// Size: 1428 bytes, 357 elements +var likelyRegion = [357]likelyLangScript{ + 33: {lang: 0xd5, script: 0x52, flags: 0x0}, + 34: {lang: 0x39, script: 0x5, flags: 0x0}, + 35: {lang: 0x0, script: 0x2, flags: 0x1}, + 38: {lang: 0x2, script: 0x2, flags: 0x1}, + 39: {lang: 0x4, script: 0x2, flags: 0x1}, + 41: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 42: {lang: 0x0, script: 0x52, flags: 0x0}, + 43: {lang: 0x139, script: 0x52, flags: 0x0}, + 44: {lang: 0x411, script: 0x52, flags: 0x0}, + 45: {lang: 0x109, script: 0x52, flags: 0x0}, + 47: {lang: 0x35e, script: 0x52, flags: 0x0}, + 48: {lang: 0x43a, script: 0x52, flags: 0x0}, + 49: {lang: 0x57, script: 0x52, flags: 0x0}, + 50: {lang: 0x6, script: 0x2, flags: 0x1}, + 52: {lang: 0xa3, script: 0xe, flags: 0x0}, + 53: {lang: 0x35e, script: 0x52, flags: 0x0}, + 54: {lang: 0x159, script: 0x52, flags: 0x0}, + 55: {lang: 0x7d, script: 0x1e, flags: 0x0}, + 56: {lang: 0x39, script: 0x5, flags: 0x0}, + 57: {lang: 0x3d0, script: 0x52, flags: 0x0}, + 58: {lang: 0x159, script: 0x52, flags: 0x0}, + 59: {lang: 0x159, script: 0x52, flags: 0x0}, + 61: {lang: 0x316, script: 0x52, flags: 0x0}, + 62: {lang: 0x139, script: 0x52, flags: 0x0}, + 63: {lang: 0x398, script: 0x52, flags: 0x0}, + 64: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 66: {lang: 0x8, script: 0x2, flags: 0x1}, + 68: {lang: 0x0, script: 0x52, flags: 0x0}, + 70: {lang: 0x70, script: 0x1e, flags: 0x0}, + 72: {lang: 0x508, script: 0x37, flags: 0x2}, + 73: {lang: 0x316, script: 0x5, flags: 0x2}, + 74: {lang: 0x43b, script: 0x52, flags: 0x0}, + 75: {lang: 0x159, script: 0x52, flags: 0x0}, + 76: {lang: 0x159, script: 0x52, flags: 0x0}, + 77: {lang: 0x109, script: 0x52, flags: 0x0}, + 78: {lang: 0x159, script: 0x52, flags: 0x0}, + 80: {lang: 0x139, script: 0x52, flags: 0x0}, + 81: {lang: 0x159, script: 0x52, flags: 0x0}, + 82: {lang: 0xa, script: 0x5, flags: 0x1}, + 83: {lang: 0x139, script: 0x52, flags: 0x0}, + 84: {lang: 0x0, script: 0x52, flags: 0x0}, + 85: {lang: 0x139, script: 0x52, flags: 0x0}, + 88: {lang: 0x139, script: 0x52, flags: 0x0}, + 89: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 90: {lang: 0x398, script: 0x52, flags: 0x0}, + 92: {lang: 0xf, script: 0x2, flags: 0x1}, + 93: {lang: 0xf6, script: 0x52, flags: 0x0}, + 95: {lang: 0x109, script: 0x52, flags: 0x0}, + 97: {lang: 0x1, script: 0x52, flags: 0x0}, + 98: {lang: 0xfd, script: 0x52, flags: 0x0}, + 100: {lang: 0x139, script: 0x52, flags: 0x0}, + 102: {lang: 0x11, script: 0x2, flags: 0x1}, + 103: {lang: 0x139, script: 0x52, flags: 0x0}, + 104: {lang: 0x139, script: 0x52, flags: 0x0}, + 105: {lang: 0x13b, script: 0x52, flags: 0x0}, + 106: {lang: 0x39, script: 0x5, flags: 0x0}, + 107: {lang: 0x39, script: 0x5, flags: 0x0}, + 108: {lang: 0x465, script: 0x27, flags: 0x0}, + 109: {lang: 0x139, script: 0x52, flags: 0x0}, + 110: {lang: 0x13, script: 0x2, flags: 0x1}, + 112: {lang: 0x109, script: 0x52, flags: 0x0}, + 113: {lang: 0x14c, script: 0x52, flags: 0x0}, + 114: {lang: 0x1b9, script: 0x20, flags: 0x2}, + 117: {lang: 0x153, script: 0x52, flags: 0x0}, + 119: {lang: 0x159, script: 0x52, flags: 0x0}, + 121: {lang: 0x159, script: 0x52, flags: 0x0}, + 122: {lang: 0x15, script: 0x2, flags: 0x1}, + 124: {lang: 0x17, script: 0x3, flags: 0x1}, + 125: {lang: 0x159, script: 0x52, flags: 0x0}, + 127: {lang: 0x20, script: 0x52, flags: 0x0}, + 129: {lang: 0x23d, script: 0x52, flags: 0x0}, + 131: {lang: 0x159, script: 0x52, flags: 0x0}, + 132: {lang: 0x159, script: 0x52, flags: 0x0}, + 133: {lang: 0x139, script: 0x52, flags: 0x0}, + 134: {lang: 0x1a, script: 0x2, flags: 0x1}, + 135: {lang: 0x0, script: 0x52, flags: 0x0}, + 136: {lang: 0x139, script: 0x52, flags: 0x0}, + 138: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 140: {lang: 0x51f, script: 0x35, flags: 0x0}, + 141: {lang: 0x0, script: 0x52, flags: 0x0}, + 142: {lang: 0x139, script: 0x52, flags: 0x0}, + 143: {lang: 0x1ca, script: 0x52, flags: 0x0}, + 144: {lang: 0x1cd, script: 0x52, flags: 0x0}, + 145: {lang: 0x1ce, script: 0x52, flags: 0x0}, + 147: {lang: 0x139, script: 0x52, flags: 0x0}, + 148: {lang: 0x1c, script: 0x2, flags: 0x1}, + 150: {lang: 0x1b5, script: 0x37, flags: 0x0}, + 152: {lang: 0x1e, script: 0x3, flags: 0x1}, + 154: {lang: 0x39, script: 0x5, flags: 0x0}, + 155: {lang: 0x21, script: 0x2, flags: 0x1}, + 156: {lang: 0x1f0, script: 0x52, flags: 0x0}, + 157: {lang: 0x1f1, script: 0x52, flags: 0x0}, + 160: {lang: 0x39, script: 0x5, flags: 0x0}, + 161: {lang: 0x1f8, script: 0x41, flags: 0x0}, + 163: {lang: 0x43b, script: 0x52, flags: 0x0}, + 164: {lang: 0x281, script: 0x1e, flags: 0x0}, + 165: {lang: 0x23, script: 0x3, flags: 0x1}, + 167: {lang: 0x26, script: 0x2, flags: 0x1}, + 169: {lang: 0x24b, script: 0x4b, flags: 0x0}, + 170: {lang: 0x24b, script: 0x4b, flags: 0x0}, + 171: {lang: 0x39, script: 0x5, flags: 0x0}, + 173: {lang: 0x3d9, script: 0x1e, flags: 0x0}, + 174: {lang: 0x28, script: 0x2, flags: 0x1}, + 175: {lang: 0x39, script: 0x5, flags: 0x0}, + 177: {lang: 0x109, script: 0x52, flags: 0x0}, + 178: {lang: 0x402, script: 0xc1, flags: 0x0}, + 180: {lang: 0x431, script: 0x52, flags: 0x0}, + 181: {lang: 0x2b7, script: 0x52, flags: 0x0}, + 182: {lang: 0x159, script: 0x52, flags: 0x0}, + 183: {lang: 0x2be, script: 0x52, flags: 0x0}, + 184: {lang: 0x39, script: 0x5, flags: 0x0}, + 185: {lang: 0x2a, script: 0x2, flags: 0x1}, + 186: {lang: 0x159, script: 0x52, flags: 0x0}, + 187: {lang: 0x2c, script: 0x2, flags: 0x1}, + 188: {lang: 0x428, script: 0x52, flags: 0x0}, + 189: {lang: 0x159, script: 0x52, flags: 0x0}, + 190: {lang: 0x2e8, script: 0x52, flags: 0x0}, + 193: {lang: 0x2e, script: 0x2, flags: 0x1}, + 194: {lang: 0x9e, script: 0x52, flags: 0x0}, + 195: {lang: 0x30, script: 0x2, flags: 0x1}, + 196: {lang: 0x32, script: 0x2, flags: 0x1}, + 197: {lang: 0x34, script: 0x2, flags: 0x1}, + 199: {lang: 0x159, script: 0x52, flags: 0x0}, + 200: {lang: 0x36, script: 0x2, flags: 0x1}, + 202: {lang: 0x317, script: 0x52, flags: 0x0}, + 203: {lang: 0x38, script: 0x3, flags: 0x1}, + 204: {lang: 0x124, script: 0xd4, flags: 0x0}, + 206: {lang: 0x139, script: 0x52, flags: 0x0}, + 207: {lang: 0x316, script: 0x52, flags: 0x0}, + 208: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 209: {lang: 0x15, script: 0x52, flags: 0x0}, + 210: {lang: 0x159, script: 0x52, flags: 0x0}, + 211: {lang: 0x1ad, script: 0x52, flags: 0x0}, + 213: {lang: 0x1ad, script: 0x5, flags: 0x2}, + 215: {lang: 0x139, script: 0x52, flags: 0x0}, + 216: {lang: 0x35e, script: 0x52, flags: 0x0}, + 217: {lang: 0x33e, script: 0x52, flags: 0x0}, + 218: {lang: 0x348, script: 0x20, flags: 0x0}, + 224: {lang: 0x39, script: 0x5, flags: 0x0}, + 225: {lang: 0x139, script: 0x52, flags: 0x0}, + 227: {lang: 0x139, script: 0x52, flags: 0x0}, + 228: {lang: 0x159, script: 0x52, flags: 0x0}, + 229: {lang: 0x47c, script: 0x52, flags: 0x0}, + 230: {lang: 0x14e, script: 0x52, flags: 0x0}, + 231: {lang: 0x3b, script: 0x3, flags: 0x1}, + 232: {lang: 0x3e, script: 0x2, flags: 0x1}, + 233: {lang: 0x159, script: 0x52, flags: 0x0}, + 235: {lang: 0x139, script: 0x52, flags: 0x0}, + 236: {lang: 0x39, script: 0x5, flags: 0x0}, + 237: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 239: {lang: 0x399, script: 0x52, flags: 0x0}, + 240: {lang: 0x18e, script: 0x52, flags: 0x0}, + 242: {lang: 0x39, script: 0x5, flags: 0x0}, + 257: {lang: 0x159, script: 0x52, flags: 0x0}, + 259: {lang: 0x40, script: 0x2, flags: 0x1}, + 260: {lang: 0x428, script: 0x1e, flags: 0x0}, + 261: {lang: 0x42, script: 0x2, flags: 0x1}, + 262: {lang: 0x3dc, script: 0x52, flags: 0x0}, + 263: {lang: 0x39, script: 0x5, flags: 0x0}, + 265: {lang: 0x159, script: 0x52, flags: 0x0}, + 266: {lang: 0x39, script: 0x5, flags: 0x0}, + 267: {lang: 0x44, script: 0x2, flags: 0x1}, + 270: {lang: 0x40c, script: 0x52, flags: 0x0}, + 271: {lang: 0x33e, script: 0x52, flags: 0x0}, + 272: {lang: 0x46, script: 0x2, flags: 0x1}, + 274: {lang: 0x1f1, script: 0x52, flags: 0x0}, + 275: {lang: 0x159, script: 0x52, flags: 0x0}, + 276: {lang: 0x41f, script: 0x52, flags: 0x0}, + 277: {lang: 0x35e, script: 0x52, flags: 0x0}, + 279: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 281: {lang: 0x139, script: 0x52, flags: 0x0}, + 283: {lang: 0x48, script: 0x2, flags: 0x1}, + 287: {lang: 0x159, script: 0x52, flags: 0x0}, + 288: {lang: 0x159, script: 0x52, flags: 0x0}, + 289: {lang: 0x4a, script: 0x2, flags: 0x1}, + 290: {lang: 0x4c, script: 0x3, flags: 0x1}, + 291: {lang: 0x4f, script: 0x2, flags: 0x1}, + 292: {lang: 0x46d, script: 0x52, flags: 0x0}, + 293: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 294: {lang: 0x46c, script: 0x52, flags: 0x0}, + 295: {lang: 0x51, script: 0x2, flags: 0x1}, + 296: {lang: 0x478, script: 0x52, flags: 0x0}, + 298: {lang: 0x53, script: 0x4, flags: 0x1}, + 300: {lang: 0x496, script: 0x52, flags: 0x0}, + 301: {lang: 0x57, script: 0x2, flags: 0x1}, + 302: {lang: 0x43b, script: 0x52, flags: 0x0}, + 303: {lang: 0x59, script: 0x3, flags: 0x1}, + 304: {lang: 0x43b, script: 0x52, flags: 0x0}, + 308: {lang: 0x508, script: 0x37, flags: 0x2}, + 309: {lang: 0x139, script: 0x52, flags: 0x0}, + 310: {lang: 0x4b2, script: 0x52, flags: 0x0}, + 311: {lang: 0x1f1, script: 0x52, flags: 0x0}, + 314: {lang: 0x139, script: 0x52, flags: 0x0}, + 317: {lang: 0x4b9, script: 0x52, flags: 0x0}, + 318: {lang: 0x89, script: 0x52, flags: 0x0}, + 319: {lang: 0x159, script: 0x52, flags: 0x0}, + 321: {lang: 0x411, script: 0x52, flags: 0x0}, + 332: {lang: 0x5c, script: 0x2, flags: 0x1}, + 349: {lang: 0x39, script: 0x5, flags: 0x0}, + 350: {lang: 0x5e, script: 0x2, flags: 0x1}, + 355: {lang: 0x419, script: 0x52, flags: 0x0}, +} + +// likelyRegionList holds lists info associated with likelyRegion. +// Size: 384 bytes, 96 elements +var likelyRegionList = [96]likelyLangScript{ + 0: {lang: 0x143, script: 0x5, flags: 0x0}, + 1: {lang: 0x46c, script: 0x52, flags: 0x0}, + 2: {lang: 0x427, script: 0x52, flags: 0x0}, + 3: {lang: 0x2f6, script: 0x1e, flags: 0x0}, + 4: {lang: 0x1d0, script: 0x8, flags: 0x0}, + 5: {lang: 0x26b, script: 0x52, flags: 0x0}, + 6: {lang: 0xb5, script: 0x52, flags: 0x0}, + 7: {lang: 0x428, script: 0x1e, flags: 0x0}, + 8: {lang: 0x129, script: 0xd6, flags: 0x0}, + 9: {lang: 0x348, script: 0x20, flags: 0x0}, + 10: {lang: 0x51f, script: 0x34, flags: 0x0}, + 11: {lang: 0x4a2, script: 0x5, flags: 0x0}, + 12: {lang: 0x515, script: 0x35, flags: 0x0}, + 13: {lang: 0x519, script: 0x52, flags: 0x0}, + 14: {lang: 0x291, script: 0xd5, flags: 0x0}, + 15: {lang: 0x131, script: 0x2d, flags: 0x0}, + 16: {lang: 0x480, script: 0x52, flags: 0x0}, + 17: {lang: 0x39, script: 0x5, flags: 0x0}, + 18: {lang: 0x159, script: 0x52, flags: 0x0}, + 19: {lang: 0x26, script: 0x27, flags: 0x0}, + 20: {lang: 0x134, script: 0x52, flags: 0x0}, + 21: {lang: 0x261, script: 0x5, flags: 0x2}, + 22: {lang: 0x508, script: 0x37, flags: 0x2}, + 23: {lang: 0x208, script: 0x29, flags: 0x0}, + 24: {lang: 0x5, script: 0x1e, flags: 0x0}, + 25: {lang: 0x26b, script: 0x52, flags: 0x0}, + 26: {lang: 0x131, script: 0x2d, flags: 0x0}, + 27: {lang: 0x2f6, script: 0x1e, flags: 0x0}, + 28: {lang: 0x1da, script: 0x52, flags: 0x0}, + 29: {lang: 0x316, script: 0x5, flags: 0x0}, + 30: {lang: 0x1b7, script: 0x20, flags: 0x0}, + 31: {lang: 0x4aa, script: 0x5, flags: 0x0}, + 32: {lang: 0x22e, script: 0x6b, flags: 0x0}, + 33: {lang: 0x143, script: 0x5, flags: 0x0}, + 34: {lang: 0x46c, script: 0x52, flags: 0x0}, + 35: {lang: 0x242, script: 0x46, flags: 0x0}, + 36: {lang: 0xe4, script: 0x5, flags: 0x0}, + 37: {lang: 0x21e, script: 0xd5, flags: 0x0}, + 38: {lang: 0x39, script: 0x5, flags: 0x0}, + 39: {lang: 0x159, script: 0x52, flags: 0x0}, + 40: {lang: 0x2af, script: 0x4f, flags: 0x0}, + 41: {lang: 0x21e, script: 0xd5, flags: 0x0}, + 42: {lang: 0x39, script: 0x5, flags: 0x0}, + 43: {lang: 0x159, script: 0x52, flags: 0x0}, + 44: {lang: 0x3d3, script: 0x52, flags: 0x0}, + 45: {lang: 0x4a4, script: 0x1e, flags: 0x0}, + 46: {lang: 0x2f6, script: 0x1e, flags: 0x0}, + 47: {lang: 0x427, script: 0x52, flags: 0x0}, + 48: {lang: 0x328, script: 0x6b, flags: 0x0}, + 49: {lang: 0x20b, script: 0x52, flags: 0x0}, + 50: {lang: 0x302, script: 0x1e, flags: 0x0}, + 51: {lang: 0x23a, script: 0x5, flags: 0x0}, + 52: {lang: 0x51f, script: 0x35, flags: 0x0}, + 53: {lang: 0x3b7, script: 0x52, flags: 0x0}, + 54: {lang: 0x39, script: 0x5, flags: 0x0}, + 55: {lang: 0x159, script: 0x52, flags: 0x0}, + 56: {lang: 0x2e4, script: 0x52, flags: 0x0}, + 57: {lang: 0x4aa, script: 0x5, flags: 0x0}, + 58: {lang: 0x87, script: 0x20, flags: 0x0}, + 59: {lang: 0x4aa, script: 0x5, flags: 0x0}, + 60: {lang: 0x4aa, script: 0x5, flags: 0x0}, + 61: {lang: 0xbc, script: 0x20, flags: 0x0}, + 62: {lang: 0x3aa, script: 0x52, flags: 0x0}, + 63: {lang: 0x70, script: 0x1e, flags: 0x0}, + 64: {lang: 0x3d3, script: 0x52, flags: 0x0}, + 65: {lang: 0x7d, script: 0x1e, flags: 0x0}, + 66: {lang: 0x3d9, script: 0x1e, flags: 0x0}, + 67: {lang: 0x25e, script: 0x52, flags: 0x0}, + 68: {lang: 0x43a, script: 0x52, flags: 0x0}, + 69: {lang: 0x508, script: 0x37, flags: 0x0}, + 70: {lang: 0x408, script: 0x52, flags: 0x0}, + 71: {lang: 0x4a4, script: 0x1e, flags: 0x0}, + 72: {lang: 0x39, script: 0x5, flags: 0x0}, + 73: {lang: 0x159, script: 0x52, flags: 0x0}, + 74: {lang: 0x159, script: 0x52, flags: 0x0}, + 75: {lang: 0x34, script: 0x5, flags: 0x0}, + 76: {lang: 0x461, script: 0xd5, flags: 0x0}, + 77: {lang: 0x2e3, script: 0x5, flags: 0x0}, + 78: {lang: 0x306, script: 0x6b, flags: 0x0}, + 79: {lang: 0x45d, script: 0x1e, flags: 0x0}, + 80: {lang: 0x143, script: 0x5, flags: 0x0}, + 81: {lang: 0x39, script: 0x5, flags: 0x0}, + 82: {lang: 0x159, script: 0x52, flags: 0x0}, + 83: {lang: 0x480, script: 0x52, flags: 0x0}, + 84: {lang: 0x57, script: 0x5, flags: 0x0}, + 85: {lang: 0x211, script: 0x1e, flags: 0x0}, + 86: {lang: 0x80, script: 0x2d, flags: 0x0}, + 87: {lang: 0x51f, script: 0x35, flags: 0x0}, + 88: {lang: 0x482, script: 0x52, flags: 0x0}, + 89: {lang: 0x4a4, script: 0x1e, flags: 0x0}, + 90: {lang: 0x508, script: 0x37, flags: 0x0}, + 91: {lang: 0x3aa, script: 0x52, flags: 0x0}, + 92: {lang: 0x427, script: 0x52, flags: 0x0}, + 93: {lang: 0x428, script: 0x1e, flags: 0x0}, + 94: {lang: 0x159, script: 0x52, flags: 0x0}, + 95: {lang: 0x43c, script: 0x5, flags: 0x0}, +} + +type likelyTag struct { + lang uint16 + region uint16 + script uint8 +} + +// Size: 192 bytes, 32 elements +var likelyRegionGroup = [32]likelyTag{ + 1: {lang: 0x134, region: 0xd5, script: 0x52}, + 2: {lang: 0x134, region: 0x134, script: 0x52}, + 3: {lang: 0x3b7, region: 0x40, script: 0x52}, + 4: {lang: 0x134, region: 0x2e, script: 0x52}, + 5: {lang: 0x134, region: 0xd5, script: 0x52}, + 6: {lang: 0x139, region: 0xce, script: 0x52}, + 7: {lang: 0x43b, region: 0x12e, script: 0x52}, + 8: {lang: 0x39, region: 0x6a, script: 0x5}, + 9: {lang: 0x43b, region: 0x4a, script: 0x52}, + 10: {lang: 0x134, region: 0x160, script: 0x52}, + 11: {lang: 0x134, region: 0x134, script: 0x52}, + 12: {lang: 0x134, region: 0x134, script: 0x52}, + 13: {lang: 0x139, region: 0x58, script: 0x52}, + 14: {lang: 0x51f, region: 0x52, script: 0x34}, + 15: {lang: 0x1b7, region: 0x98, script: 0x20}, + 16: {lang: 0x1da, region: 0x94, script: 0x52}, + 17: {lang: 0x1f1, region: 0x9d, script: 0x52}, + 18: {lang: 0x134, region: 0x2e, script: 0x52}, + 19: {lang: 0x134, region: 0xe5, script: 0x52}, + 20: {lang: 0x134, region: 0x89, script: 0x52}, + 21: {lang: 0x411, region: 0x141, script: 0x52}, + 22: {lang: 0x51f, region: 0x52, script: 0x34}, + 23: {lang: 0x4b2, region: 0x136, script: 0x52}, + 24: {lang: 0x39, region: 0x107, script: 0x5}, + 25: {lang: 0x3d9, region: 0x105, script: 0x1e}, + 26: {lang: 0x3d9, region: 0x105, script: 0x1e}, + 27: {lang: 0x134, region: 0x7a, script: 0x52}, + 28: {lang: 0x109, region: 0x5f, script: 0x52}, + 29: {lang: 0x139, region: 0x1e, script: 0x52}, + 30: {lang: 0x134, region: 0x99, script: 0x52}, + 31: {lang: 0x134, region: 0x7a, script: 0x52}, +} + +type mutualIntelligibility struct { + want uint16 + have uint16 + conf uint8 + oneway bool +} + +type scriptIntelligibility struct { + lang uint16 + want uint8 + have uint8 + conf uint8 +} + +// matchLang holds pairs of langIDs of base languages that are typically +// mutually intelligible. Each pair is associated with a confidence and +// whether the intelligibility goes one or both ways. +// Size: 708 bytes, 118 elements +var matchLang = [118]mutualIntelligibility{ + 0: {want: 0x366, have: 0x33e, conf: 0x2, oneway: false}, + 1: {want: 0x26b, have: 0xe7, conf: 0x2, oneway: false}, + 2: {want: 0x1ca, have: 0xb5, conf: 0x2, oneway: false}, + 3: {want: 0x3fd, have: 0xb5, conf: 0x2, oneway: false}, + 4: {want: 0x428, have: 0xb5, conf: 0x2, oneway: false}, + 5: {want: 0x3fd, have: 0x1ca, conf: 0x2, oneway: false}, + 6: {want: 0x428, have: 0x1ca, conf: 0x2, oneway: false}, + 7: {want: 0x3fd, have: 0x428, conf: 0x2, oneway: false}, + 8: {want: 0x430, have: 0x1, conf: 0x2, oneway: false}, + 9: {want: 0x19c, have: 0x109, conf: 0x2, oneway: true}, + 10: {want: 0x28c, have: 0x109, conf: 0x2, oneway: true}, + 11: {want: 0xfd, have: 0x366, conf: 0x2, oneway: false}, + 12: {want: 0xfd, have: 0x33e, conf: 0x2, oneway: false}, + 13: {want: 0xe7, have: 0x26b, conf: 0x2, oneway: false}, + 14: {want: 0x5, have: 0x3d9, conf: 0x2, oneway: true}, + 15: {want: 0xc, have: 0x134, conf: 0x2, oneway: true}, + 16: {want: 0x15, have: 0x35e, conf: 0x2, oneway: true}, + 17: {want: 0x20, have: 0x134, conf: 0x2, oneway: true}, + 18: {want: 0x55, have: 0x139, conf: 0x2, oneway: true}, + 19: {want: 0x57, have: 0x3d9, conf: 0x2, oneway: true}, + 20: {want: 0x70, have: 0x3d9, conf: 0x2, oneway: true}, + 21: {want: 0x74, have: 0x134, conf: 0x2, oneway: true}, + 22: {want: 0x81, have: 0x1b7, conf: 0x2, oneway: true}, + 23: {want: 0xa3, have: 0x134, conf: 0x2, oneway: true}, + 24: {want: 0xb0, have: 0x159, conf: 0x2, oneway: true}, + 25: {want: 0xdb, have: 0x14e, conf: 0x2, oneway: true}, + 26: {want: 0xe3, have: 0x134, conf: 0x2, oneway: true}, + 27: {want: 0xe7, have: 0x39, conf: 0x2, oneway: true}, + 28: {want: 0xed, have: 0x159, conf: 0x2, oneway: true}, + 29: {want: 0xf5, have: 0x159, conf: 0x2, oneway: true}, + 30: {want: 0xfc, have: 0x134, conf: 0x2, oneway: true}, + 31: {want: 0x12c, have: 0x134, conf: 0x2, oneway: true}, + 32: {want: 0x137, have: 0x134, conf: 0x2, oneway: true}, + 33: {want: 0x13b, have: 0x14c, conf: 0x2, oneway: true}, + 34: {want: 0x140, have: 0x139, conf: 0x2, oneway: true}, + 35: {want: 0x153, have: 0xfd, conf: 0x2, oneway: true}, + 36: {want: 0x168, have: 0x35e, conf: 0x2, oneway: true}, + 37: {want: 0x169, have: 0x134, conf: 0x2, oneway: true}, + 38: {want: 0x16a, have: 0x134, conf: 0x2, oneway: true}, + 39: {want: 0x178, have: 0x134, conf: 0x2, oneway: true}, + 40: {want: 0x18a, have: 0x139, conf: 0x2, oneway: true}, + 41: {want: 0x18e, have: 0x139, conf: 0x2, oneway: true}, + 42: {want: 0x19d, have: 0x1b7, conf: 0x2, oneway: true}, + 43: {want: 0x1ad, have: 0x134, conf: 0x2, oneway: true}, + 44: {want: 0x1b1, have: 0x134, conf: 0x2, oneway: true}, + 45: {want: 0x1cd, have: 0x159, conf: 0x2, oneway: true}, + 46: {want: 0x1d0, have: 0x3d9, conf: 0x2, oneway: true}, + 47: {want: 0x1d2, have: 0x134, conf: 0x2, oneway: true}, + 48: {want: 0x1df, have: 0x134, conf: 0x2, oneway: true}, + 49: {want: 0x1f0, have: 0x134, conf: 0x2, oneway: true}, + 50: {want: 0x206, have: 0x1da, conf: 0x2, oneway: true}, + 51: {want: 0x208, have: 0x134, conf: 0x2, oneway: true}, + 52: {want: 0x225, have: 0x159, conf: 0x2, oneway: true}, + 53: {want: 0x23a, have: 0x3d9, conf: 0x2, oneway: true}, + 54: {want: 0x242, have: 0x134, conf: 0x2, oneway: true}, + 55: {want: 0x249, have: 0x134, conf: 0x2, oneway: true}, + 56: {want: 0x25c, have: 0x134, conf: 0x2, oneway: true}, + 57: {want: 0x26b, have: 0x480, conf: 0x2, oneway: true}, + 58: {want: 0x281, have: 0x3d9, conf: 0x2, oneway: true}, + 59: {want: 0x285, have: 0x1f1, conf: 0x2, oneway: true}, + 60: {want: 0x29a, have: 0x134, conf: 0x2, oneway: true}, + 61: {want: 0x2ac, have: 0x159, conf: 0x2, oneway: true}, + 62: {want: 0x2af, have: 0x134, conf: 0x2, oneway: true}, + 63: {want: 0x2b5, have: 0x134, conf: 0x2, oneway: true}, + 64: {want: 0x2ba, have: 0x159, conf: 0x2, oneway: true}, + 65: {want: 0x2e4, have: 0x134, conf: 0x2, oneway: true}, + 66: {want: 0x2e8, have: 0x159, conf: 0x2, oneway: true}, + 67: {want: 0x2f1, have: 0x134, conf: 0x2, oneway: true}, + 68: {want: 0x2f6, have: 0x7d, conf: 0x2, oneway: true}, + 69: {want: 0x2fb, have: 0x134, conf: 0x2, oneway: true}, + 70: {want: 0x302, have: 0x3d9, conf: 0x2, oneway: true}, + 71: {want: 0x312, have: 0x1b7, conf: 0x2, oneway: true}, + 72: {want: 0x316, have: 0x1da, conf: 0x2, oneway: true}, + 73: {want: 0x317, have: 0x134, conf: 0x2, oneway: true}, + 74: {want: 0x328, have: 0x134, conf: 0x2, oneway: true}, + 75: {want: 0x348, have: 0x134, conf: 0x2, oneway: true}, + 76: {want: 0x361, have: 0x33e, conf: 0x2, oneway: false}, + 77: {want: 0x361, have: 0x366, conf: 0x2, oneway: true}, + 78: {want: 0x371, have: 0x134, conf: 0x2, oneway: true}, + 79: {want: 0x37e, have: 0x134, conf: 0x2, oneway: true}, + 80: {want: 0x380, have: 0x134, conf: 0x2, oneway: true}, + 81: {want: 0x382, have: 0x159, conf: 0x2, oneway: true}, + 82: {want: 0x387, have: 0x134, conf: 0x2, oneway: true}, + 83: {want: 0x38c, have: 0x134, conf: 0x2, oneway: true}, + 84: {want: 0x394, have: 0x134, conf: 0x2, oneway: true}, + 85: {want: 0x39c, have: 0x134, conf: 0x2, oneway: true}, + 86: {want: 0x3b5, have: 0x134, conf: 0x2, oneway: true}, + 87: {want: 0x3bb, have: 0x139, conf: 0x2, oneway: true}, + 88: {want: 0x3cb, have: 0x109, conf: 0x2, oneway: true}, + 89: {want: 0x3d0, have: 0x134, conf: 0x2, oneway: true}, + 90: {want: 0x3dc, have: 0x159, conf: 0x2, oneway: true}, + 91: {want: 0x3e0, have: 0x1b7, conf: 0x2, oneway: true}, + 92: {want: 0x3f0, have: 0x134, conf: 0x2, oneway: true}, + 93: {want: 0x402, have: 0x134, conf: 0x2, oneway: true}, + 94: {want: 0x419, have: 0x134, conf: 0x2, oneway: true}, + 95: {want: 0x41f, have: 0x134, conf: 0x2, oneway: true}, + 96: {want: 0x427, have: 0x134, conf: 0x2, oneway: true}, + 97: {want: 0x431, have: 0x134, conf: 0x2, oneway: true}, + 98: {want: 0x434, have: 0x1da, conf: 0x2, oneway: true}, + 99: {want: 0x43b, have: 0x134, conf: 0x2, oneway: true}, + 100: {want: 0x446, have: 0x134, conf: 0x2, oneway: true}, + 101: {want: 0x457, have: 0x134, conf: 0x2, oneway: true}, + 102: {want: 0x45d, have: 0x3d9, conf: 0x2, oneway: true}, + 103: {want: 0x465, have: 0x134, conf: 0x2, oneway: true}, + 104: {want: 0x46c, have: 0x3d9, conf: 0x2, oneway: true}, + 105: {want: 0x3878, have: 0x134, conf: 0x2, oneway: true}, + 106: {want: 0x476, have: 0x134, conf: 0x2, oneway: true}, + 107: {want: 0x478, have: 0x134, conf: 0x2, oneway: true}, + 108: {want: 0x48a, have: 0x3d9, conf: 0x2, oneway: true}, + 109: {want: 0x493, have: 0x134, conf: 0x2, oneway: true}, + 110: {want: 0x4a2, have: 0x51f, conf: 0x2, oneway: true}, + 111: {want: 0x4aa, have: 0x134, conf: 0x2, oneway: true}, + 112: {want: 0x4b2, have: 0x3d9, conf: 0x2, oneway: true}, + 113: {want: 0x4db, have: 0x159, conf: 0x2, oneway: true}, + 114: {want: 0x4e8, have: 0x134, conf: 0x2, oneway: true}, + 115: {want: 0x508, have: 0x134, conf: 0x2, oneway: true}, + 116: {want: 0x50e, have: 0x134, conf: 0x2, oneway: true}, + 117: {want: 0x524, have: 0x134, conf: 0x2, oneway: true}, +} + +// matchScript holds pairs of scriptIDs where readers of one script +// can typically also read the other. Each is associated with a confidence. +// Size: 24 bytes, 4 elements +var matchScript = [4]scriptIntelligibility{ + 0: {lang: 0x428, want: 0x52, have: 0x1e, conf: 0x2}, + 1: {lang: 0x428, want: 0x1e, have: 0x52, conf: 0x2}, + 2: {lang: 0x0, want: 0x34, have: 0x35, conf: 0x1}, + 3: {lang: 0x0, want: 0x35, have: 0x34, conf: 0x1}, +} + +// Size: 128 bytes, 32 elements +var regionContainment = [32]uint32{ + 0xffffffff, 0x000007a2, 0x00003044, 0x00000008, + 0x403c0010, 0x00000020, 0x00000040, 0x00000080, + 0x00000100, 0x00000200, 0x00000400, 0x2000384c, + 0x00001000, 0x00002000, 0x00004000, 0x00008000, + 0x00010000, 0x00020000, 0x00040000, 0x00080000, + 0x00100000, 0x00200000, 0x01c1c000, 0x00800000, + 0x01000000, 0x1e020000, 0x04000000, 0x08000000, + 0x10000000, 0x20002048, 0x40000000, 0x80000000, +} + +// regionInclusion maps region identifiers to sets of regions in regionInclusionBits, +// where each set holds all groupings that are directly connected in a region +// containment graph. +// Size: 357 bytes, 357 elements +var regionInclusion = [357]uint8{ + // Entry 0 - 3F + 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x25, 0x22, 0x23, + 0x25, 0x26, 0x21, 0x27, 0x28, 0x29, 0x2a, 0x25, + 0x2b, 0x23, 0x22, 0x25, 0x24, 0x29, 0x2c, 0x2d, + 0x23, 0x2e, 0x2c, 0x25, 0x2f, 0x30, 0x27, 0x25, + // Entry 40 - 7F + 0x27, 0x25, 0x24, 0x30, 0x21, 0x31, 0x32, 0x33, + 0x2f, 0x21, 0x26, 0x26, 0x26, 0x34, 0x2c, 0x28, + 0x27, 0x26, 0x35, 0x27, 0x21, 0x33, 0x22, 0x20, + 0x25, 0x2c, 0x25, 0x21, 0x36, 0x2d, 0x34, 0x29, + 0x21, 0x2e, 0x37, 0x25, 0x25, 0x20, 0x38, 0x38, + 0x27, 0x37, 0x38, 0x38, 0x2e, 0x39, 0x2e, 0x1f, + 0x20, 0x37, 0x3a, 0x27, 0x3b, 0x2b, 0x20, 0x29, + 0x34, 0x26, 0x37, 0x25, 0x23, 0x27, 0x2b, 0x2c, + // Entry 80 - BF + 0x22, 0x2f, 0x2c, 0x2c, 0x25, 0x26, 0x39, 0x21, + 0x33, 0x3b, 0x2c, 0x27, 0x35, 0x21, 0x33, 0x39, + 0x25, 0x2d, 0x20, 0x38, 0x30, 0x37, 0x23, 0x2b, + 0x24, 0x21, 0x23, 0x24, 0x2b, 0x39, 0x2b, 0x25, + 0x23, 0x35, 0x20, 0x2e, 0x3c, 0x30, 0x3b, 0x2e, + 0x25, 0x35, 0x35, 0x23, 0x25, 0x3c, 0x30, 0x23, + 0x25, 0x34, 0x24, 0x2c, 0x31, 0x37, 0x29, 0x37, + 0x38, 0x38, 0x34, 0x32, 0x22, 0x25, 0x2e, 0x3b, + // Entry C0 - FF + 0x20, 0x22, 0x2c, 0x30, 0x35, 0x35, 0x3b, 0x25, + 0x2c, 0x25, 0x39, 0x2e, 0x24, 0x2e, 0x33, 0x30, + 0x2e, 0x31, 0x3a, 0x2c, 0x2a, 0x2c, 0x20, 0x33, + 0x29, 0x2b, 0x24, 0x20, 0x3b, 0x23, 0x28, 0x2a, + 0x23, 0x33, 0x20, 0x27, 0x28, 0x3a, 0x30, 0x24, + 0x2d, 0x2f, 0x28, 0x25, 0x23, 0x39, 0x20, 0x3b, + 0x27, 0x20, 0x23, 0x20, 0x20, 0x1e, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + // Entry 100 - 13F + 0x20, 0x2e, 0x20, 0x2d, 0x22, 0x32, 0x2e, 0x23, + 0x3a, 0x2e, 0x38, 0x37, 0x30, 0x2c, 0x39, 0x2b, + 0x2d, 0x2c, 0x22, 0x2c, 0x2e, 0x27, 0x2e, 0x26, + 0x32, 0x33, 0x25, 0x23, 0x31, 0x21, 0x25, 0x26, + 0x21, 0x2c, 0x30, 0x3c, 0x28, 0x30, 0x3c, 0x38, + 0x28, 0x30, 0x23, 0x25, 0x28, 0x35, 0x2e, 0x32, + 0x2e, 0x20, 0x21, 0x20, 0x2f, 0x27, 0x3c, 0x22, + 0x25, 0x20, 0x27, 0x25, 0x25, 0x30, 0x3a, 0x28, + // Entry 140 - 17F + 0x20, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x23, 0x23, 0x2e, 0x22, + 0x31, 0x2e, 0x26, 0x2e, 0x20, +} + +// regionInclusionBits is an array of bit vectors where every vector represents +// a set of region groupings. These sets are used to compute the distance +// between two regions for the purpose of language matching. +// Size: 288 bytes, 72 elements +var regionInclusionBits = [72]uint32{ + // Entry 0 - 1F + 0x82400813, 0x000007a3, 0x00003844, 0x20000808, + 0x403c0011, 0x00000022, 0x20000844, 0x00000082, + 0x00000102, 0x00000202, 0x00000402, 0x2000384d, + 0x00001804, 0x20002804, 0x00404000, 0x00408000, + 0x00410000, 0x02020000, 0x00040010, 0x00080010, + 0x00100010, 0x00200010, 0x01c1c001, 0x00c00000, + 0x01400000, 0x1e020001, 0x06000000, 0x0a000000, + 0x12000000, 0x20002848, 0x40000010, 0x80000001, + // Entry 20 - 3F + 0x00000001, 0x40000000, 0x00020000, 0x01000000, + 0x00008000, 0x00002000, 0x00000200, 0x00000008, + 0x00200000, 0x90000000, 0x00040000, 0x08000000, + 0x00000020, 0x84000000, 0x00000080, 0x00001000, + 0x00010000, 0x00000400, 0x04000000, 0x00000040, + 0x10000000, 0x00004000, 0x81000000, 0x88000000, + 0x00000100, 0x80020000, 0x00080000, 0x00100000, + 0x00800000, 0xffffffff, 0x82400fb3, 0xc27c0813, + // Entry 40 - 5F + 0xa240385f, 0x83c1c813, 0x9e420813, 0x92000001, + 0x86000001, 0x81400001, 0x8a000001, 0x82020001, +} + +// regionInclusionNext marks, for each entry in regionInclusionBits, the set of +// all groups that are reachable from the groups set in the respective entry. +// Size: 72 bytes, 72 elements +var regionInclusionNext = [72]uint8{ + // Entry 0 - 3F + 0x3d, 0x3e, 0x0b, 0x0b, 0x3f, 0x01, 0x0b, 0x01, + 0x01, 0x01, 0x01, 0x40, 0x0b, 0x0b, 0x16, 0x16, + 0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x41, 0x16, + 0x16, 0x42, 0x19, 0x19, 0x19, 0x0b, 0x04, 0x00, + 0x00, 0x1e, 0x11, 0x18, 0x0f, 0x0d, 0x09, 0x03, + 0x15, 0x43, 0x12, 0x1b, 0x05, 0x44, 0x07, 0x0c, + 0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x45, 0x46, + 0x08, 0x47, 0x13, 0x14, 0x17, 0x3d, 0x3d, 0x3d, + // Entry 40 - 7F + 0x3d, 0x3d, 0x3d, 0x42, 0x42, 0x41, 0x42, 0x42, +} + +type parentRel struct { + lang uint16 + script uint8 + maxScript uint8 + toRegion uint16 + fromRegion []uint16 +} + +// Size: 412 bytes, 5 elements +var parents = [5]parentRel{ + 0: {lang: 0x134, script: 0x0, maxScript: 0x52, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x24, 0x25, 0x2e, 0x33, 0x35, 0x3c, 0x41, 0x45, 0x47, 0x48, 0x49, 0x4f, 0x51, 0x5b, 0x5c, 0x60, 0x63, 0x6c, 0x72, 0x73, 0x74, 0x7a, 0x7b, 0x7e, 0x7f, 0x80, 0x82, 0x8b, 0x8c, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9e, 0x9f, 0xa3, 0xa6, 0xa8, 0xac, 0xb0, 0xb3, 0xb4, 0xbe, 0xc5, 0xc9, 0xca, 0xcb, 0xcd, 0xcf, 0xd1, 0xd4, 0xd5, 0xdc, 0xde, 0xdf, 0xe5, 0xe6, 0xe7, 0xea, 0xef, 0x106, 0x108, 0x109, 0x10a, 0x10c, 0x10d, 0x111, 0x116, 0x11a, 0x11c, 0x11e, 0x124, 0x128, 0x12b, 0x12c, 0x12e, 0x130, 0x138, 0x13b, 0x13e, 0x141, 0x160, 0x161, 0x163}}, + 1: {lang: 0x134, script: 0x0, maxScript: 0x52, toRegion: 0x1a, fromRegion: []uint16{0x2d, 0x4d, 0x5f, 0x62, 0x71, 0xd8, 0x10b, 0x10e}}, + 2: {lang: 0x139, script: 0x0, maxScript: 0x52, toRegion: 0x1e, fromRegion: []uint16{0x2b, 0x3e, 0x40, 0x50, 0x53, 0x55, 0x58, 0x64, 0x68, 0x88, 0x8e, 0xce, 0xd7, 0xe1, 0xe3, 0xeb, 0xf0, 0x119, 0x134, 0x135, 0x13a}}, + 3: {lang: 0x3b7, script: 0x0, maxScript: 0x52, toRegion: 0xed, fromRegion: []uint16{0x29, 0x4d, 0x59, 0x85, 0x8a, 0xb6, 0xc5, 0xd0, 0x117, 0x125}}, + 4: {lang: 0x51f, script: 0x35, maxScript: 0x35, toRegion: 0x8c, fromRegion: []uint16{0xc5}}, +} + +// Total table size 25825 bytes (25KiB); checksum: 4E97CC5E diff --git a/vendor/golang.org/x/text/language/tags.go b/vendor/golang.org/x/text/language/tags.go new file mode 100644 index 0000000..de30155 --- /dev/null +++ b/vendor/golang.org/x/text/language/tags.go @@ -0,0 +1,143 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package language + +// TODO: Various sets of commonly use tags and regions. + +// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed. +// It simplifies safe initialization of Tag values. +func MustParse(s string) Tag { + t, err := Parse(s) + if err != nil { + panic(err) + } + return t +} + +// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed. +// It simplifies safe initialization of Tag values. +func (c CanonType) MustParse(s string) Tag { + t, err := c.Parse(s) + if err != nil { + panic(err) + } + return t +} + +// MustParseBase is like ParseBase, but panics if the given base cannot be parsed. +// It simplifies safe initialization of Base values. +func MustParseBase(s string) Base { + b, err := ParseBase(s) + if err != nil { + panic(err) + } + return b +} + +// MustParseScript is like ParseScript, but panics if the given script cannot be +// parsed. It simplifies safe initialization of Script values. +func MustParseScript(s string) Script { + scr, err := ParseScript(s) + if err != nil { + panic(err) + } + return scr +} + +// MustParseRegion is like ParseRegion, but panics if the given region cannot be +// parsed. It simplifies safe initialization of Region values. +func MustParseRegion(s string) Region { + r, err := ParseRegion(s) + if err != nil { + panic(err) + } + return r +} + +var ( + und = Tag{} + + Und Tag = Tag{} + + Afrikaans Tag = Tag{lang: _af} // af + Amharic Tag = Tag{lang: _am} // am + Arabic Tag = Tag{lang: _ar} // ar + ModernStandardArabic Tag = Tag{lang: _ar, region: _001} // ar-001 + Azerbaijani Tag = Tag{lang: _az} // az + Bulgarian Tag = Tag{lang: _bg} // bg + Bengali Tag = Tag{lang: _bn} // bn + Catalan Tag = Tag{lang: _ca} // ca + Czech Tag = Tag{lang: _cs} // cs + Danish Tag = Tag{lang: _da} // da + German Tag = Tag{lang: _de} // de + Greek Tag = Tag{lang: _el} // el + English Tag = Tag{lang: _en} // en + AmericanEnglish Tag = Tag{lang: _en, region: _US} // en-US + BritishEnglish Tag = Tag{lang: _en, region: _GB} // en-GB + Spanish Tag = Tag{lang: _es} // es + EuropeanSpanish Tag = Tag{lang: _es, region: _ES} // es-ES + LatinAmericanSpanish Tag = Tag{lang: _es, region: _419} // es-419 + Estonian Tag = Tag{lang: _et} // et + Persian Tag = Tag{lang: _fa} // fa + Finnish Tag = Tag{lang: _fi} // fi + Filipino Tag = Tag{lang: _fil} // fil + French Tag = Tag{lang: _fr} // fr + CanadianFrench Tag = Tag{lang: _fr, region: _CA} // fr-CA + Gujarati Tag = Tag{lang: _gu} // gu + Hebrew Tag = Tag{lang: _he} // he + Hindi Tag = Tag{lang: _hi} // hi + Croatian Tag = Tag{lang: _hr} // hr + Hungarian Tag = Tag{lang: _hu} // hu + Armenian Tag = Tag{lang: _hy} // hy + Indonesian Tag = Tag{lang: _id} // id + Icelandic Tag = Tag{lang: _is} // is + Italian Tag = Tag{lang: _it} // it + Japanese Tag = Tag{lang: _ja} // ja + Georgian Tag = Tag{lang: _ka} // ka + Kazakh Tag = Tag{lang: _kk} // kk + Khmer Tag = Tag{lang: _km} // km + Kannada Tag = Tag{lang: _kn} // kn + Korean Tag = Tag{lang: _ko} // ko + Kirghiz Tag = Tag{lang: _ky} // ky + Lao Tag = Tag{lang: _lo} // lo + Lithuanian Tag = Tag{lang: _lt} // lt + Latvian Tag = Tag{lang: _lv} // lv + Macedonian Tag = Tag{lang: _mk} // mk + Malayalam Tag = Tag{lang: _ml} // ml + Mongolian Tag = Tag{lang: _mn} // mn + Marathi Tag = Tag{lang: _mr} // mr + Malay Tag = Tag{lang: _ms} // ms + Burmese Tag = Tag{lang: _my} // my + Nepali Tag = Tag{lang: _ne} // ne + Dutch Tag = Tag{lang: _nl} // nl + Norwegian Tag = Tag{lang: _no} // no + Punjabi Tag = Tag{lang: _pa} // pa + Polish Tag = Tag{lang: _pl} // pl + Portuguese Tag = Tag{lang: _pt} // pt + BrazilianPortuguese Tag = Tag{lang: _pt, region: _BR} // pt-BR + EuropeanPortuguese Tag = Tag{lang: _pt, region: _PT} // pt-PT + Romanian Tag = Tag{lang: _ro} // ro + Russian Tag = Tag{lang: _ru} // ru + Sinhala Tag = Tag{lang: _si} // si + Slovak Tag = Tag{lang: _sk} // sk + Slovenian Tag = Tag{lang: _sl} // sl + Albanian Tag = Tag{lang: _sq} // sq + Serbian Tag = Tag{lang: _sr} // sr + SerbianLatin Tag = Tag{lang: _sr, script: _Latn} // sr-Latn + Swedish Tag = Tag{lang: _sv} // sv + Swahili Tag = Tag{lang: _sw} // sw + Tamil Tag = Tag{lang: _ta} // ta + Telugu Tag = Tag{lang: _te} // te + Thai Tag = Tag{lang: _th} // th + Turkish Tag = Tag{lang: _tr} // tr + Ukrainian Tag = Tag{lang: _uk} // uk + Urdu Tag = Tag{lang: _ur} // ur + Uzbek Tag = Tag{lang: _uz} // uz + Vietnamese Tag = Tag{lang: _vi} // vi + Chinese Tag = Tag{lang: _zh} // zh + SimplifiedChinese Tag = Tag{lang: _zh, script: _Hans} // zh-Hans + TraditionalChinese Tag = Tag{lang: _zh, script: _Hant} // zh-Hant + Zulu Tag = Tag{lang: _zu} // zu +) diff --git a/vendor/golang.org/x/text/message/catalog.go b/vendor/golang.org/x/text/message/catalog.go new file mode 100644 index 0000000..41c31f4 --- /dev/null +++ b/vendor/golang.org/x/text/message/catalog.go @@ -0,0 +1,113 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package message + +// TODO: some types in this file will need to be made public at some time. +// Documentation and method names will reflect this by using the exported name. + +import ( + "sync" + + "golang.org/x/text/internal" + "golang.org/x/text/internal/format" + "golang.org/x/text/language" +) + +// DefaultCatalog is used by SetString. +var DefaultCatalog *Catalog = newCatalog() + +// SetString calls SetString on the default Catalog. +func SetString(tag language.Tag, key string, msg string) error { + return DefaultCatalog.SetString(tag, key, msg) +} + +// TODO: +// // SetSelect is a shorthand for DefaultCatalog.SetSelect. +// func SetSelect(tag language.Tag, key string, s ...format.Statement) error { +// return DefaultCatalog.SetSelect(tag, key, s...) +// } + +type msgMap map[string]format.Statement + +// A Catalog holds translations for messages for supported languages. +type Catalog struct { + index map[language.Tag]msgMap + + mutex sync.Mutex // For locking all operations. +} + +// Printer creates a Printer that uses c. +func (c *Catalog) Printer(tag language.Tag) *Printer { + // TODO: pre-create indexes for tag lookup. + return &Printer{ + tag: tag, + cat: c, + } +} + +// NewCatalog returns a new Catalog. If a message is not present in a Catalog, +// the fallback Catalogs will be used in order as an alternative source. +func newCatalog(fallback ...*Catalog) *Catalog { + // TODO: implement fallback. + return &Catalog{ + index: map[language.Tag]msgMap{}, + } +} + +// Languages returns a slice of all languages for which the Catalog contains +// variants. +func (c *Catalog) Languages() []language.Tag { + c.mutex.Lock() + defer c.mutex.Unlock() + + tags := []language.Tag{} + for t, _ := range c.index { + tags = append(tags, t) + } + internal.SortTags(tags) + return tags +} + +// SetString sets the translation for the given language and key. +func (c *Catalog) SetString(tag language.Tag, key string, msg string) error { + return c.set(tag, key, format.String(msg)) +} + +func (c *Catalog) get(tag language.Tag, key string) (msg string, ok bool) { + c.mutex.Lock() + defer c.mutex.Unlock() + + for ; ; tag = tag.Parent() { + if msgs, ok := c.index[tag]; ok { + if statement, ok := msgs[key]; ok { + // TODO: use type switches when we implement selecting. + msg := string(statement.(format.String)) + return msg, true + } + } + if tag == language.Und { + break + } + } + return "", false +} + +func (c *Catalog) set(tag language.Tag, key string, s ...format.Statement) error { + if len(s) != 1 { + // TODO: handle errors properly when we process statement sequences. + panic("statement sequence should be of length 1") + } + + c.mutex.Lock() + defer c.mutex.Unlock() + + m := c.index[tag] + if m == nil { + m = map[string]format.Statement{} + c.index[tag] = m + } + m[key] = s[0] + return nil +} diff --git a/vendor/golang.org/x/text/message/catalog_test.go b/vendor/golang.org/x/text/message/catalog_test.go new file mode 100644 index 0000000..3b693c9 --- /dev/null +++ b/vendor/golang.org/x/text/message/catalog_test.go @@ -0,0 +1,98 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package message + +import ( + "reflect" + "testing" + + "golang.org/x/text/internal" + "golang.org/x/text/language" +) + +type entry struct{ tag, key, msg string } + +var testCases = []struct { + desc string + cat []entry + lookup []entry +}{{ + desc: "empty catalog", + lookup: []entry{ + {"en", "key", ""}, + {"en", "", ""}, + {"nl", "", ""}, + }, +}, { + desc: "one entry", + cat: []entry{ + {"en", "hello", "Hello!"}, + }, + lookup: []entry{ + {"und", "hello", ""}, + {"nl", "hello", ""}, + {"en", "hello", "Hello!"}, + {"en-US", "hello", "Hello!"}, + {"en-GB", "hello", "Hello!"}, + {"en-oxendict", "hello", "Hello!"}, + {"en-oxendict-u-ms-metric", "hello", "Hello!"}, + }, +}, { + desc: "hierarchical languages", + cat: []entry{ + {"en", "hello", "Hello!"}, + {"en-GB", "hello", "Hellø!"}, + {"en-US", "hello", "Howdy!"}, + {"en", "greetings", "Greetings!"}, + }, + lookup: []entry{ + {"und", "hello", ""}, + {"nl", "hello", ""}, + {"en", "hello", "Hello!"}, + {"en-US", "hello", "Howdy!"}, + {"en-GB", "hello", "Hellø!"}, + {"en-oxendict", "hello", "Hello!"}, + {"en-US-oxendict-u-ms-metric", "hello", "Howdy!"}, + + {"und", "greetings", ""}, + {"nl", "greetings", ""}, + {"en", "greetings", "Greetings!"}, + {"en-US", "greetings", "Greetings!"}, + {"en-GB", "greetings", "Greetings!"}, + {"en-oxendict", "greetings", "Greetings!"}, + {"en-US-oxendict-u-ms-metric", "greetings", "Greetings!"}, + }, +}} + +func initCat(entries []entry) (*Catalog, []language.Tag) { + tags := []language.Tag{} + cat := newCatalog() + for _, e := range entries { + tag := language.MustParse(e.tag) + tags = append(tags, tag) + cat.SetString(tag, e.key, e.msg) + } + return cat, internal.UniqueTags(tags) +} + +func TestCatalog(t *testing.T) { + for _, tc := range testCases { + cat, wantTags := initCat(tc.cat) + + // languages + if got := cat.Languages(); !reflect.DeepEqual(got, wantTags) { + t.Errorf("%s:Languages: got %v; want %v", tc.desc, got, wantTags) + } + + // Lookup + for _, e := range tc.lookup { + tag := language.MustParse(e.tag) + msg, ok := cat.get(tag, e.key) + if okWant := e.msg != ""; ok != okWant || msg != e.msg { + t.Errorf("%s:Lookup(%s, %s) = %s, %v; want %s, %v", tc.desc, tag, e.key, msg, ok, e.msg, okWant) + } + } + } +} diff --git a/vendor/golang.org/x/text/message/message.go b/vendor/golang.org/x/text/message/message.go new file mode 100644 index 0000000..32ff3ef --- /dev/null +++ b/vendor/golang.org/x/text/message/message.go @@ -0,0 +1,185 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package message implements formatted I/O for localized strings with functions +// analogous to the fmt's print functions. +// +// NOTE: Under construction. See https://golang.org/design/12750-localization +// and its corresponding proposal issue https://golang.org/issues/12750. +package message // import "golang.org/x/text/message" + +import ( + "fmt" + "io" + "strings" + + "golang.org/x/text/internal/format" + "golang.org/x/text/language" +) + +// A Printer implements language-specific formatted I/O analogous to the fmt +// package. Only one goroutine may use a Printer at the same time. +type Printer struct { + tag language.Tag + + cat *Catalog + + // NOTE: limiting one goroutine per Printer allows for many optimizations + // and simplifications. We can consider removing this restriction down the + // road if it the benefits do not seem to outweigh the disadvantages. +} + +// NewPrinter returns a Printer that formats messages tailored to language t. +func NewPrinter(t language.Tag) *Printer { + return DefaultCatalog.Printer(t) +} + +// Sprint is like fmt.Sprint, but using language-specific formatting. +func (p *Printer) Sprint(a ...interface{}) string { + return fmt.Sprint(p.bindArgs(a)...) +} + +// Fprint is like fmt.Fprint, but using language-specific formatting. +func (p *Printer) Fprint(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprint(w, p.bindArgs(a)...) +} + +// Print is like fmt.Print, but using language-specific formatting. +func (p *Printer) Print(a ...interface{}) (n int, err error) { + return fmt.Print(p.bindArgs(a)...) +} + +// Sprintln is like fmt.Sprintln, but using language-specific formatting. +func (p *Printer) Sprintln(a ...interface{}) string { + return fmt.Sprintln(p.bindArgs(a)...) +} + +// Fprintln is like fmt.Fprintln, but using language-specific formatting. +func (p *Printer) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprintln(w, p.bindArgs(a)...) +} + +// Println is like fmt.Println, but using language-specific formatting. +func (p *Printer) Println(a ...interface{}) (n int, err error) { + return fmt.Println(p.bindArgs(a)...) +} + +// Sprintf is like fmt.Sprintf, but using language-specific formatting. +func (p *Printer) Sprintf(key Reference, a ...interface{}) string { + msg, hasSub := p.lookup(key) + if !hasSub { + return fmt.Sprintf(msg) // work around limitation of fmt + } + return fmt.Sprintf(msg, p.bindArgs(a)...) +} + +// Fprintf is like fmt.Fprintf, but using language-specific formatting. +func (p *Printer) Fprintf(w io.Writer, key Reference, a ...interface{}) (n int, err error) { + msg, hasSub := p.lookup(key) + if !hasSub { + return fmt.Fprintf(w, msg) // work around limitation of fmt + } + return fmt.Fprintf(w, msg, p.bindArgs(a)...) +} + +// Printf is like fmt.Printf, but using language-specific formatting. +func (p *Printer) Printf(key Reference, a ...interface{}) (n int, err error) { + msg, hasSub := p.lookup(key) + if !hasSub { + return fmt.Printf(msg) // work around limitation of fmt + } + return fmt.Printf(msg, p.bindArgs(a)...) +} + +func (p *Printer) lookup(r Reference) (msg string, hasSub bool) { + var id string + switch v := r.(type) { + case string: + id, msg = v, v + case key: + id, msg = v.id, v.fallback + default: + panic("key argument is not a Reference") + } + if s, ok := p.cat.get(p.tag, id); ok { + msg = s + } + // fmt does not allow all arguments to be dropped in a format string. It + // only allows arguments to be dropped if at least one of the substitutions + // uses the positional marker (e.g. %[1]s). This hack works around this. + // TODO: This is only an approximation of the parsing of substitution + // patterns. Make more precise once we know if we can get by with fmt's + // formatting, which may not be the case. + for i := 0; i < len(msg)-1; i++ { + if msg[i] == '%' { + for i++; i < len(msg); i++ { + if strings.IndexByte("[]#+- *01234567890.", msg[i]) < 0 { + break + } + } + if i < len(msg) && msg[i] != '%' { + hasSub = true + break + } + } + } + return msg, hasSub +} + +// A Reference is a string or a message reference. +type Reference interface { +} + +// Key creates a message Reference for a message where the given id is used for +// message lookup and the fallback is returned when no matches are found. +func Key(id string, fallback string) Reference { + return key{id, fallback} +} + +type key struct { + id, fallback string +} + +// bindArgs wraps arguments with implementation of fmt.Formatter, if needed. +func (p *Printer) bindArgs(a []interface{}) []interface{} { + out := make([]interface{}, len(a)) + for i, x := range a { + switch v := x.(type) { + case fmt.Formatter: + // Wrap the value with a Formatter that augments the State with + // language-specific attributes. + out[i] = &value{v, p} + + // NOTE: as we use fmt.Formatter, we can't distinguish between + // regular and localized formatters, so we always need to wrap it. + + // TODO: handle + // - numbers + // - lists + // - time? + default: + out[i] = x + } + } + return out +} + +// state implements "golang.org/x/text/internal/format".State. +type state struct { + fmt.State + p *Printer +} + +func (s *state) Language() language.Tag { return s.p.tag } + +var _ format.State = &state{} + +type value struct { + x fmt.Formatter + p *Printer +} + +func (v *value) Format(s fmt.State, verb rune) { + v.x.Format(&state{s, v.p}, verb) +} diff --git a/vendor/golang.org/x/text/message/message_test.go b/vendor/golang.org/x/text/message/message_test.go new file mode 100644 index 0000000..f7dba8d --- /dev/null +++ b/vendor/golang.org/x/text/message/message_test.go @@ -0,0 +1,149 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package message + +import ( + "bytes" + "fmt" + "io" + "testing" + + "golang.org/x/text/internal/format" + "golang.org/x/text/language" +) + +type formatFunc func(s fmt.State, v rune) + +func (f formatFunc) Format(s fmt.State, v rune) { f(s, v) } + +func TestBinding(t *testing.T) { + testCases := []struct { + tag string + value interface{} + want string + }{ + {"en", 1, "1"}, + {"en", "2", "2"}, + { // Language is passed. + "en", + formatFunc(func(fs fmt.State, v rune) { + s := fs.(format.State) + io.WriteString(s, s.Language().String()) + }), + "en", + }, + } + for i, tc := range testCases { + p := NewPrinter(language.MustParse(tc.tag)) + if got := p.Sprint(tc.value); got != tc.want { + t.Errorf("%d:%s:Sprint(%v) = %q; want %q", i, tc.tag, tc.value, got, tc.want) + } + var buf bytes.Buffer + p.Fprint(&buf, tc.value) + if got := buf.String(); got != tc.want { + t.Errorf("%d:%s:Fprint(%v) = %q; want %q", i, tc.tag, tc.value, got, tc.want) + } + } +} + +func TestFormatSelection(t *testing.T) { + type test struct { + tag string + key Reference + args []interface{} + want string + } + empty := []interface{}{} + joe := []interface{}{"Joe"} + joeAndMary := []interface{}{"Joe", "Mary"} + + testCases := []struct { + desc string + cat []entry + test []test + }{{ + desc: "empty", + test: []test{ + {"en", "key", empty, "key"}, + {"en", "", empty, ""}, + {"nl", "", empty, ""}, + }, + }, { + desc: "hierarchical languages", + cat: []entry{ + {"en", "hello %s", "Hello %s!"}, + {"en-GB", "hello %s", "Hellø %s!"}, + {"en-US", "hello %s", "Howdy %s!"}, + {"en", "greetings %s and %s", "Greetings %s and %s!"}, + }, + test: []test{ + {"und", "hello %s", joe, "hello Joe"}, + {"nl", "hello %s", joe, "hello Joe"}, + {"en", "hello %s", joe, "Hello Joe!"}, + {"en-US", "hello %s", joe, "Howdy Joe!"}, + {"en-GB", "hello %s", joe, "Hellø Joe!"}, + {"en-oxendict", "hello %s", joe, "Hello Joe!"}, + {"en-US-oxendict-u-ms-metric", "hello %s", joe, "Howdy Joe!"}, + + {"und", "greetings %s and %s", joeAndMary, "greetings Joe and Mary"}, + {"nl", "greetings %s and %s", joeAndMary, "greetings Joe and Mary"}, + {"en", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"}, + {"en-US", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"}, + {"en-GB", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"}, + {"en-oxendict", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"}, + {"en-US-oxendict-u-ms-metric", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"}, + }, + }, { + desc: "references", + cat: []entry{ + {"en", "hello", "Hello!"}, + }, + test: []test{ + {"en", "hello", empty, "Hello!"}, + {"en", Key("hello", "fallback"), empty, "Hello!"}, + {"en", Key("xxx", "fallback"), empty, "fallback"}, + {"und", Key("hello", "fallback"), empty, "fallback"}, + }, + }, { + desc: "zero substitution", // work around limitation of fmt + cat: []entry{ + {"en", "hello %s", "Hello!"}, + {"en", "hi %s and %s", "Hello %[2]s!"}, + }, + test: []test{ + {"en", "hello %s", joe, "Hello!"}, + {"en", "hello %s", joeAndMary, "Hello!"}, + {"en", "hi %s and %s", joeAndMary, "Hello Mary!"}, + // The following tests resolve to the fallback string. + {"und", "hello", joeAndMary, "hello"}, + {"und", "hello %%%%", joeAndMary, "hello %%"}, + {"und", "hello %#%%4.2% ", joeAndMary, "hello %% "}, + {"und", "hello %s", joeAndMary, "hello Joe%!(EXTRA string=Mary)"}, + {"und", "hello %+%%s", joeAndMary, "hello %Joe%!(EXTRA string=Mary)"}, + {"und", "hello %-42%%s ", joeAndMary, "hello %Joe %!(EXTRA string=Mary)"}, + }, + }} + + for _, tc := range testCases { + cat, _ := initCat(tc.cat) + + for i, pt := range tc.test { + p := cat.Printer(language.MustParse(pt.tag)) + + if got := p.Sprintf(pt.key, pt.args...); got != pt.want { + t.Errorf("%s:%d:Sprintf(%s, %v) = %s; want %s", + tc.desc, i, pt.key, pt.args, got, pt.want) + continue // Next error will likely be the same. + } + + w := &bytes.Buffer{} + p.Fprintf(w, pt.key, pt.args...) + if got := w.String(); got != pt.want { + t.Errorf("%s:%d:Fprintf(%s, %v) = %s; want %s", + tc.desc, i, pt.key, pt.args, got, pt.want) + } + } + } +} diff --git a/vendor/golang.org/x/text/runes/cond.go b/vendor/golang.org/x/text/runes/cond.go new file mode 100644 index 0000000..df7aa02 --- /dev/null +++ b/vendor/golang.org/x/text/runes/cond.go @@ -0,0 +1,187 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runes + +import ( + "unicode/utf8" + + "golang.org/x/text/transform" +) + +// Note: below we pass invalid UTF-8 to the tIn and tNotIn transformers as is. +// This is done for various reasons: +// - To retain the semantics of the Nop transformer: if input is passed to a Nop +// one would expect it to be unchanged. +// - It would be very expensive to pass a converted RuneError to a transformer: +// a transformer might need more source bytes after RuneError, meaning that +// the only way to pass it safely is to create a new buffer and manage the +// intermingling of RuneErrors and normal input. +// - Many transformers leave ill-formed UTF-8 as is, so this is not +// inconsistent. Generally ill-formed UTF-8 is only replaced if it is a +// logical consequence of the operation (as for Map) or if it otherwise would +// pose security concerns (as for Remove). +// - An alternative would be to return an error on ill-formed UTF-8, but this +// would be inconsistent with other operations. + +// If returns a transformer that applies tIn to consecutive runes for which +// s.Contains(r) and tNotIn to consecutive runes for which !s.Contains(r). Reset +// is called on tIn and tNotIn at the start of each run. A Nop transformer will +// substitute a nil value passed to tIn or tNotIn. Invalid UTF-8 is translated +// to RuneError to determine which transformer to apply, but is passed as is to +// the respective transformer. +func If(s Set, tIn, tNotIn transform.Transformer) Transformer { + if tIn == nil && tNotIn == nil { + return Transformer{transform.Nop} + } + if tIn == nil { + tIn = transform.Nop + } + if tNotIn == nil { + tNotIn = transform.Nop + } + sIn, ok := tIn.(transform.SpanningTransformer) + if !ok { + sIn = dummySpan{tIn} + } + sNotIn, ok := tNotIn.(transform.SpanningTransformer) + if !ok { + sNotIn = dummySpan{tNotIn} + } + + a := &cond{ + tIn: sIn, + tNotIn: sNotIn, + f: s.Contains, + } + a.Reset() + return Transformer{a} +} + +type dummySpan struct{ transform.Transformer } + +func (d dummySpan) Span(src []byte, atEOF bool) (n int, err error) { + return 0, transform.ErrEndOfSpan +} + +type cond struct { + tIn, tNotIn transform.SpanningTransformer + f func(rune) bool + check func(rune) bool // current check to perform + t transform.SpanningTransformer // current transformer to use +} + +// Reset implements transform.Transformer. +func (t *cond) Reset() { + t.check = t.is + t.t = t.tIn + t.t.Reset() // notIn will be reset on first usage. +} + +func (t *cond) is(r rune) bool { + if t.f(r) { + return true + } + t.check = t.isNot + t.t = t.tNotIn + t.tNotIn.Reset() + return false +} + +func (t *cond) isNot(r rune) bool { + if !t.f(r) { + return true + } + t.check = t.is + t.t = t.tIn + t.tIn.Reset() + return false +} + +// This implementation of Span doesn't help all too much, but it needs to be +// there to satisfy this package's Transformer interface. +// TODO: there are certainly room for improvements, though. For example, if +// t.t == transform.Nop (which will a common occurrence) it will save a bundle +// to special-case that loop. +func (t *cond) Span(src []byte, atEOF bool) (n int, err error) { + p := 0 + for n < len(src) && err == nil { + // Don't process too much at a time as the Spanner that will be + // called on this block may terminate early. + const maxChunk = 4096 + max := len(src) + if v := n + maxChunk; v < max { + max = v + } + atEnd := false + size := 0 + current := t.t + for ; p < max; p += size { + r := rune(src[p]) + if r < utf8.RuneSelf { + size = 1 + } else if r, size = utf8.DecodeRune(src[p:]); size == 1 { + if !atEOF && !utf8.FullRune(src[p:]) { + err = transform.ErrShortSrc + break + } + } + if !t.check(r) { + // The next rune will be the start of a new run. + atEnd = true + break + } + } + n2, err2 := current.Span(src[n:p], atEnd || (atEOF && p == len(src))) + n += n2 + if err2 != nil { + return n, err2 + } + // At this point either err != nil or t.check will pass for the rune at p. + p = n + size + } + return n, err +} + +func (t *cond) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + p := 0 + for nSrc < len(src) && err == nil { + // Don't process too much at a time, as the work might be wasted if the + // destination buffer isn't large enough to hold the result or a + // transform returns an error early. + const maxChunk = 4096 + max := len(src) + if n := nSrc + maxChunk; n < len(src) { + max = n + } + atEnd := false + size := 0 + current := t.t + for ; p < max; p += size { + r := rune(src[p]) + if r < utf8.RuneSelf { + size = 1 + } else if r, size = utf8.DecodeRune(src[p:]); size == 1 { + if !atEOF && !utf8.FullRune(src[p:]) { + err = transform.ErrShortSrc + break + } + } + if !t.check(r) { + // The next rune will be the start of a new run. + atEnd = true + break + } + } + nDst2, nSrc2, err2 := current.Transform(dst[nDst:], src[nSrc:p], atEnd || (atEOF && p == len(src))) + nDst += nDst2 + nSrc += nSrc2 + if err2 != nil { + return nDst, nSrc, err2 + } + // At this point either err != nil or t.check will pass for the rune at p. + p = nSrc + size + } + return nDst, nSrc, err +} diff --git a/vendor/golang.org/x/text/runes/cond_test.go b/vendor/golang.org/x/text/runes/cond_test.go new file mode 100644 index 0000000..44cd36d --- /dev/null +++ b/vendor/golang.org/x/text/runes/cond_test.go @@ -0,0 +1,282 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runes + +import ( + "strings" + "testing" + "unicode" + + "golang.org/x/text/cases" + "golang.org/x/text/language" + "golang.org/x/text/transform" +) + +var ( + toUpper = cases.Upper(language.Und) + toLower = cases.Lower(language.Und) +) + +type spanformer interface { + transform.SpanningTransformer +} + +func TestPredicate(t *testing.T) { + testConditional(t, func(rt *unicode.RangeTable, t, f spanformer) spanformer { + return If(Predicate(func(r rune) bool { + return unicode.Is(rt, r) + }), t, f) + }) +} + +func TestIn(t *testing.T) { + testConditional(t, func(rt *unicode.RangeTable, t, f spanformer) spanformer { + return If(In(rt), t, f) + }) +} + +func TestNotIn(t *testing.T) { + testConditional(t, func(rt *unicode.RangeTable, t, f spanformer) spanformer { + return If(NotIn(rt), f, t) + }) +} + +func testConditional(t *testing.T, f func(rt *unicode.RangeTable, t, f spanformer) spanformer) { + lower := f(unicode.Latin, toLower, toLower) + + for i, tt := range []transformTest{{ + desc: "empty", + szDst: large, + atEOF: true, + in: "", + out: "", + outFull: "", + t: lower, + }, { + desc: "small", + szDst: 1, + atEOF: true, + in: "B", + out: "b", + outFull: "b", + errSpan: transform.ErrEndOfSpan, + t: lower, + }, { + desc: "short dst", + szDst: 2, + atEOF: true, + in: "AAA", + out: "aa", + outFull: "aaa", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: lower, + }, { + desc: "short dst writing error", + szDst: 1, + atEOF: false, + in: "A\x80", + out: "a", + outFull: "a\x80", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: lower, + }, { + desc: "short dst writing incomplete rune", + szDst: 2, + atEOF: true, + in: "Σ\xc2", + out: "Σ", + outFull: "Σ\xc2", + err: transform.ErrShortDst, + t: f(unicode.Latin, toLower, nil), + }, { + desc: "short dst, longer", + szDst: 5, + atEOF: true, + in: "Hellø", + out: "Hell", + outFull: "Hellø", + err: transform.ErrShortDst, + // idem is used to test short buffers by forcing processing of full-rune increments. + t: f(unicode.Latin, Map(idem), nil), + }, { + desc: "short dst, longer, writing error", + szDst: 6, + atEOF: false, + in: "\x80Hello\x80", + out: "\x80Hello", + outFull: "\x80Hello\x80", + err: transform.ErrShortDst, + t: f(unicode.Latin, Map(idem), nil), + }, { + desc: "short src", + szDst: 2, + atEOF: false, + in: "A\xc2", + out: "a", + outFull: "a\xc2", + err: transform.ErrShortSrc, + errSpan: transform.ErrEndOfSpan, + t: lower, + }, { + desc: "short src no change", + szDst: 2, + atEOF: false, + in: "a\xc2", + out: "a", + outFull: "a\xc2", + err: transform.ErrShortSrc, + errSpan: transform.ErrShortSrc, + nSpan: 1, + t: lower, + }, { + desc: "invalid input, atEOF", + szDst: large, + atEOF: true, + in: "\x80", + out: "\x80", + outFull: "\x80", + t: lower, + }, { + desc: "invalid input, !atEOF", + szDst: large, + atEOF: false, + in: "\x80", + out: "\x80", + outFull: "\x80", + t: lower, + }, { + desc: "invalid input, incomplete rune atEOF", + szDst: large, + atEOF: true, + in: "\xc2", + out: "\xc2", + outFull: "\xc2", + t: lower, + }, { + desc: "nop", + szDst: large, + atEOF: true, + in: "Hello World!", + out: "Hello World!", + outFull: "Hello World!", + t: f(unicode.Latin, nil, nil), + }, { + desc: "nop in", + szDst: large, + atEOF: true, + in: "THIS IS α ΤΕΣΤ", + out: "this is α ΤΕΣΤ", + outFull: "this is α ΤΕΣΤ", + errSpan: transform.ErrEndOfSpan, + t: f(unicode.Greek, nil, toLower), + }, { + desc: "nop in latin", + szDst: large, + atEOF: true, + in: "THIS IS α ΤΕΣΤ", + out: "THIS IS α τεστ", + outFull: "THIS IS α τεστ", + errSpan: transform.ErrEndOfSpan, + t: f(unicode.Latin, nil, toLower), + }, { + desc: "nop not in", + szDst: large, + atEOF: true, + in: "THIS IS α ΤΕΣΤ", + out: "this is α ΤΕΣΤ", + outFull: "this is α ΤΕΣΤ", + errSpan: transform.ErrEndOfSpan, + t: f(unicode.Latin, toLower, nil), + }, { + desc: "pass atEOF is true when at end", + szDst: large, + atEOF: true, + in: "hello", + out: "HELLO", + outFull: "HELLO", + errSpan: transform.ErrEndOfSpan, + t: f(unicode.Latin, upperAtEOF{}, nil), + }, { + desc: "pass atEOF is true when at end of segment", + szDst: large, + atEOF: true, + in: "hello ", + out: "HELLO ", + outFull: "HELLO ", + errSpan: transform.ErrEndOfSpan, + t: f(unicode.Latin, upperAtEOF{}, nil), + }, { + desc: "don't pass atEOF is true when atEOF is false", + szDst: large, + atEOF: false, + in: "hello", + out: "", + outFull: "HELLO", + err: transform.ErrShortSrc, + errSpan: transform.ErrShortSrc, + t: f(unicode.Latin, upperAtEOF{}, nil), + }, { + desc: "pass atEOF is true when at end, no change", + szDst: large, + atEOF: true, + in: "HELLO", + out: "HELLO", + outFull: "HELLO", + t: f(unicode.Latin, upperAtEOF{}, nil), + }, { + desc: "pass atEOF is true when at end of segment, no change", + szDst: large, + atEOF: true, + in: "HELLO ", + out: "HELLO ", + outFull: "HELLO ", + t: f(unicode.Latin, upperAtEOF{}, nil), + }, { + desc: "large input ASCII", + szDst: 12000, + atEOF: false, + in: strings.Repeat("HELLO", 2000), + out: strings.Repeat("hello", 2000), + outFull: strings.Repeat("hello", 2000), + errSpan: transform.ErrEndOfSpan, + err: nil, + t: lower, + }, { + desc: "large input non-ASCII", + szDst: 12000, + atEOF: false, + in: strings.Repeat("\u3333", 2000), + out: strings.Repeat("\u3333", 2000), + outFull: strings.Repeat("\u3333", 2000), + err: nil, + t: lower, + }} { + tt.check(t, i) + } +} + +// upperAtEOF is a strange Transformer that converts text to uppercase, but only +// if atEOF is true. +type upperAtEOF struct{ transform.NopResetter } + +func (upperAtEOF) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if !atEOF { + return 0, 0, transform.ErrShortSrc + } + return toUpper.Transform(dst, src, atEOF) +} + +func (upperAtEOF) Span(src []byte, atEOF bool) (n int, err error) { + if !atEOF { + return 0, transform.ErrShortSrc + } + return toUpper.Span(src, atEOF) +} + +func BenchmarkConditional(b *testing.B) { + doBench(b, If(In(unicode.Hangul), transform.Nop, transform.Nop)) +} diff --git a/vendor/golang.org/x/text/runes/example_test.go b/vendor/golang.org/x/text/runes/example_test.go new file mode 100644 index 0000000..a60bfd9 --- /dev/null +++ b/vendor/golang.org/x/text/runes/example_test.go @@ -0,0 +1,60 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runes_test + +import ( + "fmt" + "unicode" + + "golang.org/x/text/runes" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" + "golang.org/x/text/width" +) + +func ExampleRemove() { + t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC) + s, _, _ := transform.String(t, "résumé") + fmt.Println(s) + + // Output: + // resume +} + +func ExampleMap() { + replaceHyphens := runes.Map(func(r rune) rune { + if unicode.Is(unicode.Hyphen, r) { + return '|' + } + return r + }) + s, _, _ := transform.String(replaceHyphens, "a-b‐c⸗d﹣e") + fmt.Println(s) + + // Output: + // a|b|c|d|e +} + +func ExampleIn() { + // Convert Latin characters to their canonical form, while keeping other + // width distinctions. + t := runes.If(runes.In(unicode.Latin), width.Fold, nil) + s, _, _ := transform.String(t, "アルアノリウ tech / アルアノリウ tech") + fmt.Println(s) + + // Output: + // アルアノリウ tech / アルアノリウ tech +} + +func ExampleIf() { + // Widen everything but ASCII. + isASCII := func(r rune) bool { return r <= unicode.MaxASCII } + t := runes.If(runes.Predicate(isASCII), nil, width.Widen) + s, _, _ := transform.String(t, "アルアノリウ tech / 中國 / 5₩") + fmt.Println(s) + + // Output: + // アルアノリウ tech / 中國 / 5₩ +} diff --git a/vendor/golang.org/x/text/runes/runes.go b/vendor/golang.org/x/text/runes/runes.go new file mode 100644 index 0000000..7193369 --- /dev/null +++ b/vendor/golang.org/x/text/runes/runes.go @@ -0,0 +1,355 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package runes provide transforms for UTF-8 encoded text. +package runes // import "golang.org/x/text/runes" + +import ( + "unicode" + "unicode/utf8" + + "golang.org/x/text/transform" +) + +// A Set is a collection of runes. +type Set interface { + // Contains returns true if r is contained in the set. + Contains(r rune) bool +} + +type setFunc func(rune) bool + +func (s setFunc) Contains(r rune) bool { + return s(r) +} + +// Note: using funcs here instead of wrapping types result in cleaner +// documentation and a smaller API. + +// In creates a Set with a Contains method that returns true for all runes in +// the given RangeTable. +func In(rt *unicode.RangeTable) Set { + return setFunc(func(r rune) bool { return unicode.Is(rt, r) }) +} + +// In creates a Set with a Contains method that returns true for all runes not +// in the given RangeTable. +func NotIn(rt *unicode.RangeTable) Set { + return setFunc(func(r rune) bool { return !unicode.Is(rt, r) }) +} + +// Predicate creates a Set with a Contains method that returns f(r). +func Predicate(f func(rune) bool) Set { + return setFunc(f) +} + +// Transformer implements the transform.Transformer interface. +type Transformer struct { + t transform.SpanningTransformer +} + +func (t Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + return t.t.Transform(dst, src, atEOF) +} + +func (t Transformer) Span(b []byte, atEOF bool) (n int, err error) { + return t.t.Span(b, atEOF) +} + +func (t Transformer) Reset() { t.t.Reset() } + +// Bytes returns a new byte slice with the result of converting b using t. It +// calls Reset on t. It returns nil if any error was found. This can only happen +// if an error-producing Transformer is passed to If. +func (t Transformer) Bytes(b []byte) []byte { + b, _, err := transform.Bytes(t, b) + if err != nil { + return nil + } + return b +} + +// String returns a string with the result of converting s using t. It calls +// Reset on t. It returns the empty string if any error was found. This can only +// happen if an error-producing Transformer is passed to If. +func (t Transformer) String(s string) string { + s, _, err := transform.String(t, s) + if err != nil { + return "" + } + return s +} + +// TODO: +// - Copy: copying strings and bytes in whole-rune units. +// - Validation (maybe) +// - Well-formed-ness (maybe) + +const runeErrorString = string(utf8.RuneError) + +// Remove returns a Transformer that removes runes r for which s.Contains(r). +// Illegal input bytes are replaced by RuneError before being passed to f. +func Remove(s Set) Transformer { + if f, ok := s.(setFunc); ok { + // This little trick cuts the running time of BenchmarkRemove for sets + // created by Predicate roughly in half. + // TODO: special-case RangeTables as well. + return Transformer{remove(f)} + } + return Transformer{remove(s.Contains)} +} + +// TODO: remove transform.RemoveFunc. + +type remove func(r rune) bool + +func (remove) Reset() {} + +// Span implements transform.Spanner. +func (t remove) Span(src []byte, atEOF bool) (n int, err error) { + for r, size := rune(0), 0; n < len(src); { + if r = rune(src[n]); r < utf8.RuneSelf { + size = 1 + } else if r, size = utf8.DecodeRune(src[n:]); size == 1 { + // Invalid rune. + if !atEOF && !utf8.FullRune(src[n:]) { + err = transform.ErrShortSrc + } else { + err = transform.ErrEndOfSpan + } + break + } + if t(r) { + err = transform.ErrEndOfSpan + break + } + n += size + } + return +} + +// Transform implements transform.Transformer. +func (t remove) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for r, size := rune(0), 0; nSrc < len(src); { + if r = rune(src[nSrc]); r < utf8.RuneSelf { + size = 1 + } else if r, size = utf8.DecodeRune(src[nSrc:]); size == 1 { + // Invalid rune. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + // We replace illegal bytes with RuneError. Not doing so might + // otherwise turn a sequence of invalid UTF-8 into valid UTF-8. + // The resulting byte sequence may subsequently contain runes + // for which t(r) is true that were passed unnoticed. + if !t(utf8.RuneError) { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = runeErrorString[0] + dst[nDst+1] = runeErrorString[1] + dst[nDst+2] = runeErrorString[2] + nDst += 3 + } + nSrc++ + continue + } + if t(r) { + nSrc += size + continue + } + if nDst+size > len(dst) { + err = transform.ErrShortDst + break + } + for i := 0; i < size; i++ { + dst[nDst] = src[nSrc] + nDst++ + nSrc++ + } + } + return +} + +// Map returns a Transformer that maps the runes in the input using the given +// mapping. Illegal bytes in the input are converted to utf8.RuneError before +// being passed to the mapping func. +func Map(mapping func(rune) rune) Transformer { + return Transformer{mapper(mapping)} +} + +type mapper func(rune) rune + +func (mapper) Reset() {} + +// Span implements transform.Spanner. +func (t mapper) Span(src []byte, atEOF bool) (n int, err error) { + for r, size := rune(0), 0; n < len(src); n += size { + if r = rune(src[n]); r < utf8.RuneSelf { + size = 1 + } else if r, size = utf8.DecodeRune(src[n:]); size == 1 { + // Invalid rune. + if !atEOF && !utf8.FullRune(src[n:]) { + err = transform.ErrShortSrc + } else { + err = transform.ErrEndOfSpan + } + break + } + if t(r) != r { + err = transform.ErrEndOfSpan + break + } + } + return n, err +} + +// Transform implements transform.Transformer. +func (t mapper) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + var replacement rune + var b [utf8.UTFMax]byte + + for r, size := rune(0), 0; nSrc < len(src); { + if r = rune(src[nSrc]); r < utf8.RuneSelf { + if replacement = t(r); replacement < utf8.RuneSelf { + if nDst == len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = byte(replacement) + nDst++ + nSrc++ + continue + } + size = 1 + } else if r, size = utf8.DecodeRune(src[nSrc:]); size == 1 { + // Invalid rune. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + + if replacement = t(utf8.RuneError); replacement == utf8.RuneError { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = runeErrorString[0] + dst[nDst+1] = runeErrorString[1] + dst[nDst+2] = runeErrorString[2] + nDst += 3 + nSrc++ + continue + } + } else if replacement = t(r); replacement == r { + if nDst+size > len(dst) { + err = transform.ErrShortDst + break + } + for i := 0; i < size; i++ { + dst[nDst] = src[nSrc] + nDst++ + nSrc++ + } + continue + } + + n := utf8.EncodeRune(b[:], replacement) + + if nDst+n > len(dst) { + err = transform.ErrShortDst + break + } + for i := 0; i < n; i++ { + dst[nDst] = b[i] + nDst++ + } + nSrc += size + } + return +} + +// ReplaceIllFormed returns a transformer that replaces all input bytes that are +// not part of a well-formed UTF-8 code sequence with utf8.RuneError. +func ReplaceIllFormed() Transformer { + return Transformer{&replaceIllFormed{}} +} + +type replaceIllFormed struct{ transform.NopResetter } + +func (t replaceIllFormed) Span(src []byte, atEOF bool) (n int, err error) { + for n < len(src) { + // ASCII fast path. + if src[n] < utf8.RuneSelf { + n++ + continue + } + + r, size := utf8.DecodeRune(src[n:]) + + // Look for a valid non-ASCII rune. + if r != utf8.RuneError || size != 1 { + n += size + continue + } + + // Look for short source data. + if !atEOF && !utf8.FullRune(src[n:]) { + err = transform.ErrShortSrc + break + } + + // We have an invalid rune. + err = transform.ErrEndOfSpan + break + } + return n, err +} + +func (t replaceIllFormed) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for nSrc < len(src) { + // ASCII fast path. + if r := src[nSrc]; r < utf8.RuneSelf { + if nDst == len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = r + nDst++ + nSrc++ + continue + } + + // Look for a valid non-ASCII rune. + if _, size := utf8.DecodeRune(src[nSrc:]); size != 1 { + if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { + err = transform.ErrShortDst + break + } + nDst += size + nSrc += size + continue + } + + // Look for short source data. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + + // We have an invalid rune. + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = runeErrorString[0] + dst[nDst+1] = runeErrorString[1] + dst[nDst+2] = runeErrorString[2] + nDst += 3 + nSrc++ + } + return nDst, nSrc, err +} diff --git a/vendor/golang.org/x/text/runes/runes_test.go b/vendor/golang.org/x/text/runes/runes_test.go new file mode 100644 index 0000000..23c5bc9 --- /dev/null +++ b/vendor/golang.org/x/text/runes/runes_test.go @@ -0,0 +1,664 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runes + +import ( + "strings" + "testing" + "unicode/utf8" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/transform" +) + +type transformTest struct { + desc string + szDst int + atEOF bool + repl string + in string + out string // result string of first call to Transform + outFull string // transform of entire input string + err error + errSpan error + nSpan int + + t transform.SpanningTransformer +} + +const large = 10240 + +func (tt *transformTest) check(t *testing.T, i int) { + if tt.t == nil { + return + } + dst := make([]byte, tt.szDst) + src := []byte(tt.in) + nDst, nSrc, err := tt.t.Transform(dst, src, tt.atEOF) + if err != tt.err { + t.Errorf("%d:%s:error: got %v; want %v", i, tt.desc, err, tt.err) + } + if got := string(dst[:nDst]); got != tt.out { + t.Errorf("%d:%s:out: got %q; want %q", i, tt.desc, got, tt.out) + } + + // Calls tt.t.Transform for the remainder of the input. We use this to test + // the nSrc return value. + out := make([]byte, large) + n := copy(out, dst[:nDst]) + nDst, _, _ = tt.t.Transform(out[n:], src[nSrc:], true) + if got, want := string(out[:n+nDst]), tt.outFull; got != want { + t.Errorf("%d:%s:outFull: got %q; want %q", i, tt.desc, got, want) + } + + tt.t.Reset() + p := 0 + for ; p < len(tt.in) && p < len(tt.outFull) && tt.in[p] == tt.outFull[p]; p++ { + } + if tt.nSpan != 0 { + p = tt.nSpan + } + if n, err = tt.t.Span([]byte(tt.in), tt.atEOF); n != p || err != tt.errSpan { + t.Errorf("%d:%s:span: got %d, %v; want %d, %v", i, tt.desc, n, err, p, tt.errSpan) + } +} + +func idem(r rune) rune { return r } + +func TestMap(t *testing.T) { + runes := []rune{'a', 'ç', '中', '\U00012345', 'a'} + // Default mapper used for this test. + rotate := Map(func(r rune) rune { + for i, m := range runes { + if m == r { + return runes[i+1] + } + } + return r + }) + + for i, tt := range []transformTest{{ + desc: "empty", + szDst: large, + atEOF: true, + in: "", + out: "", + outFull: "", + t: rotate, + }, { + desc: "no change", + szDst: 1, + atEOF: true, + in: "b", + out: "b", + outFull: "b", + t: rotate, + }, { + desc: "short dst", + szDst: 2, + atEOF: true, + in: "aaaa", + out: "ç", + outFull: "çççç", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "short dst ascii, no change", + szDst: 2, + atEOF: true, + in: "bbb", + out: "bb", + outFull: "bbb", + err: transform.ErrShortDst, + t: rotate, + }, { + desc: "short dst writing error", + szDst: 2, + atEOF: false, + in: "a\x80", + out: "ç", + outFull: "ç\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "short dst writing incomplete rune", + szDst: 2, + atEOF: true, + in: "a\xc0", + out: "ç", + outFull: "ç\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "short dst, longer", + szDst: 5, + atEOF: true, + in: "Hellø", + out: "Hell", + outFull: "Hellø", + err: transform.ErrShortDst, + t: rotate, + }, { + desc: "short dst, single", + szDst: 1, + atEOF: false, + in: "ø", + out: "", + outFull: "ø", + err: transform.ErrShortDst, + t: Map(idem), + }, { + desc: "short dst, longer, writing error", + szDst: 8, + atEOF: false, + in: "\x80Hello\x80", + out: "\ufffdHello", + outFull: "\ufffdHello\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "short src", + szDst: 2, + atEOF: false, + in: "a\xc2", + out: "ç", + outFull: "ç\ufffd", + err: transform.ErrShortSrc, + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "invalid input, atEOF", + szDst: large, + atEOF: true, + in: "\x80", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "invalid input, !atEOF", + szDst: large, + atEOF: false, + in: "\x80", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "incomplete rune !atEOF", + szDst: large, + atEOF: false, + in: "\xc2", + out: "", + outFull: "\ufffd", + err: transform.ErrShortSrc, + errSpan: transform.ErrShortSrc, + t: rotate, + }, { + desc: "invalid input, incomplete rune atEOF", + szDst: large, + atEOF: true, + in: "\xc2", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "misc correct", + szDst: large, + atEOF: true, + in: "a\U00012345 ç!", + out: "ça 中!", + outFull: "ça 中!", + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "misc correct and invalid", + szDst: large, + atEOF: true, + in: "Hello\x80 w\x80orl\xc0d!\xc0", + out: "Hello\ufffd w\ufffdorl\ufffdd!\ufffd", + outFull: "Hello\ufffd w\ufffdorl\ufffdd!\ufffd", + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "misc correct and invalid, short src", + szDst: large, + atEOF: false, + in: "Hello\x80 w\x80orl\xc0d!\xc2", + out: "Hello\ufffd w\ufffdorl\ufffdd!", + outFull: "Hello\ufffd w\ufffdorl\ufffdd!\ufffd", + err: transform.ErrShortSrc, + errSpan: transform.ErrEndOfSpan, + t: rotate, + }, { + desc: "misc correct and invalid, short src, replacing RuneError", + szDst: large, + atEOF: false, + in: "Hel\ufffdlo\x80 w\x80orl\xc0d!\xc2", + out: "Hel?lo? w?orl?d!", + outFull: "Hel?lo? w?orl?d!?", + errSpan: transform.ErrEndOfSpan, + err: transform.ErrShortSrc, + t: Map(func(r rune) rune { + if r == utf8.RuneError { + return '?' + } + return r + }), + }} { + tt.check(t, i) + } +} + +func TestRemove(t *testing.T) { + remove := Remove(Predicate(func(r rune) bool { + return strings.ContainsRune("aeiou\u0300\uFF24\U00012345", r) + })) + + for i, tt := range []transformTest{ + 0: { + szDst: large, + atEOF: true, + in: "", + out: "", + outFull: "", + t: remove, + }, + 1: { + szDst: 0, + atEOF: true, + in: "aaaa", + out: "", + outFull: "", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 2: { + szDst: 1, + atEOF: true, + in: "aaaa", + out: "", + outFull: "", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 3: { + szDst: 1, + atEOF: true, + in: "baaaa", + out: "b", + outFull: "b", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 4: { + szDst: 2, + atEOF: true, + in: "açaaa", + out: "ç", + outFull: "ç", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 5: { + szDst: 2, + atEOF: true, + in: "aaaç", + out: "ç", + outFull: "ç", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 6: { + szDst: 2, + atEOF: false, + in: "a\x80", + out: "", + outFull: "\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 7: { + szDst: 1, + atEOF: true, + in: "a\xc0", + out: "", + outFull: "\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 8: { + szDst: 1, + atEOF: false, + in: "a\xc2", + out: "", + outFull: "\ufffd", + err: transform.ErrShortSrc, + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 9: { + szDst: large, + atEOF: true, + in: "\x80", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 10: { + szDst: large, + atEOF: false, + in: "\x80", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 11: { + szDst: large, + atEOF: true, + in: "\xc2", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 12: { + szDst: large, + atEOF: false, + in: "\xc2", + out: "", + outFull: "\ufffd", + err: transform.ErrShortSrc, + errSpan: transform.ErrShortSrc, + t: remove, + }, + 13: { + szDst: large, + atEOF: true, + in: "Hello \U00012345world!", + out: "Hll wrld!", + outFull: "Hll wrld!", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 14: { + szDst: large, + atEOF: true, + in: "Hello\x80 w\x80orl\xc0d!\xc0", + out: "Hll\ufffd w\ufffdrl\ufffdd!\ufffd", + outFull: "Hll\ufffd w\ufffdrl\ufffdd!\ufffd", + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 15: { + szDst: large, + atEOF: false, + in: "Hello\x80 w\x80orl\xc0d!\xc2", + out: "Hll\ufffd w\ufffdrl\ufffdd!", + outFull: "Hll\ufffd w\ufffdrl\ufffdd!\ufffd", + err: transform.ErrShortSrc, + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 16: { + szDst: large, + atEOF: false, + in: "Hel\ufffdlo\x80 w\x80orl\xc0d!\xc2", + out: "Hello world!", + outFull: "Hello world!", + err: transform.ErrShortSrc, + errSpan: transform.ErrEndOfSpan, + t: Remove(Predicate(func(r rune) bool { return r == utf8.RuneError })), + }, + 17: { + szDst: 4, + atEOF: true, + in: "Hellø", + out: "Hll", + outFull: "Hllø", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 18: { + szDst: 4, + atEOF: false, + in: "Hellø", + out: "Hll", + outFull: "Hllø", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 19: { + szDst: 8, + atEOF: false, + in: "\x80Hello\uFF24\x80", + out: "\ufffdHll", + outFull: "\ufffdHll\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: remove, + }, + 20: { + szDst: 8, + atEOF: false, + in: "Hllll", + out: "Hllll", + outFull: "Hllll", + t: remove, + }} { + tt.check(t, i) + } +} + +func TestReplaceIllFormed(t *testing.T) { + replace := ReplaceIllFormed() + + for i, tt := range []transformTest{ + 0: { + szDst: large, + atEOF: true, + in: "", + out: "", + outFull: "", + t: replace, + }, + 1: { + szDst: 1, + atEOF: true, + in: "aa", + out: "a", + outFull: "aa", + err: transform.ErrShortDst, + t: replace, + }, + 2: { + szDst: 1, + atEOF: true, + in: "a\x80", + out: "a", + outFull: "a\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: replace, + }, + 3: { + szDst: 1, + atEOF: true, + in: "a\xc2", + out: "a", + outFull: "a\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: replace, + }, + 4: { + szDst: large, + atEOF: true, + in: "\x80", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: replace, + }, + 5: { + szDst: large, + atEOF: false, + in: "\x80", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: replace, + }, + 6: { + szDst: large, + atEOF: true, + in: "\xc2", + out: "\ufffd", + outFull: "\ufffd", + errSpan: transform.ErrEndOfSpan, + t: replace, + }, + 7: { + szDst: large, + atEOF: false, + in: "\xc2", + out: "", + outFull: "\ufffd", + err: transform.ErrShortSrc, + errSpan: transform.ErrShortSrc, + t: replace, + }, + 8: { + szDst: large, + atEOF: true, + in: "Hello world!", + out: "Hello world!", + outFull: "Hello world!", + t: replace, + }, + 9: { + szDst: large, + atEOF: true, + in: "Hello\x80 w\x80orl\xc2d!\xc2", + out: "Hello\ufffd w\ufffdorl\ufffdd!\ufffd", + outFull: "Hello\ufffd w\ufffdorl\ufffdd!\ufffd", + errSpan: transform.ErrEndOfSpan, + t: replace, + }, + 10: { + szDst: large, + atEOF: false, + in: "Hello\x80 w\x80orl\xc2d!\xc2", + out: "Hello\ufffd w\ufffdorl\ufffdd!", + outFull: "Hello\ufffd w\ufffdorl\ufffdd!\ufffd", + err: transform.ErrShortSrc, + errSpan: transform.ErrEndOfSpan, + t: replace, + }, + 16: { + szDst: 10, + atEOF: false, + in: "\x80Hello\x80", + out: "\ufffdHello", + outFull: "\ufffdHello\ufffd", + err: transform.ErrShortDst, + errSpan: transform.ErrEndOfSpan, + t: replace, + }, + 17: { + szDst: 10, + atEOF: false, + in: "\ufffdHello\ufffd", + out: "\ufffdHello", + outFull: "\ufffdHello\ufffd", + err: transform.ErrShortDst, + t: replace, + }, + } { + tt.check(t, i) + } +} + +func TestMapAlloc(t *testing.T) { + if n := testtext.AllocsPerRun(3, func() { + Map(idem).Transform(nil, nil, false) + }); n > 0 { + t.Errorf("got %f; want 0", n) + } +} + +func rmNop(r rune) bool { return false } + +func TestRemoveAlloc(t *testing.T) { + if n := testtext.AllocsPerRun(3, func() { + Remove(Predicate(rmNop)).Transform(nil, nil, false) + }); n > 0 { + t.Errorf("got %f; want 0", n) + } +} + +func TestReplaceIllFormedAlloc(t *testing.T) { + if n := testtext.AllocsPerRun(3, func() { + ReplaceIllFormed().Transform(nil, nil, false) + }); n > 0 { + t.Errorf("got %f; want 0", n) + } +} + +func doBench(b *testing.B, t Transformer) { + for _, bc := range []struct{ name, data string }{ + {"ascii", testtext.ASCII}, + {"3byte", testtext.ThreeByteUTF8}, + } { + dst := make([]byte, 2*len(bc.data)) + src := []byte(bc.data) + + testtext.Bench(b, bc.name+"/transform", func(b *testing.B) { + b.SetBytes(int64(len(src))) + for i := 0; i < b.N; i++ { + t.Transform(dst, src, true) + } + }) + src = t.Bytes(src) + t.Reset() + testtext.Bench(b, bc.name+"/span", func(b *testing.B) { + b.SetBytes(int64(len(src))) + for i := 0; i < b.N; i++ { + t.Span(src, true) + } + }) + } +} + +func BenchmarkRemove(b *testing.B) { + doBench(b, Remove(Predicate(func(r rune) bool { return r == 'e' }))) +} + +func BenchmarkMapAll(b *testing.B) { + doBench(b, Map(func(r rune) rune { return 'a' })) +} + +func BenchmarkMapNone(b *testing.B) { + doBench(b, Map(func(r rune) rune { return r })) +} + +func BenchmarkReplaceIllFormed(b *testing.B) { + doBench(b, ReplaceIllFormed()) +} + +var ( + input = strings.Repeat("Thé qüick brøwn føx jumps øver the lazy døg. ", 100) +) diff --git a/vendor/golang.org/x/text/search/index.go b/vendor/golang.org/x/text/search/index.go new file mode 100644 index 0000000..35de8f5 --- /dev/null +++ b/vendor/golang.org/x/text/search/index.go @@ -0,0 +1,35 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Note: this file is identical to the file text/collate/index.go. Both files +// will be removed when the new colltab package is finished and in use. + +package search + +import "golang.org/x/text/internal/colltab" + +const blockSize = 64 + +func getTable(t tableIndex) *colltab.Table { + return &colltab.Table{ + Index: colltab.Trie{ + Index0: mainLookup[:][blockSize*t.lookupOffset:], + Values0: mainValues[:][blockSize*t.valuesOffset:], + Index: mainLookup[:], + Values: mainValues[:], + }, + ExpandElem: mainExpandElem[:], + ContractTries: colltab.ContractTrieSet(mainCTEntries[:]), + ContractElem: mainContractElem[:], + MaxContractLen: 18, + VariableTop: varTop, + } +} + +// tableIndex holds information for constructing a table +// for a certain locale based on the main table. +type tableIndex struct { + lookupOffset uint32 + valuesOffset uint32 +} diff --git a/vendor/golang.org/x/text/search/pattern.go b/vendor/golang.org/x/text/search/pattern.go new file mode 100644 index 0000000..2497cfd --- /dev/null +++ b/vendor/golang.org/x/text/search/pattern.go @@ -0,0 +1,155 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package search + +import ( + "golang.org/x/text/internal/colltab" +) + +// TODO: handle variable primary weights? + +func (p *Pattern) deleteEmptyElements() { + k := 0 + for _, e := range p.ce { + if !isIgnorable(p.m, e) { + p.ce[k] = e + k++ + } + } + p.ce = p.ce[:k] +} + +func isIgnorable(m *Matcher, e colltab.Elem) bool { + if e.Primary() > 0 { + return false + } + if e.Secondary() > 0 { + if !m.ignoreDiacritics { + return false + } + // Primary value is 0 and ignoreDiacritics is true. In this case we + // ignore the tertiary element, as it only pertains to the modifier. + return true + } + // TODO: further distinguish once we have the new implementation. + if !(m.ignoreWidth || m.ignoreCase) && e.Tertiary() > 0 { + return false + } + // TODO: we ignore the Quaternary level for now. + return true +} + +// TODO: Use a Boyer-Moore-like algorithm (probably Sunday) for searching. + +func (p *Pattern) forwardSearch(it *colltab.Iter) (start, end int) { + for start := 0; it.Next(); it.Reset(start) { + nextStart := it.End() + if end := p.searchOnce(it); end != -1 { + return start, end + } + start = nextStart + } + return -1, -1 +} + +func (p *Pattern) anchoredForwardSearch(it *colltab.Iter) (start, end int) { + if it.Next() { + if end := p.searchOnce(it); end != -1 { + return 0, end + } + } + return -1, -1 +} + +// next advances to the next weight in a pattern. f must return one of the +// weights of a collation element. next will advance to the first non-zero +// weight and return this weight and true if it exists, or 0, false otherwise. +func (p *Pattern) next(i *int, f func(colltab.Elem) int) (weight int, ok bool) { + for *i < len(p.ce) { + v := f(p.ce[*i]) + *i++ + if v != 0 { + // Skip successive ignorable values. + for ; *i < len(p.ce) && f(p.ce[*i]) == 0; *i++ { + } + return v, true + } + } + return 0, false +} + +// TODO: remove this function once Elem is internal and Tertiary returns int. +func tertiary(e colltab.Elem) int { + return int(e.Tertiary()) +} + +// searchOnce tries to match the pattern s.p at the text position i. s.buf needs +// to be filled with collation elements of the first segment, where n is the +// number of source bytes consumed for this segment. It will return the end +// position of the match or -1. +func (p *Pattern) searchOnce(it *colltab.Iter) (end int) { + var pLevel [4]int + + m := p.m + for { + k := 0 + for ; k < it.N; k++ { + if v := it.Elems[k].Primary(); v > 0 { + if w, ok := p.next(&pLevel[0], colltab.Elem.Primary); !ok || v != w { + return -1 + } + } + + if !m.ignoreDiacritics { + if v := it.Elems[k].Secondary(); v > 0 { + if w, ok := p.next(&pLevel[1], colltab.Elem.Secondary); !ok || v != w { + return -1 + } + } + } else if it.Elems[k].Primary() == 0 { + // We ignore tertiary values of collation elements of the + // secondary level. + continue + } + + // TODO: distinguish between case and width. This will be easier to + // implement after we moved to the new collation implementation. + if !m.ignoreWidth && !m.ignoreCase { + if v := it.Elems[k].Tertiary(); v > 0 { + if w, ok := p.next(&pLevel[2], tertiary); !ok || int(v) != w { + return -1 + } + } + } + // TODO: check quaternary weight + } + it.Discard() // Remove the current segment from the buffer. + + // Check for completion. + switch { + // If any of these cases match, we are not at the end. + case pLevel[0] < len(p.ce): + case !m.ignoreDiacritics && pLevel[1] < len(p.ce): + case !(m.ignoreWidth || m.ignoreCase) && pLevel[2] < len(p.ce): + default: + // At this point, both the segment and pattern has matched fully. + // However, the segment may still be have trailing modifiers. + // This can be verified by another call to next. + end = it.End() + if it.Next() && it.Elems[0].Primary() == 0 { + if !m.ignoreDiacritics { + return -1 + } + end = it.End() + } + return end + } + + // Fill the buffer with the next batch of collation elements. + if !it.Next() { + return -1 + } + } +} diff --git a/vendor/golang.org/x/text/search/pattern_test.go b/vendor/golang.org/x/text/search/pattern_test.go new file mode 100644 index 0000000..931fa65 --- /dev/null +++ b/vendor/golang.org/x/text/search/pattern_test.go @@ -0,0 +1,357 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package search + +import ( + "reflect" + "strings" + "testing" + + "golang.org/x/text/language" +) + +func TestCompile(t *testing.T) { + for i, tc := range []struct { + desc string + pattern string + options []Option + n int + }{{ + desc: "empty", + pattern: "", + n: 0, + }, { + desc: "single", + pattern: "a", + n: 1, + }, { + desc: "keep modifier", + pattern: "a\u0300", // U+0300: COMBINING GRAVE ACCENT + n: 2, + }, { + desc: "remove modifier", + pattern: "a\u0300", // U+0300: COMBINING GRAVE ACCENT + options: []Option{IgnoreDiacritics}, + n: 1, + }, { + desc: "single with double collation element", + pattern: "ä", + n: 2, + }, { + desc: "leading variable", + pattern: " a", + n: 2, + }, { + desc: "trailing variable", + pattern: "aa ", + n: 3, + }, { + desc: "leading and trailing variable", + pattern: " äb ", + n: 5, + }, { + desc: "keep interior variable", + pattern: " ä b ", + n: 6, + }, { + desc: "keep interior variables", + pattern: " b ä ", + n: 7, + }, { + desc: "remove ignoreables (zero-weights across the board)", + pattern: "\u009Db\u009Dä\u009D", // U+009D: OPERATING SYSTEM COMMAND + n: 3, + }} { + m := New(language.Und, tc.options...) + p := m.CompileString(tc.pattern) + if len(p.ce) != tc.n { + t.Errorf("%d:%s: Compile(%+q): got %d; want %d", i, tc.desc, tc.pattern, len(p.ce), tc.n) + } + } +} + +func TestNorm(t *testing.T) { + // U+0300: COMBINING GRAVE ACCENT (CCC=230) + // U+031B: COMBINING HORN (CCC=216) + for _, tc := range []struct { + desc string + a string + b string + want bool // a and b compile into the same pattern? + }{{ + "simple", + "eee\u0300\u031b", + "eee\u031b\u0300", + true, + }, { + "large number of modifiers in pattern", + strings.Repeat("\u0300", 29) + "\u0318", + "\u0318" + strings.Repeat("\u0300", 29), + true, + }, { + "modifier overflow in pattern", + strings.Repeat("\u0300", 30) + "\u0318", + "\u0318" + strings.Repeat("\u0300", 30), + false, + }} { + m := New(language.Und) + a := m.CompileString(tc.a) + b := m.CompileString(tc.b) + if got := reflect.DeepEqual(a, b); got != tc.want { + t.Errorf("Compile(a) == Compile(b) == %v; want %v", got, tc.want) + } + } +} + +func TestForwardSearch(t *testing.T) { + for i, tc := range []struct { + desc string + tag string + options []Option + pattern string + text string + want []int + }{{ + // The semantics of an empty search is to match nothing. + // TODO: change this to be in line with strings.Index? It is quite a + // different beast, so not sure yet. + + desc: "empty pattern and text", + tag: "und", + pattern: "", + text: "", + want: nil, // TODO: consider: []int{0, 0}, + }, { + desc: "non-empty pattern and empty text", + tag: "und", + pattern: " ", + text: "", + want: nil, + }, { + desc: "empty pattern and non-empty text", + tag: "und", + pattern: "", + text: "abc", + want: nil, // TODO: consider: []int{0, 0, 1, 1, 2, 2, 3, 3}, + }, { + // Variable-only patterns. We don't support variables at the moment, + // but verify that, given this, the behavior is indeed as expected. + + desc: "exact match of variable", + tag: "und", + pattern: " ", + text: " ", + want: []int{0, 1}, + }, { + desc: "variables not handled by default", + tag: "und", + pattern: "- ", + text: " -", + want: nil, // Would be (1, 2) for a median match with variable}. + }, { + desc: "multiple subsequent identical variables", + tag: "und", + pattern: " ", + text: " ", + want: []int{0, 1, 1, 2, 2, 3, 3, 4}, + }, { + desc: "text with variables", + tag: "und", + options: []Option{IgnoreDiacritics}, + pattern: "abc", + text: "3 abc 3", + want: []int{2, 5}, + }, { + desc: "pattern with interior variables", + tag: "und", + options: []Option{IgnoreDiacritics}, + pattern: "a b c", + text: "3 a b c abc a b c 3", + want: []int{2, 7}, // Would have 3 matches using variable. + + // TODO: Different variable handling settings. + }, { + // Options. + + desc: "match all levels", + tag: "und", + pattern: "Abc", + text: "abcAbcABCÁbcábc", + want: []int{3, 6}, + }, { + desc: "ignore diacritics in text", + tag: "und", + options: []Option{IgnoreDiacritics}, + pattern: "Abc", + text: "Ábc", + want: []int{0, 4}, + }, { + desc: "ignore diacritics in pattern", + tag: "und", + options: []Option{IgnoreDiacritics}, + pattern: "Ábc", + text: "Abc", + want: []int{0, 3}, + }, { + desc: "ignore diacritics", + tag: "und", + options: []Option{IgnoreDiacritics}, + pattern: "Abc", + text: "abcAbcABCÁbcábc", + want: []int{3, 6, 9, 13}, + }, { + desc: "ignore case", + tag: "und", + options: []Option{IgnoreCase}, + pattern: "Abc", + text: "abcAbcABCÁbcábc", + want: []int{0, 3, 3, 6, 6, 9}, + }, { + desc: "ignore case and diacritics", + tag: "und", + options: []Option{IgnoreCase, IgnoreDiacritics}, + pattern: "Abc", + text: "abcAbcABCÁbcábc", + want: []int{0, 3, 3, 6, 6, 9, 9, 13, 13, 17}, + }, { + desc: "ignore width to fullwidth", + tag: "und", + options: []Option{IgnoreWidth}, + pattern: "abc", + text: "123 \uFF41\uFF42\uFF43 123", // U+FF41-3: FULLWIDTH LATIN SMALL LETTER A-C + want: []int{4, 13}, + }, { + // TODO: distinguish between case and width. + desc: "don't ignore width to fullwidth, ignoring only case", + tag: "und", + options: []Option{IgnoreCase}, + pattern: "abc", + text: "123 \uFF41\uFF42\uFF43 123", // U+FF41-3: FULLWIDTH LATIN SMALL LETTER A-C + want: []int{4, 13}, + }, { + desc: "ignore width to fullwidth and diacritics", + tag: "und", + options: []Option{IgnoreWidth, IgnoreDiacritics}, + pattern: "abc", + text: "123 \uFF41\uFF42\uFF43 123", // U+FF41-3: FULLWIDTH LATIN SMALL LETTER A-C + want: []int{4, 13}, + }, { + desc: "whole grapheme, single rune", + tag: "und", + pattern: "eee", + text: "123 eeé 123", + want: nil, + }, { + // Note: rules on when to apply contractions may, for certain languages, + // differ between search and collation. For example, "ch" is not + // considered a contraction for the purpose of searching in Spanish. + // Therefore, be careful picking this test. + desc: "whole grapheme, contractions", + tag: "da", + pattern: "aba", + // Fails at the primary level, because "aa" is a contraction. + text: "123 abaa 123", + want: []int{}, + }, { + desc: "whole grapheme, trailing modifier", + tag: "und", + pattern: "eee", + text: "123 eee\u0300 123", // U+0300: COMBINING GRAVE ACCENT + want: nil, + }, { + // Language-specific matching. + + desc: "", + tag: "da", + options: []Option{IgnoreCase}, + pattern: "Århus", + text: "AarhusÅrhus Århus ", + want: []int{0, 6, 6, 12, 14, 20}, + }, { + desc: "", + tag: "da", + options: []Option{IgnoreCase}, + pattern: "Aarhus", + text: "Århus Aarhus", + want: []int{0, 6, 7, 13}, + }, { + desc: "", + tag: "en", // Å does not match A for English. + options: []Option{IgnoreCase}, + pattern: "Aarhus", + text: "Århus", + want: nil, + }, { + desc: "ignore modifier in text", + options: []Option{IgnoreDiacritics}, + tag: "und", + pattern: "eee", + text: "123 eee\u0300 123", // U+0300: COMBINING GRAVE ACCENT + want: []int{4, 9}, // Matches on grapheme boundary. + }, { + desc: "ignore multiple modifiers in text", + options: []Option{IgnoreDiacritics}, + tag: "und", + pattern: "eee", + text: "123 eee\u0300\u0300 123", // U+0300: COMBINING GRAVE ACCENT + want: []int{4, 11}, // Matches on grapheme boundary. + }, { + desc: "ignore modifier in pattern", + options: []Option{IgnoreDiacritics}, + tag: "und", + pattern: "eee\u0300", // U+0300: COMBINING GRAVE ACCENT + text: "123 eee 123", + want: []int{4, 7}, + }, { + desc: "ignore multiple modifiers in pattern", + options: []Option{IgnoreDiacritics}, + tag: "und", + pattern: "eee\u0300\u0300", // U+0300: COMBINING GRAVE ACCENT + text: "123 eee 123", + want: []int{4, 7}, + }, { + desc: "match non-normalized pattern", + tag: "und", + // U+0300: COMBINING GRAVE ACCENT (CCC=230) + // U+031B: COMBINING HORN (CCC=216) + pattern: "eee\u0300\u031b", + text: "123 eee\u031b\u0300 123", + want: []int{4, 11}, + }, { + desc: "match non-normalized text", + tag: "und", + // U+0300: COMBINING GRAVE ACCENT (CCC=230) + // U+031B: COMBINING HORN (CCC=216) + pattern: "eee\u031b\u0300", + text: "123 eee\u0300\u031b 123", + want: []int{4, 11}, + }} { + m := New(language.MustParse(tc.tag), tc.options...) + p := m.CompileString(tc.pattern) + for j := 0; j < len(tc.text); { + start, end := p.IndexString(tc.text[j:]) + if start == -1 && end == -1 { + j++ + continue + } + start += j + end += j + j = end + if len(tc.want) == 0 { + t.Errorf("%d:%s: found unexpected result [%d %d]", i, tc.desc, start, end) + break + } + if tc.want[0] != start || tc.want[1] != end { + t.Errorf("%d:%s: got [%d %d]; want %v", i, tc.desc, start, end, tc.want[:2]) + tc.want = tc.want[2:] + break + } + tc.want = tc.want[2:] + } + if len(tc.want) != 0 { + t.Errorf("%d:%s: %d extra results", i, tc.desc, len(tc.want)/2) + } + } +} diff --git a/vendor/golang.org/x/text/search/search.go b/vendor/golang.org/x/text/search/search.go new file mode 100644 index 0000000..894b6c6 --- /dev/null +++ b/vendor/golang.org/x/text/search/search.go @@ -0,0 +1,237 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run ../collate/maketables.go -cldr=23 -unicode=6.2.0 -types=search,searchjl -package=search + +// Package search provides language-specific search and string matching. +// +// Natural language matching can be intricate. For example, Danish will insist +// "Århus" and "Aarhus" are the same name and Turkish will match I to ı (note +// the lack of a dot) in a case-insensitive match. This package handles such +// language-specific details. +// +// Text passed to any of the calls in this message does not need to be +// normalized. +package search // import "golang.org/x/text/search" + +import ( + "strings" + + "golang.org/x/text/internal/colltab" + "golang.org/x/text/language" +) + +// An Option configures a Matcher. +type Option func(*Matcher) + +var ( + // WholeWord restricts matches to complete words. The default is to match at + // the character level. + WholeWord Option = nil + + // Exact requires that two strings are their exact equivalent. For example + // å would not match aa in Danish. It overrides any of the ignore options. + Exact Option = nil + + // Loose causes case, diacritics and width to be ignored. + Loose Option = loose + + // IgnoreCase enables case-insensitive search. + IgnoreCase Option = ignoreCase + + // IgnoreDiacritics causes diacritics to be ignored ("ö" == "o"). + IgnoreDiacritics Option = ignoreDiacritics + + // IgnoreWidth equates narrow with wide variants. + IgnoreWidth Option = ignoreWidth +) + +func ignoreDiacritics(m *Matcher) { m.ignoreDiacritics = true } +func ignoreCase(m *Matcher) { m.ignoreCase = true } +func ignoreWidth(m *Matcher) { m.ignoreWidth = true } +func loose(m *Matcher) { + ignoreDiacritics(m) + ignoreCase(m) + ignoreWidth(m) +} + +var ( + // Supported lists the languages for which search differs from its parent. + Supported language.Coverage + + tags []language.Tag +) + +func init() { + ids := strings.Split(availableLocales, ",") + tags = make([]language.Tag, len(ids)) + for i, s := range ids { + tags[i] = language.Raw.MustParse(s) + } + Supported = language.NewCoverage(tags) +} + +// New returns a new Matcher for the given language and options. +func New(t language.Tag, opts ...Option) *Matcher { + m := &Matcher{ + w: getTable(locales[colltab.MatchLang(t, tags)]), + } + for _, f := range opts { + f(m) + } + return m +} + +// A Matcher implements language-specific string matching. +type Matcher struct { + w colltab.Weighter + ignoreCase bool + ignoreWidth bool + ignoreDiacritics bool +} + +// An IndexOption specifies how the Index methods of Pattern or Matcher should +// match the input. +type IndexOption byte + +const ( + // Anchor restricts the search to the start (or end for Backwards) of the + // text. + Anchor IndexOption = 1 << iota + + // Backwards starts the search from the end of the text. + Backwards + + anchorBackwards = Anchor | Backwards +) + +// Index reports the start and end position of the first occurrence of pat in b +// or -1, -1 if pat is not present. +func (m *Matcher) Index(b, pat []byte, opts ...IndexOption) (start, end int) { + // TODO: implement optimized version that does not use a pattern. + return m.Compile(pat).Index(b, opts...) +} + +// IndexString reports the start and end position of the first occurrence of pat +// in s or -1, -1 if pat is not present. +func (m *Matcher) IndexString(s, pat string, opts ...IndexOption) (start, end int) { + // TODO: implement optimized version that does not use a pattern. + return m.CompileString(pat).IndexString(s, opts...) +} + +// Equal reports whether a and b are equivalent. +func (m *Matcher) Equal(a, b []byte) bool { + _, end := m.Index(a, b, Anchor) + return end == len(a) +} + +// EqualString reports whether a and b are equivalent. +func (m *Matcher) EqualString(a, b string) bool { + _, end := m.IndexString(a, b, Anchor) + return end == len(a) +} + +// Compile compiles and returns a pattern that can be used for faster searching. +func (m *Matcher) Compile(b []byte) *Pattern { + p := &Pattern{m: m} + iter := colltab.Iter{Weighter: m.w} + for iter.SetInput(b); iter.Next(); { + } + p.ce = iter.Elems + p.deleteEmptyElements() + return p +} + +// CompileString compiles and returns a pattern that can be used for faster +// searching. +func (m *Matcher) CompileString(s string) *Pattern { + p := &Pattern{m: m} + iter := colltab.Iter{Weighter: m.w} + for iter.SetInputString(s); iter.Next(); { + } + p.ce = iter.Elems + p.deleteEmptyElements() + return p +} + +// A Pattern is a compiled search string. It is safe for concurrent use. +type Pattern struct { + m *Matcher + ce []colltab.Elem +} + +// Design note (TODO remove): +// The cost of retrieving collation elements for each rune, which is used for +// search as well, is not trivial. Also, algorithms like Boyer-Moore and +// Sunday require some additional precomputing. + +// Index reports the start and end position of the first occurrence of p in b +// or -1, -1 if p is not present. +func (p *Pattern) Index(b []byte, opts ...IndexOption) (start, end int) { + // Pick a large enough buffer such that we likely do not need to allocate + // and small enough to not cause too much overhead initializing. + var buf [8]colltab.Elem + + it := &colltab.Iter{ + Weighter: p.m.w, + Elems: buf[:0], + } + it.SetInput(b) + + var optMask IndexOption + for _, o := range opts { + optMask |= o + } + + switch optMask { + case 0: + return p.forwardSearch(it) + case Anchor: + return p.anchoredForwardSearch(it) + case Backwards, anchorBackwards: + panic("TODO: implement") + default: + panic("unrecognized option") + } +} + +// IndexString reports the start and end position of the first occurrence of p +// in s or -1, -1 if p is not present. +func (p *Pattern) IndexString(s string, opts ...IndexOption) (start, end int) { + // Pick a large enough buffer such that we likely do not need to allocate + // and small enough to not cause too much overhead initializing. + var buf [8]colltab.Elem + + it := &colltab.Iter{ + Weighter: p.m.w, + Elems: buf[:0], + } + it.SetInputString(s) + + var optMask IndexOption + for _, o := range opts { + optMask |= o + } + + switch optMask { + case 0: + return p.forwardSearch(it) + case Anchor: + return p.anchoredForwardSearch(it) + case Backwards, anchorBackwards: + panic("TODO: implement") + default: + panic("unrecognized option") + } +} + +// TODO: +// - Maybe IndexAll methods (probably not necessary). +// - Some way to match patterns in a Reader (a bit tricky). +// - Some fold transformer that folds text to comparable text, based on the +// search options. This is a common technique, though very different from the +// collation-based design of this package. It has a somewhat different use +// case, so probably makes sense to support both. Should probably be in a +// different package, though, as it uses completely different kind of tables +// (based on norm, cases, width and range tables.) diff --git a/vendor/golang.org/x/text/search/tables.go b/vendor/golang.org/x/text/search/tables.go new file mode 100644 index 0000000..72d27b5 --- /dev/null +++ b/vendor/golang.org/x/text/search/tables.go @@ -0,0 +1,12448 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package search + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "6.2.0" + +// CLDRVersion is the CLDR version from which the tables in this package are derived. +const CLDRVersion = "23" + +var availableLocales = "und,az,bs,ca,cs,da,de,en,en-US,es,fi,fo,fr,he,hr,is,kl,ko,ko-u-co-searchjl,nb,nn,se,sk,sr-Latn,sv,tr" + +const varTop = 0x30e + +var locales = [...]tableIndex{ + { // und + lookupOffset: 0x1a, + valuesOffset: 0x1b4, + }, + { // az + lookupOffset: 0x20, + valuesOffset: 0x1c8, + }, + { // bs + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // ca + lookupOffset: 0x21, + valuesOffset: 0x1da, + }, + { // cs + lookupOffset: 0x23, + valuesOffset: 0x1de, + }, + { // da + lookupOffset: 0x26, + valuesOffset: 0x1e8, + }, + { // de + lookupOffset: 0x28, + valuesOffset: 0x1f2, + }, + { // en + lookupOffset: 0x1a, + valuesOffset: 0x1b4, + }, + { // en-US + lookupOffset: 0x1a, + valuesOffset: 0x1b4, + }, + { // es + lookupOffset: 0x29, + valuesOffset: 0x1f8, + }, + { // fi + lookupOffset: 0x2f, + valuesOffset: 0x1fb, + }, + { // fo + lookupOffset: 0x26, + valuesOffset: 0x1e8, + }, + { // fr + lookupOffset: 0x1a, + valuesOffset: 0x1b4, + }, + { // he + lookupOffset: 0x31, + valuesOffset: 0x20b, + }, + { // hr + lookupOffset: 0x33, + valuesOffset: 0x210, + }, + { // is + lookupOffset: 0x35, + valuesOffset: 0x217, + }, + { // kl + lookupOffset: 0x36, + valuesOffset: 0x221, + }, + { // ko + lookupOffset: 0x38, + valuesOffset: 0x1b4, + }, + { // ko-u-co-searchjl + lookupOffset: 0x3b, + valuesOffset: 0x0, + }, + { // nb + lookupOffset: 0x26, + valuesOffset: 0x22f, + }, + { // nn + lookupOffset: 0x26, + valuesOffset: 0x22f, + }, + { // se + lookupOffset: 0x3e, + valuesOffset: 0x231, + }, + { // sk + lookupOffset: 0x40, + valuesOffset: 0x23d, + }, + { // sr-Latn + lookupOffset: 0x15, + valuesOffset: 0x0, + }, + { // sv + lookupOffset: 0x42, + valuesOffset: 0x244, + }, + { // tr + lookupOffset: 0x48, + valuesOffset: 0x24c, + }, +} + +// mainExpandElem: 10841 entries, 43364 bytes +var mainExpandElem = [10841]uint32{ + // Block 0, offset 0x0 + 0x00000002, 0xAE604702, 0xAE603202, 0x00000002, 0xA000A51A, 0xA000BA1A, + 0x00000002, 0xA000A91A, 0xA000BA1A, 0x00000002, 0xA000AD1A, 0xA000BA1A, + 0x00000002, 0xA000B21A, 0xA000BA1A, 0x00000002, 0xA000B61A, 0xA000BA1A, + 0x00000002, 0xA000BA1A, 0xA000D11A, 0x00000004, 0x0003F484, 0x0029CE84, + 0x0029CC84, 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, 0x0029CE84, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, 0x0029D084, 0x0003F69F, + 0x00000004, 0x0003F484, 0x0029CE84, 0x0029D284, 0x0003F69F, 0x00000004, + 0x0003F484, 0x0029CE84, 0x0029D484, 0x0003F69F, 0x00000004, 0x0003F484, + 0x0029CE84, 0x0029D684, 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, + 0x0029D884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, 0x0029DA84, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, + // Block 1, offset 0x40 + 0x0029DC84, 0x0003F69F, 0x00000004, 0x0003F484, 0x0029CE84, 0x0029DE84, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0029D084, 0x0029CC84, 0x0003F69F, + 0x00000004, 0x0003F484, 0x0062AC84, 0x0063A884, 0x0003F69F, 0x00000004, + 0x0003F484, 0x0062B084, 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, + 0x0062B284, 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062B684, + 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062B884, 0x0063A884, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0062BA84, 0x0063A884, 0x0003F69F, + 0x00000004, 0x0003F484, 0x0062BE84, 0x0063A884, 0x0003F69F, 0x00000004, + 0x0003F484, 0x0062C284, 0x0063A884, 0x0003F69F, 0x00000007, 0x0003F484, + 0x0062C284, 0x0063B884, 0x0062C484, 0x0063B084, 0x00646A84, 0x0003F69F, + 0x00000006, 0x0003F484, 0x0062C284, 0x0063B884, + // Block 2, offset 0x80 + 0x0062D084, 0x0063C284, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062C484, + 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062C484, 0x0063C284, + 0x0003F69F, 0x00000004, 0x0003F484, 0x0062C884, 0x0063A884, 0x0003F69F, + 0x00000004, 0x0003F484, 0x0062CA84, 0x0063A884, 0x0003F69F, 0x00000004, + 0x0003F484, 0x0062CC84, 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, + 0x0062CE84, 0x0063A884, 0x0003F69F, 0x00000004, 0x0003F484, 0x0062D084, + 0x0063A884, 0x0003F69F, 0x00000004, 0x00050E84, 0x00050E84, 0x00050E84, + 0x00050E9F, 0x00000002, 0x40062C20, 0xAE603202, 0x00000002, 0x40062C20, + 0xAE603502, 0x00000002, 0x40062C20, 0xAE604502, 0x00000002, 0x40063620, + 0xAE603202, 0x00000002, 0x40063620, 0xAE603502, 0x00000002, 0x40063620, + 0xAE604502, 0x00000002, 0x40063820, 0xAE603202, + // Block 3, offset 0xc0 + 0x00000002, 0x40063820, 0xAE603502, 0x00000002, 0x40063820, 0xAE604502, + 0x00000002, 0x40084420, 0xA0105402, 0x00000002, 0x40084620, 0xA0105402, + 0x00000002, 0x40084C20, 0xA0105402, 0x00000002, 0x4008B820, 0xA0105402, + 0x00000002, 0x4008BC20, 0xA0105402, 0x00000002, 0x4008C020, 0xA0105402, + 0x00000002, 0x40091E20, 0xA0105402, 0x00000002, 0x40092620, 0xA0105402, + 0x00000002, 0x40092A20, 0xA0105402, 0x00000002, 0x40094020, 0xA0105402, + 0x00000002, 0x40094220, 0xA0105402, 0x00000002, 0x40094420, 0xA0105402, + 0x00000002, 0x40097820, 0xA0105402, 0x00000002, 0x40097A20, 0xA0105402, + 0x00000004, 0x00098484, 0x00098484, 0x00098484, 0x0009849F, 0x00000002, + 0x40099E20, 0xA0105402, 0x00000002, 0x4009AA20, 0xA0105402, 0x00000002, + 0x4009AC20, 0xA0105402, 0x00000002, 0x4009B020, + // Block 4, offset 0x100 + 0xA0105402, 0x00000002, 0x4009B820, 0xA0105402, 0x00000002, 0x4009DE20, + 0xA0105402, 0x00000002, 0x4009E220, 0xA0105402, 0x00000002, 0x4009E420, + 0xA0105402, 0x00000002, 0x4009F420, 0xA0105402, 0x00000002, 0x4009F620, + 0xA0105402, 0x00000002, 0x4009F820, 0xA0105402, 0x00000002, 0x4009FA20, + 0xA0105402, 0x00000002, 0x4009FC20, 0xA0105402, 0x00000002, 0x4009FE20, + 0xA0105402, 0x00000002, 0x400A0020, 0xA0105402, 0x00000002, 0x400A0220, + 0xA0105402, 0x00000002, 0x400A0820, 0xA0105402, 0x00000002, 0x400A0A20, + 0xA0105402, 0x00000002, 0x400A0C20, 0xA0105402, 0x00000002, 0x400A0E20, + 0xA0105402, 0x00000002, 0x400A1E20, 0xA0105402, 0x00000002, 0x400A2020, + 0xA0105402, 0x00000002, 0x400A4020, 0xA0105402, 0x00000002, 0x400A4C20, + 0xA0105402, 0x00000002, 0x400A4E20, 0xA0105402, + // Block 5, offset 0x140 + 0x00000002, 0x400A5220, 0xA0105402, 0x00000002, 0x400A5820, 0xA0105402, + 0x00000002, 0x400A5A20, 0xA0105402, 0x00000002, 0x400A5C20, 0xA0105402, + 0x00000002, 0x400A5E20, 0xA0105402, 0x00000002, 0x40164620, 0xA0105402, + 0x00000002, 0x4027CE20, 0xA0012802, 0x00000002, 0x4027D020, 0xA0012802, + 0x00000002, 0x4027D420, 0xA0812802, 0x00000002, 0x4027D820, 0xA0812802, + 0x00000002, 0x4029CC20, 0xA0013F02, 0x00000002, 0x4029CC20, 0xA0014002, + 0x00000002, 0x4029CC20, 0xA0014202, 0x00000002, 0x4029CC20, 0xA0014402, + 0x00000002, 0x4029CC20, 0xA0014502, 0x00000002, 0x4029CC20, 0xA0014602, + 0x00000002, 0x4029CC20, 0xA0014702, 0x00000002, 0x4029CC20, 0xA0014802, + 0x00000002, 0x4029CC20, 0xA0014902, 0x00000002, 0x4029CC20, 0xA0014A02, + 0x00000002, 0x4029CC20, 0xA0014B02, 0x00000002, + // Block 6, offset 0x180 + 0x4029CC20, 0xA0014B02, 0x00000002, 0x4029CC20, 0xA0014C02, 0x00000002, + 0x4029CC20, 0xA0014D02, 0x00000002, 0x4029CC20, 0xA0014E02, 0x00000002, + 0x4029CC20, 0xA0014F02, 0x00000002, 0x4029CC20, 0xA0015002, 0x00000002, + 0x4029CC20, 0xA0015102, 0x00000002, 0x4029CC20, 0xA0015202, 0x00000002, + 0x4029CC20, 0xA0015302, 0x00000002, 0x4029CC20, 0xA0015402, 0x00000002, + 0x4029CC20, 0xA0015502, 0x00000002, 0x4029CC20, 0xA0015602, 0x00000002, + 0x0029CC84, 0xA0015604, 0x00000002, 0x4029CC20, 0xA0015702, 0x00000002, + 0x4029CC20, 0xA0015802, 0x00000002, 0x4029CC20, 0xA0015902, 0x00000002, + 0x4029CC20, 0xA0015A02, 0x00000002, 0x4029CC20, 0xA0015B02, 0x00000002, + 0x4029CC20, 0xA0015C02, 0x00000002, 0x4029CC20, 0xA0015D02, 0x00000002, + 0x4029CC20, 0xA0015E02, 0x00000002, 0x4029CC20, + // Block 7, offset 0x1c0 + 0xA0015F02, 0x00000002, 0x4029CC20, 0xA0016002, 0x00000002, 0x4029CC20, + 0xA0016102, 0x00000002, 0x4029CC20, 0xA0016202, 0x00000002, 0x4029CC20, + 0xA0016302, 0x00000002, 0x4029CC20, 0xA0016402, 0x00000002, 0x4029CC20, + 0xA0016502, 0x00000002, 0x4029CC20, 0xA0016602, 0x00000002, 0x4029CC20, + 0xA0016802, 0x00000002, 0x4029CC20, 0xA0017202, 0x00000002, 0x4029CC20, + 0xA0017302, 0x00000002, 0x4029CC20, 0xA0017402, 0x00000003, 0x0029CC9E, + 0x0009589E, 0x0029D29E, 0x00000002, 0x4029CE20, 0xA0013F02, 0x00000002, + 0x4029CE20, 0xA0014002, 0x00000002, 0x4029CE20, 0xA0014102, 0x00000002, + 0x4029CE20, 0xA0014202, 0x00000002, 0x4029CE20, 0xA0014302, 0x00000002, + 0x4029CE20, 0xA0014402, 0x00000002, 0x4029CE20, 0xA0014502, 0x00000002, + 0x4029CE20, 0xA0014602, 0x00000002, 0x4029CE20, + // Block 8, offset 0x200 + 0xA0014702, 0x00000002, 0x4029CE20, 0xA0014802, 0x00000002, 0x4029CE20, + 0xA0014902, 0x00000002, 0x4029CE20, 0xA0014A02, 0x00000002, 0x4029CE20, + 0xA0014B02, 0x00000002, 0x4029CE20, 0xA0014B02, 0x00000002, 0x4029CE20, + 0xA0014B02, 0x00000002, 0x4029CE20, 0xA0014C02, 0x00000002, 0x4029CE20, + 0xA0014D02, 0x00000002, 0x4029CE20, 0xA0014E02, 0x00000002, 0x4029CE20, + 0xA0014F02, 0x00000002, 0x4029CE20, 0xA0015002, 0x00000002, 0x4029CE20, + 0xA0015102, 0x00000002, 0x4029CE20, 0xA0015102, 0x00000002, 0x4029CE20, + 0xA0015202, 0x00000002, 0x4029CE20, 0xA0015302, 0x00000002, 0x4029CE20, + 0xA0015402, 0x00000002, 0x4029CE20, 0xA0015502, 0x00000002, 0x4029CE20, + 0xA0015602, 0x00000002, 0x0029CE84, 0xA0015604, 0x00000002, 0x4029CE20, + 0xA0015702, 0x00000002, 0x4029CE20, 0xA0015802, + // Block 9, offset 0x240 + 0x00000002, 0x4029CE20, 0xA0015902, 0x00000002, 0x4029CE20, 0xA0015A02, + 0x00000002, 0x4029CE20, 0xA0015B02, 0x00000002, 0x4029CE20, 0xA0015C02, + 0x00000002, 0x4029CE20, 0xA0015D02, 0x00000002, 0x4029CE20, 0xA0015E02, + 0x00000002, 0x4029CE20, 0xA0015F02, 0x00000002, 0x4029CE20, 0xA0016002, + 0x00000002, 0x4029CE20, 0xA0016102, 0x00000002, 0x4029CE20, 0xA0016202, + 0x00000002, 0x4029CE20, 0xA0016302, 0x00000002, 0x4029CE20, 0xA0016402, + 0x00000002, 0x4029CE20, 0xA0016502, 0x00000002, 0x4029CE20, 0xA0016602, + 0x00000002, 0x4029CE20, 0xA0016702, 0x00000002, 0x4029CE20, 0xA0016802, + 0x00000002, 0x4029CE20, 0xA0016802, 0x00000002, 0x4029CE20, 0xA0016802, + 0x00000002, 0x4029CE20, 0xA0016802, 0x00000002, 0x4029CE20, 0xA0016A02, + 0x00000002, 0x4029CE20, 0xA0016B02, 0x00000002, + // Block 10, offset 0x280 + 0x4029CE20, 0xA0016C02, 0x00000002, 0x4029CE20, 0xA0016C02, 0x00000002, + 0x4029CE20, 0xA0016C02, 0x00000002, 0x4029CE20, 0xA0016C02, 0x00000002, + 0x4029CE20, 0xA0016C02, 0x00000002, 0x4029CE20, 0xA0016C02, 0x00000002, + 0x4029CE20, 0xA0016D02, 0x00000002, 0x4029CE20, 0xA0016E02, 0x00000002, + 0x4029CE20, 0xA0016F02, 0x00000002, 0x4029CE20, 0xA0017002, 0x00000002, + 0x4029CE20, 0xA0017102, 0x00000002, 0x4029CE20, 0xA0017202, 0x00000002, + 0x4029CE20, 0xA0017302, 0x00000002, 0x4029CE20, 0xA0017402, 0x00000002, + 0x4029CE20, 0xA0017502, 0x00000002, 0x4029CE20, 0xA0017602, 0x00000002, + 0x4029CE20, 0xA0017702, 0x00000004, 0x0029CE9E, 0x0009589E, 0x0029CE9E, + 0x0029CC9E, 0x00000003, 0x0029CE9E, 0x0009589E, 0x0029D09E, 0x00000003, + 0x0029CE9E, 0x0009589E, 0x0029D29E, 0x00000003, + // Block 11, offset 0x2c0 + 0x0029CE9E, 0x0009589E, 0x0029D49E, 0x00000003, 0x0029CE9E, 0x0009589E, + 0x0029D69E, 0x00000003, 0x0029CE9E, 0x0009589E, 0x0029D89E, 0x00000003, + 0x0029CE9E, 0x0009589E, 0x0029DA9E, 0x00000003, 0x0029CE9E, 0x0009589E, + 0x0029DC9E, 0x00000003, 0x0029CE9E, 0x0009589E, 0x0029DE9E, 0x00000002, + 0x0029CE86, 0x0029CC86, 0x00000002, 0x0029CE86, 0x0029CC86, 0x00000002, + 0x0029CE86, 0x0029CC86, 0x00000002, 0x0029CE86, 0x0029CC86, 0x00000002, + 0x0029CE86, 0x0029CC86, 0x00000002, 0x0029CE86, 0x0029CE86, 0x00000002, + 0x0029CE86, 0x0029D086, 0x00000002, 0x0029CE86, 0x0029D286, 0x00000002, + 0x0029CE86, 0x0029D486, 0x00000002, 0x0029CE86, 0x0029D686, 0x00000002, + 0x0029CE86, 0x0029D886, 0x00000002, 0x0029CE86, 0x0029DA86, 0x00000002, + 0x0029CE86, 0x0029DC86, 0x00000002, 0x0029CE86, + // Block 12, offset 0x300 + 0x0029DE86, 0x00000002, 0x4029D020, 0xA0013F02, 0x00000002, 0x4029D020, + 0xA0014002, 0x00000002, 0x4029D020, 0xA0014102, 0x00000002, 0x4029D020, + 0xA0014202, 0x00000002, 0x4029D020, 0xA0014302, 0x00000002, 0x4029D020, + 0xA0014402, 0x00000002, 0x4029D020, 0xA0014502, 0x00000002, 0x4029D020, + 0xA0014602, 0x00000002, 0x4029D020, 0xA0014702, 0x00000002, 0x4029D020, + 0xA0014802, 0x00000002, 0x4029D020, 0xA0014902, 0x00000002, 0x4029D020, + 0xA0014A02, 0x00000002, 0x4029D020, 0xA0014B02, 0x00000002, 0x4029D020, + 0xA0014B02, 0x00000002, 0x4029D020, 0xA0014B02, 0x00000002, 0x4029D020, + 0xA0014C02, 0x00000002, 0x4029D020, 0xA0014D02, 0x00000002, 0x4029D020, + 0xA0014E02, 0x00000002, 0x4029D020, 0xA0014F02, 0x00000002, 0x4029D020, + 0xA0015002, 0x00000002, 0x4029D020, 0xA0015102, + // Block 13, offset 0x340 + 0x00000002, 0x4029D020, 0xA0015202, 0x00000002, 0x4029D020, 0xA0015302, + 0x00000002, 0x4029D020, 0xA0015402, 0x00000002, 0x4029D020, 0xA0015502, + 0x00000002, 0x4029D020, 0xA0015602, 0x00000002, 0x0029D084, 0xA0015604, + 0x00000002, 0x4029D020, 0xA0015702, 0x00000002, 0x4029D020, 0xA0015802, + 0x00000002, 0x4029D020, 0xA0015902, 0x00000002, 0x4029D020, 0xA0015A02, + 0x00000002, 0x4029D020, 0xA0015B02, 0x00000002, 0x4029D020, 0xA0015C02, + 0x00000002, 0x4029D020, 0xA0015D02, 0x00000002, 0x4029D020, 0xA0015E02, + 0x00000002, 0x4029D020, 0xA0015F02, 0x00000002, 0x4029D020, 0xA0016002, + 0x00000002, 0x4029D020, 0xA0016102, 0x00000002, 0x4029D020, 0xA0016202, + 0x00000002, 0x4029D020, 0xA0016302, 0x00000002, 0x4029D020, 0xA0016402, + 0x00000002, 0x4029D020, 0xA0016502, 0x00000002, + // Block 14, offset 0x380 + 0x4029D020, 0xA0016602, 0x00000002, 0x4029D020, 0xA0016702, 0x00000002, + 0x4029D020, 0xA0016802, 0x00000002, 0x4029D020, 0xA0016802, 0x00000002, + 0x4029D020, 0xA0016802, 0x00000002, 0x4029D020, 0xA0016802, 0x00000002, + 0x4029D020, 0xA0016B02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016C02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016C02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016C02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016C02, 0x00000002, 0x4029D020, 0xA0016C02, 0x00000002, + 0x4029D020, 0xA0016E02, 0x00000002, 0x4029D020, 0xA0016F02, 0x00000002, + 0x4029D020, 0xA0017002, 0x00000002, 0x4029D020, 0xA0017102, 0x00000002, + 0x4029D020, 0xA0017202, 0x00000002, 0x4029D020, + // Block 15, offset 0x3c0 + 0xA0017302, 0x00000002, 0x4029D020, 0xA0017402, 0x00000002, 0x4029D020, + 0xA0017502, 0x00000002, 0x4029D020, 0xA0017602, 0x00000002, 0x4029D020, + 0xA0017702, 0x00000003, 0x0029D09E, 0x0009589E, 0x0029D29E, 0x00000003, + 0x0029D09E, 0x0009589E, 0x0029D69E, 0x00000002, 0x0029D086, 0x0029CC86, + 0x00000002, 0x0029D086, 0x0029CC86, 0x00000002, 0x4029D220, 0xA0013F02, + 0x00000002, 0x4029D220, 0xA0014002, 0x00000002, 0x4029D220, 0xA0014102, + 0x00000002, 0x4029D220, 0xA0014202, 0x00000002, 0x4029D220, 0xA0014302, + 0x00000002, 0x4029D220, 0xA0014402, 0x00000002, 0x4029D220, 0xA0014502, + 0x00000002, 0x4029D220, 0xA0014602, 0x00000002, 0x4029D220, 0xA0014702, + 0x00000002, 0x4029D220, 0xA0014802, 0x00000002, 0x4029D220, 0xA0014902, + 0x00000002, 0x4029D220, 0xA0014A02, 0x00000002, + // Block 16, offset 0x400 + 0x4029D220, 0xA0014B02, 0x00000002, 0x4029D220, 0xA0014B02, 0x00000002, + 0x4029D220, 0xA0014B02, 0x00000002, 0x4029D220, 0xA0014C02, 0x00000002, + 0x4029D220, 0xA0014D02, 0x00000002, 0x4029D220, 0xA0014E02, 0x00000002, + 0x4029D220, 0xA0014F02, 0x00000002, 0x4029D220, 0xA0015002, 0x00000002, + 0x4029D220, 0xA0015102, 0x00000002, 0x4029D220, 0xA0015202, 0x00000002, + 0x4029D220, 0xA0015302, 0x00000002, 0x4029D220, 0xA0015402, 0x00000002, + 0x4029D220, 0xA0015502, 0x00000002, 0x4029D220, 0xA0015602, 0x00000002, + 0x0029D284, 0xA0015604, 0x00000002, 0x4029D220, 0xA0015702, 0x00000002, + 0x4029D220, 0xA0015802, 0x00000002, 0x4029D220, 0xA0015902, 0x00000002, + 0x4029D220, 0xA0015A02, 0x00000002, 0x4029D220, 0xA0015B02, 0x00000002, + 0x4029D220, 0xA0015C02, 0x00000002, 0x4029D220, + // Block 17, offset 0x440 + 0xA0015D02, 0x00000002, 0x4029D220, 0xA0015E02, 0x00000002, 0x4029D220, + 0xA0015F02, 0x00000002, 0x4029D220, 0xA0016002, 0x00000002, 0x4029D220, + 0xA0016102, 0x00000002, 0x4029D220, 0xA0016202, 0x00000002, 0x4029D220, + 0xA0016302, 0x00000002, 0x4029D220, 0xA0016402, 0x00000002, 0x4029D220, + 0xA0016502, 0x00000002, 0x4029D220, 0xA0016602, 0x00000002, 0x4029D220, + 0xA0016702, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, + 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, + // Block 18, offset 0x480 + 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016C02, + 0x00000002, 0x4029D220, 0xA0016C02, 0x00000002, 0x4029D220, 0xA0016E02, + 0x00000002, 0x4029D220, 0xA0016F02, 0x00000002, 0x4029D220, 0xA0017002, + 0x00000002, 0x4029D220, 0xA0017102, 0x00000002, 0x4029D220, 0xA0017202, + 0x00000002, 0x4029D220, 0xA0017302, 0x00000002, 0x4029D220, 0xA0017402, + 0x00000002, 0x4029D220, 0xA0017502, 0x00000002, 0x4029D220, 0xA0017602, + 0x00000002, 0x4029D220, 0xA0017702, 0x00000003, 0x0029D29E, 0x0009589E, + 0x0029D49E, 0x00000003, 0x0029D29E, 0x0009589E, 0x0029D69E, 0x00000003, + 0x0029D29E, 0x0009589E, 0x0029DC9E, 0x00000002, 0x0029D286, 0x0029CC86, + 0x00000002, 0x4029D420, 0xA0013F02, 0x00000002, 0x4029D420, 0xA0014002, + 0x00000002, 0x4029D420, 0xA0014102, 0x00000002, + // Block 19, offset 0x4c0 + 0x4029D420, 0xA0014202, 0x00000002, 0x4029D420, 0xA0014302, 0x00000002, + 0x4029D420, 0xA0014402, 0x00000002, 0x4029D420, 0xA0014502, 0x00000002, + 0x4029D420, 0xA0014602, 0x00000002, 0x4029D420, 0xA0014702, 0x00000002, + 0x4029D420, 0xA0014802, 0x00000002, 0x4029D420, 0xA0014902, 0x00000002, + 0x4029D420, 0xA0014A02, 0x00000002, 0x4029D420, 0xA0014B02, 0x00000002, + 0x4029D420, 0xA0014C02, 0x00000002, 0x4029D420, 0xA0014D02, 0x00000002, + 0x4029D420, 0xA0014E02, 0x00000002, 0x4029D420, 0xA0014F02, 0x00000002, + 0x4029D420, 0xA0015002, 0x00000002, 0x4029D420, 0xA0015102, 0x00000002, + 0x4029D420, 0xA0015202, 0x00000002, 0x4029D420, 0xA0015302, 0x00000002, + 0x4029D420, 0xA0015402, 0x00000002, 0x4029D420, 0xA0015502, 0x00000002, + 0x4029D420, 0xA0015602, 0x00000002, 0x0029D484, + // Block 20, offset 0x500 + 0xA0015604, 0x00000002, 0x4029D420, 0xA0015702, 0x00000002, 0x4029D420, + 0xA0015802, 0x00000002, 0x4029D420, 0xA0015902, 0x00000002, 0x4029D420, + 0xA0015A02, 0x00000002, 0x4029D420, 0xA0015B02, 0x00000002, 0x4029D420, + 0xA0015C02, 0x00000002, 0x4029D420, 0xA0015D02, 0x00000002, 0x4029D420, + 0xA0015E02, 0x00000002, 0x4029D420, 0xA0015F02, 0x00000002, 0x4029D420, + 0xA0016002, 0x00000002, 0x4029D420, 0xA0016102, 0x00000002, 0x4029D420, + 0xA0016202, 0x00000002, 0x4029D420, 0xA0016302, 0x00000002, 0x4029D420, + 0xA0016402, 0x00000002, 0x4029D420, 0xA0016502, 0x00000002, 0x4029D420, + 0xA0016602, 0x00000002, 0x4029D420, 0xA0016702, 0x00000002, 0x4029D420, + 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, + 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + // Block 21, offset 0x540 + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0016C02, + 0x00000002, 0x4029D420, 0xA0016C02, 0x00000002, 0x4029D420, 0xA0017002, + 0x00000002, 0x4029D420, 0xA0017102, 0x00000002, 0x4029D420, 0xA0017202, + 0x00000002, 0x4029D420, 0xA0017302, 0x00000002, 0x4029D420, 0xA0017402, + 0x00000002, 0x4029D420, 0xA0017502, 0x00000002, 0x4029D420, 0xA0017602, + 0x00000002, 0x4029D420, 0xA0017702, 0x00000003, 0x0029D49E, 0x0009589E, + 0x0029D69E, 0x00000002, 0x0029D486, 0x0029CC86, + // Block 22, offset 0x580 + 0x00000002, 0x4029D620, 0xA0013F02, 0x00000002, 0x4029D620, 0xA0014002, + 0x00000002, 0x4029D620, 0xA0014102, 0x00000002, 0x4029D620, 0xA0014202, + 0x00000002, 0x4029D620, 0xA0014302, 0x00000002, 0x4029D620, 0xA0014402, + 0x00000002, 0x4029D620, 0xA0014502, 0x00000002, 0x4029D620, 0xA0014602, + 0x00000002, 0x4029D620, 0xA0014702, 0x00000002, 0x4029D620, 0xA0014802, + 0x00000002, 0x4029D620, 0xA0014902, 0x00000002, 0x4029D620, 0xA0014A02, + 0x00000002, 0x4029D620, 0xA0014B02, 0x00000002, 0x4029D620, 0xA0014C02, + 0x00000002, 0x4029D620, 0xA0014D02, 0x00000002, 0x4029D620, 0xA0014E02, + 0x00000002, 0x4029D620, 0xA0014F02, 0x00000002, 0x4029D620, 0xA0015002, + 0x00000002, 0x4029D620, 0xA0015102, 0x00000002, 0x4029D620, 0xA0015202, + 0x00000002, 0x4029D620, 0xA0015302, 0x00000002, + // Block 23, offset 0x5c0 + 0x4029D620, 0xA0015402, 0x00000002, 0x4029D620, 0xA0015502, 0x00000002, + 0x4029D620, 0xA0015602, 0x00000002, 0x0029D684, 0xA0015604, 0x00000002, + 0x4029D620, 0xA0015702, 0x00000002, 0x4029D620, 0xA0015802, 0x00000002, + 0x4029D620, 0xA0015902, 0x00000002, 0x4029D620, 0xA0015A02, 0x00000002, + 0x4029D620, 0xA0015B02, 0x00000002, 0x4029D620, 0xA0015C02, 0x00000002, + 0x4029D620, 0xA0015D02, 0x00000002, 0x4029D620, 0xA0015E02, 0x00000002, + 0x4029D620, 0xA0015F02, 0x00000002, 0x4029D620, 0xA0016002, 0x00000002, + 0x4029D620, 0xA0016102, 0x00000002, 0x4029D620, 0xA0016202, 0x00000002, + 0x4029D620, 0xA0016302, 0x00000002, 0x4029D620, 0xA0016402, 0x00000002, + 0x4029D620, 0xA0016502, 0x00000002, 0x4029D620, 0xA0016602, 0x00000002, + 0x4029D620, 0xA0016702, 0x00000002, 0x4029D620, + // Block 24, offset 0x600 + 0xA0016802, 0x00000002, 0x4029D620, 0xA0016802, 0x00000002, 0x4029D620, + 0xA0016802, 0x00000002, 0x4029D620, 0xA0016802, 0x00000002, 0x4029D620, + 0xA0016802, 0x00000002, 0x4029D620, 0xA0016A02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0016C02, 0x00000002, 0x4029D620, + 0xA0016C02, 0x00000002, 0x4029D620, 0xA0017202, 0x00000002, 0x4029D620, + 0xA0017302, 0x00000002, 0x4029D620, 0xA0017402, 0x00000002, 0x4029D620, + 0xA0017502, 0x00000002, 0x4029D620, 0xA0017702, + // Block 25, offset 0x640 + 0x00000003, 0x0029D69E, 0x0009589E, 0x0029D89E, 0x00000003, 0x0029D69E, + 0x0009589E, 0x0029DC9E, 0x00000002, 0x0029D686, 0x0029CC86, 0x00000002, + 0x4029D820, 0xA0013F02, 0x00000002, 0x4029D820, 0xA0014002, 0x00000002, + 0x4029D820, 0xA0014102, 0x00000002, 0x4029D820, 0xA0014202, 0x00000002, + 0x4029D820, 0xA0014302, 0x00000002, 0x4029D820, 0xA0014402, 0x00000002, + 0x4029D820, 0xA0014502, 0x00000002, 0x4029D820, 0xA0014602, 0x00000002, + 0x4029D820, 0xA0014702, 0x00000002, 0x4029D820, 0xA0014802, 0x00000002, + 0x4029D820, 0xA0014902, 0x00000002, 0x4029D820, 0xA0014A02, 0x00000002, + 0x4029D820, 0xA0014B02, 0x00000002, 0x4029D820, 0xA0014C02, 0x00000002, + 0x4029D820, 0xA0014D02, 0x00000002, 0x4029D820, 0xA0014E02, 0x00000002, + 0x4029D820, 0xA0014F02, 0x00000002, 0x4029D820, + // Block 26, offset 0x680 + 0xA0015002, 0x00000002, 0x4029D820, 0xA0015102, 0x00000002, 0x4029D820, + 0xA0015202, 0x00000002, 0x4029D820, 0xA0015302, 0x00000002, 0x4029D820, + 0xA0015402, 0x00000002, 0x4029D820, 0xA0015502, 0x00000002, 0x4029D820, + 0xA0015602, 0x00000002, 0x0029D884, 0xA0015604, 0x00000002, 0x4029D820, + 0xA0015702, 0x00000002, 0x4029D820, 0xA0015802, 0x00000002, 0x4029D820, + 0xA0015902, 0x00000002, 0x4029D820, 0xA0015A02, 0x00000002, 0x4029D820, + 0xA0015B02, 0x00000002, 0x4029D820, 0xA0015C02, 0x00000002, 0x4029D820, + 0xA0015D02, 0x00000002, 0x4029D820, 0xA0015E02, 0x00000002, 0x4029D820, + 0xA0015F02, 0x00000002, 0x4029D820, 0xA0016002, 0x00000002, 0x4029D820, + 0xA0016102, 0x00000002, 0x4029D820, 0xA0016202, 0x00000002, 0x4029D820, + 0xA0016302, 0x00000002, 0x4029D820, 0xA0016402, + // Block 27, offset 0x6c0 + 0x00000002, 0x4029D820, 0xA0016502, 0x00000002, 0x4029D820, 0xA0016602, + 0x00000002, 0x4029D820, 0xA0016702, 0x00000002, 0x4029D820, 0xA0016902, + 0x00000002, 0x4029D820, 0xA0016C02, 0x00000002, 0x4029D820, 0xA0016C02, + 0x00000002, 0x4029D820, 0xA0016C02, 0x00000002, 0x4029D820, 0xA0016C02, + 0x00000002, 0x4029D820, 0xA0016C02, 0x00000002, 0x4029D820, 0xA0016C02, + 0x00000002, 0x4029D820, 0xA0016C02, 0x00000002, 0x4029D820, 0xA0017202, + 0x00000002, 0x4029D820, 0xA0017302, 0x00000002, 0x4029D820, 0xA0017402, + 0x00000002, 0x4029D820, 0xA0017502, 0x00000002, 0x4029D820, 0xA0017702, + 0x00000002, 0x0029D886, 0x0029CC86, 0x00000002, 0x4029DA20, 0xA0013F02, + 0x00000002, 0x4029DA20, 0xA0014002, 0x00000002, 0x4029DA20, 0xA0014102, + 0x00000002, 0x4029DA20, 0xA0014202, 0x00000002, + // Block 28, offset 0x700 + 0x4029DA20, 0xA0014302, 0x00000002, 0x4029DA20, 0xA0014402, 0x00000002, + 0x4029DA20, 0xA0014502, 0x00000002, 0x4029DA20, 0xA0014602, 0x00000002, + 0x4029DA20, 0xA0014702, 0x00000002, 0x4029DA20, 0xA0014802, 0x00000002, + 0x4029DA20, 0xA0014902, 0x00000002, 0x4029DA20, 0xA0014A02, 0x00000002, + 0x4029DA20, 0xA0014B02, 0x00000002, 0x4029DA20, 0xA0014C02, 0x00000002, + 0x4029DA20, 0xA0014D02, 0x00000002, 0x4029DA20, 0xA0014E02, 0x00000002, + 0x4029DA20, 0xA0014F02, 0x00000002, 0x4029DA20, 0xA0015002, 0x00000002, + 0x4029DA20, 0xA0015102, 0x00000002, 0x4029DA20, 0xA0015202, 0x00000002, + 0x4029DA20, 0xA0015302, 0x00000002, 0x4029DA20, 0xA0015402, 0x00000002, + 0x4029DA20, 0xA0015502, 0x00000002, 0x4029DA20, 0xA0015602, 0x00000002, + 0x0029DA84, 0xA0015604, 0x00000002, 0x4029DA20, + // Block 29, offset 0x740 + 0xA0015702, 0x00000002, 0x4029DA20, 0xA0015802, 0x00000002, 0x4029DA20, + 0xA0015902, 0x00000002, 0x4029DA20, 0xA0015A02, 0x00000002, 0x4029DA20, + 0xA0015B02, 0x00000002, 0x4029DA20, 0xA0015C02, 0x00000002, 0x4029DA20, + 0xA0015D02, 0x00000002, 0x4029DA20, 0xA0015E02, 0x00000002, 0x4029DA20, + 0xA0015F02, 0x00000002, 0x4029DA20, 0xA0016002, 0x00000002, 0x4029DA20, + 0xA0016102, 0x00000002, 0x4029DA20, 0xA0016202, 0x00000002, 0x4029DA20, + 0xA0016302, 0x00000002, 0x4029DA20, 0xA0016402, 0x00000002, 0x4029DA20, + 0xA0016502, 0x00000002, 0x4029DA20, 0xA0016602, 0x00000002, 0x4029DA20, + 0xA0016702, 0x00000002, 0x4029DA20, 0xA0016C02, 0x00000002, 0x4029DA20, + 0xA0016C02, 0x00000002, 0x4029DA20, 0xA0016C02, 0x00000002, 0x4029DA20, + 0xA0016C02, 0x00000002, 0x4029DA20, 0xA0016C02, + // Block 30, offset 0x780 + 0x00000002, 0x4029DA20, 0xA0016C02, 0x00000002, 0x4029DA20, 0xA0016C02, + 0x00000002, 0x4029DA20, 0xA0016C02, 0x00000002, 0x4029DA20, 0xA0017202, + 0x00000002, 0x4029DA20, 0xA0017302, 0x00000002, 0x4029DA20, 0xA0017402, + 0x00000002, 0x4029DA20, 0xA0017502, 0x00000002, 0x4029DA20, 0xA0017702, + 0x00000003, 0x0029DA9E, 0x0009589E, 0x0029DC9E, 0x00000002, 0x0029DA86, + 0x0029CC86, 0x00000002, 0x4029DC20, 0xA0013F02, 0x00000002, 0x4029DC20, + 0xA0014002, 0x00000002, 0x4029DC20, 0xA0014102, 0x00000002, 0x4029DC20, + 0xA0014202, 0x00000002, 0x4029DC20, 0xA0014302, 0x00000002, 0x4029DC20, + 0xA0014402, 0x00000002, 0x4029DC20, 0xA0014502, 0x00000002, 0x4029DC20, + 0xA0014602, 0x00000002, 0x4029DC20, 0xA0014702, 0x00000002, 0x4029DC20, + 0xA0014802, 0x00000002, 0x4029DC20, 0xA0014902, + // Block 31, offset 0x7c0 + 0x00000002, 0x4029DC20, 0xA0014A02, 0x00000002, 0x4029DC20, 0xA0014B02, + 0x00000002, 0x4029DC20, 0xA0014C02, 0x00000002, 0x4029DC20, 0xA0014D02, + 0x00000002, 0x4029DC20, 0xA0014E02, 0x00000002, 0x4029DC20, 0xA0014F02, + 0x00000002, 0x4029DC20, 0xA0015002, 0x00000002, 0x4029DC20, 0xA0015102, + 0x00000002, 0x4029DC20, 0xA0015202, 0x00000002, 0x4029DC20, 0xA0015302, + 0x00000002, 0x4029DC20, 0xA0015402, 0x00000002, 0x4029DC20, 0xA0015502, + 0x00000002, 0x4029DC20, 0xA0015602, 0x00000002, 0x0029DC84, 0xA0015604, + 0x00000002, 0x4029DC20, 0xA0015702, 0x00000002, 0x4029DC20, 0xA0015802, + 0x00000002, 0x4029DC20, 0xA0015902, 0x00000002, 0x4029DC20, 0xA0015A02, + 0x00000002, 0x4029DC20, 0xA0015B02, 0x00000002, 0x4029DC20, 0xA0015C02, + 0x00000002, 0x4029DC20, 0xA0015D02, 0x00000002, + // Block 32, offset 0x800 + 0x4029DC20, 0xA0015E02, 0x00000002, 0x4029DC20, 0xA0015F02, 0x00000002, + 0x4029DC20, 0xA0016002, 0x00000002, 0x4029DC20, 0xA0016102, 0x00000002, + 0x4029DC20, 0xA0016202, 0x00000002, 0x4029DC20, 0xA0016302, 0x00000002, + 0x4029DC20, 0xA0016402, 0x00000002, 0x4029DC20, 0xA0016502, 0x00000002, + 0x4029DC20, 0xA0016602, 0x00000002, 0x4029DC20, 0xA0016702, 0x00000002, + 0x4029DC20, 0xA0016C02, 0x00000002, 0x4029DC20, 0xA0016C02, 0x00000002, + 0x4029DC20, 0xA0016C02, 0x00000002, 0x4029DC20, 0xA0016C02, 0x00000002, + 0x4029DC20, 0xA0016C02, 0x00000002, 0x4029DC20, 0xA0016C02, 0x00000002, + 0x4029DC20, 0xA0016C02, 0x00000002, 0x4029DC20, 0xA0017202, 0x00000002, + 0x4029DC20, 0xA0017302, 0x00000002, 0x4029DC20, 0xA0017402, 0x00000002, + 0x4029DC20, 0xA0017502, 0x00000002, 0x4029DC20, + // Block 33, offset 0x840 + 0xA0017702, 0x00000002, 0x0029DC86, 0x0029CC86, 0x00000002, 0x4029DE20, + 0xA0013F02, 0x00000002, 0x4029DE20, 0xA0014002, 0x00000002, 0x4029DE20, + 0xA0014102, 0x00000002, 0x4029DE20, 0xA0014202, 0x00000002, 0x4029DE20, + 0xA0014302, 0x00000002, 0x4029DE20, 0xA0014402, 0x00000002, 0x4029DE20, + 0xA0014502, 0x00000002, 0x4029DE20, 0xA0014602, 0x00000002, 0x4029DE20, + 0xA0014702, 0x00000002, 0x4029DE20, 0xA0014802, 0x00000002, 0x4029DE20, + 0xA0014902, 0x00000002, 0x4029DE20, 0xA0014A02, 0x00000002, 0x4029DE20, + 0xA0014B02, 0x00000002, 0x4029DE20, 0xA0014C02, 0x00000002, 0x4029DE20, + 0xA0014D02, 0x00000002, 0x4029DE20, 0xA0014E02, 0x00000002, 0x4029DE20, + 0xA0014F02, 0x00000002, 0x4029DE20, 0xA0015002, 0x00000002, 0x4029DE20, + 0xA0015102, 0x00000002, 0x4029DE20, 0xA0015202, + // Block 34, offset 0x880 + 0x00000002, 0x4029DE20, 0xA0015302, 0x00000002, 0x4029DE20, 0xA0015402, + 0x00000002, 0x4029DE20, 0xA0015502, 0x00000002, 0x4029DE20, 0xA0015602, + 0x00000002, 0x0029DE84, 0xA0015604, 0x00000002, 0x4029DE20, 0xA0015702, + 0x00000002, 0x4029DE20, 0xA0015802, 0x00000002, 0x4029DE20, 0xA0015902, + 0x00000002, 0x4029DE20, 0xA0015A02, 0x00000002, 0x4029DE20, 0xA0015B02, + 0x00000002, 0x4029DE20, 0xA0015C02, 0x00000002, 0x4029DE20, 0xA0015D02, + 0x00000002, 0x4029DE20, 0xA0015E02, 0x00000002, 0x4029DE20, 0xA0015F02, + 0x00000002, 0x4029DE20, 0xA0016002, 0x00000002, 0x4029DE20, 0xA0016102, + 0x00000002, 0x4029DE20, 0xA0016202, 0x00000002, 0x4029DE20, 0xA0016302, + 0x00000002, 0x4029DE20, 0xA0016402, 0x00000002, 0x4029DE20, 0xA0016502, + 0x00000002, 0x4029DE20, 0xA0016602, 0x00000002, + // Block 35, offset 0x8c0 + 0x4029DE20, 0xA0016702, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0016C02, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0016C02, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0016C02, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0016C02, 0x00000002, 0x4029DE20, 0xA0016C02, 0x00000002, + 0x4029DE20, 0xA0017202, 0x00000002, 0x4029DE20, 0xA0017302, 0x00000002, + 0x4029DE20, 0xA0017402, 0x00000002, 0x4029DE20, 0xA0017502, 0x00000002, + 0x4029DE20, 0xA0017702, 0x00000002, 0x402BDE20, 0xAE603202, 0x00000002, + 0x002BDE88, 0xAE603202, 0x00000002, 0x402BDE20, 0xAE603502, 0x00000002, + 0x002BDE88, 0xAE603502, 0x00000002, 0x402BDE20, 0xAE603702, 0x00000002, + 0x002BDE88, 0xAE603702, 0x00000003, 0x402BDE20, + // Block 36, offset 0x900 + 0xAE603702, 0xAE603202, 0x00000003, 0x002BDE88, 0xAE603702, 0xAE603202, + 0x00000003, 0x402BDE20, 0xAE603702, 0xAE603502, 0x00000003, 0x002BDE88, + 0xAE603702, 0xAE603502, 0x00000003, 0x402BDE20, 0xAE603702, 0xAE604E02, + 0x00000003, 0x002BDE88, 0xAE603702, 0xAE604E02, 0x00000003, 0x402BDE20, + 0xAE603702, 0xAE606402, 0x00000003, 0x002BDE88, 0xAE603702, 0xAE606402, + 0x00000002, 0x402BDE20, 0xAE603C02, 0x00000002, 0x002BDE88, 0xAE603C02, + 0x00000003, 0x402BDE20, 0xAE603C02, 0xAE603202, 0x00000003, 0x002BDE88, + 0xAE603C02, 0xAE603202, 0x00000003, 0x402BDE20, 0xAE603C02, 0xAE603502, + 0x00000003, 0x002BDE88, 0xAE603C02, 0xAE603502, 0x00000003, 0x402BDE20, + 0xAE603C02, 0xAE604E02, 0x00000003, 0x002BDE88, 0xAE603C02, 0xAE604E02, + 0x00000003, 0x402BDE20, 0xAE603C02, 0xAE606402, + // Block 37, offset 0x940 + 0x00000003, 0x002BDE88, 0xAE603C02, 0xAE606402, 0x00000002, 0x402BDE20, + 0xAE604102, 0x00000002, 0x002BDE88, 0xAE604102, 0x00000002, 0x402BDE20, + 0xAE604302, 0x00000002, 0x002BDE88, 0xAE604302, 0x00000003, 0x402BDE20, + 0xAE604302, 0xAE603202, 0x00000003, 0x002BDE88, 0xAE604302, 0xAE603202, + 0x00000002, 0x402BDE20, 0xAE604702, 0x00000002, 0x002BDE88, 0xAE604702, + 0x00000003, 0x402BDE20, 0xAE604702, 0xAE605B02, 0x00000003, 0x002BDE88, + 0xAE604702, 0xAE605B02, 0x00000002, 0x402BDE20, 0xAE604E02, 0x00000002, + 0x002BDE88, 0xAE604E02, 0x00000002, 0x402BDE20, 0xAE605202, 0x00000002, + 0x002BDE88, 0xAE605202, 0x00000003, 0x402BDE20, 0xAE605202, 0xAE605B02, + 0x00000003, 0x002BDE88, 0xAE605202, 0xAE605B02, 0x00000002, 0x402BDE20, + 0xACA05902, 0x00000002, 0x002BDE88, 0xACA05902, + // Block 38, offset 0x980 + 0x00000002, 0x402BDE20, 0xAE605B02, 0x00000002, 0x002BDE88, 0xAE605B02, + 0x00000002, 0x402BDE20, 0xAE606402, 0x00000002, 0x002BDE88, 0xAE606402, + 0x00000002, 0x402BDE20, 0xAE606502, 0x00000002, 0x002BDE88, 0xAE606502, + 0x00000002, 0x402BDE20, 0xAE606702, 0x00000002, 0x002BDE88, 0xAE606702, + 0x00000002, 0x402BDE20, 0xADC07002, 0x00000002, 0x002BDE88, 0xADC07002, + 0x00000003, 0x402BDE20, 0xADC07002, 0xAE603702, 0x00000003, 0x002BDE88, + 0xADC07002, 0xAE603702, 0x00000003, 0x402BDE20, 0xADC07002, 0xAE603C02, + 0x00000003, 0x002BDE88, 0xADC07002, 0xAE603C02, 0x00000002, 0x402BDE20, + 0xADC07602, 0x00000002, 0x002BDE88, 0xADC07602, 0x00000002, 0x84E615EF, + 0xAE613904, 0x00000004, 0x002BDE9C, 0x0002E49C, 0x002E829C, 0x0002E49C, + 0x00000003, 0x002BDE84, 0x0004E284, 0x002C3A84, + // Block 39, offset 0x9c0 + 0x00000003, 0x002BDE84, 0x0004E284, 0x002FE684, 0x00000003, 0x002BDE8A, + 0x0004E284, 0x002FE68A, 0x00000003, 0x002BDE9D, 0x0009569C, 0x002E829C, + 0x00000002, 0x002BDE84, 0x002BDE84, 0x00000002, 0x002BDE8A, 0x002BDE8A, + 0x00000002, 0x002BDE9D, 0x002C0A9D, 0x00000003, 0x002BDE84, 0xA0013904, + 0x002C9884, 0x00000003, 0x84E615EF, 0xAE613904, 0x84E6164C, 0x00000003, + 0x002BDE8A, 0xA0013904, 0x002C988A, 0x00000003, 0x002BDE94, 0xA0013914, + 0x002C9894, 0x00000004, 0x002BDE84, 0xA0013904, 0x002C9884, 0xAE603202, + 0x00000004, 0x002BDE8A, 0xA0013904, 0x002C988A, 0xAE603202, 0x00000004, + 0x002BDE84, 0xA0013904, 0x002C9884, 0xAE605B02, 0x00000004, 0x002BDE8A, + 0xA0013904, 0x002C988A, 0xAE605B02, 0x00000002, 0x84E615EF, 0x84E61771, + 0x00000002, 0x002BDE84, 0x002EE284, 0x00000002, + // Block 40, offset 0xa00 + 0x002BDE8A, 0x002EE28A, 0x00000002, 0x002BDE84, 0x00306C84, 0x00000002, + 0x002BDE8A, 0x00306C8A, 0x00000002, 0x84E615EF, 0x84E6185F, 0x00000002, + 0x002BDE84, 0x0030BE84, 0x00000002, 0x002BDE8A, 0x0030BE8A, 0x00000003, + 0x002BDE84, 0xA0013904, 0x0030BE84, 0x00000003, 0x002BDE8A, 0xA0013904, + 0x0030BE8A, 0x00000002, 0x002BDE84, 0x00310084, 0x00000002, 0x002BDE8A, + 0x0031008A, 0x00000002, 0x402C0A20, 0xAE605202, 0x00000002, 0x002C0A88, + 0xAE605202, 0x00000002, 0x402C0A20, 0xADC07002, 0x00000002, 0x002C0A88, + 0xADC07002, 0x00000002, 0x402C0A20, 0xADC07B02, 0x00000002, 0x002C0A88, + 0xADC07B02, 0x00000003, 0x002C0A9C, 0x002BDE9C, 0x002F7A9C, 0x00000002, + 0x402C3A20, 0xAE603202, 0x00000002, 0x002C3A88, 0xAE603202, 0x00000002, + 0x402C3A20, 0xAE603C02, 0x00000002, 0x002C3A88, + // Block 41, offset 0xa40 + 0xAE603C02, 0x00000002, 0x402C3A20, 0xAE604102, 0x00000002, 0x002C3A88, + 0xAE604102, 0x00000002, 0x402C3A20, 0xAE605202, 0x00000002, 0x002C3A88, + 0xAE605202, 0x00000002, 0x402C3A20, 0xACA05602, 0x00000002, 0x84E6161D, + 0xAE605604, 0x00000002, 0x002C3A88, 0xACA05602, 0x00000003, 0x402C3A20, + 0xACA05602, 0xAE603202, 0x00000003, 0x002C3A88, 0xACA05602, 0xAE603202, + 0x00000003, 0x002C3A84, 0x0004E284, 0x002EE284, 0x00000003, 0x002C3A84, + 0x0004E284, 0x00306C84, 0x00000004, 0x002C3A9D, 0x0009569C, 0x002DFE9C, + 0x002D229C, 0x00000003, 0x002C3A9C, 0x002BDE9C, 0x002E229C, 0x00000002, + 0x002C3A9D, 0x002E229D, 0x00000003, 0x002C3A9C, 0x002E829C, 0x0029D09C, + 0x00000003, 0x002C3A9C, 0x002E829C, 0x0029D29C, 0x00000003, 0x002C3A9D, + 0x002EE29C, 0x0002E49C, 0x00000004, 0x002C3A9D, + // Block 42, offset 0xa80 + 0x002EE29D, 0x002EE29D, 0x002E229D, 0x00000002, 0x402C6220, 0xAE604102, + 0x00000002, 0x002C6288, 0xAE604102, 0x00000002, 0x402C6220, 0xAE605202, + 0x00000002, 0x002C6288, 0xAE605202, 0x00000002, 0x402C6220, 0xACA05602, + 0x00000002, 0x002C6288, 0xACA05602, 0x00000002, 0x402C6220, 0xADC07002, + 0x00000002, 0x002C6288, 0xADC07002, 0x00000002, 0x402C6220, 0xADC07802, + 0x00000002, 0x002C6288, 0xADC07802, 0x00000002, 0x402C6220, 0xADC07B02, + 0x00000002, 0x002C6288, 0xADC07B02, 0x00000002, 0x402C6220, 0xA0007D02, + 0x00000002, 0x002C6288, 0xA0007D02, 0x00000002, 0x002C6284, 0xA0013904, + 0x00000002, 0x84E61631, 0xAE613904, 0x00000002, 0x002C628A, 0xA0013904, + 0x00000002, 0x84E61631, 0xAE613A04, 0x00000002, 0x002C6284, 0xA0013A04, + 0x00000002, 0x002C628A, 0xA0013A04, 0x00000002, + // Block 43, offset 0xac0 + 0x002C6284, 0x002C0A84, 0x00000003, 0x002C629C, 0x002E829C, 0x0029D09C, + 0x00000003, 0x002C629C, 0x002E829C, 0x0029D29C, 0x00000002, 0x002C6284, + 0x00312A84, 0x00000003, 0x002C6284, 0x00312A84, 0xA0004104, 0x00000003, + 0x002C628A, 0x00312A84, 0xA0004104, 0x00000003, 0x002C628A, 0x00312A8A, + 0xA0004104, 0x00000002, 0x002C6284, 0x00315084, 0x00000002, 0x002C6284, + 0x00316484, 0x00000002, 0x402C9820, 0xAE603202, 0x00000002, 0x002C9888, + 0xAE603202, 0x00000002, 0x402C9820, 0xAE603502, 0x00000002, 0x002C9888, + 0xAE603502, 0x00000002, 0x402C9820, 0xAE603702, 0x00000002, 0x002C9888, + 0xAE603702, 0x00000002, 0x402C9820, 0xAE603C02, 0x00000002, 0x002C9888, + 0xAE603C02, 0x00000003, 0x402C9820, 0xAE603C02, 0xAE603202, 0x00000003, + 0x002C9888, 0xAE603C02, 0xAE603202, 0x00000003, + // Block 44, offset 0xb00 + 0x402C9820, 0xAE603C02, 0xAE603502, 0x00000003, 0x002C9888, 0xAE603C02, + 0xAE603502, 0x00000003, 0x402C9820, 0xAE603C02, 0xAE604E02, 0x00000003, + 0x002C9888, 0xAE603C02, 0xAE604E02, 0x00000003, 0x402C9820, 0xAE603C02, + 0xAE606402, 0x00000003, 0x002C9888, 0xAE603C02, 0xAE606402, 0x00000002, + 0x402C9820, 0xAE604102, 0x00000002, 0x002C9888, 0xAE604102, 0x00000002, + 0x402C9820, 0xAE604702, 0x00000002, 0x002C9888, 0xAE604702, 0x00000002, + 0x402C9820, 0xAE604E02, 0x00000002, 0x002C9888, 0xAE604E02, 0x00000002, + 0x402C9820, 0xAE605202, 0x00000002, 0x002C9888, 0xAE605202, 0x00000002, + 0x402C9820, 0xACA05602, 0x00000002, 0x002C9888, 0xACA05602, 0x00000003, + 0x402C9820, 0xACA05602, 0xAE603702, 0x00000003, 0x002C9888, 0xACA05602, + 0xAE603702, 0x00000002, 0x402C9820, 0xACA05902, + // Block 45, offset 0xb40 + 0x00000002, 0x002C9888, 0xACA05902, 0x00000002, 0x402C9820, 0xAE605B02, + 0x00000002, 0x002C9888, 0xAE605B02, 0x00000003, 0x402C9820, 0xAE605B02, + 0xAE603202, 0x00000003, 0x002C9888, 0xAE605B02, 0xAE603202, 0x00000003, + 0x402C9820, 0xAE605B02, 0xAE603502, 0x00000003, 0x002C9888, 0xAE605B02, + 0xAE603502, 0x00000002, 0x402C9820, 0xAE606402, 0x00000002, 0x002C9888, + 0xAE606402, 0x00000002, 0x402C9820, 0xAE606502, 0x00000002, 0x002C9888, + 0xAE606502, 0x00000002, 0x402C9820, 0xAE606702, 0x00000002, 0x002C9888, + 0xAE606702, 0x00000002, 0x402C9820, 0xADC07002, 0x00000002, 0x002C9888, + 0xADC07002, 0x00000003, 0x402C9820, 0xADC07002, 0xAE603C02, 0x00000003, + 0x002C9888, 0xADC07002, 0xAE603C02, 0x00000002, 0x402C9820, 0xADC07802, + 0x00000002, 0x002C9888, 0xADC07802, 0x00000002, + // Block 46, offset 0xb80 + 0x402C9820, 0xADC07A02, 0x00000002, 0x002C9888, 0xADC07A02, 0x00000003, + 0x002C989C, 0x002F7A9C, 0x002D229C, 0x00000002, 0x402D0820, 0xAE605202, + 0x00000002, 0x002D0888, 0xAE605202, 0x00000002, 0x002D0884, 0xA0013A04, + 0x00000002, 0x002D088A, 0xA0013A04, 0x00000003, 0x002D088A, 0x002BDE8A, + 0x0030F68A, 0x00000003, 0x002D0884, 0x002D0884, 0x002D9A84, 0x00000003, + 0x002D0884, 0x002D0884, 0x002E2284, 0x00000002, 0x002D0884, 0x002EDA84, + 0x00000004, 0x002D089D, 0x002F7A9D, 0x002C989D, 0x002C989D, 0x00000002, + 0x402D2220, 0xAE603202, 0x00000002, 0x002D2288, 0xAE603202, 0x00000002, + 0x402D2220, 0xAE603702, 0x00000002, 0x002D2288, 0xAE603702, 0x00000002, + 0x402D2220, 0xAE603C02, 0x00000002, 0x002D2288, 0xAE603C02, 0x00000002, + 0x402D2220, 0xAE604102, 0x00000002, 0x002D2288, + // Block 47, offset 0xbc0 + 0xAE604102, 0x00000002, 0x402D2220, 0xAE605202, 0x00000002, 0x002D2288, + 0xAE605202, 0x00000002, 0x402D2220, 0xACA05602, 0x00000002, 0x002D2288, + 0xACA05602, 0x00000002, 0x402D2220, 0xAE605B02, 0x00000002, 0x002D2288, + 0xAE605B02, 0x00000002, 0x002D2284, 0xA0006104, 0x00000002, 0x002D228A, + 0xA0006104, 0x00000002, 0x002D2284, 0xA0013A04, 0x00000002, 0x002D228A, + 0xA0013A04, 0x00000003, 0x002D229C, 0x002BDE9C, 0x002E229C, 0x00000003, + 0x002D229D, 0x002D689D, 0x00312A9C, 0x00000003, 0x002D229D, 0x002F2C9D, + 0x002BDE9C, 0x00000002, 0x402D6820, 0xAE603C02, 0x00000002, 0x002D6888, + 0xAE603C02, 0x00000002, 0x402D6820, 0xAE604102, 0x00000002, 0x002D6888, + 0xAE604102, 0x00000002, 0x402D6820, 0xAE604702, 0x00000002, 0x002D6888, + 0xAE604702, 0x00000002, 0x402D6820, 0xAE605202, + // Block 48, offset 0xc00 + 0x00000002, 0x002D6888, 0xAE605202, 0x00000002, 0x402D6820, 0xACA05602, + 0x00000002, 0x002D6888, 0xACA05602, 0x00000002, 0x402D6820, 0xADC07002, + 0x00000002, 0x002D6888, 0xADC07002, 0x00000002, 0x402D6820, 0xADC07902, + 0x00000002, 0x002D6888, 0xADC07902, 0x00000002, 0x402D6820, 0xADC07B02, + 0x00000002, 0x402D6820, 0xA0007D02, 0x00000002, 0x002D6888, 0xA0007D02, + 0x00000003, 0x002D689C, 0x002F2C9D, 0x002BDE9C, 0x00000002, 0x402D9A20, + 0xAE603202, 0x00000002, 0x002D9A88, 0xAE603202, 0x00000002, 0x402D9A20, + 0xAE603502, 0x00000002, 0x002D9A88, 0xAE603502, 0x00000002, 0x402D9A20, + 0xAE603702, 0x00000002, 0x002D9A88, 0xAE603702, 0x00000002, 0x402D9A20, + 0xAE603C02, 0x00000002, 0x002D9A88, 0xAE603C02, 0x00000002, 0x402D9A20, + 0xAE604102, 0x00000002, 0x002D9A88, 0xAE604102, + // Block 49, offset 0xc40 + 0x00000002, 0x402D9A20, 0xAE604702, 0x00000002, 0x002D9A88, 0xAE604702, + 0x00000003, 0x402D9A20, 0xAE604702, 0xAE603202, 0x00000003, 0x002D9A88, + 0xAE604702, 0xAE603202, 0x00000002, 0x402D9A20, 0xAE604E02, 0x00000002, + 0x002D9A88, 0xAE604E02, 0x00000002, 0x002D9A88, 0xAE605202, 0x00000002, + 0x402D9A20, 0xACA05902, 0x00000002, 0x002D9A88, 0xACA05902, 0x00000002, + 0x402D9A20, 0xAE605B02, 0x00000002, 0x002D9A88, 0xAE605B02, 0x00000002, + 0x402D9A20, 0xAE606402, 0x00000002, 0x002D9A88, 0xAE606402, 0x00000002, + 0x402D9A20, 0xAE606502, 0x00000002, 0x002D9A88, 0xAE606502, 0x00000002, + 0x402D9A20, 0xAE606702, 0x00000002, 0x002D9A88, 0xAE606702, 0x00000002, + 0x402D9A20, 0xADC07002, 0x00000002, 0x002D9A88, 0xADC07002, 0x00000002, + 0x402D9A20, 0xADC07A02, 0x00000002, 0x002D9A88, + // Block 50, offset 0xc80 + 0xADC07A02, 0x00000002, 0x002D9A9D, 0x002C3A9D, 0x00000002, 0x002D9A9D, + 0x002C629D, 0x00000002, 0x402DCC20, 0xAE603C02, 0x00000002, 0x002DCC88, + 0xAE603C02, 0x00000002, 0x402DCC20, 0xAE604102, 0x00000002, 0x402DFE20, + 0xAE603202, 0x00000002, 0x002DFE88, 0xAE603202, 0x00000002, 0x402DFE20, + 0xAE604102, 0x00000002, 0x002DFE88, 0xAE604102, 0x00000002, 0x402DFE20, + 0xACA05602, 0x00000002, 0x002DFE88, 0xACA05602, 0x00000002, 0x002DFE84, + 0xA0006104, 0x00000002, 0x002DFE8A, 0xA0006104, 0x00000002, 0x402DFE20, + 0xADC07002, 0x00000002, 0x002DFE88, 0xADC07002, 0x00000002, 0x402DFE20, + 0xADC07B02, 0x00000002, 0x002DFE88, 0xADC07B02, 0x00000004, 0x002DFE9C, + 0x002C3A9C, 0x002BDE9C, 0x002E229C, 0x00000003, 0x002DFE9C, 0x002D689D, + 0x00312A9C, 0x00000003, 0x002DFE9C, 0x002E829C, + // Block 51, offset 0xcc0 + 0x0029D09C, 0x00000003, 0x002DFE9C, 0x002E829C, 0x0029D29C, 0x00000003, + 0x002DFE9C, 0x002F2C9D, 0x002BDE9C, 0x00000002, 0x402E2220, 0xAE603202, + 0x00000002, 0x002E2288, 0xAE603202, 0x00000002, 0x402E2220, 0xAE604102, + 0x00000002, 0x002E2288, 0xAE604102, 0x00000002, 0x402E2220, 0xACA05602, + 0x00000002, 0x002E2288, 0xACA05602, 0x00000002, 0x402E2220, 0xADC07002, + 0x00000002, 0x002E2288, 0xADC07002, 0x00000003, 0x402E2220, 0xADC07002, + 0xAE605B02, 0x00000003, 0x002E2288, 0xADC07002, 0xAE605B02, 0x00000002, + 0x402E2220, 0xADC07802, 0x00000002, 0x002E2288, 0xADC07802, 0x00000002, + 0x402E2220, 0xADC07B02, 0x00000002, 0x002E2288, 0xADC07B02, 0x00000002, + 0x402E2220, 0xA0007D02, 0x00000002, 0x002E2288, 0xA0007D02, 0x00000002, + 0x402E2220, 0xA0013902, 0x00000002, 0x402E2220, + // Block 52, offset 0xd00 + 0xA0013902, 0x00000002, 0x002E2288, 0xA0013902, 0x00000002, 0x002E2288, + 0xA0013902, 0x00000002, 0x002E2284, 0x002E2284, 0x00000002, 0x002E228A, + 0x002E228A, 0x00000003, 0x002E229C, 0x002EE29C, 0x002D229C, 0x00000002, + 0x002E2284, 0x002FE684, 0x00000003, 0x002E229D, 0x00302C9D, 0x002C629D, + 0x00000002, 0x002E2284, 0x00312A84, 0x00000002, 0x402E8220, 0xAE603202, + 0x00000002, 0x002E8288, 0xAE603202, 0x00000002, 0x402E8220, 0xAE605202, + 0x00000002, 0x002E8288, 0xAE605202, 0x00000002, 0x402E8220, 0xADC07002, + 0x00000002, 0x002E8288, 0xADC07002, 0x00000003, 0x002E829C, 0x0009569C, + 0x002FE69C, 0x00000004, 0x002E829C, 0x0009569C, 0x002FE69C, 0x0029D09C, + 0x00000003, 0x002E829D, 0x002D689D, 0x00312A9C, 0x00000003, 0x002E829C, + 0x002D9A9C, 0x002E229C, 0x00000003, 0x002E829C, + // Block 53, offset 0xd40 + 0x002E829C, 0x0029D09C, 0x00000003, 0x002E829C, 0x002E829C, 0x0029D29C, + 0x00000003, 0x002E829C, 0x002EE29C, 0x002E229C, 0x00000003, 0x002E829D, + 0x002F2C9D, 0x002BDE9C, 0x00000002, 0x402E9E20, 0xAE603202, 0x00000002, + 0x002E9E88, 0xAE603202, 0x00000002, 0x402E9E20, 0xAE603502, 0x00000002, + 0x002E9E88, 0xAE603502, 0x00000002, 0x402E9E20, 0xAE604102, 0x00000002, + 0x002E9E88, 0xAE604102, 0x00000002, 0x402E9E20, 0xAE604E02, 0x00000002, + 0x002E9E88, 0xAE604E02, 0x00000002, 0x402E9E20, 0xAE605202, 0x00000002, + 0x002E9E88, 0xAE605202, 0x00000002, 0x402E9E20, 0xACA05602, 0x00000002, + 0x002E9E88, 0xACA05602, 0x00000002, 0x002E9E84, 0xA0006104, 0x00000002, + 0x002E9E8A, 0xA0006104, 0x00000002, 0x402E9E20, 0xADC07002, 0x00000002, + 0x002E9E88, 0xADC07002, 0x00000002, 0x402E9E20, + // Block 54, offset 0xd80 + 0xADC07802, 0x00000002, 0x002E9E88, 0xADC07802, 0x00000002, 0x402E9E20, + 0xADC07B02, 0x00000002, 0x002E9E88, 0xADC07B02, 0x00000003, 0x002E9E9D, + 0x002C989D, 0x0030E29D, 0x00000002, 0x002E9E9D, 0x002D229D, 0x00000002, + 0x402EE220, 0xAE603202, 0x00000002, 0x002EE288, 0xAE603202, 0x00000002, + 0x402EE220, 0xAE603502, 0x00000002, 0x002EE288, 0xAE603502, 0x00000002, + 0x402EE220, 0xAE603702, 0x00000002, 0x002EE288, 0xAE603702, 0x00000002, + 0x402EE220, 0xAE603C02, 0x00000002, 0x002EE288, 0xAE603C02, 0x00000003, + 0x402EE220, 0xAE603C02, 0xAE603202, 0x00000003, 0x002EE288, 0xAE603C02, + 0xAE603202, 0x00000003, 0x402EE220, 0xAE603C02, 0xAE603502, 0x00000003, + 0x002EE288, 0xAE603C02, 0xAE603502, 0x00000003, 0x402EE220, 0xAE603C02, + 0xAE604E02, 0x00000003, 0x002EE288, 0xAE603C02, + // Block 55, offset 0xdc0 + 0xAE604E02, 0x00000003, 0x402EE220, 0xAE603C02, 0xAE606402, 0x00000003, + 0x002EE288, 0xAE603C02, 0xAE606402, 0x00000002, 0x402EE220, 0xAE604102, + 0x00000002, 0x002EE288, 0xAE604102, 0x00000002, 0x402EE220, 0xAE604702, + 0x00000002, 0x002EE288, 0xAE604702, 0x00000003, 0x402EE220, 0xAE604702, + 0xAE605B02, 0x00000003, 0x002EE288, 0xAE604702, 0xAE605B02, 0x00000002, + 0x402EE220, 0xAE604D02, 0x00000002, 0x002EE288, 0xAE604D02, 0x00000002, + 0x402EE220, 0xAE604E02, 0x00000002, 0x002EE288, 0xAE604E02, 0x00000003, + 0x402EE220, 0xAE604E02, 0xAE603202, 0x00000003, 0x002EE288, 0xAE604E02, + 0xAE603202, 0x00000003, 0x402EE220, 0xAE604E02, 0xAE604702, 0x00000003, + 0x002EE288, 0xAE604E02, 0xAE604702, 0x00000003, 0x402EE220, 0xAE604E02, + 0xAE605B02, 0x00000003, 0x002EE288, 0xAE604E02, + // Block 56, offset 0xe00 + 0xAE605B02, 0x00000002, 0x402EE220, 0xAE605202, 0x00000002, 0x002EE288, + 0xAE605202, 0x00000003, 0x402EE220, 0xAE605202, 0xAE605B02, 0x00000003, + 0x002EE288, 0xAE605202, 0xAE605B02, 0x00000002, 0x402EE220, 0xA0005402, + 0x00000002, 0x002EE288, 0xA0005402, 0x00000003, 0x402EE220, 0xA0005402, + 0xAE603202, 0x00000003, 0x002EE288, 0xA0005402, 0xAE603202, 0x00000002, + 0x402EE220, 0xACA05902, 0x00000002, 0x002EE288, 0xACA05902, 0x00000003, + 0x402EE220, 0xACA05902, 0xAE605B02, 0x00000003, 0x002EE288, 0xACA05902, + 0xAE605B02, 0x00000002, 0x402EE220, 0xAE605B02, 0x00000002, 0x002EE288, + 0xAE605B02, 0x00000003, 0x402EE220, 0xAE605B02, 0xAE603202, 0x00000003, + 0x002EE288, 0xAE605B02, 0xAE603202, 0x00000003, 0x402EE220, 0xAE605B02, + 0xAE603502, 0x00000003, 0x002EE288, 0xAE605B02, + // Block 57, offset 0xe40 + 0xAE603502, 0x00000002, 0x402EE220, 0xAE606402, 0x00000002, 0x002EE288, + 0xAE606402, 0x00000002, 0x402EE220, 0xAE606502, 0x00000002, 0x002EE288, + 0xAE606502, 0x00000002, 0x402EE220, 0xAE606702, 0x00000002, 0x002EE288, + 0xAE606702, 0x00000002, 0x402EE220, 0xAD806802, 0x00000002, 0x002EE288, + 0xAD806802, 0x00000003, 0x402EE220, 0xAD806802, 0xAE603202, 0x00000003, + 0x002EE288, 0xAD806802, 0xAE603202, 0x00000003, 0x402EE220, 0xAD806802, + 0xAE603502, 0x00000003, 0x002EE288, 0xAD806802, 0xAE603502, 0x00000003, + 0x402EE220, 0xAD806802, 0xAE604E02, 0x00000003, 0x002EE288, 0xAD806802, + 0xAE604E02, 0x00000003, 0x402EE220, 0xAD806802, 0xAE606402, 0x00000003, + 0x002EE288, 0xAD806802, 0xAE606402, 0x00000003, 0x402EE220, 0xAD806802, + 0xADC07002, 0x00000003, 0x002EE288, 0xAD806802, + // Block 58, offset 0xe80 + 0xADC07002, 0x00000002, 0x402EE220, 0xADC07002, 0x00000002, 0x002EE288, + 0xADC07002, 0x00000003, 0x402EE220, 0xADC07002, 0xAE603C02, 0x00000003, + 0x002EE288, 0xADC07002, 0xAE603C02, 0x00000003, 0x002EE284, 0xA0013904, + 0x002C9884, 0x00000003, 0x002EE28A, 0xA0013904, 0x002C988A, 0x00000003, + 0x002EE294, 0xA0013914, 0x002C9894, 0x00000002, 0x002EE29D, 0x002DFE9D, + 0x00000002, 0x002EE284, 0x002EE284, 0x00000002, 0x002EE28A, 0x002EE28A, + 0x00000002, 0x402F2C20, 0xAE603202, 0x00000002, 0x002F2C88, 0xAE603202, + 0x00000002, 0x402F2C20, 0xAE605202, 0x00000002, 0x002F2C88, 0xAE605202, + 0x00000004, 0x002F2C9C, 0x0002E49C, 0x002E829C, 0x0002E49C, 0x00000002, + 0x002F2C9D, 0x002BDE9D, 0x00000003, 0x002F2C9D, 0x002F2C9D, 0x002E829D, + 0x00000003, 0x002F2C9D, 0x002F2C9D, 0x0030BE9D, + // Block 59, offset 0xec0 + 0x00000003, 0x002F2C9D, 0x00302C9D, 0x002C989D, 0x00000002, 0x002F5684, + 0x002F2C84, 0x00000002, 0x402F7A20, 0xAE603202, 0x00000002, 0x002F7A88, + 0xAE603202, 0x00000002, 0x402F7A20, 0xAE604102, 0x00000002, 0x002F7A88, + 0xAE604102, 0x00000002, 0x402F7A20, 0xAE605202, 0x00000002, 0x002F7A88, + 0xAE605202, 0x00000002, 0x402F7A20, 0xACA05602, 0x00000002, 0x002F7A88, + 0xACA05602, 0x00000002, 0x002F7A84, 0xA0006104, 0x00000002, 0x002F7A8A, + 0xA0006104, 0x00000002, 0x402F7A20, 0xAE606502, 0x00000002, 0x002F7A88, + 0xAE606502, 0x00000002, 0x402F7A20, 0xAE606702, 0x00000002, 0x002F7A88, + 0xAE606702, 0x00000002, 0x402F7A20, 0xADC07002, 0x00000002, 0x002F7A88, + 0xADC07002, 0x00000003, 0x402F7A20, 0xADC07002, 0xAE605B02, 0x00000003, + 0x002F7A88, 0xADC07002, 0xAE605B02, 0x00000002, + // Block 60, offset 0xf00 + 0x402F7A20, 0xADC07B02, 0x00000002, 0x002F7A88, 0xADC07B02, 0x00000002, + 0x002F7A84, 0xA0013A04, 0x00000002, 0x002F7A8A, 0xA0013A04, 0x00000003, + 0x002F7A9C, 0x002BDE9C, 0x002C629C, 0x00000005, 0x002F7A9C, 0x002BDE9C, + 0x002C629C, 0x0009569C, 0x002FE69C, 0x00000006, 0x002F7A9C, 0x002BDE9C, + 0x002C629C, 0x0009569C, 0x002FE69C, 0x0029D09C, 0x00000002, 0x402FE620, + 0xAE603202, 0x00000002, 0x002FE688, 0xAE603202, 0x00000003, 0x402FE620, + 0xAE603202, 0xAE605202, 0x00000003, 0x002FE688, 0xAE603202, 0xAE605202, + 0x00000002, 0x402FE620, 0xAE603C02, 0x00000002, 0x002FE688, 0xAE603C02, + 0x00000002, 0x402FE620, 0xAE604102, 0x00000002, 0x002FE688, 0xAE604102, + 0x00000003, 0x402FE620, 0xAE604102, 0xAE605202, 0x00000003, 0x002FE688, + 0xAE604102, 0xAE605202, 0x00000002, 0x402FE620, + // Block 61, offset 0xf40 + 0xAE605202, 0x00000002, 0x002FE688, 0xAE605202, 0x00000002, 0x402FE620, + 0xACA05602, 0x00000002, 0x002FE688, 0xACA05602, 0x00000002, 0x002FE684, + 0xA0006104, 0x00000002, 0x002FE68A, 0xA0006104, 0x00000002, 0x402FE620, + 0xADC07002, 0x00000002, 0x002FE688, 0xADC07002, 0x00000003, 0x402FE620, + 0xADC07002, 0xAE605202, 0x00000003, 0x002FE688, 0xADC07002, 0xAE605202, + 0x00000002, 0x402FE620, 0xADC07702, 0x00000002, 0x002FE688, 0xADC07702, + 0x00000002, 0x002FE684, 0xA0013A04, 0x00000002, 0x84E617F3, 0xAE613A04, + 0x00000002, 0x002FE684, 0xA0013A04, 0x00000002, 0x002FE68A, 0xA0013A04, + 0x00000003, 0x002FE684, 0xA0013A04, 0xAE605202, 0x00000002, 0x002FE69D, + 0x002BDE9D, 0x00000003, 0x002FE69D, 0x002EE29D, 0x002FE69D, 0x00000003, + 0x002FE684, 0xA0013904, 0x002FE684, 0x00000003, + // Block 62, offset 0xf80 + 0x002FE68A, 0xA0013904, 0x002FE68A, 0x00000003, 0x002FE684, 0xA0013A04, + 0x00302C84, 0x00000002, 0x40302C20, 0xAE604102, 0x00000002, 0x00302C88, + 0xAE604102, 0x00000002, 0x40302C20, 0xAE604702, 0x00000002, 0x40302C20, + 0xAE605202, 0x00000002, 0x00302C88, 0xAE605202, 0x00000002, 0x40302C20, + 0xACA05602, 0x00000002, 0x00302C88, 0xACA05602, 0x00000002, 0x40302C20, + 0xADC07002, 0x00000002, 0x00302C88, 0xADC07002, 0x00000002, 0x40302C20, + 0xADC07702, 0x00000002, 0x00302C88, 0xADC07702, 0x00000002, 0x40302C20, + 0xADC07802, 0x00000002, 0x00302C88, 0xADC07802, 0x00000002, 0x40302C20, + 0xADC07B02, 0x00000002, 0x00302C88, 0xADC07B02, 0x00000002, 0x00302C84, + 0xA0013A04, 0x00000002, 0x00302C8A, 0xA0013A04, 0x00000002, 0x00302C84, + 0x002C5684, 0x00000003, 0x00302C8A, 0x002C988A, + // Block 63, offset 0xfc0 + 0x002E228A, 0x00000003, 0x00302C84, 0xA0013904, 0x002D6884, 0x00000003, + 0x00302C9D, 0x002D689D, 0x00312A9C, 0x00000002, 0x00302C84, 0x002FE684, + 0x00000002, 0x00302C84, 0x002FE684, 0x00000002, 0x00302C84, 0x00300884, + 0x00000002, 0x00302C84, 0x00312A84, 0x00000002, 0x00302C8A, 0x00312A84, + 0x00000002, 0x40306C20, 0xAE603202, 0x00000002, 0x00306C88, 0xAE603202, + 0x00000002, 0x40306C20, 0xAE603502, 0x00000002, 0x00306C88, 0xAE603502, + 0x00000002, 0x40306C20, 0xAE603702, 0x00000002, 0x00306C88, 0xAE603702, + 0x00000002, 0x40306C20, 0xAE603C02, 0x00000002, 0x00306C88, 0xAE603C02, + 0x00000002, 0x40306C20, 0xAE604102, 0x00000002, 0x00306C88, 0xAE604102, + 0x00000002, 0x40306C20, 0xAE604302, 0x00000002, 0x00306C88, 0xAE604302, + 0x00000002, 0x40306C20, 0xAE604702, 0x00000002, + // Block 64, offset 0x1000 + 0x00306C88, 0xAE604702, 0x00000003, 0x40306C20, 0xAE604702, 0xAE603202, + 0x00000003, 0x00306C88, 0xAE604702, 0xAE603202, 0x00000003, 0x40306C20, + 0xAE604702, 0xAE603502, 0x00000003, 0x00306C88, 0xAE604702, 0xAE603502, + 0x00000003, 0x40306C20, 0xAE604702, 0xAE604102, 0x00000003, 0x00306C88, + 0xAE604702, 0xAE604102, 0x00000003, 0x40306C20, 0xAE604702, 0xAE605B02, + 0x00000003, 0x00306C88, 0xAE604702, 0xAE605B02, 0x00000002, 0x40306C20, + 0xAE604D02, 0x00000002, 0x00306C88, 0xAE604D02, 0x00000002, 0x40306C20, + 0xAE604E02, 0x00000002, 0x00306C88, 0xAE604E02, 0x00000003, 0x40306C20, + 0xAE604E02, 0xAE603202, 0x00000003, 0x00306C88, 0xAE604E02, 0xAE603202, + 0x00000002, 0x40306C20, 0xACA05902, 0x00000002, 0x00306C88, 0xACA05902, + 0x00000002, 0x40306C20, 0xAE605B02, 0x00000002, + // Block 65, offset 0x1040 + 0x00306C88, 0xAE605B02, 0x00000003, 0x40306C20, 0xAE605B02, 0xAE604702, + 0x00000003, 0x00306C88, 0xAE605B02, 0xAE604702, 0x00000002, 0x40306C20, + 0xAE606402, 0x00000002, 0x00306C88, 0xAE606402, 0x00000002, 0x40306C20, + 0xAE606502, 0x00000002, 0x00306C88, 0xAE606502, 0x00000002, 0x40306C20, + 0xAE606702, 0x00000002, 0x00306C88, 0xAE606702, 0x00000002, 0x40306C20, + 0xAD806802, 0x00000002, 0x00306C88, 0xAD806802, 0x00000003, 0x40306C20, + 0xAD806802, 0xAE603202, 0x00000003, 0x00306C88, 0xAD806802, 0xAE603202, + 0x00000003, 0x40306C20, 0xAD806802, 0xAE603502, 0x00000003, 0x00306C88, + 0xAD806802, 0xAE603502, 0x00000003, 0x40306C20, 0xAD806802, 0xAE604E02, + 0x00000003, 0x00306C88, 0xAD806802, 0xAE604E02, 0x00000003, 0x40306C20, + 0xAD806802, 0xAE606402, 0x00000003, 0x00306C88, + // Block 66, offset 0x1080 + 0xAD806802, 0xAE606402, 0x00000003, 0x40306C20, 0xAD806802, 0xADC07002, + 0x00000003, 0x00306C88, 0xAD806802, 0xADC07002, 0x00000002, 0x40306C20, + 0xADC07002, 0x00000002, 0x00306C88, 0xADC07002, 0x00000002, 0x40306C20, + 0xADC07502, 0x00000002, 0x00306C88, 0xADC07502, 0x00000002, 0x40306C20, + 0xADC07802, 0x00000002, 0x00306C88, 0xADC07802, 0x00000002, 0x40306C20, + 0xADC07A02, 0x00000002, 0x00306C88, 0xADC07A02, 0x00000003, 0x00306C9D, + 0x002F2C9D, 0x0002BA9C, 0x00000002, 0x4030BE20, 0xAE604E02, 0x00000002, + 0x0030BE88, 0xAE604E02, 0x00000002, 0x4030BE20, 0xADC07002, 0x00000002, + 0x0030BE88, 0xADC07002, 0x00000003, 0x0030BE9D, 0x0009569C, 0x002E829C, + 0x00000004, 0x0030BE84, 0x002D9A84, 0x002D9A84, 0x002D9A9F, 0x00000004, + 0x0030BE8A, 0x002D9A8A, 0x002D9A8A, 0x002D9A9F, + // Block 67, offset 0x10c0 + 0x00000002, 0x0030BE9D, 0x002FE69D, 0x00000002, 0x0030BE84, 0x00310084, + 0x00000002, 0x0030BE8A, 0x0031008A, 0x00000002, 0x4030E220, 0xAE603202, + 0x00000002, 0x0030E288, 0xAE603202, 0x00000002, 0x4030E220, 0xAE603502, + 0x00000002, 0x0030E288, 0xAE603502, 0x00000002, 0x4030E220, 0xAE603C02, + 0x00000002, 0x0030E288, 0xAE603C02, 0x00000002, 0x4030E220, 0xAE604302, + 0x00000002, 0x4030E220, 0xAE604702, 0x00000002, 0x0030E288, 0xAE604702, + 0x00000002, 0x4030E220, 0xAE605202, 0x00000002, 0x0030E288, 0xAE605202, + 0x00000002, 0x4030E220, 0xADC07002, 0x00000002, 0x0030E288, 0xADC07002, + 0x00000002, 0x0030E29D, 0x002C3A9D, 0x00000002, 0x4030F620, 0xAE604702, + 0x00000002, 0x0030F688, 0xAE604702, 0x00000002, 0x4030F620, 0xAE605202, + 0x00000002, 0x0030F688, 0xAE605202, 0x00000002, + // Block 68, offset 0x1100 + 0x40310020, 0xAE603202, 0x00000002, 0x00310088, 0xAE603202, 0x00000002, + 0x40310020, 0xAE603502, 0x00000002, 0x00310088, 0xAE603502, 0x00000002, + 0x40310020, 0xAE603C02, 0x00000002, 0x00310088, 0xAE603C02, 0x00000002, + 0x40310020, 0xAE604302, 0x00000002, 0x40310020, 0xAE604702, 0x00000002, + 0x00310088, 0xAE604702, 0x00000002, 0x40310020, 0xAE604E02, 0x00000002, + 0x00310088, 0xAE604E02, 0x00000002, 0x40310020, 0xAE605202, 0x00000002, + 0x00310088, 0xAE605202, 0x00000002, 0x40310020, 0xAE605B02, 0x00000002, + 0x00310088, 0xAE605B02, 0x00000002, 0x40310020, 0xAE606402, 0x00000002, + 0x00310088, 0xAE606402, 0x00000002, 0x40310020, 0xADC07002, 0x00000002, + 0x00310088, 0xADC07002, 0x00000002, 0x40312A20, 0xAE603202, 0x00000002, + 0x00312A88, 0xAE603202, 0x00000002, 0x40312A20, + // Block 69, offset 0x1140 + 0xAE603C02, 0x00000002, 0x00312A88, 0xAE603C02, 0x00000002, 0x40312A20, + 0xAE604102, 0x00000002, 0x00312A88, 0xAE604102, 0x00000002, 0x40312A20, + 0xAE605202, 0x00000002, 0x00312A88, 0xAE605202, 0x00000002, 0x40312A20, + 0xADC07002, 0x00000002, 0x00312A88, 0xADC07002, 0x00000002, 0x40312A20, + 0xADC07B02, 0x00000002, 0x00312A88, 0xADC07B02, 0x00000002, 0x00312A84, + 0x0030E284, 0x00000002, 0x40316420, 0xAE604102, 0x00000002, 0x00316488, + 0xAE604102, 0x00000002, 0x40325220, 0xAE602202, 0x00000002, 0x00325288, + 0xAE602202, 0x00000003, 0x40325220, 0xAE602202, 0xAE603202, 0x00000003, + 0x00325288, 0xAE602202, 0xAE603202, 0x00000004, 0x40325220, 0xAE602202, + 0xAE603202, 0xAF007F02, 0x00000004, 0x00325288, 0xAE602202, 0xAE603202, + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602202, + // Block 70, offset 0x1180 + 0xAE603502, 0x00000003, 0x00325288, 0xAE602202, 0xAE603502, 0x00000004, + 0x40325220, 0xAE602202, 0xAE603502, 0xAF007F02, 0x00000004, 0x00325288, + 0xAE602202, 0xAE603502, 0xAF007F02, 0x00000003, 0x40325220, 0xAE602202, + 0xAE604502, 0x00000003, 0x00325288, 0xAE602202, 0xAE604502, 0x00000004, + 0x40325220, 0xAE602202, 0xAE604502, 0xAF007F02, 0x00000004, 0x00325288, + 0xAE602202, 0xAE604502, 0xAF007F02, 0x00000003, 0x40325220, 0xAE602202, + 0xAF007F02, 0x00000003, 0x00325288, 0xAE602202, 0xAF007F02, 0x00000002, + 0x40325220, 0xAE602A02, 0x00000002, 0x00325288, 0xAE602A02, 0x00000003, + 0x40325220, 0xAE602A02, 0xAE603202, 0x00000003, 0x00325288, 0xAE602A02, + 0xAE603202, 0x00000004, 0x40325220, 0xAE602A02, 0xAE603202, 0xAF007F02, + 0x00000004, 0x00325288, 0xAE602A02, 0xAE603202, + // Block 71, offset 0x11c0 + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602A02, 0xAE603502, 0x00000003, + 0x00325288, 0xAE602A02, 0xAE603502, 0x00000004, 0x40325220, 0xAE602A02, + 0xAE603502, 0xAF007F02, 0x00000004, 0x00325288, 0xAE602A02, 0xAE603502, + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602A02, 0xAE604502, 0x00000003, + 0x00325288, 0xAE602A02, 0xAE604502, 0x00000004, 0x40325220, 0xAE602A02, + 0xAE604502, 0xAF007F02, 0x00000004, 0x00325288, 0xAE602A02, 0xAE604502, + 0xAF007F02, 0x00000003, 0x40325220, 0xAE602A02, 0xAF007F02, 0x00000003, + 0x00325288, 0xAE602A02, 0xAF007F02, 0x00000002, 0x40325220, 0xAE603202, + 0x00000002, 0x00325288, 0xAE603202, 0x00000003, 0x40325220, 0xAE603202, + 0xAF007F02, 0x00000002, 0x40325220, 0xAE603502, 0x00000002, 0x00325288, + 0xAE603502, 0x00000003, 0x40325220, 0xAE603502, + // Block 72, offset 0x1200 + 0xAF007F02, 0x00000002, 0x40325220, 0xAE603702, 0x00000002, 0x00325288, + 0xAE603702, 0x00000002, 0x40325220, 0xAE604502, 0x00000003, 0x40325220, + 0xAE604502, 0xAF007F02, 0x00000002, 0x40325220, 0xAE605B02, 0x00000002, + 0x00325288, 0xAE605B02, 0x00000002, 0x40325220, 0xAF007F02, 0x00000002, + 0x00325288, 0xAF007F02, 0x00000002, 0x40325C20, 0xAE602202, 0x00000002, + 0x00325C88, 0xAE602202, 0x00000003, 0x40325C20, 0xAE602202, 0xAE603202, + 0x00000003, 0x00325C88, 0xAE602202, 0xAE603202, 0x00000003, 0x40325C20, + 0xAE602202, 0xAE603502, 0x00000003, 0x00325C88, 0xAE602202, 0xAE603502, + 0x00000002, 0x40325C20, 0xAE602A02, 0x00000002, 0x00325C88, 0xAE602A02, + 0x00000003, 0x40325C20, 0xAE602A02, 0xAE603202, 0x00000003, 0x00325C88, + 0xAE602A02, 0xAE603202, 0x00000003, 0x40325C20, + // Block 73, offset 0x1240 + 0xAE602A02, 0xAE603502, 0x00000003, 0x00325C88, 0xAE602A02, 0xAE603502, + 0x00000002, 0x40325C20, 0xAE603202, 0x00000002, 0x00325C88, 0xAE603202, + 0x00000002, 0x40325C20, 0xAE603502, 0x00000002, 0x00325C88, 0xAE603502, + 0x00000002, 0x40326820, 0xAE602202, 0x00000002, 0x00326888, 0xAE602202, + 0x00000003, 0x40326820, 0xAE602202, 0xAE603202, 0x00000003, 0x00326888, + 0xAE602202, 0xAE603202, 0x00000004, 0x40326820, 0xAE602202, 0xAE603202, + 0xAF007F02, 0x00000004, 0x00326888, 0xAE602202, 0xAE603202, 0xAF007F02, + 0x00000003, 0x40326820, 0xAE602202, 0xAE603502, 0x00000003, 0x00326888, + 0xAE602202, 0xAE603502, 0x00000004, 0x40326820, 0xAE602202, 0xAE603502, + 0xAF007F02, 0x00000004, 0x00326888, 0xAE602202, 0xAE603502, 0xAF007F02, + 0x00000003, 0x40326820, 0xAE602202, 0xAE604502, + // Block 74, offset 0x1280 + 0x00000003, 0x00326888, 0xAE602202, 0xAE604502, 0x00000004, 0x40326820, + 0xAE602202, 0xAE604502, 0xAF007F02, 0x00000004, 0x00326888, 0xAE602202, + 0xAE604502, 0xAF007F02, 0x00000003, 0x40326820, 0xAE602202, 0xAF007F02, + 0x00000003, 0x00326888, 0xAE602202, 0xAF007F02, 0x00000002, 0x40326820, + 0xAE602A02, 0x00000002, 0x00326888, 0xAE602A02, 0x00000003, 0x40326820, + 0xAE602A02, 0xAE603202, 0x00000003, 0x00326888, 0xAE602A02, 0xAE603202, + 0x00000004, 0x40326820, 0xAE602A02, 0xAE603202, 0xAF007F02, 0x00000004, + 0x00326888, 0xAE602A02, 0xAE603202, 0xAF007F02, 0x00000003, 0x40326820, + 0xAE602A02, 0xAE603502, 0x00000003, 0x00326888, 0xAE602A02, 0xAE603502, + 0x00000004, 0x40326820, 0xAE602A02, 0xAE603502, 0xAF007F02, 0x00000004, + 0x00326888, 0xAE602A02, 0xAE603502, 0xAF007F02, + // Block 75, offset 0x12c0 + 0x00000003, 0x40326820, 0xAE602A02, 0xAE604502, 0x00000003, 0x00326888, + 0xAE602A02, 0xAE604502, 0x00000004, 0x40326820, 0xAE602A02, 0xAE604502, + 0xAF007F02, 0x00000004, 0x00326888, 0xAE602A02, 0xAE604502, 0xAF007F02, + 0x00000003, 0x40326820, 0xAE602A02, 0xAF007F02, 0x00000003, 0x00326888, + 0xAE602A02, 0xAF007F02, 0x00000002, 0x40326820, 0xAE603202, 0x00000002, + 0x00326888, 0xAE603202, 0x00000003, 0x40326820, 0xAE603202, 0xAF007F02, + 0x00000002, 0x40326820, 0xAE603502, 0x00000002, 0x00326888, 0xAE603502, + 0x00000003, 0x40326820, 0xAE603502, 0xAF007F02, 0x00000002, 0x40326820, + 0xAE604502, 0x00000003, 0x40326820, 0xAE604502, 0xAF007F02, 0x00000002, + 0x40326820, 0xAF007F02, 0x00000002, 0x00326888, 0xAF007F02, 0x00000002, + 0x40326C20, 0xAE602202, 0x00000002, 0x00326C88, + // Block 76, offset 0x1300 + 0xAE602202, 0x00000003, 0x40326C20, 0xAE602202, 0xAE603202, 0x00000003, + 0x00326C88, 0xAE602202, 0xAE603202, 0x00000003, 0x40326C20, 0xAE602202, + 0xAE603502, 0x00000003, 0x00326C88, 0xAE602202, 0xAE603502, 0x00000003, + 0x40326C20, 0xAE602202, 0xAE604502, 0x00000003, 0x00326C88, 0xAE602202, + 0xAE604502, 0x00000002, 0x40326C20, 0xAE602A02, 0x00000002, 0x00326C88, + 0xAE602A02, 0x00000003, 0x40326C20, 0xAE602A02, 0xAE603202, 0x00000003, + 0x00326C88, 0xAE602A02, 0xAE603202, 0x00000003, 0x40326C20, 0xAE602A02, + 0xAE603502, 0x00000003, 0x00326C88, 0xAE602A02, 0xAE603502, 0x00000003, + 0x40326C20, 0xAE602A02, 0xAE604502, 0x00000003, 0x00326C88, 0xAE602A02, + 0xAE604502, 0x00000002, 0x40326C20, 0xAE603202, 0x00000002, 0x00326C88, + 0xAE603202, 0x00000002, 0x40326C20, 0xAE603502, + // Block 77, offset 0x1340 + 0x00000002, 0x00326C88, 0xAE603502, 0x00000002, 0x40326C20, 0xAE603702, + 0x00000002, 0x00326C88, 0xAE603702, 0x00000002, 0x40326C20, 0xAE604502, + 0x00000002, 0x40326C20, 0xAE604702, 0x00000002, 0x00326C88, 0xAE604702, + 0x00000003, 0x40326C20, 0xAE604702, 0xAE603202, 0x00000003, 0x40326C20, + 0xAE604702, 0xAE603502, 0x00000003, 0x40326C20, 0xAE604702, 0xAE604502, + 0x00000002, 0x40326C20, 0xAE605B02, 0x00000002, 0x00326C88, 0xAE605B02, + 0x00000003, 0x00327084, 0x00325284, 0x00326C84, 0x00000003, 0x0032708A, + 0x00325284, 0x00326C84, 0x00000002, 0x40327C20, 0xAE602202, 0x00000002, + 0x00327C88, 0xAE602202, 0x00000003, 0x40327C20, 0xAE602202, 0xAE603202, + 0x00000003, 0x00327C88, 0xAE602202, 0xAE603202, 0x00000003, 0x40327C20, + 0xAE602202, 0xAE603502, 0x00000003, 0x00327C88, + // Block 78, offset 0x1380 + 0xAE602202, 0xAE603502, 0x00000002, 0x40327C20, 0xAE602A02, 0x00000002, + 0x00327C88, 0xAE602A02, 0x00000003, 0x40327C20, 0xAE602A02, 0xAE603202, + 0x00000003, 0x00327C88, 0xAE602A02, 0xAE603202, 0x00000003, 0x40327C20, + 0xAE602A02, 0xAE603502, 0x00000003, 0x00327C88, 0xAE602A02, 0xAE603502, + 0x00000002, 0x40327C20, 0xAE603202, 0x00000002, 0x00327C88, 0xAE603202, + 0x00000002, 0x40327C20, 0xAE603502, 0x00000002, 0x00327C88, 0xAE603502, + 0x00000002, 0x40328820, 0xAE602202, 0x00000002, 0x40328820, 0xAE602A02, + 0x00000002, 0x00328888, 0xAE602A02, 0x00000002, 0x40329820, 0xAE602202, + 0x00000003, 0x40329820, 0xAE602202, 0xAE603202, 0x00000003, 0x40329820, + 0xAE602202, 0xAE603502, 0x00000003, 0x40329820, 0xAE602202, 0xAE604502, + 0x00000002, 0x40329820, 0xAE602A02, 0x00000002, + // Block 79, offset 0x13c0 + 0x00329888, 0xAE602A02, 0x00000003, 0x40329820, 0xAE602A02, 0xAE603202, + 0x00000003, 0x00329888, 0xAE602A02, 0xAE603202, 0x00000003, 0x40329820, + 0xAE602A02, 0xAE603502, 0x00000003, 0x00329888, 0xAE602A02, 0xAE603502, + 0x00000003, 0x40329820, 0xAE602A02, 0xAE604502, 0x00000003, 0x00329888, + 0xAE602A02, 0xAE604502, 0x00000002, 0x40329820, 0xAE603202, 0x00000002, + 0x00329888, 0xAE603202, 0x00000002, 0x40329820, 0xAE603502, 0x00000002, + 0x00329888, 0xAE603502, 0x00000002, 0x40329820, 0xAE603702, 0x00000002, + 0x00329888, 0xAE603702, 0x00000002, 0x40329820, 0xAE604502, 0x00000002, + 0x40329820, 0xAE604702, 0x00000002, 0x00329888, 0xAE604702, 0x00000003, + 0x40329820, 0xAE604702, 0xAE603202, 0x00000003, 0x40329820, 0xAE604702, + 0xAE603502, 0x00000003, 0x40329820, 0xAE604702, + // Block 80, offset 0x1400 + 0xAE604502, 0x00000002, 0x40329820, 0xAE605B02, 0x00000002, 0x00329888, + 0xAE605B02, 0x00000002, 0x4032A220, 0xAE602202, 0x00000002, 0x0032A288, + 0xAE602202, 0x00000003, 0x4032A220, 0xAE602202, 0xAE603202, 0x00000003, + 0x0032A288, 0xAE602202, 0xAE603202, 0x00000004, 0x4032A220, 0xAE602202, + 0xAE603202, 0xAF007F02, 0x00000004, 0x0032A288, 0xAE602202, 0xAE603202, + 0xAF007F02, 0x00000003, 0x4032A220, 0xAE602202, 0xAE603502, 0x00000003, + 0x0032A288, 0xAE602202, 0xAE603502, 0x00000004, 0x4032A220, 0xAE602202, + 0xAE603502, 0xAF007F02, 0x00000004, 0x0032A288, 0xAE602202, 0xAE603502, + 0xAF007F02, 0x00000003, 0x4032A220, 0xAE602202, 0xAE604502, 0x00000003, + 0x0032A288, 0xAE602202, 0xAE604502, 0x00000004, 0x4032A220, 0xAE602202, + 0xAE604502, 0xAF007F02, 0x00000004, 0x0032A288, + // Block 81, offset 0x1440 + 0xAE602202, 0xAE604502, 0xAF007F02, 0x00000003, 0x4032A220, 0xAE602202, + 0xAF007F02, 0x00000003, 0x0032A288, 0xAE602202, 0xAF007F02, 0x00000002, + 0x4032A220, 0xAE602A02, 0x00000002, 0x0032A288, 0xAE602A02, 0x00000003, + 0x4032A220, 0xAE602A02, 0xAE603202, 0x00000003, 0x0032A288, 0xAE602A02, + 0xAE603202, 0x00000004, 0x4032A220, 0xAE602A02, 0xAE603202, 0xAF007F02, + 0x00000004, 0x0032A288, 0xAE602A02, 0xAE603202, 0xAF007F02, 0x00000003, + 0x4032A220, 0xAE602A02, 0xAE603502, 0x00000003, 0x0032A288, 0xAE602A02, + 0xAE603502, 0x00000004, 0x4032A220, 0xAE602A02, 0xAE603502, 0xAF007F02, + 0x00000004, 0x0032A288, 0xAE602A02, 0xAE603502, 0xAF007F02, 0x00000003, + 0x4032A220, 0xAE602A02, 0xAE604502, 0x00000003, 0x0032A288, 0xAE602A02, + 0xAE604502, 0x00000004, 0x4032A220, 0xAE602A02, + // Block 82, offset 0x1480 + 0xAE604502, 0xAF007F02, 0x00000004, 0x0032A288, 0xAE602A02, 0xAE604502, + 0xAF007F02, 0x00000003, 0x4032A220, 0xAE602A02, 0xAF007F02, 0x00000003, + 0x0032A288, 0xAE602A02, 0xAF007F02, 0x00000002, 0x4032A220, 0xAE603202, + 0x00000002, 0x0032A288, 0xAE603202, 0x00000003, 0x4032A220, 0xAE603202, + 0xAF007F02, 0x00000002, 0x4032A220, 0xAE603502, 0x00000002, 0x0032A288, + 0xAE603502, 0x00000003, 0x4032A220, 0xAE603502, 0xAF007F02, 0x00000002, + 0x4032A220, 0xAE604502, 0x00000003, 0x4032A220, 0xAE604502, 0xAF007F02, + 0x00000002, 0x4032A220, 0xAF007F02, 0x00000002, 0x0032A288, 0xAF007F02, + 0x00000003, 0x0032C084, 0x0032AA84, 0x0032BE84, 0x00000002, 0x00336284, + 0xA0013A04, 0x00000002, 0x0033628A, 0xA0013A04, 0x00000002, 0x4033B220, + 0xAE603502, 0x00000002, 0x0033B288, 0xAE603502, + // Block 83, offset 0x14c0 + 0x00000002, 0x4033B220, 0xAE604702, 0x00000002, 0x0033B288, 0xAE604702, + 0x00000002, 0x4033CA20, 0xAE603702, 0x00000002, 0x0033CA88, 0xAE603702, + 0x00000002, 0x40341420, 0xAE603502, 0x00000002, 0x00341488, 0xAE603502, + 0x00000002, 0x40341420, 0xAE605B02, 0x00000002, 0x00341488, 0xAE605B02, + 0x00000002, 0x84E61A9D, 0x84E61AA6, 0x00000002, 0x40357220, 0xAE605B02, + 0x00000002, 0x00357288, 0xAE605B02, 0x00000002, 0x40389020, 0xA1108C02, + 0x00000002, 0x40389020, 0xA1208D02, 0x00000002, 0x40389020, 0xA1509202, + 0x00000002, 0x40389220, 0xA1509202, 0x00000002, 0x40389220, 0xA1709502, + 0x00000002, 0x40389420, 0xA1509202, 0x00000002, 0x40389620, 0xA1509202, + 0x00000002, 0x40389820, 0xA1509202, 0x00000002, 0x40389A20, 0xA1308E02, + 0x00000002, 0x40389A20, 0xA1509202, 0x00000002, + // Block 84, offset 0x1500 + 0x00389A84, 0x00389A84, 0x00000002, 0x00389A84, 0x0038A284, 0x00000002, + 0x40389C20, 0xA1509202, 0x00000002, 0x4038A020, 0xA1509202, 0x00000002, + 0x4038A220, 0xA0E08902, 0x00000002, 0x4038A220, 0xA1509202, 0x00000002, + 0x0038A284, 0x0038A284, 0x00000003, 0x0038A284, 0x0038A284, 0xA1108C02, + 0x00000002, 0x4038A420, 0xA1509202, 0x00000002, 0x0038A499, 0xA1509202, + 0x00000002, 0x4038A420, 0xA1709502, 0x00000002, 0x4038A620, 0xA1509202, + 0x00000002, 0x4038A820, 0xA1509202, 0x00000002, 0x4038AA20, 0xA1509202, + 0x00000002, 0x4038AC20, 0xA1509202, 0x00000002, 0x4038B020, 0xA1509202, + 0x00000002, 0x0038B099, 0xA1509202, 0x00000002, 0x4038B020, 0xA1709502, + 0x00000002, 0x4038B220, 0xA1509202, 0x00000002, 0x4038B420, 0xA1509202, + 0x00000002, 0x4038B620, 0xA1509202, 0x00000002, + // Block 85, offset 0x1540 + 0x4038B820, 0xA1909002, 0x00000002, 0x4038B820, 0xA1809102, 0x00000002, + 0x4038B820, 0xA1509202, 0x00000003, 0x4038B820, 0xA1509202, 0xA1909002, + 0x00000003, 0x4038B820, 0xA1509202, 0xA1809102, 0x00000002, 0x4038BA20, + 0xA1509202, 0x00000002, 0x00391C84, 0xA0013A04, 0x00000002, 0x00393099, + 0x00393899, 0x00000002, 0x0039309A, 0x0039389A, 0x00000002, 0x00393097, + 0x00396497, 0x00000002, 0x0039309A, 0x0039649A, 0x00000002, 0x00393097, + 0x00397297, 0x00000002, 0x0039309A, 0x0039729A, 0x00000002, 0x00393097, + 0x00397497, 0x00000002, 0x00393099, 0x0039A499, 0x00000002, 0x00393099, + 0x0039A699, 0x00000002, 0x00393097, 0x003A4E97, 0x00000002, 0x00393098, + 0x003A4E98, 0x00000002, 0x00393099, 0x003A4E99, 0x00000002, 0x0039309A, + 0x003A4E9A, 0x00000002, 0x00393099, 0x003A5699, + // Block 86, offset 0x1580 + 0x00000002, 0x00393097, 0x003A6897, 0x00000002, 0x00393098, 0x003A6898, + 0x00000002, 0x00393099, 0x003A7299, 0x00000002, 0x0039309A, 0x003A729A, + 0x00000002, 0x00393099, 0x003A7499, 0x00000002, 0x0039309A, 0x003A749A, + 0x00000002, 0x00393099, 0x003A7A99, 0x00000002, 0x0039309A, 0x003A7A9A, + 0x00000002, 0x00393099, 0x003A7C99, 0x00000002, 0x0039309A, 0x003A7C9A, + 0x00000002, 0x00393099, 0x003A7E99, 0x00000002, 0x0039309A, 0x003A7E9A, + 0x00000002, 0x00393097, 0x003A8E97, 0x00000002, 0x00393099, 0x003A8E99, + 0x00000002, 0x00393099, 0x003A8E99, 0x00000002, 0x0039309A, 0x003A8E9A, + 0x00000002, 0x0039309A, 0x003A8E9A, 0x00000002, 0x00393099, 0x003A9099, + 0x00000002, 0x0039309A, 0x003A909A, 0x00000002, 0x00393097, 0x003A9897, + 0x00000002, 0x00393099, 0x003A9899, 0x00000002, + // Block 87, offset 0x15c0 + 0x0039309A, 0x003A989A, 0x00000004, 0x0039389A, 0x003A1A9A, 0x00393C9A, + 0x0039A49A, 0x00000004, 0x0039389A, 0x003A409A, 0x003A409A, 0x003A689A, + 0x00000003, 0x00393C99, 0x00397299, 0x003A9099, 0x00000003, 0x00393C99, + 0x00397499, 0x003A9099, 0x00000003, 0x00395697, 0x00396497, 0x003A4E97, + 0x00000003, 0x00395699, 0x00396499, 0x003A8E99, 0x00000003, 0x00395699, + 0x00396499, 0x003A9099, 0x00000003, 0x00395697, 0x00397297, 0x00396497, + 0x00000003, 0x00395699, 0x00397299, 0x00396499, 0x00000003, 0x00395697, + 0x00397297, 0x003A4E97, 0x00000003, 0x00395697, 0x00397497, 0x003A4E97, + 0x00000003, 0x00395699, 0x00397499, 0x003A8E99, 0x00000003, 0x00395699, + 0x00397499, 0x003A9099, 0x00000003, 0x00395697, 0x003A4E97, 0x00396497, + 0x00000003, 0x00395697, 0x003A4E97, 0x00397297, + // Block 88, offset 0x1600 + 0x00000003, 0x00395697, 0x003A4E97, 0x00397497, 0x00000003, 0x00395699, + 0x003A4E99, 0x003A8E99, 0x00000003, 0x00395699, 0x003A4E99, 0x003A9099, + 0x00000003, 0x00396499, 0x00397299, 0x003A8E99, 0x00000003, 0x00396499, + 0x00397299, 0x003A9099, 0x00000008, 0x0039649A, 0x003A409A, 0x0002129A, + 0x0039649A, 0x003A409A, 0x0039389A, 0x003A409A, 0x003A689A, 0x00000003, + 0x00396497, 0x003A4E97, 0x00397297, 0x00000003, 0x00396499, 0x003A4E99, + 0x00397299, 0x00000003, 0x00396499, 0x003A4E99, 0x003A8E99, 0x00000003, + 0x00396499, 0x003A4E99, 0x003A9099, 0x00000003, 0x00397299, 0x00396499, + 0x003A9099, 0x00000003, 0x00397299, 0x003A4E99, 0x003A8E99, 0x00000003, + 0x00397299, 0x003A4E99, 0x003A9099, 0x00000004, 0x0039A49A, 0x0039C69A, + 0x003A749A, 0x003A409A, 0x00000003, 0x0039C697, + // Block 89, offset 0x1640 + 0x00396497, 0x00397297, 0x00000003, 0x0039C699, 0x00396499, 0x003A8E99, + 0x00000003, 0x0039C697, 0x00397297, 0x00396497, 0x00000003, 0x0039C699, + 0x00397499, 0x003A8E99, 0x00000003, 0x0039C699, 0x00397499, 0x003A9099, + 0x00000003, 0x0039C697, 0x003A4E97, 0x00396497, 0x00000003, 0x0039C697, + 0x003A4E97, 0x00397297, 0x00000003, 0x0039C699, 0x003A4E99, 0x00397299, + 0x00000003, 0x0039C697, 0x003A4E97, 0x003A4E97, 0x00000003, 0x0039C699, + 0x003A4E99, 0x003A4E99, 0x00000003, 0x0039C899, 0x00396499, 0x003A9099, + 0x00000003, 0x0039C897, 0x00397297, 0x003A4E97, 0x00000003, 0x0039C899, + 0x00397299, 0x003A4E99, 0x00000003, 0x0039C899, 0x00397299, 0x003A9099, + 0x00000003, 0x0039C897, 0x003A4E97, 0x00397497, 0x00000003, 0x0039C899, + 0x003A4E99, 0x00397499, 0x00000003, 0x0039C897, + // Block 90, offset 0x1680 + 0x003A4E97, 0x003A4E97, 0x00000003, 0x0039C899, 0x003A4E99, 0x003A4E99, + 0x00000003, 0x0039DC97, 0x00397297, 0x00397297, 0x00000003, 0x0039DC99, + 0x00397299, 0x00397299, 0x00000003, 0x0039DC99, 0x00397299, 0x003A9099, + 0x00000004, 0x0039DC9A, 0x003A409A, 0x0039EE9A, 0x003A4E9A, 0x00000003, + 0x0039DC9A, 0x003A409A, 0x003A8E9A, 0x00000012, 0x0039DC9A, 0x003A409A, + 0x003A8E9A, 0x0002129A, 0x0039389A, 0x003A409A, 0x003A409A, 0x003A689A, + 0x0002129A, 0x0039EE9A, 0x003A409A, 0x003A909A, 0x003A689A, 0x0002129A, + 0x003A749A, 0x0039C69A, 0x003A409A, 0x003A4E9A, 0x00000003, 0x0039DC9A, + 0x003A409A, 0x003AAA9A, 0x00000003, 0x0039DC97, 0x003A4E97, 0x003A4E97, + 0x00000003, 0x0039DC99, 0x003A4E99, 0x003A4E99, 0x00000003, 0x0039DE99, + 0x00397299, 0x003A8E99, 0x00000003, 0x0039DE99, + // Block 91, offset 0x16c0 + 0x00397299, 0x003A9099, 0x00000003, 0x0039DE97, 0x00397497, 0x003A4E97, + 0x00000003, 0x0039DE99, 0x00397499, 0x003A4E99, 0x00000003, 0x0039E697, + 0x003A4E97, 0x00397297, 0x00000003, 0x0039E699, 0x003A4E99, 0x00397299, + 0x00000003, 0x0039E697, 0x003A4E97, 0x003A4E97, 0x00000003, 0x0039E699, + 0x003A4E99, 0x003A9099, 0x00000003, 0x0039EE97, 0x00396497, 0x003A4E97, + 0x00000003, 0x0039EE99, 0x00396499, 0x003A4E99, 0x00000004, 0x0039EE9A, + 0x003A409A, 0x003A909A, 0x003A689A, 0x00000003, 0x0039EE97, 0x003A4E97, + 0x003A4E97, 0x00000003, 0x0039EE99, 0x003A4E99, 0x003A4E99, 0x00000003, + 0x0039EE99, 0x003A4E99, 0x003A8E99, 0x00000003, 0x0039EE99, 0x003A4E99, + 0x003A9099, 0x00000003, 0x0039F099, 0x003A4E99, 0x003A4E99, 0x00000003, + 0x0039F099, 0x003A4E99, 0x003A8E99, 0x00000003, + // Block 92, offset 0x1700 + 0x0039F099, 0x003A4E99, 0x003A9099, 0x00000003, 0x0039FC97, 0x00397497, + 0x003A4E97, 0x00000003, 0x0039FC99, 0x00397499, 0x003A4E99, 0x00000003, + 0x0039FC99, 0x003A4E99, 0x003A9099, 0x00000003, 0x003A129A, 0x003A409A, + 0x003AAA9A, 0x00000003, 0x003A1297, 0x003A4E97, 0x00397297, 0x00000003, + 0x003A1299, 0x003A4E99, 0x00397299, 0x00000003, 0x003A1299, 0x003A4E99, + 0x003A4E99, 0x00000003, 0x003A1299, 0x003A4E99, 0x003A9099, 0x00000003, + 0x003A1A97, 0x003A4E97, 0x003A4E97, 0x00000003, 0x003A1A99, 0x003A4E99, + 0x003A4E99, 0x00000003, 0x003A1A99, 0x003A4E99, 0x003A9099, 0x00000002, + 0x003A4099, 0x00391E99, 0x00000002, 0x003A409A, 0x00391E9A, 0x00000002, + 0x003A4099, 0x00392099, 0x00000002, 0x003A409A, 0x0039209A, 0x00000002, + 0x003A4099, 0x00392899, 0x00000002, 0x003A409A, + // Block 93, offset 0x1740 + 0x0039289A, 0x00000003, 0x003A4097, 0x00396497, 0x00396497, 0x00000003, + 0x003A4099, 0x00396499, 0x00396499, 0x00000003, 0x003A4097, 0x00396497, + 0x003A4E97, 0x00000003, 0x003A4099, 0x00396499, 0x003A4E99, 0x00000003, + 0x003A4099, 0x00396499, 0x003A9099, 0x00000003, 0x003A4097, 0x00397297, + 0x003A4E97, 0x00000003, 0x003A4099, 0x00397299, 0x003A4E99, 0x00000003, + 0x003A4099, 0x00397299, 0x003A8E99, 0x00000003, 0x003A4099, 0x00397299, + 0x003A9099, 0x00000003, 0x003A4097, 0x00397497, 0x003A4E97, 0x00000003, + 0x003A4099, 0x00397499, 0x003A4E99, 0x00000003, 0x003A4097, 0x003A4E97, + 0x00397297, 0x00000003, 0x003A4099, 0x003A4E99, 0x00397299, 0x00000003, + 0x003A4099, 0x003A4E99, 0x003A9099, 0x00000002, 0x003A4E84, 0xA0013A04, + 0x00000003, 0x003A4E97, 0x00396497, 0x00397297, + // Block 94, offset 0x1780 + 0x00000003, 0x003A4E97, 0x00396497, 0x00397497, 0x00000003, 0x003A4E97, + 0x00396497, 0x003A4E97, 0x00000003, 0x003A4E99, 0x00396499, 0x003A9099, + 0x00000003, 0x003A4E97, 0x00397297, 0x00396497, 0x00000003, 0x003A4E97, + 0x00397297, 0x003A4E97, 0x00000004, 0x003A4E9A, 0x0039729A, 0x003A4E9A, + 0x0039889A, 0x00000003, 0x003A4E99, 0x00397299, 0x003A9099, 0x00000003, + 0x003A4E97, 0x00397497, 0x00396497, 0x00000003, 0x003A4E97, 0x00397497, + 0x003A4E97, 0x00000003, 0x003A4E99, 0x00397499, 0x003A9099, 0x00000003, + 0x003A4E99, 0x003A4E99, 0x003A9099, 0x00000003, 0x003A5697, 0x00396497, + 0x00397297, 0x00000003, 0x003A5699, 0x00396499, 0x00397299, 0x00000003, + 0x003A5697, 0x00396497, 0x003A4E97, 0x00000003, 0x003A5699, 0x00396499, + 0x003A4E99, 0x00000003, 0x003A5699, 0x00396499, + // Block 95, offset 0x17c0 + 0x003A8E99, 0x00000003, 0x003A5699, 0x00396499, 0x003A9099, 0x00000003, + 0x003A5697, 0x00397297, 0x003A4E97, 0x00000003, 0x003A5699, 0x00397299, + 0x003A8E99, 0x00000003, 0x003A5699, 0x00397299, 0x003A9099, 0x00000003, + 0x003A5699, 0x003A4E99, 0x003A8E99, 0x00000003, 0x003A5699, 0x003A4E99, + 0x003A9099, 0x00000003, 0x003A6897, 0x003A4E97, 0x00396497, 0x00000003, + 0x003A6897, 0x003A4E97, 0x003A4E97, 0x00000002, 0x403A6C20, 0xAE60BE02, + 0x00000002, 0x403A7220, 0xAE60BE02, 0x00000004, 0x003A749A, 0x0039C69A, + 0x003A409A, 0x003A4E9A, 0x00000003, 0x003A9099, 0x00396499, 0x003A9099, + 0x00000003, 0x003A9099, 0x00397299, 0x003A9099, 0x00000003, 0x003A9097, + 0x003A4E97, 0x003A4E97, 0x00000003, 0x003A9099, 0x003A4E99, 0x003A4E99, + 0x00000003, 0x003A9099, 0x003A4E99, 0x003A9099, + // Block 96, offset 0x1800 + 0x00000002, 0x403AAA20, 0xAE60BE02, 0x00000002, 0x003AB284, 0xA0013C04, + 0x00000002, 0x003AB484, 0xA0013A04, 0x00000002, 0x003AB484, 0xA0013C04, + 0x00000002, 0x003AB884, 0xA0013C04, 0x00000002, 0x003AC484, 0xA0013A04, + 0x00000002, 0x003AD884, 0xA0013A04, 0x00000002, 0x003B9484, 0xA0013904, + 0x00000002, 0x003B9684, 0xA0013904, 0x00000002, 0x003B9A84, 0xA0013904, + 0x00000002, 0x403FEC20, 0xA070F102, 0x00000002, 0x403FEE20, 0xA070F102, + 0x00000002, 0x403FF020, 0xA070F102, 0x00000002, 0x403FFC20, 0xA070F102, + 0x00000002, 0x40400A20, 0xA070F102, 0x00000002, 0x40400E20, 0xA070F102, + 0x00000002, 0x40401A20, 0xA070F102, 0x00000002, 0x40401E20, 0xA070F102, + 0x00000002, 0x40402820, 0xA070F102, 0x00000002, 0x40402C20, 0xA070F102, + 0x00000002, 0x40403020, 0xA070F102, 0x00000002, + // Block 97, offset 0x1840 + 0x4040B020, 0xA070F102, 0x00000002, 0x4040B220, 0xA070F102, 0x00000002, + 0x0040B684, 0x0040F884, 0x00000002, 0x4040CA20, 0xA070F102, 0x00000002, + 0x40411620, 0xA070F102, 0x00000002, 0x40411E20, 0xA070F102, 0x00000002, + 0x40412020, 0xA070F102, 0x00000002, 0x40412A20, 0xA070F102, 0x00000002, + 0x40414620, 0xA070F102, 0x00000002, 0x40415420, 0xA070F102, 0x00000002, + 0x40422A20, 0xA070F102, 0x00000002, 0x40422C20, 0xA070F102, 0x00000002, + 0x00442284, 0x00449084, 0x00000002, 0x00443E84, 0x00449084, 0x00000002, + 0x00444884, 0x00449084, 0x00000002, 0x00445884, 0x00449084, 0x00000002, + 0x00445884, 0x00449084, 0x00000002, 0x00445A84, 0x00449084, 0x00000002, + 0x00446684, 0x00449084, 0x00000002, 0x4046AA20, 0xA070F102, 0x00000002, + 0x4046AC20, 0xA070F102, 0x00000002, 0x4046BE20, + // Block 98, offset 0x1880 + 0xA070F102, 0x00000002, 0x40491020, 0x40498420, 0x00000002, 0x40491020, + 0x40498620, 0x00000002, 0x40491020, 0x40498820, 0x00000002, 0x40491020, + 0x40498A20, 0x00000002, 0x40491020, 0x40498C20, 0x00000002, 0x40491220, + 0x40498420, 0x00000002, 0x40491220, 0x40498620, 0x00000002, 0x40491220, + 0x40498820, 0x00000002, 0x40491220, 0x40498A20, 0x00000002, 0x40491220, + 0x40498C20, 0x00000002, 0x40491420, 0x40498420, 0x00000002, 0x40491420, + 0x40498620, 0x00000002, 0x40491420, 0x40498820, 0x00000002, 0x40491420, + 0x40498A20, 0x00000002, 0x40491420, 0x40498C20, 0x00000002, 0x40491620, + 0x40498420, 0x00000002, 0x40491620, 0x40498620, 0x00000002, 0x40491620, + 0x40498820, 0x00000002, 0x40491620, 0x40498A20, 0x00000002, 0x40491620, + 0x40498C20, 0x00000002, 0x40491820, 0x40498420, + // Block 99, offset 0x18c0 + 0x00000002, 0x40491820, 0x40498620, 0x00000002, 0x40491820, 0x40498820, + 0x00000002, 0x40491820, 0x40498A20, 0x00000002, 0x40491820, 0x40498C20, + 0x00000002, 0x40491A20, 0x40498420, 0x00000002, 0x40491A20, 0x40498620, + 0x00000002, 0x40491A20, 0x40498820, 0x00000002, 0x40491A20, 0x40498A20, + 0x00000002, 0x40491A20, 0x40498C20, 0x00000002, 0x40491C20, 0x40498420, + 0x00000002, 0x40491C20, 0x40498620, 0x00000002, 0x40491C20, 0x40498820, + 0x00000002, 0x40491C20, 0x40498A20, 0x00000002, 0x40491C20, 0x40498C20, + 0x00000002, 0x40491E20, 0x40498420, 0x00000002, 0x40491E20, 0x40498620, + 0x00000002, 0x40491E20, 0x40498820, 0x00000002, 0x40491E20, 0x40498A20, + 0x00000002, 0x40491E20, 0x40498C20, 0x00000002, 0x40492020, 0x40498420, + 0x00000002, 0x40492020, 0x40498620, 0x00000002, + // Block 100, offset 0x1900 + 0x40492020, 0x40498820, 0x00000002, 0x40492020, 0x40498A20, 0x00000002, + 0x40492020, 0x40498C20, 0x00000002, 0x40492220, 0x40498420, 0x00000002, + 0x40492220, 0x40498620, 0x00000002, 0x40492220, 0x40498820, 0x00000002, + 0x40492220, 0x40498A20, 0x00000002, 0x40492220, 0x40498C20, 0x00000002, + 0x40492420, 0x40498420, 0x00000002, 0x40492420, 0x40498620, 0x00000002, + 0x40492420, 0x40498820, 0x00000002, 0x40492420, 0x40498A20, 0x00000002, + 0x40492420, 0x40498C20, 0x00000002, 0x40492620, 0x40498420, 0x00000002, + 0x40492620, 0x40498620, 0x00000002, 0x40492620, 0x40498820, 0x00000002, + 0x40492620, 0x40498A20, 0x00000002, 0x40492620, 0x40498C20, 0x00000002, + 0x40492820, 0x40498420, 0x00000002, 0x40492820, 0x40498620, 0x00000002, + 0x40492820, 0x40498820, 0x00000002, 0x40492820, + // Block 101, offset 0x1940 + 0x40498A20, 0x00000002, 0x40492820, 0x40498C20, 0x00000002, 0x40492A20, + 0x40498420, 0x00000002, 0x40492A20, 0x40498620, 0x00000002, 0x40492A20, + 0x40498820, 0x00000002, 0x40492A20, 0x40498A20, 0x00000002, 0x40492A20, + 0x40498C20, 0x00000002, 0x40492C20, 0x40498420, 0x00000002, 0x40492C20, + 0x40498620, 0x00000002, 0x40492C20, 0x40498820, 0x00000002, 0x40492C20, + 0x40498A20, 0x00000002, 0x40492C20, 0x40498C20, 0x00000002, 0x40492E20, + 0x40498420, 0x00000002, 0x40492E20, 0x40498620, 0x00000002, 0x40492E20, + 0x40498820, 0x00000002, 0x40492E20, 0x40498A20, 0x00000002, 0x40492E20, + 0x40498C20, 0x00000002, 0x40493020, 0x40498420, 0x00000002, 0x40493020, + 0x40498620, 0x00000002, 0x40493020, 0x40498820, 0x00000002, 0x40493020, + 0x40498A20, 0x00000002, 0x40493020, 0x40498C20, + // Block 102, offset 0x1980 + 0x00000002, 0x40493220, 0x40498420, 0x00000002, 0x40493220, 0x40498620, + 0x00000002, 0x40493220, 0x40498820, 0x00000002, 0x40493220, 0x40498A20, + 0x00000002, 0x40493220, 0x40498C20, 0x00000002, 0x40493420, 0x40498420, + 0x00000002, 0x40493420, 0x40498620, 0x00000002, 0x40493420, 0x40498820, + 0x00000002, 0x40493420, 0x40498A20, 0x00000002, 0x40493420, 0x40498C20, + 0x00000002, 0x40493620, 0x40498420, 0x00000002, 0x40493620, 0x40498620, + 0x00000002, 0x40493620, 0x40498820, 0x00000002, 0x40493620, 0x40498A20, + 0x00000002, 0x40493620, 0x40498C20, 0x00000002, 0x40493820, 0x40498420, + 0x00000002, 0x40493820, 0x40498620, 0x00000002, 0x40493820, 0x40498820, + 0x00000002, 0x40493820, 0x40498A20, 0x00000002, 0x40493820, 0x40498C20, + 0x00000002, 0x40493A20, 0x40498420, 0x00000002, + // Block 103, offset 0x19c0 + 0x40493A20, 0x40498620, 0x00000002, 0x40493A20, 0x40498820, 0x00000002, + 0x40493A20, 0x40498A20, 0x00000002, 0x40493A20, 0x40498C20, 0x00000002, + 0x40493C20, 0x40498420, 0x00000002, 0x40493C20, 0x40498620, 0x00000002, + 0x40493C20, 0x40498820, 0x00000002, 0x40493C20, 0x40498A20, 0x00000002, + 0x40493C20, 0x40498C20, 0x00000002, 0x40493E20, 0x40498420, 0x00000002, + 0x40493E20, 0x40498620, 0x00000002, 0x40493E20, 0x40498820, 0x00000002, + 0x40493E20, 0x40498A20, 0x00000002, 0x40493E20, 0x40498C20, 0x00000002, + 0x40494020, 0x40498420, 0x00000002, 0x40494020, 0x40498620, 0x00000002, + 0x40494020, 0x40498820, 0x00000002, 0x40494020, 0x40498A20, 0x00000002, + 0x40494020, 0x40498C20, 0x00000002, 0x40494220, 0x40498420, 0x00000002, + 0x40494220, 0x40498620, 0x00000002, 0x40494220, + // Block 104, offset 0x1a00 + 0x40498820, 0x00000002, 0x40494220, 0x40498A20, 0x00000002, 0x40494220, + 0x40498C20, 0x00000002, 0x40494420, 0x40498420, 0x00000002, 0x40494420, + 0x40498620, 0x00000002, 0x40494420, 0x40498820, 0x00000002, 0x40494420, + 0x40498A20, 0x00000002, 0x40494420, 0x40498C20, 0x00000002, 0x40494620, + 0x40498420, 0x00000002, 0x40494620, 0x40498620, 0x00000002, 0x40494620, + 0x40498820, 0x00000002, 0x40494620, 0x40498A20, 0x00000002, 0x40494620, + 0x40498C20, 0x00000002, 0x40494820, 0x40498420, 0x00000002, 0x40494820, + 0x40498620, 0x00000002, 0x40494820, 0x40498820, 0x00000002, 0x40494820, + 0x40498A20, 0x00000002, 0x40494820, 0x40498C20, 0x00000002, 0x40494A20, + 0x40498420, 0x00000002, 0x40494A20, 0x40498620, 0x00000002, 0x40494A20, + 0x40498820, 0x00000002, 0x40494A20, 0x40498A20, + // Block 105, offset 0x1a40 + 0x00000002, 0x40494A20, 0x40498C20, 0x00000002, 0x40494C20, 0x40498420, + 0x00000002, 0x40494C20, 0x40498620, 0x00000002, 0x40494C20, 0x40498820, + 0x00000002, 0x40494C20, 0x40498A20, 0x00000002, 0x40494C20, 0x40498C20, + 0x00000002, 0x40494E20, 0x40498420, 0x00000002, 0x40494E20, 0x40498620, + 0x00000002, 0x40494E20, 0x40498820, 0x00000002, 0x40494E20, 0x40498A20, + 0x00000002, 0x40494E20, 0x40498C20, 0x00000002, 0x40495020, 0x40498420, + 0x00000002, 0x40495020, 0x40498620, 0x00000002, 0x40495020, 0x40498820, + 0x00000002, 0x40495020, 0x40498A20, 0x00000002, 0x40495020, 0x40498C20, + 0x00000002, 0x40495220, 0x40498420, 0x00000002, 0x40495220, 0x40498620, + 0x00000002, 0x40495220, 0x40498820, 0x00000002, 0x40495220, 0x40498A20, + 0x00000002, 0x40495220, 0x40498C20, 0x00000002, + // Block 106, offset 0x1a80 + 0x40495420, 0x40498420, 0x00000002, 0x40495420, 0x40498620, 0x00000002, + 0x40495420, 0x40498820, 0x00000002, 0x40495420, 0x40498A20, 0x00000002, + 0x40495420, 0x40498C20, 0x00000002, 0x40495620, 0x40498420, 0x00000002, + 0x40495620, 0x40498620, 0x00000002, 0x40495620, 0x40498820, 0x00000002, + 0x40495620, 0x40498A20, 0x00000002, 0x40495620, 0x40498C20, 0x00000002, + 0x40495820, 0x40498420, 0x00000002, 0x40495820, 0x40498620, 0x00000002, + 0x40495820, 0x40498820, 0x00000002, 0x40495820, 0x40498A20, 0x00000002, + 0x40495820, 0x40498C20, 0x00000002, 0x40495A20, 0x40498420, 0x00000002, + 0x40495A20, 0x40498620, 0x00000002, 0x40495A20, 0x40498820, 0x00000002, + 0x40495A20, 0x40498A20, 0x00000002, 0x40495A20, 0x40498C20, 0x00000002, + 0x40495C20, 0x40498420, 0x00000002, 0x40495C20, + // Block 107, offset 0x1ac0 + 0x40498620, 0x00000002, 0x40495C20, 0x40498820, 0x00000002, 0x40495C20, + 0x40498A20, 0x00000002, 0x40495C20, 0x40498C20, 0x00000002, 0x40495E20, + 0x40498420, 0x00000002, 0x40495E20, 0x40498620, 0x00000002, 0x40495E20, + 0x40498820, 0x00000002, 0x40495E20, 0x40498A20, 0x00000002, 0x40495E20, + 0x40498C20, 0x00000002, 0x40496020, 0x40498420, 0x00000002, 0x40496020, + 0x40498620, 0x00000002, 0x40496020, 0x40498820, 0x00000002, 0x40496020, + 0x40498A20, 0x00000002, 0x40496020, 0x40498C20, 0x00000002, 0x40496220, + 0x40498420, 0x00000002, 0x40496220, 0x40498620, 0x00000002, 0x40496220, + 0x40498820, 0x00000002, 0x40496220, 0x40498A20, 0x00000002, 0x40496220, + 0x40498C20, 0x00000002, 0x40496420, 0x40498420, 0x00000002, 0x40496420, + 0x40498620, 0x00000002, 0x40496420, 0x40498820, + // Block 108, offset 0x1b00 + 0x00000002, 0x40496420, 0x40498A20, 0x00000002, 0x40496420, 0x40498C20, + 0x00000002, 0x40496620, 0x40498420, 0x00000002, 0x40496620, 0x40498620, + 0x00000002, 0x40496620, 0x40498820, 0x00000002, 0x40496620, 0x40498A20, + 0x00000002, 0x40496620, 0x40498C20, 0x00000002, 0x40496820, 0x40498420, + 0x00000002, 0x40496820, 0x40498620, 0x00000002, 0x40496820, 0x40498820, + 0x00000002, 0x40496820, 0x40498A20, 0x00000002, 0x40496820, 0x40498C20, + 0x00000002, 0x40496A20, 0x40498420, 0x00000002, 0x40496A20, 0x40498620, + 0x00000002, 0x40496A20, 0x40498820, 0x00000002, 0x40496A20, 0x40498A20, + 0x00000002, 0x40496A20, 0x40498C20, 0x00000002, 0x40499020, 0x4049E620, + 0x00000002, 0x40499020, 0x4049E820, 0x00000002, 0x40499020, 0x4049EA20, + 0x00000002, 0x40499020, 0x4049EC20, 0x00000002, + // Block 109, offset 0x1b40 + 0x40499020, 0x4049EE20, 0x00000002, 0x40499220, 0x4049E620, 0x00000002, + 0x40499220, 0x4049E820, 0x00000002, 0x40499220, 0x4049EA20, 0x00000002, + 0x40499220, 0x4049EC20, 0x00000002, 0x40499220, 0x4049EE20, 0x00000002, + 0x40499420, 0x4049E620, 0x00000002, 0x40499420, 0x4049E820, 0x00000002, + 0x40499420, 0x4049EA20, 0x00000002, 0x40499420, 0x4049EC20, 0x00000002, + 0x40499420, 0x4049EE20, 0x00000002, 0x40499620, 0x4049E620, 0x00000002, + 0x40499620, 0x4049E820, 0x00000002, 0x40499620, 0x4049EA20, 0x00000002, + 0x40499620, 0x4049EC20, 0x00000002, 0x40499620, 0x4049EE20, 0x00000002, + 0x40499820, 0x4049E620, 0x00000002, 0x40499820, 0x4049E820, 0x00000002, + 0x40499820, 0x4049EA20, 0x00000002, 0x40499820, 0x4049EC20, 0x00000002, + 0x40499820, 0x4049EE20, 0x00000002, 0x40499A20, + // Block 110, offset 0x1b80 + 0x4049E620, 0x00000002, 0x40499A20, 0x4049E820, 0x00000002, 0x40499A20, + 0x4049EA20, 0x00000002, 0x40499A20, 0x4049EC20, 0x00000002, 0x40499A20, + 0x4049EE20, 0x00000002, 0x40499C20, 0x4049E620, 0x00000002, 0x40499C20, + 0x4049E820, 0x00000002, 0x40499C20, 0x4049EA20, 0x00000002, 0x40499C20, + 0x4049EC20, 0x00000002, 0x40499C20, 0x4049EE20, 0x00000002, 0x40499E20, + 0x4049E620, 0x00000002, 0x40499E20, 0x4049E820, 0x00000002, 0x40499E20, + 0x4049EA20, 0x00000002, 0x40499E20, 0x4049EC20, 0x00000002, 0x40499E20, + 0x4049EE20, 0x00000002, 0x4049A020, 0x4049E620, 0x00000002, 0x4049A020, + 0x4049E820, 0x00000002, 0x4049A020, 0x4049EA20, 0x00000002, 0x4049A020, + 0x4049EC20, 0x00000002, 0x4049A020, 0x4049EE20, 0x00000002, 0x4049A220, + 0x4049E620, 0x00000002, 0x4049A220, 0x4049E820, + // Block 111, offset 0x1bc0 + 0x00000002, 0x4049A220, 0x4049EA20, 0x00000002, 0x4049A220, 0x4049EC20, + 0x00000002, 0x4049A220, 0x4049EE20, 0x00000002, 0x4049A420, 0x4049E620, + 0x00000002, 0x4049A420, 0x4049E820, 0x00000002, 0x4049A420, 0x4049EA20, + 0x00000002, 0x4049A420, 0x4049EC20, 0x00000002, 0x4049A420, 0x4049EE20, + 0x00000002, 0x4049A620, 0x4049E620, 0x00000002, 0x4049A620, 0x4049E820, + 0x00000002, 0x4049A620, 0x4049EA20, 0x00000002, 0x4049A620, 0x4049EC20, + 0x00000002, 0x4049A620, 0x4049EE20, 0x00000002, 0x4049A820, 0x4049E620, + 0x00000002, 0x4049A820, 0x4049E820, 0x00000002, 0x4049A820, 0x4049EA20, + 0x00000002, 0x4049A820, 0x4049EC20, 0x00000002, 0x4049A820, 0x4049EE20, + 0x00000002, 0x4049AA20, 0x4049E620, 0x00000002, 0x4049AA20, 0x4049E820, + 0x00000002, 0x4049AA20, 0x4049EA20, 0x00000002, + // Block 112, offset 0x1c00 + 0x4049AA20, 0x4049EC20, 0x00000002, 0x4049AA20, 0x4049EE20, 0x00000002, + 0x4049AC20, 0x4049E620, 0x00000002, 0x4049AC20, 0x4049E820, 0x00000002, + 0x4049AC20, 0x4049EA20, 0x00000002, 0x4049AC20, 0x4049EC20, 0x00000002, + 0x4049AC20, 0x4049EE20, 0x00000002, 0x4049AE20, 0x4049E620, 0x00000002, + 0x4049AE20, 0x4049E820, 0x00000002, 0x4049AE20, 0x4049EA20, 0x00000002, + 0x4049AE20, 0x4049EC20, 0x00000002, 0x4049AE20, 0x4049EE20, 0x00000002, + 0x4049B020, 0x4049E620, 0x00000002, 0x4049B020, 0x4049E820, 0x00000002, + 0x4049B020, 0x4049EA20, 0x00000002, 0x4049B020, 0x4049EC20, 0x00000002, + 0x4049B020, 0x4049EE20, 0x00000002, 0x4049B220, 0x4049E620, 0x00000002, + 0x4049B220, 0x4049E820, 0x00000002, 0x4049B220, 0x4049EA20, 0x00000002, + 0x4049B220, 0x4049EC20, 0x00000002, 0x4049B220, + // Block 113, offset 0x1c40 + 0x4049EE20, 0x00000002, 0x4049B420, 0x4049E620, 0x00000002, 0x4049B420, + 0x4049E820, 0x00000002, 0x4049B420, 0x4049EA20, 0x00000002, 0x4049B420, + 0x4049EC20, 0x00000002, 0x4049B420, 0x4049EE20, 0x00000002, 0x4049B620, + 0x4049E620, 0x00000002, 0x4049B620, 0x4049E820, 0x00000002, 0x4049B620, + 0x4049EA20, 0x00000002, 0x4049B620, 0x4049EC20, 0x00000002, 0x4049B620, + 0x4049EE20, 0x00000002, 0x4049B820, 0x4049E620, 0x00000002, 0x4049B820, + 0x4049E820, 0x00000002, 0x4049B820, 0x4049EA20, 0x00000002, 0x4049B820, + 0x4049EC20, 0x00000002, 0x4049B820, 0x4049EE20, 0x00000002, 0x4049BA20, + 0x4049E620, 0x00000002, 0x4049BA20, 0x4049E820, 0x00000002, 0x4049BA20, + 0x4049EA20, 0x00000002, 0x4049BA20, 0x4049EC20, 0x00000002, 0x4049BA20, + 0x4049EE20, 0x00000002, 0x4049BC20, 0x4049E620, + // Block 114, offset 0x1c80 + 0x00000002, 0x4049BC20, 0x4049E820, 0x00000002, 0x4049BC20, 0x4049EA20, + 0x00000002, 0x4049BC20, 0x4049EC20, 0x00000002, 0x4049BC20, 0x4049EE20, + 0x00000002, 0x4049BE20, 0x4049E620, 0x00000002, 0x4049BE20, 0x4049E820, + 0x00000002, 0x4049BE20, 0x4049EA20, 0x00000002, 0x4049BE20, 0x4049EC20, + 0x00000002, 0x4049BE20, 0x4049EE20, 0x00000002, 0x4049C020, 0x4049E620, + 0x00000002, 0x4049C020, 0x4049E820, 0x00000002, 0x4049C020, 0x4049EA20, + 0x00000002, 0x4049C020, 0x4049EC20, 0x00000002, 0x4049C020, 0x4049EE20, + 0x00000002, 0x4049C220, 0x4049E620, 0x00000002, 0x4049C220, 0x4049E820, + 0x00000002, 0x4049C220, 0x4049EA20, 0x00000002, 0x4049C220, 0x4049EC20, + 0x00000002, 0x4049C220, 0x4049EE20, 0x00000003, 0x0049C484, 0x0049AC84, + 0x4049E620, 0x00000003, 0x0049C484, 0x0049AC84, + // Block 115, offset 0x1cc0 + 0x4049E820, 0x00000003, 0x0049C484, 0x0049AC84, 0x4049EA20, 0x00000003, + 0x0049C484, 0x0049AC84, 0x4049EC20, 0x00000003, 0x0049C484, 0x0049AC84, + 0x4049EE20, 0x00000003, 0x0049C484, 0x0049BA84, 0x4049E620, 0x00000003, + 0x0049C484, 0x0049BA84, 0x4049E820, 0x00000003, 0x0049C484, 0x0049BA84, + 0x4049EA20, 0x00000003, 0x0049C484, 0x0049BA84, 0x4049EC20, 0x00000003, + 0x0049C484, 0x0049BA84, 0x4049EE20, 0x00000002, 0x4049C420, 0x4049E620, + 0x00000002, 0x4049C420, 0x4049E820, 0x00000002, 0x4049C420, 0x4049EA20, + 0x00000002, 0x4049C420, 0x4049EC20, 0x00000002, 0x4049C420, 0x4049EE20, + 0x00000002, 0x4049C620, 0x4049E620, 0x00000002, 0x4049C620, 0x4049E820, + 0x00000002, 0x4049C620, 0x4049EA20, 0x00000002, 0x4049C620, 0x4049EC20, + 0x00000002, 0x4049C620, 0x4049EE20, 0x00000002, + // Block 116, offset 0x1d00 + 0x4049C820, 0x4049E620, 0x00000002, 0x4049C820, 0x4049E820, 0x00000002, + 0x4049C820, 0x4049EA20, 0x00000002, 0x4049C820, 0x4049EC20, 0x00000002, + 0x4049C820, 0x4049EE20, 0x00000002, 0x4049F020, 0x404A5A20, 0x00000002, + 0x4049F020, 0x404A5C20, 0x00000002, 0x4049F020, 0x404A6220, 0x00000002, + 0x4049F020, 0x404A6620, 0x00000002, 0x4049F020, 0x404A6820, 0x00000002, + 0x4049F220, 0x404A5A20, 0x00000002, 0x4049F220, 0x404A5C20, 0x00000002, + 0x4049F220, 0x404A6220, 0x00000002, 0x4049F220, 0x404A6620, 0x00000002, + 0x4049F220, 0x404A6820, 0x00000002, 0x4049F420, 0x404A5A20, 0x00000002, + 0x4049F420, 0x404A5C20, 0x00000002, 0x4049F420, 0x404A6220, 0x00000002, + 0x4049F420, 0x404A6620, 0x00000002, 0x4049F420, 0x404A6820, 0x00000002, + 0x4049F620, 0x404A5A20, 0x00000002, 0x4049F620, + // Block 117, offset 0x1d40 + 0x404A5C20, 0x00000002, 0x4049F620, 0x404A6220, 0x00000002, 0x4049F620, + 0x404A6620, 0x00000002, 0x4049F620, 0x404A6820, 0x00000002, 0x4049F820, + 0x404A5A20, 0x00000002, 0x4049F820, 0x404A5C20, 0x00000002, 0x4049F820, + 0x404A6220, 0x00000002, 0x4049F820, 0x404A6620, 0x00000002, 0x4049F820, + 0x404A6820, 0x00000002, 0x4049FA20, 0x404A5A20, 0x00000002, 0x4049FA20, + 0x404A5C20, 0x00000002, 0x4049FA20, 0x404A6220, 0x00000002, 0x4049FA20, + 0x404A6620, 0x00000002, 0x4049FA20, 0x404A6820, 0x00000002, 0x4049FC20, + 0x404A5A20, 0x00000002, 0x4049FC20, 0x404A5C20, 0x00000002, 0x4049FC20, + 0x404A6220, 0x00000002, 0x4049FC20, 0x404A6620, 0x00000002, 0x4049FC20, + 0x404A6820, 0x00000002, 0x4049FE20, 0x404A5A20, 0x00000002, 0x4049FE20, + 0x404A5C20, 0x00000002, 0x4049FE20, 0x404A6220, + // Block 118, offset 0x1d80 + 0x00000002, 0x4049FE20, 0x404A6620, 0x00000002, 0x4049FE20, 0x404A6820, + 0x00000002, 0x404A0020, 0x404A5A20, 0x00000002, 0x404A0020, 0x404A5C20, + 0x00000002, 0x404A0020, 0x404A6220, 0x00000002, 0x404A0020, 0x404A6620, + 0x00000002, 0x404A0020, 0x404A6820, 0x00000002, 0x404A0220, 0x404A5A20, + 0x00000002, 0x404A0220, 0x404A5C20, 0x00000002, 0x404A0220, 0x404A6220, + 0x00000002, 0x404A0220, 0x404A6620, 0x00000002, 0x404A0220, 0x404A6820, + 0x00000002, 0x404A0420, 0x404A5A20, 0x00000002, 0x404A0420, 0x404A5C20, + 0x00000002, 0x404A0420, 0x404A6220, 0x00000002, 0x404A0420, 0x404A6620, + 0x00000002, 0x404A0420, 0x404A6820, 0x00000002, 0x404A0620, 0x404A5A20, + 0x00000002, 0x404A0620, 0x404A5C20, 0x00000002, 0x404A0620, 0x404A6220, + 0x00000002, 0x404A0620, 0x404A6620, 0x00000002, + // Block 119, offset 0x1dc0 + 0x404A0620, 0x404A6820, 0x00000002, 0x404A0820, 0x404A5A20, 0x00000002, + 0x404A0820, 0x404A5C20, 0x00000002, 0x404A0820, 0x404A6220, 0x00000002, + 0x404A0820, 0x404A6620, 0x00000002, 0x404A0820, 0x404A6820, 0x00000002, + 0x404A0A20, 0x404A5A20, 0x00000002, 0x404A0A20, 0x404A5C20, 0x00000002, + 0x404A0A20, 0x404A6220, 0x00000002, 0x404A0A20, 0x404A6620, 0x00000002, + 0x404A0A20, 0x404A6820, 0x00000002, 0x404A0C20, 0x404A5A20, 0x00000002, + 0x404A0C20, 0x404A5C20, 0x00000002, 0x404A0C20, 0x404A6220, 0x00000002, + 0x404A0C20, 0x404A6620, 0x00000002, 0x404A0C20, 0x404A6820, 0x00000002, + 0x404A0E20, 0x404A5A20, 0x00000002, 0x404A0E20, 0x404A5C20, 0x00000002, + 0x404A0E20, 0x404A6220, 0x00000002, 0x404A0E20, 0x404A6620, 0x00000002, + 0x404A0E20, 0x404A6820, 0x00000002, 0x404A1020, + // Block 120, offset 0x1e00 + 0x404A5A20, 0x00000002, 0x404A1020, 0x404A5C20, 0x00000002, 0x404A1020, + 0x404A6220, 0x00000002, 0x404A1020, 0x404A6620, 0x00000002, 0x404A1020, + 0x404A6820, 0x00000002, 0x404A1220, 0x404A5A20, 0x00000002, 0x404A1220, + 0x404A5C20, 0x00000002, 0x404A1220, 0x404A6220, 0x00000002, 0x404A1220, + 0x404A6620, 0x00000002, 0x404A1220, 0x404A6820, 0x00000002, 0x404A1420, + 0x404A5A20, 0x00000002, 0x404A1420, 0x404A5C20, 0x00000002, 0x404A1420, + 0x404A6220, 0x00000002, 0x404A1420, 0x404A6620, 0x00000002, 0x404A1420, + 0x404A6820, 0x00000002, 0x404A1620, 0x404A5A20, 0x00000002, 0x404A1620, + 0x404A5C20, 0x00000002, 0x404A1620, 0x404A6220, 0x00000002, 0x404A1620, + 0x404A6620, 0x00000002, 0x404A1620, 0x404A6820, 0x00000002, 0x404A1820, + 0x404A5A20, 0x00000002, 0x404A1820, 0x404A5C20, + // Block 121, offset 0x1e40 + 0x00000002, 0x404A1820, 0x404A6220, 0x00000002, 0x404A1820, 0x404A6620, + 0x00000002, 0x404A1820, 0x404A6820, 0x00000002, 0x404A1A20, 0x404A5A20, + 0x00000002, 0x404A1A20, 0x404A5C20, 0x00000002, 0x404A1A20, 0x404A6220, + 0x00000002, 0x404A1A20, 0x404A6620, 0x00000002, 0x404A1A20, 0x404A6820, + 0x00000002, 0x404A1C20, 0x404A5A20, 0x00000002, 0x404A1C20, 0x404A5C20, + 0x00000002, 0x404A1C20, 0x404A6220, 0x00000002, 0x404A1C20, 0x404A6620, + 0x00000002, 0x404A1C20, 0x404A6820, 0x00000002, 0x404A1E20, 0x404A5A20, + 0x00000002, 0x404A1E20, 0x404A5C20, 0x00000002, 0x404A1E20, 0x404A6220, + 0x00000002, 0x404A1E20, 0x404A6620, 0x00000002, 0x404A1E20, 0x404A6820, + 0x00000002, 0x404A2020, 0x404A5A20, 0x00000002, 0x404A2020, 0x404A5C20, + 0x00000002, 0x404A2020, 0x404A6220, 0x00000002, + // Block 122, offset 0x1e80 + 0x404A2020, 0x404A6620, 0x00000002, 0x404A2020, 0x404A6820, 0x00000002, + 0x404A2220, 0x404A5A20, 0x00000002, 0x404A2220, 0x404A5C20, 0x00000002, + 0x404A2220, 0x404A6220, 0x00000002, 0x404A2220, 0x404A6620, 0x00000002, + 0x404A2220, 0x404A6820, 0x00000002, 0x404A2420, 0x404A5A20, 0x00000002, + 0x404A2420, 0x404A5C20, 0x00000002, 0x404A2420, 0x404A6220, 0x00000002, + 0x404A2420, 0x404A6620, 0x00000002, 0x404A2420, 0x404A6820, 0x00000002, + 0x404A2620, 0x404A5A20, 0x00000002, 0x404A2620, 0x404A5C20, 0x00000002, + 0x404A2620, 0x404A6220, 0x00000002, 0x404A2620, 0x404A6620, 0x00000002, + 0x404A2620, 0x404A6820, 0x00000002, 0x404A2820, 0x404A5A20, 0x00000002, + 0x404A2820, 0x404A5C20, 0x00000002, 0x404A2820, 0x404A6220, 0x00000002, + 0x404A2820, 0x404A6620, 0x00000002, 0x404A2820, + // Block 123, offset 0x1ec0 + 0x404A6820, 0x00000002, 0x404A2A20, 0x404A5A20, 0x00000002, 0x404A2A20, + 0x404A5C20, 0x00000002, 0x404A2A20, 0x404A6220, 0x00000002, 0x404A2A20, + 0x404A6620, 0x00000002, 0x404A2A20, 0x404A6820, 0x00000002, 0x404A2C20, + 0x404A5A20, 0x00000002, 0x404A2C20, 0x404A5C20, 0x00000002, 0x404A2C20, + 0x404A6220, 0x00000002, 0x404A2C20, 0x404A6620, 0x00000002, 0x404A2C20, + 0x404A6820, 0x00000002, 0x404A2E20, 0x404A5A20, 0x00000002, 0x404A2E20, + 0x404A5C20, 0x00000002, 0x404A2E20, 0x404A6220, 0x00000002, 0x404A2E20, + 0x404A6620, 0x00000002, 0x404A2E20, 0x404A6820, 0x00000002, 0x404A3020, + 0x404A5A20, 0x00000002, 0x404A3020, 0x404A5C20, 0x00000002, 0x404A3020, + 0x404A6220, 0x00000002, 0x404A3020, 0x404A6620, 0x00000002, 0x404A3020, + 0x404A6820, 0x00000002, 0x404A3220, 0x404A5A20, + // Block 124, offset 0x1f00 + 0x00000002, 0x404A3220, 0x404A5C20, 0x00000002, 0x404A3220, 0x404A6220, + 0x00000002, 0x404A3220, 0x404A6620, 0x00000002, 0x404A3220, 0x404A6820, + 0x00000002, 0x404A3420, 0x404A5A20, 0x00000002, 0x404A3420, 0x404A5C20, + 0x00000002, 0x404A3420, 0x404A6220, 0x00000002, 0x404A3420, 0x404A6620, + 0x00000002, 0x404A3420, 0x404A6820, 0x00000002, 0x404A3620, 0x404A5A20, + 0x00000002, 0x404A3620, 0x404A5C20, 0x00000002, 0x404A3620, 0x404A6220, + 0x00000002, 0x404A3620, 0x404A6620, 0x00000002, 0x404A3620, 0x404A6820, + 0x00000002, 0x404A3820, 0x404A5A20, 0x00000002, 0x404A3820, 0x404A5C20, + 0x00000002, 0x404A3820, 0x404A6220, 0x00000002, 0x404A3820, 0x404A6620, + 0x00000002, 0x404A3820, 0x404A6820, 0x00000002, 0x404A3A20, 0x404A5A20, + 0x00000002, 0x404A3A20, 0x404A5C20, 0x00000002, + // Block 125, offset 0x1f40 + 0x404A3A20, 0x404A6220, 0x00000002, 0x404A3A20, 0x404A6620, 0x00000002, + 0x404A3A20, 0x404A6820, 0x00000002, 0x404A3C20, 0x404A5A20, 0x00000002, + 0x404A3C20, 0x404A5C20, 0x00000002, 0x404A3C20, 0x404A6220, 0x00000002, + 0x404A3C20, 0x404A6620, 0x00000002, 0x404A3C20, 0x404A6820, 0x00000002, + 0x404A3E20, 0x404A5A20, 0x00000002, 0x404A3E20, 0x404A5C20, 0x00000002, + 0x404A3E20, 0x404A6220, 0x00000002, 0x404A3E20, 0x404A6620, 0x00000002, + 0x404A3E20, 0x404A6820, 0x00000002, 0x404A4020, 0x404A5A20, 0x00000002, + 0x404A4020, 0x404A5C20, 0x00000002, 0x404A4020, 0x404A6220, 0x00000002, + 0x404A4020, 0x404A6620, 0x00000002, 0x404A4020, 0x404A6820, 0x00000002, + 0x404A4220, 0x404A5A20, 0x00000002, 0x404A4220, 0x404A5C20, 0x00000002, + 0x404A4220, 0x404A6220, 0x00000002, 0x404A4220, + // Block 126, offset 0x1f80 + 0x404A6620, 0x00000002, 0x404A4220, 0x404A6820, 0x00000002, 0x404A4420, + 0x404A5A20, 0x00000002, 0x404A4420, 0x404A5C20, 0x00000002, 0x404A4420, + 0x404A6220, 0x00000002, 0x404A4420, 0x404A6620, 0x00000002, 0x404A4420, + 0x404A6820, 0x00000002, 0x404A4620, 0x404A5A20, 0x00000002, 0x404A4620, + 0x404A5C20, 0x00000002, 0x404A4620, 0x404A6220, 0x00000002, 0x404A4620, + 0x404A6620, 0x00000002, 0x404A4620, 0x404A6820, 0x00000002, 0x404A4820, + 0x404A5A20, 0x00000002, 0x404A4820, 0x404A5C20, 0x00000002, 0x404A4820, + 0x404A6220, 0x00000002, 0x404A4820, 0x404A6620, 0x00000002, 0x404A4820, + 0x404A6820, 0x00000002, 0x404A4A20, 0x404A5A20, 0x00000002, 0x404A4A20, + 0x404A5C20, 0x00000002, 0x404A4A20, 0x404A6220, 0x00000002, 0x404A4A20, + 0x404A6620, 0x00000002, 0x404A4A20, 0x404A6820, + // Block 127, offset 0x1fc0 + 0x00000002, 0x404A4C20, 0x404A5A20, 0x00000002, 0x404A4C20, 0x404A5C20, + 0x00000002, 0x404A4C20, 0x404A6220, 0x00000002, 0x404A4C20, 0x404A6620, + 0x00000002, 0x404A4C20, 0x404A6820, 0x00000002, 0x404A4E20, 0x404A5A20, + 0x00000002, 0x404A4E20, 0x404A5C20, 0x00000002, 0x404A4E20, 0x404A6220, + 0x00000002, 0x404A4E20, 0x404A6620, 0x00000002, 0x404A4E20, 0x404A6820, + 0x00000002, 0x404A7620, 0x404AF820, 0x00000002, 0x404A7820, 0x404AF820, + 0x00000002, 0x404A8020, 0x404B0020, 0x00000002, 0x404A8220, 0x404B0020, + 0x00000002, 0x404AA020, 0x404B0020, 0x00000002, 0x404AA220, 0x404B0020, + 0x00000002, 0x404AB020, 0x404B0020, 0x00000002, 0x404AB220, 0x404B0020, + 0x00000002, 0x404AC020, 0x404B0020, 0x00000002, 0x404AC220, 0x404B0020, + 0x00000002, 0x404AD020, 0x404B0020, 0x00000002, + // Block 128, offset 0x2000 + 0x404AD220, 0x404B0020, 0x00000002, 0x004AD684, 0xA0013A04, 0x00000002, + 0x004AE684, 0xA0013A04, 0x00000002, 0x004AE884, 0xA0013A04, 0x00000002, + 0x004AEA84, 0xA0013A04, 0x00000002, 0x404AEA20, 0x8281258D, 0x00000002, + 0x404AEA20, 0x82812591, 0x00000002, 0x404AF020, 0x8281258D, 0x00000002, + 0x404AF020, 0x82812591, 0x00000003, 0x004B0284, 0x004B3084, 0xA000F304, + 0x00000003, 0x004EA684, 0x004F1484, 0x004EA684, 0x00000002, 0x0050AE84, + 0x0050DA84, 0x00000003, 0x0050AE84, 0x0050DA84, 0x0050F084, 0x00000003, + 0x00514E84, 0x00519A84, 0x00514E84, 0x00000002, 0x005ADA84, 0xA0013904, + 0x00000002, 0x005ADC84, 0xA0013904, 0x00000002, 0x005ADC84, 0xA0013A04, + 0x00000002, 0x005ADE84, 0xA0013904, 0x00000002, 0x005ADE84, 0x005ADE84, + 0x00000002, 0x005AE084, 0xA0013904, 0x00000002, + // Block 129, offset 0x2040 + 0x005AE084, 0xA0013A04, 0x00000002, 0x005AE084, 0xA0013C04, 0x00000002, + 0x005AE084, 0xA0013D04, 0x00000002, 0x005AE884, 0xA0013904, 0x00000002, + 0x005AE884, 0xA0013A04, 0x00000002, 0x005AE884, 0xA0013C04, 0x00000002, + 0x005AE884, 0xA0013D04, 0x00000002, 0x005AEC84, 0xA0013904, 0x00000002, + 0x005AEE84, 0xA0013904, 0x00000002, 0x005AEE84, 0xA0013A04, 0x00000002, + 0x005AEE84, 0xA0013C04, 0x00000002, 0x005AF084, 0xA0013904, 0x00000002, + 0x005AF084, 0xA0013A04, 0x00000002, 0x005AF284, 0xA0013904, 0x00000002, + 0x005AF484, 0xA0013904, 0x00000002, 0x005AF684, 0xA0013904, 0x00000002, + 0x005AF684, 0x005B0884, 0x00000002, 0x005AFA84, 0xA0013904, 0x00000002, + 0x005AFE84, 0xA0013904, 0x00000002, 0x005AFE84, 0xA0013A04, 0x00000002, + 0x005AFE84, 0xA0013C04, 0x00000002, 0x005AFE84, + // Block 130, offset 0x2080 + 0xA0013D04, 0x00000002, 0x005AFE84, 0xA0013E04, 0x00000002, 0x005B0084, + 0xA0013904, 0x00000002, 0x005B0084, 0xA0013A04, 0x00000002, 0x005B0284, + 0xA0013904, 0x00000002, 0x005B0284, 0xA0013A04, 0x00000002, 0x005B0684, + 0xA0013904, 0x00000002, 0x005B0684, 0xA0013A04, 0x00000004, 0x005B0684, + 0xA0013904, 0x005B0684, 0xA0013904, 0x00000002, 0x005B0884, 0xA0013904, + 0x00000002, 0x005B0A84, 0xA0013904, 0x00000002, 0x005B2484, 0xA0013904, + 0x00000002, 0x005B2484, 0xA0013A04, 0x00000002, 0x005B2684, 0xA0013904, + 0x00000002, 0x005B2A84, 0xA0013904, 0x00000002, 0x005B3084, 0xA0013904, + 0x00000002, 0x005B3284, 0xA0013904, 0x00000002, 0x005B3484, 0xA0013904, + 0x00000002, 0x005B3684, 0xA0013904, 0x00000002, 0x005B3884, 0xA0013904, + 0x00000002, 0x005B3A84, 0xA0013904, 0x00000002, + // Block 131, offset 0x20c0 + 0x005B3E84, 0xA0013904, 0x00000002, 0x005B4084, 0xA0013904, 0x00000002, + 0x005B4284, 0xA0013904, 0x00000002, 0x005B4484, 0xA0013904, 0x00000002, + 0x005B4684, 0xA0013904, 0x00000002, 0x005B4884, 0xA0013904, 0x00000002, + 0x005B5284, 0xA0013904, 0x00000002, 0x005B5484, 0xA0013904, 0x00000002, + 0x005B5684, 0xA0013904, 0x00000002, 0x005B5884, 0xA0013904, 0x00000002, + 0x005B5C84, 0xA0013904, 0x00000002, 0x005B6484, 0xA0013904, 0x00000002, + 0x005B6684, 0xA0013904, 0x00000002, 0x005B6884, 0xA0013904, 0x00000002, + 0x005B6A84, 0xA0013904, 0x00000002, 0x005B6C84, 0xA0013904, 0x00000002, + 0x005B7484, 0xA0013904, 0x00000002, 0x005B7684, 0xA0013904, 0x00000002, + 0x005B7884, 0xA0013904, 0x00000002, 0x005B7A84, 0xA0013904, 0x00000002, + 0x005B9884, 0x005D9684, 0x00000002, 0x005BBC84, + // Block 132, offset 0x2100 + 0x005D9684, 0x00000002, 0x005BE684, 0x005D9684, 0x00000002, 0x005C0E84, + 0x005D9884, 0x00000002, 0x005C2484, 0x005D9684, 0x00000002, 0x005C3084, + 0x005D9884, 0x00000002, 0x005C3484, 0x005D9884, 0x00000002, 0x005C4084, + 0x005D9684, 0x00000002, 0x005C8A84, 0x005D9684, 0x00000002, 0x005CE884, + 0x005D9684, 0x00000002, 0x005D1684, 0x005D9684, 0x00000002, 0x005D2284, + 0x005D9884, 0x00000002, 0x005D3084, 0x005D9684, 0x00000004, 0x0062C486, + 0x0063C286, 0x0062C286, 0x0063CE86, 0x00000005, 0x0062C886, 0x0063A886, + 0x00648286, 0x0062AC86, 0x0063B886, 0x00000003, 0x0065769C, 0x0027D69C, + 0x0065CA9C, 0x00000005, 0x0065769C, 0x0065AA9C, 0xA001291C, 0x0027D69C, + 0x00659E9C, 0x00000004, 0x0065769C, 0x0065CA9C, 0x0065AE9C, 0x0065769C, + 0x00000005, 0x0065769C, 0x0065D89C, 0x0065B09C, + // Block 133, offset 0x2140 + 0xA001291C, 0x0065769C, 0x00000005, 0x0065789C, 0x0065A29C, 0x0065D89C, + 0x0065869C, 0xA001281C, 0x00000003, 0x0065789C, 0x0065D89C, 0x0065989C, + 0x00000002, 0x00657A8E, 0xA0812802, 0x00000002, 0x00657A91, 0xA0812802, + 0x00000003, 0x00657A9C, 0x0065809C, 0x0065D89C, 0x00000004, 0x00657E9C, + 0x0027D69C, 0x0065829C, 0x0027D69C, 0x00000006, 0x00657E9C, 0x0065909C, + 0x0065869C, 0x0027D69C, 0x00659E9C, 0xA001281C, 0x00000003, 0x0065809C, + 0x0027D69C, 0x0065B89C, 0x00000003, 0x0065809C, 0x0065D89C, 0x0065909C, + 0x00000002, 0x0065828E, 0xA0812802, 0x00000002, 0x00658291, 0xA0812802, + 0x00000003, 0x0065829C, 0x0065789C, 0x0065C89C, 0x00000004, 0x0065829C, + 0x0065C69C, 0x00659A9C, 0x00659E9C, 0x00000004, 0x0065829C, 0x0065CE9C, + 0x0065C89C, 0x0027D69C, 0x00000004, 0x0065829C, + // Block 134, offset 0x2180 + 0xA001281C, 0x0065CE9C, 0x0065D89C, 0x00000004, 0x0065829C, 0xA001281C, + 0x0065D89C, 0x0065B49C, 0x00000002, 0x0065848E, 0xA0812802, 0x00000002, + 0x00658491, 0xA0812802, 0x00000004, 0x0065849C, 0xA001281C, 0x0065829C, + 0xA001281C, 0x00000004, 0x0065849C, 0xA001281C, 0x0065A29C, 0x0027D69C, + 0x00000004, 0x0065849C, 0x0065C09C, 0x0065C89C, 0x0027D69C, 0x00000006, + 0x0065849C, 0xA001281C, 0x0065CA9C, 0x0065969C, 0xA001281C, 0x0027D69C, + 0x00000006, 0x0065849C, 0x0065CE9C, 0x0065869C, 0xA001281C, 0x0065C69C, + 0x0065B89C, 0x00000006, 0x0065849C, 0x0065CE9C, 0x0065BA9C, 0x0027D69C, + 0x00659E9C, 0x0065CA9C, 0x00000005, 0x0065849C, 0x0065CE9C, 0x0065D09C, + 0x00659A9C, 0x00659E9C, 0x00000002, 0x0065868E, 0xA0812802, 0x00000002, + 0x00658691, 0xA0812802, 0x00000004, 0x0065869C, + // Block 135, offset 0x21c0 + 0xA001281C, 0x0065C69C, 0x0065B89C, 0x00000006, 0x0065869C, 0xA001281C, + 0x0065C69C, 0x0065B89C, 0x00659E9C, 0x0065D89C, 0x00000006, 0x0065869C, + 0x0065CA9C, 0x0065929C, 0xA001281C, 0x0065789C, 0x0065CE9C, 0x00000004, + 0x0065869C, 0x0065CE9C, 0x0027D69C, 0x0065A69C, 0x00000002, 0x0065888E, + 0xA0812802, 0x00000002, 0x00658891, 0xA0812802, 0x00000003, 0x0065889C, + 0x0027D69C, 0x0065909C, 0x00000002, 0x00658A8E, 0xA0812802, 0x00000002, + 0x00658A91, 0xA0812802, 0x00000004, 0x00658A9C, 0x0027D69C, 0x0065B29C, + 0xA001291C, 0x00000003, 0x00658A9C, 0x0065CA9C, 0x0065A09C, 0x00000002, + 0x00658C8E, 0xA0812802, 0x00000002, 0x00658C91, 0xA0812802, 0x00000004, + 0x00658C9C, 0x0065789C, 0x0065869C, 0x0065CA9C, 0x00000005, 0x00658C9C, + 0x0065D89C, 0x0065989C, 0x0027D69C, 0x0065B89C, + // Block 136, offset 0x2200 + 0x00000002, 0x00658E8E, 0xA0812802, 0x00000002, 0x00658E91, 0xA0812802, + 0x00000002, 0x00658E84, 0x0065BA84, 0x00000005, 0x00658E9C, 0x0065C89C, + 0x0065D89C, 0x0065869C, 0xA001281C, 0x00000002, 0x0065908E, 0xA0812802, + 0x00000002, 0x00659091, 0xA0812802, 0x00000002, 0x0065928E, 0xA0812802, + 0x00000002, 0x00659291, 0xA0812802, 0x00000003, 0x0065929C, 0x0065D89C, + 0x0065989C, 0x00000003, 0x0065929C, 0x0065D89C, 0x00659E9C, 0x00000002, + 0x0065948E, 0xA0812802, 0x00000002, 0x00659491, 0xA0812802, 0x00000002, + 0x0065968E, 0xA0812802, 0x00000002, 0x00659691, 0xA0812802, 0x00000004, + 0x0065969C, 0xA001281C, 0x0027D69C, 0x0065909C, 0x00000002, 0x0065988E, + 0xA0812802, 0x00000002, 0x00659891, 0xA0812802, 0x00000002, 0x00659A8E, + 0xA0812802, 0x00000002, 0x00659A91, 0xA0812802, + // Block 137, offset 0x2240 + 0x00000002, 0x00659C8E, 0xA0812802, 0x00000002, 0x00659C91, 0xA0812802, + 0x00000003, 0x00659C9C, 0xA001281C, 0x00658E9C, 0x00000002, 0x00659E8E, + 0xA0812802, 0x00000002, 0x00659E91, 0xA0812802, 0x00000003, 0x00659E9C, + 0xA001281C, 0x0065CA9C, 0x00000003, 0x0065A89C, 0x00659A9C, 0x00659E9C, + 0x00000002, 0x0065AA8E, 0xA0812802, 0x00000002, 0x0065AA91, 0xA0812802, + 0x00000002, 0x0065AA8E, 0xA0812902, 0x00000002, 0x0065AA91, 0xA0812902, + 0x00000006, 0x0065AA9C, 0xA001291C, 0x0027D69C, 0x0065929C, 0x0065D89C, + 0x00659E9C, 0x00000004, 0x0065AA9C, 0xA001291C, 0x0027D69C, 0x00659A9C, + 0x00000005, 0x0065AA9C, 0xA001281C, 0x0027D69C, 0x0065CC9C, 0x0065CA9C, + 0x00000003, 0x0065AA9C, 0x0065789C, 0x00659A9C, 0x00000002, 0x0065AC8E, + 0xA0812802, 0x00000002, 0x0065AC91, 0xA0812802, + // Block 138, offset 0x2280 + 0x00000002, 0x0065AC8E, 0xA0812902, 0x00000002, 0x0065AC91, 0xA0812902, + 0x00000006, 0x0065AC9C, 0xA001291C, 0x0065769C, 0x0065909C, 0x00659E9C, + 0x0065CA9C, 0x00000004, 0x0065AC9C, 0xA001291C, 0x0065869C, 0x0065CA9C, + 0x00000003, 0x0065AC9C, 0xA001291C, 0x00658A9C, 0x00000003, 0x0065AC9C, + 0xA001281C, 0x0065CA9C, 0x00000002, 0x0065AE8E, 0xA0812802, 0x00000002, + 0x0065AE91, 0xA0812802, 0x00000002, 0x0065AE8E, 0xA0812902, 0x00000002, + 0x0065AE91, 0xA0812902, 0x00000006, 0x0065AE9C, 0x0065769C, 0x0065C69C, + 0x00659A9C, 0x00659E9C, 0xA001281C, 0x00000004, 0x0065AE9C, 0x0065789C, + 0x0027D69C, 0x00659E9C, 0x00000006, 0x0065AE9C, 0xA001281C, 0x00659A9C, + 0x00658E9C, 0x00657E9C, 0x0065CA9C, 0x00000003, 0x0065AE9C, 0x0065C69C, + 0x0065D89C, 0x00000002, 0x0065B08E, 0xA0812802, + // Block 139, offset 0x22c0 + 0x00000002, 0x0065B091, 0xA0812802, 0x00000002, 0x0065B08E, 0xA0812902, + 0x00000002, 0x0065B091, 0xA0812902, 0x00000005, 0x0065B09C, 0xA001291C, + 0x0027D69C, 0x00658E9C, 0xA001281C, 0x00000004, 0x0065B09C, 0xA001281C, + 0x0027D69C, 0x0065969C, 0x00000005, 0x0065B09C, 0x0065869C, 0x0065969C, + 0x0027D69C, 0x0065CA9C, 0x00000003, 0x0065B09C, 0xA001291C, 0x0065949C, + 0x00000004, 0x0065B09C, 0xA001291C, 0x0065A29C, 0x0065AC9C, 0x00000003, + 0x0065B09C, 0x0065CA9C, 0x00659A9C, 0x00000004, 0x0065B09C, 0xA001291C, + 0x0065D89C, 0x0065909C, 0x00000002, 0x0065B28E, 0xA0812802, 0x00000002, + 0x0065B291, 0xA0812802, 0x00000002, 0x0065B28E, 0xA0812902, 0x00000002, + 0x0065B291, 0xA0812902, 0x00000003, 0x0065B29C, 0x0027D69C, 0x0065CA9C, + 0x00000003, 0x0065B29C, 0x0027D69C, 0x0065D89C, + // Block 140, offset 0x2300 + 0x00000005, 0x0065B29C, 0xA001291C, 0x0065789C, 0x0065D89C, 0x00659E9C, + 0x00000004, 0x0065B29C, 0xA001281C, 0x0065CA9C, 0x00659E9C, 0x00000005, + 0x0065B29C, 0xA001291C, 0x0065D89C, 0x00659E9C, 0xA001281C, 0x00000004, + 0x0065B49C, 0x0065789C, 0x0065869C, 0x0065CE9C, 0x00000003, 0x0065B49C, + 0x0065789C, 0x0065CA9C, 0x00000002, 0x0065B484, 0x00659084, 0x00000003, + 0x0065B49C, 0x00659A9C, 0x0065AA9C, 0x00000003, 0x0065B49C, 0x0065CA9C, + 0x0065869C, 0x00000005, 0x0065B49C, 0x0065D89C, 0x00658E9C, 0x0065C49C, + 0x0065D89C, 0x00000004, 0x0065B69C, 0x0065869C, 0x0065CE9C, 0x0065D89C, + 0x00000006, 0x0065B69C, 0x0065C89C, 0x0065AA9C, 0xA001281C, 0x0027D69C, + 0x0065CA9C, 0x00000004, 0x0065BA9C, 0x0027D69C, 0x00659E9C, 0x0065CA9C, + 0x00000003, 0x0065BA9C, 0x0065829C, 0xA001281C, + // Block 141, offset 0x2340 + 0x00000005, 0x0065BA9C, 0x0065829C, 0xA001281C, 0x00659E9C, 0x0065D89C, + 0x00000004, 0x0065BE9C, 0x0027D69C, 0x00659E9C, 0xA001281C, 0x00000003, + 0x0065BE9C, 0x0027D69C, 0x0065CA9C, 0x00000003, 0x0065C09C, 0x0065769C, + 0x0065D89C, 0x00000004, 0x0065C89C, 0x00659A9C, 0x00659E9C, 0x0065CA9C, + 0x00000005, 0x0065CA9C, 0x0027D69C, 0x0065AE9C, 0xA001281C, 0x0065CA9C, + 0x00000004, 0x0065CA9C, 0x0065AC9C, 0xA001291C, 0x0027D69C, 0x00000006, + 0x0065CC9C, 0x0065D89C, 0x00659E9C, 0x0065889C, 0xA001281C, 0x0065D89C, + 0x00000002, 0x0065D091, 0xA0812802, 0x00000003, 0x0065D09C, 0x00659A9C, + 0x00659E9C, 0x00000002, 0x0065D291, 0xA0812802, 0x00000002, 0x0065D491, + 0xA0812802, 0x00000002, 0x0065D691, 0xA0812802, 0x00000002, 0x0065DA84, + 0xA0013A04, 0x00000002, 0x0065EC84, 0xA0013A04, + // Block 142, offset 0x2380 + 0x00000002, 0x0065F684, 0xA0013A04, 0x00000002, 0x00660684, 0xA0013A04, + 0x00000002, 0x00661284, 0xA0013A04, 0x00000002, 0x00661484, 0xA0013A04, + 0x00000002, 0x00661C84, 0xA0013A04, 0x00000002, 0x00661E84, 0xA0013A04, + 0x00000002, 0x00662284, 0xA0013A04, 0x00000002, 0x00663884, 0xA0013A04, + 0x00000002, 0x00663896, 0xA0013A16, 0x00000002, 0x00663A84, 0xA0013A04, + 0x00000002, 0x00663A84, 0xA0013C04, 0x00000002, 0x0075C284, 0xA0013904, + 0x00000002, 0x00862084, 0xA0013904, 0x00000002, 0x00862284, 0xA0013904, + 0x00000002, 0x00862484, 0xA0013904, 0x00000002, 0x00862684, 0xA0013904, + 0x00000002, 0x00862884, 0xA0013904, 0x00000002, 0x00862A84, 0xA0013904, + 0x00000002, 0x00862C84, 0xA0013904, 0x00000002, 0x00862C84, 0xA0013A04, + 0x00000002, 0x00862E84, 0xA0013904, 0x00000002, + // Block 143, offset 0x23c0 + 0x00863084, 0xA0013904, 0x00000002, 0x00863284, 0xA0013904, 0x00000002, + 0x00863284, 0xA0013A04, 0x00000002, 0x00863484, 0xA0013904, 0x00000002, + 0x00863484, 0xA0013A04, 0x00000002, 0x00863684, 0xA0013904, 0x00000002, + 0x00863684, 0xA0013A04, 0x00000002, 0x00863884, 0xA0013904, 0x00000002, + 0x00863A84, 0xA0013904, 0x00000002, 0x00863C84, 0xA0013904, 0x00000002, + 0x00863E84, 0xA0013904, 0x00000002, 0x00863E84, 0xA0013A04, 0x00000002, + 0x00863E84, 0xA0013C04, 0x00000002, 0x00864084, 0xA0013904, 0x00000002, + 0x00864284, 0xA0013904, 0x00000002, 0x00864484, 0xA0013904, 0x00000002, + 0x00864684, 0xA0013904, 0x00000002, 0x00864684, 0xA0013A04, 0x00000002, + 0x00864884, 0xA0013904, 0x00000002, 0x00864884, 0xA0013A04, 0x00000002, + 0x00864A84, 0xA0013904, 0x00000002, 0x00864C84, + // Block 144, offset 0x2400 + 0xA0013904, 0x00000002, 0x029C6C84, 0xA0013904, 0x00000002, 0x029CB284, + 0xA0013904, 0x00000002, 0x02A30484, 0xA0013904, 0x00000002, 0x02A3C084, + 0xA0013904, 0x00000002, 0x02A40084, 0xA0013904, 0x00000002, 0x02A6B884, + 0xA0013904, 0x00000002, 0x02A6D284, 0xA0013904, 0x00000002, 0x02A70484, + 0xA0013904, 0x00000002, 0x02B81E84, 0xA0013904, 0x00000002, 0x02B81E84, + 0xA0013A04, 0x00000002, 0x02B84484, 0xA0013904, 0x00000002, 0x02B84684, + 0xA0013904, 0x00000002, 0x02BEA084, 0xA0013904, 0x00000002, 0x02BF8684, + 0xA0013904, 0x00000002, 0x02CBCA84, 0xA0013904, 0x00000002, 0x02CE1084, + 0xA0013904, 0x00000004, 0x02D0549C, 0x02BE1E9C, 0x029E349C, 0x02F27C9C, + 0x00000002, 0x02D6F484, 0xA0013904, 0x00000002, 0x02E45684, 0xA0013904, + 0x00000002, 0x02E4B684, 0xA0013904, 0x00000002, + // Block 145, offset 0x2440 + 0x02E71684, 0xA0013904, 0x00000002, 0x02EB1684, 0xA0013904, 0x00000002, + 0x02EDDC84, 0xA0013904, 0x00000002, 0x02F27484, 0xA0013904, 0x00000002, + 0x02F5F284, 0xA0013904, 0x00000002, 0x02FEA484, 0xA0013904, 0x00000002, + 0x02FEA684, 0xA0013904, 0x00000002, 0x02FEA684, 0xA0013A04, 0x00000002, + 0x02FF1484, 0xA0013904, 0x00000002, 0x02FF1484, 0xA0013A04, 0x00000002, + 0x0300FE84, 0xA0013904, 0x00000002, 0x03011284, 0xA0013904, 0x00000002, + 0x0303F884, 0xA0013904, 0x00000002, 0x0304F284, 0xA0013904, 0x00000002, + 0x0304F284, 0xA0013A04, 0x00000002, 0x0313A484, 0xA0013904, 0x00000002, + 0x031B6684, 0xA0013904, 0x00000002, 0x031F6C84, 0xA0013904, 0x00000002, + 0x031F6C84, 0xA0013A04, 0x00000002, 0x03212284, 0xA0013904, 0x00000002, + 0x032C3884, 0xA0013904, 0x00000002, 0x032DD084, + // Block 146, offset 0x2480 + 0xA0013904, 0x00000002, 0x0331C084, 0xA0013904, 0x00000002, 0x03332C84, + 0xA0013904, 0x00000002, 0x03355084, 0xA0013904, 0x00000002, 0x03367884, + 0xA0013904, 0x00000002, 0x033CEA84, 0xA0013904, 0x00000002, 0x033E9484, + 0xA0013904, 0x00000002, 0x033EA484, 0xA0013904, 0x00000002, 0x033F1A84, + 0xA0013904, 0x00000002, 0x033F3884, 0xA0013904, 0x00000002, 0x033F3884, + 0xA0013A04, 0x00000002, 0xA000AD18, 0xA000BA18, 0x00000002, 0xA000B218, + 0xA000BA18, 0x00000002, 0xA000B618, 0xA000BA18, 0x00000002, 0x00393C99, + 0x003A8E99, 0x00000002, 0x00393C9A, 0x003A8E9A, 0x00000002, 0x00395699, + 0x003A8E99, 0x00000002, 0x0039569A, 0x003A8E9A, 0x00000002, 0x00395899, + 0x003A8E99, 0x00000002, 0x0039589A, 0x003A8E9A, 0x00000002, 0x00396499, + 0x003A8E99, 0x00000002, 0x0039649A, 0x003A8E9A, + // Block 147, offset 0x24c0 + 0x00000002, 0x00397299, 0x003A8E99, 0x00000002, 0x0039729A, 0x003A8E9A, + 0x00000002, 0x00397499, 0x003A8E99, 0x00000002, 0x0039749A, 0x003A8E9A, + 0x00000002, 0x0039C699, 0x003A8E99, 0x00000002, 0x0039C69A, 0x003A8E9A, + 0x00000002, 0x0039C899, 0x003A8E99, 0x00000002, 0x0039C89A, 0x003A8E9A, + 0x00000002, 0x0039DC99, 0x003A8E99, 0x00000002, 0x0039DC9A, 0x003A8E9A, + 0x00000002, 0x0039DE99, 0x003A8E99, 0x00000002, 0x0039DE9A, 0x003A8E9A, + 0x00000002, 0x0039E699, 0x003A8E99, 0x00000002, 0x0039E69A, 0x003A8E9A, + 0x00000002, 0x0039EE99, 0x003A8E99, 0x00000002, 0x0039EE9A, 0x003A8E9A, + 0x00000002, 0x0039F099, 0x003A8E99, 0x00000002, 0x0039F09A, 0x003A8E9A, + 0x00000002, 0x0039FC99, 0x003A8E99, 0x00000002, 0x0039FC9A, 0x003A8E9A, + 0x00000002, 0x003A1299, 0x003A8E99, 0x00000002, + // Block 148, offset 0x2500 + 0x003A129A, 0x003A8E9A, 0x00000002, 0x003A1A99, 0x003A8E99, 0x00000002, + 0x003A1A9A, 0x003A8E9A, 0x00000002, 0x003A4099, 0x003A8E99, 0x00000002, + 0x003A409A, 0x003A8E9A, 0x00000002, 0x003A4E9A, 0x003A8E9A, 0x00000002, + 0x003A5699, 0x003A8E99, 0x00000002, 0x003A569A, 0x003A8E9A, 0x00000002, + 0x003A689A, 0x003A8E9A, 0x00000002, 0x003A8E99, 0xA000D119, 0x00000002, + 0x003A8E9A, 0xA000D11A, 0x00000002, 0x003A9099, 0x003A8E99, 0x00000002, + 0x003A909A, 0x003A8E9A, 0x00000002, 0x4062AC20, 0x4062AC20, 0x00000002, + 0x4062AC20, 0x4062BE20, 0x00000002, 0x4062B020, 0x4062C420, 0x00000002, + 0x4062B020, 0x4062D020, 0x00000002, 0x4062B220, 0x4062B220, 0x00000002, + 0x4062B620, 0x4062AC20, 0x00000002, 0x4062B620, 0x4062B820, 0x00000002, + 0x4062B620, 0x4062BA20, 0x00000002, 0x4062B620, + // Block 149, offset 0x2540 + 0x4062BE20, 0x00000002, 0x4062B620, 0x4062CC20, 0x00000002, 0x4062B620, + 0x4062CE20, 0x00000002, 0x4062B620, 0x4062D020, 0x00000002, 0x4062BA20, + 0x4062BA20, 0x00000002, 0x4062BA20, 0x4062BE20, 0x00000002, 0x4062BE20, + 0x4062BE20, 0x00000002, 0x4062C420, 0x4062C420, 0x00000002, 0x4063A820, + 0x4063D020, 0x00000002, 0x4063AC20, 0x4063D020, 0x00000002, 0x4063B020, + 0x4063D020, 0x00000002, 0x4063B420, 0x4063D020, 0x00000002, 0x4063B820, + 0x4063A820, 0x00000003, 0x4063B820, 0x4063A820, 0x4063D020, 0x00000002, + 0x4063B820, 0x4063D020, 0x00000002, 0x4063C220, 0x4063CE20, 0x00000003, + 0x4063C220, 0x4063CE20, 0x4063D020, 0x00000002, 0x4063C220, 0x4063D020, + 0x00000003, 0x0003F484, 0x002D9A8A, 0x0003F69F, 0x00000003, 0x0003F484, + 0x002F5684, 0x0003F69F, 0x00000003, 0x0003F484, + // Block 150, offset 0x2580 + 0x002F568A, 0x0003F69F, 0x00000003, 0x0003F484, 0x0030F684, 0x0003F69F, + 0x00000003, 0x0003F484, 0x0030F68A, 0x0003F69F, 0x00000002, 0x002C0A9D, + 0x002F569C, 0x00000002, 0x402C3C20, 0xAE603202, 0x00000002, 0x002C3C83, + 0xAE603202, 0x00000002, 0x402D6A20, 0xAE604702, 0x00000002, 0x002D6A83, + 0xAE604702, 0x00000002, 0x402D6A20, 0xAE605202, 0x00000002, 0x002D6A83, + 0xAE605202, 0x00000002, 0x002D9883, 0xAE603202, 0x00000002, 0x002D9883, + 0xAE603502, 0x00000002, 0x002D9883, 0xAE603702, 0x00000002, 0x002D9883, + 0xAE603C02, 0x00000002, 0x002D9883, 0xAE604102, 0x00000002, 0x002D9883, + 0xAE604702, 0x00000003, 0x002D9883, 0xAE604702, 0xAE603202, 0x00000002, + 0x002D9883, 0xAE604E02, 0x00000002, 0x002D9883, 0xACA05902, 0x00000002, + 0x002D9883, 0xAE605B02, 0x00000002, 0x002D9883, + // Block 151, offset 0x25c0 + 0xAE606402, 0x00000002, 0x002D9883, 0xAE606502, 0x00000002, 0x002D9883, + 0xAE606702, 0x00000002, 0x002D9883, 0xADC07002, 0x00000002, 0x002D9883, + 0xADC07A02, 0x00000002, 0x002D9A8A, 0x002D9A9F, 0x00000003, 0x002D9A8A, + 0x002D9A8A, 0x002D9A9F, 0x00000002, 0x002D9A8A, 0x002DCC8A, 0x00000002, + 0x002D9A9D, 0x00306C9D, 0x00000002, 0x002D9A8A, 0x0030BE9F, 0x00000002, + 0x002D9A84, 0x0030F69F, 0x00000002, 0x002D9A8A, 0x0030F69F, 0x00000002, + 0x002E229C, 0x0030F69C, 0x00000002, 0x402EE420, 0xAE604E02, 0x00000002, + 0x002EE483, 0xAE604E02, 0x00000002, 0x402EE420, 0xAE605B02, 0x00000002, + 0x002EE483, 0xAE605B02, 0x00000002, 0x40306E20, 0xAE603202, 0x00000002, + 0x00306E83, 0xAE603202, 0x00000002, 0x40306E20, 0xAE603502, 0x00000002, + 0x00306E83, 0xAE603502, 0x00000002, 0x40306E20, + // Block 152, offset 0x2600 + 0xAE604102, 0x00000002, 0x00306E83, 0xAE604102, 0x00000002, 0x40306E20, + 0xAE605B02, 0x00000002, 0x00306E83, 0xAE605B02, 0x00000002, 0x0030BE8A, + 0x002D9A9F, 0x00000003, 0x0030BE8A, 0x002D9A8A, 0x002D9A9F, 0x00000002, + 0x0030F684, 0x002D9A9F, 0x00000002, 0x0030F68A, 0x002D9A9F, 0x00000003, + 0x0030F684, 0x002D9A84, 0x002D9A9F, 0x00000003, 0x0030F68A, 0x002D9A8A, + 0x002D9A9F, 0x00000002, 0x402BE020, 0xAE603702, 0x00000002, 0x002BE083, + 0xAE603702, 0x00000002, 0x402BE020, 0xAE603C02, 0x00000002, 0x002BE083, + 0xAE603C02, 0x00000002, 0x402BE020, 0xAE604302, 0x00000002, 0x002BE083, + 0xAE604302, 0x00000002, 0x402C9A20, 0xAE603C02, 0x00000002, 0x002C9A83, + 0xAE603C02, 0x00000002, 0x402C9A20, 0xAE605B02, 0x00000002, 0x002C9A83, + 0xAE605B02, 0x00000002, 0x402D9C20, 0xAE604702, + // Block 153, offset 0x2640 + 0x00000002, 0x002D9C83, 0xAE604702, 0x00000002, 0x402EE420, 0xAE603C02, + 0x00000002, 0x002EE483, 0xAE603C02, 0x00000002, 0x402EE420, 0xAD806802, + 0x00000002, 0x002EE483, 0xAD806802, 0x00000002, 0x402FE820, 0xAE605202, + 0x00000002, 0x002FE883, 0xAE605202, 0x00000002, 0x40306E20, 0xAE604702, + 0x00000002, 0x00306E83, 0xAE604702, 0x00000002, 0x40306E20, 0xAE604E02, + 0x00000002, 0x00306E83, 0xAE604E02, 0x00000002, 0x40306E20, 0xAD806802, + 0x00000002, 0x00306E83, 0xAD806802, 0x00000002, 0x002C6294, 0xA0013914, + 0x00000002, 0x00302C83, 0x402D6820, 0x00000002, 0x00302C89, 0x002D6888, + 0x00000002, 0x40310021, 0xAE603202, 0x00000002, 0x003100A3, 0xAE603202, + 0x00000002, 0x40310021, 0xAE603502, 0x00000002, 0x003100A3, 0xAE603502, + 0x00000002, 0x40310021, 0xAE604102, 0x00000002, + // Block 154, offset 0x2680 + 0x003100A3, 0xAE604102, 0x00000002, 0x40310021, 0xAE605B02, 0x00000002, + 0x003100A3, 0xAE605B02, 0x00000002, 0x40320C20, 0xAE603202, 0x00000002, + 0x00320C83, 0xAE603202, 0x00000002, 0x40320C20, 0xAE605B02, 0x00000002, + 0x00320C83, 0xAE605B02, 0x00000002, 0x40320C21, 0xAE605B02, 0x00000002, + 0x00320CA3, 0xAE605B02, 0x00000002, 0x40320E20, 0xAE603202, 0x00000002, + 0x00320E83, 0xAE603202, 0x00000002, 0x40320E21, 0xAE604E02, 0x00000002, + 0x00320EA3, 0xAE604E02, 0x00000002, 0x40320E21, 0xAE605B02, 0x00000002, + 0x00320EA3, 0xAE605B02, 0x00000002, 0x40321020, 0xAE603202, 0x00000002, + 0x00321083, 0xAE603202, 0x00000002, 0x402BDE21, 0x002C9888, 0x00000002, + 0x002BDEA3, 0x002C9888, 0x00000003, 0x402BDE21, 0x002C9888, 0xAE605B02, + 0x00000003, 0x002BDEA3, 0x002C9888, 0xAE605B02, + // Block 155, offset 0x26c0 + 0x00000002, 0x402EE221, 0x002C9888, 0x00000002, 0x002EE2A3, 0x002C9888, + 0x00000003, 0x402EE221, 0x002C9888, 0xAE604E02, 0x00000003, 0x002EE2A3, + 0x002C9888, 0xAE604E02, 0x00000003, 0x402EE221, 0x002C9888, 0xAE605B02, + 0x00000003, 0x002EE2A3, 0x002C9888, 0xAE605B02, 0x00000002, 0x40306C21, + 0x002C9888, 0x00000002, 0x00306CA3, 0x002C9888, 0x00000003, 0x40306C21, + 0x002C9888, 0xAE603202, 0x00000003, 0x00306CA3, 0x002C9888, 0xAE603202, + 0x00000003, 0x40306C21, 0x002C9888, 0xAE603502, 0x00000003, 0x00306CA3, + 0x002C9888, 0xAE603502, 0x00000003, 0x40306C21, 0x002C9888, 0xAE604102, + 0x00000003, 0x00306CA3, 0x002C9888, 0xAE604102, 0x00000003, 0x40306C21, + 0x002C9888, 0xAE605B02, 0x00000003, 0x00306CA3, 0x002C9888, 0xAE605B02, + 0x00000003, 0x0003F484, 0x0030E284, 0x0003F69F, + // Block 156, offset 0x2700 + 0x00000003, 0x0003F484, 0x0030E28A, 0x0003F69F, 0x00000002, 0x002DFE9C, + 0x0030E29D, 0x00000002, 0x002E829C, 0x0030E29D, 0x00000002, 0x002E829D, + 0x0030E29D, 0x00000002, 0x002E9E9C, 0x0030E29D, 0x00000002, 0x002F2C9C, + 0x0030E29D, 0x00000002, 0x40302C21, 0x402D6820, 0x00000002, 0x00302CA3, + 0x402D6820, 0x00000002, 0x4030BE21, 0xAE603202, 0x00000002, 0x0030BEA3, + 0xAE603202, 0x00000002, 0x4030BE21, 0xAE603502, 0x00000002, 0x0030BEA3, + 0xAE603502, 0x00000002, 0x4030BE21, 0xAE603C02, 0x00000002, 0x0030BEA3, + 0xAE603C02, 0x00000002, 0x4030BE21, 0xAE604302, 0x00000002, 0x4030BE21, + 0xAE604702, 0x00000002, 0x0030BEA3, 0xAE604702, 0x00000002, 0x4030BE21, + 0xAE605202, 0x00000002, 0x0030BEA3, 0xAE605202, 0x00000002, 0x4030BE21, + 0xADC07002, 0x00000002, 0x0030BEA3, 0xADC07002, + // Block 157, offset 0x2740 + 0x00000002, 0x0030E29D, 0x002C0A9C, 0x00000002, 0x0030E29D, 0x002C3A9D, + 0x00000002, 0x0030E28C, 0x00312A8C, 0x00000002, 0x40320E20, 0xAE605B02, + 0x00000002, 0x00320E83, 0xAE605B02, 0x00000002, 0x40320E21, 0xAE603202, + 0x00000002, 0x00320EA3, 0xAE603202, 0x00000002, 0x40321020, 0xAE605B02, + 0x00000002, 0x00321083, 0xAE605B02, 0x00000002, 0x40321021, 0xAE603202, + 0x00000002, 0x003210A3, 0xAE603202, 0x00000002, 0x40321023, 0xAE603202, + 0x00000002, 0x003210E3, 0xAE603202, 0x00000002, 0x40321023, 0xAE603C02, + 0x00000002, 0x003210E3, 0xAE603C02, 0x00000002, 0x40321023, 0xAE604702, + 0x00000002, 0x003210E3, 0xAE604702, 0x00000002, 0x40321023, 0xAE605B02, + 0x00000002, 0x003210E3, 0xAE605B02, 0x00000002, 0x40321023, 0xAD806802, + 0x00000002, 0x003210E3, 0xAD806802, 0x00000002, + // Block 158, offset 0x2780 + 0x0032769C, 0x0030E29D, 0x00000002, 0x402C3E20, 0xACA05602, 0x00000002, + 0x002C3E83, 0xACA05602, 0x00000002, 0x402C0820, 0xAE603702, 0x00000002, + 0x002C0883, 0xAE603702, 0x00000002, 0x402C0820, 0xAE603C02, 0x00000002, + 0x002C0883, 0xAE603C02, 0x00000002, 0x402D0620, 0xAE603C02, 0x00000002, + 0x002D0683, 0xAE603C02, 0x00000002, 0x402D0620, 0xAE605B02, 0x00000002, + 0x002D0683, 0xAE605B02, 0x00000002, 0x402DCA20, 0xAE604702, 0x00000002, + 0x002DCA83, 0xAE604702, 0x00000002, 0x402F2A20, 0xAE603C02, 0x00000002, + 0x002F2A83, 0xAE603C02, 0x00000002, 0x402F2A20, 0xAE604E02, 0x00000002, + 0x002F2A83, 0xAE604E02, 0x00000002, 0x402F2A20, 0xAE605B02, 0x00000002, + 0x002F2A83, 0xAE605B02, 0x00000002, 0x402F2A20, 0xAD806802, 0x00000002, + 0x002F2A83, 0xAD806802, 0x00000002, 0x4030BC20, + // Block 159, offset 0x27c0 + 0xAE604702, 0x00000002, 0x0030BC83, 0xAE604702, 0x00000002, 0x4030BC20, + 0xAE604E02, 0x00000002, 0x0030BC83, 0xAE604E02, 0x00000002, 0x4030BC20, + 0xAD806802, 0x00000002, 0x0030BC83, 0xAD806802, 0x00000002, 0x40320E20, + 0xAE604E02, 0x00000002, 0x00320E83, 0xAE604E02, 0x00000002, 0x4062AC20, + 0x4062B020, 0x00000002, 0x4062AC20, 0x4062B220, 0x00000002, 0x4062AC20, + 0x4062B620, 0x00000002, 0x4062AC20, 0x4062BA20, 0x00000003, 0x4062AC20, + 0x4062BE20, 0x4062AC20, 0x00000002, 0x4062AC20, 0x4062C820, 0x00000002, + 0x4062AC20, 0x4062CA20, 0x00000002, 0x4062AC20, 0x4062D020, 0x00000002, + 0x4062B020, 0x4062AC20, 0x00000002, 0x4062B020, 0x4062B020, 0x00000002, + 0x4062B020, 0x4062B220, 0x00000002, 0x4062B020, 0x4062BA20, 0x00000002, + 0x4062B020, 0x4062BE20, 0x00000002, 0x4062B020, + // Block 160, offset 0x2800 + 0x4062CC20, 0x00000002, 0x4062B220, 0x4062AC20, 0x00000002, 0x4062B220, + 0x4062B620, 0x00000003, 0x4062B620, 0x4062AC20, 0x4062BE20, 0x00000002, + 0x4062B620, 0x4062B020, 0x00000002, 0x4062B620, 0x4062B220, 0x00000003, + 0x4062B620, 0x4062B220, 0x4062D020, 0x00000002, 0x4062B620, 0x4062B620, + 0x00000003, 0x4062B620, 0x4062B820, 0x4062AC20, 0x00000003, 0x4062B620, + 0x4062B820, 0x4062BE20, 0x00000003, 0x4062B620, 0x4062BA20, 0x4062BE20, + 0x00000003, 0x4062B620, 0x4062BA20, 0x4062C220, 0x00000003, 0x4062B620, + 0x4062BA20, 0x4062D020, 0x00000003, 0x4062B620, 0x4062BE20, 0x4062BE20, + 0x00000002, 0x4062B620, 0x4062C220, 0x00000002, 0x4062B620, 0x4062CA20, + 0x00000002, 0x4062B820, 0x4062AC20, 0x00000002, 0x4062B820, 0x4062B620, + 0x00000002, 0x4062B820, 0x4062BA20, 0x00000002, + // Block 161, offset 0x2840 + 0x4062B820, 0x4062BE20, 0x00000003, 0x4062B820, 0x4062BE20, 0x4062BE20, + 0x00000002, 0x4062B820, 0x4062C220, 0x00000002, 0x4062B820, 0x4062C820, + 0x00000002, 0x4062B820, 0x4062D020, 0x00000002, 0x4062BA20, 0x4062AC20, + 0x00000002, 0x4062BA20, 0x4062B020, 0x00000002, 0x4062BA20, 0x4062B220, + 0x00000002, 0x4062BA20, 0x4062B620, 0x00000003, 0x4062BA20, 0x4062BA20, + 0x4062C220, 0x00000003, 0x4062BA20, 0x4062BE20, 0x4062AC20, 0x00000003, + 0x4062BA20, 0x4062BE20, 0x4062B220, 0x00000003, 0x4062BA20, 0x4062BE20, + 0x4062BA20, 0x00000003, 0x4062BA20, 0x4062BE20, 0x4062BE20, 0x00000003, + 0x4062BA20, 0x4062BE20, 0x4062C420, 0x00000002, 0x4062BA20, 0x4062C220, + 0x00000002, 0x4062BA20, 0x4062C420, 0x00000002, 0x4062BA20, 0x4062C820, + 0x00000002, 0x4062BA20, 0x4062CC20, 0x00000002, + // Block 162, offset 0x2880 + 0x4062BA20, 0x4062CE20, 0x00000002, 0x4062BA20, 0x4062D020, 0x00000002, + 0x4062BE20, 0x4062AC20, 0x00000002, 0x4062BE20, 0x4062B020, 0x00000002, + 0x4062BE20, 0x4062B220, 0x00000002, 0x4062BE20, 0x4062B620, 0x00000002, + 0x4062BE20, 0x4062B820, 0x00000002, 0x4062BE20, 0x4062BA20, 0x00000003, + 0x4062BE20, 0x4062BA20, 0x4062AC20, 0x00000003, 0x4062BE20, 0x4062BE20, + 0x4062BE20, 0x00000002, 0x4062BE20, 0x4062C220, 0x00000002, 0x4062BE20, + 0x4062C420, 0x00000002, 0x4062BE20, 0x4062C820, 0x00000002, 0x4062BE20, + 0x4062CA20, 0x00000002, 0x4062BE20, 0x4062CC20, 0x00000002, 0x4062BE20, + 0x4062CE20, 0x00000002, 0x4062BE20, 0x4062D020, 0x00000002, 0x4062C220, + 0x4062AC20, 0x00000003, 0x4062C220, 0x4062AC20, 0x4062AC20, 0x00000002, + 0x4062C220, 0x4062B220, 0x00000002, 0x4062C220, + // Block 163, offset 0x28c0 + 0x4062B820, 0x00000002, 0x4062C220, 0x4062BA20, 0x00000002, 0x4062C220, + 0x4062BE20, 0x00000002, 0x4062C220, 0x4062C220, 0x00000002, 0x4062C220, + 0x4062C420, 0x00000002, 0x4062C220, 0x4062C820, 0x00000002, 0x4062C220, + 0x4062CA20, 0x00000002, 0x4062C220, 0x4062CC20, 0x00000002, 0x4062C220, + 0x4062CE20, 0x00000002, 0x4062C420, 0x4062C220, 0x00000002, 0x4062C820, + 0x4062CA20, 0x00000002, 0x4062C820, 0x4062D020, 0x00000002, 0x4062CE20, + 0x4062BA20, 0x00000002, 0x4062CE20, 0x4062C220, 0x00000002, 0x4062D020, + 0x4062B020, 0x00000002, 0x4062D020, 0x4062B620, 0x00000002, 0x4062D020, + 0x4062B820, 0x00000002, 0x4062D020, 0x4062BA20, 0x00000002, 0x4062D020, + 0x4062D020, 0x00000002, 0x4063A820, 0x4063B820, 0x00000002, 0x4063A820, + 0x4063C220, 0x00000002, 0x4063A820, 0x4063CC20, + // Block 164, offset 0x2900 + 0x00000002, 0x4063AC20, 0x4063B820, 0x00000002, 0x4063AC20, 0x4063C020, + 0x00000002, 0x4063AC20, 0x4063C220, 0x00000002, 0x4063B020, 0x4063B820, + 0x00000002, 0x4063B020, 0x4063C220, 0x00000002, 0x4063B020, 0x4063CC20, + 0x00000002, 0x4063B420, 0x4063AC20, 0x00000002, 0x4063B420, 0x4063B820, + 0x00000002, 0x4063B420, 0x4063C220, 0x00000002, 0x4063B820, 0x4063AC20, + 0x00000003, 0x4063B820, 0x4063AC20, 0x4063D020, 0x00000002, 0x4063B820, + 0x4063B020, 0x00000003, 0x4063B820, 0x4063B020, 0x4063D020, 0x00000003, + 0x4063B820, 0x4063B420, 0x4063D020, 0x00000002, 0x4063B820, 0x4063B820, + 0x00000002, 0x4063B820, 0x4063C220, 0x00000002, 0x4063C020, 0x4063AC20, + 0x00000003, 0x4063C020, 0x4063AC20, 0x4063D020, 0x00000002, 0x4063C020, + 0x4063B420, 0x00000002, 0x4063C020, 0x4063B820, + // Block 165, offset 0x2940 + 0x00000002, 0x4063C020, 0x4063D020, 0x00000002, 0x4063C220, 0x4063A820, + 0x00000003, 0x4063C220, 0x4063A820, 0x4063D020, 0x00000003, 0x4063C220, + 0x4063B020, 0x4063CC20, 0x00000003, 0x4063C220, 0x4063B420, 0x4063D020, + 0x00000002, 0x4063C220, 0x4063C220, 0x00000002, 0x4063CA20, 0x4063A820, + 0x00000002, 0x4063CA20, 0x4063B020, 0x00000003, 0x4063CA20, 0x4063B020, + 0x4063D020, 0x00000002, 0x4063CA20, 0x4063B420, 0x00000003, 0x4063CA20, + 0x4063B420, 0x4063D020, 0x00000002, 0x4063CA20, 0x4063C220, 0x00000002, + 0x4063CA20, 0x4063D020, 0x00000002, 0x4063CC20, 0x4063C220, 0x00000002, + 0x4063CC20, 0x4063CC20, 0x00000002, 0x4063CE20, 0x4063C220, 0x00000002, + 0x4063D020, 0x4063A820, 0x00000002, 0x4063D020, 0x4063AC20, 0x00000002, + 0x4063D020, 0x4063B820, 0x00000002, 0x4063D020, + // Block 166, offset 0x2980 + 0x4063C220, 0x00000002, 0x4063D020, 0x4063CC20, 0x00000002, 0x0062AC86, + 0x0063A886, 0x00000002, 0x0062B086, 0x0063A886, 0x00000002, 0x0062B286, + 0x0063A886, 0x00000002, 0x0062B686, 0x0063A886, 0x00000002, 0x0062B886, + 0x0063A886, 0x00000002, 0x0062BA86, 0x0063A886, 0x00000002, 0x0062BE86, + 0x0063A886, 0x00000002, 0x0062C286, 0x0063A886, 0x00000002, 0x0062C286, + 0x0063C286, 0x00000002, 0x0062C486, 0x0063A886, 0x00000002, 0x0062C886, + 0x0063A886, 0x00000002, 0x0062CA86, 0x0063A886, 0x00000002, 0x0062CC86, + 0x0063A886, 0x00000002, 0x0062CE86, 0x0063A886, 0x00000002, 0x0062D086, + 0x0063A886, 0x00000002, 0x40302A20, 0xAE605202, 0x00000002, 0x00302A83, + 0xAE605202, 0x00000002, 0x40320820, 0xAE603202, 0x00000002, 0x00320883, + 0xAE603202, 0x00000002, 0x40320A20, 0xAE603202, + // Block 167, offset 0x29c0 + 0x00000002, 0x00320A83, 0xAE603202, 0x00000002, 0x40320A20, 0xAE605B02, + 0x00000002, 0x00320A83, 0xAE605B02, 0x00000002, 0x40320E21, 0xAE603702, + 0x00000002, 0x00320EA3, 0xAE603702, 0x00000002, 0x40320E21, 0xAE603C02, + 0x00000002, 0x00320EA3, 0xAE603C02, 0x00000002, 0x40321022, 0xAE603202, + 0x00000002, 0x003210C3, 0xAE603202, 0x00000002, 0x40321022, 0xAE604702, + 0x00000002, 0x003210C3, 0xAE604702, 0x00000002, 0x40321022, 0xAE605B02, + 0x00000002, 0x003210C3, 0xAE605B02, 0x00000002, 0x40321022, 0xAD806802, + 0x00000002, 0x003210C3, 0xAD806802, 0x00000002, 0x40321023, 0xAE603502, + 0x00000002, 0x003210E3, 0xAE603502, 0x00000002, 0x40321023, 0xAE604E02, + 0x00000002, 0x003210E3, 0xAE604E02, 0x00000002, 0x40321023, 0xAE606402, + 0x00000002, 0x003210E3, 0xAE606402, 0x00000002, + // Block 168, offset 0x2a00 + 0x40321023, 0xADC07002, 0x00000002, 0x003210E3, 0xADC07002, 0x00000002, + 0x40321024, 0xAE605B02, 0x00000002, 0x00321103, 0xAE605B02, 0x00000002, + 0x402BE220, 0xAE605B02, 0x00000002, 0x002BE283, 0xAE605B02, 0x00000002, + 0x402EE620, 0xAE603202, 0x00000002, 0x002EE683, 0xAE603202, 0x00000002, + 0x402EE620, 0xAE603502, 0x00000002, 0x002EE683, 0xAE603502, 0x00000002, + 0x402EE620, 0xAE604E02, 0x00000002, 0x002EE683, 0xAE604E02, 0x00000002, + 0x402EE620, 0xAE606402, 0x00000002, 0x002EE683, 0xAE606402, 0x00000002, + 0x402EE620, 0xADC07002, 0x00000002, 0x002EE683, 0xADC07002, 0x00000002, + 0x0030BE83, 0xAE604E02, 0x00000002, 0x0030BE83, 0xADC07002, 0x00000002, + 0x40321020, 0xAE604E02, 0x00000002, 0x00321083, 0xAE604E02, 0x00000002, + 0x40321024, 0xAE603202, 0x00000002, 0x00321103, + // Block 169, offset 0x2a40 + 0xAE603202, 0x00000002, 0x40321024, 0xAE603502, 0x00000002, 0x00321103, + 0xAE603502, 0x00000002, 0x40321024, 0xAE604E02, 0x00000002, 0x00321103, + 0xAE604E02, 0x00000002, 0x40321024, 0xAE606402, 0x00000002, 0x00321103, + 0xAE606402, 0x00000002, 0x40321024, 0xADC07002, 0x00000002, 0x00321103, + 0xADC07002, +} + +// mainContractElem: 1125 entries, 4500 bytes +var mainContractElem = [1125]uint32{ + // Block 0, offset 0x0 + 0x402E2220, 0xE0000CFB, 0xE0000CFB, 0x002E2288, 0xE0000D01, 0xE0000D01, + 0x40332220, 0x40332A20, 0x40333220, 0x00332288, 0x00332A88, 0x00333288, + 0x40333A20, 0x40334220, 0x00333A88, 0x00334288, 0x40336220, 0x4033A220, + 0x4033A220, 0x00336288, 0x0033A288, 0x0033A288, 0x4033B220, 0x4033BA20, + 0x0033B288, 0x0033BA88, 0x4033CA20, 0x4033D420, 0x0033CA88, 0x0033D488, + 0x4033E420, 0x4033F220, 0x0033E488, 0x0033F288, 0x40341420, 0x40343E20, + 0x40342420, 0x00341488, 0x00343E88, 0x00342488, 0x40342C20, 0x40343620, + 0x00342C88, 0x00343688, 0x4034EE20, 0x4034F620, 0x0034EE88, 0x0034F688, + 0x4034FE20, 0x40350620, 0x0034FE88, 0x00350688, 0x40345020, 0x40356A20, + 0x40356A20, 0x00345088, 0x00356A88, 0x00356A88, 0x40357220, 0x40357A20, + 0x40358220, 0x40358A20, 0x00357288, 0x00357A88, + // Block 1, offset 0x40 + 0x00358288, 0x00358A88, 0x40361820, 0x40362220, 0x00361888, 0x00362288, + 0x40367E20, 0x40368620, 0x00367E88, 0x00368688, 0x4036A820, 0x4036B020, + 0x0036A888, 0x0036B088, 0x40371420, 0x40371C20, 0x00371488, 0x00371C88, + 0x40393820, 0x40391E20, 0x40392020, 0x40392820, 0x403A7420, 0x40392620, + 0x403A9020, 0x40393020, 0x4040F020, 0x4040F420, 0x4040F620, 0x40426E20, + 0x40427220, 0x40427020, 0x40427420, 0x40429020, 0x40429420, 0x4042D020, + 0x4042D620, 0x4042DA20, 0x4042D220, 0x4042D820, 0x40435E20, 0x40436220, + 0x4043E020, 0x4043E220, 0x4043F020, 0x4043F820, 0x4043F620, 0x4043F220, + 0x4043F420, 0x4043F620, 0x4043F820, 0x40448220, 0x40448820, 0x40448C20, + 0x40448420, 0x40448A20, 0x40451E20, 0x40452620, 0x40452020, 0x40452420, + 0x40452820, 0x40452420, 0x40452620, 0x40498420, + // Block 2, offset 0x80 + 0xE0001881, 0xE0001890, 0xE000189F, 0xE00018AE, 0xE00018BD, 0xE00018CC, + 0xE00018DB, 0xE00018EA, 0xE00018F9, 0xE0001908, 0xE0001917, 0xE0001926, + 0xE0001935, 0xE0001944, 0xE0001953, 0xE0001962, 0xE0001971, 0xE0001980, + 0xE000198F, 0xE000199E, 0xE00019AD, 0xE00019BC, 0xE00019CB, 0xE00019DA, + 0xE00019E9, 0xE00019F8, 0xE0001A07, 0xE0001A16, 0xE0001A25, 0xE0001A34, + 0xE0001A43, 0xE0001A52, 0xE0001A61, 0xE0001A70, 0xE0001A7F, 0xE0001A8E, + 0xE0001A9D, 0xE0001AAC, 0xE0001ABB, 0xE0001ACA, 0xE0001AD9, 0xE0001AE8, + 0xE0001AF7, 0xE0001B06, 0xE0001B15, 0xE0001B24, 0x40498620, 0xE0001884, + 0xE0001893, 0xE00018A2, 0xE00018B1, 0xE00018C0, 0xE00018CF, 0xE00018DE, + 0xE00018ED, 0xE00018FC, 0xE000190B, 0xE000191A, 0xE0001929, 0xE0001938, + 0xE0001947, 0xE0001956, 0xE0001965, 0xE0001974, + // Block 3, offset 0xc0 + 0xE0001983, 0xE0001992, 0xE00019A1, 0xE00019B0, 0xE00019BF, 0xE00019CE, + 0xE00019DD, 0xE00019EC, 0xE00019FB, 0xE0001A0A, 0xE0001A19, 0xE0001A28, + 0xE0001A37, 0xE0001A46, 0xE0001A55, 0xE0001A64, 0xE0001A73, 0xE0001A82, + 0xE0001A91, 0xE0001AA0, 0xE0001AAF, 0xE0001ABE, 0xE0001ACD, 0xE0001ADC, + 0xE0001AEB, 0xE0001AFA, 0xE0001B09, 0xE0001B18, 0xE0001B27, 0x40498820, + 0xE0001887, 0xE0001896, 0xE00018A5, 0xE00018B4, 0xE00018C3, 0xE00018D2, + 0xE00018E1, 0xE00018F0, 0xE00018FF, 0xE000190E, 0xE000191D, 0xE000192C, + 0xE000193B, 0xE000194A, 0xE0001959, 0xE0001968, 0xE0001977, 0xE0001986, + 0xE0001995, 0xE00019A4, 0xE00019B3, 0xE00019C2, 0xE00019D1, 0xE00019E0, + 0xE00019EF, 0xE00019FE, 0xE0001A0D, 0xE0001A1C, 0xE0001A2B, 0xE0001A3A, + 0xE0001A49, 0xE0001A58, 0xE0001A67, 0xE0001A76, + // Block 4, offset 0x100 + 0xE0001A85, 0xE0001A94, 0xE0001AA3, 0xE0001AB2, 0xE0001AC1, 0xE0001AD0, + 0xE0001ADF, 0xE0001AEE, 0xE0001AFD, 0xE0001B0C, 0xE0001B1B, 0xE0001B2A, + 0x40498A20, 0xE000188A, 0xE0001899, 0xE00018A8, 0xE00018B7, 0xE00018C6, + 0xE00018D5, 0xE00018E4, 0xE00018F3, 0xE0001902, 0xE0001911, 0xE0001920, + 0xE000192F, 0xE000193E, 0xE000194D, 0xE000195C, 0xE000196B, 0xE000197A, + 0xE0001989, 0xE0001998, 0xE00019A7, 0xE00019B6, 0xE00019C5, 0xE00019D4, + 0xE00019E3, 0xE00019F2, 0xE0001A01, 0xE0001A10, 0xE0001A1F, 0xE0001A2E, + 0xE0001A3D, 0xE0001A4C, 0xE0001A5B, 0xE0001A6A, 0xE0001A79, 0xE0001A88, + 0xE0001A97, 0xE0001AA6, 0xE0001AB5, 0xE0001AC4, 0xE0001AD3, 0xE0001AE2, + 0xE0001AF1, 0xE0001B00, 0xE0001B0F, 0xE0001B1E, 0xE0001B2D, 0x40498C20, + 0xE000188D, 0xE000189C, 0xE00018AB, 0xE00018BA, + // Block 5, offset 0x140 + 0xE00018C9, 0xE00018D8, 0xE00018E7, 0xE00018F6, 0xE0001905, 0xE0001914, + 0xE0001923, 0xE0001932, 0xE0001941, 0xE0001950, 0xE000195F, 0xE000196E, + 0xE000197D, 0xE000198C, 0xE000199B, 0xE00019AA, 0xE00019B9, 0xE00019C8, + 0xE00019D7, 0xE00019E6, 0xE00019F5, 0xE0001A04, 0xE0001A13, 0xE0001A22, + 0xE0001A31, 0xE0001A40, 0xE0001A4F, 0xE0001A5E, 0xE0001A6D, 0xE0001A7C, + 0xE0001A8B, 0xE0001A9A, 0xE0001AA9, 0xE0001AB8, 0xE0001AC7, 0xE0001AD6, + 0xE0001AE5, 0xE0001AF4, 0xE0001B03, 0xE0001B12, 0xE0001B21, 0xE0001B30, + 0xA0010502, 0x40497420, 0x4049E620, 0xE0001B42, 0xE0001B51, 0xE0001B60, + 0xE0001B6F, 0xE0001B7E, 0xE0001B9C, 0xE0001BBA, 0xE0001BC9, 0xE0001BD8, + 0xE0001BE7, 0xE0001BF6, 0xE0001C05, 0xE0001C14, 0xE0001C23, 0xE0001C32, + 0xE0001C41, 0xE0001C50, 0xE0001C5F, 0xE0001C6E, + // Block 6, offset 0x180 + 0xE0001C7D, 0xE0001C8C, 0xE0001C9B, 0xE0001CAA, 0xE0001B8D, 0xE0001CE1, + 0xE0001CF0, 0xE0001CFF, 0xE0001CB9, 0xE0001CCD, 0xE0001B33, 0xE0001BAB, + 0x4049E820, 0xE0001B45, 0xE0001B54, 0xE0001B63, 0xE0001B72, 0xE0001B81, + 0xE0001B9F, 0xE0001BBD, 0xE0001BCC, 0xE0001BDB, 0xE0001BEA, 0xE0001BF9, + 0xE0001C08, 0xE0001C17, 0xE0001C26, 0xE0001C35, 0xE0001C44, 0xE0001C53, + 0xE0001C62, 0xE0001C71, 0xE0001C80, 0xE0001C8F, 0xE0001C9E, 0xE0001CAD, + 0xE0001B90, 0xE0001CE4, 0xE0001CF3, 0xE0001D02, 0xE0001CBD, 0xE0001CD1, + 0xE0001B36, 0xE0001BAE, 0x4049EA20, 0xE0001B48, 0xE0001B57, 0xE0001B66, + 0xE0001B75, 0xE0001B84, 0xE0001BA2, 0xE0001BC0, 0xE0001BCF, 0xE0001BDE, + 0xE0001BED, 0xE0001BFC, 0xE0001C0B, 0xE0001C1A, 0xE0001C29, 0xE0001C38, + 0xE0001C47, 0xE0001C56, 0xE0001C65, 0xE0001C74, + // Block 7, offset 0x1c0 + 0xE0001C83, 0xE0001C92, 0xE0001CA1, 0xE0001CB0, 0xE0001B93, 0xE0001CE7, + 0xE0001CF6, 0xE0001D05, 0xE0001CC1, 0xE0001CD5, 0xE0001B39, 0xE0001BB1, + 0x4049EC20, 0xE0001B4B, 0xE0001B5A, 0xE0001B69, 0xE0001B78, 0xE0001B87, + 0xE0001BA5, 0xE0001BC3, 0xE0001BD2, 0xE0001BE1, 0xE0001BF0, 0xE0001BFF, + 0xE0001C0E, 0xE0001C1D, 0xE0001C2C, 0xE0001C3B, 0xE0001C4A, 0xE0001C59, + 0xE0001C68, 0xE0001C77, 0xE0001C86, 0xE0001C95, 0xE0001CA4, 0xE0001CB3, + 0xE0001B96, 0xE0001CEA, 0xE0001CF9, 0xE0001D08, 0xE0001CC5, 0xE0001CD9, + 0xE0001B3C, 0xE0001BB4, 0x4049EE20, 0xE0001B4E, 0xE0001B5D, 0xE0001B6C, + 0xE0001B7B, 0xE0001B8A, 0xE0001BA8, 0xE0001BC6, 0xE0001BD5, 0xE0001BE4, + 0xE0001BF3, 0xE0001C02, 0xE0001C11, 0xE0001C20, 0xE0001C2F, 0xE0001C3E, + 0xE0001C4D, 0xE0001C5C, 0xE0001C6B, 0xE0001C7A, + // Block 8, offset 0x200 + 0xE0001C89, 0xE0001C98, 0xE0001CA7, 0xE0001CB6, 0xE0001B99, 0xE0001CED, + 0xE0001CFC, 0xE0001D0B, 0xE0001CC9, 0xE0001CDD, 0xE0001B3F, 0xE0001BB7, + 0xA0010B02, 0x4049D220, 0x404A5A20, 0xE0001D0E, 0xE0001D1D, 0xE0001D2C, + 0xE0001D3B, 0xE0001D4A, 0xE0001D59, 0xE0001D68, 0xE0001D77, 0xE0001D86, + 0xE0001D95, 0xE0001DA4, 0xE0001DB3, 0xE0001DC2, 0xE0001DD1, 0xE0001DE0, + 0xE0001DEF, 0xE0001DFE, 0xE0001E0D, 0xE0001E1C, 0xE0001E2B, 0xE0001E3A, + 0xE0001E49, 0xE0001E58, 0xE0001E67, 0xE0001E76, 0xE0001E85, 0xE0001E94, + 0xE0001EA3, 0xE0001EB2, 0xE0001EC1, 0xE0001ED0, 0xE0001EDF, 0xE0001EEE, + 0xE0001EFD, 0xE0001F0C, 0xE0001F1B, 0xE0001F2A, 0xE0001F39, 0xE0001F48, + 0xE0001F57, 0xE0001F66, 0xE0001F75, 0xE0001F84, 0xE0001F93, 0xE0001FA2, + 0xE0001FB1, 0xE0001FC0, 0xE0001FCF, 0x404A5C20, + // Block 9, offset 0x240 + 0xE0001D11, 0xE0001D20, 0xE0001D2F, 0xE0001D3E, 0xE0001D4D, 0xE0001D5C, + 0xE0001D6B, 0xE0001D7A, 0xE0001D89, 0xE0001D98, 0xE0001DA7, 0xE0001DB6, + 0xE0001DC5, 0xE0001DD4, 0xE0001DE3, 0xE0001DF2, 0xE0001E01, 0xE0001E10, + 0xE0001E1F, 0xE0001E2E, 0xE0001E3D, 0xE0001E4C, 0xE0001E5B, 0xE0001E6A, + 0xE0001E79, 0xE0001E88, 0xE0001E97, 0xE0001EA6, 0xE0001EB5, 0xE0001EC4, + 0xE0001ED3, 0xE0001EE2, 0xE0001EF1, 0xE0001F00, 0xE0001F0F, 0xE0001F1E, + 0xE0001F2D, 0xE0001F3C, 0xE0001F4B, 0xE0001F5A, 0xE0001F69, 0xE0001F78, + 0xE0001F87, 0xE0001F96, 0xE0001FA5, 0xE0001FB4, 0xE0001FC3, 0xE0001FD2, + 0x404A6220, 0xE0001D14, 0xE0001D23, 0xE0001D32, 0xE0001D41, 0xE0001D50, + 0xE0001D5F, 0xE0001D6E, 0xE0001D7D, 0xE0001D8C, 0xE0001D9B, 0xE0001DAA, + 0xE0001DB9, 0xE0001DC8, 0xE0001DD7, 0xE0001DE6, + // Block 10, offset 0x280 + 0xE0001DF5, 0xE0001E04, 0xE0001E13, 0xE0001E22, 0xE0001E31, 0xE0001E40, + 0xE0001E4F, 0xE0001E5E, 0xE0001E6D, 0xE0001E7C, 0xE0001E8B, 0xE0001E9A, + 0xE0001EA9, 0xE0001EB8, 0xE0001EC7, 0xE0001ED6, 0xE0001EE5, 0xE0001EF4, + 0xE0001F03, 0xE0001F12, 0xE0001F21, 0xE0001F30, 0xE0001F3F, 0xE0001F4E, + 0xE0001F5D, 0xE0001F6C, 0xE0001F7B, 0xE0001F8A, 0xE0001F99, 0xE0001FA8, + 0xE0001FB7, 0xE0001FC6, 0xE0001FD5, 0x404A6620, 0xE0001D17, 0xE0001D26, + 0xE0001D35, 0xE0001D44, 0xE0001D53, 0xE0001D62, 0xE0001D71, 0xE0001D80, + 0xE0001D8F, 0xE0001D9E, 0xE0001DAD, 0xE0001DBC, 0xE0001DCB, 0xE0001DDA, + 0xE0001DE9, 0xE0001DF8, 0xE0001E07, 0xE0001E16, 0xE0001E25, 0xE0001E34, + 0xE0001E43, 0xE0001E52, 0xE0001E61, 0xE0001E70, 0xE0001E7F, 0xE0001E8E, + 0xE0001E9D, 0xE0001EAC, 0xE0001EBB, 0xE0001ECA, + // Block 11, offset 0x2c0 + 0xE0001ED9, 0xE0001EE8, 0xE0001EF7, 0xE0001F06, 0xE0001F15, 0xE0001F24, + 0xE0001F33, 0xE0001F42, 0xE0001F51, 0xE0001F60, 0xE0001F6F, 0xE0001F7E, + 0xE0001F8D, 0xE0001F9C, 0xE0001FAB, 0xE0001FBA, 0xE0001FC9, 0xE0001FD8, + 0x404A6820, 0xE0001D1A, 0xE0001D29, 0xE0001D38, 0xE0001D47, 0xE0001D56, + 0xE0001D65, 0xE0001D74, 0xE0001D83, 0xE0001D92, 0xE0001DA1, 0xE0001DB0, + 0xE0001DBF, 0xE0001DCE, 0xE0001DDD, 0xE0001DEC, 0xE0001DFB, 0xE0001E0A, + 0xE0001E19, 0xE0001E28, 0xE0001E37, 0xE0001E46, 0xE0001E55, 0xE0001E64, + 0xE0001E73, 0xE0001E82, 0xE0001E91, 0xE0001EA0, 0xE0001EAF, 0xE0001EBE, + 0xE0001ECD, 0xE0001EDC, 0xE0001EEB, 0xE0001EFA, 0xE0001F09, 0xE0001F18, + 0xE0001F27, 0xE0001F36, 0xE0001F45, 0xE0001F54, 0xE0001F63, 0xE0001F72, + 0xE0001F81, 0xE0001F90, 0xE0001F9F, 0xE0001FAE, + // Block 12, offset 0x300 + 0xE0001FBD, 0xE0001FCC, 0xE0001FDB, 0x404AEA20, 0xE000200E, 0xE0002011, + 0x404B2620, 0x404B2420, 0x404B2620, 0x404AF020, 0xE0002014, 0xE0002017, + 0x404B2A20, 0x404B2820, 0x404B2A20, 0x8281258B, 0x8281258D, 0x82812591, + 0x8281258F, 0x404ECA20, 0x404ECC20, 0x404F9C20, 0x404F9620, 0x404F9E20, + 0x404F9820, 0x40522620, 0x40522820, 0x40522A20, 0x40522C20, 0x40522E20, + 0x40523020, 0x40523220, 0x40523420, 0x40523620, 0x40523820, 0x40523E20, + 0x40524020, 0x40529C20, 0x40529E20, 0x4052A020, 0x4052A220, 0x4052A420, + 0x4052A820, 0x4052A620, 0x4052AA20, 0x4052AC20, 0x4052AE20, 0x40094220, + 0x40094420, 0x40393820, 0x40393A21, 0x40393A22, 0x40393A23, 0x403A7420, + 0x403A7621, 0x403A9020, 0x403A9221, 0x402C3A20, 0x402C3C20, 0x002C3A88, + 0x002C3C83, 0x402D2220, 0x402D2420, 0x002D2288, + // Block 13, offset 0x340 + 0x002D2483, 0x002D9883, 0x002D9A83, 0x402EE220, 0x402EE420, 0x002EE288, + 0x002EE483, 0x402FE620, 0x402FE820, 0x002FE688, 0x002FE883, 0x40306C20, + 0x40306E20, 0x00306C88, 0x00306E83, 0x402E2220, 0x402E2420, 0x402E2420, + 0x002E2288, 0x002E2483, 0x002E2483, 0x402BDE20, 0x402BE020, 0x002BDE88, + 0x002BE083, 0x402C6220, 0x402C6420, 0x002C6288, 0x002C6483, 0x402C9820, + 0x402C9A20, 0x402C9C20, 0x002C9888, 0x002C9A83, 0x002C9C83, 0x402D9A20, + 0x402D9C20, 0x002D9A88, 0x002D9C83, 0x402E9E20, 0x402EA020, 0x002E9E88, + 0x002EA083, 0x402F7A20, 0x402F7C20, 0x002F7A88, 0x002F7C83, 0x40302C20, + 0x40302E20, 0x00302C88, 0x00302E83, 0x40306C20, 0x40306E20, 0x40307020, + 0x00306C88, 0x00306E83, 0x00307083, 0x40310020, 0x40310220, 0x00310088, + 0x00310283, 0x40312A20, 0x40312C20, 0x00312A88, + // Block 14, offset 0x380 + 0x00312C83, 0x40306C20, 0x40310021, 0x40310022, 0x00306C88, 0x003100A3, + 0x003100C3, 0x402BDE20, 0x40320C21, 0x40321020, 0x00321084, 0x002BDE88, + 0x00320CA3, 0x00321083, 0x00321086, 0x00321085, 0x402C9820, 0x40320C22, + 0x002C9888, 0x00320CC3, 0x402EE220, 0x40320E21, 0x40320E22, 0x002EE288, + 0x00320EA3, 0x00320EC3, 0x402BDE20, 0xE00026B2, 0x002BDE88, 0xE00026B5, + 0x402EE220, 0xE00026C0, 0x002EE288, 0xE00026C3, 0x40306C20, 0xE00026D6, + 0x00306C88, 0xE00026D9, 0x402BDE20, 0x40320E20, 0x40320C20, 0x002BDE88, + 0x00320E83, 0x00320C83, 0x402EE220, 0x40321023, 0x40321020, 0x40321022, + 0x002EE288, 0x003210E3, 0x00321083, 0x003210C3, 0x402C3A20, 0x402C3E20, + 0x402C3C20, 0x002C3A88, 0x002C3E83, 0x002C3C83, 0x402C6220, 0x402C6420, + 0x402C6420, 0x002C6288, 0x002C6486, 0x002C6484, + // Block 15, offset 0x3c0 + 0x002C6486, 0x002C6484, 0x402E2220, 0xE0000CFB, 0xE0000CFB, 0x402E2420, + 0x002E2288, 0xE0000D01, 0xE0000D01, 0x002E2486, 0x002E2484, 0x002E9E88, + 0x002EA086, 0x002EA084, 0x402BDE20, 0x402C0820, 0x40320C21, 0x40321020, + 0x002BDE88, 0x002C0883, 0x00320CA3, 0x00321083, 0x402C9820, 0x402D0620, + 0x002C9888, 0x002D0683, 0x402D9A20, 0x402DCA20, 0x002D9A88, 0x002DCA83, + 0x402EE220, 0x402F2A20, 0x40320E20, 0x002EE288, 0x002F2A83, 0x00320E83, + 0x40306C20, 0x4030BC20, 0x00306C88, 0x0030BC83, 0x40310020, 0x40312820, + 0x00310088, 0x00312883, 0x002DFE88, 0x002F56A3, 0x402BDE20, 0x40320C21, + 0x40321020, 0x002BDE88, 0x00320CA3, 0x00321083, 0x4062AC20, 0x4062AC21, + 0x4062B220, 0x4062B221, 0x4062BA20, 0x4062BA21, 0x4062BE20, 0x4062BE21, + 0x4062C420, 0x4062C421, 0x402BDE20, 0x40320C21, + // Block 16, offset 0x400 + 0x40321020, 0x40321021, 0x002BDE88, 0x00320CA3, 0x00321083, 0x003210A4, + 0x003210A3, 0x402BDE20, 0x402C0820, 0x40320E21, 0x40320C21, 0x40320E20, + 0x40320C20, 0x002BDE88, 0x002C0883, 0x00320EA3, 0x00320CA3, 0x00320E83, + 0x00320C83, 0x402C3A20, 0x402C5C20, 0x002C3A88, 0x002C5C83, 0x402C5E20, + 0x402C6020, 0x002C5E83, 0x002C6083, 0x402D2220, 0x402D6420, 0x002D2288, + 0x002D6483, 0x402DFE20, 0x402E2020, 0x002DFE88, 0x002E2083, 0x402E9E20, + 0x402EE021, 0x402EE022, 0x002E9E88, 0x002EE0A3, 0x002EE0C3, 0x402FE620, + 0x40302A20, 0x002FE688, 0x00302A83, 0x40312A20, 0x40320620, 0x00312A88, + 0x00320683, 0x402EE220, 0x40321023, 0x40321022, 0x40321020, 0x40321021, + 0x40321024, 0x002EE288, 0x003210E3, 0x003210C3, 0x00321083, 0x003210A3, + 0x00321103, 0x402BDE20, 0x402BE020, 0x402BE220, + // Block 17, offset 0x440 + 0x002BDE88, 0x002BE083, 0x002BE283, 0x402E2220, 0xE0000CFB, 0x402E2420, + 0x402E2620, 0xE0000CFB, 0x002E2288, 0xE0000D01, 0x002E2483, 0x002E2683, + 0xE0000D01, 0x402EE220, 0x402EE420, 0x402EE620, 0x002EE288, 0x002EE483, + 0x002EE683, 0x402F7A20, 0x402F7C20, 0x402F7E20, 0x002F7A88, 0x002F7C83, + 0x002F7E83, 0x402C9820, 0x40320E22, 0x002C9888, 0x00320EC3, 0x402EE220, + 0x40321024, 0x40321020, 0x40321022, 0x002EE288, 0x00321103, 0x00321083, + 0x003210C3, +} + +// mainValues: 37888 entries, 151552 bytes +// Block 2 is the null block. +var mainValues = [37888]uint32{ + // Block 0x0, offset 0x0 + 0x0000: 0xa0000000, 0x0001: 0xa0000000, 0x0002: 0xa0000000, 0x0003: 0xa0000000, + 0x0004: 0xa0000000, 0x0005: 0xa0000000, 0x0006: 0xa0000000, 0x0007: 0xa0000000, + 0x0008: 0xa0000000, 0x0009: 0x40020020, 0x000a: 0x40020220, 0x000b: 0x40020420, + 0x000c: 0x40020620, 0x000d: 0x40020820, 0x000e: 0xa0000000, 0x000f: 0xa0000000, + 0x0010: 0xa0000000, 0x0011: 0xa0000000, 0x0012: 0xa0000000, 0x0013: 0xa0000000, + 0x0014: 0xa0000000, 0x0015: 0xa0000000, 0x0016: 0xa0000000, 0x0017: 0xa0000000, + 0x0018: 0xa0000000, 0x0019: 0xa0000000, 0x001a: 0xa0000000, 0x001b: 0xa0000000, + 0x001c: 0xa0000000, 0x001d: 0xa0000000, 0x001e: 0xa0000000, 0x001f: 0xa0000000, + 0x0020: 0x40021220, 0x0021: 0x4002ba20, 0x0022: 0x4003e020, 0x0023: 0x4004ea20, + 0x0024: 0x4027de20, 0x0025: 0x4004ec20, 0x0026: 0x4004e620, 0x0027: 0x4003d220, + 0x0028: 0x4003f420, 0x0029: 0x4003f620, 0x002a: 0x4004d820, 0x002b: 0x40093820, + 0x002c: 0x40024020, 0x002d: 0x40021a20, 0x002e: 0x4002e420, 0x002f: 0x4004e220, + 0x0030: 0x4029cc20, 0x0031: 0x4029ce20, 0x0032: 0x4029d020, 0x0033: 0x4029d220, + 0x0034: 0x4029d420, 0x0035: 0x4029d620, 0x0036: 0x4029d820, 0x0037: 0x4029da20, + 0x0038: 0x4029dc20, 0x0039: 0x4029de20, 0x003a: 0x40026c20, 0x003b: 0x40026220, + 0x003c: 0x40094020, 0x003d: 0x40094220, 0x003e: 0x40094420, 0x003f: 0x4002c420, + // Block 0x1, offset 0x40 + 0x0040: 0x4004d620, 0x0041: 0x002bde88, 0x0042: 0x002c0a88, 0x0043: 0x002c3a88, + 0x0044: 0x002c6288, 0x0045: 0x002c9888, 0x0046: 0x002d0888, 0x0047: 0x002d2288, + 0x0048: 0x002d6888, 0x0049: 0x002d9a88, 0x004a: 0x002dcc88, 0x004b: 0x002dfe88, + 0x004c: 0xc0030002, 0x004d: 0x002e8288, 0x004e: 0x002e9e88, 0x004f: 0x002ee288, + 0x0050: 0x002f2c88, 0x0051: 0x002f5688, 0x0052: 0x002f7a88, 0x0053: 0x002fe688, + 0x0054: 0x00302c88, 0x0055: 0x00306c88, 0x0056: 0x0030be88, 0x0057: 0x0030e288, + 0x0058: 0x0030f688, 0x0059: 0x00310088, 0x005a: 0x00312a88, 0x005b: 0x4003f820, + 0x005c: 0x4004e420, 0x005d: 0x4003fa20, 0x005e: 0x40062420, 0x005f: 0x40021620, + 0x0060: 0x40061e20, 0x0061: 0x402bde20, 0x0062: 0x402c0a20, 0x0063: 0x402c3a20, + 0x0064: 0x402c6220, 0x0065: 0x402c9820, 0x0066: 0x402d0820, 0x0067: 0x402d2220, + 0x0068: 0x402d6820, 0x0069: 0x402d9a20, 0x006a: 0x402dcc20, 0x006b: 0x402dfe20, + 0x006c: 0xc0000002, 0x006d: 0x402e8220, 0x006e: 0x402e9e20, 0x006f: 0x402ee220, + 0x0070: 0x402f2c20, 0x0071: 0x402f5620, 0x0072: 0x402f7a20, 0x0073: 0x402fe620, + 0x0074: 0x40302c20, 0x0075: 0x40306c20, 0x0076: 0x4030be20, 0x0077: 0x4030e220, + 0x0078: 0x4030f620, 0x0079: 0x40310020, 0x007a: 0x40312a20, 0x007b: 0x4003fc20, + 0x007c: 0x40094820, 0x007d: 0x4003fe20, 0x007e: 0x40094c20, 0x007f: 0xa0000000, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0x00c0: 0xa0000000, 0x00c1: 0xa0000000, 0x00c2: 0xa0000000, 0x00c3: 0xa0000000, + 0x00c4: 0xa0000000, 0x00c5: 0x40020a20, 0x00c6: 0xa0000000, 0x00c7: 0xa0000000, + 0x00c8: 0xa0000000, 0x00c9: 0xa0000000, 0x00ca: 0xa0000000, 0x00cb: 0xa0000000, + 0x00cc: 0xa0000000, 0x00cd: 0xa0000000, 0x00ce: 0xa0000000, 0x00cf: 0xa0000000, + 0x00d0: 0xa0000000, 0x00d1: 0xa0000000, 0x00d2: 0xa0000000, 0x00d3: 0xa0000000, + 0x00d4: 0xa0000000, 0x00d5: 0xa0000000, 0x00d6: 0xa0000000, 0x00d7: 0xa0000000, + 0x00d8: 0xa0000000, 0x00d9: 0xa0000000, 0x00da: 0xa0000000, 0x00db: 0xa0000000, + 0x00dc: 0xa0000000, 0x00dd: 0xa0000000, 0x00de: 0xa0000000, 0x00df: 0xa0000000, + 0x00e0: 0x0002129b, 0x00e1: 0x4002bc20, 0x00e2: 0x4027dc20, 0x00e3: 0x4027e020, + 0x00e4: 0x4027da20, 0x00e5: 0x4027e220, 0x00e6: 0x40094a20, 0x00e7: 0x4004ce20, + 0x00e8: 0x40062c20, 0x00e9: 0x40081820, 0x00ea: 0x002bde94, 0x00eb: 0x4003f020, + 0x00ec: 0x40094620, 0x00ed: 0xa0000000, 0x00ee: 0x40081a20, 0x00ef: 0x40062620, + 0x00f0: 0x40070420, 0x00f1: 0x40093a20, 0x00f2: 0x0029d094, 0x00f3: 0x0029d294, + 0x00f4: 0x40062020, 0x00f5: 0x00327684, 0x00f6: 0x4004d220, 0x00f7: 0x40030620, + 0x00f8: 0x40063220, 0x00f9: 0x0029ce94, 0x00fa: 0x002ee294, 0x00fb: 0x4003f220, + 0x00fc: 0xe00002bf, 0x00fd: 0xe00002b7, 0x00fe: 0xe00004a7, 0x00ff: 0x4002c620, + // Block 0x4, offset 0x100 + 0x0100: 0xe00008f5, 0x0101: 0xe00008ef, 0x0102: 0xe0000921, 0x0103: 0xe0000969, + 0x0104: 0xe000095b, 0x0105: 0xe000094d, 0x0106: 0xe00009dd, 0x0107: 0xe0000a53, + 0x0108: 0xe0000ae8, 0x0109: 0xe0000ae2, 0x010a: 0xe0000af4, 0x010b: 0xe0000b20, + 0x010c: 0xe0000c2b, 0x010d: 0xe0000c25, 0x010e: 0xe0000c37, 0x010f: 0xe0000c43, + 0x0110: 0xe0000ab3, 0x0111: 0xe0000d63, 0x0112: 0xe0000d9a, 0x0113: 0xe0000d94, + 0x0114: 0xe0000da6, 0x0115: 0xe0000de6, 0x0116: 0xe0000dd2, 0x0117: 0x40093e20, + 0x0118: 0xe0000e12, 0x0119: 0xe0000fe1, 0x011a: 0xe0000fdb, 0x011b: 0xe0000fed, + 0x011c: 0xe0000fff, 0x011d: 0xe0001102, 0x011e: 0x00318888, 0x011f: 0xe0000f7b, + 0x0120: 0xe00008f2, 0x0121: 0xe00008ec, 0x0122: 0xe000091e, 0x0123: 0xe0000966, + 0x0124: 0xe0000958, 0x0125: 0xe000094a, 0x0126: 0xe00009d5, 0x0127: 0xe0000a4d, + 0x0128: 0xe0000ae5, 0x0129: 0xe0000adf, 0x012a: 0xe0000af1, 0x012b: 0xe0000b1d, + 0x012c: 0xe0000c28, 0x012d: 0xe0000c22, 0x012e: 0xe0000c34, 0x012f: 0xe0000c40, + 0x0130: 0xe0000aad, 0x0131: 0xe0000d60, 0x0132: 0xe0000d97, 0x0133: 0xe0000d91, + 0x0134: 0xe0000da3, 0x0135: 0xe0000de3, 0x0136: 0xe0000dcf, 0x0137: 0x40093c20, + 0x0138: 0xe0000e0f, 0x0139: 0xe0000fde, 0x013a: 0xe0000fd8, 0x013b: 0xe0000fea, + 0x013c: 0xe0000ffc, 0x013d: 0xe00010ff, 0x013e: 0x40318820, 0x013f: 0xe0001114, + // Block 0x5, offset 0x140 + 0x0140: 0xe0000983, 0x0141: 0xe0000980, 0x0142: 0xe00008fb, 0x0143: 0xe00008f8, + 0x0144: 0xe000097d, 0x0145: 0xe000097a, 0x0146: 0xe0000a38, 0x0147: 0xe0000a35, + 0x0148: 0xe0000a3e, 0x0149: 0xe0000a3b, 0x014a: 0xe0000a4a, 0x014b: 0xe0000a47, + 0x014c: 0xe0000a44, 0x014d: 0xe0000a41, 0x014e: 0xe0000a86, 0x014f: 0xe0000a83, + 0x0150: 0xe0000aaa, 0x0151: 0xe0000aa7, 0x0152: 0xe0000b46, 0x0153: 0xe0000b43, + 0x0154: 0xe0000aee, 0x0155: 0xe0000aeb, 0x0156: 0xe0000b2c, 0x0157: 0xe0000b29, + 0x0158: 0xe0000b40, 0x0159: 0xe0000b3d, 0x015a: 0xe0000b1a, 0x015b: 0xe0000b17, + 0x015c: 0xe0000bb8, 0x015d: 0xe0000bb5, 0x015e: 0xe0000bb2, 0x015f: 0xe0000baf, + 0x0160: 0xe0000bc4, 0x0161: 0xe0000bc1, 0x0162: 0xe0000bca, 0x0163: 0xe0000bc7, + 0x0164: 0xe0000bee, 0x0165: 0xe0000beb, 0x0166: 0xe0000c1b, 0x0167: 0xe0000c18, + 0x0168: 0xe0000c51, 0x0169: 0xe0000c4e, 0x016a: 0xe0000c60, 0x016b: 0xe0000c5d, + 0x016c: 0xe0000c31, 0x016d: 0xe0000c2e, 0x016e: 0xe0000c5a, 0x016f: 0xe0000c57, + 0x0170: 0xe0000c54, 0x0171: 0x402da220, 0x0172: 0xf0000a0a, 0x0173: 0xf0000404, + 0x0174: 0xe0000c8a, 0x0175: 0xe0000c87, 0x0176: 0xe0000c9f, 0x0177: 0xe0000c9c, + 0x0178: 0x402f7220, 0x0179: 0xe0000ccc, 0x017a: 0xe0000cc9, 0x017b: 0xe0000cd8, + 0x017c: 0xe0000cd5, 0x017d: 0xe0000cd2, 0x017e: 0xe0000ccf, 0x017f: 0xe0000d04, + // Block 0x6, offset 0x180 + 0x0180: 0xe0000cfe, 0x0181: 0xe0000cf8, 0x0182: 0xe0000cf5, 0x0183: 0xe0000d51, + 0x0184: 0xe0000d4e, 0x0185: 0xe0000d6f, 0x0186: 0xe0000d6c, 0x0187: 0xe0000d5d, + 0x0188: 0xe0000d5a, 0x0189: 0xf0000404, 0x018a: 0x002eda88, 0x018b: 0x402eda20, + 0x018c: 0xe0000e2e, 0x018d: 0xe0000e2b, 0x018e: 0xe0000da0, 0x018f: 0xe0000d9d, + 0x0190: 0xe0000de0, 0x0191: 0xe0000ddd, 0x0192: 0xe0000e93, 0x0193: 0xe0000e8f, + 0x0194: 0xe0000eca, 0x0195: 0xe0000ec7, 0x0196: 0xe0000edc, 0x0197: 0xe0000ed9, + 0x0198: 0xe0000ed0, 0x0199: 0xe0000ecd, 0x019a: 0xe0000f1f, 0x019b: 0xe0000f1c, + 0x019c: 0xe0000f2d, 0x019d: 0xe0000f2a, 0x019e: 0xe0000f47, 0x019f: 0xe0000f44, + 0x01a0: 0xe0000f33, 0x01a1: 0xe0000f30, 0x01a2: 0xe0000f99, 0x01a3: 0xe0000f96, + 0x01a4: 0xe0000f8a, 0x01a5: 0xe0000f87, 0x01a6: 0x00303688, 0x01a7: 0x40303620, + 0x01a8: 0xe000102b, 0x01a9: 0xe0001028, 0x01aa: 0xe000103f, 0x01ab: 0xe000103c, + 0x01ac: 0xe0000fe7, 0x01ad: 0xe0000fe4, 0x01ae: 0xe0000ff9, 0x01af: 0xe0000ff6, + 0x01b0: 0xe0001025, 0x01b1: 0xe0001022, 0x01b2: 0xe0001039, 0x01b3: 0xe0001036, + 0x01b4: 0xe00010d8, 0x01b5: 0xe00010d5, 0x01b6: 0xe000110e, 0x01b7: 0xe000110b, + 0x01b8: 0xe0001117, 0x01b9: 0xe000113b, 0x01ba: 0xe0001138, 0x01bb: 0xe000114d, + 0x01bc: 0xe000114a, 0x01bd: 0xe0001147, 0x01be: 0xe0001144, 0x01bf: 0xe0000f64, + // Block 0x7, offset 0x1c0 + 0x01c0: 0x402c1a20, 0x01c1: 0x002c2a88, 0x01c2: 0x002c3288, 0x01c3: 0x402c3220, + 0x01c4: 0x0031c488, 0x01c5: 0x4031c420, 0x01c6: 0x002efa88, 0x01c7: 0x002c4e88, + 0x01c8: 0x402c4e20, 0x01c9: 0x002c7288, 0x01ca: 0x002c7a88, 0x01cb: 0x002c8488, + 0x01cc: 0x402c8420, 0x01cd: 0xe000115c, 0x01ce: 0x002cae88, 0x01cf: 0x002cb888, + 0x01d0: 0x002cc288, 0x01d1: 0x002d1688, 0x01d2: 0x402d1620, 0x01d3: 0x002d4488, + 0x01d4: 0x002d5888, 0x01d5: 0x402d7820, 0x01d6: 0x002dc288, 0x01d7: 0x002db688, + 0x01d8: 0x002e0a88, 0x01d9: 0x402e0a20, 0x01da: 0x402e3820, 0x01db: 0x402e7220, + 0x01dc: 0x0030a088, 0x01dd: 0x002eb488, 0x01de: 0x402ebc20, 0x01df: 0x002f1088, + 0x01e0: 0xe0000e56, 0x01e1: 0xe0000e53, 0x01e2: 0x002d6088, 0x01e3: 0x402d6020, + 0x01e4: 0x002f3e88, 0x01e5: 0x402f3e20, 0x01e6: 0x002f8288, 0x01e7: 0x0031b488, + 0x01e8: 0x4031b420, 0x01e9: 0x00300888, 0x01ea: 0x40301220, 0x01eb: 0x40304220, + 0x01ec: 0x00304a88, 0x01ed: 0x40304a20, 0x01ee: 0x00305288, 0x01ef: 0xe000105f, + 0x01f0: 0xe000105c, 0x01f1: 0x0030b488, 0x01f2: 0x0030cc88, 0x01f3: 0x00311888, + 0x01f4: 0x40311820, 0x01f5: 0x00313488, 0x01f6: 0x40313420, 0x01f7: 0x00316488, + 0x01f8: 0x00316e88, 0x01f9: 0x40316e20, 0x01fa: 0x40317820, 0x01fb: 0x4031a620, + 0x01fc: 0x0031bc88, 0x01fd: 0x4031bc20, 0x01fe: 0xe0000fc9, 0x01ff: 0x40319420, + // Block 0x8, offset 0x200 + 0x0200: 0x40321220, 0x0201: 0x40321a20, 0x0202: 0x40322220, 0x0203: 0x40322a20, + 0x0204: 0xe0000ad5, 0x0205: 0xe0000ad1, 0x0206: 0xe0000acd, 0x0207: 0xf0000a0a, + 0x0208: 0xf000040a, 0x0209: 0xf0000404, 0x020a: 0xf0000a0a, 0x020b: 0xf000040a, + 0x020c: 0xf0000404, 0x020d: 0xe0000947, 0x020e: 0xe0000944, 0x020f: 0xe0000c3d, + 0x0210: 0xe0000c3a, 0x0211: 0xe0000dcc, 0x0212: 0xe0000dc9, 0x0213: 0xe0000ff3, + 0x0214: 0xe0000ff0, 0x0215: 0xe000101e, 0x0216: 0xe000101a, 0x0217: 0xe0001006, + 0x0218: 0xe0001002, 0x0219: 0xe0001016, 0x021a: 0xe0001012, 0x021b: 0xe000100e, + 0x021c: 0xe000100a, 0x021d: 0x402cae20, 0x021e: 0xe0000962, 0x021f: 0xe000095e, + 0x0220: 0xe0000976, 0x0221: 0xe0000972, 0x0222: 0xe00009f4, 0x0223: 0xe00009ef, + 0x0224: 0x002d3a88, 0x0225: 0x402d3a20, 0x0226: 0xe0000bbe, 0x0227: 0xe0000bbb, + 0x0228: 0xe0000c99, 0x0229: 0xe0000c96, 0x022a: 0xe0000e20, 0x022b: 0xe0000e1d, + 0x022c: 0xe0000e27, 0x022d: 0xe0000e23, 0x022e: 0xe0001162, 0x022f: 0xe000115f, + 0x0230: 0xe0000c8d, 0x0231: 0xf0000a0a, 0x0232: 0xf000040a, 0x0233: 0xf0000404, + 0x0234: 0xe0000bac, 0x0235: 0xe0000ba9, 0x0236: 0x002d7888, 0x0237: 0x00319488, + 0x0238: 0xe0000d57, 0x0239: 0xe0000d54, 0x023a: 0xe0000954, 0x023b: 0xe0000950, + 0x023c: 0xe00009ea, 0x023d: 0xe00009e5, 0x023e: 0xe0000e19, 0x023f: 0xe0000e15, + // Block 0x9, offset 0x240 + 0x0240: 0xe000098f, 0x0241: 0xe000098c, 0x0242: 0xe0000995, 0x0243: 0xe0000992, + 0x0244: 0xe0000b62, 0x0245: 0xe0000b5f, 0x0246: 0xe0000b68, 0x0247: 0xe0000b65, + 0x0248: 0xe0000c6c, 0x0249: 0xe0000c69, 0x024a: 0xe0000c72, 0x024b: 0xe0000c6f, + 0x024c: 0xe0000e4a, 0x024d: 0xe0000e47, 0x024e: 0xe0000e50, 0x024f: 0xe0000e4d, + 0x0250: 0xe0000ee8, 0x0251: 0xe0000ee5, 0x0252: 0xe0000eee, 0x0253: 0xe0000eeb, + 0x0254: 0xe0001053, 0x0255: 0xe0001050, 0x0256: 0xe0001059, 0x0257: 0xe0001056, + 0x0258: 0xe0000f61, 0x0259: 0xe0000f5e, 0x025a: 0xe0000fa5, 0x025b: 0xe0000fa2, + 0x025c: 0x00312288, 0x025d: 0x40312220, 0x025e: 0xe0000bf4, 0x025f: 0xe0000bf1, + 0x0260: 0x002ebc88, 0x0261: 0x402c8c20, 0x0262: 0x002f2288, 0x0263: 0x402f2220, + 0x0264: 0x00314088, 0x0265: 0x40314020, 0x0266: 0xe000096f, 0x0267: 0xe000096c, + 0x0268: 0xe0000b32, 0x0269: 0xe0000b2f, 0x026a: 0xe0000dd9, 0x026b: 0xe0000dd5, + 0x026c: 0xe0000dfd, 0x026d: 0xe0000df9, 0x026e: 0xe0000e04, 0x026f: 0xe0000e01, + 0x0270: 0xe0000e0b, 0x0271: 0xe0000e07, 0x0272: 0xe0001129, 0x0273: 0xe0001126, + 0x0274: 0x402e5e20, 0x0275: 0x402ed020, 0x0276: 0x40305a20, 0x0277: 0x402dd420, + 0x0278: 0xe0000abf, 0x0279: 0xe0000ec4, 0x027a: 0x002be888, 0x027b: 0x002c4488, + 0x027c: 0x402c4420, 0x027d: 0x002e3888, 0x027e: 0x00303e88, 0x027f: 0x402ffc20, + // Block 0xa, offset 0x280 + 0x0280: 0x40315820, 0x0281: 0x0031d488, 0x0282: 0x4031d420, 0x0283: 0x002c1a88, + 0x0284: 0x00307c88, 0x0285: 0x0030da88, 0x0286: 0x002ca288, 0x0287: 0x402ca220, + 0x0288: 0x002dde88, 0x0289: 0x402dde20, 0x028a: 0x002f6a88, 0x028b: 0x402f6a20, + 0x028c: 0x002f8e88, 0x028d: 0x402f8e20, 0x028e: 0x00311088, 0x028f: 0x40311020, + 0x0290: 0x402bf020, 0x0291: 0x402bf820, 0x0292: 0x402c0220, 0x0293: 0x402c2a20, + 0x0294: 0x402efa20, 0x0295: 0x402c5620, 0x0296: 0x402c7220, 0x0297: 0x402c7a20, + 0x0298: 0x402ccc20, 0x0299: 0x402cb820, 0x029a: 0x402cd420, 0x029b: 0x402cc220, + 0x029c: 0x402cdc20, 0x029d: 0x402ce820, 0x029e: 0x402cf020, 0x029f: 0x402dee20, + 0x02a0: 0x402d4420, 0x02a1: 0x402d2a20, 0x02a2: 0x402d3220, 0x02a3: 0x402d5820, + 0x02a4: 0x402d0020, 0x02a5: 0x40308820, 0x02a6: 0x402d8020, 0x02a7: 0x402d8e20, + 0x02a8: 0x402db620, 0x02a9: 0x402dc220, 0x02aa: 0x402daa20, 0x02ab: 0x402e4220, + 0x02ac: 0x402e4a20, 0x02ad: 0x402e5420, 0x02ae: 0x402e6820, 0x02af: 0x4030a020, + 0x02b0: 0x4030ac20, 0x02b1: 0x402e9020, 0x02b2: 0x402eb420, 0x02b3: 0x402ec820, + 0x02b4: 0x402ea620, 0x02b5: 0x402f1020, 0x02b6: 0x402eee20, 0x02b7: 0x402f1a20, + 0x02b8: 0x402f4c20, 0x02b9: 0x402f9820, 0x02ba: 0x402fa220, 0x02bb: 0x402fac20, + 0x02bc: 0x402fb620, 0x02bd: 0x402fbe20, 0x02be: 0x402fc620, 0x02bf: 0x402fd020, + // Block 0xb, offset 0x2c0 + 0x02c0: 0x402f8220, 0x02c1: 0x402fd820, 0x02c2: 0x402ff420, 0x02c3: 0x40300820, + 0x02c4: 0x402df620, 0x02c5: 0x40301a20, 0x02c6: 0x40302420, 0x02c7: 0x40306420, + 0x02c8: 0x40305220, 0x02c9: 0x40307c20, 0x02ca: 0x4030b420, 0x02cb: 0x4030cc20, + 0x02cc: 0x4030da20, 0x02cd: 0x4030ee20, 0x02ce: 0x402e7a20, 0x02cf: 0x40310820, + 0x02d0: 0x40314820, 0x02d1: 0x40315020, 0x02d2: 0x40316420, 0x02d3: 0x40318020, + 0x02d4: 0x4031cc20, 0x02d5: 0x4031e820, 0x02d6: 0x40320a20, 0x02d7: 0x40323220, + 0x02d8: 0x40323a20, 0x02d9: 0x402c1220, 0x02da: 0x402cf820, 0x02db: 0x402d4c20, + 0x02dc: 0x402d7020, 0x02dd: 0x402de620, 0x02de: 0x402e1a20, 0x02df: 0x402e2a20, + 0x02e0: 0x402f6220, 0x02e1: 0x4031fa20, 0x02e2: 0x40320220, 0x02e3: 0xe0000aca, + 0x02e4: 0xe0000adc, 0x02e5: 0xe0000ad9, 0x02e6: 0xe0000fcc, 0x02e7: 0xe0000fcf, + 0x02e8: 0xe0000fba, 0x02e9: 0xe0000ba1, 0x02ea: 0xe0000d11, 0x02eb: 0xe0000d18, + 0x02ec: 0x40324220, 0x02ed: 0x40324a20, 0x02ee: 0x40309020, 0x02ef: 0x40309820, + 0x02f0: 0x002d6894, 0x02f1: 0x002d8094, 0x02f2: 0x002dcc94, 0x02f3: 0x002f7a94, + 0x02f4: 0x002f9894, 0x02f5: 0x002fac94, 0x02f6: 0x002fd894, 0x02f7: 0x0030e294, + 0x02f8: 0x00310094, 0x02f9: 0x40064020, 0x02fa: 0x40064420, 0x02fb: 0x402d9620, + 0x02fc: 0x4031de20, 0x02fd: 0x402d9820, 0x02fe: 0x4031e220, 0x02ff: 0x4031f020, + // Block 0xc, offset 0x300 + 0x0300: 0x4031dc20, 0x0301: 0x4031f220, 0x0302: 0x40064620, 0x0303: 0x40064820, + 0x0304: 0x40064a20, 0x0305: 0x40064c20, 0x0306: 0x40064e20, 0x0307: 0x40065020, + 0x0308: 0x40065220, 0x0309: 0x40065420, 0x030a: 0x40065620, 0x030b: 0x40065820, + 0x030c: 0x40065a20, 0x030d: 0x40065c20, 0x030e: 0x40065e20, 0x030f: 0x40066020, + 0x0310: 0x4027b220, 0x0311: 0x4027b420, 0x0312: 0x40066220, 0x0313: 0x40066420, + 0x0314: 0x40066620, 0x0315: 0x40066820, 0x0316: 0x40066a20, 0x0317: 0x40066c20, + 0x0318: 0x40062820, 0x0319: 0x40062a20, 0x031a: 0x40062e20, 0x031b: 0x40063420, + 0x031c: 0x40062220, 0x031d: 0x40063020, 0x031e: 0x40066e20, 0x031f: 0x40067020, + 0x0320: 0x002d5894, 0x0321: 0x002e2294, 0x0322: 0x002fe694, 0x0323: 0x0030f694, + 0x0324: 0x0031e894, 0x0325: 0x40067220, 0x0326: 0x40067420, 0x0327: 0x40067620, + 0x0328: 0x40067820, 0x0329: 0x40067a20, 0x032a: 0x40067c20, 0x032b: 0x40067e20, + 0x032c: 0x40068020, 0x032d: 0x40068220, 0x032e: 0x4031e020, 0x032f: 0x40068420, + 0x0330: 0x40068620, 0x0331: 0x40068820, 0x0332: 0x40068a20, 0x0333: 0x40068c20, + 0x0334: 0x40068e20, 0x0335: 0x40069020, 0x0336: 0x40069220, 0x0337: 0x40069420, + 0x0338: 0x40069620, 0x0339: 0x40069820, 0x033a: 0x40069a20, 0x033b: 0x40069c20, + 0x033c: 0x40069e20, 0x033d: 0x4006a020, 0x033e: 0x4006a220, 0x033f: 0x4006a420, + // Block 0xd, offset 0x340 + 0x0340: 0xae603502, 0x0341: 0xae603202, 0x0342: 0xae603c02, 0x0343: 0xae604e02, + 0x0344: 0xae605b02, 0x0345: 0xae606302, 0x0346: 0xae603702, 0x0347: 0xae605202, + 0x0348: 0xae604702, 0x0349: 0xae606402, 0x034a: 0xae604302, 0x034b: 0xae604d02, + 0x034c: 0xae604102, 0x034d: 0xae605f02, 0x034e: 0xae605f02, 0x034f: 0xae606502, + 0x0350: 0xae606602, 0x0351: 0xae606702, 0x0352: 0xae605f02, 0x0353: 0xae602202, + 0x0354: 0xae602a02, 0x0355: 0xae805f02, 0x0356: 0xadc06002, 0x0357: 0xadc06002, + 0x0358: 0xadc06002, 0x0359: 0xadc06002, 0x035a: 0xae805f02, 0x035b: 0xad806802, + 0x035c: 0xadc06002, 0x035d: 0xadc06002, 0x035e: 0xadc06002, 0x035f: 0xadc06002, + 0x0360: 0xadc06002, 0x0361: 0xaca06e02, 0x0362: 0xaca06f02, 0x0363: 0xadc07002, + 0x0364: 0xadc07502, 0x0365: 0xadc07602, 0x0366: 0xadc07702, 0x0367: 0xaca05602, + 0x0368: 0xaca05902, 0x0369: 0xadc06002, 0x036a: 0xadc06002, 0x036b: 0xadc06002, + 0x036c: 0xadc06002, 0x036d: 0xadc07802, 0x036e: 0xadc07902, 0x036f: 0xadc06002, + 0x0370: 0xadc07a02, 0x0371: 0xadc07b02, 0x0372: 0xadc02102, 0x0373: 0xadc06002, + 0x0374: 0xa0107c02, 0x0375: 0xa0107d02, 0x0376: 0xa0106102, 0x0377: 0xa0106102, + 0x0378: 0xa0105402, 0x0379: 0xadc07e02, 0x037a: 0xadc06002, 0x037b: 0xadc06002, + 0x037c: 0xadc06002, 0x037d: 0xae605f02, 0x037e: 0xae605f02, 0x037f: 0xae605f02, + // Block 0xe, offset 0x380 + 0x0380: 0xae603502, 0x0381: 0xae603202, 0x0382: 0xae604502, 0x0383: 0xae602202, + 0x0384: 0xe0000000, 0x0385: 0xaf007f02, 0x0386: 0xae605f02, 0x0387: 0xadc06002, + 0x0388: 0xadc06002, 0x0389: 0xadc06002, 0x038a: 0xae605f02, 0x038b: 0xae605f02, + 0x038c: 0xae605f02, 0x038d: 0xadc06002, 0x038e: 0xadc06002, 0x038f: 0xa0000000, + 0x0390: 0xae605f02, 0x0391: 0xae605f02, 0x0392: 0xae605f02, 0x0393: 0xadc06002, + 0x0394: 0xadc06002, 0x0395: 0xadc06002, 0x0396: 0xadc06002, 0x0397: 0xae605f02, + 0x0398: 0xae808002, 0x0399: 0xadc06002, 0x039a: 0xadc06002, 0x039b: 0xae605f02, + 0x039c: 0xae906002, 0x039d: 0xaea05f02, 0x039e: 0xaea05f02, 0x039f: 0xae906002, + 0x03a0: 0xaea08102, 0x03a1: 0xaea08202, 0x03a2: 0xae906002, 0x03a3: 0x84e615ef, + 0x03a4: 0x84e6164c, 0x03a5: 0x84e616cd, 0x03a6: 0x84e61771, 0x03a7: 0x84e61836, + 0x03a8: 0x84e6161d, 0x03a9: 0x84e61631, 0x03aa: 0x84e616b4, 0x03ab: 0x84e61741, + 0x03ac: 0x84e617bd, 0x03ad: 0x84e61816, 0x03ae: 0x84e6185f, 0x03af: 0x84e6187b, + 0x03b0: 0x00326688, 0x03b1: 0x40326620, 0x03b2: 0x0032a688, 0x03b3: 0x4032a620, + 0x03b4: 0x40064020, 0x03b5: 0x40064220, 0x03b6: 0x00326088, 0x03b7: 0x40326020, + 0x03ba: 0x00326c84, 0x03bb: 0x40329220, + 0x03bc: 0x40329020, 0x03bd: 0x40329420, 0x03be: 0x40026220, + // Block 0xf, offset 0x3c0 + 0x03c4: 0x40062020, 0x03c5: 0xe00000ab, 0x03c6: 0xe00011f0, 0x03c7: 0x40030620, + 0x03c8: 0xe0001249, 0x03c9: 0xe00012dd, 0x03ca: 0xe000133a, + 0x03cc: 0xe000139b, 0x03ce: 0xe00013dd, 0x03cf: 0xe0001492, + 0x03d0: 0xe0001352, 0x03d1: 0x00325288, 0x03d2: 0x00325488, 0x03d3: 0x00325688, + 0x03d4: 0x00325a88, 0x03d5: 0x00325c88, 0x03d6: 0x00326488, 0x03d7: 0x00326888, + 0x03d8: 0x00326a88, 0x03d9: 0x00326c88, 0x03da: 0x00327088, 0x03db: 0x00327288, + 0x03dc: 0x00327688, 0x03dd: 0x00327888, 0x03de: 0x00327a88, 0x03df: 0x00327c88, + 0x03e0: 0x00327e88, 0x03e1: 0x00328888, 0x03e3: 0x00328e88, + 0x03e4: 0x00329688, 0x03e5: 0x00329888, 0x03e6: 0x00329a88, 0x03e7: 0x00329c88, + 0x03e8: 0x00329e88, 0x03e9: 0x0032a288, 0x03ea: 0xe000134f, 0x03eb: 0xe00013f2, + 0x03ec: 0xe00011ed, 0x03ed: 0xe0001246, 0x03ee: 0xe00012da, 0x03ef: 0xe0001337, + 0x03f0: 0xe00013f5, 0x03f1: 0x40325220, 0x03f2: 0x40325420, 0x03f3: 0x40325620, + 0x03f4: 0x40325a20, 0x03f5: 0x40325c20, 0x03f6: 0x40326420, 0x03f7: 0x40326820, + 0x03f8: 0x40326a20, 0x03f9: 0x40326c20, 0x03fa: 0x40327020, 0x03fb: 0x40327220, + 0x03fc: 0x40327620, 0x03fd: 0x40327820, 0x03fe: 0x40327a20, 0x03ff: 0x40327c20, + // Block 0x10, offset 0x400 + 0x0400: 0x40327e20, 0x0401: 0x40328820, 0x0402: 0x00328e99, 0x0403: 0x40328e20, + 0x0404: 0x40329620, 0x0405: 0x40329820, 0x0406: 0x40329a20, 0x0407: 0x40329c20, + 0x0408: 0x40329e20, 0x0409: 0x4032a220, 0x040a: 0xe000134c, 0x040b: 0xe00013ef, + 0x040c: 0xe0001398, 0x040d: 0xe00013da, 0x040e: 0xe000148f, 0x040f: 0xe0001368, + 0x0410: 0x00325484, 0x0411: 0x00326a84, 0x0412: 0x0032988a, 0x0413: 0xf000020a, + 0x0414: 0xf000020a, 0x0415: 0x00329a84, 0x0416: 0x00327e84, 0x0417: 0xe0001364, + 0x0418: 0x00328688, 0x0419: 0x40328620, 0x041a: 0x00326288, 0x041b: 0x40326220, + 0x041c: 0x00325e88, 0x041d: 0x40325e20, 0x041e: 0x00328488, 0x041f: 0x40328420, + 0x0420: 0x0032a488, 0x0421: 0x4032a420, 0x0422: 0x0032e888, 0x0423: 0x4032e820, + 0x0424: 0x0032f288, 0x0425: 0x4032f220, 0x0426: 0x0032f488, 0x0427: 0x4032f420, + 0x0428: 0x0032fa88, 0x0429: 0x4032fa20, 0x042a: 0x00330888, 0x042b: 0x40330820, + 0x042c: 0x00330e88, 0x042d: 0x40330e20, 0x042e: 0x00331688, 0x042f: 0x40331620, + 0x0430: 0x00327084, 0x0431: 0x00328884, 0x0432: 0x00328e84, 0x0433: 0x40326e20, + 0x0434: 0x00326a8a, 0x0435: 0x00325c84, 0x0436: 0x40092e20, 0x0437: 0x0032a888, + 0x0438: 0x4032a820, 0x0439: 0x00328e8a, 0x043a: 0x00328288, 0x043b: 0x40328220, + 0x043c: 0x40328c20, 0x043d: 0x00329288, 0x043e: 0x00329088, 0x043f: 0x00329488, + // Block 0x11, offset 0x440 + 0x0440: 0xe00014bd, 0x0441: 0xe00014c3, 0x0442: 0x00339688, 0x0443: 0x0033a288, + 0x0444: 0x0033c288, 0x0445: 0x0033fc88, 0x0446: 0xc02a0071, 0x0447: 0x00343688, + 0x0448: 0x00344688, 0x0449: 0x00349a88, 0x044a: 0x0034e488, 0x044b: 0x00356288, + 0x044c: 0x00356a88, 0x044d: 0xe00014cf, 0x044e: 0x00357a88, 0x044f: 0x00365488, + 0x0450: 0xc0090041, 0x0451: 0x00335288, 0x0452: 0x00335a88, 0x0453: 0xc0130092, + 0x0454: 0x00338a88, 0x0455: 0xc01800d1, 0x0456: 0xc01c0071, 0x0457: 0xc0200071, + 0x0458: 0xc0250041, 0x0459: 0x00343e88, 0x045a: 0xc0370092, 0x045b: 0x00348488, + 0x045c: 0x0034a888, 0x045d: 0x0034ba88, 0x045e: 0xc02e0071, 0x045f: 0x00350e88, + 0x0460: 0x00352888, 0x0461: 0x00353a88, 0x0462: 0x00354c88, 0x0463: 0xc03e00f1, + 0x0464: 0x0035ac88, 0x0465: 0x0035b488, 0x0466: 0x00360288, 0x0467: 0xc0440071, + 0x0468: 0x00365c88, 0x0469: 0x00366688, 0x046a: 0x00367488, 0x046b: 0xc0480071, + 0x046c: 0x00368e88, 0x046d: 0xc04c0071, 0x046e: 0x0036b888, 0x046f: 0x0036c488, + 0x0470: 0xc0060041, 0x0471: 0x40335220, 0x0472: 0x40335a20, 0x0473: 0xc0100092, + 0x0474: 0x40338a20, 0x0475: 0xc01600d1, 0x0476: 0xc01a0071, 0x0477: 0xc01e0071, + 0x0478: 0xc0220041, 0x0479: 0x40343e20, 0x047a: 0xc0340092, 0x047b: 0x40348420, + 0x047c: 0x4034a820, 0x047d: 0x4034ba20, 0x047e: 0xc02c0071, 0x047f: 0x40350e20, + // Block 0x12, offset 0x480 + 0x0480: 0x40352820, 0x0481: 0x40353a20, 0x0482: 0x40354c20, 0x0483: 0xc03a00f1, + 0x0484: 0x4035ac20, 0x0485: 0x4035b420, 0x0486: 0x40360220, 0x0487: 0xc0420071, + 0x0488: 0x40365c20, 0x0489: 0x40366620, 0x048a: 0x40367420, 0x048b: 0xc0460071, + 0x048c: 0x40368e20, 0x048d: 0xc04a0071, 0x048e: 0x4036b820, 0x048f: 0x4036c420, + 0x0490: 0xe00014ba, 0x0491: 0xe00014c0, 0x0492: 0x40339620, 0x0493: 0x4033a220, + 0x0494: 0x4033c220, 0x0495: 0x4033fc20, 0x0496: 0xc0280071, 0x0497: 0x40343620, + 0x0498: 0x40344620, 0x0499: 0x40349a20, 0x049a: 0x4034e420, 0x049b: 0x40356220, + 0x049c: 0x40356a20, 0x049d: 0xe00014cc, 0x049e: 0x40357a20, 0x049f: 0x40365420, + 0x04a0: 0x0035e088, 0x04a1: 0x4035e020, 0x04a2: 0x00369e88, 0x04a3: 0x40369e20, + 0x04a4: 0x0036ce88, 0x04a5: 0x4036ce20, 0x04a6: 0x0036d688, 0x04a7: 0x4036d620, + 0x04a8: 0x0036ea88, 0x04a9: 0x4036ea20, 0x04aa: 0x0036e088, 0x04ab: 0x4036e020, + 0x04ac: 0x0036f488, 0x04ad: 0x4036f420, 0x04ae: 0x0036fc88, 0x04af: 0x4036fc20, + 0x04b0: 0x00370488, 0x04b1: 0x40370420, 0x04b2: 0x00370c88, 0x04b3: 0x40370c20, + 0x04b4: 0xc0500131, 0x04b5: 0xc04e0131, 0x04b6: 0x00371c88, 0x04b7: 0x40371c20, + 0x04b8: 0x0035a488, 0x04b9: 0x4035a420, 0x04ba: 0x0035fa88, 0x04bb: 0x4035fa20, + 0x04bc: 0x0035f288, 0x04bd: 0x4035f220, 0x04be: 0x0035e888, 0x04bf: 0x4035e820, + // Block 0x13, offset 0x4c0 + 0x04c0: 0x00352088, 0x04c1: 0x40352020, 0x04c2: 0x40070620, 0x04c3: 0xae608302, + 0x04c4: 0xae605f02, 0x04c5: 0xae602a02, 0x04c6: 0xae602202, 0x04c7: 0xae605f02, + 0x04c8: 0xa0000000, 0x04c9: 0xa0000000, 0x04ca: 0x00341c88, 0x04cb: 0x40341c20, + 0x04cc: 0x00369688, 0x04cd: 0x40369620, 0x04ce: 0x00353088, 0x04cf: 0x40353020, + 0x04d0: 0xe00014b7, 0x04d1: 0xe00014b4, 0x04d2: 0x00336a88, 0x04d3: 0x40336a20, + 0x04d4: 0x00337a88, 0x04d5: 0x40337a20, 0x04d6: 0x0033dc88, 0x04d7: 0x4033dc20, + 0x04d8: 0x0033aa88, 0x04d9: 0x4033aa20, 0x04da: 0x00345888, 0x04db: 0x40345820, + 0x04dc: 0x00347888, 0x04dd: 0x40347820, 0x04de: 0x00347088, 0x04df: 0x40347020, + 0x04e0: 0x00346888, 0x04e1: 0x40346820, 0x04e2: 0x0034ca88, 0x04e3: 0x4034ca20, + 0x04e4: 0x0034dc88, 0x04e5: 0x4034dc20, 0x04e6: 0x00351888, 0x04e7: 0x40351820, + 0x04e8: 0x00372688, 0x04e9: 0x40372620, 0x04ea: 0x00354488, 0x04eb: 0x40354420, + 0x04ec: 0x00355888, 0x04ed: 0x40355820, 0x04ee: 0x00359288, 0x04ef: 0x40359220, + 0x04f0: 0x00359a88, 0x04f1: 0x40359a20, 0x04f2: 0x0035cc88, 0x04f3: 0x4035cc20, + 0x04f4: 0x00360e88, 0x04f5: 0x40360e20, 0x04f6: 0x00362a88, 0x04f7: 0x40362a20, + 0x04f8: 0x00363a88, 0x04f9: 0x40363a20, 0x04fa: 0x0035d488, 0x04fb: 0x4035d420, + 0x04fc: 0x00364488, 0x04fd: 0x40364420, 0x04fe: 0x00364c88, 0x04ff: 0x40364c20, + // Block 0x14, offset 0x500 + 0x0500: 0x00373088, 0x0501: 0xe00014c9, 0x0502: 0xe00014c6, 0x0503: 0x00346088, + 0x0504: 0x40346020, 0x0505: 0x00348e88, 0x0506: 0x40348e20, 0x0507: 0x0034d288, + 0x0508: 0x4034d220, 0x0509: 0x0034c288, 0x050a: 0x4034c220, 0x050b: 0x00363288, + 0x050c: 0x40363220, 0x050d: 0x0034b088, 0x050e: 0x4034b020, 0x050f: 0x40373020, + 0x0510: 0x00332a88, 0x0511: 0x40332a20, 0x0512: 0x00333288, 0x0513: 0x40333220, + 0x0514: 0x00334a88, 0x0515: 0x40334a20, 0x0516: 0x0033ba88, 0x0517: 0x4033ba20, + 0x0518: 0xc00e0071, 0x0519: 0xc00c0071, 0x051a: 0x00334288, 0x051b: 0x40334220, + 0x051c: 0x0033d488, 0x051d: 0x4033d420, 0x051e: 0x0033f288, 0x051f: 0x4033f220, + 0x0520: 0x00340688, 0x0521: 0x40340620, 0x0522: 0xe00014d5, 0x0523: 0xe00014d2, + 0x0524: 0x00342488, 0x0525: 0x40342420, 0x0526: 0x0034f688, 0x0527: 0x4034f620, + 0x0528: 0xc0320071, 0x0529: 0xc0300071, 0x052a: 0x00350688, 0x052b: 0x40350620, + 0x052c: 0x0036b088, 0x052d: 0x4036b020, 0x052e: 0xe00014de, 0x052f: 0xe00014db, + 0x0530: 0x00358288, 0x0531: 0x40358220, 0x0532: 0x00358a88, 0x0533: 0x40358a20, + 0x0534: 0x00362288, 0x0535: 0x40362220, 0x0536: 0x00338288, 0x0537: 0x40338220, + 0x0538: 0x00368688, 0x0539: 0x40368620, 0x053a: 0x00337288, 0x053b: 0x40337220, + 0x053c: 0x0035bc88, 0x053d: 0x4035bc20, 0x053e: 0x0035c488, 0x053f: 0x4035c420, + // Block 0x15, offset 0x540 + 0x0540: 0x00339288, 0x0541: 0x40339220, 0x0542: 0x0033a088, 0x0543: 0x4033a020, + 0x0544: 0x0033ee88, 0x0545: 0x4033ee20, 0x0546: 0x00341088, 0x0547: 0x40341020, + 0x0548: 0x0034a488, 0x0549: 0x4034a420, 0x054a: 0x0034ec88, 0x054b: 0x4034ec20, + 0x054c: 0x00354288, 0x054d: 0x40354220, 0x054e: 0x00355688, 0x054f: 0x40355620, + 0x0550: 0x0033f088, 0x0551: 0x4033f020, 0x0552: 0x00349688, 0x0553: 0x40349620, + 0x0554: 0x0034a688, 0x0555: 0x4034a620, 0x0556: 0x00353888, 0x0557: 0x40353820, + 0x0558: 0x0036cc88, 0x0559: 0x4036cc20, 0x055a: 0x00348288, 0x055b: 0x40348220, + 0x055c: 0x00372e88, 0x055d: 0x40372e20, 0x055e: 0x00348088, 0x055f: 0x40348020, + 0x0560: 0x00349888, 0x0561: 0x40349820, 0x0562: 0x0034da88, 0x0563: 0x4034da20, + 0x0564: 0x00351688, 0x0565: 0x40351620, 0x0566: 0x0035dc88, 0x0567: 0x4035dc20, + 0x0571: 0x00384288, 0x0572: 0x00384488, 0x0573: 0x00384688, + 0x0574: 0x00384888, 0x0575: 0x00384a88, 0x0576: 0x00384c88, 0x0577: 0x00384e88, + 0x0578: 0x00385088, 0x0579: 0x00385288, 0x057a: 0x00385488, 0x057b: 0x00385688, + 0x057c: 0x00385888, 0x057d: 0x00385a88, 0x057e: 0x00385c88, 0x057f: 0x00385e88, + // Block 0x16, offset 0x580 + 0x0580: 0x00386088, 0x0581: 0x00386288, 0x0582: 0x00386488, 0x0583: 0x00386688, + 0x0584: 0x00386888, 0x0585: 0x00386a88, 0x0586: 0x00386c88, 0x0587: 0x00386e88, + 0x0588: 0x00387088, 0x0589: 0x00387288, 0x058a: 0x00387488, 0x058b: 0x00387688, + 0x058c: 0x00387888, 0x058d: 0x00387a88, 0x058e: 0x00387c88, 0x058f: 0x00387e88, + 0x0590: 0x00388088, 0x0591: 0x00388288, 0x0592: 0x00388488, 0x0593: 0x00388688, + 0x0594: 0x00388888, 0x0595: 0x00388a88, 0x0596: 0x00388c88, + 0x0599: 0x40388e20, 0x059a: 0x40054e20, 0x059b: 0x40055020, + 0x059c: 0x4002be20, 0x059d: 0x40024620, 0x059e: 0x4002ca20, 0x059f: 0x40055220, + 0x05a1: 0x40384220, 0x05a2: 0x40384420, 0x05a3: 0x40384620, + 0x05a4: 0x40384820, 0x05a5: 0x40384a20, 0x05a6: 0x40384c20, 0x05a7: 0x40384e20, + 0x05a8: 0x40385020, 0x05a9: 0x40385220, 0x05aa: 0x40385420, 0x05ab: 0x40385620, + 0x05ac: 0x40385820, 0x05ad: 0x40385a20, 0x05ae: 0x40385c20, 0x05af: 0x40385e20, + 0x05b0: 0x40386020, 0x05b1: 0x40386220, 0x05b2: 0x40386420, 0x05b3: 0x40386620, + 0x05b4: 0x40386820, 0x05b5: 0x40386a20, 0x05b6: 0x40386c20, 0x05b7: 0x40386e20, + 0x05b8: 0x40387020, 0x05b9: 0x40387220, 0x05ba: 0x40387420, 0x05bb: 0x40387620, + 0x05bc: 0x40387820, 0x05bd: 0x40387a20, 0x05be: 0x40387c20, 0x05bf: 0x40387e20, + // Block 0x17, offset 0x5c0 + 0x05c0: 0x40388020, 0x05c1: 0x40388220, 0x05c2: 0x40388420, 0x05c3: 0x40388620, + 0x05c4: 0x40388820, 0x05c5: 0x40388a20, 0x05c6: 0x40388c20, 0x05c7: 0xf0000404, + 0x05c9: 0x40026e20, 0x05ca: 0x40021c20, + 0x05cf: 0x4027e420, + 0x05d1: 0xadc00000, 0x05d2: 0xae600000, 0x05d3: 0xae600000, + 0x05d4: 0xae600000, 0x05d5: 0xae600000, 0x05d6: 0xadc00000, 0x05d7: 0xae600000, + 0x05d8: 0xae600000, 0x05d9: 0xae600000, 0x05da: 0xade00000, 0x05db: 0xadc00000, + 0x05dc: 0xae600000, 0x05dd: 0xae600000, 0x05de: 0xae600000, 0x05df: 0xae600000, + 0x05e0: 0xae600000, 0x05e1: 0xae600000, 0x05e2: 0xadc00000, 0x05e3: 0xadc00000, + 0x05e4: 0xadc00000, 0x05e5: 0xadc00000, 0x05e6: 0xadc00000, 0x05e7: 0xadc00000, + 0x05e8: 0xae600000, 0x05e9: 0xae600000, 0x05ea: 0xadc00000, 0x05eb: 0xae600000, + 0x05ec: 0xae600000, 0x05ed: 0xade00000, 0x05ee: 0xae400000, 0x05ef: 0xae600000, + 0x05f0: 0xa0a08502, 0x05f1: 0xa0b08602, 0x05f2: 0xa0c08702, 0x05f3: 0xa0d08802, + 0x05f4: 0xa0e08902, 0x05f5: 0xa0f08a02, 0x05f6: 0xa1008b02, 0x05f7: 0xa1108c02, + 0x05f8: 0xa1208d02, 0x05f9: 0xa1308e02, 0x05fa: 0xa1308e02, 0x05fb: 0xa1408f02, + 0x05fc: 0xa1509202, 0x05fd: 0xa1600000, 0x05fe: 0x40055420, 0x05ff: 0xa1709502, + // Block 0x18, offset 0x600 + 0x0600: 0x40055620, 0x0601: 0xa1809102, 0x0602: 0xa1909002, 0x0603: 0x40055820, + 0x0604: 0xae600000, 0x0605: 0xadc00000, 0x0606: 0x40055a20, 0x0607: 0xa1208d02, + 0x0610: 0x40389020, 0x0611: 0x40389220, 0x0612: 0x40389420, 0x0613: 0x40389620, + 0x0614: 0x40389820, 0x0615: 0x40389a20, 0x0616: 0x40389c20, 0x0617: 0x40389e20, + 0x0618: 0x4038a020, 0x0619: 0x4038a220, 0x061a: 0x0038a499, 0x061b: 0x4038a420, + 0x061c: 0x4038a620, 0x061d: 0x0038a899, 0x061e: 0x4038a820, 0x061f: 0x0038aa99, + 0x0620: 0x4038aa20, 0x0621: 0x4038ac20, 0x0622: 0x4038ae20, 0x0623: 0x0038b099, + 0x0624: 0x4038b020, 0x0625: 0x0038b299, 0x0626: 0x4038b220, 0x0627: 0x4038b420, + 0x0628: 0x4038b620, 0x0629: 0x4038b820, 0x062a: 0x4038ba20, + 0x0630: 0xe00014ff, 0x0631: 0xe0001502, 0x0632: 0xe0001511, 0x0633: 0x40055c20, + 0x0634: 0x40055e20, + // Block 0x19, offset 0x640 + 0x0640: 0xa0000000, 0x0641: 0xa0000000, 0x0642: 0xa0000000, 0x0643: 0xa0000000, + 0x0644: 0xa0000000, 0x0646: 0x40096620, 0x0647: 0x40096a20, + 0x0648: 0x40070820, 0x0649: 0x4004f220, 0x064a: 0x4004f620, 0x064b: 0x4027e620, + 0x064c: 0x40024820, 0x064d: 0x40024a20, 0x064e: 0x40070e20, 0x064f: 0x40071020, + 0x0650: 0xae600000, 0x0651: 0xae600000, 0x0652: 0xae600000, 0x0653: 0xae600000, + 0x0654: 0xae600000, 0x0655: 0xae600000, 0x0656: 0xae600000, 0x0657: 0xae600000, + 0x0658: 0xa1e00000, 0x0659: 0xa1f00000, 0x065a: 0xa2000000, 0x065b: 0x40026420, + 0x065e: 0x40027020, 0x065f: 0x4002cc20, + 0x0660: 0x403aa220, 0x0661: 0x40391c20, 0x0662: 0x40391e20, 0x0663: 0x40392020, + 0x0664: 0x40392620, 0x0665: 0x40392820, 0x0666: 0x40393020, 0x0667: 0xc0520151, + 0x0668: 0x40393c20, 0x0669: 0x40395420, 0x066a: 0x40395620, 0x066b: 0x40395820, + 0x066c: 0x40396420, 0x066d: 0x40397220, 0x066e: 0x40397420, 0x066f: 0x40398820, + 0x0670: 0x40398a20, 0x0671: 0x4039a420, 0x0672: 0x4039a620, 0x0673: 0x4039c620, + 0x0674: 0x4039c820, 0x0675: 0x4039dc20, 0x0676: 0x4039de20, 0x0677: 0x4039e620, + 0x0678: 0x4039e820, 0x0679: 0x4039ee20, 0x067a: 0x4039f020, 0x067b: 0x403a3820, + 0x067c: 0x403a3a20, 0x067d: 0x403a9c20, 0x067e: 0x403a9e20, 0x067f: 0x403aa020, + // Block 0x1a, offset 0x680 + 0x0680: 0xa0000000, 0x0681: 0x4039fc20, 0x0682: 0x403a1220, 0x0683: 0x403a1a20, + 0x0684: 0x403a4020, 0x0685: 0x403a4e20, 0x0686: 0x403a5620, 0x0687: 0x403a6820, + 0x0688: 0xc0560171, 0x0689: 0x403a8e20, 0x068a: 0xc0580171, 0x068b: 0xa1b0a202, + 0x068c: 0xa1c0a502, 0x068d: 0xa1d0a902, 0x068e: 0xa1e0ad02, 0x068f: 0xa1f0b202, + 0x0690: 0xa200b602, 0x0691: 0xa210ba02, 0x0692: 0xa220bc02, 0x0693: 0xae60bd02, + 0x0694: 0xae60be02, 0x0695: 0xadc0bf02, 0x0696: 0xadc0c102, 0x0697: 0xae60c202, + 0x0698: 0xae60c302, 0x0699: 0xae60c402, 0x069a: 0xae60c502, 0x069b: 0xae60c602, + 0x069c: 0xadc0c702, 0x069d: 0xae60c802, 0x069e: 0xae60c902, 0x069f: 0xadc0c002, + 0x06a0: 0xe000015e, 0x06a1: 0xe00001e6, 0x06a2: 0xe0000301, 0x06a3: 0xe00003db, + 0x06a4: 0xe00004b6, 0x06a5: 0xe0000580, 0x06a6: 0xe000064b, 0x06a7: 0xe00006f3, + 0x06a8: 0xe000079f, 0x06a9: 0xe0000844, 0x06aa: 0x4004ee20, 0x06ab: 0x40024c20, + 0x06ac: 0x40024e20, 0x06ad: 0x4004de20, 0x06ae: 0x40393a20, 0x06af: 0x403a1020, + 0x06b0: 0xa230d102, 0x06b1: 0x40392420, 0x06b2: 0x40392220, 0x06b3: 0x40392a20, + 0x06b4: 0x00391c84, 0x06b5: 0xf0000404, 0x06b6: 0xf0000404, 0x06b7: 0xf0000404, + 0x06b8: 0xf0000404, 0x06b9: 0x40395a20, 0x06ba: 0x40395c20, 0x06bb: 0x40393e20, + 0x06bc: 0x40395e20, 0x06bd: 0x40396020, 0x06be: 0x40394020, 0x06bf: 0x40396220, + // Block 0x1b, offset 0x6c0 + 0x06c0: 0x40394220, 0x06c1: 0x40397620, 0x06c2: 0x40397820, 0x06c3: 0x40396620, + 0x06c4: 0x40396820, 0x06c5: 0x40397a20, 0x06c6: 0x40396a20, 0x06c7: 0x40396e20, + 0x06c8: 0x40398c20, 0x06c9: 0x40398e20, 0x06ca: 0x40399020, 0x06cb: 0x40399220, + 0x06cc: 0x40399420, 0x06cd: 0x40399620, 0x06ce: 0x40399820, 0x06cf: 0x40399a20, + 0x06d0: 0x40399c20, 0x06d1: 0x4039a820, 0x06d2: 0x4039aa20, 0x06d3: 0x4039ac20, + 0x06d4: 0x4039ae20, 0x06d5: 0x4039b020, 0x06d6: 0x4039b220, 0x06d7: 0x4039b420, + 0x06d8: 0x4039b620, 0x06d9: 0x4039b820, 0x06da: 0x4039ca20, 0x06db: 0x4039cc20, + 0x06dc: 0x4039ce20, 0x06dd: 0x4039e020, 0x06de: 0x4039e220, 0x06df: 0x4039ea20, + 0x06e0: 0x4039f220, 0x06e1: 0x4039fe20, 0x06e2: 0x403a0020, 0x06e3: 0x403a0220, + 0x06e4: 0x403a0420, 0x06e5: 0x403a0820, 0x06e6: 0x403a0a20, 0x06e7: 0x403a1420, + 0x06e8: 0x403a1620, 0x06e9: 0x403a1c20, 0x06ea: 0x403a1e20, 0x06eb: 0x403a2020, + 0x06ec: 0x403a2220, 0x06ed: 0x403a2620, 0x06ee: 0x403a2820, 0x06ef: 0x403a2a20, + 0x06f0: 0x403a2c20, 0x06f1: 0x403a2e20, 0x06f2: 0x403a3020, 0x06f3: 0x403a3220, + 0x06f4: 0x403a3420, 0x06f5: 0x403a4220, 0x06f6: 0x403a4420, 0x06f7: 0x403a4620, + 0x06f8: 0x403a4820, 0x06f9: 0x403a6020, 0x06fa: 0x403a5820, 0x06fb: 0x403a5a20, + 0x06fc: 0x403a5c20, 0x06fd: 0x403a5e20, 0x06fe: 0x403a6a20, 0x06ff: 0x40396c20, + // Block 0x1c, offset 0x700 + 0x0700: 0xe00017e4, 0x0701: 0x403a6c20, 0x0702: 0xe00017e1, 0x0703: 0x403a6e20, + 0x0704: 0x403a7620, 0x0705: 0x403a7820, 0x0706: 0x403a7a20, 0x0707: 0x403a7c20, + 0x0708: 0x403a7e20, 0x0709: 0x403a8020, 0x070a: 0x403a8220, 0x070b: 0x403a8420, + 0x070c: 0x403a9220, 0x070d: 0x403a9420, 0x070e: 0x403a9620, 0x070f: 0x403a8620, + 0x0710: 0x403a9820, 0x0711: 0x403a9a20, 0x0712: 0x403aaa20, 0x0713: 0xe0001800, + 0x0714: 0x4002e820, 0x0715: 0x403a7220, 0x0716: 0xae600000, 0x0717: 0xae600000, + 0x0718: 0xae600000, 0x0719: 0xae600000, 0x071a: 0xae600000, 0x071b: 0xae600000, + 0x071c: 0xae600000, 0x071d: 0xa0000000, 0x071e: 0x40071220, 0x071f: 0xae600000, + 0x0720: 0xae600000, 0x0721: 0xae600000, 0x0722: 0xae600000, 0x0723: 0xadc00000, + 0x0724: 0xae600000, 0x0725: 0x003a7484, 0x0726: 0x003a9084, 0x0727: 0xae600000, + 0x0728: 0xae600000, 0x0729: 0x40071420, 0x072a: 0xadc00000, 0x072b: 0xae600000, + 0x072c: 0xae600000, 0x072d: 0xadc00000, 0x072e: 0x40399e20, 0x072f: 0x4039ba20, + 0x0730: 0xe0000161, 0x0731: 0xe00001e9, 0x0732: 0xe0000304, 0x0733: 0xe00003de, + 0x0734: 0xe00004b9, 0x0735: 0xe0000583, 0x0736: 0xe000064e, 0x0737: 0xe00006f6, + 0x0738: 0xe00007a2, 0x0739: 0xe0000847, 0x073a: 0x4039d020, 0x073b: 0x4039e420, + 0x073c: 0x4039f420, 0x073d: 0xe0001553, 0x073e: 0xe0001779, 0x073f: 0x403a7020, + // Block 0x1d, offset 0x740 + 0x0740: 0x40035c20, 0x0741: 0x4002ea20, 0x0742: 0x4002ec20, 0x0743: 0x40027220, + 0x0744: 0x40027420, 0x0745: 0x40027620, 0x0746: 0x40027820, 0x0747: 0x40027a20, + 0x0748: 0x40027c20, 0x0749: 0x4002ce20, 0x074a: 0x40056020, 0x074b: 0x40056220, + 0x074c: 0x40056420, 0x074d: 0x40056620, 0x074f: 0xa0000000, + 0x0750: 0x403ab020, 0x0751: 0xa240d202, 0x0752: 0x403ab220, 0x0753: 0x403ab420, + 0x0754: 0xe0001806, 0x0755: 0x403ab820, 0x0756: 0x403ab620, 0x0757: 0x403aba20, + 0x0758: 0x403abc20, 0x0759: 0x403abe20, 0x075a: 0x403ac220, 0x075b: 0x403ac420, + 0x075c: 0xe000180f, 0x075d: 0x403ac620, 0x075e: 0x403ac820, 0x075f: 0x403aca20, + 0x0760: 0x403ace20, 0x0761: 0x403ad020, 0x0762: 0x403ad220, 0x0763: 0x403ad420, + 0x0764: 0x003ad499, 0x0765: 0x403ad620, 0x0766: 0x403ad820, 0x0767: 0xe0001812, + 0x0768: 0x403adc20, 0x0769: 0x403ade20, 0x076a: 0x403ae020, 0x076b: 0x403ae220, + 0x076c: 0x403ae420, 0x076d: 0xe0001803, 0x076e: 0xe0001809, 0x076f: 0xe000180c, + 0x0770: 0xae60d302, 0x0771: 0xadc0d402, 0x0772: 0xae60d502, 0x0773: 0xae60d602, + 0x0774: 0xadc0d702, 0x0775: 0xae60d802, 0x0776: 0xae60d902, 0x0777: 0xadc0da02, + 0x0778: 0xadc0db02, 0x0779: 0xadc0dc02, 0x077a: 0xae60dd02, 0x077b: 0xadc0de02, + 0x077c: 0xadc0df02, 0x077d: 0xae60e002, 0x077e: 0xadc0e102, 0x077f: 0xae60e202, + // Block 0x1e, offset 0x780 + 0x0780: 0xae600000, 0x0781: 0xae605f02, 0x0782: 0xadc06002, 0x0783: 0xae600000, + 0x0784: 0xadc00000, 0x0785: 0xae605f02, 0x0786: 0xadc06002, 0x0787: 0xae600000, + 0x0788: 0xadc00000, 0x0789: 0xae600000, 0x078a: 0xae600000, + 0x078d: 0x403ac020, 0x078e: 0x403acc20, 0x078f: 0x403ada20, + 0x0790: 0x40394420, 0x0791: 0x40394620, 0x0792: 0x40394820, 0x0793: 0x40394a20, + 0x0794: 0x40394c20, 0x0795: 0x40394e20, 0x0796: 0x40395220, 0x0797: 0x40397c20, + 0x0798: 0x40397e20, 0x0799: 0x4039a020, 0x079a: 0x4039a220, 0x079b: 0x4039bc20, + 0x079c: 0x4039d220, 0x079d: 0x4039f620, 0x079e: 0x4039f820, 0x079f: 0x4039fa20, + 0x07a0: 0x403a0c20, 0x07a1: 0x403a0e20, 0x07a2: 0x403a3620, 0x07a3: 0x403a3c20, + 0x07a4: 0x403a3e20, 0x07a5: 0x403a5020, 0x07a6: 0x403a5220, 0x07a7: 0x403a6220, + 0x07a8: 0x403a6420, 0x07a9: 0x403a6620, 0x07aa: 0x403a4a20, 0x07ab: 0x4039be20, + 0x07ac: 0x4039c020, 0x07ad: 0x4039d420, 0x07ae: 0x40398020, 0x07af: 0x40398220, + 0x07b0: 0x4039d620, 0x07b1: 0x4039c220, 0x07b2: 0x40398420, 0x07b3: 0x40392c20, + 0x07b4: 0x40392e20, 0x07b5: 0x403aa420, 0x07b6: 0x403aa620, 0x07b7: 0x403aa820, + 0x07b8: 0x403a8820, 0x07b9: 0x403a8a20, 0x07ba: 0x403aac20, 0x07bb: 0x403aae20, + 0x07bc: 0x40398620, 0x07bd: 0x4039d820, 0x07be: 0x4039da20, 0x07bf: 0x403a2420, + // Block 0x1f, offset 0x7c0 + 0x07c0: 0x403b1820, 0x07c1: 0x403b1e20, 0x07c2: 0x403b2020, 0x07c3: 0x403b2220, + 0x07c4: 0x403b2620, 0x07c5: 0x403b2820, 0x07c6: 0x403b2a20, 0x07c7: 0x403b2c20, + 0x07c8: 0x403b3220, 0x07c9: 0x403b3620, 0x07ca: 0x403b3820, 0x07cb: 0x403b3a20, + 0x07cc: 0x403b3e20, 0x07cd: 0x403b4620, 0x07ce: 0x403b4820, 0x07cf: 0x403b4c20, + 0x07d0: 0x403b4e20, 0x07d1: 0x403b5620, 0x07d2: 0x403b5820, 0x07d3: 0x403b5a20, + 0x07d4: 0x403b5c20, 0x07d5: 0x403b5e20, 0x07d6: 0x403b6020, 0x07d7: 0x403b6220, + 0x07d8: 0x403b4020, 0x07d9: 0x403b1a20, 0x07da: 0x403b1c20, 0x07db: 0x403b3c20, + 0x07dc: 0x403b2420, 0x07dd: 0x403b5020, 0x07de: 0x403b5220, 0x07df: 0x403b5420, + 0x07e0: 0x403b4220, 0x07e1: 0x403b4420, 0x07e2: 0x403b2e20, 0x07e3: 0x403b3020, + 0x07e4: 0x403b4a20, 0x07e5: 0x403b3420, 0x07e6: 0x403b6620, 0x07e7: 0x403b6820, + 0x07e8: 0x403b6a20, 0x07e9: 0x403b6c20, 0x07ea: 0x403b6e20, 0x07eb: 0x403b7020, + 0x07ec: 0x403b7220, 0x07ed: 0x403b7420, 0x07ee: 0x403b7620, 0x07ef: 0x403b7820, + 0x07f0: 0x403b7a20, 0x07f1: 0x403b6420, + // Block 0x20, offset 0x800 + 0x0800: 0xe0000164, 0x0801: 0xe00001ef, 0x0802: 0xe000030a, 0x0803: 0xe00003e4, + 0x0804: 0xe00004bf, 0x0805: 0xe0000589, 0x0806: 0xe0000654, 0x0807: 0xe00006fc, + 0x0808: 0xe00007a8, 0x0809: 0xe000084d, 0x080a: 0x403b7c20, 0x080b: 0x403b7e20, + 0x080c: 0x403b8020, 0x080d: 0x403b8220, 0x080e: 0x403b8420, 0x080f: 0x403b8620, + 0x0810: 0x403b8820, 0x0811: 0x403b8a20, 0x0812: 0x403b8c20, 0x0813: 0x403b8e20, + 0x0814: 0x403b9020, 0x0815: 0x403b9220, 0x0816: 0x403b9420, 0x0817: 0x403b9620, + 0x0818: 0x403b9820, 0x0819: 0x403b9a20, 0x081a: 0x403b9c20, 0x081b: 0x403b9e20, + 0x081c: 0x403ba020, 0x081d: 0x403ba220, 0x081e: 0x403ba420, 0x081f: 0x403ba620, + 0x0820: 0x403ba820, 0x0821: 0x403baa20, 0x0822: 0x403bac20, 0x0823: 0x403bae20, + 0x0824: 0x403bb020, 0x0825: 0x403bb220, 0x0826: 0x403bb420, 0x0827: 0x403bb620, + 0x0828: 0xe0001815, 0x0829: 0xe0001818, 0x082a: 0xe000181b, 0x082b: 0xae60e302, + 0x082c: 0xae60e402, 0x082d: 0xae60e502, 0x082e: 0xae60e602, 0x082f: 0xae60e702, + 0x0830: 0xae60e802, 0x0831: 0xae60e902, 0x0832: 0xadc0ea02, 0x0833: 0xae60eb02, + 0x0834: 0x403bb820, 0x0835: 0x403bba20, 0x0836: 0x40073820, 0x0837: 0x40035e20, + 0x0838: 0x40025020, 0x0839: 0x4002c020, 0x083a: 0xa0000000, + // Block 0x21, offset 0x840 + 0x0840: 0x4038e820, 0x0841: 0x4038ea20, 0x0842: 0x4038ec20, 0x0843: 0x4038ee20, + 0x0844: 0x4038f020, 0x0845: 0x4038f220, 0x0846: 0x4038f420, 0x0847: 0x4038f620, + 0x0848: 0x4038f820, 0x0849: 0x4038fa20, 0x084a: 0x4038fc20, 0x084b: 0x4038fe20, + 0x084c: 0x40390020, 0x084d: 0x40390220, 0x084e: 0x40390420, 0x084f: 0x40390620, + 0x0850: 0x40390820, 0x0851: 0x40390a20, 0x0852: 0x40390c20, 0x0853: 0x40390e20, + 0x0854: 0x40391020, 0x0855: 0x40391220, 0x0856: 0x82e61c8a, 0x0857: 0x82e61c8b, + 0x0858: 0xae609f02, 0x0859: 0xae60a002, 0x085a: 0x40391820, 0x085b: 0x82e61c8d, + 0x085c: 0xae609702, 0x085d: 0xae609702, 0x085e: 0xae609802, 0x085f: 0xae609802, + 0x0860: 0xae609802, 0x0861: 0xae609902, 0x0862: 0xae609902, 0x0863: 0xae609902, + 0x0864: 0xa0009a02, 0x0865: 0xae609a02, 0x0866: 0xae609b02, 0x0867: 0xae609b02, + 0x0868: 0xa0009c02, 0x0869: 0xae609c02, 0x086a: 0xae609c02, 0x086b: 0xae609d02, + 0x086c: 0xae609e02, 0x086d: 0xae60a102, + 0x0870: 0x40027e20, 0x0871: 0x40028020, 0x0872: 0x40028220, 0x0873: 0x40028420, + 0x0874: 0x40028620, 0x0875: 0x40028820, 0x0876: 0x40028a20, 0x0877: 0x40028c20, + 0x0878: 0x40028e20, 0x0879: 0x40029020, 0x087a: 0x40029220, 0x087b: 0x40029420, + 0x087c: 0x40029620, 0x087d: 0x40029820, 0x087e: 0x40029a20, + // Block 0x22, offset 0x880 + 0x0880: 0x403ae620, 0x0881: 0x403ae820, 0x0882: 0x403aea20, 0x0883: 0x403aec20, + 0x0884: 0x403aee20, 0x0885: 0x403af020, 0x0886: 0x403af220, 0x0887: 0x403af420, + 0x0888: 0x403af620, 0x0889: 0x403af820, 0x088a: 0x403afa20, 0x088b: 0x403afc20, + 0x088c: 0x403afe20, 0x088d: 0x403b0020, 0x088e: 0x403b0220, 0x088f: 0x403b0420, + 0x0890: 0x403b0620, 0x0891: 0x403b0820, 0x0892: 0x403b0a20, 0x0893: 0x403b0c20, + 0x0894: 0x403b0e20, 0x0895: 0x403b1020, 0x0896: 0x403b1220, 0x0897: 0x403b1420, + 0x0898: 0x403b1620, 0x0899: 0xadc06002, 0x089a: 0xadc06002, 0x089b: 0xadc06002, + 0x089e: 0x40056820, + // Block 0x23, offset 0x8c0 + 0x08e0: 0x40395020, 0x08e2: 0x40397020, 0x08e3: 0x4039ec20, + 0x08e4: 0x403a0620, 0x08e5: 0x403a1820, 0x08e6: 0x403a4c20, 0x08e7: 0x403a5420, + 0x08e8: 0x40393220, 0x08e9: 0x40393420, 0x08ea: 0x4039c420, 0x08eb: 0x403a8c20, + 0x08ec: 0x40393620, + // Block 0x24, offset 0x900 + 0x0924: 0xae60af02, 0x0925: 0xae60b402, 0x0926: 0xadc0b802, 0x0927: 0xae60a402, + 0x0928: 0xae60a802, 0x0929: 0xadc0ac02, 0x092a: 0xae600000, 0x092b: 0xae600000, + 0x092c: 0xae600000, 0x092d: 0xadc00000, 0x092e: 0xadc00000, 0x092f: 0xadc00000, + 0x0930: 0xa1b0a302, 0x0931: 0xa1c0a702, 0x0932: 0xa1d0ab02, 0x0933: 0xae600000, + 0x0934: 0xae60b002, 0x0935: 0xae60b102, 0x0936: 0xadc0b902, 0x0937: 0xae60ca02, + 0x0938: 0xae60cb02, 0x0939: 0xadc0cf02, 0x093a: 0xadc0d002, 0x093b: 0xae60cd02, + 0x093c: 0xae60ce02, 0x093d: 0xae60cc02, 0x093e: 0xae60b502, + // Block 0x25, offset 0x940 + 0x0940: 0xa000f202, 0x0941: 0xa000f202, 0x0942: 0xa000f302, 0x0943: 0xa000f402, + 0x0944: 0x403fbc20, 0x0945: 0x403fbe20, 0x0946: 0x403fc020, 0x0947: 0x403fcc20, + 0x0948: 0x403fce20, 0x0949: 0x403fd020, 0x094a: 0x403fd220, 0x094b: 0x403fd420, + 0x094c: 0x403fd820, 0x094d: 0x403fdc20, 0x094e: 0x403fde20, 0x094f: 0x403fe020, + 0x0950: 0x403fe220, 0x0951: 0x403fe420, 0x0952: 0x403fe620, 0x0953: 0x403fe820, + 0x0954: 0x403fea20, 0x0955: 0x403fec20, 0x0956: 0x403fee20, 0x0957: 0x403ff020, + 0x0958: 0x403ff420, 0x0959: 0x403ff620, 0x095a: 0x403ff820, 0x095b: 0x403ffa20, + 0x095c: 0x403ffc20, 0x095d: 0x40400220, 0x095e: 0x40400420, 0x095f: 0x40400620, + 0x0960: 0x40400820, 0x0961: 0x40400a20, 0x0962: 0x40400e20, 0x0963: 0x40401020, + 0x0964: 0x40401220, 0x0965: 0x40401420, 0x0966: 0x40401620, 0x0967: 0x40401820, + 0x0968: 0x40401a20, 0x0969: 0xe0001830, 0x096a: 0x40401c20, 0x096b: 0x40401e20, + 0x096c: 0x40402020, 0x096d: 0x40402420, 0x096e: 0x40402620, 0x096f: 0x40402820, + 0x0970: 0x40402c20, 0x0971: 0xe0001839, 0x0972: 0x40402e20, 0x0973: 0x40403020, + 0x0974: 0xe000183c, 0x0975: 0x40403220, 0x0976: 0x40403420, 0x0977: 0x40403620, + 0x0978: 0x40403820, 0x0979: 0x40403a20, 0x097a: 0x40404c20, 0x097b: 0x40404e20, + 0x097c: 0xa070f102, 0x097d: 0x40403c20, 0x097e: 0x40404a20, 0x097f: 0x40405620, + // Block 0x26, offset 0x980 + 0x0980: 0x40405820, 0x0981: 0x40405a20, 0x0982: 0x40405c20, 0x0983: 0x40405e20, + 0x0984: 0x40406020, 0x0985: 0x40406620, 0x0986: 0x40406a20, 0x0987: 0x40406c20, + 0x0988: 0x40407020, 0x0989: 0x40407220, 0x098a: 0x40407420, 0x098b: 0x40407620, + 0x098c: 0x40407820, 0x098d: 0x8209203d, 0x098e: 0x40406e20, 0x098f: 0x40405020, + 0x0990: 0x403fb820, 0x0991: 0xae600000, 0x0992: 0xadc00000, 0x0993: 0xae603502, + 0x0994: 0xae603202, 0x0995: 0x40406820, 0x0996: 0x40405220, 0x0997: 0x40405420, + 0x0998: 0xe000181e, 0x0999: 0xe0001821, 0x099a: 0xe0001824, 0x099b: 0xe0001827, + 0x099c: 0xe000182a, 0x099d: 0xe000182d, 0x099e: 0xe0001833, 0x099f: 0xe0001836, + 0x09a0: 0x403fd620, 0x09a1: 0x403fda20, 0x09a2: 0x40406220, 0x09a3: 0x40406420, + 0x09a4: 0x40030c20, 0x09a5: 0x40030e20, 0x09a6: 0xe000016a, 0x09a7: 0xe00001f8, + 0x09a8: 0xe0000313, 0x09a9: 0xe00003ed, 0x09aa: 0xe00004c8, 0x09ab: 0xe0000592, + 0x09ac: 0xe000065d, 0x09ad: 0xe0000705, 0x09ae: 0xe00007b1, 0x09af: 0xe0000856, + 0x09b0: 0x40056c20, 0x09b1: 0x4027b620, 0x09b2: 0x403fba20, 0x09b3: 0x403fc220, + 0x09b4: 0x403fc420, 0x09b5: 0x403fc620, 0x09b6: 0x403fc820, 0x09b7: 0x403fca20, + 0x09b9: 0x403ffe20, 0x09ba: 0x40402a20, 0x09bb: 0x403ff220, + 0x09bc: 0x40400020, 0x09bd: 0x40403e20, 0x09be: 0x40400c20, 0x09bf: 0x40402220, + // Block 0x27, offset 0x9c0 + 0x09c1: 0xa000f202, 0x09c2: 0xa000f302, 0x09c3: 0xa000f402, + 0x09c5: 0x40407c20, 0x09c6: 0x40407e20, 0x09c7: 0x40408020, + 0x09c8: 0x40408220, 0x09c9: 0x40408420, 0x09ca: 0x40408620, 0x09cb: 0x40408820, + 0x09cc: 0x40408c20, 0x09cf: 0x40409020, + 0x09d0: 0x40409220, 0x09d3: 0x40409420, + 0x09d4: 0x40409620, 0x09d5: 0x40409820, 0x09d6: 0x40409a20, 0x09d7: 0x40409c20, + 0x09d8: 0x40409e20, 0x09d9: 0x4040a020, 0x09da: 0x4040a220, 0x09db: 0x4040a420, + 0x09dc: 0x4040a620, 0x09dd: 0x4040a820, 0x09de: 0x4040aa20, 0x09df: 0x4040ac20, + 0x09e0: 0x4040ae20, 0x09e1: 0x4040b020, 0x09e2: 0x4040b220, 0x09e3: 0x4040b420, + 0x09e4: 0x4040b620, 0x09e5: 0x4040b820, 0x09e6: 0x4040ba20, 0x09e7: 0x4040bc20, + 0x09e8: 0x4040be20, 0x09ea: 0x4040c020, 0x09eb: 0x4040c220, + 0x09ec: 0x4040c420, 0x09ed: 0x4040c620, 0x09ee: 0x4040c820, 0x09ef: 0x4040ca20, + 0x09f0: 0x4040cc20, 0x09f2: 0x4040d020, + 0x09f6: 0x4040d420, 0x09f7: 0x4040d620, + 0x09f8: 0x4040d820, 0x09f9: 0x4040da20, + 0x09fc: 0xa070f102, 0x09fd: 0x4040dc20, 0x09fe: 0x4040de20, 0x09ff: 0x4040e020, + // Block 0x28, offset 0xa00 + 0x0a00: 0x4040e220, 0x0a01: 0x4040e420, 0x0a02: 0x4040e620, 0x0a03: 0x4040e820, + 0x0a04: 0x4040ea20, 0x0a07: 0xc05a0191, + 0x0a08: 0x4040f220, 0x0a0b: 0x4040f420, + 0x0a0c: 0x4040f620, 0x0a0d: 0x8209207c, 0x0a0e: 0xe0001845, + 0x0a17: 0x4040fa20, + 0x0a1c: 0xe000183f, 0x0a1d: 0xe0001842, 0x0a1f: 0xe0001848, + 0x0a20: 0x40408a20, 0x0a21: 0x40408e20, 0x0a22: 0x4040ec20, 0x0a23: 0x4040ee20, + 0x0a26: 0xe000016d, 0x0a27: 0xe00001fb, + 0x0a28: 0xe0000316, 0x0a29: 0xe00003f0, 0x0a2a: 0xe00004cb, 0x0a2b: 0xe0000595, + 0x0a2c: 0xe0000660, 0x0a2d: 0xe0000708, 0x0a2e: 0xe00007b4, 0x0a2f: 0xe0000859, + 0x0a30: 0x4040ce20, 0x0a31: 0x4040d220, 0x0a32: 0x4027e820, 0x0a33: 0x4027ea20, + 0x0a34: 0x40283020, 0x0a35: 0x40283220, 0x0a36: 0x40283420, 0x0a37: 0x40283620, + 0x0a38: 0x40283820, 0x0a39: 0x40283a20, 0x0a3a: 0x40073a20, 0x0a3b: 0x4027ec20, + // Block 0x29, offset 0xa40 + 0x0a41: 0xa000f202, 0x0a42: 0xa000f302, 0x0a43: 0xa000f402, + 0x0a45: 0x40410620, 0x0a46: 0x40410820, 0x0a47: 0x40411020, + 0x0a48: 0x40411220, 0x0a49: 0x40410020, 0x0a4a: 0x40410220, + 0x0a4f: 0x40411420, + 0x0a50: 0x40410a20, 0x0a53: 0x40410420, + 0x0a54: 0x40410c20, 0x0a55: 0x40411c20, 0x0a56: 0x40411e20, 0x0a57: 0x40412020, + 0x0a58: 0x40412220, 0x0a59: 0x40412420, 0x0a5a: 0x40412620, 0x0a5b: 0x40412820, + 0x0a5c: 0x40412a20, 0x0a5d: 0x40412c20, 0x0a5e: 0x40412e20, 0x0a5f: 0x40413020, + 0x0a60: 0x40413220, 0x0a61: 0x40413420, 0x0a62: 0x40413620, 0x0a63: 0x40413820, + 0x0a64: 0x40413a20, 0x0a65: 0x40413c20, 0x0a66: 0x40413e20, 0x0a67: 0x40414020, + 0x0a68: 0x40414220, 0x0a6a: 0x40414420, 0x0a6b: 0x40414620, + 0x0a6c: 0x40414820, 0x0a6d: 0x40414a20, 0x0a6e: 0x40414c20, 0x0a6f: 0x40414e20, + 0x0a70: 0x40415220, 0x0a72: 0x40415420, 0x0a73: 0xe000185a, + 0x0a75: 0x40415620, 0x0a76: 0xe000184b, + 0x0a78: 0x40411620, 0x0a79: 0x40411820, + 0x0a7c: 0xa070f102, 0x0a7e: 0x40415a20, 0x0a7f: 0x40415c20, + // Block 0x2a, offset 0xa80 + 0x0a80: 0x40415e20, 0x0a81: 0x40416020, 0x0a82: 0x40416220, + 0x0a87: 0x40416420, + 0x0a88: 0x40416620, 0x0a8b: 0x40416820, + 0x0a8c: 0x40416a20, 0x0a8d: 0x820920b6, + 0x0a91: 0x40411a20, + 0x0a99: 0xe000184e, 0x0a9a: 0xe0001851, 0x0a9b: 0xe0001854, + 0x0a9c: 0x40415820, 0x0a9e: 0xe0001857, + 0x0aa6: 0xe0000170, 0x0aa7: 0xe00001fe, + 0x0aa8: 0xe0000319, 0x0aa9: 0xe00003f3, 0x0aaa: 0xe00004ce, 0x0aab: 0xe0000598, + 0x0aac: 0xe0000663, 0x0aad: 0xe000070b, 0x0aae: 0xe00007b7, 0x0aaf: 0xe000085c, + 0x0ab0: 0xa000f502, 0x0ab1: 0xa000f602, 0x0ab2: 0x40410e20, 0x0ab3: 0x4040fe20, + 0x0ab4: 0x4040fc20, 0x0ab5: 0x40415020, + // Block 0x2b, offset 0xac0 + 0x0ac1: 0xa000f202, 0x0ac2: 0xa000f302, 0x0ac3: 0xa000f402, + 0x0ac5: 0x40417020, 0x0ac6: 0x40417220, 0x0ac7: 0x40417420, + 0x0ac8: 0x40417620, 0x0ac9: 0x40417820, 0x0aca: 0x40417a20, 0x0acb: 0x40417c20, + 0x0acc: 0x40418020, 0x0acd: 0x40418420, 0x0acf: 0x40418620, + 0x0ad0: 0x40418820, 0x0ad1: 0x40418a20, 0x0ad3: 0x40418c20, + 0x0ad4: 0x40418e20, 0x0ad5: 0x40419020, 0x0ad6: 0x40419220, 0x0ad7: 0x40419420, + 0x0ad8: 0x40419620, 0x0ad9: 0x40419820, 0x0ada: 0x40419a20, 0x0adb: 0x40419c20, + 0x0adc: 0x40419e20, 0x0add: 0x4041a020, 0x0ade: 0x4041a220, 0x0adf: 0x4041a420, + 0x0ae0: 0x4041a620, 0x0ae1: 0x4041a820, 0x0ae2: 0x4041aa20, 0x0ae3: 0x4041ac20, + 0x0ae4: 0x4041ae20, 0x0ae5: 0x4041b020, 0x0ae6: 0x4041b220, 0x0ae7: 0x4041b420, + 0x0ae8: 0x4041b620, 0x0aea: 0x4041b820, 0x0aeb: 0x4041ba20, + 0x0aec: 0x4041bc20, 0x0aed: 0x4041be20, 0x0aee: 0x4041c020, 0x0aef: 0x4041c220, + 0x0af0: 0x4041c420, 0x0af2: 0x4041c620, 0x0af3: 0x4041d220, + 0x0af5: 0x4041c820, 0x0af6: 0x4041ca20, 0x0af7: 0x4041cc20, + 0x0af8: 0x4041ce20, 0x0af9: 0x4041d020, + 0x0afc: 0xa070f102, 0x0afd: 0x4041d420, 0x0afe: 0x4041d620, 0x0aff: 0x4041d820, + // Block 0x2c, offset 0xb00 + 0x0b00: 0x4041da20, 0x0b01: 0x4041dc20, 0x0b02: 0x4041de20, 0x0b03: 0x4041e020, + 0x0b04: 0x4041e220, 0x0b05: 0x4041e820, 0x0b07: 0x4041ea20, + 0x0b08: 0x4041ec20, 0x0b09: 0x4041ee20, 0x0b0b: 0x4041f020, + 0x0b0c: 0x4041f220, 0x0b0d: 0x820920fa, + 0x0b10: 0x40416e20, + 0x0b20: 0x40417e20, 0x0b21: 0x40418220, 0x0b22: 0x4041e420, 0x0b23: 0x4041e620, + 0x0b26: 0xe0000173, 0x0b27: 0xe0000201, + 0x0b28: 0xe000031c, 0x0b29: 0xe00003f6, 0x0b2a: 0xe00004d1, 0x0b2b: 0xe000059b, + 0x0b2c: 0xe0000666, 0x0b2d: 0xe000070e, 0x0b2e: 0xe00007ba, 0x0b2f: 0xe000085f, + 0x0b30: 0x40057420, 0x0b31: 0x4027ee20, + // Block 0x2d, offset 0xb40 + 0x0b41: 0xa000f202, 0x0b42: 0xa000f302, 0x0b43: 0xa000f402, + 0x0b45: 0x4041f620, 0x0b46: 0x4041f820, 0x0b47: 0x4041fa20, + 0x0b48: 0x4041fc20, 0x0b49: 0x4041fe20, 0x0b4a: 0x40420020, 0x0b4b: 0x40420220, + 0x0b4c: 0x40420620, 0x0b4f: 0x40420a20, + 0x0b50: 0x40420c20, 0x0b53: 0x40420e20, + 0x0b54: 0x40421020, 0x0b55: 0x40421220, 0x0b56: 0x40421420, 0x0b57: 0x40421620, + 0x0b58: 0x40421820, 0x0b59: 0x40421a20, 0x0b5a: 0x40421c20, 0x0b5b: 0x40421e20, + 0x0b5c: 0x40422020, 0x0b5d: 0x40422220, 0x0b5e: 0x40422420, 0x0b5f: 0x40422620, + 0x0b60: 0x40422820, 0x0b61: 0x40422a20, 0x0b62: 0x40422c20, 0x0b63: 0x40422e20, + 0x0b64: 0x40423020, 0x0b65: 0x40423220, 0x0b66: 0x40423420, 0x0b67: 0x40423620, + 0x0b68: 0x40423820, 0x0b6a: 0x40423a20, 0x0b6b: 0x40423c20, + 0x0b6c: 0x40423e20, 0x0b6d: 0x40424020, 0x0b6e: 0x40424220, 0x0b6f: 0x40424420, + 0x0b70: 0x40424820, 0x0b72: 0x40424a20, 0x0b73: 0x40424c20, + 0x0b75: 0x40424e20, 0x0b76: 0x40425220, 0x0b77: 0x40425420, + 0x0b78: 0x40425620, 0x0b79: 0x40425820, + 0x0b7c: 0xa070f102, 0x0b7d: 0x40425a20, 0x0b7e: 0x40425c20, 0x0b7f: 0x40425e20, + // Block 0x2e, offset 0xb80 + 0x0b80: 0x40426020, 0x0b81: 0x40426220, 0x0b82: 0x40426420, 0x0b83: 0x40426620, + 0x0b84: 0x40426820, 0x0b87: 0xc05d01e1, + 0x0b88: 0x40427020, 0x0b8b: 0x40427220, + 0x0b8c: 0x40427420, 0x0b8d: 0x8209213b, + 0x0b96: 0x40427820, 0x0b97: 0x40427a20, + 0x0b9c: 0xe000185d, 0x0b9d: 0xe0001860, 0x0b9f: 0x40424620, + 0x0ba0: 0x40420420, 0x0ba1: 0x40420820, 0x0ba2: 0x40426a20, 0x0ba3: 0x40426c20, + 0x0ba6: 0xe0000176, 0x0ba7: 0xe0000204, + 0x0ba8: 0xe000031f, 0x0ba9: 0xe00003f9, 0x0baa: 0xe00004d4, 0x0bab: 0xe000059e, + 0x0bac: 0xe0000669, 0x0bad: 0xe0000711, 0x0bae: 0xe00007bd, 0x0baf: 0xe0000862, + 0x0bb0: 0x40073c20, 0x0bb1: 0x40425020, 0x0bb2: 0x40283c20, 0x0bb3: 0x40283e20, + 0x0bb4: 0x40284020, 0x0bb5: 0x40284220, 0x0bb6: 0x40284420, 0x0bb7: 0x40284620, + // Block 0x2f, offset 0xbc0 + 0x0bc2: 0xa000f302, 0x0bc3: 0x40429620, + 0x0bc5: 0x40427e20, 0x0bc6: 0x40428020, 0x0bc7: 0x40428220, + 0x0bc8: 0x40428420, 0x0bc9: 0x40428620, 0x0bca: 0x40428820, + 0x0bce: 0x40428a20, 0x0bcf: 0x40428c20, + 0x0bd0: 0x40428e20, 0x0bd2: 0xc0610231, 0x0bd3: 0x40429220, + 0x0bd4: 0x40429420, 0x0bd5: 0x40429820, + 0x0bd9: 0x40429a20, 0x0bda: 0x40429c20, + 0x0bdc: 0x4042bc20, 0x0bde: 0x40429e20, 0x0bdf: 0x4042a020, + 0x0be3: 0x4042a220, + 0x0be4: 0x4042a420, + 0x0be8: 0x4042a620, 0x0be9: 0x4042ba20, 0x0bea: 0x4042a820, + 0x0bee: 0x4042aa20, 0x0bef: 0x4042ac20, + 0x0bf0: 0x4042ae20, 0x0bf1: 0x4042b820, 0x0bf2: 0x4042b020, 0x0bf3: 0x4042b620, + 0x0bf4: 0x4042b420, 0x0bf5: 0x4042b220, 0x0bf6: 0x4042be20, 0x0bf7: 0x4042c020, + 0x0bf8: 0x4042c220, 0x0bf9: 0x4042c420, + 0x0bfe: 0x4042c620, 0x0bff: 0x4042c820, + // Block 0x30, offset 0xc00 + 0x0c00: 0x4042ca20, 0x0c01: 0x4042cc20, 0x0c02: 0x4042ce20, + 0x0c06: 0xc0630261, 0x0c07: 0xc06602b1, + 0x0c08: 0x4042d420, 0x0c0a: 0x4042d620, 0x0c0b: 0x4042d820, + 0x0c0c: 0x4042da20, 0x0c0d: 0x8209216e, + 0x0c10: 0x40427c20, + 0x0c17: 0x4042de20, + 0x0c26: 0xe0000179, 0x0c27: 0xe0000207, + 0x0c28: 0xe0000322, 0x0c29: 0xe00003fc, 0x0c2a: 0xe00004d7, 0x0c2b: 0xe00005a1, + 0x0c2c: 0xe000066c, 0x0c2d: 0xe0000714, 0x0c2e: 0xe00007c0, 0x0c2f: 0xe0000865, + 0x0c30: 0x40285420, 0x0c31: 0x40285620, 0x0c32: 0x40285820, 0x0c33: 0x40073e20, + 0x0c34: 0x40074020, 0x0c35: 0x40074220, 0x0c36: 0x40074420, 0x0c37: 0x40074620, + 0x0c38: 0x40074820, 0x0c39: 0x4027f220, 0x0c3a: 0x40074a20, + // Block 0x31, offset 0xc40 + 0x0c41: 0xa000f202, 0x0c42: 0xa000f302, 0x0c43: 0xa000f402, + 0x0c45: 0x4042e020, 0x0c46: 0x4042e220, 0x0c47: 0x4042e420, + 0x0c48: 0x4042e620, 0x0c49: 0x4042e820, 0x0c4a: 0x4042ea20, 0x0c4b: 0x4042ec20, + 0x0c4c: 0x4042f020, 0x0c4e: 0x4042f420, 0x0c4f: 0x4042f620, + 0x0c50: 0x4042f820, 0x0c52: 0x4042fa20, 0x0c53: 0x4042fc20, + 0x0c54: 0x4042fe20, 0x0c55: 0x40430020, 0x0c56: 0x40430220, 0x0c57: 0x40430420, + 0x0c58: 0x40430620, 0x0c59: 0x40430820, 0x0c5a: 0x40430a20, 0x0c5b: 0x40430e20, + 0x0c5c: 0x40431020, 0x0c5d: 0x40431420, 0x0c5e: 0x40431620, 0x0c5f: 0x40431820, + 0x0c60: 0x40431a20, 0x0c61: 0x40431c20, 0x0c62: 0x40431e20, 0x0c63: 0x40432020, + 0x0c64: 0x40432220, 0x0c65: 0x40432420, 0x0c66: 0x40432620, 0x0c67: 0x40432820, + 0x0c68: 0x40432a20, 0x0c6a: 0x40432c20, 0x0c6b: 0x40432e20, + 0x0c6c: 0x40433020, 0x0c6d: 0x40433220, 0x0c6e: 0x40433420, 0x0c6f: 0x40433620, + 0x0c70: 0x40433820, 0x0c71: 0x40433a20, 0x0c72: 0x40433c20, 0x0c73: 0x40434820, + 0x0c75: 0x40433e20, 0x0c76: 0x40434020, 0x0c77: 0x40434220, + 0x0c78: 0x40434420, 0x0c79: 0x40434620, + 0x0c7d: 0x40434a20, 0x0c7e: 0x40434c20, 0x0c7f: 0x40434e20, + // Block 0x32, offset 0xc80 + 0x0c80: 0x40435020, 0x0c81: 0x40435220, 0x0c82: 0x40435420, 0x0c83: 0x40435620, + 0x0c84: 0x40435820, 0x0c86: 0xc06802e1, 0x0c87: 0x40436020, + 0x0c88: 0x40436220, 0x0c8a: 0x40436420, 0x0c8b: 0x40436620, + 0x0c8c: 0x40436820, 0x0c8d: 0x820921b5, + 0x0c95: 0x825421b6, 0x0c96: 0x825b21b7, + 0x0c98: 0x40430c20, 0x0c99: 0x40431220, + 0x0ca0: 0x4042ee20, 0x0ca1: 0x4042f220, 0x0ca2: 0x40435a20, 0x0ca3: 0x40435c20, + 0x0ca6: 0xe000017c, 0x0ca7: 0xe000020a, + 0x0ca8: 0xe0000325, 0x0ca9: 0xe00003ff, 0x0caa: 0xe00004da, 0x0cab: 0xe00005a4, + 0x0cac: 0xe000066f, 0x0cad: 0xe0000717, 0x0cae: 0xe00007c3, 0x0caf: 0xe0000868, + 0x0cb8: 0xe000017f, 0x0cb9: 0xe000020d, 0x0cba: 0xe0000328, 0x0cbb: 0xe0000402, + 0x0cbc: 0xe0000210, 0x0cbd: 0xe000032b, 0x0cbe: 0xe0000405, 0x0cbf: 0x40074c20, + // Block 0x33, offset 0xcc0 + 0x0cc2: 0xa000f302, 0x0cc3: 0xa000f402, + 0x0cc5: 0x40437020, 0x0cc6: 0x40437220, 0x0cc7: 0x40437420, + 0x0cc8: 0x40437620, 0x0cc9: 0x40437820, 0x0cca: 0x40437a20, 0x0ccb: 0x40437c20, + 0x0ccc: 0x40438020, 0x0cce: 0x40438420, 0x0ccf: 0x40438620, + 0x0cd0: 0x40438820, 0x0cd2: 0x40438a20, 0x0cd3: 0x40438c20, + 0x0cd4: 0x40438e20, 0x0cd5: 0x40439020, 0x0cd6: 0x40439220, 0x0cd7: 0x40439420, + 0x0cd8: 0x40439620, 0x0cd9: 0x40439820, 0x0cda: 0x40439a20, 0x0cdb: 0x40439c20, + 0x0cdc: 0x40439e20, 0x0cdd: 0x4043a020, 0x0cde: 0x4043a220, 0x0cdf: 0x4043a420, + 0x0ce0: 0x4043a620, 0x0ce1: 0x4043a820, 0x0ce2: 0x4043aa20, 0x0ce3: 0x4043ac20, + 0x0ce4: 0x4043ae20, 0x0ce5: 0x4043b020, 0x0ce6: 0x4043b220, 0x0ce7: 0x4043b420, + 0x0ce8: 0x4043b620, 0x0cea: 0x4043b820, 0x0ceb: 0x4043ba20, + 0x0cec: 0x4043bc20, 0x0ced: 0x4043be20, 0x0cee: 0x4043c020, 0x0cef: 0x4043c220, + 0x0cf0: 0x4043c420, 0x0cf1: 0x4043c620, 0x0cf2: 0x4043c820, 0x0cf3: 0x4043d420, + 0x0cf5: 0x4043ca20, 0x0cf6: 0x4043cc20, 0x0cf7: 0x4043ce20, + 0x0cf8: 0x4043d020, 0x0cf9: 0x4043d220, + 0x0cfc: 0xa070f102, 0x0cfd: 0x4043d820, 0x0cfe: 0x4043de20, 0x0cff: 0xc06a0311, + // Block 0x34, offset 0xd00 + 0x0d00: 0x4043e220, 0x0d01: 0x4043e420, 0x0d02: 0x4043e620, 0x0d03: 0x4043e820, + 0x0d04: 0x4043ea20, 0x0d06: 0xc06c0341, 0x0d07: 0x4043f220, + 0x0d08: 0x4043f420, 0x0d0a: 0xc0710311, 0x0d0b: 0x4043f820, + 0x0d0c: 0x4043fa20, 0x0d0d: 0x820921fe, + 0x0d15: 0x4043fe20, 0x0d16: 0x40440020, + 0x0d1e: 0x4043d620, + 0x0d20: 0x40437e20, 0x0d21: 0x40438220, 0x0d22: 0x4043ec20, 0x0d23: 0x4043ee20, + 0x0d26: 0xe0000182, 0x0d27: 0xe0000213, + 0x0d28: 0xe000032e, 0x0d29: 0xe0000408, 0x0d2a: 0xe00004dd, 0x0d2b: 0xe00005a7, + 0x0d2c: 0xe0000672, 0x0d2d: 0xe000071a, 0x0d2e: 0xe00007c6, 0x0d2f: 0xe000086b, + 0x0d31: 0x4043da20, 0x0d32: 0x4043dc20, + // Block 0x35, offset 0xd40 + 0x0d42: 0xa000f302, 0x0d43: 0xa000f402, + 0x0d45: 0x40440220, 0x0d46: 0x40440420, 0x0d47: 0x40440620, + 0x0d48: 0x40440820, 0x0d49: 0x40440a20, 0x0d4a: 0x40440c20, 0x0d4b: 0x40440e20, + 0x0d4c: 0x40441220, 0x0d4e: 0x40441620, 0x0d4f: 0x40441820, + 0x0d50: 0x40441a20, 0x0d52: 0x40441c20, 0x0d53: 0x40441e20, + 0x0d54: 0x40442020, 0x0d55: 0x40442220, 0x0d56: 0x40442420, 0x0d57: 0x40442620, + 0x0d58: 0x40442820, 0x0d59: 0x40442a20, 0x0d5a: 0x40442c20, 0x0d5b: 0x40442e20, + 0x0d5c: 0x40443020, 0x0d5d: 0x40443220, 0x0d5e: 0x40443420, 0x0d5f: 0x40443620, + 0x0d60: 0x40443820, 0x0d61: 0x40443a20, 0x0d62: 0x40443c20, 0x0d63: 0x40443e20, + 0x0d64: 0x40444020, 0x0d65: 0x40444220, 0x0d66: 0x40444420, 0x0d67: 0x40444620, + 0x0d68: 0x40444820, 0x0d69: 0x40444a20, 0x0d6a: 0x40444c20, 0x0d6b: 0x40444e20, + 0x0d6c: 0x40445020, 0x0d6d: 0x40445220, 0x0d6e: 0x40445420, 0x0d6f: 0x40445620, + 0x0d70: 0x40445820, 0x0d71: 0x40446a20, 0x0d72: 0x40445a20, 0x0d73: 0x40446620, + 0x0d74: 0x40446820, 0x0d75: 0x40445c20, 0x0d76: 0x40445e20, 0x0d77: 0x40446020, + 0x0d78: 0x40446220, 0x0d79: 0x40446420, 0x0d7a: 0x40446c20, + 0x0d7d: 0x40446e20, 0x0d7e: 0x40447020, 0x0d7f: 0x40447220, + // Block 0x36, offset 0xd80 + 0x0d80: 0x40447420, 0x0d81: 0x40447620, 0x0d82: 0x40447820, 0x0d83: 0x40447a20, + 0x0d84: 0x40447c20, 0x0d86: 0xc07303b1, 0x0d87: 0xc0760401, + 0x0d88: 0x40448620, 0x0d8a: 0x40448820, 0x0d8b: 0x40448a20, + 0x0d8c: 0x40448c20, 0x0d8d: 0x82092248, 0x0d8e: 0xe000186c, + 0x0d97: 0x40448e20, + 0x0da0: 0x40441020, 0x0da1: 0x40441420, 0x0da2: 0x40447e20, 0x0da3: 0x40448020, + 0x0da6: 0xe0000185, 0x0da7: 0xe0000216, + 0x0da8: 0xe0000331, 0x0da9: 0xe000040b, 0x0daa: 0xe00004e0, 0x0dab: 0xe00005aa, + 0x0dac: 0xe0000675, 0x0dad: 0xe000071d, 0x0dae: 0xe00007c9, 0x0daf: 0xe000086e, + 0x0db0: 0x40285a20, 0x0db1: 0x40285c20, 0x0db2: 0x40285e20, 0x0db3: 0x40286020, + 0x0db4: 0x40286220, 0x0db5: 0x40286420, + 0x0db9: 0x40074e20, 0x0dba: 0xe0001866, 0x0dbb: 0xe0001869, + 0x0dbc: 0xe000186f, 0x0dbd: 0xe0001872, 0x0dbe: 0xe0001875, 0x0dbf: 0xe0001863, + // Block 0x37, offset 0xdc0 + 0x0dc2: 0xa000f302, 0x0dc3: 0xa000f402, + 0x0dc5: 0x40449220, 0x0dc6: 0x40449420, 0x0dc7: 0x40449620, + 0x0dc8: 0x40449820, 0x0dc9: 0x40449a20, 0x0dca: 0x40449c20, 0x0dcb: 0x40449e20, + 0x0dcc: 0x4044a020, 0x0dcd: 0x4044a220, 0x0dce: 0x4044a420, 0x0dcf: 0x4044a620, + 0x0dd0: 0x4044a820, 0x0dd1: 0x4044aa20, 0x0dd2: 0x4044ac20, 0x0dd3: 0x4044ae20, + 0x0dd4: 0x4044b020, 0x0dd5: 0x4044b220, 0x0dd6: 0x4044b420, + 0x0dda: 0x4044b620, 0x0ddb: 0x4044b820, + 0x0ddc: 0x4044ba20, 0x0ddd: 0x4044bc20, 0x0dde: 0x4044be20, 0x0ddf: 0x4044c020, + 0x0de0: 0x4044c220, 0x0de1: 0x4044c420, 0x0de2: 0x4044c620, 0x0de3: 0x4044c820, + 0x0de4: 0x4044ca20, 0x0de5: 0x4044cc20, 0x0de6: 0x4044ce20, 0x0de7: 0x4044d020, + 0x0de8: 0x4044d220, 0x0de9: 0x4044d420, 0x0dea: 0x4044d620, 0x0deb: 0x4044d820, + 0x0dec: 0x4044da20, 0x0ded: 0x4044dc20, 0x0dee: 0x4044de20, 0x0def: 0x4044e020, + 0x0df0: 0x4044e220, 0x0df1: 0x4044e420, 0x0df3: 0x4044e620, + 0x0df4: 0x4044e820, 0x0df5: 0x4044ea20, 0x0df6: 0x4044ec20, 0x0df7: 0x4044ee20, + 0x0df8: 0x4044f020, 0x0df9: 0x4044f220, 0x0dfa: 0x4044f420, 0x0dfb: 0x4044f620, + 0x0dfd: 0x4044f820, + // Block 0x38, offset 0xe00 + 0x0e00: 0x4044fa20, 0x0e01: 0x4044fc20, 0x0e02: 0x4044fe20, 0x0e03: 0x40450020, + 0x0e04: 0x40450220, 0x0e05: 0x40450420, 0x0e06: 0x40450620, + 0x0e0a: 0x82092295, + 0x0e0f: 0x40450820, + 0x0e10: 0x40450a20, 0x0e11: 0x40450c20, 0x0e12: 0x40450e20, 0x0e13: 0x40451020, + 0x0e14: 0x40451220, 0x0e16: 0x40451420, + 0x0e18: 0x40451620, 0x0e19: 0xc0780431, 0x0e1a: 0x40452020, 0x0e1b: 0x40452220, + 0x0e1c: 0xc07d04b1, 0x0e1d: 0x40452620, 0x0e1e: 0x40452820, 0x0e1f: 0x40451a20, + 0x0e32: 0x40451820, 0x0e33: 0x40451c20, + 0x0e34: 0x40057620, + // Block 0x39, offset 0xe40 + 0x0e41: 0x40491020, 0x0e42: 0x40491220, 0x0e43: 0x40491420, + 0x0e44: 0x40491620, 0x0e45: 0x40491820, 0x0e46: 0x40491a20, 0x0e47: 0x40491c20, + 0x0e48: 0x40491e20, 0x0e49: 0x40492020, 0x0e4a: 0x40492220, 0x0e4b: 0x40492420, + 0x0e4c: 0x40492620, 0x0e4d: 0x40492820, 0x0e4e: 0x40492a20, 0x0e4f: 0x40492c20, + 0x0e50: 0x40492e20, 0x0e51: 0x40493020, 0x0e52: 0x40493220, 0x0e53: 0x40493420, + 0x0e54: 0x40493620, 0x0e55: 0x40493820, 0x0e56: 0x40493a20, 0x0e57: 0x40493c20, + 0x0e58: 0x40493e20, 0x0e59: 0x40494020, 0x0e5a: 0x40494220, 0x0e5b: 0x40494420, + 0x0e5c: 0x40494620, 0x0e5d: 0x40494820, 0x0e5e: 0x40494a20, 0x0e5f: 0x40494c20, + 0x0e60: 0x40494e20, 0x0e61: 0x40495020, 0x0e62: 0x40495220, 0x0e63: 0x40495420, + 0x0e64: 0x40495620, 0x0e65: 0x40495820, 0x0e66: 0x40495a20, 0x0e67: 0x40495c20, + 0x0e68: 0x40495e20, 0x0e69: 0x40496020, 0x0e6a: 0x40496220, 0x0e6b: 0x40496420, + 0x0e6c: 0x40496620, 0x0e6d: 0x40496820, 0x0e6e: 0x40496a20, 0x0e6f: 0x40496c20, + 0x0e70: 0x40496e20, 0x0e71: 0x40497020, 0x0e72: 0x40497220, 0x0e73: 0x40497420, + 0x0e74: 0x40497620, 0x0e75: 0x40497820, 0x0e76: 0x40497a20, 0x0e77: 0x40497c20, + 0x0e78: 0x826724bf, 0x0e79: 0x826724c0, 0x0e7a: 0x820924c1, + 0x0e7f: 0x4027f420, + // Block 0x3a, offset 0xe80 + 0x0e80: 0xc07f04e1, 0x0e81: 0xc0ae04e1, 0x0e82: 0xc0dd04e1, 0x0e83: 0xc10c04e1, + 0x0e84: 0xc13b04e1, 0x0e85: 0x40498e20, 0x0e86: 0x4027b820, 0x0e87: 0xa000ff02, + 0x0e88: 0xa6b10002, 0x0e89: 0xa6b10102, 0x0e8a: 0xa6b10202, 0x0e8b: 0xa6b10302, + 0x0e8c: 0xa0010402, 0x0e8d: 0xc16a0511, 0x0e8e: 0xa000fe02, 0x0e8f: 0x40057820, + 0x0e90: 0xe000019a, 0x0e91: 0xe000022e, 0x0e92: 0xe0000346, 0x0e93: 0xe0000420, + 0x0e94: 0xe00004f5, 0x0e95: 0xe00005bf, 0x0e96: 0xe000068a, 0x0e97: 0xe0000732, + 0x0e98: 0xe00007de, 0x0e99: 0xe0000883, 0x0e9a: 0x40057a20, 0x0e9b: 0x40057c20, + // Block 0x3b, offset 0xec0 + 0x0ec1: 0x40499220, 0x0ec2: 0x40499420, + 0x0ec4: 0x40499620, 0x0ec7: 0x40499820, + 0x0ec8: 0x40499a20, 0x0eca: 0x40499e20, + 0x0ecd: 0x4049a220, + 0x0ed4: 0x4049a420, 0x0ed5: 0x4049a620, 0x0ed6: 0x4049a820, 0x0ed7: 0x4049aa20, + 0x0ed9: 0x4049ac20, 0x0eda: 0x4049ae20, 0x0edb: 0x4049b020, + 0x0edc: 0x4049b220, 0x0edd: 0x4049b420, 0x0ede: 0x4049b620, 0x0edf: 0x4049b820, + 0x0ee1: 0x4049ba20, 0x0ee2: 0x4049bc20, 0x0ee3: 0x4049be20, + 0x0ee5: 0x4049c020, 0x0ee7: 0x4049c220, + 0x0eea: 0x40499c20, 0x0eeb: 0x4049c420, + 0x0eed: 0x4049c620, 0x0eee: 0x4049c820, 0x0eef: 0x4049ca20, + 0x0ef0: 0x4049cc20, 0x0ef1: 0x4049ce20, 0x0ef2: 0x4049d020, 0x0ef3: 0x4049d220, + 0x0ef4: 0x4049d420, 0x0ef5: 0x4049d620, 0x0ef6: 0x4049d820, 0x0ef7: 0x4049da20, + 0x0ef8: 0x827624ee, 0x0ef9: 0x827624ef, 0x0efb: 0x4049e020, + 0x0efc: 0x4049e220, 0x0efd: 0x4049e420, + // Block 0x3c, offset 0xf00 + 0x0f00: 0xc16c0541, 0x0f01: 0xc18c0541, 0x0f02: 0xc1ac0541, 0x0f03: 0xc1cc0541, + 0x0f04: 0xc1ec0541, 0x0f06: 0x4027ba20, + 0x0f08: 0xa7a10602, 0x0f09: 0xa7a10702, 0x0f0a: 0xa7a10802, 0x0f0b: 0xa7a10902, + 0x0f0c: 0xa0010a02, 0x0f0d: 0xc20c0641, + 0x0f10: 0xe000019d, 0x0f11: 0xe0000231, 0x0f12: 0xe0000349, 0x0f13: 0xe0000423, + 0x0f14: 0xe00004f8, 0x0f15: 0xe00005c2, 0x0f16: 0xe000068d, 0x0f17: 0xe0000735, + 0x0f18: 0xe00007e1, 0x0f19: 0xe0000886, + 0x0f1c: 0xf0000404, 0x0f1d: 0xf0000404, 0x0f1e: 0x40499020, 0x0f1f: 0x4049a020, + // Block 0x3d, offset 0xf40 + 0x0f40: 0xe000201a, 0x0f41: 0x40075e20, 0x0f42: 0x40076020, 0x0f43: 0x40076220, + 0x0f44: 0x40058220, 0x0f45: 0x40058420, 0x0f46: 0x40058620, 0x0f47: 0x40058820, + 0x0f48: 0x40058a20, 0x0f49: 0x40058c20, 0x0f4a: 0x40058e20, 0x0f4b: 0x40059420, + 0x0f4c: 0x0005949b, 0x0f4d: 0x40059620, 0x0f4e: 0x40059820, 0x0f4f: 0x40059a20, + 0x0f50: 0x40059c20, 0x0f51: 0x40059e20, 0x0f52: 0x4005a020, 0x0f53: 0x40076420, + 0x0f54: 0x4002aa20, 0x0f55: 0x40076620, 0x0f56: 0x40076820, 0x0f57: 0x40076a20, + 0x0f58: 0xadc00000, 0x0f59: 0xadc00000, 0x0f5a: 0x40076c20, 0x0f5b: 0x40076e20, + 0x0f5c: 0x40077020, 0x0f5d: 0x40077220, 0x0f5e: 0x40077420, 0x0f5f: 0x40077620, + 0x0f60: 0xe00001a0, 0x0f61: 0xe0000234, 0x0f62: 0xe000034c, 0x0f63: 0xe0000426, + 0x0f64: 0xe00004fb, 0x0f65: 0xe00005c5, 0x0f66: 0xe0000690, 0x0f67: 0xe0000738, + 0x0f68: 0xe00007e4, 0x0f69: 0xe0000889, 0x0f6a: 0xe0000237, 0x0f6b: 0xe000034f, + 0x0f6c: 0xe0000429, 0x0f6d: 0xe00004fe, 0x0f6e: 0xe00005c8, 0x0f6f: 0xe0000693, + 0x0f70: 0xe000073b, 0x0f71: 0xe00007e7, 0x0f72: 0xe000088c, 0x0f73: 0xe00001a3, + 0x0f74: 0x40077820, 0x0f75: 0xadc00000, 0x0f76: 0x40077a20, 0x0f77: 0xadc00000, + 0x0f78: 0x40077c20, 0x0f79: 0xad810e02, 0x0f7a: 0x40040020, 0x0f7b: 0x40040220, + 0x0f7c: 0x40040420, 0x0f7d: 0x40040620, 0x0f7e: 0xa0000000, 0x0f7f: 0xa0000000, + // Block 0x3e, offset 0xf80 + 0x0f80: 0x404a7620, 0x0f81: 0x404a7c20, 0x0f82: 0x404a8020, 0x0f83: 0xe0001fe4, + 0x0f84: 0x404a8420, 0x0f85: 0x404a8820, 0x0f86: 0x404a8c20, 0x0f87: 0x404a9020, + 0x0f89: 0x404a9420, 0x0f8a: 0x404a9820, 0x0f8b: 0x404a9c20, + 0x0f8c: 0x404aa020, 0x0f8d: 0xe0001fea, 0x0f8e: 0x404aa420, 0x0f8f: 0x404aa820, + 0x0f90: 0x404aac20, 0x0f91: 0x404ab020, 0x0f92: 0xe0001ff0, 0x0f93: 0x404ab420, + 0x0f94: 0x404ab820, 0x0f95: 0x404abc20, 0x0f96: 0x404ac020, 0x0f97: 0xe0001ff6, + 0x0f98: 0x404ac420, 0x0f99: 0x404ac820, 0x0f9a: 0x404acc20, 0x0f9b: 0x404ad020, + 0x0f9c: 0xe0001ffc, 0x0f9d: 0x404ad420, 0x0f9e: 0x404ad820, 0x0f9f: 0x404adc20, + 0x0fa0: 0x404ae020, 0x0fa1: 0x404ae420, 0x0fa2: 0x404ae820, 0x0fa3: 0x404aee20, + 0x0fa4: 0x404af220, 0x0fa5: 0x404af620, 0x0fa6: 0x404afa20, 0x0fa7: 0x404afe20, + 0x0fa8: 0x404b0220, 0x0fa9: 0xe0001fde, 0x0faa: 0xe0002008, 0x0fab: 0x404a7a20, + 0x0fac: 0x404aec20, + 0x0fb1: 0xc30f0751, 0x0fb2: 0x8282258c, 0x0fb3: 0x8281258d, + 0x0fb4: 0x82842590, 0x0fb5: 0x82812591, 0x0fb6: 0x404b2420, 0x0fb7: 0x404b2620, + 0x0fb8: 0x404b2820, 0x0fb9: 0x404b2a20, 0x0fba: 0x82822596, 0x0fbb: 0x82822597, + 0x0fbc: 0x82822598, 0x0fbd: 0x82822599, 0x0fbe: 0xa000f302, 0x0fbf: 0xa000f402, + // Block 0x3f, offset 0xfc0 + 0x0fc0: 0x8282258e, 0x0fc1: 0x8281258f, 0x0fc2: 0xae600000, 0x0fc3: 0xae600000, + 0x0fc4: 0x8209259a, 0x0fc5: 0x4005a220, 0x0fc6: 0xae600000, 0x0fc7: 0xae600000, + 0x0fc8: 0x404b0620, 0x0fc9: 0x404b0a20, 0x0fca: 0x404b1220, 0x0fcb: 0x404b1420, + 0x0fcc: 0x404b0e20, 0x0fcd: 0x404b0820, 0x0fce: 0x404b0c20, 0x0fcf: 0x404b1020, + 0x0fd0: 0x404a7820, 0x0fd1: 0x404a7e20, 0x0fd2: 0x404a8220, 0x0fd3: 0xe0001fe7, + 0x0fd4: 0x404a8620, 0x0fd5: 0x404a8a20, 0x0fd6: 0x404a8e20, 0x0fd7: 0x404a9220, + 0x0fd9: 0x404a9620, 0x0fda: 0x404a9a20, 0x0fdb: 0x404a9e20, + 0x0fdc: 0x404aa220, 0x0fdd: 0xe0001fed, 0x0fde: 0x404aa620, 0x0fdf: 0x404aaa20, + 0x0fe0: 0x404aae20, 0x0fe1: 0x404ab220, 0x0fe2: 0xe0001ff3, 0x0fe3: 0x404ab620, + 0x0fe4: 0x404aba20, 0x0fe5: 0x404abe20, 0x0fe6: 0x404ac220, 0x0fe7: 0xe0001ff9, + 0x0fe8: 0x404ac620, 0x0fe9: 0x404aca20, 0x0fea: 0x404ace20, 0x0feb: 0x404ad220, + 0x0fec: 0xe0001fff, 0x0fed: 0x404ad620, 0x0fee: 0x404ada20, 0x0fef: 0x404ade20, + 0x0ff0: 0x404ae220, 0x0ff1: 0x404ae620, 0x0ff2: 0xc30306a1, 0x0ff3: 0xc30906a1, + 0x0ff4: 0x404af420, 0x0ff5: 0x404af820, 0x0ff6: 0x404afc20, 0x0ff7: 0x404b0020, + 0x0ff8: 0x404b0420, 0x0ff9: 0xe0001fe1, 0x0ffa: 0xe0002002, 0x0ffb: 0xe0002005, + 0x0ffc: 0xe000200b, 0x0ffe: 0x40077e20, 0x0fff: 0x40078020, + // Block 0x40, offset 0x1000 + 0x1000: 0x40078220, 0x1001: 0x40078420, 0x1002: 0x40078620, 0x1003: 0x40078820, + 0x1004: 0x40078a20, 0x1005: 0x40078c20, 0x1006: 0xadc00000, 0x1007: 0x40078e20, + 0x1008: 0x40079020, 0x1009: 0x40079220, 0x100a: 0x40079420, 0x100b: 0x40079620, + 0x100c: 0x40079820, 0x100e: 0x40079a20, 0x100f: 0x40079c20, + 0x1010: 0x40059020, 0x1011: 0x40059220, 0x1012: 0x4005a420, 0x1013: 0x4005a620, + 0x1014: 0x4005a820, 0x1015: 0x40079e20, 0x1016: 0x4007a020, 0x1017: 0x4007a220, + 0x1018: 0x4007a420, 0x1019: 0x4005aa20, 0x101a: 0x4005ac20, + // Block 0x41, offset 0x1040 + 0x1040: 0x404e1420, 0x1041: 0x404e1820, 0x1042: 0x404e1c20, 0x1043: 0x404e2220, + 0x1044: 0x404e2420, 0x1045: 0x404e2820, 0x1046: 0x404e2e20, 0x1047: 0x404e3220, + 0x1048: 0x404e3a20, 0x1049: 0x404e4220, 0x104a: 0x404e4820, 0x104b: 0x404e4a20, + 0x104c: 0x404e4e20, 0x104d: 0x404e5220, 0x104e: 0x404e5620, 0x104f: 0x404e5a20, + 0x1050: 0x404e5e20, 0x1051: 0x404e6020, 0x1052: 0x404e6220, 0x1053: 0x404e6620, + 0x1054: 0x404e6a20, 0x1055: 0x404e7220, 0x1056: 0x404e7420, 0x1057: 0x404e7e20, + 0x1058: 0x404e8220, 0x1059: 0x404e8420, 0x105a: 0x404e8820, 0x105b: 0x404e8c20, + 0x105c: 0x404e9420, 0x105d: 0x404e9820, 0x105e: 0x404ea620, 0x105f: 0x404eaa20, + 0x1060: 0x404eb620, 0x1061: 0x404ec220, 0x1062: 0x404ec420, 0x1063: 0x404ec620, + 0x1064: 0x404ec820, 0x1065: 0xc31307b1, 0x1066: 0x404ecc20, 0x1067: 0x404ed620, + 0x1068: 0x404ed820, 0x1069: 0x404eda20, 0x106a: 0x404edc20, 0x106b: 0x004ede84, + 0x106c: 0x404ede20, 0x106d: 0x404ee620, 0x106e: 0x404eea20, 0x106f: 0x404eee20, + 0x1070: 0x404ef420, 0x1071: 0x404efe20, 0x1072: 0x404f0620, 0x1073: 0x404eec20, + 0x1074: 0x404f0a20, 0x1075: 0x404f0220, 0x1076: 0xa000f302, 0x1077: 0xa0711202, + 0x1078: 0xa000f402, 0x1079: 0x8209278a, 0x107a: 0x8209278b, 0x107b: 0x404e8a20, + 0x107c: 0x404e9220, 0x107d: 0x404e9a20, 0x107e: 0x404eb020, 0x107f: 0xe000201e, + // Block 0x42, offset 0x1080 + 0x1080: 0xe00001ac, 0x1081: 0xe0000240, 0x1082: 0xe0000358, 0x1083: 0xe0000432, + 0x1084: 0xe0000507, 0x1085: 0xe00005d1, 0x1086: 0xe000069c, 0x1087: 0xe0000744, + 0x1088: 0xe00007f0, 0x1089: 0xe0000895, 0x108a: 0x40032220, 0x108b: 0x40032420, + 0x108c: 0x4005b420, 0x108d: 0x4005b620, 0x108e: 0x4005b820, 0x108f: 0x4005ba20, + 0x1090: 0x404ea020, 0x1091: 0x404ea220, 0x1092: 0x404ece20, 0x1093: 0x404ed020, + 0x1094: 0x404ed220, 0x1095: 0x404ed420, 0x1096: 0x404ef620, 0x1097: 0x404ef820, + 0x1098: 0x404efa20, 0x1099: 0x404efc20, 0x109a: 0x404e2620, 0x109b: 0x404e3c20, + 0x109c: 0x404eb820, 0x109d: 0x404eba20, 0x109e: 0x404e7020, 0x109f: 0x404e8620, + 0x10a0: 0x404e9620, 0x10a1: 0x404e4020, 0x10a2: 0x404f0c20, 0x10a3: 0x404f1820, + 0x10a4: 0x404f1a20, 0x10a5: 0x404ea420, 0x10a6: 0x404ec020, 0x10a7: 0x404f0e20, + 0x10a8: 0x404f1020, 0x10a9: 0x404f1c20, 0x10aa: 0x404f1e20, 0x10ab: 0x404f2020, + 0x10ac: 0x404f2220, 0x10ad: 0x404f2420, 0x10ae: 0x404e5c20, 0x10af: 0x404ebc20, + 0x10b0: 0x404ebe20, 0x10b1: 0x404ee820, 0x10b2: 0x404ee220, 0x10b3: 0x404ef020, + 0x10b4: 0x404ef220, 0x10b5: 0x404e1620, 0x10b6: 0x404e1a20, 0x10b7: 0x404e1e20, + 0x10b8: 0x404e2a20, 0x10b9: 0x404e3620, 0x10ba: 0x404e4420, 0x10bb: 0x404e6420, + 0x10bc: 0x404e6c20, 0x10bd: 0x404e7620, 0x10be: 0x404e7820, 0x10bf: 0x404e8020, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x404e9e20, 0x10c1: 0x404eac20, 0x10c2: 0x404e9c20, 0x10c3: 0x404ee020, + 0x10c4: 0x404f0020, 0x10c5: 0x404f0420, 0x10c6: 0x404f1220, 0x10c7: 0x404f2620, + 0x10c8: 0x404f2a20, 0x10c9: 0x404f2e20, 0x10ca: 0x404f3020, 0x10cb: 0x404f2820, + 0x10cc: 0x404f2c20, 0x10cd: 0xadc11302, 0x10ce: 0x404e7c20, 0x10cf: 0x404f3220, + 0x10d0: 0xe00001af, 0x10d1: 0xe0000243, 0x10d2: 0xe000035b, 0x10d3: 0xe0000435, + 0x10d4: 0xe000050a, 0x10d5: 0xe00005d4, 0x10d6: 0xe000069f, 0x10d7: 0xe0000747, + 0x10d8: 0xe00007f3, 0x10d9: 0xe0000898, 0x10da: 0x404f3420, 0x10db: 0x404f3620, + 0x10dc: 0x404ee420, 0x10dd: 0x404f0820, 0x10de: 0x4007a820, 0x10df: 0x4007aa20, + 0x10e0: 0x00379888, 0x10e1: 0x00379c88, 0x10e2: 0x0037a088, 0x10e3: 0x0037a488, + 0x10e4: 0x0037a888, 0x10e5: 0x0037ac88, 0x10e6: 0x0037b088, 0x10e7: 0x0037b888, + 0x10e8: 0x0037bc88, 0x10e9: 0x0037c088, 0x10ea: 0x0037c488, 0x10eb: 0x0037c888, + 0x10ec: 0x0037cc88, 0x10ed: 0x0037d488, 0x10ee: 0x0037d888, 0x10ef: 0x0037dc88, + 0x10f0: 0x0037e088, 0x10f1: 0x0037e488, 0x10f2: 0x0037e888, 0x10f3: 0x0037f088, + 0x10f4: 0x0037f488, 0x10f5: 0x0037f888, 0x10f6: 0x0037fc88, 0x10f7: 0x00380088, + 0x10f8: 0x00380488, 0x10f9: 0x00380888, 0x10fa: 0x00380c88, 0x10fb: 0x00381088, + 0x10fc: 0x00381488, 0x10fd: 0x00381888, 0x10fe: 0x00381c88, 0x10ff: 0x00382488, + // Block 0x44, offset 0x1100 + 0x1100: 0x00382888, 0x1101: 0x0037b488, 0x1102: 0x0037d088, 0x1103: 0x0037ec88, + 0x1104: 0x00382088, 0x1105: 0x00382c88, 0x1107: 0x00383288, + 0x110d: 0x00383c88, + 0x1110: 0x40379620, 0x1111: 0x40379a20, 0x1112: 0x40379e20, 0x1113: 0x4037a220, + 0x1114: 0x4037a620, 0x1115: 0x4037aa20, 0x1116: 0x4037ae20, 0x1117: 0x4037b620, + 0x1118: 0x4037ba20, 0x1119: 0x4037be20, 0x111a: 0x4037c220, 0x111b: 0x4037c620, + 0x111c: 0x4037ca20, 0x111d: 0x4037d220, 0x111e: 0x4037d620, 0x111f: 0x4037da20, + 0x1120: 0x4037de20, 0x1121: 0x4037e220, 0x1122: 0x4037e620, 0x1123: 0x4037ee20, + 0x1124: 0x4037f220, 0x1125: 0x4037f620, 0x1126: 0x4037fa20, 0x1127: 0x4037fe20, + 0x1128: 0x40380220, 0x1129: 0x40380620, 0x112a: 0x40380a20, 0x112b: 0x40380e20, + 0x112c: 0x40381220, 0x112d: 0x40381620, 0x112e: 0x40381a20, 0x112f: 0x40382220, + 0x1130: 0x40382620, 0x1131: 0x4037b220, 0x1132: 0x4037ce20, 0x1133: 0x4037ea20, + 0x1134: 0x40381e20, 0x1135: 0x40382a20, 0x1136: 0x40382e20, 0x1137: 0x40383020, + 0x1138: 0x40383420, 0x1139: 0x40383620, 0x113a: 0x40383820, 0x113b: 0x40036020, + 0x113c: 0x0037ca94, 0x113d: 0x40383a20, 0x113e: 0x40383e20, 0x113f: 0x40384020, + // Block 0x45, offset 0x1140 + 0x1140: 0x4062ac20, 0x1141: 0x4062ae20, 0x1142: 0x4062b020, 0x1143: 0x4062b220, + 0x1144: 0x4062b420, 0x1145: 0x4062b620, 0x1146: 0x4062b820, 0x1147: 0x4062ba20, + 0x1148: 0x4062bc20, 0x1149: 0x4062be20, 0x114a: 0x4062c020, 0x114b: 0x4062c220, + 0x114c: 0x4062c420, 0x114d: 0x4062c620, 0x114e: 0x4062c820, 0x114f: 0x4062ca20, + 0x1150: 0x4062cc20, 0x1151: 0x4062ce20, 0x1152: 0x4062d020, 0x1153: 0x4062d220, + 0x1154: 0x4062d420, 0x1155: 0x4062d620, 0x1156: 0x4062d820, 0x1157: 0x4062da20, + 0x1158: 0x4062dc20, 0x1159: 0x4062de20, 0x115a: 0x4062e020, 0x115b: 0x4062e220, + 0x115c: 0x4062e420, 0x115d: 0x4062e620, 0x115e: 0x4062e820, 0x115f: 0x4062ea20, + 0x1160: 0x4062ec20, 0x1161: 0x4062ee20, 0x1162: 0x4062f020, 0x1163: 0x4062f220, + 0x1164: 0x4062f420, 0x1165: 0x4062f620, 0x1166: 0x4062f820, 0x1167: 0x4062fa20, + 0x1168: 0x4062fc20, 0x1169: 0x4062fe20, 0x116a: 0x40630020, 0x116b: 0x40630220, + 0x116c: 0x40630420, 0x116d: 0x40630620, 0x116e: 0x40630820, 0x116f: 0x40630a20, + 0x1170: 0x40630c20, 0x1171: 0x40630e20, 0x1172: 0x40631020, 0x1173: 0x40631220, + 0x1174: 0x40631420, 0x1175: 0x40631620, 0x1176: 0x40631820, 0x1177: 0x40631a20, + 0x1178: 0x40631c20, 0x1179: 0x40631e20, 0x117a: 0x40632020, 0x117b: 0x40632220, + 0x117c: 0x40632420, 0x117d: 0x40632620, 0x117e: 0x40632820, 0x117f: 0x40632a20, + // Block 0x46, offset 0x1180 + 0x1180: 0x40632c20, 0x1181: 0x40632e20, 0x1182: 0x40633020, 0x1183: 0x40633220, + 0x1184: 0x40633420, 0x1185: 0x40633620, 0x1186: 0x40633820, 0x1187: 0x40633a20, + 0x1188: 0x40633c20, 0x1189: 0x40633e20, 0x118a: 0x40634020, 0x118b: 0x40634220, + 0x118c: 0x40634420, 0x118d: 0x40634620, 0x118e: 0x40634820, 0x118f: 0x40634a20, + 0x1190: 0x40634c20, 0x1191: 0x40634e20, 0x1192: 0x40635020, 0x1193: 0x40635220, + 0x1194: 0x40635420, 0x1195: 0x40635620, 0x1196: 0x40635820, 0x1197: 0x40635a20, + 0x1198: 0x40635c20, 0x1199: 0x40635e20, 0x119a: 0x40636020, 0x119b: 0x40636220, + 0x119c: 0x40636420, 0x119d: 0x40636620, 0x119e: 0x40636820, 0x119f: 0x4063a420, + 0x11a0: 0x4063a620, 0x11a1: 0x4063a820, 0x11a2: 0x4063aa20, 0x11a3: 0x4063ac20, + 0x11a4: 0x4063ae20, 0x11a5: 0x4063b020, 0x11a6: 0x4063b220, 0x11a7: 0x4063b420, + 0x11a8: 0x4063b620, 0x11a9: 0x4063b820, 0x11aa: 0x4063ba20, 0x11ab: 0x4063bc20, + 0x11ac: 0x4063be20, 0x11ad: 0x4063c020, 0x11ae: 0x4063c220, 0x11af: 0x4063c420, + 0x11b0: 0x4063c620, 0x11b1: 0x4063c820, 0x11b2: 0x4063ca20, 0x11b3: 0x4063cc20, + 0x11b4: 0x4063ce20, 0x11b5: 0x4063d020, 0x11b6: 0x4063d220, 0x11b7: 0x4063d420, + 0x11b8: 0x4063d620, 0x11b9: 0x4063d820, 0x11ba: 0x4063da20, 0x11bb: 0x4063dc20, + 0x11bc: 0x4063de20, 0x11bd: 0x4063e020, 0x11be: 0x4063e220, 0x11bf: 0x4063e420, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x4063e620, 0x11c1: 0x4063e820, 0x11c2: 0x4063ea20, 0x11c3: 0x4063ec20, + 0x11c4: 0x4063ee20, 0x11c5: 0x4063f020, 0x11c6: 0x4063f220, 0x11c7: 0x4063f420, + 0x11c8: 0x4063f620, 0x11c9: 0x4063f820, 0x11ca: 0x4063fa20, 0x11cb: 0x4063fc20, + 0x11cc: 0x4063fe20, 0x11cd: 0x40640020, 0x11ce: 0x40640220, 0x11cf: 0x40640420, + 0x11d0: 0x40640620, 0x11d1: 0x40640820, 0x11d2: 0x40640a20, 0x11d3: 0x40640c20, + 0x11d4: 0x40640e20, 0x11d5: 0x40641020, 0x11d6: 0x40641220, 0x11d7: 0x40641420, + 0x11d8: 0x40641620, 0x11d9: 0x40641820, 0x11da: 0x40641a20, 0x11db: 0x40641c20, + 0x11dc: 0x40641e20, 0x11dd: 0x40642020, 0x11de: 0x40642220, 0x11df: 0x40642420, + 0x11e0: 0x40642620, 0x11e1: 0x40642820, 0x11e2: 0x40642a20, 0x11e3: 0x40642c20, + 0x11e4: 0x40642e20, 0x11e5: 0x40643020, 0x11e6: 0x40643220, 0x11e7: 0x40643420, + 0x11e8: 0x40646420, 0x11e9: 0x40646620, 0x11ea: 0x40646820, 0x11eb: 0x40646a20, + 0x11ec: 0x40646c20, 0x11ed: 0x40646e20, 0x11ee: 0x40647020, 0x11ef: 0x40647220, + 0x11f0: 0x40647420, 0x11f1: 0x40647620, 0x11f2: 0x40647820, 0x11f3: 0x40647a20, + 0x11f4: 0x40647c20, 0x11f5: 0x40647e20, 0x11f6: 0x40648020, 0x11f7: 0x40648220, + 0x11f8: 0x40648420, 0x11f9: 0x40648620, 0x11fa: 0x40648820, 0x11fb: 0x40648a20, + 0x11fc: 0x40648c20, 0x11fd: 0x40648e20, 0x11fe: 0x40649020, 0x11ff: 0x40649220, + // Block 0x48, offset 0x1200 + 0x1200: 0x40649420, 0x1201: 0x40649620, 0x1202: 0x40649820, 0x1203: 0x40649a20, + 0x1204: 0x40649c20, 0x1205: 0x40649e20, 0x1206: 0x4064a020, 0x1207: 0x4064a220, + 0x1208: 0x4064a420, 0x1209: 0x4064a620, 0x120a: 0x4064a820, 0x120b: 0x4064aa20, + 0x120c: 0x4064ac20, 0x120d: 0x4064ae20, 0x120e: 0x4064b020, 0x120f: 0x4064b220, + 0x1210: 0x4064b420, 0x1211: 0x4064b620, 0x1212: 0x4064b820, 0x1213: 0x4064ba20, + 0x1214: 0x4064bc20, 0x1215: 0x4064be20, 0x1216: 0x4064c020, 0x1217: 0x4064c220, + 0x1218: 0x4064c420, 0x1219: 0x4064c620, 0x121a: 0x4064c820, 0x121b: 0x4064ca20, + 0x121c: 0x4064cc20, 0x121d: 0x4064ce20, 0x121e: 0x4064d020, 0x121f: 0x4064d220, + 0x1220: 0x4064d420, 0x1221: 0x4064d620, 0x1222: 0x4064d820, 0x1223: 0x4064da20, + 0x1224: 0x4064dc20, 0x1225: 0x4064de20, 0x1226: 0x4064e020, 0x1227: 0x4064e220, + 0x1228: 0x4064e420, 0x1229: 0x4064e620, 0x122a: 0x4064e820, 0x122b: 0x4064ea20, + 0x122c: 0x4064ec20, 0x122d: 0x4064ee20, 0x122e: 0x4064f020, 0x122f: 0x4064f220, + 0x1230: 0x4064f420, 0x1231: 0x4064f620, 0x1232: 0x4064f820, 0x1233: 0x4064fa20, + 0x1234: 0x4064fc20, 0x1235: 0x4064fe20, 0x1236: 0x40650020, 0x1237: 0x40650220, + 0x1238: 0x40650420, 0x1239: 0x40650620, 0x123a: 0x40650820, 0x123b: 0x40650a20, + 0x123c: 0x40650c20, 0x123d: 0x40650e20, 0x123e: 0x40651020, 0x123f: 0x40651220, + // Block 0x49, offset 0x1240 + 0x1240: 0x403c2e20, 0x1241: 0x403c3020, 0x1242: 0x403c3220, 0x1243: 0x403c3420, + 0x1244: 0x403c3620, 0x1245: 0x403c3820, 0x1246: 0x403c3a20, 0x1247: 0x403c3c20, + 0x1248: 0x403c3e20, 0x1249: 0x403c4020, 0x124a: 0x403c4220, 0x124b: 0x403c4420, + 0x124c: 0x403c4620, 0x124d: 0x403c4820, 0x124e: 0x403c4a20, 0x124f: 0x403c4c20, + 0x1250: 0x403c5020, 0x1251: 0x403c5220, 0x1252: 0x403c5420, 0x1253: 0x403c5620, + 0x1254: 0x403c5820, 0x1255: 0x403c5a20, 0x1256: 0x403c5c20, 0x1257: 0x403c5e20, + 0x1258: 0x403c6020, 0x1259: 0x403c6220, 0x125a: 0x403c6420, 0x125b: 0x403c6620, + 0x125c: 0x403c6820, 0x125d: 0x403c6a20, 0x125e: 0x403c6c20, 0x125f: 0x403c6e20, + 0x1260: 0x403c7a20, 0x1261: 0x403c7c20, 0x1262: 0x403c7e20, 0x1263: 0x403c8020, + 0x1264: 0x403c8220, 0x1265: 0x403c8420, 0x1266: 0x403c8620, 0x1267: 0x403c8820, + 0x1268: 0x403c8a20, 0x1269: 0x403c8c20, 0x126a: 0x403c8e20, 0x126b: 0x403c9020, + 0x126c: 0x403c9220, 0x126d: 0x403c9420, 0x126e: 0x403c9620, 0x126f: 0x403c9820, + 0x1270: 0x403c9c20, 0x1271: 0x403c9e20, 0x1272: 0x403ca020, 0x1273: 0x403ca220, + 0x1274: 0x403ca420, 0x1275: 0x403ca620, 0x1276: 0x403ca820, 0x1277: 0x403caa20, + 0x1278: 0x403cba20, 0x1279: 0x403cbc20, 0x127a: 0x403cbe20, 0x127b: 0x403cc020, + 0x127c: 0x403cc220, 0x127d: 0x403cc420, 0x127e: 0x403cc620, 0x127f: 0x403cc820, + // Block 0x4a, offset 0x1280 + 0x1280: 0x403ccc20, 0x1281: 0x403cce20, 0x1282: 0x403cd020, 0x1283: 0x403cd220, + 0x1284: 0x403cd420, 0x1285: 0x403cd620, 0x1286: 0x403cd820, 0x1287: 0x403cda20, + 0x1288: 0x403cdc20, 0x128a: 0x403cde20, 0x128b: 0x403ce020, + 0x128c: 0x403ce220, 0x128d: 0x403ce420, + 0x1290: 0x403ce620, 0x1291: 0x403ce820, 0x1292: 0x403cea20, 0x1293: 0x403cec20, + 0x1294: 0x403cee20, 0x1295: 0x403cf020, 0x1296: 0x403cf220, + 0x1298: 0x403cf420, 0x129a: 0x403cf620, 0x129b: 0x403cf820, + 0x129c: 0x403cfa20, 0x129d: 0x403cfc20, + 0x12a0: 0x403cfe20, 0x12a1: 0x403d0020, 0x12a2: 0x403d0220, 0x12a3: 0x403d0420, + 0x12a4: 0x403d0620, 0x12a5: 0x403d0820, 0x12a6: 0x403d0a20, 0x12a7: 0x403d0c20, + 0x12a8: 0x403d1820, 0x12a9: 0x403d1a20, 0x12aa: 0x403d1c20, 0x12ab: 0x403d1e20, + 0x12ac: 0x403d2020, 0x12ad: 0x403d2220, 0x12ae: 0x403d2420, 0x12af: 0x403d2620, + 0x12b0: 0x403d2820, 0x12b1: 0x403d2a20, 0x12b2: 0x403d2c20, 0x12b3: 0x403d2e20, + 0x12b4: 0x403d3020, 0x12b5: 0x403d3220, 0x12b6: 0x403d3420, 0x12b7: 0x403d3620, + 0x12b8: 0x403d3a20, 0x12b9: 0x403d3c20, 0x12ba: 0x403d3e20, 0x12bb: 0x403d4020, + 0x12bc: 0x403d4220, 0x12bd: 0x403d4420, 0x12be: 0x403d4620, 0x12bf: 0x403d4820, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x403d4c20, 0x12c1: 0x403d4e20, 0x12c2: 0x403d5020, 0x12c3: 0x403d5220, + 0x12c4: 0x403d5420, 0x12c5: 0x403d5620, 0x12c6: 0x403d5820, 0x12c7: 0x403d5a20, + 0x12c8: 0x403d5c20, 0x12ca: 0x403d5e20, 0x12cb: 0x403d6020, + 0x12cc: 0x403d6220, 0x12cd: 0x403d6420, + 0x12d0: 0x403d6620, 0x12d1: 0x403d6820, 0x12d2: 0x403d6a20, 0x12d3: 0x403d6c20, + 0x12d4: 0x403d6e20, 0x12d5: 0x403d7020, 0x12d6: 0x403d7220, 0x12d7: 0x403d7420, + 0x12d8: 0x403d7820, 0x12d9: 0x403d7a20, 0x12da: 0x403d7c20, 0x12db: 0x403d7e20, + 0x12dc: 0x403d8020, 0x12dd: 0x403d8220, 0x12de: 0x403d8420, 0x12df: 0x403d8620, + 0x12e0: 0x403d8a20, 0x12e1: 0x403d8c20, 0x12e2: 0x403d8e20, 0x12e3: 0x403d9020, + 0x12e4: 0x403d9220, 0x12e5: 0x403d9420, 0x12e6: 0x403d9620, 0x12e7: 0x403d9820, + 0x12e8: 0x403d9c20, 0x12e9: 0x403d9e20, 0x12ea: 0x403da020, 0x12eb: 0x403da220, + 0x12ec: 0x403da420, 0x12ed: 0x403da620, 0x12ee: 0x403da820, 0x12ef: 0x403daa20, + 0x12f0: 0x403dac20, 0x12f2: 0x403dae20, 0x12f3: 0x403db020, + 0x12f4: 0x403db220, 0x12f5: 0x403db420, + 0x12f8: 0x403db620, 0x12f9: 0x403db820, 0x12fa: 0x403dba20, 0x12fb: 0x403dbc20, + 0x12fc: 0x403dbe20, 0x12fd: 0x403dc020, 0x12fe: 0x403dc220, + // Block 0x4c, offset 0x1300 + 0x1300: 0x403dc420, 0x1302: 0x403dc620, 0x1303: 0x403dc820, + 0x1304: 0x403dca20, 0x1305: 0x403dcc20, + 0x1308: 0x403dce20, 0x1309: 0x403dd020, 0x130a: 0x403dd220, 0x130b: 0x403dd420, + 0x130c: 0x403dd620, 0x130d: 0x403dd820, 0x130e: 0x403dda20, 0x130f: 0x403ddc20, + 0x1310: 0x403dde20, 0x1311: 0x403de020, 0x1312: 0x403de220, 0x1313: 0x403de420, + 0x1314: 0x403de620, 0x1315: 0x403de820, 0x1316: 0x403dea20, + 0x1318: 0x403dec20, 0x1319: 0x403dee20, 0x131a: 0x403df020, 0x131b: 0x403df220, + 0x131c: 0x403df420, 0x131d: 0x403df620, 0x131e: 0x403df820, 0x131f: 0x403dfa20, + 0x1320: 0x403e0a20, 0x1321: 0x403e0c20, 0x1322: 0x403e0e20, 0x1323: 0x403e1020, + 0x1324: 0x403e1220, 0x1325: 0x403e1420, 0x1326: 0x403e1620, 0x1327: 0x403e1820, + 0x1328: 0x403e1a20, 0x1329: 0x403e1c20, 0x132a: 0x403e1e20, 0x132b: 0x403e2020, + 0x132c: 0x403e2220, 0x132d: 0x403e2420, 0x132e: 0x403e2620, 0x132f: 0x403e2820, + 0x1330: 0x403e2a20, 0x1331: 0x403e2c20, 0x1332: 0x403e2e20, 0x1333: 0x403e3020, + 0x1334: 0x403e3220, 0x1335: 0x403e3420, 0x1336: 0x403e3620, 0x1337: 0x403e3820, + 0x1338: 0x403e4820, 0x1339: 0x403e4a20, 0x133a: 0x403e4c20, 0x133b: 0x403e4e20, + 0x133c: 0x403e5020, 0x133d: 0x403e5220, 0x133e: 0x403e5420, 0x133f: 0x403e5620, + // Block 0x4d, offset 0x1340 + 0x1340: 0x403e5a20, 0x1341: 0x403e5c20, 0x1342: 0x403e5e20, 0x1343: 0x403e6020, + 0x1344: 0x403e6220, 0x1345: 0x403e6420, 0x1346: 0x403e6620, 0x1347: 0x403e6820, + 0x1348: 0x403e6c20, 0x1349: 0x403e6e20, 0x134a: 0x403e7020, 0x134b: 0x403e7220, + 0x134c: 0x403e7420, 0x134d: 0x403e7620, 0x134e: 0x403e7820, 0x134f: 0x403e7a20, + 0x1350: 0x403e7c20, 0x1352: 0x403e7e20, 0x1353: 0x403e8020, + 0x1354: 0x403e8220, 0x1355: 0x403e8420, + 0x1358: 0x403e8620, 0x1359: 0x403e8820, 0x135a: 0x403e8a20, 0x135b: 0x403e8c20, + 0x135c: 0x403e8e20, 0x135d: 0x403e9020, 0x135e: 0x403e9220, 0x135f: 0x403e9420, + 0x1360: 0x403e9e20, 0x1361: 0x403ea020, 0x1362: 0x403ea220, 0x1363: 0x403ea420, + 0x1364: 0x403ea620, 0x1365: 0x403ea820, 0x1366: 0x403eaa20, 0x1367: 0x403eac20, + 0x1368: 0x403eb020, 0x1369: 0x403eb220, 0x136a: 0x403eb420, 0x136b: 0x403eb620, + 0x136c: 0x403eb820, 0x136d: 0x403eba20, 0x136e: 0x403ebc20, 0x136f: 0x403ebe20, + 0x1370: 0x403ed020, 0x1371: 0x403ed220, 0x1372: 0x403ed420, 0x1373: 0x403ed620, + 0x1374: 0x403ed820, 0x1375: 0x403eda20, 0x1376: 0x403edc20, 0x1377: 0x403ede20, + 0x1378: 0x403ee220, 0x1379: 0x403ee420, 0x137a: 0x403ee620, 0x137b: 0x403ee820, + 0x137c: 0x403eea20, 0x137d: 0x403eec20, 0x137e: 0x403eee20, 0x137f: 0x403ef020, + // Block 0x4e, offset 0x1380 + 0x1380: 0x403f0020, 0x1381: 0x403f0220, 0x1382: 0x403f0420, 0x1383: 0x403f0620, + 0x1384: 0x403f0820, 0x1385: 0x403f0a20, 0x1386: 0x403f0c20, 0x1387: 0x403f0e20, + 0x1388: 0x403f1020, 0x1389: 0x403f1220, 0x138a: 0x403f1420, 0x138b: 0x403f1620, + 0x138c: 0x403f1820, 0x138d: 0x403f1a20, 0x138e: 0x403f1c20, 0x138f: 0x403f1e20, + 0x1390: 0x403f2820, 0x1391: 0x403f2a20, 0x1392: 0x403f2c20, 0x1393: 0x403f2e20, + 0x1394: 0x403f3020, 0x1395: 0x403f3220, 0x1396: 0x403f3420, 0x1397: 0x403f3620, + 0x1398: 0x403f4220, 0x1399: 0x403f4420, 0x139a: 0x403f4620, + 0x139d: 0xae60ee02, 0x139e: 0xae60ed02, 0x139f: 0xae60ec02, + 0x13a0: 0x40036220, 0x13a1: 0x40029c20, 0x13a2: 0x4002ee20, 0x13a3: 0x40029e20, + 0x13a4: 0x4002a020, 0x13a5: 0x4002a220, 0x13a6: 0x4002a420, 0x13a7: 0x4002d020, + 0x13a8: 0x40036420, 0x13a9: 0xe00001f2, 0x13aa: 0xe000030d, 0x13ab: 0xe00003e7, + 0x13ac: 0xe00004c2, 0x13ad: 0xe000058c, 0x13ae: 0xe0000657, 0x13af: 0xe00006ff, + 0x13b0: 0xe00007ab, 0x13b1: 0xe0000850, 0x13b2: 0x40286620, 0x13b3: 0x40286820, + 0x13b4: 0x40286a20, 0x13b5: 0x40286c20, 0x13b6: 0x40286e20, 0x13b7: 0x40287020, + 0x13b8: 0x40287220, 0x13b9: 0x40287420, 0x13ba: 0x40287620, 0x13bb: 0x40287820, + 0x13bc: 0x40287a20, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x403c7020, 0x13c1: 0x403c7220, 0x13c2: 0x403c7420, 0x13c3: 0x403c7620, + 0x13c4: 0x403d0e20, 0x13c5: 0x403d1020, 0x13c6: 0x403d1220, 0x13c7: 0x403d1420, + 0x13c8: 0x403f2020, 0x13c9: 0x403f2220, 0x13ca: 0x403f2420, 0x13cb: 0x403f2620, + 0x13cc: 0x403f3820, 0x13cd: 0x403f3a20, 0x13ce: 0x403f3c20, 0x13cf: 0x403f3e20, + 0x13d0: 0x4006a620, 0x13d1: 0x4006a820, 0x13d2: 0x4006aa20, 0x13d3: 0x4006ac20, + 0x13d4: 0x4006ae20, 0x13d5: 0x4006b020, 0x13d6: 0x4006b220, 0x13d7: 0x4006b420, + 0x13d8: 0x4006b620, 0x13d9: 0x4006b820, + 0x13e0: 0x40547620, 0x13e1: 0x40547820, 0x13e2: 0x40547a20, 0x13e3: 0x40547c20, + 0x13e4: 0x40547e20, 0x13e5: 0x40548020, 0x13e6: 0x40548220, 0x13e7: 0x40548420, + 0x13e8: 0x40548620, 0x13e9: 0x40548820, 0x13ea: 0x40548a20, 0x13eb: 0x40548c20, + 0x13ec: 0x40548e20, 0x13ed: 0x40549020, 0x13ee: 0x40549220, 0x13ef: 0x40549420, + 0x13f0: 0x40549620, 0x13f1: 0x40549820, 0x13f2: 0x40549a20, 0x13f3: 0x40549c20, + 0x13f4: 0x40549e20, 0x13f5: 0x4054a020, 0x13f6: 0x4054a220, 0x13f7: 0x4054a420, + 0x13f8: 0x4054a620, 0x13f9: 0x4054a820, 0x13fa: 0x4054aa20, 0x13fb: 0x4054ac20, + 0x13fc: 0x4054ae20, 0x13fd: 0x4054b020, 0x13fe: 0x4054b220, 0x13ff: 0x4054b420, + // Block 0x50, offset 0x1400 + 0x1400: 0x4054b620, 0x1401: 0x4054b820, 0x1402: 0x4054ba20, 0x1403: 0x4054bc20, + 0x1404: 0x4054be20, 0x1405: 0x4054c020, 0x1406: 0x4054c220, 0x1407: 0x4054c420, + 0x1408: 0x4054c620, 0x1409: 0x4054c820, 0x140a: 0x4054ca20, 0x140b: 0x4054cc20, + 0x140c: 0x4054ce20, 0x140d: 0x4054d020, 0x140e: 0x4054d220, 0x140f: 0x4054d420, + 0x1410: 0x4054d620, 0x1411: 0x4054d820, 0x1412: 0x4054da20, 0x1413: 0x4054dc20, + 0x1414: 0x4054de20, 0x1415: 0x4054e020, 0x1416: 0x4054e220, 0x1417: 0x4054e420, + 0x1418: 0x4054e620, 0x1419: 0x4054e820, 0x141a: 0x4054ea20, 0x141b: 0x4054ec20, + 0x141c: 0x4054ee20, 0x141d: 0x4054f020, 0x141e: 0x4054f220, 0x141f: 0x4054f420, + 0x1420: 0x4054f620, 0x1421: 0x4054f820, 0x1422: 0x4054fa20, 0x1423: 0x4054fc20, + 0x1424: 0x4054fe20, 0x1425: 0x40550020, 0x1426: 0x40550220, 0x1427: 0x40550420, + 0x1428: 0x40550620, 0x1429: 0x40550820, 0x142a: 0x40550a20, 0x142b: 0x40550c20, + 0x142c: 0x40550e20, 0x142d: 0x40551020, 0x142e: 0x40551220, 0x142f: 0x40551420, + 0x1430: 0x40551620, 0x1431: 0x40551820, 0x1432: 0x40551a20, 0x1433: 0x40551c20, + 0x1434: 0x40551e20, + // Block 0x51, offset 0x1440 + 0x1440: 0x40021e20, 0x1441: 0x40552020, 0x1442: 0x40552220, 0x1443: 0x40552420, + 0x1444: 0x40552620, 0x1445: 0x40552820, 0x1446: 0x40552a20, 0x1447: 0x40552c20, + 0x1448: 0x40552e20, 0x1449: 0x40553020, 0x144a: 0x40553220, 0x144b: 0x40553420, + 0x144c: 0x40553620, 0x144d: 0x40553820, 0x144e: 0x40553a20, 0x144f: 0x40553c20, + 0x1450: 0x40553e20, 0x1451: 0x40554020, 0x1452: 0x40554220, 0x1453: 0x40554420, + 0x1454: 0x40554620, 0x1455: 0x40554820, 0x1456: 0x40554a20, 0x1457: 0x40554c20, + 0x1458: 0x40554e20, 0x1459: 0x40555020, 0x145a: 0x40555220, 0x145b: 0x40555420, + 0x145c: 0x40555620, 0x145d: 0x40555820, 0x145e: 0x40555a20, 0x145f: 0x40555c20, + 0x1460: 0x40555e20, 0x1461: 0x40556020, 0x1462: 0x40556220, 0x1463: 0x40556420, + 0x1464: 0x40556620, 0x1465: 0x40556820, 0x1466: 0x40556a20, 0x1467: 0x40556c20, + 0x1468: 0x40556e20, 0x1469: 0x40557020, 0x146a: 0x40557220, 0x146b: 0x40557420, + 0x146c: 0x40557620, 0x146d: 0x40557820, 0x146e: 0x40557a20, 0x146f: 0x40557c20, + 0x1470: 0x40557e20, 0x1471: 0x40558020, 0x1472: 0x40558220, 0x1473: 0x40558420, + 0x1474: 0x40558620, 0x1475: 0x40558820, 0x1476: 0x40558a20, 0x1477: 0x40558c20, + 0x1478: 0x40558e20, 0x1479: 0x40559020, 0x147a: 0x40559220, 0x147b: 0x40559420, + 0x147c: 0x40559620, 0x147d: 0x40559820, 0x147e: 0x40559a20, 0x147f: 0x40559c20, + // Block 0x52, offset 0x1480 + 0x1480: 0x40559e20, 0x1481: 0x4055a020, 0x1482: 0x4055a220, 0x1483: 0x4055a420, + 0x1484: 0x4055a620, 0x1485: 0x4055a820, 0x1486: 0x4055aa20, 0x1487: 0x4055ac20, + 0x1488: 0x4055ae20, 0x1489: 0x4055b020, 0x148a: 0x4055b220, 0x148b: 0x4055b420, + 0x148c: 0x4055b620, 0x148d: 0x4055b820, 0x148e: 0x4055ba20, 0x148f: 0x4055bc20, + 0x1490: 0x4055be20, 0x1491: 0x4055c020, 0x1492: 0x4055c220, 0x1493: 0x4055c420, + 0x1494: 0x4055c620, 0x1495: 0x4055c820, 0x1496: 0x4055ca20, 0x1497: 0x4055cc20, + 0x1498: 0x4055ce20, 0x1499: 0x4055d020, 0x149a: 0x4055d220, 0x149b: 0x4055d420, + 0x149c: 0x4055d620, 0x149d: 0x4055d820, 0x149e: 0x4055da20, 0x149f: 0x4055dc20, + 0x14a0: 0x4055de20, 0x14a1: 0x4055e020, 0x14a2: 0x4055e220, 0x14a3: 0x4055e420, + 0x14a4: 0x4055e620, 0x14a5: 0x4055e820, 0x14a6: 0x4055ea20, 0x14a7: 0x4055ec20, + 0x14a8: 0x4055ee20, 0x14a9: 0x4055f020, 0x14aa: 0x4055f220, 0x14ab: 0x4055f420, + 0x14ac: 0x4055f620, 0x14ad: 0x4055f820, 0x14ae: 0x4055fa20, 0x14af: 0x4055fc20, + 0x14b0: 0x4055fe20, 0x14b1: 0x40560020, 0x14b2: 0x40560220, 0x14b3: 0x40560420, + 0x14b4: 0x40560620, 0x14b5: 0x40560820, 0x14b6: 0x40560a20, 0x14b7: 0x40560c20, + 0x14b8: 0x40560e20, 0x14b9: 0x40561020, 0x14ba: 0x40561220, 0x14bb: 0x40561420, + 0x14bc: 0x40561620, 0x14bd: 0x40561820, 0x14be: 0x40561a20, 0x14bf: 0x40561c20, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x40561e20, 0x14c1: 0x40562020, 0x14c2: 0x40562220, 0x14c3: 0x40562420, + 0x14c4: 0x40562620, 0x14c5: 0x40562820, 0x14c6: 0x40562a20, 0x14c7: 0x40562c20, + 0x14c8: 0x40562e20, 0x14c9: 0x40563020, 0x14ca: 0x40563220, 0x14cb: 0x40563420, + 0x14cc: 0x40563620, 0x14cd: 0x40563820, 0x14ce: 0x40563a20, 0x14cf: 0x40563c20, + 0x14d0: 0x40563e20, 0x14d1: 0x40564020, 0x14d2: 0x40564220, 0x14d3: 0x40564420, + 0x14d4: 0x40564620, 0x14d5: 0x40564820, 0x14d6: 0x40564a20, 0x14d7: 0x40564c20, + 0x14d8: 0x40564e20, 0x14d9: 0x40565020, 0x14da: 0x40565220, 0x14db: 0x40565420, + 0x14dc: 0x40565620, 0x14dd: 0x40565820, 0x14de: 0x40565a20, 0x14df: 0x40565c20, + 0x14e0: 0x40565e20, 0x14e1: 0x40566020, 0x14e2: 0x40566220, 0x14e3: 0x40566420, + 0x14e4: 0x40566620, 0x14e5: 0x40566820, 0x14e6: 0x40566a20, 0x14e7: 0x40566c20, + 0x14e8: 0x40566e20, 0x14e9: 0x40567020, 0x14ea: 0x40567220, 0x14eb: 0x40567420, + 0x14ec: 0x40567620, 0x14ed: 0x40567820, 0x14ee: 0x40567a20, 0x14ef: 0x40567c20, + 0x14f0: 0x40567e20, 0x14f1: 0x40568020, 0x14f2: 0x40568220, 0x14f3: 0x40568420, + 0x14f4: 0x40568620, 0x14f5: 0x40568820, 0x14f6: 0x40568a20, 0x14f7: 0x40568c20, + 0x14f8: 0x40568e20, 0x14f9: 0x40569020, 0x14fa: 0x40569220, 0x14fb: 0x40569420, + 0x14fc: 0x40569620, 0x14fd: 0x40569820, 0x14fe: 0x40569a20, 0x14ff: 0x40569c20, + // Block 0x54, offset 0x1500 + 0x1500: 0x40569e20, 0x1501: 0x4056a020, 0x1502: 0x4056a220, 0x1503: 0x4056a420, + 0x1504: 0x4056a620, 0x1505: 0x4056a820, 0x1506: 0x4056aa20, 0x1507: 0x4056ac20, + 0x1508: 0x4056ae20, 0x1509: 0x4056b020, 0x150a: 0x4056b220, 0x150b: 0x4056b420, + 0x150c: 0x4056b620, 0x150d: 0x4056b820, 0x150e: 0x4056ba20, 0x150f: 0x4056bc20, + 0x1510: 0x4056be20, 0x1511: 0x4056c020, 0x1512: 0x4056c220, 0x1513: 0x4056c420, + 0x1514: 0x4056c620, 0x1515: 0x4056c820, 0x1516: 0x4056ca20, 0x1517: 0x4056cc20, + 0x1518: 0x4056ce20, 0x1519: 0x4056d020, 0x151a: 0x4056d220, 0x151b: 0x4056d420, + 0x151c: 0x4056d620, 0x151d: 0x4056d820, 0x151e: 0x4056da20, 0x151f: 0x4056dc20, + 0x1520: 0x4056de20, 0x1521: 0x4056e020, 0x1522: 0x4056e220, 0x1523: 0x4056e420, + 0x1524: 0x4056e620, 0x1525: 0x4056e820, 0x1526: 0x4056ea20, 0x1527: 0x4056ec20, + 0x1528: 0x4056ee20, 0x1529: 0x4056f020, 0x152a: 0x4056f220, 0x152b: 0x4056f420, + 0x152c: 0x4056f620, 0x152d: 0x4056f820, 0x152e: 0x4056fa20, 0x152f: 0x4056fc20, + 0x1530: 0x4056fe20, 0x1531: 0x40570020, 0x1532: 0x40570220, 0x1533: 0x40570420, + 0x1534: 0x40570620, 0x1535: 0x40570820, 0x1536: 0x40570a20, 0x1537: 0x40570c20, + 0x1538: 0x40570e20, 0x1539: 0x40571020, 0x153a: 0x40571220, 0x153b: 0x40571420, + 0x153c: 0x40571620, 0x153d: 0x40571820, 0x153e: 0x40571a20, 0x153f: 0x40571c20, + // Block 0x55, offset 0x1540 + 0x1540: 0x40571e20, 0x1541: 0x40572020, 0x1542: 0x40572220, 0x1543: 0x40572420, + 0x1544: 0x40572620, 0x1545: 0x40572820, 0x1546: 0x40572a20, 0x1547: 0x40572c20, + 0x1548: 0x40572e20, 0x1549: 0x40573020, 0x154a: 0x40573220, 0x154b: 0x40573420, + 0x154c: 0x40573620, 0x154d: 0x40573820, 0x154e: 0x40573a20, 0x154f: 0x40573c20, + 0x1550: 0x40573e20, 0x1551: 0x40574020, 0x1552: 0x40574220, 0x1553: 0x40574420, + 0x1554: 0x40574620, 0x1555: 0x40574820, 0x1556: 0x40574a20, 0x1557: 0x40574c20, + 0x1558: 0x40574e20, 0x1559: 0x40575020, 0x155a: 0x40575220, 0x155b: 0x40575420, + 0x155c: 0x40575620, 0x155d: 0x40575820, 0x155e: 0x40575a20, 0x155f: 0x40575c20, + 0x1560: 0x40575e20, 0x1561: 0x40576020, 0x1562: 0x40576220, 0x1563: 0x40576420, + 0x1564: 0x40576620, 0x1565: 0x40576820, 0x1566: 0x40576a20, 0x1567: 0x40576c20, + 0x1568: 0x40576e20, 0x1569: 0x40577020, 0x156a: 0x40577220, 0x156b: 0x40577420, + 0x156c: 0x40577620, 0x156d: 0x40577820, 0x156e: 0x40577a20, 0x156f: 0x40577c20, + 0x1570: 0x40577e20, 0x1571: 0x40578020, 0x1572: 0x40578220, 0x1573: 0x40578420, + 0x1574: 0x40578620, 0x1575: 0x40578820, 0x1576: 0x40578a20, 0x1577: 0x40578c20, + 0x1578: 0x40578e20, 0x1579: 0x40579020, 0x157a: 0x40579220, 0x157b: 0x40579420, + 0x157c: 0x40579620, 0x157d: 0x40579820, 0x157e: 0x40579a20, 0x157f: 0x40579c20, + // Block 0x56, offset 0x1580 + 0x1580: 0x40579e20, 0x1581: 0x4057a020, 0x1582: 0x4057a220, 0x1583: 0x4057a420, + 0x1584: 0x4057a620, 0x1585: 0x4057a820, 0x1586: 0x4057aa20, 0x1587: 0x4057ac20, + 0x1588: 0x4057ae20, 0x1589: 0x4057b020, 0x158a: 0x4057b220, 0x158b: 0x4057b420, + 0x158c: 0x4057b620, 0x158d: 0x4057b820, 0x158e: 0x4057ba20, 0x158f: 0x4057bc20, + 0x1590: 0x4057be20, 0x1591: 0x4057c020, 0x1592: 0x4057c220, 0x1593: 0x4057c420, + 0x1594: 0x4057c620, 0x1595: 0x4057c820, 0x1596: 0x4057ca20, 0x1597: 0x4057cc20, + 0x1598: 0x4057ce20, 0x1599: 0x4057d020, 0x159a: 0x4057d220, 0x159b: 0x4057d420, + 0x159c: 0x4057d620, 0x159d: 0x4057d820, 0x159e: 0x4057da20, 0x159f: 0x4057dc20, + 0x15a0: 0x4057de20, 0x15a1: 0x4057e020, 0x15a2: 0x4057e220, 0x15a3: 0x4057e420, + 0x15a4: 0x4057e620, 0x15a5: 0x4057e820, 0x15a6: 0x4057ea20, 0x15a7: 0x4057ec20, + 0x15a8: 0x4057ee20, 0x15a9: 0x4057f020, 0x15aa: 0x4057f220, 0x15ab: 0x4057f420, + 0x15ac: 0x4057f620, 0x15ad: 0x4057f820, 0x15ae: 0x4057fa20, 0x15af: 0x4057fc20, + 0x15b0: 0x4057fe20, 0x15b1: 0x40580020, 0x15b2: 0x40580220, 0x15b3: 0x40580420, + 0x15b4: 0x40580620, 0x15b5: 0x40580820, 0x15b6: 0x40580a20, 0x15b7: 0x40580c20, + 0x15b8: 0x40580e20, 0x15b9: 0x40581020, 0x15ba: 0x40581220, 0x15bb: 0x40581420, + 0x15bc: 0x40587a20, 0x15bd: 0x40581620, 0x15be: 0x40581a20, 0x15bf: 0x40581c20, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x40581e20, 0x15c1: 0x40582020, 0x15c2: 0x40582220, 0x15c3: 0x40582420, + 0x15c4: 0x40582620, 0x15c5: 0x40582820, 0x15c6: 0x40582a20, 0x15c7: 0x40582c20, + 0x15c8: 0x40582e20, 0x15c9: 0x40583020, 0x15ca: 0x40583220, 0x15cb: 0x40583420, + 0x15cc: 0x40583620, 0x15cd: 0x40583820, 0x15ce: 0x40583c20, 0x15cf: 0x40583e20, + 0x15d0: 0x40584020, 0x15d1: 0x40584220, 0x15d2: 0x40584420, 0x15d3: 0x40584620, + 0x15d4: 0x40584820, 0x15d5: 0x40584a20, 0x15d6: 0x40585820, 0x15d7: 0x40585a20, + 0x15d8: 0x40585c20, 0x15d9: 0x40585e20, 0x15da: 0x40586020, 0x15db: 0x40586220, + 0x15dc: 0x40586420, 0x15dd: 0x40586620, 0x15de: 0x40586820, 0x15df: 0x40586a20, + 0x15e0: 0x40586c20, 0x15e1: 0x40586e20, 0x15e2: 0x40587020, 0x15e3: 0x40587220, + 0x15e4: 0x40587420, 0x15e5: 0x40587620, 0x15e6: 0x40587820, 0x15e7: 0x40587c20, + 0x15e8: 0x40587e20, 0x15e9: 0x40588020, 0x15ea: 0x40588220, 0x15eb: 0x40588420, + 0x15ec: 0x40588620, 0x15ed: 0x40588820, 0x15ee: 0x40588a20, 0x15ef: 0x40588c20, + 0x15f0: 0x40588e20, 0x15f1: 0x40589020, 0x15f2: 0x40589220, 0x15f3: 0x40589420, + 0x15f4: 0x40589620, 0x15f5: 0x40589820, 0x15f6: 0x40589a20, 0x15f7: 0x40589c20, + 0x15f8: 0x40589e20, 0x15f9: 0x4058a020, 0x15fa: 0x4058a220, 0x15fb: 0x4058a420, + 0x15fc: 0x4058a620, 0x15fd: 0x4058a820, 0x15fe: 0x4058aa20, 0x15ff: 0x4058ac20, + // Block 0x58, offset 0x1600 + 0x1600: 0x4058ae20, 0x1601: 0x4058b020, 0x1602: 0x4058b220, 0x1603: 0x4058b420, + 0x1604: 0x4058b620, 0x1605: 0x4058b820, 0x1606: 0x4058ba20, 0x1607: 0x4058bc20, + 0x1608: 0x4058be20, 0x1609: 0x4058c020, 0x160a: 0x4058c220, 0x160b: 0x4058c420, + 0x160c: 0x4058c620, 0x160d: 0x4058c820, 0x160e: 0x4058ca20, 0x160f: 0x4058cc20, + 0x1610: 0x4058ce20, 0x1611: 0x4058d020, 0x1612: 0x4058d220, 0x1613: 0x4058d420, + 0x1614: 0x4058d620, 0x1615: 0x4058d820, 0x1616: 0x4058da20, 0x1617: 0x4058dc20, + 0x1618: 0x4058de20, 0x1619: 0x4058e020, 0x161a: 0x4058e220, 0x161b: 0x4058e420, + 0x161c: 0x4058e620, 0x161d: 0x4058e820, 0x161e: 0x4058ea20, 0x161f: 0x4058ec20, + 0x1620: 0x4058ee20, 0x1621: 0x4058f020, 0x1622: 0x4058f220, 0x1623: 0x4058f420, + 0x1624: 0x4058f620, 0x1625: 0x4058f820, 0x1626: 0x4058fa20, 0x1627: 0x4058fc20, + 0x1628: 0x4058fe20, 0x1629: 0x40590020, 0x162a: 0x40590220, 0x162b: 0x40590420, + 0x162c: 0x40590620, 0x162d: 0x40590820, 0x162e: 0x40590a20, 0x162f: 0x40590c20, + 0x1630: 0x40590e20, 0x1631: 0x40591020, 0x1632: 0x40591220, 0x1633: 0x40591420, + 0x1634: 0x40591620, 0x1635: 0x40591820, 0x1636: 0x40591a20, 0x1637: 0x40591c20, + 0x1638: 0x40591e20, 0x1639: 0x40592020, 0x163a: 0x40592220, 0x163b: 0x40592420, + 0x163c: 0x40592620, 0x163d: 0x40592820, 0x163e: 0x40592a20, 0x163f: 0x40592c20, + // Block 0x59, offset 0x1640 + 0x1640: 0x40592e20, 0x1641: 0x40593020, 0x1642: 0x40593220, 0x1643: 0x40593420, + 0x1644: 0x40593620, 0x1645: 0x40593820, 0x1646: 0x40593a20, 0x1647: 0x40593c20, + 0x1648: 0x40593e20, 0x1649: 0x40594020, 0x164a: 0x40594220, 0x164b: 0x40594420, + 0x164c: 0x40594620, 0x164d: 0x40594820, 0x164e: 0x40594a20, 0x164f: 0x40594c20, + 0x1650: 0x40594e20, 0x1651: 0x40595020, 0x1652: 0x40595220, 0x1653: 0x40595420, + 0x1654: 0x40595620, 0x1655: 0x40595820, 0x1656: 0x40595a20, 0x1657: 0x40595c20, + 0x1658: 0x40595e20, 0x1659: 0x40596020, 0x165a: 0x40596220, 0x165b: 0x40596420, + 0x165c: 0x40596620, 0x165d: 0x40596820, 0x165e: 0x40596a20, 0x165f: 0x40596c20, + 0x1660: 0x40596e20, 0x1661: 0x40597020, 0x1662: 0x40597220, 0x1663: 0x40597420, + 0x1664: 0x40597620, 0x1665: 0x40597820, 0x1666: 0x40597a20, 0x1667: 0x40597c20, + 0x1668: 0x40597e20, 0x1669: 0x40598020, 0x166a: 0x40598220, 0x166b: 0x40598420, + 0x166c: 0x40598620, 0x166d: 0x40598820, 0x166e: 0x40598a20, 0x166f: 0x40598c20, + 0x1670: 0x40598e20, 0x1671: 0x40599020, 0x1672: 0x40599220, 0x1673: 0x40599420, + 0x1674: 0x40599620, 0x1675: 0x40599820, 0x1676: 0x40599a20, 0x1677: 0x40599c20, + 0x1678: 0x40599e20, 0x1679: 0x4059a020, 0x167a: 0x4059a220, 0x167b: 0x4059a420, + 0x167c: 0x4059a620, 0x167d: 0x4059a820, 0x167e: 0x4059aa20, 0x167f: 0x4059ac20, + // Block 0x5a, offset 0x1680 + 0x1680: 0x4059ae20, 0x1681: 0x4059b020, 0x1682: 0x4059b220, 0x1683: 0x4059b420, + 0x1684: 0x4059b620, 0x1685: 0x4059b820, 0x1686: 0x4059ba20, 0x1687: 0x4059bc20, + 0x1688: 0x4059be20, 0x1689: 0x4059c020, 0x168a: 0x4059c220, 0x168b: 0x4059c420, + 0x168c: 0x4059c620, 0x168d: 0x4059c820, 0x168e: 0x4059ca20, 0x168f: 0x4059cc20, + 0x1690: 0x4059ce20, 0x1691: 0x4059d020, 0x1692: 0x4059d220, 0x1693: 0x4059d420, + 0x1694: 0x4059d620, 0x1695: 0x4059d820, 0x1696: 0x4059da20, 0x1697: 0x4059dc20, + 0x1698: 0x4059de20, 0x1699: 0x4059e020, 0x169a: 0x4059e220, 0x169b: 0x4059e420, + 0x169c: 0x4059e620, 0x169d: 0x4059e820, 0x169e: 0x4059ea20, 0x169f: 0x4059ec20, + 0x16a0: 0x4059ee20, 0x16a1: 0x4059f020, 0x16a2: 0x4059f220, 0x16a3: 0x4059f420, + 0x16a4: 0x4059f620, 0x16a5: 0x4059f820, 0x16a6: 0x4059fa20, 0x16a7: 0x4059fc20, + 0x16a8: 0x4059fe20, 0x16a9: 0x405a0020, 0x16aa: 0x405a0220, 0x16ab: 0x405a0420, + 0x16ac: 0x405a0620, 0x16ad: 0x4005d420, 0x16ae: 0x4002f420, 0x16af: 0x40581820, + 0x16b0: 0x40583a20, 0x16b1: 0x40584c20, 0x16b2: 0x40584e20, 0x16b3: 0x40585020, + 0x16b4: 0x40585220, 0x16b5: 0x40585420, 0x16b6: 0x40585620, 0x16b7: 0x405a0820, + 0x16b8: 0x405a0a20, 0x16b9: 0x405a0c20, 0x16ba: 0x405a0e20, 0x16bb: 0x405a1020, + 0x16bc: 0x405a1220, 0x16bd: 0x405a1420, 0x16be: 0x405a1620, 0x16bf: 0x405a1820, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x00021284, 0x16c1: 0x405aa620, 0x16c2: 0x405aa820, 0x16c3: 0x405aaa20, + 0x16c4: 0x405aac20, 0x16c5: 0x405aae20, 0x16c6: 0x405ab020, 0x16c7: 0x405ab220, + 0x16c8: 0x405ab420, 0x16c9: 0x405ab620, 0x16ca: 0x405ab820, 0x16cb: 0x405aba20, + 0x16cc: 0x405abc20, 0x16cd: 0x405abe20, 0x16ce: 0x405ac020, 0x16cf: 0x405ac220, + 0x16d0: 0x405ac420, 0x16d1: 0x405ac620, 0x16d2: 0x405ac820, 0x16d3: 0x405aca20, + 0x16d4: 0x405acc20, 0x16d5: 0x405ace20, 0x16d6: 0x405ad020, 0x16d7: 0x405ad220, + 0x16d8: 0x405ad420, 0x16d9: 0x405ad620, 0x16da: 0x405ad820, 0x16db: 0x40040820, + 0x16dc: 0x40040a20, + 0x16e0: 0x405ada20, 0x16e1: 0xe000202d, 0x16e2: 0x405adc20, 0x16e3: 0x405b1420, + 0x16e4: 0xe0002030, 0x16e5: 0xe0002033, 0x16e6: 0x405ade20, 0x16e7: 0xe0002036, + 0x16e8: 0x405ae020, 0x16e9: 0xe000203c, 0x16ea: 0x405b1020, 0x16eb: 0x405b1220, + 0x16ec: 0xe000203f, 0x16ed: 0xe0002042, 0x16ee: 0xe0002045, 0x16ef: 0x405ae220, + 0x16f0: 0x405ae420, 0x16f1: 0x405ae620, 0x16f2: 0x405ae820, 0x16f3: 0xe0002048, + 0x16f4: 0xe000204b, 0x16f5: 0xe000204e, 0x16f6: 0xe0002051, 0x16f7: 0x405aea20, + 0x16f8: 0x405b1a20, 0x16f9: 0x405aec20, 0x16fa: 0x405aee20, 0x16fb: 0xe0002057, + 0x16fc: 0xe000205a, 0x16fd: 0xe000205d, 0x16fe: 0x405af020, 0x16ff: 0xe0002060, + // Block 0x5c, offset 0x1700 + 0x1700: 0xe0002063, 0x1701: 0x405af220, 0x1702: 0xe0002066, 0x1703: 0x405af420, + 0x1704: 0xe0002069, 0x1705: 0x405af620, 0x1706: 0xe000206c, 0x1707: 0x405af820, + 0x1708: 0x405afa20, 0x1709: 0x405afc20, 0x170a: 0x405afe20, 0x170b: 0xe0002075, + 0x170c: 0xe000207b, 0x170d: 0xe000207e, 0x170e: 0xe0002081, 0x170f: 0x405b0020, + 0x1710: 0xe0002084, 0x1711: 0xe0002087, 0x1712: 0x405b0220, 0x1713: 0xe000208a, + 0x1714: 0xe000208d, 0x1715: 0xe0002072, 0x1716: 0x405b0420, 0x1717: 0x405b0620, + 0x1718: 0xe0002090, 0x1719: 0xe0002093, 0x171a: 0x405b0820, 0x171b: 0xe000209b, + 0x171c: 0x405b0a20, 0x171d: 0xe000209e, 0x171e: 0x405b0c20, 0x171f: 0x405b0e20, + 0x1720: 0x405b1620, 0x1721: 0x405b1e20, 0x1722: 0x405b2020, 0x1723: 0x405b1820, + 0x1724: 0x405b1c20, 0x1725: 0x405b2220, 0x1726: 0x405b2420, 0x1727: 0xe00020a1, + 0x1728: 0xe00020a4, 0x1729: 0xe0002054, 0x172a: 0xe0002078, 0x172b: 0x4002b220, + 0x172c: 0x4002b420, 0x172d: 0x4002b620, 0x172e: 0xe000206f, 0x172f: 0xe0002096, + 0x1730: 0xe0002039, + // Block 0x5d, offset 0x1740 + 0x1740: 0x404c7620, 0x1741: 0x404c7820, 0x1742: 0x404c7a20, 0x1743: 0x404c7c20, + 0x1744: 0x404c7e20, 0x1745: 0x404c8020, 0x1746: 0x404c8220, 0x1747: 0x404c8420, + 0x1748: 0x404c8620, 0x1749: 0x404c8820, 0x174a: 0x404c8a20, 0x174b: 0x404c8c20, + 0x174c: 0x404c8e20, 0x174e: 0x404c9020, 0x174f: 0x404c9220, + 0x1750: 0x404c9420, 0x1751: 0x404c9620, 0x1752: 0x404c9820, 0x1753: 0x404c9a20, + 0x1754: 0x8209264e, + 0x1760: 0x404c9e20, 0x1761: 0x404ca020, 0x1762: 0x404ca220, 0x1763: 0x404ca420, + 0x1764: 0x404ca620, 0x1765: 0x404ca820, 0x1766: 0x404caa20, 0x1767: 0x404cac20, + 0x1768: 0x404cae20, 0x1769: 0x404cb020, 0x176a: 0x404cb220, 0x176b: 0x404cb420, + 0x176c: 0x404cb620, 0x176d: 0x404cb820, 0x176e: 0x404cba20, 0x176f: 0x404cbc20, + 0x1770: 0x404cbe20, 0x1771: 0x404cc020, 0x1772: 0x404cc220, 0x1773: 0x404cc420, + 0x1774: 0x82092663, 0x1775: 0x40031c20, 0x1776: 0x40031e20, + // Block 0x5e, offset 0x1780 + 0x1780: 0x404cc820, 0x1781: 0x404cca20, 0x1782: 0x404ccc20, 0x1783: 0x404cce20, + 0x1784: 0x404cd020, 0x1785: 0x404cd220, 0x1786: 0x404cd420, 0x1787: 0x404cd620, + 0x1788: 0x404cd820, 0x1789: 0x404cda20, 0x178a: 0x404cdc20, 0x178b: 0x404cde20, + 0x178c: 0x404ce020, 0x178d: 0x404ce220, 0x178e: 0x404ce420, 0x178f: 0x404ce620, + 0x1790: 0x404ce820, 0x1791: 0x404cea20, 0x1792: 0x404cec20, 0x1793: 0x404cee20, + 0x17a0: 0x404cf020, 0x17a1: 0x404cf220, 0x17a2: 0x404cf420, 0x17a3: 0x404cf620, + 0x17a4: 0x404cf820, 0x17a5: 0x404cfa20, 0x17a6: 0x404cfc20, 0x17a7: 0x404cfe20, + 0x17a8: 0x404d0020, 0x17a9: 0x404d0220, 0x17aa: 0x404d0420, 0x17ab: 0x404d0620, + 0x17ac: 0x404d0820, 0x17ae: 0x404d0a20, 0x17af: 0x404d0c20, + 0x17b0: 0x404d0e20, 0x17b2: 0x404d1020, 0x17b3: 0x404d1220, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x404fa420, 0x17c1: 0x404fa620, 0x17c2: 0x404fa820, 0x17c3: 0x404faa20, + 0x17c4: 0x404fac20, 0x17c5: 0x404fae20, 0x17c6: 0x404fb020, 0x17c7: 0x404fb220, + 0x17c8: 0x404fb420, 0x17c9: 0x404fb620, 0x17ca: 0x404fb820, 0x17cb: 0x404fba20, + 0x17cc: 0x404fbc20, 0x17cd: 0x404fbe20, 0x17ce: 0x404fc020, 0x17cf: 0x404fc220, + 0x17d0: 0x404fc420, 0x17d1: 0x404fc620, 0x17d2: 0x404fc820, 0x17d3: 0x404fca20, + 0x17d4: 0x404fcc20, 0x17d5: 0x404fce20, 0x17d6: 0x404fd020, 0x17d7: 0x404fd220, + 0x17d8: 0x404fd420, 0x17d9: 0x404fd620, 0x17da: 0x404fd820, 0x17db: 0x404fda20, + 0x17dc: 0x404fdc20, 0x17dd: 0x404fde20, 0x17de: 0x404fe020, 0x17df: 0x404fe220, + 0x17e0: 0x404fe420, 0x17e1: 0x404fe620, 0x17e2: 0x404fe820, 0x17e3: 0x404fec20, + 0x17e4: 0x404fee20, 0x17e5: 0x404ff020, 0x17e6: 0x404ff220, 0x17e7: 0x404ff420, + 0x17e8: 0x404ff620, 0x17e9: 0x404ff820, 0x17ea: 0x404ffa20, 0x17eb: 0x404ffc20, + 0x17ec: 0x404ffe20, 0x17ed: 0x40500020, 0x17ee: 0x40500220, 0x17ef: 0x40500420, + 0x17f0: 0x40500620, 0x17f1: 0x40500820, 0x17f2: 0x40500a20, 0x17f3: 0x40500c20, + 0x17f4: 0xa0000000, 0x17f5: 0xa0000000, 0x17f6: 0x40500e20, 0x17f7: 0x40501020, + 0x17f8: 0x40501220, 0x17f9: 0x40501420, 0x17fa: 0x40501620, 0x17fb: 0x40501820, + 0x17fc: 0x40501a20, 0x17fd: 0x40501c20, 0x17fe: 0x40501e20, 0x17ff: 0x40502020, + // Block 0x60, offset 0x1800 + 0x1800: 0x40502220, 0x1801: 0x40502420, 0x1802: 0x40502620, 0x1803: 0x40502820, + 0x1804: 0x40502a20, 0x1805: 0x40502c20, 0x1806: 0xa000f302, 0x1807: 0xa000f402, + 0x1808: 0xa0011402, 0x1809: 0xa0011502, 0x180a: 0xa0011602, 0x180b: 0xa0005f02, + 0x180c: 0xa0005f02, 0x180d: 0xa0005f02, 0x180e: 0xa0005f02, 0x180f: 0xa0005f02, + 0x1810: 0xa0005f02, 0x1811: 0xa0005f02, 0x1812: 0x82092817, 0x1813: 0xa0000000, + 0x1814: 0x40032620, 0x1815: 0x40032820, 0x1816: 0x4002ac20, 0x1817: 0x4027bc20, + 0x1818: 0x4005bc20, 0x1819: 0x4005be20, 0x181a: 0x4005c020, 0x181b: 0x4027f620, + 0x181c: 0x404fea20, 0x181d: 0xae605f02, + 0x1820: 0xe00001b5, 0x1821: 0xe0000249, 0x1822: 0xe0000361, 0x1823: 0xe000043b, + 0x1824: 0xe0000510, 0x1825: 0xe00005da, 0x1826: 0xe00006a5, 0x1827: 0xe000074d, + 0x1828: 0xe00007f9, 0x1829: 0xe000089e, + 0x1830: 0xe00001b8, 0x1831: 0xe000024c, 0x1832: 0xe0000364, 0x1833: 0xe000043e, + 0x1834: 0xe0000513, 0x1835: 0xe00005dd, 0x1836: 0xe00006a8, 0x1837: 0xe0000750, + 0x1838: 0xe00007fc, 0x1839: 0xe00008a1, + // Block 0x61, offset 0x1840 + 0x1840: 0x40056a20, 0x1841: 0x4002e620, 0x1842: 0x40025220, 0x1843: 0x4002f020, + 0x1844: 0x4002a620, 0x1845: 0x4002a820, 0x1846: 0x40022220, 0x1847: 0x40022420, + 0x1848: 0x40025420, 0x1849: 0x4002f220, 0x184a: 0xa0000000, 0x184b: 0xa0000000, + 0x184c: 0xa0000000, 0x184d: 0xa0000000, 0x184e: 0x40020c20, + 0x1850: 0xe00001c7, 0x1851: 0xe000025b, 0x1852: 0xe0000373, 0x1853: 0xe000044d, + 0x1854: 0xe0000522, 0x1855: 0xe00005ec, 0x1856: 0xe00006b7, 0x1857: 0xe000075f, + 0x1858: 0xe000080b, 0x1859: 0xe00008b0, + 0x1860: 0x40533820, 0x1861: 0x40533c20, 0x1862: 0x40534220, 0x1863: 0x40534e20, + 0x1864: 0x40535220, 0x1865: 0x40535820, 0x1866: 0x40535c20, 0x1867: 0x40536220, + 0x1868: 0x40536420, 0x1869: 0x40536620, 0x186a: 0x40537020, 0x186b: 0x40537420, + 0x186c: 0x40537a20, 0x186d: 0x40537e20, 0x186e: 0x40538820, 0x186f: 0x40538c20, + 0x1870: 0x40538e20, 0x1871: 0x40539020, 0x1872: 0x40539e20, 0x1873: 0x4053a420, + 0x1874: 0x4053aa20, 0x1875: 0x4053b420, 0x1876: 0x4053bc20, 0x1877: 0x4053c220, + 0x1878: 0x4053c620, 0x1879: 0x4053ca20, 0x187a: 0x4053d020, 0x187b: 0x4053da20, + 0x187c: 0x4053dc20, 0x187d: 0x4053e220, 0x187e: 0x4053ea20, 0x187f: 0x4053f020, + // Block 0x62, offset 0x1880 + 0x1880: 0x4053f220, 0x1881: 0x4053f420, 0x1882: 0x4053f620, 0x1883: 0x40533620, + 0x1884: 0x40533e20, 0x1885: 0x40534420, 0x1886: 0x40535020, 0x1887: 0x40535420, + 0x1888: 0x40535a20, 0x1889: 0x40535e20, 0x188a: 0x40536820, 0x188b: 0x40537220, + 0x188c: 0x40537620, 0x188d: 0x40537c20, 0x188e: 0x40538020, 0x188f: 0x40538a20, + 0x1890: 0x4053a020, 0x1891: 0x4053a620, 0x1892: 0x4053ac20, 0x1893: 0x4053b620, + 0x1894: 0x4053de20, 0x1895: 0x4053be20, 0x1896: 0x4053c820, 0x1897: 0x4053d220, + 0x1898: 0x4053e620, 0x1899: 0x4053ec20, 0x189a: 0x4053f820, 0x189b: 0x4053fa20, + 0x189c: 0x4053b020, 0x189d: 0x40534020, 0x189e: 0x40534620, 0x189f: 0x40534c20, + 0x18a0: 0x40536020, 0x18a1: 0x40535620, 0x18a2: 0x40536a20, 0x18a3: 0x4053d420, + 0x18a4: 0x40538220, 0x18a5: 0x40538620, 0x18a6: 0x40537820, 0x18a7: 0x40539220, + 0x18a8: 0x4053a220, 0x18a9: 0x4053a820, 0x18aa: 0x4053b820, 0x18ab: 0x4053cc20, + 0x18ac: 0x4053e820, 0x18ad: 0x4053ee20, 0x18ae: 0x4053e020, 0x18af: 0x4053e420, + 0x18b0: 0x4053fc20, 0x18b1: 0x4053ae20, 0x18b2: 0x4053c020, 0x18b3: 0x40534820, + 0x18b4: 0x4053d620, 0x18b5: 0x4053c420, 0x18b6: 0x4053ce20, 0x18b7: 0x4053ba20, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x40532820, 0x18c1: 0x40532a20, 0x18c2: 0x40532c20, 0x18c3: 0x40532e20, + 0x18c4: 0x40533020, 0x18c5: 0x40533220, 0x18c6: 0x40533420, 0x18c7: 0x40533a20, + 0x18c8: 0x40534a20, 0x18c9: 0x4053d820, 0x18ca: 0x40536c20, 0x18cb: 0x4053b220, + 0x18cc: 0x4053fe20, 0x18cd: 0x40540220, 0x18ce: 0x40540420, 0x18cf: 0x40540820, + 0x18d0: 0x40540a20, 0x18d1: 0x40541020, 0x18d2: 0x40541420, 0x18d3: 0x40541620, + 0x18d4: 0x40541a20, 0x18d5: 0x40541e20, 0x18d6: 0x40542220, 0x18d7: 0x40542420, + 0x18d8: 0x40540c20, 0x18d9: 0x40542020, 0x18da: 0x40538420, 0x18db: 0x40536e20, + 0x18dc: 0x40539420, 0x18dd: 0x40539620, 0x18de: 0x40540020, 0x18df: 0x40540620, + 0x18e0: 0x40540e20, 0x18e1: 0x40541220, 0x18e2: 0x40539820, 0x18e3: 0x40541c20, + 0x18e4: 0x40539a20, 0x18e5: 0x40539c20, 0x18e6: 0x40542620, 0x18e7: 0x40542820, + 0x18e8: 0x40541820, 0x18e9: 0x82e42a16, 0x18ea: 0x40542a20, + 0x18f0: 0x405a1a20, 0x18f1: 0x405a1c20, 0x18f2: 0x405a1e20, 0x18f3: 0x405a2020, + 0x18f4: 0x405a2220, 0x18f5: 0x405a2420, 0x18f6: 0x405a2620, 0x18f7: 0x405a2820, + 0x18f8: 0x405a2a20, 0x18f9: 0x405a2c20, 0x18fa: 0x405a2e20, 0x18fb: 0x405a3020, + 0x18fc: 0x405a3220, 0x18fd: 0x405a3420, 0x18fe: 0x405a3620, 0x18ff: 0x405a3820, + // Block 0x64, offset 0x1900 + 0x1900: 0x405a3a20, 0x1901: 0x405a3c20, 0x1902: 0x405a3e20, 0x1903: 0x405a4020, + 0x1904: 0x405a4220, 0x1905: 0x405a4420, 0x1906: 0x405a4620, 0x1907: 0x405a4820, + 0x1908: 0x405a4a20, 0x1909: 0x405a4c20, 0x190a: 0x405a4e20, 0x190b: 0x405a5020, + 0x190c: 0x405a5220, 0x190d: 0x405a5420, 0x190e: 0x405a5620, 0x190f: 0x405a5820, + 0x1910: 0x405a5a20, 0x1911: 0x405a5c20, 0x1912: 0x405a5e20, 0x1913: 0x405a6020, + 0x1914: 0x405a6220, 0x1915: 0x405a6420, 0x1916: 0x405a6620, 0x1917: 0x405a6820, + 0x1918: 0x405a6a20, 0x1919: 0x405a6c20, 0x191a: 0x405a6e20, 0x191b: 0x405a7020, + 0x191c: 0x405a7220, 0x191d: 0x405a7420, 0x191e: 0x405a7620, 0x191f: 0x405a7820, + 0x1920: 0x405a7a20, 0x1921: 0x405a7c20, 0x1922: 0x405a7e20, 0x1923: 0x405a8020, + 0x1924: 0x405a8220, 0x1925: 0x405a8420, 0x1926: 0x405a8620, 0x1927: 0x405a8820, + 0x1928: 0x405a8a20, 0x1929: 0x405a8c20, 0x192a: 0x405a8e20, 0x192b: 0x405a9020, + 0x192c: 0x405a9220, 0x192d: 0x405a9420, 0x192e: 0x405a9620, 0x192f: 0x405a9820, + 0x1930: 0x405a9a20, 0x1931: 0x405a9c20, 0x1932: 0x405a9e20, 0x1933: 0x405aa020, + 0x1934: 0x405aa220, 0x1935: 0x405aa420, + // Block 0x65, offset 0x1940 + 0x1940: 0x404c1220, 0x1941: 0x404c1420, 0x1942: 0x404c1620, 0x1943: 0x404c1820, + 0x1944: 0x404c1a20, 0x1945: 0x404c1c20, 0x1946: 0x404c1e20, 0x1947: 0x404c2020, + 0x1948: 0x404c2220, 0x1949: 0x404c2420, 0x194a: 0x404c2620, 0x194b: 0x404c2820, + 0x194c: 0x404c2a20, 0x194d: 0x404c2c20, 0x194e: 0x404c2e20, 0x194f: 0x404c3020, + 0x1950: 0x404c3220, 0x1951: 0x404c3420, 0x1952: 0x404c3620, 0x1953: 0x404c3820, + 0x1954: 0x404c3a20, 0x1955: 0x404c3c20, 0x1956: 0x404c3e20, 0x1957: 0x404c4020, + 0x1958: 0x404c4220, 0x1959: 0x404c4420, 0x195a: 0x404c4620, 0x195b: 0x404c4820, + 0x195c: 0x404c4a20, + 0x1960: 0x404c4c20, 0x1961: 0x404c4e20, 0x1962: 0x404c5020, 0x1963: 0x404c5220, + 0x1964: 0x404c5420, 0x1965: 0x404c5620, 0x1966: 0x404c5820, 0x1967: 0x404c5a20, + 0x1968: 0x404c5c20, 0x1969: 0x404c5e20, 0x196a: 0x404c6020, 0x196b: 0x404c6220, + 0x1970: 0x404c6420, 0x1971: 0x404c6620, 0x1972: 0x404c6820, 0x1973: 0x404c6a20, + 0x1974: 0x404c6c20, 0x1975: 0x404c6e20, 0x1976: 0x404c7020, 0x1977: 0x404c7220, + 0x1978: 0x404c7420, 0x1979: 0xade11f02, 0x197a: 0xae612002, 0x197b: 0xadc12102, + // Block 0x66, offset 0x1980 + 0x1980: 0x4007a620, + 0x1984: 0x4002c220, 0x1985: 0x4002d220, 0x1986: 0xe000018e, 0x1987: 0xe000021f, + 0x1988: 0xe000033a, 0x1989: 0xe0000414, 0x198a: 0xe00004e9, 0x198b: 0xe00005b3, + 0x198c: 0xe000067e, 0x198d: 0xe0000726, 0x198e: 0xe00007d2, 0x198f: 0xe0000877, + 0x1990: 0x40503020, 0x1991: 0x40503220, 0x1992: 0x40503420, 0x1993: 0x40503620, + 0x1994: 0x40503820, 0x1995: 0x40503a20, 0x1996: 0x40503c20, 0x1997: 0x40503e20, + 0x1998: 0x40504020, 0x1999: 0x40504220, 0x199a: 0x40504420, 0x199b: 0x40504620, + 0x199c: 0x40504820, 0x199d: 0x40504a20, 0x199e: 0x40504c20, 0x199f: 0x40504e20, + 0x19a0: 0x40505020, 0x19a1: 0x40505220, 0x19a2: 0x40505420, 0x19a3: 0x40505620, + 0x19a4: 0x40505820, 0x19a5: 0x40505a20, 0x19a6: 0x40505c20, 0x19a7: 0x40505e20, + 0x19a8: 0x40506020, 0x19a9: 0x40506220, 0x19aa: 0x40506420, 0x19ab: 0x40506620, + 0x19ac: 0x40506820, 0x19ad: 0x40506a20, + 0x19b0: 0x40506c20, 0x19b1: 0x40506e20, 0x19b2: 0x40507020, 0x19b3: 0x40507220, + 0x19b4: 0x40507420, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x40507620, 0x19c1: 0x40507820, 0x19c2: 0x40507a20, 0x19c3: 0x40507c20, + 0x19c4: 0x40507e20, 0x19c5: 0x40508020, 0x19c6: 0x40508220, 0x19c7: 0x40508420, + 0x19c8: 0x40508620, 0x19c9: 0x40508820, 0x19ca: 0x40508a20, 0x19cb: 0x40508c20, + 0x19cc: 0x40508e20, 0x19cd: 0x40509020, 0x19ce: 0x40509220, 0x19cf: 0x40509420, + 0x19d0: 0x40509620, 0x19d1: 0x40509820, 0x19d2: 0x40509a20, 0x19d3: 0x40509c20, + 0x19d4: 0x40509e20, 0x19d5: 0x4050a020, 0x19d6: 0x4050a220, 0x19d7: 0x4050a420, + 0x19d8: 0x4050a620, 0x19d9: 0x4050a820, 0x19da: 0x4050aa20, 0x19db: 0x4050ac20, + 0x19dc: 0x4050ae20, 0x19dd: 0x4050b020, 0x19de: 0x4050b220, 0x19df: 0x4050b420, + 0x19e0: 0x4050b620, 0x19e1: 0x4050b820, 0x19e2: 0x4050ba20, 0x19e3: 0x4050bc20, + 0x19e4: 0x4050be20, 0x19e5: 0x4050c020, 0x19e6: 0x4050c220, 0x19e7: 0x4050c420, + 0x19e8: 0x4050c620, 0x19e9: 0x4050c820, 0x19ea: 0x4050ca20, 0x19eb: 0x4050cc20, + 0x19f0: 0x4050ce20, 0x19f1: 0x4050d020, 0x19f2: 0x4050d220, 0x19f3: 0x4050d420, + 0x19f4: 0x4050d620, 0x19f5: 0x4050d820, 0x19f6: 0x4050da20, 0x19f7: 0x4050dc20, + 0x19f8: 0x4050de20, 0x19f9: 0x4050e020, 0x19fa: 0x4050e220, 0x19fb: 0x4050e420, + 0x19fc: 0x4050e620, 0x19fd: 0x4050e820, 0x19fe: 0x4050ea20, 0x19ff: 0x4050ec20, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x4050ee20, 0x1a01: 0x4050f020, 0x1a02: 0x4050f220, 0x1a03: 0x4050f420, + 0x1a04: 0x4050f620, 0x1a05: 0x4050f820, 0x1a06: 0x4050fa20, 0x1a07: 0x4050fc20, + 0x1a08: 0x4050fe20, 0x1a09: 0x40510020, + 0x1a10: 0xe0000191, 0x1a11: 0xe0000222, 0x1a12: 0xe000033d, 0x1a13: 0xe0000417, + 0x1a14: 0xe00004ec, 0x1a15: 0xe00005b6, 0x1a16: 0xe0000681, 0x1a17: 0xe0000729, + 0x1a18: 0xe00007d5, 0x1a19: 0xe000087a, 0x1a1a: 0xe0000225, + 0x1a1e: 0xe0002022, 0x1a1f: 0xe0002025, + 0x1a20: 0x4007b220, 0x1a21: 0x4007b420, 0x1a22: 0x4007b620, 0x1a23: 0x4007b820, + 0x1a24: 0x4007ba20, 0x1a25: 0x4007bc20, 0x1a26: 0x4007be20, 0x1a27: 0x4007c020, + 0x1a28: 0x4007c220, 0x1a29: 0x4007c420, 0x1a2a: 0x4007c620, 0x1a2b: 0x4007c820, + 0x1a2c: 0x4007ca20, 0x1a2d: 0x4007cc20, 0x1a2e: 0x4007ce20, 0x1a2f: 0x4007d020, + 0x1a30: 0x4007d220, 0x1a31: 0x4007d420, 0x1a32: 0x4007d620, 0x1a33: 0x4007d820, + 0x1a34: 0x4007da20, 0x1a35: 0x4007dc20, 0x1a36: 0x4007de20, 0x1a37: 0x4007e020, + 0x1a38: 0x4007e220, 0x1a39: 0x4007e420, 0x1a3a: 0x4007e620, 0x1a3b: 0x4007e820, + 0x1a3c: 0x4007ea20, 0x1a3d: 0x4007ec20, 0x1a3e: 0x4007ee20, 0x1a3f: 0x4007f020, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x404d1420, 0x1a41: 0x404d1620, 0x1a42: 0x404d1820, 0x1a43: 0x404d1a20, + 0x1a44: 0x404d1c20, 0x1a45: 0x404d1e20, 0x1a46: 0x404d2020, 0x1a47: 0x404d2220, + 0x1a48: 0x404d2420, 0x1a49: 0x404d2620, 0x1a4a: 0x404d2820, 0x1a4b: 0x404d2a20, + 0x1a4c: 0x404d2c20, 0x1a4d: 0x404d2e20, 0x1a4e: 0x404d3020, 0x1a4f: 0x404d3220, + 0x1a50: 0x404d3420, 0x1a51: 0x404d3620, 0x1a52: 0x404d3820, 0x1a53: 0x404d3a20, + 0x1a54: 0x404d3c20, 0x1a55: 0x404d3e20, 0x1a56: 0x404d4020, 0x1a57: 0x82e626a1, + 0x1a58: 0x82dc26a2, 0x1a59: 0x404d4620, 0x1a5a: 0x404d4820, 0x1a5b: 0x404d4a20, + 0x1a5e: 0x40036620, 0x1a5f: 0x40036820, + 0x1a60: 0x40510220, 0x1a61: 0x40510420, 0x1a62: 0x40510620, 0x1a63: 0x40510820, + 0x1a64: 0x40510a20, 0x1a65: 0x40510c20, 0x1a66: 0x40510e20, 0x1a67: 0x40511020, + 0x1a68: 0x40511220, 0x1a69: 0x40511420, 0x1a6a: 0x40511620, 0x1a6b: 0x40511820, + 0x1a6c: 0x40511a20, 0x1a6d: 0x40511c20, 0x1a6e: 0x40511e20, 0x1a6f: 0x40512020, + 0x1a70: 0x40512220, 0x1a71: 0x40512420, 0x1a72: 0x40512620, 0x1a73: 0x40512820, + 0x1a74: 0x40512a20, 0x1a75: 0x40512c20, 0x1a76: 0x40512e20, 0x1a77: 0x40513020, + 0x1a78: 0x40513220, 0x1a79: 0x40513420, 0x1a7a: 0x40513620, 0x1a7b: 0x40513820, + 0x1a7c: 0x40513a20, 0x1a7d: 0x40513c20, 0x1a7e: 0x40513e20, 0x1a7f: 0x40514020, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x40514220, 0x1a81: 0x40514420, 0x1a82: 0x40514620, 0x1a83: 0x40514820, + 0x1a84: 0x40514a20, 0x1a85: 0x40514c20, 0x1a86: 0x40514e20, 0x1a87: 0x40515020, + 0x1a88: 0x40515220, 0x1a89: 0x40515420, 0x1a8a: 0x40515620, 0x1a8b: 0x40515820, + 0x1a8c: 0x40515a20, 0x1a8d: 0x40516c20, 0x1a8e: 0x40516e20, 0x1a8f: 0x40517020, + 0x1a90: 0x40517220, 0x1a91: 0x40517420, 0x1a92: 0x40517620, 0x1a93: 0x40515c20, + 0x1a94: 0xe0002029, 0x1a95: 0x40516020, 0x1a96: 0x40516220, 0x1a97: 0x40516420, + 0x1a98: 0x00510e84, 0x1a99: 0x00510e84, 0x1a9a: 0x00513884, 0x1a9b: 0x00513884, + 0x1a9c: 0x40516620, 0x1a9d: 0x40516820, 0x1a9e: 0x40516a20, + 0x1aa0: 0x820928cd, 0x1aa1: 0x40517820, 0x1aa2: 0x40517c20, 0x1aa3: 0x40517e20, + 0x1aa4: 0x00517e84, 0x1aa5: 0x40518020, 0x1aa6: 0x40518220, 0x1aa7: 0x40518420, + 0x1aa8: 0x40518620, 0x1aa9: 0x40518820, 0x1aaa: 0x40518a20, 0x1aab: 0x40515e20, + 0x1aac: 0x40517a20, 0x1aad: 0x40519820, 0x1aae: 0x40518c20, 0x1aaf: 0x40518e20, + 0x1ab0: 0x40519220, 0x1ab1: 0x40519420, 0x1ab2: 0x40519620, 0x1ab3: 0x40519020, + 0x1ab4: 0xa000f302, 0x1ab5: 0xae611702, 0x1ab6: 0xae611802, 0x1ab7: 0xae611902, + 0x1ab8: 0xae611a02, 0x1ab9: 0xae611b02, 0x1aba: 0xae611c02, 0x1abb: 0xae611d02, + 0x1abc: 0xae611e02, 0x1abf: 0xadc00000, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0xe0000194, 0x1ac1: 0xe0000228, 0x1ac2: 0xe0000340, 0x1ac3: 0xe000041a, + 0x1ac4: 0xe00004ef, 0x1ac5: 0xe00005b9, 0x1ac6: 0xe0000684, 0x1ac7: 0xe000072c, + 0x1ac8: 0xe00007d8, 0x1ac9: 0xe000087d, + 0x1ad0: 0xe0000197, 0x1ad1: 0xe000022b, 0x1ad2: 0xe0000343, 0x1ad3: 0xe000041d, + 0x1ad4: 0xe00004f2, 0x1ad5: 0xe00005bc, 0x1ad6: 0xe0000687, 0x1ad7: 0xe000072f, + 0x1ad8: 0xe00007db, 0x1ad9: 0xe0000880, + 0x1ae0: 0x4005c220, 0x1ae1: 0x4005c420, 0x1ae2: 0x4005c620, 0x1ae3: 0x4005c820, + 0x1ae4: 0x4005ca20, 0x1ae5: 0x4005cc20, 0x1ae6: 0x4005ce20, 0x1ae7: 0x4027be20, + 0x1ae8: 0x40032a20, 0x1ae9: 0x40032c20, 0x1aea: 0x40032e20, 0x1aeb: 0x40033020, + 0x1aec: 0x4005d020, 0x1aed: 0x4005d220, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0xa000f202, 0x1b01: 0xa000f202, 0x1b02: 0xa000f302, 0x1b03: 0xa000f702, + 0x1b04: 0xa000f402, 0x1b05: 0xc3190821, 0x1b06: 0x40522820, 0x1b07: 0xc31b0821, + 0x1b08: 0x40522c20, 0x1b09: 0xc31d0821, 0x1b0a: 0x40523020, 0x1b0b: 0xc31f0821, + 0x1b0c: 0x40523420, 0x1b0d: 0xc3210821, 0x1b0e: 0x40523820, 0x1b0f: 0x40523a20, + 0x1b10: 0x40523c20, 0x1b11: 0xc3230821, 0x1b12: 0x40524020, 0x1b13: 0x40524220, + 0x1b14: 0x40524820, 0x1b15: 0x40524a20, 0x1b16: 0x40524c20, 0x1b17: 0x40524e20, + 0x1b18: 0x40525020, 0x1b19: 0x40525220, 0x1b1a: 0x40525420, 0x1b1b: 0x40525620, + 0x1b1c: 0x40525820, 0x1b1d: 0x40525a20, 0x1b1e: 0x40525c20, 0x1b1f: 0x40525e20, + 0x1b20: 0x40526020, 0x1b21: 0x40526220, 0x1b22: 0x40526420, 0x1b23: 0x40526820, + 0x1b24: 0x40526a20, 0x1b25: 0x40526c20, 0x1b26: 0x40526e20, 0x1b27: 0x40527020, + 0x1b28: 0x40527420, 0x1b29: 0x40527620, 0x1b2a: 0x40527820, 0x1b2b: 0x40527a20, + 0x1b2c: 0x40527c20, 0x1b2d: 0x40527e20, 0x1b2e: 0x40528020, 0x1b2f: 0x40528220, + 0x1b30: 0x40528620, 0x1b31: 0x40528820, 0x1b32: 0x40528a20, 0x1b33: 0x40529020, + 0x1b34: 0xa070f102, 0x1b35: 0x40529220, 0x1b36: 0x40529420, 0x1b37: 0x40529620, + 0x1b38: 0x40529820, 0x1b39: 0x40529a20, 0x1b3a: 0xc3250821, 0x1b3b: 0x40529e20, + 0x1b3c: 0xc3270821, 0x1b3d: 0x4052a220, 0x1b3e: 0xc3290821, 0x1b3f: 0xc32b0821, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x4052a820, 0x1b41: 0x4052aa20, 0x1b42: 0xc32d0821, 0x1b43: 0x4052ae20, + 0x1b44: 0x82092958, 0x1b45: 0x40524420, 0x1b46: 0x40524620, 0x1b47: 0x40526620, + 0x1b48: 0x40527220, 0x1b49: 0x40528420, 0x1b4a: 0x40528c20, 0x1b4b: 0x40528e20, + 0x1b50: 0xe00001be, 0x1b51: 0xe0000252, 0x1b52: 0xe000036a, 0x1b53: 0xe0000444, + 0x1b54: 0xe0000519, 0x1b55: 0xe00005e3, 0x1b56: 0xe00006ae, 0x1b57: 0xe0000756, + 0x1b58: 0xe0000802, 0x1b59: 0xe00008a7, 0x1b5a: 0x40036a20, 0x1b5b: 0x40036c20, + 0x1b5c: 0x4002f620, 0x1b5d: 0x4002ae20, 0x1b5e: 0x40033220, 0x1b5f: 0x40033420, + 0x1b60: 0x40022020, 0x1b61: 0x4007f220, 0x1b62: 0x4007f420, 0x1b63: 0x4007f620, + 0x1b64: 0x4007f820, 0x1b65: 0x4007fa20, 0x1b66: 0x4007fc20, 0x1b67: 0x4007fe20, + 0x1b68: 0x40080020, 0x1b69: 0x40080220, 0x1b6a: 0x40080420, 0x1b6b: 0xae600000, + 0x1b6c: 0xadc00000, 0x1b6d: 0xae600000, 0x1b6e: 0xae600000, 0x1b6f: 0xae600000, + 0x1b70: 0xae600000, 0x1b71: 0xae600000, 0x1b72: 0xae600000, 0x1b73: 0xae600000, + 0x1b74: 0x40080620, 0x1b75: 0x40080820, 0x1b76: 0x40080a20, 0x1b77: 0x40080c20, + 0x1b78: 0x40080e20, 0x1b79: 0x40081020, 0x1b7a: 0x40081220, 0x1b7b: 0x40081420, + 0x1b7c: 0x40081620, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0xa000f302, 0x1b81: 0xa000f902, 0x1b82: 0xa000f402, 0x1b83: 0x4047d420, + 0x1b84: 0x4047d620, 0x1b85: 0x4047d820, 0x1b86: 0x4047da20, 0x1b87: 0x4047dc20, + 0x1b88: 0x4047de20, 0x1b89: 0x4047e020, 0x1b8a: 0x4047e220, 0x1b8b: 0x4047e620, + 0x1b8c: 0x4047e820, 0x1b8d: 0x4047ea20, 0x1b8e: 0x4047ec20, 0x1b8f: 0x4047ee20, + 0x1b90: 0x4047f020, 0x1b91: 0x4047f220, 0x1b92: 0x4047f420, 0x1b93: 0x4047f620, + 0x1b94: 0x4047f820, 0x1b95: 0x4047fa20, 0x1b96: 0x4047fc20, 0x1b97: 0x4047fe20, + 0x1b98: 0x40480020, 0x1b99: 0x40480420, 0x1b9a: 0x40480820, 0x1b9b: 0x40480c20, + 0x1b9c: 0x40481220, 0x1b9d: 0x40481820, 0x1b9e: 0x40481c20, 0x1b9f: 0x40481e20, + 0x1ba0: 0x40482220, 0x1ba1: 0x40480a20, 0x1ba2: 0x40480e20, 0x1ba3: 0x40481420, + 0x1ba4: 0x40482420, 0x1ba5: 0x40482620, 0x1ba6: 0x40482820, 0x1ba7: 0x40482a20, + 0x1ba8: 0x40482c20, 0x1ba9: 0x40482e20, 0x1baa: 0x82092418, 0x1bab: 0x82092419, + 0x1bac: 0x40480620, 0x1bad: 0x40481a20, 0x1bae: 0x4047e420, 0x1baf: 0x40482020, + 0x1bb0: 0xe00001c4, 0x1bb1: 0xe0000258, 0x1bb2: 0xe0000370, 0x1bb3: 0xe000044a, + 0x1bb4: 0xe000051f, 0x1bb5: 0xe00005e9, 0x1bb6: 0xe00006b4, 0x1bb7: 0xe000075c, + 0x1bb8: 0xe0000808, 0x1bb9: 0xe00008ad, 0x1bba: 0x0047d484, 0x1bbb: 0x40481020, + 0x1bbc: 0x40481620, 0x1bbd: 0x40480220, 0x1bbe: 0x0047e299, 0x1bbf: 0x00480499, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x404d4c20, 0x1bc1: 0x004d4c84, 0x1bc2: 0x404d4e20, 0x1bc3: 0x004d4e84, + 0x1bc4: 0x004d4e84, 0x1bc5: 0x404d5020, 0x1bc6: 0x004d5084, 0x1bc7: 0x404d5220, + 0x1bc8: 0x004d5284, 0x1bc9: 0x404d5420, 0x1bca: 0x004d5484, 0x1bcb: 0x404d5620, + 0x1bcc: 0x004d5684, 0x1bcd: 0x004d5684, 0x1bce: 0x404d5820, 0x1bcf: 0x004d5884, + 0x1bd0: 0x404d5a20, 0x1bd1: 0x404d5c20, 0x1bd2: 0x404d5e20, 0x1bd3: 0x004d5e84, + 0x1bd4: 0x404d6020, 0x1bd5: 0x004d6084, 0x1bd6: 0x404d6220, 0x1bd7: 0x004d6284, + 0x1bd8: 0x404d6420, 0x1bd9: 0x004d6484, 0x1bda: 0x004d6484, 0x1bdb: 0x404d6620, + 0x1bdc: 0x004d6684, 0x1bdd: 0x404d6820, 0x1bde: 0x404d6a20, 0x1bdf: 0x004d6a84, + 0x1be0: 0x404d6c20, 0x1be1: 0x404d6e20, 0x1be2: 0x404d7020, 0x1be3: 0x404d7220, + 0x1be4: 0x404d7420, 0x1be5: 0x404d7620, 0x1be6: 0xa070f102, 0x1be7: 0x404d7820, + 0x1be8: 0x004d7884, 0x1be9: 0x404d7a20, 0x1bea: 0x404d7c20, 0x1beb: 0x004d7c84, + 0x1bec: 0x404d7e20, 0x1bed: 0x004d7e84, 0x1bee: 0x404d8020, 0x1bef: 0x004d8084, + 0x1bf0: 0x404d8220, 0x1bf1: 0x404d8420, 0x1bf2: 0x820926c3, 0x1bf3: 0x820926c4, + 0x1bfc: 0x4005ec20, 0x1bfd: 0x4005ee20, 0x1bfe: 0x4005f020, 0x1bff: 0x4005f220, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x404b3620, 0x1c01: 0x404b3820, 0x1c02: 0x404b3a20, 0x1c03: 0x404b3c20, + 0x1c04: 0x404b3e20, 0x1c05: 0x404b4020, 0x1c06: 0x404b4220, 0x1c07: 0x404b4420, + 0x1c08: 0x404b4620, 0x1c09: 0x404b4820, 0x1c0a: 0x404b5020, 0x1c0b: 0x404b5220, + 0x1c0c: 0x404b5420, 0x1c0d: 0x404b5620, 0x1c0e: 0x404b5820, 0x1c0f: 0x404b5a20, + 0x1c10: 0x404b5c20, 0x1c11: 0x404b5e20, 0x1c12: 0x404b6020, 0x1c13: 0x404b6220, + 0x1c14: 0x404b6420, 0x1c15: 0x404b6620, 0x1c16: 0x404b6820, 0x1c17: 0x404b6a20, + 0x1c18: 0x404b6c20, 0x1c19: 0x404b6e20, 0x1c1a: 0x404b7020, 0x1c1b: 0x404b7420, + 0x1c1c: 0x404b7820, 0x1c1d: 0x404b7a20, 0x1c1e: 0x404b7c20, 0x1c1f: 0x404b7e20, + 0x1c20: 0x404b8020, 0x1c21: 0x404b8220, 0x1c22: 0x404b8420, 0x1c23: 0x404b8620, + 0x1c24: 0x404b7220, 0x1c25: 0x404b7620, 0x1c26: 0x404b8a20, 0x1c27: 0x404b8c20, + 0x1c28: 0x404b8e20, 0x1c29: 0x404b9020, 0x1c2a: 0x404b9220, 0x1c2b: 0x404b9420, + 0x1c2c: 0x404b9620, 0x1c2d: 0x404b9820, 0x1c2e: 0x404b9a20, 0x1c2f: 0x404b9c20, + 0x1c30: 0x404b9e20, 0x1c31: 0x404ba020, 0x1c32: 0x404ba220, 0x1c33: 0x404ba420, + 0x1c34: 0x404ba620, 0x1c35: 0x404ba820, 0x1c36: 0x404b8820, 0x1c37: 0xa070f102, + 0x1c3b: 0x40031420, + 0x1c3c: 0x40031620, 0x1c3d: 0x4005ae20, 0x1c3e: 0x4005b020, 0x1c3f: 0x4005b220, + // Block 0x71, offset 0x1c40 + 0x1c40: 0xe00001a6, 0x1c41: 0xe000023a, 0x1c42: 0xe0000352, 0x1c43: 0xe000042c, + 0x1c44: 0xe0000501, 0x1c45: 0xe00005cb, 0x1c46: 0xe0000696, 0x1c47: 0xe000073e, + 0x1c48: 0xe00007ea, 0x1c49: 0xe000088f, + 0x1c4d: 0x404b4a20, 0x1c4e: 0x404b4c20, 0x1c4f: 0x404b4e20, + 0x1c50: 0xe00001ca, 0x1c51: 0xe000025e, 0x1c52: 0xe0000376, 0x1c53: 0xe0000450, + 0x1c54: 0xe0000525, 0x1c55: 0xe00005ef, 0x1c56: 0xe00006ba, 0x1c57: 0xe0000762, + 0x1c58: 0xe000080e, 0x1c59: 0xe00008b3, 0x1c5a: 0x40542e20, 0x1c5b: 0x40543020, + 0x1c5c: 0x40543220, 0x1c5d: 0x40543420, 0x1c5e: 0x40543620, 0x1c5f: 0x40543820, + 0x1c60: 0x40543a20, 0x1c61: 0x40543c20, 0x1c62: 0x40543e20, 0x1c63: 0x40544020, + 0x1c64: 0x40544220, 0x1c65: 0x40544420, 0x1c66: 0x40544620, 0x1c67: 0x40544820, + 0x1c68: 0x40544a20, 0x1c69: 0x40544c20, 0x1c6a: 0x40544e20, 0x1c6b: 0x40545020, + 0x1c6c: 0x40545220, 0x1c6d: 0x40545420, 0x1c6e: 0x40545620, 0x1c6f: 0x40545820, + 0x1c70: 0x40545a20, 0x1c71: 0x40545c20, 0x1c72: 0x40545e20, 0x1c73: 0x40546020, + 0x1c74: 0x40546220, 0x1c75: 0x40546420, 0x1c76: 0x40546620, 0x1c77: 0x40546820, + 0x1c78: 0x40546a20, 0x1c79: 0x40546c20, 0x1c7a: 0x40546e20, 0x1c7b: 0x40547020, + 0x1c7c: 0x40547220, 0x1c7d: 0x40547420, 0x1c7e: 0x40035820, 0x1c7f: 0x40035a20, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x4005d620, 0x1c81: 0x4005d820, 0x1c82: 0x4005da20, 0x1c83: 0x4005dc20, + 0x1c84: 0x4005de20, 0x1c85: 0x4005e020, 0x1c86: 0x4005e220, 0x1c87: 0x4005e420, + 0x1c90: 0xae600000, 0x1c91: 0xae600000, 0x1c92: 0xae600000, 0x1c93: 0xa0000000, + 0x1c94: 0xa0100000, 0x1c95: 0xadc00000, 0x1c96: 0xadc00000, 0x1c97: 0xadc00000, + 0x1c98: 0xadc00000, 0x1c99: 0xadc00000, 0x1c9a: 0xae600000, 0x1c9b: 0xae600000, + 0x1c9c: 0xadc00000, 0x1c9d: 0xadc00000, 0x1c9e: 0xadc00000, 0x1c9f: 0xadc00000, + 0x1ca0: 0xae600000, 0x1ca1: 0xa0000000, 0x1ca2: 0xa0100000, 0x1ca3: 0xa0100000, + 0x1ca4: 0xa0100000, 0x1ca5: 0xa0100000, 0x1ca6: 0xa0100000, 0x1ca7: 0xa0100000, + 0x1ca8: 0xa0100000, 0x1ca9: 0x40404020, 0x1caa: 0x00404084, 0x1cab: 0x00404084, + 0x1cac: 0x00404084, 0x1cad: 0xadc0f302, 0x1cae: 0x00404084, 0x1caf: 0x00404084, + 0x1cb0: 0x00404084, 0x1cb1: 0x00404084, 0x1cb2: 0xa000f402, 0x1cb3: 0xa000f402, + 0x1cb4: 0xae600000, 0x1cb5: 0x40404220, 0x1cb6: 0x40404420, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x402be620, 0x1cc1: 0x402bec20, 0x1cc2: 0x402bee20, 0x1cc3: 0x402c2420, + 0x1cc4: 0x402c4220, 0x1cc5: 0x402c6a20, 0x1cc6: 0x402c6c20, 0x1cc7: 0x402ca020, + 0x1cc8: 0x402ce620, 0x1cc9: 0x402db420, 0x1cca: 0x402ddc20, 0x1ccb: 0x402e0620, + 0x1ccc: 0x402e3420, 0x1ccd: 0x402e8a20, 0x1cce: 0x402eb020, 0x1ccf: 0x402eea20, + 0x1cd0: 0x402f0220, 0x1cd1: 0x402eec20, 0x1cd2: 0x402f0420, 0x1cd3: 0x402ef820, + 0x1cd4: 0x402ef620, 0x1cd5: 0x402f2a20, 0x1cd6: 0x402f0a20, 0x1cd7: 0x402f0c20, + 0x1cd8: 0x402f3420, 0x1cd9: 0x402f8c20, 0x1cda: 0x402fa020, 0x1cdb: 0x40303420, + 0x1cdc: 0x40307420, 0x1cdd: 0x40307620, 0x1cde: 0x40307820, 0x1cdf: 0x4030aa20, + 0x1ce0: 0x4030c620, 0x1ce1: 0x4030ea20, 0x1ce2: 0x40313220, 0x1ce3: 0x40316c20, + 0x1ce4: 0x4031f420, 0x1ce5: 0x4031f620, 0x1ce6: 0x40325820, 0x1ce7: 0x40327420, + 0x1ce8: 0x40328020, 0x1ce9: 0x40328a20, 0x1cea: 0x4032a020, 0x1ceb: 0x40348c20, + 0x1cec: 0x002bde9d, 0x1ced: 0xe00009e1, 0x1cee: 0x002c0a9d, 0x1cef: 0x402c2220, + 0x1cf0: 0x002c629d, 0x1cf1: 0x002c989d, 0x1cf2: 0x002cae9d, 0x1cf3: 0x002d229d, + 0x1cf4: 0x002d689d, 0x1cf5: 0x002d9a9d, 0x1cf6: 0x002dcc9d, 0x1cf7: 0x002dfe9d, + 0x1cf8: 0x002e229d, 0x1cf9: 0x002e829d, 0x1cfa: 0x002e9e9d, 0x1cfb: 0x402eae20, + 0x1cfc: 0x002ee29d, 0x1cfd: 0x002f229d, 0x1cfe: 0x002f2c9d, 0x1cff: 0x002f7a9d, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x00302c9d, 0x1d01: 0x00306c9d, 0x1d02: 0x0030e29d, 0x1d03: 0x002bde94, + 0x1d04: 0x002bf094, 0x1d05: 0x002bf894, 0x1d06: 0x002bee94, 0x1d07: 0x002c0a94, + 0x1d08: 0x002c6294, 0x1d09: 0x002c9894, 0x1d0a: 0x002cb894, 0x1d0b: 0x002cc294, + 0x1d0c: 0x002ce694, 0x1d0d: 0x002d2294, 0x1d0e: 0x002db494, 0x1d0f: 0x002dfe94, + 0x1d10: 0x002e8294, 0x1d11: 0x002eda94, 0x1d12: 0x002ee294, 0x1d13: 0x002efa94, + 0x1d14: 0x002f0a94, 0x1d15: 0x002f0c94, 0x1d16: 0x002f2c94, 0x1d17: 0x00302c94, + 0x1d18: 0x00306c94, 0x1d19: 0x00307694, 0x1d1a: 0x0030a094, 0x1d1b: 0x0030be94, + 0x1d1c: 0x0031f694, 0x1d1d: 0x00325494, 0x1d1e: 0x00325694, 0x1d1f: 0x00325a94, + 0x1d20: 0x00329a94, 0x1d21: 0x00329c94, 0x1d22: 0x002d9a95, 0x1d23: 0x002f7a95, + 0x1d24: 0x00306c95, 0x1d25: 0x0030be95, 0x1d26: 0x00325495, 0x1d27: 0x00325695, + 0x1d28: 0x00328895, 0x1d29: 0x00329a95, 0x1d2a: 0x00329c95, 0x1d2b: 0x40307a20, + 0x1d2c: 0x402c2620, 0x1d2d: 0x402c6e20, 0x1d2e: 0x402d1220, 0x1d2f: 0x402e8c20, + 0x1d30: 0x402eb220, 0x1d31: 0x402f3a20, 0x1d32: 0x402f9620, 0x1d33: 0x402fce20, + 0x1d34: 0x402ff020, 0x1d35: 0x40304020, 0x1d36: 0x40313c20, 0x1d37: 0x402d5420, + 0x1d38: 0x0034ba94, 0x1d39: 0xe0000bd9, 0x1d3a: 0xe0000fc1, 0x1d3b: 0x402dbe20, + 0x1d3c: 0x402dca20, 0x1d3d: 0x402f3620, 0x1d3e: 0x40308420, 0x1d3f: 0x4030bc20, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x402c2820, 0x1d41: 0x402c7020, 0x1d42: 0x402d1420, 0x1d43: 0x402d4220, + 0x1d44: 0x402e0820, 0x1d45: 0x402e5220, 0x1d46: 0x402e8e20, 0x1d47: 0x402ec620, + 0x1d48: 0x402f3c20, 0x1d49: 0x402faa20, 0x1d4a: 0x402ff220, 0x1d4b: 0x40301020, + 0x1d4c: 0x4030ca20, 0x1d4d: 0x4030fe20, 0x1d4e: 0x40313e20, 0x1d4f: 0x402bea20, + 0x1d50: 0x402c0020, 0x1d51: 0x402c8220, 0x1d52: 0x402caa20, 0x1d53: 0x402cca20, + 0x1d54: 0x402ce420, 0x1d55: 0x402cc020, 0x1d56: 0x402dc020, 0x1d57: 0x402f0620, + 0x1d58: 0x40302220, 0x1d59: 0x40308620, 0x1d5a: 0x40317620, 0x1d5b: 0x002c0294, + 0x1d5c: 0x002c3a94, 0x1d5d: 0x002c5694, 0x1d5e: 0xf0001414, 0x1d5f: 0x002cdc94, + 0x1d60: 0x002d0894, 0x1d61: 0x002dee94, 0x1d62: 0x002d2a94, 0x1d63: 0x00308894, + 0x1d64: 0x002db694, 0x1d65: 0x002dc294, 0x1d66: 0x002daa94, 0x1d67: 0x002dbe94, + 0x1d68: 0x002de694, 0x1d69: 0x002e5494, 0x1d6a: 0x002e5294, 0x1d6b: 0x002e2a94, + 0x1d6c: 0x002e9094, 0x1d6d: 0x0030ac94, 0x1d6e: 0x002eb494, 0x1d6f: 0x002ec894, + 0x1d70: 0x002ea694, 0x1d71: 0x002f1094, 0x1d72: 0x002f4c94, 0x1d73: 0x002ff494, + 0x1d74: 0x00300894, 0x1d75: 0x00304294, 0x1d76: 0x00307c94, 0x1d77: 0x0030b494, + 0x1d78: 0x00307494, 0x1d79: 0x0030cc94, 0x1d7a: 0x0030da94, 0x1d7b: 0x00312a94, + 0x1d7c: 0x00314894, 0x1d7d: 0x00315094, 0x1d7e: 0x00316494, 0x1d7f: 0x00326a94, + // Block 0x76, offset 0x1d80 + 0x1d80: 0xae605f02, 0x1d81: 0xae605f02, 0x1d82: 0xadc06002, 0x1d83: 0xae605f02, + 0x1d84: 0xae605f02, 0x1d85: 0xae605f02, 0x1d86: 0xae605f02, 0x1d87: 0xae605f02, + 0x1d88: 0xae605f02, 0x1d89: 0xae605f02, 0x1d8a: 0x84dc17bd, 0x1d8b: 0xae605f02, + 0x1d8c: 0xae605f02, 0x1d8d: 0xaea05f02, 0x1d8e: 0xad605f02, 0x1d8f: 0xadc06002, + 0x1d90: 0xaca06002, 0x1d91: 0xae605f02, 0x1d92: 0x84e618d1, 0x1d93: 0xe00009b4, + 0x1d94: 0xe00009d9, 0x1d95: 0xe00009f9, 0x1d96: 0xe0000a08, 0x1d97: 0xe0000a50, + 0x1d98: 0xe0000ab6, 0x1d99: 0xe0000ab0, 0x1d9a: 0x84e61691, 0x1d9b: 0x84e61699, + 0x1d9c: 0x84e616ff, 0x1d9d: 0x84e61711, 0x1d9e: 0x84e61715, 0x1d9f: 0x84e61745, + 0x1da0: 0x84e6174f, 0x1da1: 0x84e61753, 0x1da2: 0x84e617c1, 0x1da3: 0x84e617c5, + 0x1da4: 0x84e617f3, 0x1da5: 0xe0000f67, 0x1da6: 0x84e61895, + 0x1dbc: 0xae906002, 0x1dbd: 0xadc06002, 0x1dbe: 0xae605f02, 0x1dbf: 0xadc06002, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xe00009b1, 0x1dc1: 0xe00009ae, 0x1dc2: 0xe0000a22, 0x1dc3: 0xe0000a1f, + 0x1dc4: 0xe0000a28, 0x1dc5: 0xe0000a25, 0x1dc6: 0xe0000a2e, 0x1dc7: 0xe0000a2b, + 0x1dc8: 0xe0000a5a, 0x1dc9: 0xe0000a56, 0x1dca: 0xe0000a8c, 0x1dcb: 0xe0000a89, + 0x1dcc: 0xe0000a98, 0x1dcd: 0xe0000a95, 0x1dce: 0xe0000aa4, 0x1dcf: 0xe0000aa1, + 0x1dd0: 0xe0000a92, 0x1dd1: 0xe0000a8f, 0x1dd2: 0xe0000a9e, 0x1dd3: 0xe0000a9b, + 0x1dd4: 0xe0000b55, 0x1dd5: 0xe0000b51, 0x1dd6: 0xe0000b4d, 0x1dd7: 0xe0000b49, + 0x1dd8: 0xe0000b7c, 0x1dd9: 0xe0000b79, 0x1dda: 0xe0000b82, 0x1ddb: 0xe0000b7f, + 0x1ddc: 0xe0000b39, 0x1ddd: 0xe0000b35, 0x1dde: 0xe0000b8c, 0x1ddf: 0xe0000b89, + 0x1de0: 0xe0000bd0, 0x1de1: 0xe0000bcd, 0x1de2: 0xe0000c00, 0x1de3: 0xe0000bfd, + 0x1de4: 0xe0000c0c, 0x1de5: 0xe0000c09, 0x1de6: 0xe0000bfa, 0x1de7: 0xe0000bf7, + 0x1de8: 0xe0000c06, 0x1de9: 0xe0000c03, 0x1dea: 0xe0000c12, 0x1deb: 0xe0000c0f, + 0x1dec: 0xe0000c7e, 0x1ded: 0xe0000c7b, 0x1dee: 0xe0000c4a, 0x1def: 0xe0000c46, + 0x1df0: 0xe0000c93, 0x1df1: 0xe0000c90, 0x1df2: 0xe0000cab, 0x1df3: 0xe0000ca8, + 0x1df4: 0xe0000cb1, 0x1df5: 0xe0000cae, 0x1df6: 0xe0000cde, 0x1df7: 0xe0000cdb, + 0x1df8: 0xe0000ce5, 0x1df9: 0xe0000ce1, 0x1dfa: 0xe0000cf2, 0x1dfb: 0xe0000cef, + 0x1dfc: 0xe0000cec, 0x1dfd: 0xe0000ce9, 0x1dfe: 0xe0000d1e, 0x1dff: 0xe0000d1b, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xe0000d24, 0x1e01: 0xe0000d21, 0x1e02: 0xe0000d2a, 0x1e03: 0xe0000d27, + 0x1e04: 0xe0000d69, 0x1e05: 0xe0000d66, 0x1e06: 0xe0000d7b, 0x1e07: 0xe0000d78, + 0x1e08: 0xe0000d87, 0x1e09: 0xe0000d84, 0x1e0a: 0xe0000d81, 0x1e0b: 0xe0000d7e, + 0x1e0c: 0xe0000ded, 0x1e0d: 0xe0000de9, 0x1e0e: 0xe0000df5, 0x1e0f: 0xe0000df1, + 0x1e10: 0xe0000e3d, 0x1e11: 0xe0000e39, 0x1e12: 0xe0000e35, 0x1e13: 0xe0000e31, + 0x1e14: 0xe0000ea7, 0x1e15: 0xe0000ea4, 0x1e16: 0xe0000ead, 0x1e17: 0xe0000eaa, + 0x1e18: 0xe0000ed6, 0x1e19: 0xe0000ed3, 0x1e1a: 0xe0000ef4, 0x1e1b: 0xe0000ef1, + 0x1e1c: 0xe0000efb, 0x1e1d: 0xe0000ef7, 0x1e1e: 0xe0000f02, 0x1e1f: 0xe0000eff, + 0x1e20: 0xe0000f41, 0x1e21: 0xe0000f3e, 0x1e22: 0xe0000f53, 0x1e23: 0xe0000f50, + 0x1e24: 0xe0000f26, 0x1e25: 0xe0000f22, 0x1e26: 0xe0000f3a, 0x1e27: 0xe0000f36, + 0x1e28: 0xe0000f5a, 0x1e29: 0xe0000f56, 0x1e2a: 0xe0000f93, 0x1e2b: 0xe0000f90, + 0x1e2c: 0xe0000f9f, 0x1e2d: 0xe0000f9c, 0x1e2e: 0xe0000fb1, 0x1e2f: 0xe0000fae, + 0x1e30: 0xe0000fab, 0x1e31: 0xe0000fa8, 0x1e32: 0xe0001093, 0x1e33: 0xe0001090, + 0x1e34: 0xe000109f, 0x1e35: 0xe000109c, 0x1e36: 0xe0001099, 0x1e37: 0xe0001096, + 0x1e38: 0xe0001032, 0x1e39: 0xe000102e, 0x1e3a: 0xe0001046, 0x1e3b: 0xe0001042, + 0x1e3c: 0xe00010a9, 0x1e3d: 0xe00010a6, 0x1e3e: 0xe00010af, 0x1e3f: 0xe00010ac, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xe00010d2, 0x1e41: 0xe00010cf, 0x1e42: 0xe00010cc, 0x1e43: 0xe00010c9, + 0x1e44: 0xe00010e1, 0x1e45: 0xe00010de, 0x1e46: 0xe00010e7, 0x1e47: 0xe00010e4, + 0x1e48: 0xe00010ed, 0x1e49: 0xe00010ea, 0x1e4a: 0xe00010fc, 0x1e4b: 0xe00010f9, + 0x1e4c: 0xe00010f6, 0x1e4d: 0xe00010f3, 0x1e4e: 0xe0001123, 0x1e4f: 0xe0001120, + 0x1e50: 0xe0001141, 0x1e51: 0xe000113e, 0x1e52: 0xe0001153, 0x1e53: 0xe0001150, + 0x1e54: 0xe0001159, 0x1e55: 0xe0001156, 0x1e56: 0xe0000c15, 0x1e57: 0xe0000f8d, + 0x1e58: 0xe00010db, 0x1e59: 0xe0001111, 0x1e5a: 0xf0000404, 0x1e5b: 0xe0000f70, + 0x1e5c: 0x40300420, 0x1e5d: 0x40300620, 0x1e5e: 0xe0000f7f, 0x1e5f: 0x402c9620, + 0x1e60: 0xe000099b, 0x1e61: 0xe0000998, 0x1e62: 0xe0000989, 0x1e63: 0xe0000986, + 0x1e64: 0xe0000928, 0x1e65: 0xe0000924, 0x1e66: 0xe0000930, 0x1e67: 0xe000092c, + 0x1e68: 0xe0000940, 0x1e69: 0xe000093c, 0x1e6a: 0xe0000938, 0x1e6b: 0xe0000934, + 0x1e6c: 0xe00009aa, 0x1e6d: 0xe00009a6, 0x1e6e: 0xe0000902, 0x1e6f: 0xe00008fe, + 0x1e70: 0xe000090a, 0x1e71: 0xe0000906, 0x1e72: 0xe000091a, 0x1e73: 0xe0000916, + 0x1e74: 0xe0000912, 0x1e75: 0xe000090e, 0x1e76: 0xe00009a2, 0x1e77: 0xe000099e, + 0x1e78: 0xe0000b6e, 0x1e79: 0xe0000b6b, 0x1e7a: 0xe0000b5c, 0x1e7b: 0xe0000b59, + 0x1e7c: 0xe0000b26, 0x1e7d: 0xe0000b23, 0x1e7e: 0xe0000afb, 0x1e7f: 0xe0000af7, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xe0000b03, 0x1e81: 0xe0000aff, 0x1e82: 0xe0000b13, 0x1e83: 0xe0000b0f, + 0x1e84: 0xe0000b0b, 0x1e85: 0xe0000b07, 0x1e86: 0xe0000b75, 0x1e87: 0xe0000b71, + 0x1e88: 0xe0000c66, 0x1e89: 0xe0000c63, 0x1e8a: 0xe0000c78, 0x1e8b: 0xe0000c75, + 0x1e8c: 0xe0000e84, 0x1e8d: 0xe0000e81, 0x1e8e: 0xe0000e44, 0x1e8f: 0xe0000e41, + 0x1e90: 0xe0000dad, 0x1e91: 0xe0000da9, 0x1e92: 0xe0000db5, 0x1e93: 0xe0000db1, + 0x1e94: 0xe0000dc5, 0x1e95: 0xe0000dc1, 0x1e96: 0xe0000dbd, 0x1e97: 0xe0000db9, + 0x1e98: 0xe0000e8b, 0x1e99: 0xe0000e87, 0x1e9a: 0xe0000e5d, 0x1e9b: 0xe0000e59, + 0x1e9c: 0xe0000e65, 0x1e9d: 0xe0000e61, 0x1e9e: 0xe0000e75, 0x1e9f: 0xe0000e71, + 0x1ea0: 0xe0000e6d, 0x1ea1: 0xe0000e69, 0x1ea2: 0xe0000e7d, 0x1ea3: 0xe0000e79, + 0x1ea4: 0xe000108d, 0x1ea5: 0xe000108a, 0x1ea6: 0xe000104d, 0x1ea7: 0xe000104a, + 0x1ea8: 0xe0001066, 0x1ea9: 0xe0001062, 0x1eaa: 0xe000106e, 0x1eab: 0xe000106a, + 0x1eac: 0xe000107e, 0x1ead: 0xe000107a, 0x1eae: 0xe0001076, 0x1eaf: 0xe0001072, + 0x1eb0: 0xe0001086, 0x1eb1: 0xe0001082, 0x1eb2: 0xe0001108, 0x1eb3: 0xe0001105, + 0x1eb4: 0xe0001135, 0x1eb5: 0xe0001132, 0x1eb6: 0xe000112f, 0x1eb7: 0xe000112c, + 0x1eb8: 0xe000111d, 0x1eb9: 0xe000111a, 0x1eba: 0xe0000d0a, 0x1ebb: 0xe0000d07, + 0x1ebc: 0x0030d888, 0x1ebd: 0x4030d820, 0x1ebe: 0x00312088, 0x1ebf: 0x40312020, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xe0001165, 0x1ec1: 0xe00011a9, 0x1ec2: 0xe000117d, 0x1ec3: 0xe00011c1, + 0x1ec4: 0xe000116b, 0x1ec5: 0xe00011af, 0x1ec6: 0xe000118f, 0x1ec7: 0xe00011d3, + 0x1ec8: 0xe0001168, 0x1ec9: 0xe00011ac, 0x1eca: 0xe0001181, 0x1ecb: 0xe00011c5, + 0x1ecc: 0xe000116f, 0x1ecd: 0xe00011b3, 0x1ece: 0xe0001193, 0x1ecf: 0xe00011d7, + 0x1ed0: 0xe000121a, 0x1ed1: 0xe0001230, 0x1ed2: 0xe0001228, 0x1ed3: 0xe000123e, + 0x1ed4: 0xe0001220, 0x1ed5: 0xe0001236, + 0x1ed8: 0xe000121d, 0x1ed9: 0xe0001233, 0x1eda: 0xe000122c, 0x1edb: 0xe0001242, + 0x1edc: 0xe0001224, 0x1edd: 0xe000123a, + 0x1ee0: 0xe0001252, 0x1ee1: 0xe0001296, 0x1ee2: 0xe000126a, 0x1ee3: 0xe00012ae, + 0x1ee4: 0xe0001258, 0x1ee5: 0xe000129c, 0x1ee6: 0xe000127c, 0x1ee7: 0xe00012c0, + 0x1ee8: 0xe0001255, 0x1ee9: 0xe0001299, 0x1eea: 0xe000126e, 0x1eeb: 0xe00012b2, + 0x1eec: 0xe000125c, 0x1eed: 0xe00012a0, 0x1eee: 0xe0001280, 0x1eef: 0xe00012c4, + 0x1ef0: 0xe00012fb, 0x1ef1: 0xe0001319, 0x1ef2: 0xe0001309, 0x1ef3: 0xe0001327, + 0x1ef4: 0xe0001301, 0x1ef5: 0xe000131f, 0x1ef6: 0xe0001311, 0x1ef7: 0xe000132f, + 0x1ef8: 0xe00012fe, 0x1ef9: 0xe000131c, 0x1efa: 0xe000130d, 0x1efb: 0xe000132b, + 0x1efc: 0xe0001305, 0x1efd: 0xe0001323, 0x1efe: 0xe0001315, 0x1eff: 0xe0001333, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xe000136c, 0x1f01: 0xe0001382, 0x1f02: 0xe000137a, 0x1f03: 0xe0001390, + 0x1f04: 0xe0001372, 0x1f05: 0xe0001388, + 0x1f08: 0xe000136f, 0x1f09: 0xe0001385, 0x1f0a: 0xe000137e, 0x1f0b: 0xe0001394, + 0x1f0c: 0xe0001376, 0x1f0d: 0xe000138c, + 0x1f10: 0xe00013ad, 0x1f11: 0xe00013bc, 0x1f12: 0xe00013b4, 0x1f13: 0xe00013ca, + 0x1f14: 0xe00013b0, 0x1f15: 0xe00013c2, 0x1f16: 0xe00013b8, 0x1f17: 0xe00013d2, + 0x1f19: 0xe00013bf, 0x1f1b: 0xe00013ce, + 0x1f1d: 0xe00013c6, 0x1f1f: 0xe00013d6, + 0x1f20: 0xe0001407, 0x1f21: 0xe000144b, 0x1f22: 0xe000141f, 0x1f23: 0xe0001463, + 0x1f24: 0xe000140d, 0x1f25: 0xe0001451, 0x1f26: 0xe0001431, 0x1f27: 0xe0001475, + 0x1f28: 0xe000140a, 0x1f29: 0xe000144e, 0x1f2a: 0xe0001423, 0x1f2b: 0xe0001467, + 0x1f2c: 0xe0001411, 0x1f2d: 0xe0001455, 0x1f2e: 0xe0001435, 0x1f2f: 0xe0001479, + 0x1f30: 0xe00011f7, 0x1f31: 0xe00011ed, 0x1f32: 0xe000124c, 0x1f33: 0xe0001246, + 0x1f34: 0xe00012e4, 0x1f35: 0xe00012da, 0x1f36: 0xe000133d, 0x1f37: 0xe0001337, + 0x1f38: 0xe000139e, 0x1f39: 0xe0001398, 0x1f3a: 0xe00013e0, 0x1f3b: 0xe00013da, + 0x1f3c: 0xe0001499, 0x1f3d: 0xe000148f, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xe00011a1, 0x1f41: 0xe00011e5, 0x1f42: 0xe0001185, 0x1f43: 0xe00011c9, + 0x1f44: 0xe0001173, 0x1f45: 0xe00011b7, 0x1f46: 0xe0001197, 0x1f47: 0xe00011db, + 0x1f48: 0xe00011a5, 0x1f49: 0xe00011e9, 0x1f4a: 0xe000118a, 0x1f4b: 0xe00011ce, + 0x1f4c: 0xe0001178, 0x1f4d: 0xe00011bc, 0x1f4e: 0xe000119c, 0x1f4f: 0xe00011e0, + 0x1f50: 0xe000128e, 0x1f51: 0xe00012d2, 0x1f52: 0xe0001272, 0x1f53: 0xe00012b6, + 0x1f54: 0xe0001260, 0x1f55: 0xe00012a4, 0x1f56: 0xe0001284, 0x1f57: 0xe00012c8, + 0x1f58: 0xe0001292, 0x1f59: 0xe00012d6, 0x1f5a: 0xe0001277, 0x1f5b: 0xe00012bb, + 0x1f5c: 0xe0001265, 0x1f5d: 0xe00012a9, 0x1f5e: 0xe0001289, 0x1f5f: 0xe00012cd, + 0x1f60: 0xe0001443, 0x1f61: 0xe0001487, 0x1f62: 0xe0001427, 0x1f63: 0xe000146b, + 0x1f64: 0xe0001415, 0x1f65: 0xe0001459, 0x1f66: 0xe0001439, 0x1f67: 0xe000147d, + 0x1f68: 0xe0001447, 0x1f69: 0xe000148b, 0x1f6a: 0xe000142c, 0x1f6b: 0xe0001470, + 0x1f6c: 0xe000141a, 0x1f6d: 0xe000145e, 0x1f6e: 0xe000143e, 0x1f6f: 0xe0001482, + 0x1f70: 0xe0001201, 0x1f71: 0xe000120e, 0x1f72: 0xe00011fd, 0x1f73: 0xe0001214, + 0x1f74: 0xe00011f3, 0x1f76: 0xe0001207, 0x1f77: 0xe000120a, + 0x1f78: 0xe0001204, 0x1f79: 0xe0001211, 0x1f7a: 0xe00011fa, 0x1f7b: 0xe00011f0, + 0x1f7c: 0xe0001217, 0x1f7d: 0x40063620, 0x1f7e: 0x40326c20, 0x1f7f: 0x40063620, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x40063a20, 0x1f81: 0xe00000b1, 0x1f82: 0xe00012ea, 0x1f83: 0xe00012f5, + 0x1f84: 0xe00012e0, 0x1f86: 0xe00012ee, 0x1f87: 0xe00012f1, + 0x1f88: 0xe000124f, 0x1f89: 0xe0001249, 0x1f8a: 0xe00012e7, 0x1f8b: 0xe00012dd, + 0x1f8c: 0xe00012f8, 0x1f8d: 0xe00000b7, 0x1f8e: 0xe00000b4, 0x1f8f: 0xe00000ba, + 0x1f90: 0xe0001343, 0x1f91: 0xe000135e, 0x1f92: 0xe0001356, 0x1f93: 0xe0001352, + 0x1f96: 0xe0001349, 0x1f97: 0xe000135a, + 0x1f98: 0xe0001346, 0x1f99: 0xe0001361, 0x1f9a: 0xe0001340, 0x1f9b: 0xe000133a, + 0x1f9d: 0xe00000c0, 0x1f9e: 0xe00000bd, 0x1f9f: 0xe00000c3, + 0x1fa0: 0xe00013e6, 0x1fa1: 0xe0001401, 0x1fa2: 0xe00013f9, 0x1fa3: 0xe00013f5, + 0x1fa4: 0xe00013a4, 0x1fa5: 0xe00013a7, 0x1fa6: 0xe00013ec, 0x1fa7: 0xe00013fd, + 0x1fa8: 0xe00013e9, 0x1fa9: 0xe0001404, 0x1faa: 0xe00013e3, 0x1fab: 0xe00013dd, + 0x1fac: 0xe00013aa, 0x1fad: 0xe00000ae, 0x1fae: 0xe00000ab, 0x1faf: 0x40061e20, + 0x1fb2: 0xe000149f, 0x1fb3: 0xe00014aa, + 0x1fb4: 0xe0001495, 0x1fb6: 0xe00014a3, 0x1fb7: 0xe00014a6, + 0x1fb8: 0xe00013a1, 0x1fb9: 0xe000139b, 0x1fba: 0xe000149c, 0x1fbb: 0xe0001492, + 0x1fbc: 0xe00014ad, 0x1fbd: 0x40062020, 0x1fbe: 0x40063820, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x00021284, 0x1fc1: 0x00021284, 0x1fc2: 0x00021284, 0x1fc3: 0x00021284, + 0x1fc4: 0x00021284, 0x1fc5: 0x00021284, 0x1fc6: 0x00021284, 0x1fc7: 0x0002129b, + 0x1fc8: 0x00021284, 0x1fc9: 0x00021284, 0x1fca: 0x00021284, 0x1fcb: 0xa0000000, + 0x1fcc: 0xa0000000, 0x1fcd: 0xa0000000, 0x1fce: 0xa0000000, 0x1fcf: 0xa0000000, + 0x1fd0: 0x40022620, 0x1fd1: 0x0002269b, 0x1fd2: 0x40022820, 0x1fd3: 0x40022a20, + 0x1fd4: 0x40022c20, 0x1fd5: 0x40022e20, 0x1fd6: 0x4004c420, 0x1fd7: 0x40021820, + 0x1fd8: 0x4003d420, 0x1fd9: 0x4003d620, 0x1fda: 0x4003d820, 0x1fdb: 0x4003da20, + 0x1fdc: 0x4003e220, 0x1fdd: 0x4003e420, 0x1fde: 0x4003e620, 0x1fdf: 0x4003e820, + 0x1fe0: 0x4004f820, 0x1fe1: 0x4004fa20, 0x1fe2: 0x40050220, 0x1fe3: 0x40050420, + 0x1fe4: 0x0002e484, 0x1fe5: 0xf0001f04, 0x1fe6: 0xf0000404, 0x1fe7: 0x40050620, + 0x1fe8: 0x40020e20, 0x1fe9: 0x40021020, 0x1fea: 0xa0000000, 0x1feb: 0xa0000000, + 0x1fec: 0xa0000000, 0x1fed: 0xa0000000, 0x1fee: 0xa0000000, 0x1fef: 0x0002129b, + 0x1ff0: 0x4004f020, 0x1ff1: 0x4004f420, 0x1ff2: 0x40050e20, 0x1ff3: 0xf0001f04, + 0x1ff4: 0xf0000404, 0x1ff5: 0x40051020, 0x1ff6: 0xf0001f04, 0x1ff7: 0xf0000404, + 0x1ff8: 0x40051620, 0x1ff9: 0x4003dc20, 0x1ffa: 0x4003de20, 0x1ffb: 0x40051820, + 0x1ffc: 0xf0001f04, 0x1ffd: 0x4002e020, 0x1ffe: 0x40021420, 0x1fff: 0x40051a20, + // Block 0x80, offset 0x2000 + 0x2000: 0x40051e20, 0x2001: 0x40052220, 0x2002: 0x40052420, 0x2003: 0x40050820, + 0x2004: 0x40095820, 0x2005: 0x40040c20, 0x2006: 0x40040e20, 0x2007: 0xf0001f04, + 0x2008: 0xf0001f04, 0x2009: 0xf0001f04, 0x200a: 0x4004e820, 0x200b: 0x4004d420, + 0x200c: 0x40050a20, 0x200d: 0x40050c20, 0x200e: 0x4004da20, 0x200f: 0x40026620, + 0x2010: 0x40052020, 0x2011: 0x4004dc20, 0x2012: 0x40095020, 0x2013: 0x40023420, + 0x2014: 0x40051c20, 0x2015: 0x40039c20, 0x2016: 0x40039e20, 0x2017: 0xe00000a6, + 0x2018: 0x4003a020, 0x2019: 0x4003a220, 0x201a: 0x4003a420, 0x201b: 0x4003a620, + 0x201c: 0x4003a820, 0x201d: 0x4003aa20, 0x201e: 0x4003ac20, 0x201f: 0x00021284, + 0x2020: 0xa0000000, 0x2021: 0xa0000000, 0x2022: 0xa0000000, 0x2023: 0xa0000000, + 0x2024: 0xa0000000, + 0x202a: 0xa0000000, 0x202b: 0xa0000000, + 0x202c: 0xa0000000, 0x202d: 0xa0000000, 0x202e: 0xa0000000, 0x202f: 0xa0000000, + 0x2030: 0x0029cc94, 0x2031: 0x002d9a94, + 0x2034: 0x0029d494, 0x2035: 0x0029d694, 0x2036: 0x0029d894, 0x2037: 0x0029da94, + 0x2038: 0x0029dc94, 0x2039: 0x0029de94, 0x203a: 0x00093894, 0x203b: 0x00094e94, + 0x203c: 0x00094294, 0x203d: 0x0003f494, 0x203e: 0x0003f694, 0x203f: 0x002e9e94, + // Block 0x81, offset 0x2040 + 0x2040: 0x0029cc95, 0x2041: 0x0029ce95, 0x2042: 0x0029d095, 0x2043: 0x0029d295, + 0x2044: 0x0029d495, 0x2045: 0x0029d695, 0x2046: 0x0029d895, 0x2047: 0x0029da95, + 0x2048: 0x0029dc95, 0x2049: 0x0029de95, 0x204a: 0x00093895, 0x204b: 0x00094e95, + 0x204c: 0x00094295, 0x204d: 0x0003f495, 0x204e: 0x0003f695, + 0x2050: 0x002bde95, 0x2051: 0x002c9895, 0x2052: 0x002ee295, 0x2053: 0x0030f695, + 0x2054: 0x002cb895, 0x2055: 0x002d6895, 0x2056: 0x002dfe95, 0x2057: 0x002e2295, + 0x2058: 0x002e8295, 0x2059: 0x002e9e95, 0x205a: 0x002f2c95, 0x205b: 0x002fe695, + 0x205c: 0x00302c95, + 0x2060: 0x4027f820, 0x2061: 0x4027fa20, 0x2062: 0x4027fc20, 0x2063: 0x4027fe20, + 0x2064: 0x40280020, 0x2065: 0x40280220, 0x2066: 0x40280420, 0x2067: 0x40280620, + 0x2068: 0x40282c20, 0x2069: 0x40280820, 0x206a: 0x40280a20, 0x206b: 0x40280c20, + 0x206c: 0x40280e20, 0x206d: 0x40281020, 0x206e: 0x40281220, 0x206f: 0x40281420, + 0x2070: 0x40281620, 0x2071: 0x40281820, 0x2072: 0x40281a20, 0x2073: 0x40281c20, + 0x2074: 0x40281e20, 0x2075: 0x40282020, 0x2076: 0x40282220, 0x2077: 0x40282420, + 0x2078: 0x40282620, 0x2079: 0x40282820, 0x207a: 0x40282a20, + // Block 0x82, offset 0x2080 + 0x2090: 0xae612a02, 0x2091: 0xae612b02, 0x2092: 0xa0112c02, 0x2093: 0xa0112c02, + 0x2094: 0xae612d02, 0x2095: 0xae612e02, 0x2096: 0xae612f02, 0x2097: 0xae613002, + 0x2098: 0xa0106102, 0x2099: 0xa0106102, 0x209a: 0xa0106102, 0x209b: 0xae613102, + 0x209c: 0xae613202, 0x209d: 0xa0006202, 0x209e: 0xa0006202, 0x209f: 0xa0006202, + 0x20a0: 0xa0006202, 0x20a1: 0xae613302, 0x20a2: 0xa0006202, 0x20a3: 0xa0006202, + 0x20a4: 0xa0006202, 0x20a5: 0xa0106102, 0x20a6: 0xa0113402, 0x20a7: 0xae613502, + 0x20a8: 0xadc13602, 0x20a9: 0xae613702, 0x20aa: 0xa0106102, 0x20ab: 0xa0106102, + 0x20ac: 0xadc06002, 0x20ad: 0xadc06002, 0x20ae: 0xadc06002, 0x20af: 0xadc06002, + 0x20b0: 0xae605f02, + // Block 0x83, offset 0x20c0 + 0x20c0: 0xe00009bc, 0x20c1: 0xe00009c0, 0x20c2: 0x002c3a8b, 0x20c3: 0xf0000a04, + 0x20c4: 0x40081c20, 0x20c5: 0xe0000a5e, 0x20c6: 0xe0000a62, 0x20c7: 0x002cc28a, + 0x20c8: 0x40081e20, 0x20c9: 0xf0000a04, 0x20ca: 0x002d2285, 0x20cb: 0x002d688b, + 0x20cc: 0x002d688b, 0x20cd: 0x002d688b, 0x20ce: 0x002d6885, 0x20cf: 0xf0000202, + 0x20d0: 0x002d9a8b, 0x20d1: 0x002d9a8b, 0x20d2: 0x002e228b, 0x20d3: 0x002e2285, + 0x20d4: 0x40082020, 0x20d5: 0x002e9e8b, 0x20d6: 0xf000040a, 0x20d7: 0x40082220, + 0x20d8: 0x40082420, 0x20d9: 0x002f2c8b, 0x20da: 0x002f568b, 0x20db: 0x002f7a8b, + 0x20dc: 0x002f7a8b, 0x20dd: 0x002f7a8b, 0x20de: 0x40082620, 0x20df: 0x40082820, + 0x20e0: 0xf0001414, 0x20e1: 0xe0000fbd, 0x20e2: 0xf0001414, 0x20e3: 0x40082a20, + 0x20e4: 0x00312a8b, 0x20e5: 0x40082c20, 0x20e6: 0x0032a288, 0x20e7: 0x40082e20, + 0x20e8: 0x00312a8b, 0x20e9: 0x40083020, 0x20ea: 0x002dfe88, 0x20eb: 0xe000094d, + 0x20ec: 0x002c0a8b, 0x20ed: 0x002c3a8b, 0x20ee: 0x40083220, 0x20ef: 0x002c9885, + 0x20f0: 0x002c988b, 0x20f1: 0x002d088b, 0x20f2: 0x002d1e88, 0x20f3: 0x002e828b, + 0x20f4: 0x002ee285, 0x20f5: 0x00389084, 0x20f6: 0x00389284, 0x20f7: 0x00389484, + 0x20f8: 0x00389684, 0x20f9: 0x002d9a85, 0x20fa: 0x40083420, 0x20fb: 0xe0000b95, + 0x20fc: 0x00327e85, 0x20fd: 0x00325685, 0x20fe: 0x0032568b, 0x20ff: 0x00327e8b, + // Block 0x84, offset 0x2100 + 0x2100: 0x00093685, 0x2101: 0x40083620, 0x2102: 0x40083820, 0x2103: 0x40083a20, + 0x2104: 0x40083c20, 0x2105: 0x002c628b, 0x2106: 0x002c6285, 0x2107: 0x002c9885, + 0x2108: 0x002d9a85, 0x2109: 0x002dcc85, 0x210a: 0x40083e20, 0x210b: 0x400a6e20, + 0x210c: 0x40084020, 0x210d: 0xe00009c4, 0x210e: 0x402d1e20, 0x210f: 0x40084220, + 0x2110: 0xe00002cb, 0x2111: 0xe00002d3, 0x2112: 0xe00002b2, 0x2113: 0xe00002bb, + 0x2114: 0xe00003cd, 0x2115: 0xe00002c3, 0x2116: 0xe00003d1, 0x2117: 0xe00004ab, + 0x2118: 0xe0000579, 0x2119: 0xe00002c7, 0x211a: 0xe0000640, 0x211b: 0xe00002cf, + 0x211c: 0xe00004af, 0x211d: 0xe0000644, 0x211e: 0xe0000798, 0x211f: 0xf0001e1e, + 0x2120: 0x002d9a8a, 0x2121: 0xf0001f0a, 0x2122: 0xf0000a0a, 0x2123: 0xf0001f0a, + 0x2124: 0x0030be8a, 0x2125: 0xf0001f0a, 0x2126: 0xf0000a0a, 0x2127: 0xe00010bb, + 0x2128: 0xf0001f0a, 0x2129: 0x0030f68a, 0x212a: 0xf0001f0a, 0x212b: 0xf0000a0a, + 0x212c: 0x002e228a, 0x212d: 0x002c3a8a, 0x212e: 0x002c628a, 0x212f: 0x002e828a, + 0x2130: 0x002d9a84, 0x2131: 0xf0001f04, 0x2132: 0xf0000404, 0x2133: 0xf0001f04, + 0x2134: 0x0030be84, 0x2135: 0xf0001f04, 0x2136: 0xf0000404, 0x2137: 0xe00010b6, + 0x2138: 0xf0001f04, 0x2139: 0x0030f684, 0x213a: 0xf0001f04, 0x213b: 0xf0000404, + 0x213c: 0x002e2284, 0x213d: 0x002c3a84, 0x213e: 0x002c6284, 0x213f: 0x002e8284, + // Block 0x85, offset 0x2140 + 0x2140: 0x40287c20, 0x2141: 0x40287e20, 0x2142: 0x40288020, 0x2143: 0x002c5e88, + 0x2144: 0x402c5e20, 0x2145: 0xe00006c9, 0x2146: 0x40288220, 0x2147: 0x40288420, + 0x2148: 0x40288620, 0x2149: 0xe00001e2, + 0x2150: 0x40084420, 0x2151: 0x40084820, 0x2152: 0x40084620, 0x2153: 0x40084a20, + 0x2154: 0x40084c20, 0x2155: 0x40084e20, 0x2156: 0x40085020, 0x2157: 0x40085220, + 0x2158: 0x40085420, 0x2159: 0x40085620, 0x215a: 0xe00000c6, 0x215b: 0xe00000c9, + 0x215c: 0x40085820, 0x215d: 0x40085a20, 0x215e: 0x40085c20, 0x215f: 0x40085e20, + 0x2160: 0x40086020, 0x2161: 0x40086220, 0x2162: 0x40086420, 0x2163: 0x40086620, + 0x2164: 0x40086820, 0x2165: 0x40086a20, 0x2166: 0x40086c20, 0x2167: 0x40086e20, + 0x2168: 0x40087020, 0x2169: 0x40087220, 0x216a: 0x40087420, 0x216b: 0x40087620, + 0x216c: 0x40087820, 0x216d: 0x40087a20, 0x216e: 0xe00000cc, 0x216f: 0x40087c20, + 0x2170: 0x40087e20, 0x2171: 0x40088020, 0x2172: 0x40088220, 0x2173: 0x40088420, + 0x2174: 0x40088620, 0x2175: 0x40088820, 0x2176: 0x40088a20, 0x2177: 0x40088c20, + 0x2178: 0x40088e20, 0x2179: 0x40089020, 0x217a: 0x40089220, 0x217b: 0x40089420, + 0x217c: 0x40089620, 0x217d: 0x40089820, 0x217e: 0x40089a20, 0x217f: 0x40089c20, + // Block 0x86, offset 0x2180 + 0x2180: 0x40089e20, 0x2181: 0x4008a020, 0x2182: 0x4008a220, 0x2183: 0x4008a420, + 0x2184: 0x4008a620, 0x2185: 0x4008a820, 0x2186: 0x4008aa20, 0x2187: 0x4008ac20, + 0x2188: 0x4008ae20, 0x2189: 0x4008b020, 0x218a: 0x4008b220, 0x218b: 0x4008b420, + 0x218c: 0x4008b620, 0x218d: 0xe00000cf, 0x218e: 0xe00000d5, 0x218f: 0xe00000d2, + 0x2190: 0x4008b820, 0x2191: 0x4008ba20, 0x2192: 0x4008bc20, 0x2193: 0x4008be20, + 0x2194: 0x4008c020, 0x2195: 0x4008c220, 0x2196: 0x4008c420, 0x2197: 0x4008c620, + 0x2198: 0x4008c820, 0x2199: 0x4008ca20, 0x219a: 0x4008cc20, 0x219b: 0x4008ce20, + 0x219c: 0x4008d020, 0x219d: 0x4008d220, 0x219e: 0x4008d420, 0x219f: 0x4008d620, + 0x21a0: 0x4008d820, 0x21a1: 0x4008da20, 0x21a2: 0x4008dc20, 0x21a3: 0x4008de20, + 0x21a4: 0x4008e020, 0x21a5: 0x4008e220, 0x21a6: 0x4008e420, 0x21a7: 0x4008e620, + 0x21a8: 0x4008e820, 0x21a9: 0x4008ea20, 0x21aa: 0x4008ec20, 0x21ab: 0x4008ee20, + 0x21ac: 0x4008f020, 0x21ad: 0x4008f220, 0x21ae: 0x4008f420, 0x21af: 0x4008f620, + 0x21b0: 0x4008f820, 0x21b1: 0x4008fa20, 0x21b2: 0x4008fc20, 0x21b3: 0x4008fe20, + 0x21b4: 0x40090020, 0x21b5: 0x40090220, 0x21b6: 0x40090420, 0x21b7: 0x40090620, + 0x21b8: 0x40090820, 0x21b9: 0x40090a20, 0x21ba: 0x40090c20, 0x21bb: 0x40090e20, + 0x21bc: 0x40091020, 0x21bd: 0x40091220, 0x21be: 0x40091420, 0x21bf: 0x40091620, + // Block 0x87, offset 0x21c0 + 0x21c0: 0x40091820, 0x21c1: 0x40091a20, 0x21c2: 0x40091c20, 0x21c3: 0x40091e20, + 0x21c4: 0xe00000d8, 0x21c5: 0x40092020, 0x21c6: 0x40092220, 0x21c7: 0x40092420, + 0x21c8: 0x40092620, 0x21c9: 0xe00000db, 0x21ca: 0x40092820, 0x21cb: 0x40092a20, + 0x21cc: 0xe00000de, 0x21cd: 0x40092c20, 0x21ce: 0x40093020, 0x21cf: 0x40093220, + 0x21d0: 0x40093420, 0x21d1: 0x40093620, 0x21d2: 0x40094e20, 0x21d3: 0x40095220, + 0x21d4: 0x40095420, 0x21d5: 0x40095620, 0x21d6: 0x40095a20, 0x21d7: 0x40095c20, + 0x21d8: 0x40095e20, 0x21d9: 0x40096020, 0x21da: 0x40096220, 0x21db: 0x40096420, + 0x21dc: 0x40096820, 0x21dd: 0x40096c20, 0x21de: 0x40096e20, 0x21df: 0x40097020, + 0x21e0: 0x40097220, 0x21e1: 0x40097420, 0x21e2: 0x40097620, 0x21e3: 0x40097820, + 0x21e4: 0xe00000ea, 0x21e5: 0x40097a20, 0x21e6: 0xe00000ed, 0x21e7: 0x40097c20, + 0x21e8: 0x40097e20, 0x21e9: 0x40098020, 0x21ea: 0x40098220, 0x21eb: 0x40098420, + 0x21ec: 0xf0001f04, 0x21ed: 0xf0000404, 0x21ee: 0x40098620, 0x21ef: 0xf0001f04, + 0x21f0: 0xf0000404, 0x21f1: 0x40098820, 0x21f2: 0x40098a20, 0x21f3: 0x40098c20, + 0x21f4: 0x40098e20, 0x21f5: 0x40099020, 0x21f6: 0x40099220, 0x21f7: 0x40099420, + 0x21f8: 0x40099620, 0x21f9: 0x40099820, 0x21fa: 0x40099a20, 0x21fb: 0x40099c20, + 0x21fc: 0x40099e20, 0x21fd: 0x4009a020, 0x21fe: 0x4009a220, 0x21ff: 0x4009a420, + // Block 0x88, offset 0x2200 + 0x2200: 0x4009a620, 0x2201: 0xe00000f5, 0x2202: 0x4009a820, 0x2203: 0x4009aa20, + 0x2204: 0xe00000f8, 0x2205: 0x4009ac20, 0x2206: 0x4009ae20, 0x2207: 0xe00000fb, + 0x2208: 0x4009b020, 0x2209: 0xe00000fe, 0x220a: 0x4009b220, 0x220b: 0x4009b420, + 0x220c: 0x4009b620, 0x220d: 0x4009b820, 0x220e: 0x4009ba20, 0x220f: 0x4009bc20, + 0x2210: 0x4009be20, 0x2211: 0x4009c020, 0x2212: 0x4009c220, 0x2213: 0x4009c420, + 0x2214: 0x4009c620, 0x2215: 0x4009c820, 0x2216: 0x4009ca20, 0x2217: 0x4009cc20, + 0x2218: 0x4009ce20, 0x2219: 0x4009d020, 0x221a: 0x4009d220, 0x221b: 0x4009d420, + 0x221c: 0x4009d620, 0x221d: 0x4009d820, 0x221e: 0x4009da20, 0x221f: 0x4009dc20, + 0x2220: 0xe00000e4, 0x2221: 0x4009de20, 0x2222: 0xe0000104, 0x2223: 0x4009e020, + 0x2224: 0x4009e220, 0x2225: 0x4009e420, 0x2226: 0x4009e620, 0x2227: 0x4009e820, + 0x2228: 0x4009ea20, 0x2229: 0x4009ec20, 0x222a: 0x4009ee20, 0x222b: 0x4009f020, + 0x222c: 0x4009f220, 0x222d: 0xe0000101, 0x222e: 0xe00000e1, 0x222f: 0xe00000e7, + 0x2230: 0xe0000107, 0x2231: 0xe000010a, 0x2232: 0x4009f420, 0x2233: 0x4009f620, + 0x2234: 0xe000010d, 0x2235: 0xe0000110, 0x2236: 0x4009f820, 0x2237: 0x4009fa20, + 0x2238: 0xe0000113, 0x2239: 0xe0000116, 0x223a: 0x4009fc20, 0x223b: 0x4009fe20, + 0x223c: 0x400a0020, 0x223d: 0x400a0220, 0x223e: 0x400a0420, 0x223f: 0x400a0620, + // Block 0x89, offset 0x2240 + 0x2240: 0xe0000119, 0x2241: 0xe000011c, 0x2242: 0x400a0820, 0x2243: 0x400a0a20, + 0x2244: 0xe0000125, 0x2245: 0xe0000128, 0x2246: 0x400a0c20, 0x2247: 0x400a0e20, + 0x2248: 0xe000012b, 0x2249: 0xe000012e, 0x224a: 0x400a1020, 0x224b: 0x400a1220, + 0x224c: 0x400a1420, 0x224d: 0x400a1620, 0x224e: 0x400a1820, 0x224f: 0x400a1a20, + 0x2250: 0x400a1c20, 0x2251: 0x400a1e20, 0x2252: 0x400a2020, 0x2253: 0x400a2220, + 0x2254: 0x400a2420, 0x2255: 0x400a2620, 0x2256: 0x400a2820, 0x2257: 0x400a2a20, + 0x2258: 0x400a2c20, 0x2259: 0x400a2e20, 0x225a: 0x400a3020, 0x225b: 0x400a3220, + 0x225c: 0x400a3420, 0x225d: 0x400a3620, 0x225e: 0x400a3820, 0x225f: 0x400a3a20, + 0x2260: 0x400a3c20, 0x2261: 0x400a3e20, 0x2262: 0x400a4020, 0x2263: 0x400a4220, + 0x2264: 0x400a4420, 0x2265: 0x400a4620, 0x2266: 0x400a4820, 0x2267: 0x400a4a20, + 0x2268: 0x400a4c20, 0x2269: 0x400a4e20, 0x226a: 0x400a5020, 0x226b: 0x400a5220, + 0x226c: 0xe0000137, 0x226d: 0xe000013a, 0x226e: 0xe000013d, 0x226f: 0xe0000140, + 0x2270: 0x400a5420, 0x2271: 0x400a5620, 0x2272: 0x400a5820, 0x2273: 0x400a5a20, + 0x2274: 0x400a5c20, 0x2275: 0x400a5e20, 0x2276: 0x400a6020, 0x2277: 0x400a6220, + 0x2278: 0x400a6420, 0x2279: 0x400a6620, 0x227a: 0x400a6820, 0x227b: 0x400a6a20, + 0x227c: 0x400a6c20, 0x227d: 0x400a7020, 0x227e: 0x400a7220, 0x227f: 0x400a7420, + // Block 0x8a, offset 0x2280 + 0x2280: 0x400a7620, 0x2281: 0x400a7820, 0x2282: 0x400a7a20, 0x2283: 0x400a7c20, + 0x2284: 0x400a7e20, 0x2285: 0x400a8020, 0x2286: 0x400a8220, 0x2287: 0x400a8420, + 0x2288: 0x400a8620, 0x2289: 0x400a8820, 0x228a: 0x400a8a20, 0x228b: 0x400a8c20, + 0x228c: 0x400a8e20, 0x228d: 0x400a9020, 0x228e: 0x400a9220, 0x228f: 0x400a9420, + 0x2290: 0x400a9620, 0x2291: 0x400a9820, 0x2292: 0x400a9a20, 0x2293: 0x400a9c20, + 0x2294: 0x400a9e20, 0x2295: 0x400aa020, 0x2296: 0x400aa220, 0x2297: 0x400aa420, + 0x2298: 0x400aa620, 0x2299: 0x400aa820, 0x229a: 0x400aaa20, 0x229b: 0x400aac20, + 0x229c: 0x400aae20, 0x229d: 0x400ab020, 0x229e: 0x400ab220, 0x229f: 0x400ab420, + 0x22a0: 0xe000011f, 0x22a1: 0xe0000122, 0x22a2: 0xe0000131, 0x22a3: 0xe0000134, + 0x22a4: 0x400ab620, 0x22a5: 0x400ab820, 0x22a6: 0x400aba20, 0x22a7: 0x400abc20, + 0x22a8: 0x400abe20, 0x22a9: 0x400ac020, 0x22aa: 0xe0000143, 0x22ab: 0xe0000146, + 0x22ac: 0xe0000149, 0x22ad: 0xe000014c, 0x22ae: 0x400ac220, 0x22af: 0x400ac420, + 0x22b0: 0x400ac620, 0x22b1: 0x400ac820, 0x22b2: 0x400aca20, 0x22b3: 0x400acc20, + 0x22b4: 0x400ace20, 0x22b5: 0x400ad020, 0x22b6: 0x400ad220, 0x22b7: 0x400ad420, + 0x22b8: 0x400ad620, 0x22b9: 0x400ad820, 0x22ba: 0x400ada20, 0x22bb: 0x400adc20, + 0x22bc: 0x400ade20, 0x22bd: 0x400ae020, 0x22be: 0x400ae220, 0x22bf: 0x400ae420, + // Block 0x8b, offset 0x22c0 + 0x22c0: 0x400ae620, 0x22c1: 0x400ae820, 0x22c2: 0x400aea20, 0x22c3: 0x400aec20, + 0x22c4: 0x400aee20, 0x22c5: 0x400af020, 0x22c6: 0x400af220, 0x22c7: 0x400af420, + 0x22c8: 0x400af620, 0x22c9: 0x400af820, 0x22ca: 0x400afa20, 0x22cb: 0x400afc20, + 0x22cc: 0x400afe20, 0x22cd: 0x400b0020, 0x22ce: 0x400b0220, 0x22cf: 0x400b0420, + 0x22d0: 0x400b0620, 0x22d1: 0x400b0820, 0x22d2: 0x400b0a20, 0x22d3: 0x400b0c20, + 0x22d4: 0x400b0e20, 0x22d5: 0x400b1020, 0x22d6: 0x400b1220, 0x22d7: 0x400b1420, + 0x22d8: 0x400b1620, 0x22d9: 0x400b1820, 0x22da: 0x400b1a20, 0x22db: 0x400b1c20, + 0x22dc: 0x400b1e20, 0x22dd: 0x400b2020, 0x22de: 0x400b2220, 0x22df: 0x400b2420, + 0x22e0: 0x400b2620, 0x22e1: 0x400b2820, 0x22e2: 0x400b2a20, 0x22e3: 0x400b2c20, + 0x22e4: 0x400b2e20, 0x22e5: 0x400b3020, 0x22e6: 0x400b3220, 0x22e7: 0x400b3420, + 0x22e8: 0x400b3620, 0x22e9: 0x40049c20, 0x22ea: 0x40049e20, 0x22eb: 0x400b3820, + 0x22ec: 0x400b3a20, 0x22ed: 0x400b3c20, 0x22ee: 0x400b3e20, 0x22ef: 0x400b4020, + 0x22f0: 0x400b4220, 0x22f1: 0x400b4420, 0x22f2: 0x400b4620, 0x22f3: 0x400b4820, + 0x22f4: 0x400b4a20, 0x22f5: 0x400b4c20, 0x22f6: 0x400b4e20, 0x22f7: 0x400b5020, + 0x22f8: 0x400b5220, 0x22f9: 0x400b5420, 0x22fa: 0x400b5620, 0x22fb: 0x400b5820, + 0x22fc: 0x400b5a20, 0x22fd: 0x400b5c20, 0x22fe: 0x400b5e20, 0x22ff: 0x400b6020, + // Block 0x8c, offset 0x2300 + 0x2300: 0x400b6220, 0x2301: 0x400b6420, 0x2302: 0x400b6620, 0x2303: 0x400b6820, + 0x2304: 0x400b6a20, 0x2305: 0x400b6c20, 0x2306: 0x400b6e20, 0x2307: 0x400b7020, + 0x2308: 0x400b7220, 0x2309: 0x400b7420, 0x230a: 0x400b7620, 0x230b: 0x400b7820, + 0x230c: 0x400b7a20, 0x230d: 0x400b7c20, 0x230e: 0x400b7e20, 0x230f: 0x400b8020, + 0x2310: 0x400b8220, 0x2311: 0x400b8420, 0x2312: 0x400b8620, 0x2313: 0x400b8820, + 0x2314: 0x400b8a20, 0x2315: 0x400b8c20, 0x2316: 0x400b8e20, 0x2317: 0x400b9020, + 0x2318: 0x400b9220, 0x2319: 0x400b9420, 0x231a: 0x400b9620, 0x231b: 0x400b9820, + 0x231c: 0x400b9a20, 0x231d: 0x400b9c20, 0x231e: 0x400b9e20, 0x231f: 0x400ba020, + 0x2320: 0x400ba220, 0x2321: 0x400ba420, 0x2322: 0x400ba620, 0x2323: 0x400ba820, + 0x2324: 0x400baa20, 0x2325: 0x400bac20, 0x2326: 0x400bae20, 0x2327: 0x400bb020, + 0x2328: 0x400bb220, 0x2329: 0x400bb420, 0x232a: 0x400bb620, 0x232b: 0x400bb820, + 0x232c: 0x400bba20, 0x232d: 0x400bbc20, 0x232e: 0x400bbe20, 0x232f: 0x400bc020, + 0x2330: 0x400bc220, 0x2331: 0x400bc420, 0x2332: 0x400bc620, 0x2333: 0x400bc820, + 0x2334: 0x400bca20, 0x2335: 0x400bcc20, 0x2336: 0x400bce20, 0x2337: 0x400bd020, + 0x2338: 0x400bd220, 0x2339: 0x400bd420, 0x233a: 0x400bd620, 0x233b: 0x400bd820, + 0x233c: 0x400bda20, 0x233d: 0x400bdc20, 0x233e: 0x400bde20, 0x233f: 0x400be020, + // Block 0x8d, offset 0x2340 + 0x2340: 0x400be220, 0x2341: 0x400be420, 0x2342: 0x400be620, 0x2343: 0x400be820, + 0x2344: 0x400bea20, 0x2345: 0x400bec20, 0x2346: 0x400bee20, 0x2347: 0x400bf020, + 0x2348: 0x400bf220, 0x2349: 0x400bf420, 0x234a: 0x400bf620, 0x234b: 0x400bf820, + 0x234c: 0x400bfa20, 0x234d: 0x400bfc20, 0x234e: 0x400bfe20, 0x234f: 0x400c0020, + 0x2350: 0x400c0220, 0x2351: 0x400c0420, 0x2352: 0x400c0620, 0x2353: 0x400c0820, + 0x2354: 0x400c0a20, 0x2355: 0x400c0c20, 0x2356: 0x400c0e20, 0x2357: 0x400c1020, + 0x2358: 0x400c1220, 0x2359: 0x400c1420, 0x235a: 0x400c1620, 0x235b: 0x400c1820, + 0x235c: 0x400c1a20, 0x235d: 0x400c1c20, 0x235e: 0x400c1e20, 0x235f: 0x400c2020, + 0x2360: 0x400c2220, 0x2361: 0x400c2420, 0x2362: 0x400c2620, 0x2363: 0x400c2820, + 0x2364: 0x400c2a20, 0x2365: 0x400c2c20, 0x2366: 0x400c2e20, 0x2367: 0x400c3020, + 0x2368: 0x400c3220, 0x2369: 0x400c3420, 0x236a: 0x400c3620, 0x236b: 0x400c3820, + 0x236c: 0x400c3a20, 0x236d: 0x400c3c20, 0x236e: 0x400c3e20, 0x236f: 0x400c4020, + 0x2370: 0x400c4220, 0x2371: 0x400c4420, 0x2372: 0x400c4620, 0x2373: 0x400c4820, + 0x2374: 0x400c4a20, 0x2375: 0x400c4c20, 0x2376: 0x400c4e20, 0x2377: 0x400c5020, + 0x2378: 0x400c5220, 0x2379: 0x400c5420, 0x237a: 0x400c5620, 0x237b: 0x400c5820, + 0x237c: 0x400c5a20, 0x237d: 0x400c5c20, 0x237e: 0x400c5e20, 0x237f: 0x400c6020, + // Block 0x8e, offset 0x2380 + 0x2380: 0x400c6220, 0x2381: 0x400c6420, 0x2382: 0x400c6620, 0x2383: 0x400c6820, + 0x2384: 0x400c6a20, 0x2385: 0x400c6c20, 0x2386: 0x400c6e20, 0x2387: 0x400c7020, + 0x2388: 0x400c7220, 0x2389: 0x400c7420, 0x238a: 0x400c7620, 0x238b: 0x400c7820, + 0x238c: 0x400c7a20, 0x238d: 0x400c7c20, 0x238e: 0x400c7e20, 0x238f: 0x400c8020, + 0x2390: 0x400c8220, 0x2391: 0x400c8420, 0x2392: 0x400c8620, 0x2393: 0x400c8820, + 0x2394: 0x400c8a20, 0x2395: 0x400c8c20, 0x2396: 0x400c8e20, 0x2397: 0x400c9020, + 0x2398: 0x400c9220, 0x2399: 0x400c9420, 0x239a: 0x400c9620, 0x239b: 0x400c9820, + 0x239c: 0x400c9a20, 0x239d: 0x400c9c20, 0x239e: 0x400c9e20, 0x239f: 0x400ca020, + 0x23a0: 0x400ca220, 0x23a1: 0x400ca420, 0x23a2: 0x400ca620, 0x23a3: 0x400ca820, + 0x23a4: 0x400caa20, 0x23a5: 0x400cac20, 0x23a6: 0x400cae20, 0x23a7: 0x400cb020, + 0x23a8: 0x400cb220, 0x23a9: 0x400cb420, 0x23aa: 0x400cb620, 0x23ab: 0x400cb820, + 0x23ac: 0x400cba20, 0x23ad: 0x400cbc20, 0x23ae: 0x400cbe20, 0x23af: 0x400cc020, + 0x23b0: 0x400cc220, 0x23b1: 0x400cc420, 0x23b2: 0x400cc620, 0x23b3: 0x400cc820, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x400cca20, 0x23c1: 0x400ccc20, 0x23c2: 0x400cce20, 0x23c3: 0x400cd020, + 0x23c4: 0x400cd220, 0x23c5: 0x400cd420, 0x23c6: 0x400cd620, 0x23c7: 0x400cd820, + 0x23c8: 0x400cda20, 0x23c9: 0x400cdc20, 0x23ca: 0x400cde20, 0x23cb: 0x400ce020, + 0x23cc: 0x400ce220, 0x23cd: 0x400ce420, 0x23ce: 0x400ce620, 0x23cf: 0x400ce820, + 0x23d0: 0x400cea20, 0x23d1: 0x400cec20, 0x23d2: 0x400cee20, 0x23d3: 0x400cf020, + 0x23d4: 0x400cf220, 0x23d5: 0x400cf420, 0x23d6: 0x400cf620, 0x23d7: 0x400cf820, + 0x23d8: 0x400cfa20, 0x23d9: 0x400cfc20, 0x23da: 0x400cfe20, 0x23db: 0x400d0020, + 0x23dc: 0x400d0220, 0x23dd: 0x400d0420, 0x23de: 0x400d0620, 0x23df: 0x400d0820, + 0x23e0: 0x400d0a20, 0x23e1: 0x400d0c20, 0x23e2: 0x400d0e20, 0x23e3: 0x400d1020, + 0x23e4: 0x400d1220, 0x23e5: 0x400d1420, 0x23e6: 0x400d1620, + // Block 0x90, offset 0x2400 + 0x2400: 0x400d1820, 0x2401: 0x400d1a20, 0x2402: 0x400d1c20, 0x2403: 0x400d1e20, + 0x2404: 0x400d2020, 0x2405: 0x400d2220, 0x2406: 0x400d2420, 0x2407: 0x400d2620, + 0x2408: 0x400d2820, 0x2409: 0x400d2a20, 0x240a: 0x400d2c20, + 0x2420: 0x0029ce86, 0x2421: 0x0029d086, 0x2422: 0x0029d286, 0x2423: 0x0029d486, + 0x2424: 0x0029d686, 0x2425: 0x0029d886, 0x2426: 0x0029da86, 0x2427: 0x0029dc86, + 0x2428: 0x0029de86, 0x2429: 0xf0000606, 0x242a: 0xf0000606, 0x242b: 0xf0000606, + 0x242c: 0xf0000606, 0x242d: 0xf0000606, 0x242e: 0xf0000606, 0x242f: 0xf0000606, + 0x2430: 0xf0000606, 0x2431: 0xf0000606, 0x2432: 0xf0000606, 0x2433: 0xf0000606, + 0x2434: 0xf0000404, 0x2435: 0xf0000404, 0x2436: 0xf0000404, 0x2437: 0xf0000404, + 0x2438: 0xf0000404, 0x2439: 0xf0000404, 0x243a: 0xf0000404, 0x243b: 0xf0000404, + 0x243c: 0xf0000404, 0x243d: 0xe0000015, 0x243e: 0xe000001a, 0x243f: 0xe000001f, + // Block 0x91, offset 0x2440 + 0x2440: 0xe0000024, 0x2441: 0xe0000029, 0x2442: 0xe000002e, 0x2443: 0xe0000033, + 0x2444: 0xe0000038, 0x2445: 0xe000003d, 0x2446: 0xe0000042, 0x2447: 0xe0000047, + 0x2448: 0xf0001f04, 0x2449: 0xf0001f04, 0x244a: 0xf0001f04, 0x244b: 0xf0001f04, + 0x244c: 0xf0001f04, 0x244d: 0xf0001f04, 0x244e: 0xf0001f04, 0x244f: 0xf0001f04, + 0x2450: 0xf0001f04, 0x2451: 0xf0000404, 0x2452: 0xf0000404, 0x2453: 0xf0000404, + 0x2454: 0xf0000404, 0x2455: 0xf0000404, 0x2456: 0xf0000404, 0x2457: 0xf0000404, + 0x2458: 0xf0000404, 0x2459: 0xf0000404, 0x245a: 0xf0000404, 0x245b: 0xf0000404, + 0x245c: 0xf0000404, 0x245d: 0xf0000404, 0x245e: 0xf0000404, 0x245f: 0xf0000404, + 0x2460: 0xf0000404, 0x2461: 0xf0000404, 0x2462: 0xf0000404, 0x2463: 0xf0000404, + 0x2464: 0xf0000404, 0x2465: 0xf0000404, 0x2466: 0xf0000404, 0x2467: 0xf0000404, + 0x2468: 0xf0000404, 0x2469: 0xf0000404, 0x246a: 0xf0000404, 0x246b: 0xf0000404, + 0x246c: 0xf0000404, 0x246d: 0xf0000404, 0x246e: 0xf0000404, 0x246f: 0xf0000404, + 0x2470: 0xf0000404, 0x2471: 0xf0000404, 0x2472: 0xf0000404, 0x2473: 0xf0000404, + 0x2474: 0xf0000404, 0x2475: 0xf0000404, 0x2476: 0x002bde8c, 0x2477: 0x002c0a8c, + 0x2478: 0x002c3a8c, 0x2479: 0x002c628c, 0x247a: 0x002c988c, 0x247b: 0x002d088c, + 0x247c: 0x002d228c, 0x247d: 0x002d688c, 0x247e: 0x002d9a8c, 0x247f: 0x002dcc8c, + // Block 0x92, offset 0x2480 + 0x2480: 0x002dfe8c, 0x2481: 0x002e228c, 0x2482: 0x002e828c, 0x2483: 0x002e9e8c, + 0x2484: 0x002ee28c, 0x2485: 0x002f2c8c, 0x2486: 0x002f568c, 0x2487: 0x002f7a8c, + 0x2488: 0x002fe68c, 0x2489: 0x00302c8c, 0x248a: 0x00306c8c, 0x248b: 0x0030be8c, + 0x248c: 0x0030e28c, 0x248d: 0x0030f68c, 0x248e: 0x0031008c, 0x248f: 0x00312a8c, + 0x2490: 0x002bde86, 0x2491: 0x002c0a86, 0x2492: 0x002c3a86, 0x2493: 0x002c6286, + 0x2494: 0x002c9886, 0x2495: 0x002d0886, 0x2496: 0x002d2286, 0x2497: 0x002d6886, + 0x2498: 0x002d9a86, 0x2499: 0x002dcc86, 0x249a: 0x002dfe86, 0x249b: 0x002e2286, + 0x249c: 0x002e8286, 0x249d: 0x002e9e86, 0x249e: 0x002ee286, 0x249f: 0x002f2c86, + 0x24a0: 0x002f5686, 0x24a1: 0x002f7a86, 0x24a2: 0x002fe686, 0x24a3: 0x00302c86, + 0x24a4: 0x00306c86, 0x24a5: 0x0030be86, 0x24a6: 0x0030e286, 0x24a7: 0x0030f686, + 0x24a8: 0x00310086, 0x24a9: 0x00312a86, 0x24aa: 0x0029cc86, 0x24ab: 0xe00002e6, + 0x24ac: 0xe00002e9, 0x24ad: 0xe00002ec, 0x24ae: 0xe00002ef, 0x24af: 0xe00002f2, + 0x24b0: 0xe00002f5, 0x24b1: 0xe00002f8, 0x24b2: 0xe00002fb, 0x24b3: 0xe00002fe, + 0x24b4: 0xe00003d5, 0x24b5: 0x0029ce86, 0x24b6: 0x0029d086, 0x24b7: 0x0029d286, + 0x24b8: 0x0029d486, 0x24b9: 0x0029d686, 0x24ba: 0x0029d886, 0x24bb: 0x0029da86, + 0x24bc: 0x0029dc86, 0x24bd: 0x0029de86, 0x24be: 0xe00002d7, 0x24bf: 0x0029cc86, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x400d2e20, 0x24c1: 0x400d3020, 0x24c2: 0x400d3220, 0x24c3: 0x400d3420, + 0x24c4: 0x400d3620, 0x24c5: 0x400d3820, 0x24c6: 0x400d3a20, 0x24c7: 0x400d3c20, + 0x24c8: 0x400d3e20, 0x24c9: 0x400d4020, 0x24ca: 0x400d4220, 0x24cb: 0x400d4420, + 0x24cc: 0x400d4620, 0x24cd: 0x400d4820, 0x24ce: 0x400d4a20, 0x24cf: 0x400d4c20, + 0x24d0: 0x400d4e20, 0x24d1: 0x400d5020, 0x24d2: 0x400d5220, 0x24d3: 0x400d5420, + 0x24d4: 0x400d5620, 0x24d5: 0x400d5820, 0x24d6: 0x400d5a20, 0x24d7: 0x400d5c20, + 0x24d8: 0x400d5e20, 0x24d9: 0x400d6020, 0x24da: 0x400d6220, 0x24db: 0x400d6420, + 0x24dc: 0x400d6620, 0x24dd: 0x400d6820, 0x24de: 0x400d6a20, 0x24df: 0x400d6c20, + 0x24e0: 0x400d6e20, 0x24e1: 0x400d7020, 0x24e2: 0x400d7220, 0x24e3: 0x400d7420, + 0x24e4: 0x400d7620, 0x24e5: 0x400d7820, 0x24e6: 0x400d7a20, 0x24e7: 0x400d7c20, + 0x24e8: 0x400d7e20, 0x24e9: 0x400d8020, 0x24ea: 0x400d8220, 0x24eb: 0x400d8420, + 0x24ec: 0x400d8620, 0x24ed: 0x400d8820, 0x24ee: 0x400d8a20, 0x24ef: 0x400d8c20, + 0x24f0: 0x400d8e20, 0x24f1: 0x400d9020, 0x24f2: 0x400d9220, 0x24f3: 0x400d9420, + 0x24f4: 0x400d9620, 0x24f5: 0x400d9820, 0x24f6: 0x400d9a20, 0x24f7: 0x400d9c20, + 0x24f8: 0x400d9e20, 0x24f9: 0x400da020, 0x24fa: 0x400da220, 0x24fb: 0x400da420, + 0x24fc: 0x400da620, 0x24fd: 0x400da820, 0x24fe: 0x400daa20, 0x24ff: 0x400dac20, + // Block 0x94, offset 0x2500 + 0x2500: 0x400dae20, 0x2501: 0x400db020, 0x2502: 0x400db220, 0x2503: 0x400db420, + 0x2504: 0x400db620, 0x2505: 0x400db820, 0x2506: 0x400dba20, 0x2507: 0x400dbc20, + 0x2508: 0x400dbe20, 0x2509: 0x400dc020, 0x250a: 0x400dc220, 0x250b: 0x400dc420, + 0x250c: 0x400dc620, 0x250d: 0x400dc820, 0x250e: 0x400dca20, 0x250f: 0x400dcc20, + 0x2510: 0x400dce20, 0x2511: 0x400dd020, 0x2512: 0x400dd220, 0x2513: 0x400dd420, + 0x2514: 0x400dd620, 0x2515: 0x400dd820, 0x2516: 0x400dda20, 0x2517: 0x400ddc20, + 0x2518: 0x400dde20, 0x2519: 0x400de020, 0x251a: 0x400de220, 0x251b: 0x400de420, + 0x251c: 0x400de620, 0x251d: 0x400de820, 0x251e: 0x400dea20, 0x251f: 0x400dec20, + 0x2520: 0x400dee20, 0x2521: 0x400df020, 0x2522: 0x400df220, 0x2523: 0x400df420, + 0x2524: 0x400df620, 0x2525: 0x400df820, 0x2526: 0x400dfa20, 0x2527: 0x400dfc20, + 0x2528: 0x400dfe20, 0x2529: 0x400e0020, 0x252a: 0x400e0220, 0x252b: 0x400e0420, + 0x252c: 0x400e0620, 0x252d: 0x400e0820, 0x252e: 0x400e0a20, 0x252f: 0x400e0c20, + 0x2530: 0x400e0e20, 0x2531: 0x400e1020, 0x2532: 0x400e1220, 0x2533: 0x400e1420, + 0x2534: 0x400e1620, 0x2535: 0x400e1820, 0x2536: 0x400e1a20, 0x2537: 0x400e1c20, + 0x2538: 0x400e1e20, 0x2539: 0x400e2020, 0x253a: 0x400e2220, 0x253b: 0x400e2420, + 0x253c: 0x400e2620, 0x253d: 0x400e2820, 0x253e: 0x400e2a20, 0x253f: 0x400e2c20, + // Block 0x95, offset 0x2540 + 0x2540: 0x400e2e20, 0x2541: 0x400e3020, 0x2542: 0x400e3220, 0x2543: 0x400e3420, + 0x2544: 0x400e3620, 0x2545: 0x400e3820, 0x2546: 0x400e3a20, 0x2547: 0x400e3c20, + 0x2548: 0x400e3e20, 0x2549: 0x400e4020, 0x254a: 0x400e4220, 0x254b: 0x400e4420, + 0x254c: 0x400e4620, 0x254d: 0x400e4820, 0x254e: 0x400e4a20, 0x254f: 0x400e4c20, + 0x2550: 0x400e4e20, 0x2551: 0x400e5020, 0x2552: 0x400e5220, 0x2553: 0x400e5420, + 0x2554: 0x400e5620, 0x2555: 0x400e5820, 0x2556: 0x400e5a20, 0x2557: 0x400e5c20, + 0x2558: 0x400e5e20, 0x2559: 0x400e6020, 0x255a: 0x400e6220, 0x255b: 0x400e6420, + 0x255c: 0x400e6620, 0x255d: 0x400e6820, 0x255e: 0x400e6a20, 0x255f: 0x400e6c20, + 0x2560: 0x400e6e20, 0x2561: 0x400e7020, 0x2562: 0x400e7220, 0x2563: 0x400e7420, + 0x2564: 0x400e7620, 0x2565: 0x400e7820, 0x2566: 0x400e7a20, 0x2567: 0x400e7c20, + 0x2568: 0x400e7e20, 0x2569: 0x400e8020, 0x256a: 0x400e8220, 0x256b: 0x400e8420, + 0x256c: 0x400e8620, 0x256d: 0x400e8820, 0x256e: 0x400e8a20, 0x256f: 0x400e8c20, + 0x2570: 0x400e8e20, 0x2571: 0x400e9020, 0x2572: 0x400e9220, 0x2573: 0x400e9420, + 0x2574: 0x400e9620, 0x2575: 0x400e9820, 0x2576: 0x400e9a20, 0x2577: 0x400e9c20, + 0x2578: 0x400e9e20, 0x2579: 0x400ea020, 0x257a: 0x400ea220, 0x257b: 0x400ea420, + 0x257c: 0x400ea620, 0x257d: 0x400ea820, 0x257e: 0x400eaa20, 0x257f: 0x400eac20, + // Block 0x96, offset 0x2580 + 0x2580: 0x400eae20, 0x2581: 0x400eb020, 0x2582: 0x400eb220, 0x2583: 0x400eb420, + 0x2584: 0x400eb620, 0x2585: 0x400eb820, 0x2586: 0x400eba20, 0x2587: 0x400ebc20, + 0x2588: 0x400ebe20, 0x2589: 0x400ec020, 0x258a: 0x400ec220, 0x258b: 0x400ec420, + 0x258c: 0x400ec620, 0x258d: 0x400ec820, 0x258e: 0x400eca20, 0x258f: 0x400ecc20, + 0x2590: 0x400ece20, 0x2591: 0x400ed020, 0x2592: 0x400ed220, 0x2593: 0x400ed420, + 0x2594: 0x400ed620, 0x2595: 0x400ed820, 0x2596: 0x400eda20, 0x2597: 0x400edc20, + 0x2598: 0x400ede20, 0x2599: 0x400ee020, 0x259a: 0x400ee220, 0x259b: 0x400ee420, + 0x259c: 0x400ee620, 0x259d: 0x400ee820, 0x259e: 0x400eea20, 0x259f: 0x400eec20, + 0x25a0: 0x400eee20, 0x25a1: 0x400ef020, 0x25a2: 0x400ef220, 0x25a3: 0x400ef420, + 0x25a4: 0x400ef620, 0x25a5: 0x400ef820, 0x25a6: 0x400efa20, 0x25a7: 0x400efc20, + 0x25a8: 0x400efe20, 0x25a9: 0x400f0020, 0x25aa: 0x400f0220, 0x25ab: 0x400f0420, + 0x25ac: 0x400f0620, 0x25ad: 0x400f0820, 0x25ae: 0x400f0a20, 0x25af: 0x400f0c20, + 0x25b0: 0x400f0e20, 0x25b1: 0x400f1020, 0x25b2: 0x400f1220, 0x25b3: 0x400f1420, + 0x25b4: 0x400f1620, 0x25b5: 0x400f1820, 0x25b6: 0x400f1a20, 0x25b7: 0x400f1c20, + 0x25b8: 0x400f1e20, 0x25b9: 0x400f2020, 0x25ba: 0x400f2220, 0x25bb: 0x400f2420, + 0x25bc: 0x400f2620, 0x25bd: 0x400f2820, 0x25be: 0x400f2a20, 0x25bf: 0x400f2c20, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x400f2e20, 0x25c1: 0x400f3020, 0x25c2: 0x400f3220, 0x25c3: 0x400f3420, + 0x25c4: 0x400f3620, 0x25c5: 0x400f3820, 0x25c6: 0x400f3a20, 0x25c7: 0x400f3c20, + 0x25c8: 0x400f3e20, 0x25c9: 0x400f4020, 0x25ca: 0x400f4220, 0x25cb: 0x400f4420, + 0x25cc: 0x400f4620, 0x25cd: 0x400f4820, 0x25ce: 0x400f4a20, 0x25cf: 0x400f4c20, + 0x25d0: 0x400f4e20, 0x25d1: 0x400f5020, 0x25d2: 0x400f5220, 0x25d3: 0x400f5420, + 0x25d4: 0x400f5620, 0x25d5: 0x400f5820, 0x25d6: 0x400f5a20, 0x25d7: 0x400f5c20, + 0x25d8: 0x400f5e20, 0x25d9: 0x400f6020, 0x25da: 0x400f6220, 0x25db: 0x400f6420, + 0x25dc: 0x400f6620, 0x25dd: 0x400f6820, 0x25de: 0x400f6a20, 0x25df: 0x400f6c20, + 0x25e0: 0x400f6e20, 0x25e1: 0x400f7020, 0x25e2: 0x400f7220, 0x25e3: 0x400f7420, + 0x25e4: 0x400f7620, 0x25e5: 0x400f7820, 0x25e6: 0x400f7a20, 0x25e7: 0x400f7c20, + 0x25e8: 0x400f7e20, 0x25e9: 0x400f8020, 0x25ea: 0x400f8220, 0x25eb: 0x400f8420, + 0x25ec: 0x400f8620, 0x25ed: 0x400f8820, 0x25ee: 0x400f8a20, 0x25ef: 0x400f8c20, + 0x25f0: 0x40195220, 0x25f1: 0x40195420, 0x25f2: 0x40195620, 0x25f3: 0x40195820, + 0x25f4: 0x40195a20, 0x25f5: 0x40195c20, 0x25f6: 0x40195e20, 0x25f7: 0x40196020, + 0x25f8: 0x400f8e20, 0x25f9: 0x400f9020, 0x25fa: 0x400f9220, 0x25fb: 0x400f9420, + 0x25fc: 0x400f9620, 0x25fd: 0x400f9820, 0x25fe: 0x400f9a20, 0x25ff: 0x400f9c20, + // Block 0x98, offset 0x2600 + 0x2600: 0x400f9e20, 0x2601: 0x400fa020, 0x2602: 0x400fa220, 0x2603: 0x400fa420, + 0x2604: 0x400fa620, 0x2605: 0x400fa820, 0x2606: 0x400faa20, 0x2607: 0x400fac20, + 0x2608: 0x400fae20, 0x2609: 0x400fb020, 0x260a: 0x400fb220, 0x260b: 0x400fb420, + 0x260c: 0x400fb620, 0x260d: 0x400fb820, 0x260e: 0x400fba20, 0x260f: 0x400fbc20, + 0x2610: 0x400fbe20, 0x2611: 0x400fc020, 0x2612: 0x400fc220, 0x2613: 0x400fc420, + 0x2614: 0x400fc620, 0x2615: 0x400fc820, 0x2616: 0x400fca20, 0x2617: 0x400fcc20, + 0x2618: 0x400fce20, 0x2619: 0x400fd020, 0x261a: 0x400fd220, 0x261b: 0x400fd420, + 0x261c: 0x400fd620, 0x261d: 0x400fd820, 0x261e: 0x400fda20, 0x261f: 0x400fdc20, + 0x2620: 0x400fde20, 0x2621: 0x400fe020, 0x2622: 0x400fe220, 0x2623: 0x400fe420, + 0x2624: 0x400fe620, 0x2625: 0x400fe820, 0x2626: 0x400fea20, 0x2627: 0x400fec20, + 0x2628: 0x400fee20, 0x2629: 0x400ff020, 0x262a: 0x400ff220, 0x262b: 0x400ff420, + 0x262c: 0x400ff620, 0x262d: 0x401dde20, 0x262e: 0x401de020, 0x262f: 0x401de220, + 0x2630: 0x400ff820, 0x2631: 0x400ffa20, 0x2632: 0x400ffc20, 0x2633: 0x400ffe20, + 0x2634: 0x40100020, 0x2635: 0x40100220, 0x2636: 0x40100420, 0x2637: 0x40100620, + 0x2638: 0x40100820, 0x2639: 0x40100a20, 0x263a: 0x40100c20, 0x263b: 0x40100e20, + 0x263c: 0x40101020, 0x263d: 0x40101220, 0x263e: 0x40101420, 0x263f: 0x40101620, + // Block 0x99, offset 0x2640 + 0x2640: 0x40101820, 0x2641: 0x40101a20, 0x2642: 0x40101c20, 0x2643: 0x40101e20, + 0x2644: 0x40102020, 0x2645: 0x40102220, 0x2646: 0x40102420, 0x2647: 0x40102620, + 0x2648: 0x40102820, 0x2649: 0x40102a20, 0x264a: 0x40194620, 0x264b: 0x40194820, + 0x264c: 0x40194a20, 0x264d: 0x40194c20, 0x264e: 0x40194e20, 0x264f: 0x40195020, + 0x2650: 0x40102c20, 0x2651: 0x40102e20, 0x2652: 0x40103020, 0x2653: 0x40103220, + 0x2654: 0x40103420, 0x2655: 0x40103620, 0x2656: 0x40103820, 0x2657: 0x40103a20, + 0x2658: 0x40103c20, 0x2659: 0x40103e20, 0x265a: 0x40104020, 0x265b: 0x40104220, + 0x265c: 0x40104420, 0x265d: 0x40104620, 0x265e: 0x40104820, 0x265f: 0x40104a20, + 0x2660: 0x40104c20, 0x2661: 0x40104e20, 0x2662: 0x40105020, 0x2663: 0x40105220, + 0x2664: 0x40105420, 0x2665: 0x40105620, 0x2666: 0x40105820, 0x2667: 0x40105a20, + 0x2668: 0x40105c20, 0x2669: 0x40105e20, 0x266a: 0x40106020, 0x266b: 0x40106220, + 0x266c: 0x40106420, 0x266d: 0x40106620, 0x266e: 0x40106820, 0x266f: 0x40106a20, + 0x2670: 0x40106c20, 0x2671: 0x40106e20, 0x2672: 0x40107020, 0x2673: 0x40107220, + 0x2674: 0x40107420, 0x2675: 0x40107620, 0x2676: 0x40107820, 0x2677: 0x40107a20, + 0x2678: 0x40107c20, 0x2679: 0x40107e20, 0x267a: 0x40108020, 0x267b: 0x40108220, + 0x267c: 0x40108420, 0x267d: 0x40108620, 0x267e: 0x40108820, 0x267f: 0x40108a20, + // Block 0x9a, offset 0x2680 + 0x2680: 0x40108c20, 0x2681: 0x40108e20, 0x2682: 0x40109020, 0x2683: 0x40109220, + 0x2684: 0x40109420, 0x2685: 0x40109620, 0x2686: 0x40109820, 0x2687: 0x40109a20, + 0x2688: 0x40109c20, 0x2689: 0x40109e20, 0x268a: 0x4010a020, 0x268b: 0x4010a220, + 0x268c: 0x4010a420, 0x268d: 0x4010a620, 0x268e: 0x4010a820, 0x268f: 0x4010aa20, + 0x2690: 0x4010ac20, 0x2691: 0x4010ae20, 0x2692: 0x4010b020, 0x2693: 0x4010b220, + 0x2694: 0x4010b420, 0x2695: 0x4010b620, 0x2696: 0x4010b820, 0x2697: 0x4010ba20, + 0x2698: 0x4010bc20, 0x2699: 0x4010be20, 0x269a: 0x4010c020, 0x269b: 0x4010c220, + 0x269c: 0x4010c420, 0x269d: 0x4010c620, 0x269e: 0x4010c820, 0x269f: 0x4010ca20, + 0x26a0: 0x4010cc20, 0x26a1: 0x4010ce20, 0x26a2: 0x4010d020, 0x26a3: 0x4010d220, + 0x26a4: 0x4010d420, 0x26a5: 0x4010d620, 0x26a6: 0x4010d820, 0x26a7: 0x4010da20, + 0x26a8: 0x4010dc20, 0x26a9: 0x4010de20, 0x26aa: 0x4010e020, 0x26ab: 0x4010e220, + 0x26ac: 0x4010e420, 0x26ad: 0x4010e620, 0x26ae: 0x4010e820, 0x26af: 0x4010ea20, + 0x26b0: 0x4010ec20, 0x26b1: 0x4010ee20, 0x26b2: 0x4010f020, 0x26b3: 0x4010f220, + 0x26b4: 0x4010f420, 0x26b5: 0x4010f620, 0x26b6: 0x4010f820, 0x26b7: 0x4010fa20, + 0x26b8: 0x4010fc20, 0x26b9: 0x4010fe20, 0x26ba: 0x40110020, 0x26bb: 0x40110220, + 0x26bc: 0x40110420, 0x26bd: 0x40110620, 0x26be: 0x40110820, 0x26bf: 0x40110a20, + // Block 0x9b, offset 0x26c0 + 0x26c1: 0x40114020, 0x26c2: 0x40114220, 0x26c3: 0x40114420, + 0x26c4: 0x40114620, 0x26c5: 0x40114820, 0x26c6: 0x40114a20, 0x26c7: 0x40114c20, + 0x26c8: 0x40114e20, 0x26c9: 0x40115020, 0x26ca: 0x40115220, 0x26cb: 0x40115420, + 0x26cc: 0x40115620, 0x26cd: 0x40115820, 0x26ce: 0x40115a20, 0x26cf: 0x40115c20, + 0x26d0: 0x40115e20, 0x26d1: 0x40116020, 0x26d2: 0x40116220, 0x26d3: 0x40116420, + 0x26d4: 0x40116620, 0x26d5: 0x40116820, 0x26d6: 0x40116a20, 0x26d7: 0x40116c20, + 0x26d8: 0x40116e20, 0x26d9: 0x40117020, 0x26da: 0x40117220, 0x26db: 0x40117420, + 0x26dc: 0x40117620, 0x26dd: 0x40117820, 0x26de: 0x40117a20, 0x26df: 0x40117c20, + 0x26e0: 0x40117e20, 0x26e1: 0x40118020, 0x26e2: 0x40118220, 0x26e3: 0x40118420, + 0x26e4: 0x40118620, 0x26e5: 0x40118820, 0x26e6: 0x40118a20, 0x26e7: 0x40118c20, + 0x26e8: 0x40118e20, 0x26e9: 0x40119020, 0x26ea: 0x40119220, 0x26eb: 0x40119420, + 0x26ec: 0x40119620, 0x26ed: 0x40119820, 0x26ee: 0x40119a20, 0x26ef: 0x40119c20, + 0x26f0: 0x40119e20, 0x26f1: 0x4011a020, 0x26f2: 0x4011a220, 0x26f3: 0x4011a420, + 0x26f4: 0x4011a620, 0x26f5: 0x4011a820, 0x26f6: 0x4011aa20, 0x26f7: 0x4011ac20, + 0x26f8: 0x4011ae20, 0x26f9: 0x4011b020, 0x26fa: 0x4011b220, 0x26fb: 0x4011b420, + 0x26fc: 0x4011b620, 0x26fd: 0x4011b820, 0x26fe: 0x4011ba20, 0x26ff: 0x4011bc20, + // Block 0x9c, offset 0x2700 + 0x2700: 0x4011be20, 0x2701: 0x4011c020, 0x2702: 0x4011c220, 0x2703: 0x4011c420, + 0x2704: 0x4011c620, 0x2705: 0x4011c820, 0x2706: 0x4011ca20, 0x2707: 0x4011cc20, + 0x2708: 0x4011ce20, 0x2709: 0x4011d020, 0x270a: 0x4011d220, 0x270b: 0x4011d420, + 0x270c: 0x4011d620, 0x270d: 0x4011d820, 0x270e: 0x4011da20, 0x270f: 0x4011dc20, + 0x2710: 0x4011de20, 0x2711: 0x4011e020, 0x2712: 0x4011e220, 0x2713: 0x4011e420, + 0x2714: 0x4011e620, 0x2715: 0x4011e820, 0x2716: 0x4011ea20, 0x2717: 0x4011ec20, + 0x2718: 0x4011ee20, 0x2719: 0x4011f020, 0x271a: 0x4011f220, 0x271b: 0x4011f420, + 0x271c: 0x4011f620, 0x271d: 0x4011f820, 0x271e: 0x4011fa20, 0x271f: 0x4011fc20, + 0x2720: 0x4011fe20, 0x2721: 0x40120020, 0x2722: 0x40120220, 0x2723: 0x40120420, + 0x2724: 0x40120620, 0x2725: 0x40120820, 0x2726: 0x40120a20, 0x2727: 0x40120c20, + 0x2728: 0x40045820, 0x2729: 0x40045a20, 0x272a: 0x40045c20, 0x272b: 0x40045e20, + 0x272c: 0x40046020, 0x272d: 0x40046220, 0x272e: 0x40046420, 0x272f: 0x40046620, + 0x2730: 0x40046820, 0x2731: 0x40046a20, 0x2732: 0x40046c20, 0x2733: 0x40046e20, + 0x2734: 0x40047020, 0x2735: 0x40047220, 0x2736: 0x0029ce86, 0x2737: 0x0029d086, + 0x2738: 0x0029d286, 0x2739: 0x0029d486, 0x273a: 0x0029d686, 0x273b: 0x0029d886, + 0x273c: 0x0029da86, 0x273d: 0x0029dc86, 0x273e: 0x0029de86, 0x273f: 0xe00002da, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0029ce86, 0x2741: 0x0029d086, 0x2742: 0x0029d286, 0x2743: 0x0029d486, + 0x2744: 0x0029d686, 0x2745: 0x0029d886, 0x2746: 0x0029da86, 0x2747: 0x0029dc86, + 0x2748: 0x0029de86, 0x2749: 0xe00002dd, 0x274a: 0x0029ce86, 0x274b: 0x0029d086, + 0x274c: 0x0029d286, 0x274d: 0x0029d486, 0x274e: 0x0029d686, 0x274f: 0x0029d886, + 0x2750: 0x0029da86, 0x2751: 0x0029dc86, 0x2752: 0x0029de86, 0x2753: 0xe00002e0, + 0x2754: 0x40120e20, 0x2755: 0x40121020, 0x2756: 0x40121220, 0x2757: 0x40121420, + 0x2758: 0x40121620, 0x2759: 0x40121820, 0x275a: 0x40121a20, 0x275b: 0x40121c20, + 0x275c: 0x40121e20, 0x275d: 0x40122020, 0x275e: 0x40122220, 0x275f: 0x40122420, + 0x2760: 0x40122620, 0x2761: 0x40122820, 0x2762: 0x40122a20, 0x2763: 0x40122c20, + 0x2764: 0x40122e20, 0x2765: 0x40123020, 0x2766: 0x40123220, 0x2767: 0x40123420, + 0x2768: 0x40123620, 0x2769: 0x40123820, 0x276a: 0x40123a20, 0x276b: 0x40123c20, + 0x276c: 0x40123e20, 0x276d: 0x40124020, 0x276e: 0x40124220, 0x276f: 0x40124420, + 0x2770: 0x40124620, 0x2771: 0x40124820, 0x2772: 0x40124a20, 0x2773: 0x40124c20, + 0x2774: 0x40124e20, 0x2775: 0x40125020, 0x2776: 0x40125220, 0x2777: 0x40125420, + 0x2778: 0x40125620, 0x2779: 0x40125820, 0x277a: 0x40125a20, 0x277b: 0x40125c20, + 0x277c: 0x40125e20, 0x277d: 0x40126020, 0x277e: 0x40126220, 0x277f: 0x40126420, + // Block 0x9e, offset 0x2780 + 0x2780: 0x40126620, 0x2781: 0x40126820, 0x2782: 0x40126a20, 0x2783: 0x40126c20, + 0x2784: 0x40126e20, 0x2785: 0x40044020, 0x2786: 0x40044220, 0x2787: 0x40127020, + 0x2788: 0x40127220, 0x2789: 0x40127420, 0x278a: 0x40127620, 0x278b: 0x40127820, + 0x278c: 0x40127a20, 0x278d: 0x40127c20, 0x278e: 0x40127e20, 0x278f: 0x40128020, + 0x2790: 0x40128220, 0x2791: 0x40128420, 0x2792: 0x40128620, 0x2793: 0x40128820, + 0x2794: 0x40128a20, 0x2795: 0x40128c20, 0x2796: 0x40128e20, 0x2797: 0x40129020, + 0x2798: 0x40129220, 0x2799: 0x40129420, 0x279a: 0x40129620, 0x279b: 0x40129820, + 0x279c: 0x40129a20, 0x279d: 0x40129c20, 0x279e: 0x40129e20, 0x279f: 0x4012a020, + 0x27a0: 0x4012a220, 0x27a1: 0x4012a420, 0x27a2: 0x4012a620, 0x27a3: 0x4012a820, + 0x27a4: 0x4012aa20, 0x27a5: 0x4012ac20, 0x27a6: 0x40044420, 0x27a7: 0x40044620, + 0x27a8: 0x40044820, 0x27a9: 0x40044a20, 0x27aa: 0x40044c20, 0x27ab: 0x40044e20, + 0x27ac: 0x40045020, 0x27ad: 0x40045220, 0x27ae: 0x40045420, 0x27af: 0x40045620, + 0x27b0: 0x4012ae20, 0x27b1: 0x4012b020, 0x27b2: 0x4012b220, 0x27b3: 0x4012b420, + 0x27b4: 0x4012b620, 0x27b5: 0x4012b820, 0x27b6: 0x4012ba20, 0x27b7: 0x4012bc20, + 0x27b8: 0x4012be20, 0x27b9: 0x4012c020, 0x27ba: 0x4012c220, 0x27bb: 0x4012c420, + 0x27bc: 0x4012c620, 0x27bd: 0x4012c820, 0x27be: 0x4012ca20, 0x27bf: 0x4012cc20, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x40174620, 0x27c1: 0x40174820, 0x27c2: 0x40174a20, 0x27c3: 0x40174c20, + 0x27c4: 0x40174e20, 0x27c5: 0x40175020, 0x27c6: 0x40175220, 0x27c7: 0x40175420, + 0x27c8: 0x40175620, 0x27c9: 0x40175820, 0x27ca: 0x40175a20, 0x27cb: 0x40175c20, + 0x27cc: 0x40175e20, 0x27cd: 0x40176020, 0x27ce: 0x40176220, 0x27cf: 0x40176420, + 0x27d0: 0x40176620, 0x27d1: 0x40176820, 0x27d2: 0x40176a20, 0x27d3: 0x40176c20, + 0x27d4: 0x40176e20, 0x27d5: 0x40177020, 0x27d6: 0x40177220, 0x27d7: 0x40177420, + 0x27d8: 0x40177620, 0x27d9: 0x40177820, 0x27da: 0x40177a20, 0x27db: 0x40177c20, + 0x27dc: 0x40177e20, 0x27dd: 0x40178020, 0x27de: 0x40178220, 0x27df: 0x40178420, + 0x27e0: 0x40178620, 0x27e1: 0x40178820, 0x27e2: 0x40178a20, 0x27e3: 0x40178c20, + 0x27e4: 0x40178e20, 0x27e5: 0x40179020, 0x27e6: 0x40179220, 0x27e7: 0x40179420, + 0x27e8: 0x40179620, 0x27e9: 0x40179820, 0x27ea: 0x40179a20, 0x27eb: 0x40179c20, + 0x27ec: 0x40179e20, 0x27ed: 0x4017a020, 0x27ee: 0x4017a220, 0x27ef: 0x4017a420, + 0x27f0: 0x4017a620, 0x27f1: 0x4017a820, 0x27f2: 0x4017aa20, 0x27f3: 0x4017ac20, + 0x27f4: 0x4017ae20, 0x27f5: 0x4017b020, 0x27f6: 0x4017b220, 0x27f7: 0x4017b420, + 0x27f8: 0x4017b620, 0x27f9: 0x4017b820, 0x27fa: 0x4017ba20, 0x27fb: 0x4017bc20, + 0x27fc: 0x4017be20, 0x27fd: 0x4017c020, 0x27fe: 0x4017c220, 0x27ff: 0x4017c420, + // Block 0xa0, offset 0x2800 + 0x2800: 0x4017c620, 0x2801: 0x4017c820, 0x2802: 0x4017ca20, 0x2803: 0x4017cc20, + 0x2804: 0x4017ce20, 0x2805: 0x4017d020, 0x2806: 0x4017d220, 0x2807: 0x4017d420, + 0x2808: 0x4017d620, 0x2809: 0x4017d820, 0x280a: 0x4017da20, 0x280b: 0x4017dc20, + 0x280c: 0x4017de20, 0x280d: 0x4017e020, 0x280e: 0x4017e220, 0x280f: 0x4017e420, + 0x2810: 0x4017e620, 0x2811: 0x4017e820, 0x2812: 0x4017ea20, 0x2813: 0x4017ec20, + 0x2814: 0x4017ee20, 0x2815: 0x4017f020, 0x2816: 0x4017f220, 0x2817: 0x4017f420, + 0x2818: 0x4017f620, 0x2819: 0x4017f820, 0x281a: 0x4017fa20, 0x281b: 0x4017fc20, + 0x281c: 0x4017fe20, 0x281d: 0x40180020, 0x281e: 0x40180220, 0x281f: 0x40180420, + 0x2820: 0x40180620, 0x2821: 0x40180820, 0x2822: 0x40180a20, 0x2823: 0x40180c20, + 0x2824: 0x40180e20, 0x2825: 0x40181020, 0x2826: 0x40181220, 0x2827: 0x40181420, + 0x2828: 0x40181620, 0x2829: 0x40181820, 0x282a: 0x40181a20, 0x282b: 0x40181c20, + 0x282c: 0x40181e20, 0x282d: 0x40182020, 0x282e: 0x40182220, 0x282f: 0x40182420, + 0x2830: 0x40182620, 0x2831: 0x40182820, 0x2832: 0x40182a20, 0x2833: 0x40182c20, + 0x2834: 0x40182e20, 0x2835: 0x40183020, 0x2836: 0x40183220, 0x2837: 0x40183420, + 0x2838: 0x40183620, 0x2839: 0x40183820, 0x283a: 0x40183a20, 0x283b: 0x40183c20, + 0x283c: 0x40183e20, 0x283d: 0x40184020, 0x283e: 0x40184220, 0x283f: 0x40184420, + // Block 0xa1, offset 0x2840 + 0x2840: 0x40184620, 0x2841: 0x40184820, 0x2842: 0x40184a20, 0x2843: 0x40184c20, + 0x2844: 0x40184e20, 0x2845: 0x40185020, 0x2846: 0x40185220, 0x2847: 0x40185420, + 0x2848: 0x40185620, 0x2849: 0x40185820, 0x284a: 0x40185a20, 0x284b: 0x40185c20, + 0x284c: 0x40185e20, 0x284d: 0x40186020, 0x284e: 0x40186220, 0x284f: 0x40186420, + 0x2850: 0x40186620, 0x2851: 0x40186820, 0x2852: 0x40186a20, 0x2853: 0x40186c20, + 0x2854: 0x40186e20, 0x2855: 0x40187020, 0x2856: 0x40187220, 0x2857: 0x40187420, + 0x2858: 0x40187620, 0x2859: 0x40187820, 0x285a: 0x40187a20, 0x285b: 0x40187c20, + 0x285c: 0x40187e20, 0x285d: 0x40188020, 0x285e: 0x40188220, 0x285f: 0x40188420, + 0x2860: 0x40188620, 0x2861: 0x40188820, 0x2862: 0x40188a20, 0x2863: 0x40188c20, + 0x2864: 0x40188e20, 0x2865: 0x40189020, 0x2866: 0x40189220, 0x2867: 0x40189420, + 0x2868: 0x40189620, 0x2869: 0x40189820, 0x286a: 0x40189a20, 0x286b: 0x40189c20, + 0x286c: 0x40189e20, 0x286d: 0x4018a020, 0x286e: 0x4018a220, 0x286f: 0x4018a420, + 0x2870: 0x4018a620, 0x2871: 0x4018a820, 0x2872: 0x4018aa20, 0x2873: 0x4018ac20, + 0x2874: 0x4018ae20, 0x2875: 0x4018b020, 0x2876: 0x4018b220, 0x2877: 0x4018b420, + 0x2878: 0x4018b620, 0x2879: 0x4018b820, 0x287a: 0x4018ba20, 0x287b: 0x4018bc20, + 0x287c: 0x4018be20, 0x287d: 0x4018c020, 0x287e: 0x4018c220, 0x287f: 0x4018c420, + // Block 0xa2, offset 0x2880 + 0x2880: 0x4018c620, 0x2881: 0x4018c820, 0x2882: 0x4018ca20, 0x2883: 0x4018cc20, + 0x2884: 0x4018ce20, 0x2885: 0x4018d020, 0x2886: 0x4018d220, 0x2887: 0x4018d420, + 0x2888: 0x4018d620, 0x2889: 0x4018d820, 0x288a: 0x4018da20, 0x288b: 0x4018dc20, + 0x288c: 0x4018de20, 0x288d: 0x4018e020, 0x288e: 0x4018e220, 0x288f: 0x4018e420, + 0x2890: 0x4018e620, 0x2891: 0x4018e820, 0x2892: 0x4018ea20, 0x2893: 0x4018ec20, + 0x2894: 0x4018ee20, 0x2895: 0x4018f020, 0x2896: 0x4018f220, 0x2897: 0x4018f420, + 0x2898: 0x4018f620, 0x2899: 0x4018f820, 0x289a: 0x4018fa20, 0x289b: 0x4018fc20, + 0x289c: 0x4018fe20, 0x289d: 0x40190020, 0x289e: 0x40190220, 0x289f: 0x40190420, + 0x28a0: 0x40190620, 0x28a1: 0x40190820, 0x28a2: 0x40190a20, 0x28a3: 0x40190c20, + 0x28a4: 0x40190e20, 0x28a5: 0x40191020, 0x28a6: 0x40191220, 0x28a7: 0x40191420, + 0x28a8: 0x40191620, 0x28a9: 0x40191820, 0x28aa: 0x40191a20, 0x28ab: 0x40191c20, + 0x28ac: 0x40191e20, 0x28ad: 0x40192020, 0x28ae: 0x40192220, 0x28af: 0x40192420, + 0x28b0: 0x40192620, 0x28b1: 0x40192820, 0x28b2: 0x40192a20, 0x28b3: 0x40192c20, + 0x28b4: 0x40192e20, 0x28b5: 0x40193020, 0x28b6: 0x40193220, 0x28b7: 0x40193420, + 0x28b8: 0x40193620, 0x28b9: 0x40193820, 0x28ba: 0x40193a20, 0x28bb: 0x40193c20, + 0x28bc: 0x40193e20, 0x28bd: 0x40194020, 0x28be: 0x40194220, 0x28bf: 0x40194420, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x4012ce20, 0x28c1: 0x4012d020, 0x28c2: 0x4012d220, 0x28c3: 0x4012d420, + 0x28c4: 0x4012d620, 0x28c5: 0x4012d820, 0x28c6: 0x4012da20, 0x28c7: 0x4012dc20, + 0x28c8: 0x4012de20, 0x28c9: 0x4012e020, 0x28ca: 0x4012e220, 0x28cb: 0x4012e420, + 0x28cc: 0x4012e620, 0x28cd: 0x4012e820, 0x28ce: 0x4012ea20, 0x28cf: 0x4012ec20, + 0x28d0: 0x4012ee20, 0x28d1: 0x4012f020, 0x28d2: 0x4012f220, 0x28d3: 0x4012f420, + 0x28d4: 0x4012f620, 0x28d5: 0x4012f820, 0x28d6: 0x4012fa20, 0x28d7: 0x4012fc20, + 0x28d8: 0x4012fe20, 0x28d9: 0x40130020, 0x28da: 0x40130220, 0x28db: 0x40130420, + 0x28dc: 0x40130620, 0x28dd: 0x40130820, 0x28de: 0x40130a20, 0x28df: 0x40130c20, + 0x28e0: 0x40130e20, 0x28e1: 0x40131020, 0x28e2: 0x40131220, 0x28e3: 0x40131420, + 0x28e4: 0x40131620, 0x28e5: 0x40131820, 0x28e6: 0x40131a20, 0x28e7: 0x40131c20, + 0x28e8: 0x40131e20, 0x28e9: 0x40132020, 0x28ea: 0x40132220, 0x28eb: 0x40132420, + 0x28ec: 0x40132620, 0x28ed: 0x40132820, 0x28ee: 0x40132a20, 0x28ef: 0x40132c20, + 0x28f0: 0x40132e20, 0x28f1: 0x40133020, 0x28f2: 0x40133220, 0x28f3: 0x40133420, + 0x28f4: 0x40133620, 0x28f5: 0x40133820, 0x28f6: 0x40133a20, 0x28f7: 0x40133c20, + 0x28f8: 0x40133e20, 0x28f9: 0x40134020, 0x28fa: 0x40134220, 0x28fb: 0x40134420, + 0x28fc: 0x40134620, 0x28fd: 0x40134820, 0x28fe: 0x40134a20, 0x28ff: 0x40134c20, + // Block 0xa4, offset 0x2900 + 0x2900: 0x40134e20, 0x2901: 0x40135020, 0x2902: 0x40135220, 0x2903: 0x40135420, + 0x2904: 0x40135620, 0x2905: 0x40135820, 0x2906: 0x40135a20, 0x2907: 0x40135c20, + 0x2908: 0x40135e20, 0x2909: 0x40136020, 0x290a: 0x40136220, 0x290b: 0x40136420, + 0x290c: 0x40136620, 0x290d: 0x40136820, 0x290e: 0x40136a20, 0x290f: 0x40136c20, + 0x2910: 0x40136e20, 0x2911: 0x40137020, 0x2912: 0x40137220, 0x2913: 0x40137420, + 0x2914: 0x40137620, 0x2915: 0x40137820, 0x2916: 0x40137a20, 0x2917: 0x40137c20, + 0x2918: 0x40137e20, 0x2919: 0x40138020, 0x291a: 0x40138220, 0x291b: 0x40138420, + 0x291c: 0x40138620, 0x291d: 0x40138820, 0x291e: 0x40138a20, 0x291f: 0x40138c20, + 0x2920: 0x40138e20, 0x2921: 0x40139020, 0x2922: 0x40139220, 0x2923: 0x40139420, + 0x2924: 0x40139620, 0x2925: 0x40139820, 0x2926: 0x40139a20, 0x2927: 0x40139c20, + 0x2928: 0x40139e20, 0x2929: 0x4013a020, 0x292a: 0x4013a220, 0x292b: 0x4013a420, + 0x292c: 0x4013a620, 0x292d: 0x4013a820, 0x292e: 0x4013aa20, 0x292f: 0x4013ac20, + 0x2930: 0x4013ae20, 0x2931: 0x4013b020, 0x2932: 0x4013b220, 0x2933: 0x4013b420, + 0x2934: 0x4013b620, 0x2935: 0x4013b820, 0x2936: 0x4013ba20, 0x2937: 0x4013bc20, + 0x2938: 0x4013be20, 0x2939: 0x4013c020, 0x293a: 0x4013c220, 0x293b: 0x4013c420, + 0x293c: 0x4013c620, 0x293d: 0x4013c820, 0x293e: 0x4013ca20, 0x293f: 0x4013cc20, + // Block 0xa5, offset 0x2940 + 0x2940: 0x4013ce20, 0x2941: 0x4013d020, 0x2942: 0x4013d220, 0x2943: 0x40041420, + 0x2944: 0x40041620, 0x2945: 0x40041820, 0x2946: 0x40041a20, 0x2947: 0x40041c20, + 0x2948: 0x40041e20, 0x2949: 0x40042020, 0x294a: 0x40042220, 0x294b: 0x40042420, + 0x294c: 0x40042620, 0x294d: 0x40042820, 0x294e: 0x40042a20, 0x294f: 0x40042c20, + 0x2950: 0x40042e20, 0x2951: 0x40043020, 0x2952: 0x40043220, 0x2953: 0x40043420, + 0x2954: 0x40043620, 0x2955: 0x40043820, 0x2956: 0x40043a20, 0x2957: 0x40043c20, + 0x2958: 0x40043e20, 0x2959: 0x4013d420, 0x295a: 0x4013d620, 0x295b: 0x4013d820, + 0x295c: 0x4013da20, 0x295d: 0x4013dc20, 0x295e: 0x4013de20, 0x295f: 0x4013e020, + 0x2960: 0x4013e220, 0x2961: 0x4013e420, 0x2962: 0x4013e620, 0x2963: 0x4013e820, + 0x2964: 0x4013ea20, 0x2965: 0x4013ec20, 0x2966: 0x4013ee20, 0x2967: 0x4013f020, + 0x2968: 0x4013f220, 0x2969: 0x4013f420, 0x296a: 0x4013f620, 0x296b: 0x4013f820, + 0x296c: 0x4013fa20, 0x296d: 0x4013fc20, 0x296e: 0x4013fe20, 0x296f: 0x40140020, + 0x2970: 0x40140220, 0x2971: 0x40140420, 0x2972: 0x40140620, 0x2973: 0x40140820, + 0x2974: 0x40140a20, 0x2975: 0x40140c20, 0x2976: 0x40140e20, 0x2977: 0x40141020, + 0x2978: 0x40141220, 0x2979: 0x40141420, 0x297a: 0x40141620, 0x297b: 0x40141820, + 0x297c: 0x40141a20, 0x297d: 0x40141c20, 0x297e: 0x40141e20, 0x297f: 0x40142020, + // Block 0xa6, offset 0x2980 + 0x2980: 0x40142220, 0x2981: 0x40142420, 0x2982: 0x40142620, 0x2983: 0x40142820, + 0x2984: 0x40142a20, 0x2985: 0x40142c20, 0x2986: 0x40142e20, 0x2987: 0x40143020, + 0x2988: 0x40143220, 0x2989: 0x40143420, 0x298a: 0x40143620, 0x298b: 0x40143820, + 0x298c: 0x40143a20, 0x298d: 0x40143c20, 0x298e: 0x40143e20, 0x298f: 0x40144020, + 0x2990: 0x40144220, 0x2991: 0x40144420, 0x2992: 0x40144620, 0x2993: 0x40144820, + 0x2994: 0x40144a20, 0x2995: 0x40144c20, 0x2996: 0x40144e20, 0x2997: 0x40145020, + 0x2998: 0x4004c620, 0x2999: 0x4004c820, 0x299a: 0x4004ca20, 0x299b: 0x4004cc20, + 0x299c: 0x40145220, 0x299d: 0x40145420, 0x299e: 0x40145620, 0x299f: 0x40145820, + 0x29a0: 0x40145a20, 0x29a1: 0x40145c20, 0x29a2: 0x40145e20, 0x29a3: 0x40146020, + 0x29a4: 0x40146220, 0x29a5: 0x40146420, 0x29a6: 0x40146620, 0x29a7: 0x40146820, + 0x29a8: 0x40146a20, 0x29a9: 0x40146c20, 0x29aa: 0x40146e20, 0x29ab: 0x40147020, + 0x29ac: 0x40147220, 0x29ad: 0x40147420, 0x29ae: 0x40147620, 0x29af: 0x40147820, + 0x29b0: 0x40147a20, 0x29b1: 0x40147c20, 0x29b2: 0x40147e20, 0x29b3: 0x40148020, + 0x29b4: 0x40148220, 0x29b5: 0x40148420, 0x29b6: 0x40148620, 0x29b7: 0x40148820, + 0x29b8: 0x40148a20, 0x29b9: 0x40148c20, 0x29ba: 0x40148e20, 0x29bb: 0x40149020, + 0x29bc: 0x40041020, 0x29bd: 0x40041220, 0x29be: 0x40149220, 0x29bf: 0x40149420, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x40149620, 0x29c1: 0x40149820, 0x29c2: 0x40149a20, 0x29c3: 0x40149c20, + 0x29c4: 0x40149e20, 0x29c5: 0x4014a020, 0x29c6: 0x4014a220, 0x29c7: 0x4014a420, + 0x29c8: 0x4014a620, 0x29c9: 0x4014a820, 0x29ca: 0x4014aa20, 0x29cb: 0x4014ac20, + 0x29cc: 0xe00000f0, 0x29cd: 0x4014ae20, 0x29ce: 0x4014b020, 0x29cf: 0x4014b220, + 0x29d0: 0x4014b420, 0x29d1: 0x4014b620, 0x29d2: 0x4014b820, 0x29d3: 0x4014ba20, + 0x29d4: 0x4014bc20, 0x29d5: 0x4014be20, 0x29d6: 0x4014c020, 0x29d7: 0x4014c220, + 0x29d8: 0x4014c420, 0x29d9: 0x4014c620, 0x29da: 0x4014c820, 0x29db: 0x4014ca20, + 0x29dc: 0x4014cc20, 0x29dd: 0x4014ce20, 0x29de: 0x4014d020, 0x29df: 0x4014d220, + 0x29e0: 0x4014d420, 0x29e1: 0x4014d620, 0x29e2: 0x4014d820, 0x29e3: 0x4014da20, + 0x29e4: 0x4014dc20, 0x29e5: 0x4014de20, 0x29e6: 0x4014e020, 0x29e7: 0x4014e220, + 0x29e8: 0x4014e420, 0x29e9: 0x4014e620, 0x29ea: 0x4014e820, 0x29eb: 0x4014ea20, + 0x29ec: 0x4014ec20, 0x29ed: 0x4014ee20, 0x29ee: 0x4014f020, 0x29ef: 0x4014f220, + 0x29f0: 0x4014f420, 0x29f1: 0x4014f620, 0x29f2: 0x4014f820, 0x29f3: 0x4014fa20, + 0x29f4: 0x4014fc20, 0x29f5: 0x4014fe20, 0x29f6: 0x40150020, 0x29f7: 0x40150220, + 0x29f8: 0x40150420, 0x29f9: 0x40150620, 0x29fa: 0x40150820, 0x29fb: 0x40150a20, + 0x29fc: 0x40150c20, 0x29fd: 0x40150e20, 0x29fe: 0x40151020, 0x29ff: 0x40151220, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x40151420, 0x2a01: 0x40151620, 0x2a02: 0x40151820, 0x2a03: 0x40151a20, + 0x2a04: 0x40151c20, 0x2a05: 0x40151e20, 0x2a06: 0x40152020, 0x2a07: 0x40152220, + 0x2a08: 0x40152420, 0x2a09: 0x40152620, 0x2a0a: 0x40152820, 0x2a0b: 0x40152a20, + 0x2a0c: 0x40152c20, 0x2a0d: 0x40152e20, 0x2a0e: 0x40153020, 0x2a0f: 0x40153220, + 0x2a10: 0x40153420, 0x2a11: 0x40153620, 0x2a12: 0x40153820, 0x2a13: 0x40153a20, + 0x2a14: 0x40153c20, 0x2a15: 0x40153e20, 0x2a16: 0x40154020, 0x2a17: 0x40154220, + 0x2a18: 0x40154420, 0x2a19: 0x40154620, 0x2a1a: 0x40154820, 0x2a1b: 0x40154a20, + 0x2a1c: 0x40154c20, 0x2a1d: 0x40154e20, 0x2a1e: 0x40155020, 0x2a1f: 0x40155220, + 0x2a20: 0x40155420, 0x2a21: 0x40155620, 0x2a22: 0x40155820, 0x2a23: 0x40155a20, + 0x2a24: 0x40155c20, 0x2a25: 0x40155e20, 0x2a26: 0x40156020, 0x2a27: 0x40156220, + 0x2a28: 0x40156420, 0x2a29: 0x40156620, 0x2a2a: 0x40156820, 0x2a2b: 0x40156a20, + 0x2a2c: 0x40156c20, 0x2a2d: 0x40156e20, 0x2a2e: 0x40157020, 0x2a2f: 0x40157220, + 0x2a30: 0x40157420, 0x2a31: 0x40157620, 0x2a32: 0x40157820, 0x2a33: 0x40157a20, + 0x2a34: 0xf0000404, 0x2a35: 0xf0001f04, 0x2a36: 0xf0000404, 0x2a37: 0x40157c20, + 0x2a38: 0x40157e20, 0x2a39: 0x40158020, 0x2a3a: 0x40158220, 0x2a3b: 0x40158420, + 0x2a3c: 0x40158620, 0x2a3d: 0x40158820, 0x2a3e: 0x40158a20, 0x2a3f: 0x40158c20, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x40158e20, 0x2a41: 0x40159020, 0x2a42: 0x40159220, 0x2a43: 0x40159420, + 0x2a44: 0x40159620, 0x2a45: 0x40159820, 0x2a46: 0x40159a20, 0x2a47: 0x40159c20, + 0x2a48: 0x40159e20, 0x2a49: 0x4015a020, 0x2a4a: 0x4015a220, 0x2a4b: 0x4015a420, + 0x2a4c: 0x4015a620, 0x2a4d: 0x4015a820, 0x2a4e: 0x4015aa20, 0x2a4f: 0x4015ac20, + 0x2a50: 0x4015ae20, 0x2a51: 0x4015b020, 0x2a52: 0x4015b220, 0x2a53: 0x4015b420, + 0x2a54: 0x4015b620, 0x2a55: 0x4015b820, 0x2a56: 0x4015ba20, 0x2a57: 0x4015bc20, + 0x2a58: 0x4015be20, 0x2a59: 0x4015c020, 0x2a5a: 0x4015c220, 0x2a5b: 0x4015c420, + 0x2a5c: 0x4015c620, 0x2a5d: 0x4015c820, 0x2a5e: 0x4015ca20, 0x2a5f: 0x4015cc20, + 0x2a60: 0x4015ce20, 0x2a61: 0x4015d020, 0x2a62: 0x4015d220, 0x2a63: 0x4015d420, + 0x2a64: 0x4015d620, 0x2a65: 0x4015d820, 0x2a66: 0x4015da20, 0x2a67: 0x4015dc20, + 0x2a68: 0x4015de20, 0x2a69: 0x4015e020, 0x2a6a: 0x4015e220, 0x2a6b: 0x4015e420, + 0x2a6c: 0x4015e620, 0x2a6d: 0x4015e820, 0x2a6e: 0x4015ea20, 0x2a6f: 0x4015ec20, + 0x2a70: 0x4015ee20, 0x2a71: 0x4015f020, 0x2a72: 0x4015f220, 0x2a73: 0x4015f420, + 0x2a74: 0x4015f620, 0x2a75: 0x4015f820, 0x2a76: 0x4015fa20, 0x2a77: 0x4015fc20, + 0x2a78: 0x4015fe20, 0x2a79: 0x40160020, 0x2a7a: 0x40160220, 0x2a7b: 0x40160420, + 0x2a7c: 0x40160620, 0x2a7d: 0x40160820, 0x2a7e: 0x40160a20, 0x2a7f: 0x40160c20, + // Block 0xaa, offset 0x2a80 + 0x2a80: 0x40160e20, 0x2a81: 0x40161020, 0x2a82: 0x40161220, 0x2a83: 0x40161420, + 0x2a84: 0x40161620, 0x2a85: 0x40161820, 0x2a86: 0x40161a20, 0x2a87: 0x40161c20, + 0x2a88: 0x40161e20, 0x2a89: 0x40162020, 0x2a8a: 0x40162220, 0x2a8b: 0x40162420, + 0x2a8c: 0x40162620, 0x2a8d: 0x40162820, 0x2a8e: 0x40162a20, 0x2a8f: 0x40162c20, + 0x2a90: 0x40162e20, 0x2a91: 0x40163020, 0x2a92: 0x40163220, 0x2a93: 0x40163420, + 0x2a94: 0x40163620, 0x2a95: 0x40163820, 0x2a96: 0x40163a20, 0x2a97: 0x40163c20, + 0x2a98: 0x40163e20, 0x2a99: 0x40164020, 0x2a9a: 0x40164220, 0x2a9b: 0x40164420, + 0x2a9c: 0xe000014f, 0x2a9d: 0x40164620, 0x2a9e: 0x40164820, 0x2a9f: 0x40164a20, + 0x2aa0: 0x40164c20, 0x2aa1: 0x40164e20, 0x2aa2: 0x40165020, 0x2aa3: 0x40165220, + 0x2aa4: 0x40165420, 0x2aa5: 0x40165620, 0x2aa6: 0x40165820, 0x2aa7: 0x40165a20, + 0x2aa8: 0x40165c20, 0x2aa9: 0x40165e20, 0x2aaa: 0x40166020, 0x2aab: 0x40166220, + 0x2aac: 0x40166420, 0x2aad: 0x40166620, 0x2aae: 0x40166820, 0x2aaf: 0x40166a20, + 0x2ab0: 0x40166c20, 0x2ab1: 0x40166e20, 0x2ab2: 0x40167020, 0x2ab3: 0x40167220, + 0x2ab4: 0x40167420, 0x2ab5: 0x40167620, 0x2ab6: 0x40167820, 0x2ab7: 0x40167a20, + 0x2ab8: 0x40167c20, 0x2ab9: 0x40167e20, 0x2aba: 0x40168020, 0x2abb: 0x40168220, + 0x2abc: 0x40168420, 0x2abd: 0x40168620, 0x2abe: 0x40168820, 0x2abf: 0x40168a20, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x40168c20, 0x2ac1: 0x40168e20, 0x2ac2: 0x40169020, 0x2ac3: 0x40169220, + 0x2ac4: 0x40169420, 0x2ac5: 0x40169620, 0x2ac6: 0x40169820, 0x2ac7: 0x40169a20, + 0x2ac8: 0x40169c20, 0x2ac9: 0x40169e20, 0x2aca: 0x4016a020, 0x2acb: 0x4016a220, + 0x2acc: 0x4016a420, 0x2acd: 0x4016a620, 0x2ace: 0x4016a820, 0x2acf: 0x4016aa20, + 0x2ad0: 0x4016ac20, 0x2ad1: 0x4016ae20, 0x2ad2: 0x4016b020, 0x2ad3: 0x4016b220, + 0x2ad4: 0x4016b420, 0x2ad5: 0x4016b620, 0x2ad6: 0x4016b820, 0x2ad7: 0x4016ba20, + 0x2ad8: 0x4016bc20, 0x2ad9: 0x4016be20, 0x2ada: 0x4016c020, 0x2adb: 0x4016c220, + 0x2adc: 0x4016c420, 0x2add: 0x4016c620, 0x2ade: 0x4016c820, 0x2adf: 0x4016ca20, + 0x2ae0: 0x4016cc20, 0x2ae1: 0x4016ce20, 0x2ae2: 0x4016d020, 0x2ae3: 0x4016d220, + 0x2ae4: 0x4016d420, 0x2ae5: 0x4016d620, 0x2ae6: 0x4016d820, 0x2ae7: 0x4016da20, + 0x2ae8: 0x4016dc20, 0x2ae9: 0x4016de20, 0x2aea: 0x4016e020, 0x2aeb: 0x4016e220, + 0x2aec: 0x4016e420, 0x2aed: 0x4016e620, 0x2aee: 0x4016e820, 0x2aef: 0x4016ea20, + 0x2af0: 0x4016ec20, 0x2af1: 0x4016ee20, 0x2af2: 0x4016f020, 0x2af3: 0x4016f220, + 0x2af4: 0x4016f420, 0x2af5: 0x4016f620, 0x2af6: 0x4016f820, 0x2af7: 0x4016fa20, + 0x2af8: 0x4016fc20, 0x2af9: 0x4016fe20, 0x2afa: 0x40170020, 0x2afb: 0x40170220, + 0x2afc: 0x40170420, 0x2afd: 0x40170620, 0x2afe: 0x40170820, 0x2aff: 0x40170a20, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x40170c20, 0x2b01: 0x40170e20, 0x2b02: 0x40171020, 0x2b03: 0x40171220, + 0x2b04: 0x40171420, 0x2b05: 0x40171620, 0x2b06: 0x40171820, 0x2b07: 0x40171a20, + 0x2b08: 0x40171c20, 0x2b09: 0x40171e20, 0x2b0a: 0x40172020, 0x2b0b: 0x40172220, + 0x2b0c: 0x40172420, + 0x2b10: 0x40172620, 0x2b11: 0x40172820, 0x2b12: 0x40172a20, 0x2b13: 0x40172c20, + 0x2b14: 0x40172e20, 0x2b15: 0x40173020, 0x2b16: 0x40173220, 0x2b17: 0x40173420, + 0x2b18: 0x40173620, 0x2b19: 0x40173820, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x00373888, 0x2b41: 0x00373a88, 0x2b42: 0x00373c88, 0x2b43: 0x00373e88, + 0x2b44: 0x00374088, 0x2b45: 0x00374288, 0x2b46: 0x00374488, 0x2b47: 0x00374688, + 0x2b48: 0x00374888, 0x2b49: 0x00374a88, 0x2b4a: 0x00374c88, 0x2b4b: 0x00374e88, + 0x2b4c: 0x00375088, 0x2b4d: 0x00375288, 0x2b4e: 0x00375488, 0x2b4f: 0x00375688, + 0x2b50: 0x00375888, 0x2b51: 0x00375a88, 0x2b52: 0x00375c88, 0x2b53: 0x00375e88, + 0x2b54: 0x00376088, 0x2b55: 0x00376288, 0x2b56: 0x00376488, 0x2b57: 0x00376688, + 0x2b58: 0x00376888, 0x2b59: 0x00376a88, 0x2b5a: 0x00376c88, 0x2b5b: 0x00376e88, + 0x2b5c: 0x00377088, 0x2b5d: 0x00377288, 0x2b5e: 0x00377488, 0x2b5f: 0x00377688, + 0x2b60: 0x00377888, 0x2b61: 0x00377a88, 0x2b62: 0x00377c88, 0x2b63: 0x00377e88, + 0x2b64: 0x00378088, 0x2b65: 0x00378288, 0x2b66: 0x00378488, 0x2b67: 0x00378688, + 0x2b68: 0x00378888, 0x2b69: 0x00378a88, 0x2b6a: 0x00378c88, 0x2b6b: 0x00378e88, + 0x2b6c: 0x00379088, 0x2b6d: 0x00379288, 0x2b6e: 0x00379488, + 0x2b70: 0x40373820, 0x2b71: 0x40373a20, 0x2b72: 0x40373c20, 0x2b73: 0x40373e20, + 0x2b74: 0x40374020, 0x2b75: 0x40374220, 0x2b76: 0x40374420, 0x2b77: 0x40374620, + 0x2b78: 0x40374820, 0x2b79: 0x40374a20, 0x2b7a: 0x40374c20, 0x2b7b: 0x40374e20, + 0x2b7c: 0x40375020, 0x2b7d: 0x40375220, 0x2b7e: 0x40375420, 0x2b7f: 0x40375620, + // Block 0xae, offset 0x2b80 + 0x2b80: 0x40375820, 0x2b81: 0x40375a20, 0x2b82: 0x40375c20, 0x2b83: 0x40375e20, + 0x2b84: 0x40376020, 0x2b85: 0x40376220, 0x2b86: 0x40376420, 0x2b87: 0x40376620, + 0x2b88: 0x40376820, 0x2b89: 0x40376a20, 0x2b8a: 0x40376c20, 0x2b8b: 0x40376e20, + 0x2b8c: 0x40377020, 0x2b8d: 0x40377220, 0x2b8e: 0x40377420, 0x2b8f: 0x40377620, + 0x2b90: 0x40377820, 0x2b91: 0x40377a20, 0x2b92: 0x40377c20, 0x2b93: 0x40377e20, + 0x2b94: 0x40378020, 0x2b95: 0x40378220, 0x2b96: 0x40378420, 0x2b97: 0x40378620, + 0x2b98: 0x40378820, 0x2b99: 0x40378a20, 0x2b9a: 0x40378c20, 0x2b9b: 0x40378e20, + 0x2b9c: 0x40379020, 0x2b9d: 0x40379220, 0x2b9e: 0x40379420, + 0x2ba0: 0x002e4088, 0x2ba1: 0x402e4020, 0x2ba2: 0x002e4288, 0x2ba3: 0x002f3688, + 0x2ba4: 0x002fbe88, 0x2ba5: 0x402be820, 0x2ba6: 0x40303e20, 0x2ba7: 0x002d8888, + 0x2ba8: 0x402d8820, 0x2ba9: 0x002e1288, 0x2baa: 0x402e1220, 0x2bab: 0x00316088, + 0x2bac: 0x40316020, 0x2bad: 0x002bf888, 0x2bae: 0x002e9088, 0x2baf: 0x002bf088, + 0x2bb0: 0x002c0288, 0x2bb1: 0x4030d420, 0x2bb2: 0x0030ec88, 0x2bb3: 0x4030ec20, + 0x2bb4: 0x4030d620, 0x2bb5: 0x002d8a88, 0x2bb6: 0x402d8a20, 0x2bb7: 0x402f5420, + 0x2bb8: 0x402cac20, 0x2bb9: 0x402fb420, 0x2bba: 0x402f0e20, 0x2bbb: 0x402cb620, + 0x2bbc: 0x002dcc95, 0x2bbd: 0x0030be9d, 0x2bbe: 0x002ffc88, 0x2bbf: 0x00315888, + // Block 0xaf, offset 0x2bc0 + 0x2bc0: 0x0032aa88, 0x2bc1: 0x4032aa20, 0x2bc2: 0x0032ac88, 0x2bc3: 0x4032ac20, + 0x2bc4: 0x0032ae88, 0x2bc5: 0x4032ae20, 0x2bc6: 0x0032b088, 0x2bc7: 0x4032b020, + 0x2bc8: 0x0032b288, 0x2bc9: 0x4032b220, 0x2bca: 0x0032b688, 0x2bcb: 0x4032b620, + 0x2bcc: 0x0032b888, 0x2bcd: 0x4032b820, 0x2bce: 0x0032ba88, 0x2bcf: 0x4032ba20, + 0x2bd0: 0x0032bc88, 0x2bd1: 0x4032bc20, 0x2bd2: 0x0032be88, 0x2bd3: 0x4032be20, + 0x2bd4: 0x0032c088, 0x2bd5: 0x4032c020, 0x2bd6: 0x0032c488, 0x2bd7: 0x4032c420, + 0x2bd8: 0x0032c688, 0x2bd9: 0x4032c620, 0x2bda: 0x0032c888, 0x2bdb: 0x4032c820, + 0x2bdc: 0x0032ce88, 0x2bdd: 0x4032ce20, 0x2bde: 0x0032d088, 0x2bdf: 0x4032d020, + 0x2be0: 0x0032d288, 0x2be1: 0x4032d220, 0x2be2: 0x0032d488, 0x2be3: 0x4032d420, + 0x2be4: 0x0032d688, 0x2be5: 0x4032d620, 0x2be6: 0x0032d888, 0x2be7: 0x4032d820, + 0x2be8: 0x0032da88, 0x2be9: 0x4032da20, 0x2bea: 0x0032dc88, 0x2beb: 0x4032dc20, + 0x2bec: 0x0032de88, 0x2bed: 0x4032de20, 0x2bee: 0x0032e088, 0x2bef: 0x4032e020, + 0x2bf0: 0x0032e288, 0x2bf1: 0x4032e220, 0x2bf2: 0x00331888, 0x2bf3: 0x40331820, + 0x2bf4: 0x00331a88, 0x2bf5: 0x40331a20, 0x2bf6: 0x0032b488, 0x2bf7: 0x4032b420, + 0x2bf8: 0x0032c288, 0x2bf9: 0x4032c220, 0x2bfa: 0x0032ca88, 0x2bfb: 0x4032ca20, + 0x2bfc: 0x0032cc88, 0x2bfd: 0x4032cc20, 0x2bfe: 0x0032e488, 0x2bff: 0x4032e420, + // Block 0xb0, offset 0x2c00 + 0x2c00: 0x0032e688, 0x2c01: 0x4032e620, 0x2c02: 0x0032ec88, 0x2c03: 0x4032ec20, + 0x2c04: 0x0032ee88, 0x2c05: 0x4032ee20, 0x2c06: 0x0032f088, 0x2c07: 0x4032f020, + 0x2c08: 0x0032f888, 0x2c09: 0x4032f820, 0x2c0a: 0x0032fc88, 0x2c0b: 0x4032fc20, + 0x2c0c: 0x0032fe88, 0x2c0d: 0x4032fe20, 0x2c0e: 0x00330088, 0x2c0f: 0x40330020, + 0x2c10: 0x00330288, 0x2c11: 0x40330220, 0x2c12: 0x00330488, 0x2c13: 0x40330420, + 0x2c14: 0x00330688, 0x2c15: 0x40330620, 0x2c16: 0x00330c88, 0x2c17: 0x40330c20, + 0x2c18: 0x00331088, 0x2c19: 0x40331020, 0x2c1a: 0x00331288, 0x2c1b: 0x40331220, + 0x2c1c: 0x00331488, 0x2c1d: 0x40331420, 0x2c1e: 0x00331c88, 0x2c1f: 0x40331c20, + 0x2c20: 0x00331e88, 0x2c21: 0x40331e20, 0x2c22: 0x00332088, 0x2c23: 0x40332020, + 0x2c24: 0xe00014b0, 0x2c25: 0x40173a20, 0x2c26: 0x40173c20, 0x2c27: 0x40173e20, + 0x2c28: 0x40174020, 0x2c29: 0x40174220, 0x2c2a: 0x40174420, 0x2c2b: 0x0032ea88, + 0x2c2c: 0x4032ea20, 0x2c2d: 0x00330a88, 0x2c2e: 0x40330a20, 0x2c2f: 0xae605f02, + 0x2c30: 0xae602a02, 0x2c31: 0xae602202, 0x2c32: 0x0032f688, 0x2c33: 0x4032f620, + 0x2c39: 0x4002f820, 0x2c3a: 0x4002d420, 0x2c3b: 0x4002d620, + 0x2c3c: 0x4003b620, 0x2c3d: 0x4028b420, 0x2c3e: 0x4002fa20, 0x2c3f: 0x4003b820, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x40379820, 0x2c41: 0x40379c20, 0x2c42: 0x4037a020, 0x2c43: 0x4037a420, + 0x2c44: 0x4037a820, 0x2c45: 0x4037ac20, 0x2c46: 0x4037b020, 0x2c47: 0x4037b820, + 0x2c48: 0x4037bc20, 0x2c49: 0x4037c020, 0x2c4a: 0x4037c420, 0x2c4b: 0x4037c820, + 0x2c4c: 0x4037cc20, 0x2c4d: 0x4037d420, 0x2c4e: 0x4037d820, 0x2c4f: 0x4037dc20, + 0x2c50: 0x4037e020, 0x2c51: 0x4037e420, 0x2c52: 0x4037e820, 0x2c53: 0x4037f020, + 0x2c54: 0x4037f420, 0x2c55: 0x4037f820, 0x2c56: 0x4037fc20, 0x2c57: 0x40380020, + 0x2c58: 0x40380420, 0x2c59: 0x40380820, 0x2c5a: 0x40380c20, 0x2c5b: 0x40381020, + 0x2c5c: 0x40381420, 0x2c5d: 0x40381820, 0x2c5e: 0x40381c20, 0x2c5f: 0x40382420, + 0x2c60: 0x40382820, 0x2c61: 0x4037b420, 0x2c62: 0x4037d020, 0x2c63: 0x4037ec20, + 0x2c64: 0x40382020, 0x2c65: 0x40382c20, 0x2c67: 0x40383220, + 0x2c6d: 0x40383c20, + 0x2c70: 0x403bbc20, 0x2c71: 0x403bbe20, 0x2c72: 0x403bc020, 0x2c73: 0x403bc220, + 0x2c74: 0x403bc420, 0x2c75: 0x403bc620, 0x2c76: 0x403bc820, 0x2c77: 0x403bca20, + 0x2c78: 0x403bcc20, 0x2c79: 0x403bce20, 0x2c7a: 0x403bd020, 0x2c7b: 0x403bd220, + 0x2c7c: 0x403bd620, 0x2c7d: 0x403bd820, 0x2c7e: 0x403bda20, 0x2c7f: 0x403bdc20, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x403bde20, 0x2c81: 0x403be020, 0x2c82: 0x403be220, 0x2c83: 0x403be420, + 0x2c84: 0x403be620, 0x2c85: 0x403be820, 0x2c86: 0x403bea20, 0x2c87: 0x403bec20, + 0x2c88: 0x403bee20, 0x2c89: 0x403bf020, 0x2c8a: 0x403bf220, 0x2c8b: 0x403bf420, + 0x2c8c: 0x403bf620, 0x2c8d: 0x403bf820, 0x2c8e: 0x403bfa20, 0x2c8f: 0x403bfc20, + 0x2c90: 0x403bfe20, 0x2c91: 0x403c0020, 0x2c92: 0x403c0220, 0x2c93: 0x403c0420, + 0x2c94: 0x403c0820, 0x2c95: 0x403c0a20, 0x2c96: 0x403c0c20, 0x2c97: 0x403c0e20, + 0x2c98: 0x403c1020, 0x2c99: 0x403c1220, 0x2c9a: 0x403c1420, 0x2c9b: 0x403c1620, + 0x2c9c: 0x403c1820, 0x2c9d: 0x403c1a20, 0x2c9e: 0x403c1c20, 0x2c9f: 0x403c1e20, + 0x2ca0: 0x403c2020, 0x2ca1: 0x403c2220, 0x2ca2: 0x403c2420, 0x2ca3: 0x403c2620, + 0x2ca4: 0x403c2820, 0x2ca5: 0x403c2a20, 0x2ca6: 0x403bd420, 0x2ca7: 0x403c0620, + 0x2caf: 0x403c2c20, + 0x2cb0: 0x4005e620, + 0x2cbf: 0xa0900000, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x403c4e20, 0x2cc1: 0x403c7820, 0x2cc2: 0x403c9a20, 0x2cc3: 0x403cac20, + 0x2cc4: 0x403cca20, 0x2cc5: 0x403d1620, 0x2cc6: 0x403d3820, 0x2cc7: 0x403d4a20, + 0x2cc8: 0x403d7620, 0x2cc9: 0x403d8820, 0x2cca: 0x403d9a20, 0x2ccb: 0x403dfc20, + 0x2ccc: 0x403e3a20, 0x2ccd: 0x403e5820, 0x2cce: 0x403e6a20, 0x2ccf: 0x403eae20, + 0x2cd0: 0x403ec020, 0x2cd1: 0x403ee020, 0x2cd2: 0x403f4020, 0x2cd3: 0x403e9620, + 0x2cd4: 0x403e9820, 0x2cd5: 0x403e9a20, 0x2cd6: 0x403e9c20, + 0x2ce0: 0x403f4820, 0x2ce1: 0x403f4a20, 0x2ce2: 0x403f4c20, 0x2ce3: 0x403f4e20, + 0x2ce4: 0x403f5020, 0x2ce5: 0x403f5220, 0x2ce6: 0x403f5420, + 0x2ce8: 0x403f5620, 0x2ce9: 0x403f5820, 0x2cea: 0x403f5a20, 0x2ceb: 0x403f5c20, + 0x2cec: 0x403f5e20, 0x2ced: 0x403f6020, 0x2cee: 0x403f6220, + 0x2cf0: 0x403f6420, 0x2cf1: 0x403f6620, 0x2cf2: 0x403f6820, 0x2cf3: 0x403f6a20, + 0x2cf4: 0x403f6c20, 0x2cf5: 0x403f6e20, 0x2cf6: 0x403f7020, + 0x2cf8: 0x403f7220, 0x2cf9: 0x403f7420, 0x2cfa: 0x403f7620, 0x2cfb: 0x403f7820, + 0x2cfc: 0x403f7a20, 0x2cfd: 0x403f7c20, 0x2cfe: 0x403f7e20, + // Block 0xb4, offset 0x2d00 + 0x2d00: 0x403f8020, 0x2d01: 0x403f8220, 0x2d02: 0x403f8420, 0x2d03: 0x403f8620, + 0x2d04: 0x403f8820, 0x2d05: 0x403f8a20, 0x2d06: 0x403f8c20, + 0x2d08: 0x403f8e20, 0x2d09: 0x403f9020, 0x2d0a: 0x403f9220, 0x2d0b: 0x403f9420, + 0x2d0c: 0x403f9620, 0x2d0d: 0x403f9820, 0x2d0e: 0x403f9a20, + 0x2d10: 0x403f9c20, 0x2d11: 0x403f9e20, 0x2d12: 0x403fa020, 0x2d13: 0x403fa220, + 0x2d14: 0x403fa420, 0x2d15: 0x403fa620, 0x2d16: 0x403fa820, + 0x2d18: 0x403faa20, 0x2d19: 0x403fac20, 0x2d1a: 0x403fae20, 0x2d1b: 0x403fb020, + 0x2d1c: 0x403fb220, 0x2d1d: 0x403fb420, 0x2d1e: 0x403fb620, + 0x2d20: 0x84e619a9, 0x2d21: 0x84e619ad, 0x2d22: 0x84e619b1, 0x2d23: 0x84e619c5, + 0x2d24: 0x84e619e5, 0x2d25: 0x84e619f2, 0x2d26: 0x84e61a28, 0x2d27: 0x84e61a42, + 0x2d28: 0x84e61a54, 0x2d29: 0x84e61a5d, 0x2d2a: 0x84e61a77, 0x2d2b: 0x84e61a87, + 0x2d2c: 0x84e61a94, 0x2d2d: 0x84e61a9d, 0x2d2e: 0x84e61aa6, 0x2d2f: 0x84e61ada, + 0x2d30: 0x84e61b01, 0x2d31: 0x84e61b0c, 0x2d32: 0x84e61b2e, 0x2d33: 0x84e61b33, + 0x2d34: 0x84e61b86, 0x2d35: 0xe00014d8, 0x2d36: 0x84e61991, 0x2d37: 0x84e619d9, + 0x2d38: 0x84e61a27, 0x2d39: 0x84e61ad1, 0x2d3a: 0x84e61b4f, 0x2d3b: 0x84e61b5c, + 0x2d3c: 0x84e61b61, 0x2d3d: 0x84e61b6b, 0x2d3e: 0x84e61b70, 0x2d3f: 0x84e61b7a, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x40052620, 0x2d41: 0x40052820, 0x2d42: 0x40047420, 0x2d43: 0x40047620, + 0x2d44: 0x40047820, 0x2d45: 0x40047a20, 0x2d46: 0x40052a20, 0x2d47: 0x40052c20, + 0x2d48: 0x40052e20, 0x2d49: 0x40047c20, 0x2d4a: 0x40047e20, 0x2d4b: 0x40053020, + 0x2d4c: 0x40048020, 0x2d4d: 0x40048220, 0x2d4e: 0x40053220, 0x2d4f: 0x40053420, + 0x2d50: 0x40053620, 0x2d51: 0x40053820, 0x2d52: 0x40053a20, 0x2d53: 0x40053c20, + 0x2d54: 0x40053e20, 0x2d55: 0x40054020, 0x2d56: 0x40054220, 0x2d57: 0x40023620, + 0x2d58: 0x4002e220, 0x2d59: 0x4003ba20, 0x2d5a: 0x40054420, 0x2d5b: 0x40054620, + 0x2d5c: 0x40048420, 0x2d5d: 0x40048620, 0x2d5e: 0x40054820, 0x2d5f: 0x40054a20, + 0x2d60: 0x40048820, 0x2d61: 0x40048a20, 0x2d62: 0x40048c20, 0x2d63: 0x40048e20, + 0x2d64: 0x40049020, 0x2d65: 0x40049220, 0x2d66: 0x40049420, 0x2d67: 0x40049620, + 0x2d68: 0x40049820, 0x2d69: 0x40049a20, 0x2d6a: 0x4003ae20, 0x2d6b: 0x4003b020, + 0x2d6c: 0x4003b220, 0x2d6d: 0x4003b420, 0x2d6e: 0x4002c820, 0x2d6f: 0x40367020, + 0x2d70: 0x4002fc20, 0x2d71: 0x40030820, 0x2d72: 0x40024420, 0x2d73: 0x40030a20, + 0x2d74: 0x40024220, 0x2d75: 0x40026820, 0x2d76: 0x4004fc20, 0x2d77: 0x4004fe20, + 0x2d78: 0x40050020, 0x2d79: 0x4004d020, 0x2d7a: 0x40023020, 0x2d7b: 0x40023220, + // Block 0xb6, offset 0x2d80 + 0x2d80: 0xe0002401, 0x2d81: 0xe0002416, 0x2d82: 0x029cb684, 0x2d83: 0x029cb484, + 0x2d84: 0xe0002404, 0x2d85: 0x029d7684, 0x2d86: 0xe0002407, 0x2d87: 0xe000240a, + 0x2d88: 0xe000240d, 0x2d89: 0x02a40484, 0x2d8a: 0xe0002410, 0x2d8b: 0xe0002413, + 0x2d8c: 0xe0002419, 0x2d8d: 0xe000241c, 0x2d8e: 0xe000241f, 0x2d8f: 0x02b84684, + 0x2d90: 0x02b84484, 0x2d91: 0xe0002422, 0x2d92: 0x02bbe684, 0x2d93: 0x02bcf484, + 0x2d94: 0x02bea284, 0x2d95: 0xe0002425, 0x2d96: 0x02bf8884, 0x2d97: 0xe0002428, + 0x2d98: 0x02c49884, 0x2d99: 0x02ca6a84, 0x2d9b: 0x02cbc284, + 0x2d9c: 0xe000242b, 0x2d9d: 0xe000242e, 0x2d9e: 0xe0002436, 0x2d9f: 0x02d79a84, + 0x2da0: 0x02d82284, 0x2da1: 0x02d86a84, 0x2da2: 0x02d87484, 0x2da3: 0x02e0d884, + 0x2da4: 0x02e45684, 0x2da5: 0xe0002439, 0x2da6: 0x029c5884, 0x2da7: 0xe000243c, + 0x2da8: 0x02e55a84, 0x2da9: 0xe000243f, 0x2daa: 0xe0002442, 0x2dab: 0xe0002445, + 0x2dac: 0xe0002448, 0x2dad: 0x02f27684, 0x2dae: 0xe000244b, 0x2daf: 0x02f9f284, + 0x2db0: 0x02fd3e84, 0x2db1: 0x02fea684, 0x2db2: 0x02fea484, 0x2db3: 0xe0002451, + 0x2db4: 0xe0002454, 0x2db5: 0xe000244e, 0x2db6: 0xe0002457, 0x2db7: 0xe000245a, + 0x2db8: 0x02ff1684, 0x2db9: 0x03000484, 0x2dba: 0x03010084, 0x2dbb: 0xe000245d, + 0x2dbc: 0xe0002460, 0x2dbd: 0xe0002463, 0x2dbe: 0x0304f284, 0x2dbf: 0xe0002466, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0xe0002469, 0x2dc1: 0x030c9c84, 0x2dc2: 0x0310c884, 0x2dc3: 0x03130084, + 0x2dc4: 0x0312fe84, 0x2dc5: 0x03138284, 0x2dc6: 0x0313a484, 0x2dc7: 0xe000246c, + 0x2dc8: 0x03174084, 0x2dc9: 0x031a3a84, 0x2dca: 0xe000246f, 0x2dcb: 0x031ecc84, + 0x2dcc: 0x031f6c84, 0x2dcd: 0xe0002472, 0x2dce: 0xe0002475, 0x2dcf: 0xe0002478, + 0x2dd0: 0x03290a84, 0x2dd1: 0x032aee84, 0x2dd2: 0x032af084, 0x2dd3: 0x032afe84, + 0x2dd4: 0x032bd084, 0x2dd5: 0xe000247b, 0x2dd6: 0x032c3a84, 0x2dd7: 0xe000247e, + 0x2dd8: 0x032ea484, 0x2dd9: 0x032fcc84, 0x2dda: 0x0330ea84, 0x2ddb: 0x03319c84, + 0x2ddc: 0x0331bc84, 0x2ddd: 0x0331be84, 0x2dde: 0xe0002481, 0x2ddf: 0x0331c084, + 0x2de0: 0x0332c684, 0x2de1: 0xe0002484, 0x2de2: 0x0334d884, 0x2de3: 0xe0002487, + 0x2de4: 0xe000248a, 0x2de5: 0x0338f884, 0x2de6: 0x033c3e84, 0x2de7: 0xe000248d, + 0x2de8: 0x033d4c84, 0x2de9: 0x033d8884, 0x2dea: 0x033dfc84, 0x2deb: 0xe0002490, + 0x2dec: 0x033ea084, 0x2ded: 0xe0002493, 0x2dee: 0x033efe84, 0x2def: 0xe0002496, + 0x2df0: 0x033f3284, 0x2df1: 0xe0002499, 0x2df2: 0xe000249c, 0x2df3: 0x033f3e84, + // Block 0xb8, offset 0x2e00 + 0x2e00: 0x029c0084, 0x2e01: 0x029c5084, 0x2e02: 0x029c6c84, 0x2e03: 0x029c7e84, + 0x2e04: 0x029cb284, 0x2e05: 0x029d0a84, 0x2e06: 0x029d1884, 0x2e07: 0x029d4084, + 0x2e08: 0x029d7484, 0x2e09: 0x02a27e84, 0x2e0a: 0x02a2ca84, 0x2e0b: 0x02a2d684, + 0x2e0c: 0x02a30484, 0x2e0d: 0x02a32c84, 0x2e0e: 0x02a35684, 0x2e0f: 0x02a3c084, + 0x2e10: 0x02a3ea84, 0x2e11: 0x02a40084, 0x2e12: 0x02a53684, 0x2e13: 0x02a5f284, + 0x2e14: 0x02a62a84, 0x2e15: 0x02a63484, 0x2e16: 0x02a67084, 0x2e17: 0x02a68284, + 0x2e18: 0x02a6b884, 0x2e19: 0x02a6d284, 0x2e1a: 0x02a70484, 0x2e1b: 0x02a76c84, + 0x2e1c: 0x02a79084, 0x2e1d: 0x02a7c684, 0x2e1e: 0x02adae84, 0x2e1f: 0x02ae3e84, + 0x2e20: 0x02b1d684, 0x2e21: 0x02b20484, 0x2e22: 0x02b21484, 0x2e23: 0x02b22a84, + 0x2e24: 0x02b24e84, 0x2e25: 0x02b2e684, 0x2e26: 0x02b6a084, 0x2e27: 0x02b70084, + 0x2e28: 0x02b7f084, 0x2e29: 0x02b81e84, 0x2e2a: 0x02b84484, 0x2e2b: 0x02b87084, + 0x2e2c: 0x02b8dc84, 0x2e2d: 0x02b8e284, 0x2e2e: 0x02bbb684, 0x2e2f: 0x02bbca84, + 0x2e30: 0x02bbe284, 0x2e31: 0x02bbfc84, 0x2e32: 0x02bce484, 0x2e33: 0x02bcf484, + 0x2e34: 0x02bcfe84, 0x2e35: 0x02bde884, 0x2e36: 0x02bdfc84, 0x2e37: 0x02be1684, + 0x2e38: 0x02be2684, 0x2e39: 0x02bea084, 0x2e3a: 0x02bec284, 0x2e3b: 0x02bee684, + 0x2e3c: 0x02bf8684, 0x2e3d: 0x02c41084, 0x2e3e: 0x02c46c84, 0x2e3f: 0x02c49684, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x02ca5e84, 0x2e41: 0x02ca6884, 0x2e42: 0x02cb0e84, 0x2e43: 0x02cb2e84, + 0x2e44: 0x02cb4884, 0x2e45: 0x02cb7284, 0x2e46: 0x02cbc084, 0x2e47: 0x02cbca84, + 0x2e48: 0x02cde084, 0x2e49: 0x02ce1084, 0x2e4a: 0x02ce5084, 0x2e4b: 0x02d64084, + 0x2e4c: 0x02d6c484, 0x2e4d: 0x02d6f284, 0x2e4e: 0x02d76684, 0x2e4f: 0x02d79684, + 0x2e50: 0x02d7a884, 0x2e51: 0x02d7b684, 0x2e52: 0x02d81e84, 0x2e53: 0x02d82884, + 0x2e54: 0x02d86884, 0x2e55: 0x02e0d684, 0x2e56: 0x02e45484, 0x2e57: 0x02e46c84, + 0x2e58: 0x02e47684, 0x2e59: 0x02e47e84, 0x2e5a: 0x02e48e84, 0x2e5b: 0x02e4b284, + 0x2e5c: 0x02e4b684, 0x2e5d: 0x02e55884, 0x2e5e: 0x02e70884, 0x2e5f: 0x02e71284, + 0x2e60: 0x02e9b884, 0x2e61: 0x02e9cc84, 0x2e62: 0x02ea3084, 0x2e63: 0x02ea3e84, + 0x2e64: 0x02ea5084, 0x2e65: 0x02ea6084, 0x2e66: 0x02eb1684, 0x2e67: 0x02eb2484, + 0x2e68: 0x02ecec84, 0x2e69: 0x02ecfa84, 0x2e6a: 0x02ed5c84, 0x2e6b: 0x02ed7e84, + 0x2e6c: 0x02eddc84, 0x2e6d: 0x02efb684, 0x2e6e: 0x02efc484, 0x2e6f: 0x02efe684, + 0x2e70: 0x02f27484, 0x2e71: 0x02f37084, 0x2e72: 0x02f37c84, 0x2e73: 0x02f4e884, + 0x2e74: 0x02f59684, 0x2e75: 0x02f5f284, 0x2e76: 0x02f8e684, 0x2e77: 0x02f9f084, + 0x2e78: 0x02fe6c84, 0x2e79: 0x02fea284, 0x2e7a: 0x02ff1484, 0x2e7b: 0x02ff7a84, + 0x2e7c: 0x03000284, 0x2e7d: 0x03001884, 0x2e7e: 0x03002484, 0x2e7f: 0x03006684, + // Block 0xba, offset 0x2e80 + 0x2e80: 0x0300fe84, 0x2e81: 0x03011284, 0x2e82: 0x0303c684, 0x2e83: 0x0303d484, + 0x2e84: 0x0303e684, 0x2e85: 0x0303f884, 0x2e86: 0x03041884, 0x2e87: 0x03043684, + 0x2e88: 0x03043e84, 0x2e89: 0x0304dc84, 0x2e8a: 0x0304e484, 0x2e8b: 0x0304f084, + 0x2e8c: 0x030c9a84, 0x2e8d: 0x030cd684, 0x2e8e: 0x03108084, 0x2e8f: 0x03109884, + 0x2e90: 0x0310c684, 0x2e91: 0x0312fc84, 0x2e92: 0x03131684, 0x2e93: 0x0313a484, + 0x2e94: 0x03140084, 0x2e95: 0x03186e84, 0x2e96: 0x03188c84, 0x2e97: 0x0318aa84, + 0x2e98: 0x0318f084, 0x2e99: 0x03193a84, 0x2e9a: 0x031ac884, 0x2e9b: 0x031ae084, + 0x2e9c: 0x031b6684, 0x2e9d: 0x031d5684, 0x2e9e: 0x031d9484, 0x2e9f: 0x031f3684, + 0x2ea0: 0x031f6084, 0x2ea1: 0x031f6a84, 0x2ea2: 0x03212284, 0x2ea3: 0x03229284, + 0x2ea4: 0x03238c84, 0x2ea5: 0x03239884, 0x2ea6: 0x0323a284, 0x2ea7: 0x032aee84, + 0x2ea8: 0x032b0084, 0x2ea9: 0x032c3884, 0x2eaa: 0x032d6c84, 0x2eab: 0x032d7284, + 0x2eac: 0x032dd084, 0x2ead: 0x032ea284, 0x2eae: 0x032ebc84, 0x2eaf: 0x032ec484, + 0x2eb0: 0x032ed284, 0x2eb1: 0x032f9684, 0x2eb2: 0x032fda84, 0x2eb3: 0x032fe684, + 0x2eb4: 0x03300284, 0x2eb5: 0x03315084, 0x2eb6: 0x0331b684, 0x2eb7: 0x0331be84, + 0x2eb8: 0x03332c84, 0x2eb9: 0x03333284, 0x2eba: 0x03335884, 0x2ebb: 0x03355084, + 0x2ebc: 0x0335b084, 0x2ebd: 0x0335be84, 0x2ebe: 0x03364a84, 0x2ebf: 0x03365e84, + // Block 0xbb, offset 0x2ec0 + 0x2ec0: 0x03366484, 0x2ec1: 0x03367884, 0x2ec2: 0x0336b484, 0x2ec3: 0x0339ca84, + 0x2ec4: 0x033cea84, 0x2ec5: 0x033cfe84, 0x2ec6: 0x033d4a84, 0x2ec7: 0x033d7684, + 0x2ec8: 0x033d8684, 0x2ec9: 0x033d9a84, 0x2eca: 0x033da284, 0x2ecb: 0x033df284, + 0x2ecc: 0x033dfa84, 0x2ecd: 0x033e1c84, 0x2ece: 0x033e2684, 0x2ecf: 0x033e4084, + 0x2ed0: 0x033e7684, 0x2ed1: 0x033e9484, 0x2ed2: 0x033ea484, 0x2ed3: 0x033f1a84, + 0x2ed4: 0x033f3884, 0x2ed5: 0x033f4084, + 0x2ef0: 0x40273a20, 0x2ef1: 0x40273c20, 0x2ef2: 0x40273e20, 0x2ef3: 0x40274020, + 0x2ef4: 0x40274220, 0x2ef5: 0x40274420, 0x2ef6: 0x40274620, 0x2ef7: 0x40274820, + 0x2ef8: 0x40274a20, 0x2ef9: 0x40274c20, 0x2efa: 0x40274e20, 0x2efb: 0x40275020, + // Block 0xbc, offset 0x2f00 + 0x2f00: 0x00021283, 0x2f01: 0x40025c20, 0x2f02: 0x40030420, 0x2f03: 0x40051220, + 0x2f04: 0x40279a20, 0x2f05: 0x4027ca20, 0x2f06: 0xe0002206, 0x2f07: 0xe00001d3, + 0x2f08: 0x40049c20, 0x2f09: 0x40049e20, 0x2f0a: 0x4004a020, 0x2f0b: 0x4004a220, + 0x2f0c: 0x4004a420, 0x2f0d: 0x4004a620, 0x2f0e: 0x4004a820, 0x2f0f: 0x4004aa20, + 0x2f10: 0x4004ac20, 0x2f11: 0x4004ae20, 0x2f12: 0x40279c20, 0x2f13: 0x40279e20, + 0x2f14: 0x4004b020, 0x2f15: 0x4004b220, 0x2f16: 0x4004b420, 0x2f17: 0x4004b620, + 0x2f18: 0x4004b820, 0x2f19: 0x4004ba20, 0x2f1a: 0x4004bc20, 0x2f1b: 0x4004be20, + 0x2f1c: 0x40023820, 0x2f1d: 0x4003ea20, 0x2f1e: 0x4003ec20, 0x2f1f: 0x4003ee20, + 0x2f20: 0x4027a020, 0x2f21: 0xe0000267, 0x2f22: 0xe000037f, 0x2f23: 0xe0000459, + 0x2f24: 0xe000052e, 0x2f25: 0xe00005f8, 0x2f26: 0xe00006c3, 0x2f27: 0xe000076b, + 0x2f28: 0xe0000817, 0x2f29: 0xe00008bc, 0x2f2a: 0xada12202, 0x2f2b: 0xae412302, + 0x2f2c: 0xae812402, 0x2f2d: 0xade12502, 0x2f2e: 0xae012602, 0x2f2f: 0xae012702, + 0x2f30: 0x40023a20, 0x2f31: 0x4027ce20, 0x2f32: 0xe0000152, 0x2f33: 0x4027d020, + 0x2f34: 0xe0000155, 0x2f35: 0x4027d220, 0x2f36: 0x00279c84, 0x2f37: 0x4027a220, + 0x2f38: 0x02a68284, 0x2f39: 0x02a68884, 0x2f3a: 0x02a68a84, 0x2f3b: 0x4027cc20, + 0x2f3c: 0xe000231a, 0x2f3d: 0x40051420, 0x2f3e: 0x4027a420, 0x2f3f: 0x4027a620, + // Block 0xbd, offset 0x2f40 + 0x2f41: 0x0065768d, 0x2f42: 0x0065768e, 0x2f43: 0x0065788d, + 0x2f44: 0x0065788e, 0x2f45: 0x00657a8d, 0x2f46: 0x00657a8e, 0x2f47: 0x00657e8d, + 0x2f48: 0x00657e8e, 0x2f49: 0x0065808d, 0x2f4a: 0x0065808e, 0x2f4b: 0x0065828e, + 0x2f4c: 0xe000216a, 0x2f4d: 0x0065848e, 0x2f4e: 0xe0002188, 0x2f4f: 0x0065868e, + 0x2f50: 0xe00021b8, 0x2f51: 0x0065888e, 0x2f52: 0xe00021d6, 0x2f53: 0x00658a8e, + 0x2f54: 0xe00021e0, 0x2f55: 0x00658c8e, 0x2f56: 0xe00021ef, 0x2f57: 0x00658e8e, + 0x2f58: 0xe0002200, 0x2f59: 0x0065908e, 0x2f5a: 0xe000220f, 0x2f5b: 0x0065928e, + 0x2f5c: 0xe0002215, 0x2f5d: 0x0065948e, 0x2f5e: 0xe0002223, 0x2f5f: 0x0065968e, + 0x2f60: 0xe0002229, 0x2f61: 0x0065988e, 0x2f62: 0xe0002234, 0x2f63: 0x00659a8d, + 0x2f64: 0x00659a8e, 0x2f65: 0xe000223a, 0x2f66: 0x00659c8e, 0x2f67: 0xe0002240, + 0x2f68: 0x00659e8e, 0x2f69: 0xe000224a, 0x2f6a: 0x0065a08e, 0x2f6b: 0x0065a28e, + 0x2f6c: 0x0065a48e, 0x2f6d: 0x0065a68e, 0x2f6e: 0x0065a88e, 0x2f6f: 0x0065aa8e, + 0x2f70: 0xe0002258, 0x2f71: 0xe000225e, 0x2f72: 0x0065ac8e, 0x2f73: 0xe000227a, + 0x2f74: 0xe0002280, 0x2f75: 0x0065ae8e, 0x2f76: 0xe000229a, 0x2f77: 0xe00022a0, + 0x2f78: 0x0065b08e, 0x2f79: 0xe00022bd, 0x2f7a: 0xe00022c3, 0x2f7b: 0x0065b28e, + 0x2f7c: 0xe00022ec, 0x2f7d: 0xe00022f2, 0x2f7e: 0x0065b48e, 0x2f7f: 0x0065b68e, + // Block 0xbe, offset 0x2f80 + 0x2f80: 0x0065b88e, 0x2f81: 0x0065ba8e, 0x2f82: 0x0065bc8e, 0x2f83: 0x0065be8d, + 0x2f84: 0x0065be8e, 0x2f85: 0x0065c08d, 0x2f86: 0x0065c08e, 0x2f87: 0x0065c48d, + 0x2f88: 0x0065c48e, 0x2f89: 0x0065c68e, 0x2f8a: 0x0065c88e, 0x2f8b: 0x0065ca8e, + 0x2f8c: 0x0065cc8e, 0x2f8d: 0x0065ce8e, 0x2f8e: 0x0065d08d, 0x2f8f: 0x0065d08e, + 0x2f90: 0x0065d28e, 0x2f91: 0x0065d48e, 0x2f92: 0x0065d68e, 0x2f93: 0x0065d88e, + 0x2f94: 0xe000214c, 0x2f95: 0x0065828d, 0x2f96: 0x0065888d, + 0x2f99: 0xa0812802, 0x2f9a: 0xa0812902, 0x2f9b: 0x40063c20, + 0x2f9c: 0x40063e20, 0x2f9d: 0x4027d420, 0x2f9e: 0xe0000158, 0x2f9f: 0xf0001616, + 0x2fa0: 0x40023c20, 0x2fa1: 0x0065768f, 0x2fa2: 0x00657691, 0x2fa3: 0x0065788f, + 0x2fa4: 0x00657891, 0x2fa5: 0x00657a8f, 0x2fa6: 0x00657a91, 0x2fa7: 0x00657e8f, + 0x2fa8: 0x00657e91, 0x2fa9: 0x0065808f, 0x2faa: 0x00658091, 0x2fab: 0x00658291, + 0x2fac: 0xe000216d, 0x2fad: 0x00658491, 0x2fae: 0xe000218b, 0x2faf: 0x00658691, + 0x2fb0: 0xe00021bb, 0x2fb1: 0x00658891, 0x2fb2: 0xe00021d9, 0x2fb3: 0x00658a91, + 0x2fb4: 0xe00021e3, 0x2fb5: 0x00658c91, 0x2fb6: 0xe00021f2, 0x2fb7: 0x00658e91, + 0x2fb8: 0xe0002203, 0x2fb9: 0x00659091, 0x2fba: 0xe0002212, 0x2fbb: 0x00659291, + 0x2fbc: 0xe0002218, 0x2fbd: 0x00659491, 0x2fbe: 0xe0002226, 0x2fbf: 0x00659691, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0xe000222c, 0x2fc1: 0x00659891, 0x2fc2: 0xe0002237, 0x2fc3: 0x00659a8f, + 0x2fc4: 0x00659a91, 0x2fc5: 0xe000223d, 0x2fc6: 0x00659c91, 0x2fc7: 0xe0002243, + 0x2fc8: 0x00659e91, 0x2fc9: 0xe000224d, 0x2fca: 0x0065a091, 0x2fcb: 0x0065a291, + 0x2fcc: 0x0065a491, 0x2fcd: 0x0065a691, 0x2fce: 0x0065a891, 0x2fcf: 0x0065aa91, + 0x2fd0: 0xe000225b, 0x2fd1: 0xe0002261, 0x2fd2: 0x0065ac91, 0x2fd3: 0xe000227d, + 0x2fd4: 0xe0002283, 0x2fd5: 0x0065ae91, 0x2fd6: 0xe000229d, 0x2fd7: 0xe00022a3, + 0x2fd8: 0x0065b091, 0x2fd9: 0xe00022c0, 0x2fda: 0xe00022c6, 0x2fdb: 0x0065b291, + 0x2fdc: 0xe00022ef, 0x2fdd: 0xe00022f5, 0x2fde: 0x0065b491, 0x2fdf: 0x0065b691, + 0x2fe0: 0x0065b891, 0x2fe1: 0x0065ba91, 0x2fe2: 0x0065bc91, 0x2fe3: 0x0065be8f, + 0x2fe4: 0x0065be91, 0x2fe5: 0x0065c08f, 0x2fe6: 0x0065c091, 0x2fe7: 0x0065c48f, + 0x2fe8: 0x0065c491, 0x2fe9: 0x0065c691, 0x2fea: 0x0065c891, 0x2feb: 0x0065ca91, + 0x2fec: 0x0065cc91, 0x2fed: 0x0065ce91, 0x2fee: 0x0065d08f, 0x2fef: 0x0065d091, + 0x2ff0: 0x0065d291, 0x2ff1: 0x0065d491, 0x2ff2: 0x0065d691, 0x2ff3: 0x0065d891, + 0x2ff4: 0xe000214f, 0x2ff5: 0x0065828f, 0x2ff6: 0x0065888f, 0x2ff7: 0xe000236a, + 0x2ff8: 0xe0002371, 0x2ff9: 0xe0002374, 0x2ffa: 0xe0002377, 0x2ffb: 0x40023e20, + 0x2ffc: 0x4027d620, 0x2ffd: 0x4027d820, 0x2ffe: 0xe000015b, 0x2fff: 0xf0001616, + // Block 0xc0, offset 0x3000 + 0x3005: 0x4065da20, 0x3006: 0x4065dc20, 0x3007: 0x4065de20, + 0x3008: 0x4065e020, 0x3009: 0x4065e420, 0x300a: 0x4065e620, 0x300b: 0x4065e820, + 0x300c: 0x4065ea20, 0x300d: 0x4065ec20, 0x300e: 0x4065ee20, 0x300f: 0x4065f420, + 0x3010: 0x4065f620, 0x3011: 0x4065f820, 0x3012: 0x4065fa20, 0x3013: 0x4065fe20, + 0x3014: 0x40660020, 0x3015: 0x40660220, 0x3016: 0x40660420, 0x3017: 0x40660620, + 0x3018: 0x40660820, 0x3019: 0x40660a20, 0x301a: 0x40661220, 0x301b: 0x40661420, + 0x301c: 0x40661820, 0x301d: 0x40661a20, 0x301e: 0x40661e20, 0x301f: 0x40662020, + 0x3020: 0x40662220, 0x3021: 0x40662420, 0x3022: 0x40662620, 0x3023: 0x40662820, + 0x3024: 0x40662a20, 0x3025: 0x40662e20, 0x3026: 0x40663620, 0x3027: 0x40663820, + 0x3028: 0x40663a20, 0x3029: 0x40663c20, 0x302a: 0x4065e220, 0x302b: 0x4065f020, + 0x302c: 0x4065fc20, 0x302d: 0x40663e20, + 0x3031: 0x0062ac84, 0x3032: 0x0062ae84, 0x3033: 0x00646884, + 0x3034: 0x0062b084, 0x3035: 0x00646c84, 0x3036: 0x00646e84, 0x3037: 0x0062b284, + 0x3038: 0x0062b484, 0x3039: 0x0062b684, 0x303a: 0x00647484, 0x303b: 0x00647684, + 0x303c: 0x00647884, 0x303d: 0x00647a84, 0x303e: 0x00647c84, 0x303f: 0x00647e84, + // Block 0xc1, offset 0x3040 + 0x3040: 0x0062e084, 0x3041: 0x0062b884, 0x3042: 0x0062ba84, 0x3043: 0x0062bc84, + 0x3044: 0x0062ee84, 0x3045: 0x0062be84, 0x3046: 0x0062c084, 0x3047: 0x0062c284, + 0x3048: 0x0062c484, 0x3049: 0x0062c684, 0x304a: 0x0062c884, 0x304b: 0x0062ca84, + 0x304c: 0x0062cc84, 0x304d: 0x0062ce84, 0x304e: 0x0062d084, 0x304f: 0x0063a884, + 0x3050: 0x0063aa84, 0x3051: 0x0063ac84, 0x3052: 0x0063ae84, 0x3053: 0x0063b084, + 0x3054: 0x0063b284, 0x3055: 0x0063b484, 0x3056: 0x0063b684, 0x3057: 0x0063b884, + 0x3058: 0x0063ba84, 0x3059: 0x0063bc84, 0x305a: 0x0063be84, 0x305b: 0x0063c084, + 0x305c: 0x0063c284, 0x305d: 0x0063c484, 0x305e: 0x0063c684, 0x305f: 0x0063c884, + 0x3060: 0x0063ca84, 0x3061: 0x0063cc84, 0x3062: 0x0063ce84, 0x3063: 0x0063d084, + 0x3064: 0x0063a684, 0x3065: 0x0062d484, 0x3066: 0x0062d684, 0x3067: 0x0064a284, + 0x3068: 0x0064a484, 0x3069: 0x0064ac84, 0x306a: 0x0064b084, 0x306b: 0x0064ba84, + 0x306c: 0x0064c284, 0x306d: 0x0064c684, 0x306e: 0x0062e484, 0x306f: 0x0064ce84, + 0x3070: 0x0064d284, 0x3071: 0x0062e684, 0x3072: 0x0062e884, 0x3073: 0x0062ec84, + 0x3074: 0x0062f084, 0x3075: 0x0062f284, 0x3076: 0x0062fa84, 0x3077: 0x0062fe84, + 0x3078: 0x00630284, 0x3079: 0x00630484, 0x307a: 0x00630684, 0x307b: 0x00630884, + 0x307c: 0x00630a84, 0x307d: 0x00631084, 0x307e: 0x00631884, 0x307f: 0x00632c84, + // Block 0xc2, offset 0x3080 + 0x3080: 0x00633a84, 0x3081: 0x00634484, 0x3082: 0x0064f684, 0x3083: 0x0064f884, + 0x3084: 0x00635a84, 0x3085: 0x00635c84, 0x3086: 0x00635e84, 0x3087: 0x0063ee84, + 0x3088: 0x0063f084, 0x3089: 0x0063f684, 0x308a: 0x00640884, 0x308b: 0x00640a84, + 0x308c: 0x00640e84, 0x308d: 0x00642284, 0x308e: 0x00642884, + 0x3090: 0x4027a820, 0x3091: 0x4027aa20, 0x3092: 0x029c0094, 0x3093: 0x029d1894, + 0x3094: 0x029c1294, 0x3095: 0x02adb694, 0x3096: 0x029c1494, 0x3097: 0x029c5a94, + 0x3098: 0x029c1694, 0x3099: 0x02ea6494, 0x309a: 0x029cb294, 0x309b: 0x029c3294, + 0x309c: 0x029c0294, 0x309d: 0x02b25294, 0x309e: 0x02ae6094, 0x309f: 0x029d7494, + 0x30a0: 0xe000237a, 0x30a1: 0xe0002383, 0x30a2: 0xe0002380, 0x30a3: 0xe000237d, + 0x30a4: 0x40661c20, 0x30a5: 0xe000238c, 0x30a6: 0x40661620, 0x30a7: 0xe0002389, + 0x30a8: 0xe000239e, 0x30a9: 0xe0002386, 0x30aa: 0xe0002395, 0x30ab: 0xe000239b, + 0x30ac: 0x40663420, 0x30ad: 0x4065f220, 0x30ae: 0xe000238f, 0x30af: 0xe0002392, + 0x30b0: 0x40663020, 0x30b1: 0x40663220, 0x30b2: 0x40662c20, 0x30b3: 0xe0002398, + 0x30b4: 0x0065dc99, 0x30b5: 0x0065e699, 0x30b6: 0x0065ee99, 0x30b7: 0x0065f499, + 0x30b8: 0x40660c20, 0x30b9: 0x40660e20, 0x30ba: 0x40661020, + // Block 0xc3, offset 0x30c0 + 0x30c0: 0x40275220, 0x30c1: 0x40275420, 0x30c2: 0x40275620, 0x30c3: 0x40275820, + 0x30c4: 0x40275a20, 0x30c5: 0x40275c20, 0x30c6: 0x40275e20, 0x30c7: 0x40276020, + 0x30c8: 0x40276220, 0x30c9: 0x40276420, 0x30ca: 0x40276620, 0x30cb: 0x40276820, + 0x30cc: 0x40276a20, 0x30cd: 0x40276c20, 0x30ce: 0x40276e20, 0x30cf: 0x40277020, + 0x30d0: 0x40277220, 0x30d1: 0x40277420, 0x30d2: 0x40277620, 0x30d3: 0x40277820, + 0x30d4: 0x40277a20, 0x30d5: 0x40277c20, 0x30d6: 0x40277e20, 0x30d7: 0x40278020, + 0x30d8: 0x40278220, 0x30d9: 0x40278420, 0x30da: 0x40278620, 0x30db: 0x40278820, + 0x30dc: 0x40278a20, 0x30dd: 0x40278c20, 0x30de: 0x40278e20, 0x30df: 0x40279020, + 0x30e0: 0x40279220, 0x30e1: 0x40279420, 0x30e2: 0x40279620, 0x30e3: 0x40279820, + 0x30f0: 0x0065868f, 0x30f1: 0x00658e8f, 0x30f2: 0x0065908f, 0x30f3: 0x00659e8f, + 0x30f4: 0x0065a48f, 0x30f5: 0x0065aa8f, 0x30f6: 0x0065ac8f, 0x30f7: 0x0065ae8f, + 0x30f8: 0x0065b08f, 0x30f9: 0x0065b28f, 0x30fa: 0x0065b88f, 0x30fb: 0x0065c68f, + 0x30fc: 0x0065c88f, 0x30fd: 0x0065ca8f, 0x30fe: 0x0065cc8f, 0x30ff: 0x0065ce8f, + // Block 0xc4, offset 0x3100 + 0x3100: 0xf0000404, 0x3101: 0xf0000404, 0x3102: 0xf0000404, 0x3103: 0xf0000404, + 0x3104: 0xf0000404, 0x3105: 0xf0000404, 0x3106: 0xf0000404, 0x3107: 0xf0000404, + 0x3108: 0xf0000404, 0x3109: 0xf0000404, 0x310a: 0xf0000404, 0x310b: 0xf0000404, + 0x310c: 0xf0000404, 0x310d: 0xf0000404, 0x310e: 0xe000004c, 0x310f: 0xe0000051, + 0x3110: 0xe0000056, 0x3111: 0xe000005b, 0x3112: 0xe0000060, 0x3113: 0xe0000065, + 0x3114: 0xe000006a, 0x3115: 0xe000006f, 0x3116: 0xe0000083, 0x3117: 0xe000008d, + 0x3118: 0xe0000092, 0x3119: 0xe0000097, 0x311a: 0xe000009c, 0x311b: 0xe00000a1, + 0x311c: 0xe0000088, 0x311d: 0xe0000074, 0x311e: 0xe000007c, + 0x3120: 0xf0000404, 0x3121: 0xf0000404, 0x3122: 0xf0000404, 0x3123: 0xf0000404, + 0x3124: 0xf0000404, 0x3125: 0xf0000404, 0x3126: 0xf0000404, 0x3127: 0xf0000404, + 0x3128: 0xf0000404, 0x3129: 0xf0000404, 0x312a: 0xf0000404, 0x312b: 0xf0000404, + 0x312c: 0xf0000404, 0x312d: 0xf0000404, 0x312e: 0xf0000404, 0x312f: 0xf0000404, + 0x3130: 0xf0000404, 0x3131: 0xf0000404, 0x3132: 0xf0000404, 0x3133: 0xf0000404, + 0x3134: 0xf0000404, 0x3135: 0xf0000404, 0x3136: 0xf0000404, 0x3137: 0xf0000404, + 0x3138: 0xf0000404, 0x3139: 0xf0000404, 0x313a: 0xf0000404, 0x313b: 0xf0000404, + 0x313c: 0xf0000404, 0x313d: 0xf0000404, 0x313e: 0xf0000404, 0x313f: 0xf0000404, + // Block 0xc5, offset 0x3140 + 0x3140: 0xf0000404, 0x3141: 0xf0000404, 0x3142: 0xf0000404, 0x3143: 0xf0000404, + 0x3144: 0x02aa9e86, 0x3145: 0x02bcf886, 0x3146: 0x02cb0e86, 0x3147: 0x02f71e86, + 0x3148: 0xe00002e3, 0x3149: 0xe00003d8, 0x314a: 0xe00004b3, 0x314b: 0xe000057d, + 0x314c: 0xe0000648, 0x314d: 0xe00006f0, 0x314e: 0xe000079c, 0x314f: 0xe0000841, + 0x3150: 0xe0000ec0, 0x3151: 0xf0000606, 0x3152: 0xf0000606, 0x3153: 0xf0000606, + 0x3154: 0xf0000606, 0x3155: 0xf0000606, 0x3156: 0xf0000606, 0x3157: 0xf0000606, + 0x3158: 0xf0000606, 0x3159: 0xf0000606, 0x315a: 0xf0000606, 0x315b: 0xf0000606, + 0x315c: 0xf0000606, 0x315d: 0xf0000606, 0x315e: 0xf0000606, 0x315f: 0xf0000606, + 0x3160: 0x0062ac86, 0x3161: 0x0062b086, 0x3162: 0x0062b286, 0x3163: 0x0062b686, + 0x3164: 0x0062b886, 0x3165: 0x0062ba86, 0x3166: 0x0062be86, 0x3167: 0x0062c286, + 0x3168: 0x0062c486, 0x3169: 0x0062c886, 0x316a: 0x0062ca86, 0x316b: 0x0062cc86, + 0x316c: 0x0062ce86, 0x316d: 0x0062d086, 0x316e: 0xf0000606, 0x316f: 0xf0000606, + 0x3170: 0xf0000606, 0x3171: 0xf0000606, 0x3172: 0xf0000606, 0x3173: 0xf0000606, + 0x3174: 0xf0000606, 0x3175: 0xf0000606, 0x3176: 0xf0000606, 0x3177: 0xf0000606, + 0x3178: 0xf0000606, 0x3179: 0xf0000606, 0x317a: 0xf0000606, 0x317b: 0xf0000606, + 0x317c: 0xe0002127, 0x317d: 0xe0002122, 0x317e: 0xf0000606, 0x317f: 0x4027ac20, + // Block 0xc6, offset 0x3180 + 0x3180: 0x029c0086, 0x3181: 0x029d1886, 0x3182: 0x029c1286, 0x3183: 0x02adb686, + 0x3184: 0x029d2886, 0x3185: 0x02a2da86, 0x3186: 0x029c0686, 0x3187: 0x02a2d686, + 0x3188: 0x029cba86, 0x3189: 0x02a68286, 0x318a: 0x02ce1086, 0x318b: 0x02e0d686, + 0x318c: 0x02d86886, 0x318d: 0x02ce5086, 0x318e: 0x0323a286, 0x318f: 0x02ae3e86, + 0x3190: 0x02cbca86, 0x3191: 0x02d05486, 0x3192: 0x02ce1286, 0x3193: 0x02f27c86, + 0x3194: 0x02a81a86, 0x3195: 0x02e4f286, 0x3196: 0x03194286, 0x3197: 0x02f2ba86, + 0x3198: 0x02a56886, 0x3199: 0x02f3b086, 0x319a: 0x02ea6e86, 0x319b: 0x02b2e686, + 0x319c: 0x0320d286, 0x319d: 0x02a25486, 0x319e: 0x02a6e086, 0x319f: 0x02d9d086, + 0x31a0: 0x03300a86, 0x31a1: 0x029e2286, 0x31a2: 0x02a33286, 0x31a3: 0x02d6c686, + 0x31a4: 0x029c1486, 0x31a5: 0x029c5a86, 0x31a6: 0x029c1686, 0x31a7: 0x02bbcc86, + 0x31a8: 0x02a7e686, 0x31a9: 0x02a67686, 0x31aa: 0x02b72e86, 0x31ab: 0x02b6cc86, + 0x31ac: 0x02edc686, 0x31ad: 0x029e0286, 0x31ae: 0x03198e86, 0x31af: 0x02a6a886, + 0x31b0: 0x02b23886, 0x31b1: 0xf0000606, 0x31b2: 0xf0000606, 0x31b3: 0xf0000606, + 0x31b4: 0xf0000606, 0x31b5: 0xf0000606, 0x31b6: 0xf0000606, 0x31b7: 0xf0000606, + 0x31b8: 0xf0000606, 0x31b9: 0xf0000606, 0x31ba: 0xf0000606, 0x31bb: 0xf0000606, + 0x31bc: 0xf0000606, 0x31bd: 0xf0000606, 0x31be: 0xf0000606, 0x31bf: 0xf0000606, + // Block 0xc7, offset 0x31c0 + 0x31c0: 0xf0001f04, 0x31c1: 0xf0001f04, 0x31c2: 0xf0001f04, 0x31c3: 0xf0001f04, + 0x31c4: 0xf0001f04, 0x31c5: 0xf0001f04, 0x31c6: 0xf0001f04, 0x31c7: 0xf0001f04, + 0x31c8: 0xf0001f04, 0x31c9: 0xf0000404, 0x31ca: 0xf0000404, 0x31cb: 0xf0000404, + 0x31cc: 0xf0001c1d, 0x31cd: 0xe0000b85, 0x31ce: 0xf0001d1c, 0x31cf: 0xe0000d14, + 0x31d0: 0x00657693, 0x31d1: 0x00657893, 0x31d2: 0x00657a93, 0x31d3: 0x00657e93, + 0x31d4: 0x00658093, 0x31d5: 0x00658293, 0x31d6: 0x00658493, 0x31d7: 0x00658693, + 0x31d8: 0x00658893, 0x31d9: 0x00658a93, 0x31da: 0x00658c93, 0x31db: 0x00658e93, + 0x31dc: 0x00659093, 0x31dd: 0x00659293, 0x31de: 0x00659493, 0x31df: 0x00659693, + 0x31e0: 0x00659893, 0x31e1: 0x00659a93, 0x31e2: 0x00659c93, 0x31e3: 0x00659e93, + 0x31e4: 0x0065a093, 0x31e5: 0x0065a293, 0x31e6: 0x0065a493, 0x31e7: 0x0065a693, + 0x31e8: 0x0065a893, 0x31e9: 0x0065aa93, 0x31ea: 0x0065ac93, 0x31eb: 0x0065ae93, + 0x31ec: 0x0065b093, 0x31ed: 0x0065b293, 0x31ee: 0x0065b493, 0x31ef: 0x0065b693, + 0x31f0: 0x0065b893, 0x31f1: 0x0065ba93, 0x31f2: 0x0065bc93, 0x31f3: 0x0065be93, + 0x31f4: 0x0065c093, 0x31f5: 0x0065c493, 0x31f6: 0x0065c693, 0x31f7: 0x0065c893, + 0x31f8: 0x0065ca93, 0x31f9: 0x0065cc93, 0x31fa: 0x0065ce93, 0x31fb: 0x0065d093, + 0x31fc: 0x0065d293, 0x31fd: 0x0065d493, 0x31fe: 0x0065d693, + // Block 0xc8, offset 0x3200 + 0x3200: 0xe0002131, 0x3201: 0xe0002137, 0x3202: 0xe000213c, 0x3203: 0xe000212d, + 0x3204: 0xe0002142, 0x3205: 0xe0002148, 0x3206: 0xe0002152, 0x3207: 0xe000215b, + 0x3208: 0xe0002156, 0x3209: 0xe0002166, 0x320a: 0xe0002162, 0x320b: 0xe0002170, + 0x320c: 0xe0002174, 0x320d: 0xe0002179, 0x320e: 0xe000217e, 0x320f: 0xe0002183, + 0x3210: 0xe000218e, 0x3211: 0xe0002193, 0x3212: 0xe0002198, 0x3213: 0xe000219d, + 0x3214: 0xf0001c1c, 0x3215: 0xe00021a4, 0x3216: 0xe00021ab, 0x3217: 0xe00021b2, + 0x3218: 0xe00021be, 0x3219: 0xe00021c3, 0x321a: 0xe00021ca, 0x321b: 0xe00021d1, + 0x321c: 0xe00021dc, 0x321d: 0xe00021eb, 0x321e: 0xe00021e6, 0x321f: 0xe00021f5, + 0x3220: 0xe00021fa, 0x3221: 0xe0002209, 0x3222: 0xe000221b, 0x3223: 0xe000221f, + 0x3224: 0xe000222f, 0x3225: 0xe0002246, 0x3226: 0xe0002250, 0x3227: 0xf0001c1c, + 0x3228: 0xf0001c1c, 0x3229: 0xe0002254, 0x322a: 0xe0002276, 0x322b: 0xe0002264, + 0x322c: 0xe000226b, 0x322d: 0xe0002270, 0x322e: 0xe0002286, 0x322f: 0xe000228d, + 0x3230: 0xe0002292, 0x3231: 0xe0002296, 0x3232: 0xe00022a6, 0x3233: 0xe00022ad, + 0x3234: 0xe00022b2, 0x3235: 0xe00022b9, 0x3236: 0xe00022d4, 0x3237: 0xe00022da, + 0x3238: 0xe00022de, 0x3239: 0xe00022e3, 0x323a: 0xe00022e7, 0x323b: 0xe00022c9, + 0x323c: 0xe00022cf, 0x323d: 0xe0002300, 0x323e: 0xe0002306, 0x323f: 0xf0001c1c, + // Block 0xc9, offset 0x3240 + 0x3240: 0xe000230b, 0x3241: 0xe00022f8, 0x3242: 0xe00022fc, 0x3243: 0xe0002311, + 0x3244: 0xe0002316, 0x3245: 0xe000231d, 0x3246: 0xe0002321, 0x3247: 0xe0002325, + 0x3248: 0xe000232b, 0x3249: 0xf0001c1c, 0x324a: 0xe0002330, 0x324b: 0xe000233c, + 0x324c: 0xe0002340, 0x324d: 0xe0002337, 0x324e: 0xe0002346, 0x324f: 0xe000234b, + 0x3250: 0xe000234f, 0x3251: 0xe0002353, 0x3252: 0xf0001c1c, 0x3253: 0xe000235e, + 0x3254: 0xe0002358, 0x3255: 0xf0001c1c, 0x3256: 0xe0002363, 0x3257: 0xe000236d, + 0x3258: 0xf0001f04, 0x3259: 0xf0001f04, 0x325a: 0xf0001f04, 0x325b: 0xf0001f04, + 0x325c: 0xf0001f04, 0x325d: 0xf0001f04, 0x325e: 0xf0001f04, 0x325f: 0xf0001f04, + 0x3260: 0xf0001f04, 0x3261: 0xf0001f04, 0x3262: 0xf0000404, 0x3263: 0xf0000404, + 0x3264: 0xf0000404, 0x3265: 0xf0000404, 0x3266: 0xf0000404, 0x3267: 0xf0000404, + 0x3268: 0xf0000404, 0x3269: 0xf0000404, 0x326a: 0xf0000404, 0x326b: 0xf0000404, + 0x326c: 0xf0000404, 0x326d: 0xf0000404, 0x326e: 0xf0000404, 0x326f: 0xf0000404, + 0x3270: 0xf0000404, 0x3271: 0xe0000c1e, 0x3272: 0xf0001c1c, 0x3273: 0xf0001d1d, + 0x3274: 0xe0000a31, 0x3275: 0xf0001d1c, 0x3276: 0xf0001c1c, 0x3277: 0xf0001c1c, + 0x3278: 0xe0000ac2, 0x3279: 0xe0000ac6, 0x327a: 0xf0001d1d, 0x327b: 0xf0001c1c, + 0x327c: 0xf0001c1c, 0x327d: 0xf0001c1c, 0x327e: 0xf0001c1c, 0x327f: 0xe0002431, + // Block 0xca, offset 0x3280 + 0x3280: 0xf0001d1c, 0x3281: 0xf0001d1c, 0x3282: 0xf0001d1c, 0x3283: 0xf0001d1c, + 0x3284: 0xf0001d1c, 0x3285: 0xf0001d1d, 0x3286: 0xf0001d1d, 0x3287: 0xf0001d1d, + 0x3288: 0xe0000a6b, 0x3289: 0xe0000cb4, 0x328a: 0xf0001d1c, 0x328b: 0xf0001d1c, + 0x328c: 0xf0001d1c, 0x328d: 0xf0001c1c, 0x328e: 0xf0001c1c, 0x328f: 0xf0001c1c, + 0x3290: 0xf0001c1d, 0x3291: 0xe0000cb9, 0x3292: 0xe0000d36, 0x3293: 0xe0000be3, + 0x3294: 0xe0000fc5, 0x3295: 0xf0001c1c, 0x3296: 0xf0001c1c, 0x3297: 0xf0001c1c, + 0x3298: 0xf0001c1c, 0x3299: 0xf0001c1c, 0x329a: 0xf0001c1c, 0x329b: 0xf0001c1c, + 0x329c: 0xf0001c1c, 0x329d: 0xf0001c1c, 0x329e: 0xf0001c1c, 0x329f: 0xe0000d3e, + 0x32a0: 0xe0000a72, 0x32a1: 0xf0001c1c, 0x32a2: 0xe0000cbd, 0x32a3: 0xe0000d42, + 0x32a4: 0xe0000a76, 0x32a5: 0xf0001c1c, 0x32a6: 0xe0000cc1, 0x32a7: 0xe0000d2d, + 0x32a8: 0xe0000d31, 0x32a9: 0xf0001c1d, 0x32aa: 0xe0000cc5, 0x32ab: 0xe0000d4a, + 0x32ac: 0xe0000be7, 0x32ad: 0xe0000f0b, 0x32ae: 0xe0000f0f, 0x32af: 0xe0000f15, + 0x32b0: 0xf0001c1c, 0x32b1: 0xf0001c1c, 0x32b2: 0xf0001c1c, 0x32b3: 0xf0001c1c, + 0x32b4: 0xf0001d1c, 0x32b5: 0xf0001d1c, 0x32b6: 0xf0001d1c, 0x32b7: 0xf0001d1c, + 0x32b8: 0xf0001d1c, 0x32b9: 0xf0001d1d, 0x32ba: 0xf0001d1c, 0x32bb: 0xf0001d1c, + 0x32bc: 0xf0001d1c, 0x32bd: 0xf0001d1c, 0x32be: 0xf0001d1c, 0x32bf: 0xf0001d1d, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0xf0001d1c, 0x32c1: 0xf0001d1d, 0x32c2: 0xe00009b7, 0x32c3: 0xf0001c1d, + 0x32c4: 0xf0001c1c, 0x32c5: 0xf0001c1c, 0x32c6: 0xe0000a66, 0x32c7: 0xe0000a7a, + 0x32c8: 0xf0001d1c, 0x32c9: 0xf0001c1d, 0x32ca: 0xf0001c1c, 0x32cb: 0xf0001d1d, + 0x32cc: 0xf0001c1c, 0x32cd: 0xf0001d1d, 0x32ce: 0xf0001d1d, 0x32cf: 0xf0001c1c, + 0x32d0: 0xf0001c1c, 0x32d1: 0xf0001c1c, 0x32d2: 0xe0000d0d, 0x32d3: 0xf0001c1c, + 0x32d4: 0xf0001c1c, 0x32d5: 0xe0000d3a, 0x32d6: 0xe0000d46, 0x32d7: 0xf0001d1d, + 0x32d8: 0xe0000eb0, 0x32d9: 0xe0000eb8, 0x32da: 0xf0001d1d, 0x32db: 0xf0001c1c, + 0x32dc: 0xf0001c1d, 0x32dd: 0xf0001c1d, 0x32de: 0xe00010b2, 0x32df: 0xe00009c8, + 0x32e0: 0xf0001f04, 0x32e1: 0xf0001f04, 0x32e2: 0xf0001f04, 0x32e3: 0xf0001f04, + 0x32e4: 0xf0001f04, 0x32e5: 0xf0001f04, 0x32e6: 0xf0001f04, 0x32e7: 0xf0001f04, + 0x32e8: 0xf0001f04, 0x32e9: 0xf0000404, 0x32ea: 0xf0000404, 0x32eb: 0xf0000404, + 0x32ec: 0xf0000404, 0x32ed: 0xf0000404, 0x32ee: 0xf0000404, 0x32ef: 0xf0000404, + 0x32f0: 0xf0000404, 0x32f1: 0xf0000404, 0x32f2: 0xf0000404, 0x32f3: 0xf0000404, + 0x32f4: 0xf0000404, 0x32f5: 0xf0000404, 0x32f6: 0xf0000404, 0x32f7: 0xf0000404, + 0x32f8: 0xf0000404, 0x32f9: 0xf0000404, 0x32fa: 0xf0000404, 0x32fb: 0xf0000404, + 0x32fc: 0xf0000404, 0x32fd: 0xf0000404, 0x32fe: 0xf0000404, 0x32ff: 0xe0000bdf, + // Block 0xcc, offset 0x3300 + 0x3300: 0x40196220, 0x3301: 0x40196420, 0x3302: 0x40196620, 0x3303: 0x40196820, + 0x3304: 0x40196a20, 0x3305: 0x40196c20, 0x3306: 0x40196e20, 0x3307: 0x40197020, + 0x3308: 0x40197220, 0x3309: 0x40197420, 0x330a: 0x40197620, 0x330b: 0x40197820, + 0x330c: 0x40197a20, 0x330d: 0x40197c20, 0x330e: 0x40197e20, 0x330f: 0x40198020, + 0x3310: 0x40198220, 0x3311: 0x40198420, 0x3312: 0x40198620, 0x3313: 0x40198820, + 0x3314: 0x40198a20, 0x3315: 0x40198c20, 0x3316: 0x40198e20, 0x3317: 0x40199020, + 0x3318: 0x40199220, 0x3319: 0x40199420, 0x331a: 0x40199620, 0x331b: 0x40199820, + 0x331c: 0x40199a20, 0x331d: 0x40199c20, 0x331e: 0x40199e20, 0x331f: 0x4019a020, + 0x3320: 0x4019a220, 0x3321: 0x4019a420, 0x3322: 0x4019a620, 0x3323: 0x4019a820, + 0x3324: 0x4019aa20, 0x3325: 0x4019ac20, 0x3326: 0x4019ae20, 0x3327: 0x4019b020, + 0x3328: 0x4019b220, 0x3329: 0x4019b420, 0x332a: 0x4019b620, 0x332b: 0x4019b820, + 0x332c: 0x4019ba20, 0x332d: 0x4019bc20, 0x332e: 0x4019be20, 0x332f: 0x4019c020, + 0x3330: 0x4019c220, 0x3331: 0x4019c420, 0x3332: 0x4019c620, 0x3333: 0x4019c820, + 0x3334: 0x4019ca20, 0x3335: 0x4019cc20, 0x3336: 0x4019ce20, 0x3337: 0x4019d020, + 0x3338: 0x4019d220, 0x3339: 0x4019d420, 0x333a: 0x4019d620, 0x333b: 0x4019d820, + 0x333c: 0x4019da20, 0x333d: 0x4019dc20, 0x333e: 0x4019de20, 0x333f: 0x4019e020, + // Block 0xcd, offset 0x3340 + 0x3340: 0x40664020, 0x3341: 0x40664220, 0x3342: 0x40664420, 0x3343: 0x40664620, + 0x3344: 0x40664820, 0x3345: 0x40664a20, 0x3346: 0x40664c20, 0x3347: 0x40664e20, + 0x3348: 0x40665020, 0x3349: 0x40665220, 0x334a: 0x40665420, 0x334b: 0x40665620, + 0x334c: 0x40665820, 0x334d: 0x40665a20, 0x334e: 0x40665c20, 0x334f: 0x40665e20, + 0x3350: 0x40666020, 0x3351: 0x40666220, 0x3352: 0x40666420, 0x3353: 0x40666620, + 0x3354: 0x40666820, 0x3355: 0x40666a20, 0x3356: 0x40666c20, 0x3357: 0x40666e20, + 0x3358: 0x40667020, 0x3359: 0x40667220, 0x335a: 0x40667420, 0x335b: 0x40667620, + 0x335c: 0x40667820, 0x335d: 0x40667a20, 0x335e: 0x40667c20, 0x335f: 0x40667e20, + 0x3360: 0x40668020, 0x3361: 0x40668220, 0x3362: 0x40668420, 0x3363: 0x40668620, + 0x3364: 0x40668820, 0x3365: 0x40668a20, 0x3366: 0x40668c20, 0x3367: 0x40668e20, + 0x3368: 0x40669020, 0x3369: 0x40669220, 0x336a: 0x40669420, 0x336b: 0x40669620, + 0x336c: 0x40669820, 0x336d: 0x40669a20, 0x336e: 0x40669c20, 0x336f: 0x40669e20, + 0x3370: 0x4066a020, 0x3371: 0x4066a220, 0x3372: 0x4066a420, 0x3373: 0x4066a620, + 0x3374: 0x4066a820, 0x3375: 0x4066aa20, 0x3376: 0x4066ac20, 0x3377: 0x4066ae20, + 0x3378: 0x4066b020, 0x3379: 0x4066b220, 0x337a: 0x4066b420, 0x337b: 0x4066b620, + 0x337c: 0x4066b820, 0x337d: 0x4066ba20, 0x337e: 0x4066bc20, 0x337f: 0x4066be20, + // Block 0xce, offset 0x3380 + 0x3380: 0x4066c020, 0x3381: 0x4066c220, 0x3382: 0x4066c420, 0x3383: 0x4066c620, + 0x3384: 0x4066c820, 0x3385: 0x4066ca20, 0x3386: 0x4066cc20, 0x3387: 0x4066ce20, + 0x3388: 0x4066d020, 0x3389: 0x4066d220, 0x338a: 0x4066d420, 0x338b: 0x4066d620, + 0x338c: 0x4066d820, 0x338d: 0x4066da20, 0x338e: 0x4066dc20, 0x338f: 0x4066de20, + 0x3390: 0x4066e020, 0x3391: 0x4066e220, 0x3392: 0x4066e420, 0x3393: 0x4066e620, + 0x3394: 0x4066e820, 0x3395: 0x4066ea20, 0x3396: 0x4066ec20, 0x3397: 0x4066ee20, + 0x3398: 0x4066f020, 0x3399: 0x4066f220, 0x339a: 0x4066f420, 0x339b: 0x4066f620, + 0x339c: 0x4066f820, 0x339d: 0x4066fa20, 0x339e: 0x4066fc20, 0x339f: 0x4066fe20, + 0x33a0: 0x40670020, 0x33a1: 0x40670220, 0x33a2: 0x40670420, 0x33a3: 0x40670620, + 0x33a4: 0x40670820, 0x33a5: 0x40670a20, 0x33a6: 0x40670c20, 0x33a7: 0x40670e20, + 0x33a8: 0x40671020, 0x33a9: 0x40671220, 0x33aa: 0x40671420, 0x33ab: 0x40671620, + 0x33ac: 0x40671820, 0x33ad: 0x40671a20, 0x33ae: 0x40671c20, 0x33af: 0x40671e20, + 0x33b0: 0x40672020, 0x33b1: 0x40672220, 0x33b2: 0x40672420, 0x33b3: 0x40672620, + 0x33b4: 0x40672820, 0x33b5: 0x40672a20, 0x33b6: 0x40672c20, 0x33b7: 0x40672e20, + 0x33b8: 0x40673020, 0x33b9: 0x40673220, 0x33ba: 0x40673420, 0x33bb: 0x40673620, + 0x33bc: 0x40673820, 0x33bd: 0x40673a20, 0x33be: 0x40673c20, 0x33bf: 0x40673e20, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x40674020, 0x33c1: 0x40674220, 0x33c2: 0x40674420, 0x33c3: 0x40674620, + 0x33c4: 0x40674820, 0x33c5: 0x40674a20, 0x33c6: 0x40674c20, 0x33c7: 0x40674e20, + 0x33c8: 0x40675020, 0x33c9: 0x40675220, 0x33ca: 0x40675420, 0x33cb: 0x40675620, + 0x33cc: 0x40675820, 0x33cd: 0x40675a20, 0x33ce: 0x40675c20, 0x33cf: 0x40675e20, + 0x33d0: 0x40676020, 0x33d1: 0x40676220, 0x33d2: 0x40676420, 0x33d3: 0x40676620, + 0x33d4: 0x40676820, 0x33d5: 0x40676a20, 0x33d6: 0x40676c20, 0x33d7: 0x40676e20, + 0x33d8: 0x40677020, 0x33d9: 0x40677220, 0x33da: 0x40677420, 0x33db: 0x40677620, + 0x33dc: 0x40677820, 0x33dd: 0x40677a20, 0x33de: 0x40677c20, 0x33df: 0x40677e20, + 0x33e0: 0x40678020, 0x33e1: 0x40678220, 0x33e2: 0x40678420, 0x33e3: 0x40678620, + 0x33e4: 0x40678820, 0x33e5: 0x40678a20, 0x33e6: 0x40678c20, 0x33e7: 0x40678e20, + 0x33e8: 0x40679020, 0x33e9: 0x40679220, 0x33ea: 0x40679420, 0x33eb: 0x40679620, + 0x33ec: 0x40679820, 0x33ed: 0x40679a20, 0x33ee: 0x40679c20, 0x33ef: 0x40679e20, + 0x33f0: 0x4067a020, 0x33f1: 0x4067a220, 0x33f2: 0x4067a420, 0x33f3: 0x4067a620, + 0x33f4: 0x4067a820, 0x33f5: 0x4067aa20, 0x33f6: 0x4067ac20, 0x33f7: 0x4067ae20, + 0x33f8: 0x4067b020, 0x33f9: 0x4067b220, 0x33fa: 0x4067b420, 0x33fb: 0x4067b620, + 0x33fc: 0x4067b820, 0x33fd: 0x4067ba20, 0x33fe: 0x4067bc20, 0x33ff: 0x4067be20, + // Block 0xd0, offset 0x3400 + 0x3400: 0x4067c020, 0x3401: 0x4067c220, 0x3402: 0x4067c420, 0x3403: 0x4067c620, + 0x3404: 0x4067c820, 0x3405: 0x4067ca20, 0x3406: 0x4067cc20, 0x3407: 0x4067ce20, + 0x3408: 0x4067d020, 0x3409: 0x4067d220, 0x340a: 0x4067d420, 0x340b: 0x4067d620, + 0x340c: 0x4067d820, 0x340d: 0x4067da20, 0x340e: 0x4067dc20, 0x340f: 0x4067de20, + 0x3410: 0x4067e020, 0x3411: 0x4067e220, 0x3412: 0x4067e420, 0x3413: 0x4067e620, + 0x3414: 0x4067e820, 0x3415: 0x4067ea20, 0x3416: 0x4067ec20, 0x3417: 0x4067ee20, + 0x3418: 0x4067f020, 0x3419: 0x4067f220, 0x341a: 0x4067f420, 0x341b: 0x4067f620, + 0x341c: 0x4067f820, 0x341d: 0x4067fa20, 0x341e: 0x4067fc20, 0x341f: 0x4067fe20, + 0x3420: 0x40680020, 0x3421: 0x40680220, 0x3422: 0x40680420, 0x3423: 0x40680620, + 0x3424: 0x40680820, 0x3425: 0x40680a20, 0x3426: 0x40680c20, 0x3427: 0x40680e20, + 0x3428: 0x40681020, 0x3429: 0x40681220, 0x342a: 0x40681420, 0x342b: 0x40681620, + 0x342c: 0x40681820, 0x342d: 0x40681a20, 0x342e: 0x40681c20, 0x342f: 0x40681e20, + 0x3430: 0x40682020, 0x3431: 0x40682220, 0x3432: 0x40682420, 0x3433: 0x40682620, + 0x3434: 0x40682820, 0x3435: 0x40682a20, 0x3436: 0x40682c20, 0x3437: 0x40682e20, + 0x3438: 0x40683020, 0x3439: 0x40683220, 0x343a: 0x40683420, 0x343b: 0x40683620, + 0x343c: 0x40683820, 0x343d: 0x40683a20, 0x343e: 0x40683c20, 0x343f: 0x40683e20, + // Block 0xd1, offset 0x3440 + 0x3440: 0x40684020, 0x3441: 0x40684220, 0x3442: 0x40684420, 0x3443: 0x40684620, + 0x3444: 0x40684820, 0x3445: 0x40684a20, 0x3446: 0x40684c20, 0x3447: 0x40684e20, + 0x3448: 0x40685020, 0x3449: 0x40685220, 0x344a: 0x40685420, 0x344b: 0x40685620, + 0x344c: 0x40685820, 0x344d: 0x40685a20, 0x344e: 0x40685c20, 0x344f: 0x40685e20, + 0x3450: 0x40686020, 0x3451: 0x40686220, 0x3452: 0x40686420, 0x3453: 0x40686620, + 0x3454: 0x40686820, 0x3455: 0x40686a20, 0x3456: 0x40686c20, 0x3457: 0x40686e20, + 0x3458: 0x40687020, 0x3459: 0x40687220, 0x345a: 0x40687420, 0x345b: 0x40687620, + 0x345c: 0x40687820, 0x345d: 0x40687a20, 0x345e: 0x40687c20, 0x345f: 0x40687e20, + 0x3460: 0x40688020, 0x3461: 0x40688220, 0x3462: 0x40688420, 0x3463: 0x40688620, + 0x3464: 0x40688820, 0x3465: 0x40688a20, 0x3466: 0x40688c20, 0x3467: 0x40688e20, + 0x3468: 0x40689020, 0x3469: 0x40689220, 0x346a: 0x40689420, 0x346b: 0x40689620, + 0x346c: 0x40689820, 0x346d: 0x40689a20, 0x346e: 0x40689c20, 0x346f: 0x40689e20, + 0x3470: 0x4068a020, 0x3471: 0x4068a220, 0x3472: 0x4068a420, 0x3473: 0x4068a620, + 0x3474: 0x4068a820, 0x3475: 0x4068aa20, 0x3476: 0x4068ac20, 0x3477: 0x4068ae20, + 0x3478: 0x4068b020, 0x3479: 0x4068b220, 0x347a: 0x4068b420, 0x347b: 0x4068b620, + 0x347c: 0x4068b820, 0x347d: 0x4068ba20, 0x347e: 0x4068bc20, 0x347f: 0x4068be20, + // Block 0xd2, offset 0x3480 + 0x3480: 0x4068c020, 0x3481: 0x4068c220, 0x3482: 0x4068c420, 0x3483: 0x4068c620, + 0x3484: 0x4068c820, 0x3485: 0x4068ca20, 0x3486: 0x4068cc20, 0x3487: 0x4068ce20, + 0x3488: 0x4068d020, 0x3489: 0x4068d220, 0x348a: 0x4068d420, 0x348b: 0x4068d620, + 0x348c: 0x4068d820, 0x348d: 0x4068da20, 0x348e: 0x4068dc20, 0x348f: 0x4068de20, + 0x3490: 0x4068e020, 0x3491: 0x4068e220, 0x3492: 0x4068e420, 0x3493: 0x4068e620, + 0x3494: 0x4068e820, 0x3495: 0x4068ea20, 0x3496: 0x4068ec20, 0x3497: 0x4068ee20, + 0x3498: 0x4068f020, 0x3499: 0x4068f220, 0x349a: 0x4068f420, 0x349b: 0x4068f620, + 0x349c: 0x4068f820, 0x349d: 0x4068fa20, 0x349e: 0x4068fc20, 0x349f: 0x4068fe20, + 0x34a0: 0x40690020, 0x34a1: 0x40690220, 0x34a2: 0x40690420, 0x34a3: 0x40690620, + 0x34a4: 0x40690820, 0x34a5: 0x40690a20, 0x34a6: 0x40690c20, 0x34a7: 0x40690e20, + 0x34a8: 0x40691020, 0x34a9: 0x40691220, 0x34aa: 0x40691420, 0x34ab: 0x40691620, + 0x34ac: 0x40691820, 0x34ad: 0x40691a20, 0x34ae: 0x40691c20, 0x34af: 0x40691e20, + 0x34b0: 0x40692020, 0x34b1: 0x40692220, 0x34b2: 0x40692420, 0x34b3: 0x40692620, + 0x34b4: 0x40692820, 0x34b5: 0x40692a20, 0x34b6: 0x40692c20, 0x34b7: 0x40692e20, + 0x34b8: 0x40693020, 0x34b9: 0x40693220, 0x34ba: 0x40693420, 0x34bb: 0x40693620, + 0x34bc: 0x40693820, 0x34bd: 0x40693a20, 0x34be: 0x40693c20, 0x34bf: 0x40693e20, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x40694020, 0x34c1: 0x40694220, 0x34c2: 0x40694420, 0x34c3: 0x40694620, + 0x34c4: 0x40694820, 0x34c5: 0x40694a20, 0x34c6: 0x40694c20, 0x34c7: 0x40694e20, + 0x34c8: 0x40695020, 0x34c9: 0x40695220, 0x34ca: 0x40695420, 0x34cb: 0x40695620, + 0x34cc: 0x40695820, 0x34cd: 0x40695a20, 0x34ce: 0x40695c20, 0x34cf: 0x40695e20, + 0x34d0: 0x40696020, 0x34d1: 0x40696220, 0x34d2: 0x40696420, 0x34d3: 0x40696620, + 0x34d4: 0x40696820, 0x34d5: 0x40696a20, 0x34d6: 0x40696c20, 0x34d7: 0x40696e20, + 0x34d8: 0x40697020, 0x34d9: 0x40697220, 0x34da: 0x40697420, 0x34db: 0x40697620, + 0x34dc: 0x40697820, 0x34dd: 0x40697a20, 0x34de: 0x40697c20, 0x34df: 0x40697e20, + 0x34e0: 0x40698020, 0x34e1: 0x40698220, 0x34e2: 0x40698420, 0x34e3: 0x40698620, + 0x34e4: 0x40698820, 0x34e5: 0x40698a20, 0x34e6: 0x40698c20, 0x34e7: 0x40698e20, + 0x34e8: 0x40699020, 0x34e9: 0x40699220, 0x34ea: 0x40699420, 0x34eb: 0x40699620, + 0x34ec: 0x40699820, 0x34ed: 0x40699a20, 0x34ee: 0x40699c20, 0x34ef: 0x40699e20, + 0x34f0: 0x4069a020, 0x34f1: 0x4069a220, 0x34f2: 0x4069a420, 0x34f3: 0x4069a620, + 0x34f4: 0x4069a820, 0x34f5: 0x4069aa20, 0x34f6: 0x4069ac20, 0x34f7: 0x4069ae20, + 0x34f8: 0x4069b020, 0x34f9: 0x4069b220, 0x34fa: 0x4069b420, 0x34fb: 0x4069b620, + 0x34fc: 0x4069b820, 0x34fd: 0x4069ba20, 0x34fe: 0x4069bc20, 0x34ff: 0x4069be20, + // Block 0xd4, offset 0x3500 + 0x3500: 0x4069c020, 0x3501: 0x4069c220, 0x3502: 0x4069c420, 0x3503: 0x4069c620, + 0x3504: 0x4069c820, 0x3505: 0x4069ca20, 0x3506: 0x4069cc20, 0x3507: 0x4069ce20, + 0x3508: 0x4069d020, 0x3509: 0x4069d220, 0x350a: 0x4069d420, 0x350b: 0x4069d620, + 0x350c: 0x4069d820, 0x350d: 0x4069da20, 0x350e: 0x4069dc20, 0x350f: 0x4069de20, + 0x3510: 0x4069e020, 0x3511: 0x4069e220, 0x3512: 0x4069e420, 0x3513: 0x4069e620, + 0x3514: 0x4069e820, 0x3515: 0x4069ea20, 0x3516: 0x4069ec20, 0x3517: 0x4069ee20, + 0x3518: 0x4069f020, 0x3519: 0x4069f220, 0x351a: 0x4069f420, 0x351b: 0x4069f620, + 0x351c: 0x4069f820, 0x351d: 0x4069fa20, 0x351e: 0x4069fc20, 0x351f: 0x4069fe20, + 0x3520: 0x406a0020, 0x3521: 0x406a0220, 0x3522: 0x406a0420, 0x3523: 0x406a0620, + 0x3524: 0x406a0820, 0x3525: 0x406a0a20, 0x3526: 0x406a0c20, 0x3527: 0x406a0e20, + 0x3528: 0x406a1020, 0x3529: 0x406a1220, 0x352a: 0x406a1420, 0x352b: 0x406a1620, + 0x352c: 0x406a1820, 0x352d: 0x406a1a20, 0x352e: 0x406a1c20, 0x352f: 0x406a1e20, + 0x3530: 0x406a2020, 0x3531: 0x406a2220, 0x3532: 0x406a2420, 0x3533: 0x406a2620, + 0x3534: 0x406a2820, 0x3535: 0x406a2a20, 0x3536: 0x406a2c20, 0x3537: 0x406a2e20, + 0x3538: 0x406a3020, 0x3539: 0x406a3220, 0x353a: 0x406a3420, 0x353b: 0x406a3620, + 0x353c: 0x406a3820, 0x353d: 0x406a3a20, 0x353e: 0x406a3c20, 0x353f: 0x406a3e20, + // Block 0xd5, offset 0x3540 + 0x3540: 0x406a4020, 0x3541: 0x406a4220, 0x3542: 0x406a4420, 0x3543: 0x406a4620, + 0x3544: 0x406a4820, 0x3545: 0x406a4a20, 0x3546: 0x406a4c20, 0x3547: 0x406a4e20, + 0x3548: 0x406a5020, 0x3549: 0x406a5220, 0x354a: 0x406a5420, 0x354b: 0x406a5620, + 0x354c: 0x406a5820, 0x354d: 0x406a5a20, 0x354e: 0x406a5c20, 0x354f: 0x406a5e20, + 0x3550: 0x406a6020, 0x3551: 0x406a6220, 0x3552: 0x406a6420, 0x3553: 0x406a6620, + 0x3554: 0x406a6820, 0x3555: 0x406a6a20, 0x3556: 0x406a6c20, 0x3557: 0x406a6e20, + 0x3558: 0x406a7020, 0x3559: 0x406a7220, 0x355a: 0x406a7420, 0x355b: 0x406a7620, + 0x355c: 0x406a7820, 0x355d: 0x406a7a20, 0x355e: 0x406a7c20, 0x355f: 0x406a7e20, + 0x3560: 0x406a8020, 0x3561: 0x406a8220, 0x3562: 0x406a8420, 0x3563: 0x406a8620, + 0x3564: 0x406a8820, 0x3565: 0x406a8a20, 0x3566: 0x406a8c20, 0x3567: 0x406a8e20, + 0x3568: 0x406a9020, 0x3569: 0x406a9220, 0x356a: 0x406a9420, 0x356b: 0x406a9620, + 0x356c: 0x406a9820, 0x356d: 0x406a9a20, 0x356e: 0x406a9c20, 0x356f: 0x406a9e20, + 0x3570: 0x406aa020, 0x3571: 0x406aa220, 0x3572: 0x406aa420, 0x3573: 0x406aa620, + 0x3574: 0x406aa820, 0x3575: 0x406aaa20, 0x3576: 0x406aac20, 0x3577: 0x406aae20, + 0x3578: 0x406ab020, 0x3579: 0x406ab220, 0x357a: 0x406ab420, 0x357b: 0x406ab620, + 0x357c: 0x406ab820, 0x357d: 0x406aba20, 0x357e: 0x406abc20, 0x357f: 0x406abe20, + // Block 0xd6, offset 0x3580 + 0x3580: 0x406ac020, 0x3581: 0x406ac220, 0x3582: 0x406ac420, 0x3583: 0x406ac620, + 0x3584: 0x406ac820, 0x3585: 0x406aca20, 0x3586: 0x406acc20, 0x3587: 0x406ace20, + 0x3588: 0x406ad020, 0x3589: 0x406ad220, 0x358a: 0x406ad420, 0x358b: 0x406ad620, + 0x358c: 0x406ad820, 0x358d: 0x406ada20, 0x358e: 0x406adc20, 0x358f: 0x406ade20, + 0x3590: 0x406ae020, 0x3591: 0x406ae220, 0x3592: 0x406ae420, 0x3593: 0x406ae620, + 0x3594: 0x406ae820, 0x3595: 0x406aea20, 0x3596: 0x406aec20, 0x3597: 0x406aee20, + 0x3598: 0x406af020, 0x3599: 0x406af220, 0x359a: 0x406af420, 0x359b: 0x406af620, + 0x359c: 0x406af820, 0x359d: 0x406afa20, 0x359e: 0x406afc20, 0x359f: 0x406afe20, + 0x35a0: 0x406b0020, 0x35a1: 0x406b0220, 0x35a2: 0x406b0420, 0x35a3: 0x406b0620, + 0x35a4: 0x406b0820, 0x35a5: 0x406b0a20, 0x35a6: 0x406b0c20, 0x35a7: 0x406b0e20, + 0x35a8: 0x406b1020, 0x35a9: 0x406b1220, 0x35aa: 0x406b1420, 0x35ab: 0x406b1620, + 0x35ac: 0x406b1820, 0x35ad: 0x406b1a20, 0x35ae: 0x406b1c20, 0x35af: 0x406b1e20, + 0x35b0: 0x406b2020, 0x35b1: 0x406b2220, 0x35b2: 0x406b2420, 0x35b3: 0x406b2620, + 0x35b4: 0x406b2820, 0x35b5: 0x406b2a20, 0x35b6: 0x406b2c20, 0x35b7: 0x406b2e20, + 0x35b8: 0x406b3020, 0x35b9: 0x406b3220, 0x35ba: 0x406b3420, 0x35bb: 0x406b3620, + 0x35bc: 0x406b3820, 0x35bd: 0x406b3a20, 0x35be: 0x406b3c20, 0x35bf: 0x406b3e20, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x406b4020, 0x35c1: 0x406b4220, 0x35c2: 0x406b4420, 0x35c3: 0x406b4620, + 0x35c4: 0x406b4820, 0x35c5: 0x406b4a20, 0x35c6: 0x406b4c20, 0x35c7: 0x406b4e20, + 0x35c8: 0x406b5020, 0x35c9: 0x406b5220, 0x35ca: 0x406b5420, 0x35cb: 0x406b5620, + 0x35cc: 0x406b5820, 0x35cd: 0x406b5a20, 0x35ce: 0x406b5c20, 0x35cf: 0x406b5e20, + 0x35d0: 0x406b6020, 0x35d1: 0x406b6220, 0x35d2: 0x406b6420, 0x35d3: 0x406b6620, + 0x35d4: 0x406b6820, 0x35d5: 0x406b6a20, 0x35d6: 0x406b6c20, 0x35d7: 0x406b6e20, + 0x35d8: 0x406b7020, 0x35d9: 0x406b7220, 0x35da: 0x406b7420, 0x35db: 0x406b7620, + 0x35dc: 0x406b7820, 0x35dd: 0x406b7a20, 0x35de: 0x406b7c20, 0x35df: 0x406b7e20, + 0x35e0: 0x406b8020, 0x35e1: 0x406b8220, 0x35e2: 0x406b8420, 0x35e3: 0x406b8620, + 0x35e4: 0x406b8820, 0x35e5: 0x406b8a20, 0x35e6: 0x406b8c20, 0x35e7: 0x406b8e20, + 0x35e8: 0x406b9020, 0x35e9: 0x406b9220, 0x35ea: 0x406b9420, 0x35eb: 0x406b9620, + 0x35ec: 0x406b9820, 0x35ed: 0x406b9a20, 0x35ee: 0x406b9c20, 0x35ef: 0x406b9e20, + 0x35f0: 0x406ba020, 0x35f1: 0x406ba220, 0x35f2: 0x406ba420, 0x35f3: 0x406ba620, + 0x35f4: 0x406ba820, 0x35f5: 0x406baa20, 0x35f6: 0x406bac20, 0x35f7: 0x406bae20, + 0x35f8: 0x406bb020, 0x35f9: 0x406bb220, 0x35fa: 0x406bb420, 0x35fb: 0x406bb620, + 0x35fc: 0x406bb820, 0x35fd: 0x406bba20, 0x35fe: 0x406bbc20, 0x35ff: 0x406bbe20, + // Block 0xd8, offset 0x3600 + 0x3600: 0x406bc020, 0x3601: 0x406bc220, 0x3602: 0x406bc420, 0x3603: 0x406bc620, + 0x3604: 0x406bc820, 0x3605: 0x406bca20, 0x3606: 0x406bcc20, 0x3607: 0x406bce20, + 0x3608: 0x406bd020, 0x3609: 0x406bd220, 0x360a: 0x406bd420, 0x360b: 0x406bd620, + 0x360c: 0x406bd820, 0x360d: 0x406bda20, 0x360e: 0x406bdc20, 0x360f: 0x406bde20, + 0x3610: 0x406be020, 0x3611: 0x406be220, 0x3612: 0x406be420, 0x3613: 0x406be620, + 0x3614: 0x406be820, 0x3615: 0x406bea20, 0x3616: 0x406bec20, 0x3617: 0x406bee20, + 0x3618: 0x406bf020, 0x3619: 0x406bf220, 0x361a: 0x406bf420, 0x361b: 0x406bf620, + 0x361c: 0x406bf820, 0x361d: 0x406bfa20, 0x361e: 0x406bfc20, 0x361f: 0x406bfe20, + 0x3620: 0x406c0020, 0x3621: 0x406c0220, 0x3622: 0x406c0420, 0x3623: 0x406c0620, + 0x3624: 0x406c0820, 0x3625: 0x406c0a20, 0x3626: 0x406c0c20, 0x3627: 0x406c0e20, + 0x3628: 0x406c1020, 0x3629: 0x406c1220, 0x362a: 0x406c1420, 0x362b: 0x406c1620, + 0x362c: 0x406c1820, 0x362d: 0x406c1a20, 0x362e: 0x406c1c20, 0x362f: 0x406c1e20, + 0x3630: 0x406c2020, 0x3631: 0x406c2220, 0x3632: 0x406c2420, 0x3633: 0x406c2620, + 0x3634: 0x406c2820, 0x3635: 0x406c2a20, 0x3636: 0x406c2c20, 0x3637: 0x406c2e20, + 0x3638: 0x406c3020, 0x3639: 0x406c3220, 0x363a: 0x406c3420, 0x363b: 0x406c3620, + 0x363c: 0x406c3820, 0x363d: 0x406c3a20, 0x363e: 0x406c3c20, 0x363f: 0x406c3e20, + // Block 0xd9, offset 0x3640 + 0x3640: 0x406c4020, 0x3641: 0x406c4220, 0x3642: 0x406c4420, 0x3643: 0x406c4620, + 0x3644: 0x406c4820, 0x3645: 0x406c4a20, 0x3646: 0x406c4c20, 0x3647: 0x406c4e20, + 0x3648: 0x406c5020, 0x3649: 0x406c5220, 0x364a: 0x406c5420, 0x364b: 0x406c5620, + 0x364c: 0x406c5820, 0x364d: 0x406c5a20, 0x364e: 0x406c5c20, 0x364f: 0x406c5e20, + 0x3650: 0x406c6020, 0x3651: 0x406c6220, 0x3652: 0x406c6420, 0x3653: 0x406c6620, + 0x3654: 0x406c6820, 0x3655: 0x406c6a20, 0x3656: 0x406c6c20, 0x3657: 0x406c6e20, + 0x3658: 0x406c7020, 0x3659: 0x406c7220, 0x365a: 0x406c7420, 0x365b: 0x406c7620, + 0x365c: 0x406c7820, 0x365d: 0x406c7a20, 0x365e: 0x406c7c20, 0x365f: 0x406c7e20, + 0x3660: 0x406c8020, 0x3661: 0x406c8220, 0x3662: 0x406c8420, 0x3663: 0x406c8620, + 0x3664: 0x406c8820, 0x3665: 0x406c8a20, 0x3666: 0x406c8c20, 0x3667: 0x406c8e20, + 0x3668: 0x406c9020, 0x3669: 0x406c9220, 0x366a: 0x406c9420, 0x366b: 0x406c9620, + 0x366c: 0x406c9820, 0x366d: 0x406c9a20, 0x366e: 0x406c9c20, 0x366f: 0x406c9e20, + 0x3670: 0x406ca020, 0x3671: 0x406ca220, 0x3672: 0x406ca420, 0x3673: 0x406ca620, + 0x3674: 0x406ca820, 0x3675: 0x406caa20, 0x3676: 0x406cac20, 0x3677: 0x406cae20, + 0x3678: 0x406cb020, 0x3679: 0x406cb220, 0x367a: 0x406cb420, 0x367b: 0x406cb620, + 0x367c: 0x406cb820, 0x367d: 0x406cba20, 0x367e: 0x406cbc20, 0x367f: 0x406cbe20, + // Block 0xda, offset 0x3680 + 0x3680: 0x406cc020, 0x3681: 0x406cc220, 0x3682: 0x406cc420, 0x3683: 0x406cc620, + 0x3684: 0x406cc820, 0x3685: 0x406cca20, 0x3686: 0x406ccc20, 0x3687: 0x406cce20, + 0x3688: 0x406cd020, 0x3689: 0x406cd220, 0x368a: 0x406cd420, 0x368b: 0x406cd620, + 0x368c: 0x406cd820, 0x368d: 0x406cda20, 0x368e: 0x406cdc20, 0x368f: 0x406cde20, + 0x3690: 0x406ce020, 0x3691: 0x406ce220, 0x3692: 0x406ce420, 0x3693: 0x406ce620, + 0x3694: 0x406ce820, 0x3695: 0x406cea20, 0x3696: 0x406cec20, 0x3697: 0x406cee20, + 0x3698: 0x406cf020, 0x3699: 0x406cf220, 0x369a: 0x406cf420, 0x369b: 0x406cf620, + 0x369c: 0x406cf820, 0x369d: 0x406cfa20, 0x369e: 0x406cfc20, 0x369f: 0x406cfe20, + 0x36a0: 0x406d0020, 0x36a1: 0x406d0220, 0x36a2: 0x406d0420, 0x36a3: 0x406d0620, + 0x36a4: 0x406d0820, 0x36a5: 0x406d0a20, 0x36a6: 0x406d0c20, 0x36a7: 0x406d0e20, + 0x36a8: 0x406d1020, 0x36a9: 0x406d1220, 0x36aa: 0x406d1420, 0x36ab: 0x406d1620, + 0x36ac: 0x406d1820, 0x36ad: 0x406d1a20, 0x36ae: 0x406d1c20, 0x36af: 0x406d1e20, + 0x36b0: 0x406d2020, 0x36b1: 0x406d2220, 0x36b2: 0x406d2420, 0x36b3: 0x406d2620, + 0x36b4: 0x406d2820, 0x36b5: 0x406d2a20, 0x36b6: 0x406d2c20, 0x36b7: 0x406d2e20, + 0x36b8: 0x406d3020, 0x36b9: 0x406d3220, 0x36ba: 0x406d3420, 0x36bb: 0x406d3620, + 0x36bc: 0x406d3820, 0x36bd: 0x406d3a20, 0x36be: 0x406d3c20, 0x36bf: 0x406d3e20, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x406d4020, 0x36c1: 0x406d4220, 0x36c2: 0x406d4420, 0x36c3: 0x406d4620, + 0x36c4: 0x406d4820, 0x36c5: 0x406d4a20, 0x36c6: 0x406d4c20, 0x36c7: 0x406d4e20, + 0x36c8: 0x406d5020, 0x36c9: 0x406d5220, 0x36ca: 0x406d5420, 0x36cb: 0x406d5620, + 0x36cc: 0x406d5820, 0x36cd: 0x406d5a20, 0x36ce: 0x406d5c20, 0x36cf: 0x406d5e20, + 0x36d0: 0x406d6020, 0x36d1: 0x406d6220, 0x36d2: 0x406d6420, 0x36d3: 0x406d6620, + 0x36d4: 0x406d6820, 0x36d5: 0x406d6a20, 0x36d6: 0x406d6c20, 0x36d7: 0x406d6e20, + 0x36d8: 0x406d7020, 0x36d9: 0x406d7220, 0x36da: 0x406d7420, 0x36db: 0x406d7620, + 0x36dc: 0x406d7820, 0x36dd: 0x406d7a20, 0x36de: 0x406d7c20, 0x36df: 0x406d7e20, + 0x36e0: 0x406d8020, 0x36e1: 0x406d8220, 0x36e2: 0x406d8420, 0x36e3: 0x406d8620, + 0x36e4: 0x406d8820, 0x36e5: 0x406d8a20, 0x36e6: 0x406d8c20, 0x36e7: 0x406d8e20, + 0x36e8: 0x406d9020, 0x36e9: 0x406d9220, 0x36ea: 0x406d9420, 0x36eb: 0x406d9620, + 0x36ec: 0x406d9820, 0x36ed: 0x406d9a20, 0x36ee: 0x406d9c20, 0x36ef: 0x406d9e20, + 0x36f0: 0x406da020, 0x36f1: 0x406da220, 0x36f2: 0x406da420, 0x36f3: 0x406da620, + 0x36f4: 0x406da820, 0x36f5: 0x406daa20, 0x36f6: 0x406dac20, 0x36f7: 0x406dae20, + 0x36f8: 0x406db020, 0x36f9: 0x406db220, 0x36fa: 0x406db420, 0x36fb: 0x406db620, + 0x36fc: 0x406db820, 0x36fd: 0x406dba20, 0x36fe: 0x406dbc20, 0x36ff: 0x406dbe20, + // Block 0xdc, offset 0x3700 + 0x3700: 0x406dc020, 0x3701: 0x406dc220, 0x3702: 0x406dc420, 0x3703: 0x406dc620, + 0x3704: 0x406dc820, 0x3705: 0x406dca20, 0x3706: 0x406dcc20, 0x3707: 0x406dce20, + 0x3708: 0x406dd020, 0x3709: 0x406dd220, 0x370a: 0x406dd420, 0x370b: 0x406dd620, + 0x370c: 0x406dd820, 0x370d: 0x406dda20, 0x370e: 0x406ddc20, 0x370f: 0x406dde20, + 0x3710: 0x406de020, 0x3711: 0x406de220, 0x3712: 0x406de420, 0x3713: 0x406de620, + 0x3714: 0x406de820, 0x3715: 0x406dea20, 0x3716: 0x406dec20, 0x3717: 0x406dee20, + 0x3718: 0x406df020, 0x3719: 0x406df220, 0x371a: 0x406df420, 0x371b: 0x406df620, + 0x371c: 0x406df820, 0x371d: 0x406dfa20, 0x371e: 0x406dfc20, 0x371f: 0x406dfe20, + 0x3720: 0x406e0020, 0x3721: 0x406e0220, 0x3722: 0x406e0420, 0x3723: 0x406e0620, + 0x3724: 0x406e0820, 0x3725: 0x406e0a20, 0x3726: 0x406e0c20, 0x3727: 0x406e0e20, + 0x3728: 0x406e1020, 0x3729: 0x406e1220, 0x372a: 0x406e1420, 0x372b: 0x406e1620, + 0x372c: 0x406e1820, 0x372d: 0x406e1a20, 0x372e: 0x406e1c20, 0x372f: 0x406e1e20, + 0x3730: 0x406e2020, 0x3731: 0x406e2220, 0x3732: 0x406e2420, 0x3733: 0x406e2620, + 0x3734: 0x406e2820, 0x3735: 0x406e2a20, 0x3736: 0x406e2c20, 0x3737: 0x406e2e20, + 0x3738: 0x406e3020, 0x3739: 0x406e3220, 0x373a: 0x406e3420, 0x373b: 0x406e3620, + 0x373c: 0x406e3820, 0x373d: 0x406e3a20, 0x373e: 0x406e3c20, 0x373f: 0x406e3e20, + // Block 0xdd, offset 0x3740 + 0x3740: 0x406e4020, 0x3741: 0x406e4220, 0x3742: 0x406e4420, 0x3743: 0x406e4620, + 0x3744: 0x406e4820, 0x3745: 0x406e4a20, 0x3746: 0x406e4c20, 0x3747: 0x406e4e20, + 0x3748: 0x406e5020, 0x3749: 0x406e5220, 0x374a: 0x406e5420, 0x374b: 0x406e5620, + 0x374c: 0x406e5820, 0x374d: 0x406e5a20, 0x374e: 0x406e5c20, 0x374f: 0x406e5e20, + 0x3750: 0x406e6020, 0x3751: 0x406e6220, 0x3752: 0x406e6420, 0x3753: 0x406e6620, + 0x3754: 0x406e6820, 0x3755: 0x406e6a20, 0x3756: 0x406e6c20, 0x3757: 0x406e6e20, + 0x3758: 0x406e7020, 0x3759: 0x406e7220, 0x375a: 0x406e7420, 0x375b: 0x406e7620, + 0x375c: 0x406e7820, 0x375d: 0x406e7a20, 0x375e: 0x406e7c20, 0x375f: 0x406e7e20, + 0x3760: 0x406e8020, 0x3761: 0x406e8220, 0x3762: 0x406e8420, 0x3763: 0x406e8620, + 0x3764: 0x406e8820, 0x3765: 0x406e8a20, 0x3766: 0x406e8c20, 0x3767: 0x406e8e20, + 0x3768: 0x406e9020, 0x3769: 0x406e9220, 0x376a: 0x406e9420, 0x376b: 0x406e9620, + 0x376c: 0x406e9820, 0x376d: 0x406e9a20, 0x376e: 0x406e9c20, 0x376f: 0x406e9e20, + 0x3770: 0x406ea020, 0x3771: 0x406ea220, 0x3772: 0x406ea420, 0x3773: 0x406ea620, + 0x3774: 0x406ea820, 0x3775: 0x406eaa20, 0x3776: 0x406eac20, 0x3777: 0x406eae20, + 0x3778: 0x406eb020, 0x3779: 0x406eb220, 0x377a: 0x406eb420, 0x377b: 0x406eb620, + 0x377c: 0x406eb820, 0x377d: 0x406eba20, 0x377e: 0x406ebc20, 0x377f: 0x406ebe20, + // Block 0xde, offset 0x3780 + 0x3780: 0x406ec020, 0x3781: 0x406ec220, 0x3782: 0x406ec420, 0x3783: 0x406ec620, + 0x3784: 0x406ec820, 0x3785: 0x406eca20, 0x3786: 0x406ecc20, 0x3787: 0x406ece20, + 0x3788: 0x406ed020, 0x3789: 0x406ed220, 0x378a: 0x406ed420, 0x378b: 0x406ed620, + 0x378c: 0x406ed820, 0x378d: 0x406eda20, 0x378e: 0x406edc20, 0x378f: 0x406ede20, + 0x3790: 0x406ee020, 0x3791: 0x406ee220, 0x3792: 0x406ee420, 0x3793: 0x406ee620, + 0x3794: 0x406ee820, 0x3795: 0x406eea20, 0x3796: 0x406eec20, 0x3797: 0x406eee20, + 0x3798: 0x406ef020, 0x3799: 0x406ef220, 0x379a: 0x406ef420, 0x379b: 0x406ef620, + 0x379c: 0x406ef820, 0x379d: 0x406efa20, 0x379e: 0x406efc20, 0x379f: 0x406efe20, + 0x37a0: 0x406f0020, 0x37a1: 0x406f0220, 0x37a2: 0x406f0420, 0x37a3: 0x406f0620, + 0x37a4: 0x406f0820, 0x37a5: 0x406f0a20, 0x37a6: 0x406f0c20, 0x37a7: 0x406f0e20, + 0x37a8: 0x406f1020, 0x37a9: 0x406f1220, 0x37aa: 0x406f1420, 0x37ab: 0x406f1620, + 0x37ac: 0x406f1820, 0x37ad: 0x406f1a20, 0x37ae: 0x406f1c20, 0x37af: 0x406f1e20, + 0x37b0: 0x406f2020, 0x37b1: 0x406f2220, 0x37b2: 0x406f2420, 0x37b3: 0x406f2620, + 0x37b4: 0x406f2820, 0x37b5: 0x406f2a20, 0x37b6: 0x406f2c20, 0x37b7: 0x406f2e20, + 0x37b8: 0x406f3020, 0x37b9: 0x406f3220, 0x37ba: 0x406f3420, 0x37bb: 0x406f3620, + 0x37bc: 0x406f3820, 0x37bd: 0x406f3a20, 0x37be: 0x406f3c20, 0x37bf: 0x406f3e20, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x406f4020, 0x37c1: 0x406f4220, 0x37c2: 0x406f4420, 0x37c3: 0x406f4620, + 0x37c4: 0x406f4820, 0x37c5: 0x406f4a20, 0x37c6: 0x406f4c20, 0x37c7: 0x406f4e20, + 0x37c8: 0x406f5020, 0x37c9: 0x406f5220, 0x37ca: 0x406f5420, 0x37cb: 0x406f5620, + 0x37cc: 0x406f5820, + 0x37d0: 0x401a9020, 0x37d1: 0x401a9220, 0x37d2: 0x401a9420, 0x37d3: 0x401a9620, + 0x37d4: 0x401a9820, 0x37d5: 0x401a9a20, 0x37d6: 0x401a9c20, 0x37d7: 0x401a9e20, + 0x37d8: 0x401aa020, 0x37d9: 0x401aa220, 0x37da: 0x401aa420, 0x37db: 0x401aa620, + 0x37dc: 0x401aa820, 0x37dd: 0x401aaa20, 0x37de: 0x401aac20, 0x37df: 0x401aae20, + 0x37e0: 0x401ab020, 0x37e1: 0x401ab220, 0x37e2: 0x401ab420, 0x37e3: 0x401ab620, + 0x37e4: 0x401ab820, 0x37e5: 0x401aba20, 0x37e6: 0x401abc20, 0x37e7: 0x401abe20, + 0x37e8: 0x401ac020, 0x37e9: 0x401ac220, 0x37ea: 0x401ac420, 0x37eb: 0x401ac620, + 0x37ec: 0x401ac820, 0x37ed: 0x401aca20, 0x37ee: 0x401acc20, 0x37ef: 0x401ace20, + 0x37f0: 0x401ad020, 0x37f1: 0x401ad220, 0x37f2: 0x401ad420, 0x37f3: 0x401ad620, + 0x37f4: 0x401ad820, 0x37f5: 0x401ada20, 0x37f6: 0x401adc20, 0x37f7: 0x401ade20, + 0x37f8: 0x401ae020, 0x37f9: 0x401ae220, 0x37fa: 0x401ae420, 0x37fb: 0x401ae620, + 0x37fc: 0x401ae820, 0x37fd: 0x401aea20, 0x37fe: 0x401aec20, 0x37ff: 0x401aee20, + // Block 0xe0, offset 0x3800 + 0x3800: 0x401af020, 0x3801: 0x401af220, 0x3802: 0x401af420, 0x3803: 0x401af620, + 0x3804: 0x401af820, 0x3805: 0x401afa20, 0x3806: 0x401afc20, + 0x3810: 0x406f6620, 0x3811: 0x406f6820, 0x3812: 0x406f6a20, 0x3813: 0x406f6c20, + 0x3814: 0x406f6e20, 0x3815: 0x406f7020, 0x3816: 0x406f7220, 0x3817: 0x406f7420, + 0x3818: 0x406f7620, 0x3819: 0x406f7820, 0x381a: 0x406f7a20, 0x381b: 0x406f7c20, + 0x381c: 0x406f7e20, 0x381d: 0x406f8020, 0x381e: 0x406f8220, 0x381f: 0x406f8420, + 0x3820: 0x406f8620, 0x3821: 0x406f8820, 0x3822: 0x406f8a20, 0x3823: 0x406f8c20, + 0x3824: 0x406f8e20, 0x3825: 0x406f9020, 0x3826: 0x406f9220, 0x3827: 0x406f9420, + 0x3828: 0x406f9620, 0x3829: 0x406f9820, 0x382a: 0x406f9e20, 0x382b: 0x406f9a20, + 0x382c: 0x406fa020, 0x382d: 0x406f9c20, 0x382e: 0x406fa220, 0x382f: 0x406fa420, + 0x3830: 0x406fa620, 0x3831: 0x406fa820, 0x3832: 0x406faa20, 0x3833: 0x406fac20, + 0x3834: 0x406fae20, 0x3835: 0x406fb020, 0x3836: 0x406fb220, 0x3837: 0x406fb420, + 0x3838: 0x406f5a20, 0x3839: 0x406f5c20, 0x383a: 0x406f5e20, 0x383b: 0x406f6020, + 0x383c: 0x406f6420, 0x383d: 0x406f6220, 0x383e: 0x40025620, 0x383f: 0x4002fe20, + // Block 0xe1, offset 0x3840 + 0x3840: 0x405b8020, 0x3841: 0x405b8220, 0x3842: 0x405b8420, 0x3843: 0x405b8620, + 0x3844: 0x405b8820, 0x3845: 0x405b8a20, 0x3846: 0x405b8c20, 0x3847: 0x405b8e20, + 0x3848: 0x405b9020, 0x3849: 0x405b9220, 0x384a: 0x405b9420, 0x384b: 0x405b9620, + 0x384c: 0x405b9820, 0x384d: 0x405b9a20, 0x384e: 0x405b9c20, 0x384f: 0x405b9e20, + 0x3850: 0x405ba020, 0x3851: 0x405ba220, 0x3852: 0x405ba420, 0x3853: 0x405ba620, + 0x3854: 0x405ba820, 0x3855: 0x405baa20, 0x3856: 0x405bac20, 0x3857: 0x405bae20, + 0x3858: 0x405bb020, 0x3859: 0x405bb220, 0x385a: 0x405bb420, 0x385b: 0x405bb620, + 0x385c: 0x405bb820, 0x385d: 0x405bba20, 0x385e: 0x405bbc20, 0x385f: 0x405bbe20, + 0x3860: 0x405bc020, 0x3861: 0x405bc220, 0x3862: 0x405bc420, 0x3863: 0x405bc620, + 0x3864: 0x405bc820, 0x3865: 0x405bca20, 0x3866: 0x405bcc20, 0x3867: 0x405bce20, + 0x3868: 0x405bd020, 0x3869: 0x405bd220, 0x386a: 0x405bd420, 0x386b: 0x405bd620, + 0x386c: 0x405bd820, 0x386d: 0x405bda20, 0x386e: 0x405bdc20, 0x386f: 0x405bde20, + 0x3870: 0x405be020, 0x3871: 0x405be220, 0x3872: 0x405be420, 0x3873: 0x405be620, + 0x3874: 0x405be820, 0x3875: 0x405bea20, 0x3876: 0x405bec20, 0x3877: 0x405bee20, + 0x3878: 0x405bf020, 0x3879: 0x405bf220, 0x387a: 0x405bf420, 0x387b: 0x405bf620, + 0x387c: 0x405bf820, 0x387d: 0x405bfa20, 0x387e: 0x405bfc20, 0x387f: 0x405bfe20, + // Block 0xe2, offset 0x3880 + 0x3880: 0x405c0020, 0x3881: 0x405c0220, 0x3882: 0x405c0420, 0x3883: 0x405c0620, + 0x3884: 0x405c0820, 0x3885: 0x405c0a20, 0x3886: 0x405c0c20, 0x3887: 0x405c0e20, + 0x3888: 0x405c1020, 0x3889: 0x405c1220, 0x388a: 0x405c1420, 0x388b: 0x405c1620, + 0x388c: 0x405c1820, 0x388d: 0x405c1a20, 0x388e: 0x405c1c20, 0x388f: 0x405c1e20, + 0x3890: 0x405c2020, 0x3891: 0x405c2220, 0x3892: 0x405c2420, 0x3893: 0x405c2620, + 0x3894: 0x405c2820, 0x3895: 0x405c2a20, 0x3896: 0x405c2c20, 0x3897: 0x405c2e20, + 0x3898: 0x405c3020, 0x3899: 0x405c3220, 0x389a: 0x405c3420, 0x389b: 0x405c3620, + 0x389c: 0x405c3820, 0x389d: 0x405c3a20, 0x389e: 0x405c3c20, 0x389f: 0x405c3e20, + 0x38a0: 0x405c4020, 0x38a1: 0x405c4220, 0x38a2: 0x405c4420, 0x38a3: 0x405c4620, + 0x38a4: 0x405c4820, 0x38a5: 0x405c4a20, 0x38a6: 0x405c4c20, 0x38a7: 0x405c4e20, + 0x38a8: 0x405c5020, 0x38a9: 0x405c5220, 0x38aa: 0x405c5420, 0x38ab: 0x405c5620, + 0x38ac: 0x405c5820, 0x38ad: 0x405c5a20, 0x38ae: 0x405c5c20, 0x38af: 0x405c5e20, + 0x38b0: 0x405c6020, 0x38b1: 0x405c6220, 0x38b2: 0x405c6420, 0x38b3: 0x405c6620, + 0x38b4: 0x405c6820, 0x38b5: 0x405c6a20, 0x38b6: 0x405c6c20, 0x38b7: 0x405c6e20, + 0x38b8: 0x405c7020, 0x38b9: 0x405c7220, 0x38ba: 0x405c7420, 0x38bb: 0x405c7620, + 0x38bc: 0x405c7820, 0x38bd: 0x405c7a20, 0x38be: 0x405c7c20, 0x38bf: 0x405c7e20, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x405c8020, 0x38c1: 0x405c8220, 0x38c2: 0x405c8420, 0x38c3: 0x405c8620, + 0x38c4: 0x405c8820, 0x38c5: 0x405c8a20, 0x38c6: 0x405c8c20, 0x38c7: 0x405c8e20, + 0x38c8: 0x405c9020, 0x38c9: 0x405c9220, 0x38ca: 0x405c9420, 0x38cb: 0x405c9620, + 0x38cc: 0x405c9820, 0x38cd: 0x405c9a20, 0x38ce: 0x405c9c20, 0x38cf: 0x405c9e20, + 0x38d0: 0x405ca020, 0x38d1: 0x405ca220, 0x38d2: 0x405ca420, 0x38d3: 0x405ca620, + 0x38d4: 0x405ca820, 0x38d5: 0x405caa20, 0x38d6: 0x405cac20, 0x38d7: 0x405cae20, + 0x38d8: 0x405cb020, 0x38d9: 0x405cb220, 0x38da: 0x405cb420, 0x38db: 0x405cb620, + 0x38dc: 0x405cb820, 0x38dd: 0x405cba20, 0x38de: 0x405cbc20, 0x38df: 0x405cbe20, + 0x38e0: 0x405cc020, 0x38e1: 0x405cc220, 0x38e2: 0x405cc420, 0x38e3: 0x405cc620, + 0x38e4: 0x405cc820, 0x38e5: 0x405cca20, 0x38e6: 0x405ccc20, 0x38e7: 0x405cce20, + 0x38e8: 0x405cd020, 0x38e9: 0x405cd220, 0x38ea: 0x405cd420, 0x38eb: 0x405cd620, + 0x38ec: 0x405cd820, 0x38ed: 0x405cda20, 0x38ee: 0x405cdc20, 0x38ef: 0x405cde20, + 0x38f0: 0x405ce020, 0x38f1: 0x405ce220, 0x38f2: 0x405ce420, 0x38f3: 0x405ce620, + 0x38f4: 0x405ce820, 0x38f5: 0x405cea20, 0x38f6: 0x405cec20, 0x38f7: 0x405cee20, + 0x38f8: 0x405cf020, 0x38f9: 0x405cf220, 0x38fa: 0x405cf420, 0x38fb: 0x405cf620, + 0x38fc: 0x405cf820, 0x38fd: 0x405cfa20, 0x38fe: 0x405cfc20, 0x38ff: 0x405cfe20, + // Block 0xe4, offset 0x3900 + 0x3900: 0x405d0020, 0x3901: 0x405d0220, 0x3902: 0x405d0420, 0x3903: 0x405d0620, + 0x3904: 0x405d0820, 0x3905: 0x405d0a20, 0x3906: 0x405d0c20, 0x3907: 0x405d0e20, + 0x3908: 0x405d1020, 0x3909: 0x405d1220, 0x390a: 0x405d1420, 0x390b: 0x405d1620, + 0x390c: 0x405d1820, 0x390d: 0x405d1a20, 0x390e: 0x405d1c20, 0x390f: 0x405d1e20, + 0x3910: 0x405d2020, 0x3911: 0x405d2220, 0x3912: 0x405d2420, 0x3913: 0x405d2620, + 0x3914: 0x405d2820, 0x3915: 0x405d2a20, 0x3916: 0x405d2c20, 0x3917: 0x405d2e20, + 0x3918: 0x405d3020, 0x3919: 0x405d3220, 0x391a: 0x405d3420, 0x391b: 0x405d3620, + 0x391c: 0x405d3820, 0x391d: 0x405d3a20, 0x391e: 0x405d3c20, 0x391f: 0x405d3e20, + 0x3920: 0x405d4020, 0x3921: 0x405d4220, 0x3922: 0x405d4420, 0x3923: 0x405d4620, + 0x3924: 0x405d4820, 0x3925: 0x405d4a20, 0x3926: 0x405d4c20, 0x3927: 0x405d4e20, + 0x3928: 0x405d5020, 0x3929: 0x405d5220, 0x392a: 0x405d5420, 0x392b: 0x405d5620, + 0x392c: 0x405d5820, 0x392d: 0x405d5a20, 0x392e: 0x405d5c20, 0x392f: 0x405d5e20, + 0x3930: 0x405d6020, 0x3931: 0x405d6220, 0x3932: 0x405d6420, 0x3933: 0x405d6620, + 0x3934: 0x405d6820, 0x3935: 0x405d6a20, 0x3936: 0x405d6c20, 0x3937: 0x405d6e20, + 0x3938: 0x405d7020, 0x3939: 0x405d7220, 0x393a: 0x405d7420, 0x393b: 0x405d7620, + 0x393c: 0x405d7820, 0x393d: 0x405d7a20, 0x393e: 0x405d7c20, 0x393f: 0x405d7e20, + // Block 0xe5, offset 0x3940 + 0x3940: 0x405d8020, 0x3941: 0x405d8220, 0x3942: 0x405d8420, 0x3943: 0x405d8620, + 0x3944: 0x405d8820, 0x3945: 0x405d8a20, 0x3946: 0x405d8c20, 0x3947: 0x405d8e20, + 0x3948: 0x405d9020, 0x3949: 0x405d9220, 0x394a: 0x405d9420, 0x394b: 0x405d9620, + 0x394c: 0x405d9820, 0x394d: 0x40025820, 0x394e: 0x40030020, 0x394f: 0x4002d820, + 0x3950: 0x005c3084, 0x3951: 0x005c5484, 0x3952: 0x005c8e84, 0x3953: 0xe00020fb, + 0x3954: 0xe00020fe, 0x3955: 0xe0002101, 0x3956: 0xe0002104, 0x3957: 0xe0002107, + 0x3958: 0xe000210a, 0x3959: 0xe000210d, 0x395a: 0xe0002110, 0x395b: 0xe0002113, + 0x395c: 0xe0002116, 0x395d: 0xe0002119, 0x395e: 0xe000211c, 0x395f: 0xe000211f, + 0x3960: 0xe00001cd, 0x3961: 0xe0000261, 0x3962: 0xe0000379, 0x3963: 0xe0000453, + 0x3964: 0xe0000528, 0x3965: 0xe00005f2, 0x3966: 0xe00006bd, 0x3967: 0xe0000765, + 0x3968: 0xe0000811, 0x3969: 0xe00008b6, 0x396a: 0x005c5c84, 0x396b: 0x005d2284, + // Block 0xe6, offset 0x3980 + 0x3980: 0x0033ec88, 0x3981: 0x4033ec20, 0x3982: 0x0033fa88, 0x3983: 0x4033fa20, + 0x3984: 0x00340488, 0x3985: 0x40340420, 0x3986: 0x00343488, 0x3987: 0x40343420, + 0x3988: 0x00344e88, 0x3989: 0x40344e20, 0x398a: 0x0035a288, 0x398b: 0x4035a220, + 0x398c: 0x0035f088, 0x398d: 0x4035f020, 0x398e: 0x00366e88, 0x398f: 0x40366e20, + 0x3990: 0x00367c88, 0x3991: 0x40367c20, 0x3992: 0x0036a688, 0x3993: 0x4036a620, + 0x3994: 0x0036c088, 0x3995: 0x4036c020, 0x3996: 0x0036c288, 0x3997: 0x4036c220, + 0x3998: 0x0036de88, 0x3999: 0x4036de20, 0x399a: 0x0036e888, 0x399b: 0x4036e820, + 0x399c: 0x0036f288, 0x399d: 0x4036f220, 0x399e: 0x00372488, 0x399f: 0x40372420, + 0x39a0: 0x00360a88, 0x39a1: 0x40360a20, 0x39a2: 0x00339e88, 0x39a3: 0x40339e20, + 0x39a4: 0x0034a288, 0x39a5: 0x4034a220, 0x39a6: 0x0034b888, 0x39a7: 0x4034b820, + 0x39a8: 0x0034ee8a, 0x39a9: 0x0034ee84, 0x39aa: 0x0034ee8a, 0x39ab: 0x0034ee84, + 0x39ac: 0x0034ee8a, 0x39ad: 0x0034ee84, 0x39ae: 0x0034ee84, 0x39af: 0xae608402, + 0x39b0: 0xa0000000, 0x39b1: 0xa0000000, 0x39b2: 0xa0000000, 0x39b3: 0x4004e020, + 0x39b4: 0x84e619e1, 0x39b5: 0x84e61a0a, 0x39b6: 0x84e61a1b, 0x39b7: 0x84e61ab9, + 0x39b8: 0x84e61b3a, 0x39b9: 0x84e61b3f, 0x39ba: 0x84e61b47, 0x39bb: 0x84e61af0, + 0x39bc: 0xae605f02, 0x39bd: 0xae605f02, 0x39be: 0x40054c20, 0x39bf: 0x40367220, + // Block 0xe7, offset 0x39c0 + 0x39c0: 0x00339488, 0x39c1: 0x40339420, 0x39c2: 0x00341288, 0x39c3: 0x40341220, + 0x39c4: 0x0033d288, 0x39c5: 0x4033d220, 0x39c6: 0x00364288, 0x39c7: 0x40364220, + 0x39c8: 0x00340e88, 0x39c9: 0x40340e20, 0x39ca: 0x00356088, 0x39cb: 0x40356020, + 0x39cc: 0x00355488, 0x39cd: 0x40355420, 0x39ce: 0x00360c88, 0x39cf: 0x40360c20, + 0x39d0: 0x00361688, 0x39d1: 0x40361620, 0x39d2: 0x00362088, 0x39d3: 0x40362020, + 0x39d4: 0x0035de88, 0x39d5: 0x4035de20, 0x39d6: 0x00366488, 0x39d7: 0x40366420, + 0x39df: 0x84e61b67, + 0x39e0: 0x405d9a20, 0x39e1: 0x405d9c20, 0x39e2: 0x405d9e20, 0x39e3: 0x405da020, + 0x39e4: 0x405da220, 0x39e5: 0x405da420, 0x39e6: 0x405da620, 0x39e7: 0x405da820, + 0x39e8: 0x405daa20, 0x39e9: 0x405dac20, 0x39ea: 0x405dae20, 0x39eb: 0x405db020, + 0x39ec: 0x405db220, 0x39ed: 0x405db420, 0x39ee: 0x405db620, 0x39ef: 0x405db820, + 0x39f0: 0x405dba20, 0x39f1: 0x405dbc20, 0x39f2: 0x405dbe20, 0x39f3: 0x405dc020, + 0x39f4: 0x405dc220, 0x39f5: 0x405dc420, 0x39f6: 0x405dc620, 0x39f7: 0x405dc820, + 0x39f8: 0x405dca20, 0x39f9: 0x405dcc20, 0x39fa: 0x405dce20, 0x39fb: 0x405dd020, + 0x39fc: 0x405dd220, 0x39fd: 0x405dd420, 0x39fe: 0x405dd620, 0x39ff: 0x405dd820, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x405dda20, 0x3a01: 0x405ddc20, 0x3a02: 0x405dde20, 0x3a03: 0x405de020, + 0x3a04: 0x405de220, 0x3a05: 0x405de420, 0x3a06: 0x405de620, 0x3a07: 0x405de820, + 0x3a08: 0x405dea20, 0x3a09: 0x405dec20, 0x3a0a: 0x405dee20, 0x3a0b: 0x405df020, + 0x3a0c: 0x405df220, 0x3a0d: 0x405df420, 0x3a0e: 0x405df620, 0x3a0f: 0x405df820, + 0x3a10: 0x405dfa20, 0x3a11: 0x405dfc20, 0x3a12: 0x405dfe20, 0x3a13: 0x405e0020, + 0x3a14: 0x405e0220, 0x3a15: 0x405e0420, 0x3a16: 0x405e0620, 0x3a17: 0x405e0820, + 0x3a18: 0x405e0a20, 0x3a19: 0x405e0c20, 0x3a1a: 0x405e0e20, 0x3a1b: 0x405e1020, + 0x3a1c: 0x405e1220, 0x3a1d: 0x405e1420, 0x3a1e: 0x405e1620, 0x3a1f: 0x405e1820, + 0x3a20: 0x405e1a20, 0x3a21: 0x405e1c20, 0x3a22: 0x405e1e20, 0x3a23: 0x405e2020, + 0x3a24: 0x405e2220, 0x3a25: 0x405e2420, 0x3a26: 0x405e2620, 0x3a27: 0x405e2820, + 0x3a28: 0x405e2a20, 0x3a29: 0x405e2c20, 0x3a2a: 0x405e2e20, 0x3a2b: 0x405e3020, + 0x3a2c: 0x405e3220, 0x3a2d: 0x405e3420, 0x3a2e: 0x405e3620, 0x3a2f: 0x405e3820, + 0x3a30: 0xae60ef02, 0x3a31: 0xae60f002, 0x3a32: 0x40038220, 0x3a33: 0x40030220, + 0x3a34: 0x4002b820, 0x3a35: 0x40025a20, 0x3a36: 0x40026a20, 0x3a37: 0x4002da20, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x4006ba20, 0x3a41: 0x4006bc20, 0x3a42: 0x4006be20, 0x3a43: 0x4006c020, + 0x3a44: 0x4006c220, 0x3a45: 0x4006c420, 0x3a46: 0x4006c620, 0x3a47: 0x4006c820, + 0x3a48: 0x4006ca20, 0x3a49: 0x4006cc20, 0x3a4a: 0x4006ce20, 0x3a4b: 0x4006d020, + 0x3a4c: 0x4006d220, 0x3a4d: 0x4006d420, 0x3a4e: 0x4006d620, 0x3a4f: 0x4006d820, + 0x3a50: 0x4006da20, 0x3a51: 0x4006dc20, 0x3a52: 0x4006de20, 0x3a53: 0x4006e020, + 0x3a54: 0x4006e220, 0x3a55: 0x4006e420, 0x3a56: 0x4006e620, 0x3a57: 0x4006e820, + 0x3a58: 0x4006ea20, 0x3a59: 0x4006ec20, 0x3a5a: 0x4006ee20, 0x3a5b: 0x4006f020, + 0x3a5c: 0x4006f220, 0x3a5d: 0x4006f420, 0x3a5e: 0x4006f620, 0x3a5f: 0x4006f820, + 0x3a60: 0x4006fa20, 0x3a61: 0x4006fc20, 0x3a62: 0x0031e488, 0x3a63: 0x4031e420, + 0x3a64: 0x0031f888, 0x3a65: 0x4031f820, 0x3a66: 0x002d8c88, 0x3a67: 0x402d8c20, + 0x3a68: 0xe0000fd5, 0x3a69: 0xe0000fd2, 0x3a6a: 0x0031ae88, 0x3a6b: 0x4031ae20, + 0x3a6c: 0x0031b088, 0x3a6d: 0x4031b020, 0x3a6e: 0x0031b288, 0x3a6f: 0x4031b220, + 0x3a70: 0x402d1020, 0x3a71: 0x402fee20, 0x3a72: 0xe00009cf, 0x3a73: 0xe00009cc, + 0x3a74: 0xe00009ff, 0x3a75: 0xe00009fc, 0x3a76: 0xe0000a05, 0x3a77: 0xe0000a02, + 0x3a78: 0xe0000a0e, 0x3a79: 0xe0000a0b, 0x3a7a: 0xe0000a15, 0x3a7b: 0xe0000a11, + 0x3a7c: 0xe0000a1c, 0x3a7d: 0xe0000a19, 0x3a7e: 0x002c6088, 0x3a7f: 0x402c6020, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x002e1488, 0x3a81: 0x402e1420, 0x3a82: 0x002e1688, 0x3a83: 0x402e1620, + 0x3a84: 0x002e1888, 0x3a85: 0x402e1820, 0x3a86: 0x002e3288, 0x3a87: 0x402e3220, + 0x3a88: 0x002e3688, 0x3a89: 0x402e3620, 0x3a8a: 0x002f1888, 0x3a8b: 0x402f1820, + 0x3a8c: 0x002f0888, 0x3a8d: 0x402f0820, 0x3a8e: 0xe0000ea1, 0x3a8f: 0xe0000e9e, + 0x3a90: 0x002f3888, 0x3a91: 0x402f3820, 0x3a92: 0x002f4688, 0x3a93: 0x402f4620, + 0x3a94: 0x002f4888, 0x3a95: 0x402f4820, 0x3a96: 0x002f5e88, 0x3a97: 0x402f5e20, + 0x3a98: 0x002f6088, 0x3a99: 0x402f6020, 0x3a9a: 0x002f8a88, 0x3a9b: 0x402f8a20, + 0x3a9c: 0x002fe488, 0x3a9d: 0x402fe420, 0x3a9e: 0x0030c888, 0x3a9f: 0x4030c820, + 0x3aa0: 0xe00010c6, 0x3aa1: 0xe00010c3, 0x3aa2: 0x00316288, 0x3aa3: 0x40316220, + 0x3aa4: 0x00319088, 0x3aa5: 0x40319020, 0x3aa6: 0x00319288, 0x3aa7: 0x40319220, + 0x3aa8: 0x00319c88, 0x3aa9: 0x40319c20, 0x3aaa: 0x00319e88, 0x3aab: 0x40319e20, + 0x3aac: 0x0031a088, 0x3aad: 0x4031a020, 0x3aae: 0x0031a288, 0x3aaf: 0x4031a220, + 0x3ab0: 0x0031a294, 0x3ab1: 0x402c9420, 0x3ab2: 0x402e6620, 0x3ab3: 0x402e9c20, + 0x3ab4: 0x402ed820, 0x3ab5: 0x402fe020, 0x3ab6: 0x402fe220, 0x3ab7: 0x40306220, + 0x3ab8: 0x4031a420, 0x3ab9: 0xe0000abc, 0x3aba: 0xe0000ab9, 0x3abb: 0xe0000b92, + 0x3abc: 0xe0000b8f, 0x3abd: 0xe0000bdc, 0x3abe: 0x002d5688, 0x3abf: 0x402d5620, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x002e7088, 0x3ac1: 0x402e7020, 0x3ac2: 0xe0000f08, 0x3ac3: 0xe0000f05, + 0x3ac4: 0xe0000f6d, 0x3ac5: 0xe0000f6a, 0x3ac6: 0xe0000fb7, 0x3ac7: 0xe0000fb4, + 0x3ac8: 0x4006fe20, 0x3ac9: 0x40070020, 0x3aca: 0x40070220, 0x3acb: 0x0031e688, + 0x3acc: 0x4031e620, 0x3acd: 0x00308888, 0x3ace: 0x402e5c20, + 0x3ad0: 0x002ec488, 0x3ad1: 0x402ec420, 0x3ad2: 0x002c4c88, 0x3ad3: 0x402c4c20, + 0x3ae0: 0xe0000bd6, 0x3ae1: 0xe0000bd3, 0x3ae2: 0xe0000ca5, 0x3ae3: 0xe0000ca2, + 0x3ae4: 0xe0000d75, 0x3ae5: 0xe0000d72, 0x3ae6: 0xe0000ee2, 0x3ae7: 0xe0000edf, + 0x3ae8: 0xe0000f4d, 0x3ae9: 0xe0000f4a, 0x3aea: 0x002d8088, + // Block 0xec, offset 0x3b00 + 0x3b38: 0xf0001414, 0x3b39: 0xe0000e97, 0x3b3a: 0x4030a820, 0x3b3b: 0x402d2020, + 0x3b3c: 0x402f4a20, 0x3b3d: 0x402e9820, 0x3b3e: 0x402db220, 0x3b3f: 0x402e9a20, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x4045aa20, 0x3b41: 0x4045ac20, 0x3b42: 0x4045ae20, 0x3b43: 0x4045b020, + 0x3b44: 0x4045b220, 0x3b45: 0x4045b420, 0x3b46: 0x820922db, 0x3b47: 0x4045b820, + 0x3b48: 0x4045ba20, 0x3b49: 0x4045bc20, 0x3b4a: 0x4045be20, 0x3b4b: 0xa000f302, + 0x3b4c: 0x4045c020, 0x3b4d: 0x4045c220, 0x3b4e: 0x4045c420, 0x3b4f: 0x4045c620, + 0x3b50: 0x4045c820, 0x3b51: 0x4045ca20, 0x3b52: 0x4045cc20, 0x3b53: 0x4045ce20, + 0x3b54: 0x4045d020, 0x3b55: 0x4045d220, 0x3b56: 0x4045d420, 0x3b57: 0x4045d620, + 0x3b58: 0x4045d820, 0x3b59: 0x4045da20, 0x3b5a: 0x4045dc20, 0x3b5b: 0x4045de20, + 0x3b5c: 0x4045e020, 0x3b5d: 0x4045e220, 0x3b5e: 0x4045e420, 0x3b5f: 0x4045e620, + 0x3b60: 0x4045e820, 0x3b61: 0x4045ea20, 0x3b62: 0x4045ec20, 0x3b63: 0x4045ee20, + 0x3b64: 0x4045f020, 0x3b65: 0x4045f220, 0x3b66: 0x4045f420, 0x3b67: 0x4045f620, + 0x3b68: 0x40075020, 0x3b69: 0x40075220, 0x3b6a: 0x40075420, 0x3b6b: 0x40075620, + 0x3b70: 0x40284820, 0x3b71: 0x40284a20, 0x3b72: 0x40284c20, 0x3b73: 0x40284e20, + 0x3b74: 0x40285020, 0x3b75: 0x40285220, 0x3b76: 0x40075820, 0x3b77: 0x40075a20, + 0x3b78: 0x4027f020, 0x3b79: 0x40075c20, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x404baa20, 0x3b81: 0x404bac20, 0x3b82: 0x404bae20, 0x3b83: 0x404bb020, + 0x3b84: 0x404bb220, 0x3b85: 0x404bb420, 0x3b86: 0x404bb620, 0x3b87: 0x404bb820, + 0x3b88: 0x404bc220, 0x3b89: 0x404bc420, 0x3b8a: 0x404bc620, 0x3b8b: 0x404bc820, + 0x3b8c: 0x404bca20, 0x3b8d: 0x404bcc20, 0x3b8e: 0x404bce20, 0x3b8f: 0x404bd020, + 0x3b90: 0x404bd220, 0x3b91: 0x404bd420, 0x3b92: 0x404bd620, 0x3b93: 0x404bd820, + 0x3b94: 0x404bdc20, 0x3b95: 0x404bde20, 0x3b96: 0x404be020, 0x3b97: 0x404be220, + 0x3b98: 0x404be820, 0x3b99: 0x404bee20, 0x3b9a: 0x404bf020, 0x3b9b: 0x404bf420, + 0x3b9c: 0x404bf620, 0x3b9d: 0x404bfc20, 0x3b9e: 0x404c0620, 0x3b9f: 0x404c0820, + 0x3ba0: 0x404c0a20, 0x3ba1: 0x404c0c20, 0x3ba2: 0x404bfe20, 0x3ba3: 0x404c0020, + 0x3ba4: 0x404c0220, 0x3ba5: 0x404c0420, 0x3ba6: 0x404c0e20, 0x3ba7: 0x404bda20, + 0x3ba8: 0x404be420, 0x3ba9: 0x404bba20, 0x3baa: 0x404bbc20, 0x3bab: 0x404bbe20, + 0x3bac: 0x404bc020, 0x3bad: 0x404be620, 0x3bae: 0x404bf220, 0x3baf: 0x404bf820, + 0x3bb0: 0x404bfa20, 0x3bb1: 0x404bea20, 0x3bb2: 0x404bec20, 0x3bb3: 0x404c1020, + 0x3bb4: 0x4005e820, 0x3bb5: 0x4005ea20, 0x3bb6: 0x40031820, 0x3bb7: 0x40031a20, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0xa000f302, 0x3bc1: 0xa000f402, 0x3bc2: 0x4045f820, 0x3bc3: 0x4045fa20, + 0x3bc4: 0x4045fc20, 0x3bc5: 0x4045fe20, 0x3bc6: 0x40460020, 0x3bc7: 0x40460220, + 0x3bc8: 0x40460420, 0x3bc9: 0x40460620, 0x3bca: 0x40460820, 0x3bcb: 0x40460a20, + 0x3bcc: 0x40460c20, 0x3bcd: 0x40460e20, 0x3bce: 0x40461020, 0x3bcf: 0x40461220, + 0x3bd0: 0x40461420, 0x3bd1: 0x40461620, 0x3bd2: 0x40461820, 0x3bd3: 0x40461a20, + 0x3bd4: 0x40461c20, 0x3bd5: 0x40461e20, 0x3bd6: 0x40462020, 0x3bd7: 0x40462220, + 0x3bd8: 0x40462420, 0x3bd9: 0x40462620, 0x3bda: 0x40462820, 0x3bdb: 0x40462a20, + 0x3bdc: 0x40462c20, 0x3bdd: 0x40462e20, 0x3bde: 0x40463020, 0x3bdf: 0x40463220, + 0x3be0: 0x40463420, 0x3be1: 0x40463620, 0x3be2: 0x40463820, 0x3be3: 0x40463a20, + 0x3be4: 0x40463c20, 0x3be5: 0x40463e20, 0x3be6: 0x40464020, 0x3be7: 0x40464220, + 0x3be8: 0x40464420, 0x3be9: 0x40464620, 0x3bea: 0x40464820, 0x3beb: 0x40464a20, + 0x3bec: 0x40464c20, 0x3bed: 0x40464e20, 0x3bee: 0x40465020, 0x3bef: 0x40465220, + 0x3bf0: 0x40465420, 0x3bf1: 0x40465620, 0x3bf2: 0x40465820, 0x3bf3: 0x40465a20, + 0x3bf4: 0x40465c20, 0x3bf5: 0x40465e20, 0x3bf6: 0x40466020, 0x3bf7: 0x40466220, + 0x3bf8: 0x40466420, 0x3bf9: 0x40466620, 0x3bfa: 0x40466820, 0x3bfb: 0x40466a20, + 0x3bfc: 0x40466c20, 0x3bfd: 0x40466e20, 0x3bfe: 0x40467020, 0x3bff: 0x40467220, + // Block 0xf0, offset 0x3c00 + 0x3c00: 0x40467420, 0x3c01: 0x40467620, 0x3c02: 0x40467820, 0x3c03: 0x40467a20, + 0x3c04: 0x8209233e, + 0x3c0e: 0x40031020, 0x3c0f: 0x40031220, + 0x3c10: 0xe000018b, 0x3c11: 0xe000021c, 0x3c12: 0xe0000337, 0x3c13: 0xe0000411, + 0x3c14: 0xe00004e6, 0x3c15: 0xe00005b0, 0x3c16: 0xe000067b, 0x3c17: 0xe0000723, + 0x3c18: 0xe00007cf, 0x3c19: 0xe0000874, + 0x3c20: 0xae600000, 0x3c21: 0xae600000, 0x3c22: 0xae600000, 0x3c23: 0xae600000, + 0x3c24: 0xae600000, 0x3c25: 0xae600000, 0x3c26: 0xae600000, 0x3c27: 0xae600000, + 0x3c28: 0xae600000, 0x3c29: 0xae600000, 0x3c2a: 0xae600000, 0x3c2b: 0xae600000, + 0x3c2c: 0xae600000, 0x3c2d: 0xae600000, 0x3c2e: 0xae600000, 0x3c2f: 0xae600000, + 0x3c30: 0xae600000, 0x3c31: 0xae600000, 0x3c32: 0x40404620, 0x3c33: 0x00404684, + 0x3c34: 0x00404684, 0x3c35: 0x00404684, 0x3c36: 0x00404684, 0x3c37: 0x00404684, + 0x3c38: 0x40056e20, 0x3c39: 0x40057020, 0x3c3a: 0x40057220, 0x3c3b: 0x40404820, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0xe00001a9, 0x3c41: 0xe000023d, 0x3c42: 0xe0000355, 0x3c43: 0xe000042f, + 0x3c44: 0xe0000504, 0x3c45: 0xe00005ce, 0x3c46: 0xe0000699, 0x3c47: 0xe0000741, + 0x3c48: 0xe00007ed, 0x3c49: 0xe0000892, 0x3c4a: 0x404dd220, 0x3c4b: 0x404dd420, + 0x3c4c: 0x404dd620, 0x3c4d: 0x404dd820, 0x3c4e: 0x404dda20, 0x3c4f: 0x404ddc20, + 0x3c50: 0x404dde20, 0x3c51: 0x404de020, 0x3c52: 0x404de220, 0x3c53: 0x404de420, + 0x3c54: 0x404de620, 0x3c55: 0x404de820, 0x3c56: 0x404dea20, 0x3c57: 0x404dec20, + 0x3c58: 0x404dee20, 0x3c59: 0x404df020, 0x3c5a: 0x404df220, 0x3c5b: 0x404df420, + 0x3c5c: 0x404df620, 0x3c5d: 0x404df820, 0x3c5e: 0x404dfa20, 0x3c5f: 0x404dfc20, + 0x3c60: 0x404dfe20, 0x3c61: 0x404e0020, 0x3c62: 0x404e0220, 0x3c63: 0x404e0420, + 0x3c64: 0x404e0620, 0x3c65: 0x404e0820, 0x3c66: 0x404e0a20, 0x3c67: 0x404e0c20, + 0x3c68: 0x404e0e20, 0x3c69: 0x404e1020, 0x3c6a: 0x404e1220, 0x3c6b: 0xadc10f02, + 0x3c6c: 0xadc11002, 0x3c6d: 0xadc11102, 0x3c6e: 0x4005f420, 0x3c6f: 0x40032020, + 0x3c70: 0x404d8a20, 0x3c71: 0x404d8c20, 0x3c72: 0x404d8e20, 0x3c73: 0x404d9020, + 0x3c74: 0x404d9220, 0x3c75: 0x404d9420, 0x3c76: 0x404d9620, 0x3c77: 0x404d9820, + 0x3c78: 0x404d9a20, 0x3c79: 0x404d9c20, 0x3c7a: 0x404d9e20, 0x3c7b: 0x404da020, + 0x3c7c: 0x404da220, 0x3c7d: 0x404da420, 0x3c7e: 0x404da620, 0x3c7f: 0x404da820, + // Block 0xf2, offset 0x3c80 + 0x3c80: 0x404daa20, 0x3c81: 0x404dac20, 0x3c82: 0x404dae20, 0x3c83: 0x404db020, + 0x3c84: 0x404db220, 0x3c85: 0x404db420, 0x3c86: 0x404db620, 0x3c87: 0x404db820, + 0x3c88: 0x404dba20, 0x3c89: 0x404dbc20, 0x3c8a: 0x404dbe20, 0x3c8b: 0x404dc020, + 0x3c8c: 0x404dc220, 0x3c8d: 0x404dc420, 0x3c8e: 0x404dc620, 0x3c8f: 0x404dc820, + 0x3c90: 0x404dca20, 0x3c91: 0x404dcc20, 0x3c92: 0x404dce20, 0x3c93: 0x820926e8, + 0x3c9f: 0x40038420, + 0x3ca0: 0x40636a20, 0x3ca1: 0x40636c20, 0x3ca2: 0x40636e20, 0x3ca3: 0x40637020, + 0x3ca4: 0x40637220, 0x3ca5: 0x40637420, 0x3ca6: 0x40637620, 0x3ca7: 0x40637820, + 0x3ca8: 0x40637a20, 0x3ca9: 0x40637c20, 0x3caa: 0x40637e20, 0x3cab: 0x40638020, + 0x3cac: 0x40638220, 0x3cad: 0x40638420, 0x3cae: 0x40638620, 0x3caf: 0x40638820, + 0x3cb0: 0x40638a20, 0x3cb1: 0x40638c20, 0x3cb2: 0x40638e20, 0x3cb3: 0x40639020, + 0x3cb4: 0x40639220, 0x3cb5: 0x40639420, 0x3cb6: 0x40639620, 0x3cb7: 0x40639820, + 0x3cb8: 0x40639a20, 0x3cb9: 0x40639c20, 0x3cba: 0x40639e20, 0x3cbb: 0x4063a020, + 0x3cbc: 0x4063a220, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0xa000f202, 0x3cc1: 0xa000f302, 0x3cc2: 0xa000f802, 0x3cc3: 0xa000f402, + 0x3cc4: 0x4052b220, 0x3cc5: 0x4052b420, 0x3cc6: 0x4052b620, 0x3cc7: 0x4052b820, + 0x3cc8: 0x4052ba20, 0x3cc9: 0x4052bc20, 0x3cca: 0x4052be20, 0x3ccb: 0x4052c020, + 0x3ccc: 0x4052c220, 0x3ccd: 0x4052c420, 0x3cce: 0x4052c620, 0x3ccf: 0x4052c820, + 0x3cd0: 0x4052ca20, 0x3cd1: 0x4052cc20, 0x3cd2: 0x4052ce20, 0x3cd3: 0x4052d020, + 0x3cd4: 0x4052d220, 0x3cd5: 0x4052d420, 0x3cd6: 0x4052d620, 0x3cd7: 0x4052d820, + 0x3cd8: 0x4052da20, 0x3cd9: 0x4052dc20, 0x3cda: 0x4052de20, 0x3cdb: 0x4052e020, + 0x3cdc: 0x4052e220, 0x3cdd: 0x4052e420, 0x3cde: 0x4052e620, 0x3cdf: 0x4052e820, + 0x3ce0: 0x4052ea20, 0x3ce1: 0x4052ec20, 0x3ce2: 0x4052ee20, 0x3ce3: 0x4052f020, + 0x3ce4: 0x4052f220, 0x3ce5: 0x4052f420, 0x3ce6: 0x4052f620, 0x3ce7: 0x4052f820, + 0x3ce8: 0x4052fa20, 0x3ce9: 0x4052fc20, 0x3cea: 0x4052fe20, 0x3ceb: 0x40530220, + 0x3cec: 0x00530284, 0x3ced: 0x40530620, 0x3cee: 0x40530820, 0x3cef: 0x40530a20, + 0x3cf0: 0x40530c20, 0x3cf1: 0x40530e20, 0x3cf2: 0x40531020, 0x3cf3: 0xa070f102, + 0x3cf4: 0x40531220, 0x3cf5: 0x40532420, 0x3cf6: 0x40531620, 0x3cf7: 0x40531820, + 0x3cf8: 0x40531a20, 0x3cf9: 0x40531c20, 0x3cfa: 0x40532020, 0x3cfb: 0x40532220, + 0x3cfc: 0x40531420, 0x3cfd: 0x40531e20, 0x3cfe: 0x40530020, 0x3cff: 0x40530420, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0x82092993, 0x3d01: 0x40036e20, 0x3d02: 0x40037020, 0x3d03: 0x40037220, + 0x3d04: 0x40037420, 0x3d05: 0x40037620, 0x3d06: 0x40037820, 0x3d07: 0x4002b020, + 0x3d08: 0x40033620, 0x3d09: 0x40033820, 0x3d0a: 0x40037a20, 0x3d0b: 0x40037c20, + 0x3d0c: 0x40037e20, 0x3d0d: 0x40038020, 0x3d0f: 0x4027c020, + 0x3d10: 0xe00001c1, 0x3d11: 0xe0000255, 0x3d12: 0xe000036d, 0x3d13: 0xe0000447, + 0x3d14: 0xe000051c, 0x3d15: 0xe00005e6, 0x3d16: 0xe00006b1, 0x3d17: 0xe0000759, + 0x3d18: 0xe0000805, 0x3d19: 0xe00008aa, + 0x3d1e: 0x4005f620, 0x3d1f: 0x4005f820, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0x40519c20, 0x3d41: 0x40519e20, 0x3d42: 0x4051a020, 0x3d43: 0x4051a220, + 0x3d44: 0x4051a420, 0x3d45: 0x4051a620, 0x3d46: 0x4051a820, 0x3d47: 0x4051aa20, + 0x3d48: 0x4051ac20, 0x3d49: 0x4051ae20, 0x3d4a: 0x4051b020, 0x3d4b: 0x4051b220, + 0x3d4c: 0x4051b420, 0x3d4d: 0x4051b620, 0x3d4e: 0x4051b820, 0x3d4f: 0x4051ba20, + 0x3d50: 0x4051bc20, 0x3d51: 0x4051be20, 0x3d52: 0x4051c020, 0x3d53: 0x4051c220, + 0x3d54: 0x4051c420, 0x3d55: 0x4051c620, 0x3d56: 0x4051c820, 0x3d57: 0x4051ca20, + 0x3d58: 0x4051cc20, 0x3d59: 0x4051ce20, 0x3d5a: 0x4051d020, 0x3d5b: 0x4051d220, + 0x3d5c: 0x4051d420, 0x3d5d: 0x4051d620, 0x3d5e: 0x4051d820, 0x3d5f: 0x4051da20, + 0x3d60: 0x4051dc20, 0x3d61: 0x4051de20, 0x3d62: 0x4051e020, 0x3d63: 0x4051e220, + 0x3d64: 0x4051e420, 0x3d65: 0x4051e620, 0x3d66: 0x4051e820, 0x3d67: 0x4051ea20, + 0x3d68: 0x4051ec20, 0x3d69: 0x4051f620, 0x3d6a: 0x4051f820, 0x3d6b: 0x4051fa20, + 0x3d6c: 0x4051fc20, 0x3d6d: 0x4051fe20, 0x3d6e: 0x40520020, 0x3d6f: 0x40520220, + 0x3d70: 0x40520420, 0x3d71: 0x40520620, 0x3d72: 0x40520820, 0x3d73: 0x4051ee20, + 0x3d74: 0x4051f020, 0x3d75: 0x4051f220, 0x3d76: 0x4051f420, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x40520a20, 0x3d81: 0x40520c20, 0x3d82: 0x40520e20, 0x3d83: 0x40521020, + 0x3d84: 0x40521220, 0x3d85: 0x40521420, 0x3d86: 0x40521620, 0x3d87: 0x40521820, + 0x3d88: 0x40521a20, 0x3d89: 0x40521c20, 0x3d8a: 0x40521e20, 0x3d8b: 0x40522020, + 0x3d8c: 0x40522220, 0x3d8d: 0x40522420, + 0x3d90: 0xe00001bb, 0x3d91: 0xe000024f, 0x3d92: 0xe0000367, 0x3d93: 0xe0000441, + 0x3d94: 0xe0000516, 0x3d95: 0xe00005e0, 0x3d96: 0xe00006ab, 0x3d97: 0xe0000753, + 0x3d98: 0xe00007ff, 0x3d99: 0xe00008a4, + 0x3d9c: 0x4005fa20, 0x3d9d: 0x40033a20, 0x3d9e: 0x40033c20, 0x3d9f: 0x40033e20, + 0x3da0: 0x404e2020, 0x3da1: 0x404e2c20, 0x3da2: 0x404e3020, 0x3da3: 0x404e3420, + 0x3da4: 0x404e3e20, 0x3da5: 0x404e4620, 0x3da6: 0x404e4c20, 0x3da7: 0x404e5020, + 0x3da8: 0x404e5420, 0x3da9: 0x404e5820, 0x3daa: 0x404e6820, 0x3dab: 0x404e6e20, + 0x3dac: 0x404ea820, 0x3dad: 0x404eae20, 0x3dae: 0x404eb220, 0x3daf: 0x404e7a20, + 0x3db0: 0x4027c220, 0x3db1: 0x404eb420, 0x3db2: 0x404e3820, 0x3db3: 0x404e8e20, + 0x3db4: 0x404f3a20, 0x3db5: 0x404f3c20, 0x3db6: 0x404f3e20, 0x3db7: 0x4007ac20, + 0x3db8: 0x4007ae20, 0x3db9: 0x4007b020, 0x3dba: 0x404e9020, 0x3dbb: 0x404f3820, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x4049f020, 0x3dc1: 0x4049f220, 0x3dc2: 0x4049f420, 0x3dc3: 0x4049f620, + 0x3dc4: 0x4049f820, 0x3dc5: 0x4049fa20, 0x3dc6: 0x4049fc20, 0x3dc7: 0x4049fe20, + 0x3dc8: 0x404a0020, 0x3dc9: 0x404a0220, 0x3dca: 0x404a0420, 0x3dcb: 0x404a0620, + 0x3dcc: 0x404a0820, 0x3dcd: 0x404a0a20, 0x3dce: 0x404a0c20, 0x3dcf: 0x404a0e20, + 0x3dd0: 0x404a1020, 0x3dd1: 0x404a1220, 0x3dd2: 0x404a1420, 0x3dd3: 0x404a1620, + 0x3dd4: 0x404a1820, 0x3dd5: 0x404a1a20, 0x3dd6: 0x404a1c20, 0x3dd7: 0x404a1e20, + 0x3dd8: 0x404a2020, 0x3dd9: 0x404a2220, 0x3dda: 0x404a2420, 0x3ddb: 0x404a2620, + 0x3ddc: 0x404a2820, 0x3ddd: 0x404a2a20, 0x3dde: 0x404a2c20, 0x3ddf: 0x404a2e20, + 0x3de0: 0x404a3020, 0x3de1: 0x404a3220, 0x3de2: 0x404a3420, 0x3de3: 0x404a3620, + 0x3de4: 0x404a3820, 0x3de5: 0x404a3a20, 0x3de6: 0x404a3c20, 0x3de7: 0x404a3e20, + 0x3de8: 0x404a4020, 0x3de9: 0x404a4220, 0x3dea: 0x404a4420, 0x3deb: 0x404a4620, + 0x3dec: 0x404a4820, 0x3ded: 0x404a4a20, 0x3dee: 0x404a4c20, 0x3def: 0x404a4e20, + 0x3df0: 0x82e62528, 0x3df1: 0x404a5220, 0x3df2: 0x82e6252a, 0x3df3: 0x82e6252b, + 0x3df4: 0x82dc252c, 0x3df5: 0xc20e0671, 0x3df6: 0xc23f0671, 0x3df7: 0x82e6252f, + 0x3df8: 0x82e62530, 0x3df9: 0xc2700671, 0x3dfa: 0x404a6420, 0x3dfb: 0xc2a10671, + 0x3dfc: 0xc2d20671, 0x3dfd: 0x404a6a20, 0x3dfe: 0x82e62536, 0x3dff: 0xae610c02, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x404a6e20, 0x3e01: 0xae610d02, 0x3e02: 0x404a7020, + 0x3e1b: 0x404a7220, + 0x3e1c: 0x404a7420, 0x3e1d: 0x4027c420, 0x3e1e: 0x40057e20, 0x3e1f: 0x40058020, + 0x3e20: 0x40456420, 0x3e21: 0x40456620, 0x3e22: 0x40456820, 0x3e23: 0x40456a20, + 0x3e24: 0x40456c20, 0x3e25: 0x40456e20, 0x3e26: 0x40457020, 0x3e27: 0x40457220, + 0x3e28: 0x40457420, 0x3e29: 0x40457620, 0x3e2a: 0x40457820, 0x3e2b: 0x40458a20, + 0x3e2c: 0x40458c20, 0x3e2d: 0x40458e20, 0x3e2e: 0x40459020, 0x3e2f: 0x40459220, + 0x3e30: 0x40034020, 0x3e31: 0x4002dc20, 0x3e32: 0x40452c20, 0x3e33: 0x4027c620, + 0x3e34: 0x4027c820, 0x3e35: 0x40459420, 0x3e36: 0x820922d4, + // Block 0xf9, offset 0x3e40 + 0x3e41: 0x403cae20, 0x3e42: 0x403cb020, 0x3e43: 0x403cb220, + 0x3e44: 0x403cb420, 0x3e45: 0x403cb620, 0x3e46: 0x403cb820, + 0x3e49: 0x403e3c20, 0x3e4a: 0x403e3e20, 0x3e4b: 0x403e4020, + 0x3e4c: 0x403e4220, 0x3e4d: 0x403e4420, 0x3e4e: 0x403e4620, + 0x3e51: 0x403dfe20, 0x3e52: 0x403e0020, 0x3e53: 0x403e0220, + 0x3e54: 0x403e0420, 0x3e55: 0x403e0620, 0x3e56: 0x403e0820, + 0x3e60: 0x403ec220, 0x3e61: 0x403ec420, 0x3e62: 0x403ec620, 0x3e63: 0x403ec820, + 0x3e64: 0x403eca20, 0x3e65: 0x403ecc20, 0x3e66: 0x403ece20, + 0x3e68: 0x403ef220, 0x3e69: 0x403ef420, 0x3e6a: 0x403ef620, 0x3e6b: 0x403ef820, + 0x3e6c: 0x403efa20, 0x3e6d: 0x403efc20, 0x3e6e: 0x403efe20, + // Block 0xfa, offset 0x3e80 + 0x3e80: 0x40452e20, 0x3e81: 0x40453020, 0x3e82: 0x40453220, 0x3e83: 0x40453420, + 0x3e84: 0x40453620, 0x3e85: 0x40453820, 0x3e86: 0x40453a20, 0x3e87: 0x40453c20, + 0x3e88: 0x40453e20, 0x3e89: 0x40454020, 0x3e8a: 0x40454220, 0x3e8b: 0x40454420, + 0x3e8c: 0x40454620, 0x3e8d: 0x40454820, 0x3e8e: 0x40454a20, 0x3e8f: 0x40454c20, + 0x3e90: 0x40454e20, 0x3e91: 0x40455020, 0x3e92: 0x40455220, 0x3e93: 0x40455420, + 0x3e94: 0x40455620, 0x3e95: 0x40455820, 0x3e96: 0x40455a20, 0x3e97: 0x40455c20, + 0x3e98: 0x40455e20, 0x3e99: 0x40456020, 0x3e9a: 0x40456220, 0x3e9b: 0x40459620, + 0x3e9c: 0x40459820, 0x3e9d: 0x40459a20, 0x3e9e: 0x40459c20, 0x3e9f: 0x40459e20, + 0x3ea0: 0x4045a020, 0x3ea1: 0x4045a220, 0x3ea2: 0x4045a420, 0x3ea3: 0x40457a20, + 0x3ea4: 0x40457c20, 0x3ea5: 0x40457e20, 0x3ea6: 0x40458020, 0x3ea7: 0x40458220, + 0x3ea8: 0x40458420, 0x3ea9: 0x40458620, 0x3eaa: 0x40458820, 0x3eab: 0x40034220, + 0x3eac: 0xa000fa02, 0x3ead: 0x820922d3, + 0x3eb0: 0xe0000188, 0x3eb1: 0xe0000219, 0x3eb2: 0xe0000334, 0x3eb3: 0xe000040e, + 0x3eb4: 0xe00004e3, 0x3eb5: 0xe00005ad, 0x3eb6: 0xe0000678, 0x3eb7: 0xe0000720, + 0x3eb8: 0xe00007cc, 0x3eb9: 0xe0000871, + // Block 0xfb, offset 0x3ec0 + 0x3ef0: 0x40643620, 0x3ef1: 0x40643820, 0x3ef2: 0x40643a20, 0x3ef3: 0x40643c20, + 0x3ef4: 0x40643e20, 0x3ef5: 0x40644020, 0x3ef6: 0x40644220, 0x3ef7: 0x40644420, + 0x3ef8: 0x40644620, 0x3ef9: 0x40644820, 0x3efa: 0x40644a20, 0x3efb: 0x40644c20, + 0x3efc: 0x40644e20, 0x3efd: 0x40645020, 0x3efe: 0x40645220, 0x3eff: 0x40645420, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0x40645620, 0x3f01: 0x40645820, 0x3f02: 0x40645a20, 0x3f03: 0x40645c20, + 0x3f04: 0x40645e20, 0x3f05: 0x40646020, 0x3f06: 0x40646220, + 0x3f0b: 0x40651420, + 0x3f0c: 0x40651620, 0x3f0d: 0x40651820, 0x3f0e: 0x40651a20, 0x3f0f: 0x40651c20, + 0x3f10: 0x40651e20, 0x3f11: 0x40652020, 0x3f12: 0x40652220, 0x3f13: 0x40652420, + 0x3f14: 0x40652620, 0x3f15: 0x40652820, 0x3f16: 0x40652a20, 0x3f17: 0x40652c20, + 0x3f18: 0x40652e20, 0x3f19: 0x40653020, 0x3f1a: 0x40653220, 0x3f1b: 0x40653420, + 0x3f1c: 0x40653620, 0x3f1d: 0x40653820, 0x3f1e: 0x40653a20, 0x3f1f: 0x40653c20, + 0x3f20: 0x40653e20, 0x3f21: 0x40654020, 0x3f22: 0x40654220, 0x3f23: 0x40654420, + 0x3f24: 0x40654620, 0x3f25: 0x40654820, 0x3f26: 0x40654a20, 0x3f27: 0x40654c20, + 0x3f28: 0x40654e20, 0x3f29: 0x40655020, 0x3f2a: 0x40655220, 0x3f2b: 0x40655420, + 0x3f2c: 0x40655620, 0x3f2d: 0x40655820, 0x3f2e: 0x40655a20, 0x3f2f: 0x40655c20, + 0x3f30: 0x40655e20, 0x3f31: 0x40656020, 0x3f32: 0x40656220, 0x3f33: 0x40656420, + 0x3f34: 0x40656620, 0x3f35: 0x40656820, 0x3f36: 0x40656a20, 0x3f37: 0x40656c20, + 0x3f38: 0x40656e20, 0x3f39: 0x40657020, 0x3f3a: 0x40657220, 0x3f3b: 0x40657420, + // Block 0xfd, offset 0x3f40 + 0x3f40: 0x43189020, 0x3f41: 0x42cde820, 0x3f42: 0x431d9420, 0x3f43: 0x43199020, + 0x3f44: 0x42dda220, 0x3f45: 0x429c6420, 0x3f46: 0x42a7ca20, 0x3f47: 0x433f3820, + 0x3f48: 0x433f3820, 0x3f49: 0x42b2a220, 0x3f4a: 0x4323a220, 0x3f4b: 0x42ab0e20, + 0x3f4c: 0x42b29020, 0x3f4d: 0x42c3ec20, 0x3f4e: 0x42ecd220, 0x3f4f: 0x42ff0a20, + 0x3f50: 0x430c7e20, 0x3f51: 0x430f7420, 0x3f52: 0x4311f020, 0x3f53: 0x43211e20, + 0x3f54: 0x42d40420, 0x3f55: 0x42da3620, 0x3f56: 0x42e1b220, 0x3f57: 0x42e7bc20, + 0x3f58: 0x43087a20, 0x3f59: 0x4322d420, 0x3f5a: 0x4333e220, 0x3f5b: 0x429d0420, + 0x3f5c: 0x42a6ea20, 0x3f5d: 0x42d60820, 0x3f5e: 0x42e43620, 0x3f5f: 0x430c5a20, + 0x3f60: 0x433c3c20, 0x3f61: 0x42baa020, 0x3f62: 0x42dfd620, 0x3f63: 0x430b9a20, + 0x3f64: 0x4312c820, 0x3f65: 0x42c59220, 0x3f66: 0x4303b020, 0x3f67: 0x43103e20, + 0x3f68: 0x42bd9420, 0x3f69: 0x42ce2e20, 0x3f6a: 0x42dad420, 0x3f6b: 0x42e5f820, + 0x3f6c: 0x43219c20, 0x3f6d: 0x429f0c20, 0x3f6e: 0x42a36e20, 0x3f6f: 0x42a5bc20, + 0x3f70: 0x42c98820, 0x3f71: 0x42d5a620, 0x3f72: 0x42e42020, 0x3f73: 0x42edce20, + 0x3f74: 0x43000220, 0x3f75: 0x430c0c20, 0x3f76: 0x430cb820, 0x3f77: 0x431bde20, + 0x3f78: 0x432e6420, 0x3f79: 0x4336de20, 0x3f7a: 0x433bf420, 0x3f7b: 0x42f11820, + 0x3f7c: 0x42f2fe20, 0x3f7d: 0x42fb4020, 0x3f7e: 0x43079220, 0x3f7f: 0x43260820, + // Block 0xfe, offset 0x3f80 + 0x3f80: 0x433cfe20, 0x3f81: 0x4315ac20, 0x3f82: 0x42b1be20, 0x3f83: 0x42be0820, + 0x3f84: 0x42f8c020, 0x3f85: 0x4300fc20, 0x3f86: 0x42e4c420, 0x3f87: 0x42f19420, + 0x3f88: 0x43198420, 0x3f89: 0x432dee20, 0x3f8a: 0x42b1b020, 0x3f8b: 0x42b8c420, + 0x3f8c: 0x42d42620, 0x3f8d: 0x42dbb420, 0x3f8e: 0x42de1e20, 0x3f8f: 0x42fa5e20, + 0x3f90: 0x42fc6e20, 0x3f91: 0x432c9620, 0x3f92: 0x42a5a420, 0x3f93: 0x43011620, + 0x3f94: 0x42a3b820, 0x3f95: 0x42a39820, 0x3f96: 0x42f43820, 0x3f97: 0x42fb7c20, + 0x3f98: 0x4307e220, 0x3f99: 0x432cea20, 0x3f9a: 0x43170020, 0x3f9b: 0x42c59e20, + 0x3f9c: 0x42d40420, 0x3f9d: 0x4315fc20, 0x3f9e: 0x429c7220, 0x3f9f: 0x42b7ce20, + 0x3fa0: 0x42c02420, 0x3fa1: 0x42e70e20, 0x3fa2: 0x42eae020, 0x3fa3: 0x42a62e20, + 0x3fa4: 0x42f1f620, 0x3fa5: 0x429f7e20, 0x3fa6: 0x42bf5220, 0x3fa7: 0x429c1a20, + 0x3fa8: 0x42d99820, 0x3fa9: 0x42caf020, 0x3faa: 0x42fa4420, 0x3fab: 0x42a78620, + 0x3fac: 0x42b0bc20, 0x3fad: 0x42ee0220, 0x3fae: 0x43089220, 0x3faf: 0x43155420, + 0x3fb0: 0x42d77420, 0x3fb1: 0x431f6020, 0x3fb2: 0x42d91020, 0x3fb3: 0x42c5fc20, + 0x3fb4: 0x4305ca20, 0x3fb5: 0x42c74020, 0x3fb6: 0x42eaca20, 0x3fb7: 0x429d5c20, + 0x3fb8: 0x42a2d220, 0x3fb9: 0x42a39220, 0x3fba: 0x42d10220, 0x3fbb: 0x42f9ce20, + 0x3fbc: 0x4304de20, 0x3fbd: 0x4315a420, 0x3fbe: 0x43239e20, 0x3fbf: 0x42a5ea20, + // Block 0xff, offset 0x3fc0 + 0x3fc0: 0x42a88420, 0x3fc1: 0x42b2e620, 0x3fc2: 0x42bdd820, 0x3fc3: 0x42cb8a20, + 0x3fc4: 0x42dffc20, 0x3fc5: 0x42f25420, 0x3fc6: 0x432b5a20, 0x3fc7: 0x4334d420, + 0x3fc8: 0x433d2e20, 0x3fc9: 0x433d9c20, 0x3fca: 0x42a53620, 0x3fcb: 0x42cd8c20, + 0x3fcc: 0x42d6ee20, 0x3fcd: 0x431ec420, 0x3fce: 0x42bce820, 0x3fcf: 0x42c32020, + 0x3fd0: 0x42c40020, 0x3fd1: 0x42c93420, 0x3fd2: 0x42de4620, 0x3fd3: 0x42e29220, + 0x3fd4: 0x42e91220, 0x3fd5: 0x42f39420, 0x3fd6: 0x42fbe820, 0x3fd7: 0x4300de20, + 0x3fd8: 0x431e4c20, 0x3fd9: 0x4309dc20, 0x3fda: 0x43204620, 0x3fdb: 0x43269420, + 0x3fdc: 0x42a42e20, 0x3fdd: 0x42a54620, 0x3fde: 0x42a97a20, 0x3fdf: 0x42e19020, + 0x3fe0: 0x43118420, 0x3fe1: 0x43155420, 0x3fe2: 0x42bd9220, 0x3fe3: 0x42bfea20, + 0x3fe4: 0x42c6f620, 0x3fe5: 0x42d75c20, 0x3fe6: 0x42f87c20, 0x3fe7: 0x42e6ea20, + 0x3fe8: 0x429dc820, 0x3fe9: 0x42adf220, 0x3fea: 0x42b7ce20, 0x3feb: 0x42bb7420, + 0x3fec: 0x42c03820, 0x3fed: 0x42e76420, 0x3fee: 0x42e8d220, 0x3fef: 0x42ff3420, + 0x3ff0: 0x43008c20, 0x3ff1: 0x43246820, 0x3ff2: 0x432dec20, 0x3ff3: 0x432e9020, + 0x3ff4: 0x43303020, 0x3ff5: 0x429f1620, 0x3ff6: 0x42f35c20, 0x3ff7: 0x43236820, + 0x3ff8: 0x432d7020, 0x3ff9: 0x42c1c220, 0x3ffa: 0x429d0c20, 0x3ffb: 0x42a1b420, + 0x3ffc: 0x42b7dc20, 0x3ffd: 0x42b87e20, 0x3ffe: 0x42cb3220, 0x3fff: 0x42d40420, + // Block 0x100, offset 0x4000 + 0x4000: 0x42e39c20, 0x4001: 0x42ec8420, 0x4002: 0x4309f820, 0x4003: 0x4320f820, + 0x4004: 0x433f1a20, 0x4005: 0x42cd1020, 0x4006: 0x432c5c20, 0x4007: 0x42a51220, + 0x4008: 0x42cef620, 0x4009: 0x42cfe620, 0x400a: 0x42da8220, 0x400b: 0x42dd3820, + 0x400c: 0x42e81220, 0x400d: 0x42eab220, 0x400e: 0x42f0d620, 0x400f: 0x42fa2020, + 0x4010: 0x4330bc20, 0x4011: 0x42a2da20, 0x4012: 0x42c45c20, 0x4013: 0x432cf020, + 0x4014: 0x42a05620, 0x4015: 0x42ba3220, 0x4016: 0x42dbd420, 0x4017: 0x431e5420, + 0x4018: 0x42bf1620, 0x4019: 0x42c28820, 0x401a: 0x42d02e20, 0x401b: 0x42e70e20, + 0x401c: 0x432d0c20, 0x401d: 0x42a45220, 0x401e: 0x42a81e20, 0x401f: 0x42b8ca20, + 0x4020: 0x42cc2620, 0x4021: 0x42ce9c20, 0x4022: 0x42d15020, 0x4023: 0x42d9ca20, + 0x4024: 0x42e80c20, 0x4025: 0x42ebc420, 0x4026: 0x42fef220, 0x4027: 0x43119e20, + 0x4028: 0x4311c220, 0x4029: 0x43239820, 0x402a: 0x432dc420, 0x402b: 0x42a67e20, + 0x402c: 0x42dd7420, 0x402d: 0x42a83a20, 0x402e: 0x42e3a020, 0x402f: 0x42e93020, + 0x4030: 0x430bf420, 0x4031: 0x432d4620, 0x4032: 0x4338ae20, 0x4033: 0x433d3e20, + 0x4034: 0x42cf2e20, 0x4035: 0x42db9620, 0x4036: 0x4303d020, 0x4037: 0x42f59620, + 0x4038: 0x42f64020, 0x4039: 0x42f92420, 0x403a: 0x42e58020, 0x403b: 0x42e13220, + 0x403c: 0x4316b020, 0x403d: 0x429d8020, 0x403e: 0x43066c20, 0x403f: 0x42a47420, + // Block 0x101, offset 0x4040 + 0x4040: 0x42a40e20, 0x4041: 0x42bd4c20, 0x4042: 0x42c5a620, 0x4043: 0x42f9ac20, + 0x4044: 0x42b70a20, 0x4045: 0x42da3c20, 0x4046: 0x42cd6820, 0x4047: 0x431e7620, + 0x4048: 0x43109820, 0x4049: 0x432c9a20, 0x404a: 0x43131620, 0x404b: 0x42bda620, + 0x404c: 0x42a28020, 0x404d: 0x42ab8020, 0x404e: 0x43f41c20, 0x404f: 0x43f41e20, + 0x4050: 0x42b0b420, 0x4051: 0x43f42220, 0x4052: 0x42cce820, 0x4053: 0x43f42620, + 0x4054: 0x43f42820, 0x4055: 0x42a3bc20, 0x4056: 0x42e65420, 0x4057: 0x42ed9420, + 0x4058: 0x42f27820, 0x4059: 0x42f2bc20, 0x405a: 0x42f2ca20, 0x405b: 0x42f31e20, + 0x405c: 0x432eac20, 0x405d: 0x42f97c20, 0x405e: 0x42ff7a20, 0x405f: 0x43f43e20, + 0x4060: 0x430c2420, 0x4061: 0x43f44220, 0x4062: 0x4315f020, 0x4063: 0x43f44620, + 0x4064: 0x43f44820, 0x4065: 0x43207020, 0x4066: 0x4321fa20, 0x4067: 0x43f44e20, + 0x4068: 0x43f45020, 0x4069: 0x43f45220, 0x406a: 0x4331de20, 0x406b: 0x4331f820, + 0x406c: 0x43325020, 0x406d: 0x433b6820, 0x406e: 0x4321bc20, 0x406f: 0x432d6e20, + 0x4070: 0x429f5c20, 0x4071: 0x42a1ce20, 0x4072: 0x42a29a20, 0x4073: 0x42a59220, + 0x4074: 0x42a5c820, 0x4075: 0x42a6a220, 0x4076: 0x42ab3a20, 0x4077: 0x42ac0c20, + 0x4078: 0x42acd020, 0x4079: 0x42b08020, 0x407a: 0x42b15020, 0x407b: 0x42b8c820, + 0x407c: 0x42b8dc20, 0x407d: 0x42c12820, 0x407e: 0x42c2d020, 0x407f: 0x42c31c20, + // Block 0x102, offset 0x4080 + 0x4080: 0x42c3e420, 0x4081: 0x42ca9e20, 0x4082: 0x42cbc420, 0x4083: 0x42cd2220, + 0x4084: 0x42d10a20, 0x4085: 0x42daee20, 0x4086: 0x42dc3420, 0x4087: 0x42de4420, + 0x4088: 0x42e2dc20, 0x4089: 0x42e45620, 0x408a: 0x42e84420, 0x408b: 0x42f12220, + 0x408c: 0x42f27c20, 0x408d: 0x42f29220, 0x408e: 0x42f29020, 0x408f: 0x42f2a020, + 0x4090: 0x42f2ac20, 0x4091: 0x42f2ba20, 0x4092: 0x42f31a20, 0x4093: 0x42f31c20, + 0x4094: 0x42f48020, 0x4095: 0x42f50220, 0x4096: 0x42f78020, 0x4097: 0x42fbe820, + 0x4098: 0x42fc1220, 0x4099: 0x42fc8220, 0x409a: 0x42fee420, 0x409b: 0x43000a20, + 0x409c: 0x4303da20, 0x409d: 0x4304f220, 0x409e: 0x4304f220, 0x409f: 0x4308ae20, + 0x40a0: 0x43122020, 0x40a1: 0x43132c20, 0x40a2: 0x43160220, 0x40a3: 0x43167220, + 0x40a4: 0x4319a620, 0x40a5: 0x431a1020, 0x40a6: 0x431f6c20, 0x40a7: 0x43207020, + 0x40a8: 0x432dc620, 0x40a9: 0x432ffe20, 0x40aa: 0x43307620, 0x40ab: 0x42c0ea20, + 0x40ac: 0x4885dc20, 0x40ad: 0x43043020, + 0x40b0: 0x429c4c20, 0x40b1: 0x42a36a20, 0x40b2: 0x42a2d020, 0x40b3: 0x429f0020, + 0x40b4: 0x42a28a20, 0x40b5: 0x42a30020, 0x40b6: 0x42a58e20, 0x40b7: 0x42a5f420, + 0x40b8: 0x42ab3a20, 0x40b9: 0x42aaaa20, 0x40ba: 0x42ab3220, 0x40bb: 0x42abc420, + 0x40bc: 0x42b0b420, 0x40bd: 0x42b16620, 0x40be: 0x42b28820, 0x40bf: 0x42b2a820, + // Block 0x103, offset 0x40c0 + 0x40c0: 0x42b4c420, 0x40c1: 0x42b65020, 0x40c2: 0x42bda420, 0x40c3: 0x42bdb220, + 0x40c4: 0x42bed220, 0x40c5: 0x42bf5a20, 0x40c6: 0x42c1b020, 0x40c7: 0x42c29c20, + 0x40c8: 0x42c21020, 0x40c9: 0x42c31c20, 0x40ca: 0x42c2c020, 0x40cb: 0x42c3e420, + 0x40cc: 0x42c46820, 0x40cd: 0x42c78820, 0x40ce: 0x42c83820, 0x40cf: 0x42c8a420, + 0x40d0: 0x42caac20, 0x40d1: 0x42cce820, 0x40d2: 0x42ce2e20, 0x40d3: 0x42ce3620, + 0x40d4: 0x42ceac20, 0x40d5: 0x42d6f220, 0x40d6: 0x42d77420, 0x40d7: 0x42da8220, + 0x40d8: 0x42ddb620, 0x40d9: 0x42dd9620, 0x40da: 0x42de4420, 0x40db: 0x42e03c20, + 0x40dc: 0x42e2dc20, 0x40dd: 0x42ef4e20, 0x40de: 0x42e46a20, 0x40df: 0x42e55e20, + 0x40e0: 0x42e65420, 0x40e1: 0x42e8e220, 0x40e2: 0x42ea0c20, 0x40e3: 0x42ea7620, + 0x40e4: 0x42ec3a20, 0x40e5: 0x42ec3e20, 0x40e6: 0x42ed9420, 0x40e7: 0x42edb620, + 0x40e8: 0x42ede820, 0x40e9: 0x42ee9420, 0x40ea: 0x42ee8020, 0x40eb: 0x42f19820, + 0x40ec: 0x42f56220, 0x40ed: 0x42f78020, 0x40ee: 0x42f8f620, 0x40ef: 0x42fab620, + 0x40f0: 0x42fbe820, 0x40f1: 0x42fe7c20, 0x40f2: 0x43000a20, 0x40f3: 0x4306a420, + 0x40f4: 0x4307de20, 0x40f5: 0x430ef220, 0x40f6: 0x43128220, 0x40f7: 0x43130c20, + 0x40f8: 0x43132c20, 0x40f9: 0x43157e20, 0x40fa: 0x4315f020, 0x40fb: 0x43159620, + 0x40fc: 0x43160220, 0x40fd: 0x4315fc20, 0x40fe: 0x4315da20, 0x40ff: 0x43167220, + // Block 0x104, offset 0x4100 + 0x4100: 0x43171420, 0x4101: 0x431a1020, 0x4102: 0x431e7020, 0x4103: 0x4320e420, + 0x4104: 0x43233220, 0x4105: 0x4324ec20, 0x4106: 0x432cf820, 0x4107: 0x432dc620, + 0x4108: 0x432eac20, 0x4109: 0x432fb620, 0x410a: 0x432ffe20, 0x410b: 0x43301620, + 0x410c: 0x43307620, 0x410d: 0x43362420, 0x410e: 0x433f3820, 0x410f: 0x48509420, + 0x4110: 0x48508820, 0x4111: 0x4867aa20, 0x4112: 0x44773a20, 0x4113: 0x44803020, + 0x4114: 0x44807220, 0x4115: 0x48a49220, 0x4116: 0x48b9a020, 0x4117: 0x48fda620, + 0x4118: 0x433e8620, 0x4119: 0x433f1c20, + // Block 0x105, offset 0x4140 + 0x4140: 0xf0000404, 0x4141: 0xf0000404, 0x4142: 0xf0000404, 0x4143: 0xe0000b99, + 0x4144: 0xe0000b9d, 0x4145: 0xe0000f83, 0x4146: 0xf0000404, + 0x4153: 0xf0000404, + 0x4154: 0xf0000404, 0x4155: 0xf0000404, 0x4156: 0xf0000404, 0x4157: 0xf0000404, + 0x415d: 0xe000150b, 0x415e: 0xa1a09602, 0x415f: 0xe0001514, + 0x4160: 0x0038ae85, 0x4161: 0x00389085, 0x4162: 0x00389685, 0x4163: 0x00389885, + 0x4164: 0x0038a485, 0x4165: 0x0038a685, 0x4166: 0x0038a885, 0x4167: 0x0038b685, + 0x4168: 0x0038ba85, 0x4169: 0x00093885, 0x416a: 0xe0001542, 0x416b: 0xe000153f, + 0x416c: 0xe000154c, 0x416d: 0xe0001548, 0x416e: 0xe00014e1, 0x416f: 0xe00014e4, + 0x4170: 0xe00014e7, 0x4171: 0xe00014ea, 0x4172: 0xe00014f0, 0x4173: 0xe00014f3, + 0x4174: 0xe00014f6, 0x4175: 0xe00014fc, 0x4176: 0xe0001505, + 0x4178: 0xe0001508, 0x4179: 0xe000150e, 0x417a: 0xe000151b, 0x417b: 0xe0001518, + 0x417c: 0xe0001521, 0x417e: 0xe0001524, + // Block 0x106, offset 0x4180 + 0x4180: 0xe0001527, 0x4181: 0xe000152a, 0x4183: 0xe0001530, + 0x4184: 0xe000152d, 0x4186: 0xe0001536, 0x4187: 0xe0001539, + 0x4188: 0xe000153c, 0x4189: 0xe0001545, 0x418a: 0xe0001550, 0x418b: 0xe00014f9, + 0x418c: 0xe00014ed, 0x418d: 0xe000151e, 0x418e: 0xe0001533, 0x418f: 0xf0000404, + 0x4190: 0x0039249a, 0x4191: 0x00392499, 0x4192: 0x00393e9a, 0x4193: 0x00393e99, + 0x4194: 0x00393e97, 0x4195: 0x00393e98, 0x4196: 0x0039409a, 0x4197: 0x00394099, + 0x4198: 0x00394097, 0x4199: 0x00394098, 0x419a: 0x0039429a, 0x419b: 0x00394299, + 0x419c: 0x00394297, 0x419d: 0x00394298, 0x419e: 0x00395c9a, 0x419f: 0x00395c99, + 0x41a0: 0x00395c97, 0x41a1: 0x00395c98, 0x41a2: 0x0039629a, 0x41a3: 0x00396299, + 0x41a4: 0x00396297, 0x41a5: 0x00396298, 0x41a6: 0x00395a9a, 0x41a7: 0x00395a99, + 0x41a8: 0x00395a97, 0x41a9: 0x00395a98, 0x41aa: 0x003a049a, 0x41ab: 0x003a0499, + 0x41ac: 0x003a0497, 0x41ad: 0x003a0498, 0x41ae: 0x003a0a9a, 0x41af: 0x003a0a99, + 0x41b0: 0x003a0a97, 0x41b1: 0x003a0a98, 0x41b2: 0x0039689a, 0x41b3: 0x00396899, + 0x41b4: 0x00396897, 0x41b5: 0x00396898, 0x41b6: 0x0039669a, 0x41b7: 0x00396699, + 0x41b8: 0x00396697, 0x41b9: 0x00396698, 0x41ba: 0x00396a9a, 0x41bb: 0x00396a99, + 0x41bc: 0x00396a97, 0x41bd: 0x00396a98, 0x41be: 0x00396e9a, 0x41bf: 0x00396e99, + // Block 0x107, offset 0x41c0 + 0x41c0: 0x00396e97, 0x41c1: 0x00396e98, 0x41c2: 0x0039969a, 0x41c3: 0x00399699, + 0x41c4: 0x0039949a, 0x41c5: 0x00399499, 0x41c6: 0x0039989a, 0x41c7: 0x00399899, + 0x41c8: 0x00398c9a, 0x41c9: 0x00398c99, 0x41ca: 0x0039b69a, 0x41cb: 0x0039b699, + 0x41cc: 0x0039a89a, 0x41cd: 0x0039a899, 0x41ce: 0x003a1c9a, 0x41cf: 0x003a1c99, + 0x41d0: 0x003a1c97, 0x41d1: 0x003a1c98, 0x41d2: 0x003a2a9a, 0x41d3: 0x003a2a99, + 0x41d4: 0x003a2a97, 0x41d5: 0x003a2a98, 0x41d6: 0x003a329a, 0x41d7: 0x003a3299, + 0x41d8: 0x003a3297, 0x41d9: 0x003a3298, 0x41da: 0x003a2e9a, 0x41db: 0x003a2e99, + 0x41dc: 0x003a2e97, 0x41dd: 0x003a2e98, 0x41de: 0x003a589a, 0x41df: 0x003a5899, + 0x41e0: 0x003a5a9a, 0x41e1: 0x003a5a99, 0x41e2: 0x003a5a97, 0x41e3: 0x003a5a98, + 0x41e4: 0xf0001a1a, 0x41e5: 0xf0001919, 0x41e6: 0x003a6c9a, 0x41e7: 0x003a6c99, + 0x41e8: 0x003a6c97, 0x41e9: 0x003a6c98, 0x41ea: 0x003a6a9a, 0x41eb: 0x003a6a99, + 0x41ec: 0x003a6a97, 0x41ed: 0x003a6a98, 0x41ee: 0x003aaa9a, 0x41ef: 0x003aaa99, + 0x41f0: 0xf0001a1a, 0x41f1: 0xf0001919, 0x41f2: 0x40071820, 0x41f3: 0x40071a20, + 0x41f4: 0x40071c20, 0x41f5: 0x40071e20, 0x41f6: 0x40072020, 0x41f7: 0x40072220, + 0x41f8: 0x40072420, 0x41f9: 0x40072620, 0x41fa: 0x40072820, 0x41fb: 0x40072a20, + 0x41fc: 0x40072c20, 0x41fd: 0x40072e20, 0x41fe: 0x40073020, 0x41ff: 0x40073220, + // Block 0x108, offset 0x4200 + 0x4200: 0x40073420, 0x4201: 0x40073620, + 0x4213: 0x003a269a, + 0x4214: 0x003a2699, 0x4215: 0x003a2697, 0x4216: 0x003a2698, 0x4217: 0x003a7c9a, + 0x4218: 0x003a7c99, 0x4219: 0x003a7a9a, 0x421a: 0x003a7a99, 0x421b: 0x003a7e9a, + 0x421c: 0x003a7e99, 0x421d: 0xf0001a1a, 0x421e: 0x003a849a, 0x421f: 0x003a8499, + 0x4220: 0x003a789a, 0x4221: 0x003a7899, 0x4222: 0x003a809a, 0x4223: 0x003a8099, + 0x4224: 0x003a989a, 0x4225: 0x003a9899, 0x4226: 0x003a9897, 0x4227: 0x003a9898, + 0x4228: 0x003a8e97, 0x4229: 0x003a8e98, 0x422a: 0xe0001559, 0x422b: 0xe0001556, + 0x422c: 0xe0001589, 0x422d: 0xe0001586, 0x422e: 0xe000158f, 0x422f: 0xe000158c, + 0x4230: 0xe000159b, 0x4231: 0xe0001598, 0x4232: 0xe0001595, 0x4233: 0xe0001592, + 0x4234: 0xe00015a1, 0x4235: 0xe000159e, 0x4236: 0xe00015bf, 0x4237: 0xe00015bc, + 0x4238: 0xe00015b9, 0x4239: 0xe00015ad, 0x423a: 0xe00015a7, 0x423b: 0xe00015a4, + 0x423c: 0x003a929a, 0x423d: 0x003a9299, 0x423e: 0x003a9297, 0x423f: 0x003a9298, + // Block 0x109, offset 0x4240 + 0x4240: 0xe000155f, 0x4241: 0xe0001565, 0x4242: 0xe000157a, 0x4243: 0xe00015b0, + 0x4244: 0xe00015b6, 0x4245: 0xf0001a1a, 0x4246: 0xf0001a1a, 0x4247: 0xf0001a1a, + 0x4248: 0xf0001a1a, 0x4249: 0xf0001a1a, 0x424a: 0xf0001a1a, 0x424b: 0xf0001a1a, + 0x424c: 0xf0001a1a, 0x424d: 0xf0001a1a, 0x424e: 0xf0001a1a, 0x424f: 0xf0001a1a, + 0x4250: 0xf0001a1a, 0x4251: 0xf0001a1a, 0x4252: 0xf0001a1a, 0x4253: 0xf0001a1a, + 0x4254: 0xf0001a1a, 0x4255: 0xf0001a1a, 0x4256: 0xf0001a1a, 0x4257: 0xf0001a1a, + 0x4258: 0xf0001a1a, 0x4259: 0xf0001a1a, 0x425a: 0xf0001a1a, 0x425b: 0xf0001a1a, + 0x425c: 0xf0001a1a, 0x425d: 0xf0001a1a, 0x425e: 0xf0001a1a, 0x425f: 0xf0001a1a, + 0x4260: 0xf0001a1a, 0x4261: 0xf0001a1a, 0x4262: 0xf0001a1a, 0x4263: 0xf0001a1a, + 0x4264: 0xf0001a1a, 0x4265: 0xf0001a1a, 0x4266: 0xf0001a1a, 0x4267: 0xf0001a1a, + 0x4268: 0xf0001a1a, 0x4269: 0xf0001a1a, 0x426a: 0xf0001a1a, 0x426b: 0xf0001a1a, + 0x426c: 0xf0001a1a, 0x426d: 0xf0001a1a, 0x426e: 0xf0001a1a, 0x426f: 0xf0001a1a, + 0x4270: 0xf0001a1a, 0x4271: 0xf0001a1a, 0x4272: 0xf0001a1a, 0x4273: 0xf0001a1a, + 0x4274: 0xf0001a1a, 0x4275: 0xf0001a1a, 0x4276: 0xf0001a1a, 0x4277: 0xf0001a1a, + 0x4278: 0xf0001a1a, 0x4279: 0xf0001a1a, 0x427a: 0xf0001a1a, 0x427b: 0xf0001a1a, + 0x427c: 0xf0001a1a, 0x427d: 0xf0001a1a, 0x427e: 0xf0001a1a, 0x427f: 0xf0001a1a, + // Block 0x10a, offset 0x4280 + 0x4280: 0xf0001a1a, 0x4281: 0xf0001a1a, 0x4282: 0xf0001a1a, 0x4283: 0xf0001a1a, + 0x4284: 0xf0001a1a, 0x4285: 0xf0001a1a, 0x4286: 0xf0001a1a, 0x4287: 0xf0001a1a, + 0x4288: 0xf0001a1a, 0x4289: 0xf0001a1a, 0x428a: 0xf0001a1a, 0x428b: 0xf0001a1a, + 0x428c: 0xf0001a1a, 0x428d: 0xf0001a1a, 0x428e: 0xf0001a1a, 0x428f: 0xf0001a1a, + 0x4290: 0xf0001a1a, 0x4291: 0xf0001a1a, 0x4292: 0xf0001a1a, 0x4293: 0xf0001a1a, + 0x4294: 0xf0001a1a, 0x4295: 0xf0001a1a, 0x4296: 0xf0001a1a, 0x4297: 0xf0001a1a, + 0x4298: 0xf0001a1a, 0x4299: 0xf0001a1a, 0x429a: 0xf0001a1a, 0x429b: 0xf0001a1a, + 0x429c: 0xf0001a1a, 0x429d: 0xf0001a1a, 0x429e: 0xe0000003, 0x429f: 0xe0000006, + 0x42a0: 0xe0000009, 0x42a1: 0xe000000c, 0x42a2: 0xe000000f, 0x42a3: 0xe0000012, + 0x42a4: 0xe000156b, 0x42a5: 0xe000156e, 0x42a6: 0xe0001577, 0x42a7: 0xe000157d, + 0x42a8: 0xe00015aa, 0x42a9: 0xe00015b3, 0x42aa: 0xf0001919, 0x42ab: 0xf0001919, + 0x42ac: 0xf0001919, 0x42ad: 0xf0001919, 0x42ae: 0xf0001919, 0x42af: 0xf0001919, + 0x42b0: 0xf0001919, 0x42b1: 0xf0001919, 0x42b2: 0xf0001919, 0x42b3: 0xf0001919, + 0x42b4: 0xf0001919, 0x42b5: 0xf0001919, 0x42b6: 0xf0001919, 0x42b7: 0xf0001919, + 0x42b8: 0xf0001919, 0x42b9: 0xf0001919, 0x42ba: 0xf0001919, 0x42bb: 0xf0001919, + 0x42bc: 0xf0001919, 0x42bd: 0xf0001919, 0x42be: 0xf0001919, 0x42bf: 0xf0001919, + // Block 0x10b, offset 0x42c0 + 0x42c0: 0xf0001919, 0x42c1: 0xf0001919, 0x42c2: 0xf0001919, 0x42c3: 0xf0001919, + 0x42c4: 0xf0001919, 0x42c5: 0xf0001919, 0x42c6: 0xf0001919, 0x42c7: 0xf0001919, + 0x42c8: 0xf0001919, 0x42c9: 0xf0001919, 0x42ca: 0xf0001919, 0x42cb: 0xf0001919, + 0x42cc: 0xf0001919, 0x42cd: 0xf0001919, 0x42ce: 0xf0001919, 0x42cf: 0xf0001919, + 0x42d0: 0xf0001919, 0x42d1: 0xf0001919, 0x42d2: 0xf0001919, 0x42d3: 0xf0001919, + 0x42d4: 0xf0001919, 0x42d5: 0xf0001919, 0x42d6: 0xf0001919, 0x42d7: 0xe000155c, + 0x42d8: 0xe0001562, 0x42d9: 0xe0001568, 0x42da: 0xe0001571, 0x42db: 0xe0001580, + 0x42dc: 0xf0001717, 0x42dd: 0xf0001717, 0x42de: 0xf0001717, 0x42df: 0xf0001717, + 0x42e0: 0xf0001717, 0x42e1: 0xf0001717, 0x42e2: 0xf0001717, 0x42e3: 0xf0001717, + 0x42e4: 0xf0001717, 0x42e5: 0xf0001717, 0x42e6: 0xf0001717, 0x42e7: 0xf0001717, + 0x42e8: 0xf0001717, 0x42e9: 0xf0001717, 0x42ea: 0xf0001717, 0x42eb: 0xf0001717, + 0x42ec: 0xf0001717, 0x42ed: 0xf0001717, 0x42ee: 0xf0001717, 0x42ef: 0xf0001717, + 0x42f0: 0xf0001717, 0x42f1: 0xf0001717, 0x42f2: 0xf0001717, 0x42f3: 0xf0001717, + 0x42f4: 0xf0001717, 0x42f5: 0xf0001717, 0x42f6: 0xf0001717, 0x42f7: 0xf0001717, + 0x42f8: 0xf0001717, 0x42f9: 0xf0001717, 0x42fa: 0xf0001717, 0x42fb: 0xf0001717, + 0x42fc: 0xf0001717, 0x42fd: 0xf0001717, 0x42fe: 0xf0001717, 0x42ff: 0xf0001717, + // Block 0x10c, offset 0x4300 + 0x4300: 0xf0001717, 0x4301: 0xf0001717, 0x4302: 0xf0001717, 0x4303: 0xf0001717, + 0x4304: 0xf0001717, 0x4305: 0xf0001717, 0x4306: 0xf0001717, 0x4307: 0xf0001717, + 0x4308: 0xf0001717, 0x4309: 0xf0001717, 0x430a: 0xf0001717, 0x430b: 0xf0001717, + 0x430c: 0xf0001717, 0x430d: 0xf0001717, 0x430e: 0xf0001717, 0x430f: 0xf0001717, + 0x4310: 0xf0001717, 0x4311: 0xf0001717, 0x4312: 0xf0001717, 0x4313: 0xf0001717, + 0x4314: 0xf0001717, 0x4315: 0xf0001717, 0x4316: 0xf0001717, 0x4317: 0xf0001717, + 0x4318: 0xf0001717, 0x4319: 0xf0001717, 0x431a: 0xf0001717, 0x431b: 0xf0001717, + 0x431c: 0xf0001717, 0x431d: 0xf0001717, 0x431e: 0xf0001717, 0x431f: 0xe0001574, + 0x4320: 0xe0001583, 0x4321: 0xf0001818, 0x4322: 0xf0001818, 0x4323: 0xf0001818, + 0x4324: 0xf0001818, 0x4325: 0xf0001818, 0x4326: 0xf0001818, 0x4327: 0xf0001818, + 0x4328: 0xf0001818, 0x4329: 0xf0001818, 0x432a: 0xf0001818, 0x432b: 0xf0001818, + 0x432c: 0xf0001818, 0x432d: 0xf0001818, 0x432e: 0xf0001818, 0x432f: 0xf0001818, + 0x4330: 0xf0001818, 0x4331: 0xf0001818, 0x4332: 0xf0001818, 0x4333: 0xf0001818, + 0x4334: 0xf0001818, 0x4335: 0xf0001a1a, 0x4336: 0xf0001a1a, 0x4337: 0xf0001a1a, + 0x4338: 0xf0001a1a, 0x4339: 0xf0001a1a, 0x433a: 0xf0001a1a, 0x433b: 0xf0001a1a, + 0x433c: 0xf0001a1a, 0x433d: 0xf0001a1a, 0x433e: 0xf0001a1a, 0x433f: 0xf0001a1a, + // Block 0x10d, offset 0x4340 + 0x4340: 0xf0001a1a, 0x4341: 0xf0001a1a, 0x4342: 0xf0001a1a, 0x4343: 0xf0001a1a, + 0x4344: 0xf0001a1a, 0x4345: 0xf0001a1a, 0x4346: 0xf0001a1a, 0x4347: 0xf0001a1a, + 0x4348: 0xf0001a1a, 0x4349: 0xf0001a1a, 0x434a: 0xf0001a1a, 0x434b: 0xf0001a1a, + 0x434c: 0xf0001a1a, 0x434d: 0xf0001a1a, 0x434e: 0xf0001a1a, 0x434f: 0xf0001a1a, + 0x4350: 0xf0001a1a, 0x4351: 0xf0001919, 0x4352: 0xf0001919, 0x4353: 0xf0001919, + 0x4354: 0xf0001919, 0x4355: 0xf0001919, 0x4356: 0xf0001919, 0x4357: 0xf0001919, + 0x4358: 0xf0001919, 0x4359: 0xf0001919, 0x435a: 0xf0001919, 0x435b: 0xf0001919, + 0x435c: 0xf0001919, 0x435d: 0xf0001919, 0x435e: 0xf0001919, 0x435f: 0xf0001919, + 0x4360: 0xf0001919, 0x4361: 0xf0001919, 0x4362: 0xf0001919, 0x4363: 0xf0001919, + 0x4364: 0xf0001919, 0x4365: 0xf0001919, 0x4366: 0xf0001919, 0x4367: 0xf0001919, + 0x4368: 0xf0001919, 0x4369: 0xf0001919, 0x436a: 0xf0001919, 0x436b: 0xf0001919, + 0x436c: 0xf0001919, 0x436d: 0xf0001717, 0x436e: 0xf0001717, 0x436f: 0xf0001717, + 0x4370: 0xf0001717, 0x4371: 0xf0001717, 0x4372: 0xf0001717, 0x4373: 0xf0001717, + 0x4374: 0xf0001818, 0x4375: 0xf0001818, 0x4376: 0xf0001818, 0x4377: 0xf0001818, + 0x4378: 0xf0001818, 0x4379: 0xf0001818, 0x437a: 0xf0001818, 0x437b: 0xf0001818, + 0x437c: 0xf0001919, 0x437d: 0xf0001a1a, 0x437e: 0x4004c020, 0x437f: 0x4004c220, + // Block 0x10e, offset 0x4380 + 0x4390: 0xe00015d4, 0x4391: 0xe00015e4, 0x4392: 0xe00015e0, 0x4393: 0xe00015e8, + 0x4394: 0xe00015ec, 0x4395: 0xe00015f8, 0x4396: 0xe00015fc, 0x4397: 0xe0001600, + 0x4398: 0xe0001621, 0x4399: 0xe000161d, 0x439a: 0xe0001635, 0x439b: 0xe0001631, + 0x439c: 0xe0001646, 0x439d: 0xe000163e, 0x439e: 0xe0001642, 0x439f: 0xe000165a, + 0x43a0: 0xe0001656, 0x43a1: 0xe0001652, 0x43a2: 0xe0001662, 0x43a3: 0xe000165e, + 0x43a4: 0xe000168a, 0x43a5: 0xe0001686, 0x43a6: 0xe00016b6, 0x43a7: 0xe000166e, + 0x43a8: 0xe000166a, 0x43a9: 0xe0001666, 0x43aa: 0xe000167a, 0x43ab: 0xe0001676, + 0x43ac: 0xe0001682, 0x43ad: 0xe000167e, 0x43ae: 0xe00016ba, 0x43af: 0xe00016c6, + 0x43b0: 0xe00016c2, 0x43b1: 0xe00016ce, 0x43b2: 0xe00016ca, 0x43b3: 0xe00016d2, + 0x43b4: 0xe00016d6, 0x43b5: 0xe00016de, 0x43b6: 0xe00016eb, 0x43b7: 0xe00016e7, + 0x43b8: 0xe00016ef, 0x43b9: 0xe00016f7, 0x43ba: 0xe00016ff, 0x43bb: 0xe00016fb, + 0x43bc: 0xe0001707, 0x43bd: 0xe0001703, 0x43be: 0xe0001717, 0x43bf: 0xe000171b, + // Block 0x10f, offset 0x43c0 + 0x43c0: 0xe0001759, 0x43c1: 0xe0001761, 0x43c2: 0xe000175d, 0x43c3: 0xe0001741, + 0x43c4: 0xe0001745, 0x43c5: 0xe0001769, 0x43c6: 0xe0001765, 0x43c7: 0xe0001771, + 0x43c8: 0xe000176d, 0x43c9: 0xe000178c, 0x43ca: 0xe0001790, 0x43cb: 0xe0001799, + 0x43cc: 0xe000177c, 0x43cd: 0xe0001784, 0x43ce: 0xe000179d, 0x43cf: 0xe00017a1, + 0x43d2: 0xe0001780, 0x43d3: 0xe00017d9, + 0x43d4: 0xe00017dd, 0x43d5: 0xe00017c5, 0x43d6: 0xe00017c9, 0x43d7: 0xe00017b9, + 0x43d8: 0xe00017b5, 0x43d9: 0xe00017bd, 0x43da: 0xe00017d5, 0x43db: 0xe00017d1, + 0x43dc: 0xe00017f8, 0x43dd: 0xe00017f4, 0x43de: 0xe00015d0, 0x43df: 0xe00015dc, + 0x43e0: 0xe00015d8, 0x43e1: 0xe00015f4, 0x43e2: 0xe00015f0, 0x43e3: 0xe0001608, + 0x43e4: 0xe0001604, 0x43e5: 0xe0001629, 0x43e6: 0xe000160c, 0x43e7: 0xe0001625, + 0x43e8: 0xe000164a, 0x43e9: 0xe000168e, 0x43ea: 0xe0001672, 0x43eb: 0xe00016be, + 0x43ec: 0xe0001751, 0x43ed: 0xe0001775, 0x43ee: 0xe00017f0, 0x43ef: 0xe00017ec, + 0x43f0: 0xe00017fc, 0x43f1: 0xe00017a9, 0x43f2: 0xe000171f, 0x43f3: 0xe00017cd, + 0x43f4: 0xe0001713, 0x43f5: 0xe0001755, 0x43f6: 0xe00016f3, 0x43f7: 0xe000172b, + 0x43f8: 0xe00017ad, 0x43f9: 0xe00017a5, 0x43fa: 0xe0001749, 0x43fb: 0xe0001727, + 0x43fc: 0xe000174d, 0x43fd: 0xe00017b1, 0x43fe: 0xe0001610, 0x43ff: 0xe000162d, + // Block 0x110, offset 0x4400 + 0x4400: 0xe0001788, 0x4401: 0xe000170b, 0x4402: 0xe00015cc, 0x4403: 0xe0001723, + 0x4404: 0xe00016da, 0x4405: 0xe00016b2, 0x4406: 0xe000164e, 0x4407: 0xe00017c1, + 0x4430: 0xe00016ae, 0x4431: 0xe000170f, 0x4432: 0xe00015c7, 0x4433: 0xe00015c2, + 0x4434: 0xe0001794, 0x4435: 0xe0001692, 0x4436: 0xe0001639, 0x4437: 0xe00016e2, + 0x4438: 0xe00017e7, 0x4439: 0xe0001697, 0x443a: 0xe000169b, 0x443b: 0xe0001614, + 0x443c: 0x40282e20, 0x443d: 0x40071620, + // Block 0x111, offset 0x4440 + 0x4440: 0xa0000000, 0x4441: 0xa0000000, 0x4442: 0xa0000000, 0x4443: 0xa0000000, + 0x4444: 0xa0000000, 0x4445: 0xa0000000, 0x4446: 0xa0000000, 0x4447: 0xa0000000, + 0x4448: 0xa0000000, 0x4449: 0xa0000000, 0x444a: 0xa0000000, 0x444b: 0xa0000000, + 0x444c: 0xa0000000, 0x444d: 0xa0000000, 0x444e: 0xa0000000, 0x444f: 0xa0000000, + 0x4450: 0x00024096, 0x4451: 0x00025c96, 0x4452: 0x00030496, 0x4453: 0x00026c96, + 0x4454: 0x00026296, 0x4455: 0x0002ba96, 0x4456: 0x0002c496, 0x4457: 0x0004b496, + 0x4458: 0x0004b696, 0x4459: 0xf0001616, + 0x4460: 0xae608202, 0x4461: 0xae600000, 0x4462: 0xae608102, 0x4463: 0xae600000, + 0x4464: 0xae600000, 0x4465: 0xae600000, 0x4466: 0xae600000, + 0x4470: 0xf0001f16, 0x4471: 0x00022c96, 0x4472: 0x00022a96, 0x4473: 0x00021696, + 0x4474: 0x00021696, 0x4475: 0x0003f496, 0x4476: 0x0003f696, 0x4477: 0x0003fc96, + 0x4478: 0x0003fe96, 0x4479: 0x0004b096, 0x447a: 0x0004b296, 0x447b: 0x0004ac96, + 0x447c: 0x0004ae96, 0x447d: 0x0004a096, 0x447e: 0x0004a296, 0x447f: 0x00049c96, + // Block 0x112, offset 0x4480 + 0x4480: 0x00049e96, 0x4481: 0x0004a496, 0x4482: 0x0004a696, 0x4483: 0x0004a896, + 0x4484: 0x0004aa96, 0x4485: 0x40025e20, 0x4486: 0x40026020, 0x4487: 0x0003f896, + 0x4488: 0x0003fa96, 0x4489: 0x00021484, 0x448a: 0x00021484, 0x448b: 0x00021484, + 0x448c: 0x00021484, 0x448d: 0x00021684, 0x448e: 0x00021684, 0x448f: 0x00021684, + 0x4490: 0x0002408f, 0x4491: 0x00025c8f, 0x4492: 0x0002e48f, + 0x4494: 0x0002628f, 0x4495: 0x00026c8f, 0x4496: 0x0002c48f, 0x4497: 0x0002ba8f, + 0x4498: 0x00022c8f, 0x4499: 0x0003f48f, 0x449a: 0x0003f68f, 0x449b: 0x0003fc8f, + 0x449c: 0x0003fe8f, 0x449d: 0x0004b08f, 0x449e: 0x0004b28f, 0x449f: 0x0004ea8f, + 0x44a0: 0x0004e68f, 0x44a1: 0x0004d88f, 0x44a2: 0x0009388f, 0x44a3: 0x00021a8f, + 0x44a4: 0x0009408f, 0x44a5: 0x0009448f, 0x44a6: 0x0009428f, + 0x44a8: 0x0004e48f, 0x44a9: 0x0027de8f, 0x44aa: 0x0004ec8f, 0x44ab: 0x0004d68f, + 0x44b0: 0xa000a21a, 0x44b1: 0xa000a218, 0x44b2: 0xa000a51a, 0x44b3: 0xa0000000, + 0x44b4: 0xa000a91a, 0x44b6: 0xa000ad1a, 0x44b7: 0xa000ad18, + 0x44b8: 0xa000b21a, 0x44b9: 0xa000b218, 0x44ba: 0xa000b61a, 0x44bb: 0xa000b618, + 0x44bc: 0xa000ba1a, 0x44bd: 0xa000ba18, 0x44be: 0xa000bc1a, 0x44bf: 0xa000bc18, + // Block 0x113, offset 0x44c0 + 0x44c0: 0x00391c9a, 0x44c1: 0x00391e9a, 0x44c2: 0x00391e99, 0x44c3: 0x0039209a, + 0x44c4: 0x00392099, 0x44c5: 0x0039269a, 0x44c6: 0x00392699, 0x44c7: 0x0039289a, + 0x44c8: 0x00392899, 0x44c9: 0x0039309a, 0x44ca: 0x00393099, 0x44cb: 0x00393097, + 0x44cc: 0x00393098, 0x44cd: 0x0039389a, 0x44ce: 0x00393899, 0x44cf: 0x00393c9a, + 0x44d0: 0x00393c99, 0x44d1: 0x00393c97, 0x44d2: 0x00393c98, 0x44d3: 0x0039549a, + 0x44d4: 0x00395499, 0x44d5: 0x0039569a, 0x44d6: 0x00395699, 0x44d7: 0x00395697, + 0x44d8: 0x00395698, 0x44d9: 0x0039589a, 0x44da: 0x00395899, 0x44db: 0x00395897, + 0x44dc: 0x00395898, 0x44dd: 0x0039649a, 0x44de: 0x00396499, 0x44df: 0x00396497, + 0x44e0: 0x00396498, 0x44e1: 0x0039729a, 0x44e2: 0x00397299, 0x44e3: 0x00397297, + 0x44e4: 0x00397298, 0x44e5: 0x0039749a, 0x44e6: 0x00397499, 0x44e7: 0x00397497, + 0x44e8: 0x00397498, 0x44e9: 0x0039889a, 0x44ea: 0x00398899, 0x44eb: 0x00398a9a, + 0x44ec: 0x00398a99, 0x44ed: 0x0039a49a, 0x44ee: 0x0039a499, 0x44ef: 0x0039a69a, + 0x44f0: 0x0039a699, 0x44f1: 0x0039c69a, 0x44f2: 0x0039c699, 0x44f3: 0x0039c697, + 0x44f4: 0x0039c698, 0x44f5: 0x0039c89a, 0x44f6: 0x0039c899, 0x44f7: 0x0039c897, + 0x44f8: 0x0039c898, 0x44f9: 0x0039dc9a, 0x44fa: 0x0039dc99, 0x44fb: 0x0039dc97, + 0x44fc: 0x0039dc98, 0x44fd: 0x0039de9a, 0x44fe: 0x0039de99, 0x44ff: 0x0039de97, + // Block 0x114, offset 0x4500 + 0x4500: 0x0039de98, 0x4501: 0x0039e69a, 0x4502: 0x0039e699, 0x4503: 0x0039e697, + 0x4504: 0x0039e698, 0x4505: 0x0039e89a, 0x4506: 0x0039e899, 0x4507: 0x0039e897, + 0x4508: 0x0039e898, 0x4509: 0x0039ee9a, 0x450a: 0x0039ee99, 0x450b: 0x0039ee97, + 0x450c: 0x0039ee98, 0x450d: 0x0039f09a, 0x450e: 0x0039f099, 0x450f: 0x0039f097, + 0x4510: 0x0039f098, 0x4511: 0x0039fc9a, 0x4512: 0x0039fc99, 0x4513: 0x0039fc97, + 0x4514: 0x0039fc98, 0x4515: 0x003a129a, 0x4516: 0x003a1299, 0x4517: 0x003a1297, + 0x4518: 0x003a1298, 0x4519: 0x003a1a9a, 0x451a: 0x003a1a99, 0x451b: 0x003a1a97, + 0x451c: 0x003a1a98, 0x451d: 0x003a409a, 0x451e: 0x003a4099, 0x451f: 0x003a4097, + 0x4520: 0x003a4098, 0x4521: 0x003a4e9a, 0x4522: 0x003a4e99, 0x4523: 0x003a4e97, + 0x4524: 0x003a4e98, 0x4525: 0x003a569a, 0x4526: 0x003a5699, 0x4527: 0x003a5697, + 0x4528: 0x003a5698, 0x4529: 0x003a689a, 0x452a: 0x003a6899, 0x452b: 0x003a6897, + 0x452c: 0x003a6898, 0x452d: 0x003a749a, 0x452e: 0x003a7499, 0x452f: 0x003a8e9a, + 0x4530: 0x003a8e99, 0x4531: 0x003a909a, 0x4532: 0x003a9099, 0x4533: 0x003a9097, + 0x4534: 0x003a9098, 0x4535: 0xe0001732, 0x4536: 0xe000172f, 0x4537: 0xe0001738, + 0x4538: 0xe0001735, 0x4539: 0xe000173e, 0x453a: 0xe000173b, 0x453b: 0xf0001a1a, + 0x453c: 0xf0001919, 0x453f: 0xa0000000, + // Block 0x115, offset 0x4540 + 0x4541: 0x0002ba83, 0x4542: 0x0003e083, 0x4543: 0x0004ea83, + 0x4544: 0x0027de83, 0x4545: 0x0004ec83, 0x4546: 0x0004e683, 0x4547: 0x0003d283, + 0x4548: 0x0003f483, 0x4549: 0x0003f683, 0x454a: 0x0004d883, 0x454b: 0x00093883, + 0x454c: 0x00024083, 0x454d: 0x00021a83, 0x454e: 0x0002e483, 0x454f: 0x0004e283, + 0x4550: 0x0029cc83, 0x4551: 0x0029ce83, 0x4552: 0x0029d083, 0x4553: 0x0029d283, + 0x4554: 0x0029d483, 0x4555: 0x0029d683, 0x4556: 0x0029d883, 0x4557: 0x0029da83, + 0x4558: 0x0029dc83, 0x4559: 0x0029de83, 0x455a: 0x00026c83, 0x455b: 0x00026283, + 0x455c: 0x00094083, 0x455d: 0x00094283, 0x455e: 0x00094483, 0x455f: 0x0002c483, + 0x4560: 0x0004d683, 0x4561: 0x002bde89, 0x4562: 0x002c0a89, 0x4563: 0x002c3a89, + 0x4564: 0x002c6289, 0x4565: 0x002c9889, 0x4566: 0x002d0889, 0x4567: 0x002d2289, + 0x4568: 0x002d6889, 0x4569: 0x002d9a89, 0x456a: 0x002dcc89, 0x456b: 0x002dfe89, + 0x456c: 0x002e2289, 0x456d: 0x002e8289, 0x456e: 0x002e9e89, 0x456f: 0x002ee289, + 0x4570: 0x002f2c89, 0x4571: 0x002f5689, 0x4572: 0x002f7a89, 0x4573: 0x002fe689, + 0x4574: 0x00302c89, 0x4575: 0x00306c89, 0x4576: 0x0030be89, 0x4577: 0x0030e289, + 0x4578: 0x0030f689, 0x4579: 0x00310089, 0x457a: 0x00312a89, 0x457b: 0x0003f883, + 0x457c: 0x0004e483, 0x457d: 0x0003fa83, 0x457e: 0x00062483, 0x457f: 0x00021683, + // Block 0x116, offset 0x4580 + 0x4580: 0x00061e83, 0x4581: 0x002bde83, 0x4582: 0x002c0a83, 0x4583: 0x002c3a83, + 0x4584: 0x002c6283, 0x4585: 0x002c9883, 0x4586: 0x002d0883, 0x4587: 0x002d2283, + 0x4588: 0x002d6883, 0x4589: 0x002d9a83, 0x458a: 0x002dcc83, 0x458b: 0x002dfe83, + 0x458c: 0x002e2283, 0x458d: 0x002e8283, 0x458e: 0x002e9e83, 0x458f: 0x002ee283, + 0x4590: 0x002f2c83, 0x4591: 0x002f5683, 0x4592: 0x002f7a83, 0x4593: 0x002fe683, + 0x4594: 0x00302c83, 0x4595: 0x00306c83, 0x4596: 0x0030be83, 0x4597: 0x0030e283, + 0x4598: 0x0030f683, 0x4599: 0x00310083, 0x459a: 0x00312a83, 0x459b: 0x0003fc83, + 0x459c: 0x00094883, 0x459d: 0x0003fe83, 0x459e: 0x00094c83, 0x459f: 0x00041883, + 0x45a0: 0x00041a83, 0x45a1: 0x00030492, 0x45a2: 0x0004a492, 0x45a3: 0x0004a692, + 0x45a4: 0x00025c92, 0x45a5: 0x00023e92, 0x45a6: 0x0065d692, 0x45a7: 0x00657690, + 0x45a8: 0x00657890, 0x45a9: 0x00657a90, 0x45aa: 0x00657e90, 0x45ab: 0x00658090, + 0x45ac: 0x0065be90, 0x45ad: 0x0065c090, 0x45ae: 0x0065c490, 0x45af: 0x00659a90, + 0x45b0: 0x0027d692, 0x45b1: 0x00657692, 0x45b2: 0x00657892, 0x45b3: 0x00657a92, + 0x45b4: 0x00657e92, 0x45b5: 0x00658092, 0x45b6: 0x00658292, 0x45b7: 0x00658492, + 0x45b8: 0x00658692, 0x45b9: 0x00658892, 0x45ba: 0x00658a92, 0x45bb: 0x00658c92, + 0x45bc: 0x00658e92, 0x45bd: 0x00659092, 0x45be: 0x00659292, 0x45bf: 0x00659492, + // Block 0x117, offset 0x45c0 + 0x45c0: 0x00659692, 0x45c1: 0x00659892, 0x45c2: 0x00659a92, 0x45c3: 0x00659c92, + 0x45c4: 0x00659e92, 0x45c5: 0x0065a092, 0x45c6: 0x0065a292, 0x45c7: 0x0065a492, + 0x45c8: 0x0065a692, 0x45c9: 0x0065a892, 0x45ca: 0x0065aa92, 0x45cb: 0x0065ac92, + 0x45cc: 0x0065ae92, 0x45cd: 0x0065b092, 0x45ce: 0x0065b292, 0x45cf: 0x0065b492, + 0x45d0: 0x0065b692, 0x45d1: 0x0065b892, 0x45d2: 0x0065ba92, 0x45d3: 0x0065bc92, + 0x45d4: 0x0065be92, 0x45d5: 0x0065c092, 0x45d6: 0x0065c492, 0x45d7: 0x0065c692, + 0x45d8: 0x0065c892, 0x45d9: 0x0065ca92, 0x45da: 0x0065cc92, 0x45db: 0x0065ce92, + 0x45dc: 0x0065d092, 0x45dd: 0x0065d892, 0x45de: 0xa0012812, 0x45df: 0xa0012912, + 0x45e0: 0x0063a692, 0x45e1: 0x0062ac92, 0x45e2: 0x0062ae92, 0x45e3: 0x00646892, + 0x45e4: 0x0062b092, 0x45e5: 0x00646c92, 0x45e6: 0x00646e92, 0x45e7: 0x0062b292, + 0x45e8: 0x0062b492, 0x45e9: 0x0062b692, 0x45ea: 0x00647492, 0x45eb: 0x00647692, + 0x45ec: 0x00647892, 0x45ed: 0x00647a92, 0x45ee: 0x00647c92, 0x45ef: 0x00647e92, + 0x45f0: 0x0062e092, 0x45f1: 0x0062b892, 0x45f2: 0x0062ba92, 0x45f3: 0x0062bc92, + 0x45f4: 0x0062ee92, 0x45f5: 0x0062be92, 0x45f6: 0x0062c092, 0x45f7: 0x0062c292, + 0x45f8: 0x0062c492, 0x45f9: 0x0062c692, 0x45fa: 0x0062c892, 0x45fb: 0x0062ca92, + 0x45fc: 0x0062cc92, 0x45fd: 0x0062ce92, 0x45fe: 0x0062d092, + // Block 0x118, offset 0x4600 + 0x4602: 0x0063a892, 0x4603: 0x0063aa92, + 0x4604: 0x0063ac92, 0x4605: 0x0063ae92, 0x4606: 0x0063b092, 0x4607: 0x0063b292, + 0x460a: 0x0063b492, 0x460b: 0x0063b692, + 0x460c: 0x0063b892, 0x460d: 0x0063ba92, 0x460e: 0x0063bc92, 0x460f: 0x0063be92, + 0x4612: 0x0063c092, 0x4613: 0x0063c292, + 0x4614: 0x0063c492, 0x4615: 0x0063c692, 0x4616: 0x0063c892, 0x4617: 0x0063ca92, + 0x461a: 0x0063cc92, 0x461b: 0x0063ce92, + 0x461c: 0x0063d092, + 0x4620: 0x0027dc83, 0x4621: 0x0027e083, 0x4622: 0x00094683, 0x4623: 0x00062683, + 0x4624: 0x00094a83, 0x4625: 0x0027e283, 0x4626: 0x00280883, + 0x4628: 0x000d3292, 0x4629: 0x00084492, 0x462a: 0x00084892, 0x462b: 0x00084692, + 0x462c: 0x00084a92, 0x462d: 0x000e6e92, 0x462e: 0x000ec492, + 0x4639: 0xa0000000, 0x463a: 0xa0000000, 0x463b: 0xa0000000, + 0x463c: 0x4027ae20, 0x463d: 0x4027b020, 0x463e: 0x00000285, 0x463f: 0x2bfffe85, + // Block 0x119, offset 0x4640 + 0x4640: 0x40731a20, 0x4641: 0x40731c20, 0x4642: 0x40731e20, 0x4643: 0x40732020, + 0x4644: 0x40732220, 0x4645: 0x40732420, 0x4646: 0x40732620, 0x4647: 0x40732820, + 0x4648: 0x40732a20, 0x4649: 0x40732c20, 0x464a: 0x40732e20, 0x464b: 0x40733020, + 0x464d: 0x40733220, 0x464e: 0x40733420, 0x464f: 0x40733620, + 0x4650: 0x40733820, 0x4651: 0x40733a20, 0x4652: 0x40733c20, 0x4653: 0x40733e20, + 0x4654: 0x40734020, 0x4655: 0x40734220, 0x4656: 0x40734420, 0x4657: 0x40734620, + 0x4658: 0x40734820, 0x4659: 0x40734a20, 0x465a: 0x40734c20, 0x465b: 0x40734e20, + 0x465c: 0x40735020, 0x465d: 0x40735220, 0x465e: 0x40735420, 0x465f: 0x40735620, + 0x4660: 0x40735820, 0x4661: 0x40735a20, 0x4662: 0x40735c20, 0x4663: 0x40735e20, + 0x4664: 0x40736020, 0x4665: 0x40736220, 0x4666: 0x40736420, + 0x4668: 0x40736620, 0x4669: 0x40736820, 0x466a: 0x40736a20, 0x466b: 0x40736c20, + 0x466c: 0x40736e20, 0x466d: 0x40737020, 0x466e: 0x40737220, 0x466f: 0x40737420, + 0x4670: 0x40737620, 0x4671: 0x40737820, 0x4672: 0x40737a20, 0x4673: 0x40737c20, + 0x4674: 0x40737e20, 0x4675: 0x40738020, 0x4676: 0x40738220, 0x4677: 0x40738420, + 0x4678: 0x40738620, 0x4679: 0x40738820, 0x467a: 0x40738a20, + 0x467c: 0x40738c20, 0x467d: 0x40738e20, 0x467f: 0x40739020, + // Block 0x11a, offset 0x4680 + 0x4680: 0x40739220, 0x4681: 0x40739420, 0x4682: 0x40739620, 0x4683: 0x40739820, + 0x4684: 0x40739a20, 0x4685: 0x40739c20, 0x4686: 0x40739e20, 0x4687: 0x4073a020, + 0x4688: 0x4073a220, 0x4689: 0x4073a420, 0x468a: 0x4073a620, 0x468b: 0x4073a820, + 0x468c: 0x4073aa20, 0x468d: 0x4073ac20, + 0x4690: 0x4073ae20, 0x4691: 0x4073b020, 0x4692: 0x4073b220, 0x4693: 0x4073b420, + 0x4694: 0x4073b620, 0x4695: 0x4073b820, 0x4696: 0x4073ba20, 0x4697: 0x4073bc20, + 0x4698: 0x4073be20, 0x4699: 0x4073c020, 0x469a: 0x4073c220, 0x469b: 0x4073c420, + 0x469c: 0x4073c620, 0x469d: 0x4073c820, + // Block 0x11b, offset 0x46c0 + 0x46c0: 0x4073ca20, 0x46c1: 0x4073cc20, 0x46c2: 0x4073ce20, 0x46c3: 0x4073d020, + 0x46c4: 0x4073d220, 0x46c5: 0x4073d420, 0x46c6: 0x4073d620, 0x46c7: 0x4073d820, + 0x46c8: 0x4073da20, 0x46c9: 0x4073dc20, 0x46ca: 0x4073de20, 0x46cb: 0x4073e020, + 0x46cc: 0x4073e220, 0x46cd: 0x4073e420, 0x46ce: 0x4073e620, 0x46cf: 0x4073e820, + 0x46d0: 0x4073ea20, 0x46d1: 0x4073ec20, 0x46d2: 0x4073ee20, 0x46d3: 0x4073f020, + 0x46d4: 0x4073f220, 0x46d5: 0x4073f420, 0x46d6: 0x4073f620, 0x46d7: 0x4073f820, + 0x46d8: 0x4073fa20, 0x46d9: 0x4073fc20, 0x46da: 0x4073fe20, 0x46db: 0x40740020, + 0x46dc: 0x40740220, 0x46dd: 0x40740420, 0x46de: 0x40740620, 0x46df: 0x40740820, + 0x46e0: 0x40740a20, 0x46e1: 0x40740c20, 0x46e2: 0x40740e20, 0x46e3: 0x40741020, + 0x46e4: 0x40741220, 0x46e5: 0x40741420, 0x46e6: 0x40741620, 0x46e7: 0x40741820, + 0x46e8: 0x40741a20, 0x46e9: 0x40741c20, 0x46ea: 0x40741e20, 0x46eb: 0x40742020, + 0x46ec: 0x40742220, 0x46ed: 0x40742420, 0x46ee: 0x40742620, 0x46ef: 0x40742820, + 0x46f0: 0x40742a20, 0x46f1: 0x40742c20, 0x46f2: 0x40742e20, 0x46f3: 0x40743020, + 0x46f4: 0x40743220, 0x46f5: 0x40743420, 0x46f6: 0x40743620, 0x46f7: 0x40743820, + 0x46f8: 0x40743a20, 0x46f9: 0x40743c20, 0x46fa: 0x40743e20, 0x46fb: 0x40744020, + 0x46fc: 0x40744220, 0x46fd: 0x40744420, 0x46fe: 0x40744620, 0x46ff: 0x40744820, + // Block 0x11c, offset 0x4700 + 0x4700: 0x40744a20, 0x4701: 0x40744c20, 0x4702: 0x40744e20, 0x4703: 0x40745020, + 0x4704: 0x40745220, 0x4705: 0x40745420, 0x4706: 0x40745620, 0x4707: 0x40745820, + 0x4708: 0x40745a20, 0x4709: 0x40745c20, 0x470a: 0x40745e20, 0x470b: 0x40746020, + 0x470c: 0x40746220, 0x470d: 0x40746420, 0x470e: 0x40746620, 0x470f: 0x40746820, + 0x4710: 0x40746a20, 0x4711: 0x40746c20, 0x4712: 0x40746e20, 0x4713: 0x40747020, + 0x4714: 0x40747220, 0x4715: 0x40747420, 0x4716: 0x40747620, 0x4717: 0x40747820, + 0x4718: 0x40747a20, 0x4719: 0x40747c20, 0x471a: 0x40747e20, 0x471b: 0x40748020, + 0x471c: 0x40748220, 0x471d: 0x40748420, 0x471e: 0x40748620, 0x471f: 0x40748820, + 0x4720: 0x40748a20, 0x4721: 0x40748c20, 0x4722: 0x40748e20, 0x4723: 0x40749020, + 0x4724: 0x40749220, 0x4725: 0x40749420, 0x4726: 0x40749620, 0x4727: 0x40749820, + 0x4728: 0x40749a20, 0x4729: 0x40749c20, 0x472a: 0x40749e20, 0x472b: 0x4074a020, + 0x472c: 0x4074a220, 0x472d: 0x4074a420, 0x472e: 0x4074a620, 0x472f: 0x4074a820, + 0x4730: 0x4074aa20, 0x4731: 0x4074ac20, 0x4732: 0x4074ae20, 0x4733: 0x4074b020, + 0x4734: 0x4074b220, 0x4735: 0x4074b420, 0x4736: 0x4074b620, 0x4737: 0x4074b820, + 0x4738: 0x4074ba20, 0x4739: 0x4074bc20, 0x473a: 0x4074be20, + // Block 0x11d, offset 0x4740 + 0x4740: 0x4003be20, 0x4741: 0x4003c020, 0x4742: 0x4003c220, + 0x4747: 0xe000026a, + 0x4748: 0xe0000382, 0x4749: 0xe000045c, 0x474a: 0xe0000531, 0x474b: 0xe00005fb, + 0x474c: 0xe00006c6, 0x474d: 0xe000076e, 0x474e: 0xe000081a, 0x474f: 0xe00008bf, + 0x4750: 0x4028ba20, 0x4751: 0x4028bc20, 0x4752: 0x4028be20, 0x4753: 0x4028c020, + 0x4754: 0x4028c220, 0x4755: 0x4028c420, 0x4756: 0x4028c620, 0x4757: 0x4028c820, + 0x4758: 0x4028ca20, 0x4759: 0x4028cc20, 0x475a: 0x4028ce20, 0x475b: 0x4028d020, + 0x475c: 0x4028d220, 0x475d: 0x4028d420, 0x475e: 0x4028d620, 0x475f: 0x4028d820, + 0x4760: 0x4028da20, 0x4761: 0x4028dc20, 0x4762: 0x4028de20, 0x4763: 0x4028e020, + 0x4764: 0x4028e220, 0x4765: 0x4028e420, 0x4766: 0x4028e620, 0x4767: 0x4028e820, + 0x4768: 0x4028ea20, 0x4769: 0x4028ec20, 0x476a: 0x4028ee20, 0x476b: 0x4028f020, + 0x476c: 0x4028f220, 0x476d: 0x4028f420, 0x476e: 0x4028f620, 0x476f: 0x4028f820, + 0x4770: 0x4028fa20, 0x4771: 0x4028fc20, 0x4772: 0x4028fe20, 0x4773: 0x40290020, + 0x4777: 0x401afe20, + 0x4778: 0x401b0020, 0x4779: 0x401b0220, 0x477a: 0x401b0420, 0x477b: 0x401b0620, + 0x477c: 0x401b0820, 0x477d: 0x401b0a20, 0x477e: 0x401b0c20, 0x477f: 0x401b0e20, + // Block 0x11e, offset 0x4780 + 0x4780: 0x40290220, 0x4781: 0x40290420, 0x4782: 0xe000026d, 0x4783: 0xe00005fe, + 0x4784: 0x40290620, 0x4785: 0x40290820, 0x4786: 0x40290a20, 0x4787: 0x40290c20, + 0x4788: 0xe0000601, 0x4789: 0x40290e20, 0x478a: 0x40291020, 0x478b: 0x40291220, + 0x478c: 0x40291420, 0x478d: 0x40291620, 0x478e: 0x40291820, 0x478f: 0xe0000604, + 0x4790: 0x40291a20, 0x4791: 0x40291c20, 0x4792: 0x40291e20, 0x4793: 0x40292020, + 0x4794: 0x40292220, 0x4795: 0x40292420, 0x4796: 0x40292620, 0x4797: 0x40292820, + 0x4798: 0xe0000270, 0x4799: 0xe0000273, 0x479a: 0xe0000276, 0x479b: 0xe0000385, + 0x479c: 0xe0000388, 0x479d: 0xe000038b, 0x479e: 0xe000038e, 0x479f: 0xe0000607, + 0x47a0: 0x40292a20, 0x47a1: 0x40292c20, 0x47a2: 0x40292e20, 0x47a3: 0x40293020, + 0x47a4: 0x40293220, 0x47a5: 0x40293420, 0x47a6: 0x40293620, 0x47a7: 0x40293820, + 0x47a8: 0x40293a20, 0x47a9: 0x40293c20, 0x47aa: 0x40293e20, 0x47ab: 0x40294020, + 0x47ac: 0x40294220, 0x47ad: 0x40294420, 0x47ae: 0x40294620, 0x47af: 0x40294820, + 0x47b0: 0x40294a20, 0x47b1: 0x40294c20, 0x47b2: 0x40294e20, 0x47b3: 0xe000060a, + 0x47b4: 0x40295020, 0x47b5: 0x40295220, 0x47b6: 0x40295420, 0x47b7: 0x40295620, + 0x47b8: 0x40295820, 0x47b9: 0x401b1020, 0x47ba: 0x401b1220, 0x47bb: 0x401b1420, + 0x47bc: 0x401b1620, 0x47bd: 0x401b1820, 0x47be: 0x401b1a20, 0x47bf: 0x401b1c20, + // Block 0x11f, offset 0x47c0 + 0x47c0: 0x401b1e20, 0x47c1: 0x401b2020, 0x47c2: 0x401b2220, 0x47c3: 0x401b2420, + 0x47c4: 0x401b2620, 0x47c5: 0x401b2820, 0x47c6: 0x401b2a20, 0x47c7: 0x401b2c20, + 0x47c8: 0x401b2e20, 0x47c9: 0x401b3020, 0x47ca: 0xe00001d6, + 0x47d0: 0x401b3220, 0x47d1: 0x401b3420, 0x47d2: 0x401b3620, 0x47d3: 0x401b3820, + 0x47d4: 0x401b3a20, 0x47d5: 0x401b3c20, 0x47d6: 0x401b3e20, 0x47d7: 0x401b4020, + 0x47d8: 0x401b4220, 0x47d9: 0x401b4420, 0x47da: 0x401b4620, 0x47db: 0x401b4820, + // Block 0x120, offset 0x4800 + 0x4810: 0x401b4a20, 0x4811: 0x401b4c20, 0x4812: 0x401b4e20, 0x4813: 0x401b5020, + 0x4814: 0x401b5220, 0x4815: 0x401b5420, 0x4816: 0x401b5620, 0x4817: 0x401b5820, + 0x4818: 0x401b5a20, 0x4819: 0x401b5c20, 0x481a: 0x401b5e20, 0x481b: 0x401b6020, + 0x481c: 0x401b6220, 0x481d: 0x401b6420, 0x481e: 0x401b6620, 0x481f: 0x401b6820, + 0x4820: 0x401b6a20, 0x4821: 0x401b6c20, 0x4822: 0x401b6e20, 0x4823: 0x401b7020, + 0x4824: 0x401b7220, 0x4825: 0x401b7420, 0x4826: 0x401b7620, 0x4827: 0x401b7820, + 0x4828: 0x401b7a20, 0x4829: 0x401b7c20, 0x482a: 0x401b7e20, 0x482b: 0x401b8020, + 0x482c: 0x401b8220, 0x482d: 0x401b8420, 0x482e: 0x401b8620, 0x482f: 0x401b8820, + 0x4830: 0x401b8a20, 0x4831: 0x401b8c20, 0x4832: 0x401b8e20, 0x4833: 0x401b9020, + 0x4834: 0x401b9220, 0x4835: 0x401b9420, 0x4836: 0x401b9620, 0x4837: 0x401b9820, + 0x4838: 0x401b9a20, 0x4839: 0x401b9c20, 0x483a: 0x401b9e20, 0x483b: 0x401ba020, + 0x483c: 0x401ba220, 0x483d: 0xadc13802, + // Block 0x121, offset 0x4840 + 0x4840: 0x4070b820, 0x4841: 0x4070ba20, 0x4842: 0x4070bc20, 0x4843: 0x4070be20, + 0x4844: 0x4070c020, 0x4845: 0x4070c220, 0x4846: 0x4070c420, 0x4847: 0x4070c620, + 0x4848: 0x4070c820, 0x4849: 0x4070ca20, 0x484a: 0x4070cc20, 0x484b: 0x4070ce20, + 0x484c: 0x4070d020, 0x484d: 0x4070d220, 0x484e: 0x4070d420, 0x484f: 0x4070d620, + 0x4850: 0x4070d820, 0x4851: 0x4070da20, 0x4852: 0x4070dc20, 0x4853: 0x4070de20, + 0x4854: 0x4070e020, 0x4855: 0x4070e220, 0x4856: 0x4070e420, 0x4857: 0x4070e620, + 0x4858: 0x4070e820, 0x4859: 0x4070ea20, 0x485a: 0x4070ec20, 0x485b: 0x4070ee20, + 0x485c: 0x4070f020, + 0x4860: 0x4070f220, 0x4861: 0x4070f420, 0x4862: 0x4070f620, 0x4863: 0x4070f820, + 0x4864: 0x4070fa20, 0x4865: 0x4070fc20, 0x4866: 0x4070fe20, 0x4867: 0x40710020, + 0x4868: 0x40710220, 0x4869: 0x40710420, 0x486a: 0x40710620, 0x486b: 0x40710820, + 0x486c: 0x40710a20, 0x486d: 0x40710c20, 0x486e: 0x40710e20, 0x486f: 0x40711020, + 0x4870: 0x40711220, 0x4871: 0x40711420, 0x4872: 0x40711620, 0x4873: 0x40711820, + 0x4874: 0x40711a20, 0x4875: 0x40711c20, 0x4876: 0x40711e20, 0x4877: 0x40712020, + 0x4878: 0x40712220, 0x4879: 0x40712420, 0x487a: 0x40712620, 0x487b: 0x40712820, + 0x487c: 0x40712a20, 0x487d: 0x40712c20, 0x487e: 0x40712e20, 0x487f: 0x40713020, + // Block 0x122, offset 0x4880 + 0x4880: 0x40713220, 0x4881: 0x40713420, 0x4882: 0x40713620, 0x4883: 0x40713820, + 0x4884: 0x40713a20, 0x4885: 0x40713c20, 0x4886: 0x40713e20, 0x4887: 0x40714020, + 0x4888: 0x40714220, 0x4889: 0x40714420, 0x488a: 0x40714620, 0x488b: 0x40714820, + 0x488c: 0x40714a20, 0x488d: 0x40714c20, 0x488e: 0x40714e20, 0x488f: 0x40715020, + 0x4890: 0x40715220, + // Block 0x123, offset 0x48c0 + 0x48c0: 0x40718820, 0x48c1: 0x40718a20, 0x48c2: 0x40718c20, 0x48c3: 0x40718e20, + 0x48c4: 0x40719020, 0x48c5: 0x40719220, 0x48c6: 0x40719420, 0x48c7: 0x40719620, + 0x48c8: 0x40719820, 0x48c9: 0x40719a20, 0x48ca: 0x40719c20, 0x48cb: 0x40719e20, + 0x48cc: 0x4071a020, 0x48cd: 0x4071a220, 0x48ce: 0x4071a420, 0x48cf: 0x4071a620, + 0x48d0: 0x4071a820, 0x48d1: 0x4071aa20, 0x48d2: 0x4071ac20, 0x48d3: 0x4071ae20, + 0x48d4: 0x4071b020, 0x48d5: 0x4071b220, 0x48d6: 0x4071b420, 0x48d7: 0x4071b620, + 0x48d8: 0x4071b820, 0x48d9: 0x4071ba20, 0x48da: 0x4071bc20, 0x48db: 0x4071be20, + 0x48dc: 0x4071c020, 0x48dd: 0x4071c220, 0x48de: 0x4071c420, + 0x48e0: 0xe0000279, 0x48e1: 0xe000060d, 0x48e2: 0x4028b620, 0x48e3: 0x4028b820, + 0x48f0: 0x4071c620, 0x48f1: 0x4071c820, 0x48f2: 0x4071ca20, 0x48f3: 0x4071cc20, + 0x48f4: 0x4071ce20, 0x48f5: 0x4071d020, 0x48f6: 0x4071d220, 0x48f7: 0x4071d420, + 0x48f8: 0x4071d620, 0x48f9: 0x4071d820, 0x48fa: 0x4071da20, 0x48fb: 0x4071dc20, + 0x48fc: 0x4071de20, 0x48fd: 0x4071e020, 0x48fe: 0x4071e220, 0x48ff: 0x4071e420, + // Block 0x124, offset 0x4900 + 0x4900: 0x4071e620, 0x4901: 0x4071e820, 0x4902: 0x4071ea20, 0x4903: 0x4071ec20, + 0x4904: 0x4071ee20, 0x4905: 0x4071f020, 0x4906: 0x4071f220, 0x4907: 0x4071f420, + 0x4908: 0x4071f620, 0x4909: 0x4071f820, 0x490a: 0x4071fa20, + // Block 0x125, offset 0x4940 + 0x4940: 0x40765020, 0x4941: 0x40765220, 0x4942: 0x40765420, 0x4943: 0x40765620, + 0x4944: 0x40765820, 0x4945: 0x40765a20, 0x4946: 0x40765c20, 0x4947: 0x40765e20, + 0x4948: 0x40766020, 0x4949: 0x40766220, 0x494a: 0x40766420, 0x494b: 0x40766620, + 0x494c: 0x40766820, 0x494d: 0x40766a20, 0x494e: 0x40766c20, 0x494f: 0x40766e20, + 0x4950: 0x40767020, 0x4951: 0x40767220, 0x4952: 0x40767420, 0x4953: 0x40767620, + 0x4954: 0x40767820, 0x4955: 0x40767a20, 0x4956: 0x40767c20, 0x4957: 0x40767e20, + 0x4958: 0x40768020, 0x4959: 0x40768220, 0x495a: 0x40768420, 0x495b: 0x40768620, + 0x495c: 0x40768820, 0x495d: 0x40768a20, 0x495f: 0x4003c420, + 0x4960: 0x40768c20, 0x4961: 0x40768e20, 0x4962: 0x40769020, 0x4963: 0x40769220, + 0x4964: 0x40769420, 0x4965: 0x40769620, 0x4966: 0x40769820, 0x4967: 0x40769a20, + 0x4968: 0x40769c20, 0x4969: 0x40769e20, 0x496a: 0x4076a020, 0x496b: 0x4076a220, + 0x496c: 0x4076a420, 0x496d: 0x4076a620, 0x496e: 0x4076a820, 0x496f: 0x4076aa20, + 0x4970: 0x4076ac20, 0x4971: 0x4076ae20, 0x4972: 0x4076b020, 0x4973: 0x4076b220, + 0x4974: 0x4076b420, 0x4975: 0x4076b620, 0x4976: 0x4076b820, 0x4977: 0x4076ba20, + 0x4978: 0x4076bc20, 0x4979: 0x4076be20, 0x497a: 0x4076c020, 0x497b: 0x4076c220, + 0x497c: 0x4076c420, 0x497d: 0x4076c620, 0x497e: 0x4076c820, 0x497f: 0x4076ca20, + // Block 0x126, offset 0x4980 + 0x4980: 0x4076cc20, 0x4981: 0x4076ce20, 0x4982: 0x4076d020, 0x4983: 0x4076d220, + 0x4988: 0x4076d420, 0x4989: 0x4076d620, 0x498a: 0x4076d820, 0x498b: 0x4076da20, + 0x498c: 0x4076dc20, 0x498d: 0x4076de20, 0x498e: 0x4076e020, 0x498f: 0x4076e220, + 0x4990: 0x4003c620, 0x4991: 0xe000027c, 0x4992: 0xe0000391, 0x4993: 0x40295a20, + 0x4994: 0x40295c20, 0x4995: 0x40295e20, + // Block 0x127, offset 0x49c0 + 0x49c0: 0x0071fc88, 0x49c1: 0x0071fe88, 0x49c2: 0x00720088, 0x49c3: 0x00720288, + 0x49c4: 0x00720488, 0x49c5: 0x00720688, 0x49c6: 0x00720888, 0x49c7: 0x00720a88, + 0x49c8: 0x00720c88, 0x49c9: 0x00720e88, 0x49ca: 0x00721088, 0x49cb: 0x00721288, + 0x49cc: 0x00721488, 0x49cd: 0x00721688, 0x49ce: 0x00721888, 0x49cf: 0x00721a88, + 0x49d0: 0x00721c88, 0x49d1: 0x00721e88, 0x49d2: 0x00722088, 0x49d3: 0x00722288, + 0x49d4: 0x00722488, 0x49d5: 0x00722688, 0x49d6: 0x00722888, 0x49d7: 0x00722a88, + 0x49d8: 0x00722c88, 0x49d9: 0x00722e88, 0x49da: 0x00723088, 0x49db: 0x00723288, + 0x49dc: 0x00723488, 0x49dd: 0x00723688, 0x49de: 0x00723888, 0x49df: 0x00723a88, + 0x49e0: 0x00723c88, 0x49e1: 0x00723e88, 0x49e2: 0x00724088, 0x49e3: 0x00724288, + 0x49e4: 0x00724488, 0x49e5: 0x00724688, 0x49e6: 0x00724888, 0x49e7: 0x00724a88, + 0x49e8: 0x4071fc20, 0x49e9: 0x4071fe20, 0x49ea: 0x40720020, 0x49eb: 0x40720220, + 0x49ec: 0x40720420, 0x49ed: 0x40720620, 0x49ee: 0x40720820, 0x49ef: 0x40720a20, + 0x49f0: 0x40720c20, 0x49f1: 0x40720e20, 0x49f2: 0x40721020, 0x49f3: 0x40721220, + 0x49f4: 0x40721420, 0x49f5: 0x40721620, 0x49f6: 0x40721820, 0x49f7: 0x40721a20, + 0x49f8: 0x40721c20, 0x49f9: 0x40721e20, 0x49fa: 0x40722020, 0x49fb: 0x40722220, + 0x49fc: 0x40722420, 0x49fd: 0x40722620, 0x49fe: 0x40722820, 0x49ff: 0x40722a20, + // Block 0x128, offset 0x4a00 + 0x4a00: 0x40722c20, 0x4a01: 0x40722e20, 0x4a02: 0x40723020, 0x4a03: 0x40723220, + 0x4a04: 0x40723420, 0x4a05: 0x40723620, 0x4a06: 0x40723820, 0x4a07: 0x40723a20, + 0x4a08: 0x40723c20, 0x4a09: 0x40723e20, 0x4a0a: 0x40724020, 0x4a0b: 0x40724220, + 0x4a0c: 0x40724420, 0x4a0d: 0x40724620, 0x4a0e: 0x40724820, 0x4a0f: 0x40724a20, + 0x4a10: 0x40724c20, 0x4a11: 0x40724e20, 0x4a12: 0x40725020, 0x4a13: 0x40725220, + 0x4a14: 0x40725420, 0x4a15: 0x40725620, 0x4a16: 0x40725820, 0x4a17: 0x40725a20, + 0x4a18: 0x40725c20, 0x4a19: 0x40725e20, 0x4a1a: 0x40726020, 0x4a1b: 0x40726220, + 0x4a1c: 0x40726420, 0x4a1d: 0x40726620, 0x4a1e: 0x40726820, 0x4a1f: 0x40726a20, + 0x4a20: 0x40726c20, 0x4a21: 0x40726e20, 0x4a22: 0x40727020, 0x4a23: 0x40727220, + 0x4a24: 0x40727420, 0x4a25: 0x40727620, 0x4a26: 0x40727820, 0x4a27: 0x40727a20, + 0x4a28: 0x40727c20, 0x4a29: 0x40727e20, 0x4a2a: 0x40728020, 0x4a2b: 0x40728220, + 0x4a2c: 0x40728420, 0x4a2d: 0x40728620, 0x4a2e: 0x40728820, 0x4a2f: 0x40728a20, + 0x4a30: 0x40728c20, 0x4a31: 0x40728e20, 0x4a32: 0x40729020, 0x4a33: 0x40729220, + 0x4a34: 0x40729420, 0x4a35: 0x40729620, 0x4a36: 0x40729820, 0x4a37: 0x40729a20, + 0x4a38: 0x40729c20, 0x4a39: 0x40729e20, 0x4a3a: 0x4072a020, 0x4a3b: 0x4072a220, + 0x4a3c: 0x4072a420, 0x4a3d: 0x4072a620, 0x4a3e: 0x4072a820, 0x4a3f: 0x4072aa20, + // Block 0x129, offset 0x4a40 + 0x4a40: 0x4072ac20, 0x4a41: 0x4072ae20, 0x4a42: 0x4072b020, 0x4a43: 0x4072b220, + 0x4a44: 0x4072b420, 0x4a45: 0x4072b620, 0x4a46: 0x4072b820, 0x4a47: 0x4072ba20, + 0x4a48: 0x4072bc20, 0x4a49: 0x4072be20, 0x4a4a: 0x4072c020, 0x4a4b: 0x4072c220, + 0x4a4c: 0x4072c420, 0x4a4d: 0x4072c620, 0x4a4e: 0x4072c820, 0x4a4f: 0x4072ca20, + 0x4a50: 0x4072cc20, 0x4a51: 0x4072ce20, 0x4a52: 0x4072d020, 0x4a53: 0x4072d220, + 0x4a54: 0x4072d420, 0x4a55: 0x4072d620, 0x4a56: 0x4072d820, 0x4a57: 0x4072da20, + 0x4a58: 0x4072dc20, 0x4a59: 0x4072de20, 0x4a5a: 0x4072e020, 0x4a5b: 0x4072e220, + 0x4a5c: 0x4072e420, 0x4a5d: 0x4072e620, + 0x4a60: 0xe0000167, 0x4a61: 0xe00001f5, 0x4a62: 0xe0000310, 0x4a63: 0xe00003ea, + 0x4a64: 0xe00004c5, 0x4a65: 0xe000058f, 0x4a66: 0xe000065a, 0x4a67: 0xe0000702, + 0x4a68: 0xe00007ae, 0x4a69: 0xe0000853, + // Block 0x12a, offset 0x4a80 + 0x4a80: 0x4074c020, 0x4a81: 0x4074c220, 0x4a82: 0x4074c420, 0x4a83: 0x4074c620, + 0x4a84: 0x4074c820, 0x4a85: 0x4074ca20, + 0x4a88: 0x4074cc20, 0x4a8a: 0x4074ce20, 0x4a8b: 0x4074d020, + 0x4a8c: 0x4074d220, 0x4a8d: 0x4074d420, 0x4a8e: 0x4074d620, 0x4a8f: 0x4074d820, + 0x4a90: 0x4074da20, 0x4a91: 0x4074dc20, 0x4a92: 0x4074de20, 0x4a93: 0x4074e020, + 0x4a94: 0x4074e220, 0x4a95: 0x4074e420, 0x4a96: 0x4074e620, 0x4a97: 0x4074e820, + 0x4a98: 0x4074ea20, 0x4a99: 0x4074ec20, 0x4a9a: 0x4074ee20, 0x4a9b: 0x4074f020, + 0x4a9c: 0x4074f220, 0x4a9d: 0x4074f420, 0x4a9e: 0x4074f620, 0x4a9f: 0x4074f820, + 0x4aa0: 0x4074fa20, 0x4aa1: 0x4074fc20, 0x4aa2: 0x4074fe20, 0x4aa3: 0x40750020, + 0x4aa4: 0x40750220, 0x4aa5: 0x40750420, 0x4aa6: 0x40750620, 0x4aa7: 0x40750820, + 0x4aa8: 0x40750a20, 0x4aa9: 0x40750c20, 0x4aaa: 0x40750e20, 0x4aab: 0x40751020, + 0x4aac: 0x40751220, 0x4aad: 0x40751420, 0x4aae: 0x40751620, 0x4aaf: 0x40751820, + 0x4ab0: 0x40751a20, 0x4ab1: 0x40751c20, 0x4ab2: 0x40751e20, 0x4ab3: 0x40752020, + 0x4ab4: 0x40752220, 0x4ab5: 0x40752420, 0x4ab7: 0x40752620, + 0x4ab8: 0x40752820, + 0x4abc: 0x40752a20, 0x4abf: 0x40752c20, + // Block 0x12b, offset 0x4ac0 + 0x4ac0: 0x4075d220, 0x4ac1: 0x4075d420, 0x4ac2: 0x4075d620, 0x4ac3: 0x4075d820, + 0x4ac4: 0x4075da20, 0x4ac5: 0x4075dc20, 0x4ac6: 0x4075de20, 0x4ac7: 0x4075e020, + 0x4ac8: 0x4075e220, 0x4ac9: 0x4075e420, 0x4aca: 0x4075e620, 0x4acb: 0x4075e820, + 0x4acc: 0x4075ea20, 0x4acd: 0x4075ec20, 0x4ace: 0x4075ee20, 0x4acf: 0x4075f020, + 0x4ad0: 0x4075f220, 0x4ad1: 0x4075f420, 0x4ad2: 0x4075f620, 0x4ad3: 0x4075f820, + 0x4ad4: 0x4075fa20, 0x4ad5: 0x4075fc20, 0x4ad7: 0x40038620, + 0x4ad8: 0xe0000297, 0x4ad9: 0xe00003b2, 0x4ada: 0xe000048c, 0x4adb: 0x40296820, + 0x4adc: 0x40296a20, 0x4add: 0x40296c20, 0x4ade: 0x40296e20, 0x4adf: 0x40297020, + // Block 0x12c, offset 0x4b00 + 0x4b00: 0x4038bc20, 0x4b01: 0x4038be20, 0x4b02: 0x4038c020, 0x4b03: 0x4038c220, + 0x4b04: 0x4038c420, 0x4b05: 0x4038c620, 0x4b06: 0x4038c820, 0x4b07: 0x4038ca20, + 0x4b08: 0x4038cc20, 0x4b09: 0x4038ce20, 0x4b0a: 0x4038d020, 0x4b0b: 0x4038d220, + 0x4b0c: 0x4038d420, 0x4b0d: 0x4038d620, 0x4b0e: 0x4038d820, 0x4b0f: 0x4038da20, + 0x4b10: 0x4038dc20, 0x4b11: 0x4038de20, 0x4b12: 0x4038e020, 0x4b13: 0x4038e220, + 0x4b14: 0x4038e420, 0x4b15: 0x4038e620, 0x4b16: 0xe0000294, 0x4b17: 0x40296220, + 0x4b18: 0x40296420, 0x4b19: 0x40296620, 0x4b1a: 0xe00003af, 0x4b1b: 0xe0000489, + 0x4b1f: 0x4003c820, + 0x4b20: 0x40715420, 0x4b21: 0x40715620, 0x4b22: 0x40715820, 0x4b23: 0x40715a20, + 0x4b24: 0x40715c20, 0x4b25: 0x40715e20, 0x4b26: 0x40716020, 0x4b27: 0x40716220, + 0x4b28: 0x40716420, 0x4b29: 0x40716620, 0x4b2a: 0x40716820, 0x4b2b: 0x40716a20, + 0x4b2c: 0x40716c20, 0x4b2d: 0x40716e20, 0x4b2e: 0x40717020, 0x4b2f: 0x40717220, + 0x4b30: 0x40717420, 0x4b31: 0x40717620, 0x4b32: 0x40717820, 0x4b33: 0x40717a20, + 0x4b34: 0x40717c20, 0x4b35: 0x40717e20, 0x4b36: 0x40718020, 0x4b37: 0x40718220, + 0x4b38: 0x40718420, 0x4b39: 0x40718620, + 0x4b3f: 0x4003bc20, + // Block 0x12d, offset 0x4b40 + 0x4b40: 0xe00023a4, 0x4b41: 0xe00023a7, 0x4b42: 0xe00023aa, 0x4b43: 0xe00023ad, + 0x4b44: 0xe00023b0, 0x4b45: 0xe00023b3, 0x4b46: 0xe00023b6, 0x4b47: 0xe00023b9, + 0x4b48: 0xe00023bc, 0x4b49: 0xe00023bf, 0x4b4a: 0xe00023c2, 0x4b4b: 0xe00023c5, + 0x4b4c: 0xe00023c8, 0x4b4d: 0xe00023cb, 0x4b4e: 0xe00023ce, 0x4b4f: 0xe00023d1, + 0x4b50: 0xe00023d4, 0x4b51: 0xe00023d7, 0x4b52: 0xe00023da, 0x4b53: 0xe00023e0, + 0x4b54: 0xe00023e3, 0x4b55: 0xe00023e6, 0x4b56: 0xe00023e9, 0x4b57: 0xe00023ec, + 0x4b58: 0xe00023ef, 0x4b59: 0xe00023f2, 0x4b5a: 0xe00023f5, 0x4b5b: 0xe00023f8, + 0x4b5c: 0xe00023fb, 0x4b5d: 0xe00023fe, 0x4b5e: 0x40865220, 0x4b5f: 0x40865420, + 0x4b60: 0x40862020, 0x4b61: 0x40862220, 0x4b62: 0x40862420, 0x4b63: 0x40862620, + 0x4b64: 0x40862820, 0x4b65: 0x40862a20, 0x4b66: 0x40862c20, 0x4b67: 0x40862e20, + 0x4b68: 0x40863020, 0x4b69: 0x40863220, 0x4b6a: 0x40863420, 0x4b6b: 0x40863620, + 0x4b6c: 0x40863820, 0x4b6d: 0x40863a20, 0x4b6e: 0x40863c20, 0x4b6f: 0x40863e20, + 0x4b70: 0xe00023dd, 0x4b71: 0x40864020, 0x4b72: 0x40864220, 0x4b73: 0x40864420, + 0x4b74: 0x40864620, 0x4b75: 0x40864820, 0x4b76: 0x40864a20, 0x4b77: 0x40864c20, + 0x4b7e: 0x40864e20, 0x4b7f: 0x40865020, + // Block 0x12e, offset 0x4b80 + 0x4b80: 0x4048bc20, 0x4b81: 0x4048be20, 0x4b82: 0x4048c020, 0x4b83: 0x4048c220, + 0x4b85: 0x4048c420, 0x4b86: 0x4048c620, + 0x4b8c: 0x4048c820, 0x4b8d: 0xadc06002, 0x4b8e: 0xa000f302, 0x4b8f: 0xae60f402, + 0x4b90: 0x4048ca20, 0x4b91: 0x4048cc20, 0x4b92: 0x4048ce20, 0x4b93: 0x4048d020, + 0x4b95: 0x4048d220, 0x4b96: 0x4048d420, 0x4b97: 0x4048d620, + 0x4b99: 0x4048d820, 0x4b9a: 0x4048da20, 0x4b9b: 0x4048dc20, + 0x4b9c: 0x4048de20, 0x4b9d: 0x4048e020, 0x4b9e: 0x4048e220, 0x4b9f: 0x4048e420, + 0x4ba0: 0x4048e620, 0x4ba1: 0x4048e820, 0x4ba2: 0x4048ea20, 0x4ba3: 0x4048ec20, + 0x4ba4: 0x4048ee20, 0x4ba5: 0x4048f020, 0x4ba6: 0x4048f220, 0x4ba7: 0x4048f420, + 0x4ba8: 0x4048f620, 0x4ba9: 0x4048f820, 0x4baa: 0x4048fa20, 0x4bab: 0x4048fc20, + 0x4bac: 0x4048fe20, 0x4bad: 0x40490020, 0x4bae: 0x40490220, 0x4baf: 0x40490420, + 0x4bb0: 0x40490620, 0x4bb1: 0x40490820, 0x4bb2: 0x40490a20, 0x4bb3: 0x40490c20, + 0x4bb8: 0xae60fb02, 0x4bb9: 0xa010fc02, 0x4bba: 0xadc0fd02, + 0x4bbf: 0x82092487, + // Block 0x12f, offset 0x4bc0 + 0x4bc0: 0xe00002ac, 0x4bc1: 0xe00003c7, 0x4bc2: 0xe00004a1, 0x4bc3: 0xe0000573, + 0x4bc4: 0x40299820, 0x4bc5: 0x40299a20, 0x4bc6: 0x40299c20, 0x4bc7: 0x40299e20, + 0x4bd0: 0x40060620, 0x4bd1: 0x40060820, 0x4bd2: 0x40060a20, 0x4bd3: 0x40060c20, + 0x4bd4: 0x40060e20, 0x4bd5: 0x40061020, 0x4bd6: 0x40034420, 0x4bd7: 0x40034620, + 0x4bd8: 0x40061220, + 0x4be0: 0x40752e20, 0x4be1: 0x40753020, 0x4be2: 0x40753220, 0x4be3: 0x40753420, + 0x4be4: 0x40753620, 0x4be5: 0x40753820, 0x4be6: 0x40753a20, 0x4be7: 0x40753c20, + 0x4be8: 0x40753e20, 0x4be9: 0x40754020, 0x4bea: 0x40754220, 0x4beb: 0x40754420, + 0x4bec: 0x40754620, 0x4bed: 0x40754820, 0x4bee: 0x40754a20, 0x4bef: 0x40754c20, + 0x4bf0: 0x40754e20, 0x4bf1: 0x40755020, 0x4bf2: 0x40755220, 0x4bf3: 0x40755420, + 0x4bf4: 0x40755620, 0x4bf5: 0x40755820, 0x4bf6: 0x40755a20, 0x4bf7: 0x40755c20, + 0x4bf8: 0x40755e20, 0x4bf9: 0x40756020, 0x4bfa: 0x40756220, 0x4bfb: 0x40756420, + 0x4bfc: 0x40756620, 0x4bfd: 0xe0000291, 0x4bfe: 0x40296020, 0x4bff: 0x40061c20, + // Block 0x130, offset 0x4c00 + 0x4c00: 0x40756820, 0x4c01: 0x40756a20, 0x4c02: 0x40756c20, 0x4c03: 0x40756e20, + 0x4c04: 0x40757020, 0x4c05: 0x40757220, 0x4c06: 0x40757420, 0x4c07: 0x40757620, + 0x4c08: 0x40757820, 0x4c09: 0x40757a20, 0x4c0a: 0x40757c20, 0x4c0b: 0x40757e20, + 0x4c0c: 0x40758020, 0x4c0d: 0x40758220, 0x4c0e: 0x40758420, 0x4c0f: 0x40758620, + 0x4c10: 0x40758820, 0x4c11: 0x40758a20, 0x4c12: 0x40758c20, 0x4c13: 0x40758e20, + 0x4c14: 0x40759020, 0x4c15: 0x40759220, 0x4c16: 0x40759420, 0x4c17: 0x40759620, + 0x4c18: 0x40759820, 0x4c19: 0x40759a20, 0x4c1a: 0x40759c20, 0x4c1b: 0x40759e20, + 0x4c1c: 0x4075a020, 0x4c1d: 0x4075a220, 0x4c1e: 0x4075a420, 0x4c1f: 0x4075a620, + 0x4c20: 0x4075a820, 0x4c21: 0x4075aa20, 0x4c22: 0x4075ac20, 0x4c23: 0x4075ae20, + 0x4c24: 0x4075b020, 0x4c25: 0x4075b220, 0x4c26: 0x4075b420, 0x4c27: 0x4075b620, + 0x4c28: 0x4075b820, 0x4c29: 0x4075ba20, 0x4c2a: 0x4075bc20, 0x4c2b: 0x4075be20, + 0x4c2c: 0x4075c020, 0x4c2d: 0x4075c220, 0x4c2e: 0xe00023a1, 0x4c2f: 0x4075c420, + 0x4c30: 0x4075c620, 0x4c31: 0x4075c820, 0x4c32: 0x4075ca20, 0x4c33: 0x4075cc20, + 0x4c34: 0x4075ce20, 0x4c35: 0x4075d020, + 0x4c39: 0x40061420, 0x4c3a: 0x40038820, 0x4c3b: 0x40038a20, + 0x4c3c: 0x40038c20, 0x4c3d: 0x40038e20, 0x4c3e: 0x40039020, 0x4c3f: 0x40039220, + // Block 0x131, offset 0x4c40 + 0x4c40: 0x4075fe20, 0x4c41: 0x40760020, 0x4c42: 0x40760220, 0x4c43: 0x40760420, + 0x4c44: 0x40760620, 0x4c45: 0x40760820, 0x4c46: 0x40760a20, 0x4c47: 0x40760c20, + 0x4c48: 0x40760e20, 0x4c49: 0x40761020, 0x4c4a: 0x40761220, 0x4c4b: 0x40761420, + 0x4c4c: 0x40761620, 0x4c4d: 0x40761820, 0x4c4e: 0x40761a20, 0x4c4f: 0x40761c20, + 0x4c50: 0x40761e20, 0x4c51: 0x40762020, 0x4c52: 0x40762220, 0x4c53: 0x40762420, + 0x4c54: 0x40762620, 0x4c55: 0x40762820, + 0x4c58: 0xe000029a, 0x4c59: 0xe00003b5, 0x4c5a: 0xe000048f, 0x4c5b: 0xe0000561, + 0x4c5c: 0x40297220, 0x4c5d: 0x40297420, 0x4c5e: 0x40297620, 0x4c5f: 0x40297820, + 0x4c60: 0x40762a20, 0x4c61: 0x40762c20, 0x4c62: 0x40762e20, 0x4c63: 0x40763020, + 0x4c64: 0x40763220, 0x4c65: 0x40763420, 0x4c66: 0x40763620, 0x4c67: 0x40763820, + 0x4c68: 0x40763a20, 0x4c69: 0x40763c20, 0x4c6a: 0x40763e20, 0x4c6b: 0x40764020, + 0x4c6c: 0x40764220, 0x4c6d: 0x40764420, 0x4c6e: 0x40764620, 0x4c6f: 0x40764820, + 0x4c70: 0x40764a20, 0x4c71: 0x40764c20, 0x4c72: 0x40764e20, + 0x4c78: 0xe000029d, 0x4c79: 0xe00003b8, 0x4c7a: 0xe0000492, 0x4c7b: 0xe0000564, + 0x4c7c: 0x40297a20, 0x4c7d: 0x40297c20, 0x4c7e: 0x40297e20, 0x4c7f: 0x40298020, + // Block 0x132, offset 0x4c80 + 0x4c80: 0x405b2620, 0x4c81: 0xe00020a7, 0x4c82: 0x405b2820, 0x4c83: 0x405b2a20, + 0x4c84: 0xe00020aa, 0x4c85: 0x405b2c20, 0x4c86: 0x405b2e20, 0x4c87: 0x405b3020, + 0x4c88: 0xe00020ad, 0x4c89: 0x405b3220, 0x4c8a: 0xe00020b0, 0x4c8b: 0x405b3420, + 0x4c8c: 0xe00020b3, 0x4c8d: 0x405b3620, 0x4c8e: 0xe00020b6, 0x4c8f: 0x405b3820, + 0x4c90: 0xe00020b9, 0x4c91: 0x405b3a20, 0x4c92: 0xe00020bc, 0x4c93: 0x405b3c20, + 0x4c94: 0x405b3e20, 0x4c95: 0xe00020bf, 0x4c96: 0x405b4020, 0x4c97: 0xe00020c2, + 0x4c98: 0x405b4220, 0x4c99: 0xe00020c5, 0x4c9a: 0x405b4420, 0x4c9b: 0xe00020c8, + 0x4c9c: 0x405b4620, 0x4c9d: 0xe00020cb, 0x4c9e: 0x405b4820, 0x4c9f: 0xe00020ce, + 0x4ca0: 0x405b4a20, 0x4ca1: 0x405b4c20, 0x4ca2: 0x405b4e20, 0x4ca3: 0x405b5020, + 0x4ca4: 0x405b5220, 0x4ca5: 0xe00020d1, 0x4ca6: 0x405b5420, 0x4ca7: 0xe00020d4, + 0x4ca8: 0x405b5620, 0x4ca9: 0xe00020d7, 0x4caa: 0x405b5820, 0x4cab: 0xe00020da, + 0x4cac: 0x405b5a20, 0x4cad: 0x405b5c20, 0x4cae: 0xe00020dd, 0x4caf: 0x405b5e20, + 0x4cb0: 0x405b6020, 0x4cb1: 0x405b6220, 0x4cb2: 0x405b6420, 0x4cb3: 0xe00020e0, + 0x4cb4: 0x405b6620, 0x4cb5: 0xe00020e3, 0x4cb6: 0x405b6820, 0x4cb7: 0xe00020e6, + 0x4cb8: 0x405b6a20, 0x4cb9: 0xe00020e9, 0x4cba: 0x405b6c20, 0x4cbb: 0xe00020ec, + 0x4cbc: 0x405b6e20, 0x4cbd: 0x405b7020, 0x4cbe: 0x405b7220, 0x4cbf: 0x405b7420, + // Block 0x133, offset 0x4cc0 + 0x4cc0: 0xe00020ef, 0x4cc1: 0x405b7620, 0x4cc2: 0xe00020f2, 0x4cc3: 0x405b7820, + 0x4cc4: 0xe00020f5, 0x4cc5: 0x405b7a20, 0x4cc6: 0xe00020f8, 0x4cc7: 0x405b7c20, + 0x4cc8: 0x405b7e20, + // Block 0x134, offset 0x4d00 + 0x4d20: 0xe00001ec, 0x4d21: 0xe0000307, 0x4d22: 0xe00003e1, 0x4d23: 0xe00004bc, + 0x4d24: 0xe0000586, 0x4d25: 0xe0000651, 0x4d26: 0xe00006f9, 0x4d27: 0xe00007a5, + 0x4d28: 0xe000084a, 0x4d29: 0x40288820, 0x4d2a: 0x40288a20, 0x4d2b: 0x40288c20, + 0x4d2c: 0x40288e20, 0x4d2d: 0x40289020, 0x4d2e: 0x40289220, 0x4d2f: 0x40289420, + 0x4d30: 0x40289620, 0x4d31: 0x40289820, 0x4d32: 0x40289a20, 0x4d33: 0x40289c20, + 0x4d34: 0x40289e20, 0x4d35: 0x4028a020, 0x4d36: 0x4028a220, 0x4d37: 0x4028a420, + 0x4d38: 0x4028a620, 0x4d39: 0x4028a820, 0x4d3a: 0x4028aa20, 0x4d3b: 0x4028ac20, + 0x4d3c: 0x4028ae20, 0x4d3d: 0x4028b020, 0x4d3e: 0x4028b220, + // Block 0x135, offset 0x4d40 + 0x4d40: 0xa000f202, 0x4d41: 0xa000f302, 0x4d42: 0xa000f402, 0x4d43: 0x40489220, + 0x4d44: 0x40489420, 0x4d45: 0x40483420, 0x4d46: 0x40483620, 0x4d47: 0x40483820, + 0x4d48: 0x40483a20, 0x4d49: 0x40483c20, 0x4d4a: 0x40483e20, 0x4d4b: 0x40484020, + 0x4d4c: 0x40484220, 0x4d4d: 0x40484420, 0x4d4e: 0x40484620, 0x4d4f: 0x40484820, + 0x4d50: 0x40484a20, 0x4d51: 0x40484c20, 0x4d52: 0x40484e20, 0x4d53: 0x40485020, + 0x4d54: 0x40485220, 0x4d55: 0x40485420, 0x4d56: 0x40485620, 0x4d57: 0x40485820, + 0x4d58: 0x40485a20, 0x4d59: 0x40485c20, 0x4d5a: 0x40485e20, 0x4d5b: 0x40486020, + 0x4d5c: 0x40486220, 0x4d5d: 0x40486420, 0x4d5e: 0x40486620, 0x4d5f: 0x40486820, + 0x4d60: 0x40486a20, 0x4d61: 0x40486c20, 0x4d62: 0x40486e20, 0x4d63: 0x40487020, + 0x4d64: 0x40487220, 0x4d65: 0x40487420, 0x4d66: 0x40487620, 0x4d67: 0x40487820, + 0x4d68: 0x40487a20, 0x4d69: 0x40487c20, 0x4d6a: 0x40487e20, 0x4d6b: 0x40488020, + 0x4d6c: 0x40488220, 0x4d6d: 0x40488420, 0x4d6e: 0x40488620, 0x4d6f: 0x40488820, + 0x4d70: 0x40488a20, 0x4d71: 0x40488c20, 0x4d72: 0x40488e20, 0x4d73: 0x40489020, + 0x4d74: 0x40489620, 0x4d75: 0x40489820, 0x4d76: 0x40489a20, 0x4d77: 0x40489c20, + 0x4d78: 0x40489e20, 0x4d79: 0x4048a020, 0x4d7a: 0x4048a220, 0x4d7b: 0x4048a420, + 0x4d7c: 0x4048a620, 0x4d7d: 0x4048a820, 0x4d7e: 0x4048aa20, 0x4d7f: 0x4048ac20, + // Block 0x136, offset 0x4d80 + 0x4d80: 0x4048ae20, 0x4d81: 0x4048b020, 0x4d82: 0x4048b220, 0x4d83: 0x4048b420, + 0x4d84: 0x4048b620, 0x4d85: 0x4048b820, 0x4d86: 0x8209245d, 0x4d87: 0x40034820, + 0x4d88: 0x40034a20, 0x4d89: 0x4005fc20, 0x4d8a: 0x4005fe20, 0x4d8b: 0x40060020, + 0x4d8c: 0x40060220, 0x4d8d: 0x40060420, + 0x4d92: 0xe00002a9, 0x4d93: 0xe00003c4, + 0x4d94: 0xe000049e, 0x4d95: 0xe0000570, 0x4d96: 0xe000063a, 0x4d97: 0xe00006ea, + 0x4d98: 0xe0000792, 0x4d99: 0xe000083b, 0x4d9a: 0xe00008e6, 0x4d9b: 0x40298220, + 0x4d9c: 0x40298420, 0x4d9d: 0x40298620, 0x4d9e: 0x40298820, 0x4d9f: 0x40298a20, + 0x4da0: 0x40298c20, 0x4da1: 0x40298e20, 0x4da2: 0x40299020, 0x4da3: 0x40299220, + 0x4da4: 0x40299420, 0x4da5: 0x40299620, 0x4da6: 0xe00001df, 0x4da7: 0xe00002a6, + 0x4da8: 0xe00003c1, 0x4da9: 0xe000049b, 0x4daa: 0xe000056d, 0x4dab: 0xe0000637, + 0x4dac: 0xe00006e7, 0x4dad: 0xe000078f, 0x4dae: 0xe0000838, 0x4daf: 0xe00008e3, + // Block 0x137, offset 0x4dc0 + 0x4dc0: 0xa000f202, 0x4dc1: 0xa000f302, 0x4dc2: 0xa000f402, 0x4dc3: 0x40467e20, + 0x4dc4: 0x40468020, 0x4dc5: 0x40468220, 0x4dc6: 0x40468420, 0x4dc7: 0x40468620, + 0x4dc8: 0x40468820, 0x4dc9: 0x40468a20, 0x4dca: 0x40468c20, 0x4dcb: 0x40468e20, + 0x4dcc: 0x40469020, 0x4dcd: 0x40469220, 0x4dce: 0x40469420, 0x4dcf: 0x40469620, + 0x4dd0: 0x40469820, 0x4dd1: 0x40469a20, 0x4dd2: 0x40469c20, 0x4dd3: 0x40469e20, + 0x4dd4: 0x4046a020, 0x4dd5: 0x4046a220, 0x4dd6: 0x4046a420, 0x4dd7: 0x4046a620, + 0x4dd8: 0x4046a820, 0x4dd9: 0x4046aa20, 0x4dda: 0xe0001878, 0x4ddb: 0x4046ac20, + 0x4ddc: 0xe000187b, 0x4ddd: 0x4046ae20, 0x4dde: 0x4046b020, 0x4ddf: 0x4046b220, + 0x4de0: 0x4046b420, 0x4de1: 0x4046b620, 0x4de2: 0x4046b820, 0x4de3: 0x4046ba20, + 0x4de4: 0x4046bc20, 0x4de5: 0x4046be20, 0x4de6: 0x4046c020, 0x4de7: 0x4046c220, + 0x4de8: 0x4046c420, 0x4de9: 0x4046c620, 0x4dea: 0x4046c820, 0x4deb: 0xe000187e, + 0x4dec: 0x4046ca20, 0x4ded: 0x4046cc20, 0x4dee: 0x4046ce20, 0x4def: 0x4046d020, + 0x4df0: 0x4046d220, 0x4df1: 0x4046d420, 0x4df2: 0x4046d620, 0x4df3: 0x4046d820, + 0x4df4: 0x4046da20, 0x4df5: 0x4046dc20, 0x4df6: 0x4046de20, 0x4df7: 0x4046e020, + 0x4df8: 0x4046e220, 0x4df9: 0x82092372, 0x4dfa: 0xa070f102, 0x4dfb: 0x40061620, + 0x4dfc: 0x40061820, 0x4dfd: 0xa0000000, 0x4dfe: 0x40039420, 0x4dff: 0x40039620, + // Block 0x138, offset 0x4e00 + 0x4e00: 0x40034c20, 0x4e01: 0x40034e20, + 0x4e10: 0x4072e820, 0x4e11: 0x4072ea20, 0x4e12: 0x4072ec20, 0x4e13: 0x4072ee20, + 0x4e14: 0x4072f020, 0x4e15: 0x4072f220, 0x4e16: 0x4072f420, 0x4e17: 0x4072f620, + 0x4e18: 0x4072f820, 0x4e19: 0x4072fa20, 0x4e1a: 0x4072fc20, 0x4e1b: 0x4072fe20, + 0x4e1c: 0x40730020, 0x4e1d: 0x40730220, 0x4e1e: 0x40730420, 0x4e1f: 0x40730620, + 0x4e20: 0x40730820, 0x4e21: 0x40730a20, 0x4e22: 0x40730c20, 0x4e23: 0x40730e20, + 0x4e24: 0x40731020, 0x4e25: 0x40731220, 0x4e26: 0x40731420, 0x4e27: 0x40731620, + 0x4e28: 0x40731820, + 0x4e30: 0xe00001d0, 0x4e31: 0xe0000264, 0x4e32: 0xe000037c, 0x4e33: 0xe0000456, + 0x4e34: 0xe000052b, 0x4e35: 0xe00005f5, 0x4e36: 0xe00006c0, 0x4e37: 0xe0000768, + 0x4e38: 0xe0000814, 0x4e39: 0xe00008b9, + // Block 0x139, offset 0x4e40 + 0x4e40: 0xae60f202, 0x4e41: 0xae60f302, 0x4e42: 0xae60f402, 0x4e43: 0x404f4020, + 0x4e44: 0x404f4220, 0x4e45: 0x404f4420, 0x4e46: 0x404f4620, 0x4e47: 0x404f4820, + 0x4e48: 0x404f4a20, 0x4e49: 0x404f4c20, 0x4e4a: 0x404f4e20, 0x4e4b: 0x404f5020, + 0x4e4c: 0x404f5220, 0x4e4d: 0x404f5420, 0x4e4e: 0x404f5620, 0x4e4f: 0x404f5820, + 0x4e50: 0x404f5a20, 0x4e51: 0x404f5c20, 0x4e52: 0x404f5e20, 0x4e53: 0x404f6020, + 0x4e54: 0x404f6220, 0x4e55: 0x404f6420, 0x4e56: 0x404f6620, 0x4e57: 0x404f6820, + 0x4e58: 0x404f6a20, 0x4e59: 0x404f6c20, 0x4e5a: 0x404f6e20, 0x4e5b: 0x404f7020, + 0x4e5c: 0x404f7220, 0x4e5d: 0x404f7420, 0x4e5e: 0x404f7620, 0x4e5f: 0x404f7820, + 0x4e60: 0x404f7a20, 0x4e61: 0x404f7c20, 0x4e62: 0x404f7e20, 0x4e63: 0x404f8020, + 0x4e64: 0x404f8220, 0x4e65: 0x404f8420, 0x4e66: 0x404f8620, 0x4e67: 0x404f8820, + 0x4e68: 0x404f8a20, 0x4e69: 0x404f8c20, 0x4e6a: 0x404f8e20, 0x4e6b: 0x404f9020, + 0x4e6c: 0x404f9220, 0x4e6d: 0x404f9420, 0x4e6e: 0x404f9620, 0x4e6f: 0x404f9820, + 0x4e70: 0x404f9a20, 0x4e71: 0xc31507e1, 0x4e72: 0xc31707e1, 0x4e73: 0x820927d0, + 0x4e74: 0x820927d1, 0x4e76: 0xe00001b2, 0x4e77: 0xe0000246, + 0x4e78: 0xe000035e, 0x4e79: 0xe0000438, 0x4e7a: 0xe000050d, 0x4e7b: 0xe00005d7, + 0x4e7c: 0xe00006a2, 0x4e7d: 0xe000074a, 0x4e7e: 0xe00007f6, 0x4e7f: 0xe000089b, + // Block 0x13a, offset 0x4e80 + 0x4e80: 0x40039820, 0x4e81: 0x40035020, 0x4e82: 0x40035220, 0x4e83: 0x4002de20, + // Block 0x13b, offset 0x4ec0 + 0x4ec0: 0xa000f202, 0x4ec1: 0xa000f302, 0x4ec2: 0xa000f402, 0x4ec3: 0x4046e820, + 0x4ec4: 0x4046ea20, 0x4ec5: 0x4046ec20, 0x4ec6: 0x4046ee20, 0x4ec7: 0x4046f020, + 0x4ec8: 0x4046f220, 0x4ec9: 0x4046f420, 0x4eca: 0x4046f620, 0x4ecb: 0x4046f820, + 0x4ecc: 0x4046fa20, 0x4ecd: 0x4046fc20, 0x4ece: 0x4046fe20, 0x4ecf: 0x40470020, + 0x4ed0: 0x40470220, 0x4ed1: 0x40470420, 0x4ed2: 0x40470620, 0x4ed3: 0x40470820, + 0x4ed4: 0x40470a20, 0x4ed5: 0x40470c20, 0x4ed6: 0x40470e20, 0x4ed7: 0x40471020, + 0x4ed8: 0x40471220, 0x4ed9: 0x40471420, 0x4eda: 0x40471620, 0x4edb: 0x40471820, + 0x4edc: 0x40471a20, 0x4edd: 0x40471c20, 0x4ede: 0x40471e20, 0x4edf: 0x40472020, + 0x4ee0: 0x40472220, 0x4ee1: 0x40472420, 0x4ee2: 0x40472620, 0x4ee3: 0x40472820, + 0x4ee4: 0x40472a20, 0x4ee5: 0x40472c20, 0x4ee6: 0x40472e20, 0x4ee7: 0x40473020, + 0x4ee8: 0x40473220, 0x4ee9: 0x40473420, 0x4eea: 0x40473620, 0x4eeb: 0x40473820, + 0x4eec: 0x40473a20, 0x4eed: 0x40473c20, 0x4eee: 0x40473e20, 0x4eef: 0x40474020, + 0x4ef0: 0x40474220, 0x4ef1: 0x40474420, 0x4ef2: 0x40474620, 0x4ef3: 0x40474820, + 0x4ef4: 0x40474a20, 0x4ef5: 0x40474c20, 0x4ef6: 0x40474e20, 0x4ef7: 0x40475020, + 0x4ef8: 0x40475220, 0x4ef9: 0x40475420, 0x4efa: 0x40475620, 0x4efb: 0x40475820, + 0x4efc: 0x40475a20, 0x4efd: 0x40475c20, 0x4efe: 0x40475e20, 0x4eff: 0x40476020, + // Block 0x13c, offset 0x4f00 + 0x4f00: 0x820923b1, 0x4f01: 0x40476420, 0x4f02: 0x40476620, 0x4f03: 0x40476820, + 0x4f04: 0x4046e620, 0x4f05: 0x40035420, 0x4f06: 0x40035620, 0x4f07: 0x40061a20, + 0x4f08: 0x40039a20, + 0x4f10: 0xe00001d9, 0x4f11: 0xe00002a0, 0x4f12: 0xe00003bb, 0x4f13: 0xe0000495, + 0x4f14: 0xe0000567, 0x4f15: 0xe0000631, 0x4f16: 0xe00006e1, 0x4f17: 0xe0000789, + 0x4f18: 0xe0000832, 0x4f19: 0xe00008dd, + // Block 0x13d, offset 0x4f40 + 0x4f40: 0x40476a20, 0x4f41: 0x40476c20, 0x4f42: 0x40476e20, 0x4f43: 0x40477020, + 0x4f44: 0x40477220, 0x4f45: 0x40477420, 0x4f46: 0x40477620, 0x4f47: 0x40477820, + 0x4f48: 0x40477a20, 0x4f49: 0x40477c20, 0x4f4a: 0x40478420, 0x4f4b: 0x40478620, + 0x4f4c: 0x40478820, 0x4f4d: 0x40478a20, 0x4f4e: 0x40478c20, 0x4f4f: 0x40478e20, + 0x4f50: 0x40479020, 0x4f51: 0x40479220, 0x4f52: 0x40479420, 0x4f53: 0x40479620, + 0x4f54: 0x40479820, 0x4f55: 0x40479a20, 0x4f56: 0x40479c20, 0x4f57: 0x40479e20, + 0x4f58: 0x4047a020, 0x4f59: 0x4047a220, 0x4f5a: 0x4047a420, 0x4f5b: 0x4047a620, + 0x4f5c: 0x4047a820, 0x4f5d: 0x4047aa20, 0x4f5e: 0x4047ac20, 0x4f5f: 0x4047ae20, + 0x4f60: 0x4047b020, 0x4f61: 0x4047b220, 0x4f62: 0x4047b420, 0x4f63: 0x4047b620, + 0x4f64: 0x4047b820, 0x4f65: 0x4047ba20, 0x4f66: 0x4047bc20, 0x4f67: 0x40478020, + 0x4f68: 0x40477e20, 0x4f69: 0x40478220, 0x4f6a: 0x4047be20, 0x4f6b: 0xa000f302, + 0x4f6c: 0xa000f402, 0x4f6d: 0x4047c020, 0x4f6e: 0x4047c220, 0x4f6f: 0x4047c420, + 0x4f70: 0x4047c620, 0x4f71: 0x4047c820, 0x4f72: 0x4047ca20, 0x4f73: 0x4047cc20, + 0x4f74: 0x4047ce20, 0x4f75: 0x4047d020, 0x4f76: 0x820923e9, 0x4f77: 0xa070f102, + // Block 0x13e, offset 0x4f80 + 0x4f80: 0xe00001dc, 0x4f81: 0xe00002a3, 0x4f82: 0xe00003be, 0x4f83: 0xe0000498, + 0x4f84: 0xe000056a, 0x4f85: 0xe0000634, 0x4f86: 0xe00006e4, 0x4f87: 0xe000078c, + 0x4f88: 0xe0000835, 0x4f89: 0xe00008e0, + // Block 0x13f, offset 0x4fc0 + 0x4fc0: 0x4076e420, 0x4fc1: 0x4076e620, 0x4fc2: 0x4076e820, 0x4fc3: 0x4076ea20, + 0x4fc4: 0x4076ec20, 0x4fc5: 0x4076ee20, 0x4fc6: 0x4076f020, 0x4fc7: 0x4076f220, + 0x4fc8: 0x4076f420, 0x4fc9: 0x4076f620, 0x4fca: 0x4076f820, 0x4fcb: 0x4076fa20, + 0x4fcc: 0x4076fc20, 0x4fcd: 0x4076fe20, 0x4fce: 0x40770020, 0x4fcf: 0x40770220, + 0x4fd0: 0x40770420, 0x4fd1: 0x40770620, 0x4fd2: 0x40770820, 0x4fd3: 0x40770a20, + 0x4fd4: 0x40770c20, 0x4fd5: 0x40770e20, 0x4fd6: 0x40771020, 0x4fd7: 0x40771220, + 0x4fd8: 0x40771420, 0x4fd9: 0x40771620, 0x4fda: 0x40771820, 0x4fdb: 0x40771a20, + 0x4fdc: 0x40771c20, 0x4fdd: 0x40771e20, 0x4fde: 0x40772020, 0x4fdf: 0x40772220, + 0x4fe0: 0x40772420, 0x4fe1: 0x40772620, 0x4fe2: 0x40772820, 0x4fe3: 0x40772a20, + 0x4fe4: 0x40772c20, 0x4fe5: 0x40772e20, 0x4fe6: 0x40773020, 0x4fe7: 0x40773220, + 0x4fe8: 0x40773420, 0x4fe9: 0x40773620, 0x4fea: 0x40773820, 0x4feb: 0x40773a20, + 0x4fec: 0x40773c20, 0x4fed: 0x40773e20, 0x4fee: 0x40774020, 0x4fef: 0x40774220, + 0x4ff0: 0x40774420, 0x4ff1: 0x40774620, 0x4ff2: 0x40774820, 0x4ff3: 0x40774a20, + 0x4ff4: 0x40774c20, 0x4ff5: 0x40774e20, 0x4ff6: 0x40775020, 0x4ff7: 0x40775220, + 0x4ff8: 0x40775420, 0x4ff9: 0x40775620, 0x4ffa: 0x40775820, 0x4ffb: 0x40775a20, + 0x4ffc: 0x40775c20, 0x4ffd: 0x40775e20, 0x4ffe: 0x40776020, 0x4fff: 0x40776220, + // Block 0x140, offset 0x5000 + 0x5000: 0x40776420, 0x5001: 0x40776620, 0x5002: 0x40776820, 0x5003: 0x40776a20, + 0x5004: 0x40776c20, 0x5005: 0x40776e20, 0x5006: 0x40777020, 0x5007: 0x40777220, + 0x5008: 0x40777420, 0x5009: 0x40777620, 0x500a: 0x40777820, 0x500b: 0x40777a20, + 0x500c: 0x40777c20, 0x500d: 0x40777e20, 0x500e: 0x40778020, 0x500f: 0x40778220, + 0x5010: 0x40778420, 0x5011: 0x40778620, 0x5012: 0x40778820, 0x5013: 0x40778a20, + 0x5014: 0x40778c20, 0x5015: 0x40778e20, 0x5016: 0x40779020, 0x5017: 0x40779220, + 0x5018: 0x40779420, 0x5019: 0x40779620, 0x501a: 0x40779820, 0x501b: 0x40779a20, + 0x501c: 0x40779c20, 0x501d: 0x40779e20, 0x501e: 0x4077a020, 0x501f: 0x4077a220, + 0x5020: 0x4077a420, 0x5021: 0x4077a620, 0x5022: 0x4077a820, 0x5023: 0x4077aa20, + 0x5024: 0x4077ac20, 0x5025: 0x4077ae20, 0x5026: 0x4077b020, 0x5027: 0x4077b220, + 0x5028: 0x4077b420, 0x5029: 0x4077b620, 0x502a: 0x4077b820, 0x502b: 0x4077ba20, + 0x502c: 0x4077bc20, 0x502d: 0x4077be20, 0x502e: 0x4077c020, 0x502f: 0x4077c220, + 0x5030: 0x4077c420, 0x5031: 0x4077c620, 0x5032: 0x4077c820, 0x5033: 0x4077ca20, + 0x5034: 0x4077cc20, 0x5035: 0x4077ce20, 0x5036: 0x4077d020, 0x5037: 0x4077d220, + 0x5038: 0x4077d420, 0x5039: 0x4077d620, 0x503a: 0x4077d820, 0x503b: 0x4077da20, + 0x503c: 0x4077dc20, 0x503d: 0x4077de20, 0x503e: 0x4077e020, 0x503f: 0x4077e220, + // Block 0x141, offset 0x5040 + 0x5040: 0x4077e420, 0x5041: 0x4077e620, 0x5042: 0x4077e820, 0x5043: 0x4077ea20, + 0x5044: 0x4077ec20, 0x5045: 0x4077ee20, 0x5046: 0x4077f020, 0x5047: 0x4077f220, + 0x5048: 0x4077f420, 0x5049: 0x4077f620, 0x504a: 0x4077f820, 0x504b: 0x4077fa20, + 0x504c: 0x4077fc20, 0x504d: 0x4077fe20, 0x504e: 0x40780020, 0x504f: 0x40780220, + 0x5050: 0x40780420, 0x5051: 0x40780620, 0x5052: 0x40780820, 0x5053: 0x40780a20, + 0x5054: 0x40780c20, 0x5055: 0x40780e20, 0x5056: 0x40781020, 0x5057: 0x40781220, + 0x5058: 0x40781420, 0x5059: 0x40781620, 0x505a: 0x40781820, 0x505b: 0x40781a20, + 0x505c: 0x40781c20, 0x505d: 0x40781e20, 0x505e: 0x40782020, 0x505f: 0x40782220, + 0x5060: 0x40782420, 0x5061: 0x40782620, 0x5062: 0x40782820, 0x5063: 0x40782a20, + 0x5064: 0x40782c20, 0x5065: 0x40782e20, 0x5066: 0x40783020, 0x5067: 0x40783220, + 0x5068: 0x40783420, 0x5069: 0x40783620, 0x506a: 0x40783820, 0x506b: 0x40783a20, + 0x506c: 0x40783c20, 0x506d: 0x40783e20, 0x506e: 0x40784020, 0x506f: 0x40784220, + 0x5070: 0x40784420, 0x5071: 0x40784620, 0x5072: 0x40784820, 0x5073: 0x40784a20, + 0x5074: 0x40784c20, 0x5075: 0x40784e20, 0x5076: 0x40785020, 0x5077: 0x40785220, + 0x5078: 0x40785420, 0x5079: 0x40785620, 0x507a: 0x40785820, 0x507b: 0x40785a20, + 0x507c: 0x40785c20, 0x507d: 0x40785e20, 0x507e: 0x40786020, 0x507f: 0x40786220, + // Block 0x142, offset 0x5080 + 0x5080: 0x40786420, 0x5081: 0x40786620, 0x5082: 0x40786820, 0x5083: 0x40786a20, + 0x5084: 0x40786c20, 0x5085: 0x40786e20, 0x5086: 0x40787020, 0x5087: 0x40787220, + 0x5088: 0x40787420, 0x5089: 0x40787620, 0x508a: 0x40787820, 0x508b: 0x40787a20, + 0x508c: 0x40787c20, 0x508d: 0x40787e20, 0x508e: 0x40788020, 0x508f: 0x40788220, + 0x5090: 0x40788420, 0x5091: 0x40788620, 0x5092: 0x40788820, 0x5093: 0x40788a20, + 0x5094: 0x40788c20, 0x5095: 0x40788e20, 0x5096: 0x40789020, 0x5097: 0x40789220, + 0x5098: 0x40789420, 0x5099: 0x40789620, 0x509a: 0x40789820, 0x509b: 0x40789a20, + 0x509c: 0x40789c20, 0x509d: 0x40789e20, 0x509e: 0x4078a020, 0x509f: 0x4078a220, + 0x50a0: 0x4078a420, 0x50a1: 0x4078a620, 0x50a2: 0x4078a820, 0x50a3: 0x4078aa20, + 0x50a4: 0x4078ac20, 0x50a5: 0x4078ae20, 0x50a6: 0x4078b020, 0x50a7: 0x4078b220, + 0x50a8: 0x4078b420, 0x50a9: 0x4078b620, 0x50aa: 0x4078b820, 0x50ab: 0x4078ba20, + 0x50ac: 0x4078bc20, 0x50ad: 0x4078be20, 0x50ae: 0x4078c020, 0x50af: 0x4078c220, + 0x50b0: 0x4078c420, 0x50b1: 0x4078c620, 0x50b2: 0x4078c820, 0x50b3: 0x4078ca20, + 0x50b4: 0x4078cc20, 0x50b5: 0x4078ce20, 0x50b6: 0x4078d020, 0x50b7: 0x4078d220, + 0x50b8: 0x4078d420, 0x50b9: 0x4078d620, 0x50ba: 0x4078d820, 0x50bb: 0x4078da20, + 0x50bc: 0x4078dc20, 0x50bd: 0x4078de20, 0x50be: 0x4078e020, 0x50bf: 0x4078e220, + // Block 0x143, offset 0x50c0 + 0x50c0: 0x4078e420, 0x50c1: 0x4078e620, 0x50c2: 0x4078e820, 0x50c3: 0x4078ea20, + 0x50c4: 0x4078ec20, 0x50c5: 0x4078ee20, 0x50c6: 0x4078f020, 0x50c7: 0x4078f220, + 0x50c8: 0x4078f420, 0x50c9: 0x4078f620, 0x50ca: 0x4078f820, 0x50cb: 0x4078fa20, + 0x50cc: 0x4078fc20, 0x50cd: 0x4078fe20, 0x50ce: 0x40790020, 0x50cf: 0x40790220, + 0x50d0: 0x40790420, 0x50d1: 0x40790620, 0x50d2: 0x40790820, 0x50d3: 0x40790a20, + 0x50d4: 0x40790c20, 0x50d5: 0x40790e20, 0x50d6: 0x40791020, 0x50d7: 0x40791220, + 0x50d8: 0x40791420, 0x50d9: 0x40791620, 0x50da: 0x40791820, 0x50db: 0x40791a20, + 0x50dc: 0x40791c20, 0x50dd: 0x40791e20, 0x50de: 0x40792020, 0x50df: 0x40792220, + 0x50e0: 0x40792420, 0x50e1: 0x40792620, 0x50e2: 0x40792820, 0x50e3: 0x40792a20, + 0x50e4: 0x40792c20, 0x50e5: 0x40792e20, 0x50e6: 0x40793020, 0x50e7: 0x40793220, + 0x50e8: 0x40793420, 0x50e9: 0x40793620, 0x50ea: 0x40793820, 0x50eb: 0x40793a20, + 0x50ec: 0x40793c20, 0x50ed: 0x40793e20, 0x50ee: 0x40794020, 0x50ef: 0x40794220, + 0x50f0: 0x40794420, 0x50f1: 0x40794620, 0x50f2: 0x40794820, 0x50f3: 0x40794a20, + 0x50f4: 0x40794c20, 0x50f5: 0x40794e20, 0x50f6: 0x40795020, 0x50f7: 0x40795220, + 0x50f8: 0x40795420, 0x50f9: 0x40795620, 0x50fa: 0x40795820, 0x50fb: 0x40795a20, + 0x50fc: 0x40795c20, 0x50fd: 0x40795e20, 0x50fe: 0x40796020, 0x50ff: 0x40796220, + // Block 0x144, offset 0x5100 + 0x5100: 0x40796420, 0x5101: 0x40796620, 0x5102: 0x40796820, 0x5103: 0x40796a20, + 0x5104: 0x40796c20, 0x5105: 0x40796e20, 0x5106: 0x40797020, 0x5107: 0x40797220, + 0x5108: 0x40797420, 0x5109: 0x40797620, 0x510a: 0x40797820, 0x510b: 0x40797a20, + 0x510c: 0x40797c20, 0x510d: 0x40797e20, 0x510e: 0x40798020, 0x510f: 0x40798220, + 0x5110: 0x40798420, 0x5111: 0x40798620, 0x5112: 0x40798820, 0x5113: 0x40798a20, + 0x5114: 0x40798c20, 0x5115: 0x40798e20, 0x5116: 0x40799020, 0x5117: 0x40799220, + 0x5118: 0x40799420, 0x5119: 0x40799620, 0x511a: 0x40799820, 0x511b: 0x40799a20, + 0x511c: 0x40799c20, 0x511d: 0x40799e20, 0x511e: 0x4079a020, 0x511f: 0x4079a220, + 0x5120: 0x4079a420, 0x5121: 0x4079a620, 0x5122: 0x4079a820, 0x5123: 0x4079aa20, + 0x5124: 0x4079ac20, 0x5125: 0x4079ae20, 0x5126: 0x4079b020, 0x5127: 0x4079b220, + 0x5128: 0x4079b420, 0x5129: 0x4079b620, 0x512a: 0x4079b820, 0x512b: 0x4079ba20, + 0x512c: 0x4079bc20, 0x512d: 0x4079be20, 0x512e: 0x4079c020, 0x512f: 0x4079c220, + 0x5130: 0x4079c420, 0x5131: 0x4079c620, 0x5132: 0x4079c820, 0x5133: 0x4079ca20, + 0x5134: 0x4079cc20, 0x5135: 0x4079ce20, 0x5136: 0x4079d020, 0x5137: 0x4079d220, + 0x5138: 0x4079d420, 0x5139: 0x4079d620, 0x513a: 0x4079d820, 0x513b: 0x4079da20, + 0x513c: 0x4079dc20, 0x513d: 0x4079de20, 0x513e: 0x4079e020, 0x513f: 0x4079e220, + // Block 0x145, offset 0x5140 + 0x5140: 0x4079e420, 0x5141: 0x4079e620, 0x5142: 0x4079e820, 0x5143: 0x4079ea20, + 0x5144: 0x4079ec20, 0x5145: 0x4079ee20, 0x5146: 0x4079f020, 0x5147: 0x4079f220, + 0x5148: 0x4079f420, 0x5149: 0x4079f620, 0x514a: 0x4079f820, 0x514b: 0x4079fa20, + 0x514c: 0x4079fc20, 0x514d: 0x4079fe20, 0x514e: 0x407a0020, 0x514f: 0x407a0220, + 0x5150: 0x407a0420, 0x5151: 0x407a0620, 0x5152: 0x407a0820, 0x5153: 0x407a0a20, + 0x5154: 0x407a0c20, 0x5155: 0x407a0e20, 0x5156: 0x407a1020, 0x5157: 0x407a1220, + 0x5158: 0x407a1420, 0x5159: 0x407a1620, 0x515a: 0x407a1820, 0x515b: 0x407a1a20, + 0x515c: 0x407a1c20, 0x515d: 0x407a1e20, 0x515e: 0x407a2020, 0x515f: 0x407a2220, + 0x5160: 0x407a2420, 0x5161: 0x407a2620, 0x5162: 0x407a2820, 0x5163: 0x407a2a20, + 0x5164: 0x407a2c20, 0x5165: 0x407a2e20, 0x5166: 0x407a3020, 0x5167: 0x407a3220, + 0x5168: 0x407a3420, 0x5169: 0x407a3620, 0x516a: 0x407a3820, 0x516b: 0x407a3a20, + 0x516c: 0x407a3c20, 0x516d: 0x407a3e20, 0x516e: 0x407a4020, 0x516f: 0x407a4220, + 0x5170: 0x407a4420, 0x5171: 0x407a4620, 0x5172: 0x407a4820, 0x5173: 0x407a4a20, + 0x5174: 0x407a4c20, 0x5175: 0x407a4e20, 0x5176: 0x407a5020, 0x5177: 0x407a5220, + 0x5178: 0x407a5420, 0x5179: 0x407a5620, 0x517a: 0x407a5820, 0x517b: 0x407a5a20, + 0x517c: 0x407a5c20, 0x517d: 0x407a5e20, 0x517e: 0x407a6020, 0x517f: 0x407a6220, + // Block 0x146, offset 0x5180 + 0x5180: 0x407a6420, 0x5181: 0x407a6620, 0x5182: 0x407a6820, 0x5183: 0x407a6a20, + 0x5184: 0x407a6c20, 0x5185: 0x407a6e20, 0x5186: 0x407a7020, 0x5187: 0x407a7220, + 0x5188: 0x407a7420, 0x5189: 0x407a7620, 0x518a: 0x407a7820, 0x518b: 0x407a7a20, + 0x518c: 0x407a7c20, 0x518d: 0x407a7e20, 0x518e: 0x407a8020, 0x518f: 0x407a8220, + 0x5190: 0x407a8420, 0x5191: 0x407a8620, 0x5192: 0x407a8820, 0x5193: 0x407a8a20, + 0x5194: 0x407a8c20, 0x5195: 0x407a8e20, 0x5196: 0x407a9020, 0x5197: 0x407a9220, + 0x5198: 0x407a9420, 0x5199: 0x407a9620, 0x519a: 0x407a9820, 0x519b: 0x407a9a20, + 0x519c: 0x407a9c20, 0x519d: 0x407a9e20, 0x519e: 0x407aa020, 0x519f: 0x407aa220, + 0x51a0: 0x407aa420, 0x51a1: 0x407aa620, 0x51a2: 0x407aa820, 0x51a3: 0x407aaa20, + 0x51a4: 0x407aac20, 0x51a5: 0x407aae20, 0x51a6: 0x407ab020, 0x51a7: 0x407ab220, + 0x51a8: 0x407ab420, 0x51a9: 0x407ab620, 0x51aa: 0x407ab820, 0x51ab: 0x407aba20, + 0x51ac: 0x407abc20, 0x51ad: 0x407abe20, 0x51ae: 0x407ac020, 0x51af: 0x407ac220, + 0x51b0: 0x407ac420, 0x51b1: 0x407ac620, 0x51b2: 0x407ac820, 0x51b3: 0x407aca20, + 0x51b4: 0x407acc20, 0x51b5: 0x407ace20, 0x51b6: 0x407ad020, 0x51b7: 0x407ad220, + 0x51b8: 0x407ad420, 0x51b9: 0x407ad620, 0x51ba: 0x407ad820, 0x51bb: 0x407ada20, + 0x51bc: 0x407adc20, 0x51bd: 0x407ade20, 0x51be: 0x407ae020, 0x51bf: 0x407ae220, + // Block 0x147, offset 0x51c0 + 0x51c0: 0x407ae420, 0x51c1: 0x407ae620, 0x51c2: 0x407ae820, 0x51c3: 0x407aea20, + 0x51c4: 0x407aec20, 0x51c5: 0x407aee20, 0x51c6: 0x407af020, 0x51c7: 0x407af220, + 0x51c8: 0x407af420, 0x51c9: 0x407af620, 0x51ca: 0x407af820, 0x51cb: 0x407afa20, + 0x51cc: 0x407afc20, 0x51cd: 0x407afe20, 0x51ce: 0x407b0020, 0x51cf: 0x407b0220, + 0x51d0: 0x407b0420, 0x51d1: 0x407b0620, 0x51d2: 0x407b0820, 0x51d3: 0x407b0a20, + 0x51d4: 0x407b0c20, 0x51d5: 0x407b0e20, 0x51d6: 0x407b1020, 0x51d7: 0x407b1220, + 0x51d8: 0x407b1420, 0x51d9: 0x407b1620, 0x51da: 0x407b1820, 0x51db: 0x407b1a20, + 0x51dc: 0x407b1c20, 0x51dd: 0x407b1e20, 0x51de: 0x407b2020, 0x51df: 0x407b2220, + 0x51e0: 0x407b2420, 0x51e1: 0x407b2620, 0x51e2: 0x407b2820, 0x51e3: 0x407b2a20, + 0x51e4: 0x407b2c20, 0x51e5: 0x407b2e20, 0x51e6: 0x407b3020, 0x51e7: 0x407b3220, + 0x51e8: 0x407b3420, 0x51e9: 0x407b3620, 0x51ea: 0x407b3820, 0x51eb: 0x407b3a20, + 0x51ec: 0x407b3c20, 0x51ed: 0x407b3e20, 0x51ee: 0x407b4020, 0x51ef: 0x407b4220, + 0x51f0: 0x407b4420, 0x51f1: 0x407b4620, 0x51f2: 0x407b4820, 0x51f3: 0x407b4a20, + 0x51f4: 0x407b4c20, 0x51f5: 0x407b4e20, 0x51f6: 0x407b5020, 0x51f7: 0x407b5220, + 0x51f8: 0x407b5420, 0x51f9: 0x407b5620, 0x51fa: 0x407b5820, 0x51fb: 0x407b5a20, + 0x51fc: 0x407b5c20, 0x51fd: 0x407b5e20, 0x51fe: 0x407b6020, 0x51ff: 0x407b6220, + // Block 0x148, offset 0x5200 + 0x5200: 0x407b6420, 0x5201: 0x407b6620, 0x5202: 0x407b6820, 0x5203: 0x407b6a20, + 0x5204: 0x407b6c20, 0x5205: 0x407b6e20, 0x5206: 0x407b7020, 0x5207: 0x407b7220, + 0x5208: 0x407b7420, 0x5209: 0x407b7620, 0x520a: 0x407b7820, 0x520b: 0x407b7a20, + 0x520c: 0x407b7c20, 0x520d: 0x407b7e20, 0x520e: 0x407b8020, 0x520f: 0x407b8220, + 0x5210: 0x407b8420, 0x5211: 0x407b8620, 0x5212: 0x407b8820, 0x5213: 0x407b8a20, + 0x5214: 0x407b8c20, 0x5215: 0x407b8e20, 0x5216: 0x407b9020, 0x5217: 0x407b9220, + 0x5218: 0x407b9420, 0x5219: 0x407b9620, 0x521a: 0x407b9820, 0x521b: 0x407b9a20, + 0x521c: 0x407b9c20, 0x521d: 0x407b9e20, 0x521e: 0x407ba020, 0x521f: 0x407ba220, + 0x5220: 0x407ba420, 0x5221: 0x407ba620, 0x5222: 0x407ba820, 0x5223: 0x407baa20, + 0x5224: 0x407bac20, 0x5225: 0x407bae20, 0x5226: 0x407bb020, 0x5227: 0x407bb220, + 0x5228: 0x407bb420, 0x5229: 0x407bb620, 0x522a: 0x407bb820, 0x522b: 0x407bba20, + 0x522c: 0x407bbc20, 0x522d: 0x407bbe20, 0x522e: 0x407bc020, 0x522f: 0x407bc220, + 0x5230: 0x407bc420, 0x5231: 0x407bc620, 0x5232: 0x407bc820, 0x5233: 0x407bca20, + 0x5234: 0x407bcc20, 0x5235: 0x407bce20, 0x5236: 0x407bd020, 0x5237: 0x407bd220, + 0x5238: 0x407bd420, 0x5239: 0x407bd620, 0x523a: 0x407bd820, 0x523b: 0x407bda20, + 0x523c: 0x407bdc20, 0x523d: 0x407bde20, 0x523e: 0x407be020, 0x523f: 0x407be220, + // Block 0x149, offset 0x5240 + 0x5240: 0x407be420, 0x5241: 0x407be620, 0x5242: 0x407be820, 0x5243: 0x407bea20, + 0x5244: 0x407bec20, 0x5245: 0x407bee20, 0x5246: 0x407bf020, 0x5247: 0x407bf220, + 0x5248: 0x407bf420, 0x5249: 0x407bf620, 0x524a: 0x407bf820, 0x524b: 0x407bfa20, + 0x524c: 0x407bfc20, 0x524d: 0x407bfe20, 0x524e: 0x407c0020, 0x524f: 0x407c0220, + 0x5250: 0x407c0420, 0x5251: 0x407c0620, 0x5252: 0x407c0820, 0x5253: 0x407c0a20, + 0x5254: 0x407c0c20, 0x5255: 0x407c0e20, 0x5256: 0x407c1020, 0x5257: 0x407c1220, + 0x5258: 0x407c1420, 0x5259: 0x407c1620, 0x525a: 0x407c1820, 0x525b: 0x407c1a20, + 0x525c: 0x407c1c20, 0x525d: 0x407c1e20, 0x525e: 0x407c2020, 0x525f: 0x407c2220, + 0x5260: 0x407c2420, 0x5261: 0x407c2620, 0x5262: 0x407c2820, 0x5263: 0x407c2a20, + 0x5264: 0x407c2c20, 0x5265: 0x407c2e20, 0x5266: 0x407c3020, 0x5267: 0x407c3220, + 0x5268: 0x407c3420, 0x5269: 0x407c3620, 0x526a: 0x407c3820, 0x526b: 0x407c3a20, + 0x526c: 0x407c3c20, 0x526d: 0x407c3e20, 0x526e: 0x407c4020, 0x526f: 0x407c4220, + 0x5270: 0x407c4420, 0x5271: 0x407c4620, 0x5272: 0x407c4820, 0x5273: 0x407c4a20, + 0x5274: 0x407c4c20, 0x5275: 0x407c4e20, 0x5276: 0x407c5020, 0x5277: 0x407c5220, + 0x5278: 0x407c5420, 0x5279: 0x407c5620, 0x527a: 0x407c5820, 0x527b: 0x407c5a20, + 0x527c: 0x407c5c20, 0x527d: 0x407c5e20, 0x527e: 0x407c6020, 0x527f: 0x407c6220, + // Block 0x14a, offset 0x5280 + 0x5280: 0x407c6420, 0x5281: 0x407c6620, 0x5282: 0x407c6820, 0x5283: 0x407c6a20, + 0x5284: 0x407c6c20, 0x5285: 0x407c6e20, 0x5286: 0x407c7020, 0x5287: 0x407c7220, + 0x5288: 0x407c7420, 0x5289: 0x407c7620, 0x528a: 0x407c7820, 0x528b: 0x407c7a20, + 0x528c: 0x407c7c20, 0x528d: 0x407c7e20, 0x528e: 0x407c8020, 0x528f: 0x407c8220, + 0x5290: 0x407c8420, 0x5291: 0x407c8620, 0x5292: 0x407c8820, 0x5293: 0x407c8a20, + 0x5294: 0x407c8c20, 0x5295: 0x407c8e20, 0x5296: 0x407c9020, 0x5297: 0x407c9220, + 0x5298: 0x407c9420, 0x5299: 0x407c9620, 0x529a: 0x407c9820, 0x529b: 0x407c9a20, + 0x529c: 0x407c9c20, 0x529d: 0x407c9e20, 0x529e: 0x407ca020, 0x529f: 0x407ca220, + 0x52a0: 0x407ca420, 0x52a1: 0x407ca620, 0x52a2: 0x407ca820, 0x52a3: 0x407caa20, + 0x52a4: 0x407cac20, 0x52a5: 0x407cae20, 0x52a6: 0x407cb020, 0x52a7: 0x407cb220, + 0x52a8: 0x407cb420, 0x52a9: 0x407cb620, 0x52aa: 0x407cb820, 0x52ab: 0x407cba20, + 0x52ac: 0x407cbc20, 0x52ad: 0x407cbe20, 0x52ae: 0x407cc020, 0x52af: 0x407cc220, + 0x52b0: 0x407cc420, 0x52b1: 0x407cc620, 0x52b2: 0x407cc820, 0x52b3: 0x407cca20, + 0x52b4: 0x407ccc20, 0x52b5: 0x407cce20, 0x52b6: 0x407cd020, 0x52b7: 0x407cd220, + 0x52b8: 0x407cd420, 0x52b9: 0x407cd620, 0x52ba: 0x407cd820, 0x52bb: 0x407cda20, + 0x52bc: 0x407cdc20, 0x52bd: 0x407cde20, 0x52be: 0x407ce020, 0x52bf: 0x407ce220, + // Block 0x14b, offset 0x52c0 + 0x52c0: 0x407ce420, 0x52c1: 0x407ce620, 0x52c2: 0x407ce820, 0x52c3: 0x407cea20, + 0x52c4: 0x407cec20, 0x52c5: 0x407cee20, 0x52c6: 0x407cf020, 0x52c7: 0x407cf220, + 0x52c8: 0x407cf420, 0x52c9: 0x407cf620, 0x52ca: 0x407cf820, 0x52cb: 0x407cfa20, + 0x52cc: 0x407cfc20, 0x52cd: 0x407cfe20, 0x52ce: 0x407d0020, 0x52cf: 0x407d0220, + 0x52d0: 0x407d0420, 0x52d1: 0x407d0620, 0x52d2: 0x407d0820, 0x52d3: 0x407d0a20, + 0x52d4: 0x407d0c20, 0x52d5: 0x407d0e20, 0x52d6: 0x407d1020, 0x52d7: 0x407d1220, + 0x52d8: 0x407d1420, 0x52d9: 0x407d1620, 0x52da: 0x407d1820, 0x52db: 0x407d1a20, + 0x52dc: 0x407d1c20, 0x52dd: 0x407d1e20, 0x52de: 0x407d2020, 0x52df: 0x407d2220, + 0x52e0: 0x407d2420, 0x52e1: 0x407d2620, 0x52e2: 0x407d2820, 0x52e3: 0x407d2a20, + 0x52e4: 0x407d2c20, 0x52e5: 0x407d2e20, 0x52e6: 0x407d3020, 0x52e7: 0x407d3220, + 0x52e8: 0x407d3420, 0x52e9: 0x407d3620, 0x52ea: 0x407d3820, 0x52eb: 0x407d3a20, + 0x52ec: 0x407d3c20, 0x52ed: 0x407d3e20, 0x52ee: 0x407d4020, 0x52ef: 0x407d4220, + 0x52f0: 0x407d4420, 0x52f1: 0x407d4620, 0x52f2: 0x407d4820, 0x52f3: 0x407d4a20, + 0x52f4: 0x407d4c20, 0x52f5: 0x407d4e20, 0x52f6: 0x407d5020, 0x52f7: 0x407d5220, + 0x52f8: 0x407d5420, 0x52f9: 0x407d5620, 0x52fa: 0x407d5820, 0x52fb: 0x407d5a20, + 0x52fc: 0x407d5c20, 0x52fd: 0x407d5e20, 0x52fe: 0x407d6020, 0x52ff: 0x407d6220, + // Block 0x14c, offset 0x5300 + 0x5300: 0x407d6420, 0x5301: 0x407d6620, 0x5302: 0x407d6820, 0x5303: 0x407d6a20, + 0x5304: 0x407d6c20, 0x5305: 0x407d6e20, 0x5306: 0x407d7020, 0x5307: 0x407d7220, + 0x5308: 0x407d7420, 0x5309: 0x407d7620, 0x530a: 0x407d7820, 0x530b: 0x407d7a20, + 0x530c: 0x407d7c20, 0x530d: 0x407d7e20, 0x530e: 0x407d8020, 0x530f: 0x407d8220, + 0x5310: 0x407d8420, 0x5311: 0x407d8620, 0x5312: 0x407d8820, 0x5313: 0x407d8a20, + 0x5314: 0x407d8c20, 0x5315: 0x407d8e20, 0x5316: 0x407d9020, 0x5317: 0x407d9220, + 0x5318: 0x407d9420, 0x5319: 0x407d9620, 0x531a: 0x407d9820, 0x531b: 0x407d9a20, + 0x531c: 0x407d9c20, 0x531d: 0x407d9e20, 0x531e: 0x407da020, 0x531f: 0x407da220, + 0x5320: 0x407da420, 0x5321: 0x407da620, 0x5322: 0x407da820, 0x5323: 0x407daa20, + 0x5324: 0x407dac20, 0x5325: 0x407dae20, 0x5326: 0x407db020, 0x5327: 0x407db220, + 0x5328: 0x407db420, 0x5329: 0x407db620, 0x532a: 0x407db820, 0x532b: 0x407dba20, + 0x532c: 0x407dbc20, 0x532d: 0x407dbe20, 0x532e: 0x407dc020, + // Block 0x14d, offset 0x5340 + 0x5340: 0xe0000394, 0x5341: 0xe000045f, 0x5342: 0xe0000534, 0x5343: 0xe0000610, + 0x5344: 0xe00006cc, 0x5345: 0xe0000771, 0x5346: 0xe000081d, 0x5347: 0xe00008c2, + 0x5348: 0xe0000462, 0x5349: 0xe0000537, 0x534a: 0xe0000613, 0x534b: 0xe00006cf, + 0x534c: 0xe0000774, 0x534d: 0xe0000820, 0x534e: 0xe00008c5, 0x534f: 0xe000053a, + 0x5350: 0xe0000616, 0x5351: 0xe00006d2, 0x5352: 0xe0000777, 0x5353: 0xe0000823, + 0x5354: 0xe00008c8, 0x5355: 0xe000027f, 0x5356: 0xe0000397, 0x5357: 0xe0000465, + 0x5358: 0xe000053d, 0x5359: 0xe0000619, 0x535a: 0xe00006d5, 0x535b: 0xe000077a, + 0x535c: 0xe0000826, 0x535d: 0xe00008cb, 0x535e: 0xe0000282, 0x535f: 0xe000039a, + 0x5360: 0xe0000468, 0x5361: 0xe0000540, 0x5362: 0xe000061c, 0x5363: 0xe000039d, + 0x5364: 0xe000046b, 0x5365: 0xe000046e, 0x5366: 0xe0000543, 0x5367: 0xe000061f, + 0x5368: 0xe00006d8, 0x5369: 0xe000077d, 0x536a: 0xe0000829, 0x536b: 0xe00008ce, + 0x536c: 0xe0000285, 0x536d: 0xe00003a0, 0x536e: 0xe0000471, 0x536f: 0xe0000474, + 0x5370: 0xe0000546, 0x5371: 0xe0000622, 0x5372: 0x4029a020, 0x5373: 0x4029a220, + 0x5374: 0xe0000288, 0x5375: 0xe00003a3, 0x5376: 0xe0000477, 0x5377: 0xe000047a, + 0x5378: 0xe0000549, 0x5379: 0xe0000625, 0x537a: 0xe000047d, 0x537b: 0xe0000480, + 0x537c: 0xe000054c, 0x537d: 0xe000054f, 0x537e: 0xe0000552, 0x537f: 0xe0000555, + // Block 0x14e, offset 0x5380 + 0x5380: 0xe00006db, 0x5381: 0xe0000780, 0x5382: 0xe0000783, 0x5383: 0xe0000786, + 0x5384: 0xe000082c, 0x5385: 0xe000082f, 0x5386: 0xe00008d1, 0x5387: 0xe00008d4, + 0x5388: 0xe00008d7, 0x5389: 0xe00008da, 0x538a: 0xe00003a6, 0x538b: 0xe0000483, + 0x538c: 0xe0000558, 0x538d: 0xe0000628, 0x538e: 0xe00006de, 0x538f: 0xe000028b, + 0x5390: 0xe00003a9, 0x5391: 0xe0000486, 0x5392: 0xe000055b, 0x5393: 0xe000055e, + 0x5394: 0xe000062b, 0x5395: 0xe000062e, 0x5396: 0x4029a420, 0x5397: 0x4029a620, + 0x5398: 0xe000028e, 0x5399: 0xe00003ac, 0x539a: 0x4029a820, 0x539b: 0x4029aa20, + 0x539c: 0x4029ac20, 0x539d: 0x4029ae20, 0x539e: 0x4029b020, 0x539f: 0x4029b220, + 0x53a0: 0x4029b420, 0x53a1: 0x4029b620, 0x53a2: 0x4029b820, + 0x53b0: 0x4003ca20, 0x53b1: 0x4003cc20, 0x53b2: 0x4003ce20, 0x53b3: 0x4003d020, + // Block 0x14f, offset 0x53c0 + 0x53c0: 0x407dc220, 0x53c1: 0x407dc420, 0x53c2: 0x407dc620, 0x53c3: 0x407dc820, + 0x53c4: 0x407dca20, 0x53c5: 0x407dcc20, 0x53c6: 0x407dce20, 0x53c7: 0x407dd020, + 0x53c8: 0x407dd220, 0x53c9: 0x407dd420, 0x53ca: 0x407dd620, 0x53cb: 0x407dd820, + 0x53cc: 0x407dda20, 0x53cd: 0x407ddc20, 0x53ce: 0x407dde20, 0x53cf: 0x407de020, + 0x53d0: 0x407de220, 0x53d1: 0x407de420, 0x53d2: 0x407de620, 0x53d3: 0x407de820, + 0x53d4: 0x407dea20, 0x53d5: 0x407dec20, 0x53d6: 0x407dee20, 0x53d7: 0x407df020, + 0x53d8: 0x407df220, 0x53d9: 0x407df420, 0x53da: 0x407df620, 0x53db: 0x407df820, + 0x53dc: 0x407dfa20, 0x53dd: 0x407dfc20, 0x53de: 0x407dfe20, 0x53df: 0x407e0020, + 0x53e0: 0x407e0220, 0x53e1: 0x407e0420, 0x53e2: 0x407e0620, 0x53e3: 0x407e0820, + 0x53e4: 0x407e0a20, 0x53e5: 0x407e0c20, 0x53e6: 0x407e0e20, 0x53e7: 0x407e1020, + 0x53e8: 0x407e1220, 0x53e9: 0x407e1420, 0x53ea: 0x407e1620, 0x53eb: 0x407e1820, + 0x53ec: 0x407e1a20, 0x53ed: 0x407e1c20, 0x53ee: 0x407e1e20, 0x53ef: 0x407e2020, + 0x53f0: 0x407e2220, 0x53f1: 0x407e2420, 0x53f2: 0x407e2620, 0x53f3: 0x407e2820, + 0x53f4: 0x407e2a20, 0x53f5: 0x407e2c20, 0x53f6: 0x407e2e20, 0x53f7: 0x407e3020, + 0x53f8: 0x407e3220, 0x53f9: 0x407e3420, 0x53fa: 0x407e3620, 0x53fb: 0x407e3820, + 0x53fc: 0x407e3a20, 0x53fd: 0x407e3c20, 0x53fe: 0x407e3e20, 0x53ff: 0x407e4020, + // Block 0x150, offset 0x5400 + 0x5400: 0x407e4220, 0x5401: 0x407e4420, 0x5402: 0x407e4620, 0x5403: 0x407e4820, + 0x5404: 0x407e4a20, 0x5405: 0x407e4c20, 0x5406: 0x407e4e20, 0x5407: 0x407e5020, + 0x5408: 0x407e5220, 0x5409: 0x407e5420, 0x540a: 0x407e5620, 0x540b: 0x407e5820, + 0x540c: 0x407e5a20, 0x540d: 0x407e5c20, 0x540e: 0x407e5e20, 0x540f: 0x407e6020, + 0x5410: 0x407e6220, 0x5411: 0x407e6420, 0x5412: 0x407e6620, 0x5413: 0x407e6820, + 0x5414: 0x407e6a20, 0x5415: 0x407e6c20, 0x5416: 0x407e6e20, 0x5417: 0x407e7020, + 0x5418: 0x407e7220, 0x5419: 0x407e7420, 0x541a: 0x407e7620, 0x541b: 0x407e7820, + 0x541c: 0x407e7a20, 0x541d: 0x407e7c20, 0x541e: 0x407e7e20, 0x541f: 0x407e8020, + 0x5420: 0x407e8220, 0x5421: 0x407e8420, 0x5422: 0x407e8620, 0x5423: 0x407e8820, + 0x5424: 0x407e8a20, 0x5425: 0x407e8c20, 0x5426: 0x407e8e20, 0x5427: 0x407e9020, + 0x5428: 0x407e9220, 0x5429: 0x407e9420, 0x542a: 0x407e9620, 0x542b: 0x407e9820, + 0x542c: 0x407e9a20, 0x542d: 0x407e9c20, 0x542e: 0x407e9e20, 0x542f: 0x407ea020, + 0x5430: 0x407ea220, 0x5431: 0x407ea420, 0x5432: 0x407ea620, 0x5433: 0x407ea820, + 0x5434: 0x407eaa20, 0x5435: 0x407eac20, 0x5436: 0x407eae20, 0x5437: 0x407eb020, + 0x5438: 0x407eb220, 0x5439: 0x407eb420, 0x543a: 0x407eb620, 0x543b: 0x407eb820, + 0x543c: 0x407eba20, 0x543d: 0x407ebc20, 0x543e: 0x407ebe20, 0x543f: 0x407ec020, + // Block 0x151, offset 0x5440 + 0x5440: 0x407ec220, 0x5441: 0x407ec420, 0x5442: 0x407ec620, 0x5443: 0x407ec820, + 0x5444: 0x407eca20, 0x5445: 0x407ecc20, 0x5446: 0x407ece20, 0x5447: 0x407ed020, + 0x5448: 0x407ed220, 0x5449: 0x407ed420, 0x544a: 0x407ed620, 0x544b: 0x407ed820, + 0x544c: 0x407eda20, 0x544d: 0x407edc20, 0x544e: 0x407ede20, 0x544f: 0x407ee020, + 0x5450: 0x407ee220, 0x5451: 0x407ee420, 0x5452: 0x407ee620, 0x5453: 0x407ee820, + 0x5454: 0x407eea20, 0x5455: 0x407eec20, 0x5456: 0x407eee20, 0x5457: 0x407ef020, + 0x5458: 0x407ef220, 0x5459: 0x407ef420, 0x545a: 0x407ef620, 0x545b: 0x407ef820, + 0x545c: 0x407efa20, 0x545d: 0x407efc20, 0x545e: 0x407efe20, 0x545f: 0x407f0020, + 0x5460: 0x407f0220, 0x5461: 0x407f0420, 0x5462: 0x407f0620, 0x5463: 0x407f0820, + 0x5464: 0x407f0a20, 0x5465: 0x407f0c20, 0x5466: 0x407f0e20, 0x5467: 0x407f1020, + 0x5468: 0x407f1220, 0x5469: 0x407f1420, 0x546a: 0x407f1620, 0x546b: 0x407f1820, + 0x546c: 0x407f1a20, 0x546d: 0x407f1c20, 0x546e: 0x407f1e20, 0x546f: 0x407f2020, + 0x5470: 0x407f2220, 0x5471: 0x407f2420, 0x5472: 0x407f2620, 0x5473: 0x407f2820, + 0x5474: 0x407f2a20, 0x5475: 0x407f2c20, 0x5476: 0x407f2e20, 0x5477: 0x407f3020, + 0x5478: 0x407f3220, 0x5479: 0x407f3420, 0x547a: 0x407f3620, 0x547b: 0x407f3820, + 0x547c: 0x407f3a20, 0x547d: 0x407f3c20, 0x547e: 0x407f3e20, 0x547f: 0x407f4020, + // Block 0x152, offset 0x5480 + 0x5480: 0x407f4220, 0x5481: 0x407f4420, 0x5482: 0x407f4620, 0x5483: 0x407f4820, + 0x5484: 0x407f4a20, 0x5485: 0x407f4c20, 0x5486: 0x407f4e20, 0x5487: 0x407f5020, + 0x5488: 0x407f5220, 0x5489: 0x407f5420, 0x548a: 0x407f5620, 0x548b: 0x407f5820, + 0x548c: 0x407f5a20, 0x548d: 0x407f5c20, 0x548e: 0x407f5e20, 0x548f: 0x407f6020, + 0x5490: 0x407f6220, 0x5491: 0x407f6420, 0x5492: 0x407f6620, 0x5493: 0x407f6820, + 0x5494: 0x407f6a20, 0x5495: 0x407f6c20, 0x5496: 0x407f6e20, 0x5497: 0x407f7020, + 0x5498: 0x407f7220, 0x5499: 0x407f7420, 0x549a: 0x407f7620, 0x549b: 0x407f7820, + 0x549c: 0x407f7a20, 0x549d: 0x407f7c20, 0x549e: 0x407f7e20, 0x549f: 0x407f8020, + 0x54a0: 0x407f8220, 0x54a1: 0x407f8420, 0x54a2: 0x407f8620, 0x54a3: 0x407f8820, + 0x54a4: 0x407f8a20, 0x54a5: 0x407f8c20, 0x54a6: 0x407f8e20, 0x54a7: 0x407f9020, + 0x54a8: 0x407f9220, 0x54a9: 0x407f9420, 0x54aa: 0x407f9620, 0x54ab: 0x407f9820, + 0x54ac: 0x407f9a20, 0x54ad: 0x407f9c20, 0x54ae: 0x407f9e20, 0x54af: 0x407fa020, + 0x54b0: 0x407fa220, 0x54b1: 0x407fa420, 0x54b2: 0x407fa620, 0x54b3: 0x407fa820, + 0x54b4: 0x407faa20, 0x54b5: 0x407fac20, 0x54b6: 0x407fae20, 0x54b7: 0x407fb020, + 0x54b8: 0x407fb220, 0x54b9: 0x407fb420, 0x54ba: 0x407fb620, 0x54bb: 0x407fb820, + 0x54bc: 0x407fba20, 0x54bd: 0x407fbc20, 0x54be: 0x407fbe20, 0x54bf: 0x407fc020, + // Block 0x153, offset 0x54c0 + 0x54c0: 0x407fc220, 0x54c1: 0x407fc420, 0x54c2: 0x407fc620, 0x54c3: 0x407fc820, + 0x54c4: 0x407fca20, 0x54c5: 0x407fcc20, 0x54c6: 0x407fce20, 0x54c7: 0x407fd020, + 0x54c8: 0x407fd220, 0x54c9: 0x407fd420, 0x54ca: 0x407fd620, 0x54cb: 0x407fd820, + 0x54cc: 0x407fda20, 0x54cd: 0x407fdc20, 0x54ce: 0x407fde20, 0x54cf: 0x407fe020, + 0x54d0: 0x407fe220, 0x54d1: 0x407fe420, 0x54d2: 0x407fe620, 0x54d3: 0x407fe820, + 0x54d4: 0x407fea20, 0x54d5: 0x407fec20, 0x54d6: 0x407fee20, 0x54d7: 0x407ff020, + 0x54d8: 0x407ff220, 0x54d9: 0x407ff420, 0x54da: 0x407ff620, 0x54db: 0x407ff820, + 0x54dc: 0x407ffa20, 0x54dd: 0x407ffc20, 0x54de: 0x407ffe20, 0x54df: 0x40800020, + 0x54e0: 0x40800220, 0x54e1: 0x40800420, 0x54e2: 0x40800620, 0x54e3: 0x40800820, + 0x54e4: 0x40800a20, 0x54e5: 0x40800c20, 0x54e6: 0x40800e20, 0x54e7: 0x40801020, + 0x54e8: 0x40801220, 0x54e9: 0x40801420, 0x54ea: 0x40801620, 0x54eb: 0x40801820, + 0x54ec: 0x40801a20, 0x54ed: 0x40801c20, 0x54ee: 0x40801e20, 0x54ef: 0x40802020, + 0x54f0: 0x40802220, 0x54f1: 0x40802420, 0x54f2: 0x40802620, 0x54f3: 0x40802820, + 0x54f4: 0x40802a20, 0x54f5: 0x40802c20, 0x54f6: 0x40802e20, 0x54f7: 0x40803020, + 0x54f8: 0x40803220, 0x54f9: 0x40803420, 0x54fa: 0x40803620, 0x54fb: 0x40803820, + 0x54fc: 0x40803a20, 0x54fd: 0x40803c20, 0x54fe: 0x40803e20, 0x54ff: 0x40804020, + // Block 0x154, offset 0x5500 + 0x5500: 0x40804220, 0x5501: 0x40804420, 0x5502: 0x40804620, 0x5503: 0x40804820, + 0x5504: 0x40804a20, 0x5505: 0x40804c20, 0x5506: 0x40804e20, 0x5507: 0x40805020, + 0x5508: 0x40805220, 0x5509: 0x40805420, 0x550a: 0x40805620, 0x550b: 0x40805820, + 0x550c: 0x40805a20, 0x550d: 0x40805c20, 0x550e: 0x40805e20, 0x550f: 0x40806020, + 0x5510: 0x40806220, 0x5511: 0x40806420, 0x5512: 0x40806620, 0x5513: 0x40806820, + 0x5514: 0x40806a20, 0x5515: 0x40806c20, 0x5516: 0x40806e20, 0x5517: 0x40807020, + 0x5518: 0x40807220, 0x5519: 0x40807420, 0x551a: 0x40807620, 0x551b: 0x40807820, + 0x551c: 0x40807a20, 0x551d: 0x40807c20, 0x551e: 0x40807e20, 0x551f: 0x40808020, + 0x5520: 0x40808220, 0x5521: 0x40808420, 0x5522: 0x40808620, 0x5523: 0x40808820, + 0x5524: 0x40808a20, 0x5525: 0x40808c20, 0x5526: 0x40808e20, 0x5527: 0x40809020, + 0x5528: 0x40809220, 0x5529: 0x40809420, 0x552a: 0x40809620, 0x552b: 0x40809820, + 0x552c: 0x40809a20, 0x552d: 0x40809c20, 0x552e: 0x40809e20, 0x552f: 0x4080a020, + 0x5530: 0x4080a220, 0x5531: 0x4080a420, 0x5532: 0x4080a620, 0x5533: 0x4080a820, + 0x5534: 0x4080aa20, 0x5535: 0x4080ac20, 0x5536: 0x4080ae20, 0x5537: 0x4080b020, + 0x5538: 0x4080b220, 0x5539: 0x4080b420, 0x553a: 0x4080b620, 0x553b: 0x4080b820, + 0x553c: 0x4080ba20, 0x553d: 0x4080bc20, 0x553e: 0x4080be20, 0x553f: 0x4080c020, + // Block 0x155, offset 0x5540 + 0x5540: 0x4080c220, 0x5541: 0x4080c420, 0x5542: 0x4080c620, 0x5543: 0x4080c820, + 0x5544: 0x4080ca20, 0x5545: 0x4080cc20, 0x5546: 0x4080ce20, 0x5547: 0x4080d020, + 0x5548: 0x4080d220, 0x5549: 0x4080d420, 0x554a: 0x4080d620, 0x554b: 0x4080d820, + 0x554c: 0x4080da20, 0x554d: 0x4080dc20, 0x554e: 0x4080de20, 0x554f: 0x4080e020, + 0x5550: 0x4080e220, 0x5551: 0x4080e420, 0x5552: 0x4080e620, 0x5553: 0x4080e820, + 0x5554: 0x4080ea20, 0x5555: 0x4080ec20, 0x5556: 0x4080ee20, 0x5557: 0x4080f020, + 0x5558: 0x4080f220, 0x5559: 0x4080f420, 0x555a: 0x4080f620, 0x555b: 0x4080f820, + 0x555c: 0x4080fa20, 0x555d: 0x4080fc20, 0x555e: 0x4080fe20, 0x555f: 0x40810020, + 0x5560: 0x40810220, 0x5561: 0x40810420, 0x5562: 0x40810620, 0x5563: 0x40810820, + 0x5564: 0x40810a20, 0x5565: 0x40810c20, 0x5566: 0x40810e20, 0x5567: 0x40811020, + 0x5568: 0x40811220, 0x5569: 0x40811420, 0x556a: 0x40811620, 0x556b: 0x40811820, + 0x556c: 0x40811a20, 0x556d: 0x40811c20, 0x556e: 0x40811e20, 0x556f: 0x40812020, + 0x5570: 0x40812220, 0x5571: 0x40812420, 0x5572: 0x40812620, 0x5573: 0x40812820, + 0x5574: 0x40812a20, 0x5575: 0x40812c20, 0x5576: 0x40812e20, 0x5577: 0x40813020, + 0x5578: 0x40813220, 0x5579: 0x40813420, 0x557a: 0x40813620, 0x557b: 0x40813820, + 0x557c: 0x40813a20, 0x557d: 0x40813c20, 0x557e: 0x40813e20, 0x557f: 0x40814020, + // Block 0x156, offset 0x5580 + 0x5580: 0x40814220, 0x5581: 0x40814420, 0x5582: 0x40814620, 0x5583: 0x40814820, + 0x5584: 0x40814a20, 0x5585: 0x40814c20, 0x5586: 0x40814e20, 0x5587: 0x40815020, + 0x5588: 0x40815220, 0x5589: 0x40815420, 0x558a: 0x40815620, 0x558b: 0x40815820, + 0x558c: 0x40815a20, 0x558d: 0x40815c20, 0x558e: 0x40815e20, 0x558f: 0x40816020, + 0x5590: 0x40816220, 0x5591: 0x40816420, 0x5592: 0x40816620, 0x5593: 0x40816820, + 0x5594: 0x40816a20, 0x5595: 0x40816c20, 0x5596: 0x40816e20, 0x5597: 0x40817020, + 0x5598: 0x40817220, 0x5599: 0x40817420, 0x559a: 0x40817620, 0x559b: 0x40817820, + 0x559c: 0x40817a20, 0x559d: 0x40817c20, 0x559e: 0x40817e20, 0x559f: 0x40818020, + 0x55a0: 0x40818220, 0x55a1: 0x40818420, 0x55a2: 0x40818620, 0x55a3: 0x40818820, + 0x55a4: 0x40818a20, 0x55a5: 0x40818c20, 0x55a6: 0x40818e20, 0x55a7: 0x40819020, + 0x55a8: 0x40819220, 0x55a9: 0x40819420, 0x55aa: 0x40819620, 0x55ab: 0x40819820, + 0x55ac: 0x40819a20, 0x55ad: 0x40819c20, 0x55ae: 0x40819e20, 0x55af: 0x4081a020, + 0x55b0: 0x4081a220, 0x55b1: 0x4081a420, 0x55b2: 0x4081a620, 0x55b3: 0x4081a820, + 0x55b4: 0x4081aa20, 0x55b5: 0x4081ac20, 0x55b6: 0x4081ae20, 0x55b7: 0x4081b020, + 0x55b8: 0x4081b220, 0x55b9: 0x4081b420, 0x55ba: 0x4081b620, 0x55bb: 0x4081b820, + 0x55bc: 0x4081ba20, 0x55bd: 0x4081bc20, 0x55be: 0x4081be20, 0x55bf: 0x4081c020, + // Block 0x157, offset 0x55c0 + 0x55c0: 0x4081c220, 0x55c1: 0x4081c420, 0x55c2: 0x4081c620, 0x55c3: 0x4081c820, + 0x55c4: 0x4081ca20, 0x55c5: 0x4081cc20, 0x55c6: 0x4081ce20, 0x55c7: 0x4081d020, + 0x55c8: 0x4081d220, 0x55c9: 0x4081d420, 0x55ca: 0x4081d620, 0x55cb: 0x4081d820, + 0x55cc: 0x4081da20, 0x55cd: 0x4081dc20, 0x55ce: 0x4081de20, 0x55cf: 0x4081e020, + 0x55d0: 0x4081e220, 0x55d1: 0x4081e420, 0x55d2: 0x4081e620, 0x55d3: 0x4081e820, + 0x55d4: 0x4081ea20, 0x55d5: 0x4081ec20, 0x55d6: 0x4081ee20, 0x55d7: 0x4081f020, + 0x55d8: 0x4081f220, 0x55d9: 0x4081f420, 0x55da: 0x4081f620, 0x55db: 0x4081f820, + 0x55dc: 0x4081fa20, 0x55dd: 0x4081fc20, 0x55de: 0x4081fe20, 0x55df: 0x40820020, + 0x55e0: 0x40820220, 0x55e1: 0x40820420, 0x55e2: 0x40820620, 0x55e3: 0x40820820, + 0x55e4: 0x40820a20, 0x55e5: 0x40820c20, 0x55e6: 0x40820e20, 0x55e7: 0x40821020, + 0x55e8: 0x40821220, 0x55e9: 0x40821420, 0x55ea: 0x40821620, 0x55eb: 0x40821820, + 0x55ec: 0x40821a20, 0x55ed: 0x40821c20, 0x55ee: 0x40821e20, 0x55ef: 0x40822020, + 0x55f0: 0x40822220, 0x55f1: 0x40822420, 0x55f2: 0x40822620, 0x55f3: 0x40822820, + 0x55f4: 0x40822a20, 0x55f5: 0x40822c20, 0x55f6: 0x40822e20, 0x55f7: 0x40823020, + 0x55f8: 0x40823220, 0x55f9: 0x40823420, 0x55fa: 0x40823620, 0x55fb: 0x40823820, + 0x55fc: 0x40823a20, 0x55fd: 0x40823c20, 0x55fe: 0x40823e20, 0x55ff: 0x40824020, + // Block 0x158, offset 0x5600 + 0x5600: 0x40824220, 0x5601: 0x40824420, 0x5602: 0x40824620, 0x5603: 0x40824820, + 0x5604: 0x40824a20, 0x5605: 0x40824c20, 0x5606: 0x40824e20, 0x5607: 0x40825020, + 0x5608: 0x40825220, 0x5609: 0x40825420, 0x560a: 0x40825620, 0x560b: 0x40825820, + 0x560c: 0x40825a20, 0x560d: 0x40825c20, 0x560e: 0x40825e20, 0x560f: 0x40826020, + 0x5610: 0x40826220, 0x5611: 0x40826420, 0x5612: 0x40826620, 0x5613: 0x40826820, + 0x5614: 0x40826a20, 0x5615: 0x40826c20, 0x5616: 0x40826e20, 0x5617: 0x40827020, + 0x5618: 0x40827220, 0x5619: 0x40827420, 0x561a: 0x40827620, 0x561b: 0x40827820, + 0x561c: 0x40827a20, 0x561d: 0x40827c20, 0x561e: 0x40827e20, 0x561f: 0x40828020, + 0x5620: 0x40828220, 0x5621: 0x40828420, 0x5622: 0x40828620, 0x5623: 0x40828820, + 0x5624: 0x40828a20, 0x5625: 0x40828c20, 0x5626: 0x40828e20, 0x5627: 0x40829020, + 0x5628: 0x40829220, 0x5629: 0x40829420, 0x562a: 0x40829620, 0x562b: 0x40829820, + 0x562c: 0x40829a20, 0x562d: 0x40829c20, 0x562e: 0x40829e20, 0x562f: 0x4082a020, + 0x5630: 0x4082a220, 0x5631: 0x4082a420, 0x5632: 0x4082a620, 0x5633: 0x4082a820, + 0x5634: 0x4082aa20, 0x5635: 0x4082ac20, 0x5636: 0x4082ae20, 0x5637: 0x4082b020, + 0x5638: 0x4082b220, 0x5639: 0x4082b420, 0x563a: 0x4082b620, 0x563b: 0x4082b820, + 0x563c: 0x4082ba20, 0x563d: 0x4082bc20, 0x563e: 0x4082be20, 0x563f: 0x4082c020, + // Block 0x159, offset 0x5640 + 0x5640: 0x4082c220, 0x5641: 0x4082c420, 0x5642: 0x4082c620, 0x5643: 0x4082c820, + 0x5644: 0x4082ca20, 0x5645: 0x4082cc20, 0x5646: 0x4082ce20, 0x5647: 0x4082d020, + 0x5648: 0x4082d220, 0x5649: 0x4082d420, 0x564a: 0x4082d620, 0x564b: 0x4082d820, + 0x564c: 0x4082da20, 0x564d: 0x4082dc20, 0x564e: 0x4082de20, 0x564f: 0x4082e020, + 0x5650: 0x4082e220, 0x5651: 0x4082e420, 0x5652: 0x4082e620, 0x5653: 0x4082e820, + 0x5654: 0x4082ea20, 0x5655: 0x4082ec20, 0x5656: 0x4082ee20, 0x5657: 0x4082f020, + 0x5658: 0x4082f220, 0x5659: 0x4082f420, 0x565a: 0x4082f620, 0x565b: 0x4082f820, + 0x565c: 0x4082fa20, 0x565d: 0x4082fc20, 0x565e: 0x4082fe20, 0x565f: 0x40830020, + 0x5660: 0x40830220, 0x5661: 0x40830420, 0x5662: 0x40830620, 0x5663: 0x40830820, + 0x5664: 0x40830a20, 0x5665: 0x40830c20, 0x5666: 0x40830e20, 0x5667: 0x40831020, + 0x5668: 0x40831220, 0x5669: 0x40831420, 0x566a: 0x40831620, 0x566b: 0x40831820, + 0x566c: 0x40831a20, 0x566d: 0x40831c20, 0x566e: 0x40831e20, 0x566f: 0x40832020, + 0x5670: 0x40832220, 0x5671: 0x40832420, 0x5672: 0x40832620, 0x5673: 0x40832820, + 0x5674: 0x40832a20, 0x5675: 0x40832c20, 0x5676: 0x40832e20, 0x5677: 0x40833020, + 0x5678: 0x40833220, 0x5679: 0x40833420, 0x567a: 0x40833620, 0x567b: 0x40833820, + 0x567c: 0x40833a20, 0x567d: 0x40833c20, 0x567e: 0x40833e20, 0x567f: 0x40834020, + // Block 0x15a, offset 0x5680 + 0x5680: 0x40834220, 0x5681: 0x40834420, 0x5682: 0x40834620, 0x5683: 0x40834820, + 0x5684: 0x40834a20, 0x5685: 0x40834c20, 0x5686: 0x40834e20, 0x5687: 0x40835020, + 0x5688: 0x40835220, 0x5689: 0x40835420, 0x568a: 0x40835620, 0x568b: 0x40835820, + 0x568c: 0x40835a20, 0x568d: 0x40835c20, 0x568e: 0x40835e20, 0x568f: 0x40836020, + 0x5690: 0x40836220, 0x5691: 0x40836420, 0x5692: 0x40836620, 0x5693: 0x40836820, + 0x5694: 0x40836a20, 0x5695: 0x40836c20, 0x5696: 0x40836e20, 0x5697: 0x40837020, + 0x5698: 0x40837220, 0x5699: 0x40837420, 0x569a: 0x40837620, 0x569b: 0x40837820, + 0x569c: 0x40837a20, 0x569d: 0x40837c20, 0x569e: 0x40837e20, 0x569f: 0x40838020, + 0x56a0: 0x40838220, 0x56a1: 0x40838420, 0x56a2: 0x40838620, 0x56a3: 0x40838820, + 0x56a4: 0x40838a20, 0x56a5: 0x40838c20, 0x56a6: 0x40838e20, 0x56a7: 0x40839020, + 0x56a8: 0x40839220, 0x56a9: 0x40839420, 0x56aa: 0x40839620, 0x56ab: 0x40839820, + 0x56ac: 0x40839a20, 0x56ad: 0x40839c20, 0x56ae: 0x40839e20, 0x56af: 0x4083a020, + 0x56b0: 0x4083a220, 0x56b1: 0x4083a420, 0x56b2: 0x4083a620, 0x56b3: 0x4083a820, + 0x56b4: 0x4083aa20, 0x56b5: 0x4083ac20, 0x56b6: 0x4083ae20, 0x56b7: 0x4083b020, + 0x56b8: 0x4083b220, 0x56b9: 0x4083b420, 0x56ba: 0x4083b620, 0x56bb: 0x4083b820, + 0x56bc: 0x4083ba20, 0x56bd: 0x4083bc20, 0x56be: 0x4083be20, 0x56bf: 0x4083c020, + // Block 0x15b, offset 0x56c0 + 0x56c0: 0x4083c220, 0x56c1: 0x4083c420, 0x56c2: 0x4083c620, 0x56c3: 0x4083c820, + 0x56c4: 0x4083ca20, 0x56c5: 0x4083cc20, 0x56c6: 0x4083ce20, 0x56c7: 0x4083d020, + 0x56c8: 0x4083d220, 0x56c9: 0x4083d420, 0x56ca: 0x4083d620, 0x56cb: 0x4083d820, + 0x56cc: 0x4083da20, 0x56cd: 0x4083dc20, 0x56ce: 0x4083de20, 0x56cf: 0x4083e020, + 0x56d0: 0x4083e220, 0x56d1: 0x4083e420, 0x56d2: 0x4083e620, 0x56d3: 0x4083e820, + 0x56d4: 0x4083ea20, 0x56d5: 0x4083ec20, 0x56d6: 0x4083ee20, 0x56d7: 0x4083f020, + 0x56d8: 0x4083f220, 0x56d9: 0x4083f420, 0x56da: 0x4083f620, 0x56db: 0x4083f820, + 0x56dc: 0x4083fa20, 0x56dd: 0x4083fc20, 0x56de: 0x4083fe20, 0x56df: 0x40840020, + 0x56e0: 0x40840220, 0x56e1: 0x40840420, 0x56e2: 0x40840620, 0x56e3: 0x40840820, + 0x56e4: 0x40840a20, 0x56e5: 0x40840c20, 0x56e6: 0x40840e20, 0x56e7: 0x40841020, + 0x56e8: 0x40841220, 0x56e9: 0x40841420, 0x56ea: 0x40841620, 0x56eb: 0x40841820, + 0x56ec: 0x40841a20, 0x56ed: 0x40841c20, 0x56ee: 0x40841e20, 0x56ef: 0x40842020, + 0x56f0: 0x40842220, 0x56f1: 0x40842420, 0x56f2: 0x40842620, 0x56f3: 0x40842820, + 0x56f4: 0x40842a20, 0x56f5: 0x40842c20, 0x56f6: 0x40842e20, 0x56f7: 0x40843020, + 0x56f8: 0x40843220, 0x56f9: 0x40843420, 0x56fa: 0x40843620, 0x56fb: 0x40843820, + 0x56fc: 0x40843a20, 0x56fd: 0x40843c20, 0x56fe: 0x40843e20, 0x56ff: 0x40844020, + // Block 0x15c, offset 0x5700 + 0x5700: 0x40844220, 0x5701: 0x40844420, 0x5702: 0x40844620, 0x5703: 0x40844820, + 0x5704: 0x40844a20, 0x5705: 0x40844c20, 0x5706: 0x40844e20, 0x5707: 0x40845020, + 0x5708: 0x40845220, 0x5709: 0x40845420, 0x570a: 0x40845620, 0x570b: 0x40845820, + 0x570c: 0x40845a20, 0x570d: 0x40845c20, 0x570e: 0x40845e20, 0x570f: 0x40846020, + 0x5710: 0x40846220, 0x5711: 0x40846420, 0x5712: 0x40846620, 0x5713: 0x40846820, + 0x5714: 0x40846a20, 0x5715: 0x40846c20, 0x5716: 0x40846e20, 0x5717: 0x40847020, + 0x5718: 0x40847220, 0x5719: 0x40847420, 0x571a: 0x40847620, 0x571b: 0x40847820, + 0x571c: 0x40847a20, 0x571d: 0x40847c20, 0x571e: 0x40847e20, 0x571f: 0x40848020, + 0x5720: 0x40848220, 0x5721: 0x40848420, 0x5722: 0x40848620, 0x5723: 0x40848820, + 0x5724: 0x40848a20, 0x5725: 0x40848c20, 0x5726: 0x40848e20, 0x5727: 0x40849020, + 0x5728: 0x40849220, 0x5729: 0x40849420, 0x572a: 0x40849620, 0x572b: 0x40849820, + 0x572c: 0x40849a20, 0x572d: 0x40849c20, 0x572e: 0x40849e20, 0x572f: 0x4084a020, + 0x5730: 0x4084a220, 0x5731: 0x4084a420, 0x5732: 0x4084a620, 0x5733: 0x4084a820, + 0x5734: 0x4084aa20, 0x5735: 0x4084ac20, 0x5736: 0x4084ae20, 0x5737: 0x4084b020, + 0x5738: 0x4084b220, 0x5739: 0x4084b420, 0x573a: 0x4084b620, 0x573b: 0x4084b820, + 0x573c: 0x4084ba20, 0x573d: 0x4084bc20, 0x573e: 0x4084be20, 0x573f: 0x4084c020, + // Block 0x15d, offset 0x5740 + 0x5740: 0x4084c220, 0x5741: 0x4084c420, 0x5742: 0x4084c620, 0x5743: 0x4084c820, + 0x5744: 0x4084ca20, 0x5745: 0x4084cc20, 0x5746: 0x4084ce20, 0x5747: 0x4084d020, + 0x5748: 0x4084d220, 0x5749: 0x4084d420, 0x574a: 0x4084d620, 0x574b: 0x4084d820, + 0x574c: 0x4084da20, 0x574d: 0x4084dc20, 0x574e: 0x4084de20, 0x574f: 0x4084e020, + 0x5750: 0x4084e220, 0x5751: 0x4084e420, 0x5752: 0x4084e620, 0x5753: 0x4084e820, + 0x5754: 0x4084ea20, 0x5755: 0x4084ec20, 0x5756: 0x4084ee20, 0x5757: 0x4084f020, + 0x5758: 0x4084f220, 0x5759: 0x4084f420, 0x575a: 0x4084f620, 0x575b: 0x4084f820, + 0x575c: 0x4084fa20, 0x575d: 0x4084fc20, 0x575e: 0x4084fe20, 0x575f: 0x40850020, + 0x5760: 0x40850220, 0x5761: 0x40850420, 0x5762: 0x40850620, 0x5763: 0x40850820, + 0x5764: 0x40850a20, 0x5765: 0x40850c20, 0x5766: 0x40850e20, 0x5767: 0x40851020, + 0x5768: 0x40851220, 0x5769: 0x40851420, 0x576a: 0x40851620, 0x576b: 0x40851820, + 0x576c: 0x40851a20, 0x576d: 0x40851c20, 0x576e: 0x40851e20, 0x576f: 0x40852020, + 0x5770: 0x40852220, 0x5771: 0x40852420, 0x5772: 0x40852620, 0x5773: 0x40852820, + 0x5774: 0x40852a20, 0x5775: 0x40852c20, 0x5776: 0x40852e20, 0x5777: 0x40853020, + 0x5778: 0x40853220, 0x5779: 0x40853420, 0x577a: 0x40853620, 0x577b: 0x40853820, + 0x577c: 0x40853a20, 0x577d: 0x40853c20, 0x577e: 0x40853e20, 0x577f: 0x40854020, + // Block 0x15e, offset 0x5780 + 0x5780: 0x40854220, 0x5781: 0x40854420, 0x5782: 0x40854620, 0x5783: 0x40854820, + 0x5784: 0x40854a20, 0x5785: 0x40854c20, 0x5786: 0x40854e20, 0x5787: 0x40855020, + 0x5788: 0x40855220, 0x5789: 0x40855420, 0x578a: 0x40855620, 0x578b: 0x40855820, + 0x578c: 0x40855a20, 0x578d: 0x40855c20, 0x578e: 0x40855e20, 0x578f: 0x40856020, + 0x5790: 0x40856220, 0x5791: 0x40856420, 0x5792: 0x40856620, 0x5793: 0x40856820, + 0x5794: 0x40856a20, 0x5795: 0x40856c20, 0x5796: 0x40856e20, 0x5797: 0x40857020, + 0x5798: 0x40857220, 0x5799: 0x40857420, 0x579a: 0x40857620, 0x579b: 0x40857820, + 0x579c: 0x40857a20, 0x579d: 0x40857c20, 0x579e: 0x40857e20, 0x579f: 0x40858020, + 0x57a0: 0x40858220, 0x57a1: 0x40858420, 0x57a2: 0x40858620, 0x57a3: 0x40858820, + 0x57a4: 0x40858a20, 0x57a5: 0x40858c20, 0x57a6: 0x40858e20, 0x57a7: 0x40859020, + 0x57a8: 0x40859220, 0x57a9: 0x40859420, 0x57aa: 0x40859620, 0x57ab: 0x40859820, + 0x57ac: 0x40859a20, 0x57ad: 0x40859c20, 0x57ae: 0x40859e20, 0x57af: 0x4085a020, + 0x57b0: 0x4085a220, 0x57b1: 0x4085a420, 0x57b2: 0x4085a620, 0x57b3: 0x4085a820, + 0x57b4: 0x4085aa20, 0x57b5: 0x4085ac20, 0x57b6: 0x4085ae20, 0x57b7: 0x4085b020, + 0x57b8: 0x4085b220, 0x57b9: 0x4085b420, 0x57ba: 0x4085b620, 0x57bb: 0x4085b820, + 0x57bc: 0x4085ba20, 0x57bd: 0x4085bc20, 0x57be: 0x4085be20, 0x57bf: 0x4085c020, + // Block 0x15f, offset 0x57c0 + 0x57c0: 0x4085c220, 0x57c1: 0x4085c420, 0x57c2: 0x4085c620, 0x57c3: 0x4085c820, + 0x57c4: 0x4085ca20, 0x57c5: 0x4085cc20, 0x57c6: 0x4085ce20, 0x57c7: 0x4085d020, + 0x57c8: 0x4085d220, 0x57c9: 0x4085d420, 0x57ca: 0x4085d620, 0x57cb: 0x4085d820, + 0x57cc: 0x4085da20, 0x57cd: 0x4085dc20, 0x57ce: 0x4085de20, 0x57cf: 0x4085e020, + 0x57d0: 0x4085e220, 0x57d1: 0x4085e420, 0x57d2: 0x4085e620, 0x57d3: 0x4085e820, + 0x57d4: 0x4085ea20, 0x57d5: 0x4085ec20, 0x57d6: 0x4085ee20, 0x57d7: 0x4085f020, + 0x57d8: 0x4085f220, 0x57d9: 0x4085f420, 0x57da: 0x4085f620, 0x57db: 0x4085f820, + 0x57dc: 0x4085fa20, 0x57dd: 0x4085fc20, 0x57de: 0x4085fe20, 0x57df: 0x40860020, + 0x57e0: 0x40860220, 0x57e1: 0x40860420, 0x57e2: 0x40860620, 0x57e3: 0x40860820, + 0x57e4: 0x40860a20, 0x57e5: 0x40860c20, 0x57e6: 0x40860e20, 0x57e7: 0x40861020, + 0x57e8: 0x40861220, 0x57e9: 0x40861420, 0x57ea: 0x40861620, 0x57eb: 0x40861820, + 0x57ec: 0x40861a20, 0x57ed: 0x40861c20, 0x57ee: 0x40861e20, + // Block 0x160, offset 0x5800 + 0x5800: 0x405e3a20, 0x5801: 0x405e3c20, 0x5802: 0x405e3e20, 0x5803: 0x405e4020, + 0x5804: 0x405e4220, 0x5805: 0x405e4420, 0x5806: 0x405e4620, 0x5807: 0x405e4820, + 0x5808: 0x405e4a20, 0x5809: 0x405e4c20, 0x580a: 0x405e4e20, 0x580b: 0x405e5020, + 0x580c: 0x405e5220, 0x580d: 0x405e5420, 0x580e: 0x405e5620, 0x580f: 0x405e5820, + 0x5810: 0x405e5a20, 0x5811: 0x405e5c20, 0x5812: 0x405e5e20, 0x5813: 0x405e6020, + 0x5814: 0x405e6220, 0x5815: 0x405e6420, 0x5816: 0x405e6620, 0x5817: 0x405e6820, + 0x5818: 0x405e6a20, 0x5819: 0x405e6c20, 0x581a: 0x405e6e20, 0x581b: 0x405e7020, + 0x581c: 0x405e7220, 0x581d: 0x405e7420, 0x581e: 0x405e7620, 0x581f: 0x405e7820, + 0x5820: 0x405e7a20, 0x5821: 0x405e7c20, 0x5822: 0x405e7e20, 0x5823: 0x405e8020, + 0x5824: 0x405e8220, 0x5825: 0x405e8420, 0x5826: 0x405e8620, 0x5827: 0x405e8820, + 0x5828: 0x405e8a20, 0x5829: 0x405e8c20, 0x582a: 0x405e8e20, 0x582b: 0x405e9020, + 0x582c: 0x405e9220, 0x582d: 0x405e9420, 0x582e: 0x405e9620, 0x582f: 0x405e9820, + 0x5830: 0x405e9a20, 0x5831: 0x405e9c20, 0x5832: 0x405e9e20, 0x5833: 0x405ea020, + 0x5834: 0x405ea220, 0x5835: 0x405ea420, 0x5836: 0x405ea620, 0x5837: 0x405ea820, + 0x5838: 0x405eaa20, 0x5839: 0x405eac20, 0x583a: 0x405eae20, 0x583b: 0x405eb020, + 0x583c: 0x405eb220, 0x583d: 0x405eb420, 0x583e: 0x405eb620, 0x583f: 0x405eb820, + // Block 0x161, offset 0x5840 + 0x5840: 0x405eba20, 0x5841: 0x405ebc20, 0x5842: 0x405ebe20, 0x5843: 0x405ec020, + 0x5844: 0x405ec220, 0x5845: 0x405ec420, 0x5846: 0x405ec620, 0x5847: 0x405ec820, + 0x5848: 0x405eca20, 0x5849: 0x405ecc20, 0x584a: 0x405ece20, 0x584b: 0x405ed020, + 0x584c: 0x405ed220, 0x584d: 0x405ed420, 0x584e: 0x405ed620, 0x584f: 0x405ed820, + 0x5850: 0x405eda20, 0x5851: 0x405edc20, 0x5852: 0x405ede20, 0x5853: 0x405ee020, + 0x5854: 0x405ee220, 0x5855: 0x405ee420, 0x5856: 0x405ee620, 0x5857: 0x405ee820, + 0x5858: 0x405eea20, 0x5859: 0x405eec20, 0x585a: 0x405eee20, 0x585b: 0x405ef020, + 0x585c: 0x405ef220, 0x585d: 0x405ef420, 0x585e: 0x405ef620, 0x585f: 0x405ef820, + 0x5860: 0x405efa20, 0x5861: 0x405efc20, 0x5862: 0x405efe20, 0x5863: 0x405f0020, + 0x5864: 0x405f0220, 0x5865: 0x405f0420, 0x5866: 0x405f0620, 0x5867: 0x405f0820, + 0x5868: 0x405f0a20, 0x5869: 0x405f0c20, 0x586a: 0x405f0e20, 0x586b: 0x405f1020, + 0x586c: 0x405f1220, 0x586d: 0x405f1420, 0x586e: 0x405f1620, 0x586f: 0x405f1820, + 0x5870: 0x405f1a20, 0x5871: 0x405f1c20, 0x5872: 0x405f1e20, 0x5873: 0x405f2020, + 0x5874: 0x405f2220, 0x5875: 0x405f2420, 0x5876: 0x405f2620, 0x5877: 0x405f2820, + 0x5878: 0x405f2a20, 0x5879: 0x405f2c20, 0x587a: 0x405f2e20, 0x587b: 0x405f3020, + 0x587c: 0x405f3220, 0x587d: 0x405f3420, 0x587e: 0x405f3620, 0x587f: 0x405f3820, + // Block 0x162, offset 0x5880 + 0x5880: 0x405f3a20, 0x5881: 0x405f3c20, 0x5882: 0x405f3e20, 0x5883: 0x405f4020, + 0x5884: 0x405f4220, 0x5885: 0x405f4420, 0x5886: 0x405f4620, 0x5887: 0x405f4820, + 0x5888: 0x405f4a20, 0x5889: 0x405f4c20, 0x588a: 0x405f4e20, 0x588b: 0x405f5020, + 0x588c: 0x405f5220, 0x588d: 0x405f5420, 0x588e: 0x405f5620, 0x588f: 0x405f5820, + 0x5890: 0x405f5a20, 0x5891: 0x405f5c20, 0x5892: 0x405f5e20, 0x5893: 0x405f6020, + 0x5894: 0x405f6220, 0x5895: 0x405f6420, 0x5896: 0x405f6620, 0x5897: 0x405f6820, + 0x5898: 0x405f6a20, 0x5899: 0x405f6c20, 0x589a: 0x405f6e20, 0x589b: 0x405f7020, + 0x589c: 0x405f7220, 0x589d: 0x405f7420, 0x589e: 0x405f7620, 0x589f: 0x405f7820, + 0x58a0: 0x405f7a20, 0x58a1: 0x405f7c20, 0x58a2: 0x405f7e20, 0x58a3: 0x405f8020, + 0x58a4: 0x405f8220, 0x58a5: 0x405f8420, 0x58a6: 0x405f8620, 0x58a7: 0x405f8820, + 0x58a8: 0x405f8a20, 0x58a9: 0x405f8c20, 0x58aa: 0x405f8e20, 0x58ab: 0x405f9020, + 0x58ac: 0x405f9220, 0x58ad: 0x405f9420, 0x58ae: 0x405f9620, 0x58af: 0x405f9820, + 0x58b0: 0x405f9a20, 0x58b1: 0x405f9c20, 0x58b2: 0x405f9e20, 0x58b3: 0x405fa020, + 0x58b4: 0x405fa220, 0x58b5: 0x405fa420, 0x58b6: 0x405fa620, 0x58b7: 0x405fa820, + 0x58b8: 0x405faa20, 0x58b9: 0x405fac20, 0x58ba: 0x405fae20, 0x58bb: 0x405fb020, + 0x58bc: 0x405fb220, 0x58bd: 0x405fb420, 0x58be: 0x405fb620, 0x58bf: 0x405fb820, + // Block 0x163, offset 0x58c0 + 0x58c0: 0x405fba20, 0x58c1: 0x405fbc20, 0x58c2: 0x405fbe20, 0x58c3: 0x405fc020, + 0x58c4: 0x405fc220, 0x58c5: 0x405fc420, 0x58c6: 0x405fc620, 0x58c7: 0x405fc820, + 0x58c8: 0x405fca20, 0x58c9: 0x405fcc20, 0x58ca: 0x405fce20, 0x58cb: 0x405fd020, + 0x58cc: 0x405fd220, 0x58cd: 0x405fd420, 0x58ce: 0x405fd620, 0x58cf: 0x405fd820, + 0x58d0: 0x405fda20, 0x58d1: 0x405fdc20, 0x58d2: 0x405fde20, 0x58d3: 0x405fe020, + 0x58d4: 0x405fe220, 0x58d5: 0x405fe420, 0x58d6: 0x405fe620, 0x58d7: 0x405fe820, + 0x58d8: 0x405fea20, 0x58d9: 0x405fec20, 0x58da: 0x405fee20, 0x58db: 0x405ff020, + 0x58dc: 0x405ff220, 0x58dd: 0x405ff420, 0x58de: 0x405ff620, 0x58df: 0x405ff820, + 0x58e0: 0x405ffa20, 0x58e1: 0x405ffc20, 0x58e2: 0x405ffe20, 0x58e3: 0x40600020, + 0x58e4: 0x40600220, 0x58e5: 0x40600420, 0x58e6: 0x40600620, 0x58e7: 0x40600820, + 0x58e8: 0x40600a20, 0x58e9: 0x40600c20, 0x58ea: 0x40600e20, 0x58eb: 0x40601020, + 0x58ec: 0x40601220, 0x58ed: 0x40601420, 0x58ee: 0x40601620, 0x58ef: 0x40601820, + 0x58f0: 0x40601a20, 0x58f1: 0x40601c20, 0x58f2: 0x40601e20, 0x58f3: 0x40602020, + 0x58f4: 0x40602220, 0x58f5: 0x40602420, 0x58f6: 0x40602620, 0x58f7: 0x40602820, + 0x58f8: 0x40602a20, 0x58f9: 0x40602c20, 0x58fa: 0x40602e20, 0x58fb: 0x40603020, + 0x58fc: 0x40603220, 0x58fd: 0x40603420, 0x58fe: 0x40603620, 0x58ff: 0x40603820, + // Block 0x164, offset 0x5900 + 0x5900: 0x40603a20, 0x5901: 0x40603c20, 0x5902: 0x40603e20, 0x5903: 0x40604020, + 0x5904: 0x40604220, 0x5905: 0x40604420, 0x5906: 0x40604620, 0x5907: 0x40604820, + 0x5908: 0x40604a20, 0x5909: 0x40604c20, 0x590a: 0x40604e20, 0x590b: 0x40605020, + 0x590c: 0x40605220, 0x590d: 0x40605420, 0x590e: 0x40605620, 0x590f: 0x40605820, + 0x5910: 0x40605a20, 0x5911: 0x40605c20, 0x5912: 0x40605e20, 0x5913: 0x40606020, + 0x5914: 0x40606220, 0x5915: 0x40606420, 0x5916: 0x40606620, 0x5917: 0x40606820, + 0x5918: 0x40606a20, 0x5919: 0x40606c20, 0x591a: 0x40606e20, 0x591b: 0x40607020, + 0x591c: 0x40607220, 0x591d: 0x40607420, 0x591e: 0x40607620, 0x591f: 0x40607820, + 0x5920: 0x40607a20, 0x5921: 0x40607c20, 0x5922: 0x40607e20, 0x5923: 0x40608020, + 0x5924: 0x40608220, 0x5925: 0x40608420, 0x5926: 0x40608620, 0x5927: 0x40608820, + 0x5928: 0x40608a20, 0x5929: 0x40608c20, 0x592a: 0x40608e20, 0x592b: 0x40609020, + 0x592c: 0x40609220, 0x592d: 0x40609420, 0x592e: 0x40609620, 0x592f: 0x40609820, + 0x5930: 0x40609a20, 0x5931: 0x40609c20, 0x5932: 0x40609e20, 0x5933: 0x4060a020, + 0x5934: 0x4060a220, 0x5935: 0x4060a420, 0x5936: 0x4060a620, 0x5937: 0x4060a820, + 0x5938: 0x4060aa20, 0x5939: 0x4060ac20, 0x593a: 0x4060ae20, 0x593b: 0x4060b020, + 0x593c: 0x4060b220, 0x593d: 0x4060b420, 0x593e: 0x4060b620, 0x593f: 0x4060b820, + // Block 0x165, offset 0x5940 + 0x5940: 0x4060ba20, 0x5941: 0x4060bc20, 0x5942: 0x4060be20, 0x5943: 0x4060c020, + 0x5944: 0x4060c220, 0x5945: 0x4060c420, 0x5946: 0x4060c620, 0x5947: 0x4060c820, + 0x5948: 0x4060ca20, 0x5949: 0x4060cc20, 0x594a: 0x4060ce20, 0x594b: 0x4060d020, + 0x594c: 0x4060d220, 0x594d: 0x4060d420, 0x594e: 0x4060d620, 0x594f: 0x4060d820, + 0x5950: 0x4060da20, 0x5951: 0x4060dc20, 0x5952: 0x4060de20, 0x5953: 0x4060e020, + 0x5954: 0x4060e220, 0x5955: 0x4060e420, 0x5956: 0x4060e620, 0x5957: 0x4060e820, + 0x5958: 0x4060ea20, 0x5959: 0x4060ec20, 0x595a: 0x4060ee20, 0x595b: 0x4060f020, + 0x595c: 0x4060f220, 0x595d: 0x4060f420, 0x595e: 0x4060f620, 0x595f: 0x4060f820, + 0x5960: 0x4060fa20, 0x5961: 0x4060fc20, 0x5962: 0x4060fe20, 0x5963: 0x40610020, + 0x5964: 0x40610220, 0x5965: 0x40610420, 0x5966: 0x40610620, 0x5967: 0x40610820, + 0x5968: 0x40610a20, 0x5969: 0x40610c20, 0x596a: 0x40610e20, 0x596b: 0x40611020, + 0x596c: 0x40611220, 0x596d: 0x40611420, 0x596e: 0x40611620, 0x596f: 0x40611820, + 0x5970: 0x40611a20, 0x5971: 0x40611c20, 0x5972: 0x40611e20, 0x5973: 0x40612020, + 0x5974: 0x40612220, 0x5975: 0x40612420, 0x5976: 0x40612620, 0x5977: 0x40612820, + 0x5978: 0x40612a20, 0x5979: 0x40612c20, 0x597a: 0x40612e20, 0x597b: 0x40613020, + 0x597c: 0x40613220, 0x597d: 0x40613420, 0x597e: 0x40613620, 0x597f: 0x40613820, + // Block 0x166, offset 0x5980 + 0x5980: 0x40613a20, 0x5981: 0x40613c20, 0x5982: 0x40613e20, 0x5983: 0x40614020, + 0x5984: 0x40614220, 0x5985: 0x40614420, 0x5986: 0x40614620, 0x5987: 0x40614820, + 0x5988: 0x40614a20, 0x5989: 0x40614c20, 0x598a: 0x40614e20, 0x598b: 0x40615020, + 0x598c: 0x40615220, 0x598d: 0x40615420, 0x598e: 0x40615620, 0x598f: 0x40615820, + 0x5990: 0x40615a20, 0x5991: 0x40615c20, 0x5992: 0x40615e20, 0x5993: 0x40616020, + 0x5994: 0x40616220, 0x5995: 0x40616420, 0x5996: 0x40616620, 0x5997: 0x40616820, + 0x5998: 0x40616a20, 0x5999: 0x40616c20, 0x599a: 0x40616e20, 0x599b: 0x40617020, + 0x599c: 0x40617220, 0x599d: 0x40617420, 0x599e: 0x40617620, 0x599f: 0x40617820, + 0x59a0: 0x40617a20, 0x59a1: 0x40617c20, 0x59a2: 0x40617e20, 0x59a3: 0x40618020, + 0x59a4: 0x40618220, 0x59a5: 0x40618420, 0x59a6: 0x40618620, 0x59a7: 0x40618820, + 0x59a8: 0x40618a20, 0x59a9: 0x40618c20, 0x59aa: 0x40618e20, 0x59ab: 0x40619020, + 0x59ac: 0x40619220, 0x59ad: 0x40619420, 0x59ae: 0x40619620, 0x59af: 0x40619820, + 0x59b0: 0x40619a20, 0x59b1: 0x40619c20, 0x59b2: 0x40619e20, 0x59b3: 0x4061a020, + 0x59b4: 0x4061a220, 0x59b5: 0x4061a420, 0x59b6: 0x4061a620, 0x59b7: 0x4061a820, + 0x59b8: 0x4061aa20, 0x59b9: 0x4061ac20, 0x59ba: 0x4061ae20, 0x59bb: 0x4061b020, + 0x59bc: 0x4061b220, 0x59bd: 0x4061b420, 0x59be: 0x4061b620, 0x59bf: 0x4061b820, + // Block 0x167, offset 0x59c0 + 0x59c0: 0x4061ba20, 0x59c1: 0x4061bc20, 0x59c2: 0x4061be20, 0x59c3: 0x4061c020, + 0x59c4: 0x4061c220, 0x59c5: 0x4061c420, 0x59c6: 0x4061c620, 0x59c7: 0x4061c820, + 0x59c8: 0x4061ca20, 0x59c9: 0x4061cc20, 0x59ca: 0x4061ce20, 0x59cb: 0x4061d020, + 0x59cc: 0x4061d220, 0x59cd: 0x4061d420, 0x59ce: 0x4061d620, 0x59cf: 0x4061d820, + 0x59d0: 0x4061da20, 0x59d1: 0x4061dc20, 0x59d2: 0x4061de20, 0x59d3: 0x4061e020, + 0x59d4: 0x4061e220, 0x59d5: 0x4061e420, 0x59d6: 0x4061e620, 0x59d7: 0x4061e820, + 0x59d8: 0x4061ea20, 0x59d9: 0x4061ec20, 0x59da: 0x4061ee20, 0x59db: 0x4061f020, + 0x59dc: 0x4061f220, 0x59dd: 0x4061f420, 0x59de: 0x4061f620, 0x59df: 0x4061f820, + 0x59e0: 0x4061fa20, 0x59e1: 0x4061fc20, 0x59e2: 0x4061fe20, 0x59e3: 0x40620020, + 0x59e4: 0x40620220, 0x59e5: 0x40620420, 0x59e6: 0x40620620, 0x59e7: 0x40620820, + 0x59e8: 0x40620a20, 0x59e9: 0x40620c20, 0x59ea: 0x40620e20, 0x59eb: 0x40621020, + 0x59ec: 0x40621220, 0x59ed: 0x40621420, 0x59ee: 0x40621620, 0x59ef: 0x40621820, + 0x59f0: 0x40621a20, 0x59f1: 0x40621c20, 0x59f2: 0x40621e20, 0x59f3: 0x40622020, + 0x59f4: 0x40622220, 0x59f5: 0x40622420, 0x59f6: 0x40622620, 0x59f7: 0x40622820, + 0x59f8: 0x40622a20, 0x59f9: 0x40622c20, 0x59fa: 0x40622e20, 0x59fb: 0x40623020, + 0x59fc: 0x40623220, 0x59fd: 0x40623420, 0x59fe: 0x40623620, 0x59ff: 0x40623820, + // Block 0x168, offset 0x5a00 + 0x5a00: 0x40623a20, 0x5a01: 0x40623c20, 0x5a02: 0x40623e20, 0x5a03: 0x40624020, + 0x5a04: 0x40624220, 0x5a05: 0x40624420, 0x5a06: 0x40624620, 0x5a07: 0x40624820, + 0x5a08: 0x40624a20, 0x5a09: 0x40624c20, 0x5a0a: 0x40624e20, 0x5a0b: 0x40625020, + 0x5a0c: 0x40625220, 0x5a0d: 0x40625420, 0x5a0e: 0x40625620, 0x5a0f: 0x40625820, + 0x5a10: 0x40625a20, 0x5a11: 0x40625c20, 0x5a12: 0x40625e20, 0x5a13: 0x40626020, + 0x5a14: 0x40626220, 0x5a15: 0x40626420, 0x5a16: 0x40626620, 0x5a17: 0x40626820, + 0x5a18: 0x40626a20, 0x5a19: 0x40626c20, 0x5a1a: 0x40626e20, 0x5a1b: 0x40627020, + 0x5a1c: 0x40627220, 0x5a1d: 0x40627420, 0x5a1e: 0x40627620, 0x5a1f: 0x40627820, + 0x5a20: 0x40627a20, 0x5a21: 0x40627c20, 0x5a22: 0x40627e20, 0x5a23: 0x40628020, + 0x5a24: 0x40628220, 0x5a25: 0x40628420, 0x5a26: 0x40628620, 0x5a27: 0x40628820, + 0x5a28: 0x40628a20, 0x5a29: 0x40628c20, 0x5a2a: 0x40628e20, 0x5a2b: 0x40629020, + 0x5a2c: 0x40629220, 0x5a2d: 0x40629420, 0x5a2e: 0x40629620, 0x5a2f: 0x40629820, + 0x5a30: 0x40629a20, 0x5a31: 0x40629c20, 0x5a32: 0x40629e20, 0x5a33: 0x4062a020, + 0x5a34: 0x4062a220, 0x5a35: 0x4062a420, 0x5a36: 0x4062a620, 0x5a37: 0x4062a820, + 0x5a38: 0x4062aa20, + // Block 0x169, offset 0x5a40 + 0x5a40: 0x406fb620, 0x5a41: 0x406fb820, 0x5a42: 0x406fba20, 0x5a43: 0x406fbc20, + 0x5a44: 0x406fbe20, 0x5a45: 0x406fc020, 0x5a46: 0x006fbe84, 0x5a47: 0x406fc220, + 0x5a48: 0x406fc420, 0x5a49: 0x406fc620, 0x5a4a: 0x406fc820, 0x5a4b: 0x406fca20, + 0x5a4c: 0x406fcc20, 0x5a4d: 0x406fce20, 0x5a4e: 0x406fd020, 0x5a4f: 0x406fd220, + 0x5a50: 0x406fd420, 0x5a51: 0x406fd620, 0x5a52: 0x406fd820, 0x5a53: 0x006fd484, + 0x5a54: 0x406fda20, 0x5a55: 0x406fdc20, 0x5a56: 0x406fde20, 0x5a57: 0x406fe020, + 0x5a58: 0x406fe220, 0x5a59: 0x406fe420, 0x5a5a: 0x406fe620, 0x5a5b: 0x406fe820, + 0x5a5c: 0x406fea20, 0x5a5d: 0x406fec20, 0x5a5e: 0x406fee20, 0x5a5f: 0x406ff020, + 0x5a60: 0x406ff220, 0x5a61: 0x406ff420, 0x5a62: 0x406ff620, 0x5a63: 0x406ff820, + 0x5a64: 0x406ffa20, 0x5a65: 0x006ff884, 0x5a66: 0x406ffc20, 0x5a67: 0x406ffe20, + 0x5a68: 0x40700020, 0x5a69: 0x40700220, 0x5a6a: 0x40700420, 0x5a6b: 0x40700620, + 0x5a6c: 0x40700820, 0x5a6d: 0x40700a20, 0x5a6e: 0x40700c20, 0x5a6f: 0x40700e20, + 0x5a70: 0x40701020, 0x5a71: 0x40701220, 0x5a72: 0x40701420, 0x5a73: 0x40701620, + 0x5a74: 0x40701820, 0x5a75: 0x40701a20, 0x5a76: 0x40701c20, 0x5a77: 0x40701e20, + 0x5a78: 0x40702020, 0x5a79: 0x40702220, 0x5a7a: 0x40702420, 0x5a7b: 0x40702620, + 0x5a7c: 0x40702820, 0x5a7d: 0x40702a20, 0x5a7e: 0x40702c20, 0x5a7f: 0x00702a84, + // Block 0x16a, offset 0x5a80 + 0x5a80: 0x40702e20, 0x5a81: 0x40703020, 0x5a82: 0x40703220, 0x5a83: 0x40703420, + 0x5a84: 0x40703620, + 0x5a90: 0x40703820, 0x5a91: 0x40703a20, 0x5a92: 0x40703c20, 0x5a93: 0x40703e20, + 0x5a94: 0x40704020, 0x5a95: 0x40704220, 0x5a96: 0x40704420, 0x5a97: 0x40704620, + 0x5a98: 0x40704820, 0x5a99: 0x40704a20, 0x5a9a: 0x40704c20, 0x5a9b: 0x40704e20, + 0x5a9c: 0x40705020, 0x5a9d: 0x40705220, 0x5a9e: 0x40705420, 0x5a9f: 0x40705620, + 0x5aa0: 0x40705820, 0x5aa1: 0x40705a20, 0x5aa2: 0x40705c20, 0x5aa3: 0x40705e20, + 0x5aa4: 0x40706020, 0x5aa5: 0x40706220, 0x5aa6: 0x40706420, 0x5aa7: 0x40706620, + 0x5aa8: 0x40706820, 0x5aa9: 0x40706a20, 0x5aaa: 0x40706c20, 0x5aab: 0x40706e20, + 0x5aac: 0x40707020, 0x5aad: 0x40707220, 0x5aae: 0x40707420, 0x5aaf: 0x40707620, + 0x5ab0: 0x40707820, 0x5ab1: 0x40707a20, 0x5ab2: 0x40707c20, 0x5ab3: 0x40707e20, + 0x5ab4: 0x40708020, 0x5ab5: 0x40708220, 0x5ab6: 0x40708420, 0x5ab7: 0x40708620, + 0x5ab8: 0x40708820, 0x5ab9: 0x40708a20, 0x5aba: 0x40708c20, 0x5abb: 0x40708e20, + 0x5abc: 0x40709020, 0x5abd: 0x40709220, 0x5abe: 0x40709420, + // Block 0x16b, offset 0x5ac0 + 0x5acf: 0x40709620, + 0x5ad0: 0x40709820, 0x5ad1: 0x40709a20, 0x5ad2: 0x40709c20, 0x5ad3: 0x40709e20, + 0x5ad4: 0x4070a020, 0x5ad5: 0x4070a220, 0x5ad6: 0x4070a420, 0x5ad7: 0x4070a620, + 0x5ad8: 0x4070a820, 0x5ad9: 0x4070aa20, 0x5ada: 0x4070ac20, 0x5adb: 0x4070ae20, + 0x5adc: 0x4070b020, 0x5add: 0x4070b220, 0x5ade: 0x4070b420, 0x5adf: 0x4070b620, + // Block 0x16c, offset 0x5b00 + 0x5b00: 0x00657c91, 0x5b01: 0x0065c28e, + // Block 0x16d, offset 0x5b40 + 0x5b40: 0x401ba420, 0x5b41: 0x401ba620, 0x5b42: 0x401ba820, 0x5b43: 0x401baa20, + 0x5b44: 0x401bac20, 0x5b45: 0x401bae20, 0x5b46: 0x401bb020, 0x5b47: 0x401bb220, + 0x5b48: 0x401bb420, 0x5b49: 0x401bb620, 0x5b4a: 0x401bb820, 0x5b4b: 0x401bba20, + 0x5b4c: 0x401bbc20, 0x5b4d: 0x401bbe20, 0x5b4e: 0x401bc020, 0x5b4f: 0x401bc220, + 0x5b50: 0x401bc420, 0x5b51: 0x401bc620, 0x5b52: 0x401bc820, 0x5b53: 0x401bca20, + 0x5b54: 0x401bcc20, 0x5b55: 0x401bce20, 0x5b56: 0x401bd020, 0x5b57: 0x401bd220, + 0x5b58: 0x401bd420, 0x5b59: 0x401bd620, 0x5b5a: 0x401bd820, 0x5b5b: 0x401bda20, + 0x5b5c: 0x401bdc20, 0x5b5d: 0x401bde20, 0x5b5e: 0x401be020, 0x5b5f: 0x401be220, + 0x5b60: 0x401be420, 0x5b61: 0x401be620, 0x5b62: 0x401be820, 0x5b63: 0x401bea20, + 0x5b64: 0x401bec20, 0x5b65: 0x401bee20, 0x5b66: 0x401bf020, 0x5b67: 0x401bf220, + 0x5b68: 0x401bf420, 0x5b69: 0x401bf620, 0x5b6a: 0x401bf820, 0x5b6b: 0x401bfa20, + 0x5b6c: 0x401bfc20, 0x5b6d: 0x401bfe20, 0x5b6e: 0x401c0020, 0x5b6f: 0x401c0220, + 0x5b70: 0x401c0420, 0x5b71: 0x401c0620, 0x5b72: 0x401c0820, 0x5b73: 0x401c0a20, + 0x5b74: 0x401c0c20, 0x5b75: 0x401c0e20, 0x5b76: 0x401c1020, 0x5b77: 0x401c1220, + 0x5b78: 0x401c1420, 0x5b79: 0x401c1620, 0x5b7a: 0x401c1820, 0x5b7b: 0x401c1a20, + 0x5b7c: 0x401c1c20, 0x5b7d: 0x401c1e20, 0x5b7e: 0x401c2020, 0x5b7f: 0x401c2220, + // Block 0x16e, offset 0x5b80 + 0x5b80: 0x401c2420, 0x5b81: 0x401c2620, 0x5b82: 0x401c2820, 0x5b83: 0x401c2a20, + 0x5b84: 0x401c2c20, 0x5b85: 0x401c2e20, 0x5b86: 0x401c3020, 0x5b87: 0x401c3220, + 0x5b88: 0x401c3420, 0x5b89: 0x401c3620, 0x5b8a: 0x401c3820, 0x5b8b: 0x401c3a20, + 0x5b8c: 0x401c3c20, 0x5b8d: 0x401c3e20, 0x5b8e: 0x401c4020, 0x5b8f: 0x401c4220, + 0x5b90: 0x401c4420, 0x5b91: 0x401c4620, 0x5b92: 0x401c4820, 0x5b93: 0x401c4a20, + 0x5b94: 0x401c4c20, 0x5b95: 0x401c4e20, 0x5b96: 0x401c5020, 0x5b97: 0x401c5220, + 0x5b98: 0x401c5420, 0x5b99: 0x401c5620, 0x5b9a: 0x401c5820, 0x5b9b: 0x401c5a20, + 0x5b9c: 0x401c5c20, 0x5b9d: 0x401c5e20, 0x5b9e: 0x401c6020, 0x5b9f: 0x401c6220, + 0x5ba0: 0x401c6420, 0x5ba1: 0x401c6620, 0x5ba2: 0x401c6820, 0x5ba3: 0x401c6a20, + 0x5ba4: 0x401c6c20, 0x5ba5: 0x401c6e20, 0x5ba6: 0x401c7020, 0x5ba7: 0x401c7220, + 0x5ba8: 0x401c7420, 0x5ba9: 0x401c7620, 0x5baa: 0x401c7820, 0x5bab: 0x401c7a20, + 0x5bac: 0x401c7c20, 0x5bad: 0x401c7e20, 0x5bae: 0x401c8020, 0x5baf: 0x401c8220, + 0x5bb0: 0x401c8420, 0x5bb1: 0x401c8620, 0x5bb2: 0x401c8820, 0x5bb3: 0x401c8a20, + 0x5bb4: 0x401c8c20, 0x5bb5: 0x401c8e20, 0x5bb6: 0x401c9020, 0x5bb7: 0x401c9220, + 0x5bb8: 0x401c9420, 0x5bb9: 0x401c9620, 0x5bba: 0x401c9820, 0x5bbb: 0x401c9a20, + 0x5bbc: 0x401c9c20, 0x5bbd: 0x401c9e20, 0x5bbe: 0x401ca020, 0x5bbf: 0x401ca220, + // Block 0x16f, offset 0x5bc0 + 0x5bc0: 0x401ca420, 0x5bc1: 0x401ca620, 0x5bc2: 0x401ca820, 0x5bc3: 0x401caa20, + 0x5bc4: 0x401cac20, 0x5bc5: 0x401cae20, 0x5bc6: 0x401cb020, 0x5bc7: 0x401cb220, + 0x5bc8: 0x401cb420, 0x5bc9: 0x401cb620, 0x5bca: 0x401cb820, 0x5bcb: 0x401cba20, + 0x5bcc: 0x401cbc20, 0x5bcd: 0x401cbe20, 0x5bce: 0x401cc020, 0x5bcf: 0x401cc220, + 0x5bd0: 0x401cc420, 0x5bd1: 0x401cc620, 0x5bd2: 0x401cc820, 0x5bd3: 0x401cca20, + 0x5bd4: 0x401ccc20, 0x5bd5: 0x401cce20, 0x5bd6: 0x401cd020, 0x5bd7: 0x401cd220, + 0x5bd8: 0x401cd420, 0x5bd9: 0x401cd620, 0x5bda: 0x401cd820, 0x5bdb: 0x401cda20, + 0x5bdc: 0x401cdc20, 0x5bdd: 0x401cde20, 0x5bde: 0x401ce020, 0x5bdf: 0x401ce220, + 0x5be0: 0x401ce420, 0x5be1: 0x401ce620, 0x5be2: 0x401ce820, 0x5be3: 0x401cea20, + 0x5be4: 0x401cec20, 0x5be5: 0x401cee20, 0x5be6: 0x401cf020, 0x5be7: 0x401cf220, + 0x5be8: 0x401cf420, 0x5be9: 0x401cf620, 0x5bea: 0x401cf820, 0x5beb: 0x401cfa20, + 0x5bec: 0x401cfc20, 0x5bed: 0x401cfe20, 0x5bee: 0x401d0020, 0x5bef: 0x401d0220, + 0x5bf0: 0x401d0420, 0x5bf1: 0x401d0620, 0x5bf2: 0x401d0820, 0x5bf3: 0x401d0a20, + 0x5bf4: 0x401d0c20, 0x5bf5: 0x401d0e20, 0x5bf6: 0x401d1020, 0x5bf7: 0x401d1220, + 0x5bf8: 0x401d1420, 0x5bf9: 0x401d1620, 0x5bfa: 0x401d1820, 0x5bfb: 0x401d1a20, + 0x5bfc: 0x401d1c20, 0x5bfd: 0x401d1e20, 0x5bfe: 0x401d2020, 0x5bff: 0x401d2220, + // Block 0x170, offset 0x5c00 + 0x5c00: 0x401d2420, 0x5c01: 0x401d2620, 0x5c02: 0x401d2820, 0x5c03: 0x401d2a20, + 0x5c04: 0x401d2c20, 0x5c05: 0x401d2e20, 0x5c06: 0x401d3020, 0x5c07: 0x401d3220, + 0x5c08: 0x401d3420, 0x5c09: 0x401d3620, 0x5c0a: 0x401d3820, 0x5c0b: 0x401d3a20, + 0x5c0c: 0x401d3c20, 0x5c0d: 0x401d3e20, 0x5c0e: 0x401d4020, 0x5c0f: 0x401d4220, + 0x5c10: 0x401d4420, 0x5c11: 0x401d4620, 0x5c12: 0x401d4820, 0x5c13: 0x401d4a20, + 0x5c14: 0x401d4c20, 0x5c15: 0x401d4e20, 0x5c16: 0x401d5020, 0x5c17: 0x401d5220, + 0x5c18: 0x401d5420, 0x5c19: 0x401d5620, 0x5c1a: 0x401d5820, 0x5c1b: 0x401d5a20, + 0x5c1c: 0x401d5c20, 0x5c1d: 0x401d5e20, 0x5c1e: 0x401d6020, 0x5c1f: 0x401d6220, + 0x5c20: 0x401d6420, 0x5c21: 0x401d6620, 0x5c22: 0x401d6820, 0x5c23: 0x401d6a20, + 0x5c24: 0x401d6c20, 0x5c25: 0x401d6e20, 0x5c26: 0x401d7020, 0x5c27: 0x401d7220, + 0x5c28: 0x401d7420, 0x5c29: 0x401d7620, 0x5c2a: 0x401d7820, 0x5c2b: 0x401d7a20, + 0x5c2c: 0x401d7c20, 0x5c2d: 0x401d7e20, 0x5c2e: 0x401d8020, 0x5c2f: 0x401d8220, + 0x5c30: 0x401d8420, 0x5c31: 0x401d8620, 0x5c32: 0x401d8820, 0x5c33: 0x401d8a20, + 0x5c34: 0x401d8c20, 0x5c35: 0x401d8e20, + // Block 0x171, offset 0x5c40 + 0x5c40: 0x401d9020, 0x5c41: 0x401d9220, 0x5c42: 0x401d9420, 0x5c43: 0x401d9620, + 0x5c44: 0x401d9820, 0x5c45: 0x401d9a20, 0x5c46: 0x401d9c20, 0x5c47: 0x401d9e20, + 0x5c48: 0x401da020, 0x5c49: 0x401da220, 0x5c4a: 0x401da420, 0x5c4b: 0x401da620, + 0x5c4c: 0x401da820, 0x5c4d: 0x401daa20, 0x5c4e: 0x401dac20, 0x5c4f: 0x401dae20, + 0x5c50: 0x401db020, 0x5c51: 0x401db220, 0x5c52: 0x401db420, 0x5c53: 0x401db620, + 0x5c54: 0x401db820, 0x5c55: 0x401dba20, 0x5c56: 0x401dbc20, 0x5c57: 0x401dbe20, + 0x5c58: 0x401dc020, 0x5c59: 0x401dc220, 0x5c5a: 0x401dc420, 0x5c5b: 0x401dc620, + 0x5c5c: 0x401dc820, 0x5c5d: 0x401dca20, 0x5c5e: 0x401dcc20, 0x5c5f: 0x401dce20, + 0x5c60: 0x401dd020, 0x5c61: 0x401dd220, 0x5c62: 0x401dd420, 0x5c63: 0x401dd620, + 0x5c64: 0x401dd820, 0x5c65: 0x401dda20, 0x5c66: 0x401ddc20, + 0x5c69: 0x401e0420, 0x5c6a: 0x401de420, 0x5c6b: 0x401de620, + 0x5c6c: 0x401de820, 0x5c6d: 0x401dea20, 0x5c6e: 0x401dec20, 0x5c6f: 0x401dee20, + 0x5c70: 0x401df020, 0x5c71: 0x401df220, 0x5c72: 0x401df420, 0x5c73: 0x401df620, + 0x5c74: 0x401df820, 0x5c75: 0x401dfa20, 0x5c76: 0x401dfc20, 0x5c77: 0x401dfe20, + 0x5c78: 0x401e0020, 0x5c79: 0x401e0220, 0x5c7a: 0x401e0620, 0x5c7b: 0x401e0820, + 0x5c7c: 0x401e0a20, 0x5c7d: 0x401e0c20, 0x5c7e: 0x401e0e20, 0x5c7f: 0x401e1020, + // Block 0x172, offset 0x5c80 + 0x5c80: 0x401e1220, 0x5c81: 0x401e1420, 0x5c82: 0x401e1620, 0x5c83: 0x401e1820, + 0x5c84: 0x401e1a20, 0x5c85: 0x401e1c20, 0x5c86: 0x401e1e20, 0x5c87: 0x401e2020, + 0x5c88: 0x401e2220, 0x5c89: 0x401e2420, 0x5c8a: 0x401e2620, 0x5c8b: 0x401e2820, + 0x5c8c: 0x401e2a20, 0x5c8d: 0x401e2c20, 0x5c8e: 0x401e2e20, 0x5c8f: 0x401e3020, + 0x5c90: 0x401e3220, 0x5c91: 0x401e3420, 0x5c92: 0x401e3620, 0x5c93: 0x401e3820, + 0x5c94: 0x401e3a20, 0x5c95: 0x401e3c20, 0x5c96: 0x401e3e20, 0x5c97: 0x401e4020, + 0x5c98: 0x401e4220, 0x5c99: 0x401e4420, 0x5c9a: 0x401e4620, 0x5c9b: 0x401e4820, + 0x5c9c: 0x401e4a20, 0x5c9d: 0x401e4c20, 0x5c9e: 0x401e4020, 0x5c9f: 0x401e4220, + 0x5ca0: 0x401e4220, 0x5ca1: 0x401e4220, 0x5ca2: 0x401e4220, 0x5ca3: 0x401e4220, + 0x5ca4: 0x401e4220, 0x5ca5: 0xad800000, 0x5ca6: 0xad800000, 0x5ca7: 0xa0100000, + 0x5ca8: 0xa0100000, 0x5ca9: 0xa0100000, 0x5caa: 0x401e4e20, 0x5cab: 0x401e5020, + 0x5cac: 0x401e5220, 0x5cad: 0xae200000, 0x5cae: 0xad800000, 0x5caf: 0xad800000, + 0x5cb0: 0xad800000, 0x5cb1: 0xad800000, 0x5cb2: 0xad800000, 0x5cb3: 0xa0000000, + 0x5cb4: 0xa0000000, 0x5cb5: 0xa0000000, 0x5cb6: 0xa0000000, 0x5cb7: 0xa0000000, + 0x5cb8: 0xa0000000, 0x5cb9: 0xa0000000, 0x5cba: 0xa0000000, 0x5cbb: 0xadc00000, + 0x5cbc: 0xadc00000, 0x5cbd: 0xadc00000, 0x5cbe: 0xadc00000, 0x5cbf: 0xadc00000, + // Block 0x173, offset 0x5cc0 + 0x5cc0: 0xadc00000, 0x5cc1: 0xadc00000, 0x5cc2: 0xadc00000, 0x5cc3: 0x401e5420, + 0x5cc4: 0x401e5620, 0x5cc5: 0xae600000, 0x5cc6: 0xae600000, 0x5cc7: 0xae600000, + 0x5cc8: 0xae600000, 0x5cc9: 0xae600000, 0x5cca: 0xadc00000, 0x5ccb: 0xadc00000, + 0x5ccc: 0x401e5820, 0x5ccd: 0x401e5a20, 0x5cce: 0x401e5c20, 0x5ccf: 0x401e5e20, + 0x5cd0: 0x401e6020, 0x5cd1: 0x401e6220, 0x5cd2: 0x401e6420, 0x5cd3: 0x401e6620, + 0x5cd4: 0x401e6820, 0x5cd5: 0x401e6a20, 0x5cd6: 0x401e6c20, 0x5cd7: 0x401e6e20, + 0x5cd8: 0x401e7020, 0x5cd9: 0x401e7220, 0x5cda: 0x401e7420, 0x5cdb: 0x401e7620, + 0x5cdc: 0x401e7820, 0x5cdd: 0x401e7a20, 0x5cde: 0x401e7c20, 0x5cdf: 0x401e7e20, + 0x5ce0: 0x401e8020, 0x5ce1: 0x401e8220, 0x5ce2: 0x401e8420, 0x5ce3: 0x401e8620, + 0x5ce4: 0x401e8820, 0x5ce5: 0x401e8a20, 0x5ce6: 0x401e8c20, 0x5ce7: 0x401e8e20, + 0x5ce8: 0x401e9020, 0x5ce9: 0x401e9220, 0x5cea: 0xae600000, 0x5ceb: 0xae600000, + 0x5cec: 0xae600000, 0x5ced: 0xae600000, 0x5cee: 0x401e9420, 0x5cef: 0x401e9620, + 0x5cf0: 0x401e9820, 0x5cf1: 0x401e9a20, 0x5cf2: 0x401e9c20, 0x5cf3: 0x401e9e20, + 0x5cf4: 0x401ea020, 0x5cf5: 0x401ea220, 0x5cf6: 0x401ea420, 0x5cf7: 0x401ea620, + 0x5cf8: 0x401ea820, 0x5cf9: 0x401eaa20, 0x5cfa: 0x401eac20, 0x5cfb: 0x401eaa20, + 0x5cfc: 0x401eac20, 0x5cfd: 0x401eaa20, 0x5cfe: 0x401eac20, 0x5cff: 0x401eaa20, + // Block 0x174, offset 0x5d00 + 0x5d00: 0x401eac20, 0x5d01: 0x401eae20, 0x5d02: 0x401eb020, 0x5d03: 0x401eb220, + 0x5d04: 0x401eb420, 0x5d05: 0x401eb620, 0x5d06: 0x401eb820, 0x5d07: 0x401eba20, + 0x5d08: 0x401ebc20, 0x5d09: 0x401ebe20, 0x5d0a: 0x401ec020, 0x5d0b: 0x401ec220, + 0x5d0c: 0x401ec420, 0x5d0d: 0x401ec620, 0x5d0e: 0x401ec820, 0x5d0f: 0x401eca20, + 0x5d10: 0x401ecc20, 0x5d11: 0x401ece20, 0x5d12: 0x401ed020, 0x5d13: 0x401ed220, + 0x5d14: 0x401ed420, 0x5d15: 0x401ed620, 0x5d16: 0x401ed820, 0x5d17: 0x401eda20, + 0x5d18: 0x401edc20, 0x5d19: 0x401ede20, 0x5d1a: 0x401ee020, 0x5d1b: 0x401ee220, + 0x5d1c: 0x401ee420, 0x5d1d: 0x401ee620, + // Block 0x175, offset 0x5d40 + 0x5d40: 0x401ee820, 0x5d41: 0x401eea20, 0x5d42: 0x401eec20, 0x5d43: 0x401eee20, + 0x5d44: 0x401ef020, 0x5d45: 0x401ef220, 0x5d46: 0x401ef420, 0x5d47: 0x401ef620, + 0x5d48: 0x401ef820, 0x5d49: 0x401efa20, 0x5d4a: 0x401efc20, 0x5d4b: 0x401efe20, + 0x5d4c: 0x401f0020, 0x5d4d: 0x401f0220, 0x5d4e: 0x401f0420, 0x5d4f: 0x401f0620, + 0x5d50: 0x401f0820, 0x5d51: 0x401f0a20, 0x5d52: 0x401f0c20, 0x5d53: 0x401f0e20, + 0x5d54: 0x401f1020, 0x5d55: 0x401f1220, 0x5d56: 0x401f1420, 0x5d57: 0x401f1620, + 0x5d58: 0x401f1820, 0x5d59: 0x401f1a20, 0x5d5a: 0x401f1c20, 0x5d5b: 0x401f1e20, + 0x5d5c: 0x401f2020, 0x5d5d: 0x401f2220, 0x5d5e: 0x401f2420, 0x5d5f: 0x401f2620, + 0x5d60: 0x401f2820, 0x5d61: 0x401f2a20, 0x5d62: 0x401f2c20, 0x5d63: 0x401f2e20, + 0x5d64: 0x401f3020, 0x5d65: 0x401f3220, 0x5d66: 0x401f3420, 0x5d67: 0x401f3620, + 0x5d68: 0x401f3820, 0x5d69: 0x401f3a20, 0x5d6a: 0x401f3c20, 0x5d6b: 0x401f3e20, + 0x5d6c: 0x401f4020, 0x5d6d: 0x401f4220, 0x5d6e: 0x401f4420, 0x5d6f: 0x401f4620, + 0x5d70: 0x401f4820, 0x5d71: 0x401f4a20, 0x5d72: 0x401f4c20, 0x5d73: 0x401f4e20, + 0x5d74: 0x401f5020, 0x5d75: 0x401f5220, 0x5d76: 0x401f5420, 0x5d77: 0x401f5620, + 0x5d78: 0x401f5820, 0x5d79: 0x401f5a20, 0x5d7a: 0x401f5c20, 0x5d7b: 0x401f5e20, + 0x5d7c: 0x401f6020, 0x5d7d: 0x401f6220, 0x5d7e: 0x401f6420, 0x5d7f: 0x401f6620, + // Block 0x176, offset 0x5d80 + 0x5d80: 0x401f6820, 0x5d81: 0x401f6a20, 0x5d82: 0xae600000, 0x5d83: 0xae600000, + 0x5d84: 0xae600000, 0x5d85: 0x401f6c20, + // Block 0x177, offset 0x5dc0 + 0x5dc0: 0x4019e220, 0x5dc1: 0x4019e420, 0x5dc2: 0x4019e620, 0x5dc3: 0x4019e820, + 0x5dc4: 0x4019ea20, 0x5dc5: 0x4019ec20, 0x5dc6: 0x4019ee20, 0x5dc7: 0x4019f020, + 0x5dc8: 0x4019f220, 0x5dc9: 0x4019f420, 0x5dca: 0x4019f620, 0x5dcb: 0x4019f820, + 0x5dcc: 0x4019fa20, 0x5dcd: 0x4019fc20, 0x5dce: 0x4019fe20, 0x5dcf: 0x401a0020, + 0x5dd0: 0x401a0220, 0x5dd1: 0x401a0420, 0x5dd2: 0x401a0620, 0x5dd3: 0x401a0820, + 0x5dd4: 0x401a0a20, 0x5dd5: 0x401a0c20, 0x5dd6: 0x401a0e20, 0x5dd7: 0x401a1020, + 0x5dd8: 0x401a1220, 0x5dd9: 0x401a1420, 0x5dda: 0x401a1620, 0x5ddb: 0x401a1820, + 0x5ddc: 0x401a1a20, 0x5ddd: 0x401a1c20, 0x5dde: 0x401a1e20, 0x5ddf: 0x401a2020, + 0x5de0: 0x401a2220, 0x5de1: 0x401a2420, 0x5de2: 0x401a2620, 0x5de3: 0x401a2820, + 0x5de4: 0x401a2a20, 0x5de5: 0x401a2c20, 0x5de6: 0x401a2e20, 0x5de7: 0x401a3020, + 0x5de8: 0x401a3220, 0x5de9: 0x401a3420, 0x5dea: 0x401a3620, 0x5deb: 0x401a3820, + 0x5dec: 0x401a3a20, 0x5ded: 0x401a3c20, 0x5dee: 0x401a3e20, 0x5def: 0x401a4020, + 0x5df0: 0x401a4220, 0x5df1: 0x401a4420, 0x5df2: 0x401a4620, 0x5df3: 0x401a4820, + 0x5df4: 0x401a4a20, 0x5df5: 0x401a4c20, 0x5df6: 0x401a4e20, 0x5df7: 0x401a5020, + 0x5df8: 0x401a5220, 0x5df9: 0x401a5420, 0x5dfa: 0x401a5620, 0x5dfb: 0x401a5820, + 0x5dfc: 0x401a5a20, 0x5dfd: 0x401a5c20, 0x5dfe: 0x401a5e20, 0x5dff: 0x401a6020, + // Block 0x178, offset 0x5e00 + 0x5e00: 0x401a6220, 0x5e01: 0x401a6420, 0x5e02: 0x401a6620, 0x5e03: 0x401a6820, + 0x5e04: 0x401a6a20, 0x5e05: 0x401a6c20, 0x5e06: 0x401a6e20, 0x5e07: 0x401a7020, + 0x5e08: 0x401a7220, 0x5e09: 0x401a7420, 0x5e0a: 0x401a7620, 0x5e0b: 0x401a7820, + 0x5e0c: 0x401a7a20, 0x5e0d: 0x401a7c20, 0x5e0e: 0x401a7e20, 0x5e0f: 0x401a8020, + 0x5e10: 0x401a8220, 0x5e11: 0x401a8420, 0x5e12: 0x401a8620, 0x5e13: 0x401a8820, + 0x5e14: 0x401a8a20, 0x5e15: 0x401a8c20, 0x5e16: 0x401a8e20, + 0x5e20: 0xe00002af, 0x5e21: 0xe00003ca, 0x5e22: 0xe00004a4, 0x5e23: 0xe0000576, + 0x5e24: 0xe000063d, 0x5e25: 0xe00006ed, 0x5e26: 0xe0000795, 0x5e27: 0xe000083e, + 0x5e28: 0xe00008e9, 0x5e29: 0x4029ba20, 0x5e2a: 0x4029bc20, 0x5e2b: 0x4029be20, + 0x5e2c: 0x4029c020, 0x5e2d: 0x4029c220, 0x5e2e: 0x4029c420, 0x5e2f: 0x4029c620, + 0x5e30: 0x4029c820, 0x5e31: 0x4029ca20, + // Block 0x179, offset 0x5e40 + 0x5e40: 0x002bde8b, 0x5e41: 0x002c0a8b, 0x5e42: 0x002c3a8b, 0x5e43: 0x002c628b, + 0x5e44: 0x002c988b, 0x5e45: 0x002d088b, 0x5e46: 0x002d228b, 0x5e47: 0x002d688b, + 0x5e48: 0x002d9a8b, 0x5e49: 0x002dcc8b, 0x5e4a: 0x002dfe8b, 0x5e4b: 0x002e228b, + 0x5e4c: 0x002e828b, 0x5e4d: 0x002e9e8b, 0x5e4e: 0x002ee28b, 0x5e4f: 0x002f2c8b, + 0x5e50: 0x002f568b, 0x5e51: 0x002f7a8b, 0x5e52: 0x002fe68b, 0x5e53: 0x00302c8b, + 0x5e54: 0x00306c8b, 0x5e55: 0x0030be8b, 0x5e56: 0x0030e28b, 0x5e57: 0x0030f68b, + 0x5e58: 0x0031008b, 0x5e59: 0x00312a8b, 0x5e5a: 0x002bde85, 0x5e5b: 0x002c0a85, + 0x5e5c: 0x002c3a85, 0x5e5d: 0x002c6285, 0x5e5e: 0x002c9885, 0x5e5f: 0x002d0885, + 0x5e60: 0x002d2285, 0x5e61: 0x002d6885, 0x5e62: 0x002d9a85, 0x5e63: 0x002dcc85, + 0x5e64: 0x002dfe85, 0x5e65: 0x002e2285, 0x5e66: 0x002e8285, 0x5e67: 0x002e9e85, + 0x5e68: 0x002ee285, 0x5e69: 0x002f2c85, 0x5e6a: 0x002f5685, 0x5e6b: 0x002f7a85, + 0x5e6c: 0x002fe685, 0x5e6d: 0x00302c85, 0x5e6e: 0x00306c85, 0x5e6f: 0x0030be85, + 0x5e70: 0x0030e285, 0x5e71: 0x0030f685, 0x5e72: 0x00310085, 0x5e73: 0x00312a85, + 0x5e74: 0x002bde8b, 0x5e75: 0x002c0a8b, 0x5e76: 0x002c3a8b, 0x5e77: 0x002c628b, + 0x5e78: 0x002c988b, 0x5e79: 0x002d088b, 0x5e7a: 0x002d228b, 0x5e7b: 0x002d688b, + 0x5e7c: 0x002d9a8b, 0x5e7d: 0x002dcc8b, 0x5e7e: 0x002dfe8b, 0x5e7f: 0x002e228b, + // Block 0x17a, offset 0x5e80 + 0x5e80: 0x002e828b, 0x5e81: 0x002e9e8b, 0x5e82: 0x002ee28b, 0x5e83: 0x002f2c8b, + 0x5e84: 0x002f568b, 0x5e85: 0x002f7a8b, 0x5e86: 0x002fe68b, 0x5e87: 0x00302c8b, + 0x5e88: 0x00306c8b, 0x5e89: 0x0030be8b, 0x5e8a: 0x0030e28b, 0x5e8b: 0x0030f68b, + 0x5e8c: 0x0031008b, 0x5e8d: 0x00312a8b, 0x5e8e: 0x002bde85, 0x5e8f: 0x002c0a85, + 0x5e90: 0x002c3a85, 0x5e91: 0x002c6285, 0x5e92: 0x002c9885, 0x5e93: 0x002d0885, + 0x5e94: 0x002d2285, 0x5e96: 0x002d9a85, 0x5e97: 0x002dcc85, + 0x5e98: 0x002dfe85, 0x5e99: 0x002e2285, 0x5e9a: 0x002e8285, 0x5e9b: 0x002e9e85, + 0x5e9c: 0x002ee285, 0x5e9d: 0x002f2c85, 0x5e9e: 0x002f5685, 0x5e9f: 0x002f7a85, + 0x5ea0: 0x002fe685, 0x5ea1: 0x00302c85, 0x5ea2: 0x00306c85, 0x5ea3: 0x0030be85, + 0x5ea4: 0x0030e285, 0x5ea5: 0x0030f685, 0x5ea6: 0x00310085, 0x5ea7: 0x00312a85, + 0x5ea8: 0x002bde8b, 0x5ea9: 0x002c0a8b, 0x5eaa: 0x002c3a8b, 0x5eab: 0x002c628b, + 0x5eac: 0x002c988b, 0x5ead: 0x002d088b, 0x5eae: 0x002d228b, 0x5eaf: 0x002d688b, + 0x5eb0: 0x002d9a8b, 0x5eb1: 0x002dcc8b, 0x5eb2: 0x002dfe8b, 0x5eb3: 0x002e228b, + 0x5eb4: 0x002e828b, 0x5eb5: 0x002e9e8b, 0x5eb6: 0x002ee28b, 0x5eb7: 0x002f2c8b, + 0x5eb8: 0x002f568b, 0x5eb9: 0x002f7a8b, 0x5eba: 0x002fe68b, 0x5ebb: 0x00302c8b, + 0x5ebc: 0x00306c8b, 0x5ebd: 0x0030be8b, 0x5ebe: 0x0030e28b, 0x5ebf: 0x0030f68b, + // Block 0x17b, offset 0x5ec0 + 0x5ec0: 0x0031008b, 0x5ec1: 0x00312a8b, 0x5ec2: 0x002bde85, 0x5ec3: 0x002c0a85, + 0x5ec4: 0x002c3a85, 0x5ec5: 0x002c6285, 0x5ec6: 0x002c9885, 0x5ec7: 0x002d0885, + 0x5ec8: 0x002d2285, 0x5ec9: 0x002d6885, 0x5eca: 0x002d9a85, 0x5ecb: 0x002dcc85, + 0x5ecc: 0x002dfe85, 0x5ecd: 0x002e2285, 0x5ece: 0x002e8285, 0x5ecf: 0x002e9e85, + 0x5ed0: 0x002ee285, 0x5ed1: 0x002f2c85, 0x5ed2: 0x002f5685, 0x5ed3: 0x002f7a85, + 0x5ed4: 0x002fe685, 0x5ed5: 0x00302c85, 0x5ed6: 0x00306c85, 0x5ed7: 0x0030be85, + 0x5ed8: 0x0030e285, 0x5ed9: 0x0030f685, 0x5eda: 0x00310085, 0x5edb: 0x00312a85, + 0x5edc: 0x002bde8b, 0x5ede: 0x002c3a8b, 0x5edf: 0x002c628b, + 0x5ee2: 0x002d228b, + 0x5ee5: 0x002dcc8b, 0x5ee6: 0x002dfe8b, + 0x5ee9: 0x002e9e8b, 0x5eea: 0x002ee28b, 0x5eeb: 0x002f2c8b, + 0x5eec: 0x002f568b, 0x5eee: 0x002fe68b, 0x5eef: 0x00302c8b, + 0x5ef0: 0x00306c8b, 0x5ef1: 0x0030be8b, 0x5ef2: 0x0030e28b, 0x5ef3: 0x0030f68b, + 0x5ef4: 0x0031008b, 0x5ef5: 0x00312a8b, 0x5ef6: 0x002bde85, 0x5ef7: 0x002c0a85, + 0x5ef8: 0x002c3a85, 0x5ef9: 0x002c6285, 0x5efb: 0x002d0885, + 0x5efd: 0x002d6885, 0x5efe: 0x002d9a85, 0x5eff: 0x002dcc85, + // Block 0x17c, offset 0x5f00 + 0x5f00: 0x002dfe85, 0x5f01: 0x002e2285, 0x5f02: 0x002e8285, 0x5f03: 0x002e9e85, + 0x5f05: 0x002f2c85, 0x5f06: 0x002f5685, 0x5f07: 0x002f7a85, + 0x5f08: 0x002fe685, 0x5f09: 0x00302c85, 0x5f0a: 0x00306c85, 0x5f0b: 0x0030be85, + 0x5f0c: 0x0030e285, 0x5f0d: 0x0030f685, 0x5f0e: 0x00310085, 0x5f0f: 0x00312a85, + 0x5f10: 0x002bde8b, 0x5f11: 0x002c0a8b, 0x5f12: 0x002c3a8b, 0x5f13: 0x002c628b, + 0x5f14: 0x002c988b, 0x5f15: 0x002d088b, 0x5f16: 0x002d228b, 0x5f17: 0x002d688b, + 0x5f18: 0x002d9a8b, 0x5f19: 0x002dcc8b, 0x5f1a: 0x002dfe8b, 0x5f1b: 0x002e228b, + 0x5f1c: 0x002e828b, 0x5f1d: 0x002e9e8b, 0x5f1e: 0x002ee28b, 0x5f1f: 0x002f2c8b, + 0x5f20: 0x002f568b, 0x5f21: 0x002f7a8b, 0x5f22: 0x002fe68b, 0x5f23: 0x00302c8b, + 0x5f24: 0x00306c8b, 0x5f25: 0x0030be8b, 0x5f26: 0x0030e28b, 0x5f27: 0x0030f68b, + 0x5f28: 0x0031008b, 0x5f29: 0x00312a8b, 0x5f2a: 0x002bde85, 0x5f2b: 0x002c0a85, + 0x5f2c: 0x002c3a85, 0x5f2d: 0x002c6285, 0x5f2e: 0x002c9885, 0x5f2f: 0x002d0885, + 0x5f30: 0x002d2285, 0x5f31: 0x002d6885, 0x5f32: 0x002d9a85, 0x5f33: 0x002dcc85, + 0x5f34: 0x002dfe85, 0x5f35: 0x002e2285, 0x5f36: 0x002e8285, 0x5f37: 0x002e9e85, + 0x5f38: 0x002ee285, 0x5f39: 0x002f2c85, 0x5f3a: 0x002f5685, 0x5f3b: 0x002f7a85, + 0x5f3c: 0x002fe685, 0x5f3d: 0x00302c85, 0x5f3e: 0x00306c85, 0x5f3f: 0x0030be85, + // Block 0x17d, offset 0x5f40 + 0x5f40: 0x0030e285, 0x5f41: 0x0030f685, 0x5f42: 0x00310085, 0x5f43: 0x00312a85, + 0x5f44: 0x002bde8b, 0x5f45: 0x002c0a8b, 0x5f47: 0x002c628b, + 0x5f48: 0x002c988b, 0x5f49: 0x002d088b, 0x5f4a: 0x002d228b, + 0x5f4d: 0x002dcc8b, 0x5f4e: 0x002dfe8b, 0x5f4f: 0x002e228b, + 0x5f50: 0x002e828b, 0x5f51: 0x002e9e8b, 0x5f52: 0x002ee28b, 0x5f53: 0x002f2c8b, + 0x5f54: 0x002f568b, 0x5f56: 0x002fe68b, 0x5f57: 0x00302c8b, + 0x5f58: 0x00306c8b, 0x5f59: 0x0030be8b, 0x5f5a: 0x0030e28b, 0x5f5b: 0x0030f68b, + 0x5f5c: 0x0031008b, 0x5f5e: 0x002bde85, 0x5f5f: 0x002c0a85, + 0x5f60: 0x002c3a85, 0x5f61: 0x002c6285, 0x5f62: 0x002c9885, 0x5f63: 0x002d0885, + 0x5f64: 0x002d2285, 0x5f65: 0x002d6885, 0x5f66: 0x002d9a85, 0x5f67: 0x002dcc85, + 0x5f68: 0x002dfe85, 0x5f69: 0x002e2285, 0x5f6a: 0x002e8285, 0x5f6b: 0x002e9e85, + 0x5f6c: 0x002ee285, 0x5f6d: 0x002f2c85, 0x5f6e: 0x002f5685, 0x5f6f: 0x002f7a85, + 0x5f70: 0x002fe685, 0x5f71: 0x00302c85, 0x5f72: 0x00306c85, 0x5f73: 0x0030be85, + 0x5f74: 0x0030e285, 0x5f75: 0x0030f685, 0x5f76: 0x00310085, 0x5f77: 0x00312a85, + 0x5f78: 0x002bde8b, 0x5f79: 0x002c0a8b, 0x5f7b: 0x002c628b, + 0x5f7c: 0x002c988b, 0x5f7d: 0x002d088b, 0x5f7e: 0x002d228b, + // Block 0x17e, offset 0x5f80 + 0x5f80: 0x002d9a8b, 0x5f81: 0x002dcc8b, 0x5f82: 0x002dfe8b, 0x5f83: 0x002e228b, + 0x5f84: 0x002e828b, 0x5f86: 0x002ee28b, + 0x5f8a: 0x002fe68b, 0x5f8b: 0x00302c8b, + 0x5f8c: 0x00306c8b, 0x5f8d: 0x0030be8b, 0x5f8e: 0x0030e28b, 0x5f8f: 0x0030f68b, + 0x5f90: 0x0031008b, 0x5f92: 0x002bde85, 0x5f93: 0x002c0a85, + 0x5f94: 0x002c3a85, 0x5f95: 0x002c6285, 0x5f96: 0x002c9885, 0x5f97: 0x002d0885, + 0x5f98: 0x002d2285, 0x5f99: 0x002d6885, 0x5f9a: 0x002d9a85, 0x5f9b: 0x002dcc85, + 0x5f9c: 0x002dfe85, 0x5f9d: 0x002e2285, 0x5f9e: 0x002e8285, 0x5f9f: 0x002e9e85, + 0x5fa0: 0x002ee285, 0x5fa1: 0x002f2c85, 0x5fa2: 0x002f5685, 0x5fa3: 0x002f7a85, + 0x5fa4: 0x002fe685, 0x5fa5: 0x00302c85, 0x5fa6: 0x00306c85, 0x5fa7: 0x0030be85, + 0x5fa8: 0x0030e285, 0x5fa9: 0x0030f685, 0x5faa: 0x00310085, 0x5fab: 0x00312a85, + 0x5fac: 0x002bde8b, 0x5fad: 0x002c0a8b, 0x5fae: 0x002c3a8b, 0x5faf: 0x002c628b, + 0x5fb0: 0x002c988b, 0x5fb1: 0x002d088b, 0x5fb2: 0x002d228b, 0x5fb3: 0x002d688b, + 0x5fb4: 0x002d9a8b, 0x5fb5: 0x002dcc8b, 0x5fb6: 0x002dfe8b, 0x5fb7: 0x002e228b, + 0x5fb8: 0x002e828b, 0x5fb9: 0x002e9e8b, 0x5fba: 0x002ee28b, 0x5fbb: 0x002f2c8b, + 0x5fbc: 0x002f568b, 0x5fbd: 0x002f7a8b, 0x5fbe: 0x002fe68b, 0x5fbf: 0x00302c8b, + // Block 0x17f, offset 0x5fc0 + 0x5fc0: 0x00306c8b, 0x5fc1: 0x0030be8b, 0x5fc2: 0x0030e28b, 0x5fc3: 0x0030f68b, + 0x5fc4: 0x0031008b, 0x5fc5: 0x00312a8b, 0x5fc6: 0x002bde85, 0x5fc7: 0x002c0a85, + 0x5fc8: 0x002c3a85, 0x5fc9: 0x002c6285, 0x5fca: 0x002c9885, 0x5fcb: 0x002d0885, + 0x5fcc: 0x002d2285, 0x5fcd: 0x002d6885, 0x5fce: 0x002d9a85, 0x5fcf: 0x002dcc85, + 0x5fd0: 0x002dfe85, 0x5fd1: 0x002e2285, 0x5fd2: 0x002e8285, 0x5fd3: 0x002e9e85, + 0x5fd4: 0x002ee285, 0x5fd5: 0x002f2c85, 0x5fd6: 0x002f5685, 0x5fd7: 0x002f7a85, + 0x5fd8: 0x002fe685, 0x5fd9: 0x00302c85, 0x5fda: 0x00306c85, 0x5fdb: 0x0030be85, + 0x5fdc: 0x0030e285, 0x5fdd: 0x0030f685, 0x5fde: 0x00310085, 0x5fdf: 0x00312a85, + 0x5fe0: 0x002bde8b, 0x5fe1: 0x002c0a8b, 0x5fe2: 0x002c3a8b, 0x5fe3: 0x002c628b, + 0x5fe4: 0x002c988b, 0x5fe5: 0x002d088b, 0x5fe6: 0x002d228b, 0x5fe7: 0x002d688b, + 0x5fe8: 0x002d9a8b, 0x5fe9: 0x002dcc8b, 0x5fea: 0x002dfe8b, 0x5feb: 0x002e228b, + 0x5fec: 0x002e828b, 0x5fed: 0x002e9e8b, 0x5fee: 0x002ee28b, 0x5fef: 0x002f2c8b, + 0x5ff0: 0x002f568b, 0x5ff1: 0x002f7a8b, 0x5ff2: 0x002fe68b, 0x5ff3: 0x00302c8b, + 0x5ff4: 0x00306c8b, 0x5ff5: 0x0030be8b, 0x5ff6: 0x0030e28b, 0x5ff7: 0x0030f68b, + 0x5ff8: 0x0031008b, 0x5ff9: 0x00312a8b, 0x5ffa: 0x002bde85, 0x5ffb: 0x002c0a85, + 0x5ffc: 0x002c3a85, 0x5ffd: 0x002c6285, 0x5ffe: 0x002c9885, 0x5fff: 0x002d0885, + // Block 0x180, offset 0x6000 + 0x6000: 0x002d2285, 0x6001: 0x002d6885, 0x6002: 0x002d9a85, 0x6003: 0x002dcc85, + 0x6004: 0x002dfe85, 0x6005: 0x002e2285, 0x6006: 0x002e8285, 0x6007: 0x002e9e85, + 0x6008: 0x002ee285, 0x6009: 0x002f2c85, 0x600a: 0x002f5685, 0x600b: 0x002f7a85, + 0x600c: 0x002fe685, 0x600d: 0x00302c85, 0x600e: 0x00306c85, 0x600f: 0x0030be85, + 0x6010: 0x0030e285, 0x6011: 0x0030f685, 0x6012: 0x00310085, 0x6013: 0x00312a85, + 0x6014: 0x002bde8b, 0x6015: 0x002c0a8b, 0x6016: 0x002c3a8b, 0x6017: 0x002c628b, + 0x6018: 0x002c988b, 0x6019: 0x002d088b, 0x601a: 0x002d228b, 0x601b: 0x002d688b, + 0x601c: 0x002d9a8b, 0x601d: 0x002dcc8b, 0x601e: 0x002dfe8b, 0x601f: 0x002e228b, + 0x6020: 0x002e828b, 0x6021: 0x002e9e8b, 0x6022: 0x002ee28b, 0x6023: 0x002f2c8b, + 0x6024: 0x002f568b, 0x6025: 0x002f7a8b, 0x6026: 0x002fe68b, 0x6027: 0x00302c8b, + 0x6028: 0x00306c8b, 0x6029: 0x0030be8b, 0x602a: 0x0030e28b, 0x602b: 0x0030f68b, + 0x602c: 0x0031008b, 0x602d: 0x00312a8b, 0x602e: 0x002bde85, 0x602f: 0x002c0a85, + 0x6030: 0x002c3a85, 0x6031: 0x002c6285, 0x6032: 0x002c9885, 0x6033: 0x002d0885, + 0x6034: 0x002d2285, 0x6035: 0x002d6885, 0x6036: 0x002d9a85, 0x6037: 0x002dcc85, + 0x6038: 0x002dfe85, 0x6039: 0x002e2285, 0x603a: 0x002e8285, 0x603b: 0x002e9e85, + 0x603c: 0x002ee285, 0x603d: 0x002f2c85, 0x603e: 0x002f5685, 0x603f: 0x002f7a85, + // Block 0x181, offset 0x6040 + 0x6040: 0x002fe685, 0x6041: 0x00302c85, 0x6042: 0x00306c85, 0x6043: 0x0030be85, + 0x6044: 0x0030e285, 0x6045: 0x0030f685, 0x6046: 0x00310085, 0x6047: 0x00312a85, + 0x6048: 0x002bde8b, 0x6049: 0x002c0a8b, 0x604a: 0x002c3a8b, 0x604b: 0x002c628b, + 0x604c: 0x002c988b, 0x604d: 0x002d088b, 0x604e: 0x002d228b, 0x604f: 0x002d688b, + 0x6050: 0x002d9a8b, 0x6051: 0x002dcc8b, 0x6052: 0x002dfe8b, 0x6053: 0x002e228b, + 0x6054: 0x002e828b, 0x6055: 0x002e9e8b, 0x6056: 0x002ee28b, 0x6057: 0x002f2c8b, + 0x6058: 0x002f568b, 0x6059: 0x002f7a8b, 0x605a: 0x002fe68b, 0x605b: 0x00302c8b, + 0x605c: 0x00306c8b, 0x605d: 0x0030be8b, 0x605e: 0x0030e28b, 0x605f: 0x0030f68b, + 0x6060: 0x0031008b, 0x6061: 0x00312a8b, 0x6062: 0x002bde85, 0x6063: 0x002c0a85, + 0x6064: 0x002c3a85, 0x6065: 0x002c6285, 0x6066: 0x002c9885, 0x6067: 0x002d0885, + 0x6068: 0x002d2285, 0x6069: 0x002d6885, 0x606a: 0x002d9a85, 0x606b: 0x002dcc85, + 0x606c: 0x002dfe85, 0x606d: 0x002e2285, 0x606e: 0x002e8285, 0x606f: 0x002e9e85, + 0x6070: 0x002ee285, 0x6071: 0x002f2c85, 0x6072: 0x002f5685, 0x6073: 0x002f7a85, + 0x6074: 0x002fe685, 0x6075: 0x00302c85, 0x6076: 0x00306c85, 0x6077: 0x0030be85, + 0x6078: 0x0030e285, 0x6079: 0x0030f685, 0x607a: 0x00310085, 0x607b: 0x00312a85, + 0x607c: 0x002bde8b, 0x607d: 0x002c0a8b, 0x607e: 0x002c3a8b, 0x607f: 0x002c628b, + // Block 0x182, offset 0x6080 + 0x6080: 0x002c988b, 0x6081: 0x002d088b, 0x6082: 0x002d228b, 0x6083: 0x002d688b, + 0x6084: 0x002d9a8b, 0x6085: 0x002dcc8b, 0x6086: 0x002dfe8b, 0x6087: 0x002e228b, + 0x6088: 0x002e828b, 0x6089: 0x002e9e8b, 0x608a: 0x002ee28b, 0x608b: 0x002f2c8b, + 0x608c: 0x002f568b, 0x608d: 0x002f7a8b, 0x608e: 0x002fe68b, 0x608f: 0x00302c8b, + 0x6090: 0x00306c8b, 0x6091: 0x0030be8b, 0x6092: 0x0030e28b, 0x6093: 0x0030f68b, + 0x6094: 0x0031008b, 0x6095: 0x00312a8b, 0x6096: 0x002bde85, 0x6097: 0x002c0a85, + 0x6098: 0x002c3a85, 0x6099: 0x002c6285, 0x609a: 0x002c9885, 0x609b: 0x002d0885, + 0x609c: 0x002d2285, 0x609d: 0x002d6885, 0x609e: 0x002d9a85, 0x609f: 0x002dcc85, + 0x60a0: 0x002dfe85, 0x60a1: 0x002e2285, 0x60a2: 0x002e8285, 0x60a3: 0x002e9e85, + 0x60a4: 0x002ee285, 0x60a5: 0x002f2c85, 0x60a6: 0x002f5685, 0x60a7: 0x002f7a85, + 0x60a8: 0x002fe685, 0x60a9: 0x00302c85, 0x60aa: 0x00306c85, 0x60ab: 0x0030be85, + 0x60ac: 0x0030e285, 0x60ad: 0x0030f685, 0x60ae: 0x00310085, 0x60af: 0x00312a85, + 0x60b0: 0x002bde8b, 0x60b1: 0x002c0a8b, 0x60b2: 0x002c3a8b, 0x60b3: 0x002c628b, + 0x60b4: 0x002c988b, 0x60b5: 0x002d088b, 0x60b6: 0x002d228b, 0x60b7: 0x002d688b, + 0x60b8: 0x002d9a8b, 0x60b9: 0x002dcc8b, 0x60ba: 0x002dfe8b, 0x60bb: 0x002e228b, + 0x60bc: 0x002e828b, 0x60bd: 0x002e9e8b, 0x60be: 0x002ee28b, 0x60bf: 0x002f2c8b, + // Block 0x183, offset 0x60c0 + 0x60c0: 0x002f568b, 0x60c1: 0x002f7a8b, 0x60c2: 0x002fe68b, 0x60c3: 0x00302c8b, + 0x60c4: 0x00306c8b, 0x60c5: 0x0030be8b, 0x60c6: 0x0030e28b, 0x60c7: 0x0030f68b, + 0x60c8: 0x0031008b, 0x60c9: 0x00312a8b, 0x60ca: 0x002bde85, 0x60cb: 0x002c0a85, + 0x60cc: 0x002c3a85, 0x60cd: 0x002c6285, 0x60ce: 0x002c9885, 0x60cf: 0x002d0885, + 0x60d0: 0x002d2285, 0x60d1: 0x002d6885, 0x60d2: 0x002d9a85, 0x60d3: 0x002dcc85, + 0x60d4: 0x002dfe85, 0x60d5: 0x002e2285, 0x60d6: 0x002e8285, 0x60d7: 0x002e9e85, + 0x60d8: 0x002ee285, 0x60d9: 0x002f2c85, 0x60da: 0x002f5685, 0x60db: 0x002f7a85, + 0x60dc: 0x002fe685, 0x60dd: 0x00302c85, 0x60de: 0x00306c85, 0x60df: 0x0030be85, + 0x60e0: 0x0030e285, 0x60e1: 0x0030f685, 0x60e2: 0x00310085, 0x60e3: 0x00312a85, + 0x60e4: 0x002da285, 0x60e5: 0x002dd485, + 0x60e8: 0x0032528b, 0x60e9: 0x0032548b, 0x60ea: 0x0032568b, 0x60eb: 0x00325a8b, + 0x60ec: 0x00325c8b, 0x60ed: 0x0032648b, 0x60ee: 0x0032688b, 0x60ef: 0x00326a8b, + 0x60f0: 0x00326c8b, 0x60f1: 0x0032708b, 0x60f2: 0x0032728b, 0x60f3: 0x0032768b, + 0x60f4: 0x0032788b, 0x60f5: 0x00327a8b, 0x60f6: 0x00327c8b, 0x60f7: 0x00327e8b, + 0x60f8: 0x0032888b, 0x60f9: 0x00326a8b, 0x60fa: 0x00328e8b, 0x60fb: 0x0032968b, + 0x60fc: 0x0032988b, 0x60fd: 0x00329a8b, 0x60fe: 0x00329c8b, 0x60ff: 0x00329e8b, + // Block 0x184, offset 0x6100 + 0x6100: 0x0032a28b, 0x6101: 0x00092485, 0x6102: 0x00325285, 0x6103: 0x00325485, + 0x6104: 0x00325685, 0x6105: 0x00325a85, 0x6106: 0x00325c85, 0x6107: 0x00326485, + 0x6108: 0x00326885, 0x6109: 0x00326a85, 0x610a: 0x00326c85, 0x610b: 0x00327085, + 0x610c: 0x00327285, 0x610d: 0x00327685, 0x610e: 0x00327885, 0x610f: 0x00327a85, + 0x6110: 0x00327c85, 0x6111: 0x00327e85, 0x6112: 0x00328885, 0x6113: 0x00328e85, + 0x6114: 0x00328e85, 0x6115: 0x00329685, 0x6116: 0x00329885, 0x6117: 0x00329a85, + 0x6118: 0x00329c85, 0x6119: 0x00329e85, 0x611a: 0x0032a285, 0x611b: 0x00091c85, + 0x611c: 0x00325c85, 0x611d: 0x00326a85, 0x611e: 0x00327085, 0x611f: 0x00329a85, + 0x6120: 0x00328885, 0x6121: 0x00327e85, 0x6122: 0x0032528b, 0x6123: 0x0032548b, + 0x6124: 0x0032568b, 0x6125: 0x00325a8b, 0x6126: 0x00325c8b, 0x6127: 0x0032648b, + 0x6128: 0x0032688b, 0x6129: 0x00326a8b, 0x612a: 0x00326c8b, 0x612b: 0x0032708b, + 0x612c: 0x0032728b, 0x612d: 0x0032768b, 0x612e: 0x0032788b, 0x612f: 0x00327a8b, + 0x6130: 0x00327c8b, 0x6131: 0x00327e8b, 0x6132: 0x0032888b, 0x6133: 0x00326a8b, + 0x6134: 0x00328e8b, 0x6135: 0x0032968b, 0x6136: 0x0032988b, 0x6137: 0x00329a8b, + 0x6138: 0x00329c8b, 0x6139: 0x00329e8b, 0x613a: 0x0032a28b, 0x613b: 0x00092485, + 0x613c: 0x00325285, 0x613d: 0x00325485, 0x613e: 0x00325685, 0x613f: 0x00325a85, + // Block 0x185, offset 0x6140 + 0x6140: 0x00325c85, 0x6141: 0x00326485, 0x6142: 0x00326885, 0x6143: 0x00326a85, + 0x6144: 0x00326c85, 0x6145: 0x00327085, 0x6146: 0x00327285, 0x6147: 0x00327685, + 0x6148: 0x00327885, 0x6149: 0x00327a85, 0x614a: 0x00327c85, 0x614b: 0x00327e85, + 0x614c: 0x00328885, 0x614d: 0x00328e85, 0x614e: 0x00328e85, 0x614f: 0x00329685, + 0x6150: 0x00329885, 0x6151: 0x00329a85, 0x6152: 0x00329c85, 0x6153: 0x00329e85, + 0x6154: 0x0032a285, 0x6155: 0x00091c85, 0x6156: 0x00325c85, 0x6157: 0x00326a85, + 0x6158: 0x00327085, 0x6159: 0x00329a85, 0x615a: 0x00328885, 0x615b: 0x00327e85, + 0x615c: 0x0032528b, 0x615d: 0x0032548b, 0x615e: 0x0032568b, 0x615f: 0x00325a8b, + 0x6160: 0x00325c8b, 0x6161: 0x0032648b, 0x6162: 0x0032688b, 0x6163: 0x00326a8b, + 0x6164: 0x00326c8b, 0x6165: 0x0032708b, 0x6166: 0x0032728b, 0x6167: 0x0032768b, + 0x6168: 0x0032788b, 0x6169: 0x00327a8b, 0x616a: 0x00327c8b, 0x616b: 0x00327e8b, + 0x616c: 0x0032888b, 0x616d: 0x00326a8b, 0x616e: 0x00328e8b, 0x616f: 0x0032968b, + 0x6170: 0x0032988b, 0x6171: 0x00329a8b, 0x6172: 0x00329c8b, 0x6173: 0x00329e8b, + 0x6174: 0x0032a28b, 0x6175: 0x00092485, 0x6176: 0x00325285, 0x6177: 0x00325485, + 0x6178: 0x00325685, 0x6179: 0x00325a85, 0x617a: 0x00325c85, 0x617b: 0x00326485, + 0x617c: 0x00326885, 0x617d: 0x00326a85, 0x617e: 0x00326c85, 0x617f: 0x00327085, + // Block 0x186, offset 0x6180 + 0x6180: 0x00327285, 0x6181: 0x00327685, 0x6182: 0x00327885, 0x6183: 0x00327a85, + 0x6184: 0x00327c85, 0x6185: 0x00327e85, 0x6186: 0x00328885, 0x6187: 0x00328e85, + 0x6188: 0x00328e85, 0x6189: 0x00329685, 0x618a: 0x00329885, 0x618b: 0x00329a85, + 0x618c: 0x00329c85, 0x618d: 0x00329e85, 0x618e: 0x0032a285, 0x618f: 0x00091c85, + 0x6190: 0x00325c85, 0x6191: 0x00326a85, 0x6192: 0x00327085, 0x6193: 0x00329a85, + 0x6194: 0x00328885, 0x6195: 0x00327e85, 0x6196: 0x0032528b, 0x6197: 0x0032548b, + 0x6198: 0x0032568b, 0x6199: 0x00325a8b, 0x619a: 0x00325c8b, 0x619b: 0x0032648b, + 0x619c: 0x0032688b, 0x619d: 0x00326a8b, 0x619e: 0x00326c8b, 0x619f: 0x0032708b, + 0x61a0: 0x0032728b, 0x61a1: 0x0032768b, 0x61a2: 0x0032788b, 0x61a3: 0x00327a8b, + 0x61a4: 0x00327c8b, 0x61a5: 0x00327e8b, 0x61a6: 0x0032888b, 0x61a7: 0x00326a8b, + 0x61a8: 0x00328e8b, 0x61a9: 0x0032968b, 0x61aa: 0x0032988b, 0x61ab: 0x00329a8b, + 0x61ac: 0x00329c8b, 0x61ad: 0x00329e8b, 0x61ae: 0x0032a28b, 0x61af: 0x00092485, + 0x61b0: 0x00325285, 0x61b1: 0x00325485, 0x61b2: 0x00325685, 0x61b3: 0x00325a85, + 0x61b4: 0x00325c85, 0x61b5: 0x00326485, 0x61b6: 0x00326885, 0x61b7: 0x00326a85, + 0x61b8: 0x00326c85, 0x61b9: 0x00327085, 0x61ba: 0x00327285, 0x61bb: 0x00327685, + 0x61bc: 0x00327885, 0x61bd: 0x00327a85, 0x61be: 0x00327c85, 0x61bf: 0x00327e85, + // Block 0x187, offset 0x61c0 + 0x61c0: 0x00328885, 0x61c1: 0x00328e85, 0x61c2: 0x00328e85, 0x61c3: 0x00329685, + 0x61c4: 0x00329885, 0x61c5: 0x00329a85, 0x61c6: 0x00329c85, 0x61c7: 0x00329e85, + 0x61c8: 0x0032a285, 0x61c9: 0x00091c85, 0x61ca: 0x00325c85, 0x61cb: 0x00326a85, + 0x61cc: 0x00327085, 0x61cd: 0x00329a85, 0x61ce: 0x00328885, 0x61cf: 0x00327e85, + 0x61d0: 0x0032528b, 0x61d1: 0x0032548b, 0x61d2: 0x0032568b, 0x61d3: 0x00325a8b, + 0x61d4: 0x00325c8b, 0x61d5: 0x0032648b, 0x61d6: 0x0032688b, 0x61d7: 0x00326a8b, + 0x61d8: 0x00326c8b, 0x61d9: 0x0032708b, 0x61da: 0x0032728b, 0x61db: 0x0032768b, + 0x61dc: 0x0032788b, 0x61dd: 0x00327a8b, 0x61de: 0x00327c8b, 0x61df: 0x00327e8b, + 0x61e0: 0x0032888b, 0x61e1: 0x00326a8b, 0x61e2: 0x00328e8b, 0x61e3: 0x0032968b, + 0x61e4: 0x0032988b, 0x61e5: 0x00329a8b, 0x61e6: 0x00329c8b, 0x61e7: 0x00329e8b, + 0x61e8: 0x0032a28b, 0x61e9: 0x00092485, 0x61ea: 0x00325285, 0x61eb: 0x00325485, + 0x61ec: 0x00325685, 0x61ed: 0x00325a85, 0x61ee: 0x00325c85, 0x61ef: 0x00326485, + 0x61f0: 0x00326885, 0x61f1: 0x00326a85, 0x61f2: 0x00326c85, 0x61f3: 0x00327085, + 0x61f4: 0x00327285, 0x61f5: 0x00327685, 0x61f6: 0x00327885, 0x61f7: 0x00327a85, + 0x61f8: 0x00327c85, 0x61f9: 0x00327e85, 0x61fa: 0x00328885, 0x61fb: 0x00328e85, + 0x61fc: 0x00328e85, 0x61fd: 0x00329685, 0x61fe: 0x00329885, 0x61ff: 0x00329a85, + // Block 0x188, offset 0x6200 + 0x6200: 0x00329c85, 0x6201: 0x00329e85, 0x6202: 0x0032a285, 0x6203: 0x00091c85, + 0x6204: 0x00325c85, 0x6205: 0x00326a85, 0x6206: 0x00327085, 0x6207: 0x00329a85, + 0x6208: 0x00328885, 0x6209: 0x00327e85, 0x620a: 0x00325e8b, 0x620b: 0x00325e85, + 0x620e: 0x0029cc85, 0x620f: 0x0029ce85, + 0x6210: 0x0029d085, 0x6211: 0x0029d285, 0x6212: 0x0029d485, 0x6213: 0x0029d685, + 0x6214: 0x0029d885, 0x6215: 0x0029da85, 0x6216: 0x0029dc85, 0x6217: 0x0029de85, + 0x6218: 0x0029cc85, 0x6219: 0x0029ce85, 0x621a: 0x0029d085, 0x621b: 0x0029d285, + 0x621c: 0x0029d485, 0x621d: 0x0029d685, 0x621e: 0x0029d885, 0x621f: 0x0029da85, + 0x6220: 0x0029dc85, 0x6221: 0x0029de85, 0x6222: 0x0029cc85, 0x6223: 0x0029ce85, + 0x6224: 0x0029d085, 0x6225: 0x0029d285, 0x6226: 0x0029d485, 0x6227: 0x0029d685, + 0x6228: 0x0029d885, 0x6229: 0x0029da85, 0x622a: 0x0029dc85, 0x622b: 0x0029de85, + 0x622c: 0x0029cc85, 0x622d: 0x0029ce85, 0x622e: 0x0029d085, 0x622f: 0x0029d285, + 0x6230: 0x0029d485, 0x6231: 0x0029d685, 0x6232: 0x0029d885, 0x6233: 0x0029da85, + 0x6234: 0x0029dc85, 0x6235: 0x0029de85, 0x6236: 0x0029cc85, 0x6237: 0x0029ce85, + 0x6238: 0x0029d085, 0x6239: 0x0029d285, 0x623a: 0x0029d485, 0x623b: 0x0029d685, + 0x623c: 0x0029d885, 0x623d: 0x0029da85, 0x623e: 0x0029dc85, 0x623f: 0x0029de85, + // Block 0x189, offset 0x6240 + 0x6240: 0x00393885, 0x6241: 0x00393c85, 0x6242: 0x00396485, 0x6243: 0x00398885, + 0x6245: 0x003a7485, 0x6246: 0x0039a685, 0x6247: 0x00397285, + 0x6248: 0x0039e685, 0x6249: 0x003a9085, 0x624a: 0x003a1a85, 0x624b: 0x003a4085, + 0x624c: 0x003a4e85, 0x624d: 0x003a5685, 0x624e: 0x0039c685, 0x624f: 0x0039ee85, + 0x6250: 0x0039fc85, 0x6251: 0x0039dc85, 0x6252: 0x003a1285, 0x6253: 0x0039a485, + 0x6254: 0x0039c885, 0x6255: 0x00395685, 0x6256: 0x00395885, 0x6257: 0x00397485, + 0x6258: 0x00398a85, 0x6259: 0x0039de85, 0x625a: 0x0039e885, 0x625b: 0x0039f085, + 0x625c: 0x00393a85, 0x625d: 0x003a5885, 0x625e: 0x0039fe85, 0x625f: 0x003a1085, + 0x6261: 0x00393c85, 0x6262: 0x00396485, + 0x6264: 0x003a6885, 0x6267: 0x00397285, + 0x6269: 0x003a9085, 0x626a: 0x003a1a85, 0x626b: 0x003a4085, + 0x626c: 0x003a4e85, 0x626d: 0x003a5685, 0x626e: 0x0039c685, 0x626f: 0x0039ee85, + 0x6270: 0x0039fc85, 0x6271: 0x0039dc85, 0x6272: 0x003a1285, + 0x6274: 0x0039c885, 0x6275: 0x00395685, 0x6276: 0x00395885, 0x6277: 0x00397485, + 0x6279: 0x0039de85, 0x627b: 0x0039f085, + // Block 0x18a, offset 0x6280 + 0x6282: 0x00396485, + 0x6287: 0x00397285, + 0x6289: 0x003a9085, 0x628b: 0x003a4085, + 0x628d: 0x003a5685, 0x628e: 0x0039c685, 0x628f: 0x0039ee85, + 0x6291: 0x0039dc85, 0x6292: 0x003a1285, + 0x6294: 0x0039c885, 0x6297: 0x00397485, + 0x6299: 0x0039de85, 0x629b: 0x0039f085, + 0x629d: 0x003a5885, 0x629f: 0x003a1085, + 0x62a1: 0x00393c85, 0x62a2: 0x00396485, + 0x62a4: 0x003a6885, 0x62a7: 0x00397285, + 0x62a8: 0x0039e685, 0x62a9: 0x003a9085, 0x62aa: 0x003a1a85, + 0x62ac: 0x003a4e85, 0x62ad: 0x003a5685, 0x62ae: 0x0039c685, 0x62af: 0x0039ee85, + 0x62b0: 0x0039fc85, 0x62b1: 0x0039dc85, 0x62b2: 0x003a1285, + 0x62b4: 0x0039c885, 0x62b5: 0x00395685, 0x62b6: 0x00395885, 0x62b7: 0x00397485, + 0x62b9: 0x0039de85, 0x62ba: 0x0039e885, 0x62bb: 0x0039f085, + 0x62bc: 0x00393a85, 0x62be: 0x0039fe85, + // Block 0x18b, offset 0x62c0 + 0x62c0: 0x00393885, 0x62c1: 0x00393c85, 0x62c2: 0x00396485, 0x62c3: 0x00398885, + 0x62c4: 0x003a6885, 0x62c5: 0x003a7485, 0x62c6: 0x0039a685, 0x62c7: 0x00397285, + 0x62c8: 0x0039e685, 0x62c9: 0x003a9085, 0x62cb: 0x003a4085, + 0x62cc: 0x003a4e85, 0x62cd: 0x003a5685, 0x62ce: 0x0039c685, 0x62cf: 0x0039ee85, + 0x62d0: 0x0039fc85, 0x62d1: 0x0039dc85, 0x62d2: 0x003a1285, 0x62d3: 0x0039a485, + 0x62d4: 0x0039c885, 0x62d5: 0x00395685, 0x62d6: 0x00395885, 0x62d7: 0x00397485, + 0x62d8: 0x00398a85, 0x62d9: 0x0039de85, 0x62da: 0x0039e885, 0x62db: 0x0039f085, + 0x62e1: 0x00393c85, 0x62e2: 0x00396485, 0x62e3: 0x00398885, + 0x62e5: 0x003a7485, 0x62e6: 0x0039a685, 0x62e7: 0x00397285, + 0x62e8: 0x0039e685, 0x62e9: 0x003a9085, 0x62eb: 0x003a4085, + 0x62ec: 0x003a4e85, 0x62ed: 0x003a5685, 0x62ee: 0x0039c685, 0x62ef: 0x0039ee85, + 0x62f0: 0x0039fc85, 0x62f1: 0x0039dc85, 0x62f2: 0x003a1285, 0x62f3: 0x0039a485, + 0x62f4: 0x0039c885, 0x62f5: 0x00395685, 0x62f6: 0x00395885, 0x62f7: 0x00397485, + 0x62f8: 0x00398a85, 0x62f9: 0x0039de85, 0x62fa: 0x0039e885, 0x62fb: 0x0039f085, + // Block 0x18c, offset 0x6300 + 0x6330: 0x40070a20, 0x6331: 0x40070c20, + // Block 0x18d, offset 0x6340 + 0x6340: 0x401f6e20, 0x6341: 0x401f7020, 0x6342: 0x401f7220, 0x6343: 0x401f7420, + 0x6344: 0x401f7620, 0x6345: 0x401f7820, 0x6346: 0x401f7a20, 0x6347: 0x401f7c20, + 0x6348: 0x401f7e20, 0x6349: 0x401f8020, 0x634a: 0x401f8220, 0x634b: 0x401f8420, + 0x634c: 0x401f8620, 0x634d: 0x401f8820, 0x634e: 0x401f8a20, 0x634f: 0x401f8c20, + 0x6350: 0x401f8e20, 0x6351: 0x401f9020, 0x6352: 0x401f9220, 0x6353: 0x401f9420, + 0x6354: 0x401f9620, 0x6355: 0x401f9820, 0x6356: 0x401f9a20, 0x6357: 0x401f9c20, + 0x6358: 0x401f9e20, 0x6359: 0x401fa020, 0x635a: 0x401fa220, 0x635b: 0x401fa420, + 0x635c: 0x401fa620, 0x635d: 0x401fa820, 0x635e: 0x401faa20, 0x635f: 0x401fac20, + 0x6360: 0x401fae20, 0x6361: 0x401fb020, 0x6362: 0x401fb220, 0x6363: 0x401fb420, + 0x6364: 0x401fb620, 0x6365: 0x401fb820, 0x6366: 0x401fba20, 0x6367: 0x401fbc20, + 0x6368: 0x401fbe20, 0x6369: 0x401fc020, 0x636a: 0x401fc220, 0x636b: 0x401fc420, + 0x6370: 0x401fc620, 0x6371: 0x401fc820, 0x6372: 0x401fca20, 0x6373: 0x401fcc20, + 0x6374: 0x401fce20, 0x6375: 0x401fd020, 0x6376: 0x401fd220, 0x6377: 0x401fd420, + 0x6378: 0x401fd620, 0x6379: 0x401fd820, 0x637a: 0x401fda20, 0x637b: 0x401fdc20, + 0x637c: 0x401fde20, 0x637d: 0x401fe020, 0x637e: 0x401fe220, 0x637f: 0x401fe420, + // Block 0x18e, offset 0x6380 + 0x6380: 0x401fe620, 0x6381: 0x401fe820, 0x6382: 0x401fea20, 0x6383: 0x401fec20, + 0x6384: 0x401fee20, 0x6385: 0x401ff020, 0x6386: 0x401ff220, 0x6387: 0x401ff420, + 0x6388: 0x401ff620, 0x6389: 0x401ff820, 0x638a: 0x401ffa20, 0x638b: 0x401ffc20, + 0x638c: 0x401ffe20, 0x638d: 0x40200020, 0x638e: 0x40200220, 0x638f: 0x40200420, + 0x6390: 0x40200620, 0x6391: 0x40200820, 0x6392: 0x40200a20, 0x6393: 0x40200c20, + 0x6394: 0x40200e20, 0x6395: 0x40201020, 0x6396: 0x40201220, 0x6397: 0x40201420, + 0x6398: 0x40201620, 0x6399: 0x40201820, 0x639a: 0x40201a20, 0x639b: 0x40201c20, + 0x639c: 0x40201e20, 0x639d: 0x40202020, 0x639e: 0x40202220, 0x639f: 0x40202420, + 0x63a0: 0x40202620, 0x63a1: 0x40202820, 0x63a2: 0x40202a20, 0x63a3: 0x40202c20, + 0x63a4: 0x40202e20, 0x63a5: 0x40203020, 0x63a6: 0x40203220, 0x63a7: 0x40203420, + 0x63a8: 0x40203620, 0x63a9: 0x40203820, 0x63aa: 0x40203a20, 0x63ab: 0x40203c20, + 0x63ac: 0x40203e20, 0x63ad: 0x40204020, 0x63ae: 0x40204220, 0x63af: 0x40204420, + 0x63b0: 0x40204620, 0x63b1: 0x40204820, 0x63b2: 0x40204a20, 0x63b3: 0x40204c20, + 0x63b4: 0x40204e20, 0x63b5: 0x40205020, 0x63b6: 0x40205220, 0x63b7: 0x40205420, + 0x63b8: 0x40205620, 0x63b9: 0x40205820, 0x63ba: 0x40205a20, 0x63bb: 0x40205c20, + 0x63bc: 0x40205e20, 0x63bd: 0x40206020, 0x63be: 0x40206220, 0x63bf: 0x40206420, + // Block 0x18f, offset 0x63c0 + 0x63c0: 0x40206620, 0x63c1: 0x40206820, 0x63c2: 0x40206a20, 0x63c3: 0x40206c20, + 0x63c4: 0x40206e20, 0x63c5: 0x40207020, 0x63c6: 0x40207220, 0x63c7: 0x40207420, + 0x63c8: 0x40207620, 0x63c9: 0x40207820, 0x63ca: 0x40207a20, 0x63cb: 0x40207c20, + 0x63cc: 0x40207e20, 0x63cd: 0x40208020, 0x63ce: 0x40208220, 0x63cf: 0x40208420, + 0x63d0: 0x40208620, 0x63d1: 0x40208820, 0x63d2: 0x40208a20, 0x63d3: 0x40208c20, + 0x63e0: 0x40208e20, 0x63e1: 0x40209020, 0x63e2: 0x40209220, 0x63e3: 0x40209420, + 0x63e4: 0x40209620, 0x63e5: 0x40209820, 0x63e6: 0x40209a20, 0x63e7: 0x40209c20, + 0x63e8: 0x40209e20, 0x63e9: 0x4020a020, 0x63ea: 0x4020a220, 0x63eb: 0x4020a420, + 0x63ec: 0x4020a620, 0x63ed: 0x4020a820, 0x63ee: 0x4020aa20, + 0x63f1: 0x4020ac20, 0x63f2: 0x4020ae20, 0x63f3: 0x4020b020, + 0x63f4: 0x4020b220, 0x63f5: 0x4020b420, 0x63f6: 0x4020b620, 0x63f7: 0x4020b820, + 0x63f8: 0x4020ba20, 0x63f9: 0x4020bc20, 0x63fa: 0x4020be20, 0x63fb: 0x4020c020, + 0x63fc: 0x4020c220, 0x63fd: 0x4020c420, 0x63fe: 0x4020c620, + // Block 0x190, offset 0x6400 + 0x6401: 0x4020c820, 0x6402: 0x4020ca20, 0x6403: 0x4020cc20, + 0x6404: 0x4020ce20, 0x6405: 0x4020d020, 0x6406: 0x4020d220, 0x6407: 0x4020d420, + 0x6408: 0x4020d620, 0x6409: 0x4020d820, 0x640a: 0x4020da20, 0x640b: 0x4020dc20, + 0x640c: 0x4020de20, 0x640d: 0x4020e020, 0x640e: 0x4020e220, 0x640f: 0x4020e420, + 0x6411: 0x4020e620, 0x6412: 0x4020e820, 0x6413: 0x4020ea20, + 0x6414: 0x4020ec20, 0x6415: 0x4020ee20, 0x6416: 0x4020f020, 0x6417: 0x4020f220, + 0x6418: 0x4020f420, 0x6419: 0x4020f620, 0x641a: 0x4020f820, 0x641b: 0x4020fa20, + 0x641c: 0x4020fc20, 0x641d: 0x4020fe20, 0x641e: 0x40210020, 0x641f: 0x40210220, + // Block 0x191, offset 0x6440 + 0x6440: 0xf0001f04, 0x6441: 0xf0001f04, 0x6442: 0xf0001f04, 0x6443: 0xf0001f04, + 0x6444: 0xf0001f04, 0x6445: 0xf0001f04, 0x6446: 0xf0001f04, 0x6447: 0xf0001f04, + 0x6448: 0xf0001f04, 0x6449: 0xf0001f04, 0x644a: 0xf0001f04, + 0x6450: 0xf0000a04, 0x6451: 0xf0000a04, 0x6452: 0xf0000a04, 0x6453: 0xf0000a04, + 0x6454: 0xf0000a04, 0x6455: 0xf0000a04, 0x6456: 0xf0000a04, 0x6457: 0xf0000a04, + 0x6458: 0xf0000a04, 0x6459: 0xf0000a04, 0x645a: 0xf0000a04, 0x645b: 0xf0000a04, + 0x645c: 0xf0000a04, 0x645d: 0xf0000a04, 0x645e: 0xf0000a04, 0x645f: 0xf0000a04, + 0x6460: 0xf0000a04, 0x6461: 0xf0000a04, 0x6462: 0xf0000a04, 0x6463: 0xf0000a04, + 0x6464: 0xf0000a04, 0x6465: 0xf0000a04, 0x6466: 0xf0000a04, 0x6467: 0xf0000a04, + 0x6468: 0xf0000a04, 0x6469: 0xf0000a04, 0x646a: 0xf0000a04, 0x646b: 0x002c3a8c, + 0x646c: 0x002f7a8c, 0x646d: 0xf0000c0c, 0x646e: 0xf0000c0c, + 0x6470: 0x002bde9d, 0x6471: 0x002c0a9d, 0x6472: 0x002c3a9d, 0x6473: 0x002c629d, + 0x6474: 0x002c989d, 0x6475: 0x002d089d, 0x6476: 0x002d229d, 0x6477: 0x002d689d, + 0x6478: 0x002d9a9d, 0x6479: 0x002dcc9d, 0x647a: 0x002dfe9d, 0x647b: 0x002e229d, + 0x647c: 0x002e829d, 0x647d: 0x002e9e9d, 0x647e: 0x002ee29d, 0x647f: 0x002f2c9d, + // Block 0x192, offset 0x6480 + 0x6480: 0x002f569d, 0x6481: 0x002f7a9d, 0x6482: 0x002fe69d, 0x6483: 0x00302c9d, + 0x6484: 0x00306c9d, 0x6485: 0x0030be9d, 0x6486: 0x0030e29d, 0x6487: 0x0030f69d, + 0x6488: 0x0031009d, 0x6489: 0x00312a9d, 0x648a: 0xf0001d1d, 0x648b: 0xf0001d1d, + 0x648c: 0xf0001d1d, 0x648d: 0xf0001d1d, 0x648e: 0xe0000ebc, 0x648f: 0xf0001d1d, + 0x6490: 0x002bde8c, 0x6491: 0x002c0a8c, 0x6492: 0x002c3a8c, 0x6493: 0x002c628c, + 0x6494: 0x002c988c, 0x6495: 0x002d088c, 0x6496: 0x002d228c, 0x6497: 0x002d688c, + 0x6498: 0x002d9a8c, 0x6499: 0x002dcc8c, 0x649a: 0x002dfe8c, 0x649b: 0x002e228c, + 0x649c: 0x002e828c, 0x649d: 0x002e9e8c, 0x649e: 0x002ee28c, 0x649f: 0x002f2c8c, + 0x64a0: 0x002f568c, 0x64a1: 0x002f7a8c, 0x64a2: 0x002fe68c, 0x64a3: 0x00302c8c, + 0x64a4: 0x00306c8c, 0x64a5: 0x0030be8c, 0x64a6: 0x0030e28c, 0x64a7: 0x0030f68c, + 0x64a8: 0x0031008c, 0x64a9: 0x00312a8c, 0x64aa: 0xf0001414, 0x64ab: 0xf0001414, + 0x64b0: 0x002bde9d, 0x64b1: 0x002c0a9d, 0x64b2: 0x002c3a9d, 0x64b3: 0x002c629d, + 0x64b4: 0x002c989d, 0x64b5: 0x002d089d, 0x64b6: 0x002d229d, 0x64b7: 0x002d689d, + 0x64b8: 0x002d9a9d, 0x64b9: 0x002dcc9d, 0x64ba: 0x002dfe9d, 0x64bb: 0x002e229d, + 0x64bc: 0x002e829d, 0x64bd: 0x002e9e9d, 0x64be: 0x002ee29d, 0x64bf: 0x002f2c9d, + // Block 0x193, offset 0x64c0 + 0x64c0: 0x002f569d, 0x64c1: 0x002f7a9d, 0x64c2: 0x002fe69d, 0x64c3: 0x00302c9d, + 0x64c4: 0x00306c9d, 0x64c5: 0x0030be9d, 0x64c6: 0x0030e29d, 0x64c7: 0x0030f69d, + 0x64c8: 0x0031009d, 0x64c9: 0x00312a9d, 0x64ca: 0x002f2c9d, 0x64cb: 0xe0000c81, + 0x64cc: 0xe0000eb5, 0x64cd: 0xe0000f74, 0x64ce: 0xe00009d2, 0x64cf: 0xe00010f0, + 0x64d0: 0xf0001d1d, 0x64d1: 0xe0000a6f, 0x64d2: 0xe0000a7e, 0x64d3: 0xe0000ba4, + 0x64d4: 0xe0000c84, 0x64d5: 0xe0000d8a, 0x64d6: 0xe0000d8e, 0x64d7: 0xe0000e9b, + 0x64d8: 0xe0000f77, 0x64d9: 0xe00010a2, 0x64da: 0xe00010c0, + // Block 0x194, offset 0x6500 + 0x6526: 0x40110c20, 0x6527: 0x40110e20, + 0x6528: 0x40111020, 0x6529: 0x40111220, 0x652a: 0x40111420, 0x652b: 0x40111620, + 0x652c: 0x40111820, 0x652d: 0x40111a20, 0x652e: 0x40111c20, 0x652f: 0x40111e20, + 0x6530: 0x40112020, 0x6531: 0x40112220, 0x6532: 0x40112420, 0x6533: 0x40112620, + 0x6534: 0x40112820, 0x6535: 0x40112a20, 0x6536: 0x40112c20, 0x6537: 0x40112e20, + 0x6538: 0x40113020, 0x6539: 0x40113220, 0x653a: 0x40113420, 0x653b: 0x40113620, + 0x653c: 0x40113820, 0x653d: 0x40113a20, 0x653e: 0x40113c20, 0x653f: 0x40113e20, + // Block 0x195, offset 0x6540 + 0x6540: 0xf0001c1c, 0x6541: 0xf0001c1c, 0x6542: 0x00658c9c, + 0x6550: 0x02c4969c, 0x6551: 0x02b6ae9c, 0x6552: 0x02a7989c, 0x6553: 0xf0001c1c, + 0x6554: 0x029d189c, 0x6555: 0x02b2349c, 0x6556: 0x0313c69c, 0x6557: 0x02b2529c, + 0x6558: 0x029d489c, 0x6559: 0x02cc409c, 0x655a: 0x02e2429c, 0x655b: 0x02cb329c, + 0x655c: 0x02a49a9c, 0x655d: 0x02bf189c, 0x655e: 0x02a31a9c, 0x655f: 0x02cb609c, + 0x6560: 0x02a43a9c, 0x6561: 0x02fa849c, 0x6562: 0x02ea3e9c, 0x6563: 0x0319529c, + 0x6564: 0x02b1e09c, 0x6565: 0x02a8729c, 0x6566: 0x02de289c, 0x6567: 0x02c52a9c, + 0x6568: 0x02c6aa9c, 0x6569: 0x029c009c, 0x656a: 0x029c129c, 0x656b: 0x0320949c, + 0x656c: 0x02bbcc9c, 0x656d: 0x029c5a9c, 0x656e: 0x02a7e69c, 0x656f: 0x02c60e9c, + 0x6570: 0x031ae09c, 0x6571: 0x02c4a69c, 0x6572: 0x02f3029c, 0x6573: 0x02f4f49c, + 0x6574: 0x02a8109c, 0x6575: 0x02dd009c, 0x6576: 0x02ce129c, 0x6577: 0x02ce109c, + 0x6578: 0x02ea669c, 0x6579: 0x02a4e49c, 0x657a: 0x02ab6c9c, + // Block 0x196, offset 0x6580 + 0x6580: 0xf0000404, 0x6581: 0xf0000404, 0x6582: 0xf0000404, 0x6583: 0xf0000404, + 0x6584: 0xf0000404, 0x6585: 0xf0000404, 0x6586: 0xf0000404, 0x6587: 0xf0000404, + 0x6588: 0xf0000404, + 0x6590: 0x02bf2e86, 0x6591: 0x02a7de86, + // Block 0x197, offset 0x65c0 + 0x65c0: 0x40210420, 0x65c1: 0x40210620, 0x65c2: 0x40210820, 0x65c3: 0x40210a20, + 0x65c4: 0x40210c20, 0x65c5: 0x40210e20, 0x65c6: 0x40211020, 0x65c7: 0x40211220, + 0x65c8: 0x40211420, 0x65c9: 0x40211620, 0x65ca: 0x40211820, 0x65cb: 0x40211a20, + 0x65cc: 0x40211c20, 0x65cd: 0x40211e20, 0x65ce: 0x40212020, 0x65cf: 0x40212220, + 0x65d0: 0x40212420, 0x65d1: 0x40212620, 0x65d2: 0x40212820, 0x65d3: 0x40212a20, + 0x65d4: 0x40212c20, 0x65d5: 0x40212e20, 0x65d6: 0x40213020, 0x65d7: 0x40213220, + 0x65d8: 0x40213420, 0x65d9: 0x40213620, 0x65da: 0x40213820, 0x65db: 0x40213a20, + 0x65dc: 0x40213c20, 0x65dd: 0x40213e20, 0x65de: 0x40214020, 0x65df: 0x40214220, + 0x65e0: 0x40214420, + 0x65f0: 0x40214620, 0x65f1: 0x40214820, 0x65f2: 0x40214a20, 0x65f3: 0x40214c20, + 0x65f4: 0x40214e20, 0x65f5: 0x40215020, 0x65f7: 0x40215220, + 0x65f8: 0x40215420, 0x65f9: 0x40215620, 0x65fa: 0x40215820, 0x65fb: 0x40215a20, + 0x65fc: 0x40215c20, 0x65fd: 0x40215e20, 0x65fe: 0x40216020, 0x65ff: 0x40216220, + // Block 0x198, offset 0x6600 + 0x6600: 0x40216420, 0x6601: 0x40216620, 0x6602: 0x40216820, 0x6603: 0x40216a20, + 0x6604: 0x40216c20, 0x6605: 0x40216e20, 0x6606: 0x40217020, 0x6607: 0x40217220, + 0x6608: 0x40217420, 0x6609: 0x40217620, 0x660a: 0x40217820, 0x660b: 0x40217a20, + 0x660c: 0x40217c20, 0x660d: 0x40217e20, 0x660e: 0x40218020, 0x660f: 0x40218220, + 0x6610: 0x40218420, 0x6611: 0x40218620, 0x6612: 0x40218820, 0x6613: 0x40218a20, + 0x6614: 0x40218c20, 0x6615: 0x40218e20, 0x6616: 0x40219020, 0x6617: 0x40219220, + 0x6618: 0x40219420, 0x6619: 0x40219620, 0x661a: 0x40219820, 0x661b: 0x40219a20, + 0x661c: 0x40219c20, 0x661d: 0x40219e20, 0x661e: 0x4021a020, 0x661f: 0x4021a220, + 0x6620: 0x4021a420, 0x6621: 0x4021a620, 0x6622: 0x4021a820, 0x6623: 0x4021aa20, + 0x6624: 0x4021ac20, 0x6625: 0x4021ae20, 0x6626: 0x4021b020, 0x6627: 0x4021b220, + 0x6628: 0x4021b420, 0x6629: 0x4021b620, 0x662a: 0x4021b820, 0x662b: 0x4021ba20, + 0x662c: 0x4021bc20, 0x662d: 0x4021be20, 0x662e: 0x4021c020, 0x662f: 0x4021c220, + 0x6630: 0x4021c420, 0x6631: 0x4021c620, 0x6632: 0x4021c820, 0x6633: 0x4021ca20, + 0x6634: 0x4021cc20, 0x6635: 0x4021ce20, 0x6636: 0x4021d020, 0x6637: 0x4021d220, + 0x6638: 0x4021d420, 0x6639: 0x4021d620, 0x663a: 0x4021d820, 0x663b: 0x4021da20, + 0x663c: 0x4021dc20, + // Block 0x199, offset 0x6640 + 0x6640: 0x4021de20, 0x6641: 0x4021e020, 0x6642: 0x4021e220, 0x6643: 0x4021e420, + 0x6644: 0x4021e620, 0x6645: 0x4021e820, 0x6646: 0x4021ea20, 0x6647: 0x4021ec20, + 0x6648: 0x4021ee20, 0x6649: 0x4021f020, 0x664a: 0x4021f220, 0x664b: 0x4021f420, + 0x664c: 0x4021f620, 0x664d: 0x4021f820, 0x664e: 0x4021fa20, 0x664f: 0x4021fc20, + 0x6650: 0x4021fe20, 0x6651: 0x40220020, 0x6652: 0x40220220, 0x6653: 0x40220420, + 0x6660: 0x40220620, 0x6661: 0x40220820, 0x6662: 0x40220a20, 0x6663: 0x40220c20, + 0x6664: 0x40220e20, 0x6665: 0x40221020, 0x6666: 0x40221220, 0x6667: 0x40221420, + 0x6668: 0x40221620, 0x6669: 0x40221820, 0x666a: 0x40221a20, 0x666b: 0x40221c20, + 0x666c: 0x40221e20, 0x666d: 0x40222020, 0x666e: 0x40222220, 0x666f: 0x40222420, + 0x6670: 0x40222620, 0x6671: 0x40222820, 0x6672: 0x40222a20, 0x6673: 0x40222c20, + 0x6674: 0x40222e20, 0x6675: 0x40223020, 0x6676: 0x40223220, 0x6677: 0x40223420, + 0x6678: 0x40223620, 0x6679: 0x40223820, 0x667a: 0x40223a20, 0x667b: 0x40223c20, + 0x667c: 0x40223e20, 0x667d: 0x40224020, 0x667e: 0x40224220, 0x667f: 0x40224420, + // Block 0x19a, offset 0x6680 + 0x6680: 0x40224620, 0x6681: 0x40224820, 0x6682: 0x40224a20, 0x6683: 0x40224c20, + 0x6684: 0x40224e20, 0x6686: 0x40225020, 0x6687: 0x40225220, + 0x6688: 0x40225420, 0x6689: 0x40225620, 0x668a: 0x40225820, + 0x66a0: 0x40225a20, 0x66a1: 0x40225c20, 0x66a2: 0x40225e20, 0x66a3: 0x40226020, + 0x66a4: 0x40226220, 0x66a5: 0x40226420, 0x66a6: 0x40226620, 0x66a7: 0x40226820, + 0x66a8: 0x40226a20, 0x66a9: 0x40226c20, 0x66aa: 0x40226e20, 0x66ab: 0x40227020, + 0x66ac: 0x40227220, 0x66ad: 0x40227420, 0x66ae: 0x40227620, 0x66af: 0x40227820, + 0x66b0: 0x40227a20, + // Block 0x19b, offset 0x66c0 + 0x66c0: 0x40227c20, 0x66c1: 0x40227e20, 0x66c2: 0x40228020, 0x66c3: 0x40228220, + 0x66c4: 0x40228420, 0x66c5: 0x40228620, 0x66c6: 0x40228820, 0x66c7: 0x40228a20, + 0x66c8: 0x40228c20, 0x66c9: 0x40228e20, 0x66ca: 0x40229020, 0x66cb: 0x40229220, + 0x66cc: 0x40229420, 0x66cd: 0x40229620, 0x66ce: 0x40229820, 0x66cf: 0x40229a20, + 0x66d0: 0x40229c20, 0x66d1: 0x40229e20, 0x66d2: 0x4022a020, 0x66d3: 0x4022a220, + 0x66d4: 0x4022a420, 0x66d5: 0x4022a620, 0x66d6: 0x4022a820, 0x66d7: 0x4022aa20, + 0x66d8: 0x4022ac20, 0x66d9: 0x4022ae20, 0x66da: 0x4022b020, 0x66db: 0x4022b220, + 0x66dc: 0x4022b420, 0x66dd: 0x4022b620, 0x66de: 0x4022b820, 0x66df: 0x4022ba20, + 0x66e0: 0x4022bc20, 0x66e1: 0x4022be20, 0x66e2: 0x4022c020, 0x66e3: 0x4022c220, + 0x66e4: 0x4022c420, 0x66e5: 0x4022c620, 0x66e6: 0x4022c820, 0x66e7: 0x4022ca20, + 0x66e8: 0x4022cc20, 0x66e9: 0x4022ce20, 0x66ea: 0x4022d020, 0x66eb: 0x4022d220, + 0x66ec: 0x4022d420, 0x66ed: 0x4022d620, 0x66ee: 0x4022d820, 0x66ef: 0x4022da20, + 0x66f0: 0x4022dc20, 0x66f1: 0x4022de20, 0x66f2: 0x4022e020, 0x66f3: 0x4022e220, + 0x66f4: 0x4022e420, 0x66f5: 0x4022e620, 0x66f6: 0x4022e820, 0x66f7: 0x4022ea20, + 0x66f8: 0x4022ec20, 0x66f9: 0x4022ee20, 0x66fa: 0x4022f020, 0x66fb: 0x4022f220, + 0x66fc: 0x4022f420, 0x66fd: 0x4022f620, 0x66fe: 0x4022f820, + // Block 0x19c, offset 0x6700 + 0x6700: 0x4022fa20, 0x6702: 0x4022fc20, 0x6703: 0x4022fe20, + 0x6704: 0x40230020, 0x6705: 0x40230220, 0x6706: 0x40230420, 0x6707: 0x40230620, + 0x6708: 0x40230820, 0x6709: 0x40230a20, 0x670a: 0x40230c20, 0x670b: 0x40230e20, + 0x670c: 0x40231020, 0x670d: 0x40231220, 0x670e: 0x40231420, 0x670f: 0x40231620, + 0x6710: 0x40231820, 0x6711: 0x40231a20, 0x6712: 0x40231c20, 0x6713: 0x40231e20, + 0x6714: 0x40232020, 0x6715: 0x40232220, 0x6716: 0x40232420, 0x6717: 0x40232620, + 0x6718: 0x40232820, 0x6719: 0x40232a20, 0x671a: 0x40232c20, 0x671b: 0x40232e20, + 0x671c: 0x40233020, 0x671d: 0x40233220, 0x671e: 0x40233420, 0x671f: 0x40233620, + 0x6720: 0x40233820, 0x6721: 0x40233a20, 0x6722: 0x40233c20, 0x6723: 0x40233e20, + 0x6724: 0x40234020, 0x6725: 0x40234220, 0x6726: 0x40234420, 0x6727: 0x40234620, + 0x6728: 0x40234820, 0x6729: 0x40234a20, 0x672a: 0x40234c20, 0x672b: 0x40234e20, + 0x672c: 0x40235020, 0x672d: 0x40235220, 0x672e: 0x40235420, 0x672f: 0x40235620, + 0x6730: 0x40235820, 0x6731: 0x40235a20, 0x6732: 0x40235c20, 0x6733: 0x40235e20, + 0x6734: 0x40236020, 0x6735: 0x40236220, 0x6736: 0x40236420, 0x6737: 0x40236620, + 0x6738: 0x40236820, 0x6739: 0x40236a20, 0x673a: 0x40236c20, 0x673b: 0x40236e20, + 0x673c: 0x40237020, 0x673d: 0x40237220, 0x673e: 0x40237420, 0x673f: 0x40237620, + // Block 0x19d, offset 0x6740 + 0x6740: 0x40237820, 0x6741: 0x40237a20, 0x6742: 0x40237c20, 0x6743: 0x40237e20, + 0x6744: 0x40238020, 0x6745: 0x40238220, 0x6746: 0x40238420, 0x6747: 0x40238620, + 0x6748: 0x40238820, 0x6749: 0x40238a20, 0x674a: 0x40238c20, 0x674b: 0x40238e20, + 0x674c: 0x40239020, 0x674d: 0x40239220, 0x674e: 0x40239420, 0x674f: 0x40239620, + 0x6750: 0x40239820, 0x6751: 0x40239a20, 0x6752: 0x40239c20, 0x6753: 0x40239e20, + 0x6754: 0x4023a020, 0x6755: 0x4023a220, 0x6756: 0x4023a420, 0x6757: 0x4023a620, + 0x6758: 0x4023a820, 0x6759: 0x4023aa20, 0x675a: 0x4023ac20, 0x675b: 0x4023ae20, + 0x675c: 0x4023b020, 0x675d: 0x4023b220, 0x675e: 0x4023b420, 0x675f: 0x4023b620, + 0x6760: 0x4023b820, 0x6761: 0x4023ba20, 0x6762: 0x4023bc20, 0x6763: 0x4023be20, + 0x6764: 0x4023c020, 0x6765: 0x4023c220, 0x6766: 0x4023c420, 0x6767: 0x4023c620, + 0x6768: 0x4023c820, 0x6769: 0x4023ca20, 0x676a: 0x4023cc20, 0x676b: 0x4023ce20, + 0x676c: 0x4023d020, 0x676d: 0x4023d220, 0x676e: 0x4023d420, 0x676f: 0x4023d620, + 0x6770: 0x4023d820, 0x6771: 0x4023da20, 0x6772: 0x4023dc20, 0x6773: 0x4023de20, + 0x6774: 0x4023e020, 0x6775: 0x4023e220, 0x6776: 0x4023e420, 0x6777: 0x4023e620, + 0x6778: 0x4023e820, 0x6779: 0x4023ea20, 0x677a: 0x4023ec20, 0x677b: 0x4023ee20, + 0x677c: 0x4023f020, 0x677d: 0x4023f220, 0x677e: 0x4023f420, 0x677f: 0x4023f620, + // Block 0x19e, offset 0x6780 + 0x6780: 0x4023f820, 0x6781: 0x4023fa20, 0x6782: 0x4023fc20, 0x6783: 0x4023fe20, + 0x6784: 0x40240020, 0x6785: 0x40240220, 0x6786: 0x40240420, 0x6787: 0x40240620, + 0x6788: 0x40240820, 0x6789: 0x40240a20, 0x678a: 0x40240c20, 0x678b: 0x40240e20, + 0x678c: 0x40241020, 0x678d: 0x40241220, 0x678e: 0x40241420, 0x678f: 0x40241620, + 0x6790: 0x40241820, 0x6791: 0x40241a20, 0x6792: 0x40241c20, 0x6793: 0x40241e20, + 0x6794: 0x40242020, 0x6795: 0x40242220, 0x6796: 0x40242420, 0x6797: 0x40242620, + 0x6798: 0x40242820, 0x6799: 0x40242a20, 0x679a: 0x40242c20, 0x679b: 0x40242e20, + 0x679c: 0x40243020, 0x679d: 0x40243220, 0x679e: 0x40243420, 0x679f: 0x40243620, + 0x67a0: 0x40243820, 0x67a1: 0x40243a20, 0x67a2: 0x40243c20, 0x67a3: 0x40243e20, + 0x67a4: 0x40244020, 0x67a5: 0x40244220, 0x67a6: 0x40244420, 0x67a7: 0x40244620, + 0x67a8: 0x40244820, 0x67a9: 0x40244a20, 0x67aa: 0x40244c20, 0x67ab: 0x40244e20, + 0x67ac: 0x40245020, 0x67ad: 0x40245220, 0x67ae: 0x40245420, 0x67af: 0x40245620, + 0x67b0: 0x40245820, 0x67b1: 0x40245a20, 0x67b2: 0x40245c20, 0x67b3: 0x40245e20, + 0x67b4: 0x40246020, 0x67b5: 0x40246220, 0x67b6: 0x40246420, 0x67b7: 0x40246620, + 0x67b9: 0x40246820, 0x67ba: 0x40246a20, 0x67bb: 0x40246c20, + 0x67bc: 0x40246e20, + // Block 0x19f, offset 0x67c0 + 0x67c0: 0x40247020, 0x67c1: 0x40247220, 0x67c2: 0x40247420, 0x67c3: 0x40247620, + 0x67c4: 0x40247820, 0x67c5: 0x40247a20, 0x67c6: 0x40247c20, 0x67c7: 0x40247e20, + 0x67c8: 0x40248020, 0x67c9: 0x40248220, 0x67ca: 0x40248420, 0x67cb: 0x40248620, + 0x67cc: 0x40248820, 0x67cd: 0x40248a20, 0x67ce: 0x40248c20, 0x67cf: 0x40248e20, + 0x67d0: 0x40249020, 0x67d1: 0x40249220, 0x67d2: 0x40249420, 0x67d3: 0x40249620, + 0x67d4: 0x40249820, 0x67d5: 0x40249a20, 0x67d6: 0x40249c20, 0x67d7: 0x40249e20, + 0x67d8: 0x4024a020, 0x67d9: 0x4024a220, 0x67da: 0x4024a420, 0x67db: 0x4024a620, + 0x67dc: 0x4024a820, 0x67dd: 0x4024aa20, 0x67de: 0x4024ac20, 0x67df: 0x4024ae20, + 0x67e0: 0x4024b020, 0x67e1: 0x4024b220, 0x67e2: 0x4024b420, 0x67e3: 0x4024b620, + 0x67e4: 0x4024b820, 0x67e5: 0x4024ba20, 0x67e6: 0x4024bc20, 0x67e7: 0x4024be20, + 0x67e8: 0x4024c020, 0x67e9: 0x4024c220, 0x67ea: 0x4024c420, 0x67eb: 0x4024c620, + 0x67ec: 0x4024c820, 0x67ed: 0x4024ca20, 0x67ee: 0x4024cc20, 0x67ef: 0x4024ce20, + 0x67f0: 0x4024d020, 0x67f1: 0x4024d220, 0x67f2: 0x4024d420, 0x67f3: 0x4024d620, + 0x67f4: 0x4024d820, 0x67f5: 0x4024da20, 0x67f6: 0x4024dc20, 0x67f7: 0x4024de20, + 0x67f8: 0x4024e020, 0x67f9: 0x4024e220, 0x67fa: 0x4024e420, 0x67fb: 0x4024e620, + 0x67fc: 0x4024e820, 0x67fd: 0x4024ea20, + // Block 0x1a0, offset 0x6800 + 0x6800: 0x4024ec20, 0x6801: 0x4024ee20, 0x6802: 0x4024f020, 0x6803: 0x4024f220, + 0x6810: 0x4024f420, 0x6811: 0x4024f620, 0x6812: 0x4024f820, 0x6813: 0x4024fa20, + 0x6814: 0x4024fc20, 0x6815: 0x4024fe20, 0x6816: 0x40250020, 0x6817: 0x40250220, + 0x6818: 0x40250420, 0x6819: 0x40250620, 0x681a: 0x40250820, 0x681b: 0x40250a20, + 0x681c: 0x40250c20, 0x681d: 0x40250e20, 0x681e: 0x40251020, 0x681f: 0x40251220, + 0x6820: 0x40251420, 0x6821: 0x40251620, 0x6822: 0x40251820, 0x6823: 0x40251a20, + 0x6824: 0x40251c20, 0x6825: 0x40251e20, 0x6826: 0x40252020, 0x6827: 0x40252220, + // Block 0x1a1, offset 0x6840 + 0x687b: 0x40252420, + 0x687c: 0x40252620, 0x687d: 0x40252820, 0x687e: 0x40252a20, 0x687f: 0x40252c20, + // Block 0x1a2, offset 0x6880 + 0x6880: 0x40252e20, 0x6881: 0x40253020, 0x6882: 0x40253220, 0x6883: 0x40253420, + 0x6884: 0x40253620, 0x6885: 0x40253820, 0x6886: 0x40253a20, 0x6887: 0x40253c20, + 0x6888: 0x40253e20, 0x6889: 0x40254020, 0x688a: 0x40254220, 0x688b: 0x40254420, + 0x688c: 0x40254620, 0x688d: 0x40254820, 0x688e: 0x40254a20, 0x688f: 0x40254c20, + 0x6890: 0x40254e20, 0x6891: 0x40255020, 0x6892: 0x40255220, 0x6893: 0x40255420, + 0x6894: 0x40255620, 0x6895: 0x40255820, 0x6896: 0x40255a20, 0x6897: 0x40255c20, + 0x6898: 0x40255e20, 0x6899: 0x40256020, 0x689a: 0x40256220, 0x689b: 0x40256420, + 0x689c: 0x40256620, 0x689d: 0x40256820, 0x689e: 0x40256a20, 0x689f: 0x40256c20, + 0x68a0: 0x40256e20, 0x68a1: 0x40257020, 0x68a2: 0x40257220, 0x68a3: 0x40257420, + 0x68a4: 0x40257620, 0x68a5: 0x40257820, 0x68a6: 0x40257a20, 0x68a7: 0x40257c20, + 0x68a8: 0x40257e20, 0x68a9: 0x40258020, 0x68aa: 0x40258220, 0x68ab: 0x40258420, + 0x68ac: 0x40258620, 0x68ad: 0x40258820, 0x68ae: 0x40258a20, 0x68af: 0x40258c20, + 0x68b0: 0x40258e20, 0x68b1: 0x40259020, 0x68b2: 0x40259220, 0x68b3: 0x40259420, + 0x68b4: 0x40259620, 0x68b5: 0x40259820, 0x68b6: 0x40259a20, 0x68b7: 0x40259c20, + 0x68b8: 0x40259e20, 0x68b9: 0x4025a020, 0x68ba: 0x4025a220, 0x68bb: 0x4025a420, + 0x68bc: 0x4025a620, 0x68bd: 0x4025a820, 0x68be: 0x4025aa20, 0x68bf: 0x4025ac20, + // Block 0x1a3, offset 0x68c0 + 0x68c0: 0x4025ae20, + 0x68c5: 0x4025b020, 0x68c6: 0x4025b220, 0x68c7: 0x4025b420, + 0x68c8: 0x4025b620, 0x68c9: 0x4025b820, 0x68ca: 0x4025ba20, 0x68cb: 0x4025bc20, + 0x68cc: 0x4025be20, 0x68cd: 0x4025c020, 0x68ce: 0x4025c220, 0x68cf: 0x4025c420, + // Block 0x1a4, offset 0x6900 + 0x6900: 0x4025c620, 0x6901: 0x4025c820, 0x6902: 0x4025ca20, 0x6903: 0x4025cc20, + 0x6904: 0x4025ce20, 0x6905: 0x4025d020, 0x6906: 0x4025d220, 0x6907: 0x4025d420, + 0x6908: 0x4025d620, 0x6909: 0x4025d820, 0x690a: 0x4025da20, 0x690b: 0x4025dc20, + 0x690c: 0x4025de20, 0x690d: 0x4025e020, 0x690e: 0x4025e220, 0x690f: 0x4025e420, + 0x6910: 0x4025e620, 0x6911: 0x4025e820, 0x6912: 0x4025ea20, 0x6913: 0x4025ec20, + 0x6914: 0x4025ee20, 0x6915: 0x4025f020, 0x6916: 0x4025f220, 0x6917: 0x4025f420, + 0x6918: 0x4025f620, 0x6919: 0x4025f820, 0x691a: 0x4025fa20, 0x691b: 0x4025fc20, + 0x691c: 0x4025fe20, 0x691d: 0x40260020, 0x691e: 0x40260220, 0x691f: 0x40260420, + 0x6920: 0x40260620, 0x6921: 0x40260820, 0x6922: 0x40260a20, 0x6923: 0x40260c20, + 0x6924: 0x40260e20, 0x6925: 0x40261020, 0x6926: 0x40261220, 0x6927: 0x40261420, + 0x6928: 0x40261620, 0x6929: 0x40261820, 0x692a: 0x40261a20, 0x692b: 0x40261c20, + 0x692c: 0x40261e20, 0x692d: 0x40262020, 0x692e: 0x40262220, 0x692f: 0x40262420, + 0x6930: 0x40262620, 0x6931: 0x40262820, 0x6932: 0x40262a20, 0x6933: 0x40262c20, + 0x6934: 0x40262e20, 0x6935: 0x40263020, 0x6936: 0x40263220, 0x6937: 0x40263420, + 0x6938: 0x40263620, 0x6939: 0x40263820, 0x693a: 0x40263a20, 0x693b: 0x40263c20, + 0x693c: 0x40263e20, 0x693d: 0x40264020, 0x693e: 0x40264220, 0x693f: 0x40264420, + // Block 0x1a5, offset 0x6940 + 0x6940: 0x40264620, 0x6941: 0x40264820, 0x6942: 0x40264a20, 0x6943: 0x40264c20, + 0x6944: 0x40264e20, 0x6945: 0x40265020, + // Block 0x1a6, offset 0x6980 + 0x6980: 0x40265220, 0x6981: 0x40265420, 0x6982: 0x40265620, 0x6983: 0x40265820, + 0x6984: 0x40265a20, 0x6985: 0x40265c20, 0x6986: 0x40265e20, 0x6987: 0x40266020, + 0x6988: 0x40266220, 0x6989: 0x40266420, 0x698a: 0x40266620, 0x698b: 0x40266820, + 0x698c: 0x40266a20, 0x698d: 0x40266c20, 0x698e: 0x40266e20, 0x698f: 0x40267020, + 0x6990: 0x40267220, 0x6991: 0x40267420, 0x6992: 0x40267620, 0x6993: 0x40267820, + 0x6994: 0x40267a20, 0x6995: 0x40267c20, 0x6996: 0x40267e20, 0x6997: 0x40268020, + 0x6998: 0x40268220, 0x6999: 0x40268420, 0x699a: 0x40268620, 0x699b: 0x40268820, + 0x699c: 0x40268a20, 0x699d: 0x40268c20, 0x699e: 0x40268e20, 0x699f: 0x40269020, + 0x69a0: 0x40269220, 0x69a1: 0x40269420, 0x69a2: 0x40269620, 0x69a3: 0x40269820, + 0x69a4: 0x40269a20, 0x69a5: 0x40269c20, 0x69a6: 0x40269e20, 0x69a7: 0x4026a020, + 0x69a8: 0x4026a220, 0x69a9: 0x4026a420, 0x69aa: 0x4026a620, 0x69ab: 0x4026a820, + 0x69ac: 0x4026aa20, 0x69ad: 0x4026ac20, 0x69ae: 0x4026ae20, 0x69af: 0x4026b020, + 0x69b0: 0x4026b220, 0x69b1: 0x4026b420, 0x69b2: 0x4026b620, 0x69b3: 0x4026b820, + 0x69b4: 0x4026ba20, 0x69b5: 0x4026bc20, 0x69b6: 0x4026be20, 0x69b7: 0x4026c020, + 0x69b8: 0x4026c220, 0x69b9: 0x4026c420, 0x69ba: 0x4026c620, 0x69bb: 0x4026c820, + 0x69bc: 0x4026ca20, 0x69bd: 0x4026cc20, 0x69be: 0x4026ce20, 0x69bf: 0x4026d020, + // Block 0x1a7, offset 0x69c0 + 0x69c0: 0x4026d220, 0x69c1: 0x4026d420, 0x69c2: 0x4026d620, 0x69c3: 0x4026d820, + 0x69c4: 0x4026da20, 0x69c5: 0x4026dc20, 0x69c6: 0x4026de20, 0x69c7: 0x4026e020, + 0x69c8: 0x4026e220, 0x69c9: 0x4026e420, 0x69ca: 0x4026e620, 0x69cb: 0x4026e820, + 0x69cc: 0x4026ea20, 0x69cd: 0x4026ec20, 0x69ce: 0x4026ee20, 0x69cf: 0x4026f020, + 0x69d0: 0x4026f220, 0x69d1: 0x4026f420, 0x69d2: 0x4026f620, 0x69d3: 0x4026f820, + 0x69d4: 0x4026fa20, 0x69d5: 0x4026fc20, 0x69d6: 0x4026fe20, 0x69d7: 0x40270020, + 0x69d8: 0x40270220, 0x69d9: 0x40270420, 0x69da: 0x40270620, 0x69db: 0x40270820, + 0x69dc: 0x40270a20, 0x69dd: 0x40270c20, 0x69de: 0x40270e20, 0x69df: 0x40271020, + 0x69e0: 0x40271220, 0x69e1: 0x40271420, 0x69e2: 0x40271620, 0x69e3: 0x40271820, + 0x69e4: 0x40271a20, 0x69e5: 0x40271c20, 0x69e6: 0x40271e20, 0x69e7: 0x40272020, + 0x69e8: 0x40272220, 0x69e9: 0x40272420, 0x69ea: 0x40272620, 0x69eb: 0x40272820, + 0x69ec: 0x40272a20, 0x69ed: 0x40272c20, 0x69ee: 0x40272e20, 0x69ef: 0x40273020, + 0x69f0: 0x40273220, 0x69f1: 0x40273420, 0x69f2: 0x40273620, 0x69f3: 0x40273820, + // Block 0x1a8, offset 0x6a00 + 0x6a00: 0x429c7a20, 0x6a01: 0x429c7020, 0x6a02: 0x429c8220, 0x6a03: 0x48024420, + 0x6a04: 0x429ec020, 0x6a05: 0x429f5c20, 0x6a06: 0x429f7620, 0x6a07: 0x42a00420, + 0x6a08: 0x42a0f420, 0x6a09: 0x42a13220, 0x6a0a: 0x42a1ce20, 0x6a0b: 0x42a19e20, + 0x6a0c: 0x44693c20, 0x6a0d: 0x480c7420, 0x6a0e: 0x42a29a20, 0x6a0f: 0x42a2a820, + 0x6a10: 0x42a2c820, 0x6a11: 0x42a2ee20, 0x6a12: 0x480a3820, 0x6a13: 0x44697220, + 0x6a14: 0x42a2ce20, 0x6a15: 0x42a31a20, 0x6a16: 0x480a9620, 0x6a17: 0x42a32e20, + 0x6a18: 0x42a34820, 0x6a19: 0x429d9820, 0x6a1a: 0x42a35820, 0x6a1b: 0x42a36a20, + 0x6a1c: 0x4923be20, 0x6a1d: 0x42a3ea20, 0x6a1e: 0x42a40620, 0x6a1f: 0x4469be20, + 0x6a20: 0x42a47620, 0x6a21: 0x42a48c20, 0x6a22: 0x42a4e420, 0x6a23: 0x42a4ee20, + 0x6a24: 0x446a2a20, 0x6a25: 0x42a58e20, 0x6a26: 0x42a59220, 0x6a27: 0x42a5c820, + 0x6a28: 0x42a5f420, 0x6a29: 0x42a60a20, 0x6a2a: 0x42a60c20, 0x6a2b: 0x42a62e20, + 0x6a2c: 0x42a69220, 0x6a2d: 0x42a6a220, 0x6a2e: 0x42a6b420, 0x6a2f: 0x42a6e620, + 0x6a30: 0x42a6fa20, 0x6a31: 0x42a6fe20, 0x6a32: 0x42a6fe20, 0x6a33: 0x42a6fe20, + 0x6a34: 0x48145820, 0x6a35: 0x42e0e020, 0x6a36: 0x42a79420, 0x6a37: 0x42a7be20, + 0x6a38: 0x4816c620, 0x6a39: 0x42a7d620, 0x6a3a: 0x42a7e220, 0x6a3b: 0x42a80c20, + 0x6a3c: 0x42a93c20, 0x6a3d: 0x42a87020, 0x6a3e: 0x42a89020, 0x6a3f: 0x42a8d020, + // Block 0x1a9, offset 0x6a40 + 0x6a40: 0x42a94420, 0x6a41: 0x42a9ec20, 0x6a42: 0x42aa2020, 0x6a43: 0x42aaa620, + 0x6a44: 0x42aac620, 0x6a45: 0x42ab0820, 0x6a46: 0x42ab0820, 0x6a47: 0x42ab3220, + 0x6a48: 0x42ab5620, 0x6a49: 0x42ab6620, 0x6a4a: 0x42ab8420, 0x6a4b: 0x42ae2c20, + 0x6a4c: 0x42ac0c20, 0x6a4d: 0x42ae2e20, 0x6a4e: 0x42aca220, 0x6a4f: 0x42ace820, + 0x6a50: 0x42a40e20, 0x6a51: 0x42b1dc20, 0x6a52: 0x42af9c20, 0x6a53: 0x42afe820, + 0x6a54: 0x42b01a20, 0x6a55: 0x42af1620, 0x6a56: 0x42b06420, 0x6a57: 0x42b06220, + 0x6a58: 0x42b15820, 0x6a59: 0x4829c820, 0x6a5a: 0x42b1e420, 0x6a5b: 0x42b1ee20, + 0x6a5c: 0x42b20c20, 0x6a5d: 0x42b23420, 0x6a5e: 0x42b24420, 0x6a5f: 0x42b2c420, + 0x6a60: 0x482d5020, 0x6a61: 0x482dd420, 0x6a62: 0x42b3d820, 0x6a63: 0x42b43620, + 0x6a64: 0x42b44e20, 0x6a65: 0x42b3b020, 0x6a66: 0x42b4cc20, 0x6a67: 0x446ddc20, + 0x6a68: 0x446df820, 0x6a69: 0x42b61020, 0x6a6a: 0x42b67c20, 0x6a6b: 0x42b67c20, + 0x6a6c: 0x48339020, 0x6a6d: 0x42b78620, 0x6a6e: 0x42b7b020, 0x6a6f: 0x42b7ce20, + 0x6a70: 0x42b7e620, 0x6a71: 0x48363020, 0x6a72: 0x42b7fe20, 0x6a73: 0x42b80c20, + 0x6a74: 0x42bea620, 0x6a75: 0x42b84420, 0x6a76: 0x446f0220, 0x6a77: 0x42b8c020, + 0x6a78: 0x42b8dc20, 0x6a79: 0x42b98020, 0x6a7a: 0x42b91a20, 0x6a7b: 0x483bc820, + 0x6a7c: 0x42ba8620, 0x6a7d: 0x483bcc20, 0x6a7e: 0x42badc20, 0x6a7f: 0x42bad620, + // Block 0x1aa, offset 0x6a80 + 0x6a80: 0x42baf820, 0x6a81: 0x42bbc220, 0x6a82: 0x42bbc420, 0x6a83: 0x44705e20, + 0x6a84: 0x42bbfa20, 0x6a85: 0x42bc5020, 0x6a86: 0x42bc7a20, 0x6a87: 0x42bcd220, + 0x6a88: 0x4470c420, 0x6a89: 0x48430620, 0x6a8a: 0x4470f820, 0x6a8b: 0x42bd6020, + 0x6a8c: 0x42bd6620, 0x6a8d: 0x42bd6c20, 0x6a8e: 0x42bd9420, 0x6a8f: 0x49472420, + 0x6a90: 0x42bdfc20, 0x6a91: 0x48466220, 0x6a92: 0x48466220, 0x6a93: 0x43040220, + 0x6a94: 0x42be4420, 0x6a95: 0x42be4420, 0x6a96: 0x44718e20, 0x6a97: 0x48657020, + 0x6a98: 0x48c3b420, 0x6a99: 0x42bec420, 0x6a9a: 0x42bed620, 0x6a9b: 0x4471c620, + 0x6a9c: 0x42bf3420, 0x6a9d: 0x42bf9a20, 0x6a9e: 0x42bfae20, 0x6a9f: 0x42bff220, + 0x6aa0: 0x42c10220, 0x6aa1: 0x44727420, 0x6aa2: 0x44723820, 0x6aa3: 0x42c12820, + 0x6aa4: 0x484da820, 0x6aa5: 0x42c18e20, 0x6aa6: 0x42c29020, 0x6aa7: 0x42c29820, + 0x6aa8: 0x42c29c20, 0x6aa9: 0x42c29820, 0x6aaa: 0x42c2f420, 0x6aab: 0x42c31c20, + 0x6aac: 0x42c36420, 0x6aad: 0x42c34820, 0x6aae: 0x42c35e20, 0x6aaf: 0x42c3bc20, + 0x6ab0: 0x42c3e420, 0x6ab1: 0x42c3ec20, 0x6ab2: 0x42c42020, 0x6ab3: 0x42c43620, + 0x6ab4: 0x42c4ba20, 0x6ab5: 0x42c56220, 0x6ab6: 0x42c5a820, 0x6ab7: 0x42c6a020, + 0x6ab8: 0x48561820, 0x6ab9: 0x42c67a20, 0x6aba: 0x42c5f820, 0x6abb: 0x42c6d020, + 0x6abc: 0x42c70620, 0x6abd: 0x42c7c820, 0x6abe: 0x4857e220, 0x6abf: 0x42c84420, + // Block 0x1ab, offset 0x6ac0 + 0x6ac0: 0x42c78a20, 0x6ac1: 0x42c75220, 0x6ac2: 0x44745c20, 0x6ac3: 0x42c8d220, + 0x6ac4: 0x42c8fc20, 0x6ac5: 0x42c93a20, 0x6ac6: 0x42c8ee20, 0x6ac7: 0x4474d820, + 0x6ac8: 0x42ca9e20, 0x6ac9: 0x42cad820, 0x6aca: 0x48601420, 0x6acb: 0x42cbc620, + 0x6acc: 0x42cdf020, 0x6acd: 0x42cc9220, 0x6ace: 0x44763220, 0x6acf: 0x42cd2220, + 0x6ad0: 0x44761020, 0x6ad1: 0x4475c820, 0x6ad2: 0x42a32420, 0x6ad3: 0x42a32a20, + 0x6ad4: 0x42ce0020, 0x6ad5: 0x42cd3820, 0x6ad6: 0x43015a20, 0x6ad7: 0x4487b220, + 0x6ad8: 0x42ce2e20, 0x6ad9: 0x42ce3620, 0x6ada: 0x42ce4220, 0x6adb: 0x42cebc20, + 0x6adc: 0x42cea620, 0x6add: 0x48678620, 0x6ade: 0x44769220, 0x6adf: 0x42cff420, + 0x6ae0: 0x42cf0a20, 0x6ae1: 0x42d0a420, 0x6ae2: 0x42d10a20, 0x6ae3: 0x4868da20, + 0x6ae4: 0x42d11c20, 0x6ae5: 0x42d03e20, 0x6ae6: 0x42d22820, 0x6ae7: 0x44773a20, + 0x6ae8: 0x42d28420, 0x6ae9: 0x42d34620, 0x6aea: 0x42d3d420, 0x6aeb: 0x42d55020, + 0x6aec: 0x486d4620, 0x6aed: 0x42d5b620, 0x6aee: 0x44783020, 0x6aef: 0x42d64220, + 0x6af0: 0x48714e20, 0x6af1: 0x42d6a820, 0x6af2: 0x44789c20, 0x6af3: 0x42d6e420, + 0x6af4: 0x42d73e20, 0x6af5: 0x42d77420, 0x6af6: 0x42d77620, 0x6af7: 0x48751a20, + 0x6af8: 0x483a1620, 0x6af9: 0x4875f420, 0x6afa: 0x42d89c20, 0x6afb: 0x48797820, + 0x6afc: 0x42d97e20, 0x6afd: 0x42d99a20, 0x6afe: 0x42d8ce20, 0x6aff: 0x42da2c20, + // Block 0x1ac, offset 0x6b00 + 0x6b00: 0x42da7c20, 0x6b01: 0x42daee20, 0x6b02: 0x42da8220, 0x6b03: 0x42dad220, + 0x6b04: 0x42daf020, 0x6b05: 0x42db0a20, 0x6b06: 0x487a3c20, 0x6b07: 0x42da6820, + 0x6b08: 0x42dc5e20, 0x6b09: 0x42dcdc20, 0x6b0a: 0x447a6620, 0x6b0b: 0x42dd9620, + 0x6b0c: 0x42dd8e20, 0x6b0d: 0x487da220, 0x6b0e: 0x42dbf220, 0x6b0f: 0x42dedc20, + 0x6b10: 0x487ebc20, 0x6b11: 0x487f1c20, 0x6b12: 0x42df8c20, 0x6b13: 0x42e07220, + 0x6b14: 0x42e03c20, 0x6b15: 0x42e03620, 0x6b16: 0x447b2c20, 0x6b17: 0x42e09420, + 0x6b18: 0x42e0fa20, 0x6b19: 0x42e0ee20, 0x6b1a: 0x42e15a20, 0x6b1b: 0x480a4a20, + 0x6b1c: 0x42e28a20, 0x6b1d: 0x4884c620, 0x6b1e: 0x42e33820, 0x6b1f: 0x48875620, + 0x6b20: 0x42e45020, 0x6b21: 0x42e46a20, 0x6b22: 0x42e4a020, 0x6b23: 0x488c1020, + 0x6b24: 0x42e50020, 0x6b25: 0x42e52a20, 0x6b26: 0x488e6a20, 0x6b27: 0x48902820, + 0x6b28: 0x42e6f420, 0x6b29: 0x42e71620, 0x6b2a: 0x447d5820, 0x6b2b: 0x42e74a20, + 0x6b2c: 0x447d7020, 0x6b2d: 0x447d7020, 0x6b2e: 0x42e88e20, 0x6b2f: 0x42e8b820, + 0x6b30: 0x42e8e220, 0x6b31: 0x42e90a20, 0x6b32: 0x42e99420, 0x6b33: 0x447e3620, + 0x6b34: 0x42ea4820, 0x6b35: 0x48986c20, 0x6b36: 0x42ea7c20, 0x6b37: 0x48992420, + 0x6b38: 0x42eae020, 0x6b39: 0x48433e20, 0x6b3a: 0x42ec2020, 0x6b3b: 0x489f4220, + 0x6b3c: 0x489f7020, 0x6b3d: 0x48a08820, 0x6b3e: 0x447ff820, 0x6b3f: 0x44801020, + // Block 0x1ad, offset 0x6b40 + 0x6b40: 0x42ede820, 0x6b41: 0x48a1e620, 0x6b42: 0x48a1e420, 0x6b43: 0x48a23220, + 0x6b44: 0x48a26620, 0x6b45: 0x42ee3c20, 0x6b46: 0x42ee3e20, 0x6b47: 0x42ee3e20, + 0x6b48: 0x42ee9420, 0x6b49: 0x44807220, 0x6b4a: 0x42ef1620, 0x6b4b: 0x44808c20, + 0x6b4c: 0x44812c20, 0x6b4d: 0x48a83a20, 0x6b4e: 0x42f09c20, 0x6b4f: 0x42f11820, + 0x6b50: 0x42f19820, 0x6b51: 0x4481c620, 0x6b52: 0x48ac4c20, 0x6b53: 0x42f2ac20, + 0x6b54: 0x48ad3420, 0x6b55: 0x48ad8a20, 0x6b56: 0x42f31e20, 0x6b57: 0x42f3d620, + 0x6b58: 0x44825e20, 0x6b59: 0x42f48020, 0x6b5a: 0x42f49420, 0x6b5b: 0x42f49e20, + 0x6b5c: 0x48b2f820, 0x6b5d: 0x48b54e20, 0x6b5e: 0x48b54e20, 0x6b5f: 0x42f5dc20, + 0x6b60: 0x44840420, 0x6b61: 0x48b75620, 0x6b62: 0x42f78c20, 0x6b63: 0x42f79220, + 0x6b64: 0x44844e20, 0x6b65: 0x48b90020, 0x6b66: 0x42f9a420, 0x6b67: 0x44854020, + 0x6b68: 0x42f9d020, 0x6b69: 0x42f9c620, 0x6b6a: 0x42fa0020, 0x6b6b: 0x48bf0c20, + 0x6b6c: 0x42fac620, 0x6b6d: 0x44860220, 0x6b6e: 0x42fb8e20, 0x6b6f: 0x42fc0420, + 0x6b70: 0x42fc8a20, 0x6b71: 0x44866820, 0x6b72: 0x48c45020, 0x6b73: 0x48c48e20, + 0x6b74: 0x4486b220, 0x6b75: 0x48c5b220, 0x6b76: 0x42fef420, 0x6b77: 0x48c67c20, + 0x6b78: 0x42ff2a20, 0x6b79: 0x42fff420, 0x6b7a: 0x43000a20, 0x6b7b: 0x48c9b420, + 0x6b7c: 0x48ca4620, 0x6b7d: 0x4300c020, 0x6b7e: 0x48cb5020, 0x6b7f: 0x4300e020, + // Block 0x1ae, offset 0x6b80 + 0x6b80: 0x4866be20, 0x6b81: 0x4487aa20, 0x6b82: 0x43016420, 0x6b83: 0x43020620, + 0x6b84: 0x44881620, 0x6b85: 0x43027c20, 0x6b86: 0x42b56a20, 0x6b87: 0x48cf4e20, + 0x6b88: 0x48cf6a20, 0x6b89: 0x48672620, 0x6b8a: 0x48673820, 0x6b8b: 0x43040220, + 0x6b8c: 0x43040820, 0x6b8d: 0x431f3c20, 0x6b8e: 0x4488d620, 0x6b8f: 0x43052220, + 0x6b90: 0x43051620, 0x6b91: 0x43053a20, 0x6b92: 0x42a56620, 0x6b93: 0x43056220, + 0x6b94: 0x43056620, 0x6b95: 0x43057a20, 0x6b96: 0x4305cc20, 0x6b97: 0x48d67820, + 0x6b98: 0x4305ca20, 0x6b99: 0x43063a20, 0x6b9a: 0x4306c620, 0x6b9b: 0x43075a20, + 0x6b9c: 0x43064620, 0x6b9d: 0x43077a20, 0x6b9e: 0x4307ce20, 0x6b9f: 0x4308ae20, + 0x6ba0: 0x4306a620, 0x6ba1: 0x43079420, 0x6ba2: 0x43079820, 0x6ba3: 0x4307b820, + 0x6ba4: 0x48d86c20, 0x6ba5: 0x48dad620, 0x6ba6: 0x48d9aa20, 0x6ba7: 0x448a5620, + 0x6ba8: 0x4309e220, 0x6ba9: 0x4309e620, 0x6baa: 0x430a2c20, 0x6bab: 0x48e79420, + 0x6bac: 0x430ac820, 0x6bad: 0x48de5820, 0x6bae: 0x448aba20, 0x6baf: 0x448ac220, + 0x6bb0: 0x48df6220, 0x6bb1: 0x48e1a420, 0x6bb2: 0x448ad620, 0x6bb3: 0x430ca020, + 0x6bb4: 0x430cb820, 0x6bb5: 0x430cce20, 0x6bb6: 0x430cd220, 0x6bb7: 0x430d5220, + 0x6bb8: 0x430d1020, 0x6bb9: 0x430e1c20, 0x6bba: 0x430dc420, 0x6bbb: 0x430ef220, + 0x6bbc: 0x430e5020, 0x6bbd: 0x430ed620, 0x6bbe: 0x430f0c20, 0x6bbf: 0x448bae20, + // Block 0x1af, offset 0x6bc0 + 0x6bc0: 0x430fc220, 0x6bc1: 0x43100220, 0x6bc2: 0x448bf220, 0x6bc3: 0x4310c020, + 0x6bc4: 0x4310c620, 0x6bc5: 0x48ecce20, 0x6bc6: 0x4311ae20, 0x6bc7: 0x4311bc20, + 0x6bc8: 0x448c6a20, 0x6bc9: 0x4311f420, 0x6bca: 0x44697620, 0x6bcb: 0x48f15c20, + 0x6bcc: 0x48f2cc20, 0x6bcd: 0x448d7c20, 0x6bce: 0x448d8e20, 0x6bcf: 0x43154020, + 0x6bd0: 0x4315da20, 0x6bd1: 0x43171420, 0x6bd2: 0x4318aa20, 0x6bd3: 0x48f95020, + 0x6bd4: 0x43195620, 0x6bd5: 0x43198220, 0x6bd6: 0x431a3620, 0x6bd7: 0x431aee20, + 0x6bd8: 0x48fe5e20, 0x6bd9: 0x48100820, 0x6bda: 0x431b9620, 0x6bdb: 0x431b7820, + 0x6bdc: 0x431be020, 0x6bdd: 0x4811bc20, 0x6bde: 0x431da820, 0x6bdf: 0x431e7020, + 0x6be0: 0x490ba420, 0x6be1: 0x490bda20, 0x6be2: 0x43212820, 0x6be3: 0x4321e220, + 0x6be4: 0x43222220, 0x6be5: 0x490e5c20, 0x6be6: 0x43223620, 0x6be7: 0x43247020, + 0x6be8: 0x4325ae20, 0x6be9: 0x4325b020, 0x6bea: 0x4324f820, 0x6beb: 0x4327f220, + 0x6bec: 0x43282a20, 0x6bed: 0x4917f420, 0x6bee: 0x432b1620, 0x6bef: 0x44932a20, + 0x6bf0: 0x432b6e20, 0x6bf1: 0x491aee20, 0x6bf2: 0x4493cc20, 0x6bf3: 0x432d8620, + 0x6bf4: 0x42bb6420, 0x6bf5: 0x432e4620, 0x6bf6: 0x49228a20, 0x6bf7: 0x49243420, + 0x6bf8: 0x4494dc20, 0x6bf9: 0x4494ec20, 0x6bfa: 0x432fc020, 0x6bfb: 0x49281420, + 0x6bfc: 0x44956420, 0x6bfd: 0x49292c20, 0x6bfe: 0x43301620, 0x6bff: 0x43301620, + // Block 0x1b0, offset 0x6c00 + 0x6c00: 0x43305220, 0x6c01: 0x492b6c20, 0x6c02: 0x4331c420, 0x6c03: 0x44966620, + 0x6c04: 0x43325220, 0x6c05: 0x43334e20, 0x6c06: 0x43338420, 0x6c07: 0x4333fc20, + 0x6c08: 0x44979c20, 0x6c09: 0x49366020, 0x6c0a: 0x43362420, 0x6c0b: 0x43388020, + 0x6c0c: 0x4339fa20, 0x6c0d: 0x44999c20, 0x6c0e: 0x4499da20, 0x6c0f: 0x433ace20, + 0x6c10: 0x49419c20, 0x6c11: 0x4499f020, 0x6c12: 0x49420a20, 0x6c13: 0x49441c20, + 0x6c14: 0x49452220, 0x6c15: 0x433d7620, 0x6c16: 0x449aac20, 0x6c17: 0x433df220, + 0x6c18: 0x433dfc20, 0x6c19: 0x433e0a20, 0x6c1a: 0x433e1e20, 0x6c1b: 0x433e2c20, + 0x6c1c: 0x433e7620, 0x6c1d: 0x494c0020, + // Block 0x1b1, offset 0x6c40 + 0x6c41: 0xa0000000, + 0x6c60: 0xa0000000, 0x6c61: 0xa0000000, 0x6c62: 0xa0000000, 0x6c63: 0xa0000000, + 0x6c64: 0xa0000000, 0x6c65: 0xa0000000, 0x6c66: 0xa0000000, 0x6c67: 0xa0000000, + 0x6c68: 0xa0000000, 0x6c69: 0xa0000000, 0x6c6a: 0xa0000000, 0x6c6b: 0xa0000000, + 0x6c6c: 0xa0000000, 0x6c6d: 0xa0000000, 0x6c6e: 0xa0000000, 0x6c6f: 0xa0000000, + 0x6c70: 0xa0000000, 0x6c71: 0xa0000000, 0x6c72: 0xa0000000, 0x6c73: 0xa0000000, + 0x6c74: 0xa0000000, 0x6c75: 0xa0000000, 0x6c76: 0xa0000000, 0x6c77: 0xa0000000, + 0x6c78: 0xa0000000, 0x6c79: 0xa0000000, 0x6c7a: 0xa0000000, 0x6c7b: 0xa0000000, + 0x6c7c: 0xa0000000, 0x6c7d: 0xa0000000, 0x6c7e: 0xa0000000, 0x6c7f: 0xa0000000, + // Block 0x1b2, offset 0x6c80 + 0x6c80: 0xa0000000, 0x6c81: 0xa0000000, 0x6c82: 0xa0000000, 0x6c83: 0xa0000000, + 0x6c84: 0xa0000000, 0x6c85: 0xa0000000, 0x6c86: 0xa0000000, 0x6c87: 0xa0000000, + 0x6c88: 0xa0000000, 0x6c89: 0xa0000000, 0x6c8a: 0xa0000000, 0x6c8b: 0xa0000000, + 0x6c8c: 0xa0000000, 0x6c8d: 0xa0000000, 0x6c8e: 0xa0000000, 0x6c8f: 0xa0000000, + 0x6c90: 0xa0000000, 0x6c91: 0xa0000000, 0x6c92: 0xa0000000, 0x6c93: 0xa0000000, + 0x6c94: 0xa0000000, 0x6c95: 0xa0000000, 0x6c96: 0xa0000000, 0x6c97: 0xa0000000, + 0x6c98: 0xa0000000, 0x6c99: 0xa0000000, 0x6c9a: 0xa0000000, 0x6c9b: 0xa0000000, + 0x6c9c: 0xa0000000, 0x6c9d: 0xa0000000, 0x6c9e: 0xa0000000, 0x6c9f: 0xa0000000, + 0x6ca0: 0xa0000000, 0x6ca1: 0xa0000000, 0x6ca2: 0xa0000000, 0x6ca3: 0xa0000000, + 0x6ca4: 0xa0000000, 0x6ca5: 0xa0000000, 0x6ca6: 0xa0000000, 0x6ca7: 0xa0000000, + 0x6ca8: 0xa0000000, 0x6ca9: 0xa0000000, 0x6caa: 0xa0000000, 0x6cab: 0xa0000000, + 0x6cac: 0xa0000000, 0x6cad: 0xa0000000, 0x6cae: 0xa0000000, 0x6caf: 0xa0000000, + 0x6cb0: 0xa0000000, 0x6cb1: 0xa0000000, 0x6cb2: 0xa0000000, 0x6cb3: 0xa0000000, + 0x6cb4: 0xa0000000, 0x6cb5: 0xa0000000, 0x6cb6: 0xa0000000, 0x6cb7: 0xa0000000, + 0x6cb8: 0xa0000000, 0x6cb9: 0xa0000000, 0x6cba: 0xa0000000, 0x6cbb: 0xa0000000, + 0x6cbc: 0xa0000000, 0x6cbd: 0xa0000000, 0x6cbe: 0xa0000000, 0x6cbf: 0xa0000000, + // Block 0x1b3, offset 0x6cc0 + 0x6cc0: 0xa0000000, 0x6cc1: 0xa0000000, 0x6cc2: 0xa0000000, 0x6cc3: 0xa0000000, + 0x6cc4: 0xa0000000, 0x6cc5: 0xa0000000, 0x6cc6: 0xa0000000, 0x6cc7: 0xa0000000, + 0x6cc8: 0xa0000000, 0x6cc9: 0xa0000000, 0x6cca: 0xa0000000, 0x6ccb: 0xa0000000, + 0x6ccc: 0xa0000000, 0x6ccd: 0xa0000000, 0x6cce: 0xa0000000, 0x6ccf: 0xa0000000, + 0x6cd0: 0xa0000000, 0x6cd1: 0xa0000000, 0x6cd2: 0xa0000000, 0x6cd3: 0xa0000000, + 0x6cd4: 0xa0000000, 0x6cd5: 0xa0000000, 0x6cd6: 0xa0000000, 0x6cd7: 0xa0000000, + 0x6cd8: 0xa0000000, 0x6cd9: 0xa0000000, 0x6cda: 0xa0000000, 0x6cdb: 0xa0000000, + 0x6cdc: 0xa0000000, 0x6cdd: 0xa0000000, 0x6cde: 0xa0000000, 0x6cdf: 0xa0000000, + 0x6ce0: 0xa0000000, 0x6ce1: 0xa0000000, 0x6ce2: 0xa0000000, 0x6ce3: 0xa0000000, + 0x6ce4: 0xa0000000, 0x6ce5: 0xa0000000, 0x6ce6: 0xa0000000, 0x6ce7: 0xa0000000, + 0x6ce8: 0xa0000000, 0x6ce9: 0xa0000000, 0x6cea: 0xa0000000, 0x6ceb: 0xa0000000, + 0x6cec: 0xa0000000, 0x6ced: 0xa0000000, 0x6cee: 0xa0000000, 0x6cef: 0xa0000000, + // Block 0x1b4, offset 0x6d00 + 0x6d00: 0xa0000000, 0x6d01: 0xa0000000, 0x6d02: 0xa0000000, 0x6d03: 0xa0000000, + 0x6d04: 0xa0000000, 0x6d05: 0xa0000000, 0x6d06: 0xa0000000, 0x6d07: 0xa0000000, + 0x6d08: 0xa0000000, 0x6d09: 0x40020020, 0x6d0a: 0x40020220, 0x6d0b: 0x40020420, + 0x6d0c: 0x40020620, 0x6d0d: 0x40020820, 0x6d0e: 0xa0000000, 0x6d0f: 0xa0000000, + 0x6d10: 0xa0000000, 0x6d11: 0xa0000000, 0x6d12: 0xa0000000, 0x6d13: 0xa0000000, + 0x6d14: 0xa0000000, 0x6d15: 0xa0000000, 0x6d16: 0xa0000000, 0x6d17: 0xa0000000, + 0x6d18: 0xa0000000, 0x6d19: 0xa0000000, 0x6d1a: 0xa0000000, 0x6d1b: 0xa0000000, + 0x6d1c: 0xa0000000, 0x6d1d: 0xa0000000, 0x6d1e: 0xa0000000, 0x6d1f: 0xa0000000, + 0x6d20: 0x40021220, 0x6d21: 0x4002ba20, 0x6d22: 0x4003e020, 0x6d23: 0x4004ea20, + 0x6d24: 0x4027de20, 0x6d25: 0x4004ec20, 0x6d26: 0x4004e620, 0x6d27: 0x4003d220, + 0x6d28: 0x4003f420, 0x6d29: 0x4003f620, 0x6d2a: 0x4004d820, 0x6d2b: 0x40093820, + 0x6d2c: 0x40024020, 0x6d2d: 0x40021a20, 0x6d2e: 0x4002e420, 0x6d2f: 0x4004e220, + 0x6d30: 0x4029cc20, 0x6d31: 0x4029ce20, 0x6d32: 0x4029d020, 0x6d33: 0x4029d220, + 0x6d34: 0x4029d420, 0x6d35: 0x4029d620, 0x6d36: 0x4029d820, 0x6d37: 0x4029da20, + 0x6d38: 0x4029dc20, 0x6d39: 0x4029de20, 0x6d3a: 0x40026c20, 0x6d3b: 0x40026220, + 0x6d3c: 0x40094020, 0x6d3d: 0xc32f0851, 0x6d3e: 0x40094420, 0x6d3f: 0x4002c420, + // Block 0x1b5, offset 0x6d40 + 0x6d40: 0x4004d620, 0x6d41: 0x002bde88, 0x6d42: 0x002c0a88, 0x6d43: 0x002c3a88, + 0x6d44: 0x002c6288, 0x6d45: 0x002c9888, 0x6d46: 0x002d0888, 0x6d47: 0x002d2288, + 0x6d48: 0x002d6888, 0x6d49: 0x002d9a88, 0x6d4a: 0x002dcc88, 0x6d4b: 0x002dfe88, + 0x6d4c: 0xc0030002, 0x6d4d: 0x002e8288, 0x6d4e: 0x002e9e88, 0x6d4f: 0x002ee288, + 0x6d50: 0x002f2c88, 0x6d51: 0x002f5688, 0x6d52: 0x002f7a88, 0x6d53: 0x002fe688, + 0x6d54: 0x00302c88, 0x6d55: 0x00306c88, 0x6d56: 0x0030be88, 0x6d57: 0x0030e288, + 0x6d58: 0x0030f688, 0x6d59: 0x00310088, 0x6d5a: 0x00312a88, 0x6d5b: 0x4003f820, + 0x6d5c: 0x4004e420, 0x6d5d: 0x4003fa20, 0x6d5e: 0x40062420, 0x6d5f: 0x40021620, + 0x6d60: 0x40061e20, 0x6d61: 0x402bde20, 0x6d62: 0x402c0a20, 0x6d63: 0x402c3a20, + 0x6d64: 0x402c6220, 0x6d65: 0x402c9820, 0x6d66: 0x402d0820, 0x6d67: 0x402d2220, + 0x6d68: 0x402d6820, 0x6d69: 0x402d9a20, 0x6d6a: 0x402dcc20, 0x6d6b: 0x402dfe20, + 0x6d6c: 0xc0000002, 0x6d6d: 0x402e8220, 0x6d6e: 0x402e9e20, 0x6d6f: 0x402ee220, + 0x6d70: 0x402f2c20, 0x6d71: 0x402f5620, 0x6d72: 0x402f7a20, 0x6d73: 0x402fe620, + 0x6d74: 0x40302c20, 0x6d75: 0x40306c20, 0x6d76: 0x4030be20, 0x6d77: 0x4030e220, + 0x6d78: 0x4030f620, 0x6d79: 0x40310020, 0x6d7a: 0x40312a20, 0x6d7b: 0x4003fc20, + 0x6d7c: 0x40094820, 0x6d7d: 0x4003fe20, 0x6d7e: 0x40094c20, 0x6d7f: 0xa0000000, + // Block 0x1b6, offset 0x6d80 + 0x6d80: 0x40055620, 0x6d81: 0xa1809102, 0x6d82: 0xa1909002, 0x6d83: 0x40055820, + 0x6d84: 0xae600000, 0x6d85: 0xadc00000, 0x6d86: 0x40055a20, 0x6d87: 0xa1208d02, + 0x6d90: 0x40389020, 0x6d91: 0x40389220, 0x6d92: 0x40389420, 0x6d93: 0x40389620, + 0x6d94: 0x40389820, 0x6d95: 0x40389a20, 0x6d96: 0x40389c20, 0x6d97: 0x40389e20, + 0x6d98: 0x4038a020, 0x6d99: 0x4038a220, 0x6d9a: 0x0038a499, 0x6d9b: 0x4038a420, + 0x6d9c: 0x4038a620, 0x6d9d: 0x0038a899, 0x6d9e: 0x4038a820, 0x6d9f: 0x0038aa99, + 0x6da0: 0x4038aa20, 0x6da1: 0x4038ac20, 0x6da2: 0x4038ae20, 0x6da3: 0x0038b099, + 0x6da4: 0x4038b020, 0x6da5: 0x0038b299, 0x6da6: 0x4038b220, 0x6da7: 0x4038b420, + 0x6da8: 0x4038b620, 0x6da9: 0x4038b820, 0x6daa: 0x4038ba20, + 0x6db0: 0xe00014ff, 0x6db1: 0xe0001502, 0x6db2: 0xe0001511, 0x6db3: 0xa0002102, + 0x6db4: 0xa0002202, + // Block 0x1b7, offset 0x6dc0 + 0x6dc0: 0xa0000000, 0x6dc1: 0xa0000000, 0x6dc2: 0xa0000000, 0x6dc3: 0xa0000000, + 0x6dc4: 0xa0000000, 0x6dc6: 0x40096620, 0x6dc7: 0x40096a20, + 0x6dc8: 0x40070820, 0x6dc9: 0x4004f220, 0x6dca: 0x4004f620, 0x6dcb: 0x4027e620, + 0x6dcc: 0x40024820, 0x6dcd: 0x40024a20, 0x6dce: 0x40070e20, 0x6dcf: 0x40071020, + 0x6dd0: 0xae600000, 0x6dd1: 0xae600000, 0x6dd2: 0xae600000, 0x6dd3: 0xae600000, + 0x6dd4: 0xae600000, 0x6dd5: 0xae600000, 0x6dd6: 0xae600000, 0x6dd7: 0xae600000, + 0x6dd8: 0xa1e00000, 0x6dd9: 0xa1f00000, 0x6dda: 0xa2000000, 0x6ddb: 0x40026420, + 0x6dde: 0x40027020, 0x6ddf: 0x4002cc20, + 0x6de0: 0x403aa220, 0x6de1: 0x40391c20, 0x6de2: 0x40393a21, 0x6de3: 0x40393a22, + 0x6de4: 0x403a7621, 0x6de5: 0x40393a23, 0x6de6: 0x403a9221, 0x6de7: 0xc3310151, + 0x6de8: 0x40393c20, 0x6de9: 0x403a6a21, 0x6dea: 0x40395620, 0x6deb: 0x40395820, + 0x6dec: 0x40396420, 0x6ded: 0x40397220, 0x6dee: 0x40397420, 0x6def: 0x40398820, + 0x6df0: 0x40398a20, 0x6df1: 0x4039a420, 0x6df2: 0x4039a620, 0x6df3: 0x4039c620, + 0x6df4: 0x4039c820, 0x6df5: 0x4039dc20, 0x6df6: 0x4039de20, 0x6df7: 0x4039e620, + 0x6df8: 0x4039e820, 0x6df9: 0x4039ee20, 0x6dfa: 0x4039f020, 0x6dfb: 0x403a3820, + 0x6dfc: 0x403a3a20, 0x6dfd: 0x403a9c20, 0x6dfe: 0x403a9e20, 0x6dff: 0x403aa020, + // Block 0x1b8, offset 0x6e00 + 0x6e00: 0xa0002302, 0x6e01: 0x4039fc20, 0x6e02: 0x403a1220, 0x6e03: 0x403a1a20, + 0x6e04: 0x403a4020, 0x6e05: 0x403a4e20, 0x6e06: 0x403a5620, 0x6e07: 0x403a6820, + 0x6e08: 0xc3350171, 0x6e09: 0x403a9222, 0x6e0a: 0xc3370171, 0x6e0b: 0xa1b0a202, + 0x6e0c: 0xa1c0a502, 0x6e0d: 0xa1d0a902, 0x6e0e: 0xa1e0ad02, 0x6e0f: 0xa1f0b202, + 0x6e10: 0xa200b602, 0x6e11: 0xa210ba02, 0x6e12: 0xa220bc02, 0x6e13: 0xae60bd02, + 0x6e14: 0xae60be02, 0x6e15: 0xadc0bf02, 0x6e16: 0xadc0c102, 0x6e17: 0xae60c202, + 0x6e18: 0xae60c302, 0x6e19: 0xae60c402, 0x6e1a: 0xae60c502, 0x6e1b: 0xae60c602, + 0x6e1c: 0xadc0c702, 0x6e1d: 0xae60c802, 0x6e1e: 0xae60c902, 0x6e1f: 0xadc0c002, + 0x6e20: 0xe000015e, 0x6e21: 0xe00001e6, 0x6e22: 0xe0000301, 0x6e23: 0xe00003db, + 0x6e24: 0xe00004b6, 0x6e25: 0xe0000580, 0x6e26: 0xe000064b, 0x6e27: 0xe00006f3, + 0x6e28: 0xe000079f, 0x6e29: 0xe0000844, 0x6e2a: 0x4004ee20, 0x6e2b: 0x40024c20, + 0x6e2c: 0x40024e20, 0x6e2d: 0x4004de20, 0x6e2e: 0x40393a20, 0x6e2f: 0x403a1020, + 0x6e30: 0xa230d102, 0x6e31: 0x40392420, 0x6e32: 0x40392220, 0x6e33: 0x40392a20, + 0x6e34: 0x00391c84, 0x6e35: 0xf0000404, 0x6e36: 0xf0000404, 0x6e37: 0xf0000404, + 0x6e38: 0xf0000404, 0x6e39: 0x40395a20, 0x6e3a: 0x40395c20, 0x6e3b: 0x40393e20, + 0x6e3c: 0x40395e20, 0x6e3d: 0x40396020, 0x6e3e: 0x40394020, 0x6e3f: 0x40396220, + // Block 0x1b9, offset 0x6e40 + 0x6e40: 0xe00017e4, 0x6e41: 0x403a6c20, 0x6e42: 0xe00017e1, 0x6e43: 0x403a6e20, + 0x6e44: 0x403a7620, 0x6e45: 0x403a7820, 0x6e46: 0x403a7a20, 0x6e47: 0x403a7c20, + 0x6e48: 0x403a7e20, 0x6e49: 0x403a8020, 0x6e4a: 0x403a8220, 0x6e4b: 0x403a8420, + 0x6e4c: 0x403a9220, 0x6e4d: 0x403a9420, 0x6e4e: 0x403a9620, 0x6e4f: 0x403a8620, + 0x6e50: 0x403a9820, 0x6e51: 0x403a9a20, 0x6e52: 0x403aaa20, 0x6e53: 0xe0001800, + 0x6e54: 0x4002e820, 0x6e55: 0x403a7220, 0x6e56: 0xae600000, 0x6e57: 0xae600000, + 0x6e58: 0xae600000, 0x6e59: 0xae600000, 0x6e5a: 0xae600000, 0x6e5b: 0xae600000, + 0x6e5c: 0xae600000, 0x6e5d: 0xa0000000, 0x6e5e: 0x40071220, 0x6e5f: 0xae600000, + 0x6e60: 0xae600000, 0x6e61: 0xae600000, 0x6e62: 0xae600000, 0x6e63: 0xadc00000, + 0x6e64: 0xae600000, 0x6e65: 0x003a7483, 0x6e66: 0x003a9083, 0x6e67: 0xae600000, + 0x6e68: 0xae600000, 0x6e69: 0x40071420, 0x6e6a: 0xadc00000, 0x6e6b: 0xae600000, + 0x6e6c: 0xae600000, 0x6e6d: 0xadc00000, 0x6e6e: 0x40399e20, 0x6e6f: 0x4039ba20, + 0x6e70: 0xe0000161, 0x6e71: 0xe00001e9, 0x6e72: 0xe0000304, 0x6e73: 0xe00003de, + 0x6e74: 0xe00004b9, 0x6e75: 0xe0000583, 0x6e76: 0xe000064e, 0x6e77: 0xe00006f6, + 0x6e78: 0xe00007a2, 0x6e79: 0xe0000847, 0x6e7a: 0x4039d020, 0x6e7b: 0x4039e420, + 0x6e7c: 0x4039f420, 0x6e7d: 0xe0001553, 0x6e7e: 0xe0001779, 0x6e7f: 0x403a7020, + // Block 0x1ba, offset 0x6e80 + 0x6e81: 0x40491020, 0x6e82: 0x40491220, 0x6e83: 0x40491420, + 0x6e84: 0x40491620, 0x6e85: 0x40491820, 0x6e86: 0x40491a20, 0x6e87: 0x40491c20, + 0x6e88: 0x40491e20, 0x6e89: 0x40492020, 0x6e8a: 0x40492220, 0x6e8b: 0x40492420, + 0x6e8c: 0x40492620, 0x6e8d: 0x40492820, 0x6e8e: 0x40492a20, 0x6e8f: 0x40492c20, + 0x6e90: 0x40492e20, 0x6e91: 0x40493020, 0x6e92: 0x40493220, 0x6e93: 0x40493420, + 0x6e94: 0x40493620, 0x6e95: 0x40493820, 0x6e96: 0x40493a20, 0x6e97: 0x40493c20, + 0x6e98: 0x40493e20, 0x6e99: 0x40494020, 0x6e9a: 0x40494220, 0x6e9b: 0x40494420, + 0x6e9c: 0x40494620, 0x6e9d: 0x40494820, 0x6e9e: 0x40494a20, 0x6e9f: 0x40494c20, + 0x6ea0: 0x40494e20, 0x6ea1: 0x40495020, 0x6ea2: 0x40495220, 0x6ea3: 0x40495420, + 0x6ea4: 0x40495620, 0x6ea5: 0x40495820, 0x6ea6: 0x40495a20, 0x6ea7: 0x40495c20, + 0x6ea8: 0x40495e20, 0x6ea9: 0x40496020, 0x6eaa: 0x40496220, 0x6eab: 0x40496420, + 0x6eac: 0x40496620, 0x6ead: 0x40496820, 0x6eae: 0x40496a20, 0x6eaf: 0x40496c20, + 0x6eb0: 0x40496e20, 0x6eb1: 0x40497020, 0x6eb2: 0x40497220, 0x6eb3: 0x40497420, + 0x6eb4: 0x40497620, 0x6eb5: 0x40497820, 0x6eb6: 0x40497a20, 0x6eb7: 0x40497c20, + 0x6eb8: 0x826724bf, 0x6eb9: 0x826724c0, 0x6eba: 0xa0002402, + 0x6ebf: 0x4027f420, + // Block 0x1bb, offset 0x6ec0 + 0x6ec0: 0x4062ac20, 0x6ec1: 0xe0002526, 0x6ec2: 0x4062b020, 0x6ec3: 0x4062b220, + 0x6ec4: 0xe0002532, 0x6ec5: 0x4062b620, 0x6ec6: 0x4062b820, 0x6ec7: 0x4062ba20, + 0x6ec8: 0xe000254a, 0x6ec9: 0x4062be20, 0x6eca: 0xe0002550, 0x6ecb: 0x4062c220, + 0x6ecc: 0x4062c420, 0x6ecd: 0xe0002553, 0x6ece: 0x4062c820, 0x6ecf: 0x4062ca20, + 0x6ed0: 0x4062cc20, 0x6ed1: 0x4062ce20, 0x6ed2: 0x4062d020, 0x6ed3: 0x4062d220, + 0x6ed4: 0x4062d420, 0x6ed5: 0x4062d620, 0x6ed6: 0x4062d820, 0x6ed7: 0x4062da20, + 0x6ed8: 0x4062dc20, 0x6ed9: 0x4062de20, 0x6eda: 0x4062e020, 0x6edb: 0x4062e220, + 0x6edc: 0x4062e420, 0x6edd: 0x4062e620, 0x6ede: 0x4062e820, 0x6edf: 0x4062ea20, + 0x6ee0: 0x4062ec20, 0x6ee1: 0x4062ee20, 0x6ee2: 0x4062f020, 0x6ee3: 0x4062f220, + 0x6ee4: 0x4062f420, 0x6ee5: 0x4062f620, 0x6ee6: 0x4062f820, 0x6ee7: 0x4062fa20, + 0x6ee8: 0x4062fc20, 0x6ee9: 0x4062fe20, 0x6eea: 0x40630020, 0x6eeb: 0x40630220, + 0x6eec: 0x40630420, 0x6eed: 0x40630620, 0x6eee: 0x40630820, 0x6eef: 0x40630a20, + 0x6ef0: 0x40630c20, 0x6ef1: 0x40630e20, 0x6ef2: 0x40631020, 0x6ef3: 0x40631220, + 0x6ef4: 0x40631420, 0x6ef5: 0x40631620, 0x6ef6: 0x40631820, 0x6ef7: 0x40631a20, + 0x6ef8: 0x40631c20, 0x6ef9: 0x40631e20, 0x6efa: 0x40632020, 0x6efb: 0x40632220, + 0x6efc: 0x40632420, 0x6efd: 0x40632620, 0x6efe: 0x40632820, 0x6eff: 0x40632a20, + // Block 0x1bc, offset 0x6f00 + 0x6f00: 0x40632c20, 0x6f01: 0x40632e20, 0x6f02: 0x40633020, 0x6f03: 0x40633220, + 0x6f04: 0x40633420, 0x6f05: 0x40633620, 0x6f06: 0x40633820, 0x6f07: 0x40633a20, + 0x6f08: 0x40633c20, 0x6f09: 0x40633e20, 0x6f0a: 0x40634020, 0x6f0b: 0x40634220, + 0x6f0c: 0x40634420, 0x6f0d: 0x40634620, 0x6f0e: 0x40634820, 0x6f0f: 0x40634a20, + 0x6f10: 0x40634c20, 0x6f11: 0x40634e20, 0x6f12: 0x40635020, 0x6f13: 0x40635220, + 0x6f14: 0x40635420, 0x6f15: 0x40635620, 0x6f16: 0x40635820, 0x6f17: 0x40635a20, + 0x6f18: 0x40635c20, 0x6f19: 0x40635e20, 0x6f1a: 0x40636020, 0x6f1b: 0x40636220, + 0x6f1c: 0x40636420, 0x6f1d: 0x40636620, 0x6f1e: 0x40636820, 0x6f1f: 0x4063a420, + 0x6f20: 0x4063a620, 0x6f21: 0x4063a820, 0x6f22: 0xe0002556, 0x6f23: 0x4063ac20, + 0x6f24: 0xe0002559, 0x6f25: 0x4063b020, 0x6f26: 0xe000255c, 0x6f27: 0x4063b420, + 0x6f28: 0xe000255f, 0x6f29: 0x4063b820, 0x6f2a: 0xe0002562, 0x6f2b: 0xe0002565, + 0x6f2c: 0xe0002569, 0x6f2d: 0x4063c020, 0x6f2e: 0x4063c220, 0x6f2f: 0xe000256c, + 0x6f30: 0xe000256f, 0x6f31: 0xe0002573, 0x6f32: 0x4063ca20, 0x6f33: 0x4063cc20, + 0x6f34: 0x4063ce20, 0x6f35: 0x4063d020, 0x6f36: 0x4063d220, 0x6f37: 0x4063d420, + 0x6f38: 0x4063d620, 0x6f39: 0x4063d820, 0x6f3a: 0x4063da20, 0x6f3b: 0x4063dc20, + 0x6f3c: 0x4063de20, 0x6f3d: 0x4063e020, 0x6f3e: 0x4063e220, 0x6f3f: 0x4063e420, + // Block 0x1bd, offset 0x6f40 + 0x6f40: 0x4063e620, 0x6f41: 0x4063e820, 0x6f42: 0x4063ea20, 0x6f43: 0x4063ec20, + 0x6f44: 0x4063ee20, 0x6f45: 0x4063f020, 0x6f46: 0x4063f220, 0x6f47: 0x4063f420, + 0x6f48: 0x4063f620, 0x6f49: 0x4063f820, 0x6f4a: 0x4063fa20, 0x6f4b: 0x4063fc20, + 0x6f4c: 0x4063fe20, 0x6f4d: 0x40640020, 0x6f4e: 0x40640220, 0x6f4f: 0x40640420, + 0x6f50: 0x40640620, 0x6f51: 0x40640820, 0x6f52: 0x40640a20, 0x6f53: 0x40640c20, + 0x6f54: 0x40640e20, 0x6f55: 0x40641020, 0x6f56: 0x40641220, 0x6f57: 0x40641420, + 0x6f58: 0x40641620, 0x6f59: 0x40641820, 0x6f5a: 0x40641a20, 0x6f5b: 0x40641c20, + 0x6f5c: 0x40641e20, 0x6f5d: 0x40642020, 0x6f5e: 0x40642220, 0x6f5f: 0x40642420, + 0x6f60: 0x40642620, 0x6f61: 0x40642820, 0x6f62: 0x40642a20, 0x6f63: 0x40642c20, + 0x6f64: 0x40642e20, 0x6f65: 0x40643020, 0x6f66: 0x40643220, 0x6f67: 0x40643420, + 0x6f68: 0x4062ac20, 0x6f69: 0xe0002526, 0x6f6a: 0xe0002529, 0x6f6b: 0x4062b020, + 0x6f6c: 0xe000252c, 0x6f6d: 0xe000252f, 0x6f6e: 0x4062b220, 0x6f6f: 0x4062b620, + 0x6f70: 0xe0002535, 0x6f71: 0xe0002538, 0x6f72: 0xe000253b, 0x6f73: 0xe000253e, + 0x6f74: 0xe0002541, 0x6f75: 0xe0002544, 0x6f76: 0xe0002547, 0x6f77: 0x4062b820, + 0x6f78: 0x4062ba20, 0x6f79: 0xe000254d, 0x6f7a: 0x4062be20, 0x6f7b: 0xe0002550, + 0x6f7c: 0x4062c220, 0x6f7d: 0x4062c420, 0x6f7e: 0x4062c820, 0x6f7f: 0x4062ca20, + // Block 0x1be, offset 0x6f80 + 0x6f80: 0x4062cc20, 0x6f81: 0x4062ce20, 0x6f82: 0x4062d020, 0x6f83: 0x40649a20, + 0x6f84: 0x40649c20, 0x6f85: 0x40649e20, 0x6f86: 0x4064a020, 0x6f87: 0x4064a220, + 0x6f88: 0x4064a420, 0x6f89: 0x4064a620, 0x6f8a: 0x4064a820, 0x6f8b: 0x4064aa20, + 0x6f8c: 0x4064ac20, 0x6f8d: 0x4064ae20, 0x6f8e: 0x4064b020, 0x6f8f: 0x4064b220, + 0x6f90: 0x4064b420, 0x6f91: 0x4064b620, 0x6f92: 0x4064b820, 0x6f93: 0x4064ba20, + 0x6f94: 0x4064bc20, 0x6f95: 0x4064be20, 0x6f96: 0x4064c020, 0x6f97: 0x4064c220, + 0x6f98: 0x4064c420, 0x6f99: 0x4064c620, 0x6f9a: 0x4064c820, 0x6f9b: 0x4064ca20, + 0x6f9c: 0x4064cc20, 0x6f9d: 0x4064ce20, 0x6f9e: 0x4064d020, 0x6f9f: 0x4064d220, + 0x6fa0: 0x4064d420, 0x6fa1: 0x4064d620, 0x6fa2: 0x4064d820, 0x6fa3: 0x4064da20, + 0x6fa4: 0x4064dc20, 0x6fa5: 0x4064de20, 0x6fa6: 0x4064e020, 0x6fa7: 0x4064e220, + 0x6fa8: 0x4064e420, 0x6fa9: 0x4064e620, 0x6faa: 0x4064e820, 0x6fab: 0x4064ea20, + 0x6fac: 0x4064ec20, 0x6fad: 0x4064ee20, 0x6fae: 0x4064f020, 0x6faf: 0x4064f220, + 0x6fb0: 0x4064f420, 0x6fb1: 0x4064f620, 0x6fb2: 0x4064f820, 0x6fb3: 0x4064fa20, + 0x6fb4: 0x4064fc20, 0x6fb5: 0x4064fe20, 0x6fb6: 0x40650020, 0x6fb7: 0x40650220, + 0x6fb8: 0x40650420, 0x6fb9: 0x40650620, 0x6fba: 0x40650820, 0x6fbb: 0x40650a20, + 0x6fbc: 0x40650c20, 0x6fbd: 0x40650e20, 0x6fbe: 0x40651020, 0x6fbf: 0x40651220, + // Block 0x1bf, offset 0x6fc0 + 0x6fc0: 0x4009a620, 0x6fc1: 0xe00000f5, 0x6fc2: 0x4009a820, 0x6fc3: 0x4009aa20, + 0x6fc4: 0xe00000f8, 0x6fc5: 0x4009ac20, 0x6fc6: 0x4009ae20, 0x6fc7: 0xe00000fb, + 0x6fc8: 0x4009b020, 0x6fc9: 0xe00000fe, 0x6fca: 0x4009b220, 0x6fcb: 0x4009b420, + 0x6fcc: 0x4009b620, 0x6fcd: 0x4009b820, 0x6fce: 0x4009ba20, 0x6fcf: 0x4009bc20, + 0x6fd0: 0x4009be20, 0x6fd1: 0x4009c020, 0x6fd2: 0x4009c220, 0x6fd3: 0x4009c420, + 0x6fd4: 0x4009c620, 0x6fd5: 0x4009c820, 0x6fd6: 0x4009ca20, 0x6fd7: 0x4009cc20, + 0x6fd8: 0x4009ce20, 0x6fd9: 0x4009d020, 0x6fda: 0x4009d220, 0x6fdb: 0x4009d420, + 0x6fdc: 0x4009d620, 0x6fdd: 0x4009d820, 0x6fde: 0x4009da20, 0x6fdf: 0x4009dc20, + 0x6fe0: 0x40094420, 0x6fe1: 0x4009de20, 0x6fe2: 0xe0000104, 0x6fe3: 0x4009e020, + 0x6fe4: 0x4009e220, 0x6fe5: 0x4009e420, 0x6fe6: 0x4009e620, 0x6fe7: 0x4009e820, + 0x6fe8: 0x4009ea20, 0x6fe9: 0x4009ec20, 0x6fea: 0x4009ee20, 0x6feb: 0x4009f020, + 0x6fec: 0x4009f220, 0x6fed: 0xe0000101, 0x6fee: 0xe00000e1, 0x6fef: 0xe00000e7, + 0x6ff0: 0xe0000107, 0x6ff1: 0xe000010a, 0x6ff2: 0x4009f420, 0x6ff3: 0x4009f620, + 0x6ff4: 0xe000010d, 0x6ff5: 0xe0000110, 0x6ff6: 0x4009f820, 0x6ff7: 0x4009fa20, + 0x6ff8: 0xe0000113, 0x6ff9: 0xe0000116, 0x6ffa: 0x4009fc20, 0x6ffb: 0x4009fe20, + 0x6ffc: 0x400a0020, 0x6ffd: 0x400a0220, 0x6ffe: 0x400a0420, 0x6fff: 0x400a0620, + // Block 0x1c0, offset 0x7000 + 0x7000: 0x40073420, 0x7001: 0x40073620, + 0x7013: 0x003a269a, + 0x7014: 0x003a2699, 0x7015: 0x003a2697, 0x7016: 0x003a2698, 0x7017: 0x003a7c9a, + 0x7018: 0x003a7c99, 0x7019: 0x003a7a9a, 0x701a: 0x003a7a99, 0x701b: 0x003a7e9a, + 0x701c: 0x003a7e99, 0x701d: 0xf0001a1a, 0x701e: 0x003a849a, 0x701f: 0x003a8499, + 0x7020: 0x003a789a, 0x7021: 0x003a7899, 0x7022: 0x003a809a, 0x7023: 0x003a8099, + 0x7024: 0x003a989a, 0x7025: 0x003a9899, 0x7026: 0x003a9897, 0x7027: 0x003a9898, + 0x7028: 0x003a92c3, 0x7029: 0x003a92c4, 0x702a: 0xe0001559, 0x702b: 0xe0001556, + 0x702c: 0xe0001589, 0x702d: 0xe0001586, 0x702e: 0xe000158f, 0x702f: 0xe000158c, + 0x7030: 0xe000159b, 0x7031: 0xe0001598, 0x7032: 0xe0001595, 0x7033: 0xe0001592, + 0x7034: 0xe00015a1, 0x7035: 0xe000159e, 0x7036: 0xe00015bf, 0x7037: 0xe00015bc, + 0x7038: 0xe00015b9, 0x7039: 0xe00015ad, 0x703a: 0xe00015a7, 0x703b: 0xe00015a4, + 0x703c: 0x003a929a, 0x703d: 0x003a9299, 0x703e: 0x003a9297, 0x703f: 0x003a9298, + // Block 0x1c1, offset 0x7040 + 0x7040: 0xe000155f, 0x7041: 0xe0001565, 0x7042: 0xe000157a, 0x7043: 0xe00015b0, + 0x7044: 0xe00015b6, 0x7045: 0xf0001a1a, 0x7046: 0xf0001a1a, 0x7047: 0xf0001a1a, + 0x7048: 0xf0001a1a, 0x7049: 0xe00024ab, 0x704a: 0xf0001a1a, 0x704b: 0xf0001a1a, + 0x704c: 0xf0001a1a, 0x704d: 0xf0001a1a, 0x704e: 0xf0001a1a, 0x704f: 0xe00024b1, + 0x7050: 0xf0001a1a, 0x7051: 0xf0001a1a, 0x7052: 0xf0001a1a, 0x7053: 0xe00024b7, + 0x7054: 0xf0001a1a, 0x7055: 0xf0001a1a, 0x7056: 0xf0001a1a, 0x7057: 0xf0001a1a, + 0x7058: 0xf0001a1a, 0x7059: 0xf0001a1a, 0x705a: 0xf0001a1a, 0x705b: 0xf0001a1a, + 0x705c: 0xf0001a1a, 0x705d: 0xf0001a1a, 0x705e: 0xf0001a1a, 0x705f: 0xf0001a1a, + 0x7060: 0xf0001a1a, 0x7061: 0xf0001a1a, 0x7062: 0xf0001a1a, 0x7063: 0xf0001a1a, + 0x7064: 0xf0001a1a, 0x7065: 0xf0001a1a, 0x7066: 0xf0001a1a, 0x7067: 0xf0001a1a, + 0x7068: 0xf0001a1a, 0x7069: 0xf0001a1a, 0x706a: 0xf0001a1a, 0x706b: 0xf0001a1a, + 0x706c: 0xf0001a1a, 0x706d: 0xf0001a1a, 0x706e: 0xf0001a1a, 0x706f: 0xf0001a1a, + 0x7070: 0xf0001a1a, 0x7071: 0xe00024f9, 0x7072: 0xf0001a1a, 0x7073: 0xf0001a1a, + 0x7074: 0xf0001a1a, 0x7075: 0xe00024ff, 0x7076: 0xf0001a1a, 0x7077: 0xf0001a1a, + 0x7078: 0xf0001a1a, 0x7079: 0xf0001a1a, 0x707a: 0xf0001a1a, 0x707b: 0xf0001a1a, + 0x707c: 0xf0001a1a, 0x707d: 0xe0002505, 0x707e: 0xf0001a1a, 0x707f: 0xf0001a1a, + // Block 0x1c2, offset 0x7080 + 0x7080: 0xf0001a1a, 0x7081: 0xf0001a1a, 0x7082: 0xf0001a1a, 0x7083: 0xe000250b, + 0x7084: 0xf0001a1a, 0x7085: 0xf0001a1a, 0x7086: 0xf0001a1a, 0x7087: 0xf0001a1a, + 0x7088: 0xf0001a1a, 0x7089: 0xe000250e, 0x708a: 0xf0001a1a, 0x708b: 0xf0001a1a, + 0x708c: 0xf0001a1a, 0x708d: 0xf0001a1a, 0x708e: 0xf0001a1a, 0x708f: 0xe0002514, + 0x7090: 0xf0001a1a, 0x7091: 0xf0001a1a, 0x7092: 0xf0001a1a, 0x7093: 0xe0002517, + 0x7094: 0xf0001a1a, 0x7095: 0xf0001a1a, 0x7096: 0xf0001a1a, 0x7097: 0xf0001a1a, + 0x7098: 0xf0001a1a, 0x7099: 0xe0002523, 0x709a: 0xf0001a1a, 0x709b: 0xf0001a1a, + 0x709c: 0xf0001a1a, 0x709d: 0xe000251d, 0x709e: 0xe0000003, 0x709f: 0xe0000006, + 0x70a0: 0xe0000009, 0x70a1: 0xe000000c, 0x70a2: 0xe000000f, 0x70a3: 0xe0000012, + 0x70a4: 0xe000156b, 0x70a5: 0xe000156e, 0x70a6: 0xe0001577, 0x70a7: 0xe000157d, + 0x70a8: 0xe00015aa, 0x70a9: 0xe00015b3, 0x70aa: 0xf0001919, 0x70ab: 0xf0001919, + 0x70ac: 0xf0001919, 0x70ad: 0xf0001919, 0x70ae: 0xe00024a8, 0x70af: 0xf0001919, + 0x70b0: 0xf0001919, 0x70b1: 0xf0001919, 0x70b2: 0xf0001919, 0x70b3: 0xf0001919, + 0x70b4: 0xe00024ae, 0x70b5: 0xf0001919, 0x70b6: 0xf0001919, 0x70b7: 0xf0001919, + 0x70b8: 0xf0001919, 0x70b9: 0xf0001919, 0x70ba: 0xe00024b4, 0x70bb: 0xf0001919, + 0x70bc: 0xe00024f6, 0x70bd: 0xf0001919, 0x70be: 0xe00024fc, 0x70bf: 0xf0001919, + // Block 0x1c3, offset 0x70c0 + 0x70c0: 0xf0001919, 0x70c1: 0xf0001919, 0x70c2: 0xf0001919, 0x70c3: 0xe0002502, + 0x70c4: 0xf0001919, 0x70c5: 0xf0001919, 0x70c6: 0xe0002508, 0x70c7: 0xf0001919, + 0x70c8: 0xf0001919, 0x70c9: 0xf0001919, 0x70ca: 0xf0001919, 0x70cb: 0xf0001919, + 0x70cc: 0xf0001919, 0x70cd: 0xf0001919, 0x70ce: 0xe0002511, 0x70cf: 0xf0001919, + 0x70d0: 0xe000251a, 0x70d1: 0xf0001919, 0x70d2: 0xf0001919, 0x70d3: 0xf0001919, + 0x70d4: 0xf0001919, 0x70d5: 0xe0002520, 0x70d6: 0xf0001919, 0x70d7: 0xe000155c, + 0x70d8: 0xe0001562, 0x70d9: 0xe0001568, 0x70da: 0xe0001571, 0x70db: 0xe0001580, + 0x70dc: 0xf0001717, 0x70dd: 0xf0001717, 0x70de: 0xf0001717, 0x70df: 0xf0001717, + 0x70e0: 0xf0001717, 0x70e1: 0xf0001717, 0x70e2: 0xf0001717, 0x70e3: 0xf0001717, + 0x70e4: 0xf0001717, 0x70e5: 0xf0001717, 0x70e6: 0xf0001717, 0x70e7: 0xf0001717, + 0x70e8: 0xf0001717, 0x70e9: 0xf0001717, 0x70ea: 0xf0001717, 0x70eb: 0xf0001717, + 0x70ec: 0xf0001717, 0x70ed: 0xf0001717, 0x70ee: 0xf0001717, 0x70ef: 0xf0001717, + 0x70f0: 0xf0001717, 0x70f1: 0xf0001717, 0x70f2: 0xf0001717, 0x70f3: 0xf0001717, + 0x70f4: 0xf0001717, 0x70f5: 0xf0001717, 0x70f6: 0xf0001717, 0x70f7: 0xf0001717, + 0x70f8: 0xf0001717, 0x70f9: 0xf0001717, 0x70fa: 0xf0001717, 0x70fb: 0xf0001717, + 0x70fc: 0xf0001717, 0x70fd: 0xf0001717, 0x70fe: 0xf0001717, 0x70ff: 0xf0001717, + // Block 0x1c4, offset 0x7100 + 0x7100: 0xf0001717, 0x7101: 0xf0001717, 0x7102: 0xf0001717, 0x7103: 0xf0001717, + 0x7104: 0xf0001717, 0x7105: 0xf0001717, 0x7106: 0xf0001717, 0x7107: 0xf0001717, + 0x7108: 0xf0001717, 0x7109: 0xf0001717, 0x710a: 0xf0001717, 0x710b: 0xf0001717, + 0x710c: 0xf0001717, 0x710d: 0xf0001717, 0x710e: 0xf0001717, 0x710f: 0xf0001717, + 0x7110: 0xf0001717, 0x7111: 0xf0001717, 0x7112: 0xf0001717, 0x7113: 0xf0001717, + 0x7114: 0xf0001717, 0x7115: 0xf0001717, 0x7116: 0xf0001717, 0x7117: 0xf0001717, + 0x7118: 0xf0001717, 0x7119: 0xf0001717, 0x711a: 0xf0001717, 0x711b: 0xf0001717, + 0x711c: 0xf0001717, 0x711d: 0xf0001717, 0x711e: 0xf0001717, 0x711f: 0xe0001574, + 0x7120: 0xe0001583, 0x7121: 0xf0001818, 0x7122: 0xf0001818, 0x7123: 0xf0001818, + 0x7124: 0xf0001818, 0x7125: 0xf0001818, 0x7126: 0xf0001818, 0x7127: 0xf0001818, + 0x7128: 0xf0001818, 0x7129: 0xf0001818, 0x712a: 0xf0001818, 0x712b: 0xf0001818, + 0x712c: 0xf0001818, 0x712d: 0xf0001818, 0x712e: 0xf0001818, 0x712f: 0xf0001818, + 0x7130: 0xf0001818, 0x7131: 0xf0001818, 0x7132: 0xe000249f, 0x7133: 0xe00024a2, + 0x7134: 0xe00024a5, 0x7135: 0xe00024e7, 0x7136: 0xf0001a1a, 0x7137: 0xe00024ed, + 0x7138: 0xf0001a1a, 0x7139: 0xe00024f3, 0x713a: 0xf0001a1a, 0x713b: 0xe00024cf, + 0x713c: 0xf0001a1a, 0x713d: 0xe00024d5, 0x713e: 0xf0001a1a, 0x713f: 0xe00024c3, + // Block 0x1c5, offset 0x7140 + 0x7140: 0xf0001a1a, 0x7141: 0xe00024bd, 0x7142: 0xf0001a1a, 0x7143: 0xe00024c9, + 0x7144: 0xf0001a1a, 0x7145: 0xe00024db, 0x7146: 0xf0001a1a, 0x7147: 0xe00024e1, + 0x7148: 0xf0001a1a, 0x7149: 0xf0001a1a, 0x714a: 0xf0001a1a, 0x714b: 0xf0001a1a, + 0x714c: 0xf0001a1a, 0x714d: 0xf0001a1a, 0x714e: 0xf0001a1a, 0x714f: 0xf0001a1a, + 0x7150: 0xf0001a1a, 0x7151: 0xe00024e4, 0x7152: 0xf0001919, 0x7153: 0xe00024ea, + 0x7154: 0xf0001919, 0x7155: 0xe00024f0, 0x7156: 0xf0001919, 0x7157: 0xe00024cc, + 0x7158: 0xf0001919, 0x7159: 0xe00024d2, 0x715a: 0xf0001919, 0x715b: 0xe00024c0, + 0x715c: 0xf0001919, 0x715d: 0xe00024ba, 0x715e: 0xf0001919, 0x715f: 0xe00024c6, + 0x7160: 0xf0001919, 0x7161: 0xe00024d8, 0x7162: 0xf0001919, 0x7163: 0xe00024de, + 0x7164: 0xf0001919, 0x7165: 0xf0001919, 0x7166: 0xf0001919, 0x7167: 0xf0001919, + 0x7168: 0xf0001919, 0x7169: 0xf0001919, 0x716a: 0xf0001919, 0x716b: 0xf0001919, + 0x716c: 0xf0001919, 0x716d: 0xf0001717, 0x716e: 0xf0001717, 0x716f: 0xf0001717, + 0x7170: 0xf0001717, 0x7171: 0xf0001717, 0x7172: 0xf0001717, 0x7173: 0xf0001717, + 0x7174: 0xf0001818, 0x7175: 0xf0001818, 0x7176: 0xf0001818, 0x7177: 0xf0001818, + 0x7178: 0xf0001818, 0x7179: 0xf0001818, 0x717a: 0xf0001818, 0x717b: 0xf0001818, + 0x717c: 0xf0001919, 0x717d: 0xf0001a1a, 0x717e: 0x4004c020, 0x717f: 0x4004c220, + // Block 0x1c6, offset 0x7180 + 0x7180: 0x00391c9a, 0x7181: 0x00393aa4, 0x7182: 0x00393aa3, 0x7183: 0x00393ac4, + 0x7184: 0x00393ac3, 0x7185: 0x003a76a4, 0x7186: 0x003a76a3, 0x7187: 0x00393ae4, + 0x7188: 0x00393ae3, 0x7189: 0x003a92a6, 0x718a: 0x003a92a5, 0x718b: 0x003a92a3, + 0x718c: 0x003a92a4, 0x718d: 0x00393884, 0x718e: 0x00393883, 0x718f: 0x00393c9a, + 0x7190: 0x00393c99, 0x7191: 0x00393c97, 0x7192: 0x00393c98, 0x7193: 0x003a6aa4, + 0x7194: 0x003a6aa3, 0x7195: 0x0039569a, 0x7196: 0x00395699, 0x7197: 0x00395697, + 0x7198: 0x00395698, 0x7199: 0x0039589a, 0x719a: 0x00395899, 0x719b: 0x00395897, + 0x719c: 0x00395898, 0x719d: 0x0039649a, 0x719e: 0x00396499, 0x719f: 0x00396497, + 0x71a0: 0x00396498, 0x71a1: 0x0039729a, 0x71a2: 0x00397299, 0x71a3: 0x00397297, + 0x71a4: 0x00397298, 0x71a5: 0x0039749a, 0x71a6: 0x00397499, 0x71a7: 0x00397497, + 0x71a8: 0x00397498, 0x71a9: 0x0039889a, 0x71aa: 0x00398899, 0x71ab: 0x00398a9a, + 0x71ac: 0x00398a99, 0x71ad: 0x0039a49a, 0x71ae: 0x0039a499, 0x71af: 0x0039a69a, + 0x71b0: 0x0039a699, 0x71b1: 0x0039c69a, 0x71b2: 0x0039c699, 0x71b3: 0x0039c697, + 0x71b4: 0x0039c698, 0x71b5: 0x0039c89a, 0x71b6: 0x0039c899, 0x71b7: 0x0039c897, + 0x71b8: 0x0039c898, 0x71b9: 0x0039dc9a, 0x71ba: 0x0039dc99, 0x71bb: 0x0039dc97, + 0x71bc: 0x0039dc98, 0x71bd: 0x0039de9a, 0x71be: 0x0039de99, 0x71bf: 0x0039de97, + // Block 0x1c7, offset 0x71c0 + 0x71c0: 0x0039de98, 0x71c1: 0x0039e69a, 0x71c2: 0x0039e699, 0x71c3: 0x0039e697, + 0x71c4: 0x0039e698, 0x71c5: 0x0039e89a, 0x71c6: 0x0039e899, 0x71c7: 0x0039e897, + 0x71c8: 0x0039e898, 0x71c9: 0x0039ee9a, 0x71ca: 0x0039ee99, 0x71cb: 0x0039ee97, + 0x71cc: 0x0039ee98, 0x71cd: 0x0039f09a, 0x71ce: 0x0039f099, 0x71cf: 0x0039f097, + 0x71d0: 0x0039f098, 0x71d1: 0x0039fc9a, 0x71d2: 0x0039fc99, 0x71d3: 0x0039fc97, + 0x71d4: 0x0039fc98, 0x71d5: 0x003a129a, 0x71d6: 0x003a1299, 0x71d7: 0x003a1297, + 0x71d8: 0x003a1298, 0x71d9: 0x003a1a9a, 0x71da: 0x003a1a99, 0x71db: 0x003a1a97, + 0x71dc: 0x003a1a98, 0x71dd: 0x003a409a, 0x71de: 0x003a4099, 0x71df: 0x003a4097, + 0x71e0: 0x003a4098, 0x71e1: 0x003a4e9a, 0x71e2: 0x003a4e99, 0x71e3: 0x003a4e97, + 0x71e4: 0x003a4e98, 0x71e5: 0x003a569a, 0x71e6: 0x003a5699, 0x71e7: 0x003a5697, + 0x71e8: 0x003a5698, 0x71e9: 0x003a6886, 0x71ea: 0x003a6885, 0x71eb: 0x003a6883, + 0x71ec: 0x003a6884, 0x71ed: 0x003a7485, 0x71ee: 0x003a7484, 0x71ef: 0x003a92c6, + 0x71f0: 0x003a92c5, 0x71f1: 0x003a9087, 0x71f2: 0x003a9086, 0x71f3: 0x003a9084, + 0x71f4: 0x003a9085, 0x71f5: 0xe0001732, 0x71f6: 0xe000172f, 0x71f7: 0xe0001738, + 0x71f8: 0xe0001735, 0x71f9: 0xe000173e, 0x71fa: 0xe000173b, 0x71fb: 0xf0001a1a, + 0x71fc: 0xf0001919, 0x71ff: 0xa0000000, + // Block 0x1c8, offset 0x7200 + 0x7200: 0xa0000000, 0x7201: 0xa0000000, 0x7202: 0xa0000000, 0x7203: 0xa0000000, + 0x7204: 0xa0000000, 0x7205: 0xa0000000, 0x7206: 0xa0000000, 0x7207: 0xa0000000, + 0x7208: 0xa0000000, 0x7209: 0x40020020, 0x720a: 0x40020220, 0x720b: 0x40020420, + 0x720c: 0x40020620, 0x720d: 0x40020820, 0x720e: 0xa0000000, 0x720f: 0xa0000000, + 0x7210: 0xa0000000, 0x7211: 0xa0000000, 0x7212: 0xa0000000, 0x7213: 0xa0000000, + 0x7214: 0xa0000000, 0x7215: 0xa0000000, 0x7216: 0xa0000000, 0x7217: 0xa0000000, + 0x7218: 0xa0000000, 0x7219: 0xa0000000, 0x721a: 0xa0000000, 0x721b: 0xa0000000, + 0x721c: 0xa0000000, 0x721d: 0xa0000000, 0x721e: 0xa0000000, 0x721f: 0xa0000000, + 0x7220: 0x40021220, 0x7221: 0x4002ba20, 0x7222: 0x4003e020, 0x7223: 0x4004ea20, + 0x7224: 0x4027de20, 0x7225: 0x4004ec20, 0x7226: 0x4004e620, 0x7227: 0x4003d220, + 0x7228: 0x4003f420, 0x7229: 0x4003f620, 0x722a: 0x4004d820, 0x722b: 0x40093820, + 0x722c: 0x40024020, 0x722d: 0x40021a20, 0x722e: 0x4002e420, 0x722f: 0x4004e220, + 0x7230: 0x4029cc20, 0x7231: 0x4029ce20, 0x7232: 0x4029d020, 0x7233: 0x4029d220, + 0x7234: 0x4029d420, 0x7235: 0x4029d620, 0x7236: 0x4029d820, 0x7237: 0x4029da20, + 0x7238: 0x4029dc20, 0x7239: 0x4029de20, 0x723a: 0x40026c20, 0x723b: 0x40026220, + 0x723c: 0x40094020, 0x723d: 0xc32f0851, 0x723e: 0x40094420, 0x723f: 0x4002c420, + // Block 0x1c9, offset 0x7240 + 0x7240: 0x4004d620, 0x7241: 0x002bde88, 0x7242: 0x002c0a88, 0x7243: 0xc33b0871, + 0x7244: 0x002c6288, 0x7245: 0x002c9888, 0x7246: 0x002d0888, 0x7247: 0xc33f00d1, + 0x7248: 0x002d6888, 0x7249: 0xc3410891, 0x724a: 0x002dcc88, 0x724b: 0x002dfe88, + 0x724c: 0xc0030002, 0x724d: 0x002e8288, 0x724e: 0x002e9e88, 0x724f: 0xc3450071, + 0x7250: 0x002f2c88, 0x7251: 0x002e0083, 0x7252: 0x002f7a88, 0x7253: 0xc3490871, + 0x7254: 0x00302c88, 0x7255: 0xc34d0071, 0x7256: 0x0030be88, 0x7257: 0x0030e288, + 0x7258: 0x002d6a83, 0x7259: 0x00310088, 0x725a: 0x00312a88, 0x725b: 0x4003f820, + 0x725c: 0x4004e420, 0x725d: 0x4003fa20, 0x725e: 0x40062420, 0x725f: 0x40021620, + 0x7260: 0x40061e20, 0x7261: 0x402bde20, 0x7262: 0x402c0a20, 0x7263: 0xc3390871, + 0x7264: 0x402c6220, 0x7265: 0x402c9820, 0x7266: 0x402d0820, 0x7267: 0xc33d00d1, + 0x7268: 0x402d6820, 0x7269: 0x402d9a20, 0x726a: 0x402dcc20, 0x726b: 0x402dfe20, + 0x726c: 0xc0000002, 0x726d: 0x402e8220, 0x726e: 0x402e9e20, 0x726f: 0xc3430071, + 0x7270: 0x402f2c20, 0x7271: 0x402e0020, 0x7272: 0x402f7a20, 0x7273: 0xc3470871, + 0x7274: 0x40302c20, 0x7275: 0xc34b0071, 0x7276: 0x4030be20, 0x7277: 0x4030e220, + 0x7278: 0x402d6a20, 0x7279: 0x40310020, 0x727a: 0x40312a20, 0x727b: 0x4003fc20, + 0x727c: 0x40094820, 0x727d: 0x4003fe20, 0x727e: 0x40094c20, 0x727f: 0xa0000000, + // Block 0x1ca, offset 0x7280 + 0x7280: 0xe00008f5, 0x7281: 0xe00008ef, 0x7282: 0xe0000921, 0x7283: 0xe0000969, + 0x7284: 0xe000095b, 0x7285: 0xe000094d, 0x7286: 0xe00009dd, 0x7287: 0x002c3c83, + 0x7288: 0xe0000ae8, 0x7289: 0xe0000ae2, 0x728a: 0xe0000af4, 0x728b: 0xe0000b20, + 0x728c: 0xe00025a2, 0x728d: 0xe000259f, 0x728e: 0xe00025a8, 0x728f: 0xe00025ae, + 0x7290: 0xe0000ab3, 0x7291: 0xe0000d63, 0x7292: 0xe0000d9a, 0x7293: 0xe0000d94, + 0x7294: 0xe0000da6, 0x7295: 0xe0000de6, 0x7296: 0x002ee483, 0x7297: 0x40093e20, + 0x7298: 0xe0000e12, 0x7299: 0xe0000fe1, 0x729a: 0xe0000fdb, 0x729b: 0xe0000fed, + 0x729c: 0x00306e83, 0x729d: 0xe0001102, 0x729e: 0x00318888, 0x729f: 0xe0000f7b, + 0x72a0: 0xe00008f2, 0x72a1: 0xe00008ec, 0x72a2: 0xe000091e, 0x72a3: 0xe0000966, + 0x72a4: 0xe0000958, 0x72a5: 0xe000094a, 0x72a6: 0xe00009d5, 0x72a7: 0x402c3c20, + 0x72a8: 0xe0000ae5, 0x72a9: 0xe0000adf, 0x72aa: 0xe0000af1, 0x72ab: 0xe0000b1d, + 0x72ac: 0xe0000c28, 0x72ad: 0xe0000c22, 0x72ae: 0xe0000c34, 0x72af: 0xe0000c40, + 0x72b0: 0xe0000aad, 0x72b1: 0xe0000d60, 0x72b2: 0xe0000d97, 0x72b3: 0xe0000d91, + 0x72b4: 0xe0000da3, 0x72b5: 0xe0000de3, 0x72b6: 0x402ee420, 0x72b7: 0x40093c20, + 0x72b8: 0xe0000e0f, 0x72b9: 0xe0000fde, 0x72ba: 0xe0000fd8, 0x72bb: 0xe0000fea, + 0x72bc: 0x40306e20, 0x72bd: 0xe00010ff, 0x72be: 0x40318820, 0x72bf: 0xe0001114, + // Block 0x1cb, offset 0x72c0 + 0x72c0: 0xe0000983, 0x72c1: 0xe0000980, 0x72c2: 0xe00008fb, 0x72c3: 0xe00008f8, + 0x72c4: 0xe000097d, 0x72c5: 0xe000097a, 0x72c6: 0xe0000a38, 0x72c7: 0xe0000a35, + 0x72c8: 0xe0000a3e, 0x72c9: 0xe0000a3b, 0x72ca: 0xe0000a4a, 0x72cb: 0xe0000a47, + 0x72cc: 0xe0000a44, 0x72cd: 0xe0000a41, 0x72ce: 0xe0000a86, 0x72cf: 0xe0000a83, + 0x72d0: 0xe0000aaa, 0x72d1: 0xe0000aa7, 0x72d2: 0xe0000b46, 0x72d3: 0xe0000b43, + 0x72d4: 0xe0000aee, 0x72d5: 0xe0000aeb, 0x72d6: 0xe0000b2c, 0x72d7: 0xe0000b29, + 0x72d8: 0xe0000b40, 0x72d9: 0xe0000b3d, 0x72da: 0xe0000b1a, 0x72db: 0xe0000b17, + 0x72dc: 0xe0000bb8, 0x72dd: 0xe0000bb5, 0x72de: 0x002d2483, 0x72df: 0x402d2420, + 0x72e0: 0xe0000bc4, 0x72e1: 0xe0000bc1, 0x72e2: 0xe0000bca, 0x72e3: 0xe0000bc7, + 0x72e4: 0xe0000bee, 0x72e5: 0xe0000beb, 0x72e6: 0xe0000c1b, 0x72e7: 0xe0000c18, + 0x72e8: 0xe00025b5, 0x72e9: 0xe0000c4e, 0x72ea: 0xe00025bb, 0x72eb: 0xe0000c5d, + 0x72ec: 0xe00025a5, 0x72ed: 0xe0000c2e, 0x72ee: 0xe00025b8, 0x72ef: 0xe0000c57, + 0x72f0: 0x002d9a83, 0x72f1: 0x402d9820, 0x72f2: 0xe00025d4, 0x72f3: 0xf0000404, + 0x72f4: 0xe0000c8a, 0x72f5: 0xe0000c87, 0x72f6: 0xe0000c9f, 0x72f7: 0xe0000c9c, + 0x72f8: 0x402f7220, 0x72f9: 0xe0000ccc, 0x72fa: 0xe0000cc9, 0x72fb: 0xe0000cd8, + 0x72fc: 0xe0000cd5, 0x72fd: 0xe0000cd2, 0x72fe: 0xe0000ccf, 0x72ff: 0xe0000d04, + // Block 0x1cc, offset 0x7300 + 0x7300: 0xe0000cfe, 0x7301: 0xe0000cf8, 0x7302: 0xe0000cf5, 0x7303: 0xe0000d51, + 0x7304: 0xe0000d4e, 0x7305: 0xe0000d6f, 0x7306: 0xe0000d6c, 0x7307: 0xe0000d5d, + 0x7308: 0xe0000d5a, 0x7309: 0xf0000404, 0x730a: 0x002eda88, 0x730b: 0x402eda20, + 0x730c: 0xe0000e2e, 0x730d: 0xe0000e2b, 0x730e: 0xe0000da0, 0x730f: 0xe0000d9d, + 0x7310: 0xe0000de0, 0x7311: 0xe0000ddd, 0x7312: 0xe0000e93, 0x7313: 0xe0000e8f, + 0x7314: 0xe0000eca, 0x7315: 0xe0000ec7, 0x7316: 0xe0000edc, 0x7317: 0xe0000ed9, + 0x7318: 0xe0000ed0, 0x7319: 0xe0000ecd, 0x731a: 0xe0000f1f, 0x731b: 0xe0000f1c, + 0x731c: 0xe0000f2d, 0x731d: 0xe0000f2a, 0x731e: 0x002fe883, 0x731f: 0x402fe820, + 0x7320: 0xe0000f33, 0x7321: 0xe0000f30, 0x7322: 0xe0000f99, 0x7323: 0xe0000f96, + 0x7324: 0xe0000f8a, 0x7325: 0xe0000f87, 0x7326: 0x00303688, 0x7327: 0x40303620, + 0x7328: 0xe000102b, 0x7329: 0xe0001028, 0x732a: 0xe000103f, 0x732b: 0xe000103c, + 0x732c: 0xe0000fe7, 0x732d: 0xe0000fe4, 0x732e: 0xe0000ff9, 0x732f: 0xe0000ff6, + 0x7330: 0xe0001025, 0x7331: 0xe0001022, 0x7332: 0xe0001039, 0x7333: 0xe0001036, + 0x7334: 0xe00010d8, 0x7335: 0xe00010d5, 0x7336: 0xe000110e, 0x7337: 0xe000110b, + 0x7338: 0xe0001117, 0x7339: 0xe000113b, 0x733a: 0xe0001138, 0x733b: 0xe000114d, + 0x733c: 0xe000114a, 0x733d: 0xe0001147, 0x733e: 0xe0001144, 0x733f: 0xe0000f64, + // Block 0x1cd, offset 0x7340 + 0x7340: 0x402c1a20, 0x7341: 0x002c2a88, 0x7342: 0x002c3288, 0x7343: 0x402c3220, + 0x7344: 0x0031c488, 0x7345: 0x4031c420, 0x7346: 0x002efa88, 0x7347: 0x002c4e88, + 0x7348: 0x402c4e20, 0x7349: 0x002c7288, 0x734a: 0x002c7a88, 0x734b: 0x002c8488, + 0x734c: 0x402c8420, 0x734d: 0xe000115c, 0x734e: 0x002cae88, 0x734f: 0x002c9a83, + 0x7350: 0x002cc288, 0x7351: 0x002d1688, 0x7352: 0x402d1620, 0x7353: 0x002d4488, + 0x7354: 0x002d5888, 0x7355: 0x402d7820, 0x7356: 0x002dc288, 0x7357: 0x002db688, + 0x7358: 0x002e0a88, 0x7359: 0x402e0a20, 0x735a: 0x402e3820, 0x735b: 0x402e7220, + 0x735c: 0x0030a088, 0x735d: 0x002eb488, 0x735e: 0x402ebc20, 0x735f: 0x002f1088, + 0x7360: 0xe0000e56, 0x7361: 0xe0000e53, 0x7362: 0x002d6088, 0x7363: 0x402d6020, + 0x7364: 0x002f3e88, 0x7365: 0x402f3e20, 0x7366: 0x002f8288, 0x7367: 0x0031b488, + 0x7368: 0x4031b420, 0x7369: 0x00300888, 0x736a: 0x40301220, 0x736b: 0x40304220, + 0x736c: 0x00304a88, 0x736d: 0x40304a20, 0x736e: 0x00305288, 0x736f: 0xe000105f, + 0x7370: 0xe000105c, 0x7371: 0x0030b488, 0x7372: 0x0030cc88, 0x7373: 0x00311888, + 0x7374: 0x40311820, 0x7375: 0x00313488, 0x7376: 0x40313420, 0x7377: 0x00316488, + 0x7378: 0x00316e88, 0x7379: 0x40316e20, 0x737a: 0x40317820, 0x737b: 0x4031a620, + 0x737c: 0x0031bc88, 0x737d: 0x4031bc20, 0x737e: 0xe0000fc9, 0x737f: 0x40319420, + // Block 0x1ce, offset 0x7380 + 0x7380: 0x40321220, 0x7381: 0x40321a20, 0x7382: 0x40322220, 0x7383: 0x40322a20, + 0x7384: 0xe0000ad5, 0x7385: 0xe0000ad1, 0x7386: 0xe0000acd, 0x7387: 0xf0000a0a, + 0x7388: 0xf000040a, 0x7389: 0xf0000404, 0x738a: 0xf0000a0a, 0x738b: 0xf000040a, + 0x738c: 0xf0000404, 0x738d: 0xe0000947, 0x738e: 0xe0000944, 0x738f: 0xe00025ab, + 0x7390: 0xe0000c3a, 0x7391: 0xe0000dcc, 0x7392: 0xe0000dc9, 0x7393: 0xe0000ff3, + 0x7394: 0xe0000ff0, 0x7395: 0xe0002607, 0x7396: 0xe0002604, 0x7397: 0xe00025f5, + 0x7398: 0xe00025f2, 0x7399: 0xe0002601, 0x739a: 0xe00025fe, 0x739b: 0xe00025fb, + 0x739c: 0xe00025f8, 0x739d: 0x402cae20, 0x739e: 0xe0000962, 0x739f: 0xe000095e, + 0x73a0: 0xe0000976, 0x73a1: 0xe0000972, 0x73a2: 0xe00009f4, 0x73a3: 0xe00009ef, + 0x73a4: 0x002d3a88, 0x73a5: 0x402d3a20, 0x73a6: 0xe0000bbe, 0x73a7: 0xe0000bbb, + 0x73a8: 0xe0000c99, 0x73a9: 0xe0000c96, 0x73aa: 0xe0000e20, 0x73ab: 0xe0000e1d, + 0x73ac: 0xe0000e27, 0x73ad: 0xe0000e23, 0x73ae: 0xe0001162, 0x73af: 0xe000115f, + 0x73b0: 0xe0000c8d, 0x73b1: 0xf0000a0a, 0x73b2: 0xf000040a, 0x73b3: 0xf0000404, + 0x73b4: 0xe0000bac, 0x73b5: 0xe0000ba9, 0x73b6: 0x002d7888, 0x73b7: 0x00319488, + 0x73b8: 0xe0000d57, 0x73b9: 0xe0000d54, 0x73ba: 0xe0000954, 0x73bb: 0xe0000950, + 0x73bc: 0xe00009ea, 0x73bd: 0xe00009e5, 0x73be: 0xe0000e19, 0x73bf: 0xe0000e15, + // Block 0x1cf, offset 0x73c0 + 0x73c0: 0xe000098f, 0x73c1: 0xe000098c, 0x73c2: 0xe0000995, 0x73c3: 0xe0000992, + 0x73c4: 0xe0000b62, 0x73c5: 0xe0000b5f, 0x73c6: 0xe0000b68, 0x73c7: 0xe0000b65, + 0x73c8: 0xe00025c1, 0x73c9: 0xe0000c69, 0x73ca: 0xe00025c4, 0x73cb: 0xe0000c6f, + 0x73cc: 0xe0000e4a, 0x73cd: 0xe0000e47, 0x73ce: 0xe0000e50, 0x73cf: 0xe0000e4d, + 0x73d0: 0xe0000ee8, 0x73d1: 0xe0000ee5, 0x73d2: 0xe0000eee, 0x73d3: 0xe0000eeb, + 0x73d4: 0xe0001053, 0x73d5: 0xe0001050, 0x73d6: 0xe0001059, 0x73d7: 0xe0001056, + 0x73d8: 0xe0000f61, 0x73d9: 0xe0000f5e, 0x73da: 0xe0000fa5, 0x73db: 0xe0000fa2, + 0x73dc: 0x00312288, 0x73dd: 0x40312220, 0x73de: 0xe0000bf4, 0x73df: 0xe0000bf1, + 0x73e0: 0x002ebc88, 0x73e1: 0x402c8c20, 0x73e2: 0x002f2288, 0x73e3: 0x402f2220, + 0x73e4: 0x00314088, 0x73e5: 0x40314020, 0x73e6: 0xe000096f, 0x73e7: 0xe000096c, + 0x73e8: 0xe0000b32, 0x73e9: 0xe0000b2f, 0x73ea: 0xe00025ef, 0x73eb: 0xe00025ec, + 0x73ec: 0xe0000dfd, 0x73ed: 0xe0000df9, 0x73ee: 0xe0000e04, 0x73ef: 0xe0000e01, + 0x73f0: 0xe0000e0b, 0x73f1: 0xe0000e07, 0x73f2: 0xe0001129, 0x73f3: 0xe0001126, + 0x73f4: 0x402e5e20, 0x73f5: 0x402ed020, 0x73f6: 0x40305a20, 0x73f7: 0x402dd420, + 0x73f8: 0xe0000abf, 0x73f9: 0xe0000ec4, 0x73fa: 0x002be888, 0x73fb: 0x002c4488, + 0x73fc: 0x402c4420, 0x73fd: 0x002e3888, 0x73fe: 0x00303e88, 0x73ff: 0x402ffc20, + // Block 0x1d0, offset 0x7400 + 0x7400: 0x40315820, 0x7401: 0x0031d488, 0x7402: 0x4031d420, 0x7403: 0x002c1a88, + 0x7404: 0x00307c88, 0x7405: 0x0030da88, 0x7406: 0x002ca288, 0x7407: 0x402ca220, + 0x7408: 0x002dde88, 0x7409: 0x402dde20, 0x740a: 0x002f6a88, 0x740b: 0x402f6a20, + 0x740c: 0x002f8e88, 0x740d: 0x402f8e20, 0x740e: 0x00311088, 0x740f: 0x40311020, + 0x7410: 0x402bf020, 0x7411: 0x402bf820, 0x7412: 0x402c0220, 0x7413: 0x402c2a20, + 0x7414: 0x402efa20, 0x7415: 0x402c5620, 0x7416: 0x402c7220, 0x7417: 0x402c7a20, + 0x7418: 0x402ccc20, 0x7419: 0x402c9a20, 0x741a: 0x402cd420, 0x741b: 0x402cc220, + 0x741c: 0x402cdc20, 0x741d: 0x402ce820, 0x741e: 0x402cf020, 0x741f: 0x402dee20, + 0x7420: 0x402d4420, 0x7421: 0x402d2a20, 0x7422: 0x402d3220, 0x7423: 0x402d5820, + 0x7424: 0x402d0020, 0x7425: 0x40308820, 0x7426: 0x402d8020, 0x7427: 0x402d8e20, + 0x7428: 0x402db620, 0x7429: 0x402dc220, 0x742a: 0x402daa20, 0x742b: 0x402e4220, + 0x742c: 0x402e4a20, 0x742d: 0x402e5420, 0x742e: 0x402e6820, 0x742f: 0x4030a020, + 0x7430: 0x4030ac20, 0x7431: 0x402e9020, 0x7432: 0x402eb420, 0x7433: 0x402ec820, + 0x7434: 0x402ea620, 0x7435: 0x402f1020, 0x7436: 0x402eee20, 0x7437: 0x402f1a20, + 0x7438: 0x402f4c20, 0x7439: 0x402f9820, 0x743a: 0x402fa220, 0x743b: 0x402fac20, + 0x743c: 0x402fb620, 0x743d: 0x402fbe20, 0x743e: 0x402fc620, 0x743f: 0x402fd020, + // Block 0x1d1, offset 0x7440 + 0x7440: 0xe00009b1, 0x7441: 0xe00009ae, 0x7442: 0xe0000a22, 0x7443: 0xe0000a1f, + 0x7444: 0xe0000a28, 0x7445: 0xe0000a25, 0x7446: 0xe0000a2e, 0x7447: 0xe0000a2b, + 0x7448: 0xe0002590, 0x7449: 0xe000258d, 0x744a: 0xe0000a8c, 0x744b: 0xe0000a89, + 0x744c: 0xe0000a98, 0x744d: 0xe0000a95, 0x744e: 0xe0000aa4, 0x744f: 0xe0000aa1, + 0x7450: 0xe0000a92, 0x7451: 0xe0000a8f, 0x7452: 0xe0000a9e, 0x7453: 0xe0000a9b, + 0x7454: 0xe0000b55, 0x7455: 0xe0000b51, 0x7456: 0xe0000b4d, 0x7457: 0xe0000b49, + 0x7458: 0xe0000b7c, 0x7459: 0xe0000b79, 0x745a: 0xe0000b82, 0x745b: 0xe0000b7f, + 0x745c: 0xe0000b39, 0x745d: 0xe0000b35, 0x745e: 0xe0000b8c, 0x745f: 0xe0000b89, + 0x7460: 0xe0000bd0, 0x7461: 0xe0000bcd, 0x7462: 0xe0000c00, 0x7463: 0xe0000bfd, + 0x7464: 0xe0000c0c, 0x7465: 0xe0000c09, 0x7466: 0xe0000bfa, 0x7467: 0xe0000bf7, + 0x7468: 0xe0000c06, 0x7469: 0xe0000c03, 0x746a: 0xe0000c12, 0x746b: 0xe0000c0f, + 0x746c: 0xe00025ca, 0x746d: 0xe0000c7b, 0x746e: 0xe00025b1, 0x746f: 0xe0000c46, + 0x7470: 0xe0000c93, 0x7471: 0xe0000c90, 0x7472: 0xe0000cab, 0x7473: 0xe0000ca8, + 0x7474: 0xe0000cb1, 0x7475: 0xe0000cae, 0x7476: 0xe0000cde, 0x7477: 0xe0000cdb, + 0x7478: 0xe0000ce5, 0x7479: 0xe0000ce1, 0x747a: 0xe0000cf2, 0x747b: 0xe0000cef, + 0x747c: 0xe0000cec, 0x747d: 0xe0000ce9, 0x747e: 0xe0000d1e, 0x747f: 0xe0000d1b, + // Block 0x1d2, offset 0x7480 + 0x7480: 0xe0000d24, 0x7481: 0xe0000d21, 0x7482: 0xe0000d2a, 0x7483: 0xe0000d27, + 0x7484: 0xe0000d69, 0x7485: 0xe0000d66, 0x7486: 0xe0000d7b, 0x7487: 0xe0000d78, + 0x7488: 0xe0000d87, 0x7489: 0xe0000d84, 0x748a: 0xe0000d81, 0x748b: 0xe0000d7e, + 0x748c: 0xe0000ded, 0x748d: 0xe0000de9, 0x748e: 0xe00025e9, 0x748f: 0xe00025e6, + 0x7490: 0xe0000e3d, 0x7491: 0xe0000e39, 0x7492: 0xe0000e35, 0x7493: 0xe0000e31, + 0x7494: 0xe0000ea7, 0x7495: 0xe0000ea4, 0x7496: 0xe0000ead, 0x7497: 0xe0000eaa, + 0x7498: 0xe0000ed6, 0x7499: 0xe0000ed3, 0x749a: 0xe0000ef4, 0x749b: 0xe0000ef1, + 0x749c: 0xe0000efb, 0x749d: 0xe0000ef7, 0x749e: 0xe0000f02, 0x749f: 0xe0000eff, + 0x74a0: 0xe0000f41, 0x74a1: 0xe0000f3e, 0x74a2: 0xe0000f53, 0x74a3: 0xe0000f50, + 0x74a4: 0xe0000f26, 0x74a5: 0xe0000f22, 0x74a6: 0xe0000f3a, 0x74a7: 0xe0000f36, + 0x74a8: 0xe0000f5a, 0x74a9: 0xe0000f56, 0x74aa: 0xe0000f93, 0x74ab: 0xe0000f90, + 0x74ac: 0xe0000f9f, 0x74ad: 0xe0000f9c, 0x74ae: 0xe0000fb1, 0x74af: 0xe0000fae, + 0x74b0: 0xe0000fab, 0x74b1: 0xe0000fa8, 0x74b2: 0xe0001093, 0x74b3: 0xe0001090, + 0x74b4: 0xe000109f, 0x74b5: 0xe000109c, 0x74b6: 0xe0001099, 0x74b7: 0xe0001096, + 0x74b8: 0xe0001032, 0x74b9: 0xe000102e, 0x74ba: 0xe0002607, 0x74bb: 0xe0002604, + 0x74bc: 0xe00010a9, 0x74bd: 0xe00010a6, 0x74be: 0xe00010af, 0x74bf: 0xe00010ac, + // Block 0x1d3, offset 0x74c0 + 0x74c0: 0xe00010d2, 0x74c1: 0xe00010cf, 0x74c2: 0xe00010cc, 0x74c3: 0xe00010c9, + 0x74c4: 0xe00010e1, 0x74c5: 0xe00010de, 0x74c6: 0xe00010e7, 0x74c7: 0xe00010e4, + 0x74c8: 0xe00010ed, 0x74c9: 0xe00010ea, 0x74ca: 0xe000259c, 0x74cb: 0xe0002599, + 0x74cc: 0xe0002596, 0x74cd: 0xe0002593, 0x74ce: 0xe0001123, 0x74cf: 0xe0001120, + 0x74d0: 0xe0001141, 0x74d1: 0xe000113e, 0x74d2: 0xe0001153, 0x74d3: 0xe0001150, + 0x74d4: 0xe0001159, 0x74d5: 0xe0001156, 0x74d6: 0xe0000c15, 0x74d7: 0xe0000f8d, + 0x74d8: 0xe00010db, 0x74d9: 0xe0001111, 0x74da: 0xf0000404, 0x74db: 0xe0000f70, + 0x74dc: 0x40300420, 0x74dd: 0x40300620, 0x74de: 0xe0000f7f, 0x74df: 0x402c9620, + 0x74e0: 0xe000099b, 0x74e1: 0xe0000998, 0x74e2: 0xe0000989, 0x74e3: 0xe0000986, + 0x74e4: 0xe0000928, 0x74e5: 0xe0000924, 0x74e6: 0xe0000930, 0x74e7: 0xe000092c, + 0x74e8: 0xe0000940, 0x74e9: 0xe000093c, 0x74ea: 0xe0000938, 0x74eb: 0xe0000934, + 0x74ec: 0xe00009aa, 0x74ed: 0xe00009a6, 0x74ee: 0xe0000902, 0x74ef: 0xe00008fe, + 0x74f0: 0xe000090a, 0x74f1: 0xe0000906, 0x74f2: 0xe000091a, 0x74f3: 0xe0000916, + 0x74f4: 0xe0000912, 0x74f5: 0xe000090e, 0x74f6: 0xe00009a2, 0x74f7: 0xe000099e, + 0x74f8: 0xe0000b6e, 0x74f9: 0xe0000b6b, 0x74fa: 0xe0000b5c, 0x74fb: 0xe0000b59, + 0x74fc: 0xe0000b26, 0x74fd: 0xe0000b23, 0x74fe: 0xe0000afb, 0x74ff: 0xe0000af7, + // Block 0x1d4, offset 0x7500 + 0x7500: 0xe0000b03, 0x7501: 0xe0000aff, 0x7502: 0xe0000b13, 0x7503: 0xe0000b0f, + 0x7504: 0xe0000b0b, 0x7505: 0xe0000b07, 0x7506: 0xe0000b75, 0x7507: 0xe0000b71, + 0x7508: 0xe00025be, 0x7509: 0xe0000c63, 0x750a: 0xe00025c7, 0x750b: 0xe0000c75, + 0x750c: 0xe0000e84, 0x750d: 0xe0000e81, 0x750e: 0xe0000e44, 0x750f: 0xe0000e41, + 0x7510: 0xe0000dad, 0x7511: 0xe0000da9, 0x7512: 0xe0000db5, 0x7513: 0xe0000db1, + 0x7514: 0xe0000dc5, 0x7515: 0xe0000dc1, 0x7516: 0xe0000dbd, 0x7517: 0xe0000db9, + 0x7518: 0xe0000e8b, 0x7519: 0xe0000e87, 0x751a: 0xe0000e5d, 0x751b: 0xe0000e59, + 0x751c: 0xe0000e65, 0x751d: 0xe0000e61, 0x751e: 0xe0000e75, 0x751f: 0xe0000e71, + 0x7520: 0xe0000e6d, 0x7521: 0xe0000e69, 0x7522: 0xe0000e7d, 0x7523: 0xe0000e79, + 0x7524: 0xe000108d, 0x7525: 0xe000108a, 0x7526: 0xe000104d, 0x7527: 0xe000104a, + 0x7528: 0xe0001066, 0x7529: 0xe0001062, 0x752a: 0xe000106e, 0x752b: 0xe000106a, + 0x752c: 0xe000107e, 0x752d: 0xe000107a, 0x752e: 0xe0001076, 0x752f: 0xe0001072, + 0x7530: 0xe0001086, 0x7531: 0xe0001082, 0x7532: 0xe0001108, 0x7533: 0xe0001105, + 0x7534: 0xe0001135, 0x7535: 0xe0001132, 0x7536: 0xe000112f, 0x7537: 0xe000112c, + 0x7538: 0xe000111d, 0x7539: 0xe000111a, 0x753a: 0xe0000d0a, 0x753b: 0xe0000d07, + 0x753c: 0x0030d888, 0x753d: 0x4030d820, 0x753e: 0x00312088, 0x753f: 0x40312020, + // Block 0x1d5, offset 0x7540 + 0x7540: 0x00093685, 0x7541: 0x40083620, 0x7542: 0x40083820, 0x7543: 0x40083a20, + 0x7544: 0x40083c20, 0x7545: 0x002c628b, 0x7546: 0x002c6285, 0x7547: 0x002c9885, + 0x7548: 0x002d9a85, 0x7549: 0x002dcc85, 0x754a: 0x40083e20, 0x754b: 0x400a6e20, + 0x754c: 0x40084020, 0x754d: 0xe00009c4, 0x754e: 0x402d1e20, 0x754f: 0x40084220, + 0x7550: 0xe00002cb, 0x7551: 0xe00002d3, 0x7552: 0xe00002b2, 0x7553: 0xe00002bb, + 0x7554: 0xe00003cd, 0x7555: 0xe00002c3, 0x7556: 0xe00003d1, 0x7557: 0xe00004ab, + 0x7558: 0xe0000579, 0x7559: 0xe00002c7, 0x755a: 0xe0000640, 0x755b: 0xe00002cf, + 0x755c: 0xe00004af, 0x755d: 0xe0000644, 0x755e: 0xe0000798, 0x755f: 0xf0001e1e, + 0x7560: 0x002d9a8a, 0x7561: 0xe00025cd, 0x7562: 0xe00025d0, 0x7563: 0xe00025da, + 0x7564: 0x0030be8a, 0x7565: 0xe000260a, 0x7566: 0xe000260d, 0x7567: 0xe00010bb, + 0x7568: 0xe00025e0, 0x7569: 0x0030f68a, 0x756a: 0xe0002614, 0x756b: 0xe000261b, + 0x756c: 0x002e228a, 0x756d: 0x002c3a8a, 0x756e: 0x002c628a, 0x756f: 0x002e828a, + 0x7570: 0x002d9a84, 0x7571: 0xf0001f04, 0x7572: 0xf0000404, 0x7573: 0xf0001f04, + 0x7574: 0x0030be84, 0x7575: 0xf0001f04, 0x7576: 0xf0000404, 0x7577: 0xe00010b6, + 0x7578: 0xe00025dd, 0x7579: 0x0030f684, 0x757a: 0xe0002611, 0x757b: 0xe0002617, + 0x757c: 0x002e2284, 0x757d: 0x002c3a84, 0x757e: 0x002c6284, 0x757f: 0x002e8284, + // Block 0x1d6, offset 0x7580 + 0x7580: 0xe0000024, 0x7581: 0xe0000029, 0x7582: 0xe000002e, 0x7583: 0xe0000033, + 0x7584: 0xe0000038, 0x7585: 0xe000003d, 0x7586: 0xe0000042, 0x7587: 0xe0000047, + 0x7588: 0xf0001f04, 0x7589: 0xf0001f04, 0x758a: 0xf0001f04, 0x758b: 0xf0001f04, + 0x758c: 0xf0001f04, 0x758d: 0xf0001f04, 0x758e: 0xf0001f04, 0x758f: 0xf0001f04, + 0x7590: 0xf0001f04, 0x7591: 0xf0000404, 0x7592: 0xf0000404, 0x7593: 0xf0000404, + 0x7594: 0xf0000404, 0x7595: 0xf0000404, 0x7596: 0xf0000404, 0x7597: 0xf0000404, + 0x7598: 0xf0000404, 0x7599: 0xf0000404, 0x759a: 0xf0000404, 0x759b: 0xf0000404, + 0x759c: 0xf0000404, 0x759d: 0xf0000404, 0x759e: 0xf0000404, 0x759f: 0xf0000404, + 0x75a0: 0xf0000404, 0x75a1: 0xf0000404, 0x75a2: 0xf0000404, 0x75a3: 0xf0000404, + 0x75a4: 0xf0000404, 0x75a5: 0xf0000404, 0x75a6: 0xf0000404, 0x75a7: 0xf0000404, + 0x75a8: 0xf0000404, 0x75a9: 0xf0000404, 0x75aa: 0xf0000404, 0x75ab: 0xf0000404, + 0x75ac: 0xe000257a, 0x75ad: 0xf0000404, 0x75ae: 0xf0000404, 0x75af: 0xf0000404, + 0x75b0: 0xf0000404, 0x75b1: 0xf0000404, 0x75b2: 0xf0000404, 0x75b3: 0xe0002582, + 0x75b4: 0xf0000404, 0x75b5: 0xf0000404, 0x75b6: 0x002bde8c, 0x75b7: 0x002c0a8c, + 0x75b8: 0x002c3a8c, 0x75b9: 0x002c628c, 0x75ba: 0x002c988c, 0x75bb: 0x002d088c, + 0x75bc: 0x002d228c, 0x75bd: 0x002d688c, 0x75be: 0x002d9a8c, 0x75bf: 0x002dcc8c, + // Block 0x1d7, offset 0x75c0 + 0x75c0: 0xe000230b, 0x75c1: 0xe00022f8, 0x75c2: 0xe00022fc, 0x75c3: 0xe0002311, + 0x75c4: 0xe0002316, 0x75c5: 0xe000231d, 0x75c6: 0xe0002321, 0x75c7: 0xe0002325, + 0x75c8: 0xe000232b, 0x75c9: 0xf0001c1c, 0x75ca: 0xe0002330, 0x75cb: 0xe000233c, + 0x75cc: 0xe0002340, 0x75cd: 0xe0002337, 0x75ce: 0xe0002346, 0x75cf: 0xe000234b, + 0x75d0: 0xe000234f, 0x75d1: 0xe0002353, 0x75d2: 0xf0001c1c, 0x75d3: 0xe000235e, + 0x75d4: 0xe0002358, 0x75d5: 0xf0001c1c, 0x75d6: 0xe0002363, 0x75d7: 0xe000236d, + 0x75d8: 0xf0001f04, 0x75d9: 0xf0001f04, 0x75da: 0xf0001f04, 0x75db: 0xf0001f04, + 0x75dc: 0xf0001f04, 0x75dd: 0xf0001f04, 0x75de: 0xf0001f04, 0x75df: 0xf0001f04, + 0x75e0: 0xf0001f04, 0x75e1: 0xf0001f04, 0x75e2: 0xf0000404, 0x75e3: 0xf0000404, + 0x75e4: 0xf0000404, 0x75e5: 0xf0000404, 0x75e6: 0xf0000404, 0x75e7: 0xf0000404, + 0x75e8: 0xf0000404, 0x75e9: 0xf0000404, 0x75ea: 0xf0000404, 0x75eb: 0xf0000404, + 0x75ec: 0xf0000404, 0x75ed: 0xf0000404, 0x75ee: 0xf0000404, 0x75ef: 0xf0000404, + 0x75f0: 0xf0000404, 0x75f1: 0xe0000c1e, 0x75f2: 0xf0001c1c, 0x75f3: 0xf0001d1d, + 0x75f4: 0xe0000a31, 0x75f5: 0xf0001d1c, 0x75f6: 0xf0001c1c, 0x75f7: 0xf0001c1c, + 0x75f8: 0xe0000ac2, 0x75f9: 0xe0000ac6, 0x75fa: 0xe00025d7, 0x75fb: 0xf0001c1c, + 0x75fc: 0xf0001c1c, 0x75fd: 0xf0001c1c, 0x75fe: 0xf0001c1c, 0x75ff: 0xe0002431, + // Block 0x1d8, offset 0x7600 + 0x7600: 0xf0001d1c, 0x7601: 0xf0001d1d, 0x7602: 0xe00009b7, 0x7603: 0xe000258a, + 0x7604: 0xf0001c1c, 0x7605: 0xf0001c1c, 0x7606: 0xe0000a66, 0x7607: 0xe0000a7a, + 0x7608: 0xf0001d1c, 0x7609: 0xf0001c1d, 0x760a: 0xf0001c1c, 0x760b: 0xf0001d1d, + 0x760c: 0xf0001c1c, 0x760d: 0xf0001d1d, 0x760e: 0xf0001d1d, 0x760f: 0xf0001c1c, + 0x7610: 0xf0001c1c, 0x7611: 0xf0001c1c, 0x7612: 0xe0000d0d, 0x7613: 0xe00025e3, + 0x7614: 0xf0001c1c, 0x7615: 0xe0000d3a, 0x7616: 0xe0000d46, 0x7617: 0xf0001d1d, + 0x7618: 0xe0000eb0, 0x7619: 0xe0000eb8, 0x761a: 0xf0001d1d, 0x761b: 0xf0001c1c, + 0x761c: 0xf0001c1d, 0x761d: 0xf0001c1d, 0x761e: 0xe00010b2, 0x761f: 0xe00009c8, + 0x7620: 0xf0001f04, 0x7621: 0xf0001f04, 0x7622: 0xf0001f04, 0x7623: 0xf0001f04, + 0x7624: 0xf0001f04, 0x7625: 0xf0001f04, 0x7626: 0xf0001f04, 0x7627: 0xf0001f04, + 0x7628: 0xf0001f04, 0x7629: 0xf0000404, 0x762a: 0xf0000404, 0x762b: 0xf0000404, + 0x762c: 0xf0000404, 0x762d: 0xf0000404, 0x762e: 0xf0000404, 0x762f: 0xf0000404, + 0x7630: 0xf0000404, 0x7631: 0xf0000404, 0x7632: 0xf0000404, 0x7633: 0xf0000404, + 0x7634: 0xf0000404, 0x7635: 0xf0000404, 0x7636: 0xf0000404, 0x7637: 0xf0000404, + 0x7638: 0xf0000404, 0x7639: 0xf0000404, 0x763a: 0xf0000404, 0x763b: 0xf0000404, + 0x763c: 0xf0000404, 0x763d: 0xf0000404, 0x763e: 0xf0000404, 0x763f: 0xe0000bdf, + // Block 0x1d9, offset 0x7640 + 0x7640: 0xf0001f04, 0x7641: 0xf0001f04, 0x7642: 0xf0001f04, 0x7643: 0xf0001f04, + 0x7644: 0xf0001f04, 0x7645: 0xf0001f04, 0x7646: 0xf0001f04, 0x7647: 0xf0001f04, + 0x7648: 0xf0001f04, 0x7649: 0xf0001f04, 0x764a: 0xf0001f04, + 0x7650: 0xf0000a04, 0x7651: 0xf0000a04, 0x7652: 0xf0000a04, 0x7653: 0xf0000a04, + 0x7654: 0xf0000a04, 0x7655: 0xf0000a04, 0x7656: 0xf0000a04, 0x7657: 0xf0000a04, + 0x7658: 0xe0002576, 0x7659: 0xf0000a04, 0x765a: 0xf0000a04, 0x765b: 0xf0000a04, + 0x765c: 0xf0000a04, 0x765d: 0xf0000a04, 0x765e: 0xf0000a04, 0x765f: 0xf0000a04, + 0x7660: 0xe000257e, 0x7661: 0xf0000a04, 0x7662: 0xf0000a04, 0x7663: 0xf0000a04, + 0x7664: 0xf0000a04, 0x7665: 0xf0000a04, 0x7666: 0xf0000a04, 0x7667: 0xe0002586, + 0x7668: 0xf0000a04, 0x7669: 0xf0000a04, 0x766a: 0xf0000a04, 0x766b: 0x002c3a8c, + 0x766c: 0x002f7a8c, 0x766d: 0xf0000c0c, 0x766e: 0xf0000c0c, + 0x7670: 0x002bde9d, 0x7671: 0x002c0a9d, 0x7672: 0x002c3a9d, 0x7673: 0x002c629d, + 0x7674: 0x002c989d, 0x7675: 0x002d089d, 0x7676: 0x002d229d, 0x7677: 0x002d689d, + 0x7678: 0x002d9a9d, 0x7679: 0x002dcc9d, 0x767a: 0x002dfe9d, 0x767b: 0x002e229d, + 0x767c: 0x002e829d, 0x767d: 0x002e9e9d, 0x767e: 0x002ee29d, 0x767f: 0x002f2c9d, + // Block 0x1da, offset 0x7680 + 0x7680: 0xa0000000, 0x7681: 0xa0000000, 0x7682: 0xa0000000, 0x7683: 0xa0000000, + 0x7684: 0xa0000000, 0x7685: 0xa0000000, 0x7686: 0xa0000000, 0x7687: 0xa0000000, + 0x7688: 0xa0000000, 0x7689: 0x40020020, 0x768a: 0x40020220, 0x768b: 0x40020420, + 0x768c: 0x40020620, 0x768d: 0x40020820, 0x768e: 0xa0000000, 0x768f: 0xa0000000, + 0x7690: 0xa0000000, 0x7691: 0xa0000000, 0x7692: 0xa0000000, 0x7693: 0xa0000000, + 0x7694: 0xa0000000, 0x7695: 0xa0000000, 0x7696: 0xa0000000, 0x7697: 0xa0000000, + 0x7698: 0xa0000000, 0x7699: 0xa0000000, 0x769a: 0xa0000000, 0x769b: 0xa0000000, + 0x769c: 0xa0000000, 0x769d: 0xa0000000, 0x769e: 0xa0000000, 0x769f: 0xa0000000, + 0x76a0: 0x40021220, 0x76a1: 0x4002ba20, 0x76a2: 0x4003e020, 0x76a3: 0x4004ea20, + 0x76a4: 0x4027de20, 0x76a5: 0x4004ec20, 0x76a6: 0x4004e620, 0x76a7: 0x4003d220, + 0x76a8: 0x4003f420, 0x76a9: 0x4003f620, 0x76aa: 0x4004d820, 0x76ab: 0x40093820, + 0x76ac: 0x40024020, 0x76ad: 0x40021a20, 0x76ae: 0x4002e420, 0x76af: 0x4004e220, + 0x76b0: 0x4029cc20, 0x76b1: 0x4029ce20, 0x76b2: 0x4029d020, 0x76b3: 0x4029d220, + 0x76b4: 0x4029d420, 0x76b5: 0x4029d620, 0x76b6: 0x4029d820, 0x76b7: 0x4029da20, + 0x76b8: 0x4029dc20, 0x76b9: 0x4029de20, 0x76ba: 0x40026c20, 0x76bb: 0x40026220, + 0x76bc: 0x40094020, 0x76bd: 0xc32f0851, 0x76be: 0x40094420, 0x76bf: 0x4002c420, + // Block 0x1db, offset 0x76c0 + 0x76c0: 0x4004d620, 0x76c1: 0x002bde88, 0x76c2: 0x002c0a88, 0x76c3: 0x002c3a88, + 0x76c4: 0x002c6288, 0x76c5: 0x002c9888, 0x76c6: 0x002d0888, 0x76c7: 0x002d2288, + 0x76c8: 0x002d6888, 0x76c9: 0x002d9a88, 0x76ca: 0x002dcc88, 0x76cb: 0x002dfe88, + 0x76cc: 0xc3520002, 0x76cd: 0x002e8288, 0x76ce: 0x002e9e88, 0x76cf: 0x002ee288, + 0x76d0: 0x002f2c88, 0x76d1: 0x002f5688, 0x76d2: 0x002f7a88, 0x76d3: 0x002fe688, + 0x76d4: 0x00302c88, 0x76d5: 0x00306c88, 0x76d6: 0x0030be88, 0x76d7: 0x0030e288, + 0x76d8: 0x0030f688, 0x76d9: 0x00310088, 0x76da: 0x00312a88, 0x76db: 0x4003f820, + 0x76dc: 0x4004e420, 0x76dd: 0x4003fa20, 0x76de: 0x40062420, 0x76df: 0x40021620, + 0x76e0: 0x40061e20, 0x76e1: 0x402bde20, 0x76e2: 0x402c0a20, 0x76e3: 0x402c3a20, + 0x76e4: 0x402c6220, 0x76e5: 0x402c9820, 0x76e6: 0x402d0820, 0x76e7: 0x402d2220, + 0x76e8: 0x402d6820, 0x76e9: 0x402d9a20, 0x76ea: 0x402dcc20, 0x76eb: 0x402dfe20, + 0x76ec: 0xc34f0002, 0x76ed: 0x402e8220, 0x76ee: 0x402e9e20, 0x76ef: 0x402ee220, + 0x76f0: 0x402f2c20, 0x76f1: 0x402f5620, 0x76f2: 0x402f7a20, 0x76f3: 0x402fe620, + 0x76f4: 0x40302c20, 0x76f5: 0x40306c20, 0x76f6: 0x4030be20, 0x76f7: 0x4030e220, + 0x76f8: 0x4030f620, 0x76f9: 0x40310020, 0x76fa: 0x40312a20, 0x76fb: 0x4003fc20, + 0x76fc: 0x40094820, 0x76fd: 0x4003fe20, 0x76fe: 0x40094c20, 0x76ff: 0xa0000000, + // Block 0x1dc, offset 0x7700 + 0x7700: 0xe0000983, 0x7701: 0xe0000980, 0x7702: 0xe00008fb, 0x7703: 0xe00008f8, + 0x7704: 0xe000097d, 0x7705: 0xe000097a, 0x7706: 0xe0000a38, 0x7707: 0xe0000a35, + 0x7708: 0xe0000a3e, 0x7709: 0xe0000a3b, 0x770a: 0xe0000a4a, 0x770b: 0xe0000a47, + 0x770c: 0xe0000a44, 0x770d: 0xe0000a41, 0x770e: 0xe0000a86, 0x770f: 0xe0000a83, + 0x7710: 0xe0000aaa, 0x7711: 0xe0000aa7, 0x7712: 0xe0000b46, 0x7713: 0xe0000b43, + 0x7714: 0xe0000aee, 0x7715: 0xe0000aeb, 0x7716: 0xe0000b2c, 0x7717: 0xe0000b29, + 0x7718: 0xe0000b40, 0x7719: 0xe0000b3d, 0x771a: 0xe0000b1a, 0x771b: 0xe0000b17, + 0x771c: 0xe0000bb8, 0x771d: 0xe0000bb5, 0x771e: 0xe0000bb2, 0x771f: 0xe0000baf, + 0x7720: 0xe0000bc4, 0x7721: 0xe0000bc1, 0x7722: 0xe0000bca, 0x7723: 0xe0000bc7, + 0x7724: 0xe0000bee, 0x7725: 0xe0000beb, 0x7726: 0xe0000c1b, 0x7727: 0xe0000c18, + 0x7728: 0xe0000c51, 0x7729: 0xe0000c4e, 0x772a: 0xe0000c60, 0x772b: 0xe0000c5d, + 0x772c: 0xe0000c31, 0x772d: 0xe0000c2e, 0x772e: 0xe0000c5a, 0x772f: 0xe0000c57, + 0x7730: 0xe0000c54, 0x7731: 0x402da220, 0x7732: 0xf0000a0a, 0x7733: 0xf0000404, + 0x7734: 0xe0000c8a, 0x7735: 0xe0000c87, 0x7736: 0xe0000c9f, 0x7737: 0xe0000c9c, + 0x7738: 0x402f7220, 0x7739: 0xe0000ccc, 0x773a: 0xe0000cc9, 0x773b: 0xe0000cd8, + 0x773c: 0xe0000cd5, 0x773d: 0xe0000cd2, 0x773e: 0xe0000ccf, 0x773f: 0x002e2483, + // Block 0x1dd, offset 0x7740 + 0x7740: 0x402e2420, 0x7741: 0xe0000cf8, 0x7742: 0xe0000cf5, 0x7743: 0xe0000d51, + 0x7744: 0xe0000d4e, 0x7745: 0xe0000d6f, 0x7746: 0xe0000d6c, 0x7747: 0xe0000d5d, + 0x7748: 0xe0000d5a, 0x7749: 0xf0000404, 0x774a: 0x002eda88, 0x774b: 0x402eda20, + 0x774c: 0xe0000e2e, 0x774d: 0xe0000e2b, 0x774e: 0xe0000da0, 0x774f: 0xe0000d9d, + 0x7750: 0xe0000de0, 0x7751: 0xe0000ddd, 0x7752: 0xe0000e93, 0x7753: 0xe0000e8f, + 0x7754: 0xe0000eca, 0x7755: 0xe0000ec7, 0x7756: 0xe0000edc, 0x7757: 0xe0000ed9, + 0x7758: 0xe0000ed0, 0x7759: 0xe0000ecd, 0x775a: 0xe0000f1f, 0x775b: 0xe0000f1c, + 0x775c: 0xe0000f2d, 0x775d: 0xe0000f2a, 0x775e: 0xe0000f47, 0x775f: 0xe0000f44, + 0x7760: 0xe0000f33, 0x7761: 0xe0000f30, 0x7762: 0xe0000f99, 0x7763: 0xe0000f96, + 0x7764: 0xe0000f8a, 0x7765: 0xe0000f87, 0x7766: 0x00303688, 0x7767: 0x40303620, + 0x7768: 0xe000102b, 0x7769: 0xe0001028, 0x776a: 0xe000103f, 0x776b: 0xe000103c, + 0x776c: 0xe0000fe7, 0x776d: 0xe0000fe4, 0x776e: 0xe0000ff9, 0x776f: 0xe0000ff6, + 0x7770: 0xe0001025, 0x7771: 0xe0001022, 0x7772: 0xe0001039, 0x7773: 0xe0001036, + 0x7774: 0xe00010d8, 0x7775: 0xe00010d5, 0x7776: 0xe000110e, 0x7777: 0xe000110b, + 0x7778: 0xe0001117, 0x7779: 0xe000113b, 0x777a: 0xe0001138, 0x777b: 0xe000114d, + 0x777c: 0xe000114a, 0x777d: 0xe0001147, 0x777e: 0xe0001144, 0x777f: 0xe0000f64, + // Block 0x1de, offset 0x7780 + 0x7780: 0xa0000000, 0x7781: 0xa0000000, 0x7782: 0xa0000000, 0x7783: 0xa0000000, + 0x7784: 0xa0000000, 0x7785: 0xa0000000, 0x7786: 0xa0000000, 0x7787: 0xa0000000, + 0x7788: 0xa0000000, 0x7789: 0x40020020, 0x778a: 0x40020220, 0x778b: 0x40020420, + 0x778c: 0x40020620, 0x778d: 0x40020820, 0x778e: 0xa0000000, 0x778f: 0xa0000000, + 0x7790: 0xa0000000, 0x7791: 0xa0000000, 0x7792: 0xa0000000, 0x7793: 0xa0000000, + 0x7794: 0xa0000000, 0x7795: 0xa0000000, 0x7796: 0xa0000000, 0x7797: 0xa0000000, + 0x7798: 0xa0000000, 0x7799: 0xa0000000, 0x779a: 0xa0000000, 0x779b: 0xa0000000, + 0x779c: 0xa0000000, 0x779d: 0xa0000000, 0x779e: 0xa0000000, 0x779f: 0xa0000000, + 0x77a0: 0x40021220, 0x77a1: 0x4002ba20, 0x77a2: 0x4003e020, 0x77a3: 0x4004ea20, + 0x77a4: 0x4027de20, 0x77a5: 0x4004ec20, 0x77a6: 0x4004e620, 0x77a7: 0x4003d220, + 0x77a8: 0x4003f420, 0x77a9: 0x4003f620, 0x77aa: 0x4004d820, 0x77ab: 0x40093820, + 0x77ac: 0x40024020, 0x77ad: 0x40021a20, 0x77ae: 0x4002e420, 0x77af: 0x4004e220, + 0x77b0: 0x4029cc20, 0x77b1: 0x4029ce20, 0x77b2: 0x4029d020, 0x77b3: 0x4029d220, + 0x77b4: 0x4029d420, 0x77b5: 0x4029d620, 0x77b6: 0x4029d820, 0x77b7: 0x4029da20, + 0x77b8: 0x4029dc20, 0x77b9: 0x4029de20, 0x77ba: 0x40026c20, 0x77bb: 0x40026220, + 0x77bc: 0x40094020, 0x77bd: 0xc32f0851, 0x77be: 0x40094420, 0x77bf: 0x4002c420, + // Block 0x1df, offset 0x77c0 + 0x77c0: 0x4004d620, 0x77c1: 0xc35708b1, 0x77c2: 0x002c0a88, 0x77c3: 0xc33b08d1, + 0x77c4: 0xc35b08d1, 0x77c5: 0xc36008f1, 0x77c6: 0x002d0888, 0x77c7: 0x002d2288, + 0x77c8: 0x002d6888, 0x77c9: 0xc36508b1, 0x77ca: 0x002dcc88, 0x77cb: 0x002dfe88, + 0x77cc: 0xc0030002, 0x77cd: 0x002e8288, 0x77ce: 0xc36908d1, 0x77cf: 0xc34508b1, + 0x77d0: 0x002f2c88, 0x77d1: 0x002f5688, 0x77d2: 0xc36d08d1, 0x77d3: 0xc34908d1, + 0x77d4: 0xc37108d1, 0x77d5: 0xc3760921, 0x77d6: 0x0030be88, 0x77d7: 0x0030e288, + 0x77d8: 0x0030f688, 0x77d9: 0xc37b08b1, 0x77da: 0xc37f08d1, 0x77db: 0x4003f820, + 0x77dc: 0x4004e420, 0x77dd: 0x4003fa20, 0x77de: 0x40062420, 0x77df: 0x40021620, + 0x77e0: 0x40061e20, 0x77e1: 0xc35508b1, 0x77e2: 0x402c0a20, 0x77e3: 0xc33908d1, + 0x77e4: 0xc35908d1, 0x77e5: 0xc35d08f1, 0x77e6: 0x402d0820, 0x77e7: 0x402d2220, + 0x77e8: 0x402d6820, 0x77e9: 0xc36308b1, 0x77ea: 0x402dcc20, 0x77eb: 0x402dfe20, + 0x77ec: 0xc0000002, 0x77ed: 0x402e8220, 0x77ee: 0xc36708d1, 0x77ef: 0xc34308b1, + 0x77f0: 0x402f2c20, 0x77f1: 0x402f5620, 0x77f2: 0xc36b08d1, 0x77f3: 0xc34708d1, + 0x77f4: 0xc36f08d1, 0x77f5: 0xc3730921, 0x77f6: 0x4030be20, 0x77f7: 0x4030e220, + 0x77f8: 0x4030f620, 0x77f9: 0xc37908b1, 0x77fa: 0xc37d08d1, 0x77fb: 0x4003fc20, + 0x77fc: 0x40094820, 0x77fd: 0x4003fe20, 0x77fe: 0x40094c20, 0x77ff: 0xa0000000, + // Block 0x1e0, offset 0x7800 + 0x7800: 0xe00008f5, 0x7801: 0x002be083, 0x7802: 0xe0000921, 0x7803: 0xe0000969, + 0x7804: 0xe000095b, 0x7805: 0xe000094d, 0x7806: 0xe00009dd, 0x7807: 0xe0000a53, + 0x7808: 0xe0000ae8, 0x7809: 0x002c9a83, 0x780a: 0xe0000af4, 0x780b: 0xe0000b20, + 0x780c: 0xe0000c2b, 0x780d: 0x002d9c83, 0x780e: 0xe0000c37, 0x780f: 0xe0000c43, + 0x7810: 0xe0000ab3, 0x7811: 0xe0000d63, 0x7812: 0xe0000d9a, 0x7813: 0x002ee483, + 0x7814: 0xe0000da6, 0x7815: 0xe0000de6, 0x7816: 0xe0000dd2, 0x7817: 0x40093e20, + 0x7818: 0xe0000e12, 0x7819: 0xe0000fe1, 0x781a: 0x00306e83, 0x781b: 0xe0000fed, + 0x781c: 0xe0000fff, 0x781d: 0x00310283, 0x781e: 0x00318888, 0x781f: 0xe0000f7b, + 0x7820: 0xe00008f2, 0x7821: 0x402be020, 0x7822: 0xe000091e, 0x7823: 0xe0000966, + 0x7824: 0xe0000958, 0x7825: 0xe000094a, 0x7826: 0xe00009d5, 0x7827: 0xe0000a4d, + 0x7828: 0xe0000ae5, 0x7829: 0x402c9a20, 0x782a: 0xe0000af1, 0x782b: 0xe0000b1d, + 0x782c: 0xe0000c28, 0x782d: 0x402d9c20, 0x782e: 0xe0000c34, 0x782f: 0xe0000c40, + 0x7830: 0xe0000aad, 0x7831: 0xe0000d60, 0x7832: 0xe0000d97, 0x7833: 0x402ee420, + 0x7834: 0xe0000da3, 0x7835: 0xe0000de3, 0x7836: 0xe0000dcf, 0x7837: 0x40093c20, + 0x7838: 0xe0000e0f, 0x7839: 0xe0000fde, 0x783a: 0x40306e20, 0x783b: 0xe0000fea, + 0x783c: 0xe0000ffc, 0x783d: 0x40310220, 0x783e: 0x40318820, 0x783f: 0xe0001114, + // Block 0x1e1, offset 0x7840 + 0x7840: 0xe0000983, 0x7841: 0xe0000980, 0x7842: 0xe00008fb, 0x7843: 0xe00008f8, + 0x7844: 0xe000097d, 0x7845: 0xe000097a, 0x7846: 0xe0000a38, 0x7847: 0xe0000a35, + 0x7848: 0xe0000a3e, 0x7849: 0xe0000a3b, 0x784a: 0xe0000a4a, 0x784b: 0xe0000a47, + 0x784c: 0x002c3c83, 0x784d: 0x402c3c20, 0x784e: 0x002c6483, 0x784f: 0x402c6420, + 0x7850: 0xe0000aaa, 0x7851: 0xe0000aa7, 0x7852: 0xe0000b46, 0x7853: 0xe0000b43, + 0x7854: 0xe0000aee, 0x7855: 0xe0000aeb, 0x7856: 0xe0000b2c, 0x7857: 0xe0000b29, + 0x7858: 0xe0000b40, 0x7859: 0xe0000b3d, 0x785a: 0x002c9c83, 0x785b: 0x402c9c20, + 0x785c: 0xe0000bb8, 0x785d: 0xe0000bb5, 0x785e: 0xe0000bb2, 0x785f: 0xe0000baf, + 0x7860: 0xe0000bc4, 0x7861: 0xe0000bc1, 0x7862: 0xe0000bca, 0x7863: 0xe0000bc7, + 0x7864: 0xe0000bee, 0x7865: 0xe0000beb, 0x7866: 0xe0000c1b, 0x7867: 0xe0000c18, + 0x7868: 0xe0000c51, 0x7869: 0xe0000c4e, 0x786a: 0xe0000c60, 0x786b: 0xe0000c5d, + 0x786c: 0xe0000c31, 0x786d: 0xe0000c2e, 0x786e: 0xe0000c5a, 0x786f: 0xe0000c57, + 0x7870: 0xe0000c54, 0x7871: 0x402da220, 0x7872: 0xf0000a0a, 0x7873: 0xf0000404, + 0x7874: 0xe0000c8a, 0x7875: 0xe0000c87, 0x7876: 0xe0000c9f, 0x7877: 0xe0000c9c, + 0x7878: 0x402f7220, 0x7879: 0xe0000ccc, 0x787a: 0xe0000cc9, 0x787b: 0xe0000cd8, + 0x787c: 0xe0000cd5, 0x787d: 0xe0000cd2, 0x787e: 0xe0000ccf, 0x787f: 0xe0000d04, + // Block 0x1e2, offset 0x7880 + 0x7880: 0xe0000cfe, 0x7881: 0xe0000cf8, 0x7882: 0xe0000cf5, 0x7883: 0xe0000d51, + 0x7884: 0xe0000d4e, 0x7885: 0xe0000d6f, 0x7886: 0xe0000d6c, 0x7887: 0x002ea083, + 0x7888: 0x402ea020, 0x7889: 0xf0000404, 0x788a: 0x002eda88, 0x788b: 0x402eda20, + 0x788c: 0xe0000e2e, 0x788d: 0xe0000e2b, 0x788e: 0xe0000da0, 0x788f: 0xe0000d9d, + 0x7890: 0xe0000de0, 0x7891: 0xe0000ddd, 0x7892: 0xe0000e93, 0x7893: 0xe0000e8f, + 0x7894: 0xe0000eca, 0x7895: 0xe0000ec7, 0x7896: 0xe0000edc, 0x7897: 0xe0000ed9, + 0x7898: 0x002f7c83, 0x7899: 0x402f7c20, 0x789a: 0xe0000f1f, 0x789b: 0xe0000f1c, + 0x789c: 0xe0000f2d, 0x789d: 0xe0000f2a, 0x789e: 0xe0000f47, 0x789f: 0xe0000f44, + 0x78a0: 0x002fe883, 0x78a1: 0x402fe820, 0x78a2: 0xe0000f99, 0x78a3: 0xe0000f96, + 0x78a4: 0x00302e83, 0x78a5: 0x40302e20, 0x78a6: 0x00303688, 0x78a7: 0x40303620, + 0x78a8: 0xe000102b, 0x78a9: 0xe0001028, 0x78aa: 0xe000103f, 0x78ab: 0xe000103c, + 0x78ac: 0xe0000fe7, 0x78ad: 0xe0000fe4, 0x78ae: 0x00307083, 0x78af: 0x40307020, + 0x78b0: 0xe0001025, 0x78b1: 0xe0001022, 0x78b2: 0xe0001039, 0x78b3: 0xe0001036, + 0x78b4: 0xe00010d8, 0x78b5: 0xe00010d5, 0x78b6: 0xe000110e, 0x78b7: 0xe000110b, + 0x78b8: 0xe0001117, 0x78b9: 0xe000113b, 0x78ba: 0xe0001138, 0x78bb: 0xe000114d, + 0x78bc: 0xe000114a, 0x78bd: 0x00312c83, 0x78be: 0x40312c20, 0x78bf: 0xe0000f64, + // Block 0x1e3, offset 0x78c0 + 0x78c0: 0x40321220, 0x78c1: 0x40321a20, 0x78c2: 0x40322220, 0x78c3: 0x40322a20, + 0x78c4: 0xe0000ad5, 0x78c5: 0xe0000ad1, 0x78c6: 0xe0000acd, 0x78c7: 0xf0000a0a, + 0x78c8: 0xf000040a, 0x78c9: 0xf0000404, 0x78ca: 0xf0000a0a, 0x78cb: 0xf000040a, + 0x78cc: 0xf0000404, 0x78cd: 0xe0000947, 0x78ce: 0xe0000944, 0x78cf: 0xe0000c3d, + 0x78d0: 0xe0000c3a, 0x78d1: 0xe0000dcc, 0x78d2: 0xe0000dc9, 0x78d3: 0xe0000ff3, + 0x78d4: 0xe0000ff0, 0x78d5: 0xe000101e, 0x78d6: 0xe000101a, 0x78d7: 0xe0002658, + 0x78d8: 0xe0002655, 0x78d9: 0xe0001016, 0x78da: 0xe0001012, 0x78db: 0xe000100e, + 0x78dc: 0xe000100a, 0x78dd: 0x402cae20, 0x78de: 0xe0000962, 0x78df: 0xe000095e, + 0x78e0: 0xe0000976, 0x78e1: 0xe0000972, 0x78e2: 0xe00009f4, 0x78e3: 0xe00009ef, + 0x78e4: 0x002d3a88, 0x78e5: 0x402d3a20, 0x78e6: 0xe0000bbe, 0x78e7: 0xe0000bbb, + 0x78e8: 0xe0000c99, 0x78e9: 0xe0000c96, 0x78ea: 0xe0000e20, 0x78eb: 0xe0000e1d, + 0x78ec: 0xe0000e27, 0x78ed: 0xe0000e23, 0x78ee: 0xe0001162, 0x78ef: 0xe000115f, + 0x78f0: 0xe0000c8d, 0x78f1: 0xf0000a0a, 0x78f2: 0xf000040a, 0x78f3: 0xf0000404, + 0x78f4: 0xe0000bac, 0x78f5: 0xe0000ba9, 0x78f6: 0x002d7888, 0x78f7: 0x00319488, + 0x78f8: 0xe0000d57, 0x78f9: 0xe0000d54, 0x78fa: 0xe000262e, 0x78fb: 0xe000262b, + 0x78fc: 0xe00009ea, 0x78fd: 0xe00009e5, 0x78fe: 0xe0000e19, 0x78ff: 0xe0000e15, + // Block 0x1e4, offset 0x7900 + 0x7900: 0xe00009b1, 0x7901: 0xe00009ae, 0x7902: 0xe0000a22, 0x7903: 0xe0000a1f, + 0x7904: 0xe0000a28, 0x7905: 0xe0000a25, 0x7906: 0xe0000a2e, 0x7907: 0xe0000a2b, + 0x7908: 0xe0000a5a, 0x7909: 0xe0000a56, 0x790a: 0xe0000a8c, 0x790b: 0xe0000a89, + 0x790c: 0xe0000a98, 0x790d: 0xe0000a95, 0x790e: 0xe0000aa4, 0x790f: 0xe0000aa1, + 0x7910: 0xe0000a92, 0x7911: 0xe0000a8f, 0x7912: 0xe0000a9e, 0x7913: 0xe0000a9b, + 0x7914: 0xe0000b55, 0x7915: 0xe0000b51, 0x7916: 0xe000263a, 0x7917: 0xe0002637, + 0x7918: 0xe0000b7c, 0x7919: 0xe0000b79, 0x791a: 0xe0000b82, 0x791b: 0xe0000b7f, + 0x791c: 0xe0000b39, 0x791d: 0xe0000b35, 0x791e: 0xe0000b8c, 0x791f: 0xe0000b89, + 0x7920: 0xe0000bd0, 0x7921: 0xe0000bcd, 0x7922: 0xe0000c00, 0x7923: 0xe0000bfd, + 0x7924: 0xe0000c0c, 0x7925: 0xe0000c09, 0x7926: 0xe0000bfa, 0x7927: 0xe0000bf7, + 0x7928: 0xe0000c06, 0x7929: 0xe0000c03, 0x792a: 0xe0000c12, 0x792b: 0xe0000c0f, + 0x792c: 0xe0000c7e, 0x792d: 0xe0000c7b, 0x792e: 0xe0002640, 0x792f: 0xe000263d, + 0x7930: 0xe0000c93, 0x7931: 0xe0000c90, 0x7932: 0xe0000cab, 0x7933: 0xe0000ca8, + 0x7934: 0xe0000cb1, 0x7935: 0xe0000cae, 0x7936: 0xe0000cde, 0x7937: 0xe0000cdb, + 0x7938: 0xe0000ce5, 0x7939: 0xe0000ce1, 0x793a: 0xe0000cf2, 0x793b: 0xe0000cef, + 0x793c: 0xe0000cec, 0x793d: 0xe0000ce9, 0x793e: 0xe0000d1e, 0x793f: 0xe0000d1b, + // Block 0x1e5, offset 0x7940 + 0x7940: 0xe0000d24, 0x7941: 0xe0000d21, 0x7942: 0xe0000d2a, 0x7943: 0xe0000d27, + 0x7944: 0xe0000d69, 0x7945: 0xe0000d66, 0x7946: 0xe0000d7b, 0x7947: 0xe0000d78, + 0x7948: 0xe0000d87, 0x7949: 0xe0000d84, 0x794a: 0xe0000d81, 0x794b: 0xe0000d7e, + 0x794c: 0xe00025e9, 0x794d: 0xe00025e6, 0x794e: 0xe0000df5, 0x794f: 0xe0000df1, + 0x7950: 0xe0000e3d, 0x7951: 0xe0000e39, 0x7952: 0xe00025ef, 0x7953: 0xe00025ec, + 0x7954: 0xe0000ea7, 0x7955: 0xe0000ea4, 0x7956: 0xe0000ead, 0x7957: 0xe0000eaa, + 0x7958: 0xe0000ed6, 0x7959: 0xe0000ed3, 0x795a: 0xe0000ef4, 0x795b: 0xe0000ef1, + 0x795c: 0xe0000efb, 0x795d: 0xe0000ef7, 0x795e: 0xe0000f02, 0x795f: 0xe0000eff, + 0x7960: 0xe0000f41, 0x7961: 0xe0000f3e, 0x7962: 0xe0000f53, 0x7963: 0xe0000f50, + 0x7964: 0xe0000f26, 0x7965: 0xe0000f22, 0x7966: 0xe0002652, 0x7967: 0xe000264f, + 0x7968: 0xe0000f5a, 0x7969: 0xe0000f56, 0x796a: 0xe0000f93, 0x796b: 0xe0000f90, + 0x796c: 0xe0000f9f, 0x796d: 0xe0000f9c, 0x796e: 0xe0000fb1, 0x796f: 0xe0000fae, + 0x7970: 0xe0000fab, 0x7971: 0xe0000fa8, 0x7972: 0xe0001093, 0x7973: 0xe0001090, + 0x7974: 0xe000109f, 0x7975: 0xe000109c, 0x7976: 0xe0001099, 0x7977: 0xe0001096, + 0x7978: 0xe000265e, 0x7979: 0xe000265b, 0x797a: 0xe0001046, 0x797b: 0xe0001042, + 0x797c: 0xe00010a9, 0x797d: 0xe00010a6, 0x797e: 0xe00010af, 0x797f: 0xe00010ac, + // Block 0x1e6, offset 0x7980 + 0x7980: 0xe00010d2, 0x7981: 0xe00010cf, 0x7982: 0xe00010cc, 0x7983: 0xe00010c9, + 0x7984: 0xe00010e1, 0x7985: 0xe00010de, 0x7986: 0xe00010e7, 0x7987: 0xe00010e4, + 0x7988: 0xe00010ed, 0x7989: 0xe00010ea, 0x798a: 0xe00010fc, 0x798b: 0xe00010f9, + 0x798c: 0xe00010f6, 0x798d: 0xe00010f3, 0x798e: 0xe0001123, 0x798f: 0xe0001120, + 0x7990: 0xe0001141, 0x7991: 0xe000113e, 0x7992: 0xe0001153, 0x7993: 0xe0001150, + 0x7994: 0xe0001159, 0x7995: 0xe0001156, 0x7996: 0xe0000c15, 0x7997: 0xe0000f8d, + 0x7998: 0xe00010db, 0x7999: 0xe0001111, 0x799a: 0xf0000404, 0x799b: 0xe0000f70, + 0x799c: 0x40300420, 0x799d: 0x40300620, 0x799e: 0xe0000f7f, 0x799f: 0x402c9620, + 0x79a0: 0xe000099b, 0x79a1: 0xe0000998, 0x79a2: 0xe0000989, 0x79a3: 0xe0000986, + 0x79a4: 0xe0002628, 0x79a5: 0xe0002625, 0x79a6: 0xe0000930, 0x79a7: 0xe000092c, + 0x79a8: 0xe0000940, 0x79a9: 0xe000093c, 0x79aa: 0xe0000938, 0x79ab: 0xe0000934, + 0x79ac: 0xe00009aa, 0x79ad: 0xe00009a6, 0x79ae: 0xe0002622, 0x79af: 0xe000261f, + 0x79b0: 0xe000090a, 0x79b1: 0xe0000906, 0x79b2: 0xe000091a, 0x79b3: 0xe0000916, + 0x79b4: 0xe0000912, 0x79b5: 0xe000090e, 0x79b6: 0xe00009a2, 0x79b7: 0xe000099e, + 0x79b8: 0xe0000b6e, 0x79b9: 0xe0000b6b, 0x79ba: 0xe0000b5c, 0x79bb: 0xe0000b59, + 0x79bc: 0xe0000b26, 0x79bd: 0xe0000b23, 0x79be: 0xe0002634, 0x79bf: 0xe0002631, + // Block 0x1e7, offset 0x79c0 + 0x79c0: 0xe0000b03, 0x79c1: 0xe0000aff, 0x79c2: 0xe0000b13, 0x79c3: 0xe0000b0f, + 0x79c4: 0xe0000b0b, 0x79c5: 0xe0000b07, 0x79c6: 0xe0000b75, 0x79c7: 0xe0000b71, + 0x79c8: 0xe0000c66, 0x79c9: 0xe0000c63, 0x79ca: 0xe0000c78, 0x79cb: 0xe0000c75, + 0x79cc: 0xe0000e84, 0x79cd: 0xe0000e81, 0x79ce: 0xe0000e44, 0x79cf: 0xe0000e41, + 0x79d0: 0xe0002646, 0x79d1: 0xe0002643, 0x79d2: 0xe0000db5, 0x79d3: 0xe0000db1, + 0x79d4: 0xe0000dc5, 0x79d5: 0xe0000dc1, 0x79d6: 0xe0000dbd, 0x79d7: 0xe0000db9, + 0x79d8: 0xe0000e8b, 0x79d9: 0xe0000e87, 0x79da: 0xe000264c, 0x79db: 0xe0002649, + 0x79dc: 0xe0000e65, 0x79dd: 0xe0000e61, 0x79de: 0xe0000e75, 0x79df: 0xe0000e71, + 0x79e0: 0xe0000e6d, 0x79e1: 0xe0000e69, 0x79e2: 0xe0000e7d, 0x79e3: 0xe0000e79, + 0x79e4: 0xe000108d, 0x79e5: 0xe000108a, 0x79e6: 0xe000104d, 0x79e7: 0xe000104a, + 0x79e8: 0xe0002664, 0x79e9: 0xe0002661, 0x79ea: 0xe000106e, 0x79eb: 0xe000106a, + 0x79ec: 0xe000107e, 0x79ed: 0xe000107a, 0x79ee: 0xe0001076, 0x79ef: 0xe0001072, + 0x79f0: 0xe0001086, 0x79f1: 0xe0001082, 0x79f2: 0xe0001108, 0x79f3: 0xe0001105, + 0x79f4: 0xe0001135, 0x79f5: 0xe0001132, 0x79f6: 0xe000112f, 0x79f7: 0xe000112c, + 0x79f8: 0xe000111d, 0x79f9: 0xe000111a, 0x79fa: 0xe0000d0a, 0x79fb: 0xe0000d07, + 0x79fc: 0x0030d888, 0x79fd: 0x4030d820, 0x79fe: 0x00312088, 0x79ff: 0x40312020, + // Block 0x1e8, offset 0x7a00 + 0x7a00: 0xa0000000, 0x7a01: 0xa0000000, 0x7a02: 0xa0000000, 0x7a03: 0xa0000000, + 0x7a04: 0xa0000000, 0x7a05: 0xa0000000, 0x7a06: 0xa0000000, 0x7a07: 0xa0000000, + 0x7a08: 0xa0000000, 0x7a09: 0x40020020, 0x7a0a: 0x40020220, 0x7a0b: 0x40020420, + 0x7a0c: 0x40020620, 0x7a0d: 0x40020820, 0x7a0e: 0xa0000000, 0x7a0f: 0xa0000000, + 0x7a10: 0xa0000000, 0x7a11: 0xa0000000, 0x7a12: 0xa0000000, 0x7a13: 0xa0000000, + 0x7a14: 0xa0000000, 0x7a15: 0xa0000000, 0x7a16: 0xa0000000, 0x7a17: 0xa0000000, + 0x7a18: 0xa0000000, 0x7a19: 0xa0000000, 0x7a1a: 0xa0000000, 0x7a1b: 0xa0000000, + 0x7a1c: 0xa0000000, 0x7a1d: 0xa0000000, 0x7a1e: 0xa0000000, 0x7a1f: 0xa0000000, + 0x7a20: 0x40021220, 0x7a21: 0x4002ba20, 0x7a22: 0x4003e020, 0x7a23: 0x4004ea20, + 0x7a24: 0x4027de20, 0x7a25: 0x4004ec20, 0x7a26: 0x4004e620, 0x7a27: 0x4003d220, + 0x7a28: 0x4003f420, 0x7a29: 0x4003f620, 0x7a2a: 0x4004d820, 0x7a2b: 0x40093820, + 0x7a2c: 0x40024020, 0x7a2d: 0x40021a20, 0x7a2e: 0x4002e420, 0x7a2f: 0x4004e220, + 0x7a30: 0x4029cc20, 0x7a31: 0x4029ce20, 0x7a32: 0x4029d020, 0x7a33: 0x4029d220, + 0x7a34: 0x4029d420, 0x7a35: 0x4029d620, 0x7a36: 0x4029d820, 0x7a37: 0x4029da20, + 0x7a38: 0x4029dc20, 0x7a39: 0x4029de20, 0x7a3a: 0x40026c20, 0x7a3b: 0x40026220, + 0x7a3c: 0x40094020, 0x7a3d: 0xc32f0851, 0x7a3e: 0x40094420, 0x7a3f: 0x4002c420, + // Block 0x1e9, offset 0x7a40 + 0x7a40: 0x4004d620, 0x7a41: 0xc38b09c3, 0x7a42: 0x002c0a88, 0x7a43: 0x002c3a88, + 0x7a44: 0x002c6288, 0x7a45: 0xc3920a11, 0x7a46: 0x002d0888, 0x7a47: 0x002d2288, + 0x7a48: 0x002d6888, 0x7a49: 0x002d9a88, 0x7a4a: 0x002dcc88, 0x7a4b: 0x002dfe88, + 0x7a4c: 0xc0030002, 0x7a4d: 0x002e8288, 0x7a4e: 0x002e9e88, 0x7a4f: 0xc3970951, + 0x7a50: 0x002f2c88, 0x7a51: 0x002f5688, 0x7a52: 0x002f7a88, 0x7a53: 0x002fe688, + 0x7a54: 0x00302c88, 0x7a55: 0xc3840951, 0x7a56: 0x0030be88, 0x7a57: 0x0030e288, + 0x7a58: 0x0030f688, 0x7a59: 0x00310088, 0x7a5a: 0x00312a88, 0x7a5b: 0x4003f820, + 0x7a5c: 0x4004e420, 0x7a5d: 0x4003fa20, 0x7a5e: 0x40062420, 0x7a5f: 0x40021620, + 0x7a60: 0x40061e20, 0x7a61: 0xc3870982, 0x7a62: 0x402c0a20, 0x7a63: 0x402c3a20, + 0x7a64: 0x402c6220, 0x7a65: 0xc3900a11, 0x7a66: 0x402d0820, 0x7a67: 0x402d2220, + 0x7a68: 0x402d6820, 0x7a69: 0x402d9a20, 0x7a6a: 0x402dcc20, 0x7a6b: 0x402dfe20, + 0x7a6c: 0xc0000002, 0x7a6d: 0x402e8220, 0x7a6e: 0x402e9e20, 0x7a6f: 0xc3940951, + 0x7a70: 0x402f2c20, 0x7a71: 0x402f5620, 0x7a72: 0x402f7a20, 0x7a73: 0x402fe620, + 0x7a74: 0x40302c20, 0x7a75: 0xc3810951, 0x7a76: 0x4030be20, 0x7a77: 0x4030e220, + 0x7a78: 0x4030f620, 0x7a79: 0x40310020, 0x7a7a: 0x40312a20, 0x7a7b: 0x4003fc20, + 0x7a7c: 0x40094820, 0x7a7d: 0x4003fe20, 0x7a7e: 0x40094c20, 0x7a7f: 0xa0000000, + // Block 0x1ea, offset 0x7a80 + 0x7a80: 0xe00008f5, 0x7a81: 0xe00008ef, 0x7a82: 0xe0000921, 0x7a83: 0xe0000969, + 0x7a84: 0x00320ca3, 0x7a85: 0x00321083, 0x7a86: 0x00320c83, 0x7a87: 0xe0000a53, + 0x7a88: 0xe0000ae8, 0x7a89: 0xe0000ae2, 0x7a8a: 0xe0000af4, 0x7a8b: 0xe0000b20, + 0x7a8c: 0xe0000c2b, 0x7a8d: 0xe0000c25, 0x7a8e: 0xe0000c37, 0x7a8f: 0xe0000c43, + 0x7a90: 0x002c62c3, 0x7a91: 0xe0000d63, 0x7a92: 0xe0000d9a, 0x7a93: 0xe0000d94, + 0x7a94: 0xe0000da6, 0x7a95: 0xe0000de6, 0x7a96: 0x00320ea3, 0x7a97: 0x40093e20, + 0x7a98: 0x00320e83, 0x7a99: 0xe0000fe1, 0x7a9a: 0xe0000fdb, 0x7a9b: 0xe0000fed, + 0x7a9c: 0x003100a3, 0x7a9d: 0xe0001102, 0x7a9e: 0xe000266d, 0x7a9f: 0xe0000f7b, + 0x7aa0: 0xe00008f2, 0x7aa1: 0xe00008ec, 0x7aa2: 0xe000091e, 0x7aa3: 0xe0000966, + 0x7aa4: 0x40320c21, 0x7aa5: 0x40321020, 0x7aa6: 0x40320c20, 0x7aa7: 0xe0000a4d, + 0x7aa8: 0xe0000ae5, 0x7aa9: 0xe0000adf, 0x7aaa: 0xe0000af1, 0x7aab: 0xe0000b1d, + 0x7aac: 0xe0000c28, 0x7aad: 0xe0000c22, 0x7aae: 0xe0000c34, 0x7aaf: 0xe0000c40, + 0x7ab0: 0x402c6222, 0x7ab1: 0xe0000d60, 0x7ab2: 0xe0000d97, 0x7ab3: 0xe0000d91, + 0x7ab4: 0xe0000da3, 0x7ab5: 0xe0000de3, 0x7ab6: 0x40320e21, 0x7ab7: 0x40093c20, + 0x7ab8: 0x40320e20, 0x7ab9: 0xe0000fde, 0x7aba: 0xe0000fd8, 0x7abb: 0xe0000fea, + 0x7abc: 0x40310021, 0x7abd: 0xe00010ff, 0x7abe: 0xe000266a, 0x7abf: 0xe0001114, + // Block 0x1eb, offset 0x7ac0 + 0x7ac0: 0xe0000983, 0x7ac1: 0xe0000980, 0x7ac2: 0xe00008fb, 0x7ac3: 0xe00008f8, + 0x7ac4: 0xe000097d, 0x7ac5: 0xe000097a, 0x7ac6: 0xe0000a38, 0x7ac7: 0xe0000a35, + 0x7ac8: 0xe0000a3e, 0x7ac9: 0xe0000a3b, 0x7aca: 0xe0000a4a, 0x7acb: 0xe0000a47, + 0x7acc: 0xe0000a44, 0x7acd: 0xe0000a41, 0x7ace: 0xe0000a86, 0x7acf: 0xe0000a83, + 0x7ad0: 0x002c62a3, 0x7ad1: 0x402c6221, 0x7ad2: 0xe0000b46, 0x7ad3: 0xe0000b43, + 0x7ad4: 0xe0000aee, 0x7ad5: 0xe0000aeb, 0x7ad6: 0xe0000b2c, 0x7ad7: 0xe0000b29, + 0x7ad8: 0x00320cc3, 0x7ad9: 0x40320c22, 0x7ada: 0xe0000b1a, 0x7adb: 0xe0000b17, + 0x7adc: 0xe0000bb8, 0x7add: 0xe0000bb5, 0x7ade: 0xe0000bb2, 0x7adf: 0xe0000baf, + 0x7ae0: 0xe0000bc4, 0x7ae1: 0xe0000bc1, 0x7ae2: 0xe0000bca, 0x7ae3: 0xe0000bc7, + 0x7ae4: 0xe0000bee, 0x7ae5: 0xe0000beb, 0x7ae6: 0xe0000c1b, 0x7ae7: 0xe0000c18, + 0x7ae8: 0xe0000c51, 0x7ae9: 0xe0000c4e, 0x7aea: 0xe0000c60, 0x7aeb: 0xe0000c5d, + 0x7aec: 0xe0000c31, 0x7aed: 0xe0000c2e, 0x7aee: 0xe0000c5a, 0x7aef: 0xe0000c57, + 0x7af0: 0xe0000c54, 0x7af1: 0x402da220, 0x7af2: 0xf0000a0a, 0x7af3: 0xf0000404, + 0x7af4: 0xe0000c8a, 0x7af5: 0xe0000c87, 0x7af6: 0xe0000c9f, 0x7af7: 0xe0000c9c, + 0x7af8: 0x402f7220, 0x7af9: 0xe0000ccc, 0x7afa: 0xe0000cc9, 0x7afb: 0xe0000cd8, + 0x7afc: 0xe0000cd5, 0x7afd: 0xe0000cd2, 0x7afe: 0xe0000ccf, 0x7aff: 0xe0000d04, + // Block 0x1ec, offset 0x7b00 + 0x7b00: 0xe0000cfe, 0x7b01: 0xe0000cf8, 0x7b02: 0xe0000cf5, 0x7b03: 0xe0000d51, + 0x7b04: 0xe0000d4e, 0x7b05: 0xe0000d6f, 0x7b06: 0xe0000d6c, 0x7b07: 0xe0000d5d, + 0x7b08: 0xe0000d5a, 0x7b09: 0xf0000404, 0x7b0a: 0x002eda88, 0x7b0b: 0x402eda20, + 0x7b0c: 0xe0000e2e, 0x7b0d: 0xe0000e2b, 0x7b0e: 0xe0000da0, 0x7b0f: 0xe0000d9d, + 0x7b10: 0x00320ec3, 0x7b11: 0x40320e22, 0x7b12: 0x00320ee3, 0x7b13: 0x40320e23, + 0x7b14: 0xe0000eca, 0x7b15: 0xe0000ec7, 0x7b16: 0xe0000edc, 0x7b17: 0xe0000ed9, + 0x7b18: 0xe0000ed0, 0x7b19: 0xe0000ecd, 0x7b1a: 0xe0000f1f, 0x7b1b: 0xe0000f1c, + 0x7b1c: 0xe0000f2d, 0x7b1d: 0xe0000f2a, 0x7b1e: 0xe0000f47, 0x7b1f: 0xe0000f44, + 0x7b20: 0xe0000f33, 0x7b21: 0xe0000f30, 0x7b22: 0xe0000f99, 0x7b23: 0xe0000f96, + 0x7b24: 0xe0000f8a, 0x7b25: 0xe0000f87, 0x7b26: 0x00303688, 0x7b27: 0x40303620, + 0x7b28: 0xe000102b, 0x7b29: 0xe0001028, 0x7b2a: 0xe000103f, 0x7b2b: 0xe000103c, + 0x7b2c: 0xe0000fe7, 0x7b2d: 0xe0000fe4, 0x7b2e: 0xe0000ff9, 0x7b2f: 0xe0000ff6, + 0x7b30: 0x003100c3, 0x7b31: 0x40310022, 0x7b32: 0xe0001039, 0x7b33: 0xe0001036, + 0x7b34: 0xe00010d8, 0x7b35: 0xe00010d5, 0x7b36: 0xe000110e, 0x7b37: 0xe000110b, + 0x7b38: 0xe0001117, 0x7b39: 0xe000113b, 0x7b3a: 0xe0001138, 0x7b3b: 0xe000114d, + 0x7b3c: 0xe000114a, 0x7b3d: 0xe0001147, 0x7b3e: 0xe0001144, 0x7b3f: 0xe0000f64, + // Block 0x1ed, offset 0x7b40 + 0x7b40: 0x40321220, 0x7b41: 0x40321a20, 0x7b42: 0x40322220, 0x7b43: 0x40322a20, + 0x7b44: 0xe0000ad5, 0x7b45: 0xe0000ad1, 0x7b46: 0xe0000acd, 0x7b47: 0xf0000a0a, + 0x7b48: 0xf000040a, 0x7b49: 0xf0000404, 0x7b4a: 0xf0000a0a, 0x7b4b: 0xf000040a, + 0x7b4c: 0xf0000404, 0x7b4d: 0xe0000947, 0x7b4e: 0xe0000944, 0x7b4f: 0xe0000c3d, + 0x7b50: 0xe0000c3a, 0x7b51: 0xe0000dcc, 0x7b52: 0xe0000dc9, 0x7b53: 0xe0000ff3, + 0x7b54: 0xe0000ff0, 0x7b55: 0xe0002685, 0x7b56: 0xe0002682, 0x7b57: 0xe0002673, + 0x7b58: 0xe0002670, 0x7b59: 0xe000267f, 0x7b5a: 0xe000267c, 0x7b5b: 0xe0002679, + 0x7b5c: 0xe0002676, 0x7b5d: 0x402cae20, 0x7b5e: 0xe0002697, 0x7b5f: 0xe0002694, + 0x7b60: 0xe0000976, 0x7b61: 0xe0000972, 0x7b62: 0xe0002691, 0x7b63: 0xe000268e, + 0x7b64: 0x002d3a88, 0x7b65: 0x402d3a20, 0x7b66: 0xe0000bbe, 0x7b67: 0xe0000bbb, + 0x7b68: 0xe0000c99, 0x7b69: 0xe0000c96, 0x7b6a: 0xe0000e20, 0x7b6b: 0xe0000e1d, + 0x7b6c: 0xe0000e27, 0x7b6d: 0xe0000e23, 0x7b6e: 0xe0001162, 0x7b6f: 0xe000115f, + 0x7b70: 0xe0000c8d, 0x7b71: 0xf0000a0a, 0x7b72: 0xf000040a, 0x7b73: 0xf0000404, + 0x7b74: 0xe0000bac, 0x7b75: 0xe0000ba9, 0x7b76: 0x002d7888, 0x7b77: 0x00319488, + 0x7b78: 0xe0000d57, 0x7b79: 0xe0000d54, 0x7b7a: 0xe00026af, 0x7b7b: 0xe00026ac, + 0x7b7c: 0xe000268b, 0x7b7d: 0xe0002688, 0x7b7e: 0xe000269d, 0x7b7f: 0xe000269a, + // Block 0x1ee, offset 0x7b80 + 0x7b80: 0xe000098f, 0x7b81: 0xe000098c, 0x7b82: 0xe0000995, 0x7b83: 0xe0000992, + 0x7b84: 0xe0000b62, 0x7b85: 0xe0000b5f, 0x7b86: 0xe0000b68, 0x7b87: 0xe0000b65, + 0x7b88: 0xe0000c6c, 0x7b89: 0xe0000c69, 0x7b8a: 0xe0000c72, 0x7b8b: 0xe0000c6f, + 0x7b8c: 0xe0000e4a, 0x7b8d: 0xe0000e47, 0x7b8e: 0xe0000e50, 0x7b8f: 0xe0000e4d, + 0x7b90: 0xe0000ee8, 0x7b91: 0xe0000ee5, 0x7b92: 0xe0000eee, 0x7b93: 0xe0000eeb, + 0x7b94: 0xe0001053, 0x7b95: 0xe0001050, 0x7b96: 0xe0001059, 0x7b97: 0xe0001056, + 0x7b98: 0xe0000f61, 0x7b99: 0xe0000f5e, 0x7b9a: 0xe0000fa5, 0x7b9b: 0xe0000fa2, + 0x7b9c: 0x00312288, 0x7b9d: 0x40312220, 0x7b9e: 0xe0000bf4, 0x7b9f: 0xe0000bf1, + 0x7ba0: 0x002ebc88, 0x7ba1: 0x402c8c20, 0x7ba2: 0x002f2288, 0x7ba3: 0x402f2220, + 0x7ba4: 0x00314088, 0x7ba5: 0x40314020, 0x7ba6: 0xe000096f, 0x7ba7: 0xe000096c, + 0x7ba8: 0xe0000b32, 0x7ba9: 0xe0000b2f, 0x7baa: 0xe00026a9, 0x7bab: 0xe00026a6, + 0x7bac: 0xe0000dfd, 0x7bad: 0xe0000df9, 0x7bae: 0xe0000e04, 0x7baf: 0xe0000e01, + 0x7bb0: 0xe0000e0b, 0x7bb1: 0xe0000e07, 0x7bb2: 0xe0001129, 0x7bb3: 0xe0001126, + 0x7bb4: 0x402e5e20, 0x7bb5: 0x402ed020, 0x7bb6: 0x40305a20, 0x7bb7: 0x402dd420, + 0x7bb8: 0xe0000abf, 0x7bb9: 0xe0000ec4, 0x7bba: 0x002be888, 0x7bbb: 0x002c4488, + 0x7bbc: 0x402c4420, 0x7bbd: 0x002e3888, 0x7bbe: 0x00303e88, 0x7bbf: 0x402ffc20, + // Block 0x1ef, offset 0x7bc0 + 0x7bc0: 0x402c2820, 0x7bc1: 0x402c7020, 0x7bc2: 0x402d1420, 0x7bc3: 0x402d4220, + 0x7bc4: 0x402e0820, 0x7bc5: 0x402e5220, 0x7bc6: 0x402e8e20, 0x7bc7: 0x402ec620, + 0x7bc8: 0x402f3c20, 0x7bc9: 0x402faa20, 0x7bca: 0x402ff220, 0x7bcb: 0x40301020, + 0x7bcc: 0x4030ca20, 0x7bcd: 0x4030fe20, 0x7bce: 0x40313e20, 0x7bcf: 0x402bea20, + 0x7bd0: 0x402c0020, 0x7bd1: 0x402c8220, 0x7bd2: 0x402caa20, 0x7bd3: 0x402cca20, + 0x7bd4: 0x402ce420, 0x7bd5: 0x402cc020, 0x7bd6: 0x402dc020, 0x7bd7: 0x402f0620, + 0x7bd8: 0x40302220, 0x7bd9: 0x40308620, 0x7bda: 0x40317620, 0x7bdb: 0x002c0294, + 0x7bdc: 0x002c3a94, 0x7bdd: 0x002c5694, 0x7bde: 0xe0002667, 0x7bdf: 0x002cdc94, + 0x7be0: 0x002d0894, 0x7be1: 0x002dee94, 0x7be2: 0x002d2a94, 0x7be3: 0x00308894, + 0x7be4: 0x002db694, 0x7be5: 0x002dc294, 0x7be6: 0x002daa94, 0x7be7: 0x002dbe94, + 0x7be8: 0x002de694, 0x7be9: 0x002e5494, 0x7bea: 0x002e5294, 0x7beb: 0x002e2a94, + 0x7bec: 0x002e9094, 0x7bed: 0x0030ac94, 0x7bee: 0x002eb494, 0x7bef: 0x002ec894, + 0x7bf0: 0x002ea694, 0x7bf1: 0x002f1094, 0x7bf2: 0x002f4c94, 0x7bf3: 0x002ff494, + 0x7bf4: 0x00300894, 0x7bf5: 0x00304294, 0x7bf6: 0x00307c94, 0x7bf7: 0x0030b494, + 0x7bf8: 0x00307494, 0x7bf9: 0x0030cc94, 0x7bfa: 0x0030da94, 0x7bfb: 0x00312a94, + 0x7bfc: 0x00314894, 0x7bfd: 0x00315094, 0x7bfe: 0x00316494, 0x7bff: 0x00326a94, + // Block 0x1f0, offset 0x7c00 + 0x7c00: 0xe0000d24, 0x7c01: 0xe0000d21, 0x7c02: 0xe0000d2a, 0x7c03: 0xe0000d27, + 0x7c04: 0xe0000d69, 0x7c05: 0xe0000d66, 0x7c06: 0xe0000d7b, 0x7c07: 0xe0000d78, + 0x7c08: 0xe0000d87, 0x7c09: 0xe0000d84, 0x7c0a: 0xe0000d81, 0x7c0b: 0xe0000d7e, + 0x7c0c: 0xe0000ded, 0x7c0d: 0xe0000de9, 0x7c0e: 0xe00026a3, 0x7c0f: 0xe00026a0, + 0x7c10: 0xe0000e3d, 0x7c11: 0xe0000e39, 0x7c12: 0xe0000e35, 0x7c13: 0xe0000e31, + 0x7c14: 0xe0000ea7, 0x7c15: 0xe0000ea4, 0x7c16: 0xe0000ead, 0x7c17: 0xe0000eaa, + 0x7c18: 0xe0000ed6, 0x7c19: 0xe0000ed3, 0x7c1a: 0xe0000ef4, 0x7c1b: 0xe0000ef1, + 0x7c1c: 0xe0000efb, 0x7c1d: 0xe0000ef7, 0x7c1e: 0xe0000f02, 0x7c1f: 0xe0000eff, + 0x7c20: 0xe0000f41, 0x7c21: 0xe0000f3e, 0x7c22: 0xe0000f53, 0x7c23: 0xe0000f50, + 0x7c24: 0xe0000f26, 0x7c25: 0xe0000f22, 0x7c26: 0xe0000f3a, 0x7c27: 0xe0000f36, + 0x7c28: 0xe0000f5a, 0x7c29: 0xe0000f56, 0x7c2a: 0xe0000f93, 0x7c2b: 0xe0000f90, + 0x7c2c: 0xe0000f9f, 0x7c2d: 0xe0000f9c, 0x7c2e: 0xe0000fb1, 0x7c2f: 0xe0000fae, + 0x7c30: 0xe0000fab, 0x7c31: 0xe0000fa8, 0x7c32: 0xe0001093, 0x7c33: 0xe0001090, + 0x7c34: 0xe000109f, 0x7c35: 0xe000109c, 0x7c36: 0xe0001099, 0x7c37: 0xe0001096, + 0x7c38: 0xe0001032, 0x7c39: 0xe000102e, 0x7c3a: 0xe0002685, 0x7c3b: 0xe0002682, + 0x7c3c: 0xe00010a9, 0x7c3d: 0xe00010a6, 0x7c3e: 0xe00010af, 0x7c3f: 0xe00010ac, + // Block 0x1f1, offset 0x7c40 + 0x7c40: 0xe00009bc, 0x7c41: 0xe00009c0, 0x7c42: 0x002c3a8b, 0x7c43: 0xf0000a04, + 0x7c44: 0x40081c20, 0x7c45: 0xe0000a5e, 0x7c46: 0xe0000a62, 0x7c47: 0x002cc28a, + 0x7c48: 0x40081e20, 0x7c49: 0xf0000a04, 0x7c4a: 0x002d2285, 0x7c4b: 0x002d688b, + 0x7c4c: 0x002d688b, 0x7c4d: 0x002d688b, 0x7c4e: 0x002d6885, 0x7c4f: 0xf0000202, + 0x7c50: 0x002d9a8b, 0x7c51: 0x002d9a8b, 0x7c52: 0x002e228b, 0x7c53: 0x002e2285, + 0x7c54: 0x40082020, 0x7c55: 0x002e9e8b, 0x7c56: 0xf000040a, 0x7c57: 0x40082220, + 0x7c58: 0x40082420, 0x7c59: 0x002f2c8b, 0x7c5a: 0x002f568b, 0x7c5b: 0x002f7a8b, + 0x7c5c: 0x002f7a8b, 0x7c5d: 0x002f7a8b, 0x7c5e: 0x40082620, 0x7c5f: 0x40082820, + 0x7c60: 0xf0001414, 0x7c61: 0xe0000fbd, 0x7c62: 0xf0001414, 0x7c63: 0x40082a20, + 0x7c64: 0x00312a8b, 0x7c65: 0x40082c20, 0x7c66: 0x0032a288, 0x7c67: 0x40082e20, + 0x7c68: 0x00312a8b, 0x7c69: 0x40083020, 0x7c6a: 0x002dfe88, 0x7c6b: 0x00321083, + 0x7c6c: 0x002c0a8b, 0x7c6d: 0x002c3a8b, 0x7c6e: 0x40083220, 0x7c6f: 0x002c9885, + 0x7c70: 0x002c988b, 0x7c71: 0x002d088b, 0x7c72: 0x002d1e88, 0x7c73: 0x002e828b, + 0x7c74: 0x002ee285, 0x7c75: 0x00389084, 0x7c76: 0x00389284, 0x7c77: 0x00389484, + 0x7c78: 0x00389684, 0x7c79: 0x002d9a85, 0x7c7a: 0x40083420, 0x7c7b: 0xe0000b95, + 0x7c7c: 0x00327e85, 0x7c7d: 0x00325685, 0x7c7e: 0x0032568b, 0x7c7f: 0x00327e8b, + // Block 0x1f2, offset 0x7c80 + 0x7c80: 0xa0000000, 0x7c81: 0xa0000000, 0x7c82: 0xa0000000, 0x7c83: 0xa0000000, + 0x7c84: 0xa0000000, 0x7c85: 0xa0000000, 0x7c86: 0xa0000000, 0x7c87: 0xa0000000, + 0x7c88: 0xa0000000, 0x7c89: 0x40020020, 0x7c8a: 0x40020220, 0x7c8b: 0x40020420, + 0x7c8c: 0x40020620, 0x7c8d: 0x40020820, 0x7c8e: 0xa0000000, 0x7c8f: 0xa0000000, + 0x7c90: 0xa0000000, 0x7c91: 0xa0000000, 0x7c92: 0xa0000000, 0x7c93: 0xa0000000, + 0x7c94: 0xa0000000, 0x7c95: 0xa0000000, 0x7c96: 0xa0000000, 0x7c97: 0xa0000000, + 0x7c98: 0xa0000000, 0x7c99: 0xa0000000, 0x7c9a: 0xa0000000, 0x7c9b: 0xa0000000, + 0x7c9c: 0xa0000000, 0x7c9d: 0xa0000000, 0x7c9e: 0xa0000000, 0x7c9f: 0xa0000000, + 0x7ca0: 0x40021220, 0x7ca1: 0x4002ba20, 0x7ca2: 0x4003e020, 0x7ca3: 0x4004ea20, + 0x7ca4: 0x4027de20, 0x7ca5: 0x4004ec20, 0x7ca6: 0x4004e620, 0x7ca7: 0x4003d220, + 0x7ca8: 0x4003f420, 0x7ca9: 0x4003f620, 0x7caa: 0x4004d820, 0x7cab: 0x40093820, + 0x7cac: 0x40024020, 0x7cad: 0x40021a20, 0x7cae: 0x4002e420, 0x7caf: 0x4004e220, + 0x7cb0: 0x4029cc20, 0x7cb1: 0x4029ce20, 0x7cb2: 0x4029d020, 0x7cb3: 0x4029d220, + 0x7cb4: 0x4029d420, 0x7cb5: 0x4029d620, 0x7cb6: 0x4029d820, 0x7cb7: 0x4029da20, + 0x7cb8: 0x4029dc20, 0x7cb9: 0x4029de20, 0x7cba: 0x40026c20, 0x7cbb: 0x40026220, + 0x7cbc: 0x40094020, 0x7cbd: 0xc32f0851, 0x7cbe: 0x40094420, 0x7cbf: 0x4002c420, + // Block 0x1f3, offset 0x7cc0 + 0x7cc0: 0x4004d620, 0x7cc1: 0xc39c0071, 0x7cc2: 0x002c0a88, 0x7cc3: 0x002c3a88, + 0x7cc4: 0x002c6288, 0x7cc5: 0x002c9888, 0x7cc6: 0x002d0888, 0x7cc7: 0x002d2288, + 0x7cc8: 0x002d6888, 0x7cc9: 0x002d9a88, 0x7cca: 0x002dcc88, 0x7ccb: 0x002dfe88, + 0x7ccc: 0xc0030002, 0x7ccd: 0x002e8288, 0x7cce: 0x002e9e88, 0x7ccf: 0xc3a00071, + 0x7cd0: 0x002f2c88, 0x7cd1: 0x002f5688, 0x7cd2: 0x002f7a88, 0x7cd3: 0x002fe688, + 0x7cd4: 0x00302c88, 0x7cd5: 0xc3a40071, 0x7cd6: 0x0030be88, 0x7cd7: 0x0030e288, + 0x7cd8: 0x0030f688, 0x7cd9: 0x00310088, 0x7cda: 0x00312a88, 0x7cdb: 0x4003f820, + 0x7cdc: 0x4004e420, 0x7cdd: 0x4003fa20, 0x7cde: 0x40062420, 0x7cdf: 0x40021620, + 0x7ce0: 0x40061e20, 0x7ce1: 0xc39a0071, 0x7ce2: 0x402c0a20, 0x7ce3: 0x402c3a20, + 0x7ce4: 0x402c6220, 0x7ce5: 0x402c9820, 0x7ce6: 0x402d0820, 0x7ce7: 0x402d2220, + 0x7ce8: 0x402d6820, 0x7ce9: 0x402d9a20, 0x7cea: 0x402dcc20, 0x7ceb: 0x402dfe20, + 0x7cec: 0xc0000002, 0x7ced: 0x402e8220, 0x7cee: 0x402e9e20, 0x7cef: 0xc39e0071, + 0x7cf0: 0x402f2c20, 0x7cf1: 0x402f5620, 0x7cf2: 0x402f7a20, 0x7cf3: 0x402fe620, + 0x7cf4: 0x40302c20, 0x7cf5: 0xc3a20071, 0x7cf6: 0x4030be20, 0x7cf7: 0x4030e220, + 0x7cf8: 0x4030f620, 0x7cf9: 0x40310020, 0x7cfa: 0x40312a20, 0x7cfb: 0x4003fc20, + 0x7cfc: 0x40094820, 0x7cfd: 0x4003fe20, 0x7cfe: 0x40094c20, 0x7cff: 0xa0000000, + // Block 0x1f4, offset 0x7d00 + 0x7d00: 0xe00008f5, 0x7d01: 0xe00008ef, 0x7d02: 0xe0000921, 0x7d03: 0xe0000969, + 0x7d04: 0xe00026b5, 0x7d05: 0xe000094d, 0x7d06: 0xe00009dd, 0x7d07: 0xe0000a53, + 0x7d08: 0xe0000ae8, 0x7d09: 0xe0000ae2, 0x7d0a: 0xe0000af4, 0x7d0b: 0xe0000b20, + 0x7d0c: 0xe0000c2b, 0x7d0d: 0xe0000c25, 0x7d0e: 0xe0000c37, 0x7d0f: 0xe0000c43, + 0x7d10: 0xe0000ab3, 0x7d11: 0xe0000d63, 0x7d12: 0xe0000d9a, 0x7d13: 0xe0000d94, + 0x7d14: 0xe0000da6, 0x7d15: 0xe0000de6, 0x7d16: 0xe00026c3, 0x7d17: 0x40093e20, + 0x7d18: 0xe0000e12, 0x7d19: 0xe0000fe1, 0x7d1a: 0xe0000fdb, 0x7d1b: 0xe0000fed, + 0x7d1c: 0xe00026d9, 0x7d1d: 0xe0001102, 0x7d1e: 0x00318888, 0x7d1f: 0xe0000f7b, + 0x7d20: 0xe00008f2, 0x7d21: 0xe00008ec, 0x7d22: 0xe000091e, 0x7d23: 0xe0000966, + 0x7d24: 0xe00026b2, 0x7d25: 0xe000094a, 0x7d26: 0xe00009d5, 0x7d27: 0xe0000a4d, + 0x7d28: 0xe0000ae5, 0x7d29: 0xe0000adf, 0x7d2a: 0xe0000af1, 0x7d2b: 0xe0000b1d, + 0x7d2c: 0xe0000c28, 0x7d2d: 0xe0000c22, 0x7d2e: 0xe0000c34, 0x7d2f: 0xe0000c40, + 0x7d30: 0xe0000aad, 0x7d31: 0xe0000d60, 0x7d32: 0xe0000d97, 0x7d33: 0xe0000d91, + 0x7d34: 0xe0000da3, 0x7d35: 0xe0000de3, 0x7d36: 0xe00026c0, 0x7d37: 0x40093c20, + 0x7d38: 0xe0000e0f, 0x7d39: 0xe0000fde, 0x7d3a: 0xe0000fd8, 0x7d3b: 0xe0000fea, + 0x7d3c: 0xe00026d6, 0x7d3d: 0xe00010ff, 0x7d3e: 0x40318820, 0x7d3f: 0xe0001114, + // Block 0x1f5, offset 0x7d40 + 0x7d40: 0x40321220, 0x7d41: 0x40321a20, 0x7d42: 0x40322220, 0x7d43: 0x40322a20, + 0x7d44: 0xe0000ad5, 0x7d45: 0xe0000ad1, 0x7d46: 0xe0000acd, 0x7d47: 0xf0000a0a, + 0x7d48: 0xf000040a, 0x7d49: 0xf0000404, 0x7d4a: 0xf0000a0a, 0x7d4b: 0xf000040a, + 0x7d4c: 0xf0000404, 0x7d4d: 0xe0000947, 0x7d4e: 0xe0000944, 0x7d4f: 0xe0000c3d, + 0x7d50: 0xe0000c3a, 0x7d51: 0xe0000dcc, 0x7d52: 0xe0000dc9, 0x7d53: 0xe0000ff3, + 0x7d54: 0xe0000ff0, 0x7d55: 0xe00026f8, 0x7d56: 0xe00026f4, 0x7d57: 0xe00026e0, + 0x7d58: 0xe00026dc, 0x7d59: 0xe00026f0, 0x7d5a: 0xe00026ec, 0x7d5b: 0xe00026e8, + 0x7d5c: 0xe00026e4, 0x7d5d: 0x402cae20, 0x7d5e: 0xe00026bc, 0x7d5f: 0xe00026b8, + 0x7d60: 0xe0000976, 0x7d61: 0xe0000972, 0x7d62: 0xe00009f4, 0x7d63: 0xe00009ef, + 0x7d64: 0x002d3a88, 0x7d65: 0x402d3a20, 0x7d66: 0xe0000bbe, 0x7d67: 0xe0000bbb, + 0x7d68: 0xe0000c99, 0x7d69: 0xe0000c96, 0x7d6a: 0xe0000e20, 0x7d6b: 0xe0000e1d, + 0x7d6c: 0xe0000e27, 0x7d6d: 0xe0000e23, 0x7d6e: 0xe0001162, 0x7d6f: 0xe000115f, + 0x7d70: 0xe0000c8d, 0x7d71: 0xf0000a0a, 0x7d72: 0xf000040a, 0x7d73: 0xf0000404, + 0x7d74: 0xe0000bac, 0x7d75: 0xe0000ba9, 0x7d76: 0x002d7888, 0x7d77: 0x00319488, + 0x7d78: 0xe0000d57, 0x7d79: 0xe0000d54, 0x7d7a: 0xe0000954, 0x7d7b: 0xe0000950, + 0x7d7c: 0xe00009ea, 0x7d7d: 0xe00009e5, 0x7d7e: 0xe0000e19, 0x7d7f: 0xe0000e15, + // Block 0x1f6, offset 0x7d80 + 0x7d80: 0xe000098f, 0x7d81: 0xe000098c, 0x7d82: 0xe0000995, 0x7d83: 0xe0000992, + 0x7d84: 0xe0000b62, 0x7d85: 0xe0000b5f, 0x7d86: 0xe0000b68, 0x7d87: 0xe0000b65, + 0x7d88: 0xe0000c6c, 0x7d89: 0xe0000c69, 0x7d8a: 0xe0000c72, 0x7d8b: 0xe0000c6f, + 0x7d8c: 0xe0000e4a, 0x7d8d: 0xe0000e47, 0x7d8e: 0xe0000e50, 0x7d8f: 0xe0000e4d, + 0x7d90: 0xe0000ee8, 0x7d91: 0xe0000ee5, 0x7d92: 0xe0000eee, 0x7d93: 0xe0000eeb, + 0x7d94: 0xe0001053, 0x7d95: 0xe0001050, 0x7d96: 0xe0001059, 0x7d97: 0xe0001056, + 0x7d98: 0xe0000f61, 0x7d99: 0xe0000f5e, 0x7d9a: 0xe0000fa5, 0x7d9b: 0xe0000fa2, + 0x7d9c: 0x00312288, 0x7d9d: 0x40312220, 0x7d9e: 0xe0000bf4, 0x7d9f: 0xe0000bf1, + 0x7da0: 0x002ebc88, 0x7da1: 0x402c8c20, 0x7da2: 0x002f2288, 0x7da3: 0x402f2220, + 0x7da4: 0x00314088, 0x7da5: 0x40314020, 0x7da6: 0xe000096f, 0x7da7: 0xe000096c, + 0x7da8: 0xe0000b32, 0x7da9: 0xe0000b2f, 0x7daa: 0xe00026d2, 0x7dab: 0xe00026ce, + 0x7dac: 0xe0000dfd, 0x7dad: 0xe0000df9, 0x7dae: 0xe0000e04, 0x7daf: 0xe0000e01, + 0x7db0: 0xe0000e0b, 0x7db1: 0xe0000e07, 0x7db2: 0xe0001129, 0x7db3: 0xe0001126, + 0x7db4: 0x402e5e20, 0x7db5: 0x402ed020, 0x7db6: 0x40305a20, 0x7db7: 0x402dd420, + 0x7db8: 0xe0000abf, 0x7db9: 0xe0000ec4, 0x7dba: 0x002be888, 0x7dbb: 0x002c4488, + 0x7dbc: 0x402c4420, 0x7dbd: 0x002e3888, 0x7dbe: 0x00303e88, 0x7dbf: 0x402ffc20, + // Block 0x1f7, offset 0x7dc0 + 0x7dc0: 0xe0000d24, 0x7dc1: 0xe0000d21, 0x7dc2: 0xe0000d2a, 0x7dc3: 0xe0000d27, + 0x7dc4: 0xe0000d69, 0x7dc5: 0xe0000d66, 0x7dc6: 0xe0000d7b, 0x7dc7: 0xe0000d78, + 0x7dc8: 0xe0000d87, 0x7dc9: 0xe0000d84, 0x7dca: 0xe0000d81, 0x7dcb: 0xe0000d7e, + 0x7dcc: 0xe0000ded, 0x7dcd: 0xe0000de9, 0x7dce: 0xe00026ca, 0x7dcf: 0xe00026c6, + 0x7dd0: 0xe0000e3d, 0x7dd1: 0xe0000e39, 0x7dd2: 0xe0000e35, 0x7dd3: 0xe0000e31, + 0x7dd4: 0xe0000ea7, 0x7dd5: 0xe0000ea4, 0x7dd6: 0xe0000ead, 0x7dd7: 0xe0000eaa, + 0x7dd8: 0xe0000ed6, 0x7dd9: 0xe0000ed3, 0x7dda: 0xe0000ef4, 0x7ddb: 0xe0000ef1, + 0x7ddc: 0xe0000efb, 0x7ddd: 0xe0000ef7, 0x7dde: 0xe0000f02, 0x7ddf: 0xe0000eff, + 0x7de0: 0xe0000f41, 0x7de1: 0xe0000f3e, 0x7de2: 0xe0000f53, 0x7de3: 0xe0000f50, + 0x7de4: 0xe0000f26, 0x7de5: 0xe0000f22, 0x7de6: 0xe0000f3a, 0x7de7: 0xe0000f36, + 0x7de8: 0xe0000f5a, 0x7de9: 0xe0000f56, 0x7dea: 0xe0000f93, 0x7deb: 0xe0000f90, + 0x7dec: 0xe0000f9f, 0x7ded: 0xe0000f9c, 0x7dee: 0xe0000fb1, 0x7def: 0xe0000fae, + 0x7df0: 0xe0000fab, 0x7df1: 0xe0000fa8, 0x7df2: 0xe0001093, 0x7df3: 0xe0001090, + 0x7df4: 0xe000109f, 0x7df5: 0xe000109c, 0x7df6: 0xe0001099, 0x7df7: 0xe0001096, + 0x7df8: 0xe0001032, 0x7df9: 0xe000102e, 0x7dfa: 0xe00026f8, 0x7dfb: 0xe00026f4, + 0x7dfc: 0xe00010a9, 0x7dfd: 0xe00010a6, 0x7dfe: 0xe00010af, 0x7dff: 0xe00010ac, + // Block 0x1f8, offset 0x7e00 + 0x7e00: 0xa0000000, 0x7e01: 0xa0000000, 0x7e02: 0xa0000000, 0x7e03: 0xa0000000, + 0x7e04: 0xa0000000, 0x7e05: 0xa0000000, 0x7e06: 0xa0000000, 0x7e07: 0xa0000000, + 0x7e08: 0xa0000000, 0x7e09: 0x40020020, 0x7e0a: 0x40020220, 0x7e0b: 0x40020420, + 0x7e0c: 0x40020620, 0x7e0d: 0x40020820, 0x7e0e: 0xa0000000, 0x7e0f: 0xa0000000, + 0x7e10: 0xa0000000, 0x7e11: 0xa0000000, 0x7e12: 0xa0000000, 0x7e13: 0xa0000000, + 0x7e14: 0xa0000000, 0x7e15: 0xa0000000, 0x7e16: 0xa0000000, 0x7e17: 0xa0000000, + 0x7e18: 0xa0000000, 0x7e19: 0xa0000000, 0x7e1a: 0xa0000000, 0x7e1b: 0xa0000000, + 0x7e1c: 0xa0000000, 0x7e1d: 0xa0000000, 0x7e1e: 0xa0000000, 0x7e1f: 0xa0000000, + 0x7e20: 0x40021220, 0x7e21: 0x4002ba20, 0x7e22: 0x4003e020, 0x7e23: 0x4004ea20, + 0x7e24: 0x4027de20, 0x7e25: 0x4004ec20, 0x7e26: 0x4004e620, 0x7e27: 0x4003d220, + 0x7e28: 0x4003f420, 0x7e29: 0x4003f620, 0x7e2a: 0x4004d820, 0x7e2b: 0x40093820, + 0x7e2c: 0x40024020, 0x7e2d: 0x40021a20, 0x7e2e: 0x4002e420, 0x7e2f: 0x4004e220, + 0x7e30: 0x4029cc20, 0x7e31: 0x4029ce20, 0x7e32: 0x4029d020, 0x7e33: 0x4029d220, + 0x7e34: 0x4029d420, 0x7e35: 0x4029d620, 0x7e36: 0x4029d820, 0x7e37: 0x4029da20, + 0x7e38: 0x4029dc20, 0x7e39: 0x4029de20, 0x7e3a: 0x40026c20, 0x7e3b: 0x40026220, + 0x7e3c: 0x40094020, 0x7e3d: 0xc32f0851, 0x7e3e: 0x40094420, 0x7e3f: 0x4002c420, + // Block 0x1f9, offset 0x7e40 + 0x7e40: 0x4004d620, 0x7e41: 0x002bde88, 0x7e42: 0x002c0a88, 0x7e43: 0x002c3a88, + 0x7e44: 0x002c6288, 0x7e45: 0x002c9888, 0x7e46: 0x002d0888, 0x7e47: 0x002d2288, + 0x7e48: 0x002d6888, 0x7e49: 0x002d9a88, 0x7e4a: 0x002dcc88, 0x7e4b: 0x002dfe88, + 0x7e4c: 0xc0030002, 0x7e4d: 0x002e8288, 0x7e4e: 0xc3690a31, 0x7e4f: 0x002ee288, + 0x7e50: 0x002f2c88, 0x7e51: 0x002f5688, 0x7e52: 0x002f7a88, 0x7e53: 0x002fe688, + 0x7e54: 0x00302c88, 0x7e55: 0x00306c88, 0x7e56: 0x0030be88, 0x7e57: 0x0030e288, + 0x7e58: 0x0030f688, 0x7e59: 0x00310088, 0x7e5a: 0x00312a88, 0x7e5b: 0x4003f820, + 0x7e5c: 0x4004e420, 0x7e5d: 0x4003fa20, 0x7e5e: 0x40062420, 0x7e5f: 0x40021620, + 0x7e60: 0x40061e20, 0x7e61: 0x402bde20, 0x7e62: 0x402c0a20, 0x7e63: 0x402c3a20, + 0x7e64: 0x402c6220, 0x7e65: 0x402c9820, 0x7e66: 0x402d0820, 0x7e67: 0x402d2220, + 0x7e68: 0x402d6820, 0x7e69: 0x402d9a20, 0x7e6a: 0x402dcc20, 0x7e6b: 0x402dfe20, + 0x7e6c: 0xc0000002, 0x7e6d: 0x402e8220, 0x7e6e: 0xc3670a31, 0x7e6f: 0x402ee220, + 0x7e70: 0x402f2c20, 0x7e71: 0x402f5620, 0x7e72: 0x402f7a20, 0x7e73: 0x402fe620, + 0x7e74: 0x40302c20, 0x7e75: 0x40306c20, 0x7e76: 0x4030be20, 0x7e77: 0x4030e220, + 0x7e78: 0x4030f620, 0x7e79: 0x40310020, 0x7e7a: 0x40312a20, 0x7e7b: 0x4003fc20, + 0x7e7c: 0x40094820, 0x7e7d: 0x4003fe20, 0x7e7e: 0x40094c20, 0x7e7f: 0xa0000000, + // Block 0x1fa, offset 0x7e80 + 0x7e80: 0xe00008f5, 0x7e81: 0xe00008ef, 0x7e82: 0xe0000921, 0x7e83: 0xe0000969, + 0x7e84: 0xe000095b, 0x7e85: 0xe000094d, 0x7e86: 0xe00009dd, 0x7e87: 0xe0000a53, + 0x7e88: 0xe0000ae8, 0x7e89: 0xe0000ae2, 0x7e8a: 0xe0000af4, 0x7e8b: 0xe0000b20, + 0x7e8c: 0xe0000c2b, 0x7e8d: 0xe0000c25, 0x7e8e: 0xe0000c37, 0x7e8f: 0xe0000c43, + 0x7e90: 0xe0000ab3, 0x7e91: 0x002ea083, 0x7e92: 0xe0000d9a, 0x7e93: 0xe0000d94, + 0x7e94: 0xe0000da6, 0x7e95: 0xe0000de6, 0x7e96: 0xe0000dd2, 0x7e97: 0x40093e20, + 0x7e98: 0xe0000e12, 0x7e99: 0xe0000fe1, 0x7e9a: 0xe0000fdb, 0x7e9b: 0xe0000fed, + 0x7e9c: 0xe0000fff, 0x7e9d: 0xe0001102, 0x7e9e: 0x00318888, 0x7e9f: 0xe0000f7b, + 0x7ea0: 0xe00008f2, 0x7ea1: 0xe00008ec, 0x7ea2: 0xe000091e, 0x7ea3: 0xe0000966, + 0x7ea4: 0xe0000958, 0x7ea5: 0xe000094a, 0x7ea6: 0xe00009d5, 0x7ea7: 0xe0000a4d, + 0x7ea8: 0xe0000ae5, 0x7ea9: 0xe0000adf, 0x7eaa: 0xe0000af1, 0x7eab: 0xe0000b1d, + 0x7eac: 0xe0000c28, 0x7ead: 0xe0000c22, 0x7eae: 0xe0000c34, 0x7eaf: 0xe0000c40, + 0x7eb0: 0xe0000aad, 0x7eb1: 0x402ea020, 0x7eb2: 0xe0000d97, 0x7eb3: 0xe0000d91, + 0x7eb4: 0xe0000da3, 0x7eb5: 0xe0000de3, 0x7eb6: 0xe0000dcf, 0x7eb7: 0x40093c20, + 0x7eb8: 0xe0000e0f, 0x7eb9: 0xe0000fde, 0x7eba: 0xe0000fd8, 0x7ebb: 0xe0000fea, + 0x7ebc: 0xe0000ffc, 0x7ebd: 0xe00010ff, 0x7ebe: 0x40318820, 0x7ebf: 0xe0001114, + // Block 0x1fb, offset 0x7ec0 + 0x7ec0: 0xa0000000, 0x7ec1: 0xa0000000, 0x7ec2: 0xa0000000, 0x7ec3: 0xa0000000, + 0x7ec4: 0xa0000000, 0x7ec5: 0xa0000000, 0x7ec6: 0xa0000000, 0x7ec7: 0xa0000000, + 0x7ec8: 0xa0000000, 0x7ec9: 0x40020020, 0x7eca: 0x40020220, 0x7ecb: 0x40020420, + 0x7ecc: 0x40020620, 0x7ecd: 0x40020820, 0x7ece: 0xa0000000, 0x7ecf: 0xa0000000, + 0x7ed0: 0xa0000000, 0x7ed1: 0xa0000000, 0x7ed2: 0xa0000000, 0x7ed3: 0xa0000000, + 0x7ed4: 0xa0000000, 0x7ed5: 0xa0000000, 0x7ed6: 0xa0000000, 0x7ed7: 0xa0000000, + 0x7ed8: 0xa0000000, 0x7ed9: 0xa0000000, 0x7eda: 0xa0000000, 0x7edb: 0xa0000000, + 0x7edc: 0xa0000000, 0x7edd: 0xa0000000, 0x7ede: 0xa0000000, 0x7edf: 0xa0000000, + 0x7ee0: 0x40021220, 0x7ee1: 0x4002ba20, 0x7ee2: 0x4003e020, 0x7ee3: 0x4004ea20, + 0x7ee4: 0x4027de20, 0x7ee5: 0x4004ec20, 0x7ee6: 0x4004e620, 0x7ee7: 0x4003d220, + 0x7ee8: 0x4003f420, 0x7ee9: 0x4003f620, 0x7eea: 0x4004d820, 0x7eeb: 0x40093820, + 0x7eec: 0x40024020, 0x7eed: 0x40021a20, 0x7eee: 0x4002e420, 0x7eef: 0x4004e220, + 0x7ef0: 0x4029cc20, 0x7ef1: 0x4029ce20, 0x7ef2: 0x4029d020, 0x7ef3: 0x4029d220, + 0x7ef4: 0x4029d420, 0x7ef5: 0x4029d620, 0x7ef6: 0x4029d820, 0x7ef7: 0x4029da20, + 0x7ef8: 0x4029dc20, 0x7ef9: 0x4029de20, 0x7efa: 0x40026c20, 0x7efb: 0x40026220, + 0x7efc: 0x40094020, 0x7efd: 0xc32f0851, 0x7efe: 0x40094420, 0x7eff: 0x4002c420, + // Block 0x1fc, offset 0x7f00 + 0x7f00: 0x4004d620, 0x7f01: 0xc3a90a51, 0x7f02: 0x002c0a88, 0x7f03: 0x002c3a88, + 0x7f04: 0x002c6288, 0x7f05: 0x002c9888, 0x7f06: 0x002d0888, 0x7f07: 0x002d2288, + 0x7f08: 0x002d6888, 0x7f09: 0x002d9a88, 0x7f0a: 0x002dcc88, 0x7f0b: 0x002dfe88, + 0x7f0c: 0xc0030002, 0x7f0d: 0x002e8288, 0x7f0e: 0x002e9e88, 0x7f0f: 0xc3b00a81, + 0x7f10: 0x002f2c88, 0x7f11: 0x002f5688, 0x7f12: 0x002f7a88, 0x7f13: 0x002fe688, + 0x7f14: 0x00302c88, 0x7f15: 0xc3840951, 0x7f16: 0x0030be88, 0x7f17: 0x0030bea3, + 0x7f18: 0x0030f688, 0x7f19: 0x00310088, 0x7f1a: 0x00312a88, 0x7f1b: 0x4003f820, + 0x7f1c: 0x4004e420, 0x7f1d: 0x4003fa20, 0x7f1e: 0x40062420, 0x7f1f: 0x40021620, + 0x7f20: 0x40061e20, 0x7f21: 0xc3a60a51, 0x7f22: 0x402c0a20, 0x7f23: 0x402c3a20, + 0x7f24: 0x402c6220, 0x7f25: 0x402c9820, 0x7f26: 0x402d0820, 0x7f27: 0x402d2220, + 0x7f28: 0x402d6820, 0x7f29: 0x402d9a20, 0x7f2a: 0x402dcc20, 0x7f2b: 0x402dfe20, + 0x7f2c: 0xc0000002, 0x7f2d: 0x402e8220, 0x7f2e: 0x402e9e20, 0x7f2f: 0xc3ac0a81, + 0x7f30: 0x402f2c20, 0x7f31: 0x402f5620, 0x7f32: 0x402f7a20, 0x7f33: 0x402fe620, + 0x7f34: 0x40302c20, 0x7f35: 0xc3810951, 0x7f36: 0x4030be20, 0x7f37: 0x4030be21, + 0x7f38: 0x4030f620, 0x7f39: 0x40310020, 0x7f3a: 0x40312a20, 0x7f3b: 0x4003fc20, + 0x7f3c: 0x40094820, 0x7f3d: 0x4003fe20, 0x7f3e: 0x40094c20, 0x7f3f: 0xa0000000, + // Block 0x1fd, offset 0x7f40 + 0x7f40: 0xe00008f5, 0x7f41: 0xe00008ef, 0x7f42: 0xe0000921, 0x7f43: 0xe0000969, + 0x7f44: 0x00320e83, 0x7f45: 0x00320c83, 0x7f46: 0x00320ea3, 0x7f47: 0xe0000a53, + 0x7f48: 0xe0000ae8, 0x7f49: 0xe0000ae2, 0x7f4a: 0xe0000af4, 0x7f4b: 0xe0000b20, + 0x7f4c: 0xe0000c2b, 0x7f4d: 0xe0000c25, 0x7f4e: 0xe0000c37, 0x7f4f: 0xe0000c43, + 0x7f50: 0x002c62a3, 0x7f51: 0xe0000d63, 0x7f52: 0xe0000d9a, 0x7f53: 0xe0000d94, + 0x7f54: 0xe0000da6, 0x7f55: 0x003210e3, 0x7f56: 0x00321083, 0x7f57: 0x40093e20, + 0x7f58: 0x003210a3, 0x7f59: 0xe0000fe1, 0x7f5a: 0xe0000fdb, 0x7f5b: 0xe0000fed, + 0x7f5c: 0x003100a3, 0x7f5d: 0xe0001102, 0x7f5e: 0xe0002716, 0x7f5f: 0xe0000f7b, + 0x7f60: 0xe00008f2, 0x7f61: 0xe00008ec, 0x7f62: 0xe000091e, 0x7f63: 0xe0000966, + 0x7f64: 0x40320e20, 0x7f65: 0x40320c20, 0x7f66: 0x40320e21, 0x7f67: 0xe0000a4d, + 0x7f68: 0xe0000ae5, 0x7f69: 0xe0000adf, 0x7f6a: 0xe0000af1, 0x7f6b: 0xe0000b1d, + 0x7f6c: 0xe0000c28, 0x7f6d: 0xe0000c22, 0x7f6e: 0xe0000c34, 0x7f6f: 0xe0000c40, + 0x7f70: 0x402c6221, 0x7f71: 0xe0000d60, 0x7f72: 0xe0000d97, 0x7f73: 0xe0000d91, + 0x7f74: 0xe0000da3, 0x7f75: 0x40321023, 0x7f76: 0x40321020, 0x7f77: 0x40093c20, + 0x7f78: 0x40321021, 0x7f79: 0xe0000fde, 0x7f7a: 0xe0000fd8, 0x7f7b: 0xe0000fea, + 0x7f7c: 0x40310021, 0x7f7d: 0xe00010ff, 0x7f7e: 0xe0002713, 0x7f7f: 0xe0001114, + // Block 0x1fe, offset 0x7f80 + 0x7f80: 0xe0000983, 0x7f81: 0xe0000980, 0x7f82: 0xe00008fb, 0x7f83: 0xe00008f8, + 0x7f84: 0xe000097d, 0x7f85: 0xe000097a, 0x7f86: 0xe0000a38, 0x7f87: 0xe0000a35, + 0x7f88: 0xe0000a3e, 0x7f89: 0xe0000a3b, 0x7f8a: 0xe0000a4a, 0x7f8b: 0xe0000a47, + 0x7f8c: 0xe0000a44, 0x7f8d: 0xe0000a41, 0x7f8e: 0xe0000a86, 0x7f8f: 0xe0000a83, + 0x7f90: 0x002c62c3, 0x7f91: 0x402c6222, 0x7f92: 0xe0000b46, 0x7f93: 0xe0000b43, + 0x7f94: 0xe0000aee, 0x7f95: 0xe0000aeb, 0x7f96: 0xe0000b2c, 0x7f97: 0xe0000b29, + 0x7f98: 0xe0000b40, 0x7f99: 0xe0000b3d, 0x7f9a: 0xe0000b1a, 0x7f9b: 0xe0000b17, + 0x7f9c: 0xe0000bb8, 0x7f9d: 0xe0000bb5, 0x7f9e: 0xe0000bb2, 0x7f9f: 0xe0000baf, + 0x7fa0: 0xe0000bc4, 0x7fa1: 0xe0000bc1, 0x7fa2: 0xe0000bca, 0x7fa3: 0xe0000bc7, + 0x7fa4: 0xe0000bee, 0x7fa5: 0xe0000beb, 0x7fa6: 0xe0000c1b, 0x7fa7: 0xe0000c18, + 0x7fa8: 0xe0000c51, 0x7fa9: 0xe0000c4e, 0x7faa: 0xe0000c60, 0x7fab: 0xe0000c5d, + 0x7fac: 0xe0000c31, 0x7fad: 0xe0000c2e, 0x7fae: 0xe0000c5a, 0x7faf: 0xe0000c57, + 0x7fb0: 0xe0000c54, 0x7fb1: 0x402da220, 0x7fb2: 0xf0000a0a, 0x7fb3: 0xf0000404, + 0x7fb4: 0xe0000c8a, 0x7fb5: 0xe0000c87, 0x7fb6: 0xe0000c9f, 0x7fb7: 0xe0000c9c, + 0x7fb8: 0x402f7220, 0x7fb9: 0xe0000ccc, 0x7fba: 0xe0000cc9, 0x7fbb: 0xe0000cd8, + 0x7fbc: 0xe0000cd5, 0x7fbd: 0xe0000cd2, 0x7fbe: 0xe0000ccf, 0x7fbf: 0xe0000d04, + // Block 0x1ff, offset 0x7fc0 + 0x7fc0: 0xe0000cfe, 0x7fc1: 0xe0000cf8, 0x7fc2: 0xe0000cf5, 0x7fc3: 0xe0000d51, + 0x7fc4: 0xe0000d4e, 0x7fc5: 0xe0000d6f, 0x7fc6: 0xe0000d6c, 0x7fc7: 0xe0000d5d, + 0x7fc8: 0xe0000d5a, 0x7fc9: 0xf0000404, 0x7fca: 0x002e9ea3, 0x7fcb: 0x402e9e21, + 0x7fcc: 0xe0000e2e, 0x7fcd: 0xe0000e2b, 0x7fce: 0xe0000da0, 0x7fcf: 0xe0000d9d, + 0x7fd0: 0x003210c3, 0x7fd1: 0x40321022, 0x7fd2: 0x00321103, 0x7fd3: 0x40321024, + 0x7fd4: 0xe0000eca, 0x7fd5: 0xe0000ec7, 0x7fd6: 0xe0000edc, 0x7fd7: 0xe0000ed9, + 0x7fd8: 0xe0000ed0, 0x7fd9: 0xe0000ecd, 0x7fda: 0xe0000f1f, 0x7fdb: 0xe0000f1c, + 0x7fdc: 0xe0000f2d, 0x7fdd: 0xe0000f2a, 0x7fde: 0xe0000f47, 0x7fdf: 0xe0000f44, + 0x7fe0: 0xe0000f33, 0x7fe1: 0xe0000f30, 0x7fe2: 0xe0000f99, 0x7fe3: 0xe0000f96, + 0x7fe4: 0xe0000f8a, 0x7fe5: 0xe0000f87, 0x7fe6: 0x00303688, 0x7fe7: 0x40303620, + 0x7fe8: 0xe000102b, 0x7fe9: 0xe0001028, 0x7fea: 0xe000103f, 0x7feb: 0xe000103c, + 0x7fec: 0xe0000fe7, 0x7fed: 0xe0000fe4, 0x7fee: 0xe0000ff9, 0x7fef: 0xe0000ff6, + 0x7ff0: 0x003100c3, 0x7ff1: 0x40310022, 0x7ff2: 0xe0001039, 0x7ff3: 0xe0001036, + 0x7ff4: 0xe0002728, 0x7ff5: 0xe0002725, 0x7ff6: 0xe000110e, 0x7ff7: 0xe000110b, + 0x7ff8: 0xe0001117, 0x7ff9: 0xe000113b, 0x7ffa: 0xe0001138, 0x7ffb: 0xe000114d, + 0x7ffc: 0xe000114a, 0x7ffd: 0xe0001147, 0x7ffe: 0xe0001144, 0x7fff: 0xe0000f64, + // Block 0x200, offset 0x8000 + 0x8000: 0x40321220, 0x8001: 0x40321a20, 0x8002: 0x40322220, 0x8003: 0x40322a20, + 0x8004: 0xe0000ad5, 0x8005: 0xe0000ad1, 0x8006: 0xe0000acd, 0x8007: 0xf0000a0a, + 0x8008: 0xf000040a, 0x8009: 0xf0000404, 0x800a: 0xf0000a0a, 0x800b: 0xf000040a, + 0x800c: 0xf0000404, 0x800d: 0xe0000947, 0x800e: 0xe0000944, 0x800f: 0xe0000c3d, + 0x8010: 0xe0000c3a, 0x8011: 0xe0000dcc, 0x8012: 0xe0000dc9, 0x8013: 0xe0000ff3, + 0x8014: 0xe0000ff0, 0x8015: 0xe0002685, 0x8016: 0xe0002682, 0x8017: 0xe0002673, + 0x8018: 0xe0002670, 0x8019: 0xe000267f, 0x801a: 0xe000267c, 0x801b: 0xe0002679, + 0x801c: 0xe0002676, 0x801d: 0x402cae20, 0x801e: 0xe000274c, 0x801f: 0xe0002749, + 0x8020: 0xe0000976, 0x8021: 0xe0000972, 0x8022: 0xe00026a9, 0x8023: 0xe00026a6, + 0x8024: 0x002d3a88, 0x8025: 0x402d3a20, 0x8026: 0xe0000bbe, 0x8027: 0xe0000bbb, + 0x8028: 0xe0000c99, 0x8029: 0xe0000c96, 0x802a: 0xe0000e20, 0x802b: 0xe0000e1d, + 0x802c: 0xe0000e27, 0x802d: 0xe0000e23, 0x802e: 0xe0001162, 0x802f: 0xe000115f, + 0x8030: 0xe0000c8d, 0x8031: 0xf0000a0a, 0x8032: 0xf000040a, 0x8033: 0xf0000404, + 0x8034: 0xe0000bac, 0x8035: 0xe0000ba9, 0x8036: 0x002d7888, 0x8037: 0x00319488, + 0x8038: 0xe0000d57, 0x8039: 0xe0000d54, 0x803a: 0xe000268b, 0x803b: 0xe0002688, + 0x803c: 0xe0002752, 0x803d: 0xe000274f, 0x803e: 0xe000275e, 0x803f: 0xe000275b, + // Block 0x201, offset 0x8040 + 0x8040: 0xe000098f, 0x8041: 0xe000098c, 0x8042: 0xe0000995, 0x8043: 0xe0000992, + 0x8044: 0xe0000b62, 0x8045: 0xe0000b5f, 0x8046: 0xe0000b68, 0x8047: 0xe0000b65, + 0x8048: 0xe0000c6c, 0x8049: 0xe0000c69, 0x804a: 0xe0000c72, 0x804b: 0xe0000c6f, + 0x804c: 0xe0000e4a, 0x804d: 0xe0000e47, 0x804e: 0xe0000e50, 0x804f: 0xe0000e4d, + 0x8050: 0xe0000ee8, 0x8051: 0xe0000ee5, 0x8052: 0xe0000eee, 0x8053: 0xe0000eeb, + 0x8054: 0xe0001053, 0x8055: 0xe0001050, 0x8056: 0xe0001059, 0x8057: 0xe0001056, + 0x8058: 0xe0000f61, 0x8059: 0xe0000f5e, 0x805a: 0xe0000fa5, 0x805b: 0xe0000fa2, + 0x805c: 0x00312288, 0x805d: 0x40312220, 0x805e: 0xe0000bf4, 0x805f: 0xe0000bf1, + 0x8060: 0x002ebc88, 0x8061: 0x402c8c20, 0x8062: 0x002f2288, 0x8063: 0x402f2220, + 0x8064: 0x00314088, 0x8065: 0x40314020, 0x8066: 0xe000096f, 0x8067: 0xe000096c, + 0x8068: 0xe0000b32, 0x8069: 0xe0000b2f, 0x806a: 0xe0002758, 0x806b: 0xe0002755, + 0x806c: 0xe0002776, 0x806d: 0xe0002773, 0x806e: 0xe0000e04, 0x806f: 0xe0000e01, + 0x8070: 0xe0000e0b, 0x8071: 0xe0000e07, 0x8072: 0xe0001129, 0x8073: 0xe0001126, + 0x8074: 0x402e5e20, 0x8075: 0x402ed020, 0x8076: 0x40305a20, 0x8077: 0x402dd420, + 0x8078: 0xe0000abf, 0x8079: 0xe0000ec4, 0x807a: 0x002be888, 0x807b: 0x002c4488, + 0x807c: 0x402c4420, 0x807d: 0x002e3888, 0x807e: 0x00303e88, 0x807f: 0x402ffc20, + // Block 0x202, offset 0x8080 + 0x8080: 0xe0000d24, 0x8081: 0xe0000d21, 0x8082: 0xe0000d2a, 0x8083: 0xe0000d27, + 0x8084: 0xe0000d69, 0x8085: 0xe0000d66, 0x8086: 0xe0000d7b, 0x8087: 0xe0000d78, + 0x8088: 0xe0000d87, 0x8089: 0xe0000d84, 0x808a: 0xe0000d81, 0x808b: 0xe0000d7e, + 0x808c: 0xe0002764, 0x808d: 0xe0002761, 0x808e: 0xe0002770, 0x808f: 0xe000276d, + 0x8090: 0xe0000e3d, 0x8091: 0xe0000e39, 0x8092: 0xe0000e35, 0x8093: 0xe0000e31, + 0x8094: 0xe0000ea7, 0x8095: 0xe0000ea4, 0x8096: 0xe0000ead, 0x8097: 0xe0000eaa, + 0x8098: 0xe0000ed6, 0x8099: 0xe0000ed3, 0x809a: 0xe0000ef4, 0x809b: 0xe0000ef1, + 0x809c: 0xe0000efb, 0x809d: 0xe0000ef7, 0x809e: 0xe0000f02, 0x809f: 0xe0000eff, + 0x80a0: 0xe0000f41, 0x80a1: 0xe0000f3e, 0x80a2: 0xe0000f53, 0x80a3: 0xe0000f50, + 0x80a4: 0xe0000f26, 0x80a5: 0xe0000f22, 0x80a6: 0xe0000f3a, 0x80a7: 0xe0000f36, + 0x80a8: 0xe0000f5a, 0x80a9: 0xe0000f56, 0x80aa: 0xe0000f93, 0x80ab: 0xe0000f90, + 0x80ac: 0xe0000f9f, 0x80ad: 0xe0000f9c, 0x80ae: 0xe0000fb1, 0x80af: 0xe0000fae, + 0x80b0: 0xe0000fab, 0x80b1: 0xe0000fa8, 0x80b2: 0xe0001093, 0x80b3: 0xe0001090, + 0x80b4: 0xe000109f, 0x80b5: 0xe000109c, 0x80b6: 0xe0001099, 0x80b7: 0xe0001096, + 0x80b8: 0xe0001032, 0x80b9: 0xe000102e, 0x80ba: 0xe0002685, 0x80bb: 0xe0002682, + 0x80bc: 0xe00010a9, 0x80bd: 0xe00010a6, 0x80be: 0xe00010af, 0x80bf: 0xe00010ac, + // Block 0x203, offset 0x80c0 + 0x80c0: 0xe0002722, 0x80c1: 0xe000271f, 0x80c2: 0xe000271c, 0x80c3: 0xe0002719, + 0x80c4: 0xe0002731, 0x80c5: 0xe000272e, 0x80c6: 0xe0002737, 0x80c7: 0xe0002734, + 0x80c8: 0xe000273d, 0x80c9: 0xe000273a, 0x80ca: 0xe00010fc, 0x80cb: 0xe00010f9, + 0x80cc: 0xe00010f6, 0x80cd: 0xe00010f3, 0x80ce: 0xe0001123, 0x80cf: 0xe0001120, + 0x80d0: 0xe0001141, 0x80d1: 0xe000113e, 0x80d2: 0xe0001153, 0x80d3: 0xe0001150, + 0x80d4: 0xe0001159, 0x80d5: 0xe0001156, 0x80d6: 0xe0000c15, 0x80d7: 0xe0000f8d, + 0x80d8: 0xe000272b, 0x80d9: 0xe0001111, 0x80da: 0xf0000404, 0x80db: 0xe0000f70, + 0x80dc: 0x40300420, 0x80dd: 0x40300620, 0x80de: 0xe0000f7f, 0x80df: 0x402c9620, + 0x80e0: 0xe000099b, 0x80e1: 0xe0000998, 0x80e2: 0xe0000989, 0x80e3: 0xe0000986, + 0x80e4: 0xe0000928, 0x80e5: 0xe0000924, 0x80e6: 0xe0000930, 0x80e7: 0xe000092c, + 0x80e8: 0xe0000940, 0x80e9: 0xe000093c, 0x80ea: 0xe0000938, 0x80eb: 0xe0000934, + 0x80ec: 0xe00009aa, 0x80ed: 0xe00009a6, 0x80ee: 0xe0000902, 0x80ef: 0xe00008fe, + 0x80f0: 0xe000090a, 0x80f1: 0xe0000906, 0x80f2: 0xe000091a, 0x80f3: 0xe0000916, + 0x80f4: 0xe0000912, 0x80f5: 0xe000090e, 0x80f6: 0xe00009a2, 0x80f7: 0xe000099e, + 0x80f8: 0xe0000b6e, 0x80f9: 0xe0000b6b, 0x80fa: 0xe0000b5c, 0x80fb: 0xe0000b59, + 0x80fc: 0xe0000b26, 0x80fd: 0xe0000b23, 0x80fe: 0xe0000afb, 0x80ff: 0xe0000af7, + // Block 0x204, offset 0x8100 + 0x8100: 0xe0000b03, 0x8101: 0xe0000aff, 0x8102: 0xe0000b13, 0x8103: 0xe0000b0f, + 0x8104: 0xe0000b0b, 0x8105: 0xe0000b07, 0x8106: 0xe0000b75, 0x8107: 0xe0000b71, + 0x8108: 0xe0000c66, 0x8109: 0xe0000c63, 0x810a: 0xe0000c78, 0x810b: 0xe0000c75, + 0x810c: 0xe0000e84, 0x810d: 0xe0000e81, 0x810e: 0xe0000e44, 0x810f: 0xe0000e41, + 0x8110: 0xe0000dad, 0x8111: 0xe0000da9, 0x8112: 0xe0000db5, 0x8113: 0xe0000db1, + 0x8114: 0xe0000dc5, 0x8115: 0xe0000dc1, 0x8116: 0xe000276a, 0x8117: 0xe0002767, + 0x8118: 0xe0000e8b, 0x8119: 0xe0000e87, 0x811a: 0xe0000e5d, 0x811b: 0xe0000e59, + 0x811c: 0xe0000e65, 0x811d: 0xe0000e61, 0x811e: 0xe0000e75, 0x811f: 0xe0000e71, + 0x8120: 0xe000277c, 0x8121: 0xe0002779, 0x8122: 0xe0000e7d, 0x8123: 0xe0000e79, + 0x8124: 0xe000108d, 0x8125: 0xe000108a, 0x8126: 0xe000104d, 0x8127: 0xe000104a, + 0x8128: 0xe0001066, 0x8129: 0xe0001062, 0x812a: 0xe000106e, 0x812b: 0xe000106a, + 0x812c: 0xe000107e, 0x812d: 0xe000107a, 0x812e: 0xe0001076, 0x812f: 0xe0001072, + 0x8130: 0xe0001086, 0x8131: 0xe0001082, 0x8132: 0xe0001108, 0x8133: 0xe0001105, + 0x8134: 0xe0001135, 0x8135: 0xe0001132, 0x8136: 0xe000112f, 0x8137: 0xe000112c, + 0x8138: 0xe000111d, 0x8139: 0xe000111a, 0x813a: 0xe0000d0a, 0x813b: 0xe0000d07, + 0x813c: 0x0030d888, 0x813d: 0x4030d820, 0x813e: 0x00312088, 0x813f: 0x40312020, + // Block 0x205, offset 0x8140 + 0x8140: 0xe00009bc, 0x8141: 0xe00009c0, 0x8142: 0x002c3a8b, 0x8143: 0xf0000a04, + 0x8144: 0x40081c20, 0x8145: 0xe0000a5e, 0x8146: 0xe0000a62, 0x8147: 0x002cc28a, + 0x8148: 0x40081e20, 0x8149: 0xf0000a04, 0x814a: 0x002d2285, 0x814b: 0x002d688b, + 0x814c: 0x002d688b, 0x814d: 0x002d688b, 0x814e: 0x002d6885, 0x814f: 0xf0000202, + 0x8150: 0x002d9a8b, 0x8151: 0x002d9a8b, 0x8152: 0x002e228b, 0x8153: 0x002e2285, + 0x8154: 0x40082020, 0x8155: 0x002e9e8b, 0x8156: 0xf000040a, 0x8157: 0x40082220, + 0x8158: 0x40082420, 0x8159: 0x002f2c8b, 0x815a: 0x002f568b, 0x815b: 0x002f7a8b, + 0x815c: 0x002f7a8b, 0x815d: 0x002f7a8b, 0x815e: 0x40082620, 0x815f: 0x40082820, + 0x8160: 0xf0001414, 0x8161: 0xe0000fbd, 0x8162: 0xf0001414, 0x8163: 0x40082a20, + 0x8164: 0x00312a8b, 0x8165: 0x40082c20, 0x8166: 0x0032a288, 0x8167: 0x40082e20, + 0x8168: 0x00312a8b, 0x8169: 0x40083020, 0x816a: 0x002dfe88, 0x816b: 0x00320c83, + 0x816c: 0x002c0a8b, 0x816d: 0x002c3a8b, 0x816e: 0x40083220, 0x816f: 0x002c9885, + 0x8170: 0x002c988b, 0x8171: 0x002d088b, 0x8172: 0x002d1e88, 0x8173: 0x002e828b, + 0x8174: 0x002ee285, 0x8175: 0x00389084, 0x8176: 0x00389284, 0x8177: 0x00389484, + 0x8178: 0x00389684, 0x8179: 0x002d9a85, 0x817a: 0x40083420, 0x817b: 0xe0000b95, + 0x817c: 0x00327e85, 0x817d: 0x00325685, 0x817e: 0x0032568b, 0x817f: 0x00327e8b, + // Block 0x206, offset 0x8180 + 0x8180: 0xe0000024, 0x8181: 0xe0000029, 0x8182: 0xe000002e, 0x8183: 0xe0000033, + 0x8184: 0xe0000038, 0x8185: 0xe000003d, 0x8186: 0xe0000042, 0x8187: 0xe0000047, + 0x8188: 0xf0001f04, 0x8189: 0xf0001f04, 0x818a: 0xf0001f04, 0x818b: 0xf0001f04, + 0x818c: 0xf0001f04, 0x818d: 0xf0001f04, 0x818e: 0xf0001f04, 0x818f: 0xf0001f04, + 0x8190: 0xf0001f04, 0x8191: 0xf0000404, 0x8192: 0xf0000404, 0x8193: 0xf0000404, + 0x8194: 0xf0000404, 0x8195: 0xf0000404, 0x8196: 0xf0000404, 0x8197: 0xf0000404, + 0x8198: 0xf0000404, 0x8199: 0xf0000404, 0x819a: 0xf0000404, 0x819b: 0xf0000404, + 0x819c: 0xf0000404, 0x819d: 0xf0000404, 0x819e: 0xf0000404, 0x819f: 0xf0000404, + 0x81a0: 0xf0000404, 0x81a1: 0xf0000404, 0x81a2: 0xf0000404, 0x81a3: 0xf0000404, + 0x81a4: 0xf0000404, 0x81a5: 0xf0000404, 0x81a6: 0xf0000404, 0x81a7: 0xf0000404, + 0x81a8: 0xf0000404, 0x81a9: 0xf0000404, 0x81aa: 0xf0000404, 0x81ab: 0xf0000404, + 0x81ac: 0xf0000404, 0x81ad: 0xf0000404, 0x81ae: 0xf0000404, 0x81af: 0xf0000404, + 0x81b0: 0xf0000404, 0x81b1: 0xf0000404, 0x81b2: 0xe00026fc, 0x81b3: 0xf0000404, + 0x81b4: 0xf0000404, 0x81b5: 0xf0000404, 0x81b6: 0x002bde8c, 0x81b7: 0x002c0a8c, + 0x81b8: 0x002c3a8c, 0x81b9: 0x002c628c, 0x81ba: 0x002c988c, 0x81bb: 0x002d088c, + 0x81bc: 0x002d228c, 0x81bd: 0x002d688c, 0x81be: 0x002d9a8c, 0x81bf: 0x002dcc8c, + // Block 0x207, offset 0x81c0 + 0x81c0: 0xf0001d1c, 0x81c1: 0xf0001d1c, 0x81c2: 0xf0001d1c, 0x81c3: 0xf0001d1c, + 0x81c4: 0xf0001d1c, 0x81c5: 0xf0001d1d, 0x81c6: 0xf0001d1d, 0x81c7: 0xf0001d1d, + 0x81c8: 0xe0000a6b, 0x81c9: 0xe0000cb4, 0x81ca: 0xf0001d1c, 0x81cb: 0xf0001d1c, + 0x81cc: 0xf0001d1c, 0x81cd: 0xf0001c1c, 0x81ce: 0xf0001c1c, 0x81cf: 0xf0001c1c, + 0x81d0: 0xf0001c1d, 0x81d1: 0xe0000cb9, 0x81d2: 0xe0000d36, 0x81d3: 0xe0000be3, + 0x81d4: 0xe0000fc5, 0x81d5: 0xf0001c1c, 0x81d6: 0xf0001c1c, 0x81d7: 0xf0001c1c, + 0x81d8: 0xf0001c1c, 0x81d9: 0xf0001c1c, 0x81da: 0xf0001c1c, 0x81db: 0xf0001c1c, + 0x81dc: 0xf0001c1c, 0x81dd: 0xf0001c1c, 0x81de: 0xf0001c1c, 0x81df: 0xe0000d3e, + 0x81e0: 0xe0000a72, 0x81e1: 0xf0001c1c, 0x81e2: 0xe0000cbd, 0x81e3: 0xe0000d42, + 0x81e4: 0xe0000a76, 0x81e5: 0xf0001c1c, 0x81e6: 0xe0000cc1, 0x81e7: 0xe0000d2d, + 0x81e8: 0xe0000d31, 0x81e9: 0xf0001c1d, 0x81ea: 0xe0000cc5, 0x81eb: 0xe0000d4a, + 0x81ec: 0xe0000be7, 0x81ed: 0xe0000f0b, 0x81ee: 0xe0000f0f, 0x81ef: 0xe0000f15, + 0x81f0: 0xf0001c1c, 0x81f1: 0xf0001c1c, 0x81f2: 0xf0001c1c, 0x81f3: 0xf0001c1c, + 0x81f4: 0xf0001d1c, 0x81f5: 0xf0001d1c, 0x81f6: 0xf0001d1c, 0x81f7: 0xf0001d1c, + 0x81f8: 0xf0001d1c, 0x81f9: 0xf0001d1d, 0x81fa: 0xe0002710, 0x81fb: 0xe000270d, + 0x81fc: 0xe000277f, 0x81fd: 0xe0002707, 0x81fe: 0xe0002704, 0x81ff: 0xe000270a, + // Block 0x208, offset 0x8200 + 0x8200: 0xf0001d1c, 0x8201: 0xf0001d1d, 0x8202: 0xe00009b7, 0x8203: 0xf0001c1d, + 0x8204: 0xf0001c1c, 0x8205: 0xf0001c1c, 0x8206: 0xe0000a66, 0x8207: 0xe0000a7a, + 0x8208: 0xf0001d1c, 0x8209: 0xf0001c1d, 0x820a: 0xf0001c1c, 0x820b: 0xf0001d1d, + 0x820c: 0xf0001c1c, 0x820d: 0xf0001d1d, 0x820e: 0xf0001d1d, 0x820f: 0xf0001c1c, + 0x8210: 0xf0001c1c, 0x8211: 0xf0001c1c, 0x8212: 0xe0000d0d, 0x8213: 0xf0001c1c, + 0x8214: 0xf0001c1c, 0x8215: 0xe0000d3a, 0x8216: 0xe0000d46, 0x8217: 0xf0001d1d, + 0x8218: 0xe0000eb0, 0x8219: 0xe0000eb8, 0x821a: 0xf0001d1d, 0x821b: 0xf0001c1c, + 0x821c: 0xf0001c1d, 0x821d: 0xe0002740, 0x821e: 0xe00010b2, 0x821f: 0xe00009c8, + 0x8220: 0xf0001f04, 0x8221: 0xf0001f04, 0x8222: 0xf0001f04, 0x8223: 0xf0001f04, + 0x8224: 0xf0001f04, 0x8225: 0xf0001f04, 0x8226: 0xf0001f04, 0x8227: 0xf0001f04, + 0x8228: 0xf0001f04, 0x8229: 0xf0000404, 0x822a: 0xf0000404, 0x822b: 0xf0000404, + 0x822c: 0xf0000404, 0x822d: 0xf0000404, 0x822e: 0xf0000404, 0x822f: 0xf0000404, + 0x8230: 0xf0000404, 0x8231: 0xf0000404, 0x8232: 0xf0000404, 0x8233: 0xf0000404, + 0x8234: 0xf0000404, 0x8235: 0xf0000404, 0x8236: 0xf0000404, 0x8237: 0xf0000404, + 0x8238: 0xf0000404, 0x8239: 0xf0000404, 0x823a: 0xf0000404, 0x823b: 0xf0000404, + 0x823c: 0xf0000404, 0x823d: 0xf0000404, 0x823e: 0xf0000404, 0x823f: 0xe0000bdf, + // Block 0x209, offset 0x8240 + 0x8240: 0xf0001f04, 0x8241: 0xf0001f04, 0x8242: 0xf0001f04, 0x8243: 0xf0001f04, + 0x8244: 0xf0001f04, 0x8245: 0xf0001f04, 0x8246: 0xf0001f04, 0x8247: 0xf0001f04, + 0x8248: 0xf0001f04, 0x8249: 0xf0001f04, 0x824a: 0xf0001f04, + 0x8250: 0xf0000a04, 0x8251: 0xf0000a04, 0x8252: 0xf0000a04, 0x8253: 0xf0000a04, + 0x8254: 0xf0000a04, 0x8255: 0xf0000a04, 0x8256: 0xf0000a04, 0x8257: 0xf0000a04, + 0x8258: 0xf0000a04, 0x8259: 0xf0000a04, 0x825a: 0xf0000a04, 0x825b: 0xf0000a04, + 0x825c: 0xf0000a04, 0x825d: 0xf0000a04, 0x825e: 0xf0000a04, 0x825f: 0xf0000a04, + 0x8260: 0xf0000a04, 0x8261: 0xf0000a04, 0x8262: 0xf0000a04, 0x8263: 0xf0000a04, + 0x8264: 0xf0000a04, 0x8265: 0xf0000a04, 0x8266: 0xe0002700, 0x8267: 0xf0000a04, + 0x8268: 0xf0000a04, 0x8269: 0xf0000a04, 0x826a: 0xf0000a04, 0x826b: 0x002c3a8c, + 0x826c: 0x002f7a8c, 0x826d: 0xf0000c0c, 0x826e: 0xe0002746, + 0x8270: 0x002bde9d, 0x8271: 0x002c0a9d, 0x8272: 0x002c3a9d, 0x8273: 0x002c629d, + 0x8274: 0x002c989d, 0x8275: 0x002d089d, 0x8276: 0x002d229d, 0x8277: 0x002d689d, + 0x8278: 0x002d9a9d, 0x8279: 0x002dcc9d, 0x827a: 0x002dfe9d, 0x827b: 0x002e229d, + 0x827c: 0x002e829d, 0x827d: 0x002e9e9d, 0x827e: 0x002ee29d, 0x827f: 0x002f2c9d, + // Block 0x20a, offset 0x8280 + 0x8280: 0x002f569d, 0x8281: 0x002f7a9d, 0x8282: 0x002fe69d, 0x8283: 0x00302c9d, + 0x8284: 0x00306c9d, 0x8285: 0x0030be9d, 0x8286: 0x0030e29d, 0x8287: 0x0030f69d, + 0x8288: 0x0031009d, 0x8289: 0x00312a9d, 0x828a: 0xf0001d1d, 0x828b: 0xf0001d1d, + 0x828c: 0xf0001d1d, 0x828d: 0xf0001d1d, 0x828e: 0xe0000ebc, 0x828f: 0xe0002743, + 0x8290: 0x002bde8c, 0x8291: 0x002c0a8c, 0x8292: 0x002c3a8c, 0x8293: 0x002c628c, + 0x8294: 0x002c988c, 0x8295: 0x002d088c, 0x8296: 0x002d228c, 0x8297: 0x002d688c, + 0x8298: 0x002d9a8c, 0x8299: 0x002dcc8c, 0x829a: 0x002dfe8c, 0x829b: 0x002e228c, + 0x829c: 0x002e828c, 0x829d: 0x002e9e8c, 0x829e: 0x002ee28c, 0x829f: 0x002f2c8c, + 0x82a0: 0x002f568c, 0x82a1: 0x002f7a8c, 0x82a2: 0x002fe68c, 0x82a3: 0x00302c8c, + 0x82a4: 0x00306c8c, 0x82a5: 0x0030be8c, 0x82a6: 0x0030e28c, 0x82a7: 0x0030f68c, + 0x82a8: 0x0031008c, 0x82a9: 0x00312a8c, 0x82aa: 0xf0001414, 0x82ab: 0xf0001414, + 0x82b0: 0x002bde9d, 0x82b1: 0x002c0a9d, 0x82b2: 0x002c3a9d, 0x82b3: 0x002c629d, + 0x82b4: 0x002c989d, 0x82b5: 0x002d089d, 0x82b6: 0x002d229d, 0x82b7: 0x002d689d, + 0x82b8: 0x002d9a9d, 0x82b9: 0x002dcc9d, 0x82ba: 0x002dfe9d, 0x82bb: 0x002e229d, + 0x82bc: 0x002e829d, 0x82bd: 0x002e9e9d, 0x82be: 0x002ee29d, 0x82bf: 0x002f2c9d, + // Block 0x20b, offset 0x82c0 + 0x82c0: 0xa0000000, 0x82c1: 0xa0000000, 0x82c2: 0xa0000000, 0x82c3: 0xa0000000, + 0x82c4: 0xa0000000, 0x82c5: 0xa0000000, 0x82c6: 0xa0000000, 0x82c7: 0xa0000000, + 0x82c8: 0xa0000000, 0x82c9: 0x40020020, 0x82ca: 0x40020220, 0x82cb: 0x40020420, + 0x82cc: 0x40020620, 0x82cd: 0x40020820, 0x82ce: 0xa0000000, 0x82cf: 0xa0000000, + 0x82d0: 0xa0000000, 0x82d1: 0xa0000000, 0x82d2: 0xa0000000, 0x82d3: 0xa0000000, + 0x82d4: 0xa0000000, 0x82d5: 0xa0000000, 0x82d6: 0xa0000000, 0x82d7: 0xa0000000, + 0x82d8: 0xa0000000, 0x82d9: 0xa0000000, 0x82da: 0xa0000000, 0x82db: 0xa0000000, + 0x82dc: 0xa0000000, 0x82dd: 0xa0000000, 0x82de: 0xa0000000, 0x82df: 0xa0000000, + 0x82e0: 0x40021220, 0x82e1: 0x4002ba20, 0x82e2: 0xa0002402, 0x82e3: 0x4004ea20, + 0x82e4: 0x4027de20, 0x82e5: 0x4004ec20, 0x82e6: 0x4004e620, 0x82e7: 0xa0002202, + 0x82e8: 0x4003f420, 0x82e9: 0x4003f620, 0x82ea: 0x4004d820, 0x82eb: 0x40093820, + 0x82ec: 0x40024020, 0x82ed: 0x40021a20, 0x82ee: 0x4002e420, 0x82ef: 0x4004e220, + 0x82f0: 0x4029cc20, 0x82f1: 0x4029ce20, 0x82f2: 0x4029d020, 0x82f3: 0x4029d220, + 0x82f4: 0x4029d420, 0x82f5: 0x4029d620, 0x82f6: 0x4029d820, 0x82f7: 0x4029da20, + 0x82f8: 0x4029dc20, 0x82f9: 0x4029de20, 0x82fa: 0x40026c20, 0x82fb: 0x40026220, + 0x82fc: 0x40094020, 0x82fd: 0xc32f0851, 0x82fe: 0x40094420, 0x82ff: 0x4002c420, + // Block 0x20c, offset 0x8300 + 0x8300: 0x4004d620, 0x8301: 0x002bde88, 0x8302: 0x002c0a88, 0x8303: 0x002c3a88, + 0x8304: 0x002c6288, 0x8305: 0x002c9888, 0x8306: 0x002d0888, 0x8307: 0x002d2288, + 0x8308: 0x002d6888, 0x8309: 0x002d9a88, 0x830a: 0x002dcc88, 0x830b: 0x002dfe88, + 0x830c: 0xc0030002, 0x830d: 0x002e8288, 0x830e: 0x002e9e88, 0x830f: 0x002ee288, + 0x8310: 0x002f2c88, 0x8311: 0x002f5688, 0x8312: 0x002f7a88, 0x8313: 0x002fe688, + 0x8314: 0x00302c88, 0x8315: 0x00306c88, 0x8316: 0x0030be88, 0x8317: 0x0030e288, + 0x8318: 0x0030f688, 0x8319: 0x00310088, 0x831a: 0x00312a88, 0x831b: 0x4003f820, + 0x831c: 0x4004e420, 0x831d: 0x4003fa20, 0x831e: 0x40062420, 0x831f: 0x40021620, + 0x8320: 0x40061e20, 0x8321: 0x402bde20, 0x8322: 0x402c0a20, 0x8323: 0x402c3a20, + 0x8324: 0x402c6220, 0x8325: 0x402c9820, 0x8326: 0x402d0820, 0x8327: 0x402d2220, + 0x8328: 0x402d6820, 0x8329: 0x402d9a20, 0x832a: 0x402dcc20, 0x832b: 0x402dfe20, + 0x832c: 0xc0000002, 0x832d: 0x402e8220, 0x832e: 0x402e9e20, 0x832f: 0x402ee220, + 0x8330: 0x402f2c20, 0x8331: 0x402f5620, 0x8332: 0x402f7a20, 0x8333: 0x402fe620, + 0x8334: 0x40302c20, 0x8335: 0x40306c20, 0x8336: 0x4030be20, 0x8337: 0x4030e220, + 0x8338: 0x4030f620, 0x8339: 0x40310020, 0x833a: 0x40312a20, 0x833b: 0x4003fc20, + 0x833c: 0x40094820, 0x833d: 0x4003fe20, 0x833e: 0x40094c20, 0x833f: 0xa0000000, + // Block 0x20d, offset 0x8340 + 0x8340: 0x40055620, 0x8341: 0xa1809102, 0x8342: 0xa1909002, 0x8343: 0x40055820, + 0x8344: 0xae600000, 0x8345: 0xadc00000, 0x8346: 0x40055a20, 0x8347: 0xa1208d02, + 0x8350: 0x40389020, 0x8351: 0x40389220, 0x8352: 0x40389420, 0x8353: 0x40389620, + 0x8354: 0x40389820, 0x8355: 0x40389a20, 0x8356: 0x40389c20, 0x8357: 0x40389e20, + 0x8358: 0x4038a020, 0x8359: 0x4038a220, 0x835a: 0x0038a499, 0x835b: 0x4038a420, + 0x835c: 0x4038a620, 0x835d: 0x0038a899, 0x835e: 0x4038a820, 0x835f: 0x0038aa99, + 0x8360: 0x4038aa20, 0x8361: 0x4038ac20, 0x8362: 0x4038ae20, 0x8363: 0x0038b099, + 0x8364: 0x4038b020, 0x8365: 0x0038b299, 0x8366: 0x4038b220, 0x8367: 0x4038b420, + 0x8368: 0x4038b620, 0x8369: 0x4038b820, 0x836a: 0x4038ba20, + 0x8370: 0xe00014ff, 0x8371: 0xe0001502, 0x8372: 0xe0001511, 0x8373: 0xa0002102, + 0x8374: 0xa0002302, + // Block 0x20e, offset 0x8380 + 0x8380: 0xa0002502, 0x8381: 0x4039fc20, 0x8382: 0x403a1220, 0x8383: 0x403a1a20, + 0x8384: 0x403a4020, 0x8385: 0x403a4e20, 0x8386: 0x403a5620, 0x8387: 0x403a6820, + 0x8388: 0xc3350171, 0x8389: 0x403a9222, 0x838a: 0xc3370171, 0x838b: 0xa1b0a202, + 0x838c: 0xa1c0a502, 0x838d: 0xa1d0a902, 0x838e: 0xa1e0ad02, 0x838f: 0xa1f0b202, + 0x8390: 0xa200b602, 0x8391: 0xa210ba02, 0x8392: 0xa220bc02, 0x8393: 0xae60bd02, + 0x8394: 0xae60be02, 0x8395: 0xadc0bf02, 0x8396: 0xadc0c102, 0x8397: 0xae60c202, + 0x8398: 0xae60c302, 0x8399: 0xae60c402, 0x839a: 0xae60c502, 0x839b: 0xae60c602, + 0x839c: 0xadc0c702, 0x839d: 0xae60c802, 0x839e: 0xae60c902, 0x839f: 0xadc0c002, + 0x83a0: 0xe000015e, 0x83a1: 0xe00001e6, 0x83a2: 0xe0000301, 0x83a3: 0xe00003db, + 0x83a4: 0xe00004b6, 0x83a5: 0xe0000580, 0x83a6: 0xe000064b, 0x83a7: 0xe00006f3, + 0x83a8: 0xe000079f, 0x83a9: 0xe0000844, 0x83aa: 0x4004ee20, 0x83ab: 0x40024c20, + 0x83ac: 0x40024e20, 0x83ad: 0x4004de20, 0x83ae: 0x40393a20, 0x83af: 0x403a1020, + 0x83b0: 0xa230d102, 0x83b1: 0x40392420, 0x83b2: 0x40392220, 0x83b3: 0x40392a20, + 0x83b4: 0x00391c84, 0x83b5: 0xf0000404, 0x83b6: 0xf0000404, 0x83b7: 0xf0000404, + 0x83b8: 0xf0000404, 0x83b9: 0x40395a20, 0x83ba: 0x40395c20, 0x83bb: 0x40393e20, + 0x83bc: 0x40395e20, 0x83bd: 0x40396020, 0x83be: 0x40394020, 0x83bf: 0x40396220, + // Block 0x20f, offset 0x83c0 + 0x83c1: 0x40491020, 0x83c2: 0x40491220, 0x83c3: 0x40491420, + 0x83c4: 0x40491620, 0x83c5: 0x40491820, 0x83c6: 0x40491a20, 0x83c7: 0x40491c20, + 0x83c8: 0x40491e20, 0x83c9: 0x40492020, 0x83ca: 0x40492220, 0x83cb: 0x40492420, + 0x83cc: 0x40492620, 0x83cd: 0x40492820, 0x83ce: 0x40492a20, 0x83cf: 0x40492c20, + 0x83d0: 0x40492e20, 0x83d1: 0x40493020, 0x83d2: 0x40493220, 0x83d3: 0x40493420, + 0x83d4: 0x40493620, 0x83d5: 0x40493820, 0x83d6: 0x40493a20, 0x83d7: 0x40493c20, + 0x83d8: 0x40493e20, 0x83d9: 0x40494020, 0x83da: 0x40494220, 0x83db: 0x40494420, + 0x83dc: 0x40494620, 0x83dd: 0x40494820, 0x83de: 0x40494a20, 0x83df: 0x40494c20, + 0x83e0: 0x40494e20, 0x83e1: 0x40495020, 0x83e2: 0x40495220, 0x83e3: 0x40495420, + 0x83e4: 0x40495620, 0x83e5: 0x40495820, 0x83e6: 0x40495a20, 0x83e7: 0x40495c20, + 0x83e8: 0x40495e20, 0x83e9: 0x40496020, 0x83ea: 0x40496220, 0x83eb: 0x40496420, + 0x83ec: 0x40496620, 0x83ed: 0x40496820, 0x83ee: 0x40496a20, 0x83ef: 0x40496c20, + 0x83f0: 0x40496e20, 0x83f1: 0x40497020, 0x83f2: 0x40497220, 0x83f3: 0x40497420, + 0x83f4: 0x40497620, 0x83f5: 0x40497820, 0x83f6: 0x40497a20, 0x83f7: 0x40497c20, + 0x83f8: 0x826724bf, 0x83f9: 0x826724c0, 0x83fa: 0xa0002602, + 0x83ff: 0x4027f420, + // Block 0x210, offset 0x8400 + 0x8400: 0xa0000000, 0x8401: 0xa0000000, 0x8402: 0xa0000000, 0x8403: 0xa0000000, + 0x8404: 0xa0000000, 0x8405: 0xa0000000, 0x8406: 0xa0000000, 0x8407: 0xa0000000, + 0x8408: 0xa0000000, 0x8409: 0x40020020, 0x840a: 0x40020220, 0x840b: 0x40020420, + 0x840c: 0x40020620, 0x840d: 0x40020820, 0x840e: 0xa0000000, 0x840f: 0xa0000000, + 0x8410: 0xa0000000, 0x8411: 0xa0000000, 0x8412: 0xa0000000, 0x8413: 0xa0000000, + 0x8414: 0xa0000000, 0x8415: 0xa0000000, 0x8416: 0xa0000000, 0x8417: 0xa0000000, + 0x8418: 0xa0000000, 0x8419: 0xa0000000, 0x841a: 0xa0000000, 0x841b: 0xa0000000, + 0x841c: 0xa0000000, 0x841d: 0xa0000000, 0x841e: 0xa0000000, 0x841f: 0xa0000000, + 0x8420: 0x40021220, 0x8421: 0x4002ba20, 0x8422: 0x4003e020, 0x8423: 0x4004ea20, + 0x8424: 0x4027de20, 0x8425: 0x4004ec20, 0x8426: 0x4004e620, 0x8427: 0x4003d220, + 0x8428: 0x4003f420, 0x8429: 0x4003f620, 0x842a: 0x4004d820, 0x842b: 0x40093820, + 0x842c: 0x40024020, 0x842d: 0x40021a20, 0x842e: 0x4002e420, 0x842f: 0x4004e220, + 0x8430: 0x4029cc20, 0x8431: 0x4029ce20, 0x8432: 0x4029d020, 0x8433: 0x4029d220, + 0x8434: 0x4029d420, 0x8435: 0x4029d620, 0x8436: 0x4029d820, 0x8437: 0x4029da20, + 0x8438: 0x4029dc20, 0x8439: 0x4029de20, 0x843a: 0x40026c20, 0x843b: 0x40026220, + 0x843c: 0x40094020, 0x843d: 0xc32f0851, 0x843e: 0x40094420, 0x843f: 0x4002c420, + // Block 0x211, offset 0x8440 + 0x8440: 0x4004d620, 0x8441: 0x002bde88, 0x8442: 0x002c0a88, 0x8443: 0xc3b708f1, + 0x8444: 0xc3bd0b13, 0x8445: 0x002c9888, 0x8446: 0x002d0888, 0x8447: 0x002d2288, + 0x8448: 0x002d6888, 0x8449: 0x002d9a88, 0x844a: 0x002dcc88, 0x844b: 0x002dfe88, + 0x844c: 0xc3c60be4, 0x844d: 0x002e8288, 0x844e: 0xc3cb0c52, 0x844f: 0x002ee288, + 0x8450: 0x002f2c88, 0x8451: 0x002f5688, 0x8452: 0x002f7a88, 0x8453: 0xc34908d1, + 0x8454: 0x00302c88, 0x8455: 0x00306c88, 0x8456: 0x0030be88, 0x8457: 0x0030e288, + 0x8458: 0x0030f688, 0x8459: 0x00310088, 0x845a: 0xc37f08d1, 0x845b: 0x4003f820, + 0x845c: 0x4004e420, 0x845d: 0x4003fa20, 0x845e: 0x40062420, 0x845f: 0x40021620, + 0x8460: 0x40061e20, 0x8461: 0x402bde20, 0x8462: 0x402c0a20, 0x8463: 0xc3b408f1, + 0x8464: 0xc3ba0ac2, 0x8465: 0x402c9820, 0x8466: 0x402d0820, 0x8467: 0x402d2220, + 0x8468: 0x402d6820, 0x8469: 0x402d9a20, 0x846a: 0x402dcc20, 0x846b: 0x402dfe20, + 0x846c: 0xc3c20b93, 0x846d: 0x402e8220, 0x846e: 0xc3670c41, 0x846f: 0x402ee220, + 0x8470: 0x402f2c20, 0x8471: 0x402f5620, 0x8472: 0x402f7a20, 0x8473: 0xc34708d1, + 0x8474: 0x40302c20, 0x8475: 0x40306c20, 0x8476: 0x4030be20, 0x8477: 0x4030e220, + 0x8478: 0x4030f620, 0x8479: 0x40310020, 0x847a: 0xc37d08d1, 0x847b: 0x4003fc20, + 0x847c: 0x40094820, 0x847d: 0x4003fe20, 0x847e: 0x40094c20, 0x847f: 0xa0000000, + // Block 0x212, offset 0x8480 + 0x8480: 0xe0000983, 0x8481: 0xe0000980, 0x8482: 0xe00008fb, 0x8483: 0xe00008f8, + 0x8484: 0xe000097d, 0x8485: 0xe000097a, 0x8486: 0x002c3e83, 0x8487: 0x402c3e20, + 0x8488: 0xe0000a3e, 0x8489: 0xe0000a3b, 0x848a: 0xe0000a4a, 0x848b: 0xe0000a47, + 0x848c: 0x002c3c83, 0x848d: 0x402c3c20, 0x848e: 0xe0000a86, 0x848f: 0xe0000a83, + 0x8490: 0x002c6683, 0x8491: 0x402c6620, 0x8492: 0xe0000b46, 0x8493: 0xe0000b43, + 0x8494: 0xe0000aee, 0x8495: 0xe0000aeb, 0x8496: 0xe0000b2c, 0x8497: 0xe0000b29, + 0x8498: 0xe0000b40, 0x8499: 0xe0000b3d, 0x849a: 0xe0000b1a, 0x849b: 0xe0000b17, + 0x849c: 0xe0000bb8, 0x849d: 0xe0000bb5, 0x849e: 0xe0000bb2, 0x849f: 0xe0000baf, + 0x84a0: 0xe0000bc4, 0x84a1: 0xe0000bc1, 0x84a2: 0xe0000bca, 0x84a3: 0xe0000bc7, + 0x84a4: 0xe0000bee, 0x84a5: 0xe0000beb, 0x84a6: 0xe0000c1b, 0x84a7: 0xe0000c18, + 0x84a8: 0xe0000c51, 0x84a9: 0xe0000c4e, 0x84aa: 0xe0000c60, 0x84ab: 0xe0000c5d, + 0x84ac: 0xe0000c31, 0x84ad: 0xe0000c2e, 0x84ae: 0xe0000c5a, 0x84af: 0xe0000c57, + 0x84b0: 0xe0000c54, 0x84b1: 0x402da220, 0x84b2: 0xf0000a0a, 0x84b3: 0xf0000404, + 0x84b4: 0xe0000c8a, 0x84b5: 0xe0000c87, 0x84b6: 0xe0000c9f, 0x84b7: 0xe0000c9c, + 0x84b8: 0x402f7220, 0x84b9: 0xe0000ccc, 0x84ba: 0xe0000cc9, 0x84bb: 0xe0000cd8, + 0x84bc: 0xe0000cd5, 0x84bd: 0xe0000cd2, 0x84be: 0xe0000ccf, 0x84bf: 0xe0000d04, + // Block 0x213, offset 0x84c0 + 0x84c0: 0xe0000cfe, 0x84c1: 0xe0000cf8, 0x84c2: 0xe0000cf5, 0x84c3: 0xe0000d51, + 0x84c4: 0xe0000d4e, 0x84c5: 0xe0000d6f, 0x84c6: 0xe0000d6c, 0x84c7: 0xe0000d5d, + 0x84c8: 0xe0000d5a, 0x84c9: 0xf0000404, 0x84ca: 0x002eda88, 0x84cb: 0x402eda20, + 0x84cc: 0xe0000e2e, 0x84cd: 0xe0000e2b, 0x84ce: 0xe0000da0, 0x84cf: 0xe0000d9d, + 0x84d0: 0xe0000de0, 0x84d1: 0xe0000ddd, 0x84d2: 0xe0000e93, 0x84d3: 0xe0000e8f, + 0x84d4: 0xe0000eca, 0x84d5: 0xe0000ec7, 0x84d6: 0xe0000edc, 0x84d7: 0xe0000ed9, + 0x84d8: 0xe0000ed0, 0x84d9: 0xe0000ecd, 0x84da: 0xe0000f1f, 0x84db: 0xe0000f1c, + 0x84dc: 0xe0000f2d, 0x84dd: 0xe0000f2a, 0x84de: 0xe0000f47, 0x84df: 0xe0000f44, + 0x84e0: 0x002fe883, 0x84e1: 0x402fe820, 0x84e2: 0xe0000f99, 0x84e3: 0xe0000f96, + 0x84e4: 0xe0000f8a, 0x84e5: 0xe0000f87, 0x84e6: 0x00303688, 0x84e7: 0x40303620, + 0x84e8: 0xe000102b, 0x84e9: 0xe0001028, 0x84ea: 0xe000103f, 0x84eb: 0xe000103c, + 0x84ec: 0xe0000fe7, 0x84ed: 0xe0000fe4, 0x84ee: 0xe0000ff9, 0x84ef: 0xe0000ff6, + 0x84f0: 0xe0001025, 0x84f1: 0xe0001022, 0x84f2: 0xe0001039, 0x84f3: 0xe0001036, + 0x84f4: 0xe00010d8, 0x84f5: 0xe00010d5, 0x84f6: 0xe000110e, 0x84f7: 0xe000110b, + 0x84f8: 0xe0001117, 0x84f9: 0xe000113b, 0x84fa: 0xe0001138, 0x84fb: 0xe000114d, + 0x84fc: 0xe000114a, 0x84fd: 0x00312c83, 0x84fe: 0x40312c20, 0x84ff: 0xe0000f64, + // Block 0x214, offset 0x8500 + 0x8500: 0x40321220, 0x8501: 0x40321a20, 0x8502: 0x40322220, 0x8503: 0x40322a20, + 0x8504: 0x002c6487, 0x8505: 0x002c6485, 0x8506: 0x002c6483, 0x8507: 0x002e2487, + 0x8508: 0x002e2485, 0x8509: 0x002e2483, 0x850a: 0x002ea087, 0x850b: 0x002ea085, + 0x850c: 0x002ea083, 0x850d: 0xe0000947, 0x850e: 0xe0000944, 0x850f: 0xe0000c3d, + 0x8510: 0xe0000c3a, 0x8511: 0xe0000dcc, 0x8512: 0xe0000dc9, 0x8513: 0xe0000ff3, + 0x8514: 0xe0000ff0, 0x8515: 0xe000101e, 0x8516: 0xe000101a, 0x8517: 0xe0001006, + 0x8518: 0xe0001002, 0x8519: 0xe0001016, 0x851a: 0xe0001012, 0x851b: 0xe000100e, + 0x851c: 0xe000100a, 0x851d: 0x402cae20, 0x851e: 0xe0000962, 0x851f: 0xe000095e, + 0x8520: 0xe0000976, 0x8521: 0xe0000972, 0x8522: 0xe00009f4, 0x8523: 0xe00009ef, + 0x8524: 0x002d3a88, 0x8525: 0x402d3a20, 0x8526: 0xe0000bbe, 0x8527: 0xe0000bbb, + 0x8528: 0xe0000c99, 0x8529: 0xe0000c96, 0x852a: 0xe0000e20, 0x852b: 0xe0000e1d, + 0x852c: 0xe0000e27, 0x852d: 0xe0000e23, 0x852e: 0xe0001162, 0x852f: 0xe000115f, + 0x8530: 0xe0000c8d, 0x8531: 0xf0000a0a, 0x8532: 0xf000040a, 0x8533: 0xf0000404, + 0x8534: 0xe0000bac, 0x8535: 0xe0000ba9, 0x8536: 0x002d7888, 0x8537: 0x00319488, + 0x8538: 0xe0000d57, 0x8539: 0xe0000d54, 0x853a: 0xe0000954, 0x853b: 0xe0000950, + 0x853c: 0xe00009ea, 0x853d: 0xe00009e5, 0x853e: 0xe0000e19, 0x853f: 0xe0000e15, + // Block 0x215, offset 0x8540 + 0x8540: 0xe00009b1, 0x8541: 0xe00009ae, 0x8542: 0xe0000a22, 0x8543: 0xe0000a1f, + 0x8544: 0xe0000a28, 0x8545: 0xe0000a25, 0x8546: 0xe0000a2e, 0x8547: 0xe0000a2b, + 0x8548: 0xe0002785, 0x8549: 0xe0002782, 0x854a: 0xe0000a8c, 0x854b: 0xe0000a89, + 0x854c: 0xe0000a98, 0x854d: 0xe0000a95, 0x854e: 0xe0000aa4, 0x854f: 0xe0000aa1, + 0x8550: 0xe0000a92, 0x8551: 0xe0000a8f, 0x8552: 0xe0000a9e, 0x8553: 0xe0000a9b, + 0x8554: 0xe0000b55, 0x8555: 0xe0000b51, 0x8556: 0xe0000b4d, 0x8557: 0xe0000b49, + 0x8558: 0xe0000b7c, 0x8559: 0xe0000b79, 0x855a: 0xe0000b82, 0x855b: 0xe0000b7f, + 0x855c: 0xe0000b39, 0x855d: 0xe0000b35, 0x855e: 0xe0000b8c, 0x855f: 0xe0000b89, + 0x8560: 0xe0000bd0, 0x8561: 0xe0000bcd, 0x8562: 0xe0000c00, 0x8563: 0xe0000bfd, + 0x8564: 0xe0000c0c, 0x8565: 0xe0000c09, 0x8566: 0xe0000bfa, 0x8567: 0xe0000bf7, + 0x8568: 0xe0000c06, 0x8569: 0xe0000c03, 0x856a: 0xe0000c12, 0x856b: 0xe0000c0f, + 0x856c: 0xe0000c7e, 0x856d: 0xe0000c7b, 0x856e: 0xe0000c4a, 0x856f: 0xe0000c46, + 0x8570: 0xe0000c93, 0x8571: 0xe0000c90, 0x8572: 0xe0000cab, 0x8573: 0xe0000ca8, + 0x8574: 0xe0000cb1, 0x8575: 0xe0000cae, 0x8576: 0xe0000cde, 0x8577: 0xe0000cdb, + 0x8578: 0xe0000ce5, 0x8579: 0xe0000ce1, 0x857a: 0xe0000cf2, 0x857b: 0xe0000cef, + 0x857c: 0xe0000cec, 0x857d: 0xe0000ce9, 0x857e: 0xe0000d1e, 0x857f: 0xe0000d1b, + // Block 0x216, offset 0x8580 + 0x8580: 0xe0000d24, 0x8581: 0xe0000d21, 0x8582: 0xe0000d2a, 0x8583: 0xe0000d27, + 0x8584: 0xe0000d69, 0x8585: 0xe0000d66, 0x8586: 0xe0000d7b, 0x8587: 0xe0000d78, + 0x8588: 0xe0000d87, 0x8589: 0xe0000d84, 0x858a: 0xe0000d81, 0x858b: 0xe0000d7e, + 0x858c: 0xe0000ded, 0x858d: 0xe0000de9, 0x858e: 0xe0000df5, 0x858f: 0xe0000df1, + 0x8590: 0xe0000e3d, 0x8591: 0xe0000e39, 0x8592: 0xe0000e35, 0x8593: 0xe0000e31, + 0x8594: 0xe0000ea7, 0x8595: 0xe0000ea4, 0x8596: 0xe0000ead, 0x8597: 0xe0000eaa, + 0x8598: 0xe0000ed6, 0x8599: 0xe0000ed3, 0x859a: 0xe0000ef4, 0x859b: 0xe0000ef1, + 0x859c: 0xe0000efb, 0x859d: 0xe0000ef7, 0x859e: 0xe0000f02, 0x859f: 0xe0000eff, + 0x85a0: 0xe0000f41, 0x85a1: 0xe0000f3e, 0x85a2: 0xe0000f53, 0x85a3: 0xe0000f50, + 0x85a4: 0xe0000f26, 0x85a5: 0xe0000f22, 0x85a6: 0xe0002652, 0x85a7: 0xe000264f, + 0x85a8: 0xe0000f5a, 0x85a9: 0xe0000f56, 0x85aa: 0xe0000f93, 0x85ab: 0xe0000f90, + 0x85ac: 0xe0000f9f, 0x85ad: 0xe0000f9c, 0x85ae: 0xe0000fb1, 0x85af: 0xe0000fae, + 0x85b0: 0xe0000fab, 0x85b1: 0xe0000fa8, 0x85b2: 0xe0001093, 0x85b3: 0xe0001090, + 0x85b4: 0xe000109f, 0x85b5: 0xe000109c, 0x85b6: 0xe0001099, 0x85b7: 0xe0001096, + 0x85b8: 0xe0001032, 0x85b9: 0xe000102e, 0x85ba: 0xe0001046, 0x85bb: 0xe0001042, + 0x85bc: 0xe00010a9, 0x85bd: 0xe00010a6, 0x85be: 0xe00010af, 0x85bf: 0xe00010ac, + // Block 0x217, offset 0x85c0 + 0x85c0: 0xa0000000, 0x85c1: 0xa0000000, 0x85c2: 0xa0000000, 0x85c3: 0xa0000000, + 0x85c4: 0xa0000000, 0x85c5: 0xa0000000, 0x85c6: 0xa0000000, 0x85c7: 0xa0000000, + 0x85c8: 0xa0000000, 0x85c9: 0x40020020, 0x85ca: 0x40020220, 0x85cb: 0x40020420, + 0x85cc: 0x40020620, 0x85cd: 0x40020820, 0x85ce: 0xa0000000, 0x85cf: 0xa0000000, + 0x85d0: 0xa0000000, 0x85d1: 0xa0000000, 0x85d2: 0xa0000000, 0x85d3: 0xa0000000, + 0x85d4: 0xa0000000, 0x85d5: 0xa0000000, 0x85d6: 0xa0000000, 0x85d7: 0xa0000000, + 0x85d8: 0xa0000000, 0x85d9: 0xa0000000, 0x85da: 0xa0000000, 0x85db: 0xa0000000, + 0x85dc: 0xa0000000, 0x85dd: 0xa0000000, 0x85de: 0xa0000000, 0x85df: 0xa0000000, + 0x85e0: 0x40021220, 0x85e1: 0x4002ba20, 0x85e2: 0x4003e020, 0x85e3: 0x4004ea20, + 0x85e4: 0x4027de20, 0x85e5: 0x4004ec20, 0x85e6: 0x4004e620, 0x85e7: 0x4003d220, + 0x85e8: 0x4003f420, 0x85e9: 0x4003f620, 0x85ea: 0x4004d820, 0x85eb: 0x40093820, + 0x85ec: 0x40024020, 0x85ed: 0x40021a20, 0x85ee: 0x4002e420, 0x85ef: 0x4004e220, + 0x85f0: 0x4029cc20, 0x85f1: 0x4029ce20, 0x85f2: 0x4029d020, 0x85f3: 0x4029d220, + 0x85f4: 0x4029d420, 0x85f5: 0x4029d620, 0x85f6: 0x4029d820, 0x85f7: 0x4029da20, + 0x85f8: 0x4029dc20, 0x85f9: 0x4029de20, 0x85fa: 0x40026c20, 0x85fb: 0x40026220, + 0x85fc: 0x40094020, 0x85fd: 0xc32f0851, 0x85fe: 0x40094420, 0x85ff: 0x4002c420, + // Block 0x218, offset 0x8600 + 0x8600: 0x4004d620, 0x8601: 0xc3d20c71, 0x8602: 0x002c0a88, 0x8603: 0x002c3a88, + 0x8604: 0x002c6288, 0x8605: 0xc3d808b1, 0x8606: 0x002d0888, 0x8607: 0x002d2288, + 0x8608: 0x002d6888, 0x8609: 0xc3dc08b1, 0x860a: 0x002dcc88, 0x860b: 0x002dfe88, + 0x860c: 0xc0030002, 0x860d: 0x002e8288, 0x860e: 0x002e9e88, 0x860f: 0xc3e10cb1, + 0x8610: 0x002f2c88, 0x8611: 0x002f5688, 0x8612: 0x002f7a88, 0x8613: 0x002fe688, + 0x8614: 0x00302c88, 0x8615: 0xc3e608b1, 0x8616: 0x0030be88, 0x8617: 0x0030e288, + 0x8618: 0x0030f688, 0x8619: 0xc3ea08b1, 0x861a: 0x00312a88, 0x861b: 0x4003f820, + 0x861c: 0x4004e420, 0x861d: 0x4003fa20, 0x861e: 0x40062420, 0x861f: 0x40021620, + 0x8620: 0x40061e20, 0x8621: 0xc3ce0c71, 0x8622: 0x402c0a20, 0x8623: 0x402c3a20, + 0x8624: 0x402c6220, 0x8625: 0xc3d608b1, 0x8626: 0x402d0820, 0x8627: 0x402d2220, + 0x8628: 0x402d6820, 0x8629: 0xc3da08b1, 0x862a: 0x402dcc20, 0x862b: 0x402dfe20, + 0x862c: 0xc0000002, 0x862d: 0x402e8220, 0x862e: 0x402e9e20, 0x862f: 0xc3de0cb1, + 0x8630: 0x402f2c20, 0x8631: 0x402f5620, 0x8632: 0x402f7a20, 0x8633: 0x402fe620, + 0x8634: 0x40302c20, 0x8635: 0xc3e408b1, 0x8636: 0x4030be20, 0x8637: 0x4030e220, + 0x8638: 0x4030f620, 0x8639: 0xc3e808b1, 0x863a: 0x40312a20, 0x863b: 0x4003fc20, + 0x863c: 0x40094820, 0x863d: 0x4003fe20, 0x863e: 0x40094c20, 0x863f: 0xa0000000, + // Block 0x219, offset 0x8640 + 0x8640: 0xe00008f5, 0x8641: 0x002c0883, 0x8642: 0xe0000921, 0x8643: 0xe0000969, + 0x8644: 0x00320ca3, 0x8645: 0x00321083, 0x8646: 0x00320c83, 0x8647: 0xe0000a53, + 0x8648: 0xe0000ae8, 0x8649: 0x002d0683, 0x864a: 0xe0000af4, 0x864b: 0xe0000b20, + 0x864c: 0xe0000c2b, 0x864d: 0x002dca83, 0x864e: 0xe0000c37, 0x864f: 0xe0000c43, + 0x8650: 0x002c6483, 0x8651: 0xe0000d63, 0x8652: 0xe0000d9a, 0x8653: 0x002f2a83, + 0x8654: 0xe0000da6, 0x8655: 0xe0000de6, 0x8656: 0x00320e83, 0x8657: 0x40093e20, + 0x8658: 0x00320ea3, 0x8659: 0xe0000fe1, 0x865a: 0x0030bc83, 0x865b: 0xe0000fed, + 0x865c: 0xe0000fff, 0x865d: 0x00312883, 0x865e: 0x00318888, 0x865f: 0xe0000f7b, + 0x8660: 0xe00008f2, 0x8661: 0x402c0820, 0x8662: 0xe000091e, 0x8663: 0xe0000966, + 0x8664: 0x40320c21, 0x8665: 0x40321020, 0x8666: 0x40320c20, 0x8667: 0xe0000a4d, + 0x8668: 0xe0000ae5, 0x8669: 0x402d0620, 0x866a: 0xe0000af1, 0x866b: 0xe0000b1d, + 0x866c: 0xe0000c28, 0x866d: 0x402dca20, 0x866e: 0xe0000c34, 0x866f: 0xe0000c40, + 0x8670: 0x402c6420, 0x8671: 0xe0000d60, 0x8672: 0xe0000d97, 0x8673: 0x402f2a20, + 0x8674: 0xe0000da3, 0x8675: 0xe0000de3, 0x8676: 0x40320e20, 0x8677: 0x40093c20, + 0x8678: 0x40320e21, 0x8679: 0xe0000fde, 0x867a: 0x4030bc20, 0x867b: 0xe0000fea, + 0x867c: 0xe0000ffc, 0x867d: 0x40312820, 0x867e: 0x40318820, 0x867f: 0xe0001114, + // Block 0x21a, offset 0x8680 + 0x8680: 0xe0000983, 0x8681: 0xe0000980, 0x8682: 0xe00008fb, 0x8683: 0xe00008f8, + 0x8684: 0xe000097d, 0x8685: 0xe000097a, 0x8686: 0xe0000a38, 0x8687: 0xe0000a35, + 0x8688: 0xe0000a3e, 0x8689: 0xe0000a3b, 0x868a: 0xe0000a4a, 0x868b: 0xe0000a47, + 0x868c: 0xe0000a44, 0x868d: 0xe0000a41, 0x868e: 0xe0000a86, 0x868f: 0xe0000a83, + 0x8690: 0x002c62a3, 0x8691: 0x402c6221, 0x8692: 0xe0000b46, 0x8693: 0xe0000b43, + 0x8694: 0xe0000aee, 0x8695: 0xe0000aeb, 0x8696: 0xe0000b2c, 0x8697: 0xe0000b29, + 0x8698: 0xe0000b40, 0x8699: 0xe0000b3d, 0x869a: 0xe0000b1a, 0x869b: 0xe0000b17, + 0x869c: 0xe0000bb8, 0x869d: 0xe0000bb5, 0x869e: 0xe0000bb2, 0x869f: 0xe0000baf, + 0x86a0: 0xe0000bc4, 0x86a1: 0xe0000bc1, 0x86a2: 0xe0000bca, 0x86a3: 0xe0000bc7, + 0x86a4: 0xe0000bee, 0x86a5: 0xe0000beb, 0x86a6: 0xe0000c1b, 0x86a7: 0xe0000c18, + 0x86a8: 0xe0000c51, 0x86a9: 0xe0000c4e, 0x86aa: 0xe0000c60, 0x86ab: 0xe0000c5d, + 0x86ac: 0xe0000c31, 0x86ad: 0xe0000c2e, 0x86ae: 0xe0000c5a, 0x86af: 0xe0000c57, + 0x86b0: 0xe0000c54, 0x86b1: 0x402da220, 0x86b2: 0xf0000a0a, 0x86b3: 0xf0000404, + 0x86b4: 0xe0000c8a, 0x86b5: 0xe0000c87, 0x86b6: 0xe0000c9f, 0x86b7: 0xe0000c9c, + 0x86b8: 0x402f7220, 0x86b9: 0xe0000ccc, 0x86ba: 0xe0000cc9, 0x86bb: 0xe0000cd8, + 0x86bc: 0xe0000cd5, 0x86bd: 0xe0000cd2, 0x86be: 0xe0000ccf, 0x86bf: 0xe0000d04, + // Block 0x21b, offset 0x86c0 + 0x86c0: 0x40321220, 0x86c1: 0x40321a20, 0x86c2: 0x40322220, 0x86c3: 0x40322a20, + 0x86c4: 0xe0000ad5, 0x86c5: 0xe0000ad1, 0x86c6: 0xe0000acd, 0x86c7: 0xf0000a0a, + 0x86c8: 0xf000040a, 0x86c9: 0xf0000404, 0x86ca: 0xf0000a0a, 0x86cb: 0xf000040a, + 0x86cc: 0xf0000404, 0x86cd: 0xe0000947, 0x86ce: 0xe0000944, 0x86cf: 0xe0000c3d, + 0x86d0: 0xe0000c3a, 0x86d1: 0xe0000dcc, 0x86d2: 0xe0000dc9, 0x86d3: 0xe0000ff3, + 0x86d4: 0xe0000ff0, 0x86d5: 0xe000101e, 0x86d6: 0xe000101a, 0x86d7: 0xe00027c1, + 0x86d8: 0xe00027be, 0x86d9: 0xe0001016, 0x86da: 0xe0001012, 0x86db: 0xe000100e, + 0x86dc: 0xe000100a, 0x86dd: 0x402cae20, 0x86de: 0xe0002697, 0x86df: 0xe0002694, + 0x86e0: 0xe0000976, 0x86e1: 0xe0000972, 0x86e2: 0xe0002691, 0x86e3: 0xe000268e, + 0x86e4: 0x002d3a88, 0x86e5: 0x402d3a20, 0x86e6: 0xe0000bbe, 0x86e7: 0xe0000bbb, + 0x86e8: 0xe0000c99, 0x86e9: 0xe0000c96, 0x86ea: 0xe0000e20, 0x86eb: 0xe0000e1d, + 0x86ec: 0xe0000e27, 0x86ed: 0xe0000e23, 0x86ee: 0xe0001162, 0x86ef: 0xe000115f, + 0x86f0: 0xe0000c8d, 0x86f1: 0xf0000a0a, 0x86f2: 0xf000040a, 0x86f3: 0xf0000404, + 0x86f4: 0xe0000bac, 0x86f5: 0xe0000ba9, 0x86f6: 0x002d7888, 0x86f7: 0x00319488, + 0x86f8: 0xe0000d57, 0x86f9: 0xe0000d54, 0x86fa: 0xe00026af, 0x86fb: 0xe00026ac, + 0x86fc: 0xe000268b, 0x86fd: 0xe0002688, 0x86fe: 0xe0002752, 0x86ff: 0xe000274f, + // Block 0x21c, offset 0x8700 + 0x8700: 0xe000098f, 0x8701: 0xe000098c, 0x8702: 0xe0000995, 0x8703: 0xe0000992, + 0x8704: 0xe0000b62, 0x8705: 0xe0000b5f, 0x8706: 0xe0000b68, 0x8707: 0xe0000b65, + 0x8708: 0xe0000c6c, 0x8709: 0xe0000c69, 0x870a: 0xe0000c72, 0x870b: 0xe0000c6f, + 0x870c: 0xe0000e4a, 0x870d: 0xe0000e47, 0x870e: 0xe0000e50, 0x870f: 0xe0000e4d, + 0x8710: 0xe0000ee8, 0x8711: 0xe0000ee5, 0x8712: 0xe0000eee, 0x8713: 0xe0000eeb, + 0x8714: 0xe0001053, 0x8715: 0xe0001050, 0x8716: 0xe0001059, 0x8717: 0xe0001056, + 0x8718: 0xe0000f61, 0x8719: 0xe0000f5e, 0x871a: 0xe0000fa5, 0x871b: 0xe0000fa2, + 0x871c: 0x00312288, 0x871d: 0x40312220, 0x871e: 0xe0000bf4, 0x871f: 0xe0000bf1, + 0x8720: 0x002ebc88, 0x8721: 0x402c8c20, 0x8722: 0x002f2288, 0x8723: 0x402f2220, + 0x8724: 0x00314088, 0x8725: 0x40314020, 0x8726: 0xe000096f, 0x8727: 0xe000096c, + 0x8728: 0xe0000b32, 0x8729: 0xe0000b2f, 0x872a: 0xe000274c, 0x872b: 0xe0002749, + 0x872c: 0xe0000dfd, 0x872d: 0xe0000df9, 0x872e: 0xe0000e04, 0x872f: 0xe0000e01, + 0x8730: 0xe0000e0b, 0x8731: 0xe0000e07, 0x8732: 0xe0001129, 0x8733: 0xe0001126, + 0x8734: 0x402e5e20, 0x8735: 0x402ed020, 0x8736: 0x40305a20, 0x8737: 0x402dd420, + 0x8738: 0xe0000abf, 0x8739: 0xe0000ec4, 0x873a: 0x002be888, 0x873b: 0x002c4488, + 0x873c: 0x402c4420, 0x873d: 0x002e3888, 0x873e: 0x00303e88, 0x873f: 0x402ffc20, + // Block 0x21d, offset 0x8740 + 0x8740: 0xe00009b1, 0x8741: 0xe00009ae, 0x8742: 0xe0000a22, 0x8743: 0xe0000a1f, + 0x8744: 0xe0000a28, 0x8745: 0xe0000a25, 0x8746: 0xe0000a2e, 0x8747: 0xe0000a2b, + 0x8748: 0xe0000a5a, 0x8749: 0xe0000a56, 0x874a: 0xe0000a8c, 0x874b: 0xe0000a89, + 0x874c: 0xe0000a98, 0x874d: 0xe0000a95, 0x874e: 0xe0000aa4, 0x874f: 0xe0000aa1, + 0x8750: 0xe0000a92, 0x8751: 0xe0000a8f, 0x8752: 0xe0000a9e, 0x8753: 0xe0000a9b, + 0x8754: 0xe0000b55, 0x8755: 0xe0000b51, 0x8756: 0xe000279d, 0x8757: 0xe000279a, + 0x8758: 0xe0000b7c, 0x8759: 0xe0000b79, 0x875a: 0xe0000b82, 0x875b: 0xe0000b7f, + 0x875c: 0xe0000b39, 0x875d: 0xe0000b35, 0x875e: 0xe0000b8c, 0x875f: 0xe0000b89, + 0x8760: 0xe0000bd0, 0x8761: 0xe0000bcd, 0x8762: 0xe0000c00, 0x8763: 0xe0000bfd, + 0x8764: 0xe0000c0c, 0x8765: 0xe0000c09, 0x8766: 0xe0000bfa, 0x8767: 0xe0000bf7, + 0x8768: 0xe0000c06, 0x8769: 0xe0000c03, 0x876a: 0xe0000c12, 0x876b: 0xe0000c0f, + 0x876c: 0xe0000c7e, 0x876d: 0xe0000c7b, 0x876e: 0xe00027a3, 0x876f: 0xe00027a0, + 0x8770: 0xe0000c93, 0x8771: 0xe0000c90, 0x8772: 0xe0000cab, 0x8773: 0xe0000ca8, + 0x8774: 0xe0000cb1, 0x8775: 0xe0000cae, 0x8776: 0xe0000cde, 0x8777: 0xe0000cdb, + 0x8778: 0xe0000ce5, 0x8779: 0xe0000ce1, 0x877a: 0xe0000cf2, 0x877b: 0xe0000cef, + 0x877c: 0xe0000cec, 0x877d: 0xe0000ce9, 0x877e: 0xe0000d1e, 0x877f: 0xe0000d1b, + // Block 0x21e, offset 0x8780 + 0x8780: 0xe0000d24, 0x8781: 0xe0000d21, 0x8782: 0xe0000d2a, 0x8783: 0xe0000d27, + 0x8784: 0xe0000d69, 0x8785: 0xe0000d66, 0x8786: 0xe0000d7b, 0x8787: 0xe0000d78, + 0x8788: 0xe0000d87, 0x8789: 0xe0000d84, 0x878a: 0xe0000d81, 0x878b: 0xe0000d7e, + 0x878c: 0xe00027af, 0x878d: 0xe00027ac, 0x878e: 0xe00027d3, 0x878f: 0xe00027d0, + 0x8790: 0xe0000e3d, 0x8791: 0xe0000e39, 0x8792: 0xe00027b5, 0x8793: 0xe00027b2, + 0x8794: 0xe0000ea7, 0x8795: 0xe0000ea4, 0x8796: 0xe0000ead, 0x8797: 0xe0000eaa, + 0x8798: 0xe0000ed6, 0x8799: 0xe0000ed3, 0x879a: 0xe0000ef4, 0x879b: 0xe0000ef1, + 0x879c: 0xe0000efb, 0x879d: 0xe0000ef7, 0x879e: 0xe0000f02, 0x879f: 0xe0000eff, + 0x87a0: 0xe0000f41, 0x87a1: 0xe0000f3e, 0x87a2: 0xe0000f53, 0x87a3: 0xe0000f50, + 0x87a4: 0xe0000f26, 0x87a5: 0xe0000f22, 0x87a6: 0xe0000f3a, 0x87a7: 0xe0000f36, + 0x87a8: 0xe0000f5a, 0x87a9: 0xe0000f56, 0x87aa: 0xe0000f93, 0x87ab: 0xe0000f90, + 0x87ac: 0xe0000f9f, 0x87ad: 0xe0000f9c, 0x87ae: 0xe0000fb1, 0x87af: 0xe0000fae, + 0x87b0: 0xe0000fab, 0x87b1: 0xe0000fa8, 0x87b2: 0xe0001093, 0x87b3: 0xe0001090, + 0x87b4: 0xe000109f, 0x87b5: 0xe000109c, 0x87b6: 0xe0001099, 0x87b7: 0xe0001096, + 0x87b8: 0xe00027c7, 0x87b9: 0xe00027c4, 0x87ba: 0xe0001046, 0x87bb: 0xe0001042, + 0x87bc: 0xe00010a9, 0x87bd: 0xe00010a6, 0x87be: 0xe00010af, 0x87bf: 0xe00010ac, + // Block 0x21f, offset 0x87c0 + 0x87c0: 0xe00010d2, 0x87c1: 0xe00010cf, 0x87c2: 0xe00010cc, 0x87c3: 0xe00010c9, + 0x87c4: 0xe00010e1, 0x87c5: 0xe00010de, 0x87c6: 0xe00010e7, 0x87c7: 0xe00010e4, + 0x87c8: 0xe00010ed, 0x87c9: 0xe00010ea, 0x87ca: 0xe00010fc, 0x87cb: 0xe00010f9, + 0x87cc: 0xe00010f6, 0x87cd: 0xe00010f3, 0x87ce: 0xe0001123, 0x87cf: 0xe0001120, + 0x87d0: 0xe0001141, 0x87d1: 0xe000113e, 0x87d2: 0xe0001153, 0x87d3: 0xe0001150, + 0x87d4: 0xe0001159, 0x87d5: 0xe0001156, 0x87d6: 0xe0000c15, 0x87d7: 0xe0000f8d, + 0x87d8: 0xe00010db, 0x87d9: 0xe0001111, 0x87da: 0xf0000404, 0x87db: 0xe0000f70, + 0x87dc: 0x40300420, 0x87dd: 0x40300620, 0x87de: 0xe0000f7f, 0x87df: 0x402c9620, + 0x87e0: 0xe000099b, 0x87e1: 0xe0000998, 0x87e2: 0xe0000989, 0x87e3: 0xe0000986, + 0x87e4: 0xe0002791, 0x87e5: 0xe000278e, 0x87e6: 0xe0000930, 0x87e7: 0xe000092c, + 0x87e8: 0xe0000940, 0x87e9: 0xe000093c, 0x87ea: 0xe0000938, 0x87eb: 0xe0000934, + 0x87ec: 0xe00009aa, 0x87ed: 0xe00009a6, 0x87ee: 0xe000278b, 0x87ef: 0xe0002788, + 0x87f0: 0xe000090a, 0x87f1: 0xe0000906, 0x87f2: 0xe000091a, 0x87f3: 0xe0000916, + 0x87f4: 0xe0000912, 0x87f5: 0xe000090e, 0x87f6: 0xe00009a2, 0x87f7: 0xe000099e, + 0x87f8: 0xe0000b6e, 0x87f9: 0xe0000b6b, 0x87fa: 0xe0000b5c, 0x87fb: 0xe0000b59, + 0x87fc: 0xe0000b26, 0x87fd: 0xe0000b23, 0x87fe: 0xe0002797, 0x87ff: 0xe0002794, + // Block 0x220, offset 0x8800 + 0x8800: 0xe0000b03, 0x8801: 0xe0000aff, 0x8802: 0xe0000b13, 0x8803: 0xe0000b0f, + 0x8804: 0xe0000b0b, 0x8805: 0xe0000b07, 0x8806: 0xe0000b75, 0x8807: 0xe0000b71, + 0x8808: 0xe0000c66, 0x8809: 0xe0000c63, 0x880a: 0xe0000c78, 0x880b: 0xe0000c75, + 0x880c: 0xe0000e84, 0x880d: 0xe0000e81, 0x880e: 0xe0000e44, 0x880f: 0xe0000e41, + 0x8810: 0xe00027a9, 0x8811: 0xe00027a6, 0x8812: 0xe0000db5, 0x8813: 0xe0000db1, + 0x8814: 0xe0000dc5, 0x8815: 0xe0000dc1, 0x8816: 0xe0000dbd, 0x8817: 0xe0000db9, + 0x8818: 0xe0000e8b, 0x8819: 0xe0000e87, 0x881a: 0xe00027bb, 0x881b: 0xe00027b8, + 0x881c: 0xe0000e65, 0x881d: 0xe0000e61, 0x881e: 0xe0000e75, 0x881f: 0xe0000e71, + 0x8820: 0xe0000e6d, 0x8821: 0xe0000e69, 0x8822: 0xe0000e7d, 0x8823: 0xe0000e79, + 0x8824: 0xe000108d, 0x8825: 0xe000108a, 0x8826: 0xe000104d, 0x8827: 0xe000104a, + 0x8828: 0xe00027cd, 0x8829: 0xe00027ca, 0x882a: 0xe000106e, 0x882b: 0xe000106a, + 0x882c: 0xe000107e, 0x882d: 0xe000107a, 0x882e: 0xe0001076, 0x882f: 0xe0001072, + 0x8830: 0xe0001086, 0x8831: 0xe0001082, 0x8832: 0xe0001108, 0x8833: 0xe0001105, + 0x8834: 0xe0001135, 0x8835: 0xe0001132, 0x8836: 0xe000112f, 0x8837: 0xe000112c, + 0x8838: 0xe000111d, 0x8839: 0xe000111a, 0x883a: 0xe0000d0a, 0x883b: 0xe0000d07, + 0x883c: 0x0030d888, 0x883d: 0x4030d820, 0x883e: 0x00312088, 0x883f: 0x40312020, + // Block 0x221, offset 0x8840 + 0x8840: 0xa0000000, 0x8841: 0xa0000000, 0x8842: 0xa0000000, 0x8843: 0xa0000000, + 0x8844: 0xa0000000, 0x8845: 0xa0000000, 0x8846: 0xa0000000, 0x8847: 0xa0000000, + 0x8848: 0xa0000000, 0x8849: 0x40020020, 0x884a: 0x40020220, 0x884b: 0x40020420, + 0x884c: 0x40020620, 0x884d: 0x40020820, 0x884e: 0xa0000000, 0x884f: 0xa0000000, + 0x8850: 0xa0000000, 0x8851: 0xa0000000, 0x8852: 0xa0000000, 0x8853: 0xa0000000, + 0x8854: 0xa0000000, 0x8855: 0xa0000000, 0x8856: 0xa0000000, 0x8857: 0xa0000000, + 0x8858: 0xa0000000, 0x8859: 0xa0000000, 0x885a: 0xa0000000, 0x885b: 0xa0000000, + 0x885c: 0xa0000000, 0x885d: 0xa0000000, 0x885e: 0xa0000000, 0x885f: 0xa0000000, + 0x8860: 0x40021220, 0x8861: 0x4002ba20, 0x8862: 0x4003e020, 0x8863: 0x4004ea20, + 0x8864: 0x4027de20, 0x8865: 0x4004ec20, 0x8866: 0x4004e620, 0x8867: 0x4003d220, + 0x8868: 0x4003f420, 0x8869: 0x4003f620, 0x886a: 0x4004d820, 0x886b: 0x40093820, + 0x886c: 0x40024020, 0x886d: 0x40021a20, 0x886e: 0x4002e420, 0x886f: 0x4004e220, + 0x8870: 0x4029cc20, 0x8871: 0x4029ce20, 0x8872: 0x4029d020, 0x8873: 0x4029d220, + 0x8874: 0x4029d420, 0x8875: 0x4029d620, 0x8876: 0x4029d820, 0x8877: 0x4029da20, + 0x8878: 0x4029dc20, 0x8879: 0x4029de20, 0x887a: 0x40026c20, 0x887b: 0x40026220, + 0x887c: 0x40094020, 0x887d: 0xc32f0851, 0x887e: 0x40094420, 0x887f: 0x4002c420, + // Block 0x222, offset 0x8880 + 0x8880: 0x4004d620, 0x8881: 0xc3f10a51, 0x8882: 0x002c0a88, 0x8883: 0x002c3a88, + 0x8884: 0x002c6288, 0x8885: 0xc3920a11, 0x8886: 0x002d0888, 0x8887: 0x002d2288, + 0x8888: 0x002d6888, 0x8889: 0x002d9a88, 0x888a: 0x002dcc88, 0x888b: 0xc3ec0ce1, + 0x888c: 0xc0030002, 0x888d: 0x002e8288, 0x888e: 0x002e9e88, 0x888f: 0xc3970951, + 0x8890: 0x002f2c88, 0x8891: 0x002f5688, 0x8892: 0x002f7a88, 0x8893: 0x002fe688, + 0x8894: 0x00302c88, 0x8895: 0xc3840951, 0x8896: 0x0030be88, 0x8897: 0x0030e288, + 0x8898: 0x0030f688, 0x8899: 0x00310088, 0x889a: 0x00312a88, 0x889b: 0x4003f820, + 0x889c: 0x4004e420, 0x889d: 0x4003fa20, 0x889e: 0x40062420, 0x889f: 0x40021620, + 0x88a0: 0x40061e20, 0x88a1: 0xc3ee0a51, 0x88a2: 0x402c0a20, 0x88a3: 0x402c3a20, + 0x88a4: 0x402c6220, 0x88a5: 0xc3900a11, 0x88a6: 0x402d0820, 0x88a7: 0x402d2220, + 0x88a8: 0x402d6820, 0x88a9: 0x402d9a20, 0x88aa: 0x402dcc20, 0x88ab: 0x402dfe20, + 0x88ac: 0xc0000002, 0x88ad: 0x402e8220, 0x88ae: 0x402e9e20, 0x88af: 0xc3940951, + 0x88b0: 0x402f2c20, 0x88b1: 0x402f5620, 0x88b2: 0x402f7a20, 0x88b3: 0x402fe620, + 0x88b4: 0x40302c20, 0x88b5: 0xc3810951, 0x88b6: 0x4030be20, 0x88b7: 0x4030e220, + 0x88b8: 0x4030f620, 0x88b9: 0x40310020, 0x88ba: 0x40312a20, 0x88bb: 0x4003fc20, + 0x88bc: 0x40094820, 0x88bd: 0x4003fe20, 0x88be: 0x40094c20, 0x88bf: 0xa0000000, + // Block 0x223, offset 0x88c0 + 0x88c0: 0xe0000983, 0x88c1: 0xe0000980, 0x88c2: 0xe00008fb, 0x88c3: 0xe00008f8, + 0x88c4: 0xe000097d, 0x88c5: 0xe000097a, 0x88c6: 0xe0000a38, 0x88c7: 0xe0000a35, + 0x88c8: 0xe0000a3e, 0x88c9: 0xe0000a3b, 0x88ca: 0xe0000a4a, 0x88cb: 0xe0000a47, + 0x88cc: 0xe0000a44, 0x88cd: 0xe0000a41, 0x88ce: 0xe0000a86, 0x88cf: 0xe0000a83, + 0x88d0: 0x002c62a3, 0x88d1: 0x402c6221, 0x88d2: 0xe0000b46, 0x88d3: 0xe0000b43, + 0x88d4: 0xe0000aee, 0x88d5: 0xe0000aeb, 0x88d6: 0xe0000b2c, 0x88d7: 0xe0000b29, + 0x88d8: 0x00320cc3, 0x88d9: 0x40320c22, 0x88da: 0xe0000b1a, 0x88db: 0xe0000b17, + 0x88dc: 0xe0000bb8, 0x88dd: 0xe0000bb5, 0x88de: 0xe0000bb2, 0x88df: 0xe0000baf, + 0x88e0: 0xe0000bc4, 0x88e1: 0xe0000bc1, 0x88e2: 0xe0000bca, 0x88e3: 0xe0000bc7, + 0x88e4: 0xe0000bee, 0x88e5: 0xe0000beb, 0x88e6: 0xe0000c1b, 0x88e7: 0xe0000c18, + 0x88e8: 0xe0000c51, 0x88e9: 0xe0000c4e, 0x88ea: 0xe0000c60, 0x88eb: 0xe0000c5d, + 0x88ec: 0xe0000c31, 0x88ed: 0xe0000c2e, 0x88ee: 0xe0000c5a, 0x88ef: 0xe0000c57, + 0x88f0: 0xe0000c54, 0x88f1: 0x402da220, 0x88f2: 0xf0000a0a, 0x88f3: 0xf0000404, + 0x88f4: 0xe0000c8a, 0x88f5: 0xe0000c87, 0x88f6: 0xe0000c9f, 0x88f7: 0xe0000c9c, + 0x88f8: 0x402f5621, 0x88f9: 0xe0000ccc, 0x88fa: 0xe0000cc9, 0x88fb: 0xe0000cd8, + 0x88fc: 0xe0000cd5, 0x88fd: 0xe0000cd2, 0x88fe: 0xe0000ccf, 0x88ff: 0xe0000d04, + // Block 0x224, offset 0x8900 + 0x8900: 0x4062ac20, 0x8901: 0xe0002526, 0x8902: 0x4062b020, 0x8903: 0x4062b220, + 0x8904: 0xe0002532, 0x8905: 0x4062b620, 0x8906: 0x4062b820, 0x8907: 0x4062ba20, + 0x8908: 0xe000254a, 0x8909: 0x4062be20, 0x890a: 0xe0002550, 0x890b: 0x4062c220, + 0x890c: 0x4062c420, 0x890d: 0xe0002553, 0x890e: 0x4062c820, 0x890f: 0x4062ca20, + 0x8910: 0x4062cc20, 0x8911: 0x4062ce20, 0x8912: 0x4062d020, 0x8913: 0xe00027ef, + 0x8914: 0xe00027f2, 0x8915: 0xe00027f5, 0x8916: 0xe00027f8, 0x8917: 0xe0002801, + 0x8918: 0xe000280b, 0x8919: 0xe0002815, 0x891a: 0xe0002547, 0x891b: 0xe0002830, + 0x891c: 0xe000283c, 0x891d: 0xe0002846, 0x891e: 0xe000284f, 0x891f: 0xe0002852, + 0x8920: 0xe0002855, 0x8921: 0xe000254d, 0x8922: 0xe000285f, 0x8923: 0xe0002863, + 0x8924: 0xe0002867, 0x8925: 0xe000286b, 0x8926: 0xe000286f, 0x8927: 0xe0002876, + 0x8928: 0xe0002879, 0x8929: 0xe000287c, 0x892a: 0xe000287f, 0x892b: 0xe0002873, + 0x892c: 0xe000285b, 0x892d: 0xe0002885, 0x892e: 0xe0002888, 0x892f: 0xe000288b, + 0x8930: 0xe000288e, 0x8931: 0xe0002891, 0x8932: 0xe0002894, 0x8933: 0xe0002897, + 0x8934: 0xe000289b, 0x8935: 0xe000289f, 0x8936: 0xe00028a2, 0x8937: 0xe00028a5, + 0x8938: 0xe00028a8, 0x8939: 0xe00028ab, 0x893a: 0xe00028ae, 0x893b: 0xe00028b1, + 0x893c: 0x40632420, 0x893d: 0x40632620, 0x893e: 0x40632820, 0x893f: 0x40632a20, + // Block 0x225, offset 0x8940 + 0x8940: 0x40632c20, 0x8941: 0xe00028b4, 0x8942: 0xe00028bb, 0x8943: 0xe00028be, + 0x8944: 0xe00028c1, 0x8945: 0xe00028c4, 0x8946: 0x40633820, 0x8947: 0xe00028c7, + 0x8948: 0xe00028ca, 0x8949: 0xe00028cd, 0x894a: 0xe00028d3, 0x894b: 0xe00028d6, + 0x894c: 0x40634420, 0x894d: 0xe00028d9, 0x894e: 0x40634820, 0x894f: 0x40634a20, + 0x8950: 0x40634c20, 0x8951: 0x40634e20, 0x8952: 0xe00028dc, 0x8953: 0xe00028df, + 0x8954: 0x40635420, 0x8955: 0x40635620, 0x8956: 0xe00028e2, 0x8957: 0xe00028e5, + 0x8958: 0xe00028f4, 0x8959: 0x40635e20, 0x895a: 0xe00027d9, 0x895b: 0xe00027fb, + 0x895c: 0xe000252c, 0x895d: 0xe000252f, 0x895e: 0xe0002804, 0x895f: 0x4063a420, + 0x8960: 0x4063a620, 0x8961: 0x4063a820, 0x8962: 0xe0002556, 0x8963: 0x4063ac20, + 0x8964: 0xe0002559, 0x8965: 0x4063b020, 0x8966: 0xe000255c, 0x8967: 0x4063b420, + 0x8968: 0xe000255f, 0x8969: 0x4063b820, 0x896a: 0xe0002562, 0x896b: 0xe0002565, + 0x896c: 0xe0002569, 0x896d: 0x4063c020, 0x896e: 0x4063c220, 0x896f: 0xe000256c, + 0x8970: 0xe000256f, 0x8971: 0xe0002573, 0x8972: 0x4063ca20, 0x8973: 0x4063cc20, + 0x8974: 0x4063ce20, 0x8975: 0x4063d020, 0x8976: 0xe00028f7, 0x8977: 0xe00028fa, + 0x8978: 0xe0002900, 0x8979: 0xe0002903, 0x897a: 0xe0002909, 0x897b: 0xe000290c, + 0x897c: 0xe000290f, 0x897d: 0xe0002915, 0x897e: 0xe0002918, 0x897f: 0xe0002922, + // Block 0x226, offset 0x8980 + 0x8980: 0xe0002925, 0x8981: 0xe0002929, 0x8982: 0xe000292d, 0x8983: 0xe0002930, + 0x8984: 0xe0002933, 0x8985: 0xe0002936, 0x8986: 0xe000293a, 0x8987: 0xe000293d, + 0x8988: 0xe0002940, 0x8989: 0xe0002943, 0x898a: 0xe0002946, 0x898b: 0xe000294a, + 0x898c: 0xe000294e, 0x898d: 0xe0002952, 0x898e: 0xe0002955, 0x898f: 0xe0002958, + 0x8990: 0xe000295b, 0x8991: 0xe000295f, 0x8992: 0xe0002962, 0x8993: 0xe0002966, + 0x8994: 0xe0002969, 0x8995: 0xe000296c, 0x8996: 0xe000296f, 0x8997: 0xe0002972, + 0x8998: 0xe0002975, 0x8999: 0xe0002978, 0x899a: 0xe000297b, 0x899b: 0xe000297e, + 0x899c: 0xe0002981, 0x899d: 0x40642020, 0x899e: 0x40642220, 0x899f: 0x40642420, + 0x89a0: 0x40642620, 0x89a1: 0x40642820, 0x89a2: 0x40642a20, 0x89a3: 0xe00028fd, + 0x89a4: 0xe0002906, 0x89a5: 0xe0002912, 0x89a6: 0xe000291b, 0x89a7: 0xe000291e, + 0x89a8: 0x4062ac20, 0x89a9: 0xe0002526, 0x89aa: 0xe0002529, 0x89ab: 0x4062b020, + 0x89ac: 0xe000252c, 0x89ad: 0xe000252f, 0x89ae: 0x4062b220, 0x89af: 0x4062b620, + 0x89b0: 0xe0002535, 0x89b1: 0xe0002538, 0x89b2: 0xe000253b, 0x89b3: 0xe000253e, + 0x89b4: 0xe0002541, 0x89b5: 0xe0002544, 0x89b6: 0xe0002547, 0x89b7: 0x4062b820, + 0x89b8: 0x4062ba20, 0x89b9: 0xe000254d, 0x89ba: 0x4062be20, 0x89bb: 0xe0002550, + 0x89bc: 0x4062c220, 0x89bd: 0x4062c420, 0x89be: 0x4062c820, 0x89bf: 0x4062ca20, + // Block 0x227, offset 0x89c0 + 0x89c0: 0x4062cc20, 0x89c1: 0x4062ce20, 0x89c2: 0x4062d020, 0x89c3: 0xe00027dc, + 0x89c4: 0xe00027e2, 0x89c5: 0xe00027ef, 0x89c6: 0xe00027f5, 0x89c7: 0xe00027fb, + 0x89c8: 0x4064a420, 0x89c9: 0xe00027fe, 0x89ca: 0xe0002801, 0x89cb: 0xe0002804, + 0x89cc: 0xe0002807, 0x89cd: 0xe000280b, 0x89ce: 0xe000280e, 0x89cf: 0xe0002811, + 0x89d0: 0xe0002815, 0x89d1: 0xe0002818, 0x89d2: 0xe000281c, 0x89d3: 0xe0002820, + 0x89d4: 0xe0002828, 0x89d5: 0xe0002824, 0x89d6: 0xe000282c, 0x89d7: 0x4064c220, + 0x89d8: 0xe0002833, 0x89d9: 0x4064c620, 0x89da: 0xe0002836, 0x89db: 0xe0002839, + 0x89dc: 0xe000283c, 0x89dd: 0xe000283f, 0x89de: 0xe0002842, 0x89df: 0x4064d220, + 0x89e0: 0xe0002849, 0x89e1: 0xe000284c, 0x89e2: 0xe0002846, 0x89e3: 0xe0002858, + 0x89e4: 0xe000287f, 0x89e5: 0xe0002882, 0x89e6: 0xe0002873, 0x89e7: 0xe0002885, + 0x89e8: 0xe000288b, 0x89e9: 0xe000288e, 0x89ea: 0xe0002894, 0x89eb: 0x4064ea20, + 0x89ec: 0xe00028b4, 0x89ed: 0xe00028b7, 0x89ee: 0xe00028c7, 0x89ef: 0xe00028d0, + 0x89f0: 0x4064f420, 0x89f1: 0x4064f620, 0x89f2: 0x4064f820, 0x89f3: 0xe00028e2, + 0x89f4: 0xe00028e5, 0x89f5: 0xe00028e8, 0x89f6: 0xe00028eb, 0x89f7: 0xe00028ee, + 0x89f8: 0xe00028f1, 0x89f9: 0x40650620, 0x89fa: 0xe00027d6, 0x89fb: 0xe00027df, + 0x89fc: 0xe00027e6, 0x89fd: 0xe00027e9, 0x89fe: 0xe00027ec, 0x89ff: 0xe00027f2, + // Block 0x228, offset 0x8a00 + 0x8a00: 0xc3f40cf1, 0x8a01: 0x4062ac21, 0x8a02: 0x4062b020, 0x8a03: 0xc3f60d21, + 0x8a04: 0x4062b221, 0x8a05: 0x4062b620, 0x8a06: 0x4062b820, 0x8a07: 0xc3f80d51, + 0x8a08: 0x4062ba21, 0x8a09: 0xc3fa0d81, 0x8a0a: 0x4062be21, 0x8a0b: 0x4062c220, + 0x8a0c: 0xc3fc0db1, 0x8a0d: 0x4062c421, 0x8a0e: 0x4062c820, 0x8a0f: 0x4062ca20, + 0x8a10: 0x4062cc20, 0x8a11: 0x4062ce20, 0x8a12: 0x4062d020, 0x8a13: 0x4062d220, + 0x8a14: 0x4062d420, 0x8a15: 0x4062d620, 0x8a16: 0x4062d820, 0x8a17: 0x4062da20, + 0x8a18: 0x4062dc20, 0x8a19: 0x4062de20, 0x8a1a: 0x4062e020, 0x8a1b: 0x4062e220, + 0x8a1c: 0x4062e420, 0x8a1d: 0x4062e620, 0x8a1e: 0x4062e820, 0x8a1f: 0x4062ea20, + 0x8a20: 0x4062ec20, 0x8a21: 0x4062ee20, 0x8a22: 0x4062f020, 0x8a23: 0x4062f220, + 0x8a24: 0x4062f420, 0x8a25: 0x4062f620, 0x8a26: 0x4062f820, 0x8a27: 0x4062fa20, + 0x8a28: 0x4062fc20, 0x8a29: 0x4062fe20, 0x8a2a: 0x40630020, 0x8a2b: 0x40630220, + 0x8a2c: 0x40630420, 0x8a2d: 0x40630620, 0x8a2e: 0x40630820, 0x8a2f: 0x40630a20, + 0x8a30: 0x40630c20, 0x8a31: 0x40630e20, 0x8a32: 0x40631020, 0x8a33: 0x40631220, + 0x8a34: 0x40631420, 0x8a35: 0x40631620, 0x8a36: 0x40631820, 0x8a37: 0x40631a20, + 0x8a38: 0x40631c20, 0x8a39: 0x40631e20, 0x8a3a: 0x40632020, 0x8a3b: 0x40632220, + 0x8a3c: 0x40632420, 0x8a3d: 0x40632620, 0x8a3e: 0x40632820, 0x8a3f: 0x40632a20, + // Block 0x229, offset 0x8a40 + 0x8a40: 0x40632c20, 0x8a41: 0x40632e20, 0x8a42: 0x40633020, 0x8a43: 0x40633220, + 0x8a44: 0x40633420, 0x8a45: 0x40633620, 0x8a46: 0x40633820, 0x8a47: 0x40633a20, + 0x8a48: 0x40633c20, 0x8a49: 0x40633e20, 0x8a4a: 0x40634020, 0x8a4b: 0x40634220, + 0x8a4c: 0x40634420, 0x8a4d: 0x40634620, 0x8a4e: 0x40634820, 0x8a4f: 0x40634a20, + 0x8a50: 0x40634c20, 0x8a51: 0x40634e20, 0x8a52: 0x40635020, 0x8a53: 0x40635220, + 0x8a54: 0x40635420, 0x8a55: 0x40635620, 0x8a56: 0x40635820, 0x8a57: 0x40635a20, + 0x8a58: 0x40635c20, 0x8a59: 0x40635e20, 0x8a5a: 0x40636020, 0x8a5b: 0x40636220, + 0x8a5c: 0x40636420, 0x8a5d: 0x40636620, 0x8a5e: 0x40636820, 0x8a5f: 0x4063a420, + 0x8a60: 0x4063a620, 0x8a61: 0xa0002502, 0x8a62: 0xa0002602, 0x8a63: 0xa0002702, + 0x8a64: 0xa0002802, 0x8a65: 0xa0002902, 0x8a66: 0xa0002a02, 0x8a67: 0xa0002b02, + 0x8a68: 0xa0002c02, 0x8a69: 0xa0002d02, 0x8a6a: 0xa0002e02, 0x8a6b: 0xa0002f02, + 0x8a6c: 0xa0003002, 0x8a6d: 0xa0003102, 0x8a6e: 0xa0003202, 0x8a6f: 0xa0003302, + 0x8a70: 0xa0003402, 0x8a71: 0xa0003502, 0x8a72: 0xa0003602, 0x8a73: 0xa0003702, + 0x8a74: 0xa0003802, 0x8a75: 0xa0003902, 0x8a76: 0x4063d220, 0x8a77: 0x4063d420, + 0x8a78: 0x4063d620, 0x8a79: 0x4063d820, 0x8a7a: 0x4063da20, 0x8a7b: 0x4063dc20, + 0x8a7c: 0x4063de20, 0x8a7d: 0x4063e020, 0x8a7e: 0x4063e220, 0x8a7f: 0x4063e420, + // Block 0x22a, offset 0x8a80 + 0x8a80: 0x4063e620, 0x8a81: 0x4063e820, 0x8a82: 0x4063ea20, 0x8a83: 0x4063ec20, + 0x8a84: 0x4063ee20, 0x8a85: 0x4063f020, 0x8a86: 0x4063f220, 0x8a87: 0x4063f420, + 0x8a88: 0x4063f620, 0x8a89: 0x4063f820, 0x8a8a: 0x4063fa20, 0x8a8b: 0x4063fc20, + 0x8a8c: 0x4063fe20, 0x8a8d: 0x40640020, 0x8a8e: 0x40640220, 0x8a8f: 0x40640420, + 0x8a90: 0x40640620, 0x8a91: 0x40640820, 0x8a92: 0x40640a20, 0x8a93: 0x40640c20, + 0x8a94: 0x40640e20, 0x8a95: 0x40641020, 0x8a96: 0x40641220, 0x8a97: 0x40641420, + 0x8a98: 0x40641620, 0x8a99: 0x40641820, 0x8a9a: 0x40641a20, 0x8a9b: 0x40641c20, + 0x8a9c: 0x40641e20, 0x8a9d: 0x40642020, 0x8a9e: 0x40642220, 0x8a9f: 0x40642420, + 0x8aa0: 0x40642620, 0x8aa1: 0x40642820, 0x8aa2: 0x40642a20, 0x8aa3: 0x40642c20, + 0x8aa4: 0x40642e20, 0x8aa5: 0x40643020, 0x8aa6: 0x40643220, 0x8aa7: 0x40643420, + 0x8aa8: 0xa0003a02, 0x8aa9: 0xa0003b02, 0x8aaa: 0xa0003c02, 0x8aab: 0xa0003d02, + 0x8aac: 0xa0003e02, 0x8aad: 0xa0003f02, 0x8aae: 0xa0004002, 0x8aaf: 0xa0004102, + 0x8ab0: 0xa0004202, 0x8ab1: 0xa0004302, 0x8ab2: 0xa0004402, 0x8ab3: 0xa0004502, + 0x8ab4: 0xa0004602, 0x8ab5: 0xa0004702, 0x8ab6: 0xa0004802, 0x8ab7: 0xa0004902, + 0x8ab8: 0xa0004a02, 0x8ab9: 0xa0004b02, 0x8aba: 0xa0004c02, 0x8abb: 0xa0004d02, + 0x8abc: 0xa0004e02, 0x8abd: 0xa0004f02, 0x8abe: 0xa0005002, 0x8abf: 0xa0005102, + // Block 0x22b, offset 0x8ac0 + 0x8ac0: 0xa0005202, 0x8ac1: 0xa0005302, 0x8ac2: 0xa0005402, 0x8ac3: 0x40649a20, + 0x8ac4: 0x40649c20, 0x8ac5: 0x40649e20, 0x8ac6: 0x4064a020, 0x8ac7: 0x4064a220, + 0x8ac8: 0x4064a420, 0x8ac9: 0x4064a620, 0x8aca: 0x4064a820, 0x8acb: 0x4064aa20, + 0x8acc: 0x4064ac20, 0x8acd: 0x4064ae20, 0x8ace: 0x4064b020, 0x8acf: 0x4064b220, + 0x8ad0: 0x4064b420, 0x8ad1: 0x4064b620, 0x8ad2: 0x4064b820, 0x8ad3: 0x4064ba20, + 0x8ad4: 0x4064bc20, 0x8ad5: 0x4064be20, 0x8ad6: 0x4064c020, 0x8ad7: 0x4064c220, + 0x8ad8: 0x4064c420, 0x8ad9: 0x4064c620, 0x8ada: 0x4064c820, 0x8adb: 0x4064ca20, + 0x8adc: 0x4064cc20, 0x8add: 0x4064ce20, 0x8ade: 0x4064d020, 0x8adf: 0x4064d220, + 0x8ae0: 0x4064d420, 0x8ae1: 0x4064d620, 0x8ae2: 0x4064d820, 0x8ae3: 0x4064da20, + 0x8ae4: 0x4064dc20, 0x8ae5: 0x4064de20, 0x8ae6: 0x4064e020, 0x8ae7: 0x4064e220, + 0x8ae8: 0x4064e420, 0x8ae9: 0x4064e620, 0x8aea: 0x4064e820, 0x8aeb: 0x4064ea20, + 0x8aec: 0x4064ec20, 0x8aed: 0x4064ee20, 0x8aee: 0x4064f020, 0x8aef: 0x4064f220, + 0x8af0: 0x4064f420, 0x8af1: 0x4064f620, 0x8af2: 0x4064f820, 0x8af3: 0x4064fa20, + 0x8af4: 0x4064fc20, 0x8af5: 0x4064fe20, 0x8af6: 0x40650020, 0x8af7: 0x40650220, + 0x8af8: 0x40650420, 0x8af9: 0x40650620, 0x8afa: 0x40650820, 0x8afb: 0x40650a20, + 0x8afc: 0x40650c20, 0x8afd: 0x40650e20, 0x8afe: 0x40651020, 0x8aff: 0x40651220, + // Block 0x22c, offset 0x8b00 + 0x8b05: 0x4065da20, 0x8b06: 0x4065dc20, 0x8b07: 0x4065de20, + 0x8b08: 0x4065e020, 0x8b09: 0x4065e420, 0x8b0a: 0x4065e620, 0x8b0b: 0x4065e820, + 0x8b0c: 0x4065ea20, 0x8b0d: 0x4065ec20, 0x8b0e: 0x4065ee20, 0x8b0f: 0x4065f420, + 0x8b10: 0x4065f620, 0x8b11: 0x4065f820, 0x8b12: 0x4065fa20, 0x8b13: 0x4065fe20, + 0x8b14: 0x40660020, 0x8b15: 0x40660220, 0x8b16: 0x40660420, 0x8b17: 0x40660620, + 0x8b18: 0x40660820, 0x8b19: 0x40660a20, 0x8b1a: 0x40661220, 0x8b1b: 0x40661420, + 0x8b1c: 0x40661820, 0x8b1d: 0x40661a20, 0x8b1e: 0x40661e20, 0x8b1f: 0x40662020, + 0x8b20: 0x40662220, 0x8b21: 0x40662420, 0x8b22: 0x40662620, 0x8b23: 0x40662820, + 0x8b24: 0x40662a20, 0x8b25: 0x40662e20, 0x8b26: 0x40663620, 0x8b27: 0x40663820, + 0x8b28: 0x40663a20, 0x8b29: 0x40663c20, 0x8b2a: 0x4065e220, 0x8b2b: 0x4065f020, + 0x8b2c: 0x4065fc20, 0x8b2d: 0x40663e20, + 0x8b31: 0x0062ac84, 0x8b32: 0x0062aca3, 0x8b33: 0x00646884, + 0x8b34: 0x0062b084, 0x8b35: 0x00646c84, 0x8b36: 0x00646e84, 0x8b37: 0x0062b284, + 0x8b38: 0x0062b2a3, 0x8b39: 0x0062b684, 0x8b3a: 0x00647484, 0x8b3b: 0x00647684, + 0x8b3c: 0x00647884, 0x8b3d: 0x00647a84, 0x8b3e: 0x00647c84, 0x8b3f: 0x00647e84, + // Block 0x22d, offset 0x8b40 + 0x8b40: 0x0062e084, 0x8b41: 0x0062b884, 0x8b42: 0x0062ba84, 0x8b43: 0x0062baa3, + 0x8b44: 0x0062ee84, 0x8b45: 0x0062be84, 0x8b46: 0x0062bea3, 0x8b47: 0x0062c284, + 0x8b48: 0x0062c484, 0x8b49: 0x0062c4a3, 0x8b4a: 0x0062c884, 0x8b4b: 0x0062ca84, + 0x8b4c: 0x0062cc84, 0x8b4d: 0x0062ce84, 0x8b4e: 0x0062d084, 0x8b4f: 0x0063a884, + 0x8b50: 0x0063aa84, 0x8b51: 0x0063ac84, 0x8b52: 0x0063ae84, 0x8b53: 0x0063b084, + 0x8b54: 0x0063b284, 0x8b55: 0x0063b484, 0x8b56: 0x0063b684, 0x8b57: 0x0063b884, + 0x8b58: 0x0063ba84, 0x8b59: 0x0063bc84, 0x8b5a: 0x0063be84, 0x8b5b: 0x0063c084, + 0x8b5c: 0x0063c284, 0x8b5d: 0x0063c484, 0x8b5e: 0x0063c684, 0x8b5f: 0x0063c884, + 0x8b60: 0x0063ca84, 0x8b61: 0x0063cc84, 0x8b62: 0x0063ce84, 0x8b63: 0x0063d084, + 0x8b64: 0x0063a684, 0x8b65: 0x0062d484, 0x8b66: 0x0062d684, 0x8b67: 0x0064a284, + 0x8b68: 0x0064a484, 0x8b69: 0x0064ac84, 0x8b6a: 0x0064b084, 0x8b6b: 0x0064ba84, + 0x8b6c: 0x0064c284, 0x8b6d: 0x0064c684, 0x8b6e: 0x0062e484, 0x8b6f: 0x0064ce84, + 0x8b70: 0x0064d284, 0x8b71: 0x0062e684, 0x8b72: 0x0062e884, 0x8b73: 0x0062ec84, + 0x8b74: 0x0062f084, 0x8b75: 0x0062f284, 0x8b76: 0x0062fa84, 0x8b77: 0x0062fe84, + 0x8b78: 0x00630284, 0x8b79: 0x00630484, 0x8b7a: 0x00630684, 0x8b7b: 0x00630884, + 0x8b7c: 0x00630a84, 0x8b7d: 0x00631084, 0x8b7e: 0x00631884, 0x8b7f: 0x00632c84, + // Block 0x22e, offset 0x8b80 + 0x8b80: 0xf0000404, 0x8b81: 0xf0000404, 0x8b82: 0xf0000404, 0x8b83: 0xf0000404, + 0x8b84: 0x02aa9e86, 0x8b85: 0x02bcf886, 0x8b86: 0x02cb0e86, 0x8b87: 0x02f71e86, + 0x8b88: 0xe00002e3, 0x8b89: 0xe00003d8, 0x8b8a: 0xe00004b3, 0x8b8b: 0xe000057d, + 0x8b8c: 0xe0000648, 0x8b8d: 0xe00006f0, 0x8b8e: 0xe000079c, 0x8b8f: 0xe0000841, + 0x8b90: 0xe0000ec0, 0x8b91: 0xf0000606, 0x8b92: 0xf0000606, 0x8b93: 0xf0000606, + 0x8b94: 0xf0000606, 0x8b95: 0xf0000606, 0x8b96: 0xf0000606, 0x8b97: 0xf0000606, + 0x8b98: 0xf0000606, 0x8b99: 0xf0000606, 0x8b9a: 0xf0000606, 0x8b9b: 0xf0000606, + 0x8b9c: 0xf0000606, 0x8b9d: 0xf0000606, 0x8b9e: 0xf0000606, 0x8b9f: 0xf0000606, + 0x8ba0: 0x0062ac86, 0x8ba1: 0x0062b086, 0x8ba2: 0x0062b286, 0x8ba3: 0x0062b686, + 0x8ba4: 0x0062b886, 0x8ba5: 0x0062ba86, 0x8ba6: 0x0062be86, 0x8ba7: 0x0062c286, + 0x8ba8: 0x0062c486, 0x8ba9: 0x0062c886, 0x8baa: 0x0062ca86, 0x8bab: 0x0062cc86, + 0x8bac: 0x0062ce86, 0x8bad: 0x0062d086, 0x8bae: 0xe0002984, 0x8baf: 0xe0002987, + 0x8bb0: 0xe000298a, 0x8bb1: 0xe000298d, 0x8bb2: 0xe0002990, 0x8bb3: 0xe0002993, + 0x8bb4: 0xe0002996, 0x8bb5: 0xe0002999, 0x8bb6: 0xe000299f, 0x8bb7: 0xe00029a2, + 0x8bb8: 0xe00029a5, 0x8bb9: 0xe00029a8, 0x8bba: 0xe00029ab, 0x8bbb: 0xe00029ae, + 0x8bbc: 0xe0002127, 0x8bbd: 0xe0002122, 0x8bbe: 0xe000299c, 0x8bbf: 0x4027ac20, + // Block 0x22f, offset 0x8bc0 + 0x8bc0: 0xa0000000, 0x8bc1: 0xa0000000, 0x8bc2: 0xa0000000, 0x8bc3: 0xa0000000, + 0x8bc4: 0xa0000000, 0x8bc5: 0xa0000000, 0x8bc6: 0xa0000000, 0x8bc7: 0xa0000000, + 0x8bc8: 0xa0000000, 0x8bc9: 0x40020020, 0x8bca: 0x40020220, 0x8bcb: 0x40020420, + 0x8bcc: 0x40020620, 0x8bcd: 0x40020820, 0x8bce: 0xa0000000, 0x8bcf: 0xa0000000, + 0x8bd0: 0xa0000000, 0x8bd1: 0xa0000000, 0x8bd2: 0xa0000000, 0x8bd3: 0xa0000000, + 0x8bd4: 0xa0000000, 0x8bd5: 0xa0000000, 0x8bd6: 0xa0000000, 0x8bd7: 0xa0000000, + 0x8bd8: 0xa0000000, 0x8bd9: 0xa0000000, 0x8bda: 0xa0000000, 0x8bdb: 0xa0000000, + 0x8bdc: 0xa0000000, 0x8bdd: 0xa0000000, 0x8bde: 0xa0000000, 0x8bdf: 0xa0000000, + 0x8be0: 0x40021220, 0x8be1: 0x4002ba20, 0x8be2: 0x4003e020, 0x8be3: 0x4004ea20, + 0x8be4: 0x4027de20, 0x8be5: 0x4004ec20, 0x8be6: 0x4004e620, 0x8be7: 0x4003d220, + 0x8be8: 0x4003f420, 0x8be9: 0x4003f620, 0x8bea: 0x4004d820, 0x8beb: 0x40093820, + 0x8bec: 0x40024020, 0x8bed: 0x40021a20, 0x8bee: 0x4002e420, 0x8bef: 0x4004e220, + 0x8bf0: 0x4029cc20, 0x8bf1: 0x4029ce20, 0x8bf2: 0x4029d020, 0x8bf3: 0x4029d220, + 0x8bf4: 0x4029d420, 0x8bf5: 0x4029d620, 0x8bf6: 0x4029d820, 0x8bf7: 0x4029da20, + 0x8bf8: 0x4029dc20, 0x8bf9: 0x4029de20, 0x8bfa: 0x40026c20, 0x8bfb: 0x40026220, + 0x8bfc: 0x40094020, 0x8bfd: 0xc32f0851, 0x8bfe: 0x40094420, 0x8bff: 0x4002c420, + // Block 0x230, offset 0x8c00 + 0x8c00: 0x4004d620, 0x8c01: 0xc40209c3, 0x8c02: 0x002c0a88, 0x8c03: 0x002c3a88, + 0x8c04: 0x002c6288, 0x8c05: 0xc3920a11, 0x8c06: 0x002d0888, 0x8c07: 0x002d2288, + 0x8c08: 0x002d6888, 0x8c09: 0x002d9a88, 0x8c0a: 0x002dcc88, 0x8c0b: 0x002dfe88, + 0x8c0c: 0xc0030002, 0x8c0d: 0x002e8288, 0x8c0e: 0x002e9e88, 0x8c0f: 0xc3970951, + 0x8c10: 0x002f2c88, 0x8c11: 0x002f5688, 0x8c12: 0x002f7a88, 0x8c13: 0x002fe688, + 0x8c14: 0x00302c88, 0x8c15: 0xc3840951, 0x8c16: 0x0030be88, 0x8c17: 0x0030e288, + 0x8c18: 0x0030f688, 0x8c19: 0x00310088, 0x8c1a: 0x00312a88, 0x8c1b: 0x4003f820, + 0x8c1c: 0x4004e420, 0x8c1d: 0x4003fa20, 0x8c1e: 0x40062420, 0x8c1f: 0x40021620, + 0x8c20: 0x40061e20, 0x8c21: 0xc3fe0982, 0x8c22: 0x402c0a20, 0x8c23: 0x402c3a20, + 0x8c24: 0x402c6220, 0x8c25: 0xc3900a11, 0x8c26: 0x402d0820, 0x8c27: 0x402d2220, + 0x8c28: 0x402d6820, 0x8c29: 0x402d9a20, 0x8c2a: 0x402dcc20, 0x8c2b: 0x402dfe20, + 0x8c2c: 0xc0000002, 0x8c2d: 0x402e8220, 0x8c2e: 0x402e9e20, 0x8c2f: 0xc3940951, + 0x8c30: 0x402f2c20, 0x8c31: 0x402f5620, 0x8c32: 0x402f7a20, 0x8c33: 0x402fe620, + 0x8c34: 0x40302c20, 0x8c35: 0xc3810951, 0x8c36: 0x4030be20, 0x8c37: 0x4030e220, + 0x8c38: 0x4030f620, 0x8c39: 0x40310020, 0x8c3a: 0x40312a20, 0x8c3b: 0x4003fc20, + 0x8c3c: 0x40094820, 0x8c3d: 0x4003fe20, 0x8c3e: 0x40094c20, 0x8c3f: 0xa0000000, + // Block 0x231, offset 0x8c40 + 0x8c40: 0xa0000000, 0x8c41: 0xa0000000, 0x8c42: 0xa0000000, 0x8c43: 0xa0000000, + 0x8c44: 0xa0000000, 0x8c45: 0xa0000000, 0x8c46: 0xa0000000, 0x8c47: 0xa0000000, + 0x8c48: 0xa0000000, 0x8c49: 0x40020020, 0x8c4a: 0x40020220, 0x8c4b: 0x40020420, + 0x8c4c: 0x40020620, 0x8c4d: 0x40020820, 0x8c4e: 0xa0000000, 0x8c4f: 0xa0000000, + 0x8c50: 0xa0000000, 0x8c51: 0xa0000000, 0x8c52: 0xa0000000, 0x8c53: 0xa0000000, + 0x8c54: 0xa0000000, 0x8c55: 0xa0000000, 0x8c56: 0xa0000000, 0x8c57: 0xa0000000, + 0x8c58: 0xa0000000, 0x8c59: 0xa0000000, 0x8c5a: 0xa0000000, 0x8c5b: 0xa0000000, + 0x8c5c: 0xa0000000, 0x8c5d: 0xa0000000, 0x8c5e: 0xa0000000, 0x8c5f: 0xa0000000, + 0x8c60: 0x40021220, 0x8c61: 0x4002ba20, 0x8c62: 0x4003e020, 0x8c63: 0x4004ea20, + 0x8c64: 0x4027de20, 0x8c65: 0x4004ec20, 0x8c66: 0x4004e620, 0x8c67: 0x4003d220, + 0x8c68: 0x4003f420, 0x8c69: 0x4003f620, 0x8c6a: 0x4004d820, 0x8c6b: 0x40093820, + 0x8c6c: 0x40024020, 0x8c6d: 0x40021a20, 0x8c6e: 0x4002e420, 0x8c6f: 0x4004e220, + 0x8c70: 0x4029cc20, 0x8c71: 0x4029ce20, 0x8c72: 0x4029d020, 0x8c73: 0x4029d220, + 0x8c74: 0x4029d420, 0x8c75: 0x4029d620, 0x8c76: 0x4029d820, 0x8c77: 0x4029da20, + 0x8c78: 0x4029dc20, 0x8c79: 0x4029de20, 0x8c7a: 0x40026c20, 0x8c7b: 0x40026220, + 0x8c7c: 0x40094020, 0x8c7d: 0xc32f0851, 0x8c7e: 0x40094420, 0x8c7f: 0x4002c420, + // Block 0x232, offset 0x8c80 + 0x8c80: 0x4004d620, 0x8c81: 0xc40d0de1, 0x8c82: 0x002c0a88, 0x8c83: 0xc41508d1, + 0x8c84: 0x002c6288, 0x8c85: 0x002c9888, 0x8c86: 0x002d0888, 0x8c87: 0xc41d08d1, + 0x8c88: 0x002d6888, 0x8c89: 0x002d9a88, 0x8c8a: 0x002dcc88, 0x8c8b: 0xc42108d1, + 0x8c8c: 0xc0030002, 0x8c8d: 0x002e8288, 0x8c8e: 0xc4260e31, 0x8c8f: 0xc4370e61, + 0x8c90: 0x002f2c88, 0x8c91: 0x002f5688, 0x8c92: 0x002f7a88, 0x8c93: 0xc42b08d1, + 0x8c94: 0x00302c88, 0x8c95: 0xc3840951, 0x8c96: 0x0030be88, 0x8c97: 0x0030e288, + 0x8c98: 0x0030f688, 0x8c99: 0x00310088, 0x8c9a: 0xc42f08d1, 0x8c9b: 0x4003f820, + 0x8c9c: 0x4004e420, 0x8c9d: 0x4003fa20, 0x8c9e: 0x40062420, 0x8c9f: 0x40021620, + 0x8ca0: 0x40061e20, 0x8ca1: 0xc4070de1, 0x8ca2: 0x402c0a20, 0x8ca3: 0xc41308d1, + 0x8ca4: 0x402c6220, 0x8ca5: 0x402c9820, 0x8ca6: 0x402d0820, 0x8ca7: 0xc41b08d1, + 0x8ca8: 0x402d6820, 0x8ca9: 0x402d9a20, 0x8caa: 0x402dcc20, 0x8cab: 0xc41f08d1, + 0x8cac: 0xc0000002, 0x8cad: 0x402e8220, 0x8cae: 0xc4230e31, 0x8caf: 0xc4310e61, + 0x8cb0: 0x402f2c20, 0x8cb1: 0x402f5620, 0x8cb2: 0x402f7a20, 0x8cb3: 0xc42908d1, + 0x8cb4: 0x40302c20, 0x8cb5: 0xc3810951, 0x8cb6: 0x4030be20, 0x8cb7: 0x4030e220, + 0x8cb8: 0x4030f620, 0x8cb9: 0x40310020, 0x8cba: 0xc42d08d1, 0x8cbb: 0x4003fc20, + 0x8cbc: 0x40094820, 0x8cbd: 0x4003fe20, 0x8cbe: 0x40094c20, 0x8cbf: 0xa0000000, + // Block 0x233, offset 0x8cc0 + 0x8cc0: 0xe00008f5, 0x8cc1: 0x002c0883, 0x8cc2: 0xe0000921, 0x8cc3: 0x00320ea3, + 0x8cc4: 0x00320e83, 0x8cc5: 0x00320c83, 0x8cc6: 0x00320a83, 0x8cc7: 0xe0000a53, + 0x8cc8: 0xe0000ae8, 0x8cc9: 0xe0000ae2, 0x8cca: 0xe0000af4, 0x8ccb: 0xe0000b20, + 0x8ccc: 0xe0000c2b, 0x8ccd: 0xe0000c25, 0x8cce: 0xe0000c37, 0x8ccf: 0xe0000c43, + 0x8cd0: 0x002c96a3, 0x8cd1: 0x002ee0c3, 0x8cd2: 0xe0000d9a, 0x8cd3: 0xe0000d94, + 0x8cd4: 0x003210e3, 0x8cd5: 0x003210c3, 0x8cd6: 0x00321083, 0x8cd7: 0x40093e20, + 0x8cd8: 0x00320883, 0x8cd9: 0xe0000fe1, 0x8cda: 0xe0000fdb, 0x8cdb: 0xe0000fed, + 0x8cdc: 0x003100a3, 0x8cdd: 0xe0001102, 0x8cde: 0x00306aa3, 0x8cdf: 0xe0000f7b, + 0x8ce0: 0xe00008f2, 0x8ce1: 0x402c0820, 0x8ce2: 0xe000091e, 0x8ce3: 0x40320e21, + 0x8ce4: 0x40320e20, 0x8ce5: 0x40320c20, 0x8ce6: 0x40320a20, 0x8ce7: 0xe0000a4d, + 0x8ce8: 0xe0000ae5, 0x8ce9: 0xe0000adf, 0x8cea: 0xe0000af1, 0x8ceb: 0xe0000b1d, + 0x8cec: 0xe0000c28, 0x8ced: 0xe0000c22, 0x8cee: 0xe0000c34, 0x8cef: 0xe0000c40, + 0x8cf0: 0x402c9621, 0x8cf1: 0x402ee022, 0x8cf2: 0xe0000d97, 0x8cf3: 0xe0000d91, + 0x8cf4: 0x40321023, 0x8cf5: 0x40321022, 0x8cf6: 0x40321020, 0x8cf7: 0x40093c20, + 0x8cf8: 0x40320820, 0x8cf9: 0xe0000fde, 0x8cfa: 0xe0000fd8, 0x8cfb: 0xe0000fea, + 0x8cfc: 0x40310021, 0x8cfd: 0xe00010ff, 0x8cfe: 0x40306a21, 0x8cff: 0xe0001114, + // Block 0x234, offset 0x8d00 + 0x8d00: 0xe0000983, 0x8d01: 0xe0000980, 0x8d02: 0xe00008fb, 0x8d03: 0xe00008f8, + 0x8d04: 0xe000097d, 0x8d05: 0xe000097a, 0x8d06: 0xe0000a38, 0x8d07: 0xe0000a35, + 0x8d08: 0xe0000a3e, 0x8d09: 0xe0000a3b, 0x8d0a: 0xe0000a4a, 0x8d0b: 0xe0000a47, + 0x8d0c: 0x002c5c83, 0x8d0d: 0x402c5c20, 0x8d0e: 0xe0000a86, 0x8d0f: 0xe0000a83, + 0x8d10: 0x002c9683, 0x8d11: 0x402c9620, 0x8d12: 0xe0000b46, 0x8d13: 0xe0000b43, + 0x8d14: 0xe0000aee, 0x8d15: 0xe0000aeb, 0x8d16: 0xe0000b2c, 0x8d17: 0xe0000b29, + 0x8d18: 0xe0000b40, 0x8d19: 0xe0000b3d, 0x8d1a: 0xe0000b1a, 0x8d1b: 0xe0000b17, + 0x8d1c: 0xe0000bb8, 0x8d1d: 0xe0000bb5, 0x8d1e: 0xe0000bb2, 0x8d1f: 0xe0000baf, + 0x8d20: 0xe0000bc4, 0x8d21: 0xe0000bc1, 0x8d22: 0xe0000bca, 0x8d23: 0xe0000bc7, + 0x8d24: 0xe0000bee, 0x8d25: 0xe0000beb, 0x8d26: 0xe0000c1b, 0x8d27: 0xe0000c18, + 0x8d28: 0xe0000c51, 0x8d29: 0xe0000c4e, 0x8d2a: 0xe0000c60, 0x8d2b: 0xe0000c5d, + 0x8d2c: 0xe0000c31, 0x8d2d: 0xe0000c2e, 0x8d2e: 0xe0000c5a, 0x8d2f: 0xe0000c57, + 0x8d30: 0xe0000c54, 0x8d31: 0x402da220, 0x8d32: 0xf0000a0a, 0x8d33: 0xf0000404, + 0x8d34: 0xe0000c8a, 0x8d35: 0xe0000c87, 0x8d36: 0xe0000c9f, 0x8d37: 0xe0000c9c, + 0x8d38: 0x402f7220, 0x8d39: 0xe0000ccc, 0x8d3a: 0xe0000cc9, 0x8d3b: 0xe0000cd8, + 0x8d3c: 0xe0000cd5, 0x8d3d: 0xe0000cd2, 0x8d3e: 0xe0000ccf, 0x8d3f: 0xe0000d04, + // Block 0x235, offset 0x8d40 + 0x8d40: 0xe0000cfe, 0x8d41: 0xe0000cf8, 0x8d42: 0xe0000cf5, 0x8d43: 0x002ee0a3, + 0x8d44: 0x402ee021, 0x8d45: 0xe0000d6f, 0x8d46: 0xe0000d6c, 0x8d47: 0xe0000d5d, + 0x8d48: 0xe0000d5a, 0x8d49: 0xf0000404, 0x8d4a: 0x002ee083, 0x8d4b: 0x402ee020, + 0x8d4c: 0xe0000e2e, 0x8d4d: 0xe0000e2b, 0x8d4e: 0xe0000da0, 0x8d4f: 0xe0000d9d, + 0x8d50: 0x003210a3, 0x8d51: 0x40321021, 0x8d52: 0x003208a3, 0x8d53: 0x40320821, + 0x8d54: 0xe0000eca, 0x8d55: 0xe0000ec7, 0x8d56: 0xe0000edc, 0x8d57: 0xe0000ed9, + 0x8d58: 0xe0000ed0, 0x8d59: 0xe0000ecd, 0x8d5a: 0xe0000f1f, 0x8d5b: 0xe0000f1c, + 0x8d5c: 0xe0000f2d, 0x8d5d: 0xe0000f2a, 0x8d5e: 0xe0000f47, 0x8d5f: 0xe0000f44, + 0x8d60: 0x00302a83, 0x8d61: 0x40302a20, 0x8d62: 0xe0000f99, 0x8d63: 0xe0000f96, + 0x8d64: 0xe0000f8a, 0x8d65: 0xe0000f87, 0x8d66: 0x00306a83, 0x8d67: 0x40306a20, + 0x8d68: 0xe000102b, 0x8d69: 0xe0001028, 0x8d6a: 0xe000103f, 0x8d6b: 0xe000103c, + 0x8d6c: 0xe0000fe7, 0x8d6d: 0xe0000fe4, 0x8d6e: 0xe0000ff9, 0x8d6f: 0xe0000ff6, + 0x8d70: 0x003100c3, 0x8d71: 0x40310022, 0x8d72: 0xe0001039, 0x8d73: 0xe0001036, + 0x8d74: 0xe00010d8, 0x8d75: 0xe00010d5, 0x8d76: 0xe000110e, 0x8d77: 0xe000110b, + 0x8d78: 0xe0001117, 0x8d79: 0xe000113b, 0x8d7a: 0xe0001138, 0x8d7b: 0xe000114d, + 0x8d7c: 0xe000114a, 0x8d7d: 0x00320683, 0x8d7e: 0x40320620, 0x8d7f: 0xe0000f64, + // Block 0x236, offset 0x8d80 + 0x8d80: 0x402c1a20, 0x8d81: 0x002c2a88, 0x8d82: 0x002c3288, 0x8d83: 0x402c3220, + 0x8d84: 0x0031c488, 0x8d85: 0x4031c420, 0x8d86: 0x002efa88, 0x8d87: 0x002c4e88, + 0x8d88: 0x402c4e20, 0x8d89: 0x002c7288, 0x8d8a: 0x002c7a88, 0x8d8b: 0x002c8488, + 0x8d8c: 0x402c8420, 0x8d8d: 0xe000115c, 0x8d8e: 0x002cae88, 0x8d8f: 0x002cb888, + 0x8d90: 0x002cc288, 0x8d91: 0x002d1688, 0x8d92: 0x402d1620, 0x8d93: 0x002d4488, + 0x8d94: 0x002d5888, 0x8d95: 0x402d7820, 0x8d96: 0x002dc288, 0x8d97: 0x002db688, + 0x8d98: 0x002e0a88, 0x8d99: 0x402e0a20, 0x8d9a: 0x402e3820, 0x8d9b: 0x402e7220, + 0x8d9c: 0x0030a088, 0x8d9d: 0x002eb488, 0x8d9e: 0x402ebc20, 0x8d9f: 0x002f1088, + 0x8da0: 0xe0000e56, 0x8da1: 0xe0000e53, 0x8da2: 0x002d6088, 0x8da3: 0x402d6020, + 0x8da4: 0x002f3e88, 0x8da5: 0x402f3e20, 0x8da6: 0x002f8288, 0x8da7: 0x0031b488, + 0x8da8: 0x4031b420, 0x8da9: 0x00300888, 0x8daa: 0x40301220, 0x8dab: 0x40304220, + 0x8dac: 0x00304a88, 0x8dad: 0x40304a20, 0x8dae: 0x00305288, 0x8daf: 0xe000105f, + 0x8db0: 0xe000105c, 0x8db1: 0x0030b488, 0x8db2: 0x0030cc88, 0x8db3: 0x00311888, + 0x8db4: 0x40311820, 0x8db5: 0x00313488, 0x8db6: 0x40313420, 0x8db7: 0xc41908d1, + 0x8db8: 0x00316e88, 0x8db9: 0x40316e20, 0x8dba: 0x40317820, 0x8dbb: 0x4031a620, + 0x8dbc: 0x0031bc88, 0x8dbd: 0x4031bc20, 0x8dbe: 0xe0000fc9, 0x8dbf: 0x40319420, + // Block 0x237, offset 0x8dc0 + 0x8dc0: 0x40321220, 0x8dc1: 0x40321a20, 0x8dc2: 0x40322220, 0x8dc3: 0x40322a20, + 0x8dc4: 0xe0000ad5, 0x8dc5: 0xe0000ad1, 0x8dc6: 0xe0000acd, 0x8dc7: 0xf0000a0a, + 0x8dc8: 0xf000040a, 0x8dc9: 0xf0000404, 0x8dca: 0xf0000a0a, 0x8dcb: 0xf000040a, + 0x8dcc: 0xf0000404, 0x8dcd: 0xe0000947, 0x8dce: 0xe0000944, 0x8dcf: 0xe0000c3d, + 0x8dd0: 0xe0000c3a, 0x8dd1: 0xe0000dcc, 0x8dd2: 0xe0000dc9, 0x8dd3: 0xe0000ff3, + 0x8dd4: 0xe0000ff0, 0x8dd5: 0xe0002685, 0x8dd6: 0xe0002682, 0x8dd7: 0xe0002673, + 0x8dd8: 0xe0002670, 0x8dd9: 0xe000267f, 0x8dda: 0xe000267c, 0x8ddb: 0xe0002679, + 0x8ddc: 0xe0002676, 0x8ddd: 0x402cae20, 0x8dde: 0xe000274c, 0x8ddf: 0xe0002749, + 0x8de0: 0xe0002697, 0x8de1: 0xe0002694, 0x8de2: 0xe00029c6, 0x8de3: 0xe00029c3, + 0x8de4: 0x002d6683, 0x8de5: 0x402d6620, 0x8de6: 0x002d6483, 0x8de7: 0x402d6420, + 0x8de8: 0x002e2083, 0x8de9: 0x402e2020, 0x8dea: 0x00321103, 0x8deb: 0x40321024, + 0x8dec: 0xe0002a08, 0x8ded: 0xe0002a05, 0x8dee: 0x002c6083, 0x8def: 0x402c6020, + 0x8df0: 0xe0000c8d, 0x8df1: 0xf0000a0a, 0x8df2: 0xf000040a, 0x8df3: 0xf0000404, + 0x8df4: 0xe0000bac, 0x8df5: 0xe0000ba9, 0x8df6: 0x002d7888, 0x8df7: 0x00319488, + 0x8df8: 0xe0000d57, 0x8df9: 0xe0000d54, 0x8dfa: 0xe000268b, 0x8dfb: 0xe0002688, + 0x8dfc: 0xe00029c0, 0x8dfd: 0xe00029bd, 0x8dfe: 0xe00029ba, 0x8dff: 0xe00029b7, + // Block 0x238, offset 0x8e00 + 0x8e00: 0xe000098f, 0x8e01: 0xe000098c, 0x8e02: 0xe0000995, 0x8e03: 0xe0000992, + 0x8e04: 0xe0000b62, 0x8e05: 0xe0000b5f, 0x8e06: 0xe0000b68, 0x8e07: 0xe0000b65, + 0x8e08: 0xe0000c6c, 0x8e09: 0xe0000c69, 0x8e0a: 0xe0000c72, 0x8e0b: 0xe0000c6f, + 0x8e0c: 0xe0000e4a, 0x8e0d: 0xe0000e47, 0x8e0e: 0xe0000e50, 0x8e0f: 0xe0000e4d, + 0x8e10: 0xe0000ee8, 0x8e11: 0xe0000ee5, 0x8e12: 0xe0000eee, 0x8e13: 0xe0000eeb, + 0x8e14: 0xe0001053, 0x8e15: 0xe0001050, 0x8e16: 0xe0001059, 0x8e17: 0xe0001056, + 0x8e18: 0xe0000f61, 0x8e19: 0xe0000f5e, 0x8e1a: 0xe0000fa5, 0x8e1b: 0xe0000fa2, + 0x8e1c: 0x00312288, 0x8e1d: 0x40312220, 0x8e1e: 0xe0000bf4, 0x8e1f: 0xe0000bf1, + 0x8e20: 0x002ebc88, 0x8e21: 0x402c8c20, 0x8e22: 0x002f2288, 0x8e23: 0x402f2220, + 0x8e24: 0x00314088, 0x8e25: 0x40314020, 0x8e26: 0x00320ca3, 0x8e27: 0x40320c21, + 0x8e28: 0xe0000b32, 0x8e29: 0xe0000b2f, 0x8e2a: 0xe0002758, 0x8e2b: 0xe0002755, + 0x8e2c: 0xe00029e4, 0x8e2d: 0xe00029e1, 0x8e2e: 0xe0000e04, 0x8e2f: 0xe0000e01, + 0x8e30: 0xe0000e0b, 0x8e31: 0xe0000e07, 0x8e32: 0xe0001129, 0x8e33: 0xe0001126, + 0x8e34: 0x402e5e20, 0x8e35: 0x402ed020, 0x8e36: 0x40305a20, 0x8e37: 0x402dd420, + 0x8e38: 0xe0000abf, 0x8e39: 0xe0000ec4, 0x8e3a: 0x002be888, 0x8e3b: 0x002c4488, + 0x8e3c: 0x402c4420, 0x8e3d: 0x002e3888, 0x8e3e: 0x00303e88, 0x8e3f: 0x402ffc20, + // Block 0x239, offset 0x8e40 + 0x8e40: 0x402f8220, 0x8e41: 0x402fd820, 0x8e42: 0x402ff420, 0x8e43: 0x40300820, + 0x8e44: 0x402df620, 0x8e45: 0x40301a20, 0x8e46: 0x40302420, 0x8e47: 0x40306420, + 0x8e48: 0x40305220, 0x8e49: 0x40307c20, 0x8e4a: 0x4030b420, 0x8e4b: 0x4030cc20, + 0x8e4c: 0x4030da20, 0x8e4d: 0x4030ee20, 0x8e4e: 0x402e7a20, 0x8e4f: 0x40310820, + 0x8e50: 0x40314820, 0x8e51: 0x40315020, 0x8e52: 0xc41708d1, 0x8e53: 0x40318020, + 0x8e54: 0x4031cc20, 0x8e55: 0x4031e820, 0x8e56: 0x40320a20, 0x8e57: 0x40323220, + 0x8e58: 0x40323a20, 0x8e59: 0x402c1220, 0x8e5a: 0x402cf820, 0x8e5b: 0x402d4c20, + 0x8e5c: 0x402d7020, 0x8e5d: 0x402de620, 0x8e5e: 0x402e1a20, 0x8e5f: 0x402e2a20, + 0x8e60: 0x402f6220, 0x8e61: 0x4031fa20, 0x8e62: 0x40320220, 0x8e63: 0xe0000aca, + 0x8e64: 0xe0000adc, 0x8e65: 0xe0000ad9, 0x8e66: 0xe0000fcc, 0x8e67: 0xe0000fcf, + 0x8e68: 0xe0000fba, 0x8e69: 0xe0000ba1, 0x8e6a: 0xe0000d11, 0x8e6b: 0xe0000d18, + 0x8e6c: 0x40324220, 0x8e6d: 0x40324a20, 0x8e6e: 0x40309020, 0x8e6f: 0x40309820, + 0x8e70: 0x002d6894, 0x8e71: 0x002d8094, 0x8e72: 0x002dcc94, 0x8e73: 0x002f7a94, + 0x8e74: 0x002f9894, 0x8e75: 0x002fac94, 0x8e76: 0x002fd894, 0x8e77: 0x0030e294, + 0x8e78: 0x00310094, 0x8e79: 0x40064020, 0x8e7a: 0x40064420, 0x8e7b: 0x402d9620, + 0x8e7c: 0x4031de20, 0x8e7d: 0x402d9820, 0x8e7e: 0x4031e220, 0x8e7f: 0x4031f020, + // Block 0x23a, offset 0x8e80 + 0x8e80: 0xe0000d24, 0x8e81: 0xe0000d21, 0x8e82: 0xe0000d2a, 0x8e83: 0xe0000d27, + 0x8e84: 0xe0000d69, 0x8e85: 0xe0000d66, 0x8e86: 0xe0000d7b, 0x8e87: 0xe0000d78, + 0x8e88: 0xe0000d87, 0x8e89: 0xe0000d84, 0x8e8a: 0xe0000d81, 0x8e8b: 0xe0000d7e, + 0x8e8c: 0xe00029d8, 0x8e8d: 0xe00029d5, 0x8e8e: 0xe00029de, 0x8e8f: 0xe00029db, + 0x8e90: 0xe0000e3d, 0x8e91: 0xe0000e39, 0x8e92: 0xe0000e35, 0x8e93: 0xe0000e31, + 0x8e94: 0xe0000ea7, 0x8e95: 0xe0000ea4, 0x8e96: 0xe0000ead, 0x8e97: 0xe0000eaa, + 0x8e98: 0xe0000ed6, 0x8e99: 0xe0000ed3, 0x8e9a: 0xe0000ef4, 0x8e9b: 0xe0000ef1, + 0x8e9c: 0xe0000efb, 0x8e9d: 0xe0000ef7, 0x8e9e: 0xe0000f02, 0x8e9f: 0xe0000eff, + 0x8ea0: 0xe0000f41, 0x8ea1: 0xe0000f3e, 0x8ea2: 0xe0000f53, 0x8ea3: 0xe0000f50, + 0x8ea4: 0xe0000f26, 0x8ea5: 0xe0000f22, 0x8ea6: 0xe00029b4, 0x8ea7: 0xe00029b1, + 0x8ea8: 0xe0000f5a, 0x8ea9: 0xe0000f56, 0x8eaa: 0xe0000f93, 0x8eab: 0xe0000f90, + 0x8eac: 0xe0000f9f, 0x8ead: 0xe0000f9c, 0x8eae: 0xe0000fb1, 0x8eaf: 0xe0000fae, + 0x8eb0: 0xe0000fab, 0x8eb1: 0xe0000fa8, 0x8eb2: 0xe0001093, 0x8eb3: 0xe0001090, + 0x8eb4: 0xe000109f, 0x8eb5: 0xe000109c, 0x8eb6: 0xe0001099, 0x8eb7: 0xe0001096, + 0x8eb8: 0xe0001032, 0x8eb9: 0xe000102e, 0x8eba: 0xe0002685, 0x8ebb: 0xe0002682, + 0x8ebc: 0xe00010a9, 0x8ebd: 0xe00010a6, 0x8ebe: 0xe00010af, 0x8ebf: 0xe00010ac, + // Block 0x23b, offset 0x8ec0 + 0x8ec0: 0xe00010d2, 0x8ec1: 0xe00010cf, 0x8ec2: 0xe00010cc, 0x8ec3: 0xe00010c9, + 0x8ec4: 0xe00010e1, 0x8ec5: 0xe00010de, 0x8ec6: 0xe00010e7, 0x8ec7: 0xe00010e4, + 0x8ec8: 0xe00010ed, 0x8ec9: 0xe00010ea, 0x8eca: 0xe00010fc, 0x8ecb: 0xe00010f9, + 0x8ecc: 0xe00010f6, 0x8ecd: 0xe00010f3, 0x8ece: 0xe0001123, 0x8ecf: 0xe0001120, + 0x8ed0: 0xe0001141, 0x8ed1: 0xe000113e, 0x8ed2: 0xe0001153, 0x8ed3: 0xe0001150, + 0x8ed4: 0xe0001159, 0x8ed5: 0xe0001156, 0x8ed6: 0xe0000c15, 0x8ed7: 0xe0000f8d, + 0x8ed8: 0xe00010db, 0x8ed9: 0xe0001111, 0x8eda: 0xf0000404, 0x8edb: 0xe0000f70, + 0x8edc: 0x40300420, 0x8edd: 0x40300620, 0x8ede: 0xe0000f7f, 0x8edf: 0x402c9620, + 0x8ee0: 0xe000099b, 0x8ee1: 0xe0000998, 0x8ee2: 0xe0000989, 0x8ee3: 0xe0000986, + 0x8ee4: 0xe0002791, 0x8ee5: 0xe000278e, 0x8ee6: 0xe0000930, 0x8ee7: 0xe000092c, + 0x8ee8: 0xe0000940, 0x8ee9: 0xe000093c, 0x8eea: 0xe00029d2, 0x8eeb: 0xe00029cf, + 0x8eec: 0xe00009aa, 0x8eed: 0xe00009a6, 0x8eee: 0xe000278b, 0x8eef: 0xe0002788, + 0x8ef0: 0xe000090a, 0x8ef1: 0xe0000906, 0x8ef2: 0xe000091a, 0x8ef3: 0xe0000916, + 0x8ef4: 0xe00029cc, 0x8ef5: 0xe00029c9, 0x8ef6: 0xe00009a2, 0x8ef7: 0xe000099e, + 0x8ef8: 0xe0000b6e, 0x8ef9: 0xe0000b6b, 0x8efa: 0xe0000b5c, 0x8efb: 0xe0000b59, + 0x8efc: 0xe0000b26, 0x8efd: 0xe0000b23, 0x8efe: 0xe0000afb, 0x8eff: 0xe0000af7, + // Block 0x23c, offset 0x8f00 + 0x8f00: 0xe0000b03, 0x8f01: 0xe0000aff, 0x8f02: 0xe0000b13, 0x8f03: 0xe0000b0f, + 0x8f04: 0xe0000b0b, 0x8f05: 0xe0000b07, 0x8f06: 0xe0000b75, 0x8f07: 0xe0000b71, + 0x8f08: 0xe0000c66, 0x8f09: 0xe0000c63, 0x8f0a: 0xe0000c78, 0x8f0b: 0xe0000c75, + 0x8f0c: 0xe0000e84, 0x8f0d: 0xe0000e81, 0x8f0e: 0xe0000e44, 0x8f0f: 0xe0000e41, + 0x8f10: 0xe0002764, 0x8f11: 0xe0002761, 0x8f12: 0xe00029f0, 0x8f13: 0xe00029ed, + 0x8f14: 0xe00029fc, 0x8f15: 0xe00029f9, 0x8f16: 0xe00029f6, 0x8f17: 0xe00029f3, + 0x8f18: 0xe0002a02, 0x8f19: 0xe00029ff, 0x8f1a: 0xe0000e5d, 0x8f1b: 0xe0000e59, + 0x8f1c: 0xe0000e65, 0x8f1d: 0xe0000e61, 0x8f1e: 0xe0000e75, 0x8f1f: 0xe0000e71, + 0x8f20: 0xe00029ea, 0x8f21: 0xe00029e7, 0x8f22: 0xe0000e7d, 0x8f23: 0xe0000e79, + 0x8f24: 0xe000108d, 0x8f25: 0xe000108a, 0x8f26: 0xe000104d, 0x8f27: 0xe000104a, + 0x8f28: 0xe0001066, 0x8f29: 0xe0001062, 0x8f2a: 0xe000106e, 0x8f2b: 0xe000106a, + 0x8f2c: 0xe000107e, 0x8f2d: 0xe000107a, 0x8f2e: 0xe0001076, 0x8f2f: 0xe0001072, + 0x8f30: 0xe0001086, 0x8f31: 0xe0001082, 0x8f32: 0xe0001108, 0x8f33: 0xe0001105, + 0x8f34: 0xe0001135, 0x8f35: 0xe0001132, 0x8f36: 0xe000112f, 0x8f37: 0xe000112c, + 0x8f38: 0xe000111d, 0x8f39: 0xe000111a, 0x8f3a: 0xe0000d0a, 0x8f3b: 0xe0000d07, + 0x8f3c: 0x0030d888, 0x8f3d: 0x4030d820, 0x8f3e: 0x00312088, 0x8f3f: 0x40312020, + // Block 0x23d, offset 0x8f40 + 0x8f40: 0xa0000000, 0x8f41: 0xa0000000, 0x8f42: 0xa0000000, 0x8f43: 0xa0000000, + 0x8f44: 0xa0000000, 0x8f45: 0xa0000000, 0x8f46: 0xa0000000, 0x8f47: 0xa0000000, + 0x8f48: 0xa0000000, 0x8f49: 0x40020020, 0x8f4a: 0x40020220, 0x8f4b: 0x40020420, + 0x8f4c: 0x40020620, 0x8f4d: 0x40020820, 0x8f4e: 0xa0000000, 0x8f4f: 0xa0000000, + 0x8f50: 0xa0000000, 0x8f51: 0xa0000000, 0x8f52: 0xa0000000, 0x8f53: 0xa0000000, + 0x8f54: 0xa0000000, 0x8f55: 0xa0000000, 0x8f56: 0xa0000000, 0x8f57: 0xa0000000, + 0x8f58: 0xa0000000, 0x8f59: 0xa0000000, 0x8f5a: 0xa0000000, 0x8f5b: 0xa0000000, + 0x8f5c: 0xa0000000, 0x8f5d: 0xa0000000, 0x8f5e: 0xa0000000, 0x8f5f: 0xa0000000, + 0x8f60: 0x40021220, 0x8f61: 0x4002ba20, 0x8f62: 0x4003e020, 0x8f63: 0x4004ea20, + 0x8f64: 0x4027de20, 0x8f65: 0x4004ec20, 0x8f66: 0x4004e620, 0x8f67: 0x4003d220, + 0x8f68: 0x4003f420, 0x8f69: 0x4003f620, 0x8f6a: 0x4004d820, 0x8f6b: 0x40093820, + 0x8f6c: 0x40024020, 0x8f6d: 0x40021a20, 0x8f6e: 0x4002e420, 0x8f6f: 0x4004e220, + 0x8f70: 0x4029cc20, 0x8f71: 0x4029ce20, 0x8f72: 0x4029d020, 0x8f73: 0x4029d220, + 0x8f74: 0x4029d420, 0x8f75: 0x4029d620, 0x8f76: 0x4029d820, 0x8f77: 0x4029da20, + 0x8f78: 0x4029dc20, 0x8f79: 0x4029de20, 0x8f7a: 0x40026c20, 0x8f7b: 0x40026220, + 0x8f7c: 0x40094020, 0x8f7d: 0xc32f0851, 0x8f7e: 0x40094420, 0x8f7f: 0x4002c420, + // Block 0x23e, offset 0x8f80 + 0x8f80: 0x4004d620, 0x8f81: 0xc4400cb1, 0x8f82: 0x002c0a88, 0x8f83: 0xc33b08d1, + 0x8f84: 0xc35b08d1, 0x8f85: 0xc36008f1, 0x8f86: 0x002d0888, 0x8f87: 0x002d2288, + 0x8f88: 0x002d6888, 0x8f89: 0xc36508b1, 0x8f8a: 0x002dcc88, 0x8f8b: 0x002dfe88, + 0x8f8c: 0xc4480eb3, 0x8f8d: 0x002e8288, 0x8f8e: 0xc36908d1, 0x8f8f: 0xc4500f21, + 0x8f90: 0x002f2c88, 0x8f91: 0x002f5688, 0x8f92: 0xc45608f1, 0x8f93: 0xc34908d1, + 0x8f94: 0xc37108d1, 0x8f95: 0xc3760921, 0x8f96: 0x0030be88, 0x8f97: 0x0030e288, + 0x8f98: 0x0030f688, 0x8f99: 0xc37b08b1, 0x8f9a: 0xc37f08d1, 0x8f9b: 0x4003f820, + 0x8f9c: 0x4004e420, 0x8f9d: 0x4003fa20, 0x8f9e: 0x40062420, 0x8f9f: 0x40021620, + 0x8fa0: 0x40061e20, 0x8fa1: 0xc43d0cb1, 0x8fa2: 0x402c0a20, 0x8fa3: 0xc33908d1, + 0x8fa4: 0xc35908d1, 0x8fa5: 0xc35d08f1, 0x8fa6: 0x402d0820, 0x8fa7: 0x402d2220, + 0x8fa8: 0x402d6820, 0x8fa9: 0xc36308b1, 0x8faa: 0x402dcc20, 0x8fab: 0x402dfe20, + 0x8fac: 0xc4430eb3, 0x8fad: 0x402e8220, 0x8fae: 0xc36708d1, 0x8faf: 0xc44d0f21, + 0x8fb0: 0x402f2c20, 0x8fb1: 0x402f5620, 0x8fb2: 0xc45308f1, 0x8fb3: 0xc34708d1, + 0x8fb4: 0xc36f08d1, 0x8fb5: 0xc3730921, 0x8fb6: 0x4030be20, 0x8fb7: 0x4030e220, + 0x8fb8: 0x4030f620, 0x8fb9: 0xc37908b1, 0x8fba: 0xc37d08d1, 0x8fbb: 0x4003fc20, + 0x8fbc: 0x40094820, 0x8fbd: 0x4003fe20, 0x8fbe: 0x40094c20, 0x8fbf: 0xa0000000, + // Block 0x23f, offset 0x8fc0 + 0x8fc0: 0xe00008f5, 0x8fc1: 0x002be083, 0x8fc2: 0xe0000921, 0x8fc3: 0xe0000969, + 0x8fc4: 0x002be283, 0x8fc5: 0xe000094d, 0x8fc6: 0xe00009dd, 0x8fc7: 0xe0000a53, + 0x8fc8: 0xe0000ae8, 0x8fc9: 0x002c9a83, 0x8fca: 0xe0000af4, 0x8fcb: 0xe0000b20, + 0x8fcc: 0xe0000c2b, 0x8fcd: 0x002d9c83, 0x8fce: 0xe0000c37, 0x8fcf: 0xe0000c43, + 0x8fd0: 0xe0000ab3, 0x8fd1: 0xe0000d63, 0x8fd2: 0xe0000d9a, 0x8fd3: 0x002ee483, + 0x8fd4: 0x002ee683, 0x8fd5: 0xe0000de6, 0x8fd6: 0xe0000dd2, 0x8fd7: 0x40093e20, + 0x8fd8: 0xe0000e12, 0x8fd9: 0xe0000fe1, 0x8fda: 0x00306e83, 0x8fdb: 0xe0000fed, + 0x8fdc: 0xe0000fff, 0x8fdd: 0x00310283, 0x8fde: 0x00318888, 0x8fdf: 0xe0000f7b, + 0x8fe0: 0xe00008f2, 0x8fe1: 0x402be020, 0x8fe2: 0xe000091e, 0x8fe3: 0xe0000966, + 0x8fe4: 0x402be220, 0x8fe5: 0xe000094a, 0x8fe6: 0xe00009d5, 0x8fe7: 0xe0000a4d, + 0x8fe8: 0xe0000ae5, 0x8fe9: 0x402c9a20, 0x8fea: 0xe0000af1, 0x8feb: 0xe0000b1d, + 0x8fec: 0xe0000c28, 0x8fed: 0x402d9c20, 0x8fee: 0xe0000c34, 0x8fef: 0xe0000c40, + 0x8ff0: 0xe0000aad, 0x8ff1: 0xe0000d60, 0x8ff2: 0xe0000d97, 0x8ff3: 0x402ee420, + 0x8ff4: 0x402ee620, 0x8ff5: 0xe0000de3, 0x8ff6: 0xe0000dcf, 0x8ff7: 0x40093c20, + 0x8ff8: 0xe0000e0f, 0x8ff9: 0xe0000fde, 0x8ffa: 0x40306e20, 0x8ffb: 0xe0000fea, + 0x8ffc: 0xe0000ffc, 0x8ffd: 0x40310220, 0x8ffe: 0x40318820, 0x8fff: 0xe0001114, + // Block 0x240, offset 0x9000 + 0x9000: 0xe0000983, 0x9001: 0xe0000980, 0x9002: 0xe00008fb, 0x9003: 0xe00008f8, + 0x9004: 0xe000097d, 0x9005: 0xe000097a, 0x9006: 0xe0000a38, 0x9007: 0xe0000a35, + 0x9008: 0xe0000a3e, 0x9009: 0xe0000a3b, 0x900a: 0xe0000a4a, 0x900b: 0xe0000a47, + 0x900c: 0x002c3c83, 0x900d: 0x402c3c20, 0x900e: 0x002c6483, 0x900f: 0x402c6420, + 0x9010: 0xe0000aaa, 0x9011: 0xe0000aa7, 0x9012: 0xe0000b46, 0x9013: 0xe0000b43, + 0x9014: 0xe0000aee, 0x9015: 0xe0000aeb, 0x9016: 0xe0000b2c, 0x9017: 0xe0000b29, + 0x9018: 0xe0000b40, 0x9019: 0xe0000b3d, 0x901a: 0x002c9c83, 0x901b: 0x402c9c20, + 0x901c: 0xe0000bb8, 0x901d: 0xe0000bb5, 0x901e: 0xe0000bb2, 0x901f: 0xe0000baf, + 0x9020: 0xe0000bc4, 0x9021: 0xe0000bc1, 0x9022: 0xe0000bca, 0x9023: 0xe0000bc7, + 0x9024: 0xe0000bee, 0x9025: 0xe0000beb, 0x9026: 0xe0000c1b, 0x9027: 0xe0000c18, + 0x9028: 0xe0000c51, 0x9029: 0xe0000c4e, 0x902a: 0xe0000c60, 0x902b: 0xe0000c5d, + 0x902c: 0xe0000c31, 0x902d: 0xe0000c2e, 0x902e: 0xe0000c5a, 0x902f: 0xe0000c57, + 0x9030: 0xe0000c54, 0x9031: 0x402da220, 0x9032: 0xf0000a0a, 0x9033: 0xf0000404, + 0x9034: 0xe0000c8a, 0x9035: 0xe0000c87, 0x9036: 0xe0000c9f, 0x9037: 0xe0000c9c, + 0x9038: 0x402f7220, 0x9039: 0x002e2483, 0x903a: 0x402e2420, 0x903b: 0xe0000cd8, + 0x903c: 0xe0000cd5, 0x903d: 0x002e2683, 0x903e: 0x402e2620, 0x903f: 0xe0000d04, + // Block 0x241, offset 0x9040 + 0x9040: 0xe0000cfe, 0x9041: 0xe0000cf8, 0x9042: 0xe0000cf5, 0x9043: 0xe0000d51, + 0x9044: 0xe0000d4e, 0x9045: 0xe0000d6f, 0x9046: 0xe0000d6c, 0x9047: 0x002ea083, + 0x9048: 0x402ea020, 0x9049: 0xf0000404, 0x904a: 0x002eda88, 0x904b: 0x402eda20, + 0x904c: 0xe0000e2e, 0x904d: 0xe0000e2b, 0x904e: 0xe0000da0, 0x904f: 0xe0000d9d, + 0x9050: 0xe0000de0, 0x9051: 0xe0000ddd, 0x9052: 0xe0000e93, 0x9053: 0xe0000e8f, + 0x9054: 0x002f7c83, 0x9055: 0x402f7c20, 0x9056: 0xe0000edc, 0x9057: 0xe0000ed9, + 0x9058: 0x002f7e83, 0x9059: 0x402f7e20, 0x905a: 0xe0000f1f, 0x905b: 0xe0000f1c, + 0x905c: 0xe0000f2d, 0x905d: 0xe0000f2a, 0x905e: 0xe0000f47, 0x905f: 0xe0000f44, + 0x9060: 0x002fe883, 0x9061: 0x402fe820, 0x9062: 0xe0000f99, 0x9063: 0xe0000f96, + 0x9064: 0x00302e83, 0x9065: 0x40302e20, 0x9066: 0x00303688, 0x9067: 0x40303620, + 0x9068: 0xe000102b, 0x9069: 0xe0001028, 0x906a: 0xe000103f, 0x906b: 0xe000103c, + 0x906c: 0xe0000fe7, 0x906d: 0xe0000fe4, 0x906e: 0x00307083, 0x906f: 0x40307020, + 0x9070: 0xe0001025, 0x9071: 0xe0001022, 0x9072: 0xe0001039, 0x9073: 0xe0001036, + 0x9074: 0xe00010d8, 0x9075: 0xe00010d5, 0x9076: 0xe000110e, 0x9077: 0xe000110b, + 0x9078: 0xe0001117, 0x9079: 0xe000113b, 0x907a: 0xe0001138, 0x907b: 0xe000114d, + 0x907c: 0xe000114a, 0x907d: 0x00312c83, 0x907e: 0x40312c20, 0x907f: 0xe0000f64, + // Block 0x242, offset 0x9080 + 0x9080: 0x40321220, 0x9081: 0x40321a20, 0x9082: 0x40322220, 0x9083: 0x40322a20, + 0x9084: 0xe0000ad5, 0x9085: 0xe0000ad1, 0x9086: 0xe0000acd, 0x9087: 0xf0000a0a, + 0x9088: 0xf000040a, 0x9089: 0xf0000404, 0x908a: 0xf0000a0a, 0x908b: 0xf000040a, + 0x908c: 0xf0000404, 0x908d: 0xe0000947, 0x908e: 0xe0000944, 0x908f: 0xe0000c3d, + 0x9090: 0xe0000c3a, 0x9091: 0xe0000dcc, 0x9092: 0xe0000dc9, 0x9093: 0xe0000ff3, + 0x9094: 0xe0000ff0, 0x9095: 0xe000101e, 0x9096: 0xe000101a, 0x9097: 0xe0002658, + 0x9098: 0xe0002655, 0x9099: 0xe0001016, 0x909a: 0xe0001012, 0x909b: 0xe000100e, + 0x909c: 0xe000100a, 0x909d: 0x402cae20, 0x909e: 0xe0002a0e, 0x909f: 0xe0002a0b, + 0x90a0: 0xe0000976, 0x90a1: 0xe0000972, 0x90a2: 0xe00009f4, 0x90a3: 0xe00009ef, + 0x90a4: 0x002d3a88, 0x90a5: 0x402d3a20, 0x90a6: 0xe0000bbe, 0x90a7: 0xe0000bbb, + 0x90a8: 0xe0000c99, 0x90a9: 0xe0000c96, 0x90aa: 0xe0000e20, 0x90ab: 0xe0000e1d, + 0x90ac: 0xe0000e27, 0x90ad: 0xe0000e23, 0x90ae: 0xe0001162, 0x90af: 0xe000115f, + 0x90b0: 0xe0000c8d, 0x90b1: 0xf0000a0a, 0x90b2: 0xf000040a, 0x90b3: 0xf0000404, + 0x90b4: 0xe0000bac, 0x90b5: 0xe0000ba9, 0x90b6: 0x002d7888, 0x90b7: 0x00319488, + 0x90b8: 0xe0000d57, 0x90b9: 0xe0000d54, 0x90ba: 0xe000262e, 0x90bb: 0xe000262b, + 0x90bc: 0xe00009ea, 0x90bd: 0xe00009e5, 0x90be: 0xe0000e19, 0x90bf: 0xe0000e15, + // Block 0x243, offset 0x90c0 + 0x90c0: 0xe0000b03, 0x90c1: 0xe0000aff, 0x90c2: 0xe0000b13, 0x90c3: 0xe0000b0f, + 0x90c4: 0xe0000b0b, 0x90c5: 0xe0000b07, 0x90c6: 0xe0000b75, 0x90c7: 0xe0000b71, + 0x90c8: 0xe0000c66, 0x90c9: 0xe0000c63, 0x90ca: 0xe0000c78, 0x90cb: 0xe0000c75, + 0x90cc: 0xe0000e84, 0x90cd: 0xe0000e81, 0x90ce: 0xe0000e44, 0x90cf: 0xe0000e41, + 0x90d0: 0xe0002a14, 0x90d1: 0xe0002a11, 0x90d2: 0xe0002a1a, 0x90d3: 0xe0002a17, + 0x90d4: 0xe0002a26, 0x90d5: 0xe0002a23, 0x90d6: 0xe0002a20, 0x90d7: 0xe0002a1d, + 0x90d8: 0xe0002a2c, 0x90d9: 0xe0002a29, 0x90da: 0xe000264c, 0x90db: 0xe0002649, + 0x90dc: 0xe0000e65, 0x90dd: 0xe0000e61, 0x90de: 0xe0000e75, 0x90df: 0xe0000e71, + 0x90e0: 0xe0000e6d, 0x90e1: 0xe0000e69, 0x90e2: 0xe0000e7d, 0x90e3: 0xe0000e79, + 0x90e4: 0xe000108d, 0x90e5: 0xe000108a, 0x90e6: 0xe000104d, 0x90e7: 0xe000104a, + 0x90e8: 0xe0002664, 0x90e9: 0xe0002661, 0x90ea: 0xe000106e, 0x90eb: 0xe000106a, + 0x90ec: 0xe000107e, 0x90ed: 0xe000107a, 0x90ee: 0xe0001076, 0x90ef: 0xe0001072, + 0x90f0: 0xe0001086, 0x90f1: 0xe0001082, 0x90f2: 0xe0001108, 0x90f3: 0xe0001105, + 0x90f4: 0xe0001135, 0x90f5: 0xe0001132, 0x90f6: 0xe000112f, 0x90f7: 0xe000112c, + 0x90f8: 0xe000111d, 0x90f9: 0xe000111a, 0x90fa: 0xe0000d0a, 0x90fb: 0xe0000d07, + 0x90fc: 0x0030d888, 0x90fd: 0x4030d820, 0x90fe: 0x00312088, 0x90ff: 0x40312020, + // Block 0x244, offset 0x9100 + 0x9100: 0xa0000000, 0x9101: 0xa0000000, 0x9102: 0xa0000000, 0x9103: 0xa0000000, + 0x9104: 0xa0000000, 0x9105: 0xa0000000, 0x9106: 0xa0000000, 0x9107: 0xa0000000, + 0x9108: 0xa0000000, 0x9109: 0x40020020, 0x910a: 0x40020220, 0x910b: 0x40020420, + 0x910c: 0x40020620, 0x910d: 0x40020820, 0x910e: 0xa0000000, 0x910f: 0xa0000000, + 0x9110: 0xa0000000, 0x9111: 0xa0000000, 0x9112: 0xa0000000, 0x9113: 0xa0000000, + 0x9114: 0xa0000000, 0x9115: 0xa0000000, 0x9116: 0xa0000000, 0x9117: 0xa0000000, + 0x9118: 0xa0000000, 0x9119: 0xa0000000, 0x911a: 0xa0000000, 0x911b: 0xa0000000, + 0x911c: 0xa0000000, 0x911d: 0xa0000000, 0x911e: 0xa0000000, 0x911f: 0xa0000000, + 0x9120: 0x40021220, 0x9121: 0x4002ba20, 0x9122: 0x4003e020, 0x9123: 0x4004ea20, + 0x9124: 0x4027de20, 0x9125: 0x4004ec20, 0x9126: 0x4004e620, 0x9127: 0x4003d220, + 0x9128: 0x4003f420, 0x9129: 0x4003f620, 0x912a: 0x4004d820, 0x912b: 0x40093820, + 0x912c: 0x40024020, 0x912d: 0x40021a20, 0x912e: 0x4002e420, 0x912f: 0x4004e220, + 0x9130: 0x4029cc20, 0x9131: 0x4029ce20, 0x9132: 0x4029d020, 0x9133: 0x4029d220, + 0x9134: 0x4029d420, 0x9135: 0x4029d620, 0x9136: 0x4029d820, 0x9137: 0x4029da20, + 0x9138: 0x4029dc20, 0x9139: 0x4029de20, 0x913a: 0x40026c20, 0x913b: 0x40026220, + 0x913c: 0x40094020, 0x913d: 0xc32f0851, 0x913e: 0x40094420, 0x913f: 0x4002c420, + // Block 0x245, offset 0x9140 + 0x9140: 0x4004d620, 0x9141: 0xc3a90a51, 0x9142: 0x002c0a88, 0x9143: 0x002c3a88, + 0x9144: 0x002c6288, 0x9145: 0xc45b0a11, 0x9146: 0x002d0888, 0x9147: 0x002d2288, + 0x9148: 0x002d6888, 0x9149: 0x002d9a88, 0x914a: 0x002dcc88, 0x914b: 0x002dfe88, + 0x914c: 0xc0030002, 0x914d: 0x002e8288, 0x914e: 0x002e9e88, 0x914f: 0xc4610f41, + 0x9150: 0x002f2c88, 0x9151: 0x002f5688, 0x9152: 0x002f7a88, 0x9153: 0x002fe688, + 0x9154: 0x00302c88, 0x9155: 0xc3840951, 0x9156: 0x0030be83, 0x9157: 0x0030bea3, + 0x9158: 0x0030f688, 0x9159: 0x00310088, 0x915a: 0x00312a88, 0x915b: 0x4003f820, + 0x915c: 0x4004e420, 0x915d: 0x4003fa20, 0x915e: 0x40062420, 0x915f: 0x40021620, + 0x9160: 0x40061e20, 0x9161: 0xc3a60a51, 0x9162: 0x402c0a20, 0x9163: 0x402c3a20, + 0x9164: 0x402c6220, 0x9165: 0xc4590a11, 0x9166: 0x402d0820, 0x9167: 0x402d2220, + 0x9168: 0x402d6820, 0x9169: 0x402d9a20, 0x916a: 0x402dcc20, 0x916b: 0x402dfe20, + 0x916c: 0xc0000002, 0x916d: 0x402e8220, 0x916e: 0x402e9e20, 0x916f: 0xc45d0f41, + 0x9170: 0x402f2c20, 0x9171: 0x402f5620, 0x9172: 0x402f7a20, 0x9173: 0x402fe620, + 0x9174: 0x40302c20, 0x9175: 0xc3810951, 0x9176: 0x4030be20, 0x9177: 0x4030be21, + 0x9178: 0x4030f620, 0x9179: 0x40310020, 0x917a: 0x40312a20, 0x917b: 0x4003fc20, + 0x917c: 0x40094820, 0x917d: 0x4003fe20, 0x917e: 0x40094c20, 0x917f: 0xa0000000, + // Block 0x246, offset 0x9180 + 0x9180: 0xe00008f5, 0x9181: 0xe00008ef, 0x9182: 0xe0000921, 0x9183: 0xe0000969, + 0x9184: 0x00320e83, 0x9185: 0x00320c83, 0x9186: 0x00320ea3, 0x9187: 0xe0000a53, + 0x9188: 0xe0000ae8, 0x9189: 0xe0000ae2, 0x918a: 0xe0000af4, 0x918b: 0xe0000b20, + 0x918c: 0xe0000c2b, 0x918d: 0xe0000c25, 0x918e: 0xe0000c37, 0x918f: 0xe0000c43, + 0x9190: 0x002c62c3, 0x9191: 0xe0000d63, 0x9192: 0xe0000d9a, 0x9193: 0xe0000d94, + 0x9194: 0x00321103, 0x9195: 0xe0000de6, 0x9196: 0x00321083, 0x9197: 0x40093e20, + 0x9198: 0x003210a3, 0x9199: 0xe0000fe1, 0x919a: 0xe0000fdb, 0x919b: 0xe0000fed, + 0x919c: 0x003100a3, 0x919d: 0xe0001102, 0x919e: 0xe000266d, 0x919f: 0xe0000f7b, + 0x91a0: 0xe00008f2, 0x91a1: 0xe00008ec, 0x91a2: 0xe000091e, 0x91a3: 0xe0000966, + 0x91a4: 0x40320e20, 0x91a5: 0x40320c20, 0x91a6: 0x40320e21, 0x91a7: 0xe0000a4d, + 0x91a8: 0xe0000ae5, 0x91a9: 0xe0000adf, 0x91aa: 0xe0000af1, 0x91ab: 0xe0000b1d, + 0x91ac: 0xe0000c28, 0x91ad: 0xe0000c22, 0x91ae: 0xe0000c34, 0x91af: 0xe0000c40, + 0x91b0: 0x402c6222, 0x91b1: 0xe0000d60, 0x91b2: 0xe0000d97, 0x91b3: 0xe0000d91, + 0x91b4: 0x40321024, 0x91b5: 0xe0000de3, 0x91b6: 0x40321020, 0x91b7: 0x40093c20, + 0x91b8: 0x40321021, 0x91b9: 0xe0000fde, 0x91ba: 0xe0000fd8, 0x91bb: 0xe0000fea, + 0x91bc: 0x40310021, 0x91bd: 0xe00010ff, 0x91be: 0xe000266a, 0x91bf: 0xe0001114, + // Block 0x247, offset 0x91c0 + 0x91c0: 0xe0000983, 0x91c1: 0xe0000980, 0x91c2: 0xe00008fb, 0x91c3: 0xe00008f8, + 0x91c4: 0xe000097d, 0x91c5: 0xe000097a, 0x91c6: 0xe0000a38, 0x91c7: 0xe0000a35, + 0x91c8: 0xe0000a3e, 0x91c9: 0xe0000a3b, 0x91ca: 0xe0000a4a, 0x91cb: 0xe0000a47, + 0x91cc: 0xe0000a44, 0x91cd: 0xe0000a41, 0x91ce: 0xe0000a86, 0x91cf: 0xe0000a83, + 0x91d0: 0x002c62a3, 0x91d1: 0x402c6221, 0x91d2: 0xe0000b46, 0x91d3: 0xe0000b43, + 0x91d4: 0xe0000aee, 0x91d5: 0xe0000aeb, 0x91d6: 0xe0000b2c, 0x91d7: 0xe0000b29, + 0x91d8: 0x00320ec3, 0x91d9: 0x40320e22, 0x91da: 0xe0000b1a, 0x91db: 0xe0000b17, + 0x91dc: 0xe0000bb8, 0x91dd: 0xe0000bb5, 0x91de: 0xe0000bb2, 0x91df: 0xe0000baf, + 0x91e0: 0xe0000bc4, 0x91e1: 0xe0000bc1, 0x91e2: 0xe0000bca, 0x91e3: 0xe0000bc7, + 0x91e4: 0xe0000bee, 0x91e5: 0xe0000beb, 0x91e6: 0xe0000c1b, 0x91e7: 0xe0000c18, + 0x91e8: 0xe0000c51, 0x91e9: 0xe0000c4e, 0x91ea: 0xe0000c60, 0x91eb: 0xe0000c5d, + 0x91ec: 0xe0000c31, 0x91ed: 0xe0000c2e, 0x91ee: 0xe0000c5a, 0x91ef: 0xe0000c57, + 0x91f0: 0xe0000c54, 0x91f1: 0x402da220, 0x91f2: 0xf0000a0a, 0x91f3: 0xf0000404, + 0x91f4: 0xe0000c8a, 0x91f5: 0xe0000c87, 0x91f6: 0xe0000c9f, 0x91f7: 0xe0000c9c, + 0x91f8: 0x402f7220, 0x91f9: 0xe0000ccc, 0x91fa: 0xe0000cc9, 0x91fb: 0xe0000cd8, + 0x91fc: 0xe0000cd5, 0x91fd: 0xe0000cd2, 0x91fe: 0xe0000ccf, 0x91ff: 0xe0000d04, + // Block 0x248, offset 0x9200 + 0x9200: 0xe0000cfe, 0x9201: 0xe0000cf8, 0x9202: 0xe0000cf5, 0x9203: 0xe0000d51, + 0x9204: 0xe0000d4e, 0x9205: 0xe0000d6f, 0x9206: 0xe0000d6c, 0x9207: 0xe0000d5d, + 0x9208: 0xe0000d5a, 0x9209: 0xf0000404, 0x920a: 0x002eda88, 0x920b: 0x402eda20, + 0x920c: 0xe0000e2e, 0x920d: 0xe0000e2b, 0x920e: 0xe0000da0, 0x920f: 0xe0000d9d, + 0x9210: 0x003210c3, 0x9211: 0x40321022, 0x9212: 0x003210e3, 0x9213: 0x40321023, + 0x9214: 0xe0000eca, 0x9215: 0xe0000ec7, 0x9216: 0xe0000edc, 0x9217: 0xe0000ed9, + 0x9218: 0xe0000ed0, 0x9219: 0xe0000ecd, 0x921a: 0xe0000f1f, 0x921b: 0xe0000f1c, + 0x921c: 0xe0000f2d, 0x921d: 0xe0000f2a, 0x921e: 0xe0000f47, 0x921f: 0xe0000f44, + 0x9220: 0xe0000f33, 0x9221: 0xe0000f30, 0x9222: 0xe0000f99, 0x9223: 0xe0000f96, + 0x9224: 0xe0000f8a, 0x9225: 0xe0000f87, 0x9226: 0x00303688, 0x9227: 0x40303620, + 0x9228: 0xe000102b, 0x9229: 0xe0001028, 0x922a: 0xe000103f, 0x922b: 0xe000103c, + 0x922c: 0xe0000fe7, 0x922d: 0xe0000fe4, 0x922e: 0xe0000ff9, 0x922f: 0xe0000ff6, + 0x9230: 0x003100c3, 0x9231: 0x40310022, 0x9232: 0xe0001039, 0x9233: 0xe0001036, + 0x9234: 0xe0002728, 0x9235: 0xe0002725, 0x9236: 0xe000110e, 0x9237: 0xe000110b, + 0x9238: 0xe0001117, 0x9239: 0xe000113b, 0x923a: 0xe0001138, 0x923b: 0xe000114d, + 0x923c: 0xe000114a, 0x923d: 0xe0001147, 0x923e: 0xe0001144, 0x923f: 0xe0000f64, + // Block 0x249, offset 0x9240 + 0x9240: 0xe000098f, 0x9241: 0xe000098c, 0x9242: 0xe0000995, 0x9243: 0xe0000992, + 0x9244: 0xe0000b62, 0x9245: 0xe0000b5f, 0x9246: 0xe0000b68, 0x9247: 0xe0000b65, + 0x9248: 0xe0000c6c, 0x9249: 0xe0000c69, 0x924a: 0xe0000c72, 0x924b: 0xe0000c6f, + 0x924c: 0xe0000e4a, 0x924d: 0xe0000e47, 0x924e: 0xe0000e50, 0x924f: 0xe0000e4d, + 0x9250: 0xe0000ee8, 0x9251: 0xe0000ee5, 0x9252: 0xe0000eee, 0x9253: 0xe0000eeb, + 0x9254: 0xe0001053, 0x9255: 0xe0001050, 0x9256: 0xe0001059, 0x9257: 0xe0001056, + 0x9258: 0xe0000f61, 0x9259: 0xe0000f5e, 0x925a: 0xe0000fa5, 0x925b: 0xe0000fa2, + 0x925c: 0x00312288, 0x925d: 0x40312220, 0x925e: 0xe0000bf4, 0x925f: 0xe0000bf1, + 0x9260: 0x002ebc88, 0x9261: 0x402c8c20, 0x9262: 0x002f2288, 0x9263: 0x402f2220, + 0x9264: 0x00314088, 0x9265: 0x40314020, 0x9266: 0xe000096f, 0x9267: 0xe000096c, + 0x9268: 0xe0000b32, 0x9269: 0xe0000b2f, 0x926a: 0xe0002758, 0x926b: 0xe0002755, + 0x926c: 0xe0000dfd, 0x926d: 0xe0000df9, 0x926e: 0xe0000e04, 0x926f: 0xe0000e01, + 0x9270: 0xe0000e0b, 0x9271: 0xe0000e07, 0x9272: 0xe0001129, 0x9273: 0xe0001126, + 0x9274: 0x402e5e20, 0x9275: 0x402ed020, 0x9276: 0x40305a20, 0x9277: 0x402dd420, + 0x9278: 0xe0000abf, 0x9279: 0xe0000ec4, 0x927a: 0x002be888, 0x927b: 0x002c4488, + 0x927c: 0x402c4420, 0x927d: 0x002e3888, 0x927e: 0x00303e88, 0x927f: 0x402ffc20, + // Block 0x24a, offset 0x9280 + 0x9280: 0xe0000d24, 0x9281: 0xe0000d21, 0x9282: 0xe0000d2a, 0x9283: 0xe0000d27, + 0x9284: 0xe0000d69, 0x9285: 0xe0000d66, 0x9286: 0xe0000d7b, 0x9287: 0xe0000d78, + 0x9288: 0xe0000d87, 0x9289: 0xe0000d84, 0x928a: 0xe0000d81, 0x928b: 0xe0000d7e, + 0x928c: 0xe0000ded, 0x928d: 0xe0000de9, 0x928e: 0xe0002a38, 0x928f: 0xe0002a35, + 0x9290: 0xe0000e3d, 0x9291: 0xe0000e39, 0x9292: 0xe0000e35, 0x9293: 0xe0000e31, + 0x9294: 0xe0000ea7, 0x9295: 0xe0000ea4, 0x9296: 0xe0000ead, 0x9297: 0xe0000eaa, + 0x9298: 0xe0000ed6, 0x9299: 0xe0000ed3, 0x929a: 0xe0000ef4, 0x929b: 0xe0000ef1, + 0x929c: 0xe0000efb, 0x929d: 0xe0000ef7, 0x929e: 0xe0000f02, 0x929f: 0xe0000eff, + 0x92a0: 0xe0000f41, 0x92a1: 0xe0000f3e, 0x92a2: 0xe0000f53, 0x92a3: 0xe0000f50, + 0x92a4: 0xe0000f26, 0x92a5: 0xe0000f22, 0x92a6: 0xe0000f3a, 0x92a7: 0xe0000f36, + 0x92a8: 0xe0000f5a, 0x92a9: 0xe0000f56, 0x92aa: 0xe0000f93, 0x92ab: 0xe0000f90, + 0x92ac: 0xe0000f9f, 0x92ad: 0xe0000f9c, 0x92ae: 0xe0000fb1, 0x92af: 0xe0000fae, + 0x92b0: 0xe0000fab, 0x92b1: 0xe0000fa8, 0x92b2: 0xe0001093, 0x92b3: 0xe0001090, + 0x92b4: 0xe000109f, 0x92b5: 0xe000109c, 0x92b6: 0xe0001099, 0x92b7: 0xe0001096, + 0x92b8: 0xe0001032, 0x92b9: 0xe000102e, 0x92ba: 0xe0002685, 0x92bb: 0xe0002682, + 0x92bc: 0xe0002a2f, 0x92bd: 0xe00010a6, 0x92be: 0xe0002a32, 0x92bf: 0xe00010ac, + // Block 0x24b, offset 0x92c0 + 0x92c0: 0xe0000b03, 0x92c1: 0xe0000aff, 0x92c2: 0xe0000b13, 0x92c3: 0xe0000b0f, + 0x92c4: 0xe0000b0b, 0x92c5: 0xe0000b07, 0x92c6: 0xe0000b75, 0x92c7: 0xe0000b71, + 0x92c8: 0xe0000c66, 0x92c9: 0xe0000c63, 0x92ca: 0xe0000c78, 0x92cb: 0xe0000c75, + 0x92cc: 0xe0000e84, 0x92cd: 0xe0000e81, 0x92ce: 0xe0000e44, 0x92cf: 0xe0000e41, + 0x92d0: 0xe0002a3e, 0x92d1: 0xe0002a3b, 0x92d2: 0xe0002a44, 0x92d3: 0xe0002a41, + 0x92d4: 0xe0002a50, 0x92d5: 0xe0002a4d, 0x92d6: 0xe0002a4a, 0x92d7: 0xe0002a47, + 0x92d8: 0xe0002a56, 0x92d9: 0xe0002a53, 0x92da: 0xe0000e5d, 0x92db: 0xe0000e59, + 0x92dc: 0xe0000e65, 0x92dd: 0xe0000e61, 0x92de: 0xe0000e75, 0x92df: 0xe0000e71, + 0x92e0: 0xe0000e6d, 0x92e1: 0xe0000e69, 0x92e2: 0xe0000e7d, 0x92e3: 0xe0000e79, + 0x92e4: 0xe000108d, 0x92e5: 0xe000108a, 0x92e6: 0xe000104d, 0x92e7: 0xe000104a, + 0x92e8: 0xe0001066, 0x92e9: 0xe0001062, 0x92ea: 0xe000106e, 0x92eb: 0xe000106a, + 0x92ec: 0xe000107e, 0x92ed: 0xe000107a, 0x92ee: 0xe0001076, 0x92ef: 0xe0001072, + 0x92f0: 0xe0001086, 0x92f1: 0xe0001082, 0x92f2: 0xe0001108, 0x92f3: 0xe0001105, + 0x92f4: 0xe0001135, 0x92f5: 0xe0001132, 0x92f6: 0xe000112f, 0x92f7: 0xe000112c, + 0x92f8: 0xe000111d, 0x92f9: 0xe000111a, 0x92fa: 0xe0000d0a, 0x92fb: 0xe0000d07, + 0x92fc: 0x0030d888, 0x92fd: 0x4030d820, 0x92fe: 0x00312088, 0x92ff: 0x40312020, + // Block 0x24c, offset 0x9300 + 0x9300: 0xa0000000, 0x9301: 0xa0000000, 0x9302: 0xa0000000, 0x9303: 0xa0000000, + 0x9304: 0xa0000000, 0x9305: 0xa0000000, 0x9306: 0xa0000000, 0x9307: 0xa0000000, + 0x9308: 0xa0000000, 0x9309: 0x40020020, 0x930a: 0x40020220, 0x930b: 0x40020420, + 0x930c: 0x40020620, 0x930d: 0x40020820, 0x930e: 0xa0000000, 0x930f: 0xa0000000, + 0x9310: 0xa0000000, 0x9311: 0xa0000000, 0x9312: 0xa0000000, 0x9313: 0xa0000000, + 0x9314: 0xa0000000, 0x9315: 0xa0000000, 0x9316: 0xa0000000, 0x9317: 0xa0000000, + 0x9318: 0xa0000000, 0x9319: 0xa0000000, 0x931a: 0xa0000000, 0x931b: 0xa0000000, + 0x931c: 0xa0000000, 0x931d: 0xa0000000, 0x931e: 0xa0000000, 0x931f: 0xa0000000, + 0x9320: 0x40021220, 0x9321: 0x4002ba20, 0x9322: 0x4003e020, 0x9323: 0x4004ea20, + 0x9324: 0x4027de20, 0x9325: 0x4004ec20, 0x9326: 0x4004e620, 0x9327: 0x4003d220, + 0x9328: 0x4003f420, 0x9329: 0x4003f620, 0x932a: 0x4004d820, 0x932b: 0x40093820, + 0x932c: 0x40024020, 0x932d: 0x40021a20, 0x932e: 0x4002e420, 0x932f: 0x4004e220, + 0x9330: 0x4029cc20, 0x9331: 0x4029ce20, 0x9332: 0x4029d020, 0x9333: 0x4029d220, + 0x9334: 0x4029d420, 0x9335: 0x4029d620, 0x9336: 0x4029d820, 0x9337: 0x4029da20, + 0x9338: 0x4029dc20, 0x9339: 0x4029de20, 0x933a: 0x40026c20, 0x933b: 0x40026220, + 0x933c: 0x40094020, 0x933d: 0xc32f0851, 0x933e: 0x40094420, 0x933f: 0x4002c420, + // Block 0x24d, offset 0x9340 + 0x9340: 0x4004d620, 0x9341: 0x002bde88, 0x9342: 0x002c0a88, 0x9343: 0xc33b0871, + 0x9344: 0x002c6288, 0x9345: 0x002c9888, 0x9346: 0x002d0888, 0x9347: 0xc33f00d1, + 0x9348: 0x002d6888, 0x9349: 0xc3410891, 0x934a: 0x002dcc88, 0x934b: 0x002dfe88, + 0x934c: 0xc0030002, 0x934d: 0x002e8288, 0x934e: 0x002e9e88, 0x934f: 0xc3450071, + 0x9350: 0x002f2c88, 0x9351: 0x002f5688, 0x9352: 0x002f7a88, 0x9353: 0xc3490871, + 0x9354: 0x00302c88, 0x9355: 0xc34d0071, 0x9356: 0x0030be88, 0x9357: 0x0030e288, + 0x9358: 0x0030f688, 0x9359: 0x00310088, 0x935a: 0x00312a88, 0x935b: 0x4003f820, + 0x935c: 0x4004e420, 0x935d: 0x4003fa20, 0x935e: 0x40062420, 0x935f: 0x40021620, + 0x9360: 0x40061e20, 0x9361: 0x402bde20, 0x9362: 0x402c0a20, 0x9363: 0xc3390871, + 0x9364: 0x402c6220, 0x9365: 0x402c9820, 0x9366: 0x402d0820, 0x9367: 0xc33d00d1, + 0x9368: 0x402d6820, 0x9369: 0x402d9a20, 0x936a: 0x402dcc20, 0x936b: 0x402dfe20, + 0x936c: 0xc0000002, 0x936d: 0x402e8220, 0x936e: 0x402e9e20, 0x936f: 0xc3430071, + 0x9370: 0x402f2c20, 0x9371: 0x402f5620, 0x9372: 0x402f7a20, 0x9373: 0xc3470871, + 0x9374: 0x40302c20, 0x9375: 0xc34b0071, 0x9376: 0x4030be20, 0x9377: 0x4030e220, + 0x9378: 0x4030f620, 0x9379: 0x40310020, 0x937a: 0x40312a20, 0x937b: 0x4003fc20, + 0x937c: 0x40094820, 0x937d: 0x4003fe20, 0x937e: 0x40094c20, 0x937f: 0xa0000000, + // Block 0x24e, offset 0x9380 + 0x9380: 0x00093685, 0x9381: 0x40083620, 0x9382: 0x40083820, 0x9383: 0x40083a20, + 0x9384: 0x40083c20, 0x9385: 0x002c628b, 0x9386: 0x002c6285, 0x9387: 0x002c9885, + 0x9388: 0x002d9a85, 0x9389: 0x002dcc85, 0x938a: 0x40083e20, 0x938b: 0x400a6e20, + 0x938c: 0x40084020, 0x938d: 0xe00009c4, 0x938e: 0x402d1e20, 0x938f: 0x40084220, + 0x9390: 0xe00002cb, 0x9391: 0xe00002d3, 0x9392: 0xe00002b2, 0x9393: 0xe00002bb, + 0x9394: 0xe00003cd, 0x9395: 0xe00002c3, 0x9396: 0xe00003d1, 0x9397: 0xe00004ab, + 0x9398: 0xe0000579, 0x9399: 0xe00002c7, 0x939a: 0xe0000640, 0x939b: 0xe00002cf, + 0x939c: 0xe00004af, 0x939d: 0xe0000644, 0x939e: 0xe0000798, 0x939f: 0xf0001e1e, + 0x93a0: 0x002d9a8a, 0x93a1: 0xe00025cd, 0x93a2: 0xe00025d0, 0x93a3: 0xe00025da, + 0x93a4: 0x0030be8a, 0x93a5: 0xe000260a, 0x93a6: 0xe000260d, 0x93a7: 0xe00010bb, + 0x93a8: 0xe00025e0, 0x93a9: 0x0030f68a, 0x93aa: 0xe0002614, 0x93ab: 0xe000261b, + 0x93ac: 0x002e228a, 0x93ad: 0x002c3a8a, 0x93ae: 0x002c628a, 0x93af: 0x002e828a, + 0x93b0: 0x002d9a84, 0x93b1: 0xf0001f04, 0x93b2: 0xf0000404, 0x93b3: 0xf0001f04, + 0x93b4: 0x0030be84, 0x93b5: 0xf0001f04, 0x93b6: 0xf0000404, 0x93b7: 0xe00010b6, + 0x93b8: 0xf0001f04, 0x93b9: 0x0030f684, 0x93ba: 0xf0001f04, 0x93bb: 0xf0000404, + 0x93bc: 0x002e2284, 0x93bd: 0x002c3a84, 0x93be: 0x002c6284, 0x93bf: 0x002e8284, + // Block 0x24f, offset 0x93c0 + 0x93c0: 0xf0001f04, 0x93c1: 0xf0001f04, 0x93c2: 0xf0001f04, 0x93c3: 0xf0001f04, + 0x93c4: 0xf0001f04, 0x93c5: 0xf0001f04, 0x93c6: 0xf0001f04, 0x93c7: 0xf0001f04, + 0x93c8: 0xf0001f04, 0x93c9: 0xf0001f04, 0x93ca: 0xf0001f04, + 0x93d0: 0xf0000a04, 0x93d1: 0xf0000a04, 0x93d2: 0xf0000a04, 0x93d3: 0xf0000a04, + 0x93d4: 0xf0000a04, 0x93d5: 0xf0000a04, 0x93d6: 0xf0000a04, 0x93d7: 0xf0000a04, + 0x93d8: 0xe0002576, 0x93d9: 0xf0000a04, 0x93da: 0xf0000a04, 0x93db: 0xf0000a04, + 0x93dc: 0xf0000a04, 0x93dd: 0xf0000a04, 0x93de: 0xf0000a04, 0x93df: 0xf0000a04, + 0x93e0: 0xf0000a04, 0x93e1: 0xf0000a04, 0x93e2: 0xf0000a04, 0x93e3: 0xf0000a04, + 0x93e4: 0xf0000a04, 0x93e5: 0xf0000a04, 0x93e6: 0xf0000a04, 0x93e7: 0xf0000a04, + 0x93e8: 0xf0000a04, 0x93e9: 0xf0000a04, 0x93ea: 0xf0000a04, 0x93eb: 0x002c3a8c, + 0x93ec: 0x002f7a8c, 0x93ed: 0xf0000c0c, 0x93ee: 0xf0000c0c, + 0x93f0: 0x002bde9d, 0x93f1: 0x002c0a9d, 0x93f2: 0x002c3a9d, 0x93f3: 0x002c629d, + 0x93f4: 0x002c989d, 0x93f5: 0x002d089d, 0x93f6: 0x002d229d, 0x93f7: 0x002d689d, + 0x93f8: 0x002d9a9d, 0x93f9: 0x002dcc9d, 0x93fa: 0x002dfe9d, 0x93fb: 0x002e229d, + 0x93fc: 0x002e829d, 0x93fd: 0x002e9e9d, 0x93fe: 0x002ee29d, 0x93ff: 0x002f2c9d, +} + +// mainLookup: 4864 entries, 9728 bytes +// Block 0 is the null block. +var mainLookup = [4864]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0x0e0: 0x1f, 0x0e1: 0x20, 0x0e2: 0x21, 0x0e3: 0x22, 0x0e4: 0x23, 0x0e5: 0x24, 0x0e6: 0x25, 0x0e7: 0x26, + 0x0e8: 0x27, 0x0e9: 0x28, 0x0ea: 0x29, 0x0eb: 0x2a, 0x0ec: 0x2b, 0x0ed: 0x2c, 0x0ee: 0x2d, 0x0ef: 0x2e, + 0x0f0: 0x2f, 0x0f1: 0x30, 0x0f2: 0x31, 0x0f3: 0x32, 0x0f4: 0x33, 0x0f5: 0x34, 0x0f6: 0x35, 0x0f7: 0x36, + 0x0f8: 0x37, 0x0f9: 0x38, 0x0fa: 0x39, 0x0fb: 0x3a, 0x0fc: 0x3b, 0x0fd: 0x3c, 0x0fe: 0x3d, 0x0ff: 0x3e, + // Block 0x4, offset 0x100 + 0x100: 0x3f, 0x101: 0x40, 0x102: 0x41, 0x103: 0x42, 0x104: 0x43, 0x105: 0x44, 0x106: 0x45, 0x107: 0x46, + 0x108: 0x47, 0x109: 0x48, 0x10a: 0x49, 0x10b: 0x4a, 0x10c: 0x4b, 0x10d: 0x4c, 0x10e: 0x4d, 0x10f: 0x4e, + 0x110: 0x4f, 0x111: 0x50, 0x112: 0x51, 0x113: 0x52, 0x114: 0x53, 0x115: 0x54, 0x116: 0x55, 0x117: 0x56, + 0x118: 0x57, 0x119: 0x58, 0x11a: 0x59, 0x11b: 0x5a, 0x11c: 0x5b, 0x11d: 0x5c, 0x11e: 0x5d, 0x11f: 0x5e, + 0x120: 0x5f, 0x121: 0x60, 0x122: 0x61, 0x123: 0x62, 0x124: 0x63, 0x125: 0x64, 0x126: 0x65, 0x127: 0x66, + 0x128: 0x67, 0x129: 0x68, 0x12a: 0x69, 0x12c: 0x6a, 0x12d: 0x6b, 0x12e: 0x6c, 0x12f: 0x6d, + 0x130: 0x6e, 0x131: 0x6f, 0x133: 0x70, 0x134: 0x71, 0x135: 0x72, 0x136: 0x73, 0x137: 0x74, + 0x138: 0x75, 0x139: 0x76, 0x13a: 0x77, 0x13b: 0x78, 0x13c: 0x79, 0x13d: 0x7a, 0x13e: 0x7b, 0x13f: 0x7c, + // Block 0x5, offset 0x140 + 0x140: 0x7d, 0x141: 0x7e, 0x142: 0x7f, 0x143: 0x80, 0x144: 0x81, 0x145: 0x82, 0x146: 0x83, 0x147: 0x84, + 0x148: 0x85, 0x149: 0x86, 0x14a: 0x87, 0x14b: 0x88, 0x14c: 0x89, 0x14d: 0x8a, 0x14e: 0x8b, 0x14f: 0x8c, + 0x150: 0x8d, 0x151: 0x8e, 0x152: 0x8f, 0x153: 0x90, 0x154: 0x91, 0x155: 0x92, 0x156: 0x93, 0x157: 0x94, + 0x158: 0x95, 0x159: 0x96, 0x15a: 0x97, 0x15b: 0x98, 0x15c: 0x99, 0x15d: 0x9a, 0x15e: 0x9b, 0x15f: 0x9c, + 0x160: 0x9d, 0x161: 0x9e, 0x162: 0x9f, 0x163: 0xa0, 0x164: 0xa1, 0x165: 0xa2, 0x166: 0xa3, 0x167: 0xa4, + 0x168: 0xa5, 0x169: 0xa6, 0x16a: 0xa7, 0x16b: 0xa8, 0x16c: 0xa9, 0x16d: 0xaa, + 0x170: 0xab, 0x171: 0xac, 0x172: 0xad, 0x173: 0xae, 0x174: 0xaf, 0x175: 0xb0, 0x176: 0xb1, 0x177: 0xb2, + 0x178: 0xb3, 0x17a: 0xb4, 0x17b: 0xb5, 0x17c: 0xb6, 0x17d: 0xb7, 0x17e: 0xb8, 0x17f: 0xb9, + // Block 0x6, offset 0x180 + 0x180: 0xba, 0x181: 0xbb, 0x182: 0xbc, 0x183: 0xbd, 0x184: 0xbe, 0x185: 0xbf, 0x186: 0xc0, 0x187: 0xc1, + 0x188: 0xc2, 0x189: 0xc3, 0x18a: 0xc4, 0x18b: 0xc5, 0x18c: 0xc6, 0x18d: 0xc7, 0x18e: 0xc8, 0x18f: 0xc9, + // Block 0x7, offset 0x1c0 + 0x1f7: 0xca, + // Block 0x8, offset 0x200 + 0x200: 0xcb, 0x201: 0xcc, 0x202: 0xcd, 0x203: 0xce, 0x204: 0xcf, 0x205: 0xd0, 0x206: 0xd1, 0x207: 0xd2, + 0x208: 0xd3, 0x209: 0xd4, 0x20a: 0xd5, 0x20b: 0xd6, 0x20c: 0xd7, 0x20d: 0xd8, 0x20e: 0xd9, 0x20f: 0xda, + 0x210: 0xdb, 0x211: 0xdc, 0x212: 0xdd, 0x213: 0xde, 0x214: 0xdf, 0x215: 0xe0, 0x216: 0xe1, 0x217: 0xe2, + 0x218: 0xe3, 0x219: 0xe4, 0x21a: 0xe5, 0x21b: 0xe6, 0x21c: 0xe7, 0x21d: 0xe8, 0x21e: 0xe9, 0x21f: 0xea, + 0x220: 0xeb, 0x221: 0xec, 0x222: 0xed, 0x223: 0xee, 0x224: 0xef, 0x225: 0xf0, 0x226: 0xf1, 0x227: 0xf2, + 0x228: 0xf3, 0x229: 0xf4, 0x22a: 0xf5, 0x22b: 0xf6, 0x22c: 0xf7, 0x22f: 0xf8, + // Block 0x9, offset 0x240 + 0x25e: 0xf9, 0x25f: 0xfa, + // Block 0xa, offset 0x280 + 0x2a4: 0xfb, 0x2a5: 0xfc, 0x2a6: 0xfd, 0x2a7: 0xfe, + 0x2a8: 0xff, 0x2a9: 0x100, 0x2aa: 0x101, 0x2ab: 0x102, 0x2ac: 0x103, 0x2ad: 0x104, 0x2ae: 0x105, 0x2af: 0x106, + 0x2b0: 0x107, 0x2b1: 0x108, 0x2b2: 0x109, 0x2b3: 0x10a, 0x2b4: 0x10b, 0x2b5: 0x10c, 0x2b6: 0x10d, 0x2b7: 0x10e, + 0x2b8: 0x10f, 0x2b9: 0x110, 0x2ba: 0x111, 0x2bb: 0x112, 0x2bc: 0x113, 0x2bd: 0x114, 0x2be: 0x115, 0x2bf: 0x116, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x117, 0x2c1: 0x118, 0x2c2: 0x119, 0x2c3: 0x11a, 0x2c4: 0x11b, 0x2c5: 0x11c, 0x2c6: 0x11d, 0x2c7: 0x11e, + 0x2ca: 0x11f, 0x2cb: 0x120, 0x2cc: 0x121, 0x2cd: 0x122, 0x2ce: 0x123, 0x2cf: 0x124, + 0x2d0: 0x125, 0x2d1: 0x126, 0x2d2: 0x127, + 0x2e0: 0x128, 0x2e1: 0x129, 0x2e4: 0x12a, 0x2e6: 0x12b, + 0x2e8: 0x12c, 0x2e9: 0x12d, 0x2ec: 0x12e, 0x2ed: 0x12f, + 0x2f0: 0x130, 0x2f1: 0x131, + 0x2f9: 0x132, + // Block 0xc, offset 0x300 + 0x300: 0x133, 0x301: 0x134, 0x302: 0x135, 0x303: 0x136, 0x304: 0x137, 0x305: 0x138, 0x306: 0x139, 0x307: 0x13a, + 0x31a: 0x13b, 0x31b: 0x13c, + // Block 0xd, offset 0x340 + 0x340: 0x13d, 0x341: 0x13e, 0x342: 0x13f, 0x343: 0x140, 0x344: 0x141, 0x345: 0x142, 0x346: 0x143, 0x347: 0x144, + 0x348: 0x145, 0x349: 0x146, 0x34a: 0x147, 0x34b: 0x148, 0x34c: 0x149, 0x34d: 0x14a, + 0x350: 0x14b, 0x351: 0x14c, + // Block 0xe, offset 0x380 + 0x380: 0x14d, 0x381: 0x14e, 0x382: 0x14f, 0x383: 0x150, 0x384: 0x151, 0x385: 0x152, 0x386: 0x153, 0x387: 0x154, + 0x388: 0x155, 0x389: 0x156, 0x38a: 0x157, 0x38b: 0x158, 0x38c: 0x159, 0x38d: 0x15a, 0x38e: 0x15b, 0x38f: 0x15c, + 0x390: 0x15d, + // Block 0xf, offset 0x3c0 + 0x3e0: 0x15e, 0x3e1: 0x15f, 0x3e2: 0x160, 0x3e3: 0x161, 0x3e4: 0x162, 0x3e5: 0x163, 0x3e6: 0x164, 0x3e7: 0x165, + 0x3e8: 0x166, + 0x3fc: 0x167, 0x3fd: 0x168, 0x3fe: 0x169, + // Block 0x10, offset 0x400 + 0x400: 0x16a, + // Block 0x11, offset 0x440 + 0x440: 0x16b, 0x441: 0x16c, 0x442: 0x16d, 0x443: 0x16e, 0x444: 0x16f, 0x445: 0x170, 0x446: 0x171, 0x447: 0x172, + 0x448: 0x173, 0x449: 0x174, 0x44c: 0x175, 0x44d: 0x176, + 0x450: 0x177, 0x451: 0x178, 0x452: 0x179, 0x453: 0x17a, 0x454: 0x17b, 0x455: 0x17c, 0x456: 0x17d, 0x457: 0x17e, + 0x458: 0x17f, 0x459: 0x180, 0x45a: 0x181, 0x45b: 0x182, 0x45c: 0x183, 0x45d: 0x184, 0x45e: 0x185, 0x45f: 0x186, + // Block 0x12, offset 0x480 + 0x4b8: 0x187, 0x4b9: 0x188, 0x4ba: 0x189, 0x4bb: 0x18a, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x18b, 0x4c1: 0x18c, 0x4c2: 0x18d, 0x4c3: 0x18e, 0x4c4: 0x18f, 0x4c5: 0x190, 0x4c6: 0x191, 0x4c7: 0x192, + 0x4c8: 0x193, 0x4c9: 0x194, 0x4cc: 0x195, 0x4cd: 0x196, 0x4ce: 0x197, 0x4cf: 0x198, + 0x4d0: 0x199, 0x4d1: 0x19a, 0x4d2: 0x19b, 0x4d3: 0x19c, 0x4d4: 0x19d, 0x4d5: 0x19e, 0x4d7: 0x19f, + 0x4d8: 0x1a0, 0x4d9: 0x1a1, 0x4da: 0x1a2, 0x4db: 0x1a3, 0x4dc: 0x1a4, 0x4dd: 0x1a5, + // Block 0x14, offset 0x500 + 0x520: 0x1a6, 0x521: 0x1a7, 0x522: 0x1a8, 0x523: 0x1a9, 0x524: 0x1aa, 0x525: 0x1ab, 0x526: 0x1ac, 0x527: 0x1ad, + 0x528: 0x1ae, + // Block 0x15, offset 0x540 + 0x550: 0x09, 0x551: 0x0a, 0x552: 0x0b, 0x553: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, + // Block 0x16, offset 0x580 + 0x580: 0x1af, 0x581: 0x1b0, 0x584: 0x1b0, 0x585: 0x1b0, 0x586: 0x1b0, 0x587: 0x1b1, + // Block 0x17, offset 0x5c0 + 0x5e0: 0x14, + // Block 0x18, offset 0x600 + 0x602: 0x01, 0x603: 0x02, 0x604: 0x03, 0x605: 0x04, 0x606: 0x05, 0x607: 0x06, + 0x608: 0x07, 0x609: 0x08, 0x60a: 0x09, 0x60b: 0x0a, 0x60c: 0x0b, 0x60d: 0x0c, 0x60e: 0x0d, 0x60f: 0x0e, + 0x610: 0x0f, 0x611: 0x10, 0x612: 0x11, 0x613: 0x12, 0x614: 0x13, 0x615: 0x14, 0x616: 0x15, 0x617: 0x16, + 0x618: 0x17, 0x619: 0x18, 0x61a: 0x19, 0x61b: 0x1a, 0x61c: 0x1b, 0x61d: 0x1c, 0x61e: 0x1d, 0x61f: 0x1e, + 0x620: 0x01, 0x621: 0x02, 0x622: 0x03, 0x623: 0x04, 0x624: 0x05, + 0x62a: 0x06, 0x62d: 0x07, 0x62f: 0x08, + 0x630: 0x13, 0x633: 0x15, + // Block 0x19, offset 0x640 + 0x660: 0x1f, 0x661: 0x20, 0x662: 0x21, 0x663: 0x22, 0x664: 0x23, 0x665: 0x24, 0x666: 0x25, 0x667: 0x26, + 0x668: 0x27, 0x669: 0x28, 0x66a: 0x29, 0x66b: 0x2a, 0x66c: 0x2b, 0x66d: 0x2c, 0x66e: 0x2d, 0x66f: 0x2e, + 0x670: 0x2f, 0x671: 0x30, 0x672: 0x31, 0x673: 0x32, 0x674: 0x33, 0x675: 0x34, 0x676: 0x35, 0x677: 0x36, + 0x678: 0x1b8, 0x679: 0x38, 0x67a: 0x39, 0x67b: 0x3a, 0x67c: 0x3b, 0x67d: 0x3c, 0x67e: 0x3d, 0x67f: 0x3e, + // Block 0x1a, offset 0x680 + 0x680: 0x3f, 0x681: 0x40, 0x682: 0x41, 0x683: 0x42, 0x684: 0x1b9, 0x685: 0x1ba, 0x686: 0x1bb, 0x687: 0x1bc, + 0x688: 0x47, 0x689: 0x48, 0x68a: 0x49, 0x68b: 0x4a, 0x68c: 0x4b, 0x68d: 0x4c, 0x68e: 0x4d, 0x68f: 0x4e, + 0x690: 0x4f, 0x691: 0x50, 0x692: 0x51, 0x693: 0x52, 0x694: 0x53, 0x695: 0x54, 0x696: 0x55, 0x697: 0x56, + 0x698: 0x57, 0x699: 0x58, 0x69a: 0x59, 0x69b: 0x5a, 0x69c: 0x5b, 0x69d: 0x5c, 0x69e: 0x5d, 0x69f: 0x5e, + 0x6a0: 0x5f, 0x6a1: 0x60, 0x6a2: 0x61, 0x6a3: 0x62, 0x6a4: 0x63, 0x6a5: 0x64, 0x6a6: 0x65, 0x6a7: 0x66, + 0x6a8: 0x67, 0x6a9: 0x68, 0x6aa: 0x69, 0x6ac: 0x6a, 0x6ad: 0x6b, 0x6ae: 0x6c, 0x6af: 0x6d, + 0x6b0: 0x6e, 0x6b1: 0x6f, 0x6b3: 0x70, 0x6b4: 0x71, 0x6b5: 0x72, 0x6b6: 0x73, 0x6b7: 0x74, + 0x6b8: 0x75, 0x6b9: 0x76, 0x6ba: 0x77, 0x6bb: 0x78, 0x6bc: 0x79, 0x6bd: 0x7a, 0x6be: 0x7b, 0x6bf: 0x7c, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x7d, 0x6c1: 0x7e, 0x6c2: 0x7f, 0x6c3: 0x80, 0x6c4: 0x81, 0x6c5: 0x82, 0x6c6: 0x83, 0x6c7: 0x84, + 0x6c8: 0x85, 0x6c9: 0x1bd, 0x6ca: 0x87, 0x6cb: 0x88, 0x6cc: 0x89, 0x6cd: 0x8a, 0x6ce: 0x8b, 0x6cf: 0x8c, + 0x6d0: 0x8d, 0x6d1: 0x8e, 0x6d2: 0x8f, 0x6d3: 0x90, 0x6d4: 0x91, 0x6d5: 0x92, 0x6d6: 0x93, 0x6d7: 0x94, + 0x6d8: 0x95, 0x6d9: 0x96, 0x6da: 0x97, 0x6db: 0x98, 0x6dc: 0x99, 0x6dd: 0x9a, 0x6de: 0x9b, 0x6df: 0x9c, + 0x6e0: 0x9d, 0x6e1: 0x9e, 0x6e2: 0x9f, 0x6e3: 0xa0, 0x6e4: 0xa1, 0x6e5: 0xa2, 0x6e6: 0xa3, 0x6e7: 0xa4, + 0x6e8: 0xa5, 0x6e9: 0xa6, 0x6ea: 0xa7, 0x6eb: 0xa8, 0x6ec: 0xa9, 0x6ed: 0xaa, + 0x6f0: 0xab, 0x6f1: 0xac, 0x6f2: 0xad, 0x6f3: 0xae, 0x6f4: 0xaf, 0x6f5: 0xb0, 0x6f6: 0xb1, 0x6f7: 0xb2, + 0x6f8: 0xb3, 0x6fa: 0xb4, 0x6fb: 0xb5, 0x6fc: 0xb6, 0x6fd: 0xb7, 0x6fe: 0xb8, 0x6ff: 0xb9, + // Block 0x1c, offset 0x700 + 0x724: 0xfb, 0x725: 0xfc, 0x726: 0xfd, 0x727: 0xfe, + 0x728: 0xff, 0x729: 0x100, 0x72a: 0x101, 0x72b: 0x102, 0x72c: 0x103, 0x72d: 0x104, 0x72e: 0x105, 0x72f: 0x1be, + 0x730: 0x1bf, 0x731: 0x1c0, 0x732: 0x1c1, 0x733: 0x1c2, 0x734: 0x1c3, 0x735: 0x10c, 0x736: 0x10d, 0x737: 0x10e, + 0x738: 0x10f, 0x739: 0x110, 0x73a: 0x1c4, 0x73b: 0x1c5, 0x73c: 0x113, 0x73d: 0x114, 0x73e: 0x115, 0x73f: 0x116, + // Block 0x1d, offset 0x740 + 0x742: 0x01, 0x743: 0x02, 0x744: 0x03, 0x745: 0x04, 0x746: 0x05, 0x747: 0x06, + 0x748: 0x07, 0x749: 0x08, 0x74a: 0x09, 0x74b: 0x0a, 0x74c: 0x0b, 0x74d: 0x0c, 0x74e: 0x0d, 0x74f: 0x0e, + 0x750: 0x0f, 0x751: 0x10, 0x752: 0x11, 0x753: 0x12, 0x754: 0x13, 0x755: 0x14, 0x756: 0x15, 0x757: 0x1b4, + 0x758: 0x1b5, 0x759: 0x1b6, 0x75a: 0x19, 0x75b: 0x1b7, 0x75c: 0x1b, 0x75d: 0x1c, 0x75e: 0x1d, 0x75f: 0x1e, + 0x760: 0x17, 0x761: 0x18, 0x762: 0x19, 0x763: 0x04, 0x764: 0x05, + 0x76a: 0x06, 0x76d: 0x07, 0x76f: 0x1a, + 0x770: 0x13, 0x773: 0x15, + // Block 0x1e, offset 0x780 + 0x780: 0x3f, 0x781: 0x40, 0x782: 0x41, 0x783: 0x42, 0x784: 0x1b9, 0x785: 0x1ba, 0x786: 0x1bb, 0x787: 0x1bc, + 0x788: 0x47, 0x789: 0x48, 0x78a: 0x49, 0x78b: 0x4a, 0x78c: 0x4b, 0x78d: 0x4c, 0x78e: 0x4d, 0x78f: 0x4e, + 0x790: 0x4f, 0x791: 0x50, 0x792: 0x51, 0x793: 0x52, 0x794: 0x53, 0x795: 0x54, 0x796: 0x55, 0x797: 0x56, + 0x798: 0x57, 0x799: 0x58, 0x79a: 0x59, 0x79b: 0x5a, 0x79c: 0x5b, 0x79d: 0x5c, 0x79e: 0x5d, 0x79f: 0x5e, + 0x7a0: 0x5f, 0x7a1: 0x60, 0x7a2: 0x61, 0x7a3: 0x62, 0x7a4: 0x63, 0x7a5: 0x64, 0x7a6: 0x65, 0x7a7: 0x66, + 0x7a8: 0x67, 0x7a9: 0x68, 0x7aa: 0x69, 0x7ac: 0x6a, 0x7ad: 0x6b, 0x7ae: 0x6c, 0x7af: 0x6d, + 0x7b0: 0x6e, 0x7b1: 0x6f, 0x7b3: 0x70, 0x7b4: 0x71, 0x7b5: 0x72, 0x7b6: 0x73, 0x7b7: 0x74, + 0x7b8: 0x1cf, 0x7b9: 0x1d0, 0x7ba: 0x1d1, 0x7bb: 0x1d2, 0x7bc: 0x79, 0x7bd: 0x7a, 0x7be: 0x7b, 0x7bf: 0x7c, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x7d, 0x7c1: 0x7e, 0x7c2: 0x7f, 0x7c3: 0x80, 0x7c4: 0x81, 0x7c5: 0x1d3, 0x7c6: 0x83, 0x7c7: 0x84, + 0x7c8: 0x85, 0x7c9: 0x1bd, 0x7ca: 0x87, 0x7cb: 0x88, 0x7cc: 0x89, 0x7cd: 0x8a, 0x7ce: 0x8b, 0x7cf: 0x8c, + 0x7d0: 0x8d, 0x7d1: 0x8e, 0x7d2: 0x1d4, 0x7d3: 0x90, 0x7d4: 0x91, 0x7d5: 0x92, 0x7d6: 0x93, 0x7d7: 0x94, + 0x7d8: 0x95, 0x7d9: 0x96, 0x7da: 0x97, 0x7db: 0x98, 0x7dc: 0x99, 0x7dd: 0x9a, 0x7de: 0x9b, 0x7df: 0x9c, + 0x7e0: 0x9d, 0x7e1: 0x9e, 0x7e2: 0x9f, 0x7e3: 0xa0, 0x7e4: 0xa1, 0x7e5: 0xa2, 0x7e6: 0xa3, 0x7e7: 0xa4, + 0x7e8: 0xa5, 0x7e9: 0xa6, 0x7ea: 0xa7, 0x7eb: 0xa8, 0x7ec: 0xa9, 0x7ed: 0xaa, + 0x7f0: 0xab, 0x7f1: 0xac, 0x7f2: 0xad, 0x7f3: 0xae, 0x7f4: 0xaf, 0x7f5: 0xb0, 0x7f6: 0xb1, 0x7f7: 0xb2, + 0x7f8: 0xb3, 0x7fa: 0xb4, 0x7fb: 0xb5, 0x7fc: 0xb6, 0x7fd: 0xb7, 0x7fe: 0xb8, 0x7ff: 0xb9, + // Block 0x20, offset 0x800 + 0x800: 0xba, 0x801: 0xbb, 0x802: 0xbc, 0x803: 0xbd, 0x804: 0xbe, 0x805: 0xbf, 0x806: 0xc0, 0x807: 0xc1, + 0x808: 0xc2, 0x809: 0xc3, 0x80a: 0xc4, 0x80b: 0xc5, 0x80c: 0xc6, 0x80d: 0x1d5, 0x80e: 0xc8, 0x80f: 0x1d6, + // Block 0x21, offset 0x840 + 0x840: 0x18b, 0x841: 0x18c, 0x842: 0x18d, 0x843: 0x18e, 0x844: 0x1d7, 0x845: 0x190, 0x846: 0x191, 0x847: 0x192, + 0x848: 0x193, 0x849: 0x194, 0x84c: 0x195, 0x84d: 0x196, 0x84e: 0x197, 0x84f: 0x198, + 0x850: 0x199, 0x851: 0x19a, 0x852: 0x19b, 0x853: 0x19c, 0x854: 0x19d, 0x855: 0x19e, 0x857: 0x19f, + 0x858: 0x1a0, 0x859: 0x1a1, 0x85a: 0x1a2, 0x85b: 0x1a3, 0x85c: 0x1a4, 0x85d: 0x1a5, + // Block 0x22, offset 0x880 + 0x890: 0x09, 0x891: 0x0a, 0x892: 0x0b, 0x893: 0x0c, 0x896: 0x0d, + 0x89b: 0x0e, 0x89d: 0x0f, 0x89e: 0x10, 0x89f: 0x1f, + 0x8af: 0x12, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x01, 0x8c3: 0x1c8, 0x8c4: 0x1c9, 0x8c5: 0x1ca, 0x8c6: 0x1cb, 0x8c7: 0x1cc, + 0x8c8: 0x1cd, 0x8c9: 0x1ce, 0x8ca: 0x09, 0x8cb: 0x0a, 0x8cc: 0x0b, 0x8cd: 0x0c, 0x8ce: 0x0d, 0x8cf: 0x0e, + 0x8d0: 0x0f, 0x8d1: 0x10, 0x8d2: 0x11, 0x8d3: 0x12, 0x8d4: 0x13, 0x8d5: 0x14, 0x8d6: 0x15, 0x8d7: 0x1b4, + 0x8d8: 0x1b5, 0x8d9: 0x1b6, 0x8da: 0x19, 0x8db: 0x1b7, 0x8dc: 0x1b, 0x8dd: 0x1c, 0x8de: 0x1d, 0x8df: 0x1e, + 0x8e0: 0x17, 0x8e1: 0x1c, 0x8e2: 0x1d, 0x8e3: 0x1e, 0x8e4: 0x05, + 0x8ea: 0x06, 0x8ed: 0x07, 0x8ef: 0x1a, + 0x8f0: 0x20, 0x8f3: 0x15, + // Block 0x24, offset 0x900 + 0x902: 0x01, 0x903: 0x02, 0x904: 0x1da, 0x905: 0x1db, 0x906: 0x05, 0x907: 0x06, + 0x908: 0x07, 0x909: 0x08, 0x90a: 0x09, 0x90b: 0x0a, 0x90c: 0x0b, 0x90d: 0x0c, 0x90e: 0x0d, 0x90f: 0x0e, + 0x910: 0x0f, 0x911: 0x10, 0x912: 0x11, 0x913: 0x12, 0x914: 0x13, 0x915: 0x14, 0x916: 0x15, 0x917: 0x1b4, + 0x918: 0x1b5, 0x919: 0x1b6, 0x91a: 0x19, 0x91b: 0x1b7, 0x91c: 0x1b, 0x91d: 0x1c, 0x91e: 0x1d, 0x91f: 0x1e, + 0x920: 0x17, 0x921: 0x18, 0x922: 0x19, 0x923: 0x04, 0x924: 0x05, + 0x92a: 0x06, 0x92d: 0x07, 0x92f: 0x1a, + 0x930: 0x13, 0x933: 0x15, + // Block 0x25, offset 0x940 + 0x940: 0x3f, 0x941: 0x40, 0x942: 0x41, 0x943: 0x42, 0x944: 0x1b9, 0x945: 0x1ba, 0x946: 0x1bb, 0x947: 0x1bc, + 0x948: 0x47, 0x949: 0x48, 0x94a: 0x49, 0x94b: 0x4a, 0x94c: 0x4b, 0x94d: 0x4c, 0x94e: 0x4d, 0x94f: 0x4e, + 0x950: 0x4f, 0x951: 0x50, 0x952: 0x51, 0x953: 0x52, 0x954: 0x53, 0x955: 0x54, 0x956: 0x55, 0x957: 0x56, + 0x958: 0x57, 0x959: 0x58, 0x95a: 0x59, 0x95b: 0x5a, 0x95c: 0x5b, 0x95d: 0x5c, 0x95e: 0x5d, 0x95f: 0x5e, + 0x960: 0x5f, 0x961: 0x60, 0x962: 0x61, 0x963: 0x62, 0x964: 0x63, 0x965: 0x64, 0x966: 0x65, 0x967: 0x66, + 0x968: 0x67, 0x969: 0x68, 0x96a: 0x69, 0x96c: 0x6a, 0x96d: 0x6b, 0x96e: 0x6c, 0x96f: 0x6d, + 0x970: 0x6e, 0x971: 0x6f, 0x973: 0x70, 0x974: 0x71, 0x975: 0x72, 0x976: 0x73, 0x977: 0x74, + 0x978: 0x1e2, 0x979: 0x1e3, 0x97a: 0x1e4, 0x97b: 0x1e5, 0x97c: 0x79, 0x97d: 0x7a, 0x97e: 0x7b, 0x97f: 0x7c, + // Block 0x26, offset 0x980 + 0x982: 0x01, 0x983: 0x1de, 0x984: 0x1df, 0x985: 0x1e0, 0x986: 0x05, 0x987: 0x1e1, + 0x988: 0x07, 0x989: 0x08, 0x98a: 0x09, 0x98b: 0x0a, 0x98c: 0x0b, 0x98d: 0x0c, 0x98e: 0x0d, 0x98f: 0x0e, + 0x990: 0x0f, 0x991: 0x10, 0x992: 0x11, 0x993: 0x12, 0x994: 0x13, 0x995: 0x14, 0x996: 0x15, 0x997: 0x1b4, + 0x998: 0x1b5, 0x999: 0x1b6, 0x99a: 0x19, 0x99b: 0x1b7, 0x99c: 0x1b, 0x99d: 0x1c, 0x99e: 0x1d, 0x99f: 0x1e, + 0x9a0: 0x17, 0x9a1: 0x23, 0x9a2: 0x19, 0x9a3: 0x04, 0x9a4: 0x05, + 0x9aa: 0x06, 0x9ad: 0x07, 0x9af: 0x1a, + 0x9b0: 0x13, 0x9b3: 0x15, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x3f, 0x9c1: 0x40, 0x9c2: 0x41, 0x9c3: 0x42, 0x9c4: 0x1b9, 0x9c5: 0x1ba, 0x9c6: 0x1bb, 0x9c7: 0x1bc, + 0x9c8: 0x47, 0x9c9: 0x48, 0x9ca: 0x49, 0x9cb: 0x4a, 0x9cc: 0x4b, 0x9cd: 0x4c, 0x9ce: 0x4d, 0x9cf: 0x4e, + 0x9d0: 0x4f, 0x9d1: 0x50, 0x9d2: 0x51, 0x9d3: 0x52, 0x9d4: 0x53, 0x9d5: 0x54, 0x9d6: 0x55, 0x9d7: 0x56, + 0x9d8: 0x57, 0x9d9: 0x58, 0x9da: 0x59, 0x9db: 0x5a, 0x9dc: 0x5b, 0x9dd: 0x5c, 0x9de: 0x5d, 0x9df: 0x5e, + 0x9e0: 0x5f, 0x9e1: 0x60, 0x9e2: 0x61, 0x9e3: 0x62, 0x9e4: 0x63, 0x9e5: 0x64, 0x9e6: 0x65, 0x9e7: 0x66, + 0x9e8: 0x67, 0x9e9: 0x68, 0x9ea: 0x69, 0x9ec: 0x6a, 0x9ed: 0x6b, 0x9ee: 0x6c, 0x9ef: 0x6d, + 0x9f0: 0x6e, 0x9f1: 0x6f, 0x9f3: 0x70, 0x9f4: 0x71, 0x9f5: 0x72, 0x9f6: 0x1ed, 0x9f7: 0x74, + 0x9f8: 0x75, 0x9f9: 0x1ee, 0x9fa: 0x77, 0x9fb: 0x78, 0x9fc: 0x79, 0x9fd: 0x7a, 0x9fe: 0x7b, 0x9ff: 0x7c, + // Block 0x28, offset 0xa00 + 0xa00: 0x7d, 0xa01: 0x7e, 0xa02: 0x7f, 0xa03: 0x80, 0xa04: 0x1ef, 0xa05: 0x82, 0xa06: 0x83, 0xa07: 0x84, + 0xa08: 0x85, 0xa09: 0x1bd, 0xa0a: 0x87, 0xa0b: 0x88, 0xa0c: 0x89, 0xa0d: 0x8a, 0xa0e: 0x8b, 0xa0f: 0x8c, + 0xa10: 0x8d, 0xa11: 0x8e, 0xa12: 0x8f, 0xa13: 0x90, 0xa14: 0x91, 0xa15: 0x92, 0xa16: 0x93, 0xa17: 0x94, + 0xa18: 0x95, 0xa19: 0x96, 0xa1a: 0x97, 0xa1b: 0x98, 0xa1c: 0x99, 0xa1d: 0x9a, 0xa1e: 0x9b, 0xa1f: 0x9c, + 0xa20: 0x9d, 0xa21: 0x9e, 0xa22: 0x9f, 0xa23: 0xa0, 0xa24: 0xa1, 0xa25: 0xa2, 0xa26: 0xa3, 0xa27: 0xa4, + 0xa28: 0xa5, 0xa29: 0xa6, 0xa2a: 0xa7, 0xa2b: 0xa8, 0xa2c: 0xa9, 0xa2d: 0xaa, + 0xa30: 0xab, 0xa31: 0xac, 0xa32: 0xad, 0xa33: 0xae, 0xa34: 0xaf, 0xa35: 0xb0, 0xa36: 0xb1, 0xa37: 0xb2, + 0xa38: 0xb3, 0xa3a: 0xb4, 0xa3b: 0xb5, 0xa3c: 0xb6, 0xa3d: 0xb7, 0xa3e: 0xb8, 0xa3f: 0xb9, + // Block 0x29, offset 0xa40 + 0xa42: 0x01, 0xa43: 0x1e8, 0xa44: 0x1e9, 0xa45: 0x1ea, 0xa46: 0x05, 0xa47: 0x1eb, + 0xa48: 0x1ec, 0xa49: 0x08, 0xa4a: 0x09, 0xa4b: 0x0a, 0xa4c: 0x0b, 0xa4d: 0x0c, 0xa4e: 0x0d, 0xa4f: 0x0e, + 0xa50: 0x0f, 0xa51: 0x10, 0xa52: 0x11, 0xa53: 0x12, 0xa54: 0x13, 0xa55: 0x14, 0xa56: 0x15, 0xa57: 0x1b4, + 0xa58: 0x1b5, 0xa59: 0x1b6, 0xa5a: 0x19, 0xa5b: 0x1b7, 0xa5c: 0x1b, 0xa5d: 0x1c, 0xa5e: 0x1d, 0xa5f: 0x1e, + 0xa60: 0x17, 0xa61: 0x25, 0xa62: 0x26, 0xa63: 0x04, 0xa64: 0x05, + 0xa6a: 0x06, 0xa6d: 0x07, 0xa6f: 0x1a, + 0xa70: 0x13, 0xa73: 0x15, + // Block 0x2a, offset 0xa80 + 0xa80: 0x3f, 0xa81: 0x40, 0xa82: 0x41, 0xa83: 0x42, 0xa84: 0x1b9, 0xa85: 0x1ba, 0xa86: 0x1bb, 0xa87: 0x1bc, + 0xa88: 0x47, 0xa89: 0x48, 0xa8a: 0x49, 0xa8b: 0x4a, 0xa8c: 0x4b, 0xa8d: 0x4c, 0xa8e: 0x4d, 0xa8f: 0x4e, + 0xa90: 0x4f, 0xa91: 0x50, 0xa92: 0x51, 0xa93: 0x52, 0xa94: 0x53, 0xa95: 0x54, 0xa96: 0x55, 0xa97: 0x56, + 0xa98: 0x57, 0xa99: 0x58, 0xa9a: 0x59, 0xa9b: 0x5a, 0xa9c: 0x5b, 0xa9d: 0x5c, 0xa9e: 0x5d, 0xa9f: 0x5e, + 0xaa0: 0x5f, 0xaa1: 0x60, 0xaa2: 0x61, 0xaa3: 0x62, 0xaa4: 0x63, 0xaa5: 0x64, 0xaa6: 0x65, 0xaa7: 0x66, + 0xaa8: 0x67, 0xaa9: 0x68, 0xaaa: 0x69, 0xaac: 0x6a, 0xaad: 0x6b, 0xaae: 0x6c, 0xaaf: 0x6d, + 0xab0: 0x6e, 0xab1: 0x6f, 0xab3: 0x70, 0xab4: 0x71, 0xab5: 0x72, 0xab6: 0x73, 0xab7: 0x74, + 0xab8: 0x75, 0xab9: 0x1f5, 0xaba: 0x77, 0xabb: 0x78, 0xabc: 0x79, 0xabd: 0x7a, 0xabe: 0x7b, 0xabf: 0x7c, + // Block 0x2b, offset 0xac0 + 0xac2: 0x01, 0xac3: 0x1f2, 0xac4: 0x03, 0xac5: 0x04, 0xac6: 0x05, 0xac7: 0x1f3, + 0xac8: 0x1f4, 0xac9: 0x08, 0xaca: 0x09, 0xacb: 0x0a, 0xacc: 0x0b, 0xacd: 0x0c, 0xace: 0x0d, 0xacf: 0x0e, + 0xad0: 0x0f, 0xad1: 0x10, 0xad2: 0x11, 0xad3: 0x12, 0xad4: 0x13, 0xad5: 0x14, 0xad6: 0x15, 0xad7: 0x1b4, + 0xad8: 0x1b5, 0xad9: 0x1b6, 0xada: 0x19, 0xadb: 0x1b7, 0xadc: 0x1b, 0xadd: 0x1c, 0xade: 0x1d, 0xadf: 0x1e, + 0xae0: 0x17, 0xae1: 0x28, 0xae2: 0x19, 0xae3: 0x04, 0xae4: 0x05, + 0xaea: 0x06, 0xaed: 0x07, 0xaef: 0x1a, + 0xaf0: 0x13, 0xaf3: 0x15, + // Block 0x2c, offset 0xb00 + 0xb02: 0x01, 0xb03: 0x1f8, 0xb04: 0x03, 0xb05: 0x04, 0xb06: 0x05, 0xb07: 0x06, + 0xb08: 0x07, 0xb09: 0x08, 0xb0a: 0x09, 0xb0b: 0x0a, 0xb0c: 0x0b, 0xb0d: 0x0c, 0xb0e: 0x0d, 0xb0f: 0x0e, + 0xb10: 0x0f, 0xb11: 0x10, 0xb12: 0x11, 0xb13: 0x12, 0xb14: 0x13, 0xb15: 0x14, 0xb16: 0x15, 0xb17: 0x1b4, + 0xb18: 0x1b5, 0xb19: 0x1b6, 0xb1a: 0x19, 0xb1b: 0x1b7, 0xb1c: 0x1b, 0xb1d: 0x1c, 0xb1e: 0x1d, 0xb1f: 0x1e, + 0xb20: 0x17, 0xb21: 0x18, 0xb22: 0x19, 0xb23: 0x04, 0xb24: 0x05, + 0xb2a: 0x06, 0xb2d: 0x07, 0xb2f: 0x1a, + 0xb30: 0x13, 0xb33: 0x15, + // Block 0x2d, offset 0xb40 + 0xb40: 0x3f, 0xb41: 0x40, 0xb42: 0x41, 0xb43: 0x42, 0xb44: 0x1b9, 0xb45: 0x1ba, 0xb46: 0x1bb, 0xb47: 0x1bc, + 0xb48: 0x47, 0xb49: 0x48, 0xb4a: 0x49, 0xb4b: 0x4a, 0xb4c: 0x4b, 0xb4d: 0x4c, 0xb4e: 0x4d, 0xb4f: 0x4e, + 0xb50: 0x4f, 0xb51: 0x50, 0xb52: 0x51, 0xb53: 0x52, 0xb54: 0x53, 0xb55: 0x54, 0xb56: 0x55, 0xb57: 0x56, + 0xb58: 0x57, 0xb59: 0x58, 0xb5a: 0x59, 0xb5b: 0x5a, 0xb5c: 0x5b, 0xb5d: 0x5c, 0xb5e: 0x5d, 0xb5f: 0x5e, + 0xb60: 0x5f, 0xb61: 0x60, 0xb62: 0x61, 0xb63: 0x62, 0xb64: 0x63, 0xb65: 0x64, 0xb66: 0x65, 0xb67: 0x66, + 0xb68: 0x67, 0xb69: 0x68, 0xb6a: 0x69, 0xb6c: 0x6a, 0xb6d: 0x6b, 0xb6e: 0x6c, 0xb6f: 0x6d, + 0xb70: 0x6e, 0xb71: 0x6f, 0xb73: 0x70, 0xb74: 0x71, 0xb75: 0x72, 0xb76: 0x1ed, 0xb77: 0x74, + 0xb78: 0x75, 0xb79: 0x200, 0xb7a: 0x201, 0xb7b: 0x202, 0xb7c: 0x79, 0xb7d: 0x7a, 0xb7e: 0x7b, 0xb7f: 0x7c, + // Block 0x2e, offset 0xb80 + 0xb80: 0x7d, 0xb81: 0x7e, 0xb82: 0x7f, 0xb83: 0x80, 0xb84: 0x203, 0xb85: 0x82, 0xb86: 0x83, 0xb87: 0x84, + 0xb88: 0x85, 0xb89: 0x1bd, 0xb8a: 0x87, 0xb8b: 0x88, 0xb8c: 0x89, 0xb8d: 0x8a, 0xb8e: 0x8b, 0xb8f: 0x8c, + 0xb90: 0x8d, 0xb91: 0x8e, 0xb92: 0x204, 0xb93: 0x90, 0xb94: 0x91, 0xb95: 0x92, 0xb96: 0x93, 0xb97: 0x94, + 0xb98: 0x95, 0xb99: 0x96, 0xb9a: 0x97, 0xb9b: 0x98, 0xb9c: 0x99, 0xb9d: 0x9a, 0xb9e: 0x9b, 0xb9f: 0x9c, + 0xba0: 0x9d, 0xba1: 0x9e, 0xba2: 0x9f, 0xba3: 0xa0, 0xba4: 0xa1, 0xba5: 0xa2, 0xba6: 0xa3, 0xba7: 0xa4, + 0xba8: 0xa5, 0xba9: 0xa6, 0xbaa: 0xa7, 0xbab: 0xa8, 0xbac: 0xa9, 0xbad: 0xaa, + 0xbb0: 0xab, 0xbb1: 0xac, 0xbb2: 0xad, 0xbb3: 0xae, 0xbb4: 0xaf, 0xbb5: 0xb0, 0xbb6: 0xb1, 0xbb7: 0xb2, + 0xbb8: 0xb3, 0xbba: 0xb4, 0xbbb: 0xb5, 0xbbc: 0xb6, 0xbbd: 0xb7, 0xbbe: 0xb8, 0xbbf: 0xb9, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0xba, 0xbc1: 0xbb, 0xbc2: 0xbc, 0xbc3: 0xbd, 0xbc4: 0xbe, 0xbc5: 0xbf, 0xbc6: 0xc0, 0xbc7: 0xc1, + 0xbc8: 0xc2, 0xbc9: 0xc3, 0xbca: 0xc4, 0xbcb: 0xc5, 0xbcc: 0xc6, 0xbcd: 0xc7, 0xbce: 0x205, 0xbcf: 0x206, + // Block 0x30, offset 0xc00 + 0xc00: 0x18b, 0xc01: 0x18c, 0xc02: 0x18d, 0xc03: 0x18e, 0xc04: 0x207, 0xc05: 0x208, 0xc06: 0x191, 0xc07: 0x192, + 0xc08: 0x193, 0xc09: 0x194, 0xc0c: 0x195, 0xc0d: 0x196, 0xc0e: 0x197, 0xc0f: 0x198, + 0xc10: 0x199, 0xc11: 0x19a, 0xc12: 0x19b, 0xc13: 0x19c, 0xc14: 0x19d, 0xc15: 0x19e, 0xc17: 0x19f, + 0xc18: 0x1a0, 0xc19: 0x1a1, 0xc1a: 0x1a2, 0xc1b: 0x1a3, 0xc1c: 0x1a4, 0xc1d: 0x1a5, + // Block 0x31, offset 0xc40 + 0xc50: 0x09, 0xc51: 0x0a, 0xc52: 0x0b, 0xc53: 0x0c, 0xc56: 0x0d, + 0xc5b: 0x0e, 0xc5d: 0x0f, 0xc5e: 0x10, 0xc5f: 0x2e, + 0xc6f: 0x12, + // Block 0x32, offset 0xc80 + 0xc82: 0x01, 0xc83: 0x1fb, 0xc84: 0x1fc, 0xc85: 0x1fd, 0xc86: 0x05, 0xc87: 0x1fe, + 0xc88: 0x1ff, 0xc89: 0x08, 0xc8a: 0x09, 0xc8b: 0x0a, 0xc8c: 0x0b, 0xc8d: 0x0c, 0xc8e: 0x0d, 0xc8f: 0x0e, + 0xc90: 0x0f, 0xc91: 0x10, 0xc92: 0x11, 0xc93: 0x12, 0xc94: 0x13, 0xc95: 0x14, 0xc96: 0x15, 0xc97: 0x1b4, + 0xc98: 0x1b5, 0xc99: 0x1b6, 0xc9a: 0x19, 0xc9b: 0x1b7, 0xc9c: 0x1b, 0xc9d: 0x1c, 0xc9e: 0x1d, 0xc9f: 0x1e, + 0xca0: 0x17, 0xca1: 0x2b, 0xca2: 0x2c, 0xca3: 0x2d, 0xca4: 0x05, + 0xcaa: 0x06, 0xcad: 0x07, 0xcaf: 0x1a, + 0xcb0: 0x2f, 0xcb3: 0x15, + // Block 0x33, offset 0xcc0 + 0xce0: 0x1f, 0xce1: 0x20, 0xce2: 0x21, 0xce3: 0x22, 0xce4: 0x23, 0xce5: 0x24, 0xce6: 0x25, 0xce7: 0x26, + 0xce8: 0x27, 0xce9: 0x28, 0xcea: 0x29, 0xceb: 0x2a, 0xcec: 0x2b, 0xced: 0x2c, 0xcee: 0x2d, 0xcef: 0x2e, + 0xcf0: 0x2f, 0xcf1: 0x30, 0xcf2: 0x31, 0xcf3: 0x32, 0xcf4: 0x33, 0xcf5: 0x34, 0xcf6: 0x35, 0xcf7: 0x36, + 0xcf8: 0x20d, 0xcf9: 0x38, 0xcfa: 0x39, 0xcfb: 0x3a, 0xcfc: 0x3b, 0xcfd: 0x3c, 0xcfe: 0x3d, 0xcff: 0x3e, + // Block 0x34, offset 0xd00 + 0xd02: 0x01, 0xd03: 0x02, 0xd04: 0x03, 0xd05: 0x04, 0xd06: 0x05, 0xd07: 0x06, + 0xd08: 0x07, 0xd09: 0x08, 0xd0a: 0x09, 0xd0b: 0x0a, 0xd0c: 0x0b, 0xd0d: 0x0c, 0xd0e: 0x0d, 0xd0f: 0x0e, + 0xd10: 0x0f, 0xd11: 0x10, 0xd12: 0x11, 0xd13: 0x12, 0xd14: 0x13, 0xd15: 0x14, 0xd16: 0x15, 0xd17: 0x20b, + 0xd18: 0x1b5, 0xd19: 0x20c, 0xd1a: 0x19, 0xd1b: 0x1b7, 0xd1c: 0x1b, 0xd1d: 0x1c, 0xd1e: 0x1d, 0xd1f: 0x1e, + 0xd20: 0x31, 0xd21: 0x18, 0xd22: 0x19, 0xd23: 0x04, 0xd24: 0x05, + 0xd2a: 0x06, 0xd2d: 0x07, 0xd2f: 0x1a, + 0xd30: 0x13, 0xd33: 0x15, + // Block 0x35, offset 0xd40 + 0xd40: 0x3f, 0xd41: 0x40, 0xd42: 0x41, 0xd43: 0x42, 0xd44: 0x1b9, 0xd45: 0x1ba, 0xd46: 0x1bb, 0xd47: 0x1bc, + 0xd48: 0x47, 0xd49: 0x48, 0xd4a: 0x49, 0xd4b: 0x4a, 0xd4c: 0x4b, 0xd4d: 0x4c, 0xd4e: 0x4d, 0xd4f: 0x4e, + 0xd50: 0x4f, 0xd51: 0x50, 0xd52: 0x51, 0xd53: 0x52, 0xd54: 0x53, 0xd55: 0x54, 0xd56: 0x55, 0xd57: 0x56, + 0xd58: 0x57, 0xd59: 0x58, 0xd5a: 0x59, 0xd5b: 0x5a, 0xd5c: 0x5b, 0xd5d: 0x5c, 0xd5e: 0x5d, 0xd5f: 0x5e, + 0xd60: 0x5f, 0xd61: 0x60, 0xd62: 0x61, 0xd63: 0x62, 0xd64: 0x63, 0xd65: 0x64, 0xd66: 0x65, 0xd67: 0x66, + 0xd68: 0x67, 0xd69: 0x68, 0xd6a: 0x69, 0xd6c: 0x6a, 0xd6d: 0x6b, 0xd6e: 0x6c, 0xd6f: 0x6d, + 0xd70: 0x6e, 0xd71: 0x6f, 0xd73: 0x70, 0xd74: 0x71, 0xd75: 0x72, 0xd76: 0x73, 0xd77: 0x74, + 0xd78: 0x213, 0xd79: 0x214, 0xd7a: 0x77, 0xd7b: 0x78, 0xd7c: 0x79, 0xd7d: 0x7a, 0xd7e: 0x7b, 0xd7f: 0x7c, + // Block 0x36, offset 0xd80 + 0xd82: 0x01, 0xd83: 0x02, 0xd84: 0x210, 0xd85: 0x211, 0xd86: 0x05, 0xd87: 0x212, + 0xd88: 0x07, 0xd89: 0x08, 0xd8a: 0x09, 0xd8b: 0x0a, 0xd8c: 0x0b, 0xd8d: 0x0c, 0xd8e: 0x0d, 0xd8f: 0x0e, + 0xd90: 0x0f, 0xd91: 0x10, 0xd92: 0x11, 0xd93: 0x12, 0xd94: 0x13, 0xd95: 0x14, 0xd96: 0x15, 0xd97: 0x1b4, + 0xd98: 0x1b5, 0xd99: 0x1b6, 0xd9a: 0x19, 0xd9b: 0x1b7, 0xd9c: 0x1b, 0xd9d: 0x1c, 0xd9e: 0x1d, 0xd9f: 0x1e, + 0xda0: 0x17, 0xda1: 0x33, 0xda2: 0x19, 0xda3: 0x04, 0xda4: 0x05, + 0xdaa: 0x06, 0xdad: 0x07, 0xdaf: 0x1a, + 0xdb0: 0x13, 0xdb3: 0x15, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x3f, 0xdc1: 0x40, 0xdc2: 0x41, 0xdc3: 0x42, 0xdc4: 0x1b9, 0xdc5: 0x1ba, 0xdc6: 0x1bb, 0xdc7: 0x1bc, + 0xdc8: 0x47, 0xdc9: 0x48, 0xdca: 0x49, 0xdcb: 0x4a, 0xdcc: 0x4b, 0xdcd: 0x4c, 0xdce: 0x4d, 0xdcf: 0x4e, + 0xdd0: 0x4f, 0xdd1: 0x50, 0xdd2: 0x51, 0xdd3: 0x52, 0xdd4: 0x53, 0xdd5: 0x54, 0xdd6: 0x55, 0xdd7: 0x56, + 0xdd8: 0x57, 0xdd9: 0x58, 0xdda: 0x59, 0xddb: 0x5a, 0xddc: 0x5b, 0xddd: 0x5c, 0xdde: 0x5d, 0xddf: 0x5e, + 0xde0: 0x5f, 0xde1: 0x60, 0xde2: 0x61, 0xde3: 0x62, 0xde4: 0x63, 0xde5: 0x64, 0xde6: 0x65, 0xde7: 0x66, + 0xde8: 0x67, 0xde9: 0x68, 0xdea: 0x69, 0xdec: 0x6a, 0xded: 0x6b, 0xdee: 0x6c, 0xdef: 0x6d, + 0xdf0: 0x6e, 0xdf1: 0x6f, 0xdf3: 0x70, 0xdf4: 0x71, 0xdf5: 0x72, 0xdf6: 0x1ed, 0xdf7: 0x74, + 0xdf8: 0x21b, 0xdf9: 0x21c, 0xdfa: 0x21d, 0xdfb: 0x21e, 0xdfc: 0x79, 0xdfd: 0x7a, 0xdfe: 0x7b, 0xdff: 0x7c, + // Block 0x38, offset 0xe00 + 0xe02: 0x01, 0xe03: 0x217, 0xe04: 0x218, 0xe05: 0x04, 0xe06: 0x05, 0xe07: 0x219, + 0xe08: 0x21a, 0xe09: 0x08, 0xe0a: 0x09, 0xe0b: 0x0a, 0xe0c: 0x0b, 0xe0d: 0x0c, 0xe0e: 0x0d, 0xe0f: 0x0e, + 0xe10: 0x0f, 0xe11: 0x10, 0xe12: 0x11, 0xe13: 0x12, 0xe14: 0x13, 0xe15: 0x14, 0xe16: 0x15, 0xe17: 0x1b4, + 0xe18: 0x1b5, 0xe19: 0x1b6, 0xe1a: 0x19, 0xe1b: 0x1b7, 0xe1c: 0x1b, 0xe1d: 0x1c, 0xe1e: 0x1d, 0xe1f: 0x1e, + 0xe20: 0x17, 0xe21: 0x35, 0xe22: 0x26, 0xe23: 0x04, 0xe24: 0x05, + 0xe2a: 0x06, 0xe2d: 0x07, 0xe2f: 0x1a, + 0xe30: 0x13, 0xe33: 0x15, + // Block 0x39, offset 0xe40 + 0xe42: 0x01, 0xe43: 0x1e8, 0xe44: 0x221, 0xe45: 0x1ea, 0xe46: 0x05, 0xe47: 0x1eb, + 0xe48: 0x1ec, 0xe49: 0x08, 0xe4a: 0x09, 0xe4b: 0x0a, 0xe4c: 0x0b, 0xe4d: 0x0c, 0xe4e: 0x0d, 0xe4f: 0x0e, + 0xe50: 0x0f, 0xe51: 0x10, 0xe52: 0x11, 0xe53: 0x12, 0xe54: 0x13, 0xe55: 0x14, 0xe56: 0x15, 0xe57: 0x1b4, + 0xe58: 0x1b5, 0xe59: 0x1b6, 0xe5a: 0x19, 0xe5b: 0x1b7, 0xe5c: 0x1b, 0xe5d: 0x1c, 0xe5e: 0x1d, 0xe5f: 0x1e, + 0xe60: 0x17, 0xe61: 0x25, 0xe62: 0x26, 0xe63: 0x04, 0xe64: 0x05, + 0xe6a: 0x06, 0xe6d: 0x07, 0xe6f: 0x1a, + 0xe70: 0x13, 0xe73: 0x15, + // Block 0x3a, offset 0xe80 + 0xe80: 0x3f, 0xe81: 0x40, 0xe82: 0x41, 0xe83: 0x42, 0xe84: 0x222, 0xe85: 0x223, 0xe86: 0x224, 0xe87: 0x225, + 0xe88: 0x47, 0xe89: 0x48, 0xe8a: 0x49, 0xe8b: 0x4a, 0xe8c: 0x4b, 0xe8d: 0x4c, 0xe8e: 0x4d, 0xe8f: 0x4e, + 0xe90: 0x4f, 0xe91: 0x50, 0xe92: 0x51, 0xe93: 0x52, 0xe94: 0x53, 0xe95: 0x54, 0xe96: 0x55, 0xe97: 0x56, + 0xe98: 0x57, 0xe99: 0x58, 0xe9a: 0x59, 0xe9b: 0x5a, 0xe9c: 0x5b, 0xe9d: 0x5c, 0xe9e: 0x5d, 0xe9f: 0x5e, + 0xea0: 0x5f, 0xea1: 0x60, 0xea2: 0x61, 0xea3: 0x62, 0xea4: 0x63, 0xea5: 0x64, 0xea6: 0x65, 0xea7: 0x66, + 0xea8: 0x67, 0xea9: 0x68, 0xeaa: 0x69, 0xeac: 0x6a, 0xead: 0x6b, 0xeae: 0x6c, 0xeaf: 0x6d, + 0xeb0: 0x6e, 0xeb1: 0x6f, 0xeb3: 0x70, 0xeb4: 0x71, 0xeb5: 0x72, 0xeb6: 0x73, 0xeb7: 0x74, + 0xeb8: 0x75, 0xeb9: 0x76, 0xeba: 0x77, 0xebb: 0x78, 0xebc: 0x79, 0xebd: 0x7a, 0xebe: 0x7b, 0xebf: 0x7c, + // Block 0x3b, offset 0xec0 + 0xec2: 0x01, 0xec3: 0x02, 0xec4: 0x03, 0xec5: 0x04, 0xec6: 0x05, 0xec7: 0x06, + 0xec8: 0x07, 0xec9: 0x08, 0xeca: 0x09, 0xecb: 0x0a, 0xecc: 0x0b, 0xecd: 0x0c, 0xece: 0x0d, 0xecf: 0x0e, + 0xed0: 0x0f, 0xed1: 0x10, 0xed2: 0x11, 0xed3: 0x12, 0xed4: 0x13, 0xed5: 0x14, 0xed6: 0x15, 0xed7: 0x1b4, + 0xed8: 0x1b5, 0xed9: 0x1b6, 0xeda: 0x19, 0xedb: 0x1b7, 0xedc: 0x1b, 0xedd: 0x1c, 0xede: 0x1d, 0xedf: 0x1e, + 0xee0: 0x17, 0xee1: 0x38, 0xee2: 0x19, 0xee3: 0x04, 0xee4: 0x05, + 0xeea: 0x06, 0xeed: 0x07, 0xeef: 0x1a, + 0xef0: 0x13, 0xef3: 0x15, + // Block 0x3c, offset 0xf00 + 0xf00: 0x3f, 0xf01: 0x40, 0xf02: 0x41, 0xf03: 0x42, 0xf04: 0x226, 0xf05: 0x227, 0xf06: 0x228, 0xf07: 0x229, + 0xf08: 0x47, 0xf09: 0x48, 0xf0a: 0x49, 0xf0b: 0x4a, 0xf0c: 0x4b, 0xf0d: 0x4c, 0xf0e: 0x4d, 0xf0f: 0x4e, + 0xf10: 0x4f, 0xf11: 0x50, 0xf12: 0x51, 0xf13: 0x52, 0xf14: 0x53, 0xf15: 0x54, 0xf16: 0x55, 0xf17: 0x56, + 0xf18: 0x57, 0xf19: 0x58, 0xf1a: 0x59, 0xf1b: 0x5a, 0xf1c: 0x5b, 0xf1d: 0x5c, 0xf1e: 0x5d, 0xf1f: 0x5e, + 0xf20: 0x5f, 0xf21: 0x60, 0xf22: 0x61, 0xf23: 0x62, 0xf24: 0x63, 0xf25: 0x64, 0xf26: 0x65, 0xf27: 0x66, + 0xf28: 0x67, 0xf29: 0x68, 0xf2a: 0x69, 0xf2c: 0x6a, 0xf2d: 0x6b, 0xf2e: 0x6c, 0xf2f: 0x6d, + 0xf30: 0x6e, 0xf31: 0x6f, 0xf33: 0x70, 0xf34: 0x71, 0xf35: 0x72, 0xf36: 0x73, 0xf37: 0x74, + 0xf38: 0x75, 0xf39: 0x76, 0xf3a: 0x77, 0xf3b: 0x78, 0xf3c: 0x79, 0xf3d: 0x7a, 0xf3e: 0x7b, 0xf3f: 0x7c, + // Block 0x3d, offset 0xf40 + 0xf40: 0xba, 0xf41: 0xbb, 0xf42: 0xbc, 0xf43: 0xbd, 0xf44: 0x22a, 0xf45: 0x22b, 0xf46: 0xc0, 0xf47: 0xc1, + 0xf48: 0xc2, 0xf49: 0x22c, 0xf4a: 0xc4, 0xf4b: 0xc5, 0xf4c: 0xc6, 0xf4d: 0xc7, 0xf4e: 0xc8, 0xf4f: 0xc9, + // Block 0x3e, offset 0xf80 + 0xf82: 0x01, 0xf83: 0x02, 0xf84: 0x03, 0xf85: 0x04, 0xf86: 0x05, 0xf87: 0x06, + 0xf88: 0x07, 0xf89: 0x08, 0xf8a: 0x09, 0xf8b: 0x0a, 0xf8c: 0x0b, 0xf8d: 0x0c, 0xf8e: 0x0d, 0xf8f: 0x0e, + 0xf90: 0x0f, 0xf91: 0x10, 0xf92: 0x11, 0xf93: 0x12, 0xf94: 0x13, 0xf95: 0x14, 0xf96: 0x15, 0xf97: 0x1b4, + 0xf98: 0x1b5, 0xf99: 0x1b6, 0xf9a: 0x19, 0xf9b: 0x1b7, 0xf9c: 0x1b, 0xf9d: 0x1c, 0xf9e: 0x1d, 0xf9f: 0x1e, + 0xfa0: 0x17, 0xfa1: 0x3a, 0xfa2: 0x03, 0xfa3: 0x3b, 0xfa4: 0x05, + 0xfaa: 0x06, 0xfad: 0x07, 0xfaf: 0x1a, + 0xfb0: 0x13, 0xfb3: 0x15, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x3f, 0xfc1: 0x40, 0xfc2: 0x41, 0xfc3: 0x42, 0xfc4: 0x1b9, 0xfc5: 0x1ba, 0xfc6: 0x1bb, 0xfc7: 0x1bc, + 0xfc8: 0x47, 0xfc9: 0x48, 0xfca: 0x49, 0xfcb: 0x4a, 0xfcc: 0x4b, 0xfcd: 0x4c, 0xfce: 0x4d, 0xfcf: 0x4e, + 0xfd0: 0x4f, 0xfd1: 0x50, 0xfd2: 0x51, 0xfd3: 0x52, 0xfd4: 0x53, 0xfd5: 0x54, 0xfd6: 0x55, 0xfd7: 0x56, + 0xfd8: 0x57, 0xfd9: 0x58, 0xfda: 0x59, 0xfdb: 0x5a, 0xfdc: 0x5b, 0xfdd: 0x5c, 0xfde: 0x5d, 0xfdf: 0x5e, + 0xfe0: 0x5f, 0xfe1: 0x60, 0xfe2: 0x61, 0xfe3: 0x62, 0xfe4: 0x63, 0xfe5: 0x64, 0xfe6: 0x65, 0xfe7: 0x66, + 0xfe8: 0x67, 0xfe9: 0x68, 0xfea: 0x69, 0xfec: 0x6a, 0xfed: 0x6b, 0xfee: 0x6c, 0xfef: 0x6d, + 0xff0: 0x6e, 0xff1: 0x6f, 0xff3: 0x70, 0xff4: 0x71, 0xff5: 0x72, 0xff6: 0x1ed, 0xff7: 0x74, + 0xff8: 0x75, 0xff9: 0x238, 0xffa: 0x239, 0xffb: 0x23a, 0xffc: 0x79, 0xffd: 0x7a, 0xffe: 0x7b, 0xfff: 0x7c, + // Block 0x40, offset 0x1000 + 0x1000: 0x7d, 0x1001: 0x7e, 0x1002: 0x7f, 0x1003: 0x80, 0x1004: 0x203, 0x1005: 0x82, 0x1006: 0x83, 0x1007: 0x84, + 0x1008: 0x85, 0x1009: 0x1bd, 0x100a: 0x87, 0x100b: 0x88, 0x100c: 0x89, 0x100d: 0x8a, 0x100e: 0x8b, 0x100f: 0x8c, + 0x1010: 0x8d, 0x1011: 0x8e, 0x1012: 0x8f, 0x1013: 0x90, 0x1014: 0x91, 0x1015: 0x92, 0x1016: 0x93, 0x1017: 0x94, + 0x1018: 0x95, 0x1019: 0x96, 0x101a: 0x97, 0x101b: 0x98, 0x101c: 0x99, 0x101d: 0x9a, 0x101e: 0x9b, 0x101f: 0x9c, + 0x1020: 0x9d, 0x1021: 0x9e, 0x1022: 0x9f, 0x1023: 0xa0, 0x1024: 0xa1, 0x1025: 0xa2, 0x1026: 0xa3, 0x1027: 0xa4, + 0x1028: 0xa5, 0x1029: 0xa6, 0x102a: 0xa7, 0x102b: 0xa8, 0x102c: 0xa9, 0x102d: 0xaa, + 0x1030: 0xab, 0x1031: 0xac, 0x1032: 0xad, 0x1033: 0xae, 0x1034: 0xaf, 0x1035: 0xb0, 0x1036: 0xb1, 0x1037: 0xb2, + 0x1038: 0xb3, 0x103a: 0xb4, 0x103b: 0xb5, 0x103c: 0xb6, 0x103d: 0xb7, 0x103e: 0xb8, 0x103f: 0xb9, + // Block 0x41, offset 0x1040 + 0x1042: 0x01, 0x1043: 0x231, 0x1044: 0x232, 0x1045: 0x233, 0x1046: 0x234, 0x1047: 0x235, + 0x1048: 0x236, 0x1049: 0x08, 0x104a: 0x237, 0x104b: 0x0a, 0x104c: 0x0b, 0x104d: 0x0c, 0x104e: 0x0d, 0x104f: 0x0e, + 0x1050: 0x0f, 0x1051: 0x10, 0x1052: 0x11, 0x1053: 0x12, 0x1054: 0x13, 0x1055: 0x14, 0x1056: 0x15, 0x1057: 0x1b4, + 0x1058: 0x1b5, 0x1059: 0x1b6, 0x105a: 0x19, 0x105b: 0x1b7, 0x105c: 0x1b, 0x105d: 0x1c, 0x105e: 0x1d, 0x105f: 0x1e, + 0x1060: 0x17, 0x1061: 0x3d, 0x1062: 0x3e, 0x1063: 0x04, 0x1064: 0x05, + 0x106a: 0x06, 0x106d: 0x07, 0x106f: 0x1a, + 0x1070: 0x13, 0x1073: 0x15, + // Block 0x42, offset 0x1080 + 0x1080: 0x3f, 0x1081: 0x40, 0x1082: 0x41, 0x1083: 0x42, 0x1084: 0x1b9, 0x1085: 0x1ba, 0x1086: 0x1bb, 0x1087: 0x1bc, + 0x1088: 0x47, 0x1089: 0x48, 0x108a: 0x49, 0x108b: 0x4a, 0x108c: 0x4b, 0x108d: 0x4c, 0x108e: 0x4d, 0x108f: 0x4e, + 0x1090: 0x4f, 0x1091: 0x50, 0x1092: 0x51, 0x1093: 0x52, 0x1094: 0x53, 0x1095: 0x54, 0x1096: 0x55, 0x1097: 0x56, + 0x1098: 0x57, 0x1099: 0x58, 0x109a: 0x59, 0x109b: 0x5a, 0x109c: 0x5b, 0x109d: 0x5c, 0x109e: 0x5d, 0x109f: 0x5e, + 0x10a0: 0x5f, 0x10a1: 0x60, 0x10a2: 0x61, 0x10a3: 0x62, 0x10a4: 0x63, 0x10a5: 0x64, 0x10a6: 0x65, 0x10a7: 0x66, + 0x10a8: 0x67, 0x10a9: 0x68, 0x10aa: 0x69, 0x10ac: 0x6a, 0x10ad: 0x6b, 0x10ae: 0x6c, 0x10af: 0x6d, + 0x10b0: 0x6e, 0x10b1: 0x6f, 0x10b3: 0x70, 0x10b4: 0x71, 0x10b5: 0x72, 0x10b6: 0x73, 0x10b7: 0x74, + 0x10b8: 0x1e2, 0x10b9: 0x1e3, 0x10ba: 0x1e4, 0x10bb: 0x241, 0x10bc: 0x79, 0x10bd: 0x7a, 0x10be: 0x7b, 0x10bf: 0x7c, + // Block 0x43, offset 0x10c0 + 0x10c2: 0x01, 0x10c3: 0x23d, 0x10c4: 0x23e, 0x10c5: 0x23f, 0x10c6: 0x05, 0x10c7: 0x240, + 0x10c8: 0x07, 0x10c9: 0x08, 0x10ca: 0x09, 0x10cb: 0x0a, 0x10cc: 0x0b, 0x10cd: 0x0c, 0x10ce: 0x0d, 0x10cf: 0x0e, + 0x10d0: 0x0f, 0x10d1: 0x10, 0x10d2: 0x11, 0x10d3: 0x12, 0x10d4: 0x13, 0x10d5: 0x14, 0x10d6: 0x15, 0x10d7: 0x1b4, + 0x10d8: 0x1b5, 0x10d9: 0x1b6, 0x10da: 0x19, 0x10db: 0x1b7, 0x10dc: 0x1b, 0x10dd: 0x1c, 0x10de: 0x1d, 0x10df: 0x1e, + 0x10e0: 0x17, 0x10e1: 0x40, 0x10e2: 0x19, 0x10e3: 0x04, 0x10e4: 0x05, + 0x10ea: 0x06, 0x10ed: 0x07, 0x10ef: 0x1a, + 0x10f0: 0x13, 0x10f3: 0x15, + // Block 0x44, offset 0x1100 + 0x1100: 0x3f, 0x1101: 0x40, 0x1102: 0x41, 0x1103: 0x42, 0x1104: 0x1b9, 0x1105: 0x1ba, 0x1106: 0x1bb, 0x1107: 0x1bc, + 0x1108: 0x47, 0x1109: 0x48, 0x110a: 0x49, 0x110b: 0x4a, 0x110c: 0x4b, 0x110d: 0x4c, 0x110e: 0x4d, 0x110f: 0x4e, + 0x1110: 0x4f, 0x1111: 0x50, 0x1112: 0x51, 0x1113: 0x52, 0x1114: 0x53, 0x1115: 0x54, 0x1116: 0x55, 0x1117: 0x56, + 0x1118: 0x57, 0x1119: 0x58, 0x111a: 0x59, 0x111b: 0x5a, 0x111c: 0x5b, 0x111d: 0x5c, 0x111e: 0x5d, 0x111f: 0x5e, + 0x1120: 0x5f, 0x1121: 0x60, 0x1122: 0x61, 0x1123: 0x62, 0x1124: 0x63, 0x1125: 0x64, 0x1126: 0x65, 0x1127: 0x66, + 0x1128: 0x67, 0x1129: 0x68, 0x112a: 0x69, 0x112c: 0x6a, 0x112d: 0x6b, 0x112e: 0x6c, 0x112f: 0x6d, + 0x1130: 0x6e, 0x1131: 0x6f, 0x1133: 0x70, 0x1134: 0x71, 0x1135: 0x72, 0x1136: 0x1ed, 0x1137: 0x74, + 0x1138: 0x75, 0x1139: 0x248, 0x113a: 0x201, 0x113b: 0x249, 0x113c: 0x79, 0x113d: 0x7a, 0x113e: 0x7b, 0x113f: 0x7c, + // Block 0x45, offset 0x1140 + 0x1142: 0x01, 0x1143: 0x244, 0x1144: 0x245, 0x1145: 0x246, 0x1146: 0x05, 0x1147: 0x1fe, + 0x1148: 0x247, 0x1149: 0x08, 0x114a: 0x09, 0x114b: 0x0a, 0x114c: 0x0b, 0x114d: 0x0c, 0x114e: 0x0d, 0x114f: 0x0e, + 0x1150: 0x0f, 0x1151: 0x10, 0x1152: 0x11, 0x1153: 0x12, 0x1154: 0x13, 0x1155: 0x14, 0x1156: 0x15, 0x1157: 0x1b4, + 0x1158: 0x1b5, 0x1159: 0x1b6, 0x115a: 0x19, 0x115b: 0x1b7, 0x115c: 0x1b, 0x115d: 0x1c, 0x115e: 0x1d, 0x115f: 0x1e, + 0x1160: 0x17, 0x1161: 0x42, 0x1162: 0x2c, 0x1163: 0x2d, 0x1164: 0x05, + 0x116a: 0x06, 0x116d: 0x07, 0x116f: 0x1a, + 0x1170: 0x2f, 0x1173: 0x15, + // Block 0x46, offset 0x1180 + 0x1180: 0x3f, 0x1181: 0x40, 0x1182: 0x41, 0x1183: 0x42, 0x1184: 0x1b9, 0x1185: 0x1ba, 0x1186: 0x1bb, 0x1187: 0x1bc, + 0x1188: 0x47, 0x1189: 0x48, 0x118a: 0x49, 0x118b: 0x4a, 0x118c: 0x4b, 0x118d: 0x4c, 0x118e: 0x4d, 0x118f: 0x4e, + 0x1190: 0x4f, 0x1191: 0x50, 0x1192: 0x51, 0x1193: 0x52, 0x1194: 0x53, 0x1195: 0x54, 0x1196: 0x55, 0x1197: 0x56, + 0x1198: 0x57, 0x1199: 0x58, 0x119a: 0x59, 0x119b: 0x5a, 0x119c: 0x5b, 0x119d: 0x5c, 0x119e: 0x5d, 0x119f: 0x5e, + 0x11a0: 0x5f, 0x11a1: 0x60, 0x11a2: 0x61, 0x11a3: 0x62, 0x11a4: 0x63, 0x11a5: 0x64, 0x11a6: 0x65, 0x11a7: 0x66, + 0x11a8: 0x67, 0x11a9: 0x68, 0x11aa: 0x69, 0x11ac: 0x6a, 0x11ad: 0x6b, 0x11ae: 0x6c, 0x11af: 0x6d, + 0x11b0: 0x6e, 0x11b1: 0x6f, 0x11b3: 0x70, 0x11b4: 0x71, 0x11b5: 0x72, 0x11b6: 0x73, 0x11b7: 0x74, + 0x11b8: 0x1cf, 0x11b9: 0x1d0, 0x11ba: 0x77, 0x11bb: 0x1d2, 0x11bc: 0x79, 0x11bd: 0x7a, 0x11be: 0x7b, 0x11bf: 0x7c, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x7d, 0x11c1: 0x7e, 0x11c2: 0x7f, 0x11c3: 0x80, 0x11c4: 0x81, 0x11c5: 0x24c, 0x11c6: 0x83, 0x11c7: 0x84, + 0x11c8: 0x85, 0x11c9: 0x1bd, 0x11ca: 0x87, 0x11cb: 0x88, 0x11cc: 0x89, 0x11cd: 0x8a, 0x11ce: 0x8b, 0x11cf: 0x8c, + 0x11d0: 0x8d, 0x11d1: 0x8e, 0x11d2: 0x8f, 0x11d3: 0x90, 0x11d4: 0x91, 0x11d5: 0x92, 0x11d6: 0x93, 0x11d7: 0x94, + 0x11d8: 0x95, 0x11d9: 0x96, 0x11da: 0x97, 0x11db: 0x98, 0x11dc: 0x99, 0x11dd: 0x9a, 0x11de: 0x9b, 0x11df: 0x9c, + 0x11e0: 0x9d, 0x11e1: 0x9e, 0x11e2: 0x9f, 0x11e3: 0xa0, 0x11e4: 0xa1, 0x11e5: 0xa2, 0x11e6: 0xa3, 0x11e7: 0xa4, + 0x11e8: 0xa5, 0x11e9: 0xa6, 0x11ea: 0xa7, 0x11eb: 0xa8, 0x11ec: 0xa9, 0x11ed: 0xaa, + 0x11f0: 0xab, 0x11f1: 0xac, 0x11f2: 0xad, 0x11f3: 0xae, 0x11f4: 0xaf, 0x11f5: 0xb0, 0x11f6: 0xb1, 0x11f7: 0xb2, + 0x11f8: 0xb3, 0x11fa: 0xb4, 0x11fb: 0xb5, 0x11fc: 0xb6, 0x11fd: 0xb7, 0x11fe: 0xb8, 0x11ff: 0xb9, + // Block 0x48, offset 0x1200 + 0x1200: 0xba, 0x1201: 0xbb, 0x1202: 0xbc, 0x1203: 0xbd, 0x1204: 0xbe, 0x1205: 0xbf, 0x1206: 0xc0, 0x1207: 0xc1, + 0x1208: 0xc2, 0x1209: 0xc3, 0x120a: 0xc4, 0x120b: 0xc5, 0x120c: 0xc6, 0x120d: 0x1d5, 0x120e: 0xc8, 0x120f: 0xc9, + // Block 0x49, offset 0x1240 + 0x1240: 0x18b, 0x1241: 0x18c, 0x1242: 0x18d, 0x1243: 0x18e, 0x1244: 0x24d, 0x1245: 0x190, 0x1246: 0x191, 0x1247: 0x192, + 0x1248: 0x193, 0x1249: 0x194, 0x124c: 0x195, 0x124d: 0x196, 0x124e: 0x197, 0x124f: 0x198, + 0x1250: 0x199, 0x1251: 0x19a, 0x1252: 0x19b, 0x1253: 0x19c, 0x1254: 0x19d, 0x1255: 0x19e, 0x1257: 0x19f, + 0x1258: 0x1a0, 0x1259: 0x1a1, 0x125a: 0x1a2, 0x125b: 0x1a3, 0x125c: 0x1a4, 0x125d: 0x1a5, + // Block 0x4a, offset 0x1280 + 0x1290: 0x09, 0x1291: 0x0a, 0x1292: 0x0b, 0x1293: 0x0c, 0x1296: 0x0d, + 0x129b: 0x0e, 0x129d: 0x0f, 0x129e: 0x10, 0x129f: 0x47, + 0x12af: 0x12, + // Block 0x4b, offset 0x12c0 + 0x12c2: 0x01, 0x12c3: 0x1c8, 0x12c4: 0x1c9, 0x12c5: 0x1ca, 0x12c6: 0x05, 0x12c7: 0x1cc, + 0x12c8: 0x1cd, 0x12c9: 0x08, 0x12ca: 0x09, 0x12cb: 0x0a, 0x12cc: 0x0b, 0x12cd: 0x0c, 0x12ce: 0x0d, 0x12cf: 0x0e, + 0x12d0: 0x0f, 0x12d1: 0x10, 0x12d2: 0x11, 0x12d3: 0x12, 0x12d4: 0x13, 0x12d5: 0x14, 0x12d6: 0x15, 0x12d7: 0x1b4, + 0x12d8: 0x1b5, 0x12d9: 0x1b6, 0x12da: 0x19, 0x12db: 0x1b7, 0x12dc: 0x1b, 0x12dd: 0x1c, 0x12de: 0x1d, 0x12df: 0x1e, + 0x12e0: 0x17, 0x12e1: 0x44, 0x12e2: 0x45, 0x12e3: 0x46, 0x12e4: 0x05, + 0x12ea: 0x06, 0x12ed: 0x07, 0x12ef: 0x1a, + 0x12f0: 0x48, 0x12f3: 0x15, +} + +// mainCTEntries: 248 entries, 992 bytes +var mainCTEntries = [248]struct{ L, H, N, I uint8 }{ + {0xCE, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0xB7, 0xB7, 0, 1}, + {0x87, 0x87, 0, 2}, + {0xCC, 0x0, 2, 255}, + {0x88, 0x88, 0, 2}, + {0x86, 0x86, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x88, 0x88, 0, 1}, + {0xCD, 0x1, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x81, 0x81, 0, 1}, + {0x81, 0x81, 0, 2}, + {0xCC, 0x0, 1, 255}, + {0x86, 0x86, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8B, 0x8B, 0, 3}, + {0x88, 0x88, 0, 2}, + {0x86, 0x86, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x8F, 0x8F, 0, 1}, + {0xD9, 0x0, 1, 255}, + {0x93, 0x95, 0, 1}, + {0xD9, 0x0, 1, 255}, + {0x94, 0x94, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xA7, 0x1, 1, 255}, + {0xA6, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0x97, 0x97, 0, 2}, + {0xE0, 0x0, 2, 255}, + {0xAD, 0x1, 1, 255}, + {0xAC, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0x96, 0x97, 0, 2}, + {0xE0, 0x0, 1, 255}, + {0xAF, 0x0, 1, 255}, + {0x97, 0x97, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xAF, 0x1, 1, 255}, + {0xAE, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0x97, 0x97, 0, 2}, + {0xE0, 0x0, 1, 255}, + {0xAE, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB1, 0x0, 1, 255}, + {0x96, 0x96, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB3, 0x0, 1, 255}, + {0x95, 0x95, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB3, 0x0, 2, 255}, + {0x95, 0x96, 0, 3}, + {0x82, 0x0, 1, 2}, + {0xE0, 0x0, 1, 255}, + {0xB3, 0x0, 1, 255}, + {0x95, 0x95, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xB5, 0x1, 1, 255}, + {0xB4, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0x97, 0x97, 0, 2}, + {0xE0, 0x0, 1, 255}, + {0xB4, 0x0, 1, 255}, + {0xBE, 0xBE, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB7, 0x0, 3, 255}, + {0x9F, 0x9F, 0, 4}, + {0x8F, 0x0, 1, 3}, + {0x8A, 0x8A, 0, 2}, + {0xE0, 0x0, 1, 255}, + {0xB7, 0x0, 1, 255}, + {0x8A, 0x8A, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB7, 0x0, 1, 255}, + {0x8A, 0x8A, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB8, 0x0, 1, 255}, + {0x81, 0xAE, 0, 1}, + {0xE0, 0x0, 1, 255}, + {0xB8, 0x0, 1, 255}, + {0xB2, 0xB2, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xBB, 0xC, 1, 255}, + {0xBA, 0x0, 12, 255}, + {0xAD, 0xAE, 0, 26}, + {0xAA, 0xAB, 0, 24}, + {0xA7, 0xA7, 0, 23}, + {0xA5, 0xA5, 0, 22}, + {0xA1, 0xA3, 0, 19}, + {0x99, 0x9F, 0, 12}, + {0x94, 0x97, 0, 8}, + {0x8D, 0x8D, 0, 7}, + {0x8A, 0x8A, 0, 6}, + {0x87, 0x88, 0, 4}, + {0x84, 0x84, 0, 3}, + {0x81, 0x82, 0, 1}, + {0x9C, 0x9F, 0, 28}, + {0xE0, 0x0, 1, 255}, + {0xBA, 0x0, 1, 255}, + {0xB2, 0xB2, 0, 1}, + {0xEA, 0x0, 1, 255}, + {0xAA, 0x0, 1, 255}, + {0x80, 0xAF, 0, 1}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x7, 1, 255}, + {0xBD, 0x0, 1, 255}, + {0xB1, 0x0, 1, 255}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x2, 1, 255}, + {0xBD, 0x0, 2, 255}, + {0xB4, 0xB4, 0, 2}, + {0xB2, 0xB2, 0, 1}, + {0x80, 0x80, 0, 3}, + {0x80, 0x81, 0, 4}, + {0xE0, 0x0, 2, 255}, + {0xBE, 0x2, 1, 255}, + {0xBD, 0x0, 2, 255}, + {0xB4, 0xB4, 0, 2}, + {0xB2, 0xB2, 0, 1}, + {0x80, 0x80, 0, 3}, + {0xE1, 0x0, 1, 255}, + {0x80, 0x0, 1, 255}, + {0xAE, 0xAE, 0, 1}, + {0xF0, 0x0, 1, 255}, + {0x91, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0xA7, 0xA7, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0xAC, 0x0, 1, 255}, + {0xB5, 0xB5, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0xB8, 0xB8, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0xA7, 0xA7, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x87, 0x87, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x8C, 0x8C, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x8A, 0x8A, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x8B, 0x8B, 0, 2}, + {0x88, 0x88, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x61, 0x61, 0, 3}, + {0x8A, 0x8A, 0, 2}, + {0x88, 0x88, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x61, 0x61, 0, 4}, + {0x41, 0x41, 0, 3}, + {0x8A, 0x8A, 0, 2}, + {0x88, 0x88, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0xA8, 0xA8, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x83, 0x83, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x8A, 0x8A, 0, 2}, + {0x88, 0x88, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8B, 0x8B, 0, 3}, + {0x88, 0x88, 0, 2}, + {0x83, 0x83, 0, 1}, + {0xC5, 0x2, 1, 255}, + {0x7A, 0x0, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 1}, + {0xBE, 0xBE, 0, 2}, + {0xC5, 0x4, 1, 255}, + {0x7A, 0x2, 1, 255}, + {0x5A, 0x0, 1, 255}, + {0xCC, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 1}, + {0xCC, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 2}, + {0xBD, 0xBE, 0, 3}, + {0xCE, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0x6A, 0x6A, 0, 3}, + {0xB7, 0xB7, 0, 1}, + {0x87, 0x87, 0, 2}, + {0xCE, 0x1, 1, 255}, + {0xC2, 0x0, 1, 255}, + {0x6A, 0x6A, 0, 4}, + {0x4A, 0x4A, 0, 3}, + {0xB7, 0xB7, 0, 1}, + {0x87, 0x87, 0, 2}, + {0x6A, 0x6A, 0, 1}, + {0x6A, 0x6A, 0, 2}, + {0x4A, 0x4A, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8A, 0x8A, 0, 3}, + {0x88, 0x88, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x88, 0x88, 0, 2}, + {0x81, 0x81, 0, 1}, + {0x27, 0x27, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0x80, 0x80, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0x83, 0x83, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0x87, 0x87, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0x89, 0x89, 0, 1}, + {0xE1, 0x0, 1, 255}, + {0x84, 0x0, 1, 255}, + {0x8C, 0x8C, 0, 1}, + {0xCC, 0x0, 4, 255}, + {0x8A, 0x8A, 0, 5}, + {0x87, 0x88, 0, 3}, + {0x83, 0x83, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 2, 255}, + {0x83, 0x83, 0, 2}, + {0x81, 0x81, 0, 1}, + {0xCC, 0x0, 4, 255}, + {0xA8, 0xA8, 0, 5}, + {0x8B, 0x8B, 0, 4}, + {0x88, 0x88, 0, 3}, + {0x82, 0x83, 0, 1}, + {0xCE, 0x3, 1, 255}, + {0xCC, 0x1, 2, 255}, + {0xC2, 0x0, 1, 255}, + {0xB7, 0xB7, 0, 1}, + {0x8C, 0x8C, 0, 3}, + {0x81, 0x81, 0, 2}, + {0x87, 0x87, 0, 4}, + {0xCC, 0x0, 1, 255}, + {0x81, 0x82, 0, 1}, + {0xCC, 0x0, 3, 255}, + {0x8B, 0x8B, 0, 3}, + {0x88, 0x88, 0, 2}, + {0x82, 0x82, 0, 1}, +} + +// Total size of mainTable is 210136 bytes diff --git a/vendor/golang.org/x/text/secure/bidirule/bench_test.go b/vendor/golang.org/x/text/secure/bidirule/bench_test.go new file mode 100644 index 0000000..2db922b --- /dev/null +++ b/vendor/golang.org/x/text/secure/bidirule/bench_test.go @@ -0,0 +1,54 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidirule + +import ( + "testing" + + "golang.org/x/text/internal/testtext" +) + +var benchData = []struct{ name, data string }{ + {"ascii", "Scheveningen"}, + {"arabic", "دبي"}, + {"hangul", "다음과"}, +} + +func doBench(b *testing.B, fn func(b *testing.B, data string)) { + for _, d := range benchData { + testtext.Bench(b, d.name, func(b *testing.B) { fn(b, d.data) }) + } +} + +func BenchmarkSpan(b *testing.B) { + r := New() + doBench(b, func(b *testing.B, str string) { + b.SetBytes(int64(len(str))) + data := []byte(str) + for i := 0; i < b.N; i++ { + r.Reset() + r.Span(data, true) + } + }) +} + +func BenchmarkDirectionASCII(b *testing.B) { + doBench(b, func(b *testing.B, str string) { + b.SetBytes(int64(len(str))) + data := []byte(str) + for i := 0; i < b.N; i++ { + Direction(data) + } + }) +} + +func BenchmarkDirectionStringASCII(b *testing.B) { + doBench(b, func(b *testing.B, str string) { + b.SetBytes(int64(len(str))) + for i := 0; i < b.N; i++ { + DirectionString(str) + } + }) +} diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule.go b/vendor/golang.org/x/text/secure/bidirule/bidirule.go new file mode 100644 index 0000000..a7161bd --- /dev/null +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule.go @@ -0,0 +1,342 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package bidirule implements the Bidi Rule defined by RFC 5893. +// +// This package is under development. The API may change without notice and +// without preserving backward compatibility. +package bidirule + +import ( + "errors" + "unicode/utf8" + + "golang.org/x/text/transform" + "golang.org/x/text/unicode/bidi" +) + +// This file contains an implementation of RFC 5893: Right-to-Left Scripts for +// Internationalized Domain Names for Applications (IDNA) +// +// A label is an individual component of a domain name. Labels are usually +// shown separated by dots; for example, the domain name "www.example.com" is +// composed of three labels: "www", "example", and "com". +// +// An RTL label is a label that contains at least one character of class R, AL, +// or AN. An LTR label is any label that is not an RTL label. +// +// A "Bidi domain name" is a domain name that contains at least one RTL label. +// +// The following guarantees can be made based on the above: +// +// o In a domain name consisting of only labels that satisfy the rule, +// the requirements of Section 3 are satisfied. Note that even LTR +// labels and pure ASCII labels have to be tested. +// +// o In a domain name consisting of only LDH labels (as defined in the +// Definitions document [RFC5890]) and labels that satisfy the rule, +// the requirements of Section 3 are satisfied as long as a label +// that starts with an ASCII digit does not come after a +// right-to-left label. +// +// No guarantee is given for other combinations. + +// ErrInvalid indicates a label is invalid according to the Bidi Rule. +var ErrInvalid = errors.New("bidirule: failed Bidi Rule") + +type ruleState uint8 + +const ( + ruleInitial ruleState = iota + ruleLTR + ruleLTRFinal + ruleRTL + ruleRTLFinal + ruleInvalid +) + +type ruleTransition struct { + next ruleState + mask uint16 +} + +var transitions = [...][2]ruleTransition{ + // [2.1] The first character must be a character with Bidi property L, R, or + // AL. If it has the R or AL property, it is an RTL label; if it has the L + // property, it is an LTR label. + ruleInitial: { + {ruleLTRFinal, 1 << bidi.L}, + {ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL}, + }, + ruleRTL: { + // [2.3] In an RTL label, the end of the label must be a character with + // Bidi property R, AL, EN, or AN, followed by zero or more characters + // with Bidi property NSM. + {ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL | 1<<bidi.EN | 1<<bidi.AN}, + + // [2.2] In an RTL label, only characters with the Bidi properties R, + // AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed. + // We exclude the entries from [2.3] + {ruleRTL, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN | 1<<bidi.NSM}, + }, + ruleRTLFinal: { + // [2.3] In an RTL label, the end of the label must be a character with + // Bidi property R, AL, EN, or AN, followed by zero or more characters + // with Bidi property NSM. + {ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL | 1<<bidi.EN | 1<<bidi.AN | 1<<bidi.NSM}, + + // [2.2] In an RTL label, only characters with the Bidi properties R, + // AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed. + // We exclude the entries from [2.3] and NSM. + {ruleRTL, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN}, + }, + ruleLTR: { + // [2.6] In an LTR label, the end of the label must be a character with + // Bidi property L or EN, followed by zero or more characters with Bidi + // property NSM. + {ruleLTRFinal, 1<<bidi.L | 1<<bidi.EN}, + + // [2.5] In an LTR label, only characters with the Bidi properties L, + // EN, ES, CS, ET, ON, BN, or NSM are allowed. + // We exclude the entries from [2.6]. + {ruleLTR, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN | 1<<bidi.NSM}, + }, + ruleLTRFinal: { + // [2.6] In an LTR label, the end of the label must be a character with + // Bidi property L or EN, followed by zero or more characters with Bidi + // property NSM. + {ruleLTRFinal, 1<<bidi.L | 1<<bidi.EN | 1<<bidi.NSM}, + + // [2.5] In an LTR label, only characters with the Bidi properties L, + // EN, ES, CS, ET, ON, BN, or NSM are allowed. + // We exclude the entries from [2.6]. + {ruleLTR, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN}, + }, + ruleInvalid: { + {ruleInvalid, 0}, + {ruleInvalid, 0}, + }, +} + +// [2.4] In an RTL label, if an EN is present, no AN may be present, and +// vice versa. +const exclusiveRTL = uint16(1<<bidi.EN | 1<<bidi.AN) + +// From RFC 5893 +// An RTL label is a label that contains at least one character of type +// R, AL, or AN. +// +// An LTR label is any label that is not an RTL label. + +// Direction reports the direction of the given label as defined by RFC 5893. +// The Bidi Rule does not have to be applied to labels of the category +// LeftToRight. +func Direction(b []byte) bidi.Direction { + for i := 0; i < len(b); { + e, sz := bidi.Lookup(b[i:]) + if sz == 0 { + i++ + } + c := e.Class() + if c == bidi.R || c == bidi.AL || c == bidi.AN { + return bidi.RightToLeft + } + i += sz + } + return bidi.LeftToRight +} + +// DirectionString reports the direction of the given label as defined by RFC +// 5893. The Bidi Rule does not have to be applied to labels of the category +// LeftToRight. +func DirectionString(s string) bidi.Direction { + for i := 0; i < len(s); { + e, sz := bidi.LookupString(s[i:]) + if sz == 0 { + i++ + } + c := e.Class() + if c == bidi.R || c == bidi.AL || c == bidi.AN { + return bidi.RightToLeft + } + i += sz + } + return bidi.LeftToRight +} + +// Valid reports whether b conforms to the BiDi rule. +func Valid(b []byte) bool { + var t Transformer + if n, ok := t.advance(b); !ok || n < len(b) { + return false + } + return t.isFinal() +} + +// ValidString reports whether s conforms to the BiDi rule. +func ValidString(s string) bool { + var t Transformer + if n, ok := t.advanceString(s); !ok || n < len(s) { + return false + } + return t.isFinal() +} + +// New returns a Transformer that verifies that input adheres to the Bidi Rule. +func New() *Transformer { + return &Transformer{} +} + +// Transformer implements transform.Transform. +type Transformer struct { + state ruleState + hasRTL bool + seen uint16 +} + +// A rule can only be violated for "Bidi Domain names", meaning if one of the +// following categories has been observed. +func (t *Transformer) isRTL() bool { + const isRTL = 1<<bidi.R | 1<<bidi.AL | 1<<bidi.AN + return t.seen&isRTL != 0 +} + +func (t *Transformer) isFinal() bool { + if !t.isRTL() { + return true + } + return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial +} + +// Reset implements transform.Transformer. +func (t *Transformer) Reset() { *t = Transformer{} } + +// Transform implements transform.Transformer. This Transformer has state and +// needs to be reset between uses. +func (t *Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if len(dst) < len(src) { + src = src[:len(dst)] + atEOF = false + err = transform.ErrShortDst + } + n, err1 := t.Span(src, atEOF) + copy(dst, src[:n]) + if err == nil || err1 != nil && err1 != transform.ErrShortSrc { + err = err1 + } + return n, n, err +} + +// Span returns the first n bytes of src that conform to the Bidi rule. +func (t *Transformer) Span(src []byte, atEOF bool) (n int, err error) { + if t.state == ruleInvalid && t.isRTL() { + return 0, ErrInvalid + } + n, ok := t.advance(src) + switch { + case !ok: + err = ErrInvalid + case n < len(src): + if !atEOF { + err = transform.ErrShortSrc + break + } + err = ErrInvalid + case !t.isFinal(): + err = ErrInvalid + } + return n, err +} + +// Precomputing the ASCII values decreases running time for the ASCII fast path +// by about 30%. +var asciiTable [128]bidi.Properties + +func init() { + for i := range asciiTable { + p, _ := bidi.LookupRune(rune(i)) + asciiTable[i] = p + } +} + +func (t *Transformer) advance(s []byte) (n int, ok bool) { + var e bidi.Properties + var sz int + for n < len(s) { + if s[n] < utf8.RuneSelf { + e, sz = asciiTable[s[n]], 1 + } else { + e, sz = bidi.Lookup(s[n:]) + if sz <= 1 { + if sz == 1 { + // We always consider invalid UTF-8 to be invalid, even if + // the string has not yet been determined to be RTL. + // TODO: is this correct? + return n, false + } + return n, true // incomplete UTF-8 encoding + } + } + // TODO: using CompactClass would result in noticeable speedup. + // See unicode/bidi/prop.go:Properties.CompactClass. + c := uint16(1 << e.Class()) + t.seen |= c + if t.seen&exclusiveRTL == exclusiveRTL { + t.state = ruleInvalid + return n, false + } + switch tr := transitions[t.state]; { + case tr[0].mask&c != 0: + t.state = tr[0].next + case tr[1].mask&c != 0: + t.state = tr[1].next + default: + t.state = ruleInvalid + if t.isRTL() { + return n, false + } + } + n += sz + } + return n, true +} + +func (t *Transformer) advanceString(s string) (n int, ok bool) { + var e bidi.Properties + var sz int + for n < len(s) { + if s[n] < utf8.RuneSelf { + e, sz = asciiTable[s[n]], 1 + } else { + e, sz = bidi.LookupString(s[n:]) + if sz <= 1 { + if sz == 1 { + return n, false // invalid UTF-8 + } + return n, true // incomplete UTF-8 encoding + } + } + // TODO: using CompactClass results in noticeable speedup. + // See unicode/bidi/prop.go:Properties.CompactClass. + c := uint16(1 << e.Class()) + t.seen |= c + if t.seen&exclusiveRTL == exclusiveRTL { + t.state = ruleInvalid + return n, false + } + switch tr := transitions[t.state]; { + case tr[0].mask&c != 0: + t.state = tr[0].next + case tr[1].mask&c != 0: + t.state = tr[1].next + default: + t.state = ruleInvalid + if t.isRTL() { + return n, false + } + } + n += sz + } + return n, true +} diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go b/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go new file mode 100644 index 0000000..0794b3d --- /dev/null +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go @@ -0,0 +1,825 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidirule + +import ( + "fmt" + "testing" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/bidi" +) + +const ( + strL = "ABC" // Left to right - most letters in LTR scripts + strR = "עברית" // Right to left - most letters in non-Arabic RTL scripts + strAL = "دبي" // Arabic letters - most letters in the Arabic script + strEN = "123" // European Number (0-9, and Extended Arabic-Indic numbers) + strES = "+-" // European Number Separator (+ and -) + strET = "$" // European Number Terminator (currency symbols, the hash sign, the percent sign and so on) + strAN = "\u0660" // Arabic Number; this encompasses the Arabic-Indic numbers, but not the Extended Arabic-Indic numbers + strCS = "," // Common Number Separator (. , / : et al) + strNSM = "\u0300" // Nonspacing Mark - most combining accents + strBN = "\u200d" // Boundary Neutral - control characters (ZWNJ, ZWJ, and others) + strB = "\u2029" // Paragraph Separator + strS = "\u0009" // Segment Separator + strWS = " " // Whitespace, including the SPACE character + strON = "@" // Other Neutrals, including @, &, parentheses, MIDDLE DOT +) + +type ruleTest struct { + in string + dir bidi.Direction + n int // position at which the rule fails + err error + + // For tests that split the string in two. + pSrc int // number of source bytes to consume first + szDst int // size of destination buffer + nSrc int // source bytes consumed and bytes written + err0 error // error after first run +} + +var testCases = [][]ruleTest{ + // Go-specific rules. + // Invalid UTF-8 is invalid. + 0: []ruleTest{{ + in: "", + dir: bidi.LeftToRight, + }, { + in: "\x80", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: "\xcc", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: "abc\x80", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "abc\xcc", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "abc\xccdef", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "\xccdef", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: strR + "\x80", + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strR), + }, { + in: strR + "\xcc", + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strR), + }, { + in: strAL + "\xcc" + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strAL), + }, { + in: "\xcc" + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 0, + }}, + + // Rule 2.1: The first character must be a character with Bidi property L, + // R, or AL. If it has the R or AL property, it is an RTL label; if it has + // the L property, it is an LTR label. + 1: []ruleTest{{ + in: strL, + dir: bidi.LeftToRight, + }, { + in: strR, + dir: bidi.RightToLeft, + }, { + in: strAL, + dir: bidi.RightToLeft, + }, { + in: strAN, + dir: bidi.RightToLeft, + err: ErrInvalid, + }, { + in: strEN, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strES, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strET, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strCS, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strNSM, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strBN, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strB, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strS, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strWS, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strON, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strEN + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strES + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 2, + }, { + in: strET + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strCS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strNSM + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 2, + }, { + in: strBN + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strB + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strWS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strON + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }}, + + // Rule 2.2: In an RTL label, only characters with the Bidi properties R, + // AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed. + 2: []ruleTest{{ + in: strR + strR + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strAN + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strEN + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strES + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strCS + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strET + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strON + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strBN + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strNSM + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strL + strR, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strB + strR, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strS + strAL, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strWS + strAL, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strAL + strR + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strAN + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strEN + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strES + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strCS + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strET + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strON + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strBN + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strNSM + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strL + strR, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strB + strR, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strS + strAL, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strWS + strAL, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }}, + + // Rule 2.3: In an RTL label, the end of the label must be a character with + // Bidi property R, AL, EN, or AN, followed by zero or more characters with + // Bidi property NSM. + 3: []ruleTest{{ + in: strR + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strEN + strNSM + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strAN, + dir: bidi.RightToLeft, + }, { + in: strR + strES + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strES + strNSM), + err: ErrInvalid, + }, { + in: strR + strCS + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strCS + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strR + strET, + dir: bidi.RightToLeft, + n: len(strR + strET), + err: ErrInvalid, + }, { + in: strR + strON + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strON + strNSM), + err: ErrInvalid, + }, { + in: strR + strBN + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strBN + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strR + strL + strNSM, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strB + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strS, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strWS, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strEN + strNSM + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strAN, + dir: bidi.RightToLeft, + }, { + in: strAL + strES + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strES + strNSM), + err: ErrInvalid, + }, { + in: strAL + strCS + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strCS + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strAL + strET, + dir: bidi.RightToLeft, + n: len(strAL + strET), + err: ErrInvalid, + }, { + in: strAL + strON + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strON + strNSM), + err: ErrInvalid, + }, { + in: strAL + strBN + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strBN + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strAL + strL + strNSM, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strB + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strS, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strWS, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }}, + + // Rule 2.4: In an RTL label, if an EN is present, no AN may be present, + // and vice versa. + 4: []ruleTest{{ + in: strR + strEN + strAN, + dir: bidi.RightToLeft, + n: len(strR + strEN), + err: ErrInvalid, + }, { + in: strR + strAN + strEN + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strAN), + err: ErrInvalid, + }, { + in: strAL + strEN + strAN, + dir: bidi.RightToLeft, + n: len(strAL + strEN), + err: ErrInvalid, + }, { + in: strAL + strAN + strEN + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strAN), + err: ErrInvalid, + }}, + + // Rule 2.5: In an LTR label, only characters with the Bidi properties L, + // EN, ES, CS, ET, ON, BN, or NSM are allowed. + 5: []ruleTest{{ + in: strL + strL + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strES + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strCS + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strET + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strON + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strBN + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strR + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAL + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAN + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strB + strL, + dir: bidi.LeftToRight, + n: len(strL + strAN + strL), + err: nil, + }, { + in: strL + strB + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strB + strL), + err: ErrInvalid, + }, { + in: strL + strS + strL, + dir: bidi.LeftToRight, + n: len(strL + strS + strL), + err: nil, + }, { + in: strL + strS + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strS + strL), + err: ErrInvalid, + }, { + in: strL + strWS + strL, + dir: bidi.LeftToRight, + n: len(strL + strWS + strL), + err: nil, + }, { + in: strL + strWS + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strWS + strL), + err: ErrInvalid, + }}, + + // Rule 2.6: In an LTR label, the end of the label must be a character with + // Bidi property L or EN, followed by zero or more characters with Bidi + // property NSM. + 6: []ruleTest{{ + in: strL, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strEN, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strNSM + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strES, + dir: bidi.LeftToRight, + n: len(strL + strES), + err: nil, + }, { + in: strL + strES + strR, + dir: bidi.RightToLeft, + n: len(strL + strES), + err: ErrInvalid, + }, { + in: strL + strCS, + dir: bidi.LeftToRight, + n: len(strL + strCS), + err: nil, + }, { + in: strL + strCS + strR, + dir: bidi.RightToLeft, + n: len(strL + strCS), + err: ErrInvalid, + }, { + in: strL + strET, + dir: bidi.LeftToRight, + n: len(strL + strET), + err: nil, + }, { + in: strL + strET + strR, + dir: bidi.RightToLeft, + n: len(strL + strET), + err: ErrInvalid, + }, { + in: strL + strON, + dir: bidi.LeftToRight, + n: len(strL + strON), + err: nil, + }, { + in: strL + strON + strR, + dir: bidi.RightToLeft, + n: len(strL + strON), + err: ErrInvalid, + }, { + in: strL + strBN, + dir: bidi.LeftToRight, + n: len(strL + strBN), + err: nil, + }, { + in: strL + strBN + strR, + dir: bidi.RightToLeft, + n: len(strL + strBN), + err: ErrInvalid, + }, { + in: strL + strR, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAN, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strB, + dir: bidi.LeftToRight, + n: len(strL + strB), + err: nil, + }, { + in: strL + strB + strR, + dir: bidi.RightToLeft, + n: len(strL + strB), + err: ErrInvalid, + }, { + in: strL + strB, + dir: bidi.LeftToRight, + n: len(strL + strB), + err: nil, + }, { + in: strL + strB + strR, + dir: bidi.RightToLeft, + n: len(strL + strB), + err: ErrInvalid, + }, { + in: strL + strB, + dir: bidi.LeftToRight, + n: len(strL + strB), + err: nil, + }, { + in: strL + strB + strR, + dir: bidi.RightToLeft, + n: len(strL + strB), + err: ErrInvalid, + }}, + + // Incremental processing. + 9: []ruleTest{{ + in: "e\u0301", // é + dir: bidi.LeftToRight, + + pSrc: 2, + nSrc: 1, + err0: transform.ErrShortSrc, + }, { + in: "e\u1000f", // é + dir: bidi.LeftToRight, + + pSrc: 3, + nSrc: 1, + err0: transform.ErrShortSrc, + }, { + // Remain invalid once invalid. + in: strR + "ab", + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + + pSrc: len(strR) + 1, + nSrc: len(strR), + err0: ErrInvalid, + }, { + // Short destination + in: "abcdefghij", + dir: bidi.LeftToRight, + + pSrc: 10, + szDst: 5, + nSrc: 5, + err0: transform.ErrShortDst, + }, { + // Short destination splitting input rune + in: "e\u0301", + dir: bidi.LeftToRight, + + pSrc: 3, + szDst: 2, + nSrc: 1, + err0: transform.ErrShortDst, + }}, +} + +func init() { + for rule, cases := range testCases { + for i, tc := range cases { + if tc.err == nil { + testCases[rule][i].n = len(tc.in) + } + } + } +} + +func doTests(t *testing.T, fn func(t *testing.T, tc ruleTest)) { + for rule, cases := range testCases { + for i, tc := range cases { + name := fmt.Sprintf("%d/%d:%+q:%s", rule, i, tc.in, tc.in) + testtext.Run(t, name, func(t *testing.T) { + fn(t, tc) + }) + } + } +} + +func TestDirection(t *testing.T) { + doTests(t, func(t *testing.T, tc ruleTest) { + dir := Direction([]byte(tc.in)) + if dir != tc.dir { + t.Errorf("dir was %v; want %v", dir, tc.dir) + } + }) +} + +func TestDirectionString(t *testing.T) { + doTests(t, func(t *testing.T, tc ruleTest) { + dir := DirectionString(tc.in) + if dir != tc.dir { + t.Errorf("dir was %v; want %v", dir, tc.dir) + } + }) +} + +func TestValid(t *testing.T) { + doTests(t, func(t *testing.T, tc ruleTest) { + got := Valid([]byte(tc.in)) + want := tc.err == nil + if got != want { + t.Fatalf("Valid: got %v; want %v", got, want) + } + + got = ValidString(tc.in) + want = tc.err == nil + if got != want { + t.Fatalf("Valid: got %v; want %v", got, want) + } + }) +} + +func TestSpan(t *testing.T) { + doTests(t, func(t *testing.T, tc ruleTest) { + // Skip tests that test for limited destination buffer size. + if tc.szDst > 0 { + return + } + + r := New() + src := []byte(tc.in) + + n, err := r.Span(src[:tc.pSrc], tc.pSrc == len(tc.in)) + if err != tc.err0 { + t.Errorf("err0 was %v; want %v", err, tc.err0) + } + if n != tc.nSrc { + t.Fatalf("nSrc was %d; want %d", n, tc.nSrc) + } + + n, err = r.Span(src[n:], true) + if err != tc.err { + t.Errorf("error was %v; want %v", err, tc.err) + } + if got := n + tc.nSrc; got != tc.n { + t.Errorf("n was %d; want %d", got, tc.n) + } + }) +} + +func TestTransform(t *testing.T) { + doTests(t, func(t *testing.T, tc ruleTest) { + r := New() + + src := []byte(tc.in) + dst := make([]byte, len(tc.in)) + if tc.szDst > 0 { + dst = make([]byte, tc.szDst) + } + + // First transform operates on a zero-length string for most tests. + nDst, nSrc, err := r.Transform(dst, src[:tc.pSrc], tc.pSrc == len(tc.in)) + if err != tc.err0 { + t.Errorf("err0 was %v; want %v", err, tc.err0) + } + if nDst != nSrc { + t.Fatalf("nDst (%d) and nSrc (%d) should match", nDst, nSrc) + } + if nSrc != tc.nSrc { + t.Fatalf("nSrc was %d; want %d", nSrc, tc.nSrc) + } + + dst1 := make([]byte, len(tc.in)) + copy(dst1, dst[:nDst]) + + nDst, nSrc, err = r.Transform(dst1[nDst:], src[nSrc:], true) + if err != tc.err { + t.Errorf("error was %v; want %v", err, tc.err) + } + if nDst != nSrc { + t.Fatalf("nDst (%d) and nSrc (%d) should match", nDst, nSrc) + } + n := nSrc + tc.nSrc + if n != tc.n { + t.Fatalf("n was %d; want %d", n, tc.n) + } + if got, want := string(dst1[:n]), tc.in[:tc.n]; got != want { + t.Errorf("got %+q; want %+q", got, want) + } + }) +} diff --git a/vendor/golang.org/x/text/secure/doc.go b/vendor/golang.org/x/text/secure/doc.go new file mode 100644 index 0000000..e531c35 --- /dev/null +++ b/vendor/golang.org/x/text/secure/doc.go @@ -0,0 +1,6 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// secure is a repository of text security related packages. +package secure // import "golang.org/x/text/secure" diff --git a/vendor/golang.org/x/text/secure/precis/benchmark_test.go b/vendor/golang.org/x/text/secure/precis/benchmark_test.go new file mode 100644 index 0000000..6337d00 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/benchmark_test.go @@ -0,0 +1,82 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package precis + +import ( + "testing" + + "golang.org/x/text/internal/testtext" +) + +var benchData = []struct{ name, str string }{ + {"ASCII", "Malvolio"}, + {"NotNormalized", "abcdefg\u0301\u031f"}, + {"Arabic", "دبي"}, + {"Hangul", "동일조건변경허락"}, +} + +var benchProfiles = []struct { + name string + p *Profile +}{ + {"FreeForm", NewFreeform()}, + {"Nickname", Nickname}, + {"OpaqueString", OpaqueString}, + {"UsernameCaseMapped", UsernameCaseMapped}, + {"UsernameCasePreserved", UsernameCasePreserved}, +} + +func doBench(b *testing.B, f func(b *testing.B, p *Profile, s string)) { + for _, bp := range benchProfiles { + for _, d := range benchData { + testtext.Bench(b, bp.name+"/"+d.name, func(b *testing.B) { + f(b, bp.p, d.str) + }) + } + } +} + +func BenchmarkString(b *testing.B) { + doBench(b, func(b *testing.B, p *Profile, s string) { + for i := 0; i < b.N; i++ { + p.String(s) + } + }) +} + +func BenchmarkBytes(b *testing.B) { + doBench(b, func(b *testing.B, p *Profile, s string) { + src := []byte(s) + b.ResetTimer() + for i := 0; i < b.N; i++ { + p.Bytes(src) + } + }) +} + +func BenchmarkAppend(b *testing.B) { + doBench(b, func(b *testing.B, p *Profile, s string) { + src := []byte(s) + dst := make([]byte, 0, 4096) + b.ResetTimer() + for i := 0; i < b.N; i++ { + p.Append(dst, src) + } + }) +} + +func BenchmarkTransform(b *testing.B) { + doBench(b, func(b *testing.B, p *Profile, s string) { + src := []byte(s) + dst := make([]byte, 2*len(s)) + t := p.NewTransformer() + b.ResetTimer() + for i := 0; i < b.N; i++ { + t.Transform(dst, src, true) + } + }) +} diff --git a/vendor/golang.org/x/text/secure/precis/class.go b/vendor/golang.org/x/text/secure/precis/class.go new file mode 100644 index 0000000..f6b5641 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/class.go @@ -0,0 +1,36 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "unicode/utf8" +) + +// TODO: Add contextual character rules from Appendix A of RFC5892. + +// A class is a set of characters that match certain derived properties. The +// PRECIS framework defines two classes: The Freeform class and the Identifier +// class. The freeform class should be used for profiles where expressiveness is +// prioritized over safety such as nicknames or passwords. The identifier class +// should be used for profiles where safety is the first priority such as +// addressable network labels and usernames. +type class struct { + validFrom property +} + +// Contains satisfies the runes.Set interface and returns whether the given rune +// is a member of the class. +func (c class) Contains(r rune) bool { + b := make([]byte, 4) + n := utf8.EncodeRune(b, r) + + trieval, _ := dpTrie.lookup(b[:n]) + return c.validFrom <= property(trieval) +} + +var ( + identifier = &class{validFrom: pValid} + freeform = &class{validFrom: idDisOrFreePVal} +) diff --git a/vendor/golang.org/x/text/secure/precis/class_test.go b/vendor/golang.org/x/text/secure/precis/class_test.go new file mode 100644 index 0000000..fbaf645 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/class_test.go @@ -0,0 +1,50 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "testing" + + "golang.org/x/text/runes" +) + +// Compile-time regression test to ensure that Class is a Set +var _ runes.Set = (*class)(nil) + +// Ensure that certain characters are (or are not) in the identifer class. +func TestClassContains(t *testing.T) { + tests := []struct { + name string + class *class + allowed []rune + disallowed []rune + }{ + { + name: "Identifier", + class: identifier, + allowed: []rune("Aa0\u0021\u007e\u00df\u3007"), + disallowed: []rune("\u2150\u2100\u2200\u3164\u2190\u2600\u303b\u1e9b"), + }, + { + name: "Freeform", + class: freeform, + allowed: []rune("Aa0\u0021\u007e\u00df\u3007 \u2150\u2100\u2200\u2190\u2600\u1e9b"), + disallowed: []rune("\u3164\u303b"), + }, + } + + for _, rt := range tests { + for _, r := range rt.allowed { + if !rt.class.Contains(r) { + t.Errorf("Class %s should contain %U", rt.name, r) + } + } + for _, r := range rt.disallowed { + if rt.class.Contains(r) { + t.Errorf("Class %s should not contain %U", rt.name, r) + } + } + } +} diff --git a/vendor/golang.org/x/text/secure/precis/context.go b/vendor/golang.org/x/text/secure/precis/context.go new file mode 100644 index 0000000..2dcaf29 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/context.go @@ -0,0 +1,139 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import "errors" + +// This file contains tables and code related to context rules. + +type catBitmap uint16 + +const ( + // These bits, once set depending on the current value, are never unset. + bJapanese catBitmap = 1 << iota + bArabicIndicDigit + bExtendedArabicIndicDigit + + // These bits are set on each iteration depending on the current value. + bJoinStart + bJoinMid + bJoinEnd + bVirama + bLatinSmallL + bGreek + bHebrew + + // These bits indicated which of the permanent bits need to be set at the + // end of the checks. + bMustHaveJapn + + permanent = bJapanese | bArabicIndicDigit | bExtendedArabicIndicDigit | bMustHaveJapn +) + +const finalShift = 10 + +var errContext = errors.New("precis: contextual rule violated") + +func init() { + // Programmatically set these required bits as, manually setting them seems + // too error prone. + for i, ct := range categoryTransitions { + categoryTransitions[i].keep |= permanent + categoryTransitions[i].accept |= ct.term + } +} + +var categoryTransitions = []struct { + keep catBitmap // mask selecting which bits to keep from the previous state + set catBitmap // mask for which bits to set for this transition + + // These bitmaps are used for rules that require lookahead. + // term&accept == term must be true, which is enforced programmatically. + term catBitmap // bits accepted as termination condition + accept catBitmap // bits that pass, but not sufficient as termination + + // The rule function cannot take a *context as an argument, as it would + // cause the context to escape, adding significant overhead. + rule func(beforeBits catBitmap) (doLookahead bool, err error) +}{ + joiningL: {set: bJoinStart}, + joiningD: {set: bJoinStart | bJoinEnd}, + joiningT: {keep: bJoinStart, set: bJoinMid}, + joiningR: {set: bJoinEnd}, + viramaModifier: {set: bVirama}, + viramaJoinT: {set: bVirama | bJoinMid}, + latinSmallL: {set: bLatinSmallL}, + greek: {set: bGreek}, + greekJoinT: {set: bGreek | bJoinMid}, + hebrew: {set: bHebrew}, + hebrewJoinT: {set: bHebrew | bJoinMid}, + japanese: {set: bJapanese}, + katakanaMiddleDot: {set: bMustHaveJapn}, + + zeroWidthNonJoiner: { + term: bJoinEnd, + accept: bJoinMid, + rule: func(before catBitmap) (doLookAhead bool, err error) { + if before&bVirama != 0 { + return false, nil + } + if before&bJoinStart == 0 { + return false, errContext + } + return true, nil + }, + }, + zeroWidthJoiner: { + rule: func(before catBitmap) (doLookAhead bool, err error) { + if before&bVirama == 0 { + err = errContext + } + return false, err + }, + }, + middleDot: { + term: bLatinSmallL, + rule: func(before catBitmap) (doLookAhead bool, err error) { + if before&bLatinSmallL == 0 { + return false, errContext + } + return true, nil + }, + }, + greekLowerNumeralSign: { + set: bGreek, + term: bGreek, + rule: func(before catBitmap) (doLookAhead bool, err error) { + return true, nil + }, + }, + hebrewPreceding: { + set: bHebrew, + rule: func(before catBitmap) (doLookAhead bool, err error) { + if before&bHebrew == 0 { + err = errContext + } + return false, err + }, + }, + arabicIndicDigit: { + set: bArabicIndicDigit, + rule: func(before catBitmap) (doLookAhead bool, err error) { + if before&bExtendedArabicIndicDigit != 0 { + err = errContext + } + return false, err + }, + }, + extendedArabicIndicDigit: { + set: bExtendedArabicIndicDigit, + rule: func(before catBitmap) (doLookAhead bool, err error) { + if before&bArabicIndicDigit != 0 { + err = errContext + } + return false, err + }, + }, +} diff --git a/vendor/golang.org/x/text/secure/precis/doc.go b/vendor/golang.org/x/text/secure/precis/doc.go new file mode 100644 index 0000000..48500fe --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/doc.go @@ -0,0 +1,14 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package precis contains types and functions for the preparation, +// enforcement, and comparison of internationalized strings ("PRECIS") as +// defined in RFC 7564. It also contains several pre-defined profiles for +// passwords, nicknames, and usernames as defined in RFC 7613 and RFC 7700. +// +// BE ADVISED: This package is under construction and the API may change in +// backwards incompatible ways and without notice. +package precis // import "golang.org/x/text/secure/precis" + +//go:generate go run gen.go gen_trieval.go diff --git a/vendor/golang.org/x/text/secure/precis/enforce_test.go b/vendor/golang.org/x/text/secure/precis/enforce_test.go new file mode 100644 index 0000000..927d4ab --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/enforce_test.go @@ -0,0 +1,320 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "fmt" + "reflect" + "testing" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/secure/bidirule" +) + +type testCase struct { + input string + output string + err error +} + +var enforceTestCases = []struct { + name string + p *Profile + cases []testCase +}{ + {"Basic", NewFreeform(), []testCase{ + {"e\u0301\u031f", "\u00e9\u031f", nil}, // normalize + }}, + + {"Context Rule 1", NewFreeform(), []testCase{ + // Rule 1: zero-width non-joiner (U+200C) + // From RFC: + // False + // If Canonical_Combining_Class(Before(cp)) .eq. Virama Then True; + // If RegExpMatch((Joining_Type:{L,D})(Joining_Type:T)*\u200C + // (Joining_Type:T)*(Joining_Type:{R,D})) Then True; + // + // Example runes for different joining types: + // Join L: U+A872; PHAGS-PA SUPERFIXED LETTER RA + // Join D: U+062C; HAH WITH DOT BELOW + // Join T: U+0610; ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM + // Join R: U+0627; ALEF + // Virama: U+0A4D; GURMUKHI SIGN VIRAMA + // Virama and Join T: U+0ACD; GUJARATI SIGN VIRAMA + {"\u200c", "", errContext}, + {"\u200ca", "", errContext}, + {"a\u200c", "", errContext}, + {"\u200c\u0627", "", errContext}, // missing JoinStart + {"\u062c\u200c", "", errContext}, // missing JoinEnd + {"\u0610\u200c\u0610\u0627", "", errContext}, // missing JoinStart + {"\u062c\u0610\u200c\u0610", "", errContext}, // missing JoinEnd + + // Variants of: D T* U+200c T* R + {"\u062c\u200c\u0627", "\u062c\u200c\u0627", nil}, + {"\u062c\u0610\u200c\u0610\u0627", "\u062c\u0610\u200c\u0610\u0627", nil}, + {"\u062c\u0610\u0610\u200c\u0610\u0610\u0627", "\u062c\u0610\u0610\u200c\u0610\u0610\u0627", nil}, + {"\u062c\u0610\u200c\u0627", "\u062c\u0610\u200c\u0627", nil}, + {"\u062c\u200c\u0610\u0627", "\u062c\u200c\u0610\u0627", nil}, + + // Variants of: L T* U+200c T* D + {"\ua872\u200c\u062c", "\ua872\u200c\u062c", nil}, + {"\ua872\u0610\u200c\u0610\u062c", "\ua872\u0610\u200c\u0610\u062c", nil}, + {"\ua872\u0610\u0610\u200c\u0610\u0610\u062c", "\ua872\u0610\u0610\u200c\u0610\u0610\u062c", nil}, + {"\ua872\u0610\u200c\u062c", "\ua872\u0610\u200c\u062c", nil}, + {"\ua872\u200c\u0610\u062c", "\ua872\u200c\u0610\u062c", nil}, + + // Virama + {"\u0a4d\u200c", "\u0a4d\u200c", nil}, + {"\ua872\u0a4d\u200c", "\ua872\u0a4d\u200c", nil}, + {"\ua872\u0a4d\u0610\u200c", "", errContext}, + {"\ua872\u0a4d\u0610\u200c", "", errContext}, + + {"\u0acd\u200c", "\u0acd\u200c", nil}, + {"\ua872\u0acd\u200c", "\ua872\u0acd\u200c", nil}, + {"\ua872\u0acd\u0610\u200c", "", errContext}, + {"\ua872\u0acd\u0610\u200c", "", errContext}, + + // Using Virama as join T + {"\ua872\u0acd\u200c\u062c", "\ua872\u0acd\u200c\u062c", nil}, + {"\ua872\u200c\u0acd\u062c", "\ua872\u200c\u0acd\u062c", nil}, + }}, + + {"Context Rule 2", NewFreeform(), []testCase{ + // Rule 2: zero-width joiner (U+200D) + {"\u200d", "", errContext}, + {"\u200da", "", errContext}, + {"a\u200d", "", errContext}, + + {"\u0a4d\u200d", "\u0a4d\u200d", nil}, + {"\ua872\u0a4d\u200d", "\ua872\u0a4d\u200d", nil}, + {"\u0a4da\u200d", "", errContext}, + }}, + + {"Context Rule 3", NewFreeform(), []testCase{ + // Rule 3: middle dot + {"·", "", errContext}, + {"l·", "", errContext}, + {"·l", "", errContext}, + {"a·", "", errContext}, + {"l·a", "", errContext}, + {"a·a", "", errContext}, + {"l·l", "l·l", nil}, + {"al·la", "al·la", nil}, + }}, + + {"Context Rule 4", NewFreeform(), []testCase{ + // Rule 4: Greek lower numeral U+0375 + {"͵", "", errContext}, + {"͵a", "", errContext}, + {"α͵", "", errContext}, + {"͵α", "͵α", nil}, + {"α͵α", "α͵α", nil}, + {"͵͵α", "͵͵α", nil}, // The numeric sign is itself Greek. + {"α͵͵α", "α͵͵α", nil}, + }}, + + {"Context Rule 5+6", NewFreeform(), []testCase{ + // Rule 5+6: Hebrew preceding + // U+05f3: Geresh + {"׳", "", errContext}, + {"׳ה", "", errContext}, + {"a׳b", "", errContext}, + {"ש׳", "ש׳", nil}, // U+05e9 U+05f3 + {"ש׳׳׳", "ש׳׳׳", nil}, // U+05e9 U+05f3 + + // U+05f4: Gershayim + {"״", "", errContext}, + {"״ה", "", errContext}, + {"a״b", "", errContext}, + {"ש״", "ש״", nil}, // U+05e9 U+05f4 + {"ש״״״", "ש״״״", nil}, // U+05e9 U+05f4 + {"aש״״״", "aש״״״", nil}, // U+05e9 U+05f4 + }}, + + {"Context Rule 7", NewFreeform(), []testCase{ + // Rule 7: Katakana middle Dot + {"・", "", errContext}, + {"abc・", "", errContext}, + {"・def", "", errContext}, + {"abc・def", "", errContext}, + {"aヅc・def", "aヅc・def", nil}, + {"abc・dぶf", "abc・dぶf", nil}, + {"⺐bc・def", "⺐bc・def", nil}, + }}, + + {"Context Rule 8+9", NewFreeform(), []testCase{ + // Rule 8+9: Arabic Indic Digit + {"١٢٣٤٥۶", "", errContext}, + {"۱۲۳۴۵٦", "", errContext}, + {"١٢٣٤٥", "١٢٣٤٥", nil}, + {"۱۲۳۴۵", "۱۲۳۴۵", nil}, + }}, + + {"Nickname", Nickname, []testCase{ + {" Swan of Avon ", "Swan of Avon", nil}, + {"", "", errEmptyString}, + {" ", "", errEmptyString}, + {" ", "", errEmptyString}, + {"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil}, + {"Foo", "Foo", nil}, + {"foo", "foo", nil}, + {"Foo Bar", "Foo Bar", nil}, + {"foo bar", "foo bar", nil}, + {"\u03A3", "\u03A3", nil}, + {"\u03C3", "\u03C3", nil}, + // Greek final sigma is left as is (do not fold!) + {"\u03C2", "\u03C2", nil}, + {"\u265A", "♚", nil}, + {"Richard \u2163", "Richard IV", nil}, + {"\u212B", "Å", nil}, + {"\uFB00", "ff", nil}, // because of NFKC + {"שa", "שa", nil}, // no bidi rule + {"동일조건변경허락", "동일조건변경허락", nil}, + }}, + {"OpaqueString", OpaqueString, []testCase{ + {" Swan of Avon ", " Swan of Avon ", nil}, + {"", "", errEmptyString}, + {" ", " ", nil}, + {" ", " ", nil}, + {"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil}, + {"Foo", "Foo", nil}, + {"foo", "foo", nil}, + {"Foo Bar", "Foo Bar", nil}, + {"foo bar", "foo bar", nil}, + {"\u03C3", "\u03C3", nil}, + {"Richard \u2163", "Richard \u2163", nil}, + {"\u212B", "Å", nil}, + {"Jack of \u2666s", "Jack of \u2666s", nil}, + {"my cat is a \u0009by", "", errDisallowedRune}, + {"שa", "שa", nil}, // no bidi rule + }}, + {"UsernameCaseMapped", UsernameCaseMapped, []testCase{ + // TODO: Should this work? + // {UsernameCaseMapped, "", "", errDisallowedRune}, + {"juliet@example.com", "juliet@example.com", nil}, + {"fussball", "fussball", nil}, + {"fu\u00DFball", "fu\u00DFball", nil}, + {"\u03C0", "\u03C0", nil}, + {"\u03A3", "\u03C3", nil}, + {"\u03C3", "\u03C3", nil}, + // Greek final sigma is left as is (do not fold!) + {"\u03C2", "\u03C2", nil}, + {"\u0049", "\u0069", nil}, + {"\u0049", "\u0069", nil}, + {"\u03D2", "", errDisallowedRune}, + {"\u03B0", "\u03B0", nil}, + {"foo bar", "", errDisallowedRune}, + {"♚", "", errDisallowedRune}, + {"\u007E", "~", nil}, + {"a", "a", nil}, + {"!", "!", nil}, + {"²", "", errDisallowedRune}, + {"\t", "", errDisallowedRune}, + {"\n", "", errDisallowedRune}, + {"\u26D6", "", errDisallowedRune}, + {"\u26FF", "", errDisallowedRune}, + {"\uFB00", "", errDisallowedRune}, + {"\u1680", "", errDisallowedRune}, + {" ", "", errDisallowedRune}, + {" ", "", errDisallowedRune}, + {"\u01C5", "", errDisallowedRune}, + {"\u16EE", "", errDisallowedRune}, // Nl RUNIC ARLAUG SYMBOL + {"\u0488", "", errDisallowedRune}, // Me COMBINING CYRILLIC HUNDRED THOUSANDS SIGN + {"\u212B", "\u00e5", nil}, // Angstrom sign, NFC -> U+00E5 + {"A\u030A", "å", nil}, // A + ring + {"\u00C5", "å", nil}, // A with ring + {"\u00E7", "ç", nil}, // c cedille + {"\u0063\u0327", "ç", nil}, // c + cedille + {"\u0158", "ř", nil}, + {"\u0052\u030C", "ř", nil}, + + {"\u1E61", "\u1E61", nil}, // LATIN SMALL LETTER S WITH DOT ABOVE + + // Confusable characters ARE allowed and should NOT be mapped. + {"\u0410", "\u0430", nil}, // CYRILLIC CAPITAL LETTER A + + // Full width should be mapped to the canonical decomposition. + {"AB", "ab", nil}, + {"שc", "", bidirule.ErrInvalid}, // bidi rule + + }}, + {"UsernameCasePreserved", UsernameCasePreserved, []testCase{ + {"ABC", "ABC", nil}, + {"AB", "AB", nil}, + {"שc", "", bidirule.ErrInvalid}, // bidi rule + {"\uFB00", "", errDisallowedRune}, + {"\u212B", "\u00c5", nil}, // Angstrom sign, NFC -> U+00E5 + {"ẛ", "", errDisallowedRune}, // LATIN SMALL LETTER LONG S WITH DOT ABOVE + }}, +} + +func doTests(t *testing.T, fn func(t *testing.T, p *Profile, tc testCase)) { + for _, g := range enforceTestCases { + for i, tc := range g.cases { + name := fmt.Sprintf("%s:%d:%+q", g.name, i, tc.input) + testtext.Run(t, name, func(t *testing.T) { + fn(t, g.p, tc) + }) + } + } +} + +func TestString(t *testing.T) { + doTests(t, func(t *testing.T, p *Profile, tc testCase) { + if e, err := p.String(tc.input); tc.err != err || e != tc.output { + t.Errorf("got %+q (err: %v); want %+q (err: %v)", e, err, tc.output, tc.err) + } + }) +} + +func TestBytes(t *testing.T) { + doTests(t, func(t *testing.T, p *Profile, tc testCase) { + if e, err := p.Bytes([]byte(tc.input)); tc.err != err || string(e) != tc.output { + t.Errorf("got %+q (err: %v); want %+q (err: %v)", string(e), err, tc.output, tc.err) + } + }) + // Test that calling Bytes with something that doesn't transform returns a + // copy. + orig := []byte("hello") + b, _ := NewFreeform().Bytes(orig) + if reflect.ValueOf(b).Pointer() == reflect.ValueOf(orig).Pointer() { + t.Error("original and result are the same slice; should be a copy") + } +} + +func TestAppend(t *testing.T) { + doTests(t, func(t *testing.T, p *Profile, tc testCase) { + if e, err := p.Append(nil, []byte(tc.input)); tc.err != err || string(e) != tc.output { + t.Errorf("got %+q (err: %v); want %+q (err: %v)", string(e), err, tc.output, tc.err) + } + }) +} + +func TestStringMallocs(t *testing.T) { + if n := testtext.AllocsPerRun(100, func() { UsernameCaseMapped.String("helloworld") }); n > 0 { + // TODO: reduce this to 0. + t.Skipf("got %f allocs, want 0", n) + } +} + +func TestAppendMallocs(t *testing.T) { + str := []byte("helloworld") + out := make([]byte, 0, len(str)) + if n := testtext.AllocsPerRun(100, func() { UsernameCaseMapped.Append(out, str) }); n > 0 { + t.Errorf("got %f allocs, want 0", n) + } +} + +func TestTransformMallocs(t *testing.T) { + str := []byte("helloworld") + out := make([]byte, 0, len(str)) + tr := UsernameCaseMapped.NewTransformer() + if n := testtext.AllocsPerRun(100, func() { + tr.Reset() + tr.Transform(out, str, true) + }); n > 0 { + t.Errorf("got %f allocs, want 0", n) + } +} diff --git a/vendor/golang.org/x/text/secure/precis/gen.go b/vendor/golang.org/x/text/secure/precis/gen.go new file mode 100644 index 0000000..dba9004 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/gen.go @@ -0,0 +1,310 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Unicode table generator. +// Data read from the web. + +// +build ignore + +package main + +import ( + "flag" + "log" + "unicode" + "unicode/utf8" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/triegen" + "golang.org/x/text/internal/ucd" + "golang.org/x/text/unicode/norm" + "golang.org/x/text/unicode/rangetable" +) + +var outputFile = flag.String("output", "tables.go", "output file for generated tables; default tables.go") + +var assigned, disallowedRunes *unicode.RangeTable + +var runeCategory = map[rune]category{} + +var overrides = map[category]category{ + viramaModifier: viramaJoinT, + greek: greekJoinT, + hebrew: hebrewJoinT, +} + +func setCategory(r rune, cat category) { + if c, ok := runeCategory[r]; ok { + if override, ok := overrides[c]; cat == joiningT && ok { + cat = override + } else { + log.Fatalf("%U: multiple categories for rune (%v and %v)", r, c, cat) + } + } + runeCategory[r] = cat +} + +func init() { + if numCategories > 1<<propShift { + log.Fatalf("Number of categories is %d; may at most be %d", numCategories, 1<<propShift) + } +} + +func main() { + gen.Init() + + // Load data + runes := []rune{} + // PrecisIgnorableProperties: https://tools.ietf.org/html/rfc7564#section-9.13 + ucd.Parse(gen.OpenUCDFile("DerivedCoreProperties.txt"), func(p *ucd.Parser) { + if p.String(1) == "Default_Ignorable_Code_Point" { + runes = append(runes, p.Rune(0)) + } + }) + ucd.Parse(gen.OpenUCDFile("PropList.txt"), func(p *ucd.Parser) { + switch p.String(1) { + case "Noncharacter_Code_Point": + runes = append(runes, p.Rune(0)) + } + }) + // OldHangulJamo: https://tools.ietf.org/html/rfc5892#section-2.9 + ucd.Parse(gen.OpenUCDFile("HangulSyllableType.txt"), func(p *ucd.Parser) { + switch p.String(1) { + case "L", "V", "T": + runes = append(runes, p.Rune(0)) + } + }) + + disallowedRunes = rangetable.New(runes...) + assigned = rangetable.Assigned(unicode.Version) + + // Load category data. + runeCategory['l'] = latinSmallL + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + const cccVirama = 9 + if p.Int(ucd.CanonicalCombiningClass) == cccVirama { + setCategory(p.Rune(0), viramaModifier) + } + }) + ucd.Parse(gen.OpenUCDFile("Scripts.txt"), func(p *ucd.Parser) { + switch p.String(1) { + case "Greek": + setCategory(p.Rune(0), greek) + case "Hebrew": + setCategory(p.Rune(0), hebrew) + case "Hiragana", "Katakana", "Han": + setCategory(p.Rune(0), japanese) + } + }) + + // Set the rule categories associated with exceptions. This overrides any + // previously set categories. The original categories are manually + // reintroduced in the categoryTransitions table. + for r, e := range exceptions { + if e.cat != 0 { + runeCategory[r] = e.cat + } + } + cat := map[string]category{ + "L": joiningL, + "D": joiningD, + "T": joiningT, + + "R": joiningR, + } + ucd.Parse(gen.OpenUCDFile("extracted/DerivedJoiningType.txt"), func(p *ucd.Parser) { + switch v := p.String(1); v { + case "L", "D", "T", "R": + setCategory(p.Rune(0), cat[v]) + } + }) + + writeTables() + gen.Repackage("gen_trieval.go", "trieval.go", "precis") +} + +type exception struct { + prop property + cat category +} + +func init() { + // Programmatically add the Arabic and Indic digits to the exceptions map. + // See comment in the exceptions map below why these are marked disallowed. + for i := rune(0); i <= 9; i++ { + exceptions[0x0660+i] = exception{ + prop: disallowed, + cat: arabicIndicDigit, + } + exceptions[0x06F0+i] = exception{ + prop: disallowed, + cat: extendedArabicIndicDigit, + } + } +} + +// The Exceptions class as defined in RFC 5892 +// https://tools.ietf.org/html/rfc5892#section-2.6 +var exceptions = map[rune]exception{ + 0x00DF: {prop: pValid}, + 0x03C2: {prop: pValid}, + 0x06FD: {prop: pValid}, + 0x06FE: {prop: pValid}, + 0x0F0B: {prop: pValid}, + 0x3007: {prop: pValid}, + + // ContextO|J rules are marked as disallowed, taking a "guilty until proven + // innocent" approach. The main reason for this is that the check for + // whether a context rule should be applied can be moved to the logic for + // handing disallowed runes, taken it off the common path. The exception to + // this rule is for katakanaMiddleDot, as the rule logic is handled without + // using a rule function. + + // ContextJ (Join control) + 0x200C: {prop: disallowed, cat: zeroWidthNonJoiner}, + 0x200D: {prop: disallowed, cat: zeroWidthJoiner}, + + // ContextO + 0x00B7: {prop: disallowed, cat: middleDot}, + 0x0375: {prop: disallowed, cat: greekLowerNumeralSign}, + 0x05F3: {prop: disallowed, cat: hebrewPreceding}, // punctuation Geresh + 0x05F4: {prop: disallowed, cat: hebrewPreceding}, // punctuation Gershayim + 0x30FB: {prop: pValid, cat: katakanaMiddleDot}, + + // These are officially ContextO, but the implementation does not require + // special treatment of these, so we simply mark them as valid. + 0x0660: {prop: pValid}, + 0x0661: {prop: pValid}, + 0x0662: {prop: pValid}, + 0x0663: {prop: pValid}, + 0x0664: {prop: pValid}, + 0x0665: {prop: pValid}, + 0x0666: {prop: pValid}, + 0x0667: {prop: pValid}, + 0x0668: {prop: pValid}, + 0x0669: {prop: pValid}, + 0x06F0: {prop: pValid}, + 0x06F1: {prop: pValid}, + 0x06F2: {prop: pValid}, + 0x06F3: {prop: pValid}, + 0x06F4: {prop: pValid}, + 0x06F5: {prop: pValid}, + 0x06F6: {prop: pValid}, + 0x06F7: {prop: pValid}, + 0x06F8: {prop: pValid}, + 0x06F9: {prop: pValid}, + + 0x0640: {prop: disallowed}, + 0x07FA: {prop: disallowed}, + 0x302E: {prop: disallowed}, + 0x302F: {prop: disallowed}, + 0x3031: {prop: disallowed}, + 0x3032: {prop: disallowed}, + 0x3033: {prop: disallowed}, + 0x3034: {prop: disallowed}, + 0x3035: {prop: disallowed}, + 0x303B: {prop: disallowed}, +} + +// LetterDigits: https://tools.ietf.org/html/rfc5892#section-2.1 +// r in {Ll, Lu, Lo, Nd, Lm, Mn, Mc}. +func isLetterDigits(r rune) bool { + return unicode.In(r, + unicode.Ll, unicode.Lu, unicode.Lm, unicode.Lo, // Letters + unicode.Mn, unicode.Mc, // Modifiers + unicode.Nd, // Digits + ) +} + +func isIdDisAndFreePVal(r rune) bool { + return unicode.In(r, + // OtherLetterDigits: https://tools.ietf.org/html/rfc7564#section-9.18 + // r in in {Lt, Nl, No, Me} + unicode.Lt, unicode.Nl, unicode.No, // Other letters / numbers + unicode.Me, // Modifiers + + // Spaces: https://tools.ietf.org/html/rfc7564#section-9.14 + // r in in {Zs} + unicode.Zs, + + // Symbols: https://tools.ietf.org/html/rfc7564#section-9.15 + // r in {Sm, Sc, Sk, So} + unicode.Sm, unicode.Sc, unicode.Sk, unicode.So, + + // Punctuation: https://tools.ietf.org/html/rfc7564#section-9.16 + // r in {Pc, Pd, Ps, Pe, Pi, Pf, Po} + unicode.Pc, unicode.Pd, unicode.Ps, unicode.Pe, + unicode.Pi, unicode.Pf, unicode.Po, + ) +} + +// HasCompat: https://tools.ietf.org/html/rfc7564#section-9.17 +func hasCompat(r rune) bool { + return !norm.NFKC.IsNormalString(string(r)) +} + +// From https://tools.ietf.org/html/rfc5892: +// +// If .cp. .in. Exceptions Then Exceptions(cp); +// Else If .cp. .in. BackwardCompatible Then BackwardCompatible(cp); +// Else If .cp. .in. Unassigned Then UNASSIGNED; +// Else If .cp. .in. ASCII7 Then PVALID; +// Else If .cp. .in. JoinControl Then CONTEXTJ; +// Else If .cp. .in. OldHangulJamo Then DISALLOWED; +// Else If .cp. .in. PrecisIgnorableProperties Then DISALLOWED; +// Else If .cp. .in. Controls Then DISALLOWED; +// Else If .cp. .in. HasCompat Then ID_DIS or FREE_PVAL; +// Else If .cp. .in. LetterDigits Then PVALID; +// Else If .cp. .in. OtherLetterDigits Then ID_DIS or FREE_PVAL; +// Else If .cp. .in. Spaces Then ID_DIS or FREE_PVAL; +// Else If .cp. .in. Symbols Then ID_DIS or FREE_PVAL; +// Else If .cp. .in. Punctuation Then ID_DIS or FREE_PVAL; +// Else DISALLOWED; + +func writeTables() { + propTrie := triegen.NewTrie("derivedProperties") + w := gen.NewCodeWriter() + defer w.WriteGoFile(*outputFile, "precis") + gen.WriteUnicodeVersion(w) + + // Iterate over all the runes... + for i := rune(0); i < unicode.MaxRune; i++ { + r := rune(i) + + if !utf8.ValidRune(r) { + continue + } + + e, ok := exceptions[i] + p := e.prop + switch { + case ok: + case !unicode.In(r, assigned): + p = unassigned + case r >= 0x0021 && r <= 0x007e: // Is ASCII 7 + p = pValid + case unicode.In(r, disallowedRunes, unicode.Cc): + p = disallowed + case hasCompat(r): + p = idDisOrFreePVal + case isLetterDigits(r): + p = pValid + case isIdDisAndFreePVal(r): + p = idDisOrFreePVal + default: + p = disallowed + } + cat := runeCategory[r] + // Don't set category for runes that are disallowed. + if p == disallowed { + cat = exceptions[r].cat + } + propTrie.Insert(r, uint64(p)|uint64(cat)) + } + sz, err := propTrie.Gen(w) + if err != nil { + log.Fatal(err) + } + w.Size += sz +} diff --git a/vendor/golang.org/x/text/secure/precis/gen_trieval.go b/vendor/golang.org/x/text/secure/precis/gen_trieval.go new file mode 100644 index 0000000..308510c --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/gen_trieval.go @@ -0,0 +1,68 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// entry is the entry of a trie table +// 7..6 property (unassigned, disallowed, maybe, valid) +// 5..0 category +type entry uint8 + +const ( + propShift = 6 + propMask = 0xc0 + catMask = 0x3f +) + +func (e entry) property() property { return property(e & propMask) } +func (e entry) category() category { return category(e & catMask) } + +type property uint8 + +// The order of these constants matter. A Profile may consider runes to be +// allowed either from pValid or idDisOrFreePVal. +const ( + unassigned property = iota << propShift + disallowed + idDisOrFreePVal // disallowed for Identifier, pValid for FreeForm + pValid +) + +// compute permutations of all properties and specialCategories. +type category uint8 + +const ( + other category = iota + + // Special rune types + joiningL + joiningD + joiningT + joiningR + viramaModifier + viramaJoinT // Virama + JoiningT + latinSmallL // U+006c + greek + greekJoinT // Greek + JoiningT + hebrew + hebrewJoinT // Hebrew + JoiningT + japanese // hirigana, katakana, han + + // Special rune types associated with contextual rules defined in + // https://tools.ietf.org/html/rfc5892#appendix-A. + // ContextO + zeroWidthNonJoiner // rule 1 + zeroWidthJoiner // rule 2 + // ContextJ + middleDot // rule 3 + greekLowerNumeralSign // rule 4 + hebrewPreceding // rule 5 and 6 + katakanaMiddleDot // rule 7 + arabicIndicDigit // rule 8 + extendedArabicIndicDigit // rule 9 + + numCategories +) diff --git a/vendor/golang.org/x/text/secure/precis/nickname.go b/vendor/golang.org/x/text/secure/precis/nickname.go new file mode 100644 index 0000000..cd54b9e --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/nickname.go @@ -0,0 +1,70 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "unicode" + "unicode/utf8" + + "golang.org/x/text/transform" +) + +type nickAdditionalMapping struct { + // TODO: This transformer needs to be stateless somehow… + notStart bool + prevSpace bool +} + +func (t *nickAdditionalMapping) Reset() { + t.prevSpace = false + t.notStart = false +} + +func (t *nickAdditionalMapping) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + // RFC 7700 §2.1. Rules + // + // 2. Additional Mapping Rule: The additional mapping rule consists of + // the following sub-rules. + // + // 1. Any instances of non-ASCII space MUST be mapped to ASCII + // space (U+0020); a non-ASCII space is any Unicode code point + // having a general category of "Zs", naturally with the + // exception of U+0020. + // + // 2. Any instances of the ASCII space character at the beginning + // or end of a nickname MUST be removed (e.g., "stpeter " is + // mapped to "stpeter"). + // + // 3. Interior sequences of more than one ASCII space character + // MUST be mapped to a single ASCII space character (e.g., + // "St Peter" is mapped to "St Peter"). + + for nSrc < len(src) { + r, size := utf8.DecodeRune(src[nSrc:]) + if size == 0 { // Incomplete UTF-8 encoding + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + size = 1 + } + if unicode.Is(unicode.Zs, r) { + t.prevSpace = true + } else { + if t.prevSpace && t.notStart { + dst[nDst] = ' ' + nDst += 1 + } + if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { + nDst += size + return nDst, nSrc, transform.ErrShortDst + } + nDst += size + t.prevSpace = false + t.notStart = true + } + nSrc += size + } + return nDst, nSrc, nil +} diff --git a/vendor/golang.org/x/text/secure/precis/options.go b/vendor/golang.org/x/text/secure/precis/options.go new file mode 100644 index 0000000..488f0b1 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/options.go @@ -0,0 +1,153 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "golang.org/x/text/cases" + "golang.org/x/text/language" + "golang.org/x/text/runes" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" +) + +// An Option is used to define the behavior and rules of a Profile. +type Option func(*options) + +type options struct { + // Preparation options + foldWidth bool + + // Enforcement options + asciiLower bool + cases transform.SpanningTransformer + disallow runes.Set + norm transform.SpanningTransformer + additional []func() transform.SpanningTransformer + width transform.SpanningTransformer + disallowEmpty bool + bidiRule bool + + // Comparison options + ignorecase bool +} + +func getOpts(o ...Option) (res options) { + for _, f := range o { + f(&res) + } + // Using a SpanningTransformer, instead of norm.Form prevents an allocation + // down the road. + if res.norm == nil { + res.norm = norm.NFC + } + return +} + +var ( + // The IgnoreCase option causes the profile to perform a case insensitive + // comparison during the PRECIS comparison step. + IgnoreCase Option = ignoreCase + + // The FoldWidth option causes the profile to map non-canonical wide and + // narrow variants to their decomposition mapping. This is useful for + // profiles that are based on the identifier class which would otherwise + // disallow such characters. + FoldWidth Option = foldWidth + + // The DisallowEmpty option causes the enforcement step to return an error if + // the resulting string would be empty. + DisallowEmpty Option = disallowEmpty + + // The BidiRule option causes the Bidi Rule defined in RFC 5893 to be + // applied. + BidiRule Option = bidiRule +) + +var ( + ignoreCase = func(o *options) { + o.ignorecase = true + } + foldWidth = func(o *options) { + o.foldWidth = true + } + disallowEmpty = func(o *options) { + o.disallowEmpty = true + } + bidiRule = func(o *options) { + o.bidiRule = true + } +) + +// TODO: move this logic to package transform + +type spanWrap struct{ transform.Transformer } + +func (s spanWrap) Span(src []byte, atEOF bool) (n int, err error) { + return 0, transform.ErrEndOfSpan +} + +// TODO: allow different types? For instance: +// func() transform.Transformer +// func() transform.SpanningTransformer +// func([]byte) bool // validation only +// +// Also, would be great if we could detect if a transformer is reentrant. + +// The AdditionalMapping option defines the additional mapping rule for the +// Profile by applying Transformer's in sequence. +func AdditionalMapping(t ...func() transform.Transformer) Option { + return func(o *options) { + for _, f := range t { + sf := func() transform.SpanningTransformer { + return f().(transform.SpanningTransformer) + } + if _, ok := f().(transform.SpanningTransformer); !ok { + sf = func() transform.SpanningTransformer { + return spanWrap{f()} + } + } + o.additional = append(o.additional, sf) + } + } +} + +// The Norm option defines a Profile's normalization rule. Defaults to NFC. +func Norm(f norm.Form) Option { + return func(o *options) { + o.norm = f + } +} + +// The FoldCase option defines a Profile's case mapping rule. Options can be +// provided to determine the type of case folding used. +func FoldCase(opts ...cases.Option) Option { + return func(o *options) { + o.asciiLower = true + o.cases = cases.Fold(opts...) + } +} + +// The LowerCase option defines a Profile's case mapping rule. Options can be +// provided to determine the type of case folding used. +func LowerCase(opts ...cases.Option) Option { + return func(o *options) { + o.asciiLower = true + if len(opts) == 0 { + o.cases = cases.Lower(language.Und, cases.HandleFinalSigma(false)) + return + } + + opts = append([]cases.Option{cases.HandleFinalSigma(false)}, opts...) + o.cases = cases.Lower(language.Und, opts...) + } +} + +// The Disallow option further restricts a Profile's allowed characters beyond +// what is disallowed by the underlying string class. +func Disallow(set runes.Set) Option { + return func(o *options) { + o.disallow = set + } +} diff --git a/vendor/golang.org/x/text/secure/precis/profile.go b/vendor/golang.org/x/text/secure/precis/profile.go new file mode 100644 index 0000000..1d7898d --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/profile.go @@ -0,0 +1,388 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "bytes" + "errors" + "unicode/utf8" + + "golang.org/x/text/cases" + "golang.org/x/text/language" + "golang.org/x/text/runes" + "golang.org/x/text/secure/bidirule" + "golang.org/x/text/transform" + "golang.org/x/text/width" +) + +var ( + errDisallowedRune = errors.New("precis: disallowed rune encountered") +) + +var dpTrie = newDerivedPropertiesTrie(0) + +// A Profile represents a set of rules for normalizing and validating strings in +// the PRECIS framework. +type Profile struct { + options + class *class +} + +// NewIdentifier creates a new PRECIS profile based on the Identifier string +// class. Profiles created from this class are suitable for use where safety is +// prioritized over expressiveness like network identifiers, user accounts, chat +// rooms, and file names. +func NewIdentifier(opts ...Option) *Profile { + return &Profile{ + options: getOpts(opts...), + class: identifier, + } +} + +// NewFreeform creates a new PRECIS profile based on the Freeform string class. +// Profiles created from this class are suitable for use where expressiveness is +// prioritized over safety like passwords, and display-elements such as +// nicknames in a chat room. +func NewFreeform(opts ...Option) *Profile { + return &Profile{ + options: getOpts(opts...), + class: freeform, + } +} + +// NewTransformer creates a new transform.Transformer that performs the PRECIS +// preparation and enforcement steps on the given UTF-8 encoded bytes. +func (p *Profile) NewTransformer() *Transformer { + var ts []transform.Transformer + + // These transforms are applied in the order defined in + // https://tools.ietf.org/html/rfc7564#section-7 + + if p.options.foldWidth { + ts = append(ts, width.Fold) + } + + for _, f := range p.options.additional { + ts = append(ts, f()) + } + + if p.options.cases != nil { + ts = append(ts, p.options.cases) + } + + ts = append(ts, p.options.norm) + + if p.options.bidiRule { + ts = append(ts, bidirule.New()) + } + + ts = append(ts, &checker{p: p, allowed: p.Allowed()}) + + // TODO: Add the disallow empty rule with a dummy transformer? + + return &Transformer{transform.Chain(ts...)} +} + +var errEmptyString = errors.New("precis: transformation resulted in empty string") + +type buffers struct { + src []byte + buf [2][]byte + next int +} + +func (b *buffers) apply(t transform.SpanningTransformer) (err error) { + n, err := t.Span(b.src, true) + if err != transform.ErrEndOfSpan { + return err + } + x := b.next & 1 + if b.buf[x] == nil { + b.buf[x] = make([]byte, 0, 8+len(b.src)+len(b.src)>>2) + } + span := append(b.buf[x][:0], b.src[:n]...) + b.src, _, err = transform.Append(t, span, b.src[n:]) + b.buf[x] = b.src + b.next++ + return err +} + +// Pre-allocate transformers when possible. In some cases this avoids allocation. +var ( + foldWidthT transform.SpanningTransformer = width.Fold + lowerCaseT transform.SpanningTransformer = cases.Lower(language.Und, cases.HandleFinalSigma(false)) +) + +// TODO: make this a method on profile. + +func (b *buffers) enforce(p *Profile, src []byte, comparing bool) (str []byte, err error) { + b.src = src + + ascii := true + for _, c := range src { + if c >= utf8.RuneSelf { + ascii = false + break + } + } + // ASCII fast path. + if ascii { + for _, f := range p.options.additional { + if err = b.apply(f()); err != nil { + return nil, err + } + } + switch { + case p.options.asciiLower || (comparing && p.options.ignorecase): + for i, c := range b.src { + if 'A' <= c && c <= 'Z' { + b.src[i] = c ^ 1<<5 + } + } + case p.options.cases != nil: + b.apply(p.options.cases) + } + c := checker{p: p} + if _, err := c.span(b.src, true); err != nil { + return nil, err + } + if p.disallow != nil { + for _, c := range b.src { + if p.disallow.Contains(rune(c)) { + return nil, errDisallowedRune + } + } + } + if p.options.disallowEmpty && len(b.src) == 0 { + return nil, errEmptyString + } + return b.src, nil + } + + // These transforms are applied in the order defined in + // https://tools.ietf.org/html/rfc7564#section-7 + + // TODO: allow different width transforms options. + if p.options.foldWidth || (p.options.ignorecase && comparing) { + b.apply(foldWidthT) + } + for _, f := range p.options.additional { + if err = b.apply(f()); err != nil { + return nil, err + } + } + if p.options.cases != nil { + b.apply(p.options.cases) + } + if comparing && p.options.ignorecase { + b.apply(lowerCaseT) + } + b.apply(p.norm) + if p.options.bidiRule && !bidirule.Valid(b.src) { + return nil, bidirule.ErrInvalid + } + c := checker{p: p} + if _, err := c.span(b.src, true); err != nil { + return nil, err + } + if p.disallow != nil { + for i := 0; i < len(b.src); { + r, size := utf8.DecodeRune(b.src[i:]) + if p.disallow.Contains(r) { + return nil, errDisallowedRune + } + i += size + } + } + if p.options.disallowEmpty && len(b.src) == 0 { + return nil, errEmptyString + } + return b.src, nil +} + +// Append appends the result of applying p to src writing the result to dst. +// It returns an error if the input string is invalid. +func (p *Profile) Append(dst, src []byte) ([]byte, error) { + var buf buffers + b, err := buf.enforce(p, src, false) + if err != nil { + return nil, err + } + return append(dst, b...), nil +} + +func processBytes(p *Profile, b []byte, key bool) ([]byte, error) { + var buf buffers + b, err := buf.enforce(p, b, key) + if err != nil { + return nil, err + } + if buf.next == 0 { + c := make([]byte, len(b)) + copy(c, b) + return c, nil + } + return b, nil +} + +// Bytes returns a new byte slice with the result of applying the profile to b. +func (p *Profile) Bytes(b []byte) ([]byte, error) { + return processBytes(p, b, false) +} + +// AppendCompareKey appends the result of applying p to src (including any +// optional rules to make strings comparable or useful in a map key such as +// applying lowercasing) writing the result to dst. It returns an error if the +// input string is invalid. +func (p *Profile) AppendCompareKey(dst, src []byte) ([]byte, error) { + var buf buffers + b, err := buf.enforce(p, src, true) + if err != nil { + return nil, err + } + return append(dst, b...), nil +} + +func processString(p *Profile, s string, key bool) (string, error) { + var buf buffers + b, err := buf.enforce(p, []byte(s), key) + if err != nil { + return "", err + } + return string(b), nil +} + +// String returns a string with the result of applying the profile to s. +func (p *Profile) String(s string) (string, error) { + return processString(p, s, false) +} + +// CompareKey returns a string that can be used for comparison, hashing, or +// collation. +func (p *Profile) CompareKey(s string) (string, error) { + return processString(p, s, true) +} + +// Compare enforces both strings, and then compares them for bit-string identity +// (byte-for-byte equality). If either string cannot be enforced, the comparison +// is false. +func (p *Profile) Compare(a, b string) bool { + var buf buffers + + akey, err := buf.enforce(p, []byte(a), true) + if err != nil { + return false + } + + buf = buffers{} + bkey, err := buf.enforce(p, []byte(b), true) + if err != nil { + return false + } + + return bytes.Compare(akey, bkey) == 0 +} + +// Allowed returns a runes.Set containing every rune that is a member of the +// underlying profile's string class and not disallowed by any profile specific +// rules. +func (p *Profile) Allowed() runes.Set { + if p.options.disallow != nil { + return runes.Predicate(func(r rune) bool { + return p.class.Contains(r) && !p.options.disallow.Contains(r) + }) + } + return p.class +} + +type checker struct { + p *Profile + allowed runes.Set + + beforeBits catBitmap + termBits catBitmap + acceptBits catBitmap +} + +func (c *checker) Reset() { + c.beforeBits = 0 + c.termBits = 0 + c.acceptBits = 0 +} + +func (c *checker) span(src []byte, atEOF bool) (n int, err error) { + for n < len(src) { + e, sz := dpTrie.lookup(src[n:]) + d := categoryTransitions[category(e&catMask)] + if sz == 0 { + if !atEOF { + return n, transform.ErrShortSrc + } + return n, errDisallowedRune + } + if property(e) < c.p.class.validFrom { + if d.rule == nil { + return n, errDisallowedRune + } + doLookAhead, err := d.rule(c.beforeBits) + if err != nil { + return n, err + } + if doLookAhead { + c.beforeBits &= d.keep + c.beforeBits |= d.set + // We may still have a lookahead rule which we will require to + // complete (by checking termBits == 0) before setting the new + // bits. + if c.termBits != 0 && (!c.checkLookahead() || c.termBits == 0) { + return n, err + } + c.termBits = d.term + c.acceptBits = d.accept + n += sz + continue + } + } + c.beforeBits &= d.keep + c.beforeBits |= d.set + if c.termBits != 0 && !c.checkLookahead() { + return n, errContext + } + n += sz + } + if m := c.beforeBits >> finalShift; c.beforeBits&m != m || c.termBits != 0 { + err = errContext + } + return n, err +} + +func (c *checker) checkLookahead() bool { + switch { + case c.beforeBits&c.termBits != 0: + c.termBits = 0 + c.acceptBits = 0 + case c.beforeBits&c.acceptBits != 0: + default: + return false + } + return true +} + +// TODO: we may get rid of this transform if transform.Chain understands +// something like a Spanner interface. +func (c checker) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + short := false + if len(dst) < len(src) { + src = src[:len(dst)] + atEOF = false + short = true + } + nSrc, err = c.span(src, atEOF) + nDst = copy(dst, src[:nSrc]) + if short && (err == transform.ErrShortSrc || err == nil) { + err = transform.ErrShortDst + } + return nDst, nSrc, err +} diff --git a/vendor/golang.org/x/text/secure/precis/profile_test.go b/vendor/golang.org/x/text/secure/precis/profile_test.go new file mode 100644 index 0000000..253b2a0 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/profile_test.go @@ -0,0 +1,142 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "fmt" + "math/rand" + "testing" + "unicode" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/transform" +) + +// copyOrbit is a Transformer for the sole purpose of testing the apply method, +// testing that apply will always call Span for the prefix of the input that +// remains identical and then call Transform for the remainder. It will produce +// inconsistent output for other usage patterns. +// Provided that copyOrbit is used this way, the first t bytes of the output +// will be identical to the input and the remaining output will be the result +// of calling caseOrbit on the remaining input bytes. +type copyOrbit int + +func (t copyOrbit) Reset() {} +func (t copyOrbit) Span(src []byte, atEOF bool) (n int, err error) { + if int(t) == len(src) { + return int(t), nil + } + return int(t), transform.ErrEndOfSpan +} + +// Transform implements transform.Transformer specifically for testing the apply method. +// See documentation of copyOrbit before using this method. +func (t copyOrbit) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := copy(dst, src) + for i, c := range dst[:n] { + dst[i] = orbitCase(c) + } + return n, n, nil +} + +func orbitCase(c byte) byte { + if unicode.IsLower(rune(c)) { + return byte(unicode.ToUpper(rune(c))) + } else { + return byte(unicode.ToLower(rune(c))) + } +} + +func TestBuffers(t *testing.T) { + want := "Those who cannot remember the past are condemned to compute it." + + spans := rand.Perm(len(want) + 1) + + // Compute the result of applying copyOrbit(span) transforms in reverse. + input := []byte(want) + for i := len(spans) - 1; i >= 0; i-- { + for j := spans[i]; j < len(input); j++ { + input[j] = orbitCase(input[j]) + } + } + + // Apply the copyOrbit(span) transforms. + b := buffers{src: input} + for _, n := range spans { + b.apply(copyOrbit(n)) + if n%11 == 0 { + b.apply(transform.Nop) + } + } + if got := string(b.src); got != want { + t.Errorf("got %q; want %q", got, want) + } +} + +type compareTestCase struct { + a string + b string + result bool +} + +var compareTestCases = []struct { + name string + p *Profile + cases []compareTestCase +}{ + {"Nickname", Nickname, []compareTestCase{ + {"a", "b", false}, + {" Swan of Avon ", "swan of avon", true}, + {"Foo", "foo", true}, + {"foo", "foo", true}, + {"Foo Bar", "foo bar", true}, + {"foo bar", "foo bar", true}, + {"\u03A3", "\u03C3", true}, + {"\u03A3", "\u03C2", false}, + {"\u03C3", "\u03C2", false}, + {"Richard \u2163", "richard iv", true}, + {"Å", "å", true}, + {"ff", "ff", true}, // because of NFKC + {"ß", "sS", false}, + }}, +} + +func doCompareTests(t *testing.T, fn func(t *testing.T, p *Profile, tc compareTestCase)) { + for _, g := range compareTestCases { + for i, tc := range g.cases { + name := fmt.Sprintf("%s:%d:%+q", g.name, i, tc.a) + testtext.Run(t, name, func(t *testing.T) { + fn(t, g.p, tc) + }) + } + } +} + +func TestCompare(t *testing.T) { + doCompareTests(t, func(t *testing.T, p *Profile, tc compareTestCase) { + if result := p.Compare(tc.a, tc.b); result != tc.result { + t.Errorf("got %v; want %v", result, tc.result) + } + }) +} + +func TestCompareString(t *testing.T) { + doCompareTests(t, func(t *testing.T, p *Profile, tc compareTestCase) { + a, err := p.CompareKey(tc.a) + if err != nil { + t.Errorf("Unexpected error when creating key: %v", err) + return + } + b, err := p.CompareKey(tc.b) + if err != nil { + t.Errorf("Unexpected error when creating key: %v", err) + return + } + + if result := (a == b); result != tc.result { + t.Errorf("got %v; want %v", result, tc.result) + } + }) +} diff --git a/vendor/golang.org/x/text/secure/precis/profiles.go b/vendor/golang.org/x/text/secure/precis/profiles.go new file mode 100644 index 0000000..8b46d50 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/profiles.go @@ -0,0 +1,69 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "unicode" + + "golang.org/x/text/runes" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" +) + +var ( + Nickname *Profile = nickname // Implements the Nickname profile specified in RFC 7700. + UsernameCaseMapped *Profile = usernameCaseMap // Implements the UsernameCaseMapped profile specified in RFC 7613. + UsernameCasePreserved *Profile = usernameNoCaseMap // Implements the UsernameCasePreserved profile specified in RFC 7613. + OpaqueString *Profile = opaquestring // Implements the OpaqueString profile defined in RFC 7613 for passwords and other secure labels. +) + +var ( + nickname = &Profile{ + options: getOpts( + AdditionalMapping(func() transform.Transformer { + return &nickAdditionalMapping{} + }), + IgnoreCase, + Norm(norm.NFKC), + DisallowEmpty, + ), + class: freeform, + } + usernameCaseMap = &Profile{ + options: getOpts( + FoldWidth, + LowerCase(), + Norm(norm.NFC), + BidiRule, + ), + class: identifier, + } + usernameNoCaseMap = &Profile{ + options: getOpts( + FoldWidth, + Norm(norm.NFC), + BidiRule, + ), + class: identifier, + } + opaquestring = &Profile{ + options: getOpts( + AdditionalMapping(func() transform.Transformer { + return mapSpaces + }), + Norm(norm.NFC), + DisallowEmpty, + ), + class: freeform, + } +) + +// mapSpaces is a shared value of a runes.Map transformer. +var mapSpaces transform.Transformer = runes.Map(func(r rune) rune { + if unicode.Is(unicode.Zs, r) { + return ' ' + } + return r +}) diff --git a/vendor/golang.org/x/text/secure/precis/tables.go b/vendor/golang.org/x/text/secure/precis/tables.go new file mode 100644 index 0000000..2f550c1 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/tables.go @@ -0,0 +1,3788 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package precis + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *derivedPropertiesTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return derivedPropertiesValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := derivedPropertiesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := derivedPropertiesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = derivedPropertiesIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := derivedPropertiesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = derivedPropertiesIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = derivedPropertiesIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *derivedPropertiesTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return derivedPropertiesValues[c0] + } + i := derivedPropertiesIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *derivedPropertiesTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return derivedPropertiesValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := derivedPropertiesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := derivedPropertiesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = derivedPropertiesIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := derivedPropertiesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = derivedPropertiesIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = derivedPropertiesIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *derivedPropertiesTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return derivedPropertiesValues[c0] + } + i := derivedPropertiesIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// derivedPropertiesTrie. Total size: 25344 bytes (24.75 KiB). Checksum: c5b977d76d42d8a. +type derivedPropertiesTrie struct{} + +func newDerivedPropertiesTrie(i int) *derivedPropertiesTrie { + return &derivedPropertiesTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *derivedPropertiesTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(derivedPropertiesValues[n<<6+uint32(b)]) + } +} + +// derivedPropertiesValues: 324 blocks, 20736 entries, 20736 bytes +// The third block is the zero block. +var derivedPropertiesValues = [20736]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x0040, 0x01: 0x0040, 0x02: 0x0040, 0x03: 0x0040, 0x04: 0x0040, 0x05: 0x0040, + 0x06: 0x0040, 0x07: 0x0040, 0x08: 0x0040, 0x09: 0x0040, 0x0a: 0x0040, 0x0b: 0x0040, + 0x0c: 0x0040, 0x0d: 0x0040, 0x0e: 0x0040, 0x0f: 0x0040, 0x10: 0x0040, 0x11: 0x0040, + 0x12: 0x0040, 0x13: 0x0040, 0x14: 0x0040, 0x15: 0x0040, 0x16: 0x0040, 0x17: 0x0040, + 0x18: 0x0040, 0x19: 0x0040, 0x1a: 0x0040, 0x1b: 0x0040, 0x1c: 0x0040, 0x1d: 0x0040, + 0x1e: 0x0040, 0x1f: 0x0040, 0x20: 0x0080, 0x21: 0x00c0, 0x22: 0x00c0, 0x23: 0x00c0, + 0x24: 0x00c0, 0x25: 0x00c0, 0x26: 0x00c0, 0x27: 0x00c0, 0x28: 0x00c0, 0x29: 0x00c0, + 0x2a: 0x00c0, 0x2b: 0x00c0, 0x2c: 0x00c0, 0x2d: 0x00c0, 0x2e: 0x00c0, 0x2f: 0x00c0, + 0x30: 0x00c0, 0x31: 0x00c0, 0x32: 0x00c0, 0x33: 0x00c0, 0x34: 0x00c0, 0x35: 0x00c0, + 0x36: 0x00c0, 0x37: 0x00c0, 0x38: 0x00c0, 0x39: 0x00c0, 0x3a: 0x00c0, 0x3b: 0x00c0, + 0x3c: 0x00c0, 0x3d: 0x00c0, 0x3e: 0x00c0, 0x3f: 0x00c0, + // Block 0x1, offset 0x40 + 0x40: 0x00c0, 0x41: 0x00c0, 0x42: 0x00c0, 0x43: 0x00c0, 0x44: 0x00c0, 0x45: 0x00c0, + 0x46: 0x00c0, 0x47: 0x00c0, 0x48: 0x00c0, 0x49: 0x00c0, 0x4a: 0x00c0, 0x4b: 0x00c0, + 0x4c: 0x00c0, 0x4d: 0x00c0, 0x4e: 0x00c0, 0x4f: 0x00c0, 0x50: 0x00c0, 0x51: 0x00c0, + 0x52: 0x00c0, 0x53: 0x00c0, 0x54: 0x00c0, 0x55: 0x00c0, 0x56: 0x00c0, 0x57: 0x00c0, + 0x58: 0x00c0, 0x59: 0x00c0, 0x5a: 0x00c0, 0x5b: 0x00c0, 0x5c: 0x00c0, 0x5d: 0x00c0, + 0x5e: 0x00c0, 0x5f: 0x00c0, 0x60: 0x00c0, 0x61: 0x00c0, 0x62: 0x00c0, 0x63: 0x00c0, + 0x64: 0x00c0, 0x65: 0x00c0, 0x66: 0x00c0, 0x67: 0x00c0, 0x68: 0x00c0, 0x69: 0x00c0, + 0x6a: 0x00c0, 0x6b: 0x00c0, 0x6c: 0x00c7, 0x6d: 0x00c0, 0x6e: 0x00c0, 0x6f: 0x00c0, + 0x70: 0x00c0, 0x71: 0x00c0, 0x72: 0x00c0, 0x73: 0x00c0, 0x74: 0x00c0, 0x75: 0x00c0, + 0x76: 0x00c0, 0x77: 0x00c0, 0x78: 0x00c0, 0x79: 0x00c0, 0x7a: 0x00c0, 0x7b: 0x00c0, + 0x7c: 0x00c0, 0x7d: 0x00c0, 0x7e: 0x00c0, 0x7f: 0x0040, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x0080, 0xe1: 0x0080, 0xe2: 0x0080, 0xe3: 0x0080, + 0xe4: 0x0080, 0xe5: 0x0080, 0xe6: 0x0080, 0xe7: 0x0080, 0xe8: 0x0080, 0xe9: 0x0080, + 0xea: 0x0080, 0xeb: 0x0080, 0xec: 0x0080, 0xed: 0x0040, 0xee: 0x0080, 0xef: 0x0080, + 0xf0: 0x0080, 0xf1: 0x0080, 0xf2: 0x0080, 0xf3: 0x0080, 0xf4: 0x0080, 0xf5: 0x0080, + 0xf6: 0x0080, 0xf7: 0x004f, 0xf8: 0x0080, 0xf9: 0x0080, 0xfa: 0x0080, 0xfb: 0x0080, + 0xfc: 0x0080, 0xfd: 0x0080, 0xfe: 0x0080, 0xff: 0x0080, + // Block 0x4, offset 0x100 + 0x100: 0x00c0, 0x101: 0x00c0, 0x102: 0x00c0, 0x103: 0x00c0, 0x104: 0x00c0, 0x105: 0x00c0, + 0x106: 0x00c0, 0x107: 0x00c0, 0x108: 0x00c0, 0x109: 0x00c0, 0x10a: 0x00c0, 0x10b: 0x00c0, + 0x10c: 0x00c0, 0x10d: 0x00c0, 0x10e: 0x00c0, 0x10f: 0x00c0, 0x110: 0x00c0, 0x111: 0x00c0, + 0x112: 0x00c0, 0x113: 0x00c0, 0x114: 0x00c0, 0x115: 0x00c0, 0x116: 0x00c0, 0x117: 0x0080, + 0x118: 0x00c0, 0x119: 0x00c0, 0x11a: 0x00c0, 0x11b: 0x00c0, 0x11c: 0x00c0, 0x11d: 0x00c0, + 0x11e: 0x00c0, 0x11f: 0x00c0, 0x120: 0x00c0, 0x121: 0x00c0, 0x122: 0x00c0, 0x123: 0x00c0, + 0x124: 0x00c0, 0x125: 0x00c0, 0x126: 0x00c0, 0x127: 0x00c0, 0x128: 0x00c0, 0x129: 0x00c0, + 0x12a: 0x00c0, 0x12b: 0x00c0, 0x12c: 0x00c0, 0x12d: 0x00c0, 0x12e: 0x00c0, 0x12f: 0x00c0, + 0x130: 0x00c0, 0x131: 0x00c0, 0x132: 0x00c0, 0x133: 0x00c0, 0x134: 0x00c0, 0x135: 0x00c0, + 0x136: 0x00c0, 0x137: 0x0080, 0x138: 0x00c0, 0x139: 0x00c0, 0x13a: 0x00c0, 0x13b: 0x00c0, + 0x13c: 0x00c0, 0x13d: 0x00c0, 0x13e: 0x00c0, 0x13f: 0x00c0, + // Block 0x5, offset 0x140 + 0x140: 0x00c0, 0x141: 0x00c0, 0x142: 0x00c0, 0x143: 0x00c0, 0x144: 0x00c0, 0x145: 0x00c0, + 0x146: 0x00c0, 0x147: 0x00c0, 0x148: 0x00c0, 0x149: 0x00c0, 0x14a: 0x00c0, 0x14b: 0x00c0, + 0x14c: 0x00c0, 0x14d: 0x00c0, 0x14e: 0x00c0, 0x14f: 0x00c0, 0x150: 0x00c0, 0x151: 0x00c0, + 0x152: 0x00c0, 0x153: 0x00c0, 0x154: 0x00c0, 0x155: 0x00c0, 0x156: 0x00c0, 0x157: 0x00c0, + 0x158: 0x00c0, 0x159: 0x00c0, 0x15a: 0x00c0, 0x15b: 0x00c0, 0x15c: 0x00c0, 0x15d: 0x00c0, + 0x15e: 0x00c0, 0x15f: 0x00c0, 0x160: 0x00c0, 0x161: 0x00c0, 0x162: 0x00c0, 0x163: 0x00c0, + 0x164: 0x00c0, 0x165: 0x00c0, 0x166: 0x00c0, 0x167: 0x00c0, 0x168: 0x00c0, 0x169: 0x00c0, + 0x16a: 0x00c0, 0x16b: 0x00c0, 0x16c: 0x00c0, 0x16d: 0x00c0, 0x16e: 0x00c0, 0x16f: 0x00c0, + 0x170: 0x00c0, 0x171: 0x00c0, 0x172: 0x0080, 0x173: 0x0080, 0x174: 0x00c0, 0x175: 0x00c0, + 0x176: 0x00c0, 0x177: 0x00c0, 0x178: 0x00c0, 0x179: 0x00c0, 0x17a: 0x00c0, 0x17b: 0x00c0, + 0x17c: 0x00c0, 0x17d: 0x00c0, 0x17e: 0x00c0, 0x17f: 0x0080, + // Block 0x6, offset 0x180 + 0x180: 0x0080, 0x181: 0x00c0, 0x182: 0x00c0, 0x183: 0x00c0, 0x184: 0x00c0, 0x185: 0x00c0, + 0x186: 0x00c0, 0x187: 0x00c0, 0x188: 0x00c0, 0x189: 0x0080, 0x18a: 0x00c0, 0x18b: 0x00c0, + 0x18c: 0x00c0, 0x18d: 0x00c0, 0x18e: 0x00c0, 0x18f: 0x00c0, 0x190: 0x00c0, 0x191: 0x00c0, + 0x192: 0x00c0, 0x193: 0x00c0, 0x194: 0x00c0, 0x195: 0x00c0, 0x196: 0x00c0, 0x197: 0x00c0, + 0x198: 0x00c0, 0x199: 0x00c0, 0x19a: 0x00c0, 0x19b: 0x00c0, 0x19c: 0x00c0, 0x19d: 0x00c0, + 0x19e: 0x00c0, 0x19f: 0x00c0, 0x1a0: 0x00c0, 0x1a1: 0x00c0, 0x1a2: 0x00c0, 0x1a3: 0x00c0, + 0x1a4: 0x00c0, 0x1a5: 0x00c0, 0x1a6: 0x00c0, 0x1a7: 0x00c0, 0x1a8: 0x00c0, 0x1a9: 0x00c0, + 0x1aa: 0x00c0, 0x1ab: 0x00c0, 0x1ac: 0x00c0, 0x1ad: 0x00c0, 0x1ae: 0x00c0, 0x1af: 0x00c0, + 0x1b0: 0x00c0, 0x1b1: 0x00c0, 0x1b2: 0x00c0, 0x1b3: 0x00c0, 0x1b4: 0x00c0, 0x1b5: 0x00c0, + 0x1b6: 0x00c0, 0x1b7: 0x00c0, 0x1b8: 0x00c0, 0x1b9: 0x00c0, 0x1ba: 0x00c0, 0x1bb: 0x00c0, + 0x1bc: 0x00c0, 0x1bd: 0x00c0, 0x1be: 0x00c0, 0x1bf: 0x0080, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x00c0, 0x1c1: 0x00c0, 0x1c2: 0x00c0, 0x1c3: 0x00c0, 0x1c4: 0x00c0, 0x1c5: 0x00c0, + 0x1c6: 0x00c0, 0x1c7: 0x00c0, 0x1c8: 0x00c0, 0x1c9: 0x00c0, 0x1ca: 0x00c0, 0x1cb: 0x00c0, + 0x1cc: 0x00c0, 0x1cd: 0x00c0, 0x1ce: 0x00c0, 0x1cf: 0x00c0, 0x1d0: 0x00c0, 0x1d1: 0x00c0, + 0x1d2: 0x00c0, 0x1d3: 0x00c0, 0x1d4: 0x00c0, 0x1d5: 0x00c0, 0x1d6: 0x00c0, 0x1d7: 0x00c0, + 0x1d8: 0x00c0, 0x1d9: 0x00c0, 0x1da: 0x00c0, 0x1db: 0x00c0, 0x1dc: 0x00c0, 0x1dd: 0x00c0, + 0x1de: 0x00c0, 0x1df: 0x00c0, 0x1e0: 0x00c0, 0x1e1: 0x00c0, 0x1e2: 0x00c0, 0x1e3: 0x00c0, + 0x1e4: 0x00c0, 0x1e5: 0x00c0, 0x1e6: 0x00c0, 0x1e7: 0x00c0, 0x1e8: 0x00c0, 0x1e9: 0x00c0, + 0x1ea: 0x00c0, 0x1eb: 0x00c0, 0x1ec: 0x00c0, 0x1ed: 0x00c0, 0x1ee: 0x00c0, 0x1ef: 0x00c0, + 0x1f0: 0x00c0, 0x1f1: 0x00c0, 0x1f2: 0x00c0, 0x1f3: 0x00c0, 0x1f4: 0x00c0, 0x1f5: 0x00c0, + 0x1f6: 0x00c0, 0x1f7: 0x00c0, 0x1f8: 0x00c0, 0x1f9: 0x00c0, 0x1fa: 0x00c0, 0x1fb: 0x00c0, + 0x1fc: 0x00c0, 0x1fd: 0x00c0, 0x1fe: 0x00c0, 0x1ff: 0x00c0, + // Block 0x8, offset 0x200 + 0x200: 0x00c0, 0x201: 0x00c0, 0x202: 0x00c0, 0x203: 0x00c0, 0x204: 0x0080, 0x205: 0x0080, + 0x206: 0x0080, 0x207: 0x0080, 0x208: 0x0080, 0x209: 0x0080, 0x20a: 0x0080, 0x20b: 0x0080, + 0x20c: 0x0080, 0x20d: 0x00c0, 0x20e: 0x00c0, 0x20f: 0x00c0, 0x210: 0x00c0, 0x211: 0x00c0, + 0x212: 0x00c0, 0x213: 0x00c0, 0x214: 0x00c0, 0x215: 0x00c0, 0x216: 0x00c0, 0x217: 0x00c0, + 0x218: 0x00c0, 0x219: 0x00c0, 0x21a: 0x00c0, 0x21b: 0x00c0, 0x21c: 0x00c0, 0x21d: 0x00c0, + 0x21e: 0x00c0, 0x21f: 0x00c0, 0x220: 0x00c0, 0x221: 0x00c0, 0x222: 0x00c0, 0x223: 0x00c0, + 0x224: 0x00c0, 0x225: 0x00c0, 0x226: 0x00c0, 0x227: 0x00c0, 0x228: 0x00c0, 0x229: 0x00c0, + 0x22a: 0x00c0, 0x22b: 0x00c0, 0x22c: 0x00c0, 0x22d: 0x00c0, 0x22e: 0x00c0, 0x22f: 0x00c0, + 0x230: 0x00c0, 0x231: 0x0080, 0x232: 0x0080, 0x233: 0x0080, 0x234: 0x00c0, 0x235: 0x00c0, + 0x236: 0x00c0, 0x237: 0x00c0, 0x238: 0x00c0, 0x239: 0x00c0, 0x23a: 0x00c0, 0x23b: 0x00c0, + 0x23c: 0x00c0, 0x23d: 0x00c0, 0x23e: 0x00c0, 0x23f: 0x00c0, + // Block 0x9, offset 0x240 + 0x240: 0x00c0, 0x241: 0x00c0, 0x242: 0x00c0, 0x243: 0x00c0, 0x244: 0x00c0, 0x245: 0x00c0, + 0x246: 0x00c0, 0x247: 0x00c0, 0x248: 0x00c0, 0x249: 0x00c0, 0x24a: 0x00c0, 0x24b: 0x00c0, + 0x24c: 0x00c0, 0x24d: 0x00c0, 0x24e: 0x00c0, 0x24f: 0x00c0, 0x250: 0x00c0, 0x251: 0x00c0, + 0x252: 0x00c0, 0x253: 0x00c0, 0x254: 0x00c0, 0x255: 0x00c0, 0x256: 0x00c0, 0x257: 0x00c0, + 0x258: 0x00c0, 0x259: 0x00c0, 0x25a: 0x00c0, 0x25b: 0x00c0, 0x25c: 0x00c0, 0x25d: 0x00c0, + 0x25e: 0x00c0, 0x25f: 0x00c0, 0x260: 0x00c0, 0x261: 0x00c0, 0x262: 0x00c0, 0x263: 0x00c0, + 0x264: 0x00c0, 0x265: 0x00c0, 0x266: 0x00c0, 0x267: 0x00c0, 0x268: 0x00c0, 0x269: 0x00c0, + 0x26a: 0x00c0, 0x26b: 0x00c0, 0x26c: 0x00c0, 0x26d: 0x00c0, 0x26e: 0x00c0, 0x26f: 0x00c0, + 0x270: 0x0080, 0x271: 0x0080, 0x272: 0x0080, 0x273: 0x0080, 0x274: 0x0080, 0x275: 0x0080, + 0x276: 0x0080, 0x277: 0x0080, 0x278: 0x0080, 0x279: 0x00c0, 0x27a: 0x00c0, 0x27b: 0x00c0, + 0x27c: 0x00c0, 0x27d: 0x00c0, 0x27e: 0x00c0, 0x27f: 0x00c0, + // Block 0xa, offset 0x280 + 0x280: 0x00c0, 0x281: 0x00c0, 0x282: 0x0080, 0x283: 0x0080, 0x284: 0x0080, 0x285: 0x0080, + 0x286: 0x00c0, 0x287: 0x00c0, 0x288: 0x00c0, 0x289: 0x00c0, 0x28a: 0x00c0, 0x28b: 0x00c0, + 0x28c: 0x00c0, 0x28d: 0x00c0, 0x28e: 0x00c0, 0x28f: 0x00c0, 0x290: 0x00c0, 0x291: 0x00c0, + 0x292: 0x0080, 0x293: 0x0080, 0x294: 0x0080, 0x295: 0x0080, 0x296: 0x0080, 0x297: 0x0080, + 0x298: 0x0080, 0x299: 0x0080, 0x29a: 0x0080, 0x29b: 0x0080, 0x29c: 0x0080, 0x29d: 0x0080, + 0x29e: 0x0080, 0x29f: 0x0080, 0x2a0: 0x0080, 0x2a1: 0x0080, 0x2a2: 0x0080, 0x2a3: 0x0080, + 0x2a4: 0x0080, 0x2a5: 0x0080, 0x2a6: 0x0080, 0x2a7: 0x0080, 0x2a8: 0x0080, 0x2a9: 0x0080, + 0x2aa: 0x0080, 0x2ab: 0x0080, 0x2ac: 0x00c0, 0x2ad: 0x0080, 0x2ae: 0x00c0, 0x2af: 0x0080, + 0x2b0: 0x0080, 0x2b1: 0x0080, 0x2b2: 0x0080, 0x2b3: 0x0080, 0x2b4: 0x0080, 0x2b5: 0x0080, + 0x2b6: 0x0080, 0x2b7: 0x0080, 0x2b8: 0x0080, 0x2b9: 0x0080, 0x2ba: 0x0080, 0x2bb: 0x0080, + 0x2bc: 0x0080, 0x2bd: 0x0080, 0x2be: 0x0080, 0x2bf: 0x0080, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x00c3, 0x2c1: 0x00c3, 0x2c2: 0x00c3, 0x2c3: 0x00c3, 0x2c4: 0x00c3, 0x2c5: 0x00c3, + 0x2c6: 0x00c3, 0x2c7: 0x00c3, 0x2c8: 0x00c3, 0x2c9: 0x00c3, 0x2ca: 0x00c3, 0x2cb: 0x00c3, + 0x2cc: 0x00c3, 0x2cd: 0x00c3, 0x2ce: 0x00c3, 0x2cf: 0x00c3, 0x2d0: 0x00c3, 0x2d1: 0x00c3, + 0x2d2: 0x00c3, 0x2d3: 0x00c3, 0x2d4: 0x00c3, 0x2d5: 0x00c3, 0x2d6: 0x00c3, 0x2d7: 0x00c3, + 0x2d8: 0x00c3, 0x2d9: 0x00c3, 0x2da: 0x00c3, 0x2db: 0x00c3, 0x2dc: 0x00c3, 0x2dd: 0x00c3, + 0x2de: 0x00c3, 0x2df: 0x00c3, 0x2e0: 0x00c3, 0x2e1: 0x00c3, 0x2e2: 0x00c3, 0x2e3: 0x00c3, + 0x2e4: 0x00c3, 0x2e5: 0x00c3, 0x2e6: 0x00c3, 0x2e7: 0x00c3, 0x2e8: 0x00c3, 0x2e9: 0x00c3, + 0x2ea: 0x00c3, 0x2eb: 0x00c3, 0x2ec: 0x00c3, 0x2ed: 0x00c3, 0x2ee: 0x00c3, 0x2ef: 0x00c3, + 0x2f0: 0x00c3, 0x2f1: 0x00c3, 0x2f2: 0x00c3, 0x2f3: 0x00c3, 0x2f4: 0x00c3, 0x2f5: 0x00c3, + 0x2f6: 0x00c3, 0x2f7: 0x00c3, 0x2f8: 0x00c3, 0x2f9: 0x00c3, 0x2fa: 0x00c3, 0x2fb: 0x00c3, + 0x2fc: 0x00c3, 0x2fd: 0x00c3, 0x2fe: 0x00c3, 0x2ff: 0x00c3, + // Block 0xc, offset 0x300 + 0x300: 0x0083, 0x301: 0x0083, 0x302: 0x00c3, 0x303: 0x0083, 0x304: 0x0083, 0x305: 0x00c3, + 0x306: 0x00c3, 0x307: 0x00c3, 0x308: 0x00c3, 0x309: 0x00c3, 0x30a: 0x00c3, 0x30b: 0x00c3, + 0x30c: 0x00c3, 0x30d: 0x00c3, 0x30e: 0x00c3, 0x30f: 0x0040, 0x310: 0x00c3, 0x311: 0x00c3, + 0x312: 0x00c3, 0x313: 0x00c3, 0x314: 0x00c3, 0x315: 0x00c3, 0x316: 0x00c3, 0x317: 0x00c3, + 0x318: 0x00c3, 0x319: 0x00c3, 0x31a: 0x00c3, 0x31b: 0x00c3, 0x31c: 0x00c3, 0x31d: 0x00c3, + 0x31e: 0x00c3, 0x31f: 0x00c3, 0x320: 0x00c3, 0x321: 0x00c3, 0x322: 0x00c3, 0x323: 0x00c3, + 0x324: 0x00c3, 0x325: 0x00c3, 0x326: 0x00c3, 0x327: 0x00c3, 0x328: 0x00c3, 0x329: 0x00c3, + 0x32a: 0x00c3, 0x32b: 0x00c3, 0x32c: 0x00c3, 0x32d: 0x00c3, 0x32e: 0x00c3, 0x32f: 0x00c3, + 0x330: 0x00c8, 0x331: 0x00c8, 0x332: 0x00c8, 0x333: 0x00c8, 0x334: 0x0080, 0x335: 0x0050, + 0x336: 0x00c8, 0x337: 0x00c8, 0x33a: 0x0088, 0x33b: 0x00c8, + 0x33c: 0x00c8, 0x33d: 0x00c8, 0x33e: 0x0080, 0x33f: 0x00c8, + // Block 0xd, offset 0x340 + 0x344: 0x0088, 0x345: 0x0080, + 0x346: 0x00c8, 0x347: 0x0080, 0x348: 0x00c8, 0x349: 0x00c8, 0x34a: 0x00c8, + 0x34c: 0x00c8, 0x34e: 0x00c8, 0x34f: 0x00c8, 0x350: 0x00c8, 0x351: 0x00c8, + 0x352: 0x00c8, 0x353: 0x00c8, 0x354: 0x00c8, 0x355: 0x00c8, 0x356: 0x00c8, 0x357: 0x00c8, + 0x358: 0x00c8, 0x359: 0x00c8, 0x35a: 0x00c8, 0x35b: 0x00c8, 0x35c: 0x00c8, 0x35d: 0x00c8, + 0x35e: 0x00c8, 0x35f: 0x00c8, 0x360: 0x00c8, 0x361: 0x00c8, 0x363: 0x00c8, + 0x364: 0x00c8, 0x365: 0x00c8, 0x366: 0x00c8, 0x367: 0x00c8, 0x368: 0x00c8, 0x369: 0x00c8, + 0x36a: 0x00c8, 0x36b: 0x00c8, 0x36c: 0x00c8, 0x36d: 0x00c8, 0x36e: 0x00c8, 0x36f: 0x00c8, + 0x370: 0x00c8, 0x371: 0x00c8, 0x372: 0x00c8, 0x373: 0x00c8, 0x374: 0x00c8, 0x375: 0x00c8, + 0x376: 0x00c8, 0x377: 0x00c8, 0x378: 0x00c8, 0x379: 0x00c8, 0x37a: 0x00c8, 0x37b: 0x00c8, + 0x37c: 0x00c8, 0x37d: 0x00c8, 0x37e: 0x00c8, 0x37f: 0x00c8, + // Block 0xe, offset 0x380 + 0x380: 0x00c8, 0x381: 0x00c8, 0x382: 0x00c8, 0x383: 0x00c8, 0x384: 0x00c8, 0x385: 0x00c8, + 0x386: 0x00c8, 0x387: 0x00c8, 0x388: 0x00c8, 0x389: 0x00c8, 0x38a: 0x00c8, 0x38b: 0x00c8, + 0x38c: 0x00c8, 0x38d: 0x00c8, 0x38e: 0x00c8, 0x38f: 0x00c8, 0x390: 0x0088, 0x391: 0x0088, + 0x392: 0x0088, 0x393: 0x0088, 0x394: 0x0088, 0x395: 0x0088, 0x396: 0x0088, 0x397: 0x00c8, + 0x398: 0x00c8, 0x399: 0x00c8, 0x39a: 0x00c8, 0x39b: 0x00c8, 0x39c: 0x00c8, 0x39d: 0x00c8, + 0x39e: 0x00c8, 0x39f: 0x00c8, 0x3a0: 0x00c8, 0x3a1: 0x00c8, 0x3a2: 0x00c0, 0x3a3: 0x00c0, + 0x3a4: 0x00c0, 0x3a5: 0x00c0, 0x3a6: 0x00c0, 0x3a7: 0x00c0, 0x3a8: 0x00c0, 0x3a9: 0x00c0, + 0x3aa: 0x00c0, 0x3ab: 0x00c0, 0x3ac: 0x00c0, 0x3ad: 0x00c0, 0x3ae: 0x00c0, 0x3af: 0x00c0, + 0x3b0: 0x0088, 0x3b1: 0x0088, 0x3b2: 0x0088, 0x3b3: 0x00c8, 0x3b4: 0x0088, 0x3b5: 0x0088, + 0x3b6: 0x0088, 0x3b7: 0x00c8, 0x3b8: 0x00c8, 0x3b9: 0x0088, 0x3ba: 0x00c8, 0x3bb: 0x00c8, + 0x3bc: 0x00c8, 0x3bd: 0x00c8, 0x3be: 0x00c8, 0x3bf: 0x00c8, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x00c0, 0x3c1: 0x00c0, 0x3c2: 0x0080, 0x3c3: 0x00c3, 0x3c4: 0x00c3, 0x3c5: 0x00c3, + 0x3c6: 0x00c3, 0x3c7: 0x00c3, 0x3c8: 0x0083, 0x3c9: 0x0083, 0x3ca: 0x00c0, 0x3cb: 0x00c0, + 0x3cc: 0x00c0, 0x3cd: 0x00c0, 0x3ce: 0x00c0, 0x3cf: 0x00c0, 0x3d0: 0x00c0, 0x3d1: 0x00c0, + 0x3d2: 0x00c0, 0x3d3: 0x00c0, 0x3d4: 0x00c0, 0x3d5: 0x00c0, 0x3d6: 0x00c0, 0x3d7: 0x00c0, + 0x3d8: 0x00c0, 0x3d9: 0x00c0, 0x3da: 0x00c0, 0x3db: 0x00c0, 0x3dc: 0x00c0, 0x3dd: 0x00c0, + 0x3de: 0x00c0, 0x3df: 0x00c0, 0x3e0: 0x00c0, 0x3e1: 0x00c0, 0x3e2: 0x00c0, 0x3e3: 0x00c0, + 0x3e4: 0x00c0, 0x3e5: 0x00c0, 0x3e6: 0x00c0, 0x3e7: 0x00c0, 0x3e8: 0x00c0, 0x3e9: 0x00c0, + 0x3ea: 0x00c0, 0x3eb: 0x00c0, 0x3ec: 0x00c0, 0x3ed: 0x00c0, 0x3ee: 0x00c0, 0x3ef: 0x00c0, + 0x3f0: 0x00c0, 0x3f1: 0x00c0, 0x3f2: 0x00c0, 0x3f3: 0x00c0, 0x3f4: 0x00c0, 0x3f5: 0x00c0, + 0x3f6: 0x00c0, 0x3f7: 0x00c0, 0x3f8: 0x00c0, 0x3f9: 0x00c0, 0x3fa: 0x00c0, 0x3fb: 0x00c0, + 0x3fc: 0x00c0, 0x3fd: 0x00c0, 0x3fe: 0x00c0, 0x3ff: 0x00c0, + // Block 0x10, offset 0x400 + 0x400: 0x00c0, 0x401: 0x00c0, 0x402: 0x00c0, 0x403: 0x00c0, 0x404: 0x00c0, 0x405: 0x00c0, + 0x406: 0x00c0, 0x407: 0x00c0, 0x408: 0x00c0, 0x409: 0x00c0, 0x40a: 0x00c0, 0x40b: 0x00c0, + 0x40c: 0x00c0, 0x40d: 0x00c0, 0x40e: 0x00c0, 0x40f: 0x00c0, 0x410: 0x00c0, 0x411: 0x00c0, + 0x412: 0x00c0, 0x413: 0x00c0, 0x414: 0x00c0, 0x415: 0x00c0, 0x416: 0x00c0, 0x417: 0x00c0, + 0x418: 0x00c0, 0x419: 0x00c0, 0x41a: 0x00c0, 0x41b: 0x00c0, 0x41c: 0x00c0, 0x41d: 0x00c0, + 0x41e: 0x00c0, 0x41f: 0x00c0, 0x420: 0x00c0, 0x421: 0x00c0, 0x422: 0x00c0, 0x423: 0x00c0, + 0x424: 0x00c0, 0x425: 0x00c0, 0x426: 0x00c0, 0x427: 0x00c0, 0x428: 0x00c0, 0x429: 0x00c0, + 0x42a: 0x00c0, 0x42b: 0x00c0, 0x42c: 0x00c0, 0x42d: 0x00c0, 0x42e: 0x00c0, 0x42f: 0x00c0, + 0x431: 0x00c0, 0x432: 0x00c0, 0x433: 0x00c0, 0x434: 0x00c0, 0x435: 0x00c0, + 0x436: 0x00c0, 0x437: 0x00c0, 0x438: 0x00c0, 0x439: 0x00c0, 0x43a: 0x00c0, 0x43b: 0x00c0, + 0x43c: 0x00c0, 0x43d: 0x00c0, 0x43e: 0x00c0, 0x43f: 0x00c0, + // Block 0x11, offset 0x440 + 0x440: 0x00c0, 0x441: 0x00c0, 0x442: 0x00c0, 0x443: 0x00c0, 0x444: 0x00c0, 0x445: 0x00c0, + 0x446: 0x00c0, 0x447: 0x00c0, 0x448: 0x00c0, 0x449: 0x00c0, 0x44a: 0x00c0, 0x44b: 0x00c0, + 0x44c: 0x00c0, 0x44d: 0x00c0, 0x44e: 0x00c0, 0x44f: 0x00c0, 0x450: 0x00c0, 0x451: 0x00c0, + 0x452: 0x00c0, 0x453: 0x00c0, 0x454: 0x00c0, 0x455: 0x00c0, 0x456: 0x00c0, + 0x459: 0x00c0, 0x45a: 0x0080, 0x45b: 0x0080, 0x45c: 0x0080, 0x45d: 0x0080, + 0x45e: 0x0080, 0x45f: 0x0080, 0x461: 0x00c0, 0x462: 0x00c0, 0x463: 0x00c0, + 0x464: 0x00c0, 0x465: 0x00c0, 0x466: 0x00c0, 0x467: 0x00c0, 0x468: 0x00c0, 0x469: 0x00c0, + 0x46a: 0x00c0, 0x46b: 0x00c0, 0x46c: 0x00c0, 0x46d: 0x00c0, 0x46e: 0x00c0, 0x46f: 0x00c0, + 0x470: 0x00c0, 0x471: 0x00c0, 0x472: 0x00c0, 0x473: 0x00c0, 0x474: 0x00c0, 0x475: 0x00c0, + 0x476: 0x00c0, 0x477: 0x00c0, 0x478: 0x00c0, 0x479: 0x00c0, 0x47a: 0x00c0, 0x47b: 0x00c0, + 0x47c: 0x00c0, 0x47d: 0x00c0, 0x47e: 0x00c0, 0x47f: 0x00c0, + // Block 0x12, offset 0x480 + 0x480: 0x00c0, 0x481: 0x00c0, 0x482: 0x00c0, 0x483: 0x00c0, 0x484: 0x00c0, 0x485: 0x00c0, + 0x486: 0x00c0, 0x487: 0x0080, 0x489: 0x0080, 0x48a: 0x0080, + 0x48d: 0x0080, 0x48e: 0x0080, 0x48f: 0x0080, 0x491: 0x00cb, + 0x492: 0x00cb, 0x493: 0x00cb, 0x494: 0x00cb, 0x495: 0x00cb, 0x496: 0x00cb, 0x497: 0x00cb, + 0x498: 0x00cb, 0x499: 0x00cb, 0x49a: 0x00cb, 0x49b: 0x00cb, 0x49c: 0x00cb, 0x49d: 0x00cb, + 0x49e: 0x00cb, 0x49f: 0x00cb, 0x4a0: 0x00cb, 0x4a1: 0x00cb, 0x4a2: 0x00cb, 0x4a3: 0x00cb, + 0x4a4: 0x00cb, 0x4a5: 0x00cb, 0x4a6: 0x00cb, 0x4a7: 0x00cb, 0x4a8: 0x00cb, 0x4a9: 0x00cb, + 0x4aa: 0x00cb, 0x4ab: 0x00cb, 0x4ac: 0x00cb, 0x4ad: 0x00cb, 0x4ae: 0x00cb, 0x4af: 0x00cb, + 0x4b0: 0x00cb, 0x4b1: 0x00cb, 0x4b2: 0x00cb, 0x4b3: 0x00cb, 0x4b4: 0x00cb, 0x4b5: 0x00cb, + 0x4b6: 0x00cb, 0x4b7: 0x00cb, 0x4b8: 0x00cb, 0x4b9: 0x00cb, 0x4ba: 0x00cb, 0x4bb: 0x00cb, + 0x4bc: 0x00cb, 0x4bd: 0x00cb, 0x4be: 0x008a, 0x4bf: 0x00cb, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x008a, 0x4c1: 0x00cb, 0x4c2: 0x00cb, 0x4c3: 0x008a, 0x4c4: 0x00cb, 0x4c5: 0x00cb, + 0x4c6: 0x008a, 0x4c7: 0x00cb, + 0x4d0: 0x00ca, 0x4d1: 0x00ca, + 0x4d2: 0x00ca, 0x4d3: 0x00ca, 0x4d4: 0x00ca, 0x4d5: 0x00ca, 0x4d6: 0x00ca, 0x4d7: 0x00ca, + 0x4d8: 0x00ca, 0x4d9: 0x00ca, 0x4da: 0x00ca, 0x4db: 0x00ca, 0x4dc: 0x00ca, 0x4dd: 0x00ca, + 0x4de: 0x00ca, 0x4df: 0x00ca, 0x4e0: 0x00ca, 0x4e1: 0x00ca, 0x4e2: 0x00ca, 0x4e3: 0x00ca, + 0x4e4: 0x00ca, 0x4e5: 0x00ca, 0x4e6: 0x00ca, 0x4e7: 0x00ca, 0x4e8: 0x00ca, 0x4e9: 0x00ca, + 0x4ea: 0x00ca, + 0x4f0: 0x00ca, 0x4f1: 0x00ca, 0x4f2: 0x00ca, 0x4f3: 0x0051, 0x4f4: 0x0051, + // Block 0x14, offset 0x500 + 0x500: 0x0040, 0x501: 0x0040, 0x502: 0x0040, 0x503: 0x0040, 0x504: 0x0040, 0x505: 0x0040, + 0x506: 0x0080, 0x507: 0x0080, 0x508: 0x0080, 0x509: 0x0080, 0x50a: 0x0080, 0x50b: 0x0080, + 0x50c: 0x0080, 0x50d: 0x0080, 0x50e: 0x0080, 0x50f: 0x0080, 0x510: 0x00c3, 0x511: 0x00c3, + 0x512: 0x00c3, 0x513: 0x00c3, 0x514: 0x00c3, 0x515: 0x00c3, 0x516: 0x00c3, 0x517: 0x00c3, + 0x518: 0x00c3, 0x519: 0x00c3, 0x51a: 0x00c3, 0x51b: 0x0080, 0x51c: 0x0040, + 0x51e: 0x0080, 0x51f: 0x0080, 0x520: 0x00c2, 0x521: 0x00c0, 0x522: 0x00c4, 0x523: 0x00c4, + 0x524: 0x00c4, 0x525: 0x00c4, 0x526: 0x00c2, 0x527: 0x00c4, 0x528: 0x00c2, 0x529: 0x00c4, + 0x52a: 0x00c2, 0x52b: 0x00c2, 0x52c: 0x00c2, 0x52d: 0x00c2, 0x52e: 0x00c2, 0x52f: 0x00c4, + 0x530: 0x00c4, 0x531: 0x00c4, 0x532: 0x00c4, 0x533: 0x00c2, 0x534: 0x00c2, 0x535: 0x00c2, + 0x536: 0x00c2, 0x537: 0x00c2, 0x538: 0x00c2, 0x539: 0x00c2, 0x53a: 0x00c2, 0x53b: 0x00c2, + 0x53c: 0x00c2, 0x53d: 0x00c2, 0x53e: 0x00c2, 0x53f: 0x00c2, + // Block 0x15, offset 0x540 + 0x540: 0x0040, 0x541: 0x00c2, 0x542: 0x00c2, 0x543: 0x00c2, 0x544: 0x00c2, 0x545: 0x00c2, + 0x546: 0x00c2, 0x547: 0x00c2, 0x548: 0x00c4, 0x549: 0x00c2, 0x54a: 0x00c2, 0x54b: 0x00c3, + 0x54c: 0x00c3, 0x54d: 0x00c3, 0x54e: 0x00c3, 0x54f: 0x00c3, 0x550: 0x00c3, 0x551: 0x00c3, + 0x552: 0x00c3, 0x553: 0x00c3, 0x554: 0x00c3, 0x555: 0x00c3, 0x556: 0x00c3, 0x557: 0x00c3, + 0x558: 0x00c3, 0x559: 0x00c3, 0x55a: 0x00c3, 0x55b: 0x00c3, 0x55c: 0x00c3, 0x55d: 0x00c3, + 0x55e: 0x00c3, 0x55f: 0x00c3, 0x560: 0x0053, 0x561: 0x0053, 0x562: 0x0053, 0x563: 0x0053, + 0x564: 0x0053, 0x565: 0x0053, 0x566: 0x0053, 0x567: 0x0053, 0x568: 0x0053, 0x569: 0x0053, + 0x56a: 0x0080, 0x56b: 0x0080, 0x56c: 0x0080, 0x56d: 0x0080, 0x56e: 0x00c2, 0x56f: 0x00c2, + 0x570: 0x00c3, 0x571: 0x00c4, 0x572: 0x00c4, 0x573: 0x00c4, 0x574: 0x00c0, 0x575: 0x0084, + 0x576: 0x0084, 0x577: 0x0084, 0x578: 0x0082, 0x579: 0x00c2, 0x57a: 0x00c2, 0x57b: 0x00c2, + 0x57c: 0x00c2, 0x57d: 0x00c2, 0x57e: 0x00c2, 0x57f: 0x00c2, + // Block 0x16, offset 0x580 + 0x580: 0x00c2, 0x581: 0x00c2, 0x582: 0x00c2, 0x583: 0x00c2, 0x584: 0x00c2, 0x585: 0x00c2, + 0x586: 0x00c2, 0x587: 0x00c2, 0x588: 0x00c4, 0x589: 0x00c4, 0x58a: 0x00c4, 0x58b: 0x00c4, + 0x58c: 0x00c4, 0x58d: 0x00c4, 0x58e: 0x00c4, 0x58f: 0x00c4, 0x590: 0x00c4, 0x591: 0x00c4, + 0x592: 0x00c4, 0x593: 0x00c4, 0x594: 0x00c4, 0x595: 0x00c4, 0x596: 0x00c4, 0x597: 0x00c4, + 0x598: 0x00c4, 0x599: 0x00c4, 0x59a: 0x00c2, 0x59b: 0x00c2, 0x59c: 0x00c2, 0x59d: 0x00c2, + 0x59e: 0x00c2, 0x59f: 0x00c2, 0x5a0: 0x00c2, 0x5a1: 0x00c2, 0x5a2: 0x00c2, 0x5a3: 0x00c2, + 0x5a4: 0x00c2, 0x5a5: 0x00c2, 0x5a6: 0x00c2, 0x5a7: 0x00c2, 0x5a8: 0x00c2, 0x5a9: 0x00c2, + 0x5aa: 0x00c2, 0x5ab: 0x00c2, 0x5ac: 0x00c2, 0x5ad: 0x00c2, 0x5ae: 0x00c2, 0x5af: 0x00c2, + 0x5b0: 0x00c2, 0x5b1: 0x00c2, 0x5b2: 0x00c2, 0x5b3: 0x00c2, 0x5b4: 0x00c2, 0x5b5: 0x00c2, + 0x5b6: 0x00c2, 0x5b7: 0x00c2, 0x5b8: 0x00c2, 0x5b9: 0x00c2, 0x5ba: 0x00c2, 0x5bb: 0x00c2, + 0x5bc: 0x00c2, 0x5bd: 0x00c2, 0x5be: 0x00c2, 0x5bf: 0x00c2, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x00c4, 0x5c1: 0x00c2, 0x5c2: 0x00c2, 0x5c3: 0x00c4, 0x5c4: 0x00c4, 0x5c5: 0x00c4, + 0x5c6: 0x00c4, 0x5c7: 0x00c4, 0x5c8: 0x00c4, 0x5c9: 0x00c4, 0x5ca: 0x00c4, 0x5cb: 0x00c4, + 0x5cc: 0x00c2, 0x5cd: 0x00c4, 0x5ce: 0x00c2, 0x5cf: 0x00c4, 0x5d0: 0x00c2, 0x5d1: 0x00c2, + 0x5d2: 0x00c4, 0x5d3: 0x00c4, 0x5d4: 0x0080, 0x5d5: 0x00c4, 0x5d6: 0x00c3, 0x5d7: 0x00c3, + 0x5d8: 0x00c3, 0x5d9: 0x00c3, 0x5da: 0x00c3, 0x5db: 0x00c3, 0x5dc: 0x00c3, 0x5dd: 0x0040, + 0x5de: 0x0080, 0x5df: 0x00c3, 0x5e0: 0x00c3, 0x5e1: 0x00c3, 0x5e2: 0x00c3, 0x5e3: 0x00c3, + 0x5e4: 0x00c3, 0x5e5: 0x00c0, 0x5e6: 0x00c0, 0x5e7: 0x00c3, 0x5e8: 0x00c3, 0x5e9: 0x0080, + 0x5ea: 0x00c3, 0x5eb: 0x00c3, 0x5ec: 0x00c3, 0x5ed: 0x00c3, 0x5ee: 0x00c4, 0x5ef: 0x00c4, + 0x5f0: 0x0054, 0x5f1: 0x0054, 0x5f2: 0x0054, 0x5f3: 0x0054, 0x5f4: 0x0054, 0x5f5: 0x0054, + 0x5f6: 0x0054, 0x5f7: 0x0054, 0x5f8: 0x0054, 0x5f9: 0x0054, 0x5fa: 0x00c2, 0x5fb: 0x00c2, + 0x5fc: 0x00c2, 0x5fd: 0x00c0, 0x5fe: 0x00c0, 0x5ff: 0x00c2, + // Block 0x18, offset 0x600 + 0x600: 0x0080, 0x601: 0x0080, 0x602: 0x0080, 0x603: 0x0080, 0x604: 0x0080, 0x605: 0x0080, + 0x606: 0x0080, 0x607: 0x0080, 0x608: 0x0080, 0x609: 0x0080, 0x60a: 0x0080, 0x60b: 0x0080, + 0x60c: 0x0080, 0x60d: 0x0080, 0x60f: 0x0040, 0x610: 0x00c4, 0x611: 0x00c3, + 0x612: 0x00c2, 0x613: 0x00c2, 0x614: 0x00c2, 0x615: 0x00c4, 0x616: 0x00c4, 0x617: 0x00c4, + 0x618: 0x00c4, 0x619: 0x00c4, 0x61a: 0x00c2, 0x61b: 0x00c2, 0x61c: 0x00c2, 0x61d: 0x00c2, + 0x61e: 0x00c4, 0x61f: 0x00c2, 0x620: 0x00c2, 0x621: 0x00c2, 0x622: 0x00c2, 0x623: 0x00c2, + 0x624: 0x00c2, 0x625: 0x00c2, 0x626: 0x00c2, 0x627: 0x00c2, 0x628: 0x00c4, 0x629: 0x00c2, + 0x62a: 0x00c4, 0x62b: 0x00c2, 0x62c: 0x00c4, 0x62d: 0x00c2, 0x62e: 0x00c2, 0x62f: 0x00c4, + 0x630: 0x00c3, 0x631: 0x00c3, 0x632: 0x00c3, 0x633: 0x00c3, 0x634: 0x00c3, 0x635: 0x00c3, + 0x636: 0x00c3, 0x637: 0x00c3, 0x638: 0x00c3, 0x639: 0x00c3, 0x63a: 0x00c3, 0x63b: 0x00c3, + 0x63c: 0x00c3, 0x63d: 0x00c3, 0x63e: 0x00c3, 0x63f: 0x00c3, + // Block 0x19, offset 0x640 + 0x640: 0x00c3, 0x641: 0x00c3, 0x642: 0x00c3, 0x643: 0x00c3, 0x644: 0x00c3, 0x645: 0x00c3, + 0x646: 0x00c3, 0x647: 0x00c3, 0x648: 0x00c3, 0x649: 0x00c3, 0x64a: 0x00c3, + 0x64d: 0x00c4, 0x64e: 0x00c2, 0x64f: 0x00c2, 0x650: 0x00c2, 0x651: 0x00c2, + 0x652: 0x00c2, 0x653: 0x00c2, 0x654: 0x00c2, 0x655: 0x00c2, 0x656: 0x00c2, 0x657: 0x00c2, + 0x658: 0x00c2, 0x659: 0x00c4, 0x65a: 0x00c4, 0x65b: 0x00c4, 0x65c: 0x00c2, 0x65d: 0x00c2, + 0x65e: 0x00c2, 0x65f: 0x00c2, 0x660: 0x00c2, 0x661: 0x00c2, 0x662: 0x00c2, 0x663: 0x00c2, + 0x664: 0x00c2, 0x665: 0x00c2, 0x666: 0x00c2, 0x667: 0x00c2, 0x668: 0x00c2, 0x669: 0x00c2, + 0x66a: 0x00c2, 0x66b: 0x00c4, 0x66c: 0x00c4, 0x66d: 0x00c2, 0x66e: 0x00c2, 0x66f: 0x00c2, + 0x670: 0x00c2, 0x671: 0x00c4, 0x672: 0x00c2, 0x673: 0x00c4, 0x674: 0x00c4, 0x675: 0x00c2, + 0x676: 0x00c2, 0x677: 0x00c2, 0x678: 0x00c4, 0x679: 0x00c4, 0x67a: 0x00c2, 0x67b: 0x00c2, + 0x67c: 0x00c2, 0x67d: 0x00c2, 0x67e: 0x00c2, 0x67f: 0x00c2, + // Block 0x1a, offset 0x680 + 0x680: 0x00c0, 0x681: 0x00c0, 0x682: 0x00c0, 0x683: 0x00c0, 0x684: 0x00c0, 0x685: 0x00c0, + 0x686: 0x00c0, 0x687: 0x00c0, 0x688: 0x00c0, 0x689: 0x00c0, 0x68a: 0x00c0, 0x68b: 0x00c0, + 0x68c: 0x00c0, 0x68d: 0x00c0, 0x68e: 0x00c0, 0x68f: 0x00c0, 0x690: 0x00c0, 0x691: 0x00c0, + 0x692: 0x00c0, 0x693: 0x00c0, 0x694: 0x00c0, 0x695: 0x00c0, 0x696: 0x00c0, 0x697: 0x00c0, + 0x698: 0x00c0, 0x699: 0x00c0, 0x69a: 0x00c0, 0x69b: 0x00c0, 0x69c: 0x00c0, 0x69d: 0x00c0, + 0x69e: 0x00c0, 0x69f: 0x00c0, 0x6a0: 0x00c0, 0x6a1: 0x00c0, 0x6a2: 0x00c0, 0x6a3: 0x00c0, + 0x6a4: 0x00c0, 0x6a5: 0x00c0, 0x6a6: 0x00c3, 0x6a7: 0x00c3, 0x6a8: 0x00c3, 0x6a9: 0x00c3, + 0x6aa: 0x00c3, 0x6ab: 0x00c3, 0x6ac: 0x00c3, 0x6ad: 0x00c3, 0x6ae: 0x00c3, 0x6af: 0x00c3, + 0x6b0: 0x00c3, 0x6b1: 0x00c0, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x00c0, 0x6c1: 0x00c0, 0x6c2: 0x00c0, 0x6c3: 0x00c0, 0x6c4: 0x00c0, 0x6c5: 0x00c0, + 0x6c6: 0x00c0, 0x6c7: 0x00c0, 0x6c8: 0x00c0, 0x6c9: 0x00c0, 0x6ca: 0x00c2, 0x6cb: 0x00c2, + 0x6cc: 0x00c2, 0x6cd: 0x00c2, 0x6ce: 0x00c2, 0x6cf: 0x00c2, 0x6d0: 0x00c2, 0x6d1: 0x00c2, + 0x6d2: 0x00c2, 0x6d3: 0x00c2, 0x6d4: 0x00c2, 0x6d5: 0x00c2, 0x6d6: 0x00c2, 0x6d7: 0x00c2, + 0x6d8: 0x00c2, 0x6d9: 0x00c2, 0x6da: 0x00c2, 0x6db: 0x00c2, 0x6dc: 0x00c2, 0x6dd: 0x00c2, + 0x6de: 0x00c2, 0x6df: 0x00c2, 0x6e0: 0x00c2, 0x6e1: 0x00c2, 0x6e2: 0x00c2, 0x6e3: 0x00c2, + 0x6e4: 0x00c2, 0x6e5: 0x00c2, 0x6e6: 0x00c2, 0x6e7: 0x00c2, 0x6e8: 0x00c2, 0x6e9: 0x00c2, + 0x6ea: 0x00c2, 0x6eb: 0x00c3, 0x6ec: 0x00c3, 0x6ed: 0x00c3, 0x6ee: 0x00c3, 0x6ef: 0x00c3, + 0x6f0: 0x00c3, 0x6f1: 0x00c3, 0x6f2: 0x00c3, 0x6f3: 0x00c3, 0x6f4: 0x00c0, 0x6f5: 0x00c0, + 0x6f6: 0x0080, 0x6f7: 0x0080, 0x6f8: 0x0080, 0x6f9: 0x0080, 0x6fa: 0x0040, + // Block 0x1c, offset 0x700 + 0x700: 0x00c0, 0x701: 0x00c0, 0x702: 0x00c0, 0x703: 0x00c0, 0x704: 0x00c0, 0x705: 0x00c0, + 0x706: 0x00c0, 0x707: 0x00c0, 0x708: 0x00c0, 0x709: 0x00c0, 0x70a: 0x00c0, 0x70b: 0x00c0, + 0x70c: 0x00c0, 0x70d: 0x00c0, 0x70e: 0x00c0, 0x70f: 0x00c0, 0x710: 0x00c0, 0x711: 0x00c0, + 0x712: 0x00c0, 0x713: 0x00c0, 0x714: 0x00c0, 0x715: 0x00c0, 0x716: 0x00c3, 0x717: 0x00c3, + 0x718: 0x00c3, 0x719: 0x00c3, 0x71a: 0x00c0, 0x71b: 0x00c3, 0x71c: 0x00c3, 0x71d: 0x00c3, + 0x71e: 0x00c3, 0x71f: 0x00c3, 0x720: 0x00c3, 0x721: 0x00c3, 0x722: 0x00c3, 0x723: 0x00c3, + 0x724: 0x00c0, 0x725: 0x00c3, 0x726: 0x00c3, 0x727: 0x00c3, 0x728: 0x00c0, 0x729: 0x00c3, + 0x72a: 0x00c3, 0x72b: 0x00c3, 0x72c: 0x00c3, 0x72d: 0x00c3, + 0x730: 0x0080, 0x731: 0x0080, 0x732: 0x0080, 0x733: 0x0080, 0x734: 0x0080, 0x735: 0x0080, + 0x736: 0x0080, 0x737: 0x0080, 0x738: 0x0080, 0x739: 0x0080, 0x73a: 0x0080, 0x73b: 0x0080, + 0x73c: 0x0080, 0x73d: 0x0080, 0x73e: 0x0080, + // Block 0x1d, offset 0x740 + 0x740: 0x00c4, 0x741: 0x00c2, 0x742: 0x00c2, 0x743: 0x00c2, 0x744: 0x00c2, 0x745: 0x00c2, + 0x746: 0x00c4, 0x747: 0x00c4, 0x748: 0x00c2, 0x749: 0x00c4, 0x74a: 0x00c2, 0x74b: 0x00c2, + 0x74c: 0x00c2, 0x74d: 0x00c2, 0x74e: 0x00c2, 0x74f: 0x00c2, 0x750: 0x00c2, 0x751: 0x00c2, + 0x752: 0x00c2, 0x753: 0x00c2, 0x754: 0x00c4, 0x755: 0x00c2, 0x756: 0x00c0, 0x757: 0x00c0, + 0x758: 0x00c0, 0x759: 0x00c3, 0x75a: 0x00c3, 0x75b: 0x00c3, + 0x75e: 0x0080, + // Block 0x1e, offset 0x780 + 0x7a0: 0x00c2, 0x7a1: 0x00c2, 0x7a2: 0x00c2, 0x7a3: 0x00c2, + 0x7a4: 0x00c2, 0x7a5: 0x00c2, 0x7a6: 0x00c2, 0x7a7: 0x00c2, 0x7a8: 0x00c2, 0x7a9: 0x00c2, + 0x7aa: 0x00c4, 0x7ab: 0x00c4, 0x7ac: 0x00c4, 0x7ad: 0x00c0, 0x7ae: 0x00c4, 0x7af: 0x00c2, + 0x7b0: 0x00c2, 0x7b1: 0x00c4, 0x7b2: 0x00c4, 0x7b3: 0x00c2, 0x7b4: 0x00c2, + 0x7b6: 0x00c2, 0x7b7: 0x00c2, 0x7b8: 0x00c2, 0x7b9: 0x00c4, 0x7ba: 0x00c2, 0x7bb: 0x00c2, + 0x7bc: 0x00c2, 0x7bd: 0x00c2, + // Block 0x1f, offset 0x7c0 + 0x7d4: 0x00c3, 0x7d5: 0x00c3, 0x7d6: 0x00c3, 0x7d7: 0x00c3, + 0x7d8: 0x00c3, 0x7d9: 0x00c3, 0x7da: 0x00c3, 0x7db: 0x00c3, 0x7dc: 0x00c3, 0x7dd: 0x00c3, + 0x7de: 0x00c3, 0x7df: 0x00c3, 0x7e0: 0x00c3, 0x7e1: 0x00c3, 0x7e2: 0x0040, 0x7e3: 0x00c3, + 0x7e4: 0x00c3, 0x7e5: 0x00c3, 0x7e6: 0x00c3, 0x7e7: 0x00c3, 0x7e8: 0x00c3, 0x7e9: 0x00c3, + 0x7ea: 0x00c3, 0x7eb: 0x00c3, 0x7ec: 0x00c3, 0x7ed: 0x00c3, 0x7ee: 0x00c3, 0x7ef: 0x00c3, + 0x7f0: 0x00c3, 0x7f1: 0x00c3, 0x7f2: 0x00c3, 0x7f3: 0x00c3, 0x7f4: 0x00c3, 0x7f5: 0x00c3, + 0x7f6: 0x00c3, 0x7f7: 0x00c3, 0x7f8: 0x00c3, 0x7f9: 0x00c3, 0x7fa: 0x00c3, 0x7fb: 0x00c3, + 0x7fc: 0x00c3, 0x7fd: 0x00c3, 0x7fe: 0x00c3, 0x7ff: 0x00c3, + // Block 0x20, offset 0x800 + 0x800: 0x00c3, 0x801: 0x00c3, 0x802: 0x00c3, 0x803: 0x00c0, 0x804: 0x00c0, 0x805: 0x00c0, + 0x806: 0x00c0, 0x807: 0x00c0, 0x808: 0x00c0, 0x809: 0x00c0, 0x80a: 0x00c0, 0x80b: 0x00c0, + 0x80c: 0x00c0, 0x80d: 0x00c0, 0x80e: 0x00c0, 0x80f: 0x00c0, 0x810: 0x00c0, 0x811: 0x00c0, + 0x812: 0x00c0, 0x813: 0x00c0, 0x814: 0x00c0, 0x815: 0x00c0, 0x816: 0x00c0, 0x817: 0x00c0, + 0x818: 0x00c0, 0x819: 0x00c0, 0x81a: 0x00c0, 0x81b: 0x00c0, 0x81c: 0x00c0, 0x81d: 0x00c0, + 0x81e: 0x00c0, 0x81f: 0x00c0, 0x820: 0x00c0, 0x821: 0x00c0, 0x822: 0x00c0, 0x823: 0x00c0, + 0x824: 0x00c0, 0x825: 0x00c0, 0x826: 0x00c0, 0x827: 0x00c0, 0x828: 0x00c0, 0x829: 0x00c0, + 0x82a: 0x00c0, 0x82b: 0x00c0, 0x82c: 0x00c0, 0x82d: 0x00c0, 0x82e: 0x00c0, 0x82f: 0x00c0, + 0x830: 0x00c0, 0x831: 0x00c0, 0x832: 0x00c0, 0x833: 0x00c0, 0x834: 0x00c0, 0x835: 0x00c0, + 0x836: 0x00c0, 0x837: 0x00c0, 0x838: 0x00c0, 0x839: 0x00c0, 0x83a: 0x00c3, 0x83b: 0x00c0, + 0x83c: 0x00c3, 0x83d: 0x00c0, 0x83e: 0x00c0, 0x83f: 0x00c0, + // Block 0x21, offset 0x840 + 0x840: 0x00c0, 0x841: 0x00c3, 0x842: 0x00c3, 0x843: 0x00c3, 0x844: 0x00c3, 0x845: 0x00c3, + 0x846: 0x00c3, 0x847: 0x00c3, 0x848: 0x00c3, 0x849: 0x00c0, 0x84a: 0x00c0, 0x84b: 0x00c0, + 0x84c: 0x00c0, 0x84d: 0x00c6, 0x84e: 0x00c0, 0x84f: 0x00c0, 0x850: 0x00c0, 0x851: 0x00c3, + 0x852: 0x00c3, 0x853: 0x00c3, 0x854: 0x00c3, 0x855: 0x00c3, 0x856: 0x00c3, 0x857: 0x00c3, + 0x858: 0x0080, 0x859: 0x0080, 0x85a: 0x0080, 0x85b: 0x0080, 0x85c: 0x0080, 0x85d: 0x0080, + 0x85e: 0x0080, 0x85f: 0x0080, 0x860: 0x00c0, 0x861: 0x00c0, 0x862: 0x00c3, 0x863: 0x00c3, + 0x864: 0x0080, 0x865: 0x0080, 0x866: 0x00c0, 0x867: 0x00c0, 0x868: 0x00c0, 0x869: 0x00c0, + 0x86a: 0x00c0, 0x86b: 0x00c0, 0x86c: 0x00c0, 0x86d: 0x00c0, 0x86e: 0x00c0, 0x86f: 0x00c0, + 0x870: 0x0080, 0x871: 0x00c0, 0x872: 0x00c0, 0x873: 0x00c0, 0x874: 0x00c0, 0x875: 0x00c0, + 0x876: 0x00c0, 0x877: 0x00c0, 0x878: 0x00c0, 0x879: 0x00c0, 0x87a: 0x00c0, 0x87b: 0x00c0, + 0x87c: 0x00c0, 0x87d: 0x00c0, 0x87e: 0x00c0, 0x87f: 0x00c0, + // Block 0x22, offset 0x880 + 0x880: 0x00c0, 0x881: 0x00c3, 0x882: 0x00c0, 0x883: 0x00c0, 0x885: 0x00c0, + 0x886: 0x00c0, 0x887: 0x00c0, 0x888: 0x00c0, 0x889: 0x00c0, 0x88a: 0x00c0, 0x88b: 0x00c0, + 0x88c: 0x00c0, 0x88f: 0x00c0, 0x890: 0x00c0, + 0x893: 0x00c0, 0x894: 0x00c0, 0x895: 0x00c0, 0x896: 0x00c0, 0x897: 0x00c0, + 0x898: 0x00c0, 0x899: 0x00c0, 0x89a: 0x00c0, 0x89b: 0x00c0, 0x89c: 0x00c0, 0x89d: 0x00c0, + 0x89e: 0x00c0, 0x89f: 0x00c0, 0x8a0: 0x00c0, 0x8a1: 0x00c0, 0x8a2: 0x00c0, 0x8a3: 0x00c0, + 0x8a4: 0x00c0, 0x8a5: 0x00c0, 0x8a6: 0x00c0, 0x8a7: 0x00c0, 0x8a8: 0x00c0, + 0x8aa: 0x00c0, 0x8ab: 0x00c0, 0x8ac: 0x00c0, 0x8ad: 0x00c0, 0x8ae: 0x00c0, 0x8af: 0x00c0, + 0x8b0: 0x00c0, 0x8b2: 0x00c0, + 0x8b6: 0x00c0, 0x8b7: 0x00c0, 0x8b8: 0x00c0, 0x8b9: 0x00c0, + 0x8bc: 0x00c3, 0x8bd: 0x00c0, 0x8be: 0x00c0, 0x8bf: 0x00c0, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x00c0, 0x8c1: 0x00c3, 0x8c2: 0x00c3, 0x8c3: 0x00c3, 0x8c4: 0x00c3, + 0x8c7: 0x00c0, 0x8c8: 0x00c0, 0x8cb: 0x00c0, + 0x8cc: 0x00c0, 0x8cd: 0x00c6, 0x8ce: 0x00c0, + 0x8d7: 0x00c0, + 0x8dc: 0x0080, 0x8dd: 0x0080, + 0x8df: 0x0080, 0x8e0: 0x00c0, 0x8e1: 0x00c0, 0x8e2: 0x00c3, 0x8e3: 0x00c3, + 0x8e6: 0x00c0, 0x8e7: 0x00c0, 0x8e8: 0x00c0, 0x8e9: 0x00c0, + 0x8ea: 0x00c0, 0x8eb: 0x00c0, 0x8ec: 0x00c0, 0x8ed: 0x00c0, 0x8ee: 0x00c0, 0x8ef: 0x00c0, + 0x8f0: 0x00c0, 0x8f1: 0x00c0, 0x8f2: 0x0080, 0x8f3: 0x0080, 0x8f4: 0x0080, 0x8f5: 0x0080, + 0x8f6: 0x0080, 0x8f7: 0x0080, 0x8f8: 0x0080, 0x8f9: 0x0080, 0x8fa: 0x0080, 0x8fb: 0x0080, + // Block 0x24, offset 0x900 + 0x901: 0x00c3, 0x902: 0x00c3, 0x903: 0x00c0, 0x905: 0x00c0, + 0x906: 0x00c0, 0x907: 0x00c0, 0x908: 0x00c0, 0x909: 0x00c0, 0x90a: 0x00c0, + 0x90f: 0x00c0, 0x910: 0x00c0, + 0x913: 0x00c0, 0x914: 0x00c0, 0x915: 0x00c0, 0x916: 0x00c0, 0x917: 0x00c0, + 0x918: 0x00c0, 0x919: 0x00c0, 0x91a: 0x00c0, 0x91b: 0x00c0, 0x91c: 0x00c0, 0x91d: 0x00c0, + 0x91e: 0x00c0, 0x91f: 0x00c0, 0x920: 0x00c0, 0x921: 0x00c0, 0x922: 0x00c0, 0x923: 0x00c0, + 0x924: 0x00c0, 0x925: 0x00c0, 0x926: 0x00c0, 0x927: 0x00c0, 0x928: 0x00c0, + 0x92a: 0x00c0, 0x92b: 0x00c0, 0x92c: 0x00c0, 0x92d: 0x00c0, 0x92e: 0x00c0, 0x92f: 0x00c0, + 0x930: 0x00c0, 0x932: 0x00c0, 0x933: 0x0080, 0x935: 0x00c0, + 0x936: 0x0080, 0x938: 0x00c0, 0x939: 0x00c0, + 0x93c: 0x00c3, 0x93e: 0x00c0, 0x93f: 0x00c0, + // Block 0x25, offset 0x940 + 0x940: 0x00c0, 0x941: 0x00c3, 0x942: 0x00c3, + 0x947: 0x00c3, 0x948: 0x00c3, 0x94b: 0x00c3, + 0x94c: 0x00c3, 0x94d: 0x00c6, 0x951: 0x00c3, + 0x959: 0x0080, 0x95a: 0x0080, 0x95b: 0x0080, 0x95c: 0x00c0, + 0x95e: 0x0080, + 0x966: 0x00c0, 0x967: 0x00c0, 0x968: 0x00c0, 0x969: 0x00c0, + 0x96a: 0x00c0, 0x96b: 0x00c0, 0x96c: 0x00c0, 0x96d: 0x00c0, 0x96e: 0x00c0, 0x96f: 0x00c0, + 0x970: 0x00c3, 0x971: 0x00c3, 0x972: 0x00c0, 0x973: 0x00c0, 0x974: 0x00c0, 0x975: 0x00c3, + // Block 0x26, offset 0x980 + 0x981: 0x00c3, 0x982: 0x00c3, 0x983: 0x00c0, 0x985: 0x00c0, + 0x986: 0x00c0, 0x987: 0x00c0, 0x988: 0x00c0, 0x989: 0x00c0, 0x98a: 0x00c0, 0x98b: 0x00c0, + 0x98c: 0x00c0, 0x98d: 0x00c0, 0x98f: 0x00c0, 0x990: 0x00c0, 0x991: 0x00c0, + 0x993: 0x00c0, 0x994: 0x00c0, 0x995: 0x00c0, 0x996: 0x00c0, 0x997: 0x00c0, + 0x998: 0x00c0, 0x999: 0x00c0, 0x99a: 0x00c0, 0x99b: 0x00c0, 0x99c: 0x00c0, 0x99d: 0x00c0, + 0x99e: 0x00c0, 0x99f: 0x00c0, 0x9a0: 0x00c0, 0x9a1: 0x00c0, 0x9a2: 0x00c0, 0x9a3: 0x00c0, + 0x9a4: 0x00c0, 0x9a5: 0x00c0, 0x9a6: 0x00c0, 0x9a7: 0x00c0, 0x9a8: 0x00c0, + 0x9aa: 0x00c0, 0x9ab: 0x00c0, 0x9ac: 0x00c0, 0x9ad: 0x00c0, 0x9ae: 0x00c0, 0x9af: 0x00c0, + 0x9b0: 0x00c0, 0x9b2: 0x00c0, 0x9b3: 0x00c0, 0x9b5: 0x00c0, + 0x9b6: 0x00c0, 0x9b7: 0x00c0, 0x9b8: 0x00c0, 0x9b9: 0x00c0, + 0x9bc: 0x00c3, 0x9bd: 0x00c0, 0x9be: 0x00c0, 0x9bf: 0x00c0, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x00c0, 0x9c1: 0x00c3, 0x9c2: 0x00c3, 0x9c3: 0x00c3, 0x9c4: 0x00c3, 0x9c5: 0x00c3, + 0x9c7: 0x00c3, 0x9c8: 0x00c3, 0x9c9: 0x00c0, 0x9cb: 0x00c0, + 0x9cc: 0x00c0, 0x9cd: 0x00c6, 0x9d0: 0x00c0, + 0x9e0: 0x00c0, 0x9e1: 0x00c0, 0x9e2: 0x00c3, 0x9e3: 0x00c3, + 0x9e6: 0x00c0, 0x9e7: 0x00c0, 0x9e8: 0x00c0, 0x9e9: 0x00c0, + 0x9ea: 0x00c0, 0x9eb: 0x00c0, 0x9ec: 0x00c0, 0x9ed: 0x00c0, 0x9ee: 0x00c0, 0x9ef: 0x00c0, + 0x9f0: 0x0080, 0x9f1: 0x0080, + 0x9f9: 0x00c0, + // Block 0x28, offset 0xa00 + 0xa01: 0x00c3, 0xa02: 0x00c0, 0xa03: 0x00c0, 0xa05: 0x00c0, + 0xa06: 0x00c0, 0xa07: 0x00c0, 0xa08: 0x00c0, 0xa09: 0x00c0, 0xa0a: 0x00c0, 0xa0b: 0x00c0, + 0xa0c: 0x00c0, 0xa0f: 0x00c0, 0xa10: 0x00c0, + 0xa13: 0x00c0, 0xa14: 0x00c0, 0xa15: 0x00c0, 0xa16: 0x00c0, 0xa17: 0x00c0, + 0xa18: 0x00c0, 0xa19: 0x00c0, 0xa1a: 0x00c0, 0xa1b: 0x00c0, 0xa1c: 0x00c0, 0xa1d: 0x00c0, + 0xa1e: 0x00c0, 0xa1f: 0x00c0, 0xa20: 0x00c0, 0xa21: 0x00c0, 0xa22: 0x00c0, 0xa23: 0x00c0, + 0xa24: 0x00c0, 0xa25: 0x00c0, 0xa26: 0x00c0, 0xa27: 0x00c0, 0xa28: 0x00c0, + 0xa2a: 0x00c0, 0xa2b: 0x00c0, 0xa2c: 0x00c0, 0xa2d: 0x00c0, 0xa2e: 0x00c0, 0xa2f: 0x00c0, + 0xa30: 0x00c0, 0xa32: 0x00c0, 0xa33: 0x00c0, 0xa35: 0x00c0, + 0xa36: 0x00c0, 0xa37: 0x00c0, 0xa38: 0x00c0, 0xa39: 0x00c0, + 0xa3c: 0x00c3, 0xa3d: 0x00c0, 0xa3e: 0x00c0, 0xa3f: 0x00c3, + // Block 0x29, offset 0xa40 + 0xa40: 0x00c0, 0xa41: 0x00c3, 0xa42: 0x00c3, 0xa43: 0x00c3, 0xa44: 0x00c3, + 0xa47: 0x00c0, 0xa48: 0x00c0, 0xa4b: 0x00c0, + 0xa4c: 0x00c0, 0xa4d: 0x00c6, + 0xa56: 0x00c3, 0xa57: 0x00c0, + 0xa5c: 0x0080, 0xa5d: 0x0080, + 0xa5f: 0x00c0, 0xa60: 0x00c0, 0xa61: 0x00c0, 0xa62: 0x00c3, 0xa63: 0x00c3, + 0xa66: 0x00c0, 0xa67: 0x00c0, 0xa68: 0x00c0, 0xa69: 0x00c0, + 0xa6a: 0x00c0, 0xa6b: 0x00c0, 0xa6c: 0x00c0, 0xa6d: 0x00c0, 0xa6e: 0x00c0, 0xa6f: 0x00c0, + 0xa70: 0x0080, 0xa71: 0x00c0, 0xa72: 0x0080, 0xa73: 0x0080, 0xa74: 0x0080, 0xa75: 0x0080, + 0xa76: 0x0080, 0xa77: 0x0080, + // Block 0x2a, offset 0xa80 + 0xa82: 0x00c3, 0xa83: 0x00c0, 0xa85: 0x00c0, + 0xa86: 0x00c0, 0xa87: 0x00c0, 0xa88: 0x00c0, 0xa89: 0x00c0, 0xa8a: 0x00c0, + 0xa8e: 0x00c0, 0xa8f: 0x00c0, 0xa90: 0x00c0, + 0xa92: 0x00c0, 0xa93: 0x00c0, 0xa94: 0x00c0, 0xa95: 0x00c0, + 0xa99: 0x00c0, 0xa9a: 0x00c0, 0xa9c: 0x00c0, + 0xa9e: 0x00c0, 0xa9f: 0x00c0, 0xaa3: 0x00c0, + 0xaa4: 0x00c0, 0xaa8: 0x00c0, 0xaa9: 0x00c0, + 0xaaa: 0x00c0, 0xaae: 0x00c0, 0xaaf: 0x00c0, + 0xab0: 0x00c0, 0xab1: 0x00c0, 0xab2: 0x00c0, 0xab3: 0x00c0, 0xab4: 0x00c0, 0xab5: 0x00c0, + 0xab6: 0x00c0, 0xab7: 0x00c0, 0xab8: 0x00c0, 0xab9: 0x00c0, + 0xabe: 0x00c0, 0xabf: 0x00c0, + // Block 0x2b, offset 0xac0 + 0xac0: 0x00c3, 0xac1: 0x00c0, 0xac2: 0x00c0, + 0xac6: 0x00c0, 0xac7: 0x00c0, 0xac8: 0x00c0, 0xaca: 0x00c0, 0xacb: 0x00c0, + 0xacc: 0x00c0, 0xacd: 0x00c6, 0xad0: 0x00c0, + 0xad7: 0x00c0, + 0xae6: 0x00c0, 0xae7: 0x00c0, 0xae8: 0x00c0, 0xae9: 0x00c0, + 0xaea: 0x00c0, 0xaeb: 0x00c0, 0xaec: 0x00c0, 0xaed: 0x00c0, 0xaee: 0x00c0, 0xaef: 0x00c0, + 0xaf0: 0x0080, 0xaf1: 0x0080, 0xaf2: 0x0080, 0xaf3: 0x0080, 0xaf4: 0x0080, 0xaf5: 0x0080, + 0xaf6: 0x0080, 0xaf7: 0x0080, 0xaf8: 0x0080, 0xaf9: 0x0080, 0xafa: 0x0080, + // Block 0x2c, offset 0xb00 + 0xb00: 0x00c3, 0xb01: 0x00c0, 0xb02: 0x00c0, 0xb03: 0x00c0, 0xb05: 0x00c0, + 0xb06: 0x00c0, 0xb07: 0x00c0, 0xb08: 0x00c0, 0xb09: 0x00c0, 0xb0a: 0x00c0, 0xb0b: 0x00c0, + 0xb0c: 0x00c0, 0xb0e: 0x00c0, 0xb0f: 0x00c0, 0xb10: 0x00c0, + 0xb12: 0x00c0, 0xb13: 0x00c0, 0xb14: 0x00c0, 0xb15: 0x00c0, 0xb16: 0x00c0, 0xb17: 0x00c0, + 0xb18: 0x00c0, 0xb19: 0x00c0, 0xb1a: 0x00c0, 0xb1b: 0x00c0, 0xb1c: 0x00c0, 0xb1d: 0x00c0, + 0xb1e: 0x00c0, 0xb1f: 0x00c0, 0xb20: 0x00c0, 0xb21: 0x00c0, 0xb22: 0x00c0, 0xb23: 0x00c0, + 0xb24: 0x00c0, 0xb25: 0x00c0, 0xb26: 0x00c0, 0xb27: 0x00c0, 0xb28: 0x00c0, + 0xb2a: 0x00c0, 0xb2b: 0x00c0, 0xb2c: 0x00c0, 0xb2d: 0x00c0, 0xb2e: 0x00c0, 0xb2f: 0x00c0, + 0xb30: 0x00c0, 0xb31: 0x00c0, 0xb32: 0x00c0, 0xb33: 0x00c0, 0xb34: 0x00c0, 0xb35: 0x00c0, + 0xb36: 0x00c0, 0xb37: 0x00c0, 0xb38: 0x00c0, 0xb39: 0x00c0, + 0xb3d: 0x00c0, 0xb3e: 0x00c3, 0xb3f: 0x00c3, + // Block 0x2d, offset 0xb40 + 0xb40: 0x00c3, 0xb41: 0x00c0, 0xb42: 0x00c0, 0xb43: 0x00c0, 0xb44: 0x00c0, + 0xb46: 0x00c3, 0xb47: 0x00c3, 0xb48: 0x00c3, 0xb4a: 0x00c3, 0xb4b: 0x00c3, + 0xb4c: 0x00c3, 0xb4d: 0x00c6, + 0xb55: 0x00c3, 0xb56: 0x00c3, + 0xb58: 0x00c0, 0xb59: 0x00c0, 0xb5a: 0x00c0, + 0xb60: 0x00c0, 0xb61: 0x00c0, 0xb62: 0x00c3, 0xb63: 0x00c3, + 0xb66: 0x00c0, 0xb67: 0x00c0, 0xb68: 0x00c0, 0xb69: 0x00c0, + 0xb6a: 0x00c0, 0xb6b: 0x00c0, 0xb6c: 0x00c0, 0xb6d: 0x00c0, 0xb6e: 0x00c0, 0xb6f: 0x00c0, + 0xb78: 0x0080, 0xb79: 0x0080, 0xb7a: 0x0080, 0xb7b: 0x0080, + 0xb7c: 0x0080, 0xb7d: 0x0080, 0xb7e: 0x0080, 0xb7f: 0x0080, + // Block 0x2e, offset 0xb80 + 0xb80: 0x00c0, 0xb81: 0x00c3, 0xb82: 0x00c0, 0xb83: 0x00c0, 0xb85: 0x00c0, + 0xb86: 0x00c0, 0xb87: 0x00c0, 0xb88: 0x00c0, 0xb89: 0x00c0, 0xb8a: 0x00c0, 0xb8b: 0x00c0, + 0xb8c: 0x00c0, 0xb8e: 0x00c0, 0xb8f: 0x00c0, 0xb90: 0x00c0, + 0xb92: 0x00c0, 0xb93: 0x00c0, 0xb94: 0x00c0, 0xb95: 0x00c0, 0xb96: 0x00c0, 0xb97: 0x00c0, + 0xb98: 0x00c0, 0xb99: 0x00c0, 0xb9a: 0x00c0, 0xb9b: 0x00c0, 0xb9c: 0x00c0, 0xb9d: 0x00c0, + 0xb9e: 0x00c0, 0xb9f: 0x00c0, 0xba0: 0x00c0, 0xba1: 0x00c0, 0xba2: 0x00c0, 0xba3: 0x00c0, + 0xba4: 0x00c0, 0xba5: 0x00c0, 0xba6: 0x00c0, 0xba7: 0x00c0, 0xba8: 0x00c0, + 0xbaa: 0x00c0, 0xbab: 0x00c0, 0xbac: 0x00c0, 0xbad: 0x00c0, 0xbae: 0x00c0, 0xbaf: 0x00c0, + 0xbb0: 0x00c0, 0xbb1: 0x00c0, 0xbb2: 0x00c0, 0xbb3: 0x00c0, 0xbb5: 0x00c0, + 0xbb6: 0x00c0, 0xbb7: 0x00c0, 0xbb8: 0x00c0, 0xbb9: 0x00c0, + 0xbbc: 0x00c3, 0xbbd: 0x00c0, 0xbbe: 0x00c0, 0xbbf: 0x00c3, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x00c0, 0xbc1: 0x00c0, 0xbc2: 0x00c0, 0xbc3: 0x00c0, 0xbc4: 0x00c0, + 0xbc6: 0x00c3, 0xbc7: 0x00c0, 0xbc8: 0x00c0, 0xbca: 0x00c0, 0xbcb: 0x00c0, + 0xbcc: 0x00c3, 0xbcd: 0x00c6, + 0xbd5: 0x00c0, 0xbd6: 0x00c0, + 0xbde: 0x00c0, 0xbe0: 0x00c0, 0xbe1: 0x00c0, 0xbe2: 0x00c3, 0xbe3: 0x00c3, + 0xbe6: 0x00c0, 0xbe7: 0x00c0, 0xbe8: 0x00c0, 0xbe9: 0x00c0, + 0xbea: 0x00c0, 0xbeb: 0x00c0, 0xbec: 0x00c0, 0xbed: 0x00c0, 0xbee: 0x00c0, 0xbef: 0x00c0, + 0xbf1: 0x00c0, 0xbf2: 0x00c0, + // Block 0x30, offset 0xc00 + 0xc01: 0x00c3, 0xc02: 0x00c0, 0xc03: 0x00c0, 0xc05: 0x00c0, + 0xc06: 0x00c0, 0xc07: 0x00c0, 0xc08: 0x00c0, 0xc09: 0x00c0, 0xc0a: 0x00c0, 0xc0b: 0x00c0, + 0xc0c: 0x00c0, 0xc0e: 0x00c0, 0xc0f: 0x00c0, 0xc10: 0x00c0, + 0xc12: 0x00c0, 0xc13: 0x00c0, 0xc14: 0x00c0, 0xc15: 0x00c0, 0xc16: 0x00c0, 0xc17: 0x00c0, + 0xc18: 0x00c0, 0xc19: 0x00c0, 0xc1a: 0x00c0, 0xc1b: 0x00c0, 0xc1c: 0x00c0, 0xc1d: 0x00c0, + 0xc1e: 0x00c0, 0xc1f: 0x00c0, 0xc20: 0x00c0, 0xc21: 0x00c0, 0xc22: 0x00c0, 0xc23: 0x00c0, + 0xc24: 0x00c0, 0xc25: 0x00c0, 0xc26: 0x00c0, 0xc27: 0x00c0, 0xc28: 0x00c0, 0xc29: 0x00c0, + 0xc2a: 0x00c0, 0xc2b: 0x00c0, 0xc2c: 0x00c0, 0xc2d: 0x00c0, 0xc2e: 0x00c0, 0xc2f: 0x00c0, + 0xc30: 0x00c0, 0xc31: 0x00c0, 0xc32: 0x00c0, 0xc33: 0x00c0, 0xc34: 0x00c0, 0xc35: 0x00c0, + 0xc36: 0x00c0, 0xc37: 0x00c0, 0xc38: 0x00c0, 0xc39: 0x00c0, 0xc3a: 0x00c0, + 0xc3d: 0x00c0, 0xc3e: 0x00c0, 0xc3f: 0x00c0, + // Block 0x31, offset 0xc40 + 0xc40: 0x00c0, 0xc41: 0x00c3, 0xc42: 0x00c3, 0xc43: 0x00c3, 0xc44: 0x00c3, + 0xc46: 0x00c0, 0xc47: 0x00c0, 0xc48: 0x00c0, 0xc4a: 0x00c0, 0xc4b: 0x00c0, + 0xc4c: 0x00c0, 0xc4d: 0x00c6, 0xc4e: 0x00c0, 0xc4f: 0x0080, + 0xc54: 0x00c0, 0xc55: 0x00c0, 0xc56: 0x00c0, 0xc57: 0x00c0, + 0xc58: 0x0080, 0xc59: 0x0080, 0xc5a: 0x0080, 0xc5b: 0x0080, 0xc5c: 0x0080, 0xc5d: 0x0080, + 0xc5e: 0x0080, 0xc5f: 0x00c0, 0xc60: 0x00c0, 0xc61: 0x00c0, 0xc62: 0x00c3, 0xc63: 0x00c3, + 0xc66: 0x00c0, 0xc67: 0x00c0, 0xc68: 0x00c0, 0xc69: 0x00c0, + 0xc6a: 0x00c0, 0xc6b: 0x00c0, 0xc6c: 0x00c0, 0xc6d: 0x00c0, 0xc6e: 0x00c0, 0xc6f: 0x00c0, + 0xc70: 0x0080, 0xc71: 0x0080, 0xc72: 0x0080, 0xc73: 0x0080, 0xc74: 0x0080, 0xc75: 0x0080, + 0xc76: 0x0080, 0xc77: 0x0080, 0xc78: 0x0080, 0xc79: 0x0080, 0xc7a: 0x00c0, 0xc7b: 0x00c0, + 0xc7c: 0x00c0, 0xc7d: 0x00c0, 0xc7e: 0x00c0, 0xc7f: 0x00c0, + // Block 0x32, offset 0xc80 + 0xc82: 0x00c0, 0xc83: 0x00c0, 0xc85: 0x00c0, + 0xc86: 0x00c0, 0xc87: 0x00c0, 0xc88: 0x00c0, 0xc89: 0x00c0, 0xc8a: 0x00c0, 0xc8b: 0x00c0, + 0xc8c: 0x00c0, 0xc8d: 0x00c0, 0xc8e: 0x00c0, 0xc8f: 0x00c0, 0xc90: 0x00c0, 0xc91: 0x00c0, + 0xc92: 0x00c0, 0xc93: 0x00c0, 0xc94: 0x00c0, 0xc95: 0x00c0, 0xc96: 0x00c0, + 0xc9a: 0x00c0, 0xc9b: 0x00c0, 0xc9c: 0x00c0, 0xc9d: 0x00c0, + 0xc9e: 0x00c0, 0xc9f: 0x00c0, 0xca0: 0x00c0, 0xca1: 0x00c0, 0xca2: 0x00c0, 0xca3: 0x00c0, + 0xca4: 0x00c0, 0xca5: 0x00c0, 0xca6: 0x00c0, 0xca7: 0x00c0, 0xca8: 0x00c0, 0xca9: 0x00c0, + 0xcaa: 0x00c0, 0xcab: 0x00c0, 0xcac: 0x00c0, 0xcad: 0x00c0, 0xcae: 0x00c0, 0xcaf: 0x00c0, + 0xcb0: 0x00c0, 0xcb1: 0x00c0, 0xcb3: 0x00c0, 0xcb4: 0x00c0, 0xcb5: 0x00c0, + 0xcb6: 0x00c0, 0xcb7: 0x00c0, 0xcb8: 0x00c0, 0xcb9: 0x00c0, 0xcba: 0x00c0, 0xcbb: 0x00c0, + 0xcbd: 0x00c0, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x00c0, 0xcc1: 0x00c0, 0xcc2: 0x00c0, 0xcc3: 0x00c0, 0xcc4: 0x00c0, 0xcc5: 0x00c0, + 0xcc6: 0x00c0, 0xcca: 0x00c6, + 0xccf: 0x00c0, 0xcd0: 0x00c0, 0xcd1: 0x00c0, + 0xcd2: 0x00c3, 0xcd3: 0x00c3, 0xcd4: 0x00c3, 0xcd6: 0x00c3, + 0xcd8: 0x00c0, 0xcd9: 0x00c0, 0xcda: 0x00c0, 0xcdb: 0x00c0, 0xcdc: 0x00c0, 0xcdd: 0x00c0, + 0xcde: 0x00c0, 0xcdf: 0x00c0, + 0xce6: 0x00c0, 0xce7: 0x00c0, 0xce8: 0x00c0, 0xce9: 0x00c0, + 0xcea: 0x00c0, 0xceb: 0x00c0, 0xcec: 0x00c0, 0xced: 0x00c0, 0xcee: 0x00c0, 0xcef: 0x00c0, + 0xcf2: 0x00c0, 0xcf3: 0x00c0, 0xcf4: 0x0080, + // Block 0x34, offset 0xd00 + 0xd01: 0x00c0, 0xd02: 0x00c0, 0xd03: 0x00c0, 0xd04: 0x00c0, 0xd05: 0x00c0, + 0xd06: 0x00c0, 0xd07: 0x00c0, 0xd08: 0x00c0, 0xd09: 0x00c0, 0xd0a: 0x00c0, 0xd0b: 0x00c0, + 0xd0c: 0x00c0, 0xd0d: 0x00c0, 0xd0e: 0x00c0, 0xd0f: 0x00c0, 0xd10: 0x00c0, 0xd11: 0x00c0, + 0xd12: 0x00c0, 0xd13: 0x00c0, 0xd14: 0x00c0, 0xd15: 0x00c0, 0xd16: 0x00c0, 0xd17: 0x00c0, + 0xd18: 0x00c0, 0xd19: 0x00c0, 0xd1a: 0x00c0, 0xd1b: 0x00c0, 0xd1c: 0x00c0, 0xd1d: 0x00c0, + 0xd1e: 0x00c0, 0xd1f: 0x00c0, 0xd20: 0x00c0, 0xd21: 0x00c0, 0xd22: 0x00c0, 0xd23: 0x00c0, + 0xd24: 0x00c0, 0xd25: 0x00c0, 0xd26: 0x00c0, 0xd27: 0x00c0, 0xd28: 0x00c0, 0xd29: 0x00c0, + 0xd2a: 0x00c0, 0xd2b: 0x00c0, 0xd2c: 0x00c0, 0xd2d: 0x00c0, 0xd2e: 0x00c0, 0xd2f: 0x00c0, + 0xd30: 0x00c0, 0xd31: 0x00c3, 0xd32: 0x00c0, 0xd33: 0x0080, 0xd34: 0x00c3, 0xd35: 0x00c3, + 0xd36: 0x00c3, 0xd37: 0x00c3, 0xd38: 0x00c3, 0xd39: 0x00c3, 0xd3a: 0x00c6, + 0xd3f: 0x0080, + // Block 0x35, offset 0xd40 + 0xd40: 0x00c0, 0xd41: 0x00c0, 0xd42: 0x00c0, 0xd43: 0x00c0, 0xd44: 0x00c0, 0xd45: 0x00c0, + 0xd46: 0x00c0, 0xd47: 0x00c3, 0xd48: 0x00c3, 0xd49: 0x00c3, 0xd4a: 0x00c3, 0xd4b: 0x00c3, + 0xd4c: 0x00c3, 0xd4d: 0x00c3, 0xd4e: 0x00c3, 0xd4f: 0x0080, 0xd50: 0x00c0, 0xd51: 0x00c0, + 0xd52: 0x00c0, 0xd53: 0x00c0, 0xd54: 0x00c0, 0xd55: 0x00c0, 0xd56: 0x00c0, 0xd57: 0x00c0, + 0xd58: 0x00c0, 0xd59: 0x00c0, 0xd5a: 0x0080, 0xd5b: 0x0080, + // Block 0x36, offset 0xd80 + 0xd81: 0x00c0, 0xd82: 0x00c0, 0xd84: 0x00c0, + 0xd87: 0x00c0, 0xd88: 0x00c0, 0xd8a: 0x00c0, + 0xd8d: 0x00c0, + 0xd94: 0x00c0, 0xd95: 0x00c0, 0xd96: 0x00c0, 0xd97: 0x00c0, + 0xd99: 0x00c0, 0xd9a: 0x00c0, 0xd9b: 0x00c0, 0xd9c: 0x00c0, 0xd9d: 0x00c0, + 0xd9e: 0x00c0, 0xd9f: 0x00c0, 0xda1: 0x00c0, 0xda2: 0x00c0, 0xda3: 0x00c0, + 0xda5: 0x00c0, 0xda7: 0x00c0, + 0xdaa: 0x00c0, 0xdab: 0x00c0, 0xdad: 0x00c0, 0xdae: 0x00c0, 0xdaf: 0x00c0, + 0xdb0: 0x00c0, 0xdb1: 0x00c3, 0xdb2: 0x00c0, 0xdb3: 0x0080, 0xdb4: 0x00c3, 0xdb5: 0x00c3, + 0xdb6: 0x00c3, 0xdb7: 0x00c3, 0xdb8: 0x00c3, 0xdb9: 0x00c3, 0xdbb: 0x00c3, + 0xdbc: 0x00c3, 0xdbd: 0x00c0, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x00c0, 0xdc1: 0x00c0, 0xdc2: 0x00c0, 0xdc3: 0x00c0, 0xdc4: 0x00c0, + 0xdc6: 0x00c0, 0xdc8: 0x00c3, 0xdc9: 0x00c3, 0xdca: 0x00c3, 0xdcb: 0x00c3, + 0xdcc: 0x00c3, 0xdcd: 0x00c3, 0xdd0: 0x00c0, 0xdd1: 0x00c0, + 0xdd2: 0x00c0, 0xdd3: 0x00c0, 0xdd4: 0x00c0, 0xdd5: 0x00c0, 0xdd6: 0x00c0, 0xdd7: 0x00c0, + 0xdd8: 0x00c0, 0xdd9: 0x00c0, 0xddc: 0x0080, 0xddd: 0x0080, + 0xdde: 0x00c0, 0xddf: 0x00c0, + // Block 0x38, offset 0xe00 + 0xe00: 0x00c0, 0xe01: 0x0080, 0xe02: 0x0080, 0xe03: 0x0080, 0xe04: 0x0080, 0xe05: 0x0080, + 0xe06: 0x0080, 0xe07: 0x0080, 0xe08: 0x0080, 0xe09: 0x0080, 0xe0a: 0x0080, 0xe0b: 0x00c0, + 0xe0c: 0x0080, 0xe0d: 0x0080, 0xe0e: 0x0080, 0xe0f: 0x0080, 0xe10: 0x0080, 0xe11: 0x0080, + 0xe12: 0x0080, 0xe13: 0x0080, 0xe14: 0x0080, 0xe15: 0x0080, 0xe16: 0x0080, 0xe17: 0x0080, + 0xe18: 0x00c3, 0xe19: 0x00c3, 0xe1a: 0x0080, 0xe1b: 0x0080, 0xe1c: 0x0080, 0xe1d: 0x0080, + 0xe1e: 0x0080, 0xe1f: 0x0080, 0xe20: 0x00c0, 0xe21: 0x00c0, 0xe22: 0x00c0, 0xe23: 0x00c0, + 0xe24: 0x00c0, 0xe25: 0x00c0, 0xe26: 0x00c0, 0xe27: 0x00c0, 0xe28: 0x00c0, 0xe29: 0x00c0, + 0xe2a: 0x0080, 0xe2b: 0x0080, 0xe2c: 0x0080, 0xe2d: 0x0080, 0xe2e: 0x0080, 0xe2f: 0x0080, + 0xe30: 0x0080, 0xe31: 0x0080, 0xe32: 0x0080, 0xe33: 0x0080, 0xe34: 0x0080, 0xe35: 0x00c3, + 0xe36: 0x0080, 0xe37: 0x00c3, 0xe38: 0x0080, 0xe39: 0x00c3, 0xe3a: 0x0080, 0xe3b: 0x0080, + 0xe3c: 0x0080, 0xe3d: 0x0080, 0xe3e: 0x00c0, 0xe3f: 0x00c0, + // Block 0x39, offset 0xe40 + 0xe40: 0x00c0, 0xe41: 0x00c0, 0xe42: 0x00c0, 0xe43: 0x0080, 0xe44: 0x00c0, 0xe45: 0x00c0, + 0xe46: 0x00c0, 0xe47: 0x00c0, 0xe49: 0x00c0, 0xe4a: 0x00c0, 0xe4b: 0x00c0, + 0xe4c: 0x00c0, 0xe4d: 0x0080, 0xe4e: 0x00c0, 0xe4f: 0x00c0, 0xe50: 0x00c0, 0xe51: 0x00c0, + 0xe52: 0x0080, 0xe53: 0x00c0, 0xe54: 0x00c0, 0xe55: 0x00c0, 0xe56: 0x00c0, 0xe57: 0x0080, + 0xe58: 0x00c0, 0xe59: 0x00c0, 0xe5a: 0x00c0, 0xe5b: 0x00c0, 0xe5c: 0x0080, 0xe5d: 0x00c0, + 0xe5e: 0x00c0, 0xe5f: 0x00c0, 0xe60: 0x00c0, 0xe61: 0x00c0, 0xe62: 0x00c0, 0xe63: 0x00c0, + 0xe64: 0x00c0, 0xe65: 0x00c0, 0xe66: 0x00c0, 0xe67: 0x00c0, 0xe68: 0x00c0, 0xe69: 0x0080, + 0xe6a: 0x00c0, 0xe6b: 0x00c0, 0xe6c: 0x00c0, + 0xe71: 0x00c3, 0xe72: 0x00c3, 0xe73: 0x0083, 0xe74: 0x00c3, 0xe75: 0x0083, + 0xe76: 0x0083, 0xe77: 0x0083, 0xe78: 0x0083, 0xe79: 0x0083, 0xe7a: 0x00c3, 0xe7b: 0x00c3, + 0xe7c: 0x00c3, 0xe7d: 0x00c3, 0xe7e: 0x00c3, 0xe7f: 0x00c0, + // Block 0x3a, offset 0xe80 + 0xe80: 0x00c3, 0xe81: 0x0083, 0xe82: 0x00c3, 0xe83: 0x00c3, 0xe84: 0x00c6, 0xe85: 0x0080, + 0xe86: 0x00c3, 0xe87: 0x00c3, 0xe88: 0x00c0, 0xe89: 0x00c0, 0xe8a: 0x00c0, 0xe8b: 0x00c0, + 0xe8c: 0x00c0, 0xe8d: 0x00c3, 0xe8e: 0x00c3, 0xe8f: 0x00c3, 0xe90: 0x00c3, 0xe91: 0x00c3, + 0xe92: 0x00c3, 0xe93: 0x0083, 0xe94: 0x00c3, 0xe95: 0x00c3, 0xe96: 0x00c3, 0xe97: 0x00c3, + 0xe99: 0x00c3, 0xe9a: 0x00c3, 0xe9b: 0x00c3, 0xe9c: 0x00c3, 0xe9d: 0x0083, + 0xe9e: 0x00c3, 0xe9f: 0x00c3, 0xea0: 0x00c3, 0xea1: 0x00c3, 0xea2: 0x0083, 0xea3: 0x00c3, + 0xea4: 0x00c3, 0xea5: 0x00c3, 0xea6: 0x00c3, 0xea7: 0x0083, 0xea8: 0x00c3, 0xea9: 0x00c3, + 0xeaa: 0x00c3, 0xeab: 0x00c3, 0xeac: 0x0083, 0xead: 0x00c3, 0xeae: 0x00c3, 0xeaf: 0x00c3, + 0xeb0: 0x00c3, 0xeb1: 0x00c3, 0xeb2: 0x00c3, 0xeb3: 0x00c3, 0xeb4: 0x00c3, 0xeb5: 0x00c3, + 0xeb6: 0x00c3, 0xeb7: 0x00c3, 0xeb8: 0x00c3, 0xeb9: 0x0083, 0xeba: 0x00c3, 0xebb: 0x00c3, + 0xebc: 0x00c3, 0xebe: 0x0080, 0xebf: 0x0080, + // Block 0x3b, offset 0xec0 + 0xec0: 0x0080, 0xec1: 0x0080, 0xec2: 0x0080, 0xec3: 0x0080, 0xec4: 0x0080, 0xec5: 0x0080, + 0xec6: 0x00c3, 0xec7: 0x0080, 0xec8: 0x0080, 0xec9: 0x0080, 0xeca: 0x0080, 0xecb: 0x0080, + 0xecc: 0x0080, 0xece: 0x0080, 0xecf: 0x0080, 0xed0: 0x0080, 0xed1: 0x0080, + 0xed2: 0x0080, 0xed3: 0x0080, 0xed4: 0x0080, 0xed5: 0x0080, 0xed6: 0x0080, 0xed7: 0x0080, + 0xed8: 0x0080, 0xed9: 0x0080, 0xeda: 0x0080, + // Block 0x3c, offset 0xf00 + 0xf00: 0x00c0, 0xf01: 0x00c0, 0xf02: 0x00c0, 0xf03: 0x00c0, 0xf04: 0x00c0, 0xf05: 0x00c0, + 0xf06: 0x00c0, 0xf07: 0x00c0, 0xf08: 0x00c0, 0xf09: 0x00c0, 0xf0a: 0x00c0, 0xf0b: 0x00c0, + 0xf0c: 0x00c0, 0xf0d: 0x00c0, 0xf0e: 0x00c0, 0xf0f: 0x00c0, 0xf10: 0x00c0, 0xf11: 0x00c0, + 0xf12: 0x00c0, 0xf13: 0x00c0, 0xf14: 0x00c0, 0xf15: 0x00c0, 0xf16: 0x00c0, 0xf17: 0x00c0, + 0xf18: 0x00c0, 0xf19: 0x00c0, 0xf1a: 0x00c0, 0xf1b: 0x00c0, 0xf1c: 0x00c0, 0xf1d: 0x00c0, + 0xf1e: 0x00c0, 0xf1f: 0x00c0, 0xf20: 0x00c0, 0xf21: 0x00c0, 0xf22: 0x00c0, 0xf23: 0x00c0, + 0xf24: 0x00c0, 0xf25: 0x00c0, 0xf26: 0x00c0, 0xf27: 0x00c0, 0xf28: 0x00c0, 0xf29: 0x00c0, + 0xf2a: 0x00c0, 0xf2b: 0x00c0, 0xf2c: 0x00c0, 0xf2d: 0x00c3, 0xf2e: 0x00c3, 0xf2f: 0x00c3, + 0xf30: 0x00c3, 0xf31: 0x00c0, 0xf32: 0x00c3, 0xf33: 0x00c3, 0xf34: 0x00c3, 0xf35: 0x00c3, + 0xf36: 0x00c3, 0xf37: 0x00c3, 0xf38: 0x00c0, 0xf39: 0x00c6, 0xf3a: 0x00c6, 0xf3b: 0x00c0, + 0xf3c: 0x00c0, 0xf3d: 0x00c3, 0xf3e: 0x00c3, 0xf3f: 0x00c0, + // Block 0x3d, offset 0xf40 + 0xf40: 0x00c0, 0xf41: 0x00c0, 0xf42: 0x00c0, 0xf43: 0x00c0, 0xf44: 0x00c0, 0xf45: 0x00c0, + 0xf46: 0x00c0, 0xf47: 0x00c0, 0xf48: 0x00c0, 0xf49: 0x00c0, 0xf4a: 0x0080, 0xf4b: 0x0080, + 0xf4c: 0x0080, 0xf4d: 0x0080, 0xf4e: 0x0080, 0xf4f: 0x0080, 0xf50: 0x00c0, 0xf51: 0x00c0, + 0xf52: 0x00c0, 0xf53: 0x00c0, 0xf54: 0x00c0, 0xf55: 0x00c0, 0xf56: 0x00c0, 0xf57: 0x00c0, + 0xf58: 0x00c3, 0xf59: 0x00c3, 0xf5a: 0x00c0, 0xf5b: 0x00c0, 0xf5c: 0x00c0, 0xf5d: 0x00c0, + 0xf5e: 0x00c3, 0xf5f: 0x00c3, 0xf60: 0x00c3, 0xf61: 0x00c0, 0xf62: 0x00c0, 0xf63: 0x00c0, + 0xf64: 0x00c0, 0xf65: 0x00c0, 0xf66: 0x00c0, 0xf67: 0x00c0, 0xf68: 0x00c0, 0xf69: 0x00c0, + 0xf6a: 0x00c0, 0xf6b: 0x00c0, 0xf6c: 0x00c0, 0xf6d: 0x00c0, 0xf6e: 0x00c0, 0xf6f: 0x00c0, + 0xf70: 0x00c0, 0xf71: 0x00c3, 0xf72: 0x00c3, 0xf73: 0x00c3, 0xf74: 0x00c3, 0xf75: 0x00c0, + 0xf76: 0x00c0, 0xf77: 0x00c0, 0xf78: 0x00c0, 0xf79: 0x00c0, 0xf7a: 0x00c0, 0xf7b: 0x00c0, + 0xf7c: 0x00c0, 0xf7d: 0x00c0, 0xf7e: 0x00c0, 0xf7f: 0x00c0, + // Block 0x3e, offset 0xf80 + 0xf80: 0x00c0, 0xf81: 0x00c0, 0xf82: 0x00c3, 0xf83: 0x00c0, 0xf84: 0x00c0, 0xf85: 0x00c3, + 0xf86: 0x00c3, 0xf87: 0x00c0, 0xf88: 0x00c0, 0xf89: 0x00c0, 0xf8a: 0x00c0, 0xf8b: 0x00c0, + 0xf8c: 0x00c0, 0xf8d: 0x00c3, 0xf8e: 0x00c0, 0xf8f: 0x00c0, 0xf90: 0x00c0, 0xf91: 0x00c0, + 0xf92: 0x00c0, 0xf93: 0x00c0, 0xf94: 0x00c0, 0xf95: 0x00c0, 0xf96: 0x00c0, 0xf97: 0x00c0, + 0xf98: 0x00c0, 0xf99: 0x00c0, 0xf9a: 0x00c0, 0xf9b: 0x00c0, 0xf9c: 0x00c0, 0xf9d: 0x00c3, + 0xf9e: 0x0080, 0xf9f: 0x0080, 0xfa0: 0x00c0, 0xfa1: 0x00c0, 0xfa2: 0x00c0, 0xfa3: 0x00c0, + 0xfa4: 0x00c0, 0xfa5: 0x00c0, 0xfa6: 0x00c0, 0xfa7: 0x00c0, 0xfa8: 0x00c0, 0xfa9: 0x00c0, + 0xfaa: 0x00c0, 0xfab: 0x00c0, 0xfac: 0x00c0, 0xfad: 0x00c0, 0xfae: 0x00c0, 0xfaf: 0x00c0, + 0xfb0: 0x00c0, 0xfb1: 0x00c0, 0xfb2: 0x00c0, 0xfb3: 0x00c0, 0xfb4: 0x00c0, 0xfb5: 0x00c0, + 0xfb6: 0x00c0, 0xfb7: 0x00c0, 0xfb8: 0x00c0, 0xfb9: 0x00c0, 0xfba: 0x00c0, 0xfbb: 0x00c0, + 0xfbc: 0x00c0, 0xfbd: 0x00c0, 0xfbe: 0x00c0, 0xfbf: 0x00c0, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x00c0, 0xfc1: 0x00c0, 0xfc2: 0x00c0, 0xfc3: 0x00c0, 0xfc4: 0x00c0, 0xfc5: 0x00c0, + 0xfc7: 0x00c0, + 0xfcd: 0x00c0, 0xfd0: 0x00c0, 0xfd1: 0x00c0, + 0xfd2: 0x00c0, 0xfd3: 0x00c0, 0xfd4: 0x00c0, 0xfd5: 0x00c0, 0xfd6: 0x00c0, 0xfd7: 0x00c0, + 0xfd8: 0x00c0, 0xfd9: 0x00c0, 0xfda: 0x00c0, 0xfdb: 0x00c0, 0xfdc: 0x00c0, 0xfdd: 0x00c0, + 0xfde: 0x00c0, 0xfdf: 0x00c0, 0xfe0: 0x00c0, 0xfe1: 0x00c0, 0xfe2: 0x00c0, 0xfe3: 0x00c0, + 0xfe4: 0x00c0, 0xfe5: 0x00c0, 0xfe6: 0x00c0, 0xfe7: 0x00c0, 0xfe8: 0x00c0, 0xfe9: 0x00c0, + 0xfea: 0x00c0, 0xfeb: 0x00c0, 0xfec: 0x00c0, 0xfed: 0x00c0, 0xfee: 0x00c0, 0xfef: 0x00c0, + 0xff0: 0x00c0, 0xff1: 0x00c0, 0xff2: 0x00c0, 0xff3: 0x00c0, 0xff4: 0x00c0, 0xff5: 0x00c0, + 0xff6: 0x00c0, 0xff7: 0x00c0, 0xff8: 0x00c0, 0xff9: 0x00c0, 0xffa: 0x00c0, 0xffb: 0x0080, + 0xffc: 0x0080, 0xffd: 0x00c0, 0xffe: 0x00c0, 0xfff: 0x00c0, + // Block 0x40, offset 0x1000 + 0x1000: 0x0040, 0x1001: 0x0040, 0x1002: 0x0040, 0x1003: 0x0040, 0x1004: 0x0040, 0x1005: 0x0040, + 0x1006: 0x0040, 0x1007: 0x0040, 0x1008: 0x0040, 0x1009: 0x0040, 0x100a: 0x0040, 0x100b: 0x0040, + 0x100c: 0x0040, 0x100d: 0x0040, 0x100e: 0x0040, 0x100f: 0x0040, 0x1010: 0x0040, 0x1011: 0x0040, + 0x1012: 0x0040, 0x1013: 0x0040, 0x1014: 0x0040, 0x1015: 0x0040, 0x1016: 0x0040, 0x1017: 0x0040, + 0x1018: 0x0040, 0x1019: 0x0040, 0x101a: 0x0040, 0x101b: 0x0040, 0x101c: 0x0040, 0x101d: 0x0040, + 0x101e: 0x0040, 0x101f: 0x0040, 0x1020: 0x0040, 0x1021: 0x0040, 0x1022: 0x0040, 0x1023: 0x0040, + 0x1024: 0x0040, 0x1025: 0x0040, 0x1026: 0x0040, 0x1027: 0x0040, 0x1028: 0x0040, 0x1029: 0x0040, + 0x102a: 0x0040, 0x102b: 0x0040, 0x102c: 0x0040, 0x102d: 0x0040, 0x102e: 0x0040, 0x102f: 0x0040, + 0x1030: 0x0040, 0x1031: 0x0040, 0x1032: 0x0040, 0x1033: 0x0040, 0x1034: 0x0040, 0x1035: 0x0040, + 0x1036: 0x0040, 0x1037: 0x0040, 0x1038: 0x0040, 0x1039: 0x0040, 0x103a: 0x0040, 0x103b: 0x0040, + 0x103c: 0x0040, 0x103d: 0x0040, 0x103e: 0x0040, 0x103f: 0x0040, + // Block 0x41, offset 0x1040 + 0x1040: 0x00c0, 0x1041: 0x00c0, 0x1042: 0x00c0, 0x1043: 0x00c0, 0x1044: 0x00c0, 0x1045: 0x00c0, + 0x1046: 0x00c0, 0x1047: 0x00c0, 0x1048: 0x00c0, 0x104a: 0x00c0, 0x104b: 0x00c0, + 0x104c: 0x00c0, 0x104d: 0x00c0, 0x1050: 0x00c0, 0x1051: 0x00c0, + 0x1052: 0x00c0, 0x1053: 0x00c0, 0x1054: 0x00c0, 0x1055: 0x00c0, 0x1056: 0x00c0, + 0x1058: 0x00c0, 0x105a: 0x00c0, 0x105b: 0x00c0, 0x105c: 0x00c0, 0x105d: 0x00c0, + 0x1060: 0x00c0, 0x1061: 0x00c0, 0x1062: 0x00c0, 0x1063: 0x00c0, + 0x1064: 0x00c0, 0x1065: 0x00c0, 0x1066: 0x00c0, 0x1067: 0x00c0, 0x1068: 0x00c0, 0x1069: 0x00c0, + 0x106a: 0x00c0, 0x106b: 0x00c0, 0x106c: 0x00c0, 0x106d: 0x00c0, 0x106e: 0x00c0, 0x106f: 0x00c0, + 0x1070: 0x00c0, 0x1071: 0x00c0, 0x1072: 0x00c0, 0x1073: 0x00c0, 0x1074: 0x00c0, 0x1075: 0x00c0, + 0x1076: 0x00c0, 0x1077: 0x00c0, 0x1078: 0x00c0, 0x1079: 0x00c0, 0x107a: 0x00c0, 0x107b: 0x00c0, + 0x107c: 0x00c0, 0x107d: 0x00c0, 0x107e: 0x00c0, 0x107f: 0x00c0, + // Block 0x42, offset 0x1080 + 0x1080: 0x00c0, 0x1081: 0x00c0, 0x1082: 0x00c0, 0x1083: 0x00c0, 0x1084: 0x00c0, 0x1085: 0x00c0, + 0x1086: 0x00c0, 0x1087: 0x00c0, 0x1088: 0x00c0, 0x108a: 0x00c0, 0x108b: 0x00c0, + 0x108c: 0x00c0, 0x108d: 0x00c0, 0x1090: 0x00c0, 0x1091: 0x00c0, + 0x1092: 0x00c0, 0x1093: 0x00c0, 0x1094: 0x00c0, 0x1095: 0x00c0, 0x1096: 0x00c0, 0x1097: 0x00c0, + 0x1098: 0x00c0, 0x1099: 0x00c0, 0x109a: 0x00c0, 0x109b: 0x00c0, 0x109c: 0x00c0, 0x109d: 0x00c0, + 0x109e: 0x00c0, 0x109f: 0x00c0, 0x10a0: 0x00c0, 0x10a1: 0x00c0, 0x10a2: 0x00c0, 0x10a3: 0x00c0, + 0x10a4: 0x00c0, 0x10a5: 0x00c0, 0x10a6: 0x00c0, 0x10a7: 0x00c0, 0x10a8: 0x00c0, 0x10a9: 0x00c0, + 0x10aa: 0x00c0, 0x10ab: 0x00c0, 0x10ac: 0x00c0, 0x10ad: 0x00c0, 0x10ae: 0x00c0, 0x10af: 0x00c0, + 0x10b0: 0x00c0, 0x10b2: 0x00c0, 0x10b3: 0x00c0, 0x10b4: 0x00c0, 0x10b5: 0x00c0, + 0x10b8: 0x00c0, 0x10b9: 0x00c0, 0x10ba: 0x00c0, 0x10bb: 0x00c0, + 0x10bc: 0x00c0, 0x10bd: 0x00c0, 0x10be: 0x00c0, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x00c0, 0x10c2: 0x00c0, 0x10c3: 0x00c0, 0x10c4: 0x00c0, 0x10c5: 0x00c0, + 0x10c8: 0x00c0, 0x10c9: 0x00c0, 0x10ca: 0x00c0, 0x10cb: 0x00c0, + 0x10cc: 0x00c0, 0x10cd: 0x00c0, 0x10ce: 0x00c0, 0x10cf: 0x00c0, 0x10d0: 0x00c0, 0x10d1: 0x00c0, + 0x10d2: 0x00c0, 0x10d3: 0x00c0, 0x10d4: 0x00c0, 0x10d5: 0x00c0, 0x10d6: 0x00c0, + 0x10d8: 0x00c0, 0x10d9: 0x00c0, 0x10da: 0x00c0, 0x10db: 0x00c0, 0x10dc: 0x00c0, 0x10dd: 0x00c0, + 0x10de: 0x00c0, 0x10df: 0x00c0, 0x10e0: 0x00c0, 0x10e1: 0x00c0, 0x10e2: 0x00c0, 0x10e3: 0x00c0, + 0x10e4: 0x00c0, 0x10e5: 0x00c0, 0x10e6: 0x00c0, 0x10e7: 0x00c0, 0x10e8: 0x00c0, 0x10e9: 0x00c0, + 0x10ea: 0x00c0, 0x10eb: 0x00c0, 0x10ec: 0x00c0, 0x10ed: 0x00c0, 0x10ee: 0x00c0, 0x10ef: 0x00c0, + 0x10f0: 0x00c0, 0x10f1: 0x00c0, 0x10f2: 0x00c0, 0x10f3: 0x00c0, 0x10f4: 0x00c0, 0x10f5: 0x00c0, + 0x10f6: 0x00c0, 0x10f7: 0x00c0, 0x10f8: 0x00c0, 0x10f9: 0x00c0, 0x10fa: 0x00c0, 0x10fb: 0x00c0, + 0x10fc: 0x00c0, 0x10fd: 0x00c0, 0x10fe: 0x00c0, 0x10ff: 0x00c0, + // Block 0x44, offset 0x1100 + 0x1100: 0x00c0, 0x1101: 0x00c0, 0x1102: 0x00c0, 0x1103: 0x00c0, 0x1104: 0x00c0, 0x1105: 0x00c0, + 0x1106: 0x00c0, 0x1107: 0x00c0, 0x1108: 0x00c0, 0x1109: 0x00c0, 0x110a: 0x00c0, 0x110b: 0x00c0, + 0x110c: 0x00c0, 0x110d: 0x00c0, 0x110e: 0x00c0, 0x110f: 0x00c0, 0x1110: 0x00c0, + 0x1112: 0x00c0, 0x1113: 0x00c0, 0x1114: 0x00c0, 0x1115: 0x00c0, + 0x1118: 0x00c0, 0x1119: 0x00c0, 0x111a: 0x00c0, 0x111b: 0x00c0, 0x111c: 0x00c0, 0x111d: 0x00c0, + 0x111e: 0x00c0, 0x111f: 0x00c0, 0x1120: 0x00c0, 0x1121: 0x00c0, 0x1122: 0x00c0, 0x1123: 0x00c0, + 0x1124: 0x00c0, 0x1125: 0x00c0, 0x1126: 0x00c0, 0x1127: 0x00c0, 0x1128: 0x00c0, 0x1129: 0x00c0, + 0x112a: 0x00c0, 0x112b: 0x00c0, 0x112c: 0x00c0, 0x112d: 0x00c0, 0x112e: 0x00c0, 0x112f: 0x00c0, + 0x1130: 0x00c0, 0x1131: 0x00c0, 0x1132: 0x00c0, 0x1133: 0x00c0, 0x1134: 0x00c0, 0x1135: 0x00c0, + 0x1136: 0x00c0, 0x1137: 0x00c0, 0x1138: 0x00c0, 0x1139: 0x00c0, 0x113a: 0x00c0, 0x113b: 0x00c0, + 0x113c: 0x00c0, 0x113d: 0x00c0, 0x113e: 0x00c0, 0x113f: 0x00c0, + // Block 0x45, offset 0x1140 + 0x1140: 0x00c0, 0x1141: 0x00c0, 0x1142: 0x00c0, 0x1143: 0x00c0, 0x1144: 0x00c0, 0x1145: 0x00c0, + 0x1146: 0x00c0, 0x1147: 0x00c0, 0x1148: 0x00c0, 0x1149: 0x00c0, 0x114a: 0x00c0, 0x114b: 0x00c0, + 0x114c: 0x00c0, 0x114d: 0x00c0, 0x114e: 0x00c0, 0x114f: 0x00c0, 0x1150: 0x00c0, 0x1151: 0x00c0, + 0x1152: 0x00c0, 0x1153: 0x00c0, 0x1154: 0x00c0, 0x1155: 0x00c0, 0x1156: 0x00c0, 0x1157: 0x00c0, + 0x1158: 0x00c0, 0x1159: 0x00c0, 0x115a: 0x00c0, 0x115d: 0x00c3, + 0x115e: 0x00c3, 0x115f: 0x00c3, 0x1160: 0x0080, 0x1161: 0x0080, 0x1162: 0x0080, 0x1163: 0x0080, + 0x1164: 0x0080, 0x1165: 0x0080, 0x1166: 0x0080, 0x1167: 0x0080, 0x1168: 0x0080, 0x1169: 0x0080, + 0x116a: 0x0080, 0x116b: 0x0080, 0x116c: 0x0080, 0x116d: 0x0080, 0x116e: 0x0080, 0x116f: 0x0080, + 0x1170: 0x0080, 0x1171: 0x0080, 0x1172: 0x0080, 0x1173: 0x0080, 0x1174: 0x0080, 0x1175: 0x0080, + 0x1176: 0x0080, 0x1177: 0x0080, 0x1178: 0x0080, 0x1179: 0x0080, 0x117a: 0x0080, 0x117b: 0x0080, + 0x117c: 0x0080, + // Block 0x46, offset 0x1180 + 0x1180: 0x00c0, 0x1181: 0x00c0, 0x1182: 0x00c0, 0x1183: 0x00c0, 0x1184: 0x00c0, 0x1185: 0x00c0, + 0x1186: 0x00c0, 0x1187: 0x00c0, 0x1188: 0x00c0, 0x1189: 0x00c0, 0x118a: 0x00c0, 0x118b: 0x00c0, + 0x118c: 0x00c0, 0x118d: 0x00c0, 0x118e: 0x00c0, 0x118f: 0x00c0, 0x1190: 0x0080, 0x1191: 0x0080, + 0x1192: 0x0080, 0x1193: 0x0080, 0x1194: 0x0080, 0x1195: 0x0080, 0x1196: 0x0080, 0x1197: 0x0080, + 0x1198: 0x0080, 0x1199: 0x0080, + 0x11a0: 0x00c0, 0x11a1: 0x00c0, 0x11a2: 0x00c0, 0x11a3: 0x00c0, + 0x11a4: 0x00c0, 0x11a5: 0x00c0, 0x11a6: 0x00c0, 0x11a7: 0x00c0, 0x11a8: 0x00c0, 0x11a9: 0x00c0, + 0x11aa: 0x00c0, 0x11ab: 0x00c0, 0x11ac: 0x00c0, 0x11ad: 0x00c0, 0x11ae: 0x00c0, 0x11af: 0x00c0, + 0x11b0: 0x00c0, 0x11b1: 0x00c0, 0x11b2: 0x00c0, 0x11b3: 0x00c0, 0x11b4: 0x00c0, 0x11b5: 0x00c0, + 0x11b6: 0x00c0, 0x11b7: 0x00c0, 0x11b8: 0x00c0, 0x11b9: 0x00c0, 0x11ba: 0x00c0, 0x11bb: 0x00c0, + 0x11bc: 0x00c0, 0x11bd: 0x00c0, 0x11be: 0x00c0, 0x11bf: 0x00c0, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x00c0, 0x11c1: 0x00c0, 0x11c2: 0x00c0, 0x11c3: 0x00c0, 0x11c4: 0x00c0, 0x11c5: 0x00c0, + 0x11c6: 0x00c0, 0x11c7: 0x00c0, 0x11c8: 0x00c0, 0x11c9: 0x00c0, 0x11ca: 0x00c0, 0x11cb: 0x00c0, + 0x11cc: 0x00c0, 0x11cd: 0x00c0, 0x11ce: 0x00c0, 0x11cf: 0x00c0, 0x11d0: 0x00c0, 0x11d1: 0x00c0, + 0x11d2: 0x00c0, 0x11d3: 0x00c0, 0x11d4: 0x00c0, 0x11d5: 0x00c0, 0x11d6: 0x00c0, 0x11d7: 0x00c0, + 0x11d8: 0x00c0, 0x11d9: 0x00c0, 0x11da: 0x00c0, 0x11db: 0x00c0, 0x11dc: 0x00c0, 0x11dd: 0x00c0, + 0x11de: 0x00c0, 0x11df: 0x00c0, 0x11e0: 0x00c0, 0x11e1: 0x00c0, 0x11e2: 0x00c0, 0x11e3: 0x00c0, + 0x11e4: 0x00c0, 0x11e5: 0x00c0, 0x11e6: 0x00c0, 0x11e7: 0x00c0, 0x11e8: 0x00c0, 0x11e9: 0x00c0, + 0x11ea: 0x00c0, 0x11eb: 0x00c0, 0x11ec: 0x00c0, 0x11ed: 0x00c0, 0x11ee: 0x00c0, 0x11ef: 0x00c0, + 0x11f0: 0x00c0, 0x11f1: 0x00c0, 0x11f2: 0x00c0, 0x11f3: 0x00c0, 0x11f4: 0x00c0, 0x11f5: 0x00c0, + 0x11f8: 0x00c0, 0x11f9: 0x00c0, 0x11fa: 0x00c0, 0x11fb: 0x00c0, + 0x11fc: 0x00c0, 0x11fd: 0x00c0, + // Block 0x48, offset 0x1200 + 0x1200: 0x0080, 0x1201: 0x00c0, 0x1202: 0x00c0, 0x1203: 0x00c0, 0x1204: 0x00c0, 0x1205: 0x00c0, + 0x1206: 0x00c0, 0x1207: 0x00c0, 0x1208: 0x00c0, 0x1209: 0x00c0, 0x120a: 0x00c0, 0x120b: 0x00c0, + 0x120c: 0x00c0, 0x120d: 0x00c0, 0x120e: 0x00c0, 0x120f: 0x00c0, 0x1210: 0x00c0, 0x1211: 0x00c0, + 0x1212: 0x00c0, 0x1213: 0x00c0, 0x1214: 0x00c0, 0x1215: 0x00c0, 0x1216: 0x00c0, 0x1217: 0x00c0, + 0x1218: 0x00c0, 0x1219: 0x00c0, 0x121a: 0x00c0, 0x121b: 0x00c0, 0x121c: 0x00c0, 0x121d: 0x00c0, + 0x121e: 0x00c0, 0x121f: 0x00c0, 0x1220: 0x00c0, 0x1221: 0x00c0, 0x1222: 0x00c0, 0x1223: 0x00c0, + 0x1224: 0x00c0, 0x1225: 0x00c0, 0x1226: 0x00c0, 0x1227: 0x00c0, 0x1228: 0x00c0, 0x1229: 0x00c0, + 0x122a: 0x00c0, 0x122b: 0x00c0, 0x122c: 0x00c0, 0x122d: 0x00c0, 0x122e: 0x00c0, 0x122f: 0x00c0, + 0x1230: 0x00c0, 0x1231: 0x00c0, 0x1232: 0x00c0, 0x1233: 0x00c0, 0x1234: 0x00c0, 0x1235: 0x00c0, + 0x1236: 0x00c0, 0x1237: 0x00c0, 0x1238: 0x00c0, 0x1239: 0x00c0, 0x123a: 0x00c0, 0x123b: 0x00c0, + 0x123c: 0x00c0, 0x123d: 0x00c0, 0x123e: 0x00c0, 0x123f: 0x00c0, + // Block 0x49, offset 0x1240 + 0x1240: 0x00c0, 0x1241: 0x00c0, 0x1242: 0x00c0, 0x1243: 0x00c0, 0x1244: 0x00c0, 0x1245: 0x00c0, + 0x1246: 0x00c0, 0x1247: 0x00c0, 0x1248: 0x00c0, 0x1249: 0x00c0, 0x124a: 0x00c0, 0x124b: 0x00c0, + 0x124c: 0x00c0, 0x124d: 0x00c0, 0x124e: 0x00c0, 0x124f: 0x00c0, 0x1250: 0x00c0, 0x1251: 0x00c0, + 0x1252: 0x00c0, 0x1253: 0x00c0, 0x1254: 0x00c0, 0x1255: 0x00c0, 0x1256: 0x00c0, 0x1257: 0x00c0, + 0x1258: 0x00c0, 0x1259: 0x00c0, 0x125a: 0x00c0, 0x125b: 0x00c0, 0x125c: 0x00c0, 0x125d: 0x00c0, + 0x125e: 0x00c0, 0x125f: 0x00c0, 0x1260: 0x00c0, 0x1261: 0x00c0, 0x1262: 0x00c0, 0x1263: 0x00c0, + 0x1264: 0x00c0, 0x1265: 0x00c0, 0x1266: 0x00c0, 0x1267: 0x00c0, 0x1268: 0x00c0, 0x1269: 0x00c0, + 0x126a: 0x00c0, 0x126b: 0x00c0, 0x126c: 0x00c0, 0x126d: 0x0080, 0x126e: 0x0080, 0x126f: 0x00c0, + 0x1270: 0x00c0, 0x1271: 0x00c0, 0x1272: 0x00c0, 0x1273: 0x00c0, 0x1274: 0x00c0, 0x1275: 0x00c0, + 0x1276: 0x00c0, 0x1277: 0x00c0, 0x1278: 0x00c0, 0x1279: 0x00c0, 0x127a: 0x00c0, 0x127b: 0x00c0, + 0x127c: 0x00c0, 0x127d: 0x00c0, 0x127e: 0x00c0, 0x127f: 0x00c0, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0080, 0x1281: 0x00c0, 0x1282: 0x00c0, 0x1283: 0x00c0, 0x1284: 0x00c0, 0x1285: 0x00c0, + 0x1286: 0x00c0, 0x1287: 0x00c0, 0x1288: 0x00c0, 0x1289: 0x00c0, 0x128a: 0x00c0, 0x128b: 0x00c0, + 0x128c: 0x00c0, 0x128d: 0x00c0, 0x128e: 0x00c0, 0x128f: 0x00c0, 0x1290: 0x00c0, 0x1291: 0x00c0, + 0x1292: 0x00c0, 0x1293: 0x00c0, 0x1294: 0x00c0, 0x1295: 0x00c0, 0x1296: 0x00c0, 0x1297: 0x00c0, + 0x1298: 0x00c0, 0x1299: 0x00c0, 0x129a: 0x00c0, 0x129b: 0x0080, 0x129c: 0x0080, + 0x12a0: 0x00c0, 0x12a1: 0x00c0, 0x12a2: 0x00c0, 0x12a3: 0x00c0, + 0x12a4: 0x00c0, 0x12a5: 0x00c0, 0x12a6: 0x00c0, 0x12a7: 0x00c0, 0x12a8: 0x00c0, 0x12a9: 0x00c0, + 0x12aa: 0x00c0, 0x12ab: 0x00c0, 0x12ac: 0x00c0, 0x12ad: 0x00c0, 0x12ae: 0x00c0, 0x12af: 0x00c0, + 0x12b0: 0x00c0, 0x12b1: 0x00c0, 0x12b2: 0x00c0, 0x12b3: 0x00c0, 0x12b4: 0x00c0, 0x12b5: 0x00c0, + 0x12b6: 0x00c0, 0x12b7: 0x00c0, 0x12b8: 0x00c0, 0x12b9: 0x00c0, 0x12ba: 0x00c0, 0x12bb: 0x00c0, + 0x12bc: 0x00c0, 0x12bd: 0x00c0, 0x12be: 0x00c0, 0x12bf: 0x00c0, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x00c0, 0x12c1: 0x00c0, 0x12c2: 0x00c0, 0x12c3: 0x00c0, 0x12c4: 0x00c0, 0x12c5: 0x00c0, + 0x12c6: 0x00c0, 0x12c7: 0x00c0, 0x12c8: 0x00c0, 0x12c9: 0x00c0, 0x12ca: 0x00c0, 0x12cb: 0x00c0, + 0x12cc: 0x00c0, 0x12cd: 0x00c0, 0x12ce: 0x00c0, 0x12cf: 0x00c0, 0x12d0: 0x00c0, 0x12d1: 0x00c0, + 0x12d2: 0x00c0, 0x12d3: 0x00c0, 0x12d4: 0x00c0, 0x12d5: 0x00c0, 0x12d6: 0x00c0, 0x12d7: 0x00c0, + 0x12d8: 0x00c0, 0x12d9: 0x00c0, 0x12da: 0x00c0, 0x12db: 0x00c0, 0x12dc: 0x00c0, 0x12dd: 0x00c0, + 0x12de: 0x00c0, 0x12df: 0x00c0, 0x12e0: 0x00c0, 0x12e1: 0x00c0, 0x12e2: 0x00c0, 0x12e3: 0x00c0, + 0x12e4: 0x00c0, 0x12e5: 0x00c0, 0x12e6: 0x00c0, 0x12e7: 0x00c0, 0x12e8: 0x00c0, 0x12e9: 0x00c0, + 0x12ea: 0x00c0, 0x12eb: 0x0080, 0x12ec: 0x0080, 0x12ed: 0x0080, 0x12ee: 0x0080, 0x12ef: 0x0080, + 0x12f0: 0x0080, 0x12f1: 0x00c0, 0x12f2: 0x00c0, 0x12f3: 0x00c0, 0x12f4: 0x00c0, 0x12f5: 0x00c0, + 0x12f6: 0x00c0, 0x12f7: 0x00c0, 0x12f8: 0x00c0, + // Block 0x4c, offset 0x1300 + 0x1300: 0x00c0, 0x1301: 0x00c0, 0x1302: 0x00c0, 0x1303: 0x00c0, 0x1304: 0x00c0, 0x1305: 0x00c0, + 0x1306: 0x00c0, 0x1307: 0x00c0, 0x1308: 0x00c0, 0x1309: 0x00c0, 0x130a: 0x00c0, 0x130b: 0x00c0, + 0x130c: 0x00c0, 0x130e: 0x00c0, 0x130f: 0x00c0, 0x1310: 0x00c0, 0x1311: 0x00c0, + 0x1312: 0x00c3, 0x1313: 0x00c3, 0x1314: 0x00c6, + 0x1320: 0x00c0, 0x1321: 0x00c0, 0x1322: 0x00c0, 0x1323: 0x00c0, + 0x1324: 0x00c0, 0x1325: 0x00c0, 0x1326: 0x00c0, 0x1327: 0x00c0, 0x1328: 0x00c0, 0x1329: 0x00c0, + 0x132a: 0x00c0, 0x132b: 0x00c0, 0x132c: 0x00c0, 0x132d: 0x00c0, 0x132e: 0x00c0, 0x132f: 0x00c0, + 0x1330: 0x00c0, 0x1331: 0x00c0, 0x1332: 0x00c3, 0x1333: 0x00c3, 0x1334: 0x00c6, 0x1335: 0x0080, + 0x1336: 0x0080, + // Block 0x4d, offset 0x1340 + 0x1340: 0x00c0, 0x1341: 0x00c0, 0x1342: 0x00c0, 0x1343: 0x00c0, 0x1344: 0x00c0, 0x1345: 0x00c0, + 0x1346: 0x00c0, 0x1347: 0x00c0, 0x1348: 0x00c0, 0x1349: 0x00c0, 0x134a: 0x00c0, 0x134b: 0x00c0, + 0x134c: 0x00c0, 0x134d: 0x00c0, 0x134e: 0x00c0, 0x134f: 0x00c0, 0x1350: 0x00c0, 0x1351: 0x00c0, + 0x1352: 0x00c3, 0x1353: 0x00c3, + 0x1360: 0x00c0, 0x1361: 0x00c0, 0x1362: 0x00c0, 0x1363: 0x00c0, + 0x1364: 0x00c0, 0x1365: 0x00c0, 0x1366: 0x00c0, 0x1367: 0x00c0, 0x1368: 0x00c0, 0x1369: 0x00c0, + 0x136a: 0x00c0, 0x136b: 0x00c0, 0x136c: 0x00c0, 0x136e: 0x00c0, 0x136f: 0x00c0, + 0x1370: 0x00c0, 0x1372: 0x00c3, 0x1373: 0x00c3, + // Block 0x4e, offset 0x1380 + 0x1380: 0x00c0, 0x1381: 0x00c0, 0x1382: 0x00c0, 0x1383: 0x00c0, 0x1384: 0x00c0, 0x1385: 0x00c0, + 0x1386: 0x00c0, 0x1387: 0x00c0, 0x1388: 0x00c0, 0x1389: 0x00c0, 0x138a: 0x00c0, 0x138b: 0x00c0, + 0x138c: 0x00c0, 0x138d: 0x00c0, 0x138e: 0x00c0, 0x138f: 0x00c0, 0x1390: 0x00c0, 0x1391: 0x00c0, + 0x1392: 0x00c0, 0x1393: 0x00c0, 0x1394: 0x00c0, 0x1395: 0x00c0, 0x1396: 0x00c0, 0x1397: 0x00c0, + 0x1398: 0x00c0, 0x1399: 0x00c0, 0x139a: 0x00c0, 0x139b: 0x00c0, 0x139c: 0x00c0, 0x139d: 0x00c0, + 0x139e: 0x00c0, 0x139f: 0x00c0, 0x13a0: 0x00c0, 0x13a1: 0x00c0, 0x13a2: 0x00c0, 0x13a3: 0x00c0, + 0x13a4: 0x00c0, 0x13a5: 0x00c0, 0x13a6: 0x00c0, 0x13a7: 0x00c0, 0x13a8: 0x00c0, 0x13a9: 0x00c0, + 0x13aa: 0x00c0, 0x13ab: 0x00c0, 0x13ac: 0x00c0, 0x13ad: 0x00c0, 0x13ae: 0x00c0, 0x13af: 0x00c0, + 0x13b0: 0x00c0, 0x13b1: 0x00c0, 0x13b2: 0x00c0, 0x13b3: 0x00c0, 0x13b4: 0x0040, 0x13b5: 0x0040, + 0x13b6: 0x00c0, 0x13b7: 0x00c3, 0x13b8: 0x00c3, 0x13b9: 0x00c3, 0x13ba: 0x00c3, 0x13bb: 0x00c3, + 0x13bc: 0x00c3, 0x13bd: 0x00c3, 0x13be: 0x00c0, 0x13bf: 0x00c0, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x00c0, 0x13c1: 0x00c0, 0x13c2: 0x00c0, 0x13c3: 0x00c0, 0x13c4: 0x00c0, 0x13c5: 0x00c0, + 0x13c6: 0x00c3, 0x13c7: 0x00c0, 0x13c8: 0x00c0, 0x13c9: 0x00c3, 0x13ca: 0x00c3, 0x13cb: 0x00c3, + 0x13cc: 0x00c3, 0x13cd: 0x00c3, 0x13ce: 0x00c3, 0x13cf: 0x00c3, 0x13d0: 0x00c3, 0x13d1: 0x00c3, + 0x13d2: 0x00c6, 0x13d3: 0x00c3, 0x13d4: 0x0080, 0x13d5: 0x0080, 0x13d6: 0x0080, 0x13d7: 0x00c0, + 0x13d8: 0x0080, 0x13d9: 0x0080, 0x13da: 0x0080, 0x13db: 0x0080, 0x13dc: 0x00c0, 0x13dd: 0x00c3, + 0x13e0: 0x00c0, 0x13e1: 0x00c0, 0x13e2: 0x00c0, 0x13e3: 0x00c0, + 0x13e4: 0x00c0, 0x13e5: 0x00c0, 0x13e6: 0x00c0, 0x13e7: 0x00c0, 0x13e8: 0x00c0, 0x13e9: 0x00c0, + 0x13f0: 0x0080, 0x13f1: 0x0080, 0x13f2: 0x0080, 0x13f3: 0x0080, 0x13f4: 0x0080, 0x13f5: 0x0080, + 0x13f6: 0x0080, 0x13f7: 0x0080, 0x13f8: 0x0080, 0x13f9: 0x0080, + // Block 0x50, offset 0x1400 + 0x1400: 0x0080, 0x1401: 0x0080, 0x1402: 0x0080, 0x1403: 0x0080, 0x1404: 0x0080, 0x1405: 0x0080, + 0x1406: 0x0080, 0x1407: 0x0082, 0x1408: 0x0080, 0x1409: 0x0080, 0x140a: 0x0080, 0x140b: 0x0040, + 0x140c: 0x0040, 0x140d: 0x0040, 0x140e: 0x0040, 0x1410: 0x00c0, 0x1411: 0x00c0, + 0x1412: 0x00c0, 0x1413: 0x00c0, 0x1414: 0x00c0, 0x1415: 0x00c0, 0x1416: 0x00c0, 0x1417: 0x00c0, + 0x1418: 0x00c0, 0x1419: 0x00c0, + 0x1420: 0x00c2, 0x1421: 0x00c2, 0x1422: 0x00c2, 0x1423: 0x00c2, + 0x1424: 0x00c2, 0x1425: 0x00c2, 0x1426: 0x00c2, 0x1427: 0x00c2, 0x1428: 0x00c2, 0x1429: 0x00c2, + 0x142a: 0x00c2, 0x142b: 0x00c2, 0x142c: 0x00c2, 0x142d: 0x00c2, 0x142e: 0x00c2, 0x142f: 0x00c2, + 0x1430: 0x00c2, 0x1431: 0x00c2, 0x1432: 0x00c2, 0x1433: 0x00c2, 0x1434: 0x00c2, 0x1435: 0x00c2, + 0x1436: 0x00c2, 0x1437: 0x00c2, 0x1438: 0x00c2, 0x1439: 0x00c2, 0x143a: 0x00c2, 0x143b: 0x00c2, + 0x143c: 0x00c2, 0x143d: 0x00c2, 0x143e: 0x00c2, 0x143f: 0x00c2, + // Block 0x51, offset 0x1440 + 0x1440: 0x00c2, 0x1441: 0x00c2, 0x1442: 0x00c2, 0x1443: 0x00c2, 0x1444: 0x00c2, 0x1445: 0x00c2, + 0x1446: 0x00c2, 0x1447: 0x00c2, 0x1448: 0x00c2, 0x1449: 0x00c2, 0x144a: 0x00c2, 0x144b: 0x00c2, + 0x144c: 0x00c2, 0x144d: 0x00c2, 0x144e: 0x00c2, 0x144f: 0x00c2, 0x1450: 0x00c2, 0x1451: 0x00c2, + 0x1452: 0x00c2, 0x1453: 0x00c2, 0x1454: 0x00c2, 0x1455: 0x00c2, 0x1456: 0x00c2, 0x1457: 0x00c2, + 0x1458: 0x00c2, 0x1459: 0x00c2, 0x145a: 0x00c2, 0x145b: 0x00c2, 0x145c: 0x00c2, 0x145d: 0x00c2, + 0x145e: 0x00c2, 0x145f: 0x00c2, 0x1460: 0x00c2, 0x1461: 0x00c2, 0x1462: 0x00c2, 0x1463: 0x00c2, + 0x1464: 0x00c2, 0x1465: 0x00c2, 0x1466: 0x00c2, 0x1467: 0x00c2, 0x1468: 0x00c2, 0x1469: 0x00c2, + 0x146a: 0x00c2, 0x146b: 0x00c2, 0x146c: 0x00c2, 0x146d: 0x00c2, 0x146e: 0x00c2, 0x146f: 0x00c2, + 0x1470: 0x00c2, 0x1471: 0x00c2, 0x1472: 0x00c2, 0x1473: 0x00c2, 0x1474: 0x00c2, 0x1475: 0x00c2, + 0x1476: 0x00c2, 0x1477: 0x00c2, + // Block 0x52, offset 0x1480 + 0x1480: 0x00c0, 0x1481: 0x00c0, 0x1482: 0x00c0, 0x1483: 0x00c0, 0x1484: 0x00c0, 0x1485: 0x00c3, + 0x1486: 0x00c3, 0x1487: 0x00c2, 0x1488: 0x00c2, 0x1489: 0x00c2, 0x148a: 0x00c2, 0x148b: 0x00c2, + 0x148c: 0x00c2, 0x148d: 0x00c2, 0x148e: 0x00c2, 0x148f: 0x00c2, 0x1490: 0x00c2, 0x1491: 0x00c2, + 0x1492: 0x00c2, 0x1493: 0x00c2, 0x1494: 0x00c2, 0x1495: 0x00c2, 0x1496: 0x00c2, 0x1497: 0x00c2, + 0x1498: 0x00c2, 0x1499: 0x00c2, 0x149a: 0x00c2, 0x149b: 0x00c2, 0x149c: 0x00c2, 0x149d: 0x00c2, + 0x149e: 0x00c2, 0x149f: 0x00c2, 0x14a0: 0x00c2, 0x14a1: 0x00c2, 0x14a2: 0x00c2, 0x14a3: 0x00c2, + 0x14a4: 0x00c2, 0x14a5: 0x00c2, 0x14a6: 0x00c2, 0x14a7: 0x00c2, 0x14a8: 0x00c2, 0x14a9: 0x00c3, + 0x14aa: 0x00c2, + 0x14b0: 0x00c0, 0x14b1: 0x00c0, 0x14b2: 0x00c0, 0x14b3: 0x00c0, 0x14b4: 0x00c0, 0x14b5: 0x00c0, + 0x14b6: 0x00c0, 0x14b7: 0x00c0, 0x14b8: 0x00c0, 0x14b9: 0x00c0, 0x14ba: 0x00c0, 0x14bb: 0x00c0, + 0x14bc: 0x00c0, 0x14bd: 0x00c0, 0x14be: 0x00c0, 0x14bf: 0x00c0, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x00c0, 0x14c1: 0x00c0, 0x14c2: 0x00c0, 0x14c3: 0x00c0, 0x14c4: 0x00c0, 0x14c5: 0x00c0, + 0x14c6: 0x00c0, 0x14c7: 0x00c0, 0x14c8: 0x00c0, 0x14c9: 0x00c0, 0x14ca: 0x00c0, 0x14cb: 0x00c0, + 0x14cc: 0x00c0, 0x14cd: 0x00c0, 0x14ce: 0x00c0, 0x14cf: 0x00c0, 0x14d0: 0x00c0, 0x14d1: 0x00c0, + 0x14d2: 0x00c0, 0x14d3: 0x00c0, 0x14d4: 0x00c0, 0x14d5: 0x00c0, 0x14d6: 0x00c0, 0x14d7: 0x00c0, + 0x14d8: 0x00c0, 0x14d9: 0x00c0, 0x14da: 0x00c0, 0x14db: 0x00c0, 0x14dc: 0x00c0, 0x14dd: 0x00c0, + 0x14de: 0x00c0, 0x14df: 0x00c0, 0x14e0: 0x00c0, 0x14e1: 0x00c0, 0x14e2: 0x00c0, 0x14e3: 0x00c0, + 0x14e4: 0x00c0, 0x14e5: 0x00c0, 0x14e6: 0x00c0, 0x14e7: 0x00c0, 0x14e8: 0x00c0, 0x14e9: 0x00c0, + 0x14ea: 0x00c0, 0x14eb: 0x00c0, 0x14ec: 0x00c0, 0x14ed: 0x00c0, 0x14ee: 0x00c0, 0x14ef: 0x00c0, + 0x14f0: 0x00c0, 0x14f1: 0x00c0, 0x14f2: 0x00c0, 0x14f3: 0x00c0, 0x14f4: 0x00c0, 0x14f5: 0x00c0, + // Block 0x54, offset 0x1500 + 0x1500: 0x00c0, 0x1501: 0x00c0, 0x1502: 0x00c0, 0x1503: 0x00c0, 0x1504: 0x00c0, 0x1505: 0x00c0, + 0x1506: 0x00c0, 0x1507: 0x00c0, 0x1508: 0x00c0, 0x1509: 0x00c0, 0x150a: 0x00c0, 0x150b: 0x00c0, + 0x150c: 0x00c0, 0x150d: 0x00c0, 0x150e: 0x00c0, 0x150f: 0x00c0, 0x1510: 0x00c0, 0x1511: 0x00c0, + 0x1512: 0x00c0, 0x1513: 0x00c0, 0x1514: 0x00c0, 0x1515: 0x00c0, 0x1516: 0x00c0, 0x1517: 0x00c0, + 0x1518: 0x00c0, 0x1519: 0x00c0, 0x151a: 0x00c0, 0x151b: 0x00c0, 0x151c: 0x00c0, 0x151d: 0x00c0, + 0x151e: 0x00c0, 0x1520: 0x00c3, 0x1521: 0x00c3, 0x1522: 0x00c3, 0x1523: 0x00c0, + 0x1524: 0x00c0, 0x1525: 0x00c0, 0x1526: 0x00c0, 0x1527: 0x00c3, 0x1528: 0x00c3, 0x1529: 0x00c0, + 0x152a: 0x00c0, 0x152b: 0x00c0, + 0x1530: 0x00c0, 0x1531: 0x00c0, 0x1532: 0x00c3, 0x1533: 0x00c0, 0x1534: 0x00c0, 0x1535: 0x00c0, + 0x1536: 0x00c0, 0x1537: 0x00c0, 0x1538: 0x00c0, 0x1539: 0x00c3, 0x153a: 0x00c3, 0x153b: 0x00c3, + // Block 0x55, offset 0x1540 + 0x1540: 0x0080, 0x1544: 0x0080, 0x1545: 0x0080, + 0x1546: 0x00c0, 0x1547: 0x00c0, 0x1548: 0x00c0, 0x1549: 0x00c0, 0x154a: 0x00c0, 0x154b: 0x00c0, + 0x154c: 0x00c0, 0x154d: 0x00c0, 0x154e: 0x00c0, 0x154f: 0x00c0, 0x1550: 0x00c0, 0x1551: 0x00c0, + 0x1552: 0x00c0, 0x1553: 0x00c0, 0x1554: 0x00c0, 0x1555: 0x00c0, 0x1556: 0x00c0, 0x1557: 0x00c0, + 0x1558: 0x00c0, 0x1559: 0x00c0, 0x155a: 0x00c0, 0x155b: 0x00c0, 0x155c: 0x00c0, 0x155d: 0x00c0, + 0x155e: 0x00c0, 0x155f: 0x00c0, 0x1560: 0x00c0, 0x1561: 0x00c0, 0x1562: 0x00c0, 0x1563: 0x00c0, + 0x1564: 0x00c0, 0x1565: 0x00c0, 0x1566: 0x00c0, 0x1567: 0x00c0, 0x1568: 0x00c0, 0x1569: 0x00c0, + 0x156a: 0x00c0, 0x156b: 0x00c0, 0x156c: 0x00c0, 0x156d: 0x00c0, + 0x1570: 0x00c0, 0x1571: 0x00c0, 0x1572: 0x00c0, 0x1573: 0x00c0, 0x1574: 0x00c0, + // Block 0x56, offset 0x1580 + 0x1580: 0x00c0, 0x1581: 0x00c0, 0x1582: 0x00c0, 0x1583: 0x00c0, 0x1584: 0x00c0, 0x1585: 0x00c0, + 0x1586: 0x00c0, 0x1587: 0x00c0, 0x1588: 0x00c0, 0x1589: 0x00c0, 0x158a: 0x00c0, 0x158b: 0x00c0, + 0x158c: 0x00c0, 0x158d: 0x00c0, 0x158e: 0x00c0, 0x158f: 0x00c0, 0x1590: 0x00c0, 0x1591: 0x00c0, + 0x1592: 0x00c0, 0x1593: 0x00c0, 0x1594: 0x00c0, 0x1595: 0x00c0, 0x1596: 0x00c0, 0x1597: 0x00c0, + 0x1598: 0x00c0, 0x1599: 0x00c0, 0x159a: 0x00c0, 0x159b: 0x00c0, 0x159c: 0x00c0, 0x159d: 0x00c0, + 0x159e: 0x00c0, 0x159f: 0x00c0, 0x15a0: 0x00c0, 0x15a1: 0x00c0, 0x15a2: 0x00c0, 0x15a3: 0x00c0, + 0x15a4: 0x00c0, 0x15a5: 0x00c0, 0x15a6: 0x00c0, 0x15a7: 0x00c0, 0x15a8: 0x00c0, 0x15a9: 0x00c0, + 0x15aa: 0x00c0, 0x15ab: 0x00c0, + 0x15b0: 0x00c0, 0x15b1: 0x00c0, 0x15b2: 0x00c0, 0x15b3: 0x00c0, 0x15b4: 0x00c0, 0x15b5: 0x00c0, + 0x15b6: 0x00c0, 0x15b7: 0x00c0, 0x15b8: 0x00c0, 0x15b9: 0x00c0, 0x15ba: 0x00c0, 0x15bb: 0x00c0, + 0x15bc: 0x00c0, 0x15bd: 0x00c0, 0x15be: 0x00c0, 0x15bf: 0x00c0, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x00c0, 0x15c1: 0x00c0, 0x15c2: 0x00c0, 0x15c3: 0x00c0, 0x15c4: 0x00c0, 0x15c5: 0x00c0, + 0x15c6: 0x00c0, 0x15c7: 0x00c0, 0x15c8: 0x00c0, 0x15c9: 0x00c0, + 0x15d0: 0x00c0, 0x15d1: 0x00c0, + 0x15d2: 0x00c0, 0x15d3: 0x00c0, 0x15d4: 0x00c0, 0x15d5: 0x00c0, 0x15d6: 0x00c0, 0x15d7: 0x00c0, + 0x15d8: 0x00c0, 0x15d9: 0x00c0, 0x15da: 0x0080, + 0x15de: 0x0080, 0x15df: 0x0080, 0x15e0: 0x0080, 0x15e1: 0x0080, 0x15e2: 0x0080, 0x15e3: 0x0080, + 0x15e4: 0x0080, 0x15e5: 0x0080, 0x15e6: 0x0080, 0x15e7: 0x0080, 0x15e8: 0x0080, 0x15e9: 0x0080, + 0x15ea: 0x0080, 0x15eb: 0x0080, 0x15ec: 0x0080, 0x15ed: 0x0080, 0x15ee: 0x0080, 0x15ef: 0x0080, + 0x15f0: 0x0080, 0x15f1: 0x0080, 0x15f2: 0x0080, 0x15f3: 0x0080, 0x15f4: 0x0080, 0x15f5: 0x0080, + 0x15f6: 0x0080, 0x15f7: 0x0080, 0x15f8: 0x0080, 0x15f9: 0x0080, 0x15fa: 0x0080, 0x15fb: 0x0080, + 0x15fc: 0x0080, 0x15fd: 0x0080, 0x15fe: 0x0080, 0x15ff: 0x0080, + // Block 0x58, offset 0x1600 + 0x1600: 0x00c0, 0x1601: 0x00c0, 0x1602: 0x00c0, 0x1603: 0x00c0, 0x1604: 0x00c0, 0x1605: 0x00c0, + 0x1606: 0x00c0, 0x1607: 0x00c0, 0x1608: 0x00c0, 0x1609: 0x00c0, 0x160a: 0x00c0, 0x160b: 0x00c0, + 0x160c: 0x00c0, 0x160d: 0x00c0, 0x160e: 0x00c0, 0x160f: 0x00c0, 0x1610: 0x00c0, 0x1611: 0x00c0, + 0x1612: 0x00c0, 0x1613: 0x00c0, 0x1614: 0x00c0, 0x1615: 0x00c0, 0x1616: 0x00c0, 0x1617: 0x00c3, + 0x1618: 0x00c3, 0x1619: 0x00c0, 0x161a: 0x00c0, 0x161b: 0x00c3, + 0x161e: 0x0080, 0x161f: 0x0080, 0x1620: 0x00c0, 0x1621: 0x00c0, 0x1622: 0x00c0, 0x1623: 0x00c0, + 0x1624: 0x00c0, 0x1625: 0x00c0, 0x1626: 0x00c0, 0x1627: 0x00c0, 0x1628: 0x00c0, 0x1629: 0x00c0, + 0x162a: 0x00c0, 0x162b: 0x00c0, 0x162c: 0x00c0, 0x162d: 0x00c0, 0x162e: 0x00c0, 0x162f: 0x00c0, + 0x1630: 0x00c0, 0x1631: 0x00c0, 0x1632: 0x00c0, 0x1633: 0x00c0, 0x1634: 0x00c0, 0x1635: 0x00c0, + 0x1636: 0x00c0, 0x1637: 0x00c0, 0x1638: 0x00c0, 0x1639: 0x00c0, 0x163a: 0x00c0, 0x163b: 0x00c0, + 0x163c: 0x00c0, 0x163d: 0x00c0, 0x163e: 0x00c0, 0x163f: 0x00c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x00c0, 0x1641: 0x00c0, 0x1642: 0x00c0, 0x1643: 0x00c0, 0x1644: 0x00c0, 0x1645: 0x00c0, + 0x1646: 0x00c0, 0x1647: 0x00c0, 0x1648: 0x00c0, 0x1649: 0x00c0, 0x164a: 0x00c0, 0x164b: 0x00c0, + 0x164c: 0x00c0, 0x164d: 0x00c0, 0x164e: 0x00c0, 0x164f: 0x00c0, 0x1650: 0x00c0, 0x1651: 0x00c0, + 0x1652: 0x00c0, 0x1653: 0x00c0, 0x1654: 0x00c0, 0x1655: 0x00c0, 0x1656: 0x00c3, 0x1657: 0x00c0, + 0x1658: 0x00c3, 0x1659: 0x00c3, 0x165a: 0x00c3, 0x165b: 0x00c3, 0x165c: 0x00c3, 0x165d: 0x00c3, + 0x165e: 0x00c3, 0x1660: 0x00c6, 0x1661: 0x00c0, 0x1662: 0x00c3, 0x1663: 0x00c0, + 0x1664: 0x00c0, 0x1665: 0x00c3, 0x1666: 0x00c3, 0x1667: 0x00c3, 0x1668: 0x00c3, 0x1669: 0x00c3, + 0x166a: 0x00c3, 0x166b: 0x00c3, 0x166c: 0x00c3, 0x166d: 0x00c0, 0x166e: 0x00c0, 0x166f: 0x00c0, + 0x1670: 0x00c0, 0x1671: 0x00c0, 0x1672: 0x00c0, 0x1673: 0x00c3, 0x1674: 0x00c3, 0x1675: 0x00c3, + 0x1676: 0x00c3, 0x1677: 0x00c3, 0x1678: 0x00c3, 0x1679: 0x00c3, 0x167a: 0x00c3, 0x167b: 0x00c3, + 0x167c: 0x00c3, 0x167f: 0x00c3, + // Block 0x5a, offset 0x1680 + 0x1680: 0x00c0, 0x1681: 0x00c0, 0x1682: 0x00c0, 0x1683: 0x00c0, 0x1684: 0x00c0, 0x1685: 0x00c0, + 0x1686: 0x00c0, 0x1687: 0x00c0, 0x1688: 0x00c0, 0x1689: 0x00c0, + 0x1690: 0x00c0, 0x1691: 0x00c0, + 0x1692: 0x00c0, 0x1693: 0x00c0, 0x1694: 0x00c0, 0x1695: 0x00c0, 0x1696: 0x00c0, 0x1697: 0x00c0, + 0x1698: 0x00c0, 0x1699: 0x00c0, + 0x16a0: 0x0080, 0x16a1: 0x0080, 0x16a2: 0x0080, 0x16a3: 0x0080, + 0x16a4: 0x0080, 0x16a5: 0x0080, 0x16a6: 0x0080, 0x16a7: 0x00c0, 0x16a8: 0x0080, 0x16a9: 0x0080, + 0x16aa: 0x0080, 0x16ab: 0x0080, 0x16ac: 0x0080, 0x16ad: 0x0080, + 0x16b0: 0x00c3, 0x16b1: 0x00c3, 0x16b2: 0x00c3, 0x16b3: 0x00c3, 0x16b4: 0x00c3, 0x16b5: 0x00c3, + 0x16b6: 0x00c3, 0x16b7: 0x00c3, 0x16b8: 0x00c3, 0x16b9: 0x00c3, 0x16ba: 0x00c3, 0x16bb: 0x00c3, + 0x16bc: 0x00c3, 0x16bd: 0x00c3, 0x16be: 0x0083, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x00c3, 0x16c1: 0x00c3, 0x16c2: 0x00c3, 0x16c3: 0x00c3, 0x16c4: 0x00c0, 0x16c5: 0x00c0, + 0x16c6: 0x00c0, 0x16c7: 0x00c0, 0x16c8: 0x00c0, 0x16c9: 0x00c0, 0x16ca: 0x00c0, 0x16cb: 0x00c0, + 0x16cc: 0x00c0, 0x16cd: 0x00c0, 0x16ce: 0x00c0, 0x16cf: 0x00c0, 0x16d0: 0x00c0, 0x16d1: 0x00c0, + 0x16d2: 0x00c0, 0x16d3: 0x00c0, 0x16d4: 0x00c0, 0x16d5: 0x00c0, 0x16d6: 0x00c0, 0x16d7: 0x00c0, + 0x16d8: 0x00c0, 0x16d9: 0x00c0, 0x16da: 0x00c0, 0x16db: 0x00c0, 0x16dc: 0x00c0, 0x16dd: 0x00c0, + 0x16de: 0x00c0, 0x16df: 0x00c0, 0x16e0: 0x00c0, 0x16e1: 0x00c0, 0x16e2: 0x00c0, 0x16e3: 0x00c0, + 0x16e4: 0x00c0, 0x16e5: 0x00c0, 0x16e6: 0x00c0, 0x16e7: 0x00c0, 0x16e8: 0x00c0, 0x16e9: 0x00c0, + 0x16ea: 0x00c0, 0x16eb: 0x00c0, 0x16ec: 0x00c0, 0x16ed: 0x00c0, 0x16ee: 0x00c0, 0x16ef: 0x00c0, + 0x16f0: 0x00c0, 0x16f1: 0x00c0, 0x16f2: 0x00c0, 0x16f3: 0x00c0, 0x16f4: 0x00c3, 0x16f5: 0x00c0, + 0x16f6: 0x00c3, 0x16f7: 0x00c3, 0x16f8: 0x00c3, 0x16f9: 0x00c3, 0x16fa: 0x00c3, 0x16fb: 0x00c0, + 0x16fc: 0x00c3, 0x16fd: 0x00c0, 0x16fe: 0x00c0, 0x16ff: 0x00c0, + // Block 0x5c, offset 0x1700 + 0x1700: 0x00c0, 0x1701: 0x00c0, 0x1702: 0x00c3, 0x1703: 0x00c0, 0x1704: 0x00c5, 0x1705: 0x00c0, + 0x1706: 0x00c0, 0x1707: 0x00c0, 0x1708: 0x00c0, 0x1709: 0x00c0, 0x170a: 0x00c0, 0x170b: 0x00c0, + 0x1710: 0x00c0, 0x1711: 0x00c0, + 0x1712: 0x00c0, 0x1713: 0x00c0, 0x1714: 0x00c0, 0x1715: 0x00c0, 0x1716: 0x00c0, 0x1717: 0x00c0, + 0x1718: 0x00c0, 0x1719: 0x00c0, 0x171a: 0x0080, 0x171b: 0x0080, 0x171c: 0x0080, 0x171d: 0x0080, + 0x171e: 0x0080, 0x171f: 0x0080, 0x1720: 0x0080, 0x1721: 0x0080, 0x1722: 0x0080, 0x1723: 0x0080, + 0x1724: 0x0080, 0x1725: 0x0080, 0x1726: 0x0080, 0x1727: 0x0080, 0x1728: 0x0080, 0x1729: 0x0080, + 0x172a: 0x0080, 0x172b: 0x00c3, 0x172c: 0x00c3, 0x172d: 0x00c3, 0x172e: 0x00c3, 0x172f: 0x00c3, + 0x1730: 0x00c3, 0x1731: 0x00c3, 0x1732: 0x00c3, 0x1733: 0x00c3, 0x1734: 0x0080, 0x1735: 0x0080, + 0x1736: 0x0080, 0x1737: 0x0080, 0x1738: 0x0080, 0x1739: 0x0080, 0x173a: 0x0080, 0x173b: 0x0080, + 0x173c: 0x0080, + // Block 0x5d, offset 0x1740 + 0x1740: 0x00c3, 0x1741: 0x00c3, 0x1742: 0x00c0, 0x1743: 0x00c0, 0x1744: 0x00c0, 0x1745: 0x00c0, + 0x1746: 0x00c0, 0x1747: 0x00c0, 0x1748: 0x00c0, 0x1749: 0x00c0, 0x174a: 0x00c0, 0x174b: 0x00c0, + 0x174c: 0x00c0, 0x174d: 0x00c0, 0x174e: 0x00c0, 0x174f: 0x00c0, 0x1750: 0x00c0, 0x1751: 0x00c0, + 0x1752: 0x00c0, 0x1753: 0x00c0, 0x1754: 0x00c0, 0x1755: 0x00c0, 0x1756: 0x00c0, 0x1757: 0x00c0, + 0x1758: 0x00c0, 0x1759: 0x00c0, 0x175a: 0x00c0, 0x175b: 0x00c0, 0x175c: 0x00c0, 0x175d: 0x00c0, + 0x175e: 0x00c0, 0x175f: 0x00c0, 0x1760: 0x00c0, 0x1761: 0x00c0, 0x1762: 0x00c3, 0x1763: 0x00c3, + 0x1764: 0x00c3, 0x1765: 0x00c3, 0x1766: 0x00c0, 0x1767: 0x00c0, 0x1768: 0x00c3, 0x1769: 0x00c3, + 0x176a: 0x00c5, 0x176b: 0x00c6, 0x176c: 0x00c3, 0x176d: 0x00c3, 0x176e: 0x00c0, 0x176f: 0x00c0, + 0x1770: 0x00c0, 0x1771: 0x00c0, 0x1772: 0x00c0, 0x1773: 0x00c0, 0x1774: 0x00c0, 0x1775: 0x00c0, + 0x1776: 0x00c0, 0x1777: 0x00c0, 0x1778: 0x00c0, 0x1779: 0x00c0, 0x177a: 0x00c0, 0x177b: 0x00c0, + 0x177c: 0x00c0, 0x177d: 0x00c0, 0x177e: 0x00c0, 0x177f: 0x00c0, + // Block 0x5e, offset 0x1780 + 0x1780: 0x00c0, 0x1781: 0x00c0, 0x1782: 0x00c0, 0x1783: 0x00c0, 0x1784: 0x00c0, 0x1785: 0x00c0, + 0x1786: 0x00c0, 0x1787: 0x00c0, 0x1788: 0x00c0, 0x1789: 0x00c0, 0x178a: 0x00c0, 0x178b: 0x00c0, + 0x178c: 0x00c0, 0x178d: 0x00c0, 0x178e: 0x00c0, 0x178f: 0x00c0, 0x1790: 0x00c0, 0x1791: 0x00c0, + 0x1792: 0x00c0, 0x1793: 0x00c0, 0x1794: 0x00c0, 0x1795: 0x00c0, 0x1796: 0x00c0, 0x1797: 0x00c0, + 0x1798: 0x00c0, 0x1799: 0x00c0, 0x179a: 0x00c0, 0x179b: 0x00c0, 0x179c: 0x00c0, 0x179d: 0x00c0, + 0x179e: 0x00c0, 0x179f: 0x00c0, 0x17a0: 0x00c0, 0x17a1: 0x00c0, 0x17a2: 0x00c0, 0x17a3: 0x00c0, + 0x17a4: 0x00c0, 0x17a5: 0x00c0, 0x17a6: 0x00c3, 0x17a7: 0x00c0, 0x17a8: 0x00c3, 0x17a9: 0x00c3, + 0x17aa: 0x00c0, 0x17ab: 0x00c0, 0x17ac: 0x00c0, 0x17ad: 0x00c3, 0x17ae: 0x00c0, 0x17af: 0x00c3, + 0x17b0: 0x00c3, 0x17b1: 0x00c3, 0x17b2: 0x00c5, 0x17b3: 0x00c5, + 0x17bc: 0x0080, 0x17bd: 0x0080, 0x17be: 0x0080, 0x17bf: 0x0080, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x00c0, 0x17c1: 0x00c0, 0x17c2: 0x00c0, 0x17c3: 0x00c0, 0x17c4: 0x00c0, 0x17c5: 0x00c0, + 0x17c6: 0x00c0, 0x17c7: 0x00c0, 0x17c8: 0x00c0, 0x17c9: 0x00c0, 0x17ca: 0x00c0, 0x17cb: 0x00c0, + 0x17cc: 0x00c0, 0x17cd: 0x00c0, 0x17ce: 0x00c0, 0x17cf: 0x00c0, 0x17d0: 0x00c0, 0x17d1: 0x00c0, + 0x17d2: 0x00c0, 0x17d3: 0x00c0, 0x17d4: 0x00c0, 0x17d5: 0x00c0, 0x17d6: 0x00c0, 0x17d7: 0x00c0, + 0x17d8: 0x00c0, 0x17d9: 0x00c0, 0x17da: 0x00c0, 0x17db: 0x00c0, 0x17dc: 0x00c0, 0x17dd: 0x00c0, + 0x17de: 0x00c0, 0x17df: 0x00c0, 0x17e0: 0x00c0, 0x17e1: 0x00c0, 0x17e2: 0x00c0, 0x17e3: 0x00c0, + 0x17e4: 0x00c0, 0x17e5: 0x00c0, 0x17e6: 0x00c0, 0x17e7: 0x00c0, 0x17e8: 0x00c0, 0x17e9: 0x00c0, + 0x17ea: 0x00c0, 0x17eb: 0x00c0, 0x17ec: 0x00c3, 0x17ed: 0x00c3, 0x17ee: 0x00c3, 0x17ef: 0x00c3, + 0x17f0: 0x00c3, 0x17f1: 0x00c3, 0x17f2: 0x00c3, 0x17f3: 0x00c3, 0x17f4: 0x00c0, 0x17f5: 0x00c0, + 0x17f6: 0x00c3, 0x17f7: 0x00c3, 0x17fb: 0x0080, + 0x17fc: 0x0080, 0x17fd: 0x0080, 0x17fe: 0x0080, 0x17ff: 0x0080, + // Block 0x60, offset 0x1800 + 0x1800: 0x00c0, 0x1801: 0x00c0, 0x1802: 0x00c0, 0x1803: 0x00c0, 0x1804: 0x00c0, 0x1805: 0x00c0, + 0x1806: 0x00c0, 0x1807: 0x00c0, 0x1808: 0x00c0, 0x1809: 0x00c0, + 0x180d: 0x00c0, 0x180e: 0x00c0, 0x180f: 0x00c0, 0x1810: 0x00c0, 0x1811: 0x00c0, + 0x1812: 0x00c0, 0x1813: 0x00c0, 0x1814: 0x00c0, 0x1815: 0x00c0, 0x1816: 0x00c0, 0x1817: 0x00c0, + 0x1818: 0x00c0, 0x1819: 0x00c0, 0x181a: 0x00c0, 0x181b: 0x00c0, 0x181c: 0x00c0, 0x181d: 0x00c0, + 0x181e: 0x00c0, 0x181f: 0x00c0, 0x1820: 0x00c0, 0x1821: 0x00c0, 0x1822: 0x00c0, 0x1823: 0x00c0, + 0x1824: 0x00c0, 0x1825: 0x00c0, 0x1826: 0x00c0, 0x1827: 0x00c0, 0x1828: 0x00c0, 0x1829: 0x00c0, + 0x182a: 0x00c0, 0x182b: 0x00c0, 0x182c: 0x00c0, 0x182d: 0x00c0, 0x182e: 0x00c0, 0x182f: 0x00c0, + 0x1830: 0x00c0, 0x1831: 0x00c0, 0x1832: 0x00c0, 0x1833: 0x00c0, 0x1834: 0x00c0, 0x1835: 0x00c0, + 0x1836: 0x00c0, 0x1837: 0x00c0, 0x1838: 0x00c0, 0x1839: 0x00c0, 0x183a: 0x00c0, 0x183b: 0x00c0, + 0x183c: 0x00c0, 0x183d: 0x00c0, 0x183e: 0x0080, 0x183f: 0x0080, + // Block 0x61, offset 0x1840 + 0x1840: 0x00c0, 0x1841: 0x00c0, 0x1842: 0x00c0, 0x1843: 0x00c0, 0x1844: 0x00c0, 0x1845: 0x00c0, + 0x1846: 0x00c0, 0x1847: 0x00c0, 0x1848: 0x00c0, + // Block 0x62, offset 0x1880 + 0x1880: 0x0080, 0x1881: 0x0080, 0x1882: 0x0080, 0x1883: 0x0080, 0x1884: 0x0080, 0x1885: 0x0080, + 0x1886: 0x0080, 0x1887: 0x0080, + 0x1890: 0x00c3, 0x1891: 0x00c3, + 0x1892: 0x00c3, 0x1893: 0x0080, 0x1894: 0x00c3, 0x1895: 0x00c3, 0x1896: 0x00c3, 0x1897: 0x00c3, + 0x1898: 0x00c3, 0x1899: 0x00c3, 0x189a: 0x00c3, 0x189b: 0x00c3, 0x189c: 0x00c3, 0x189d: 0x00c3, + 0x189e: 0x00c3, 0x189f: 0x00c3, 0x18a0: 0x00c3, 0x18a1: 0x00c0, 0x18a2: 0x00c3, 0x18a3: 0x00c3, + 0x18a4: 0x00c3, 0x18a5: 0x00c3, 0x18a6: 0x00c3, 0x18a7: 0x00c3, 0x18a8: 0x00c3, 0x18a9: 0x00c0, + 0x18aa: 0x00c0, 0x18ab: 0x00c0, 0x18ac: 0x00c0, 0x18ad: 0x00c3, 0x18ae: 0x00c0, 0x18af: 0x00c0, + 0x18b0: 0x00c0, 0x18b1: 0x00c0, 0x18b2: 0x00c0, 0x18b3: 0x00c0, 0x18b4: 0x00c3, 0x18b5: 0x00c0, + 0x18b6: 0x00c0, 0x18b8: 0x00c3, 0x18b9: 0x00c3, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x00c0, 0x18c1: 0x00c0, 0x18c2: 0x00c0, 0x18c3: 0x00c0, 0x18c4: 0x00c0, 0x18c5: 0x00c0, + 0x18c6: 0x00c0, 0x18c7: 0x00c0, 0x18c8: 0x00c0, 0x18c9: 0x00c0, 0x18ca: 0x00c0, 0x18cb: 0x00c0, + 0x18cc: 0x00c0, 0x18cd: 0x00c0, 0x18ce: 0x00c0, 0x18cf: 0x00c0, 0x18d0: 0x00c0, 0x18d1: 0x00c0, + 0x18d2: 0x00c0, 0x18d3: 0x00c0, 0x18d4: 0x00c0, 0x18d5: 0x00c0, 0x18d6: 0x00c0, 0x18d7: 0x00c0, + 0x18d8: 0x00c0, 0x18d9: 0x00c0, 0x18da: 0x00c0, 0x18db: 0x00c0, 0x18dc: 0x00c0, 0x18dd: 0x00c0, + 0x18de: 0x00c0, 0x18df: 0x00c0, 0x18e0: 0x00c0, 0x18e1: 0x00c0, 0x18e2: 0x00c0, 0x18e3: 0x00c0, + 0x18e4: 0x00c0, 0x18e5: 0x00c0, 0x18e6: 0x00c8, 0x18e7: 0x00c8, 0x18e8: 0x00c8, 0x18e9: 0x00c8, + 0x18ea: 0x00c8, 0x18eb: 0x00c0, 0x18ec: 0x0080, 0x18ed: 0x0080, 0x18ee: 0x0080, 0x18ef: 0x00c0, + 0x18f0: 0x0080, 0x18f1: 0x0080, 0x18f2: 0x0080, 0x18f3: 0x0080, 0x18f4: 0x0080, 0x18f5: 0x0080, + 0x18f6: 0x0080, 0x18f7: 0x0080, 0x18f8: 0x0080, 0x18f9: 0x0080, 0x18fa: 0x0080, 0x18fb: 0x00c0, + 0x18fc: 0x0080, 0x18fd: 0x0080, 0x18fe: 0x0080, 0x18ff: 0x0080, + // Block 0x64, offset 0x1900 + 0x1900: 0x0080, 0x1901: 0x0080, 0x1902: 0x0080, 0x1903: 0x0080, 0x1904: 0x0080, 0x1905: 0x0080, + 0x1906: 0x0080, 0x1907: 0x0080, 0x1908: 0x0080, 0x1909: 0x0080, 0x190a: 0x0080, 0x190b: 0x0080, + 0x190c: 0x0080, 0x190d: 0x0080, 0x190e: 0x00c0, 0x190f: 0x0080, 0x1910: 0x0080, 0x1911: 0x0080, + 0x1912: 0x0080, 0x1913: 0x0080, 0x1914: 0x0080, 0x1915: 0x0080, 0x1916: 0x0080, 0x1917: 0x0080, + 0x1918: 0x0080, 0x1919: 0x0080, 0x191a: 0x0080, 0x191b: 0x0080, 0x191c: 0x0080, 0x191d: 0x0088, + 0x191e: 0x0088, 0x191f: 0x0088, 0x1920: 0x0088, 0x1921: 0x0088, 0x1922: 0x0080, 0x1923: 0x0080, + 0x1924: 0x0080, 0x1925: 0x0080, 0x1926: 0x0088, 0x1927: 0x0088, 0x1928: 0x0088, 0x1929: 0x0088, + 0x192a: 0x0088, 0x192b: 0x00c0, 0x192c: 0x00c0, 0x192d: 0x00c0, 0x192e: 0x00c0, 0x192f: 0x00c0, + 0x1930: 0x00c0, 0x1931: 0x00c0, 0x1932: 0x00c0, 0x1933: 0x00c0, 0x1934: 0x00c0, 0x1935: 0x00c0, + 0x1936: 0x00c0, 0x1937: 0x00c0, 0x1938: 0x0080, 0x1939: 0x00c0, 0x193a: 0x00c0, 0x193b: 0x00c0, + 0x193c: 0x00c0, 0x193d: 0x00c0, 0x193e: 0x00c0, 0x193f: 0x00c0, + // Block 0x65, offset 0x1940 + 0x1940: 0x00c0, 0x1941: 0x00c0, 0x1942: 0x00c0, 0x1943: 0x00c0, 0x1944: 0x00c0, 0x1945: 0x00c0, + 0x1946: 0x00c0, 0x1947: 0x00c0, 0x1948: 0x00c0, 0x1949: 0x00c0, 0x194a: 0x00c0, 0x194b: 0x00c0, + 0x194c: 0x00c0, 0x194d: 0x00c0, 0x194e: 0x00c0, 0x194f: 0x00c0, 0x1950: 0x00c0, 0x1951: 0x00c0, + 0x1952: 0x00c0, 0x1953: 0x00c0, 0x1954: 0x00c0, 0x1955: 0x00c0, 0x1956: 0x00c0, 0x1957: 0x00c0, + 0x1958: 0x00c0, 0x1959: 0x00c0, 0x195a: 0x00c0, 0x195b: 0x0080, 0x195c: 0x0080, 0x195d: 0x0080, + 0x195e: 0x0080, 0x195f: 0x0080, 0x1960: 0x0080, 0x1961: 0x0080, 0x1962: 0x0080, 0x1963: 0x0080, + 0x1964: 0x0080, 0x1965: 0x0080, 0x1966: 0x0080, 0x1967: 0x0080, 0x1968: 0x0080, 0x1969: 0x0080, + 0x196a: 0x0080, 0x196b: 0x0080, 0x196c: 0x0080, 0x196d: 0x0080, 0x196e: 0x0080, 0x196f: 0x0080, + 0x1970: 0x0080, 0x1971: 0x0080, 0x1972: 0x0080, 0x1973: 0x0080, 0x1974: 0x0080, 0x1975: 0x0080, + 0x1976: 0x0080, 0x1977: 0x0080, 0x1978: 0x0080, 0x1979: 0x0080, 0x197a: 0x0080, 0x197b: 0x0080, + 0x197c: 0x0080, 0x197d: 0x0080, 0x197e: 0x0080, 0x197f: 0x0088, + // Block 0x66, offset 0x1980 + 0x1980: 0x00c3, 0x1981: 0x00c3, 0x1982: 0x00c3, 0x1983: 0x00c3, 0x1984: 0x00c3, 0x1985: 0x00c3, + 0x1986: 0x00c3, 0x1987: 0x00c3, 0x1988: 0x00c3, 0x1989: 0x00c3, 0x198a: 0x00c3, 0x198b: 0x00c3, + 0x198c: 0x00c3, 0x198d: 0x00c3, 0x198e: 0x00c3, 0x198f: 0x00c3, 0x1990: 0x00c3, 0x1991: 0x00c3, + 0x1992: 0x00c3, 0x1993: 0x00c3, 0x1994: 0x00c3, 0x1995: 0x00c3, 0x1996: 0x00c3, 0x1997: 0x00c3, + 0x1998: 0x00c3, 0x1999: 0x00c3, 0x199a: 0x00c3, 0x199b: 0x00c3, 0x199c: 0x00c3, 0x199d: 0x00c3, + 0x199e: 0x00c3, 0x199f: 0x00c3, 0x19a0: 0x00c3, 0x19a1: 0x00c3, 0x19a2: 0x00c3, 0x19a3: 0x00c3, + 0x19a4: 0x00c3, 0x19a5: 0x00c3, 0x19a6: 0x00c3, 0x19a7: 0x00c3, 0x19a8: 0x00c3, 0x19a9: 0x00c3, + 0x19aa: 0x00c3, 0x19ab: 0x00c3, 0x19ac: 0x00c3, 0x19ad: 0x00c3, 0x19ae: 0x00c3, 0x19af: 0x00c3, + 0x19b0: 0x00c3, 0x19b1: 0x00c3, 0x19b2: 0x00c3, 0x19b3: 0x00c3, 0x19b4: 0x00c3, 0x19b5: 0x00c3, + 0x19bb: 0x00c3, + 0x19bc: 0x00c3, 0x19bd: 0x00c3, 0x19be: 0x00c3, 0x19bf: 0x00c3, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x00c0, 0x19c1: 0x00c0, 0x19c2: 0x00c0, 0x19c3: 0x00c0, 0x19c4: 0x00c0, 0x19c5: 0x00c0, + 0x19c6: 0x00c0, 0x19c7: 0x00c0, 0x19c8: 0x00c0, 0x19c9: 0x00c0, 0x19ca: 0x00c0, 0x19cb: 0x00c0, + 0x19cc: 0x00c0, 0x19cd: 0x00c0, 0x19ce: 0x00c0, 0x19cf: 0x00c0, 0x19d0: 0x00c0, 0x19d1: 0x00c0, + 0x19d2: 0x00c0, 0x19d3: 0x00c0, 0x19d4: 0x00c0, 0x19d5: 0x00c0, 0x19d6: 0x00c0, 0x19d7: 0x00c0, + 0x19d8: 0x00c0, 0x19d9: 0x00c0, 0x19da: 0x0080, 0x19db: 0x0080, 0x19dc: 0x00c0, 0x19dd: 0x00c0, + 0x19de: 0x00c0, 0x19df: 0x00c0, 0x19e0: 0x00c0, 0x19e1: 0x00c0, 0x19e2: 0x00c0, 0x19e3: 0x00c0, + 0x19e4: 0x00c0, 0x19e5: 0x00c0, 0x19e6: 0x00c0, 0x19e7: 0x00c0, 0x19e8: 0x00c0, 0x19e9: 0x00c0, + 0x19ea: 0x00c0, 0x19eb: 0x00c0, 0x19ec: 0x00c0, 0x19ed: 0x00c0, 0x19ee: 0x00c0, 0x19ef: 0x00c0, + 0x19f0: 0x00c0, 0x19f1: 0x00c0, 0x19f2: 0x00c0, 0x19f3: 0x00c0, 0x19f4: 0x00c0, 0x19f5: 0x00c0, + 0x19f6: 0x00c0, 0x19f7: 0x00c0, 0x19f8: 0x00c0, 0x19f9: 0x00c0, 0x19fa: 0x00c0, 0x19fb: 0x00c0, + 0x19fc: 0x00c0, 0x19fd: 0x00c0, 0x19fe: 0x00c0, 0x19ff: 0x00c0, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x00c8, 0x1a01: 0x00c8, 0x1a02: 0x00c8, 0x1a03: 0x00c8, 0x1a04: 0x00c8, 0x1a05: 0x00c8, + 0x1a06: 0x00c8, 0x1a07: 0x00c8, 0x1a08: 0x00c8, 0x1a09: 0x00c8, 0x1a0a: 0x00c8, 0x1a0b: 0x00c8, + 0x1a0c: 0x00c8, 0x1a0d: 0x00c8, 0x1a0e: 0x00c8, 0x1a0f: 0x00c8, 0x1a10: 0x00c8, 0x1a11: 0x00c8, + 0x1a12: 0x00c8, 0x1a13: 0x00c8, 0x1a14: 0x00c8, 0x1a15: 0x00c8, + 0x1a18: 0x00c8, 0x1a19: 0x00c8, 0x1a1a: 0x00c8, 0x1a1b: 0x00c8, 0x1a1c: 0x00c8, 0x1a1d: 0x00c8, + 0x1a20: 0x00c8, 0x1a21: 0x00c8, 0x1a22: 0x00c8, 0x1a23: 0x00c8, + 0x1a24: 0x00c8, 0x1a25: 0x00c8, 0x1a26: 0x00c8, 0x1a27: 0x00c8, 0x1a28: 0x00c8, 0x1a29: 0x00c8, + 0x1a2a: 0x00c8, 0x1a2b: 0x00c8, 0x1a2c: 0x00c8, 0x1a2d: 0x00c8, 0x1a2e: 0x00c8, 0x1a2f: 0x00c8, + 0x1a30: 0x00c8, 0x1a31: 0x00c8, 0x1a32: 0x00c8, 0x1a33: 0x00c8, 0x1a34: 0x00c8, 0x1a35: 0x00c8, + 0x1a36: 0x00c8, 0x1a37: 0x00c8, 0x1a38: 0x00c8, 0x1a39: 0x00c8, 0x1a3a: 0x00c8, 0x1a3b: 0x00c8, + 0x1a3c: 0x00c8, 0x1a3d: 0x00c8, 0x1a3e: 0x00c8, 0x1a3f: 0x00c8, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x00c8, 0x1a41: 0x00c8, 0x1a42: 0x00c8, 0x1a43: 0x00c8, 0x1a44: 0x00c8, 0x1a45: 0x00c8, + 0x1a48: 0x00c8, 0x1a49: 0x00c8, 0x1a4a: 0x00c8, 0x1a4b: 0x00c8, + 0x1a4c: 0x00c8, 0x1a4d: 0x00c8, 0x1a50: 0x00c8, 0x1a51: 0x00c8, + 0x1a52: 0x00c8, 0x1a53: 0x00c8, 0x1a54: 0x00c8, 0x1a55: 0x00c8, 0x1a56: 0x00c8, 0x1a57: 0x00c8, + 0x1a59: 0x00c8, 0x1a5b: 0x00c8, 0x1a5d: 0x00c8, + 0x1a5f: 0x00c8, 0x1a60: 0x00c8, 0x1a61: 0x00c8, 0x1a62: 0x00c8, 0x1a63: 0x00c8, + 0x1a64: 0x00c8, 0x1a65: 0x00c8, 0x1a66: 0x00c8, 0x1a67: 0x00c8, 0x1a68: 0x00c8, 0x1a69: 0x00c8, + 0x1a6a: 0x00c8, 0x1a6b: 0x00c8, 0x1a6c: 0x00c8, 0x1a6d: 0x00c8, 0x1a6e: 0x00c8, 0x1a6f: 0x00c8, + 0x1a70: 0x00c8, 0x1a71: 0x0088, 0x1a72: 0x00c8, 0x1a73: 0x0088, 0x1a74: 0x00c8, 0x1a75: 0x0088, + 0x1a76: 0x00c8, 0x1a77: 0x0088, 0x1a78: 0x00c8, 0x1a79: 0x0088, 0x1a7a: 0x00c8, 0x1a7b: 0x0088, + 0x1a7c: 0x00c8, 0x1a7d: 0x0088, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x00c8, 0x1a81: 0x00c8, 0x1a82: 0x00c8, 0x1a83: 0x00c8, 0x1a84: 0x00c8, 0x1a85: 0x00c8, + 0x1a86: 0x00c8, 0x1a87: 0x00c8, 0x1a88: 0x0088, 0x1a89: 0x0088, 0x1a8a: 0x0088, 0x1a8b: 0x0088, + 0x1a8c: 0x0088, 0x1a8d: 0x0088, 0x1a8e: 0x0088, 0x1a8f: 0x0088, 0x1a90: 0x00c8, 0x1a91: 0x00c8, + 0x1a92: 0x00c8, 0x1a93: 0x00c8, 0x1a94: 0x00c8, 0x1a95: 0x00c8, 0x1a96: 0x00c8, 0x1a97: 0x00c8, + 0x1a98: 0x0088, 0x1a99: 0x0088, 0x1a9a: 0x0088, 0x1a9b: 0x0088, 0x1a9c: 0x0088, 0x1a9d: 0x0088, + 0x1a9e: 0x0088, 0x1a9f: 0x0088, 0x1aa0: 0x00c8, 0x1aa1: 0x00c8, 0x1aa2: 0x00c8, 0x1aa3: 0x00c8, + 0x1aa4: 0x00c8, 0x1aa5: 0x00c8, 0x1aa6: 0x00c8, 0x1aa7: 0x00c8, 0x1aa8: 0x0088, 0x1aa9: 0x0088, + 0x1aaa: 0x0088, 0x1aab: 0x0088, 0x1aac: 0x0088, 0x1aad: 0x0088, 0x1aae: 0x0088, 0x1aaf: 0x0088, + 0x1ab0: 0x00c8, 0x1ab1: 0x00c8, 0x1ab2: 0x00c8, 0x1ab3: 0x00c8, 0x1ab4: 0x00c8, + 0x1ab6: 0x00c8, 0x1ab7: 0x00c8, 0x1ab8: 0x00c8, 0x1ab9: 0x00c8, 0x1aba: 0x00c8, 0x1abb: 0x0088, + 0x1abc: 0x0088, 0x1abd: 0x0088, 0x1abe: 0x0088, 0x1abf: 0x0088, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x0088, 0x1ac1: 0x0088, 0x1ac2: 0x00c8, 0x1ac3: 0x00c8, 0x1ac4: 0x00c8, + 0x1ac6: 0x00c8, 0x1ac7: 0x00c8, 0x1ac8: 0x00c8, 0x1ac9: 0x0088, 0x1aca: 0x00c8, 0x1acb: 0x0088, + 0x1acc: 0x0088, 0x1acd: 0x0088, 0x1ace: 0x0088, 0x1acf: 0x0088, 0x1ad0: 0x00c8, 0x1ad1: 0x00c8, + 0x1ad2: 0x00c8, 0x1ad3: 0x0088, 0x1ad6: 0x00c8, 0x1ad7: 0x00c8, + 0x1ad8: 0x00c8, 0x1ad9: 0x00c8, 0x1ada: 0x00c8, 0x1adb: 0x0088, 0x1add: 0x0088, + 0x1ade: 0x0088, 0x1adf: 0x0088, 0x1ae0: 0x00c8, 0x1ae1: 0x00c8, 0x1ae2: 0x00c8, 0x1ae3: 0x0088, + 0x1ae4: 0x00c8, 0x1ae5: 0x00c8, 0x1ae6: 0x00c8, 0x1ae7: 0x00c8, 0x1ae8: 0x00c8, 0x1ae9: 0x00c8, + 0x1aea: 0x00c8, 0x1aeb: 0x0088, 0x1aec: 0x00c8, 0x1aed: 0x0088, 0x1aee: 0x0088, 0x1aef: 0x0088, + 0x1af2: 0x00c8, 0x1af3: 0x00c8, 0x1af4: 0x00c8, + 0x1af6: 0x00c8, 0x1af7: 0x00c8, 0x1af8: 0x00c8, 0x1af9: 0x0088, 0x1afa: 0x00c8, 0x1afb: 0x0088, + 0x1afc: 0x0088, 0x1afd: 0x0088, 0x1afe: 0x0088, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x0080, 0x1b01: 0x0080, 0x1b02: 0x0080, 0x1b03: 0x0080, 0x1b04: 0x0080, 0x1b05: 0x0080, + 0x1b06: 0x0080, 0x1b07: 0x0080, 0x1b08: 0x0080, 0x1b09: 0x0080, 0x1b0a: 0x0080, 0x1b0b: 0x0040, + 0x1b0c: 0x004d, 0x1b0d: 0x004e, 0x1b0e: 0x0040, 0x1b0f: 0x0040, 0x1b10: 0x0080, 0x1b11: 0x0080, + 0x1b12: 0x0080, 0x1b13: 0x0080, 0x1b14: 0x0080, 0x1b15: 0x0080, 0x1b16: 0x0080, 0x1b17: 0x0080, + 0x1b18: 0x0080, 0x1b19: 0x0080, 0x1b1a: 0x0080, 0x1b1b: 0x0080, 0x1b1c: 0x0080, 0x1b1d: 0x0080, + 0x1b1e: 0x0080, 0x1b1f: 0x0080, 0x1b20: 0x0080, 0x1b21: 0x0080, 0x1b22: 0x0080, 0x1b23: 0x0080, + 0x1b24: 0x0080, 0x1b25: 0x0080, 0x1b26: 0x0080, 0x1b27: 0x0080, 0x1b28: 0x0040, 0x1b29: 0x0040, + 0x1b2a: 0x0040, 0x1b2b: 0x0040, 0x1b2c: 0x0040, 0x1b2d: 0x0040, 0x1b2e: 0x0040, 0x1b2f: 0x0080, + 0x1b30: 0x0080, 0x1b31: 0x0080, 0x1b32: 0x0080, 0x1b33: 0x0080, 0x1b34: 0x0080, 0x1b35: 0x0080, + 0x1b36: 0x0080, 0x1b37: 0x0080, 0x1b38: 0x0080, 0x1b39: 0x0080, 0x1b3a: 0x0080, 0x1b3b: 0x0080, + 0x1b3c: 0x0080, 0x1b3d: 0x0080, 0x1b3e: 0x0080, 0x1b3f: 0x0080, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x0080, 0x1b41: 0x0080, 0x1b42: 0x0080, 0x1b43: 0x0080, 0x1b44: 0x0080, 0x1b45: 0x0080, + 0x1b46: 0x0080, 0x1b47: 0x0080, 0x1b48: 0x0080, 0x1b49: 0x0080, 0x1b4a: 0x0080, 0x1b4b: 0x0080, + 0x1b4c: 0x0080, 0x1b4d: 0x0080, 0x1b4e: 0x0080, 0x1b4f: 0x0080, 0x1b50: 0x0080, 0x1b51: 0x0080, + 0x1b52: 0x0080, 0x1b53: 0x0080, 0x1b54: 0x0080, 0x1b55: 0x0080, 0x1b56: 0x0080, 0x1b57: 0x0080, + 0x1b58: 0x0080, 0x1b59: 0x0080, 0x1b5a: 0x0080, 0x1b5b: 0x0080, 0x1b5c: 0x0080, 0x1b5d: 0x0080, + 0x1b5e: 0x0080, 0x1b5f: 0x0080, 0x1b60: 0x0040, 0x1b61: 0x0040, 0x1b62: 0x0040, 0x1b63: 0x0040, + 0x1b64: 0x0040, 0x1b66: 0x0040, 0x1b67: 0x0040, 0x1b68: 0x0040, 0x1b69: 0x0040, + 0x1b6a: 0x0040, 0x1b6b: 0x0040, 0x1b6c: 0x0040, 0x1b6d: 0x0040, 0x1b6e: 0x0040, 0x1b6f: 0x0040, + 0x1b70: 0x0080, 0x1b71: 0x0080, 0x1b74: 0x0080, 0x1b75: 0x0080, + 0x1b76: 0x0080, 0x1b77: 0x0080, 0x1b78: 0x0080, 0x1b79: 0x0080, 0x1b7a: 0x0080, 0x1b7b: 0x0080, + 0x1b7c: 0x0080, 0x1b7d: 0x0080, 0x1b7e: 0x0080, 0x1b7f: 0x0080, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x0080, 0x1b81: 0x0080, 0x1b82: 0x0080, 0x1b83: 0x0080, 0x1b84: 0x0080, 0x1b85: 0x0080, + 0x1b86: 0x0080, 0x1b87: 0x0080, 0x1b88: 0x0080, 0x1b89: 0x0080, 0x1b8a: 0x0080, 0x1b8b: 0x0080, + 0x1b8c: 0x0080, 0x1b8d: 0x0080, 0x1b8e: 0x0080, 0x1b90: 0x0080, 0x1b91: 0x0080, + 0x1b92: 0x0080, 0x1b93: 0x0080, 0x1b94: 0x0080, 0x1b95: 0x0080, 0x1b96: 0x0080, 0x1b97: 0x0080, + 0x1b98: 0x0080, 0x1b99: 0x0080, 0x1b9a: 0x0080, 0x1b9b: 0x0080, 0x1b9c: 0x0080, + 0x1ba0: 0x0080, 0x1ba1: 0x0080, 0x1ba2: 0x0080, 0x1ba3: 0x0080, + 0x1ba4: 0x0080, 0x1ba5: 0x0080, 0x1ba6: 0x0080, 0x1ba7: 0x0080, 0x1ba8: 0x0080, 0x1ba9: 0x0080, + 0x1baa: 0x0080, 0x1bab: 0x0080, 0x1bac: 0x0080, 0x1bad: 0x0080, 0x1bae: 0x0080, 0x1baf: 0x0080, + 0x1bb0: 0x0080, 0x1bb1: 0x0080, 0x1bb2: 0x0080, 0x1bb3: 0x0080, 0x1bb4: 0x0080, 0x1bb5: 0x0080, + 0x1bb6: 0x0080, 0x1bb7: 0x0080, 0x1bb8: 0x0080, 0x1bb9: 0x0080, 0x1bba: 0x0080, 0x1bbb: 0x0080, + 0x1bbc: 0x0080, 0x1bbd: 0x0080, 0x1bbe: 0x0080, + // Block 0x6f, offset 0x1bc0 + 0x1bd0: 0x00c3, 0x1bd1: 0x00c3, + 0x1bd2: 0x00c3, 0x1bd3: 0x00c3, 0x1bd4: 0x00c3, 0x1bd5: 0x00c3, 0x1bd6: 0x00c3, 0x1bd7: 0x00c3, + 0x1bd8: 0x00c3, 0x1bd9: 0x00c3, 0x1bda: 0x00c3, 0x1bdb: 0x00c3, 0x1bdc: 0x00c3, 0x1bdd: 0x0083, + 0x1bde: 0x0083, 0x1bdf: 0x0083, 0x1be0: 0x0083, 0x1be1: 0x00c3, 0x1be2: 0x0083, 0x1be3: 0x0083, + 0x1be4: 0x0083, 0x1be5: 0x00c3, 0x1be6: 0x00c3, 0x1be7: 0x00c3, 0x1be8: 0x00c3, 0x1be9: 0x00c3, + 0x1bea: 0x00c3, 0x1beb: 0x00c3, 0x1bec: 0x00c3, 0x1bed: 0x00c3, 0x1bee: 0x00c3, 0x1bef: 0x00c3, + 0x1bf0: 0x00c3, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0080, 0x1c01: 0x0080, 0x1c02: 0x0080, 0x1c03: 0x0080, 0x1c04: 0x0080, 0x1c05: 0x0080, + 0x1c06: 0x0080, 0x1c07: 0x0080, 0x1c08: 0x0080, 0x1c09: 0x0080, 0x1c0a: 0x0080, 0x1c0b: 0x0080, + 0x1c0c: 0x0080, 0x1c0d: 0x0080, 0x1c0e: 0x0080, 0x1c0f: 0x0080, 0x1c10: 0x0080, 0x1c11: 0x0080, + 0x1c12: 0x0080, 0x1c13: 0x0080, 0x1c14: 0x0080, 0x1c15: 0x0080, 0x1c16: 0x0080, 0x1c17: 0x0080, + 0x1c18: 0x0080, 0x1c19: 0x0080, 0x1c1a: 0x0080, 0x1c1b: 0x0080, 0x1c1c: 0x0080, 0x1c1d: 0x0080, + 0x1c1e: 0x0080, 0x1c1f: 0x0080, 0x1c20: 0x0080, 0x1c21: 0x0080, 0x1c22: 0x0080, 0x1c23: 0x0080, + 0x1c24: 0x0080, 0x1c25: 0x0080, 0x1c26: 0x0088, 0x1c27: 0x0080, 0x1c28: 0x0080, 0x1c29: 0x0080, + 0x1c2a: 0x0080, 0x1c2b: 0x0080, 0x1c2c: 0x0080, 0x1c2d: 0x0080, 0x1c2e: 0x0080, 0x1c2f: 0x0080, + 0x1c30: 0x0080, 0x1c31: 0x0080, 0x1c32: 0x00c0, 0x1c33: 0x0080, 0x1c34: 0x0080, 0x1c35: 0x0080, + 0x1c36: 0x0080, 0x1c37: 0x0080, 0x1c38: 0x0080, 0x1c39: 0x0080, 0x1c3a: 0x0080, 0x1c3b: 0x0080, + 0x1c3c: 0x0080, 0x1c3d: 0x0080, 0x1c3e: 0x0080, 0x1c3f: 0x0080, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x0080, 0x1c41: 0x0080, 0x1c42: 0x0080, 0x1c43: 0x0080, 0x1c44: 0x0080, 0x1c45: 0x0080, + 0x1c46: 0x0080, 0x1c47: 0x0080, 0x1c48: 0x0080, 0x1c49: 0x0080, 0x1c4a: 0x0080, 0x1c4b: 0x0080, + 0x1c4c: 0x0080, 0x1c4d: 0x0080, 0x1c4e: 0x00c0, 0x1c4f: 0x0080, 0x1c50: 0x0080, 0x1c51: 0x0080, + 0x1c52: 0x0080, 0x1c53: 0x0080, 0x1c54: 0x0080, 0x1c55: 0x0080, 0x1c56: 0x0080, 0x1c57: 0x0080, + 0x1c58: 0x0080, 0x1c59: 0x0080, 0x1c5a: 0x0080, 0x1c5b: 0x0080, 0x1c5c: 0x0080, 0x1c5d: 0x0080, + 0x1c5e: 0x0080, 0x1c5f: 0x0080, 0x1c60: 0x0080, 0x1c61: 0x0080, 0x1c62: 0x0080, 0x1c63: 0x0080, + 0x1c64: 0x0080, 0x1c65: 0x0080, 0x1c66: 0x0080, 0x1c67: 0x0080, 0x1c68: 0x0080, 0x1c69: 0x0080, + 0x1c6a: 0x0080, 0x1c6b: 0x0080, 0x1c6c: 0x0080, 0x1c6d: 0x0080, 0x1c6e: 0x0080, 0x1c6f: 0x0080, + 0x1c70: 0x0080, 0x1c71: 0x0080, 0x1c72: 0x0080, 0x1c73: 0x0080, 0x1c74: 0x0080, 0x1c75: 0x0080, + 0x1c76: 0x0080, 0x1c77: 0x0080, 0x1c78: 0x0080, 0x1c79: 0x0080, 0x1c7a: 0x0080, 0x1c7b: 0x0080, + 0x1c7c: 0x0080, 0x1c7d: 0x0080, 0x1c7e: 0x0080, 0x1c7f: 0x0080, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x0080, 0x1c81: 0x0080, 0x1c82: 0x0080, 0x1c83: 0x00c0, 0x1c84: 0x00c0, 0x1c85: 0x0080, + 0x1c86: 0x0080, 0x1c87: 0x0080, 0x1c88: 0x0080, 0x1c89: 0x0080, 0x1c8a: 0x0080, 0x1c8b: 0x0080, + 0x1c90: 0x0080, 0x1c91: 0x0080, + 0x1c92: 0x0080, 0x1c93: 0x0080, 0x1c94: 0x0080, 0x1c95: 0x0080, 0x1c96: 0x0080, 0x1c97: 0x0080, + 0x1c98: 0x0080, 0x1c99: 0x0080, 0x1c9a: 0x0080, 0x1c9b: 0x0080, 0x1c9c: 0x0080, 0x1c9d: 0x0080, + 0x1c9e: 0x0080, 0x1c9f: 0x0080, 0x1ca0: 0x0080, 0x1ca1: 0x0080, 0x1ca2: 0x0080, 0x1ca3: 0x0080, + 0x1ca4: 0x0080, 0x1ca5: 0x0080, 0x1ca6: 0x0080, 0x1ca7: 0x0080, 0x1ca8: 0x0080, 0x1ca9: 0x0080, + 0x1caa: 0x0080, 0x1cab: 0x0080, 0x1cac: 0x0080, 0x1cad: 0x0080, 0x1cae: 0x0080, 0x1caf: 0x0080, + 0x1cb0: 0x0080, 0x1cb1: 0x0080, 0x1cb2: 0x0080, 0x1cb3: 0x0080, 0x1cb4: 0x0080, 0x1cb5: 0x0080, + 0x1cb6: 0x0080, 0x1cb7: 0x0080, 0x1cb8: 0x0080, 0x1cb9: 0x0080, 0x1cba: 0x0080, 0x1cbb: 0x0080, + 0x1cbc: 0x0080, 0x1cbd: 0x0080, 0x1cbe: 0x0080, 0x1cbf: 0x0080, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0080, 0x1cc1: 0x0080, 0x1cc2: 0x0080, 0x1cc3: 0x0080, 0x1cc4: 0x0080, 0x1cc5: 0x0080, + 0x1cc6: 0x0080, 0x1cc7: 0x0080, 0x1cc8: 0x0080, 0x1cc9: 0x0080, 0x1cca: 0x0080, 0x1ccb: 0x0080, + 0x1ccc: 0x0080, 0x1ccd: 0x0080, 0x1cce: 0x0080, 0x1ccf: 0x0080, 0x1cd0: 0x0080, 0x1cd1: 0x0080, + 0x1cd2: 0x0080, 0x1cd3: 0x0080, 0x1cd4: 0x0080, 0x1cd5: 0x0080, 0x1cd6: 0x0080, 0x1cd7: 0x0080, + 0x1cd8: 0x0080, 0x1cd9: 0x0080, 0x1cda: 0x0080, 0x1cdb: 0x0080, 0x1cdc: 0x0080, 0x1cdd: 0x0080, + 0x1cde: 0x0080, 0x1cdf: 0x0080, 0x1ce0: 0x0080, 0x1ce1: 0x0080, 0x1ce2: 0x0080, 0x1ce3: 0x0080, + 0x1ce4: 0x0080, 0x1ce5: 0x0080, 0x1ce6: 0x0080, 0x1ce7: 0x0080, 0x1ce8: 0x0080, 0x1ce9: 0x0080, + 0x1cea: 0x0080, 0x1ceb: 0x0080, 0x1cec: 0x0080, 0x1ced: 0x0080, 0x1cee: 0x0080, 0x1cef: 0x0080, + 0x1cf0: 0x0080, 0x1cf1: 0x0080, 0x1cf2: 0x0080, 0x1cf3: 0x0080, 0x1cf4: 0x0080, 0x1cf5: 0x0080, + 0x1cf6: 0x0080, 0x1cf7: 0x0080, 0x1cf8: 0x0080, 0x1cf9: 0x0080, 0x1cfa: 0x0080, 0x1cfb: 0x0080, + 0x1cfc: 0x0080, 0x1cfd: 0x0080, 0x1cfe: 0x0080, 0x1cff: 0x0080, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x0080, 0x1d01: 0x0080, 0x1d02: 0x0080, 0x1d03: 0x0080, 0x1d04: 0x0080, 0x1d05: 0x0080, + 0x1d06: 0x0080, 0x1d07: 0x0080, 0x1d08: 0x0080, 0x1d09: 0x0080, 0x1d0a: 0x0080, 0x1d0b: 0x0080, + 0x1d0c: 0x0080, 0x1d0d: 0x0080, 0x1d0e: 0x0080, 0x1d0f: 0x0080, 0x1d10: 0x0080, 0x1d11: 0x0080, + 0x1d12: 0x0080, 0x1d13: 0x0080, 0x1d14: 0x0080, 0x1d15: 0x0080, 0x1d16: 0x0080, 0x1d17: 0x0080, + 0x1d18: 0x0080, 0x1d19: 0x0080, 0x1d1a: 0x0080, 0x1d1b: 0x0080, 0x1d1c: 0x0080, 0x1d1d: 0x0080, + 0x1d1e: 0x0080, 0x1d1f: 0x0080, 0x1d20: 0x0080, 0x1d21: 0x0080, 0x1d22: 0x0080, 0x1d23: 0x0080, + 0x1d24: 0x0080, 0x1d25: 0x0080, 0x1d26: 0x0080, 0x1d27: 0x0080, 0x1d28: 0x0080, 0x1d29: 0x0080, + 0x1d2a: 0x0080, 0x1d2b: 0x0080, 0x1d2c: 0x0080, 0x1d2d: 0x0080, 0x1d2e: 0x0080, 0x1d2f: 0x0080, + 0x1d30: 0x0080, 0x1d31: 0x0080, 0x1d32: 0x0080, 0x1d33: 0x0080, 0x1d34: 0x0080, 0x1d35: 0x0080, + 0x1d36: 0x0080, 0x1d37: 0x0080, 0x1d38: 0x0080, 0x1d39: 0x0080, 0x1d3a: 0x0080, 0x1d3b: 0x0080, + 0x1d3c: 0x0080, 0x1d3d: 0x0080, 0x1d3e: 0x0080, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0080, 0x1d41: 0x0080, 0x1d42: 0x0080, 0x1d43: 0x0080, 0x1d44: 0x0080, 0x1d45: 0x0080, + 0x1d46: 0x0080, 0x1d47: 0x0080, 0x1d48: 0x0080, 0x1d49: 0x0080, 0x1d4a: 0x0080, 0x1d4b: 0x0080, + 0x1d4c: 0x0080, 0x1d4d: 0x0080, 0x1d4e: 0x0080, 0x1d4f: 0x0080, 0x1d50: 0x0080, 0x1d51: 0x0080, + 0x1d52: 0x0080, 0x1d53: 0x0080, 0x1d54: 0x0080, 0x1d55: 0x0080, 0x1d56: 0x0080, 0x1d57: 0x0080, + 0x1d58: 0x0080, 0x1d59: 0x0080, 0x1d5a: 0x0080, 0x1d5b: 0x0080, 0x1d5c: 0x0080, 0x1d5d: 0x0080, + 0x1d5e: 0x0080, 0x1d5f: 0x0080, 0x1d60: 0x0080, 0x1d61: 0x0080, 0x1d62: 0x0080, 0x1d63: 0x0080, + 0x1d64: 0x0080, 0x1d65: 0x0080, 0x1d66: 0x0080, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x0080, 0x1d81: 0x0080, 0x1d82: 0x0080, 0x1d83: 0x0080, 0x1d84: 0x0080, 0x1d85: 0x0080, + 0x1d86: 0x0080, 0x1d87: 0x0080, 0x1d88: 0x0080, 0x1d89: 0x0080, 0x1d8a: 0x0080, + 0x1da0: 0x0080, 0x1da1: 0x0080, 0x1da2: 0x0080, 0x1da3: 0x0080, + 0x1da4: 0x0080, 0x1da5: 0x0080, 0x1da6: 0x0080, 0x1da7: 0x0080, 0x1da8: 0x0080, 0x1da9: 0x0080, + 0x1daa: 0x0080, 0x1dab: 0x0080, 0x1dac: 0x0080, 0x1dad: 0x0080, 0x1dae: 0x0080, 0x1daf: 0x0080, + 0x1db0: 0x0080, 0x1db1: 0x0080, 0x1db2: 0x0080, 0x1db3: 0x0080, 0x1db4: 0x0080, 0x1db5: 0x0080, + 0x1db6: 0x0080, 0x1db7: 0x0080, 0x1db8: 0x0080, 0x1db9: 0x0080, 0x1dba: 0x0080, 0x1dbb: 0x0080, + 0x1dbc: 0x0080, 0x1dbd: 0x0080, 0x1dbe: 0x0080, 0x1dbf: 0x0080, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0x0080, 0x1dc1: 0x0080, 0x1dc2: 0x0080, 0x1dc3: 0x0080, 0x1dc4: 0x0080, 0x1dc5: 0x0080, + 0x1dc6: 0x0080, 0x1dc7: 0x0080, 0x1dc8: 0x0080, 0x1dc9: 0x0080, 0x1dca: 0x0080, 0x1dcb: 0x0080, + 0x1dcc: 0x0080, 0x1dcd: 0x0080, 0x1dce: 0x0080, 0x1dcf: 0x0080, 0x1dd0: 0x0080, 0x1dd1: 0x0080, + 0x1dd2: 0x0080, 0x1dd3: 0x0080, 0x1dd4: 0x0080, 0x1dd5: 0x0080, 0x1dd6: 0x0080, 0x1dd7: 0x0080, + 0x1dd8: 0x0080, 0x1dd9: 0x0080, 0x1dda: 0x0080, 0x1ddb: 0x0080, 0x1ddc: 0x0080, 0x1ddd: 0x0080, + 0x1dde: 0x0080, 0x1ddf: 0x0080, 0x1de0: 0x0080, 0x1de1: 0x0080, 0x1de2: 0x0080, 0x1de3: 0x0080, + 0x1de4: 0x0080, 0x1de5: 0x0080, 0x1de6: 0x0080, 0x1de7: 0x0080, 0x1de8: 0x0080, 0x1de9: 0x0080, + 0x1dea: 0x0080, 0x1deb: 0x0080, 0x1dec: 0x0080, 0x1ded: 0x0080, 0x1dee: 0x0080, 0x1def: 0x0080, + 0x1df0: 0x0080, 0x1df1: 0x0080, 0x1df2: 0x0080, 0x1df3: 0x0080, + 0x1df6: 0x0080, 0x1df7: 0x0080, 0x1df8: 0x0080, 0x1df9: 0x0080, 0x1dfa: 0x0080, 0x1dfb: 0x0080, + 0x1dfc: 0x0080, 0x1dfd: 0x0080, 0x1dfe: 0x0080, 0x1dff: 0x0080, + // Block 0x78, offset 0x1e00 + 0x1e00: 0x0080, 0x1e01: 0x0080, 0x1e02: 0x0080, 0x1e03: 0x0080, 0x1e04: 0x0080, 0x1e05: 0x0080, + 0x1e06: 0x0080, 0x1e07: 0x0080, 0x1e08: 0x0080, 0x1e09: 0x0080, 0x1e0a: 0x0080, 0x1e0b: 0x0080, + 0x1e0c: 0x0080, 0x1e0d: 0x0080, 0x1e0e: 0x0080, 0x1e0f: 0x0080, 0x1e10: 0x0080, 0x1e11: 0x0080, + 0x1e12: 0x0080, 0x1e13: 0x0080, 0x1e14: 0x0080, 0x1e15: 0x0080, + 0x1e18: 0x0080, 0x1e19: 0x0080, 0x1e1a: 0x0080, 0x1e1b: 0x0080, 0x1e1c: 0x0080, 0x1e1d: 0x0080, + 0x1e1e: 0x0080, 0x1e1f: 0x0080, 0x1e20: 0x0080, 0x1e21: 0x0080, 0x1e22: 0x0080, 0x1e23: 0x0080, + 0x1e24: 0x0080, 0x1e25: 0x0080, 0x1e26: 0x0080, 0x1e27: 0x0080, 0x1e28: 0x0080, 0x1e29: 0x0080, + 0x1e2a: 0x0080, 0x1e2b: 0x0080, 0x1e2c: 0x0080, 0x1e2d: 0x0080, 0x1e2e: 0x0080, 0x1e2f: 0x0080, + 0x1e30: 0x0080, 0x1e31: 0x0080, 0x1e32: 0x0080, 0x1e33: 0x0080, 0x1e34: 0x0080, 0x1e35: 0x0080, + 0x1e36: 0x0080, 0x1e37: 0x0080, 0x1e38: 0x0080, 0x1e39: 0x0080, + 0x1e3d: 0x0080, 0x1e3e: 0x0080, 0x1e3f: 0x0080, + // Block 0x79, offset 0x1e40 + 0x1e40: 0x0080, 0x1e41: 0x0080, 0x1e42: 0x0080, 0x1e43: 0x0080, 0x1e44: 0x0080, 0x1e45: 0x0080, + 0x1e46: 0x0080, 0x1e47: 0x0080, 0x1e48: 0x0080, 0x1e4a: 0x0080, 0x1e4b: 0x0080, + 0x1e4c: 0x0080, 0x1e4d: 0x0080, 0x1e4e: 0x0080, 0x1e4f: 0x0080, 0x1e50: 0x0080, 0x1e51: 0x0080, + 0x1e6c: 0x0080, 0x1e6d: 0x0080, 0x1e6e: 0x0080, 0x1e6f: 0x0080, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x00c0, 0x1e81: 0x00c0, 0x1e82: 0x00c0, 0x1e83: 0x00c0, 0x1e84: 0x00c0, 0x1e85: 0x00c0, + 0x1e86: 0x00c0, 0x1e87: 0x00c0, 0x1e88: 0x00c0, 0x1e89: 0x00c0, 0x1e8a: 0x00c0, 0x1e8b: 0x00c0, + 0x1e8c: 0x00c0, 0x1e8d: 0x00c0, 0x1e8e: 0x00c0, 0x1e8f: 0x00c0, 0x1e90: 0x00c0, 0x1e91: 0x00c0, + 0x1e92: 0x00c0, 0x1e93: 0x00c0, 0x1e94: 0x00c0, 0x1e95: 0x00c0, 0x1e96: 0x00c0, 0x1e97: 0x00c0, + 0x1e98: 0x00c0, 0x1e99: 0x00c0, 0x1e9a: 0x00c0, 0x1e9b: 0x00c0, 0x1e9c: 0x00c0, 0x1e9d: 0x00c0, + 0x1e9e: 0x00c0, 0x1e9f: 0x00c0, 0x1ea0: 0x00c0, 0x1ea1: 0x00c0, 0x1ea2: 0x00c0, 0x1ea3: 0x00c0, + 0x1ea4: 0x00c0, 0x1ea5: 0x00c0, 0x1ea6: 0x00c0, 0x1ea7: 0x00c0, 0x1ea8: 0x00c0, 0x1ea9: 0x00c0, + 0x1eaa: 0x00c0, 0x1eab: 0x00c0, 0x1eac: 0x00c0, 0x1ead: 0x00c0, 0x1eae: 0x00c0, + 0x1eb0: 0x00c0, 0x1eb1: 0x00c0, 0x1eb2: 0x00c0, 0x1eb3: 0x00c0, 0x1eb4: 0x00c0, 0x1eb5: 0x00c0, + 0x1eb6: 0x00c0, 0x1eb7: 0x00c0, 0x1eb8: 0x00c0, 0x1eb9: 0x00c0, 0x1eba: 0x00c0, 0x1ebb: 0x00c0, + 0x1ebc: 0x00c0, 0x1ebd: 0x00c0, 0x1ebe: 0x00c0, 0x1ebf: 0x00c0, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x00c0, 0x1ec1: 0x00c0, 0x1ec2: 0x00c0, 0x1ec3: 0x00c0, 0x1ec4: 0x00c0, 0x1ec5: 0x00c0, + 0x1ec6: 0x00c0, 0x1ec7: 0x00c0, 0x1ec8: 0x00c0, 0x1ec9: 0x00c0, 0x1eca: 0x00c0, 0x1ecb: 0x00c0, + 0x1ecc: 0x00c0, 0x1ecd: 0x00c0, 0x1ece: 0x00c0, 0x1ecf: 0x00c0, 0x1ed0: 0x00c0, 0x1ed1: 0x00c0, + 0x1ed2: 0x00c0, 0x1ed3: 0x00c0, 0x1ed4: 0x00c0, 0x1ed5: 0x00c0, 0x1ed6: 0x00c0, 0x1ed7: 0x00c0, + 0x1ed8: 0x00c0, 0x1ed9: 0x00c0, 0x1eda: 0x00c0, 0x1edb: 0x00c0, 0x1edc: 0x00c0, 0x1edd: 0x00c0, + 0x1ede: 0x00c0, 0x1ee0: 0x00c0, 0x1ee1: 0x00c0, 0x1ee2: 0x00c0, 0x1ee3: 0x00c0, + 0x1ee4: 0x00c0, 0x1ee5: 0x00c0, 0x1ee6: 0x00c0, 0x1ee7: 0x00c0, 0x1ee8: 0x00c0, 0x1ee9: 0x00c0, + 0x1eea: 0x00c0, 0x1eeb: 0x00c0, 0x1eec: 0x00c0, 0x1eed: 0x00c0, 0x1eee: 0x00c0, 0x1eef: 0x00c0, + 0x1ef0: 0x00c0, 0x1ef1: 0x00c0, 0x1ef2: 0x00c0, 0x1ef3: 0x00c0, 0x1ef4: 0x00c0, 0x1ef5: 0x00c0, + 0x1ef6: 0x00c0, 0x1ef7: 0x00c0, 0x1ef8: 0x00c0, 0x1ef9: 0x00c0, 0x1efa: 0x00c0, 0x1efb: 0x00c0, + 0x1efc: 0x0080, 0x1efd: 0x0080, 0x1efe: 0x00c0, 0x1eff: 0x00c0, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0x00c0, 0x1f01: 0x00c0, 0x1f02: 0x00c0, 0x1f03: 0x00c0, 0x1f04: 0x00c0, 0x1f05: 0x00c0, + 0x1f06: 0x00c0, 0x1f07: 0x00c0, 0x1f08: 0x00c0, 0x1f09: 0x00c0, 0x1f0a: 0x00c0, 0x1f0b: 0x00c0, + 0x1f0c: 0x00c0, 0x1f0d: 0x00c0, 0x1f0e: 0x00c0, 0x1f0f: 0x00c0, 0x1f10: 0x00c0, 0x1f11: 0x00c0, + 0x1f12: 0x00c0, 0x1f13: 0x00c0, 0x1f14: 0x00c0, 0x1f15: 0x00c0, 0x1f16: 0x00c0, 0x1f17: 0x00c0, + 0x1f18: 0x00c0, 0x1f19: 0x00c0, 0x1f1a: 0x00c0, 0x1f1b: 0x00c0, 0x1f1c: 0x00c0, 0x1f1d: 0x00c0, + 0x1f1e: 0x00c0, 0x1f1f: 0x00c0, 0x1f20: 0x00c0, 0x1f21: 0x00c0, 0x1f22: 0x00c0, 0x1f23: 0x00c0, + 0x1f24: 0x00c0, 0x1f25: 0x0080, 0x1f26: 0x0080, 0x1f27: 0x0080, 0x1f28: 0x0080, 0x1f29: 0x0080, + 0x1f2a: 0x0080, 0x1f2b: 0x00c0, 0x1f2c: 0x00c0, 0x1f2d: 0x00c0, 0x1f2e: 0x00c0, 0x1f2f: 0x00c3, + 0x1f30: 0x00c3, 0x1f31: 0x00c3, 0x1f32: 0x00c0, 0x1f33: 0x00c0, + 0x1f39: 0x0080, 0x1f3a: 0x0080, 0x1f3b: 0x0080, + 0x1f3c: 0x0080, 0x1f3d: 0x0080, 0x1f3e: 0x0080, 0x1f3f: 0x0080, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0x00c0, 0x1f41: 0x00c0, 0x1f42: 0x00c0, 0x1f43: 0x00c0, 0x1f44: 0x00c0, 0x1f45: 0x00c0, + 0x1f46: 0x00c0, 0x1f47: 0x00c0, 0x1f48: 0x00c0, 0x1f49: 0x00c0, 0x1f4a: 0x00c0, 0x1f4b: 0x00c0, + 0x1f4c: 0x00c0, 0x1f4d: 0x00c0, 0x1f4e: 0x00c0, 0x1f4f: 0x00c0, 0x1f50: 0x00c0, 0x1f51: 0x00c0, + 0x1f52: 0x00c0, 0x1f53: 0x00c0, 0x1f54: 0x00c0, 0x1f55: 0x00c0, 0x1f56: 0x00c0, 0x1f57: 0x00c0, + 0x1f58: 0x00c0, 0x1f59: 0x00c0, 0x1f5a: 0x00c0, 0x1f5b: 0x00c0, 0x1f5c: 0x00c0, 0x1f5d: 0x00c0, + 0x1f5e: 0x00c0, 0x1f5f: 0x00c0, 0x1f60: 0x00c0, 0x1f61: 0x00c0, 0x1f62: 0x00c0, 0x1f63: 0x00c0, + 0x1f64: 0x00c0, 0x1f65: 0x00c0, 0x1f67: 0x00c0, + 0x1f6d: 0x00c0, + 0x1f70: 0x00c0, 0x1f71: 0x00c0, 0x1f72: 0x00c0, 0x1f73: 0x00c0, 0x1f74: 0x00c0, 0x1f75: 0x00c0, + 0x1f76: 0x00c0, 0x1f77: 0x00c0, 0x1f78: 0x00c0, 0x1f79: 0x00c0, 0x1f7a: 0x00c0, 0x1f7b: 0x00c0, + 0x1f7c: 0x00c0, 0x1f7d: 0x00c0, 0x1f7e: 0x00c0, 0x1f7f: 0x00c0, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x00c0, 0x1f81: 0x00c0, 0x1f82: 0x00c0, 0x1f83: 0x00c0, 0x1f84: 0x00c0, 0x1f85: 0x00c0, + 0x1f86: 0x00c0, 0x1f87: 0x00c0, 0x1f88: 0x00c0, 0x1f89: 0x00c0, 0x1f8a: 0x00c0, 0x1f8b: 0x00c0, + 0x1f8c: 0x00c0, 0x1f8d: 0x00c0, 0x1f8e: 0x00c0, 0x1f8f: 0x00c0, 0x1f90: 0x00c0, 0x1f91: 0x00c0, + 0x1f92: 0x00c0, 0x1f93: 0x00c0, 0x1f94: 0x00c0, 0x1f95: 0x00c0, 0x1f96: 0x00c0, 0x1f97: 0x00c0, + 0x1f98: 0x00c0, 0x1f99: 0x00c0, 0x1f9a: 0x00c0, 0x1f9b: 0x00c0, 0x1f9c: 0x00c0, 0x1f9d: 0x00c0, + 0x1f9e: 0x00c0, 0x1f9f: 0x00c0, 0x1fa0: 0x00c0, 0x1fa1: 0x00c0, 0x1fa2: 0x00c0, 0x1fa3: 0x00c0, + 0x1fa4: 0x00c0, 0x1fa5: 0x00c0, 0x1fa6: 0x00c0, 0x1fa7: 0x00c0, + 0x1faf: 0x0080, + 0x1fb0: 0x0080, + 0x1fbf: 0x00c6, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x00c0, 0x1fc1: 0x00c0, 0x1fc2: 0x00c0, 0x1fc3: 0x00c0, 0x1fc4: 0x00c0, 0x1fc5: 0x00c0, + 0x1fc6: 0x00c0, 0x1fc7: 0x00c0, 0x1fc8: 0x00c0, 0x1fc9: 0x00c0, 0x1fca: 0x00c0, 0x1fcb: 0x00c0, + 0x1fcc: 0x00c0, 0x1fcd: 0x00c0, 0x1fce: 0x00c0, 0x1fcf: 0x00c0, 0x1fd0: 0x00c0, 0x1fd1: 0x00c0, + 0x1fd2: 0x00c0, 0x1fd3: 0x00c0, 0x1fd4: 0x00c0, 0x1fd5: 0x00c0, 0x1fd6: 0x00c0, + 0x1fe0: 0x00c0, 0x1fe1: 0x00c0, 0x1fe2: 0x00c0, 0x1fe3: 0x00c0, + 0x1fe4: 0x00c0, 0x1fe5: 0x00c0, 0x1fe6: 0x00c0, 0x1fe8: 0x00c0, 0x1fe9: 0x00c0, + 0x1fea: 0x00c0, 0x1feb: 0x00c0, 0x1fec: 0x00c0, 0x1fed: 0x00c0, 0x1fee: 0x00c0, + 0x1ff0: 0x00c0, 0x1ff1: 0x00c0, 0x1ff2: 0x00c0, 0x1ff3: 0x00c0, 0x1ff4: 0x00c0, 0x1ff5: 0x00c0, + 0x1ff6: 0x00c0, 0x1ff8: 0x00c0, 0x1ff9: 0x00c0, 0x1ffa: 0x00c0, 0x1ffb: 0x00c0, + 0x1ffc: 0x00c0, 0x1ffd: 0x00c0, 0x1ffe: 0x00c0, + // Block 0x80, offset 0x2000 + 0x2000: 0x00c0, 0x2001: 0x00c0, 0x2002: 0x00c0, 0x2003: 0x00c0, 0x2004: 0x00c0, 0x2005: 0x00c0, + 0x2006: 0x00c0, 0x2008: 0x00c0, 0x2009: 0x00c0, 0x200a: 0x00c0, 0x200b: 0x00c0, + 0x200c: 0x00c0, 0x200d: 0x00c0, 0x200e: 0x00c0, 0x2010: 0x00c0, 0x2011: 0x00c0, + 0x2012: 0x00c0, 0x2013: 0x00c0, 0x2014: 0x00c0, 0x2015: 0x00c0, 0x2016: 0x00c0, + 0x2018: 0x00c0, 0x2019: 0x00c0, 0x201a: 0x00c0, 0x201b: 0x00c0, 0x201c: 0x00c0, 0x201d: 0x00c0, + 0x201e: 0x00c0, 0x2020: 0x00c3, 0x2021: 0x00c3, 0x2022: 0x00c3, 0x2023: 0x00c3, + 0x2024: 0x00c3, 0x2025: 0x00c3, 0x2026: 0x00c3, 0x2027: 0x00c3, 0x2028: 0x00c3, 0x2029: 0x00c3, + 0x202a: 0x00c3, 0x202b: 0x00c3, 0x202c: 0x00c3, 0x202d: 0x00c3, 0x202e: 0x00c3, 0x202f: 0x00c3, + 0x2030: 0x00c3, 0x2031: 0x00c3, 0x2032: 0x00c3, 0x2033: 0x00c3, 0x2034: 0x00c3, 0x2035: 0x00c3, + 0x2036: 0x00c3, 0x2037: 0x00c3, 0x2038: 0x00c3, 0x2039: 0x00c3, 0x203a: 0x00c3, 0x203b: 0x00c3, + 0x203c: 0x00c3, 0x203d: 0x00c3, 0x203e: 0x00c3, 0x203f: 0x00c3, + // Block 0x81, offset 0x2040 + 0x2040: 0x0080, 0x2041: 0x0080, 0x2042: 0x0080, 0x2043: 0x0080, 0x2044: 0x0080, 0x2045: 0x0080, + 0x2046: 0x0080, 0x2047: 0x0080, 0x2048: 0x0080, 0x2049: 0x0080, 0x204a: 0x0080, 0x204b: 0x0080, + 0x204c: 0x0080, 0x204d: 0x0080, 0x204e: 0x0080, 0x204f: 0x0080, 0x2050: 0x0080, 0x2051: 0x0080, + 0x2052: 0x0080, 0x2053: 0x0080, 0x2054: 0x0080, 0x2055: 0x0080, 0x2056: 0x0080, 0x2057: 0x0080, + 0x2058: 0x0080, 0x2059: 0x0080, 0x205a: 0x0080, 0x205b: 0x0080, 0x205c: 0x0080, 0x205d: 0x0080, + 0x205e: 0x0080, 0x205f: 0x0080, 0x2060: 0x0080, 0x2061: 0x0080, 0x2062: 0x0080, 0x2063: 0x0080, + 0x2064: 0x0080, 0x2065: 0x0080, 0x2066: 0x0080, 0x2067: 0x0080, 0x2068: 0x0080, 0x2069: 0x0080, + 0x206a: 0x0080, 0x206b: 0x0080, 0x206c: 0x0080, 0x206d: 0x0080, 0x206e: 0x0080, 0x206f: 0x00c0, + 0x2070: 0x0080, 0x2071: 0x0080, 0x2072: 0x0080, 0x2073: 0x0080, 0x2074: 0x0080, 0x2075: 0x0080, + 0x2076: 0x0080, 0x2077: 0x0080, 0x2078: 0x0080, 0x2079: 0x0080, 0x207a: 0x0080, 0x207b: 0x0080, + 0x207c: 0x0080, 0x207d: 0x0080, 0x207e: 0x0080, 0x207f: 0x0080, + // Block 0x82, offset 0x2080 + 0x2080: 0x0080, 0x2081: 0x0080, 0x2082: 0x0080, 0x2083: 0x0080, 0x2084: 0x0080, + // Block 0x83, offset 0x20c0 + 0x20c0: 0x008c, 0x20c1: 0x008c, 0x20c2: 0x008c, 0x20c3: 0x008c, 0x20c4: 0x008c, 0x20c5: 0x008c, + 0x20c6: 0x008c, 0x20c7: 0x008c, 0x20c8: 0x008c, 0x20c9: 0x008c, 0x20ca: 0x008c, 0x20cb: 0x008c, + 0x20cc: 0x008c, 0x20cd: 0x008c, 0x20ce: 0x008c, 0x20cf: 0x008c, 0x20d0: 0x008c, 0x20d1: 0x008c, + 0x20d2: 0x008c, 0x20d3: 0x008c, 0x20d4: 0x008c, 0x20d5: 0x008c, 0x20d6: 0x008c, 0x20d7: 0x008c, + 0x20d8: 0x008c, 0x20d9: 0x008c, 0x20db: 0x008c, 0x20dc: 0x008c, 0x20dd: 0x008c, + 0x20de: 0x008c, 0x20df: 0x008c, 0x20e0: 0x008c, 0x20e1: 0x008c, 0x20e2: 0x008c, 0x20e3: 0x008c, + 0x20e4: 0x008c, 0x20e5: 0x008c, 0x20e6: 0x008c, 0x20e7: 0x008c, 0x20e8: 0x008c, 0x20e9: 0x008c, + 0x20ea: 0x008c, 0x20eb: 0x008c, 0x20ec: 0x008c, 0x20ed: 0x008c, 0x20ee: 0x008c, 0x20ef: 0x008c, + 0x20f0: 0x008c, 0x20f1: 0x008c, 0x20f2: 0x008c, 0x20f3: 0x008c, 0x20f4: 0x008c, 0x20f5: 0x008c, + 0x20f6: 0x008c, 0x20f7: 0x008c, 0x20f8: 0x008c, 0x20f9: 0x008c, 0x20fa: 0x008c, 0x20fb: 0x008c, + 0x20fc: 0x008c, 0x20fd: 0x008c, 0x20fe: 0x008c, 0x20ff: 0x008c, + // Block 0x84, offset 0x2100 + 0x2100: 0x008c, 0x2101: 0x008c, 0x2102: 0x008c, 0x2103: 0x008c, 0x2104: 0x008c, 0x2105: 0x008c, + 0x2106: 0x008c, 0x2107: 0x008c, 0x2108: 0x008c, 0x2109: 0x008c, 0x210a: 0x008c, 0x210b: 0x008c, + 0x210c: 0x008c, 0x210d: 0x008c, 0x210e: 0x008c, 0x210f: 0x008c, 0x2110: 0x008c, 0x2111: 0x008c, + 0x2112: 0x008c, 0x2113: 0x008c, 0x2114: 0x008c, 0x2115: 0x008c, 0x2116: 0x008c, 0x2117: 0x008c, + 0x2118: 0x008c, 0x2119: 0x008c, 0x211a: 0x008c, 0x211b: 0x008c, 0x211c: 0x008c, 0x211d: 0x008c, + 0x211e: 0x008c, 0x211f: 0x008c, 0x2120: 0x008c, 0x2121: 0x008c, 0x2122: 0x008c, 0x2123: 0x008c, + 0x2124: 0x008c, 0x2125: 0x008c, 0x2126: 0x008c, 0x2127: 0x008c, 0x2128: 0x008c, 0x2129: 0x008c, + 0x212a: 0x008c, 0x212b: 0x008c, 0x212c: 0x008c, 0x212d: 0x008c, 0x212e: 0x008c, 0x212f: 0x008c, + 0x2130: 0x008c, 0x2131: 0x008c, 0x2132: 0x008c, 0x2133: 0x008c, + // Block 0x85, offset 0x2140 + 0x2140: 0x008c, 0x2141: 0x008c, 0x2142: 0x008c, 0x2143: 0x008c, 0x2144: 0x008c, 0x2145: 0x008c, + 0x2146: 0x008c, 0x2147: 0x008c, 0x2148: 0x008c, 0x2149: 0x008c, 0x214a: 0x008c, 0x214b: 0x008c, + 0x214c: 0x008c, 0x214d: 0x008c, 0x214e: 0x008c, 0x214f: 0x008c, 0x2150: 0x008c, 0x2151: 0x008c, + 0x2152: 0x008c, 0x2153: 0x008c, 0x2154: 0x008c, 0x2155: 0x008c, 0x2156: 0x008c, 0x2157: 0x008c, + 0x2158: 0x008c, 0x2159: 0x008c, 0x215a: 0x008c, 0x215b: 0x008c, 0x215c: 0x008c, 0x215d: 0x008c, + 0x215e: 0x008c, 0x215f: 0x008c, 0x2160: 0x008c, 0x2161: 0x008c, 0x2162: 0x008c, 0x2163: 0x008c, + 0x2164: 0x008c, 0x2165: 0x008c, 0x2166: 0x008c, 0x2167: 0x008c, 0x2168: 0x008c, 0x2169: 0x008c, + 0x216a: 0x008c, 0x216b: 0x008c, 0x216c: 0x008c, 0x216d: 0x008c, 0x216e: 0x008c, 0x216f: 0x008c, + 0x2170: 0x008c, 0x2171: 0x008c, 0x2172: 0x008c, 0x2173: 0x008c, 0x2174: 0x008c, 0x2175: 0x008c, + 0x2176: 0x008c, 0x2177: 0x008c, 0x2178: 0x008c, 0x2179: 0x008c, 0x217a: 0x008c, 0x217b: 0x008c, + 0x217c: 0x008c, 0x217d: 0x008c, 0x217e: 0x008c, 0x217f: 0x008c, + // Block 0x86, offset 0x2180 + 0x2180: 0x008c, 0x2181: 0x008c, 0x2182: 0x008c, 0x2183: 0x008c, 0x2184: 0x008c, 0x2185: 0x008c, + 0x2186: 0x008c, 0x2187: 0x008c, 0x2188: 0x008c, 0x2189: 0x008c, 0x218a: 0x008c, 0x218b: 0x008c, + 0x218c: 0x008c, 0x218d: 0x008c, 0x218e: 0x008c, 0x218f: 0x008c, 0x2190: 0x008c, 0x2191: 0x008c, + 0x2192: 0x008c, 0x2193: 0x008c, 0x2194: 0x008c, 0x2195: 0x008c, + 0x21b0: 0x0080, 0x21b1: 0x0080, 0x21b2: 0x0080, 0x21b3: 0x0080, 0x21b4: 0x0080, 0x21b5: 0x0080, + 0x21b6: 0x0080, 0x21b7: 0x0080, 0x21b8: 0x0080, 0x21b9: 0x0080, 0x21ba: 0x0080, 0x21bb: 0x0080, + // Block 0x87, offset 0x21c0 + 0x21c0: 0x0080, 0x21c1: 0x0080, 0x21c2: 0x0080, 0x21c3: 0x0080, 0x21c4: 0x0080, 0x21c5: 0x00cc, + 0x21c6: 0x00c0, 0x21c7: 0x00cc, 0x21c8: 0x0080, 0x21c9: 0x0080, 0x21ca: 0x0080, 0x21cb: 0x0080, + 0x21cc: 0x0080, 0x21cd: 0x0080, 0x21ce: 0x0080, 0x21cf: 0x0080, 0x21d0: 0x0080, 0x21d1: 0x0080, + 0x21d2: 0x0080, 0x21d3: 0x0080, 0x21d4: 0x0080, 0x21d5: 0x0080, 0x21d6: 0x0080, 0x21d7: 0x0080, + 0x21d8: 0x0080, 0x21d9: 0x0080, 0x21da: 0x0080, 0x21db: 0x0080, 0x21dc: 0x0080, 0x21dd: 0x0080, + 0x21de: 0x0080, 0x21df: 0x0080, 0x21e0: 0x0080, 0x21e1: 0x008c, 0x21e2: 0x008c, 0x21e3: 0x008c, + 0x21e4: 0x008c, 0x21e5: 0x008c, 0x21e6: 0x008c, 0x21e7: 0x008c, 0x21e8: 0x008c, 0x21e9: 0x008c, + 0x21ea: 0x00c3, 0x21eb: 0x00c3, 0x21ec: 0x00c3, 0x21ed: 0x00c3, 0x21ee: 0x0040, 0x21ef: 0x0040, + 0x21f0: 0x0080, 0x21f1: 0x0040, 0x21f2: 0x0040, 0x21f3: 0x0040, 0x21f4: 0x0040, 0x21f5: 0x0040, + 0x21f6: 0x0080, 0x21f7: 0x0080, 0x21f8: 0x008c, 0x21f9: 0x008c, 0x21fa: 0x008c, 0x21fb: 0x0040, + 0x21fc: 0x00c0, 0x21fd: 0x0080, 0x21fe: 0x0080, 0x21ff: 0x0080, + // Block 0x88, offset 0x2200 + 0x2201: 0x00cc, 0x2202: 0x00cc, 0x2203: 0x00cc, 0x2204: 0x00cc, 0x2205: 0x00cc, + 0x2206: 0x00cc, 0x2207: 0x00cc, 0x2208: 0x00cc, 0x2209: 0x00cc, 0x220a: 0x00cc, 0x220b: 0x00cc, + 0x220c: 0x00cc, 0x220d: 0x00cc, 0x220e: 0x00cc, 0x220f: 0x00cc, 0x2210: 0x00cc, 0x2211: 0x00cc, + 0x2212: 0x00cc, 0x2213: 0x00cc, 0x2214: 0x00cc, 0x2215: 0x00cc, 0x2216: 0x00cc, 0x2217: 0x00cc, + 0x2218: 0x00cc, 0x2219: 0x00cc, 0x221a: 0x00cc, 0x221b: 0x00cc, 0x221c: 0x00cc, 0x221d: 0x00cc, + 0x221e: 0x00cc, 0x221f: 0x00cc, 0x2220: 0x00cc, 0x2221: 0x00cc, 0x2222: 0x00cc, 0x2223: 0x00cc, + 0x2224: 0x00cc, 0x2225: 0x00cc, 0x2226: 0x00cc, 0x2227: 0x00cc, 0x2228: 0x00cc, 0x2229: 0x00cc, + 0x222a: 0x00cc, 0x222b: 0x00cc, 0x222c: 0x00cc, 0x222d: 0x00cc, 0x222e: 0x00cc, 0x222f: 0x00cc, + 0x2230: 0x00cc, 0x2231: 0x00cc, 0x2232: 0x00cc, 0x2233: 0x00cc, 0x2234: 0x00cc, 0x2235: 0x00cc, + 0x2236: 0x00cc, 0x2237: 0x00cc, 0x2238: 0x00cc, 0x2239: 0x00cc, 0x223a: 0x00cc, 0x223b: 0x00cc, + 0x223c: 0x00cc, 0x223d: 0x00cc, 0x223e: 0x00cc, 0x223f: 0x00cc, + // Block 0x89, offset 0x2240 + 0x2240: 0x00cc, 0x2241: 0x00cc, 0x2242: 0x00cc, 0x2243: 0x00cc, 0x2244: 0x00cc, 0x2245: 0x00cc, + 0x2246: 0x00cc, 0x2247: 0x00cc, 0x2248: 0x00cc, 0x2249: 0x00cc, 0x224a: 0x00cc, 0x224b: 0x00cc, + 0x224c: 0x00cc, 0x224d: 0x00cc, 0x224e: 0x00cc, 0x224f: 0x00cc, 0x2250: 0x00cc, 0x2251: 0x00cc, + 0x2252: 0x00cc, 0x2253: 0x00cc, 0x2254: 0x00cc, 0x2255: 0x00cc, 0x2256: 0x00cc, + 0x2259: 0x00c3, 0x225a: 0x00c3, 0x225b: 0x0080, 0x225c: 0x0080, 0x225d: 0x00cc, + 0x225e: 0x00cc, 0x225f: 0x008c, 0x2260: 0x0080, 0x2261: 0x00cc, 0x2262: 0x00cc, 0x2263: 0x00cc, + 0x2264: 0x00cc, 0x2265: 0x00cc, 0x2266: 0x00cc, 0x2267: 0x00cc, 0x2268: 0x00cc, 0x2269: 0x00cc, + 0x226a: 0x00cc, 0x226b: 0x00cc, 0x226c: 0x00cc, 0x226d: 0x00cc, 0x226e: 0x00cc, 0x226f: 0x00cc, + 0x2270: 0x00cc, 0x2271: 0x00cc, 0x2272: 0x00cc, 0x2273: 0x00cc, 0x2274: 0x00cc, 0x2275: 0x00cc, + 0x2276: 0x00cc, 0x2277: 0x00cc, 0x2278: 0x00cc, 0x2279: 0x00cc, 0x227a: 0x00cc, 0x227b: 0x00cc, + 0x227c: 0x00cc, 0x227d: 0x00cc, 0x227e: 0x00cc, 0x227f: 0x00cc, + // Block 0x8a, offset 0x2280 + 0x2280: 0x00cc, 0x2281: 0x00cc, 0x2282: 0x00cc, 0x2283: 0x00cc, 0x2284: 0x00cc, 0x2285: 0x00cc, + 0x2286: 0x00cc, 0x2287: 0x00cc, 0x2288: 0x00cc, 0x2289: 0x00cc, 0x228a: 0x00cc, 0x228b: 0x00cc, + 0x228c: 0x00cc, 0x228d: 0x00cc, 0x228e: 0x00cc, 0x228f: 0x00cc, 0x2290: 0x00cc, 0x2291: 0x00cc, + 0x2292: 0x00cc, 0x2293: 0x00cc, 0x2294: 0x00cc, 0x2295: 0x00cc, 0x2296: 0x00cc, 0x2297: 0x00cc, + 0x2298: 0x00cc, 0x2299: 0x00cc, 0x229a: 0x00cc, 0x229b: 0x00cc, 0x229c: 0x00cc, 0x229d: 0x00cc, + 0x229e: 0x00cc, 0x229f: 0x00cc, 0x22a0: 0x00cc, 0x22a1: 0x00cc, 0x22a2: 0x00cc, 0x22a3: 0x00cc, + 0x22a4: 0x00cc, 0x22a5: 0x00cc, 0x22a6: 0x00cc, 0x22a7: 0x00cc, 0x22a8: 0x00cc, 0x22a9: 0x00cc, + 0x22aa: 0x00cc, 0x22ab: 0x00cc, 0x22ac: 0x00cc, 0x22ad: 0x00cc, 0x22ae: 0x00cc, 0x22af: 0x00cc, + 0x22b0: 0x00cc, 0x22b1: 0x00cc, 0x22b2: 0x00cc, 0x22b3: 0x00cc, 0x22b4: 0x00cc, 0x22b5: 0x00cc, + 0x22b6: 0x00cc, 0x22b7: 0x00cc, 0x22b8: 0x00cc, 0x22b9: 0x00cc, 0x22ba: 0x00cc, 0x22bb: 0x00d2, + 0x22bc: 0x00c0, 0x22bd: 0x00cc, 0x22be: 0x00cc, 0x22bf: 0x008c, + // Block 0x8b, offset 0x22c0 + 0x22c5: 0x00c0, + 0x22c6: 0x00c0, 0x22c7: 0x00c0, 0x22c8: 0x00c0, 0x22c9: 0x00c0, 0x22ca: 0x00c0, 0x22cb: 0x00c0, + 0x22cc: 0x00c0, 0x22cd: 0x00c0, 0x22ce: 0x00c0, 0x22cf: 0x00c0, 0x22d0: 0x00c0, 0x22d1: 0x00c0, + 0x22d2: 0x00c0, 0x22d3: 0x00c0, 0x22d4: 0x00c0, 0x22d5: 0x00c0, 0x22d6: 0x00c0, 0x22d7: 0x00c0, + 0x22d8: 0x00c0, 0x22d9: 0x00c0, 0x22da: 0x00c0, 0x22db: 0x00c0, 0x22dc: 0x00c0, 0x22dd: 0x00c0, + 0x22de: 0x00c0, 0x22df: 0x00c0, 0x22e0: 0x00c0, 0x22e1: 0x00c0, 0x22e2: 0x00c0, 0x22e3: 0x00c0, + 0x22e4: 0x00c0, 0x22e5: 0x00c0, 0x22e6: 0x00c0, 0x22e7: 0x00c0, 0x22e8: 0x00c0, 0x22e9: 0x00c0, + 0x22ea: 0x00c0, 0x22eb: 0x00c0, 0x22ec: 0x00c0, 0x22ed: 0x00c0, + 0x22f1: 0x0080, 0x22f2: 0x0080, 0x22f3: 0x0080, 0x22f4: 0x0080, 0x22f5: 0x0080, + 0x22f6: 0x0080, 0x22f7: 0x0080, 0x22f8: 0x0080, 0x22f9: 0x0080, 0x22fa: 0x0080, 0x22fb: 0x0080, + 0x22fc: 0x0080, 0x22fd: 0x0080, 0x22fe: 0x0080, 0x22ff: 0x0080, + // Block 0x8c, offset 0x2300 + 0x2300: 0x0080, 0x2301: 0x0080, 0x2302: 0x0080, 0x2303: 0x0080, 0x2304: 0x0080, 0x2305: 0x0080, + 0x2306: 0x0080, 0x2307: 0x0080, 0x2308: 0x0080, 0x2309: 0x0080, 0x230a: 0x0080, 0x230b: 0x0080, + 0x230c: 0x0080, 0x230d: 0x0080, 0x230e: 0x0080, 0x230f: 0x0080, 0x2310: 0x0080, 0x2311: 0x0080, + 0x2312: 0x0080, 0x2313: 0x0080, 0x2314: 0x0080, 0x2315: 0x0080, 0x2316: 0x0080, 0x2317: 0x0080, + 0x2318: 0x0080, 0x2319: 0x0080, 0x231a: 0x0080, 0x231b: 0x0080, 0x231c: 0x0080, 0x231d: 0x0080, + 0x231e: 0x0080, 0x231f: 0x0080, 0x2320: 0x0080, 0x2321: 0x0080, 0x2322: 0x0080, 0x2323: 0x0080, + 0x2324: 0x0040, 0x2325: 0x0080, 0x2326: 0x0080, 0x2327: 0x0080, 0x2328: 0x0080, 0x2329: 0x0080, + 0x232a: 0x0080, 0x232b: 0x0080, 0x232c: 0x0080, 0x232d: 0x0080, 0x232e: 0x0080, 0x232f: 0x0080, + 0x2330: 0x0080, 0x2331: 0x0080, 0x2332: 0x0080, 0x2333: 0x0080, 0x2334: 0x0080, 0x2335: 0x0080, + 0x2336: 0x0080, 0x2337: 0x0080, 0x2338: 0x0080, 0x2339: 0x0080, 0x233a: 0x0080, 0x233b: 0x0080, + 0x233c: 0x0080, 0x233d: 0x0080, 0x233e: 0x0080, 0x233f: 0x0080, + // Block 0x8d, offset 0x2340 + 0x2340: 0x0080, 0x2341: 0x0080, 0x2342: 0x0080, 0x2343: 0x0080, 0x2344: 0x0080, 0x2345: 0x0080, + 0x2346: 0x0080, 0x2347: 0x0080, 0x2348: 0x0080, 0x2349: 0x0080, 0x234a: 0x0080, 0x234b: 0x0080, + 0x234c: 0x0080, 0x234d: 0x0080, 0x234e: 0x0080, 0x2350: 0x0080, 0x2351: 0x0080, + 0x2352: 0x0080, 0x2353: 0x0080, 0x2354: 0x0080, 0x2355: 0x0080, 0x2356: 0x0080, 0x2357: 0x0080, + 0x2358: 0x0080, 0x2359: 0x0080, 0x235a: 0x0080, 0x235b: 0x0080, 0x235c: 0x0080, 0x235d: 0x0080, + 0x235e: 0x0080, 0x235f: 0x0080, 0x2360: 0x00c0, 0x2361: 0x00c0, 0x2362: 0x00c0, 0x2363: 0x00c0, + 0x2364: 0x00c0, 0x2365: 0x00c0, 0x2366: 0x00c0, 0x2367: 0x00c0, 0x2368: 0x00c0, 0x2369: 0x00c0, + 0x236a: 0x00c0, 0x236b: 0x00c0, 0x236c: 0x00c0, 0x236d: 0x00c0, 0x236e: 0x00c0, 0x236f: 0x00c0, + 0x2370: 0x00c0, 0x2371: 0x00c0, 0x2372: 0x00c0, 0x2373: 0x00c0, 0x2374: 0x00c0, 0x2375: 0x00c0, + 0x2376: 0x00c0, 0x2377: 0x00c0, 0x2378: 0x00c0, 0x2379: 0x00c0, 0x237a: 0x00c0, + // Block 0x8e, offset 0x2380 + 0x2380: 0x0080, 0x2381: 0x0080, 0x2382: 0x0080, 0x2383: 0x0080, 0x2384: 0x0080, 0x2385: 0x0080, + 0x2386: 0x0080, 0x2387: 0x0080, 0x2388: 0x0080, 0x2389: 0x0080, 0x238a: 0x0080, 0x238b: 0x0080, + 0x238c: 0x0080, 0x238d: 0x0080, 0x238e: 0x0080, 0x238f: 0x0080, 0x2390: 0x0080, 0x2391: 0x0080, + 0x2392: 0x0080, 0x2393: 0x0080, 0x2394: 0x0080, 0x2395: 0x0080, 0x2396: 0x0080, 0x2397: 0x0080, + 0x2398: 0x0080, 0x2399: 0x0080, 0x239a: 0x0080, 0x239b: 0x0080, 0x239c: 0x0080, 0x239d: 0x0080, + 0x239e: 0x0080, 0x239f: 0x0080, 0x23a0: 0x0080, 0x23a1: 0x0080, 0x23a2: 0x0080, 0x23a3: 0x0080, + 0x23b0: 0x00cc, 0x23b1: 0x00cc, 0x23b2: 0x00cc, 0x23b3: 0x00cc, 0x23b4: 0x00cc, 0x23b5: 0x00cc, + 0x23b6: 0x00cc, 0x23b7: 0x00cc, 0x23b8: 0x00cc, 0x23b9: 0x00cc, 0x23ba: 0x00cc, 0x23bb: 0x00cc, + 0x23bc: 0x00cc, 0x23bd: 0x00cc, 0x23be: 0x00cc, 0x23bf: 0x00cc, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x0080, 0x23c1: 0x0080, 0x23c2: 0x0080, 0x23c3: 0x0080, 0x23c4: 0x0080, 0x23c5: 0x0080, + 0x23c6: 0x0080, 0x23c7: 0x0080, 0x23c8: 0x0080, 0x23c9: 0x0080, 0x23ca: 0x0080, 0x23cb: 0x0080, + 0x23cc: 0x0080, 0x23cd: 0x0080, 0x23ce: 0x0080, 0x23cf: 0x0080, 0x23d0: 0x0080, 0x23d1: 0x0080, + 0x23d2: 0x0080, 0x23d3: 0x0080, 0x23d4: 0x0080, 0x23d5: 0x0080, 0x23d6: 0x0080, 0x23d7: 0x0080, + 0x23d8: 0x0080, 0x23d9: 0x0080, 0x23da: 0x0080, 0x23db: 0x0080, 0x23dc: 0x0080, 0x23dd: 0x0080, + 0x23de: 0x0080, 0x23e0: 0x0080, 0x23e1: 0x0080, 0x23e2: 0x0080, 0x23e3: 0x0080, + 0x23e4: 0x0080, 0x23e5: 0x0080, 0x23e6: 0x0080, 0x23e7: 0x0080, 0x23e8: 0x0080, 0x23e9: 0x0080, + 0x23ea: 0x0080, 0x23eb: 0x0080, 0x23ec: 0x0080, 0x23ed: 0x0080, 0x23ee: 0x0080, 0x23ef: 0x0080, + 0x23f0: 0x0080, 0x23f1: 0x0080, 0x23f2: 0x0080, 0x23f3: 0x0080, 0x23f4: 0x0080, 0x23f5: 0x0080, + 0x23f6: 0x0080, 0x23f7: 0x0080, 0x23f8: 0x0080, 0x23f9: 0x0080, 0x23fa: 0x0080, 0x23fb: 0x0080, + 0x23fc: 0x0080, 0x23fd: 0x0080, 0x23fe: 0x0080, 0x23ff: 0x0080, + // Block 0x90, offset 0x2400 + 0x2400: 0x0080, 0x2401: 0x0080, 0x2402: 0x0080, 0x2403: 0x0080, 0x2404: 0x0080, 0x2405: 0x0080, + 0x2406: 0x0080, 0x2407: 0x0080, 0x2408: 0x0080, 0x2409: 0x0080, 0x240a: 0x0080, 0x240b: 0x0080, + 0x240c: 0x0080, 0x240d: 0x0080, 0x240e: 0x0080, 0x240f: 0x0080, 0x2410: 0x008c, 0x2411: 0x008c, + 0x2412: 0x008c, 0x2413: 0x008c, 0x2414: 0x008c, 0x2415: 0x008c, 0x2416: 0x008c, 0x2417: 0x008c, + 0x2418: 0x008c, 0x2419: 0x008c, 0x241a: 0x008c, 0x241b: 0x008c, 0x241c: 0x008c, 0x241d: 0x008c, + 0x241e: 0x008c, 0x241f: 0x008c, 0x2420: 0x008c, 0x2421: 0x008c, 0x2422: 0x008c, 0x2423: 0x008c, + 0x2424: 0x008c, 0x2425: 0x008c, 0x2426: 0x008c, 0x2427: 0x008c, 0x2428: 0x008c, 0x2429: 0x008c, + 0x242a: 0x008c, 0x242b: 0x008c, 0x242c: 0x008c, 0x242d: 0x008c, 0x242e: 0x008c, 0x242f: 0x008c, + 0x2430: 0x008c, 0x2431: 0x008c, 0x2432: 0x008c, 0x2433: 0x008c, 0x2434: 0x008c, 0x2435: 0x008c, + 0x2436: 0x008c, 0x2437: 0x008c, 0x2438: 0x008c, 0x2439: 0x008c, 0x243a: 0x008c, 0x243b: 0x008c, + 0x243c: 0x008c, 0x243d: 0x008c, 0x243e: 0x008c, + // Block 0x91, offset 0x2440 + 0x2440: 0x008c, 0x2441: 0x008c, 0x2442: 0x008c, 0x2443: 0x008c, 0x2444: 0x008c, 0x2445: 0x008c, + 0x2446: 0x008c, 0x2447: 0x008c, 0x2448: 0x008c, 0x2449: 0x008c, 0x244a: 0x008c, 0x244b: 0x008c, + 0x244c: 0x008c, 0x244d: 0x008c, 0x244e: 0x008c, 0x244f: 0x008c, 0x2450: 0x008c, 0x2451: 0x008c, + 0x2452: 0x008c, 0x2453: 0x008c, 0x2454: 0x008c, 0x2455: 0x008c, 0x2456: 0x008c, 0x2457: 0x008c, + 0x2458: 0x0080, 0x2459: 0x0080, 0x245a: 0x0080, 0x245b: 0x0080, 0x245c: 0x0080, 0x245d: 0x0080, + 0x245e: 0x0080, 0x245f: 0x0080, 0x2460: 0x0080, 0x2461: 0x0080, 0x2462: 0x0080, 0x2463: 0x0080, + 0x2464: 0x0080, 0x2465: 0x0080, 0x2466: 0x0080, 0x2467: 0x0080, 0x2468: 0x0080, 0x2469: 0x0080, + 0x246a: 0x0080, 0x246b: 0x0080, 0x246c: 0x0080, 0x246d: 0x0080, 0x246e: 0x0080, 0x246f: 0x0080, + 0x2470: 0x0080, 0x2471: 0x0080, 0x2472: 0x0080, 0x2473: 0x0080, 0x2474: 0x0080, 0x2475: 0x0080, + 0x2476: 0x0080, 0x2477: 0x0080, 0x2478: 0x0080, 0x2479: 0x0080, 0x247a: 0x0080, 0x247b: 0x0080, + 0x247c: 0x0080, 0x247d: 0x0080, 0x247e: 0x0080, 0x247f: 0x0080, + // Block 0x92, offset 0x2480 + 0x2480: 0x00cc, 0x2481: 0x00cc, 0x2482: 0x00cc, 0x2483: 0x00cc, 0x2484: 0x00cc, 0x2485: 0x00cc, + 0x2486: 0x00cc, 0x2487: 0x00cc, 0x2488: 0x00cc, 0x2489: 0x00cc, 0x248a: 0x00cc, 0x248b: 0x00cc, + 0x248c: 0x00cc, 0x248d: 0x00cc, 0x248e: 0x00cc, 0x248f: 0x00cc, 0x2490: 0x00cc, 0x2491: 0x00cc, + 0x2492: 0x00cc, 0x2493: 0x00cc, 0x2494: 0x00cc, 0x2495: 0x00cc, 0x2496: 0x00cc, 0x2497: 0x00cc, + 0x2498: 0x00cc, 0x2499: 0x00cc, 0x249a: 0x00cc, 0x249b: 0x00cc, 0x249c: 0x00cc, 0x249d: 0x00cc, + 0x249e: 0x00cc, 0x249f: 0x00cc, 0x24a0: 0x00cc, 0x24a1: 0x00cc, 0x24a2: 0x00cc, 0x24a3: 0x00cc, + 0x24a4: 0x00cc, 0x24a5: 0x00cc, 0x24a6: 0x00cc, 0x24a7: 0x00cc, 0x24a8: 0x00cc, 0x24a9: 0x00cc, + 0x24aa: 0x00cc, 0x24ab: 0x00cc, 0x24ac: 0x00cc, 0x24ad: 0x00cc, 0x24ae: 0x00cc, 0x24af: 0x00cc, + 0x24b0: 0x00cc, 0x24b1: 0x00cc, 0x24b2: 0x00cc, 0x24b3: 0x00cc, 0x24b4: 0x00cc, 0x24b5: 0x00cc, + 0x24b6: 0x00cc, 0x24b7: 0x00cc, 0x24b8: 0x00cc, 0x24b9: 0x00cc, 0x24ba: 0x00cc, 0x24bb: 0x00cc, + 0x24bc: 0x00cc, 0x24bd: 0x00cc, 0x24be: 0x00cc, 0x24bf: 0x00cc, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x00cc, 0x24c1: 0x00cc, 0x24c2: 0x00cc, 0x24c3: 0x00cc, 0x24c4: 0x00cc, 0x24c5: 0x00cc, + 0x24c6: 0x00cc, 0x24c7: 0x00cc, 0x24c8: 0x00cc, 0x24c9: 0x00cc, 0x24ca: 0x00cc, 0x24cb: 0x00cc, + 0x24cc: 0x00cc, 0x24cd: 0x00cc, 0x24ce: 0x00cc, 0x24cf: 0x00cc, 0x24d0: 0x00cc, 0x24d1: 0x00cc, + 0x24d2: 0x00cc, 0x24d3: 0x00cc, 0x24d4: 0x00cc, 0x24d5: 0x00cc, 0x24d6: 0x00cc, 0x24d7: 0x00cc, + 0x24d8: 0x00cc, 0x24d9: 0x00cc, 0x24da: 0x00cc, 0x24db: 0x00cc, 0x24dc: 0x00cc, 0x24dd: 0x00cc, + 0x24de: 0x00cc, 0x24df: 0x00cc, 0x24e0: 0x00cc, 0x24e1: 0x00cc, 0x24e2: 0x00cc, 0x24e3: 0x00cc, + 0x24e4: 0x00cc, 0x24e5: 0x00cc, 0x24e6: 0x00cc, 0x24e7: 0x00cc, 0x24e8: 0x00cc, 0x24e9: 0x00cc, + 0x24ea: 0x00cc, 0x24eb: 0x00cc, 0x24ec: 0x00cc, 0x24ed: 0x00cc, 0x24ee: 0x00cc, 0x24ef: 0x00cc, + 0x24f0: 0x00cc, 0x24f1: 0x00cc, 0x24f2: 0x00cc, 0x24f3: 0x00cc, 0x24f4: 0x00cc, 0x24f5: 0x00cc, + // Block 0x94, offset 0x2500 + 0x2500: 0x00cc, 0x2501: 0x00cc, 0x2502: 0x00cc, 0x2503: 0x00cc, 0x2504: 0x00cc, 0x2505: 0x00cc, + 0x2506: 0x00cc, 0x2507: 0x00cc, 0x2508: 0x00cc, 0x2509: 0x00cc, 0x250a: 0x00cc, 0x250b: 0x00cc, + 0x250c: 0x00cc, 0x250d: 0x00cc, 0x250e: 0x00cc, 0x250f: 0x00cc, 0x2510: 0x00cc, 0x2511: 0x00cc, + 0x2512: 0x00cc, 0x2513: 0x00cc, 0x2514: 0x00cc, 0x2515: 0x00cc, + // Block 0x95, offset 0x2540 + 0x2540: 0x00c0, 0x2541: 0x00c0, 0x2542: 0x00c0, 0x2543: 0x00c0, 0x2544: 0x00c0, 0x2545: 0x00c0, + 0x2546: 0x00c0, 0x2547: 0x00c0, 0x2548: 0x00c0, 0x2549: 0x00c0, 0x254a: 0x00c0, 0x254b: 0x00c0, + 0x254c: 0x00c0, 0x2550: 0x0080, 0x2551: 0x0080, + 0x2552: 0x0080, 0x2553: 0x0080, 0x2554: 0x0080, 0x2555: 0x0080, 0x2556: 0x0080, 0x2557: 0x0080, + 0x2558: 0x0080, 0x2559: 0x0080, 0x255a: 0x0080, 0x255b: 0x0080, 0x255c: 0x0080, 0x255d: 0x0080, + 0x255e: 0x0080, 0x255f: 0x0080, 0x2560: 0x0080, 0x2561: 0x0080, 0x2562: 0x0080, 0x2563: 0x0080, + 0x2564: 0x0080, 0x2565: 0x0080, 0x2566: 0x0080, 0x2567: 0x0080, 0x2568: 0x0080, 0x2569: 0x0080, + 0x256a: 0x0080, 0x256b: 0x0080, 0x256c: 0x0080, 0x256d: 0x0080, 0x256e: 0x0080, 0x256f: 0x0080, + 0x2570: 0x0080, 0x2571: 0x0080, 0x2572: 0x0080, 0x2573: 0x0080, 0x2574: 0x0080, 0x2575: 0x0080, + 0x2576: 0x0080, 0x2577: 0x0080, 0x2578: 0x0080, 0x2579: 0x0080, 0x257a: 0x0080, 0x257b: 0x0080, + 0x257c: 0x0080, 0x257d: 0x0080, 0x257e: 0x0080, 0x257f: 0x0080, + // Block 0x96, offset 0x2580 + 0x2580: 0x0080, 0x2581: 0x0080, 0x2582: 0x0080, 0x2583: 0x0080, 0x2584: 0x0080, 0x2585: 0x0080, + 0x2586: 0x0080, + 0x2590: 0x00c0, 0x2591: 0x00c0, + 0x2592: 0x00c0, 0x2593: 0x00c0, 0x2594: 0x00c0, 0x2595: 0x00c0, 0x2596: 0x00c0, 0x2597: 0x00c0, + 0x2598: 0x00c0, 0x2599: 0x00c0, 0x259a: 0x00c0, 0x259b: 0x00c0, 0x259c: 0x00c0, 0x259d: 0x00c0, + 0x259e: 0x00c0, 0x259f: 0x00c0, 0x25a0: 0x00c0, 0x25a1: 0x00c0, 0x25a2: 0x00c0, 0x25a3: 0x00c0, + 0x25a4: 0x00c0, 0x25a5: 0x00c0, 0x25a6: 0x00c0, 0x25a7: 0x00c0, 0x25a8: 0x00c0, 0x25a9: 0x00c0, + 0x25aa: 0x00c0, 0x25ab: 0x00c0, 0x25ac: 0x00c0, 0x25ad: 0x00c0, 0x25ae: 0x00c0, 0x25af: 0x00c0, + 0x25b0: 0x00c0, 0x25b1: 0x00c0, 0x25b2: 0x00c0, 0x25b3: 0x00c0, 0x25b4: 0x00c0, 0x25b5: 0x00c0, + 0x25b6: 0x00c0, 0x25b7: 0x00c0, 0x25b8: 0x00c0, 0x25b9: 0x00c0, 0x25ba: 0x00c0, 0x25bb: 0x00c0, + 0x25bc: 0x00c0, 0x25bd: 0x00c0, 0x25be: 0x0080, 0x25bf: 0x0080, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x00c0, 0x25c1: 0x00c0, 0x25c2: 0x00c0, 0x25c3: 0x00c0, 0x25c4: 0x00c0, 0x25c5: 0x00c0, + 0x25c6: 0x00c0, 0x25c7: 0x00c0, 0x25c8: 0x00c0, 0x25c9: 0x00c0, 0x25ca: 0x00c0, 0x25cb: 0x00c0, + 0x25cc: 0x00c0, 0x25cd: 0x0080, 0x25ce: 0x0080, 0x25cf: 0x0080, 0x25d0: 0x00c0, 0x25d1: 0x00c0, + 0x25d2: 0x00c0, 0x25d3: 0x00c0, 0x25d4: 0x00c0, 0x25d5: 0x00c0, 0x25d6: 0x00c0, 0x25d7: 0x00c0, + 0x25d8: 0x00c0, 0x25d9: 0x00c0, 0x25da: 0x00c0, 0x25db: 0x00c0, 0x25dc: 0x00c0, 0x25dd: 0x00c0, + 0x25de: 0x00c0, 0x25df: 0x00c0, 0x25e0: 0x00c0, 0x25e1: 0x00c0, 0x25e2: 0x00c0, 0x25e3: 0x00c0, + 0x25e4: 0x00c0, 0x25e5: 0x00c0, 0x25e6: 0x00c0, 0x25e7: 0x00c0, 0x25e8: 0x00c0, 0x25e9: 0x00c0, + 0x25ea: 0x00c0, 0x25eb: 0x00c0, + // Block 0x98, offset 0x2600 + 0x2600: 0x00c0, 0x2601: 0x00c0, 0x2602: 0x00c0, 0x2603: 0x00c0, 0x2604: 0x00c0, 0x2605: 0x00c0, + 0x2606: 0x00c0, 0x2607: 0x00c0, 0x2608: 0x00c0, 0x2609: 0x00c0, 0x260a: 0x00c0, 0x260b: 0x00c0, + 0x260c: 0x00c0, 0x260d: 0x00c0, 0x260e: 0x00c0, 0x260f: 0x00c0, 0x2610: 0x00c0, 0x2611: 0x00c0, + 0x2612: 0x00c0, 0x2613: 0x00c0, 0x2614: 0x00c0, 0x2615: 0x00c0, 0x2616: 0x00c0, 0x2617: 0x00c0, + 0x2618: 0x00c0, 0x2619: 0x00c0, 0x261a: 0x00c0, 0x261b: 0x00c0, 0x261c: 0x00c0, 0x261d: 0x00c0, + 0x261e: 0x00c0, 0x261f: 0x00c0, 0x2620: 0x00c0, 0x2621: 0x00c0, 0x2622: 0x00c0, 0x2623: 0x00c0, + 0x2624: 0x00c0, 0x2625: 0x00c0, 0x2626: 0x00c0, 0x2627: 0x00c0, 0x2628: 0x00c0, 0x2629: 0x00c0, + 0x262a: 0x00c0, 0x262b: 0x00c0, 0x262c: 0x00c0, 0x262d: 0x00c0, 0x262e: 0x00c0, 0x262f: 0x00c3, + 0x2630: 0x0083, 0x2631: 0x0083, 0x2632: 0x0083, 0x2633: 0x0080, 0x2634: 0x00c3, 0x2635: 0x00c3, + 0x2636: 0x00c3, 0x2637: 0x00c3, 0x2638: 0x00c3, 0x2639: 0x00c3, 0x263a: 0x00c3, 0x263b: 0x00c3, + 0x263c: 0x00c3, 0x263d: 0x00c3, 0x263e: 0x0080, 0x263f: 0x00c0, + // Block 0x99, offset 0x2640 + 0x2640: 0x00c0, 0x2641: 0x00c0, 0x2642: 0x00c0, 0x2643: 0x00c0, 0x2644: 0x00c0, 0x2645: 0x00c0, + 0x2646: 0x00c0, 0x2647: 0x00c0, 0x2648: 0x00c0, 0x2649: 0x00c0, 0x264a: 0x00c0, 0x264b: 0x00c0, + 0x264c: 0x00c0, 0x264d: 0x00c0, 0x264e: 0x00c0, 0x264f: 0x00c0, 0x2650: 0x00c0, 0x2651: 0x00c0, + 0x2652: 0x00c0, 0x2653: 0x00c0, 0x2654: 0x00c0, 0x2655: 0x00c0, 0x2656: 0x00c0, 0x2657: 0x00c0, + 0x2658: 0x00c0, 0x2659: 0x00c0, 0x265a: 0x00c0, 0x265b: 0x00c0, 0x265c: 0x0080, 0x265d: 0x0080, + 0x265e: 0x00c3, 0x265f: 0x00c3, 0x2660: 0x00c0, 0x2661: 0x00c0, 0x2662: 0x00c0, 0x2663: 0x00c0, + 0x2664: 0x00c0, 0x2665: 0x00c0, 0x2666: 0x00c0, 0x2667: 0x00c0, 0x2668: 0x00c0, 0x2669: 0x00c0, + 0x266a: 0x00c0, 0x266b: 0x00c0, 0x266c: 0x00c0, 0x266d: 0x00c0, 0x266e: 0x00c0, 0x266f: 0x00c0, + 0x2670: 0x00c0, 0x2671: 0x00c0, 0x2672: 0x00c0, 0x2673: 0x00c0, 0x2674: 0x00c0, 0x2675: 0x00c0, + 0x2676: 0x00c0, 0x2677: 0x00c0, 0x2678: 0x00c0, 0x2679: 0x00c0, 0x267a: 0x00c0, 0x267b: 0x00c0, + 0x267c: 0x00c0, 0x267d: 0x00c0, 0x267e: 0x00c0, 0x267f: 0x00c0, + // Block 0x9a, offset 0x2680 + 0x2680: 0x00c0, 0x2681: 0x00c0, 0x2682: 0x00c0, 0x2683: 0x00c0, 0x2684: 0x00c0, 0x2685: 0x00c0, + 0x2686: 0x00c0, 0x2687: 0x00c0, 0x2688: 0x00c0, 0x2689: 0x00c0, 0x268a: 0x00c0, 0x268b: 0x00c0, + 0x268c: 0x00c0, 0x268d: 0x00c0, 0x268e: 0x00c0, 0x268f: 0x00c0, 0x2690: 0x00c0, 0x2691: 0x00c0, + 0x2692: 0x00c0, 0x2693: 0x00c0, 0x2694: 0x00c0, 0x2695: 0x00c0, 0x2696: 0x00c0, 0x2697: 0x00c0, + 0x2698: 0x00c0, 0x2699: 0x00c0, 0x269a: 0x00c0, 0x269b: 0x00c0, 0x269c: 0x00c0, 0x269d: 0x00c0, + 0x269e: 0x00c0, 0x269f: 0x00c0, 0x26a0: 0x00c0, 0x26a1: 0x00c0, 0x26a2: 0x00c0, 0x26a3: 0x00c0, + 0x26a4: 0x00c0, 0x26a5: 0x00c0, 0x26a6: 0x0080, 0x26a7: 0x0080, 0x26a8: 0x0080, 0x26a9: 0x0080, + 0x26aa: 0x0080, 0x26ab: 0x0080, 0x26ac: 0x0080, 0x26ad: 0x0080, 0x26ae: 0x0080, 0x26af: 0x0080, + 0x26b0: 0x00c3, 0x26b1: 0x00c3, 0x26b2: 0x0080, 0x26b3: 0x0080, 0x26b4: 0x0080, 0x26b5: 0x0080, + 0x26b6: 0x0080, 0x26b7: 0x0080, + // Block 0x9b, offset 0x26c0 + 0x26c0: 0x0080, 0x26c1: 0x0080, 0x26c2: 0x0080, 0x26c3: 0x0080, 0x26c4: 0x0080, 0x26c5: 0x0080, + 0x26c6: 0x0080, 0x26c7: 0x0080, 0x26c8: 0x0080, 0x26c9: 0x0080, 0x26ca: 0x0080, 0x26cb: 0x0080, + 0x26cc: 0x0080, 0x26cd: 0x0080, 0x26ce: 0x0080, 0x26cf: 0x0080, 0x26d0: 0x0080, 0x26d1: 0x0080, + 0x26d2: 0x0080, 0x26d3: 0x0080, 0x26d4: 0x0080, 0x26d5: 0x0080, 0x26d6: 0x0080, 0x26d7: 0x00c0, + 0x26d8: 0x00c0, 0x26d9: 0x00c0, 0x26da: 0x00c0, 0x26db: 0x00c0, 0x26dc: 0x00c0, 0x26dd: 0x00c0, + 0x26de: 0x00c0, 0x26df: 0x00c0, 0x26e0: 0x0080, 0x26e1: 0x0080, 0x26e2: 0x00c0, 0x26e3: 0x00c0, + 0x26e4: 0x00c0, 0x26e5: 0x00c0, 0x26e6: 0x00c0, 0x26e7: 0x00c0, 0x26e8: 0x00c0, 0x26e9: 0x00c0, + 0x26ea: 0x00c0, 0x26eb: 0x00c0, 0x26ec: 0x00c0, 0x26ed: 0x00c0, 0x26ee: 0x00c0, 0x26ef: 0x00c0, + 0x26f0: 0x00c0, 0x26f1: 0x00c0, 0x26f2: 0x00c0, 0x26f3: 0x00c0, 0x26f4: 0x00c0, 0x26f5: 0x00c0, + 0x26f6: 0x00c0, 0x26f7: 0x00c0, 0x26f8: 0x00c0, 0x26f9: 0x00c0, 0x26fa: 0x00c0, 0x26fb: 0x00c0, + 0x26fc: 0x00c0, 0x26fd: 0x00c0, 0x26fe: 0x00c0, 0x26ff: 0x00c0, + // Block 0x9c, offset 0x2700 + 0x2700: 0x00c0, 0x2701: 0x00c0, 0x2702: 0x00c0, 0x2703: 0x00c0, 0x2704: 0x00c0, 0x2705: 0x00c0, + 0x2706: 0x00c0, 0x2707: 0x00c0, 0x2708: 0x00c0, 0x2709: 0x00c0, 0x270a: 0x00c0, 0x270b: 0x00c0, + 0x270c: 0x00c0, 0x270d: 0x00c0, 0x270e: 0x00c0, 0x270f: 0x00c0, 0x2710: 0x00c0, 0x2711: 0x00c0, + 0x2712: 0x00c0, 0x2713: 0x00c0, 0x2714: 0x00c0, 0x2715: 0x00c0, 0x2716: 0x00c0, 0x2717: 0x00c0, + 0x2718: 0x00c0, 0x2719: 0x00c0, 0x271a: 0x00c0, 0x271b: 0x00c0, 0x271c: 0x00c0, 0x271d: 0x00c0, + 0x271e: 0x00c0, 0x271f: 0x00c0, 0x2720: 0x00c0, 0x2721: 0x00c0, 0x2722: 0x00c0, 0x2723: 0x00c0, + 0x2724: 0x00c0, 0x2725: 0x00c0, 0x2726: 0x00c0, 0x2727: 0x00c0, 0x2728: 0x00c0, 0x2729: 0x00c0, + 0x272a: 0x00c0, 0x272b: 0x00c0, 0x272c: 0x00c0, 0x272d: 0x00c0, 0x272e: 0x00c0, 0x272f: 0x00c0, + 0x2730: 0x0080, 0x2731: 0x00c0, 0x2732: 0x00c0, 0x2733: 0x00c0, 0x2734: 0x00c0, 0x2735: 0x00c0, + 0x2736: 0x00c0, 0x2737: 0x00c0, 0x2738: 0x00c0, 0x2739: 0x00c0, 0x273a: 0x00c0, 0x273b: 0x00c0, + 0x273c: 0x00c0, 0x273d: 0x00c0, 0x273e: 0x00c0, 0x273f: 0x00c0, + // Block 0x9d, offset 0x2740 + 0x2740: 0x00c0, 0x2741: 0x00c0, 0x2742: 0x00c0, 0x2743: 0x00c0, 0x2744: 0x00c0, 0x2745: 0x00c0, + 0x2746: 0x00c0, 0x2747: 0x00c0, 0x2748: 0x00c0, 0x2749: 0x0080, 0x274a: 0x0080, 0x274b: 0x00c0, + 0x274c: 0x00c0, 0x274d: 0x00c0, 0x274e: 0x00c0, 0x274f: 0x00c0, 0x2750: 0x00c0, 0x2751: 0x00c0, + 0x2752: 0x00c0, 0x2753: 0x00c0, 0x2754: 0x00c0, 0x2755: 0x00c0, 0x2756: 0x00c0, 0x2757: 0x00c0, + 0x2758: 0x00c0, 0x2759: 0x00c0, 0x275a: 0x00c0, 0x275b: 0x00c0, 0x275c: 0x00c0, 0x275d: 0x00c0, + 0x275e: 0x00c0, 0x275f: 0x00c0, 0x2760: 0x00c0, 0x2761: 0x00c0, 0x2762: 0x00c0, 0x2763: 0x00c0, + 0x2764: 0x00c0, 0x2765: 0x00c0, 0x2766: 0x00c0, 0x2767: 0x00c0, 0x2768: 0x00c0, 0x2769: 0x00c0, + 0x276a: 0x00c0, 0x276b: 0x00c0, 0x276c: 0x00c0, 0x276d: 0x00c0, 0x276e: 0x00c0, + 0x2770: 0x00c0, 0x2771: 0x00c0, 0x2772: 0x00c0, 0x2773: 0x00c0, 0x2774: 0x00c0, 0x2775: 0x00c0, + 0x2776: 0x00c0, 0x2777: 0x00c0, + // Block 0x9e, offset 0x2780 + 0x27b7: 0x00c0, 0x27b8: 0x0080, 0x27b9: 0x0080, 0x27ba: 0x00c0, 0x27bb: 0x00c0, + 0x27bc: 0x00c0, 0x27bd: 0x00c0, 0x27be: 0x00c0, 0x27bf: 0x00c0, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x00c0, 0x27c1: 0x00c0, 0x27c2: 0x00c3, 0x27c3: 0x00c0, 0x27c4: 0x00c0, 0x27c5: 0x00c0, + 0x27c6: 0x00c6, 0x27c7: 0x00c0, 0x27c8: 0x00c0, 0x27c9: 0x00c0, 0x27ca: 0x00c0, 0x27cb: 0x00c3, + 0x27cc: 0x00c0, 0x27cd: 0x00c0, 0x27ce: 0x00c0, 0x27cf: 0x00c0, 0x27d0: 0x00c0, 0x27d1: 0x00c0, + 0x27d2: 0x00c0, 0x27d3: 0x00c0, 0x27d4: 0x00c0, 0x27d5: 0x00c0, 0x27d6: 0x00c0, 0x27d7: 0x00c0, + 0x27d8: 0x00c0, 0x27d9: 0x00c0, 0x27da: 0x00c0, 0x27db: 0x00c0, 0x27dc: 0x00c0, 0x27dd: 0x00c0, + 0x27de: 0x00c0, 0x27df: 0x00c0, 0x27e0: 0x00c0, 0x27e1: 0x00c0, 0x27e2: 0x00c0, 0x27e3: 0x00c0, + 0x27e4: 0x00c0, 0x27e5: 0x00c3, 0x27e6: 0x00c3, 0x27e7: 0x00c0, 0x27e8: 0x0080, 0x27e9: 0x0080, + 0x27ea: 0x0080, 0x27eb: 0x0080, + 0x27f0: 0x0080, 0x27f1: 0x0080, 0x27f2: 0x0080, 0x27f3: 0x0080, 0x27f4: 0x0080, 0x27f5: 0x0080, + 0x27f6: 0x0080, 0x27f7: 0x0080, 0x27f8: 0x0080, 0x27f9: 0x0080, + // Block 0xa0, offset 0x2800 + 0x2800: 0x00c2, 0x2801: 0x00c2, 0x2802: 0x00c2, 0x2803: 0x00c2, 0x2804: 0x00c2, 0x2805: 0x00c2, + 0x2806: 0x00c2, 0x2807: 0x00c2, 0x2808: 0x00c2, 0x2809: 0x00c2, 0x280a: 0x00c2, 0x280b: 0x00c2, + 0x280c: 0x00c2, 0x280d: 0x00c2, 0x280e: 0x00c2, 0x280f: 0x00c2, 0x2810: 0x00c2, 0x2811: 0x00c2, + 0x2812: 0x00c2, 0x2813: 0x00c2, 0x2814: 0x00c2, 0x2815: 0x00c2, 0x2816: 0x00c2, 0x2817: 0x00c2, + 0x2818: 0x00c2, 0x2819: 0x00c2, 0x281a: 0x00c2, 0x281b: 0x00c2, 0x281c: 0x00c2, 0x281d: 0x00c2, + 0x281e: 0x00c2, 0x281f: 0x00c2, 0x2820: 0x00c2, 0x2821: 0x00c2, 0x2822: 0x00c2, 0x2823: 0x00c2, + 0x2824: 0x00c2, 0x2825: 0x00c2, 0x2826: 0x00c2, 0x2827: 0x00c2, 0x2828: 0x00c2, 0x2829: 0x00c2, + 0x282a: 0x00c2, 0x282b: 0x00c2, 0x282c: 0x00c2, 0x282d: 0x00c2, 0x282e: 0x00c2, 0x282f: 0x00c2, + 0x2830: 0x00c2, 0x2831: 0x00c2, 0x2832: 0x00c1, 0x2833: 0x00c0, 0x2834: 0x0080, 0x2835: 0x0080, + 0x2836: 0x0080, 0x2837: 0x0080, + // Block 0xa1, offset 0x2840 + 0x2840: 0x00c0, 0x2841: 0x00c0, 0x2842: 0x00c0, 0x2843: 0x00c0, 0x2844: 0x00c6, 0x2845: 0x00c3, + 0x284e: 0x0080, 0x284f: 0x0080, 0x2850: 0x00c0, 0x2851: 0x00c0, + 0x2852: 0x00c0, 0x2853: 0x00c0, 0x2854: 0x00c0, 0x2855: 0x00c0, 0x2856: 0x00c0, 0x2857: 0x00c0, + 0x2858: 0x00c0, 0x2859: 0x00c0, + 0x2860: 0x00c3, 0x2861: 0x00c3, 0x2862: 0x00c3, 0x2863: 0x00c3, + 0x2864: 0x00c3, 0x2865: 0x00c3, 0x2866: 0x00c3, 0x2867: 0x00c3, 0x2868: 0x00c3, 0x2869: 0x00c3, + 0x286a: 0x00c3, 0x286b: 0x00c3, 0x286c: 0x00c3, 0x286d: 0x00c3, 0x286e: 0x00c3, 0x286f: 0x00c3, + 0x2870: 0x00c3, 0x2871: 0x00c3, 0x2872: 0x00c0, 0x2873: 0x00c0, 0x2874: 0x00c0, 0x2875: 0x00c0, + 0x2876: 0x00c0, 0x2877: 0x00c0, 0x2878: 0x0080, 0x2879: 0x0080, 0x287a: 0x0080, 0x287b: 0x00c0, + 0x287c: 0x0080, 0x287d: 0x00c0, + // Block 0xa2, offset 0x2880 + 0x2880: 0x00c0, 0x2881: 0x00c0, 0x2882: 0x00c0, 0x2883: 0x00c0, 0x2884: 0x00c0, 0x2885: 0x00c0, + 0x2886: 0x00c0, 0x2887: 0x00c0, 0x2888: 0x00c0, 0x2889: 0x00c0, 0x288a: 0x00c0, 0x288b: 0x00c0, + 0x288c: 0x00c0, 0x288d: 0x00c0, 0x288e: 0x00c0, 0x288f: 0x00c0, 0x2890: 0x00c0, 0x2891: 0x00c0, + 0x2892: 0x00c0, 0x2893: 0x00c0, 0x2894: 0x00c0, 0x2895: 0x00c0, 0x2896: 0x00c0, 0x2897: 0x00c0, + 0x2898: 0x00c0, 0x2899: 0x00c0, 0x289a: 0x00c0, 0x289b: 0x00c0, 0x289c: 0x00c0, 0x289d: 0x00c0, + 0x289e: 0x00c0, 0x289f: 0x00c0, 0x28a0: 0x00c0, 0x28a1: 0x00c0, 0x28a2: 0x00c0, 0x28a3: 0x00c0, + 0x28a4: 0x00c0, 0x28a5: 0x00c0, 0x28a6: 0x00c3, 0x28a7: 0x00c3, 0x28a8: 0x00c3, 0x28a9: 0x00c3, + 0x28aa: 0x00c3, 0x28ab: 0x00c3, 0x28ac: 0x00c3, 0x28ad: 0x00c3, 0x28ae: 0x0080, 0x28af: 0x0080, + 0x28b0: 0x00c0, 0x28b1: 0x00c0, 0x28b2: 0x00c0, 0x28b3: 0x00c0, 0x28b4: 0x00c0, 0x28b5: 0x00c0, + 0x28b6: 0x00c0, 0x28b7: 0x00c0, 0x28b8: 0x00c0, 0x28b9: 0x00c0, 0x28ba: 0x00c0, 0x28bb: 0x00c0, + 0x28bc: 0x00c0, 0x28bd: 0x00c0, 0x28be: 0x00c0, 0x28bf: 0x00c0, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x00c0, 0x28c1: 0x00c0, 0x28c2: 0x00c0, 0x28c3: 0x00c0, 0x28c4: 0x00c0, 0x28c5: 0x00c0, + 0x28c6: 0x00c0, 0x28c7: 0x00c3, 0x28c8: 0x00c3, 0x28c9: 0x00c3, 0x28ca: 0x00c3, 0x28cb: 0x00c3, + 0x28cc: 0x00c3, 0x28cd: 0x00c3, 0x28ce: 0x00c3, 0x28cf: 0x00c3, 0x28d0: 0x00c3, 0x28d1: 0x00c3, + 0x28d2: 0x00c0, 0x28d3: 0x00c5, + 0x28df: 0x0080, 0x28e0: 0x0040, 0x28e1: 0x0040, 0x28e2: 0x0040, 0x28e3: 0x0040, + 0x28e4: 0x0040, 0x28e5: 0x0040, 0x28e6: 0x0040, 0x28e7: 0x0040, 0x28e8: 0x0040, 0x28e9: 0x0040, + 0x28ea: 0x0040, 0x28eb: 0x0040, 0x28ec: 0x0040, 0x28ed: 0x0040, 0x28ee: 0x0040, 0x28ef: 0x0040, + 0x28f0: 0x0040, 0x28f1: 0x0040, 0x28f2: 0x0040, 0x28f3: 0x0040, 0x28f4: 0x0040, 0x28f5: 0x0040, + 0x28f6: 0x0040, 0x28f7: 0x0040, 0x28f8: 0x0040, 0x28f9: 0x0040, 0x28fa: 0x0040, 0x28fb: 0x0040, + 0x28fc: 0x0040, + // Block 0xa4, offset 0x2900 + 0x2900: 0x00c3, 0x2901: 0x00c3, 0x2902: 0x00c3, 0x2903: 0x00c0, 0x2904: 0x00c0, 0x2905: 0x00c0, + 0x2906: 0x00c0, 0x2907: 0x00c0, 0x2908: 0x00c0, 0x2909: 0x00c0, 0x290a: 0x00c0, 0x290b: 0x00c0, + 0x290c: 0x00c0, 0x290d: 0x00c0, 0x290e: 0x00c0, 0x290f: 0x00c0, 0x2910: 0x00c0, 0x2911: 0x00c0, + 0x2912: 0x00c0, 0x2913: 0x00c0, 0x2914: 0x00c0, 0x2915: 0x00c0, 0x2916: 0x00c0, 0x2917: 0x00c0, + 0x2918: 0x00c0, 0x2919: 0x00c0, 0x291a: 0x00c0, 0x291b: 0x00c0, 0x291c: 0x00c0, 0x291d: 0x00c0, + 0x291e: 0x00c0, 0x291f: 0x00c0, 0x2920: 0x00c0, 0x2921: 0x00c0, 0x2922: 0x00c0, 0x2923: 0x00c0, + 0x2924: 0x00c0, 0x2925: 0x00c0, 0x2926: 0x00c0, 0x2927: 0x00c0, 0x2928: 0x00c0, 0x2929: 0x00c0, + 0x292a: 0x00c0, 0x292b: 0x00c0, 0x292c: 0x00c0, 0x292d: 0x00c0, 0x292e: 0x00c0, 0x292f: 0x00c0, + 0x2930: 0x00c0, 0x2931: 0x00c0, 0x2932: 0x00c0, 0x2933: 0x00c3, 0x2934: 0x00c0, 0x2935: 0x00c0, + 0x2936: 0x00c3, 0x2937: 0x00c3, 0x2938: 0x00c3, 0x2939: 0x00c3, 0x293a: 0x00c0, 0x293b: 0x00c0, + 0x293c: 0x00c3, 0x293d: 0x00c0, 0x293e: 0x00c0, 0x293f: 0x00c0, + // Block 0xa5, offset 0x2940 + 0x2940: 0x00c5, 0x2941: 0x0080, 0x2942: 0x0080, 0x2943: 0x0080, 0x2944: 0x0080, 0x2945: 0x0080, + 0x2946: 0x0080, 0x2947: 0x0080, 0x2948: 0x0080, 0x2949: 0x0080, 0x294a: 0x0080, 0x294b: 0x0080, + 0x294c: 0x0080, 0x294d: 0x0080, 0x294f: 0x00c0, 0x2950: 0x00c0, 0x2951: 0x00c0, + 0x2952: 0x00c0, 0x2953: 0x00c0, 0x2954: 0x00c0, 0x2955: 0x00c0, 0x2956: 0x00c0, 0x2957: 0x00c0, + 0x2958: 0x00c0, 0x2959: 0x00c0, + 0x295e: 0x0080, 0x295f: 0x0080, 0x2960: 0x00c0, 0x2961: 0x00c0, 0x2962: 0x00c0, 0x2963: 0x00c0, + 0x2964: 0x00c0, 0x2965: 0x00c3, 0x2966: 0x00c0, 0x2967: 0x00c0, 0x2968: 0x00c0, 0x2969: 0x00c0, + 0x296a: 0x00c0, 0x296b: 0x00c0, 0x296c: 0x00c0, 0x296d: 0x00c0, 0x296e: 0x00c0, 0x296f: 0x00c0, + 0x2970: 0x00c0, 0x2971: 0x00c0, 0x2972: 0x00c0, 0x2973: 0x00c0, 0x2974: 0x00c0, 0x2975: 0x00c0, + 0x2976: 0x00c0, 0x2977: 0x00c0, 0x2978: 0x00c0, 0x2979: 0x00c0, 0x297a: 0x00c0, 0x297b: 0x00c0, + 0x297c: 0x00c0, 0x297d: 0x00c0, 0x297e: 0x00c0, + // Block 0xa6, offset 0x2980 + 0x2980: 0x00c0, 0x2981: 0x00c0, 0x2982: 0x00c0, 0x2983: 0x00c0, 0x2984: 0x00c0, 0x2985: 0x00c0, + 0x2986: 0x00c0, 0x2987: 0x00c0, 0x2988: 0x00c0, 0x2989: 0x00c0, 0x298a: 0x00c0, 0x298b: 0x00c0, + 0x298c: 0x00c0, 0x298d: 0x00c0, 0x298e: 0x00c0, 0x298f: 0x00c0, 0x2990: 0x00c0, 0x2991: 0x00c0, + 0x2992: 0x00c0, 0x2993: 0x00c0, 0x2994: 0x00c0, 0x2995: 0x00c0, 0x2996: 0x00c0, 0x2997: 0x00c0, + 0x2998: 0x00c0, 0x2999: 0x00c0, 0x299a: 0x00c0, 0x299b: 0x00c0, 0x299c: 0x00c0, 0x299d: 0x00c0, + 0x299e: 0x00c0, 0x299f: 0x00c0, 0x29a0: 0x00c0, 0x29a1: 0x00c0, 0x29a2: 0x00c0, 0x29a3: 0x00c0, + 0x29a4: 0x00c0, 0x29a5: 0x00c0, 0x29a6: 0x00c0, 0x29a7: 0x00c0, 0x29a8: 0x00c0, 0x29a9: 0x00c3, + 0x29aa: 0x00c3, 0x29ab: 0x00c3, 0x29ac: 0x00c3, 0x29ad: 0x00c3, 0x29ae: 0x00c3, 0x29af: 0x00c0, + 0x29b0: 0x00c0, 0x29b1: 0x00c3, 0x29b2: 0x00c3, 0x29b3: 0x00c0, 0x29b4: 0x00c0, 0x29b5: 0x00c3, + 0x29b6: 0x00c3, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x00c0, 0x29c1: 0x00c0, 0x29c2: 0x00c0, 0x29c3: 0x00c3, 0x29c4: 0x00c0, 0x29c5: 0x00c0, + 0x29c6: 0x00c0, 0x29c7: 0x00c0, 0x29c8: 0x00c0, 0x29c9: 0x00c0, 0x29ca: 0x00c0, 0x29cb: 0x00c0, + 0x29cc: 0x00c3, 0x29cd: 0x00c0, 0x29d0: 0x00c0, 0x29d1: 0x00c0, + 0x29d2: 0x00c0, 0x29d3: 0x00c0, 0x29d4: 0x00c0, 0x29d5: 0x00c0, 0x29d6: 0x00c0, 0x29d7: 0x00c0, + 0x29d8: 0x00c0, 0x29d9: 0x00c0, 0x29dc: 0x0080, 0x29dd: 0x0080, + 0x29de: 0x0080, 0x29df: 0x0080, 0x29e0: 0x00c0, 0x29e1: 0x00c0, 0x29e2: 0x00c0, 0x29e3: 0x00c0, + 0x29e4: 0x00c0, 0x29e5: 0x00c0, 0x29e6: 0x00c0, 0x29e7: 0x00c0, 0x29e8: 0x00c0, 0x29e9: 0x00c0, + 0x29ea: 0x00c0, 0x29eb: 0x00c0, 0x29ec: 0x00c0, 0x29ed: 0x00c0, 0x29ee: 0x00c0, 0x29ef: 0x00c0, + 0x29f0: 0x00c0, 0x29f1: 0x00c0, 0x29f2: 0x00c0, 0x29f3: 0x00c0, 0x29f4: 0x00c0, 0x29f5: 0x00c0, + 0x29f6: 0x00c0, 0x29f7: 0x0080, 0x29f8: 0x0080, 0x29f9: 0x0080, 0x29fa: 0x00c0, 0x29fb: 0x00c0, + 0x29fc: 0x00c3, 0x29fd: 0x00c0, 0x29fe: 0x00c0, 0x29ff: 0x00c0, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x00c0, 0x2a01: 0x00c0, 0x2a02: 0x00c0, 0x2a03: 0x00c0, 0x2a04: 0x00c0, 0x2a05: 0x00c0, + 0x2a06: 0x00c0, 0x2a07: 0x00c0, 0x2a08: 0x00c0, 0x2a09: 0x00c0, 0x2a0a: 0x00c0, 0x2a0b: 0x00c0, + 0x2a0c: 0x00c0, 0x2a0d: 0x00c0, 0x2a0e: 0x00c0, 0x2a0f: 0x00c0, 0x2a10: 0x00c0, 0x2a11: 0x00c0, + 0x2a12: 0x00c0, 0x2a13: 0x00c0, 0x2a14: 0x00c0, 0x2a15: 0x00c0, 0x2a16: 0x00c0, 0x2a17: 0x00c0, + 0x2a18: 0x00c0, 0x2a19: 0x00c0, 0x2a1a: 0x00c0, 0x2a1b: 0x00c0, 0x2a1c: 0x00c0, 0x2a1d: 0x00c0, + 0x2a1e: 0x00c0, 0x2a1f: 0x00c0, 0x2a20: 0x00c0, 0x2a21: 0x00c0, 0x2a22: 0x00c0, 0x2a23: 0x00c0, + 0x2a24: 0x00c0, 0x2a25: 0x00c0, 0x2a26: 0x00c0, 0x2a27: 0x00c0, 0x2a28: 0x00c0, 0x2a29: 0x00c0, + 0x2a2a: 0x00c0, 0x2a2b: 0x00c0, 0x2a2c: 0x00c0, 0x2a2d: 0x00c0, 0x2a2e: 0x00c0, 0x2a2f: 0x00c0, + 0x2a30: 0x00c3, 0x2a31: 0x00c0, 0x2a32: 0x00c3, 0x2a33: 0x00c3, 0x2a34: 0x00c3, 0x2a35: 0x00c0, + 0x2a36: 0x00c0, 0x2a37: 0x00c3, 0x2a38: 0x00c3, 0x2a39: 0x00c0, 0x2a3a: 0x00c0, 0x2a3b: 0x00c0, + 0x2a3c: 0x00c0, 0x2a3d: 0x00c0, 0x2a3e: 0x00c3, 0x2a3f: 0x00c3, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x00c0, 0x2a41: 0x00c3, 0x2a42: 0x00c0, + 0x2a5b: 0x00c0, 0x2a5c: 0x00c0, 0x2a5d: 0x00c0, + 0x2a5e: 0x0080, 0x2a5f: 0x0080, 0x2a60: 0x00c0, 0x2a61: 0x00c0, 0x2a62: 0x00c0, 0x2a63: 0x00c0, + 0x2a64: 0x00c0, 0x2a65: 0x00c0, 0x2a66: 0x00c0, 0x2a67: 0x00c0, 0x2a68: 0x00c0, 0x2a69: 0x00c0, + 0x2a6a: 0x00c0, 0x2a6b: 0x00c0, 0x2a6c: 0x00c3, 0x2a6d: 0x00c3, 0x2a6e: 0x00c0, 0x2a6f: 0x00c0, + 0x2a70: 0x0080, 0x2a71: 0x0080, 0x2a72: 0x00c0, 0x2a73: 0x00c0, 0x2a74: 0x00c0, 0x2a75: 0x00c0, + 0x2a76: 0x00c6, + // Block 0xaa, offset 0x2a80 + 0x2a81: 0x00c0, 0x2a82: 0x00c0, 0x2a83: 0x00c0, 0x2a84: 0x00c0, 0x2a85: 0x00c0, + 0x2a86: 0x00c0, 0x2a89: 0x00c0, 0x2a8a: 0x00c0, 0x2a8b: 0x00c0, + 0x2a8c: 0x00c0, 0x2a8d: 0x00c0, 0x2a8e: 0x00c0, 0x2a91: 0x00c0, + 0x2a92: 0x00c0, 0x2a93: 0x00c0, 0x2a94: 0x00c0, 0x2a95: 0x00c0, 0x2a96: 0x00c0, + 0x2aa0: 0x00c0, 0x2aa1: 0x00c0, 0x2aa2: 0x00c0, 0x2aa3: 0x00c0, + 0x2aa4: 0x00c0, 0x2aa5: 0x00c0, 0x2aa6: 0x00c0, 0x2aa8: 0x00c0, 0x2aa9: 0x00c0, + 0x2aaa: 0x00c0, 0x2aab: 0x00c0, 0x2aac: 0x00c0, 0x2aad: 0x00c0, 0x2aae: 0x00c0, + 0x2ab0: 0x00c0, 0x2ab1: 0x00c0, 0x2ab2: 0x00c0, 0x2ab3: 0x00c0, 0x2ab4: 0x00c0, 0x2ab5: 0x00c0, + 0x2ab6: 0x00c0, 0x2ab7: 0x00c0, 0x2ab8: 0x00c0, 0x2ab9: 0x00c0, 0x2aba: 0x00c0, 0x2abb: 0x00c0, + 0x2abc: 0x00c0, 0x2abd: 0x00c0, 0x2abe: 0x00c0, 0x2abf: 0x00c0, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x00c0, 0x2ac1: 0x00c0, 0x2ac2: 0x00c0, 0x2ac3: 0x00c0, 0x2ac4: 0x00c0, 0x2ac5: 0x00c0, + 0x2ac6: 0x00c0, 0x2ac7: 0x00c0, 0x2ac8: 0x00c0, 0x2ac9: 0x00c0, 0x2aca: 0x00c0, 0x2acb: 0x00c0, + 0x2acc: 0x00c0, 0x2acd: 0x00c0, 0x2ace: 0x00c0, 0x2acf: 0x00c0, 0x2ad0: 0x00c0, 0x2ad1: 0x00c0, + 0x2ad2: 0x00c0, 0x2ad3: 0x00c0, 0x2ad4: 0x00c0, 0x2ad5: 0x00c0, 0x2ad6: 0x00c0, 0x2ad7: 0x00c0, + 0x2ad8: 0x00c0, 0x2ad9: 0x00c0, 0x2ada: 0x00c0, 0x2adb: 0x0080, 0x2adc: 0x0080, 0x2add: 0x0080, + 0x2ade: 0x0080, 0x2adf: 0x0080, 0x2ae0: 0x00c0, 0x2ae1: 0x00c0, 0x2ae2: 0x00c0, 0x2ae3: 0x00c0, + 0x2ae4: 0x00c0, 0x2ae5: 0x00c8, + 0x2af0: 0x00c0, 0x2af1: 0x00c0, 0x2af2: 0x00c0, 0x2af3: 0x00c0, 0x2af4: 0x00c0, 0x2af5: 0x00c0, + 0x2af6: 0x00c0, 0x2af7: 0x00c0, 0x2af8: 0x00c0, 0x2af9: 0x00c0, 0x2afa: 0x00c0, 0x2afb: 0x00c0, + 0x2afc: 0x00c0, 0x2afd: 0x00c0, 0x2afe: 0x00c0, 0x2aff: 0x00c0, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x00c0, 0x2b01: 0x00c0, 0x2b02: 0x00c0, 0x2b03: 0x00c0, 0x2b04: 0x00c0, 0x2b05: 0x00c0, + 0x2b06: 0x00c0, 0x2b07: 0x00c0, 0x2b08: 0x00c0, 0x2b09: 0x00c0, 0x2b0a: 0x00c0, 0x2b0b: 0x00c0, + 0x2b0c: 0x00c0, 0x2b0d: 0x00c0, 0x2b0e: 0x00c0, 0x2b0f: 0x00c0, 0x2b10: 0x00c0, 0x2b11: 0x00c0, + 0x2b12: 0x00c0, 0x2b13: 0x00c0, 0x2b14: 0x00c0, 0x2b15: 0x00c0, 0x2b16: 0x00c0, 0x2b17: 0x00c0, + 0x2b18: 0x00c0, 0x2b19: 0x00c0, 0x2b1a: 0x00c0, 0x2b1b: 0x00c0, 0x2b1c: 0x00c0, 0x2b1d: 0x00c0, + 0x2b1e: 0x00c0, 0x2b1f: 0x00c0, 0x2b20: 0x00c0, 0x2b21: 0x00c0, 0x2b22: 0x00c0, 0x2b23: 0x00c0, + 0x2b24: 0x00c0, 0x2b25: 0x00c3, 0x2b26: 0x00c0, 0x2b27: 0x00c0, 0x2b28: 0x00c3, 0x2b29: 0x00c0, + 0x2b2a: 0x00c0, 0x2b2b: 0x0080, 0x2b2c: 0x00c0, 0x2b2d: 0x00c6, + 0x2b30: 0x00c0, 0x2b31: 0x00c0, 0x2b32: 0x00c0, 0x2b33: 0x00c0, 0x2b34: 0x00c0, 0x2b35: 0x00c0, + 0x2b36: 0x00c0, 0x2b37: 0x00c0, 0x2b38: 0x00c0, 0x2b39: 0x00c0, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x00c0, 0x2b41: 0x00c0, 0x2b42: 0x00c0, 0x2b43: 0x00c0, 0x2b44: 0x00c0, 0x2b45: 0x00c0, + 0x2b46: 0x00c0, 0x2b47: 0x00c0, 0x2b48: 0x00c0, 0x2b49: 0x00c0, 0x2b4a: 0x00c0, 0x2b4b: 0x00c0, + 0x2b4c: 0x00c0, 0x2b4d: 0x00c0, 0x2b4e: 0x00c0, 0x2b4f: 0x00c0, 0x2b50: 0x00c0, 0x2b51: 0x00c0, + 0x2b52: 0x00c0, 0x2b53: 0x00c0, 0x2b54: 0x00c0, 0x2b55: 0x00c0, 0x2b56: 0x00c0, 0x2b57: 0x00c0, + 0x2b58: 0x00c0, 0x2b59: 0x00c0, 0x2b5a: 0x00c0, 0x2b5b: 0x00c0, 0x2b5c: 0x00c0, 0x2b5d: 0x00c0, + 0x2b5e: 0x00c0, 0x2b5f: 0x00c0, 0x2b60: 0x00c0, 0x2b61: 0x00c0, 0x2b62: 0x00c0, 0x2b63: 0x00c0, + 0x2b70: 0x0040, 0x2b71: 0x0040, 0x2b72: 0x0040, 0x2b73: 0x0040, 0x2b74: 0x0040, 0x2b75: 0x0040, + 0x2b76: 0x0040, 0x2b77: 0x0040, 0x2b78: 0x0040, 0x2b79: 0x0040, 0x2b7a: 0x0040, 0x2b7b: 0x0040, + 0x2b7c: 0x0040, 0x2b7d: 0x0040, 0x2b7e: 0x0040, 0x2b7f: 0x0040, + // Block 0xae, offset 0x2b80 + 0x2b80: 0x0040, 0x2b81: 0x0040, 0x2b82: 0x0040, 0x2b83: 0x0040, 0x2b84: 0x0040, 0x2b85: 0x0040, + 0x2b86: 0x0040, 0x2b8b: 0x0040, + 0x2b8c: 0x0040, 0x2b8d: 0x0040, 0x2b8e: 0x0040, 0x2b8f: 0x0040, 0x2b90: 0x0040, 0x2b91: 0x0040, + 0x2b92: 0x0040, 0x2b93: 0x0040, 0x2b94: 0x0040, 0x2b95: 0x0040, 0x2b96: 0x0040, 0x2b97: 0x0040, + 0x2b98: 0x0040, 0x2b99: 0x0040, 0x2b9a: 0x0040, 0x2b9b: 0x0040, 0x2b9c: 0x0040, 0x2b9d: 0x0040, + 0x2b9e: 0x0040, 0x2b9f: 0x0040, 0x2ba0: 0x0040, 0x2ba1: 0x0040, 0x2ba2: 0x0040, 0x2ba3: 0x0040, + 0x2ba4: 0x0040, 0x2ba5: 0x0040, 0x2ba6: 0x0040, 0x2ba7: 0x0040, 0x2ba8: 0x0040, 0x2ba9: 0x0040, + 0x2baa: 0x0040, 0x2bab: 0x0040, 0x2bac: 0x0040, 0x2bad: 0x0040, 0x2bae: 0x0040, 0x2baf: 0x0040, + 0x2bb0: 0x0040, 0x2bb1: 0x0040, 0x2bb2: 0x0040, 0x2bb3: 0x0040, 0x2bb4: 0x0040, 0x2bb5: 0x0040, + 0x2bb6: 0x0040, 0x2bb7: 0x0040, 0x2bb8: 0x0040, 0x2bb9: 0x0040, 0x2bba: 0x0040, 0x2bbb: 0x0040, + // Block 0xaf, offset 0x2bc0 + 0x2bc0: 0x008c, 0x2bc1: 0x008c, 0x2bc2: 0x008c, 0x2bc3: 0x008c, 0x2bc4: 0x008c, 0x2bc5: 0x008c, + 0x2bc6: 0x008c, 0x2bc7: 0x008c, 0x2bc8: 0x008c, 0x2bc9: 0x008c, 0x2bca: 0x008c, 0x2bcb: 0x008c, + 0x2bcc: 0x008c, 0x2bcd: 0x008c, 0x2bce: 0x00cc, 0x2bcf: 0x00cc, 0x2bd0: 0x008c, 0x2bd1: 0x00cc, + 0x2bd2: 0x008c, 0x2bd3: 0x00cc, 0x2bd4: 0x00cc, 0x2bd5: 0x008c, 0x2bd6: 0x008c, 0x2bd7: 0x008c, + 0x2bd8: 0x008c, 0x2bd9: 0x008c, 0x2bda: 0x008c, 0x2bdb: 0x008c, 0x2bdc: 0x008c, 0x2bdd: 0x008c, + 0x2bde: 0x008c, 0x2bdf: 0x00cc, 0x2be0: 0x008c, 0x2be1: 0x00cc, 0x2be2: 0x008c, 0x2be3: 0x00cc, + 0x2be4: 0x00cc, 0x2be5: 0x008c, 0x2be6: 0x008c, 0x2be7: 0x00cc, 0x2be8: 0x00cc, 0x2be9: 0x00cc, + 0x2bea: 0x008c, 0x2beb: 0x008c, 0x2bec: 0x008c, 0x2bed: 0x008c, 0x2bee: 0x008c, 0x2bef: 0x008c, + 0x2bf0: 0x008c, 0x2bf1: 0x008c, 0x2bf2: 0x008c, 0x2bf3: 0x008c, 0x2bf4: 0x008c, 0x2bf5: 0x008c, + 0x2bf6: 0x008c, 0x2bf7: 0x008c, 0x2bf8: 0x008c, 0x2bf9: 0x008c, 0x2bfa: 0x008c, 0x2bfb: 0x008c, + 0x2bfc: 0x008c, 0x2bfd: 0x008c, 0x2bfe: 0x008c, 0x2bff: 0x008c, + // Block 0xb0, offset 0x2c00 + 0x2c00: 0x008c, 0x2c01: 0x008c, 0x2c02: 0x008c, 0x2c03: 0x008c, 0x2c04: 0x008c, 0x2c05: 0x008c, + 0x2c06: 0x008c, 0x2c07: 0x008c, 0x2c08: 0x008c, 0x2c09: 0x008c, 0x2c0a: 0x008c, 0x2c0b: 0x008c, + 0x2c0c: 0x008c, 0x2c0d: 0x008c, 0x2c0e: 0x008c, 0x2c0f: 0x008c, 0x2c10: 0x008c, 0x2c11: 0x008c, + 0x2c12: 0x008c, 0x2c13: 0x008c, 0x2c14: 0x008c, 0x2c15: 0x008c, 0x2c16: 0x008c, 0x2c17: 0x008c, + 0x2c18: 0x008c, 0x2c19: 0x008c, 0x2c1a: 0x008c, 0x2c1b: 0x008c, 0x2c1c: 0x008c, 0x2c1d: 0x008c, + 0x2c1e: 0x008c, 0x2c1f: 0x008c, 0x2c20: 0x008c, 0x2c21: 0x008c, 0x2c22: 0x008c, 0x2c23: 0x008c, + 0x2c24: 0x008c, 0x2c25: 0x008c, 0x2c26: 0x008c, 0x2c27: 0x008c, 0x2c28: 0x008c, 0x2c29: 0x008c, + 0x2c2a: 0x008c, 0x2c2b: 0x008c, 0x2c2c: 0x008c, 0x2c2d: 0x008c, + 0x2c30: 0x008c, 0x2c31: 0x008c, 0x2c32: 0x008c, 0x2c33: 0x008c, 0x2c34: 0x008c, 0x2c35: 0x008c, + 0x2c36: 0x008c, 0x2c37: 0x008c, 0x2c38: 0x008c, 0x2c39: 0x008c, 0x2c3a: 0x008c, 0x2c3b: 0x008c, + 0x2c3c: 0x008c, 0x2c3d: 0x008c, 0x2c3e: 0x008c, 0x2c3f: 0x008c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x008c, 0x2c41: 0x008c, 0x2c42: 0x008c, 0x2c43: 0x008c, 0x2c44: 0x008c, 0x2c45: 0x008c, + 0x2c46: 0x008c, 0x2c47: 0x008c, 0x2c48: 0x008c, 0x2c49: 0x008c, 0x2c4a: 0x008c, 0x2c4b: 0x008c, + 0x2c4c: 0x008c, 0x2c4d: 0x008c, 0x2c4e: 0x008c, 0x2c4f: 0x008c, 0x2c50: 0x008c, 0x2c51: 0x008c, + 0x2c52: 0x008c, 0x2c53: 0x008c, 0x2c54: 0x008c, 0x2c55: 0x008c, 0x2c56: 0x008c, 0x2c57: 0x008c, + 0x2c58: 0x008c, 0x2c59: 0x008c, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x0080, 0x2c81: 0x0080, 0x2c82: 0x0080, 0x2c83: 0x0080, 0x2c84: 0x0080, 0x2c85: 0x0080, + 0x2c86: 0x0080, + 0x2c93: 0x0080, 0x2c94: 0x0080, 0x2c95: 0x0080, 0x2c96: 0x0080, 0x2c97: 0x0080, + 0x2c9d: 0x008a, + 0x2c9e: 0x00cb, 0x2c9f: 0x008a, 0x2ca0: 0x008a, 0x2ca1: 0x008a, 0x2ca2: 0x008a, 0x2ca3: 0x008a, + 0x2ca4: 0x008a, 0x2ca5: 0x008a, 0x2ca6: 0x008a, 0x2ca7: 0x008a, 0x2ca8: 0x008a, 0x2ca9: 0x008a, + 0x2caa: 0x008a, 0x2cab: 0x008a, 0x2cac: 0x008a, 0x2cad: 0x008a, 0x2cae: 0x008a, 0x2caf: 0x008a, + 0x2cb0: 0x008a, 0x2cb1: 0x008a, 0x2cb2: 0x008a, 0x2cb3: 0x008a, 0x2cb4: 0x008a, 0x2cb5: 0x008a, + 0x2cb6: 0x008a, 0x2cb8: 0x008a, 0x2cb9: 0x008a, 0x2cba: 0x008a, 0x2cbb: 0x008a, + 0x2cbc: 0x008a, 0x2cbe: 0x008a, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x008a, 0x2cc1: 0x008a, 0x2cc3: 0x008a, 0x2cc4: 0x008a, + 0x2cc6: 0x008a, 0x2cc7: 0x008a, 0x2cc8: 0x008a, 0x2cc9: 0x008a, 0x2cca: 0x008a, 0x2ccb: 0x008a, + 0x2ccc: 0x008a, 0x2ccd: 0x008a, 0x2cce: 0x008a, 0x2ccf: 0x008a, 0x2cd0: 0x0080, 0x2cd1: 0x0080, + 0x2cd2: 0x0080, 0x2cd3: 0x0080, 0x2cd4: 0x0080, 0x2cd5: 0x0080, 0x2cd6: 0x0080, 0x2cd7: 0x0080, + 0x2cd8: 0x0080, 0x2cd9: 0x0080, 0x2cda: 0x0080, 0x2cdb: 0x0080, 0x2cdc: 0x0080, 0x2cdd: 0x0080, + 0x2cde: 0x0080, 0x2cdf: 0x0080, 0x2ce0: 0x0080, 0x2ce1: 0x0080, 0x2ce2: 0x0080, 0x2ce3: 0x0080, + 0x2ce4: 0x0080, 0x2ce5: 0x0080, 0x2ce6: 0x0080, 0x2ce7: 0x0080, 0x2ce8: 0x0080, 0x2ce9: 0x0080, + 0x2cea: 0x0080, 0x2ceb: 0x0080, 0x2cec: 0x0080, 0x2ced: 0x0080, 0x2cee: 0x0080, 0x2cef: 0x0080, + 0x2cf0: 0x0080, 0x2cf1: 0x0080, 0x2cf2: 0x0080, 0x2cf3: 0x0080, 0x2cf4: 0x0080, 0x2cf5: 0x0080, + 0x2cf6: 0x0080, 0x2cf7: 0x0080, 0x2cf8: 0x0080, 0x2cf9: 0x0080, 0x2cfa: 0x0080, 0x2cfb: 0x0080, + 0x2cfc: 0x0080, 0x2cfd: 0x0080, 0x2cfe: 0x0080, 0x2cff: 0x0080, + // Block 0xb4, offset 0x2d00 + 0x2d00: 0x0080, 0x2d01: 0x0080, + 0x2d13: 0x0080, 0x2d14: 0x0080, 0x2d15: 0x0080, 0x2d16: 0x0080, 0x2d17: 0x0080, + 0x2d18: 0x0080, 0x2d19: 0x0080, 0x2d1a: 0x0080, 0x2d1b: 0x0080, 0x2d1c: 0x0080, 0x2d1d: 0x0080, + 0x2d1e: 0x0080, 0x2d1f: 0x0080, 0x2d20: 0x0080, 0x2d21: 0x0080, 0x2d22: 0x0080, 0x2d23: 0x0080, + 0x2d24: 0x0080, 0x2d25: 0x0080, 0x2d26: 0x0080, 0x2d27: 0x0080, 0x2d28: 0x0080, 0x2d29: 0x0080, + 0x2d2a: 0x0080, 0x2d2b: 0x0080, 0x2d2c: 0x0080, 0x2d2d: 0x0080, 0x2d2e: 0x0080, 0x2d2f: 0x0080, + 0x2d30: 0x0080, 0x2d31: 0x0080, 0x2d32: 0x0080, 0x2d33: 0x0080, 0x2d34: 0x0080, 0x2d35: 0x0080, + 0x2d36: 0x0080, 0x2d37: 0x0080, 0x2d38: 0x0080, 0x2d39: 0x0080, 0x2d3a: 0x0080, 0x2d3b: 0x0080, + 0x2d3c: 0x0080, 0x2d3d: 0x0080, 0x2d3e: 0x0080, 0x2d3f: 0x0080, + // Block 0xb5, offset 0x2d40 + 0x2d50: 0x0080, 0x2d51: 0x0080, + 0x2d52: 0x0080, 0x2d53: 0x0080, 0x2d54: 0x0080, 0x2d55: 0x0080, 0x2d56: 0x0080, 0x2d57: 0x0080, + 0x2d58: 0x0080, 0x2d59: 0x0080, 0x2d5a: 0x0080, 0x2d5b: 0x0080, 0x2d5c: 0x0080, 0x2d5d: 0x0080, + 0x2d5e: 0x0080, 0x2d5f: 0x0080, 0x2d60: 0x0080, 0x2d61: 0x0080, 0x2d62: 0x0080, 0x2d63: 0x0080, + 0x2d64: 0x0080, 0x2d65: 0x0080, 0x2d66: 0x0080, 0x2d67: 0x0080, 0x2d68: 0x0080, 0x2d69: 0x0080, + 0x2d6a: 0x0080, 0x2d6b: 0x0080, 0x2d6c: 0x0080, 0x2d6d: 0x0080, 0x2d6e: 0x0080, 0x2d6f: 0x0080, + 0x2d70: 0x0080, 0x2d71: 0x0080, 0x2d72: 0x0080, 0x2d73: 0x0080, 0x2d74: 0x0080, 0x2d75: 0x0080, + 0x2d76: 0x0080, 0x2d77: 0x0080, 0x2d78: 0x0080, 0x2d79: 0x0080, 0x2d7a: 0x0080, 0x2d7b: 0x0080, + 0x2d7c: 0x0080, 0x2d7d: 0x0080, 0x2d7e: 0x0080, 0x2d7f: 0x0080, + // Block 0xb6, offset 0x2d80 + 0x2d80: 0x0080, 0x2d81: 0x0080, 0x2d82: 0x0080, 0x2d83: 0x0080, 0x2d84: 0x0080, 0x2d85: 0x0080, + 0x2d86: 0x0080, 0x2d87: 0x0080, 0x2d88: 0x0080, 0x2d89: 0x0080, 0x2d8a: 0x0080, 0x2d8b: 0x0080, + 0x2d8c: 0x0080, 0x2d8d: 0x0080, 0x2d8e: 0x0080, 0x2d8f: 0x0080, + 0x2d92: 0x0080, 0x2d93: 0x0080, 0x2d94: 0x0080, 0x2d95: 0x0080, 0x2d96: 0x0080, 0x2d97: 0x0080, + 0x2d98: 0x0080, 0x2d99: 0x0080, 0x2d9a: 0x0080, 0x2d9b: 0x0080, 0x2d9c: 0x0080, 0x2d9d: 0x0080, + 0x2d9e: 0x0080, 0x2d9f: 0x0080, 0x2da0: 0x0080, 0x2da1: 0x0080, 0x2da2: 0x0080, 0x2da3: 0x0080, + 0x2da4: 0x0080, 0x2da5: 0x0080, 0x2da6: 0x0080, 0x2da7: 0x0080, 0x2da8: 0x0080, 0x2da9: 0x0080, + 0x2daa: 0x0080, 0x2dab: 0x0080, 0x2dac: 0x0080, 0x2dad: 0x0080, 0x2dae: 0x0080, 0x2daf: 0x0080, + 0x2db0: 0x0080, 0x2db1: 0x0080, 0x2db2: 0x0080, 0x2db3: 0x0080, 0x2db4: 0x0080, 0x2db5: 0x0080, + 0x2db6: 0x0080, 0x2db7: 0x0080, 0x2db8: 0x0080, 0x2db9: 0x0080, 0x2dba: 0x0080, 0x2dbb: 0x0080, + 0x2dbc: 0x0080, 0x2dbd: 0x0080, 0x2dbe: 0x0080, 0x2dbf: 0x0080, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0x0080, 0x2dc1: 0x0080, 0x2dc2: 0x0080, 0x2dc3: 0x0080, 0x2dc4: 0x0080, 0x2dc5: 0x0080, + 0x2dc6: 0x0080, 0x2dc7: 0x0080, + 0x2df0: 0x0080, 0x2df1: 0x0080, 0x2df2: 0x0080, 0x2df3: 0x0080, 0x2df4: 0x0080, 0x2df5: 0x0080, + 0x2df6: 0x0080, 0x2df7: 0x0080, 0x2df8: 0x0080, 0x2df9: 0x0080, 0x2dfa: 0x0080, 0x2dfb: 0x0080, + 0x2dfc: 0x0080, 0x2dfd: 0x0080, + // Block 0xb8, offset 0x2e00 + 0x2e00: 0x0040, 0x2e01: 0x0040, 0x2e02: 0x0040, 0x2e03: 0x0040, 0x2e04: 0x0040, 0x2e05: 0x0040, + 0x2e06: 0x0040, 0x2e07: 0x0040, 0x2e08: 0x0040, 0x2e09: 0x0040, 0x2e0a: 0x0040, 0x2e0b: 0x0040, + 0x2e0c: 0x0040, 0x2e0d: 0x0040, 0x2e0e: 0x0040, 0x2e0f: 0x0040, 0x2e10: 0x0080, 0x2e11: 0x0080, + 0x2e12: 0x0080, 0x2e13: 0x0080, 0x2e14: 0x0080, 0x2e15: 0x0080, 0x2e16: 0x0080, 0x2e17: 0x0080, + 0x2e18: 0x0080, 0x2e19: 0x0080, + 0x2e20: 0x00c3, 0x2e21: 0x00c3, 0x2e22: 0x00c3, 0x2e23: 0x00c3, + 0x2e24: 0x00c3, 0x2e25: 0x00c3, 0x2e26: 0x00c3, 0x2e27: 0x00c3, 0x2e28: 0x00c3, 0x2e29: 0x00c3, + 0x2e2a: 0x00c3, 0x2e2b: 0x00c3, 0x2e2c: 0x00c3, 0x2e2d: 0x00c3, 0x2e2e: 0x00c3, 0x2e2f: 0x00c3, + 0x2e30: 0x0080, 0x2e31: 0x0080, 0x2e32: 0x0080, 0x2e33: 0x0080, 0x2e34: 0x0080, 0x2e35: 0x0080, + 0x2e36: 0x0080, 0x2e37: 0x0080, 0x2e38: 0x0080, 0x2e39: 0x0080, 0x2e3a: 0x0080, 0x2e3b: 0x0080, + 0x2e3c: 0x0080, 0x2e3d: 0x0080, 0x2e3e: 0x0080, 0x2e3f: 0x0080, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x0080, 0x2e41: 0x0080, 0x2e42: 0x0080, 0x2e43: 0x0080, 0x2e44: 0x0080, 0x2e45: 0x0080, + 0x2e46: 0x0080, 0x2e47: 0x0080, 0x2e48: 0x0080, 0x2e49: 0x0080, 0x2e4a: 0x0080, 0x2e4b: 0x0080, + 0x2e4c: 0x0080, 0x2e4d: 0x0080, 0x2e4e: 0x0080, 0x2e4f: 0x0080, 0x2e50: 0x0080, 0x2e51: 0x0080, + 0x2e52: 0x0080, 0x2e54: 0x0080, 0x2e55: 0x0080, 0x2e56: 0x0080, 0x2e57: 0x0080, + 0x2e58: 0x0080, 0x2e59: 0x0080, 0x2e5a: 0x0080, 0x2e5b: 0x0080, 0x2e5c: 0x0080, 0x2e5d: 0x0080, + 0x2e5e: 0x0080, 0x2e5f: 0x0080, 0x2e60: 0x0080, 0x2e61: 0x0080, 0x2e62: 0x0080, 0x2e63: 0x0080, + 0x2e64: 0x0080, 0x2e65: 0x0080, 0x2e66: 0x0080, 0x2e68: 0x0080, 0x2e69: 0x0080, + 0x2e6a: 0x0080, 0x2e6b: 0x0080, + 0x2e70: 0x0080, 0x2e71: 0x0080, 0x2e72: 0x0080, 0x2e73: 0x00c0, 0x2e74: 0x0080, + 0x2e76: 0x0080, 0x2e77: 0x0080, 0x2e78: 0x0080, 0x2e79: 0x0080, 0x2e7a: 0x0080, 0x2e7b: 0x0080, + 0x2e7c: 0x0080, 0x2e7d: 0x0080, 0x2e7e: 0x0080, 0x2e7f: 0x0080, + // Block 0xba, offset 0x2e80 + 0x2e80: 0x0080, 0x2e81: 0x0080, 0x2e82: 0x0080, 0x2e83: 0x0080, 0x2e84: 0x0080, 0x2e85: 0x0080, + 0x2e86: 0x0080, 0x2e87: 0x0080, 0x2e88: 0x0080, 0x2e89: 0x0080, 0x2e8a: 0x0080, 0x2e8b: 0x0080, + 0x2e8c: 0x0080, 0x2e8d: 0x0080, 0x2e8e: 0x0080, 0x2e8f: 0x0080, 0x2e90: 0x0080, 0x2e91: 0x0080, + 0x2e92: 0x0080, 0x2e93: 0x0080, 0x2e94: 0x0080, 0x2e95: 0x0080, 0x2e96: 0x0080, 0x2e97: 0x0080, + 0x2e98: 0x0080, 0x2e99: 0x0080, 0x2e9a: 0x0080, 0x2e9b: 0x0080, 0x2e9c: 0x0080, 0x2e9d: 0x0080, + 0x2e9e: 0x0080, 0x2e9f: 0x0080, 0x2ea0: 0x0080, 0x2ea1: 0x0080, 0x2ea2: 0x0080, 0x2ea3: 0x0080, + 0x2ea4: 0x0080, 0x2ea5: 0x0080, 0x2ea6: 0x0080, 0x2ea7: 0x0080, 0x2ea8: 0x0080, 0x2ea9: 0x0080, + 0x2eaa: 0x0080, 0x2eab: 0x0080, 0x2eac: 0x0080, 0x2ead: 0x0080, 0x2eae: 0x0080, 0x2eaf: 0x0080, + 0x2eb0: 0x0080, 0x2eb1: 0x0080, 0x2eb2: 0x0080, 0x2eb3: 0x0080, 0x2eb4: 0x0080, 0x2eb5: 0x0080, + 0x2eb6: 0x0080, 0x2eb7: 0x0080, 0x2eb8: 0x0080, 0x2eb9: 0x0080, 0x2eba: 0x0080, 0x2ebb: 0x0080, + 0x2ebc: 0x0080, 0x2ebf: 0x0040, + // Block 0xbb, offset 0x2ec0 + 0x2ec1: 0x0080, 0x2ec2: 0x0080, 0x2ec3: 0x0080, 0x2ec4: 0x0080, 0x2ec5: 0x0080, + 0x2ec6: 0x0080, 0x2ec7: 0x0080, 0x2ec8: 0x0080, 0x2ec9: 0x0080, 0x2eca: 0x0080, 0x2ecb: 0x0080, + 0x2ecc: 0x0080, 0x2ecd: 0x0080, 0x2ece: 0x0080, 0x2ecf: 0x0080, 0x2ed0: 0x0080, 0x2ed1: 0x0080, + 0x2ed2: 0x0080, 0x2ed3: 0x0080, 0x2ed4: 0x0080, 0x2ed5: 0x0080, 0x2ed6: 0x0080, 0x2ed7: 0x0080, + 0x2ed8: 0x0080, 0x2ed9: 0x0080, 0x2eda: 0x0080, 0x2edb: 0x0080, 0x2edc: 0x0080, 0x2edd: 0x0080, + 0x2ede: 0x0080, 0x2edf: 0x0080, 0x2ee0: 0x0080, 0x2ee1: 0x0080, 0x2ee2: 0x0080, 0x2ee3: 0x0080, + 0x2ee4: 0x0080, 0x2ee5: 0x0080, 0x2ee6: 0x0080, 0x2ee7: 0x0080, 0x2ee8: 0x0080, 0x2ee9: 0x0080, + 0x2eea: 0x0080, 0x2eeb: 0x0080, 0x2eec: 0x0080, 0x2eed: 0x0080, 0x2eee: 0x0080, 0x2eef: 0x0080, + 0x2ef0: 0x0080, 0x2ef1: 0x0080, 0x2ef2: 0x0080, 0x2ef3: 0x0080, 0x2ef4: 0x0080, 0x2ef5: 0x0080, + 0x2ef6: 0x0080, 0x2ef7: 0x0080, 0x2ef8: 0x0080, 0x2ef9: 0x0080, 0x2efa: 0x0080, 0x2efb: 0x0080, + 0x2efc: 0x0080, 0x2efd: 0x0080, 0x2efe: 0x0080, 0x2eff: 0x0080, + // Block 0xbc, offset 0x2f00 + 0x2f00: 0x0080, 0x2f01: 0x0080, 0x2f02: 0x0080, 0x2f03: 0x0080, 0x2f04: 0x0080, 0x2f05: 0x0080, + 0x2f06: 0x0080, 0x2f07: 0x0080, 0x2f08: 0x0080, 0x2f09: 0x0080, 0x2f0a: 0x0080, 0x2f0b: 0x0080, + 0x2f0c: 0x0080, 0x2f0d: 0x0080, 0x2f0e: 0x0080, 0x2f0f: 0x0080, 0x2f10: 0x0080, 0x2f11: 0x0080, + 0x2f12: 0x0080, 0x2f13: 0x0080, 0x2f14: 0x0080, 0x2f15: 0x0080, 0x2f16: 0x0080, 0x2f17: 0x0080, + 0x2f18: 0x0080, 0x2f19: 0x0080, 0x2f1a: 0x0080, 0x2f1b: 0x0080, 0x2f1c: 0x0080, 0x2f1d: 0x0080, + 0x2f1e: 0x0080, 0x2f1f: 0x0080, 0x2f20: 0x0080, 0x2f21: 0x0080, 0x2f22: 0x0080, 0x2f23: 0x0080, + 0x2f24: 0x0080, 0x2f25: 0x0080, 0x2f26: 0x008c, 0x2f27: 0x008c, 0x2f28: 0x008c, 0x2f29: 0x008c, + 0x2f2a: 0x008c, 0x2f2b: 0x008c, 0x2f2c: 0x008c, 0x2f2d: 0x008c, 0x2f2e: 0x008c, 0x2f2f: 0x008c, + 0x2f30: 0x0080, 0x2f31: 0x008c, 0x2f32: 0x008c, 0x2f33: 0x008c, 0x2f34: 0x008c, 0x2f35: 0x008c, + 0x2f36: 0x008c, 0x2f37: 0x008c, 0x2f38: 0x008c, 0x2f39: 0x008c, 0x2f3a: 0x008c, 0x2f3b: 0x008c, + 0x2f3c: 0x008c, 0x2f3d: 0x008c, 0x2f3e: 0x008c, 0x2f3f: 0x008c, + // Block 0xbd, offset 0x2f40 + 0x2f40: 0x008c, 0x2f41: 0x008c, 0x2f42: 0x008c, 0x2f43: 0x008c, 0x2f44: 0x008c, 0x2f45: 0x008c, + 0x2f46: 0x008c, 0x2f47: 0x008c, 0x2f48: 0x008c, 0x2f49: 0x008c, 0x2f4a: 0x008c, 0x2f4b: 0x008c, + 0x2f4c: 0x008c, 0x2f4d: 0x008c, 0x2f4e: 0x008c, 0x2f4f: 0x008c, 0x2f50: 0x008c, 0x2f51: 0x008c, + 0x2f52: 0x008c, 0x2f53: 0x008c, 0x2f54: 0x008c, 0x2f55: 0x008c, 0x2f56: 0x008c, 0x2f57: 0x008c, + 0x2f58: 0x008c, 0x2f59: 0x008c, 0x2f5a: 0x008c, 0x2f5b: 0x008c, 0x2f5c: 0x008c, 0x2f5d: 0x008c, + 0x2f5e: 0x0080, 0x2f5f: 0x0080, 0x2f60: 0x0040, 0x2f61: 0x0080, 0x2f62: 0x0080, 0x2f63: 0x0080, + 0x2f64: 0x0080, 0x2f65: 0x0080, 0x2f66: 0x0080, 0x2f67: 0x0080, 0x2f68: 0x0080, 0x2f69: 0x0080, + 0x2f6a: 0x0080, 0x2f6b: 0x0080, 0x2f6c: 0x0080, 0x2f6d: 0x0080, 0x2f6e: 0x0080, 0x2f6f: 0x0080, + 0x2f70: 0x0080, 0x2f71: 0x0080, 0x2f72: 0x0080, 0x2f73: 0x0080, 0x2f74: 0x0080, 0x2f75: 0x0080, + 0x2f76: 0x0080, 0x2f77: 0x0080, 0x2f78: 0x0080, 0x2f79: 0x0080, 0x2f7a: 0x0080, 0x2f7b: 0x0080, + 0x2f7c: 0x0080, 0x2f7d: 0x0080, 0x2f7e: 0x0080, + // Block 0xbe, offset 0x2f80 + 0x2f82: 0x0080, 0x2f83: 0x0080, 0x2f84: 0x0080, 0x2f85: 0x0080, + 0x2f86: 0x0080, 0x2f87: 0x0080, 0x2f8a: 0x0080, 0x2f8b: 0x0080, + 0x2f8c: 0x0080, 0x2f8d: 0x0080, 0x2f8e: 0x0080, 0x2f8f: 0x0080, + 0x2f92: 0x0080, 0x2f93: 0x0080, 0x2f94: 0x0080, 0x2f95: 0x0080, 0x2f96: 0x0080, 0x2f97: 0x0080, + 0x2f9a: 0x0080, 0x2f9b: 0x0080, 0x2f9c: 0x0080, + 0x2fa0: 0x0080, 0x2fa1: 0x0080, 0x2fa2: 0x0080, 0x2fa3: 0x0080, + 0x2fa4: 0x0080, 0x2fa5: 0x0080, 0x2fa6: 0x0080, 0x2fa8: 0x0080, 0x2fa9: 0x0080, + 0x2faa: 0x0080, 0x2fab: 0x0080, 0x2fac: 0x0080, 0x2fad: 0x0080, 0x2fae: 0x0080, + 0x2fb9: 0x0040, 0x2fba: 0x0040, 0x2fbb: 0x0040, + 0x2fbc: 0x0080, 0x2fbd: 0x0080, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0x00c0, 0x2fc1: 0x00c0, 0x2fc2: 0x00c0, 0x2fc3: 0x00c0, 0x2fc4: 0x00c0, 0x2fc5: 0x00c0, + 0x2fc6: 0x00c0, 0x2fc7: 0x00c0, 0x2fc8: 0x00c0, 0x2fc9: 0x00c0, 0x2fca: 0x00c0, 0x2fcb: 0x00c0, + 0x2fcd: 0x00c0, 0x2fce: 0x00c0, 0x2fcf: 0x00c0, 0x2fd0: 0x00c0, 0x2fd1: 0x00c0, + 0x2fd2: 0x00c0, 0x2fd3: 0x00c0, 0x2fd4: 0x00c0, 0x2fd5: 0x00c0, 0x2fd6: 0x00c0, 0x2fd7: 0x00c0, + 0x2fd8: 0x00c0, 0x2fd9: 0x00c0, 0x2fda: 0x00c0, 0x2fdb: 0x00c0, 0x2fdc: 0x00c0, 0x2fdd: 0x00c0, + 0x2fde: 0x00c0, 0x2fdf: 0x00c0, 0x2fe0: 0x00c0, 0x2fe1: 0x00c0, 0x2fe2: 0x00c0, 0x2fe3: 0x00c0, + 0x2fe4: 0x00c0, 0x2fe5: 0x00c0, 0x2fe6: 0x00c0, 0x2fe8: 0x00c0, 0x2fe9: 0x00c0, + 0x2fea: 0x00c0, 0x2feb: 0x00c0, 0x2fec: 0x00c0, 0x2fed: 0x00c0, 0x2fee: 0x00c0, 0x2fef: 0x00c0, + 0x2ff0: 0x00c0, 0x2ff1: 0x00c0, 0x2ff2: 0x00c0, 0x2ff3: 0x00c0, 0x2ff4: 0x00c0, 0x2ff5: 0x00c0, + 0x2ff6: 0x00c0, 0x2ff7: 0x00c0, 0x2ff8: 0x00c0, 0x2ff9: 0x00c0, 0x2ffa: 0x00c0, + 0x2ffc: 0x00c0, 0x2ffd: 0x00c0, 0x2fff: 0x00c0, + // Block 0xc0, offset 0x3000 + 0x3000: 0x00c0, 0x3001: 0x00c0, 0x3002: 0x00c0, 0x3003: 0x00c0, 0x3004: 0x00c0, 0x3005: 0x00c0, + 0x3006: 0x00c0, 0x3007: 0x00c0, 0x3008: 0x00c0, 0x3009: 0x00c0, 0x300a: 0x00c0, 0x300b: 0x00c0, + 0x300c: 0x00c0, 0x300d: 0x00c0, 0x3010: 0x00c0, 0x3011: 0x00c0, + 0x3012: 0x00c0, 0x3013: 0x00c0, 0x3014: 0x00c0, 0x3015: 0x00c0, 0x3016: 0x00c0, 0x3017: 0x00c0, + 0x3018: 0x00c0, 0x3019: 0x00c0, 0x301a: 0x00c0, 0x301b: 0x00c0, 0x301c: 0x00c0, 0x301d: 0x00c0, + // Block 0xc1, offset 0x3040 + 0x3040: 0x00c0, 0x3041: 0x00c0, 0x3042: 0x00c0, 0x3043: 0x00c0, 0x3044: 0x00c0, 0x3045: 0x00c0, + 0x3046: 0x00c0, 0x3047: 0x00c0, 0x3048: 0x00c0, 0x3049: 0x00c0, 0x304a: 0x00c0, 0x304b: 0x00c0, + 0x304c: 0x00c0, 0x304d: 0x00c0, 0x304e: 0x00c0, 0x304f: 0x00c0, 0x3050: 0x00c0, 0x3051: 0x00c0, + 0x3052: 0x00c0, 0x3053: 0x00c0, 0x3054: 0x00c0, 0x3055: 0x00c0, 0x3056: 0x00c0, 0x3057: 0x00c0, + 0x3058: 0x00c0, 0x3059: 0x00c0, 0x305a: 0x00c0, 0x305b: 0x00c0, 0x305c: 0x00c0, 0x305d: 0x00c0, + 0x305e: 0x00c0, 0x305f: 0x00c0, 0x3060: 0x00c0, 0x3061: 0x00c0, 0x3062: 0x00c0, 0x3063: 0x00c0, + 0x3064: 0x00c0, 0x3065: 0x00c0, 0x3066: 0x00c0, 0x3067: 0x00c0, 0x3068: 0x00c0, 0x3069: 0x00c0, + 0x306a: 0x00c0, 0x306b: 0x00c0, 0x306c: 0x00c0, 0x306d: 0x00c0, 0x306e: 0x00c0, 0x306f: 0x00c0, + 0x3070: 0x00c0, 0x3071: 0x00c0, 0x3072: 0x00c0, 0x3073: 0x00c0, 0x3074: 0x00c0, 0x3075: 0x00c0, + 0x3076: 0x00c0, 0x3077: 0x00c0, 0x3078: 0x00c0, 0x3079: 0x00c0, 0x307a: 0x00c0, + // Block 0xc2, offset 0x3080 + 0x3080: 0x0080, 0x3081: 0x0080, 0x3082: 0x0080, + 0x3087: 0x0080, 0x3088: 0x0080, 0x3089: 0x0080, 0x308a: 0x0080, 0x308b: 0x0080, + 0x308c: 0x0080, 0x308d: 0x0080, 0x308e: 0x0080, 0x308f: 0x0080, 0x3090: 0x0080, 0x3091: 0x0080, + 0x3092: 0x0080, 0x3093: 0x0080, 0x3094: 0x0080, 0x3095: 0x0080, 0x3096: 0x0080, 0x3097: 0x0080, + 0x3098: 0x0080, 0x3099: 0x0080, 0x309a: 0x0080, 0x309b: 0x0080, 0x309c: 0x0080, 0x309d: 0x0080, + 0x309e: 0x0080, 0x309f: 0x0080, 0x30a0: 0x0080, 0x30a1: 0x0080, 0x30a2: 0x0080, 0x30a3: 0x0080, + 0x30a4: 0x0080, 0x30a5: 0x0080, 0x30a6: 0x0080, 0x30a7: 0x0080, 0x30a8: 0x0080, 0x30a9: 0x0080, + 0x30aa: 0x0080, 0x30ab: 0x0080, 0x30ac: 0x0080, 0x30ad: 0x0080, 0x30ae: 0x0080, 0x30af: 0x0080, + 0x30b0: 0x0080, 0x30b1: 0x0080, 0x30b2: 0x0080, 0x30b3: 0x0080, + 0x30b7: 0x0080, 0x30b8: 0x0080, 0x30b9: 0x0080, 0x30ba: 0x0080, 0x30bb: 0x0080, + 0x30bc: 0x0080, 0x30bd: 0x0080, 0x30be: 0x0080, 0x30bf: 0x0080, + // Block 0xc3, offset 0x30c0 + 0x30c0: 0x0088, 0x30c1: 0x0088, 0x30c2: 0x0088, 0x30c3: 0x0088, 0x30c4: 0x0088, 0x30c5: 0x0088, + 0x30c6: 0x0088, 0x30c7: 0x0088, 0x30c8: 0x0088, 0x30c9: 0x0088, 0x30ca: 0x0088, 0x30cb: 0x0088, + 0x30cc: 0x0088, 0x30cd: 0x0088, 0x30ce: 0x0088, 0x30cf: 0x0088, 0x30d0: 0x0088, 0x30d1: 0x0088, + 0x30d2: 0x0088, 0x30d3: 0x0088, 0x30d4: 0x0088, 0x30d5: 0x0088, 0x30d6: 0x0088, 0x30d7: 0x0088, + 0x30d8: 0x0088, 0x30d9: 0x0088, 0x30da: 0x0088, 0x30db: 0x0088, 0x30dc: 0x0088, 0x30dd: 0x0088, + 0x30de: 0x0088, 0x30df: 0x0088, 0x30e0: 0x0088, 0x30e1: 0x0088, 0x30e2: 0x0088, 0x30e3: 0x0088, + 0x30e4: 0x0088, 0x30e5: 0x0088, 0x30e6: 0x0088, 0x30e7: 0x0088, 0x30e8: 0x0088, 0x30e9: 0x0088, + 0x30ea: 0x0088, 0x30eb: 0x0088, 0x30ec: 0x0088, 0x30ed: 0x0088, 0x30ee: 0x0088, 0x30ef: 0x0088, + 0x30f0: 0x0088, 0x30f1: 0x0088, 0x30f2: 0x0088, 0x30f3: 0x0088, 0x30f4: 0x0088, 0x30f5: 0x0088, + 0x30f6: 0x0088, 0x30f7: 0x0088, 0x30f8: 0x0088, 0x30f9: 0x0088, 0x30fa: 0x0088, 0x30fb: 0x0088, + 0x30fc: 0x0088, 0x30fd: 0x0088, 0x30fe: 0x0088, 0x30ff: 0x0088, + // Block 0xc4, offset 0x3100 + 0x3100: 0x0088, 0x3101: 0x0088, 0x3102: 0x0088, 0x3103: 0x0088, 0x3104: 0x0088, 0x3105: 0x0088, + 0x3106: 0x0088, 0x3107: 0x0088, 0x3108: 0x0088, 0x3109: 0x0088, 0x310a: 0x0088, 0x310b: 0x0088, + 0x310c: 0x0088, 0x310d: 0x0088, 0x310e: 0x0088, 0x3110: 0x0080, 0x3111: 0x0080, + 0x3112: 0x0080, 0x3113: 0x0080, 0x3114: 0x0080, 0x3115: 0x0080, 0x3116: 0x0080, 0x3117: 0x0080, + 0x3118: 0x0080, 0x3119: 0x0080, 0x311a: 0x0080, 0x311b: 0x0080, + 0x3120: 0x0088, + // Block 0xc5, offset 0x3140 + 0x3150: 0x0080, 0x3151: 0x0080, + 0x3152: 0x0080, 0x3153: 0x0080, 0x3154: 0x0080, 0x3155: 0x0080, 0x3156: 0x0080, 0x3157: 0x0080, + 0x3158: 0x0080, 0x3159: 0x0080, 0x315a: 0x0080, 0x315b: 0x0080, 0x315c: 0x0080, 0x315d: 0x0080, + 0x315e: 0x0080, 0x315f: 0x0080, 0x3160: 0x0080, 0x3161: 0x0080, 0x3162: 0x0080, 0x3163: 0x0080, + 0x3164: 0x0080, 0x3165: 0x0080, 0x3166: 0x0080, 0x3167: 0x0080, 0x3168: 0x0080, 0x3169: 0x0080, + 0x316a: 0x0080, 0x316b: 0x0080, 0x316c: 0x0080, 0x316d: 0x0080, 0x316e: 0x0080, 0x316f: 0x0080, + 0x3170: 0x0080, 0x3171: 0x0080, 0x3172: 0x0080, 0x3173: 0x0080, 0x3174: 0x0080, 0x3175: 0x0080, + 0x3176: 0x0080, 0x3177: 0x0080, 0x3178: 0x0080, 0x3179: 0x0080, 0x317a: 0x0080, 0x317b: 0x0080, + 0x317c: 0x0080, 0x317d: 0x00c3, + // Block 0xc6, offset 0x3180 + 0x3180: 0x00c0, 0x3181: 0x00c0, 0x3182: 0x00c0, 0x3183: 0x00c0, 0x3184: 0x00c0, 0x3185: 0x00c0, + 0x3186: 0x00c0, 0x3187: 0x00c0, 0x3188: 0x00c0, 0x3189: 0x00c0, 0x318a: 0x00c0, 0x318b: 0x00c0, + 0x318c: 0x00c0, 0x318d: 0x00c0, 0x318e: 0x00c0, 0x318f: 0x00c0, 0x3190: 0x00c0, 0x3191: 0x00c0, + 0x3192: 0x00c0, 0x3193: 0x00c0, 0x3194: 0x00c0, 0x3195: 0x00c0, 0x3196: 0x00c0, 0x3197: 0x00c0, + 0x3198: 0x00c0, 0x3199: 0x00c0, 0x319a: 0x00c0, 0x319b: 0x00c0, 0x319c: 0x00c0, + 0x31a0: 0x00c0, 0x31a1: 0x00c0, 0x31a2: 0x00c0, 0x31a3: 0x00c0, + 0x31a4: 0x00c0, 0x31a5: 0x00c0, 0x31a6: 0x00c0, 0x31a7: 0x00c0, 0x31a8: 0x00c0, 0x31a9: 0x00c0, + 0x31aa: 0x00c0, 0x31ab: 0x00c0, 0x31ac: 0x00c0, 0x31ad: 0x00c0, 0x31ae: 0x00c0, 0x31af: 0x00c0, + 0x31b0: 0x00c0, 0x31b1: 0x00c0, 0x31b2: 0x00c0, 0x31b3: 0x00c0, 0x31b4: 0x00c0, 0x31b5: 0x00c0, + 0x31b6: 0x00c0, 0x31b7: 0x00c0, 0x31b8: 0x00c0, 0x31b9: 0x00c0, 0x31ba: 0x00c0, 0x31bb: 0x00c0, + 0x31bc: 0x00c0, 0x31bd: 0x00c0, 0x31be: 0x00c0, 0x31bf: 0x00c0, + // Block 0xc7, offset 0x31c0 + 0x31c0: 0x00c0, 0x31c1: 0x00c0, 0x31c2: 0x00c0, 0x31c3: 0x00c0, 0x31c4: 0x00c0, 0x31c5: 0x00c0, + 0x31c6: 0x00c0, 0x31c7: 0x00c0, 0x31c8: 0x00c0, 0x31c9: 0x00c0, 0x31ca: 0x00c0, 0x31cb: 0x00c0, + 0x31cc: 0x00c0, 0x31cd: 0x00c0, 0x31ce: 0x00c0, 0x31cf: 0x00c0, 0x31d0: 0x00c0, + 0x31e0: 0x00c3, 0x31e1: 0x0080, 0x31e2: 0x0080, 0x31e3: 0x0080, + 0x31e4: 0x0080, 0x31e5: 0x0080, 0x31e6: 0x0080, 0x31e7: 0x0080, 0x31e8: 0x0080, 0x31e9: 0x0080, + 0x31ea: 0x0080, 0x31eb: 0x0080, 0x31ec: 0x0080, 0x31ed: 0x0080, 0x31ee: 0x0080, 0x31ef: 0x0080, + 0x31f0: 0x0080, 0x31f1: 0x0080, 0x31f2: 0x0080, 0x31f3: 0x0080, 0x31f4: 0x0080, 0x31f5: 0x0080, + 0x31f6: 0x0080, 0x31f7: 0x0080, 0x31f8: 0x0080, 0x31f9: 0x0080, 0x31fa: 0x0080, 0x31fb: 0x0080, + // Block 0xc8, offset 0x3200 + 0x3200: 0x00c0, 0x3201: 0x00c0, 0x3202: 0x00c0, 0x3203: 0x00c0, 0x3204: 0x00c0, 0x3205: 0x00c0, + 0x3206: 0x00c0, 0x3207: 0x00c0, 0x3208: 0x00c0, 0x3209: 0x00c0, 0x320a: 0x00c0, 0x320b: 0x00c0, + 0x320c: 0x00c0, 0x320d: 0x00c0, 0x320e: 0x00c0, 0x320f: 0x00c0, 0x3210: 0x00c0, 0x3211: 0x00c0, + 0x3212: 0x00c0, 0x3213: 0x00c0, 0x3214: 0x00c0, 0x3215: 0x00c0, 0x3216: 0x00c0, 0x3217: 0x00c0, + 0x3218: 0x00c0, 0x3219: 0x00c0, 0x321a: 0x00c0, 0x321b: 0x00c0, 0x321c: 0x00c0, 0x321d: 0x00c0, + 0x321e: 0x00c0, 0x321f: 0x00c0, 0x3220: 0x0080, 0x3221: 0x0080, 0x3222: 0x0080, 0x3223: 0x0080, + 0x3230: 0x00c0, 0x3231: 0x00c0, 0x3232: 0x00c0, 0x3233: 0x00c0, 0x3234: 0x00c0, 0x3235: 0x00c0, + 0x3236: 0x00c0, 0x3237: 0x00c0, 0x3238: 0x00c0, 0x3239: 0x00c0, 0x323a: 0x00c0, 0x323b: 0x00c0, + 0x323c: 0x00c0, 0x323d: 0x00c0, 0x323e: 0x00c0, 0x323f: 0x00c0, + // Block 0xc9, offset 0x3240 + 0x3240: 0x00c0, 0x3241: 0x0080, 0x3242: 0x00c0, 0x3243: 0x00c0, 0x3244: 0x00c0, 0x3245: 0x00c0, + 0x3246: 0x00c0, 0x3247: 0x00c0, 0x3248: 0x00c0, 0x3249: 0x00c0, 0x324a: 0x0080, + 0x3250: 0x00c0, 0x3251: 0x00c0, + 0x3252: 0x00c0, 0x3253: 0x00c0, 0x3254: 0x00c0, 0x3255: 0x00c0, 0x3256: 0x00c0, 0x3257: 0x00c0, + 0x3258: 0x00c0, 0x3259: 0x00c0, 0x325a: 0x00c0, 0x325b: 0x00c0, 0x325c: 0x00c0, 0x325d: 0x00c0, + 0x325e: 0x00c0, 0x325f: 0x00c0, 0x3260: 0x00c0, 0x3261: 0x00c0, 0x3262: 0x00c0, 0x3263: 0x00c0, + 0x3264: 0x00c0, 0x3265: 0x00c0, 0x3266: 0x00c0, 0x3267: 0x00c0, 0x3268: 0x00c0, 0x3269: 0x00c0, + 0x326a: 0x00c0, 0x326b: 0x00c0, 0x326c: 0x00c0, 0x326d: 0x00c0, 0x326e: 0x00c0, 0x326f: 0x00c0, + 0x3270: 0x00c0, 0x3271: 0x00c0, 0x3272: 0x00c0, 0x3273: 0x00c0, 0x3274: 0x00c0, 0x3275: 0x00c0, + 0x3276: 0x00c3, 0x3277: 0x00c3, 0x3278: 0x00c3, 0x3279: 0x00c3, 0x327a: 0x00c3, + // Block 0xca, offset 0x3280 + 0x3280: 0x00c0, 0x3281: 0x00c0, 0x3282: 0x00c0, 0x3283: 0x00c0, 0x3284: 0x00c0, 0x3285: 0x00c0, + 0x3286: 0x00c0, 0x3287: 0x00c0, 0x3288: 0x00c0, 0x3289: 0x00c0, 0x328a: 0x00c0, 0x328b: 0x00c0, + 0x328c: 0x00c0, 0x328d: 0x00c0, 0x328e: 0x00c0, 0x328f: 0x00c0, 0x3290: 0x00c0, 0x3291: 0x00c0, + 0x3292: 0x00c0, 0x3293: 0x00c0, 0x3294: 0x00c0, 0x3295: 0x00c0, 0x3296: 0x00c0, 0x3297: 0x00c0, + 0x3298: 0x00c0, 0x3299: 0x00c0, 0x329a: 0x00c0, 0x329b: 0x00c0, 0x329c: 0x00c0, 0x329d: 0x00c0, + 0x329f: 0x0080, 0x32a0: 0x00c0, 0x32a1: 0x00c0, 0x32a2: 0x00c0, 0x32a3: 0x00c0, + 0x32a4: 0x00c0, 0x32a5: 0x00c0, 0x32a6: 0x00c0, 0x32a7: 0x00c0, 0x32a8: 0x00c0, 0x32a9: 0x00c0, + 0x32aa: 0x00c0, 0x32ab: 0x00c0, 0x32ac: 0x00c0, 0x32ad: 0x00c0, 0x32ae: 0x00c0, 0x32af: 0x00c0, + 0x32b0: 0x00c0, 0x32b1: 0x00c0, 0x32b2: 0x00c0, 0x32b3: 0x00c0, 0x32b4: 0x00c0, 0x32b5: 0x00c0, + 0x32b6: 0x00c0, 0x32b7: 0x00c0, 0x32b8: 0x00c0, 0x32b9: 0x00c0, 0x32ba: 0x00c0, 0x32bb: 0x00c0, + 0x32bc: 0x00c0, 0x32bd: 0x00c0, 0x32be: 0x00c0, 0x32bf: 0x00c0, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x00c0, 0x32c1: 0x00c0, 0x32c2: 0x00c0, 0x32c3: 0x00c0, + 0x32c8: 0x00c0, 0x32c9: 0x00c0, 0x32ca: 0x00c0, 0x32cb: 0x00c0, + 0x32cc: 0x00c0, 0x32cd: 0x00c0, 0x32ce: 0x00c0, 0x32cf: 0x00c0, 0x32d0: 0x0080, 0x32d1: 0x0080, + 0x32d2: 0x0080, 0x32d3: 0x0080, 0x32d4: 0x0080, 0x32d5: 0x0080, + // Block 0xcc, offset 0x3300 + 0x3300: 0x00c0, 0x3301: 0x00c0, 0x3302: 0x00c0, 0x3303: 0x00c0, 0x3304: 0x00c0, 0x3305: 0x00c0, + 0x3306: 0x00c0, 0x3307: 0x00c0, 0x3308: 0x00c0, 0x3309: 0x00c0, 0x330a: 0x00c0, 0x330b: 0x00c0, + 0x330c: 0x00c0, 0x330d: 0x00c0, 0x330e: 0x00c0, 0x330f: 0x00c0, 0x3310: 0x00c0, 0x3311: 0x00c0, + 0x3312: 0x00c0, 0x3313: 0x00c0, 0x3314: 0x00c0, 0x3315: 0x00c0, 0x3316: 0x00c0, 0x3317: 0x00c0, + 0x3318: 0x00c0, 0x3319: 0x00c0, 0x331a: 0x00c0, 0x331b: 0x00c0, 0x331c: 0x00c0, 0x331d: 0x00c0, + 0x3320: 0x00c0, 0x3321: 0x00c0, 0x3322: 0x00c0, 0x3323: 0x00c0, + 0x3324: 0x00c0, 0x3325: 0x00c0, 0x3326: 0x00c0, 0x3327: 0x00c0, 0x3328: 0x00c0, 0x3329: 0x00c0, + 0x3330: 0x00c0, 0x3331: 0x00c0, 0x3332: 0x00c0, 0x3333: 0x00c0, 0x3334: 0x00c0, 0x3335: 0x00c0, + 0x3336: 0x00c0, 0x3337: 0x00c0, 0x3338: 0x00c0, 0x3339: 0x00c0, 0x333a: 0x00c0, 0x333b: 0x00c0, + 0x333c: 0x00c0, 0x333d: 0x00c0, 0x333e: 0x00c0, 0x333f: 0x00c0, + // Block 0xcd, offset 0x3340 + 0x3340: 0x00c0, 0x3341: 0x00c0, 0x3342: 0x00c0, 0x3343: 0x00c0, 0x3344: 0x00c0, 0x3345: 0x00c0, + 0x3346: 0x00c0, 0x3347: 0x00c0, 0x3348: 0x00c0, 0x3349: 0x00c0, 0x334a: 0x00c0, 0x334b: 0x00c0, + 0x334c: 0x00c0, 0x334d: 0x00c0, 0x334e: 0x00c0, 0x334f: 0x00c0, 0x3350: 0x00c0, 0x3351: 0x00c0, + 0x3352: 0x00c0, 0x3353: 0x00c0, + 0x3358: 0x00c0, 0x3359: 0x00c0, 0x335a: 0x00c0, 0x335b: 0x00c0, 0x335c: 0x00c0, 0x335d: 0x00c0, + 0x335e: 0x00c0, 0x335f: 0x00c0, 0x3360: 0x00c0, 0x3361: 0x00c0, 0x3362: 0x00c0, 0x3363: 0x00c0, + 0x3364: 0x00c0, 0x3365: 0x00c0, 0x3366: 0x00c0, 0x3367: 0x00c0, 0x3368: 0x00c0, 0x3369: 0x00c0, + 0x336a: 0x00c0, 0x336b: 0x00c0, 0x336c: 0x00c0, 0x336d: 0x00c0, 0x336e: 0x00c0, 0x336f: 0x00c0, + 0x3370: 0x00c0, 0x3371: 0x00c0, 0x3372: 0x00c0, 0x3373: 0x00c0, 0x3374: 0x00c0, 0x3375: 0x00c0, + 0x3376: 0x00c0, 0x3377: 0x00c0, 0x3378: 0x00c0, 0x3379: 0x00c0, 0x337a: 0x00c0, 0x337b: 0x00c0, + // Block 0xce, offset 0x3380 + 0x3380: 0x00c0, 0x3381: 0x00c0, 0x3382: 0x00c0, 0x3383: 0x00c0, 0x3384: 0x00c0, 0x3385: 0x00c0, + 0x3386: 0x00c0, 0x3387: 0x00c0, 0x3388: 0x00c0, 0x3389: 0x00c0, 0x338a: 0x00c0, 0x338b: 0x00c0, + 0x338c: 0x00c0, 0x338d: 0x00c0, 0x338e: 0x00c0, 0x338f: 0x00c0, 0x3390: 0x00c0, 0x3391: 0x00c0, + 0x3392: 0x00c0, 0x3393: 0x00c0, 0x3394: 0x00c0, 0x3395: 0x00c0, 0x3396: 0x00c0, 0x3397: 0x00c0, + 0x3398: 0x00c0, 0x3399: 0x00c0, 0x339a: 0x00c0, 0x339b: 0x00c0, 0x339c: 0x00c0, 0x339d: 0x00c0, + 0x339e: 0x00c0, 0x339f: 0x00c0, 0x33a0: 0x00c0, 0x33a1: 0x00c0, 0x33a2: 0x00c0, 0x33a3: 0x00c0, + 0x33a4: 0x00c0, 0x33a5: 0x00c0, 0x33a6: 0x00c0, 0x33a7: 0x00c0, + 0x33b0: 0x00c0, 0x33b1: 0x00c0, 0x33b2: 0x00c0, 0x33b3: 0x00c0, 0x33b4: 0x00c0, 0x33b5: 0x00c0, + 0x33b6: 0x00c0, 0x33b7: 0x00c0, 0x33b8: 0x00c0, 0x33b9: 0x00c0, 0x33ba: 0x00c0, 0x33bb: 0x00c0, + 0x33bc: 0x00c0, 0x33bd: 0x00c0, 0x33be: 0x00c0, 0x33bf: 0x00c0, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x00c0, 0x33c1: 0x00c0, 0x33c2: 0x00c0, 0x33c3: 0x00c0, 0x33c4: 0x00c0, 0x33c5: 0x00c0, + 0x33c6: 0x00c0, 0x33c7: 0x00c0, 0x33c8: 0x00c0, 0x33c9: 0x00c0, 0x33ca: 0x00c0, 0x33cb: 0x00c0, + 0x33cc: 0x00c0, 0x33cd: 0x00c0, 0x33ce: 0x00c0, 0x33cf: 0x00c0, 0x33d0: 0x00c0, 0x33d1: 0x00c0, + 0x33d2: 0x00c0, 0x33d3: 0x00c0, 0x33d4: 0x00c0, 0x33d5: 0x00c0, 0x33d6: 0x00c0, 0x33d7: 0x00c0, + 0x33d8: 0x00c0, 0x33d9: 0x00c0, 0x33da: 0x00c0, 0x33db: 0x00c0, 0x33dc: 0x00c0, 0x33dd: 0x00c0, + 0x33de: 0x00c0, 0x33df: 0x00c0, 0x33e0: 0x00c0, 0x33e1: 0x00c0, 0x33e2: 0x00c0, 0x33e3: 0x00c0, + 0x33ef: 0x0080, + // Block 0xd0, offset 0x3400 + 0x3400: 0x00c0, 0x3401: 0x00c0, 0x3402: 0x00c0, 0x3403: 0x00c0, 0x3404: 0x00c0, 0x3405: 0x00c0, + 0x3406: 0x00c0, 0x3407: 0x00c0, 0x3408: 0x00c0, 0x3409: 0x00c0, 0x340a: 0x00c0, 0x340b: 0x00c0, + 0x340c: 0x00c0, 0x340d: 0x00c0, 0x340e: 0x00c0, 0x340f: 0x00c0, 0x3410: 0x00c0, 0x3411: 0x00c0, + 0x3412: 0x00c0, 0x3413: 0x00c0, 0x3414: 0x00c0, 0x3415: 0x00c0, 0x3416: 0x00c0, 0x3417: 0x00c0, + 0x3418: 0x00c0, 0x3419: 0x00c0, 0x341a: 0x00c0, 0x341b: 0x00c0, 0x341c: 0x00c0, 0x341d: 0x00c0, + 0x341e: 0x00c0, 0x341f: 0x00c0, 0x3420: 0x00c0, 0x3421: 0x00c0, 0x3422: 0x00c0, 0x3423: 0x00c0, + 0x3424: 0x00c0, 0x3425: 0x00c0, 0x3426: 0x00c0, 0x3427: 0x00c0, 0x3428: 0x00c0, 0x3429: 0x00c0, + 0x342a: 0x00c0, 0x342b: 0x00c0, 0x342c: 0x00c0, 0x342d: 0x00c0, 0x342e: 0x00c0, 0x342f: 0x00c0, + 0x3430: 0x00c0, 0x3431: 0x00c0, 0x3432: 0x00c0, 0x3433: 0x00c0, 0x3434: 0x00c0, 0x3435: 0x00c0, + 0x3436: 0x00c0, + // Block 0xd1, offset 0x3440 + 0x3440: 0x00c0, 0x3441: 0x00c0, 0x3442: 0x00c0, 0x3443: 0x00c0, 0x3444: 0x00c0, 0x3445: 0x00c0, + 0x3446: 0x00c0, 0x3447: 0x00c0, 0x3448: 0x00c0, 0x3449: 0x00c0, 0x344a: 0x00c0, 0x344b: 0x00c0, + 0x344c: 0x00c0, 0x344d: 0x00c0, 0x344e: 0x00c0, 0x344f: 0x00c0, 0x3450: 0x00c0, 0x3451: 0x00c0, + 0x3452: 0x00c0, 0x3453: 0x00c0, 0x3454: 0x00c0, 0x3455: 0x00c0, + 0x3460: 0x00c0, 0x3461: 0x00c0, 0x3462: 0x00c0, 0x3463: 0x00c0, + 0x3464: 0x00c0, 0x3465: 0x00c0, 0x3466: 0x00c0, 0x3467: 0x00c0, + // Block 0xd2, offset 0x3480 + 0x3480: 0x00c0, 0x3481: 0x00c0, 0x3482: 0x00c0, 0x3483: 0x00c0, 0x3484: 0x00c0, 0x3485: 0x00c0, + 0x3488: 0x00c0, 0x348a: 0x00c0, 0x348b: 0x00c0, + 0x348c: 0x00c0, 0x348d: 0x00c0, 0x348e: 0x00c0, 0x348f: 0x00c0, 0x3490: 0x00c0, 0x3491: 0x00c0, + 0x3492: 0x00c0, 0x3493: 0x00c0, 0x3494: 0x00c0, 0x3495: 0x00c0, 0x3496: 0x00c0, 0x3497: 0x00c0, + 0x3498: 0x00c0, 0x3499: 0x00c0, 0x349a: 0x00c0, 0x349b: 0x00c0, 0x349c: 0x00c0, 0x349d: 0x00c0, + 0x349e: 0x00c0, 0x349f: 0x00c0, 0x34a0: 0x00c0, 0x34a1: 0x00c0, 0x34a2: 0x00c0, 0x34a3: 0x00c0, + 0x34a4: 0x00c0, 0x34a5: 0x00c0, 0x34a6: 0x00c0, 0x34a7: 0x00c0, 0x34a8: 0x00c0, 0x34a9: 0x00c0, + 0x34aa: 0x00c0, 0x34ab: 0x00c0, 0x34ac: 0x00c0, 0x34ad: 0x00c0, 0x34ae: 0x00c0, 0x34af: 0x00c0, + 0x34b0: 0x00c0, 0x34b1: 0x00c0, 0x34b2: 0x00c0, 0x34b3: 0x00c0, 0x34b4: 0x00c0, 0x34b5: 0x00c0, + 0x34b7: 0x00c0, 0x34b8: 0x00c0, + 0x34bc: 0x00c0, 0x34bf: 0x00c0, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x00c0, 0x34c1: 0x00c0, 0x34c2: 0x00c0, 0x34c3: 0x00c0, 0x34c4: 0x00c0, 0x34c5: 0x00c0, + 0x34c6: 0x00c0, 0x34c7: 0x00c0, 0x34c8: 0x00c0, 0x34c9: 0x00c0, 0x34ca: 0x00c0, 0x34cb: 0x00c0, + 0x34cc: 0x00c0, 0x34cd: 0x00c0, 0x34ce: 0x00c0, 0x34cf: 0x00c0, 0x34d0: 0x00c0, 0x34d1: 0x00c0, + 0x34d2: 0x00c0, 0x34d3: 0x00c0, 0x34d4: 0x00c0, 0x34d5: 0x00c0, 0x34d7: 0x0080, + 0x34d8: 0x0080, 0x34d9: 0x0080, 0x34da: 0x0080, 0x34db: 0x0080, 0x34dc: 0x0080, 0x34dd: 0x0080, + 0x34de: 0x0080, 0x34df: 0x0080, 0x34e0: 0x00c0, 0x34e1: 0x00c0, 0x34e2: 0x00c0, 0x34e3: 0x00c0, + 0x34e4: 0x00c0, 0x34e5: 0x00c0, 0x34e6: 0x00c0, 0x34e7: 0x00c0, 0x34e8: 0x00c0, 0x34e9: 0x00c0, + 0x34ea: 0x00c0, 0x34eb: 0x00c0, 0x34ec: 0x00c0, 0x34ed: 0x00c0, 0x34ee: 0x00c0, 0x34ef: 0x00c0, + 0x34f0: 0x00c0, 0x34f1: 0x00c0, 0x34f2: 0x00c0, 0x34f3: 0x00c0, 0x34f4: 0x00c0, 0x34f5: 0x00c0, + 0x34f6: 0x00c0, 0x34f7: 0x0080, 0x34f8: 0x0080, 0x34f9: 0x0080, 0x34fa: 0x0080, 0x34fb: 0x0080, + 0x34fc: 0x0080, 0x34fd: 0x0080, 0x34fe: 0x0080, 0x34ff: 0x0080, + // Block 0xd4, offset 0x3500 + 0x3500: 0x00c0, 0x3501: 0x00c0, 0x3502: 0x00c0, 0x3503: 0x00c0, 0x3504: 0x00c0, 0x3505: 0x00c0, + 0x3506: 0x00c0, 0x3507: 0x00c0, 0x3508: 0x00c0, 0x3509: 0x00c0, 0x350a: 0x00c0, 0x350b: 0x00c0, + 0x350c: 0x00c0, 0x350d: 0x00c0, 0x350e: 0x00c0, 0x350f: 0x00c0, 0x3510: 0x00c0, 0x3511: 0x00c0, + 0x3512: 0x00c0, 0x3513: 0x00c0, 0x3514: 0x00c0, 0x3515: 0x00c0, 0x3516: 0x00c0, 0x3517: 0x00c0, + 0x3518: 0x00c0, 0x3519: 0x00c0, 0x351a: 0x00c0, 0x351b: 0x00c0, 0x351c: 0x00c0, 0x351d: 0x00c0, + 0x351e: 0x00c0, + 0x3527: 0x0080, 0x3528: 0x0080, 0x3529: 0x0080, + 0x352a: 0x0080, 0x352b: 0x0080, 0x352c: 0x0080, 0x352d: 0x0080, 0x352e: 0x0080, 0x352f: 0x0080, + // Block 0xd5, offset 0x3540 + 0x3560: 0x00c0, 0x3561: 0x00c0, 0x3562: 0x00c0, 0x3563: 0x00c0, + 0x3564: 0x00c0, 0x3565: 0x00c0, 0x3566: 0x00c0, 0x3567: 0x00c0, 0x3568: 0x00c0, 0x3569: 0x00c0, + 0x356a: 0x00c0, 0x356b: 0x00c0, 0x356c: 0x00c0, 0x356d: 0x00c0, 0x356e: 0x00c0, 0x356f: 0x00c0, + 0x3570: 0x00c0, 0x3571: 0x00c0, 0x3572: 0x00c0, 0x3574: 0x00c0, 0x3575: 0x00c0, + 0x357b: 0x0080, + 0x357c: 0x0080, 0x357d: 0x0080, 0x357e: 0x0080, 0x357f: 0x0080, + // Block 0xd6, offset 0x3580 + 0x3580: 0x00c0, 0x3581: 0x00c0, 0x3582: 0x00c0, 0x3583: 0x00c0, 0x3584: 0x00c0, 0x3585: 0x00c0, + 0x3586: 0x00c0, 0x3587: 0x00c0, 0x3588: 0x00c0, 0x3589: 0x00c0, 0x358a: 0x00c0, 0x358b: 0x00c0, + 0x358c: 0x00c0, 0x358d: 0x00c0, 0x358e: 0x00c0, 0x358f: 0x00c0, 0x3590: 0x00c0, 0x3591: 0x00c0, + 0x3592: 0x00c0, 0x3593: 0x00c0, 0x3594: 0x00c0, 0x3595: 0x00c0, 0x3596: 0x0080, 0x3597: 0x0080, + 0x3598: 0x0080, 0x3599: 0x0080, 0x359a: 0x0080, 0x359b: 0x0080, + 0x359f: 0x0080, 0x35a0: 0x00c0, 0x35a1: 0x00c0, 0x35a2: 0x00c0, 0x35a3: 0x00c0, + 0x35a4: 0x00c0, 0x35a5: 0x00c0, 0x35a6: 0x00c0, 0x35a7: 0x00c0, 0x35a8: 0x00c0, 0x35a9: 0x00c0, + 0x35aa: 0x00c0, 0x35ab: 0x00c0, 0x35ac: 0x00c0, 0x35ad: 0x00c0, 0x35ae: 0x00c0, 0x35af: 0x00c0, + 0x35b0: 0x00c0, 0x35b1: 0x00c0, 0x35b2: 0x00c0, 0x35b3: 0x00c0, 0x35b4: 0x00c0, 0x35b5: 0x00c0, + 0x35b6: 0x00c0, 0x35b7: 0x00c0, 0x35b8: 0x00c0, 0x35b9: 0x00c0, + 0x35bf: 0x0080, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x00c0, 0x35c1: 0x00c0, 0x35c2: 0x00c0, 0x35c3: 0x00c0, 0x35c4: 0x00c0, 0x35c5: 0x00c0, + 0x35c6: 0x00c0, 0x35c7: 0x00c0, 0x35c8: 0x00c0, 0x35c9: 0x00c0, 0x35ca: 0x00c0, 0x35cb: 0x00c0, + 0x35cc: 0x00c0, 0x35cd: 0x00c0, 0x35ce: 0x00c0, 0x35cf: 0x00c0, 0x35d0: 0x00c0, 0x35d1: 0x00c0, + 0x35d2: 0x00c0, 0x35d3: 0x00c0, 0x35d4: 0x00c0, 0x35d5: 0x00c0, 0x35d6: 0x00c0, 0x35d7: 0x00c0, + 0x35d8: 0x00c0, 0x35d9: 0x00c0, 0x35da: 0x00c0, 0x35db: 0x00c0, 0x35dc: 0x00c0, 0x35dd: 0x00c0, + 0x35de: 0x00c0, 0x35df: 0x00c0, 0x35e0: 0x00c0, 0x35e1: 0x00c0, 0x35e2: 0x00c0, 0x35e3: 0x00c0, + 0x35e4: 0x00c0, 0x35e5: 0x00c0, 0x35e6: 0x00c0, 0x35e7: 0x00c0, 0x35e8: 0x00c0, 0x35e9: 0x00c0, + 0x35ea: 0x00c0, 0x35eb: 0x00c0, 0x35ec: 0x00c0, 0x35ed: 0x00c0, 0x35ee: 0x00c0, 0x35ef: 0x00c0, + 0x35f0: 0x00c0, 0x35f1: 0x00c0, 0x35f2: 0x00c0, 0x35f3: 0x00c0, 0x35f4: 0x00c0, 0x35f5: 0x00c0, + 0x35f6: 0x00c0, 0x35f7: 0x00c0, + 0x35fc: 0x0080, 0x35fd: 0x0080, 0x35fe: 0x00c0, 0x35ff: 0x00c0, + // Block 0xd8, offset 0x3600 + 0x3600: 0x00c0, 0x3601: 0x00c3, 0x3602: 0x00c3, 0x3603: 0x00c3, 0x3605: 0x00c3, + 0x3606: 0x00c3, + 0x360c: 0x00c3, 0x360d: 0x00c3, 0x360e: 0x00c3, 0x360f: 0x00c3, 0x3610: 0x00c0, 0x3611: 0x00c0, + 0x3612: 0x00c0, 0x3613: 0x00c0, 0x3615: 0x00c0, 0x3616: 0x00c0, 0x3617: 0x00c0, + 0x3619: 0x00c0, 0x361a: 0x00c0, 0x361b: 0x00c0, 0x361c: 0x00c0, 0x361d: 0x00c0, + 0x361e: 0x00c0, 0x361f: 0x00c0, 0x3620: 0x00c0, 0x3621: 0x00c0, 0x3622: 0x00c0, 0x3623: 0x00c0, + 0x3624: 0x00c0, 0x3625: 0x00c0, 0x3626: 0x00c0, 0x3627: 0x00c0, 0x3628: 0x00c0, 0x3629: 0x00c0, + 0x362a: 0x00c0, 0x362b: 0x00c0, 0x362c: 0x00c0, 0x362d: 0x00c0, 0x362e: 0x00c0, 0x362f: 0x00c0, + 0x3630: 0x00c0, 0x3631: 0x00c0, 0x3632: 0x00c0, 0x3633: 0x00c0, + 0x3638: 0x00c3, 0x3639: 0x00c3, 0x363a: 0x00c3, + 0x363f: 0x00c6, + // Block 0xd9, offset 0x3640 + 0x3640: 0x0080, 0x3641: 0x0080, 0x3642: 0x0080, 0x3643: 0x0080, 0x3644: 0x0080, 0x3645: 0x0080, + 0x3646: 0x0080, 0x3647: 0x0080, + 0x3650: 0x0080, 0x3651: 0x0080, + 0x3652: 0x0080, 0x3653: 0x0080, 0x3654: 0x0080, 0x3655: 0x0080, 0x3656: 0x0080, 0x3657: 0x0080, + 0x3658: 0x0080, + 0x3660: 0x00c0, 0x3661: 0x00c0, 0x3662: 0x00c0, 0x3663: 0x00c0, + 0x3664: 0x00c0, 0x3665: 0x00c0, 0x3666: 0x00c0, 0x3667: 0x00c0, 0x3668: 0x00c0, 0x3669: 0x00c0, + 0x366a: 0x00c0, 0x366b: 0x00c0, 0x366c: 0x00c0, 0x366d: 0x00c0, 0x366e: 0x00c0, 0x366f: 0x00c0, + 0x3670: 0x00c0, 0x3671: 0x00c0, 0x3672: 0x00c0, 0x3673: 0x00c0, 0x3674: 0x00c0, 0x3675: 0x00c0, + 0x3676: 0x00c0, 0x3677: 0x00c0, 0x3678: 0x00c0, 0x3679: 0x00c0, 0x367a: 0x00c0, 0x367b: 0x00c0, + 0x367c: 0x00c0, 0x367d: 0x0080, 0x367e: 0x0080, 0x367f: 0x0080, + // Block 0xda, offset 0x3680 + 0x3680: 0x00c0, 0x3681: 0x00c0, 0x3682: 0x00c0, 0x3683: 0x00c0, 0x3684: 0x00c0, 0x3685: 0x00c0, + 0x3686: 0x00c0, 0x3687: 0x00c0, 0x3688: 0x00c0, 0x3689: 0x00c0, 0x368a: 0x00c0, 0x368b: 0x00c0, + 0x368c: 0x00c0, 0x368d: 0x00c0, 0x368e: 0x00c0, 0x368f: 0x00c0, 0x3690: 0x00c0, 0x3691: 0x00c0, + 0x3692: 0x00c0, 0x3693: 0x00c0, 0x3694: 0x00c0, 0x3695: 0x00c0, 0x3696: 0x00c0, 0x3697: 0x00c0, + 0x3698: 0x00c0, 0x3699: 0x00c0, 0x369a: 0x00c0, 0x369b: 0x00c0, 0x369c: 0x00c0, 0x369d: 0x0080, + 0x369e: 0x0080, 0x369f: 0x0080, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x00c2, 0x36c1: 0x00c2, 0x36c2: 0x00c2, 0x36c3: 0x00c2, 0x36c4: 0x00c2, 0x36c5: 0x00c4, + 0x36c6: 0x00c0, 0x36c7: 0x00c4, 0x36c8: 0x0080, 0x36c9: 0x00c4, 0x36ca: 0x00c4, 0x36cb: 0x00c0, + 0x36cc: 0x00c0, 0x36cd: 0x00c1, 0x36ce: 0x00c4, 0x36cf: 0x00c4, 0x36d0: 0x00c4, 0x36d1: 0x00c4, + 0x36d2: 0x00c4, 0x36d3: 0x00c2, 0x36d4: 0x00c2, 0x36d5: 0x00c2, 0x36d6: 0x00c2, 0x36d7: 0x00c1, + 0x36d8: 0x00c2, 0x36d9: 0x00c2, 0x36da: 0x00c2, 0x36db: 0x00c2, 0x36dc: 0x00c2, 0x36dd: 0x00c4, + 0x36de: 0x00c2, 0x36df: 0x00c2, 0x36e0: 0x00c2, 0x36e1: 0x00c4, 0x36e2: 0x00c0, 0x36e3: 0x00c0, + 0x36e4: 0x00c4, 0x36e5: 0x00c3, 0x36e6: 0x00c3, + 0x36eb: 0x0082, 0x36ec: 0x0082, 0x36ed: 0x0082, 0x36ee: 0x0082, 0x36ef: 0x0084, + 0x36f0: 0x0080, 0x36f1: 0x0080, 0x36f2: 0x0080, 0x36f3: 0x0080, 0x36f4: 0x0080, 0x36f5: 0x0080, + 0x36f6: 0x0080, + // Block 0xdc, offset 0x3700 + 0x3700: 0x00c0, 0x3701: 0x00c0, 0x3702: 0x00c0, 0x3703: 0x00c0, 0x3704: 0x00c0, 0x3705: 0x00c0, + 0x3706: 0x00c0, 0x3707: 0x00c0, 0x3708: 0x00c0, 0x3709: 0x00c0, 0x370a: 0x00c0, 0x370b: 0x00c0, + 0x370c: 0x00c0, 0x370d: 0x00c0, 0x370e: 0x00c0, 0x370f: 0x00c0, 0x3710: 0x00c0, 0x3711: 0x00c0, + 0x3712: 0x00c0, 0x3713: 0x00c0, 0x3714: 0x00c0, 0x3715: 0x00c0, 0x3716: 0x00c0, 0x3717: 0x00c0, + 0x3718: 0x00c0, 0x3719: 0x00c0, 0x371a: 0x00c0, 0x371b: 0x00c0, 0x371c: 0x00c0, 0x371d: 0x00c0, + 0x371e: 0x00c0, 0x371f: 0x00c0, 0x3720: 0x00c0, 0x3721: 0x00c0, 0x3722: 0x00c0, 0x3723: 0x00c0, + 0x3724: 0x00c0, 0x3725: 0x00c0, 0x3726: 0x00c0, 0x3727: 0x00c0, 0x3728: 0x00c0, 0x3729: 0x00c0, + 0x372a: 0x00c0, 0x372b: 0x00c0, 0x372c: 0x00c0, 0x372d: 0x00c0, 0x372e: 0x00c0, 0x372f: 0x00c0, + 0x3730: 0x00c0, 0x3731: 0x00c0, 0x3732: 0x00c0, 0x3733: 0x00c0, 0x3734: 0x00c0, 0x3735: 0x00c0, + 0x3739: 0x0080, 0x373a: 0x0080, 0x373b: 0x0080, + 0x373c: 0x0080, 0x373d: 0x0080, 0x373e: 0x0080, 0x373f: 0x0080, + // Block 0xdd, offset 0x3740 + 0x3740: 0x00c0, 0x3741: 0x00c0, 0x3742: 0x00c0, 0x3743: 0x00c0, 0x3744: 0x00c0, 0x3745: 0x00c0, + 0x3746: 0x00c0, 0x3747: 0x00c0, 0x3748: 0x00c0, 0x3749: 0x00c0, 0x374a: 0x00c0, 0x374b: 0x00c0, + 0x374c: 0x00c0, 0x374d: 0x00c0, 0x374e: 0x00c0, 0x374f: 0x00c0, 0x3750: 0x00c0, 0x3751: 0x00c0, + 0x3752: 0x00c0, 0x3753: 0x00c0, 0x3754: 0x00c0, 0x3755: 0x00c0, + 0x3758: 0x0080, 0x3759: 0x0080, 0x375a: 0x0080, 0x375b: 0x0080, 0x375c: 0x0080, 0x375d: 0x0080, + 0x375e: 0x0080, 0x375f: 0x0080, 0x3760: 0x00c0, 0x3761: 0x00c0, 0x3762: 0x00c0, 0x3763: 0x00c0, + 0x3764: 0x00c0, 0x3765: 0x00c0, 0x3766: 0x00c0, 0x3767: 0x00c0, 0x3768: 0x00c0, 0x3769: 0x00c0, + 0x376a: 0x00c0, 0x376b: 0x00c0, 0x376c: 0x00c0, 0x376d: 0x00c0, 0x376e: 0x00c0, 0x376f: 0x00c0, + 0x3770: 0x00c0, 0x3771: 0x00c0, 0x3772: 0x00c0, + 0x3778: 0x0080, 0x3779: 0x0080, 0x377a: 0x0080, 0x377b: 0x0080, + 0x377c: 0x0080, 0x377d: 0x0080, 0x377e: 0x0080, 0x377f: 0x0080, + // Block 0xde, offset 0x3780 + 0x3780: 0x00c2, 0x3781: 0x00c4, 0x3782: 0x00c2, 0x3783: 0x00c4, 0x3784: 0x00c4, 0x3785: 0x00c4, + 0x3786: 0x00c2, 0x3787: 0x00c2, 0x3788: 0x00c2, 0x3789: 0x00c4, 0x378a: 0x00c2, 0x378b: 0x00c2, + 0x378c: 0x00c4, 0x378d: 0x00c2, 0x378e: 0x00c4, 0x378f: 0x00c4, 0x3790: 0x00c2, 0x3791: 0x00c4, + 0x3799: 0x0080, 0x379a: 0x0080, 0x379b: 0x0080, 0x379c: 0x0080, + 0x37a9: 0x0084, + 0x37aa: 0x0084, 0x37ab: 0x0084, 0x37ac: 0x0084, 0x37ad: 0x0082, 0x37ae: 0x0082, 0x37af: 0x0080, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x00c0, 0x37c1: 0x00c0, 0x37c2: 0x00c0, 0x37c3: 0x00c0, 0x37c4: 0x00c0, 0x37c5: 0x00c0, + 0x37c6: 0x00c0, 0x37c7: 0x00c0, 0x37c8: 0x00c0, 0x37c9: 0x00c0, 0x37ca: 0x00c0, 0x37cb: 0x00c0, + 0x37cc: 0x00c0, 0x37cd: 0x00c0, 0x37ce: 0x00c0, 0x37cf: 0x00c0, 0x37d0: 0x00c0, 0x37d1: 0x00c0, + 0x37d2: 0x00c0, 0x37d3: 0x00c0, 0x37d4: 0x00c0, 0x37d5: 0x00c0, 0x37d6: 0x00c0, 0x37d7: 0x00c0, + 0x37d8: 0x00c0, 0x37d9: 0x00c0, 0x37da: 0x00c0, 0x37db: 0x00c0, 0x37dc: 0x00c0, 0x37dd: 0x00c0, + 0x37de: 0x00c0, 0x37df: 0x00c0, 0x37e0: 0x00c0, 0x37e1: 0x00c0, 0x37e2: 0x00c0, 0x37e3: 0x00c0, + 0x37e4: 0x00c0, 0x37e5: 0x00c0, 0x37e6: 0x00c0, 0x37e7: 0x00c0, 0x37e8: 0x00c0, 0x37e9: 0x00c0, + 0x37ea: 0x00c0, 0x37eb: 0x00c0, 0x37ec: 0x00c0, 0x37ed: 0x00c0, 0x37ee: 0x00c0, 0x37ef: 0x00c0, + 0x37f0: 0x00c0, 0x37f1: 0x00c0, 0x37f2: 0x00c0, + // Block 0xe0, offset 0x3800 + 0x3800: 0x00c0, 0x3801: 0x00c0, 0x3802: 0x00c0, 0x3803: 0x00c0, 0x3804: 0x00c0, 0x3805: 0x00c0, + 0x3806: 0x00c0, 0x3807: 0x00c0, 0x3808: 0x00c0, 0x3809: 0x00c0, 0x380a: 0x00c0, 0x380b: 0x00c0, + 0x380c: 0x00c0, 0x380d: 0x00c0, 0x380e: 0x00c0, 0x380f: 0x00c0, 0x3810: 0x00c0, 0x3811: 0x00c0, + 0x3812: 0x00c0, 0x3813: 0x00c0, 0x3814: 0x00c0, 0x3815: 0x00c0, 0x3816: 0x00c0, 0x3817: 0x00c0, + 0x3818: 0x00c0, 0x3819: 0x00c0, 0x381a: 0x00c0, 0x381b: 0x00c0, 0x381c: 0x00c0, 0x381d: 0x00c0, + 0x381e: 0x00c0, 0x381f: 0x00c0, 0x3820: 0x00c0, 0x3821: 0x00c0, 0x3822: 0x00c0, 0x3823: 0x00c0, + 0x3824: 0x00c0, 0x3825: 0x00c0, 0x3826: 0x00c0, 0x3827: 0x00c0, 0x3828: 0x00c0, 0x3829: 0x00c0, + 0x382a: 0x00c0, 0x382b: 0x00c0, 0x382c: 0x00c0, 0x382d: 0x00c0, 0x382e: 0x00c0, 0x382f: 0x00c0, + 0x3830: 0x00c0, 0x3831: 0x00c0, 0x3832: 0x00c0, + 0x383a: 0x0080, 0x383b: 0x0080, + 0x383c: 0x0080, 0x383d: 0x0080, 0x383e: 0x0080, 0x383f: 0x0080, + // Block 0xe1, offset 0x3840 + 0x3860: 0x0080, 0x3861: 0x0080, 0x3862: 0x0080, 0x3863: 0x0080, + 0x3864: 0x0080, 0x3865: 0x0080, 0x3866: 0x0080, 0x3867: 0x0080, 0x3868: 0x0080, 0x3869: 0x0080, + 0x386a: 0x0080, 0x386b: 0x0080, 0x386c: 0x0080, 0x386d: 0x0080, 0x386e: 0x0080, 0x386f: 0x0080, + 0x3870: 0x0080, 0x3871: 0x0080, 0x3872: 0x0080, 0x3873: 0x0080, 0x3874: 0x0080, 0x3875: 0x0080, + 0x3876: 0x0080, 0x3877: 0x0080, 0x3878: 0x0080, 0x3879: 0x0080, 0x387a: 0x0080, 0x387b: 0x0080, + 0x387c: 0x0080, 0x387d: 0x0080, 0x387e: 0x0080, + // Block 0xe2, offset 0x3880 + 0x3880: 0x00c0, 0x3881: 0x00c3, 0x3882: 0x00c0, 0x3883: 0x00c0, 0x3884: 0x00c0, 0x3885: 0x00c0, + 0x3886: 0x00c0, 0x3887: 0x00c0, 0x3888: 0x00c0, 0x3889: 0x00c0, 0x388a: 0x00c0, 0x388b: 0x00c0, + 0x388c: 0x00c0, 0x388d: 0x00c0, 0x388e: 0x00c0, 0x388f: 0x00c0, 0x3890: 0x00c0, 0x3891: 0x00c0, + 0x3892: 0x00c0, 0x3893: 0x00c0, 0x3894: 0x00c0, 0x3895: 0x00c0, 0x3896: 0x00c0, 0x3897: 0x00c0, + 0x3898: 0x00c0, 0x3899: 0x00c0, 0x389a: 0x00c0, 0x389b: 0x00c0, 0x389c: 0x00c0, 0x389d: 0x00c0, + 0x389e: 0x00c0, 0x389f: 0x00c0, 0x38a0: 0x00c0, 0x38a1: 0x00c0, 0x38a2: 0x00c0, 0x38a3: 0x00c0, + 0x38a4: 0x00c0, 0x38a5: 0x00c0, 0x38a6: 0x00c0, 0x38a7: 0x00c0, 0x38a8: 0x00c0, 0x38a9: 0x00c0, + 0x38aa: 0x00c0, 0x38ab: 0x00c0, 0x38ac: 0x00c0, 0x38ad: 0x00c0, 0x38ae: 0x00c0, 0x38af: 0x00c0, + 0x38b0: 0x00c0, 0x38b1: 0x00c0, 0x38b2: 0x00c0, 0x38b3: 0x00c0, 0x38b4: 0x00c0, 0x38b5: 0x00c0, + 0x38b6: 0x00c0, 0x38b7: 0x00c0, 0x38b8: 0x00c3, 0x38b9: 0x00c3, 0x38ba: 0x00c3, 0x38bb: 0x00c3, + 0x38bc: 0x00c3, 0x38bd: 0x00c3, 0x38be: 0x00c3, 0x38bf: 0x00c3, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x00c3, 0x38c1: 0x00c3, 0x38c2: 0x00c3, 0x38c3: 0x00c3, 0x38c4: 0x00c3, 0x38c5: 0x00c3, + 0x38c6: 0x00c6, 0x38c7: 0x0080, 0x38c8: 0x0080, 0x38c9: 0x0080, 0x38ca: 0x0080, 0x38cb: 0x0080, + 0x38cc: 0x0080, 0x38cd: 0x0080, + 0x38d2: 0x0080, 0x38d3: 0x0080, 0x38d4: 0x0080, 0x38d5: 0x0080, 0x38d6: 0x0080, 0x38d7: 0x0080, + 0x38d8: 0x0080, 0x38d9: 0x0080, 0x38da: 0x0080, 0x38db: 0x0080, 0x38dc: 0x0080, 0x38dd: 0x0080, + 0x38de: 0x0080, 0x38df: 0x0080, 0x38e0: 0x0080, 0x38e1: 0x0080, 0x38e2: 0x0080, 0x38e3: 0x0080, + 0x38e4: 0x0080, 0x38e5: 0x0080, 0x38e6: 0x00c0, 0x38e7: 0x00c0, 0x38e8: 0x00c0, 0x38e9: 0x00c0, + 0x38ea: 0x00c0, 0x38eb: 0x00c0, 0x38ec: 0x00c0, 0x38ed: 0x00c0, 0x38ee: 0x00c0, 0x38ef: 0x00c0, + 0x38ff: 0x00c6, + // Block 0xe4, offset 0x3900 + 0x3900: 0x00c3, 0x3901: 0x00c3, 0x3902: 0x00c0, 0x3903: 0x00c0, 0x3904: 0x00c0, 0x3905: 0x00c0, + 0x3906: 0x00c0, 0x3907: 0x00c0, 0x3908: 0x00c0, 0x3909: 0x00c0, 0x390a: 0x00c0, 0x390b: 0x00c0, + 0x390c: 0x00c0, 0x390d: 0x00c0, 0x390e: 0x00c0, 0x390f: 0x00c0, 0x3910: 0x00c0, 0x3911: 0x00c0, + 0x3912: 0x00c0, 0x3913: 0x00c0, 0x3914: 0x00c0, 0x3915: 0x00c0, 0x3916: 0x00c0, 0x3917: 0x00c0, + 0x3918: 0x00c0, 0x3919: 0x00c0, 0x391a: 0x00c0, 0x391b: 0x00c0, 0x391c: 0x00c0, 0x391d: 0x00c0, + 0x391e: 0x00c0, 0x391f: 0x00c0, 0x3920: 0x00c0, 0x3921: 0x00c0, 0x3922: 0x00c0, 0x3923: 0x00c0, + 0x3924: 0x00c0, 0x3925: 0x00c0, 0x3926: 0x00c0, 0x3927: 0x00c0, 0x3928: 0x00c0, 0x3929: 0x00c0, + 0x392a: 0x00c0, 0x392b: 0x00c0, 0x392c: 0x00c0, 0x392d: 0x00c0, 0x392e: 0x00c0, 0x392f: 0x00c0, + 0x3930: 0x00c0, 0x3931: 0x00c0, 0x3932: 0x00c0, 0x3933: 0x00c3, 0x3934: 0x00c3, 0x3935: 0x00c3, + 0x3936: 0x00c3, 0x3937: 0x00c0, 0x3938: 0x00c0, 0x3939: 0x00c6, 0x393a: 0x00c3, 0x393b: 0x0080, + 0x393c: 0x0080, 0x393d: 0x0040, 0x393e: 0x0080, 0x393f: 0x0080, + // Block 0xe5, offset 0x3940 + 0x3940: 0x0080, 0x3941: 0x0080, + 0x3950: 0x00c0, 0x3951: 0x00c0, + 0x3952: 0x00c0, 0x3953: 0x00c0, 0x3954: 0x00c0, 0x3955: 0x00c0, 0x3956: 0x00c0, 0x3957: 0x00c0, + 0x3958: 0x00c0, 0x3959: 0x00c0, 0x395a: 0x00c0, 0x395b: 0x00c0, 0x395c: 0x00c0, 0x395d: 0x00c0, + 0x395e: 0x00c0, 0x395f: 0x00c0, 0x3960: 0x00c0, 0x3961: 0x00c0, 0x3962: 0x00c0, 0x3963: 0x00c0, + 0x3964: 0x00c0, 0x3965: 0x00c0, 0x3966: 0x00c0, 0x3967: 0x00c0, 0x3968: 0x00c0, + 0x3970: 0x00c0, 0x3971: 0x00c0, 0x3972: 0x00c0, 0x3973: 0x00c0, 0x3974: 0x00c0, 0x3975: 0x00c0, + 0x3976: 0x00c0, 0x3977: 0x00c0, 0x3978: 0x00c0, 0x3979: 0x00c0, + // Block 0xe6, offset 0x3980 + 0x3980: 0x00c3, 0x3981: 0x00c3, 0x3982: 0x00c3, 0x3983: 0x00c0, 0x3984: 0x00c0, 0x3985: 0x00c0, + 0x3986: 0x00c0, 0x3987: 0x00c0, 0x3988: 0x00c0, 0x3989: 0x00c0, 0x398a: 0x00c0, 0x398b: 0x00c0, + 0x398c: 0x00c0, 0x398d: 0x00c0, 0x398e: 0x00c0, 0x398f: 0x00c0, 0x3990: 0x00c0, 0x3991: 0x00c0, + 0x3992: 0x00c0, 0x3993: 0x00c0, 0x3994: 0x00c0, 0x3995: 0x00c0, 0x3996: 0x00c0, 0x3997: 0x00c0, + 0x3998: 0x00c0, 0x3999: 0x00c0, 0x399a: 0x00c0, 0x399b: 0x00c0, 0x399c: 0x00c0, 0x399d: 0x00c0, + 0x399e: 0x00c0, 0x399f: 0x00c0, 0x39a0: 0x00c0, 0x39a1: 0x00c0, 0x39a2: 0x00c0, 0x39a3: 0x00c0, + 0x39a4: 0x00c0, 0x39a5: 0x00c0, 0x39a6: 0x00c0, 0x39a7: 0x00c3, 0x39a8: 0x00c3, 0x39a9: 0x00c3, + 0x39aa: 0x00c3, 0x39ab: 0x00c3, 0x39ac: 0x00c0, 0x39ad: 0x00c3, 0x39ae: 0x00c3, 0x39af: 0x00c3, + 0x39b0: 0x00c3, 0x39b1: 0x00c3, 0x39b2: 0x00c3, 0x39b3: 0x00c6, 0x39b4: 0x00c6, + 0x39b6: 0x00c0, 0x39b7: 0x00c0, 0x39b8: 0x00c0, 0x39b9: 0x00c0, 0x39ba: 0x00c0, 0x39bb: 0x00c0, + 0x39bc: 0x00c0, 0x39bd: 0x00c0, 0x39be: 0x00c0, 0x39bf: 0x00c0, + // Block 0xe7, offset 0x39c0 + 0x39c0: 0x0080, 0x39c1: 0x0080, 0x39c2: 0x0080, 0x39c3: 0x0080, + 0x39d0: 0x00c0, 0x39d1: 0x00c0, + 0x39d2: 0x00c0, 0x39d3: 0x00c0, 0x39d4: 0x00c0, 0x39d5: 0x00c0, 0x39d6: 0x00c0, 0x39d7: 0x00c0, + 0x39d8: 0x00c0, 0x39d9: 0x00c0, 0x39da: 0x00c0, 0x39db: 0x00c0, 0x39dc: 0x00c0, 0x39dd: 0x00c0, + 0x39de: 0x00c0, 0x39df: 0x00c0, 0x39e0: 0x00c0, 0x39e1: 0x00c0, 0x39e2: 0x00c0, 0x39e3: 0x00c0, + 0x39e4: 0x00c0, 0x39e5: 0x00c0, 0x39e6: 0x00c0, 0x39e7: 0x00c0, 0x39e8: 0x00c0, 0x39e9: 0x00c0, + 0x39ea: 0x00c0, 0x39eb: 0x00c0, 0x39ec: 0x00c0, 0x39ed: 0x00c0, 0x39ee: 0x00c0, 0x39ef: 0x00c0, + 0x39f0: 0x00c0, 0x39f1: 0x00c0, 0x39f2: 0x00c0, 0x39f3: 0x00c3, 0x39f4: 0x0080, 0x39f5: 0x0080, + 0x39f6: 0x00c0, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x00c3, 0x3a01: 0x00c3, 0x3a02: 0x00c0, 0x3a03: 0x00c0, 0x3a04: 0x00c0, 0x3a05: 0x00c0, + 0x3a06: 0x00c0, 0x3a07: 0x00c0, 0x3a08: 0x00c0, 0x3a09: 0x00c0, 0x3a0a: 0x00c0, 0x3a0b: 0x00c0, + 0x3a0c: 0x00c0, 0x3a0d: 0x00c0, 0x3a0e: 0x00c0, 0x3a0f: 0x00c0, 0x3a10: 0x00c0, 0x3a11: 0x00c0, + 0x3a12: 0x00c0, 0x3a13: 0x00c0, 0x3a14: 0x00c0, 0x3a15: 0x00c0, 0x3a16: 0x00c0, 0x3a17: 0x00c0, + 0x3a18: 0x00c0, 0x3a19: 0x00c0, 0x3a1a: 0x00c0, 0x3a1b: 0x00c0, 0x3a1c: 0x00c0, 0x3a1d: 0x00c0, + 0x3a1e: 0x00c0, 0x3a1f: 0x00c0, 0x3a20: 0x00c0, 0x3a21: 0x00c0, 0x3a22: 0x00c0, 0x3a23: 0x00c0, + 0x3a24: 0x00c0, 0x3a25: 0x00c0, 0x3a26: 0x00c0, 0x3a27: 0x00c0, 0x3a28: 0x00c0, 0x3a29: 0x00c0, + 0x3a2a: 0x00c0, 0x3a2b: 0x00c0, 0x3a2c: 0x00c0, 0x3a2d: 0x00c0, 0x3a2e: 0x00c0, 0x3a2f: 0x00c0, + 0x3a30: 0x00c0, 0x3a31: 0x00c0, 0x3a32: 0x00c0, 0x3a33: 0x00c0, 0x3a34: 0x00c0, 0x3a35: 0x00c0, + 0x3a36: 0x00c3, 0x3a37: 0x00c3, 0x3a38: 0x00c3, 0x3a39: 0x00c3, 0x3a3a: 0x00c3, 0x3a3b: 0x00c3, + 0x3a3c: 0x00c3, 0x3a3d: 0x00c3, 0x3a3e: 0x00c3, 0x3a3f: 0x00c0, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x00c5, 0x3a41: 0x00c0, 0x3a42: 0x00c0, 0x3a43: 0x00c0, 0x3a44: 0x00c0, 0x3a45: 0x0080, + 0x3a46: 0x0080, 0x3a47: 0x0080, 0x3a48: 0x0080, 0x3a49: 0x0080, 0x3a4a: 0x00c3, 0x3a4b: 0x00c3, + 0x3a4c: 0x00c3, 0x3a4d: 0x0080, 0x3a50: 0x00c0, 0x3a51: 0x00c0, + 0x3a52: 0x00c0, 0x3a53: 0x00c0, 0x3a54: 0x00c0, 0x3a55: 0x00c0, 0x3a56: 0x00c0, 0x3a57: 0x00c0, + 0x3a58: 0x00c0, 0x3a59: 0x00c0, 0x3a5a: 0x00c0, 0x3a5b: 0x0080, 0x3a5c: 0x00c0, 0x3a5d: 0x0080, + 0x3a5e: 0x0080, 0x3a5f: 0x0080, 0x3a61: 0x0080, 0x3a62: 0x0080, 0x3a63: 0x0080, + 0x3a64: 0x0080, 0x3a65: 0x0080, 0x3a66: 0x0080, 0x3a67: 0x0080, 0x3a68: 0x0080, 0x3a69: 0x0080, + 0x3a6a: 0x0080, 0x3a6b: 0x0080, 0x3a6c: 0x0080, 0x3a6d: 0x0080, 0x3a6e: 0x0080, 0x3a6f: 0x0080, + 0x3a70: 0x0080, 0x3a71: 0x0080, 0x3a72: 0x0080, 0x3a73: 0x0080, 0x3a74: 0x0080, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x00c0, 0x3a81: 0x00c0, 0x3a82: 0x00c0, 0x3a83: 0x00c0, 0x3a84: 0x00c0, 0x3a85: 0x00c0, + 0x3a86: 0x00c0, 0x3a87: 0x00c0, 0x3a88: 0x00c0, 0x3a89: 0x00c0, 0x3a8a: 0x00c0, 0x3a8b: 0x00c0, + 0x3a8c: 0x00c0, 0x3a8d: 0x00c0, 0x3a8e: 0x00c0, 0x3a8f: 0x00c0, 0x3a90: 0x00c0, 0x3a91: 0x00c0, + 0x3a93: 0x00c0, 0x3a94: 0x00c0, 0x3a95: 0x00c0, 0x3a96: 0x00c0, 0x3a97: 0x00c0, + 0x3a98: 0x00c0, 0x3a99: 0x00c0, 0x3a9a: 0x00c0, 0x3a9b: 0x00c0, 0x3a9c: 0x00c0, 0x3a9d: 0x00c0, + 0x3a9e: 0x00c0, 0x3a9f: 0x00c0, 0x3aa0: 0x00c0, 0x3aa1: 0x00c0, 0x3aa2: 0x00c0, 0x3aa3: 0x00c0, + 0x3aa4: 0x00c0, 0x3aa5: 0x00c0, 0x3aa6: 0x00c0, 0x3aa7: 0x00c0, 0x3aa8: 0x00c0, 0x3aa9: 0x00c0, + 0x3aaa: 0x00c0, 0x3aab: 0x00c0, 0x3aac: 0x00c0, 0x3aad: 0x00c0, 0x3aae: 0x00c0, 0x3aaf: 0x00c3, + 0x3ab0: 0x00c3, 0x3ab1: 0x00c3, 0x3ab2: 0x00c0, 0x3ab3: 0x00c0, 0x3ab4: 0x00c3, 0x3ab5: 0x00c5, + 0x3ab6: 0x00c3, 0x3ab7: 0x00c3, 0x3ab8: 0x0080, 0x3ab9: 0x0080, 0x3aba: 0x0080, 0x3abb: 0x0080, + 0x3abc: 0x0080, 0x3abd: 0x0080, 0x3abe: 0x00c3, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x00c0, 0x3ac1: 0x00c0, 0x3ac2: 0x00c0, 0x3ac3: 0x00c0, 0x3ac4: 0x00c0, 0x3ac5: 0x00c0, + 0x3ac6: 0x00c0, 0x3ac8: 0x00c0, 0x3aca: 0x00c0, 0x3acb: 0x00c0, + 0x3acc: 0x00c0, 0x3acd: 0x00c0, 0x3acf: 0x00c0, 0x3ad0: 0x00c0, 0x3ad1: 0x00c0, + 0x3ad2: 0x00c0, 0x3ad3: 0x00c0, 0x3ad4: 0x00c0, 0x3ad5: 0x00c0, 0x3ad6: 0x00c0, 0x3ad7: 0x00c0, + 0x3ad8: 0x00c0, 0x3ad9: 0x00c0, 0x3ada: 0x00c0, 0x3adb: 0x00c0, 0x3adc: 0x00c0, 0x3add: 0x00c0, + 0x3adf: 0x00c0, 0x3ae0: 0x00c0, 0x3ae1: 0x00c0, 0x3ae2: 0x00c0, 0x3ae3: 0x00c0, + 0x3ae4: 0x00c0, 0x3ae5: 0x00c0, 0x3ae6: 0x00c0, 0x3ae7: 0x00c0, 0x3ae8: 0x00c0, 0x3ae9: 0x0080, + 0x3af0: 0x00c0, 0x3af1: 0x00c0, 0x3af2: 0x00c0, 0x3af3: 0x00c0, 0x3af4: 0x00c0, 0x3af5: 0x00c0, + 0x3af6: 0x00c0, 0x3af7: 0x00c0, 0x3af8: 0x00c0, 0x3af9: 0x00c0, 0x3afa: 0x00c0, 0x3afb: 0x00c0, + 0x3afc: 0x00c0, 0x3afd: 0x00c0, 0x3afe: 0x00c0, 0x3aff: 0x00c0, + // Block 0xec, offset 0x3b00 + 0x3b00: 0x00c0, 0x3b01: 0x00c0, 0x3b02: 0x00c0, 0x3b03: 0x00c0, 0x3b04: 0x00c0, 0x3b05: 0x00c0, + 0x3b06: 0x00c0, 0x3b07: 0x00c0, 0x3b08: 0x00c0, 0x3b09: 0x00c0, 0x3b0a: 0x00c0, 0x3b0b: 0x00c0, + 0x3b0c: 0x00c0, 0x3b0d: 0x00c0, 0x3b0e: 0x00c0, 0x3b0f: 0x00c0, 0x3b10: 0x00c0, 0x3b11: 0x00c0, + 0x3b12: 0x00c0, 0x3b13: 0x00c0, 0x3b14: 0x00c0, 0x3b15: 0x00c0, 0x3b16: 0x00c0, 0x3b17: 0x00c0, + 0x3b18: 0x00c0, 0x3b19: 0x00c0, 0x3b1a: 0x00c0, 0x3b1b: 0x00c0, 0x3b1c: 0x00c0, 0x3b1d: 0x00c0, + 0x3b1e: 0x00c0, 0x3b1f: 0x00c3, 0x3b20: 0x00c0, 0x3b21: 0x00c0, 0x3b22: 0x00c0, 0x3b23: 0x00c3, + 0x3b24: 0x00c3, 0x3b25: 0x00c3, 0x3b26: 0x00c3, 0x3b27: 0x00c3, 0x3b28: 0x00c3, 0x3b29: 0x00c3, + 0x3b2a: 0x00c6, + 0x3b30: 0x00c0, 0x3b31: 0x00c0, 0x3b32: 0x00c0, 0x3b33: 0x00c0, 0x3b34: 0x00c0, 0x3b35: 0x00c0, + 0x3b36: 0x00c0, 0x3b37: 0x00c0, 0x3b38: 0x00c0, 0x3b39: 0x00c0, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x00c3, 0x3b41: 0x00c3, 0x3b42: 0x00c0, 0x3b43: 0x00c0, 0x3b45: 0x00c0, + 0x3b46: 0x00c0, 0x3b47: 0x00c0, 0x3b48: 0x00c0, 0x3b49: 0x00c0, 0x3b4a: 0x00c0, 0x3b4b: 0x00c0, + 0x3b4c: 0x00c0, 0x3b4f: 0x00c0, 0x3b50: 0x00c0, + 0x3b53: 0x00c0, 0x3b54: 0x00c0, 0x3b55: 0x00c0, 0x3b56: 0x00c0, 0x3b57: 0x00c0, + 0x3b58: 0x00c0, 0x3b59: 0x00c0, 0x3b5a: 0x00c0, 0x3b5b: 0x00c0, 0x3b5c: 0x00c0, 0x3b5d: 0x00c0, + 0x3b5e: 0x00c0, 0x3b5f: 0x00c0, 0x3b60: 0x00c0, 0x3b61: 0x00c0, 0x3b62: 0x00c0, 0x3b63: 0x00c0, + 0x3b64: 0x00c0, 0x3b65: 0x00c0, 0x3b66: 0x00c0, 0x3b67: 0x00c0, 0x3b68: 0x00c0, + 0x3b6a: 0x00c0, 0x3b6b: 0x00c0, 0x3b6c: 0x00c0, 0x3b6d: 0x00c0, 0x3b6e: 0x00c0, 0x3b6f: 0x00c0, + 0x3b70: 0x00c0, 0x3b72: 0x00c0, 0x3b73: 0x00c0, 0x3b75: 0x00c0, + 0x3b76: 0x00c0, 0x3b77: 0x00c0, 0x3b78: 0x00c0, 0x3b79: 0x00c0, + 0x3b7c: 0x00c3, 0x3b7d: 0x00c0, 0x3b7e: 0x00c0, 0x3b7f: 0x00c0, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x00c3, 0x3b81: 0x00c0, 0x3b82: 0x00c0, 0x3b83: 0x00c0, 0x3b84: 0x00c0, + 0x3b87: 0x00c0, 0x3b88: 0x00c0, 0x3b8b: 0x00c0, + 0x3b8c: 0x00c0, 0x3b8d: 0x00c5, 0x3b90: 0x00c0, + 0x3b97: 0x00c0, + 0x3b9d: 0x00c0, + 0x3b9e: 0x00c0, 0x3b9f: 0x00c0, 0x3ba0: 0x00c0, 0x3ba1: 0x00c0, 0x3ba2: 0x00c0, 0x3ba3: 0x00c0, + 0x3ba6: 0x00c3, 0x3ba7: 0x00c3, 0x3ba8: 0x00c3, 0x3ba9: 0x00c3, + 0x3baa: 0x00c3, 0x3bab: 0x00c3, 0x3bac: 0x00c3, + 0x3bb0: 0x00c3, 0x3bb1: 0x00c3, 0x3bb2: 0x00c3, 0x3bb3: 0x00c3, 0x3bb4: 0x00c3, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0x00c0, 0x3bc1: 0x00c0, 0x3bc2: 0x00c0, 0x3bc3: 0x00c0, 0x3bc4: 0x00c0, 0x3bc5: 0x00c0, + 0x3bc6: 0x00c0, 0x3bc7: 0x00c0, 0x3bc8: 0x00c0, 0x3bc9: 0x00c0, 0x3bca: 0x00c0, 0x3bcb: 0x00c0, + 0x3bcc: 0x00c0, 0x3bcd: 0x00c0, 0x3bce: 0x00c0, 0x3bcf: 0x00c0, 0x3bd0: 0x00c0, 0x3bd1: 0x00c0, + 0x3bd2: 0x00c0, 0x3bd3: 0x00c0, 0x3bd4: 0x00c0, 0x3bd5: 0x00c0, 0x3bd6: 0x00c0, 0x3bd7: 0x00c0, + 0x3bd8: 0x00c0, 0x3bd9: 0x00c0, 0x3bda: 0x00c0, 0x3bdb: 0x00c0, 0x3bdc: 0x00c0, 0x3bdd: 0x00c0, + 0x3bde: 0x00c0, 0x3bdf: 0x00c0, 0x3be0: 0x00c0, 0x3be1: 0x00c0, 0x3be2: 0x00c0, 0x3be3: 0x00c0, + 0x3be4: 0x00c0, 0x3be5: 0x00c0, 0x3be6: 0x00c0, 0x3be7: 0x00c0, 0x3be8: 0x00c0, 0x3be9: 0x00c0, + 0x3bea: 0x00c0, 0x3beb: 0x00c0, 0x3bec: 0x00c0, 0x3bed: 0x00c0, 0x3bee: 0x00c0, 0x3bef: 0x00c0, + 0x3bf0: 0x00c0, 0x3bf1: 0x00c0, 0x3bf2: 0x00c0, 0x3bf3: 0x00c0, 0x3bf4: 0x00c0, 0x3bf5: 0x00c0, + 0x3bf6: 0x00c0, 0x3bf7: 0x00c0, 0x3bf8: 0x00c3, 0x3bf9: 0x00c3, 0x3bfa: 0x00c3, 0x3bfb: 0x00c3, + 0x3bfc: 0x00c3, 0x3bfd: 0x00c3, 0x3bfe: 0x00c3, 0x3bff: 0x00c3, + // Block 0xf0, offset 0x3c00 + 0x3c00: 0x00c0, 0x3c01: 0x00c0, 0x3c02: 0x00c6, 0x3c03: 0x00c3, 0x3c04: 0x00c3, 0x3c05: 0x00c0, + 0x3c06: 0x00c3, 0x3c07: 0x00c0, 0x3c08: 0x00c0, 0x3c09: 0x00c0, 0x3c0a: 0x00c0, 0x3c0b: 0x0080, + 0x3c0c: 0x0080, 0x3c0d: 0x0080, 0x3c0e: 0x0080, 0x3c0f: 0x0080, 0x3c10: 0x00c0, 0x3c11: 0x00c0, + 0x3c12: 0x00c0, 0x3c13: 0x00c0, 0x3c14: 0x00c0, 0x3c15: 0x00c0, 0x3c16: 0x00c0, 0x3c17: 0x00c0, + 0x3c18: 0x00c0, 0x3c19: 0x00c0, 0x3c1b: 0x0080, 0x3c1d: 0x0080, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0x00c0, 0x3c41: 0x00c0, 0x3c42: 0x00c0, 0x3c43: 0x00c0, 0x3c44: 0x00c0, 0x3c45: 0x00c0, + 0x3c46: 0x00c0, 0x3c47: 0x00c0, 0x3c48: 0x00c0, 0x3c49: 0x00c0, 0x3c4a: 0x00c0, 0x3c4b: 0x00c0, + 0x3c4c: 0x00c0, 0x3c4d: 0x00c0, 0x3c4e: 0x00c0, 0x3c4f: 0x00c0, 0x3c50: 0x00c0, 0x3c51: 0x00c0, + 0x3c52: 0x00c0, 0x3c53: 0x00c0, 0x3c54: 0x00c0, 0x3c55: 0x00c0, 0x3c56: 0x00c0, 0x3c57: 0x00c0, + 0x3c58: 0x00c0, 0x3c59: 0x00c0, 0x3c5a: 0x00c0, 0x3c5b: 0x00c0, 0x3c5c: 0x00c0, 0x3c5d: 0x00c0, + 0x3c5e: 0x00c0, 0x3c5f: 0x00c0, 0x3c60: 0x00c0, 0x3c61: 0x00c0, 0x3c62: 0x00c0, 0x3c63: 0x00c0, + 0x3c64: 0x00c0, 0x3c65: 0x00c0, 0x3c66: 0x00c0, 0x3c67: 0x00c0, 0x3c68: 0x00c0, 0x3c69: 0x00c0, + 0x3c6a: 0x00c0, 0x3c6b: 0x00c0, 0x3c6c: 0x00c0, 0x3c6d: 0x00c0, 0x3c6e: 0x00c0, 0x3c6f: 0x00c0, + 0x3c70: 0x00c0, 0x3c71: 0x00c0, 0x3c72: 0x00c0, 0x3c73: 0x00c3, 0x3c74: 0x00c3, 0x3c75: 0x00c3, + 0x3c76: 0x00c3, 0x3c77: 0x00c3, 0x3c78: 0x00c3, 0x3c79: 0x00c0, 0x3c7a: 0x00c3, 0x3c7b: 0x00c0, + 0x3c7c: 0x00c0, 0x3c7d: 0x00c0, 0x3c7e: 0x00c0, 0x3c7f: 0x00c3, + // Block 0xf2, offset 0x3c80 + 0x3c80: 0x00c3, 0x3c81: 0x00c0, 0x3c82: 0x00c6, 0x3c83: 0x00c3, 0x3c84: 0x00c0, 0x3c85: 0x00c0, + 0x3c86: 0x0080, 0x3c87: 0x00c0, + 0x3c90: 0x00c0, 0x3c91: 0x00c0, + 0x3c92: 0x00c0, 0x3c93: 0x00c0, 0x3c94: 0x00c0, 0x3c95: 0x00c0, 0x3c96: 0x00c0, 0x3c97: 0x00c0, + 0x3c98: 0x00c0, 0x3c99: 0x00c0, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0x00c0, 0x3cc1: 0x00c0, 0x3cc2: 0x00c0, 0x3cc3: 0x00c0, 0x3cc4: 0x00c0, 0x3cc5: 0x00c0, + 0x3cc6: 0x00c0, 0x3cc7: 0x00c0, 0x3cc8: 0x00c0, 0x3cc9: 0x00c0, 0x3cca: 0x00c0, 0x3ccb: 0x00c0, + 0x3ccc: 0x00c0, 0x3ccd: 0x00c0, 0x3cce: 0x00c0, 0x3ccf: 0x00c0, 0x3cd0: 0x00c0, 0x3cd1: 0x00c0, + 0x3cd2: 0x00c0, 0x3cd3: 0x00c0, 0x3cd4: 0x00c0, 0x3cd5: 0x00c0, 0x3cd6: 0x00c0, 0x3cd7: 0x00c0, + 0x3cd8: 0x00c0, 0x3cd9: 0x00c0, 0x3cda: 0x00c0, 0x3cdb: 0x00c0, 0x3cdc: 0x00c0, 0x3cdd: 0x00c0, + 0x3cde: 0x00c0, 0x3cdf: 0x00c0, 0x3ce0: 0x00c0, 0x3ce1: 0x00c0, 0x3ce2: 0x00c0, 0x3ce3: 0x00c0, + 0x3ce4: 0x00c0, 0x3ce5: 0x00c0, 0x3ce6: 0x00c0, 0x3ce7: 0x00c0, 0x3ce8: 0x00c0, 0x3ce9: 0x00c0, + 0x3cea: 0x00c0, 0x3ceb: 0x00c0, 0x3cec: 0x00c0, 0x3ced: 0x00c0, 0x3cee: 0x00c0, 0x3cef: 0x00c0, + 0x3cf0: 0x00c0, 0x3cf1: 0x00c0, 0x3cf2: 0x00c3, 0x3cf3: 0x00c3, 0x3cf4: 0x00c3, 0x3cf5: 0x00c3, + 0x3cf8: 0x00c0, 0x3cf9: 0x00c0, 0x3cfa: 0x00c0, 0x3cfb: 0x00c0, + 0x3cfc: 0x00c3, 0x3cfd: 0x00c3, 0x3cfe: 0x00c0, 0x3cff: 0x00c6, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0x00c3, 0x3d01: 0x0080, 0x3d02: 0x0080, 0x3d03: 0x0080, 0x3d04: 0x0080, 0x3d05: 0x0080, + 0x3d06: 0x0080, 0x3d07: 0x0080, 0x3d08: 0x0080, 0x3d09: 0x0080, 0x3d0a: 0x0080, 0x3d0b: 0x0080, + 0x3d0c: 0x0080, 0x3d0d: 0x0080, 0x3d0e: 0x0080, 0x3d0f: 0x0080, 0x3d10: 0x0080, 0x3d11: 0x0080, + 0x3d12: 0x0080, 0x3d13: 0x0080, 0x3d14: 0x0080, 0x3d15: 0x0080, 0x3d16: 0x0080, 0x3d17: 0x0080, + 0x3d18: 0x00c0, 0x3d19: 0x00c0, 0x3d1a: 0x00c0, 0x3d1b: 0x00c0, 0x3d1c: 0x00c3, 0x3d1d: 0x00c3, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0x00c0, 0x3d41: 0x00c0, 0x3d42: 0x00c0, 0x3d43: 0x00c0, 0x3d44: 0x00c0, 0x3d45: 0x00c0, + 0x3d46: 0x00c0, 0x3d47: 0x00c0, 0x3d48: 0x00c0, 0x3d49: 0x00c0, 0x3d4a: 0x00c0, 0x3d4b: 0x00c0, + 0x3d4c: 0x00c0, 0x3d4d: 0x00c0, 0x3d4e: 0x00c0, 0x3d4f: 0x00c0, 0x3d50: 0x00c0, 0x3d51: 0x00c0, + 0x3d52: 0x00c0, 0x3d53: 0x00c0, 0x3d54: 0x00c0, 0x3d55: 0x00c0, 0x3d56: 0x00c0, 0x3d57: 0x00c0, + 0x3d58: 0x00c0, 0x3d59: 0x00c0, 0x3d5a: 0x00c0, 0x3d5b: 0x00c0, 0x3d5c: 0x00c0, 0x3d5d: 0x00c0, + 0x3d5e: 0x00c0, 0x3d5f: 0x00c0, 0x3d60: 0x00c0, 0x3d61: 0x00c0, 0x3d62: 0x00c0, 0x3d63: 0x00c0, + 0x3d64: 0x00c0, 0x3d65: 0x00c0, 0x3d66: 0x00c0, 0x3d67: 0x00c0, 0x3d68: 0x00c0, 0x3d69: 0x00c0, + 0x3d6a: 0x00c0, 0x3d6b: 0x00c0, 0x3d6c: 0x00c0, 0x3d6d: 0x00c0, 0x3d6e: 0x00c0, 0x3d6f: 0x00c0, + 0x3d70: 0x00c0, 0x3d71: 0x00c0, 0x3d72: 0x00c0, 0x3d73: 0x00c3, 0x3d74: 0x00c3, 0x3d75: 0x00c3, + 0x3d76: 0x00c3, 0x3d77: 0x00c3, 0x3d78: 0x00c3, 0x3d79: 0x00c3, 0x3d7a: 0x00c3, 0x3d7b: 0x00c0, + 0x3d7c: 0x00c0, 0x3d7d: 0x00c3, 0x3d7e: 0x00c0, 0x3d7f: 0x00c6, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x00c3, 0x3d81: 0x0080, 0x3d82: 0x0080, 0x3d83: 0x0080, 0x3d84: 0x00c0, + 0x3d90: 0x00c0, 0x3d91: 0x00c0, + 0x3d92: 0x00c0, 0x3d93: 0x00c0, 0x3d94: 0x00c0, 0x3d95: 0x00c0, 0x3d96: 0x00c0, 0x3d97: 0x00c0, + 0x3d98: 0x00c0, 0x3d99: 0x00c0, + 0x3da0: 0x0080, 0x3da1: 0x0080, 0x3da2: 0x0080, 0x3da3: 0x0080, + 0x3da4: 0x0080, 0x3da5: 0x0080, 0x3da6: 0x0080, 0x3da7: 0x0080, 0x3da8: 0x0080, 0x3da9: 0x0080, + 0x3daa: 0x0080, 0x3dab: 0x0080, 0x3dac: 0x0080, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x00c0, 0x3dc1: 0x00c0, 0x3dc2: 0x00c0, 0x3dc3: 0x00c0, 0x3dc4: 0x00c0, 0x3dc5: 0x00c0, + 0x3dc6: 0x00c0, 0x3dc7: 0x00c0, 0x3dc8: 0x00c0, 0x3dc9: 0x00c0, 0x3dca: 0x00c0, 0x3dcb: 0x00c0, + 0x3dcc: 0x00c0, 0x3dcd: 0x00c0, 0x3dce: 0x00c0, 0x3dcf: 0x00c0, 0x3dd0: 0x00c0, 0x3dd1: 0x00c0, + 0x3dd2: 0x00c0, 0x3dd3: 0x00c0, 0x3dd4: 0x00c0, 0x3dd5: 0x00c0, 0x3dd6: 0x00c0, 0x3dd7: 0x00c0, + 0x3dd8: 0x00c0, 0x3dd9: 0x00c0, 0x3dda: 0x00c0, 0x3ddb: 0x00c0, 0x3ddc: 0x00c0, 0x3ddd: 0x00c0, + 0x3dde: 0x00c0, 0x3ddf: 0x00c0, 0x3de0: 0x00c0, 0x3de1: 0x00c0, 0x3de2: 0x00c0, 0x3de3: 0x00c0, + 0x3de4: 0x00c0, 0x3de5: 0x00c0, 0x3de6: 0x00c0, 0x3de7: 0x00c0, 0x3de8: 0x00c0, 0x3de9: 0x00c0, + 0x3dea: 0x00c0, 0x3deb: 0x00c3, 0x3dec: 0x00c0, 0x3ded: 0x00c3, 0x3dee: 0x00c0, 0x3def: 0x00c0, + 0x3df0: 0x00c3, 0x3df1: 0x00c3, 0x3df2: 0x00c3, 0x3df3: 0x00c3, 0x3df4: 0x00c3, 0x3df5: 0x00c3, + 0x3df6: 0x00c5, 0x3df7: 0x00c3, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x00c0, 0x3e01: 0x00c0, 0x3e02: 0x00c0, 0x3e03: 0x00c0, 0x3e04: 0x00c0, 0x3e05: 0x00c0, + 0x3e06: 0x00c0, 0x3e07: 0x00c0, 0x3e08: 0x00c0, 0x3e09: 0x00c0, + // Block 0xf9, offset 0x3e40 + 0x3e40: 0x00c0, 0x3e41: 0x00c0, 0x3e42: 0x00c0, 0x3e43: 0x00c0, 0x3e44: 0x00c0, 0x3e45: 0x00c0, + 0x3e46: 0x00c0, 0x3e47: 0x00c0, 0x3e48: 0x00c0, 0x3e49: 0x00c0, 0x3e4a: 0x00c0, 0x3e4b: 0x00c0, + 0x3e4c: 0x00c0, 0x3e4d: 0x00c0, 0x3e4e: 0x00c0, 0x3e4f: 0x00c0, 0x3e50: 0x00c0, 0x3e51: 0x00c0, + 0x3e52: 0x00c0, 0x3e53: 0x00c0, 0x3e54: 0x00c0, 0x3e55: 0x00c0, 0x3e56: 0x00c0, 0x3e57: 0x00c0, + 0x3e58: 0x00c0, 0x3e59: 0x00c0, 0x3e5d: 0x00c3, + 0x3e5e: 0x00c3, 0x3e5f: 0x00c3, 0x3e60: 0x00c0, 0x3e61: 0x00c0, 0x3e62: 0x00c3, 0x3e63: 0x00c3, + 0x3e64: 0x00c3, 0x3e65: 0x00c3, 0x3e66: 0x00c0, 0x3e67: 0x00c3, 0x3e68: 0x00c3, 0x3e69: 0x00c3, + 0x3e6a: 0x00c3, 0x3e6b: 0x00c6, + 0x3e70: 0x00c0, 0x3e71: 0x00c0, 0x3e72: 0x00c0, 0x3e73: 0x00c0, 0x3e74: 0x00c0, 0x3e75: 0x00c0, + 0x3e76: 0x00c0, 0x3e77: 0x00c0, 0x3e78: 0x00c0, 0x3e79: 0x00c0, 0x3e7a: 0x0080, 0x3e7b: 0x0080, + 0x3e7c: 0x0080, 0x3e7d: 0x0080, 0x3e7e: 0x0080, 0x3e7f: 0x0080, + // Block 0xfa, offset 0x3e80 + 0x3ea0: 0x00c0, 0x3ea1: 0x00c0, 0x3ea2: 0x00c0, 0x3ea3: 0x00c0, + 0x3ea4: 0x00c0, 0x3ea5: 0x00c0, 0x3ea6: 0x00c0, 0x3ea7: 0x00c0, 0x3ea8: 0x00c0, 0x3ea9: 0x00c0, + 0x3eaa: 0x00c0, 0x3eab: 0x00c0, 0x3eac: 0x00c0, 0x3ead: 0x00c0, 0x3eae: 0x00c0, 0x3eaf: 0x00c0, + 0x3eb0: 0x00c0, 0x3eb1: 0x00c0, 0x3eb2: 0x00c0, 0x3eb3: 0x00c0, 0x3eb4: 0x00c0, 0x3eb5: 0x00c0, + 0x3eb6: 0x00c0, 0x3eb7: 0x00c0, 0x3eb8: 0x00c0, 0x3eb9: 0x00c0, 0x3eba: 0x00c0, 0x3ebb: 0x00c0, + 0x3ebc: 0x00c0, 0x3ebd: 0x00c0, 0x3ebe: 0x00c0, 0x3ebf: 0x00c0, + // Block 0xfb, offset 0x3ec0 + 0x3ec0: 0x00c0, 0x3ec1: 0x00c0, 0x3ec2: 0x00c0, 0x3ec3: 0x00c0, 0x3ec4: 0x00c0, 0x3ec5: 0x00c0, + 0x3ec6: 0x00c0, 0x3ec7: 0x00c0, 0x3ec8: 0x00c0, 0x3ec9: 0x00c0, 0x3eca: 0x00c0, 0x3ecb: 0x00c0, + 0x3ecc: 0x00c0, 0x3ecd: 0x00c0, 0x3ece: 0x00c0, 0x3ecf: 0x00c0, 0x3ed0: 0x00c0, 0x3ed1: 0x00c0, + 0x3ed2: 0x00c0, 0x3ed3: 0x00c0, 0x3ed4: 0x00c0, 0x3ed5: 0x00c0, 0x3ed6: 0x00c0, 0x3ed7: 0x00c0, + 0x3ed8: 0x00c0, 0x3ed9: 0x00c0, 0x3eda: 0x00c0, 0x3edb: 0x00c0, 0x3edc: 0x00c0, 0x3edd: 0x00c0, + 0x3ede: 0x00c0, 0x3edf: 0x00c0, 0x3ee0: 0x00c0, 0x3ee1: 0x00c0, 0x3ee2: 0x00c0, 0x3ee3: 0x00c0, + 0x3ee4: 0x00c0, 0x3ee5: 0x00c0, 0x3ee6: 0x00c0, 0x3ee7: 0x00c0, 0x3ee8: 0x00c0, 0x3ee9: 0x00c0, + 0x3eea: 0x0080, 0x3eeb: 0x0080, 0x3eec: 0x0080, 0x3eed: 0x0080, 0x3eee: 0x0080, 0x3eef: 0x0080, + 0x3ef0: 0x0080, 0x3ef1: 0x0080, 0x3ef2: 0x0080, + 0x3eff: 0x00c0, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0x00c0, 0x3f01: 0x00c0, 0x3f02: 0x00c0, 0x3f03: 0x00c0, 0x3f04: 0x00c0, 0x3f05: 0x00c0, + 0x3f06: 0x00c0, 0x3f07: 0x00c0, 0x3f08: 0x00c0, 0x3f09: 0x00c0, 0x3f0a: 0x00c0, 0x3f0b: 0x00c0, + 0x3f0c: 0x00c0, 0x3f0d: 0x00c0, 0x3f0e: 0x00c0, 0x3f0f: 0x00c0, 0x3f10: 0x00c0, 0x3f11: 0x00c0, + 0x3f12: 0x00c0, 0x3f13: 0x00c0, 0x3f14: 0x00c0, 0x3f15: 0x00c0, 0x3f16: 0x00c0, 0x3f17: 0x00c0, + 0x3f18: 0x00c0, 0x3f19: 0x00c0, 0x3f1a: 0x00c0, 0x3f1b: 0x00c0, 0x3f1c: 0x00c0, 0x3f1d: 0x00c0, + 0x3f1e: 0x00c0, 0x3f1f: 0x00c0, 0x3f20: 0x00c0, 0x3f21: 0x00c0, 0x3f22: 0x00c0, 0x3f23: 0x00c0, + 0x3f24: 0x00c0, 0x3f25: 0x00c0, 0x3f26: 0x00c0, 0x3f27: 0x00c0, 0x3f28: 0x00c0, 0x3f29: 0x00c0, + 0x3f2a: 0x00c0, 0x3f2b: 0x00c0, 0x3f2c: 0x00c0, 0x3f2d: 0x00c0, 0x3f2e: 0x00c0, 0x3f2f: 0x00c0, + 0x3f30: 0x00c0, 0x3f31: 0x00c0, 0x3f32: 0x00c0, 0x3f33: 0x00c0, 0x3f34: 0x00c0, 0x3f35: 0x00c0, + 0x3f36: 0x00c0, 0x3f37: 0x00c0, 0x3f38: 0x00c0, + // Block 0xfd, offset 0x3f40 + 0x3f40: 0x00c0, 0x3f41: 0x00c0, 0x3f42: 0x00c0, 0x3f43: 0x00c0, 0x3f44: 0x00c0, 0x3f45: 0x00c0, + 0x3f46: 0x00c0, 0x3f47: 0x00c0, 0x3f48: 0x00c0, 0x3f4a: 0x00c0, 0x3f4b: 0x00c0, + 0x3f4c: 0x00c0, 0x3f4d: 0x00c0, 0x3f4e: 0x00c0, 0x3f4f: 0x00c0, 0x3f50: 0x00c0, 0x3f51: 0x00c0, + 0x3f52: 0x00c0, 0x3f53: 0x00c0, 0x3f54: 0x00c0, 0x3f55: 0x00c0, 0x3f56: 0x00c0, 0x3f57: 0x00c0, + 0x3f58: 0x00c0, 0x3f59: 0x00c0, 0x3f5a: 0x00c0, 0x3f5b: 0x00c0, 0x3f5c: 0x00c0, 0x3f5d: 0x00c0, + 0x3f5e: 0x00c0, 0x3f5f: 0x00c0, 0x3f60: 0x00c0, 0x3f61: 0x00c0, 0x3f62: 0x00c0, 0x3f63: 0x00c0, + 0x3f64: 0x00c0, 0x3f65: 0x00c0, 0x3f66: 0x00c0, 0x3f67: 0x00c0, 0x3f68: 0x00c0, 0x3f69: 0x00c0, + 0x3f6a: 0x00c0, 0x3f6b: 0x00c0, 0x3f6c: 0x00c0, 0x3f6d: 0x00c0, 0x3f6e: 0x00c0, 0x3f6f: 0x00c0, + 0x3f70: 0x00c3, 0x3f71: 0x00c3, 0x3f72: 0x00c3, 0x3f73: 0x00c3, 0x3f74: 0x00c3, 0x3f75: 0x00c3, + 0x3f76: 0x00c3, 0x3f78: 0x00c3, 0x3f79: 0x00c3, 0x3f7a: 0x00c3, 0x3f7b: 0x00c3, + 0x3f7c: 0x00c3, 0x3f7d: 0x00c3, 0x3f7e: 0x00c0, 0x3f7f: 0x00c6, + // Block 0xfe, offset 0x3f80 + 0x3f80: 0x00c0, 0x3f81: 0x0080, 0x3f82: 0x0080, 0x3f83: 0x0080, 0x3f84: 0x0080, 0x3f85: 0x0080, + 0x3f90: 0x00c0, 0x3f91: 0x00c0, + 0x3f92: 0x00c0, 0x3f93: 0x00c0, 0x3f94: 0x00c0, 0x3f95: 0x00c0, 0x3f96: 0x00c0, 0x3f97: 0x00c0, + 0x3f98: 0x00c0, 0x3f99: 0x00c0, 0x3f9a: 0x0080, 0x3f9b: 0x0080, 0x3f9c: 0x0080, 0x3f9d: 0x0080, + 0x3f9e: 0x0080, 0x3f9f: 0x0080, 0x3fa0: 0x0080, 0x3fa1: 0x0080, 0x3fa2: 0x0080, 0x3fa3: 0x0080, + 0x3fa4: 0x0080, 0x3fa5: 0x0080, 0x3fa6: 0x0080, 0x3fa7: 0x0080, 0x3fa8: 0x0080, 0x3fa9: 0x0080, + 0x3faa: 0x0080, 0x3fab: 0x0080, 0x3fac: 0x0080, + 0x3fb0: 0x0080, 0x3fb1: 0x0080, 0x3fb2: 0x00c0, 0x3fb3: 0x00c0, 0x3fb4: 0x00c0, 0x3fb5: 0x00c0, + 0x3fb6: 0x00c0, 0x3fb7: 0x00c0, 0x3fb8: 0x00c0, 0x3fb9: 0x00c0, 0x3fba: 0x00c0, 0x3fbb: 0x00c0, + 0x3fbc: 0x00c0, 0x3fbd: 0x00c0, 0x3fbe: 0x00c0, 0x3fbf: 0x00c0, + // Block 0xff, offset 0x3fc0 + 0x3fc0: 0x00c0, 0x3fc1: 0x00c0, 0x3fc2: 0x00c0, 0x3fc3: 0x00c0, 0x3fc4: 0x00c0, 0x3fc5: 0x00c0, + 0x3fc6: 0x00c0, 0x3fc7: 0x00c0, 0x3fc8: 0x00c0, 0x3fc9: 0x00c0, 0x3fca: 0x00c0, 0x3fcb: 0x00c0, + 0x3fcc: 0x00c0, 0x3fcd: 0x00c0, 0x3fce: 0x00c0, 0x3fcf: 0x00c0, + 0x3fd2: 0x00c3, 0x3fd3: 0x00c3, 0x3fd4: 0x00c3, 0x3fd5: 0x00c3, 0x3fd6: 0x00c3, 0x3fd7: 0x00c3, + 0x3fd8: 0x00c3, 0x3fd9: 0x00c3, 0x3fda: 0x00c3, 0x3fdb: 0x00c3, 0x3fdc: 0x00c3, 0x3fdd: 0x00c3, + 0x3fde: 0x00c3, 0x3fdf: 0x00c3, 0x3fe0: 0x00c3, 0x3fe1: 0x00c3, 0x3fe2: 0x00c3, 0x3fe3: 0x00c3, + 0x3fe4: 0x00c3, 0x3fe5: 0x00c3, 0x3fe6: 0x00c3, 0x3fe7: 0x00c3, 0x3fe9: 0x00c0, + 0x3fea: 0x00c3, 0x3feb: 0x00c3, 0x3fec: 0x00c3, 0x3fed: 0x00c3, 0x3fee: 0x00c3, 0x3fef: 0x00c3, + 0x3ff0: 0x00c3, 0x3ff1: 0x00c0, 0x3ff2: 0x00c3, 0x3ff3: 0x00c3, 0x3ff4: 0x00c0, 0x3ff5: 0x00c3, + 0x3ff6: 0x00c3, + // Block 0x100, offset 0x4000 + 0x4000: 0x00c0, 0x4001: 0x00c0, 0x4002: 0x00c0, 0x4003: 0x00c0, 0x4004: 0x00c0, 0x4005: 0x00c0, + 0x4006: 0x00c0, 0x4007: 0x00c0, 0x4008: 0x00c0, 0x4009: 0x00c0, 0x400a: 0x00c0, 0x400b: 0x00c0, + 0x400c: 0x00c0, 0x400d: 0x00c0, 0x400e: 0x00c0, 0x400f: 0x00c0, 0x4010: 0x00c0, 0x4011: 0x00c0, + 0x4012: 0x00c0, 0x4013: 0x00c0, 0x4014: 0x00c0, 0x4015: 0x00c0, 0x4016: 0x00c0, 0x4017: 0x00c0, + 0x4018: 0x00c0, 0x4019: 0x00c0, + // Block 0x101, offset 0x4040 + 0x4040: 0x0080, 0x4041: 0x0080, 0x4042: 0x0080, 0x4043: 0x0080, 0x4044: 0x0080, 0x4045: 0x0080, + 0x4046: 0x0080, 0x4047: 0x0080, 0x4048: 0x0080, 0x4049: 0x0080, 0x404a: 0x0080, 0x404b: 0x0080, + 0x404c: 0x0080, 0x404d: 0x0080, 0x404e: 0x0080, 0x404f: 0x0080, 0x4050: 0x0080, 0x4051: 0x0080, + 0x4052: 0x0080, 0x4053: 0x0080, 0x4054: 0x0080, 0x4055: 0x0080, 0x4056: 0x0080, 0x4057: 0x0080, + 0x4058: 0x0080, 0x4059: 0x0080, 0x405a: 0x0080, 0x405b: 0x0080, 0x405c: 0x0080, 0x405d: 0x0080, + 0x405e: 0x0080, 0x405f: 0x0080, 0x4060: 0x0080, 0x4061: 0x0080, 0x4062: 0x0080, 0x4063: 0x0080, + 0x4064: 0x0080, 0x4065: 0x0080, 0x4066: 0x0080, 0x4067: 0x0080, 0x4068: 0x0080, 0x4069: 0x0080, + 0x406a: 0x0080, 0x406b: 0x0080, 0x406c: 0x0080, 0x406d: 0x0080, 0x406e: 0x0080, + 0x4070: 0x0080, 0x4071: 0x0080, 0x4072: 0x0080, 0x4073: 0x0080, 0x4074: 0x0080, + // Block 0x102, offset 0x4080 + 0x4080: 0x00c0, 0x4081: 0x00c0, 0x4082: 0x00c0, 0x4083: 0x00c0, + // Block 0x103, offset 0x40c0 + 0x40c0: 0x00c0, 0x40c1: 0x00c0, 0x40c2: 0x00c0, 0x40c3: 0x00c0, 0x40c4: 0x00c0, 0x40c5: 0x00c0, + 0x40c6: 0x00c0, 0x40c7: 0x00c0, 0x40c8: 0x00c0, 0x40c9: 0x00c0, 0x40ca: 0x00c0, 0x40cb: 0x00c0, + 0x40cc: 0x00c0, 0x40cd: 0x00c0, 0x40ce: 0x00c0, 0x40cf: 0x00c0, 0x40d0: 0x00c0, 0x40d1: 0x00c0, + 0x40d2: 0x00c0, 0x40d3: 0x00c0, 0x40d4: 0x00c0, 0x40d5: 0x00c0, 0x40d6: 0x00c0, 0x40d7: 0x00c0, + 0x40d8: 0x00c0, 0x40d9: 0x00c0, 0x40da: 0x00c0, 0x40db: 0x00c0, 0x40dc: 0x00c0, 0x40dd: 0x00c0, + 0x40de: 0x00c0, 0x40df: 0x00c0, 0x40e0: 0x00c0, 0x40e1: 0x00c0, 0x40e2: 0x00c0, 0x40e3: 0x00c0, + 0x40e4: 0x00c0, 0x40e5: 0x00c0, 0x40e6: 0x00c0, 0x40e7: 0x00c0, 0x40e8: 0x00c0, 0x40e9: 0x00c0, + 0x40ea: 0x00c0, 0x40eb: 0x00c0, 0x40ec: 0x00c0, 0x40ed: 0x00c0, 0x40ee: 0x00c0, + // Block 0x104, offset 0x4100 + 0x4100: 0x00c0, 0x4101: 0x00c0, 0x4102: 0x00c0, 0x4103: 0x00c0, 0x4104: 0x00c0, 0x4105: 0x00c0, + 0x4106: 0x00c0, + // Block 0x105, offset 0x4140 + 0x4140: 0x00c0, 0x4141: 0x00c0, 0x4142: 0x00c0, 0x4143: 0x00c0, 0x4144: 0x00c0, 0x4145: 0x00c0, + 0x4146: 0x00c0, 0x4147: 0x00c0, 0x4148: 0x00c0, 0x4149: 0x00c0, 0x414a: 0x00c0, 0x414b: 0x00c0, + 0x414c: 0x00c0, 0x414d: 0x00c0, 0x414e: 0x00c0, 0x414f: 0x00c0, 0x4150: 0x00c0, 0x4151: 0x00c0, + 0x4152: 0x00c0, 0x4153: 0x00c0, 0x4154: 0x00c0, 0x4155: 0x00c0, 0x4156: 0x00c0, 0x4157: 0x00c0, + 0x4158: 0x00c0, 0x4159: 0x00c0, 0x415a: 0x00c0, 0x415b: 0x00c0, 0x415c: 0x00c0, 0x415d: 0x00c0, + 0x415e: 0x00c0, 0x4160: 0x00c0, 0x4161: 0x00c0, 0x4162: 0x00c0, 0x4163: 0x00c0, + 0x4164: 0x00c0, 0x4165: 0x00c0, 0x4166: 0x00c0, 0x4167: 0x00c0, 0x4168: 0x00c0, 0x4169: 0x00c0, + 0x416e: 0x0080, 0x416f: 0x0080, + // Block 0x106, offset 0x4180 + 0x4190: 0x00c0, 0x4191: 0x00c0, + 0x4192: 0x00c0, 0x4193: 0x00c0, 0x4194: 0x00c0, 0x4195: 0x00c0, 0x4196: 0x00c0, 0x4197: 0x00c0, + 0x4198: 0x00c0, 0x4199: 0x00c0, 0x419a: 0x00c0, 0x419b: 0x00c0, 0x419c: 0x00c0, 0x419d: 0x00c0, + 0x419e: 0x00c0, 0x419f: 0x00c0, 0x41a0: 0x00c0, 0x41a1: 0x00c0, 0x41a2: 0x00c0, 0x41a3: 0x00c0, + 0x41a4: 0x00c0, 0x41a5: 0x00c0, 0x41a6: 0x00c0, 0x41a7: 0x00c0, 0x41a8: 0x00c0, 0x41a9: 0x00c0, + 0x41aa: 0x00c0, 0x41ab: 0x00c0, 0x41ac: 0x00c0, 0x41ad: 0x00c0, + 0x41b0: 0x00c3, 0x41b1: 0x00c3, 0x41b2: 0x00c3, 0x41b3: 0x00c3, 0x41b4: 0x00c3, 0x41b5: 0x0080, + // Block 0x107, offset 0x41c0 + 0x41c0: 0x00c0, 0x41c1: 0x00c0, 0x41c2: 0x00c0, 0x41c3: 0x00c0, 0x41c4: 0x00c0, 0x41c5: 0x00c0, + 0x41c6: 0x00c0, 0x41c7: 0x00c0, 0x41c8: 0x00c0, 0x41c9: 0x00c0, 0x41ca: 0x00c0, 0x41cb: 0x00c0, + 0x41cc: 0x00c0, 0x41cd: 0x00c0, 0x41ce: 0x00c0, 0x41cf: 0x00c0, 0x41d0: 0x00c0, 0x41d1: 0x00c0, + 0x41d2: 0x00c0, 0x41d3: 0x00c0, 0x41d4: 0x00c0, 0x41d5: 0x00c0, 0x41d6: 0x00c0, 0x41d7: 0x00c0, + 0x41d8: 0x00c0, 0x41d9: 0x00c0, 0x41da: 0x00c0, 0x41db: 0x00c0, 0x41dc: 0x00c0, 0x41dd: 0x00c0, + 0x41de: 0x00c0, 0x41df: 0x00c0, 0x41e0: 0x00c0, 0x41e1: 0x00c0, 0x41e2: 0x00c0, 0x41e3: 0x00c0, + 0x41e4: 0x00c0, 0x41e5: 0x00c0, 0x41e6: 0x00c0, 0x41e7: 0x00c0, 0x41e8: 0x00c0, 0x41e9: 0x00c0, + 0x41ea: 0x00c0, 0x41eb: 0x00c0, 0x41ec: 0x00c0, 0x41ed: 0x00c0, 0x41ee: 0x00c0, 0x41ef: 0x00c0, + 0x41f0: 0x00c3, 0x41f1: 0x00c3, 0x41f2: 0x00c3, 0x41f3: 0x00c3, 0x41f4: 0x00c3, 0x41f5: 0x00c3, + 0x41f6: 0x00c3, 0x41f7: 0x0080, 0x41f8: 0x0080, 0x41f9: 0x0080, 0x41fa: 0x0080, 0x41fb: 0x0080, + 0x41fc: 0x0080, 0x41fd: 0x0080, 0x41fe: 0x0080, 0x41ff: 0x0080, + // Block 0x108, offset 0x4200 + 0x4200: 0x00c0, 0x4201: 0x00c0, 0x4202: 0x00c0, 0x4203: 0x00c0, 0x4204: 0x0080, 0x4205: 0x0080, + 0x4210: 0x00c0, 0x4211: 0x00c0, + 0x4212: 0x00c0, 0x4213: 0x00c0, 0x4214: 0x00c0, 0x4215: 0x00c0, 0x4216: 0x00c0, 0x4217: 0x00c0, + 0x4218: 0x00c0, 0x4219: 0x00c0, 0x421b: 0x0080, 0x421c: 0x0080, 0x421d: 0x0080, + 0x421e: 0x0080, 0x421f: 0x0080, 0x4220: 0x0080, 0x4221: 0x0080, 0x4223: 0x00c0, + 0x4224: 0x00c0, 0x4225: 0x00c0, 0x4226: 0x00c0, 0x4227: 0x00c0, 0x4228: 0x00c0, 0x4229: 0x00c0, + 0x422a: 0x00c0, 0x422b: 0x00c0, 0x422c: 0x00c0, 0x422d: 0x00c0, 0x422e: 0x00c0, 0x422f: 0x00c0, + 0x4230: 0x00c0, 0x4231: 0x00c0, 0x4232: 0x00c0, 0x4233: 0x00c0, 0x4234: 0x00c0, 0x4235: 0x00c0, + 0x4236: 0x00c0, 0x4237: 0x00c0, + 0x423d: 0x00c0, 0x423e: 0x00c0, 0x423f: 0x00c0, + // Block 0x109, offset 0x4240 + 0x4240: 0x00c0, 0x4241: 0x00c0, 0x4242: 0x00c0, 0x4243: 0x00c0, 0x4244: 0x00c0, 0x4245: 0x00c0, + 0x4246: 0x00c0, 0x4247: 0x00c0, 0x4248: 0x00c0, 0x4249: 0x00c0, 0x424a: 0x00c0, 0x424b: 0x00c0, + 0x424c: 0x00c0, 0x424d: 0x00c0, 0x424e: 0x00c0, 0x424f: 0x00c0, + // Block 0x10a, offset 0x4280 + 0x4280: 0x00c0, 0x4281: 0x00c0, 0x4282: 0x00c0, 0x4283: 0x00c0, 0x4284: 0x00c0, + 0x4290: 0x00c0, 0x4291: 0x00c0, + 0x4292: 0x00c0, 0x4293: 0x00c0, 0x4294: 0x00c0, 0x4295: 0x00c0, 0x4296: 0x00c0, 0x4297: 0x00c0, + 0x4298: 0x00c0, 0x4299: 0x00c0, 0x429a: 0x00c0, 0x429b: 0x00c0, 0x429c: 0x00c0, 0x429d: 0x00c0, + 0x429e: 0x00c0, 0x429f: 0x00c0, 0x42a0: 0x00c0, 0x42a1: 0x00c0, 0x42a2: 0x00c0, 0x42a3: 0x00c0, + 0x42a4: 0x00c0, 0x42a5: 0x00c0, 0x42a6: 0x00c0, 0x42a7: 0x00c0, 0x42a8: 0x00c0, 0x42a9: 0x00c0, + 0x42aa: 0x00c0, 0x42ab: 0x00c0, 0x42ac: 0x00c0, 0x42ad: 0x00c0, 0x42ae: 0x00c0, 0x42af: 0x00c0, + 0x42b0: 0x00c0, 0x42b1: 0x00c0, 0x42b2: 0x00c0, 0x42b3: 0x00c0, 0x42b4: 0x00c0, 0x42b5: 0x00c0, + 0x42b6: 0x00c0, 0x42b7: 0x00c0, 0x42b8: 0x00c0, 0x42b9: 0x00c0, 0x42ba: 0x00c0, 0x42bb: 0x00c0, + 0x42bc: 0x00c0, 0x42bd: 0x00c0, 0x42be: 0x00c0, + // Block 0x10b, offset 0x42c0 + 0x42cf: 0x00c3, 0x42d0: 0x00c3, 0x42d1: 0x00c3, + 0x42d2: 0x00c3, 0x42d3: 0x00c0, 0x42d4: 0x00c0, 0x42d5: 0x00c0, 0x42d6: 0x00c0, 0x42d7: 0x00c0, + 0x42d8: 0x00c0, 0x42d9: 0x00c0, 0x42da: 0x00c0, 0x42db: 0x00c0, 0x42dc: 0x00c0, 0x42dd: 0x00c0, + 0x42de: 0x00c0, 0x42df: 0x00c0, + // Block 0x10c, offset 0x4300 + 0x4320: 0x00c0, + // Block 0x10d, offset 0x4340 + 0x4340: 0x00c0, 0x4341: 0x00c0, 0x4342: 0x00c0, 0x4343: 0x00c0, 0x4344: 0x00c0, 0x4345: 0x00c0, + 0x4346: 0x00c0, 0x4347: 0x00c0, 0x4348: 0x00c0, 0x4349: 0x00c0, 0x434a: 0x00c0, 0x434b: 0x00c0, + 0x434c: 0x00c0, 0x434d: 0x00c0, 0x434e: 0x00c0, 0x434f: 0x00c0, 0x4350: 0x00c0, 0x4351: 0x00c0, + 0x4352: 0x00c0, 0x4353: 0x00c0, 0x4354: 0x00c0, 0x4355: 0x00c0, 0x4356: 0x00c0, 0x4357: 0x00c0, + 0x4358: 0x00c0, 0x4359: 0x00c0, 0x435a: 0x00c0, 0x435b: 0x00c0, 0x435c: 0x00c0, 0x435d: 0x00c0, + 0x435e: 0x00c0, 0x435f: 0x00c0, 0x4360: 0x00c0, 0x4361: 0x00c0, 0x4362: 0x00c0, 0x4363: 0x00c0, + 0x4364: 0x00c0, 0x4365: 0x00c0, 0x4366: 0x00c0, 0x4367: 0x00c0, 0x4368: 0x00c0, 0x4369: 0x00c0, + 0x436a: 0x00c0, 0x436b: 0x00c0, 0x436c: 0x00c0, + // Block 0x10e, offset 0x4380 + 0x4380: 0x00cc, 0x4381: 0x00cc, + // Block 0x10f, offset 0x43c0 + 0x43c0: 0x00c0, 0x43c1: 0x00c0, 0x43c2: 0x00c0, 0x43c3: 0x00c0, 0x43c4: 0x00c0, 0x43c5: 0x00c0, + 0x43c6: 0x00c0, 0x43c7: 0x00c0, 0x43c8: 0x00c0, 0x43c9: 0x00c0, 0x43ca: 0x00c0, 0x43cb: 0x00c0, + 0x43cc: 0x00c0, 0x43cd: 0x00c0, 0x43ce: 0x00c0, 0x43cf: 0x00c0, 0x43d0: 0x00c0, 0x43d1: 0x00c0, + 0x43d2: 0x00c0, 0x43d3: 0x00c0, 0x43d4: 0x00c0, 0x43d5: 0x00c0, 0x43d6: 0x00c0, 0x43d7: 0x00c0, + 0x43d8: 0x00c0, 0x43d9: 0x00c0, 0x43da: 0x00c0, 0x43db: 0x00c0, 0x43dc: 0x00c0, 0x43dd: 0x00c0, + 0x43de: 0x00c0, 0x43df: 0x00c0, 0x43e0: 0x00c0, 0x43e1: 0x00c0, 0x43e2: 0x00c0, 0x43e3: 0x00c0, + 0x43e4: 0x00c0, 0x43e5: 0x00c0, 0x43e6: 0x00c0, 0x43e7: 0x00c0, 0x43e8: 0x00c0, 0x43e9: 0x00c0, + 0x43ea: 0x00c0, + 0x43f0: 0x00c0, 0x43f1: 0x00c0, 0x43f2: 0x00c0, 0x43f3: 0x00c0, 0x43f4: 0x00c0, 0x43f5: 0x00c0, + 0x43f6: 0x00c0, 0x43f7: 0x00c0, 0x43f8: 0x00c0, 0x43f9: 0x00c0, 0x43fa: 0x00c0, 0x43fb: 0x00c0, + 0x43fc: 0x00c0, + // Block 0x110, offset 0x4400 + 0x4400: 0x00c0, 0x4401: 0x00c0, 0x4402: 0x00c0, 0x4403: 0x00c0, 0x4404: 0x00c0, 0x4405: 0x00c0, + 0x4406: 0x00c0, 0x4407: 0x00c0, 0x4408: 0x00c0, + 0x4410: 0x00c0, 0x4411: 0x00c0, + 0x4412: 0x00c0, 0x4413: 0x00c0, 0x4414: 0x00c0, 0x4415: 0x00c0, 0x4416: 0x00c0, 0x4417: 0x00c0, + 0x4418: 0x00c0, 0x4419: 0x00c0, 0x441c: 0x0080, 0x441d: 0x00c3, + 0x441e: 0x00c3, 0x441f: 0x0080, 0x4420: 0x0040, 0x4421: 0x0040, 0x4422: 0x0040, 0x4423: 0x0040, + // Block 0x111, offset 0x4440 + 0x4440: 0x0080, 0x4441: 0x0080, 0x4442: 0x0080, 0x4443: 0x0080, 0x4444: 0x0080, 0x4445: 0x0080, + 0x4446: 0x0080, 0x4447: 0x0080, 0x4448: 0x0080, 0x4449: 0x0080, 0x444a: 0x0080, 0x444b: 0x0080, + 0x444c: 0x0080, 0x444d: 0x0080, 0x444e: 0x0080, 0x444f: 0x0080, 0x4450: 0x0080, 0x4451: 0x0080, + 0x4452: 0x0080, 0x4453: 0x0080, 0x4454: 0x0080, 0x4455: 0x0080, 0x4456: 0x0080, 0x4457: 0x0080, + 0x4458: 0x0080, 0x4459: 0x0080, 0x445a: 0x0080, 0x445b: 0x0080, 0x445c: 0x0080, 0x445d: 0x0080, + 0x445e: 0x0080, 0x445f: 0x0080, 0x4460: 0x0080, 0x4461: 0x0080, 0x4462: 0x0080, 0x4463: 0x0080, + 0x4464: 0x0080, 0x4465: 0x0080, 0x4466: 0x0080, 0x4467: 0x0080, 0x4468: 0x0080, 0x4469: 0x0080, + 0x446a: 0x0080, 0x446b: 0x0080, 0x446c: 0x0080, 0x446d: 0x0080, 0x446e: 0x0080, 0x446f: 0x0080, + 0x4470: 0x0080, 0x4471: 0x0080, 0x4472: 0x0080, 0x4473: 0x0080, 0x4474: 0x0080, 0x4475: 0x0080, + // Block 0x112, offset 0x4480 + 0x4480: 0x0080, 0x4481: 0x0080, 0x4482: 0x0080, 0x4483: 0x0080, 0x4484: 0x0080, 0x4485: 0x0080, + 0x4486: 0x0080, 0x4487: 0x0080, 0x4488: 0x0080, 0x4489: 0x0080, 0x448a: 0x0080, 0x448b: 0x0080, + 0x448c: 0x0080, 0x448d: 0x0080, 0x448e: 0x0080, 0x448f: 0x0080, 0x4490: 0x0080, 0x4491: 0x0080, + 0x4492: 0x0080, 0x4493: 0x0080, 0x4494: 0x0080, 0x4495: 0x0080, 0x4496: 0x0080, 0x4497: 0x0080, + 0x4498: 0x0080, 0x4499: 0x0080, 0x449a: 0x0080, 0x449b: 0x0080, 0x449c: 0x0080, 0x449d: 0x0080, + 0x449e: 0x0080, 0x449f: 0x0080, 0x44a0: 0x0080, 0x44a1: 0x0080, 0x44a2: 0x0080, 0x44a3: 0x0080, + 0x44a4: 0x0080, 0x44a5: 0x0080, 0x44a6: 0x0080, 0x44a9: 0x0080, + 0x44aa: 0x0080, 0x44ab: 0x0080, 0x44ac: 0x0080, 0x44ad: 0x0080, 0x44ae: 0x0080, 0x44af: 0x0080, + 0x44b0: 0x0080, 0x44b1: 0x0080, 0x44b2: 0x0080, 0x44b3: 0x0080, 0x44b4: 0x0080, 0x44b5: 0x0080, + 0x44b6: 0x0080, 0x44b7: 0x0080, 0x44b8: 0x0080, 0x44b9: 0x0080, 0x44ba: 0x0080, 0x44bb: 0x0080, + 0x44bc: 0x0080, 0x44bd: 0x0080, 0x44be: 0x0080, 0x44bf: 0x0080, + // Block 0x113, offset 0x44c0 + 0x44c0: 0x0080, 0x44c1: 0x0080, 0x44c2: 0x0080, 0x44c3: 0x0080, 0x44c4: 0x0080, 0x44c5: 0x0080, + 0x44c6: 0x0080, 0x44c7: 0x0080, 0x44c8: 0x0080, 0x44c9: 0x0080, 0x44ca: 0x0080, 0x44cb: 0x0080, + 0x44cc: 0x0080, 0x44cd: 0x0080, 0x44ce: 0x0080, 0x44cf: 0x0080, 0x44d0: 0x0080, 0x44d1: 0x0080, + 0x44d2: 0x0080, 0x44d3: 0x0080, 0x44d4: 0x0080, 0x44d5: 0x0080, 0x44d6: 0x0080, 0x44d7: 0x0080, + 0x44d8: 0x0080, 0x44d9: 0x0080, 0x44da: 0x0080, 0x44db: 0x0080, 0x44dc: 0x0080, 0x44dd: 0x0080, + 0x44de: 0x0080, 0x44df: 0x0080, 0x44e0: 0x0080, 0x44e1: 0x0080, 0x44e2: 0x0080, 0x44e3: 0x0080, + 0x44e4: 0x0080, 0x44e5: 0x00c0, 0x44e6: 0x00c0, 0x44e7: 0x00c3, 0x44e8: 0x00c3, 0x44e9: 0x00c3, + 0x44ea: 0x0080, 0x44eb: 0x0080, 0x44ec: 0x0080, 0x44ed: 0x00c0, 0x44ee: 0x00c0, 0x44ef: 0x00c0, + 0x44f0: 0x00c0, 0x44f1: 0x00c0, 0x44f2: 0x00c0, 0x44f3: 0x0040, 0x44f4: 0x0040, 0x44f5: 0x0040, + 0x44f6: 0x0040, 0x44f7: 0x0040, 0x44f8: 0x0040, 0x44f9: 0x0040, 0x44fa: 0x0040, 0x44fb: 0x00c3, + 0x44fc: 0x00c3, 0x44fd: 0x00c3, 0x44fe: 0x00c3, 0x44ff: 0x00c3, + // Block 0x114, offset 0x4500 + 0x4500: 0x00c3, 0x4501: 0x00c3, 0x4502: 0x00c3, 0x4503: 0x0080, 0x4504: 0x0080, 0x4505: 0x00c3, + 0x4506: 0x00c3, 0x4507: 0x00c3, 0x4508: 0x00c3, 0x4509: 0x00c3, 0x450a: 0x00c3, 0x450b: 0x00c3, + 0x450c: 0x0080, 0x450d: 0x0080, 0x450e: 0x0080, 0x450f: 0x0080, 0x4510: 0x0080, 0x4511: 0x0080, + 0x4512: 0x0080, 0x4513: 0x0080, 0x4514: 0x0080, 0x4515: 0x0080, 0x4516: 0x0080, 0x4517: 0x0080, + 0x4518: 0x0080, 0x4519: 0x0080, 0x451a: 0x0080, 0x451b: 0x0080, 0x451c: 0x0080, 0x451d: 0x0080, + 0x451e: 0x0080, 0x451f: 0x0080, 0x4520: 0x0080, 0x4521: 0x0080, 0x4522: 0x0080, 0x4523: 0x0080, + 0x4524: 0x0080, 0x4525: 0x0080, 0x4526: 0x0080, 0x4527: 0x0080, 0x4528: 0x0080, 0x4529: 0x0080, + 0x452a: 0x00c3, 0x452b: 0x00c3, 0x452c: 0x00c3, 0x452d: 0x00c3, 0x452e: 0x0080, 0x452f: 0x0080, + 0x4530: 0x0080, 0x4531: 0x0080, 0x4532: 0x0080, 0x4533: 0x0080, 0x4534: 0x0080, 0x4535: 0x0080, + 0x4536: 0x0080, 0x4537: 0x0080, 0x4538: 0x0080, 0x4539: 0x0080, 0x453a: 0x0080, 0x453b: 0x0080, + 0x453c: 0x0080, 0x453d: 0x0080, 0x453e: 0x0080, 0x453f: 0x0080, + // Block 0x115, offset 0x4540 + 0x4540: 0x0080, 0x4541: 0x0080, 0x4542: 0x0080, 0x4543: 0x0080, 0x4544: 0x0080, 0x4545: 0x0080, + 0x4546: 0x0080, 0x4547: 0x0080, 0x4548: 0x0080, 0x4549: 0x0080, 0x454a: 0x0080, 0x454b: 0x0080, + 0x454c: 0x0080, 0x454d: 0x0080, 0x454e: 0x0080, 0x454f: 0x0080, 0x4550: 0x0080, 0x4551: 0x0080, + 0x4552: 0x0080, 0x4553: 0x0080, 0x4554: 0x0080, 0x4555: 0x0080, 0x4556: 0x0080, 0x4557: 0x0080, + 0x4558: 0x0080, 0x4559: 0x0080, 0x455a: 0x0080, 0x455b: 0x0080, 0x455c: 0x0080, 0x455d: 0x0080, + 0x455e: 0x0080, 0x455f: 0x0080, 0x4560: 0x0080, 0x4561: 0x0080, 0x4562: 0x0080, 0x4563: 0x0080, + 0x4564: 0x0080, 0x4565: 0x0080, 0x4566: 0x0080, 0x4567: 0x0080, 0x4568: 0x0080, + // Block 0x116, offset 0x4580 + 0x4580: 0x0088, 0x4581: 0x0088, 0x4582: 0x00c9, 0x4583: 0x00c9, 0x4584: 0x00c9, 0x4585: 0x0088, + // Block 0x117, offset 0x45c0 + 0x45c0: 0x0080, 0x45c1: 0x0080, 0x45c2: 0x0080, 0x45c3: 0x0080, 0x45c4: 0x0080, 0x45c5: 0x0080, + 0x45c6: 0x0080, 0x45c7: 0x0080, 0x45c8: 0x0080, 0x45c9: 0x0080, 0x45ca: 0x0080, 0x45cb: 0x0080, + 0x45cc: 0x0080, 0x45cd: 0x0080, 0x45ce: 0x0080, 0x45cf: 0x0080, 0x45d0: 0x0080, 0x45d1: 0x0080, + 0x45d2: 0x0080, 0x45d3: 0x0080, 0x45d4: 0x0080, 0x45d5: 0x0080, 0x45d6: 0x0080, + 0x45e0: 0x0080, 0x45e1: 0x0080, 0x45e2: 0x0080, 0x45e3: 0x0080, + 0x45e4: 0x0080, 0x45e5: 0x0080, 0x45e6: 0x0080, 0x45e7: 0x0080, 0x45e8: 0x0080, 0x45e9: 0x0080, + 0x45ea: 0x0080, 0x45eb: 0x0080, 0x45ec: 0x0080, 0x45ed: 0x0080, 0x45ee: 0x0080, 0x45ef: 0x0080, + 0x45f0: 0x0080, 0x45f1: 0x0080, + // Block 0x118, offset 0x4600 + 0x4600: 0x0080, 0x4601: 0x0080, 0x4602: 0x0080, 0x4603: 0x0080, 0x4604: 0x0080, 0x4605: 0x0080, + 0x4606: 0x0080, 0x4607: 0x0080, 0x4608: 0x0080, 0x4609: 0x0080, 0x460a: 0x0080, 0x460b: 0x0080, + 0x460c: 0x0080, 0x460d: 0x0080, 0x460e: 0x0080, 0x460f: 0x0080, 0x4610: 0x0080, 0x4611: 0x0080, + 0x4612: 0x0080, 0x4613: 0x0080, 0x4614: 0x0080, 0x4616: 0x0080, 0x4617: 0x0080, + 0x4618: 0x0080, 0x4619: 0x0080, 0x461a: 0x0080, 0x461b: 0x0080, 0x461c: 0x0080, 0x461d: 0x0080, + 0x461e: 0x0080, 0x461f: 0x0080, 0x4620: 0x0080, 0x4621: 0x0080, 0x4622: 0x0080, 0x4623: 0x0080, + 0x4624: 0x0080, 0x4625: 0x0080, 0x4626: 0x0080, 0x4627: 0x0080, 0x4628: 0x0080, 0x4629: 0x0080, + 0x462a: 0x0080, 0x462b: 0x0080, 0x462c: 0x0080, 0x462d: 0x0080, 0x462e: 0x0080, 0x462f: 0x0080, + 0x4630: 0x0080, 0x4631: 0x0080, 0x4632: 0x0080, 0x4633: 0x0080, 0x4634: 0x0080, 0x4635: 0x0080, + 0x4636: 0x0080, 0x4637: 0x0080, 0x4638: 0x0080, 0x4639: 0x0080, 0x463a: 0x0080, 0x463b: 0x0080, + 0x463c: 0x0080, 0x463d: 0x0080, 0x463e: 0x0080, 0x463f: 0x0080, + // Block 0x119, offset 0x4640 + 0x4640: 0x0080, 0x4641: 0x0080, 0x4642: 0x0080, 0x4643: 0x0080, 0x4644: 0x0080, 0x4645: 0x0080, + 0x4646: 0x0080, 0x4647: 0x0080, 0x4648: 0x0080, 0x4649: 0x0080, 0x464a: 0x0080, 0x464b: 0x0080, + 0x464c: 0x0080, 0x464d: 0x0080, 0x464e: 0x0080, 0x464f: 0x0080, 0x4650: 0x0080, 0x4651: 0x0080, + 0x4652: 0x0080, 0x4653: 0x0080, 0x4654: 0x0080, 0x4655: 0x0080, 0x4656: 0x0080, 0x4657: 0x0080, + 0x4658: 0x0080, 0x4659: 0x0080, 0x465a: 0x0080, 0x465b: 0x0080, 0x465c: 0x0080, + 0x465e: 0x0080, 0x465f: 0x0080, 0x4662: 0x0080, + 0x4665: 0x0080, 0x4666: 0x0080, 0x4669: 0x0080, + 0x466a: 0x0080, 0x466b: 0x0080, 0x466c: 0x0080, 0x466e: 0x0080, 0x466f: 0x0080, + 0x4670: 0x0080, 0x4671: 0x0080, 0x4672: 0x0080, 0x4673: 0x0080, 0x4674: 0x0080, 0x4675: 0x0080, + 0x4676: 0x0080, 0x4677: 0x0080, 0x4678: 0x0080, 0x4679: 0x0080, 0x467b: 0x0080, + 0x467d: 0x0080, 0x467e: 0x0080, 0x467f: 0x0080, + // Block 0x11a, offset 0x4680 + 0x4680: 0x0080, 0x4681: 0x0080, 0x4682: 0x0080, 0x4683: 0x0080, 0x4685: 0x0080, + 0x4686: 0x0080, 0x4687: 0x0080, 0x4688: 0x0080, 0x4689: 0x0080, 0x468a: 0x0080, 0x468b: 0x0080, + 0x468c: 0x0080, 0x468d: 0x0080, 0x468e: 0x0080, 0x468f: 0x0080, 0x4690: 0x0080, 0x4691: 0x0080, + 0x4692: 0x0080, 0x4693: 0x0080, 0x4694: 0x0080, 0x4695: 0x0080, 0x4696: 0x0080, 0x4697: 0x0080, + 0x4698: 0x0080, 0x4699: 0x0080, 0x469a: 0x0080, 0x469b: 0x0080, 0x469c: 0x0080, 0x469d: 0x0080, + 0x469e: 0x0080, 0x469f: 0x0080, 0x46a0: 0x0080, 0x46a1: 0x0080, 0x46a2: 0x0080, 0x46a3: 0x0080, + 0x46a4: 0x0080, 0x46a5: 0x0080, 0x46a6: 0x0080, 0x46a7: 0x0080, 0x46a8: 0x0080, 0x46a9: 0x0080, + 0x46aa: 0x0080, 0x46ab: 0x0080, 0x46ac: 0x0080, 0x46ad: 0x0080, 0x46ae: 0x0080, 0x46af: 0x0080, + 0x46b0: 0x0080, 0x46b1: 0x0080, 0x46b2: 0x0080, 0x46b3: 0x0080, 0x46b4: 0x0080, 0x46b5: 0x0080, + 0x46b6: 0x0080, 0x46b7: 0x0080, 0x46b8: 0x0080, 0x46b9: 0x0080, 0x46ba: 0x0080, 0x46bb: 0x0080, + 0x46bc: 0x0080, 0x46bd: 0x0080, 0x46be: 0x0080, 0x46bf: 0x0080, + // Block 0x11b, offset 0x46c0 + 0x46c0: 0x0080, 0x46c1: 0x0080, 0x46c2: 0x0080, 0x46c3: 0x0080, 0x46c4: 0x0080, 0x46c5: 0x0080, + 0x46c7: 0x0080, 0x46c8: 0x0080, 0x46c9: 0x0080, 0x46ca: 0x0080, + 0x46cd: 0x0080, 0x46ce: 0x0080, 0x46cf: 0x0080, 0x46d0: 0x0080, 0x46d1: 0x0080, + 0x46d2: 0x0080, 0x46d3: 0x0080, 0x46d4: 0x0080, 0x46d6: 0x0080, 0x46d7: 0x0080, + 0x46d8: 0x0080, 0x46d9: 0x0080, 0x46da: 0x0080, 0x46db: 0x0080, 0x46dc: 0x0080, + 0x46de: 0x0080, 0x46df: 0x0080, 0x46e0: 0x0080, 0x46e1: 0x0080, 0x46e2: 0x0080, 0x46e3: 0x0080, + 0x46e4: 0x0080, 0x46e5: 0x0080, 0x46e6: 0x0080, 0x46e7: 0x0080, 0x46e8: 0x0080, 0x46e9: 0x0080, + 0x46ea: 0x0080, 0x46eb: 0x0080, 0x46ec: 0x0080, 0x46ed: 0x0080, 0x46ee: 0x0080, 0x46ef: 0x0080, + 0x46f0: 0x0080, 0x46f1: 0x0080, 0x46f2: 0x0080, 0x46f3: 0x0080, 0x46f4: 0x0080, 0x46f5: 0x0080, + 0x46f6: 0x0080, 0x46f7: 0x0080, 0x46f8: 0x0080, 0x46f9: 0x0080, 0x46fb: 0x0080, + 0x46fc: 0x0080, 0x46fd: 0x0080, 0x46fe: 0x0080, + // Block 0x11c, offset 0x4700 + 0x4700: 0x0080, 0x4701: 0x0080, 0x4702: 0x0080, 0x4703: 0x0080, 0x4704: 0x0080, + 0x4706: 0x0080, 0x470a: 0x0080, 0x470b: 0x0080, + 0x470c: 0x0080, 0x470d: 0x0080, 0x470e: 0x0080, 0x470f: 0x0080, 0x4710: 0x0080, + 0x4712: 0x0080, 0x4713: 0x0080, 0x4714: 0x0080, 0x4715: 0x0080, 0x4716: 0x0080, 0x4717: 0x0080, + 0x4718: 0x0080, 0x4719: 0x0080, 0x471a: 0x0080, 0x471b: 0x0080, 0x471c: 0x0080, 0x471d: 0x0080, + 0x471e: 0x0080, 0x471f: 0x0080, 0x4720: 0x0080, 0x4721: 0x0080, 0x4722: 0x0080, 0x4723: 0x0080, + 0x4724: 0x0080, 0x4725: 0x0080, 0x4726: 0x0080, 0x4727: 0x0080, 0x4728: 0x0080, 0x4729: 0x0080, + 0x472a: 0x0080, 0x472b: 0x0080, 0x472c: 0x0080, 0x472d: 0x0080, 0x472e: 0x0080, 0x472f: 0x0080, + 0x4730: 0x0080, 0x4731: 0x0080, 0x4732: 0x0080, 0x4733: 0x0080, 0x4734: 0x0080, 0x4735: 0x0080, + 0x4736: 0x0080, 0x4737: 0x0080, 0x4738: 0x0080, 0x4739: 0x0080, 0x473a: 0x0080, 0x473b: 0x0080, + 0x473c: 0x0080, 0x473d: 0x0080, 0x473e: 0x0080, 0x473f: 0x0080, + // Block 0x11d, offset 0x4740 + 0x4740: 0x0080, 0x4741: 0x0080, 0x4742: 0x0080, 0x4743: 0x0080, 0x4744: 0x0080, 0x4745: 0x0080, + 0x4746: 0x0080, 0x4747: 0x0080, 0x4748: 0x0080, 0x4749: 0x0080, 0x474a: 0x0080, 0x474b: 0x0080, + 0x474c: 0x0080, 0x474d: 0x0080, 0x474e: 0x0080, 0x474f: 0x0080, 0x4750: 0x0080, 0x4751: 0x0080, + 0x4752: 0x0080, 0x4753: 0x0080, 0x4754: 0x0080, 0x4755: 0x0080, 0x4756: 0x0080, 0x4757: 0x0080, + 0x4758: 0x0080, 0x4759: 0x0080, 0x475a: 0x0080, 0x475b: 0x0080, 0x475c: 0x0080, 0x475d: 0x0080, + 0x475e: 0x0080, 0x475f: 0x0080, 0x4760: 0x0080, 0x4761: 0x0080, 0x4762: 0x0080, 0x4763: 0x0080, + 0x4764: 0x0080, 0x4765: 0x0080, 0x4768: 0x0080, 0x4769: 0x0080, + 0x476a: 0x0080, 0x476b: 0x0080, 0x476c: 0x0080, 0x476d: 0x0080, 0x476e: 0x0080, 0x476f: 0x0080, + 0x4770: 0x0080, 0x4771: 0x0080, 0x4772: 0x0080, 0x4773: 0x0080, 0x4774: 0x0080, 0x4775: 0x0080, + 0x4776: 0x0080, 0x4777: 0x0080, 0x4778: 0x0080, 0x4779: 0x0080, 0x477a: 0x0080, 0x477b: 0x0080, + 0x477c: 0x0080, 0x477d: 0x0080, 0x477e: 0x0080, 0x477f: 0x0080, + // Block 0x11e, offset 0x4780 + 0x4780: 0x0080, 0x4781: 0x0080, 0x4782: 0x0080, 0x4783: 0x0080, 0x4784: 0x0080, 0x4785: 0x0080, + 0x4786: 0x0080, 0x4787: 0x0080, 0x4788: 0x0080, 0x4789: 0x0080, 0x478a: 0x0080, 0x478b: 0x0080, + 0x478e: 0x0080, 0x478f: 0x0080, 0x4790: 0x0080, 0x4791: 0x0080, + 0x4792: 0x0080, 0x4793: 0x0080, 0x4794: 0x0080, 0x4795: 0x0080, 0x4796: 0x0080, 0x4797: 0x0080, + 0x4798: 0x0080, 0x4799: 0x0080, 0x479a: 0x0080, 0x479b: 0x0080, 0x479c: 0x0080, 0x479d: 0x0080, + 0x479e: 0x0080, 0x479f: 0x0080, 0x47a0: 0x0080, 0x47a1: 0x0080, 0x47a2: 0x0080, 0x47a3: 0x0080, + 0x47a4: 0x0080, 0x47a5: 0x0080, 0x47a6: 0x0080, 0x47a7: 0x0080, 0x47a8: 0x0080, 0x47a9: 0x0080, + 0x47aa: 0x0080, 0x47ab: 0x0080, 0x47ac: 0x0080, 0x47ad: 0x0080, 0x47ae: 0x0080, 0x47af: 0x0080, + 0x47b0: 0x0080, 0x47b1: 0x0080, 0x47b2: 0x0080, 0x47b3: 0x0080, 0x47b4: 0x0080, 0x47b5: 0x0080, + 0x47b6: 0x0080, 0x47b7: 0x0080, 0x47b8: 0x0080, 0x47b9: 0x0080, 0x47ba: 0x0080, 0x47bb: 0x0080, + 0x47bc: 0x0080, 0x47bd: 0x0080, 0x47be: 0x0080, 0x47bf: 0x0080, + // Block 0x11f, offset 0x47c0 + 0x47c0: 0x00c3, 0x47c1: 0x00c3, 0x47c2: 0x00c3, 0x47c3: 0x00c3, 0x47c4: 0x00c3, 0x47c5: 0x00c3, + 0x47c6: 0x00c3, 0x47c7: 0x00c3, 0x47c8: 0x00c3, 0x47c9: 0x00c3, 0x47ca: 0x00c3, 0x47cb: 0x00c3, + 0x47cc: 0x00c3, 0x47cd: 0x00c3, 0x47ce: 0x00c3, 0x47cf: 0x00c3, 0x47d0: 0x00c3, 0x47d1: 0x00c3, + 0x47d2: 0x00c3, 0x47d3: 0x00c3, 0x47d4: 0x00c3, 0x47d5: 0x00c3, 0x47d6: 0x00c3, 0x47d7: 0x00c3, + 0x47d8: 0x00c3, 0x47d9: 0x00c3, 0x47da: 0x00c3, 0x47db: 0x00c3, 0x47dc: 0x00c3, 0x47dd: 0x00c3, + 0x47de: 0x00c3, 0x47df: 0x00c3, 0x47e0: 0x00c3, 0x47e1: 0x00c3, 0x47e2: 0x00c3, 0x47e3: 0x00c3, + 0x47e4: 0x00c3, 0x47e5: 0x00c3, 0x47e6: 0x00c3, 0x47e7: 0x00c3, 0x47e8: 0x00c3, 0x47e9: 0x00c3, + 0x47ea: 0x00c3, 0x47eb: 0x00c3, 0x47ec: 0x00c3, 0x47ed: 0x00c3, 0x47ee: 0x00c3, 0x47ef: 0x00c3, + 0x47f0: 0x00c3, 0x47f1: 0x00c3, 0x47f2: 0x00c3, 0x47f3: 0x00c3, 0x47f4: 0x00c3, 0x47f5: 0x00c3, + 0x47f6: 0x00c3, 0x47f7: 0x0080, 0x47f8: 0x0080, 0x47f9: 0x0080, 0x47fa: 0x0080, 0x47fb: 0x00c3, + 0x47fc: 0x00c3, 0x47fd: 0x00c3, 0x47fe: 0x00c3, 0x47ff: 0x00c3, + // Block 0x120, offset 0x4800 + 0x4800: 0x00c3, 0x4801: 0x00c3, 0x4802: 0x00c3, 0x4803: 0x00c3, 0x4804: 0x00c3, 0x4805: 0x00c3, + 0x4806: 0x00c3, 0x4807: 0x00c3, 0x4808: 0x00c3, 0x4809: 0x00c3, 0x480a: 0x00c3, 0x480b: 0x00c3, + 0x480c: 0x00c3, 0x480d: 0x00c3, 0x480e: 0x00c3, 0x480f: 0x00c3, 0x4810: 0x00c3, 0x4811: 0x00c3, + 0x4812: 0x00c3, 0x4813: 0x00c3, 0x4814: 0x00c3, 0x4815: 0x00c3, 0x4816: 0x00c3, 0x4817: 0x00c3, + 0x4818: 0x00c3, 0x4819: 0x00c3, 0x481a: 0x00c3, 0x481b: 0x00c3, 0x481c: 0x00c3, 0x481d: 0x00c3, + 0x481e: 0x00c3, 0x481f: 0x00c3, 0x4820: 0x00c3, 0x4821: 0x00c3, 0x4822: 0x00c3, 0x4823: 0x00c3, + 0x4824: 0x00c3, 0x4825: 0x00c3, 0x4826: 0x00c3, 0x4827: 0x00c3, 0x4828: 0x00c3, 0x4829: 0x00c3, + 0x482a: 0x00c3, 0x482b: 0x00c3, 0x482c: 0x00c3, 0x482d: 0x0080, 0x482e: 0x0080, 0x482f: 0x0080, + 0x4830: 0x0080, 0x4831: 0x0080, 0x4832: 0x0080, 0x4833: 0x0080, 0x4834: 0x0080, 0x4835: 0x00c3, + 0x4836: 0x0080, 0x4837: 0x0080, 0x4838: 0x0080, 0x4839: 0x0080, 0x483a: 0x0080, 0x483b: 0x0080, + 0x483c: 0x0080, 0x483d: 0x0080, 0x483e: 0x0080, 0x483f: 0x0080, + // Block 0x121, offset 0x4840 + 0x4840: 0x0080, 0x4841: 0x0080, 0x4842: 0x0080, 0x4843: 0x0080, 0x4844: 0x00c3, 0x4845: 0x0080, + 0x4846: 0x0080, 0x4847: 0x0080, 0x4848: 0x0080, 0x4849: 0x0080, 0x484a: 0x0080, 0x484b: 0x0080, + 0x485b: 0x00c3, 0x485c: 0x00c3, 0x485d: 0x00c3, + 0x485e: 0x00c3, 0x485f: 0x00c3, 0x4861: 0x00c3, 0x4862: 0x00c3, 0x4863: 0x00c3, + 0x4864: 0x00c3, 0x4865: 0x00c3, 0x4866: 0x00c3, 0x4867: 0x00c3, 0x4868: 0x00c3, 0x4869: 0x00c3, + 0x486a: 0x00c3, 0x486b: 0x00c3, 0x486c: 0x00c3, 0x486d: 0x00c3, 0x486e: 0x00c3, 0x486f: 0x00c3, + // Block 0x122, offset 0x4880 + 0x4880: 0x00c3, 0x4881: 0x00c3, 0x4882: 0x00c3, 0x4883: 0x00c3, 0x4884: 0x00c3, 0x4885: 0x00c3, + 0x4886: 0x00c3, 0x4888: 0x00c3, 0x4889: 0x00c3, 0x488a: 0x00c3, 0x488b: 0x00c3, + 0x488c: 0x00c3, 0x488d: 0x00c3, 0x488e: 0x00c3, 0x488f: 0x00c3, 0x4890: 0x00c3, 0x4891: 0x00c3, + 0x4892: 0x00c3, 0x4893: 0x00c3, 0x4894: 0x00c3, 0x4895: 0x00c3, 0x4896: 0x00c3, 0x4897: 0x00c3, + 0x4898: 0x00c3, 0x489b: 0x00c3, 0x489c: 0x00c3, 0x489d: 0x00c3, + 0x489e: 0x00c3, 0x489f: 0x00c3, 0x48a0: 0x00c3, 0x48a1: 0x00c3, 0x48a3: 0x00c3, + 0x48a4: 0x00c3, 0x48a6: 0x00c3, 0x48a7: 0x00c3, 0x48a8: 0x00c3, 0x48a9: 0x00c3, + 0x48aa: 0x00c3, + // Block 0x123, offset 0x48c0 + 0x48c0: 0x00c0, 0x48c1: 0x00c0, 0x48c2: 0x00c0, 0x48c3: 0x00c0, 0x48c4: 0x00c0, + 0x48c7: 0x0080, 0x48c8: 0x0080, 0x48c9: 0x0080, 0x48ca: 0x0080, 0x48cb: 0x0080, + 0x48cc: 0x0080, 0x48cd: 0x0080, 0x48ce: 0x0080, 0x48cf: 0x0080, 0x48d0: 0x00c3, 0x48d1: 0x00c3, + 0x48d2: 0x00c3, 0x48d3: 0x00c3, 0x48d4: 0x00c3, 0x48d5: 0x00c3, 0x48d6: 0x00c3, + // Block 0x124, offset 0x4900 + 0x4900: 0x00c2, 0x4901: 0x00c2, 0x4902: 0x00c2, 0x4903: 0x00c2, 0x4904: 0x00c2, 0x4905: 0x00c2, + 0x4906: 0x00c2, 0x4907: 0x00c2, 0x4908: 0x00c2, 0x4909: 0x00c2, 0x490a: 0x00c2, 0x490b: 0x00c2, + 0x490c: 0x00c2, 0x490d: 0x00c2, 0x490e: 0x00c2, 0x490f: 0x00c2, 0x4910: 0x00c2, 0x4911: 0x00c2, + 0x4912: 0x00c2, 0x4913: 0x00c2, 0x4914: 0x00c2, 0x4915: 0x00c2, 0x4916: 0x00c2, 0x4917: 0x00c2, + 0x4918: 0x00c2, 0x4919: 0x00c2, 0x491a: 0x00c2, 0x491b: 0x00c2, 0x491c: 0x00c2, 0x491d: 0x00c2, + 0x491e: 0x00c2, 0x491f: 0x00c2, 0x4920: 0x00c2, 0x4921: 0x00c2, 0x4922: 0x00c2, 0x4923: 0x00c2, + 0x4924: 0x00c2, 0x4925: 0x00c2, 0x4926: 0x00c2, 0x4927: 0x00c2, 0x4928: 0x00c2, 0x4929: 0x00c2, + 0x492a: 0x00c2, 0x492b: 0x00c2, 0x492c: 0x00c2, 0x492d: 0x00c2, 0x492e: 0x00c2, 0x492f: 0x00c2, + 0x4930: 0x00c2, 0x4931: 0x00c2, 0x4932: 0x00c2, 0x4933: 0x00c2, 0x4934: 0x00c2, 0x4935: 0x00c2, + 0x4936: 0x00c2, 0x4937: 0x00c2, 0x4938: 0x00c2, 0x4939: 0x00c2, 0x493a: 0x00c2, 0x493b: 0x00c2, + 0x493c: 0x00c2, 0x493d: 0x00c2, 0x493e: 0x00c2, 0x493f: 0x00c2, + // Block 0x125, offset 0x4940 + 0x4940: 0x00c2, 0x4941: 0x00c2, 0x4942: 0x00c2, 0x4943: 0x00c2, 0x4944: 0x00c3, 0x4945: 0x00c3, + 0x4946: 0x00c3, 0x4947: 0x00c3, 0x4948: 0x00c3, 0x4949: 0x00c3, 0x494a: 0x00c3, + 0x4950: 0x00c0, 0x4951: 0x00c0, + 0x4952: 0x00c0, 0x4953: 0x00c0, 0x4954: 0x00c0, 0x4955: 0x00c0, 0x4956: 0x00c0, 0x4957: 0x00c0, + 0x4958: 0x00c0, 0x4959: 0x00c0, + 0x495e: 0x0080, 0x495f: 0x0080, + // Block 0x126, offset 0x4980 + 0x4980: 0x0080, 0x4981: 0x0080, 0x4982: 0x0080, 0x4983: 0x0080, 0x4985: 0x0080, + 0x4986: 0x0080, 0x4987: 0x0080, 0x4988: 0x0080, 0x4989: 0x0080, 0x498a: 0x0080, 0x498b: 0x0080, + 0x498c: 0x0080, 0x498d: 0x0080, 0x498e: 0x0080, 0x498f: 0x0080, 0x4990: 0x0080, 0x4991: 0x0080, + 0x4992: 0x0080, 0x4993: 0x0080, 0x4994: 0x0080, 0x4995: 0x0080, 0x4996: 0x0080, 0x4997: 0x0080, + 0x4998: 0x0080, 0x4999: 0x0080, 0x499a: 0x0080, 0x499b: 0x0080, 0x499c: 0x0080, 0x499d: 0x0080, + 0x499e: 0x0080, 0x499f: 0x0080, 0x49a1: 0x0080, 0x49a2: 0x0080, + 0x49a4: 0x0080, 0x49a7: 0x0080, 0x49a9: 0x0080, + 0x49aa: 0x0080, 0x49ab: 0x0080, 0x49ac: 0x0080, 0x49ad: 0x0080, 0x49ae: 0x0080, 0x49af: 0x0080, + 0x49b0: 0x0080, 0x49b1: 0x0080, 0x49b2: 0x0080, 0x49b4: 0x0080, 0x49b5: 0x0080, + 0x49b6: 0x0080, 0x49b7: 0x0080, 0x49b9: 0x0080, 0x49bb: 0x0080, + // Block 0x127, offset 0x49c0 + 0x49c2: 0x0080, + 0x49c7: 0x0080, 0x49c9: 0x0080, 0x49cb: 0x0080, + 0x49cd: 0x0080, 0x49ce: 0x0080, 0x49cf: 0x0080, 0x49d1: 0x0080, + 0x49d2: 0x0080, 0x49d4: 0x0080, 0x49d7: 0x0080, + 0x49d9: 0x0080, 0x49db: 0x0080, 0x49dd: 0x0080, + 0x49df: 0x0080, 0x49e1: 0x0080, 0x49e2: 0x0080, + 0x49e4: 0x0080, 0x49e7: 0x0080, 0x49e8: 0x0080, 0x49e9: 0x0080, + 0x49ea: 0x0080, 0x49ec: 0x0080, 0x49ed: 0x0080, 0x49ee: 0x0080, 0x49ef: 0x0080, + 0x49f0: 0x0080, 0x49f1: 0x0080, 0x49f2: 0x0080, 0x49f4: 0x0080, 0x49f5: 0x0080, + 0x49f6: 0x0080, 0x49f7: 0x0080, 0x49f9: 0x0080, 0x49fa: 0x0080, 0x49fb: 0x0080, + 0x49fc: 0x0080, 0x49fe: 0x0080, + // Block 0x128, offset 0x4a00 + 0x4a00: 0x0080, 0x4a01: 0x0080, 0x4a02: 0x0080, 0x4a03: 0x0080, 0x4a04: 0x0080, 0x4a05: 0x0080, + 0x4a06: 0x0080, 0x4a07: 0x0080, 0x4a08: 0x0080, 0x4a09: 0x0080, 0x4a0b: 0x0080, + 0x4a0c: 0x0080, 0x4a0d: 0x0080, 0x4a0e: 0x0080, 0x4a0f: 0x0080, 0x4a10: 0x0080, 0x4a11: 0x0080, + 0x4a12: 0x0080, 0x4a13: 0x0080, 0x4a14: 0x0080, 0x4a15: 0x0080, 0x4a16: 0x0080, 0x4a17: 0x0080, + 0x4a18: 0x0080, 0x4a19: 0x0080, 0x4a1a: 0x0080, 0x4a1b: 0x0080, + 0x4a21: 0x0080, 0x4a22: 0x0080, 0x4a23: 0x0080, + 0x4a25: 0x0080, 0x4a26: 0x0080, 0x4a27: 0x0080, 0x4a28: 0x0080, 0x4a29: 0x0080, + 0x4a2b: 0x0080, 0x4a2c: 0x0080, 0x4a2d: 0x0080, 0x4a2e: 0x0080, 0x4a2f: 0x0080, + 0x4a30: 0x0080, 0x4a31: 0x0080, 0x4a32: 0x0080, 0x4a33: 0x0080, 0x4a34: 0x0080, 0x4a35: 0x0080, + 0x4a36: 0x0080, 0x4a37: 0x0080, 0x4a38: 0x0080, 0x4a39: 0x0080, 0x4a3a: 0x0080, 0x4a3b: 0x0080, + // Block 0x129, offset 0x4a40 + 0x4a70: 0x0080, 0x4a71: 0x0080, + // Block 0x12a, offset 0x4a80 + 0x4a80: 0x0080, 0x4a81: 0x0080, 0x4a82: 0x0080, 0x4a83: 0x0080, 0x4a84: 0x0080, 0x4a85: 0x0080, + 0x4a86: 0x0080, 0x4a87: 0x0080, 0x4a88: 0x0080, 0x4a89: 0x0080, 0x4a8a: 0x0080, 0x4a8b: 0x0080, + 0x4a8c: 0x0080, 0x4a8d: 0x0080, 0x4a8e: 0x0080, 0x4a8f: 0x0080, 0x4a90: 0x0080, 0x4a91: 0x0080, + 0x4a92: 0x0080, 0x4a93: 0x0080, 0x4a94: 0x0080, 0x4a95: 0x0080, 0x4a96: 0x0080, 0x4a97: 0x0080, + 0x4a98: 0x0080, 0x4a99: 0x0080, 0x4a9a: 0x0080, 0x4a9b: 0x0080, 0x4a9c: 0x0080, 0x4a9d: 0x0080, + 0x4a9e: 0x0080, 0x4a9f: 0x0080, 0x4aa0: 0x0080, 0x4aa1: 0x0080, 0x4aa2: 0x0080, 0x4aa3: 0x0080, + 0x4aa4: 0x0080, 0x4aa5: 0x0080, 0x4aa6: 0x0080, 0x4aa7: 0x0080, 0x4aa8: 0x0080, 0x4aa9: 0x0080, + 0x4aaa: 0x0080, 0x4aab: 0x0080, + 0x4ab0: 0x0080, 0x4ab1: 0x0080, 0x4ab2: 0x0080, 0x4ab3: 0x0080, 0x4ab4: 0x0080, 0x4ab5: 0x0080, + 0x4ab6: 0x0080, 0x4ab7: 0x0080, 0x4ab8: 0x0080, 0x4ab9: 0x0080, 0x4aba: 0x0080, 0x4abb: 0x0080, + 0x4abc: 0x0080, 0x4abd: 0x0080, 0x4abe: 0x0080, 0x4abf: 0x0080, + // Block 0x12b, offset 0x4ac0 + 0x4ac0: 0x0080, 0x4ac1: 0x0080, 0x4ac2: 0x0080, 0x4ac3: 0x0080, 0x4ac4: 0x0080, 0x4ac5: 0x0080, + 0x4ac6: 0x0080, 0x4ac7: 0x0080, 0x4ac8: 0x0080, 0x4ac9: 0x0080, 0x4aca: 0x0080, 0x4acb: 0x0080, + 0x4acc: 0x0080, 0x4acd: 0x0080, 0x4ace: 0x0080, 0x4acf: 0x0080, 0x4ad0: 0x0080, 0x4ad1: 0x0080, + 0x4ad2: 0x0080, 0x4ad3: 0x0080, + 0x4ae0: 0x0080, 0x4ae1: 0x0080, 0x4ae2: 0x0080, 0x4ae3: 0x0080, + 0x4ae4: 0x0080, 0x4ae5: 0x0080, 0x4ae6: 0x0080, 0x4ae7: 0x0080, 0x4ae8: 0x0080, 0x4ae9: 0x0080, + 0x4aea: 0x0080, 0x4aeb: 0x0080, 0x4aec: 0x0080, 0x4aed: 0x0080, 0x4aee: 0x0080, + 0x4af1: 0x0080, 0x4af2: 0x0080, 0x4af3: 0x0080, 0x4af4: 0x0080, 0x4af5: 0x0080, + 0x4af6: 0x0080, 0x4af7: 0x0080, 0x4af8: 0x0080, 0x4af9: 0x0080, 0x4afa: 0x0080, 0x4afb: 0x0080, + 0x4afc: 0x0080, 0x4afd: 0x0080, 0x4afe: 0x0080, 0x4aff: 0x0080, + // Block 0x12c, offset 0x4b00 + 0x4b01: 0x0080, 0x4b02: 0x0080, 0x4b03: 0x0080, 0x4b04: 0x0080, 0x4b05: 0x0080, + 0x4b06: 0x0080, 0x4b07: 0x0080, 0x4b08: 0x0080, 0x4b09: 0x0080, 0x4b0a: 0x0080, 0x4b0b: 0x0080, + 0x4b0c: 0x0080, 0x4b0d: 0x0080, 0x4b0e: 0x0080, 0x4b0f: 0x0080, 0x4b11: 0x0080, + 0x4b12: 0x0080, 0x4b13: 0x0080, 0x4b14: 0x0080, 0x4b15: 0x0080, 0x4b16: 0x0080, 0x4b17: 0x0080, + 0x4b18: 0x0080, 0x4b19: 0x0080, 0x4b1a: 0x0080, 0x4b1b: 0x0080, 0x4b1c: 0x0080, 0x4b1d: 0x0080, + 0x4b1e: 0x0080, 0x4b1f: 0x0080, 0x4b20: 0x0080, 0x4b21: 0x0080, 0x4b22: 0x0080, 0x4b23: 0x0080, + 0x4b24: 0x0080, 0x4b25: 0x0080, 0x4b26: 0x0080, 0x4b27: 0x0080, 0x4b28: 0x0080, 0x4b29: 0x0080, + 0x4b2a: 0x0080, 0x4b2b: 0x0080, 0x4b2c: 0x0080, 0x4b2d: 0x0080, 0x4b2e: 0x0080, 0x4b2f: 0x0080, + 0x4b30: 0x0080, 0x4b31: 0x0080, 0x4b32: 0x0080, 0x4b33: 0x0080, 0x4b34: 0x0080, 0x4b35: 0x0080, + // Block 0x12d, offset 0x4b40 + 0x4b40: 0x0080, 0x4b41: 0x0080, 0x4b42: 0x0080, 0x4b43: 0x0080, 0x4b44: 0x0080, 0x4b45: 0x0080, + 0x4b46: 0x0080, 0x4b47: 0x0080, 0x4b48: 0x0080, 0x4b49: 0x0080, 0x4b4a: 0x0080, 0x4b4b: 0x0080, + 0x4b4c: 0x0080, 0x4b50: 0x0080, 0x4b51: 0x0080, + 0x4b52: 0x0080, 0x4b53: 0x0080, 0x4b54: 0x0080, 0x4b55: 0x0080, 0x4b56: 0x0080, 0x4b57: 0x0080, + 0x4b58: 0x0080, 0x4b59: 0x0080, 0x4b5a: 0x0080, 0x4b5b: 0x0080, 0x4b5c: 0x0080, 0x4b5d: 0x0080, + 0x4b5e: 0x0080, 0x4b5f: 0x0080, 0x4b60: 0x0080, 0x4b61: 0x0080, 0x4b62: 0x0080, 0x4b63: 0x0080, + 0x4b64: 0x0080, 0x4b65: 0x0080, 0x4b66: 0x0080, 0x4b67: 0x0080, 0x4b68: 0x0080, 0x4b69: 0x0080, + 0x4b6a: 0x0080, 0x4b6b: 0x0080, 0x4b6c: 0x0080, 0x4b6d: 0x0080, 0x4b6e: 0x0080, + 0x4b70: 0x0080, 0x4b71: 0x0080, 0x4b72: 0x0080, 0x4b73: 0x0080, 0x4b74: 0x0080, 0x4b75: 0x0080, + 0x4b76: 0x0080, 0x4b77: 0x0080, 0x4b78: 0x0080, 0x4b79: 0x0080, 0x4b7a: 0x0080, 0x4b7b: 0x0080, + 0x4b7c: 0x0080, 0x4b7d: 0x0080, 0x4b7e: 0x0080, 0x4b7f: 0x0080, + // Block 0x12e, offset 0x4b80 + 0x4b80: 0x0080, 0x4b81: 0x0080, 0x4b82: 0x0080, 0x4b83: 0x0080, 0x4b84: 0x0080, 0x4b85: 0x0080, + 0x4b86: 0x0080, 0x4b87: 0x0080, 0x4b88: 0x0080, 0x4b89: 0x0080, 0x4b8a: 0x0080, 0x4b8b: 0x0080, + 0x4b8c: 0x0080, 0x4b8d: 0x0080, 0x4b8e: 0x0080, 0x4b8f: 0x0080, 0x4b90: 0x0080, 0x4b91: 0x0080, + 0x4b92: 0x0080, 0x4b93: 0x0080, 0x4b94: 0x0080, 0x4b95: 0x0080, 0x4b96: 0x0080, 0x4b97: 0x0080, + 0x4b98: 0x0080, 0x4b99: 0x0080, 0x4b9a: 0x0080, 0x4b9b: 0x0080, 0x4b9c: 0x0080, 0x4b9d: 0x0080, + 0x4b9e: 0x0080, 0x4b9f: 0x0080, 0x4ba0: 0x0080, 0x4ba1: 0x0080, 0x4ba2: 0x0080, 0x4ba3: 0x0080, + 0x4ba4: 0x0080, 0x4ba5: 0x0080, 0x4ba6: 0x0080, 0x4ba7: 0x0080, 0x4ba8: 0x0080, 0x4ba9: 0x0080, + 0x4baa: 0x0080, 0x4bab: 0x0080, 0x4bac: 0x0080, + // Block 0x12f, offset 0x4bc0 + 0x4be6: 0x0080, 0x4be7: 0x0080, 0x4be8: 0x0080, 0x4be9: 0x0080, + 0x4bea: 0x0080, 0x4beb: 0x0080, 0x4bec: 0x0080, 0x4bed: 0x0080, 0x4bee: 0x0080, 0x4bef: 0x0080, + 0x4bf0: 0x0080, 0x4bf1: 0x0080, 0x4bf2: 0x0080, 0x4bf3: 0x0080, 0x4bf4: 0x0080, 0x4bf5: 0x0080, + 0x4bf6: 0x0080, 0x4bf7: 0x0080, 0x4bf8: 0x0080, 0x4bf9: 0x0080, 0x4bfa: 0x0080, 0x4bfb: 0x0080, + 0x4bfc: 0x0080, 0x4bfd: 0x0080, 0x4bfe: 0x0080, 0x4bff: 0x0080, + // Block 0x130, offset 0x4c00 + 0x4c00: 0x008c, 0x4c01: 0x0080, 0x4c02: 0x0080, + 0x4c10: 0x0080, 0x4c11: 0x0080, + 0x4c12: 0x0080, 0x4c13: 0x0080, 0x4c14: 0x0080, 0x4c15: 0x0080, 0x4c16: 0x0080, 0x4c17: 0x0080, + 0x4c18: 0x0080, 0x4c19: 0x0080, 0x4c1a: 0x0080, 0x4c1b: 0x0080, 0x4c1c: 0x0080, 0x4c1d: 0x0080, + 0x4c1e: 0x0080, 0x4c1f: 0x0080, 0x4c20: 0x0080, 0x4c21: 0x0080, 0x4c22: 0x0080, 0x4c23: 0x0080, + 0x4c24: 0x0080, 0x4c25: 0x0080, 0x4c26: 0x0080, 0x4c27: 0x0080, 0x4c28: 0x0080, 0x4c29: 0x0080, + 0x4c2a: 0x0080, 0x4c2b: 0x0080, 0x4c2c: 0x0080, 0x4c2d: 0x0080, 0x4c2e: 0x0080, 0x4c2f: 0x0080, + 0x4c30: 0x0080, 0x4c31: 0x0080, 0x4c32: 0x0080, 0x4c33: 0x0080, 0x4c34: 0x0080, 0x4c35: 0x0080, + 0x4c36: 0x0080, 0x4c37: 0x0080, 0x4c38: 0x0080, 0x4c39: 0x0080, 0x4c3a: 0x0080, 0x4c3b: 0x0080, + // Block 0x131, offset 0x4c40 + 0x4c40: 0x0080, 0x4c41: 0x0080, 0x4c42: 0x0080, 0x4c43: 0x0080, 0x4c44: 0x0080, 0x4c45: 0x0080, + 0x4c46: 0x0080, 0x4c47: 0x0080, 0x4c48: 0x0080, + 0x4c50: 0x0080, 0x4c51: 0x0080, + // Block 0x132, offset 0x4c80 + 0x4c80: 0x0080, 0x4c81: 0x0080, 0x4c82: 0x0080, 0x4c83: 0x0080, 0x4c84: 0x0080, 0x4c85: 0x0080, + 0x4c86: 0x0080, 0x4c87: 0x0080, 0x4c88: 0x0080, 0x4c89: 0x0080, 0x4c8a: 0x0080, 0x4c8b: 0x0080, + 0x4c8c: 0x0080, 0x4c8d: 0x0080, 0x4c8e: 0x0080, 0x4c8f: 0x0080, 0x4c90: 0x0080, 0x4c91: 0x0080, + 0x4c92: 0x0080, + 0x4ca0: 0x0080, 0x4ca1: 0x0080, 0x4ca2: 0x0080, 0x4ca3: 0x0080, + 0x4ca4: 0x0080, 0x4ca5: 0x0080, 0x4ca6: 0x0080, 0x4ca7: 0x0080, 0x4ca8: 0x0080, 0x4ca9: 0x0080, + 0x4caa: 0x0080, 0x4cab: 0x0080, 0x4cac: 0x0080, + 0x4cb0: 0x0080, 0x4cb1: 0x0080, 0x4cb2: 0x0080, 0x4cb3: 0x0080, 0x4cb4: 0x0080, 0x4cb5: 0x0080, + 0x4cb6: 0x0080, + // Block 0x133, offset 0x4cc0 + 0x4cc0: 0x0080, 0x4cc1: 0x0080, 0x4cc2: 0x0080, 0x4cc3: 0x0080, 0x4cc4: 0x0080, 0x4cc5: 0x0080, + 0x4cc6: 0x0080, 0x4cc7: 0x0080, 0x4cc8: 0x0080, 0x4cc9: 0x0080, 0x4cca: 0x0080, 0x4ccb: 0x0080, + 0x4ccc: 0x0080, 0x4ccd: 0x0080, 0x4cce: 0x0080, 0x4ccf: 0x0080, 0x4cd0: 0x0080, 0x4cd1: 0x0080, + 0x4cd2: 0x0080, 0x4cd3: 0x0080, 0x4cd4: 0x0080, 0x4cd5: 0x0080, 0x4cd6: 0x0080, 0x4cd7: 0x0080, + 0x4cd8: 0x0080, 0x4cd9: 0x0080, 0x4cda: 0x0080, 0x4cdb: 0x0080, 0x4cdc: 0x0080, 0x4cdd: 0x0080, + 0x4cde: 0x0080, 0x4cdf: 0x0080, 0x4ce0: 0x0080, 0x4ce1: 0x0080, 0x4ce2: 0x0080, 0x4ce3: 0x0080, + 0x4ce4: 0x0080, 0x4ce5: 0x0080, 0x4ce6: 0x0080, 0x4ce7: 0x0080, 0x4ce8: 0x0080, 0x4ce9: 0x0080, + 0x4cea: 0x0080, 0x4ceb: 0x0080, 0x4cec: 0x0080, 0x4ced: 0x0080, 0x4cee: 0x0080, 0x4cef: 0x0080, + 0x4cf0: 0x0080, 0x4cf1: 0x0080, 0x4cf2: 0x0080, 0x4cf3: 0x0080, + // Block 0x134, offset 0x4d00 + 0x4d00: 0x0080, 0x4d01: 0x0080, 0x4d02: 0x0080, 0x4d03: 0x0080, 0x4d04: 0x0080, 0x4d05: 0x0080, + 0x4d06: 0x0080, 0x4d07: 0x0080, 0x4d08: 0x0080, 0x4d09: 0x0080, 0x4d0a: 0x0080, 0x4d0b: 0x0080, + 0x4d0c: 0x0080, 0x4d0d: 0x0080, 0x4d0e: 0x0080, 0x4d0f: 0x0080, 0x4d10: 0x0080, 0x4d11: 0x0080, + 0x4d12: 0x0080, 0x4d13: 0x0080, 0x4d14: 0x0080, + // Block 0x135, offset 0x4d40 + 0x4d40: 0x0080, 0x4d41: 0x0080, 0x4d42: 0x0080, 0x4d43: 0x0080, 0x4d44: 0x0080, 0x4d45: 0x0080, + 0x4d46: 0x0080, 0x4d47: 0x0080, 0x4d48: 0x0080, 0x4d49: 0x0080, 0x4d4a: 0x0080, 0x4d4b: 0x0080, + 0x4d50: 0x0080, 0x4d51: 0x0080, + 0x4d52: 0x0080, 0x4d53: 0x0080, 0x4d54: 0x0080, 0x4d55: 0x0080, 0x4d56: 0x0080, 0x4d57: 0x0080, + 0x4d58: 0x0080, 0x4d59: 0x0080, 0x4d5a: 0x0080, 0x4d5b: 0x0080, 0x4d5c: 0x0080, 0x4d5d: 0x0080, + 0x4d5e: 0x0080, 0x4d5f: 0x0080, 0x4d60: 0x0080, 0x4d61: 0x0080, 0x4d62: 0x0080, 0x4d63: 0x0080, + 0x4d64: 0x0080, 0x4d65: 0x0080, 0x4d66: 0x0080, 0x4d67: 0x0080, 0x4d68: 0x0080, 0x4d69: 0x0080, + 0x4d6a: 0x0080, 0x4d6b: 0x0080, 0x4d6c: 0x0080, 0x4d6d: 0x0080, 0x4d6e: 0x0080, 0x4d6f: 0x0080, + 0x4d70: 0x0080, 0x4d71: 0x0080, 0x4d72: 0x0080, 0x4d73: 0x0080, 0x4d74: 0x0080, 0x4d75: 0x0080, + 0x4d76: 0x0080, 0x4d77: 0x0080, 0x4d78: 0x0080, 0x4d79: 0x0080, 0x4d7a: 0x0080, 0x4d7b: 0x0080, + 0x4d7c: 0x0080, 0x4d7d: 0x0080, 0x4d7e: 0x0080, 0x4d7f: 0x0080, + // Block 0x136, offset 0x4d80 + 0x4d80: 0x0080, 0x4d81: 0x0080, 0x4d82: 0x0080, 0x4d83: 0x0080, 0x4d84: 0x0080, 0x4d85: 0x0080, + 0x4d86: 0x0080, 0x4d87: 0x0080, + 0x4d90: 0x0080, 0x4d91: 0x0080, + 0x4d92: 0x0080, 0x4d93: 0x0080, 0x4d94: 0x0080, 0x4d95: 0x0080, 0x4d96: 0x0080, 0x4d97: 0x0080, + 0x4d98: 0x0080, 0x4d99: 0x0080, + 0x4da0: 0x0080, 0x4da1: 0x0080, 0x4da2: 0x0080, 0x4da3: 0x0080, + 0x4da4: 0x0080, 0x4da5: 0x0080, 0x4da6: 0x0080, 0x4da7: 0x0080, 0x4da8: 0x0080, 0x4da9: 0x0080, + 0x4daa: 0x0080, 0x4dab: 0x0080, 0x4dac: 0x0080, 0x4dad: 0x0080, 0x4dae: 0x0080, 0x4daf: 0x0080, + 0x4db0: 0x0080, 0x4db1: 0x0080, 0x4db2: 0x0080, 0x4db3: 0x0080, 0x4db4: 0x0080, 0x4db5: 0x0080, + 0x4db6: 0x0080, 0x4db7: 0x0080, 0x4db8: 0x0080, 0x4db9: 0x0080, 0x4dba: 0x0080, 0x4dbb: 0x0080, + 0x4dbc: 0x0080, 0x4dbd: 0x0080, 0x4dbe: 0x0080, 0x4dbf: 0x0080, + // Block 0x137, offset 0x4dc0 + 0x4dc0: 0x0080, 0x4dc1: 0x0080, 0x4dc2: 0x0080, 0x4dc3: 0x0080, 0x4dc4: 0x0080, 0x4dc5: 0x0080, + 0x4dc6: 0x0080, 0x4dc7: 0x0080, + 0x4dd0: 0x0080, 0x4dd1: 0x0080, + 0x4dd2: 0x0080, 0x4dd3: 0x0080, 0x4dd4: 0x0080, 0x4dd5: 0x0080, 0x4dd6: 0x0080, 0x4dd7: 0x0080, + 0x4dd8: 0x0080, 0x4dd9: 0x0080, 0x4dda: 0x0080, 0x4ddb: 0x0080, 0x4ddc: 0x0080, 0x4ddd: 0x0080, + 0x4dde: 0x0080, 0x4ddf: 0x0080, 0x4de0: 0x0080, 0x4de1: 0x0080, 0x4de2: 0x0080, 0x4de3: 0x0080, + 0x4de4: 0x0080, 0x4de5: 0x0080, 0x4de6: 0x0080, 0x4de7: 0x0080, 0x4de8: 0x0080, 0x4de9: 0x0080, + 0x4dea: 0x0080, 0x4deb: 0x0080, 0x4dec: 0x0080, 0x4ded: 0x0080, + // Block 0x138, offset 0x4e00 + 0x4e10: 0x0080, 0x4e11: 0x0080, + 0x4e12: 0x0080, 0x4e13: 0x0080, 0x4e14: 0x0080, 0x4e15: 0x0080, 0x4e16: 0x0080, 0x4e17: 0x0080, + 0x4e18: 0x0080, 0x4e19: 0x0080, 0x4e1a: 0x0080, 0x4e1b: 0x0080, 0x4e1c: 0x0080, 0x4e1d: 0x0080, + 0x4e1e: 0x0080, 0x4e20: 0x0080, 0x4e21: 0x0080, 0x4e22: 0x0080, 0x4e23: 0x0080, + 0x4e24: 0x0080, 0x4e25: 0x0080, 0x4e26: 0x0080, 0x4e27: 0x0080, + 0x4e30: 0x0080, 0x4e33: 0x0080, 0x4e34: 0x0080, 0x4e35: 0x0080, + 0x4e36: 0x0080, 0x4e37: 0x0080, 0x4e38: 0x0080, 0x4e39: 0x0080, 0x4e3a: 0x0080, 0x4e3b: 0x0080, + 0x4e3c: 0x0080, 0x4e3d: 0x0080, 0x4e3e: 0x0080, + // Block 0x139, offset 0x4e40 + 0x4e40: 0x0080, 0x4e41: 0x0080, 0x4e42: 0x0080, 0x4e43: 0x0080, 0x4e44: 0x0080, 0x4e45: 0x0080, + 0x4e46: 0x0080, 0x4e47: 0x0080, 0x4e48: 0x0080, 0x4e49: 0x0080, 0x4e4a: 0x0080, 0x4e4b: 0x0080, + 0x4e50: 0x0080, 0x4e51: 0x0080, + 0x4e52: 0x0080, 0x4e53: 0x0080, 0x4e54: 0x0080, 0x4e55: 0x0080, 0x4e56: 0x0080, 0x4e57: 0x0080, + 0x4e58: 0x0080, 0x4e59: 0x0080, 0x4e5a: 0x0080, 0x4e5b: 0x0080, 0x4e5c: 0x0080, 0x4e5d: 0x0080, + 0x4e5e: 0x0080, + // Block 0x13a, offset 0x4e80 + 0x4e80: 0x0080, 0x4e81: 0x0080, 0x4e82: 0x0080, 0x4e83: 0x0080, 0x4e84: 0x0080, 0x4e85: 0x0080, + 0x4e86: 0x0080, 0x4e87: 0x0080, 0x4e88: 0x0080, 0x4e89: 0x0080, 0x4e8a: 0x0080, 0x4e8b: 0x0080, + 0x4e8c: 0x0080, 0x4e8d: 0x0080, 0x4e8e: 0x0080, 0x4e8f: 0x0080, 0x4e90: 0x0080, 0x4e91: 0x0080, + // Block 0x13b, offset 0x4ec0 + 0x4ec0: 0x0080, + // Block 0x13c, offset 0x4f00 + 0x4f00: 0x00cc, 0x4f01: 0x00cc, 0x4f02: 0x00cc, 0x4f03: 0x00cc, 0x4f04: 0x00cc, 0x4f05: 0x00cc, + 0x4f06: 0x00cc, 0x4f07: 0x00cc, 0x4f08: 0x00cc, 0x4f09: 0x00cc, 0x4f0a: 0x00cc, 0x4f0b: 0x00cc, + 0x4f0c: 0x00cc, 0x4f0d: 0x00cc, 0x4f0e: 0x00cc, 0x4f0f: 0x00cc, 0x4f10: 0x00cc, 0x4f11: 0x00cc, + 0x4f12: 0x00cc, 0x4f13: 0x00cc, 0x4f14: 0x00cc, 0x4f15: 0x00cc, 0x4f16: 0x00cc, + // Block 0x13d, offset 0x4f40 + 0x4f40: 0x00cc, 0x4f41: 0x00cc, 0x4f42: 0x00cc, 0x4f43: 0x00cc, 0x4f44: 0x00cc, 0x4f45: 0x00cc, + 0x4f46: 0x00cc, 0x4f47: 0x00cc, 0x4f48: 0x00cc, 0x4f49: 0x00cc, 0x4f4a: 0x00cc, 0x4f4b: 0x00cc, + 0x4f4c: 0x00cc, 0x4f4d: 0x00cc, 0x4f4e: 0x00cc, 0x4f4f: 0x00cc, 0x4f50: 0x00cc, 0x4f51: 0x00cc, + 0x4f52: 0x00cc, 0x4f53: 0x00cc, 0x4f54: 0x00cc, 0x4f55: 0x00cc, 0x4f56: 0x00cc, 0x4f57: 0x00cc, + 0x4f58: 0x00cc, 0x4f59: 0x00cc, 0x4f5a: 0x00cc, 0x4f5b: 0x00cc, 0x4f5c: 0x00cc, 0x4f5d: 0x00cc, + 0x4f5e: 0x00cc, 0x4f5f: 0x00cc, 0x4f60: 0x00cc, 0x4f61: 0x00cc, 0x4f62: 0x00cc, 0x4f63: 0x00cc, + 0x4f64: 0x00cc, 0x4f65: 0x00cc, 0x4f66: 0x00cc, 0x4f67: 0x00cc, 0x4f68: 0x00cc, 0x4f69: 0x00cc, + 0x4f6a: 0x00cc, 0x4f6b: 0x00cc, 0x4f6c: 0x00cc, 0x4f6d: 0x00cc, 0x4f6e: 0x00cc, 0x4f6f: 0x00cc, + 0x4f70: 0x00cc, 0x4f71: 0x00cc, 0x4f72: 0x00cc, 0x4f73: 0x00cc, 0x4f74: 0x00cc, + // Block 0x13e, offset 0x4f80 + 0x4f80: 0x00cc, 0x4f81: 0x00cc, 0x4f82: 0x00cc, 0x4f83: 0x00cc, 0x4f84: 0x00cc, 0x4f85: 0x00cc, + 0x4f86: 0x00cc, 0x4f87: 0x00cc, 0x4f88: 0x00cc, 0x4f89: 0x00cc, 0x4f8a: 0x00cc, 0x4f8b: 0x00cc, + 0x4f8c: 0x00cc, 0x4f8d: 0x00cc, 0x4f8e: 0x00cc, 0x4f8f: 0x00cc, 0x4f90: 0x00cc, 0x4f91: 0x00cc, + 0x4f92: 0x00cc, 0x4f93: 0x00cc, 0x4f94: 0x00cc, 0x4f95: 0x00cc, 0x4f96: 0x00cc, 0x4f97: 0x00cc, + 0x4f98: 0x00cc, 0x4f99: 0x00cc, 0x4f9a: 0x00cc, 0x4f9b: 0x00cc, 0x4f9c: 0x00cc, 0x4f9d: 0x00cc, + 0x4fa0: 0x00cc, 0x4fa1: 0x00cc, 0x4fa2: 0x00cc, 0x4fa3: 0x00cc, + 0x4fa4: 0x00cc, 0x4fa5: 0x00cc, 0x4fa6: 0x00cc, 0x4fa7: 0x00cc, 0x4fa8: 0x00cc, 0x4fa9: 0x00cc, + 0x4faa: 0x00cc, 0x4fab: 0x00cc, 0x4fac: 0x00cc, 0x4fad: 0x00cc, 0x4fae: 0x00cc, 0x4faf: 0x00cc, + 0x4fb0: 0x00cc, 0x4fb1: 0x00cc, 0x4fb2: 0x00cc, 0x4fb3: 0x00cc, 0x4fb4: 0x00cc, 0x4fb5: 0x00cc, + 0x4fb6: 0x00cc, 0x4fb7: 0x00cc, 0x4fb8: 0x00cc, 0x4fb9: 0x00cc, 0x4fba: 0x00cc, 0x4fbb: 0x00cc, + 0x4fbc: 0x00cc, 0x4fbd: 0x00cc, 0x4fbe: 0x00cc, 0x4fbf: 0x00cc, + // Block 0x13f, offset 0x4fc0 + 0x4fc0: 0x00cc, 0x4fc1: 0x00cc, 0x4fc2: 0x00cc, 0x4fc3: 0x00cc, 0x4fc4: 0x00cc, 0x4fc5: 0x00cc, + 0x4fc6: 0x00cc, 0x4fc7: 0x00cc, 0x4fc8: 0x00cc, 0x4fc9: 0x00cc, 0x4fca: 0x00cc, 0x4fcb: 0x00cc, + 0x4fcc: 0x00cc, 0x4fcd: 0x00cc, 0x4fce: 0x00cc, 0x4fcf: 0x00cc, 0x4fd0: 0x00cc, 0x4fd1: 0x00cc, + 0x4fd2: 0x00cc, 0x4fd3: 0x00cc, 0x4fd4: 0x00cc, 0x4fd5: 0x00cc, 0x4fd6: 0x00cc, 0x4fd7: 0x00cc, + 0x4fd8: 0x00cc, 0x4fd9: 0x00cc, 0x4fda: 0x00cc, 0x4fdb: 0x00cc, 0x4fdc: 0x00cc, 0x4fdd: 0x00cc, + 0x4fde: 0x00cc, 0x4fdf: 0x00cc, 0x4fe0: 0x00cc, 0x4fe1: 0x00cc, + // Block 0x140, offset 0x5000 + 0x5000: 0x008c, 0x5001: 0x008c, 0x5002: 0x008c, 0x5003: 0x008c, 0x5004: 0x008c, 0x5005: 0x008c, + 0x5006: 0x008c, 0x5007: 0x008c, 0x5008: 0x008c, 0x5009: 0x008c, 0x500a: 0x008c, 0x500b: 0x008c, + 0x500c: 0x008c, 0x500d: 0x008c, 0x500e: 0x008c, 0x500f: 0x008c, 0x5010: 0x008c, 0x5011: 0x008c, + 0x5012: 0x008c, 0x5013: 0x008c, 0x5014: 0x008c, 0x5015: 0x008c, 0x5016: 0x008c, 0x5017: 0x008c, + 0x5018: 0x008c, 0x5019: 0x008c, 0x501a: 0x008c, 0x501b: 0x008c, 0x501c: 0x008c, 0x501d: 0x008c, + // Block 0x141, offset 0x5040 + 0x5041: 0x0040, + 0x5060: 0x0040, 0x5061: 0x0040, 0x5062: 0x0040, 0x5063: 0x0040, + 0x5064: 0x0040, 0x5065: 0x0040, 0x5066: 0x0040, 0x5067: 0x0040, 0x5068: 0x0040, 0x5069: 0x0040, + 0x506a: 0x0040, 0x506b: 0x0040, 0x506c: 0x0040, 0x506d: 0x0040, 0x506e: 0x0040, 0x506f: 0x0040, + 0x5070: 0x0040, 0x5071: 0x0040, 0x5072: 0x0040, 0x5073: 0x0040, 0x5074: 0x0040, 0x5075: 0x0040, + 0x5076: 0x0040, 0x5077: 0x0040, 0x5078: 0x0040, 0x5079: 0x0040, 0x507a: 0x0040, 0x507b: 0x0040, + 0x507c: 0x0040, 0x507d: 0x0040, 0x507e: 0x0040, 0x507f: 0x0040, + // Block 0x142, offset 0x5080 + 0x5080: 0x0040, 0x5081: 0x0040, 0x5082: 0x0040, 0x5083: 0x0040, 0x5084: 0x0040, 0x5085: 0x0040, + 0x5086: 0x0040, 0x5087: 0x0040, 0x5088: 0x0040, 0x5089: 0x0040, 0x508a: 0x0040, 0x508b: 0x0040, + 0x508c: 0x0040, 0x508d: 0x0040, 0x508e: 0x0040, 0x508f: 0x0040, 0x5090: 0x0040, 0x5091: 0x0040, + 0x5092: 0x0040, 0x5093: 0x0040, 0x5094: 0x0040, 0x5095: 0x0040, 0x5096: 0x0040, 0x5097: 0x0040, + 0x5098: 0x0040, 0x5099: 0x0040, 0x509a: 0x0040, 0x509b: 0x0040, 0x509c: 0x0040, 0x509d: 0x0040, + 0x509e: 0x0040, 0x509f: 0x0040, 0x50a0: 0x0040, 0x50a1: 0x0040, 0x50a2: 0x0040, 0x50a3: 0x0040, + 0x50a4: 0x0040, 0x50a5: 0x0040, 0x50a6: 0x0040, 0x50a7: 0x0040, 0x50a8: 0x0040, 0x50a9: 0x0040, + 0x50aa: 0x0040, 0x50ab: 0x0040, 0x50ac: 0x0040, 0x50ad: 0x0040, 0x50ae: 0x0040, 0x50af: 0x0040, + // Block 0x143, offset 0x50c0 + 0x50c0: 0x0040, 0x50c1: 0x0040, 0x50c2: 0x0040, 0x50c3: 0x0040, 0x50c4: 0x0040, 0x50c5: 0x0040, + 0x50c6: 0x0040, 0x50c7: 0x0040, 0x50c8: 0x0040, 0x50c9: 0x0040, 0x50ca: 0x0040, 0x50cb: 0x0040, + 0x50cc: 0x0040, 0x50cd: 0x0040, 0x50ce: 0x0040, 0x50cf: 0x0040, 0x50d0: 0x0040, 0x50d1: 0x0040, + 0x50d2: 0x0040, 0x50d3: 0x0040, 0x50d4: 0x0040, 0x50d5: 0x0040, 0x50d6: 0x0040, 0x50d7: 0x0040, + 0x50d8: 0x0040, 0x50d9: 0x0040, 0x50da: 0x0040, 0x50db: 0x0040, 0x50dc: 0x0040, 0x50dd: 0x0040, + 0x50de: 0x0040, 0x50df: 0x0040, 0x50e0: 0x0040, 0x50e1: 0x0040, 0x50e2: 0x0040, 0x50e3: 0x0040, + 0x50e4: 0x0040, 0x50e5: 0x0040, 0x50e6: 0x0040, 0x50e7: 0x0040, 0x50e8: 0x0040, 0x50e9: 0x0040, + 0x50ea: 0x0040, 0x50eb: 0x0040, 0x50ec: 0x0040, 0x50ed: 0x0040, 0x50ee: 0x0040, 0x50ef: 0x0040, + 0x50f0: 0x0040, 0x50f1: 0x0040, 0x50f2: 0x0040, 0x50f3: 0x0040, 0x50f4: 0x0040, 0x50f5: 0x0040, + 0x50f6: 0x0040, 0x50f7: 0x0040, 0x50f8: 0x0040, 0x50f9: 0x0040, 0x50fa: 0x0040, 0x50fb: 0x0040, + 0x50fc: 0x0040, 0x50fd: 0x0040, +} + +// derivedPropertiesIndex: 36 blocks, 2304 entries, 4608 bytes +// Block 0 is the zero block. +var derivedPropertiesIndex = [2304]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc6: 0x05, 0xc7: 0x06, + 0xc8: 0x05, 0xc9: 0x05, 0xca: 0x07, 0xcb: 0x08, 0xcc: 0x09, 0xcd: 0x0a, 0xce: 0x0b, 0xcf: 0x0c, + 0xd0: 0x05, 0xd1: 0x05, 0xd2: 0x0d, 0xd3: 0x05, 0xd4: 0x0e, 0xd5: 0x0f, 0xd6: 0x10, 0xd7: 0x11, + 0xd8: 0x12, 0xd9: 0x13, 0xda: 0x14, 0xdb: 0x15, 0xdc: 0x16, 0xdd: 0x17, 0xde: 0x18, 0xdf: 0x19, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x0a, 0xec: 0x0a, 0xed: 0x0b, 0xee: 0x0c, 0xef: 0x0d, + 0xf0: 0x1d, 0xf3: 0x20, 0xf4: 0x21, + // Block 0x4, offset 0x100 + 0x120: 0x1a, 0x121: 0x1b, 0x122: 0x1c, 0x123: 0x1d, 0x124: 0x1e, 0x125: 0x1f, 0x126: 0x20, 0x127: 0x21, + 0x128: 0x22, 0x129: 0x23, 0x12a: 0x24, 0x12b: 0x25, 0x12c: 0x26, 0x12d: 0x27, 0x12e: 0x28, 0x12f: 0x29, + 0x130: 0x2a, 0x131: 0x2b, 0x132: 0x2c, 0x133: 0x2d, 0x134: 0x2e, 0x135: 0x2f, 0x136: 0x30, 0x137: 0x31, + 0x138: 0x32, 0x139: 0x33, 0x13a: 0x34, 0x13b: 0x35, 0x13c: 0x36, 0x13d: 0x37, 0x13e: 0x38, 0x13f: 0x39, + // Block 0x5, offset 0x140 + 0x140: 0x3a, 0x141: 0x3b, 0x142: 0x3c, 0x143: 0x3d, 0x144: 0x3e, 0x145: 0x3e, 0x146: 0x3e, 0x147: 0x3e, + 0x148: 0x05, 0x149: 0x3f, 0x14a: 0x40, 0x14b: 0x41, 0x14c: 0x42, 0x14d: 0x43, 0x14e: 0x44, 0x14f: 0x45, + 0x150: 0x46, 0x151: 0x05, 0x152: 0x05, 0x153: 0x05, 0x154: 0x05, 0x155: 0x05, 0x156: 0x05, 0x157: 0x05, + 0x158: 0x05, 0x159: 0x47, 0x15a: 0x48, 0x15b: 0x49, 0x15c: 0x4a, 0x15d: 0x4b, 0x15e: 0x4c, 0x15f: 0x4d, + 0x160: 0x4e, 0x161: 0x4f, 0x162: 0x50, 0x163: 0x51, 0x164: 0x52, 0x165: 0x53, 0x166: 0x54, 0x167: 0x55, + 0x168: 0x56, 0x169: 0x57, 0x16a: 0x58, 0x16c: 0x59, 0x16d: 0x5a, 0x16e: 0x5b, 0x16f: 0x5c, + 0x170: 0x5d, 0x171: 0x5e, 0x172: 0x5f, 0x173: 0x60, 0x174: 0x61, 0x175: 0x62, 0x176: 0x63, 0x177: 0x64, + 0x178: 0x05, 0x179: 0x05, 0x17a: 0x65, 0x17b: 0x05, 0x17c: 0x66, 0x17d: 0x67, 0x17e: 0x68, 0x17f: 0x69, + // Block 0x6, offset 0x180 + 0x180: 0x6a, 0x181: 0x6b, 0x182: 0x6c, 0x183: 0x6d, 0x184: 0x6e, 0x185: 0x6f, 0x186: 0x70, 0x187: 0x71, + 0x188: 0x71, 0x189: 0x71, 0x18a: 0x71, 0x18b: 0x71, 0x18c: 0x71, 0x18d: 0x71, 0x18e: 0x71, 0x18f: 0x72, + 0x190: 0x73, 0x191: 0x74, 0x192: 0x71, 0x193: 0x71, 0x194: 0x71, 0x195: 0x71, 0x196: 0x71, 0x197: 0x71, + 0x198: 0x71, 0x199: 0x71, 0x19a: 0x71, 0x19b: 0x71, 0x19c: 0x71, 0x19d: 0x71, 0x19e: 0x71, 0x19f: 0x71, + 0x1a0: 0x71, 0x1a1: 0x71, 0x1a2: 0x71, 0x1a3: 0x71, 0x1a4: 0x71, 0x1a5: 0x71, 0x1a6: 0x71, 0x1a7: 0x71, + 0x1a8: 0x71, 0x1a9: 0x71, 0x1aa: 0x71, 0x1ab: 0x71, 0x1ac: 0x71, 0x1ad: 0x75, 0x1ae: 0x76, 0x1af: 0x77, + 0x1b0: 0x78, 0x1b1: 0x79, 0x1b2: 0x05, 0x1b3: 0x7a, 0x1b4: 0x7b, 0x1b5: 0x7c, 0x1b6: 0x7d, 0x1b7: 0x7e, + 0x1b8: 0x7f, 0x1b9: 0x80, 0x1ba: 0x81, 0x1bb: 0x82, 0x1bc: 0x83, 0x1bd: 0x83, 0x1be: 0x83, 0x1bf: 0x84, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x85, 0x1c1: 0x86, 0x1c2: 0x87, 0x1c3: 0x88, 0x1c4: 0x89, 0x1c5: 0x8a, 0x1c6: 0x8b, 0x1c7: 0x8c, + 0x1c8: 0x8d, 0x1c9: 0x71, 0x1ca: 0x71, 0x1cb: 0x8e, 0x1cc: 0x83, 0x1cd: 0x8f, 0x1ce: 0x71, 0x1cf: 0x71, + 0x1d0: 0x90, 0x1d1: 0x90, 0x1d2: 0x90, 0x1d3: 0x90, 0x1d4: 0x90, 0x1d5: 0x90, 0x1d6: 0x90, 0x1d7: 0x90, + 0x1d8: 0x90, 0x1d9: 0x90, 0x1da: 0x90, 0x1db: 0x90, 0x1dc: 0x90, 0x1dd: 0x90, 0x1de: 0x90, 0x1df: 0x90, + 0x1e0: 0x90, 0x1e1: 0x90, 0x1e2: 0x90, 0x1e3: 0x90, 0x1e4: 0x90, 0x1e5: 0x90, 0x1e6: 0x90, 0x1e7: 0x90, + 0x1e8: 0x90, 0x1e9: 0x90, 0x1ea: 0x90, 0x1eb: 0x90, 0x1ec: 0x90, 0x1ed: 0x90, 0x1ee: 0x90, 0x1ef: 0x90, + 0x1f0: 0x90, 0x1f1: 0x90, 0x1f2: 0x90, 0x1f3: 0x90, 0x1f4: 0x90, 0x1f5: 0x90, 0x1f6: 0x90, 0x1f7: 0x90, + 0x1f8: 0x90, 0x1f9: 0x90, 0x1fa: 0x90, 0x1fb: 0x90, 0x1fc: 0x90, 0x1fd: 0x90, 0x1fe: 0x90, 0x1ff: 0x90, + // Block 0x8, offset 0x200 + 0x200: 0x90, 0x201: 0x90, 0x202: 0x90, 0x203: 0x90, 0x204: 0x90, 0x205: 0x90, 0x206: 0x90, 0x207: 0x90, + 0x208: 0x90, 0x209: 0x90, 0x20a: 0x90, 0x20b: 0x90, 0x20c: 0x90, 0x20d: 0x90, 0x20e: 0x90, 0x20f: 0x90, + 0x210: 0x90, 0x211: 0x90, 0x212: 0x90, 0x213: 0x90, 0x214: 0x90, 0x215: 0x90, 0x216: 0x90, 0x217: 0x90, + 0x218: 0x90, 0x219: 0x90, 0x21a: 0x90, 0x21b: 0x90, 0x21c: 0x90, 0x21d: 0x90, 0x21e: 0x90, 0x21f: 0x90, + 0x220: 0x90, 0x221: 0x90, 0x222: 0x90, 0x223: 0x90, 0x224: 0x90, 0x225: 0x90, 0x226: 0x90, 0x227: 0x90, + 0x228: 0x90, 0x229: 0x90, 0x22a: 0x90, 0x22b: 0x90, 0x22c: 0x90, 0x22d: 0x90, 0x22e: 0x90, 0x22f: 0x90, + 0x230: 0x90, 0x231: 0x90, 0x232: 0x90, 0x233: 0x90, 0x234: 0x90, 0x235: 0x90, 0x236: 0x91, 0x237: 0x71, + 0x238: 0x90, 0x239: 0x90, 0x23a: 0x90, 0x23b: 0x90, 0x23c: 0x90, 0x23d: 0x90, 0x23e: 0x90, 0x23f: 0x90, + // Block 0x9, offset 0x240 + 0x240: 0x90, 0x241: 0x90, 0x242: 0x90, 0x243: 0x90, 0x244: 0x90, 0x245: 0x90, 0x246: 0x90, 0x247: 0x90, + 0x248: 0x90, 0x249: 0x90, 0x24a: 0x90, 0x24b: 0x90, 0x24c: 0x90, 0x24d: 0x90, 0x24e: 0x90, 0x24f: 0x90, + 0x250: 0x90, 0x251: 0x90, 0x252: 0x90, 0x253: 0x90, 0x254: 0x90, 0x255: 0x90, 0x256: 0x90, 0x257: 0x90, + 0x258: 0x90, 0x259: 0x90, 0x25a: 0x90, 0x25b: 0x90, 0x25c: 0x90, 0x25d: 0x90, 0x25e: 0x90, 0x25f: 0x90, + 0x260: 0x90, 0x261: 0x90, 0x262: 0x90, 0x263: 0x90, 0x264: 0x90, 0x265: 0x90, 0x266: 0x90, 0x267: 0x90, + 0x268: 0x90, 0x269: 0x90, 0x26a: 0x90, 0x26b: 0x90, 0x26c: 0x90, 0x26d: 0x90, 0x26e: 0x90, 0x26f: 0x90, + 0x270: 0x90, 0x271: 0x90, 0x272: 0x90, 0x273: 0x90, 0x274: 0x90, 0x275: 0x90, 0x276: 0x90, 0x277: 0x90, + 0x278: 0x90, 0x279: 0x90, 0x27a: 0x90, 0x27b: 0x90, 0x27c: 0x90, 0x27d: 0x90, 0x27e: 0x90, 0x27f: 0x90, + // Block 0xa, offset 0x280 + 0x280: 0x90, 0x281: 0x90, 0x282: 0x90, 0x283: 0x90, 0x284: 0x90, 0x285: 0x90, 0x286: 0x90, 0x287: 0x90, + 0x288: 0x90, 0x289: 0x90, 0x28a: 0x90, 0x28b: 0x90, 0x28c: 0x90, 0x28d: 0x90, 0x28e: 0x90, 0x28f: 0x90, + 0x290: 0x90, 0x291: 0x90, 0x292: 0x90, 0x293: 0x90, 0x294: 0x90, 0x295: 0x90, 0x296: 0x90, 0x297: 0x90, + 0x298: 0x90, 0x299: 0x90, 0x29a: 0x90, 0x29b: 0x90, 0x29c: 0x90, 0x29d: 0x90, 0x29e: 0x90, 0x29f: 0x90, + 0x2a0: 0x90, 0x2a1: 0x90, 0x2a2: 0x90, 0x2a3: 0x90, 0x2a4: 0x90, 0x2a5: 0x90, 0x2a6: 0x90, 0x2a7: 0x90, + 0x2a8: 0x90, 0x2a9: 0x90, 0x2aa: 0x90, 0x2ab: 0x90, 0x2ac: 0x90, 0x2ad: 0x90, 0x2ae: 0x90, 0x2af: 0x90, + 0x2b0: 0x90, 0x2b1: 0x90, 0x2b2: 0x90, 0x2b3: 0x90, 0x2b4: 0x90, 0x2b5: 0x90, 0x2b6: 0x90, 0x2b7: 0x90, + 0x2b8: 0x90, 0x2b9: 0x90, 0x2ba: 0x90, 0x2bb: 0x90, 0x2bc: 0x90, 0x2bd: 0x90, 0x2be: 0x90, 0x2bf: 0x92, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x05, 0x2c1: 0x05, 0x2c2: 0x05, 0x2c3: 0x05, 0x2c4: 0x05, 0x2c5: 0x05, 0x2c6: 0x05, 0x2c7: 0x05, + 0x2c8: 0x05, 0x2c9: 0x05, 0x2ca: 0x05, 0x2cb: 0x05, 0x2cc: 0x05, 0x2cd: 0x05, 0x2ce: 0x05, 0x2cf: 0x05, + 0x2d0: 0x05, 0x2d1: 0x05, 0x2d2: 0x93, 0x2d3: 0x94, 0x2d4: 0x05, 0x2d5: 0x05, 0x2d6: 0x05, 0x2d7: 0x05, + 0x2d8: 0x95, 0x2d9: 0x96, 0x2da: 0x97, 0x2db: 0x98, 0x2dc: 0x99, 0x2dd: 0x9a, 0x2de: 0x9b, 0x2df: 0x9c, + 0x2e0: 0x9d, 0x2e1: 0x9e, 0x2e2: 0x05, 0x2e3: 0x9f, 0x2e4: 0xa0, 0x2e5: 0xa1, 0x2e6: 0xa2, 0x2e7: 0xa3, + 0x2e8: 0xa4, 0x2e9: 0xa5, 0x2ea: 0xa6, 0x2eb: 0xa7, 0x2ec: 0xa8, 0x2ed: 0xa9, 0x2ee: 0x05, 0x2ef: 0xaa, + 0x2f0: 0x05, 0x2f1: 0x05, 0x2f2: 0x05, 0x2f3: 0x05, 0x2f4: 0x05, 0x2f5: 0x05, 0x2f6: 0x05, 0x2f7: 0x05, + 0x2f8: 0x05, 0x2f9: 0x05, 0x2fa: 0x05, 0x2fb: 0x05, 0x2fc: 0x05, 0x2fd: 0x05, 0x2fe: 0x05, 0x2ff: 0x05, + // Block 0xc, offset 0x300 + 0x300: 0x05, 0x301: 0x05, 0x302: 0x05, 0x303: 0x05, 0x304: 0x05, 0x305: 0x05, 0x306: 0x05, 0x307: 0x05, + 0x308: 0x05, 0x309: 0x05, 0x30a: 0x05, 0x30b: 0x05, 0x30c: 0x05, 0x30d: 0x05, 0x30e: 0x05, 0x30f: 0x05, + 0x310: 0x05, 0x311: 0x05, 0x312: 0x05, 0x313: 0x05, 0x314: 0x05, 0x315: 0x05, 0x316: 0x05, 0x317: 0x05, + 0x318: 0x05, 0x319: 0x05, 0x31a: 0x05, 0x31b: 0x05, 0x31c: 0x05, 0x31d: 0x05, 0x31e: 0x05, 0x31f: 0x05, + 0x320: 0x05, 0x321: 0x05, 0x322: 0x05, 0x323: 0x05, 0x324: 0x05, 0x325: 0x05, 0x326: 0x05, 0x327: 0x05, + 0x328: 0x05, 0x329: 0x05, 0x32a: 0x05, 0x32b: 0x05, 0x32c: 0x05, 0x32d: 0x05, 0x32e: 0x05, 0x32f: 0x05, + 0x330: 0x05, 0x331: 0x05, 0x332: 0x05, 0x333: 0x05, 0x334: 0x05, 0x335: 0x05, 0x336: 0x05, 0x337: 0x05, + 0x338: 0x05, 0x339: 0x05, 0x33a: 0x05, 0x33b: 0x05, 0x33c: 0x05, 0x33d: 0x05, 0x33e: 0x05, 0x33f: 0x05, + // Block 0xd, offset 0x340 + 0x340: 0x05, 0x341: 0x05, 0x342: 0x05, 0x343: 0x05, 0x344: 0x05, 0x345: 0x05, 0x346: 0x05, 0x347: 0x05, + 0x348: 0x05, 0x349: 0x05, 0x34a: 0x05, 0x34b: 0x05, 0x34c: 0x05, 0x34d: 0x05, 0x34e: 0x05, 0x34f: 0x05, + 0x350: 0x05, 0x351: 0x05, 0x352: 0x05, 0x353: 0x05, 0x354: 0x05, 0x355: 0x05, 0x356: 0x05, 0x357: 0x05, + 0x358: 0x05, 0x359: 0x05, 0x35a: 0x05, 0x35b: 0x05, 0x35c: 0x05, 0x35d: 0x05, 0x35e: 0xab, 0x35f: 0xac, + // Block 0xe, offset 0x380 + 0x380: 0x3e, 0x381: 0x3e, 0x382: 0x3e, 0x383: 0x3e, 0x384: 0x3e, 0x385: 0x3e, 0x386: 0x3e, 0x387: 0x3e, + 0x388: 0x3e, 0x389: 0x3e, 0x38a: 0x3e, 0x38b: 0x3e, 0x38c: 0x3e, 0x38d: 0x3e, 0x38e: 0x3e, 0x38f: 0x3e, + 0x390: 0x3e, 0x391: 0x3e, 0x392: 0x3e, 0x393: 0x3e, 0x394: 0x3e, 0x395: 0x3e, 0x396: 0x3e, 0x397: 0x3e, + 0x398: 0x3e, 0x399: 0x3e, 0x39a: 0x3e, 0x39b: 0x3e, 0x39c: 0x3e, 0x39d: 0x3e, 0x39e: 0x3e, 0x39f: 0x3e, + 0x3a0: 0x3e, 0x3a1: 0x3e, 0x3a2: 0x3e, 0x3a3: 0x3e, 0x3a4: 0x3e, 0x3a5: 0x3e, 0x3a6: 0x3e, 0x3a7: 0x3e, + 0x3a8: 0x3e, 0x3a9: 0x3e, 0x3aa: 0x3e, 0x3ab: 0x3e, 0x3ac: 0x3e, 0x3ad: 0x3e, 0x3ae: 0x3e, 0x3af: 0x3e, + 0x3b0: 0x3e, 0x3b1: 0x3e, 0x3b2: 0x3e, 0x3b3: 0x3e, 0x3b4: 0x3e, 0x3b5: 0x3e, 0x3b6: 0x3e, 0x3b7: 0x3e, + 0x3b8: 0x3e, 0x3b9: 0x3e, 0x3ba: 0x3e, 0x3bb: 0x3e, 0x3bc: 0x3e, 0x3bd: 0x3e, 0x3be: 0x3e, 0x3bf: 0x3e, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x3e, 0x3c1: 0x3e, 0x3c2: 0x3e, 0x3c3: 0x3e, 0x3c4: 0x3e, 0x3c5: 0x3e, 0x3c6: 0x3e, 0x3c7: 0x3e, + 0x3c8: 0x3e, 0x3c9: 0x3e, 0x3ca: 0x3e, 0x3cb: 0x3e, 0x3cc: 0x3e, 0x3cd: 0x3e, 0x3ce: 0x3e, 0x3cf: 0x3e, + 0x3d0: 0x3e, 0x3d1: 0x3e, 0x3d2: 0x3e, 0x3d3: 0x3e, 0x3d4: 0x3e, 0x3d5: 0x3e, 0x3d6: 0x3e, 0x3d7: 0x3e, + 0x3d8: 0x3e, 0x3d9: 0x3e, 0x3da: 0x3e, 0x3db: 0x3e, 0x3dc: 0x3e, 0x3dd: 0x3e, 0x3de: 0x3e, 0x3df: 0x3e, + 0x3e0: 0x3e, 0x3e1: 0x3e, 0x3e2: 0x3e, 0x3e3: 0x3e, 0x3e4: 0x83, 0x3e5: 0x83, 0x3e6: 0x83, 0x3e7: 0x83, + 0x3e8: 0xad, 0x3e9: 0xae, 0x3ea: 0x83, 0x3eb: 0xaf, 0x3ec: 0xb0, 0x3ed: 0xb1, 0x3ee: 0x71, 0x3ef: 0xb2, + 0x3f0: 0x71, 0x3f1: 0x71, 0x3f2: 0x71, 0x3f3: 0x71, 0x3f4: 0x71, 0x3f5: 0xb3, 0x3f6: 0xb4, 0x3f7: 0xb5, + 0x3f8: 0xb6, 0x3f9: 0xb7, 0x3fa: 0x71, 0x3fb: 0xb8, 0x3fc: 0xb9, 0x3fd: 0xba, 0x3fe: 0xbb, 0x3ff: 0xbc, + // Block 0x10, offset 0x400 + 0x400: 0xbd, 0x401: 0xbe, 0x402: 0x05, 0x403: 0xbf, 0x404: 0xc0, 0x405: 0xc1, 0x406: 0xc2, 0x407: 0xc3, + 0x40a: 0xc4, 0x40b: 0xc5, 0x40c: 0xc6, 0x40d: 0xc7, 0x40e: 0xc8, 0x40f: 0xc9, + 0x410: 0x05, 0x411: 0x05, 0x412: 0xca, 0x413: 0xcb, 0x414: 0xcc, 0x415: 0xcd, + 0x418: 0x05, 0x419: 0x05, 0x41a: 0x05, 0x41b: 0x05, 0x41c: 0xce, 0x41d: 0xcf, + 0x420: 0xd0, 0x421: 0xd1, 0x422: 0xd2, 0x423: 0xd3, 0x424: 0xd4, 0x426: 0xd5, 0x427: 0xb4, + 0x428: 0xd6, 0x429: 0xd7, 0x42a: 0xd8, 0x42b: 0xd9, 0x42c: 0xda, 0x42d: 0xdb, 0x42e: 0xdc, + 0x430: 0x05, 0x431: 0x5f, 0x432: 0xdd, 0x433: 0xde, + 0x439: 0xdf, + // Block 0x11, offset 0x440 + 0x440: 0xe0, 0x441: 0xe1, 0x442: 0xe2, 0x443: 0xe3, 0x444: 0xe4, 0x445: 0xe5, 0x446: 0xe6, 0x447: 0xe7, + 0x448: 0xe8, 0x44a: 0xe9, 0x44b: 0xea, 0x44c: 0xeb, 0x44d: 0xec, + 0x450: 0xed, 0x451: 0xee, 0x452: 0xef, 0x453: 0xf0, 0x456: 0xf1, 0x457: 0xf2, + 0x458: 0xf3, 0x459: 0xf4, 0x45a: 0xf5, 0x45b: 0xf6, 0x45c: 0xf7, + 0x462: 0xf8, 0x463: 0xf9, + 0x46b: 0xfa, + 0x470: 0xfb, 0x471: 0xfc, 0x472: 0xfd, + // Block 0x12, offset 0x480 + 0x480: 0x05, 0x481: 0x05, 0x482: 0x05, 0x483: 0x05, 0x484: 0x05, 0x485: 0x05, 0x486: 0x05, 0x487: 0x05, + 0x488: 0x05, 0x489: 0x05, 0x48a: 0x05, 0x48b: 0x05, 0x48c: 0x05, 0x48d: 0x05, 0x48e: 0xfe, + 0x490: 0x71, 0x491: 0xff, 0x492: 0x05, 0x493: 0x05, 0x494: 0x05, 0x495: 0x100, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x05, 0x4c1: 0x05, 0x4c2: 0x05, 0x4c3: 0x05, 0x4c4: 0x05, 0x4c5: 0x05, 0x4c6: 0x05, 0x4c7: 0x05, + 0x4c8: 0x05, 0x4c9: 0x05, 0x4ca: 0x05, 0x4cb: 0x05, 0x4cc: 0x05, 0x4cd: 0x05, 0x4ce: 0x05, 0x4cf: 0x05, + 0x4d0: 0x101, + // Block 0x14, offset 0x500 + 0x510: 0x05, 0x511: 0x05, 0x512: 0x05, 0x513: 0x05, 0x514: 0x05, 0x515: 0x05, 0x516: 0x05, 0x517: 0x05, + 0x518: 0x05, 0x519: 0x102, + // Block 0x15, offset 0x540 + 0x560: 0x05, 0x561: 0x05, 0x562: 0x05, 0x563: 0x05, 0x564: 0x05, 0x565: 0x05, 0x566: 0x05, 0x567: 0x05, + 0x568: 0xfa, 0x569: 0x103, 0x56b: 0x104, 0x56c: 0x105, 0x56d: 0x106, 0x56e: 0x107, + 0x57c: 0x05, 0x57d: 0x108, 0x57e: 0x109, 0x57f: 0x10a, + // Block 0x16, offset 0x580 + 0x580: 0x05, 0x581: 0x05, 0x582: 0x05, 0x583: 0x05, 0x584: 0x05, 0x585: 0x05, 0x586: 0x05, 0x587: 0x05, + 0x588: 0x05, 0x589: 0x05, 0x58a: 0x05, 0x58b: 0x05, 0x58c: 0x05, 0x58d: 0x05, 0x58e: 0x05, 0x58f: 0x05, + 0x590: 0x05, 0x591: 0x05, 0x592: 0x05, 0x593: 0x05, 0x594: 0x05, 0x595: 0x05, 0x596: 0x05, 0x597: 0x05, + 0x598: 0x05, 0x599: 0x05, 0x59a: 0x05, 0x59b: 0x05, 0x59c: 0x05, 0x59d: 0x05, 0x59e: 0x05, 0x59f: 0x10b, + 0x5a0: 0x05, 0x5a1: 0x05, 0x5a2: 0x05, 0x5a3: 0x05, 0x5a4: 0x05, 0x5a5: 0x05, 0x5a6: 0x05, 0x5a7: 0x05, + 0x5a8: 0x05, 0x5a9: 0x05, 0x5aa: 0x05, 0x5ab: 0xdd, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x10c, + 0x5f0: 0x05, 0x5f1: 0x10d, 0x5f2: 0x10e, + // Block 0x18, offset 0x600 + 0x600: 0x71, 0x601: 0x71, 0x602: 0x71, 0x603: 0x10f, 0x604: 0x110, 0x605: 0x111, 0x606: 0x112, 0x607: 0x113, + 0x608: 0xc1, 0x609: 0x114, 0x60c: 0x71, 0x60d: 0x115, + 0x610: 0x71, 0x611: 0x116, 0x612: 0x117, 0x613: 0x118, 0x614: 0x119, 0x615: 0x11a, 0x616: 0x71, 0x617: 0x71, + 0x618: 0x71, 0x619: 0x71, 0x61a: 0x11b, 0x61b: 0x71, 0x61c: 0x71, 0x61d: 0x71, 0x61e: 0x71, 0x61f: 0x11c, + 0x620: 0x71, 0x621: 0x71, 0x622: 0x71, 0x623: 0x71, 0x624: 0x71, 0x625: 0x71, 0x626: 0x71, 0x627: 0x71, + 0x628: 0x11d, 0x629: 0x11e, 0x62a: 0x11f, + // Block 0x19, offset 0x640 + 0x640: 0x120, + 0x660: 0x05, 0x661: 0x05, 0x662: 0x05, 0x663: 0x121, 0x664: 0x122, 0x665: 0x123, + 0x678: 0x124, 0x679: 0x125, 0x67a: 0x126, 0x67b: 0x127, + // Block 0x1a, offset 0x680 + 0x680: 0x128, 0x681: 0x71, 0x682: 0x129, 0x683: 0x12a, 0x684: 0x12b, 0x685: 0x128, 0x686: 0x12c, 0x687: 0x12d, + 0x688: 0x12e, 0x689: 0x12f, 0x68c: 0x71, 0x68d: 0x71, 0x68e: 0x71, 0x68f: 0x71, + 0x690: 0x71, 0x691: 0x71, 0x692: 0x71, 0x693: 0x71, 0x694: 0x71, 0x695: 0x71, 0x696: 0x71, 0x697: 0x71, + 0x698: 0x71, 0x699: 0x71, 0x69a: 0x71, 0x69b: 0x130, 0x69c: 0x71, 0x69d: 0x131, 0x69e: 0x71, 0x69f: 0x132, + 0x6a0: 0x133, 0x6a1: 0x134, 0x6a2: 0x135, 0x6a4: 0x136, 0x6a5: 0x137, 0x6a6: 0x138, 0x6a7: 0x139, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x90, 0x6c1: 0x90, 0x6c2: 0x90, 0x6c3: 0x90, 0x6c4: 0x90, 0x6c5: 0x90, 0x6c6: 0x90, 0x6c7: 0x90, + 0x6c8: 0x90, 0x6c9: 0x90, 0x6ca: 0x90, 0x6cb: 0x90, 0x6cc: 0x90, 0x6cd: 0x90, 0x6ce: 0x90, 0x6cf: 0x90, + 0x6d0: 0x90, 0x6d1: 0x90, 0x6d2: 0x90, 0x6d3: 0x90, 0x6d4: 0x90, 0x6d5: 0x90, 0x6d6: 0x90, 0x6d7: 0x90, + 0x6d8: 0x90, 0x6d9: 0x90, 0x6da: 0x90, 0x6db: 0x13a, 0x6dc: 0x90, 0x6dd: 0x90, 0x6de: 0x90, 0x6df: 0x90, + 0x6e0: 0x90, 0x6e1: 0x90, 0x6e2: 0x90, 0x6e3: 0x90, 0x6e4: 0x90, 0x6e5: 0x90, 0x6e6: 0x90, 0x6e7: 0x90, + 0x6e8: 0x90, 0x6e9: 0x90, 0x6ea: 0x90, 0x6eb: 0x90, 0x6ec: 0x90, 0x6ed: 0x90, 0x6ee: 0x90, 0x6ef: 0x90, + 0x6f0: 0x90, 0x6f1: 0x90, 0x6f2: 0x90, 0x6f3: 0x90, 0x6f4: 0x90, 0x6f5: 0x90, 0x6f6: 0x90, 0x6f7: 0x90, + 0x6f8: 0x90, 0x6f9: 0x90, 0x6fa: 0x90, 0x6fb: 0x90, 0x6fc: 0x90, 0x6fd: 0x90, 0x6fe: 0x90, 0x6ff: 0x90, + // Block 0x1c, offset 0x700 + 0x700: 0x90, 0x701: 0x90, 0x702: 0x90, 0x703: 0x90, 0x704: 0x90, 0x705: 0x90, 0x706: 0x90, 0x707: 0x90, + 0x708: 0x90, 0x709: 0x90, 0x70a: 0x90, 0x70b: 0x90, 0x70c: 0x90, 0x70d: 0x90, 0x70e: 0x90, 0x70f: 0x90, + 0x710: 0x90, 0x711: 0x90, 0x712: 0x90, 0x713: 0x90, 0x714: 0x90, 0x715: 0x90, 0x716: 0x90, 0x717: 0x90, + 0x718: 0x90, 0x719: 0x90, 0x71a: 0x90, 0x71b: 0x90, 0x71c: 0x13b, 0x71d: 0x90, 0x71e: 0x90, 0x71f: 0x90, + 0x720: 0x13c, 0x721: 0x90, 0x722: 0x90, 0x723: 0x90, 0x724: 0x90, 0x725: 0x90, 0x726: 0x90, 0x727: 0x90, + 0x728: 0x90, 0x729: 0x90, 0x72a: 0x90, 0x72b: 0x90, 0x72c: 0x90, 0x72d: 0x90, 0x72e: 0x90, 0x72f: 0x90, + 0x730: 0x90, 0x731: 0x90, 0x732: 0x90, 0x733: 0x90, 0x734: 0x90, 0x735: 0x90, 0x736: 0x90, 0x737: 0x90, + 0x738: 0x90, 0x739: 0x90, 0x73a: 0x90, 0x73b: 0x90, 0x73c: 0x90, 0x73d: 0x90, 0x73e: 0x90, 0x73f: 0x90, + // Block 0x1d, offset 0x740 + 0x740: 0x90, 0x741: 0x90, 0x742: 0x90, 0x743: 0x90, 0x744: 0x90, 0x745: 0x90, 0x746: 0x90, 0x747: 0x90, + 0x748: 0x90, 0x749: 0x90, 0x74a: 0x90, 0x74b: 0x90, 0x74c: 0x90, 0x74d: 0x90, 0x74e: 0x90, 0x74f: 0x90, + 0x750: 0x90, 0x751: 0x90, 0x752: 0x90, 0x753: 0x90, 0x754: 0x90, 0x755: 0x90, 0x756: 0x90, 0x757: 0x90, + 0x758: 0x90, 0x759: 0x90, 0x75a: 0x90, 0x75b: 0x90, 0x75c: 0x90, 0x75d: 0x90, 0x75e: 0x90, 0x75f: 0x90, + 0x760: 0x90, 0x761: 0x90, 0x762: 0x90, 0x763: 0x90, 0x764: 0x90, 0x765: 0x90, 0x766: 0x90, 0x767: 0x90, + 0x768: 0x90, 0x769: 0x90, 0x76a: 0x90, 0x76b: 0x90, 0x76c: 0x90, 0x76d: 0x90, 0x76e: 0x90, 0x76f: 0x90, + 0x770: 0x90, 0x771: 0x90, 0x772: 0x90, 0x773: 0x90, 0x774: 0x90, 0x775: 0x90, 0x776: 0x90, 0x777: 0x90, + 0x778: 0x90, 0x779: 0x90, 0x77a: 0x13d, + // Block 0x1e, offset 0x780 + 0x7a0: 0x83, 0x7a1: 0x83, 0x7a2: 0x83, 0x7a3: 0x83, 0x7a4: 0x83, 0x7a5: 0x83, 0x7a6: 0x83, 0x7a7: 0x83, + 0x7a8: 0x13e, + // Block 0x1f, offset 0x7c0 + 0x7d0: 0x0e, 0x7d1: 0x0f, 0x7d2: 0x10, 0x7d3: 0x11, 0x7d4: 0x12, 0x7d6: 0x13, 0x7d7: 0x0a, + 0x7d8: 0x14, 0x7db: 0x15, 0x7dd: 0x16, 0x7de: 0x17, 0x7df: 0x18, + 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, + 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x19, 0x7eb: 0x1a, 0x7ec: 0x1b, 0x7ef: 0x1c, + // Block 0x20, offset 0x800 + 0x800: 0x13f, 0x801: 0x3e, 0x804: 0x3e, 0x805: 0x3e, 0x806: 0x3e, 0x807: 0x140, + // Block 0x21, offset 0x840 + 0x840: 0x3e, 0x841: 0x3e, 0x842: 0x3e, 0x843: 0x3e, 0x844: 0x3e, 0x845: 0x3e, 0x846: 0x3e, 0x847: 0x3e, + 0x848: 0x3e, 0x849: 0x3e, 0x84a: 0x3e, 0x84b: 0x3e, 0x84c: 0x3e, 0x84d: 0x3e, 0x84e: 0x3e, 0x84f: 0x3e, + 0x850: 0x3e, 0x851: 0x3e, 0x852: 0x3e, 0x853: 0x3e, 0x854: 0x3e, 0x855: 0x3e, 0x856: 0x3e, 0x857: 0x3e, + 0x858: 0x3e, 0x859: 0x3e, 0x85a: 0x3e, 0x85b: 0x3e, 0x85c: 0x3e, 0x85d: 0x3e, 0x85e: 0x3e, 0x85f: 0x3e, + 0x860: 0x3e, 0x861: 0x3e, 0x862: 0x3e, 0x863: 0x3e, 0x864: 0x3e, 0x865: 0x3e, 0x866: 0x3e, 0x867: 0x3e, + 0x868: 0x3e, 0x869: 0x3e, 0x86a: 0x3e, 0x86b: 0x3e, 0x86c: 0x3e, 0x86d: 0x3e, 0x86e: 0x3e, 0x86f: 0x3e, + 0x870: 0x3e, 0x871: 0x3e, 0x872: 0x3e, 0x873: 0x3e, 0x874: 0x3e, 0x875: 0x3e, 0x876: 0x3e, 0x877: 0x3e, + 0x878: 0x3e, 0x879: 0x3e, 0x87a: 0x3e, 0x87b: 0x3e, 0x87c: 0x3e, 0x87d: 0x3e, 0x87e: 0x3e, 0x87f: 0x141, + // Block 0x22, offset 0x880 + 0x8a0: 0x1e, + 0x8b0: 0x0c, 0x8b1: 0x0c, 0x8b2: 0x0c, 0x8b3: 0x0c, 0x8b4: 0x0c, 0x8b5: 0x0c, 0x8b6: 0x0c, 0x8b7: 0x0c, + 0x8b8: 0x0c, 0x8b9: 0x0c, 0x8ba: 0x0c, 0x8bb: 0x0c, 0x8bc: 0x0c, 0x8bd: 0x0c, 0x8be: 0x0c, 0x8bf: 0x1f, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0c, 0x8c1: 0x0c, 0x8c2: 0x0c, 0x8c3: 0x0c, 0x8c4: 0x0c, 0x8c5: 0x0c, 0x8c6: 0x0c, 0x8c7: 0x0c, + 0x8c8: 0x0c, 0x8c9: 0x0c, 0x8ca: 0x0c, 0x8cb: 0x0c, 0x8cc: 0x0c, 0x8cd: 0x0c, 0x8ce: 0x0c, 0x8cf: 0x1f, +} + +// Total table size 25344 bytes (24KiB); checksum: 811C9DC5 diff --git a/vendor/golang.org/x/text/secure/precis/tables_test.go b/vendor/golang.org/x/text/secure/precis/tables_test.go new file mode 100644 index 0000000..67f5b40 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/tables_test.go @@ -0,0 +1,69 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import ( + "testing" + "unicode" + "unicode/utf8" + + "golang.org/x/text/runes" + "golang.org/x/text/unicode/rangetable" +) + +type tableTest struct { + rangeTable *unicode.RangeTable + prop property +} + +var exceptions = runes.Predicate(func(r rune) bool { + switch uint32(r) { + case 0x00DF, 0x03C2, 0x06FD, 0x06FE, 0x0F0B, 0x3007, 0x00B7, 0x0375, 0x05F3, + 0x05F4, 0x30FB, 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, + 0x0667, 0x0668, 0x0669, 0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, + 0x06F6, 0x06F7, 0x06F8, 0x06F9, 0x0640, 0x07FA, 0x302E, 0x302F, 0x3031, + 0x3032, 0x3033, 0x3034, 0x3035, 0x303B: + return true + default: + return false + } +}) + +// Ensure that certain properties were generated correctly. +func TestTable(t *testing.T) { + tests := []tableTest{ + tableTest{ + rangetable.Merge( + unicode.Lt, unicode.Nl, unicode.No, // Other letter digits + unicode.Me, // Modifiers + unicode.Zs, // Spaces + unicode.So, // Symbols + unicode.Pi, unicode.Pf, // Punctuation + ), + idDisOrFreePVal, + }, + tableTest{ + rangetable.New(0x30000, 0x30101, 0xDFFFF), + unassigned, + }, + } + + assigned := rangetable.Assigned(UnicodeVersion) + + for _, test := range tests { + rangetable.Visit(test.rangeTable, func(r rune) { + if !unicode.In(r, assigned) { + return + } + b := make([]byte, 4) + n := utf8.EncodeRune(b, r) + trieval, _ := dpTrie.lookup(b[:n]) + p := entry(trieval).property() + if p != test.prop && !exceptions.Contains(r) { + t.Errorf("%U: got %+x; want %+x", r, test.prop, p) + } + }) + } +} diff --git a/vendor/golang.org/x/text/secure/precis/transformer.go b/vendor/golang.org/x/text/secure/precis/transformer.go new file mode 100644 index 0000000..97ce5e7 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/transformer.go @@ -0,0 +1,32 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package precis + +import "golang.org/x/text/transform" + +// Transformer implements the transform.Transformer interface. +type Transformer struct { + t transform.Transformer +} + +// Reset implements the transform.Transformer interface. +func (t Transformer) Reset() { t.t.Reset() } + +// Transform implements the transform.Transformer interface. +func (t Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + return t.t.Transform(dst, src, atEOF) +} + +// Bytes returns a new byte slice with the result of applying t to b. +func (t Transformer) Bytes(b []byte) []byte { + b, _, _ = transform.Bytes(t, b) + return b +} + +// String returns a string with the result of applying t to s. +func (t Transformer) String(s string) string { + s, _, _ = transform.String(t, s) + return s +} diff --git a/vendor/golang.org/x/text/secure/precis/trieval.go b/vendor/golang.org/x/text/secure/precis/trieval.go new file mode 100644 index 0000000..4833f96 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/trieval.go @@ -0,0 +1,64 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package precis + +// entry is the entry of a trie table +// 7..6 property (unassigned, disallowed, maybe, valid) +// 5..0 category +type entry uint8 + +const ( + propShift = 6 + propMask = 0xc0 + catMask = 0x3f +) + +func (e entry) property() property { return property(e & propMask) } +func (e entry) category() category { return category(e & catMask) } + +type property uint8 + +// The order of these constants matter. A Profile may consider runes to be +// allowed either from pValid or idDisOrFreePVal. +const ( + unassigned property = iota << propShift + disallowed + idDisOrFreePVal // disallowed for Identifier, pValid for FreeForm + pValid +) + +// compute permutations of all properties and specialCategories. +type category uint8 + +const ( + other category = iota + + // Special rune types + joiningL + joiningD + joiningT + joiningR + viramaModifier + viramaJoinT // Virama + JoiningT + latinSmallL // U+006c + greek + greekJoinT // Greek + JoiningT + hebrew + hebrewJoinT // Hebrew + JoiningT + japanese // hirigana, katakana, han + + // Special rune types associated with contextual rules defined in + // https://tools.ietf.org/html/rfc5892#appendix-A. + // ContextO + zeroWidthNonJoiner // rule 1 + zeroWidthJoiner // rule 2 + // ContextJ + middleDot // rule 3 + greekLowerNumeralSign // rule 4 + hebrewPreceding // rule 5 and 6 + katakanaMiddleDot // rule 7 + arabicIndicDigit // rule 8 + extendedArabicIndicDigit // rule 9 + + numCategories +) diff --git a/vendor/golang.org/x/text/transform/examples_test.go b/vendor/golang.org/x/text/transform/examples_test.go new file mode 100644 index 0000000..f2e284d --- /dev/null +++ b/vendor/golang.org/x/text/transform/examples_test.go @@ -0,0 +1,37 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package transform_test + +import ( + "fmt" + "unicode" + + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" +) + +func ExampleRemoveFunc() { + input := []byte(`tschüß; до свидания`) + + b := make([]byte, len(input)) + + t := transform.RemoveFunc(unicode.IsSpace) + n, _, _ := t.Transform(b, input, true) + fmt.Println(string(b[:n])) + + t = transform.RemoveFunc(func(r rune) bool { + return !unicode.Is(unicode.Latin, r) + }) + n, _, _ = t.Transform(b, input, true) + fmt.Println(string(b[:n])) + + n, _, _ = t.Transform(b, norm.NFD.Bytes(input), true) + fmt.Println(string(b[:n])) + + // Output: + // tschüß;досвидания + // tschüß + // tschuß +} diff --git a/vendor/golang.org/x/text/transform/transform.go b/vendor/golang.org/x/text/transform/transform.go new file mode 100644 index 0000000..fe47b9b --- /dev/null +++ b/vendor/golang.org/x/text/transform/transform.go @@ -0,0 +1,705 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package transform provides reader and writer wrappers that transform the +// bytes passing through as well as various transformations. Example +// transformations provided by other packages include normalization and +// conversion between character sets. +package transform // import "golang.org/x/text/transform" + +import ( + "bytes" + "errors" + "io" + "unicode/utf8" +) + +var ( + // ErrShortDst means that the destination buffer was too short to + // receive all of the transformed bytes. + ErrShortDst = errors.New("transform: short destination buffer") + + // ErrShortSrc means that the source buffer has insufficient data to + // complete the transformation. + ErrShortSrc = errors.New("transform: short source buffer") + + // ErrEndOfSpan means that the input and output (the transformed input) + // are not identical. + ErrEndOfSpan = errors.New("transform: input and output are not identical") + + // errInconsistentByteCount means that Transform returned success (nil + // error) but also returned nSrc inconsistent with the src argument. + errInconsistentByteCount = errors.New("transform: inconsistent byte count returned") + + // errShortInternal means that an internal buffer is not large enough + // to make progress and the Transform operation must be aborted. + errShortInternal = errors.New("transform: short internal buffer") +) + +// Transformer transforms bytes. +type Transformer interface { + // Transform writes to dst the transformed bytes read from src, and + // returns the number of dst bytes written and src bytes read. The + // atEOF argument tells whether src represents the last bytes of the + // input. + // + // Callers should always process the nDst bytes produced and account + // for the nSrc bytes consumed before considering the error err. + // + // A nil error means that all of the transformed bytes (whether freshly + // transformed from src or left over from previous Transform calls) + // were written to dst. A nil error can be returned regardless of + // whether atEOF is true. If err is nil then nSrc must equal len(src); + // the converse is not necessarily true. + // + // ErrShortDst means that dst was too short to receive all of the + // transformed bytes. ErrShortSrc means that src had insufficient data + // to complete the transformation. If both conditions apply, then + // either error may be returned. Other than the error conditions listed + // here, implementations are free to report other errors that arise. + Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) + + // Reset resets the state and allows a Transformer to be reused. + Reset() +} + +// SpanningTransformer extends the Transformer interface with a Span method +// that determines how much of the input already conforms to the Transformer. +type SpanningTransformer interface { + Transformer + + // Span returns a position in src such that transforming src[:n] results in + // identical output src[:n] for these bytes. It does not necessarily return + // the largest such n. The atEOF argument tells whether src represents the + // last bytes of the input. + // + // Callers should always account for the n bytes consumed before + // considering the error err. + // + // A nil error means that all input bytes are known to be identical to the + // output produced by the Transformer. A nil error can be be returned + // regardless of whether atEOF is true. If err is nil, then then n must + // equal len(src); the converse is not necessarily true. + // + // ErrEndOfSpan means that the Transformer output may differ from the + // input after n bytes. Note that n may be len(src), meaning that the output + // would contain additional bytes after otherwise identical output. + // ErrShortSrc means that src had insufficient data to determine whether the + // remaining bytes would change. Other than the error conditions listed + // here, implementations are free to report other errors that arise. + // + // Calling Span can modify the Transformer state as a side effect. In + // effect, it does the transformation just as calling Transform would, only + // without copying to a destination buffer and only up to a point it can + // determine the input and output bytes are the same. This is obviously more + // limited than calling Transform, but can be more efficient in terms of + // copying and allocating buffers. Calls to Span and Transform may be + // interleaved. + Span(src []byte, atEOF bool) (n int, err error) +} + +// NopResetter can be embedded by implementations of Transformer to add a nop +// Reset method. +type NopResetter struct{} + +// Reset implements the Reset method of the Transformer interface. +func (NopResetter) Reset() {} + +// Reader wraps another io.Reader by transforming the bytes read. +type Reader struct { + r io.Reader + t Transformer + err error + + // dst[dst0:dst1] contains bytes that have been transformed by t but + // not yet copied out via Read. + dst []byte + dst0, dst1 int + + // src[src0:src1] contains bytes that have been read from r but not + // yet transformed through t. + src []byte + src0, src1 int + + // transformComplete is whether the transformation is complete, + // regardless of whether or not it was successful. + transformComplete bool +} + +const defaultBufSize = 4096 + +// NewReader returns a new Reader that wraps r by transforming the bytes read +// via t. It calls Reset on t. +func NewReader(r io.Reader, t Transformer) *Reader { + t.Reset() + return &Reader{ + r: r, + t: t, + dst: make([]byte, defaultBufSize), + src: make([]byte, defaultBufSize), + } +} + +// Read implements the io.Reader interface. +func (r *Reader) Read(p []byte) (int, error) { + n, err := 0, error(nil) + for { + // Copy out any transformed bytes and return the final error if we are done. + if r.dst0 != r.dst1 { + n = copy(p, r.dst[r.dst0:r.dst1]) + r.dst0 += n + if r.dst0 == r.dst1 && r.transformComplete { + return n, r.err + } + return n, nil + } else if r.transformComplete { + return 0, r.err + } + + // Try to transform some source bytes, or to flush the transformer if we + // are out of source bytes. We do this even if r.r.Read returned an error. + // As the io.Reader documentation says, "process the n > 0 bytes returned + // before considering the error". + if r.src0 != r.src1 || r.err != nil { + r.dst0 = 0 + r.dst1, n, err = r.t.Transform(r.dst, r.src[r.src0:r.src1], r.err == io.EOF) + r.src0 += n + + switch { + case err == nil: + if r.src0 != r.src1 { + r.err = errInconsistentByteCount + } + // The Transform call was successful; we are complete if we + // cannot read more bytes into src. + r.transformComplete = r.err != nil + continue + case err == ErrShortDst && (r.dst1 != 0 || n != 0): + // Make room in dst by copying out, and try again. + continue + case err == ErrShortSrc && r.src1-r.src0 != len(r.src) && r.err == nil: + // Read more bytes into src via the code below, and try again. + default: + r.transformComplete = true + // The reader error (r.err) takes precedence over the + // transformer error (err) unless r.err is nil or io.EOF. + if r.err == nil || r.err == io.EOF { + r.err = err + } + continue + } + } + + // Move any untransformed source bytes to the start of the buffer + // and read more bytes. + if r.src0 != 0 { + r.src0, r.src1 = 0, copy(r.src, r.src[r.src0:r.src1]) + } + n, r.err = r.r.Read(r.src[r.src1:]) + r.src1 += n + } +} + +// TODO: implement ReadByte (and ReadRune??). + +// Writer wraps another io.Writer by transforming the bytes read. +// The user needs to call Close to flush unwritten bytes that may +// be buffered. +type Writer struct { + w io.Writer + t Transformer + dst []byte + + // src[:n] contains bytes that have not yet passed through t. + src []byte + n int +} + +// NewWriter returns a new Writer that wraps w by transforming the bytes written +// via t. It calls Reset on t. +func NewWriter(w io.Writer, t Transformer) *Writer { + t.Reset() + return &Writer{ + w: w, + t: t, + dst: make([]byte, defaultBufSize), + src: make([]byte, defaultBufSize), + } +} + +// Write implements the io.Writer interface. If there are not enough +// bytes available to complete a Transform, the bytes will be buffered +// for the next write. Call Close to convert the remaining bytes. +func (w *Writer) Write(data []byte) (n int, err error) { + src := data + if w.n > 0 { + // Append bytes from data to the last remainder. + // TODO: limit the amount copied on first try. + n = copy(w.src[w.n:], data) + w.n += n + src = w.src[:w.n] + } + for { + nDst, nSrc, err := w.t.Transform(w.dst, src, false) + if _, werr := w.w.Write(w.dst[:nDst]); werr != nil { + return n, werr + } + src = src[nSrc:] + if w.n == 0 { + n += nSrc + } else if len(src) <= n { + // Enough bytes from w.src have been consumed. We make src point + // to data instead to reduce the copying. + w.n = 0 + n -= len(src) + src = data[n:] + if n < len(data) && (err == nil || err == ErrShortSrc) { + continue + } + } + switch err { + case ErrShortDst: + // This error is okay as long as we are making progress. + if nDst > 0 || nSrc > 0 { + continue + } + case ErrShortSrc: + if len(src) < len(w.src) { + m := copy(w.src, src) + // If w.n > 0, bytes from data were already copied to w.src and n + // was already set to the number of bytes consumed. + if w.n == 0 { + n += m + } + w.n = m + err = nil + } else if nDst > 0 || nSrc > 0 { + // Not enough buffer to store the remainder. Keep processing as + // long as there is progress. Without this case, transforms that + // require a lookahead larger than the buffer may result in an + // error. This is not something one may expect to be common in + // practice, but it may occur when buffers are set to small + // sizes during testing. + continue + } + case nil: + if w.n > 0 { + err = errInconsistentByteCount + } + } + return n, err + } +} + +// Close implements the io.Closer interface. +func (w *Writer) Close() error { + src := w.src[:w.n] + for { + nDst, nSrc, err := w.t.Transform(w.dst, src, true) + if _, werr := w.w.Write(w.dst[:nDst]); werr != nil { + return werr + } + if err != ErrShortDst { + return err + } + src = src[nSrc:] + } +} + +type nop struct{ NopResetter } + +func (nop) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := copy(dst, src) + if n < len(src) { + err = ErrShortDst + } + return n, n, err +} + +func (nop) Span(src []byte, atEOF bool) (n int, err error) { + return len(src), nil +} + +type discard struct{ NopResetter } + +func (discard) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + return 0, len(src), nil +} + +var ( + // Discard is a Transformer for which all Transform calls succeed + // by consuming all bytes and writing nothing. + Discard Transformer = discard{} + + // Nop is a SpanningTransformer that copies src to dst. + Nop SpanningTransformer = nop{} +) + +// chain is a sequence of links. A chain with N Transformers has N+1 links and +// N+1 buffers. Of those N+1 buffers, the first and last are the src and dst +// buffers given to chain.Transform and the middle N-1 buffers are intermediate +// buffers owned by the chain. The i'th link transforms bytes from the i'th +// buffer chain.link[i].b at read offset chain.link[i].p to the i+1'th buffer +// chain.link[i+1].b at write offset chain.link[i+1].n, for i in [0, N). +type chain struct { + link []link + err error + // errStart is the index at which the error occurred plus 1. Processing + // errStart at this level at the next call to Transform. As long as + // errStart > 0, chain will not consume any more source bytes. + errStart int +} + +func (c *chain) fatalError(errIndex int, err error) { + if i := errIndex + 1; i > c.errStart { + c.errStart = i + c.err = err + } +} + +type link struct { + t Transformer + // b[p:n] holds the bytes to be transformed by t. + b []byte + p int + n int +} + +func (l *link) src() []byte { + return l.b[l.p:l.n] +} + +func (l *link) dst() []byte { + return l.b[l.n:] +} + +// Chain returns a Transformer that applies t in sequence. +func Chain(t ...Transformer) Transformer { + if len(t) == 0 { + return nop{} + } + c := &chain{link: make([]link, len(t)+1)} + for i, tt := range t { + c.link[i].t = tt + } + // Allocate intermediate buffers. + b := make([][defaultBufSize]byte, len(t)-1) + for i := range b { + c.link[i+1].b = b[i][:] + } + return c +} + +// Reset resets the state of Chain. It calls Reset on all the Transformers. +func (c *chain) Reset() { + for i, l := range c.link { + if l.t != nil { + l.t.Reset() + } + c.link[i].p, c.link[i].n = 0, 0 + } +} + +// TODO: make chain use Span (is going to be fun to implement!) + +// Transform applies the transformers of c in sequence. +func (c *chain) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + // Set up src and dst in the chain. + srcL := &c.link[0] + dstL := &c.link[len(c.link)-1] + srcL.b, srcL.p, srcL.n = src, 0, len(src) + dstL.b, dstL.n = dst, 0 + var lastFull, needProgress bool // for detecting progress + + // i is the index of the next Transformer to apply, for i in [low, high]. + // low is the lowest index for which c.link[low] may still produce bytes. + // high is the highest index for which c.link[high] has a Transformer. + // The error returned by Transform determines whether to increase or + // decrease i. We try to completely fill a buffer before converting it. + for low, i, high := c.errStart, c.errStart, len(c.link)-2; low <= i && i <= high; { + in, out := &c.link[i], &c.link[i+1] + nDst, nSrc, err0 := in.t.Transform(out.dst(), in.src(), atEOF && low == i) + out.n += nDst + in.p += nSrc + if i > 0 && in.p == in.n { + in.p, in.n = 0, 0 + } + needProgress, lastFull = lastFull, false + switch err0 { + case ErrShortDst: + // Process the destination buffer next. Return if we are already + // at the high index. + if i == high { + return dstL.n, srcL.p, ErrShortDst + } + if out.n != 0 { + i++ + // If the Transformer at the next index is not able to process any + // source bytes there is nothing that can be done to make progress + // and the bytes will remain unprocessed. lastFull is used to + // detect this and break out of the loop with a fatal error. + lastFull = true + continue + } + // The destination buffer was too small, but is completely empty. + // Return a fatal error as this transformation can never complete. + c.fatalError(i, errShortInternal) + case ErrShortSrc: + if i == 0 { + // Save ErrShortSrc in err. All other errors take precedence. + err = ErrShortSrc + break + } + // Source bytes were depleted before filling up the destination buffer. + // Verify we made some progress, move the remaining bytes to the errStart + // and try to get more source bytes. + if needProgress && nSrc == 0 || in.n-in.p == len(in.b) { + // There were not enough source bytes to proceed while the source + // buffer cannot hold any more bytes. Return a fatal error as this + // transformation can never complete. + c.fatalError(i, errShortInternal) + break + } + // in.b is an internal buffer and we can make progress. + in.p, in.n = 0, copy(in.b, in.src()) + fallthrough + case nil: + // if i == low, we have depleted the bytes at index i or any lower levels. + // In that case we increase low and i. In all other cases we decrease i to + // fetch more bytes before proceeding to the next index. + if i > low { + i-- + continue + } + default: + c.fatalError(i, err0) + } + // Exhausted level low or fatal error: increase low and continue + // to process the bytes accepted so far. + i++ + low = i + } + + // If c.errStart > 0, this means we found a fatal error. We will clear + // all upstream buffers. At this point, no more progress can be made + // downstream, as Transform would have bailed while handling ErrShortDst. + if c.errStart > 0 { + for i := 1; i < c.errStart; i++ { + c.link[i].p, c.link[i].n = 0, 0 + } + err, c.errStart, c.err = c.err, 0, nil + } + return dstL.n, srcL.p, err +} + +// Deprecated: use runes.Remove instead. +func RemoveFunc(f func(r rune) bool) Transformer { + return removeF(f) +} + +type removeF func(r rune) bool + +func (removeF) Reset() {} + +// Transform implements the Transformer interface. +func (t removeF) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for r, sz := rune(0), 0; len(src) > 0; src = src[sz:] { + + if r = rune(src[0]); r < utf8.RuneSelf { + sz = 1 + } else { + r, sz = utf8.DecodeRune(src) + + if sz == 1 { + // Invalid rune. + if !atEOF && !utf8.FullRune(src) { + err = ErrShortSrc + break + } + // We replace illegal bytes with RuneError. Not doing so might + // otherwise turn a sequence of invalid UTF-8 into valid UTF-8. + // The resulting byte sequence may subsequently contain runes + // for which t(r) is true that were passed unnoticed. + if !t(r) { + if nDst+3 > len(dst) { + err = ErrShortDst + break + } + nDst += copy(dst[nDst:], "\uFFFD") + } + nSrc++ + continue + } + } + + if !t(r) { + if nDst+sz > len(dst) { + err = ErrShortDst + break + } + nDst += copy(dst[nDst:], src[:sz]) + } + nSrc += sz + } + return +} + +// grow returns a new []byte that is longer than b, and copies the first n bytes +// of b to the start of the new slice. +func grow(b []byte, n int) []byte { + m := len(b) + if m <= 32 { + m = 64 + } else if m <= 256 { + m *= 2 + } else { + m += m >> 1 + } + buf := make([]byte, m) + copy(buf, b[:n]) + return buf +} + +const initialBufSize = 128 + +// String returns a string with the result of converting s[:n] using t, where +// n <= len(s). If err == nil, n will be len(s). It calls Reset on t. +func String(t Transformer, s string) (result string, n int, err error) { + t.Reset() + if s == "" { + // Fast path for the common case for empty input. Results in about a + // 86% reduction of running time for BenchmarkStringLowerEmpty. + if _, _, err := t.Transform(nil, nil, true); err == nil { + return "", 0, nil + } + } + + // Allocate only once. Note that both dst and src escape when passed to + // Transform. + buf := [2 * initialBufSize]byte{} + dst := buf[:initialBufSize:initialBufSize] + src := buf[initialBufSize : 2*initialBufSize] + + // The input string s is transformed in multiple chunks (starting with a + // chunk size of initialBufSize). nDst and nSrc are per-chunk (or + // per-Transform-call) indexes, pDst and pSrc are overall indexes. + nDst, nSrc := 0, 0 + pDst, pSrc := 0, 0 + + // pPrefix is the length of a common prefix: the first pPrefix bytes of the + // result will equal the first pPrefix bytes of s. It is not guaranteed to + // be the largest such value, but if pPrefix, len(result) and len(s) are + // all equal after the final transform (i.e. calling Transform with atEOF + // being true returned nil error) then we don't need to allocate a new + // result string. + pPrefix := 0 + for { + // Invariant: pDst == pPrefix && pSrc == pPrefix. + + n := copy(src, s[pSrc:]) + nDst, nSrc, err = t.Transform(dst, src[:n], pSrc+n == len(s)) + pDst += nDst + pSrc += nSrc + + // TODO: let transformers implement an optional Spanner interface, akin + // to norm's QuickSpan. This would even allow us to avoid any allocation. + if !bytes.Equal(dst[:nDst], src[:nSrc]) { + break + } + pPrefix = pSrc + if err == ErrShortDst { + // A buffer can only be short if a transformer modifies its input. + break + } else if err == ErrShortSrc { + if nSrc == 0 { + // No progress was made. + break + } + // Equal so far and !atEOF, so continue checking. + } else if err != nil || pPrefix == len(s) { + return string(s[:pPrefix]), pPrefix, err + } + } + // Post-condition: pDst == pPrefix + nDst && pSrc == pPrefix + nSrc. + + // We have transformed the first pSrc bytes of the input s to become pDst + // transformed bytes. Those transformed bytes are discontiguous: the first + // pPrefix of them equal s[:pPrefix] and the last nDst of them equal + // dst[:nDst]. We copy them around, into a new dst buffer if necessary, so + // that they become one contiguous slice: dst[:pDst]. + if pPrefix != 0 { + newDst := dst + if pDst > len(newDst) { + newDst = make([]byte, len(s)+nDst-nSrc) + } + copy(newDst[pPrefix:pDst], dst[:nDst]) + copy(newDst[:pPrefix], s[:pPrefix]) + dst = newDst + } + + // Prevent duplicate Transform calls with atEOF being true at the end of + // the input. Also return if we have an unrecoverable error. + if (err == nil && pSrc == len(s)) || + (err != nil && err != ErrShortDst && err != ErrShortSrc) { + return string(dst[:pDst]), pSrc, err + } + + // Transform the remaining input, growing dst and src buffers as necessary. + for { + n := copy(src, s[pSrc:]) + nDst, nSrc, err := t.Transform(dst[pDst:], src[:n], pSrc+n == len(s)) + pDst += nDst + pSrc += nSrc + + // If we got ErrShortDst or ErrShortSrc, do not grow as long as we can + // make progress. This may avoid excessive allocations. + if err == ErrShortDst { + if nDst == 0 { + dst = grow(dst, pDst) + } + } else if err == ErrShortSrc { + if nSrc == 0 { + src = grow(src, 0) + } + } else if err != nil || pSrc == len(s) { + return string(dst[:pDst]), pSrc, err + } + } +} + +// Bytes returns a new byte slice with the result of converting b[:n] using t, +// where n <= len(b). If err == nil, n will be len(b). It calls Reset on t. +func Bytes(t Transformer, b []byte) (result []byte, n int, err error) { + return doAppend(t, 0, make([]byte, len(b)), b) +} + +// Append appends the result of converting src[:n] using t to dst, where +// n <= len(src), If err == nil, n will be len(src). It calls Reset on t. +func Append(t Transformer, dst, src []byte) (result []byte, n int, err error) { + if len(dst) == cap(dst) { + n := len(src) + len(dst) // It is okay for this to be 0. + b := make([]byte, n) + dst = b[:copy(b, dst)] + } + return doAppend(t, len(dst), dst[:cap(dst)], src) +} + +func doAppend(t Transformer, pDst int, dst, src []byte) (result []byte, n int, err error) { + t.Reset() + pSrc := 0 + for { + nDst, nSrc, err := t.Transform(dst[pDst:], src[pSrc:], true) + pDst += nDst + pSrc += nSrc + if err != ErrShortDst { + return dst[:pDst], pSrc, err + } + + // Grow the destination buffer, but do not grow as long as we can make + // progress. This may avoid excessive allocations. + if nDst == 0 { + dst = grow(dst, pDst) + } + } +} diff --git a/vendor/golang.org/x/text/transform/transform_test.go b/vendor/golang.org/x/text/transform/transform_test.go new file mode 100644 index 0000000..771633d --- /dev/null +++ b/vendor/golang.org/x/text/transform/transform_test.go @@ -0,0 +1,1317 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package transform + +import ( + "bytes" + "errors" + "fmt" + "io/ioutil" + "strconv" + "strings" + "testing" + "time" + "unicode/utf8" + + "golang.org/x/text/internal/testtext" +) + +type lowerCaseASCII struct{ NopResetter } + +func (lowerCaseASCII) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := len(src) + if n > len(dst) { + n, err = len(dst), ErrShortDst + } + for i, c := range src[:n] { + if 'A' <= c && c <= 'Z' { + c += 'a' - 'A' + } + dst[i] = c + } + return n, n, err +} + +// lowerCaseASCIILookahead lowercases the string and reports ErrShortSrc as long +// as the input is not atEOF. +type lowerCaseASCIILookahead struct{ NopResetter } + +func (lowerCaseASCIILookahead) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := len(src) + if n > len(dst) { + n, err = len(dst), ErrShortDst + } + for i, c := range src[:n] { + if 'A' <= c && c <= 'Z' { + c += 'a' - 'A' + } + dst[i] = c + } + if !atEOF { + err = ErrShortSrc + } + return n, n, err +} + +var errYouMentionedX = errors.New("you mentioned X") + +type dontMentionX struct{ NopResetter } + +func (dontMentionX) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := len(src) + if n > len(dst) { + n, err = len(dst), ErrShortDst + } + for i, c := range src[:n] { + if c == 'X' { + return i, i, errYouMentionedX + } + dst[i] = c + } + return n, n, err +} + +var errAtEnd = errors.New("error after all text") + +type errorAtEnd struct{ NopResetter } + +func (errorAtEnd) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := copy(dst, src) + if n < len(src) { + return n, n, ErrShortDst + } + if atEOF { + return n, n, errAtEnd + } + return n, n, nil +} + +type replaceWithConstant struct { + replacement string + written int +} + +func (t *replaceWithConstant) Reset() { + t.written = 0 +} + +func (t *replaceWithConstant) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if atEOF { + nDst = copy(dst, t.replacement[t.written:]) + t.written += nDst + if t.written < len(t.replacement) { + err = ErrShortDst + } + } + return nDst, len(src), err +} + +type addAnXAtTheEnd struct{ NopResetter } + +func (addAnXAtTheEnd) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := copy(dst, src) + if n < len(src) { + return n, n, ErrShortDst + } + if !atEOF { + return n, n, nil + } + if len(dst) == n { + return n, n, ErrShortDst + } + dst[n] = 'X' + return n + 1, n, nil +} + +// doublerAtEOF is a strange Transformer that transforms "this" to "tthhiiss", +// but only if atEOF is true. +type doublerAtEOF struct{ NopResetter } + +func (doublerAtEOF) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if !atEOF { + return 0, 0, ErrShortSrc + } + for i, c := range src { + if 2*i+2 >= len(dst) { + return 2 * i, i, ErrShortDst + } + dst[2*i+0] = c + dst[2*i+1] = c + } + return 2 * len(src), len(src), nil +} + +// rleDecode and rleEncode implement a toy run-length encoding: "aabbbbbbbbbb" +// is encoded as "2a10b". The decoding is assumed to not contain any numbers. + +type rleDecode struct{ NopResetter } + +func (rleDecode) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { +loop: + for len(src) > 0 { + n := 0 + for i, c := range src { + if '0' <= c && c <= '9' { + n = 10*n + int(c-'0') + continue + } + if i == 0 { + return nDst, nSrc, errors.New("rleDecode: bad input") + } + if n > len(dst) { + return nDst, nSrc, ErrShortDst + } + for j := 0; j < n; j++ { + dst[j] = c + } + dst, src = dst[n:], src[i+1:] + nDst, nSrc = nDst+n, nSrc+i+1 + continue loop + } + if atEOF { + return nDst, nSrc, errors.New("rleDecode: bad input") + } + return nDst, nSrc, ErrShortSrc + } + return nDst, nSrc, nil +} + +type rleEncode struct { + NopResetter + + // allowStutter means that "xxxxxxxx" can be encoded as "5x3x" + // instead of always as "8x". + allowStutter bool +} + +func (e rleEncode) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for len(src) > 0 { + n, c0 := len(src), src[0] + for i, c := range src[1:] { + if c != c0 { + n = i + 1 + break + } + } + if n == len(src) && !atEOF && !e.allowStutter { + return nDst, nSrc, ErrShortSrc + } + s := strconv.Itoa(n) + if len(s) >= len(dst) { + return nDst, nSrc, ErrShortDst + } + copy(dst, s) + dst[len(s)] = c0 + dst, src = dst[len(s)+1:], src[n:] + nDst, nSrc = nDst+len(s)+1, nSrc+n + } + return nDst, nSrc, nil +} + +// trickler consumes all input bytes, but writes a single byte at a time to dst. +type trickler []byte + +func (t *trickler) Reset() { + *t = nil +} + +func (t *trickler) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + *t = append(*t, src...) + if len(*t) == 0 { + return 0, 0, nil + } + if len(dst) == 0 { + return 0, len(src), ErrShortDst + } + dst[0] = (*t)[0] + *t = (*t)[1:] + if len(*t) > 0 { + err = ErrShortDst + } + return 1, len(src), err +} + +// delayedTrickler is like trickler, but delays writing output to dst. This is +// highly unlikely to be relevant in practice, but it seems like a good idea +// to have some tolerance as long as progress can be detected. +type delayedTrickler []byte + +func (t *delayedTrickler) Reset() { + *t = nil +} + +func (t *delayedTrickler) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if len(*t) > 0 && len(dst) > 0 { + dst[0] = (*t)[0] + *t = (*t)[1:] + nDst = 1 + } + *t = append(*t, src...) + if len(*t) > 0 { + err = ErrShortDst + } + return nDst, len(src), err +} + +type testCase struct { + desc string + t Transformer + src string + dstSize int + srcSize int + ioSize int + wantStr string + wantErr error + wantIter int // number of iterations taken; 0 means we don't care. +} + +func (t testCase) String() string { + return tstr(t.t) + "; " + t.desc +} + +func tstr(t Transformer) string { + if stringer, ok := t.(fmt.Stringer); ok { + return stringer.String() + } + s := fmt.Sprintf("%T", t) + return s[1+strings.Index(s, "."):] +} + +func (c chain) String() string { + buf := &bytes.Buffer{} + buf.WriteString("Chain(") + for i, l := range c.link[:len(c.link)-1] { + if i != 0 { + fmt.Fprint(buf, ", ") + } + buf.WriteString(tstr(l.t)) + } + buf.WriteString(")") + return buf.String() +} + +var testCases = []testCase{ + { + desc: "empty", + t: lowerCaseASCII{}, + src: "", + dstSize: 100, + srcSize: 100, + wantStr: "", + }, + + { + desc: "basic", + t: lowerCaseASCII{}, + src: "Hello WORLD.", + dstSize: 100, + srcSize: 100, + wantStr: "hello world.", + }, + + { + desc: "small dst", + t: lowerCaseASCII{}, + src: "Hello WORLD.", + dstSize: 3, + srcSize: 100, + wantStr: "hello world.", + }, + + { + desc: "small src", + t: lowerCaseASCII{}, + src: "Hello WORLD.", + dstSize: 100, + srcSize: 4, + wantStr: "hello world.", + }, + + { + desc: "small buffers", + t: lowerCaseASCII{}, + src: "Hello WORLD.", + dstSize: 3, + srcSize: 4, + wantStr: "hello world.", + }, + + { + desc: "very small buffers", + t: lowerCaseASCII{}, + src: "Hello WORLD.", + dstSize: 1, + srcSize: 1, + wantStr: "hello world.", + }, + + { + desc: "small dst with lookahead", + t: lowerCaseASCIILookahead{}, + src: "Hello WORLD.", + dstSize: 3, + srcSize: 100, + wantStr: "hello world.", + }, + + { + desc: "small src with lookahead", + t: lowerCaseASCIILookahead{}, + src: "Hello WORLD.", + dstSize: 100, + srcSize: 4, + wantStr: "hello world.", + }, + + { + desc: "small buffers with lookahead", + t: lowerCaseASCIILookahead{}, + src: "Hello WORLD.", + dstSize: 3, + srcSize: 4, + wantStr: "hello world.", + }, + + { + desc: "very small buffers with lookahead", + t: lowerCaseASCIILookahead{}, + src: "Hello WORLD.", + dstSize: 1, + srcSize: 2, + wantStr: "hello world.", + }, + + { + desc: "user error", + t: dontMentionX{}, + src: "The First Rule of Transform Club: don't mention Mister X, ever.", + dstSize: 100, + srcSize: 100, + wantStr: "The First Rule of Transform Club: don't mention Mister ", + wantErr: errYouMentionedX, + }, + + { + desc: "user error at end", + t: errorAtEnd{}, + src: "All goes well until it doesn't.", + dstSize: 100, + srcSize: 100, + wantStr: "All goes well until it doesn't.", + wantErr: errAtEnd, + }, + + { + desc: "user error at end, incremental", + t: errorAtEnd{}, + src: "All goes well until it doesn't.", + dstSize: 10, + srcSize: 10, + wantStr: "All goes well until it doesn't.", + wantErr: errAtEnd, + }, + + { + desc: "replace entire non-empty string with one byte", + t: &replaceWithConstant{replacement: "X"}, + src: "none of this will be copied", + dstSize: 1, + srcSize: 10, + wantStr: "X", + }, + + { + desc: "replace entire empty string with one byte", + t: &replaceWithConstant{replacement: "X"}, + src: "", + dstSize: 1, + srcSize: 10, + wantStr: "X", + }, + + { + desc: "replace entire empty string with seven bytes", + t: &replaceWithConstant{replacement: "ABCDEFG"}, + src: "", + dstSize: 3, + srcSize: 10, + wantStr: "ABCDEFG", + }, + + { + desc: "add an X (initialBufSize-1)", + t: addAnXAtTheEnd{}, + src: aaa[:initialBufSize-1], + dstSize: 10, + srcSize: 10, + wantStr: aaa[:initialBufSize-1] + "X", + }, + + { + desc: "add an X (initialBufSize+0)", + t: addAnXAtTheEnd{}, + src: aaa[:initialBufSize+0], + dstSize: 10, + srcSize: 10, + wantStr: aaa[:initialBufSize+0] + "X", + }, + + { + desc: "add an X (initialBufSize+1)", + t: addAnXAtTheEnd{}, + src: aaa[:initialBufSize+1], + dstSize: 10, + srcSize: 10, + wantStr: aaa[:initialBufSize+1] + "X", + }, + + { + desc: "small buffers", + t: dontMentionX{}, + src: "The First Rule of Transform Club: don't mention Mister X, ever.", + dstSize: 10, + srcSize: 10, + wantStr: "The First Rule of Transform Club: don't mention Mister ", + wantErr: errYouMentionedX, + }, + + { + desc: "very small buffers", + t: dontMentionX{}, + src: "The First Rule of Transform Club: don't mention Mister X, ever.", + dstSize: 1, + srcSize: 1, + wantStr: "The First Rule of Transform Club: don't mention Mister ", + wantErr: errYouMentionedX, + }, + + { + desc: "only transform at EOF", + t: doublerAtEOF{}, + src: "this", + dstSize: 100, + srcSize: 100, + wantStr: "tthhiiss", + }, + + { + desc: "basic", + t: rleDecode{}, + src: "1a2b3c10d11e0f1g", + dstSize: 100, + srcSize: 100, + wantStr: "abbcccddddddddddeeeeeeeeeeeg", + }, + + { + desc: "long", + t: rleDecode{}, + src: "12a23b34c45d56e99z", + dstSize: 100, + srcSize: 100, + wantStr: strings.Repeat("a", 12) + + strings.Repeat("b", 23) + + strings.Repeat("c", 34) + + strings.Repeat("d", 45) + + strings.Repeat("e", 56) + + strings.Repeat("z", 99), + }, + + { + desc: "tight buffers", + t: rleDecode{}, + src: "1a2b3c10d11e0f1g", + dstSize: 11, + srcSize: 3, + wantStr: "abbcccddddddddddeeeeeeeeeeeg", + }, + + { + desc: "short dst", + t: rleDecode{}, + src: "1a2b3c10d11e0f1g", + dstSize: 10, + srcSize: 3, + wantStr: "abbcccdddddddddd", + wantErr: ErrShortDst, + }, + + { + desc: "short src", + t: rleDecode{}, + src: "1a2b3c10d11e0f1g", + dstSize: 11, + srcSize: 2, + ioSize: 2, + wantStr: "abbccc", + wantErr: ErrShortSrc, + }, + + { + desc: "basic", + t: rleEncode{}, + src: "abbcccddddddddddeeeeeeeeeeeg", + dstSize: 100, + srcSize: 100, + wantStr: "1a2b3c10d11e1g", + }, + + { + desc: "long", + t: rleEncode{}, + src: strings.Repeat("a", 12) + + strings.Repeat("b", 23) + + strings.Repeat("c", 34) + + strings.Repeat("d", 45) + + strings.Repeat("e", 56) + + strings.Repeat("z", 99), + dstSize: 100, + srcSize: 100, + wantStr: "12a23b34c45d56e99z", + }, + + { + desc: "tight buffers", + t: rleEncode{}, + src: "abbcccddddddddddeeeeeeeeeeeg", + dstSize: 3, + srcSize: 12, + wantStr: "1a2b3c10d11e1g", + }, + + { + desc: "short dst", + t: rleEncode{}, + src: "abbcccddddddddddeeeeeeeeeeeg", + dstSize: 2, + srcSize: 12, + wantStr: "1a2b3c", + wantErr: ErrShortDst, + }, + + { + desc: "short src", + t: rleEncode{}, + src: "abbcccddddddddddeeeeeeeeeeeg", + dstSize: 3, + srcSize: 11, + ioSize: 11, + wantStr: "1a2b3c10d", + wantErr: ErrShortSrc, + }, + + { + desc: "allowStutter = false", + t: rleEncode{allowStutter: false}, + src: "aaaabbbbbbbbccccddddd", + dstSize: 10, + srcSize: 10, + wantStr: "4a8b4c5d", + }, + + { + desc: "allowStutter = true", + t: rleEncode{allowStutter: true}, + src: "aaaabbbbbbbbccccddddd", + dstSize: 10, + srcSize: 10, + ioSize: 10, + wantStr: "4a6b2b4c4d1d", + }, + + { + desc: "trickler", + t: &trickler{}, + src: "abcdefghijklm", + dstSize: 3, + srcSize: 15, + wantStr: "abcdefghijklm", + }, + + { + desc: "delayedTrickler", + t: &delayedTrickler{}, + src: "abcdefghijklm", + dstSize: 3, + srcSize: 15, + wantStr: "abcdefghijklm", + }, +} + +func TestReader(t *testing.T) { + for _, tc := range testCases { + testtext.Run(t, tc.desc, func(t *testing.T) { + r := NewReader(strings.NewReader(tc.src), tc.t) + // Differently sized dst and src buffers are not part of the + // exported API. We override them manually. + r.dst = make([]byte, tc.dstSize) + r.src = make([]byte, tc.srcSize) + got, err := ioutil.ReadAll(r) + str := string(got) + if str != tc.wantStr || err != tc.wantErr { + t.Errorf("\ngot %q, %v\nwant %q, %v", str, err, tc.wantStr, tc.wantErr) + } + }) + } +} + +func TestWriter(t *testing.T) { + tests := append(testCases, chainTests()...) + for _, tc := range tests { + sizes := []int{1, 2, 3, 4, 5, 10, 100, 1000} + if tc.ioSize > 0 { + sizes = []int{tc.ioSize} + } + for _, sz := range sizes { + testtext.Run(t, fmt.Sprintf("%s/%d", tc.desc, sz), func(t *testing.T) { + bb := &bytes.Buffer{} + w := NewWriter(bb, tc.t) + // Differently sized dst and src buffers are not part of the + // exported API. We override them manually. + w.dst = make([]byte, tc.dstSize) + w.src = make([]byte, tc.srcSize) + src := make([]byte, sz) + var err error + for b := tc.src; len(b) > 0 && err == nil; { + n := copy(src, b) + b = b[n:] + m := 0 + m, err = w.Write(src[:n]) + if m != n && err == nil { + t.Errorf("did not consume all bytes %d < %d", m, n) + } + } + if err == nil { + err = w.Close() + } + str := bb.String() + if str != tc.wantStr || err != tc.wantErr { + t.Errorf("\ngot %q, %v\nwant %q, %v", str, err, tc.wantStr, tc.wantErr) + } + }) + } + } +} + +func TestNop(t *testing.T) { + testCases := []struct { + str string + dstSize int + err error + }{ + {"", 0, nil}, + {"", 10, nil}, + {"a", 0, ErrShortDst}, + {"a", 1, nil}, + {"a", 10, nil}, + } + for i, tc := range testCases { + dst := make([]byte, tc.dstSize) + nDst, nSrc, err := Nop.Transform(dst, []byte(tc.str), true) + want := tc.str + if tc.dstSize < len(want) { + want = want[:tc.dstSize] + } + if got := string(dst[:nDst]); got != want || err != tc.err || nSrc != nDst { + t.Errorf("%d:\ngot %q, %d, %v\nwant %q, %d, %v", i, got, nSrc, err, want, nDst, tc.err) + } + } +} + +func TestDiscard(t *testing.T) { + testCases := []struct { + str string + dstSize int + }{ + {"", 0}, + {"", 10}, + {"a", 0}, + {"ab", 10}, + } + for i, tc := range testCases { + nDst, nSrc, err := Discard.Transform(make([]byte, tc.dstSize), []byte(tc.str), true) + if nDst != 0 || nSrc != len(tc.str) || err != nil { + t.Errorf("%d:\ngot %q, %d, %v\nwant 0, %d, nil", i, nDst, nSrc, err, len(tc.str)) + } + } +} + +// mkChain creates a Chain transformer. x must be alternating between transformer +// and bufSize, like T, (sz, T)* +func mkChain(x ...interface{}) *chain { + t := []Transformer{} + for i := 0; i < len(x); i += 2 { + t = append(t, x[i].(Transformer)) + } + c := Chain(t...).(*chain) + for i, j := 1, 1; i < len(x); i, j = i+2, j+1 { + c.link[j].b = make([]byte, x[i].(int)) + } + return c +} + +func chainTests() []testCase { + return []testCase{ + { + desc: "nil error", + t: mkChain(rleEncode{}, 100, lowerCaseASCII{}), + src: "ABB", + dstSize: 100, + srcSize: 100, + wantStr: "1a2b", + wantErr: nil, + wantIter: 1, + }, + + { + desc: "short dst buffer", + t: mkChain(lowerCaseASCII{}, 3, rleDecode{}), + src: "1a2b3c10d11e0f1g", + dstSize: 10, + srcSize: 3, + wantStr: "abbcccdddddddddd", + wantErr: ErrShortDst, + }, + + { + desc: "short internal dst buffer", + t: mkChain(lowerCaseASCII{}, 3, rleDecode{}, 10, Nop), + src: "1a2b3c10d11e0f1g", + dstSize: 100, + srcSize: 3, + wantStr: "abbcccdddddddddd", + wantErr: errShortInternal, + }, + + { + desc: "short internal dst buffer from input", + t: mkChain(rleDecode{}, 10, Nop), + src: "1a2b3c10d11e0f1g", + dstSize: 100, + srcSize: 3, + wantStr: "abbcccdddddddddd", + wantErr: errShortInternal, + }, + + { + desc: "empty short internal dst buffer", + t: mkChain(lowerCaseASCII{}, 3, rleDecode{}, 10, Nop), + src: "4a7b11e0f1g", + dstSize: 100, + srcSize: 3, + wantStr: "aaaabbbbbbb", + wantErr: errShortInternal, + }, + + { + desc: "empty short internal dst buffer from input", + t: mkChain(rleDecode{}, 10, Nop), + src: "4a7b11e0f1g", + dstSize: 100, + srcSize: 3, + wantStr: "aaaabbbbbbb", + wantErr: errShortInternal, + }, + + { + desc: "short internal src buffer after full dst buffer", + t: mkChain(Nop, 5, rleEncode{}, 10, Nop), + src: "cccccddddd", + dstSize: 100, + srcSize: 100, + wantStr: "", + wantErr: errShortInternal, + wantIter: 1, + }, + + { + desc: "short internal src buffer after short dst buffer; test lastFull", + t: mkChain(rleDecode{}, 5, rleEncode{}, 4, Nop), + src: "2a1b4c6d", + dstSize: 100, + srcSize: 100, + wantStr: "2a1b", + wantErr: errShortInternal, + }, + + { + desc: "short internal src buffer after successful complete fill", + t: mkChain(Nop, 3, rleDecode{}), + src: "123a4b", + dstSize: 4, + srcSize: 3, + wantStr: "", + wantErr: errShortInternal, + wantIter: 1, + }, + + { + desc: "short internal src buffer after short dst buffer; test lastFull", + t: mkChain(rleDecode{}, 5, rleEncode{}), + src: "2a1b4c6d", + dstSize: 4, + srcSize: 100, + wantStr: "2a1b", + wantErr: errShortInternal, + }, + + { + desc: "short src buffer", + t: mkChain(rleEncode{}, 5, Nop), + src: "abbcccddddeeeee", + dstSize: 4, + srcSize: 4, + ioSize: 4, + wantStr: "1a2b3c", + wantErr: ErrShortSrc, + }, + + { + desc: "process all in one go", + t: mkChain(rleEncode{}, 5, Nop), + src: "abbcccddddeeeeeffffff", + dstSize: 100, + srcSize: 100, + wantStr: "1a2b3c4d5e6f", + wantErr: nil, + wantIter: 1, + }, + + { + desc: "complete processing downstream after error", + t: mkChain(dontMentionX{}, 2, rleDecode{}, 5, Nop), + src: "3a4b5eX", + dstSize: 100, + srcSize: 100, + ioSize: 100, + wantStr: "aaabbbbeeeee", + wantErr: errYouMentionedX, + }, + + { + desc: "return downstream fatal errors first (followed by short dst)", + t: mkChain(dontMentionX{}, 8, rleDecode{}, 4, Nop), + src: "3a4b5eX", + dstSize: 100, + srcSize: 100, + ioSize: 100, + wantStr: "aaabbbb", + wantErr: errShortInternal, + }, + + { + desc: "return downstream fatal errors first (followed by short src)", + t: mkChain(dontMentionX{}, 5, Nop, 1, rleDecode{}), + src: "1a5bX", + dstSize: 100, + srcSize: 100, + ioSize: 100, + wantStr: "", + wantErr: errShortInternal, + }, + + { + desc: "short internal", + t: mkChain(Nop, 11, rleEncode{}, 3, Nop), + src: "abbcccddddddddddeeeeeeeeeeeg", + dstSize: 3, + srcSize: 100, + wantStr: "1a2b3c10d", + wantErr: errShortInternal, + }, + } +} + +func doTransform(tc testCase) (res string, iter int, err error) { + tc.t.Reset() + dst := make([]byte, tc.dstSize) + out, in := make([]byte, 0, 2*len(tc.src)), []byte(tc.src) + for { + iter++ + src, atEOF := in, true + if len(src) > tc.srcSize { + src, atEOF = src[:tc.srcSize], false + } + nDst, nSrc, err := tc.t.Transform(dst, src, atEOF) + out = append(out, dst[:nDst]...) + in = in[nSrc:] + switch { + case err == nil && len(in) != 0: + case err == ErrShortSrc && nSrc > 0: + case err == ErrShortDst && (nDst > 0 || nSrc > 0): + default: + return string(out), iter, err + } + } +} + +func TestChain(t *testing.T) { + if c, ok := Chain().(nop); !ok { + t.Errorf("empty chain: %v; want Nop", c) + } + + // Test Chain for a single Transformer. + for _, tc := range testCases { + tc.t = Chain(tc.t) + str, _, err := doTransform(tc) + if str != tc.wantStr || err != tc.wantErr { + t.Errorf("%s:\ngot %q, %v\nwant %q, %v", tc, str, err, tc.wantStr, tc.wantErr) + } + } + + tests := chainTests() + sizes := []int{1, 2, 3, 4, 5, 7, 10, 100, 1000} + addTest := func(tc testCase, t *chain) { + if t.link[0].t != tc.t && tc.wantErr == ErrShortSrc { + tc.wantErr = errShortInternal + } + if t.link[len(t.link)-2].t != tc.t && tc.wantErr == ErrShortDst { + tc.wantErr = errShortInternal + } + tc.t = t + tests = append(tests, tc) + } + for _, tc := range testCases { + for _, sz := range sizes { + tt := tc + tt.dstSize = sz + addTest(tt, mkChain(tc.t, tc.dstSize, Nop)) + addTest(tt, mkChain(tc.t, tc.dstSize, Nop, 2, Nop)) + addTest(tt, mkChain(Nop, tc.srcSize, tc.t, tc.dstSize, Nop)) + if sz >= tc.dstSize && (tc.wantErr != ErrShortDst || sz == tc.dstSize) { + addTest(tt, mkChain(Nop, tc.srcSize, tc.t)) + addTest(tt, mkChain(Nop, 100, Nop, tc.srcSize, tc.t)) + } + } + } + for _, tc := range testCases { + tt := tc + tt.dstSize = 1 + tt.wantStr = "" + addTest(tt, mkChain(tc.t, tc.dstSize, Discard)) + addTest(tt, mkChain(Nop, tc.srcSize, tc.t, tc.dstSize, Discard)) + addTest(tt, mkChain(Nop, tc.srcSize, tc.t, tc.dstSize, Nop, tc.dstSize, Discard)) + } + for _, tc := range testCases { + tt := tc + tt.dstSize = 100 + tt.wantStr = strings.Replace(tc.src, "0f", "", -1) + // Chain encoders and decoders. + if _, ok := tc.t.(rleEncode); ok && tc.wantErr == nil { + addTest(tt, mkChain(tc.t, tc.dstSize, Nop, 1000, rleDecode{})) + addTest(tt, mkChain(tc.t, tc.dstSize, Nop, tc.dstSize, rleDecode{})) + addTest(tt, mkChain(Nop, tc.srcSize, tc.t, tc.dstSize, Nop, 100, rleDecode{})) + // decoding needs larger destinations + addTest(tt, mkChain(Nop, tc.srcSize, tc.t, tc.dstSize, rleDecode{}, 100, Nop)) + addTest(tt, mkChain(Nop, tc.srcSize, tc.t, tc.dstSize, Nop, 100, rleDecode{}, 100, Nop)) + } else if _, ok := tc.t.(rleDecode); ok && tc.wantErr == nil { + // The internal buffer size may need to be the sum of the maximum segment + // size of the two encoders! + addTest(tt, mkChain(tc.t, 2*tc.dstSize, rleEncode{})) + addTest(tt, mkChain(tc.t, tc.dstSize, Nop, 101, rleEncode{})) + addTest(tt, mkChain(Nop, tc.srcSize, tc.t, tc.dstSize, Nop, 100, rleEncode{})) + addTest(tt, mkChain(Nop, tc.srcSize, tc.t, tc.dstSize, Nop, 200, rleEncode{}, 100, Nop)) + } + } + for _, tc := range tests { + str, iter, err := doTransform(tc) + mi := tc.wantIter != 0 && tc.wantIter != iter + if str != tc.wantStr || err != tc.wantErr || mi { + t.Errorf("%s:\ngot iter:%d, %q, %v\nwant iter:%d, %q, %v", tc, iter, str, err, tc.wantIter, tc.wantStr, tc.wantErr) + } + break + } +} + +func TestRemoveFunc(t *testing.T) { + filter := RemoveFunc(func(r rune) bool { + return strings.IndexRune("ab\u0300\u1234,", r) != -1 + }) + tests := []testCase{ + { + src: ",", + wantStr: "", + }, + + { + src: "c", + wantStr: "c", + }, + + { + src: "\u2345", + wantStr: "\u2345", + }, + + { + src: "tschüß", + wantStr: "tschüß", + }, + + { + src: ",до,свидания,", + wantStr: "досвидания", + }, + + { + src: "a\xbd\xb2=\xbc ⌘", + wantStr: "\uFFFD\uFFFD=\uFFFD ⌘", + }, + + { + // If we didn't replace illegal bytes with RuneError, the result + // would be \u0300 or the code would need to be more complex. + src: "\xcc\u0300\x80", + wantStr: "\uFFFD\uFFFD", + }, + + { + src: "\xcc\u0300\x80", + dstSize: 3, + wantStr: "\uFFFD\uFFFD", + wantIter: 2, + }, + + { + // Test a long buffer greater than the internal buffer size + src: "hello\xcc\xcc\xccworld", + srcSize: 13, + wantStr: "hello\uFFFD\uFFFD\uFFFDworld", + wantIter: 1, + }, + + { + src: "\u2345", + dstSize: 2, + wantStr: "", + wantErr: ErrShortDst, + }, + + { + src: "\xcc", + dstSize: 2, + wantStr: "", + wantErr: ErrShortDst, + }, + + { + src: "\u0300", + dstSize: 2, + srcSize: 1, + wantStr: "", + wantErr: ErrShortSrc, + }, + + { + t: RemoveFunc(func(r rune) bool { + return r == utf8.RuneError + }), + src: "\xcc\u0300\x80", + wantStr: "\u0300", + }, + } + + for _, tc := range tests { + tc.desc = tc.src + if tc.t == nil { + tc.t = filter + } + if tc.dstSize == 0 { + tc.dstSize = 100 + } + if tc.srcSize == 0 { + tc.srcSize = 100 + } + str, iter, err := doTransform(tc) + mi := tc.wantIter != 0 && tc.wantIter != iter + if str != tc.wantStr || err != tc.wantErr || mi { + t.Errorf("%+q:\ngot iter:%d, %+q, %v\nwant iter:%d, %+q, %v", tc.src, iter, str, err, tc.wantIter, tc.wantStr, tc.wantErr) + } + + tc.src = str + idem, _, _ := doTransform(tc) + if str != idem { + t.Errorf("%+q: found %+q; want %+q", tc.src, idem, str) + } + } +} + +func testString(t *testing.T, f func(Transformer, string) (string, int, error)) { + for _, tt := range append(testCases, chainTests()...) { + if tt.desc == "allowStutter = true" { + // We don't have control over the buffer size, so we eliminate tests + // that depend on a specific buffer size being set. + continue + } + if tt.wantErr == ErrShortDst || tt.wantErr == ErrShortSrc { + // The result string will be different. + continue + } + testtext.Run(t, tt.desc, func(t *testing.T) { + got, n, err := f(tt.t, tt.src) + if tt.wantErr != err { + t.Errorf("error: got %v; want %v", err, tt.wantErr) + } + // Check that err == nil implies that n == len(tt.src). Note that vice + // versa isn't necessarily true. + if err == nil && n != len(tt.src) { + t.Errorf("err == nil: got %d bytes, want %d", n, err) + } + if got != tt.wantStr { + t.Errorf("string: got %q; want %q", got, tt.wantStr) + } + }) + } +} + +func TestBytes(t *testing.T) { + testString(t, func(z Transformer, s string) (string, int, error) { + b, n, err := Bytes(z, []byte(s)) + return string(b), n, err + }) +} + +func TestAppend(t *testing.T) { + // Create a bunch of subtests for different buffer sizes. + testCases := [][]byte{ + nil, + make([]byte, 0, 0), + make([]byte, 0, 1), + make([]byte, 1, 1), + make([]byte, 1, 5), + make([]byte, 100, 100), + make([]byte, 100, 200), + } + for _, tc := range testCases { + testString(t, func(z Transformer, s string) (string, int, error) { + b, n, err := Append(z, tc, []byte(s)) + return string(b[len(tc):]), n, err + }) + } +} + +func TestString(t *testing.T) { + testtext.Run(t, "transform", func(t *testing.T) { testString(t, String) }) + + // Overrun the internal destination buffer. + for i, s := range []string{ + aaa[:1*initialBufSize-1], + aaa[:1*initialBufSize+0], + aaa[:1*initialBufSize+1], + AAA[:1*initialBufSize-1], + AAA[:1*initialBufSize+0], + AAA[:1*initialBufSize+1], + AAA[:2*initialBufSize-1], + AAA[:2*initialBufSize+0], + AAA[:2*initialBufSize+1], + aaa[:1*initialBufSize-2] + "A", + aaa[:1*initialBufSize-1] + "A", + aaa[:1*initialBufSize+0] + "A", + aaa[:1*initialBufSize+1] + "A", + } { + testtext.Run(t, fmt.Sprint("dst buffer test using lower/", i), func(t *testing.T) { + got, _, _ := String(lowerCaseASCII{}, s) + if want := strings.ToLower(s); got != want { + t.Errorf("got %s (%d); want %s (%d)", got, len(got), want, len(want)) + } + }) + } + + // Overrun the internal source buffer. + for i, s := range []string{ + aaa[:1*initialBufSize-1], + aaa[:1*initialBufSize+0], + aaa[:1*initialBufSize+1], + aaa[:2*initialBufSize+1], + aaa[:2*initialBufSize+0], + aaa[:2*initialBufSize+1], + } { + testtext.Run(t, fmt.Sprint("src buffer test using rleEncode/", i), func(t *testing.T) { + got, _, _ := String(rleEncode{}, s) + if want := fmt.Sprintf("%da", len(s)); got != want { + t.Errorf("got %s (%d); want %s (%d)", got, len(got), want, len(want)) + } + }) + } + + // Test allocations for non-changing strings. + // Note we still need to allocate a single buffer. + for i, s := range []string{ + "", + "123456789", + aaa[:initialBufSize-1], + aaa[:initialBufSize+0], + aaa[:initialBufSize+1], + aaa[:10*initialBufSize], + } { + testtext.Run(t, fmt.Sprint("alloc/", i), func(t *testing.T) { + if n := testtext.AllocsPerRun(5, func() { String(&lowerCaseASCIILookahead{}, s) }); n > 1 { + t.Errorf("#allocs was %f; want 1", n) + } + }) + } +} + +// TestBytesAllocation tests that buffer growth stays limited with the trickler +// transformer, which behaves oddly but within spec. In case buffer growth is +// not correctly handled, the test will either panic with a failed allocation or +// thrash. To ensure the tests terminate under the last condition, we time out +// after some sufficiently long period of time. +func TestBytesAllocation(t *testing.T) { + done := make(chan bool) + go func() { + in := bytes.Repeat([]byte{'a'}, 1000) + tr := trickler(make([]byte, 1)) + Bytes(&tr, in) + done <- true + }() + select { + case <-done: + case <-time.After(3 * time.Second): + t.Error("time out, likely due to excessive allocation") + } +} + +// TestStringAllocation tests that buffer growth stays limited with the trickler +// transformer, which behaves oddly but within spec. In case buffer growth is +// not correctly handled, the test will either panic with a failed allocation or +// thrash. To ensure the tests terminate under the last condition, we time out +// after some sufficiently long period of time. +func TestStringAllocation(t *testing.T) { + done := make(chan bool) + go func() { + tr := trickler(make([]byte, 1)) + String(&tr, aaa[:1000]) + done <- true + }() + select { + case <-done: + case <-time.After(3 * time.Second): + t.Error("time out, likely due to excessive allocation") + } +} + +func BenchmarkStringLowerEmpty(b *testing.B) { + for i := 0; i < b.N; i++ { + String(&lowerCaseASCIILookahead{}, "") + } +} + +func BenchmarkStringLowerIdentical(b *testing.B) { + for i := 0; i < b.N; i++ { + String(&lowerCaseASCIILookahead{}, aaa[:4096]) + } +} + +func BenchmarkStringLowerChanged(b *testing.B) { + for i := 0; i < b.N; i++ { + String(&lowerCaseASCIILookahead{}, AAA[:4096]) + } +} + +var ( + aaa = strings.Repeat("a", 4096) + AAA = strings.Repeat("A", 4096) +) diff --git a/vendor/golang.org/x/text/unicode/bidi/bidi.go b/vendor/golang.org/x/text/unicode/bidi/bidi.go new file mode 100644 index 0000000..3fc4a62 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/bidi.go @@ -0,0 +1,198 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go gen_trieval.go gen_ranges.go + +// Package bidi contains functionality for bidirectional text support. +// +// See http://www.unicode.org/reports/tr9. +// +// NOTE: UNDER CONSTRUCTION. This API may change in backwards incompatible ways +// and without notice. +package bidi // import "golang.org/x/text/unicode/bidi" + +// TODO: +// The following functionality would not be hard to implement, but hinges on +// the definition of a Segmenter interface. For now this is up to the user. +// - Iterate over paragraphs +// - Segmenter to iterate over runs directly from a given text. +// Also: +// - Transformer for reordering? +// - Transformer (validator, really) for Bidi Rule. + +// This API tries to avoid dealing with embedding levels for now. Under the hood +// these will be computed, but the question is to which extent the user should +// know they exist. We should at some point allow the user to specify an +// embedding hierarchy, though. + +// A Direction indicates the overall flow of text. +type Direction int + +const ( + // LeftToRight indicates the text contains no right-to-left characters and + // that either there are some left-to-right characters or the option + // DefaultDirection(LeftToRight) was passed. + LeftToRight Direction = iota + + // RightToLeft indicates the text contains no left-to-right characters and + // that either there are some right-to-left characters or the option + // DefaultDirection(RightToLeft) was passed. + RightToLeft + + // Mixed indicates text contains both left-to-right and right-to-left + // characters. + Mixed + + // Neutral means that text contains no left-to-right and right-to-left + // characters and that no default direction has been set. + Neutral +) + +type options struct{} + +// An Option is an option for Bidi processing. +type Option func(*options) + +// ICU allows the user to define embedding levels. This may be used, for example, +// to use hierarchical structure of markup languages to define embeddings. +// The following option may be a way to expose this functionality in this API. +// // LevelFunc sets a function that associates nesting levels with the given text. +// // The levels function will be called with monotonically increasing values for p. +// func LevelFunc(levels func(p int) int) Option { +// panic("unimplemented") +// } + +// DefaultDirection sets the default direction for a Paragraph. The direction is +// overridden if the text contains directional characters. +func DefaultDirection(d Direction) Option { + panic("unimplemented") +} + +// A Paragraph holds a single Paragraph for Bidi processing. +type Paragraph struct { + // buffers +} + +// SetBytes configures p for the given paragraph text. It replaces text +// previously set by SetBytes or SetString. If b contains a paragraph separator +// it will only process the first paragraph and report the number of bytes +// consumed from b including this separator. Error may be non-nil if options are +// given. +func (p *Paragraph) SetBytes(b []byte, opts ...Option) (n int, err error) { + panic("unimplemented") +} + +// SetString configures p for the given paragraph text. It replaces text +// previously set by SetBytes or SetString. If b contains a paragraph separator +// it will only process the first paragraph and report the number of bytes +// consumed from b including this separator. Error may be non-nil if options are +// given. +func (p *Paragraph) SetString(s string, opts ...Option) (n int, err error) { + panic("unimplemented") +} + +// IsLeftToRight reports whether the principle direction of rendering for this +// paragraphs is left-to-right. If this returns false, the principle direction +// of rendering is right-to-left. +func (p *Paragraph) IsLeftToRight() bool { + panic("unimplemented") +} + +// Direction returns the direction of the text of this paragraph. +// +// The direction may be LeftToRight, RightToLeft, Mixed, or Neutral. +func (p *Paragraph) Direction() Direction { + panic("unimplemented") +} + +// RunAt reports the Run at the given position of the input text. +// +// This method can be used for computing line breaks on paragraphs. +func (p *Paragraph) RunAt(pos int) Run { + panic("unimplemented") +} + +// Order computes the visual ordering of all the runs in a Paragraph. +func (p *Paragraph) Order() (Ordering, error) { + panic("unimplemented") +} + +// Line computes the visual ordering of runs for a single line starting and +// ending at the given positions in the original text. +func (p *Paragraph) Line(start, end int) (Ordering, error) { + panic("unimplemented") +} + +// An Ordering holds the computed visual order of runs of a Paragraph. Calling +// SetBytes or SetString on the originating Paragraph invalidates an Ordering. +// The methods of an Ordering should only be called by one goroutine at a time. +type Ordering struct{} + +// Direction reports the directionality of the runs. +// +// The direction may be LeftToRight, RightToLeft, Mixed, or Neutral. +func (o *Ordering) Direction() Direction { + panic("unimplemented") +} + +// NumRuns returns the number of runs. +func (o *Ordering) NumRuns() int { + panic("unimplemented") +} + +// Run returns the ith run within the ordering. +func (o *Ordering) Run(i int) Run { + panic("unimplemented") +} + +// TODO: perhaps with options. +// // Reorder creates a reader that reads the runes in visual order per character. +// // Modifiers remain after the runes they modify. +// func (l *Runs) Reorder() io.Reader { +// panic("unimplemented") +// } + +// A Run is a continuous sequence of characters of a single direction. +type Run struct { +} + +// String returns the text of the run in its original order. +func (r *Run) String() string { + panic("unimplemented") +} + +// Bytes returns the text of the run in its original order. +func (r *Run) Bytes() []byte { + panic("unimplemented") +} + +// TODO: methods for +// - Display order +// - headers and footers +// - bracket replacement. + +// Direction reports the direction of the run. +func (r *Run) Direction() Direction { + panic("unimplemented") +} + +// Position of the Run within the text passed to SetBytes or SetString of the +// originating Paragraph value. +func (r *Run) Pos() (start, end int) { + panic("unimplemented") +} + +// AppendReverse reverses the order of characters of in, appends them to out, +// and returns the result. Modifiers will still follow the runes they modify. +// Brackets are replaced with their counterparts. +func AppendReverse(out, in []byte) []byte { + panic("unimplemented") +} + +// ReverseString reverses the order of characters in s and returns a new string. +// Modifiers will still follow the runes they modify. Brackets are replaced with +// their counterparts. +func ReverseString(s string) string { + panic("unimplemented") +} diff --git a/vendor/golang.org/x/text/unicode/bidi/bracket.go b/vendor/golang.org/x/text/unicode/bidi/bracket.go new file mode 100644 index 0000000..601e259 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/bracket.go @@ -0,0 +1,335 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidi + +import ( + "container/list" + "fmt" + "sort" +) + +// This file contains a port of the reference implementation of the +// Bidi Parentheses Algorithm: +// http://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java +// +// The implementation in this file covers definitions BD14-BD16 and rule N0 +// of UAX#9. +// +// Some preprocessing is done for each rune before data is passed to this +// algorithm: +// - opening and closing brackets are identified +// - a bracket pair type, like '(' and ')' is assigned a unique identifier that +// is identical for the opening and closing bracket. It is left to do these +// mappings. +// - The BPA algorithm requires that bracket characters that are canonical +// equivalents of each other be able to be substituted for each other. +// It is the responsibility of the caller to do this canonicalization. +// +// In implementing BD16, this implementation departs slightly from the "logical" +// algorithm defined in UAX#9. In particular, the stack referenced there +// supports operations that go beyond a "basic" stack. An equivalent +// implementation based on a linked list is used here. + +// Bidi_Paired_Bracket_Type +// BD14. An opening paired bracket is a character whose +// Bidi_Paired_Bracket_Type property value is Open. +// +// BD15. A closing paired bracket is a character whose +// Bidi_Paired_Bracket_Type property value is Close. +type bracketType byte + +const ( + bpNone bracketType = iota + bpOpen + bpClose +) + +// bracketPair holds a pair of index values for opening and closing bracket +// location of a bracket pair. +type bracketPair struct { + opener int + closer int +} + +func (b *bracketPair) String() string { + return fmt.Sprintf("(%v, %v)", b.opener, b.closer) +} + +// bracketPairs is a slice of bracketPairs with a sort.Interface implementation. +type bracketPairs []bracketPair + +func (b bracketPairs) Len() int { return len(b) } +func (b bracketPairs) Swap(i, j int) { b[i], b[j] = b[j], b[i] } +func (b bracketPairs) Less(i, j int) bool { return b[i].opener < b[j].opener } + +// resolvePairedBrackets runs the paired bracket part of the UBA algorithm. +// +// For each rune, it takes the indexes into the original string, the class the +// bracket type (in pairTypes) and the bracket identifier (pairValues). It also +// takes the direction type for the start-of-sentence and the embedding level. +// +// The identifiers for bracket types are the rune of the canonicalized opening +// bracket for brackets (open or close) or 0 for runes that are not brackets. +func resolvePairedBrackets(s *isolatingRunSequence) { + p := bracketPairer{ + sos: s.sos, + openers: list.New(), + codesIsolatedRun: s.types, + indexes: s.indexes, + } + dirEmbed := L + if s.level&1 != 0 { + dirEmbed = R + } + p.locateBrackets(s.p.pairTypes, s.p.pairValues) + p.resolveBrackets(dirEmbed, s.p.initialTypes) +} + +type bracketPairer struct { + sos Class // direction corresponding to start of sequence + + // The following is a restatement of BD 16 using non-algorithmic language. + // + // A bracket pair is a pair of characters consisting of an opening + // paired bracket and a closing paired bracket such that the + // Bidi_Paired_Bracket property value of the former equals the latter, + // subject to the following constraints. + // - both characters of a pair occur in the same isolating run sequence + // - the closing character of a pair follows the opening character + // - any bracket character can belong at most to one pair, the earliest possible one + // - any bracket character not part of a pair is treated like an ordinary character + // - pairs may nest properly, but their spans may not overlap otherwise + + // Bracket characters with canonical decompositions are supposed to be + // treated as if they had been normalized, to allow normalized and non- + // normalized text to give the same result. In this implementation that step + // is pushed out to the caller. The caller has to ensure that the pairValue + // slices contain the rune of the opening bracket after normalization for + // any opening or closing bracket. + + openers *list.List // list of positions for opening brackets + + // bracket pair positions sorted by location of opening bracket + pairPositions bracketPairs + + codesIsolatedRun []Class // directional bidi codes for an isolated run + indexes []int // array of index values into the original string + +} + +// matchOpener reports whether characters at given positions form a matching +// bracket pair. +func (p *bracketPairer) matchOpener(pairValues []rune, opener, closer int) bool { + return pairValues[p.indexes[opener]] == pairValues[p.indexes[closer]] +} + +const maxPairingDepth = 63 + +// locateBrackets locates matching bracket pairs according to BD16. +// +// This implementation uses a linked list instead of a stack, because, while +// elements are added at the front (like a push) they are not generally removed +// in atomic 'pop' operations, reducing the benefit of the stack archetype. +func (p *bracketPairer) locateBrackets(pairTypes []bracketType, pairValues []rune) { + // traverse the run + // do that explicitly (not in a for-each) so we can record position + for i, index := range p.indexes { + + // look at the bracket type for each character + if pairTypes[index] == bpNone || p.codesIsolatedRun[i] != ON { + // continue scanning + continue + } + switch pairTypes[index] { + case bpOpen: + // check if maximum pairing depth reached + if p.openers.Len() == maxPairingDepth { + p.openers.Init() + return + } + // remember opener location, most recent first + p.openers.PushFront(i) + + case bpClose: + // see if there is a match + count := 0 + for elem := p.openers.Front(); elem != nil; elem = elem.Next() { + count++ + opener := elem.Value.(int) + if p.matchOpener(pairValues, opener, i) { + // if the opener matches, add nested pair to the ordered list + p.pairPositions = append(p.pairPositions, bracketPair{opener, i}) + // remove up to and including matched opener + for ; count > 0; count-- { + p.openers.Remove(p.openers.Front()) + } + break + } + } + sort.Sort(p.pairPositions) + // if we get here, the closing bracket matched no openers + // and gets ignored + } + } +} + +// Bracket pairs within an isolating run sequence are processed as units so +// that both the opening and the closing paired bracket in a pair resolve to +// the same direction. +// +// N0. Process bracket pairs in an isolating run sequence sequentially in +// the logical order of the text positions of the opening paired brackets +// using the logic given below. Within this scope, bidirectional types EN +// and AN are treated as R. +// +// Identify the bracket pairs in the current isolating run sequence +// according to BD16. For each bracket-pair element in the list of pairs of +// text positions: +// +// a Inspect the bidirectional types of the characters enclosed within the +// bracket pair. +// +// b If any strong type (either L or R) matching the embedding direction is +// found, set the type for both brackets in the pair to match the embedding +// direction. +// +// o [ e ] o -> o e e e o +// +// o [ o e ] -> o e o e e +// +// o [ NI e ] -> o e NI e e +// +// c Otherwise, if a strong type (opposite the embedding direction) is +// found, test for adjacent strong types as follows: 1 First, check +// backwards before the opening paired bracket until the first strong type +// (L, R, or sos) is found. If that first preceding strong type is opposite +// the embedding direction, then set the type for both brackets in the pair +// to that type. 2 Otherwise, set the type for both brackets in the pair to +// the embedding direction. +// +// o [ o ] e -> o o o o e +// +// o [ o NI ] o -> o o o NI o o +// +// e [ o ] o -> e e o e o +// +// e [ o ] e -> e e o e e +// +// e ( o [ o ] NI ) e -> e e o o o o NI e e +// +// d Otherwise, do not set the type for the current bracket pair. Note that +// if the enclosed text contains no strong types the paired brackets will +// both resolve to the same level when resolved individually using rules N1 +// and N2. +// +// e ( NI ) o -> e ( NI ) o + +// getStrongTypeN0 maps character's directional code to strong type as required +// by rule N0. +// +// TODO: have separate type for "strong" directionality. +func (p *bracketPairer) getStrongTypeN0(index int) Class { + switch p.codesIsolatedRun[index] { + // in the scope of N0, number types are treated as R + case EN, AN, AL, R: + return R + case L: + return L + default: + return ON + } +} + +// classifyPairContent reports the strong types contained inside a Bracket Pair, +// assuming the given embedding direction. +// +// It returns ON if no strong type is found. If a single strong type is found, +// it returns this this type. Otherwise it returns the embedding direction. +// +// TODO: use separate type for "strong" directionality. +func (p *bracketPairer) classifyPairContent(loc bracketPair, dirEmbed Class) Class { + dirOpposite := ON + for i := loc.opener + 1; i < loc.closer; i++ { + dir := p.getStrongTypeN0(i) + if dir == ON { + continue + } + if dir == dirEmbed { + return dir // type matching embedding direction found + } + dirOpposite = dir + } + // return ON if no strong type found, or class opposite to dirEmbed + return dirOpposite +} + +// classBeforePair determines which strong types are present before a Bracket +// Pair. Return R or L if strong type found, otherwise ON. +func (p *bracketPairer) classBeforePair(loc bracketPair) Class { + for i := loc.opener - 1; i >= 0; i-- { + if dir := p.getStrongTypeN0(i); dir != ON { + return dir + } + } + // no strong types found, return sos + return p.sos +} + +// assignBracketType implements rule N0 for a single bracket pair. +func (p *bracketPairer) assignBracketType(loc bracketPair, dirEmbed Class, initialTypes []Class) { + // rule "N0, a", inspect contents of pair + dirPair := p.classifyPairContent(loc, dirEmbed) + + // dirPair is now L, R, or N (no strong type found) + + // the following logical tests are performed out of order compared to + // the statement of the rules but yield the same results + if dirPair == ON { + return // case "d" - nothing to do + } + + if dirPair != dirEmbed { + // case "c": strong type found, opposite - check before (c.1) + dirPair = p.classBeforePair(loc) + if dirPair == dirEmbed || dirPair == ON { + // no strong opposite type found before - use embedding (c.2) + dirPair = dirEmbed + } + } + // else: case "b", strong type found matching embedding, + // no explicit action needed, as dirPair is already set to embedding + // direction + + // set the bracket types to the type found + p.setBracketsToType(loc, dirPair, initialTypes) +} + +func (p *bracketPairer) setBracketsToType(loc bracketPair, dirPair Class, initialTypes []Class) { + p.codesIsolatedRun[loc.opener] = dirPair + p.codesIsolatedRun[loc.closer] = dirPair + + for i := loc.opener + 1; i < loc.closer; i++ { + index := p.indexes[i] + if initialTypes[index] != NSM { + break + } + p.codesIsolatedRun[i] = dirPair + } + + for i := loc.closer + 1; i < len(p.indexes); i++ { + index := p.indexes[i] + if initialTypes[index] != NSM { + break + } + p.codesIsolatedRun[i] = dirPair + } +} + +// resolveBrackets implements rule N0 for a list of pairs. +func (p *bracketPairer) resolveBrackets(dirEmbed Class, initialTypes []Class) { + for _, loc := range p.pairPositions { + p.assignBracketType(loc, dirEmbed, initialTypes) + } +} diff --git a/vendor/golang.org/x/text/unicode/bidi/core.go b/vendor/golang.org/x/text/unicode/bidi/core.go new file mode 100644 index 0000000..d4c1399 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/core.go @@ -0,0 +1,1058 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidi + +import "log" + +// This implementation is a port based on the reference implementation found at: +// http://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/ +// +// described in Unicode Bidirectional Algorithm (UAX #9). +// +// Input: +// There are two levels of input to the algorithm, since clients may prefer to +// supply some information from out-of-band sources rather than relying on the +// default behavior. +// +// - Bidi class array +// - Bidi class array, with externally supplied base line direction +// +// Output: +// Output is separated into several stages: +// +// - levels array over entire paragraph +// - reordering array over entire paragraph +// - levels array over line +// - reordering array over line +// +// Note that for conformance to the Unicode Bidirectional Algorithm, +// implementations are only required to generate correct reordering and +// character directionality (odd or even levels) over a line. Generating +// identical level arrays over a line is not required. Bidi explicit format +// codes (LRE, RLE, LRO, RLO, PDF) and BN can be assigned arbitrary levels and +// positions as long as the rest of the input is properly reordered. +// +// As the algorithm is defined to operate on a single paragraph at a time, this +// implementation is written to handle single paragraphs. Thus rule P1 is +// presumed by this implementation-- the data provided to the implementation is +// assumed to be a single paragraph, and either contains no 'B' codes, or a +// single 'B' code at the end of the input. 'B' is allowed as input to +// illustrate how the algorithm assigns it a level. +// +// Also note that rules L3 and L4 depend on the rendering engine that uses the +// result of the bidi algorithm. This implementation assumes that the rendering +// engine expects combining marks in visual order (e.g. to the left of their +// base character in RTL runs) and that it adjusts the glyphs used to render +// mirrored characters that are in RTL runs so that they render appropriately. + +// level is the embedding level of a character. Even embedding levels indicate +// left-to-right order and odd levels indicate right-to-left order. The special +// level of -1 is reserved for undefined order. +type level int8 + +const implicitLevel level = -1 + +// in returns if x is equal to any of the values in set. +func (c Class) in(set ...Class) bool { + for _, s := range set { + if c == s { + return true + } + } + return false +} + +// A paragraph contains the state of a paragraph. +type paragraph struct { + initialTypes []Class + + // Arrays of properties needed for paired bracket evaluation in N0 + pairTypes []bracketType // paired Bracket types for paragraph + pairValues []rune // rune for opening bracket or pbOpen and pbClose; 0 for pbNone + + embeddingLevel level // default: = implicitLevel; + + // at the paragraph levels + resultTypes []Class + resultLevels []level + + // Index of matching PDI for isolate initiator characters. For other + // characters, the value of matchingPDI will be set to -1. For isolate + // initiators with no matching PDI, matchingPDI will be set to the length of + // the input string. + matchingPDI []int + + // Index of matching isolate initiator for PDI characters. For other + // characters, and for PDIs with no matching isolate initiator, the value of + // matchingIsolateInitiator will be set to -1. + matchingIsolateInitiator []int +} + +// newParagraph initializes a paragraph. The user needs to supply a few arrays +// corresponding to the preprocessed text input. The types correspond to the +// Unicode BiDi classes for each rune. pairTypes indicates the bracket type for +// each rune. pairValues provides a unique bracket class identifier for each +// rune (suggested is the rune of the open bracket for opening and matching +// close brackets, after normalization). The embedding levels are optional, but +// may be supplied to encode embedding levels of styled text. +// +// TODO: return an error. +func newParagraph(types []Class, pairTypes []bracketType, pairValues []rune, levels level) *paragraph { + validateTypes(types) + validatePbTypes(pairTypes) + validatePbValues(pairValues, pairTypes) + validateParagraphEmbeddingLevel(levels) + + p := ¶graph{ + initialTypes: append([]Class(nil), types...), + embeddingLevel: levels, + + pairTypes: pairTypes, + pairValues: pairValues, + + resultTypes: append([]Class(nil), types...), + } + p.run() + return p +} + +func (p *paragraph) Len() int { return len(p.initialTypes) } + +// The algorithm. Does not include line-based processing (Rules L1, L2). +// These are applied later in the line-based phase of the algorithm. +func (p *paragraph) run() { + p.determineMatchingIsolates() + + // 1) determining the paragraph level + // Rule P1 is the requirement for entering this algorithm. + // Rules P2, P3. + // If no externally supplied paragraph embedding level, use default. + if p.embeddingLevel == implicitLevel { + p.embeddingLevel = p.determineParagraphEmbeddingLevel(0, p.Len()) + } + + // Initialize result levels to paragraph embedding level. + p.resultLevels = make([]level, p.Len()) + setLevels(p.resultLevels, p.embeddingLevel) + + // 2) Explicit levels and directions + // Rules X1-X8. + p.determineExplicitEmbeddingLevels() + + // Rule X9. + // We do not remove the embeddings, the overrides, the PDFs, and the BNs + // from the string explicitly. But they are not copied into isolating run + // sequences when they are created, so they are removed for all + // practical purposes. + + // Rule X10. + // Run remainder of algorithm one isolating run sequence at a time + for _, seq := range p.determineIsolatingRunSequences() { + // 3) resolving weak types + // Rules W1-W7. + seq.resolveWeakTypes() + + // 4a) resolving paired brackets + // Rule N0 + resolvePairedBrackets(seq) + + // 4b) resolving neutral types + // Rules N1-N3. + seq.resolveNeutralTypes() + + // 5) resolving implicit embedding levels + // Rules I1, I2. + seq.resolveImplicitLevels() + + // Apply the computed levels and types + seq.applyLevelsAndTypes() + } + + // Assign appropriate levels to 'hide' LREs, RLEs, LROs, RLOs, PDFs, and + // BNs. This is for convenience, so the resulting level array will have + // a value for every character. + p.assignLevelsToCharactersRemovedByX9() +} + +// determineMatchingIsolates determines the matching PDI for each isolate +// initiator and vice versa. +// +// Definition BD9. +// +// At the end of this function: +// +// - The member variable matchingPDI is set to point to the index of the +// matching PDI character for each isolate initiator character. If there is +// no matching PDI, it is set to the length of the input text. For other +// characters, it is set to -1. +// - The member variable matchingIsolateInitiator is set to point to the +// index of the matching isolate initiator character for each PDI character. +// If there is no matching isolate initiator, or the character is not a PDI, +// it is set to -1. +func (p *paragraph) determineMatchingIsolates() { + p.matchingPDI = make([]int, p.Len()) + p.matchingIsolateInitiator = make([]int, p.Len()) + + for i := range p.matchingIsolateInitiator { + p.matchingIsolateInitiator[i] = -1 + } + + for i := range p.matchingPDI { + p.matchingPDI[i] = -1 + + if t := p.resultTypes[i]; t.in(LRI, RLI, FSI) { + depthCounter := 1 + for j := i + 1; j < p.Len(); j++ { + if u := p.resultTypes[j]; u.in(LRI, RLI, FSI) { + depthCounter++ + } else if u == PDI { + if depthCounter--; depthCounter == 0 { + p.matchingPDI[i] = j + p.matchingIsolateInitiator[j] = i + break + } + } + } + if p.matchingPDI[i] == -1 { + p.matchingPDI[i] = p.Len() + } + } + } +} + +// determineParagraphEmbeddingLevel reports the resolved paragraph direction of +// the substring limited by the given range [start, end). +// +// Determines the paragraph level based on rules P2, P3. This is also used +// in rule X5c to find if an FSI should resolve to LRI or RLI. +func (p *paragraph) determineParagraphEmbeddingLevel(start, end int) level { + var strongType Class = unknownClass + + // Rule P2. + for i := start; i < end; i++ { + if t := p.resultTypes[i]; t.in(L, AL, R) { + strongType = t + break + } else if t.in(FSI, LRI, RLI) { + i = p.matchingPDI[i] // skip over to the matching PDI + if i > end { + log.Panic("assert (i <= end)") + } + } + } + // Rule P3. + switch strongType { + case unknownClass: // none found + // default embedding level when no strong types found is 0. + return 0 + case L: + return 0 + default: // AL, R + return 1 + } +} + +const maxDepth = 125 + +// This stack will store the embedding levels and override and isolated +// statuses +type directionalStatusStack struct { + stackCounter int + embeddingLevelStack [maxDepth + 1]level + overrideStatusStack [maxDepth + 1]Class + isolateStatusStack [maxDepth + 1]bool +} + +func (s *directionalStatusStack) empty() { s.stackCounter = 0 } +func (s *directionalStatusStack) pop() { s.stackCounter-- } +func (s *directionalStatusStack) depth() int { return s.stackCounter } + +func (s *directionalStatusStack) push(level level, overrideStatus Class, isolateStatus bool) { + s.embeddingLevelStack[s.stackCounter] = level + s.overrideStatusStack[s.stackCounter] = overrideStatus + s.isolateStatusStack[s.stackCounter] = isolateStatus + s.stackCounter++ +} + +func (s *directionalStatusStack) lastEmbeddingLevel() level { + return s.embeddingLevelStack[s.stackCounter-1] +} + +func (s *directionalStatusStack) lastDirectionalOverrideStatus() Class { + return s.overrideStatusStack[s.stackCounter-1] +} + +func (s *directionalStatusStack) lastDirectionalIsolateStatus() bool { + return s.isolateStatusStack[s.stackCounter-1] +} + +// Determine explicit levels using rules X1 - X8 +func (p *paragraph) determineExplicitEmbeddingLevels() { + var stack directionalStatusStack + var overflowIsolateCount, overflowEmbeddingCount, validIsolateCount int + + // Rule X1. + stack.push(p.embeddingLevel, ON, false) + + for i, t := range p.resultTypes { + // Rules X2, X3, X4, X5, X5a, X5b, X5c + switch t { + case RLE, LRE, RLO, LRO, RLI, LRI, FSI: + isIsolate := t.in(RLI, LRI, FSI) + isRTL := t.in(RLE, RLO, RLI) + + // override if this is an FSI that resolves to RLI + if t == FSI { + isRTL = (p.determineParagraphEmbeddingLevel(i+1, p.matchingPDI[i]) == 1) + } + if isIsolate { + p.resultLevels[i] = stack.lastEmbeddingLevel() + if stack.lastDirectionalOverrideStatus() != ON { + p.resultTypes[i] = stack.lastDirectionalOverrideStatus() + } + } + + var newLevel level + if isRTL { + // least greater odd + newLevel = (stack.lastEmbeddingLevel() + 1) | 1 + } else { + // least greater even + newLevel = (stack.lastEmbeddingLevel() + 2) &^ 1 + } + + if newLevel <= maxDepth && overflowIsolateCount == 0 && overflowEmbeddingCount == 0 { + if isIsolate { + validIsolateCount++ + } + // Push new embedding level, override status, and isolated + // status. + // No check for valid stack counter, since the level check + // suffices. + switch t { + case LRO: + stack.push(newLevel, L, isIsolate) + case RLO: + stack.push(newLevel, R, isIsolate) + default: + stack.push(newLevel, ON, isIsolate) + } + // Not really part of the spec + if !isIsolate { + p.resultLevels[i] = newLevel + } + } else { + // This is an invalid explicit formatting character, + // so apply the "Otherwise" part of rules X2-X5b. + if isIsolate { + overflowIsolateCount++ + } else { // !isIsolate + if overflowIsolateCount == 0 { + overflowEmbeddingCount++ + } + } + } + + // Rule X6a + case PDI: + if overflowIsolateCount > 0 { + overflowIsolateCount-- + } else if validIsolateCount == 0 { + // do nothing + } else { + overflowEmbeddingCount = 0 + for !stack.lastDirectionalIsolateStatus() { + stack.pop() + } + stack.pop() + validIsolateCount-- + } + p.resultLevels[i] = stack.lastEmbeddingLevel() + + // Rule X7 + case PDF: + // Not really part of the spec + p.resultLevels[i] = stack.lastEmbeddingLevel() + + if overflowIsolateCount > 0 { + // do nothing + } else if overflowEmbeddingCount > 0 { + overflowEmbeddingCount-- + } else if !stack.lastDirectionalIsolateStatus() && stack.depth() >= 2 { + stack.pop() + } + + case B: // paragraph separator. + // Rule X8. + + // These values are reset for clarity, in this implementation B + // can only occur as the last code in the array. + stack.empty() + overflowIsolateCount = 0 + overflowEmbeddingCount = 0 + validIsolateCount = 0 + p.resultLevels[i] = p.embeddingLevel + + default: + p.resultLevels[i] = stack.lastEmbeddingLevel() + if stack.lastDirectionalOverrideStatus() != ON { + p.resultTypes[i] = stack.lastDirectionalOverrideStatus() + } + } + } +} + +type isolatingRunSequence struct { + p *paragraph + + indexes []int // indexes to the original string + + types []Class // type of each character using the index + resolvedLevels []level // resolved levels after application of rules + level level + sos, eos Class +} + +func (i *isolatingRunSequence) Len() int { return len(i.indexes) } + +func maxLevel(a, b level) level { + if a > b { + return a + } + return b +} + +// Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types, +// either L or R, for each isolating run sequence. +func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence { + length := len(indexes) + types := make([]Class, length) + for i, x := range indexes { + types[i] = p.resultTypes[x] + } + + // assign level, sos and eos + prevChar := indexes[0] - 1 + for prevChar >= 0 && isRemovedByX9(p.initialTypes[prevChar]) { + prevChar-- + } + prevLevel := p.embeddingLevel + if prevChar >= 0 { + prevLevel = p.resultLevels[prevChar] + } + + var succLevel level + lastType := types[length-1] + if lastType.in(LRI, RLI, FSI) { + succLevel = p.embeddingLevel + } else { + // the first character after the end of run sequence + limit := indexes[length-1] + 1 + for ; limit < p.Len() && isRemovedByX9(p.initialTypes[limit]); limit++ { + + } + succLevel = p.embeddingLevel + if limit < p.Len() { + succLevel = p.resultLevels[limit] + } + } + level := p.resultLevels[indexes[0]] + return &isolatingRunSequence{ + p: p, + indexes: indexes, + types: types, + level: level, + sos: typeForLevel(maxLevel(prevLevel, level)), + eos: typeForLevel(maxLevel(succLevel, level)), + } +} + +// Resolving weak types Rules W1-W7. +// +// Note that some weak types (EN, AN) remain after this processing is +// complete. +func (s *isolatingRunSequence) resolveWeakTypes() { + + // on entry, only these types remain + s.assertOnly(L, R, AL, EN, ES, ET, AN, CS, B, S, WS, ON, NSM, LRI, RLI, FSI, PDI) + + // Rule W1. + // Changes all NSMs. + preceedingCharacterType := s.sos + for i, t := range s.types { + if t == NSM { + s.types[i] = preceedingCharacterType + } else { + if t.in(LRI, RLI, FSI, PDI) { + preceedingCharacterType = ON + } + preceedingCharacterType = t + } + } + + // Rule W2. + // EN does not change at the start of the run, because sos != AL. + for i, t := range s.types { + if t == EN { + for j := i - 1; j >= 0; j-- { + if t := s.types[j]; t.in(L, R, AL) { + if t == AL { + s.types[i] = AN + } + break + } + } + } + } + + // Rule W3. + for i, t := range s.types { + if t == AL { + s.types[i] = R + } + } + + // Rule W4. + // Since there must be values on both sides for this rule to have an + // effect, the scan skips the first and last value. + // + // Although the scan proceeds left to right, and changes the type + // values in a way that would appear to affect the computations + // later in the scan, there is actually no problem. A change in the + // current value can only affect the value to its immediate right, + // and only affect it if it is ES or CS. But the current value can + // only change if the value to its right is not ES or CS. Thus + // either the current value will not change, or its change will have + // no effect on the remainder of the analysis. + + for i := 1; i < s.Len()-1; i++ { + t := s.types[i] + if t == ES || t == CS { + prevSepType := s.types[i-1] + succSepType := s.types[i+1] + if prevSepType == EN && succSepType == EN { + s.types[i] = EN + } else if s.types[i] == CS && prevSepType == AN && succSepType == AN { + s.types[i] = AN + } + } + } + + // Rule W5. + for i, t := range s.types { + if t == ET { + // locate end of sequence + runStart := i + runEnd := s.findRunLimit(runStart, ET) + + // check values at ends of sequence + t := s.sos + if runStart > 0 { + t = s.types[runStart-1] + } + if t != EN { + t = s.eos + if runEnd < len(s.types) { + t = s.types[runEnd] + } + } + if t == EN { + setTypes(s.types[runStart:runEnd], EN) + } + // continue at end of sequence + i = runEnd + } + } + + // Rule W6. + for i, t := range s.types { + if t.in(ES, ET, CS) { + s.types[i] = ON + } + } + + // Rule W7. + for i, t := range s.types { + if t == EN { + // set default if we reach start of run + prevStrongType := s.sos + for j := i - 1; j >= 0; j-- { + t = s.types[j] + if t == L || t == R { // AL's have been changed to R + prevStrongType = t + break + } + } + if prevStrongType == L { + s.types[i] = L + } + } + } +} + +// 6) resolving neutral types Rules N1-N2. +func (s *isolatingRunSequence) resolveNeutralTypes() { + + // on entry, only these types can be in resultTypes + s.assertOnly(L, R, EN, AN, B, S, WS, ON, RLI, LRI, FSI, PDI) + + for i, t := range s.types { + switch t { + case WS, ON, B, S, RLI, LRI, FSI, PDI: + // find bounds of run of neutrals + runStart := i + runEnd := s.findRunLimit(runStart, B, S, WS, ON, RLI, LRI, FSI, PDI) + + // determine effective types at ends of run + var leadType, trailType Class + + // Note that the character found can only be L, R, AN, or + // EN. + if runStart == 0 { + leadType = s.sos + } else { + leadType = s.types[runStart-1] + if leadType.in(AN, EN) { + leadType = R + } + } + if runEnd == len(s.types) { + trailType = s.eos + } else { + trailType = s.types[runEnd] + if trailType.in(AN, EN) { + trailType = R + } + } + + var resolvedType Class + if leadType == trailType { + // Rule N1. + resolvedType = leadType + } else { + // Rule N2. + // Notice the embedding level of the run is used, not + // the paragraph embedding level. + resolvedType = typeForLevel(s.level) + } + + setTypes(s.types[runStart:runEnd], resolvedType) + + // skip over run of (former) neutrals + i = runEnd + } + } +} + +func setLevels(levels []level, newLevel level) { + for i := range levels { + levels[i] = newLevel + } +} + +func setTypes(types []Class, newType Class) { + for i := range types { + types[i] = newType + } +} + +// 7) resolving implicit embedding levels Rules I1, I2. +func (s *isolatingRunSequence) resolveImplicitLevels() { + + // on entry, only these types can be in resultTypes + s.assertOnly(L, R, EN, AN) + + s.resolvedLevels = make([]level, len(s.types)) + setLevels(s.resolvedLevels, s.level) + + if (s.level & 1) == 0 { // even level + for i, t := range s.types { + // Rule I1. + if t == L { + // no change + } else if t == R { + s.resolvedLevels[i] += 1 + } else { // t == AN || t == EN + s.resolvedLevels[i] += 2 + } + } + } else { // odd level + for i, t := range s.types { + // Rule I2. + if t == R { + // no change + } else { // t == L || t == AN || t == EN + s.resolvedLevels[i] += 1 + } + } + } +} + +// Applies the levels and types resolved in rules W1-I2 to the +// resultLevels array. +func (s *isolatingRunSequence) applyLevelsAndTypes() { + for i, x := range s.indexes { + s.p.resultTypes[x] = s.types[i] + s.p.resultLevels[x] = s.resolvedLevels[i] + } +} + +// Return the limit of the run consisting only of the types in validSet +// starting at index. This checks the value at index, and will return +// index if that value is not in validSet. +func (s *isolatingRunSequence) findRunLimit(index int, validSet ...Class) int { +loop: + for ; index < len(s.types); index++ { + t := s.types[index] + for _, valid := range validSet { + if t == valid { + continue loop + } + } + return index // didn't find a match in validSet + } + return len(s.types) +} + +// Algorithm validation. Assert that all values in types are in the +// provided set. +func (s *isolatingRunSequence) assertOnly(codes ...Class) { +loop: + for i, t := range s.types { + for _, c := range codes { + if t == c { + continue loop + } + } + log.Panicf("invalid bidi code %v present in assertOnly at position %d", t, s.indexes[i]) + } +} + +// determineLevelRuns returns an array of level runs. Each level run is +// described as an array of indexes into the input string. +// +// Determines the level runs. Rule X9 will be applied in determining the +// runs, in the way that makes sure the characters that are supposed to be +// removed are not included in the runs. +func (p *paragraph) determineLevelRuns() [][]int { + run := []int{} + allRuns := [][]int{} + currentLevel := implicitLevel + + for i := range p.initialTypes { + if !isRemovedByX9(p.initialTypes[i]) { + if p.resultLevels[i] != currentLevel { + // we just encountered a new run; wrap up last run + if currentLevel >= 0 { // only wrap it up if there was a run + allRuns = append(allRuns, run) + run = nil + } + // Start new run + currentLevel = p.resultLevels[i] + } + run = append(run, i) + } + } + // Wrap up the final run, if any + if len(run) > 0 { + allRuns = append(allRuns, run) + } + return allRuns +} + +// Definition BD13. Determine isolating run sequences. +func (p *paragraph) determineIsolatingRunSequences() []*isolatingRunSequence { + levelRuns := p.determineLevelRuns() + + // Compute the run that each character belongs to + runForCharacter := make([]int, p.Len()) + for i, run := range levelRuns { + for _, index := range run { + runForCharacter[index] = i + } + } + + sequences := []*isolatingRunSequence{} + + var currentRunSequence []int + + for _, run := range levelRuns { + first := run[0] + if p.initialTypes[first] != PDI || p.matchingIsolateInitiator[first] == -1 { + currentRunSequence = nil + // int run = i; + for { + // Copy this level run into currentRunSequence + currentRunSequence = append(currentRunSequence, run...) + + last := currentRunSequence[len(currentRunSequence)-1] + lastT := p.initialTypes[last] + if lastT.in(LRI, RLI, FSI) && p.matchingPDI[last] != p.Len() { + run = levelRuns[runForCharacter[p.matchingPDI[last]]] + } else { + break + } + } + sequences = append(sequences, p.isolatingRunSequence(currentRunSequence)) + } + } + return sequences +} + +// Assign level information to characters removed by rule X9. This is for +// ease of relating the level information to the original input data. Note +// that the levels assigned to these codes are arbitrary, they're chosen so +// as to avoid breaking level runs. +func (p *paragraph) assignLevelsToCharactersRemovedByX9() { + for i, t := range p.initialTypes { + if t.in(LRE, RLE, LRO, RLO, PDF, BN) { + p.resultTypes[i] = t + p.resultLevels[i] = -1 + } + } + // now propagate forward the levels information (could have + // propagated backward, the main thing is not to introduce a level + // break where one doesn't already exist). + + if p.resultLevels[0] == -1 { + p.resultLevels[0] = p.embeddingLevel + } + for i := 1; i < len(p.initialTypes); i++ { + if p.resultLevels[i] == -1 { + p.resultLevels[i] = p.resultLevels[i-1] + } + } + // Embedding information is for informational purposes only so need not be + // adjusted. +} + +// +// Output +// + +// getLevels computes levels array breaking lines at offsets in linebreaks. +// Rule L1. +// +// The linebreaks array must include at least one value. The values must be +// in strictly increasing order (no duplicates) between 1 and the length of +// the text, inclusive. The last value must be the length of the text. +func (p *paragraph) getLevels(linebreaks []int) []level { + // Note that since the previous processing has removed all + // P, S, and WS values from resultTypes, the values referred to + // in these rules are the initial types, before any processing + // has been applied (including processing of overrides). + // + // This example implementation has reinserted explicit format codes + // and BN, in order that the levels array correspond to the + // initial text. Their final placement is not normative. + // These codes are treated like WS in this implementation, + // so they don't interrupt sequences of WS. + + validateLineBreaks(linebreaks, p.Len()) + + result := append([]level(nil), p.resultLevels...) + + // don't worry about linebreaks since if there is a break within + // a series of WS values preceding S, the linebreak itself + // causes the reset. + for i, t := range p.initialTypes { + if t.in(B, S) { + // Rule L1, clauses one and two. + result[i] = p.embeddingLevel + + // Rule L1, clause three. + for j := i - 1; j >= 0; j-- { + if isWhitespace(p.initialTypes[j]) { // including format codes + result[j] = p.embeddingLevel + } else { + break + } + } + } + } + + // Rule L1, clause four. + start := 0 + for _, limit := range linebreaks { + for j := limit - 1; j >= start; j-- { + if isWhitespace(p.initialTypes[j]) { // including format codes + result[j] = p.embeddingLevel + } else { + break + } + } + start = limit + } + + return result +} + +// getReordering returns the reordering of lines from a visual index to a +// logical index for line breaks at the given offsets. +// +// Lines are concatenated from left to right. So for example, the fifth +// character from the left on the third line is +// +// getReordering(linebreaks)[linebreaks[1] + 4] +// +// (linebreaks[1] is the position after the last character of the second +// line, which is also the index of the first character on the third line, +// and adding four gets the fifth character from the left). +// +// The linebreaks array must include at least one value. The values must be +// in strictly increasing order (no duplicates) between 1 and the length of +// the text, inclusive. The last value must be the length of the text. +func (p *paragraph) getReordering(linebreaks []int) []int { + validateLineBreaks(linebreaks, p.Len()) + + return computeMultilineReordering(p.getLevels(linebreaks), linebreaks) +} + +// Return multiline reordering array for a given level array. Reordering +// does not occur across a line break. +func computeMultilineReordering(levels []level, linebreaks []int) []int { + result := make([]int, len(levels)) + + start := 0 + for _, limit := range linebreaks { + tempLevels := make([]level, limit-start) + copy(tempLevels, levels[start:]) + + for j, order := range computeReordering(tempLevels) { + result[start+j] = order + start + } + start = limit + } + return result +} + +// Return reordering array for a given level array. This reorders a single +// line. The reordering is a visual to logical map. For example, the +// leftmost char is string.charAt(order[0]). Rule L2. +func computeReordering(levels []level) []int { + result := make([]int, len(levels)) + // initialize order + for i := range result { + result[i] = i + } + + // locate highest level found on line. + // Note the rules say text, but no reordering across line bounds is + // performed, so this is sufficient. + highestLevel := level(0) + lowestOddLevel := level(maxDepth + 2) + for _, level := range levels { + if level > highestLevel { + highestLevel = level + } + if level&1 != 0 && level < lowestOddLevel { + lowestOddLevel = level + } + } + + for level := highestLevel; level >= lowestOddLevel; level-- { + for i := 0; i < len(levels); i++ { + if levels[i] >= level { + // find range of text at or above this level + start := i + limit := i + 1 + for limit < len(levels) && levels[limit] >= level { + limit++ + } + + for j, k := start, limit-1; j < k; j, k = j+1, k-1 { + result[j], result[k] = result[k], result[j] + } + // skip to end of level run + i = limit + } + } + } + + return result +} + +// isWhitespace reports whether the type is considered a whitespace type for the +// line break rules. +func isWhitespace(c Class) bool { + switch c { + case LRE, RLE, LRO, RLO, PDF, LRI, RLI, FSI, PDI, BN, WS: + return true + } + return false +} + +// isRemovedByX9 reports whether the type is one of the types removed in X9. +func isRemovedByX9(c Class) bool { + switch c { + case LRE, RLE, LRO, RLO, PDF, BN: + return true + } + return false +} + +// typeForLevel reports the strong type (L or R) corresponding to the level. +func typeForLevel(level level) Class { + if (level & 0x1) == 0 { + return L + } + return R +} + +// TODO: change validation to not panic + +func validateTypes(types []Class) { + if len(types) == 0 { + log.Panic("types is null") + } + for i, t := range types[:len(types)-1] { + if t == B { + log.Panicf("B type before end of paragraph at index: %d", i) + } + } +} + +func validateParagraphEmbeddingLevel(embeddingLevel level) { + if embeddingLevel != implicitLevel && + embeddingLevel != 0 && + embeddingLevel != 1 { + log.Panicf("illegal paragraph embedding level: %d", embeddingLevel) + } +} + +func validateLineBreaks(linebreaks []int, textLength int) { + prev := 0 + for i, next := range linebreaks { + if next <= prev { + log.Panicf("bad linebreak: %d at index: %d", next, i) + } + prev = next + } + if prev != textLength { + log.Panicf("last linebreak was %d, want %d", prev, textLength) + } +} + +func validatePbTypes(pairTypes []bracketType) { + if len(pairTypes) == 0 { + log.Panic("pairTypes is null") + } + for i, pt := range pairTypes { + switch pt { + case bpNone, bpOpen, bpClose: + default: + log.Panicf("illegal pairType value at %d: %v", i, pairTypes[i]) + } + } +} + +func validatePbValues(pairValues []rune, pairTypes []bracketType) { + if pairValues == nil { + log.Panic("pairValues is null") + } + if len(pairTypes) != len(pairValues) { + log.Panic("pairTypes is different length from pairValues") + } +} diff --git a/vendor/golang.org/x/text/unicode/bidi/core_test.go b/vendor/golang.org/x/text/unicode/bidi/core_test.go new file mode 100644 index 0000000..f28d386 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/core_test.go @@ -0,0 +1,224 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidi + +import ( + "flag" + "fmt" + "log" + "strconv" + "strings" + "testing" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/internal/ucd" + "golang.org/x/text/unicode/norm" +) + +var testLevels = flag.Bool("levels", false, "enable testing of levels") + +// TestBidiCore performs the tests in BidiTest.txt. +// See http://www.unicode.org/Public/UCD/latest/ucd/BidiTest.txt. +func TestBidiCore(t *testing.T) { + testtext.SkipIfNotLong(t) + + r := gen.OpenUCDFile("BidiTest.txt") + defer r.Close() + + var wantLevels, wantOrder []string + p := ucd.New(r, ucd.Part(func(p *ucd.Parser) { + s := strings.Split(p.String(0), ":") + switch s[0] { + case "Levels": + wantLevels = strings.Fields(s[1]) + case "Reorder": + wantOrder = strings.Fields(s[1]) + default: + log.Fatalf("Unknown part %q.", s[0]) + } + })) + + for p.Next() { + types := []Class{} + for _, s := range p.Strings(0) { + types = append(types, bidiClass[s]) + } + // We ignore the bracketing part of the algorithm. + pairTypes := make([]bracketType, len(types)) + pairValues := make([]rune, len(types)) + + for i := uint(0); i < 3; i++ { + if p.Uint(1)&(1<<i) == 0 { + continue + } + lev := level(int(i) - 1) + par := newParagraph(types, pairTypes, pairValues, lev) + + if *testLevels { + levels := par.getLevels([]int{len(types)}) + for i, s := range wantLevels { + if s == "x" { + continue + } + l, _ := strconv.ParseUint(s, 10, 8) + if level(l)&1 != levels[i]&1 { + t.Errorf("%s:%d:levels: got %v; want %v", p.String(0), lev, levels, wantLevels) + break + } + } + } + + order := par.getReordering([]int{len(types)}) + gotOrder := filterOrder(types, order) + if got, want := fmt.Sprint(gotOrder), fmt.Sprint(wantOrder); got != want { + t.Errorf("%s:%d:order: got %v; want %v\noriginal %v", p.String(0), lev, got, want, order) + } + } + } + if err := p.Err(); err != nil { + log.Fatal(err) + } +} + +var removeClasses = map[Class]bool{ + LRO: true, + RLO: true, + RLE: true, + LRE: true, + PDF: true, + BN: true, +} + +// TestBidiCharacters performs the tests in BidiCharacterTest.txt. +// See http://www.unicode.org/Public/UCD/latest/ucd/BidiCharacterTest.txt +func TestBidiCharacters(t *testing.T) { + testtext.SkipIfNotLong(t) + + ucd.Parse(gen.OpenUCDFile("BidiCharacterTest.txt"), func(p *ucd.Parser) { + var ( + types []Class + pairTypes []bracketType + pairValues []rune + parLevel level + + wantLevel = level(p.Int(2)) + wantLevels = p.Strings(3) + wantVisualOrder = p.Strings(4) + ) + + switch l := p.Int(1); l { + case 0, 1: + parLevel = level(l) + case 2: + parLevel = implicitLevel + default: + // Spec says to ignore unknown parts. + } + + runes := p.Runes(0) + + for _, r := range runes { + // Assign the bracket type. + if d := norm.NFKD.PropertiesString(string(r)).Decomposition(); d != nil { + r = []rune(string(d))[0] + } + p, _ := LookupRune(r) + + // Assign the class for this rune. + types = append(types, p.Class()) + + switch { + case !p.IsBracket(): + pairTypes = append(pairTypes, bpNone) + pairValues = append(pairValues, 0) + case p.IsOpeningBracket(): + pairTypes = append(pairTypes, bpOpen) + pairValues = append(pairValues, r) + default: + pairTypes = append(pairTypes, bpClose) + pairValues = append(pairValues, p.reverseBracket(r)) + } + } + par := newParagraph(types, pairTypes, pairValues, parLevel) + + // Test results: + if got := par.embeddingLevel; got != wantLevel { + t.Errorf("%v:level: got %d; want %d", string(runes), got, wantLevel) + } + + if *testLevels { + gotLevels := getLevelStrings(types, par.getLevels([]int{len(types)})) + if got, want := fmt.Sprint(gotLevels), fmt.Sprint(wantLevels); got != want { + t.Errorf("%04X %q:%d: got %v; want %v\nval: %x\npair: %v", runes, string(runes), parLevel, got, want, pairValues, pairTypes) + } + } + + order := par.getReordering([]int{len(types)}) + order = filterOrder(types, order) + if got, want := fmt.Sprint(order), fmt.Sprint(wantVisualOrder); got != want { + t.Errorf("%04X %q:%d: got %v; want %v\ngot order: %s", runes, string(runes), parLevel, got, want, reorder(runes, order)) + } + }) +} + +func getLevelStrings(cl []Class, levels []level) []string { + var results []string + for i, l := range levels { + if !removeClasses[cl[i]] { + results = append(results, fmt.Sprint(l)) + } else { + results = append(results, "x") + } + } + return results +} + +func filterOrder(cl []Class, order []int) []int { + no := []int{} + for _, o := range order { + if !removeClasses[cl[o]] { + no = append(no, o) + } + } + return no +} + +func reorder(r []rune, order []int) string { + nr := make([]rune, len(order)) + for i, o := range order { + nr[i] = r[o] + } + return string(nr) +} + +// bidiClass names and codes taken from class "bc" in +// http://www.unicode.org/Public/8.0.0/ucd/PropertyValueAliases.txt +var bidiClass = map[string]Class{ + "AL": AL, // classArabicLetter, + "AN": AN, // classArabicNumber, + "B": B, // classParagraphSeparator, + "BN": BN, // classBoundaryNeutral, + "CS": CS, // classCommonSeparator, + "EN": EN, // classEuropeanNumber, + "ES": ES, // classEuropeanSeparator, + "ET": ET, // classEuropeanTerminator, + "L": L, // classLeftToRight, + "NSM": NSM, // classNonspacingMark, + "ON": ON, // classOtherNeutral, + "R": R, // classRightToLeft, + "S": S, // classSegmentSeparator, + "WS": WS, // classWhiteSpace, + + "LRO": LRO, // classLeftToRightOverride, + "RLO": RLO, // classRightToLeftOverride, + "LRE": LRE, // classLeftToRightEmbedding, + "RLE": RLE, // classRightToLeftEmbedding, + "PDF": PDF, // classPopDirectionalFormat, + "LRI": LRI, // classLeftToRightIsolate, + "RLI": RLI, // classRightToLeftIsolate, + "FSI": FSI, // classFirstStrongIsolate, + "PDI": PDI, // classPopDirectionalIsolate, +} diff --git a/vendor/golang.org/x/text/unicode/bidi/gen.go b/vendor/golang.org/x/text/unicode/bidi/gen.go new file mode 100644 index 0000000..040f301 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/gen.go @@ -0,0 +1,133 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "flag" + "log" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/triegen" + "golang.org/x/text/internal/ucd" +) + +var outputFile = flag.String("out", "tables.go", "output file") + +func main() { + gen.Init() + gen.Repackage("gen_trieval.go", "trieval.go", "bidi") + gen.Repackage("gen_ranges.go", "ranges_test.go", "bidi") + + genTables() +} + +// bidiClass names and codes taken from class "bc" in +// http://www.unicode.org/Public/8.0.0/ucd/PropertyValueAliases.txt +var bidiClass = map[string]Class{ + "AL": AL, // ArabicLetter + "AN": AN, // ArabicNumber + "B": B, // ParagraphSeparator + "BN": BN, // BoundaryNeutral + "CS": CS, // CommonSeparator + "EN": EN, // EuropeanNumber + "ES": ES, // EuropeanSeparator + "ET": ET, // EuropeanTerminator + "L": L, // LeftToRight + "NSM": NSM, // NonspacingMark + "ON": ON, // OtherNeutral + "R": R, // RightToLeft + "S": S, // SegmentSeparator + "WS": WS, // WhiteSpace + + "FSI": Control, + "PDF": Control, + "PDI": Control, + "LRE": Control, + "LRI": Control, + "LRO": Control, + "RLE": Control, + "RLI": Control, + "RLO": Control, +} + +func genTables() { + if numClass > 0x0F { + log.Fatalf("Too many Class constants (%#x > 0x0F).", numClass) + } + w := gen.NewCodeWriter() + defer w.WriteGoFile(*outputFile, "bidi") + + gen.WriteUnicodeVersion(w) + + t := triegen.NewTrie("bidi") + + // Build data about bracket mapping. These bits need to be or-ed with + // any other bits. + orMask := map[rune]uint64{} + + xorMap := map[rune]int{} + xorMasks := []rune{0} // First value is no-op. + + ucd.Parse(gen.OpenUCDFile("BidiBrackets.txt"), func(p *ucd.Parser) { + r1 := p.Rune(0) + r2 := p.Rune(1) + xor := r1 ^ r2 + if _, ok := xorMap[xor]; !ok { + xorMap[xor] = len(xorMasks) + xorMasks = append(xorMasks, xor) + } + entry := uint64(xorMap[xor]) << xorMaskShift + switch p.String(2) { + case "o": + entry |= openMask + case "c", "n": + default: + log.Fatalf("Unknown bracket class %q.", p.String(2)) + } + orMask[r1] = entry + }) + + w.WriteComment(` + xorMasks contains masks to be xor-ed with brackets to get the reverse + version.`) + w.WriteVar("xorMasks", xorMasks) + + done := map[rune]bool{} + + insert := func(r rune, c Class) { + if !done[r] { + t.Insert(r, orMask[r]|uint64(c)) + done[r] = true + } + } + + // Insert the derived BiDi properties. + ucd.Parse(gen.OpenUCDFile("extracted/DerivedBidiClass.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + class, ok := bidiClass[p.String(1)] + if !ok { + log.Fatalf("%U: Unknown BiDi class %q", r, p.String(1)) + } + insert(r, class) + }) + visitDefaults(insert) + + // TODO: use sparse blocks. This would reduce table size considerably + // from the looks of it. + + sz, err := t.Gen(w) + if err != nil { + log.Fatal(err) + } + w.Size += sz +} + +// dummy values to make methods in gen_common compile. The real versions +// will be generated by this file to tables.go. +var ( + xorMasks []rune +) diff --git a/vendor/golang.org/x/text/unicode/bidi/gen_ranges.go b/vendor/golang.org/x/text/unicode/bidi/gen_ranges.go new file mode 100644 index 0000000..51bd68f --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/gen_ranges.go @@ -0,0 +1,57 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/ucd" + "golang.org/x/text/unicode/rangetable" +) + +// These tables are hand-extracted from: +// http://www.unicode.org/Public/8.0.0/ucd/extracted/DerivedBidiClass.txt +func visitDefaults(fn func(r rune, c Class)) { + // first write default values for ranges listed above. + visitRunes(fn, AL, []rune{ + 0x0600, 0x07BF, // Arabic + 0x08A0, 0x08FF, // Arabic Extended-A + 0xFB50, 0xFDCF, // Arabic Presentation Forms + 0xFDF0, 0xFDFF, + 0xFE70, 0xFEFF, + 0x0001EE00, 0x0001EEFF, // Arabic Mathematical Alpha Symbols + }) + visitRunes(fn, R, []rune{ + 0x0590, 0x05FF, // Hebrew + 0x07C0, 0x089F, // Nko et al. + 0xFB1D, 0xFB4F, + 0x00010800, 0x00010FFF, // Cypriot Syllabary et. al. + 0x0001E800, 0x0001EDFF, + 0x0001EF00, 0x0001EFFF, + }) + visitRunes(fn, ET, []rune{ // European Terminator + 0x20A0, 0x20Cf, // Currency symbols + }) + rangetable.Visit(unicode.Noncharacter_Code_Point, func(r rune) { + fn(r, BN) // Boundary Neutral + }) + ucd.Parse(gen.OpenUCDFile("DerivedCoreProperties.txt"), func(p *ucd.Parser) { + if p.String(1) == "Default_Ignorable_Code_Point" { + fn(p.Rune(0), BN) // Boundary Neutral + } + }) +} + +func visitRunes(fn func(r rune, c Class), c Class, runes []rune) { + for i := 0; i < len(runes); i += 2 { + lo, hi := runes[i], runes[i+1] + for j := lo; j <= hi; j++ { + fn(j, c) + } + } +} diff --git a/vendor/golang.org/x/text/unicode/bidi/gen_trieval.go b/vendor/golang.org/x/text/unicode/bidi/gen_trieval.go new file mode 100644 index 0000000..9cb9942 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/gen_trieval.go @@ -0,0 +1,64 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// Class is the Unicode BiDi class. Each rune has a single class. +type Class uint + +const ( + L Class = iota // LeftToRight + R // RightToLeft + EN // EuropeanNumber + ES // EuropeanSeparator + ET // EuropeanTerminator + AN // ArabicNumber + CS // CommonSeparator + B // ParagraphSeparator + S // SegmentSeparator + WS // WhiteSpace + ON // OtherNeutral + BN // BoundaryNeutral + NSM // NonspacingMark + AL // ArabicLetter + Control // Control LRO - PDI + + numClass + + LRO // LeftToRightOverride + RLO // RightToLeftOverride + LRE // LeftToRightEmbedding + RLE // RightToLeftEmbedding + PDF // PopDirectionalFormat + LRI // LeftToRightIsolate + RLI // RightToLeftIsolate + FSI // FirstStrongIsolate + PDI // PopDirectionalIsolate + + unknownClass = ^Class(0) +) + +var controlToClass = map[rune]Class{ + 0x202D: LRO, // LeftToRightOverride, + 0x202E: RLO, // RightToLeftOverride, + 0x202A: LRE, // LeftToRightEmbedding, + 0x202B: RLE, // RightToLeftEmbedding, + 0x202C: PDF, // PopDirectionalFormat, + 0x2066: LRI, // LeftToRightIsolate, + 0x2067: RLI, // RightToLeftIsolate, + 0x2068: FSI, // FirstStrongIsolate, + 0x2069: PDI, // PopDirectionalIsolate, +} + +// A trie entry has the following bits: +// 7..5 XOR mask for brackets +// 4 1: Bracket open, 0: Bracket close +// 3..0 Class type + +const ( + openMask = 0x10 + xorMaskShift = 5 +) diff --git a/vendor/golang.org/x/text/unicode/bidi/prop.go b/vendor/golang.org/x/text/unicode/bidi/prop.go new file mode 100644 index 0000000..7c9484e --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/prop.go @@ -0,0 +1,206 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidi + +import "unicode/utf8" + +// Properties provides access to BiDi properties of runes. +type Properties struct { + entry uint8 + last uint8 +} + +var trie = newBidiTrie(0) + +// TODO: using this for bidirule reduces the running time by about 5%. Consider +// if this is worth exposing or if we can find a way to speed up the Class +// method. +// +// // CompactClass is like Class, but maps all of the BiDi control classes +// // (LRO, RLO, LRE, RLE, PDF, LRI, RLI, FSI, PDI) to the class Control. +// func (p Properties) CompactClass() Class { +// return Class(p.entry & 0x0F) +// } + +// Class returns the Bidi class for p. +func (p Properties) Class() Class { + c := Class(p.entry & 0x0F) + if c == Control { + c = controlByteToClass[p.last&0xF] + } + return c +} + +// IsBracket reports whether the rune is a bracket. +func (p Properties) IsBracket() bool { return p.entry&0xF0 != 0 } + +// IsOpeningBracket reports whether the rune is an opening bracket. +// IsBracket must return true. +func (p Properties) IsOpeningBracket() bool { return p.entry&openMask != 0 } + +// TODO: find a better API and expose. +func (p Properties) reverseBracket(r rune) rune { + return xorMasks[p.entry>>xorMaskShift] ^ r +} + +var controlByteToClass = [16]Class{ + 0xD: LRO, // U+202D LeftToRightOverride, + 0xE: RLO, // U+202E RightToLeftOverride, + 0xA: LRE, // U+202A LeftToRightEmbedding, + 0xB: RLE, // U+202B RightToLeftEmbedding, + 0xC: PDF, // U+202C PopDirectionalFormat, + 0x6: LRI, // U+2066 LeftToRightIsolate, + 0x7: RLI, // U+2067 RightToLeftIsolate, + 0x8: FSI, // U+2068 FirstStrongIsolate, + 0x9: PDI, // U+2069 PopDirectionalIsolate, +} + +// LookupRune returns properties for r. +func LookupRune(r rune) (p Properties, size int) { + var buf [4]byte + n := utf8.EncodeRune(buf[:], r) + return Lookup(buf[:n]) +} + +// TODO: these lookup methods are based on the generated trie code. The returned +// sizes have slightly different semantics from the generated code, in that it +// always returns size==1 for an illegal UTF-8 byte (instead of the length +// of the maximum invalid subsequence). Most Transformers, like unicode/norm, +// leave invalid UTF-8 untouched, in which case it has performance benefits to +// do so (without changing the semantics). Bidi requires the semantics used here +// for the bidirule implementation to be compatible with the Go semantics. +// They ultimately should perhaps be adopted by all trie implementations, for +// convenience sake. +// This unrolled code also boosts performance of the secure/bidirule package by +// about 30%. +// So, to remove this code: +// - add option to trie generator to define return type. +// - always return 1 byte size for ill-formed UTF-8 runes. + +// Lookup returns properties for the first rune in s and the width in bytes of +// its encoding. The size will be 0 if s does not hold enough bytes to complete +// the encoding. +func Lookup(s []byte) (p Properties, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return Properties{entry: bidiValues[c0]}, 1 + case c0 < 0xC2: + return Properties{}, 1 + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c1)}, 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c2), last: c2}, 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return Properties{}, 1 + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c3)}, 4 + } + // Illegal rune + return Properties{}, 1 +} + +// LookupString returns properties for the first rune in s and the width in +// bytes of its encoding. The size will be 0 if s does not hold enough bytes to +// complete the encoding. +func LookupString(s string) (p Properties, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return Properties{entry: bidiValues[c0]}, 1 + case c0 < 0xC2: + return Properties{}, 1 + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c1)}, 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c2), last: c2}, 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return Properties{}, 1 + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c3)}, 4 + } + // Illegal rune + return Properties{}, 1 +} diff --git a/vendor/golang.org/x/text/unicode/bidi/ranges_test.go b/vendor/golang.org/x/text/unicode/bidi/ranges_test.go new file mode 100644 index 0000000..bfaecd5 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/ranges_test.go @@ -0,0 +1,53 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package bidi + +import ( + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/ucd" + "golang.org/x/text/unicode/rangetable" +) + +// These tables are hand-extracted from: +// http://www.unicode.org/Public/8.0.0/ucd/extracted/DerivedBidiClass.txt +func visitDefaults(fn func(r rune, c Class)) { + // first write default values for ranges listed above. + visitRunes(fn, AL, []rune{ + 0x0600, 0x07BF, // Arabic + 0x08A0, 0x08FF, // Arabic Extended-A + 0xFB50, 0xFDCF, // Arabic Presentation Forms + 0xFDF0, 0xFDFF, + 0xFE70, 0xFEFF, + 0x0001EE00, 0x0001EEFF, // Arabic Mathematical Alpha Symbols + }) + visitRunes(fn, R, []rune{ + 0x0590, 0x05FF, // Hebrew + 0x07C0, 0x089F, // Nko et al. + 0xFB1D, 0xFB4F, + 0x00010800, 0x00010FFF, // Cypriot Syllabary et. al. + 0x0001E800, 0x0001EDFF, + 0x0001EF00, 0x0001EFFF, + }) + visitRunes(fn, ET, []rune{ // European Terminator + 0x20A0, 0x20Cf, // Currency symbols + }) + rangetable.Visit(unicode.Noncharacter_Code_Point, func(r rune) { + fn(r, BN) // Boundary Neutral + }) + ucd.Parse(gen.OpenUCDFile("DerivedCoreProperties.txt"), func(p *ucd.Parser) { + if p.String(1) == "Default_Ignorable_Code_Point" { + fn(p.Rune(0), BN) // Boundary Neutral + } + }) +} + +func visitRunes(fn func(r rune, c Class), c Class, runes []rune) { + for i := 0; i < len(runes); i += 2 { + lo, hi := runes[i], runes[i+1] + for j := lo; j <= hi; j++ { + fn(j, c) + } + } +} diff --git a/vendor/golang.org/x/text/unicode/bidi/tables.go b/vendor/golang.org/x/text/unicode/bidi/tables.go new file mode 100644 index 0000000..7212d5a --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables.go @@ -0,0 +1,1779 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 15744 bytes (15.38 KiB). Checksum: b4c3b70954803b86. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 222 blocks, 14208 entries, 14208 bytes +// The third block is the zero block. +var bidiValues = [14208]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x0001, 0x5e1: 0x0001, 0x5e2: 0x0001, 0x5e3: 0x0001, + 0x5e4: 0x0001, 0x5e5: 0x0001, 0x5e6: 0x0001, 0x5e7: 0x0001, 0x5e8: 0x0001, 0x5e9: 0x0001, + 0x5ea: 0x0001, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001, + 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, + 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, + 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, + // Block 0x18, offset 0x600 + 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, + 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, + 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, + 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, + 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, + 0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, + 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa01: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa8a: 0x000c, + 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, + 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, + 0xaff: 0x0004, + // Block 0x2c, offset 0xb00 + 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, + 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, + // Block 0x2d, offset 0xb40 + 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, + 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, + 0xb7c: 0x000c, + // Block 0x2e, offset 0xb80 + 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, + 0xb8c: 0x000c, 0xb8d: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbd8: 0x000c, 0xbd9: 0x000c, + 0xbf5: 0x000c, + 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, + 0xbfc: 0x003a, 0xbfd: 0x002a, + // Block 0x30, offset 0xc00 + 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, + 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, + 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, + // Block 0x31, offset 0xc40 + 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, + 0xc46: 0x000c, 0xc47: 0x000c, + 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, + 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, + 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, + 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, + 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, + 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, + 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, + // Block 0x32, offset 0xc80 + 0xc86: 0x000c, + // Block 0x33, offset 0xcc0 + 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, + 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, + 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, + 0xcfd: 0x000c, 0xcfe: 0x000c, + // Block 0x34, offset 0xd00 + 0xd18: 0x000c, 0xd19: 0x000c, + 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, + 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, + // Block 0x35, offset 0xd40 + 0xd42: 0x000c, 0xd45: 0x000c, + 0xd46: 0x000c, + 0xd4d: 0x000c, + 0xd5d: 0x000c, + // Block 0x36, offset 0xd80 + 0xd9d: 0x000c, + 0xd9e: 0x000c, 0xd9f: 0x000c, + // Block 0x37, offset 0xdc0 + 0xdd0: 0x000a, 0xdd1: 0x000a, + 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, + 0xdd8: 0x000a, 0xdd9: 0x000a, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x0009, + 0xe5b: 0x007a, 0xe5c: 0x006a, + // Block 0x3a, offset 0xe80 + 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, + 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf34: 0x000c, 0xf35: 0x000c, + 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, + 0xf3c: 0x000c, 0xf3d: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, + 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, + 0xf52: 0x000c, 0xf53: 0x000c, + 0xf5b: 0x0004, 0xf5d: 0x000c, + 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, + 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, + // Block 0x3e, offset 0xf80 + 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, + 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, + // Block 0x3f, offset 0xfc0 + 0xfc5: 0x000c, + 0xfc6: 0x000c, + 0xfe9: 0x000c, + // Block 0x40, offset 0x1000 + 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, + 0x1027: 0x000c, 0x1028: 0x000c, + 0x1032: 0x000c, + 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, + // Block 0x41, offset 0x1040 + 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, + // Block 0x42, offset 0x1080 + 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, + 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, + 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, + 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, + 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, + 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10d7: 0x000c, + 0x10d8: 0x000c, 0x10db: 0x000c, + // Block 0x44, offset 0x1100 + 0x1116: 0x000c, + 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, + 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, + 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, + 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, + 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, + 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, + 0x113c: 0x000c, 0x113f: 0x000c, + // Block 0x45, offset 0x1140 + 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, + // Block 0x46, offset 0x1180 + 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, + 0x11b4: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, + 0x11bc: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c2: 0x000c, + 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, + 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, + 0x1222: 0x000c, 0x1223: 0x000c, + 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, + 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, + // Block 0x49, offset 0x1240 + 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, + 0x126d: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, + // Block 0x4a, offset 0x1280 + 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, + 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, + 0x12b6: 0x000c, 0x12b7: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x000c, 0x12d1: 0x000c, + 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, + 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, + 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, + 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, + 0x12ed: 0x000c, + 0x12f4: 0x000c, + 0x12f8: 0x000c, 0x12f9: 0x000c, + // Block 0x4c, offset 0x1300 + 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, + 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, + 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, + 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, + 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, + 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, + 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, + 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, + 0x133b: 0x000c, + 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, + // Block 0x4d, offset 0x1340 + 0x137d: 0x000a, 0x137f: 0x000a, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000a, 0x1381: 0x000a, + 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, + 0x139d: 0x000a, + 0x139e: 0x000a, 0x139f: 0x000a, + 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, + 0x13bd: 0x000a, 0x13be: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, + 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, + 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, + 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, + 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, + 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, + 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, + 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, + 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, + 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, + 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, + 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, + 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, + 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, + 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, + 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, + 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, + 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, + 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, + 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, + 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, + 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, + 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, + 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, + // Block 0x52, offset 0x1480 + 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, + 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, + 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, + 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, + 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, + 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, + 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, + 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, + 0x14b0: 0x000c, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, + 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, + 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, + 0x14d8: 0x000a, + 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, + 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, + 0x14ee: 0x0004, + 0x14fa: 0x000a, 0x14fb: 0x000a, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, + 0x150a: 0x000a, 0x150b: 0x000a, + 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, + 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, + // Block 0x55, offset 0x1540 + 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, + 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, + 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, + 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, + 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, + 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, + 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, + 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + // Block 0x59, offset 0x1640 + 0x167b: 0x000a, + 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, + 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, + 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, + 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, + 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, + 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a, + 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a, + 0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a, + 0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a, + 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, + 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, + 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1715: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, + 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, + 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, + 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, + 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a, + 0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a, + 0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a, + 0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a, + 0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a, + // Block 0x5e, offset 0x1780 + 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, + 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002, + 0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002, + 0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002, + 0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002, + // Block 0x5f, offset 0x17c0 + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a, + 0x182a: 0x000a, 0x182b: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, + 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, + 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x009a, + 0x1886: 0x008a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, + 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, + 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, + 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a, + 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a, + 0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a, + 0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a, + 0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba, + 0x18d8: 0x00aa, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x003a, 0x193d: 0x002a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, + 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, + 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, + 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, + 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, + 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, + 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, + 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, + 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a, + 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, + 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x000a, 0x19c1: 0x000a, 0x19c2: 0x000a, 0x19c3: 0x000a, 0x19c4: 0x000a, 0x19c5: 0x000a, + 0x19c6: 0x000a, 0x19c7: 0x000a, 0x19c8: 0x000a, 0x19ca: 0x000a, 0x19cb: 0x000a, + 0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a, + 0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 0x000a, + // Block 0x68, offset 0x1a00 + 0x1a25: 0x000a, 0x1a26: 0x000a, 0x1a27: 0x000a, 0x1a28: 0x000a, 0x1a29: 0x000a, + 0x1a2a: 0x000a, 0x1a2f: 0x000c, + 0x1a30: 0x000c, 0x1a31: 0x000c, + 0x1a39: 0x000a, 0x1a3a: 0x000a, 0x1a3b: 0x000a, + 0x1a3c: 0x000a, 0x1a3d: 0x000a, 0x1a3e: 0x000a, 0x1a3f: 0x000a, + // Block 0x69, offset 0x1a40 + 0x1a7f: 0x000c, + // Block 0x6a, offset 0x1a80 + 0x1aa0: 0x000c, 0x1aa1: 0x000c, 0x1aa2: 0x000c, 0x1aa3: 0x000c, + 0x1aa4: 0x000c, 0x1aa5: 0x000c, 0x1aa6: 0x000c, 0x1aa7: 0x000c, 0x1aa8: 0x000c, 0x1aa9: 0x000c, + 0x1aaa: 0x000c, 0x1aab: 0x000c, 0x1aac: 0x000c, 0x1aad: 0x000c, 0x1aae: 0x000c, 0x1aaf: 0x000c, + 0x1ab0: 0x000c, 0x1ab1: 0x000c, 0x1ab2: 0x000c, 0x1ab3: 0x000c, 0x1ab4: 0x000c, 0x1ab5: 0x000c, + 0x1ab6: 0x000c, 0x1ab7: 0x000c, 0x1ab8: 0x000c, 0x1ab9: 0x000c, 0x1aba: 0x000c, 0x1abb: 0x000c, + 0x1abc: 0x000c, 0x1abd: 0x000c, 0x1abe: 0x000c, 0x1abf: 0x000c, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, + 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, + 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, + 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1ada: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, + 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x003a, 0x1ae3: 0x002a, + 0x1ae4: 0x003a, 0x1ae5: 0x002a, 0x1ae6: 0x003a, 0x1ae7: 0x002a, 0x1ae8: 0x003a, 0x1ae9: 0x002a, + 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, + 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, + 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, + 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, + 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, + 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, + 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, + 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, + 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, + 0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, + 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, + 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, 0x1b96: 0x000a, 0x1b97: 0x000a, + 0x1b98: 0x000a, 0x1b99: 0x000a, 0x1b9a: 0x000a, 0x1b9b: 0x000a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, + 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, 0x1ba1: 0x000a, 0x1ba2: 0x000a, 0x1ba3: 0x000a, + 0x1ba4: 0x000a, 0x1ba5: 0x000a, 0x1ba6: 0x000a, 0x1ba7: 0x000a, 0x1ba8: 0x000a, 0x1ba9: 0x000a, + 0x1baa: 0x000a, 0x1bab: 0x000a, 0x1bac: 0x000a, 0x1bad: 0x000a, 0x1bae: 0x000a, 0x1baf: 0x000a, + 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x000a, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, 0x1bc5: 0x000a, + 0x1bc6: 0x000a, 0x1bc7: 0x000a, 0x1bc8: 0x000a, 0x1bc9: 0x000a, 0x1bca: 0x000a, 0x1bcb: 0x000a, + 0x1bcc: 0x000a, 0x1bcd: 0x000a, 0x1bce: 0x000a, 0x1bcf: 0x000a, 0x1bd0: 0x000a, 0x1bd1: 0x000a, + 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x000a, 0x1bd5: 0x000a, + 0x1bf0: 0x000a, 0x1bf1: 0x000a, 0x1bf2: 0x000a, 0x1bf3: 0x000a, 0x1bf4: 0x000a, 0x1bf5: 0x000a, + 0x1bf6: 0x000a, 0x1bf7: 0x000a, 0x1bf8: 0x000a, 0x1bf9: 0x000a, 0x1bfa: 0x000a, 0x1bfb: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0009, 0x1c01: 0x000a, 0x1c02: 0x000a, 0x1c03: 0x000a, 0x1c04: 0x000a, + 0x1c08: 0x003a, 0x1c09: 0x002a, 0x1c0a: 0x003a, 0x1c0b: 0x002a, + 0x1c0c: 0x003a, 0x1c0d: 0x002a, 0x1c0e: 0x003a, 0x1c0f: 0x002a, 0x1c10: 0x003a, 0x1c11: 0x002a, + 0x1c12: 0x000a, 0x1c13: 0x000a, 0x1c14: 0x003a, 0x1c15: 0x002a, 0x1c16: 0x003a, 0x1c17: 0x002a, + 0x1c18: 0x003a, 0x1c19: 0x002a, 0x1c1a: 0x003a, 0x1c1b: 0x002a, 0x1c1c: 0x000a, 0x1c1d: 0x000a, + 0x1c1e: 0x000a, 0x1c1f: 0x000a, 0x1c20: 0x000a, + 0x1c2a: 0x000c, 0x1c2b: 0x000c, 0x1c2c: 0x000c, 0x1c2d: 0x000c, + 0x1c30: 0x000a, + 0x1c36: 0x000a, 0x1c37: 0x000a, + 0x1c3d: 0x000a, 0x1c3e: 0x000a, 0x1c3f: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c59: 0x000c, 0x1c5a: 0x000c, 0x1c5b: 0x000a, 0x1c5c: 0x000a, + 0x1c60: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1cbb: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x000a, 0x1cc1: 0x000a, 0x1cc2: 0x000a, 0x1cc3: 0x000a, 0x1cc4: 0x000a, 0x1cc5: 0x000a, + 0x1cc6: 0x000a, 0x1cc7: 0x000a, 0x1cc8: 0x000a, 0x1cc9: 0x000a, 0x1cca: 0x000a, 0x1ccb: 0x000a, + 0x1ccc: 0x000a, 0x1ccd: 0x000a, 0x1cce: 0x000a, 0x1ccf: 0x000a, 0x1cd0: 0x000a, 0x1cd1: 0x000a, + 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, + 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, + 0x1cde: 0x000a, 0x1cdf: 0x000a, 0x1ce0: 0x000a, 0x1ce1: 0x000a, 0x1ce2: 0x000a, 0x1ce3: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d1d: 0x000a, + 0x1d1e: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d50: 0x000a, 0x1d51: 0x000a, + 0x1d52: 0x000a, 0x1d53: 0x000a, 0x1d54: 0x000a, 0x1d55: 0x000a, 0x1d56: 0x000a, 0x1d57: 0x000a, + 0x1d58: 0x000a, 0x1d59: 0x000a, 0x1d5a: 0x000a, 0x1d5b: 0x000a, 0x1d5c: 0x000a, 0x1d5d: 0x000a, + 0x1d5e: 0x000a, 0x1d5f: 0x000a, + 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1db1: 0x000a, 0x1db2: 0x000a, 0x1db3: 0x000a, 0x1db4: 0x000a, 0x1db5: 0x000a, + 0x1db6: 0x000a, 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, 0x1dbb: 0x000a, + 0x1dbc: 0x000a, 0x1dbd: 0x000a, 0x1dbe: 0x000a, 0x1dbf: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1dcc: 0x000a, 0x1dcd: 0x000a, 0x1dce: 0x000a, 0x1dcf: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e5e: 0x000a, 0x1e5f: 0x000a, + 0x1e7f: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e90: 0x000a, 0x1e91: 0x000a, + 0x1e92: 0x000a, 0x1e93: 0x000a, 0x1e94: 0x000a, 0x1e95: 0x000a, 0x1e96: 0x000a, 0x1e97: 0x000a, + 0x1e98: 0x000a, 0x1e99: 0x000a, 0x1e9a: 0x000a, 0x1e9b: 0x000a, 0x1e9c: 0x000a, 0x1e9d: 0x000a, + 0x1e9e: 0x000a, 0x1e9f: 0x000a, 0x1ea0: 0x000a, 0x1ea1: 0x000a, 0x1ea2: 0x000a, 0x1ea3: 0x000a, + 0x1ea4: 0x000a, 0x1ea5: 0x000a, 0x1ea6: 0x000a, 0x1ea7: 0x000a, 0x1ea8: 0x000a, 0x1ea9: 0x000a, + 0x1eaa: 0x000a, 0x1eab: 0x000a, 0x1eac: 0x000a, 0x1ead: 0x000a, 0x1eae: 0x000a, 0x1eaf: 0x000a, + 0x1eb0: 0x000a, 0x1eb1: 0x000a, 0x1eb2: 0x000a, 0x1eb3: 0x000a, 0x1eb4: 0x000a, 0x1eb5: 0x000a, + 0x1eb6: 0x000a, 0x1eb7: 0x000a, 0x1eb8: 0x000a, 0x1eb9: 0x000a, 0x1eba: 0x000a, 0x1ebb: 0x000a, + 0x1ebc: 0x000a, 0x1ebd: 0x000a, 0x1ebe: 0x000a, 0x1ebf: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x000a, 0x1ec1: 0x000a, 0x1ec2: 0x000a, 0x1ec3: 0x000a, 0x1ec4: 0x000a, 0x1ec5: 0x000a, + 0x1ec6: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f0d: 0x000a, 0x1f0e: 0x000a, 0x1f0f: 0x000a, + // Block 0x7d, offset 0x1f40 + 0x1f6f: 0x000c, + 0x1f70: 0x000c, 0x1f71: 0x000c, 0x1f72: 0x000c, 0x1f73: 0x000a, 0x1f74: 0x000c, 0x1f75: 0x000c, + 0x1f76: 0x000c, 0x1f77: 0x000c, 0x1f78: 0x000c, 0x1f79: 0x000c, 0x1f7a: 0x000c, 0x1f7b: 0x000c, + 0x1f7c: 0x000c, 0x1f7d: 0x000c, 0x1f7e: 0x000a, 0x1f7f: 0x000a, + // Block 0x7e, offset 0x1f80 + 0x1f9e: 0x000c, 0x1f9f: 0x000c, + // Block 0x7f, offset 0x1fc0 + 0x1ff0: 0x000c, 0x1ff1: 0x000c, + // Block 0x80, offset 0x2000 + 0x2000: 0x000a, 0x2001: 0x000a, 0x2002: 0x000a, 0x2003: 0x000a, 0x2004: 0x000a, 0x2005: 0x000a, + 0x2006: 0x000a, 0x2007: 0x000a, 0x2008: 0x000a, 0x2009: 0x000a, 0x200a: 0x000a, 0x200b: 0x000a, + 0x200c: 0x000a, 0x200d: 0x000a, 0x200e: 0x000a, 0x200f: 0x000a, 0x2010: 0x000a, 0x2011: 0x000a, + 0x2012: 0x000a, 0x2013: 0x000a, 0x2014: 0x000a, 0x2015: 0x000a, 0x2016: 0x000a, 0x2017: 0x000a, + 0x2018: 0x000a, 0x2019: 0x000a, 0x201a: 0x000a, 0x201b: 0x000a, 0x201c: 0x000a, 0x201d: 0x000a, + 0x201e: 0x000a, 0x201f: 0x000a, 0x2020: 0x000a, 0x2021: 0x000a, + // Block 0x81, offset 0x2040 + 0x2048: 0x000a, + // Block 0x82, offset 0x2080 + 0x2082: 0x000c, + 0x2086: 0x000c, 0x208b: 0x000c, + 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a8: 0x000a, 0x20a9: 0x000a, + 0x20aa: 0x000a, 0x20ab: 0x000a, + 0x20b8: 0x0004, 0x20b9: 0x0004, + // Block 0x83, offset 0x20c0 + 0x20f4: 0x000a, 0x20f5: 0x000a, + 0x20f6: 0x000a, 0x20f7: 0x000a, + // Block 0x84, offset 0x2100 + 0x2104: 0x000c, 0x2105: 0x000c, + 0x2120: 0x000c, 0x2121: 0x000c, 0x2122: 0x000c, 0x2123: 0x000c, + 0x2124: 0x000c, 0x2125: 0x000c, 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, + 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, 0x212e: 0x000c, 0x212f: 0x000c, + 0x2130: 0x000c, 0x2131: 0x000c, + // Block 0x85, offset 0x2140 + 0x2166: 0x000c, 0x2167: 0x000c, 0x2168: 0x000c, 0x2169: 0x000c, + 0x216a: 0x000c, 0x216b: 0x000c, 0x216c: 0x000c, 0x216d: 0x000c, + // Block 0x86, offset 0x2180 + 0x2187: 0x000c, 0x2188: 0x000c, 0x2189: 0x000c, 0x218a: 0x000c, 0x218b: 0x000c, + 0x218c: 0x000c, 0x218d: 0x000c, 0x218e: 0x000c, 0x218f: 0x000c, 0x2190: 0x000c, 0x2191: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21c0: 0x000c, 0x21c1: 0x000c, 0x21c2: 0x000c, + 0x21f3: 0x000c, + 0x21f6: 0x000c, 0x21f7: 0x000c, 0x21f8: 0x000c, 0x21f9: 0x000c, + 0x21fc: 0x000c, + // Block 0x88, offset 0x2200 + 0x2225: 0x000c, + // Block 0x89, offset 0x2240 + 0x2269: 0x000c, + 0x226a: 0x000c, 0x226b: 0x000c, 0x226c: 0x000c, 0x226d: 0x000c, 0x226e: 0x000c, + 0x2271: 0x000c, 0x2272: 0x000c, 0x2275: 0x000c, + 0x2276: 0x000c, + // Block 0x8a, offset 0x2280 + 0x2283: 0x000c, + 0x228c: 0x000c, + 0x22bc: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22f0: 0x000c, 0x22f2: 0x000c, 0x22f3: 0x000c, 0x22f4: 0x000c, + 0x22f7: 0x000c, 0x22f8: 0x000c, + 0x22fe: 0x000c, 0x22ff: 0x000c, + // Block 0x8c, offset 0x2300 + 0x2301: 0x000c, + 0x232c: 0x000c, 0x232d: 0x000c, + 0x2336: 0x000c, + // Block 0x8d, offset 0x2340 + 0x2365: 0x000c, 0x2368: 0x000c, + 0x236d: 0x000c, + // Block 0x8e, offset 0x2380 + 0x239d: 0x0001, + 0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001, + 0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003, + 0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001, + 0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001, + 0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001, + 0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001, + 0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001, + 0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d, + 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, + 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, + 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, + 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, + 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d, + // Block 0x90, offset 0x2400 + 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, + 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, + 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000d, 0x2411: 0x000d, + 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, + 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, + 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, + 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, + 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, + 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, + 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, + 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000a, 0x243f: 0x000a, + // Block 0x91, offset 0x2440 + 0x2440: 0x000d, 0x2441: 0x000d, 0x2442: 0x000d, 0x2443: 0x000d, 0x2444: 0x000d, 0x2445: 0x000d, + 0x2446: 0x000d, 0x2447: 0x000d, 0x2448: 0x000d, 0x2449: 0x000d, 0x244a: 0x000d, 0x244b: 0x000d, + 0x244c: 0x000d, 0x244d: 0x000d, 0x244e: 0x000d, 0x244f: 0x000d, 0x2450: 0x000b, 0x2451: 0x000b, + 0x2452: 0x000b, 0x2453: 0x000b, 0x2454: 0x000b, 0x2455: 0x000b, 0x2456: 0x000b, 0x2457: 0x000b, + 0x2458: 0x000b, 0x2459: 0x000b, 0x245a: 0x000b, 0x245b: 0x000b, 0x245c: 0x000b, 0x245d: 0x000b, + 0x245e: 0x000b, 0x245f: 0x000b, 0x2460: 0x000b, 0x2461: 0x000b, 0x2462: 0x000b, 0x2463: 0x000b, + 0x2464: 0x000b, 0x2465: 0x000b, 0x2466: 0x000b, 0x2467: 0x000b, 0x2468: 0x000b, 0x2469: 0x000b, + 0x246a: 0x000b, 0x246b: 0x000b, 0x246c: 0x000b, 0x246d: 0x000b, 0x246e: 0x000b, 0x246f: 0x000b, + 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, + 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, + 0x247c: 0x000d, 0x247d: 0x000a, 0x247e: 0x000d, 0x247f: 0x000d, + // Block 0x92, offset 0x2480 + 0x2480: 0x000c, 0x2481: 0x000c, 0x2482: 0x000c, 0x2483: 0x000c, 0x2484: 0x000c, 0x2485: 0x000c, + 0x2486: 0x000c, 0x2487: 0x000c, 0x2488: 0x000c, 0x2489: 0x000c, 0x248a: 0x000c, 0x248b: 0x000c, + 0x248c: 0x000c, 0x248d: 0x000c, 0x248e: 0x000c, 0x248f: 0x000c, 0x2490: 0x000a, 0x2491: 0x000a, + 0x2492: 0x000a, 0x2493: 0x000a, 0x2494: 0x000a, 0x2495: 0x000a, 0x2496: 0x000a, 0x2497: 0x000a, + 0x2498: 0x000a, 0x2499: 0x000a, + 0x24a0: 0x000c, 0x24a1: 0x000c, 0x24a2: 0x000c, 0x24a3: 0x000c, + 0x24a4: 0x000c, 0x24a5: 0x000c, 0x24a6: 0x000c, 0x24a7: 0x000c, 0x24a8: 0x000c, 0x24a9: 0x000c, + 0x24aa: 0x000c, 0x24ab: 0x000c, 0x24ac: 0x000c, 0x24ad: 0x000c, 0x24ae: 0x000c, 0x24af: 0x000c, + 0x24b0: 0x000a, 0x24b1: 0x000a, 0x24b2: 0x000a, 0x24b3: 0x000a, 0x24b4: 0x000a, 0x24b5: 0x000a, + 0x24b6: 0x000a, 0x24b7: 0x000a, 0x24b8: 0x000a, 0x24b9: 0x000a, 0x24ba: 0x000a, 0x24bb: 0x000a, + 0x24bc: 0x000a, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000a, 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x000a, 0x24c4: 0x000a, 0x24c5: 0x000a, + 0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x000a, 0x24c9: 0x000a, 0x24ca: 0x000a, 0x24cb: 0x000a, + 0x24cc: 0x000a, 0x24cd: 0x000a, 0x24ce: 0x000a, 0x24cf: 0x000a, 0x24d0: 0x0006, 0x24d1: 0x000a, + 0x24d2: 0x0006, 0x24d4: 0x000a, 0x24d5: 0x0006, 0x24d6: 0x000a, 0x24d7: 0x000a, + 0x24d8: 0x000a, 0x24d9: 0x009a, 0x24da: 0x008a, 0x24db: 0x007a, 0x24dc: 0x006a, 0x24dd: 0x009a, + 0x24de: 0x008a, 0x24df: 0x0004, 0x24e0: 0x000a, 0x24e1: 0x000a, 0x24e2: 0x0003, 0x24e3: 0x0003, + 0x24e4: 0x000a, 0x24e5: 0x000a, 0x24e6: 0x000a, 0x24e8: 0x000a, 0x24e9: 0x0004, + 0x24ea: 0x0004, 0x24eb: 0x000a, + 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, + 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, + 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000d, + // Block 0x94, offset 0x2500 + 0x2500: 0x000d, 0x2501: 0x000d, 0x2502: 0x000d, 0x2503: 0x000d, 0x2504: 0x000d, 0x2505: 0x000d, + 0x2506: 0x000d, 0x2507: 0x000d, 0x2508: 0x000d, 0x2509: 0x000d, 0x250a: 0x000d, 0x250b: 0x000d, + 0x250c: 0x000d, 0x250d: 0x000d, 0x250e: 0x000d, 0x250f: 0x000d, 0x2510: 0x000d, 0x2511: 0x000d, + 0x2512: 0x000d, 0x2513: 0x000d, 0x2514: 0x000d, 0x2515: 0x000d, 0x2516: 0x000d, 0x2517: 0x000d, + 0x2518: 0x000d, 0x2519: 0x000d, 0x251a: 0x000d, 0x251b: 0x000d, 0x251c: 0x000d, 0x251d: 0x000d, + 0x251e: 0x000d, 0x251f: 0x000d, 0x2520: 0x000d, 0x2521: 0x000d, 0x2522: 0x000d, 0x2523: 0x000d, + 0x2524: 0x000d, 0x2525: 0x000d, 0x2526: 0x000d, 0x2527: 0x000d, 0x2528: 0x000d, 0x2529: 0x000d, + 0x252a: 0x000d, 0x252b: 0x000d, 0x252c: 0x000d, 0x252d: 0x000d, 0x252e: 0x000d, 0x252f: 0x000d, + 0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d, + 0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d, + 0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000b, + // Block 0x95, offset 0x2540 + 0x2541: 0x000a, 0x2542: 0x000a, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0004, + 0x2546: 0x000a, 0x2547: 0x000a, 0x2548: 0x003a, 0x2549: 0x002a, 0x254a: 0x000a, 0x254b: 0x0003, + 0x254c: 0x0006, 0x254d: 0x0003, 0x254e: 0x0006, 0x254f: 0x0006, 0x2550: 0x0002, 0x2551: 0x0002, + 0x2552: 0x0002, 0x2553: 0x0002, 0x2554: 0x0002, 0x2555: 0x0002, 0x2556: 0x0002, 0x2557: 0x0002, + 0x2558: 0x0002, 0x2559: 0x0002, 0x255a: 0x0006, 0x255b: 0x000a, 0x255c: 0x000a, 0x255d: 0x000a, + 0x255e: 0x000a, 0x255f: 0x000a, 0x2560: 0x000a, + 0x257b: 0x005a, + 0x257c: 0x000a, 0x257d: 0x004a, 0x257e: 0x000a, 0x257f: 0x000a, + // Block 0x96, offset 0x2580 + 0x2580: 0x000a, + 0x259b: 0x005a, 0x259c: 0x000a, 0x259d: 0x004a, + 0x259e: 0x000a, 0x259f: 0x00fa, 0x25a0: 0x00ea, 0x25a1: 0x000a, 0x25a2: 0x003a, 0x25a3: 0x002a, + 0x25a4: 0x000a, 0x25a5: 0x000a, + // Block 0x97, offset 0x25c0 + 0x25e0: 0x0004, 0x25e1: 0x0004, 0x25e2: 0x000a, 0x25e3: 0x000a, + 0x25e4: 0x000a, 0x25e5: 0x0004, 0x25e6: 0x0004, 0x25e8: 0x000a, 0x25e9: 0x000a, + 0x25ea: 0x000a, 0x25eb: 0x000a, 0x25ec: 0x000a, 0x25ed: 0x000a, 0x25ee: 0x000a, + 0x25f0: 0x000b, 0x25f1: 0x000b, 0x25f2: 0x000b, 0x25f3: 0x000b, 0x25f4: 0x000b, 0x25f5: 0x000b, + 0x25f6: 0x000b, 0x25f7: 0x000b, 0x25f8: 0x000b, 0x25f9: 0x000a, 0x25fa: 0x000a, 0x25fb: 0x000a, + 0x25fc: 0x000a, 0x25fd: 0x000a, 0x25fe: 0x000b, 0x25ff: 0x000b, + // Block 0x98, offset 0x2600 + 0x2601: 0x000a, + // Block 0x99, offset 0x2640 + 0x2640: 0x000a, 0x2641: 0x000a, 0x2642: 0x000a, 0x2643: 0x000a, 0x2644: 0x000a, 0x2645: 0x000a, + 0x2646: 0x000a, 0x2647: 0x000a, 0x2648: 0x000a, 0x2649: 0x000a, 0x264a: 0x000a, 0x264b: 0x000a, + 0x264c: 0x000a, 0x2650: 0x000a, 0x2651: 0x000a, + 0x2652: 0x000a, 0x2653: 0x000a, 0x2654: 0x000a, 0x2655: 0x000a, 0x2656: 0x000a, 0x2657: 0x000a, + 0x2658: 0x000a, 0x2659: 0x000a, 0x265a: 0x000a, 0x265b: 0x000a, + 0x2660: 0x000a, + // Block 0x9a, offset 0x2680 + 0x26bd: 0x000c, + // Block 0x9b, offset 0x26c0 + 0x26e0: 0x000c, 0x26e1: 0x0002, 0x26e2: 0x0002, 0x26e3: 0x0002, + 0x26e4: 0x0002, 0x26e5: 0x0002, 0x26e6: 0x0002, 0x26e7: 0x0002, 0x26e8: 0x0002, 0x26e9: 0x0002, + 0x26ea: 0x0002, 0x26eb: 0x0002, 0x26ec: 0x0002, 0x26ed: 0x0002, 0x26ee: 0x0002, 0x26ef: 0x0002, + 0x26f0: 0x0002, 0x26f1: 0x0002, 0x26f2: 0x0002, 0x26f3: 0x0002, 0x26f4: 0x0002, 0x26f5: 0x0002, + 0x26f6: 0x0002, 0x26f7: 0x0002, 0x26f8: 0x0002, 0x26f9: 0x0002, 0x26fa: 0x0002, 0x26fb: 0x0002, + // Block 0x9c, offset 0x2700 + 0x2736: 0x000c, 0x2737: 0x000c, 0x2738: 0x000c, 0x2739: 0x000c, 0x273a: 0x000c, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, + 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, + 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, + 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, + 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, + 0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, + 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, + 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, + 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, + 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, + 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, + 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, + 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, + 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, + 0x279e: 0x0001, 0x279f: 0x000a, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, + 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, + 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, + 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, + 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x000c, 0x27c2: 0x000c, 0x27c3: 0x000c, 0x27c4: 0x0001, 0x27c5: 0x000c, + 0x27c6: 0x000c, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x000c, 0x27cd: 0x000c, 0x27ce: 0x000c, 0x27cf: 0x000c, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x000c, 0x27f9: 0x000c, 0x27fa: 0x000c, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x000c, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, + 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001, + 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, + 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, + 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, + 0x2824: 0x0001, 0x2825: 0x000c, 0x2826: 0x000c, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, + 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, + 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, + 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x0001, 0x283a: 0x0001, 0x283b: 0x0001, + 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x0001, + // Block 0xa1, offset 0x2840 + 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, + 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, + 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, + 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, + 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, + 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, + 0x2864: 0x0001, 0x2865: 0x0001, 0x2866: 0x0001, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, + 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, + 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, + 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x000a, 0x287a: 0x000a, 0x287b: 0x000a, + 0x287c: 0x000a, 0x287d: 0x000a, 0x287e: 0x000a, 0x287f: 0x000a, + // Block 0xa2, offset 0x2880 + 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, + 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, + 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, + 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, + 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005, + 0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005, + 0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005, + 0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005, + 0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005, + 0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001, + // Block 0xa3, offset 0x28c0 + 0x28c1: 0x000c, + 0x28f8: 0x000c, 0x28f9: 0x000c, 0x28fa: 0x000c, 0x28fb: 0x000c, + 0x28fc: 0x000c, 0x28fd: 0x000c, 0x28fe: 0x000c, 0x28ff: 0x000c, + // Block 0xa4, offset 0x2900 + 0x2900: 0x000c, 0x2901: 0x000c, 0x2902: 0x000c, 0x2903: 0x000c, 0x2904: 0x000c, 0x2905: 0x000c, + 0x2906: 0x000c, + 0x2912: 0x000a, 0x2913: 0x000a, 0x2914: 0x000a, 0x2915: 0x000a, 0x2916: 0x000a, 0x2917: 0x000a, + 0x2918: 0x000a, 0x2919: 0x000a, 0x291a: 0x000a, 0x291b: 0x000a, 0x291c: 0x000a, 0x291d: 0x000a, + 0x291e: 0x000a, 0x291f: 0x000a, 0x2920: 0x000a, 0x2921: 0x000a, 0x2922: 0x000a, 0x2923: 0x000a, + 0x2924: 0x000a, 0x2925: 0x000a, + 0x293f: 0x000c, + // Block 0xa5, offset 0x2940 + 0x2940: 0x000c, 0x2941: 0x000c, + 0x2973: 0x000c, 0x2974: 0x000c, 0x2975: 0x000c, + 0x2976: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c, + // Block 0xa6, offset 0x2980 + 0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c, + 0x29a7: 0x000c, 0x29a8: 0x000c, 0x29a9: 0x000c, + 0x29aa: 0x000c, 0x29ab: 0x000c, 0x29ad: 0x000c, 0x29ae: 0x000c, 0x29af: 0x000c, + 0x29b0: 0x000c, 0x29b1: 0x000c, 0x29b2: 0x000c, 0x29b3: 0x000c, 0x29b4: 0x000c, + // Block 0xa7, offset 0x29c0 + 0x29f3: 0x000c, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x000c, 0x2a01: 0x000c, + 0x2a36: 0x000c, 0x2a37: 0x000c, 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c, + 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a4a: 0x000c, 0x2a4b: 0x000c, + 0x2a4c: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2aaf: 0x000c, + 0x2ab0: 0x000c, 0x2ab1: 0x000c, 0x2ab4: 0x000c, + 0x2ab6: 0x000c, 0x2ab7: 0x000c, + 0x2abe: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2adf: 0x000c, 0x2ae3: 0x000c, + 0x2ae4: 0x000c, 0x2ae5: 0x000c, 0x2ae6: 0x000c, 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c, + 0x2aea: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x000c, 0x2b01: 0x000c, + 0x2b3c: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, + 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, + 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c, + 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c, + 0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c, + 0x2bc6: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c, + 0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c, + 0x2c3f: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c, + 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x000c, + 0x2cdc: 0x000c, 0x2cdd: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, + 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, + 0x2d3d: 0x000c, 0x2d3f: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x000c, + 0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a, + 0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a, + 0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a, + // Block 0xb6, offset 0x2d80 + 0x2dab: 0x000c, 0x2dad: 0x000c, + 0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, + 0x2db7: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2ddd: 0x000c, + 0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c, + 0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c, + 0x2dea: 0x000c, 0x2deb: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, + 0x2e36: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, 0x2e3b: 0x000c, + 0x2e3c: 0x000c, 0x2e3d: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c, + 0x2e58: 0x000c, 0x2e59: 0x000c, 0x2e5a: 0x000c, 0x2e5b: 0x000c, 0x2e5c: 0x000c, 0x2e5d: 0x000c, + 0x2e5e: 0x000c, 0x2e5f: 0x000c, 0x2e60: 0x000c, 0x2e61: 0x000c, 0x2e62: 0x000c, 0x2e63: 0x000c, + 0x2e64: 0x000c, 0x2e65: 0x000c, 0x2e66: 0x000c, 0x2e67: 0x000c, + 0x2e6a: 0x000c, 0x2e6b: 0x000c, 0x2e6c: 0x000c, 0x2e6d: 0x000c, 0x2e6e: 0x000c, 0x2e6f: 0x000c, + 0x2e70: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e75: 0x000c, + 0x2e76: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ef0: 0x000c, 0x2ef1: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef4: 0x000c, 0x2ef5: 0x000c, + 0x2ef6: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, + 0x2f12: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f5d: 0x000c, + 0x2f5e: 0x000c, 0x2f60: 0x000b, 0x2f61: 0x000b, 0x2f62: 0x000b, 0x2f63: 0x000b, + // Block 0xbe, offset 0x2f80 + 0x2fa7: 0x000c, 0x2fa8: 0x000c, 0x2fa9: 0x000c, + 0x2fb3: 0x000b, 0x2fb4: 0x000b, 0x2fb5: 0x000b, + 0x2fb6: 0x000b, 0x2fb7: 0x000b, 0x2fb8: 0x000b, 0x2fb9: 0x000b, 0x2fba: 0x000b, 0x2fbb: 0x000c, + 0x2fbc: 0x000c, 0x2fbd: 0x000c, 0x2fbe: 0x000c, 0x2fbf: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0x000c, 0x2fc1: 0x000c, 0x2fc2: 0x000c, 0x2fc5: 0x000c, + 0x2fc6: 0x000c, 0x2fc7: 0x000c, 0x2fc8: 0x000c, 0x2fc9: 0x000c, 0x2fca: 0x000c, 0x2fcb: 0x000c, + 0x2fea: 0x000c, 0x2feb: 0x000c, 0x2fec: 0x000c, 0x2fed: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3000: 0x000a, 0x3001: 0x000a, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000a, + // Block 0xc1, offset 0x3040 + 0x3040: 0x000a, 0x3041: 0x000a, 0x3042: 0x000a, 0x3043: 0x000a, 0x3044: 0x000a, 0x3045: 0x000a, + 0x3046: 0x000a, 0x3047: 0x000a, 0x3048: 0x000a, 0x3049: 0x000a, 0x304a: 0x000a, 0x304b: 0x000a, + 0x304c: 0x000a, 0x304d: 0x000a, 0x304e: 0x000a, 0x304f: 0x000a, 0x3050: 0x000a, 0x3051: 0x000a, + 0x3052: 0x000a, 0x3053: 0x000a, 0x3054: 0x000a, 0x3055: 0x000a, 0x3056: 0x000a, + // Block 0xc2, offset 0x3080 + 0x309b: 0x000a, + // Block 0xc3, offset 0x30c0 + 0x30d5: 0x000a, + // Block 0xc4, offset 0x3100 + 0x310f: 0x000a, + // Block 0xc5, offset 0x3140 + 0x3149: 0x000a, + // Block 0xc6, offset 0x3180 + 0x3183: 0x000a, + 0x318e: 0x0002, 0x318f: 0x0002, 0x3190: 0x0002, 0x3191: 0x0002, + 0x3192: 0x0002, 0x3193: 0x0002, 0x3194: 0x0002, 0x3195: 0x0002, 0x3196: 0x0002, 0x3197: 0x0002, + 0x3198: 0x0002, 0x3199: 0x0002, 0x319a: 0x0002, 0x319b: 0x0002, 0x319c: 0x0002, 0x319d: 0x0002, + 0x319e: 0x0002, 0x319f: 0x0002, 0x31a0: 0x0002, 0x31a1: 0x0002, 0x31a2: 0x0002, 0x31a3: 0x0002, + 0x31a4: 0x0002, 0x31a5: 0x0002, 0x31a6: 0x0002, 0x31a7: 0x0002, 0x31a8: 0x0002, 0x31a9: 0x0002, + 0x31aa: 0x0002, 0x31ab: 0x0002, 0x31ac: 0x0002, 0x31ad: 0x0002, 0x31ae: 0x0002, 0x31af: 0x0002, + 0x31b0: 0x0002, 0x31b1: 0x0002, 0x31b2: 0x0002, 0x31b3: 0x0002, 0x31b4: 0x0002, 0x31b5: 0x0002, + 0x31b6: 0x0002, 0x31b7: 0x0002, 0x31b8: 0x0002, 0x31b9: 0x0002, 0x31ba: 0x0002, 0x31bb: 0x0002, + 0x31bc: 0x0002, 0x31bd: 0x0002, 0x31be: 0x0002, 0x31bf: 0x0002, + // Block 0xc7, offset 0x31c0 + 0x31c0: 0x000c, 0x31c1: 0x000c, 0x31c2: 0x000c, 0x31c3: 0x000c, 0x31c4: 0x000c, 0x31c5: 0x000c, + 0x31c6: 0x000c, 0x31c7: 0x000c, 0x31c8: 0x000c, 0x31c9: 0x000c, 0x31ca: 0x000c, 0x31cb: 0x000c, + 0x31cc: 0x000c, 0x31cd: 0x000c, 0x31ce: 0x000c, 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c, + 0x31d2: 0x000c, 0x31d3: 0x000c, 0x31d4: 0x000c, 0x31d5: 0x000c, 0x31d6: 0x000c, 0x31d7: 0x000c, + 0x31d8: 0x000c, 0x31d9: 0x000c, 0x31da: 0x000c, 0x31db: 0x000c, 0x31dc: 0x000c, 0x31dd: 0x000c, + 0x31de: 0x000c, 0x31df: 0x000c, 0x31e0: 0x000c, 0x31e1: 0x000c, 0x31e2: 0x000c, 0x31e3: 0x000c, + 0x31e4: 0x000c, 0x31e5: 0x000c, 0x31e6: 0x000c, 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c, + 0x31ea: 0x000c, 0x31eb: 0x000c, 0x31ec: 0x000c, 0x31ed: 0x000c, 0x31ee: 0x000c, 0x31ef: 0x000c, + 0x31f0: 0x000c, 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c, + 0x31f6: 0x000c, 0x31fb: 0x000c, + 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c, + 0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c, + 0x320c: 0x000c, 0x320d: 0x000c, 0x320e: 0x000c, 0x320f: 0x000c, 0x3210: 0x000c, 0x3211: 0x000c, + 0x3212: 0x000c, 0x3213: 0x000c, 0x3214: 0x000c, 0x3215: 0x000c, 0x3216: 0x000c, 0x3217: 0x000c, + 0x3218: 0x000c, 0x3219: 0x000c, 0x321a: 0x000c, 0x321b: 0x000c, 0x321c: 0x000c, 0x321d: 0x000c, + 0x321e: 0x000c, 0x321f: 0x000c, 0x3220: 0x000c, 0x3221: 0x000c, 0x3222: 0x000c, 0x3223: 0x000c, + 0x3224: 0x000c, 0x3225: 0x000c, 0x3226: 0x000c, 0x3227: 0x000c, 0x3228: 0x000c, 0x3229: 0x000c, + 0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c, + 0x3235: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3244: 0x000c, + 0x325b: 0x000c, 0x325c: 0x000c, 0x325d: 0x000c, + 0x325e: 0x000c, 0x325f: 0x000c, 0x3261: 0x000c, 0x3262: 0x000c, 0x3263: 0x000c, + 0x3264: 0x000c, 0x3265: 0x000c, 0x3266: 0x000c, 0x3267: 0x000c, 0x3268: 0x000c, 0x3269: 0x000c, + 0x326a: 0x000c, 0x326b: 0x000c, 0x326c: 0x000c, 0x326d: 0x000c, 0x326e: 0x000c, 0x326f: 0x000c, + // Block 0xca, offset 0x3280 + 0x3280: 0x000c, 0x3281: 0x000c, 0x3282: 0x000c, 0x3283: 0x000c, 0x3284: 0x000c, 0x3285: 0x000c, + 0x3286: 0x000c, 0x3288: 0x000c, 0x3289: 0x000c, 0x328a: 0x000c, 0x328b: 0x000c, + 0x328c: 0x000c, 0x328d: 0x000c, 0x328e: 0x000c, 0x328f: 0x000c, 0x3290: 0x000c, 0x3291: 0x000c, + 0x3292: 0x000c, 0x3293: 0x000c, 0x3294: 0x000c, 0x3295: 0x000c, 0x3296: 0x000c, 0x3297: 0x000c, + 0x3298: 0x000c, 0x329b: 0x000c, 0x329c: 0x000c, 0x329d: 0x000c, + 0x329e: 0x000c, 0x329f: 0x000c, 0x32a0: 0x000c, 0x32a1: 0x000c, 0x32a3: 0x000c, + 0x32a4: 0x000c, 0x32a6: 0x000c, 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c, + 0x32aa: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x0001, 0x32c1: 0x0001, 0x32c2: 0x0001, 0x32c3: 0x0001, 0x32c4: 0x0001, 0x32c5: 0x0001, + 0x32c6: 0x0001, 0x32c7: 0x0001, 0x32c8: 0x0001, 0x32c9: 0x0001, 0x32ca: 0x0001, 0x32cb: 0x0001, + 0x32cc: 0x0001, 0x32cd: 0x0001, 0x32ce: 0x0001, 0x32cf: 0x0001, 0x32d0: 0x000c, 0x32d1: 0x000c, + 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x0001, + 0x32d8: 0x0001, 0x32d9: 0x0001, 0x32da: 0x0001, 0x32db: 0x0001, 0x32dc: 0x0001, 0x32dd: 0x0001, + 0x32de: 0x0001, 0x32df: 0x0001, 0x32e0: 0x0001, 0x32e1: 0x0001, 0x32e2: 0x0001, 0x32e3: 0x0001, + 0x32e4: 0x0001, 0x32e5: 0x0001, 0x32e6: 0x0001, 0x32e7: 0x0001, 0x32e8: 0x0001, 0x32e9: 0x0001, + 0x32ea: 0x0001, 0x32eb: 0x0001, 0x32ec: 0x0001, 0x32ed: 0x0001, 0x32ee: 0x0001, 0x32ef: 0x0001, + 0x32f0: 0x0001, 0x32f1: 0x0001, 0x32f2: 0x0001, 0x32f3: 0x0001, 0x32f4: 0x0001, 0x32f5: 0x0001, + 0x32f6: 0x0001, 0x32f7: 0x0001, 0x32f8: 0x0001, 0x32f9: 0x0001, 0x32fa: 0x0001, 0x32fb: 0x0001, + 0x32fc: 0x0001, 0x32fd: 0x0001, 0x32fe: 0x0001, 0x32ff: 0x0001, + // Block 0xcc, offset 0x3300 + 0x3300: 0x0001, 0x3301: 0x0001, 0x3302: 0x0001, 0x3303: 0x0001, 0x3304: 0x000c, 0x3305: 0x000c, + 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x0001, + 0x330c: 0x0001, 0x330d: 0x0001, 0x330e: 0x0001, 0x330f: 0x0001, 0x3310: 0x0001, 0x3311: 0x0001, + 0x3312: 0x0001, 0x3313: 0x0001, 0x3314: 0x0001, 0x3315: 0x0001, 0x3316: 0x0001, 0x3317: 0x0001, + 0x3318: 0x0001, 0x3319: 0x0001, 0x331a: 0x0001, 0x331b: 0x0001, 0x331c: 0x0001, 0x331d: 0x0001, + 0x331e: 0x0001, 0x331f: 0x0001, 0x3320: 0x0001, 0x3321: 0x0001, 0x3322: 0x0001, 0x3323: 0x0001, + 0x3324: 0x0001, 0x3325: 0x0001, 0x3326: 0x0001, 0x3327: 0x0001, 0x3328: 0x0001, 0x3329: 0x0001, + 0x332a: 0x0001, 0x332b: 0x0001, 0x332c: 0x0001, 0x332d: 0x0001, 0x332e: 0x0001, 0x332f: 0x0001, + 0x3330: 0x0001, 0x3331: 0x0001, 0x3332: 0x0001, 0x3333: 0x0001, 0x3334: 0x0001, 0x3335: 0x0001, + 0x3336: 0x0001, 0x3337: 0x0001, 0x3338: 0x0001, 0x3339: 0x0001, 0x333a: 0x0001, 0x333b: 0x0001, + 0x333c: 0x0001, 0x333d: 0x0001, 0x333e: 0x0001, 0x333f: 0x0001, + // Block 0xcd, offset 0x3340 + 0x3340: 0x000d, 0x3341: 0x000d, 0x3342: 0x000d, 0x3343: 0x000d, 0x3344: 0x000d, 0x3345: 0x000d, + 0x3346: 0x000d, 0x3347: 0x000d, 0x3348: 0x000d, 0x3349: 0x000d, 0x334a: 0x000d, 0x334b: 0x000d, + 0x334c: 0x000d, 0x334d: 0x000d, 0x334e: 0x000d, 0x334f: 0x000d, 0x3350: 0x000d, 0x3351: 0x000d, + 0x3352: 0x000d, 0x3353: 0x000d, 0x3354: 0x000d, 0x3355: 0x000d, 0x3356: 0x000d, 0x3357: 0x000d, + 0x3358: 0x000d, 0x3359: 0x000d, 0x335a: 0x000d, 0x335b: 0x000d, 0x335c: 0x000d, 0x335d: 0x000d, + 0x335e: 0x000d, 0x335f: 0x000d, 0x3360: 0x000d, 0x3361: 0x000d, 0x3362: 0x000d, 0x3363: 0x000d, + 0x3364: 0x000d, 0x3365: 0x000d, 0x3366: 0x000d, 0x3367: 0x000d, 0x3368: 0x000d, 0x3369: 0x000d, + 0x336a: 0x000d, 0x336b: 0x000d, 0x336c: 0x000d, 0x336d: 0x000d, 0x336e: 0x000d, 0x336f: 0x000d, + 0x3370: 0x000a, 0x3371: 0x000a, 0x3372: 0x000d, 0x3373: 0x000d, 0x3374: 0x000d, 0x3375: 0x000d, + 0x3376: 0x000d, 0x3377: 0x000d, 0x3378: 0x000d, 0x3379: 0x000d, 0x337a: 0x000d, 0x337b: 0x000d, + 0x337c: 0x000d, 0x337d: 0x000d, 0x337e: 0x000d, 0x337f: 0x000d, + // Block 0xce, offset 0x3380 + 0x3380: 0x000a, 0x3381: 0x000a, 0x3382: 0x000a, 0x3383: 0x000a, 0x3384: 0x000a, 0x3385: 0x000a, + 0x3386: 0x000a, 0x3387: 0x000a, 0x3388: 0x000a, 0x3389: 0x000a, 0x338a: 0x000a, 0x338b: 0x000a, + 0x338c: 0x000a, 0x338d: 0x000a, 0x338e: 0x000a, 0x338f: 0x000a, 0x3390: 0x000a, 0x3391: 0x000a, + 0x3392: 0x000a, 0x3393: 0x000a, 0x3394: 0x000a, 0x3395: 0x000a, 0x3396: 0x000a, 0x3397: 0x000a, + 0x3398: 0x000a, 0x3399: 0x000a, 0x339a: 0x000a, 0x339b: 0x000a, 0x339c: 0x000a, 0x339d: 0x000a, + 0x339e: 0x000a, 0x339f: 0x000a, 0x33a0: 0x000a, 0x33a1: 0x000a, 0x33a2: 0x000a, 0x33a3: 0x000a, + 0x33a4: 0x000a, 0x33a5: 0x000a, 0x33a6: 0x000a, 0x33a7: 0x000a, 0x33a8: 0x000a, 0x33a9: 0x000a, + 0x33aa: 0x000a, 0x33ab: 0x000a, + 0x33b0: 0x000a, 0x33b1: 0x000a, 0x33b2: 0x000a, 0x33b3: 0x000a, 0x33b4: 0x000a, 0x33b5: 0x000a, + 0x33b6: 0x000a, 0x33b7: 0x000a, 0x33b8: 0x000a, 0x33b9: 0x000a, 0x33ba: 0x000a, 0x33bb: 0x000a, + 0x33bc: 0x000a, 0x33bd: 0x000a, 0x33be: 0x000a, 0x33bf: 0x000a, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x000a, 0x33c1: 0x000a, 0x33c2: 0x000a, 0x33c3: 0x000a, 0x33c4: 0x000a, 0x33c5: 0x000a, + 0x33c6: 0x000a, 0x33c7: 0x000a, 0x33c8: 0x000a, 0x33c9: 0x000a, 0x33ca: 0x000a, 0x33cb: 0x000a, + 0x33cc: 0x000a, 0x33cd: 0x000a, 0x33ce: 0x000a, 0x33cf: 0x000a, 0x33d0: 0x000a, 0x33d1: 0x000a, + 0x33d2: 0x000a, 0x33d3: 0x000a, + 0x33e0: 0x000a, 0x33e1: 0x000a, 0x33e2: 0x000a, 0x33e3: 0x000a, + 0x33e4: 0x000a, 0x33e5: 0x000a, 0x33e6: 0x000a, 0x33e7: 0x000a, 0x33e8: 0x000a, 0x33e9: 0x000a, + 0x33ea: 0x000a, 0x33eb: 0x000a, 0x33ec: 0x000a, 0x33ed: 0x000a, 0x33ee: 0x000a, + 0x33f1: 0x000a, 0x33f2: 0x000a, 0x33f3: 0x000a, 0x33f4: 0x000a, 0x33f5: 0x000a, + 0x33f6: 0x000a, 0x33f7: 0x000a, 0x33f8: 0x000a, 0x33f9: 0x000a, 0x33fa: 0x000a, 0x33fb: 0x000a, + 0x33fc: 0x000a, 0x33fd: 0x000a, 0x33fe: 0x000a, 0x33ff: 0x000a, + // Block 0xd0, offset 0x3400 + 0x3401: 0x000a, 0x3402: 0x000a, 0x3403: 0x000a, 0x3404: 0x000a, 0x3405: 0x000a, + 0x3406: 0x000a, 0x3407: 0x000a, 0x3408: 0x000a, 0x3409: 0x000a, 0x340a: 0x000a, 0x340b: 0x000a, + 0x340c: 0x000a, 0x340d: 0x000a, 0x340e: 0x000a, 0x340f: 0x000a, 0x3411: 0x000a, + 0x3412: 0x000a, 0x3413: 0x000a, 0x3414: 0x000a, 0x3415: 0x000a, 0x3416: 0x000a, 0x3417: 0x000a, + 0x3418: 0x000a, 0x3419: 0x000a, 0x341a: 0x000a, 0x341b: 0x000a, 0x341c: 0x000a, 0x341d: 0x000a, + 0x341e: 0x000a, 0x341f: 0x000a, 0x3420: 0x000a, 0x3421: 0x000a, 0x3422: 0x000a, 0x3423: 0x000a, + 0x3424: 0x000a, 0x3425: 0x000a, 0x3426: 0x000a, 0x3427: 0x000a, 0x3428: 0x000a, 0x3429: 0x000a, + 0x342a: 0x000a, 0x342b: 0x000a, 0x342c: 0x000a, 0x342d: 0x000a, 0x342e: 0x000a, 0x342f: 0x000a, + 0x3430: 0x000a, 0x3431: 0x000a, 0x3432: 0x000a, 0x3433: 0x000a, 0x3434: 0x000a, 0x3435: 0x000a, + // Block 0xd1, offset 0x3440 + 0x3440: 0x0002, 0x3441: 0x0002, 0x3442: 0x0002, 0x3443: 0x0002, 0x3444: 0x0002, 0x3445: 0x0002, + 0x3446: 0x0002, 0x3447: 0x0002, 0x3448: 0x0002, 0x3449: 0x0002, 0x344a: 0x0002, 0x344b: 0x000a, + 0x344c: 0x000a, + // Block 0xd2, offset 0x3480 + 0x34aa: 0x000a, 0x34ab: 0x000a, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a, + 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a, + 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a, + 0x34d2: 0x000a, + 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a, + 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a, + 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, + 0x34f0: 0x000a, 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a, + 0x34f6: 0x000a, + // Block 0xd4, offset 0x3500 + 0x3500: 0x000a, 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a, + 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a, + 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3510: 0x000a, 0x3511: 0x000a, + 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, + // Block 0xd5, offset 0x3540 + 0x3540: 0x000a, 0x3541: 0x000a, 0x3542: 0x000a, 0x3543: 0x000a, 0x3544: 0x000a, 0x3545: 0x000a, + 0x3546: 0x000a, 0x3547: 0x000a, 0x3548: 0x000a, 0x3549: 0x000a, 0x354a: 0x000a, 0x354b: 0x000a, + 0x3550: 0x000a, 0x3551: 0x000a, + 0x3552: 0x000a, 0x3553: 0x000a, 0x3554: 0x000a, 0x3555: 0x000a, 0x3556: 0x000a, 0x3557: 0x000a, + 0x3558: 0x000a, 0x3559: 0x000a, 0x355a: 0x000a, 0x355b: 0x000a, 0x355c: 0x000a, 0x355d: 0x000a, + 0x355e: 0x000a, 0x355f: 0x000a, 0x3560: 0x000a, 0x3561: 0x000a, 0x3562: 0x000a, 0x3563: 0x000a, + 0x3564: 0x000a, 0x3565: 0x000a, 0x3566: 0x000a, 0x3567: 0x000a, 0x3568: 0x000a, 0x3569: 0x000a, + 0x356a: 0x000a, 0x356b: 0x000a, 0x356c: 0x000a, 0x356d: 0x000a, 0x356e: 0x000a, 0x356f: 0x000a, + 0x3570: 0x000a, 0x3571: 0x000a, 0x3572: 0x000a, 0x3573: 0x000a, 0x3574: 0x000a, 0x3575: 0x000a, + 0x3576: 0x000a, 0x3577: 0x000a, 0x3578: 0x000a, 0x3579: 0x000a, 0x357a: 0x000a, 0x357b: 0x000a, + 0x357c: 0x000a, 0x357d: 0x000a, 0x357e: 0x000a, 0x357f: 0x000a, + // Block 0xd6, offset 0x3580 + 0x3580: 0x000a, 0x3581: 0x000a, 0x3582: 0x000a, 0x3583: 0x000a, 0x3584: 0x000a, 0x3585: 0x000a, + 0x3586: 0x000a, 0x3587: 0x000a, + 0x3590: 0x000a, 0x3591: 0x000a, + 0x3592: 0x000a, 0x3593: 0x000a, 0x3594: 0x000a, 0x3595: 0x000a, 0x3596: 0x000a, 0x3597: 0x000a, + 0x3598: 0x000a, 0x3599: 0x000a, + 0x35a0: 0x000a, 0x35a1: 0x000a, 0x35a2: 0x000a, 0x35a3: 0x000a, + 0x35a4: 0x000a, 0x35a5: 0x000a, 0x35a6: 0x000a, 0x35a7: 0x000a, 0x35a8: 0x000a, 0x35a9: 0x000a, + 0x35aa: 0x000a, 0x35ab: 0x000a, 0x35ac: 0x000a, 0x35ad: 0x000a, 0x35ae: 0x000a, 0x35af: 0x000a, + 0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000a, 0x35b3: 0x000a, 0x35b4: 0x000a, 0x35b5: 0x000a, + 0x35b6: 0x000a, 0x35b7: 0x000a, 0x35b8: 0x000a, 0x35b9: 0x000a, 0x35ba: 0x000a, 0x35bb: 0x000a, + 0x35bc: 0x000a, 0x35bd: 0x000a, 0x35be: 0x000a, 0x35bf: 0x000a, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a, + 0x35c6: 0x000a, 0x35c7: 0x000a, + 0x35d0: 0x000a, 0x35d1: 0x000a, + 0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a, + 0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a, + 0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, + 0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a, + 0x35ea: 0x000a, 0x35eb: 0x000a, 0x35ec: 0x000a, 0x35ed: 0x000a, + // Block 0xd8, offset 0x3600 + 0x3610: 0x000a, 0x3611: 0x000a, + 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, 0x3615: 0x000a, 0x3616: 0x000a, 0x3617: 0x000a, + 0x3618: 0x000a, 0x3619: 0x000a, 0x361a: 0x000a, 0x361b: 0x000a, 0x361c: 0x000a, 0x361d: 0x000a, + 0x361e: 0x000a, 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, + 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, + 0x3630: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, + 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a, + 0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a, + // Block 0xd9, offset 0x3640 + 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, + 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, + 0x3650: 0x000a, 0x3651: 0x000a, + 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a, + 0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a, + 0x365e: 0x000a, + // Block 0xda, offset 0x3680 + 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a, + 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a, + 0x368c: 0x000a, 0x368d: 0x000a, 0x368e: 0x000a, 0x368f: 0x000a, 0x3690: 0x000a, 0x3691: 0x000a, + // Block 0xdb, offset 0x36c0 + 0x36fe: 0x000b, 0x36ff: 0x000b, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000b, 0x3701: 0x000b, 0x3702: 0x000b, 0x3703: 0x000b, 0x3704: 0x000b, 0x3705: 0x000b, + 0x3706: 0x000b, 0x3707: 0x000b, 0x3708: 0x000b, 0x3709: 0x000b, 0x370a: 0x000b, 0x370b: 0x000b, + 0x370c: 0x000b, 0x370d: 0x000b, 0x370e: 0x000b, 0x370f: 0x000b, 0x3710: 0x000b, 0x3711: 0x000b, + 0x3712: 0x000b, 0x3713: 0x000b, 0x3714: 0x000b, 0x3715: 0x000b, 0x3716: 0x000b, 0x3717: 0x000b, + 0x3718: 0x000b, 0x3719: 0x000b, 0x371a: 0x000b, 0x371b: 0x000b, 0x371c: 0x000b, 0x371d: 0x000b, + 0x371e: 0x000b, 0x371f: 0x000b, 0x3720: 0x000b, 0x3721: 0x000b, 0x3722: 0x000b, 0x3723: 0x000b, + 0x3724: 0x000b, 0x3725: 0x000b, 0x3726: 0x000b, 0x3727: 0x000b, 0x3728: 0x000b, 0x3729: 0x000b, + 0x372a: 0x000b, 0x372b: 0x000b, 0x372c: 0x000b, 0x372d: 0x000b, 0x372e: 0x000b, 0x372f: 0x000b, + 0x3730: 0x000b, 0x3731: 0x000b, 0x3732: 0x000b, 0x3733: 0x000b, 0x3734: 0x000b, 0x3735: 0x000b, + 0x3736: 0x000b, 0x3737: 0x000b, 0x3738: 0x000b, 0x3739: 0x000b, 0x373a: 0x000b, 0x373b: 0x000b, + 0x373c: 0x000b, 0x373d: 0x000b, 0x373e: 0x000b, 0x373f: 0x000b, + // Block 0xdd, offset 0x3740 + 0x3740: 0x000c, 0x3741: 0x000c, 0x3742: 0x000c, 0x3743: 0x000c, 0x3744: 0x000c, 0x3745: 0x000c, + 0x3746: 0x000c, 0x3747: 0x000c, 0x3748: 0x000c, 0x3749: 0x000c, 0x374a: 0x000c, 0x374b: 0x000c, + 0x374c: 0x000c, 0x374d: 0x000c, 0x374e: 0x000c, 0x374f: 0x000c, 0x3750: 0x000c, 0x3751: 0x000c, + 0x3752: 0x000c, 0x3753: 0x000c, 0x3754: 0x000c, 0x3755: 0x000c, 0x3756: 0x000c, 0x3757: 0x000c, + 0x3758: 0x000c, 0x3759: 0x000c, 0x375a: 0x000c, 0x375b: 0x000c, 0x375c: 0x000c, 0x375d: 0x000c, + 0x375e: 0x000c, 0x375f: 0x000c, 0x3760: 0x000c, 0x3761: 0x000c, 0x3762: 0x000c, 0x3763: 0x000c, + 0x3764: 0x000c, 0x3765: 0x000c, 0x3766: 0x000c, 0x3767: 0x000c, 0x3768: 0x000c, 0x3769: 0x000c, + 0x376a: 0x000c, 0x376b: 0x000c, 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c, + 0x3770: 0x000b, 0x3771: 0x000b, 0x3772: 0x000b, 0x3773: 0x000b, 0x3774: 0x000b, 0x3775: 0x000b, + 0x3776: 0x000b, 0x3777: 0x000b, 0x3778: 0x000b, 0x3779: 0x000b, 0x377a: 0x000b, 0x377b: 0x000b, + 0x377c: 0x000b, 0x377d: 0x000b, 0x377e: 0x000b, 0x377f: 0x000b, +} + +// bidiIndex: 24 blocks, 1536 entries, 1536 bytes +// Block 0 is the zero block. +var bidiIndex = [1536]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, + 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, + // Block 0x5, offset 0x140 + 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, + 0x14d: 0x34, 0x14e: 0x35, + 0x150: 0x36, + 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, + 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, + 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, + 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, + 0x17e: 0x4b, 0x17f: 0x4c, + // Block 0x6, offset 0x180 + 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, + 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x59, + 0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, + 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5e, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5f, 0x19e: 0x54, 0x19f: 0x60, + 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x61, 0x1a7: 0x62, + 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x65, + 0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68, + 0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6d, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6e, 0x1c2: 0x6f, 0x1c3: 0x70, 0x1c7: 0x71, + 0x1c8: 0x72, 0x1c9: 0x73, 0x1ca: 0x74, 0x1cb: 0x75, 0x1cd: 0x76, 0x1cf: 0x77, + // Block 0x8, offset 0x200 + 0x237: 0x54, + // Block 0x9, offset 0x240 + 0x252: 0x78, 0x253: 0x79, + 0x258: 0x7a, 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, 0x25c: 0x7e, 0x25e: 0x7f, + 0x260: 0x80, 0x261: 0x81, 0x263: 0x82, 0x264: 0x83, 0x265: 0x84, 0x266: 0x85, 0x267: 0x86, + 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26f: 0x8b, + // Block 0xa, offset 0x280 + 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8f, + 0x2b8: 0x90, 0x2b9: 0x91, 0x2ba: 0x0e, 0x2bb: 0x92, 0x2bc: 0x93, 0x2bd: 0x94, 0x2bf: 0x95, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x96, 0x2c5: 0x54, 0x2c6: 0x97, 0x2c7: 0x98, + 0x2cb: 0x99, 0x2cd: 0x9a, + 0x2e0: 0x9b, 0x2e1: 0x9b, 0x2e2: 0x9b, 0x2e3: 0x9b, 0x2e4: 0x9c, 0x2e5: 0x9b, 0x2e6: 0x9b, 0x2e7: 0x9b, + 0x2e8: 0x9d, 0x2e9: 0x9b, 0x2ea: 0x9b, 0x2eb: 0x9e, 0x2ec: 0x9f, 0x2ed: 0x9b, 0x2ee: 0x9b, 0x2ef: 0x9b, + 0x2f0: 0x9b, 0x2f1: 0x9b, 0x2f2: 0x9b, 0x2f3: 0x9b, 0x2f4: 0x9b, 0x2f5: 0x9b, 0x2f6: 0x9b, 0x2f7: 0x9b, + 0x2f8: 0x9b, 0x2f9: 0xa0, 0x2fa: 0x9b, 0x2fb: 0x9b, 0x2fc: 0x9b, 0x2fd: 0x9b, 0x2fe: 0x9b, 0x2ff: 0x9b, + // Block 0xc, offset 0x300 + 0x300: 0xa1, 0x301: 0xa2, 0x302: 0xa3, 0x304: 0xa4, 0x305: 0xa5, 0x306: 0xa6, 0x307: 0xa7, + 0x308: 0xa8, 0x30b: 0xa9, 0x30c: 0xaa, 0x30d: 0xab, + 0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1, + 0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5, + 0x330: 0xb6, 0x332: 0xb7, + // Block 0xd, offset 0x340 + 0x36b: 0xb8, 0x36c: 0xb9, + 0x37e: 0xba, + // Block 0xe, offset 0x380 + 0x3b2: 0xbb, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xbc, 0x3c6: 0xbd, + 0x3c8: 0x54, 0x3c9: 0xbe, 0x3cc: 0x54, 0x3cd: 0xbf, + 0x3db: 0xc0, 0x3dc: 0xc1, 0x3dd: 0xc2, 0x3de: 0xc3, 0x3df: 0xc4, + 0x3e8: 0xc5, 0x3e9: 0xc6, 0x3ea: 0xc7, + // Block 0x10, offset 0x400 + 0x400: 0xc8, + 0x420: 0x9b, 0x421: 0x9b, 0x422: 0x9b, 0x423: 0xc9, 0x424: 0x9b, 0x425: 0xca, 0x426: 0x9b, 0x427: 0x9b, + 0x428: 0x9b, 0x429: 0x9b, 0x42a: 0x9b, 0x42b: 0x9b, 0x42c: 0x9b, 0x42d: 0x9b, 0x42e: 0x9b, 0x42f: 0x9b, + 0x430: 0x9b, 0x431: 0x9b, 0x432: 0x9b, 0x433: 0x9b, 0x434: 0x9b, 0x435: 0x9b, 0x436: 0x9b, 0x437: 0x9b, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcb, 0x43c: 0x9b, 0x43d: 0x9b, 0x43e: 0x9b, 0x43f: 0x9b, + // Block 0x11, offset 0x440 + 0x440: 0xcc, 0x441: 0x54, 0x442: 0xcd, 0x443: 0xce, 0x444: 0xcf, 0x445: 0xd0, + 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, + 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, + 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd1, 0x45c: 0x54, 0x45d: 0x6c, 0x45e: 0x54, 0x45f: 0xd2, + 0x460: 0xd3, 0x461: 0xd4, 0x462: 0xd5, 0x464: 0xd6, 0x465: 0xd7, 0x466: 0xd8, 0x467: 0x36, + 0x47f: 0xd9, + // Block 0x12, offset 0x480 + 0x4bf: 0xd9, + // Block 0x13, offset 0x4c0 + 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, + 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, + 0x4ef: 0x10, + 0x4ff: 0x10, + // Block 0x14, offset 0x500 + 0x50f: 0x10, + 0x51f: 0x10, + 0x52f: 0x10, + 0x53f: 0x10, + // Block 0x15, offset 0x540 + 0x540: 0xda, 0x541: 0xda, 0x542: 0xda, 0x543: 0xda, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xdb, + 0x548: 0xda, 0x549: 0xda, 0x54a: 0xda, 0x54b: 0xda, 0x54c: 0xda, 0x54d: 0xda, 0x54e: 0xda, 0x54f: 0xda, + 0x550: 0xda, 0x551: 0xda, 0x552: 0xda, 0x553: 0xda, 0x554: 0xda, 0x555: 0xda, 0x556: 0xda, 0x557: 0xda, + 0x558: 0xda, 0x559: 0xda, 0x55a: 0xda, 0x55b: 0xda, 0x55c: 0xda, 0x55d: 0xda, 0x55e: 0xda, 0x55f: 0xda, + 0x560: 0xda, 0x561: 0xda, 0x562: 0xda, 0x563: 0xda, 0x564: 0xda, 0x565: 0xda, 0x566: 0xda, 0x567: 0xda, + 0x568: 0xda, 0x569: 0xda, 0x56a: 0xda, 0x56b: 0xda, 0x56c: 0xda, 0x56d: 0xda, 0x56e: 0xda, 0x56f: 0xda, + 0x570: 0xda, 0x571: 0xda, 0x572: 0xda, 0x573: 0xda, 0x574: 0xda, 0x575: 0xda, 0x576: 0xda, 0x577: 0xda, + 0x578: 0xda, 0x579: 0xda, 0x57a: 0xda, 0x57b: 0xda, 0x57c: 0xda, 0x57d: 0xda, 0x57e: 0xda, 0x57f: 0xda, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 15800 bytes (15KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables_test.go b/vendor/golang.org/x/text/unicode/bidi/tables_test.go new file mode 100644 index 0000000..356a4a5 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables_test.go @@ -0,0 +1,82 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidi + +import ( + "testing" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/internal/ucd" +) + +var labels = []string{ + AL: "AL", + AN: "AN", + B: "B", + BN: "BN", + CS: "CS", + EN: "EN", + ES: "ES", + ET: "ET", + L: "L", + NSM: "NSM", + ON: "ON", + R: "R", + S: "S", + WS: "WS", + + LRO: "LRO", + RLO: "RLO", + LRE: "LRE", + RLE: "RLE", + PDF: "PDF", + LRI: "LRI", + RLI: "RLI", + FSI: "FSI", + PDI: "PDI", +} + +func TestTables(t *testing.T) { + testtext.SkipIfNotLong(t) + + ucd.Parse(gen.OpenUCDFile("BidiBrackets.txt"), func(p *ucd.Parser) { + r1 := p.Rune(0) + want := p.Rune(1) + + e, _ := LookupRune(r1) + if got := e.reverseBracket(r1); got != want { + t.Errorf("Reverse(%U) = %U; want %U", r1, got, want) + } + }) + + done := map[rune]bool{} + test := func(name string, r rune, want string) { + str := string(r) + e, _ := LookupString(str) + if got := labels[e.Class()]; got != want { + t.Errorf("%s:%U: got %s; want %s", name, r, got, want) + } + if e2, sz := LookupRune(r); e != e2 || sz != len(str) { + t.Errorf("LookupRune(%U) = %v, %d; want %v, %d", r, e2, e, sz, len(str)) + } + if e2, sz := Lookup([]byte(str)); e != e2 || sz != len(str) { + t.Errorf("Lookup(%U) = %v, %d; want %v, %d", r, e2, e, sz, len(str)) + } + done[r] = true + } + + // Insert the derived BiDi properties. + ucd.Parse(gen.OpenUCDFile("extracted/DerivedBidiClass.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + test("derived", r, p.String(1)) + }) + visitDefaults(func(r rune, c Class) { + if !done[r] { + test("default", r, labels[c]) + } + }) + +} diff --git a/vendor/golang.org/x/text/unicode/bidi/trieval.go b/vendor/golang.org/x/text/unicode/bidi/trieval.go new file mode 100644 index 0000000..4c459c4 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/trieval.go @@ -0,0 +1,60 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package bidi + +// Class is the Unicode BiDi class. Each rune has a single class. +type Class uint + +const ( + L Class = iota // LeftToRight + R // RightToLeft + EN // EuropeanNumber + ES // EuropeanSeparator + ET // EuropeanTerminator + AN // ArabicNumber + CS // CommonSeparator + B // ParagraphSeparator + S // SegmentSeparator + WS // WhiteSpace + ON // OtherNeutral + BN // BoundaryNeutral + NSM // NonspacingMark + AL // ArabicLetter + Control // Control LRO - PDI + + numClass + + LRO // LeftToRightOverride + RLO // RightToLeftOverride + LRE // LeftToRightEmbedding + RLE // RightToLeftEmbedding + PDF // PopDirectionalFormat + LRI // LeftToRightIsolate + RLI // RightToLeftIsolate + FSI // FirstStrongIsolate + PDI // PopDirectionalIsolate + + unknownClass = ^Class(0) +) + +var controlToClass = map[rune]Class{ + 0x202D: LRO, // LeftToRightOverride, + 0x202E: RLO, // RightToLeftOverride, + 0x202A: LRE, // LeftToRightEmbedding, + 0x202B: RLE, // RightToLeftEmbedding, + 0x202C: PDF, // PopDirectionalFormat, + 0x2066: LRI, // LeftToRightIsolate, + 0x2067: RLI, // RightToLeftIsolate, + 0x2068: FSI, // FirstStrongIsolate, + 0x2069: PDI, // PopDirectionalIsolate, +} + +// A trie entry has the following bits: +// 7..5 XOR mask for brackets +// 4 1: Bracket open, 0: Bracket close +// 3..0 Class type + +const ( + openMask = 0x10 + xorMaskShift = 5 +) diff --git a/vendor/golang.org/x/text/unicode/cldr/base.go b/vendor/golang.org/x/text/unicode/cldr/base.go new file mode 100644 index 0000000..2382f4d --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/base.go @@ -0,0 +1,100 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import ( + "encoding/xml" + "regexp" + "strconv" +) + +// Elem is implemented by every XML element. +type Elem interface { + setEnclosing(Elem) + setName(string) + enclosing() Elem + + GetCommon() *Common +} + +type hidden struct { + CharData string `xml:",chardata"` + Alias *struct { + Common + Source string `xml:"source,attr"` + Path string `xml:"path,attr"` + } `xml:"alias"` + Def *struct { + Common + Choice string `xml:"choice,attr,omitempty"` + Type string `xml:"type,attr,omitempty"` + } `xml:"default"` +} + +// Common holds several of the most common attributes and sub elements +// of an XML element. +type Common struct { + XMLName xml.Name + name string + enclElem Elem + Type string `xml:"type,attr,omitempty"` + Reference string `xml:"reference,attr,omitempty"` + Alt string `xml:"alt,attr,omitempty"` + ValidSubLocales string `xml:"validSubLocales,attr,omitempty"` + Draft string `xml:"draft,attr,omitempty"` + hidden +} + +// Default returns the default type to select from the enclosed list +// or "" if no default value is specified. +func (e *Common) Default() string { + if e.Def == nil { + return "" + } + if e.Def.Choice != "" { + return e.Def.Choice + } else if e.Def.Type != "" { + // Type is still used by the default element in collation. + return e.Def.Type + } + return "" +} + +// GetCommon returns e. It is provided such that Common implements Elem. +func (e *Common) GetCommon() *Common { + return e +} + +// Data returns the character data accumulated for this element. +func (e *Common) Data() string { + e.CharData = charRe.ReplaceAllStringFunc(e.CharData, replaceUnicode) + return e.CharData +} + +func (e *Common) setName(s string) { + e.name = s +} + +func (e *Common) enclosing() Elem { + return e.enclElem +} + +func (e *Common) setEnclosing(en Elem) { + e.enclElem = en +} + +// Escape characters that can be escaped without further escaping the string. +var charRe = regexp.MustCompile(`&#x[0-9a-fA-F]*;|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\[abtnvfr]`) + +// replaceUnicode converts hexadecimal Unicode codepoint notations to a one-rune string. +// It assumes the input string is correctly formatted. +func replaceUnicode(s string) string { + if s[1] == '#' { + r, _ := strconv.ParseInt(s[3:len(s)-1], 16, 32) + return string(r) + } + r, _, _, _ := strconv.UnquoteChar(s, 0) + return string(r) +} diff --git a/vendor/golang.org/x/text/unicode/cldr/cldr.go b/vendor/golang.org/x/text/unicode/cldr/cldr.go new file mode 100644 index 0000000..2197f8a --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/cldr.go @@ -0,0 +1,130 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run makexml.go -output xml.go + +// Package cldr provides a parser for LDML and related XML formats. +// This package is intended to be used by the table generation tools +// for the various internationalization-related packages. +// As the XML types are generated from the CLDR DTD, and as the CLDR standard +// is periodically amended, this package may change considerably over time. +// This mostly means that data may appear and disappear between versions. +// That is, old code should keep compiling for newer versions, but data +// may have moved or changed. +// CLDR version 22 is the first version supported by this package. +// Older versions may not work. +package cldr // import "golang.org/x/text/unicode/cldr" + +import ( + "fmt" + "sort" +) + +// CLDR provides access to parsed data of the Unicode Common Locale Data Repository. +type CLDR struct { + parent map[string][]string + locale map[string]*LDML + resolved map[string]*LDML + bcp47 *LDMLBCP47 + supp *SupplementalData +} + +func makeCLDR() *CLDR { + return &CLDR{ + parent: make(map[string][]string), + locale: make(map[string]*LDML), + resolved: make(map[string]*LDML), + bcp47: &LDMLBCP47{}, + supp: &SupplementalData{}, + } +} + +// BCP47 returns the parsed BCP47 LDML data. If no such data was parsed, nil is returned. +func (cldr *CLDR) BCP47() *LDMLBCP47 { + return nil +} + +// Draft indicates the draft level of an element. +type Draft int + +const ( + Approved Draft = iota + Contributed + Provisional + Unconfirmed +) + +var drafts = []string{"unconfirmed", "provisional", "contributed", "approved", ""} + +// ParseDraft returns the Draft value corresponding to the given string. The +// empty string corresponds to Approved. +func ParseDraft(level string) (Draft, error) { + if level == "" { + return Approved, nil + } + for i, s := range drafts { + if level == s { + return Unconfirmed - Draft(i), nil + } + } + return Approved, fmt.Errorf("cldr: unknown draft level %q", level) +} + +func (d Draft) String() string { + return drafts[len(drafts)-1-int(d)] +} + +// SetDraftLevel sets which draft levels to include in the evaluated LDML. +// Any draft element for which the draft level is higher than lev will be excluded. +// If multiple draft levels are available for a single element, the one with the +// lowest draft level will be selected, unless preferDraft is true, in which case +// the highest draft will be chosen. +// It is assumed that the underlying LDML is canonicalized. +func (cldr *CLDR) SetDraftLevel(lev Draft, preferDraft bool) { + // TODO: implement + cldr.resolved = make(map[string]*LDML) +} + +// RawLDML returns the LDML XML for id in unresolved form. +// id must be one of the strings returned by Locales. +func (cldr *CLDR) RawLDML(loc string) *LDML { + return cldr.locale[loc] +} + +// LDML returns the fully resolved LDML XML for loc, which must be one of +// the strings returned by Locales. +func (cldr *CLDR) LDML(loc string) (*LDML, error) { + return cldr.resolve(loc) +} + +// Supplemental returns the parsed supplemental data. If no such data was parsed, +// nil is returned. +func (cldr *CLDR) Supplemental() *SupplementalData { + return cldr.supp +} + +// Locales returns the locales for which there exist files. +// Valid sublocales for which there is no file are not included. +// The root locale is always sorted first. +func (cldr *CLDR) Locales() []string { + loc := []string{"root"} + hasRoot := false + for l, _ := range cldr.locale { + if l == "root" { + hasRoot = true + continue + } + loc = append(loc, l) + } + sort.Strings(loc[1:]) + if !hasRoot { + return loc[1:] + } + return loc +} + +// Get fills in the fields of x based on the XPath path. +func Get(e Elem, path string) (res Elem, err error) { + return walkXPath(e, path) +} diff --git a/vendor/golang.org/x/text/unicode/cldr/cldr_test.go b/vendor/golang.org/x/text/unicode/cldr/cldr_test.go new file mode 100644 index 0000000..951028d --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/cldr_test.go @@ -0,0 +1,27 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import "testing" + +func TestParseDraft(t *testing.T) { + tests := []struct { + in string + draft Draft + err bool + }{ + {"unconfirmed", Unconfirmed, false}, + {"provisional", Provisional, false}, + {"contributed", Contributed, false}, + {"approved", Approved, false}, + {"", Approved, false}, + {"foo", Approved, true}, + } + for _, tt := range tests { + if d, err := ParseDraft(tt.in); d != tt.draft || (err != nil) != tt.err { + t.Errorf("%q: was %v, %v; want %v, %v", tt.in, d, err != nil, tt.draft, tt.err) + } + } +} diff --git a/vendor/golang.org/x/text/unicode/cldr/collate.go b/vendor/golang.org/x/text/unicode/cldr/collate.go new file mode 100644 index 0000000..80ee28d --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/collate.go @@ -0,0 +1,359 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import ( + "bufio" + "encoding/xml" + "errors" + "fmt" + "strconv" + "strings" + "unicode" + "unicode/utf8" +) + +// RuleProcessor can be passed to Collator's Process method, which +// parses the rules and calls the respective method for each rule found. +type RuleProcessor interface { + Reset(anchor string, before int) error + Insert(level int, str, context, extend string) error + Index(id string) +} + +const ( + // cldrIndex is a Unicode-reserved sentinel value used to mark the start + // of a grouping within an index. + // We ignore any rule that starts with this rune. + // See http://unicode.org/reports/tr35/#Collation_Elements for details. + cldrIndex = "\uFDD0" + + // specialAnchor is the format in which to represent logical reset positions, + // such as "first tertiary ignorable". + specialAnchor = "<%s/>" +) + +// Process parses the rules for the tailorings of this collation +// and calls the respective methods of p for each rule found. +func (c Collation) Process(p RuleProcessor) (err error) { + if len(c.Cr) > 0 { + if len(c.Cr) > 1 { + return fmt.Errorf("multiple cr elements, want 0 or 1") + } + return processRules(p, c.Cr[0].Data()) + } + if c.Rules.Any != nil { + return c.processXML(p) + } + return errors.New("no tailoring data") +} + +// processRules parses rules in the Collation Rule Syntax defined in +// http://www.unicode.org/reports/tr35/tr35-collation.html#Collation_Tailorings. +func processRules(p RuleProcessor, s string) (err error) { + chk := func(s string, e error) string { + if err == nil { + err = e + } + return s + } + i := 0 // Save the line number for use after the loop. + scanner := bufio.NewScanner(strings.NewReader(s)) + for ; scanner.Scan() && err == nil; i++ { + for s := skipSpace(scanner.Text()); s != "" && s[0] != '#'; s = skipSpace(s) { + level := 5 + var ch byte + switch ch, s = s[0], s[1:]; ch { + case '&': // followed by <anchor> or '[' <key> ']' + if s = skipSpace(s); consume(&s, '[') { + s = chk(parseSpecialAnchor(p, s)) + } else { + s = chk(parseAnchor(p, 0, s)) + } + case '<': // sort relation '<'{1,4}, optionally followed by '*'. + for level = 1; consume(&s, '<'); level++ { + } + if level > 4 { + err = fmt.Errorf("level %d > 4", level) + } + fallthrough + case '=': // identity relation, optionally followed by *. + if consume(&s, '*') { + s = chk(parseSequence(p, level, s)) + } else { + s = chk(parseOrder(p, level, s)) + } + default: + chk("", fmt.Errorf("illegal operator %q", ch)) + break + } + } + } + if chk("", scanner.Err()); err != nil { + return fmt.Errorf("%d: %v", i, err) + } + return nil +} + +// parseSpecialAnchor parses the anchor syntax which is either of the form +// ['before' <level>] <anchor> +// or +// [<label>] +// The starting should already be consumed. +func parseSpecialAnchor(p RuleProcessor, s string) (tail string, err error) { + i := strings.IndexByte(s, ']') + if i == -1 { + return "", errors.New("unmatched bracket") + } + a := strings.TrimSpace(s[:i]) + s = s[i+1:] + if strings.HasPrefix(a, "before ") { + l, err := strconv.ParseUint(skipSpace(a[len("before "):]), 10, 3) + if err != nil { + return s, err + } + return parseAnchor(p, int(l), s) + } + return s, p.Reset(fmt.Sprintf(specialAnchor, a), 0) +} + +func parseAnchor(p RuleProcessor, level int, s string) (tail string, err error) { + anchor, s, err := scanString(s) + if err != nil { + return s, err + } + return s, p.Reset(anchor, level) +} + +func parseOrder(p RuleProcessor, level int, s string) (tail string, err error) { + var value, context, extend string + if value, s, err = scanString(s); err != nil { + return s, err + } + if strings.HasPrefix(value, cldrIndex) { + p.Index(value[len(cldrIndex):]) + return + } + if consume(&s, '|') { + if context, s, err = scanString(s); err != nil { + return s, errors.New("missing string after context") + } + } + if consume(&s, '/') { + if extend, s, err = scanString(s); err != nil { + return s, errors.New("missing string after extension") + } + } + return s, p.Insert(level, value, context, extend) +} + +// scanString scans a single input string. +func scanString(s string) (str, tail string, err error) { + if s = skipSpace(s); s == "" { + return s, s, errors.New("missing string") + } + buf := [16]byte{} // small but enough to hold most cases. + value := buf[:0] + for s != "" { + if consume(&s, '\'') { + i := strings.IndexByte(s, '\'') + if i == -1 { + return "", "", errors.New(`unmatched single quote`) + } + if i == 0 { + value = append(value, '\'') + } else { + value = append(value, s[:i]...) + } + s = s[i+1:] + continue + } + r, sz := utf8.DecodeRuneInString(s) + if unicode.IsSpace(r) || strings.ContainsRune("&<=#", r) { + break + } + value = append(value, s[:sz]...) + s = s[sz:] + } + return string(value), skipSpace(s), nil +} + +func parseSequence(p RuleProcessor, level int, s string) (tail string, err error) { + if s = skipSpace(s); s == "" { + return s, errors.New("empty sequence") + } + last := rune(0) + for s != "" { + r, sz := utf8.DecodeRuneInString(s) + s = s[sz:] + + if r == '-' { + // We have a range. The first element was already written. + if last == 0 { + return s, errors.New("range without starter value") + } + r, sz = utf8.DecodeRuneInString(s) + s = s[sz:] + if r == utf8.RuneError || r < last { + return s, fmt.Errorf("invalid range %q-%q", last, r) + } + for i := last + 1; i <= r; i++ { + if err := p.Insert(level, string(i), "", ""); err != nil { + return s, err + } + } + last = 0 + continue + } + + if unicode.IsSpace(r) || unicode.IsPunct(r) { + break + } + + // normal case + if err := p.Insert(level, string(r), "", ""); err != nil { + return s, err + } + last = r + } + return s, nil +} + +func skipSpace(s string) string { + return strings.TrimLeftFunc(s, unicode.IsSpace) +} + +// consumes returns whether the next byte is ch. If so, it gobbles it by +// updating s. +func consume(s *string, ch byte) (ok bool) { + if *s == "" || (*s)[0] != ch { + return false + } + *s = (*s)[1:] + return true +} + +// The following code parses Collation rules of CLDR version 24 and before. + +var lmap = map[byte]int{ + 'p': 1, + 's': 2, + 't': 3, + 'i': 5, +} + +type rulesElem struct { + Rules struct { + Common + Any []*struct { + XMLName xml.Name + rule + } `xml:",any"` + } `xml:"rules"` +} + +type rule struct { + Value string `xml:",chardata"` + Before string `xml:"before,attr"` + Any []*struct { + XMLName xml.Name + rule + } `xml:",any"` +} + +var emptyValueError = errors.New("cldr: empty rule value") + +func (r *rule) value() (string, error) { + // Convert hexadecimal Unicode codepoint notation to a string. + s := charRe.ReplaceAllStringFunc(r.Value, replaceUnicode) + r.Value = s + if s == "" { + if len(r.Any) != 1 { + return "", emptyValueError + } + r.Value = fmt.Sprintf(specialAnchor, r.Any[0].XMLName.Local) + r.Any = nil + } else if len(r.Any) != 0 { + return "", fmt.Errorf("cldr: XML elements found in collation rule: %v", r.Any) + } + return r.Value, nil +} + +func (r rule) process(p RuleProcessor, name, context, extend string) error { + v, err := r.value() + if err != nil { + return err + } + switch name { + case "p", "s", "t", "i": + if strings.HasPrefix(v, cldrIndex) { + p.Index(v[len(cldrIndex):]) + return nil + } + if err := p.Insert(lmap[name[0]], v, context, extend); err != nil { + return err + } + case "pc", "sc", "tc", "ic": + level := lmap[name[0]] + for _, s := range v { + if err := p.Insert(level, string(s), context, extend); err != nil { + return err + } + } + default: + return fmt.Errorf("cldr: unsupported tag: %q", name) + } + return nil +} + +// processXML parses the format of CLDR versions 24 and older. +func (c Collation) processXML(p RuleProcessor) (err error) { + // Collation is generated and defined in xml.go. + var v string + for _, r := range c.Rules.Any { + switch r.XMLName.Local { + case "reset": + level := 0 + switch r.Before { + case "primary", "1": + level = 1 + case "secondary", "2": + level = 2 + case "tertiary", "3": + level = 3 + case "": + default: + return fmt.Errorf("cldr: unknown level %q", r.Before) + } + v, err = r.value() + if err == nil { + err = p.Reset(v, level) + } + case "x": + var context, extend string + for _, r1 := range r.Any { + v, err = r1.value() + switch r1.XMLName.Local { + case "context": + context = v + case "extend": + extend = v + } + } + for _, r1 := range r.Any { + if t := r1.XMLName.Local; t == "context" || t == "extend" { + continue + } + r1.rule.process(p, r1.XMLName.Local, context, extend) + } + default: + err = r.rule.process(p, r.XMLName.Local, "", "") + } + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/golang.org/x/text/unicode/cldr/collate_test.go b/vendor/golang.org/x/text/unicode/cldr/collate_test.go new file mode 100644 index 0000000..f672163 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/collate_test.go @@ -0,0 +1,275 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import ( + "fmt" + "strings" + "testing" +) + +// A recorder implements the RuleProcessor interface, whereby its methods +// simply record the invocations. +type recorder struct { + calls []string +} + +func (r *recorder) Reset(anchor string, before int) error { + if before > 5 { + return fmt.Errorf("before %d > 5", before) + } + r.calls = append(r.calls, fmt.Sprintf("R:%s-%d", anchor, before)) + return nil +} + +func (r *recorder) Insert(level int, str, context, extend string) error { + s := fmt.Sprintf("O:%d:%s", level, str) + if context != "" { + s += "|" + context + } + if extend != "" { + s += "/" + extend + } + r.calls = append(r.calls, s) + return nil +} + +func (r *recorder) Index(id string) { + r.calls = append(r.calls, fmt.Sprintf("I:%s", id)) +} + +func (r *recorder) Error(err error) { + r.calls = append(r.calls, fmt.Sprintf("E:%v", err)) +} + +func TestRuleProcessor(t *testing.T) { + for _, tt := range []struct { + desc string + in string + out string + }{ + {desc: "empty"}, + {desc: "whitespace and comments only", + in: ` + + + # adsfads +# adfadf + `, + }, + { + desc: "reset anchor", + in: ` + & a + &b # + & [ before 3 ] c + & [before 4] d & ee + & [first tertiary ignorable] + &'g' + & 'h''h'h'h' + &'\u0069' # LATIN SMALL LETTER I + `, + out: ` + R:a-0 + R:b-0 + R:c-3 + R:d-4 + R:ee-0 + R:<first tertiary ignorable/>-0 + R:g-0 + R:hhhh-0 + R:i-0 + `, + }, + { + desc: "ordering", + in: ` + & 0 + < 1 <<''2# +<<< 3'3''33'3# + <<<<4 + = 5 << 6 | s + <<<< 7 / z + << 8'' | s / ch + `, + out: ` + R:0-0 + O:1:1 + O:2:'2 + O:3:33333 + O:4:4 + O:5:5 + O:2:6|s + O:4:7/z + O:2:8'|s/ch + `, + }, + { + desc: "index", + in: "< '\ufdd0'A", + out: "I:A", + }, + { + desc: "sequence", + in: ` + & 0 + <<* 1234 + <* a-cde-f + =* q-q + `, + out: ` + R:0-0 + O:2:1 + O:2:2 + O:2:3 + O:2:4 + O:1:a + O:1:b + O:1:c + O:1:d + O:1:e + O:1:f + O:5:q + `, + }, + { + desc: "compact", + in: "&B<t<<<T<s<<<S<e<<<E", + out: ` + R:B-0 + O:1:t + O:3:T + O:1:s + O:3:S + O:1:e + O:3:E + `, + }, + { + desc: "err operator", + in: "a", + out: "E:1: illegal operator 'a'", + }, + { + desc: "err line number", + in: `& a + << b + a`, + out: ` + R:a-0 + O:2:b + E:3: illegal operator 'a'`, + }, + { + desc: "err empty anchor", + in: " & ", + out: "E:1: missing string", + }, + { + desc: "err anchor invalid special 1", + in: " & [ foo ", + out: "E:1: unmatched bracket", + }, + { + desc: "err anchor invalid special 2", + in: "&[", + out: "E:1: unmatched bracket", + }, + { + desc: "err anchor invalid before 1", + in: "&[before a]", + out: `E:1: strconv.ParseUint: parsing "a": invalid syntax`, + }, + { + desc: "err anchor invalid before 2", + in: "&[before 12]", + out: `E:1: strconv.ParseUint: parsing "12": value out of range`, + }, + { + desc: "err anchor invalid before 3", + in: "&[before 2]", + out: "E:1: missing string", + }, + { + desc: "err anchor invalid before 4", + in: "&[before 6] a", + out: "E:1: before 6 > 5", + }, + { + desc: "err empty order", + in: " < ", + out: "E:1: missing string", + }, + { + desc: "err empty identity", + in: " = ", + out: "E:1: missing string", + }, + { + desc: "err empty context", + in: " < a | ", + out: "E:1: missing string after context", + }, + { + desc: "err empty extend", + in: " < a / ", + out: "E:1: missing string after extension", + }, + { + desc: "err empty sequence", + in: " <* ", + out: "E:1: empty sequence", + }, + { + desc: "err sequence 1", + in: " <* -a", + out: "E:1: range without starter value", + }, + { + desc: "err sequence 3", + in: " <* a-a-b", + out: `O:1:a + E:1: range without starter value + `, + }, + { + desc: "err sequence 3", + in: " <* b-a", + out: `O:1:b + E:1: invalid range 'b'-'a' + `, + }, + { + desc: "err unmatched quote", + in: " < 'b", + out: ` E:1: unmatched single quote + `, + }, + } { + rec := &recorder{} + err := Collation{ + Cr: []*Common{ + {hidden: hidden{CharData: tt.in}}, + }, + }.Process(rec) + if err != nil { + rec.Error(err) + } + got := rec.calls + want := strings.Split(strings.TrimSpace(tt.out), "\n") + if tt.out == "" { + want = nil + } + if len(got) != len(want) { + t.Errorf("%s: nResults: got %d; want %d", tt.desc, len(got), len(want)) + continue + } + for i, g := range got { + if want := strings.TrimSpace(want[i]); g != want { + t.Errorf("%s:%d: got %q; want %q", tt.desc, i, g, want) + } + } + } +} diff --git a/vendor/golang.org/x/text/unicode/cldr/data_test.go b/vendor/golang.org/x/text/unicode/cldr/data_test.go new file mode 100644 index 0000000..1662189 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/data_test.go @@ -0,0 +1,186 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +// This file contains test data. + +import ( + "io" + "strings" +) + +type testLoader struct { +} + +func (t testLoader) Len() int { + return len(testFiles) +} + +func (t testLoader) Path(i int) string { + return testPaths[i] +} + +func (t testLoader) Reader(i int) (io.ReadCloser, error) { + return &reader{*strings.NewReader(testFiles[i])}, nil +} + +// reader adds a dummy Close method to strings.Reader so that it +// satisfies the io.ReadCloser interface. +type reader struct { + strings.Reader +} + +func (r reader) Close() error { + return nil +} + +var ( + testFiles = []string{de_xml, gsw_xml, root_xml} + testPaths = []string{ + "common/main/de.xml", + "common/main/gsw.xml", + "common/main/root.xml", + } +) + +var root_xml = `<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> +<ldml> + <identity> + <language type="root"/> + <generation date="now"/> + </identity> + <characters> + <exemplarCharacters>[]</exemplarCharacters> + <exemplarCharacters type="auxiliary">[]</exemplarCharacters> + <exemplarCharacters type="punctuation">[\- ‐ – — … ' ‘ ‚ " “ „ \& #]</exemplarCharacters> + <ellipsis type="final">{0}…</ellipsis> + <ellipsis type="initial">…{0}</ellipsis> + <moreInformation>?</moreInformation> + </characters> + <dates> + <calendars> + <default choice="gregorian"/> + <calendar type="buddhist"> + <months> + <alias source="locale" path="../../calendar[@type='gregorian']/months"/> + </months> + </calendar> + <calendar type="chinese"> + <months> + <alias source="locale" path="../../calendar[@type='gregorian']/months"/> + </months> + </calendar> + <calendar type="gregorian"> + <months> + <default choice="format"/> + <monthContext type="format"> + <default choice="wide"/> + <monthWidth type="narrow"> + <alias source="locale" path="../../monthContext[@type='stand-alone']/monthWidth[@type='narrow']"/> + </monthWidth> + <monthWidth type="wide"> + <month type="1">11</month> + <month type="2">22</month> + <month type="3">33</month> + <month type="4">44</month> + </monthWidth> + </monthContext> + <monthContext type="stand-alone"> + <monthWidth type="narrow"> + <month type="1">1</month> + <month type="2">2</month> + <month type="3">3</month> + <month type="4">4</month> + </monthWidth> + <monthWidth type="wide"> + <alias source="locale" path="../../monthContext[@type='format']/monthWidth[@type='wide']"/> + </monthWidth> + </monthContext> + </months> + </calendar> + </calendars> + </dates> +</ldml> +` + +var de_xml = `<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> +<ldml> + <identity> + <language type="de"/> + </identity> + <characters> + <exemplarCharacters>[a ä b c d e ö p q r s ß t u ü v w x y z]</exemplarCharacters> + <exemplarCharacters type="auxiliary">[á à ă]</exemplarCharacters> + <exemplarCharacters type="index">[A B C D E F G H Z]</exemplarCharacters> + <ellipsis type="final">{0} …</ellipsis> + <ellipsis type="initial">… {0}</ellipsis> + <moreInformation>?</moreInformation> + <stopwords> + <stopwordList type="collation" draft="provisional">der die das</stopwordList> + </stopwords> + </characters> + <dates> + <calendars> + <calendar type="buddhist"> + <months> + <monthContext type="format"> + <monthWidth type="narrow"> + <month type="3">BBB</month> + </monthWidth> + <monthWidth type="wide"> + <month type="3">bbb</month> + </monthWidth> + </monthContext> + </months> + </calendar> + <calendar type="gregorian"> + <months> + <monthContext type="format"> + <monthWidth type="narrow"> + <month type="3">M</month> + <month type="4">A</month> + </monthWidth> + <monthWidth type="wide"> + <month type="3">Maerz</month> + <month type="4">April</month> + <month type="5">Mai</month> + </monthWidth> + </monthContext> + <monthContext type="stand-alone"> + <monthWidth type="narrow"> + <month type="3">m</month> + <month type="5">m</month> + </monthWidth> + <monthWidth type="wide"> + <month type="4">april</month> + <month type="5">mai</month> + </monthWidth> + </monthContext> + </months> + </calendar> + </calendars> + </dates> + <posix> + <messages> + <yesstr>yes:y</yesstr> + <nostr>no:n</nostr> + </messages> + </posix> +</ldml> +` + +var gsw_xml = `<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> +<ldml> + <identity> + <language type="gsw"/> + </identity> + <posix> + <alias source="de" path="//ldml/posix"/> + </posix> +</ldml> +` diff --git a/vendor/golang.org/x/text/unicode/cldr/decode.go b/vendor/golang.org/x/text/unicode/cldr/decode.go new file mode 100644 index 0000000..e5ee4ae --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/decode.go @@ -0,0 +1,171 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import ( + "archive/zip" + "bytes" + "encoding/xml" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "path/filepath" + "regexp" +) + +// A Decoder loads an archive of CLDR data. +type Decoder struct { + dirFilter []string + sectionFilter []string + loader Loader + cldr *CLDR + curLocale string +} + +// SetSectionFilter takes a list top-level LDML element names to which +// evaluation of LDML should be limited. It automatically calls SetDirFilter. +func (d *Decoder) SetSectionFilter(filter ...string) { + d.sectionFilter = filter + // TODO: automatically set dir filter +} + +// SetDirFilter limits the loading of LDML XML files of the specied directories. +// Note that sections may be split across directories differently for different CLDR versions. +// For more robust code, use SetSectionFilter. +func (d *Decoder) SetDirFilter(dir ...string) { + d.dirFilter = dir +} + +// A Loader provides access to the files of a CLDR archive. +type Loader interface { + Len() int + Path(i int) string + Reader(i int) (io.ReadCloser, error) +} + +var fileRe = regexp.MustCompile(".*/(.*)/(.*)\\.xml") + +// Decode loads and decodes the files represented by l. +func (d *Decoder) Decode(l Loader) (cldr *CLDR, err error) { + d.cldr = makeCLDR() + for i := 0; i < l.Len(); i++ { + fname := l.Path(i) + if m := fileRe.FindStringSubmatch(fname); m != nil { + if len(d.dirFilter) > 0 && !in(d.dirFilter, m[1]) { + continue + } + var r io.Reader + if r, err = l.Reader(i); err == nil { + err = d.decode(m[1], m[2], r) + } + if err != nil { + return nil, err + } + } + } + d.cldr.finalize(d.sectionFilter) + return d.cldr, nil +} + +func (d *Decoder) decode(dir, id string, r io.Reader) error { + var v interface{} + var l *LDML + cldr := d.cldr + switch { + case dir == "supplemental": + v = cldr.supp + case dir == "transforms": + return nil + case dir == "bcp47": + v = cldr.bcp47 + case dir == "validity": + return nil + default: + ok := false + if v, ok = cldr.locale[id]; !ok { + l = &LDML{} + v, cldr.locale[id] = l, l + } + } + x := xml.NewDecoder(r) + if err := x.Decode(v); err != nil { + log.Printf("%s/%s: %v", dir, id, err) + return err + } + if l != nil { + if l.Identity == nil { + return fmt.Errorf("%s/%s: missing identity element", dir, id) + } + // TODO: verify when CLDR bug http://unicode.org/cldr/trac/ticket/8970 + // is resolved. + // path := strings.Split(id, "_") + // if lang := l.Identity.Language.Type; lang != path[0] { + // return fmt.Errorf("%s/%s: language was %s; want %s", dir, id, lang, path[0]) + // } + } + return nil +} + +type pathLoader []string + +func makePathLoader(path string) (pl pathLoader, err error) { + err = filepath.Walk(path, func(path string, _ os.FileInfo, err error) error { + pl = append(pl, path) + return err + }) + return pl, err +} + +func (pl pathLoader) Len() int { + return len(pl) +} + +func (pl pathLoader) Path(i int) string { + return pl[i] +} + +func (pl pathLoader) Reader(i int) (io.ReadCloser, error) { + return os.Open(pl[i]) +} + +// DecodePath loads CLDR data from the given path. +func (d *Decoder) DecodePath(path string) (cldr *CLDR, err error) { + loader, err := makePathLoader(path) + if err != nil { + return nil, err + } + return d.Decode(loader) +} + +type zipLoader struct { + r *zip.Reader +} + +func (zl zipLoader) Len() int { + return len(zl.r.File) +} + +func (zl zipLoader) Path(i int) string { + return zl.r.File[i].Name +} + +func (zl zipLoader) Reader(i int) (io.ReadCloser, error) { + return zl.r.File[i].Open() +} + +// DecodeZip loads CLDR data from the zip archive for which r is the source. +func (d *Decoder) DecodeZip(r io.Reader) (cldr *CLDR, err error) { + buffer, err := ioutil.ReadAll(r) + if err != nil { + return nil, err + } + archive, err := zip.NewReader(bytes.NewReader(buffer), int64(len(buffer))) + if err != nil { + return nil, err + } + return d.Decode(zipLoader{archive}) +} diff --git a/vendor/golang.org/x/text/unicode/cldr/examples_test.go b/vendor/golang.org/x/text/unicode/cldr/examples_test.go new file mode 100644 index 0000000..a65e86e --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/examples_test.go @@ -0,0 +1,21 @@ +package cldr_test + +import ( + "fmt" + + "golang.org/x/text/unicode/cldr" +) + +func ExampleSlice() { + var dr *cldr.CLDR // assume this is initalized + + x, _ := dr.LDML("en") + cs := x.Collations.Collation + // remove all but the default + cldr.MakeSlice(&cs).Filter(func(e cldr.Elem) bool { + return e.GetCommon().Type != x.Collations.Default() + }) + for i, c := range cs { + fmt.Println(i, c.Type) + } +} diff --git a/vendor/golang.org/x/text/unicode/cldr/makexml.go b/vendor/golang.org/x/text/unicode/cldr/makexml.go new file mode 100644 index 0000000..6114d01 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/makexml.go @@ -0,0 +1,400 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// This tool generates types for the various XML formats of CLDR. +package main + +import ( + "archive/zip" + "bytes" + "encoding/xml" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "regexp" + "strings" + + "golang.org/x/text/internal/gen" +) + +var outputFile = flag.String("output", "xml.go", "output file name") + +func main() { + flag.Parse() + + r := gen.OpenCLDRCoreZip() + buffer, err := ioutil.ReadAll(r) + if err != nil { + log.Fatal("Could not read zip file") + } + r.Close() + z, err := zip.NewReader(bytes.NewReader(buffer), int64(len(buffer))) + if err != nil { + log.Fatalf("Could not read zip archive: %v", err) + } + + var buf bytes.Buffer + + version := gen.CLDRVersion() + + for _, dtd := range files { + for _, f := range z.File { + if strings.HasSuffix(f.Name, dtd.file+".dtd") { + r, err := f.Open() + failOnError(err) + + b := makeBuilder(&buf, dtd) + b.parseDTD(r) + b.resolve(b.index[dtd.top[0]]) + b.write() + if b.version != "" && version != b.version { + println(f.Name) + log.Fatalf("main: inconsistent versions: found %s; want %s", b.version, version) + } + break + } + } + } + fmt.Fprintln(&buf, "// Version is the version of CLDR from which the XML definitions are generated.") + fmt.Fprintf(&buf, "const Version = %q\n", version) + + gen.WriteGoFile(*outputFile, "cldr", buf.Bytes()) +} + +func failOnError(err error) { + if err != nil { + log.New(os.Stderr, "", log.Lshortfile).Output(2, err.Error()) + os.Exit(1) + } +} + +// configuration data per DTD type +type dtd struct { + file string // base file name + root string // Go name of the root XML element + top []string // create a different type for this section + + skipElem []string // hard-coded or deprecated elements + skipAttr []string // attributes to exclude + predefined []string // hard-coded elements exist of the form <name>Elem + forceRepeat []string // elements to make slices despite DTD +} + +var files = []dtd{ + { + file: "ldmlBCP47", + root: "LDMLBCP47", + top: []string{"ldmlBCP47"}, + skipElem: []string{ + "cldrVersion", // deprecated, not used + }, + }, + { + file: "ldmlSupplemental", + root: "SupplementalData", + top: []string{"supplementalData"}, + skipElem: []string{ + "cldrVersion", // deprecated, not used + }, + forceRepeat: []string{ + "plurals", // data defined in plurals.xml and ordinals.xml + }, + }, + { + file: "ldml", + root: "LDML", + top: []string{ + "ldml", "collation", "calendar", "timeZoneNames", "localeDisplayNames", "numbers", + }, + skipElem: []string{ + "cp", // not used anywhere + "special", // not used anywhere + "fallback", // deprecated, not used + "alias", // in Common + "default", // in Common + }, + skipAttr: []string{ + "hiraganaQuarternary", // typo in DTD, correct version included as well + }, + predefined: []string{"rules"}, + }, +} + +var comments = map[string]string{ + "ldmlBCP47": ` +// LDMLBCP47 holds information on allowable values for various variables in LDML. +`, + "supplementalData": ` +// SupplementalData holds information relevant for internationalization +// and proper use of CLDR, but that is not contained in the locale hierarchy. +`, + "ldml": ` +// LDML is the top-level type for locale-specific data. +`, + "collation": ` +// Collation contains rules that specify a certain sort-order, +// as a tailoring of the root order. +// The parsed rules are obtained by passing a RuleProcessor to Collation's +// Process method. +`, + "calendar": ` +// Calendar specifies the fields used for formatting and parsing dates and times. +// The month and quarter names are identified numerically, starting at 1. +// The day (of the week) names are identified with short strings, since there is +// no universally-accepted numeric designation. +`, + "dates": ` +// Dates contains information regarding the format and parsing of dates and times. +`, + "localeDisplayNames": ` +// LocaleDisplayNames specifies localized display names for for scripts, languages, +// countries, currencies, and variants. +`, + "numbers": ` +// Numbers supplies information for formatting and parsing numbers and currencies. +`, +} + +type element struct { + name string // XML element name + category string // elements contained by this element + signature string // category + attrKey* + + attr []*attribute // attributes supported by this element. + sub []struct { // parsed and evaluated sub elements of this element. + e *element + repeat bool // true if the element needs to be a slice + } + + resolved bool // prevent multiple resolutions of this element. +} + +type attribute struct { + name string + key string + list []string + + tag string // Go tag +} + +var ( + reHead = regexp.MustCompile(` *(\w+) +([\w\-]+)`) + reAttr = regexp.MustCompile(` *(\w+) *(?:(\w+)|\(([\w\- \|]+)\)) *(?:#([A-Z]*) *(?:\"([\.\d+])\")?)? *("[\w\-:]*")?`) + reElem = regexp.MustCompile(`^ *(EMPTY|ANY|\(.*\)[\*\+\?]?) *$`) + reToken = regexp.MustCompile(`\w\-`) +) + +// builder is used to read in the DTD files from CLDR and generate Go code +// to be used with the encoding/xml package. +type builder struct { + w io.Writer + index map[string]*element + elem []*element + info dtd + version string +} + +func makeBuilder(w io.Writer, d dtd) builder { + return builder{ + w: w, + index: make(map[string]*element), + elem: []*element{}, + info: d, + } +} + +// parseDTD parses a DTD file. +func (b *builder) parseDTD(r io.Reader) { + for d := xml.NewDecoder(r); ; { + t, err := d.Token() + if t == nil { + break + } + failOnError(err) + dir, ok := t.(xml.Directive) + if !ok { + continue + } + m := reHead.FindSubmatch(dir) + dir = dir[len(m[0]):] + ename := string(m[2]) + el, elementFound := b.index[ename] + switch string(m[1]) { + case "ELEMENT": + if elementFound { + log.Fatal("parseDTD: duplicate entry for element %q", ename) + } + m := reElem.FindSubmatch(dir) + if m == nil { + log.Fatalf("parseDTD: invalid element %q", string(dir)) + } + if len(m[0]) != len(dir) { + log.Fatal("parseDTD: invalid element %q", string(dir), len(dir), len(m[0]), string(m[0])) + } + s := string(m[1]) + el = &element{ + name: ename, + category: s, + } + b.index[ename] = el + case "ATTLIST": + if !elementFound { + log.Fatalf("parseDTD: unknown element %q", ename) + } + s := string(dir) + m := reAttr.FindStringSubmatch(s) + if m == nil { + log.Fatal(fmt.Errorf("parseDTD: invalid attribute %q", string(dir))) + } + if m[4] == "FIXED" { + b.version = m[5] + } else { + switch m[1] { + case "draft", "references", "alt", "validSubLocales", "standard" /* in Common */ : + case "type", "choice": + default: + el.attr = append(el.attr, &attribute{ + name: m[1], + key: s, + list: reToken.FindAllString(m[3], -1), + }) + el.signature = fmt.Sprintf("%s=%s+%s", el.signature, m[1], m[2]) + } + } + } + } +} + +var reCat = regexp.MustCompile(`[ ,\|]*(?:(\(|\)|\#?[\w_-]+)([\*\+\?]?))?`) + +// resolve takes a parsed element and converts it into structured data +// that can be used to generate the XML code. +func (b *builder) resolve(e *element) { + if e.resolved { + return + } + b.elem = append(b.elem, e) + e.resolved = true + s := e.category + found := make(map[string]bool) + sequenceStart := []int{} + for len(s) > 0 { + m := reCat.FindStringSubmatch(s) + if m == nil { + log.Fatalf("%s: invalid category string %q", e.name, s) + } + repeat := m[2] == "*" || m[2] == "+" || in(b.info.forceRepeat, m[1]) + switch m[1] { + case "": + case "(": + sequenceStart = append(sequenceStart, len(e.sub)) + case ")": + if len(sequenceStart) == 0 { + log.Fatalf("%s: unmatched closing parenthesis", e.name) + } + for i := sequenceStart[len(sequenceStart)-1]; i < len(e.sub); i++ { + e.sub[i].repeat = e.sub[i].repeat || repeat + } + sequenceStart = sequenceStart[:len(sequenceStart)-1] + default: + if in(b.info.skipElem, m[1]) { + } else if sub, ok := b.index[m[1]]; ok { + if !found[sub.name] { + e.sub = append(e.sub, struct { + e *element + repeat bool + }{sub, repeat}) + found[sub.name] = true + b.resolve(sub) + } + } else if m[1] == "#PCDATA" || m[1] == "ANY" { + } else if m[1] != "EMPTY" { + log.Fatalf("resolve:%s: element %q not found", e.name, m[1]) + } + } + s = s[len(m[0]):] + } +} + +// return true if s is contained in set. +func in(set []string, s string) bool { + for _, v := range set { + if v == s { + return true + } + } + return false +} + +var repl = strings.NewReplacer("-", " ", "_", " ") + +// title puts the first character or each character following '_' in title case and +// removes all occurrences of '_'. +func title(s string) string { + return strings.Replace(strings.Title(repl.Replace(s)), " ", "", -1) +} + +// writeElem generates Go code for a single element, recursively. +func (b *builder) writeElem(tab int, e *element) { + p := func(f string, x ...interface{}) { + f = strings.Replace(f, "\n", "\n"+strings.Repeat("\t", tab), -1) + fmt.Fprintf(b.w, f, x...) + } + if len(e.sub) == 0 && len(e.attr) == 0 { + p("Common") + return + } + p("struct {") + tab++ + p("\nCommon") + for _, attr := range e.attr { + if !in(b.info.skipAttr, attr.name) { + p("\n%s string `xml:\"%s,attr\"`", title(attr.name), attr.name) + } + } + for _, sub := range e.sub { + if in(b.info.predefined, sub.e.name) { + p("\n%sElem", sub.e.name) + continue + } + if in(b.info.skipElem, sub.e.name) { + continue + } + p("\n%s ", title(sub.e.name)) + if sub.repeat { + p("[]") + } + p("*") + if in(b.info.top, sub.e.name) { + p(title(sub.e.name)) + } else { + b.writeElem(tab, sub.e) + } + p(" `xml:\"%s\"`", sub.e.name) + } + tab-- + p("\n}") +} + +// write generates the Go XML code. +func (b *builder) write() { + for i, name := range b.info.top { + e := b.index[name] + if e != nil { + fmt.Fprintf(b.w, comments[name]) + name := title(e.name) + if i == 0 { + name = b.info.root + } + fmt.Fprintf(b.w, "type %s ", name) + b.writeElem(0, e) + fmt.Fprint(b.w, "\n") + } + } +} diff --git a/vendor/golang.org/x/text/unicode/cldr/resolve.go b/vendor/golang.org/x/text/unicode/cldr/resolve.go new file mode 100644 index 0000000..691b590 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/resolve.go @@ -0,0 +1,602 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +// This file implements the various inheritance constructs defined by LDML. +// See http://www.unicode.org/reports/tr35/#Inheritance_and_Validity +// for more details. + +import ( + "fmt" + "log" + "reflect" + "regexp" + "sort" + "strings" +) + +// fieldIter iterates over fields in a struct. It includes +// fields of embedded structs. +type fieldIter struct { + v reflect.Value + index, n []int +} + +func iter(v reflect.Value) fieldIter { + if v.Kind() != reflect.Struct { + log.Panicf("value %v must be a struct", v) + } + i := fieldIter{ + v: v, + index: []int{0}, + n: []int{v.NumField()}, + } + i.descent() + return i +} + +func (i *fieldIter) descent() { + for f := i.field(); f.Anonymous && f.Type.NumField() > 0; f = i.field() { + i.index = append(i.index, 0) + i.n = append(i.n, f.Type.NumField()) + } +} + +func (i *fieldIter) done() bool { + return len(i.index) == 1 && i.index[0] >= i.n[0] +} + +func skip(f reflect.StructField) bool { + return !f.Anonymous && (f.Name[0] < 'A' || f.Name[0] > 'Z') +} + +func (i *fieldIter) next() { + for { + k := len(i.index) - 1 + i.index[k]++ + if i.index[k] < i.n[k] { + if !skip(i.field()) { + break + } + } else { + if k == 0 { + return + } + i.index = i.index[:k] + i.n = i.n[:k] + } + } + i.descent() +} + +func (i *fieldIter) value() reflect.Value { + return i.v.FieldByIndex(i.index) +} + +func (i *fieldIter) field() reflect.StructField { + return i.v.Type().FieldByIndex(i.index) +} + +type visitor func(v reflect.Value) error + +var stopDescent = fmt.Errorf("do not recurse") + +func (f visitor) visit(x interface{}) error { + return f.visitRec(reflect.ValueOf(x)) +} + +// visit recursively calls f on all nodes in v. +func (f visitor) visitRec(v reflect.Value) error { + if v.Kind() == reflect.Ptr { + if v.IsNil() { + return nil + } + return f.visitRec(v.Elem()) + } + if err := f(v); err != nil { + if err == stopDescent { + return nil + } + return err + } + switch v.Kind() { + case reflect.Struct: + for i := iter(v); !i.done(); i.next() { + if err := f.visitRec(i.value()); err != nil { + return err + } + } + case reflect.Slice: + for i := 0; i < v.Len(); i++ { + if err := f.visitRec(v.Index(i)); err != nil { + return err + } + } + } + return nil +} + +// getPath is used for error reporting purposes only. +func getPath(e Elem) string { + if e == nil { + return "<nil>" + } + if e.enclosing() == nil { + return e.GetCommon().name + } + if e.GetCommon().Type == "" { + return fmt.Sprintf("%s.%s", getPath(e.enclosing()), e.GetCommon().name) + } + return fmt.Sprintf("%s.%s[type=%s]", getPath(e.enclosing()), e.GetCommon().name, e.GetCommon().Type) +} + +// xmlName returns the xml name of the element or attribute +func xmlName(f reflect.StructField) (name string, attr bool) { + tags := strings.Split(f.Tag.Get("xml"), ",") + for _, s := range tags { + attr = attr || s == "attr" + } + return tags[0], attr +} + +func findField(v reflect.Value, key string) (reflect.Value, error) { + v = reflect.Indirect(v) + for i := iter(v); !i.done(); i.next() { + if n, _ := xmlName(i.field()); n == key { + return i.value(), nil + } + } + return reflect.Value{}, fmt.Errorf("cldr: no field %q in element %#v", key, v.Interface()) +} + +var xpathPart = regexp.MustCompile(`(\pL+)(?:\[@(\pL+)='([\w-]+)'\])?`) + +func walkXPath(e Elem, path string) (res Elem, err error) { + for _, c := range strings.Split(path, "/") { + if c == ".." { + if e = e.enclosing(); e == nil { + panic("path ..") + return nil, fmt.Errorf(`cldr: ".." moves past root in path %q`, path) + } + continue + } else if c == "" { + continue + } + m := xpathPart.FindStringSubmatch(c) + if len(m) == 0 || len(m[0]) != len(c) { + return nil, fmt.Errorf("cldr: syntax error in path component %q", c) + } + v, err := findField(reflect.ValueOf(e), m[1]) + if err != nil { + return nil, err + } + switch v.Kind() { + case reflect.Slice: + i := 0 + if m[2] != "" || v.Len() > 1 { + if m[2] == "" { + m[2] = "type" + if m[3] = e.GetCommon().Default(); m[3] == "" { + return nil, fmt.Errorf("cldr: type selector or default value needed for element %s", m[1]) + } + } + for ; i < v.Len(); i++ { + vi := v.Index(i) + key, err := findField(vi.Elem(), m[2]) + if err != nil { + return nil, err + } + key = reflect.Indirect(key) + if key.Kind() == reflect.String && key.String() == m[3] { + break + } + } + } + if i == v.Len() || v.Index(i).IsNil() { + return nil, fmt.Errorf("no %s found with %s==%s", m[1], m[2], m[3]) + } + e = v.Index(i).Interface().(Elem) + case reflect.Ptr: + if v.IsNil() { + return nil, fmt.Errorf("cldr: element %q not found within element %q", m[1], e.GetCommon().name) + } + var ok bool + if e, ok = v.Interface().(Elem); !ok { + return nil, fmt.Errorf("cldr: %q is not an XML element", m[1]) + } else if m[2] != "" || m[3] != "" { + return nil, fmt.Errorf("cldr: no type selector allowed for element %s", m[1]) + } + default: + return nil, fmt.Errorf("cldr: %q is not an XML element", m[1]) + } + } + return e, nil +} + +const absPrefix = "//ldml/" + +func (cldr *CLDR) resolveAlias(e Elem, src, path string) (res Elem, err error) { + if src != "locale" { + if !strings.HasPrefix(path, absPrefix) { + return nil, fmt.Errorf("cldr: expected absolute path, found %q", path) + } + path = path[len(absPrefix):] + if e, err = cldr.resolve(src); err != nil { + return nil, err + } + } + return walkXPath(e, path) +} + +func (cldr *CLDR) resolveAndMergeAlias(e Elem) error { + alias := e.GetCommon().Alias + if alias == nil { + return nil + } + a, err := cldr.resolveAlias(e, alias.Source, alias.Path) + if err != nil { + return fmt.Errorf("%v: error evaluating path %q: %v", getPath(e), alias.Path, err) + } + // Ensure alias node was already evaluated. TODO: avoid double evaluation. + err = cldr.resolveAndMergeAlias(a) + v := reflect.ValueOf(e).Elem() + for i := iter(reflect.ValueOf(a).Elem()); !i.done(); i.next() { + if vv := i.value(); vv.Kind() != reflect.Ptr || !vv.IsNil() { + if _, attr := xmlName(i.field()); !attr { + v.FieldByIndex(i.index).Set(vv) + } + } + } + return err +} + +func (cldr *CLDR) aliasResolver() visitor { + return func(v reflect.Value) (err error) { + if e, ok := v.Addr().Interface().(Elem); ok { + err = cldr.resolveAndMergeAlias(e) + if err == nil && blocking[e.GetCommon().name] { + return stopDescent + } + } + return err + } +} + +// elements within blocking elements do not inherit. +// Taken from CLDR's supplementalMetaData.xml. +var blocking = map[string]bool{ + "identity": true, + "supplementalData": true, + "cldrTest": true, + "collation": true, + "transform": true, +} + +// Distinguishing attributes affect inheritance; two elements with different +// distinguishing attributes are treated as different for purposes of inheritance, +// except when such attributes occur in the indicated elements. +// Taken from CLDR's supplementalMetaData.xml. +var distinguishing = map[string][]string{ + "key": nil, + "request_id": nil, + "id": nil, + "registry": nil, + "alt": nil, + "iso4217": nil, + "iso3166": nil, + "mzone": nil, + "from": nil, + "to": nil, + "type": []string{ + "abbreviationFallback", + "default", + "mapping", + "measurementSystem", + "preferenceOrdering", + }, + "numberSystem": nil, +} + +func in(set []string, s string) bool { + for _, v := range set { + if v == s { + return true + } + } + return false +} + +// attrKey computes a key based on the distinguishable attributes of +// an element and it's values. +func attrKey(v reflect.Value, exclude ...string) string { + parts := []string{} + ename := v.Interface().(Elem).GetCommon().name + v = v.Elem() + for i := iter(v); !i.done(); i.next() { + if name, attr := xmlName(i.field()); attr { + if except, ok := distinguishing[name]; ok && !in(exclude, name) && !in(except, ename) { + v := i.value() + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + if v.IsValid() { + parts = append(parts, fmt.Sprintf("%s=%s", name, v.String())) + } + } + } + } + sort.Strings(parts) + return strings.Join(parts, ";") +} + +// Key returns a key for e derived from all distinguishing attributes +// except those specified by exclude. +func Key(e Elem, exclude ...string) string { + return attrKey(reflect.ValueOf(e), exclude...) +} + +// linkEnclosing sets the enclosing element as well as the name +// for all sub-elements of child, recursively. +func linkEnclosing(parent, child Elem) { + child.setEnclosing(parent) + v := reflect.ValueOf(child).Elem() + for i := iter(v); !i.done(); i.next() { + vf := i.value() + if vf.Kind() == reflect.Slice { + for j := 0; j < vf.Len(); j++ { + linkEnclosing(child, vf.Index(j).Interface().(Elem)) + } + } else if vf.Kind() == reflect.Ptr && !vf.IsNil() && vf.Elem().Kind() == reflect.Struct { + linkEnclosing(child, vf.Interface().(Elem)) + } + } +} + +func setNames(e Elem, name string) { + e.setName(name) + v := reflect.ValueOf(e).Elem() + for i := iter(v); !i.done(); i.next() { + vf := i.value() + name, _ = xmlName(i.field()) + if vf.Kind() == reflect.Slice { + for j := 0; j < vf.Len(); j++ { + setNames(vf.Index(j).Interface().(Elem), name) + } + } else if vf.Kind() == reflect.Ptr && !vf.IsNil() && vf.Elem().Kind() == reflect.Struct { + setNames(vf.Interface().(Elem), name) + } + } +} + +// deepCopy copies elements of v recursively. All elements of v that may +// be modified by inheritance are explicitly copied. +func deepCopy(v reflect.Value) reflect.Value { + switch v.Kind() { + case reflect.Ptr: + if v.IsNil() || v.Elem().Kind() != reflect.Struct { + return v + } + nv := reflect.New(v.Elem().Type()) + nv.Elem().Set(v.Elem()) + deepCopyRec(nv.Elem(), v.Elem()) + return nv + case reflect.Slice: + nv := reflect.MakeSlice(v.Type(), v.Len(), v.Len()) + for i := 0; i < v.Len(); i++ { + deepCopyRec(nv.Index(i), v.Index(i)) + } + return nv + } + panic("deepCopy: must be called with pointer or slice") +} + +// deepCopyRec is only called by deepCopy. +func deepCopyRec(nv, v reflect.Value) { + if v.Kind() == reflect.Struct { + t := v.Type() + for i := 0; i < v.NumField(); i++ { + if name, attr := xmlName(t.Field(i)); name != "" && !attr { + deepCopyRec(nv.Field(i), v.Field(i)) + } + } + } else { + nv.Set(deepCopy(v)) + } +} + +// newNode is used to insert a missing node during inheritance. +func (cldr *CLDR) newNode(v, enc reflect.Value) reflect.Value { + n := reflect.New(v.Type()) + for i := iter(v); !i.done(); i.next() { + if name, attr := xmlName(i.field()); name == "" || attr { + n.Elem().FieldByIndex(i.index).Set(i.value()) + } + } + n.Interface().(Elem).GetCommon().setEnclosing(enc.Addr().Interface().(Elem)) + return n +} + +// v, parent must be pointers to struct +func (cldr *CLDR) inheritFields(v, parent reflect.Value) (res reflect.Value, err error) { + t := v.Type() + nv := reflect.New(t) + nv.Elem().Set(v) + for i := iter(v); !i.done(); i.next() { + vf := i.value() + f := i.field() + name, attr := xmlName(f) + if name == "" || attr { + continue + } + pf := parent.FieldByIndex(i.index) + if blocking[name] { + if vf.IsNil() { + vf = pf + } + nv.Elem().FieldByIndex(i.index).Set(deepCopy(vf)) + continue + } + switch f.Type.Kind() { + case reflect.Ptr: + if f.Type.Elem().Kind() == reflect.Struct { + if !vf.IsNil() { + if vf, err = cldr.inheritStructPtr(vf, pf); err != nil { + return reflect.Value{}, err + } + vf.Interface().(Elem).setEnclosing(nv.Interface().(Elem)) + nv.Elem().FieldByIndex(i.index).Set(vf) + } else if !pf.IsNil() { + n := cldr.newNode(pf.Elem(), v) + if vf, err = cldr.inheritStructPtr(n, pf); err != nil { + return reflect.Value{}, err + } + vf.Interface().(Elem).setEnclosing(nv.Interface().(Elem)) + nv.Elem().FieldByIndex(i.index).Set(vf) + } + } + case reflect.Slice: + vf, err := cldr.inheritSlice(nv.Elem(), vf, pf) + if err != nil { + return reflect.Zero(t), err + } + nv.Elem().FieldByIndex(i.index).Set(vf) + } + } + return nv, nil +} + +func root(e Elem) *LDML { + for ; e.enclosing() != nil; e = e.enclosing() { + } + return e.(*LDML) +} + +// inheritStructPtr first merges possible aliases in with v and then inherits +// any underspecified elements from parent. +func (cldr *CLDR) inheritStructPtr(v, parent reflect.Value) (r reflect.Value, err error) { + if !v.IsNil() { + e := v.Interface().(Elem).GetCommon() + alias := e.Alias + if alias == nil && !parent.IsNil() { + alias = parent.Interface().(Elem).GetCommon().Alias + } + if alias != nil { + a, err := cldr.resolveAlias(v.Interface().(Elem), alias.Source, alias.Path) + if a != nil { + if v, err = cldr.inheritFields(v.Elem(), reflect.ValueOf(a).Elem()); err != nil { + return reflect.Value{}, err + } + } + } + if !parent.IsNil() { + return cldr.inheritFields(v.Elem(), parent.Elem()) + } + } else if parent.IsNil() { + panic("should not reach here") + } + return v, nil +} + +// Must be slice of struct pointers. +func (cldr *CLDR) inheritSlice(enc, v, parent reflect.Value) (res reflect.Value, err error) { + t := v.Type() + index := make(map[string]reflect.Value) + if !v.IsNil() { + for i := 0; i < v.Len(); i++ { + vi := v.Index(i) + key := attrKey(vi) + index[key] = vi + } + } + if !parent.IsNil() { + for i := 0; i < parent.Len(); i++ { + vi := parent.Index(i) + key := attrKey(vi) + if w, ok := index[key]; ok { + index[key], err = cldr.inheritStructPtr(w, vi) + } else { + n := cldr.newNode(vi.Elem(), enc) + index[key], err = cldr.inheritStructPtr(n, vi) + } + index[key].Interface().(Elem).setEnclosing(enc.Addr().Interface().(Elem)) + if err != nil { + return v, err + } + } + } + keys := make([]string, 0, len(index)) + for k, _ := range index { + keys = append(keys, k) + } + sort.Strings(keys) + sl := reflect.MakeSlice(t, len(index), len(index)) + for i, k := range keys { + sl.Index(i).Set(index[k]) + } + return sl, nil +} + +func parentLocale(loc string) string { + parts := strings.Split(loc, "_") + if len(parts) == 1 { + return "root" + } + parts = parts[:len(parts)-1] + key := strings.Join(parts, "_") + return key +} + +func (cldr *CLDR) resolve(loc string) (res *LDML, err error) { + if r := cldr.resolved[loc]; r != nil { + return r, nil + } + x := cldr.RawLDML(loc) + if x == nil { + return nil, fmt.Errorf("cldr: unknown locale %q", loc) + } + var v reflect.Value + if loc == "root" { + x = deepCopy(reflect.ValueOf(x)).Interface().(*LDML) + linkEnclosing(nil, x) + err = cldr.aliasResolver().visit(x) + } else { + key := parentLocale(loc) + var parent *LDML + for ; cldr.locale[key] == nil; key = parentLocale(key) { + } + if parent, err = cldr.resolve(key); err != nil { + return nil, err + } + v, err = cldr.inheritFields(reflect.ValueOf(x).Elem(), reflect.ValueOf(parent).Elem()) + x = v.Interface().(*LDML) + linkEnclosing(nil, x) + } + if err != nil { + return nil, err + } + cldr.resolved[loc] = x + return x, err +} + +// finalize finalizes the initialization of the raw LDML structs. It also +// removed unwanted fields, as specified by filter, so that they will not +// be unnecessarily evaluated. +func (cldr *CLDR) finalize(filter []string) { + for _, x := range cldr.locale { + if filter != nil { + v := reflect.ValueOf(x).Elem() + t := v.Type() + for i := 0; i < v.NumField(); i++ { + f := t.Field(i) + name, _ := xmlName(f) + if name != "" && name != "identity" && !in(filter, name) { + v.Field(i).Set(reflect.Zero(f.Type)) + } + } + } + linkEnclosing(nil, x) // for resolving aliases and paths + setNames(x, "ldml") + } +} diff --git a/vendor/golang.org/x/text/unicode/cldr/resolve_test.go b/vendor/golang.org/x/text/unicode/cldr/resolve_test.go new file mode 100644 index 0000000..7b19cef --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/resolve_test.go @@ -0,0 +1,368 @@ +package cldr + +import ( + "fmt" + "log" + "reflect" + "testing" +) + +func failOnError(err error) { + if err != nil { + log.Panic(err) + } +} + +func data() *CLDR { + d := Decoder{} + data, err := d.Decode(testLoader{}) + failOnError(err) + return data +} + +type h struct { + A string `xml:"ha,attr"` + E string `xml:"he"` + D string `xml:",chardata"` + X string +} + +type fieldTest struct { + Common + To string `xml:"to,attr"` + Key string `xml:"key,attr"` + E string `xml:"e"` + D string `xml:",chardata"` + X string + h +} + +var testStruct = fieldTest{ + Common: Common{ + name: "mapping", // exclude "type" as distinguising attribute + Type: "foo", + Alt: "foo", + }, + To: "nyc", + Key: "k", + E: "E", + D: "D", + h: h{ + A: "A", + E: "E", + D: "D", + }, +} + +func TestIter(t *testing.T) { + tests := map[string]string{ + "Type": "foo", + "Alt": "foo", + "To": "nyc", + "A": "A", + "Alias": "<nil>", + } + k := 0 + for i := iter(reflect.ValueOf(testStruct)); !i.done(); i.next() { + v := i.value() + if v.Kind() == reflect.Ptr && v.Elem().Kind() == reflect.String { + v = v.Elem() + } + name := i.field().Name + if w, ok := tests[name]; ok { + s := fmt.Sprint(v.Interface()) + if w != s { + t.Errorf("value: found %q; want %q", w, s) + } + delete(tests, name) + } + k++ + } + if len(tests) != 0 { + t.Errorf("missing fields: %v", tests) + } +} + +func TestFindField(t *testing.T) { + tests := []struct { + name, val string + exist bool + }{ + {"type", "foo", true}, + {"alt", "foo", true}, + {"to", "nyc", true}, + {"he", "E", true}, + {"q", "", false}, + } + vf := reflect.ValueOf(testStruct) + for i, tt := range tests { + v, err := findField(vf, tt.name) + if (err == nil) != tt.exist { + t.Errorf("%d: field %q present is %v; want %v", i, tt.name, err == nil, tt.exist) + } else if tt.exist { + if v.Kind() == reflect.Ptr { + if v.IsNil() { + continue + } + v = v.Elem() + } + if v.String() != tt.val { + t.Errorf("%d: found value %q; want %q", i, v.String(), tt.val) + } + } + } +} + +var keyTests = []struct { + exclude []string + key string +}{ + {[]string{}, "alt=foo;key=k;to=nyc"}, + {[]string{"type"}, "alt=foo;key=k;to=nyc"}, + {[]string{"choice"}, "alt=foo;key=k;to=nyc"}, + {[]string{"alt"}, "key=k;to=nyc"}, + {[]string{"a"}, "alt=foo;key=k;to=nyc"}, + {[]string{"to"}, "alt=foo;key=k"}, + {[]string{"alt", "to"}, "key=k"}, + {[]string{"alt", "to", "key"}, ""}, +} + +func TestAttrKey(t *testing.T) { + v := reflect.ValueOf(&testStruct) + for i, tt := range keyTests { + key := attrKey(v, tt.exclude...) + if key != tt.key { + t.Errorf("%d: found %q, want %q", i, key, tt.key) + } + } +} + +func TestKey(t *testing.T) { + for i, tt := range keyTests { + key := Key(&testStruct, tt.exclude...) + if key != tt.key { + t.Errorf("%d: found %q, want %q", i, key, tt.key) + } + } +} + +func testEnclosing(t *testing.T, x *LDML, name string) { + eq := func(a, b Elem, i int) { + for ; i > 0; i-- { + b = b.enclosing() + } + if a != b { + t.Errorf("%s: found path %q, want %q", name, getPath(a), getPath(b)) + } + } + eq(x, x, 0) + eq(x, x.Identity, 1) + eq(x, x.Dates.Calendars, 2) + eq(x, x.Dates.Calendars.Calendar[0], 3) + eq(x, x.Dates.Calendars.Calendar[1], 3) + //eq(x, x.Dates.Calendars.Calendar[0].Months, 4) + eq(x, x.Dates.Calendars.Calendar[1].Months, 4) +} + +func TestEnclosing(t *testing.T) { + testEnclosing(t, data().RawLDML("de"), "enclosing-raw") + de, _ := data().LDML("de") + testEnclosing(t, de, "enclosing") +} + +func TestDeepCopy(t *testing.T) { + eq := func(have, want string) { + if have != want { + t.Errorf("found %q; want %q", have, want) + } + } + x, _ := data().LDML("de") + vc := deepCopy(reflect.ValueOf(x)) + c := vc.Interface().(*LDML) + linkEnclosing(nil, c) + if x == c { + t.Errorf("did not copy") + } + + eq(c.name, "ldml") + eq(c.Dates.name, "dates") + testEnclosing(t, c, "deepCopy") +} + +type getTest struct { + loc string + path string + field string // used in combination with length + data string + altData string // used for buddhist calendar if value != "" + typ string + length int + missing bool +} + +const ( + budMon = "dates/calendars/calendar[@type='buddhist']/months/" + chnMon = "dates/calendars/calendar[@type='chinese']/months/" + greMon = "dates/calendars/calendar[@type='gregorian']/months/" +) + +func monthVal(path, context, width string, month int) string { + const format = "%s/monthContext[@type='%s']/monthWidth[@type='%s']/month[@type='%d']" + return fmt.Sprintf(format, path, context, width, month) +} + +var rootGetTests = []getTest{ + {loc: "root", path: "identity/language", typ: "root"}, + {loc: "root", path: "characters/moreInformation", data: "?"}, + {loc: "root", path: "characters", field: "exemplarCharacters", length: 3}, + {loc: "root", path: greMon, field: "monthContext", length: 2}, + {loc: "root", path: greMon + "monthContext[@type='format']/monthWidth[@type='narrow']", field: "month", length: 4}, + {loc: "root", path: greMon + "monthContext[@type='stand-alone']/monthWidth[@type='wide']", field: "month", length: 4}, + // unescaping character data + {loc: "root", path: "characters/exemplarCharacters[@type='punctuation']", data: `[\- ‐ – — … ' ‘ ‚ " “ „ \& #]`}, + // default resolution + {loc: "root", path: "dates/calendars/calendar", typ: "gregorian"}, + // alias resolution + {loc: "root", path: budMon, field: "monthContext", length: 2}, + // crossing but non-circular alias resolution + {loc: "root", path: budMon + "monthContext[@type='format']/monthWidth[@type='narrow']", field: "month", length: 4}, + {loc: "root", path: budMon + "monthContext[@type='stand-alone']/monthWidth[@type='wide']", field: "month", length: 4}, + {loc: "root", path: monthVal(greMon, "format", "wide", 1), data: "11"}, + {loc: "root", path: monthVal(greMon, "format", "narrow", 2), data: "2"}, + {loc: "root", path: monthVal(greMon, "stand-alone", "wide", 3), data: "33"}, + {loc: "root", path: monthVal(greMon, "stand-alone", "narrow", 4), data: "4"}, + {loc: "root", path: monthVal(budMon, "format", "wide", 1), data: "11"}, + {loc: "root", path: monthVal(budMon, "format", "narrow", 2), data: "2"}, + {loc: "root", path: monthVal(budMon, "stand-alone", "wide", 3), data: "33"}, + {loc: "root", path: monthVal(budMon, "stand-alone", "narrow", 4), data: "4"}, +} + +// 19 +var deGetTests = []getTest{ + {loc: "de", path: "identity/language", typ: "de"}, + {loc: "de", path: "posix", length: 2}, + {loc: "de", path: "characters", field: "exemplarCharacters", length: 4}, + {loc: "de", path: "characters/exemplarCharacters[@type='auxiliary']", data: `[á à ă]`}, + // identity is a blocking element, so de should not inherit generation from root. + {loc: "de", path: "identity/generation", missing: true}, + // default resolution + {loc: "root", path: "dates/calendars/calendar", typ: "gregorian"}, + + // absolute path alias resolution + {loc: "gsw", path: "posix", field: "messages", length: 1}, + {loc: "gsw", path: "posix/messages/yesstr", data: "yes:y"}, +} + +// 27(greMon) - 52(budMon) - 77(chnMon) +func calGetTests(s string) []getTest { + tests := []getTest{ + {loc: "de", path: s, length: 2}, + {loc: "de", path: s + "monthContext[@type='format']/monthWidth[@type='wide']", field: "month", length: 5}, + {loc: "de", path: monthVal(s, "format", "wide", 1), data: "11"}, + {loc: "de", path: monthVal(s, "format", "wide", 2), data: "22"}, + {loc: "de", path: monthVal(s, "format", "wide", 3), data: "Maerz", altData: "bbb"}, + {loc: "de", path: monthVal(s, "format", "wide", 4), data: "April"}, + {loc: "de", path: monthVal(s, "format", "wide", 5), data: "Mai"}, + + {loc: "de", path: s + "monthContext[@type='format']/monthWidth[@type='narrow']", field: "month", length: 5}, + {loc: "de", path: monthVal(s, "format", "narrow", 1), data: "1"}, + {loc: "de", path: monthVal(s, "format", "narrow", 2), data: "2"}, + {loc: "de", path: monthVal(s, "format", "narrow", 3), data: "M", altData: "BBB"}, + {loc: "de", path: monthVal(s, "format", "narrow", 4), data: "A"}, + {loc: "de", path: monthVal(s, "format", "narrow", 5), data: "m"}, + + {loc: "de", path: s + "monthContext[@type='stand-alone']/monthWidth[@type='wide']", field: "month", length: 5}, + {loc: "de", path: monthVal(s, "stand-alone", "wide", 1), data: "11"}, + {loc: "de", path: monthVal(s, "stand-alone", "wide", 2), data: "22"}, + {loc: "de", path: monthVal(s, "stand-alone", "wide", 3), data: "Maerz", altData: "bbb"}, + {loc: "de", path: monthVal(s, "stand-alone", "wide", 4), data: "april"}, + {loc: "de", path: monthVal(s, "stand-alone", "wide", 5), data: "mai"}, + + {loc: "de", path: s + "monthContext[@type='stand-alone']/monthWidth[@type='narrow']", field: "month", length: 5}, + {loc: "de", path: monthVal(s, "stand-alone", "narrow", 1), data: "1"}, + {loc: "de", path: monthVal(s, "stand-alone", "narrow", 2), data: "2"}, + {loc: "de", path: monthVal(s, "stand-alone", "narrow", 3), data: "m"}, + {loc: "de", path: monthVal(s, "stand-alone", "narrow", 4), data: "4"}, + {loc: "de", path: monthVal(s, "stand-alone", "narrow", 5), data: "m"}, + } + if s == budMon { + for i, t := range tests { + if t.altData != "" { + tests[i].data = t.altData + } + } + } + return tests +} + +var getTests = append(rootGetTests, + append(deGetTests, + append(calGetTests(greMon), + append(calGetTests(budMon), + calGetTests(chnMon)...)...)...)...) + +func TestPath(t *testing.T) { + d := data() + for i, tt := range getTests { + x, _ := d.LDML(tt.loc) + e, err := walkXPath(x, tt.path) + if err != nil { + if !tt.missing { + t.Errorf("%d:error: %v %v", i, err, tt.missing) + } + continue + } + if tt.missing { + t.Errorf("%d: missing is %v; want %v", i, e == nil, tt.missing) + continue + } + if tt.data != "" && e.GetCommon().Data() != tt.data { + t.Errorf("%d: data is %v; want %v", i, e.GetCommon().Data(), tt.data) + continue + } + if tt.typ != "" && e.GetCommon().Type != tt.typ { + t.Errorf("%d: type is %v; want %v", i, e.GetCommon().Type, tt.typ) + continue + } + if tt.field != "" { + slice, _ := findField(reflect.ValueOf(e), tt.field) + if slice.Len() != tt.length { + t.Errorf("%d: length is %v; want %v", i, slice.Len(), tt.length) + continue + } + } + } +} + +func TestGet(t *testing.T) { + d := data() + for i, tt := range getTests { + x, _ := d.LDML(tt.loc) + e, err := Get(x, tt.path) + if err != nil { + if !tt.missing { + t.Errorf("%d:error: %v %v", i, err, tt.missing) + } + continue + } + if tt.missing { + t.Errorf("%d: missing is %v; want %v", i, e == nil, tt.missing) + continue + } + if tt.data != "" && e.GetCommon().Data() != tt.data { + t.Errorf("%d: data is %v; want %v", i, e.GetCommon().Data(), tt.data) + continue + } + if tt.typ != "" && e.GetCommon().Type != tt.typ { + t.Errorf("%d: type is %v; want %v", i, e.GetCommon().Type, tt.typ) + continue + } + if tt.field != "" { + slice, _ := findField(reflect.ValueOf(e), tt.field) + if slice.Len() != tt.length { + t.Errorf("%d: length is %v; want %v", i, slice.Len(), tt.length) + continue + } + } + } +} diff --git a/vendor/golang.org/x/text/unicode/cldr/slice.go b/vendor/golang.org/x/text/unicode/cldr/slice.go new file mode 100644 index 0000000..388c983 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/slice.go @@ -0,0 +1,144 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import ( + "fmt" + "reflect" + "sort" +) + +// Slice provides utilities for modifying slices of elements. +// It can be wrapped around any slice of which the element type implements +// interface Elem. +type Slice struct { + ptr reflect.Value + typ reflect.Type +} + +// Value returns the reflect.Value of the underlying slice. +func (s *Slice) Value() reflect.Value { + return s.ptr.Elem() +} + +// MakeSlice wraps a pointer to a slice of Elems. +// It replaces the array pointed to by the slice so that subsequent modifications +// do not alter the data in a CLDR type. +// It panics if an incorrect type is passed. +func MakeSlice(slicePtr interface{}) Slice { + ptr := reflect.ValueOf(slicePtr) + if ptr.Kind() != reflect.Ptr { + panic(fmt.Sprintf("MakeSlice: argument must be pointer to slice, found %v", ptr.Type())) + } + sl := ptr.Elem() + if sl.Kind() != reflect.Slice { + panic(fmt.Sprintf("MakeSlice: argument must point to a slice, found %v", sl.Type())) + } + intf := reflect.TypeOf((*Elem)(nil)).Elem() + if !sl.Type().Elem().Implements(intf) { + panic(fmt.Sprintf("MakeSlice: element type of slice (%v) does not implement Elem", sl.Type().Elem())) + } + nsl := reflect.MakeSlice(sl.Type(), sl.Len(), sl.Len()) + reflect.Copy(nsl, sl) + sl.Set(nsl) + return Slice{ + ptr: ptr, + typ: sl.Type().Elem().Elem(), + } +} + +func (s Slice) indexForAttr(a string) []int { + for i := iter(reflect.Zero(s.typ)); !i.done(); i.next() { + if n, _ := xmlName(i.field()); n == a { + return i.index + } + } + panic(fmt.Sprintf("MakeSlice: no attribute %q for type %v", a, s.typ)) +} + +// Filter filters s to only include elements for which fn returns true. +func (s Slice) Filter(fn func(e Elem) bool) { + k := 0 + sl := s.Value() + for i := 0; i < sl.Len(); i++ { + vi := sl.Index(i) + if fn(vi.Interface().(Elem)) { + sl.Index(k).Set(vi) + k++ + } + } + sl.Set(sl.Slice(0, k)) +} + +// Group finds elements in s for which fn returns the same value and groups +// them in a new Slice. +func (s Slice) Group(fn func(e Elem) string) []Slice { + m := make(map[string][]reflect.Value) + sl := s.Value() + for i := 0; i < sl.Len(); i++ { + vi := sl.Index(i) + key := fn(vi.Interface().(Elem)) + m[key] = append(m[key], vi) + } + keys := []string{} + for k, _ := range m { + keys = append(keys, k) + } + sort.Strings(keys) + res := []Slice{} + for _, k := range keys { + nsl := reflect.New(sl.Type()) + nsl.Elem().Set(reflect.Append(nsl.Elem(), m[k]...)) + res = append(res, MakeSlice(nsl.Interface())) + } + return res +} + +// SelectAnyOf filters s to contain only elements for which attr matches +// any of the values. +func (s Slice) SelectAnyOf(attr string, values ...string) { + index := s.indexForAttr(attr) + s.Filter(func(e Elem) bool { + vf := reflect.ValueOf(e).Elem().FieldByIndex(index) + return in(values, vf.String()) + }) +} + +// SelectOnePerGroup filters s to include at most one element e per group of +// elements matching Key(attr), where e has an attribute a that matches any +// the values in v. +// If more than one element in a group matches a value in v preference +// is given to the element that matches the first value in v. +func (s Slice) SelectOnePerGroup(a string, v []string) { + index := s.indexForAttr(a) + grouped := s.Group(func(e Elem) string { return Key(e, a) }) + sl := s.Value() + sl.Set(sl.Slice(0, 0)) + for _, g := range grouped { + e := reflect.Value{} + found := len(v) + gsl := g.Value() + for i := 0; i < gsl.Len(); i++ { + vi := gsl.Index(i).Elem().FieldByIndex(index) + j := 0 + for ; j < len(v) && v[j] != vi.String(); j++ { + } + if j < found { + found = j + e = gsl.Index(i) + } + } + if found < len(v) { + sl.Set(reflect.Append(sl, e)) + } + } +} + +// SelectDraft drops all elements from the list with a draft level smaller than d +// and selects the highest draft level of the remaining. +// This method assumes that the input CLDR is canonicalized. +func (s Slice) SelectDraft(d Draft) { + s.SelectOnePerGroup("draft", drafts[len(drafts)-2-int(d):]) +} diff --git a/vendor/golang.org/x/text/unicode/cldr/slice_test.go b/vendor/golang.org/x/text/unicode/cldr/slice_test.go new file mode 100644 index 0000000..f354329 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/slice_test.go @@ -0,0 +1,175 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import ( + "reflect" + "testing" +) + +type testSlice []*Common + +func mkElem(alt, typ, ref string) *Common { + return &Common{ + Type: typ, + Reference: ref, + Alt: alt, + } +} + +var ( + testSlice1 = testSlice{ + mkElem("1", "a", "i.a"), + mkElem("1", "b", "i.b"), + mkElem("1", "c", "i.c"), + mkElem("2", "b", "ii"), + mkElem("3", "c", "iii"), + mkElem("4", "a", "iv.a"), + mkElem("4", "d", "iv.d"), + } + testSliceE = testSlice{} +) + +func panics(f func()) (panics bool) { + defer func() { + if err := recover(); err != nil { + panics = true + } + }() + f() + return panics +} + +func TestMakeSlice(t *testing.T) { + foo := 1 + bar := []int{} + tests := []struct { + i interface{} + panics bool + err string + }{ + {&foo, true, "should panic when passed a pointer to the wrong type"}, + {&bar, true, "should panic when slice element of the wrong type"}, + {testSlice1, true, "should panic when passed a slice"}, + {&testSlice1, false, "should not panic"}, + } + for i, tt := range tests { + if panics(func() { MakeSlice(tt.i) }) != tt.panics { + t.Errorf("%d: %s", i, tt.err) + } + } +} + +var anyOfTests = []struct { + sl testSlice + values []string + n int +}{ + {testSliceE, []string{}, 0}, + {testSliceE, []string{"1", "2", "3"}, 0}, + {testSlice1, []string{}, 0}, + {testSlice1, []string{"1"}, 3}, + {testSlice1, []string{"2"}, 1}, + {testSlice1, []string{"5"}, 0}, + {testSlice1, []string{"1", "2", "3"}, 5}, +} + +func TestSelectAnyOf(t *testing.T) { + for i, tt := range anyOfTests { + sl := tt.sl + s := MakeSlice(&sl) + s.SelectAnyOf("alt", tt.values...) + if len(sl) != tt.n { + t.Errorf("%d: found len == %d; want %d", i, len(sl), tt.n) + } + } + sl := testSlice1 + s := MakeSlice(&sl) + if !panics(func() { s.SelectAnyOf("foo") }) { + t.Errorf("should panic on non-existing attribute") + } +} + +func TestFilter(t *testing.T) { + for i, tt := range anyOfTests { + sl := tt.sl + s := MakeSlice(&sl) + s.Filter(func(e Elem) bool { + v, _ := findField(reflect.ValueOf(e), "alt") + return in(tt.values, v.String()) + }) + if len(sl) != tt.n { + t.Errorf("%d: found len == %d; want %d", i, len(sl), tt.n) + } + } +} + +func TestGroup(t *testing.T) { + f := func(excl ...string) func(Elem) string { + return func(e Elem) string { + return Key(e, excl...) + } + } + tests := []struct { + sl testSlice + f func(Elem) string + lens []int + }{ + {testSliceE, f(), []int{}}, + {testSlice1, f(), []int{1, 1, 1, 1, 1, 1, 1}}, + {testSlice1, f("type"), []int{3, 1, 1, 2}}, + {testSlice1, f("alt"), []int{2, 2, 2, 1}}, + {testSlice1, f("alt", "type"), []int{7}}, + {testSlice1, f("alt", "type"), []int{7}}, + } + for i, tt := range tests { + sl := tt.sl + s := MakeSlice(&sl) + g := s.Group(tt.f) + if len(tt.lens) != len(g) { + t.Errorf("%d: found %d; want %d", i, len(g), len(tt.lens)) + continue + } + for j, v := range tt.lens { + if n := g[j].Value().Len(); n != v { + t.Errorf("%d: found %d for length of group %d; want %d", i, n, j, v) + } + } + } +} + +func TestSelectOnePerGroup(t *testing.T) { + tests := []struct { + sl testSlice + attr string + values []string + refs []string + }{ + {testSliceE, "alt", []string{"1"}, []string{}}, + {testSliceE, "type", []string{"a"}, []string{}}, + {testSlice1, "alt", []string{"2", "3", "1"}, []string{"i.a", "ii", "iii"}}, + {testSlice1, "alt", []string{"1", "4"}, []string{"i.a", "i.b", "i.c", "iv.d"}}, + {testSlice1, "type", []string{"c", "d"}, []string{"i.c", "iii", "iv.d"}}, + } + for i, tt := range tests { + sl := tt.sl + s := MakeSlice(&sl) + s.SelectOnePerGroup(tt.attr, tt.values) + if len(sl) != len(tt.refs) { + t.Errorf("%d: found result lenght %d; want %d", i, len(sl), len(tt.refs)) + continue + } + for j, e := range sl { + if tt.refs[j] != e.Reference { + t.Errorf("%d:%d found %s; want %s", i, j, e.Reference, tt.refs[i]) + } + } + } + sl := testSlice1 + s := MakeSlice(&sl) + if !panics(func() { s.SelectOnePerGroup("foo", nil) }) { + t.Errorf("should panic on non-existing attribute") + } +} diff --git a/vendor/golang.org/x/text/unicode/cldr/xml.go b/vendor/golang.org/x/text/unicode/cldr/xml.go new file mode 100644 index 0000000..99fa963 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/xml.go @@ -0,0 +1,1456 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package cldr + +// LDMLBCP47 holds information on allowable values for various variables in LDML. +type LDMLBCP47 struct { + Common + Version *struct { + Common + Number string `xml:"number,attr"` + } `xml:"version"` + Generation *struct { + Common + Date string `xml:"date,attr"` + } `xml:"generation"` + Keyword []*struct { + Common + Key []*struct { + Common + Extension string `xml:"extension,attr"` + Name string `xml:"name,attr"` + Description string `xml:"description,attr"` + Deprecated string `xml:"deprecated,attr"` + Preferred string `xml:"preferred,attr"` + Alias string `xml:"alias,attr"` + ValueType string `xml:"valueType,attr"` + Since string `xml:"since,attr"` + Type []*struct { + Common + Name string `xml:"name,attr"` + Description string `xml:"description,attr"` + Deprecated string `xml:"deprecated,attr"` + Preferred string `xml:"preferred,attr"` + Alias string `xml:"alias,attr"` + Since string `xml:"since,attr"` + } `xml:"type"` + } `xml:"key"` + } `xml:"keyword"` + Attribute []*struct { + Common + Name string `xml:"name,attr"` + Description string `xml:"description,attr"` + Deprecated string `xml:"deprecated,attr"` + Preferred string `xml:"preferred,attr"` + Since string `xml:"since,attr"` + } `xml:"attribute"` +} + +// SupplementalData holds information relevant for internationalization +// and proper use of CLDR, but that is not contained in the locale hierarchy. +type SupplementalData struct { + Common + Version *struct { + Common + Number string `xml:"number,attr"` + } `xml:"version"` + Generation *struct { + Common + Date string `xml:"date,attr"` + } `xml:"generation"` + CurrencyData *struct { + Common + Fractions []*struct { + Common + Info []*struct { + Common + Iso4217 string `xml:"iso4217,attr"` + Digits string `xml:"digits,attr"` + Rounding string `xml:"rounding,attr"` + CashDigits string `xml:"cashDigits,attr"` + CashRounding string `xml:"cashRounding,attr"` + } `xml:"info"` + } `xml:"fractions"` + Region []*struct { + Common + Iso3166 string `xml:"iso3166,attr"` + Currency []*struct { + Common + Before string `xml:"before,attr"` + From string `xml:"from,attr"` + To string `xml:"to,attr"` + Iso4217 string `xml:"iso4217,attr"` + Digits string `xml:"digits,attr"` + Rounding string `xml:"rounding,attr"` + CashRounding string `xml:"cashRounding,attr"` + Tender string `xml:"tender,attr"` + Alternate []*struct { + Common + Iso4217 string `xml:"iso4217,attr"` + } `xml:"alternate"` + } `xml:"currency"` + } `xml:"region"` + } `xml:"currencyData"` + TerritoryContainment *struct { + Common + Group []*struct { + Common + Contains string `xml:"contains,attr"` + Grouping string `xml:"grouping,attr"` + Status string `xml:"status,attr"` + } `xml:"group"` + } `xml:"territoryContainment"` + SubdivisionContainment *struct { + Common + Subgroup []*struct { + Common + Subtype string `xml:"subtype,attr"` + Contains string `xml:"contains,attr"` + } `xml:"subgroup"` + } `xml:"subdivisionContainment"` + LanguageData *struct { + Common + Language []*struct { + Common + Scripts string `xml:"scripts,attr"` + Territories string `xml:"territories,attr"` + Variants string `xml:"variants,attr"` + } `xml:"language"` + } `xml:"languageData"` + TerritoryInfo *struct { + Common + Territory []*struct { + Common + Gdp string `xml:"gdp,attr"` + LiteracyPercent string `xml:"literacyPercent,attr"` + Population string `xml:"population,attr"` + LanguagePopulation []*struct { + Common + WritingPercent string `xml:"writingPercent,attr"` + PopulationPercent string `xml:"populationPercent,attr"` + OfficialStatus string `xml:"officialStatus,attr"` + } `xml:"languagePopulation"` + } `xml:"territory"` + } `xml:"territoryInfo"` + PostalCodeData *struct { + Common + PostCodeRegex []*struct { + Common + TerritoryId string `xml:"territoryId,attr"` + } `xml:"postCodeRegex"` + } `xml:"postalCodeData"` + CalendarData *struct { + Common + Calendar []*struct { + Common + Territories string `xml:"territories,attr"` + CalendarSystem *Common `xml:"calendarSystem"` + Eras *struct { + Common + Era []*struct { + Common + Start string `xml:"start,attr"` + End string `xml:"end,attr"` + } `xml:"era"` + } `xml:"eras"` + } `xml:"calendar"` + } `xml:"calendarData"` + CalendarPreferenceData *struct { + Common + CalendarPreference []*struct { + Common + Territories string `xml:"territories,attr"` + Ordering string `xml:"ordering,attr"` + } `xml:"calendarPreference"` + } `xml:"calendarPreferenceData"` + WeekData *struct { + Common + MinDays []*struct { + Common + Count string `xml:"count,attr"` + Territories string `xml:"territories,attr"` + } `xml:"minDays"` + FirstDay []*struct { + Common + Day string `xml:"day,attr"` + Territories string `xml:"territories,attr"` + } `xml:"firstDay"` + WeekendStart []*struct { + Common + Day string `xml:"day,attr"` + Territories string `xml:"territories,attr"` + } `xml:"weekendStart"` + WeekendEnd []*struct { + Common + Day string `xml:"day,attr"` + Territories string `xml:"territories,attr"` + } `xml:"weekendEnd"` + WeekOfPreference []*struct { + Common + Locales string `xml:"locales,attr"` + Ordering string `xml:"ordering,attr"` + } `xml:"weekOfPreference"` + } `xml:"weekData"` + TimeData *struct { + Common + Hours []*struct { + Common + Allowed string `xml:"allowed,attr"` + Preferred string `xml:"preferred,attr"` + Regions string `xml:"regions,attr"` + } `xml:"hours"` + } `xml:"timeData"` + MeasurementData *struct { + Common + MeasurementSystem []*struct { + Common + Category string `xml:"category,attr"` + Territories string `xml:"territories,attr"` + } `xml:"measurementSystem"` + PaperSize []*struct { + Common + Territories string `xml:"territories,attr"` + } `xml:"paperSize"` + } `xml:"measurementData"` + UnitPreferenceData *struct { + Common + UnitPreferences []*struct { + Common + Category string `xml:"category,attr"` + Usage string `xml:"usage,attr"` + Scope string `xml:"scope,attr"` + UnitPreference []*struct { + Common + Regions string `xml:"regions,attr"` + } `xml:"unitPreference"` + } `xml:"unitPreferences"` + } `xml:"unitPreferenceData"` + TimezoneData *struct { + Common + MapTimezones []*struct { + Common + OtherVersion string `xml:"otherVersion,attr"` + TypeVersion string `xml:"typeVersion,attr"` + MapZone []*struct { + Common + Other string `xml:"other,attr"` + Territory string `xml:"territory,attr"` + } `xml:"mapZone"` + } `xml:"mapTimezones"` + ZoneFormatting []*struct { + Common + Multizone string `xml:"multizone,attr"` + TzidVersion string `xml:"tzidVersion,attr"` + ZoneItem []*struct { + Common + Territory string `xml:"territory,attr"` + Aliases string `xml:"aliases,attr"` + } `xml:"zoneItem"` + } `xml:"zoneFormatting"` + } `xml:"timezoneData"` + Characters *struct { + Common + CharacterFallback []*struct { + Common + Character []*struct { + Common + Value string `xml:"value,attr"` + Substitute []*Common `xml:"substitute"` + } `xml:"character"` + } `xml:"character-fallback"` + } `xml:"characters"` + Transforms *struct { + Common + Transform []*struct { + Common + Source string `xml:"source,attr"` + Target string `xml:"target,attr"` + Variant string `xml:"variant,attr"` + Direction string `xml:"direction,attr"` + Alias string `xml:"alias,attr"` + BackwardAlias string `xml:"backwardAlias,attr"` + Visibility string `xml:"visibility,attr"` + Comment []*Common `xml:"comment"` + TRule []*Common `xml:"tRule"` + } `xml:"transform"` + } `xml:"transforms"` + Metadata *struct { + Common + AttributeOrder *Common `xml:"attributeOrder"` + ElementOrder *Common `xml:"elementOrder"` + SerialElements *Common `xml:"serialElements"` + Suppress *struct { + Common + Attributes []*struct { + Common + Element string `xml:"element,attr"` + Attribute string `xml:"attribute,attr"` + AttributeValue string `xml:"attributeValue,attr"` + } `xml:"attributes"` + } `xml:"suppress"` + Validity *struct { + Common + Variable []*struct { + Common + Id string `xml:"id,attr"` + } `xml:"variable"` + AttributeValues []*struct { + Common + Dtds string `xml:"dtds,attr"` + Elements string `xml:"elements,attr"` + Attributes string `xml:"attributes,attr"` + Order string `xml:"order,attr"` + } `xml:"attributeValues"` + } `xml:"validity"` + Alias *struct { + Common + LanguageAlias []*struct { + Common + Replacement string `xml:"replacement,attr"` + Reason string `xml:"reason,attr"` + } `xml:"languageAlias"` + ScriptAlias []*struct { + Common + Replacement string `xml:"replacement,attr"` + Reason string `xml:"reason,attr"` + } `xml:"scriptAlias"` + TerritoryAlias []*struct { + Common + Replacement string `xml:"replacement,attr"` + Reason string `xml:"reason,attr"` + } `xml:"territoryAlias"` + SubdivisionAlias []*struct { + Common + Replacement string `xml:"replacement,attr"` + Reason string `xml:"reason,attr"` + } `xml:"subdivisionAlias"` + VariantAlias []*struct { + Common + Replacement string `xml:"replacement,attr"` + Reason string `xml:"reason,attr"` + } `xml:"variantAlias"` + ZoneAlias []*struct { + Common + Replacement string `xml:"replacement,attr"` + Reason string `xml:"reason,attr"` + } `xml:"zoneAlias"` + } `xml:"alias"` + Deprecated *struct { + Common + DeprecatedItems []*struct { + Common + Elements string `xml:"elements,attr"` + Attributes string `xml:"attributes,attr"` + Values string `xml:"values,attr"` + } `xml:"deprecatedItems"` + } `xml:"deprecated"` + Distinguishing *struct { + Common + DistinguishingItems []*struct { + Common + Exclude string `xml:"exclude,attr"` + Elements string `xml:"elements,attr"` + Attributes string `xml:"attributes,attr"` + } `xml:"distinguishingItems"` + } `xml:"distinguishing"` + Blocking *struct { + Common + BlockingItems []*struct { + Common + Elements string `xml:"elements,attr"` + } `xml:"blockingItems"` + } `xml:"blocking"` + CoverageAdditions *struct { + Common + LanguageCoverage []*struct { + Common + Values string `xml:"values,attr"` + } `xml:"languageCoverage"` + ScriptCoverage []*struct { + Common + Values string `xml:"values,attr"` + } `xml:"scriptCoverage"` + TerritoryCoverage []*struct { + Common + Values string `xml:"values,attr"` + } `xml:"territoryCoverage"` + CurrencyCoverage []*struct { + Common + Values string `xml:"values,attr"` + } `xml:"currencyCoverage"` + TimezoneCoverage []*struct { + Common + Values string `xml:"values,attr"` + } `xml:"timezoneCoverage"` + } `xml:"coverageAdditions"` + SkipDefaultLocale *struct { + Common + Services string `xml:"services,attr"` + } `xml:"skipDefaultLocale"` + DefaultContent *struct { + Common + Locales string `xml:"locales,attr"` + } `xml:"defaultContent"` + } `xml:"metadata"` + CodeMappings *struct { + Common + LanguageCodes []*struct { + Common + Alpha3 string `xml:"alpha3,attr"` + } `xml:"languageCodes"` + TerritoryCodes []*struct { + Common + Numeric string `xml:"numeric,attr"` + Alpha3 string `xml:"alpha3,attr"` + Fips10 string `xml:"fips10,attr"` + Internet string `xml:"internet,attr"` + } `xml:"territoryCodes"` + CurrencyCodes []*struct { + Common + Numeric string `xml:"numeric,attr"` + } `xml:"currencyCodes"` + } `xml:"codeMappings"` + ParentLocales *struct { + Common + ParentLocale []*struct { + Common + Parent string `xml:"parent,attr"` + Locales string `xml:"locales,attr"` + } `xml:"parentLocale"` + } `xml:"parentLocales"` + LikelySubtags *struct { + Common + LikelySubtag []*struct { + Common + From string `xml:"from,attr"` + To string `xml:"to,attr"` + } `xml:"likelySubtag"` + } `xml:"likelySubtags"` + MetazoneInfo *struct { + Common + Timezone []*struct { + Common + UsesMetazone []*struct { + Common + From string `xml:"from,attr"` + To string `xml:"to,attr"` + Mzone string `xml:"mzone,attr"` + } `xml:"usesMetazone"` + } `xml:"timezone"` + } `xml:"metazoneInfo"` + Plurals []*struct { + Common + PluralRules []*struct { + Common + Locales string `xml:"locales,attr"` + PluralRule []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"pluralRule"` + } `xml:"pluralRules"` + PluralRanges []*struct { + Common + Locales string `xml:"locales,attr"` + PluralRange []*struct { + Common + Start string `xml:"start,attr"` + End string `xml:"end,attr"` + Result string `xml:"result,attr"` + } `xml:"pluralRange"` + } `xml:"pluralRanges"` + } `xml:"plurals"` + TelephoneCodeData *struct { + Common + CodesByTerritory []*struct { + Common + Territory string `xml:"territory,attr"` + TelephoneCountryCode []*struct { + Common + Code string `xml:"code,attr"` + From string `xml:"from,attr"` + To string `xml:"to,attr"` + } `xml:"telephoneCountryCode"` + } `xml:"codesByTerritory"` + } `xml:"telephoneCodeData"` + NumberingSystems *struct { + Common + NumberingSystem []*struct { + Common + Id string `xml:"id,attr"` + Radix string `xml:"radix,attr"` + Digits string `xml:"digits,attr"` + Rules string `xml:"rules,attr"` + } `xml:"numberingSystem"` + } `xml:"numberingSystems"` + Bcp47KeywordMappings *struct { + Common + MapKeys *struct { + Common + KeyMap []*struct { + Common + Bcp47 string `xml:"bcp47,attr"` + } `xml:"keyMap"` + } `xml:"mapKeys"` + MapTypes []*struct { + Common + TypeMap []*struct { + Common + Bcp47 string `xml:"bcp47,attr"` + } `xml:"typeMap"` + } `xml:"mapTypes"` + } `xml:"bcp47KeywordMappings"` + Gender *struct { + Common + PersonList []*struct { + Common + Locales string `xml:"locales,attr"` + } `xml:"personList"` + } `xml:"gender"` + References *struct { + Common + Reference []*struct { + Common + Uri string `xml:"uri,attr"` + } `xml:"reference"` + } `xml:"references"` + LanguageMatching *struct { + Common + LanguageMatches []*struct { + Common + LanguageMatch []*struct { + Common + Desired string `xml:"desired,attr"` + Oneway string `xml:"oneway,attr"` + Percent string `xml:"percent,attr"` + Supported string `xml:"supported,attr"` + } `xml:"languageMatch"` + } `xml:"languageMatches"` + } `xml:"languageMatching"` + DayPeriodRuleSet []*struct { + Common + DayPeriodRules []*struct { + Common + Locales string `xml:"locales,attr"` + DayPeriodRule []*struct { + Common + At string `xml:"at,attr"` + After string `xml:"after,attr"` + Before string `xml:"before,attr"` + From string `xml:"from,attr"` + To string `xml:"to,attr"` + } `xml:"dayPeriodRule"` + } `xml:"dayPeriodRules"` + } `xml:"dayPeriodRuleSet"` + MetaZones *struct { + Common + MetazoneInfo *struct { + Common + Timezone []*struct { + Common + UsesMetazone []*struct { + Common + From string `xml:"from,attr"` + To string `xml:"to,attr"` + Mzone string `xml:"mzone,attr"` + } `xml:"usesMetazone"` + } `xml:"timezone"` + } `xml:"metazoneInfo"` + MapTimezones *struct { + Common + OtherVersion string `xml:"otherVersion,attr"` + TypeVersion string `xml:"typeVersion,attr"` + MapZone []*struct { + Common + Other string `xml:"other,attr"` + Territory string `xml:"territory,attr"` + } `xml:"mapZone"` + } `xml:"mapTimezones"` + } `xml:"metaZones"` + PrimaryZones *struct { + Common + PrimaryZone []*struct { + Common + Iso3166 string `xml:"iso3166,attr"` + } `xml:"primaryZone"` + } `xml:"primaryZones"` + WindowsZones *struct { + Common + MapTimezones *struct { + Common + OtherVersion string `xml:"otherVersion,attr"` + TypeVersion string `xml:"typeVersion,attr"` + MapZone []*struct { + Common + Other string `xml:"other,attr"` + Territory string `xml:"territory,attr"` + } `xml:"mapZone"` + } `xml:"mapTimezones"` + } `xml:"windowsZones"` + CoverageLevels *struct { + Common + ApprovalRequirements *struct { + Common + ApprovalRequirement []*struct { + Common + Votes string `xml:"votes,attr"` + Locales string `xml:"locales,attr"` + Paths string `xml:"paths,attr"` + } `xml:"approvalRequirement"` + } `xml:"approvalRequirements"` + CoverageVariable []*struct { + Common + Key string `xml:"key,attr"` + Value string `xml:"value,attr"` + } `xml:"coverageVariable"` + CoverageLevel []*struct { + Common + InLanguage string `xml:"inLanguage,attr"` + InScript string `xml:"inScript,attr"` + InTerritory string `xml:"inTerritory,attr"` + Value string `xml:"value,attr"` + Match string `xml:"match,attr"` + } `xml:"coverageLevel"` + } `xml:"coverageLevels"` + IdValidity *struct { + Common + Id []*struct { + Common + IdStatus string `xml:"idStatus,attr"` + } `xml:"id"` + } `xml:"idValidity"` + RgScope *struct { + Common + RgPath []*struct { + Common + Path string `xml:"path,attr"` + } `xml:"rgPath"` + } `xml:"rgScope"` +} + +// LDML is the top-level type for locale-specific data. +type LDML struct { + Common + Version string `xml:"version,attr"` + Identity *struct { + Common + Version *struct { + Common + Number string `xml:"number,attr"` + } `xml:"version"` + Generation *struct { + Common + Date string `xml:"date,attr"` + } `xml:"generation"` + Language *Common `xml:"language"` + Script *Common `xml:"script"` + Territory *Common `xml:"territory"` + Variant *Common `xml:"variant"` + } `xml:"identity"` + LocaleDisplayNames *LocaleDisplayNames `xml:"localeDisplayNames"` + Layout *struct { + Common + Orientation []*struct { + Common + Characters string `xml:"characters,attr"` + Lines string `xml:"lines,attr"` + CharacterOrder []*Common `xml:"characterOrder"` + LineOrder []*Common `xml:"lineOrder"` + } `xml:"orientation"` + InList []*struct { + Common + Casing string `xml:"casing,attr"` + } `xml:"inList"` + InText []*Common `xml:"inText"` + } `xml:"layout"` + ContextTransforms *struct { + Common + ContextTransformUsage []*struct { + Common + ContextTransform []*Common `xml:"contextTransform"` + } `xml:"contextTransformUsage"` + } `xml:"contextTransforms"` + Characters *struct { + Common + ExemplarCharacters []*Common `xml:"exemplarCharacters"` + Ellipsis []*Common `xml:"ellipsis"` + MoreInformation []*Common `xml:"moreInformation"` + Stopwords []*struct { + Common + StopwordList []*Common `xml:"stopwordList"` + } `xml:"stopwords"` + IndexLabels []*struct { + Common + IndexSeparator []*Common `xml:"indexSeparator"` + CompressedIndexSeparator []*Common `xml:"compressedIndexSeparator"` + IndexRangePattern []*Common `xml:"indexRangePattern"` + IndexLabelBefore []*Common `xml:"indexLabelBefore"` + IndexLabelAfter []*Common `xml:"indexLabelAfter"` + IndexLabel []*struct { + Common + IndexSource string `xml:"indexSource,attr"` + Priority string `xml:"priority,attr"` + } `xml:"indexLabel"` + } `xml:"indexLabels"` + Mapping []*struct { + Common + Registry string `xml:"registry,attr"` + } `xml:"mapping"` + } `xml:"characters"` + Delimiters *struct { + Common + QuotationStart []*Common `xml:"quotationStart"` + QuotationEnd []*Common `xml:"quotationEnd"` + AlternateQuotationStart []*Common `xml:"alternateQuotationStart"` + AlternateQuotationEnd []*Common `xml:"alternateQuotationEnd"` + } `xml:"delimiters"` + Measurement *struct { + Common + MeasurementSystem []*Common `xml:"measurementSystem"` + PaperSize []*struct { + Common + Height []*Common `xml:"height"` + Width []*Common `xml:"width"` + } `xml:"paperSize"` + } `xml:"measurement"` + Dates *struct { + Common + LocalizedPatternChars []*Common `xml:"localizedPatternChars"` + DateRangePattern []*Common `xml:"dateRangePattern"` + Calendars *struct { + Common + Calendar []*Calendar `xml:"calendar"` + } `xml:"calendars"` + Fields *struct { + Common + Field []*struct { + Common + DisplayName []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"displayName"` + Relative []*Common `xml:"relative"` + RelativeTime []*struct { + Common + RelativeTimePattern []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"relativeTimePattern"` + } `xml:"relativeTime"` + RelativePeriod []*Common `xml:"relativePeriod"` + } `xml:"field"` + } `xml:"fields"` + TimeZoneNames *TimeZoneNames `xml:"timeZoneNames"` + } `xml:"dates"` + Numbers *Numbers `xml:"numbers"` + Units *struct { + Common + Unit []*struct { + Common + DisplayName []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"displayName"` + UnitPattern []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"unitPattern"` + PerUnitPattern []*Common `xml:"perUnitPattern"` + } `xml:"unit"` + UnitLength []*struct { + Common + CompoundUnit []*struct { + Common + CompoundUnitPattern []*Common `xml:"compoundUnitPattern"` + } `xml:"compoundUnit"` + Unit []*struct { + Common + DisplayName []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"displayName"` + UnitPattern []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"unitPattern"` + PerUnitPattern []*Common `xml:"perUnitPattern"` + } `xml:"unit"` + CoordinateUnit []*struct { + Common + CoordinateUnitPattern []*Common `xml:"coordinateUnitPattern"` + } `xml:"coordinateUnit"` + } `xml:"unitLength"` + DurationUnit []*struct { + Common + DurationUnitPattern []*Common `xml:"durationUnitPattern"` + } `xml:"durationUnit"` + } `xml:"units"` + ListPatterns *struct { + Common + ListPattern []*struct { + Common + ListPatternPart []*Common `xml:"listPatternPart"` + } `xml:"listPattern"` + } `xml:"listPatterns"` + Collations *struct { + Common + Version string `xml:"version,attr"` + DefaultCollation *Common `xml:"defaultCollation"` + Collation []*Collation `xml:"collation"` + } `xml:"collations"` + Posix *struct { + Common + Messages []*struct { + Common + Yesstr []*Common `xml:"yesstr"` + Nostr []*Common `xml:"nostr"` + Yesexpr []*Common `xml:"yesexpr"` + Noexpr []*Common `xml:"noexpr"` + } `xml:"messages"` + } `xml:"posix"` + CharacterLabels *struct { + Common + CharacterLabelPattern []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"characterLabelPattern"` + CharacterLabel []*Common `xml:"characterLabel"` + } `xml:"characterLabels"` + Segmentations *struct { + Common + Segmentation []*struct { + Common + Variables *struct { + Common + Variable []*struct { + Common + Id string `xml:"id,attr"` + } `xml:"variable"` + } `xml:"variables"` + SegmentRules *struct { + Common + Rule []*struct { + Common + Id string `xml:"id,attr"` + } `xml:"rule"` + } `xml:"segmentRules"` + Exceptions *struct { + Common + Exception []*Common `xml:"exception"` + } `xml:"exceptions"` + Suppressions *struct { + Common + Suppression []*Common `xml:"suppression"` + } `xml:"suppressions"` + } `xml:"segmentation"` + } `xml:"segmentations"` + Rbnf *struct { + Common + RulesetGrouping []*struct { + Common + Ruleset []*struct { + Common + Access string `xml:"access,attr"` + AllowsParsing string `xml:"allowsParsing,attr"` + Rbnfrule []*struct { + Common + Value string `xml:"value,attr"` + Radix string `xml:"radix,attr"` + Decexp string `xml:"decexp,attr"` + } `xml:"rbnfrule"` + } `xml:"ruleset"` + } `xml:"rulesetGrouping"` + } `xml:"rbnf"` + Annotations *struct { + Common + Annotation []*struct { + Common + Cp string `xml:"cp,attr"` + Tts string `xml:"tts,attr"` + } `xml:"annotation"` + } `xml:"annotations"` + Metadata *struct { + Common + CasingData *struct { + Common + CasingItem []*struct { + Common + Override string `xml:"override,attr"` + ForceError string `xml:"forceError,attr"` + } `xml:"casingItem"` + } `xml:"casingData"` + } `xml:"metadata"` + References *struct { + Common + Reference []*struct { + Common + Uri string `xml:"uri,attr"` + } `xml:"reference"` + } `xml:"references"` +} + +// Collation contains rules that specify a certain sort-order, +// as a tailoring of the root order. +// The parsed rules are obtained by passing a RuleProcessor to Collation's +// Process method. +type Collation struct { + Common + Visibility string `xml:"visibility,attr"` + Base *Common `xml:"base"` + Import []*struct { + Common + Source string `xml:"source,attr"` + } `xml:"import"` + Settings *struct { + Common + Strength string `xml:"strength,attr"` + Alternate string `xml:"alternate,attr"` + Backwards string `xml:"backwards,attr"` + Normalization string `xml:"normalization,attr"` + CaseLevel string `xml:"caseLevel,attr"` + CaseFirst string `xml:"caseFirst,attr"` + HiraganaQuaternary string `xml:"hiraganaQuaternary,attr"` + MaxVariable string `xml:"maxVariable,attr"` + Numeric string `xml:"numeric,attr"` + Private string `xml:"private,attr"` + VariableTop string `xml:"variableTop,attr"` + Reorder string `xml:"reorder,attr"` + } `xml:"settings"` + SuppressContractions *Common `xml:"suppress_contractions"` + Optimize *Common `xml:"optimize"` + Cr []*Common `xml:"cr"` + rulesElem +} + +// Calendar specifies the fields used for formatting and parsing dates and times. +// The month and quarter names are identified numerically, starting at 1. +// The day (of the week) names are identified with short strings, since there is +// no universally-accepted numeric designation. +type Calendar struct { + Common + Months *struct { + Common + MonthContext []*struct { + Common + MonthWidth []*struct { + Common + Month []*struct { + Common + Yeartype string `xml:"yeartype,attr"` + } `xml:"month"` + } `xml:"monthWidth"` + } `xml:"monthContext"` + } `xml:"months"` + MonthNames *struct { + Common + Month []*struct { + Common + Yeartype string `xml:"yeartype,attr"` + } `xml:"month"` + } `xml:"monthNames"` + MonthAbbr *struct { + Common + Month []*struct { + Common + Yeartype string `xml:"yeartype,attr"` + } `xml:"month"` + } `xml:"monthAbbr"` + MonthPatterns *struct { + Common + MonthPatternContext []*struct { + Common + MonthPatternWidth []*struct { + Common + MonthPattern []*Common `xml:"monthPattern"` + } `xml:"monthPatternWidth"` + } `xml:"monthPatternContext"` + } `xml:"monthPatterns"` + Days *struct { + Common + DayContext []*struct { + Common + DayWidth []*struct { + Common + Day []*Common `xml:"day"` + } `xml:"dayWidth"` + } `xml:"dayContext"` + } `xml:"days"` + DayNames *struct { + Common + Day []*Common `xml:"day"` + } `xml:"dayNames"` + DayAbbr *struct { + Common + Day []*Common `xml:"day"` + } `xml:"dayAbbr"` + Quarters *struct { + Common + QuarterContext []*struct { + Common + QuarterWidth []*struct { + Common + Quarter []*Common `xml:"quarter"` + } `xml:"quarterWidth"` + } `xml:"quarterContext"` + } `xml:"quarters"` + Week *struct { + Common + MinDays []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"minDays"` + FirstDay []*struct { + Common + Day string `xml:"day,attr"` + } `xml:"firstDay"` + WeekendStart []*struct { + Common + Day string `xml:"day,attr"` + Time string `xml:"time,attr"` + } `xml:"weekendStart"` + WeekendEnd []*struct { + Common + Day string `xml:"day,attr"` + Time string `xml:"time,attr"` + } `xml:"weekendEnd"` + } `xml:"week"` + Am []*Common `xml:"am"` + Pm []*Common `xml:"pm"` + DayPeriods *struct { + Common + DayPeriodContext []*struct { + Common + DayPeriodWidth []*struct { + Common + DayPeriod []*Common `xml:"dayPeriod"` + } `xml:"dayPeriodWidth"` + } `xml:"dayPeriodContext"` + } `xml:"dayPeriods"` + Eras *struct { + Common + EraNames *struct { + Common + Era []*Common `xml:"era"` + } `xml:"eraNames"` + EraAbbr *struct { + Common + Era []*Common `xml:"era"` + } `xml:"eraAbbr"` + EraNarrow *struct { + Common + Era []*Common `xml:"era"` + } `xml:"eraNarrow"` + } `xml:"eras"` + CyclicNameSets *struct { + Common + CyclicNameSet []*struct { + Common + CyclicNameContext []*struct { + Common + CyclicNameWidth []*struct { + Common + CyclicName []*Common `xml:"cyclicName"` + } `xml:"cyclicNameWidth"` + } `xml:"cyclicNameContext"` + } `xml:"cyclicNameSet"` + } `xml:"cyclicNameSets"` + DateFormats *struct { + Common + DateFormatLength []*struct { + Common + DateFormat []*struct { + Common + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + DisplayName []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"displayName"` + } `xml:"dateFormat"` + } `xml:"dateFormatLength"` + } `xml:"dateFormats"` + TimeFormats *struct { + Common + TimeFormatLength []*struct { + Common + TimeFormat []*struct { + Common + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + DisplayName []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"displayName"` + } `xml:"timeFormat"` + } `xml:"timeFormatLength"` + } `xml:"timeFormats"` + DateTimeFormats *struct { + Common + DateTimeFormatLength []*struct { + Common + DateTimeFormat []*struct { + Common + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + DisplayName []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"displayName"` + } `xml:"dateTimeFormat"` + } `xml:"dateTimeFormatLength"` + AvailableFormats []*struct { + Common + DateFormatItem []*struct { + Common + Id string `xml:"id,attr"` + Count string `xml:"count,attr"` + } `xml:"dateFormatItem"` + } `xml:"availableFormats"` + AppendItems []*struct { + Common + AppendItem []*struct { + Common + Request string `xml:"request,attr"` + } `xml:"appendItem"` + } `xml:"appendItems"` + IntervalFormats []*struct { + Common + IntervalFormatFallback []*Common `xml:"intervalFormatFallback"` + IntervalFormatItem []*struct { + Common + Id string `xml:"id,attr"` + GreatestDifference []*struct { + Common + Id string `xml:"id,attr"` + } `xml:"greatestDifference"` + } `xml:"intervalFormatItem"` + } `xml:"intervalFormats"` + } `xml:"dateTimeFormats"` + Fields []*struct { + Common + Field []*struct { + Common + DisplayName []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"displayName"` + Relative []*Common `xml:"relative"` + RelativeTime []*struct { + Common + RelativeTimePattern []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"relativeTimePattern"` + } `xml:"relativeTime"` + RelativePeriod []*Common `xml:"relativePeriod"` + } `xml:"field"` + } `xml:"fields"` +} +type TimeZoneNames struct { + Common + HourFormat []*Common `xml:"hourFormat"` + HoursFormat []*Common `xml:"hoursFormat"` + GmtFormat []*Common `xml:"gmtFormat"` + GmtZeroFormat []*Common `xml:"gmtZeroFormat"` + RegionFormat []*Common `xml:"regionFormat"` + FallbackFormat []*Common `xml:"fallbackFormat"` + FallbackRegionFormat []*Common `xml:"fallbackRegionFormat"` + AbbreviationFallback []*Common `xml:"abbreviationFallback"` + PreferenceOrdering []*Common `xml:"preferenceOrdering"` + SingleCountries []*struct { + Common + List string `xml:"list,attr"` + } `xml:"singleCountries"` + Zone []*struct { + Common + Long []*struct { + Common + Generic []*Common `xml:"generic"` + Standard []*Common `xml:"standard"` + Daylight []*Common `xml:"daylight"` + } `xml:"long"` + Short []*struct { + Common + Generic []*Common `xml:"generic"` + Standard []*Common `xml:"standard"` + Daylight []*Common `xml:"daylight"` + } `xml:"short"` + CommonlyUsed []*struct { + Common + Used string `xml:"used,attr"` + } `xml:"commonlyUsed"` + ExemplarCity []*Common `xml:"exemplarCity"` + } `xml:"zone"` + Metazone []*struct { + Common + Long []*struct { + Common + Generic []*Common `xml:"generic"` + Standard []*Common `xml:"standard"` + Daylight []*Common `xml:"daylight"` + } `xml:"long"` + Short []*struct { + Common + Generic []*Common `xml:"generic"` + Standard []*Common `xml:"standard"` + Daylight []*Common `xml:"daylight"` + } `xml:"short"` + CommonlyUsed []*struct { + Common + Used string `xml:"used,attr"` + } `xml:"commonlyUsed"` + } `xml:"metazone"` +} + +// LocaleDisplayNames specifies localized display names for for scripts, languages, +// countries, currencies, and variants. +type LocaleDisplayNames struct { + Common + LocaleDisplayPattern *struct { + Common + LocalePattern []*Common `xml:"localePattern"` + LocaleSeparator []*Common `xml:"localeSeparator"` + LocaleKeyTypePattern []*Common `xml:"localeKeyTypePattern"` + } `xml:"localeDisplayPattern"` + Languages *struct { + Common + Language []*Common `xml:"language"` + } `xml:"languages"` + Scripts *struct { + Common + Script []*Common `xml:"script"` + } `xml:"scripts"` + Territories *struct { + Common + Territory []*Common `xml:"territory"` + } `xml:"territories"` + Subdivisions *struct { + Common + Subdivision []*Common `xml:"subdivision"` + } `xml:"subdivisions"` + Variants *struct { + Common + Variant []*Common `xml:"variant"` + } `xml:"variants"` + Keys *struct { + Common + Key []*Common `xml:"key"` + } `xml:"keys"` + Types *struct { + Common + Type []*struct { + Common + Key string `xml:"key,attr"` + } `xml:"type"` + } `xml:"types"` + TransformNames *struct { + Common + TransformName []*Common `xml:"transformName"` + } `xml:"transformNames"` + MeasurementSystemNames *struct { + Common + MeasurementSystemName []*Common `xml:"measurementSystemName"` + } `xml:"measurementSystemNames"` + CodePatterns *struct { + Common + CodePattern []*Common `xml:"codePattern"` + } `xml:"codePatterns"` +} + +// Numbers supplies information for formatting and parsing numbers and currencies. +type Numbers struct { + Common + DefaultNumberingSystem []*Common `xml:"defaultNumberingSystem"` + OtherNumberingSystems []*struct { + Common + Native []*Common `xml:"native"` + Traditional []*Common `xml:"traditional"` + Finance []*Common `xml:"finance"` + } `xml:"otherNumberingSystems"` + MinimumGroupingDigits []*Common `xml:"minimumGroupingDigits"` + Symbols []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + Decimal []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"decimal"` + Group []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"group"` + List []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"list"` + PercentSign []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"percentSign"` + NativeZeroDigit []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"nativeZeroDigit"` + PatternDigit []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"patternDigit"` + PlusSign []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"plusSign"` + MinusSign []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"minusSign"` + Exponential []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"exponential"` + SuperscriptingExponent []*Common `xml:"superscriptingExponent"` + PerMille []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"perMille"` + Infinity []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"infinity"` + Nan []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"nan"` + CurrencyDecimal []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"currencyDecimal"` + CurrencyGroup []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"currencyGroup"` + TimeSeparator []*Common `xml:"timeSeparator"` + } `xml:"symbols"` + DecimalFormats []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + DecimalFormatLength []*struct { + Common + DecimalFormat []*struct { + Common + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + } `xml:"decimalFormat"` + } `xml:"decimalFormatLength"` + } `xml:"decimalFormats"` + ScientificFormats []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + ScientificFormatLength []*struct { + Common + ScientificFormat []*struct { + Common + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + } `xml:"scientificFormat"` + } `xml:"scientificFormatLength"` + } `xml:"scientificFormats"` + PercentFormats []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + PercentFormatLength []*struct { + Common + PercentFormat []*struct { + Common + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + } `xml:"percentFormat"` + } `xml:"percentFormatLength"` + } `xml:"percentFormats"` + CurrencyFormats []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + CurrencySpacing []*struct { + Common + BeforeCurrency []*struct { + Common + CurrencyMatch []*Common `xml:"currencyMatch"` + SurroundingMatch []*Common `xml:"surroundingMatch"` + InsertBetween []*Common `xml:"insertBetween"` + } `xml:"beforeCurrency"` + AfterCurrency []*struct { + Common + CurrencyMatch []*Common `xml:"currencyMatch"` + SurroundingMatch []*Common `xml:"surroundingMatch"` + InsertBetween []*Common `xml:"insertBetween"` + } `xml:"afterCurrency"` + } `xml:"currencySpacing"` + CurrencyFormatLength []*struct { + Common + CurrencyFormat []*struct { + Common + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + } `xml:"currencyFormat"` + } `xml:"currencyFormatLength"` + UnitPattern []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"unitPattern"` + } `xml:"currencyFormats"` + Currencies *struct { + Common + Currency []*struct { + Common + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + DisplayName []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"displayName"` + Symbol []*Common `xml:"symbol"` + Decimal []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"decimal"` + Group []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + } `xml:"group"` + } `xml:"currency"` + } `xml:"currencies"` + MiscPatterns []*struct { + Common + NumberSystem string `xml:"numberSystem,attr"` + Pattern []*struct { + Common + Numbers string `xml:"numbers,attr"` + Count string `xml:"count,attr"` + } `xml:"pattern"` + } `xml:"miscPatterns"` +} + +// Version is the version of CLDR from which the XML definitions are generated. +const Version = "30" diff --git a/vendor/golang.org/x/text/unicode/doc.go b/vendor/golang.org/x/text/unicode/doc.go new file mode 100644 index 0000000..e8f1032 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/doc.go @@ -0,0 +1,8 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// unicode holds packages with implementations of Unicode standards that are +// mostly used as building blocks for other packages in golang.org/x/text, +// layout engines, or are otherwise more low-level in nature. +package unicode diff --git a/vendor/golang.org/x/text/unicode/norm/composition.go b/vendor/golang.org/x/text/unicode/norm/composition.go new file mode 100644 index 0000000..d17b278 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/composition.go @@ -0,0 +1,514 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import "unicode/utf8" + +const ( + maxNonStarters = 30 + // The maximum number of characters needed for a buffer is + // maxNonStarters + 1 for the starter + 1 for the GCJ + maxBufferSize = maxNonStarters + 2 + maxNFCExpansion = 3 // NFC(0x1D160) + maxNFKCExpansion = 18 // NFKC(0xFDFA) + + maxByteBufferSize = utf8.UTFMax * maxBufferSize // 128 +) + +// ssState is used for reporting the segment state after inserting a rune. +// It is returned by streamSafe.next. +type ssState int + +const ( + // Indicates a rune was successfully added to the segment. + ssSuccess ssState = iota + // Indicates a rune starts a new segment and should not be added. + ssStarter + // Indicates a rune caused a segment overflow and a CGJ should be inserted. + ssOverflow +) + +// streamSafe implements the policy of when a CGJ should be inserted. +type streamSafe uint8 + +// mkStreamSafe is a shorthand for declaring a streamSafe var and calling +// first on it. +func mkStreamSafe(p Properties) streamSafe { + return streamSafe(p.nTrailingNonStarters()) +} + +// first inserts the first rune of a segment. +func (ss *streamSafe) first(p Properties) { + if *ss != 0 { + panic("!= 0") + } + *ss = streamSafe(p.nTrailingNonStarters()) +} + +// insert returns a ssState value to indicate whether a rune represented by p +// can be inserted. +func (ss *streamSafe) next(p Properties) ssState { + if *ss > maxNonStarters { + panic("streamSafe was not reset") + } + n := p.nLeadingNonStarters() + if *ss += streamSafe(n); *ss > maxNonStarters { + *ss = 0 + return ssOverflow + } + // The Stream-Safe Text Processing prescribes that the counting can stop + // as soon as a starter is encountered. However, there are some starters, + // like Jamo V and T, that can combine with other runes, leaving their + // successive non-starters appended to the previous, possibly causing an + // overflow. We will therefore consider any rune with a non-zero nLead to + // be a non-starter. Note that it always hold that if nLead > 0 then + // nLead == nTrail. + if n == 0 { + *ss = 0 + return ssStarter + } + return ssSuccess +} + +// backwards is used for checking for overflow and segment starts +// when traversing a string backwards. Users do not need to call first +// for the first rune. The state of the streamSafe retains the count of +// the non-starters loaded. +func (ss *streamSafe) backwards(p Properties) ssState { + if *ss > maxNonStarters { + panic("streamSafe was not reset") + } + c := *ss + streamSafe(p.nTrailingNonStarters()) + if c > maxNonStarters { + return ssOverflow + } + *ss = c + if p.nLeadingNonStarters() == 0 { + return ssStarter + } + return ssSuccess +} + +func (ss streamSafe) isMax() bool { + return ss == maxNonStarters +} + +// GraphemeJoiner is inserted after maxNonStarters non-starter runes. +const GraphemeJoiner = "\u034F" + +// reorderBuffer is used to normalize a single segment. Characters inserted with +// insert are decomposed and reordered based on CCC. The compose method can +// be used to recombine characters. Note that the byte buffer does not hold +// the UTF-8 characters in order. Only the rune array is maintained in sorted +// order. flush writes the resulting segment to a byte array. +type reorderBuffer struct { + rune [maxBufferSize]Properties // Per character info. + byte [maxByteBufferSize]byte // UTF-8 buffer. Referenced by runeInfo.pos. + nbyte uint8 // Number or bytes. + ss streamSafe // For limiting length of non-starter sequence. + nrune int // Number of runeInfos. + f formInfo + + src input + nsrc int + tmpBytes input + + out []byte + flushF func(*reorderBuffer) bool +} + +func (rb *reorderBuffer) init(f Form, src []byte) { + rb.f = *formTable[f] + rb.src.setBytes(src) + rb.nsrc = len(src) + rb.ss = 0 +} + +func (rb *reorderBuffer) initString(f Form, src string) { + rb.f = *formTable[f] + rb.src.setString(src) + rb.nsrc = len(src) + rb.ss = 0 +} + +func (rb *reorderBuffer) setFlusher(out []byte, f func(*reorderBuffer) bool) { + rb.out = out + rb.flushF = f +} + +// reset discards all characters from the buffer. +func (rb *reorderBuffer) reset() { + rb.nrune = 0 + rb.nbyte = 0 + rb.ss = 0 +} + +func (rb *reorderBuffer) doFlush() bool { + if rb.f.composing { + rb.compose() + } + res := rb.flushF(rb) + rb.reset() + return res +} + +// appendFlush appends the normalized segment to rb.out. +func appendFlush(rb *reorderBuffer) bool { + for i := 0; i < rb.nrune; i++ { + start := rb.rune[i].pos + end := start + rb.rune[i].size + rb.out = append(rb.out, rb.byte[start:end]...) + } + return true +} + +// flush appends the normalized segment to out and resets rb. +func (rb *reorderBuffer) flush(out []byte) []byte { + for i := 0; i < rb.nrune; i++ { + start := rb.rune[i].pos + end := start + rb.rune[i].size + out = append(out, rb.byte[start:end]...) + } + rb.reset() + return out +} + +// flushCopy copies the normalized segment to buf and resets rb. +// It returns the number of bytes written to buf. +func (rb *reorderBuffer) flushCopy(buf []byte) int { + p := 0 + for i := 0; i < rb.nrune; i++ { + runep := rb.rune[i] + p += copy(buf[p:], rb.byte[runep.pos:runep.pos+runep.size]) + } + rb.reset() + return p +} + +// insertOrdered inserts a rune in the buffer, ordered by Canonical Combining Class. +// It returns false if the buffer is not large enough to hold the rune. +// It is used internally by insert and insertString only. +func (rb *reorderBuffer) insertOrdered(info Properties) { + n := rb.nrune + b := rb.rune[:] + cc := info.ccc + if cc > 0 { + // Find insertion position + move elements to make room. + for ; n > 0; n-- { + if b[n-1].ccc <= cc { + break + } + b[n] = b[n-1] + } + } + rb.nrune += 1 + pos := uint8(rb.nbyte) + rb.nbyte += utf8.UTFMax + info.pos = pos + b[n] = info +} + +// insertErr is an error code returned by insert. Using this type instead +// of error improves performance up to 20% for many of the benchmarks. +type insertErr int + +const ( + iSuccess insertErr = -iota + iShortDst + iShortSrc +) + +// insertFlush inserts the given rune in the buffer ordered by CCC. +// If a decomposition with multiple segments are encountered, they leading +// ones are flushed. +// It returns a non-zero error code if the rune was not inserted. +func (rb *reorderBuffer) insertFlush(src input, i int, info Properties) insertErr { + if rune := src.hangul(i); rune != 0 { + rb.decomposeHangul(rune) + return iSuccess + } + if info.hasDecomposition() { + return rb.insertDecomposed(info.Decomposition()) + } + rb.insertSingle(src, i, info) + return iSuccess +} + +// insertUnsafe inserts the given rune in the buffer ordered by CCC. +// It is assumed there is sufficient space to hold the runes. It is the +// responsibility of the caller to ensure this. This can be done by checking +// the state returned by the streamSafe type. +func (rb *reorderBuffer) insertUnsafe(src input, i int, info Properties) { + if rune := src.hangul(i); rune != 0 { + rb.decomposeHangul(rune) + } + if info.hasDecomposition() { + // TODO: inline. + rb.insertDecomposed(info.Decomposition()) + } else { + rb.insertSingle(src, i, info) + } +} + +// insertDecomposed inserts an entry in to the reorderBuffer for each rune +// in dcomp. dcomp must be a sequence of decomposed UTF-8-encoded runes. +// It flushes the buffer on each new segment start. +func (rb *reorderBuffer) insertDecomposed(dcomp []byte) insertErr { + rb.tmpBytes.setBytes(dcomp) + for i := 0; i < len(dcomp); { + info := rb.f.info(rb.tmpBytes, i) + if info.BoundaryBefore() && rb.nrune > 0 && !rb.doFlush() { + return iShortDst + } + i += copy(rb.byte[rb.nbyte:], dcomp[i:i+int(info.size)]) + rb.insertOrdered(info) + } + return iSuccess +} + +// insertSingle inserts an entry in the reorderBuffer for the rune at +// position i. info is the runeInfo for the rune at position i. +func (rb *reorderBuffer) insertSingle(src input, i int, info Properties) { + src.copySlice(rb.byte[rb.nbyte:], i, i+int(info.size)) + rb.insertOrdered(info) +} + +// insertCGJ inserts a Combining Grapheme Joiner (0x034f) into rb. +func (rb *reorderBuffer) insertCGJ() { + rb.insertSingle(input{str: GraphemeJoiner}, 0, Properties{size: uint8(len(GraphemeJoiner))}) +} + +// appendRune inserts a rune at the end of the buffer. It is used for Hangul. +func (rb *reorderBuffer) appendRune(r rune) { + bn := rb.nbyte + sz := utf8.EncodeRune(rb.byte[bn:], rune(r)) + rb.nbyte += utf8.UTFMax + rb.rune[rb.nrune] = Properties{pos: bn, size: uint8(sz)} + rb.nrune++ +} + +// assignRune sets a rune at position pos. It is used for Hangul and recomposition. +func (rb *reorderBuffer) assignRune(pos int, r rune) { + bn := rb.rune[pos].pos + sz := utf8.EncodeRune(rb.byte[bn:], rune(r)) + rb.rune[pos] = Properties{pos: bn, size: uint8(sz)} +} + +// runeAt returns the rune at position n. It is used for Hangul and recomposition. +func (rb *reorderBuffer) runeAt(n int) rune { + inf := rb.rune[n] + r, _ := utf8.DecodeRune(rb.byte[inf.pos : inf.pos+inf.size]) + return r +} + +// bytesAt returns the UTF-8 encoding of the rune at position n. +// It is used for Hangul and recomposition. +func (rb *reorderBuffer) bytesAt(n int) []byte { + inf := rb.rune[n] + return rb.byte[inf.pos : int(inf.pos)+int(inf.size)] +} + +// For Hangul we combine algorithmically, instead of using tables. +const ( + hangulBase = 0xAC00 // UTF-8(hangulBase) -> EA B0 80 + hangulBase0 = 0xEA + hangulBase1 = 0xB0 + hangulBase2 = 0x80 + + hangulEnd = hangulBase + jamoLVTCount // UTF-8(0xD7A4) -> ED 9E A4 + hangulEnd0 = 0xED + hangulEnd1 = 0x9E + hangulEnd2 = 0xA4 + + jamoLBase = 0x1100 // UTF-8(jamoLBase) -> E1 84 00 + jamoLBase0 = 0xE1 + jamoLBase1 = 0x84 + jamoLEnd = 0x1113 + jamoVBase = 0x1161 + jamoVEnd = 0x1176 + jamoTBase = 0x11A7 + jamoTEnd = 0x11C3 + + jamoTCount = 28 + jamoVCount = 21 + jamoVTCount = 21 * 28 + jamoLVTCount = 19 * 21 * 28 +) + +const hangulUTF8Size = 3 + +func isHangul(b []byte) bool { + if len(b) < hangulUTF8Size { + return false + } + b0 := b[0] + if b0 < hangulBase0 { + return false + } + b1 := b[1] + switch { + case b0 == hangulBase0: + return b1 >= hangulBase1 + case b0 < hangulEnd0: + return true + case b0 > hangulEnd0: + return false + case b1 < hangulEnd1: + return true + } + return b1 == hangulEnd1 && b[2] < hangulEnd2 +} + +func isHangulString(b string) bool { + if len(b) < hangulUTF8Size { + return false + } + b0 := b[0] + if b0 < hangulBase0 { + return false + } + b1 := b[1] + switch { + case b0 == hangulBase0: + return b1 >= hangulBase1 + case b0 < hangulEnd0: + return true + case b0 > hangulEnd0: + return false + case b1 < hangulEnd1: + return true + } + return b1 == hangulEnd1 && b[2] < hangulEnd2 +} + +// Caller must ensure len(b) >= 2. +func isJamoVT(b []byte) bool { + // True if (rune & 0xff00) == jamoLBase + return b[0] == jamoLBase0 && (b[1]&0xFC) == jamoLBase1 +} + +func isHangulWithoutJamoT(b []byte) bool { + c, _ := utf8.DecodeRune(b) + c -= hangulBase + return c < jamoLVTCount && c%jamoTCount == 0 +} + +// decomposeHangul writes the decomposed Hangul to buf and returns the number +// of bytes written. len(buf) should be at least 9. +func decomposeHangul(buf []byte, r rune) int { + const JamoUTF8Len = 3 + r -= hangulBase + x := r % jamoTCount + r /= jamoTCount + utf8.EncodeRune(buf, jamoLBase+r/jamoVCount) + utf8.EncodeRune(buf[JamoUTF8Len:], jamoVBase+r%jamoVCount) + if x != 0 { + utf8.EncodeRune(buf[2*JamoUTF8Len:], jamoTBase+x) + return 3 * JamoUTF8Len + } + return 2 * JamoUTF8Len +} + +// decomposeHangul algorithmically decomposes a Hangul rune into +// its Jamo components. +// See http://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul. +func (rb *reorderBuffer) decomposeHangul(r rune) { + r -= hangulBase + x := r % jamoTCount + r /= jamoTCount + rb.appendRune(jamoLBase + r/jamoVCount) + rb.appendRune(jamoVBase + r%jamoVCount) + if x != 0 { + rb.appendRune(jamoTBase + x) + } +} + +// combineHangul algorithmically combines Jamo character components into Hangul. +// See http://unicode.org/reports/tr15/#Hangul for details on combining Hangul. +func (rb *reorderBuffer) combineHangul(s, i, k int) { + b := rb.rune[:] + bn := rb.nrune + for ; i < bn; i++ { + cccB := b[k-1].ccc + cccC := b[i].ccc + if cccB == 0 { + s = k - 1 + } + if s != k-1 && cccB >= cccC { + // b[i] is blocked by greater-equal cccX below it + b[k] = b[i] + k++ + } else { + l := rb.runeAt(s) // also used to compare to hangulBase + v := rb.runeAt(i) // also used to compare to jamoT + switch { + case jamoLBase <= l && l < jamoLEnd && + jamoVBase <= v && v < jamoVEnd: + // 11xx plus 116x to LV + rb.assignRune(s, hangulBase+ + (l-jamoLBase)*jamoVTCount+(v-jamoVBase)*jamoTCount) + case hangulBase <= l && l < hangulEnd && + jamoTBase < v && v < jamoTEnd && + ((l-hangulBase)%jamoTCount) == 0: + // ACxx plus 11Ax to LVT + rb.assignRune(s, l+v-jamoTBase) + default: + b[k] = b[i] + k++ + } + } + } + rb.nrune = k +} + +// compose recombines the runes in the buffer. +// It should only be used to recompose a single segment, as it will not +// handle alternations between Hangul and non-Hangul characters correctly. +func (rb *reorderBuffer) compose() { + // UAX #15, section X5 , including Corrigendum #5 + // "In any character sequence beginning with starter S, a character C is + // blocked from S if and only if there is some character B between S + // and C, and either B is a starter or it has the same or higher + // combining class as C." + bn := rb.nrune + if bn == 0 { + return + } + k := 1 + b := rb.rune[:] + for s, i := 0, 1; i < bn; i++ { + if isJamoVT(rb.bytesAt(i)) { + // Redo from start in Hangul mode. Necessary to support + // U+320E..U+321E in NFKC mode. + rb.combineHangul(s, i, k) + return + } + ii := b[i] + // We can only use combineForward as a filter if we later + // get the info for the combined character. This is more + // expensive than using the filter. Using combinesBackward() + // is safe. + if ii.combinesBackward() { + cccB := b[k-1].ccc + cccC := ii.ccc + blocked := false // b[i] blocked by starter or greater or equal CCC? + if cccB == 0 { + s = k - 1 + } else { + blocked = s != k-1 && cccB >= cccC + } + if !blocked { + combined := combine(rb.runeAt(s), rb.runeAt(i)) + if combined != 0 { + rb.assignRune(s, combined) + continue + } + } + } + b[k] = b[i] + k++ + } + rb.nrune = k +} diff --git a/vendor/golang.org/x/text/unicode/norm/composition_test.go b/vendor/golang.org/x/text/unicode/norm/composition_test.go new file mode 100644 index 0000000..1168406 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/composition_test.go @@ -0,0 +1,130 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import "testing" + +// TestCase is used for most tests. +type TestCase struct { + in []rune + out []rune +} + +func runTests(t *testing.T, name string, fm Form, tests []TestCase) { + rb := reorderBuffer{} + rb.init(fm, nil) + for i, test := range tests { + rb.setFlusher(nil, appendFlush) + for j, rune := range test.in { + b := []byte(string(rune)) + src := inputBytes(b) + info := rb.f.info(src, 0) + if j == 0 { + rb.ss.first(info) + } else { + rb.ss.next(info) + } + if rb.insertFlush(src, 0, info) < 0 { + t.Errorf("%s:%d: insert failed for rune %d", name, i, j) + } + } + rb.doFlush() + was := string(rb.out) + want := string(test.out) + if len(was) != len(want) { + t.Errorf("%s:%d: length = %d; want %d", name, i, len(was), len(want)) + } + if was != want { + k, pfx := pidx(was, want) + t.Errorf("%s:%d: \nwas %s%+q; \nwant %s%+q", name, i, pfx, was[k:], pfx, want[k:]) + } + } +} + +func TestFlush(t *testing.T) { + const ( + hello = "Hello " + world = "world!" + ) + buf := make([]byte, maxByteBufferSize) + p := copy(buf, hello) + out := buf[p:] + rb := reorderBuffer{} + rb.initString(NFC, world) + if i := rb.flushCopy(out); i != 0 { + t.Errorf("wrote bytes on flush of empty buffer. (len(out) = %d)", i) + } + + for i := range world { + // No need to set streamSafe values for this test. + rb.insertFlush(rb.src, i, rb.f.info(rb.src, i)) + n := rb.flushCopy(out) + out = out[n:] + p += n + } + + was := buf[:p] + want := hello + world + if string(was) != want { + t.Errorf(`output after flush was "%s"; want "%s"`, string(was), want) + } + if rb.nrune != 0 { + t.Errorf("non-null size of info buffer (rb.nrune == %d)", rb.nrune) + } + if rb.nbyte != 0 { + t.Errorf("non-null size of byte buffer (rb.nbyte == %d)", rb.nbyte) + } +} + +var insertTests = []TestCase{ + {[]rune{'a'}, []rune{'a'}}, + {[]rune{0x300}, []rune{0x300}}, + {[]rune{0x300, 0x316}, []rune{0x316, 0x300}}, // CCC(0x300)==230; CCC(0x316)==220 + {[]rune{0x316, 0x300}, []rune{0x316, 0x300}}, + {[]rune{0x41, 0x316, 0x300}, []rune{0x41, 0x316, 0x300}}, + {[]rune{0x41, 0x300, 0x316}, []rune{0x41, 0x316, 0x300}}, + {[]rune{0x300, 0x316, 0x41}, []rune{0x316, 0x300, 0x41}}, + {[]rune{0x41, 0x300, 0x40, 0x316}, []rune{0x41, 0x300, 0x40, 0x316}}, +} + +func TestInsert(t *testing.T) { + runTests(t, "TestInsert", NFD, insertTests) +} + +var decompositionNFDTest = []TestCase{ + {[]rune{0xC0}, []rune{0x41, 0x300}}, + {[]rune{0xAC00}, []rune{0x1100, 0x1161}}, + {[]rune{0x01C4}, []rune{0x01C4}}, + {[]rune{0x320E}, []rune{0x320E}}, + {[]rune("음ẻ과"), []rune{0x110B, 0x1173, 0x11B7, 0x65, 0x309, 0x1100, 0x116A}}, +} + +var decompositionNFKDTest = []TestCase{ + {[]rune{0xC0}, []rune{0x41, 0x300}}, + {[]rune{0xAC00}, []rune{0x1100, 0x1161}}, + {[]rune{0x01C4}, []rune{0x44, 0x5A, 0x030C}}, + {[]rune{0x320E}, []rune{0x28, 0x1100, 0x1161, 0x29}}, +} + +func TestDecomposition(t *testing.T) { + runTests(t, "TestDecompositionNFD", NFD, decompositionNFDTest) + runTests(t, "TestDecompositionNFKD", NFKD, decompositionNFKDTest) +} + +var compositionTest = []TestCase{ + {[]rune{0x41, 0x300}, []rune{0xC0}}, + {[]rune{0x41, 0x316}, []rune{0x41, 0x316}}, + {[]rune{0x41, 0x300, 0x35D}, []rune{0xC0, 0x35D}}, + {[]rune{0x41, 0x316, 0x300}, []rune{0xC0, 0x316}}, + // blocking starter + {[]rune{0x41, 0x316, 0x40, 0x300}, []rune{0x41, 0x316, 0x40, 0x300}}, + {[]rune{0x1100, 0x1161}, []rune{0xAC00}}, + // parenthesized Hangul, alternate between ASCII and Hangul. + {[]rune{0x28, 0x1100, 0x1161, 0x29}, []rune{0x28, 0xAC00, 0x29}}, +} + +func TestComposition(t *testing.T) { + runTests(t, "TestComposition", NFC, compositionTest) +} diff --git a/vendor/golang.org/x/text/unicode/norm/example_iter_test.go b/vendor/golang.org/x/text/unicode/norm/example_iter_test.go new file mode 100644 index 0000000..82df89c --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/example_iter_test.go @@ -0,0 +1,82 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm_test + +import ( + "bytes" + "fmt" + "unicode/utf8" + + "golang.org/x/text/unicode/norm" +) + +// EqualSimple uses a norm.Iter to compare two non-normalized +// strings for equivalence. +func EqualSimple(a, b string) bool { + var ia, ib norm.Iter + ia.InitString(norm.NFKD, a) + ib.InitString(norm.NFKD, b) + for !ia.Done() && !ib.Done() { + if !bytes.Equal(ia.Next(), ib.Next()) { + return false + } + } + return ia.Done() && ib.Done() +} + +// FindPrefix finds the longest common prefix of ASCII characters +// of a and b. +func FindPrefix(a, b string) int { + i := 0 + for ; i < len(a) && i < len(b) && a[i] < utf8.RuneSelf && a[i] == b[i]; i++ { + } + return i +} + +// EqualOpt is like EqualSimple, but optimizes the special +// case for ASCII characters. +func EqualOpt(a, b string) bool { + n := FindPrefix(a, b) + a, b = a[n:], b[n:] + var ia, ib norm.Iter + ia.InitString(norm.NFKD, a) + ib.InitString(norm.NFKD, b) + for !ia.Done() && !ib.Done() { + if !bytes.Equal(ia.Next(), ib.Next()) { + return false + } + if n := int64(FindPrefix(a[ia.Pos():], b[ib.Pos():])); n != 0 { + ia.Seek(n, 1) + ib.Seek(n, 1) + } + } + return ia.Done() && ib.Done() +} + +var compareTests = []struct{ a, b string }{ + {"aaa", "aaa"}, + {"aaa", "aab"}, + {"a\u0300a", "\u00E0a"}, + {"a\u0300\u0320b", "a\u0320\u0300b"}, + {"\u1E0A\u0323", "\x44\u0323\u0307"}, + // A character that decomposes into multiple segments + // spans several iterations. + {"\u3304", "\u30A4\u30CB\u30F3\u30AF\u3099"}, +} + +func ExampleIter() { + for i, t := range compareTests { + r0 := EqualSimple(t.a, t.b) + r1 := EqualOpt(t.a, t.b) + fmt.Printf("%d: %v %v\n", i, r0, r1) + } + // Output: + // 0: true true + // 1: false false + // 2: true true + // 3: true true + // 4: true true + // 5: true true +} diff --git a/vendor/golang.org/x/text/unicode/norm/example_test.go b/vendor/golang.org/x/text/unicode/norm/example_test.go new file mode 100644 index 0000000..8f3b156 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/example_test.go @@ -0,0 +1,27 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm_test + +import ( + "fmt" + + "golang.org/x/text/unicode/norm" +) + +func ExampleForm_NextBoundary() { + s := norm.NFD.String("Mêlée") + + for i := 0; i < len(s); { + d := norm.NFC.NextBoundaryInString(s[i:], true) + fmt.Printf("%[1]s: %+[1]q\n", s[i:i+d]) + i += d + } + // Output: + // M: "M" + // ê: "e\u0302" + // l: "l" + // é: "e\u0301" + // e: "e" +} diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo.go b/vendor/golang.org/x/text/unicode/norm/forminfo.go new file mode 100644 index 0000000..e67e765 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/forminfo.go @@ -0,0 +1,259 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +// This file contains Form-specific logic and wrappers for data in tables.go. + +// Rune info is stored in a separate trie per composing form. A composing form +// and its corresponding decomposing form share the same trie. Each trie maps +// a rune to a uint16. The values take two forms. For v >= 0x8000: +// bits +// 15: 1 (inverse of NFD_QC bit of qcInfo) +// 13..7: qcInfo (see below). isYesD is always true (no decompostion). +// 6..0: ccc (compressed CCC value). +// For v < 0x8000, the respective rune has a decomposition and v is an index +// into a byte array of UTF-8 decomposition sequences and additional info and +// has the form: +// <header> <decomp_byte>* [<tccc> [<lccc>]] +// The header contains the number of bytes in the decomposition (excluding this +// length byte). The two most significant bits of this length byte correspond +// to bit 5 and 4 of qcInfo (see below). The byte sequence itself starts at v+1. +// The byte sequence is followed by a trailing and leading CCC if the values +// for these are not zero. The value of v determines which ccc are appended +// to the sequences. For v < firstCCC, there are none, for v >= firstCCC, +// the sequence is followed by a trailing ccc, and for v >= firstLeadingCC +// there is an additional leading ccc. The value of tccc itself is the +// trailing CCC shifted left 2 bits. The two least-significant bits of tccc +// are the number of trailing non-starters. + +const ( + qcInfoMask = 0x3F // to clear all but the relevant bits in a qcInfo + headerLenMask = 0x3F // extract the length value from the header byte + headerFlagsMask = 0xC0 // extract the qcInfo bits from the header byte +) + +// Properties provides access to normalization properties of a rune. +type Properties struct { + pos uint8 // start position in reorderBuffer; used in composition.go + size uint8 // length of UTF-8 encoding of this rune + ccc uint8 // leading canonical combining class (ccc if not decomposition) + tccc uint8 // trailing canonical combining class (ccc if not decomposition) + nLead uint8 // number of leading non-starters. + flags qcInfo // quick check flags + index uint16 +} + +// functions dispatchable per form +type lookupFunc func(b input, i int) Properties + +// formInfo holds Form-specific functions and tables. +type formInfo struct { + form Form + composing, compatibility bool // form type + info lookupFunc + nextMain iterFunc +} + +var formTable = []*formInfo{{ + form: NFC, + composing: true, + compatibility: false, + info: lookupInfoNFC, + nextMain: nextComposed, +}, { + form: NFD, + composing: false, + compatibility: false, + info: lookupInfoNFC, + nextMain: nextDecomposed, +}, { + form: NFKC, + composing: true, + compatibility: true, + info: lookupInfoNFKC, + nextMain: nextComposed, +}, { + form: NFKD, + composing: false, + compatibility: true, + info: lookupInfoNFKC, + nextMain: nextDecomposed, +}} + +// We do not distinguish between boundaries for NFC, NFD, etc. to avoid +// unexpected behavior for the user. For example, in NFD, there is a boundary +// after 'a'. However, 'a' might combine with modifiers, so from the application's +// perspective it is not a good boundary. We will therefore always use the +// boundaries for the combining variants. + +// BoundaryBefore returns true if this rune starts a new segment and +// cannot combine with any rune on the left. +func (p Properties) BoundaryBefore() bool { + if p.ccc == 0 && !p.combinesBackward() { + return true + } + // We assume that the CCC of the first character in a decomposition + // is always non-zero if different from info.ccc and that we can return + // false at this point. This is verified by maketables. + return false +} + +// BoundaryAfter returns true if runes cannot combine with or otherwise +// interact with this or previous runes. +func (p Properties) BoundaryAfter() bool { + // TODO: loosen these conditions. + return p.isInert() +} + +// We pack quick check data in 4 bits: +// 5: Combines forward (0 == false, 1 == true) +// 4..3: NFC_QC Yes(00), No (10), or Maybe (11) +// 2: NFD_QC Yes (0) or No (1). No also means there is a decomposition. +// 1..0: Number of trailing non-starters. +// +// When all 4 bits are zero, the character is inert, meaning it is never +// influenced by normalization. +type qcInfo uint8 + +func (p Properties) isYesC() bool { return p.flags&0x10 == 0 } +func (p Properties) isYesD() bool { return p.flags&0x4 == 0 } + +func (p Properties) combinesForward() bool { return p.flags&0x20 != 0 } +func (p Properties) combinesBackward() bool { return p.flags&0x8 != 0 } // == isMaybe +func (p Properties) hasDecomposition() bool { return p.flags&0x4 != 0 } // == isNoD + +func (p Properties) isInert() bool { + return p.flags&qcInfoMask == 0 && p.ccc == 0 +} + +func (p Properties) multiSegment() bool { + return p.index >= firstMulti && p.index < endMulti +} + +func (p Properties) nLeadingNonStarters() uint8 { + return p.nLead +} + +func (p Properties) nTrailingNonStarters() uint8 { + return uint8(p.flags & 0x03) +} + +// Decomposition returns the decomposition for the underlying rune +// or nil if there is none. +func (p Properties) Decomposition() []byte { + // TODO: create the decomposition for Hangul? + if p.index == 0 { + return nil + } + i := p.index + n := decomps[i] & headerLenMask + i++ + return decomps[i : i+uint16(n)] +} + +// Size returns the length of UTF-8 encoding of the rune. +func (p Properties) Size() int { + return int(p.size) +} + +// CCC returns the canonical combining class of the underlying rune. +func (p Properties) CCC() uint8 { + if p.index >= firstCCCZeroExcept { + return 0 + } + return ccc[p.ccc] +} + +// LeadCCC returns the CCC of the first rune in the decomposition. +// If there is no decomposition, LeadCCC equals CCC. +func (p Properties) LeadCCC() uint8 { + return ccc[p.ccc] +} + +// TrailCCC returns the CCC of the last rune in the decomposition. +// If there is no decomposition, TrailCCC equals CCC. +func (p Properties) TrailCCC() uint8 { + return ccc[p.tccc] +} + +// Recomposition +// We use 32-bit keys instead of 64-bit for the two codepoint keys. +// This clips off the bits of three entries, but we know this will not +// result in a collision. In the unlikely event that changes to +// UnicodeData.txt introduce collisions, the compiler will catch it. +// Note that the recomposition map for NFC and NFKC are identical. + +// combine returns the combined rune or 0 if it doesn't exist. +func combine(a, b rune) rune { + key := uint32(uint16(a))<<16 + uint32(uint16(b)) + return recompMap[key] +} + +func lookupInfoNFC(b input, i int) Properties { + v, sz := b.charinfoNFC(i) + return compInfo(v, sz) +} + +func lookupInfoNFKC(b input, i int) Properties { + v, sz := b.charinfoNFKC(i) + return compInfo(v, sz) +} + +// Properties returns properties for the first rune in s. +func (f Form) Properties(s []byte) Properties { + if f == NFC || f == NFD { + return compInfo(nfcData.lookup(s)) + } + return compInfo(nfkcData.lookup(s)) +} + +// PropertiesString returns properties for the first rune in s. +func (f Form) PropertiesString(s string) Properties { + if f == NFC || f == NFD { + return compInfo(nfcData.lookupString(s)) + } + return compInfo(nfkcData.lookupString(s)) +} + +// compInfo converts the information contained in v and sz +// to a Properties. See the comment at the top of the file +// for more information on the format. +func compInfo(v uint16, sz int) Properties { + if v == 0 { + return Properties{size: uint8(sz)} + } else if v >= 0x8000 { + p := Properties{ + size: uint8(sz), + ccc: uint8(v), + tccc: uint8(v), + flags: qcInfo(v >> 8), + } + if p.ccc > 0 || p.combinesBackward() { + p.nLead = uint8(p.flags & 0x3) + } + return p + } + // has decomposition + h := decomps[v] + f := (qcInfo(h&headerFlagsMask) >> 2) | 0x4 + p := Properties{size: uint8(sz), flags: f, index: v} + if v >= firstCCC { + v += uint16(h&headerLenMask) + 1 + c := decomps[v] + p.tccc = c >> 2 + p.flags |= qcInfo(c & 0x3) + if v >= firstLeadingCCC { + p.nLead = c & 0x3 + if v >= firstStarterWithNLead { + // We were tricked. Remove the decomposition. + p.flags &= 0x03 + p.index = 0 + return p + } + p.ccc = decomps[v+1] + } + } + return p +} diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo_test.go b/vendor/golang.org/x/text/unicode/norm/forminfo_test.go new file mode 100644 index 0000000..e15ba9b --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/forminfo_test.go @@ -0,0 +1,54 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build test + +package norm + +import "testing" + +func TestProperties(t *testing.T) { + var d runeData + CK := [2]string{"C", "K"} + for k, r := 1, rune(0); r < 0x2ffff; r++ { + if k < len(testData) && r == testData[k].r { + d = testData[k] + k++ + } + s := string(r) + for j, p := range []Properties{NFC.PropertiesString(s), NFKC.PropertiesString(s)} { + f := d.f[j] + if p.CCC() != d.ccc { + t.Errorf("%U: ccc(%s): was %d; want %d %X", r, CK[j], p.CCC(), d.ccc, p.index) + } + if p.isYesC() != (f.qc == Yes) { + t.Errorf("%U: YesC(%s): was %v; want %v", r, CK[j], p.isYesC(), f.qc == Yes) + } + if p.combinesBackward() != (f.qc == Maybe) { + t.Errorf("%U: combines backwards(%s): was %v; want %v", r, CK[j], p.combinesBackward(), f.qc == Maybe) + } + if p.nLeadingNonStarters() != d.nLead { + t.Errorf("%U: nLead(%s): was %d; want %d %#v %#v", r, CK[j], p.nLeadingNonStarters(), d.nLead, p, d) + } + if p.nTrailingNonStarters() != d.nTrail { + t.Errorf("%U: nTrail(%s): was %d; want %d %#v %#v", r, CK[j], p.nTrailingNonStarters(), d.nTrail, p, d) + } + if p.combinesForward() != f.combinesForward { + t.Errorf("%U: combines forward(%s): was %v; want %v %#v", r, CK[j], p.combinesForward(), f.combinesForward, p) + } + // Skip Hangul as it is algorithmically computed. + if r >= hangulBase && r < hangulEnd { + continue + } + if p.hasDecomposition() { + if has := f.decomposition != ""; !has { + t.Errorf("%U: hasDecomposition(%s): was %v; want %v", r, CK[j], p.hasDecomposition(), has) + } + if string(p.Decomposition()) != f.decomposition { + t.Errorf("%U: decomp(%s): was %+q; want %+q", r, CK[j], p.Decomposition(), f.decomposition) + } + } + } + } +} diff --git a/vendor/golang.org/x/text/unicode/norm/input.go b/vendor/golang.org/x/text/unicode/norm/input.go new file mode 100644 index 0000000..045d4cc --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/input.go @@ -0,0 +1,105 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import "unicode/utf8" + +type input struct { + str string + bytes []byte +} + +func inputBytes(str []byte) input { + return input{bytes: str} +} + +func inputString(str string) input { + return input{str: str} +} + +func (in *input) setBytes(str []byte) { + in.str = "" + in.bytes = str +} + +func (in *input) setString(str string) { + in.str = str + in.bytes = nil +} + +func (in *input) _byte(p int) byte { + if in.bytes == nil { + return in.str[p] + } + return in.bytes[p] +} + +func (in *input) skipASCII(p, max int) int { + if in.bytes == nil { + for ; p < max && in.str[p] < utf8.RuneSelf; p++ { + } + } else { + for ; p < max && in.bytes[p] < utf8.RuneSelf; p++ { + } + } + return p +} + +func (in *input) skipContinuationBytes(p int) int { + if in.bytes == nil { + for ; p < len(in.str) && !utf8.RuneStart(in.str[p]); p++ { + } + } else { + for ; p < len(in.bytes) && !utf8.RuneStart(in.bytes[p]); p++ { + } + } + return p +} + +func (in *input) appendSlice(buf []byte, b, e int) []byte { + if in.bytes != nil { + return append(buf, in.bytes[b:e]...) + } + for i := b; i < e; i++ { + buf = append(buf, in.str[i]) + } + return buf +} + +func (in *input) copySlice(buf []byte, b, e int) int { + if in.bytes == nil { + return copy(buf, in.str[b:e]) + } + return copy(buf, in.bytes[b:e]) +} + +func (in *input) charinfoNFC(p int) (uint16, int) { + if in.bytes == nil { + return nfcData.lookupString(in.str[p:]) + } + return nfcData.lookup(in.bytes[p:]) +} + +func (in *input) charinfoNFKC(p int) (uint16, int) { + if in.bytes == nil { + return nfkcData.lookupString(in.str[p:]) + } + return nfkcData.lookup(in.bytes[p:]) +} + +func (in *input) hangul(p int) (r rune) { + if in.bytes == nil { + if !isHangulString(in.str[p:]) { + return 0 + } + r, _ = utf8.DecodeRuneInString(in.str[p:]) + } else { + if !isHangul(in.bytes[p:]) { + return 0 + } + r, _ = utf8.DecodeRune(in.bytes[p:]) + } + return r +} diff --git a/vendor/golang.org/x/text/unicode/norm/iter.go b/vendor/golang.org/x/text/unicode/norm/iter.go new file mode 100644 index 0000000..0a42a72 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/iter.go @@ -0,0 +1,450 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import ( + "fmt" + "unicode/utf8" +) + +// MaxSegmentSize is the maximum size of a byte buffer needed to consider any +// sequence of starter and non-starter runes for the purpose of normalization. +const MaxSegmentSize = maxByteBufferSize + +// An Iter iterates over a string or byte slice, while normalizing it +// to a given Form. +type Iter struct { + rb reorderBuffer + buf [maxByteBufferSize]byte + info Properties // first character saved from previous iteration + next iterFunc // implementation of next depends on form + asciiF iterFunc + + p int // current position in input source + multiSeg []byte // remainder of multi-segment decomposition +} + +type iterFunc func(*Iter) []byte + +// Init initializes i to iterate over src after normalizing it to Form f. +func (i *Iter) Init(f Form, src []byte) { + i.p = 0 + if len(src) == 0 { + i.setDone() + i.rb.nsrc = 0 + return + } + i.multiSeg = nil + i.rb.init(f, src) + i.next = i.rb.f.nextMain + i.asciiF = nextASCIIBytes + i.info = i.rb.f.info(i.rb.src, i.p) +} + +// InitString initializes i to iterate over src after normalizing it to Form f. +func (i *Iter) InitString(f Form, src string) { + i.p = 0 + if len(src) == 0 { + i.setDone() + i.rb.nsrc = 0 + return + } + i.multiSeg = nil + i.rb.initString(f, src) + i.next = i.rb.f.nextMain + i.asciiF = nextASCIIString + i.info = i.rb.f.info(i.rb.src, i.p) +} + +// Seek sets the segment to be returned by the next call to Next to start +// at position p. It is the responsibility of the caller to set p to the +// start of a UTF8 rune. +func (i *Iter) Seek(offset int64, whence int) (int64, error) { + var abs int64 + switch whence { + case 0: + abs = offset + case 1: + abs = int64(i.p) + offset + case 2: + abs = int64(i.rb.nsrc) + offset + default: + return 0, fmt.Errorf("norm: invalid whence") + } + if abs < 0 { + return 0, fmt.Errorf("norm: negative position") + } + if int(abs) >= i.rb.nsrc { + i.setDone() + return int64(i.p), nil + } + i.p = int(abs) + i.multiSeg = nil + i.next = i.rb.f.nextMain + i.info = i.rb.f.info(i.rb.src, i.p) + return abs, nil +} + +// returnSlice returns a slice of the underlying input type as a byte slice. +// If the underlying is of type []byte, it will simply return a slice. +// If the underlying is of type string, it will copy the slice to the buffer +// and return that. +func (i *Iter) returnSlice(a, b int) []byte { + if i.rb.src.bytes == nil { + return i.buf[:copy(i.buf[:], i.rb.src.str[a:b])] + } + return i.rb.src.bytes[a:b] +} + +// Pos returns the byte position at which the next call to Next will commence processing. +func (i *Iter) Pos() int { + return i.p +} + +func (i *Iter) setDone() { + i.next = nextDone + i.p = i.rb.nsrc +} + +// Done returns true if there is no more input to process. +func (i *Iter) Done() bool { + return i.p >= i.rb.nsrc +} + +// Next returns f(i.input[i.Pos():n]), where n is a boundary of i.input. +// For any input a and b for which f(a) == f(b), subsequent calls +// to Next will return the same segments. +// Modifying runes are grouped together with the preceding starter, if such a starter exists. +// Although not guaranteed, n will typically be the smallest possible n. +func (i *Iter) Next() []byte { + return i.next(i) +} + +func nextASCIIBytes(i *Iter) []byte { + p := i.p + 1 + if p >= i.rb.nsrc { + i.setDone() + return i.rb.src.bytes[i.p:p] + } + if i.rb.src.bytes[p] < utf8.RuneSelf { + p0 := i.p + i.p = p + return i.rb.src.bytes[p0:p] + } + i.info = i.rb.f.info(i.rb.src, i.p) + i.next = i.rb.f.nextMain + return i.next(i) +} + +func nextASCIIString(i *Iter) []byte { + p := i.p + 1 + if p >= i.rb.nsrc { + i.buf[0] = i.rb.src.str[i.p] + i.setDone() + return i.buf[:1] + } + if i.rb.src.str[p] < utf8.RuneSelf { + i.buf[0] = i.rb.src.str[i.p] + i.p = p + return i.buf[:1] + } + i.info = i.rb.f.info(i.rb.src, i.p) + i.next = i.rb.f.nextMain + return i.next(i) +} + +func nextHangul(i *Iter) []byte { + p := i.p + next := p + hangulUTF8Size + if next >= i.rb.nsrc { + i.setDone() + } else if i.rb.src.hangul(next) == 0 { + i.info = i.rb.f.info(i.rb.src, i.p) + i.next = i.rb.f.nextMain + return i.next(i) + } + i.p = next + return i.buf[:decomposeHangul(i.buf[:], i.rb.src.hangul(p))] +} + +func nextDone(i *Iter) []byte { + return nil +} + +// nextMulti is used for iterating over multi-segment decompositions +// for decomposing normal forms. +func nextMulti(i *Iter) []byte { + j := 0 + d := i.multiSeg + // skip first rune + for j = 1; j < len(d) && !utf8.RuneStart(d[j]); j++ { + } + for j < len(d) { + info := i.rb.f.info(input{bytes: d}, j) + if info.BoundaryBefore() { + i.multiSeg = d[j:] + return d[:j] + } + j += int(info.size) + } + // treat last segment as normal decomposition + i.next = i.rb.f.nextMain + return i.next(i) +} + +// nextMultiNorm is used for iterating over multi-segment decompositions +// for composing normal forms. +func nextMultiNorm(i *Iter) []byte { + j := 0 + d := i.multiSeg + for j < len(d) { + info := i.rb.f.info(input{bytes: d}, j) + if info.BoundaryBefore() { + i.rb.compose() + seg := i.buf[:i.rb.flushCopy(i.buf[:])] + i.rb.ss.first(info) + i.rb.insertUnsafe(input{bytes: d}, j, info) + i.multiSeg = d[j+int(info.size):] + return seg + } + i.rb.ss.next(info) + i.rb.insertUnsafe(input{bytes: d}, j, info) + j += int(info.size) + } + i.multiSeg = nil + i.next = nextComposed + return doNormComposed(i) +} + +// nextDecomposed is the implementation of Next for forms NFD and NFKD. +func nextDecomposed(i *Iter) (next []byte) { + outp := 0 + inCopyStart, outCopyStart := i.p, 0 + ss := mkStreamSafe(i.info) + for { + if sz := int(i.info.size); sz <= 1 { + p := i.p + i.p++ // ASCII or illegal byte. Either way, advance by 1. + if i.p >= i.rb.nsrc { + i.setDone() + return i.returnSlice(p, i.p) + } else if i.rb.src._byte(i.p) < utf8.RuneSelf { + i.next = i.asciiF + return i.returnSlice(p, i.p) + } + outp++ + } else if d := i.info.Decomposition(); d != nil { + // Note: If leading CCC != 0, then len(d) == 2 and last is also non-zero. + // Case 1: there is a leftover to copy. In this case the decomposition + // must begin with a modifier and should always be appended. + // Case 2: no leftover. Simply return d if followed by a ccc == 0 value. + p := outp + len(d) + if outp > 0 { + i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p) + if p > len(i.buf) { + return i.buf[:outp] + } + } else if i.info.multiSegment() { + // outp must be 0 as multi-segment decompositions always + // start a new segment. + if i.multiSeg == nil { + i.multiSeg = d + i.next = nextMulti + return nextMulti(i) + } + // We are in the last segment. Treat as normal decomposition. + d = i.multiSeg + i.multiSeg = nil + p = len(d) + } + prevCC := i.info.tccc + if i.p += sz; i.p >= i.rb.nsrc { + i.setDone() + i.info = Properties{} // Force BoundaryBefore to succeed. + } else { + i.info = i.rb.f.info(i.rb.src, i.p) + } + switch ss.next(i.info) { + case ssOverflow: + i.next = nextCGJDecompose + fallthrough + case ssStarter: + if outp > 0 { + copy(i.buf[outp:], d) + return i.buf[:p] + } + return d + } + copy(i.buf[outp:], d) + outp = p + inCopyStart, outCopyStart = i.p, outp + if i.info.ccc < prevCC { + goto doNorm + } + continue + } else if r := i.rb.src.hangul(i.p); r != 0 { + outp = decomposeHangul(i.buf[:], r) + i.p += hangulUTF8Size + inCopyStart, outCopyStart = i.p, outp + if i.p >= i.rb.nsrc { + i.setDone() + break + } else if i.rb.src.hangul(i.p) != 0 { + i.next = nextHangul + return i.buf[:outp] + } + } else { + p := outp + sz + if p > len(i.buf) { + break + } + outp = p + i.p += sz + } + if i.p >= i.rb.nsrc { + i.setDone() + break + } + prevCC := i.info.tccc + i.info = i.rb.f.info(i.rb.src, i.p) + if v := ss.next(i.info); v == ssStarter { + break + } else if v == ssOverflow { + i.next = nextCGJDecompose + break + } + if i.info.ccc < prevCC { + goto doNorm + } + } + if outCopyStart == 0 { + return i.returnSlice(inCopyStart, i.p) + } else if inCopyStart < i.p { + i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p) + } + return i.buf[:outp] +doNorm: + // Insert what we have decomposed so far in the reorderBuffer. + // As we will only reorder, there will always be enough room. + i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p) + i.rb.insertDecomposed(i.buf[0:outp]) + return doNormDecomposed(i) +} + +func doNormDecomposed(i *Iter) []byte { + for { + if s := i.rb.ss.next(i.info); s == ssOverflow { + i.next = nextCGJDecompose + break + } + i.rb.insertUnsafe(i.rb.src, i.p, i.info) + if i.p += int(i.info.size); i.p >= i.rb.nsrc { + i.setDone() + break + } + i.info = i.rb.f.info(i.rb.src, i.p) + if i.info.ccc == 0 { + break + } + } + // new segment or too many combining characters: exit normalization + return i.buf[:i.rb.flushCopy(i.buf[:])] +} + +func nextCGJDecompose(i *Iter) []byte { + i.rb.ss = 0 + i.rb.insertCGJ() + i.next = nextDecomposed + buf := doNormDecomposed(i) + return buf +} + +// nextComposed is the implementation of Next for forms NFC and NFKC. +func nextComposed(i *Iter) []byte { + outp, startp := 0, i.p + var prevCC uint8 + ss := mkStreamSafe(i.info) + for { + if !i.info.isYesC() { + goto doNorm + } + prevCC = i.info.tccc + sz := int(i.info.size) + if sz == 0 { + sz = 1 // illegal rune: copy byte-by-byte + } + p := outp + sz + if p > len(i.buf) { + break + } + outp = p + i.p += sz + if i.p >= i.rb.nsrc { + i.setDone() + break + } else if i.rb.src._byte(i.p) < utf8.RuneSelf { + i.next = i.asciiF + break + } + i.info = i.rb.f.info(i.rb.src, i.p) + if v := ss.next(i.info); v == ssStarter { + break + } else if v == ssOverflow { + i.next = nextCGJCompose + break + } + if i.info.ccc < prevCC { + goto doNorm + } + } + return i.returnSlice(startp, i.p) +doNorm: + i.p = startp + i.info = i.rb.f.info(i.rb.src, i.p) + if i.info.multiSegment() { + d := i.info.Decomposition() + info := i.rb.f.info(input{bytes: d}, 0) + i.rb.insertUnsafe(input{bytes: d}, 0, info) + i.multiSeg = d[int(info.size):] + i.next = nextMultiNorm + return nextMultiNorm(i) + } + i.rb.ss.first(i.info) + i.rb.insertUnsafe(i.rb.src, i.p, i.info) + return doNormComposed(i) +} + +func doNormComposed(i *Iter) []byte { + // First rune should already be inserted. + for { + if i.p += int(i.info.size); i.p >= i.rb.nsrc { + i.setDone() + break + } + i.info = i.rb.f.info(i.rb.src, i.p) + if s := i.rb.ss.next(i.info); s == ssStarter { + break + } else if s == ssOverflow { + i.next = nextCGJCompose + break + } + i.rb.insertUnsafe(i.rb.src, i.p, i.info) + } + i.rb.compose() + seg := i.buf[:i.rb.flushCopy(i.buf[:])] + return seg +} + +func nextCGJCompose(i *Iter) []byte { + i.rb.ss = 0 // instead of first + i.rb.insertCGJ() + i.next = nextComposed + // Note that we treat any rune with nLeadingNonStarters > 0 as a non-starter, + // even if they are not. This is particularly dubious for U+FF9E and UFF9A. + // If we ever change that, insert a check here. + i.rb.ss.first(i.info) + i.rb.insertUnsafe(i.rb.src, i.p, i.info) + return doNormComposed(i) +} diff --git a/vendor/golang.org/x/text/unicode/norm/iter_test.go b/vendor/golang.org/x/text/unicode/norm/iter_test.go new file mode 100644 index 0000000..e2aa6f2 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/iter_test.go @@ -0,0 +1,98 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import ( + "strings" + "testing" +) + +func doIterNorm(f Form, s string) []byte { + acc := []byte{} + i := Iter{} + i.InitString(f, s) + for !i.Done() { + acc = append(acc, i.Next()...) + } + return acc +} + +func TestIterNext(t *testing.T) { + runNormTests(t, "IterNext", func(f Form, out []byte, s string) []byte { + return doIterNorm(f, string(append(out, s...))) + }) +} + +type SegmentTest struct { + in string + out []string +} + +var segmentTests = []SegmentTest{ + {"\u1E0A\u0323a", []string{"\x44\u0323\u0307", "a", ""}}, + {rep('a', segSize), append(strings.Split(rep('a', segSize), ""), "")}, + {rep('a', segSize+2), append(strings.Split(rep('a', segSize+2), ""), "")}, + {rep('a', segSize) + "\u0300aa", + append(strings.Split(rep('a', segSize-1), ""), "a\u0300", "a", "a", "")}, + + // U+0f73 is NOT treated as a starter as it is a modifier + {"a" + grave(29) + "\u0f73", []string{"a" + grave(29), cgj + "\u0f73"}}, + {"a\u0f73", []string{"a\u0f73"}}, + + // U+ff9e is treated as a non-starter. + // TODO: should we? Note that this will only affect iteration, as whether + // or not we do so does not affect the normalization output and will either + // way result in consistent iteration output. + {"a" + grave(30) + "\uff9e", []string{"a" + grave(30), cgj + "\uff9e"}}, + {"a\uff9e", []string{"a\uff9e"}}, +} + +var segmentTestsK = []SegmentTest{ + {"\u3332", []string{"\u30D5", "\u30A1", "\u30E9", "\u30C3", "\u30C8\u3099", ""}}, + // last segment of multi-segment decomposition needs normalization + {"\u3332\u093C", []string{"\u30D5", "\u30A1", "\u30E9", "\u30C3", "\u30C8\u093C\u3099", ""}}, + {"\u320E", []string{"\x28", "\uAC00", "\x29"}}, + + // last segment should be copied to start of buffer. + {"\ufdfa", []string{"\u0635", "\u0644", "\u0649", " ", "\u0627", "\u0644", "\u0644", "\u0647", " ", "\u0639", "\u0644", "\u064a", "\u0647", " ", "\u0648", "\u0633", "\u0644", "\u0645", ""}}, + {"\ufdfa" + grave(30), []string{"\u0635", "\u0644", "\u0649", " ", "\u0627", "\u0644", "\u0644", "\u0647", " ", "\u0639", "\u0644", "\u064a", "\u0647", " ", "\u0648", "\u0633", "\u0644", "\u0645" + grave(30), ""}}, + {"\uFDFA" + grave(64), []string{"\u0635", "\u0644", "\u0649", " ", "\u0627", "\u0644", "\u0644", "\u0647", " ", "\u0639", "\u0644", "\u064a", "\u0647", " ", "\u0648", "\u0633", "\u0644", "\u0645" + grave(30), cgj + grave(30), cgj + grave(4), ""}}, + + // Hangul and Jamo are grouped togeter. + {"\uAC00", []string{"\u1100\u1161", ""}}, + {"\uAC01", []string{"\u1100\u1161\u11A8", ""}}, + {"\u1100\u1161", []string{"\u1100\u1161", ""}}, +} + +// Note that, by design, segmentation is equal for composing and decomposing forms. +func TestIterSegmentation(t *testing.T) { + segmentTest(t, "SegmentTestD", NFD, segmentTests) + segmentTest(t, "SegmentTestC", NFC, segmentTests) + segmentTest(t, "SegmentTestKD", NFKD, segmentTestsK) + segmentTest(t, "SegmentTestKC", NFKC, segmentTestsK) +} + +func segmentTest(t *testing.T, name string, f Form, tests []SegmentTest) { + iter := Iter{} + for i, tt := range tests { + iter.InitString(f, tt.in) + for j, seg := range tt.out { + if seg == "" { + if !iter.Done() { + res := string(iter.Next()) + t.Errorf(`%s:%d:%d: expected Done()==true, found segment %+q`, name, i, j, res) + } + continue + } + if iter.Done() { + t.Errorf("%s:%d:%d: Done()==true, want false", name, i, j) + } + seg = f.String(seg) + if res := string(iter.Next()); res != seg { + t.Errorf(`%s:%d:%d" segment was %+q (%d); want %+q (%d)`, name, i, j, pc(res), len(res), pc(seg), len(seg)) + } + } + } +} diff --git a/vendor/golang.org/x/text/unicode/norm/maketables.go b/vendor/golang.org/x/text/unicode/norm/maketables.go new file mode 100644 index 0000000..8d41816 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/maketables.go @@ -0,0 +1,976 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// Normalization table generator. +// Data read from the web. +// See forminfo.go for a description of the trie values associated with each rune. + +package main + +import ( + "bytes" + "flag" + "fmt" + "io" + "log" + "sort" + "strconv" + "strings" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/triegen" + "golang.org/x/text/internal/ucd" +) + +func main() { + gen.Init() + loadUnicodeData() + compactCCC() + loadCompositionExclusions() + completeCharFields(FCanonical) + completeCharFields(FCompatibility) + computeNonStarterCounts() + verifyComputed() + printChars() + testDerived() + printTestdata() + makeTables() +} + +var ( + tablelist = flag.String("tables", + "all", + "comma-separated list of which tables to generate; "+ + "can be 'decomp', 'recomp', 'info' and 'all'") + test = flag.Bool("test", + false, + "test existing tables against DerivedNormalizationProps and generate test data for regression testing") + verbose = flag.Bool("verbose", + false, + "write data to stdout as it is parsed") +) + +const MaxChar = 0x10FFFF // anything above this shouldn't exist + +// Quick Check properties of runes allow us to quickly +// determine whether a rune may occur in a normal form. +// For a given normal form, a rune may be guaranteed to occur +// verbatim (QC=Yes), may or may not combine with another +// rune (QC=Maybe), or may not occur (QC=No). +type QCResult int + +const ( + QCUnknown QCResult = iota + QCYes + QCNo + QCMaybe +) + +func (r QCResult) String() string { + switch r { + case QCYes: + return "Yes" + case QCNo: + return "No" + case QCMaybe: + return "Maybe" + } + return "***UNKNOWN***" +} + +const ( + FCanonical = iota // NFC or NFD + FCompatibility // NFKC or NFKD + FNumberOfFormTypes +) + +const ( + MComposed = iota // NFC or NFKC + MDecomposed // NFD or NFKD + MNumberOfModes +) + +// This contains only the properties we're interested in. +type Char struct { + name string + codePoint rune // if zero, this index is not a valid code point. + ccc uint8 // canonical combining class + origCCC uint8 + excludeInComp bool // from CompositionExclusions.txt + compatDecomp bool // it has a compatibility expansion + + nTrailingNonStarters uint8 + nLeadingNonStarters uint8 // must be equal to trailing if non-zero + + forms [FNumberOfFormTypes]FormInfo // For FCanonical and FCompatibility + + state State +} + +var chars = make([]Char, MaxChar+1) +var cccMap = make(map[uint8]uint8) + +func (c Char) String() string { + buf := new(bytes.Buffer) + + fmt.Fprintf(buf, "%U [%s]:\n", c.codePoint, c.name) + fmt.Fprintf(buf, " ccc: %v\n", c.ccc) + fmt.Fprintf(buf, " excludeInComp: %v\n", c.excludeInComp) + fmt.Fprintf(buf, " compatDecomp: %v\n", c.compatDecomp) + fmt.Fprintf(buf, " state: %v\n", c.state) + fmt.Fprintf(buf, " NFC:\n") + fmt.Fprint(buf, c.forms[FCanonical]) + fmt.Fprintf(buf, " NFKC:\n") + fmt.Fprint(buf, c.forms[FCompatibility]) + + return buf.String() +} + +// In UnicodeData.txt, some ranges are marked like this: +// 3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;; +// 4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;; +// parseCharacter keeps a state variable indicating the weirdness. +type State int + +const ( + SNormal State = iota // known to be zero for the type + SFirst + SLast + SMissing +) + +var lastChar = rune('\u0000') + +func (c Char) isValid() bool { + return c.codePoint != 0 && c.state != SMissing +} + +type FormInfo struct { + quickCheck [MNumberOfModes]QCResult // index: MComposed or MDecomposed + verified [MNumberOfModes]bool // index: MComposed or MDecomposed + + combinesForward bool // May combine with rune on the right + combinesBackward bool // May combine with rune on the left + isOneWay bool // Never appears in result + inDecomp bool // Some decompositions result in this char. + decomp Decomposition + expandedDecomp Decomposition +} + +func (f FormInfo) String() string { + buf := bytes.NewBuffer(make([]byte, 0)) + + fmt.Fprintf(buf, " quickCheck[C]: %v\n", f.quickCheck[MComposed]) + fmt.Fprintf(buf, " quickCheck[D]: %v\n", f.quickCheck[MDecomposed]) + fmt.Fprintf(buf, " cmbForward: %v\n", f.combinesForward) + fmt.Fprintf(buf, " cmbBackward: %v\n", f.combinesBackward) + fmt.Fprintf(buf, " isOneWay: %v\n", f.isOneWay) + fmt.Fprintf(buf, " inDecomp: %v\n", f.inDecomp) + fmt.Fprintf(buf, " decomposition: %X\n", f.decomp) + fmt.Fprintf(buf, " expandedDecomp: %X\n", f.expandedDecomp) + + return buf.String() +} + +type Decomposition []rune + +func parseDecomposition(s string, skipfirst bool) (a []rune, err error) { + decomp := strings.Split(s, " ") + if len(decomp) > 0 && skipfirst { + decomp = decomp[1:] + } + for _, d := range decomp { + point, err := strconv.ParseUint(d, 16, 64) + if err != nil { + return a, err + } + a = append(a, rune(point)) + } + return a, nil +} + +func loadUnicodeData() { + f := gen.OpenUCDFile("UnicodeData.txt") + defer f.Close() + p := ucd.New(f) + for p.Next() { + r := p.Rune(ucd.CodePoint) + char := &chars[r] + + char.ccc = uint8(p.Uint(ucd.CanonicalCombiningClass)) + decmap := p.String(ucd.DecompMapping) + + exp, err := parseDecomposition(decmap, false) + isCompat := false + if err != nil { + if len(decmap) > 0 { + exp, err = parseDecomposition(decmap, true) + if err != nil { + log.Fatalf(`%U: bad decomp |%v|: "%s"`, r, decmap, err) + } + isCompat = true + } + } + + char.name = p.String(ucd.Name) + char.codePoint = r + char.forms[FCompatibility].decomp = exp + if !isCompat { + char.forms[FCanonical].decomp = exp + } else { + char.compatDecomp = true + } + if len(decmap) > 0 { + char.forms[FCompatibility].decomp = exp + } + } + if err := p.Err(); err != nil { + log.Fatal(err) + } +} + +// compactCCC converts the sparse set of CCC values to a continguous one, +// reducing the number of bits needed from 8 to 6. +func compactCCC() { + m := make(map[uint8]uint8) + for i := range chars { + c := &chars[i] + m[c.ccc] = 0 + } + cccs := []int{} + for v, _ := range m { + cccs = append(cccs, int(v)) + } + sort.Ints(cccs) + for i, c := range cccs { + cccMap[uint8(i)] = uint8(c) + m[uint8(c)] = uint8(i) + } + for i := range chars { + c := &chars[i] + c.origCCC = c.ccc + c.ccc = m[c.ccc] + } + if len(m) >= 1<<6 { + log.Fatalf("too many difference CCC values: %d >= 64", len(m)) + } +} + +// CompositionExclusions.txt has form: +// 0958 # ... +// See http://unicode.org/reports/tr44/ for full explanation +func loadCompositionExclusions() { + f := gen.OpenUCDFile("CompositionExclusions.txt") + defer f.Close() + p := ucd.New(f) + for p.Next() { + c := &chars[p.Rune(0)] + if c.excludeInComp { + log.Fatalf("%U: Duplicate entry in exclusions.", c.codePoint) + } + c.excludeInComp = true + } + if e := p.Err(); e != nil { + log.Fatal(e) + } +} + +// hasCompatDecomp returns true if any of the recursive +// decompositions contains a compatibility expansion. +// In this case, the character may not occur in NFK*. +func hasCompatDecomp(r rune) bool { + c := &chars[r] + if c.compatDecomp { + return true + } + for _, d := range c.forms[FCompatibility].decomp { + if hasCompatDecomp(d) { + return true + } + } + return false +} + +// Hangul related constants. +const ( + HangulBase = 0xAC00 + HangulEnd = 0xD7A4 // hangulBase + Jamo combinations (19 * 21 * 28) + + JamoLBase = 0x1100 + JamoLEnd = 0x1113 + JamoVBase = 0x1161 + JamoVEnd = 0x1176 + JamoTBase = 0x11A8 + JamoTEnd = 0x11C3 + + JamoLVTCount = 19 * 21 * 28 + JamoTCount = 28 +) + +func isHangul(r rune) bool { + return HangulBase <= r && r < HangulEnd +} + +func isHangulWithoutJamoT(r rune) bool { + if !isHangul(r) { + return false + } + r -= HangulBase + return r < JamoLVTCount && r%JamoTCount == 0 +} + +func ccc(r rune) uint8 { + return chars[r].ccc +} + +// Insert a rune in a buffer, ordered by Canonical Combining Class. +func insertOrdered(b Decomposition, r rune) Decomposition { + n := len(b) + b = append(b, 0) + cc := ccc(r) + if cc > 0 { + // Use bubble sort. + for ; n > 0; n-- { + if ccc(b[n-1]) <= cc { + break + } + b[n] = b[n-1] + } + } + b[n] = r + return b +} + +// Recursively decompose. +func decomposeRecursive(form int, r rune, d Decomposition) Decomposition { + dcomp := chars[r].forms[form].decomp + if len(dcomp) == 0 { + return insertOrdered(d, r) + } + for _, c := range dcomp { + d = decomposeRecursive(form, c, d) + } + return d +} + +func completeCharFields(form int) { + // Phase 0: pre-expand decomposition. + for i := range chars { + f := &chars[i].forms[form] + if len(f.decomp) == 0 { + continue + } + exp := make(Decomposition, 0) + for _, c := range f.decomp { + exp = decomposeRecursive(form, c, exp) + } + f.expandedDecomp = exp + } + + // Phase 1: composition exclusion, mark decomposition. + for i := range chars { + c := &chars[i] + f := &c.forms[form] + + // Marks script-specific exclusions and version restricted. + f.isOneWay = c.excludeInComp + + // Singletons + f.isOneWay = f.isOneWay || len(f.decomp) == 1 + + // Non-starter decompositions + if len(f.decomp) > 1 { + chk := c.ccc != 0 || chars[f.decomp[0]].ccc != 0 + f.isOneWay = f.isOneWay || chk + } + + // Runes that decompose into more than two runes. + f.isOneWay = f.isOneWay || len(f.decomp) > 2 + + if form == FCompatibility { + f.isOneWay = f.isOneWay || hasCompatDecomp(c.codePoint) + } + + for _, r := range f.decomp { + chars[r].forms[form].inDecomp = true + } + } + + // Phase 2: forward and backward combining. + for i := range chars { + c := &chars[i] + f := &c.forms[form] + + if !f.isOneWay && len(f.decomp) == 2 { + f0 := &chars[f.decomp[0]].forms[form] + f1 := &chars[f.decomp[1]].forms[form] + if !f0.isOneWay { + f0.combinesForward = true + } + if !f1.isOneWay { + f1.combinesBackward = true + } + } + if isHangulWithoutJamoT(rune(i)) { + f.combinesForward = true + } + } + + // Phase 3: quick check values. + for i := range chars { + c := &chars[i] + f := &c.forms[form] + + switch { + case len(f.decomp) > 0: + f.quickCheck[MDecomposed] = QCNo + case isHangul(rune(i)): + f.quickCheck[MDecomposed] = QCNo + default: + f.quickCheck[MDecomposed] = QCYes + } + switch { + case f.isOneWay: + f.quickCheck[MComposed] = QCNo + case (i & 0xffff00) == JamoLBase: + f.quickCheck[MComposed] = QCYes + if JamoLBase <= i && i < JamoLEnd { + f.combinesForward = true + } + if JamoVBase <= i && i < JamoVEnd { + f.quickCheck[MComposed] = QCMaybe + f.combinesBackward = true + f.combinesForward = true + } + if JamoTBase <= i && i < JamoTEnd { + f.quickCheck[MComposed] = QCMaybe + f.combinesBackward = true + } + case !f.combinesBackward: + f.quickCheck[MComposed] = QCYes + default: + f.quickCheck[MComposed] = QCMaybe + } + } +} + +func computeNonStarterCounts() { + // Phase 4: leading and trailing non-starter count + for i := range chars { + c := &chars[i] + + runes := []rune{rune(i)} + // We always use FCompatibility so that the CGJ insertion points do not + // change for repeated normalizations with different forms. + if exp := c.forms[FCompatibility].expandedDecomp; len(exp) > 0 { + runes = exp + } + // We consider runes that combine backwards to be non-starters for the + // purpose of Stream-Safe Text Processing. + for _, r := range runes { + if cr := &chars[r]; cr.ccc == 0 && !cr.forms[FCompatibility].combinesBackward { + break + } + c.nLeadingNonStarters++ + } + for i := len(runes) - 1; i >= 0; i-- { + if cr := &chars[runes[i]]; cr.ccc == 0 && !cr.forms[FCompatibility].combinesBackward { + break + } + c.nTrailingNonStarters++ + } + if c.nTrailingNonStarters > 3 { + log.Fatalf("%U: Decomposition with more than 3 (%d) trailing modifiers (%U)", i, c.nTrailingNonStarters, runes) + } + + if isHangul(rune(i)) { + c.nTrailingNonStarters = 2 + if isHangulWithoutJamoT(rune(i)) { + c.nTrailingNonStarters = 1 + } + } + + if l, t := c.nLeadingNonStarters, c.nTrailingNonStarters; l > 0 && l != t { + log.Fatalf("%U: number of leading and trailing non-starters should be equal (%d vs %d)", i, l, t) + } + if t := c.nTrailingNonStarters; t > 3 { + log.Fatalf("%U: number of trailing non-starters is %d > 3", t) + } + } +} + +func printBytes(w io.Writer, b []byte, name string) { + fmt.Fprintf(w, "// %s: %d bytes\n", name, len(b)) + fmt.Fprintf(w, "var %s = [...]byte {", name) + for i, c := range b { + switch { + case i%64 == 0: + fmt.Fprintf(w, "\n// Bytes %x - %x\n", i, i+63) + case i%8 == 0: + fmt.Fprintf(w, "\n") + } + fmt.Fprintf(w, "0x%.2X, ", c) + } + fmt.Fprint(w, "\n}\n\n") +} + +// See forminfo.go for format. +func makeEntry(f *FormInfo, c *Char) uint16 { + e := uint16(0) + if r := c.codePoint; HangulBase <= r && r < HangulEnd { + e |= 0x40 + } + if f.combinesForward { + e |= 0x20 + } + if f.quickCheck[MDecomposed] == QCNo { + e |= 0x4 + } + switch f.quickCheck[MComposed] { + case QCYes: + case QCNo: + e |= 0x10 + case QCMaybe: + e |= 0x18 + default: + log.Fatalf("Illegal quickcheck value %v.", f.quickCheck[MComposed]) + } + e |= uint16(c.nTrailingNonStarters) + return e +} + +// decompSet keeps track of unique decompositions, grouped by whether +// the decomposition is followed by a trailing and/or leading CCC. +type decompSet [7]map[string]bool + +const ( + normalDecomp = iota + firstMulti + firstCCC + endMulti + firstLeadingCCC + firstCCCZeroExcept + firstStarterWithNLead + lastDecomp +) + +var cname = []string{"firstMulti", "firstCCC", "endMulti", "firstLeadingCCC", "firstCCCZeroExcept", "firstStarterWithNLead", "lastDecomp"} + +func makeDecompSet() decompSet { + m := decompSet{} + for i := range m { + m[i] = make(map[string]bool) + } + return m +} +func (m *decompSet) insert(key int, s string) { + m[key][s] = true +} + +func printCharInfoTables(w io.Writer) int { + mkstr := func(r rune, f *FormInfo) (int, string) { + d := f.expandedDecomp + s := string([]rune(d)) + if max := 1 << 6; len(s) >= max { + const msg = "%U: too many bytes in decomposition: %d >= %d" + log.Fatalf(msg, r, len(s), max) + } + head := uint8(len(s)) + if f.quickCheck[MComposed] != QCYes { + head |= 0x40 + } + if f.combinesForward { + head |= 0x80 + } + s = string([]byte{head}) + s + + lccc := ccc(d[0]) + tccc := ccc(d[len(d)-1]) + cc := ccc(r) + if cc != 0 && lccc == 0 && tccc == 0 { + log.Fatalf("%U: trailing and leading ccc are 0 for non-zero ccc %d", r, cc) + } + if tccc < lccc && lccc != 0 { + const msg = "%U: lccc (%d) must be <= tcc (%d)" + log.Fatalf(msg, r, lccc, tccc) + } + index := normalDecomp + nTrail := chars[r].nTrailingNonStarters + nLead := chars[r].nLeadingNonStarters + if tccc > 0 || lccc > 0 || nTrail > 0 { + tccc <<= 2 + tccc |= nTrail + s += string([]byte{tccc}) + index = endMulti + for _, r := range d[1:] { + if ccc(r) == 0 { + index = firstCCC + } + } + if lccc > 0 || nLead > 0 { + s += string([]byte{lccc}) + if index == firstCCC { + log.Fatalf("%U: multi-segment decomposition not supported for decompositions with leading CCC != 0", r) + } + index = firstLeadingCCC + } + if cc != lccc { + if cc != 0 { + log.Fatalf("%U: for lccc != ccc, expected ccc to be 0; was %d", r, cc) + } + index = firstCCCZeroExcept + } + } else if len(d) > 1 { + index = firstMulti + } + return index, s + } + + decompSet := makeDecompSet() + const nLeadStr = "\x00\x01" // 0-byte length and tccc with nTrail. + decompSet.insert(firstStarterWithNLead, nLeadStr) + + // Store the uniqued decompositions in a byte buffer, + // preceded by their byte length. + for _, c := range chars { + for _, f := range c.forms { + if len(f.expandedDecomp) == 0 { + continue + } + if f.combinesBackward { + log.Fatalf("%U: combinesBackward and decompose", c.codePoint) + } + index, s := mkstr(c.codePoint, &f) + decompSet.insert(index, s) + } + } + + decompositions := bytes.NewBuffer(make([]byte, 0, 10000)) + size := 0 + positionMap := make(map[string]uint16) + decompositions.WriteString("\000") + fmt.Fprintln(w, "const (") + for i, m := range decompSet { + sa := []string{} + for s := range m { + sa = append(sa, s) + } + sort.Strings(sa) + for _, s := range sa { + p := decompositions.Len() + decompositions.WriteString(s) + positionMap[s] = uint16(p) + } + if cname[i] != "" { + fmt.Fprintf(w, "%s = 0x%X\n", cname[i], decompositions.Len()) + } + } + fmt.Fprintln(w, "maxDecomp = 0x8000") + fmt.Fprintln(w, ")") + b := decompositions.Bytes() + printBytes(w, b, "decomps") + size += len(b) + + varnames := []string{"nfc", "nfkc"} + for i := 0; i < FNumberOfFormTypes; i++ { + trie := triegen.NewTrie(varnames[i]) + + for r, c := range chars { + f := c.forms[i] + d := f.expandedDecomp + if len(d) != 0 { + _, key := mkstr(c.codePoint, &f) + trie.Insert(rune(r), uint64(positionMap[key])) + if c.ccc != ccc(d[0]) { + // We assume the lead ccc of a decomposition !=0 in this case. + if ccc(d[0]) == 0 { + log.Fatalf("Expected leading CCC to be non-zero; ccc is %d", c.ccc) + } + } + } else if c.nLeadingNonStarters > 0 && len(f.expandedDecomp) == 0 && c.ccc == 0 && !f.combinesBackward { + // Handle cases where it can't be detected that the nLead should be equal + // to nTrail. + trie.Insert(c.codePoint, uint64(positionMap[nLeadStr])) + } else if v := makeEntry(&f, &c)<<8 | uint16(c.ccc); v != 0 { + trie.Insert(c.codePoint, uint64(0x8000|v)) + } + } + sz, err := trie.Gen(w, triegen.Compact(&normCompacter{name: varnames[i]})) + if err != nil { + log.Fatal(err) + } + size += sz + } + return size +} + +func contains(sa []string, s string) bool { + for _, a := range sa { + if a == s { + return true + } + } + return false +} + +func makeTables() { + w := &bytes.Buffer{} + + size := 0 + if *tablelist == "" { + return + } + list := strings.Split(*tablelist, ",") + if *tablelist == "all" { + list = []string{"recomp", "info"} + } + + // Compute maximum decomposition size. + max := 0 + for _, c := range chars { + if n := len(string(c.forms[FCompatibility].expandedDecomp)); n > max { + max = n + } + } + + fmt.Fprintln(w, "const (") + fmt.Fprintln(w, "\t// Version is the Unicode edition from which the tables are derived.") + fmt.Fprintf(w, "\tVersion = %q\n", gen.UnicodeVersion()) + fmt.Fprintln(w) + fmt.Fprintln(w, "\t// MaxTransformChunkSize indicates the maximum number of bytes that Transform") + fmt.Fprintln(w, "\t// may need to write atomically for any Form. Making a destination buffer at") + fmt.Fprintln(w, "\t// least this size ensures that Transform can always make progress and that") + fmt.Fprintln(w, "\t// the user does not need to grow the buffer on an ErrShortDst.") + fmt.Fprintf(w, "\tMaxTransformChunkSize = %d+maxNonStarters*4\n", len(string(0x034F))+max) + fmt.Fprintln(w, ")\n") + + // Print the CCC remap table. + size += len(cccMap) + fmt.Fprintf(w, "var ccc = [%d]uint8{", len(cccMap)) + for i := 0; i < len(cccMap); i++ { + if i%8 == 0 { + fmt.Fprintln(w) + } + fmt.Fprintf(w, "%3d, ", cccMap[uint8(i)]) + } + fmt.Fprintln(w, "\n}\n") + + if contains(list, "info") { + size += printCharInfoTables(w) + } + + if contains(list, "recomp") { + // Note that we use 32 bit keys, instead of 64 bit. + // This clips the bits of three entries, but we know + // this won't cause a collision. The compiler will catch + // any changes made to UnicodeData.txt that introduces + // a collision. + // Note that the recomposition map for NFC and NFKC + // are identical. + + // Recomposition map + nrentries := 0 + for _, c := range chars { + f := c.forms[FCanonical] + if !f.isOneWay && len(f.decomp) > 0 { + nrentries++ + } + } + sz := nrentries * 8 + size += sz + fmt.Fprintf(w, "// recompMap: %d bytes (entries only)\n", sz) + fmt.Fprintln(w, "var recompMap = map[uint32]rune{") + for i, c := range chars { + f := c.forms[FCanonical] + d := f.decomp + if !f.isOneWay && len(d) > 0 { + key := uint32(uint16(d[0]))<<16 + uint32(uint16(d[1])) + fmt.Fprintf(w, "0x%.8X: 0x%.4X,\n", key, i) + } + } + fmt.Fprintf(w, "}\n\n") + } + + fmt.Fprintf(w, "// Total size of tables: %dKB (%d bytes)\n", (size+512)/1024, size) + gen.WriteGoFile("tables.go", "norm", w.Bytes()) +} + +func printChars() { + if *verbose { + for _, c := range chars { + if !c.isValid() || c.state == SMissing { + continue + } + fmt.Println(c) + } + } +} + +// verifyComputed does various consistency tests. +func verifyComputed() { + for i, c := range chars { + for _, f := range c.forms { + isNo := (f.quickCheck[MDecomposed] == QCNo) + if (len(f.decomp) > 0) != isNo && !isHangul(rune(i)) { + log.Fatalf("%U: NF*D QC must be No if rune decomposes", i) + } + + isMaybe := f.quickCheck[MComposed] == QCMaybe + if f.combinesBackward != isMaybe { + log.Fatalf("%U: NF*C QC must be Maybe if combinesBackward", i) + } + if len(f.decomp) > 0 && f.combinesForward && isMaybe { + log.Fatalf("%U: NF*C QC must be Yes or No if combinesForward and decomposes", i) + } + + if len(f.expandedDecomp) != 0 { + continue + } + if a, b := c.nLeadingNonStarters > 0, (c.ccc > 0 || f.combinesBackward); a != b { + // We accept these runes to be treated differently (it only affects + // segment breaking in iteration, most likely on improper use), but + // reconsider if more characters are added. + // U+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;; + // U+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;; + // U+3133 HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; + // U+318E HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;; + // U+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; + // U+FFDC HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;; + if i != 0xFF9E && i != 0xFF9F && !(0x3133 <= i && i <= 0x318E) && !(0xFFA3 <= i && i <= 0xFFDC) { + log.Fatalf("%U: nLead was %v; want %v", i, a, b) + } + } + } + nfc := c.forms[FCanonical] + nfkc := c.forms[FCompatibility] + if nfc.combinesBackward != nfkc.combinesBackward { + log.Fatalf("%U: Cannot combine combinesBackward\n", c.codePoint) + } + } +} + +// Use values in DerivedNormalizationProps.txt to compare against the +// values we computed. +// DerivedNormalizationProps.txt has form: +// 00C0..00C5 ; NFD_QC; N # ... +// 0374 ; NFD_QC; N # ... +// See http://unicode.org/reports/tr44/ for full explanation +func testDerived() { + f := gen.OpenUCDFile("DerivedNormalizationProps.txt") + defer f.Close() + p := ucd.New(f) + for p.Next() { + r := p.Rune(0) + c := &chars[r] + + var ftype, mode int + qt := p.String(1) + switch qt { + case "NFC_QC": + ftype, mode = FCanonical, MComposed + case "NFD_QC": + ftype, mode = FCanonical, MDecomposed + case "NFKC_QC": + ftype, mode = FCompatibility, MComposed + case "NFKD_QC": + ftype, mode = FCompatibility, MDecomposed + default: + continue + } + var qr QCResult + switch p.String(2) { + case "Y": + qr = QCYes + case "N": + qr = QCNo + case "M": + qr = QCMaybe + default: + log.Fatalf(`Unexpected quick check value "%s"`, p.String(2)) + } + if got := c.forms[ftype].quickCheck[mode]; got != qr { + log.Printf("%U: FAILED %s (was %v need %v)\n", r, qt, got, qr) + } + c.forms[ftype].verified[mode] = true + } + if err := p.Err(); err != nil { + log.Fatal(err) + } + // Any unspecified value must be QCYes. Verify this. + for i, c := range chars { + for j, fd := range c.forms { + for k, qr := range fd.quickCheck { + if !fd.verified[k] && qr != QCYes { + m := "%U: FAIL F:%d M:%d (was %v need Yes) %s\n" + log.Printf(m, i, j, k, qr, c.name) + } + } + } + } +} + +var testHeader = `const ( + Yes = iota + No + Maybe +) + +type formData struct { + qc uint8 + combinesForward bool + decomposition string +} + +type runeData struct { + r rune + ccc uint8 + nLead uint8 + nTrail uint8 + f [2]formData // 0: canonical; 1: compatibility +} + +func f(qc uint8, cf bool, dec string) [2]formData { + return [2]formData{{qc, cf, dec}, {qc, cf, dec}} +} + +func g(qc, qck uint8, cf, cfk bool, d, dk string) [2]formData { + return [2]formData{{qc, cf, d}, {qck, cfk, dk}} +} + +var testData = []runeData{ +` + +func printTestdata() { + type lastInfo struct { + ccc uint8 + nLead uint8 + nTrail uint8 + f string + } + + last := lastInfo{} + w := &bytes.Buffer{} + fmt.Fprintf(w, testHeader) + for r, c := range chars { + f := c.forms[FCanonical] + qc, cf, d := f.quickCheck[MComposed], f.combinesForward, string(f.expandedDecomp) + f = c.forms[FCompatibility] + qck, cfk, dk := f.quickCheck[MComposed], f.combinesForward, string(f.expandedDecomp) + s := "" + if d == dk && qc == qck && cf == cfk { + s = fmt.Sprintf("f(%s, %v, %q)", qc, cf, d) + } else { + s = fmt.Sprintf("g(%s, %s, %v, %v, %q, %q)", qc, qck, cf, cfk, d, dk) + } + current := lastInfo{c.ccc, c.nLeadingNonStarters, c.nTrailingNonStarters, s} + if last != current { + fmt.Fprintf(w, "\t{0x%x, %d, %d, %d, %s},\n", r, c.origCCC, c.nLeadingNonStarters, c.nTrailingNonStarters, s) + last = current + } + } + fmt.Fprintln(w, "}") + gen.WriteGoFile("data_test.go", "norm", w.Bytes()) +} diff --git a/vendor/golang.org/x/text/unicode/norm/norm_test.go b/vendor/golang.org/x/text/unicode/norm/norm_test.go new file mode 100644 index 0000000..12dacfc --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/norm_test.go @@ -0,0 +1,14 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm_test + +import ( + "testing" +) + +func TestPlaceHolder(t *testing.T) { + // Does nothing, just allows the Makefile to be canonical + // while waiting for the package itself to be written. +} diff --git a/vendor/golang.org/x/text/unicode/norm/normalize.go b/vendor/golang.org/x/text/unicode/norm/normalize.go new file mode 100644 index 0000000..d3f2069 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/normalize.go @@ -0,0 +1,609 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Note: the file data_test.go that is generated should not be checked in. +//go:generate go run maketables.go triegen.go +//go:generate go test -tags test + +// Package norm contains types and functions for normalizing Unicode strings. +package norm // import "golang.org/x/text/unicode/norm" + +import ( + "unicode/utf8" + + "golang.org/x/text/transform" +) + +// A Form denotes a canonical representation of Unicode code points. +// The Unicode-defined normalization and equivalence forms are: +// +// NFC Unicode Normalization Form C +// NFD Unicode Normalization Form D +// NFKC Unicode Normalization Form KC +// NFKD Unicode Normalization Form KD +// +// For a Form f, this documentation uses the notation f(x) to mean +// the bytes or string x converted to the given form. +// A position n in x is called a boundary if conversion to the form can +// proceed independently on both sides: +// f(x) == append(f(x[0:n]), f(x[n:])...) +// +// References: http://unicode.org/reports/tr15/ and +// http://unicode.org/notes/tn5/. +type Form int + +const ( + NFC Form = iota + NFD + NFKC + NFKD +) + +// Bytes returns f(b). May return b if f(b) = b. +func (f Form) Bytes(b []byte) []byte { + src := inputBytes(b) + ft := formTable[f] + n, ok := ft.quickSpan(src, 0, len(b), true) + if ok { + return b + } + out := make([]byte, n, len(b)) + copy(out, b[0:n]) + rb := reorderBuffer{f: *ft, src: src, nsrc: len(b), out: out, flushF: appendFlush} + return doAppendInner(&rb, n) +} + +// String returns f(s). +func (f Form) String(s string) string { + src := inputString(s) + ft := formTable[f] + n, ok := ft.quickSpan(src, 0, len(s), true) + if ok { + return s + } + out := make([]byte, n, len(s)) + copy(out, s[0:n]) + rb := reorderBuffer{f: *ft, src: src, nsrc: len(s), out: out, flushF: appendFlush} + return string(doAppendInner(&rb, n)) +} + +// IsNormal returns true if b == f(b). +func (f Form) IsNormal(b []byte) bool { + src := inputBytes(b) + ft := formTable[f] + bp, ok := ft.quickSpan(src, 0, len(b), true) + if ok { + return true + } + rb := reorderBuffer{f: *ft, src: src, nsrc: len(b)} + rb.setFlusher(nil, cmpNormalBytes) + for bp < len(b) { + rb.out = b[bp:] + if bp = decomposeSegment(&rb, bp, true); bp < 0 { + return false + } + bp, _ = rb.f.quickSpan(rb.src, bp, len(b), true) + } + return true +} + +func cmpNormalBytes(rb *reorderBuffer) bool { + b := rb.out + for i := 0; i < rb.nrune; i++ { + info := rb.rune[i] + if int(info.size) > len(b) { + return false + } + p := info.pos + pe := p + info.size + for ; p < pe; p++ { + if b[0] != rb.byte[p] { + return false + } + b = b[1:] + } + } + return true +} + +// IsNormalString returns true if s == f(s). +func (f Form) IsNormalString(s string) bool { + src := inputString(s) + ft := formTable[f] + bp, ok := ft.quickSpan(src, 0, len(s), true) + if ok { + return true + } + rb := reorderBuffer{f: *ft, src: src, nsrc: len(s)} + rb.setFlusher(nil, func(rb *reorderBuffer) bool { + for i := 0; i < rb.nrune; i++ { + info := rb.rune[i] + if bp+int(info.size) > len(s) { + return false + } + p := info.pos + pe := p + info.size + for ; p < pe; p++ { + if s[bp] != rb.byte[p] { + return false + } + bp++ + } + } + return true + }) + for bp < len(s) { + if bp = decomposeSegment(&rb, bp, true); bp < 0 { + return false + } + bp, _ = rb.f.quickSpan(rb.src, bp, len(s), true) + } + return true +} + +// patchTail fixes a case where a rune may be incorrectly normalized +// if it is followed by illegal continuation bytes. It returns the +// patched buffer and whether the decomposition is still in progress. +func patchTail(rb *reorderBuffer) bool { + info, p := lastRuneStart(&rb.f, rb.out) + if p == -1 || info.size == 0 { + return true + } + end := p + int(info.size) + extra := len(rb.out) - end + if extra > 0 { + // Potentially allocating memory. However, this only + // happens with ill-formed UTF-8. + x := make([]byte, 0) + x = append(x, rb.out[len(rb.out)-extra:]...) + rb.out = rb.out[:end] + decomposeToLastBoundary(rb) + rb.doFlush() + rb.out = append(rb.out, x...) + return false + } + buf := rb.out[p:] + rb.out = rb.out[:p] + decomposeToLastBoundary(rb) + if s := rb.ss.next(info); s == ssStarter { + rb.doFlush() + rb.ss.first(info) + } else if s == ssOverflow { + rb.doFlush() + rb.insertCGJ() + rb.ss = 0 + } + rb.insertUnsafe(inputBytes(buf), 0, info) + return true +} + +func appendQuick(rb *reorderBuffer, i int) int { + if rb.nsrc == i { + return i + } + end, _ := rb.f.quickSpan(rb.src, i, rb.nsrc, true) + rb.out = rb.src.appendSlice(rb.out, i, end) + return end +} + +// Append returns f(append(out, b...)). +// The buffer out must be nil, empty, or equal to f(out). +func (f Form) Append(out []byte, src ...byte) []byte { + return f.doAppend(out, inputBytes(src), len(src)) +} + +func (f Form) doAppend(out []byte, src input, n int) []byte { + if n == 0 { + return out + } + ft := formTable[f] + // Attempt to do a quickSpan first so we can avoid initializing the reorderBuffer. + if len(out) == 0 { + p, _ := ft.quickSpan(src, 0, n, true) + out = src.appendSlice(out, 0, p) + if p == n { + return out + } + rb := reorderBuffer{f: *ft, src: src, nsrc: n, out: out, flushF: appendFlush} + return doAppendInner(&rb, p) + } + rb := reorderBuffer{f: *ft, src: src, nsrc: n} + return doAppend(&rb, out, 0) +} + +func doAppend(rb *reorderBuffer, out []byte, p int) []byte { + rb.setFlusher(out, appendFlush) + src, n := rb.src, rb.nsrc + doMerge := len(out) > 0 + if q := src.skipContinuationBytes(p); q > p { + // Move leading non-starters to destination. + rb.out = src.appendSlice(rb.out, p, q) + p = q + doMerge = patchTail(rb) + } + fd := &rb.f + if doMerge { + var info Properties + if p < n { + info = fd.info(src, p) + if !info.BoundaryBefore() || info.nLeadingNonStarters() > 0 { + if p == 0 { + decomposeToLastBoundary(rb) + } + p = decomposeSegment(rb, p, true) + } + } + if info.size == 0 { + rb.doFlush() + // Append incomplete UTF-8 encoding. + return src.appendSlice(rb.out, p, n) + } + if rb.nrune > 0 { + return doAppendInner(rb, p) + } + } + p = appendQuick(rb, p) + return doAppendInner(rb, p) +} + +func doAppendInner(rb *reorderBuffer, p int) []byte { + for n := rb.nsrc; p < n; { + p = decomposeSegment(rb, p, true) + p = appendQuick(rb, p) + } + return rb.out +} + +// AppendString returns f(append(out, []byte(s))). +// The buffer out must be nil, empty, or equal to f(out). +func (f Form) AppendString(out []byte, src string) []byte { + return f.doAppend(out, inputString(src), len(src)) +} + +// QuickSpan returns a boundary n such that b[0:n] == f(b[0:n]). +// It is not guaranteed to return the largest such n. +func (f Form) QuickSpan(b []byte) int { + n, _ := formTable[f].quickSpan(inputBytes(b), 0, len(b), true) + return n +} + +// Span implements transform.SpanningTransformer. It returns a boundary n such +// that b[0:n] == f(b[0:n]). It is not guaranteed to return the largest such n. +func (f Form) Span(b []byte, atEOF bool) (n int, err error) { + n, ok := formTable[f].quickSpan(inputBytes(b), 0, len(b), atEOF) + if n < len(b) { + if !ok { + err = transform.ErrEndOfSpan + } else { + err = transform.ErrShortSrc + } + } + return n, err +} + +// SpanString returns a boundary n such that s[0:n] == f(s[0:n]). +// It is not guaranteed to return the largest such n. +func (f Form) SpanString(s string, atEOF bool) (n int, err error) { + n, ok := formTable[f].quickSpan(inputString(s), 0, len(s), atEOF) + if n < len(s) { + if !ok { + err = transform.ErrEndOfSpan + } else { + err = transform.ErrShortSrc + } + } + return n, err +} + +// quickSpan returns a boundary n such that src[0:n] == f(src[0:n]) and +// whether any non-normalized parts were found. If atEOF is false, n will +// not point past the last segment if this segment might be become +// non-normalized by appending other runes. +func (f *formInfo) quickSpan(src input, i, end int, atEOF bool) (n int, ok bool) { + var lastCC uint8 + ss := streamSafe(0) + lastSegStart := i + for n = end; i < n; { + if j := src.skipASCII(i, n); i != j { + i = j + lastSegStart = i - 1 + lastCC = 0 + ss = 0 + continue + } + info := f.info(src, i) + if info.size == 0 { + if atEOF { + // include incomplete runes + return n, true + } + return lastSegStart, true + } + // This block needs to be before the next, because it is possible to + // have an overflow for runes that are starters (e.g. with U+FF9E). + switch ss.next(info) { + case ssStarter: + ss.first(info) + lastSegStart = i + case ssOverflow: + return lastSegStart, false + case ssSuccess: + if lastCC > info.ccc { + return lastSegStart, false + } + } + if f.composing { + if !info.isYesC() { + break + } + } else { + if !info.isYesD() { + break + } + } + lastCC = info.ccc + i += int(info.size) + } + if i == n { + if !atEOF { + n = lastSegStart + } + return n, true + } + return lastSegStart, false +} + +// QuickSpanString returns a boundary n such that s[0:n] == f(s[0:n]). +// It is not guaranteed to return the largest such n. +func (f Form) QuickSpanString(s string) int { + n, _ := formTable[f].quickSpan(inputString(s), 0, len(s), true) + return n +} + +// FirstBoundary returns the position i of the first boundary in b +// or -1 if b contains no boundary. +func (f Form) FirstBoundary(b []byte) int { + return f.firstBoundary(inputBytes(b), len(b)) +} + +func (f Form) firstBoundary(src input, nsrc int) int { + i := src.skipContinuationBytes(0) + if i >= nsrc { + return -1 + } + fd := formTable[f] + ss := streamSafe(0) + // We should call ss.first here, but we can't as the first rune is + // skipped already. This means FirstBoundary can't really determine + // CGJ insertion points correctly. Luckily it doesn't have to. + for { + info := fd.info(src, i) + if info.size == 0 { + return -1 + } + if s := ss.next(info); s != ssSuccess { + return i + } + i += int(info.size) + if i >= nsrc { + if !info.BoundaryAfter() && !ss.isMax() { + return -1 + } + return nsrc + } + } +} + +// FirstBoundaryInString returns the position i of the first boundary in s +// or -1 if s contains no boundary. +func (f Form) FirstBoundaryInString(s string) int { + return f.firstBoundary(inputString(s), len(s)) +} + +// NextBoundary reports the index of the boundary between the first and next +// segment in b or -1 if atEOF is false and there are not enough bytes to +// determine this boundary. +func (f Form) NextBoundary(b []byte, atEOF bool) int { + return f.nextBoundary(inputBytes(b), len(b), atEOF) +} + +// NextBoundaryInString reports the index of the boundary between the first and +// next segment in b or -1 if atEOF is false and there are not enough bytes to +// determine this boundary. +func (f Form) NextBoundaryInString(s string, atEOF bool) int { + return f.nextBoundary(inputString(s), len(s), atEOF) +} + +func (f Form) nextBoundary(src input, nsrc int, atEOF bool) int { + if nsrc == 0 { + if atEOF { + return 0 + } + return -1 + } + fd := formTable[f] + info := fd.info(src, 0) + if info.size == 0 { + if atEOF { + return 1 + } + return -1 + } + ss := streamSafe(0) + ss.first(info) + + for i := int(info.size); i < nsrc; i += int(info.size) { + info = fd.info(src, i) + if info.size == 0 { + if atEOF { + return i + } + return -1 + } + if s := ss.next(info); s != ssSuccess { + return i + } + } + if !atEOF && !info.BoundaryAfter() && !ss.isMax() { + return -1 + } + return nsrc +} + +// LastBoundary returns the position i of the last boundary in b +// or -1 if b contains no boundary. +func (f Form) LastBoundary(b []byte) int { + return lastBoundary(formTable[f], b) +} + +func lastBoundary(fd *formInfo, b []byte) int { + i := len(b) + info, p := lastRuneStart(fd, b) + if p == -1 { + return -1 + } + if info.size == 0 { // ends with incomplete rune + if p == 0 { // starts with incomplete rune + return -1 + } + i = p + info, p = lastRuneStart(fd, b[:i]) + if p == -1 { // incomplete UTF-8 encoding or non-starter bytes without a starter + return i + } + } + if p+int(info.size) != i { // trailing non-starter bytes: illegal UTF-8 + return i + } + if info.BoundaryAfter() { + return i + } + ss := streamSafe(0) + v := ss.backwards(info) + for i = p; i >= 0 && v != ssStarter; i = p { + info, p = lastRuneStart(fd, b[:i]) + if v = ss.backwards(info); v == ssOverflow { + break + } + if p+int(info.size) != i { + if p == -1 { // no boundary found + return -1 + } + return i // boundary after an illegal UTF-8 encoding + } + } + return i +} + +// decomposeSegment scans the first segment in src into rb. It inserts 0x034f +// (Grapheme Joiner) when it encounters a sequence of more than 30 non-starters +// and returns the number of bytes consumed from src or iShortDst or iShortSrc. +func decomposeSegment(rb *reorderBuffer, sp int, atEOF bool) int { + // Force one character to be consumed. + info := rb.f.info(rb.src, sp) + if info.size == 0 { + return 0 + } + if rb.nrune > 0 { + if s := rb.ss.next(info); s == ssStarter { + goto end + } else if s == ssOverflow { + rb.insertCGJ() + goto end + } + } else { + rb.ss.first(info) + } + if err := rb.insertFlush(rb.src, sp, info); err != iSuccess { + return int(err) + } + for { + sp += int(info.size) + if sp >= rb.nsrc { + if !atEOF && !info.BoundaryAfter() { + return int(iShortSrc) + } + break + } + info = rb.f.info(rb.src, sp) + if info.size == 0 { + if !atEOF { + return int(iShortSrc) + } + break + } + if s := rb.ss.next(info); s == ssStarter { + break + } else if s == ssOverflow { + rb.insertCGJ() + break + } + if err := rb.insertFlush(rb.src, sp, info); err != iSuccess { + return int(err) + } + } +end: + if !rb.doFlush() { + return int(iShortDst) + } + return sp +} + +// lastRuneStart returns the runeInfo and position of the last +// rune in buf or the zero runeInfo and -1 if no rune was found. +func lastRuneStart(fd *formInfo, buf []byte) (Properties, int) { + p := len(buf) - 1 + for ; p >= 0 && !utf8.RuneStart(buf[p]); p-- { + } + if p < 0 { + return Properties{}, -1 + } + return fd.info(inputBytes(buf), p), p +} + +// decomposeToLastBoundary finds an open segment at the end of the buffer +// and scans it into rb. Returns the buffer minus the last segment. +func decomposeToLastBoundary(rb *reorderBuffer) { + fd := &rb.f + info, i := lastRuneStart(fd, rb.out) + if int(info.size) != len(rb.out)-i { + // illegal trailing continuation bytes + return + } + if info.BoundaryAfter() { + return + } + var add [maxNonStarters + 1]Properties // stores runeInfo in reverse order + padd := 0 + ss := streamSafe(0) + p := len(rb.out) + for { + add[padd] = info + v := ss.backwards(info) + if v == ssOverflow { + // Note that if we have an overflow, it the string we are appending to + // is not correctly normalized. In this case the behavior is undefined. + break + } + padd++ + p -= int(info.size) + if v == ssStarter || p < 0 { + break + } + info, i = lastRuneStart(fd, rb.out[:p]) + if int(info.size) != p-i { + break + } + } + rb.ss = ss + // Copy bytes for insertion as we may need to overwrite rb.out. + var buf [maxBufferSize * utf8.UTFMax]byte + cp := buf[:copy(buf[:], rb.out[p:])] + rb.out = rb.out[:p] + for padd--; padd >= 0; padd-- { + info = add[padd] + rb.insertUnsafe(inputBytes(cp), 0, info) + cp = cp[info.size:] + } +} diff --git a/vendor/golang.org/x/text/unicode/norm/normalize_test.go b/vendor/golang.org/x/text/unicode/norm/normalize_test.go new file mode 100644 index 0000000..ffa1034 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/normalize_test.go @@ -0,0 +1,1245 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import ( + "bytes" + "flag" + "fmt" + "io" + "log" + "strings" + "testing" + "unicode/utf8" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/transform" +) + +var ( + testn = flag.Int("testn", -1, "specific test number to run or -1 for all") +) + +// pc replaces any rune r that is repeated n times, for n > 1, with r{n}. +func pc(s string) []byte { + b := bytes.NewBuffer(make([]byte, 0, len(s))) + for i := 0; i < len(s); { + r, sz := utf8.DecodeRuneInString(s[i:]) + n := 0 + if sz == 1 { + // Special-case one-byte case to handle repetition for invalid UTF-8. + for c := s[i]; i+n < len(s) && s[i+n] == c; n++ { + } + } else { + for _, r2 := range s[i:] { + if r2 != r { + break + } + n++ + } + } + b.WriteString(s[i : i+sz]) + if n > 1 { + fmt.Fprintf(b, "{%d}", n) + } + i += sz * n + } + return b.Bytes() +} + +// pidx finds the index from which two strings start to differ, plus context. +// It returns the index and ellipsis if the index is greater than 0. +func pidx(a, b string) (i int, prefix string) { + for ; i < len(a) && i < len(b) && a[i] == b[i]; i++ { + } + if i < 8 { + return 0, "" + } + i -= 3 // ensure taking at least one full rune before the difference. + for k := i - 7; i > k && !utf8.RuneStart(a[i]); i-- { + } + return i, "..." +} + +type PositionTest struct { + input string + pos int + buffer string // expected contents of reorderBuffer, if applicable +} + +type positionFunc func(rb *reorderBuffer, s string) (int, []byte) + +func runPosTests(t *testing.T, name string, f Form, fn positionFunc, tests []PositionTest) { + rb := reorderBuffer{} + rb.init(f, nil) + for i, test := range tests { + rb.reset() + rb.src = inputString(test.input) + rb.nsrc = len(test.input) + pos, out := fn(&rb, test.input) + if pos != test.pos { + t.Errorf("%s:%d: position is %d; want %d", name, i, pos, test.pos) + } + if outs := string(out); outs != test.buffer { + k, pfx := pidx(outs, test.buffer) + t.Errorf("%s:%d: buffer \nwas %s%+q; \nwant %s%+q", name, i, pfx, pc(outs[k:]), pfx, pc(test.buffer[k:])) + } + } +} + +func grave(n int) string { + return rep(0x0300, n) +} + +func rep(r rune, n int) string { + return strings.Repeat(string(r), n) +} + +const segSize = maxByteBufferSize + +var cgj = GraphemeJoiner + +var decomposeSegmentTests = []PositionTest{ + // illegal runes + {"\xC2", 0, ""}, + {"\xC0", 1, "\xC0"}, + {"\u00E0\x80", 2, "\u0061\u0300"}, + // starter + {"a", 1, "a"}, + {"ab", 1, "a"}, + // starter + composing + {"a\u0300", 3, "a\u0300"}, + {"a\u0300b", 3, "a\u0300"}, + // with decomposition + {"\u00C0", 2, "A\u0300"}, + {"\u00C0b", 2, "A\u0300"}, + // long + {grave(31), 60, grave(30) + cgj}, + {"a" + grave(31), 61, "a" + grave(30) + cgj}, + + // Stability tests: see http://www.unicode.org/review/pr-29.html. + // U+0300 COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;;;; + // U+0B47 ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; + // U+0B3E ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; + // U+1100 HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;; + // U+1161 HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; + {"\u0B47\u0300\u0B3E", 8, "\u0B47\u0300\u0B3E"}, + {"\u1100\u0300\u1161", 8, "\u1100\u0300\u1161"}, + {"\u0B47\u0B3E", 6, "\u0B47\u0B3E"}, + {"\u1100\u1161", 6, "\u1100\u1161"}, + + // U+04DA MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; + // Sequence of decomposing characters that are starters and modifiers. + {"\u0d4a" + strings.Repeat("\u0d3e", 31), 90, "\u0d46" + strings.Repeat("\u0d3e", 30) + cgj}, + + {grave(30), 60, grave(30)}, + // U+FF9E is a starter, but decomposes to U+3099, which is not. + {grave(30) + "\uff9e", 60, grave(30) + cgj}, + // ends with incomplete UTF-8 encoding + {"\xCC", 0, ""}, + {"\u0300\xCC", 2, "\u0300"}, +} + +func decomposeSegmentF(rb *reorderBuffer, s string) (int, []byte) { + rb.initString(NFD, s) + rb.setFlusher(nil, appendFlush) + p := decomposeSegment(rb, 0, true) + return p, rb.out +} + +func TestDecomposeSegment(t *testing.T) { + runPosTests(t, "TestDecomposeSegment", NFC, decomposeSegmentF, decomposeSegmentTests) +} + +var firstBoundaryTests = []PositionTest{ + // no boundary + {"", -1, ""}, + {"\u0300", -1, ""}, + {"\x80\x80", -1, ""}, + // illegal runes + {"\xff", 0, ""}, + {"\u0300\xff", 2, ""}, + {"\u0300\xc0\x80\x80", 2, ""}, + // boundaries + {"a", 0, ""}, + {"\u0300a", 2, ""}, + // Hangul + {"\u1103\u1161", 0, ""}, + {"\u110B\u1173\u11B7", 0, ""}, + {"\u1161\u110B\u1173\u11B7", 3, ""}, + {"\u1173\u11B7\u1103\u1161", 6, ""}, + // too many combining characters. + {grave(maxNonStarters - 1), -1, ""}, + {grave(maxNonStarters), 60, ""}, + {grave(maxNonStarters + 1), 60, ""}, +} + +func firstBoundaryF(rb *reorderBuffer, s string) (int, []byte) { + return rb.f.form.FirstBoundary([]byte(s)), nil +} + +func firstBoundaryStringF(rb *reorderBuffer, s string) (int, []byte) { + return rb.f.form.FirstBoundaryInString(s), nil +} + +func TestFirstBoundary(t *testing.T) { + runPosTests(t, "TestFirstBoundary", NFC, firstBoundaryF, firstBoundaryTests) + runPosTests(t, "TestFirstBoundaryInString", NFC, firstBoundaryStringF, firstBoundaryTests) +} + +func TestNextBoundary(t *testing.T) { + testCases := []struct { + input string + atEOF bool + want int + }{ + // no boundary + {"", true, 0}, + {"", false, -1}, + {"\u0300", true, 2}, + {"\u0300", false, -1}, + {"\x80\x80", true, 1}, + {"\x80\x80", false, 1}, + // illegal runes + {"\xff", false, 1}, + {"\u0300\xff", false, 2}, + {"\u0300\xc0\x80\x80", false, 2}, + {"\xc2\x80\x80", false, 2}, + {"\xc2", false, -1}, + {"\xc2", true, 1}, + {"a\u0300\xc2", false, -1}, + {"a\u0300\xc2", true, 3}, + // boundaries + {"a", true, 1}, + {"a", false, -1}, + {"aa", false, 1}, + {"\u0300", true, 2}, + {"\u0300", false, -1}, + {"\u0300a", false, 2}, + // Hangul + {"\u1103\u1161", true, 6}, + {"\u1103\u1161", false, -1}, + {"\u110B\u1173\u11B7", false, -1}, + {"\u110B\u1173\u11B7\u110B\u1173\u11B7", false, 9}, + {"\u1161\u110B\u1173\u11B7", false, 3}, + {"\u1173\u11B7\u1103\u1161", false, 6}, + // too many combining characters. + {grave(maxNonStarters - 1), false, -1}, + {grave(maxNonStarters), false, 60}, + {grave(maxNonStarters + 1), false, 60}, + } + + for _, tc := range testCases { + if got := NFC.NextBoundary([]byte(tc.input), tc.atEOF); got != tc.want { + t.Errorf("NextBoundary(%+q, %v) = %d; want %d", tc.input, tc.atEOF, got, tc.want) + } + if got := NFC.NextBoundaryInString(tc.input, tc.atEOF); got != tc.want { + t.Errorf("NextBoundaryInString(%+q, %v) = %d; want %d", tc.input, tc.atEOF, got, tc.want) + } + } +} + +var decomposeToLastTests = []PositionTest{ + // ends with inert character + {"Hello!", 6, ""}, + {"\u0632", 2, ""}, + {"a\u0301\u0635", 5, ""}, + // ends with non-inert starter + {"a", 0, "a"}, + {"a\u0301a", 3, "a"}, + {"a\u0301\u03B9", 3, "\u03B9"}, + {"a\u0327", 0, "a\u0327"}, + // illegal runes + {"\xFF", 1, ""}, + {"aa\xFF", 3, ""}, + {"\xC0\x80\x80", 3, ""}, + {"\xCC\x80\x80", 3, ""}, + // ends with incomplete UTF-8 encoding + {"a\xCC", 2, ""}, + // ends with combining characters + {"\u0300\u0301", 0, "\u0300\u0301"}, + {"a\u0300\u0301", 0, "a\u0300\u0301"}, + {"a\u0301\u0308", 0, "a\u0301\u0308"}, + {"a\u0308\u0301", 0, "a\u0308\u0301"}, + {"aaaa\u0300\u0301", 3, "a\u0300\u0301"}, + {"\u0300a\u0300\u0301", 2, "a\u0300\u0301"}, + {"\u00C0", 0, "A\u0300"}, + {"a\u00C0", 1, "A\u0300"}, + // decomposing + {"a\u0300\u00E0", 3, "a\u0300"}, + // multisegment decompositions (flushes leading segments) + {"a\u0300\uFDC0", 7, "\u064A"}, + {"\uFDC0" + grave(29), 4, "\u064A" + grave(29)}, + {"\uFDC0" + grave(30), 4, "\u064A" + grave(30)}, + {"\uFDC0" + grave(31), 5, grave(30)}, + {"\uFDFA" + grave(14), 31, "\u0645" + grave(14)}, + // Overflow + {"\u00E0" + grave(29), 0, "a" + grave(30)}, + {"\u00E0" + grave(30), 2, grave(30)}, + // Hangul + {"a\u1103", 1, "\u1103"}, + {"a\u110B", 1, "\u110B"}, + {"a\u110B\u1173", 1, "\u110B\u1173"}, + // See comment in composition.go:compBoundaryAfter. + {"a\u110B\u1173\u11B7", 1, "\u110B\u1173\u11B7"}, + {"a\uC73C", 1, "\u110B\u1173"}, + {"다음", 3, "\u110B\u1173\u11B7"}, + {"다", 0, "\u1103\u1161"}, + {"\u1103\u1161\u110B\u1173\u11B7", 6, "\u110B\u1173\u11B7"}, + {"\u110B\u1173\u11B7\u1103\u1161", 9, "\u1103\u1161"}, + {"다음음", 6, "\u110B\u1173\u11B7"}, + {"음다다", 6, "\u1103\u1161"}, + // maximized buffer + {"a" + grave(30), 0, "a" + grave(30)}, + // Buffer overflow + {"a" + grave(31), 3, grave(30)}, + // weird UTF-8 + {"a\u0300\u11B7", 0, "a\u0300\u11B7"}, +} + +func decomposeToLast(rb *reorderBuffer, s string) (int, []byte) { + rb.setFlusher([]byte(s), appendFlush) + decomposeToLastBoundary(rb) + buf := rb.flush(nil) + return len(rb.out), buf +} + +func TestDecomposeToLastBoundary(t *testing.T) { + runPosTests(t, "TestDecomposeToLastBoundary", NFKC, decomposeToLast, decomposeToLastTests) +} + +var lastBoundaryTests = []PositionTest{ + // ends with inert character + {"Hello!", 6, ""}, + {"\u0632", 2, ""}, + // ends with non-inert starter + {"a", 0, ""}, + // illegal runes + {"\xff", 1, ""}, + {"aa\xff", 3, ""}, + {"a\xff\u0300", 1, ""}, // TODO: should probably be 2. + {"\xc0\x80\x80", 3, ""}, + {"\xc0\x80\x80\u0300", 3, ""}, + // ends with incomplete UTF-8 encoding + {"\xCC", -1, ""}, + {"\xE0\x80", -1, ""}, + {"\xF0\x80\x80", -1, ""}, + {"a\xCC", 0, ""}, + {"\x80\xCC", 1, ""}, + {"\xCC\xCC", 1, ""}, + // ends with combining characters + {"a\u0300\u0301", 0, ""}, + {"aaaa\u0300\u0301", 3, ""}, + {"\u0300a\u0300\u0301", 2, ""}, + {"\u00C2", 0, ""}, + {"a\u00C2", 1, ""}, + // decomposition may recombine + {"\u0226", 0, ""}, + // no boundary + {"", -1, ""}, + {"\u0300\u0301", -1, ""}, + {"\u0300", -1, ""}, + {"\x80\x80", -1, ""}, + {"\x80\x80\u0301", -1, ""}, + // Hangul + {"다음", 3, ""}, + {"다", 0, ""}, + {"\u1103\u1161\u110B\u1173\u11B7", 6, ""}, + {"\u110B\u1173\u11B7\u1103\u1161", 9, ""}, + // too many combining characters. + {grave(maxNonStarters - 1), -1, ""}, + // May still be preceded with a non-starter. + {grave(maxNonStarters), -1, ""}, + // May still need to insert a cgj after the last combiner. + {grave(maxNonStarters + 1), 2, ""}, + {grave(maxNonStarters + 2), 4, ""}, + + {"a" + grave(maxNonStarters-1), 0, ""}, + {"a" + grave(maxNonStarters), 0, ""}, + // May still need to insert a cgj after the last combiner. + {"a" + grave(maxNonStarters+1), 3, ""}, + {"a" + grave(maxNonStarters+2), 5, ""}, +} + +func lastBoundaryF(rb *reorderBuffer, s string) (int, []byte) { + return rb.f.form.LastBoundary([]byte(s)), nil +} + +func TestLastBoundary(t *testing.T) { + runPosTests(t, "TestLastBoundary", NFC, lastBoundaryF, lastBoundaryTests) +} + +type spanTest struct { + input string + atEOF bool + n int + err error +} + +var quickSpanTests = []spanTest{ + {"", true, 0, nil}, + // starters + {"a", true, 1, nil}, + {"abc", true, 3, nil}, + {"\u043Eb", true, 3, nil}, + // incomplete last rune. + {"\xCC", true, 1, nil}, + {"\xCC", false, 0, transform.ErrShortSrc}, + {"a\xCC", true, 2, nil}, + {"a\xCC", false, 0, transform.ErrShortSrc}, // TODO: could be 1 for NFD + // incorrectly ordered combining characters + {"\u0300\u0316", true, 0, transform.ErrEndOfSpan}, + {"\u0300\u0316", false, 0, transform.ErrEndOfSpan}, + {"\u0300\u0316cd", true, 0, transform.ErrEndOfSpan}, + {"\u0300\u0316cd", false, 0, transform.ErrEndOfSpan}, + // have a maximum number of combining characters. + {rep(0x035D, 30) + "\u035B", true, 0, transform.ErrEndOfSpan}, + {"a" + rep(0x035D, 30) + "\u035B", true, 0, transform.ErrEndOfSpan}, + {"Ɵ" + rep(0x035D, 30) + "\u035B", true, 0, transform.ErrEndOfSpan}, + {"aa" + rep(0x035D, 30) + "\u035B", true, 1, transform.ErrEndOfSpan}, + {rep(0x035D, 30) + cgj + "\u035B", true, 64, nil}, + {"a" + rep(0x035D, 30) + cgj + "\u035B", true, 65, nil}, + {"Ɵ" + rep(0x035D, 30) + cgj + "\u035B", true, 66, nil}, + {"aa" + rep(0x035D, 30) + cgj + "\u035B", true, 66, nil}, + + {"a" + rep(0x035D, 30) + cgj + "\u035B", false, 61, transform.ErrShortSrc}, + {"Ɵ" + rep(0x035D, 30) + cgj + "\u035B", false, 62, transform.ErrShortSrc}, + {"aa" + rep(0x035D, 30) + cgj + "\u035B", false, 62, transform.ErrShortSrc}, +} + +var quickSpanNFDTests = []spanTest{ + // needs decomposing + {"\u00C0", true, 0, transform.ErrEndOfSpan}, + {"abc\u00C0", true, 3, transform.ErrEndOfSpan}, + // correctly ordered combining characters + {"\u0300", true, 2, nil}, + {"ab\u0300", true, 4, nil}, + {"ab\u0300cd", true, 6, nil}, + {"\u0300cd", true, 4, nil}, + {"\u0316\u0300", true, 4, nil}, + {"ab\u0316\u0300", true, 6, nil}, + {"ab\u0316\u0300cd", true, 8, nil}, + {"ab\u0316\u0300\u00C0", true, 6, transform.ErrEndOfSpan}, + {"\u0316\u0300cd", true, 6, nil}, + {"\u043E\u0308b", true, 5, nil}, + // incorrectly ordered combining characters + {"ab\u0300\u0316", true, 1, transform.ErrEndOfSpan}, // TODO: we could skip 'b' as well. + {"ab\u0300\u0316cd", true, 1, transform.ErrEndOfSpan}, + // Hangul + {"같은", true, 0, transform.ErrEndOfSpan}, +} + +var quickSpanNFCTests = []spanTest{ + // okay composed + {"\u00C0", true, 2, nil}, + {"abc\u00C0", true, 5, nil}, + // correctly ordered combining characters + // TODO: b may combine with modifiers, which is why this fails. We could + // make a more precise test that that actually checks whether last + // characters combines. Probably not worth it. + {"ab\u0300", true, 1, transform.ErrEndOfSpan}, + {"ab\u0300cd", true, 1, transform.ErrEndOfSpan}, + {"ab\u0316\u0300", true, 1, transform.ErrEndOfSpan}, + {"ab\u0316\u0300cd", true, 1, transform.ErrEndOfSpan}, + {"\u00C0\u035D", true, 4, nil}, + // we do not special case leading combining characters + {"\u0300cd", true, 0, transform.ErrEndOfSpan}, + {"\u0300", true, 0, transform.ErrEndOfSpan}, + {"\u0316\u0300", true, 0, transform.ErrEndOfSpan}, + {"\u0316\u0300cd", true, 0, transform.ErrEndOfSpan}, + // incorrectly ordered combining characters + {"ab\u0300\u0316", true, 1, transform.ErrEndOfSpan}, + {"ab\u0300\u0316cd", true, 1, transform.ErrEndOfSpan}, + // Hangul + {"같은", true, 6, nil}, + {"같은", false, 3, transform.ErrShortSrc}, + // We return the start of the violating segment in case of overflow. + {grave(30) + "\uff9e", true, 0, transform.ErrEndOfSpan}, + {grave(30), true, 0, transform.ErrEndOfSpan}, +} + +func runSpanTests(t *testing.T, name string, f Form, testCases []spanTest) { + for i, tc := range testCases { + s := fmt.Sprintf("Bytes/%s/%d=%+q/atEOF=%v", name, i, pc(tc.input), tc.atEOF) + ok := testtext.Run(t, s, func(t *testing.T) { + n, err := f.Span([]byte(tc.input), tc.atEOF) + if n != tc.n || err != tc.err { + t.Errorf("\n got %d, %v;\nwant %d, %v", n, err, tc.n, tc.err) + } + }) + if !ok { + continue // Don't do the String variant if the Bytes variant failed. + } + s = fmt.Sprintf("String/%s/%d=%+q/atEOF=%v", name, i, pc(tc.input), tc.atEOF) + testtext.Run(t, s, func(t *testing.T) { + n, err := f.SpanString(tc.input, tc.atEOF) + if n != tc.n || err != tc.err { + t.Errorf("\n got %d, %v;\nwant %d, %v", n, err, tc.n, tc.err) + } + }) + } +} + +func TestSpan(t *testing.T) { + runSpanTests(t, "NFD", NFD, quickSpanTests) + runSpanTests(t, "NFD", NFD, quickSpanNFDTests) + runSpanTests(t, "NFC", NFC, quickSpanTests) + runSpanTests(t, "NFC", NFC, quickSpanNFCTests) +} + +var isNormalTests = []PositionTest{ + {"", 1, ""}, + // illegal runes + {"\xff", 1, ""}, + // starters + {"a", 1, ""}, + {"abc", 1, ""}, + {"\u043Eb", 1, ""}, + // incorrectly ordered combining characters + {"\u0300\u0316", 0, ""}, + {"ab\u0300\u0316", 0, ""}, + {"ab\u0300\u0316cd", 0, ""}, + {"\u0300\u0316cd", 0, ""}, +} +var isNormalNFDTests = []PositionTest{ + // needs decomposing + {"\u00C0", 0, ""}, + {"abc\u00C0", 0, ""}, + // correctly ordered combining characters + {"\u0300", 1, ""}, + {"ab\u0300", 1, ""}, + {"ab\u0300cd", 1, ""}, + {"\u0300cd", 1, ""}, + {"\u0316\u0300", 1, ""}, + {"ab\u0316\u0300", 1, ""}, + {"ab\u0316\u0300cd", 1, ""}, + {"\u0316\u0300cd", 1, ""}, + {"\u043E\u0308b", 1, ""}, + // Hangul + {"같은", 0, ""}, +} +var isNormalNFCTests = []PositionTest{ + // okay composed + {"\u00C0", 1, ""}, + {"abc\u00C0", 1, ""}, + // need reordering + {"a\u0300", 0, ""}, + {"a\u0300cd", 0, ""}, + {"a\u0316\u0300", 0, ""}, + {"a\u0316\u0300cd", 0, ""}, + // correctly ordered combining characters + {"ab\u0300", 1, ""}, + {"ab\u0300cd", 1, ""}, + {"ab\u0316\u0300", 1, ""}, + {"ab\u0316\u0300cd", 1, ""}, + {"\u00C0\u035D", 1, ""}, + {"\u0300", 1, ""}, + {"\u0316\u0300cd", 1, ""}, + // Hangul + {"같은", 1, ""}, +} + +var isNormalNFKXTests = []PositionTest{ + // Special case. + {"\u00BC", 0, ""}, +} + +func isNormalF(rb *reorderBuffer, s string) (int, []byte) { + if rb.f.form.IsNormal([]byte(s)) { + return 1, nil + } + return 0, nil +} + +func isNormalStringF(rb *reorderBuffer, s string) (int, []byte) { + if rb.f.form.IsNormalString(s) { + return 1, nil + } + return 0, nil +} + +func TestIsNormal(t *testing.T) { + runPosTests(t, "TestIsNormalNFD1", NFD, isNormalF, isNormalTests) + runPosTests(t, "TestIsNormalNFD2", NFD, isNormalF, isNormalNFDTests) + runPosTests(t, "TestIsNormalNFC1", NFC, isNormalF, isNormalTests) + runPosTests(t, "TestIsNormalNFC2", NFC, isNormalF, isNormalNFCTests) + runPosTests(t, "TestIsNormalNFKD1", NFKD, isNormalF, isNormalTests) + runPosTests(t, "TestIsNormalNFKD2", NFKD, isNormalF, isNormalNFDTests) + runPosTests(t, "TestIsNormalNFKD3", NFKD, isNormalF, isNormalNFKXTests) + runPosTests(t, "TestIsNormalNFKC1", NFKC, isNormalF, isNormalTests) + runPosTests(t, "TestIsNormalNFKC2", NFKC, isNormalF, isNormalNFCTests) + runPosTests(t, "TestIsNormalNFKC3", NFKC, isNormalF, isNormalNFKXTests) +} + +func TestIsNormalString(t *testing.T) { + runPosTests(t, "TestIsNormalNFD1", NFD, isNormalStringF, isNormalTests) + runPosTests(t, "TestIsNormalNFD2", NFD, isNormalStringF, isNormalNFDTests) + runPosTests(t, "TestIsNormalNFC1", NFC, isNormalStringF, isNormalTests) + runPosTests(t, "TestIsNormalNFC2", NFC, isNormalStringF, isNormalNFCTests) +} + +type AppendTest struct { + left string + right string + out string +} + +type appendFunc func(f Form, out []byte, s string) []byte + +var fstr = []string{"NFC", "NFD", "NFKC", "NFKD"} + +func runNormTests(t *testing.T, name string, fn appendFunc) { + for f := NFC; f <= NFKD; f++ { + runAppendTests(t, name, f, fn, normTests[f]) + } +} + +func runAppendTests(t *testing.T, name string, f Form, fn appendFunc, tests []AppendTest) { + for i, test := range tests { + if *testn >= 0 && i != *testn { + continue + } + out := []byte(test.left) + have := string(fn(f, out, test.right)) + if len(have) != len(test.out) { + t.Errorf("%s.%s:%d: length is %d; want %d (%+q vs %+q)", fstr[f], name, i, len(have), len(test.out), pc(have), pc(test.out)) + } + if have != test.out { + k, pf := pidx(have, test.out) + t.Errorf("%s.%s:%d: \nwas %s%+q; \nwant %s%+q", fstr[f], name, i, pf, pc(have[k:]), pf, pc(test.out[k:])) + } + + // Bootstrap by normalizing input. Ensures that the various variants + // behave the same. + for g := NFC; g <= NFKD; g++ { + if f == g { + continue + } + want := g.String(test.left + test.right) + have := string(fn(g, g.AppendString(nil, test.left), test.right)) + if len(have) != len(want) { + t.Errorf("%s(%s.%s):%d: length is %d; want %d (%+q vs %+q)", fstr[g], fstr[f], name, i, len(have), len(want), pc(have), pc(want)) + } + if have != want { + k, pf := pidx(have, want) + t.Errorf("%s(%s.%s):%d: \nwas %s%+q; \nwant %s%+q", fstr[g], fstr[f], name, i, pf, pc(have[k:]), pf, pc(want[k:])) + } + } + } +} + +var normTests = [][]AppendTest{ + appendTestsNFC, + appendTestsNFD, + appendTestsNFKC, + appendTestsNFKD, +} + +var appendTestsNFC = []AppendTest{ + {"", ascii, ascii}, + {"", txt_all, txt_all}, + {"\uff9e", grave(30), "\uff9e" + grave(29) + cgj + grave(1)}, + {grave(30), "\uff9e", grave(30) + cgj + "\uff9e"}, + + // Tests designed for Iter. + { // ordering of non-composing combining characters + "", + "\u0305\u0316", + "\u0316\u0305", + }, + { // segment overflow + "", + "a" + rep(0x0305, maxNonStarters+4) + "\u0316", + "a" + rep(0x0305, maxNonStarters) + cgj + "\u0316" + rep(0x305, 4), + }, + + { // Combine across non-blocking non-starters. + // U+0327 COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; + // U+0325 COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; + "", "a\u0327\u0325", "\u1e01\u0327", + }, + + { // Jamo V+T does not combine. + "", + "\u1161\u11a8", + "\u1161\u11a8", + }, + + // Stability tests: see http://www.unicode.org/review/pr-29.html. + {"", "\u0b47\u0300\u0b3e", "\u0b47\u0300\u0b3e"}, + {"", "\u1100\u0300\u1161", "\u1100\u0300\u1161"}, + {"", "\u0b47\u0b3e", "\u0b4b"}, + {"", "\u1100\u1161", "\uac00"}, + + // U+04DA MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; + { // 0d4a starts a new segment. + "", + "\u0d4a" + strings.Repeat("\u0d3e", 15) + "\u0d4a" + strings.Repeat("\u0d3e", 15), + "\u0d4a" + strings.Repeat("\u0d3e", 15) + "\u0d4a" + strings.Repeat("\u0d3e", 15), + }, + + { // Split combining characters. + // TODO: don't insert CGJ before starters. + "", + "\u0d46" + strings.Repeat("\u0d3e", 31), + "\u0d4a" + strings.Repeat("\u0d3e", 29) + cgj + "\u0d3e", + }, + + { // Split combining characters. + "", + "\u0d4a" + strings.Repeat("\u0d3e", 30), + "\u0d4a" + strings.Repeat("\u0d3e", 29) + cgj + "\u0d3e", + }, +} + +var appendTestsNFD = []AppendTest{ +// TODO: Move some of the tests here. +} + +var appendTestsNFKC = []AppendTest{ + // empty buffers + {"", "", ""}, + {"a", "", "a"}, + {"", "a", "a"}, + {"", "\u0041\u0307\u0304", "\u01E0"}, + // segment split across buffers + {"", "a\u0300b", "\u00E0b"}, + {"a", "\u0300b", "\u00E0b"}, + {"a", "\u0300\u0316", "\u00E0\u0316"}, + {"a", "\u0316\u0300", "\u00E0\u0316"}, + {"a", "\u0300a\u0300", "\u00E0\u00E0"}, + {"a", "\u0300a\u0300a\u0300", "\u00E0\u00E0\u00E0"}, + {"a", "\u0300aaa\u0300aaa\u0300", "\u00E0aa\u00E0aa\u00E0"}, + {"a\u0300", "\u0327", "\u00E0\u0327"}, + {"a\u0327", "\u0300", "\u00E0\u0327"}, + {"a\u0316", "\u0300", "\u00E0\u0316"}, + {"\u0041\u0307", "\u0304", "\u01E0"}, + // Hangul + {"", "\u110B\u1173", "\uC73C"}, + {"", "\u1103\u1161", "\uB2E4"}, + {"", "\u110B\u1173\u11B7", "\uC74C"}, + {"", "\u320E", "\x28\uAC00\x29"}, + {"", "\x28\u1100\u1161\x29", "\x28\uAC00\x29"}, + {"\u1103", "\u1161", "\uB2E4"}, + {"\u110B", "\u1173\u11B7", "\uC74C"}, + {"\u110B\u1173", "\u11B7", "\uC74C"}, + {"\uC73C", "\u11B7", "\uC74C"}, + // UTF-8 encoding split across buffers + {"a\xCC", "\x80", "\u00E0"}, + {"a\xCC", "\x80b", "\u00E0b"}, + {"a\xCC", "\x80a\u0300", "\u00E0\u00E0"}, + {"a\xCC", "\x80\x80", "\u00E0\x80"}, + {"a\xCC", "\x80\xCC", "\u00E0\xCC"}, + {"a\u0316\xCC", "\x80a\u0316\u0300", "\u00E0\u0316\u00E0\u0316"}, + // ending in incomplete UTF-8 encoding + {"", "\xCC", "\xCC"}, + {"a", "\xCC", "a\xCC"}, + {"a", "b\xCC", "ab\xCC"}, + {"\u0226", "\xCC", "\u0226\xCC"}, + // illegal runes + {"", "\x80", "\x80"}, + {"", "\x80\x80\x80", "\x80\x80\x80"}, + {"", "\xCC\x80\x80\x80", "\xCC\x80\x80\x80"}, + {"", "a\x80", "a\x80"}, + {"", "a\x80\x80\x80", "a\x80\x80\x80"}, + {"", "a\x80\x80\x80\x80\x80\x80", "a\x80\x80\x80\x80\x80\x80"}, + {"a", "\x80\x80\x80", "a\x80\x80\x80"}, + // overflow + {"", strings.Repeat("\x80", 33), strings.Repeat("\x80", 33)}, + {strings.Repeat("\x80", 33), "", strings.Repeat("\x80", 33)}, + {strings.Repeat("\x80", 33), strings.Repeat("\x80", 33), strings.Repeat("\x80", 66)}, + // overflow of combining characters + {"", grave(34), grave(30) + cgj + grave(4)}, + {"", grave(36), grave(30) + cgj + grave(6)}, + {grave(29), grave(5), grave(30) + cgj + grave(4)}, + {grave(30), grave(4), grave(30) + cgj + grave(4)}, + {grave(30), grave(3), grave(30) + cgj + grave(3)}, + {grave(30) + "\xCC", "\x80", grave(30) + cgj + grave(1)}, + {"", "\uFDFA" + grave(14), "\u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064a\u0647 \u0648\u0633\u0644\u0645" + grave(14)}, + {"", "\uFDFA" + grave(28) + "\u0316", "\u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064a\u0647 \u0648\u0633\u0644\u0645\u0316" + grave(28)}, + // - First rune has a trailing non-starter. + {"\u00d5", grave(30), "\u00d5" + grave(29) + cgj + grave(1)}, + // - U+FF9E decomposes into a non-starter in compatibility mode. A CGJ must be + // inserted even when FF9E starts a new segment. + {"\uff9e", grave(30), "\u3099" + grave(29) + cgj + grave(1)}, + {grave(30), "\uff9e", grave(30) + cgj + "\u3099"}, + // - Many non-starter decompositions in a row causing overflow. + {"", rep(0x340, 31), rep(0x300, 30) + cgj + "\u0300"}, + {"", rep(0xFF9E, 31), rep(0x3099, 30) + cgj + "\u3099"}, + // weird UTF-8 + {"\u00E0\xE1", "\x86", "\u00E0\xE1\x86"}, + {"a\u0300\u11B7", "\u0300", "\u00E0\u11B7\u0300"}, + {"a\u0300\u11B7\u0300", "\u0300", "\u00E0\u11B7\u0300\u0300"}, + {"\u0300", "\xF8\x80\x80\x80\x80\u0300", "\u0300\xF8\x80\x80\x80\x80\u0300"}, + {"\u0300", "\xFC\x80\x80\x80\x80\x80\u0300", "\u0300\xFC\x80\x80\x80\x80\x80\u0300"}, + {"\xF8\x80\x80\x80\x80\u0300", "\u0300", "\xF8\x80\x80\x80\x80\u0300\u0300"}, + {"\xFC\x80\x80\x80\x80\x80\u0300", "\u0300", "\xFC\x80\x80\x80\x80\x80\u0300\u0300"}, + {"\xF8\x80\x80\x80", "\x80\u0300\u0300", "\xF8\x80\x80\x80\x80\u0300\u0300"}, + + {"", strings.Repeat("a\u0316\u0300", 6), strings.Repeat("\u00E0\u0316", 6)}, + // large input. + {"", strings.Repeat("a\u0300\u0316", 4000), strings.Repeat("\u00E0\u0316", 4000)}, + {"", strings.Repeat("\x80\x80", 4000), strings.Repeat("\x80\x80", 4000)}, + {"", "\u0041\u0307\u0304", "\u01E0"}, +} + +var appendTestsNFKD = []AppendTest{ + {"", "a" + grave(64), "a" + grave(30) + cgj + grave(30) + cgj + grave(4)}, + + { // segment overflow on unchanged character + "", + "a" + grave(64) + "\u0316", + "a" + grave(30) + cgj + grave(30) + cgj + "\u0316" + grave(4), + }, + { // segment overflow on unchanged character + start value + "", + "a" + grave(98) + "\u0316", + "a" + grave(30) + cgj + grave(30) + cgj + grave(30) + cgj + "\u0316" + grave(8), + }, + { // segment overflow on decomposition. (U+0340 decomposes to U+0300.) + "", + "a" + grave(59) + "\u0340", + "a" + grave(30) + cgj + grave(30), + }, + { // segment overflow on non-starter decomposition + "", + "a" + grave(33) + "\u0340" + grave(30) + "\u0320", + "a" + grave(30) + cgj + grave(30) + cgj + "\u0320" + grave(4), + }, + { // start value after ASCII overflow + "", + rep('a', segSize) + grave(32) + "\u0320", + rep('a', segSize) + grave(30) + cgj + "\u0320" + grave(2), + }, + { // Jamo overflow + "", + "\u1100\u1161" + grave(30) + "\u0320" + grave(2), + "\u1100\u1161" + grave(29) + cgj + "\u0320" + grave(3), + }, + { // Hangul + "", + "\uac00", + "\u1100\u1161", + }, + { // Hangul overflow + "", + "\uac00" + grave(32) + "\u0320", + "\u1100\u1161" + grave(29) + cgj + "\u0320" + grave(3), + }, + { // Hangul overflow in Hangul mode. + "", + "\uac00\uac00" + grave(32) + "\u0320", + "\u1100\u1161\u1100\u1161" + grave(29) + cgj + "\u0320" + grave(3), + }, + { // Hangul overflow in Hangul mode. + "", + strings.Repeat("\uac00", 3) + grave(32) + "\u0320", + strings.Repeat("\u1100\u1161", 3) + grave(29) + cgj + "\u0320" + grave(3), + }, + { // start value after cc=0 + "", + "您您" + grave(34) + "\u0320", + "您您" + grave(30) + cgj + "\u0320" + grave(4), + }, + { // start value after normalization + "", + "\u0300\u0320a" + grave(34) + "\u0320", + "\u0320\u0300a" + grave(30) + cgj + "\u0320" + grave(4), + }, +} + +func TestAppend(t *testing.T) { + runNormTests(t, "Append", func(f Form, out []byte, s string) []byte { + return f.Append(out, []byte(s)...) + }) +} + +func TestAppendString(t *testing.T) { + runNormTests(t, "AppendString", func(f Form, out []byte, s string) []byte { + return f.AppendString(out, s) + }) +} + +func TestBytes(t *testing.T) { + runNormTests(t, "Bytes", func(f Form, out []byte, s string) []byte { + buf := []byte{} + buf = append(buf, out...) + buf = append(buf, s...) + return f.Bytes(buf) + }) +} + +func TestString(t *testing.T) { + runNormTests(t, "String", func(f Form, out []byte, s string) []byte { + outs := string(out) + s + return []byte(f.String(outs)) + }) +} + +func TestLinking(t *testing.T) { + const prog = ` + package main + import "fmt" + import "golang.org/x/text/unicode/norm" + func main() { fmt.Println(norm.%s) } + ` + baseline, errB := testtext.CodeSize(fmt.Sprintf(prog, "MaxSegmentSize")) + withTables, errT := testtext.CodeSize(fmt.Sprintf(prog, `NFC.String("")`)) + if errB != nil || errT != nil { + t.Skipf("code size failed: %v and %v", errB, errT) + } + // Tables are at least 50K + if d := withTables - baseline; d < 50*1024 { + t.Errorf("tables appear not to be dropped: %d - %d = %d", + withTables, baseline, d) + } +} + +func appendBench(f Form, in []byte) func() { + buf := make([]byte, 0, 4*len(in)) + return func() { + f.Append(buf, in...) + } +} + +func bytesBench(f Form, in []byte) func() { + return func() { + f.Bytes(in) + } +} + +func iterBench(f Form, in []byte) func() { + iter := Iter{} + return func() { + iter.Init(f, in) + for !iter.Done() { + iter.Next() + } + } +} + +func transformBench(f Form, in []byte) func() { + buf := make([]byte, 4*len(in)) + return func() { + if _, n, err := f.Transform(buf, in, true); err != nil || len(in) != n { + log.Panic(n, len(in), err) + } + } +} + +func readerBench(f Form, in []byte) func() { + buf := make([]byte, 4*len(in)) + return func() { + r := f.Reader(bytes.NewReader(in)) + var err error + for err == nil { + _, err = r.Read(buf) + } + if err != io.EOF { + panic("") + } + } +} + +func writerBench(f Form, in []byte) func() { + buf := make([]byte, 0, 4*len(in)) + return func() { + r := f.Writer(bytes.NewBuffer(buf)) + if _, err := r.Write(in); err != nil { + panic("") + } + } +} + +func appendBenchmarks(bm []func(), f Form, in []byte) []func() { + bm = append(bm, appendBench(f, in)) + bm = append(bm, iterBench(f, in)) + bm = append(bm, transformBench(f, in)) + bm = append(bm, readerBench(f, in)) + bm = append(bm, writerBench(f, in)) + return bm +} + +func doFormBenchmark(b *testing.B, inf, f Form, s string) { + b.StopTimer() + in := inf.Bytes([]byte(s)) + bm := appendBenchmarks(nil, f, in) + b.SetBytes(int64(len(in) * len(bm))) + b.StartTimer() + for i := 0; i < b.N; i++ { + for _, fn := range bm { + fn() + } + } +} + +func doSingle(b *testing.B, f func(Form, []byte) func(), s []byte) { + b.StopTimer() + fn := f(NFC, s) + b.SetBytes(int64(len(s))) + b.StartTimer() + for i := 0; i < b.N; i++ { + fn() + } +} + +var ( + smallNoChange = []byte("nörmalization") + smallChange = []byte("No\u0308rmalization") + ascii = strings.Repeat("There is nothing to change here! ", 500) +) + +func lowerBench(f Form, in []byte) func() { + // Use package strings instead of bytes as it doesn't allocate memory + // if there aren't any changes. + s := string(in) + return func() { + strings.ToLower(s) + } +} + +func BenchmarkLowerCaseNoChange(b *testing.B) { + doSingle(b, lowerBench, smallNoChange) +} +func BenchmarkLowerCaseChange(b *testing.B) { + doSingle(b, lowerBench, smallChange) +} + +func quickSpanBench(f Form, in []byte) func() { + return func() { + f.QuickSpan(in) + } +} + +func BenchmarkQuickSpanChangeNFC(b *testing.B) { + doSingle(b, quickSpanBench, smallNoChange) +} + +func BenchmarkBytesNoChangeNFC(b *testing.B) { + doSingle(b, bytesBench, smallNoChange) +} +func BenchmarkBytesChangeNFC(b *testing.B) { + doSingle(b, bytesBench, smallChange) +} + +func BenchmarkAppendNoChangeNFC(b *testing.B) { + doSingle(b, appendBench, smallNoChange) +} +func BenchmarkAppendChangeNFC(b *testing.B) { + doSingle(b, appendBench, smallChange) +} +func BenchmarkAppendLargeNFC(b *testing.B) { + doSingle(b, appendBench, txt_all_bytes) +} + +func BenchmarkIterNoChangeNFC(b *testing.B) { + doSingle(b, iterBench, smallNoChange) +} +func BenchmarkIterChangeNFC(b *testing.B) { + doSingle(b, iterBench, smallChange) +} +func BenchmarkIterLargeNFC(b *testing.B) { + doSingle(b, iterBench, txt_all_bytes) +} + +func BenchmarkTransformNoChangeNFC(b *testing.B) { + doSingle(b, transformBench, smallNoChange) +} +func BenchmarkTransformChangeNFC(b *testing.B) { + doSingle(b, transformBench, smallChange) +} +func BenchmarkTransformLargeNFC(b *testing.B) { + doSingle(b, transformBench, txt_all_bytes) +} + +func BenchmarkNormalizeAsciiNFC(b *testing.B) { + doFormBenchmark(b, NFC, NFC, ascii) +} +func BenchmarkNormalizeAsciiNFD(b *testing.B) { + doFormBenchmark(b, NFC, NFD, ascii) +} +func BenchmarkNormalizeAsciiNFKC(b *testing.B) { + doFormBenchmark(b, NFC, NFKC, ascii) +} +func BenchmarkNormalizeAsciiNFKD(b *testing.B) { + doFormBenchmark(b, NFC, NFKD, ascii) +} + +func BenchmarkNormalizeNFC2NFC(b *testing.B) { + doFormBenchmark(b, NFC, NFC, txt_all) +} +func BenchmarkNormalizeNFC2NFD(b *testing.B) { + doFormBenchmark(b, NFC, NFD, txt_all) +} +func BenchmarkNormalizeNFD2NFC(b *testing.B) { + doFormBenchmark(b, NFD, NFC, txt_all) +} +func BenchmarkNormalizeNFD2NFD(b *testing.B) { + doFormBenchmark(b, NFD, NFD, txt_all) +} + +// Hangul is often special-cased, so we test it separately. +func BenchmarkNormalizeHangulNFC2NFC(b *testing.B) { + doFormBenchmark(b, NFC, NFC, txt_kr) +} +func BenchmarkNormalizeHangulNFC2NFD(b *testing.B) { + doFormBenchmark(b, NFC, NFD, txt_kr) +} +func BenchmarkNormalizeHangulNFD2NFC(b *testing.B) { + doFormBenchmark(b, NFD, NFC, txt_kr) +} +func BenchmarkNormalizeHangulNFD2NFD(b *testing.B) { + doFormBenchmark(b, NFD, NFD, txt_kr) +} + +var forms = []Form{NFC, NFD, NFKC, NFKD} + +func doTextBenchmark(b *testing.B, s string) { + b.StopTimer() + in := []byte(s) + bm := []func(){} + for _, f := range forms { + bm = appendBenchmarks(bm, f, in) + } + b.SetBytes(int64(len(s) * len(bm))) + b.StartTimer() + for i := 0; i < b.N; i++ { + for _, f := range bm { + f() + } + } +} + +func BenchmarkCanonicalOrdering(b *testing.B) { + doTextBenchmark(b, txt_canon) +} +func BenchmarkExtendedLatin(b *testing.B) { + doTextBenchmark(b, txt_vn) +} +func BenchmarkMiscTwoByteUtf8(b *testing.B) { + doTextBenchmark(b, twoByteUtf8) +} +func BenchmarkMiscThreeByteUtf8(b *testing.B) { + doTextBenchmark(b, threeByteUtf8) +} +func BenchmarkHangul(b *testing.B) { + doTextBenchmark(b, txt_kr) +} +func BenchmarkJapanese(b *testing.B) { + doTextBenchmark(b, txt_jp) +} +func BenchmarkChinese(b *testing.B) { + doTextBenchmark(b, txt_cn) +} +func BenchmarkOverflow(b *testing.B) { + doTextBenchmark(b, overflow) +} + +var overflow = string(bytes.Repeat([]byte("\u035D"), 4096)) + "\u035B" + +// Tests sampled from the Canonical ordering tests (Part 2) of +// http://unicode.org/Public/UNIDATA/NormalizationTest.txt +const txt_canon = `\u0061\u0315\u0300\u05AE\u0300\u0062 \u0061\u0300\u0315\u0300\u05AE\u0062 +\u0061\u0302\u0315\u0300\u05AE\u0062 \u0061\u0307\u0315\u0300\u05AE\u0062 +\u0061\u0315\u0300\u05AE\u030A\u0062 \u0061\u059A\u0316\u302A\u031C\u0062 +\u0061\u032E\u059A\u0316\u302A\u0062 \u0061\u0338\u093C\u0334\u0062 +\u0061\u059A\u0316\u302A\u0339 \u0061\u0341\u0315\u0300\u05AE\u0062 +\u0061\u0348\u059A\u0316\u302A\u0062 \u0061\u0361\u0345\u035D\u035C\u0062 +\u0061\u0366\u0315\u0300\u05AE\u0062 \u0061\u0315\u0300\u05AE\u0486\u0062 +\u0061\u05A4\u059A\u0316\u302A\u0062 \u0061\u0315\u0300\u05AE\u0613\u0062 +\u0061\u0315\u0300\u05AE\u0615\u0062 \u0061\u0617\u0315\u0300\u05AE\u0062 +\u0061\u0619\u0618\u064D\u064E\u0062 \u0061\u0315\u0300\u05AE\u0654\u0062 +\u0061\u0315\u0300\u05AE\u06DC\u0062 \u0061\u0733\u0315\u0300\u05AE\u0062 +\u0061\u0744\u059A\u0316\u302A\u0062 \u0061\u0315\u0300\u05AE\u0745\u0062 +\u0061\u09CD\u05B0\u094D\u3099\u0062 \u0061\u0E38\u0E48\u0E38\u0C56\u0062 +\u0061\u0EB8\u0E48\u0E38\u0E49\u0062 \u0061\u0F72\u0F71\u0EC8\u0F71\u0062 +\u0061\u1039\u05B0\u094D\u3099\u0062 \u0061\u05B0\u094D\u3099\u1A60\u0062 +\u0061\u3099\u093C\u0334\u1BE6\u0062 \u0061\u3099\u093C\u0334\u1C37\u0062 +\u0061\u1CD9\u059A\u0316\u302A\u0062 \u0061\u2DED\u0315\u0300\u05AE\u0062 +\u0061\u2DEF\u0315\u0300\u05AE\u0062 \u0061\u302D\u302E\u059A\u0316\u0062` + +// Taken from http://creativecommons.org/licenses/by-sa/3.0/vn/ +const txt_vn = `Với các điều kiện sau: Ghi nhận công của tác giả. +Nếu bạn sử dụng, chuyển đổi, hoặc xây dựng dự án từ +nội dung được chia sẻ này, bạn phải áp dụng giấy phép này hoặc +một giấy phép khác có các điều khoản tương tự như giấy phép này +cho dự án của bạn. Hiểu rằng: Miễn — Bất kỳ các điều kiện nào +trên đây cũng có thể được miễn bỏ nếu bạn được sự cho phép của +người sở hữu bản quyền. Phạm vi công chúng — Khi tác phẩm hoặc +bất kỳ chương nào của tác phẩm đã trong vùng dành cho công +chúng theo quy định của pháp luật thì tình trạng của nó không +bị ảnh hưởng bởi giấy phép trong bất kỳ trường hợp nào.` + +// Taken from http://creativecommons.org/licenses/by-sa/1.0/deed.ru +const txt_ru = `При обязательном соблюдении следующих условий: +Attribution — Вы должны атрибутировать произведение (указывать +автора и источник) в порядке, предусмотренном автором или +лицензиаром (но только так, чтобы никоим образом не подразумевалось, +что они поддерживают вас или использование вами данного произведения). +Υπό τις ακόλουθες προϋποθέσεις:` + +// Taken from http://creativecommons.org/licenses/by-sa/3.0/gr/ +const txt_gr = `Αναφορά Δημιουργού — Θα πρέπει να κάνετε την αναφορά στο έργο με τον +τρόπο που έχει οριστεί από το δημιουργό ή το χορηγούντο την άδεια +(χωρίς όμως να εννοείται με οποιονδήποτε τρόπο ότι εγκρίνουν εσάς ή +τη χρήση του έργου από εσάς). Παρόμοια Διανομή — Εάν αλλοιώσετε, +τροποποιήσετε ή δημιουργήσετε περαιτέρω βασισμένοι στο έργο θα +μπορείτε να διανέμετε το έργο που θα προκύψει μόνο με την ίδια ή +παρόμοια άδεια.` + +// Taken from http://creativecommons.org/licenses/by-sa/3.0/deed.ar +const txt_ar = `بموجب الشروط التالية نسب المصنف — يجب عليك أن +تنسب العمل بالطريقة التي تحددها المؤلف أو المرخص (ولكن ليس بأي حال من +الأحوال أن توحي وتقترح بتحول أو استخدامك للعمل). +المشاركة على قدم المساواة — إذا كنت يعدل ، والتغيير ، أو الاستفادة +من هذا العمل ، قد ينتج عن توزيع العمل إلا في ظل تشابه او تطابق فى واحد +لهذا الترخيص.` + +// Taken from http://creativecommons.org/licenses/by-sa/1.0/il/ +const txt_il = `בכפוף לתנאים הבאים: ייחוס — עליך לייחס את היצירה (לתת קרדיט) באופן +המצויין על-ידי היוצר או מעניק הרישיון (אך לא בשום אופן המרמז על כך +שהם תומכים בך או בשימוש שלך ביצירה). שיתוף זהה — אם תחליט/י לשנות, +לעבד או ליצור יצירה נגזרת בהסתמך על יצירה זו, תוכל/י להפיץ את יצירתך +החדשה רק תחת אותו הרישיון או רישיון דומה לרישיון זה.` + +const twoByteUtf8 = txt_ru + txt_gr + txt_ar + txt_il + +// Taken from http://creativecommons.org/licenses/by-sa/2.0/kr/ +const txt_kr = `다음과 같은 조건을 따라야 합니다: 저작자표시 +(Attribution) — 저작자나 이용허락자가 정한 방법으로 저작물의 +원저작자를 표시하여야 합니다(그러나 원저작자가 이용자나 이용자의 +이용을 보증하거나 추천한다는 의미로 표시해서는 안됩니다). +동일조건변경허락 — 이 저작물을 이용하여 만든 이차적 저작물에는 본 +라이선스와 동일한 라이선스를 적용해야 합니다.` + +// Taken from http://creativecommons.org/licenses/by-sa/3.0/th/ +const txt_th = `ภายใต้เงื่อนไข ดังต่อไปนี้ : แสดงที่มา — คุณต้องแสดงที่ +มาของงานดังกล่าว ตามรูปแบบที่ผู้สร้างสรรค์หรือผู้อนุญาตกำหนด (แต่ +ไม่ใช่ในลักษณะที่ว่า พวกเขาสนับสนุนคุณหรือสนับสนุนการที่ +คุณนำงานไปใช้) อนุญาตแบบเดียวกัน — หากคุณดัดแปลง เปลี่ยนรูป หรื +อต่อเติมงานนี้ คุณต้องใช้สัญญาอนุญาตแบบเดียวกันหรือแบบที่เหมื +อนกับสัญญาอนุญาตที่ใช้กับงานนี้เท่านั้น` + +const threeByteUtf8 = txt_th + +// Taken from http://creativecommons.org/licenses/by-sa/2.0/jp/ +const txt_jp = `あなたの従うべき条件は以下の通りです。 +表示 — あなたは原著作者のクレジットを表示しなければなりません。 +継承 — もしあなたがこの作品を改変、変形または加工した場合、 +あなたはその結果生じた作品をこの作品と同一の許諾条件の下でのみ +頒布することができます。` + +// http://creativecommons.org/licenses/by-sa/2.5/cn/ +const txt_cn = `您可以自由: 复制、发行、展览、表演、放映、 +广播或通过信息网络传播本作品 创作演绎作品 +对本作品进行商业性使用 惟须遵守下列条件: +署名 — 您必须按照作者或者许可人指定的方式对作品进行署名。 +相同方式共享 — 如果您改变、转换本作品或者以本作品为基础进行创作, +您只能采用与本协议相同的许可协议发布基于本作品的演绎作品。` + +const txt_cjk = txt_cn + txt_jp + txt_kr +const txt_all = txt_vn + twoByteUtf8 + threeByteUtf8 + txt_cjk + +var txt_all_bytes = []byte(txt_all) diff --git a/vendor/golang.org/x/text/unicode/norm/readwriter.go b/vendor/golang.org/x/text/unicode/norm/readwriter.go new file mode 100644 index 0000000..d926ee9 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/readwriter.go @@ -0,0 +1,125 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import "io" + +type normWriter struct { + rb reorderBuffer + w io.Writer + buf []byte +} + +// Write implements the standard write interface. If the last characters are +// not at a normalization boundary, the bytes will be buffered for the next +// write. The remaining bytes will be written on close. +func (w *normWriter) Write(data []byte) (n int, err error) { + // Process data in pieces to keep w.buf size bounded. + const chunk = 4000 + + for len(data) > 0 { + // Normalize into w.buf. + m := len(data) + if m > chunk { + m = chunk + } + w.rb.src = inputBytes(data[:m]) + w.rb.nsrc = m + w.buf = doAppend(&w.rb, w.buf, 0) + data = data[m:] + n += m + + // Write out complete prefix, save remainder. + // Note that lastBoundary looks back at most 31 runes. + i := lastBoundary(&w.rb.f, w.buf) + if i == -1 { + i = 0 + } + if i > 0 { + if _, err = w.w.Write(w.buf[:i]); err != nil { + break + } + bn := copy(w.buf, w.buf[i:]) + w.buf = w.buf[:bn] + } + } + return n, err +} + +// Close forces data that remains in the buffer to be written. +func (w *normWriter) Close() error { + if len(w.buf) > 0 { + _, err := w.w.Write(w.buf) + if err != nil { + return err + } + } + return nil +} + +// Writer returns a new writer that implements Write(b) +// by writing f(b) to w. The returned writer may use an +// an internal buffer to maintain state across Write calls. +// Calling its Close method writes any buffered data to w. +func (f Form) Writer(w io.Writer) io.WriteCloser { + wr := &normWriter{rb: reorderBuffer{}, w: w} + wr.rb.init(f, nil) + return wr +} + +type normReader struct { + rb reorderBuffer + r io.Reader + inbuf []byte + outbuf []byte + bufStart int + lastBoundary int + err error +} + +// Read implements the standard read interface. +func (r *normReader) Read(p []byte) (int, error) { + for { + if r.lastBoundary-r.bufStart > 0 { + n := copy(p, r.outbuf[r.bufStart:r.lastBoundary]) + r.bufStart += n + if r.lastBoundary-r.bufStart > 0 { + return n, nil + } + return n, r.err + } + if r.err != nil { + return 0, r.err + } + outn := copy(r.outbuf, r.outbuf[r.lastBoundary:]) + r.outbuf = r.outbuf[0:outn] + r.bufStart = 0 + + n, err := r.r.Read(r.inbuf) + r.rb.src = inputBytes(r.inbuf[0:n]) + r.rb.nsrc, r.err = n, err + if n > 0 { + r.outbuf = doAppend(&r.rb, r.outbuf, 0) + } + if err == io.EOF { + r.lastBoundary = len(r.outbuf) + } else { + r.lastBoundary = lastBoundary(&r.rb.f, r.outbuf) + if r.lastBoundary == -1 { + r.lastBoundary = 0 + } + } + } +} + +// Reader returns a new reader that implements Read +// by reading data from r and returning f(data). +func (f Form) Reader(r io.Reader) io.Reader { + const chunk = 4000 + buf := make([]byte, chunk) + rr := &normReader{rb: reorderBuffer{}, r: r, inbuf: buf} + rr.rb.init(f, buf) + return rr +} diff --git a/vendor/golang.org/x/text/unicode/norm/readwriter_test.go b/vendor/golang.org/x/text/unicode/norm/readwriter_test.go new file mode 100644 index 0000000..b7756ba --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/readwriter_test.go @@ -0,0 +1,56 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import ( + "bytes" + "fmt" + "testing" +) + +var bufSizes = []int{1, 2, 3, 4, 5, 6, 7, 8, 100, 101, 102, 103, 4000, 4001, 4002, 4003} + +func readFunc(size int) appendFunc { + return func(f Form, out []byte, s string) []byte { + out = append(out, s...) + r := f.Reader(bytes.NewBuffer(out)) + buf := make([]byte, size) + result := []byte{} + for n, err := 0, error(nil); err == nil; { + n, err = r.Read(buf) + result = append(result, buf[:n]...) + } + return result + } +} + +func TestReader(t *testing.T) { + for _, s := range bufSizes { + name := fmt.Sprintf("TestReader%d", s) + runNormTests(t, name, readFunc(s)) + } +} + +func writeFunc(size int) appendFunc { + return func(f Form, out []byte, s string) []byte { + in := append(out, s...) + result := new(bytes.Buffer) + w := f.Writer(result) + buf := make([]byte, size) + for n := 0; len(in) > 0; in = in[n:] { + n = copy(buf, in) + _, _ = w.Write(buf[:n]) + } + w.Close() + return result.Bytes() + } +} + +func TestWriter(t *testing.T) { + for _, s := range bufSizes { + name := fmt.Sprintf("TestWriter%d", s) + runNormTests(t, name, writeFunc(s)) + } +} diff --git a/vendor/golang.org/x/text/unicode/norm/tables.go b/vendor/golang.org/x/text/unicode/norm/tables.go new file mode 100644 index 0000000..bf9ff80 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/tables.go @@ -0,0 +1,7631 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package norm + +const ( + // Version is the Unicode edition from which the tables are derived. + Version = "9.0.0" + + // MaxTransformChunkSize indicates the maximum number of bytes that Transform + // may need to write atomically for any Form. Making a destination buffer at + // least this size ensures that Transform can always make progress and that + // the user does not need to grow the buffer on an ErrShortDst. + MaxTransformChunkSize = 35 + maxNonStarters*4 +) + +var ccc = [55]uint8{ + 0, 1, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, + 84, 91, 103, 107, 118, 122, 129, 130, + 132, 202, 214, 216, 218, 220, 222, 224, + 226, 228, 230, 232, 233, 234, 240, +} + +const ( + firstMulti = 0x186D + firstCCC = 0x2C9E + endMulti = 0x2F60 + firstLeadingCCC = 0x49AE + firstCCCZeroExcept = 0x4A78 + firstStarterWithNLead = 0x4A9F + lastDecomp = 0x4AA1 + maxDecomp = 0x8000 +) + +// decomps: 19105 bytes +var decomps = [...]byte{ + // Bytes 0 - 3f + 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, + 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, + 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, + 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, + 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, + 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, + 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, + 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, + // Bytes 40 - 7f + 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, + 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, + 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, + 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, + 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, + 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, + 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, + 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, + // Bytes 80 - bf + 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, + 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, + 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, + 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, + 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, + 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, + 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, + 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, + // Bytes c0 - ff + 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, + 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, + 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42, + 0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, + 0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, + 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, + 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, + 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, + // Bytes 100 - 13f + 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42, + 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F, + 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9, + 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42, + 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB, + 0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9, + 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, + 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, + // Bytes 140 - 17f + 0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, + 0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42, + 0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, + 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, + 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42, + 0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F, + 0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE, + 0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42, + // Bytes 180 - 1bf + 0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97, + 0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE, + 0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42, + 0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F, + 0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE, + 0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42, + 0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8, + 0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE, + // Bytes 1c0 - 1ff + 0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42, + 0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7, + 0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE, + 0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42, + 0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF, + 0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF, + 0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42, + 0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87, + // Bytes 200 - 23f + 0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF, + 0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42, + 0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90, + 0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7, + 0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42, + 0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2, + 0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8, + 0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42, + // Bytes 240 - 27f + 0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB, + 0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8, + 0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42, + 0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3, + 0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8, + 0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42, + 0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81, + 0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9, + // Bytes 280 - 2bf + 0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42, + 0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89, + 0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9, + 0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42, + 0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE, + 0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA, + 0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42, + 0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C, + // Bytes 2c0 - 2ff + 0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA, + 0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42, + 0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9, + 0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA, + 0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42, + 0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81, + 0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB, + 0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42, + // Bytes 300 - 33f + 0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90, + 0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43, + 0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43, + 0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43, + 0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43, + 0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43, + 0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43, + 0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43, + // Bytes 340 - 37f + 0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43, + 0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43, + 0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43, + 0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43, + 0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43, + 0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43, + 0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43, + 0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43, + // Bytes 380 - 3bf + 0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43, + 0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43, + 0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43, + 0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43, + 0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43, + 0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43, + 0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43, + 0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43, + // Bytes 3c0 - 3ff + 0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43, + 0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43, + 0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43, + 0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43, + 0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43, + 0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43, + 0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43, + 0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43, + // Bytes 400 - 43f + 0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43, + 0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43, + 0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43, + 0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43, + 0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43, + 0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43, + 0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43, + 0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, + // Bytes 440 - 47f + 0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, + 0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, + 0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, + 0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, + 0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, + 0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, + 0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, + 0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, + // Bytes 480 - 4bf + 0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43, + 0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43, + 0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43, + 0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43, + 0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43, + 0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43, + 0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43, + 0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43, + // Bytes 4c0 - 4ff + 0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43, + 0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43, + 0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43, + 0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43, + 0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43, + 0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43, + 0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43, + 0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43, + // Bytes 500 - 53f + 0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43, + 0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43, + 0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43, + 0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43, + 0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43, + 0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43, + 0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43, + 0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43, + // Bytes 540 - 57f + 0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43, + 0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43, + 0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43, + 0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43, + 0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43, + 0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43, + 0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43, + 0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43, + // Bytes 580 - 5bf + 0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43, + 0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43, + 0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43, + 0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43, + 0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43, + 0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43, + 0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43, + 0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43, + // Bytes 5c0 - 5ff + 0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43, + 0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43, + 0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43, + 0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43, + 0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43, + 0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43, + 0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43, + 0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43, + // Bytes 600 - 63f + 0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43, + 0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43, + 0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43, + 0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43, + 0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43, + 0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43, + 0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43, + 0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43, + // Bytes 640 - 67f + 0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43, + 0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43, + 0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43, + 0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43, + 0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43, + 0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43, + 0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43, + 0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43, + // Bytes 680 - 6bf + 0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43, + 0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43, + 0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43, + 0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43, + 0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43, + 0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43, + 0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43, + 0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43, + // Bytes 6c0 - 6ff + 0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43, + 0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43, + 0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43, + 0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43, + 0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43, + 0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43, + 0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43, + 0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43, + // Bytes 700 - 73f + 0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43, + 0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43, + 0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43, + 0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43, + 0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43, + 0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43, + 0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43, + 0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43, + // Bytes 740 - 77f + 0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43, + 0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43, + 0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43, + 0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43, + 0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43, + 0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43, + 0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43, + 0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43, + // Bytes 780 - 7bf + 0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43, + 0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43, + 0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43, + 0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43, + 0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43, + 0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43, + 0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43, + 0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43, + // Bytes 7c0 - 7ff + 0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43, + 0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43, + 0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43, + 0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43, + 0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43, + 0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43, + 0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43, + 0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43, + // Bytes 800 - 83f + 0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43, + 0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43, + 0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43, + 0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43, + 0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43, + 0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43, + 0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43, + 0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43, + // Bytes 840 - 87f + 0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43, + 0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43, + 0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43, + 0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43, + 0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43, + 0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43, + 0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43, + 0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43, + // Bytes 880 - 8bf + 0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43, + 0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43, + 0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43, + 0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43, + 0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43, + 0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43, + 0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43, + 0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43, + // Bytes 8c0 - 8ff + 0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43, + 0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43, + 0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43, + 0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43, + 0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43, + 0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43, + 0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43, + 0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43, + // Bytes 900 - 93f + 0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43, + 0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43, + 0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43, + 0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43, + 0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43, + 0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43, + 0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43, + 0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43, + // Bytes 940 - 97f + 0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43, + 0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43, + 0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43, + 0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43, + 0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43, + 0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43, + 0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43, + 0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43, + // Bytes 980 - 9bf + 0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43, + 0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43, + 0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43, + 0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43, + 0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43, + 0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43, + 0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43, + 0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43, + // Bytes 9c0 - 9ff + 0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43, + 0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43, + 0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43, + 0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43, + 0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43, + 0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43, + 0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43, + 0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43, + // Bytes a00 - a3f + 0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43, + 0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43, + 0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43, + 0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43, + 0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43, + 0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43, + 0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43, + 0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43, + // Bytes a40 - a7f + 0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43, + 0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43, + 0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43, + 0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43, + 0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43, + 0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43, + 0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43, + 0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43, + // Bytes a80 - abf + 0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43, + 0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43, + 0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43, + 0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43, + 0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43, + 0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43, + 0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43, + 0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43, + // Bytes ac0 - aff + 0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43, + 0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43, + 0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43, + 0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43, + 0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43, + 0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43, + 0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43, + 0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43, + // Bytes b00 - b3f + 0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43, + 0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43, + 0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43, + 0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43, + 0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43, + 0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43, + 0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43, + 0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43, + // Bytes b40 - b7f + 0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43, + 0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43, + 0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43, + 0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43, + 0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43, + 0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43, + 0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43, + 0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43, + // Bytes b80 - bbf + 0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43, + 0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43, + 0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43, + 0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43, + 0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43, + 0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43, + 0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43, + 0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43, + // Bytes bc0 - bff + 0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43, + 0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43, + 0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43, + 0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43, + 0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43, + 0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43, + 0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43, + 0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43, + // Bytes c00 - c3f + 0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43, + 0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43, + 0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43, + 0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43, + 0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43, + 0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43, + 0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43, + 0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43, + // Bytes c40 - c7f + 0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43, + 0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43, + 0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43, + 0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43, + 0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43, + 0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43, + 0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43, + 0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43, + // Bytes c80 - cbf + 0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43, + 0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43, + 0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43, + 0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43, + 0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43, + 0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43, + 0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43, + 0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43, + // Bytes cc0 - cff + 0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43, + 0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43, + 0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43, + 0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43, + 0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43, + 0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43, + 0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43, + 0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43, + // Bytes d00 - d3f + 0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43, + 0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43, + 0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43, + 0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43, + 0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43, + 0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43, + 0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43, + 0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43, + // Bytes d40 - d7f + 0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43, + 0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43, + 0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43, + 0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43, + 0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43, + 0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43, + 0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43, + 0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43, + // Bytes d80 - dbf + 0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43, + 0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43, + 0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43, + 0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43, + 0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43, + 0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43, + 0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43, + 0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43, + // Bytes dc0 - dff + 0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43, + 0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43, + 0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43, + 0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43, + 0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43, + 0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43, + 0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43, + 0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43, + // Bytes e00 - e3f + 0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43, + 0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43, + 0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43, + 0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43, + 0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43, + 0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43, + 0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43, + 0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43, + // Bytes e40 - e7f + 0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43, + 0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43, + 0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43, + 0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43, + 0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43, + 0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43, + 0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43, + 0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43, + // Bytes e80 - ebf + 0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43, + 0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43, + 0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43, + 0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43, + 0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43, + 0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43, + 0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43, + 0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43, + // Bytes ec0 - eff + 0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43, + 0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43, + 0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43, + 0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43, + 0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43, + 0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43, + 0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43, + 0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43, + // Bytes f00 - f3f + 0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43, + 0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43, + 0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43, + 0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43, + 0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43, + 0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43, + 0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43, + 0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43, + // Bytes f40 - f7f + 0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43, + 0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43, + 0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43, + 0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43, + 0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43, + 0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43, + 0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43, + 0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43, + // Bytes f80 - fbf + 0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43, + 0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43, + 0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43, + 0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43, + 0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43, + 0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43, + 0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43, + 0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43, + // Bytes fc0 - fff + 0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43, + 0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43, + 0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43, + 0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43, + 0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43, + 0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43, + 0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43, + 0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43, + // Bytes 1000 - 103f + 0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43, + 0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43, + 0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43, + 0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43, + 0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43, + 0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43, + 0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43, + 0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43, + // Bytes 1040 - 107f + 0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43, + 0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43, + 0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43, + 0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43, + 0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43, + 0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43, + 0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43, + 0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43, + // Bytes 1080 - 10bf + 0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43, + 0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43, + 0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43, + 0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43, + 0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43, + 0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43, + 0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43, + 0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43, + // Bytes 10c0 - 10ff + 0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43, + 0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43, + 0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43, + 0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43, + 0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43, + 0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43, + 0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43, + 0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43, + // Bytes 1100 - 113f + 0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43, + 0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43, + 0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43, + 0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43, + 0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43, + 0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43, + 0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43, + 0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43, + // Bytes 1140 - 117f + 0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43, + 0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43, + 0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43, + 0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43, + 0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43, + 0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43, + 0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43, + 0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43, + // Bytes 1180 - 11bf + 0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43, + 0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43, + 0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43, + 0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43, + 0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43, + 0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43, + 0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43, + 0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43, + // Bytes 11c0 - 11ff + 0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43, + 0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43, + 0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43, + 0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43, + 0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43, + 0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43, + 0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43, + 0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43, + // Bytes 1200 - 123f + 0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43, + 0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43, + 0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43, + 0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43, + 0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43, + 0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43, + 0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43, + 0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43, + // Bytes 1240 - 127f + 0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43, + 0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43, + 0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43, + 0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43, + 0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43, + 0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43, + 0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43, + 0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43, + // Bytes 1280 - 12bf + 0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43, + 0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43, + 0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43, + 0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43, + 0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43, + 0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43, + 0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43, + 0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43, + // Bytes 12c0 - 12ff + 0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43, + 0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43, + 0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43, + 0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43, + 0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43, + 0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43, + 0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43, + 0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43, + // Bytes 1300 - 133f + 0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43, + 0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43, + 0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43, + 0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43, + 0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43, + 0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43, + 0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43, + 0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43, + // Bytes 1340 - 137f + 0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43, + 0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43, + 0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43, + 0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43, + 0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43, + 0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43, + 0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43, + 0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43, + // Bytes 1380 - 13bf + 0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43, + 0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43, + 0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43, + 0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43, + 0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43, + 0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43, + 0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43, + 0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43, + // Bytes 13c0 - 13ff + 0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43, + 0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43, + 0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43, + 0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43, + 0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43, + 0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43, + 0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43, + 0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43, + // Bytes 1400 - 143f + 0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43, + 0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43, + 0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43, + 0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43, + 0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43, + 0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43, + 0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43, + 0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43, + // Bytes 1440 - 147f + 0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43, + 0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43, + 0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43, + 0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43, + 0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43, + 0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43, + 0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43, + 0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43, + // Bytes 1480 - 14bf + 0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43, + 0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43, + 0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43, + 0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43, + 0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43, + 0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43, + 0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43, + 0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43, + // Bytes 14c0 - 14ff + 0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43, + 0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43, + 0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43, + 0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43, + 0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43, + 0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43, + 0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43, + 0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43, + // Bytes 1500 - 153f + 0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43, + 0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43, + 0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43, + 0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43, + 0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43, + 0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43, + 0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43, + 0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43, + // Bytes 1540 - 157f + 0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43, + 0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43, + 0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43, + 0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43, + 0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43, + 0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43, + 0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43, + 0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43, + // Bytes 1580 - 15bf + 0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43, + 0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43, + 0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43, + 0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43, + 0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43, + 0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43, + 0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43, + 0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43, + // Bytes 15c0 - 15ff + 0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43, + 0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43, + 0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43, + 0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43, + 0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43, + 0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43, + 0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43, + 0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43, + // Bytes 1600 - 163f + 0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43, + 0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43, + 0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43, + 0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43, + 0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43, + 0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43, + 0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43, + 0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43, + // Bytes 1640 - 167f + 0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44, + 0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94, + 0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0, + 0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA, + 0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0, + 0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44, + 0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93, + 0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0, + // Bytes 1680 - 16bf + 0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88, + 0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1, + 0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44, + 0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86, + 0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0, + 0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94, + 0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2, + 0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44, + // Bytes 16c0 - 16ff + 0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80, + 0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0, + 0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93, + 0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3, + 0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44, + 0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A, + 0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0, + 0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA, + // Bytes 1700 - 173f + 0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3, + 0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44, + 0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE, + 0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0, + 0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB, + 0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4, + 0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44, + 0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2, + // Bytes 1740 - 177f + 0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0, + 0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84, + 0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5, + 0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44, + 0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89, + 0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0, + 0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A, + 0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5, + // Bytes 1780 - 17bf + 0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44, + 0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2, + 0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0, + 0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A, + 0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6, + 0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44, + 0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93, + 0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0, + // Bytes 17c0 - 17ff + 0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7, + 0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6, + 0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44, + 0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5, + 0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0, + 0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92, + 0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7, + 0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44, + // Bytes 1800 - 183f + 0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2, + 0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0, + 0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92, + 0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8, + 0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44, + 0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85, + 0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0, + 0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A, + // Bytes 1840 - 187f + 0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9, + 0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44, + 0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84, + 0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0, + 0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92, + 0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21, + 0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30, + 0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42, + // Bytes 1880 - 18bf + 0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31, + 0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31, + 0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42, + 0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39, + 0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32, + 0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42, + 0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35, + 0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32, + // Bytes 18c0 - 18ff + 0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42, + 0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31, + 0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33, + 0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42, + 0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39, + 0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34, + 0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42, + 0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35, + // Bytes 1900 - 193f + 0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34, + 0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42, + 0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C, + 0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37, + 0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42, + 0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D, + 0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41, + 0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42, + // Bytes 1940 - 197f + 0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A, + 0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48, + 0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42, + 0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A, + 0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49, + 0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42, + 0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A, + 0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D, + // Bytes 1980 - 19bf + 0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, + 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, + 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, + 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, + 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, + 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, + 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, + 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, + // Bytes 19c0 - 19ff + 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, + 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, + 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, + 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, + 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, + 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, + 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, + 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, + // Bytes 1a00 - 1a3f + 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, + 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, + 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, + 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, + 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, + 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, + 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, + 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, + // Bytes 1a40 - 1a7f + 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, + 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, + 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, + 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, + 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, + 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, + 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, + 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, + // Bytes 1a80 - 1abf + 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, + 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, + 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, + 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, + 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, + 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, + 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, + 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, + // Bytes 1ac0 - 1aff + 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, + 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, + 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, + 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, + 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, + 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, + 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, + 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, + // Bytes 1b00 - 1b3f + 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, + 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, + 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, + 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, + 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, + 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, + 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, + 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, + // Bytes 1b40 - 1b7f + 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, + 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, + 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, + 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, + 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, + 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, + 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, + 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, + // Bytes 1b80 - 1bbf + 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, + 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, + 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, + 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, + 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, + 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, + 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, + 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, + // Bytes 1bc0 - 1bff + 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, + 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, + 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, + 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, + 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, + 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, + 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, + 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, + // Bytes 1c00 - 1c3f + 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, + 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, + 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, + 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, + 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, + 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, + 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, + 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, + // Bytes 1c40 - 1c7f + 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, + 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, + 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, + 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, + 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, + 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, + 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, + 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, + // Bytes 1c80 - 1cbf + 0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, + 0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, + 0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, + 0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, + 0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, + 0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, + 0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, + 0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, + // Bytes 1cc0 - 1cff + 0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, + 0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, + 0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, + 0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, + 0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, + 0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, + 0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, + 0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, + // Bytes 1d00 - 1d3f + 0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, + 0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, + 0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, + 0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, + 0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, + 0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, + 0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, + 0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, + // Bytes 1d40 - 1d7f + 0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, + 0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, + 0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, + 0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, + 0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, + 0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, + 0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, + 0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, + // Bytes 1d80 - 1dbf + 0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, + 0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, + 0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, + 0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, + 0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, + 0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, + 0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, + 0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, + // Bytes 1dc0 - 1dff + 0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, + 0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, + 0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, + 0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, + 0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, + 0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, + 0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, + 0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, + // Bytes 1e00 - 1e3f + 0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, + 0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, + 0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, + 0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, + 0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, + 0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, + 0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, + 0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, + // Bytes 1e40 - 1e7f + 0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, + 0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, + 0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, + 0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, + 0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, + 0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, + 0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, + 0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, + // Bytes 1e80 - 1ebf + 0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, + 0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, + 0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, + 0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, + 0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, + 0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, + 0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, + 0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, + // Bytes 1ec0 - 1eff + 0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, + 0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, + 0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, + 0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, + 0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, + 0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, + 0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, + 0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, + // Bytes 1f00 - 1f3f + 0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, + 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, + 0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, + 0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, + 0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, + 0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, + 0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, + 0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, + // Bytes 1f40 - 1f7f + 0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, + 0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, + 0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, + 0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, + 0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, + 0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, + 0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, + 0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, + // Bytes 1f80 - 1fbf + 0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, + 0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, + 0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, + 0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, + 0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, + 0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, + 0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, + 0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, + // Bytes 1fc0 - 1fff + 0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, + 0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, + 0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, + 0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, + 0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, + 0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, + 0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, + 0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, + // Bytes 2000 - 203f + 0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, + 0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, + 0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, + 0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, + 0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, + 0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, + 0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, + 0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, + // Bytes 2040 - 207f + 0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, + 0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, + 0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, + 0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, + // Bytes 2080 - 20bf + 0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, + 0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, + 0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, + 0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, + // Bytes 20c0 - 20ff + 0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, + 0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, + 0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, + 0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, + 0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, + 0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, + 0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, + 0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, + // Bytes 2100 - 213f + 0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, + 0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, + 0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, + 0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, + 0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, + 0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, + 0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, + 0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, + // Bytes 2140 - 217f + 0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, + 0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, + 0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, + 0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, + 0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, + 0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, + 0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, + 0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, + // Bytes 2180 - 21bf + 0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, + 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, + 0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, + 0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, + 0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, + 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, + // Bytes 21c0 - 21ff + 0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, + // Bytes 2200 - 223f + 0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, + 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, + 0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, + 0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, + 0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, + 0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, + // Bytes 2240 - 227f + 0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, + 0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, + 0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, + // Bytes 2280 - 22bf + 0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, + 0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, + 0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, + 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, + 0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, + 0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, + // Bytes 22c0 - 22ff + 0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, + 0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, + 0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, + 0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, + 0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, + 0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, + 0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, + 0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, + // Bytes 2300 - 233f + 0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, + 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, + 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, + 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, + 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, + 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, + 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, + // Bytes 2340 - 237f + 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, + 0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, + 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, + 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, + 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, + 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, + // Bytes 2380 - 23bf + 0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, + 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, + 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, + 0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, + 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, + 0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, + // Bytes 23c0 - 23ff + 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, + 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, + 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, + 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, + 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, + 0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, + 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, + // Bytes 2400 - 243f + 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, + 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, + 0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, + 0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, + 0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, + 0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, + 0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, + 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, + // Bytes 2440 - 247f + 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, + 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, + 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, + 0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, + 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, + 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, + 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, + // Bytes 2480 - 24bf + 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, + 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, + 0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, + 0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, + 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, + 0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, + 0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, + // Bytes 24c0 - 24ff + 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, + 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, + 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, + 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, + 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, + 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, + 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, + // Bytes 2500 - 253f + 0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, + 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, + 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, + 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, + 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, + 0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, + 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, + 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, + // Bytes 2540 - 257f + 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, + 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, + 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, + 0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, + 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, + 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, + 0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, + // Bytes 2580 - 25bf + 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, + 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, + 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, + 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, + 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, + 0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, + // Bytes 25c0 - 25ff + 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, + 0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, + 0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, + 0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, + 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, + // Bytes 2600 - 263f + 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, + 0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, + 0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, + 0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, + 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, + 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, + 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, + // Bytes 2640 - 267f + 0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, + 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, + 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, + 0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, + 0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, + 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, + 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, + 0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, + // Bytes 2680 - 26bf + 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, + 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, + 0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, + 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, + 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, + 0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, + 0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, + // Bytes 26c0 - 26ff + 0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, + 0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, + 0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, + 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, + 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, + 0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, + 0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, + 0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, + // Bytes 2700 - 273f + 0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, + 0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46, + 0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72, + 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3, + 0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28, + 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, + // Bytes 2740 - 277f + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87, + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, + 0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, + 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, + // Bytes 2780 - 27bf + 0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91, + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, + 0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61, + 0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8, + 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, + // Bytes 27c0 - 27ff + 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, + 0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9, + 0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, + 0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8, + 0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84, + 0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8, + 0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88, + 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, + // Bytes 2800 - 283f + 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, + 0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88, + 0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE, + 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3, + 0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95, + 0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, + 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, + // Bytes 2840 - 287f + 0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, + 0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, + 0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95, + 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3, + 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C, + 0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, + 0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3, + 0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, + // Bytes 2880 - 28bf + 0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6, + 0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, + 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, + 0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, + // Bytes 28c0 - 28ff + 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3, + 0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A, + 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, + 0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86, + 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3, + 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, + 0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, + // Bytes 2900 - 293f + 0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, + 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, + 0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3, + 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82, + 0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, + // Bytes 2940 - 297f + 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, + 0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E, + 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3, + 0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF, + 0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, + // Bytes 2980 - 29bf + 0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF, + 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2, + 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2, + 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, + 0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82, + 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, + // Bytes 29c0 - 29ff + 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB, + 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, + 0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD, + 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, + 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, + // Bytes 2a00 - 2a3f + 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, + 0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, + 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82, + 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82, + 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, + 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + // Bytes 2a40 - 2a7f + 0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, + 0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF, + 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, + // Bytes 2a80 - 2abf + 0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3, + 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C, + 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82, + 0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, + 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, + // Bytes 2ac0 - 2aff + 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, + 0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, + 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, + 0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, + 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1, + 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, + 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, + // Bytes 2b00 - 2b3f + 0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, + 0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2, + 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2, + 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, + 0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD, + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, + 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, + // Bytes 2b40 - 2b7f + 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83, + 0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83, + 0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B, + 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, + // Bytes 2b80 - 2bbf + 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83, + 0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, + // Bytes 2bc0 - 2bff + 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, + 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD, + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83, + 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + // Bytes 2c00 - 2c3f + 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83, + 0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3, + 0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, + 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, + 0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, + 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, + // Bytes 2c40 - 2c7f + 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, + 0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3, + 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, + // Bytes 2c80 - 2cbf + 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, + 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, + 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, + 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0, + 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0, + 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0, + 0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0, + 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, + // Bytes 2cc0 - 2cff + 0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0, + 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, + 0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, + 0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, + 0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, + 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, + 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, + 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, + // Bytes 2d00 - 2d3f + 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, + 0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0, + 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, + 0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1, + 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1, + 0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + // Bytes 2d40 - 2d7f + 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, + // Bytes 2d80 - 2dbf + 0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, + 0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, + 0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, + 0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, + 0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, + 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, + 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, + 0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, + // Bytes 2dc0 - 2dff + 0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, + 0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, + 0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, + 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, + 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, + 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44, + 0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC, + 0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9, + // Bytes 2e00 - 2e3f + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9, + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, + 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, + // Bytes 2e40 - 2e7f + 0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01, + 0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, + // Bytes 2e80 - 2ebf + 0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01, + 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, + 0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, + 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, + 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + // Bytes 2ec0 - 2eff + 0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83, + 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, + 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, + 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82, + 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, + // Bytes 2f00 - 2f3f + 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F, + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, + 0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95, + // Bytes 2f40 - 2f7f + 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01, + 0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01, + 0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC, + 0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, + 0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81, + 0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41, + // Bytes 2f80 - 2fbf + 0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9, + 0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC, + 0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03, + 0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8, + 0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42, + 0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5, + 0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC, + 0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03, + // Bytes 2fc0 - 2fff + 0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87, + 0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44, + 0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5, + 0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC, + 0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03, + 0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83, + 0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45, + 0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9, + // Bytes 3000 - 303f + 0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC, + 0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03, + 0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8, + 0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45, + 0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9, + 0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC, + 0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03, + 0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87, + // Bytes 3040 - 307f + 0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47, + 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9, + 0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC, + 0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03, + 0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7, + 0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49, + 0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9, + 0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC, + // Bytes 3080 - 30bf + 0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03, + 0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87, + 0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49, + 0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9, + 0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC, + 0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03, + 0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82, + 0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B, + // Bytes 30c0 - 30ff + 0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5, + 0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC, + 0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03, + 0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7, + 0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C, + 0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9, + 0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC, + 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03, + // Bytes 3100 - 313f + 0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83, + 0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E, + 0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5, + 0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC, + 0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03, + 0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81, + 0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F, + 0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9, + // Bytes 3140 - 317f + 0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC, + 0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03, + 0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87, + 0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52, + 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9, + 0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC, + 0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03, + 0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82, + // Bytes 3180 - 31bf + 0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53, + 0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5, + 0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC, + 0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03, + 0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7, + 0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54, + 0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9, + 0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC, + // Bytes 31c0 - 31ff + 0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03, + 0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A, + 0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55, + 0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9, + 0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC, + 0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03, + 0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD, + 0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56, + // Bytes 3200 - 323f + 0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5, + 0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC, + 0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03, + 0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88, + 0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58, + 0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9, + 0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC, + 0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03, + // Bytes 3240 - 327f + 0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84, + 0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59, + 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9, + 0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC, + 0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03, + 0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C, + 0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, + 0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9, + // Bytes 3280 - 32bf + 0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC, + 0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03, + 0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C, + 0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61, + 0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5, + 0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC, + 0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03, + 0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81, + // Bytes 32c0 - 32ff + 0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63, + 0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9, + 0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC, + 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03, + 0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD, + 0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65, + 0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9, + 0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC, + // Bytes 3300 - 333f + 0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03, + 0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89, + 0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65, + 0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9, + 0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC, + 0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03, + 0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81, + 0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67, + // Bytes 3340 - 337f + 0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9, + 0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, + 0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03, + 0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87, + 0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68, + 0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5, + 0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC, + 0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03, + // Bytes 3380 - 33bf + 0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81, + 0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69, + 0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9, + 0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC, + 0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03, + 0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91, + 0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69, + 0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5, + // Bytes 33c0 - 33ff + 0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC, + 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03, + 0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3, + 0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B, + 0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9, + 0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC, + 0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03, + 0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81, + // Bytes 3400 - 343f + 0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D, + 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9, + 0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC, + 0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03, + 0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3, + 0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E, + 0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5, + 0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC, + // Bytes 3440 - 347f + 0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03, + 0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B, + 0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F, + 0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9, + 0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC, + 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03, + 0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C, + 0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72, + // Bytes 3480 - 34bf + 0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5, + 0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC, + 0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03, + 0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7, + 0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74, + 0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9, + 0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC, + 0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03, + // Bytes 34c0 - 34ff + 0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1, + 0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75, + 0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9, + 0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC, + 0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03, + 0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C, + 0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75, + 0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5, + // Bytes 3500 - 353f + 0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC, + 0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03, + 0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83, + 0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77, + 0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9, + 0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC, + 0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03, + 0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3, + // Bytes 3540 - 357f + 0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78, + 0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9, + 0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC, + 0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03, + 0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87, + 0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79, + 0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9, + 0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC, + // Bytes 3580 - 35bf + 0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03, + 0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C, + 0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, + 0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80, + 0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04, + 0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86, + 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84, + 0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04, + // Bytes 35c0 - 35ff + 0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6, + 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81, + 0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04, + 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92, + 0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80, + 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04, + 0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85, + // Bytes 3600 - 363f + 0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04, + 0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99, + 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84, + 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04, + 0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F, + // Bytes 3640 - 367f + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04, + 0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5, + 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84, + 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04, + 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9, + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04, + // Bytes 3680 - 36bf + 0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85, + 0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7, + 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80, + 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04, + 0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82, + // Bytes 36c0 - 36ff + 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81, + 0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94, + 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04, + 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85, + 0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86, + 0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04, + 0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92, + // Bytes 3700 - 373f + 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81, + 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04, + 0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04, + // Bytes 3740 - 377f + 0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98, + 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84, + 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04, + 0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A, + 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04, + 0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, + // Bytes 3780 - 37bf + 0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5, + 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6, + // Bytes 37c0 - 37ff + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04, + 0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8, + 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04, + 0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83, + 0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86, + 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04, + // Bytes 3800 - 383f + 0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87, + 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88, + 0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04, + 0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4, + 0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, + 0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04, + 0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8, + 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88, + // Bytes 3840 - 387f + 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04, + 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7, + 0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94, + 0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04, + 0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92, + 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94, + 0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA, + 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, + // Bytes 3880 - 38bf + 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41, + 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, + 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86, + 0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, + 0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, + 0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA, + 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, + 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41, + // Bytes 38c0 - 38ff + 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC, + 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7, + 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, + 0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, + 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA, + 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, + 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45, + 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, + // Bytes 3900 - 393f + 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7, + 0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC, + 0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, + 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, + 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, + 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F, + 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC, + 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83, + // Bytes 3940 - 397f + 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC, + 0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, + 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, + 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, + 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F, + 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, + 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, + 0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, + // Bytes 3980 - 39bf + 0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, + 0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, + 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, + 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53, + 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, + 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3, + 0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC, + 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, + // Bytes 39c0 - 39ff + 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, + 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55, + 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC, + 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B, + 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, + 0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, + 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, + // Bytes 3a00 - 3a3f + 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, + 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61, + 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, + 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86, + 0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, + 0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, + 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA, + 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, + // Bytes 3a40 - 3a7f + 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61, + 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC, + 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3, + 0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC, + 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, + 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA, + 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, + 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65, + // Bytes 3a80 - 3abf + 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, + 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3, + 0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC, + 0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, + 0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, + 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, + 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F, + 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC, + // Bytes 3ac0 - 3aff + 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83, + 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, + 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, + 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA, + 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, + 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F, + 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, + 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, + // Bytes 3b00 - 3b3f + 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, + 0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, + 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, + 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, + 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72, + 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC, + 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C, + 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC, + // Bytes 3b40 - 3b7f + 0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, + 0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA, + 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05, + 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75, + 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC, + 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B, + 0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, + 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, + // Bytes 3b80 - 3bbf + 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA, + 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05, + 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1, + 0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE, + 0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, + 0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, + 0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, + 0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, + // Bytes 3bc0 - 3bff + 0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, + 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, + // Bytes 3c00 - 3c3f + 0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, + 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + // Bytes 3c40 - 3c7f + 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, + 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + // Bytes 3c80 - 3cbf + 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, + // Bytes 3cc0 - 3cff + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05, + 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + // Bytes 3d00 - 3d3f + 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + // Bytes 3d40 - 3d7f + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + // Bytes 3d80 - 3dbf + 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + // Bytes 3dc0 - 3dff + 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + // Bytes 3e00 - 3e3f + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + // Bytes 3e40 - 3e7f + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA, + // Bytes 3e80 - 3ebf + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + // Bytes 3ec0 - 3eff + 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85, + 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11, + // Bytes 3f00 - 3f3f + 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 3f40 - 3f7f + 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 3f80 - 3fbf + 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D, + // Bytes 3fc0 - 3fff + 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4000 - 403f + 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4040 - 407f + 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4080 - 40bf + 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 40c0 - 40ff + 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D, + 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + // Bytes 4100 - 413f + 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + // Bytes 4140 - 417f + 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, + // Bytes 4180 - 41bf + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + // Bytes 41c0 - 41ff + 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, + // Bytes 4200 - 423f + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, + 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF, + 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, + // Bytes 4240 - 427f + 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, + 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, + 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2, + 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43, + 0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84, + 0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20, + 0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9, + 0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC, + // Bytes 4280 - 42bf + 0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43, + 0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94, + 0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20, + 0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5, + 0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD, + 0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43, + 0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D, + 0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20, + // Bytes 42c0 - 42ff + 0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D, + 0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9, + 0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43, + 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82, + 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D, + 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE, + 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9, + // Bytes 4300 - 433f + 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, + 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, + 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC, + // Bytes 4340 - 437f + 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9, + 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7, + 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7, + 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7, + // Bytes 4380 - 43bf + 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7, + 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7, + 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41, + // Bytes 43c0 - 43ff + 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7, + 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49, + 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7, + 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7, + 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6, + // Bytes 4400 - 443f + 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31, + 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8, + 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, + 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, + 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8, + 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9, + 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65, + 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9, + // Bytes 4440 - 447f + 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9, + 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75, + 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9, + 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9, + 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, + 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB, + 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88, + 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC, + // Bytes 4480 - 44bf + 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, + 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45, + 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20, + 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, + 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94, + 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9, + 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, + // Bytes 44c0 - 44ff + 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72, + 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45, + 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20, + 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB, + 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, + 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC, + 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6, + 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6, + // Bytes 4500 - 453f + 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9, + 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, + 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, + 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1, + // Bytes 4540 - 457f + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97, + // Bytes 4580 - 45bf + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1, + 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2, + 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2, + 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3, + // Bytes 45c0 - 45ff + 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86, + 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85, + 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, + 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, + 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, + 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2, + 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49, + // Bytes 4600 - 463f + 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, + 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, + 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, + 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, + 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, + // Bytes 4640 - 467f + 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE, + 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, + 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, + 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, + 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, + 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, + // Bytes 4680 - 46bf + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, + 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC, + 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83, + 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A, + 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43, + 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9, + 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC, + 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83, + // Bytes 46c0 - 46ff + 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3, + 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F, + 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9, + 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC, + 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83, + 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8, + 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53, + 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9, + // Bytes 4700 - 473f + 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC, + 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83, + 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B, + 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61, + 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9, + 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC, + 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83, + 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82, + // Bytes 4740 - 477f + 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65, + 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5, + 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC, + 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83, + 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84, + 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F, + 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD, + 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, + // Bytes 4780 - 47bf + 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83, + 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C, + 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75, + 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9, + 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC, + 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC, + // Bytes 47c0 - 47ff + 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, + 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9, + 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE, + // Bytes 4800 - 483f + 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, + 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9, + 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE, + 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9, + 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE, + 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9, + // Bytes 4840 - 487f + 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE, + 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF, + 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC, + 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9, + 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF, + 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC, + // Bytes 4880 - 48bf + 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9, + 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + // Bytes 48c0 - 48ff + 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + // Bytes 4900 - 493f + 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + // Bytes 4940 - 497f + 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF, + // Bytes 4980 - 49bf + 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC, + 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32, + 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85, + // Bytes 49c0 - 49ff + 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01, + 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43, + 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01, + 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43, + 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, + 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, + // Bytes 4a00 - 4a3f + 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01, + 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43, + 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01, + 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, + 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, + // Bytes 4a40 - 4a7f + 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43, + 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86, + 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01, + 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43, + 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86, + 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, + 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, + 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, + // Bytes 4a80 - 4abf + 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1, + 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD, + 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00, + 0x01, +} + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfcTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfcValues[c0] + } + i := nfcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfcTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfcValues[c0] + } + i := nfcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// nfcTrie. Total size: 10332 bytes (10.09 KiB). Checksum: 51cc525b297fc970. +type nfcTrie struct{} + +func newNfcTrie(i int) *nfcTrie { + return &nfcTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 44: + return uint16(nfcValues[n<<6+uint32(b)]) + default: + n -= 44 + return uint16(nfcSparse.lookup(n, b)) + } +} + +// nfcValues: 46 blocks, 2944 entries, 5888 bytes +// The third block is the zero block. +var nfcValues = [2944]uint16{ + // Block 0x0, offset 0x0 + 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, + // Block 0x1, offset 0x40 + 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, + 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, + 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, + 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, + 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, + 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, + 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, + 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, + 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, + 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, + 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, + 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, + 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, + 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, + 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, + 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, + 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, + 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, + 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, + 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, + // Block 0x4, offset 0x100 + 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, + 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, + 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, + 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, + 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, + 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, + 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, + 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, + 0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0, + 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, + 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, + // Block 0x5, offset 0x140 + 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, + 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, + 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, + 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, + 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, + 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, + 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, + 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, + 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, + 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, + 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000, + // Block 0x6, offset 0x180 + 0x184: 0x8100, 0x185: 0x8100, + 0x186: 0x8100, + 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, + 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, + 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, + 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, + 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, + 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, + 0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334, + 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, + 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, + 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, + 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, + 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, + 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, + 0x1de: 0x305a, 0x1df: 0x3366, + 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, + 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, + 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, + // Block 0x8, offset 0x200 + 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, + 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, + 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, + 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, + 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, + 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, + 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, + 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, + 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, + 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, + // Block 0x9, offset 0x240 + 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, + 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, + 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, + 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, + 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, + 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, + 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, + 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, + 0x274: 0x0170, + 0x27a: 0x8100, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x8100, 0x285: 0x35a1, + 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, + 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, + 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b, + 0x2c6: 0xa000, 0x2c7: 0x3709, + 0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000, + 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, + 0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000, + 0x2de: 0xa000, 0x2e3: 0xa000, + 0x2e7: 0xa000, + 0x2eb: 0xa000, 0x2ed: 0xa000, + 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, + 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000, + 0x2fe: 0xa000, + // Block 0xc, offset 0x300 + 0x301: 0x3733, 0x302: 0x37b7, + 0x310: 0x370f, 0x311: 0x3793, + 0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab, + 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd, + 0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf, + 0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000, + 0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed, + 0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805, + 0x338: 0x3787, 0x339: 0x380b, + // Block 0xd, offset 0x340 + 0x351: 0x812d, + 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132, + 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132, + 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d, + 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132, + 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132, + 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a, + 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f, + 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112, + // Block 0xe, offset 0x380 + 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116, + 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c, + 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132, + 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132, + 0x39e: 0x8132, 0x39f: 0x812d, + 0x3b0: 0x811e, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xa000, + 0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000, + 0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000, + 0x3d2: 0x2d4e, + 0x3f4: 0x8102, 0x3f5: 0x9900, + 0x3fa: 0xa000, 0x3fb: 0x2d56, + 0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000, + // Block 0x10, offset 0x400 + 0x400: 0x2f97, 0x401: 0x32a3, 0x402: 0x2fa1, 0x403: 0x32ad, 0x404: 0x2fa6, 0x405: 0x32b2, + 0x406: 0x2fab, 0x407: 0x32b7, 0x408: 0x38cc, 0x409: 0x3a5b, 0x40a: 0x2fc4, 0x40b: 0x32d0, + 0x40c: 0x2fce, 0x40d: 0x32da, 0x40e: 0x2fdd, 0x40f: 0x32e9, 0x410: 0x2fd3, 0x411: 0x32df, + 0x412: 0x2fd8, 0x413: 0x32e4, 0x414: 0x38ef, 0x415: 0x3a7e, 0x416: 0x38f6, 0x417: 0x3a85, + 0x418: 0x3019, 0x419: 0x3325, 0x41a: 0x301e, 0x41b: 0x332a, 0x41c: 0x3904, 0x41d: 0x3a93, + 0x41e: 0x3023, 0x41f: 0x332f, 0x420: 0x3032, 0x421: 0x333e, 0x422: 0x3050, 0x423: 0x335c, + 0x424: 0x305f, 0x425: 0x336b, 0x426: 0x3055, 0x427: 0x3361, 0x428: 0x3064, 0x429: 0x3370, + 0x42a: 0x3069, 0x42b: 0x3375, 0x42c: 0x30af, 0x42d: 0x33bb, 0x42e: 0x390b, 0x42f: 0x3a9a, + 0x430: 0x30b9, 0x431: 0x33ca, 0x432: 0x30c3, 0x433: 0x33d4, 0x434: 0x30cd, 0x435: 0x33de, + 0x436: 0x46c4, 0x437: 0x4755, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7, + 0x43c: 0x30e1, 0x43d: 0x33f2, 0x43e: 0x30eb, 0x43f: 0x33fc, + // Block 0x11, offset 0x440 + 0x440: 0x30f0, 0x441: 0x3401, 0x442: 0x30f5, 0x443: 0x3406, 0x444: 0x3109, 0x445: 0x341a, + 0x446: 0x3113, 0x447: 0x3424, 0x448: 0x3122, 0x449: 0x3433, 0x44a: 0x311d, 0x44b: 0x342e, + 0x44c: 0x3935, 0x44d: 0x3ac4, 0x44e: 0x3943, 0x44f: 0x3ad2, 0x450: 0x394a, 0x451: 0x3ad9, + 0x452: 0x3951, 0x453: 0x3ae0, 0x454: 0x314f, 0x455: 0x3460, 0x456: 0x3154, 0x457: 0x3465, + 0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x46f1, 0x45b: 0x4782, 0x45c: 0x3997, 0x45d: 0x3b26, + 0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4700, 0x463: 0x4791, + 0x464: 0x399e, 0x465: 0x3b2d, 0x466: 0x39a5, 0x467: 0x3b34, 0x468: 0x39ac, 0x469: 0x3b3b, + 0x46a: 0x3190, 0x46b: 0x34a1, 0x46c: 0x319a, 0x46d: 0x34b0, 0x46e: 0x31ae, 0x46f: 0x34c4, + 0x470: 0x31a9, 0x471: 0x34bf, 0x472: 0x31ea, 0x473: 0x3500, 0x474: 0x31f9, 0x475: 0x350f, + 0x476: 0x31f4, 0x477: 0x350a, 0x478: 0x39b3, 0x479: 0x3b42, 0x47a: 0x39ba, 0x47b: 0x3b49, + 0x47c: 0x31fe, 0x47d: 0x3514, 0x47e: 0x3203, 0x47f: 0x3519, + // Block 0x12, offset 0x480 + 0x480: 0x3208, 0x481: 0x351e, 0x482: 0x320d, 0x483: 0x3523, 0x484: 0x321c, 0x485: 0x3532, + 0x486: 0x3217, 0x487: 0x352d, 0x488: 0x3221, 0x489: 0x353c, 0x48a: 0x3226, 0x48b: 0x3541, + 0x48c: 0x322b, 0x48d: 0x3546, 0x48e: 0x3249, 0x48f: 0x3564, 0x490: 0x3262, 0x491: 0x3582, + 0x492: 0x3271, 0x493: 0x3591, 0x494: 0x3276, 0x495: 0x3596, 0x496: 0x337a, 0x497: 0x34a6, + 0x498: 0x3537, 0x499: 0x3573, 0x49b: 0x35d1, + 0x4a0: 0x46a1, 0x4a1: 0x4732, 0x4a2: 0x2f83, 0x4a3: 0x328f, + 0x4a4: 0x3878, 0x4a5: 0x3a07, 0x4a6: 0x3871, 0x4a7: 0x3a00, 0x4a8: 0x3886, 0x4a9: 0x3a15, + 0x4aa: 0x387f, 0x4ab: 0x3a0e, 0x4ac: 0x38be, 0x4ad: 0x3a4d, 0x4ae: 0x3894, 0x4af: 0x3a23, + 0x4b0: 0x388d, 0x4b1: 0x3a1c, 0x4b2: 0x38a2, 0x4b3: 0x3a31, 0x4b4: 0x389b, 0x4b5: 0x3a2a, + 0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x46b5, 0x4b9: 0x4746, 0x4ba: 0x3000, 0x4bb: 0x330c, + 0x4bc: 0x2fec, 0x4bd: 0x32f8, 0x4be: 0x38da, 0x4bf: 0x3a69, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x38d3, 0x4c1: 0x3a62, 0x4c2: 0x38e8, 0x4c3: 0x3a77, 0x4c4: 0x38e1, 0x4c5: 0x3a70, + 0x4c6: 0x38fd, 0x4c7: 0x3a8c, 0x4c8: 0x3091, 0x4c9: 0x339d, 0x4ca: 0x30a5, 0x4cb: 0x33b1, + 0x4cc: 0x46e7, 0x4cd: 0x4778, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf, + 0x4d2: 0x3919, 0x4d3: 0x3aa8, 0x4d4: 0x392e, 0x4d5: 0x3abd, 0x4d6: 0x3927, 0x4d7: 0x3ab6, + 0x4d8: 0x3989, 0x4d9: 0x3b18, 0x4da: 0x396d, 0x4db: 0x3afc, 0x4dc: 0x3966, 0x4dd: 0x3af5, + 0x4de: 0x397b, 0x4df: 0x3b0a, 0x4e0: 0x3974, 0x4e1: 0x3b03, 0x4e2: 0x3982, 0x4e3: 0x3b11, + 0x4e4: 0x31e5, 0x4e5: 0x34fb, 0x4e6: 0x31c7, 0x4e7: 0x34dd, 0x4e8: 0x39e4, 0x4e9: 0x3b73, + 0x4ea: 0x39dd, 0x4eb: 0x3b6c, 0x4ec: 0x39f2, 0x4ed: 0x3b81, 0x4ee: 0x39eb, 0x4ef: 0x3b7a, + 0x4f0: 0x39f9, 0x4f1: 0x3b88, 0x4f2: 0x3230, 0x4f3: 0x354b, 0x4f4: 0x3258, 0x4f5: 0x3578, + 0x4f6: 0x3253, 0x4f7: 0x356e, 0x4f8: 0x323f, 0x4f9: 0x355a, + // Block 0x14, offset 0x500 + 0x500: 0x4804, 0x501: 0x480a, 0x502: 0x491e, 0x503: 0x4936, 0x504: 0x4926, 0x505: 0x493e, + 0x506: 0x492e, 0x507: 0x4946, 0x508: 0x47aa, 0x509: 0x47b0, 0x50a: 0x488e, 0x50b: 0x48a6, + 0x50c: 0x4896, 0x50d: 0x48ae, 0x50e: 0x489e, 0x50f: 0x48b6, 0x510: 0x4816, 0x511: 0x481c, + 0x512: 0x3db8, 0x513: 0x3dc8, 0x514: 0x3dc0, 0x515: 0x3dd0, + 0x518: 0x47b6, 0x519: 0x47bc, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00, + 0x520: 0x482e, 0x521: 0x4834, 0x522: 0x494e, 0x523: 0x4966, + 0x524: 0x4956, 0x525: 0x496e, 0x526: 0x495e, 0x527: 0x4976, 0x528: 0x47c2, 0x529: 0x47c8, + 0x52a: 0x48be, 0x52b: 0x48d6, 0x52c: 0x48c6, 0x52d: 0x48de, 0x52e: 0x48ce, 0x52f: 0x48e6, + 0x530: 0x4846, 0x531: 0x484c, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38, + 0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x47ce, 0x539: 0x47d4, 0x53a: 0x3d18, 0x53b: 0x3d30, + 0x53c: 0x3d20, 0x53d: 0x3d38, 0x53e: 0x3d28, 0x53f: 0x3d40, + // Block 0x15, offset 0x540 + 0x540: 0x4852, 0x541: 0x4858, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60, + 0x548: 0x47da, 0x549: 0x47e0, 0x54a: 0x3d48, 0x54b: 0x3d58, + 0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x4864, 0x551: 0x486a, + 0x552: 0x3e80, 0x553: 0x3e98, 0x554: 0x3e88, 0x555: 0x3ea0, 0x556: 0x3e90, 0x557: 0x3ea8, + 0x559: 0x47e6, 0x55b: 0x3d68, 0x55d: 0x3d70, + 0x55f: 0x3d78, 0x560: 0x487c, 0x561: 0x4882, 0x562: 0x497e, 0x563: 0x4996, + 0x564: 0x4986, 0x565: 0x499e, 0x566: 0x498e, 0x567: 0x49a6, 0x568: 0x47ec, 0x569: 0x47f2, + 0x56a: 0x48ee, 0x56b: 0x4906, 0x56c: 0x48f6, 0x56d: 0x490e, 0x56e: 0x48fe, 0x56f: 0x4916, + 0x570: 0x47f8, 0x571: 0x431e, 0x572: 0x3691, 0x573: 0x4324, 0x574: 0x4822, 0x575: 0x432a, + 0x576: 0x36a3, 0x577: 0x4330, 0x578: 0x36c1, 0x579: 0x4336, 0x57a: 0x36d9, 0x57b: 0x433c, + 0x57c: 0x4870, 0x57d: 0x4342, + // Block 0x16, offset 0x580 + 0x580: 0x3da0, 0x581: 0x3da8, 0x582: 0x4184, 0x583: 0x41a2, 0x584: 0x418e, 0x585: 0x41ac, + 0x586: 0x4198, 0x587: 0x41b6, 0x588: 0x3cd8, 0x589: 0x3ce0, 0x58a: 0x40d0, 0x58b: 0x40ee, + 0x58c: 0x40da, 0x58d: 0x40f8, 0x58e: 0x40e4, 0x58f: 0x4102, 0x590: 0x3de8, 0x591: 0x3df0, + 0x592: 0x41c0, 0x593: 0x41de, 0x594: 0x41ca, 0x595: 0x41e8, 0x596: 0x41d4, 0x597: 0x41f2, + 0x598: 0x3d08, 0x599: 0x3d10, 0x59a: 0x410c, 0x59b: 0x412a, 0x59c: 0x4116, 0x59d: 0x4134, + 0x59e: 0x4120, 0x59f: 0x413e, 0x5a0: 0x3ec0, 0x5a1: 0x3ec8, 0x5a2: 0x41fc, 0x5a3: 0x421a, + 0x5a4: 0x4206, 0x5a5: 0x4224, 0x5a6: 0x4210, 0x5a7: 0x422e, 0x5a8: 0x3d80, 0x5a9: 0x3d88, + 0x5aa: 0x4148, 0x5ab: 0x4166, 0x5ac: 0x4152, 0x5ad: 0x4170, 0x5ae: 0x415c, 0x5af: 0x417a, + 0x5b0: 0x3685, 0x5b1: 0x367f, 0x5b2: 0x3d90, 0x5b3: 0x368b, 0x5b4: 0x3d98, + 0x5b6: 0x4810, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x42ee, + 0x5bc: 0x35fb, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x8100, 0x5c1: 0x35a7, 0x5c2: 0x3dd8, 0x5c3: 0x369d, 0x5c4: 0x3de0, + 0x5c6: 0x483a, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x42f4, 0x5ca: 0x360d, 0x5cb: 0x42fa, + 0x5cc: 0x3619, 0x5cd: 0x3b8f, 0x5ce: 0x3b96, 0x5cf: 0x3b9d, 0x5d0: 0x36b5, 0x5d1: 0x36af, + 0x5d2: 0x3e00, 0x5d3: 0x44e4, 0x5d6: 0x36bb, 0x5d7: 0x3e10, + 0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4300, 0x5dd: 0x3ba4, + 0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x44ec, + 0x5e4: 0x36cd, 0x5e5: 0x36d3, 0x5e6: 0x36f1, 0x5e7: 0x3e78, 0x5e8: 0x3661, 0x5e9: 0x365b, + 0x5ea: 0x364f, 0x5eb: 0x430c, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x42e8, 0x5ef: 0x0081, + 0x5f2: 0x3eb0, 0x5f3: 0x36f7, 0x5f4: 0x3eb8, + 0x5f6: 0x4888, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x4306, 0x5fa: 0x366d, 0x5fb: 0x4318, + 0x5fc: 0x3679, 0x5fd: 0x4256, 0x5fe: 0xa100, + // Block 0x18, offset 0x600 + 0x601: 0x3c06, 0x603: 0xa000, 0x604: 0x3c0d, 0x605: 0xa000, + 0x607: 0x3c14, 0x608: 0xa000, 0x609: 0x3c1b, + 0x60d: 0xa000, + 0x620: 0x2f65, 0x621: 0xa000, 0x622: 0x3c29, + 0x624: 0xa000, 0x625: 0xa000, + 0x62d: 0x3c22, 0x62e: 0x2f60, 0x62f: 0x2f6a, + 0x630: 0x3c30, 0x631: 0x3c37, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3e, 0x635: 0x3c45, + 0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c4c, 0x639: 0x3c53, 0x63a: 0xa000, 0x63b: 0xa000, + 0x63c: 0xa000, 0x63d: 0xa000, + // Block 0x19, offset 0x640 + 0x640: 0x3c5a, 0x641: 0x3c61, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c76, 0x645: 0x3c7d, + 0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c84, 0x649: 0x3c8b, + 0x651: 0xa000, + 0x652: 0xa000, + 0x662: 0xa000, + 0x668: 0xa000, 0x669: 0xa000, + 0x66b: 0xa000, 0x66c: 0x3ca0, 0x66d: 0x3ca7, 0x66e: 0x3cae, 0x66f: 0x3cb5, + 0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000, + // Block 0x1a, offset 0x680 + 0x686: 0xa000, 0x68b: 0xa000, + 0x68c: 0x3f08, 0x68d: 0xa000, 0x68e: 0x3f10, 0x68f: 0xa000, 0x690: 0x3f18, 0x691: 0xa000, + 0x692: 0x3f20, 0x693: 0xa000, 0x694: 0x3f28, 0x695: 0xa000, 0x696: 0x3f30, 0x697: 0xa000, + 0x698: 0x3f38, 0x699: 0xa000, 0x69a: 0x3f40, 0x69b: 0xa000, 0x69c: 0x3f48, 0x69d: 0xa000, + 0x69e: 0x3f50, 0x69f: 0xa000, 0x6a0: 0x3f58, 0x6a1: 0xa000, 0x6a2: 0x3f60, + 0x6a4: 0xa000, 0x6a5: 0x3f68, 0x6a6: 0xa000, 0x6a7: 0x3f70, 0x6a8: 0xa000, 0x6a9: 0x3f78, + 0x6af: 0xa000, + 0x6b0: 0x3f80, 0x6b1: 0x3f88, 0x6b2: 0xa000, 0x6b3: 0x3f90, 0x6b4: 0x3f98, 0x6b5: 0xa000, + 0x6b6: 0x3fa0, 0x6b7: 0x3fa8, 0x6b8: 0xa000, 0x6b9: 0x3fb0, 0x6ba: 0x3fb8, 0x6bb: 0xa000, + 0x6bc: 0x3fc0, 0x6bd: 0x3fc8, + // Block 0x1b, offset 0x6c0 + 0x6d4: 0x3f00, + 0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000, + 0x6de: 0x3fd0, + 0x6e6: 0xa000, + 0x6eb: 0xa000, 0x6ec: 0x3fe0, 0x6ed: 0xa000, 0x6ee: 0x3fe8, 0x6ef: 0xa000, + 0x6f0: 0x3ff0, 0x6f1: 0xa000, 0x6f2: 0x3ff8, 0x6f3: 0xa000, 0x6f4: 0x4000, 0x6f5: 0xa000, + 0x6f6: 0x4008, 0x6f7: 0xa000, 0x6f8: 0x4010, 0x6f9: 0xa000, 0x6fa: 0x4018, 0x6fb: 0xa000, + 0x6fc: 0x4020, 0x6fd: 0xa000, 0x6fe: 0x4028, 0x6ff: 0xa000, + // Block 0x1c, offset 0x700 + 0x700: 0x4030, 0x701: 0xa000, 0x702: 0x4038, 0x704: 0xa000, 0x705: 0x4040, + 0x706: 0xa000, 0x707: 0x4048, 0x708: 0xa000, 0x709: 0x4050, + 0x70f: 0xa000, 0x710: 0x4058, 0x711: 0x4060, + 0x712: 0xa000, 0x713: 0x4068, 0x714: 0x4070, 0x715: 0xa000, 0x716: 0x4078, 0x717: 0x4080, + 0x718: 0xa000, 0x719: 0x4088, 0x71a: 0x4090, 0x71b: 0xa000, 0x71c: 0x4098, 0x71d: 0x40a0, + 0x72f: 0xa000, + 0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd8, + 0x737: 0x40a8, 0x738: 0x40b0, 0x739: 0x40b8, 0x73a: 0x40c0, + 0x73d: 0xa000, 0x73e: 0x40c8, + // Block 0x1d, offset 0x740 + 0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb, + 0x746: 0x08df, 0x747: 0x162b, 0x748: 0x162b, 0x749: 0x0a0b, 0x74a: 0x145f, 0x74b: 0x0943, + 0x74c: 0x0a07, 0x74d: 0x0bef, 0x74e: 0x0fcf, 0x74f: 0x115f, 0x750: 0x1297, 0x751: 0x12d3, + 0x752: 0x1307, 0x753: 0x141b, 0x754: 0x0d73, 0x755: 0x0dff, 0x756: 0x0eab, 0x757: 0x0f43, + 0x758: 0x125f, 0x759: 0x1447, 0x75a: 0x1573, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87, + 0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15c3, 0x761: 0x0ab3, 0x762: 0x0e77, 0x763: 0x1283, + 0x764: 0x1317, 0x765: 0x0c23, 0x766: 0x11bb, 0x767: 0x12df, 0x768: 0x0b1f, 0x769: 0x0d0f, + 0x76a: 0x0e17, 0x76b: 0x0f1b, 0x76c: 0x1427, 0x76d: 0x074f, 0x76e: 0x07e7, 0x76f: 0x0853, + 0x770: 0x0c8b, 0x771: 0x0d7f, 0x772: 0x0ecb, 0x773: 0x0fef, 0x774: 0x1177, 0x775: 0x128b, + 0x776: 0x12a3, 0x777: 0x13c7, 0x778: 0x14ef, 0x779: 0x15a3, 0x77a: 0x15bf, 0x77b: 0x102b, + 0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x147b, + // Block 0x1e, offset 0x780 + 0x780: 0x15cb, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b, + 0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e7, 0x78a: 0x09c3, 0x78b: 0x0a8f, + 0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a7, + 0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127, + 0x798: 0x125b, 0x799: 0x14af, 0x79a: 0x1367, 0x79b: 0x0c27, 0x79c: 0x0d73, 0x79d: 0x1357, + 0x79e: 0x06f7, 0x79f: 0x0a63, 0x7a0: 0x0b93, 0x7a1: 0x0f2f, 0x7a2: 0x0faf, 0x7a3: 0x0873, + 0x7a4: 0x103b, 0x7a5: 0x075f, 0x7a6: 0x0b77, 0x7a7: 0x06d7, 0x7a8: 0x0deb, 0x7a9: 0x0ca3, + 0x7aa: 0x110f, 0x7ab: 0x08c7, 0x7ac: 0x09b3, 0x7ad: 0x0ffb, 0x7ae: 0x1263, 0x7af: 0x133b, + 0x7b0: 0x0db7, 0x7b1: 0x13f7, 0x7b2: 0x0de3, 0x7b3: 0x0c37, 0x7b4: 0x121b, 0x7b5: 0x0c57, + 0x7b6: 0x0fab, 0x7b7: 0x072b, 0x7b8: 0x07a7, 0x7b9: 0x07eb, 0x7ba: 0x0d53, 0x7bb: 0x10fb, + 0x7bc: 0x11f3, 0x7bd: 0x1347, 0x7be: 0x145b, 0x7bf: 0x085b, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f, + 0x7c6: 0x1497, 0x7c7: 0x157b, 0x7c8: 0x15cf, 0x7c9: 0x15e7, 0x7ca: 0x0837, 0x7cb: 0x0cf3, + 0x7cc: 0x0da3, 0x7cd: 0x13eb, 0x7ce: 0x0afb, 0x7cf: 0x0bd7, 0x7d0: 0x0bf3, 0x7d1: 0x0c83, + 0x7d2: 0x0e6b, 0x7d3: 0x0eb7, 0x7d4: 0x0f67, 0x7d5: 0x108b, 0x7d6: 0x112f, 0x7d7: 0x1193, + 0x7d8: 0x13db, 0x7d9: 0x126b, 0x7da: 0x1403, 0x7db: 0x147f, 0x7dc: 0x080f, 0x7dd: 0x083b, + 0x7de: 0x0923, 0x7df: 0x0ea7, 0x7e0: 0x12f3, 0x7e1: 0x133b, 0x7e2: 0x0b1b, 0x7e3: 0x0b8b, + 0x7e4: 0x0c4f, 0x7e5: 0x0daf, 0x7e6: 0x10d7, 0x7e7: 0x0f23, 0x7e8: 0x073b, 0x7e9: 0x097f, + 0x7ea: 0x0a63, 0x7eb: 0x0ac7, 0x7ec: 0x0b97, 0x7ed: 0x0f3f, 0x7ee: 0x0f5b, 0x7ef: 0x116b, + 0x7f0: 0x118b, 0x7f1: 0x1463, 0x7f2: 0x14e3, 0x7f3: 0x14f3, 0x7f4: 0x152f, 0x7f5: 0x0753, + 0x7f6: 0x107f, 0x7f7: 0x144f, 0x7f8: 0x14cb, 0x7f9: 0x0baf, 0x7fa: 0x0717, 0x7fb: 0x0777, + 0x7fc: 0x0a67, 0x7fd: 0x0a87, 0x7fe: 0x0caf, 0x7ff: 0x0d73, + // Block 0x20, offset 0x800 + 0x800: 0x0ec3, 0x801: 0x0fcb, 0x802: 0x1277, 0x803: 0x1417, 0x804: 0x1623, 0x805: 0x0ce3, + 0x806: 0x14a3, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47, + 0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x153b, 0x811: 0x07af, + 0x812: 0x0c03, 0x813: 0x14b3, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df, + 0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14bb, 0x81d: 0x0817, + 0x81e: 0x08ff, 0x81f: 0x0a97, 0x820: 0x0cd3, 0x821: 0x0d1f, 0x822: 0x0d5f, 0x823: 0x0df3, + 0x824: 0x0f47, 0x825: 0x0fbb, 0x826: 0x1157, 0x827: 0x12f7, 0x828: 0x1303, 0x829: 0x1457, + 0x82a: 0x14d7, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b, + 0x830: 0x1287, 0x831: 0x14bf, 0x832: 0x15ab, 0x833: 0x15d3, 0x834: 0x0d37, 0x835: 0x0e27, + 0x836: 0x11c3, 0x837: 0x10b7, 0x838: 0x10c3, 0x839: 0x10e7, 0x83a: 0x0f17, 0x83b: 0x0e9f, + 0x83c: 0x1363, 0x83d: 0x0733, 0x83e: 0x122b, 0x83f: 0x081b, + // Block 0x21, offset 0x840 + 0x840: 0x080b, 0x841: 0x0b0b, 0x842: 0x0c2b, 0x843: 0x10f3, 0x844: 0x0a53, 0x845: 0x0e03, + 0x846: 0x0cef, 0x847: 0x13e7, 0x848: 0x12e7, 0x849: 0x14ab, 0x84a: 0x1323, 0x84b: 0x0b27, + 0x84c: 0x0787, 0x84d: 0x095b, 0x850: 0x09af, + 0x852: 0x0cdf, 0x855: 0x07f7, 0x856: 0x0f1f, 0x857: 0x0fe3, + 0x858: 0x1047, 0x859: 0x1063, 0x85a: 0x1067, 0x85b: 0x107b, 0x85c: 0x14fb, 0x85d: 0x10eb, + 0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353, + 0x865: 0x1407, 0x866: 0x1433, + 0x86a: 0x154f, 0x86b: 0x1553, 0x86c: 0x1557, 0x86d: 0x15bb, 0x86e: 0x142b, 0x86f: 0x14c7, + 0x870: 0x0757, 0x871: 0x077b, 0x872: 0x078f, 0x873: 0x084b, 0x874: 0x0857, 0x875: 0x0897, + 0x876: 0x094b, 0x877: 0x0967, 0x878: 0x096f, 0x879: 0x09ab, 0x87a: 0x09b7, 0x87b: 0x0a93, + 0x87c: 0x0a9b, 0x87d: 0x0ba3, 0x87e: 0x0bcb, 0x87f: 0x0bd3, + // Block 0x22, offset 0x880 + 0x880: 0x0beb, 0x881: 0x0c97, 0x882: 0x0cc7, 0x883: 0x0ce7, 0x884: 0x0d57, 0x885: 0x0e1b, + 0x886: 0x0e37, 0x887: 0x0e67, 0x888: 0x0ebb, 0x889: 0x0edb, 0x88a: 0x0f4f, 0x88b: 0x102f, + 0x88c: 0x104b, 0x88d: 0x1053, 0x88e: 0x104f, 0x88f: 0x1057, 0x890: 0x105b, 0x891: 0x105f, + 0x892: 0x1073, 0x893: 0x1077, 0x894: 0x109b, 0x895: 0x10af, 0x896: 0x10cb, 0x897: 0x112f, + 0x898: 0x1137, 0x899: 0x113f, 0x89a: 0x1153, 0x89b: 0x117b, 0x89c: 0x11cb, 0x89d: 0x11ff, + 0x89e: 0x11ff, 0x89f: 0x1267, 0x8a0: 0x130f, 0x8a1: 0x1327, 0x8a2: 0x135b, 0x8a3: 0x135f, + 0x8a4: 0x13a3, 0x8a5: 0x13a7, 0x8a6: 0x13ff, 0x8a7: 0x1407, 0x8a8: 0x14db, 0x8a9: 0x151f, + 0x8aa: 0x1537, 0x8ab: 0x0b9b, 0x8ac: 0x171e, 0x8ad: 0x11e3, + 0x8b0: 0x06df, 0x8b1: 0x07e3, 0x8b2: 0x07a3, 0x8b3: 0x074b, 0x8b4: 0x078b, 0x8b5: 0x07b7, + 0x8b6: 0x0847, 0x8b7: 0x0863, 0x8b8: 0x094b, 0x8b9: 0x0937, 0x8ba: 0x0947, 0x8bb: 0x0963, + 0x8bc: 0x09af, 0x8bd: 0x09bf, 0x8be: 0x0a03, 0x8bf: 0x0a0f, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0a2b, 0x8c1: 0x0a3b, 0x8c2: 0x0b23, 0x8c3: 0x0b2b, 0x8c4: 0x0b5b, 0x8c5: 0x0b7b, + 0x8c6: 0x0bab, 0x8c7: 0x0bc3, 0x8c8: 0x0bb3, 0x8c9: 0x0bd3, 0x8ca: 0x0bc7, 0x8cb: 0x0beb, + 0x8cc: 0x0c07, 0x8cd: 0x0c5f, 0x8ce: 0x0c6b, 0x8cf: 0x0c73, 0x8d0: 0x0c9b, 0x8d1: 0x0cdf, + 0x8d2: 0x0d0f, 0x8d3: 0x0d13, 0x8d4: 0x0d27, 0x8d5: 0x0da7, 0x8d6: 0x0db7, 0x8d7: 0x0e0f, + 0x8d8: 0x0e5b, 0x8d9: 0x0e53, 0x8da: 0x0e67, 0x8db: 0x0e83, 0x8dc: 0x0ebb, 0x8dd: 0x1013, + 0x8de: 0x0edf, 0x8df: 0x0f13, 0x8e0: 0x0f1f, 0x8e1: 0x0f5f, 0x8e2: 0x0f7b, 0x8e3: 0x0f9f, + 0x8e4: 0x0fc3, 0x8e5: 0x0fc7, 0x8e6: 0x0fe3, 0x8e7: 0x0fe7, 0x8e8: 0x0ff7, 0x8e9: 0x100b, + 0x8ea: 0x1007, 0x8eb: 0x1037, 0x8ec: 0x10b3, 0x8ed: 0x10cb, 0x8ee: 0x10e3, 0x8ef: 0x111b, + 0x8f0: 0x112f, 0x8f1: 0x114b, 0x8f2: 0x117b, 0x8f3: 0x122f, 0x8f4: 0x1257, 0x8f5: 0x12cb, + 0x8f6: 0x1313, 0x8f7: 0x131f, 0x8f8: 0x1327, 0x8f9: 0x133f, 0x8fa: 0x1353, 0x8fb: 0x1343, + 0x8fc: 0x135b, 0x8fd: 0x1357, 0x8fe: 0x134f, 0x8ff: 0x135f, + // Block 0x24, offset 0x900 + 0x900: 0x136b, 0x901: 0x13a7, 0x902: 0x13e3, 0x903: 0x1413, 0x904: 0x144b, 0x905: 0x146b, + 0x906: 0x14b7, 0x907: 0x14db, 0x908: 0x14fb, 0x909: 0x150f, 0x90a: 0x151f, 0x90b: 0x152b, + 0x90c: 0x1537, 0x90d: 0x158b, 0x90e: 0x162b, 0x90f: 0x16b5, 0x910: 0x16b0, 0x911: 0x16e2, + 0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1764, 0x916: 0x1791, 0x917: 0x1809, + 0x918: 0x1617, 0x919: 0x1627, + // Block 0x25, offset 0x940 + 0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1647, 0x944: 0x0747, 0x945: 0x0757, + 0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773, + 0x94c: 0x05b3, 0x94d: 0x165b, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3, + 0x952: 0x164c, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1656, 0x957: 0x07cf, + 0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x1831, 0x95d: 0x07ff, + 0x95e: 0x0807, 0x95f: 0x05bf, 0x960: 0x081f, 0x961: 0x0823, 0x962: 0x082b, 0x963: 0x082f, + 0x964: 0x05c3, 0x965: 0x0847, 0x966: 0x084b, 0x967: 0x0857, 0x968: 0x0863, 0x969: 0x0867, + 0x96a: 0x086b, 0x96b: 0x0873, 0x96c: 0x0893, 0x96d: 0x0897, 0x96e: 0x089f, 0x96f: 0x08af, + 0x970: 0x08b7, 0x971: 0x08bb, 0x972: 0x08bb, 0x973: 0x08bb, 0x974: 0x166a, 0x975: 0x0e93, + 0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166f, 0x979: 0x08e3, 0x97a: 0x08eb, 0x97b: 0x08f3, + 0x97c: 0x091b, 0x97d: 0x0907, 0x97e: 0x0913, 0x97f: 0x0917, + // Block 0x26, offset 0x980 + 0x980: 0x091f, 0x981: 0x0927, 0x982: 0x092b, 0x983: 0x0933, 0x984: 0x093b, 0x985: 0x093f, + 0x986: 0x093f, 0x987: 0x0947, 0x988: 0x094f, 0x989: 0x0953, 0x98a: 0x095f, 0x98b: 0x0983, + 0x98c: 0x0967, 0x98d: 0x0987, 0x98e: 0x096b, 0x98f: 0x0973, 0x990: 0x080b, 0x991: 0x09cf, + 0x992: 0x0997, 0x993: 0x099b, 0x994: 0x099f, 0x995: 0x0993, 0x996: 0x09a7, 0x997: 0x09a3, + 0x998: 0x09bb, 0x999: 0x1674, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef, + 0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1679, 0x9a1: 0x167e, 0x9a2: 0x0a1f, 0x9a3: 0x0a23, + 0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37, + 0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x1683, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63, + 0x9b0: 0x0a6b, 0x9b1: 0x1688, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f, + 0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x1692, + 0x9bc: 0x0aaf, 0x9bd: 0x1697, 0x9be: 0x0abb, 0x9bf: 0x0ab7, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0abf, 0x9c1: 0x0acf, 0x9c2: 0x0ad3, 0x9c3: 0x05d3, 0x9c4: 0x0ae3, 0x9c5: 0x0aeb, + 0x9c6: 0x0aef, 0x9c7: 0x0af3, 0x9c8: 0x05d7, 0x9c9: 0x169c, 0x9ca: 0x05db, 0x9cb: 0x0b0f, + 0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x1863, 0x9d0: 0x0b37, 0x9d1: 0x16a6, + 0x9d2: 0x16a6, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c9, + 0x9d8: 0x179b, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83, + 0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3, + 0x9e4: 0x16ab, 0x9e5: 0x0ba7, 0x9e6: 0x0bbb, 0x9e7: 0x0bbf, 0x9e8: 0x0bc3, 0x9e9: 0x0bbf, + 0x9ea: 0x0bcf, 0x9eb: 0x0bd3, 0x9ec: 0x0be3, 0x9ed: 0x0bdb, 0x9ee: 0x0bdf, 0x9ef: 0x0be7, + 0x9f0: 0x0beb, 0x9f1: 0x0bef, 0x9f2: 0x0bfb, 0x9f3: 0x0bff, 0x9f4: 0x0c17, 0x9f5: 0x0c1f, + 0x9f6: 0x0c2f, 0x9f7: 0x0c43, 0x9f8: 0x16ba, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b, + 0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bf, 0x9ff: 0x0c6f, + // Block 0x28, offset 0xa00 + 0xa00: 0x0c63, 0xa01: 0x0c5b, 0xa02: 0x05ef, 0xa03: 0x0c77, 0xa04: 0x0c7f, 0xa05: 0x0c87, + 0xa06: 0x0c7b, 0xa07: 0x05f3, 0xa08: 0x0c97, 0xa09: 0x0c9f, 0xa0a: 0x16c4, 0xa0b: 0x0ccb, + 0xa0c: 0x0cff, 0xa0d: 0x0cdb, 0xa0e: 0x05ff, 0xa0f: 0x0ce7, 0xa10: 0x05fb, 0xa11: 0x05f7, + 0xa12: 0x07c3, 0xa13: 0x07c7, 0xa14: 0x0d03, 0xa15: 0x0ceb, 0xa16: 0x11ab, 0xa17: 0x0663, + 0xa18: 0x0d0f, 0xa19: 0x0d13, 0xa1a: 0x0d17, 0xa1b: 0x0d2b, 0xa1c: 0x0d23, 0xa1d: 0x16dd, + 0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e7, + 0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b, + 0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16ec, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f, + 0xa30: 0x16f1, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7, + 0xa36: 0x0dbb, 0xa37: 0x16f6, 0xa38: 0x168d, 0xa39: 0x16fb, 0xa3a: 0x0ddb, 0xa3b: 0x1700, + 0xa3c: 0x0de7, 0xa3d: 0x0def, 0xa3e: 0x0ddf, 0xa3f: 0x0dfb, + // Block 0x29, offset 0xa40 + 0xa40: 0x0e0b, 0xa41: 0x0e1b, 0xa42: 0x0e0f, 0xa43: 0x0e13, 0xa44: 0x0e1f, 0xa45: 0x0e23, + 0xa46: 0x1705, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53, + 0xa4c: 0x0e4f, 0xa4d: 0x170a, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170f, 0xa51: 0x1714, + 0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b, + 0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x1651, 0xa5c: 0x0eb3, 0xa5d: 0x1719, + 0xa5e: 0x0ebf, 0xa5f: 0x1723, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1728, + 0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x172d, 0xa67: 0x1732, 0xa68: 0x0f27, 0xa69: 0x0f37, + 0xa6a: 0x061b, 0xa6b: 0x0f3b, 0xa6c: 0x061f, 0xa6d: 0x061f, 0xa6e: 0x0f53, 0xa6f: 0x0f57, + 0xa70: 0x0f5f, 0xa71: 0x0f63, 0xa72: 0x0f6f, 0xa73: 0x0623, 0xa74: 0x0f87, 0xa75: 0x1737, + 0xa76: 0x0fa3, 0xa77: 0x173c, 0xa78: 0x0faf, 0xa79: 0x16a1, 0xa7a: 0x0fbf, 0xa7b: 0x1741, + 0xa7c: 0x1746, 0xa7d: 0x174b, 0xa7e: 0x0627, 0xa7f: 0x062b, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0ff7, 0xa81: 0x1755, 0xa82: 0x1750, 0xa83: 0x175a, 0xa84: 0x175f, 0xa85: 0x0fff, + 0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637, + 0xa8c: 0x063b, 0xa8d: 0x1769, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f, + 0xa92: 0x176e, 0xa93: 0x105b, 0xa94: 0x1773, 0xa95: 0x1778, 0xa96: 0x107b, 0xa97: 0x1093, + 0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x177d, 0xa9d: 0x1782, + 0xa9e: 0x1782, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1787, 0xaa2: 0x10cf, 0xaa3: 0x10d3, + 0xaa4: 0x064b, 0xaa5: 0x178c, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7, + 0xaaa: 0x1107, 0xaab: 0x1796, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133, + 0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x17a0, 0xab3: 0x17a5, 0xab4: 0x065b, 0xab5: 0x17aa, + 0xab6: 0x115b, 0xab7: 0x17af, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b4, + 0xabc: 0x17b9, 0xabd: 0x118f, 0xabe: 0x17be, 0xabf: 0x1197, + // Block 0x2b, offset 0xac0 + 0xac0: 0x16ce, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7, + 0xac6: 0x0a33, 0xac7: 0x17c3, 0xac8: 0x17c8, 0xac9: 0x16d3, 0xaca: 0x16d8, 0xacb: 0x11d7, + 0xacc: 0x11db, 0xacd: 0x13f3, 0xace: 0x066b, 0xacf: 0x1207, 0xad0: 0x1203, 0xad1: 0x120b, + 0xad2: 0x083f, 0xad3: 0x120f, 0xad4: 0x1213, 0xad5: 0x1217, 0xad6: 0x121f, 0xad7: 0x17cd, + 0xad8: 0x121b, 0xad9: 0x1223, 0xada: 0x1237, 0xadb: 0x123b, 0xadc: 0x1227, 0xadd: 0x123f, + 0xade: 0x1253, 0xadf: 0x1267, 0xae0: 0x1233, 0xae1: 0x1247, 0xae2: 0x124b, 0xae3: 0x124f, + 0xae4: 0x17d2, 0xae5: 0x17dc, 0xae6: 0x17d7, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273, + 0xaea: 0x127b, 0xaeb: 0x17f0, 0xaec: 0x127f, 0xaed: 0x17e1, 0xaee: 0x0673, 0xaef: 0x0677, + 0xaf0: 0x17e6, 0xaf1: 0x17eb, 0xaf2: 0x067b, 0xaf3: 0x129f, 0xaf4: 0x12a3, 0xaf5: 0x12a7, + 0xaf6: 0x12ab, 0xaf7: 0x12b7, 0xaf8: 0x12b3, 0xaf9: 0x12bf, 0xafa: 0x12bb, 0xafb: 0x12cb, + 0xafc: 0x12c3, 0xafd: 0x12c7, 0xafe: 0x12cf, 0xaff: 0x067f, + // Block 0x2c, offset 0xb00 + 0xb00: 0x12d7, 0xb01: 0x12db, 0xb02: 0x0683, 0xb03: 0x12eb, 0xb04: 0x12ef, 0xb05: 0x17f5, + 0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17fa, + 0xb0c: 0x17ff, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b, + 0xb12: 0x137b, 0xb13: 0x1804, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7, + 0xb18: 0x180e, 0xb19: 0x1660, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1665, + 0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x1813, 0xb21: 0x1818, 0xb22: 0x1423, 0xb23: 0x142f, + 0xb24: 0x1437, 0xb25: 0x181d, 0xb26: 0x143b, 0xb27: 0x1467, 0xb28: 0x1473, 0xb29: 0x1477, + 0xb2a: 0x146f, 0xb2b: 0x1483, 0xb2c: 0x1487, 0xb2d: 0x1822, 0xb2e: 0x1493, 0xb2f: 0x0693, + 0xb30: 0x149b, 0xb31: 0x1827, 0xb32: 0x0697, 0xb33: 0x14d3, 0xb34: 0x0ac3, 0xb35: 0x14eb, + 0xb36: 0x182c, 0xb37: 0x1836, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x1513, 0xb3b: 0x183b, + 0xb3c: 0x06a3, 0xb3d: 0x1840, 0xb3e: 0x152b, 0xb3f: 0x152b, + // Block 0x2d, offset 0xb40 + 0xb40: 0x1533, 0xb41: 0x1845, 0xb42: 0x154b, 0xb43: 0x06a7, 0xb44: 0x155b, 0xb45: 0x1567, + 0xb46: 0x156f, 0xb47: 0x1577, 0xb48: 0x06ab, 0xb49: 0x184a, 0xb4a: 0x158b, 0xb4b: 0x15a7, + 0xb4c: 0x15b3, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b7, 0xb50: 0x184f, 0xb51: 0x06b7, + 0xb52: 0x1854, 0xb53: 0x1859, 0xb54: 0x185e, 0xb55: 0x15db, 0xb56: 0x06bb, 0xb57: 0x15ef, + 0xb58: 0x15f7, 0xb59: 0x15fb, 0xb5a: 0x1603, 0xb5b: 0x160b, 0xb5c: 0x1613, 0xb5d: 0x1868, +} + +// nfcIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var nfcIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x2c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2d, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x2e, 0xcb: 0x2f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x30, + 0xd0: 0x09, 0xd1: 0x31, 0xd2: 0x32, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x33, + 0xd8: 0x34, 0xd9: 0x0c, 0xdb: 0x35, 0xdc: 0x36, 0xdd: 0x37, 0xdf: 0x38, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, + 0xf0: 0x13, + // Block 0x4, offset 0x100 + 0x120: 0x39, 0x121: 0x3a, 0x123: 0x3b, 0x124: 0x3c, 0x125: 0x3d, 0x126: 0x3e, 0x127: 0x3f, + 0x128: 0x40, 0x129: 0x41, 0x12a: 0x42, 0x12b: 0x43, 0x12c: 0x3e, 0x12d: 0x44, 0x12e: 0x45, 0x12f: 0x46, + 0x131: 0x47, 0x132: 0x48, 0x133: 0x49, 0x134: 0x4a, 0x135: 0x4b, 0x137: 0x4c, + 0x138: 0x4d, 0x139: 0x4e, 0x13a: 0x4f, 0x13b: 0x50, 0x13c: 0x51, 0x13d: 0x52, 0x13e: 0x53, 0x13f: 0x54, + // Block 0x5, offset 0x140 + 0x140: 0x55, 0x142: 0x56, 0x144: 0x57, 0x145: 0x58, 0x146: 0x59, 0x147: 0x5a, + 0x14d: 0x5b, + 0x15c: 0x5c, 0x15f: 0x5d, + 0x162: 0x5e, 0x164: 0x5f, + 0x168: 0x60, 0x169: 0x61, 0x16a: 0x62, 0x16c: 0x0d, 0x16d: 0x63, 0x16e: 0x64, 0x16f: 0x65, + 0x170: 0x66, 0x173: 0x67, 0x177: 0x68, + 0x178: 0x0e, 0x179: 0x0f, 0x17a: 0x10, 0x17b: 0x11, 0x17c: 0x12, 0x17d: 0x13, 0x17e: 0x14, 0x17f: 0x15, + // Block 0x6, offset 0x180 + 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d, + 0x188: 0x6e, 0x189: 0x16, 0x18a: 0x17, 0x18b: 0x6f, 0x18c: 0x70, + 0x1ab: 0x71, + 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x75, 0x1c1: 0x18, 0x1c2: 0x19, 0x1c3: 0x1a, 0x1c4: 0x76, 0x1c5: 0x77, + 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a, + // Block 0x8, offset 0x200 + 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d, + 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83, + 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86, + 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87, + 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88, + // Block 0x9, offset 0x240 + 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89, + 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a, + 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b, + 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c, + 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d, + 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87, + 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88, + 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89, + // Block 0xa, offset 0x280 + 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a, + 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b, + 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c, + 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d, + 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87, + 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88, + 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89, + 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b, + 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c, + 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d, + 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e, + // Block 0xc, offset 0x300 + 0x324: 0x1b, 0x325: 0x1c, 0x326: 0x1d, 0x327: 0x1e, + 0x328: 0x1f, 0x329: 0x20, 0x32a: 0x21, 0x32b: 0x22, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91, + 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95, + 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b, + // Block 0xd, offset 0x340 + 0x347: 0x9c, + 0x34b: 0x9d, 0x34d: 0x9e, + 0x368: 0x9f, 0x36b: 0xa0, + // Block 0xe, offset 0x380 + 0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4, + 0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3e, 0x38d: 0xa7, + 0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac, + 0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae, + 0x3b0: 0x73, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xaf, 0x3ec: 0xb0, + // Block 0x10, offset 0x400 + 0x432: 0xb1, + // Block 0x11, offset 0x440 + 0x445: 0xb2, 0x446: 0xb3, 0x447: 0xb4, + 0x449: 0xb5, + // Block 0x12, offset 0x480 + 0x480: 0xb6, + 0x4a3: 0xb7, 0x4a5: 0xb8, + // Block 0x13, offset 0x4c0 + 0x4c8: 0xb9, + // Block 0x14, offset 0x500 + 0x520: 0x23, 0x521: 0x24, 0x522: 0x25, 0x523: 0x26, 0x524: 0x27, 0x525: 0x28, 0x526: 0x29, 0x527: 0x2a, + 0x528: 0x2b, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfcSparseOffset: 142 entries, 284 bytes +var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc7, 0xce, 0xd6, 0xd9, 0xdb, 0xdd, 0xdf, 0xe4, 0xf5, 0x101, 0x103, 0x109, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x118, 0x11b, 0x11d, 0x120, 0x123, 0x127, 0x12c, 0x135, 0x137, 0x13a, 0x13c, 0x147, 0x157, 0x15b, 0x169, 0x16c, 0x172, 0x178, 0x183, 0x187, 0x189, 0x18b, 0x18d, 0x18f, 0x191, 0x197, 0x19b, 0x19d, 0x19f, 0x1a7, 0x1ab, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b7, 0x1b9, 0x1bb, 0x1bd, 0x1bf, 0x1c5, 0x1c8, 0x1ca, 0x1d1, 0x1d7, 0x1dd, 0x1e5, 0x1eb, 0x1f1, 0x1f7, 0x1fb, 0x209, 0x212, 0x215, 0x218, 0x21a, 0x21d, 0x21f, 0x223, 0x228, 0x22a, 0x22c, 0x231, 0x237, 0x239, 0x23b, 0x23d, 0x243, 0x246, 0x249, 0x251, 0x258, 0x25b, 0x25e, 0x260, 0x268, 0x26b, 0x272, 0x275, 0x27b, 0x27d, 0x280, 0x282, 0x284, 0x286, 0x288, 0x295, 0x29f, 0x2a1, 0x2a3, 0x2a9, 0x2ab, 0x2ae} + +// nfcSparseValues: 688 entries, 2752 bytes +var nfcSparseValues = [688]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x04}, + {value: 0xa100, lo: 0xa8, hi: 0xa8}, + {value: 0x8100, lo: 0xaf, hi: 0xaf}, + {value: 0x8100, lo: 0xb4, hi: 0xb4}, + {value: 0x8100, lo: 0xb8, hi: 0xb8}, + // Block 0x1, offset 0x5 + {value: 0x0091, lo: 0x03}, + {value: 0x46e2, lo: 0xa0, hi: 0xa1}, + {value: 0x4714, lo: 0xaf, hi: 0xb0}, + {value: 0xa000, lo: 0xb7, hi: 0xb7}, + // Block 0x2, offset 0x9 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + // Block 0x3, offset 0xb + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x98, hi: 0x9d}, + // Block 0x4, offset 0xd + {value: 0x0006, lo: 0x0a}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x85, hi: 0x85}, + {value: 0xa000, lo: 0x89, hi: 0x89}, + {value: 0x4840, lo: 0x8a, hi: 0x8a}, + {value: 0x485e, lo: 0x8b, hi: 0x8b}, + {value: 0x36c7, lo: 0x8c, hi: 0x8c}, + {value: 0x36df, lo: 0x8d, hi: 0x8d}, + {value: 0x4876, lo: 0x8e, hi: 0x8e}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x36fd, lo: 0x93, hi: 0x94}, + // Block 0x5, offset 0x18 + {value: 0x0000, lo: 0x0f}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0xa000, lo: 0x8d, hi: 0x8d}, + {value: 0x37a5, lo: 0x90, hi: 0x90}, + {value: 0x37b1, lo: 0x91, hi: 0x91}, + {value: 0x379f, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x3817, lo: 0x97, hi: 0x97}, + {value: 0x37e1, lo: 0x9c, hi: 0x9c}, + {value: 0x37c9, lo: 0x9d, hi: 0x9d}, + {value: 0x37f3, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x381d, lo: 0xb6, hi: 0xb6}, + {value: 0x3823, lo: 0xb7, hi: 0xb7}, + // Block 0x6, offset 0x28 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x83, hi: 0x87}, + // Block 0x7, offset 0x2a + {value: 0x0001, lo: 0x04}, + {value: 0x8113, lo: 0x81, hi: 0x82}, + {value: 0x8132, lo: 0x84, hi: 0x84}, + {value: 0x812d, lo: 0x85, hi: 0x85}, + {value: 0x810d, lo: 0x87, hi: 0x87}, + // Block 0x8, offset 0x2f + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x97}, + {value: 0x8119, lo: 0x98, hi: 0x98}, + {value: 0x811a, lo: 0x99, hi: 0x99}, + {value: 0x811b, lo: 0x9a, hi: 0x9a}, + {value: 0x3841, lo: 0xa2, hi: 0xa2}, + {value: 0x3847, lo: 0xa3, hi: 0xa3}, + {value: 0x3853, lo: 0xa4, hi: 0xa4}, + {value: 0x384d, lo: 0xa5, hi: 0xa5}, + {value: 0x3859, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x9, offset 0x3a + {value: 0x0000, lo: 0x0e}, + {value: 0x386b, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x385f, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x3865, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8132, lo: 0x96, hi: 0x9c}, + {value: 0x8132, lo: 0x9f, hi: 0xa2}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa4}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + // Block 0xa, offset 0x49 + {value: 0x0000, lo: 0x0c}, + {value: 0x811f, lo: 0x91, hi: 0x91}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x812d, lo: 0xb1, hi: 0xb1}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb5, hi: 0xb6}, + {value: 0x812d, lo: 0xb7, hi: 0xb9}, + {value: 0x8132, lo: 0xba, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbc}, + {value: 0x8132, lo: 0xbd, hi: 0xbd}, + {value: 0x812d, lo: 0xbe, hi: 0xbe}, + {value: 0x8132, lo: 0xbf, hi: 0xbf}, + // Block 0xb, offset 0x56 + {value: 0x0005, lo: 0x07}, + {value: 0x8132, lo: 0x80, hi: 0x80}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x83}, + {value: 0x812d, lo: 0x84, hi: 0x85}, + {value: 0x812d, lo: 0x86, hi: 0x87}, + {value: 0x812d, lo: 0x88, hi: 0x89}, + {value: 0x8132, lo: 0x8a, hi: 0x8a}, + // Block 0xc, offset 0x5e + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xab, hi: 0xb1}, + {value: 0x812d, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb3}, + // Block 0xd, offset 0x62 + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0x96, hi: 0x99}, + {value: 0x8132, lo: 0x9b, hi: 0xa3}, + {value: 0x8132, lo: 0xa5, hi: 0xa7}, + {value: 0x8132, lo: 0xa9, hi: 0xad}, + // Block 0xe, offset 0x67 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x99, hi: 0x9b}, + // Block 0xf, offset 0x69 + {value: 0x0000, lo: 0x10}, + {value: 0x8132, lo: 0x94, hi: 0xa1}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xa9, hi: 0xa9}, + {value: 0x8132, lo: 0xaa, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xaf}, + {value: 0x8116, lo: 0xb0, hi: 0xb0}, + {value: 0x8117, lo: 0xb1, hi: 0xb1}, + {value: 0x8118, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb5}, + {value: 0x812d, lo: 0xb6, hi: 0xb6}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x812d, lo: 0xb9, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbf}, + // Block 0x10, offset 0x7a + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, + {value: 0x9902, lo: 0xbc, hi: 0xbc}, + // Block 0x11, offset 0x82 + {value: 0x0008, lo: 0x06}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x91, hi: 0x91}, + {value: 0x812d, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x93, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x94}, + {value: 0x451c, lo: 0x98, hi: 0x9f}, + // Block 0x12, offset 0x89 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x13, offset 0x8c + {value: 0x0008, lo: 0x06}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x455c, lo: 0x9c, hi: 0x9d}, + {value: 0x456c, lo: 0x9f, hi: 0x9f}, + // Block 0x14, offset 0x93 + {value: 0x0000, lo: 0x03}, + {value: 0x4594, lo: 0xb3, hi: 0xb3}, + {value: 0x459c, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x15, offset 0x97 + {value: 0x0008, lo: 0x03}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x4574, lo: 0x99, hi: 0x9b}, + {value: 0x458c, lo: 0x9e, hi: 0x9e}, + // Block 0x16, offset 0x9b + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x17, offset 0x9d + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + // Block 0x18, offset 0x9f + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cb6, lo: 0x88, hi: 0x88}, + {value: 0x2cae, lo: 0x8b, hi: 0x8b}, + {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x45a4, lo: 0x9c, hi: 0x9c}, + {value: 0x45ac, lo: 0x9d, hi: 0x9d}, + // Block 0x19, offset 0xa8 + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2cc6, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1a, offset 0xac + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cce, lo: 0x8a, hi: 0x8a}, + {value: 0x2cde, lo: 0x8b, hi: 0x8b}, + {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1b, offset 0xb3 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x3ef0, lo: 0x88, hi: 0x88}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8120, lo: 0x95, hi: 0x96}, + // Block 0x1c, offset 0xb8 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1d, offset 0xbb + {value: 0x0000, lo: 0x09}, + {value: 0x2ce6, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2cee, lo: 0x87, hi: 0x87}, + {value: 0x2cf6, lo: 0x88, hi: 0x88}, + {value: 0x2f50, lo: 0x8a, hi: 0x8a}, + {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1e, offset 0xc5 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1f, offset 0xc7 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, + {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, + {value: 0x2d06, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x20, offset 0xce + {value: 0x6bea, lo: 0x07}, + {value: 0x9904, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, + {value: 0x2f58, lo: 0x9c, hi: 0x9c}, + {value: 0x2de3, lo: 0x9d, hi: 0x9d}, + {value: 0x2d16, lo: 0x9e, hi: 0x9f}, + // Block 0x21, offset 0xd6 + {value: 0x0000, lo: 0x02}, + {value: 0x8122, lo: 0xb8, hi: 0xb9}, + {value: 0x8104, lo: 0xba, hi: 0xba}, + // Block 0x22, offset 0xd9 + {value: 0x0000, lo: 0x01}, + {value: 0x8123, lo: 0x88, hi: 0x8b}, + // Block 0x23, offset 0xdb + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0xb8, hi: 0xb9}, + // Block 0x24, offset 0xdd + {value: 0x0000, lo: 0x01}, + {value: 0x8125, lo: 0x88, hi: 0x8b}, + // Block 0x25, offset 0xdf + {value: 0x0000, lo: 0x04}, + {value: 0x812d, lo: 0x98, hi: 0x99}, + {value: 0x812d, lo: 0xb5, hi: 0xb5}, + {value: 0x812d, lo: 0xb7, hi: 0xb7}, + {value: 0x812b, lo: 0xb9, hi: 0xb9}, + // Block 0x26, offset 0xe4 + {value: 0x0000, lo: 0x10}, + {value: 0x2644, lo: 0x83, hi: 0x83}, + {value: 0x264b, lo: 0x8d, hi: 0x8d}, + {value: 0x2652, lo: 0x92, hi: 0x92}, + {value: 0x2659, lo: 0x97, hi: 0x97}, + {value: 0x2660, lo: 0x9c, hi: 0x9c}, + {value: 0x263d, lo: 0xa9, hi: 0xa9}, + {value: 0x8126, lo: 0xb1, hi: 0xb1}, + {value: 0x8127, lo: 0xb2, hi: 0xb2}, + {value: 0x4a84, lo: 0xb3, hi: 0xb3}, + {value: 0x8128, lo: 0xb4, hi: 0xb4}, + {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, + {value: 0x45b4, lo: 0xb6, hi: 0xb6}, + {value: 0x8200, lo: 0xb7, hi: 0xb7}, + {value: 0x45bc, lo: 0xb8, hi: 0xb8}, + {value: 0x8200, lo: 0xb9, hi: 0xb9}, + {value: 0x8127, lo: 0xba, hi: 0xbd}, + // Block 0x27, offset 0xf5 + {value: 0x0000, lo: 0x0b}, + {value: 0x8127, lo: 0x80, hi: 0x80}, + {value: 0x4a96, lo: 0x81, hi: 0x81}, + {value: 0x8132, lo: 0x82, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0x86, hi: 0x87}, + {value: 0x266e, lo: 0x93, hi: 0x93}, + {value: 0x2675, lo: 0x9d, hi: 0x9d}, + {value: 0x267c, lo: 0xa2, hi: 0xa2}, + {value: 0x2683, lo: 0xa7, hi: 0xa7}, + {value: 0x268a, lo: 0xac, hi: 0xac}, + {value: 0x2667, lo: 0xb9, hi: 0xb9}, + // Block 0x28, offset 0x101 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x86, hi: 0x86}, + // Block 0x29, offset 0x103 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x2a, offset 0x109 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + // Block 0x2b, offset 0x10b + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x10d + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x10f + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x111 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x113 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x115 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x94, hi: 0x94}, + {value: 0x8104, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x118 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x11b + {value: 0x0000, lo: 0x01}, + {value: 0x8131, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x11d + {value: 0x0004, lo: 0x02}, + {value: 0x812e, lo: 0xb9, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x120 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x97, hi: 0x97}, + {value: 0x812d, lo: 0x98, hi: 0x98}, + // Block 0x35, offset 0x123 + {value: 0x0000, lo: 0x03}, + {value: 0x8104, lo: 0xa0, hi: 0xa0}, + {value: 0x8132, lo: 0xb5, hi: 0xbc}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x127 + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + {value: 0x812d, lo: 0xb5, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x37, offset 0x12c + {value: 0x0000, lo: 0x08}, + {value: 0x2d66, lo: 0x80, hi: 0x80}, + {value: 0x2d6e, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2d76, lo: 0x83, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xac}, + {value: 0x8132, lo: 0xad, hi: 0xb3}, + // Block 0x38, offset 0x135 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xaa, hi: 0xab}, + // Block 0x39, offset 0x137 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xa6, hi: 0xa6}, + {value: 0x8104, lo: 0xb2, hi: 0xb3}, + // Block 0x3a, offset 0x13a + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x3b, offset 0x13c + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812d, lo: 0x95, hi: 0x99}, + {value: 0x8132, lo: 0x9a, hi: 0x9b}, + {value: 0x812d, lo: 0x9c, hi: 0x9f}, + {value: 0x8132, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + {value: 0x8132, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb8, hi: 0xb9}, + // Block 0x3c, offset 0x147 + {value: 0x0000, lo: 0x0f}, + {value: 0x8132, lo: 0x80, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x82}, + {value: 0x8132, lo: 0x83, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8a}, + {value: 0x8132, lo: 0x8b, hi: 0x8c}, + {value: 0x8135, lo: 0x8d, hi: 0x8d}, + {value: 0x812a, lo: 0x8e, hi: 0x8e}, + {value: 0x812d, lo: 0x8f, hi: 0x8f}, + {value: 0x8129, lo: 0x90, hi: 0x90}, + {value: 0x8132, lo: 0x91, hi: 0xb5}, + {value: 0x8132, lo: 0xbb, hi: 0xbb}, + {value: 0x8134, lo: 0xbc, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + {value: 0x8132, lo: 0xbe, hi: 0xbe}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x157 + {value: 0x0004, lo: 0x03}, + {value: 0x0433, lo: 0x80, hi: 0x81}, + {value: 0x8100, lo: 0x97, hi: 0x97}, + {value: 0x8100, lo: 0xbe, hi: 0xbe}, + // Block 0x3e, offset 0x15b + {value: 0x0000, lo: 0x0d}, + {value: 0x8132, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8132, lo: 0x9b, hi: 0x9c}, + {value: 0x8132, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa7}, + {value: 0x812d, lo: 0xa8, hi: 0xa8}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xaf}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + // Block 0x3f, offset 0x169 + {value: 0x427b, lo: 0x02}, + {value: 0x01b8, lo: 0xa6, hi: 0xa6}, + {value: 0x0057, lo: 0xaa, hi: 0xab}, + // Block 0x40, offset 0x16c + {value: 0x0007, lo: 0x05}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, + {value: 0x3bc7, lo: 0xae, hi: 0xae}, + // Block 0x41, offset 0x172 + {value: 0x000e, lo: 0x05}, + {value: 0x3bce, lo: 0x8d, hi: 0x8e}, + {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + // Block 0x42, offset 0x178 + {value: 0x6408, lo: 0x0a}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3be3, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3bea, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3bf8, lo: 0xa4, hi: 0xa5}, + {value: 0x3bff, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x43, offset 0x183 + {value: 0x0007, lo: 0x03}, + {value: 0x3c68, lo: 0xa0, hi: 0xa1}, + {value: 0x3c92, lo: 0xa2, hi: 0xa3}, + {value: 0x3cbc, lo: 0xaa, hi: 0xad}, + // Block 0x44, offset 0x187 + {value: 0x0004, lo: 0x01}, + {value: 0x048b, lo: 0xa9, hi: 0xaa}, + // Block 0x45, offset 0x189 + {value: 0x0000, lo: 0x01}, + {value: 0x44dd, lo: 0x9c, hi: 0x9c}, + // Block 0x46, offset 0x18b + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xaf, hi: 0xb1}, + // Block 0x47, offset 0x18d + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x48, offset 0x18f + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa0, hi: 0xbf}, + // Block 0x49, offset 0x191 + {value: 0x0000, lo: 0x05}, + {value: 0x812c, lo: 0xaa, hi: 0xaa}, + {value: 0x8131, lo: 0xab, hi: 0xab}, + {value: 0x8133, lo: 0xac, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x812f, lo: 0xae, hi: 0xaf}, + // Block 0x4a, offset 0x197 + {value: 0x0000, lo: 0x03}, + {value: 0x4a9f, lo: 0xb3, hi: 0xb3}, + {value: 0x4a9f, lo: 0xb5, hi: 0xb6}, + {value: 0x4a9f, lo: 0xba, hi: 0xbf}, + // Block 0x4b, offset 0x19b + {value: 0x0000, lo: 0x01}, + {value: 0x4a9f, lo: 0x8f, hi: 0xa3}, + // Block 0x4c, offset 0x19d + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xae, hi: 0xbe}, + // Block 0x4d, offset 0x19f + {value: 0x0000, lo: 0x07}, + {value: 0x8100, lo: 0x84, hi: 0x84}, + {value: 0x8100, lo: 0x87, hi: 0x87}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + {value: 0x8100, lo: 0x9e, hi: 0x9e}, + {value: 0x8100, lo: 0xa1, hi: 0xa1}, + {value: 0x8100, lo: 0xb2, hi: 0xb2}, + {value: 0x8100, lo: 0xbb, hi: 0xbb}, + // Block 0x4e, offset 0x1a7 + {value: 0x0000, lo: 0x03}, + {value: 0x8100, lo: 0x80, hi: 0x80}, + {value: 0x8100, lo: 0x8b, hi: 0x8b}, + {value: 0x8100, lo: 0x8e, hi: 0x8e}, + // Block 0x4f, offset 0x1ab + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xaf, hi: 0xaf}, + {value: 0x8132, lo: 0xb4, hi: 0xbd}, + // Block 0x50, offset 0x1ae + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9e, hi: 0x9f}, + // Block 0x51, offset 0x1b0 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb1}, + // Block 0x52, offset 0x1b2 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + // Block 0x53, offset 0x1b4 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xa0, hi: 0xb1}, + // Block 0x54, offset 0x1b7 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xab, hi: 0xad}, + // Block 0x55, offset 0x1b9 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x93, hi: 0x93}, + // Block 0x56, offset 0x1bb + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb3, hi: 0xb3}, + // Block 0x57, offset 0x1bd + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + // Block 0x58, offset 0x1bf + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x8132, lo: 0xbe, hi: 0xbf}, + // Block 0x59, offset 0x1c5 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + // Block 0x5a, offset 0x1c8 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xad, hi: 0xad}, + // Block 0x5b, offset 0x1ca + {value: 0x0000, lo: 0x06}, + {value: 0xe500, lo: 0x80, hi: 0x80}, + {value: 0xc600, lo: 0x81, hi: 0x9b}, + {value: 0xe500, lo: 0x9c, hi: 0x9c}, + {value: 0xc600, lo: 0x9d, hi: 0xb7}, + {value: 0xe500, lo: 0xb8, hi: 0xb8}, + {value: 0xc600, lo: 0xb9, hi: 0xbf}, + // Block 0x5c, offset 0x1d1 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x93}, + {value: 0xe500, lo: 0x94, hi: 0x94}, + {value: 0xc600, lo: 0x95, hi: 0xaf}, + {value: 0xe500, lo: 0xb0, hi: 0xb0}, + {value: 0xc600, lo: 0xb1, hi: 0xbf}, + // Block 0x5d, offset 0x1d7 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8b}, + {value: 0xe500, lo: 0x8c, hi: 0x8c}, + {value: 0xc600, lo: 0x8d, hi: 0xa7}, + {value: 0xe500, lo: 0xa8, hi: 0xa8}, + {value: 0xc600, lo: 0xa9, hi: 0xbf}, + // Block 0x5e, offset 0x1dd + {value: 0x0000, lo: 0x07}, + {value: 0xc600, lo: 0x80, hi: 0x83}, + {value: 0xe500, lo: 0x84, hi: 0x84}, + {value: 0xc600, lo: 0x85, hi: 0x9f}, + {value: 0xe500, lo: 0xa0, hi: 0xa0}, + {value: 0xc600, lo: 0xa1, hi: 0xbb}, + {value: 0xe500, lo: 0xbc, hi: 0xbc}, + {value: 0xc600, lo: 0xbd, hi: 0xbf}, + // Block 0x5f, offset 0x1e5 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x97}, + {value: 0xe500, lo: 0x98, hi: 0x98}, + {value: 0xc600, lo: 0x99, hi: 0xb3}, + {value: 0xe500, lo: 0xb4, hi: 0xb4}, + {value: 0xc600, lo: 0xb5, hi: 0xbf}, + // Block 0x60, offset 0x1eb + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8f}, + {value: 0xe500, lo: 0x90, hi: 0x90}, + {value: 0xc600, lo: 0x91, hi: 0xab}, + {value: 0xe500, lo: 0xac, hi: 0xac}, + {value: 0xc600, lo: 0xad, hi: 0xbf}, + // Block 0x61, offset 0x1f1 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + {value: 0xe500, lo: 0xa4, hi: 0xa4}, + {value: 0xc600, lo: 0xa5, hi: 0xbf}, + // Block 0x62, offset 0x1f7 + {value: 0x0000, lo: 0x03}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + // Block 0x63, offset 0x1fb + {value: 0x0006, lo: 0x0d}, + {value: 0x4390, lo: 0x9d, hi: 0x9d}, + {value: 0x8115, lo: 0x9e, hi: 0x9e}, + {value: 0x4402, lo: 0x9f, hi: 0x9f}, + {value: 0x43f0, lo: 0xaa, hi: 0xab}, + {value: 0x44f4, lo: 0xac, hi: 0xac}, + {value: 0x44fc, lo: 0xad, hi: 0xad}, + {value: 0x4348, lo: 0xae, hi: 0xb1}, + {value: 0x4366, lo: 0xb2, hi: 0xb4}, + {value: 0x437e, lo: 0xb5, hi: 0xb6}, + {value: 0x438a, lo: 0xb8, hi: 0xb8}, + {value: 0x4396, lo: 0xb9, hi: 0xbb}, + {value: 0x43ae, lo: 0xbc, hi: 0xbc}, + {value: 0x43b4, lo: 0xbe, hi: 0xbe}, + // Block 0x64, offset 0x209 + {value: 0x0006, lo: 0x08}, + {value: 0x43ba, lo: 0x80, hi: 0x81}, + {value: 0x43c6, lo: 0x83, hi: 0x84}, + {value: 0x43d8, lo: 0x86, hi: 0x89}, + {value: 0x43fc, lo: 0x8a, hi: 0x8a}, + {value: 0x4378, lo: 0x8b, hi: 0x8b}, + {value: 0x4360, lo: 0x8c, hi: 0x8c}, + {value: 0x43a8, lo: 0x8d, hi: 0x8d}, + {value: 0x43d2, lo: 0x8e, hi: 0x8e}, + // Block 0x65, offset 0x212 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0xa4, hi: 0xa5}, + {value: 0x8100, lo: 0xb0, hi: 0xb1}, + // Block 0x66, offset 0x215 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x9b, hi: 0x9d}, + {value: 0x8200, lo: 0x9e, hi: 0xa3}, + // Block 0x67, offset 0x218 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + // Block 0x68, offset 0x21a + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x99, hi: 0x99}, + {value: 0x8200, lo: 0xb2, hi: 0xb4}, + // Block 0x69, offset 0x21d + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xbc, hi: 0xbd}, + // Block 0x6a, offset 0x21f + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xa0, hi: 0xa6}, + {value: 0x812d, lo: 0xa7, hi: 0xad}, + {value: 0x8132, lo: 0xae, hi: 0xaf}, + // Block 0x6b, offset 0x223 + {value: 0x0000, lo: 0x04}, + {value: 0x8100, lo: 0x89, hi: 0x8c}, + {value: 0x8100, lo: 0xb0, hi: 0xb2}, + {value: 0x8100, lo: 0xb4, hi: 0xb4}, + {value: 0x8100, lo: 0xb6, hi: 0xbf}, + // Block 0x6c, offset 0x228 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x81, hi: 0x8c}, + // Block 0x6d, offset 0x22a + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xb5, hi: 0xba}, + // Block 0x6e, offset 0x22c + {value: 0x0000, lo: 0x04}, + {value: 0x4a9f, lo: 0x9e, hi: 0x9f}, + {value: 0x4a9f, lo: 0xa3, hi: 0xa3}, + {value: 0x4a9f, lo: 0xa5, hi: 0xa6}, + {value: 0x4a9f, lo: 0xaa, hi: 0xaf}, + // Block 0x6f, offset 0x231 + {value: 0x0000, lo: 0x05}, + {value: 0x4a9f, lo: 0x82, hi: 0x87}, + {value: 0x4a9f, lo: 0x8a, hi: 0x8f}, + {value: 0x4a9f, lo: 0x92, hi: 0x97}, + {value: 0x4a9f, lo: 0x9a, hi: 0x9c}, + {value: 0x8100, lo: 0xa3, hi: 0xa3}, + // Block 0x70, offset 0x237 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x71, offset 0x239 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xa0, hi: 0xa0}, + // Block 0x72, offset 0x23b + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb6, hi: 0xba}, + // Block 0x73, offset 0x23d + {value: 0x002c, lo: 0x05}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x8f, hi: 0x8f}, + {value: 0x8132, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x74, offset 0x243 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xa5, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + // Block 0x75, offset 0x246 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x76, offset 0x249 + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4238, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4242, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x424c, lo: 0xab, hi: 0xab}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x77, offset 0x251 + {value: 0x0000, lo: 0x06}, + {value: 0x8132, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2d7e, lo: 0xae, hi: 0xae}, + {value: 0x2d88, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8104, lo: 0xb3, hi: 0xb4}, + // Block 0x78, offset 0x258 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x79, offset 0x25b + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb5, hi: 0xb5}, + {value: 0x8102, lo: 0xb6, hi: 0xb6}, + // Block 0x7a, offset 0x25e + {value: 0x0002, lo: 0x01}, + {value: 0x8102, lo: 0xa9, hi: 0xaa}, + // Block 0x7b, offset 0x260 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2d92, lo: 0x8b, hi: 0x8b}, + {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8132, lo: 0xa6, hi: 0xac}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + // Block 0x7c, offset 0x268 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x86, hi: 0x86}, + // Block 0x7d, offset 0x26b + {value: 0x6b5a, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2db0, lo: 0xbb, hi: 0xbb}, + {value: 0x2da6, lo: 0xbc, hi: 0xbd}, + {value: 0x2dba, lo: 0xbe, hi: 0xbe}, + // Block 0x7e, offset 0x272 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x83, hi: 0x83}, + // Block 0x7f, offset 0x275 + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2dc4, lo: 0xba, hi: 0xba}, + {value: 0x2dce, lo: 0xbb, hi: 0xbb}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x80, offset 0x27b + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0x80, hi: 0x80}, + // Block 0x81, offset 0x27d + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x82, offset 0x280 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xab, hi: 0xab}, + // Block 0x83, offset 0x282 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x84, offset 0x284 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb6}, + // Block 0x85, offset 0x286 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x86, offset 0x288 + {value: 0x0000, lo: 0x0c}, + {value: 0x45cc, lo: 0x9e, hi: 0x9e}, + {value: 0x45d6, lo: 0x9f, hi: 0x9f}, + {value: 0x460a, lo: 0xa0, hi: 0xa0}, + {value: 0x4618, lo: 0xa1, hi: 0xa1}, + {value: 0x4626, lo: 0xa2, hi: 0xa2}, + {value: 0x4634, lo: 0xa3, hi: 0xa3}, + {value: 0x4642, lo: 0xa4, hi: 0xa4}, + {value: 0x812b, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8130, lo: 0xad, hi: 0xad}, + {value: 0x812b, lo: 0xae, hi: 0xb2}, + {value: 0x812d, lo: 0xbb, hi: 0xbf}, + // Block 0x87, offset 0x295 + {value: 0x0000, lo: 0x09}, + {value: 0x812d, lo: 0x80, hi: 0x82}, + {value: 0x8132, lo: 0x85, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8b}, + {value: 0x8132, lo: 0xaa, hi: 0xad}, + {value: 0x45e0, lo: 0xbb, hi: 0xbb}, + {value: 0x45ea, lo: 0xbc, hi: 0xbc}, + {value: 0x4650, lo: 0xbd, hi: 0xbd}, + {value: 0x466c, lo: 0xbe, hi: 0xbe}, + {value: 0x465e, lo: 0xbf, hi: 0xbf}, + // Block 0x88, offset 0x29f + {value: 0x0000, lo: 0x01}, + {value: 0x467a, lo: 0x80, hi: 0x80}, + // Block 0x89, offset 0x2a1 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x82, hi: 0x84}, + // Block 0x8a, offset 0x2a3 + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0x80, hi: 0x86}, + {value: 0x8132, lo: 0x88, hi: 0x98}, + {value: 0x8132, lo: 0x9b, hi: 0xa1}, + {value: 0x8132, lo: 0xa3, hi: 0xa4}, + {value: 0x8132, lo: 0xa6, hi: 0xaa}, + // Block 0x8b, offset 0x2a9 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x90, hi: 0x96}, + // Block 0x8c, offset 0x2ab + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x84, hi: 0x89}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x8d, offset 0x2ae + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x93, hi: 0x93}, +} + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfkcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfkcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfkcValues[c0] + } + i := nfkcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfkcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfkcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfkcValues[c0] + } + i := nfkcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// nfkcTrie. Total size: 16994 bytes (16.60 KiB). Checksum: c3ed54ee046f3c46. +type nfkcTrie struct{} + +func newNfkcTrie(i int) *nfkcTrie { + return &nfkcTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 90: + return uint16(nfkcValues[n<<6+uint32(b)]) + default: + n -= 90 + return uint16(nfkcSparse.lookup(n, b)) + } +} + +// nfkcValues: 92 blocks, 5888 entries, 11776 bytes +// The third block is the zero block. +var nfkcValues = [5888]uint16{ + // Block 0x0, offset 0x0 + 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, + // Block 0x1, offset 0x40 + 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, + 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, + 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, + 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, + 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, + 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, + 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, + 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, + 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, + 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, + 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, + 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, + 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, + 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, + 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, + 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, + 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, + 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, + 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, + 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, + // Block 0x4, offset 0x100 + 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, + 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, + 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, + 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, + 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, + 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, + 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, + 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, + 0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0, + 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, + 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac, + // Block 0x5, offset 0x140 + 0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, + 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c, + 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, + 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, + 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, + 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, + 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, + 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, + 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, + 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, + 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7, + // Block 0x6, offset 0x180 + 0x184: 0x2dee, 0x185: 0x2df4, + 0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a, + 0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, + 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, + 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, + 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, + 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, + 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, + 0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334, + 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, + 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, + 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, + 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, + 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, + 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, + 0x1de: 0x305a, 0x1df: 0x3366, + 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, + 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, + 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, + // Block 0x8, offset 0x200 + 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, + 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, + 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, + 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, + 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, + 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, + 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, + 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, + 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, + 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, + // Block 0x9, offset 0x240 + 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, + 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, + 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, + 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, + 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, + 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, + 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, + 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, + 0x274: 0x0170, + 0x27a: 0x42a5, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x425a, 0x285: 0x447b, + 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, + 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, + 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c1: 0xa000, 0x2c5: 0xa000, + 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e, + 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0, + 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8, + 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, + 0x2f9: 0x01a6, + // Block 0xc, offset 0x300 + 0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b, + 0x306: 0xa000, 0x307: 0x3709, + 0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000, + 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, + 0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000, + 0x31e: 0xa000, 0x323: 0xa000, + 0x327: 0xa000, + 0x32b: 0xa000, 0x32d: 0xa000, + 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, + 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000, + 0x33e: 0xa000, + // Block 0xd, offset 0x340 + 0x341: 0x3733, 0x342: 0x37b7, + 0x350: 0x370f, 0x351: 0x3793, + 0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab, + 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd, + 0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf, + 0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000, + 0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed, + 0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805, + 0x378: 0x3787, 0x379: 0x380b, + // Block 0xe, offset 0x380 + 0x387: 0x1d61, + 0x391: 0x812d, + 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132, + 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132, + 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d, + 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132, + 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132, + 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a, + 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f, + 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112, + // Block 0xf, offset 0x3c0 + 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116, + 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c, + 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132, + 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132, + 0x3de: 0x8132, 0x3df: 0x812d, + 0x3f0: 0x811e, 0x3f5: 0x1d84, + 0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a, + // Block 0x10, offset 0x400 + 0x405: 0xa000, + 0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000, + 0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000, + 0x412: 0x2d4e, + 0x434: 0x8102, 0x435: 0x9900, + 0x43a: 0xa000, 0x43b: 0x2d56, + 0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000, + // Block 0x11, offset 0x440 + 0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8, + 0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107, + 0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0, + 0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9, + 0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be, + 0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5, + 0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa, + 0x46a: 0x01fd, + 0x478: 0x020c, + // Block 0x12, offset 0x480 + 0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101, + 0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116, + 0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128, + 0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137, + 0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec, + 0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5, + 0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x2f97, 0x4c1: 0x32a3, 0x4c2: 0x2fa1, 0x4c3: 0x32ad, 0x4c4: 0x2fa6, 0x4c5: 0x32b2, + 0x4c6: 0x2fab, 0x4c7: 0x32b7, 0x4c8: 0x38cc, 0x4c9: 0x3a5b, 0x4ca: 0x2fc4, 0x4cb: 0x32d0, + 0x4cc: 0x2fce, 0x4cd: 0x32da, 0x4ce: 0x2fdd, 0x4cf: 0x32e9, 0x4d0: 0x2fd3, 0x4d1: 0x32df, + 0x4d2: 0x2fd8, 0x4d3: 0x32e4, 0x4d4: 0x38ef, 0x4d5: 0x3a7e, 0x4d6: 0x38f6, 0x4d7: 0x3a85, + 0x4d8: 0x3019, 0x4d9: 0x3325, 0x4da: 0x301e, 0x4db: 0x332a, 0x4dc: 0x3904, 0x4dd: 0x3a93, + 0x4de: 0x3023, 0x4df: 0x332f, 0x4e0: 0x3032, 0x4e1: 0x333e, 0x4e2: 0x3050, 0x4e3: 0x335c, + 0x4e4: 0x305f, 0x4e5: 0x336b, 0x4e6: 0x3055, 0x4e7: 0x3361, 0x4e8: 0x3064, 0x4e9: 0x3370, + 0x4ea: 0x3069, 0x4eb: 0x3375, 0x4ec: 0x30af, 0x4ed: 0x33bb, 0x4ee: 0x390b, 0x4ef: 0x3a9a, + 0x4f0: 0x30b9, 0x4f1: 0x33ca, 0x4f2: 0x30c3, 0x4f3: 0x33d4, 0x4f4: 0x30cd, 0x4f5: 0x33de, + 0x4f6: 0x46c4, 0x4f7: 0x4755, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7, + 0x4fc: 0x30e1, 0x4fd: 0x33f2, 0x4fe: 0x30eb, 0x4ff: 0x33fc, + // Block 0x14, offset 0x500 + 0x500: 0x30f0, 0x501: 0x3401, 0x502: 0x30f5, 0x503: 0x3406, 0x504: 0x3109, 0x505: 0x341a, + 0x506: 0x3113, 0x507: 0x3424, 0x508: 0x3122, 0x509: 0x3433, 0x50a: 0x311d, 0x50b: 0x342e, + 0x50c: 0x3935, 0x50d: 0x3ac4, 0x50e: 0x3943, 0x50f: 0x3ad2, 0x510: 0x394a, 0x511: 0x3ad9, + 0x512: 0x3951, 0x513: 0x3ae0, 0x514: 0x314f, 0x515: 0x3460, 0x516: 0x3154, 0x517: 0x3465, + 0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x46f1, 0x51b: 0x4782, 0x51c: 0x3997, 0x51d: 0x3b26, + 0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4700, 0x523: 0x4791, + 0x524: 0x399e, 0x525: 0x3b2d, 0x526: 0x39a5, 0x527: 0x3b34, 0x528: 0x39ac, 0x529: 0x3b3b, + 0x52a: 0x3190, 0x52b: 0x34a1, 0x52c: 0x319a, 0x52d: 0x34b0, 0x52e: 0x31ae, 0x52f: 0x34c4, + 0x530: 0x31a9, 0x531: 0x34bf, 0x532: 0x31ea, 0x533: 0x3500, 0x534: 0x31f9, 0x535: 0x350f, + 0x536: 0x31f4, 0x537: 0x350a, 0x538: 0x39b3, 0x539: 0x3b42, 0x53a: 0x39ba, 0x53b: 0x3b49, + 0x53c: 0x31fe, 0x53d: 0x3514, 0x53e: 0x3203, 0x53f: 0x3519, + // Block 0x15, offset 0x540 + 0x540: 0x3208, 0x541: 0x351e, 0x542: 0x320d, 0x543: 0x3523, 0x544: 0x321c, 0x545: 0x3532, + 0x546: 0x3217, 0x547: 0x352d, 0x548: 0x3221, 0x549: 0x353c, 0x54a: 0x3226, 0x54b: 0x3541, + 0x54c: 0x322b, 0x54d: 0x3546, 0x54e: 0x3249, 0x54f: 0x3564, 0x550: 0x3262, 0x551: 0x3582, + 0x552: 0x3271, 0x553: 0x3591, 0x554: 0x3276, 0x555: 0x3596, 0x556: 0x337a, 0x557: 0x34a6, + 0x558: 0x3537, 0x559: 0x3573, 0x55a: 0x1be0, 0x55b: 0x42d7, + 0x560: 0x46a1, 0x561: 0x4732, 0x562: 0x2f83, 0x563: 0x328f, + 0x564: 0x3878, 0x565: 0x3a07, 0x566: 0x3871, 0x567: 0x3a00, 0x568: 0x3886, 0x569: 0x3a15, + 0x56a: 0x387f, 0x56b: 0x3a0e, 0x56c: 0x38be, 0x56d: 0x3a4d, 0x56e: 0x3894, 0x56f: 0x3a23, + 0x570: 0x388d, 0x571: 0x3a1c, 0x572: 0x38a2, 0x573: 0x3a31, 0x574: 0x389b, 0x575: 0x3a2a, + 0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x46b5, 0x579: 0x4746, 0x57a: 0x3000, 0x57b: 0x330c, + 0x57c: 0x2fec, 0x57d: 0x32f8, 0x57e: 0x38da, 0x57f: 0x3a69, + // Block 0x16, offset 0x580 + 0x580: 0x38d3, 0x581: 0x3a62, 0x582: 0x38e8, 0x583: 0x3a77, 0x584: 0x38e1, 0x585: 0x3a70, + 0x586: 0x38fd, 0x587: 0x3a8c, 0x588: 0x3091, 0x589: 0x339d, 0x58a: 0x30a5, 0x58b: 0x33b1, + 0x58c: 0x46e7, 0x58d: 0x4778, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf, + 0x592: 0x3919, 0x593: 0x3aa8, 0x594: 0x392e, 0x595: 0x3abd, 0x596: 0x3927, 0x597: 0x3ab6, + 0x598: 0x3989, 0x599: 0x3b18, 0x59a: 0x396d, 0x59b: 0x3afc, 0x59c: 0x3966, 0x59d: 0x3af5, + 0x59e: 0x397b, 0x59f: 0x3b0a, 0x5a0: 0x3974, 0x5a1: 0x3b03, 0x5a2: 0x3982, 0x5a3: 0x3b11, + 0x5a4: 0x31e5, 0x5a5: 0x34fb, 0x5a6: 0x31c7, 0x5a7: 0x34dd, 0x5a8: 0x39e4, 0x5a9: 0x3b73, + 0x5aa: 0x39dd, 0x5ab: 0x3b6c, 0x5ac: 0x39f2, 0x5ad: 0x3b81, 0x5ae: 0x39eb, 0x5af: 0x3b7a, + 0x5b0: 0x39f9, 0x5b1: 0x3b88, 0x5b2: 0x3230, 0x5b3: 0x354b, 0x5b4: 0x3258, 0x5b5: 0x3578, + 0x5b6: 0x3253, 0x5b7: 0x356e, 0x5b8: 0x323f, 0x5b9: 0x355a, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x4804, 0x5c1: 0x480a, 0x5c2: 0x491e, 0x5c3: 0x4936, 0x5c4: 0x4926, 0x5c5: 0x493e, + 0x5c6: 0x492e, 0x5c7: 0x4946, 0x5c8: 0x47aa, 0x5c9: 0x47b0, 0x5ca: 0x488e, 0x5cb: 0x48a6, + 0x5cc: 0x4896, 0x5cd: 0x48ae, 0x5ce: 0x489e, 0x5cf: 0x48b6, 0x5d0: 0x4816, 0x5d1: 0x481c, + 0x5d2: 0x3db8, 0x5d3: 0x3dc8, 0x5d4: 0x3dc0, 0x5d5: 0x3dd0, + 0x5d8: 0x47b6, 0x5d9: 0x47bc, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00, + 0x5e0: 0x482e, 0x5e1: 0x4834, 0x5e2: 0x494e, 0x5e3: 0x4966, + 0x5e4: 0x4956, 0x5e5: 0x496e, 0x5e6: 0x495e, 0x5e7: 0x4976, 0x5e8: 0x47c2, 0x5e9: 0x47c8, + 0x5ea: 0x48be, 0x5eb: 0x48d6, 0x5ec: 0x48c6, 0x5ed: 0x48de, 0x5ee: 0x48ce, 0x5ef: 0x48e6, + 0x5f0: 0x4846, 0x5f1: 0x484c, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38, + 0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x47ce, 0x5f9: 0x47d4, 0x5fa: 0x3d18, 0x5fb: 0x3d30, + 0x5fc: 0x3d20, 0x5fd: 0x3d38, 0x5fe: 0x3d28, 0x5ff: 0x3d40, + // Block 0x18, offset 0x600 + 0x600: 0x4852, 0x601: 0x4858, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60, + 0x608: 0x47da, 0x609: 0x47e0, 0x60a: 0x3d48, 0x60b: 0x3d58, + 0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x4864, 0x611: 0x486a, + 0x612: 0x3e80, 0x613: 0x3e98, 0x614: 0x3e88, 0x615: 0x3ea0, 0x616: 0x3e90, 0x617: 0x3ea8, + 0x619: 0x47e6, 0x61b: 0x3d68, 0x61d: 0x3d70, + 0x61f: 0x3d78, 0x620: 0x487c, 0x621: 0x4882, 0x622: 0x497e, 0x623: 0x4996, + 0x624: 0x4986, 0x625: 0x499e, 0x626: 0x498e, 0x627: 0x49a6, 0x628: 0x47ec, 0x629: 0x47f2, + 0x62a: 0x48ee, 0x62b: 0x4906, 0x62c: 0x48f6, 0x62d: 0x490e, 0x62e: 0x48fe, 0x62f: 0x4916, + 0x630: 0x47f8, 0x631: 0x431e, 0x632: 0x3691, 0x633: 0x4324, 0x634: 0x4822, 0x635: 0x432a, + 0x636: 0x36a3, 0x637: 0x4330, 0x638: 0x36c1, 0x639: 0x4336, 0x63a: 0x36d9, 0x63b: 0x433c, + 0x63c: 0x4870, 0x63d: 0x4342, + // Block 0x19, offset 0x640 + 0x640: 0x3da0, 0x641: 0x3da8, 0x642: 0x4184, 0x643: 0x41a2, 0x644: 0x418e, 0x645: 0x41ac, + 0x646: 0x4198, 0x647: 0x41b6, 0x648: 0x3cd8, 0x649: 0x3ce0, 0x64a: 0x40d0, 0x64b: 0x40ee, + 0x64c: 0x40da, 0x64d: 0x40f8, 0x64e: 0x40e4, 0x64f: 0x4102, 0x650: 0x3de8, 0x651: 0x3df0, + 0x652: 0x41c0, 0x653: 0x41de, 0x654: 0x41ca, 0x655: 0x41e8, 0x656: 0x41d4, 0x657: 0x41f2, + 0x658: 0x3d08, 0x659: 0x3d10, 0x65a: 0x410c, 0x65b: 0x412a, 0x65c: 0x4116, 0x65d: 0x4134, + 0x65e: 0x4120, 0x65f: 0x413e, 0x660: 0x3ec0, 0x661: 0x3ec8, 0x662: 0x41fc, 0x663: 0x421a, + 0x664: 0x4206, 0x665: 0x4224, 0x666: 0x4210, 0x667: 0x422e, 0x668: 0x3d80, 0x669: 0x3d88, + 0x66a: 0x4148, 0x66b: 0x4166, 0x66c: 0x4152, 0x66d: 0x4170, 0x66e: 0x415c, 0x66f: 0x417a, + 0x670: 0x3685, 0x671: 0x367f, 0x672: 0x3d90, 0x673: 0x368b, 0x674: 0x3d98, + 0x676: 0x4810, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x42ee, + 0x67c: 0x35fb, 0x67d: 0x4287, 0x67e: 0x01d3, 0x67f: 0x4287, + // Block 0x1a, offset 0x680 + 0x680: 0x42a0, 0x681: 0x4482, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0, + 0x686: 0x483a, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x42f4, 0x68a: 0x360d, 0x68b: 0x42fa, + 0x68c: 0x3619, 0x68d: 0x4489, 0x68e: 0x4490, 0x68f: 0x4497, 0x690: 0x36b5, 0x691: 0x36af, + 0x692: 0x3e00, 0x693: 0x44e4, 0x696: 0x36bb, 0x697: 0x3e10, + 0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4300, 0x69d: 0x449e, + 0x69e: 0x44a5, 0x69f: 0x44ac, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x44ec, + 0x6a4: 0x36cd, 0x6a5: 0x36d3, 0x6a6: 0x36f1, 0x6a7: 0x3e78, 0x6a8: 0x3661, 0x6a9: 0x365b, + 0x6aa: 0x364f, 0x6ab: 0x430c, 0x6ac: 0x3649, 0x6ad: 0x4474, 0x6ae: 0x447b, 0x6af: 0x0081, + 0x6b2: 0x3eb0, 0x6b3: 0x36f7, 0x6b4: 0x3eb8, + 0x6b6: 0x4888, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x4306, 0x6ba: 0x366d, 0x6bb: 0x4318, + 0x6bc: 0x3679, 0x6bd: 0x425a, 0x6be: 0x428c, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x1bd8, 0x6c1: 0x1bdc, 0x6c2: 0x0047, 0x6c3: 0x1c54, 0x6c5: 0x1be8, + 0x6c6: 0x1bec, 0x6c7: 0x00e9, 0x6c9: 0x1c58, 0x6ca: 0x008f, 0x6cb: 0x0051, + 0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053, + 0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x198d, + 0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065, + 0x6e0: 0x199f, 0x6e1: 0x1bc8, 0x6e2: 0x19a8, + 0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075, + 0x6ea: 0x0057, 0x6eb: 0x42d2, 0x6ec: 0x0045, 0x6ed: 0x0047, 0x6ef: 0x008b, + 0x6f0: 0x004b, 0x6f1: 0x004d, 0x6f3: 0x005b, 0x6f4: 0x009f, 0x6f5: 0x0215, + 0x6f6: 0x0218, 0x6f7: 0x021b, 0x6f8: 0x021e, 0x6f9: 0x0093, 0x6fb: 0x1b98, + 0x6fc: 0x01e8, 0x6fd: 0x01c1, 0x6fe: 0x0179, 0x6ff: 0x01a0, + // Block 0x1c, offset 0x700 + 0x700: 0x0463, 0x705: 0x0049, + 0x706: 0x0089, 0x707: 0x008b, 0x708: 0x0093, 0x709: 0x0095, + 0x710: 0x222e, 0x711: 0x223a, + 0x712: 0x22ee, 0x713: 0x2216, 0x714: 0x229a, 0x715: 0x2222, 0x716: 0x22a0, 0x717: 0x22b8, + 0x718: 0x22c4, 0x719: 0x2228, 0x71a: 0x22ca, 0x71b: 0x2234, 0x71c: 0x22be, 0x71d: 0x22d0, + 0x71e: 0x22d6, 0x71f: 0x1cbc, 0x720: 0x0053, 0x721: 0x195a, 0x722: 0x1ba4, 0x723: 0x1963, + 0x724: 0x006d, 0x725: 0x19ab, 0x726: 0x1bd0, 0x727: 0x1d48, 0x728: 0x1966, 0x729: 0x0071, + 0x72a: 0x19b7, 0x72b: 0x1bd4, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b, + 0x730: 0x0093, 0x731: 0x19e4, 0x732: 0x1c18, 0x733: 0x19ed, 0x734: 0x00ad, 0x735: 0x1a62, + 0x736: 0x1c4c, 0x737: 0x1d5c, 0x738: 0x19f0, 0x739: 0x00b1, 0x73a: 0x1a65, 0x73b: 0x1c50, + 0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b, + // Block 0x1d, offset 0x740 + 0x741: 0x3c06, 0x743: 0xa000, 0x744: 0x3c0d, 0x745: 0xa000, + 0x747: 0x3c14, 0x748: 0xa000, 0x749: 0x3c1b, + 0x74d: 0xa000, + 0x760: 0x2f65, 0x761: 0xa000, 0x762: 0x3c29, + 0x764: 0xa000, 0x765: 0xa000, + 0x76d: 0x3c22, 0x76e: 0x2f60, 0x76f: 0x2f6a, + 0x770: 0x3c30, 0x771: 0x3c37, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3e, 0x775: 0x3c45, + 0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c4c, 0x779: 0x3c53, 0x77a: 0xa000, 0x77b: 0xa000, + 0x77c: 0xa000, 0x77d: 0xa000, + // Block 0x1e, offset 0x780 + 0x780: 0x3c5a, 0x781: 0x3c61, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c76, 0x785: 0x3c7d, + 0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c84, 0x789: 0x3c8b, + 0x791: 0xa000, + 0x792: 0xa000, + 0x7a2: 0xa000, + 0x7a8: 0xa000, 0x7a9: 0xa000, + 0x7ab: 0xa000, 0x7ac: 0x3ca0, 0x7ad: 0x3ca7, 0x7ae: 0x3cae, 0x7af: 0x3cb5, + 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0xa000, 0x7b5: 0xa000, + // Block 0x1f, offset 0x7c0 + 0x7e0: 0x0023, 0x7e1: 0x0025, 0x7e2: 0x0027, 0x7e3: 0x0029, + 0x7e4: 0x002b, 0x7e5: 0x002d, 0x7e6: 0x002f, 0x7e7: 0x0031, 0x7e8: 0x0033, 0x7e9: 0x1882, + 0x7ea: 0x1885, 0x7eb: 0x1888, 0x7ec: 0x188b, 0x7ed: 0x188e, 0x7ee: 0x1891, 0x7ef: 0x1894, + 0x7f0: 0x1897, 0x7f1: 0x189a, 0x7f2: 0x189d, 0x7f3: 0x18a6, 0x7f4: 0x1a68, 0x7f5: 0x1a6c, + 0x7f6: 0x1a70, 0x7f7: 0x1a74, 0x7f8: 0x1a78, 0x7f9: 0x1a7c, 0x7fa: 0x1a80, 0x7fb: 0x1a84, + 0x7fc: 0x1a88, 0x7fd: 0x1c80, 0x7fe: 0x1c85, 0x7ff: 0x1c8a, + // Block 0x20, offset 0x800 + 0x800: 0x1c8f, 0x801: 0x1c94, 0x802: 0x1c99, 0x803: 0x1c9e, 0x804: 0x1ca3, 0x805: 0x1ca8, + 0x806: 0x1cad, 0x807: 0x1cb2, 0x808: 0x187f, 0x809: 0x18a3, 0x80a: 0x18c7, 0x80b: 0x18eb, + 0x80c: 0x190f, 0x80d: 0x1918, 0x80e: 0x191e, 0x80f: 0x1924, 0x810: 0x192a, 0x811: 0x1b60, + 0x812: 0x1b64, 0x813: 0x1b68, 0x814: 0x1b6c, 0x815: 0x1b70, 0x816: 0x1b74, 0x817: 0x1b78, + 0x818: 0x1b7c, 0x819: 0x1b80, 0x81a: 0x1b84, 0x81b: 0x1b88, 0x81c: 0x1af4, 0x81d: 0x1af8, + 0x81e: 0x1afc, 0x81f: 0x1b00, 0x820: 0x1b04, 0x821: 0x1b08, 0x822: 0x1b0c, 0x823: 0x1b10, + 0x824: 0x1b14, 0x825: 0x1b18, 0x826: 0x1b1c, 0x827: 0x1b20, 0x828: 0x1b24, 0x829: 0x1b28, + 0x82a: 0x1b2c, 0x82b: 0x1b30, 0x82c: 0x1b34, 0x82d: 0x1b38, 0x82e: 0x1b3c, 0x82f: 0x1b40, + 0x830: 0x1b44, 0x831: 0x1b48, 0x832: 0x1b4c, 0x833: 0x1b50, 0x834: 0x1b54, 0x835: 0x1b58, + 0x836: 0x0043, 0x837: 0x0045, 0x838: 0x0047, 0x839: 0x0049, 0x83a: 0x004b, 0x83b: 0x004d, + 0x83c: 0x004f, 0x83d: 0x0051, 0x83e: 0x0053, 0x83f: 0x0055, + // Block 0x21, offset 0x840 + 0x840: 0x06bf, 0x841: 0x06e3, 0x842: 0x06ef, 0x843: 0x06ff, 0x844: 0x0707, 0x845: 0x0713, + 0x846: 0x071b, 0x847: 0x0723, 0x848: 0x072f, 0x849: 0x0783, 0x84a: 0x079b, 0x84b: 0x07ab, + 0x84c: 0x07bb, 0x84d: 0x07cb, 0x84e: 0x07db, 0x84f: 0x07fb, 0x850: 0x07ff, 0x851: 0x0803, + 0x852: 0x0837, 0x853: 0x085f, 0x854: 0x086f, 0x855: 0x0877, 0x856: 0x087b, 0x857: 0x0887, + 0x858: 0x08a3, 0x859: 0x08a7, 0x85a: 0x08bf, 0x85b: 0x08c3, 0x85c: 0x08cb, 0x85d: 0x08db, + 0x85e: 0x0977, 0x85f: 0x098b, 0x860: 0x09cb, 0x861: 0x09df, 0x862: 0x09e7, 0x863: 0x09eb, + 0x864: 0x09fb, 0x865: 0x0a17, 0x866: 0x0a43, 0x867: 0x0a4f, 0x868: 0x0a6f, 0x869: 0x0a7b, + 0x86a: 0x0a7f, 0x86b: 0x0a83, 0x86c: 0x0a9b, 0x86d: 0x0a9f, 0x86e: 0x0acb, 0x86f: 0x0ad7, + 0x870: 0x0adf, 0x871: 0x0ae7, 0x872: 0x0af7, 0x873: 0x0aff, 0x874: 0x0b07, 0x875: 0x0b33, + 0x876: 0x0b37, 0x877: 0x0b3f, 0x878: 0x0b43, 0x879: 0x0b4b, 0x87a: 0x0b53, 0x87b: 0x0b63, + 0x87c: 0x0b7f, 0x87d: 0x0bf7, 0x87e: 0x0c0b, 0x87f: 0x0c0f, + // Block 0x22, offset 0x880 + 0x880: 0x0c8f, 0x881: 0x0c93, 0x882: 0x0ca7, 0x883: 0x0cab, 0x884: 0x0cb3, 0x885: 0x0cbb, + 0x886: 0x0cc3, 0x887: 0x0ccf, 0x888: 0x0cf7, 0x889: 0x0d07, 0x88a: 0x0d1b, 0x88b: 0x0d8b, + 0x88c: 0x0d97, 0x88d: 0x0da7, 0x88e: 0x0db3, 0x88f: 0x0dbf, 0x890: 0x0dc7, 0x891: 0x0dcb, + 0x892: 0x0dcf, 0x893: 0x0dd3, 0x894: 0x0dd7, 0x895: 0x0e8f, 0x896: 0x0ed7, 0x897: 0x0ee3, + 0x898: 0x0ee7, 0x899: 0x0eeb, 0x89a: 0x0eef, 0x89b: 0x0ef7, 0x89c: 0x0efb, 0x89d: 0x0f0f, + 0x89e: 0x0f2b, 0x89f: 0x0f33, 0x8a0: 0x0f73, 0x8a1: 0x0f77, 0x8a2: 0x0f7f, 0x8a3: 0x0f83, + 0x8a4: 0x0f8b, 0x8a5: 0x0f8f, 0x8a6: 0x0fb3, 0x8a7: 0x0fb7, 0x8a8: 0x0fd3, 0x8a9: 0x0fd7, + 0x8aa: 0x0fdb, 0x8ab: 0x0fdf, 0x8ac: 0x0ff3, 0x8ad: 0x1017, 0x8ae: 0x101b, 0x8af: 0x101f, + 0x8b0: 0x1043, 0x8b1: 0x1083, 0x8b2: 0x1087, 0x8b3: 0x10a7, 0x8b4: 0x10b7, 0x8b5: 0x10bf, + 0x8b6: 0x10df, 0x8b7: 0x1103, 0x8b8: 0x1147, 0x8b9: 0x114f, 0x8ba: 0x1163, 0x8bb: 0x116f, + 0x8bc: 0x1177, 0x8bd: 0x117f, 0x8be: 0x1183, 0x8bf: 0x1187, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x119f, 0x8c1: 0x11a3, 0x8c2: 0x11bf, 0x8c3: 0x11c7, 0x8c4: 0x11cf, 0x8c5: 0x11d3, + 0x8c6: 0x11df, 0x8c7: 0x11e7, 0x8c8: 0x11eb, 0x8c9: 0x11ef, 0x8ca: 0x11f7, 0x8cb: 0x11fb, + 0x8cc: 0x129b, 0x8cd: 0x12af, 0x8ce: 0x12e3, 0x8cf: 0x12e7, 0x8d0: 0x12ef, 0x8d1: 0x131b, + 0x8d2: 0x1323, 0x8d3: 0x132b, 0x8d4: 0x1333, 0x8d5: 0x136f, 0x8d6: 0x1373, 0x8d7: 0x137b, + 0x8d8: 0x137f, 0x8d9: 0x1383, 0x8da: 0x13af, 0x8db: 0x13b3, 0x8dc: 0x13bb, 0x8dd: 0x13cf, + 0x8de: 0x13d3, 0x8df: 0x13ef, 0x8e0: 0x13f7, 0x8e1: 0x13fb, 0x8e2: 0x141f, 0x8e3: 0x143f, + 0x8e4: 0x1453, 0x8e5: 0x1457, 0x8e6: 0x145f, 0x8e7: 0x148b, 0x8e8: 0x148f, 0x8e9: 0x149f, + 0x8ea: 0x14c3, 0x8eb: 0x14cf, 0x8ec: 0x14df, 0x8ed: 0x14f7, 0x8ee: 0x14ff, 0x8ef: 0x1503, + 0x8f0: 0x1507, 0x8f1: 0x150b, 0x8f2: 0x1517, 0x8f3: 0x151b, 0x8f4: 0x1523, 0x8f5: 0x153f, + 0x8f6: 0x1543, 0x8f7: 0x1547, 0x8f8: 0x155f, 0x8f9: 0x1563, 0x8fa: 0x156b, 0x8fb: 0x157f, + 0x8fc: 0x1583, 0x8fd: 0x1587, 0x8fe: 0x158f, 0x8ff: 0x1593, + // Block 0x24, offset 0x900 + 0x906: 0xa000, 0x90b: 0xa000, + 0x90c: 0x3f08, 0x90d: 0xa000, 0x90e: 0x3f10, 0x90f: 0xa000, 0x910: 0x3f18, 0x911: 0xa000, + 0x912: 0x3f20, 0x913: 0xa000, 0x914: 0x3f28, 0x915: 0xa000, 0x916: 0x3f30, 0x917: 0xa000, + 0x918: 0x3f38, 0x919: 0xa000, 0x91a: 0x3f40, 0x91b: 0xa000, 0x91c: 0x3f48, 0x91d: 0xa000, + 0x91e: 0x3f50, 0x91f: 0xa000, 0x920: 0x3f58, 0x921: 0xa000, 0x922: 0x3f60, + 0x924: 0xa000, 0x925: 0x3f68, 0x926: 0xa000, 0x927: 0x3f70, 0x928: 0xa000, 0x929: 0x3f78, + 0x92f: 0xa000, + 0x930: 0x3f80, 0x931: 0x3f88, 0x932: 0xa000, 0x933: 0x3f90, 0x934: 0x3f98, 0x935: 0xa000, + 0x936: 0x3fa0, 0x937: 0x3fa8, 0x938: 0xa000, 0x939: 0x3fb0, 0x93a: 0x3fb8, 0x93b: 0xa000, + 0x93c: 0x3fc0, 0x93d: 0x3fc8, + // Block 0x25, offset 0x940 + 0x954: 0x3f00, + 0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x42dc, 0x95c: 0x42e2, 0x95d: 0xa000, + 0x95e: 0x3fd0, 0x95f: 0x26b4, + 0x966: 0xa000, + 0x96b: 0xa000, 0x96c: 0x3fe0, 0x96d: 0xa000, 0x96e: 0x3fe8, 0x96f: 0xa000, + 0x970: 0x3ff0, 0x971: 0xa000, 0x972: 0x3ff8, 0x973: 0xa000, 0x974: 0x4000, 0x975: 0xa000, + 0x976: 0x4008, 0x977: 0xa000, 0x978: 0x4010, 0x979: 0xa000, 0x97a: 0x4018, 0x97b: 0xa000, + 0x97c: 0x4020, 0x97d: 0xa000, 0x97e: 0x4028, 0x97f: 0xa000, + // Block 0x26, offset 0x980 + 0x980: 0x4030, 0x981: 0xa000, 0x982: 0x4038, 0x984: 0xa000, 0x985: 0x4040, + 0x986: 0xa000, 0x987: 0x4048, 0x988: 0xa000, 0x989: 0x4050, + 0x98f: 0xa000, 0x990: 0x4058, 0x991: 0x4060, + 0x992: 0xa000, 0x993: 0x4068, 0x994: 0x4070, 0x995: 0xa000, 0x996: 0x4078, 0x997: 0x4080, + 0x998: 0xa000, 0x999: 0x4088, 0x99a: 0x4090, 0x99b: 0xa000, 0x99c: 0x4098, 0x99d: 0x40a0, + 0x9af: 0xa000, + 0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd8, + 0x9b7: 0x40a8, 0x9b8: 0x40b0, 0x9b9: 0x40b8, 0x9ba: 0x40c0, + 0x9bd: 0xa000, 0x9be: 0x40c8, 0x9bf: 0x26c9, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0367, 0x9c1: 0x032b, 0x9c2: 0x032f, 0x9c3: 0x0333, 0x9c4: 0x037b, 0x9c5: 0x0337, + 0x9c6: 0x033b, 0x9c7: 0x033f, 0x9c8: 0x0343, 0x9c9: 0x0347, 0x9ca: 0x034b, 0x9cb: 0x034f, + 0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x49bd, 0x9d0: 0x49c3, 0x9d1: 0x49c9, + 0x9d2: 0x49cf, 0x9d3: 0x49d5, 0x9d4: 0x49db, 0x9d5: 0x49e1, 0x9d6: 0x49e7, 0x9d7: 0x49ed, + 0x9d8: 0x49f3, 0x9d9: 0x49f9, 0x9da: 0x49ff, 0x9db: 0x4a05, 0x9dc: 0x4a0b, 0x9dd: 0x4a11, + 0x9de: 0x4a17, 0x9df: 0x4a1d, 0x9e0: 0x4a23, 0x9e1: 0x4a29, 0x9e2: 0x4a2f, 0x9e3: 0x4a35, + 0x9e4: 0x03c3, 0x9e5: 0x035f, 0x9e6: 0x0363, 0x9e7: 0x03e7, 0x9e8: 0x03eb, 0x9e9: 0x03ef, + 0x9ea: 0x03f3, 0x9eb: 0x03f7, 0x9ec: 0x03fb, 0x9ed: 0x03ff, 0x9ee: 0x036b, 0x9ef: 0x0403, + 0x9f0: 0x0407, 0x9f1: 0x036f, 0x9f2: 0x0373, 0x9f3: 0x0377, 0x9f4: 0x037f, 0x9f5: 0x0383, + 0x9f6: 0x0387, 0x9f7: 0x038b, 0x9f8: 0x038f, 0x9f9: 0x0393, 0x9fa: 0x0397, 0x9fb: 0x039b, + 0x9fc: 0x039f, 0x9fd: 0x03a3, 0x9fe: 0x03a7, 0x9ff: 0x03ab, + // Block 0x28, offset 0xa00 + 0xa00: 0x03af, 0xa01: 0x03b3, 0xa02: 0x040b, 0xa03: 0x040f, 0xa04: 0x03b7, 0xa05: 0x03bb, + 0xa06: 0x03bf, 0xa07: 0x03c7, 0xa08: 0x03cb, 0xa09: 0x03cf, 0xa0a: 0x03d3, 0xa0b: 0x03d7, + 0xa0c: 0x03db, 0xa0d: 0x03df, 0xa0e: 0x03e3, + 0xa12: 0x06bf, 0xa13: 0x071b, 0xa14: 0x06cb, 0xa15: 0x097b, 0xa16: 0x06cf, 0xa17: 0x06e7, + 0xa18: 0x06d3, 0xa19: 0x0f93, 0xa1a: 0x0707, 0xa1b: 0x06db, 0xa1c: 0x06c3, 0xa1d: 0x09ff, + 0xa1e: 0x098f, 0xa1f: 0x072f, + // Block 0x29, offset 0xa40 + 0xa40: 0x2054, 0xa41: 0x205a, 0xa42: 0x2060, 0xa43: 0x2066, 0xa44: 0x206c, 0xa45: 0x2072, + 0xa46: 0x2078, 0xa47: 0x207e, 0xa48: 0x2084, 0xa49: 0x208a, 0xa4a: 0x2090, 0xa4b: 0x2096, + 0xa4c: 0x209c, 0xa4d: 0x20a2, 0xa4e: 0x2726, 0xa4f: 0x272f, 0xa50: 0x2738, 0xa51: 0x2741, + 0xa52: 0x274a, 0xa53: 0x2753, 0xa54: 0x275c, 0xa55: 0x2765, 0xa56: 0x276e, 0xa57: 0x2780, + 0xa58: 0x2789, 0xa59: 0x2792, 0xa5a: 0x279b, 0xa5b: 0x27a4, 0xa5c: 0x2777, 0xa5d: 0x2bac, + 0xa5e: 0x2aed, 0xa60: 0x20a8, 0xa61: 0x20c0, 0xa62: 0x20b4, 0xa63: 0x2108, + 0xa64: 0x20c6, 0xa65: 0x20e4, 0xa66: 0x20ae, 0xa67: 0x20de, 0xa68: 0x20ba, 0xa69: 0x20f0, + 0xa6a: 0x2120, 0xa6b: 0x213e, 0xa6c: 0x2138, 0xa6d: 0x212c, 0xa6e: 0x217a, 0xa6f: 0x210e, + 0xa70: 0x211a, 0xa71: 0x2132, 0xa72: 0x2126, 0xa73: 0x2150, 0xa74: 0x20fc, 0xa75: 0x2144, + 0xa76: 0x216e, 0xa77: 0x2156, 0xa78: 0x20ea, 0xa79: 0x20cc, 0xa7a: 0x2102, 0xa7b: 0x2114, + 0xa7c: 0x214a, 0xa7d: 0x20d2, 0xa7e: 0x2174, 0xa7f: 0x20f6, + // Block 0x2a, offset 0xa80 + 0xa80: 0x215c, 0xa81: 0x20d8, 0xa82: 0x2162, 0xa83: 0x2168, 0xa84: 0x092f, 0xa85: 0x0b03, + 0xa86: 0x0ca7, 0xa87: 0x10c7, + 0xa90: 0x1bc4, 0xa91: 0x18a9, + 0xa92: 0x18ac, 0xa93: 0x18af, 0xa94: 0x18b2, 0xa95: 0x18b5, 0xa96: 0x18b8, 0xa97: 0x18bb, + 0xa98: 0x18be, 0xa99: 0x18c1, 0xa9a: 0x18ca, 0xa9b: 0x18cd, 0xa9c: 0x18d0, 0xa9d: 0x18d3, + 0xa9e: 0x18d6, 0xa9f: 0x18d9, 0xaa0: 0x0313, 0xaa1: 0x031b, 0xaa2: 0x031f, 0xaa3: 0x0327, + 0xaa4: 0x032b, 0xaa5: 0x032f, 0xaa6: 0x0337, 0xaa7: 0x033f, 0xaa8: 0x0343, 0xaa9: 0x034b, + 0xaaa: 0x034f, 0xaab: 0x0353, 0xaac: 0x0357, 0xaad: 0x035b, 0xaae: 0x2e18, 0xaaf: 0x2e20, + 0xab0: 0x2e28, 0xab1: 0x2e30, 0xab2: 0x2e38, 0xab3: 0x2e40, 0xab4: 0x2e48, 0xab5: 0x2e50, + 0xab6: 0x2e60, 0xab7: 0x2e68, 0xab8: 0x2e70, 0xab9: 0x2e78, 0xaba: 0x2e80, 0xabb: 0x2e88, + 0xabc: 0x2ed3, 0xabd: 0x2e9b, 0xabe: 0x2e58, + // Block 0x2b, offset 0xac0 + 0xac0: 0x06bf, 0xac1: 0x071b, 0xac2: 0x06cb, 0xac3: 0x097b, 0xac4: 0x071f, 0xac5: 0x07af, + 0xac6: 0x06c7, 0xac7: 0x07ab, 0xac8: 0x070b, 0xac9: 0x0887, 0xaca: 0x0d07, 0xacb: 0x0e8f, + 0xacc: 0x0dd7, 0xacd: 0x0d1b, 0xace: 0x145f, 0xacf: 0x098b, 0xad0: 0x0ccf, 0xad1: 0x0d4b, + 0xad2: 0x0d0b, 0xad3: 0x104b, 0xad4: 0x08fb, 0xad5: 0x0f03, 0xad6: 0x1387, 0xad7: 0x105f, + 0xad8: 0x0843, 0xad9: 0x108f, 0xada: 0x0f9b, 0xadb: 0x0a17, 0xadc: 0x140f, 0xadd: 0x077f, + 0xade: 0x08ab, 0xadf: 0x0df7, 0xae0: 0x1527, 0xae1: 0x0743, 0xae2: 0x07d3, 0xae3: 0x0d9b, + 0xae4: 0x06cf, 0xae5: 0x06e7, 0xae6: 0x06d3, 0xae7: 0x0adb, 0xae8: 0x08ef, 0xae9: 0x087f, + 0xaea: 0x0a57, 0xaeb: 0x0a4b, 0xaec: 0x0feb, 0xaed: 0x073f, 0xaee: 0x139b, 0xaef: 0x089b, + 0xaf0: 0x09f3, 0xaf1: 0x18dc, 0xaf2: 0x18df, 0xaf3: 0x18e2, 0xaf4: 0x18e5, 0xaf5: 0x18ee, + 0xaf6: 0x18f1, 0xaf7: 0x18f4, 0xaf8: 0x18f7, 0xaf9: 0x18fa, 0xafa: 0x18fd, 0xafb: 0x1900, + 0xafc: 0x1903, 0xafd: 0x1906, 0xafe: 0x1909, 0xaff: 0x1912, + // Block 0x2c, offset 0xb00 + 0xb00: 0x1cc6, 0xb01: 0x1cd5, 0xb02: 0x1ce4, 0xb03: 0x1cf3, 0xb04: 0x1d02, 0xb05: 0x1d11, + 0xb06: 0x1d20, 0xb07: 0x1d2f, 0xb08: 0x1d3e, 0xb09: 0x218c, 0xb0a: 0x219e, 0xb0b: 0x21b0, + 0xb0c: 0x1954, 0xb0d: 0x1c04, 0xb0e: 0x19d2, 0xb0f: 0x1ba8, 0xb10: 0x04cb, 0xb11: 0x04d3, + 0xb12: 0x04db, 0xb13: 0x04e3, 0xb14: 0x04eb, 0xb15: 0x04ef, 0xb16: 0x04f3, 0xb17: 0x04f7, + 0xb18: 0x04fb, 0xb19: 0x04ff, 0xb1a: 0x0503, 0xb1b: 0x0507, 0xb1c: 0x050b, 0xb1d: 0x050f, + 0xb1e: 0x0513, 0xb1f: 0x0517, 0xb20: 0x051b, 0xb21: 0x0523, 0xb22: 0x0527, 0xb23: 0x052b, + 0xb24: 0x052f, 0xb25: 0x0533, 0xb26: 0x0537, 0xb27: 0x053b, 0xb28: 0x053f, 0xb29: 0x0543, + 0xb2a: 0x0547, 0xb2b: 0x054b, 0xb2c: 0x054f, 0xb2d: 0x0553, 0xb2e: 0x0557, 0xb2f: 0x055b, + 0xb30: 0x055f, 0xb31: 0x0563, 0xb32: 0x0567, 0xb33: 0x056f, 0xb34: 0x0577, 0xb35: 0x057f, + 0xb36: 0x0583, 0xb37: 0x0587, 0xb38: 0x058b, 0xb39: 0x058f, 0xb3a: 0x0593, 0xb3b: 0x0597, + 0xb3c: 0x059b, 0xb3d: 0x059f, 0xb3e: 0x05a3, + // Block 0x2d, offset 0xb40 + 0xb40: 0x2b0c, 0xb41: 0x29a8, 0xb42: 0x2b1c, 0xb43: 0x2880, 0xb44: 0x2ee4, 0xb45: 0x288a, + 0xb46: 0x2894, 0xb47: 0x2f28, 0xb48: 0x29b5, 0xb49: 0x289e, 0xb4a: 0x28a8, 0xb4b: 0x28b2, + 0xb4c: 0x29dc, 0xb4d: 0x29e9, 0xb4e: 0x29c2, 0xb4f: 0x29cf, 0xb50: 0x2ea9, 0xb51: 0x29f6, + 0xb52: 0x2a03, 0xb53: 0x2bbe, 0xb54: 0x26bb, 0xb55: 0x2bd1, 0xb56: 0x2be4, 0xb57: 0x2b2c, + 0xb58: 0x2a10, 0xb59: 0x2bf7, 0xb5a: 0x2c0a, 0xb5b: 0x2a1d, 0xb5c: 0x28bc, 0xb5d: 0x28c6, + 0xb5e: 0x2eb7, 0xb5f: 0x2a2a, 0xb60: 0x2b3c, 0xb61: 0x2ef5, 0xb62: 0x28d0, 0xb63: 0x28da, + 0xb64: 0x2a37, 0xb65: 0x28e4, 0xb66: 0x28ee, 0xb67: 0x26d0, 0xb68: 0x26d7, 0xb69: 0x28f8, + 0xb6a: 0x2902, 0xb6b: 0x2c1d, 0xb6c: 0x2a44, 0xb6d: 0x2b4c, 0xb6e: 0x2c30, 0xb6f: 0x2a51, + 0xb70: 0x2916, 0xb71: 0x290c, 0xb72: 0x2f3c, 0xb73: 0x2a5e, 0xb74: 0x2c43, 0xb75: 0x2920, + 0xb76: 0x2b5c, 0xb77: 0x292a, 0xb78: 0x2a78, 0xb79: 0x2934, 0xb7a: 0x2a85, 0xb7b: 0x2f06, + 0xb7c: 0x2a6b, 0xb7d: 0x2b6c, 0xb7e: 0x2a92, 0xb7f: 0x26de, + // Block 0x2e, offset 0xb80 + 0xb80: 0x2f17, 0xb81: 0x293e, 0xb82: 0x2948, 0xb83: 0x2a9f, 0xb84: 0x2952, 0xb85: 0x295c, + 0xb86: 0x2966, 0xb87: 0x2b7c, 0xb88: 0x2aac, 0xb89: 0x26e5, 0xb8a: 0x2c56, 0xb8b: 0x2e90, + 0xb8c: 0x2b8c, 0xb8d: 0x2ab9, 0xb8e: 0x2ec5, 0xb8f: 0x2970, 0xb90: 0x297a, 0xb91: 0x2ac6, + 0xb92: 0x26ec, 0xb93: 0x2ad3, 0xb94: 0x2b9c, 0xb95: 0x26f3, 0xb96: 0x2c69, 0xb97: 0x2984, + 0xb98: 0x1cb7, 0xb99: 0x1ccb, 0xb9a: 0x1cda, 0xb9b: 0x1ce9, 0xb9c: 0x1cf8, 0xb9d: 0x1d07, + 0xb9e: 0x1d16, 0xb9f: 0x1d25, 0xba0: 0x1d34, 0xba1: 0x1d43, 0xba2: 0x2192, 0xba3: 0x21a4, + 0xba4: 0x21b6, 0xba5: 0x21c2, 0xba6: 0x21ce, 0xba7: 0x21da, 0xba8: 0x21e6, 0xba9: 0x21f2, + 0xbaa: 0x21fe, 0xbab: 0x220a, 0xbac: 0x2246, 0xbad: 0x2252, 0xbae: 0x225e, 0xbaf: 0x226a, + 0xbb0: 0x2276, 0xbb1: 0x1c14, 0xbb2: 0x19c6, 0xbb3: 0x1936, 0xbb4: 0x1be4, 0xbb5: 0x1a47, + 0xbb6: 0x1a56, 0xbb7: 0x19cc, 0xbb8: 0x1bfc, 0xbb9: 0x1c00, 0xbba: 0x1960, 0xbbb: 0x2701, + 0xbbc: 0x270f, 0xbbd: 0x26fa, 0xbbe: 0x2708, 0xbbf: 0x2ae0, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x1a4a, 0xbc1: 0x1a32, 0xbc2: 0x1c60, 0xbc3: 0x1a1a, 0xbc4: 0x19f3, 0xbc5: 0x1969, + 0xbc6: 0x1978, 0xbc7: 0x1948, 0xbc8: 0x1bf0, 0xbc9: 0x1d52, 0xbca: 0x1a4d, 0xbcb: 0x1a35, + 0xbcc: 0x1c64, 0xbcd: 0x1c70, 0xbce: 0x1a26, 0xbcf: 0x19fc, 0xbd0: 0x1957, 0xbd1: 0x1c1c, + 0xbd2: 0x1bb0, 0xbd3: 0x1b9c, 0xbd4: 0x1bcc, 0xbd5: 0x1c74, 0xbd6: 0x1a29, 0xbd7: 0x19c9, + 0xbd8: 0x19ff, 0xbd9: 0x19de, 0xbda: 0x1a41, 0xbdb: 0x1c78, 0xbdc: 0x1a2c, 0xbdd: 0x19c0, + 0xbde: 0x1a02, 0xbdf: 0x1c3c, 0xbe0: 0x1bf4, 0xbe1: 0x1a14, 0xbe2: 0x1c24, 0xbe3: 0x1c40, + 0xbe4: 0x1bf8, 0xbe5: 0x1a17, 0xbe6: 0x1c28, 0xbe7: 0x22e8, 0xbe8: 0x22fc, 0xbe9: 0x1996, + 0xbea: 0x1c20, 0xbeb: 0x1bb4, 0xbec: 0x1ba0, 0xbed: 0x1c48, 0xbee: 0x2716, 0xbef: 0x27ad, + 0xbf0: 0x1a59, 0xbf1: 0x1a44, 0xbf2: 0x1c7c, 0xbf3: 0x1a2f, 0xbf4: 0x1a50, 0xbf5: 0x1a38, + 0xbf6: 0x1c68, 0xbf7: 0x1a1d, 0xbf8: 0x19f6, 0xbf9: 0x1981, 0xbfa: 0x1a53, 0xbfb: 0x1a3b, + 0xbfc: 0x1c6c, 0xbfd: 0x1a20, 0xbfe: 0x19f9, 0xbff: 0x1984, + // Block 0x30, offset 0xc00 + 0xc00: 0x1c2c, 0xc01: 0x1bb8, 0xc02: 0x1d4d, 0xc03: 0x1939, 0xc04: 0x19ba, 0xc05: 0x19bd, + 0xc06: 0x22f5, 0xc07: 0x1b94, 0xc08: 0x19c3, 0xc09: 0x194b, 0xc0a: 0x19e1, 0xc0b: 0x194e, + 0xc0c: 0x19ea, 0xc0d: 0x196c, 0xc0e: 0x196f, 0xc0f: 0x1a05, 0xc10: 0x1a0b, 0xc11: 0x1a0e, + 0xc12: 0x1c30, 0xc13: 0x1a11, 0xc14: 0x1a23, 0xc15: 0x1c38, 0xc16: 0x1c44, 0xc17: 0x1990, + 0xc18: 0x1d57, 0xc19: 0x1bbc, 0xc1a: 0x1993, 0xc1b: 0x1a5c, 0xc1c: 0x19a5, 0xc1d: 0x19b4, + 0xc1e: 0x22e2, 0xc1f: 0x22dc, 0xc20: 0x1cc1, 0xc21: 0x1cd0, 0xc22: 0x1cdf, 0xc23: 0x1cee, + 0xc24: 0x1cfd, 0xc25: 0x1d0c, 0xc26: 0x1d1b, 0xc27: 0x1d2a, 0xc28: 0x1d39, 0xc29: 0x2186, + 0xc2a: 0x2198, 0xc2b: 0x21aa, 0xc2c: 0x21bc, 0xc2d: 0x21c8, 0xc2e: 0x21d4, 0xc2f: 0x21e0, + 0xc30: 0x21ec, 0xc31: 0x21f8, 0xc32: 0x2204, 0xc33: 0x2240, 0xc34: 0x224c, 0xc35: 0x2258, + 0xc36: 0x2264, 0xc37: 0x2270, 0xc38: 0x227c, 0xc39: 0x2282, 0xc3a: 0x2288, 0xc3b: 0x228e, + 0xc3c: 0x2294, 0xc3d: 0x22a6, 0xc3e: 0x22ac, 0xc3f: 0x1c10, + // Block 0x31, offset 0xc40 + 0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb, + 0xc46: 0x08df, 0xc47: 0x162b, 0xc48: 0x162b, 0xc49: 0x0a0b, 0xc4a: 0x145f, 0xc4b: 0x0943, + 0xc4c: 0x0a07, 0xc4d: 0x0bef, 0xc4e: 0x0fcf, 0xc4f: 0x115f, 0xc50: 0x1297, 0xc51: 0x12d3, + 0xc52: 0x1307, 0xc53: 0x141b, 0xc54: 0x0d73, 0xc55: 0x0dff, 0xc56: 0x0eab, 0xc57: 0x0f43, + 0xc58: 0x125f, 0xc59: 0x1447, 0xc5a: 0x1573, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87, + 0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15c3, 0xc61: 0x0ab3, 0xc62: 0x0e77, 0xc63: 0x1283, + 0xc64: 0x1317, 0xc65: 0x0c23, 0xc66: 0x11bb, 0xc67: 0x12df, 0xc68: 0x0b1f, 0xc69: 0x0d0f, + 0xc6a: 0x0e17, 0xc6b: 0x0f1b, 0xc6c: 0x1427, 0xc6d: 0x074f, 0xc6e: 0x07e7, 0xc6f: 0x0853, + 0xc70: 0x0c8b, 0xc71: 0x0d7f, 0xc72: 0x0ecb, 0xc73: 0x0fef, 0xc74: 0x1177, 0xc75: 0x128b, + 0xc76: 0x12a3, 0xc77: 0x13c7, 0xc78: 0x14ef, 0xc79: 0x15a3, 0xc7a: 0x15bf, 0xc7b: 0x102b, + 0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x147b, + // Block 0x32, offset 0xc80 + 0xc80: 0x15cb, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b, + 0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e7, 0xc8a: 0x09c3, 0xc8b: 0x0a8f, + 0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a7, + 0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127, + 0xc98: 0x125b, 0xc99: 0x14af, 0xc9a: 0x1367, 0xc9b: 0x0c27, 0xc9c: 0x0d73, 0xc9d: 0x1357, + 0xc9e: 0x06f7, 0xc9f: 0x0a63, 0xca0: 0x0b93, 0xca1: 0x0f2f, 0xca2: 0x0faf, 0xca3: 0x0873, + 0xca4: 0x103b, 0xca5: 0x075f, 0xca6: 0x0b77, 0xca7: 0x06d7, 0xca8: 0x0deb, 0xca9: 0x0ca3, + 0xcaa: 0x110f, 0xcab: 0x08c7, 0xcac: 0x09b3, 0xcad: 0x0ffb, 0xcae: 0x1263, 0xcaf: 0x133b, + 0xcb0: 0x0db7, 0xcb1: 0x13f7, 0xcb2: 0x0de3, 0xcb3: 0x0c37, 0xcb4: 0x121b, 0xcb5: 0x0c57, + 0xcb6: 0x0fab, 0xcb7: 0x072b, 0xcb8: 0x07a7, 0xcb9: 0x07eb, 0xcba: 0x0d53, 0xcbb: 0x10fb, + 0xcbc: 0x11f3, 0xcbd: 0x1347, 0xcbe: 0x145b, 0xcbf: 0x085b, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f, + 0xcc6: 0x1497, 0xcc7: 0x157b, 0xcc8: 0x15cf, 0xcc9: 0x15e7, 0xcca: 0x0837, 0xccb: 0x0cf3, + 0xccc: 0x0da3, 0xccd: 0x13eb, 0xcce: 0x0afb, 0xccf: 0x0bd7, 0xcd0: 0x0bf3, 0xcd1: 0x0c83, + 0xcd2: 0x0e6b, 0xcd3: 0x0eb7, 0xcd4: 0x0f67, 0xcd5: 0x108b, 0xcd6: 0x112f, 0xcd7: 0x1193, + 0xcd8: 0x13db, 0xcd9: 0x126b, 0xcda: 0x1403, 0xcdb: 0x147f, 0xcdc: 0x080f, 0xcdd: 0x083b, + 0xcde: 0x0923, 0xcdf: 0x0ea7, 0xce0: 0x12f3, 0xce1: 0x133b, 0xce2: 0x0b1b, 0xce3: 0x0b8b, + 0xce4: 0x0c4f, 0xce5: 0x0daf, 0xce6: 0x10d7, 0xce7: 0x0f23, 0xce8: 0x073b, 0xce9: 0x097f, + 0xcea: 0x0a63, 0xceb: 0x0ac7, 0xcec: 0x0b97, 0xced: 0x0f3f, 0xcee: 0x0f5b, 0xcef: 0x116b, + 0xcf0: 0x118b, 0xcf1: 0x1463, 0xcf2: 0x14e3, 0xcf3: 0x14f3, 0xcf4: 0x152f, 0xcf5: 0x0753, + 0xcf6: 0x107f, 0xcf7: 0x144f, 0xcf8: 0x14cb, 0xcf9: 0x0baf, 0xcfa: 0x0717, 0xcfb: 0x0777, + 0xcfc: 0x0a67, 0xcfd: 0x0a87, 0xcfe: 0x0caf, 0xcff: 0x0d73, + // Block 0x34, offset 0xd00 + 0xd00: 0x0ec3, 0xd01: 0x0fcb, 0xd02: 0x1277, 0xd03: 0x1417, 0xd04: 0x1623, 0xd05: 0x0ce3, + 0xd06: 0x14a3, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47, + 0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x153b, 0xd11: 0x07af, + 0xd12: 0x0c03, 0xd13: 0x14b3, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df, + 0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14bb, 0xd1d: 0x0817, + 0xd1e: 0x08ff, 0xd1f: 0x0a97, 0xd20: 0x0cd3, 0xd21: 0x0d1f, 0xd22: 0x0d5f, 0xd23: 0x0df3, + 0xd24: 0x0f47, 0xd25: 0x0fbb, 0xd26: 0x1157, 0xd27: 0x12f7, 0xd28: 0x1303, 0xd29: 0x1457, + 0xd2a: 0x14d7, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b, + 0xd30: 0x1287, 0xd31: 0x14bf, 0xd32: 0x15ab, 0xd33: 0x15d3, 0xd34: 0x0d37, 0xd35: 0x0e27, + 0xd36: 0x11c3, 0xd37: 0x10b7, 0xd38: 0x10c3, 0xd39: 0x10e7, 0xd3a: 0x0f17, 0xd3b: 0x0e9f, + 0xd3c: 0x1363, 0xd3d: 0x0733, 0xd3e: 0x122b, 0xd3f: 0x081b, + // Block 0x35, offset 0xd40 + 0xd40: 0x080b, 0xd41: 0x0b0b, 0xd42: 0x0c2b, 0xd43: 0x10f3, 0xd44: 0x0a53, 0xd45: 0x0e03, + 0xd46: 0x0cef, 0xd47: 0x13e7, 0xd48: 0x12e7, 0xd49: 0x14ab, 0xd4a: 0x1323, 0xd4b: 0x0b27, + 0xd4c: 0x0787, 0xd4d: 0x095b, 0xd50: 0x09af, + 0xd52: 0x0cdf, 0xd55: 0x07f7, 0xd56: 0x0f1f, 0xd57: 0x0fe3, + 0xd58: 0x1047, 0xd59: 0x1063, 0xd5a: 0x1067, 0xd5b: 0x107b, 0xd5c: 0x14fb, 0xd5d: 0x10eb, + 0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353, + 0xd65: 0x1407, 0xd66: 0x1433, + 0xd6a: 0x154f, 0xd6b: 0x1553, 0xd6c: 0x1557, 0xd6d: 0x15bb, 0xd6e: 0x142b, 0xd6f: 0x14c7, + 0xd70: 0x0757, 0xd71: 0x077b, 0xd72: 0x078f, 0xd73: 0x084b, 0xd74: 0x0857, 0xd75: 0x0897, + 0xd76: 0x094b, 0xd77: 0x0967, 0xd78: 0x096f, 0xd79: 0x09ab, 0xd7a: 0x09b7, 0xd7b: 0x0a93, + 0xd7c: 0x0a9b, 0xd7d: 0x0ba3, 0xd7e: 0x0bcb, 0xd7f: 0x0bd3, + // Block 0x36, offset 0xd80 + 0xd80: 0x0beb, 0xd81: 0x0c97, 0xd82: 0x0cc7, 0xd83: 0x0ce7, 0xd84: 0x0d57, 0xd85: 0x0e1b, + 0xd86: 0x0e37, 0xd87: 0x0e67, 0xd88: 0x0ebb, 0xd89: 0x0edb, 0xd8a: 0x0f4f, 0xd8b: 0x102f, + 0xd8c: 0x104b, 0xd8d: 0x1053, 0xd8e: 0x104f, 0xd8f: 0x1057, 0xd90: 0x105b, 0xd91: 0x105f, + 0xd92: 0x1073, 0xd93: 0x1077, 0xd94: 0x109b, 0xd95: 0x10af, 0xd96: 0x10cb, 0xd97: 0x112f, + 0xd98: 0x1137, 0xd99: 0x113f, 0xd9a: 0x1153, 0xd9b: 0x117b, 0xd9c: 0x11cb, 0xd9d: 0x11ff, + 0xd9e: 0x11ff, 0xd9f: 0x1267, 0xda0: 0x130f, 0xda1: 0x1327, 0xda2: 0x135b, 0xda3: 0x135f, + 0xda4: 0x13a3, 0xda5: 0x13a7, 0xda6: 0x13ff, 0xda7: 0x1407, 0xda8: 0x14db, 0xda9: 0x151f, + 0xdaa: 0x1537, 0xdab: 0x0b9b, 0xdac: 0x171e, 0xdad: 0x11e3, + 0xdb0: 0x06df, 0xdb1: 0x07e3, 0xdb2: 0x07a3, 0xdb3: 0x074b, 0xdb4: 0x078b, 0xdb5: 0x07b7, + 0xdb6: 0x0847, 0xdb7: 0x0863, 0xdb8: 0x094b, 0xdb9: 0x0937, 0xdba: 0x0947, 0xdbb: 0x0963, + 0xdbc: 0x09af, 0xdbd: 0x09bf, 0xdbe: 0x0a03, 0xdbf: 0x0a0f, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0a2b, 0xdc1: 0x0a3b, 0xdc2: 0x0b23, 0xdc3: 0x0b2b, 0xdc4: 0x0b5b, 0xdc5: 0x0b7b, + 0xdc6: 0x0bab, 0xdc7: 0x0bc3, 0xdc8: 0x0bb3, 0xdc9: 0x0bd3, 0xdca: 0x0bc7, 0xdcb: 0x0beb, + 0xdcc: 0x0c07, 0xdcd: 0x0c5f, 0xdce: 0x0c6b, 0xdcf: 0x0c73, 0xdd0: 0x0c9b, 0xdd1: 0x0cdf, + 0xdd2: 0x0d0f, 0xdd3: 0x0d13, 0xdd4: 0x0d27, 0xdd5: 0x0da7, 0xdd6: 0x0db7, 0xdd7: 0x0e0f, + 0xdd8: 0x0e5b, 0xdd9: 0x0e53, 0xdda: 0x0e67, 0xddb: 0x0e83, 0xddc: 0x0ebb, 0xddd: 0x1013, + 0xdde: 0x0edf, 0xddf: 0x0f13, 0xde0: 0x0f1f, 0xde1: 0x0f5f, 0xde2: 0x0f7b, 0xde3: 0x0f9f, + 0xde4: 0x0fc3, 0xde5: 0x0fc7, 0xde6: 0x0fe3, 0xde7: 0x0fe7, 0xde8: 0x0ff7, 0xde9: 0x100b, + 0xdea: 0x1007, 0xdeb: 0x1037, 0xdec: 0x10b3, 0xded: 0x10cb, 0xdee: 0x10e3, 0xdef: 0x111b, + 0xdf0: 0x112f, 0xdf1: 0x114b, 0xdf2: 0x117b, 0xdf3: 0x122f, 0xdf4: 0x1257, 0xdf5: 0x12cb, + 0xdf6: 0x1313, 0xdf7: 0x131f, 0xdf8: 0x1327, 0xdf9: 0x133f, 0xdfa: 0x1353, 0xdfb: 0x1343, + 0xdfc: 0x135b, 0xdfd: 0x1357, 0xdfe: 0x134f, 0xdff: 0x135f, + // Block 0x38, offset 0xe00 + 0xe00: 0x136b, 0xe01: 0x13a7, 0xe02: 0x13e3, 0xe03: 0x1413, 0xe04: 0x144b, 0xe05: 0x146b, + 0xe06: 0x14b7, 0xe07: 0x14db, 0xe08: 0x14fb, 0xe09: 0x150f, 0xe0a: 0x151f, 0xe0b: 0x152b, + 0xe0c: 0x1537, 0xe0d: 0x158b, 0xe0e: 0x162b, 0xe0f: 0x16b5, 0xe10: 0x16b0, 0xe11: 0x16e2, + 0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1764, 0xe16: 0x1791, 0xe17: 0x1809, + 0xe18: 0x1617, 0xe19: 0x1627, + // Block 0x39, offset 0xe40 + 0xe40: 0x19d5, 0xe41: 0x19d8, 0xe42: 0x19db, 0xe43: 0x1c08, 0xe44: 0x1c0c, 0xe45: 0x1a5f, + 0xe46: 0x1a5f, + 0xe53: 0x1d75, 0xe54: 0x1d66, 0xe55: 0x1d6b, 0xe56: 0x1d7a, 0xe57: 0x1d70, + 0xe5d: 0x4390, + 0xe5e: 0x8115, 0xe5f: 0x4402, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221, + 0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017, + 0xe6a: 0x43f0, 0xe6b: 0x43f6, 0xe6c: 0x44f4, 0xe6d: 0x44fc, 0xe6e: 0x4348, 0xe6f: 0x434e, + 0xe70: 0x4354, 0xe71: 0x435a, 0xe72: 0x4366, 0xe73: 0x436c, 0xe74: 0x4372, 0xe75: 0x437e, + 0xe76: 0x4384, 0xe78: 0x438a, 0xe79: 0x4396, 0xe7a: 0x439c, 0xe7b: 0x43a2, + 0xe7c: 0x43ae, 0xe7e: 0x43b4, + // Block 0x3a, offset 0xe80 + 0xe80: 0x43ba, 0xe81: 0x43c0, 0xe83: 0x43c6, 0xe84: 0x43cc, + 0xe86: 0x43d8, 0xe87: 0x43de, 0xe88: 0x43e4, 0xe89: 0x43ea, 0xe8a: 0x43fc, 0xe8b: 0x4378, + 0xe8c: 0x4360, 0xe8d: 0x43a8, 0xe8e: 0x43d2, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299, + 0xe92: 0x02a2, 0xe93: 0x02a2, 0xe94: 0x02a2, 0xe95: 0x02a2, 0xe96: 0x02a5, 0xe97: 0x02a5, + 0xe98: 0x02a5, 0xe99: 0x02a5, 0xe9a: 0x02ab, 0xe9b: 0x02ab, 0xe9c: 0x02ab, 0xe9d: 0x02ab, + 0xe9e: 0x029f, 0xe9f: 0x029f, 0xea0: 0x029f, 0xea1: 0x029f, 0xea2: 0x02a8, 0xea3: 0x02a8, + 0xea4: 0x02a8, 0xea5: 0x02a8, 0xea6: 0x029c, 0xea7: 0x029c, 0xea8: 0x029c, 0xea9: 0x029c, + 0xeaa: 0x02cf, 0xeab: 0x02cf, 0xeac: 0x02cf, 0xead: 0x02cf, 0xeae: 0x02d2, 0xeaf: 0x02d2, + 0xeb0: 0x02d2, 0xeb1: 0x02d2, 0xeb2: 0x02b1, 0xeb3: 0x02b1, 0xeb4: 0x02b1, 0xeb5: 0x02b1, + 0xeb6: 0x02ae, 0xeb7: 0x02ae, 0xeb8: 0x02ae, 0xeb9: 0x02ae, 0xeba: 0x02b4, 0xebb: 0x02b4, + 0xebc: 0x02b4, 0xebd: 0x02b4, 0xebe: 0x02b7, 0xebf: 0x02b7, + // Block 0x3b, offset 0xec0 + 0xec0: 0x02b7, 0xec1: 0x02b7, 0xec2: 0x02c0, 0xec3: 0x02c0, 0xec4: 0x02bd, 0xec5: 0x02bd, + 0xec6: 0x02c3, 0xec7: 0x02c3, 0xec8: 0x02ba, 0xec9: 0x02ba, 0xeca: 0x02c9, 0xecb: 0x02c9, + 0xecc: 0x02c6, 0xecd: 0x02c6, 0xece: 0x02d5, 0xecf: 0x02d5, 0xed0: 0x02d5, 0xed1: 0x02d5, + 0xed2: 0x02db, 0xed3: 0x02db, 0xed4: 0x02db, 0xed5: 0x02db, 0xed6: 0x02e1, 0xed7: 0x02e1, + 0xed8: 0x02e1, 0xed9: 0x02e1, 0xeda: 0x02de, 0xedb: 0x02de, 0xedc: 0x02de, 0xedd: 0x02de, + 0xede: 0x02e4, 0xedf: 0x02e4, 0xee0: 0x02e7, 0xee1: 0x02e7, 0xee2: 0x02e7, 0xee3: 0x02e7, + 0xee4: 0x446e, 0xee5: 0x446e, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed, + 0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308, + 0xef0: 0x4468, 0xef1: 0x4468, + // Block 0x3c, offset 0xf00 + 0xf13: 0x02d8, 0xf14: 0x02d8, 0xf15: 0x02d8, 0xf16: 0x02d8, 0xf17: 0x02f6, + 0xf18: 0x02f6, 0xf19: 0x02f3, 0xf1a: 0x02f3, 0xf1b: 0x02f9, 0xf1c: 0x02f9, 0xf1d: 0x204f, + 0xf1e: 0x02ff, 0xf1f: 0x02ff, 0xf20: 0x02f0, 0xf21: 0x02f0, 0xf22: 0x02fc, 0xf23: 0x02fc, + 0xf24: 0x0305, 0xf25: 0x0305, 0xf26: 0x0305, 0xf27: 0x0305, 0xf28: 0x028d, 0xf29: 0x028d, + 0xf2a: 0x25aa, 0xf2b: 0x25aa, 0xf2c: 0x261a, 0xf2d: 0x261a, 0xf2e: 0x25e9, 0xf2f: 0x25e9, + 0xf30: 0x2605, 0xf31: 0x2605, 0xf32: 0x25fe, 0xf33: 0x25fe, 0xf34: 0x260c, 0xf35: 0x260c, + 0xf36: 0x2613, 0xf37: 0x2613, 0xf38: 0x2613, 0xf39: 0x25f0, 0xf3a: 0x25f0, 0xf3b: 0x25f0, + 0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302, + // Block 0x3d, offset 0xf40 + 0xf40: 0x25b1, 0xf41: 0x25b8, 0xf42: 0x25d4, 0xf43: 0x25f0, 0xf44: 0x25f7, 0xf45: 0x1d89, + 0xf46: 0x1d8e, 0xf47: 0x1d93, 0xf48: 0x1da2, 0xf49: 0x1db1, 0xf4a: 0x1db6, 0xf4b: 0x1dbb, + 0xf4c: 0x1dc0, 0xf4d: 0x1dc5, 0xf4e: 0x1dd4, 0xf4f: 0x1de3, 0xf50: 0x1de8, 0xf51: 0x1ded, + 0xf52: 0x1dfc, 0xf53: 0x1e0b, 0xf54: 0x1e10, 0xf55: 0x1e15, 0xf56: 0x1e1a, 0xf57: 0x1e29, + 0xf58: 0x1e2e, 0xf59: 0x1e3d, 0xf5a: 0x1e42, 0xf5b: 0x1e47, 0xf5c: 0x1e56, 0xf5d: 0x1e5b, + 0xf5e: 0x1e60, 0xf5f: 0x1e6a, 0xf60: 0x1ea6, 0xf61: 0x1eb5, 0xf62: 0x1ec4, 0xf63: 0x1ec9, + 0xf64: 0x1ece, 0xf65: 0x1ed8, 0xf66: 0x1ee7, 0xf67: 0x1eec, 0xf68: 0x1efb, 0xf69: 0x1f00, + 0xf6a: 0x1f05, 0xf6b: 0x1f14, 0xf6c: 0x1f19, 0xf6d: 0x1f28, 0xf6e: 0x1f2d, 0xf6f: 0x1f32, + 0xf70: 0x1f37, 0xf71: 0x1f3c, 0xf72: 0x1f41, 0xf73: 0x1f46, 0xf74: 0x1f4b, 0xf75: 0x1f50, + 0xf76: 0x1f55, 0xf77: 0x1f5a, 0xf78: 0x1f5f, 0xf79: 0x1f64, 0xf7a: 0x1f69, 0xf7b: 0x1f6e, + 0xf7c: 0x1f73, 0xf7d: 0x1f78, 0xf7e: 0x1f7d, 0xf7f: 0x1f87, + // Block 0x3e, offset 0xf80 + 0xf80: 0x1f8c, 0xf81: 0x1f91, 0xf82: 0x1f96, 0xf83: 0x1fa0, 0xf84: 0x1fa5, 0xf85: 0x1faf, + 0xf86: 0x1fb4, 0xf87: 0x1fb9, 0xf88: 0x1fbe, 0xf89: 0x1fc3, 0xf8a: 0x1fc8, 0xf8b: 0x1fcd, + 0xf8c: 0x1fd2, 0xf8d: 0x1fd7, 0xf8e: 0x1fe6, 0xf8f: 0x1ff5, 0xf90: 0x1ffa, 0xf91: 0x1fff, + 0xf92: 0x2004, 0xf93: 0x2009, 0xf94: 0x200e, 0xf95: 0x2018, 0xf96: 0x201d, 0xf97: 0x2022, + 0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x4420, 0xf9c: 0x4426, 0xf9d: 0x445c, + 0xf9e: 0x44b3, 0xf9f: 0x44ba, 0xfa0: 0x44c1, 0xfa1: 0x44c8, 0xfa2: 0x44cf, 0xfa3: 0x44d6, + 0xfa4: 0x25c6, 0xfa5: 0x25cd, 0xfa6: 0x25d4, 0xfa7: 0x25db, 0xfa8: 0x25f0, 0xfa9: 0x25f7, + 0xfaa: 0x1d98, 0xfab: 0x1d9d, 0xfac: 0x1da2, 0xfad: 0x1da7, 0xfae: 0x1db1, 0xfaf: 0x1db6, + 0xfb0: 0x1dca, 0xfb1: 0x1dcf, 0xfb2: 0x1dd4, 0xfb3: 0x1dd9, 0xfb4: 0x1de3, 0xfb5: 0x1de8, + 0xfb6: 0x1df2, 0xfb7: 0x1df7, 0xfb8: 0x1dfc, 0xfb9: 0x1e01, 0xfba: 0x1e0b, 0xfbb: 0x1e10, + 0xfbc: 0x1f3c, 0xfbd: 0x1f41, 0xfbe: 0x1f50, 0xfbf: 0x1f55, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x1f5a, 0xfc1: 0x1f6e, 0xfc2: 0x1f73, 0xfc3: 0x1f78, 0xfc4: 0x1f7d, 0xfc5: 0x1f96, + 0xfc6: 0x1fa0, 0xfc7: 0x1fa5, 0xfc8: 0x1faa, 0xfc9: 0x1fbe, 0xfca: 0x1fdc, 0xfcb: 0x1fe1, + 0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x445c, 0xfd1: 0x2027, + 0xfd2: 0x202c, 0xfd3: 0x2031, 0xfd4: 0x2036, 0xfd5: 0x2040, 0xfd6: 0x2045, 0xfd7: 0x25b1, + 0xfd8: 0x25b8, 0xfd9: 0x25bf, 0xfda: 0x25d4, 0xfdb: 0x25e2, 0xfdc: 0x1d89, 0xfdd: 0x1d8e, + 0xfde: 0x1d93, 0xfdf: 0x1da2, 0xfe0: 0x1dac, 0xfe1: 0x1dbb, 0xfe2: 0x1dc0, 0xfe3: 0x1dc5, + 0xfe4: 0x1dd4, 0xfe5: 0x1dde, 0xfe6: 0x1dfc, 0xfe7: 0x1e15, 0xfe8: 0x1e1a, 0xfe9: 0x1e29, + 0xfea: 0x1e2e, 0xfeb: 0x1e3d, 0xfec: 0x1e47, 0xfed: 0x1e56, 0xfee: 0x1e5b, 0xfef: 0x1e60, + 0xff0: 0x1e6a, 0xff1: 0x1ea6, 0xff2: 0x1eab, 0xff3: 0x1eb5, 0xff4: 0x1ec4, 0xff5: 0x1ec9, + 0xff6: 0x1ece, 0xff7: 0x1ed8, 0xff8: 0x1ee7, 0xff9: 0x1efb, 0xffa: 0x1f00, 0xffb: 0x1f05, + 0xffc: 0x1f14, 0xffd: 0x1f19, 0xffe: 0x1f28, 0xfff: 0x1f2d, + // Block 0x40, offset 0x1000 + 0x1000: 0x1f32, 0x1001: 0x1f37, 0x1002: 0x1f46, 0x1003: 0x1f4b, 0x1004: 0x1f5f, 0x1005: 0x1f64, + 0x1006: 0x1f69, 0x1007: 0x1f6e, 0x1008: 0x1f73, 0x1009: 0x1f87, 0x100a: 0x1f8c, 0x100b: 0x1f91, + 0x100c: 0x1f96, 0x100d: 0x1f9b, 0x100e: 0x1faf, 0x100f: 0x1fb4, 0x1010: 0x1fb9, 0x1011: 0x1fbe, + 0x1012: 0x1fcd, 0x1013: 0x1fd2, 0x1014: 0x1fd7, 0x1015: 0x1fe6, 0x1016: 0x1ff0, 0x1017: 0x1fff, + 0x1018: 0x2004, 0x1019: 0x4450, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031, + 0x101e: 0x203b, 0x101f: 0x25d4, 0x1020: 0x25e2, 0x1021: 0x1da2, 0x1022: 0x1dac, 0x1023: 0x1dd4, + 0x1024: 0x1dde, 0x1025: 0x1dfc, 0x1026: 0x1e06, 0x1027: 0x1e6a, 0x1028: 0x1e6f, 0x1029: 0x1e92, + 0x102a: 0x1e97, 0x102b: 0x1f6e, 0x102c: 0x1f73, 0x102d: 0x1f96, 0x102e: 0x1fe6, 0x102f: 0x1ff0, + 0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x4504, 0x1033: 0x450c, 0x1034: 0x4514, 0x1035: 0x1ef1, + 0x1036: 0x1ef6, 0x1037: 0x1f0a, 0x1038: 0x1f0f, 0x1039: 0x1f1e, 0x103a: 0x1f23, 0x103b: 0x1e74, + 0x103c: 0x1e79, 0x103d: 0x1e9c, 0x103e: 0x1ea1, 0x103f: 0x1e33, + // Block 0x41, offset 0x1040 + 0x1040: 0x1e38, 0x1041: 0x1e1f, 0x1042: 0x1e24, 0x1043: 0x1e4c, 0x1044: 0x1e51, 0x1045: 0x1eba, + 0x1046: 0x1ebf, 0x1047: 0x1edd, 0x1048: 0x1ee2, 0x1049: 0x1e7e, 0x104a: 0x1e83, 0x104b: 0x1e88, + 0x104c: 0x1e92, 0x104d: 0x1e8d, 0x104e: 0x1e65, 0x104f: 0x1eb0, 0x1050: 0x1ed3, 0x1051: 0x1ef1, + 0x1052: 0x1ef6, 0x1053: 0x1f0a, 0x1054: 0x1f0f, 0x1055: 0x1f1e, 0x1056: 0x1f23, 0x1057: 0x1e74, + 0x1058: 0x1e79, 0x1059: 0x1e9c, 0x105a: 0x1ea1, 0x105b: 0x1e33, 0x105c: 0x1e38, 0x105d: 0x1e1f, + 0x105e: 0x1e24, 0x105f: 0x1e4c, 0x1060: 0x1e51, 0x1061: 0x1eba, 0x1062: 0x1ebf, 0x1063: 0x1edd, + 0x1064: 0x1ee2, 0x1065: 0x1e7e, 0x1066: 0x1e83, 0x1067: 0x1e88, 0x1068: 0x1e92, 0x1069: 0x1e8d, + 0x106a: 0x1e65, 0x106b: 0x1eb0, 0x106c: 0x1ed3, 0x106d: 0x1e7e, 0x106e: 0x1e83, 0x106f: 0x1e88, + 0x1070: 0x1e92, 0x1071: 0x1e6f, 0x1072: 0x1e97, 0x1073: 0x1eec, 0x1074: 0x1e56, 0x1075: 0x1e5b, + 0x1076: 0x1e60, 0x1077: 0x1e7e, 0x1078: 0x1e83, 0x1079: 0x1e88, 0x107a: 0x1eec, 0x107b: 0x1efb, + 0x107c: 0x4408, 0x107d: 0x4408, + // Block 0x42, offset 0x1080 + 0x1090: 0x2311, 0x1091: 0x2326, + 0x1092: 0x2326, 0x1093: 0x232d, 0x1094: 0x2334, 0x1095: 0x2349, 0x1096: 0x2350, 0x1097: 0x2357, + 0x1098: 0x237a, 0x1099: 0x237a, 0x109a: 0x239d, 0x109b: 0x2396, 0x109c: 0x23b2, 0x109d: 0x23a4, + 0x109e: 0x23ab, 0x109f: 0x23ce, 0x10a0: 0x23ce, 0x10a1: 0x23c7, 0x10a2: 0x23d5, 0x10a3: 0x23d5, + 0x10a4: 0x23ff, 0x10a5: 0x23ff, 0x10a6: 0x241b, 0x10a7: 0x23e3, 0x10a8: 0x23e3, 0x10a9: 0x23dc, + 0x10aa: 0x23f1, 0x10ab: 0x23f1, 0x10ac: 0x23f8, 0x10ad: 0x23f8, 0x10ae: 0x2422, 0x10af: 0x2430, + 0x10b0: 0x2430, 0x10b1: 0x2437, 0x10b2: 0x2437, 0x10b3: 0x243e, 0x10b4: 0x2445, 0x10b5: 0x244c, + 0x10b6: 0x2453, 0x10b7: 0x2453, 0x10b8: 0x245a, 0x10b9: 0x2468, 0x10ba: 0x2476, 0x10bb: 0x246f, + 0x10bc: 0x247d, 0x10bd: 0x247d, 0x10be: 0x2492, 0x10bf: 0x2499, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x24ca, 0x10c1: 0x24d8, 0x10c2: 0x24d1, 0x10c3: 0x24b5, 0x10c4: 0x24b5, 0x10c5: 0x24df, + 0x10c6: 0x24df, 0x10c7: 0x24e6, 0x10c8: 0x24e6, 0x10c9: 0x2510, 0x10ca: 0x2517, 0x10cb: 0x251e, + 0x10cc: 0x24f4, 0x10cd: 0x2502, 0x10ce: 0x2525, 0x10cf: 0x252c, + 0x10d2: 0x24fb, 0x10d3: 0x2580, 0x10d4: 0x2587, 0x10d5: 0x255d, 0x10d6: 0x2564, 0x10d7: 0x2548, + 0x10d8: 0x2548, 0x10d9: 0x254f, 0x10da: 0x2579, 0x10db: 0x2572, 0x10dc: 0x259c, 0x10dd: 0x259c, + 0x10de: 0x230a, 0x10df: 0x231f, 0x10e0: 0x2318, 0x10e1: 0x2342, 0x10e2: 0x233b, 0x10e3: 0x2365, + 0x10e4: 0x235e, 0x10e5: 0x2388, 0x10e6: 0x236c, 0x10e7: 0x2381, 0x10e8: 0x23b9, 0x10e9: 0x2406, + 0x10ea: 0x23ea, 0x10eb: 0x2429, 0x10ec: 0x24c3, 0x10ed: 0x24ed, 0x10ee: 0x2595, 0x10ef: 0x258e, + 0x10f0: 0x25a3, 0x10f1: 0x253a, 0x10f2: 0x24a0, 0x10f3: 0x256b, 0x10f4: 0x2492, 0x10f5: 0x24ca, + 0x10f6: 0x2461, 0x10f7: 0x24ae, 0x10f8: 0x2541, 0x10f9: 0x2533, 0x10fa: 0x24bc, 0x10fb: 0x24a7, + 0x10fc: 0x24bc, 0x10fd: 0x2541, 0x10fe: 0x2373, 0x10ff: 0x238f, + // Block 0x44, offset 0x1100 + 0x1100: 0x2509, 0x1101: 0x2484, 0x1102: 0x2303, 0x1103: 0x24a7, 0x1104: 0x244c, 0x1105: 0x241b, + 0x1106: 0x23c0, 0x1107: 0x2556, + 0x1130: 0x2414, 0x1131: 0x248b, 0x1132: 0x27bf, 0x1133: 0x27b6, 0x1134: 0x27ec, 0x1135: 0x27da, + 0x1136: 0x27c8, 0x1137: 0x27e3, 0x1138: 0x27f5, 0x1139: 0x240d, 0x113a: 0x2c7c, 0x113b: 0x2afc, + 0x113c: 0x27d1, + // Block 0x45, offset 0x1140 + 0x1150: 0x0019, 0x1151: 0x0483, + 0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf, + 0x1158: 0x04c3, 0x1159: 0x1b5c, + 0x1160: 0x8132, 0x1161: 0x8132, 0x1162: 0x8132, 0x1163: 0x8132, + 0x1164: 0x8132, 0x1165: 0x8132, 0x1166: 0x8132, 0x1167: 0x812d, 0x1168: 0x812d, 0x1169: 0x812d, + 0x116a: 0x812d, 0x116b: 0x812d, 0x116c: 0x812d, 0x116d: 0x812d, 0x116e: 0x8132, 0x116f: 0x8132, + 0x1170: 0x1873, 0x1171: 0x0443, 0x1172: 0x043f, 0x1173: 0x007f, 0x1174: 0x007f, 0x1175: 0x0011, + 0x1176: 0x0013, 0x1177: 0x00b7, 0x1178: 0x00bb, 0x1179: 0x04b7, 0x117a: 0x04bb, 0x117b: 0x04ab, + 0x117c: 0x04af, 0x117d: 0x0493, 0x117e: 0x0497, 0x117f: 0x048b, + // Block 0x46, offset 0x1180 + 0x1180: 0x048f, 0x1181: 0x049b, 0x1182: 0x049f, 0x1183: 0x04a3, 0x1184: 0x04a7, + 0x1187: 0x0077, 0x1188: 0x007b, 0x1189: 0x4269, 0x118a: 0x4269, 0x118b: 0x4269, + 0x118c: 0x4269, 0x118d: 0x007f, 0x118e: 0x007f, 0x118f: 0x007f, 0x1190: 0x0019, 0x1191: 0x0483, + 0x1192: 0x001d, 0x1194: 0x0037, 0x1195: 0x0035, 0x1196: 0x003f, 0x1197: 0x0003, + 0x1198: 0x0443, 0x1199: 0x0011, 0x119a: 0x0013, 0x119b: 0x00b7, 0x119c: 0x00bb, 0x119d: 0x04b7, + 0x119e: 0x04bb, 0x119f: 0x0007, 0x11a0: 0x000d, 0x11a1: 0x0015, 0x11a2: 0x0017, 0x11a3: 0x001b, + 0x11a4: 0x0039, 0x11a5: 0x003d, 0x11a6: 0x003b, 0x11a8: 0x0079, 0x11a9: 0x0009, + 0x11aa: 0x000b, 0x11ab: 0x0041, + 0x11b0: 0x42aa, 0x11b1: 0x442c, 0x11b2: 0x42af, 0x11b4: 0x42b4, + 0x11b6: 0x42b9, 0x11b7: 0x4432, 0x11b8: 0x42be, 0x11b9: 0x4438, 0x11ba: 0x42c3, 0x11bb: 0x443e, + 0x11bc: 0x42c8, 0x11bd: 0x4444, 0x11be: 0x42cd, 0x11bf: 0x444a, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x0236, 0x11c1: 0x440e, 0x11c2: 0x440e, 0x11c3: 0x4414, 0x11c4: 0x4414, 0x11c5: 0x4456, + 0x11c6: 0x4456, 0x11c7: 0x441a, 0x11c8: 0x441a, 0x11c9: 0x4462, 0x11ca: 0x4462, 0x11cb: 0x4462, + 0x11cc: 0x4462, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c, + 0x11d2: 0x023c, 0x11d3: 0x023f, 0x11d4: 0x023f, 0x11d5: 0x0242, 0x11d6: 0x0242, 0x11d7: 0x0242, + 0x11d8: 0x0242, 0x11d9: 0x0245, 0x11da: 0x0245, 0x11db: 0x0245, 0x11dc: 0x0245, 0x11dd: 0x0248, + 0x11de: 0x0248, 0x11df: 0x0248, 0x11e0: 0x0248, 0x11e1: 0x024b, 0x11e2: 0x024b, 0x11e3: 0x024b, + 0x11e4: 0x024b, 0x11e5: 0x024e, 0x11e6: 0x024e, 0x11e7: 0x024e, 0x11e8: 0x024e, 0x11e9: 0x0251, + 0x11ea: 0x0251, 0x11eb: 0x0254, 0x11ec: 0x0254, 0x11ed: 0x0257, 0x11ee: 0x0257, 0x11ef: 0x025a, + 0x11f0: 0x025a, 0x11f1: 0x025d, 0x11f2: 0x025d, 0x11f3: 0x025d, 0x11f4: 0x025d, 0x11f5: 0x0260, + 0x11f6: 0x0260, 0x11f7: 0x0260, 0x11f8: 0x0260, 0x11f9: 0x0263, 0x11fa: 0x0263, 0x11fb: 0x0263, + 0x11fc: 0x0263, 0x11fd: 0x0266, 0x11fe: 0x0266, 0x11ff: 0x0266, + // Block 0x48, offset 0x1200 + 0x1200: 0x0266, 0x1201: 0x0269, 0x1202: 0x0269, 0x1203: 0x0269, 0x1204: 0x0269, 0x1205: 0x026c, + 0x1206: 0x026c, 0x1207: 0x026c, 0x1208: 0x026c, 0x1209: 0x026f, 0x120a: 0x026f, 0x120b: 0x026f, + 0x120c: 0x026f, 0x120d: 0x0272, 0x120e: 0x0272, 0x120f: 0x0272, 0x1210: 0x0272, 0x1211: 0x0275, + 0x1212: 0x0275, 0x1213: 0x0275, 0x1214: 0x0275, 0x1215: 0x0278, 0x1216: 0x0278, 0x1217: 0x0278, + 0x1218: 0x0278, 0x1219: 0x027b, 0x121a: 0x027b, 0x121b: 0x027b, 0x121c: 0x027b, 0x121d: 0x027e, + 0x121e: 0x027e, 0x121f: 0x027e, 0x1220: 0x027e, 0x1221: 0x0281, 0x1222: 0x0281, 0x1223: 0x0281, + 0x1224: 0x0281, 0x1225: 0x0284, 0x1226: 0x0284, 0x1227: 0x0284, 0x1228: 0x0284, 0x1229: 0x0287, + 0x122a: 0x0287, 0x122b: 0x0287, 0x122c: 0x0287, 0x122d: 0x028a, 0x122e: 0x028a, 0x122f: 0x028d, + 0x1230: 0x028d, 0x1231: 0x0290, 0x1232: 0x0290, 0x1233: 0x0290, 0x1234: 0x0290, 0x1235: 0x2e00, + 0x1236: 0x2e00, 0x1237: 0x2e08, 0x1238: 0x2e08, 0x1239: 0x2e10, 0x123a: 0x2e10, 0x123b: 0x1f82, + 0x123c: 0x1f82, + // Block 0x49, offset 0x1240 + 0x1240: 0x0081, 0x1241: 0x0083, 0x1242: 0x0085, 0x1243: 0x0087, 0x1244: 0x0089, 0x1245: 0x008b, + 0x1246: 0x008d, 0x1247: 0x008f, 0x1248: 0x0091, 0x1249: 0x0093, 0x124a: 0x0095, 0x124b: 0x0097, + 0x124c: 0x0099, 0x124d: 0x009b, 0x124e: 0x009d, 0x124f: 0x009f, 0x1250: 0x00a1, 0x1251: 0x00a3, + 0x1252: 0x00a5, 0x1253: 0x00a7, 0x1254: 0x00a9, 0x1255: 0x00ab, 0x1256: 0x00ad, 0x1257: 0x00af, + 0x1258: 0x00b1, 0x1259: 0x00b3, 0x125a: 0x00b5, 0x125b: 0x00b7, 0x125c: 0x00b9, 0x125d: 0x00bb, + 0x125e: 0x00bd, 0x125f: 0x0477, 0x1260: 0x047b, 0x1261: 0x0487, 0x1262: 0x049b, 0x1263: 0x049f, + 0x1264: 0x0483, 0x1265: 0x05ab, 0x1266: 0x05a3, 0x1267: 0x04c7, 0x1268: 0x04cf, 0x1269: 0x04d7, + 0x126a: 0x04df, 0x126b: 0x04e7, 0x126c: 0x056b, 0x126d: 0x0573, 0x126e: 0x057b, 0x126f: 0x051f, + 0x1270: 0x05af, 0x1271: 0x04cb, 0x1272: 0x04d3, 0x1273: 0x04db, 0x1274: 0x04e3, 0x1275: 0x04eb, + 0x1276: 0x04ef, 0x1277: 0x04f3, 0x1278: 0x04f7, 0x1279: 0x04fb, 0x127a: 0x04ff, 0x127b: 0x0503, + 0x127c: 0x0507, 0x127d: 0x050b, 0x127e: 0x050f, 0x127f: 0x0513, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0517, 0x1281: 0x051b, 0x1282: 0x0523, 0x1283: 0x0527, 0x1284: 0x052b, 0x1285: 0x052f, + 0x1286: 0x0533, 0x1287: 0x0537, 0x1288: 0x053b, 0x1289: 0x053f, 0x128a: 0x0543, 0x128b: 0x0547, + 0x128c: 0x054b, 0x128d: 0x054f, 0x128e: 0x0553, 0x128f: 0x0557, 0x1290: 0x055b, 0x1291: 0x055f, + 0x1292: 0x0563, 0x1293: 0x0567, 0x1294: 0x056f, 0x1295: 0x0577, 0x1296: 0x057f, 0x1297: 0x0583, + 0x1298: 0x0587, 0x1299: 0x058b, 0x129a: 0x058f, 0x129b: 0x0593, 0x129c: 0x0597, 0x129d: 0x05a7, + 0x129e: 0x4a78, 0x129f: 0x4a7e, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4a3b, + 0x12a4: 0x031b, 0x12a5: 0x4a41, 0x12a6: 0x4a47, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327, + 0x12aa: 0x4a4d, 0x12ab: 0x4a53, 0x12ac: 0x4a59, 0x12ad: 0x4a5f, 0x12ae: 0x4a65, 0x12af: 0x4a6b, + 0x12b0: 0x0367, 0x12b1: 0x032b, 0x12b2: 0x032f, 0x12b3: 0x0333, 0x12b4: 0x037b, 0x12b5: 0x0337, + 0x12b6: 0x033b, 0x12b7: 0x033f, 0x12b8: 0x0343, 0x12b9: 0x0347, 0x12ba: 0x034b, 0x12bb: 0x034f, + 0x12bc: 0x0353, 0x12bd: 0x0357, 0x12be: 0x035b, + // Block 0x4b, offset 0x12c0 + 0x12c2: 0x49bd, 0x12c3: 0x49c3, 0x12c4: 0x49c9, 0x12c5: 0x49cf, + 0x12c6: 0x49d5, 0x12c7: 0x49db, 0x12ca: 0x49e1, 0x12cb: 0x49e7, + 0x12cc: 0x49ed, 0x12cd: 0x49f3, 0x12ce: 0x49f9, 0x12cf: 0x49ff, + 0x12d2: 0x4a05, 0x12d3: 0x4a0b, 0x12d4: 0x4a11, 0x12d5: 0x4a17, 0x12d6: 0x4a1d, 0x12d7: 0x4a23, + 0x12da: 0x4a29, 0x12db: 0x4a2f, 0x12dc: 0x4a35, + 0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4264, + 0x12e4: 0x00c8, 0x12e5: 0x00c5, 0x12e6: 0x0447, 0x12e8: 0x046b, 0x12e9: 0x044b, + 0x12ea: 0x044f, 0x12eb: 0x0453, 0x12ec: 0x0457, 0x12ed: 0x046f, 0x12ee: 0x0473, + // Block 0x4c, offset 0x1300 + 0x1300: 0x0063, 0x1301: 0x0065, 0x1302: 0x0067, 0x1303: 0x0069, 0x1304: 0x006b, 0x1305: 0x006d, + 0x1306: 0x006f, 0x1307: 0x0071, 0x1308: 0x0073, 0x1309: 0x0075, 0x130a: 0x0083, 0x130b: 0x0085, + 0x130c: 0x0087, 0x130d: 0x0089, 0x130e: 0x008b, 0x130f: 0x008d, 0x1310: 0x008f, 0x1311: 0x0091, + 0x1312: 0x0093, 0x1313: 0x0095, 0x1314: 0x0097, 0x1315: 0x0099, 0x1316: 0x009b, 0x1317: 0x009d, + 0x1318: 0x009f, 0x1319: 0x00a1, 0x131a: 0x00a3, 0x131b: 0x00a5, 0x131c: 0x00a7, 0x131d: 0x00a9, + 0x131e: 0x00ab, 0x131f: 0x00ad, 0x1320: 0x00af, 0x1321: 0x00b1, 0x1322: 0x00b3, 0x1323: 0x00b5, + 0x1324: 0x00dd, 0x1325: 0x00f2, 0x1328: 0x0173, 0x1329: 0x0176, + 0x132a: 0x0179, 0x132b: 0x017c, 0x132c: 0x017f, 0x132d: 0x0182, 0x132e: 0x0185, 0x132f: 0x0188, + 0x1330: 0x018b, 0x1331: 0x018e, 0x1332: 0x0191, 0x1333: 0x0194, 0x1334: 0x0197, 0x1335: 0x019a, + 0x1336: 0x019d, 0x1337: 0x01a0, 0x1338: 0x01a3, 0x1339: 0x0188, 0x133a: 0x01a6, 0x133b: 0x01a9, + 0x133c: 0x01ac, 0x133d: 0x01af, 0x133e: 0x01b2, 0x133f: 0x01b5, + // Block 0x4d, offset 0x1340 + 0x1340: 0x01fd, 0x1341: 0x0200, 0x1342: 0x0203, 0x1343: 0x045b, 0x1344: 0x01c7, 0x1345: 0x01d0, + 0x1346: 0x01d6, 0x1347: 0x01fa, 0x1348: 0x01eb, 0x1349: 0x01e8, 0x134a: 0x0206, 0x134b: 0x0209, + 0x134e: 0x0021, 0x134f: 0x0023, 0x1350: 0x0025, 0x1351: 0x0027, + 0x1352: 0x0029, 0x1353: 0x002b, 0x1354: 0x002d, 0x1355: 0x002f, 0x1356: 0x0031, 0x1357: 0x0033, + 0x1358: 0x0021, 0x1359: 0x0023, 0x135a: 0x0025, 0x135b: 0x0027, 0x135c: 0x0029, 0x135d: 0x002b, + 0x135e: 0x002d, 0x135f: 0x002f, 0x1360: 0x0031, 0x1361: 0x0033, 0x1362: 0x0021, 0x1363: 0x0023, + 0x1364: 0x0025, 0x1365: 0x0027, 0x1366: 0x0029, 0x1367: 0x002b, 0x1368: 0x002d, 0x1369: 0x002f, + 0x136a: 0x0031, 0x136b: 0x0033, 0x136c: 0x0021, 0x136d: 0x0023, 0x136e: 0x0025, 0x136f: 0x0027, + 0x1370: 0x0029, 0x1371: 0x002b, 0x1372: 0x002d, 0x1373: 0x002f, 0x1374: 0x0031, 0x1375: 0x0033, + 0x1376: 0x0021, 0x1377: 0x0023, 0x1378: 0x0025, 0x1379: 0x0027, 0x137a: 0x0029, 0x137b: 0x002b, + 0x137c: 0x002d, 0x137d: 0x002f, 0x137e: 0x0031, 0x137f: 0x0033, + // Block 0x4e, offset 0x1380 + 0x1380: 0x0239, 0x1381: 0x023c, 0x1382: 0x0248, 0x1383: 0x0251, 0x1385: 0x028a, + 0x1386: 0x025a, 0x1387: 0x024b, 0x1388: 0x0269, 0x1389: 0x0290, 0x138a: 0x027b, 0x138b: 0x027e, + 0x138c: 0x0281, 0x138d: 0x0284, 0x138e: 0x025d, 0x138f: 0x026f, 0x1390: 0x0275, 0x1391: 0x0263, + 0x1392: 0x0278, 0x1393: 0x0257, 0x1394: 0x0260, 0x1395: 0x0242, 0x1396: 0x0245, 0x1397: 0x024e, + 0x1398: 0x0254, 0x1399: 0x0266, 0x139a: 0x026c, 0x139b: 0x0272, 0x139c: 0x0293, 0x139d: 0x02e4, + 0x139e: 0x02cc, 0x139f: 0x0296, 0x13a1: 0x023c, 0x13a2: 0x0248, + 0x13a4: 0x0287, 0x13a7: 0x024b, 0x13a9: 0x0290, + 0x13aa: 0x027b, 0x13ab: 0x027e, 0x13ac: 0x0281, 0x13ad: 0x0284, 0x13ae: 0x025d, 0x13af: 0x026f, + 0x13b0: 0x0275, 0x13b1: 0x0263, 0x13b2: 0x0278, 0x13b4: 0x0260, 0x13b5: 0x0242, + 0x13b6: 0x0245, 0x13b7: 0x024e, 0x13b9: 0x0266, 0x13bb: 0x0272, + // Block 0x4f, offset 0x13c0 + 0x13c2: 0x0248, + 0x13c7: 0x024b, 0x13c9: 0x0290, 0x13cb: 0x027e, + 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d1: 0x0263, + 0x13d2: 0x0278, 0x13d4: 0x0260, 0x13d7: 0x024e, + 0x13d9: 0x0266, 0x13db: 0x0272, 0x13dd: 0x02e4, + 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248, + 0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e8: 0x0269, 0x13e9: 0x0290, + 0x13ea: 0x027b, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f, + 0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242, + 0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fa: 0x026c, 0x13fb: 0x0272, + 0x13fc: 0x0293, 0x13fe: 0x02cc, + // Block 0x50, offset 0x1400 + 0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1404: 0x0287, 0x1405: 0x028a, + 0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140b: 0x027e, + 0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263, + 0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e, + 0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, + 0x1421: 0x023c, 0x1422: 0x0248, 0x1423: 0x0251, + 0x1425: 0x028a, 0x1426: 0x025a, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290, + 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f, + 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1433: 0x0257, 0x1434: 0x0260, 0x1435: 0x0242, + 0x1436: 0x0245, 0x1437: 0x024e, 0x1438: 0x0254, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272, + // Block 0x51, offset 0x1440 + 0x1440: 0x1879, 0x1441: 0x1876, 0x1442: 0x187c, 0x1443: 0x18a0, 0x1444: 0x18c4, 0x1445: 0x18e8, + 0x1446: 0x190c, 0x1447: 0x1915, 0x1448: 0x191b, 0x1449: 0x1921, 0x144a: 0x1927, + 0x1450: 0x1a8c, 0x1451: 0x1a90, + 0x1452: 0x1a94, 0x1453: 0x1a98, 0x1454: 0x1a9c, 0x1455: 0x1aa0, 0x1456: 0x1aa4, 0x1457: 0x1aa8, + 0x1458: 0x1aac, 0x1459: 0x1ab0, 0x145a: 0x1ab4, 0x145b: 0x1ab8, 0x145c: 0x1abc, 0x145d: 0x1ac0, + 0x145e: 0x1ac4, 0x145f: 0x1ac8, 0x1460: 0x1acc, 0x1461: 0x1ad0, 0x1462: 0x1ad4, 0x1463: 0x1ad8, + 0x1464: 0x1adc, 0x1465: 0x1ae0, 0x1466: 0x1ae4, 0x1467: 0x1ae8, 0x1468: 0x1aec, 0x1469: 0x1af0, + 0x146a: 0x271e, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x193c, 0x146e: 0x19b1, + 0x1470: 0x0043, 0x1471: 0x0045, 0x1472: 0x0047, 0x1473: 0x0049, 0x1474: 0x004b, 0x1475: 0x004d, + 0x1476: 0x004f, 0x1477: 0x0051, 0x1478: 0x0053, 0x1479: 0x0055, 0x147a: 0x0057, 0x147b: 0x0059, + 0x147c: 0x005b, 0x147d: 0x005d, 0x147e: 0x005f, 0x147f: 0x0061, + // Block 0x52, offset 0x1480 + 0x1480: 0x26ad, 0x1481: 0x26c2, 0x1482: 0x0503, + 0x1490: 0x0c0f, 0x1491: 0x0a47, + 0x1492: 0x08d3, 0x1493: 0x45c4, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff, + 0x1498: 0x0727, 0x1499: 0x0cd7, 0x149a: 0x0eaf, 0x149b: 0x0caf, 0x149c: 0x0827, 0x149d: 0x0b6b, + 0x149e: 0x07bf, 0x149f: 0x0cb7, 0x14a0: 0x0813, 0x14a1: 0x1117, 0x14a2: 0x0f83, 0x14a3: 0x138b, + 0x14a4: 0x09d3, 0x14a5: 0x090b, 0x14a6: 0x0e63, 0x14a7: 0x0c1b, 0x14a8: 0x0c47, 0x14a9: 0x06bf, + 0x14aa: 0x06cb, 0x14ab: 0x140b, 0x14ac: 0x0adb, 0x14ad: 0x06e7, 0x14ae: 0x08ef, 0x14af: 0x0c3b, + 0x14b0: 0x13b3, 0x14b1: 0x0c13, 0x14b2: 0x106f, 0x14b3: 0x10ab, 0x14b4: 0x08f7, 0x14b5: 0x0e43, + 0x14b6: 0x0d0b, 0x14b7: 0x0d07, 0x14b8: 0x0f97, 0x14b9: 0x082b, 0x14ba: 0x0957, 0x14bb: 0x1443, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1647, 0x14c4: 0x0747, 0x14c5: 0x0757, + 0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773, + 0x14cc: 0x05b3, 0x14cd: 0x165b, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3, + 0x14d2: 0x164c, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1656, 0x14d7: 0x07cf, + 0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x1831, 0x14dd: 0x07ff, + 0x14de: 0x0807, 0x14df: 0x05bf, 0x14e0: 0x081f, 0x14e1: 0x0823, 0x14e2: 0x082b, 0x14e3: 0x082f, + 0x14e4: 0x05c3, 0x14e5: 0x0847, 0x14e6: 0x084b, 0x14e7: 0x0857, 0x14e8: 0x0863, 0x14e9: 0x0867, + 0x14ea: 0x086b, 0x14eb: 0x0873, 0x14ec: 0x0893, 0x14ed: 0x0897, 0x14ee: 0x089f, 0x14ef: 0x08af, + 0x14f0: 0x08b7, 0x14f1: 0x08bb, 0x14f2: 0x08bb, 0x14f3: 0x08bb, 0x14f4: 0x166a, 0x14f5: 0x0e93, + 0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166f, 0x14f9: 0x08e3, 0x14fa: 0x08eb, 0x14fb: 0x08f3, + 0x14fc: 0x091b, 0x14fd: 0x0907, 0x14fe: 0x0913, 0x14ff: 0x0917, + // Block 0x54, offset 0x1500 + 0x1500: 0x091f, 0x1501: 0x0927, 0x1502: 0x092b, 0x1503: 0x0933, 0x1504: 0x093b, 0x1505: 0x093f, + 0x1506: 0x093f, 0x1507: 0x0947, 0x1508: 0x094f, 0x1509: 0x0953, 0x150a: 0x095f, 0x150b: 0x0983, + 0x150c: 0x0967, 0x150d: 0x0987, 0x150e: 0x096b, 0x150f: 0x0973, 0x1510: 0x080b, 0x1511: 0x09cf, + 0x1512: 0x0997, 0x1513: 0x099b, 0x1514: 0x099f, 0x1515: 0x0993, 0x1516: 0x09a7, 0x1517: 0x09a3, + 0x1518: 0x09bb, 0x1519: 0x1674, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef, + 0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1679, 0x1521: 0x167e, 0x1522: 0x0a1f, 0x1523: 0x0a23, + 0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37, + 0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x1683, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63, + 0x1530: 0x0a6b, 0x1531: 0x1688, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f, + 0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x1692, + 0x153c: 0x0aaf, 0x153d: 0x1697, 0x153e: 0x0abb, 0x153f: 0x0ab7, + // Block 0x55, offset 0x1540 + 0x1540: 0x0abf, 0x1541: 0x0acf, 0x1542: 0x0ad3, 0x1543: 0x05d3, 0x1544: 0x0ae3, 0x1545: 0x0aeb, + 0x1546: 0x0aef, 0x1547: 0x0af3, 0x1548: 0x05d7, 0x1549: 0x169c, 0x154a: 0x05db, 0x154b: 0x0b0f, + 0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x1863, 0x1550: 0x0b37, 0x1551: 0x16a6, + 0x1552: 0x16a6, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c9, + 0x1558: 0x179b, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83, + 0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3, + 0x1564: 0x16ab, 0x1565: 0x0ba7, 0x1566: 0x0bbb, 0x1567: 0x0bbf, 0x1568: 0x0bc3, 0x1569: 0x0bbf, + 0x156a: 0x0bcf, 0x156b: 0x0bd3, 0x156c: 0x0be3, 0x156d: 0x0bdb, 0x156e: 0x0bdf, 0x156f: 0x0be7, + 0x1570: 0x0beb, 0x1571: 0x0bef, 0x1572: 0x0bfb, 0x1573: 0x0bff, 0x1574: 0x0c17, 0x1575: 0x0c1f, + 0x1576: 0x0c2f, 0x1577: 0x0c43, 0x1578: 0x16ba, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b, + 0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bf, 0x157f: 0x0c6f, + // Block 0x56, offset 0x1580 + 0x1580: 0x0c63, 0x1581: 0x0c5b, 0x1582: 0x05ef, 0x1583: 0x0c77, 0x1584: 0x0c7f, 0x1585: 0x0c87, + 0x1586: 0x0c7b, 0x1587: 0x05f3, 0x1588: 0x0c97, 0x1589: 0x0c9f, 0x158a: 0x16c4, 0x158b: 0x0ccb, + 0x158c: 0x0cff, 0x158d: 0x0cdb, 0x158e: 0x05ff, 0x158f: 0x0ce7, 0x1590: 0x05fb, 0x1591: 0x05f7, + 0x1592: 0x07c3, 0x1593: 0x07c7, 0x1594: 0x0d03, 0x1595: 0x0ceb, 0x1596: 0x11ab, 0x1597: 0x0663, + 0x1598: 0x0d0f, 0x1599: 0x0d13, 0x159a: 0x0d17, 0x159b: 0x0d2b, 0x159c: 0x0d23, 0x159d: 0x16dd, + 0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e7, + 0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b, + 0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16ec, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f, + 0x15b0: 0x16f1, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7, + 0x15b6: 0x0dbb, 0x15b7: 0x16f6, 0x15b8: 0x168d, 0x15b9: 0x16fb, 0x15ba: 0x0ddb, 0x15bb: 0x1700, + 0x15bc: 0x0de7, 0x15bd: 0x0def, 0x15be: 0x0ddf, 0x15bf: 0x0dfb, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x0e0b, 0x15c1: 0x0e1b, 0x15c2: 0x0e0f, 0x15c3: 0x0e13, 0x15c4: 0x0e1f, 0x15c5: 0x0e23, + 0x15c6: 0x1705, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53, + 0x15cc: 0x0e4f, 0x15cd: 0x170a, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170f, 0x15d1: 0x1714, + 0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b, + 0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x1651, 0x15dc: 0x0eb3, 0x15dd: 0x1719, + 0x15de: 0x0ebf, 0x15df: 0x1723, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1728, + 0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x172d, 0x15e7: 0x1732, 0x15e8: 0x0f27, 0x15e9: 0x0f37, + 0x15ea: 0x061b, 0x15eb: 0x0f3b, 0x15ec: 0x061f, 0x15ed: 0x061f, 0x15ee: 0x0f53, 0x15ef: 0x0f57, + 0x15f0: 0x0f5f, 0x15f1: 0x0f63, 0x15f2: 0x0f6f, 0x15f3: 0x0623, 0x15f4: 0x0f87, 0x15f5: 0x1737, + 0x15f6: 0x0fa3, 0x15f7: 0x173c, 0x15f8: 0x0faf, 0x15f9: 0x16a1, 0x15fa: 0x0fbf, 0x15fb: 0x1741, + 0x15fc: 0x1746, 0x15fd: 0x174b, 0x15fe: 0x0627, 0x15ff: 0x062b, + // Block 0x58, offset 0x1600 + 0x1600: 0x0ff7, 0x1601: 0x1755, 0x1602: 0x1750, 0x1603: 0x175a, 0x1604: 0x175f, 0x1605: 0x0fff, + 0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637, + 0x160c: 0x063b, 0x160d: 0x1769, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f, + 0x1612: 0x176e, 0x1613: 0x105b, 0x1614: 0x1773, 0x1615: 0x1778, 0x1616: 0x107b, 0x1617: 0x1093, + 0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x177d, 0x161d: 0x1782, + 0x161e: 0x1782, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1787, 0x1622: 0x10cf, 0x1623: 0x10d3, + 0x1624: 0x064b, 0x1625: 0x178c, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7, + 0x162a: 0x1107, 0x162b: 0x1796, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133, + 0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x17a0, 0x1633: 0x17a5, 0x1634: 0x065b, 0x1635: 0x17aa, + 0x1636: 0x115b, 0x1637: 0x17af, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b4, + 0x163c: 0x17b9, 0x163d: 0x118f, 0x163e: 0x17be, 0x163f: 0x1197, + // Block 0x59, offset 0x1640 + 0x1640: 0x16ce, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7, + 0x1646: 0x0a33, 0x1647: 0x17c3, 0x1648: 0x17c8, 0x1649: 0x16d3, 0x164a: 0x16d8, 0x164b: 0x11d7, + 0x164c: 0x11db, 0x164d: 0x13f3, 0x164e: 0x066b, 0x164f: 0x1207, 0x1650: 0x1203, 0x1651: 0x120b, + 0x1652: 0x083f, 0x1653: 0x120f, 0x1654: 0x1213, 0x1655: 0x1217, 0x1656: 0x121f, 0x1657: 0x17cd, + 0x1658: 0x121b, 0x1659: 0x1223, 0x165a: 0x1237, 0x165b: 0x123b, 0x165c: 0x1227, 0x165d: 0x123f, + 0x165e: 0x1253, 0x165f: 0x1267, 0x1660: 0x1233, 0x1661: 0x1247, 0x1662: 0x124b, 0x1663: 0x124f, + 0x1664: 0x17d2, 0x1665: 0x17dc, 0x1666: 0x17d7, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273, + 0x166a: 0x127b, 0x166b: 0x17f0, 0x166c: 0x127f, 0x166d: 0x17e1, 0x166e: 0x0673, 0x166f: 0x0677, + 0x1670: 0x17e6, 0x1671: 0x17eb, 0x1672: 0x067b, 0x1673: 0x129f, 0x1674: 0x12a3, 0x1675: 0x12a7, + 0x1676: 0x12ab, 0x1677: 0x12b7, 0x1678: 0x12b3, 0x1679: 0x12bf, 0x167a: 0x12bb, 0x167b: 0x12cb, + 0x167c: 0x12c3, 0x167d: 0x12c7, 0x167e: 0x12cf, 0x167f: 0x067f, + // Block 0x5a, offset 0x1680 + 0x1680: 0x12d7, 0x1681: 0x12db, 0x1682: 0x0683, 0x1683: 0x12eb, 0x1684: 0x12ef, 0x1685: 0x17f5, + 0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17fa, + 0x168c: 0x17ff, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b, + 0x1692: 0x137b, 0x1693: 0x1804, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7, + 0x1698: 0x180e, 0x1699: 0x1660, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1665, + 0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x1813, 0x16a1: 0x1818, 0x16a2: 0x1423, 0x16a3: 0x142f, + 0x16a4: 0x1437, 0x16a5: 0x181d, 0x16a6: 0x143b, 0x16a7: 0x1467, 0x16a8: 0x1473, 0x16a9: 0x1477, + 0x16aa: 0x146f, 0x16ab: 0x1483, 0x16ac: 0x1487, 0x16ad: 0x1822, 0x16ae: 0x1493, 0x16af: 0x0693, + 0x16b0: 0x149b, 0x16b1: 0x1827, 0x16b2: 0x0697, 0x16b3: 0x14d3, 0x16b4: 0x0ac3, 0x16b5: 0x14eb, + 0x16b6: 0x182c, 0x16b7: 0x1836, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x1513, 0x16bb: 0x183b, + 0x16bc: 0x06a3, 0x16bd: 0x1840, 0x16be: 0x152b, 0x16bf: 0x152b, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x1533, 0x16c1: 0x1845, 0x16c2: 0x154b, 0x16c3: 0x06a7, 0x16c4: 0x155b, 0x16c5: 0x1567, + 0x16c6: 0x156f, 0x16c7: 0x1577, 0x16c8: 0x06ab, 0x16c9: 0x184a, 0x16ca: 0x158b, 0x16cb: 0x15a7, + 0x16cc: 0x15b3, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b7, 0x16d0: 0x184f, 0x16d1: 0x06b7, + 0x16d2: 0x1854, 0x16d3: 0x1859, 0x16d4: 0x185e, 0x16d5: 0x15db, 0x16d6: 0x06bb, 0x16d7: 0x15ef, + 0x16d8: 0x15f7, 0x16d9: 0x15fb, 0x16da: 0x1603, 0x16db: 0x160b, 0x16dc: 0x1613, 0x16dd: 0x1868, +} + +// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var nfkcIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x5a, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5b, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x5c, 0xcb: 0x5d, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, + 0xd0: 0x0a, 0xd1: 0x5e, 0xd2: 0x5f, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x60, + 0xd8: 0x61, 0xd9: 0x0d, 0xdb: 0x62, 0xdc: 0x63, 0xdd: 0x64, 0xdf: 0x65, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, + 0xf0: 0x13, + // Block 0x4, offset 0x100 + 0x120: 0x66, 0x121: 0x67, 0x123: 0x68, 0x124: 0x69, 0x125: 0x6a, 0x126: 0x6b, 0x127: 0x6c, + 0x128: 0x6d, 0x129: 0x6e, 0x12a: 0x6f, 0x12b: 0x70, 0x12c: 0x6b, 0x12d: 0x71, 0x12e: 0x72, 0x12f: 0x73, + 0x131: 0x74, 0x132: 0x75, 0x133: 0x76, 0x134: 0x77, 0x135: 0x78, 0x137: 0x79, + 0x138: 0x7a, 0x139: 0x7b, 0x13a: 0x7c, 0x13b: 0x7d, 0x13c: 0x7e, 0x13d: 0x7f, 0x13e: 0x80, 0x13f: 0x81, + // Block 0x5, offset 0x140 + 0x140: 0x82, 0x142: 0x83, 0x143: 0x84, 0x144: 0x85, 0x145: 0x86, 0x146: 0x87, 0x147: 0x88, + 0x14d: 0x89, + 0x15c: 0x8a, 0x15f: 0x8b, + 0x162: 0x8c, 0x164: 0x8d, + 0x168: 0x8e, 0x169: 0x8f, 0x16a: 0x90, 0x16c: 0x0e, 0x16d: 0x91, 0x16e: 0x92, 0x16f: 0x93, + 0x170: 0x94, 0x173: 0x95, 0x174: 0x96, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x97, + 0x178: 0x11, 0x179: 0x12, 0x17a: 0x13, 0x17b: 0x14, 0x17c: 0x15, 0x17d: 0x16, 0x17e: 0x17, 0x17f: 0x18, + // Block 0x6, offset 0x180 + 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x19, 0x185: 0x1a, 0x186: 0x9c, 0x187: 0x9d, + 0x188: 0x9e, 0x189: 0x1b, 0x18a: 0x1c, 0x18b: 0x9f, 0x18c: 0xa0, + 0x191: 0x1d, 0x192: 0x1e, 0x193: 0xa1, + 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4, + 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8, + 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x1f, 0x1bd: 0x20, 0x1be: 0x21, 0x1bf: 0xab, + // Block 0x7, offset 0x1c0 + 0x1c0: 0xac, 0x1c1: 0x22, 0x1c2: 0x23, 0x1c3: 0x24, 0x1c4: 0xad, 0x1c5: 0x25, 0x1c6: 0x26, + 0x1c8: 0x27, 0x1c9: 0x28, 0x1ca: 0x29, 0x1cb: 0x2a, 0x1cc: 0x2b, 0x1cd: 0x2c, 0x1ce: 0x2d, 0x1cf: 0x2e, + // Block 0x8, offset 0x200 + 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2, + 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8, + 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc, + 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd, + 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe, + // Block 0x9, offset 0x240 + 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf, + 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0, + 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1, + 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2, + 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3, + 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd, + 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe, + 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf, + // Block 0xa, offset 0x280 + 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0, + 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1, + 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2, + 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3, + 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd, + 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe, + 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf, + 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0, + // Block 0xb, offset 0x2c0 + 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1, + 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2, + 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3, + 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4, + // Block 0xc, offset 0x300 + 0x324: 0x2f, 0x325: 0x30, 0x326: 0x31, 0x327: 0x32, + 0x328: 0x33, 0x329: 0x34, 0x32a: 0x35, 0x32b: 0x36, 0x32c: 0x37, 0x32d: 0x38, 0x32e: 0x39, 0x32f: 0x3a, + 0x330: 0x3b, 0x331: 0x3c, 0x332: 0x3d, 0x333: 0x3e, 0x334: 0x3f, 0x335: 0x40, 0x336: 0x41, 0x337: 0x42, + 0x338: 0x43, 0x339: 0x44, 0x33a: 0x45, 0x33b: 0x46, 0x33c: 0xc5, 0x33d: 0x47, 0x33e: 0x48, 0x33f: 0x49, + // Block 0xd, offset 0x340 + 0x347: 0xc6, + 0x34b: 0xc7, 0x34d: 0xc8, + 0x368: 0xc9, 0x36b: 0xca, + // Block 0xe, offset 0x380 + 0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce, + 0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6b, 0x38d: 0xd1, + 0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6, + 0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9, + 0x3b0: 0xd7, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xda, 0x3ec: 0xdb, + // Block 0x10, offset 0x400 + 0x432: 0xdc, + // Block 0x11, offset 0x440 + 0x445: 0xdd, 0x446: 0xde, 0x447: 0xdf, + 0x449: 0xe0, + 0x450: 0xe1, 0x451: 0xe2, 0x452: 0xe3, 0x453: 0xe4, 0x454: 0xe5, 0x455: 0xe6, 0x456: 0xe7, 0x457: 0xe8, + 0x458: 0xe9, 0x459: 0xea, 0x45a: 0x4a, 0x45b: 0xeb, 0x45c: 0xec, 0x45d: 0xed, 0x45e: 0xee, 0x45f: 0x4b, + // Block 0x12, offset 0x480 + 0x480: 0xef, + 0x4a3: 0xf0, 0x4a5: 0xf1, + 0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e, + // Block 0x13, offset 0x4c0 + 0x4c4: 0x4f, 0x4c5: 0xf2, 0x4c6: 0xf3, + 0x4c8: 0x50, 0x4c9: 0xf4, + // Block 0x14, offset 0x500 + 0x520: 0x51, 0x521: 0x52, 0x522: 0x53, 0x523: 0x54, 0x524: 0x55, 0x525: 0x56, 0x526: 0x57, 0x527: 0x58, + 0x528: 0x59, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfkcSparseOffset: 155 entries, 310 bytes +var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd4, 0xdb, 0xe3, 0xe7, 0xe9, 0xec, 0xf0, 0xf6, 0x107, 0x113, 0x115, 0x11b, 0x11d, 0x11f, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12c, 0x12f, 0x131, 0x134, 0x137, 0x13b, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x176, 0x184, 0x192, 0x1a2, 0x1b0, 0x1b7, 0x1bd, 0x1cc, 0x1d0, 0x1d2, 0x1d6, 0x1d8, 0x1db, 0x1dd, 0x1e0, 0x1e2, 0x1e5, 0x1e7, 0x1e9, 0x1eb, 0x1f7, 0x201, 0x20b, 0x20e, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21d, 0x21f, 0x221, 0x223, 0x225, 0x22b, 0x22e, 0x232, 0x234, 0x23b, 0x241, 0x247, 0x24f, 0x255, 0x25b, 0x261, 0x265, 0x267, 0x269, 0x26b, 0x26d, 0x273, 0x276, 0x279, 0x281, 0x288, 0x28b, 0x28e, 0x290, 0x298, 0x29b, 0x2a2, 0x2a5, 0x2ab, 0x2ad, 0x2af, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2c7, 0x2d1, 0x2d3, 0x2d5, 0x2d9, 0x2de, 0x2ea, 0x2ef, 0x2f8, 0x2fe, 0x303, 0x307, 0x30c, 0x310, 0x320, 0x32e, 0x33c, 0x34a, 0x350, 0x352, 0x355, 0x35f, 0x361} + +// nfkcSparseValues: 875 entries, 3500 bytes +var nfkcSparseValues = [875]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0002, lo: 0x0d}, + {value: 0x0001, lo: 0xa0, hi: 0xa0}, + {value: 0x4278, lo: 0xa8, hi: 0xa8}, + {value: 0x0083, lo: 0xaa, hi: 0xaa}, + {value: 0x4264, lo: 0xaf, hi: 0xaf}, + {value: 0x0025, lo: 0xb2, hi: 0xb3}, + {value: 0x425a, lo: 0xb4, hi: 0xb4}, + {value: 0x01dc, lo: 0xb5, hi: 0xb5}, + {value: 0x4291, lo: 0xb8, hi: 0xb8}, + {value: 0x0023, lo: 0xb9, hi: 0xb9}, + {value: 0x009f, lo: 0xba, hi: 0xba}, + {value: 0x221c, lo: 0xbc, hi: 0xbc}, + {value: 0x2210, lo: 0xbd, hi: 0xbd}, + {value: 0x22b2, lo: 0xbe, hi: 0xbe}, + // Block 0x1, offset 0xe + {value: 0x0091, lo: 0x03}, + {value: 0x46e2, lo: 0xa0, hi: 0xa1}, + {value: 0x4714, lo: 0xaf, hi: 0xb0}, + {value: 0xa000, lo: 0xb7, hi: 0xb7}, + // Block 0x2, offset 0x12 + {value: 0x0003, lo: 0x08}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x0091, lo: 0xb0, hi: 0xb0}, + {value: 0x0119, lo: 0xb1, hi: 0xb1}, + {value: 0x0095, lo: 0xb2, hi: 0xb2}, + {value: 0x00a5, lo: 0xb3, hi: 0xb3}, + {value: 0x0143, lo: 0xb4, hi: 0xb6}, + {value: 0x00af, lo: 0xb7, hi: 0xb7}, + {value: 0x00b3, lo: 0xb8, hi: 0xb8}, + // Block 0x3, offset 0x1b + {value: 0x000a, lo: 0x09}, + {value: 0x426e, lo: 0x98, hi: 0x98}, + {value: 0x4273, lo: 0x99, hi: 0x9a}, + {value: 0x4296, lo: 0x9b, hi: 0x9b}, + {value: 0x425f, lo: 0x9c, hi: 0x9c}, + {value: 0x4282, lo: 0x9d, hi: 0x9d}, + {value: 0x0113, lo: 0xa0, hi: 0xa0}, + {value: 0x0099, lo: 0xa1, hi: 0xa1}, + {value: 0x00a7, lo: 0xa2, hi: 0xa3}, + {value: 0x0167, lo: 0xa4, hi: 0xa4}, + // Block 0x4, offset 0x25 + {value: 0x0000, lo: 0x0f}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0xa000, lo: 0x8d, hi: 0x8d}, + {value: 0x37a5, lo: 0x90, hi: 0x90}, + {value: 0x37b1, lo: 0x91, hi: 0x91}, + {value: 0x379f, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x3817, lo: 0x97, hi: 0x97}, + {value: 0x37e1, lo: 0x9c, hi: 0x9c}, + {value: 0x37c9, lo: 0x9d, hi: 0x9d}, + {value: 0x37f3, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x381d, lo: 0xb6, hi: 0xb6}, + {value: 0x3823, lo: 0xb7, hi: 0xb7}, + // Block 0x5, offset 0x35 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x83, hi: 0x87}, + // Block 0x6, offset 0x37 + {value: 0x0001, lo: 0x04}, + {value: 0x8113, lo: 0x81, hi: 0x82}, + {value: 0x8132, lo: 0x84, hi: 0x84}, + {value: 0x812d, lo: 0x85, hi: 0x85}, + {value: 0x810d, lo: 0x87, hi: 0x87}, + // Block 0x7, offset 0x3c + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x97}, + {value: 0x8119, lo: 0x98, hi: 0x98}, + {value: 0x811a, lo: 0x99, hi: 0x99}, + {value: 0x811b, lo: 0x9a, hi: 0x9a}, + {value: 0x3841, lo: 0xa2, hi: 0xa2}, + {value: 0x3847, lo: 0xa3, hi: 0xa3}, + {value: 0x3853, lo: 0xa4, hi: 0xa4}, + {value: 0x384d, lo: 0xa5, hi: 0xa5}, + {value: 0x3859, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x8, offset 0x47 + {value: 0x0000, lo: 0x0e}, + {value: 0x386b, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x385f, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x3865, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8132, lo: 0x96, hi: 0x9c}, + {value: 0x8132, lo: 0x9f, hi: 0xa2}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa4}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + // Block 0x9, offset 0x56 + {value: 0x0000, lo: 0x0c}, + {value: 0x811f, lo: 0x91, hi: 0x91}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x812d, lo: 0xb1, hi: 0xb1}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb5, hi: 0xb6}, + {value: 0x812d, lo: 0xb7, hi: 0xb9}, + {value: 0x8132, lo: 0xba, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbc}, + {value: 0x8132, lo: 0xbd, hi: 0xbd}, + {value: 0x812d, lo: 0xbe, hi: 0xbe}, + {value: 0x8132, lo: 0xbf, hi: 0xbf}, + // Block 0xa, offset 0x63 + {value: 0x0005, lo: 0x07}, + {value: 0x8132, lo: 0x80, hi: 0x80}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x83}, + {value: 0x812d, lo: 0x84, hi: 0x85}, + {value: 0x812d, lo: 0x86, hi: 0x87}, + {value: 0x812d, lo: 0x88, hi: 0x89}, + {value: 0x8132, lo: 0x8a, hi: 0x8a}, + // Block 0xb, offset 0x6b + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xab, hi: 0xb1}, + {value: 0x812d, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb3}, + // Block 0xc, offset 0x6f + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0x96, hi: 0x99}, + {value: 0x8132, lo: 0x9b, hi: 0xa3}, + {value: 0x8132, lo: 0xa5, hi: 0xa7}, + {value: 0x8132, lo: 0xa9, hi: 0xad}, + // Block 0xd, offset 0x74 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x99, hi: 0x9b}, + // Block 0xe, offset 0x76 + {value: 0x0000, lo: 0x10}, + {value: 0x8132, lo: 0x94, hi: 0xa1}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xa9, hi: 0xa9}, + {value: 0x8132, lo: 0xaa, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xaf}, + {value: 0x8116, lo: 0xb0, hi: 0xb0}, + {value: 0x8117, lo: 0xb1, hi: 0xb1}, + {value: 0x8118, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb5}, + {value: 0x812d, lo: 0xb6, hi: 0xb6}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x812d, lo: 0xb9, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbf}, + // Block 0xf, offset 0x87 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, + {value: 0x9902, lo: 0xbc, hi: 0xbc}, + // Block 0x10, offset 0x8f + {value: 0x0008, lo: 0x06}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x91, hi: 0x91}, + {value: 0x812d, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x93, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x94}, + {value: 0x451c, lo: 0x98, hi: 0x9f}, + // Block 0x11, offset 0x96 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x12, offset 0x99 + {value: 0x0008, lo: 0x06}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x455c, lo: 0x9c, hi: 0x9d}, + {value: 0x456c, lo: 0x9f, hi: 0x9f}, + // Block 0x13, offset 0xa0 + {value: 0x0000, lo: 0x03}, + {value: 0x4594, lo: 0xb3, hi: 0xb3}, + {value: 0x459c, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x14, offset 0xa4 + {value: 0x0008, lo: 0x03}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x4574, lo: 0x99, hi: 0x9b}, + {value: 0x458c, lo: 0x9e, hi: 0x9e}, + // Block 0x15, offset 0xa8 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x16, offset 0xaa + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + // Block 0x17, offset 0xac + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cb6, lo: 0x88, hi: 0x88}, + {value: 0x2cae, lo: 0x8b, hi: 0x8b}, + {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x45a4, lo: 0x9c, hi: 0x9c}, + {value: 0x45ac, lo: 0x9d, hi: 0x9d}, + // Block 0x18, offset 0xb5 + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2cc6, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x19, offset 0xb9 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cce, lo: 0x8a, hi: 0x8a}, + {value: 0x2cde, lo: 0x8b, hi: 0x8b}, + {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1a, offset 0xc0 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x3ef0, lo: 0x88, hi: 0x88}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8120, lo: 0x95, hi: 0x96}, + // Block 0x1b, offset 0xc5 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1c, offset 0xc8 + {value: 0x0000, lo: 0x09}, + {value: 0x2ce6, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2cee, lo: 0x87, hi: 0x87}, + {value: 0x2cf6, lo: 0x88, hi: 0x88}, + {value: 0x2f50, lo: 0x8a, hi: 0x8a}, + {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1d, offset 0xd2 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1e, offset 0xd4 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, + {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, + {value: 0x2d06, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1f, offset 0xdb + {value: 0x6bea, lo: 0x07}, + {value: 0x9904, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, + {value: 0x2f58, lo: 0x9c, hi: 0x9c}, + {value: 0x2de3, lo: 0x9d, hi: 0x9d}, + {value: 0x2d16, lo: 0x9e, hi: 0x9f}, + // Block 0x20, offset 0xe3 + {value: 0x0000, lo: 0x03}, + {value: 0x2621, lo: 0xb3, hi: 0xb3}, + {value: 0x8122, lo: 0xb8, hi: 0xb9}, + {value: 0x8104, lo: 0xba, hi: 0xba}, + // Block 0x21, offset 0xe7 + {value: 0x0000, lo: 0x01}, + {value: 0x8123, lo: 0x88, hi: 0x8b}, + // Block 0x22, offset 0xe9 + {value: 0x0000, lo: 0x02}, + {value: 0x2636, lo: 0xb3, hi: 0xb3}, + {value: 0x8124, lo: 0xb8, hi: 0xb9}, + // Block 0x23, offset 0xec + {value: 0x0000, lo: 0x03}, + {value: 0x8125, lo: 0x88, hi: 0x8b}, + {value: 0x2628, lo: 0x9c, hi: 0x9c}, + {value: 0x262f, lo: 0x9d, hi: 0x9d}, + // Block 0x24, offset 0xf0 + {value: 0x0000, lo: 0x05}, + {value: 0x030b, lo: 0x8c, hi: 0x8c}, + {value: 0x812d, lo: 0x98, hi: 0x99}, + {value: 0x812d, lo: 0xb5, hi: 0xb5}, + {value: 0x812d, lo: 0xb7, hi: 0xb7}, + {value: 0x812b, lo: 0xb9, hi: 0xb9}, + // Block 0x25, offset 0xf6 + {value: 0x0000, lo: 0x10}, + {value: 0x2644, lo: 0x83, hi: 0x83}, + {value: 0x264b, lo: 0x8d, hi: 0x8d}, + {value: 0x2652, lo: 0x92, hi: 0x92}, + {value: 0x2659, lo: 0x97, hi: 0x97}, + {value: 0x2660, lo: 0x9c, hi: 0x9c}, + {value: 0x263d, lo: 0xa9, hi: 0xa9}, + {value: 0x8126, lo: 0xb1, hi: 0xb1}, + {value: 0x8127, lo: 0xb2, hi: 0xb2}, + {value: 0x4a84, lo: 0xb3, hi: 0xb3}, + {value: 0x8128, lo: 0xb4, hi: 0xb4}, + {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, + {value: 0x45b4, lo: 0xb6, hi: 0xb6}, + {value: 0x45f4, lo: 0xb7, hi: 0xb7}, + {value: 0x45bc, lo: 0xb8, hi: 0xb8}, + {value: 0x45ff, lo: 0xb9, hi: 0xb9}, + {value: 0x8127, lo: 0xba, hi: 0xbd}, + // Block 0x26, offset 0x107 + {value: 0x0000, lo: 0x0b}, + {value: 0x8127, lo: 0x80, hi: 0x80}, + {value: 0x4a96, lo: 0x81, hi: 0x81}, + {value: 0x8132, lo: 0x82, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0x86, hi: 0x87}, + {value: 0x266e, lo: 0x93, hi: 0x93}, + {value: 0x2675, lo: 0x9d, hi: 0x9d}, + {value: 0x267c, lo: 0xa2, hi: 0xa2}, + {value: 0x2683, lo: 0xa7, hi: 0xa7}, + {value: 0x268a, lo: 0xac, hi: 0xac}, + {value: 0x2667, lo: 0xb9, hi: 0xb9}, + // Block 0x27, offset 0x113 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x86, hi: 0x86}, + // Block 0x28, offset 0x115 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x29, offset 0x11b + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + // Block 0x2a, offset 0x11d + {value: 0x0000, lo: 0x01}, + {value: 0x030f, lo: 0xbc, hi: 0xbc}, + // Block 0x2b, offset 0x11f + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x121 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x123 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x125 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x127 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x129 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x94, hi: 0x94}, + {value: 0x8104, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x12c + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x12f + {value: 0x0000, lo: 0x01}, + {value: 0x8131, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x131 + {value: 0x0004, lo: 0x02}, + {value: 0x812e, lo: 0xb9, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x134 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x97, hi: 0x97}, + {value: 0x812d, lo: 0x98, hi: 0x98}, + // Block 0x35, offset 0x137 + {value: 0x0000, lo: 0x03}, + {value: 0x8104, lo: 0xa0, hi: 0xa0}, + {value: 0x8132, lo: 0xb5, hi: 0xbc}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x13b + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + {value: 0x812d, lo: 0xb5, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x37, offset 0x140 + {value: 0x0000, lo: 0x08}, + {value: 0x2d66, lo: 0x80, hi: 0x80}, + {value: 0x2d6e, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2d76, lo: 0x83, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xac}, + {value: 0x8132, lo: 0xad, hi: 0xb3}, + // Block 0x38, offset 0x149 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xaa, hi: 0xab}, + // Block 0x39, offset 0x14b + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xa6, hi: 0xa6}, + {value: 0x8104, lo: 0xb2, hi: 0xb3}, + // Block 0x3a, offset 0x14e + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x3b, offset 0x150 + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812d, lo: 0x95, hi: 0x99}, + {value: 0x8132, lo: 0x9a, hi: 0x9b}, + {value: 0x812d, lo: 0x9c, hi: 0x9f}, + {value: 0x8132, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + {value: 0x8132, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb8, hi: 0xb9}, + // Block 0x3c, offset 0x15b + {value: 0x0002, lo: 0x0a}, + {value: 0x0043, lo: 0xac, hi: 0xac}, + {value: 0x00d1, lo: 0xad, hi: 0xad}, + {value: 0x0045, lo: 0xae, hi: 0xae}, + {value: 0x0049, lo: 0xb0, hi: 0xb1}, + {value: 0x00e6, lo: 0xb2, hi: 0xb2}, + {value: 0x004f, lo: 0xb3, hi: 0xba}, + {value: 0x005f, lo: 0xbc, hi: 0xbc}, + {value: 0x00ef, lo: 0xbd, hi: 0xbd}, + {value: 0x0061, lo: 0xbe, hi: 0xbe}, + {value: 0x0065, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x166 + {value: 0x0000, lo: 0x0f}, + {value: 0x8132, lo: 0x80, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x82}, + {value: 0x8132, lo: 0x83, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8a}, + {value: 0x8132, lo: 0x8b, hi: 0x8c}, + {value: 0x8135, lo: 0x8d, hi: 0x8d}, + {value: 0x812a, lo: 0x8e, hi: 0x8e}, + {value: 0x812d, lo: 0x8f, hi: 0x8f}, + {value: 0x8129, lo: 0x90, hi: 0x90}, + {value: 0x8132, lo: 0x91, hi: 0xb5}, + {value: 0x8132, lo: 0xbb, hi: 0xbb}, + {value: 0x8134, lo: 0xbc, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + {value: 0x8132, lo: 0xbe, hi: 0xbe}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x3e, offset 0x176 + {value: 0x0000, lo: 0x0d}, + {value: 0x0001, lo: 0x80, hi: 0x8a}, + {value: 0x043b, lo: 0x91, hi: 0x91}, + {value: 0x429b, lo: 0x97, hi: 0x97}, + {value: 0x001d, lo: 0xa4, hi: 0xa4}, + {value: 0x1873, lo: 0xa5, hi: 0xa5}, + {value: 0x1b5c, lo: 0xa6, hi: 0xa6}, + {value: 0x0001, lo: 0xaf, hi: 0xaf}, + {value: 0x2691, lo: 0xb3, hi: 0xb3}, + {value: 0x27fe, lo: 0xb4, hi: 0xb4}, + {value: 0x2698, lo: 0xb6, hi: 0xb6}, + {value: 0x2808, lo: 0xb7, hi: 0xb7}, + {value: 0x186d, lo: 0xbc, hi: 0xbc}, + {value: 0x4269, lo: 0xbe, hi: 0xbe}, + // Block 0x3f, offset 0x184 + {value: 0x0002, lo: 0x0d}, + {value: 0x1933, lo: 0x87, hi: 0x87}, + {value: 0x1930, lo: 0x88, hi: 0x88}, + {value: 0x1870, lo: 0x89, hi: 0x89}, + {value: 0x298e, lo: 0x97, hi: 0x97}, + {value: 0x0001, lo: 0x9f, hi: 0x9f}, + {value: 0x0021, lo: 0xb0, hi: 0xb0}, + {value: 0x0093, lo: 0xb1, hi: 0xb1}, + {value: 0x0029, lo: 0xb4, hi: 0xb9}, + {value: 0x0017, lo: 0xba, hi: 0xba}, + {value: 0x0467, lo: 0xbb, hi: 0xbb}, + {value: 0x003b, lo: 0xbc, hi: 0xbc}, + {value: 0x0011, lo: 0xbd, hi: 0xbe}, + {value: 0x009d, lo: 0xbf, hi: 0xbf}, + // Block 0x40, offset 0x192 + {value: 0x0002, lo: 0x0f}, + {value: 0x0021, lo: 0x80, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8a}, + {value: 0x0467, lo: 0x8b, hi: 0x8b}, + {value: 0x003b, lo: 0x8c, hi: 0x8c}, + {value: 0x0011, lo: 0x8d, hi: 0x8e}, + {value: 0x0083, lo: 0x90, hi: 0x90}, + {value: 0x008b, lo: 0x91, hi: 0x91}, + {value: 0x009f, lo: 0x92, hi: 0x92}, + {value: 0x00b1, lo: 0x93, hi: 0x93}, + {value: 0x0104, lo: 0x94, hi: 0x94}, + {value: 0x0091, lo: 0x95, hi: 0x95}, + {value: 0x0097, lo: 0x96, hi: 0x99}, + {value: 0x00a1, lo: 0x9a, hi: 0x9a}, + {value: 0x00a7, lo: 0x9b, hi: 0x9c}, + {value: 0x1999, lo: 0xa8, hi: 0xa8}, + // Block 0x41, offset 0x1a2 + {value: 0x0000, lo: 0x0d}, + {value: 0x8132, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8132, lo: 0x9b, hi: 0x9c}, + {value: 0x8132, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa7}, + {value: 0x812d, lo: 0xa8, hi: 0xa8}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xaf}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + // Block 0x42, offset 0x1b0 + {value: 0x0007, lo: 0x06}, + {value: 0x2180, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, + {value: 0x3bc7, lo: 0xae, hi: 0xae}, + // Block 0x43, offset 0x1b7 + {value: 0x000e, lo: 0x05}, + {value: 0x3bce, lo: 0x8d, hi: 0x8e}, + {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + // Block 0x44, offset 0x1bd + {value: 0x0173, lo: 0x0e}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3be3, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3bea, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3bf8, lo: 0xa4, hi: 0xa4}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x3bff, lo: 0xa6, hi: 0xa6}, + {value: 0x269f, lo: 0xac, hi: 0xad}, + {value: 0x26a6, lo: 0xaf, hi: 0xaf}, + {value: 0x281c, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x45, offset 0x1cc + {value: 0x0007, lo: 0x03}, + {value: 0x3c68, lo: 0xa0, hi: 0xa1}, + {value: 0x3c92, lo: 0xa2, hi: 0xa3}, + {value: 0x3cbc, lo: 0xaa, hi: 0xad}, + // Block 0x46, offset 0x1d0 + {value: 0x0004, lo: 0x01}, + {value: 0x048b, lo: 0xa9, hi: 0xaa}, + // Block 0x47, offset 0x1d2 + {value: 0x0002, lo: 0x03}, + {value: 0x0057, lo: 0x80, hi: 0x8f}, + {value: 0x0083, lo: 0x90, hi: 0xa9}, + {value: 0x0021, lo: 0xaa, hi: 0xaa}, + // Block 0x48, offset 0x1d6 + {value: 0x0000, lo: 0x01}, + {value: 0x299b, lo: 0x8c, hi: 0x8c}, + // Block 0x49, offset 0x1d8 + {value: 0x0263, lo: 0x02}, + {value: 0x1b8c, lo: 0xb4, hi: 0xb4}, + {value: 0x192d, lo: 0xb5, hi: 0xb6}, + // Block 0x4a, offset 0x1db + {value: 0x0000, lo: 0x01}, + {value: 0x44dd, lo: 0x9c, hi: 0x9c}, + // Block 0x4b, offset 0x1dd + {value: 0x0000, lo: 0x02}, + {value: 0x0095, lo: 0xbc, hi: 0xbc}, + {value: 0x006d, lo: 0xbd, hi: 0xbd}, + // Block 0x4c, offset 0x1e0 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xaf, hi: 0xb1}, + // Block 0x4d, offset 0x1e2 + {value: 0x0000, lo: 0x02}, + {value: 0x047f, lo: 0xaf, hi: 0xaf}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x4e, offset 0x1e5 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa0, hi: 0xbf}, + // Block 0x4f, offset 0x1e7 + {value: 0x0000, lo: 0x01}, + {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, + // Block 0x50, offset 0x1e9 + {value: 0x0000, lo: 0x01}, + {value: 0x162f, lo: 0xb3, hi: 0xb3}, + // Block 0x51, offset 0x1eb + {value: 0x0004, lo: 0x0b}, + {value: 0x1597, lo: 0x80, hi: 0x82}, + {value: 0x15af, lo: 0x83, hi: 0x83}, + {value: 0x15c7, lo: 0x84, hi: 0x85}, + {value: 0x15d7, lo: 0x86, hi: 0x89}, + {value: 0x15eb, lo: 0x8a, hi: 0x8c}, + {value: 0x15ff, lo: 0x8d, hi: 0x8d}, + {value: 0x1607, lo: 0x8e, hi: 0x8e}, + {value: 0x160f, lo: 0x8f, hi: 0x90}, + {value: 0x161b, lo: 0x91, hi: 0x93}, + {value: 0x162b, lo: 0x94, hi: 0x94}, + {value: 0x1633, lo: 0x95, hi: 0x95}, + // Block 0x52, offset 0x1f7 + {value: 0x0004, lo: 0x09}, + {value: 0x0001, lo: 0x80, hi: 0x80}, + {value: 0x812c, lo: 0xaa, hi: 0xaa}, + {value: 0x8131, lo: 0xab, hi: 0xab}, + {value: 0x8133, lo: 0xac, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x812f, lo: 0xae, hi: 0xae}, + {value: 0x812f, lo: 0xaf, hi: 0xaf}, + {value: 0x04b3, lo: 0xb6, hi: 0xb6}, + {value: 0x0887, lo: 0xb8, hi: 0xba}, + // Block 0x53, offset 0x201 + {value: 0x0006, lo: 0x09}, + {value: 0x0313, lo: 0xb1, hi: 0xb1}, + {value: 0x0317, lo: 0xb2, hi: 0xb2}, + {value: 0x4a3b, lo: 0xb3, hi: 0xb3}, + {value: 0x031b, lo: 0xb4, hi: 0xb4}, + {value: 0x4a41, lo: 0xb5, hi: 0xb6}, + {value: 0x031f, lo: 0xb7, hi: 0xb7}, + {value: 0x0323, lo: 0xb8, hi: 0xb8}, + {value: 0x0327, lo: 0xb9, hi: 0xb9}, + {value: 0x4a4d, lo: 0xba, hi: 0xbf}, + // Block 0x54, offset 0x20b + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xaf, hi: 0xaf}, + {value: 0x8132, lo: 0xb4, hi: 0xbd}, + // Block 0x55, offset 0x20e + {value: 0x0000, lo: 0x03}, + {value: 0x020f, lo: 0x9c, hi: 0x9c}, + {value: 0x0212, lo: 0x9d, hi: 0x9d}, + {value: 0x8132, lo: 0x9e, hi: 0x9f}, + // Block 0x56, offset 0x212 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb1}, + // Block 0x57, offset 0x214 + {value: 0x0000, lo: 0x01}, + {value: 0x163b, lo: 0xb0, hi: 0xb0}, + // Block 0x58, offset 0x216 + {value: 0x000c, lo: 0x01}, + {value: 0x00d7, lo: 0xb8, hi: 0xb9}, + // Block 0x59, offset 0x218 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + // Block 0x5a, offset 0x21a + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xa0, hi: 0xb1}, + // Block 0x5b, offset 0x21d + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xab, hi: 0xad}, + // Block 0x5c, offset 0x21f + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x93, hi: 0x93}, + // Block 0x5d, offset 0x221 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb3, hi: 0xb3}, + // Block 0x5e, offset 0x223 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + // Block 0x5f, offset 0x225 + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x8132, lo: 0xbe, hi: 0xbf}, + // Block 0x60, offset 0x22b + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + // Block 0x61, offset 0x22e + {value: 0x0008, lo: 0x03}, + {value: 0x1637, lo: 0x9c, hi: 0x9d}, + {value: 0x0125, lo: 0x9e, hi: 0x9e}, + {value: 0x1643, lo: 0x9f, hi: 0x9f}, + // Block 0x62, offset 0x232 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xad, hi: 0xad}, + // Block 0x63, offset 0x234 + {value: 0x0000, lo: 0x06}, + {value: 0xe500, lo: 0x80, hi: 0x80}, + {value: 0xc600, lo: 0x81, hi: 0x9b}, + {value: 0xe500, lo: 0x9c, hi: 0x9c}, + {value: 0xc600, lo: 0x9d, hi: 0xb7}, + {value: 0xe500, lo: 0xb8, hi: 0xb8}, + {value: 0xc600, lo: 0xb9, hi: 0xbf}, + // Block 0x64, offset 0x23b + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x93}, + {value: 0xe500, lo: 0x94, hi: 0x94}, + {value: 0xc600, lo: 0x95, hi: 0xaf}, + {value: 0xe500, lo: 0xb0, hi: 0xb0}, + {value: 0xc600, lo: 0xb1, hi: 0xbf}, + // Block 0x65, offset 0x241 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8b}, + {value: 0xe500, lo: 0x8c, hi: 0x8c}, + {value: 0xc600, lo: 0x8d, hi: 0xa7}, + {value: 0xe500, lo: 0xa8, hi: 0xa8}, + {value: 0xc600, lo: 0xa9, hi: 0xbf}, + // Block 0x66, offset 0x247 + {value: 0x0000, lo: 0x07}, + {value: 0xc600, lo: 0x80, hi: 0x83}, + {value: 0xe500, lo: 0x84, hi: 0x84}, + {value: 0xc600, lo: 0x85, hi: 0x9f}, + {value: 0xe500, lo: 0xa0, hi: 0xa0}, + {value: 0xc600, lo: 0xa1, hi: 0xbb}, + {value: 0xe500, lo: 0xbc, hi: 0xbc}, + {value: 0xc600, lo: 0xbd, hi: 0xbf}, + // Block 0x67, offset 0x24f + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x97}, + {value: 0xe500, lo: 0x98, hi: 0x98}, + {value: 0xc600, lo: 0x99, hi: 0xb3}, + {value: 0xe500, lo: 0xb4, hi: 0xb4}, + {value: 0xc600, lo: 0xb5, hi: 0xbf}, + // Block 0x68, offset 0x255 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8f}, + {value: 0xe500, lo: 0x90, hi: 0x90}, + {value: 0xc600, lo: 0x91, hi: 0xab}, + {value: 0xe500, lo: 0xac, hi: 0xac}, + {value: 0xc600, lo: 0xad, hi: 0xbf}, + // Block 0x69, offset 0x25b + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + {value: 0xe500, lo: 0xa4, hi: 0xa4}, + {value: 0xc600, lo: 0xa5, hi: 0xbf}, + // Block 0x6a, offset 0x261 + {value: 0x0000, lo: 0x03}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + // Block 0x6b, offset 0x265 + {value: 0x0002, lo: 0x01}, + {value: 0x0003, lo: 0x81, hi: 0xbf}, + // Block 0x6c, offset 0x267 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x6d, offset 0x269 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xa0, hi: 0xa0}, + // Block 0x6e, offset 0x26b + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb6, hi: 0xba}, + // Block 0x6f, offset 0x26d + {value: 0x002c, lo: 0x05}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x8f, hi: 0x8f}, + {value: 0x8132, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x70, offset 0x273 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xa5, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + // Block 0x71, offset 0x276 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x72, offset 0x279 + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4238, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4242, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x424c, lo: 0xab, hi: 0xab}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x73, offset 0x281 + {value: 0x0000, lo: 0x06}, + {value: 0x8132, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2d7e, lo: 0xae, hi: 0xae}, + {value: 0x2d88, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8104, lo: 0xb3, hi: 0xb4}, + // Block 0x74, offset 0x288 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x75, offset 0x28b + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb5, hi: 0xb5}, + {value: 0x8102, lo: 0xb6, hi: 0xb6}, + // Block 0x76, offset 0x28e + {value: 0x0002, lo: 0x01}, + {value: 0x8102, lo: 0xa9, hi: 0xaa}, + // Block 0x77, offset 0x290 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2d92, lo: 0x8b, hi: 0x8b}, + {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8132, lo: 0xa6, hi: 0xac}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + // Block 0x78, offset 0x298 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x86, hi: 0x86}, + // Block 0x79, offset 0x29b + {value: 0x6b5a, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2db0, lo: 0xbb, hi: 0xbb}, + {value: 0x2da6, lo: 0xbc, hi: 0xbd}, + {value: 0x2dba, lo: 0xbe, hi: 0xbe}, + // Block 0x7a, offset 0x2a2 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x83, hi: 0x83}, + // Block 0x7b, offset 0x2a5 + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2dc4, lo: 0xba, hi: 0xba}, + {value: 0x2dce, lo: 0xbb, hi: 0xbb}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x7c, offset 0x2ab + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0x80, hi: 0x80}, + // Block 0x7d, offset 0x2ad + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x7e, offset 0x2af + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x7f, offset 0x2b2 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xab, hi: 0xab}, + // Block 0x80, offset 0x2b4 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x81, offset 0x2b6 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb6}, + // Block 0x82, offset 0x2b8 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x83, offset 0x2ba + {value: 0x0000, lo: 0x0c}, + {value: 0x45cc, lo: 0x9e, hi: 0x9e}, + {value: 0x45d6, lo: 0x9f, hi: 0x9f}, + {value: 0x460a, lo: 0xa0, hi: 0xa0}, + {value: 0x4618, lo: 0xa1, hi: 0xa1}, + {value: 0x4626, lo: 0xa2, hi: 0xa2}, + {value: 0x4634, lo: 0xa3, hi: 0xa3}, + {value: 0x4642, lo: 0xa4, hi: 0xa4}, + {value: 0x812b, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8130, lo: 0xad, hi: 0xad}, + {value: 0x812b, lo: 0xae, hi: 0xb2}, + {value: 0x812d, lo: 0xbb, hi: 0xbf}, + // Block 0x84, offset 0x2c7 + {value: 0x0000, lo: 0x09}, + {value: 0x812d, lo: 0x80, hi: 0x82}, + {value: 0x8132, lo: 0x85, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8b}, + {value: 0x8132, lo: 0xaa, hi: 0xad}, + {value: 0x45e0, lo: 0xbb, hi: 0xbb}, + {value: 0x45ea, lo: 0xbc, hi: 0xbc}, + {value: 0x4650, lo: 0xbd, hi: 0xbd}, + {value: 0x466c, lo: 0xbe, hi: 0xbe}, + {value: 0x465e, lo: 0xbf, hi: 0xbf}, + // Block 0x85, offset 0x2d1 + {value: 0x0000, lo: 0x01}, + {value: 0x467a, lo: 0x80, hi: 0x80}, + // Block 0x86, offset 0x2d3 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x82, hi: 0x84}, + // Block 0x87, offset 0x2d5 + {value: 0x0002, lo: 0x03}, + {value: 0x0043, lo: 0x80, hi: 0x99}, + {value: 0x0083, lo: 0x9a, hi: 0xb3}, + {value: 0x0043, lo: 0xb4, hi: 0xbf}, + // Block 0x88, offset 0x2d9 + {value: 0x0002, lo: 0x04}, + {value: 0x005b, lo: 0x80, hi: 0x8d}, + {value: 0x0083, lo: 0x8e, hi: 0x94}, + {value: 0x0093, lo: 0x96, hi: 0xa7}, + {value: 0x0043, lo: 0xa8, hi: 0xbf}, + // Block 0x89, offset 0x2de + {value: 0x0002, lo: 0x0b}, + {value: 0x0073, lo: 0x80, hi: 0x81}, + {value: 0x0083, lo: 0x82, hi: 0x9b}, + {value: 0x0043, lo: 0x9c, hi: 0x9c}, + {value: 0x0047, lo: 0x9e, hi: 0x9f}, + {value: 0x004f, lo: 0xa2, hi: 0xa2}, + {value: 0x0055, lo: 0xa5, hi: 0xa6}, + {value: 0x005d, lo: 0xa9, hi: 0xac}, + {value: 0x0067, lo: 0xae, hi: 0xb5}, + {value: 0x0083, lo: 0xb6, hi: 0xb9}, + {value: 0x008d, lo: 0xbb, hi: 0xbb}, + {value: 0x0091, lo: 0xbd, hi: 0xbf}, + // Block 0x8a, offset 0x2ea + {value: 0x0002, lo: 0x04}, + {value: 0x0097, lo: 0x80, hi: 0x83}, + {value: 0x00a1, lo: 0x85, hi: 0x8f}, + {value: 0x0043, lo: 0x90, hi: 0xa9}, + {value: 0x0083, lo: 0xaa, hi: 0xbf}, + // Block 0x8b, offset 0x2ef + {value: 0x0002, lo: 0x08}, + {value: 0x00af, lo: 0x80, hi: 0x83}, + {value: 0x0043, lo: 0x84, hi: 0x85}, + {value: 0x0049, lo: 0x87, hi: 0x8a}, + {value: 0x0055, lo: 0x8d, hi: 0x94}, + {value: 0x0067, lo: 0x96, hi: 0x9c}, + {value: 0x0083, lo: 0x9e, hi: 0xb7}, + {value: 0x0043, lo: 0xb8, hi: 0xb9}, + {value: 0x0049, lo: 0xbb, hi: 0xbe}, + // Block 0x8c, offset 0x2f8 + {value: 0x0002, lo: 0x05}, + {value: 0x0053, lo: 0x80, hi: 0x84}, + {value: 0x005f, lo: 0x86, hi: 0x86}, + {value: 0x0067, lo: 0x8a, hi: 0x90}, + {value: 0x0083, lo: 0x92, hi: 0xab}, + {value: 0x0043, lo: 0xac, hi: 0xbf}, + // Block 0x8d, offset 0x2fe + {value: 0x0002, lo: 0x04}, + {value: 0x006b, lo: 0x80, hi: 0x85}, + {value: 0x0083, lo: 0x86, hi: 0x9f}, + {value: 0x0043, lo: 0xa0, hi: 0xb9}, + {value: 0x0083, lo: 0xba, hi: 0xbf}, + // Block 0x8e, offset 0x303 + {value: 0x0002, lo: 0x03}, + {value: 0x008f, lo: 0x80, hi: 0x93}, + {value: 0x0043, lo: 0x94, hi: 0xad}, + {value: 0x0083, lo: 0xae, hi: 0xbf}, + // Block 0x8f, offset 0x307 + {value: 0x0002, lo: 0x04}, + {value: 0x00a7, lo: 0x80, hi: 0x87}, + {value: 0x0043, lo: 0x88, hi: 0xa1}, + {value: 0x0083, lo: 0xa2, hi: 0xbb}, + {value: 0x0043, lo: 0xbc, hi: 0xbf}, + // Block 0x90, offset 0x30c + {value: 0x0002, lo: 0x03}, + {value: 0x004b, lo: 0x80, hi: 0x95}, + {value: 0x0083, lo: 0x96, hi: 0xaf}, + {value: 0x0043, lo: 0xb0, hi: 0xbf}, + // Block 0x91, offset 0x310 + {value: 0x0003, lo: 0x0f}, + {value: 0x01b8, lo: 0x80, hi: 0x80}, + {value: 0x045f, lo: 0x81, hi: 0x81}, + {value: 0x01bb, lo: 0x82, hi: 0x9a}, + {value: 0x045b, lo: 0x9b, hi: 0x9b}, + {value: 0x01c7, lo: 0x9c, hi: 0x9c}, + {value: 0x01d0, lo: 0x9d, hi: 0x9d}, + {value: 0x01d6, lo: 0x9e, hi: 0x9e}, + {value: 0x01fa, lo: 0x9f, hi: 0x9f}, + {value: 0x01eb, lo: 0xa0, hi: 0xa0}, + {value: 0x01e8, lo: 0xa1, hi: 0xa1}, + {value: 0x0173, lo: 0xa2, hi: 0xb2}, + {value: 0x0188, lo: 0xb3, hi: 0xb3}, + {value: 0x01a6, lo: 0xb4, hi: 0xba}, + {value: 0x045f, lo: 0xbb, hi: 0xbb}, + {value: 0x01bb, lo: 0xbc, hi: 0xbf}, + // Block 0x92, offset 0x320 + {value: 0x0003, lo: 0x0d}, + {value: 0x01c7, lo: 0x80, hi: 0x94}, + {value: 0x045b, lo: 0x95, hi: 0x95}, + {value: 0x01c7, lo: 0x96, hi: 0x96}, + {value: 0x01d0, lo: 0x97, hi: 0x97}, + {value: 0x01d6, lo: 0x98, hi: 0x98}, + {value: 0x01fa, lo: 0x99, hi: 0x99}, + {value: 0x01eb, lo: 0x9a, hi: 0x9a}, + {value: 0x01e8, lo: 0x9b, hi: 0x9b}, + {value: 0x0173, lo: 0x9c, hi: 0xac}, + {value: 0x0188, lo: 0xad, hi: 0xad}, + {value: 0x01a6, lo: 0xae, hi: 0xb4}, + {value: 0x045f, lo: 0xb5, hi: 0xb5}, + {value: 0x01bb, lo: 0xb6, hi: 0xbf}, + // Block 0x93, offset 0x32e + {value: 0x0003, lo: 0x0d}, + {value: 0x01d9, lo: 0x80, hi: 0x8e}, + {value: 0x045b, lo: 0x8f, hi: 0x8f}, + {value: 0x01c7, lo: 0x90, hi: 0x90}, + {value: 0x01d0, lo: 0x91, hi: 0x91}, + {value: 0x01d6, lo: 0x92, hi: 0x92}, + {value: 0x01fa, lo: 0x93, hi: 0x93}, + {value: 0x01eb, lo: 0x94, hi: 0x94}, + {value: 0x01e8, lo: 0x95, hi: 0x95}, + {value: 0x0173, lo: 0x96, hi: 0xa6}, + {value: 0x0188, lo: 0xa7, hi: 0xa7}, + {value: 0x01a6, lo: 0xa8, hi: 0xae}, + {value: 0x045f, lo: 0xaf, hi: 0xaf}, + {value: 0x01bb, lo: 0xb0, hi: 0xbf}, + // Block 0x94, offset 0x33c + {value: 0x0003, lo: 0x0d}, + {value: 0x01eb, lo: 0x80, hi: 0x88}, + {value: 0x045b, lo: 0x89, hi: 0x89}, + {value: 0x01c7, lo: 0x8a, hi: 0x8a}, + {value: 0x01d0, lo: 0x8b, hi: 0x8b}, + {value: 0x01d6, lo: 0x8c, hi: 0x8c}, + {value: 0x01fa, lo: 0x8d, hi: 0x8d}, + {value: 0x01eb, lo: 0x8e, hi: 0x8e}, + {value: 0x01e8, lo: 0x8f, hi: 0x8f}, + {value: 0x0173, lo: 0x90, hi: 0xa0}, + {value: 0x0188, lo: 0xa1, hi: 0xa1}, + {value: 0x01a6, lo: 0xa2, hi: 0xa8}, + {value: 0x045f, lo: 0xa9, hi: 0xa9}, + {value: 0x01bb, lo: 0xaa, hi: 0xbf}, + // Block 0x95, offset 0x34a + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0x80, hi: 0x86}, + {value: 0x8132, lo: 0x88, hi: 0x98}, + {value: 0x8132, lo: 0x9b, hi: 0xa1}, + {value: 0x8132, lo: 0xa3, hi: 0xa4}, + {value: 0x8132, lo: 0xa6, hi: 0xaa}, + // Block 0x96, offset 0x350 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x90, hi: 0x96}, + // Block 0x97, offset 0x352 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x84, hi: 0x89}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x98, offset 0x355 + {value: 0x0002, lo: 0x09}, + {value: 0x0063, lo: 0x80, hi: 0x89}, + {value: 0x1951, lo: 0x8a, hi: 0x8a}, + {value: 0x1981, lo: 0x8b, hi: 0x8b}, + {value: 0x199c, lo: 0x8c, hi: 0x8c}, + {value: 0x19a2, lo: 0x8d, hi: 0x8d}, + {value: 0x1bc0, lo: 0x8e, hi: 0x8e}, + {value: 0x19ae, lo: 0x8f, hi: 0x8f}, + {value: 0x197b, lo: 0xaa, hi: 0xaa}, + {value: 0x197e, lo: 0xab, hi: 0xab}, + // Block 0x99, offset 0x35f + {value: 0x0000, lo: 0x01}, + {value: 0x193f, lo: 0x90, hi: 0x90}, + // Block 0x9a, offset 0x361 + {value: 0x0028, lo: 0x09}, + {value: 0x2862, lo: 0x80, hi: 0x80}, + {value: 0x2826, lo: 0x81, hi: 0x81}, + {value: 0x2830, lo: 0x82, hi: 0x82}, + {value: 0x2844, lo: 0x83, hi: 0x84}, + {value: 0x284e, lo: 0x85, hi: 0x86}, + {value: 0x283a, lo: 0x87, hi: 0x87}, + {value: 0x2858, lo: 0x88, hi: 0x88}, + {value: 0x0b6f, lo: 0x90, hi: 0x90}, + {value: 0x08e7, lo: 0x91, hi: 0x91}, +} + +// recompMap: 7520 bytes (entries only) +var recompMap = map[uint32]rune{ + 0x00410300: 0x00C0, + 0x00410301: 0x00C1, + 0x00410302: 0x00C2, + 0x00410303: 0x00C3, + 0x00410308: 0x00C4, + 0x0041030A: 0x00C5, + 0x00430327: 0x00C7, + 0x00450300: 0x00C8, + 0x00450301: 0x00C9, + 0x00450302: 0x00CA, + 0x00450308: 0x00CB, + 0x00490300: 0x00CC, + 0x00490301: 0x00CD, + 0x00490302: 0x00CE, + 0x00490308: 0x00CF, + 0x004E0303: 0x00D1, + 0x004F0300: 0x00D2, + 0x004F0301: 0x00D3, + 0x004F0302: 0x00D4, + 0x004F0303: 0x00D5, + 0x004F0308: 0x00D6, + 0x00550300: 0x00D9, + 0x00550301: 0x00DA, + 0x00550302: 0x00DB, + 0x00550308: 0x00DC, + 0x00590301: 0x00DD, + 0x00610300: 0x00E0, + 0x00610301: 0x00E1, + 0x00610302: 0x00E2, + 0x00610303: 0x00E3, + 0x00610308: 0x00E4, + 0x0061030A: 0x00E5, + 0x00630327: 0x00E7, + 0x00650300: 0x00E8, + 0x00650301: 0x00E9, + 0x00650302: 0x00EA, + 0x00650308: 0x00EB, + 0x00690300: 0x00EC, + 0x00690301: 0x00ED, + 0x00690302: 0x00EE, + 0x00690308: 0x00EF, + 0x006E0303: 0x00F1, + 0x006F0300: 0x00F2, + 0x006F0301: 0x00F3, + 0x006F0302: 0x00F4, + 0x006F0303: 0x00F5, + 0x006F0308: 0x00F6, + 0x00750300: 0x00F9, + 0x00750301: 0x00FA, + 0x00750302: 0x00FB, + 0x00750308: 0x00FC, + 0x00790301: 0x00FD, + 0x00790308: 0x00FF, + 0x00410304: 0x0100, + 0x00610304: 0x0101, + 0x00410306: 0x0102, + 0x00610306: 0x0103, + 0x00410328: 0x0104, + 0x00610328: 0x0105, + 0x00430301: 0x0106, + 0x00630301: 0x0107, + 0x00430302: 0x0108, + 0x00630302: 0x0109, + 0x00430307: 0x010A, + 0x00630307: 0x010B, + 0x0043030C: 0x010C, + 0x0063030C: 0x010D, + 0x0044030C: 0x010E, + 0x0064030C: 0x010F, + 0x00450304: 0x0112, + 0x00650304: 0x0113, + 0x00450306: 0x0114, + 0x00650306: 0x0115, + 0x00450307: 0x0116, + 0x00650307: 0x0117, + 0x00450328: 0x0118, + 0x00650328: 0x0119, + 0x0045030C: 0x011A, + 0x0065030C: 0x011B, + 0x00470302: 0x011C, + 0x00670302: 0x011D, + 0x00470306: 0x011E, + 0x00670306: 0x011F, + 0x00470307: 0x0120, + 0x00670307: 0x0121, + 0x00470327: 0x0122, + 0x00670327: 0x0123, + 0x00480302: 0x0124, + 0x00680302: 0x0125, + 0x00490303: 0x0128, + 0x00690303: 0x0129, + 0x00490304: 0x012A, + 0x00690304: 0x012B, + 0x00490306: 0x012C, + 0x00690306: 0x012D, + 0x00490328: 0x012E, + 0x00690328: 0x012F, + 0x00490307: 0x0130, + 0x004A0302: 0x0134, + 0x006A0302: 0x0135, + 0x004B0327: 0x0136, + 0x006B0327: 0x0137, + 0x004C0301: 0x0139, + 0x006C0301: 0x013A, + 0x004C0327: 0x013B, + 0x006C0327: 0x013C, + 0x004C030C: 0x013D, + 0x006C030C: 0x013E, + 0x004E0301: 0x0143, + 0x006E0301: 0x0144, + 0x004E0327: 0x0145, + 0x006E0327: 0x0146, + 0x004E030C: 0x0147, + 0x006E030C: 0x0148, + 0x004F0304: 0x014C, + 0x006F0304: 0x014D, + 0x004F0306: 0x014E, + 0x006F0306: 0x014F, + 0x004F030B: 0x0150, + 0x006F030B: 0x0151, + 0x00520301: 0x0154, + 0x00720301: 0x0155, + 0x00520327: 0x0156, + 0x00720327: 0x0157, + 0x0052030C: 0x0158, + 0x0072030C: 0x0159, + 0x00530301: 0x015A, + 0x00730301: 0x015B, + 0x00530302: 0x015C, + 0x00730302: 0x015D, + 0x00530327: 0x015E, + 0x00730327: 0x015F, + 0x0053030C: 0x0160, + 0x0073030C: 0x0161, + 0x00540327: 0x0162, + 0x00740327: 0x0163, + 0x0054030C: 0x0164, + 0x0074030C: 0x0165, + 0x00550303: 0x0168, + 0x00750303: 0x0169, + 0x00550304: 0x016A, + 0x00750304: 0x016B, + 0x00550306: 0x016C, + 0x00750306: 0x016D, + 0x0055030A: 0x016E, + 0x0075030A: 0x016F, + 0x0055030B: 0x0170, + 0x0075030B: 0x0171, + 0x00550328: 0x0172, + 0x00750328: 0x0173, + 0x00570302: 0x0174, + 0x00770302: 0x0175, + 0x00590302: 0x0176, + 0x00790302: 0x0177, + 0x00590308: 0x0178, + 0x005A0301: 0x0179, + 0x007A0301: 0x017A, + 0x005A0307: 0x017B, + 0x007A0307: 0x017C, + 0x005A030C: 0x017D, + 0x007A030C: 0x017E, + 0x004F031B: 0x01A0, + 0x006F031B: 0x01A1, + 0x0055031B: 0x01AF, + 0x0075031B: 0x01B0, + 0x0041030C: 0x01CD, + 0x0061030C: 0x01CE, + 0x0049030C: 0x01CF, + 0x0069030C: 0x01D0, + 0x004F030C: 0x01D1, + 0x006F030C: 0x01D2, + 0x0055030C: 0x01D3, + 0x0075030C: 0x01D4, + 0x00DC0304: 0x01D5, + 0x00FC0304: 0x01D6, + 0x00DC0301: 0x01D7, + 0x00FC0301: 0x01D8, + 0x00DC030C: 0x01D9, + 0x00FC030C: 0x01DA, + 0x00DC0300: 0x01DB, + 0x00FC0300: 0x01DC, + 0x00C40304: 0x01DE, + 0x00E40304: 0x01DF, + 0x02260304: 0x01E0, + 0x02270304: 0x01E1, + 0x00C60304: 0x01E2, + 0x00E60304: 0x01E3, + 0x0047030C: 0x01E6, + 0x0067030C: 0x01E7, + 0x004B030C: 0x01E8, + 0x006B030C: 0x01E9, + 0x004F0328: 0x01EA, + 0x006F0328: 0x01EB, + 0x01EA0304: 0x01EC, + 0x01EB0304: 0x01ED, + 0x01B7030C: 0x01EE, + 0x0292030C: 0x01EF, + 0x006A030C: 0x01F0, + 0x00470301: 0x01F4, + 0x00670301: 0x01F5, + 0x004E0300: 0x01F8, + 0x006E0300: 0x01F9, + 0x00C50301: 0x01FA, + 0x00E50301: 0x01FB, + 0x00C60301: 0x01FC, + 0x00E60301: 0x01FD, + 0x00D80301: 0x01FE, + 0x00F80301: 0x01FF, + 0x0041030F: 0x0200, + 0x0061030F: 0x0201, + 0x00410311: 0x0202, + 0x00610311: 0x0203, + 0x0045030F: 0x0204, + 0x0065030F: 0x0205, + 0x00450311: 0x0206, + 0x00650311: 0x0207, + 0x0049030F: 0x0208, + 0x0069030F: 0x0209, + 0x00490311: 0x020A, + 0x00690311: 0x020B, + 0x004F030F: 0x020C, + 0x006F030F: 0x020D, + 0x004F0311: 0x020E, + 0x006F0311: 0x020F, + 0x0052030F: 0x0210, + 0x0072030F: 0x0211, + 0x00520311: 0x0212, + 0x00720311: 0x0213, + 0x0055030F: 0x0214, + 0x0075030F: 0x0215, + 0x00550311: 0x0216, + 0x00750311: 0x0217, + 0x00530326: 0x0218, + 0x00730326: 0x0219, + 0x00540326: 0x021A, + 0x00740326: 0x021B, + 0x0048030C: 0x021E, + 0x0068030C: 0x021F, + 0x00410307: 0x0226, + 0x00610307: 0x0227, + 0x00450327: 0x0228, + 0x00650327: 0x0229, + 0x00D60304: 0x022A, + 0x00F60304: 0x022B, + 0x00D50304: 0x022C, + 0x00F50304: 0x022D, + 0x004F0307: 0x022E, + 0x006F0307: 0x022F, + 0x022E0304: 0x0230, + 0x022F0304: 0x0231, + 0x00590304: 0x0232, + 0x00790304: 0x0233, + 0x00A80301: 0x0385, + 0x03910301: 0x0386, + 0x03950301: 0x0388, + 0x03970301: 0x0389, + 0x03990301: 0x038A, + 0x039F0301: 0x038C, + 0x03A50301: 0x038E, + 0x03A90301: 0x038F, + 0x03CA0301: 0x0390, + 0x03990308: 0x03AA, + 0x03A50308: 0x03AB, + 0x03B10301: 0x03AC, + 0x03B50301: 0x03AD, + 0x03B70301: 0x03AE, + 0x03B90301: 0x03AF, + 0x03CB0301: 0x03B0, + 0x03B90308: 0x03CA, + 0x03C50308: 0x03CB, + 0x03BF0301: 0x03CC, + 0x03C50301: 0x03CD, + 0x03C90301: 0x03CE, + 0x03D20301: 0x03D3, + 0x03D20308: 0x03D4, + 0x04150300: 0x0400, + 0x04150308: 0x0401, + 0x04130301: 0x0403, + 0x04060308: 0x0407, + 0x041A0301: 0x040C, + 0x04180300: 0x040D, + 0x04230306: 0x040E, + 0x04180306: 0x0419, + 0x04380306: 0x0439, + 0x04350300: 0x0450, + 0x04350308: 0x0451, + 0x04330301: 0x0453, + 0x04560308: 0x0457, + 0x043A0301: 0x045C, + 0x04380300: 0x045D, + 0x04430306: 0x045E, + 0x0474030F: 0x0476, + 0x0475030F: 0x0477, + 0x04160306: 0x04C1, + 0x04360306: 0x04C2, + 0x04100306: 0x04D0, + 0x04300306: 0x04D1, + 0x04100308: 0x04D2, + 0x04300308: 0x04D3, + 0x04150306: 0x04D6, + 0x04350306: 0x04D7, + 0x04D80308: 0x04DA, + 0x04D90308: 0x04DB, + 0x04160308: 0x04DC, + 0x04360308: 0x04DD, + 0x04170308: 0x04DE, + 0x04370308: 0x04DF, + 0x04180304: 0x04E2, + 0x04380304: 0x04E3, + 0x04180308: 0x04E4, + 0x04380308: 0x04E5, + 0x041E0308: 0x04E6, + 0x043E0308: 0x04E7, + 0x04E80308: 0x04EA, + 0x04E90308: 0x04EB, + 0x042D0308: 0x04EC, + 0x044D0308: 0x04ED, + 0x04230304: 0x04EE, + 0x04430304: 0x04EF, + 0x04230308: 0x04F0, + 0x04430308: 0x04F1, + 0x0423030B: 0x04F2, + 0x0443030B: 0x04F3, + 0x04270308: 0x04F4, + 0x04470308: 0x04F5, + 0x042B0308: 0x04F8, + 0x044B0308: 0x04F9, + 0x06270653: 0x0622, + 0x06270654: 0x0623, + 0x06480654: 0x0624, + 0x06270655: 0x0625, + 0x064A0654: 0x0626, + 0x06D50654: 0x06C0, + 0x06C10654: 0x06C2, + 0x06D20654: 0x06D3, + 0x0928093C: 0x0929, + 0x0930093C: 0x0931, + 0x0933093C: 0x0934, + 0x09C709BE: 0x09CB, + 0x09C709D7: 0x09CC, + 0x0B470B56: 0x0B48, + 0x0B470B3E: 0x0B4B, + 0x0B470B57: 0x0B4C, + 0x0B920BD7: 0x0B94, + 0x0BC60BBE: 0x0BCA, + 0x0BC70BBE: 0x0BCB, + 0x0BC60BD7: 0x0BCC, + 0x0C460C56: 0x0C48, + 0x0CBF0CD5: 0x0CC0, + 0x0CC60CD5: 0x0CC7, + 0x0CC60CD6: 0x0CC8, + 0x0CC60CC2: 0x0CCA, + 0x0CCA0CD5: 0x0CCB, + 0x0D460D3E: 0x0D4A, + 0x0D470D3E: 0x0D4B, + 0x0D460D57: 0x0D4C, + 0x0DD90DCA: 0x0DDA, + 0x0DD90DCF: 0x0DDC, + 0x0DDC0DCA: 0x0DDD, + 0x0DD90DDF: 0x0DDE, + 0x1025102E: 0x1026, + 0x1B051B35: 0x1B06, + 0x1B071B35: 0x1B08, + 0x1B091B35: 0x1B0A, + 0x1B0B1B35: 0x1B0C, + 0x1B0D1B35: 0x1B0E, + 0x1B111B35: 0x1B12, + 0x1B3A1B35: 0x1B3B, + 0x1B3C1B35: 0x1B3D, + 0x1B3E1B35: 0x1B40, + 0x1B3F1B35: 0x1B41, + 0x1B421B35: 0x1B43, + 0x00410325: 0x1E00, + 0x00610325: 0x1E01, + 0x00420307: 0x1E02, + 0x00620307: 0x1E03, + 0x00420323: 0x1E04, + 0x00620323: 0x1E05, + 0x00420331: 0x1E06, + 0x00620331: 0x1E07, + 0x00C70301: 0x1E08, + 0x00E70301: 0x1E09, + 0x00440307: 0x1E0A, + 0x00640307: 0x1E0B, + 0x00440323: 0x1E0C, + 0x00640323: 0x1E0D, + 0x00440331: 0x1E0E, + 0x00640331: 0x1E0F, + 0x00440327: 0x1E10, + 0x00640327: 0x1E11, + 0x0044032D: 0x1E12, + 0x0064032D: 0x1E13, + 0x01120300: 0x1E14, + 0x01130300: 0x1E15, + 0x01120301: 0x1E16, + 0x01130301: 0x1E17, + 0x0045032D: 0x1E18, + 0x0065032D: 0x1E19, + 0x00450330: 0x1E1A, + 0x00650330: 0x1E1B, + 0x02280306: 0x1E1C, + 0x02290306: 0x1E1D, + 0x00460307: 0x1E1E, + 0x00660307: 0x1E1F, + 0x00470304: 0x1E20, + 0x00670304: 0x1E21, + 0x00480307: 0x1E22, + 0x00680307: 0x1E23, + 0x00480323: 0x1E24, + 0x00680323: 0x1E25, + 0x00480308: 0x1E26, + 0x00680308: 0x1E27, + 0x00480327: 0x1E28, + 0x00680327: 0x1E29, + 0x0048032E: 0x1E2A, + 0x0068032E: 0x1E2B, + 0x00490330: 0x1E2C, + 0x00690330: 0x1E2D, + 0x00CF0301: 0x1E2E, + 0x00EF0301: 0x1E2F, + 0x004B0301: 0x1E30, + 0x006B0301: 0x1E31, + 0x004B0323: 0x1E32, + 0x006B0323: 0x1E33, + 0x004B0331: 0x1E34, + 0x006B0331: 0x1E35, + 0x004C0323: 0x1E36, + 0x006C0323: 0x1E37, + 0x1E360304: 0x1E38, + 0x1E370304: 0x1E39, + 0x004C0331: 0x1E3A, + 0x006C0331: 0x1E3B, + 0x004C032D: 0x1E3C, + 0x006C032D: 0x1E3D, + 0x004D0301: 0x1E3E, + 0x006D0301: 0x1E3F, + 0x004D0307: 0x1E40, + 0x006D0307: 0x1E41, + 0x004D0323: 0x1E42, + 0x006D0323: 0x1E43, + 0x004E0307: 0x1E44, + 0x006E0307: 0x1E45, + 0x004E0323: 0x1E46, + 0x006E0323: 0x1E47, + 0x004E0331: 0x1E48, + 0x006E0331: 0x1E49, + 0x004E032D: 0x1E4A, + 0x006E032D: 0x1E4B, + 0x00D50301: 0x1E4C, + 0x00F50301: 0x1E4D, + 0x00D50308: 0x1E4E, + 0x00F50308: 0x1E4F, + 0x014C0300: 0x1E50, + 0x014D0300: 0x1E51, + 0x014C0301: 0x1E52, + 0x014D0301: 0x1E53, + 0x00500301: 0x1E54, + 0x00700301: 0x1E55, + 0x00500307: 0x1E56, + 0x00700307: 0x1E57, + 0x00520307: 0x1E58, + 0x00720307: 0x1E59, + 0x00520323: 0x1E5A, + 0x00720323: 0x1E5B, + 0x1E5A0304: 0x1E5C, + 0x1E5B0304: 0x1E5D, + 0x00520331: 0x1E5E, + 0x00720331: 0x1E5F, + 0x00530307: 0x1E60, + 0x00730307: 0x1E61, + 0x00530323: 0x1E62, + 0x00730323: 0x1E63, + 0x015A0307: 0x1E64, + 0x015B0307: 0x1E65, + 0x01600307: 0x1E66, + 0x01610307: 0x1E67, + 0x1E620307: 0x1E68, + 0x1E630307: 0x1E69, + 0x00540307: 0x1E6A, + 0x00740307: 0x1E6B, + 0x00540323: 0x1E6C, + 0x00740323: 0x1E6D, + 0x00540331: 0x1E6E, + 0x00740331: 0x1E6F, + 0x0054032D: 0x1E70, + 0x0074032D: 0x1E71, + 0x00550324: 0x1E72, + 0x00750324: 0x1E73, + 0x00550330: 0x1E74, + 0x00750330: 0x1E75, + 0x0055032D: 0x1E76, + 0x0075032D: 0x1E77, + 0x01680301: 0x1E78, + 0x01690301: 0x1E79, + 0x016A0308: 0x1E7A, + 0x016B0308: 0x1E7B, + 0x00560303: 0x1E7C, + 0x00760303: 0x1E7D, + 0x00560323: 0x1E7E, + 0x00760323: 0x1E7F, + 0x00570300: 0x1E80, + 0x00770300: 0x1E81, + 0x00570301: 0x1E82, + 0x00770301: 0x1E83, + 0x00570308: 0x1E84, + 0x00770308: 0x1E85, + 0x00570307: 0x1E86, + 0x00770307: 0x1E87, + 0x00570323: 0x1E88, + 0x00770323: 0x1E89, + 0x00580307: 0x1E8A, + 0x00780307: 0x1E8B, + 0x00580308: 0x1E8C, + 0x00780308: 0x1E8D, + 0x00590307: 0x1E8E, + 0x00790307: 0x1E8F, + 0x005A0302: 0x1E90, + 0x007A0302: 0x1E91, + 0x005A0323: 0x1E92, + 0x007A0323: 0x1E93, + 0x005A0331: 0x1E94, + 0x007A0331: 0x1E95, + 0x00680331: 0x1E96, + 0x00740308: 0x1E97, + 0x0077030A: 0x1E98, + 0x0079030A: 0x1E99, + 0x017F0307: 0x1E9B, + 0x00410323: 0x1EA0, + 0x00610323: 0x1EA1, + 0x00410309: 0x1EA2, + 0x00610309: 0x1EA3, + 0x00C20301: 0x1EA4, + 0x00E20301: 0x1EA5, + 0x00C20300: 0x1EA6, + 0x00E20300: 0x1EA7, + 0x00C20309: 0x1EA8, + 0x00E20309: 0x1EA9, + 0x00C20303: 0x1EAA, + 0x00E20303: 0x1EAB, + 0x1EA00302: 0x1EAC, + 0x1EA10302: 0x1EAD, + 0x01020301: 0x1EAE, + 0x01030301: 0x1EAF, + 0x01020300: 0x1EB0, + 0x01030300: 0x1EB1, + 0x01020309: 0x1EB2, + 0x01030309: 0x1EB3, + 0x01020303: 0x1EB4, + 0x01030303: 0x1EB5, + 0x1EA00306: 0x1EB6, + 0x1EA10306: 0x1EB7, + 0x00450323: 0x1EB8, + 0x00650323: 0x1EB9, + 0x00450309: 0x1EBA, + 0x00650309: 0x1EBB, + 0x00450303: 0x1EBC, + 0x00650303: 0x1EBD, + 0x00CA0301: 0x1EBE, + 0x00EA0301: 0x1EBF, + 0x00CA0300: 0x1EC0, + 0x00EA0300: 0x1EC1, + 0x00CA0309: 0x1EC2, + 0x00EA0309: 0x1EC3, + 0x00CA0303: 0x1EC4, + 0x00EA0303: 0x1EC5, + 0x1EB80302: 0x1EC6, + 0x1EB90302: 0x1EC7, + 0x00490309: 0x1EC8, + 0x00690309: 0x1EC9, + 0x00490323: 0x1ECA, + 0x00690323: 0x1ECB, + 0x004F0323: 0x1ECC, + 0x006F0323: 0x1ECD, + 0x004F0309: 0x1ECE, + 0x006F0309: 0x1ECF, + 0x00D40301: 0x1ED0, + 0x00F40301: 0x1ED1, + 0x00D40300: 0x1ED2, + 0x00F40300: 0x1ED3, + 0x00D40309: 0x1ED4, + 0x00F40309: 0x1ED5, + 0x00D40303: 0x1ED6, + 0x00F40303: 0x1ED7, + 0x1ECC0302: 0x1ED8, + 0x1ECD0302: 0x1ED9, + 0x01A00301: 0x1EDA, + 0x01A10301: 0x1EDB, + 0x01A00300: 0x1EDC, + 0x01A10300: 0x1EDD, + 0x01A00309: 0x1EDE, + 0x01A10309: 0x1EDF, + 0x01A00303: 0x1EE0, + 0x01A10303: 0x1EE1, + 0x01A00323: 0x1EE2, + 0x01A10323: 0x1EE3, + 0x00550323: 0x1EE4, + 0x00750323: 0x1EE5, + 0x00550309: 0x1EE6, + 0x00750309: 0x1EE7, + 0x01AF0301: 0x1EE8, + 0x01B00301: 0x1EE9, + 0x01AF0300: 0x1EEA, + 0x01B00300: 0x1EEB, + 0x01AF0309: 0x1EEC, + 0x01B00309: 0x1EED, + 0x01AF0303: 0x1EEE, + 0x01B00303: 0x1EEF, + 0x01AF0323: 0x1EF0, + 0x01B00323: 0x1EF1, + 0x00590300: 0x1EF2, + 0x00790300: 0x1EF3, + 0x00590323: 0x1EF4, + 0x00790323: 0x1EF5, + 0x00590309: 0x1EF6, + 0x00790309: 0x1EF7, + 0x00590303: 0x1EF8, + 0x00790303: 0x1EF9, + 0x03B10313: 0x1F00, + 0x03B10314: 0x1F01, + 0x1F000300: 0x1F02, + 0x1F010300: 0x1F03, + 0x1F000301: 0x1F04, + 0x1F010301: 0x1F05, + 0x1F000342: 0x1F06, + 0x1F010342: 0x1F07, + 0x03910313: 0x1F08, + 0x03910314: 0x1F09, + 0x1F080300: 0x1F0A, + 0x1F090300: 0x1F0B, + 0x1F080301: 0x1F0C, + 0x1F090301: 0x1F0D, + 0x1F080342: 0x1F0E, + 0x1F090342: 0x1F0F, + 0x03B50313: 0x1F10, + 0x03B50314: 0x1F11, + 0x1F100300: 0x1F12, + 0x1F110300: 0x1F13, + 0x1F100301: 0x1F14, + 0x1F110301: 0x1F15, + 0x03950313: 0x1F18, + 0x03950314: 0x1F19, + 0x1F180300: 0x1F1A, + 0x1F190300: 0x1F1B, + 0x1F180301: 0x1F1C, + 0x1F190301: 0x1F1D, + 0x03B70313: 0x1F20, + 0x03B70314: 0x1F21, + 0x1F200300: 0x1F22, + 0x1F210300: 0x1F23, + 0x1F200301: 0x1F24, + 0x1F210301: 0x1F25, + 0x1F200342: 0x1F26, + 0x1F210342: 0x1F27, + 0x03970313: 0x1F28, + 0x03970314: 0x1F29, + 0x1F280300: 0x1F2A, + 0x1F290300: 0x1F2B, + 0x1F280301: 0x1F2C, + 0x1F290301: 0x1F2D, + 0x1F280342: 0x1F2E, + 0x1F290342: 0x1F2F, + 0x03B90313: 0x1F30, + 0x03B90314: 0x1F31, + 0x1F300300: 0x1F32, + 0x1F310300: 0x1F33, + 0x1F300301: 0x1F34, + 0x1F310301: 0x1F35, + 0x1F300342: 0x1F36, + 0x1F310342: 0x1F37, + 0x03990313: 0x1F38, + 0x03990314: 0x1F39, + 0x1F380300: 0x1F3A, + 0x1F390300: 0x1F3B, + 0x1F380301: 0x1F3C, + 0x1F390301: 0x1F3D, + 0x1F380342: 0x1F3E, + 0x1F390342: 0x1F3F, + 0x03BF0313: 0x1F40, + 0x03BF0314: 0x1F41, + 0x1F400300: 0x1F42, + 0x1F410300: 0x1F43, + 0x1F400301: 0x1F44, + 0x1F410301: 0x1F45, + 0x039F0313: 0x1F48, + 0x039F0314: 0x1F49, + 0x1F480300: 0x1F4A, + 0x1F490300: 0x1F4B, + 0x1F480301: 0x1F4C, + 0x1F490301: 0x1F4D, + 0x03C50313: 0x1F50, + 0x03C50314: 0x1F51, + 0x1F500300: 0x1F52, + 0x1F510300: 0x1F53, + 0x1F500301: 0x1F54, + 0x1F510301: 0x1F55, + 0x1F500342: 0x1F56, + 0x1F510342: 0x1F57, + 0x03A50314: 0x1F59, + 0x1F590300: 0x1F5B, + 0x1F590301: 0x1F5D, + 0x1F590342: 0x1F5F, + 0x03C90313: 0x1F60, + 0x03C90314: 0x1F61, + 0x1F600300: 0x1F62, + 0x1F610300: 0x1F63, + 0x1F600301: 0x1F64, + 0x1F610301: 0x1F65, + 0x1F600342: 0x1F66, + 0x1F610342: 0x1F67, + 0x03A90313: 0x1F68, + 0x03A90314: 0x1F69, + 0x1F680300: 0x1F6A, + 0x1F690300: 0x1F6B, + 0x1F680301: 0x1F6C, + 0x1F690301: 0x1F6D, + 0x1F680342: 0x1F6E, + 0x1F690342: 0x1F6F, + 0x03B10300: 0x1F70, + 0x03B50300: 0x1F72, + 0x03B70300: 0x1F74, + 0x03B90300: 0x1F76, + 0x03BF0300: 0x1F78, + 0x03C50300: 0x1F7A, + 0x03C90300: 0x1F7C, + 0x1F000345: 0x1F80, + 0x1F010345: 0x1F81, + 0x1F020345: 0x1F82, + 0x1F030345: 0x1F83, + 0x1F040345: 0x1F84, + 0x1F050345: 0x1F85, + 0x1F060345: 0x1F86, + 0x1F070345: 0x1F87, + 0x1F080345: 0x1F88, + 0x1F090345: 0x1F89, + 0x1F0A0345: 0x1F8A, + 0x1F0B0345: 0x1F8B, + 0x1F0C0345: 0x1F8C, + 0x1F0D0345: 0x1F8D, + 0x1F0E0345: 0x1F8E, + 0x1F0F0345: 0x1F8F, + 0x1F200345: 0x1F90, + 0x1F210345: 0x1F91, + 0x1F220345: 0x1F92, + 0x1F230345: 0x1F93, + 0x1F240345: 0x1F94, + 0x1F250345: 0x1F95, + 0x1F260345: 0x1F96, + 0x1F270345: 0x1F97, + 0x1F280345: 0x1F98, + 0x1F290345: 0x1F99, + 0x1F2A0345: 0x1F9A, + 0x1F2B0345: 0x1F9B, + 0x1F2C0345: 0x1F9C, + 0x1F2D0345: 0x1F9D, + 0x1F2E0345: 0x1F9E, + 0x1F2F0345: 0x1F9F, + 0x1F600345: 0x1FA0, + 0x1F610345: 0x1FA1, + 0x1F620345: 0x1FA2, + 0x1F630345: 0x1FA3, + 0x1F640345: 0x1FA4, + 0x1F650345: 0x1FA5, + 0x1F660345: 0x1FA6, + 0x1F670345: 0x1FA7, + 0x1F680345: 0x1FA8, + 0x1F690345: 0x1FA9, + 0x1F6A0345: 0x1FAA, + 0x1F6B0345: 0x1FAB, + 0x1F6C0345: 0x1FAC, + 0x1F6D0345: 0x1FAD, + 0x1F6E0345: 0x1FAE, + 0x1F6F0345: 0x1FAF, + 0x03B10306: 0x1FB0, + 0x03B10304: 0x1FB1, + 0x1F700345: 0x1FB2, + 0x03B10345: 0x1FB3, + 0x03AC0345: 0x1FB4, + 0x03B10342: 0x1FB6, + 0x1FB60345: 0x1FB7, + 0x03910306: 0x1FB8, + 0x03910304: 0x1FB9, + 0x03910300: 0x1FBA, + 0x03910345: 0x1FBC, + 0x00A80342: 0x1FC1, + 0x1F740345: 0x1FC2, + 0x03B70345: 0x1FC3, + 0x03AE0345: 0x1FC4, + 0x03B70342: 0x1FC6, + 0x1FC60345: 0x1FC7, + 0x03950300: 0x1FC8, + 0x03970300: 0x1FCA, + 0x03970345: 0x1FCC, + 0x1FBF0300: 0x1FCD, + 0x1FBF0301: 0x1FCE, + 0x1FBF0342: 0x1FCF, + 0x03B90306: 0x1FD0, + 0x03B90304: 0x1FD1, + 0x03CA0300: 0x1FD2, + 0x03B90342: 0x1FD6, + 0x03CA0342: 0x1FD7, + 0x03990306: 0x1FD8, + 0x03990304: 0x1FD9, + 0x03990300: 0x1FDA, + 0x1FFE0300: 0x1FDD, + 0x1FFE0301: 0x1FDE, + 0x1FFE0342: 0x1FDF, + 0x03C50306: 0x1FE0, + 0x03C50304: 0x1FE1, + 0x03CB0300: 0x1FE2, + 0x03C10313: 0x1FE4, + 0x03C10314: 0x1FE5, + 0x03C50342: 0x1FE6, + 0x03CB0342: 0x1FE7, + 0x03A50306: 0x1FE8, + 0x03A50304: 0x1FE9, + 0x03A50300: 0x1FEA, + 0x03A10314: 0x1FEC, + 0x00A80300: 0x1FED, + 0x1F7C0345: 0x1FF2, + 0x03C90345: 0x1FF3, + 0x03CE0345: 0x1FF4, + 0x03C90342: 0x1FF6, + 0x1FF60345: 0x1FF7, + 0x039F0300: 0x1FF8, + 0x03A90300: 0x1FFA, + 0x03A90345: 0x1FFC, + 0x21900338: 0x219A, + 0x21920338: 0x219B, + 0x21940338: 0x21AE, + 0x21D00338: 0x21CD, + 0x21D40338: 0x21CE, + 0x21D20338: 0x21CF, + 0x22030338: 0x2204, + 0x22080338: 0x2209, + 0x220B0338: 0x220C, + 0x22230338: 0x2224, + 0x22250338: 0x2226, + 0x223C0338: 0x2241, + 0x22430338: 0x2244, + 0x22450338: 0x2247, + 0x22480338: 0x2249, + 0x003D0338: 0x2260, + 0x22610338: 0x2262, + 0x224D0338: 0x226D, + 0x003C0338: 0x226E, + 0x003E0338: 0x226F, + 0x22640338: 0x2270, + 0x22650338: 0x2271, + 0x22720338: 0x2274, + 0x22730338: 0x2275, + 0x22760338: 0x2278, + 0x22770338: 0x2279, + 0x227A0338: 0x2280, + 0x227B0338: 0x2281, + 0x22820338: 0x2284, + 0x22830338: 0x2285, + 0x22860338: 0x2288, + 0x22870338: 0x2289, + 0x22A20338: 0x22AC, + 0x22A80338: 0x22AD, + 0x22A90338: 0x22AE, + 0x22AB0338: 0x22AF, + 0x227C0338: 0x22E0, + 0x227D0338: 0x22E1, + 0x22910338: 0x22E2, + 0x22920338: 0x22E3, + 0x22B20338: 0x22EA, + 0x22B30338: 0x22EB, + 0x22B40338: 0x22EC, + 0x22B50338: 0x22ED, + 0x304B3099: 0x304C, + 0x304D3099: 0x304E, + 0x304F3099: 0x3050, + 0x30513099: 0x3052, + 0x30533099: 0x3054, + 0x30553099: 0x3056, + 0x30573099: 0x3058, + 0x30593099: 0x305A, + 0x305B3099: 0x305C, + 0x305D3099: 0x305E, + 0x305F3099: 0x3060, + 0x30613099: 0x3062, + 0x30643099: 0x3065, + 0x30663099: 0x3067, + 0x30683099: 0x3069, + 0x306F3099: 0x3070, + 0x306F309A: 0x3071, + 0x30723099: 0x3073, + 0x3072309A: 0x3074, + 0x30753099: 0x3076, + 0x3075309A: 0x3077, + 0x30783099: 0x3079, + 0x3078309A: 0x307A, + 0x307B3099: 0x307C, + 0x307B309A: 0x307D, + 0x30463099: 0x3094, + 0x309D3099: 0x309E, + 0x30AB3099: 0x30AC, + 0x30AD3099: 0x30AE, + 0x30AF3099: 0x30B0, + 0x30B13099: 0x30B2, + 0x30B33099: 0x30B4, + 0x30B53099: 0x30B6, + 0x30B73099: 0x30B8, + 0x30B93099: 0x30BA, + 0x30BB3099: 0x30BC, + 0x30BD3099: 0x30BE, + 0x30BF3099: 0x30C0, + 0x30C13099: 0x30C2, + 0x30C43099: 0x30C5, + 0x30C63099: 0x30C7, + 0x30C83099: 0x30C9, + 0x30CF3099: 0x30D0, + 0x30CF309A: 0x30D1, + 0x30D23099: 0x30D3, + 0x30D2309A: 0x30D4, + 0x30D53099: 0x30D6, + 0x30D5309A: 0x30D7, + 0x30D83099: 0x30D9, + 0x30D8309A: 0x30DA, + 0x30DB3099: 0x30DC, + 0x30DB309A: 0x30DD, + 0x30A63099: 0x30F4, + 0x30EF3099: 0x30F7, + 0x30F03099: 0x30F8, + 0x30F13099: 0x30F9, + 0x30F23099: 0x30FA, + 0x30FD3099: 0x30FE, + 0x109910BA: 0x1109A, + 0x109B10BA: 0x1109C, + 0x10A510BA: 0x110AB, + 0x11311127: 0x1112E, + 0x11321127: 0x1112F, + 0x1347133E: 0x1134B, + 0x13471357: 0x1134C, + 0x14B914BA: 0x114BB, + 0x14B914B0: 0x114BC, + 0x14B914BD: 0x114BE, + 0x15B815AF: 0x115BA, + 0x15B915AF: 0x115BB, +} + +// Total size of tables: 53KB (54006 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/transform.go b/vendor/golang.org/x/text/unicode/norm/transform.go new file mode 100644 index 0000000..8589067 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/transform.go @@ -0,0 +1,88 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import ( + "unicode/utf8" + + "golang.org/x/text/transform" +) + +// Reset implements the Reset method of the transform.Transformer interface. +func (Form) Reset() {} + +// Transform implements the Transform method of the transform.Transformer +// interface. It may need to write segments of up to MaxSegmentSize at once. +// Users should either catch ErrShortDst and allow dst to grow or have dst be at +// least of size MaxTransformChunkSize to be guaranteed of progress. +func (f Form) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := 0 + // Cap the maximum number of src bytes to check. + b := src + eof := atEOF + if ns := len(dst); ns < len(b) { + err = transform.ErrShortDst + eof = false + b = b[:ns] + } + i, ok := formTable[f].quickSpan(inputBytes(b), n, len(b), eof) + n += copy(dst[n:], b[n:i]) + if !ok { + nDst, nSrc, err = f.transform(dst[n:], src[n:], atEOF) + return nDst + n, nSrc + n, err + } + if n < len(src) && !atEOF { + err = transform.ErrShortSrc + } + return n, n, err +} + +func flushTransform(rb *reorderBuffer) bool { + // Write out (must fully fit in dst, or else it is a ErrShortDst). + if len(rb.out) < rb.nrune*utf8.UTFMax { + return false + } + rb.out = rb.out[rb.flushCopy(rb.out):] + return true +} + +var errs = []error{nil, transform.ErrShortDst, transform.ErrShortSrc} + +// transform implements the transform.Transformer interface. It is only called +// when quickSpan does not pass for a given string. +func (f Form) transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + // TODO: get rid of reorderBuffer. See CL 23460044. + rb := reorderBuffer{} + rb.init(f, src) + for { + // Load segment into reorder buffer. + rb.setFlusher(dst[nDst:], flushTransform) + end := decomposeSegment(&rb, nSrc, atEOF) + if end < 0 { + return nDst, nSrc, errs[-end] + } + nDst = len(dst) - len(rb.out) + nSrc = end + + // Next quickSpan. + end = rb.nsrc + eof := atEOF + if n := nSrc + len(dst) - nDst; n < end { + err = transform.ErrShortDst + end = n + eof = false + } + end, ok := rb.f.quickSpan(rb.src, nSrc, end, eof) + n := copy(dst[nDst:], rb.src.bytes[nSrc:end]) + nSrc += n + nDst += n + if ok { + if n < rb.nsrc && !atEOF { + err = transform.ErrShortSrc + } + return nDst, nSrc, err + } + } +} diff --git a/vendor/golang.org/x/text/unicode/norm/transform_test.go b/vendor/golang.org/x/text/unicode/norm/transform_test.go new file mode 100644 index 0000000..987d680 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/transform_test.go @@ -0,0 +1,101 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import ( + "fmt" + "testing" + + "golang.org/x/text/transform" +) + +func TestTransform(t *testing.T) { + tests := []struct { + f Form + in, out string + eof bool + dstSize int + err error + }{ + {NFC, "ab", "ab", true, 2, nil}, + {NFC, "qx", "qx", true, 2, nil}, + {NFD, "qx", "qx", true, 2, nil}, + {NFC, "", "", true, 1, nil}, + {NFD, "", "", true, 1, nil}, + {NFC, "", "", false, 1, nil}, + {NFD, "", "", false, 1, nil}, + + // Normalized segment does not fit in destination. + {NFD, "ö", "", true, 1, transform.ErrShortDst}, + {NFD, "ö", "", true, 2, transform.ErrShortDst}, + + // As an artifact of the algorithm, only full segments are written. + // This is not strictly required, and some bytes could be written. + // In practice, for Transform to not block, the destination buffer + // should be at least MaxSegmentSize to work anyway and these edge + // conditions will be relatively rare. + {NFC, "ab", "", true, 1, transform.ErrShortDst}, + // This is even true for inert runes. + {NFC, "qx", "", true, 1, transform.ErrShortDst}, + {NFC, "a\u0300abc", "\u00e0a", true, 4, transform.ErrShortDst}, + + // We cannot write a segment if succesive runes could still change the result. + {NFD, "ö", "", false, 3, transform.ErrShortSrc}, + {NFC, "a\u0300", "", false, 4, transform.ErrShortSrc}, + {NFD, "a\u0300", "", false, 4, transform.ErrShortSrc}, + {NFC, "ö", "", false, 3, transform.ErrShortSrc}, + + {NFC, "a\u0300", "", true, 1, transform.ErrShortDst}, + // Theoretically could fit, but won't due to simplified checks. + {NFC, "a\u0300", "", true, 2, transform.ErrShortDst}, + {NFC, "a\u0300", "", true, 3, transform.ErrShortDst}, + {NFC, "a\u0300", "\u00e0", true, 4, nil}, + + {NFD, "öa\u0300", "o\u0308", false, 8, transform.ErrShortSrc}, + {NFD, "öa\u0300ö", "o\u0308a\u0300", true, 8, transform.ErrShortDst}, + {NFD, "öa\u0300ö", "o\u0308a\u0300", false, 12, transform.ErrShortSrc}, + + // Illegal input is copied verbatim. + {NFD, "\xbd\xb2=\xbc ", "\xbd\xb2=\xbc ", true, 8, nil}, + } + b := make([]byte, 100) + for i, tt := range tests { + nDst, _, err := tt.f.Transform(b[:tt.dstSize], []byte(tt.in), tt.eof) + out := string(b[:nDst]) + if out != tt.out || err != tt.err { + t.Errorf("%d: was %+q (%v); want %+q (%v)", i, out, err, tt.out, tt.err) + } + if want := tt.f.String(tt.in)[:nDst]; want != out { + t.Errorf("%d: incorect normalization: was %+q; want %+q", i, out, want) + } + } +} + +var transBufSizes = []int{ + MaxTransformChunkSize, + 3 * MaxTransformChunkSize / 2, + 2 * MaxTransformChunkSize, + 3 * MaxTransformChunkSize, + 100 * MaxTransformChunkSize, +} + +func doTransNorm(f Form, buf []byte, b []byte) []byte { + acc := []byte{} + for p := 0; p < len(b); { + nd, ns, _ := f.Transform(buf[:], b[p:], true) + p += ns + acc = append(acc, buf[:nd]...) + } + return acc +} + +func TestTransformNorm(t *testing.T) { + for _, sz := range transBufSizes { + buf := make([]byte, sz) + runNormTests(t, fmt.Sprintf("Transform:%d", sz), func(f Form, out []byte, s string) []byte { + return doTransNorm(f, buf, append(out, s...)) + }) + } +} diff --git a/vendor/golang.org/x/text/unicode/norm/trie.go b/vendor/golang.org/x/text/unicode/norm/trie.go new file mode 100644 index 0000000..423386b --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/trie.go @@ -0,0 +1,54 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +type valueRange struct { + value uint16 // header: value:stride + lo, hi byte // header: lo:n +} + +type sparseBlocks struct { + values []valueRange + offset []uint16 +} + +var nfcSparse = sparseBlocks{ + values: nfcSparseValues[:], + offset: nfcSparseOffset[:], +} + +var nfkcSparse = sparseBlocks{ + values: nfkcSparseValues[:], + offset: nfkcSparseOffset[:], +} + +var ( + nfcData = newNfcTrie(0) + nfkcData = newNfkcTrie(0) +) + +// lookupValue determines the type of block n and looks up the value for b. +// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block +// is a list of ranges with an accompanying value. Given a matching range r, +// the value for b is by r.value + (b - r.lo) * stride. +func (t *sparseBlocks) lookup(n uint32, b byte) uint16 { + offset := t.offset[n] + header := t.values[offset] + lo := offset + 1 + hi := lo + uint16(header.lo) + for lo < hi { + m := lo + (hi-lo)/2 + r := t.values[m] + if r.lo <= b && b <= r.hi { + return r.value + uint16(b-r.lo)*header.value + } + if b < r.lo { + hi = m + } else { + lo = m + 1 + } + } + return 0 +} diff --git a/vendor/golang.org/x/text/unicode/norm/triegen.go b/vendor/golang.org/x/text/unicode/norm/triegen.go new file mode 100644 index 0000000..45d7119 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/triegen.go @@ -0,0 +1,117 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// Trie table generator. +// Used by make*tables tools to generate a go file with trie data structures +// for mapping UTF-8 to a 16-bit value. All but the last byte in a UTF-8 byte +// sequence are used to lookup offsets in the index table to be used for the +// next byte. The last byte is used to index into a table with 16-bit values. + +package main + +import ( + "fmt" + "io" +) + +const maxSparseEntries = 16 + +type normCompacter struct { + sparseBlocks [][]uint64 + sparseOffset []uint16 + sparseCount int + name string +} + +func mostFrequentStride(a []uint64) int { + counts := make(map[int]int) + var v int + for _, x := range a { + if stride := int(x) - v; v != 0 && stride >= 0 { + counts[stride]++ + } + v = int(x) + } + var maxs, maxc int + for stride, cnt := range counts { + if cnt > maxc || (cnt == maxc && stride < maxs) { + maxs, maxc = stride, cnt + } + } + return maxs +} + +func countSparseEntries(a []uint64) int { + stride := mostFrequentStride(a) + var v, count int + for _, tv := range a { + if int(tv)-v != stride { + if tv != 0 { + count++ + } + } + v = int(tv) + } + return count +} + +func (c *normCompacter) Size(v []uint64) (sz int, ok bool) { + if n := countSparseEntries(v); n <= maxSparseEntries { + return (n+1)*4 + 2, true + } + return 0, false +} + +func (c *normCompacter) Store(v []uint64) uint32 { + h := uint32(len(c.sparseOffset)) + c.sparseBlocks = append(c.sparseBlocks, v) + c.sparseOffset = append(c.sparseOffset, uint16(c.sparseCount)) + c.sparseCount += countSparseEntries(v) + 1 + return h +} + +func (c *normCompacter) Handler() string { + return c.name + "Sparse.lookup" +} + +func (c *normCompacter) Print(w io.Writer) (retErr error) { + p := func(f string, x ...interface{}) { + if _, err := fmt.Fprintf(w, f, x...); retErr == nil && err != nil { + retErr = err + } + } + + ls := len(c.sparseBlocks) + p("// %sSparseOffset: %d entries, %d bytes\n", c.name, ls, ls*2) + p("var %sSparseOffset = %#v\n\n", c.name, c.sparseOffset) + + ns := c.sparseCount + p("// %sSparseValues: %d entries, %d bytes\n", c.name, ns, ns*4) + p("var %sSparseValues = [%d]valueRange {", c.name, ns) + for i, b := range c.sparseBlocks { + p("\n// Block %#x, offset %#x", i, c.sparseOffset[i]) + var v int + stride := mostFrequentStride(b) + n := countSparseEntries(b) + p("\n{value:%#04x,lo:%#02x},", stride, uint8(n)) + for i, nv := range b { + if int(nv)-v != stride { + if v != 0 { + p(",hi:%#02x},", 0x80+i-1) + } + if nv != 0 { + p("\n{value:%#04x,lo:%#02x", nv, 0x80+i) + } + } + v = int(nv) + } + if v != 0 { + p(",hi:%#02x},", 0x80+len(b)-1) + } + } + p("\n}\n\n") + return +} diff --git a/vendor/golang.org/x/text/unicode/norm/ucd_test.go b/vendor/golang.org/x/text/unicode/norm/ucd_test.go new file mode 100644 index 0000000..29205a6 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/ucd_test.go @@ -0,0 +1,275 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import ( + "bufio" + "bytes" + "fmt" + "regexp" + "runtime" + "strconv" + "strings" + "sync" + "testing" + "time" + "unicode/utf8" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" +) + +var once sync.Once + +func skipShort(t *testing.T) { + testtext.SkipIfNotLong(t) + + once.Do(func() { loadTestData(t) }) +} + +// This regression test runs the test set in NormalizationTest.txt +// (taken from http://www.unicode.org/Public/<unicode.Version>/ucd/). +// +// NormalizationTest.txt has form: +// @Part0 # Specific cases +// # +// 1E0A;1E0A;0044 0307;1E0A;0044 0307; # (Ḋ; Ḋ; D◌̇; Ḋ; D◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE +// 1E0C;1E0C;0044 0323;1E0C;0044 0323; # (Ḍ; Ḍ; D◌̣; Ḍ; D◌̣; ) LATIN CAPITAL LETTER D WITH DOT BELOW +// +// Each test has 5 columns (c1, c2, c3, c4, c5), where +// (c1, c2, c3, c4, c5) == (c1, NFC(c1), NFD(c1), NFKC(c1), NFKD(c1)) +// +// CONFORMANCE: +// 1. The following invariants must be true for all conformant implementations +// +// NFC +// c2 == NFC(c1) == NFC(c2) == NFC(c3) +// c4 == NFC(c4) == NFC(c5) +// +// NFD +// c3 == NFD(c1) == NFD(c2) == NFD(c3) +// c5 == NFD(c4) == NFD(c5) +// +// NFKC +// c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5) +// +// NFKD +// c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5) +// +// 2. For every code point X assigned in this version of Unicode that is not +// specifically listed in Part 1, the following invariants must be true +// for all conformant implementations: +// +// X == NFC(X) == NFD(X) == NFKC(X) == NFKD(X) +// + +// Column types. +const ( + cRaw = iota + cNFC + cNFD + cNFKC + cNFKD + cMaxColumns +) + +// Holds data from NormalizationTest.txt +var part []Part + +type Part struct { + name string + number int + tests []Test +} + +type Test struct { + name string + partnr int + number int + r rune // used for character by character test + cols [cMaxColumns]string // Each has 5 entries, see below. +} + +func (t Test) Name() string { + if t.number < 0 { + return part[t.partnr].name + } + return fmt.Sprintf("%s:%d", part[t.partnr].name, t.number) +} + +var partRe = regexp.MustCompile(`@Part(\d) # (.*)$`) +var testRe = regexp.MustCompile(`^` + strings.Repeat(`([\dA-F ]+);`, 5) + ` # (.*)$`) + +var counter int + +// Load the data form NormalizationTest.txt +func loadTestData(t *testing.T) { + f := gen.OpenUCDFile("NormalizationTest.txt") + defer f.Close() + scanner := bufio.NewScanner(f) + for scanner.Scan() { + line := scanner.Text() + if len(line) == 0 || line[0] == '#' { + continue + } + m := partRe.FindStringSubmatch(line) + if m != nil { + if len(m) < 3 { + t.Fatal("Failed to parse Part: ", line) + } + i, err := strconv.Atoi(m[1]) + if err != nil { + t.Fatal(err) + } + name := m[2] + part = append(part, Part{name: name[:len(name)-1], number: i}) + continue + } + m = testRe.FindStringSubmatch(line) + if m == nil || len(m) < 7 { + t.Fatalf(`Failed to parse: "%s" result: %#v`, line, m) + } + test := Test{name: m[6], partnr: len(part) - 1, number: counter} + counter++ + for j := 1; j < len(m)-1; j++ { + for _, split := range strings.Split(m[j], " ") { + r, err := strconv.ParseUint(split, 16, 64) + if err != nil { + t.Fatal(err) + } + if test.r == 0 { + // save for CharacterByCharacterTests + test.r = rune(r) + } + var buf [utf8.UTFMax]byte + sz := utf8.EncodeRune(buf[:], rune(r)) + test.cols[j-1] += string(buf[:sz]) + } + } + part := &part[len(part)-1] + part.tests = append(part.tests, test) + } + if scanner.Err() != nil { + t.Fatal(scanner.Err()) + } +} + +func cmpResult(t *testing.T, tc *Test, name string, f Form, gold, test, result string) { + if gold != result { + t.Errorf("%s:%s: %s(%+q)=%+q; want %+q: %s", + tc.Name(), name, fstr[f], test, result, gold, tc.name) + } +} + +func cmpIsNormal(t *testing.T, tc *Test, name string, f Form, test string, result, want bool) { + if result != want { + t.Errorf("%s:%s: %s(%+q)=%v; want %v", tc.Name(), name, fstr[f], test, result, want) + } +} + +func doTest(t *testing.T, tc *Test, f Form, gold, test string) { + testb := []byte(test) + result := f.Bytes(testb) + cmpResult(t, tc, "Bytes", f, gold, test, string(result)) + + sresult := f.String(test) + cmpResult(t, tc, "String", f, gold, test, sresult) + + acc := []byte{} + i := Iter{} + i.InitString(f, test) + for !i.Done() { + acc = append(acc, i.Next()...) + } + cmpResult(t, tc, "Iter.Next", f, gold, test, string(acc)) + + buf := make([]byte, 128) + acc = nil + for p := 0; p < len(testb); { + nDst, nSrc, _ := f.Transform(buf, testb[p:], true) + acc = append(acc, buf[:nDst]...) + p += nSrc + } + cmpResult(t, tc, "Transform", f, gold, test, string(acc)) + + for i := range test { + out := f.Append(f.Bytes([]byte(test[:i])), []byte(test[i:])...) + cmpResult(t, tc, fmt.Sprintf(":Append:%d", i), f, gold, test, string(out)) + } + cmpIsNormal(t, tc, "IsNormal", f, test, f.IsNormal([]byte(test)), test == gold) + cmpIsNormal(t, tc, "IsNormalString", f, test, f.IsNormalString(test), test == gold) +} + +func doConformanceTests(t *testing.T, tc *Test, partn int) { + for i := 0; i <= 2; i++ { + doTest(t, tc, NFC, tc.cols[1], tc.cols[i]) + doTest(t, tc, NFD, tc.cols[2], tc.cols[i]) + doTest(t, tc, NFKC, tc.cols[3], tc.cols[i]) + doTest(t, tc, NFKD, tc.cols[4], tc.cols[i]) + } + for i := 3; i <= 4; i++ { + doTest(t, tc, NFC, tc.cols[3], tc.cols[i]) + doTest(t, tc, NFD, tc.cols[4], tc.cols[i]) + doTest(t, tc, NFKC, tc.cols[3], tc.cols[i]) + doTest(t, tc, NFKD, tc.cols[4], tc.cols[i]) + } +} + +func TestCharacterByCharacter(t *testing.T) { + skipShort(t) + tests := part[1].tests + var last rune = 0 + for i := 0; i <= len(tests); i++ { // last one is special case + var r rune + if i == len(tests) { + r = 0x2FA1E // Don't have to go to 0x10FFFF + } else { + r = tests[i].r + } + for last++; last < r; last++ { + // Check all characters that were not explicitly listed in the test. + tc := &Test{partnr: 1, number: -1} + char := string(last) + doTest(t, tc, NFC, char, char) + doTest(t, tc, NFD, char, char) + doTest(t, tc, NFKC, char, char) + doTest(t, tc, NFKD, char, char) + } + if i < len(tests) { + doConformanceTests(t, &tests[i], 1) + } + } +} + +func TestStandardTests(t *testing.T) { + skipShort(t) + for _, j := range []int{0, 2, 3} { + for _, test := range part[j].tests { + doConformanceTests(t, &test, j) + } + } +} + +// TestPerformance verifies that normalization is O(n). If any of the +// code does not properly check for maxCombiningChars, normalization +// may exhibit O(n**2) behavior. +func TestPerformance(t *testing.T) { + skipShort(t) + runtime.GOMAXPROCS(2) + success := make(chan bool, 1) + go func() { + buf := bytes.Repeat([]byte("\u035D"), 1024*1024) + buf = append(buf, "\u035B"...) + NFC.Append(nil, buf...) + success <- true + }() + timeout := time.After(1 * time.Second) + select { + case <-success: + // test completed before the timeout + case <-timeout: + t.Errorf(`unexpectedly long time to complete PerformanceTest`) + } +} diff --git a/vendor/golang.org/x/text/unicode/rangetable/gen.go b/vendor/golang.org/x/text/unicode/rangetable/gen.go new file mode 100644 index 0000000..bea49dd --- /dev/null +++ b/vendor/golang.org/x/text/unicode/rangetable/gen.go @@ -0,0 +1,113 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "bytes" + "flag" + "fmt" + "io" + "log" + "reflect" + "sort" + "strings" + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/ucd" + "golang.org/x/text/unicode/rangetable" +) + +var versionList = flag.String("versions", "", + "list of versions for which to generate RangeTables") + +const bootstrapMessage = `No versions specified. +To bootstrap the code generation, run: + go run gen.go --versions=4.1.0,5.0.0,6.0.0,6.1.0,6.2.0,6.3.0,7.0.0 + +and ensure that the latest versions are included by checking: + http://www.unicode.org/Public/` + +func getVersions() []string { + if *versionList == "" { + log.Fatal(bootstrapMessage) + } + + versions := strings.Split(*versionList, ",") + sort.Strings(versions) + + // Ensure that at least the current version is included. + for _, v := range versions { + if v == gen.UnicodeVersion() { + return versions + } + } + + versions = append(versions, gen.UnicodeVersion()) + sort.Strings(versions) + return versions +} + +func main() { + gen.Init() + + versions := getVersions() + + w := &bytes.Buffer{} + + fmt.Fprintf(w, "//go:generate go run gen.go --versions=%s\n\n", strings.Join(versions, ",")) + fmt.Fprintf(w, "import \"unicode\"\n\n") + + vstr := func(s string) string { return strings.Replace(s, ".", "_", -1) } + + fmt.Fprintf(w, "var assigned = map[string]*unicode.RangeTable{\n") + for _, v := range versions { + fmt.Fprintf(w, "\t%q: assigned%s,\n", v, vstr(v)) + } + fmt.Fprintf(w, "}\n\n") + + var size int + for _, v := range versions { + assigned := []rune{} + + r := gen.Open("http://www.unicode.org/Public/", "", v+"/ucd/UnicodeData.txt") + ucd.Parse(r, func(p *ucd.Parser) { + assigned = append(assigned, p.Rune(0)) + }) + + rt := rangetable.New(assigned...) + sz := int(reflect.TypeOf(unicode.RangeTable{}).Size()) + sz += int(reflect.TypeOf(unicode.Range16{}).Size()) * len(rt.R16) + sz += int(reflect.TypeOf(unicode.Range32{}).Size()) * len(rt.R32) + + fmt.Fprintf(w, "// size %d bytes (%d KiB)\n", sz, sz/1024) + fmt.Fprintf(w, "var assigned%s = ", vstr(v)) + print(w, rt) + + size += sz + } + + fmt.Fprintf(w, "// Total size %d bytes (%d KiB)\n", size, size/1024) + + gen.WriteGoFile("tables.go", "rangetable", w.Bytes()) +} + +func print(w io.Writer, rt *unicode.RangeTable) { + fmt.Fprintln(w, "&unicode.RangeTable{") + fmt.Fprintln(w, "\tR16: []unicode.Range16{") + for _, r := range rt.R16 { + fmt.Fprintf(w, "\t\t{%#04x, %#04x, %d},\n", r.Lo, r.Hi, r.Stride) + } + fmt.Fprintln(w, "\t},") + fmt.Fprintln(w, "\tR32: []unicode.Range32{") + for _, r := range rt.R32 { + fmt.Fprintf(w, "\t\t{%#08x, %#08x, %d},\n", r.Lo, r.Hi, r.Stride) + } + fmt.Fprintln(w, "\t},") + fmt.Fprintf(w, "\tLatinOffset: %d,\n", rt.LatinOffset) + fmt.Fprintf(w, "}\n\n") +} diff --git a/vendor/golang.org/x/text/unicode/rangetable/merge.go b/vendor/golang.org/x/text/unicode/rangetable/merge.go new file mode 100644 index 0000000..ea2a080 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/rangetable/merge.go @@ -0,0 +1,260 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rangetable + +import ( + "unicode" +) + +// atEnd is used to mark a completed iteration. +const atEnd = unicode.MaxRune + 1 + +// Merge returns a new RangeTable that is the union of the given tables. +// It can also be used to compact user-created RangeTables. The entries in +// R16 and R32 for any given RangeTable should be sorted and non-overlapping. +// +// A lookup in the resulting table can be several times faster than using In +// directly on the ranges. Merge is an expensive operation, however, and only +// makes sense if one intends to use the result for more than a couple of +// hundred lookups. +func Merge(ranges ...*unicode.RangeTable) *unicode.RangeTable { + rt := &unicode.RangeTable{} + if len(ranges) == 0 { + return rt + } + + iter := tablesIter(make([]tableIndex, len(ranges))) + + for i, t := range ranges { + iter[i] = tableIndex{t, 0, atEnd} + if len(t.R16) > 0 { + iter[i].next = rune(t.R16[0].Lo) + } + } + + if r0 := iter.next16(); r0.Stride != 0 { + for { + r1 := iter.next16() + if r1.Stride == 0 { + rt.R16 = append(rt.R16, r0) + break + } + stride := r1.Lo - r0.Hi + if (r1.Lo == r1.Hi || stride == r1.Stride) && (r0.Lo == r0.Hi || stride == r0.Stride) { + // Fully merge the next range into the previous one. + r0.Hi, r0.Stride = r1.Hi, stride + continue + } else if stride == r0.Stride { + // Move the first element of r1 to r0. This may eliminate an + // entry. + r0.Hi = r1.Lo + r0.Stride = stride + r1.Lo = r1.Lo + r1.Stride + if r1.Lo > r1.Hi { + continue + } + } + rt.R16 = append(rt.R16, r0) + r0 = r1 + } + } + + for i, t := range ranges { + iter[i] = tableIndex{t, 0, atEnd} + if len(t.R32) > 0 { + iter[i].next = rune(t.R32[0].Lo) + } + } + + if r0 := iter.next32(); r0.Stride != 0 { + for { + r1 := iter.next32() + if r1.Stride == 0 { + rt.R32 = append(rt.R32, r0) + break + } + stride := r1.Lo - r0.Hi + if (r1.Lo == r1.Hi || stride == r1.Stride) && (r0.Lo == r0.Hi || stride == r0.Stride) { + // Fully merge the next range into the previous one. + r0.Hi, r0.Stride = r1.Hi, stride + continue + } else if stride == r0.Stride { + // Move the first element of r1 to r0. This may eliminate an + // entry. + r0.Hi = r1.Lo + r1.Lo = r1.Lo + r1.Stride + if r1.Lo > r1.Hi { + continue + } + } + rt.R32 = append(rt.R32, r0) + r0 = r1 + } + } + + for i := 0; i < len(rt.R16) && rt.R16[i].Hi <= unicode.MaxLatin1; i++ { + rt.LatinOffset = i + 1 + } + + return rt +} + +type tableIndex struct { + t *unicode.RangeTable + p uint32 + next rune +} + +type tablesIter []tableIndex + +// sortIter does an insertion sort using the next field of tableIndex. Insertion +// sort is a good sorting algorithm for this case. +func sortIter(t []tableIndex) { + for i := range t { + for j := i; j > 0 && t[j-1].next > t[j].next; j-- { + t[j], t[j-1] = t[j-1], t[j] + } + } +} + +// next16 finds the ranged to be added to the table. If ranges overlap between +// multiple tables it clips the result to a non-overlapping range if the +// elements are not fully subsumed. It returns a zero range if there are no more +// ranges. +func (ti tablesIter) next16() unicode.Range16 { + sortIter(ti) + + t0 := ti[0] + if t0.next == atEnd { + return unicode.Range16{} + } + r0 := t0.t.R16[t0.p] + r0.Lo = uint16(t0.next) + + // We restrict the Hi of the current range if it overlaps with another range. + for i := range ti { + tn := ti[i] + // Since our tableIndices are sorted by next, we can break if the there + // is no overlap. The first value of a next range can always be merged + // into the current one, so we can break in case of equality as well. + if rune(r0.Hi) <= tn.next { + break + } + rn := tn.t.R16[tn.p] + rn.Lo = uint16(tn.next) + + // Limit r0.Hi based on next ranges in list, but allow it to overlap + // with ranges as long as it subsumes it. + m := (rn.Lo - r0.Lo) % r0.Stride + if m == 0 && (rn.Stride == r0.Stride || rn.Lo == rn.Hi) { + // Overlap, take the min of the two Hi values: for simplicity's sake + // we only process one range at a time. + if r0.Hi > rn.Hi { + r0.Hi = rn.Hi + } + } else { + // Not a compatible stride. Set to the last possible value before + // rn.Lo, but ensure there is at least one value. + if x := rn.Lo - m; r0.Lo <= x { + r0.Hi = x + } + break + } + } + + // Update the next values for each table. + for i := range ti { + tn := &ti[i] + if rune(r0.Hi) < tn.next { + break + } + rn := tn.t.R16[tn.p] + stride := rune(rn.Stride) + tn.next += stride * (1 + ((rune(r0.Hi) - tn.next) / stride)) + if rune(rn.Hi) < tn.next { + if tn.p++; int(tn.p) == len(tn.t.R16) { + tn.next = atEnd + } else { + tn.next = rune(tn.t.R16[tn.p].Lo) + } + } + } + + if r0.Lo == r0.Hi { + r0.Stride = 1 + } + + return r0 +} + +// next32 finds the ranged to be added to the table. If ranges overlap between +// multiple tables it clips the result to a non-overlapping range if the +// elements are not fully subsumed. It returns a zero range if there are no more +// ranges. +func (ti tablesIter) next32() unicode.Range32 { + sortIter(ti) + + t0 := ti[0] + if t0.next == atEnd { + return unicode.Range32{} + } + r0 := t0.t.R32[t0.p] + r0.Lo = uint32(t0.next) + + // We restrict the Hi of the current range if it overlaps with another range. + for i := range ti { + tn := ti[i] + // Since our tableIndices are sorted by next, we can break if the there + // is no overlap. The first value of a next range can always be merged + // into the current one, so we can break in case of equality as well. + if rune(r0.Hi) <= tn.next { + break + } + rn := tn.t.R32[tn.p] + rn.Lo = uint32(tn.next) + + // Limit r0.Hi based on next ranges in list, but allow it to overlap + // with ranges as long as it subsumes it. + m := (rn.Lo - r0.Lo) % r0.Stride + if m == 0 && (rn.Stride == r0.Stride || rn.Lo == rn.Hi) { + // Overlap, take the min of the two Hi values: for simplicity's sake + // we only process one range at a time. + if r0.Hi > rn.Hi { + r0.Hi = rn.Hi + } + } else { + // Not a compatible stride. Set to the last possible value before + // rn.Lo, but ensure there is at least one value. + if x := rn.Lo - m; r0.Lo <= x { + r0.Hi = x + } + break + } + } + + // Update the next values for each table. + for i := range ti { + tn := &ti[i] + if rune(r0.Hi) < tn.next { + break + } + rn := tn.t.R32[tn.p] + stride := rune(rn.Stride) + tn.next += stride * (1 + ((rune(r0.Hi) - tn.next) / stride)) + if rune(rn.Hi) < tn.next { + if tn.p++; int(tn.p) == len(tn.t.R32) { + tn.next = atEnd + } else { + tn.next = rune(tn.t.R32[tn.p].Lo) + } + } + } + + if r0.Lo == r0.Hi { + r0.Stride = 1 + } + + return r0 +} diff --git a/vendor/golang.org/x/text/unicode/rangetable/merge_test.go b/vendor/golang.org/x/text/unicode/rangetable/merge_test.go new file mode 100644 index 0000000..93ed0fc --- /dev/null +++ b/vendor/golang.org/x/text/unicode/rangetable/merge_test.go @@ -0,0 +1,184 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rangetable + +import ( + "testing" + "unicode" +) + +var ( + maxRuneTable = &unicode.RangeTable{ + R32: []unicode.Range32{ + {unicode.MaxRune, unicode.MaxRune, 1}, + }, + } + + overlap1 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x100, 0xfffc, 4}, + }, + R32: []unicode.Range32{ + {0x100000, 0x10fffc, 4}, + }, + } + + overlap2 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x101, 0xfffd, 4}, + }, + R32: []unicode.Range32{ + {0x100001, 0x10fffd, 3}, + }, + } + + // The following table should be compacted into two entries for R16 and R32. + optimize = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x1, 0x1, 1}, + {0x2, 0x2, 1}, + {0x3, 0x3, 1}, + {0x5, 0x5, 1}, + {0x7, 0x7, 1}, + {0x9, 0x9, 1}, + {0xb, 0xf, 2}, + }, + R32: []unicode.Range32{ + {0x10001, 0x10001, 1}, + {0x10002, 0x10002, 1}, + {0x10003, 0x10003, 1}, + {0x10005, 0x10005, 1}, + {0x10007, 0x10007, 1}, + {0x10009, 0x10009, 1}, + {0x1000b, 0x1000f, 2}, + }, + } +) + +func TestMerge(t *testing.T) { + for i, tt := range [][]*unicode.RangeTable{ + {unicode.Cc, unicode.Cf}, + {unicode.L, unicode.Ll}, + {unicode.L, unicode.Ll, unicode.Lu}, + {unicode.Ll, unicode.Lu}, + {unicode.M}, + unicode.GraphicRanges, + cased, + + // Merge R16 only and R32 only and vice versa. + {unicode.Khmer, unicode.Khudawadi}, + {unicode.Imperial_Aramaic, unicode.Radical}, + + // Merge with empty. + {&unicode.RangeTable{}}, + {&unicode.RangeTable{}, &unicode.RangeTable{}}, + {&unicode.RangeTable{}, &unicode.RangeTable{}, &unicode.RangeTable{}}, + {&unicode.RangeTable{}, unicode.Hiragana}, + {unicode.Inherited, &unicode.RangeTable{}}, + {&unicode.RangeTable{}, unicode.Hanunoo, &unicode.RangeTable{}}, + + // Hypothetical tables. + {maxRuneTable}, + {overlap1, overlap2}, + + // Optimization + {optimize}, + } { + rt := Merge(tt...) + for r := rune(0); r <= unicode.MaxRune; r++ { + if got, want := unicode.Is(rt, r), unicode.In(r, tt...); got != want { + t.Fatalf("%d:%U: got %v; want %v", i, r, got, want) + } + } + // Test optimization and correctness for R16. + for k := 0; k < len(rt.R16)-1; k++ { + if lo, hi := rt.R16[k].Lo, rt.R16[k].Hi; lo > hi { + t.Errorf("%d: Lo (%x) > Hi (%x)", i, lo, hi) + } + if hi, lo := rt.R16[k].Hi, rt.R16[k+1].Lo; hi >= lo { + t.Errorf("%d: Hi (%x) >= next Lo (%x)", i, hi, lo) + } + if rt.R16[k].Hi+rt.R16[k].Stride == rt.R16[k+1].Lo { + t.Errorf("%d: missed optimization for R16 at %d between %X and %x", + i, k, rt.R16[k], rt.R16[k+1]) + } + } + // Test optimization and correctness for R32. + for k := 0; k < len(rt.R32)-1; k++ { + if lo, hi := rt.R32[k].Lo, rt.R32[k].Hi; lo > hi { + t.Errorf("%d: Lo (%x) > Hi (%x)", i, lo, hi) + } + if hi, lo := rt.R32[k].Hi, rt.R32[k+1].Lo; hi >= lo { + t.Errorf("%d: Hi (%x) >= next Lo (%x)", i, hi, lo) + } + if rt.R32[k].Hi+rt.R32[k].Stride == rt.R32[k+1].Lo { + t.Errorf("%d: missed optimization for R32 at %d between %X and %X", + i, k, rt.R32[k], rt.R32[k+1]) + } + } + } +} + +const runes = "Hello World in 2015!,\U0010fffd" + +func BenchmarkNotMerged(t *testing.B) { + for i := 0; i < t.N; i++ { + for _, r := range runes { + unicode.In(r, unicode.GraphicRanges...) + } + } +} + +func BenchmarkMerged(t *testing.B) { + rt := Merge(unicode.GraphicRanges...) + + for i := 0; i < t.N; i++ { + for _, r := range runes { + unicode.Is(rt, r) + } + } +} + +var cased = []*unicode.RangeTable{ + unicode.Lower, + unicode.Upper, + unicode.Title, + unicode.Other_Lowercase, + unicode.Other_Uppercase, +} + +func BenchmarkNotMergedCased(t *testing.B) { + for i := 0; i < t.N; i++ { + for _, r := range runes { + unicode.In(r, cased...) + } + } +} + +func BenchmarkMergedCased(t *testing.B) { + // This reduces len(R16) from 243 to 82 and len(R32) from 65 to 35 for + // Unicode 7.0.0. + rt := Merge(cased...) + + for i := 0; i < t.N; i++ { + for _, r := range runes { + unicode.Is(rt, r) + } + } +} + +func BenchmarkInit(t *testing.B) { + for i := 0; i < t.N; i++ { + Merge(cased...) + Merge(unicode.GraphicRanges...) + } +} + +func BenchmarkInit2(t *testing.B) { + // Hypothetical near-worst-case performance. + for i := 0; i < t.N; i++ { + Merge(overlap1, overlap2) + } +} diff --git a/vendor/golang.org/x/text/unicode/rangetable/rangetable.go b/vendor/golang.org/x/text/unicode/rangetable/rangetable.go new file mode 100644 index 0000000..187882c --- /dev/null +++ b/vendor/golang.org/x/text/unicode/rangetable/rangetable.go @@ -0,0 +1,70 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package rangetable provides utilities for creating and inspecting +// unicode.RangeTables. +package rangetable + +import ( + "sort" + "unicode" +) + +// New creates a RangeTable from the given runes, which may contain duplicates. +func New(r ...rune) *unicode.RangeTable { + if len(r) == 0 { + return &unicode.RangeTable{} + } + + sort.Sort(byRune(r)) + + // Remove duplicates. + k := 1 + for i := 1; i < len(r); i++ { + if r[k-1] != r[i] { + r[k] = r[i] + k++ + } + } + + var rt unicode.RangeTable + for _, r := range r[:k] { + if r <= 0xFFFF { + rt.R16 = append(rt.R16, unicode.Range16{Lo: uint16(r), Hi: uint16(r), Stride: 1}) + } else { + rt.R32 = append(rt.R32, unicode.Range32{Lo: uint32(r), Hi: uint32(r), Stride: 1}) + } + } + + // Optimize RangeTable. + return Merge(&rt) +} + +type byRune []rune + +func (r byRune) Len() int { return len(r) } +func (r byRune) Swap(i, j int) { r[i], r[j] = r[j], r[i] } +func (r byRune) Less(i, j int) bool { return r[i] < r[j] } + +// Visit visits all runes in the given RangeTable in order, calling fn for each. +func Visit(rt *unicode.RangeTable, fn func(rune)) { + for _, r16 := range rt.R16 { + for r := rune(r16.Lo); r <= rune(r16.Hi); r += rune(r16.Stride) { + fn(r) + } + } + for _, r32 := range rt.R32 { + for r := rune(r32.Lo); r <= rune(r32.Hi); r += rune(r32.Stride) { + fn(r) + } + } +} + +// Assigned returns a RangeTable with all assigned code points for a given +// Unicode version. This includes graphic, format, control, and private-use +// characters. It returns nil if the data for the given version is not +// available. +func Assigned(version string) *unicode.RangeTable { + return assigned[version] +} diff --git a/vendor/golang.org/x/text/unicode/rangetable/rangetable_test.go b/vendor/golang.org/x/text/unicode/rangetable/rangetable_test.go new file mode 100644 index 0000000..5a355aa --- /dev/null +++ b/vendor/golang.org/x/text/unicode/rangetable/rangetable_test.go @@ -0,0 +1,55 @@ +package rangetable + +import ( + "reflect" + "testing" + "unicode" +) + +var ( + empty = &unicode.RangeTable{} + many = &unicode.RangeTable{ + R16: []unicode.Range16{{0, 0xffff, 5}}, + R32: []unicode.Range32{{0x10004, 0x10009, 5}}, + LatinOffset: 0, + } +) + +func TestVisit(t *testing.T) { + Visit(empty, func(got rune) { + t.Error("call from empty RangeTable") + }) + + var want rune + Visit(many, func(got rune) { + if got != want { + t.Errorf("got %U; want %U", got, want) + } + want += 5 + }) + if want -= 5; want != 0x10009 { + t.Errorf("last run was %U; want U+10009", want) + } +} + +func TestNew(t *testing.T) { + for i, rt := range []*unicode.RangeTable{ + empty, + unicode.Co, + unicode.Letter, + unicode.ASCII_Hex_Digit, + many, + maxRuneTable, + } { + var got, want []rune + Visit(rt, func(r rune) { + want = append(want, r) + }) + Visit(New(want...), func(r rune) { + got = append(got, r) + }) + if !reflect.DeepEqual(got, want) { + t.Errorf("%d:\ngot %v;\nwant %v", i, got, want) + } + } +} diff --git a/vendor/golang.org/x/text/unicode/rangetable/tables.go b/vendor/golang.org/x/text/unicode/rangetable/tables.go new file mode 100644 index 0000000..61c989b --- /dev/null +++ b/vendor/golang.org/x/text/unicode/rangetable/tables.go @@ -0,0 +1,5735 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package rangetable + +//go:generate go run gen.go --versions=4.1.0,5.0.0,5.1.0,5.2.0,6.0.0,6.1.0,6.2.0,6.3.0,7.0.0,8.0.0,9.0.0 + +import "unicode" + +var assigned = map[string]*unicode.RangeTable{ + "4.1.0": assigned4_1_0, + "5.0.0": assigned5_0_0, + "5.1.0": assigned5_1_0, + "5.2.0": assigned5_2_0, + "6.0.0": assigned6_0_0, + "6.1.0": assigned6_1_0, + "6.2.0": assigned6_2_0, + "6.3.0": assigned6_3_0, + "7.0.0": assigned7_0_0, + "8.0.0": assigned8_0_0, + "9.0.0": assigned9_0_0, +} + +// size 2924 bytes (2 KiB) +var assigned4_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0241, 1}, + {0x0250, 0x036f, 1}, + {0x0374, 0x0375, 1}, + {0x037a, 0x037e, 4}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x03ce, 1}, + {0x03d0, 0x0486, 1}, + {0x0488, 0x04ce, 1}, + {0x04d0, 0x04f9, 1}, + {0x0500, 0x050f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05b9, 1}, + {0x05bb, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x060b, 0x0615, 1}, + {0x061b, 0x061e, 3}, + {0x061f, 0x0621, 2}, + {0x0622, 0x063a, 1}, + {0x0640, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x076d, 1}, + {0x0780, 0x07b1, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0970, 1}, + {0x097d, 0x0981, 4}, + {0x0982, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a59, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a74, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b43, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b61, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd7, 0x0be6, 15}, + {0x0be7, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3e, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c60, 0x0c61, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce6, 5}, + {0x0ce7, 0x0cef, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3e, 0x0d43, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d66, 5}, + {0x0d67, 0x0d6f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6a, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fcf, 0x0fd1, 1}, + {0x1000, 0x1021, 1}, + {0x1023, 0x1027, 1}, + {0x1029, 0x102a, 1}, + {0x102c, 0x1032, 1}, + {0x1036, 0x1039, 1}, + {0x1040, 0x1059, 1}, + {0x10a0, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18a9, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1d00, 0x1dc3, 1}, + {0x1e00, 0x1e9b, 1}, + {0x1ea0, 0x1ef9, 1}, + {0x1f00, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2063, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20eb, 1}, + {0x2100, 0x214c, 1}, + {0x2153, 0x2183, 1}, + {0x2190, 0x23db, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269c, 1}, + {0x26a0, 0x26b1, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27c6, 1}, + {0x27d0, 0x27eb, 1}, + {0x27f0, 0x2b13, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2e00, 0x2e17, 1}, + {0x2e1c, 0x2e1d, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312c, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31cf, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fbb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa700, 0xa716, 1}, + {0xa800, 0xa82b, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe23, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d12a, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7c9, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3026 bytes (2 KiB) +var assigned5_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x036f, 1}, + {0x0374, 0x0375, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x03ce, 1}, + {0x03d0, 0x0486, 1}, + {0x0488, 0x0513, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x060b, 0x0615, 1}, + {0x061b, 0x061e, 3}, + {0x061f, 0x0621, 2}, + {0x0622, 0x063a, 1}, + {0x0640, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x076d, 1}, + {0x0780, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0970, 1}, + {0x097b, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a59, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a74, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b43, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b61, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd7, 0x0be6, 15}, + {0x0be7, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3e, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c60, 0x0c61, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3e, 0x0d43, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d66, 5}, + {0x0d67, 0x0d6f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6a, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fcf, 0x0fd1, 1}, + {0x1000, 0x1021, 1}, + {0x1023, 0x1027, 1}, + {0x1029, 0x102a, 1}, + {0x102c, 0x1032, 1}, + {0x1036, 0x1039, 1}, + {0x1040, 0x1059, 1}, + {0x10a0, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18a9, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1d00, 0x1dca, 1}, + {0x1dfe, 0x1e9b, 1}, + {0x1ea0, 0x1ef9, 1}, + {0x1f00, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2063, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20ef, 1}, + {0x2100, 0x214e, 1}, + {0x2153, 0x2184, 1}, + {0x2190, 0x23e7, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269c, 1}, + {0x26a0, 0x26b2, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27d0, 0x27eb, 1}, + {0x27f0, 0x2b1a, 1}, + {0x2b20, 0x2b23, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2c6c, 1}, + {0x2c74, 0x2c77, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2e00, 0x2e17, 1}, + {0x2e1c, 0x2e1d, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312c, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31cf, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fbb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa700, 0xa71a, 1}, + {0xa720, 0xa721, 1}, + {0xa800, 0xa82b, 1}, + {0xa840, 0xa877, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe23, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010900, 0x00010919, 1}, + {0x0001091f, 0x00010a00, 225}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d12a, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3152 bytes (3 KiB) +var assigned5_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0523, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x061f, 1}, + {0x0621, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0972, 1}, + {0x097b, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fd4, 1}, + {0x1000, 0x1099, 1}, + {0x109e, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1c00, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfe, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x214f, 1}, + {0x2153, 0x2188, 1}, + {0x2190, 0x23e7, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269d, 1}, + {0x26a0, 0x26bc, 1}, + {0x26c0, 0x26c3, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27cc, 0x27d0, 4}, + {0x27d1, 0x2b4c, 1}, + {0x2b50, 0x2b54, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2c6f, 1}, + {0x2c71, 0x2c7d, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e30, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fc3, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa500, 0xa62b, 1}, + {0xa640, 0xa65f, 1}, + {0xa662, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa700, 0xa78c, 1}, + {0xa7fb, 0xa82b, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xaa00, 161}, + {0xaa01, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa5f, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010900, 0x00010919, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3518 bytes (3 KiB) +var assigned5_2_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0525, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x061f, 1}, + {0x0621, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0900, 0x0939, 1}, + {0x093c, 0x094e, 1}, + {0x0950, 0x0955, 1}, + {0x0958, 0x0972, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fd8, 1}, + {0x1000, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1c00, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cd0, 0x1cf2, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfd, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b8, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23e8, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26cd, 1}, + {0x26cf, 0x26e1, 1}, + {0x26e3, 0x26e8, 5}, + {0x26e9, 0x26ff, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27cc, 0x27d0, 4}, + {0x27d1, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf1, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e31, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa65f, 1}, + {0xa662, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa6a0, 0xa6f7, 1}, + {0xa700, 0xa78c, 1}, + {0xa7fb, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaadf, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011080, 0x000110c1, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f131, 0x0001f13d, 12}, + {0x0001f13f, 0x0001f142, 3}, + {0x0001f146, 0x0001f14a, 4}, + {0x0001f14b, 0x0001f14e, 1}, + {0x0001f157, 0x0001f15f, 8}, + {0x0001f179, 0x0001f17b, 2}, + {0x0001f17c, 0x0001f17f, 3}, + {0x0001f18a, 0x0001f18d, 1}, + {0x0001f190, 0x0001f200, 112}, + {0x0001f210, 0x0001f231, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3812 bytes (3 KiB) +var assigned6_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x0900, 162}, + {0x0901, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1bc0, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cd0, 0x1cf2, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20b9, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x27ca, 1}, + {0x27cc, 0x27ce, 2}, + {0x27cf, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf1, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e31, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa6a0, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa791, 1}, + {0xa7a0, 0xa7a9, 1}, + {0xa7fa, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaadf, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f169, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f5ff, 1}, + {0x0001f601, 0x0001f610, 1}, + {0x0001f612, 0x0001f614, 1}, + {0x0001f616, 0x0001f61c, 2}, + {0x0001f61d, 0x0001f61e, 1}, + {0x0001f620, 0x0001f625, 1}, + {0x0001f628, 0x0001f62b, 1}, + {0x0001f62d, 0x0001f630, 3}, + {0x0001f631, 0x0001f633, 1}, + {0x0001f635, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20b9, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_2_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20ba, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_3_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20ba, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4898 bytes (4 KiB) +var assigned7_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b2, 1}, + {0x08e4, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c81, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20bd, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23fa, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e42, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa69d, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa7ad, 1}, + {0xa7b0, 0xa7b1, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab5f, 1}, + {0xab64, 0xab65, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe2d, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018c, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111cd, 0x000111d0, 3}, + {0x000111d1, 0x000111da, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123d, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011301, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011357, 0x0001135d, 6}, + {0x0001135e, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115c9, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00012000, 0x00012398, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f32c, 1}, + {0x0001f330, 0x0001f37d, 1}, + {0x0001f380, 0x0001f3ce, 1}, + {0x0001f3d4, 0x0001f3f7, 1}, + {0x0001f400, 0x0001f4fe, 1}, + {0x0001f500, 0x0001f54a, 1}, + {0x0001f550, 0x0001f579, 1}, + {0x0001f57b, 0x0001f5a3, 1}, + {0x0001f5a5, 0x0001f642, 1}, + {0x0001f645, 0x0001f6cf, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f3, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 5048 bytes (4 KiB) +var assigned8_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b4, 1}, + {0x08e3, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0af9, 0x0b01, 8}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c5a, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c81, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d5f, 8}, + {0x0d60, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f5, 1}, + {0x13f8, 0x13fd, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20be, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x218b, 1}, + {0x2190, 0x23fa, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2bec, 0x2bef, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e42, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fd5, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa6f7, 1}, + {0xa700, 0xa7ad, 1}, + {0xa7b0, 0xa7b7, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fd, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab65, 1}, + {0xab70, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018c, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x000108e0, 0x000108f2, 1}, + {0x000108f4, 0x000108f5, 1}, + {0x000108fb, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109bc, 0x000109cf, 1}, + {0x000109d2, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010c80, 0x00010cb2, 1}, + {0x00010cc0, 0x00010cf2, 1}, + {0x00010cfa, 0x00010cff, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111cd, 1}, + {0x000111d0, 0x000111df, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123d, 1}, + {0x00011280, 0x00011286, 1}, + {0x00011288, 0x0001128a, 2}, + {0x0001128b, 0x0001128d, 1}, + {0x0001128f, 0x0001129d, 1}, + {0x0001129f, 0x000112a9, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011300, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011350, 0x00011357, 7}, + {0x0001135d, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115dd, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00011700, 0x00011719, 1}, + {0x0001171d, 0x0001172b, 1}, + {0x00011730, 0x0001173f, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00012000, 0x00012399, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00012480, 0x00012543, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00014400, 0x00014646, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1e8, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001da8b, 1}, + {0x0001da9b, 0x0001da9f, 1}, + {0x0001daa1, 0x0001daaf, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f579, 1}, + {0x0001f57b, 0x0001f5a3, 1}, + {0x0001f5a5, 0x0001f6d0, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f3, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x0001f910, 0x0001f918, 1}, + {0x0001f980, 0x0001f984, 1}, + {0x0001f9c0, 0x00020000, 1600}, + {0x00020001, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002b820, 0x0002cea1, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 5348 bytes (5 KiB) +var assigned9_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b4, 1}, + {0x08b6, 0x08bd, 1}, + {0x08d4, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0af9, 0x0b01, 8}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c5a, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4f, 1}, + {0x0d54, 0x0d63, 1}, + {0x0d66, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f5, 1}, + {0x13f8, 0x13fd, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c88, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfb, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20be, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x218b, 1}, + {0x2190, 0x23fe, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2bec, 0x2bef, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e44, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fd5, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa6f7, 1}, + {0xa700, 0xa7ae, 1}, + {0xa7b0, 0xa7b7, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c5, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fd, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab65, 1}, + {0xab70, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018e, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x000104b0, 0x000104d3, 1}, + {0x000104d8, 0x000104fb, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x000108e0, 0x000108f2, 1}, + {0x000108f4, 0x000108f5, 1}, + {0x000108fb, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109bc, 0x000109cf, 1}, + {0x000109d2, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010c80, 0x00010cb2, 1}, + {0x00010cc0, 0x00010cf2, 1}, + {0x00010cfa, 0x00010cff, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111cd, 1}, + {0x000111d0, 0x000111df, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123e, 1}, + {0x00011280, 0x00011286, 1}, + {0x00011288, 0x0001128a, 2}, + {0x0001128b, 0x0001128d, 1}, + {0x0001128f, 0x0001129d, 1}, + {0x0001129f, 0x000112a9, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011300, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011350, 0x00011357, 7}, + {0x0001135d, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011400, 0x00011459, 1}, + {0x0001145b, 0x0001145d, 2}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115dd, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011660, 0x0001166c, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00011700, 0x00011719, 1}, + {0x0001171d, 0x0001172b, 1}, + {0x00011730, 0x0001173f, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00011c00, 0x00011c08, 1}, + {0x00011c0a, 0x00011c36, 1}, + {0x00011c38, 0x00011c45, 1}, + {0x00011c50, 0x00011c6c, 1}, + {0x00011c70, 0x00011c8f, 1}, + {0x00011c92, 0x00011ca7, 1}, + {0x00011ca9, 0x00011cb6, 1}, + {0x00012000, 0x00012399, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00012480, 0x00012543, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00014400, 0x00014646, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x00016fe0, 0x00017000, 32}, + {0x00017001, 0x000187ec, 1}, + {0x00018800, 0x00018af2, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1e8, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001da8b, 1}, + {0x0001da9b, 0x0001da9f, 1}, + {0x0001daa1, 0x0001daaf, 1}, + {0x0001e000, 0x0001e006, 1}, + {0x0001e008, 0x0001e018, 1}, + {0x0001e01b, 0x0001e021, 1}, + {0x0001e023, 0x0001e024, 1}, + {0x0001e026, 0x0001e02a, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001e900, 0x0001e94a, 1}, + {0x0001e950, 0x0001e959, 1}, + {0x0001e95e, 0x0001e95f, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f1ac, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23b, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f6d2, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f6, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x0001f910, 0x0001f91e, 1}, + {0x0001f920, 0x0001f927, 1}, + {0x0001f930, 0x0001f933, 3}, + {0x0001f934, 0x0001f93e, 1}, + {0x0001f940, 0x0001f94b, 1}, + {0x0001f950, 0x0001f95e, 1}, + {0x0001f980, 0x0001f991, 1}, + {0x0001f9c0, 0x00020000, 1600}, + {0x00020001, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002b820, 0x0002cea1, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// Total size 44206 bytes (43 KiB) diff --git a/vendor/golang.org/x/text/unicode/runenames/bits.go b/vendor/golang.org/x/text/unicode/runenames/bits.go new file mode 100644 index 0000000..48cc2c0 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/bits.go @@ -0,0 +1,59 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package runenames + +// This file contains code common to gen.go and the package code. + +// The mapping from rune to string (i.e. offset and length in the data string) +// is encoded as a two level table. The first level maps from contiguous rune +// ranges [runeOffset, runeOffset+runeLength) to entries. Entries are either +// direct (for repeated names such as "<CJK Ideograph>") or indirect (for runs +// of unique names such as "SPACE", "EXCLAMATION MARK", "QUOTATION MARK", ...). +// +// Each first level table element is 64 bits. The runeOffset (21 bits) and +// runeLength (16 bits) take the 37 high bits. The entry takes the 27 low bits, +// with directness encoded in the least significant bit. +// +// A direct entry encodes a dataOffset (18 bits) and dataLength (8 bits) in the +// data string. 18 bits is too short to encode the entire data string's length, +// but the data string's contents are arranged so that all of the few direct +// entries' offsets come before all of the many indirect entries' offsets. +// +// An indirect entry encodes a dataBase (10 bits) and a table1Offset (16 bits). +// The table1Offset is the start of a range in the second level table. The +// length of that range is the same as the runeLength. +// +// Each second level table element is 16 bits, an index into data, relative to +// a bias equal to (dataBase << dataBaseUnit). That (bias + index) is the +// (dataOffset + dataLength) in the data string. The dataOffset is implied by +// the previous table element (with the same implicit bias). + +const ( + bitsRuneOffset = 21 + bitsRuneLength = 16 + bitsDataOffset = 18 + bitsDataLength = 8 + bitsDirect = 1 + + bitsDataBase = 10 + bitsTable1Offset = 16 + + shiftRuneOffset = 0 + bitsDirect + bitsDataLength + bitsDataOffset + bitsRuneLength + shiftRuneLength = 0 + bitsDirect + bitsDataLength + bitsDataOffset + shiftDataOffset = 0 + bitsDirect + bitsDataLength + shiftDataLength = 0 + bitsDirect + shiftDirect = 0 + + shiftDataBase = 0 + bitsDirect + bitsTable1Offset + shiftTable1Offset = 0 + bitsDirect + + maskRuneLength = 1<<bitsRuneLength - 1 + maskDataOffset = 1<<bitsDataOffset - 1 + maskDataLength = 1<<bitsDataLength - 1 + maskDirect = 1<<bitsDirect - 1 + + maskDataBase = 1<<bitsDataBase - 1 + maskTable1Offset = 1<<bitsTable1Offset - 1 + + dataBaseUnit = 10 +) diff --git a/vendor/golang.org/x/text/unicode/runenames/example_test.go b/vendor/golang.org/x/text/unicode/runenames/example_test.go new file mode 100644 index 0000000..3bb44fd --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/example_test.go @@ -0,0 +1,118 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runenames_test + +import ( + "fmt" + + "golang.org/x/text/unicode/runenames" +) + +func Example() { + runes := []rune{ + -1, + '\U00000000', + '\U0000001f', + '\U00000020', + '\U00000021', + '\U00000041', + '\U0000007e', + '\U0000007f', + '\U00000080', + '\U000000e0', + + '\U0000037f', + '\U00000380', + '\U00000381', + '\U00000382', + '\U00000383', + '\U00000384', + '\U00000385', + '\U00000386', + '\U000007c0', + + '\U00002603', + '\U000033ff', + '\U00003400', + '\U00003401', + '\U00003402', + '\U00004dc0', + + '\U00009fd5', + '\U00009fd6', + '\U00009fff', + '\U0000a000', + 0xdc00, // '\U0000dc00' (Low Surrogate) is an invalid Go literal. + '\U0000f800', + '\U0000fffc', + '\U0000fffd', + '\U0000fffe', + '\U0000ffff', + + '\U00010000', + '\U0001f574', + '\U0002fa1d', + '\U0002fa1e', + '\U000e0100', + '\U000e01ef', + '\U000e01f0', + '\U00100000', + '\U0010fffd', + '\U0010fffe', + '\U0010ffff', + } + + for _, r := range runes { + fmt.Printf("%08x %q\n", r, runenames.Name(r)) + } + + // Output: + // -0000001 "" + // 00000000 "<control>" + // 0000001f "<control>" + // 00000020 "SPACE" + // 00000021 "EXCLAMATION MARK" + // 00000041 "LATIN CAPITAL LETTER A" + // 0000007e "TILDE" + // 0000007f "<control>" + // 00000080 "<control>" + // 000000e0 "LATIN SMALL LETTER A WITH GRAVE" + // 0000037f "GREEK CAPITAL LETTER YOT" + // 00000380 "" + // 00000381 "" + // 00000382 "" + // 00000383 "" + // 00000384 "GREEK TONOS" + // 00000385 "GREEK DIALYTIKA TONOS" + // 00000386 "GREEK CAPITAL LETTER ALPHA WITH TONOS" + // 000007c0 "NKO DIGIT ZERO" + // 00002603 "SNOWMAN" + // 000033ff "SQUARE GAL" + // 00003400 "<CJK Ideograph Extension A>" + // 00003401 "<CJK Ideograph Extension A>" + // 00003402 "<CJK Ideograph Extension A>" + // 00004dc0 "HEXAGRAM FOR THE CREATIVE HEAVEN" + // 00009fd5 "<CJK Ideograph>" + // 00009fd6 "" + // 00009fff "" + // 0000a000 "YI SYLLABLE IT" + // 0000dc00 "<Low Surrogate>" + // 0000f800 "<Private Use>" + // 0000fffc "OBJECT REPLACEMENT CHARACTER" + // 0000fffd "REPLACEMENT CHARACTER" + // 0000fffe "" + // 0000ffff "" + // 00010000 "LINEAR B SYLLABLE B008 A" + // 0001f574 "MAN IN BUSINESS SUIT LEVITATING" + // 0002fa1d "CJK COMPATIBILITY IDEOGRAPH-2FA1D" + // 0002fa1e "" + // 000e0100 "VARIATION SELECTOR-17" + // 000e01ef "VARIATION SELECTOR-256" + // 000e01f0 "" + // 00100000 "<Plane 16 Private Use>" + // 0010fffd "<Plane 16 Private Use>" + // 0010fffe "" + // 0010ffff "" +} diff --git a/vendor/golang.org/x/text/unicode/runenames/gen.go b/vendor/golang.org/x/text/unicode/runenames/gen.go new file mode 100644 index 0000000..7e373a5 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/gen.go @@ -0,0 +1,195 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "log" + "strings" + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/ucd" +) + +// snippet is a slice of data; data is the concatenation of all of the names. +type snippet struct { + offset int + length int + s string +} + +func makeTable0EntryDirect(rOffset, rLength, dOffset, dLength int) uint64 { + if rOffset >= 1<<bitsRuneOffset { + log.Fatalf("makeTable0EntryDirect: rOffset %d is too large", rOffset) + } + if rLength >= 1<<bitsRuneLength { + log.Fatalf("makeTable0EntryDirect: rLength %d is too large", rLength) + } + if dOffset >= 1<<bitsDataOffset { + log.Fatalf("makeTable0EntryDirect: dOffset %d is too large", dOffset) + } + if dLength >= 1<<bitsRuneLength { + log.Fatalf("makeTable0EntryDirect: dLength %d is too large", dLength) + } + return uint64(rOffset)<<shiftRuneOffset | + uint64(rLength)<<shiftRuneLength | + uint64(dOffset)<<shiftDataOffset | + uint64(dLength)<<shiftDataLength | + 1 // Direct bit. +} + +func makeTable0EntryIndirect(rOffset, rLength, dBase, t1Offset int) uint64 { + if rOffset >= 1<<bitsRuneOffset { + log.Fatalf("makeTable0EntryIndirect: rOffset %d is too large", rOffset) + } + if rLength >= 1<<bitsRuneLength { + log.Fatalf("makeTable0EntryIndirect: rLength %d is too large", rLength) + } + if dBase >= 1<<bitsDataBase { + log.Fatalf("makeTable0EntryIndirect: dBase %d is too large", dBase) + } + if t1Offset >= 1<<bitsTable1Offset { + log.Fatalf("makeTable0EntryIndirect: t1Offset %d is too large", t1Offset) + } + return uint64(rOffset)<<shiftRuneOffset | + uint64(rLength)<<shiftRuneLength | + uint64(dBase)<<shiftDataBase | + uint64(t1Offset)<<shiftTable1Offset | + 0 // Direct bit. +} + +func makeTable1Entry(x int) uint16 { + if x < 0 || 0xffff < x { + log.Fatalf("makeTable1Entry: entry %d is out of range", x) + } + return uint16(x) +} + +var ( + data []byte + snippets = make([]snippet, 1+unicode.MaxRune) +) + +func main() { + gen.Init() + + names, counts := parse() + appendRepeatNames(names, counts) + appendUniqueNames(names, counts) + + table0, table1 := makeTables() + + gen.Repackage("gen_bits.go", "bits.go", "runenames") + + w := gen.NewCodeWriter() + w.WriteVar("table0", table0) + w.WriteVar("table1", table1) + w.WriteConst("data", string(data)) + w.WriteGoFile("tables.go", "runenames") +} + +func parse() (names []string, counts map[string]int) { + names = make([]string, 1+unicode.MaxRune) + counts = map[string]int{} + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + r, s := p.Rune(0), p.String(ucd.Name) + if s == "" { + return + } + if s[0] == '<' { + const first = ", First>" + if i := strings.Index(s, first); i >= 0 { + s = s[:i] + ">" + } + } + names[r] = s + counts[s]++ + }) + return names, counts +} + +func appendRepeatNames(names []string, counts map[string]int) { + alreadySeen := map[string]snippet{} + for r, s := range names { + if s == "" || counts[s] == 1 { + continue + } + if s[0] != '<' { + log.Fatalf("Repeated name %q does not start with a '<'", s) + } + + if z, ok := alreadySeen[s]; ok { + snippets[r] = z + continue + } + + z := snippet{ + offset: len(data), + length: len(s), + s: s, + } + data = append(data, s...) + snippets[r] = z + alreadySeen[s] = z + } +} + +func appendUniqueNames(names []string, counts map[string]int) { + for r, s := range names { + if s == "" || counts[s] != 1 { + continue + } + if s[0] == '<' { + log.Fatalf("Unique name %q starts with a '<'", s) + } + + z := snippet{ + offset: len(data), + length: len(s), + s: s, + } + data = append(data, s...) + snippets[r] = z + } +} + +func makeTables() (table0 []uint64, table1 []uint16) { + for i := 0; i < len(snippets); { + zi := snippets[i] + if zi == (snippet{}) { + i++ + continue + } + + // Look for repeat names. If we have one, we only need a table0 entry. + j := i + 1 + for ; j < len(snippets) && zi == snippets[j]; j++ { + } + if j > i+1 { + table0 = append(table0, makeTable0EntryDirect(i, j-i, zi.offset, zi.length)) + i = j + continue + } + + // Otherwise, we have a run of unique names. We need one table0 entry + // and two or more table1 entries. + base := zi.offset &^ (1<<dataBaseUnit - 1) + t1Offset := len(table1) + 1 + table1 = append(table1, makeTable1Entry(zi.offset-base)) + table1 = append(table1, makeTable1Entry(zi.offset+zi.length-base)) + for ; j < len(snippets) && snippets[j] != (snippet{}); j++ { + zj := snippets[j] + if data[zj.offset] == '<' { + break + } + table1 = append(table1, makeTable1Entry(zj.offset+zj.length-base)) + } + table0 = append(table0, makeTable0EntryIndirect(i, j-i, base>>dataBaseUnit, t1Offset)) + i = j + } + return table0, table1 +} diff --git a/vendor/golang.org/x/text/unicode/runenames/gen_bits.go b/vendor/golang.org/x/text/unicode/runenames/gen_bits.go new file mode 100644 index 0000000..e80fada --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/gen_bits.go @@ -0,0 +1,63 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This file contains code common to gen.go and the package code. + +// The mapping from rune to string (i.e. offset and length in the data string) +// is encoded as a two level table. The first level maps from contiguous rune +// ranges [runeOffset, runeOffset+runeLength) to entries. Entries are either +// direct (for repeated names such as "<CJK Ideograph>") or indirect (for runs +// of unique names such as "SPACE", "EXCLAMATION MARK", "QUOTATION MARK", ...). +// +// Each first level table element is 64 bits. The runeOffset (21 bits) and +// runeLength (16 bits) take the 37 high bits. The entry takes the 27 low bits, +// with directness encoded in the least significant bit. +// +// A direct entry encodes a dataOffset (18 bits) and dataLength (8 bits) in the +// data string. 18 bits is too short to encode the entire data string's length, +// but the data string's contents are arranged so that all of the few direct +// entries' offsets come before all of the many indirect entries' offsets. +// +// An indirect entry encodes a dataBase (10 bits) and a table1Offset (16 bits). +// The table1Offset is the start of a range in the second level table. The +// length of that range is the same as the runeLength. +// +// Each second level table element is 16 bits, an index into data, relative to +// a bias equal to (dataBase << dataBaseUnit). That (bias + index) is the +// (dataOffset + dataLength) in the data string. The dataOffset is implied by +// the previous table element (with the same implicit bias). + +const ( + bitsRuneOffset = 21 + bitsRuneLength = 16 + bitsDataOffset = 18 + bitsDataLength = 8 + bitsDirect = 1 + + bitsDataBase = 10 + bitsTable1Offset = 16 + + shiftRuneOffset = 0 + bitsDirect + bitsDataLength + bitsDataOffset + bitsRuneLength + shiftRuneLength = 0 + bitsDirect + bitsDataLength + bitsDataOffset + shiftDataOffset = 0 + bitsDirect + bitsDataLength + shiftDataLength = 0 + bitsDirect + shiftDirect = 0 + + shiftDataBase = 0 + bitsDirect + bitsTable1Offset + shiftTable1Offset = 0 + bitsDirect + + maskRuneLength = 1<<bitsRuneLength - 1 + maskDataOffset = 1<<bitsDataOffset - 1 + maskDataLength = 1<<bitsDataLength - 1 + maskDirect = 1<<bitsDirect - 1 + + maskDataBase = 1<<bitsDataBase - 1 + maskTable1Offset = 1<<bitsTable1Offset - 1 + + dataBaseUnit = 10 +) diff --git a/vendor/golang.org/x/text/unicode/runenames/runenames.go b/vendor/golang.org/x/text/unicode/runenames/runenames.go new file mode 100644 index 0000000..3154a22 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/runenames.go @@ -0,0 +1,48 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go gen_bits.go + +// Package runenames provides rune names from the Unicode Character Database. +// For example, the name for '\u0100' is "LATIN CAPITAL LETTER A WITH MACRON". +// +// See http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt +package runenames + +import ( + "sort" +) + +// Name returns the name for r. +func Name(r rune) string { + i := sort.Search(len(table0), func(j int) bool { + e := table0[j] + rOffset := rune(e >> shiftRuneOffset) + return r < rOffset + }) + if i == 0 { + return "" + } + + e := table0[i-1] + rOffset := rune(e >> shiftRuneOffset) + rLength := rune(e>>shiftRuneLength) & maskRuneLength + if r >= rOffset+rLength { + return "" + } + + if (e>>shiftDirect)&maskDirect != 0 { + o := int(e>>shiftDataOffset) & maskDataOffset + n := int(e>>shiftDataLength) & maskDataLength + return data[o : o+n] + } + + base := uint32(e>>shiftDataBase) & maskDataBase + base <<= dataBaseUnit + j := rune(e>>shiftTable1Offset) & maskTable1Offset + j += r - rOffset + d0 := base + uint32(table1[j-1]) // dataOffset + d1 := base + uint32(table1[j-0]) // dataOffset + dataLength + return data[d0:d1] +} diff --git a/vendor/golang.org/x/text/unicode/runenames/runenames_test.go b/vendor/golang.org/x/text/unicode/runenames/runenames_test.go new file mode 100644 index 0000000..6a2d2b6 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/runenames_test.go @@ -0,0 +1,46 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runenames + +import ( + "strings" + "testing" + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/internal/ucd" +) + +func TestName(t *testing.T) { + testtext.SkipIfNotLong(t) + + wants := make([]string, 1+unicode.MaxRune) + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + r, s := p.Rune(0), p.String(ucd.Name) + if s == "" { + return + } + if s[0] == '<' { + const first = ", First>" + if i := strings.Index(s, first); i >= 0 { + s = s[:i] + ">" + } + } + wants[r] = s + }) + + nErrors := 0 + for r, want := range wants { + got := Name(rune(r)) + if got != want { + t.Errorf("r=%#08x: got %q, want %q", r, got, want) + nErrors++ + if nErrors == 100 { + t.Fatal("too many errors") + } + } + } +} diff --git a/vendor/golang.org/x/text/unicode/runenames/tables.go b/vendor/golang.org/x/text/unicode/runenames/tables.go new file mode 100644 index 0000000..99c4926 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/tables.go @@ -0,0 +1,15514 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package runenames + +var table0 = []uint64{ // 647 elements + // Entry 0 - 1F + 0x0000000100000013, 0x00010002f8000002, 0x0003f80108000013, 0x00050016c00200c2, + 0x001bd000302e0674, 0x001c2000382e0682, 0x001c600008300692, 0x001c7000a0300696, + 0x001d180c683006c0, 0x00298801304809dc, 0x002ac800384a0a2a, 0x002b0801384a0a3a, + 0x002c4800104c0a8a, 0x002c6800184c0a90, 0x002c8801b84e0a98, 0x002e8000d8500b08, + 0x002f800028500b40, 0x00300000e8500b4c, 0x0030f00780520b88, 0x00387801e05e0d6a, + 0x003a680328600de4, 0x003e0001d8680eb0, 0x00400001706a0f28, 0x00418000786c0f86, + 0x00420000e06c0fa6, 0x0042f000086e0fe0, 0x00450000a86e0fe4, 0x0045b000406e1010, + 0x0046a00580701022, 0x004c280040781184, 0x004c780010781196, 0x004c9800b078119c, + // Entry 20 - 3F + 0x004d5000387811ca, 0x004d9000087811da, 0x004db000207a11de, 0x004de000487a11e8, + 0x004e3800107a11fc, 0x004e5800207a1202, 0x004eb800087a120c, 0x004ee000107a1210, + 0x004ef800287a1216, 0x004f3000b07a1222, 0x00500800187c1250, 0x00502800307c1258, + 0x00507800107c1266, 0x00509800b07c126c, 0x00515000387c129a, 0x00519000107c12aa, + 0x0051a800107c12b0, 0x0051c000107c12b6, 0x0051e000087c12bc, 0x0051f000287c12c0, + 0x00523800107e12cc, 0x00525800187e12d2, 0x00528800087e12da, 0x0052c800207e12de, + 0x0052f000087e12e8, 0x00533000807e12ec, 0x00540800187e130e, 0x00542800487e1316, + 0x00547800187e132a, 0x00549800b07e1332, 0x0055500038801360, 0x0055900010801370, + // Entry 40 - 5F + 0x0055a80028801376, 0x0055e00050801382, 0x0056380018801398, 0x00565800188013a0, + 0x00568000088013a8, 0x00570000208013ac, 0x00573000608013b6, 0x0057c800088213d0, + 0x00580800188213d4, 0x00582800408213dc, 0x00587800108213ee, 0x00589800b08213f4, + 0x0059500038821422, 0x0059900010821432, 0x0059a80028821438, 0x0059e00048821444, + 0x005a380010841458, 0x005a58001884145e, 0x005ab00010841466, 0x005ae0001084146c, + 0x005af80028841472, 0x005b30009084147e, 0x005c1000108414a4, 0x005c2800308414aa, + 0x005c7000188414b8, 0x005c9000208414c0, 0x005cc800108414ca, 0x005ce000088614d0, + 0x005cf000108614d4, 0x005d1800108614da, 0x005d4000188614e0, 0x005d7000608614e8, + // Entry 60 - 7F + 0x005df00028861502, 0x005e30001886150e, 0x005e500020861516, 0x005e800008861520, + 0x005eb80008861524, 0x005f3000a8861528, 0x0060000020861554, 0x006028004088155e, + 0x0060700018881570, 0x00609000b8881578, 0x00615000808815a8, 0x0061e800408815ca, + 0x00623000188815dc, 0x00625000208a15e4, 0x0062a800108a15ee, 0x0062c000188a15f4, + 0x00630000208a15fc, 0x00633000508a1606, 0x0063c000608a161c, 0x00642800408a1636, + 0x00647000188c1648, 0x00649000b88c1650, 0x00655000508c1680, 0x0065a800288c1696, + 0x0065e000488c16a2, 0x00663000188c16b6, 0x00665000208e16be, 0x0066a800108e16c8, + 0x0066f000088e16ce, 0x00670000208e16d2, 0x00673000508e16dc, 0x00678800108e16f2, + // Entry 80 - 9F + 0x00680800188e16f8, 0x00682800408e1700, 0x00687000188e1712, 0x00689001488e171a, + 0x0069e8004090176e, 0x006a300018901780, 0x006a500030901788, 0x006aa00080901796, + 0x006b3000d09217b8, 0x006c1000109417ee, 0x006c2800909417f4, 0x006cd000c094181a, + 0x006d98004896184c, 0x006de80008961860, 0x006e000038961864, 0x006e500008961874, + 0x006e780030961878, 0x006eb00008961886, 0x006ec0004096188a, 0x006f30005098189c, + 0x006f9000189818b2, 0x00700801d09818ba, 0x0071f800e89a1930, 0x00740800109c196c, + 0x00742000089c1972, 0x00743800109c1976, 0x00745000089c197c, 0x00746800089c1980, + 0x0074a000209c1984, 0x0074c800389c198e, 0x00750800189c199e, 0x00752800089c19a6, + // Entry A0 - BF + 0x00753800089c19aa, 0x00755000109c19ae, 0x00756800689c19b4, 0x0075d800189e19d0, + 0x00760000289e19d8, 0x00763000089e19e4, 0x00764000309e19e8, 0x00768000509e19f6, + 0x0076e000209e1a0c, 0x00780002409e1a16, 0x007a480120a21aa8, 0x007b880138a21af2, + 0x007cc80120a41b42, 0x007df00078a61b8c, 0x007e700068a81bac, 0x0080000630a81bc8, + 0x0086380008b21d56, 0x0086680008b21d5a, 0x0086800bc8b21d5e, 0x0092500020c42052, + 0x0092800038c4205c, 0x0092c00008c4206c, 0x0092d00020c42070, 0x0093000148c4207a, + 0x0094500020c620ce, 0x0094800108c620d8, 0x0095900020c8211c, 0x0095c00038c82126, + 0x0096000008c82136, 0x0096100020c8213a, 0x0096400078c82144, 0x0096c001c8ca2164, + // Entry C0 - DF + 0x0098900020cc21d8, 0x0098c00218cc21e2, 0x009ae80100ce226a, 0x009c0000d0d022ac, + 0x009d0002b0d022e2, 0x009fc00030d42390, 0x00a00014e8d4239e, 0x00b50002c8f828da, + 0x00b8000068fc298e, 0x00b8700038fc29aa, 0x00b90000b8fc29ba, 0x00ba0000a0fc29ea, + 0x00bb000068fe2a14, 0x00bb700018fe2a30, 0x00bb900010fe2a38, 0x00bc0002f0fe2a3e, + 0x00bf000051022afc, 0x00bf800051022b12, 0x00c0000079022b28, 0x00c0800051042b48, + 0x00c10002c1042b5e, 0x00c4000159082c10, 0x00c58002310a2c68, 0x00c80000f90e2cf6, + 0x00c90000610e2d36, 0x00c9800061102d50, 0x00ca000009102d6a, 0x00ca200151102d6e, + 0x00cb800029102dc4, 0x00cc000161122dd0, 0x00cd8000d1142e2a, 0x00ce800059142e60, + // Entry E0 - FF + 0x00cef001f1162e78, 0x00d0f00209182ef6, 0x00d30000e91a2f7a, 0x00d3f800591c2fb6, + 0x00d48000511c2fce, 0x00d50000711c2fe4, 0x00d58000791e3002, 0x00d80002611e3022, + 0x00da8001692230bc, 0x00dc0003a1243118, 0x00dfe001e12a3202, 0x00e1d800792c327c, + 0x00e26801e12c329c, 0x00e60000412e3316, 0x00e6800139303328, 0x00e7c00011323378, + 0x00e80007b132337e, 0x00efd808d940356c, 0x00f8c000315637a4, 0x00f90001315837b2, + 0x00fa4000315a3800, 0x00fa8000415c380e, 0x00fac800095c3820, 0x00fad800095c3824, + 0x00fae800095c3828, 0x00faf800f95c382c, 0x00fc0001a95e386c, 0x00fdb000796638d8, + 0x00fe3000716638f8, 0x00feb00031683916, 0x00fee80099683924, 0x00ff90001968394c, + // Entry 100 - 11F + 0x00ffb000496a3954, 0x01000003296a3968, 0x01033000616e3a34, 0x0103a000d96e3a4e, + 0x01048000696e3a86, 0x01050000f9703aa2, 0x0106800109703ae2, 0x0108000461723b26, + 0x010c801379783c40, 0x0120000139944120, 0x0122000059964170, 0x01230038a1964188, + 0x015bb00101fa4fb2, 0x015cc00111fc4ff4, 0x015de80061fe503a, 0x015e500042005054, + 0x015f600022005066, 0x016000017a005070, 0x016180017a0250d0, 0x01630004a2065130, + 0x0167c8016a0e525a, 0x016938000a1052b6, 0x016968000a1052ba, 0x01698001c21052be, + 0x016b780012145330, 0x016bf800c2145336, 0x016d00003a145368, 0x016d40003a145378, + 0x016d80003a145388, 0x016dc0003a165398, 0x016e00003a1653a8, 0x016e40003a1653b8, + // Entry 120 - 13F + 0x016e80003a1653c8, 0x016ec0003a1653d8, 0x016f00032a1653e8, 0x01740000d21c54b4, + 0x0174d802ca1c54ea, 0x01780006b220559e, 0x017f80006228574c, 0x01800002022a5766, + 0x01820802b22e57e8, 0x0184c8033a305896, 0x018828014a345966, 0x01898802f23659ba, + 0x018c80015a3a5a78, 0x018e0001223c5ad0, 0x018f80017a3c5b1a, 0x01910006fa405b7a, + 0x01980008024a5d3a, 0x01a000cdb0001237, 0x026e000202545f3c, 0x0270028eb000481f, + 0x050000246a565fbe, 0x05248001ba7a68da, 0x0526800ae27c694a, 0x05320005c2866c04, + 0x053800057a8e6d76, 0x053d8000429a6ed6, 0x053fb801aa9a6ee8, 0x05418000529e6f54, + 0x05420001c29e6f6a, 0x0544000232a06fdc, 0x0546700062a4706a, 0x05470000f2a47084, + // Entry 140 - 15F + 0x05480002a2a670c2, 0x054af800f2a8716c, 0x054c000272aa71aa, 0x054e78005aae7248, + 0x054ef0010aae7260, 0x05500001bab072a4, 0x0552000072b27314, 0x0552800052b27332, + 0x0552e0033ab27348, 0x0556d800e2b67418, 0x0558080032b87452, 0x0558480032b87460, + 0x0558880032b8746e, 0x055900003ab8747c, 0x055940003aba748c, 0x05598001b2ba749c, + 0x055b8003f2be750a, 0x055f800052c47608, 0x0560015d20006623, 0x06bd8000bac4761e, + 0x06be58018ac4764e, 0x06c0001c00008841, 0x06dc00040000c839, 0x06e000200001001f, + 0x070000c800011e1b, 0x07c8000b72c876b2, 0x07d3800352de7990, 0x07d800003ae67a66, + 0x07d898002ae67a76, 0x07d8e800d2e67a82, 0x07d9c0002ae87ab8, 0x07d9f0000ae87ac4, + // Entry 160 - 17F + 0x07da000012e87ac8, 0x07da180012e87ace, 0x07da3003e2e87ad4, 0x07de980b6af07bce, + 0x07ea800203107eaa, 0x07ec9001b3167f2c, 0x07ef8000731c7f9a, 0x07f00000d31c7fb8, + 0x07f100019b1e7fee, 0x07f2a0009b228056, 0x07f340002322807e, 0x07f380002b228088, + 0x07f3b0043b228094, 0x07f7f8000b2c81a4, 0x07f80805f32c81a8, 0x07fe100033368326, + 0x07fe500033368334, 0x07fe900033368342, 0x07fed0001b368350, 0x07ff00003b388358, + 0x07ff40003b388368, 0x07ffc8002b388378, 0x0800000063388384, 0x08006800d338839e, + 0x080140009b3a83d4, 0x0801e000133a83fc, 0x0801f8007b3a8402, 0x08028000733c8422, + 0x08040003db3c8440, 0x080800001b428538, 0x080838016b428540, 0x0809b802c344859c, + // Entry 180 - 19F + 0x080c8000634a864e, 0x080d00000b4a8668, 0x080e8001734a866c, 0x08140000eb4c86ca, + 0x081500018b4e8706, 0x08170000e350876a, 0x08180001235087a4, 0x08198000db5287ee, + 0x081a80015b528826, 0x081c0000f354887e, 0x081cf8012b5688bc, 0x081e400073588908, + 0x08200004f3588926, 0x08250000535e8a64, 0x0825800123608a7a, 0x0826c00123608ac4, + 0x0828000143628b0e, 0x08298001a3648b60, 0x082b78000b668bca, 0x08300009bb668bce, + 0x083a0000b3728e3e, 0x083b000043728e6c, 0x0840000033748e7e, 0x084040000b748e8c, + 0x0840500163748e90, 0x0841b80013768eea, 0x0841e0000b768ef0, 0x0841f800bb768ef4, + 0x0842b80243768f24, 0x084538004b7a8fb6, 0x084700009b7a8fca, 0x0847a000137a8ff2, + // Entry 1A0 - 1BF + 0x0847d8010b7a8ff8, 0x0848f800db7c903c, 0x0849f8000b7e9074, 0x084c0001c37e9078, + 0x084de000a38090ea, 0x084e900193829114, 0x085028001386917a, 0x0850600043869180, + 0x0850a8001b869192, 0x0850c800db86919a, 0x0851c0001b8691d2, 0x0851f8004b8891da, + 0x085280004b8891ee, 0x0853000203889202, 0x085600013b8c9284, 0x08575800638e92d4, + 0x08580001b38e92ee, 0x0859c800eb90935c, 0x085ac000db929398, 0x085bc000d39493d0, + 0x085cc80023969406, 0x085d48003b969410, 0x086000024b969420, 0x086400019b9a94b4, + 0x086600019b9e951c, 0x0867d00033a09584, 0x08730000fba09592, 0x0880000273a295d2, + 0x08829000f3a49670, 0x0883f8021ba696ae, 0x08868000cba89736, 0x0887800053a8976a, + // Entry 1C0 - 1DF + 0x08880001abaa9780, 0x0889b00073ac97ec, 0x088a80013bac980a, 0x088c000273ae985a, + 0x088e800083b098f8, 0x088f0800a3b0991a, 0x0890000093b29944, 0x0890980163b2996a, + 0x089400003bb499c4, 0x089440000bb499d4, 0x0894500023b499d8, 0x089478007bb499e2, + 0x0894f8005bb49a02, 0x08958001dbb69a1a, 0x0897800053b89a92, 0x0898000023b89aa8, + 0x0898280043b89ab2, 0x0898780013b89ac4, 0x08989800b3b89aca, 0x089950003bba9af8, + 0x0899900013ba9b08, 0x0899a8002bba9b0e, 0x0899e0004bba9b1a, 0x089a380013ba9b2e, + 0x089a58001bba9b34, 0x089a80000bba9b3c, 0x089ab8000bba9b40, 0x089ae8003bba9b44, + 0x089b30003bba9b54, 0x089b80002bbc9b64, 0x08a00002d3bc9b70, 0x08a2d8000bbe9c26, + // Entry 1E0 - 1FF + 0x08a2e8000bbe9c2a, 0x08a4000243be9c2e, 0x08a6800053c09cc0, 0x08ac0001b3c29cd6, + 0x08adc00133c49d44, 0x08b000022bc69d92, 0x08b2800053c89e1e, 0x08b300006bc89e34, + 0x08b40001c3c89e50, 0x08b6000053ca9ec2, 0x08b80000d3cc9ed8, 0x08b8e8007bcc9f0e, + 0x08b9800083cc9f2e, 0x08c500029bcc9f50, 0x08c7f8000bd29ff8, 0x08d60001cbd29ffc, + 0x08e000004bd4a070, 0x08e050016bd4a084, 0x08e1c00073d6a0e0, 0x08e28000ebd6a0fe, + 0x08e3800103d8a13a, 0x08e49000b3daa17c, 0x08e5480073daa1aa, 0x0900001cd3dca1c8, + 0x092000037c0ca8fe, 0x092380002c14a9de, 0x092400062414a9ea, 0x098000217c20ab74, + 0x0a2000123c52b3d4, 0x0b400011cc70b864, 0x0b520000fc8cbcd8, 0x0b530000548ebd18, + // Entry 200 - 21F + 0x0b537000148ebd2e, 0x0b568000f48ebd34, 0x0b578000348ebd72, 0x0b580002348ebd80, + 0x0b5a80005492be0e, 0x0b5ad8003c92be24, 0x0b5b1800ac94be34, 0x0b5be8009c94be60, + 0x0b7800022c96be88, 0x0b7a80017c98bf14, 0x0b7c78008c9abf74, 0x0b7f00000c9abf98, + 0x0b8000bf68013825, 0x0c4000179c9abf9c, 0x0d80000014b8c584, 0x0de000035cb8c58a, + 0x0de380006cbcc662, 0x0de400004cbcc67e, 0x0de4800054bec692, 0x0de4e00044bec6a8, + 0x0e800007b4bec6ba, 0x0e8800013cd2c8a8, 0x0e89480604d4c8f8, 0x0e90000234e0ca7a, + 0x0e980002bce4cb08, 0x0e9b000094e8cbb8, 0x0ea00002ace8cbde, 0x0ea2b0023ceecc8a, + 0x0ea4f00014f2cd1a, 0x0ea510000cf2cd20, 0x0ea5280014f2cd24, 0x0ea5480024f2cd2a, + // Entry 220 - 23F + 0x0ea5700064f2cd34, 0x0ea5d8000cf2cd4e, 0x0ea5e8003cf2cd52, 0x0ea628020cf4cd62, + 0x0ea8380024f8cde6, 0x0ea8680044f8cdf0, 0x0ea8b0003cf8ce02, 0x0ea8f000e4f8ce12, + 0x0ea9d80024face4c, 0x0eaa00002cface56, 0x0eaa30000cface62, 0x0eaa50003cface66, + 0x0eaa900aa4face76, 0x0eb540092512d120, 0x0ebe7015f528d36a, 0x0ed4d8002d60d8e8, + 0x0ed508007d60d8f4, 0x0f0000003d62d914, 0x0f0040008d62d924, 0x0f00d8003d64d948, + 0x0f0118001564d958, 0x0f0130002d64d95e, 0x0f4000062d64d96a, 0x0f4638008570daf6, + 0x0f4800025d70db18, 0x0f4a80005574dbb0, 0x0f4af0001574dbc6, 0x0f7000002574dbcc, + 0x0f702800dd74dbd6, 0x0f7108001576dc0e, 0x0f7120000d76dc14, 0x0f7138000d76dc18, + // Entry 240 - 25F + 0x0f7148005576dc1c, 0x0f71a0002576dc32, 0x0f71c8000d78dc3c, 0x0f71d8000d78dc40, + 0x0f7210000d78dc44, 0x0f7238000d78dc48, 0x0f7248000d78dc4c, 0x0f7258000d78dc50, + 0x0f7268001d78dc54, 0x0f7288001578dc5c, 0x0f72a0000d78dc62, 0x0f72b8000d78dc66, + 0x0f72c8000d78dc6a, 0x0f72d8000d78dc6e, 0x0f72e8000d78dc72, 0x0f72f8000d78dc76, + 0x0f7308001578dc7a, 0x0f7320000d78dc80, 0x0f7338002578dc84, 0x0f7360003d78dc8e, + 0x0f73a000257adc9e, 0x0f73c800257adca8, 0x0f73f0000d7adcb2, 0x0f740000557adcb6, + 0x0f7458008d7adccc, 0x0f7508001d7cdcf0, 0x0f7528002d7cdcf8, 0x0f7558008d7cdd04, + 0x0f778000157edd28, 0x0f800001657edd2e, 0x0f8180032580dd88, 0x0f8500007d84de52, + // Entry 260 - 27F + 0x0f8588007d86de72, 0x0f8608007d86de92, 0x0f8688012d88deb2, 0x0f8800006d88defe, + 0x0f888000fd8adf1a, 0x0f898001e58cdf5a, 0x0f8b8001ed90dfd4, 0x0f8f3000ed92e050, + 0x0f9080016594e08c, 0x0f9200004d98e0e6, 0x0f9280001598e0fa, 0x0f98001e9d98e100, + 0x0fb700006db8e8a8, 0x0fb780003db8e8c4, 0x0fb80003a5b8e8d4, 0x0fbc0002adbee9be, + 0x0fc0000065c4ea6a, 0x0fc08001c5c4ea84, 0x0fc2800055c8eaf6, 0x0fc3000145caeb0c, + 0x0fc48000f5cceb5e, 0x0fc880007dceeb9c, 0x0fc9000045ceebbc, 0x0fc980000dd0ebce, + 0x0fc9980065d0ebd2, 0x0fca000065d0ebec, 0x0fca80007dd0ec06, 0x0fcc000095d0ec26, + 0x0fce00000dd0ec4c, 0x10000536b8015c37, 0x15380081a8019237, 0x15ba0006f001c837, + // Entry 280 - 29F + 0x15c100b41001fe37, 0x17c00010f5d0ec50, 0x700008000df4f08e, 0x7001000305f4f092, + 0x7008000785f8f154, 0x780007fff002342d, 0x800007fff002602d, +} // Size: 5200 bytes + +var table1 = []uint16{ // 31130 elements + // Entry 0 - 3F + 0x0146, 0x014b, 0x015b, 0x0169, 0x0174, 0x017f, 0x018b, 0x0194, + 0x019e, 0x01ae, 0x01bf, 0x01c7, 0x01d0, 0x01d5, 0x01e1, 0x01ea, + 0x01f1, 0x01fb, 0x0204, 0x020d, 0x0218, 0x0222, 0x022c, 0x0235, + 0x0240, 0x024b, 0x0255, 0x025a, 0x0263, 0x0271, 0x027c, 0x028d, + 0x029a, 0x02a7, 0x02bd, 0x02d3, 0x02e9, 0x02ff, 0x0315, 0x032b, + 0x0341, 0x0357, 0x036d, 0x0383, 0x0399, 0x03af, 0x03c5, 0x03db, + 0x03f1, 0x0407, 0x041d, 0x0433, 0x0449, 0x045f, 0x0475, 0x048b, + 0x04a1, 0x04b7, 0x04cd, 0x04e3, 0x04f6, 0x0505, 0x0519, 0x052a, + // Entry 40 - 7F + 0x0532, 0x053e, 0x0552, 0x0566, 0x057a, 0x058e, 0x05a2, 0x05b6, + 0x05ca, 0x05de, 0x05f2, 0x0606, 0x061a, 0x062e, 0x0642, 0x0656, + 0x066a, 0x067e, 0x0692, 0x06a6, 0x06ba, 0x06ce, 0x06e2, 0x06f6, + 0x070a, 0x071e, 0x0732, 0x0746, 0x0758, 0x0765, 0x0778, 0x077d, + 0x037d, 0x038b, 0x03a4, 0x03ad, 0x03b7, 0x03c4, 0x03cc, 0x03d6, + 0x03e2, 0x03eb, 0x03f9, 0x0413, 0x043c, 0x0444, 0x044f, 0x045e, + 0x0464, 0x046f, 0x047e, 0x048d, 0x049e, 0x04aa, 0x04b4, 0x04c0, + 0x04ca, 0x04d1, 0x04e0, 0x04fb, 0x0525, 0x0540, 0x0558, 0x0576, + // Entry 80 - BF + 0x058c, 0x05ad, 0x05ce, 0x05f4, 0x0615, 0x063a, 0x0660, 0x0677, + 0x069a, 0x06bb, 0x06dc, 0x0702, 0x0727, 0x0748, 0x0769, 0x078f, + 0x07b4, 0x07cc, 0x07ed, 0x080e, 0x082f, 0x0855, 0x0876, 0x089b, + 0x08ae, 0x08d0, 0x08f1, 0x0912, 0x0938, 0x095d, 0x097e, 0x0998, + 0x09b2, 0x09d1, 0x09f0, 0x0a14, 0x0a33, 0x0a56, 0x0a7a, 0x0a8f, + 0x0ab0, 0x0acf, 0x0aee, 0x0b12, 0x0b35, 0x0b54, 0x0b73, 0x0b97, + 0x0bba, 0x0bd0, 0x0bef, 0x0c0e, 0x0c2d, 0x0c51, 0x0c70, 0x0c93, + 0x0ca0, 0x0cc0, 0x0cdf, 0x0cfe, 0x0d22, 0x0d45, 0x0d64, 0x0d7c, + // Entry C0 - FF + 0x0d9f, 0x0dc1, 0x0de1, 0x0e02, 0x0e21, 0x0e43, 0x0e63, 0x0e84, + 0x0ea3, 0x0ec9, 0x0eed, 0x0f12, 0x0f35, 0x0f56, 0x0f75, 0x0f96, + 0x0fb5, 0x0fd7, 0x0ff7, 0x1019, 0x1039, 0x105a, 0x1079, 0x109e, + 0x10c1, 0x10e3, 0x1103, 0x1124, 0x1143, 0x1169, 0x118d, 0x11ae, + 0x11cd, 0x11f2, 0x1215, 0x1238, 0x1259, 0x127f, 0x12a3, 0x12c5, + 0x12e5, 0x1306, 0x1325, 0x1347, 0x1367, 0x1388, 0x13a7, 0x13c9, + 0x13e9, 0x140e, 0x142a, 0x1443, 0x145a, 0x1480, 0x14a4, 0x14c7, + 0x14e8, 0x14fe, 0x151f, 0x153e, 0x1561, 0x1582, 0x15a3, 0x15c2, + // Entry 100 - 13F + 0x15e8, 0x160c, 0x162e, 0x164e, 0x166f, 0x168e, 0x16b1, 0x16d2, + 0x16f3, 0x1712, 0x173d, 0x1755, 0x176b, 0x178d, 0x17ad, 0x17ce, + 0x17ed, 0x1815, 0x183b, 0x1854, 0x186b, 0x188c, 0x18ab, 0x18ce, + 0x18ef, 0x1910, 0x192f, 0x1950, 0x196f, 0x1995, 0x19b9, 0x19dc, + 0x19fd, 0x1a1e, 0x1a3d, 0x1a60, 0x1a81, 0x1aa2, 0x1ac1, 0x1ae3, + 0x1b03, 0x1b24, 0x1b43, 0x1b65, 0x1b85, 0x1ba6, 0x1bc5, 0x1beb, + 0x1c0f, 0x1c37, 0x1c5d, 0x1c7f, 0x1c9f, 0x1cc5, 0x1ce9, 0x1d0f, + 0x1d33, 0x1d58, 0x1d79, 0x1d98, 0x1dbd, 0x1de0, 0x1e01, 0x1e20, + // Entry 140 - 17F + 0x1e39, 0x1e59, 0x1e79, 0x1e9b, 0x1ebb, 0x1ed8, 0x1ef3, 0x1f0e, + 0x1f2e, 0x1f4c, 0x1f6a, 0x1f8a, 0x1fac, 0x1fcc, 0x1feb, 0x200a, + 0x2024, 0x203f, 0x205f, 0x207d, 0x209d, 0x20b7, 0x20cc, 0x20e5, + 0x2107, 0x2127, 0x2145, 0x2162, 0x2187, 0x21a4, 0x21c9, 0x21f1, + 0x2219, 0x2239, 0x2257, 0x226e, 0x2283, 0x22a3, 0x22c1, 0x22d0, + 0x22ed, 0x2308, 0x2320, 0x233e, 0x2364, 0x2384, 0x23a2, 0x23cc, + 0x23ec, 0x240a, 0x2426, 0x2446, 0x2466, 0x2484, 0x24a6, 0x24c6, + 0x24de, 0x24ff, 0x251e, 0x253e, 0x255a, 0x2578, 0x2594, 0x25c2, + // Entry 180 - 1BF + 0x25d3, 0x25ec, 0x2606, 0x2621, 0x263d, 0x265f, 0x2694, 0x26b4, + 0x26cb, 0x26f5, 0x270a, 0x2721, 0x274b, 0x2760, 0x2781, 0x27a0, + 0x27c1, 0x27e0, 0x2801, 0x2820, 0x2841, 0x2860, 0x2890, 0x28be, + 0x28ed, 0x291a, 0x2949, 0x2976, 0x29a5, 0x29d2, 0x29ed, 0x2a1d, + 0x2a4b, 0x2a7b, 0x2aa9, 0x2acc, 0x2aed, 0x2b0f, 0x2b2f, 0x2b50, + 0x2b6f, 0x2b90, 0x2baf, 0x2bd1, 0x2bf1, 0x2c1e, 0x2c49, 0x2c6c, + 0x2c8d, 0x2cac, 0x2cc3, 0x2ced, 0x2d02, 0x2d23, 0x2d42, 0x2d5c, + 0x2d75, 0x2d96, 0x2db5, 0x2de5, 0x2e13, 0x2e35, 0x2e55, 0x2e81, + // Entry 1C0 - 1FF + 0x2eab, 0x2ed3, 0x2ef9, 0x2f23, 0x2f4b, 0x2f73, 0x2f99, 0x2fc3, + 0x2feb, 0x3013, 0x3039, 0x3063, 0x308b, 0x30b3, 0x30d9, 0x3103, + 0x312b, 0x3153, 0x3179, 0x31a3, 0x31cb, 0x31f3, 0x3219, 0x3243, + 0x326b, 0x3292, 0x32b7, 0x32de, 0x3303, 0x331c, 0x3333, 0x3354, + 0x3373, 0x339d, 0x33bb, 0x33d2, 0x33e7, 0x3407, 0x3425, 0x344a, + 0x346d, 0x3490, 0x34b1, 0x34e1, 0x350f, 0x353b, 0x3565, 0x358a, + 0x35ad, 0x35dd, 0x360b, 0x362d, 0x364d, 0x366b, 0x3689, 0x36a7, + 0x36c3, 0x36e0, 0x36fd, 0x371f, 0x3741, 0x3761, 0x3780, 0x37ab, + // Entry 200 - 23F + 0x37cf, 0x37f3, 0x3814, 0x3833, 0x3855, 0x386f, 0x388c, 0x38ae, + 0x38ce, 0x38f0, 0x3910, 0x393b, 0x395e, 0x3980, 0x39a0, 0x39c2, + 0x39e2, 0x39fd, 0x3a15, 0x3a34, 0x3a52, 0x3a6b, 0x3a89, 0x3aa7, + 0x3ac5, 0x3ae2, 0x3afa, 0x3b1c, 0x3b35, 0x3b57, 0x3b83, 0x3bac, + 0x3bd4, 0x3bf2, 0x3c0d, 0x3c29, 0x3c41, 0x3c5d, 0x3c78, 0x3c96, + 0x3cb7, 0x3cd7, 0x3cee, 0x3d0a, 0x3d30, 0x3d4e, 0x3d76, 0x3d8d, + 0x3da8, 0x3dd1, 0x3def, 0x3e12, 0x3e3a, 0x3e56, 0x3e71, 0x3e8e, + 0x3ead, 0x3ec3, 0x3ede, 0x3f07, 0x3f2c, 0x3f4e, 0x3f6c, 0x3f8e, + // Entry 240 - 27F + 0x3fb9, 0x3fd5, 0x3ffa, 0x4018, 0x402e, 0x405f, 0x4084, 0x40a4, + 0x40bf, 0x40e7, 0x40ff, 0x4119, 0x4137, 0x4152, 0x416d, 0x4188, + 0x41a4, 0x41cc, 0x41ea, 0x4200, 0x4220, 0x4239, 0x4261, 0x4283, + 0x429b, 0x42b6, 0x42d2, 0x42f2, 0x4318, 0x4334, 0x435a, 0x4375, + 0x4391, 0x43af, 0x43d4, 0x4402, 0x441f, 0x443e, 0x4465, 0x4482, + 0x44a1, 0x44c8, 0x44e7, 0x4504, 0x4521, 0x4541, 0x4561, 0x458a, + 0x45bc, 0x45d3, 0x45f4, 0x460b, 0x4622, 0x4640, 0x4668, 0x4690, + 0x46a7, 0x46be, 0x46d3, 0x46ef, 0x470b, 0x4725, 0x4743, 0x4762, + // Entry 280 - 2BF + 0x4780, 0x479c, 0x47c1, 0x47df, 0x47fe, 0x481a, 0x4838, 0x4859, + 0x485e, 0x487b, 0x4891, 0x48ad, 0x48c9, 0x48ea, 0x4904, 0x4924, + 0x4944, 0x4964, 0x4989, 0x49b0, 0x49d6, 0x49ed, 0x4a06, 0x4a1f, + 0x4a39, 0x4a3e, 0x4a47, 0x4a51, 0x4a57, 0x4a62, 0x4a75, 0x4a90, + 0x4aac, 0x4ac7, 0x4ade, 0x4af5, 0x4b0c, 0x4b37, 0x4b5a, 0x4b77, + 0x4b93, 0x4baf, 0x4bd1, 0x4bf8, 0x4c20, 0x4c37, 0x4c52, 0x4c73, + 0x4c95, 0x4cb5, 0x4cd7, 0x4cfa, 0x4d12, 0x4d35, 0x4d5f, 0x4d89, + 0x4da2, 0x4dbe, 0x4ddd, 0x4dfa, 0x4e18, 0x4e34, 0x4e49, 0x4e63, + // Entry 2C0 - 2FF + 0x4e81, 0x4e97, 0x4ead, 0x4ec8, 0x4ed7, 0x4ee7, 0x4ef9, 0x4f08, + 0x4f1b, 0x4f2e, 0x4f42, 0x4f56, 0x4f73, 0x4f82, 0x4f9f, 0x4fc3, + 0x4fe0, 0x4ff5, 0x500d, 0x5029, 0x503e, 0x505c, 0x5077, 0x5093, + 0x50af, 0x50c8, 0x50e2, 0x50fc, 0x510a, 0x5128, 0x513f, 0x5158, + 0x5171, 0x518b, 0x51ab, 0x51c9, 0x51dc, 0x51f5, 0x5209, 0x521e, + 0x522f, 0x523f, 0x525c, 0x5272, 0x5296, 0x52ab, 0x52cc, 0x52e1, + 0x52ff, 0x5314, 0x532a, 0x533c, 0x5355, 0x536c, 0x538a, 0x53a7, + 0x53c6, 0x53e4, 0x5403, 0x5422, 0x5438, 0x544f, 0x5460, 0x5478, + // Entry 300 - 33F + 0x5491, 0x54aa, 0x54c3, 0x54de, 0x54f5, 0x5514, 0x5531, 0x5547, + 0x5562, 0x5586, 0x55a0, 0x55b9, 0x55d3, 0x55f2, 0x5612, 0x562f, + 0x5648, 0x5667, 0x5685, 0x5696, 0x56a7, 0x56c5, 0x56e4, 0x5714, + 0x5733, 0x574c, 0x5764, 0x577f, 0x5795, 0x57b1, 0x57c7, 0x57de, + 0x57fb, 0x5811, 0x5830, 0x5857, 0x5875, 0x5893, 0x58b1, 0x58cf, + 0x58ed, 0x590b, 0x5929, 0x5947, 0x5965, 0x5983, 0x59a1, 0x59bf, + 0x59dd, 0x59f6, 0x5a0d, 0x5a2f, 0x5a4f, 0x5a61, 0x5a79, 0x5aa0, + 0x5ac5, 0x02c5, 0x02d8, 0x0300, 0x0326, 0x0355, 0x0368, 0x0380, + // Entry 340 - 37F + 0x0380, 0x038b, 0x03a0, 0x03c5, 0x03d5, 0x03fc, 0x041f, 0x0443, + 0x0043, 0x006a, 0x006a, 0x0091, 0x00b6, 0x00e6, 0x0100, 0x0119, + 0x0133, 0x014d, 0x0169, 0x0182, 0x019a, 0x01b4, 0x01cd, 0x01e7, + 0x0201, 0x0218, 0x022f, 0x0246, 0x0262, 0x0279, 0x0291, 0x0291, + 0x02ab, 0x02c3, 0x02df, 0x02f7, 0x030f, 0x0327, 0x0341, 0x0369, + 0x0394, 0x03b7, 0x03dc, 0x03fd, 0x041f, 0x0452, 0x046a, 0x0481, + 0x0499, 0x04b1, 0x04cb, 0x04e2, 0x04f8, 0x0510, 0x0527, 0x053f, + 0x0557, 0x056c, 0x0581, 0x0596, 0x05b0, 0x05c5, 0x05db, 0x05f9, + // Entry 380 - 3BF + 0x0611, 0x0627, 0x0641, 0x0657, 0x066d, 0x0683, 0x069b, 0x06c1, + 0x06ea, 0x070f, 0x0734, 0x0757, 0x076f, 0x0780, 0x0792, 0x07b0, + 0x07d8, 0x0804, 0x0814, 0x0823, 0x0833, 0x084d, 0x086d, 0x0880, + 0x0899, 0x08ad, 0x08c7, 0x08d9, 0x08f1, 0x0903, 0x091b, 0x0935, + 0x094d, 0x0966, 0x097d, 0x0997, 0x09af, 0x09c9, 0x09e1, 0x09fd, + 0x0a17, 0x0a32, 0x0a4b, 0x0a64, 0x0a7b, 0x0a8d, 0x0a9d, 0x0ab6, + 0x0ac6, 0x0ae0, 0x0afb, 0x0b1f, 0x0b37, 0x0b4d, 0x0b6e, 0x0b86, + 0x0b9c, 0x0bb8, 0x0be2, 0x0c0a, 0x0c3b, 0x0c60, 0x0c7a, 0x0c95, + // Entry 3C0 - 3FF + 0x0cb0, 0x0cd4, 0x0cef, 0x0d1f, 0x0d39, 0x0d53, 0x0d6e, 0x0d89, + 0x0da5, 0x0dc0, 0x0de4, 0x0e03, 0x0e1f, 0x0e38, 0x0e52, 0x0e6c, + 0x0e87, 0x0ea1, 0x0ebb, 0x0ed6, 0x0ef0, 0x0f09, 0x0f28, 0x0f42, + 0x0f5c, 0x0f76, 0x0f90, 0x0fa9, 0x0fc3, 0x0fdd, 0x0ff7, 0x1011, + 0x102a, 0x1044, 0x105e, 0x1079, 0x1094, 0x10af, 0x10cc, 0x10ed, + 0x1109, 0x112a, 0x1143, 0x115d, 0x1177, 0x118e, 0x11a6, 0x11be, + 0x11d7, 0x11ef, 0x1207, 0x1220, 0x1238, 0x124f, 0x126c, 0x1284, + 0x129c, 0x12b4, 0x12cc, 0x12e3, 0x12fb, 0x1313, 0x132b, 0x1343, + // Entry 400 - 43F + 0x135a, 0x1372, 0x138a, 0x13a3, 0x13bc, 0x13d5, 0x13f0, 0x140f, + 0x1429, 0x1448, 0x145f, 0x1477, 0x148f, 0x14b2, 0x14ca, 0x14e3, + 0x14fc, 0x151e, 0x1537, 0x1565, 0x157d, 0x1595, 0x15ae, 0x15c7, + 0x15e1, 0x15fa, 0x161c, 0x1639, 0x1653, 0x1670, 0x168b, 0x16a6, + 0x16bf, 0x16e1, 0x1701, 0x1723, 0x1743, 0x176e, 0x1797, 0x17b6, + 0x17d3, 0x17fb, 0x1821, 0x183c, 0x1855, 0x1870, 0x1889, 0x18a5, + 0x18bf, 0x18de, 0x18fb, 0x1933, 0x1969, 0x1983, 0x199b, 0x19be, + 0x19df, 0x1a07, 0x1a2d, 0x1a47, 0x1a5f, 0x1a7c, 0x1a97, 0x1aae, + // Entry 440 - 47F + 0x1ac6, 0x1ae7, 0x1b08, 0x1b29, 0x1b44, 0x1b6d, 0x1b8d, 0x1bb6, + 0x1bdd, 0x1c02, 0x1c25, 0x1c49, 0x1c6b, 0x1c92, 0x1cb7, 0x1cde, + 0x1d03, 0x1d2f, 0x1d59, 0x1d83, 0x1dab, 0x1dd4, 0x1dfb, 0x1e24, + 0x1e4b, 0x1e7a, 0x1ea7, 0x1ecd, 0x1ef1, 0x1f13, 0x1f33, 0x1f5c, + 0x1f83, 0x1fa3, 0x1fc1, 0x1fec, 0x2015, 0x2039, 0x205b, 0x2084, + 0x20ab, 0x20d4, 0x20fb, 0x211d, 0x213d, 0x216b, 0x2197, 0x21c0, + 0x21e7, 0x2207, 0x2225, 0x224f, 0x2277, 0x22a7, 0x22d5, 0x22f1, + 0x230b, 0x2330, 0x2353, 0x2387, 0x23b9, 0x23d1, 0x23f7, 0x241b, + // Entry 480 - 4BF + 0x243f, 0x2461, 0x2485, 0x24a7, 0x24cb, 0x24ed, 0x2511, 0x2533, + 0x2559, 0x257d, 0x25a1, 0x25c3, 0x25e1, 0x2605, 0x2627, 0x264f, + 0x2675, 0x2693, 0x26af, 0x26d4, 0x26f7, 0x2714, 0x272f, 0x275b, + 0x2785, 0x27af, 0x27d7, 0x2800, 0x2827, 0x284c, 0x286f, 0x2894, + 0x28b7, 0x28df, 0x2905, 0x292d, 0x2953, 0x2973, 0x2991, 0x29c0, + 0x29ed, 0x2a15, 0x2a3b, 0x2a60, 0x2a83, 0x2aab, 0x2ad1, 0x2afc, + 0x2b25, 0x2b4f, 0x2b77, 0x2ba1, 0x2bc9, 0x2bf4, 0x2c1d, 0x2c4d, + 0x2c7b, 0x2c9f, 0x2cc1, 0x2ce7, 0x2d0b, 0x2d2a, 0x2d47, 0x2d67, + // Entry 4C0 - 4FF + 0x2d85, 0x2da5, 0x2dc3, 0x2de4, 0x2e03, 0x2e23, 0x2e41, 0x2e61, + 0x2e7f, 0x2e9f, 0x2ebd, 0x2edd, 0x2efb, 0x2f1e, 0x2f3f, 0x2f63, + 0x2f85, 0x2fa0, 0x2fb9, 0x2fd4, 0x2fed, 0x3008, 0x3021, 0x303b, + 0x3053, 0x306d, 0x3085, 0x30a5, 0x30c3, 0x30ee, 0x3117, 0x3142, + 0x316b, 0x3194, 0x31bb, 0x31e6, 0x320f, 0x3238, 0x325f, 0x327c, + 0x3297, 0x32b3, 0x32cd, 0x32f6, 0x331d, 0x031d, 0x0338, 0x0353, + 0x036e, 0x0388, 0x03a3, 0x03bd, 0x03d7, 0x03f1, 0x040b, 0x0426, + 0x0441, 0x045d, 0x0478, 0x0492, 0x04ad, 0x04c7, 0x04e1, 0x04fd, + // Entry 500 - 53F + 0x0519, 0x0534, 0x054e, 0x0569, 0x0584, 0x059e, 0x05b9, 0x05d4, + 0x05f0, 0x060a, 0x0625, 0x0640, 0x065c, 0x0677, 0x0691, 0x06ad, + 0x06c9, 0x06e4, 0x06fe, 0x0719, 0x0319, 0x0340, 0x0353, 0x0369, + 0x0382, 0x0390, 0x03a6, 0x03c0, 0x03c0, 0x03d9, 0x03f2, 0x040b, + 0x0423, 0x043c, 0x0454, 0x046c, 0x0484, 0x049c, 0x04b5, 0x04ce, + 0x04e8, 0x0501, 0x0519, 0x0532, 0x054a, 0x0562, 0x057c, 0x0596, + 0x05af, 0x05c7, 0x05e0, 0x05f9, 0x0611, 0x062a, 0x0643, 0x065d, + 0x0675, 0x068e, 0x06a7, 0x06c1, 0x06da, 0x06f2, 0x070c, 0x0726, + // Entry 540 - 57F + 0x073f, 0x0757, 0x0770, 0x0790, 0x0390, 0x03a2, 0x03b1, 0x03b1, + 0x03d4, 0x03f6, 0x0408, 0x0008, 0x001d, 0x0030, 0x0048, 0x0061, + 0x007a, 0x008e, 0x00a1, 0x00b4, 0x00c8, 0x00db, 0x00ee, 0x0102, + 0x011d, 0x0134, 0x014d, 0x0169, 0x017c, 0x0196, 0x01a9, 0x01bf, + 0x01d3, 0x01ee, 0x0201, 0x0214, 0x0230, 0x024c, 0x025d, 0x026f, + 0x0281, 0x0294, 0x02ad, 0x02bf, 0x02d7, 0x02ef, 0x0308, 0x031a, + 0x032c, 0x033e, 0x0350, 0x0363, 0x0375, 0x0395, 0x03a8, 0x03c4, + 0x03d6, 0x03ee, 0x03ff, 0x0417, 0x042c, 0x0440, 0x045c, 0x0471, + // Entry 580 - 5BF + 0x0486, 0x04a4, 0x04bd, 0x00bd, 0x00cf, 0x00e0, 0x00f3, 0x0106, + 0x0116, 0x0127, 0x013a, 0x014b, 0x015c, 0x016d, 0x0184, 0x0195, + 0x01a8, 0x01bf, 0x01d0, 0x01e7, 0x01f8, 0x020c, 0x021e, 0x0234, + 0x0244, 0x025d, 0x0270, 0x0281, 0x0293, 0x02a5, 0x02b6, 0x02b6, + 0x02d8, 0x02f7, 0x0319, 0x0332, 0x034e, 0x034e, 0x0360, 0x0371, + 0x0387, 0x0398, 0x03aa, 0x03c2, 0x03d8, 0x03f0, 0x03fa, 0x0415, + 0x0437, 0x0443, 0x044f, 0x0464, 0x047c, 0x048d, 0x04b5, 0x04d0, + 0x04ee, 0x050b, 0x0520, 0x0535, 0x0566, 0x057c, 0x058e, 0x05a0, + // Entry 5C0 - 5FF + 0x05b2, 0x05c2, 0x05d4, 0x01d4, 0x01f6, 0x020a, 0x0224, 0x0237, + 0x025a, 0x027d, 0x029f, 0x02c2, 0x02e4, 0x02f6, 0x0307, 0x0320, + 0x0331, 0x0343, 0x0355, 0x0366, 0x0378, 0x0389, 0x039b, 0x03ac, + 0x03be, 0x03d0, 0x03e3, 0x03f4, 0x0405, 0x0416, 0x0427, 0x0438, + 0x044b, 0x0472, 0x049b, 0x04c2, 0x04ed, 0x051a, 0x0528, 0x0539, + 0x054a, 0x055b, 0x056c, 0x057e, 0x0590, 0x05a1, 0x05b2, 0x05cc, + 0x05dd, 0x05ec, 0x05fb, 0x060a, 0x0616, 0x0622, 0x062e, 0x063b, + 0x0647, 0x065a, 0x066c, 0x067e, 0x0693, 0x06a8, 0x06bf, 0x06ce, + // Entry 600 - 63F + 0x06ed, 0x0715, 0x0730, 0x0745, 0x075f, 0x0776, 0x078d, 0x07a3, + 0x07b9, 0x07d1, 0x07e8, 0x07ff, 0x0815, 0x082d, 0x0845, 0x085c, + 0x086f, 0x0887, 0x08a1, 0x08b9, 0x08d2, 0x08eb, 0x0909, 0x0921, + 0x0949, 0x0971, 0x0989, 0x09a6, 0x09c2, 0x09e2, 0x09fe, 0x0a10, + 0x0a24, 0x0a36, 0x0a51, 0x0a82, 0x0a93, 0x0aa6, 0x0ab9, 0x0adb, + 0x0b09, 0x0b1b, 0x0b2d, 0x0b54, 0x0b67, 0x0b7c, 0x0b8e, 0x0ba9, + 0x0bc9, 0x0bf7, 0x0c0a, 0x0c1e, 0x0c2f, 0x0c60, 0x0c86, 0x0c98, + 0x0cb6, 0x0cd1, 0x0cf1, 0x0d15, 0x0d43, 0x0d68, 0x0d79, 0x0d9f, + // Entry 640 - 67F + 0x0dce, 0x0df6, 0x0e33, 0x0e58, 0x0e7f, 0x0ea6, 0x0ecd, 0x0ee6, + 0x0f0c, 0x0f2c, 0x0f3d, 0x0f64, 0x0f77, 0x0f97, 0x0fbe, 0x0fd1, + 0x0fe8, 0x1003, 0x1023, 0x1033, 0x105a, 0x106b, 0x1086, 0x1099, + 0x10be, 0x10d0, 0x10f7, 0x1115, 0x1135, 0x115c, 0x1183, 0x11a4, + 0x11bd, 0x11d0, 0x11ec, 0x1214, 0x1231, 0x1253, 0x1273, 0x1289, + 0x12b0, 0x12ce, 0x12e9, 0x1301, 0x1311, 0x1320, 0x1330, 0x1348, + 0x136d, 0x137d, 0x1394, 0x13af, 0x13cd, 0x13ed, 0x13fc, 0x1423, + 0x143b, 0x1464, 0x1474, 0x1484, 0x14bd, 0x14f6, 0x1519, 0x1533, + // Entry 680 - 6BF + 0x1549, 0x1565, 0x157b, 0x158d, 0x15a8, 0x15c6, 0x15f0, 0x1616, + 0x163a, 0x164f, 0x1666, 0x1676, 0x1686, 0x169b, 0x16b1, 0x16c7, + 0x16e3, 0x1700, 0x172b, 0x1740, 0x1761, 0x1782, 0x17a2, 0x17c1, + 0x17e0, 0x1801, 0x1821, 0x1841, 0x1860, 0x1881, 0x18a2, 0x18c2, + 0x18e4, 0x1904, 0x1926, 0x1942, 0x1965, 0x1986, 0x199d, 0x19b9, + 0x19d3, 0x19eb, 0x1a01, 0x1a18, 0x1a30, 0x1a49, 0x1a6d, 0x1a90, + 0x1aa2, 0x1ab8, 0x1ad1, 0x1aeb, 0x02eb, 0x0303, 0x0316, 0x0335, + 0x0347, 0x035a, 0x0376, 0x038a, 0x03ab, 0x03bb, 0x03cc, 0x03de, + // Entry 6C0 - 6FF + 0x03f0, 0x0402, 0x041d, 0x042f, 0x0444, 0x0456, 0x046a, 0x047b, + 0x048c, 0x04a1, 0x04bc, 0x04cb, 0x04db, 0x04f4, 0x0507, 0x0519, + 0x052b, 0x053d, 0x054e, 0x0569, 0x0585, 0x05a2, 0x05b5, 0x05c8, + 0x05dc, 0x05ef, 0x0602, 0x0616, 0x0628, 0x063a, 0x0658, 0x0673, + 0x0685, 0x0697, 0x06b0, 0x06c2, 0x06d4, 0x06e0, 0x06f3, 0x0703, + 0x0712, 0x0730, 0x074e, 0x0765, 0x077c, 0x0795, 0x07ae, 0x07ba, + 0x07c8, 0x03c8, 0x03e3, 0x03fe, 0x0416, 0x044a, 0x047f, 0x04b7, + 0x0502, 0x0535, 0x0562, 0x0580, 0x05a5, 0x05dd, 0x061b, 0x0648, + // Entry 700 - 73F + 0x0665, 0x068c, 0x06b1, 0x06eb, 0x071b, 0x0740, 0x0778, 0x079a, + 0x07c3, 0x07fd, 0x081e, 0x083f, 0x0865, 0x0886, 0x08a5, 0x08bf, + 0x08ef, 0x0911, 0x0942, 0x0976, 0x09b1, 0x09ed, 0x0a28, 0x0a5c, + 0x0a99, 0x0ad8, 0x0b1a, 0x0b5e, 0x0ba1, 0x0bdd, 0x0c1b, 0x0c5e, + 0x0ca3, 0x0ce0, 0x0d1e, 0x0d40, 0x0d65, 0x0d76, 0x0d8d, 0x0da0, + 0x0db1, 0x0dc2, 0x0dd9, 0x0dec, 0x0dff, 0x0e12, 0x0e25, 0x0e38, + 0x0e4c, 0x0e5e, 0x0e71, 0x0e84, 0x0e9b, 0x0eae, 0x0ec4, 0x0eda, + 0x0ef0, 0x0f01, 0x0f17, 0x0f2d, 0x0f44, 0x0f56, 0x0f68, 0x0f7a, + // Entry 740 - 77F + 0x0f8e, 0x0f9f, 0x0fb3, 0x0fc7, 0x0fdb, 0x0feb, 0x0ffb, 0x100d, + 0x1021, 0x1034, 0x1047, 0x1055, 0x1065, 0x1073, 0x1083, 0x1091, + 0x10a1, 0x10af, 0x10bf, 0x10cd, 0x10dd, 0x10e9, 0x10fa, 0x00fa, + 0x0108, 0x0115, 0x0122, 0x0131, 0x013f, 0x014d, 0x015a, 0x0169, + 0x0178, 0x0186, 0x0192, 0x019f, 0x01ab, 0x01b7, 0x01c3, 0x01d0, + 0x01dc, 0x01f1, 0x01fd, 0x020a, 0x0217, 0x0224, 0x0231, 0x023f, + 0x024c, 0x0259, 0x0267, 0x0274, 0x0282, 0x028f, 0x029c, 0x02a9, + 0x02bd, 0x02ca, 0x02d8, 0x02e5, 0x02f2, 0x02ff, 0x030c, 0x0321, + // Entry 780 - 7BF + 0x0333, 0x0346, 0x0358, 0x0375, 0x0391, 0x03b0, 0x03d2, 0x03ee, + 0x0409, 0x0427, 0x0446, 0x0464, 0x047c, 0x0493, 0x04a7, 0x04bc, + 0x04c5, 0x04d9, 0x04e7, 0x00e7, 0x00fc, 0x0110, 0x0126, 0x013c, + 0x014f, 0x0163, 0x0177, 0x018a, 0x019e, 0x01b2, 0x01c7, 0x01dd, + 0x01f1, 0x0205, 0x021d, 0x0230, 0x0243, 0x025b, 0x026f, 0x0284, + 0x0299, 0x02ae, 0x02bf, 0x02d5, 0x02ed, 0x0302, 0x032a, 0x0347, + 0x0362, 0x0378, 0x0398, 0x03b4, 0x03cb, 0x03ea, 0x0405, 0x041b, + 0x043c, 0x0458, 0x0473, 0x0489, 0x04a4, 0x04bf, 0x04d5, 0x04eb, + // Entry 7C0 - 7FF + 0x0505, 0x051b, 0x011b, 0x0138, 0x0154, 0x016f, 0x0188, 0x01a4, + 0x01c4, 0x01df, 0x0202, 0x021d, 0x0238, 0x0252, 0x026c, 0x0289, + 0x02ab, 0x02c7, 0x02c7, 0x02db, 0x02ec, 0x02fd, 0x030e, 0x031f, + 0x0335, 0x0346, 0x0357, 0x0369, 0x037c, 0x038d, 0x039e, 0x03af, + 0x03c0, 0x03d1, 0x03e2, 0x03f3, 0x0405, 0x0416, 0x0427, 0x0439, + 0x044a, 0x0461, 0x0473, 0x0485, 0x049d, 0x04b6, 0x04cd, 0x00cd, + 0x00e0, 0x00e0, 0x0104, 0x0126, 0x014c, 0x0171, 0x01a6, 0x01c6, + 0x01e7, 0x020f, 0x0244, 0x0277, 0x0292, 0x02b3, 0x02cd, 0x02e3, + // Entry 800 - 83F + 0x030a, 0x0331, 0x0357, 0x0371, 0x0399, 0x03c0, 0x03e0, 0x03e0, + 0x0407, 0x042e, 0x0454, 0x047b, 0x04b5, 0x04ce, 0x04e7, 0x0501, + 0x0101, 0x011e, 0x0133, 0x0148, 0x015d, 0x017e, 0x019e, 0x01c1, + 0x01e0, 0x01fe, 0x021a, 0x0234, 0x0250, 0x0271, 0x028d, 0x02a8, + 0x02c1, 0x02d3, 0x02e5, 0x02f7, 0x030c, 0x0321, 0x0336, 0x034f, + 0x0369, 0x037f, 0x0398, 0x03b2, 0x03c8, 0x03dc, 0x03f0, 0x0404, + 0x0419, 0x042f, 0x044a, 0x0465, 0x0480, 0x049c, 0x04b7, 0x04d3, + 0x04f6, 0x0522, 0x0547, 0x055c, 0x057c, 0x05a0, 0x05bb, 0x05d3, + // Entry 840 - 87F + 0x05ea, 0x0603, 0x0616, 0x062a, 0x063d, 0x0651, 0x0664, 0x0678, + 0x0693, 0x06ae, 0x06c8, 0x06e1, 0x06f4, 0x0708, 0x0722, 0x073b, + 0x074e, 0x0762, 0x0776, 0x078b, 0x079f, 0x07b4, 0x07c9, 0x07dd, + 0x07f2, 0x0806, 0x081b, 0x0830, 0x0845, 0x085b, 0x0870, 0x0886, + 0x089b, 0x08af, 0x08c4, 0x08d8, 0x08ed, 0x0901, 0x0917, 0x092b, + 0x0940, 0x0954, 0x0969, 0x097d, 0x0991, 0x09a5, 0x09ba, 0x09ce, + 0x09e3, 0x09f9, 0x0a0d, 0x0a22, 0x0a37, 0x0a4b, 0x0a5f, 0x0a77, + 0x0a90, 0x0aa5, 0x0abd, 0x0ad5, 0x0aec, 0x0b04, 0x0b1b, 0x0b33, + // Entry 880 - 8BF + 0x0b52, 0x0b72, 0x0b90, 0x0bad, 0x0bc4, 0x0bdc, 0x0bfa, 0x0c17, + 0x0c2e, 0x0c46, 0x0c5c, 0x0c81, 0x0c99, 0x0ca6, 0x0cc3, 0x0ce2, + 0x0cf9, 0x0d10, 0x0d33, 0x0d4b, 0x0d64, 0x0d78, 0x0d8e, 0x0da4, + 0x0db8, 0x0dcf, 0x0de4, 0x0df8, 0x0e0d, 0x0e29, 0x0e45, 0x0e64, + 0x0e84, 0x0e94, 0x0eab, 0x0ec0, 0x0ed4, 0x0ee8, 0x0efe, 0x0f13, + 0x0f28, 0x0f3c, 0x0f52, 0x0f68, 0x0f7d, 0x0f99, 0x0fb9, 0x0fd3, + 0x0fe7, 0x0ffc, 0x1010, 0x1024, 0x1039, 0x1056, 0x106b, 0x1085, + 0x109a, 0x10af, 0x10cd, 0x10e3, 0x10f8, 0x1104, 0x111c, 0x1131, + // Entry 8C0 - 8FF + 0x1145, 0x0145, 0x0155, 0x0166, 0x0176, 0x0187, 0x0197, 0x01a8, + 0x01c0, 0x01d8, 0x01d8, 0x01e8, 0x01f9, 0x01f9, 0x0209, 0x021a, + 0x022b, 0x023d, 0x024e, 0x0260, 0x0272, 0x0283, 0x0295, 0x02a6, + 0x02b8, 0x02ca, 0x02dc, 0x02ef, 0x0301, 0x0314, 0x0326, 0x0337, + 0x0349, 0x035a, 0x036c, 0x037d, 0x037d, 0x038e, 0x03a0, 0x03b1, + 0x03c3, 0x03d4, 0x03e5, 0x03f6, 0x03f6, 0x0407, 0x0007, 0x0019, + 0x002b, 0x003c, 0x004d, 0x004d, 0x005f, 0x0074, 0x0089, 0x009d, + 0x00b2, 0x00c6, 0x00db, 0x00f7, 0x0114, 0x0114, 0x0128, 0x013d, + // Entry 900 - 93F + 0x013d, 0x0151, 0x0166, 0x0179, 0x0191, 0x0191, 0x01a7, 0x01a7, + 0x01b9, 0x01cb, 0x01cb, 0x01dd, 0x01f6, 0x020f, 0x022b, 0x0248, + 0x0248, 0x025a, 0x026b, 0x027c, 0x028f, 0x02a1, 0x02b3, 0x02c4, + 0x02d7, 0x02ea, 0x02fc, 0x0322, 0x0347, 0x0359, 0x036b, 0x0389, + 0x03a7, 0x03c7, 0x03e6, 0x041e, 0x0442, 0x0450, 0x0462, 0x0062, + 0x007a, 0x008d, 0x00a2, 0x00a2, 0x00b3, 0x00c5, 0x00d6, 0x00e8, + 0x00f9, 0x010b, 0x010b, 0x011d, 0x012f, 0x012f, 0x0141, 0x0153, + 0x0165, 0x0178, 0x018a, 0x019d, 0x01b0, 0x01c2, 0x01d5, 0x01e7, + // Entry 940 - 97F + 0x01fa, 0x020d, 0x0220, 0x0234, 0x0247, 0x025b, 0x026e, 0x0280, + 0x0293, 0x02a5, 0x02b8, 0x02ca, 0x02ca, 0x02dc, 0x02ef, 0x0301, + 0x0314, 0x0326, 0x0338, 0x034a, 0x034a, 0x035c, 0x036f, 0x036f, + 0x0381, 0x0394, 0x0394, 0x03a6, 0x03b8, 0x03b8, 0x03cb, 0x03cb, + 0x03e1, 0x03f6, 0x040c, 0x0421, 0x0437, 0x0037, 0x004d, 0x0063, + 0x0063, 0x0079, 0x008f, 0x00a3, 0x00a3, 0x00b6, 0x00b6, 0x00ca, + 0x00de, 0x00f0, 0x0103, 0x0103, 0x0115, 0x0115, 0x0128, 0x013a, + 0x014c, 0x0160, 0x0173, 0x0186, 0x0198, 0x01ac, 0x01c0, 0x01d3, + // Entry 980 - 9BF + 0x01e1, 0x01ef, 0x01fb, 0x0207, 0x0218, 0x022c, 0x022c, 0x0245, + 0x025b, 0x0270, 0x0270, 0x0281, 0x0293, 0x02a4, 0x02b6, 0x02c7, + 0x02d9, 0x02f2, 0x030b, 0x0322, 0x0322, 0x0333, 0x0345, 0x035c, + 0x035c, 0x036d, 0x037f, 0x0391, 0x03a4, 0x03b6, 0x03c9, 0x03dc, + 0x03ee, 0x0401, 0x0413, 0x0426, 0x0439, 0x044c, 0x0460, 0x0473, + 0x0487, 0x049a, 0x04ac, 0x04bf, 0x04d1, 0x04e4, 0x04f6, 0x00f6, + 0x0108, 0x011b, 0x012d, 0x0140, 0x0152, 0x0164, 0x0176, 0x0176, + 0x0188, 0x019b, 0x019b, 0x01ad, 0x01c0, 0x01d3, 0x01e5, 0x01f7, + // Entry 9C0 - 9FF + 0x01f7, 0x020a, 0x0220, 0x0236, 0x024b, 0x0261, 0x0276, 0x028c, + 0x02a9, 0x02c7, 0x02e3, 0x02e3, 0x02f8, 0x030e, 0x032a, 0x032a, + 0x033f, 0x0355, 0x0369, 0x0369, 0x0374, 0x0374, 0x038e, 0x03a8, + 0x03c5, 0x03e3, 0x03e3, 0x03f6, 0x0408, 0x041a, 0x042e, 0x0441, + 0x0454, 0x0466, 0x047a, 0x048e, 0x04a1, 0x04bb, 0x04ce, 0x00ce, + 0x00e1, 0x00e1, 0x00f7, 0x010a, 0x011c, 0x011c, 0x012a, 0x0139, + 0x0147, 0x0156, 0x0164, 0x0173, 0x0189, 0x019f, 0x019f, 0x01ad, + 0x01bc, 0x01bc, 0x01ca, 0x01d9, 0x01e8, 0x01f8, 0x0207, 0x0217, + // Entry A00 - A3F + 0x0227, 0x0236, 0x0246, 0x0255, 0x0265, 0x0275, 0x0285, 0x0296, + 0x02a6, 0x02b7, 0x02c7, 0x02d6, 0x02e6, 0x02f5, 0x0305, 0x0314, + 0x0314, 0x0323, 0x0333, 0x0342, 0x0352, 0x0361, 0x0370, 0x037f, + 0x037f, 0x038e, 0x039e, 0x039e, 0x03ad, 0x03bd, 0x03cd, 0x03dc, + 0x03eb, 0x03eb, 0x03fb, 0x040e, 0x0421, 0x0433, 0x0446, 0x0458, + 0x046b, 0x0485, 0x04a0, 0x00a0, 0x00b2, 0x00c5, 0x00c5, 0x00d7, + 0x00ea, 0x00fb, 0x00fb, 0x010f, 0x0123, 0x0123, 0x0133, 0x0143, + 0x0143, 0x0153, 0x016a, 0x0181, 0x019b, 0x01b6, 0x01b6, 0x01c6, + // Entry A40 - A7F + 0x01d5, 0x01e4, 0x01f5, 0x0205, 0x0215, 0x0224, 0x0235, 0x0246, + 0x0256, 0x0262, 0x0271, 0x028b, 0x02a2, 0x02bf, 0x02db, 0x02f4, + 0x0313, 0x0313, 0x0326, 0x0338, 0x0338, 0x0346, 0x0355, 0x0363, + 0x0372, 0x0380, 0x038f, 0x038f, 0x039d, 0x03ac, 0x03bb, 0x03bb, + 0x03c9, 0x03d8, 0x03e7, 0x03f6, 0x03f6, 0x0406, 0x0415, 0x0015, + 0x0024, 0x0024, 0x0034, 0x0044, 0x0044, 0x0054, 0x0063, 0x0063, + 0x0072, 0x0083, 0x0092, 0x0092, 0x00a1, 0x00b0, 0x00bf, 0x00cf, + 0x00de, 0x00ee, 0x00ff, 0x010e, 0x011e, 0x012e, 0x013d, 0x014c, + // Entry A80 - ABF + 0x014c, 0x015f, 0x0171, 0x0184, 0x0196, 0x01a9, 0x01a9, 0x01bb, + 0x01ce, 0x01e1, 0x01e1, 0x01f3, 0x0206, 0x0219, 0x022a, 0x022a, + 0x0232, 0x0232, 0x0246, 0x0246, 0x0256, 0x0265, 0x0274, 0x0285, + 0x0295, 0x02a5, 0x02b4, 0x02c5, 0x02d6, 0x02e6, 0x02f6, 0x030e, + 0x0327, 0x0335, 0x0345, 0x0354, 0x0364, 0x0375, 0x0388, 0x0398, + 0x03a9, 0x03a9, 0x03d0, 0x03e7, 0x03fb, 0x040e, 0x000e, 0x001d, + 0x002d, 0x003c, 0x004c, 0x005b, 0x006b, 0x0082, 0x0099, 0x0099, + 0x00a8, 0x00b8, 0x00c8, 0x00c8, 0x00d7, 0x00e7, 0x00f7, 0x0107, + // Entry AC0 - AFF + 0x0118, 0x0128, 0x0139, 0x014a, 0x015a, 0x016b, 0x017b, 0x018c, + 0x019d, 0x01ae, 0x01c0, 0x01d1, 0x01e3, 0x01f4, 0x0204, 0x0215, + 0x0225, 0x0236, 0x0246, 0x0246, 0x0256, 0x0267, 0x0277, 0x0288, + 0x0298, 0x02a8, 0x02b8, 0x02c9, 0x02d9, 0x02ea, 0x02fc, 0x030c, + 0x031d, 0x032e, 0x033e, 0x034e, 0x034e, 0x0362, 0x0376, 0x0389, + 0x039d, 0x03b0, 0x03c4, 0x03df, 0x03fb, 0x03fb, 0x040e, 0x0422, + 0x0436, 0x0036, 0x0049, 0x005d, 0x0071, 0x0083, 0x0083, 0x0095, + 0x00aa, 0x00aa, 0x00bb, 0x00cc, 0x00de, 0x00de, 0x00f6, 0x010e, + // Entry B00 - B3F + 0x0129, 0x0145, 0x0145, 0x0156, 0x0166, 0x0176, 0x0188, 0x0199, + 0x01aa, 0x01ba, 0x01cc, 0x01de, 0x01ef, 0x01ef, 0x0220, 0x0250, + 0x0280, 0x02b2, 0x02e3, 0x0314, 0x0347, 0x0358, 0x0378, 0x0390, + 0x03a5, 0x03b9, 0x03b9, 0x03c9, 0x03da, 0x03ea, 0x03fb, 0x040b, + 0x041c, 0x0434, 0x044c, 0x004c, 0x005c, 0x006d, 0x007e, 0x007e, + 0x008e, 0x009f, 0x00b0, 0x00c1, 0x00d3, 0x00e4, 0x00f6, 0x0108, + 0x0119, 0x012b, 0x013c, 0x014e, 0x0160, 0x0172, 0x0185, 0x0197, + 0x01aa, 0x01bc, 0x01cd, 0x01df, 0x01f0, 0x0202, 0x0213, 0x0213, + // Entry B40 - B7F + 0x0224, 0x0236, 0x0247, 0x0259, 0x026a, 0x027b, 0x028c, 0x029e, + 0x02af, 0x02c1, 0x02c1, 0x02d2, 0x02e4, 0x02f6, 0x0307, 0x0318, + 0x0318, 0x032a, 0x033f, 0x0354, 0x0368, 0x037d, 0x0391, 0x03a6, + 0x03c2, 0x03df, 0x03df, 0x03f3, 0x0408, 0x041d, 0x001d, 0x0031, + 0x0046, 0x005b, 0x006e, 0x006e, 0x0081, 0x0097, 0x0097, 0x00a8, + 0x00a8, 0x00c1, 0x00da, 0x00f6, 0x0113, 0x0113, 0x0125, 0x0136, + 0x0147, 0x015a, 0x016c, 0x017e, 0x018f, 0x01a2, 0x01b5, 0x01c7, + 0x01c7, 0x01df, 0x01f7, 0x01f7, 0x0211, 0x0228, 0x023e, 0x023e, + // Entry B80 - BBF + 0x0250, 0x0263, 0x0275, 0x0288, 0x029a, 0x02ad, 0x02c7, 0x02e1, + 0x02e1, 0x02f3, 0x0306, 0x0319, 0x0319, 0x032b, 0x033e, 0x0351, + 0x0364, 0x0378, 0x038b, 0x039f, 0x03b3, 0x03c6, 0x03da, 0x03ed, + 0x0401, 0x0415, 0x0429, 0x043e, 0x0452, 0x0467, 0x047b, 0x048e, + 0x04a2, 0x04b5, 0x04c9, 0x04dc, 0x04f1, 0x0504, 0x0518, 0x052b, + 0x053f, 0x0552, 0x0565, 0x0578, 0x058c, 0x059f, 0x05b3, 0x05c8, + 0x05db, 0x05ef, 0x0603, 0x0616, 0x0629, 0x063e, 0x023e, 0x0255, + 0x026c, 0x0282, 0x0299, 0x02af, 0x02c6, 0x02e4, 0x0303, 0x0303, + // Entry BC0 - BFF + 0x0319, 0x0330, 0x0347, 0x0347, 0x035d, 0x0374, 0x038b, 0x03a0, + 0x03b9, 0x03cc, 0x03cc, 0x03e5, 0x03fe, 0x0419, 0x0431, 0x0460, + 0x047f, 0x04a2, 0x04c2, 0x04de, 0x0501, 0x051d, 0x0538, 0x0553, + 0x056e, 0x058c, 0x05ab, 0x01ab, 0x01bf, 0x01d2, 0x01e5, 0x01fa, + 0x020e, 0x0222, 0x0235, 0x024a, 0x025f, 0x0273, 0x0287, 0x02a3, + 0x02c0, 0x02de, 0x02f9, 0x031a, 0x033a, 0x0357, 0x037a, 0x038d, + 0x03a7, 0x03c0, 0x03da, 0x03f3, 0x040d, 0x0426, 0x0026, 0x003d, + 0x0053, 0x0053, 0x0068, 0x007e, 0x0094, 0x00ab, 0x00c0, 0x00d6, + // Entry C00 - C3F + 0x00eb, 0x0101, 0x0118, 0x0130, 0x0147, 0x015f, 0x0174, 0x018a, + 0x01a0, 0x01b5, 0x01cb, 0x01e1, 0x01e1, 0x0202, 0x0224, 0x0245, + 0x0267, 0x0288, 0x02a6, 0x02c7, 0x02e9, 0x030a, 0x032c, 0x034d, + 0x0378, 0x0396, 0x03b8, 0x03db, 0x03fd, 0x0420, 0x0440, 0x045f, + 0x0480, 0x04a2, 0x04c3, 0x04e5, 0x0503, 0x0103, 0x0121, 0x0142, + 0x0164, 0x0185, 0x01a7, 0x01bd, 0x01d8, 0x01ee, 0x0204, 0x0204, + 0x0222, 0x0222, 0x0238, 0x0256, 0x0276, 0x0294, 0x02aa, 0x02ca, + 0x02e0, 0x02e0, 0x02f6, 0x02f6, 0x0313, 0x0336, 0x0358, 0x0379, + // Entry C40 - C7F + 0x0399, 0x03bb, 0x03bb, 0x03dc, 0x03dc, 0x03fb, 0x0415, 0x0434, + 0x0451, 0x047a, 0x04a8, 0x04d2, 0x04f0, 0x00f0, 0x0107, 0x011d, + 0x0133, 0x014b, 0x0162, 0x0179, 0x018f, 0x01a7, 0x01bf, 0x01d6, + 0x01d6, 0x01fa, 0x021d, 0x023b, 0x023b, 0x0250, 0x0267, 0x027f, + 0x0297, 0x02ae, 0x02c8, 0x02de, 0x02f5, 0x030d, 0x0325, 0x0339, + 0x0350, 0x0366, 0x037d, 0x0394, 0x03ab, 0x03c8, 0x03e2, 0x03f7, + 0x040c, 0x0421, 0x0439, 0x0452, 0x046a, 0x047e, 0x0496, 0x04ab, + 0x04c3, 0x04d7, 0x04ee, 0x0503, 0x051d, 0x0531, 0x0546, 0x055b, + // Entry C80 - CBF + 0x056c, 0x0582, 0x0593, 0x05a9, 0x05bf, 0x05d5, 0x05ea, 0x05ff, + 0x0616, 0x062a, 0x0642, 0x065a, 0x066f, 0x068a, 0x06a0, 0x06b6, + 0x06cb, 0x06e1, 0x06f7, 0x070e, 0x0723, 0x0739, 0x074f, 0x034f, + 0x0368, 0x037d, 0x0393, 0x03a8, 0x03c6, 0x03e5, 0x03ff, 0x0416, + 0x042e, 0x0443, 0x0459, 0x046f, 0x048a, 0x04a4, 0x04bb, 0x04d2, + 0x04e8, 0x04f7, 0x0505, 0x0513, 0x0523, 0x0532, 0x0541, 0x054f, + 0x055f, 0x056f, 0x057e, 0x0597, 0x05ac, 0x01ac, 0x01b9, 0x01cc, + 0x01cc, 0x01de, 0x01de, 0x01ec, 0x01f9, 0x01f9, 0x020a, 0x020a, + // Entry CC0 - CFF + 0x0218, 0x0218, 0x0225, 0x0232, 0x0245, 0x0257, 0x0257, 0x0264, + 0x0271, 0x027e, 0x0291, 0x02a2, 0x02b4, 0x02c6, 0x02c6, 0x02d3, + 0x02e0, 0x02f2, 0x02f2, 0x0304, 0x0304, 0x0311, 0x0311, 0x0323, + 0x0335, 0x0335, 0x0341, 0x0352, 0x035e, 0x036e, 0x0384, 0x0395, + 0x03a6, 0x03b6, 0x03c7, 0x03d7, 0x03e8, 0x03f8, 0x0409, 0x0009, + 0x001f, 0x0034, 0x004a, 0x004a, 0x005a, 0x006b, 0x007b, 0x008c, + 0x009d, 0x009d, 0x00a6, 0x00a6, 0x00b5, 0x00c5, 0x00d4, 0x00e7, + 0x00fc, 0x0109, 0x0109, 0x0117, 0x0124, 0x0131, 0x0140, 0x014e, + // Entry D00 - D3F + 0x015c, 0x0169, 0x0178, 0x0187, 0x0195, 0x0195, 0x019e, 0x01a7, + 0x01b9, 0x01cc, 0x01cc, 0x01df, 0x0204, 0x022e, 0x0259, 0x027d, + 0x02a1, 0x02c8, 0x02ea, 0x0301, 0x031b, 0x0339, 0x0359, 0x037b, + 0x038c, 0x03a2, 0x03b9, 0x03d5, 0x03f6, 0x0411, 0x043b, 0x0452, + 0x0472, 0x0492, 0x04c1, 0x04e4, 0x050a, 0x0525, 0x0541, 0x055c, + 0x0576, 0x0591, 0x05b0, 0x05c2, 0x05d3, 0x05e4, 0x05f7, 0x0609, + 0x061b, 0x062c, 0x063f, 0x0652, 0x0664, 0x067a, 0x0690, 0x06a8, + 0x06bf, 0x06d6, 0x06ec, 0x0704, 0x071c, 0x0733, 0x074a, 0x0762, + // Entry D40 - D7F + 0x0781, 0x07ac, 0x07ce, 0x07e2, 0x07f8, 0x0813, 0x082e, 0x0849, + 0x0864, 0x087a, 0x0890, 0x08a1, 0x08b3, 0x08c4, 0x08d6, 0x08e8, + 0x08f9, 0x090b, 0x091c, 0x011c, 0x012e, 0x0140, 0x0153, 0x0165, + 0x0178, 0x018a, 0x019b, 0x01ad, 0x01be, 0x01d0, 0x01e1, 0x01f2, + 0x0204, 0x0215, 0x0227, 0x0238, 0x024a, 0x025d, 0x026f, 0x0282, + 0x0293, 0x02a5, 0x02b6, 0x02c7, 0x02d8, 0x02e9, 0x02fa, 0x030c, + 0x031e, 0x032f, 0x0340, 0x0350, 0x0363, 0x037f, 0x0391, 0x03a3, + 0x03a3, 0x03b8, 0x03cc, 0x03e1, 0x03f5, 0x040a, 0x0426, 0x0443, + // Entry D80 - DBF + 0x045f, 0x047c, 0x0490, 0x04a5, 0x04b9, 0x04ce, 0x04e9, 0x04ff, + 0x051c, 0x053a, 0x0555, 0x056a, 0x057e, 0x0591, 0x05a7, 0x05be, + 0x05d6, 0x05eb, 0x0607, 0x0623, 0x0641, 0x0663, 0x0682, 0x06aa, + 0x06c5, 0x06e1, 0x06fc, 0x0718, 0x0734, 0x074f, 0x076b, 0x0786, + 0x0386, 0x03a2, 0x03be, 0x03db, 0x03f7, 0x0414, 0x0430, 0x044b, + 0x0467, 0x0482, 0x049e, 0x04b9, 0x04d4, 0x04f0, 0x050b, 0x0527, + 0x0542, 0x055e, 0x057b, 0x0597, 0x05b4, 0x05cf, 0x05eb, 0x0606, + 0x0621, 0x063c, 0x0657, 0x0672, 0x068e, 0x06aa, 0x06c5, 0x06e0, + // Entry DC0 - DFF + 0x06fa, 0x0717, 0x073d, 0x0763, 0x0789, 0x0389, 0x039a, 0x03b8, + 0x03dc, 0x0400, 0x0423, 0x0447, 0x045d, 0x0473, 0x048c, 0x04ac, + 0x04c2, 0x04d7, 0x04f8, 0x0519, 0x053a, 0x013a, 0x0159, 0x0173, + 0x0197, 0x01ba, 0x01d1, 0x0201, 0x0231, 0x0249, 0x0260, 0x0282, + 0x02a3, 0x02c3, 0x02e4, 0x02e4, 0x02f5, 0x0307, 0x0318, 0x032a, + 0x033c, 0x034d, 0x035f, 0x0370, 0x0382, 0x0394, 0x03a7, 0x03b9, + 0x03cc, 0x03de, 0x03f1, 0x0403, 0x0414, 0x0426, 0x0437, 0x0449, + 0x045a, 0x046b, 0x047d, 0x048e, 0x04a0, 0x04b1, 0x04c2, 0x04d3, + // Entry E00 - E3F + 0x04e4, 0x04f5, 0x0506, 0x0517, 0x0529, 0x0539, 0x054e, 0x055e, + 0x056f, 0x057f, 0x0590, 0x05a0, 0x05b4, 0x05c4, 0x05d5, 0x05ef, + 0x0604, 0x0618, 0x062d, 0x0641, 0x0656, 0x066a, 0x067f, 0x0698, + 0x06b0, 0x06ca, 0x06df, 0x06f5, 0x0709, 0x071c, 0x072d, 0x074d, + 0x076d, 0x078d, 0x07ad, 0x07c4, 0x07d6, 0x07e7, 0x07f8, 0x080b, + 0x081d, 0x082f, 0x0840, 0x0853, 0x0866, 0x0878, 0x0893, 0x08a7, + 0x08be, 0x08d6, 0x08f3, 0x090a, 0x091c, 0x092e, 0x0946, 0x095f, + 0x0977, 0x0990, 0x09ac, 0x09c9, 0x09e5, 0x0a02, 0x0a18, 0x0a2e, + // Entry E40 - E7F + 0x0a44, 0x0a5a, 0x0a7e, 0x0aa2, 0x0ac6, 0x0ae3, 0x0b03, 0x0b25, + 0x0b48, 0x0b6c, 0x0b90, 0x0bb7, 0x0bde, 0x0c03, 0x0c28, 0x0c4d, + 0x0c72, 0x0c97, 0x0cbb, 0x0cdf, 0x0d04, 0x0d23, 0x0d3e, 0x0d58, + 0x0d73, 0x0d89, 0x0da0, 0x0db6, 0x0dcc, 0x0de2, 0x0df9, 0x0e0f, + 0x0e25, 0x0e3c, 0x0e52, 0x0e68, 0x0e7f, 0x0e95, 0x0eba, 0x0ed4, + 0x0eed, 0x0f0c, 0x0f2b, 0x0f43, 0x0f5b, 0x0f73, 0x0f8b, 0x0fab, + 0x0fcb, 0x0ff2, 0x1011, 0x1032, 0x1049, 0x105f, 0x1075, 0x108d, + 0x10a4, 0x10bb, 0x10d1, 0x10e9, 0x1101, 0x1118, 0x1132, 0x114c, + // Entry E80 - EBF + 0x1166, 0x1181, 0x1198, 0x11b7, 0x11d1, 0x11ec, 0x1207, 0x1222, + 0x123c, 0x1257, 0x1272, 0x128d, 0x12a7, 0x12c2, 0x12dd, 0x12f8, + 0x1313, 0x132d, 0x1348, 0x1364, 0x137f, 0x139a, 0x13b5, 0x13cf, + 0x13eb, 0x1407, 0x1423, 0x143e, 0x145a, 0x1476, 0x1491, 0x14ac, + 0x14c7, 0x14e3, 0x14fe, 0x151a, 0x1535, 0x154f, 0x156a, 0x1584, + 0x159f, 0x15ba, 0x01ba, 0x01d4, 0x01d4, 0x01ef, 0x01ef, 0x0201, + 0x0214, 0x0227, 0x023a, 0x024c, 0x025f, 0x0272, 0x0285, 0x0297, + 0x02aa, 0x02bd, 0x02d0, 0x02e3, 0x02f5, 0x0308, 0x031c, 0x032f, + // Entry EC0 - EFF + 0x0342, 0x0355, 0x0367, 0x037b, 0x038f, 0x03a3, 0x03b6, 0x03ca, + 0x03de, 0x03f1, 0x0404, 0x0417, 0x042b, 0x043e, 0x0452, 0x0465, + 0x0477, 0x048a, 0x049c, 0x04af, 0x04c2, 0x04d4, 0x04e6, 0x04fb, + 0x0515, 0x0528, 0x0544, 0x0560, 0x0573, 0x058c, 0x05a7, 0x05bd, + 0x05d8, 0x05ed, 0x0603, 0x061e, 0x0633, 0x0648, 0x065d, 0x0677, + 0x068b, 0x06a4, 0x06b9, 0x06ce, 0x06e8, 0x06ff, 0x0716, 0x072d, + 0x0744, 0x0759, 0x0775, 0x078f, 0x07ab, 0x07c6, 0x07e3, 0x07fe, + 0x0818, 0x0833, 0x0850, 0x086b, 0x0888, 0x08a4, 0x08bf, 0x08db, + // Entry F00 - F3F + 0x08f5, 0x0916, 0x0937, 0x0957, 0x0976, 0x0996, 0x09b1, 0x09ce, + 0x09eb, 0x0a08, 0x0a25, 0x0a47, 0x0a62, 0x0a7c, 0x0a97, 0x0ab1, + 0x0acb, 0x0ae5, 0x0b06, 0x0b24, 0x0b3e, 0x0b58, 0x0b74, 0x0b90, + 0x0bac, 0x0bc8, 0x0be2, 0x0bfe, 0x0c1f, 0x0c3e, 0x0c62, 0x0c79, + 0x0c95, 0x0cb1, 0x0ccc, 0x0ce7, 0x0d01, 0x0d1e, 0x0d38, 0x0d53, + 0x0d70, 0x0d8d, 0x0daa, 0x0dc2, 0x0ddd, 0x0dfa, 0x0e1c, 0x0e3c, + 0x0e61, 0x0e80, 0x0e9d, 0x0ebc, 0x0ede, 0x0efb, 0x0f1a, 0x0f34, + 0x0f4f, 0x0f6c, 0x0f86, 0x0fa1, 0x0fbc, 0x0fd8, 0x0fee, 0x1005, + // Entry F40 - F7F + 0x1017, 0x102a, 0x103d, 0x1051, 0x1064, 0x1076, 0x108a, 0x109d, + 0x10af, 0x10c2, 0x10d6, 0x10e9, 0x10fc, 0x110e, 0x1122, 0x1135, + 0x1148, 0x115b, 0x116e, 0x1181, 0x1193, 0x11a7, 0x11bb, 0x11d0, + 0x11e6, 0x11fb, 0x1210, 0x1226, 0x123c, 0x1252, 0x1267, 0x127b, + 0x1290, 0x12a4, 0x12b8, 0x12ce, 0x12e5, 0x12fc, 0x1311, 0x1326, + 0x133a, 0x134f, 0x1367, 0x137c, 0x1390, 0x13a5, 0x13bb, 0x13d0, + 0x13e7, 0x13fd, 0x1412, 0x1427, 0x143c, 0x1452, 0x1467, 0x147b, + 0x1490, 0x14a4, 0x14b8, 0x14cd, 0x14e5, 0x14fb, 0x1514, 0x152c, + // Entry F80 - FBF + 0x1544, 0x155f, 0x1574, 0x1589, 0x15a0, 0x15b5, 0x15cb, 0x15e2, + 0x15fe, 0x161a, 0x1630, 0x164c, 0x1668, 0x167f, 0x1695, 0x16b2, + 0x16ce, 0x16ea, 0x1705, 0x1723, 0x1741, 0x175d, 0x1773, 0x1789, + 0x17a4, 0x17b9, 0x17d3, 0x17e9, 0x17ff, 0x1817, 0x182f, 0x1847, + 0x185f, 0x1875, 0x1892, 0x18b5, 0x18d2, 0x18ef, 0x190a, 0x1928, + 0x1946, 0x1964, 0x1981, 0x19a3, 0x19bf, 0x19dc, 0x19ff, 0x1a1a, + 0x1a3d, 0x1a5e, 0x1a7f, 0x1aa1, 0x1ac5, 0x1ae5, 0x1b03, 0x1b21, + 0x1b43, 0x1b60, 0x1b7c, 0x1b98, 0x1bb3, 0x1bd3, 0x1bf1, 0x1c0f, + // Entry FC0 - FFF + 0x1c2b, 0x1c49, 0x1c65, 0x1c83, 0x1c9f, 0x1cbd, 0x1cd9, 0x1cf5, + 0x1d10, 0x1d2b, 0x1d43, 0x1d60, 0x1d82, 0x1d9d, 0x1dbb, 0x1dd4, + 0x1df2, 0x1e13, 0x1e31, 0x1e51, 0x1e6d, 0x1e89, 0x1ea5, 0x1ec1, + 0x1edd, 0x1efa, 0x1f17, 0x1f36, 0x1f55, 0x1f72, 0x1f8d, 0x1fa1, + 0x1fb5, 0x1fc9, 0x1fde, 0x1ff3, 0x2007, 0x201b, 0x2030, 0x2044, + 0x2058, 0x206c, 0x2081, 0x2096, 0x20aa, 0x20be, 0x20d3, 0x20e8, + 0x20fd, 0x2112, 0x2128, 0x213e, 0x2153, 0x2168, 0x217e, 0x2192, + 0x21a6, 0x21ba, 0x21cf, 0x21e4, 0x21f8, 0x220c, 0x2221, 0x2236, + // Entry 1000 - 103F + 0x224b, 0x2260, 0x2276, 0x228c, 0x22a1, 0x22b6, 0x22cc, 0x22e0, + 0x22f4, 0x2308, 0x231d, 0x2332, 0x2346, 0x235a, 0x236f, 0x2383, + 0x2397, 0x23ab, 0x23c0, 0x23d5, 0x23e9, 0x23fd, 0x2412, 0x2427, + 0x243c, 0x2451, 0x2467, 0x247d, 0x2492, 0x24a7, 0x24bd, 0x24d1, + 0x24e5, 0x24f9, 0x250e, 0x2523, 0x2537, 0x254b, 0x2560, 0x2575, + 0x0175, 0x018a, 0x01a0, 0x01b6, 0x01cb, 0x01cb, 0x01e0, 0x01f5, + 0x020a, 0x0220, 0x0236, 0x024b, 0x0260, 0x0260, 0x0276, 0x0276, + 0x028c, 0x02a3, 0x02ba, 0x02d0, 0x02d0, 0x02e4, 0x02f8, 0x030c, + // Entry 1040 - 107F + 0x0321, 0x0336, 0x034a, 0x035e, 0x0373, 0x0387, 0x039b, 0x03af, + 0x03c4, 0x03d9, 0x03ed, 0x0401, 0x0416, 0x042a, 0x043e, 0x0452, + 0x0467, 0x047c, 0x0490, 0x04a4, 0x04b9, 0x04cd, 0x04e1, 0x04f5, + 0x050a, 0x051f, 0x0533, 0x0547, 0x055c, 0x0570, 0x0584, 0x0598, + 0x05ad, 0x05c2, 0x05d6, 0x05ea, 0x05ff, 0x0614, 0x0214, 0x0229, + 0x023f, 0x0255, 0x026a, 0x026a, 0x027e, 0x0292, 0x02a6, 0x02bb, + 0x02d0, 0x02e4, 0x02f8, 0x030d, 0x0322, 0x0337, 0x034c, 0x0362, + 0x0378, 0x038d, 0x03a2, 0x03b8, 0x03d3, 0x03ee, 0x0409, 0x0425, + // Entry 1080 - 10BF + 0x0441, 0x045c, 0x0477, 0x0493, 0x04a7, 0x04bb, 0x04cf, 0x04e4, + 0x04f9, 0x050d, 0x0521, 0x0536, 0x054b, 0x014b, 0x0160, 0x0176, + 0x018c, 0x01a1, 0x01a1, 0x01b6, 0x01cb, 0x01e0, 0x01f6, 0x020c, + 0x0221, 0x0236, 0x0236, 0x024c, 0x024c, 0x0262, 0x0279, 0x0290, + 0x02a6, 0x02a6, 0x02ba, 0x02ce, 0x02e2, 0x02f7, 0x030c, 0x0320, + 0x0334, 0x0349, 0x0367, 0x0385, 0x03a3, 0x03c2, 0x03e1, 0x03ff, + 0x041d, 0x001d, 0x0031, 0x0045, 0x0059, 0x006e, 0x0083, 0x0097, + 0x00ab, 0x00c0, 0x00d5, 0x00ea, 0x00ff, 0x0115, 0x012b, 0x0140, + // Entry 10C0 - 10FF + 0x0155, 0x016b, 0x017f, 0x0193, 0x01a7, 0x01bc, 0x01d1, 0x01e5, + 0x01f9, 0x020e, 0x0222, 0x0236, 0x024a, 0x025f, 0x0274, 0x0288, + 0x029c, 0x02b1, 0x02c6, 0x02db, 0x02f0, 0x0306, 0x031c, 0x0331, + 0x0346, 0x035c, 0x0370, 0x0384, 0x0398, 0x03ad, 0x03c2, 0x03d6, + 0x03ea, 0x03ff, 0x0413, 0x0427, 0x043b, 0x0450, 0x0465, 0x0479, + 0x048d, 0x04a2, 0x04b7, 0x00b7, 0x00cc, 0x00e2, 0x00f8, 0x010d, + 0x010d, 0x0122, 0x0137, 0x014c, 0x0162, 0x0178, 0x018d, 0x01a2, + 0x01b9, 0x01ce, 0x01e3, 0x01f8, 0x020e, 0x0224, 0x0239, 0x024e, + // Entry 1100 - 113F + 0x0264, 0x0279, 0x028e, 0x02a3, 0x02b9, 0x02cf, 0x02e4, 0x02f9, + 0x030f, 0x0324, 0x0339, 0x034e, 0x0364, 0x037a, 0x038f, 0x03a4, + 0x03ba, 0x03cf, 0x03e4, 0x03f9, 0x040f, 0x0425, 0x043a, 0x044f, + 0x0465, 0x047a, 0x048f, 0x04a4, 0x04ba, 0x04d0, 0x04e5, 0x04fa, + 0x0510, 0x0524, 0x0538, 0x054c, 0x0561, 0x0576, 0x058a, 0x059e, + 0x05b3, 0x05c7, 0x05db, 0x05ef, 0x0604, 0x0619, 0x062d, 0x0641, + 0x0656, 0x066b, 0x0680, 0x0695, 0x0295, 0x02c8, 0x02ec, 0x030e, + 0x0323, 0x0335, 0x0347, 0x0355, 0x0367, 0x0375, 0x038b, 0x03a1, + // Entry 1140 - 117F + 0x03bd, 0x03cf, 0x03e1, 0x03f5, 0x0408, 0x041b, 0x042d, 0x0441, + 0x0455, 0x0468, 0x047b, 0x0491, 0x04a7, 0x04bc, 0x04d1, 0x04e6, + 0x04fd, 0x0513, 0x0529, 0x0540, 0x055c, 0x015c, 0x017b, 0x0190, + 0x01a6, 0x01bb, 0x01da, 0x01ef, 0x0205, 0x021a, 0x0239, 0x024e, + 0x0264, 0x0279, 0x0298, 0x02ad, 0x02c3, 0x02d8, 0x02f1, 0x030a, + 0x0324, 0x0344, 0x035d, 0x0376, 0x0390, 0x03a9, 0x03c8, 0x03e0, + 0x03e0, 0x03f1, 0x0402, 0x0413, 0x0424, 0x0435, 0x0446, 0x0458, + 0x046a, 0x047c, 0x048e, 0x04a0, 0x04b2, 0x04c4, 0x04d6, 0x04e8, + // Entry 1180 - 11BF + 0x04fa, 0x050c, 0x051e, 0x0530, 0x0542, 0x0554, 0x0566, 0x0578, + 0x058a, 0x059c, 0x05ae, 0x05c0, 0x05d2, 0x05e4, 0x05f6, 0x0608, + 0x061b, 0x062e, 0x0640, 0x0652, 0x0664, 0x0676, 0x0688, 0x069b, + 0x06ae, 0x06c1, 0x06d4, 0x06e7, 0x06fa, 0x070c, 0x071d, 0x072f, + 0x0741, 0x0753, 0x0765, 0x0777, 0x0789, 0x079b, 0x07ad, 0x07bf, + 0x07d1, 0x07e3, 0x07f5, 0x0807, 0x0819, 0x082c, 0x083f, 0x0852, + 0x0865, 0x0878, 0x088b, 0x089e, 0x08b1, 0x08c4, 0x08d7, 0x08ea, + 0x08fd, 0x0910, 0x0922, 0x0934, 0x0946, 0x0958, 0x096a, 0x097c, + // Entry 11C0 - 11FF + 0x098e, 0x09a0, 0x09b2, 0x09c4, 0x09d6, 0x09e8, 0x09fa, 0x01fa, + 0x0212, 0x022a, 0x0242, 0x025a, 0x0272, 0x028a, 0x028a, 0x02a3, + 0x02b7, 0x02cd, 0x02e1, 0x02f6, 0x030a, 0x031f, 0x033b, 0x0358, + 0x0374, 0x0388, 0x039d, 0x03b2, 0x03d1, 0x03e6, 0x0405, 0x041b, + 0x043b, 0x0450, 0x046f, 0x0485, 0x04a5, 0x04c3, 0x04d8, 0x04f7, + 0x050d, 0x052d, 0x054b, 0x0560, 0x057b, 0x059a, 0x05b8, 0x05d6, + 0x05ff, 0x0625, 0x064d, 0x066a, 0x068f, 0x06c5, 0x06e8, 0x0718, + 0x0735, 0x0757, 0x076c, 0x0781, 0x0796, 0x07ab, 0x07c0, 0x07d7, + // Entry 1200 - 123F + 0x07ec, 0x0802, 0x0817, 0x082d, 0x084a, 0x0868, 0x0885, 0x089a, + 0x08b0, 0x08c6, 0x08e6, 0x08fc, 0x091c, 0x0933, 0x0954, 0x096a, + 0x098a, 0x09a1, 0x09c2, 0x09d8, 0x09f8, 0x0a0f, 0x0a30, 0x0a4e, + 0x0a62, 0x0a80, 0x0a9c, 0x0ab1, 0x0ac8, 0x0add, 0x0af3, 0x0b08, + 0x0b1e, 0x0b3b, 0x0b59, 0x0b76, 0x0b8b, 0x0ba1, 0x0bb7, 0x0bd7, + 0x0bed, 0x0c0d, 0x0c24, 0x0c45, 0x0c5b, 0x0c7b, 0x0c92, 0x0cb3, + 0x0cc9, 0x0ce9, 0x0d00, 0x0d21, 0x0d40, 0x0d54, 0x0d6a, 0x0d80, + 0x0d96, 0x0dac, 0x0dc1, 0x0dd8, 0x0ded, 0x0e03, 0x0e18, 0x0e2e, + // Entry 1240 - 127F + 0x0e4b, 0x0e60, 0x0e76, 0x0e8c, 0x0eac, 0x0ec2, 0x0ee2, 0x0ef9, + 0x0f1a, 0x0f30, 0x0f50, 0x0f67, 0x0f88, 0x0f9e, 0x0fbe, 0x0fd5, + 0x0ff6, 0x1015, 0x1029, 0x103e, 0x1061, 0x1084, 0x10a7, 0x10ca, + 0x10df, 0x10f6, 0x110b, 0x1121, 0x1136, 0x114c, 0x1169, 0x117e, + 0x1194, 0x11aa, 0x11ca, 0x11e0, 0x1200, 0x1217, 0x1238, 0x124e, + 0x126e, 0x1285, 0x12a6, 0x12bc, 0x12dc, 0x12f3, 0x1314, 0x1333, + 0x1347, 0x1363, 0x1378, 0x138f, 0x13a4, 0x13ba, 0x13cf, 0x13e5, + 0x1402, 0x1417, 0x142d, 0x1443, 0x1463, 0x1479, 0x1499, 0x14b0, + // Entry 1280 - 12BF + 0x14d1, 0x14e7, 0x1507, 0x151e, 0x153f, 0x1555, 0x1575, 0x158c, + 0x15ad, 0x15cc, 0x15e0, 0x15fe, 0x1613, 0x1632, 0x164d, 0x1662, + 0x1679, 0x168e, 0x16a4, 0x16b9, 0x16cf, 0x16ec, 0x1701, 0x1717, + 0x172d, 0x174d, 0x1763, 0x1783, 0x179a, 0x17bb, 0x17da, 0x17ee, + 0x180b, 0x1820, 0x1835, 0x184c, 0x1861, 0x1877, 0x188c, 0x18a2, + 0x18bf, 0x18d4, 0x18ea, 0x1900, 0x1920, 0x1936, 0x1956, 0x196d, + 0x198e, 0x19a4, 0x19c4, 0x19db, 0x19fc, 0x1a12, 0x1a32, 0x1a49, + 0x1a6a, 0x1a7e, 0x1a9c, 0x1ab7, 0x1acc, 0x1ae3, 0x1af8, 0x1b0e, + // Entry 12C0 - 12FF + 0x1b23, 0x1b39, 0x1b56, 0x1b6b, 0x1b81, 0x1b97, 0x1bb7, 0x1bcd, + 0x1bed, 0x1c04, 0x1c25, 0x1c3b, 0x1c5b, 0x1c72, 0x1c93, 0x1ca9, + 0x1cc9, 0x1ce0, 0x1d01, 0x1d20, 0x1d34, 0x1d53, 0x1d68, 0x1d86, + 0x1da6, 0x1dc4, 0x1de2, 0x1e01, 0x1e20, 0x1e3f, 0x1e5e, 0x1e74, + 0x1e8a, 0x1ea1, 0x1eb7, 0x1ece, 0x1ee4, 0x1efb, 0x1f12, 0x1f33, + 0x1f4a, 0x1f6b, 0x1f83, 0x1fa5, 0x1fbc, 0x1fdd, 0x1ff5, 0x2017, + 0x202e, 0x204f, 0x2067, 0x2089, 0x209e, 0x20b3, 0x20ca, 0x20df, + 0x20f5, 0x210a, 0x2120, 0x213d, 0x2152, 0x2168, 0x217e, 0x219e, + // Entry 1300 - 133F + 0x21b4, 0x21d4, 0x21eb, 0x220c, 0x2222, 0x2242, 0x2259, 0x227a, + 0x2290, 0x22b0, 0x22c7, 0x22e8, 0x2307, 0x231b, 0x233a, 0x2358, + 0x2374, 0x2389, 0x23a5, 0x23c4, 0x23db, 0x23f0, 0x2406, 0x241b, + 0x2431, 0x2450, 0x2465, 0x247b, 0x249a, 0x24b1, 0x24d2, 0x24e6, + 0x2504, 0x251f, 0x2534, 0x254b, 0x2560, 0x2576, 0x258b, 0x25a1, + 0x25b6, 0x25cc, 0x25e3, 0x2604, 0x2618, 0x262e, 0x264b, 0x2661, + 0x267e, 0x2695, 0x26b3, 0x26c9, 0x26e0, 0x26f6, 0x270d, 0x2725, + 0x2747, 0x275c, 0x2773, 0x278a, 0x27a1, 0x27b8, 0x27ce, 0x27e4, + // Entry 1340 - 137F + 0x27fa, 0x2810, 0x2826, 0x2843, 0x2860, 0x287e, 0x289b, 0x28b9, + 0x28d6, 0x28f4, 0x2910, 0x292c, 0x2941, 0x2958, 0x296d, 0x2983, + 0x2998, 0x29ae, 0x29c3, 0x29d9, 0x29ed, 0x2a04, 0x2a1b, 0x2a32, + 0x2a49, 0x2a68, 0x2a87, 0x2aa6, 0x2ac5, 0x2add, 0x2af3, 0x2b0a, + 0x2b20, 0x2b37, 0x2b4d, 0x2b64, 0x2b79, 0x2b8f, 0x2bac, 0x2bc9, + 0x2be6, 0x2c03, 0x2c24, 0x2c45, 0x2c66, 0x2c87, 0x2ca7, 0x2cbd, + 0x2cd4, 0x2cea, 0x2d01, 0x2d17, 0x2d2e, 0x2d43, 0x2d61, 0x2d7f, + 0x2d9e, 0x2dbc, 0x2ddb, 0x2df9, 0x2e18, 0x2e35, 0x2e51, 0x2e6f, + // Entry 1380 - 13BF + 0x2e8d, 0x2eab, 0x2ec9, 0x2ee8, 0x2f07, 0x2f26, 0x2f45, 0x2f64, + 0x2f83, 0x2fa2, 0x2fc1, 0x2fe0, 0x2fff, 0x301e, 0x303d, 0x3059, + 0x3075, 0x3091, 0x30ad, 0x30cb, 0x30e9, 0x3107, 0x3126, 0x3144, + 0x3162, 0x317f, 0x319c, 0x31b9, 0x31d7, 0x31f4, 0x3211, 0x322e, + 0x324b, 0x3268, 0x3286, 0x32a3, 0x32c0, 0x32de, 0x32fc, 0x331a, + 0x3339, 0x3357, 0x3375, 0x3393, 0x33b1, 0x33cf, 0x33ee, 0x340c, + 0x342a, 0x3448, 0x3466, 0x3484, 0x34a3, 0x34c1, 0x34df, 0x34fc, + 0x3519, 0x3536, 0x3554, 0x3571, 0x358e, 0x35aa, 0x35c7, 0x35e4, + // Entry 13C0 - 13FF + 0x3601, 0x361f, 0x363c, 0x3659, 0x3677, 0x3695, 0x36b3, 0x36d2, + 0x36f0, 0x370e, 0x372c, 0x374a, 0x3768, 0x3787, 0x37a5, 0x37c3, + 0x37e0, 0x37fd, 0x381a, 0x3837, 0x3855, 0x3872, 0x388f, 0x38ac, + 0x38c9, 0x38e6, 0x3904, 0x3921, 0x393e, 0x395b, 0x3978, 0x3995, + 0x39b3, 0x39d0, 0x39ed, 0x3a0a, 0x3a26, 0x3a43, 0x3a60, 0x3a7e, + 0x3a9b, 0x3ab7, 0x3ad4, 0x3af2, 0x3b10, 0x3b2e, 0x3b4d, 0x3b6b, + 0x3b89, 0x3ba6, 0x3bc3, 0x3be0, 0x3bfe, 0x3c1b, 0x3c38, 0x3c56, + 0x3c74, 0x3c92, 0x3cb1, 0x3ccf, 0x3ced, 0x3d0b, 0x3d29, 0x3d47, + // Entry 1400 - 143F + 0x3d66, 0x3d84, 0x3da2, 0x3dc1, 0x3de0, 0x3dff, 0x3e1f, 0x3e3e, + 0x3e5d, 0x3e7b, 0x3e99, 0x3eb7, 0x3ed6, 0x3ef4, 0x3f12, 0x3f2f, + 0x3f4c, 0x3f69, 0x3f87, 0x3fa4, 0x3fc1, 0x3fdd, 0x4001, 0x401f, + 0x403d, 0x405b, 0x407a, 0x4098, 0x40b6, 0x40d3, 0x40f0, 0x410d, + 0x412b, 0x4148, 0x4165, 0x4183, 0x41a1, 0x41bf, 0x41de, 0x41fc, + 0x421a, 0x4237, 0x4255, 0x4273, 0x4291, 0x42b0, 0x42ce, 0x42ec, + 0x430a, 0x4328, 0x4346, 0x4365, 0x4383, 0x43a1, 0x43c0, 0x43df, + 0x43fe, 0x441e, 0x443d, 0x445c, 0x4477, 0x4493, 0x44a9, 0x44c0, + // Entry 1440 - 147F + 0x44d7, 0x44ef, 0x4506, 0x451e, 0x4535, 0x454d, 0x4570, 0x4592, + 0x45b5, 0x45d7, 0x45fa, 0x461c, 0x463f, 0x4665, 0x4683, 0x4693, + 0x46a5, 0x46b6, 0x46c8, 0x46d9, 0x46ea, 0x46fb, 0x470c, 0x471e, + 0x472f, 0x4741, 0x4752, 0x4763, 0x4777, 0x478a, 0x479b, 0x47ac, + 0x47bc, 0x47cb, 0x47df, 0x47f3, 0x4807, 0x4816, 0x482b, 0x483c, + 0x4854, 0x4866, 0x4878, 0x4893, 0x0093, 0x00ae, 0x00bc, 0x00d2, + 0x00e1, 0x00ef, 0x00fd, 0x011e, 0x012e, 0x0142, 0x0153, 0x0164, + 0x0175, 0x0193, 0x01b0, 0x01be, 0x01cd, 0x01dc, 0x01f9, 0x020b, + // Entry 1480 - 14BF + 0x021b, 0x022e, 0x023c, 0x024c, 0x0264, 0x0274, 0x028d, 0x02a2, + 0x02b6, 0x02d7, 0x02f7, 0x0315, 0x0333, 0x0348, 0x0362, 0x0370, + 0x0384, 0x0394, 0x03b2, 0x03ce, 0x03e3, 0x03ff, 0x0417, 0x042c, + 0x0450, 0x046d, 0x047b, 0x0489, 0x04a5, 0x04c2, 0x04d0, 0x04f5, + 0x0516, 0x052b, 0x053e, 0x0555, 0x056e, 0x058d, 0x05ab, 0x05ca, + 0x05df, 0x05f2, 0x0602, 0x061b, 0x0637, 0x0647, 0x0657, 0x066b, + 0x067c, 0x068e, 0x069f, 0x06ba, 0x06d4, 0x06ed, 0x06fb, 0x0709, + 0x0721, 0x073b, 0x0752, 0x0765, 0x077a, 0x078f, 0x079d, 0x07ac, + // Entry 14C0 - 14FF + 0x07bb, 0x07d8, 0x07f5, 0x0812, 0x082f, 0x084e, 0x004e, 0x005e, + 0x006e, 0x007e, 0x008f, 0x00a0, 0x00b2, 0x00c3, 0x00d4, 0x00e5, + 0x00f6, 0x0107, 0x0118, 0x0129, 0x0129, 0x013a, 0x014b, 0x015c, + 0x016d, 0x0181, 0x0195, 0x01a8, 0x01a8, 0x01b8, 0x01c8, 0x01d8, + 0x01e9, 0x01fa, 0x020c, 0x021d, 0x022e, 0x023f, 0x0250, 0x0261, + 0x0272, 0x0283, 0x0294, 0x02a5, 0x02b6, 0x02c7, 0x02d8, 0x02ec, + 0x0300, 0x0315, 0x0332, 0x034f, 0x034f, 0x035d, 0x036b, 0x0379, + 0x0388, 0x0397, 0x03a7, 0x03b6, 0x03c5, 0x03d4, 0x03e3, 0x03f2, + // Entry 1500 - 153F + 0x0401, 0x0410, 0x041f, 0x042e, 0x043d, 0x044c, 0x045b, 0x046d, + 0x047f, 0x007f, 0x0090, 0x00a1, 0x00b2, 0x00c4, 0x00d6, 0x00e9, + 0x00fb, 0x010d, 0x011f, 0x0131, 0x0143, 0x0155, 0x0167, 0x0167, + 0x0179, 0x018b, 0x019d, 0x019d, 0x01b2, 0x01c7, 0x01c7, 0x01d6, + 0x01e6, 0x01f5, 0x0205, 0x0215, 0x0224, 0x0234, 0x0243, 0x0253, + 0x0263, 0x0272, 0x0283, 0x0292, 0x02a3, 0x02b3, 0x02c2, 0x02d2, + 0x02e1, 0x02f1, 0x0300, 0x030f, 0x031f, 0x032e, 0x033e, 0x034d, + 0x035c, 0x036b, 0x037a, 0x0389, 0x0399, 0x03a9, 0x03b8, 0x03c7, + // Entry 1540 - 157F + 0x03d6, 0x03e5, 0x0400, 0x041b, 0x0435, 0x0450, 0x046a, 0x0485, + 0x04a0, 0x04bc, 0x04d6, 0x04f1, 0x050b, 0x0526, 0x0540, 0x055b, + 0x057f, 0x05a3, 0x05be, 0x05d5, 0x05ec, 0x05ff, 0x0611, 0x0624, + 0x0636, 0x0649, 0x065b, 0x066e, 0x0681, 0x0694, 0x06a7, 0x06ba, + 0x06cc, 0x06df, 0x06f2, 0x0705, 0x0718, 0x072a, 0x073c, 0x0754, + 0x076a, 0x077c, 0x078d, 0x079d, 0x07b3, 0x07c5, 0x07d5, 0x07ed, + 0x07fe, 0x080e, 0x0823, 0x0832, 0x0847, 0x0861, 0x0873, 0x0884, + 0x089a, 0x08ac, 0x08c6, 0x08de, 0x08f1, 0x00f1, 0x0101, 0x0110, + // Entry 1580 - 15BF + 0x011f, 0x0130, 0x0140, 0x0150, 0x015f, 0x0170, 0x0181, 0x0191, + 0x0191, 0x01ab, 0x01c6, 0x01e0, 0x01fa, 0x0215, 0x0230, 0x0250, + 0x026f, 0x028e, 0x02ae, 0x02ae, 0x02bd, 0x02cf, 0x02de, 0x02f1, + 0x0300, 0x0313, 0x032d, 0x0354, 0x036a, 0x0384, 0x0394, 0x03b9, + 0x03de, 0x0405, 0x041e, 0x001e, 0x0032, 0x0045, 0x0058, 0x006d, + 0x0081, 0x0095, 0x00a8, 0x00bd, 0x00d2, 0x00e6, 0x00e6, 0x00f8, + 0x010a, 0x011c, 0x012e, 0x0140, 0x0153, 0x0166, 0x0179, 0x018c, + 0x01a0, 0x01b3, 0x01c6, 0x01d9, 0x01ec, 0x01ff, 0x0212, 0x0225, + // Entry 15C0 - 15FF + 0x0239, 0x024c, 0x025f, 0x0273, 0x0286, 0x0299, 0x02ac, 0x02bf, + 0x02d2, 0x02e5, 0x02f9, 0x030d, 0x0320, 0x0334, 0x0348, 0x035c, + 0x0370, 0x0384, 0x03a9, 0x03c0, 0x03d7, 0x03ee, 0x0405, 0x041d, + 0x0435, 0x044e, 0x0466, 0x047e, 0x0496, 0x04ae, 0x04c6, 0x04de, + 0x04f6, 0x050f, 0x0527, 0x0540, 0x0558, 0x0570, 0x0588, 0x05a1, + 0x05ba, 0x05d3, 0x05ec, 0x0605, 0x061c, 0x0633, 0x064b, 0x0663, + 0x067a, 0x0693, 0x06ab, 0x06c3, 0x06db, 0x06f3, 0x070c, 0x0724, + 0x073c, 0x0754, 0x076c, 0x0785, 0x079e, 0x07b7, 0x07cf, 0x07e8, + // Entry 1600 - 163F + 0x0801, 0x081a, 0x0833, 0x084d, 0x0867, 0x0881, 0x089c, 0x009c, + 0x00c2, 0x00e7, 0x0107, 0x0128, 0x0152, 0x0172, 0x0198, 0x01b3, + 0x01ce, 0x01ea, 0x0207, 0x0223, 0x0240, 0x025e, 0x027b, 0x0298, + 0x02b4, 0x02d0, 0x02ec, 0x0309, 0x0326, 0x0343, 0x035f, 0x037b, + 0x039c, 0x03be, 0x03e2, 0x0406, 0x0429, 0x044d, 0x0471, 0x0496, + 0x04b9, 0x04dd, 0x0501, 0x0525, 0x0549, 0x056c, 0x058c, 0x05ad, + 0x05d1, 0x05f2, 0x0616, 0x0216, 0x022b, 0x0240, 0x0256, 0x026c, + 0x0282, 0x0298, 0x02af, 0x02c5, 0x02db, 0x02f2, 0x0308, 0x031e, + // Entry 1640 - 167F + 0x0334, 0x034a, 0x0360, 0x0376, 0x038d, 0x03a4, 0x03bc, 0x03d2, + 0x03e8, 0x03fe, 0x0414, 0x0432, 0x0449, 0x0468, 0x047e, 0x049c, + 0x04b3, 0x04d2, 0x04e9, 0x04ff, 0x0516, 0x052c, 0x0543, 0x0559, + 0x0575, 0x0591, 0x05ad, 0x05c9, 0x05e5, 0x0601, 0x061d, 0x063a, + 0x0656, 0x0672, 0x0695, 0x06b8, 0x06d5, 0x06f5, 0x0715, 0x072c, + 0x0743, 0x075b, 0x0773, 0x078b, 0x07a3, 0x07bb, 0x07d9, 0x07f7, + 0x0814, 0x0832, 0x0855, 0x0873, 0x0891, 0x08ae, 0x08cc, 0x08ec, + 0x090c, 0x092f, 0x012f, 0x0149, 0x0158, 0x0168, 0x0177, 0x0187, + // Entry 1680 - 16BF + 0x0197, 0x01a6, 0x01b6, 0x01c5, 0x01d5, 0x01e5, 0x01f4, 0x0204, + 0x0213, 0x0223, 0x0232, 0x0241, 0x0251, 0x0260, 0x0270, 0x027f, + 0x028e, 0x029d, 0x02ac, 0x02bb, 0x02cb, 0x02db, 0x02ea, 0x02f9, + 0x030a, 0x031a, 0x031a, 0x032c, 0x033e, 0x0350, 0x0363, 0x0376, + 0x0389, 0x039c, 0x03ae, 0x03c0, 0x03d9, 0x03f2, 0x040b, 0x000b, + 0x0020, 0x0036, 0x0051, 0x0066, 0x007b, 0x0090, 0x00a5, 0x00ba, + 0x00cf, 0x00e3, 0x00f7, 0x0106, 0x0106, 0x0114, 0x0114, 0x012a, + 0x013d, 0x014d, 0x015c, 0x016b, 0x017c, 0x018c, 0x019c, 0x01ab, + // Entry 16C0 - 16FF + 0x01bc, 0x01cd, 0x01dd, 0x01ed, 0x01fd, 0x020e, 0x021f, 0x022f, + 0x023f, 0x024f, 0x0260, 0x0270, 0x0280, 0x0291, 0x02a1, 0x02b1, + 0x02c1, 0x02d1, 0x02e1, 0x02f2, 0x0304, 0x0314, 0x0323, 0x0332, + 0x0342, 0x0352, 0x0361, 0x0371, 0x0380, 0x0390, 0x039f, 0x03b0, + 0x03c0, 0x03c0, 0x03d4, 0x03e8, 0x03fc, 0x0410, 0x0424, 0x0024, + 0x003e, 0x0057, 0x0071, 0x008b, 0x00a6, 0x00bf, 0x00d8, 0x00f2, + 0x010d, 0x0127, 0x0141, 0x015b, 0x0174, 0x018d, 0x01a7, 0x01c2, + 0x01dc, 0x01f5, 0x020f, 0x0228, 0x0242, 0x025d, 0x0277, 0x0290, + // Entry 1700 - 173F + 0x02aa, 0x02c3, 0x02dd, 0x02f7, 0x0311, 0x032a, 0x0343, 0x035c, + 0x0376, 0x0390, 0x03aa, 0x03c3, 0x03dc, 0x03f5, 0x0410, 0x042b, + 0x0445, 0x045f, 0x047a, 0x0494, 0x0094, 0x00ba, 0x00d3, 0x00ec, + 0x0104, 0x011d, 0x0135, 0x014e, 0x0166, 0x017f, 0x0198, 0x01b1, + 0x01cb, 0x01e4, 0x01fd, 0x0217, 0x0231, 0x024a, 0x0264, 0x027f, + 0x0299, 0x02b3, 0x02cd, 0x02e7, 0x0301, 0x0318, 0x032f, 0x032f, + 0x0345, 0x035a, 0x036f, 0x0386, 0x039c, 0x03b2, 0x03c7, 0x03de, + 0x03f5, 0x040b, 0x0425, 0x0025, 0x0039, 0x004e, 0x0065, 0x007b, + // Entry 1740 - 177F + 0x0090, 0x00a5, 0x00bb, 0x00d1, 0x00ec, 0x0106, 0x0120, 0x013b, + 0x0150, 0x016a, 0x0183, 0x019c, 0x01b6, 0x01d0, 0x01e6, 0x01fb, + 0x020f, 0x0223, 0x0238, 0x024d, 0x0267, 0x0280, 0x0299, 0x02b3, + 0x02c7, 0x02e0, 0x02f8, 0x0310, 0x0329, 0x0342, 0x0354, 0x0366, + 0x0379, 0x038d, 0x039f, 0x03b1, 0x03c3, 0x03d6, 0x03e8, 0x03fa, + 0x040c, 0x041f, 0x0431, 0x0443, 0x0456, 0x046a, 0x047c, 0x048e, + 0x04a0, 0x04b2, 0x04c4, 0x04d5, 0x04e7, 0x04fc, 0x0511, 0x0526, + 0x053b, 0x0551, 0x0151, 0x0161, 0x0178, 0x018f, 0x01a7, 0x01bf, + // Entry 1780 - 17BF + 0x01d5, 0x01ec, 0x0203, 0x0216, 0x022d, 0x0245, 0x025b, 0x0271, + 0x0288, 0x029b, 0x02af, 0x02c9, 0x02db, 0x02f4, 0x0308, 0x031f, + 0x0337, 0x034d, 0x0364, 0x0376, 0x0388, 0x039f, 0x03b7, 0x03ce, + 0x03e4, 0x03fa, 0x0411, 0x0423, 0x0439, 0x0450, 0x0462, 0x0475, + 0x0487, 0x049a, 0x04ac, 0x04c4, 0x04dc, 0x04f3, 0x050a, 0x051d, + 0x052e, 0x0544, 0x0555, 0x0567, 0x0578, 0x058a, 0x059c, 0x05ae, + 0x05c1, 0x05d9, 0x05fa, 0x061b, 0x063e, 0x0658, 0x0679, 0x0697, + 0x06c3, 0x06dd, 0x06f7, 0x0711, 0x0311, 0x0324, 0x0339, 0x0354, + // Entry 17C0 - 17FF + 0x036a, 0x0385, 0x039a, 0x03b0, 0x03c6, 0x03dd, 0x03f2, 0x0408, + 0x041d, 0x0439, 0x044f, 0x0464, 0x047a, 0x0490, 0x04a6, 0x04c1, + 0x04dd, 0x04f3, 0x0507, 0x051b, 0x0535, 0x054f, 0x0569, 0x057e, + 0x0593, 0x05b0, 0x01b0, 0x01d4, 0x01ec, 0x0203, 0x021a, 0x0233, + 0x024b, 0x0263, 0x027a, 0x0293, 0x02ac, 0x02c4, 0x02c4, 0x02dc, + 0x02f3, 0x030a, 0x0323, 0x033b, 0x0353, 0x036a, 0x0383, 0x039c, + 0x03b4, 0x03b4, 0x03c7, 0x03de, 0x03f1, 0x0403, 0x0414, 0x0428, + 0x044b, 0x0462, 0x0474, 0x0489, 0x049e, 0x04b6, 0x04c8, 0x04db, + // Entry 1800 - 183F + 0x00db, 0x00fe, 0x0116, 0x0128, 0x0141, 0x0155, 0x0168, 0x0183, + 0x019c, 0x01bc, 0x01e7, 0x0213, 0x022e, 0x0250, 0x026b, 0x0288, + 0x0288, 0x029f, 0x02b7, 0x02ca, 0x02de, 0x02f1, 0x0306, 0x0322, + 0x0337, 0x0353, 0x0368, 0x0384, 0x039b, 0x03b9, 0x03d1, 0x03f0, + 0x0405, 0x041b, 0x0430, 0x044c, 0x045e, 0x047a, 0x048c, 0x04a3, + 0x04b6, 0x04c8, 0x04df, 0x04f1, 0x0508, 0x051b, 0x0533, 0x0555, + 0x0577, 0x0599, 0x05b2, 0x05c4, 0x05db, 0x05ed, 0x0604, 0x0616, + 0x0628, 0x0640, 0x0652, 0x066c, 0x067e, 0x0690, 0x06a2, 0x06b4, + // Entry 1840 - 187F + 0x06c6, 0x06dd, 0x06f4, 0x0706, 0x0718, 0x072d, 0x0747, 0x075e, + 0x077a, 0x0792, 0x07af, 0x07ca, 0x07ec, 0x0808, 0x082b, 0x0845, + 0x0864, 0x0885, 0x08ab, 0x08c4, 0x08e4, 0x08f6, 0x090f, 0x0929, + 0x0943, 0x095b, 0x0973, 0x098c, 0x09a8, 0x01a8, 0x01bb, 0x01cd, + 0x01df, 0x01f3, 0x0206, 0x0219, 0x022b, 0x023f, 0x0253, 0x0266, + 0x0274, 0x0283, 0x0291, 0x02a9, 0x02bc, 0x02d2, 0x02e3, 0x02ff, + 0x031b, 0x0337, 0x0353, 0x0376, 0x0392, 0x03af, 0x03cc, 0x03e9, + 0x040a, 0x0431, 0x0458, 0x0480, 0x04a8, 0x04d1, 0x0506, 0x053b, + // Entry 1880 - 18BF + 0x0562, 0x0588, 0x05b3, 0x05de, 0x060b, 0x0638, 0x0663, 0x068e, + 0x06bb, 0x06e8, 0x0713, 0x0313, 0x032a, 0x0342, 0x035a, 0x036c, + 0x037e, 0x0390, 0x03a3, 0x03b5, 0x03c7, 0x03da, 0x03ed, 0x0400, + 0x0413, 0x0427, 0x043a, 0x044d, 0x0460, 0x0474, 0x0487, 0x049a, + 0x04ad, 0x04c0, 0x04d3, 0x04e6, 0x04f9, 0x050c, 0x051f, 0x0532, + 0x0545, 0x0558, 0x056b, 0x057e, 0x0591, 0x05b3, 0x05d4, 0x05f4, + 0x0611, 0x062d, 0x064c, 0x0669, 0x0685, 0x06a4, 0x06ba, 0x06cf, + 0x06f3, 0x0717, 0x072b, 0x073f, 0x0753, 0x0766, 0x0779, 0x078e, + // Entry 18C0 - 18FF + 0x07a2, 0x07b6, 0x07c9, 0x07de, 0x07f3, 0x0807, 0x0819, 0x082d, + 0x0841, 0x0855, 0x086d, 0x0885, 0x0893, 0x08ac, 0x08bb, 0x08d5, + 0x08ef, 0x08fe, 0x0912, 0x0921, 0x093b, 0x094a, 0x0964, 0x0973, + 0x098d, 0x09a3, 0x09b2, 0x09cc, 0x09db, 0x09ea, 0x09f9, 0x0a13, + 0x0a22, 0x0a3c, 0x0a54, 0x0a6c, 0x0a7b, 0x0a95, 0x0aaf, 0x0abe, + 0x0ad8, 0x0ae8, 0x0af7, 0x0b11, 0x0b21, 0x0b30, 0x0b40, 0x0b50, + 0x0b5e, 0x0b6c, 0x0b7c, 0x0b8e, 0x0ba7, 0x0bba, 0x0bcc, 0x0be3, + 0x0bf5, 0x0c0c, 0x0c1e, 0x0c42, 0x0c59, 0x0c6f, 0x0c7d, 0x0c8d, + // Entry 1900 - 193F + 0x008d, 0x00a8, 0x00c5, 0x00dd, 0x00f8, 0x0108, 0x0119, 0x012a, + 0x013a, 0x014b, 0x015c, 0x016c, 0x017d, 0x018d, 0x019e, 0x01ae, + 0x01bf, 0x01cf, 0x01df, 0x01ef, 0x0200, 0x0211, 0x0221, 0x0232, + 0x0242, 0x0253, 0x0263, 0x0274, 0x0285, 0x0297, 0x02a8, 0x02b8, + 0x02c8, 0x02d8, 0x02e8, 0x02f9, 0x0309, 0x0319, 0x032a, 0x033a, + 0x0349, 0x0363, 0x037d, 0x0391, 0x03a4, 0x03b7, 0x03cb, 0x03de, + 0x03f2, 0x0405, 0x041c, 0x0433, 0x044a, 0x0461, 0x0478, 0x048f, + 0x04a6, 0x04c3, 0x04dd, 0x04ec, 0x04fd, 0x00fd, 0x0116, 0x013b, + // Entry 1940 - 197F + 0x0154, 0x0174, 0x018d, 0x019e, 0x01ae, 0x01be, 0x01d0, 0x01e1, + 0x01f2, 0x0202, 0x0214, 0x0226, 0x0237, 0x0237, 0x0248, 0x025a, + 0x026b, 0x027e, 0x0290, 0x02a2, 0x02b6, 0x02c9, 0x02dc, 0x02ee, + 0x0302, 0x0316, 0x0329, 0x033b, 0x034d, 0x035f, 0x0372, 0x0384, + 0x0397, 0x03aa, 0x03bd, 0x03d0, 0x03e3, 0x03f5, 0x0407, 0x0419, + 0x042c, 0x043e, 0x0450, 0x0462, 0x0474, 0x0487, 0x0499, 0x04ab, + 0x04bd, 0x04d0, 0x04e2, 0x04f5, 0x0507, 0x051a, 0x052c, 0x053e, + 0x0550, 0x0563, 0x057c, 0x0598, 0x05a6, 0x05b7, 0x05c4, 0x05df, + // Entry 1980 - 19BF + 0x0601, 0x0621, 0x0645, 0x0663, 0x0680, 0x069d, 0x06c2, 0x06e6, + 0x0704, 0x0726, 0x0326, 0x0347, 0x036b, 0x038e, 0x03af, 0x03d6, + 0x03fc, 0x0422, 0x0448, 0x0048, 0x005b, 0x006b, 0x007d, 0x0091, + 0x00b6, 0x00ea, 0x0113, 0x0144, 0x015b, 0x0196, 0x01af, 0x01c8, + 0x01e3, 0x01f7, 0x0210, 0x022b, 0x025b, 0x0286, 0x02a0, 0x02b9, + 0x02db, 0x02f6, 0x031a, 0x033d, 0x0362, 0x0382, 0x03a2, 0x03c1, + 0x03ea, 0x03fb, 0x041c, 0x0434, 0x0453, 0x0475, 0x048c, 0x04ab, + 0x04c2, 0x04d8, 0x04ee, 0x00ee, 0x0103, 0x011f, 0x011f, 0x013b, + // Entry 19C0 - 19FF + 0x0158, 0x0174, 0x0197, 0x01b3, 0x01cf, 0x01ed, 0x0209, 0x0229, + 0x0244, 0x0260, 0x027c, 0x02a4, 0x02c0, 0x02e5, 0x0301, 0x0322, + 0x033f, 0x0361, 0x038a, 0x03a6, 0x03c3, 0x03e0, 0x0400, 0x041c, + 0x0441, 0x0464, 0x0480, 0x049c, 0x04b9, 0x04e2, 0x0506, 0x0522, + 0x053e, 0x055a, 0x0578, 0x059d, 0x05ad, 0x05cd, 0x05ed, 0x060a, + 0x0628, 0x0646, 0x0666, 0x067f, 0x0699, 0x06b2, 0x06d2, 0x06eb, + 0x0704, 0x0726, 0x073f, 0x0758, 0x0771, 0x078a, 0x07a3, 0x07bc, + 0x07d5, 0x07ee, 0x0810, 0x0829, 0x0843, 0x085c, 0x0875, 0x088e, + // Entry 1A00 - 1A3F + 0x08a7, 0x08c0, 0x08d7, 0x08f5, 0x0910, 0x092f, 0x0946, 0x095d, + 0x0974, 0x098f, 0x09ab, 0x09ce, 0x09e5, 0x0a03, 0x0a1a, 0x0a31, + 0x0a4a, 0x0a61, 0x0a7d, 0x0a9d, 0x0ac0, 0x0ad7, 0x0aee, 0x0b05, + 0x0b25, 0x0b43, 0x0b5a, 0x0b73, 0x0b8d, 0x0bae, 0x0bc9, 0x0be8, + 0x0c01, 0x0c1f, 0x0c3d, 0x0c5b, 0x0c79, 0x0c9a, 0x0cbc, 0x0cdc, + 0x0cfc, 0x0d1c, 0x0d31, 0x0d57, 0x0d7d, 0x0da3, 0x0dc9, 0x0def, + 0x0e15, 0x0e3b, 0x0e6e, 0x0e94, 0x0eba, 0x0ee0, 0x0efb, 0x0f16, + 0x0f32, 0x0f5a, 0x0f82, 0x0fa5, 0x0fc5, 0x0fed, 0x1013, 0x1039, + // Entry 1A40 - 1A7F + 0x105f, 0x1085, 0x10ab, 0x10d1, 0x10f7, 0x111d, 0x1143, 0x1169, + 0x118f, 0x11b5, 0x11dd, 0x1203, 0x1229, 0x124f, 0x1277, 0x12a3, + 0x12ca, 0x12f2, 0x131f, 0x1355, 0x1381, 0x13a9, 0x13d6, 0x1400, + 0x1428, 0x1452, 0x1474, 0x148b, 0x14ac, 0x14c5, 0x14ea, 0x1501, + 0x152c, 0x154a, 0x1568, 0x158b, 0x15a5, 0x15c4, 0x15ef, 0x1618, + 0x1643, 0x166c, 0x168b, 0x16ac, 0x16d8, 0x16fe, 0x1729, 0x1748, + 0x1766, 0x177f, 0x17a0, 0x17b9, 0x17e2, 0x17fd, 0x181a, 0x1839, + 0x185a, 0x1878, 0x188f, 0x18ba, 0x18db, 0x18f4, 0x190f, 0x192c, + // Entry 1A80 - 1ABF + 0x1949, 0x195e, 0x1977, 0x198d, 0x19a3, 0x19b9, 0x19cf, 0x19ea, + 0x1a05, 0x1a29, 0x1a3f, 0x1a55, 0x1a76, 0x1a8c, 0x1aa2, 0x1ab4, + 0x1ac6, 0x1ad8, 0x1b0b, 0x1b2a, 0x1b49, 0x1b68, 0x1b8e, 0x1bb4, + 0x1bd4, 0x1bf2, 0x1c18, 0x1c36, 0x1c54, 0x1c7a, 0x1ca0, 0x1cbe, + 0x1ce4, 0x1d0a, 0x1d30, 0x1d4e, 0x1d71, 0x1d8f, 0x1db1, 0x1dcf, + 0x1df0, 0x1e12, 0x1e30, 0x1e67, 0x1ea6, 0x1ec4, 0x1ee4, 0x1f23, + 0x1f41, 0x1f6e, 0x1f9b, 0x1fc8, 0x1fdf, 0x03df, 0x03f6, 0x041b, + 0x043a, 0x0458, 0x048a, 0x04b0, 0x04d4, 0x04f9, 0x051c, 0x0541, + // Entry 1AC0 - 1AFF + 0x0564, 0x058a, 0x05ae, 0x05db, 0x0606, 0x062b, 0x064e, 0x0673, + 0x0696, 0x06bc, 0x06e0, 0x0703, 0x0724, 0x0750, 0x077a, 0x07a6, + 0x07d0, 0x07fc, 0x0826, 0x0852, 0x087c, 0x08a3, 0x08c8, 0x08f5, + 0x0920, 0x0945, 0x0968, 0x098a, 0x09aa, 0x09cf, 0x09f2, 0x0a17, + 0x0a3a, 0x0a5f, 0x0a82, 0x0aa5, 0x0ac6, 0x0aed, 0x0b12, 0x0b39, + 0x0b5e, 0x0b8d, 0x0bba, 0x0bdb, 0x0bfa, 0x0c1f, 0x0c42, 0x0c68, + 0x0c8c, 0x0cb1, 0x0cd4, 0x0d04, 0x0d32, 0x0d58, 0x0d7c, 0x0da8, + 0x0dd2, 0x0df3, 0x0e12, 0x0e37, 0x0e5a, 0x0e7f, 0x0ea2, 0x0ec7, + // Entry 1B00 - 1B3F + 0x0eea, 0x0f0f, 0x0f32, 0x0f58, 0x0f7c, 0x0fa8, 0x0fd2, 0x0ffd, + 0x1026, 0x1055, 0x1082, 0x10ae, 0x10d8, 0x1104, 0x112e, 0x114f, + 0x116e, 0x1193, 0x11b6, 0x11db, 0x11fe, 0x1223, 0x1246, 0x1276, + 0x12a4, 0x12ca, 0x12ee, 0x1313, 0x1336, 0x135b, 0x137e, 0x13ad, + 0x13da, 0x1409, 0x1436, 0x1469, 0x149a, 0x14bf, 0x14e2, 0x1507, + 0x152a, 0x1550, 0x1574, 0x15a0, 0x15ca, 0x15f5, 0x161e, 0x1645, + 0x166a, 0x1696, 0x16c0, 0x16eb, 0x1714, 0x1744, 0x1772, 0x1793, + 0x17b2, 0x17d7, 0x17fa, 0x181b, 0x183a, 0x185b, 0x187a, 0x189f, + // Entry 1B40 - 1B7F + 0x18c2, 0x18e7, 0x190a, 0x192f, 0x1952, 0x1977, 0x199a, 0x19bf, + 0x19e2, 0x1a07, 0x1a2a, 0x1a50, 0x1a74, 0x1a99, 0x1abc, 0x1ae2, + 0x1b06, 0x1b2a, 0x1b4d, 0x1b71, 0x1b95, 0x1bbe, 0x1be6, 0x1c14, + 0x1c3e, 0x1c5a, 0x1c72, 0x1c97, 0x1cba, 0x1ce0, 0x1d04, 0x1d34, + 0x1d62, 0x1d92, 0x1dc0, 0x1df5, 0x1e28, 0x1e58, 0x1e86, 0x1eba, + 0x1eec, 0x1f17, 0x1f40, 0x1f6b, 0x1f94, 0x1fc4, 0x1ff2, 0x201d, + 0x2046, 0x2075, 0x20a2, 0x20c7, 0x20ea, 0x2110, 0x2134, 0x2155, + 0x2174, 0x21a4, 0x21d2, 0x2202, 0x2230, 0x2265, 0x2298, 0x22c8, + // Entry 1B80 - 1BBF + 0x22f6, 0x232a, 0x235c, 0x2382, 0x23a6, 0x23cb, 0x23ee, 0x2413, + 0x2436, 0x245c, 0x2480, 0x24b0, 0x24de, 0x250e, 0x253c, 0x2571, + 0x25a4, 0x25d4, 0x2602, 0x2636, 0x2668, 0x2692, 0x26ba, 0x26e4, + 0x270c, 0x273b, 0x2768, 0x2792, 0x27ba, 0x27e8, 0x2814, 0x2839, + 0x285c, 0x2882, 0x28a6, 0x28d0, 0x28f8, 0x2922, 0x294a, 0x2979, + 0x29a6, 0x29d0, 0x29f8, 0x2a26, 0x2a52, 0x2a73, 0x2a92, 0x2ab7, + 0x2ada, 0x2b00, 0x2b24, 0x2b45, 0x2b64, 0x2b88, 0x2baa, 0x2bcd, + 0x2bee, 0x2c0e, 0x2c2c, 0x2c4f, 0x2c72, 0x2c9f, 0x2ccc, 0x2cf8, + // Entry 1BC0 - 1BFF + 0x2d24, 0x2d57, 0x2d8a, 0x2daf, 0x2dd4, 0x2e03, 0x2e32, 0x2e60, + 0x2e8e, 0x2ec3, 0x2ef8, 0x2f1d, 0x2f42, 0x2f71, 0x2fa0, 0x2fce, + 0x2ffc, 0x03fc, 0x0423, 0x044a, 0x047b, 0x04ac, 0x04dc, 0x050c, + 0x010c, 0x012d, 0x014e, 0x0179, 0x01a4, 0x01ce, 0x01f8, 0x0229, + 0x025a, 0x027d, 0x02a0, 0x02cd, 0x02fa, 0x0326, 0x0352, 0x0385, + 0x03b8, 0x03da, 0x03fc, 0x0428, 0x0454, 0x047f, 0x04aa, 0x04dc, + 0x050e, 0x0532, 0x0556, 0x0584, 0x05b2, 0x05df, 0x060c, 0x0640, + 0x0674, 0x0699, 0x06be, 0x06ed, 0x071c, 0x074a, 0x0778, 0x0378, + // Entry 1C00 - 1C3F + 0x039f, 0x03c6, 0x03f7, 0x0428, 0x0458, 0x0488, 0x0088, 0x00ad, + 0x00d2, 0x0101, 0x0130, 0x015e, 0x018c, 0x01c1, 0x01f6, 0x01f6, + 0x021d, 0x021d, 0x024e, 0x024e, 0x027e, 0x027e, 0x02b5, 0x02d8, + 0x02fb, 0x0328, 0x0355, 0x0381, 0x03ad, 0x03e0, 0x0413, 0x0438, + 0x045d, 0x048c, 0x04bb, 0x04e9, 0x0517, 0x054c, 0x0581, 0x05a4, + 0x05c6, 0x05eb, 0x060f, 0x0630, 0x0650, 0x0672, 0x0693, 0x06b8, + 0x06dc, 0x0701, 0x0725, 0x0748, 0x076a, 0x036a, 0x039f, 0x03d4, + 0x0413, 0x0452, 0x0490, 0x04ce, 0x0513, 0x0558, 0x0590, 0x05c8, + // Entry 1C40 - 1C7F + 0x060a, 0x064c, 0x068d, 0x06ce, 0x0716, 0x075e, 0x0791, 0x07c4, + 0x0801, 0x083e, 0x087a, 0x08b6, 0x08f9, 0x093c, 0x0972, 0x09a8, + 0x09e8, 0x0a28, 0x0a67, 0x0aa6, 0x0aec, 0x0b32, 0x0b67, 0x0b9c, + 0x0bdb, 0x0c1a, 0x0c58, 0x0c96, 0x0cdb, 0x0d20, 0x0d58, 0x0d90, + 0x0dd2, 0x0e14, 0x0e55, 0x0e96, 0x0ede, 0x0f26, 0x0f4a, 0x0f6e, + 0x0fa3, 0x0fce, 0x1002, 0x0002, 0x002b, 0x0066, 0x008c, 0x00b2, + 0x00d7, 0x00fb, 0x0129, 0x0136, 0x014a, 0x0155, 0x0166, 0x0185, + 0x01b8, 0x01e1, 0x0213, 0x0213, 0x023a, 0x0273, 0x029a, 0x02c0, + // Entry 1C80 - 1CBF + 0x02e3, 0x0305, 0x0331, 0x0346, 0x035a, 0x0375, 0x0398, 0x03bb, + 0x03eb, 0x041a, 0x001a, 0x0042, 0x0078, 0x009d, 0x00c2, 0x00e6, + 0x0109, 0x0109, 0x011e, 0x0132, 0x014d, 0x0173, 0x0199, 0x01cc, + 0x01fe, 0x021f, 0x0240, 0x026b, 0x02a4, 0x02cc, 0x02f4, 0x031b, + 0x0341, 0x0364, 0x037d, 0x0395, 0x03a0, 0x03a0, 0x03d5, 0x0400, + 0x0434, 0x0034, 0x005d, 0x0098, 0x00bf, 0x00e5, 0x010a, 0x012e, + 0x015c, 0x0166, 0x0171, 0x0171, 0x0178, 0x017f, 0x0187, 0x018f, + 0x01a1, 0x01b2, 0x01c2, 0x01ce, 0x01df, 0x01e9, 0x01f3, 0x0203, + // Entry 1CC0 - 1CFF + 0x0218, 0x0229, 0x023b, 0x024d, 0x0253, 0x0266, 0x0271, 0x0278, + 0x027f, 0x028d, 0x02a1, 0x02b0, 0x02ca, 0x02e5, 0x0300, 0x0325, + 0x033f, 0x035a, 0x0375, 0x039a, 0x03a0, 0x03ad, 0x03b3, 0x03c4, + 0x03d2, 0x03e0, 0x03f3, 0x0404, 0x0412, 0x0425, 0x043c, 0x0453, + 0x046d, 0x0483, 0x0499, 0x04ae, 0x04bc, 0x04d1, 0x04d6, 0x04e2, + 0x04ee, 0x04fc, 0x0511, 0x0526, 0x052b, 0x0554, 0x057e, 0x058c, + 0x05a3, 0x05ae, 0x05b6, 0x05be, 0x05cb, 0x05e0, 0x05e8, 0x05f5, + 0x0603, 0x0621, 0x0640, 0x0654, 0x066d, 0x0686, 0x0696, 0x06ab, + // Entry 1D00 - 1D3F + 0x06c1, 0x06d8, 0x06e4, 0x06f6, 0x06fe, 0x071e, 0x0733, 0x073d, + 0x074e, 0x0765, 0x077a, 0x0789, 0x079d, 0x07b1, 0x07c4, 0x07d1, + 0x07dd, 0x07e5, 0x07f7, 0x0810, 0x081b, 0x082f, 0x083e, 0x0851, + 0x085f, 0x005f, 0x0074, 0x0089, 0x009d, 0x00b4, 0x00ce, 0x00e9, + 0x0104, 0x0120, 0x0135, 0x0149, 0x0159, 0x0179, 0x0179, 0x0189, + 0x0199, 0x01a8, 0x01b9, 0x01ca, 0x01da, 0x01ef, 0x0200, 0x0217, + 0x0233, 0x0250, 0x0270, 0x027e, 0x028b, 0x0298, 0x02a7, 0x02b5, + 0x02c3, 0x02d0, 0x02df, 0x02ee, 0x02fc, 0x030f, 0x031e, 0x0333, + // Entry 1D40 - 1D7F + 0x034d, 0x0368, 0x0368, 0x0386, 0x03a4, 0x03c2, 0x03e0, 0x0402, + 0x0420, 0x043e, 0x045c, 0x047a, 0x0498, 0x04b6, 0x04d4, 0x04f2, + 0x00f2, 0x0104, 0x010e, 0x011b, 0x012c, 0x0135, 0x013e, 0x0148, + 0x0153, 0x015d, 0x0165, 0x0174, 0x017d, 0x0186, 0x018e, 0x0199, + 0x01a5, 0x01b6, 0x01bf, 0x01cb, 0x01d7, 0x01e3, 0x01ec, 0x01ff, + 0x020c, 0x0216, 0x0227, 0x0238, 0x0248, 0x0252, 0x025c, 0x0265, + 0x0265, 0x0281, 0x029e, 0x02c2, 0x02e7, 0x030a, 0x0329, 0x0343, + 0x035e, 0x0374, 0x0394, 0x03b8, 0x03d2, 0x03eb, 0x0405, 0x041f, + // Entry 1D80 - 1DBF + 0x043a, 0x045e, 0x047e, 0x0498, 0x04b2, 0x04de, 0x04ff, 0x0527, + 0x053f, 0x0558, 0x0573, 0x0594, 0x05b9, 0x05e9, 0x0618, 0x0632, + 0x064d, 0x0665, 0x0265, 0x026f, 0x0287, 0x029e, 0x02ac, 0x02be, + 0x02c5, 0x02cd, 0x02db, 0x02e2, 0x02f3, 0x0301, 0x0311, 0x0327, + 0x033e, 0x034d, 0x0368, 0x0378, 0x038e, 0x039e, 0x03ac, 0x03ba, + 0x03d1, 0x03dc, 0x03f5, 0x0405, 0x041c, 0x0433, 0x0443, 0x0459, + 0x0470, 0x0481, 0x0489, 0x0495, 0x04a3, 0x04b2, 0x04ba, 0x04d1, + 0x04db, 0x04e3, 0x04f4, 0x050a, 0x0528, 0x0533, 0x0540, 0x0550, + // Entry 1DC0 - 1DFF + 0x0566, 0x0576, 0x0584, 0x0594, 0x05a4, 0x05b4, 0x05c4, 0x05d2, + 0x05dd, 0x05e7, 0x05f3, 0x05ff, 0x0611, 0x0622, 0x0630, 0x0646, + 0x065f, 0x067a, 0x0692, 0x06af, 0x06ca, 0x06e5, 0x0702, 0x071d, + 0x073b, 0x0757, 0x0773, 0x078f, 0x07ab, 0x07b8, 0x07c8, 0x07d0, + 0x07dc, 0x07ea, 0x0805, 0x0820, 0x0839, 0x0852, 0x086b, 0x0885, + 0x089e, 0x08b8, 0x08d4, 0x08ef, 0x0908, 0x0923, 0x093d, 0x095a, + 0x0976, 0x0993, 0x09a9, 0x09ba, 0x09cb, 0x09de, 0x09f0, 0x0a02, + 0x0a13, 0x0a26, 0x0a39, 0x0a4b, 0x0a5c, 0x0a70, 0x0a84, 0x0a97, + // Entry 1E00 - 1E3F + 0x0ab0, 0x0aca, 0x0ae4, 0x0afb, 0x0b12, 0x0b2b, 0x0b43, 0x0b5b, + 0x0b72, 0x0b8b, 0x0ba4, 0x0bbc, 0x0bd3, 0x0bed, 0x0c07, 0x0c20, + 0x0c3f, 0x0c5f, 0x0c7f, 0x0c9d, 0x0cb8, 0x0cd2, 0x0cf4, 0x0d11, + 0x0d2c, 0x0d4a, 0x0d66, 0x0d88, 0x0da3, 0x0db3, 0x0dc5, 0x01c5, + 0x01d4, 0x01e1, 0x01f1, 0x0200, 0x0210, 0x021d, 0x022d, 0x023d, + 0x024d, 0x025d, 0x0278, 0x0294, 0x02a8, 0x02bd, 0x02d7, 0x02ef, + 0x030a, 0x0324, 0x033d, 0x0357, 0x036f, 0x0385, 0x039e, 0x03b6, + 0x03cd, 0x03e6, 0x0400, 0x0419, 0x0433, 0x0448, 0x0464, 0x047a, + // Entry 1E40 - 1E7F + 0x049a, 0x04bb, 0x04dd, 0x0500, 0x0526, 0x054b, 0x056d, 0x058b, + 0x05a7, 0x05da, 0x05f9, 0x0614, 0x0637, 0x065c, 0x0680, 0x06a3, + 0x06c7, 0x06ed, 0x0713, 0x0738, 0x075d, 0x0787, 0x07ac, 0x07c3, + 0x07d8, 0x07f0, 0x0807, 0x0830, 0x0859, 0x087b, 0x089e, 0x08c1, + 0x08d7, 0x08eb, 0x0902, 0x0918, 0x092f, 0x0943, 0x095a, 0x0971, + 0x0988, 0x099f, 0x09b5, 0x09cc, 0x09e4, 0x09fd, 0x0a1d, 0x0a3f, + 0x0a55, 0x0a69, 0x0a80, 0x0a96, 0x0aac, 0x0ac3, 0x0ad8, 0x0aeb, + 0x0b01, 0x0b16, 0x0b32, 0x0b51, 0x0b84, 0x0bb5, 0x0bcf, 0x0bf5, + // Entry 1E80 - 1EBF + 0x0c15, 0x0c2f, 0x0c49, 0x0c5c, 0x0c79, 0x0ca3, 0x0cba, 0x0cde, + 0x0d03, 0x0d28, 0x0d53, 0x0d7f, 0x0dab, 0x0dc6, 0x0de2, 0x0dfe, + 0x0e05, 0x0e0f, 0x0e23, 0x0e2f, 0x0e43, 0x0e4c, 0x0e55, 0x0e5a, + 0x0e64, 0x0e75, 0x0e85, 0x0e97, 0x0eb1, 0x0ec9, 0x0ed5, 0x0ee2, + 0x0ef1, 0x0f00, 0x0f0a, 0x0f1c, 0x0f24, 0x0f32, 0x0f3b, 0x0f4c, + 0x0f59, 0x0f68, 0x0f73, 0x0f7c, 0x0f87, 0x0f96, 0x0f9e, 0x0fa9, + 0x0fae, 0x0fbc, 0x0fcb, 0x0fd2, 0x0fe1, 0x0fec, 0x0ffb, 0x1006, + 0x1010, 0x101c, 0x1021, 0x1029, 0x1038, 0x1047, 0x1057, 0x1067, + // Entry 1EC0 - 1EFF + 0x1076, 0x1088, 0x10a2, 0x10c0, 0x10c9, 0x10d0, 0x10d5, 0x10df, + 0x10e8, 0x10ee, 0x1102, 0x110c, 0x111a, 0x1128, 0x1137, 0x1140, + 0x114e, 0x1157, 0x1162, 0x1179, 0x1194, 0x11aa, 0x11d1, 0x11fc, + 0x120b, 0x121e, 0x1236, 0x1242, 0x124e, 0x125b, 0x1276, 0x1288, + 0x129c, 0x12b2, 0x12d8, 0x12fa, 0x1306, 0x1312, 0x1322, 0x132f, + 0x133d, 0x1346, 0x1354, 0x135f, 0x136d, 0x1383, 0x138e, 0x13a1, + 0x13ad, 0x13b9, 0x13c9, 0x13df, 0x13f4, 0x140c, 0x1423, 0x143d, + 0x1457, 0x1474, 0x1482, 0x1493, 0x149a, 0x14ab, 0x14b8, 0x14c8, + // Entry 1F00 - 1F3F + 0x14e6, 0x1507, 0x1521, 0x153e, 0x1561, 0x1587, 0x15a0, 0x15b9, + 0x15db, 0x15fd, 0x1605, 0x160d, 0x1621, 0x1635, 0x164e, 0x1667, + 0x1677, 0x1687, 0x1690, 0x169b, 0x16aa, 0x16bb, 0x16d0, 0x16e7, + 0x1707, 0x1729, 0x1744, 0x1761, 0x1769, 0x1780, 0x178e, 0x179d, + 0x17af, 0x17ca, 0x17e8, 0x17f2, 0x17fc, 0x1808, 0x1815, 0x1822, + 0x1838, 0x184c, 0x1861, 0x187a, 0x1888, 0x1894, 0x18a0, 0x18ad, + 0x18ba, 0x18ce, 0x18d8, 0x18e1, 0x18ea, 0x18f1, 0x18fa, 0x1900, + 0x1904, 0x190a, 0x192d, 0x1957, 0x1965, 0x196d, 0x197b, 0x19ad, + // Entry 1F40 - 1F7F + 0x19c4, 0x19db, 0x19ed, 0x1a08, 0x1a26, 0x1a4d, 0x1a58, 0x1a60, + 0x1a68, 0x1a82, 0x1a8d, 0x1a90, 0x1a94, 0x1a97, 0x1aab, 0x1ab9, + 0x1aca, 0x1ada, 0x1aec, 0x1af7, 0x1b07, 0x1b13, 0x1b20, 0x1b2e, + 0x1b34, 0x1b59, 0x1b7f, 0x1b96, 0x1bae, 0x1bc3, 0x1bd3, 0x1be4, + 0x1bf1, 0x1c00, 0x1c13, 0x1c1f, 0x1c28, 0x1c3d, 0x1c4f, 0x1c64, + 0x1c77, 0x1c8d, 0x1caf, 0x1cd1, 0x1ce6, 0x1cfe, 0x1d12, 0x1d26, + 0x1d3f, 0x1d58, 0x1d77, 0x1d99, 0x1db8, 0x1dda, 0x1df9, 0x1e1b, + 0x1e39, 0x1e57, 0x1e6d, 0x1e90, 0x1eb2, 0x1ede, 0x1eef, 0x1f0a, + // Entry 1F80 - 1FBF + 0x1f24, 0x1f40, 0x1f66, 0x1f9e, 0x1fdc, 0x1ff5, 0x200c, 0x2029, + 0x2041, 0x2067, 0x208b, 0x20c1, 0x20fd, 0x2112, 0x212d, 0x2146, + 0x2153, 0x2161, 0x2166, 0x2172, 0x2180, 0x218a, 0x2195, 0x219e, + 0x21aa, 0x21b7, 0x21c1, 0x21cc, 0x21dd, 0x21ed, 0x21fb, 0x2208, + 0x2219, 0x2227, 0x222a, 0x2231, 0x2237, 0x2249, 0x225b, 0x226a, + 0x2280, 0x228f, 0x2294, 0x229d, 0x22ac, 0x22bc, 0x22ce, 0x22e1, + 0x22f2, 0x2306, 0x230b, 0x2310, 0x2338, 0x2342, 0x2354, 0x2368, + 0x2370, 0x238b, 0x23a7, 0x23b8, 0x23c4, 0x23d0, 0x23e2, 0x23ea, + // Entry 1FC0 - 1FFF + 0x23f6, 0x2406, 0x2413, 0x2418, 0x2423, 0x242e, 0x244a, 0x246b, + 0x248b, 0x24ac, 0x24ce, 0x24ec, 0x250d, 0x252f, 0x254f, 0x256e, + 0x2591, 0x25b1, 0x25d5, 0x25f9, 0x2620, 0x2644, 0x2669, 0x2693, + 0x26be, 0x26e4, 0x270c, 0x272d, 0x2752, 0x2772, 0x2795, 0x27b7, + 0x27df, 0x2804, 0x2823, 0x2846, 0x2864, 0x2885, 0x28a9, 0x28d3, + 0x28f7, 0x291b, 0x2941, 0x2963, 0x2988, 0x29a9, 0x29c9, 0x29ea, + 0x2a0a, 0x2a31, 0x2a54, 0x2a78, 0x2a9b, 0x2ac1, 0x2ae6, 0x2b0b, + 0x2b30, 0x2b5c, 0x2b7b, 0x2b9a, 0x2bb5, 0x2bd6, 0x2bfe, 0x2c22, + // Entry 2000 - 203F + 0x2c45, 0x2c6b, 0x2c8f, 0x2ca9, 0x2cc2, 0x2cdd, 0x2d01, 0x2d27, + 0x2d4a, 0x2d6e, 0x2d89, 0x2d97, 0x2dbe, 0x2dd1, 0x2ddc, 0x2df9, + 0x2e09, 0x2e24, 0x2e42, 0x2e51, 0x2e63, 0x2e89, 0x2e95, 0x2eab, + 0x2eb6, 0x2ed7, 0x2eec, 0x2f0e, 0x2f19, 0x2f2a, 0x2f3b, 0x2f5c, + 0x2f7d, 0x2f9c, 0x2fb9, 0x2fd7, 0x2fef, 0x3009, 0x3025, 0x3032, + 0x303b, 0x304e, 0x3061, 0x307c, 0x3096, 0x30b1, 0x30cd, 0x30e8, + 0x3104, 0x3124, 0x3141, 0x3161, 0x3182, 0x31a0, 0x31c1, 0x31de, + 0x31fd, 0x321a, 0x3231, 0x324f, 0x326f, 0x328d, 0x329f, 0x32b8, + // Entry 2040 - 207F + 0x32e7, 0x3316, 0x3323, 0x3333, 0x3345, 0x335a, 0x3387, 0x339c, + 0x33b2, 0x33c9, 0x33df, 0x33f5, 0x340b, 0x3421, 0x344e, 0x347e, + 0x34a9, 0x34df, 0x3513, 0x3540, 0x3578, 0x35ae, 0x35d6, 0x360a, + 0x363c, 0x3666, 0x368e, 0x36ba, 0x36e9, 0x36f4, 0x3701, 0x370d, + 0x3724, 0x3732, 0x374a, 0x3762, 0x377f, 0x379c, 0x37b6, 0x37c6, + 0x37d8, 0x37ea, 0x37f6, 0x37fa, 0x3809, 0x381b, 0x382c, 0x3840, + 0x385a, 0x3877, 0x3886, 0x389e, 0x38aa, 0x38b2, 0x38bc, 0x38d3, + 0x38ea, 0x390e, 0x3931, 0x3952, 0x3975, 0x39ab, 0x39e0, 0x3a16, + // Entry 2080 - 20BF + 0x3a21, 0x3a2a, 0x3a35, 0x3a50, 0x3a73, 0x3a97, 0x3ab8, 0x3adb, + 0x3aee, 0x3b03, 0x3b1a, 0x3b26, 0x3b39, 0x3b48, 0x3b5a, 0x035a, + 0x0369, 0x0384, 0x039c, 0x03b2, 0x03d0, 0x03e2, 0x03f8, 0x0407, + 0x041b, 0x043b, 0x044f, 0x046d, 0x0481, 0x049b, 0x04af, 0x04c2, + 0x04dd, 0x04fa, 0x0517, 0x0536, 0x0554, 0x0573, 0x058e, 0x05b2, + 0x05c3, 0x05db, 0x05f0, 0x0601, 0x061a, 0x0634, 0x064f, 0x0668, + 0x0678, 0x0689, 0x0695, 0x069d, 0x06af, 0x06c9, 0x06e7, 0x02e7, + 0x02ef, 0x02f8, 0x0300, 0x0311, 0x0320, 0x032b, 0x0349, 0x035c, + // Entry 20C0 - 20FF + 0x0364, 0x037f, 0x0393, 0x0393, 0x03a4, 0x03b5, 0x03c8, 0x03da, + 0x03ec, 0x03fd, 0x0410, 0x0423, 0x0435, 0x0447, 0x045c, 0x0471, + 0x0488, 0x049f, 0x04b5, 0x04cb, 0x04e3, 0x04fa, 0x0511, 0x0526, + 0x053d, 0x0554, 0x056d, 0x0585, 0x059d, 0x05b4, 0x05cd, 0x05e6, + 0x05fe, 0x0616, 0x0631, 0x064c, 0x0669, 0x0686, 0x06a2, 0x06be, + 0x06dc, 0x06f9, 0x0716, 0x0731, 0x0744, 0x0757, 0x076c, 0x0780, + 0x0794, 0x07a7, 0x07bc, 0x07d1, 0x07e5, 0x07f9, 0x0810, 0x0827, + 0x0840, 0x0859, 0x0871, 0x0889, 0x08a3, 0x08bc, 0x08d5, 0x08ec, + // Entry 2100 - 213F + 0x090e, 0x0930, 0x0952, 0x0974, 0x0996, 0x09b8, 0x09da, 0x09fc, + 0x0a1e, 0x0a40, 0x0a62, 0x0a84, 0x0aa6, 0x0ac8, 0x0aea, 0x0b0c, + 0x0b2e, 0x0b50, 0x0b72, 0x0b94, 0x0bb6, 0x0bd8, 0x0bfa, 0x0c1c, + 0x0c3e, 0x0c60, 0x0c7e, 0x0c9c, 0x0cba, 0x0cd8, 0x0cf6, 0x0d14, + 0x0d32, 0x0d50, 0x0d6e, 0x0d8c, 0x0daa, 0x0dc8, 0x0de6, 0x0e04, + 0x0e22, 0x0e40, 0x0e5e, 0x0e7c, 0x0e9a, 0x0eb8, 0x0ed6, 0x0ef4, + 0x0f12, 0x0f30, 0x0f4e, 0x0f6c, 0x0f88, 0x0fa4, 0x0fc0, 0x0fdc, + 0x0ff8, 0x1014, 0x1030, 0x104c, 0x1068, 0x1084, 0x10a0, 0x10bc, + // Entry 2140 - 217F + 0x10d8, 0x10f4, 0x1110, 0x112c, 0x1148, 0x1164, 0x1180, 0x119c, + 0x11b8, 0x11d4, 0x11f0, 0x120c, 0x1228, 0x1244, 0x1256, 0x1274, + 0x1292, 0x12b2, 0x12d2, 0x12f1, 0x1310, 0x1331, 0x1351, 0x1371, + 0x138f, 0x13a7, 0x13bf, 0x13d9, 0x13f2, 0x140b, 0x1423, 0x143d, + 0x1457, 0x1470, 0x1489, 0x14a4, 0x14c1, 0x14de, 0x14f9, 0x1514, + 0x153d, 0x1566, 0x158d, 0x15b4, 0x15e0, 0x160c, 0x1636, 0x1660, + 0x1681, 0x16a8, 0x16cf, 0x16f0, 0x1710, 0x1736, 0x175c, 0x177c, + 0x179b, 0x17c0, 0x17e5, 0x1804, 0x1822, 0x1846, 0x186a, 0x1888, + // Entry 2180 - 21BF + 0x18ad, 0x18d8, 0x1902, 0x192c, 0x1957, 0x1981, 0x19ab, 0x19d0, + 0x19f4, 0x1a1e, 0x1a47, 0x1a70, 0x1a9a, 0x1ac3, 0x1aec, 0x1b10, + 0x1b36, 0x1b62, 0x1b8e, 0x1bba, 0x1be6, 0x1c12, 0x1c3e, 0x1c64, + 0x1c88, 0x1cb2, 0x1cdc, 0x1d06, 0x1d30, 0x1d5a, 0x1d84, 0x1da8, + 0x1dd2, 0x1e02, 0x1e32, 0x1e62, 0x1e91, 0x1ec0, 0x1ef0, 0x1f1f, + 0x1f4e, 0x1f7d, 0x1fac, 0x1fdb, 0x200a, 0x203a, 0x206a, 0x2094, + 0x20bd, 0x20e6, 0x210d, 0x2134, 0x2152, 0x216e, 0x2197, 0x21c0, + 0x21e2, 0x220a, 0x2232, 0x2253, 0x227a, 0x22a1, 0x22c1, 0x22e7, + // Entry 21C0 - 21FF + 0x230d, 0x232c, 0x2359, 0x2386, 0x23ac, 0x23d8, 0x2404, 0x2429, + 0x2457, 0x2485, 0x24ac, 0x24d8, 0x2504, 0x2529, 0x255b, 0x258d, + 0x25b8, 0x25dd, 0x2601, 0x2623, 0x2646, 0x267b, 0x26b0, 0x26d1, + 0x26e8, 0x26fd, 0x2715, 0x272c, 0x2743, 0x2758, 0x2770, 0x2787, + 0x27ae, 0x27d2, 0x27f9, 0x281d, 0x282d, 0x2843, 0x285a, 0x2873, + 0x2883, 0x289b, 0x28b5, 0x28ce, 0x28d8, 0x28f0, 0x2909, 0x2920, + 0x292f, 0x2947, 0x295d, 0x2972, 0x2982, 0x298d, 0x2999, 0x29a3, + 0x29b9, 0x29cf, 0x29e2, 0x29f6, 0x2a09, 0x2a3b, 0x2a5e, 0x2a90, + // Entry 2200 - 223F + 0x2ac3, 0x2ad7, 0x2afa, 0x2b2d, 0x2b39, 0x2b45, 0x2b66, 0x2b90, + 0x2bab, 0x2bc4, 0x2bea, 0x2c14, 0x2c3e, 0x2c62, 0x2c74, 0x2c86, + 0x2c95, 0x2ca4, 0x2cbc, 0x2cd4, 0x2ce7, 0x2cfa, 0x2d14, 0x2d2e, + 0x2d4e, 0x2d6e, 0x2d8b, 0x2da8, 0x2dcb, 0x2dee, 0x2e0a, 0x2e26, + 0x2e42, 0x2e5e, 0x2e80, 0x2ea2, 0x2ebe, 0x2eda, 0x2efc, 0x2f1e, + 0x2f39, 0x2f54, 0x2f61, 0x2f6e, 0x2f9a, 0x2fa1, 0x2fa8, 0x2fb4, + 0x2fc1, 0x2fda, 0x2fe2, 0x2fee, 0x3009, 0x3025, 0x3041, 0x305d, + 0x3083, 0x30b0, 0x30c6, 0x30dd, 0x30eb, 0x30ff, 0x311e, 0x313d, + // Entry 2240 - 227F + 0x315d, 0x317e, 0x319f, 0x31bf, 0x31d0, 0x31e1, 0x31fb, 0x3214, + 0x322d, 0x3247, 0x3253, 0x326e, 0x328a, 0x32b4, 0x32df, 0x3308, + 0x332b, 0x3354, 0x337e, 0x338a, 0x33af, 0x33d4, 0x33fa, 0x3420, + 0x3445, 0x346a, 0x3490, 0x34b6, 0x34c9, 0x34dd, 0x34f0, 0x3503, + 0x3516, 0x352f, 0x3548, 0x355c, 0x356f, 0x3574, 0x357c, 0x3583, + 0x3588, 0x3592, 0x359c, 0x35a5, 0x35b1, 0x35b4, 0x35c2, 0x35d1, + 0x35dc, 0x35e6, 0x35f5, 0x3604, 0x360e, 0x3623, 0x3634, 0x363b, + 0x3653, 0x365f, 0x3670, 0x3681, 0x3689, 0x36ad, 0x36c6, 0x36e0, + // Entry 2280 - 22BF + 0x36f9, 0x3710, 0x372a, 0x3743, 0x3757, 0x3763, 0x3773, 0x3781, + 0x3789, 0x378d, 0x379b, 0x37a2, 0x37b3, 0x37c5, 0x37d6, 0x37e2, + 0x37ec, 0x37fd, 0x3809, 0x3811, 0x3823, 0x3833, 0x3843, 0x3856, + 0x3866, 0x3877, 0x388b, 0x389c, 0x38ab, 0x38be, 0x38d0, 0x38e2, + 0x38f5, 0x3907, 0x3918, 0x391f, 0x392a, 0x392f, 0x3938, 0x393f, + 0x3945, 0x394b, 0x3952, 0x3957, 0x395c, 0x3962, 0x3968, 0x396e, + 0x3971, 0x3976, 0x397b, 0x3983, 0x398e, 0x3997, 0x399f, 0x39a5, + 0x39b5, 0x39c6, 0x39d6, 0x39e8, 0x39fa, 0x3a0a, 0x3a1a, 0x3a2b, + // Entry 22C0 - 22FF + 0x3a3b, 0x3a4d, 0x3a5f, 0x3a6f, 0x3a7f, 0x3a8f, 0x3aa1, 0x3ab0, + 0x3ac0, 0x3ad0, 0x3ae2, 0x3af1, 0x3afc, 0x3b08, 0x3b13, 0x3b26, + 0x3b3c, 0x3b4b, 0x3b5d, 0x3b6d, 0x3b7e, 0x3b8f, 0x3ba9, 0x3bcd, + 0x3bf1, 0x3c15, 0x3c39, 0x3c5d, 0x3c81, 0x3ca5, 0x3ccb, 0x3ceb, + 0x3d00, 0x3d1f, 0x3d33, 0x3d44, 0x3d4e, 0x3d58, 0x3d62, 0x3d6c, + 0x3d76, 0x3d80, 0x3d9b, 0x3db5, 0x3dd6, 0x3df6, 0x3e07, 0x3e17, + 0x3e2e, 0x3e43, 0x3e59, 0x3e6f, 0x3e79, 0x3e83, 0x3e92, 0x3e98, + 0x3ea6, 0x3eba, 0x3ec0, 0x3ec7, 0x3ecd, 0x3ed1, 0x3ee0, 0x3eeb, + // Entry 2300 - 233F + 0x3ef7, 0x3f0a, 0x3f26, 0x3f41, 0x3f4d, 0x3f5e, 0x3f71, 0x3f82, + 0x3fa2, 0x3fb6, 0x3fcb, 0x3ff4, 0x4012, 0x4032, 0x4045, 0x4058, + 0x4071, 0x4080, 0x408e, 0x40aa, 0x40b0, 0x40bb, 0x40c1, 0x40c6, + 0x40cc, 0x40d0, 0x40d5, 0x40db, 0x40ec, 0x40f3, 0x40fe, 0x4106, + 0x4114, 0x411f, 0x4127, 0x4132, 0x4144, 0x4157, 0x4169, 0x417c, + 0x4190, 0x41a0, 0x41a4, 0x41b1, 0x41c7, 0x41df, 0x41f7, 0x420e, + 0x421c, 0x4228, 0x4231, 0x4235, 0x4240, 0x4257, 0x426d, 0x4273, + 0x427b, 0x429d, 0x42bb, 0x42d9, 0x42ee, 0x4303, 0x4312, 0x4334, + // Entry 2340 - 237F + 0x4345, 0x4354, 0x4384, 0x438f, 0x43a6, 0x43bd, 0x43db, 0x4406, + 0x440f, 0x4430, 0x4450, 0x4462, 0x4477, 0x4484, 0x448a, 0x4490, + 0x449d, 0x44ad, 0x44be, 0x44d7, 0x44df, 0x44f1, 0x44f9, 0x4505, + 0x450a, 0x4512, 0x4525, 0x452a, 0x4533, 0x4543, 0x4547, 0x455b, + 0x4575, 0x457e, 0x4591, 0x45bf, 0x45d4, 0x45e8, 0x45f6, 0x460a, + 0x4618, 0x462e, 0x4645, 0x464f, 0x4657, 0x465f, 0x466a, 0x4675, + 0x4681, 0x468d, 0x469f, 0x46a5, 0x46b7, 0x46c0, 0x46c9, 0x46d3, + 0x46e3, 0x46f3, 0x4709, 0x4711, 0x471f, 0x4733, 0x4744, 0x4755, + // Entry 2380 - 23BF + 0x476c, 0x4777, 0x4791, 0x47a5, 0x47b2, 0x47bf, 0x47dc, 0x47f8, + 0x481a, 0x4833, 0x484a, 0x4861, 0x4869, 0x4883, 0x4895, 0x48ab, + 0x48c2, 0x48d5, 0x48ee, 0x48fb, 0x490e, 0x491c, 0x4930, 0x4945, + 0x495d, 0x4978, 0x498e, 0x49b2, 0x49dc, 0x49f5, 0x4a0d, 0x4a25, + 0x4a49, 0x4a67, 0x4a8c, 0x4a9a, 0x4aa8, 0x4ace, 0x4af4, 0x4b1b, + 0x4b24, 0x4b3e, 0x4b55, 0x4b5c, 0x4b69, 0x4b80, 0x4ba8, 0x4bd6, + 0x4be0, 0x4bf5, 0x4c10, 0x4c36, 0x4c5c, 0x4c7d, 0x4c9e, 0x4cba, + 0x4cd6, 0x4cf5, 0x4d10, 0x4d2d, 0x4d3f, 0x4d52, 0x4d64, 0x4d95, + // Entry 23C0 - 23FF + 0x4dbf, 0x4df0, 0x4e1a, 0x4e48, 0x4e76, 0x4e99, 0x4eb8, 0x4edd, + 0x4eee, 0x4f0e, 0x4f1a, 0x4f35, 0x4f55, 0x4f76, 0x4fa0, 0x4fcb, + 0x4ff6, 0x5022, 0x5053, 0x5085, 0x50af, 0x50da, 0x5104, 0x512f, + 0x5151, 0x5174, 0x5196, 0x51b8, 0x51dc, 0x51ff, 0x5222, 0x5244, + 0x5268, 0x528c, 0x52af, 0x52d2, 0x52f6, 0x531a, 0x5340, 0x5365, + 0x538a, 0x53ae, 0x53d4, 0x53fa, 0x541f, 0x5444, 0x5471, 0x549e, + 0x54cd, 0x54fb, 0x5529, 0x5556, 0x5585, 0x55b4, 0x55e2, 0x5610, + 0x5632, 0x5641, 0x5651, 0x5664, 0x567a, 0x5690, 0x56a6, 0x56c5, + // Entry 2400 - 243F + 0x56e8, 0x5708, 0x572e, 0x5755, 0x5782, 0x5798, 0x57c0, 0x57eb, + 0x5805, 0x5836, 0x5865, 0x5881, 0x58ad, 0x58d0, 0x58f2, 0x591d, + 0x5949, 0x597a, 0x59ab, 0x59de, 0x59e8, 0x5a1b, 0x5a3f, 0x5a5f, + 0x5a7f, 0x5a9f, 0x5abf, 0x5ae5, 0x5b0b, 0x5b31, 0x5b51, 0x5b78, + 0x5b95, 0x5bb8, 0x5bd6, 0x5be7, 0x5bfe, 0x5c2c, 0x5c39, 0x5c44, + 0x5c51, 0x5c6c, 0x5c88, 0x5c9a, 0x5cba, 0x5cd4, 0x5cf7, 0x5d13, + 0x5d20, 0x5d3d, 0x5d50, 0x5d62, 0x5d80, 0x5d8c, 0x5da6, 0x5dc1, + 0x5ddb, 0x5dea, 0x5dfa, 0x5e09, 0x5e16, 0x5e25, 0x5e44, 0x5e57, + // Entry 2440 - 247F + 0x5e64, 0x5e73, 0x5e81, 0x5e9a, 0x5ebc, 0x5ed7, 0x5f06, 0x5f36, + 0x5f56, 0x5f77, 0x5f9d, 0x5fc4, 0x5fe3, 0x6003, 0x6029, 0x6050, + 0x607e, 0x60ad, 0x60d4, 0x60fc, 0x6113, 0x612c, 0x614d, 0x616a, + 0x6187, 0x619b, 0x61b0, 0x61c5, 0x61e0, 0x61fc, 0x6218, 0x6235, + 0x6253, 0x6277, 0x629c, 0x62ba, 0x62cf, 0x62e5, 0x62fb, 0x6312, + 0x6328, 0x633f, 0x6356, 0x636e, 0x6384, 0x639b, 0x63b2, 0x63ca, + 0x63e1, 0x63f9, 0x6411, 0x642a, 0x6440, 0x6457, 0x646e, 0x6486, + 0x649d, 0x64b5, 0x64cd, 0x64e6, 0x64fd, 0x6515, 0x652d, 0x6546, + // Entry 2480 - 24BF + 0x655e, 0x6577, 0x6590, 0x65aa, 0x65c0, 0x65d7, 0x65ee, 0x6606, + 0x661d, 0x6635, 0x664d, 0x6666, 0x667d, 0x6695, 0x66ad, 0x66c6, + 0x66de, 0x66f7, 0x6710, 0x672a, 0x6741, 0x6759, 0x6771, 0x678a, + 0x67a2, 0x67bb, 0x67d4, 0x67ee, 0x6806, 0x681f, 0x6838, 0x6852, + 0x686b, 0x6885, 0x689f, 0x68ba, 0x68d0, 0x68e7, 0x68fe, 0x6916, + 0x692d, 0x6945, 0x695d, 0x6976, 0x698d, 0x69a5, 0x69bd, 0x69d6, + 0x69ee, 0x6a07, 0x6a20, 0x6a3a, 0x6a51, 0x6a69, 0x6a81, 0x6a9a, + 0x6ab2, 0x6acb, 0x6ae4, 0x6afe, 0x6b16, 0x6b2f, 0x6b48, 0x6b62, + // Entry 24C0 - 24FF + 0x6b7b, 0x6b95, 0x6baf, 0x6bca, 0x6be1, 0x6bf9, 0x6c11, 0x6c2a, + 0x6c42, 0x6c5b, 0x6c74, 0x6c8e, 0x6ca6, 0x6cbf, 0x6cd8, 0x6cf2, + 0x6d0b, 0x6d25, 0x6d3f, 0x6d5a, 0x6d72, 0x6d8b, 0x6da4, 0x6dbe, + 0x6dd7, 0x6df1, 0x6e0b, 0x6e26, 0x6e3f, 0x6e59, 0x6e73, 0x6e8e, + 0x6ea8, 0x6ec3, 0x6ede, 0x6efa, 0x6f10, 0x6f27, 0x6f3e, 0x6f56, + 0x6f6d, 0x6f85, 0x6f9d, 0x6fb6, 0x6fcd, 0x6fe5, 0x6ffd, 0x7016, + 0x702e, 0x7047, 0x7060, 0x707a, 0x7091, 0x70a9, 0x70c1, 0x70da, + 0x70f2, 0x710b, 0x7124, 0x713e, 0x7156, 0x716f, 0x7188, 0x71a2, + // Entry 2500 - 253F + 0x71bb, 0x71d5, 0x71ef, 0x720a, 0x7221, 0x7239, 0x7251, 0x726a, + 0x7282, 0x729b, 0x72b4, 0x72ce, 0x72e6, 0x72ff, 0x7318, 0x7332, + 0x734b, 0x7365, 0x737f, 0x739a, 0x73b2, 0x73cb, 0x73e4, 0x73fe, + 0x7417, 0x7431, 0x744b, 0x7466, 0x747f, 0x7499, 0x74b3, 0x74ce, + 0x74e8, 0x7503, 0x751e, 0x753a, 0x7551, 0x7569, 0x7581, 0x759a, + 0x75b2, 0x75cb, 0x75e4, 0x75fe, 0x7616, 0x762f, 0x7648, 0x7662, + 0x767b, 0x7695, 0x76af, 0x76ca, 0x76e2, 0x76fb, 0x7714, 0x772e, + 0x7747, 0x7761, 0x777b, 0x7796, 0x77af, 0x77c9, 0x77e3, 0x77fe, + // Entry 2540 - 257F + 0x7818, 0x7833, 0x784e, 0x786a, 0x7882, 0x789b, 0x78b4, 0x78ce, + 0x78e7, 0x7901, 0x791b, 0x7936, 0x794f, 0x7969, 0x7983, 0x799e, + 0x79b8, 0x79d3, 0x79ee, 0x7a0a, 0x7a23, 0x7a3d, 0x7a57, 0x7a72, + 0x7a8c, 0x7aa7, 0x7ac2, 0x7ade, 0x7af8, 0x7b13, 0x7b2e, 0x7b4a, + 0x7b65, 0x7b81, 0x7b9d, 0x7bba, 0x7bea, 0x7c21, 0x7c4c, 0x7c78, + 0x7ca4, 0x7cc8, 0x7ce7, 0x7d07, 0x7d2d, 0x7d51, 0x7d65, 0x7d7b, + 0x7d96, 0x7db2, 0x7dcd, 0x7de9, 0x7e10, 0x7e31, 0x7e45, 0x7e5b, + 0x7e8a, 0x7ec0, 0x7ee5, 0x7f1f, 0x7f60, 0x7f74, 0x7f89, 0x7fa4, + // Entry 2580 - 25BF + 0x7fc0, 0x7fe0, 0x8001, 0x802a, 0x8054, 0x8073, 0x8092, 0x80ac, + 0x80c6, 0x80e0, 0x80fa, 0x811f, 0x8144, 0x8169, 0x818e, 0x81b7, + 0x81e0, 0x820a, 0x8234, 0x825e, 0x8287, 0x82b1, 0x82db, 0x82fd, + 0x832b, 0x835b, 0x838a, 0x83ba, 0x83d8, 0x83f9, 0x8414, 0x8432, + 0x8454, 0x8479, 0x84a1, 0x84cc, 0x84ed, 0x850a, 0x8536, 0x8562, + 0x858e, 0x85ae, 0x85cd, 0x85e7, 0x860c, 0x8636, 0x865a, 0x867e, + 0x86a2, 0x86c6, 0x86e8, 0x870d, 0x8733, 0x8756, 0x877b, 0x87a1, + 0x87c7, 0x87ef, 0x8816, 0x883e, 0x8863, 0x888a, 0x88b1, 0x88d9, + // Entry 25C0 - 25FF + 0x8901, 0x892b, 0x8954, 0x897e, 0x89a5, 0x89ce, 0x8a13, 0x8a58, + 0x8a9f, 0x8ae8, 0x8b2c, 0x8b74, 0x8bb8, 0x8c00, 0x8c2e, 0x8c5e, + 0x8c8d, 0x8cbe, 0x8d05, 0x8d4c, 0x8d70, 0x8d92, 0x8db7, 0x8ddb, + 0x8e00, 0x8e26, 0x8e45, 0x8e66, 0x8e89, 0x8ea6, 0x8ec4, 0x8ee2, + 0x8ef0, 0x8eff, 0x8f0b, 0x8f19, 0x8f36, 0x8f45, 0x8f5a, 0x8f72, + 0x8f8b, 0x8fa1, 0x8fb8, 0x8fd5, 0x8ff3, 0x9012, 0x9032, 0x9053, + 0x9075, 0x90a0, 0x90cf, 0x90fd, 0x9129, 0x9144, 0x9160, 0x917a, + 0x9198, 0x91bc, 0x91de, 0x91ff, 0x9221, 0x922d, 0x9241, 0x925c, + // Entry 2600 - 263F + 0x927b, 0x9298, 0x92ab, 0x92b6, 0x92d2, 0x92ec, 0x92f8, 0x9306, + 0x9319, 0x9335, 0x934d, 0x9367, 0x93a9, 0x93ea, 0x942e, 0x9471, + 0x94b3, 0x94f4, 0x9538, 0x957b, 0x958d, 0x95a3, 0x95c4, 0x95e4, + 0x9603, 0x961d, 0x9631, 0x9641, 0x9658, 0x966d, 0x96b2, 0x96cc, + 0x96f7, 0x970e, 0x9722, 0x9730, 0x9741, 0x9755, 0x977a, 0x97a9, + 0x97c6, 0x97e4, 0x97f4, 0x9808, 0x9816, 0x9828, 0x983f, 0x9855, + 0x9862, 0x9880, 0x98a2, 0x98c3, 0x98e5, 0x9900, 0x991c, 0x9928, + 0x9942, 0x995d, 0x996c, 0x997b, 0x998c, 0x999e, 0x99b6, 0x99cf, + // Entry 2640 - 267F + 0x99e2, 0x99f3, 0x9a15, 0x9a2a, 0x9a47, 0x9a53, 0x9a62, 0x9a82, + 0x9ab3, 0x9ad4, 0x9ae0, 0x9aed, 0x9b18, 0x9b44, 0x9b61, 0x9b6e, + 0x9b8a, 0x9ba6, 0x9bbf, 0x9bd8, 0x9bf2, 0x9c0c, 0x9c25, 0x9c3e, + 0x9c4a, 0x9c62, 0x9c76, 0x9c9c, 0x9ca7, 0x9cba, 0x9cc5, 0x9cd0, + 0x9cf2, 0x9d15, 0x9d19, 0x9d1d, 0x9d37, 0x9d52, 0x9d6e, 0x9d8b, + 0x9da9, 0x9dcb, 0x9de6, 0x9dfe, 0x9e15, 0x9e29, 0x9e37, 0x9e4e, + 0x9e69, 0x9e7d, 0x9e98, 0x9eb3, 0x9ec7, 0x9ee0, 0x9f12, 0x9f45, + 0x9f6c, 0x9f8c, 0x9fa8, 0x9fcf, 0x9fe7, 0xa001, 0xa014, 0xa029, + // Entry 2680 - 26BF + 0xa03f, 0xa043, 0xa05f, 0xa07c, 0xa094, 0xa0b0, 0xa0d1, 0xa0f7, + 0xa111, 0xa129, 0xa143, 0xa15f, 0xa17c, 0xa197, 0xa1b0, 0xa1cc, + 0xa1e7, 0xa204, 0xa222, 0xa239, 0xa25b, 0xa27c, 0xa2a1, 0xa2ae, + 0xa2d5, 0xa2fd, 0xa32f, 0xa353, 0xa368, 0xa37d, 0xa393, 0xa3b2, + 0xa3c2, 0xa3dc, 0xa3fd, 0xa416, 0xa42b, 0xa440, 0xa452, 0xa46b, + 0xa488, 0xa49d, 0xa4b5, 0xa4cd, 0xa4ef, 0xa511, 0xa533, 0xa563, + 0xa57b, 0xa59a, 0xa5b4, 0xa5c7, 0xa5f1, 0xa60b, 0xa624, 0xa636, + 0xa647, 0xa663, 0xa67e, 0xa68e, 0xa69f, 0xa6c1, 0xa6dd, 0xa6f8, + // Entry 26C0 - 26FF + 0xa718, 0xa737, 0xa756, 0xa76f, 0xa78f, 0xa7a6, 0xa7c4, 0xa7e3, + 0xa804, 0xa824, 0xa83e, 0xa856, 0xa887, 0xa8b8, 0xa8d5, 0xa8f4, + 0xa909, 0xa921, 0xa935, 0xa95b, 0xa97a, 0xa995, 0xa9b0, 0xa9d0, + 0xa9e2, 0xa9fe, 0xaa1c, 0xaa4e, 0xaa6d, 0xaa89, 0xaaa8, 0xaaca, + 0xaaef, 0xab0c, 0xab2c, 0xab59, 0xab89, 0xabb5, 0xabe4, 0xac16, + 0xac4a, 0xac62, 0xac7d, 0xaca3, 0xaccc, 0xace9, 0xad09, 0xad3d, + 0xad71, 0xad91, 0xadb4, 0xadde, 0xae08, 0xae3c, 0xae70, 0xaeb4, + 0xaef8, 0xaf15, 0xaf35, 0xaf62, 0xaf92, 0xafb3, 0xafd7, 0xb000, + // Entry 2700 - 273F + 0xb02c, 0xb040, 0xb057, 0xb080, 0xb0ac, 0xb0c3, 0xb0dd, 0xb102, + 0xb124, 0xb141, 0xb15a, 0xb176, 0xb1a3, 0xb1d3, 0xb1df, 0xb1ea, + 0xb202, 0xb219, 0xb235, 0xb25b, 0xb281, 0xb2a8, 0xb2cf, 0xb2e9, + 0xb303, 0xb31e, 0xb339, 0xb357, 0xb375, 0xb397, 0xb3b9, 0xb3c8, + 0xb3d7, 0xb3e6, 0xb3f7, 0xb412, 0xb42f, 0xb454, 0xb47b, 0xb49f, + 0xb4c5, 0xb4e0, 0xb4fd, 0xb51b, 0xb53b, 0xb55a, 0xb57b, 0xb597, + 0xb5b5, 0xb5d2, 0xb5f0, 0xb5fd, 0xb60c, 0xb625, 0xb640, 0xb655, + 0xb66a, 0xb67d, 0xb694, 0xb6aa, 0xb6d8, 0xb6f4, 0xb70a, 0xb722, + // Entry 2740 - 277F + 0xb729, 0xb733, 0xb742, 0xb751, 0xb75e, 0xb772, 0xb795, 0xb7b7, + 0xb7d9, 0xb802, 0xb82f, 0xb84b, 0xb866, 0xb889, 0xb899, 0xb8a7, + 0xb8bd, 0xb8dc, 0xb908, 0xb927, 0xb946, 0xb961, 0xb980, 0xb99c, + 0xb9bf, 0xb9e9, 0xb9fe, 0xba15, 0xba2f, 0xba58, 0xba84, 0xbaa2, + 0xbac4, 0xbadb, 0xbaed, 0xbb05, 0xbb1b, 0xbb31, 0xbb47, 0xbb5d, + 0xbb73, 0xbb88, 0xbb9b, 0xbbb0, 0xbbc6, 0xbbdc, 0xbbf2, 0xbc08, + 0xbc1e, 0xbc31, 0xbc54, 0xbc75, 0xbc97, 0xbcb7, 0xbcd1, 0xbcee, + 0xbd19, 0xbd43, 0xbd5f, 0xbd7c, 0xbd97, 0xbdb5, 0xbdc2, 0xbdd4, + // Entry 2780 - 27BF + 0xbde6, 0xbdfd, 0xbe14, 0xbe22, 0xbe30, 0xbe3d, 0xbe4a, 0xbe62, + 0xbe74, 0xbe88, 0xbe9c, 0xbeb0, 0xbec4, 0xbed7, 0xbeea, 0xbefd, + 0xbf15, 0xbf2d, 0xbf43, 0xbf59, 0xbf75, 0xbf8b, 0xbfa7, 0xbfc4, + 0xbff3, 0xc029, 0xc04c, 0xc072, 0xc092, 0xc0c0, 0xc0f5, 0xc119, + 0xc152, 0xc192, 0xc1ab, 0xc1cc, 0xc1ed, 0xc219, 0xc246, 0xc26b, + 0xc28c, 0xc2a5, 0xc2bf, 0xc2ec, 0xc31a, 0xc33e, 0xc363, 0xc38f, + 0xc3bc, 0xc3e2, 0xc3fb, 0xc418, 0xc429, 0xc439, 0xc449, 0xc466, + 0xc483, 0xc495, 0xc4b0, 0xc4cf, 0xc4db, 0xc4f0, 0xc514, 0xc53c, + // Entry 27C0 - 27FF + 0xc564, 0xc590, 0xc5bd, 0xc5f0, 0xc60f, 0xc62c, 0xc64c, 0xc66b, + 0xc68b, 0xc6a8, 0xc6c8, 0xc6e8, 0xc708, 0xc728, 0xc74e, 0xc772, + 0xc799, 0xc7bf, 0xc7ea, 0xc819, 0xc83f, 0xc863, 0xc88a, 0xc8b0, + 0x00b0, 0x00d7, 0x00fe, 0x0125, 0x014c, 0x0189, 0x01c4, 0x0202, + 0x023f, 0x0251, 0x0261, 0x02a6, 0x02f0, 0x0335, 0x037f, 0x03a6, + 0x03cb, 0x03f3, 0x041a, 0x043d, 0x045e, 0x0482, 0x04a5, 0x04d7, + 0x050a, 0x053b, 0x056b, 0x0576, 0x0582, 0x058e, 0x059b, 0x05c4, + 0x05da, 0x01da, 0x020d, 0x0240, 0x0274, 0x02a8, 0x02cd, 0x02f0, + // Entry 2800 - 283F + 0x0316, 0x033b, 0x0372, 0x03aa, 0x03df, 0x0415, 0x044a, 0x0480, + 0x04b7, 0x04ef, 0x0519, 0x0544, 0x056c, 0x0595, 0x05bd, 0x05e6, + 0x0610, 0x063b, 0x0651, 0x0668, 0x067c, 0x0691, 0x06a5, 0x06ba, + 0x06d0, 0x06e7, 0x0717, 0x0736, 0x0336, 0x034d, 0x0356, 0x0364, + 0x0378, 0x038d, 0x03a2, 0x03ba, 0x03c7, 0x03f0, 0x041b, 0x0446, + 0x0472, 0x0072, 0x0087, 0x009f, 0x00bc, 0x00e1, 0x00f8, 0x0117, + 0x0130, 0x0140, 0x0140, 0x0173, 0x01a4, 0x01d8, 0x020b, 0x020b, + 0x0228, 0x0246, 0x0264, 0x0285, 0x02a4, 0x02c3, 0x02e4, 0x0303, + // Entry 2840 - 287F + 0x0323, 0x0341, 0x0367, 0x0382, 0x03a2, 0x03c0, 0x03e1, 0x0402, + 0x0421, 0x043e, 0x045e, 0x047d, 0x049c, 0x04bc, 0x04d9, 0x04f8, + 0x0516, 0x0533, 0x054f, 0x056d, 0x058a, 0x05aa, 0x05c7, 0x05e5, + 0x0603, 0x0621, 0x0645, 0x0661, 0x0684, 0x06b1, 0x06cd, 0x06f8, + 0x0719, 0x0742, 0x0760, 0x0781, 0x07a2, 0x07c8, 0x07f2, 0x03f2, + 0x040d, 0x0429, 0x0445, 0x0464, 0x0481, 0x049e, 0x04bd, 0x04da, + 0x04f8, 0x0514, 0x0538, 0x0551, 0x056f, 0x058b, 0x05aa, 0x05c9, + 0x05e6, 0x0601, 0x061f, 0x063c, 0x0659, 0x0677, 0x0692, 0x06af, + // Entry 2880 - 28BF + 0x06cb, 0x06e6, 0x0700, 0x071c, 0x0737, 0x0755, 0x0770, 0x078c, + 0x07a8, 0x07c4, 0x07e6, 0x0800, 0x0821, 0x084c, 0x0866, 0x088f, + 0x08ae, 0x08d5, 0x08f1, 0x0910, 0x092f, 0x0953, 0x097b, 0x017b, + 0x01a1, 0x01c5, 0x01ed, 0x020f, 0x022f, 0x024f, 0x0278, 0x029d, + 0x02c0, 0x02e5, 0x0308, 0x032d, 0x0350, 0x036a, 0x038a, 0x03a7, + 0x03c8, 0x03ec, 0x040c, 0x042a, 0x0448, 0x0463, 0x047c, 0x049b, + 0x04ba, 0x04df, 0x0508, 0x052b, 0x0549, 0x0562, 0x0588, 0x05ae, + 0x05c8, 0x05e0, 0x05fa, 0x0612, 0x062d, 0x0646, 0x0661, 0x067a, + // Entry 28C0 - 28FF + 0x0693, 0x06aa, 0x06c3, 0x06da, 0x06f4, 0x070c, 0x0726, 0x073e, + 0x075a, 0x0774, 0x078f, 0x07a8, 0x07c2, 0x07da, 0x07f5, 0x080e, + 0x0826, 0x083c, 0x0854, 0x086a, 0x0883, 0x089a, 0x08b1, 0x08c6, + 0x08de, 0x08f4, 0x090c, 0x0922, 0x093c, 0x0954, 0x096d, 0x0984, + 0x099c, 0x09b2, 0x09ca, 0x09e0, 0x09f9, 0x0a10, 0x0a29, 0x0a40, + 0x0a59, 0x0a70, 0x0a94, 0x0ab6, 0x0ada, 0x0afc, 0x0b23, 0x0b48, + 0x0b6c, 0x0b8e, 0x0bb0, 0x0bd0, 0x0bf6, 0x0c1a, 0x0c3e, 0x0c60, + 0x0c7b, 0x0c94, 0x0cb6, 0x0cd6, 0x0cfb, 0x0d1e, 0x0d42, 0x0d64, + // Entry 2900 - 293F + 0x0d87, 0x0da8, 0x0dcc, 0x0dee, 0x0e13, 0x0e36, 0x0e59, 0x0e7a, + 0x0e9b, 0x0eba, 0x0ede, 0x0f00, 0x0f24, 0x0f46, 0x0f6d, 0x0f92, + 0x0fb6, 0x0fd8, 0x0ffe, 0x1022, 0x1048, 0x106c, 0x1090, 0x10b2, + 0x10d6, 0x10f8, 0x111c, 0x113e, 0x114f, 0x1162, 0x1175, 0x118a, + 0x119e, 0x11b2, 0x11ca, 0x11f2, 0x1218, 0x1242, 0x126a, 0x1283, + 0x12a2, 0x12c1, 0x12e4, 0x1305, 0x0305, 0x0320, 0x0346, 0x036e, + 0x038d, 0x03a5, 0x03b5, 0x03d1, 0x03e9, 0x0402, 0x041b, 0x0434, + 0x044c, 0x0465, 0x047e, 0x0497, 0x04af, 0x04c8, 0x04e1, 0x04fa, + // Entry 2940 - 297F + 0x0513, 0x052b, 0x0544, 0x055e, 0x0577, 0x0590, 0x05a9, 0x05c1, + 0x05db, 0x05f5, 0x060f, 0x0628, 0x0642, 0x065c, 0x0675, 0x068e, + 0x06a7, 0x06c1, 0x06da, 0x06f4, 0x070d, 0x0725, 0x073e, 0x0756, + 0x076f, 0x0788, 0x0388, 0x03a0, 0x03a0, 0x03b9, 0x03b9, 0x03cb, + 0x03de, 0x03f2, 0x0405, 0x041a, 0x043c, 0x044f, 0x0462, 0x0476, + 0x048a, 0x049f, 0x04b2, 0x04c5, 0x04d8, 0x04f2, 0x0507, 0x051a, + 0x053c, 0x0556, 0x056a, 0x057d, 0x0591, 0x05ac, 0x05bf, 0x05d9, + 0x05eb, 0x05ff, 0x061b, 0x0636, 0x0649, 0x065c, 0x066f, 0x068a, + // Entry 2980 - 29BF + 0x06a5, 0x06b8, 0x06ca, 0x06dd, 0x06f1, 0x0705, 0x0720, 0x0739, + 0x074c, 0x0760, 0x0774, 0x0787, 0x079b, 0x07af, 0x07c3, 0x07d6, + 0x07e9, 0x07fc, 0x080f, 0x082d, 0x0841, 0x0853, 0x0865, 0x0065, + 0x0090, 0x00a7, 0x00a7, 0x00c0, 0x00d5, 0x00ea, 0x00ff, 0x0114, + 0x012a, 0x013f, 0x0154, 0x0169, 0x017e, 0x0194, 0x01b0, 0x01c5, + 0x01da, 0x01f0, 0x0205, 0x021b, 0x0231, 0x0247, 0x025c, 0x0272, + 0x0288, 0x029f, 0x02b5, 0x02b5, 0x02ca, 0x02df, 0x02f4, 0x030a, + 0x0320, 0x0335, 0x034a, 0x034a, 0x035f, 0x0374, 0x0389, 0x039f, + // Entry 29C0 - 29FF + 0x03b5, 0x03ca, 0x03df, 0x03df, 0x03f4, 0x0409, 0x041e, 0x0434, + 0x044a, 0x045f, 0x0474, 0x0074, 0x008a, 0x00a0, 0x00b6, 0x00cd, + 0x00e4, 0x00fa, 0x0110, 0x0110, 0x0125, 0x013a, 0x014f, 0x0165, + 0x017b, 0x0190, 0x01a5, 0x01a5, 0x01ba, 0x01cf, 0x01e4, 0x01fa, + 0x0210, 0x0225, 0x023a, 0x023a, 0x024f, 0x0264, 0x0279, 0x028f, + 0x02a5, 0x02ba, 0x02cf, 0x02cf, 0x02e4, 0x02f9, 0x030e, 0x0324, + 0x033a, 0x034f, 0x0364, 0x0364, 0x0380, 0x039c, 0x03b9, 0x03d5, + 0x03f2, 0x040e, 0x042a, 0x0446, 0x0462, 0x047e, 0x0499, 0x04b5, + // Entry 2A00 - 2A3F + 0x04d1, 0x04ed, 0x0509, 0x0525, 0x0542, 0x055f, 0x057c, 0x059b, + 0x05b9, 0x05d8, 0x05f3, 0x060f, 0x062e, 0x0654, 0x0671, 0x068d, + 0x06b1, 0x06d5, 0x06f6, 0x0720, 0x073f, 0x0765, 0x077e, 0x0798, + 0x07b8, 0x07d9, 0x07f4, 0x0816, 0x0831, 0x084b, 0x0866, 0x0873, + 0x088f, 0x08ac, 0x08bd, 0x08c8, 0x08da, 0x08f5, 0x0901, 0x090e, + 0x091e, 0x092c, 0x0947, 0x095c, 0x0970, 0x097b, 0x0990, 0x09a5, + 0x09c0, 0x09dc, 0x09f0, 0x0a04, 0x0a20, 0x0a3d, 0x0a52, 0x0a68, + 0x0a80, 0x0a99, 0x0ab0, 0x0ac8, 0x0adf, 0x0af7, 0x0b18, 0x0b39, + // Entry 2A40 - 2A7F + 0x0b55, 0x0b62, 0x0b78, 0x0b86, 0x0b90, 0x0ba9, 0x0bb5, 0x0bbf, + 0x0bcb, 0x0bdb, 0x0bf1, 0x0c08, 0x0c15, 0x0c2a, 0x0c35, 0x0c42, + 0x0c58, 0x0c69, 0x0c7d, 0x0c86, 0x0c93, 0x0ca1, 0x0cc5, 0x0cda, + 0x0cf0, 0x00f0, 0x0102, 0x0113, 0x0129, 0x013f, 0x0157, 0x0169, + 0x0178, 0x0189, 0x019e, 0x01b3, 0x01c9, 0x01d9, 0x01ee, 0x0203, + 0x0217, 0x022b, 0x0241, 0x0256, 0x0267, 0x0279, 0x028e, 0x02a3, + 0x02b8, 0x02cd, 0x02dd, 0x02ec, 0x02ec, 0x02fd, 0x030c, 0x031c, + 0x032d, 0x033f, 0x0353, 0x0368, 0x037d, 0x038d, 0x03a0, 0x03b3, + // Entry 2A80 - 2ABF + 0x03d9, 0x03e8, 0x03f7, 0x0407, 0x0420, 0x042f, 0x0445, 0x045b, + 0x046d, 0x047d, 0x049a, 0x04ad, 0x04c0, 0x04d5, 0x04e9, 0x04f9, + 0x050a, 0x0519, 0x0528, 0x0537, 0x054c, 0x0561, 0x0571, 0x0583, + 0x0598, 0x05ad, 0x05c4, 0x05d5, 0x05e8, 0x05fc, 0x0610, 0x062c, + 0x0647, 0x0657, 0x0676, 0x0694, 0x06a4, 0x06c1, 0x06dc, 0x06f0, + 0x0704, 0x0714, 0x0731, 0x0745, 0x0759, 0x0776, 0x0793, 0x07a8, + 0x07bd, 0x07cd, 0x07dd, 0x0804, 0x0821, 0x083e, 0x085a, 0x086d, + 0x0880, 0x0895, 0x08b1, 0x08c1, 0x08df, 0x08ef, 0x0900, 0x091d, + // Entry 2AC0 - 2AFF + 0x093a, 0x0957, 0x0973, 0x0990, 0x09ad, 0x09ca, 0x09e7, 0x0a05, + 0x0a23, 0x0a42, 0x0a61, 0x0a73, 0x0a92, 0x0ab1, 0x02b1, 0x02c3, + 0x02d6, 0x02e8, 0x02fc, 0x0311, 0x0324, 0x0336, 0x0348, 0x035a, + 0x036d, 0x0381, 0x0395, 0x03ac, 0x03c0, 0x03d2, 0x03e6, 0x03fd, + 0x0411, 0x0425, 0x0438, 0x044c, 0x0469, 0x0488, 0x049a, 0x04b3, + 0x04c6, 0x04da, 0x04f0, 0x0504, 0x0518, 0x0530, 0x0544, 0x055a, + 0x056b, 0x0583, 0x0599, 0x05ab, 0x05bf, 0x05d3, 0x05e6, 0x05f9, + 0x060d, 0x0620, 0x0635, 0x064a, 0x0661, 0x0675, 0x0688, 0x069e, + // Entry 2B00 - 2B3F + 0x06b3, 0x06c5, 0x06e0, 0x06fb, 0x0715, 0x072d, 0x0741, 0x0753, + 0x0767, 0x077d, 0x0790, 0x07a4, 0x07ba, 0x07cd, 0x07e0, 0x07f5, + 0x0807, 0x081c, 0x0831, 0x0843, 0x0858, 0x086a, 0x087c, 0x088e, + 0x08a1, 0x08b4, 0x08c7, 0x08da, 0x08ee, 0x0903, 0x0918, 0x092e, + 0x0940, 0x0953, 0x0967, 0x097b, 0x098e, 0x09a1, 0x09b6, 0x09cd, + 0x09eb, 0x09ff, 0x0a12, 0x0a24, 0x0a36, 0x0a4d, 0x0a60, 0x0a74, + 0x0a87, 0x0a9b, 0x0aae, 0x0ac0, 0x0ad4, 0x0af0, 0x0b07, 0x0b21, + 0x0b35, 0x0b48, 0x0b5b, 0x0b6d, 0x0b81, 0x0b95, 0x0ba9, 0x0bbe, + // Entry 2B40 - 2B7F + 0x0bd2, 0x0be6, 0x0bf9, 0x0c0d, 0x0c22, 0x0c35, 0x0c48, 0x0c5a, + 0x0c6c, 0x0c80, 0x0c96, 0x0ca8, 0x0cba, 0x0ccd, 0x0cdf, 0x0cf3, + 0x0d06, 0x0d1d, 0x0d30, 0x0d45, 0x0d5a, 0x0d6f, 0x0d84, 0x0d97, + 0x0dae, 0x0dc2, 0x0dd6, 0x0dea, 0x0dff, 0x0e13, 0x0e30, 0x0e46, + 0x0e59, 0x0e6b, 0x0e7e, 0x0e93, 0x0ea8, 0x0ebb, 0x0ecd, 0x0ee2, + 0x0ef6, 0x0f08, 0x0f1a, 0x0f2d, 0x0f40, 0x0f53, 0x0f68, 0x0f7e, + 0x0f91, 0x0fa4, 0x0fb7, 0x0fd1, 0x0fe7, 0x0ffa, 0x100d, 0x1020, + 0x1034, 0x1048, 0x1068, 0x107b, 0x108e, 0x10a2, 0x10b5, 0x10cb, + // Entry 2B80 - 2BBF + 0x10e8, 0x10fb, 0x110f, 0x1122, 0x1135, 0x1147, 0x1159, 0x116c, + 0x1183, 0x1197, 0x11aa, 0x11bd, 0x11d0, 0x11e4, 0x1203, 0x121a, + 0x122e, 0x1241, 0x1254, 0x1267, 0x127a, 0x128e, 0x12a1, 0x12b6, + 0x12cb, 0x12df, 0x12f8, 0x130b, 0x1320, 0x1333, 0x1345, 0x1358, + 0x136b, 0x137f, 0x1394, 0x13a9, 0x13bd, 0x03bd, 0x03ec, 0x041c, + 0x0456, 0x0491, 0x04c0, 0x04f5, 0x052a, 0x055e, 0x0598, 0x05d3, + 0x060d, 0x0637, 0x0237, 0x0248, 0x0259, 0x026e, 0x0278, 0x029b, + 0x02b5, 0x02cd, 0x02e4, 0x02f6, 0x0309, 0x0322, 0x033c, 0x034f, + // Entry 2BC0 - 2BFF + 0x0363, 0x037c, 0x0396, 0x03b3, 0x03d1, 0x03dc, 0x03e5, 0x0400, + 0x041c, 0x0439, 0x0457, 0x0478, 0x049a, 0x04b3, 0x04cd, 0x04d6, + 0x04fa, 0x0515, 0x0534, 0x0544, 0x0558, 0x056c, 0x0582, 0x0597, + 0x05ac, 0x05c0, 0x05d6, 0x05ec, 0x0601, 0x061c, 0x0638, 0x0657, + 0x0675, 0x0690, 0x06ab, 0x06b4, 0x06cd, 0x06f8, 0x071c, 0x0752, + 0x0776, 0x0789, 0x07b9, 0x07cd, 0x07e4, 0x07fb, 0x081e, 0x0827, + 0x083c, 0x085b, 0x0876, 0x0076, 0x008d, 0x009e, 0x00b5, 0x00c6, + 0x00dd, 0x00ee, 0x0105, 0x0116, 0x012d, 0x013e, 0x0150, 0x0162, + // Entry 2C00 - 2C3F + 0x0174, 0x0186, 0x0198, 0x01aa, 0x01bc, 0x01ce, 0x01e0, 0x01f2, + 0x0204, 0x0216, 0x0228, 0x023a, 0x024c, 0x025e, 0x0270, 0x0282, + 0x0294, 0x02a6, 0x02b8, 0x02ca, 0x02dc, 0x02ee, 0x0306, 0x0318, + 0x032a, 0x033c, 0x034e, 0x0360, 0x0372, 0x0384, 0x0396, 0x03a8, + 0x03ba, 0x03cc, 0x03de, 0x03f0, 0x0402, 0x0414, 0x0426, 0x0438, + 0x044a, 0x045c, 0x046e, 0x0480, 0x0492, 0x04a4, 0x04b6, 0x04c8, + 0x04da, 0x04ec, 0x04fe, 0x0510, 0x0522, 0x0534, 0x054c, 0x055e, + 0x0576, 0x0588, 0x05a0, 0x05b2, 0x05c4, 0x05d6, 0x05e8, 0x05fa, + // Entry 2C40 - 2C7F + 0x060c, 0x0624, 0x0636, 0x0648, 0x065a, 0x066c, 0x067d, 0x068f, + 0x06a7, 0x06bf, 0x02bf, 0x02ec, 0x031e, 0x0341, 0x0369, 0x0380, + 0x039e, 0x03b3, 0x03d2, 0x03e9, 0x03fa, 0x0411, 0x0422, 0x0439, + 0x044a, 0x0461, 0x0472, 0x0489, 0x049a, 0x04ac, 0x04be, 0x04d0, + 0x04e2, 0x04f4, 0x0506, 0x0518, 0x052a, 0x053c, 0x054e, 0x0560, + 0x0572, 0x0584, 0x0596, 0x05a8, 0x05ba, 0x05cc, 0x05de, 0x05f0, + 0x0602, 0x0614, 0x0626, 0x0638, 0x064a, 0x0662, 0x0674, 0x0686, + 0x0698, 0x06aa, 0x06bc, 0x06ce, 0x06e0, 0x06f2, 0x0704, 0x0716, + // Entry 2C80 - 2CBF + 0x0728, 0x073a, 0x074c, 0x075e, 0x0770, 0x0782, 0x0794, 0x07a6, + 0x07b8, 0x07ca, 0x07dc, 0x07ee, 0x0800, 0x0812, 0x0824, 0x0836, + 0x0848, 0x085a, 0x086c, 0x087e, 0x0890, 0x08a8, 0x08ba, 0x08d2, + 0x08e4, 0x08fc, 0x090e, 0x0920, 0x0932, 0x0944, 0x0956, 0x0968, + 0x0980, 0x0992, 0x09a4, 0x09b6, 0x09c8, 0x09d9, 0x09eb, 0x0a03, + 0x0a1b, 0x0a2d, 0x0a3f, 0x0a51, 0x0a63, 0x0a76, 0x0a9c, 0x0ab3, + 0x0ad1, 0x0ae6, 0x02e6, 0x02f7, 0x0308, 0x0319, 0x032a, 0x033b, + 0x034c, 0x035d, 0x036e, 0x037f, 0x0390, 0x03a1, 0x03b2, 0x03c3, + // Entry 2CC0 - 2CFF + 0x03d4, 0x03e6, 0x03f8, 0x040a, 0x041b, 0x042c, 0x043d, 0x044e, + 0x045f, 0x0470, 0x0481, 0x0493, 0x04a5, 0x04b7, 0x04c9, 0x04db, + 0x04ed, 0x04ff, 0x0512, 0x0525, 0x0537, 0x0548, 0x0559, 0x056b, + 0x057c, 0x058e, 0x05a0, 0x05b2, 0x01b2, 0x01c6, 0x01df, 0x01f8, + 0x020b, 0x0224, 0x023d, 0x0251, 0x026a, 0x027d, 0x0297, 0x02b0, + 0x02c9, 0x02e1, 0x02fc, 0x0317, 0x0330, 0x0343, 0x0356, 0x036e, + 0x0386, 0x0398, 0x03af, 0x03c2, 0x03d5, 0x03ed, 0x0402, 0x0417, + 0x042c, 0x0441, 0x0454, 0x0463, 0x0473, 0x0483, 0x0494, 0x04a4, + // Entry 2D00 - 2D3F + 0x04b3, 0x04c4, 0x04d4, 0x04e3, 0x04f3, 0x0504, 0x0514, 0x0524, + 0x0533, 0x0544, 0x0554, 0x0564, 0x0574, 0x0584, 0x0594, 0x05a3, + 0x05b0, 0x05c8, 0x05e2, 0x05fa, 0x0615, 0x0634, 0x064e, 0x066c, + 0x0687, 0x06a6, 0x06bf, 0x06d7, 0x06f2, 0x070d, 0x0727, 0x0741, + 0x0760, 0x077f, 0x0798, 0x07b3, 0x07ce, 0x07ee, 0x0807, 0x081f, + 0x0838, 0x0850, 0x0868, 0x087d, 0x0895, 0x08ab, 0x08c6, 0x08e4, + 0x0901, 0x0919, 0x0932, 0x0945, 0x0959, 0x096b, 0x097f, 0x0992, + 0x09a4, 0x09b7, 0x09cb, 0x01cb, 0x01ee, 0x0211, 0x0230, 0x024f, + // Entry 2D40 - 2D7F + 0x0270, 0x0290, 0x02af, 0x02d1, 0x02f3, 0x0314, 0x0336, 0x0357, + 0x0379, 0x039b, 0x03bc, 0x03db, 0x03ed, 0x03ff, 0x0411, 0x0423, + 0x0435, 0x0448, 0x045a, 0x046d, 0x047f, 0x0492, 0x04a5, 0x04b8, + 0x04ca, 0x04dd, 0x04f1, 0x0505, 0x0517, 0x0529, 0x053c, 0x0550, + 0x0567, 0x057e, 0x0595, 0x05ac, 0x05be, 0x05d0, 0x05e2, 0x01e2, + 0x01ee, 0x01fb, 0x0208, 0x0216, 0x0223, 0x0231, 0x023f, 0x024c, + 0x025b, 0x026a, 0x0278, 0x0287, 0x0296, 0x02a4, 0x02b3, 0x02bf, + 0x02cb, 0x02d7, 0x02e3, 0x02f0, 0x02fc, 0x0309, 0x0316, 0x0323, + // Entry 2D80 - 2DBF + 0x0331, 0x033e, 0x034b, 0x0358, 0x0365, 0x0372, 0x0380, 0x038e, + 0x039d, 0x03ad, 0x03ba, 0x03c6, 0x03c6, 0x03de, 0x03f6, 0x040e, + 0x0426, 0x043e, 0x0456, 0x046e, 0x0486, 0x049e, 0x04b6, 0x04ce, + 0x04e6, 0x04fe, 0x0516, 0x052e, 0x0546, 0x0561, 0x057b, 0x0596, + 0x05b0, 0x05ca, 0x05e4, 0x05fd, 0x0617, 0x0631, 0x064d, 0x0669, + 0x0685, 0x06a1, 0x06bb, 0x06d8, 0x06f4, 0x0711, 0x072d, 0x0749, + 0x0765, 0x0780, 0x079c, 0x07b8, 0x07d6, 0x07f4, 0x0812, 0x0830, + 0x084c, 0x0868, 0x088c, 0x08af, 0x00af, 0x00ca, 0x00e5, 0x0102, + // Entry 2DC0 - 2DFF + 0x011e, 0x013a, 0x0155, 0x0172, 0x018f, 0x01ab, 0x01c6, 0x01e2, + 0x01fe, 0x021b, 0x0237, 0x0254, 0x0271, 0x028c, 0x02a9, 0x02c5, + 0x02e4, 0x0300, 0x031f, 0x0340, 0x0366, 0x0383, 0x03a4, 0x03c0, + 0x03dd, 0x03fe, 0x0420, 0x0440, 0x0460, 0x0480, 0x049c, 0x04b8, + 0x04d5, 0x04ef, 0x050d, 0x0525, 0x053b, 0x055d, 0x0582, 0x05a7, + 0x05cb, 0x05ef, 0x0613, 0x0639, 0x065e, 0x066e, 0x0687, 0x06a0, + 0x06bb, 0x06d5, 0x06ef, 0x0708, 0x0723, 0x073e, 0x0758, 0x076d, + 0x0786, 0x079f, 0x07ba, 0x07d4, 0x07ee, 0x0803, 0x0817, 0x082c, + // Entry 2E00 - 2E3F + 0x0840, 0x0854, 0x0868, 0x087b, 0x088f, 0x08a3, 0x08b9, 0x08cf, + 0x08e5, 0x08fb, 0x090f, 0x0926, 0x093c, 0x0953, 0x0969, 0x097f, + 0x0995, 0x09aa, 0x09c0, 0x09d6, 0x09ee, 0x0a06, 0x0a1e, 0x0a36, + 0x0a4c, 0x0a6b, 0x0a89, 0x0a9f, 0x0ab5, 0x0aca, 0x0adf, 0x0af6, + 0x0b0c, 0x0b22, 0x0b37, 0x0b4e, 0x0b65, 0x0b7b, 0x0b90, 0x0ba6, + 0x0bbc, 0x0bd3, 0x0be9, 0x0c00, 0x0c17, 0x0c2c, 0x0c43, 0x0c59, + 0x0c72, 0x0c88, 0x0ca1, 0x0cbc, 0x0cdc, 0x0cf3, 0x0d0b, 0x0d21, + 0x0d39, 0x0d53, 0x0d6e, 0x0d85, 0x0da0, 0x0db6, 0x0dcc, 0x0de2, + // Entry 2E40 - 2E7F + 0x0dfb, 0x0e11, 0x0e29, 0x0e3e, 0x0e54, 0x0e6b, 0x0e85, 0x0e9f, + 0x0eb6, 0x0ed1, 0x0eed, 0x0f07, 0x0f21, 0x0f38, 0x0f51, 0x0f6c, + 0x0f87, 0x0fa1, 0x0fb5, 0x0fcd, 0x0fe5, 0x0fff, 0x1018, 0x1031, + 0x1049, 0x1063, 0x107d, 0x1096, 0x10aa, 0x10d2, 0x10fb, 0x1121, + 0x1147, 0x116b, 0x1190, 0x11b5, 0x11dc, 0x1206, 0x122e, 0x1257, + 0x1280, 0x1289, 0x1293, 0x129c, 0x12b2, 0x12c4, 0x12d6, 0x12e8, + 0x12fa, 0x130c, 0x131f, 0x1332, 0x1345, 0x1358, 0x136b, 0x137e, + 0x1391, 0x13a4, 0x13b7, 0x13ca, 0x13dd, 0x13f0, 0x1403, 0x1416, + // Entry 2E80 - 2EBF + 0x1429, 0x143c, 0x144f, 0x1462, 0x1475, 0x1488, 0x149b, 0x14ae, + 0x14c1, 0x14d4, 0x14e7, 0x14fa, 0x150d, 0x1520, 0x1533, 0x1546, + 0x1559, 0x156c, 0x157f, 0x1592, 0x15a5, 0x15b8, 0x15cb, 0x15de, + 0x15f1, 0x1604, 0x1617, 0x162a, 0x022a, 0x0237, 0x0244, 0x0250, + 0x025b, 0x0268, 0x0273, 0x027d, 0x028c, 0x0298, 0x02a3, 0x02ae, + 0x02ba, 0x02c8, 0x02d6, 0x02e2, 0x02ee, 0x02f9, 0x0305, 0x0312, + 0x0320, 0x032b, 0x033c, 0x034e, 0x035e, 0x036b, 0x037b, 0x038b, + 0x0399, 0x03a5, 0x03b2, 0x03be, 0x03cc, 0x03db, 0x03e9, 0x03f5, + // Entry 2EC0 - 2EFF + 0x0401, 0x040d, 0x0418, 0x0423, 0x042d, 0x0438, 0x0444, 0x0450, + 0x045f, 0x046b, 0x0479, 0x0489, 0x0496, 0x04a1, 0x04ac, 0x04bb, + 0x04c8, 0x04d7, 0x04e3, 0x04f3, 0x04fe, 0x050b, 0x0518, 0x0524, + 0x0530, 0x053c, 0x0549, 0x0556, 0x0560, 0x056c, 0x0578, 0x0583, + 0x0591, 0x059d, 0x05a9, 0x05b6, 0x05c4, 0x05d2, 0x05dd, 0x05ed, + 0x05f8, 0x0606, 0x0614, 0x0620, 0x062c, 0x0637, 0x0645, 0x0650, + 0x065c, 0x066a, 0x0675, 0x0684, 0x0690, 0x06ba, 0x06e3, 0x070c, + 0x0737, 0x0761, 0x078b, 0x07b4, 0x07df, 0x080a, 0x0834, 0x085d, + // Entry 2F00 - 2F3F + 0x0889, 0x08b5, 0x08e3, 0x0911, 0x093e, 0x096b, 0x099a, 0x09c8, + 0x09f6, 0x0a22, 0x0a52, 0x0a82, 0x0ab4, 0x0ae5, 0x0aef, 0x0af8, + 0x0b01, 0x0b0b, 0x0b14, 0x0b1d, 0x0b26, 0x0b37, 0x0b46, 0x0b4f, + 0x0b65, 0x0b7b, 0x0b92, 0x0ba7, 0x0bb9, 0x0bc7, 0x0bd0, 0x0bdb, + 0x0be4, 0x0bed, 0x0bf6, 0x0bff, 0x0c08, 0x0c12, 0x0c1d, 0x0c26, + 0x0c2f, 0x0c3a, 0x0c45, 0x0c4e, 0x0c57, 0x0c60, 0x0c6a, 0x0c74, + 0x0c7e, 0x0c88, 0x0c93, 0x0c9c, 0x0ca5, 0x0cae, 0x0cb7, 0x0cc0, + 0x0ccb, 0x0cd4, 0x0cdd, 0x0ce6, 0x0cf7, 0x0d08, 0x0d18, 0x0d29, + // Entry 2F40 - 2F7F + 0x0d38, 0x0d47, 0x0d55, 0x0d64, 0x0d73, 0x0d8a, 0x0d93, 0x0d9d, + 0x0da7, 0x0db1, 0x0dbb, 0x0dcc, 0x0de5, 0x0dee, 0x0df7, 0x0e02, + 0x0e0b, 0x0e14, 0x0e1d, 0x0e28, 0x0e31, 0x0e3a, 0x0e48, 0x0e51, + 0x0e5a, 0x0e65, 0x0e6e, 0x0e77, 0x0e85, 0x0e91, 0x0e9d, 0x0ea6, + 0x0eaf, 0x0eb8, 0x0ec1, 0x0ed1, 0x0eda, 0x0ee3, 0x0eec, 0x0ef5, + 0x0efe, 0x0f07, 0x0f10, 0x0f21, 0x0f2a, 0x0f33, 0x0f3c, 0x0f46, + 0x0f4f, 0x0f5e, 0x0f68, 0x0f72, 0x0f7b, 0x0f84, 0x0f8e, 0x0f97, + 0x0fa0, 0x0fa9, 0x0fb2, 0x0fc1, 0x0fd0, 0x0ff8, 0x1020, 0x104a, + // Entry 2F80 - 2FBF + 0x1073, 0x109c, 0x10c4, 0x10ee, 0x1118, 0x1141, 0x1169, 0x1194, + 0x11bf, 0x11ec, 0x1219, 0x1245, 0x1271, 0x129f, 0x12cc, 0x12f9, + 0x1324, 0x1353, 0x1382, 0x13b3, 0x13e3, 0x1413, 0x1442, 0x1473, + 0x14a4, 0x14d4, 0x14ff, 0x152e, 0x1538, 0x0138, 0x0158, 0x0178, + 0x01a0, 0x01bb, 0x01cf, 0x01e4, 0x01f9, 0x0216, 0x022f, 0x0244, + 0x0256, 0x026d, 0x0284, 0x02a1, 0x02b5, 0x02cc, 0x02e2, 0x0302, + 0x0317, 0x0331, 0x034c, 0x035e, 0x037a, 0x038d, 0x03a3, 0x03bc, + 0x03d6, 0x03f6, 0x0414, 0x0432, 0x0448, 0x045d, 0x0471, 0x0489, + // Entry 2FC0 - 2FFF + 0x049e, 0x04c1, 0x04d8, 0x04ef, 0x0507, 0x051f, 0x0534, 0x0549, + 0x0562, 0x057d, 0x059c, 0x05b7, 0x05ce, 0x05e3, 0x05fa, 0x0613, + 0x0634, 0x065b, 0x0673, 0x0693, 0x06a9, 0x06c2, 0x06de, 0x06fa, + 0x0711, 0x0728, 0x0740, 0x0760, 0x077d, 0x079b, 0x039b, 0x03a9, + 0x03b7, 0x03c4, 0x03d2, 0x03e1, 0x03f0, 0x03fe, 0x040d, 0x041b, + 0x0429, 0x0436, 0x0444, 0x0453, 0x0461, 0x0470, 0x047e, 0x048c, + 0x0499, 0x04a7, 0x04b5, 0x04c2, 0x04d0, 0x04df, 0x04ee, 0x04fc, + 0x050b, 0x051b, 0x052b, 0x053a, 0x054a, 0x0559, 0x0568, 0x0576, + // Entry 3000 - 303F + 0x0585, 0x0595, 0x05a4, 0x05b4, 0x05c3, 0x05d2, 0x05e0, 0x05ef, + 0x05fe, 0x060c, 0x061b, 0x062a, 0x0639, 0x0647, 0x0656, 0x0666, + 0x0675, 0x0684, 0x0693, 0x06a1, 0x06b0, 0x06c0, 0x06cf, 0x06de, + 0x06ed, 0x06fb, 0x070a, 0x071a, 0x0729, 0x0739, 0x0748, 0x0757, + 0x0765, 0x0774, 0x0784, 0x0793, 0x07a3, 0x07b2, 0x07c1, 0x07cf, + 0x07de, 0x07ed, 0x07fc, 0x080a, 0x0819, 0x0829, 0x0838, 0x0847, + 0x0856, 0x0864, 0x0873, 0x0883, 0x0892, 0x08a2, 0x08b2, 0x08c1, + 0x08d1, 0x08e2, 0x08f3, 0x0903, 0x0914, 0x0924, 0x0934, 0x0943, + // Entry 3040 - 307F + 0x0953, 0x0964, 0x0974, 0x0985, 0x0995, 0x09a5, 0x09b4, 0x09c4, + 0x09d4, 0x09e3, 0x09f3, 0x0a03, 0x0a13, 0x0a22, 0x0a32, 0x0a43, + 0x0a53, 0x0a63, 0x0a73, 0x0a82, 0x0a92, 0x0aa2, 0x0ab2, 0x0ac1, + 0x0ad1, 0x0ae2, 0x0af2, 0x0b03, 0x0b13, 0x0b23, 0x0b32, 0x0b42, + 0x0b52, 0x0b62, 0x0b71, 0x0b81, 0x0b91, 0x0ba1, 0x0bb0, 0x0bc0, + 0x0bd1, 0x0be1, 0x0bf1, 0x0c01, 0x0c10, 0x0c20, 0x0c31, 0x0c41, + 0x0c51, 0x0c61, 0x0c70, 0x0c80, 0x0c91, 0x0ca1, 0x0cb2, 0x0cc2, + 0x0cd2, 0x0ce1, 0x0cf1, 0x0d02, 0x0d12, 0x0d23, 0x0d33, 0x0d43, + // Entry 3080 - 30BF + 0x0d52, 0x0d62, 0x0d72, 0x0d82, 0x0d91, 0x0da1, 0x0db2, 0x0dc2, + 0x0dd2, 0x0de1, 0x0df1, 0x0e02, 0x0e12, 0x0e21, 0x0e30, 0x0e3e, + 0x0e4d, 0x0e5d, 0x0e6c, 0x0e7c, 0x0e8b, 0x0e9a, 0x0ea8, 0x0eb7, + 0x0ec7, 0x0ed7, 0x0ee6, 0x0ef6, 0x0f05, 0x0f14, 0x0f22, 0x0f31, + 0x0f40, 0x0f4e, 0x0f5d, 0x0f6c, 0x0f7a, 0x0f89, 0x0f99, 0x0fa8, + 0x0fb7, 0x0fc6, 0x0fd4, 0x0fe3, 0x0ff2, 0x1001, 0x100f, 0x101e, + 0x102d, 0x103c, 0x104a, 0x1059, 0x1068, 0x1076, 0x1085, 0x1094, + 0x10a3, 0x10b1, 0x10c0, 0x10d0, 0x10df, 0x10ee, 0x10fd, 0x110b, + // Entry 30C0 - 30FF + 0x111a, 0x1129, 0x1138, 0x1146, 0x1155, 0x1165, 0x1175, 0x1184, + 0x1194, 0x11a3, 0x11b2, 0x11c0, 0x11cf, 0x11de, 0x11ed, 0x11fb, + 0x120a, 0x1219, 0x1228, 0x1237, 0x1246, 0x1254, 0x1263, 0x1273, + 0x1282, 0x1291, 0x12a0, 0x12ae, 0x12bd, 0x12cd, 0x12dc, 0x12eb, + 0x12fa, 0x1308, 0x1317, 0x1327, 0x1336, 0x1346, 0x1355, 0x1364, + 0x1372, 0x1381, 0x1391, 0x13a0, 0x13af, 0x13be, 0x13cc, 0x13db, + 0x13ea, 0x13f8, 0x1407, 0x1416, 0x1425, 0x1433, 0x1442, 0x1452, + 0x1461, 0x1470, 0x147f, 0x148d, 0x149c, 0x14ac, 0x14bb, 0x14cb, + // Entry 3100 - 313F + 0x14da, 0x14e9, 0x14f7, 0x1506, 0x1516, 0x1526, 0x1535, 0x1545, + 0x1554, 0x1563, 0x1571, 0x1580, 0x158f, 0x159d, 0x15ac, 0x15bb, + 0x15ca, 0x15d8, 0x15e7, 0x15f7, 0x1606, 0x1616, 0x1626, 0x1635, + 0x1645, 0x1656, 0x1666, 0x1677, 0x1687, 0x1697, 0x16a6, 0x16b6, + 0x16c7, 0x16d7, 0x16e8, 0x16f8, 0x1708, 0x1717, 0x1727, 0x1737, + 0x1746, 0x1756, 0x1766, 0x1776, 0x1785, 0x1795, 0x17a6, 0x17b6, + 0x17c6, 0x17d6, 0x17e5, 0x17f5, 0x1806, 0x1816, 0x1826, 0x1836, + 0x1845, 0x1855, 0x1865, 0x1875, 0x1884, 0x1894, 0x18a4, 0x18b3, + // Entry 3140 - 317F + 0x18c3, 0x18d3, 0x18e3, 0x18f2, 0x1902, 0x1913, 0x1923, 0x1933, + 0x1943, 0x1952, 0x1962, 0x1973, 0x1984, 0x1994, 0x19a5, 0x19b5, + 0x19c5, 0x19d4, 0x19e4, 0x19f5, 0x1a05, 0x1a15, 0x1a25, 0x1a35, + 0x1a45, 0x1a54, 0x1a64, 0x1a74, 0x1a83, 0x1a92, 0x1aa0, 0x1aaf, + 0x1abf, 0x1ace, 0x1ade, 0x1aed, 0x1afb, 0x1b0a, 0x1b1a, 0x1b29, + 0x1b39, 0x1b48, 0x1b57, 0x1b65, 0x1b74, 0x1b83, 0x1b91, 0x1ba0, + 0x1baf, 0x1bbe, 0x1bcc, 0x1bdb, 0x1beb, 0x1bfa, 0x1c0a, 0x1c1a, + 0x1c29, 0x1c39, 0x1c4a, 0x1c5a, 0x1c6b, 0x1c7b, 0x1c8b, 0x1c9a, + // Entry 3180 - 31BF + 0x1caa, 0x1cbb, 0x1ccb, 0x1cdc, 0x1cec, 0x1cfb, 0x1d0b, 0x1d1b, + 0x1d2a, 0x1d3a, 0x1d4a, 0x1d5a, 0x1d69, 0x1d79, 0x1d8a, 0x1d9a, + 0x1daa, 0x1dba, 0x1dc9, 0x1dd9, 0x1dea, 0x1dfa, 0x1e09, 0x1e18, + 0x1e26, 0x1e35, 0x1e45, 0x1e55, 0x1e64, 0x1e74, 0x1e83, 0x1e92, + 0x1ea0, 0x1eaf, 0x1ebf, 0x1ecf, 0x1ede, 0x1eee, 0x1efd, 0x1f0c, + 0x1f1a, 0x1f29, 0x1f38, 0x1f46, 0x1f55, 0x1f64, 0x1f73, 0x1f81, + 0x1f90, 0x1fa0, 0x1faf, 0x1fbe, 0x1fcd, 0x1fdb, 0x1fea, 0x1ffa, + 0x2009, 0x2018, 0x2027, 0x2035, 0x2044, 0x2054, 0x2064, 0x2073, + // Entry 31C0 - 31FF + 0x2083, 0x2092, 0x20a1, 0x20af, 0x20be, 0x20ce, 0x20de, 0x20ed, + 0x20fd, 0x210c, 0x211b, 0x2129, 0x2138, 0x2147, 0x2156, 0x2164, + 0x2173, 0x2182, 0x2191, 0x219f, 0x21ae, 0x21be, 0x21cd, 0x21dc, + 0x21eb, 0x21f9, 0x2208, 0x2218, 0x2227, 0x2237, 0x2246, 0x2255, + 0x2263, 0x2272, 0x2282, 0x2291, 0x22a1, 0x22b0, 0x22bf, 0x22cd, + 0x22dc, 0x22eb, 0x22fa, 0x2308, 0x2317, 0x2326, 0x2335, 0x2343, + 0x2352, 0x2362, 0x2371, 0x2381, 0x2391, 0x23a0, 0x23b1, 0x23c1, + 0x23d2, 0x23e2, 0x23f2, 0x2401, 0x2411, 0x2422, 0x2433, 0x2443, + // Entry 3200 - 323F + 0x2454, 0x2464, 0x2474, 0x2483, 0x2493, 0x24a3, 0x24b3, 0x24c2, + 0x24d2, 0x24e2, 0x24f2, 0x2501, 0x2511, 0x2522, 0x2532, 0x2543, + 0x2553, 0x2563, 0x2573, 0x2582, 0x2592, 0x25a3, 0x25b3, 0x25c4, + 0x25d4, 0x25e4, 0x25f3, 0x2603, 0x2613, 0x2622, 0x2632, 0x2642, + 0x2652, 0x2661, 0x2671, 0x2682, 0x2692, 0x26a2, 0x26b2, 0x26c1, + 0x26d1, 0x26e2, 0x26f3, 0x2703, 0x2714, 0x2724, 0x2734, 0x2743, + 0x2753, 0x2764, 0x2775, 0x2785, 0x2796, 0x27a6, 0x27b6, 0x27c5, + 0x27d5, 0x27e5, 0x27f4, 0x2804, 0x2815, 0x2825, 0x2836, 0x2846, + // Entry 3240 - 327F + 0x2856, 0x2865, 0x2875, 0x2886, 0x2897, 0x28a7, 0x28b7, 0x28c7, + 0x28d6, 0x28e6, 0x28f6, 0x2905, 0x2915, 0x2924, 0x2934, 0x2943, + 0x2952, 0x2961, 0x296f, 0x297e, 0x298e, 0x299e, 0x29ad, 0x29bd, + 0x29cc, 0x29db, 0x29e9, 0x29f8, 0x2a07, 0x2a15, 0x2a24, 0x2a33, + 0x2a42, 0x2a50, 0x2a5f, 0x2a6f, 0x2a7e, 0x2a8e, 0x2a9d, 0x2aab, + 0x2aba, 0x2ac9, 0x2ad7, 0x2ae6, 0x2af5, 0x2b04, 0x2b12, 0x2b21, + 0x2b31, 0x2b40, 0x2b50, 0x2b5f, 0x2b6e, 0x2b7c, 0x2b8b, 0x2b9b, + 0x2baa, 0x2bba, 0x2bc9, 0x2bd8, 0x2be6, 0x2bf5, 0x2c04, 0x2c12, + // Entry 3280 - 32BF + 0x2c21, 0x2c30, 0x2c3f, 0x2c4d, 0x2c5c, 0x2c6c, 0x2c7b, 0x2c8a, + 0x2c99, 0x2ca7, 0x2cb6, 0x2cc6, 0x2cd5, 0x2ce4, 0x2cf3, 0x2d01, + 0x2d10, 0x2d20, 0x2d30, 0x2d3f, 0x2d4f, 0x2d5e, 0x2d6d, 0x2d7b, + 0x2d8a, 0x2d9a, 0x2da9, 0x2db9, 0x2dc8, 0x2dd7, 0x2de5, 0x2df4, + 0x2e03, 0x2e11, 0x2e20, 0x2e2f, 0x2e3e, 0x2e4c, 0x2e5b, 0x2e6b, + 0x2e7a, 0x2e89, 0x2e98, 0x2ea6, 0x2eb5, 0x2ec5, 0x2ed4, 0x2ee4, + 0x2ef4, 0x2f03, 0x2f13, 0x2f24, 0x2f35, 0x2f45, 0x2f56, 0x2f66, + 0x2f76, 0x2f85, 0x2f95, 0x2fa5, 0x2fb4, 0x2fc4, 0x2fd4, 0x2fe3, + // Entry 32C0 - 32FF + 0x2ff3, 0x3003, 0x3012, 0x3022, 0x3033, 0x3043, 0x3053, 0x3063, + 0x3072, 0x3082, 0x3093, 0x30a3, 0x30b3, 0x30c3, 0x30d2, 0x30e2, + 0x30f3, 0x3103, 0x3114, 0x3124, 0x3134, 0x3143, 0x3153, 0x3164, + 0x3174, 0x3184, 0x3194, 0x31a4, 0x31b3, 0x31c3, 0x31d2, 0x31e2, + 0x31f3, 0x3203, 0x3213, 0x3223, 0x3232, 0x3242, 0x3253, 0x3263, + 0x3272, 0x3281, 0x328f, 0x329e, 0x32ae, 0x32bd, 0x32cd, 0x32dc, + 0x32eb, 0x32f9, 0x3308, 0x3318, 0x3327, 0x3337, 0x3346, 0x3355, + 0x3363, 0x3372, 0x3381, 0x338f, 0x339e, 0x33ad, 0x33bc, 0x33ca, + // Entry 3300 - 333F + 0x33d9, 0x33e9, 0x33f8, 0x3407, 0x3416, 0x3424, 0x3433, 0x3443, + 0x3452, 0x3462, 0x3472, 0x3481, 0x3491, 0x34a2, 0x34b2, 0x34c3, + 0x34d3, 0x34e3, 0x34f2, 0x3502, 0x3512, 0x3522, 0x3531, 0x3541, + 0x3551, 0x3560, 0x3570, 0x3580, 0x3590, 0x359f, 0x35af, 0x35bf, + 0x35cf, 0x35de, 0x35ee, 0x35ff, 0x360f, 0x361f, 0x362f, 0x363e, + 0x364e, 0x365f, 0x366f, 0x3680, 0x3690, 0x36a0, 0x36af, 0x36bf, + 0x36cf, 0x36df, 0x36ee, 0x36fe, 0x370e, 0x371e, 0x372d, 0x373d, + 0x374e, 0x375e, 0x376e, 0x377e, 0x378d, 0x379d, 0x37ae, 0x37be, + // Entry 3340 - 337F + 0x37ce, 0x37de, 0x37ed, 0x37fd, 0x380e, 0x381f, 0x382f, 0x3840, + 0x3850, 0x3860, 0x386f, 0x387f, 0x388f, 0x389f, 0x38ae, 0x38be, + 0x38ce, 0x38dd, 0x38ed, 0x38fe, 0x390e, 0x391e, 0x392e, 0x393d, + 0x394d, 0x395e, 0x396e, 0x397e, 0x398d, 0x399e, 0x39ae, 0x39be, + 0x39ce, 0x39dd, 0x39ed, 0x39fd, 0x3a0d, 0x3a1c, 0x3a2c, 0x3a3c, + 0x3a4c, 0x3a5b, 0x3a6b, 0x3a7c, 0x3a8c, 0x3a9c, 0x3aac, 0x3abb, + 0x3acb, 0x3adc, 0x3aec, 0x3afc, 0x3b0c, 0x3b1b, 0x3b2b, 0x3b3b, + 0x3b4a, 0x3b5a, 0x3b6a, 0x3b7a, 0x3b89, 0x3b99, 0x3ba9, 0x3bb9, + // Entry 3380 - 33BF + 0x3bc8, 0x3bd8, 0x3be9, 0x3bf9, 0x3c09, 0x3c19, 0x3c28, 0x3c38, + 0x3c49, 0x3c59, 0x3c69, 0x3c79, 0x3c88, 0x3c98, 0x3ca9, 0x3cb9, + 0x3cca, 0x3cda, 0x3cea, 0x3cf9, 0x3d09, 0x3d19, 0x3d29, 0x3d38, + 0x3d48, 0x3d58, 0x3d68, 0x3d77, 0x3d87, 0x3d98, 0x3da8, 0x3db8, + 0x3dc8, 0x3dd7, 0x3de7, 0x3df8, 0x3e08, 0x3e17, 0x3e26, 0x3e34, + 0x3e43, 0x3e53, 0x3e62, 0x3e72, 0x3e81, 0x3e90, 0x3e9e, 0x3ead, + 0x3ebc, 0x3eca, 0x3ed9, 0x3ee8, 0x3ef7, 0x3f05, 0x3f14, 0x3f24, + 0x3f33, 0x3f42, 0x3f51, 0x3f5f, 0x3f6e, 0x3f7e, 0x3f8d, 0x3f9c, + // Entry 33C0 - 33FF + 0x3fab, 0x3fb9, 0x3fc8, 0x3fd8, 0x3fe8, 0x3ff7, 0x4007, 0x4017, + 0x4027, 0x4036, 0x4046, 0x4055, 0x4064, 0x4072, 0x4081, 0x4090, + 0x409f, 0x40ad, 0x40bc, 0x40cc, 0x40db, 0x40ea, 0x40f9, 0x4107, + 0x4116, 0x4126, 0x4135, 0x4144, 0x4153, 0x4161, 0x4170, 0x4180, + 0x4190, 0x419f, 0x41af, 0x41bf, 0x41cf, 0x41de, 0x41ee, 0x41fd, + 0x420c, 0x421a, 0x4229, 0x4238, 0x4247, 0x4255, 0x4264, 0x4274, + 0x4283, 0x4292, 0x42a1, 0x42af, 0x42be, 0x42ce, 0x42dd, 0x42ed, + 0x42fd, 0x430c, 0x431c, 0x432d, 0x433e, 0x434e, 0x435f, 0x4370, + // Entry 3400 - 343F + 0x4380, 0x4391, 0x43a1, 0x43b1, 0x43c0, 0x43d0, 0x43e0, 0x43f0, + 0x43ff, 0x440f, 0x4420, 0x4430, 0x4440, 0x4450, 0x445f, 0x446f, + 0x447f, 0x448f, 0x449e, 0x44ae, 0x44bf, 0x44d0, 0x44e0, 0x44f1, + 0x4502, 0x4512, 0x4522, 0x4532, 0x4541, 0x4551, 0x4561, 0x4570, + 0x4580, 0x4591, 0x45a1, 0x45b1, 0x45c1, 0x45d0, 0x45e0, 0x45f1, + 0x4601, 0x4611, 0x4621, 0x4630, 0x4640, 0x4651, 0x4662, 0x4672, + 0x4683, 0x4694, 0x46a4, 0x46b5, 0x46c5, 0x46d5, 0x46e4, 0x46f4, + 0x4704, 0x4714, 0x4723, 0x4733, 0x4742, 0x4751, 0x475f, 0x476e, + // Entry 3440 - 347F + 0x477e, 0x478e, 0x479d, 0x47ad, 0x47bd, 0x47cc, 0x47db, 0x47ea, + 0x47f8, 0x4807, 0x4816, 0x4825, 0x4833, 0x4842, 0x4852, 0x4861, + 0x4870, 0x487f, 0x488d, 0x489c, 0x48ac, 0x48bc, 0x48cb, 0x48db, + 0x48eb, 0x48fb, 0x490a, 0x491a, 0x4929, 0x4938, 0x4946, 0x4955, + 0x4964, 0x4973, 0x4981, 0x4990, 0x49a0, 0x49af, 0x49be, 0x49cd, + 0x49db, 0x49ea, 0x49fa, 0x4a09, 0x0209, 0x0217, 0x0224, 0x0232, + 0x0241, 0x024f, 0x025d, 0x026c, 0x027a, 0x0287, 0x0296, 0x02a4, + 0x02b3, 0x02c1, 0x02ce, 0x02dc, 0x02eb, 0x02f9, 0x0306, 0x0314, + // Entry 3480 - 34BF + 0x0322, 0x0331, 0x033f, 0x034e, 0x035d, 0x036a, 0x0377, 0x0386, + 0x0394, 0x03a2, 0x03b0, 0x03be, 0x03cc, 0x03da, 0x03e8, 0x03f5, + 0x0402, 0x0411, 0x041f, 0x042d, 0x043c, 0x0449, 0x0456, 0x0465, + 0x0473, 0x0480, 0x048f, 0x049d, 0x04ac, 0x04bb, 0x04c9, 0x04d8, + 0x04e6, 0x04f6, 0x0505, 0x0512, 0x0112, 0x0120, 0x012e, 0x013d, + 0x014b, 0x0159, 0x0168, 0x0176, 0x0184, 0x0193, 0x01a1, 0x01af, + 0x01be, 0x01cd, 0x01dc, 0x01ec, 0x01fa, 0x0208, 0x0216, 0x0224, + 0x0233, 0x0241, 0x0250, 0x025e, 0x026c, 0x027b, 0x0289, 0x0297, + // Entry 34C0 - 34FF + 0x02a6, 0x02b4, 0x02c3, 0x02d0, 0x02de, 0x02eb, 0x02f9, 0x0306, + 0x0313, 0x0320, 0x032e, 0x033c, 0x034a, 0x0361, 0x0377, 0x038f, + 0x03a6, 0x03bd, 0x03d5, 0x03eb, 0x0405, 0x0414, 0x0424, 0x0434, + 0x0444, 0x0455, 0x0465, 0x0476, 0x0486, 0x0497, 0x04a8, 0x04ba, + 0x04cb, 0x04db, 0x04eb, 0x04fb, 0x050c, 0x051d, 0x052f, 0x053f, + 0x054f, 0x055f, 0x0570, 0x0580, 0x0591, 0x05a1, 0x05b2, 0x05c2, + 0x05d2, 0x05e3, 0x05f3, 0x0603, 0x0615, 0x0625, 0x0635, 0x0645, + 0x0656, 0x0664, 0x0673, 0x0682, 0x0692, 0x06a1, 0x06b1, 0x06c0, + // Entry 3500 - 353F + 0x06d0, 0x06df, 0x06ef, 0x06ff, 0x0710, 0x0720, 0x072f, 0x073e, + 0x074d, 0x075d, 0x076d, 0x077e, 0x078d, 0x079c, 0x07ab, 0x07bb, + 0x07ca, 0x07da, 0x07e9, 0x07f9, 0x0808, 0x0817, 0x0827, 0x0836, + 0x0845, 0x0856, 0x0865, 0x0874, 0x0883, 0x0893, 0x08a1, 0x08b0, + 0x08c1, 0x08d0, 0x08e0, 0x08ef, 0x08ff, 0x090e, 0x091e, 0x092d, + 0x093d, 0x094d, 0x095e, 0x096f, 0x097f, 0x098e, 0x099d, 0x09ac, + 0x09bc, 0x09cc, 0x09dd, 0x09ec, 0x09fb, 0x0a0a, 0x0a1a, 0x0a29, + 0x0a39, 0x0a48, 0x0a58, 0x0a67, 0x0a76, 0x0a86, 0x0a95, 0x0aa4, + // Entry 3540 - 357F + 0x0ab4, 0x0ac5, 0x0ad4, 0x0ae3, 0x0af2, 0x0b02, 0x0b11, 0x0b21, + 0x0b31, 0x0b41, 0x0b52, 0x0b62, 0x0b73, 0x0b83, 0x0b94, 0x0ba5, + 0x0bb7, 0x0bc8, 0x0bd8, 0x0be8, 0x0bf8, 0x0c09, 0x0c1a, 0x0c2c, + 0x0c3c, 0x0c4c, 0x0c5c, 0x0c6d, 0x0c7d, 0x0c8e, 0x0c9e, 0x0caf, + 0x0cbf, 0x0ccf, 0x0ce0, 0x0cf0, 0x0d00, 0x0d12, 0x0d22, 0x0d32, + 0x0d42, 0x0d53, 0x0d61, 0x0d70, 0x0d7f, 0x0d8f, 0x0d9e, 0x0dae, + 0x0dbd, 0x0dcd, 0x0ddc, 0x0dec, 0x0dfc, 0x0e0d, 0x0e1d, 0x0e2c, + 0x0e3b, 0x0e4a, 0x0e5a, 0x0e6a, 0x0e7b, 0x0e8a, 0x0e99, 0x0ea8, + // Entry 3580 - 35BF + 0x0eb8, 0x0ec7, 0x0ed7, 0x0ee6, 0x0ef6, 0x0f05, 0x0f14, 0x0f24, + 0x0f33, 0x0f42, 0x0f53, 0x0f62, 0x0f71, 0x0f80, 0x0f90, 0x0f9e, + 0x0fad, 0x0fbe, 0x0fcd, 0x0fdd, 0x0fec, 0x0ffc, 0x100b, 0x101b, + 0x102a, 0x103a, 0x104a, 0x105b, 0x106b, 0x107c, 0x108b, 0x109a, + 0x10a9, 0x10b9, 0x10c9, 0x10da, 0x10e9, 0x10f8, 0x1107, 0x1117, + 0x1126, 0x1136, 0x1145, 0x1155, 0x1164, 0x1173, 0x1183, 0x1192, + 0x11a1, 0x11b2, 0x11c1, 0x11d0, 0x11df, 0x11ef, 0x11fd, 0x120c, + 0x121d, 0x122c, 0x123c, 0x124b, 0x125b, 0x126a, 0x127a, 0x1289, + // Entry 35C0 - 35FF + 0x1299, 0x12a9, 0x12ba, 0x12cb, 0x12db, 0x12ec, 0x12fb, 0x130a, + 0x1319, 0x1329, 0x1339, 0x134a, 0x1359, 0x1368, 0x1377, 0x1387, + 0x1396, 0x13a6, 0x13b5, 0x13c5, 0x13d4, 0x13e3, 0x13f3, 0x1402, + 0x1411, 0x1422, 0x1434, 0x1443, 0x1453, 0x1462, 0x1471, 0x1481, + 0x1490, 0x14a7, 0x14b0, 0x14bd, 0x14ce, 0x14e3, 0x14f8, 0x150e, + 0x151e, 0x152e, 0x153d, 0x154b, 0x155a, 0x1568, 0x1576, 0x1585, + 0x1595, 0x15a4, 0x15b3, 0x15c2, 0x15d1, 0x15df, 0x15ec, 0x15f9, + 0x1608, 0x1616, 0x1624, 0x1631, 0x1640, 0x164f, 0x165d, 0x1672, + // Entry 3600 - 363F + 0x1687, 0x0287, 0x02a5, 0x02c1, 0x02de, 0x02f9, 0x031d, 0x033f, + 0x035b, 0x0375, 0x0392, 0x03ad, 0x03d1, 0x03f3, 0x0416, 0x0437, + 0x045a, 0x047b, 0x04a5, 0x04cd, 0x04f1, 0x0513, 0x0536, 0x0557, + 0x0579, 0x0599, 0x05c2, 0x05e9, 0x060c, 0x062d, 0x065f, 0x068f, + 0x06a9, 0x06c1, 0x06e5, 0x0707, 0x0726, 0x0743, 0x0762, 0x077f, + 0x079e, 0x07bb, 0x07de, 0x07ff, 0x0822, 0x0843, 0x086d, 0x0895, + 0x08b2, 0x08ca, 0x08ee, 0x0916, 0x093f, 0x0950, 0x0976, 0x0991, + 0x09ad, 0x09c8, 0x09eb, 0x0a09, 0x0a2c, 0x0a4b, 0x0a64, 0x0a7e, + // Entry 3640 - 367F + 0x0a8d, 0x0a9d, 0x0ab8, 0x0ad1, 0x0aed, 0x0b07, 0x0b23, 0x0b3d, + 0x0b59, 0x0b73, 0x0b8f, 0x0ba9, 0x0bd4, 0x0bfd, 0x0c18, 0x0c31, + 0x0c4d, 0x0c67, 0x0c83, 0x0c9d, 0x0cb9, 0x0cd3, 0x0cee, 0x0d07, + 0x0d23, 0x0d3d, 0x0d5d, 0x0d7b, 0x0d9c, 0x0dbb, 0x0ddd, 0x0dff, + 0x0e1b, 0x0e3f, 0x0e4d, 0x0e5c, 0x0e6a, 0x0e79, 0x0e88, 0x0e98, + 0x0ea8, 0x0eb6, 0x0ec6, 0x0ed4, 0x0ee3, 0x0ef2, 0x0f02, 0x0f13, + 0x0f25, 0x0f37, 0x0f47, 0x0f58, 0x0f6a, 0x0f78, 0x0f88, 0x0f97, + 0x0fa8, 0x0fb7, 0x0fc9, 0x0fda, 0x0feb, 0x0ffb, 0x100c, 0x101b, + // Entry 3680 - 36BF + 0x102d, 0x103d, 0x104d, 0x105d, 0x106c, 0x107d, 0x108e, 0x109f, + 0x10b0, 0x10c1, 0x10d1, 0x10e1, 0x10f1, 0x1101, 0x1110, 0x111f, + 0x112e, 0x113d, 0x114e, 0x115e, 0x116e, 0x1182, 0x1193, 0x11a3, + 0x11b3, 0x11c4, 0x11d3, 0x11e3, 0x11f2, 0x1201, 0x1210, 0x121f, + 0x122f, 0x123e, 0x124f, 0x125f, 0x126f, 0x127e, 0x128d, 0x129c, + 0x12ab, 0x12bc, 0x12cc, 0x12dc, 0x12ec, 0x12fd, 0x130f, 0x1322, + 0x1334, 0x1347, 0x1363, 0x1381, 0x138e, 0x139d, 0x13a8, 0x13b3, + 0x13c2, 0x13d5, 0x03d5, 0x03fa, 0x0420, 0x0446, 0x046d, 0x0490, + // Entry 36C0 - 36FF + 0x04b4, 0x04d7, 0x04fb, 0x0525, 0x0549, 0x056c, 0x058f, 0x05b8, + 0x05ec, 0x061a, 0x0647, 0x0674, 0x06a7, 0x06d4, 0x06fb, 0x0721, + 0x0747, 0x0773, 0x0793, 0x07ac, 0x07ce, 0x07f6, 0x0815, 0x0836, + 0x085d, 0x088d, 0x08ba, 0x08de, 0x0901, 0x0928, 0x094d, 0x0973, + 0x0997, 0x09b0, 0x09c7, 0x09de, 0x09f3, 0x0a10, 0x0a2b, 0x0a49, + 0x0a65, 0x0a8e, 0x0ab5, 0x0ad1, 0x0aed, 0x0b04, 0x0b19, 0x0b30, + 0x0b45, 0x0b5c, 0x0b71, 0x0b88, 0x0b9d, 0x0bc8, 0x0bf1, 0x0c08, + 0x0c1d, 0x0c45, 0x0c6b, 0x0c8d, 0x0cad, 0x0cd8, 0x0d01, 0x0d37, + // Entry 3700 - 373F + 0x0d6b, 0x0d88, 0x0da3, 0x0dca, 0x0def, 0x0e1e, 0x0e4b, 0x0e6b, + 0x0e89, 0x0ea0, 0x0eb5, 0x0ee9, 0x0f1b, 0x0f3f, 0x0f61, 0x0f8a, + 0x0fb1, 0x0fe5, 0x1017, 0x1042, 0x106b, 0x1089, 0x10a5, 0x10c5, + 0x10e3, 0x110e, 0x1137, 0x114e, 0x1163, 0x1184, 0x11a3, 0x11c9, + 0x11ed, 0x1225, 0x125b, 0x1274, 0x128b, 0x12a2, 0x12b7, 0x12ce, + 0x12e3, 0x12fb, 0x1311, 0x1323, 0x1339, 0x134f, 0x1365, 0x137b, + 0x1391, 0x13af, 0x13c5, 0x13da, 0x13f8, 0x1414, 0x1432, 0x144e, + 0x146c, 0x1491, 0x14b4, 0x14d1, 0x14ec, 0x150a, 0x1526, 0x1544, + // Entry 3740 - 377F + 0x1560, 0x157e, 0x159a, 0x15bf, 0x15d4, 0x15f5, 0x1612, 0x162d, + 0x164a, 0x167b, 0x1697, 0x16bc, 0x16df, 0x16fe, 0x171b, 0x1741, + 0x1767, 0x178b, 0x17ad, 0x17cf, 0x17ef, 0x180e, 0x182b, 0x184a, + 0x1867, 0x1886, 0x18a3, 0x18cd, 0x18f5, 0x191f, 0x1947, 0x1971, + 0x1999, 0x19c3, 0x19eb, 0x1a15, 0x1a3d, 0x1a5d, 0x1a81, 0x1a9e, + 0x1abe, 0x1ae2, 0x02e2, 0x02ff, 0x031c, 0x0344, 0x035c, 0x0375, + 0x038c, 0x03a6, 0x03be, 0x03be, 0x03e0, 0x0405, 0x0426, 0x0449, + 0x046b, 0x048d, 0x04af, 0x04ce, 0x04ef, 0x0504, 0x0519, 0x0533, + // Entry 3780 - 37BF + 0x0548, 0x055d, 0x0572, 0x058b, 0x05a1, 0x05b8, 0x05ce, 0x05e5, + 0x05ff, 0x0615, 0x062c, 0x0642, 0x0659, 0x0670, 0x0688, 0x069f, + 0x06b7, 0x06cd, 0x06e4, 0x06fa, 0x0711, 0x0727, 0x073d, 0x0754, + 0x076a, 0x0781, 0x0797, 0x07ad, 0x07c3, 0x07da, 0x07f0, 0x0806, + 0x081f, 0x0838, 0x0851, 0x086a, 0x0884, 0x089e, 0x08b8, 0x08d2, + 0x08ec, 0x00ec, 0x010c, 0x0129, 0x014c, 0x016e, 0x018d, 0x01b2, + 0x01ca, 0x01e6, 0x01fc, 0x0215, 0x0215, 0x0227, 0x023a, 0x024c, + 0x025f, 0x0271, 0x0284, 0x0296, 0x02a9, 0x02bb, 0x02ce, 0x02e0, + // Entry 37C0 - 37FF + 0x02f2, 0x0304, 0x0317, 0x0329, 0x033b, 0x034e, 0x0362, 0x0375, + 0x0387, 0x039a, 0x03ac, 0x03c3, 0x03d5, 0x03e7, 0x03f9, 0x040c, + 0x041e, 0x0430, 0x0441, 0x0452, 0x0463, 0x0474, 0x0485, 0x0497, + 0x04a9, 0x04bb, 0x04ce, 0x04e0, 0x04fc, 0x0518, 0x052b, 0x053f, + 0x0552, 0x0565, 0x0581, 0x059e, 0x05b7, 0x05d3, 0x05ef, 0x060c, + 0x0627, 0x0640, 0x0659, 0x066b, 0x0684, 0x0284, 0x029c, 0x02b3, + 0x02c6, 0x02da, 0x02ed, 0x0301, 0x0314, 0x0328, 0x0343, 0x035f, + 0x037a, 0x0396, 0x03a9, 0x03bd, 0x03d1, 0x03e4, 0x03f8, 0x040c, + // Entry 3800 - 383F + 0x0420, 0x0435, 0x0449, 0x045e, 0x0473, 0x0487, 0x049c, 0x04b0, + 0x04c5, 0x04da, 0x04ef, 0x0505, 0x051a, 0x0530, 0x0545, 0x0559, + 0x056e, 0x0582, 0x0597, 0x05ab, 0x05bf, 0x05d4, 0x05e8, 0x05fd, + 0x0611, 0x0625, 0x0639, 0x064d, 0x0661, 0x0676, 0x068b, 0x069f, + 0x06b3, 0x06c8, 0x06e7, 0x06ff, 0x0716, 0x072e, 0x0745, 0x075d, + 0x077c, 0x079c, 0x07bb, 0x07db, 0x07f2, 0x080a, 0x0822, 0x0839, + 0x0851, 0x0869, 0x087f, 0x089a, 0x009a, 0x00aa, 0x00c1, 0x00d6, + 0x00ea, 0x00fe, 0x0114, 0x0129, 0x013e, 0x0152, 0x0168, 0x017e, + // Entry 3840 - 387F + 0x0193, 0x0193, 0x01b2, 0x01d0, 0x01ee, 0x020e, 0x022d, 0x024c, + 0x026a, 0x028a, 0x02aa, 0x02c9, 0x02e6, 0x0303, 0x0321, 0x033f, + 0x035d, 0x037b, 0x0399, 0x03bb, 0x03de, 0x0400, 0x0429, 0x0448, + 0x0469, 0x048d, 0x04a5, 0x04ba, 0x04ca, 0x04df, 0x04f6, 0x0508, + 0x0108, 0x011b, 0x012d, 0x013f, 0x0153, 0x0166, 0x0179, 0x018b, + 0x019f, 0x01b3, 0x01c6, 0x01d8, 0x01eb, 0x01fd, 0x0210, 0x0222, + 0x0235, 0x0247, 0x025a, 0x026c, 0x027f, 0x0291, 0x02a3, 0x02b6, + 0x02c8, 0x02da, 0x02ec, 0x02fe, 0x0310, 0x0322, 0x0334, 0x0347, + // Entry 3880 - 38BF + 0x0359, 0x036b, 0x037d, 0x038e, 0x03a0, 0x03b1, 0x03c3, 0x03d4, + 0x03e4, 0x03f4, 0x0405, 0x0415, 0x0429, 0x043c, 0x0456, 0x0467, + 0x0479, 0x0489, 0x0499, 0x04aa, 0x04ba, 0x04ca, 0x04da, 0x04ea, + 0x04fa, 0x050a, 0x051a, 0x052a, 0x053b, 0x054b, 0x055b, 0x056b, + 0x057b, 0x058b, 0x059b, 0x05ac, 0x05be, 0x05cf, 0x05e1, 0x05f0, + 0x0603, 0x0616, 0x0629, 0x063d, 0x0650, 0x0664, 0x0678, 0x068c, + 0x06a4, 0x06bb, 0x06d2, 0x06e9, 0x06f6, 0x02f6, 0x0309, 0x0325, + 0x0341, 0x035c, 0x0378, 0x0394, 0x03b5, 0x03d1, 0x03f2, 0x040d, + // Entry 38C0 - 38FF + 0x0428, 0x0448, 0x046b, 0x0485, 0x04a0, 0x04bd, 0x04d9, 0x04f5, + 0x050f, 0x0531, 0x054e, 0x0569, 0x0588, 0x05a3, 0x05be, 0x05de, + 0x05fa, 0x0617, 0x0631, 0x0651, 0x0251, 0x0268, 0x027b, 0x028e, + 0x02a3, 0x02b4, 0x02ca, 0x02db, 0x02ed, 0x02fe, 0x0316, 0x032f, + 0x0350, 0x0361, 0x0373, 0x0384, 0x0396, 0x03ae, 0x03c6, 0x03d8, + 0x03f0, 0x0403, 0x0415, 0x042d, 0x043f, 0x0458, 0x0474, 0x0487, + 0x049a, 0x04b7, 0x04ca, 0x04e7, 0x04ff, 0x0511, 0x0529, 0x053b, + 0x0557, 0x0569, 0x057b, 0x0593, 0x05a5, 0x05bd, 0x05cf, 0x05e1, + // Entry 3900 - 393F + 0x05f3, 0x060b, 0x061d, 0x062f, 0x0647, 0x0663, 0x0675, 0x0687, + 0x069f, 0x06b9, 0x06d3, 0x06eb, 0x0709, 0x0721, 0x0740, 0x075a, + 0x0778, 0x0791, 0x07ae, 0x07cd, 0x07ea, 0x07fa, 0x0811, 0x0829, + 0x083c, 0x084f, 0x0862, 0x0875, 0x088a, 0x089e, 0x08b2, 0x08c4, + 0x08db, 0x08f0, 0x090c, 0x010c, 0x0120, 0x0133, 0x0145, 0x0157, + 0x016b, 0x017e, 0x0191, 0x01a3, 0x01b7, 0x01cb, 0x01de, 0x01de, + 0x01f9, 0x0210, 0x0227, 0x023e, 0x0255, 0x026c, 0x0283, 0x0298, + 0x02c2, 0x02de, 0x02f9, 0x0314, 0x0330, 0x034b, 0x0367, 0x0383, + // Entry 3940 - 397F + 0x03a0, 0x03bc, 0x03d8, 0x03f3, 0x040e, 0x042b, 0x0447, 0x0463, + 0x047e, 0x049b, 0x04b8, 0x04d4, 0x04f0, 0x050b, 0x0527, 0x0542, + 0x055e, 0x015e, 0x016b, 0x0178, 0x0185, 0x0192, 0x01a0, 0x01ad, + 0x01bb, 0x01ca, 0x01d8, 0x01e7, 0x01f7, 0x0206, 0x0215, 0x0225, + 0x0233, 0x0242, 0x0252, 0x0261, 0x0271, 0x027f, 0x028e, 0x029c, + 0x02ab, 0x02ba, 0x02c8, 0x02d7, 0x02e5, 0x02f4, 0x0303, 0x0311, + 0x0320, 0x032f, 0x033d, 0x034c, 0x035a, 0x0368, 0x0376, 0x0384, + 0x0393, 0x03a1, 0x03af, 0x03c1, 0x03d2, 0x03e4, 0x03f6, 0x0407, + // Entry 3980 - 39BF + 0x0419, 0x042a, 0x043c, 0x044e, 0x0460, 0x0476, 0x048c, 0x04a2, + 0x04b8, 0x00b8, 0x00cb, 0x00de, 0x00f2, 0x010e, 0x0122, 0x0135, + 0x0148, 0x015b, 0x016e, 0x0181, 0x0194, 0x01a8, 0x01c3, 0x01de, + 0x01de, 0x01ed, 0x01fb, 0x0209, 0x0219, 0x0228, 0x0237, 0x0245, + 0x0255, 0x0265, 0x0274, 0x0274, 0x028b, 0x02a1, 0x02be, 0x02db, + 0x02f3, 0x030b, 0x0324, 0x033c, 0x0355, 0x036e, 0x0387, 0x03a1, + 0x03ba, 0x03d4, 0x03ed, 0x0405, 0x041d, 0x0435, 0x044e, 0x0466, + 0x0492, 0x04aa, 0x04c2, 0x04da, 0x04f5, 0x050f, 0x0529, 0x0549, + // Entry 39C0 - 39FF + 0x0561, 0x0579, 0x0590, 0x05ab, 0x05c8, 0x05e5, 0x0604, 0x0623, + 0x0639, 0x0650, 0x0667, 0x067f, 0x0697, 0x06b0, 0x06c6, 0x06dd, + 0x06f4, 0x070c, 0x0722, 0x0739, 0x0750, 0x0768, 0x077e, 0x0795, + 0x07ac, 0x07c4, 0x07da, 0x07f1, 0x0807, 0x081e, 0x0835, 0x084d, + 0x0863, 0x087a, 0x0890, 0x08a7, 0x08bd, 0x08d4, 0x08eb, 0x0903, + 0x0919, 0x0930, 0x0946, 0x095d, 0x0973, 0x098a, 0x09a0, 0x09b7, + 0x09cd, 0x09e4, 0x09fa, 0x0a11, 0x0a27, 0x0a3e, 0x0a53, 0x0a69, + 0x0a7a, 0x0a8b, 0x0a9b, 0x0aac, 0x0abc, 0x0acc, 0x0adc, 0x0aed, + // Entry 3A00 - 3A3F + 0x0afe, 0x0b10, 0x0b21, 0x0b33, 0x0b44, 0x0b55, 0x0b66, 0x0b7a, + 0x0b91, 0x0ba6, 0x0bbc, 0x03bc, 0x03cf, 0x03e4, 0x03f7, 0x040d, + 0x0424, 0x0439, 0x044e, 0x0465, 0x047c, 0x0493, 0x04ab, 0x04c2, + 0x04da, 0x04f1, 0x0508, 0x051f, 0x0539, 0x0553, 0x056e, 0x0588, + 0x05a3, 0x05b8, 0x05d1, 0x05e2, 0x0607, 0x0628, 0x0647, 0x065a, + 0x025a, 0x0270, 0x0286, 0x029d, 0x02b4, 0x02ca, 0x02e0, 0x02e0, + 0x02f6, 0x030c, 0x0323, 0x033a, 0x0350, 0x0366, 0x0366, 0x037b, + 0x0390, 0x03a6, 0x03bc, 0x03d1, 0x03e6, 0x03e6, 0x03fd, 0x0414, + // Entry 3A40 - 3A7F + 0x042b, 0x0443, 0x045b, 0x0472, 0x0489, 0x0089, 0x009e, 0x00b3, + 0x00c8, 0x00de, 0x00f4, 0x0109, 0x011e, 0x011e, 0x013d, 0x0160, + 0x0180, 0x019b, 0x01bd, 0x01d7, 0x0204, 0x022d, 0x025a, 0x027f, + 0x02a5, 0x02cb, 0x02f3, 0x0313, 0x033f, 0x0364, 0x0382, 0x03aa, + 0x03dd, 0x03ff, 0x042d, 0x0449, 0x0474, 0x0497, 0x04b2, 0x04d8, + 0x0505, 0x0520, 0x0545, 0x0564, 0x058d, 0x05ba, 0x05cf, 0x05eb, + 0x060e, 0x0624, 0x064e, 0x0678, 0x06a0, 0x06c7, 0x0701, 0x0733, + 0x075c, 0x077e, 0x0798, 0x07c4, 0x07ed, 0x0813, 0x082f, 0x084c, + // Entry 3A80 - 3ABF + 0x0866, 0x087b, 0x089c, 0x08bc, 0x00bc, 0x00d3, 0x00ea, 0x0101, + 0x0118, 0x012f, 0x0146, 0x015e, 0x0176, 0x018e, 0x01a6, 0x01be, + 0x01d6, 0x01ee, 0x0206, 0x021e, 0x0236, 0x024e, 0x0266, 0x027e, + 0x0296, 0x02ae, 0x02c6, 0x02de, 0x02f6, 0x030e, 0x0326, 0x033e, + 0x0356, 0x036e, 0x0386, 0x039e, 0x03b7, 0x03d0, 0x03e8, 0x0400, + 0x0418, 0x0430, 0x0448, 0x0461, 0x047a, 0x0493, 0x04ac, 0x04c5, + 0x04de, 0x04f6, 0x050d, 0x0525, 0x053d, 0x0555, 0x056d, 0x0585, + 0x059d, 0x05b5, 0x05cd, 0x05e5, 0x05fd, 0x0615, 0x062d, 0x0645, + // Entry 3AC0 - 3AFF + 0x065d, 0x0676, 0x068f, 0x06a8, 0x06c1, 0x06da, 0x06f3, 0x070c, + 0x0725, 0x073e, 0x0757, 0x0770, 0x0789, 0x07a2, 0x07ba, 0x07d2, + 0x07ea, 0x0802, 0x081a, 0x0832, 0x084a, 0x0861, 0x0878, 0x088f, + 0x08a6, 0x08bc, 0x08d2, 0x08ea, 0x0901, 0x0919, 0x0931, 0x0949, + 0x0960, 0x0978, 0x098f, 0x09a5, 0x09ba, 0x09d2, 0x09eb, 0x0a02, + 0x0a1a, 0x0a31, 0x0a47, 0x0a5e, 0x0a75, 0x0a8d, 0x0aa5, 0x0abd, + 0x0adb, 0x0af9, 0x0b17, 0x0b34, 0x0b51, 0x0b6f, 0x0b8e, 0x0baa, + 0x0bc6, 0x0be2, 0x0bfe, 0x0c1b, 0x0c39, 0x0c55, 0x0c74, 0x0c90, + // Entry 3B00 - 3B3F + 0x0ca5, 0x0cba, 0x0cd0, 0x00d0, 0x00e7, 0x00fd, 0x0113, 0x012b, + 0x0142, 0x0159, 0x016f, 0x0187, 0x019f, 0x01b6, 0x01b6, 0x01cc, + 0x01e2, 0x01f7, 0x020d, 0x0223, 0x0239, 0x024f, 0x0265, 0x027a, + 0x028f, 0x02a5, 0x02ba, 0x02cf, 0x02e6, 0x02fc, 0x0312, 0x0327, + 0x033d, 0x0352, 0x0367, 0x037b, 0x0393, 0x03ab, 0x03ab, 0x03c7, + 0x03e5, 0x0401, 0x0423, 0x0440, 0x045c, 0x047f, 0x049c, 0x04bb, + 0x04da, 0x04fc, 0x051f, 0x0542, 0x0564, 0x0587, 0x05ab, 0x05ca, + 0x05f2, 0x0610, 0x062c, 0x064d, 0x0668, 0x0689, 0x06a5, 0x06c2, + // Entry 3B40 - 3B7F + 0x06e6, 0x0702, 0x071d, 0x073f, 0x075b, 0x0779, 0x0794, 0x07b7, + 0x07d8, 0x07f9, 0x0816, 0x0831, 0x084e, 0x086b, 0x0886, 0x08a4, + 0x08ca, 0x08e9, 0x0908, 0x0924, 0x0945, 0x0960, 0x097d, 0x099d, + 0x019d, 0x01bd, 0x01dd, 0x01fd, 0x021d, 0x023d, 0x025d, 0x027d, + 0x029d, 0x02bd, 0x02dd, 0x02fd, 0x031d, 0x033d, 0x035d, 0x037d, + 0x039d, 0x03bd, 0x03dd, 0x03fd, 0x041d, 0x043d, 0x045d, 0x047d, + 0x049d, 0x04bd, 0x04dd, 0x04fd, 0x051d, 0x053d, 0x055d, 0x057d, + 0x059d, 0x05bd, 0x05dd, 0x05fd, 0x061d, 0x063d, 0x065d, 0x067d, + // Entry 3B80 - 3BBF + 0x069d, 0x06bd, 0x06dd, 0x06fd, 0x071d, 0x073d, 0x075d, 0x077d, + 0x079d, 0x07bd, 0x07dd, 0x07fd, 0x081d, 0x083d, 0x085d, 0x087d, + 0x089d, 0x08bd, 0x08dd, 0x08fd, 0x091d, 0x093d, 0x095d, 0x097d, + 0x099d, 0x09bd, 0x09dd, 0x09fd, 0x0a1d, 0x0a3d, 0x0a5d, 0x0a7d, + 0x0a9d, 0x0abd, 0x0add, 0x0afd, 0x0b1d, 0x0b3d, 0x0b5d, 0x0b7d, + 0x0b9d, 0x0bbd, 0x0bdd, 0x0bfd, 0x0c1d, 0x0c3d, 0x0c5d, 0x0c7d, + 0x0c9d, 0x0cbd, 0x0cdd, 0x0cfd, 0x0d1d, 0x0d3d, 0x0d5d, 0x0d7d, + 0x0d9d, 0x0dbd, 0x0ddd, 0x0dfd, 0x0e1d, 0x0e3d, 0x0e5d, 0x0e7d, + // Entry 3BC0 - 3BFF + 0x0e9d, 0x0ebd, 0x0edd, 0x0efd, 0x0f1d, 0x0f3d, 0x0f5d, 0x0f7d, + 0x0f9d, 0x0fbd, 0x0fdd, 0x0ffd, 0x101d, 0x103d, 0x105d, 0x107d, + 0x109d, 0x10bd, 0x10dd, 0x10fd, 0x111d, 0x113d, 0x115d, 0x117d, + 0x119d, 0x11bd, 0x11dd, 0x11fd, 0x121d, 0x123d, 0x125d, 0x127d, + 0x129d, 0x12bd, 0x12dd, 0x12fd, 0x131d, 0x133d, 0x135d, 0x137d, + 0x139d, 0x13bd, 0x13dd, 0x13fd, 0x141d, 0x143d, 0x145d, 0x147d, + 0x149d, 0x14bd, 0x14dd, 0x14fd, 0x151d, 0x153d, 0x155d, 0x157d, + 0x159d, 0x15bd, 0x15dd, 0x15fd, 0x161d, 0x163d, 0x165d, 0x167d, + // Entry 3C00 - 3C3F + 0x169d, 0x16bd, 0x16dd, 0x16fd, 0x171d, 0x173d, 0x175d, 0x177d, + 0x179d, 0x17bd, 0x17dd, 0x17fd, 0x181d, 0x183d, 0x185d, 0x187d, + 0x189d, 0x18bd, 0x18dd, 0x18fd, 0x191d, 0x193d, 0x195d, 0x197d, + 0x199d, 0x19bd, 0x19dd, 0x19fd, 0x1a1d, 0x1a3d, 0x1a5d, 0x1a7d, + 0x1a9d, 0x1abd, 0x1add, 0x1afd, 0x1b1d, 0x1b3d, 0x1b5d, 0x1b7d, + 0x1b9d, 0x1bbd, 0x1bdd, 0x1bfd, 0x1c1d, 0x1c3d, 0x1c5d, 0x1c7d, + 0x1c9d, 0x1cbd, 0x1cdd, 0x1cfd, 0x1d1d, 0x1d3d, 0x1d5d, 0x1d7d, + 0x1d9d, 0x1dbd, 0x1ddd, 0x1dfd, 0x1e1d, 0x1e3d, 0x1e5d, 0x1e7d, + // Entry 3C40 - 3C7F + 0x1e9d, 0x1ebd, 0x1edd, 0x1efd, 0x1f1d, 0x1f3d, 0x1f5d, 0x1f7d, + 0x1f9d, 0x1fbd, 0x1fdd, 0x1ffd, 0x201d, 0x203d, 0x205d, 0x207d, + 0x209d, 0x20bd, 0x20dd, 0x20fd, 0x211d, 0x213d, 0x215d, 0x217d, + 0x219d, 0x21bd, 0x21dd, 0x21fd, 0x221d, 0x223d, 0x225d, 0x227d, + 0x229d, 0x22bd, 0x22dd, 0x22fd, 0x231d, 0x233d, 0x235d, 0x237d, + 0x239d, 0x23bd, 0x23dd, 0x23fd, 0x241d, 0x243d, 0x245d, 0x247d, + 0x249d, 0x24bd, 0x24dd, 0x24fd, 0x251d, 0x253d, 0x255d, 0x257d, + 0x259d, 0x25bd, 0x25dd, 0x25fd, 0x261d, 0x263d, 0x265d, 0x267d, + // Entry 3C80 - 3CBF + 0x269d, 0x26bd, 0x26dd, 0x26fd, 0x271d, 0x273d, 0x275d, 0x277d, + 0x279d, 0x27bd, 0x27dd, 0x27fd, 0x281d, 0x283d, 0x285d, 0x287d, + 0x289d, 0x28bd, 0x28dd, 0x28fd, 0x291d, 0x293d, 0x295d, 0x297d, + 0x299d, 0x29bd, 0x29dd, 0x29fd, 0x2a1d, 0x2a3d, 0x2a5d, 0x2a7d, + 0x2a9d, 0x2abd, 0x2add, 0x2afd, 0x2b1d, 0x2b3d, 0x2b5d, 0x2b7d, + 0x2b9d, 0x2bbd, 0x2bdd, 0x2bfd, 0x2c1d, 0x2c3d, 0x2c5d, 0x2c7d, + 0x2c9d, 0x2cbd, 0x2cdd, 0x2cfd, 0x2d1d, 0x2d3d, 0x2d5d, 0x2d7d, + 0x2d9d, 0x2dbd, 0x2ddd, 0x2dfd, 0x2e1d, 0x2e3d, 0x2e5d, 0x2e7d, + // Entry 3CC0 - 3CFF + 0x2e9d, 0x2ebd, 0x2edd, 0x2efd, 0x2f1d, 0x2f3d, 0x2f5d, 0x035d, + 0x037d, 0x039d, 0x03bd, 0x03dd, 0x03fd, 0x041d, 0x043d, 0x045d, + 0x047d, 0x049d, 0x04bd, 0x04dd, 0x04fd, 0x051d, 0x053d, 0x055d, + 0x057d, 0x059d, 0x05bd, 0x05dd, 0x05fd, 0x061d, 0x063d, 0x065d, + 0x067d, 0x069d, 0x06bd, 0x06dd, 0x06fd, 0x071d, 0x073d, 0x075d, + 0x077d, 0x079d, 0x07bd, 0x07dd, 0x07fd, 0x081d, 0x083d, 0x085d, + 0x087d, 0x089d, 0x08bd, 0x08dd, 0x08fd, 0x091d, 0x093d, 0x095d, + 0x097d, 0x099d, 0x09bd, 0x09dd, 0x09fd, 0x0a1d, 0x0a3d, 0x0a5d, + // Entry 3D00 - 3D3F + 0x0a7d, 0x0a9d, 0x0abd, 0x0add, 0x0afd, 0x0b1d, 0x0b3d, 0x0b5d, + 0x0b7d, 0x0b9d, 0x0bbd, 0x0bdd, 0x0bfd, 0x0c1d, 0x0c3d, 0x0c5d, + 0x0c7d, 0x0c9d, 0x0cbd, 0x0cdd, 0x0cfd, 0x0d1d, 0x0d3d, 0x0d5d, + 0x0d7d, 0x0d9d, 0x0dbd, 0x0ddd, 0x0dfd, 0x0e1d, 0x0e3d, 0x0e5d, + 0x0e7d, 0x0e9d, 0x0ebd, 0x0edd, 0x0efd, 0x0f1d, 0x0f3d, 0x0f5d, + 0x0f7d, 0x0f9d, 0x0fbd, 0x0fdd, 0x0ffd, 0x101d, 0x103d, 0x105d, + 0x107d, 0x109d, 0x009d, 0x00b4, 0x00cb, 0x00e2, 0x00fa, 0x0112, + 0x012f, 0x0146, 0x0146, 0x0165, 0x0184, 0x01a3, 0x01c2, 0x01e1, + // Entry 3D40 - 3D7F + 0x01e1, 0x01fd, 0x021e, 0x0243, 0x0261, 0x0278, 0x0290, 0x02a5, + 0x02bb, 0x02d3, 0x02ef, 0x0306, 0x031c, 0x033f, 0x035f, 0x037e, + 0x03a9, 0x03d3, 0x03f0, 0x040e, 0x042b, 0x0448, 0x0467, 0x0486, + 0x04a1, 0x04be, 0x04dd, 0x00dd, 0x00fa, 0x0117, 0x013a, 0x0157, + 0x0176, 0x0176, 0x0193, 0x0193, 0x01b0, 0x01d0, 0x01d0, 0x01f2, + 0x020e, 0x020e, 0x022d, 0x024a, 0x0268, 0x0286, 0x02a3, 0x02bf, + 0x02da, 0x02f5, 0x030f, 0x0329, 0x034f, 0x0372, 0x0392, 0x03af, + 0x03ce, 0x03ec, 0x040b, 0x0427, 0x0445, 0x0462, 0x0483, 0x04a1, + // Entry 3D80 - 3DBF + 0x04c1, 0x04e0, 0x0502, 0x0521, 0x0542, 0x0562, 0x0583, 0x05a1, + 0x05c1, 0x05e0, 0x0600, 0x061d, 0x063c, 0x065a, 0x0679, 0x0695, + 0x06b3, 0x06d0, 0x06f1, 0x070f, 0x072f, 0x074e, 0x076e, 0x078b, + 0x07aa, 0x07c8, 0x07e8, 0x0805, 0x0824, 0x0842, 0x0863, 0x0881, + 0x08a1, 0x08c0, 0x08e3, 0x0903, 0x0925, 0x0946, 0x0968, 0x0987, + 0x09a8, 0x09c6, 0x09e5, 0x0a01, 0x0a21, 0x0a3e, 0x0a5d, 0x0a79, + 0x0a99, 0x0ab6, 0x0ad7, 0x0af5, 0x0b15, 0x0b34, 0x0b53, 0x0b6f, + 0x0b8d, 0x0baa, 0x0bca, 0x0be7, 0x0c06, 0x0c24, 0x0c45, 0x0c63, + // Entry 3DC0 - 3DFF + 0x0c83, 0x0ca2, 0x0cc9, 0x0ced, 0x0d0e, 0x0d2c, 0x0d4c, 0x0d6b, + 0x0d99, 0x0dc4, 0x0de8, 0x0e09, 0x0e2c, 0x0e4e, 0x0e79, 0x0ea1, + 0x0ecb, 0x0ef4, 0x0f1a, 0x0f3d, 0x0f74, 0x0fa8, 0x0fbf, 0x0fd6, + 0x0ff2, 0x100e, 0x102c, 0x104a, 0x107b, 0x10ac, 0x10c9, 0x10e6, + 0x110d, 0x1134, 0x115b, 0x116d, 0x118a, 0x11a7, 0x01a7, 0x01c5, + 0x01e0, 0x01fd, 0x0219, 0x0236, 0x0250, 0x026e, 0x0289, 0x02a7, + 0x02c2, 0x02f0, 0x030e, 0x0329, 0x034f, 0x0372, 0x0398, 0x03bb, + 0x03d8, 0x03f2, 0x040e, 0x0429, 0x0466, 0x04a2, 0x04de, 0x0517, + // Entry 3E00 - 3E3F + 0x0551, 0x0588, 0x05c3, 0x05fb, 0x0634, 0x066a, 0x06a4, 0x06db, + 0x0715, 0x074c, 0x0785, 0x07bb, 0x07f3, 0x0846, 0x0896, 0x08e8, + 0x090d, 0x092f, 0x0953, 0x0976, 0x09b2, 0x09ed, 0x0a29, 0x0a6d, + 0x0aa8, 0x0ad3, 0x0afd, 0x0b28, 0x0b53, 0x0b86, 0x0bb0, 0x0bdb, + 0x0c05, 0x0c30, 0x0c5b, 0x0c8e, 0x0cb8, 0x0ce4, 0x0d10, 0x0d44, + 0x0d6f, 0x0d9a, 0x0dc6, 0x0df1, 0x0e1c, 0x0e48, 0x0e73, 0x0e9f, + 0x0ecb, 0x0ef6, 0x0f22, 0x0f4e, 0x0f78, 0x0fa3, 0x0fce, 0x0ff8, + 0x1023, 0x104e, 0x1078, 0x10a3, 0x10ce, 0x10f9, 0x1124, 0x1151, + // Entry 3E40 - 3E7F + 0x117e, 0x11a9, 0x11d3, 0x11fe, 0x1229, 0x125c, 0x1286, 0x12b0, + 0x12db, 0x130e, 0x1338, 0x1363, 0x138e, 0x13b8, 0x13e3, 0x140d, + 0x1438, 0x146b, 0x1495, 0x14c0, 0x14ea, 0x1515, 0x1540, 0x1573, + 0x159d, 0x15c9, 0x15f4, 0x1620, 0x164c, 0x1680, 0x16ab, 0x16d7, + 0x1702, 0x172e, 0x175a, 0x178e, 0x17b9, 0x17e4, 0x180f, 0x1842, + 0x186c, 0x1897, 0x18c1, 0x18ec, 0x1917, 0x194a, 0x1974, 0x19ac, + 0x19e3, 0x1a23, 0x1a55, 0x1a87, 0x1ab6, 0x1ae5, 0x1b14, 0x1b4e, + 0x1b86, 0x1bbf, 0x1bf8, 0x1c31, 0x1c72, 0x1caa, 0x1cd1, 0x1cf9, + // Entry 3E80 - 3EBF + 0x1d21, 0x1d49, 0x1d79, 0x1da0, 0x1dc7, 0x1def, 0x1e17, 0x1e3f, + 0x1e6f, 0x1e96, 0x1ebe, 0x1ee7, 0x1f10, 0x1f39, 0x1f6a, 0x1f92, + 0x1fc2, 0x1fe9, 0x2019, 0x2040, 0x2068, 0x208f, 0x20b7, 0x20e7, + 0x210e, 0x2136, 0x2166, 0x218d, 0x21b6, 0x21df, 0x2207, 0x2230, + 0x2259, 0x2282, 0x22b3, 0x22db, 0x2318, 0x233f, 0x2367, 0x238f, + 0x23b7, 0x23e7, 0x240e, 0x2449, 0x2483, 0x24be, 0x24f9, 0x2533, + 0x255d, 0x2586, 0x25b0, 0x25da, 0x2603, 0x262d, 0x2656, 0x2680, + 0x26aa, 0x26d3, 0x26fe, 0x2728, 0x2753, 0x277d, 0x27a7, 0x27d2, + // Entry 3EC0 - 3EFF + 0x27fd, 0x2828, 0x2852, 0x287d, 0x28a8, 0x28d1, 0x28fb, 0x2925, + 0x294f, 0x2978, 0x29a2, 0x29cc, 0x29f5, 0x2a1f, 0x2a49, 0x2a73, + 0x2a9f, 0x2acb, 0x2af5, 0x2b1e, 0x2b48, 0x2b72, 0x2b9b, 0x2bc5, + 0x2bef, 0x2c18, 0x2c42, 0x2c6b, 0x2c95, 0x2cbf, 0x2ce8, 0x2d12, + 0x2d3c, 0x2d65, 0x2d90, 0x2dba, 0x2de5, 0x2e10, 0x2e3b, 0x2e65, + 0x2e90, 0x2ebb, 0x2ee5, 0x2f0f, 0x2f39, 0x2f6f, 0x2f99, 0x2fc2, + 0x2fec, 0x3016, 0x303f, 0x3079, 0x30b2, 0x30db, 0x3103, 0x312c, + 0x3154, 0x317e, 0x31a7, 0x31d1, 0x31fa, 0x3225, 0x324f, 0x3277, + // Entry 3F00 - 3F3F + 0x32a0, 0x32c9, 0x32f3, 0x331c, 0x3345, 0x336d, 0x339a, 0x33c7, + 0x33f4, 0x3427, 0x3451, 0x3484, 0x34ae, 0x34e3, 0x350f, 0x3543, + 0x356e, 0x35a3, 0x35cf, 0x3602, 0x362c, 0x3660, 0x368b, 0x36bf, + 0x36ea, 0x371d, 0x3747, 0x377a, 0x37a4, 0x37d1, 0x37fd, 0x382a, + 0x3857, 0x3883, 0x38ae, 0x38d8, 0x3902, 0x3932, 0x3959, 0x3989, + 0x39b0, 0x39e2, 0x3a0b, 0x3a3c, 0x3a64, 0x3a96, 0x3abf, 0x3aef, + 0x3b16, 0x3b47, 0x3b6f, 0x3ba0, 0x3bc8, 0x3bf8, 0x3c1f, 0x3c4f, + 0x3c76, 0x3ca0, 0x3cc9, 0x3cf3, 0x3d1d, 0x3d46, 0x3d6e, 0x3d95, + // Entry 3F40 - 3F7F + 0x3dbc, 0x3de8, 0x3e13, 0x3e3f, 0x3e6b, 0x3e95, 0x3ec0, 0x3eea, + 0x3f14, 0x3f3d, 0x3f67, 0x3f92, 0x3fbc, 0x3fe7, 0x4010, 0x4039, + 0x4066, 0x4096, 0x40ad, 0x40c5, 0x00c5, 0x00f9, 0x012a, 0x015d, + 0x0190, 0x01c4, 0x01f8, 0x022b, 0x025f, 0x0291, 0x02c5, 0x02f6, + 0x0330, 0x0364, 0x0398, 0x03d3, 0x0405, 0x0439, 0x046e, 0x04a1, + 0x04d6, 0x0506, 0x0538, 0x056a, 0x059d, 0x05d2, 0x0605, 0x0639, + 0x066f, 0x06a3, 0x06d9, 0x0712, 0x0744, 0x0778, 0x07a9, 0x07dc, + 0x0810, 0x0841, 0x0873, 0x08a5, 0x08d9, 0x0913, 0x0947, 0x097a, + // Entry 3F80 - 3FBF + 0x09b6, 0x09e8, 0x0a1c, 0x0a4d, 0x0a7f, 0x0ab0, 0x0ae0, 0x0b19, + 0x0b4d, 0x0b7f, 0x0bb1, 0x0be5, 0x0c16, 0x0c49, 0x0c7d, 0x0cb1, + 0x0ce2, 0x0d16, 0x0d4b, 0x0d80, 0x0db5, 0x01b5, 0x01ea, 0x021e, + 0x0252, 0x0286, 0x02c0, 0x02f3, 0x0328, 0x0363, 0x0395, 0x03d0, + 0x0402, 0x0436, 0x0467, 0x0498, 0x04d2, 0x0503, 0x053d, 0x056e, + 0x05a8, 0x05da, 0x0614, 0x064f, 0x068a, 0x06ba, 0x06ec, 0x071c, + 0x074d, 0x077e, 0x07ae, 0x07df, 0x0810, 0x0842, 0x0873, 0x08a4, + 0x08d7, 0x090a, 0x093b, 0x096c, 0x09a0, 0x09d2, 0x0a06, 0x0a38, + // Entry 3FC0 - 3FFF + 0x0a6a, 0x0a9c, 0x0acd, 0x0afe, 0x0b30, 0x0b61, 0x0b91, 0x0bc5, + 0x0bf9, 0x0c2d, 0x0c5f, 0x0c91, 0x0091, 0x00ce, 0x010a, 0x012d, + 0x0150, 0x0176, 0x0199, 0x01bd, 0x01e1, 0x0207, 0x022a, 0x0255, + 0x0274, 0x027d, 0x02aa, 0x02aa, 0x02be, 0x02d2, 0x02e6, 0x02fa, + 0x030e, 0x0322, 0x0336, 0x034a, 0x035e, 0x0373, 0x0388, 0x039d, + 0x03b2, 0x03c7, 0x03dc, 0x03f1, 0x0415, 0x0445, 0x0479, 0x049d, + 0x04c5, 0x04f4, 0x0520, 0x055c, 0x0599, 0x05cb, 0x01cb, 0x01e7, + 0x0204, 0x0224, 0x0245, 0x025f, 0x027a, 0x0295, 0x02b7, 0x02da, + // Entry 4000 - 403F + 0x02f9, 0x0319, 0x0339, 0x035a, 0x037b, 0x039d, 0x03c0, 0x03ed, + 0x0413, 0x0439, 0x0460, 0x048c, 0x04bb, 0x04eb, 0x051c, 0x054e, + 0x0588, 0x05c3, 0x05ff, 0x063c, 0x0674, 0x06ad, 0x06de, 0x0710, + 0x0742, 0x0775, 0x07ad, 0x07e6, 0x07f0, 0x0800, 0x0832, 0x0865, + 0x0874, 0x0887, 0x0894, 0x08a8, 0x08b7, 0x08ca, 0x08d7, 0x08e2, + 0x08f9, 0x0908, 0x0108, 0x0117, 0x0122, 0x0135, 0x014b, 0x0158, + 0x016e, 0x0185, 0x019d, 0x01b6, 0x01d7, 0x01f9, 0x020a, 0x0219, + 0x0227, 0x0236, 0x0248, 0x025c, 0x0273, 0x0284, 0x0284, 0x0299, + // Entry 4040 - 407F + 0x02aa, 0x02bc, 0x02cf, 0x02cf, 0x02ec, 0x030e, 0x032b, 0x033f, + 0x035c, 0x035c, 0x0376, 0x038e, 0x03a8, 0x03c0, 0x03da, 0x03f2, + 0x040d, 0x0426, 0x0440, 0x0458, 0x0479, 0x04aa, 0x04d8, 0x0509, + 0x0537, 0x0567, 0x0594, 0x05c5, 0x05f3, 0x0623, 0x0650, 0x067f, + 0x06ad, 0x06cd, 0x06ea, 0x0709, 0x0725, 0x0743, 0x0760, 0x0787, + 0x07ab, 0x07ca, 0x07e6, 0x0804, 0x0821, 0x0841, 0x085e, 0x087d, + 0x089b, 0x08bb, 0x08d8, 0x08f7, 0x0915, 0x0934, 0x0950, 0x096e, + 0x098b, 0x09ab, 0x09c8, 0x09e7, 0x0a05, 0x0a24, 0x0a40, 0x0a60, + // Entry 4080 - 40BF + 0x0a7d, 0x0a9c, 0x0ab8, 0x0ad8, 0x0af5, 0x0b15, 0x0b32, 0x0b51, + 0x0b6f, 0x0b90, 0x0bae, 0x0bce, 0x0bed, 0x0c0c, 0x0c28, 0x0c46, + 0x0c63, 0x0c82, 0x0c9e, 0x0cbc, 0x0cd9, 0x0cf8, 0x0d14, 0x0d32, + 0x0d4f, 0x0d6e, 0x0d8a, 0x0da8, 0x0dc5, 0x0de4, 0x0e00, 0x0e1e, + 0x0e3b, 0x0e5c, 0x0e7a, 0x0e9a, 0x0eb9, 0x0ed8, 0x0ef4, 0x0f12, + 0x0f2f, 0x0f4e, 0x0f6a, 0x0f88, 0x0fa5, 0x0fc4, 0x0fe0, 0x0ffe, + 0x101b, 0x103a, 0x1056, 0x1074, 0x1091, 0x10b1, 0x10ce, 0x10ed, + 0x110b, 0x112b, 0x1148, 0x1167, 0x1185, 0x11a4, 0x11c0, 0x11de, + // Entry 40C0 - 40FF + 0x11fb, 0x121a, 0x1236, 0x125e, 0x1283, 0x12a2, 0x12be, 0x12dc, + 0x12f9, 0x1335, 0x136e, 0x13aa, 0x13e3, 0x141f, 0x1458, 0x1483, + 0x14ab, 0x00ab, 0x00c4, 0x00c4, 0x00de, 0x00f6, 0x010b, 0x0120, + 0x0136, 0x0149, 0x015d, 0x0177, 0x0192, 0x01a4, 0x01b7, 0x01c6, + 0x01dc, 0x01ef, 0x0200, 0x0214, 0x0227, 0x023a, 0x024f, 0x0263, + 0x0277, 0x028a, 0x029f, 0x02b4, 0x02c8, 0x02d7, 0x02ea, 0x0302, + 0x0317, 0x0332, 0x0349, 0x0360, 0x0380, 0x03a0, 0x03c0, 0x03e0, + 0x0400, 0x0420, 0x0440, 0x0460, 0x0480, 0x04a0, 0x04c0, 0x04e0, + // Entry 4100 - 413F + 0x0500, 0x0520, 0x0540, 0x0560, 0x0580, 0x05a0, 0x05c0, 0x05e0, + 0x0600, 0x0620, 0x0640, 0x0660, 0x0680, 0x06a0, 0x06bd, 0x06d6, + 0x06f4, 0x070f, 0x0721, 0x0737, 0x0755, 0x0773, 0x0791, 0x07af, + 0x07cd, 0x07eb, 0x0809, 0x0827, 0x0845, 0x0863, 0x0881, 0x089f, + 0x08bd, 0x08db, 0x08f9, 0x0917, 0x0935, 0x0953, 0x0971, 0x098f, + 0x09ad, 0x09cb, 0x09e9, 0x0a07, 0x0a25, 0x0a43, 0x0a5f, 0x0a76, + 0x0a93, 0x0aa2, 0x0ac2, 0x0ae3, 0x0b02, 0x0b1f, 0x0b3d, 0x0b58, + 0x0b75, 0x0b91, 0x0bb2, 0x0bd3, 0x0bf4, 0x0c15, 0x0c36, 0x0c58, + // Entry 4140 - 417F + 0x0c7a, 0x0c9c, 0x0cbe, 0x0cee, 0x0d09, 0x0d24, 0x0d3f, 0x0d5a, + 0x0d75, 0x0d91, 0x0dad, 0x0dc9, 0x0de5, 0x0e01, 0x0e1d, 0x0e39, + 0x0e55, 0x0e71, 0x0e8d, 0x0ea9, 0x0ec5, 0x0ee1, 0x0efd, 0x0f19, + 0x0f35, 0x0f51, 0x0f6d, 0x0f89, 0x0fa5, 0x0fc1, 0x0fdd, 0x0ff9, + 0x1015, 0x1031, 0x104d, 0x1069, 0x1085, 0x10a1, 0x10bd, 0x10d9, + 0x10f5, 0x1111, 0x112d, 0x1149, 0x1165, 0x1181, 0x119d, 0x11b9, + 0x11d4, 0x11f8, 0x1221, 0x1238, 0x1256, 0x1279, 0x129c, 0x12b9, + 0x12dc, 0x12ff, 0x131d, 0x1340, 0x135d, 0x1381, 0x13a4, 0x13c7, + // Entry 4180 - 41BF + 0x13e9, 0x140e, 0x1433, 0x1456, 0x1473, 0x1490, 0x14b2, 0x14d4, + 0x14f0, 0x1511, 0x152e, 0x154b, 0x156d, 0x158c, 0x15ab, 0x15ca, + 0x15e9, 0x1606, 0x0206, 0x021f, 0x0239, 0x0253, 0x026e, 0x0288, + 0x02a1, 0x02a1, 0x02bc, 0x02d6, 0x02ef, 0x0309, 0x0324, 0x033e, + 0x033e, 0x0358, 0x0371, 0x038c, 0x03a6, 0x03c0, 0x03da, 0x03da, + 0x03f4, 0x040e, 0x0427, 0x0027, 0x003a, 0x004e, 0x0060, 0x0070, + 0x0084, 0x0096, 0x00a8, 0x00a8, 0x00c6, 0x00df, 0x00f6, 0x0110, + 0x0129, 0x013f, 0x0155, 0x0155, 0x0172, 0x0192, 0x01b3, 0x01cf, + // Entry 41C0 - 41FF + 0x01e4, 0x01e4, 0x01fc, 0x0214, 0x022c, 0x0244, 0x025c, 0x0275, + 0x028e, 0x02a7, 0x02c0, 0x02d9, 0x02f2, 0x030b, 0x030b, 0x0324, + 0x033d, 0x0356, 0x036f, 0x0388, 0x03a1, 0x03ba, 0x03d3, 0x03ec, + 0x0405, 0x041e, 0x0437, 0x0450, 0x0469, 0x0482, 0x049b, 0x04b4, + 0x04cd, 0x04e6, 0x04ff, 0x0518, 0x0531, 0x054a, 0x0563, 0x057c, + 0x0595, 0x0195, 0x01ae, 0x01c7, 0x01e0, 0x01f9, 0x0212, 0x022b, + 0x0244, 0x025d, 0x0276, 0x028f, 0x02a8, 0x02c1, 0x02da, 0x02f3, + 0x030c, 0x0325, 0x033e, 0x0357, 0x0370, 0x0370, 0x0389, 0x03a2, + // Entry 4200 - 423F + 0x03a2, 0x03bb, 0x03d4, 0x03ed, 0x0406, 0x0420, 0x043a, 0x0454, + 0x046e, 0x0488, 0x04a2, 0x04bc, 0x04d6, 0x04f0, 0x050a, 0x0524, + 0x0124, 0x0138, 0x014c, 0x0160, 0x0174, 0x0188, 0x019c, 0x01b0, + 0x01c4, 0x01d8, 0x01ec, 0x0200, 0x0214, 0x0228, 0x023c, 0x023c, + 0x0256, 0x0272, 0x028d, 0x02a9, 0x02c5, 0x02e5, 0x0300, 0x031b, + 0x033b, 0x035a, 0x0375, 0x0391, 0x03ac, 0x03c8, 0x03e4, 0x0401, + 0x041d, 0x0439, 0x0457, 0x0472, 0x048f, 0x04a9, 0x04c4, 0x04da, + 0x04f6, 0x0511, 0x052e, 0x0549, 0x055f, 0x057a, 0x0590, 0x05a6, + // Entry 4240 - 427F + 0x05c1, 0x05d7, 0x05ed, 0x0603, 0x061f, 0x0635, 0x064b, 0x0667, + 0x067d, 0x0693, 0x06b1, 0x06ce, 0x06e4, 0x06fa, 0x0710, 0x0726, + 0x073c, 0x0752, 0x0768, 0x077e, 0x0794, 0x07b0, 0x07c6, 0x07e1, + 0x07f7, 0x080d, 0x0823, 0x0839, 0x084f, 0x0865, 0x087b, 0x0891, + 0x08a7, 0x08bd, 0x08d3, 0x08f0, 0x0910, 0x092e, 0x094a, 0x0966, + 0x097c, 0x0998, 0x09ae, 0x09c4, 0x09ea, 0x0a08, 0x0a2c, 0x0a48, + 0x0a5e, 0x0a74, 0x0a90, 0x0aa6, 0x0abc, 0x0ad2, 0x0ae8, 0x0afe, + 0x0b19, 0x0b2f, 0x0b45, 0x0b5b, 0x0b71, 0x0b87, 0x0ba4, 0x0bc1, + // Entry 4280 - 42BF + 0x0bde, 0x0bfb, 0x0c18, 0x0c35, 0x0c52, 0x0c6f, 0x0c8c, 0x0ca9, + 0x0cc6, 0x0ce3, 0x0d00, 0x0d1d, 0x0d3a, 0x0d57, 0x0d74, 0x0d91, + 0x0dae, 0x0dcb, 0x0de8, 0x0e05, 0x0e22, 0x0e3f, 0x0e5c, 0x0e79, + 0x0e96, 0x0eb3, 0x0ed0, 0x02d0, 0x02ea, 0x0303, 0x0314, 0x0314, + 0x0325, 0x0336, 0x0349, 0x035b, 0x036d, 0x037e, 0x0391, 0x03a4, + 0x03b6, 0x03c7, 0x03db, 0x03ef, 0x0402, 0x0415, 0x0428, 0x043d, + 0x0451, 0x0465, 0x047e, 0x0497, 0x04b2, 0x04cc, 0x04e6, 0x04ff, + 0x051a, 0x0535, 0x054f, 0x0569, 0x0583, 0x059f, 0x05ba, 0x05d5, + // Entry 42C0 - 42FF + 0x05ef, 0x060b, 0x0627, 0x0642, 0x065c, 0x0679, 0x0696, 0x06b2, + 0x06ce, 0x06ea, 0x0708, 0x0725, 0x0742, 0x0342, 0x0359, 0x0374, + 0x0390, 0x03ab, 0x03c7, 0x03e7, 0x040a, 0x0427, 0x0443, 0x0465, + 0x0484, 0x04a6, 0x04c1, 0x04dd, 0x0500, 0x0524, 0x0549, 0x056c, + 0x058e, 0x05b2, 0x05dc, 0x0607, 0x0632, 0x065e, 0x0681, 0x06a3, + 0x06c7, 0x06f1, 0x071c, 0x0747, 0x0772, 0x079f, 0x07be, 0x07e3, + 0x0800, 0x081f, 0x083e, 0x085b, 0x0881, 0x08a9, 0x08c9, 0x08e8, + 0x0916, 0x0935, 0x0953, 0x0970, 0x0990, 0x09b1, 0x09e1, 0x0a02, + // Entry 4300 - 433F + 0x0a21, 0x0a46, 0x0a6d, 0x0a95, 0x0abd, 0x0ae3, 0x0b0a, 0x0b2e, + 0x0b54, 0x0b7b, 0x0b9d, 0x0bc1, 0x0bd4, 0x0bf6, 0x0c0b, 0x0c24, + 0x0c33, 0x0c44, 0x0c56, 0x0c65, 0x0c79, 0x0c8f, 0x0ca4, 0x0cb9, + 0x0ccc, 0x0ce3, 0x0cf3, 0x0d04, 0x0d15, 0x0d26, 0x0d37, 0x0d48, + 0x0d60, 0x0d6f, 0x0d85, 0x0d98, 0x0dac, 0x0db8, 0x01b8, 0x01ca, + 0x01da, 0x01ed, 0x01ff, 0x0219, 0x022b, 0x023e, 0x0252, 0x0267, + 0x027b, 0x0288, 0x029c, 0x029c, 0x02b0, 0x02b0, 0x02cd, 0x02eb, + 0x030b, 0x0325, 0x033d, 0x0355, 0x036e, 0x0389, 0x03a1, 0x03b9, + // Entry 4340 - 437F + 0x03cf, 0x03e8, 0x03ff, 0x041a, 0x0434, 0x044a, 0x0460, 0x047c, + 0x049e, 0x04b7, 0x04ce, 0x04e6, 0x04ff, 0x0519, 0x0530, 0x0547, + 0x055e, 0x057a, 0x0590, 0x05a6, 0x05be, 0x05d5, 0x05ed, 0x0603, + 0x0620, 0x0637, 0x0651, 0x066b, 0x0682, 0x069c, 0x06b4, 0x06cd, + 0x06e8, 0x0704, 0x0720, 0x074b, 0x034b, 0x035a, 0x0369, 0x0378, + 0x0388, 0x0397, 0x03a6, 0x03b5, 0x03c4, 0x03d3, 0x03e3, 0x03f2, + 0x0401, 0x0410, 0x041f, 0x042e, 0x043d, 0x044d, 0x045d, 0x046c, + 0x047b, 0x048b, 0x049a, 0x04a9, 0x04b8, 0x04c8, 0x04d8, 0x04e8, + // Entry 4380 - 43BF + 0x04f7, 0x0506, 0x0106, 0x0115, 0x0125, 0x0134, 0x0143, 0x0154, + 0x0163, 0x0173, 0x0183, 0x0192, 0x01a1, 0x01b0, 0x01bf, 0x01cf, + 0x01de, 0x01ee, 0x01ff, 0x020e, 0x0220, 0x022f, 0x023f, 0x024e, + 0x025d, 0x026e, 0x027d, 0x028d, 0x029c, 0x02ab, 0x02bd, 0x02cc, + 0x02dc, 0x02ec, 0x02fc, 0x030b, 0x031b, 0x032b, 0x033c, 0x034c, + 0x035c, 0x036e, 0x037e, 0x0390, 0x03a0, 0x03b0, 0x03c1, 0x03d2, + 0x03e3, 0x03f4, 0x0404, 0x0416, 0x0016, 0x0031, 0x0047, 0x005d, + 0x0075, 0x008c, 0x00a3, 0x00b9, 0x00d1, 0x00e9, 0x0100, 0x0117, + // Entry 43C0 - 43FF + 0x0131, 0x014b, 0x0164, 0x017d, 0x0196, 0x01b1, 0x01cb, 0x01e5, + 0x0204, 0x0223, 0x0244, 0x0264, 0x0284, 0x02a3, 0x02c4, 0x02e5, + 0x0305, 0x0305, 0x0318, 0x032c, 0x0340, 0x0354, 0x0367, 0x037b, + 0x038f, 0x03a3, 0x03b8, 0x03cb, 0x03df, 0x03f3, 0x0407, 0x041b, + 0x0430, 0x0443, 0x0457, 0x046c, 0x0480, 0x0494, 0x04a8, 0x04bc, + 0x04cf, 0x04e4, 0x04f9, 0x050e, 0x0522, 0x0537, 0x054c, 0x0560, + 0x0574, 0x0589, 0x059f, 0x05b6, 0x05cc, 0x05e4, 0x01e4, 0x01f6, + 0x020b, 0x021d, 0x022f, 0x0243, 0x0259, 0x026b, 0x027d, 0x0291, + // Entry 4400 - 443F + 0x02a2, 0x02b5, 0x02c8, 0x02db, 0x02ef, 0x0300, 0x0312, 0x0328, + 0x033c, 0x034f, 0x0362, 0x0375, 0x0388, 0x039b, 0x03ae, 0x03c1, + 0x03d4, 0x03ee, 0x03ee, 0x0402, 0x0417, 0x042c, 0x0441, 0x0454, + 0x046a, 0x0481, 0x0497, 0x04ae, 0x04c1, 0x04d7, 0x04ec, 0x0503, + 0x051a, 0x0530, 0x0546, 0x055b, 0x0570, 0x0585, 0x0598, 0x05af, + 0x05c6, 0x05df, 0x05f4, 0x060a, 0x061d, 0x0631, 0x0645, 0x0659, + 0x066f, 0x0684, 0x0699, 0x06af, 0x06c4, 0x06d8, 0x06ec, 0x0700, + 0x0714, 0x0732, 0x0751, 0x0771, 0x0792, 0x07b1, 0x03b1, 0x03c5, + // Entry 4440 - 447F + 0x03d9, 0x03ee, 0x0401, 0x0416, 0x0428, 0x043a, 0x044e, 0x0462, + 0x0475, 0x0488, 0x049b, 0x04af, 0x04c4, 0x04d7, 0x04eb, 0x04fe, + 0x0510, 0x0525, 0x0538, 0x054a, 0x055e, 0x0572, 0x0587, 0x059d, + 0x05b2, 0x05c4, 0x05d5, 0x05e6, 0x05f9, 0x01f9, 0x020e, 0x0220, + 0x0232, 0x0244, 0x0257, 0x026a, 0x027d, 0x0290, 0x02a3, 0x02b6, + 0x02c9, 0x02dc, 0x02ef, 0x0302, 0x0315, 0x0328, 0x033b, 0x034f, + 0x0362, 0x0375, 0x0388, 0x039b, 0x03ae, 0x03c1, 0x03d4, 0x03e7, + 0x03fa, 0x040d, 0x0420, 0x0433, 0x0446, 0x0459, 0x046c, 0x047f, + // Entry 4480 - 44BF + 0x0493, 0x04a7, 0x04ba, 0x00ba, 0x00d5, 0x00f2, 0x010f, 0x012c, + 0x0146, 0x0162, 0x0177, 0x018f, 0x01a7, 0x01bd, 0x01d3, 0x01e9, + 0x0202, 0x021c, 0x021c, 0x0239, 0x0256, 0x0273, 0x0291, 0x02ae, + 0x02cc, 0x02ea, 0x0308, 0x0326, 0x0345, 0x0363, 0x0382, 0x039b, + 0x03b4, 0x03cd, 0x03e7, 0x03ff, 0x0419, 0x0433, 0x044d, 0x0467, + 0x0482, 0x049c, 0x04b6, 0x04d0, 0x04e9, 0x0503, 0x051d, 0x0538, + 0x0551, 0x056b, 0x0585, 0x05a0, 0x05b9, 0x05d2, 0x05eb, 0x0604, + 0x061e, 0x0637, 0x0650, 0x066b, 0x0686, 0x06a1, 0x06bd, 0x06d8, + // Entry 44C0 - 44FF + 0x06f4, 0x0710, 0x072c, 0x0748, 0x0765, 0x0781, 0x079e, 0x07b5, + 0x07cc, 0x07e3, 0x07fb, 0x0811, 0x0829, 0x0841, 0x0859, 0x0871, + 0x088a, 0x08a2, 0x08ba, 0x08d2, 0x08e9, 0x0901, 0x0919, 0x0932, + 0x0949, 0x0961, 0x0979, 0x0992, 0x09a9, 0x09c0, 0x09d7, 0x09ee, + 0x0a06, 0x0a1d, 0x0a34, 0x0a47, 0x0a59, 0x0a6c, 0x0a7e, 0x0a92, + 0x0aa3, 0x0ab6, 0x0acb, 0x0add, 0x0af0, 0x0b02, 0x0b15, 0x0b27, + 0x0b39, 0x0b4c, 0x0b5e, 0x0b74, 0x0b88, 0x0b9a, 0x0bae, 0x0bc1, + 0x0bd4, 0x0be5, 0x0bf7, 0x0c09, 0x0c1b, 0x0c2c, 0x0c3f, 0x0c51, + // Entry 4500 - 453F + 0x0c62, 0x0c75, 0x0c87, 0x0c99, 0x0cab, 0x0cbd, 0x0cce, 0x0ce0, + 0x0cf3, 0x0d05, 0x0d17, 0x0d29, 0x0d3a, 0x0d4c, 0x0d5e, 0x0d72, + 0x0d84, 0x0d96, 0x0da8, 0x0dbb, 0x0dcc, 0x0ddd, 0x0dee, 0x0dff, + 0x0e11, 0x0e24, 0x0e35, 0x0e46, 0x0e5a, 0x0e6c, 0x0e7f, 0x0e90, + 0x0ea1, 0x0eb4, 0x0ec7, 0x0eda, 0x0eed, 0x0f00, 0x0f12, 0x0f23, + 0x0f34, 0x0f44, 0x0f54, 0x0f64, 0x0f74, 0x0f84, 0x0f95, 0x0fa6, + 0x0fb7, 0x03b7, 0x03c9, 0x03da, 0x03eb, 0x03fe, 0x0410, 0x0422, + 0x0433, 0x0446, 0x0459, 0x046b, 0x006b, 0x0081, 0x0098, 0x00b0, + // Entry 4540 - 457F + 0x00c7, 0x00df, 0x00f7, 0x0111, 0x0127, 0x013f, 0x0156, 0x016e, + 0x0184, 0x019b, 0x01b4, 0x01cc, 0x01e3, 0x01fa, 0x0211, 0x0227, + 0x023f, 0x0256, 0x026f, 0x0286, 0x029e, 0x02b5, 0x02ce, 0x02e6, + 0x0300, 0x0319, 0x0331, 0x0347, 0x035e, 0x0376, 0x038e, 0x03a5, + 0x03bd, 0x03bd, 0x03d1, 0x03e6, 0x03fc, 0x0411, 0x0427, 0x043d, + 0x0455, 0x0469, 0x047f, 0x0494, 0x04aa, 0x04be, 0x04d3, 0x04ea, + 0x0500, 0x0515, 0x052a, 0x053f, 0x0553, 0x0569, 0x057e, 0x0595, + 0x05aa, 0x05c0, 0x05d5, 0x05ec, 0x0602, 0x061a, 0x0631, 0x0647, + // Entry 4580 - 45BF + 0x065b, 0x0670, 0x0686, 0x069c, 0x06b1, 0x06c7, 0x02c7, 0x02d7, + 0x02e8, 0x02f9, 0x030b, 0x031c, 0x032e, 0x0340, 0x0351, 0x0361, + 0x0372, 0x0383, 0x0395, 0x03a6, 0x03b6, 0x03c7, 0x03d8, 0x03e9, + 0x03fb, 0x040c, 0x041d, 0x042e, 0x0440, 0x0450, 0x0461, 0x0472, + 0x0483, 0x0495, 0x04a6, 0x04b8, 0x04c9, 0x04db, 0x04eb, 0x04fc, + 0x050d, 0x051d, 0x052e, 0x0540, 0x0552, 0x0567, 0x0579, 0x0179, + 0x0196, 0x01b3, 0x01d0, 0x01ed, 0x0209, 0x0227, 0x0244, 0x0262, + 0x027f, 0x029c, 0x02ba, 0x02d7, 0x02f4, 0x0311, 0x032e, 0x034c, + // Entry 45C0 - 45FF + 0x036a, 0x0388, 0x03a5, 0x03c3, 0x03e0, 0x03fe, 0x041c, 0x0439, + 0x0456, 0x0474, 0x0491, 0x04af, 0x04cc, 0x04e9, 0x0507, 0x0526, + 0x0544, 0x0562, 0x057e, 0x059c, 0x05b9, 0x05d7, 0x05f5, 0x0612, + 0x0631, 0x064e, 0x066c, 0x068a, 0x06a8, 0x06c6, 0x06e3, 0x0701, + 0x071f, 0x073d, 0x075b, 0x0778, 0x0378, 0x0398, 0x0398, 0x03ab, + 0x03be, 0x03d1, 0x03e4, 0x03f7, 0x040a, 0x041d, 0x0430, 0x0443, + 0x0456, 0x0469, 0x047c, 0x048f, 0x04a2, 0x04b5, 0x04c8, 0x04dc, + 0x04f0, 0x0503, 0x0517, 0x052b, 0x053e, 0x0552, 0x0565, 0x0578, + // Entry 4600 - 463F + 0x058b, 0x059e, 0x05b1, 0x05c4, 0x05d7, 0x05ea, 0x05fd, 0x0610, + 0x0623, 0x0636, 0x0649, 0x065c, 0x066f, 0x0682, 0x0695, 0x06a8, + 0x06bb, 0x06ce, 0x06e1, 0x06f4, 0x0707, 0x071a, 0x072d, 0x0740, + 0x0753, 0x0766, 0x0779, 0x078c, 0x079f, 0x07b2, 0x07c5, 0x07d8, + 0x07eb, 0x07fe, 0x0811, 0x0824, 0x0837, 0x084a, 0x085d, 0x0870, + 0x0883, 0x0896, 0x08a9, 0x08bc, 0x08cf, 0x08e2, 0x08f8, 0x090b, + 0x091e, 0x0931, 0x0944, 0x0957, 0x096b, 0x097f, 0x0992, 0x09a5, + 0x09b8, 0x09cb, 0x09de, 0x09f1, 0x0a03, 0x0a15, 0x0a27, 0x0a39, + // Entry 4640 - 467F + 0x0a4b, 0x0a5d, 0x0a6f, 0x0a81, 0x0a94, 0x0aa7, 0x0aba, 0x0acc, + 0x0ade, 0x0af0, 0x0b03, 0x0b16, 0x0b29, 0x0b3b, 0x0b4d, 0x0b5f, + 0x0b71, 0x0b83, 0x0b95, 0x0ba7, 0x0bb9, 0x0bcb, 0x0bdd, 0x0bef, + 0x0c01, 0x0c13, 0x0c25, 0x0c37, 0x0c49, 0x0c5b, 0x0c6d, 0x0c7f, + 0x0c91, 0x0ca3, 0x0cb5, 0x0cc7, 0x0cd9, 0x0ceb, 0x0cfd, 0x0d0f, + 0x0d21, 0x0d33, 0x0d45, 0x0d57, 0x0d69, 0x0d7b, 0x0d8d, 0x0d9f, + 0x0db1, 0x0dc3, 0x0dd5, 0x0de7, 0x0df9, 0x0e0b, 0x0e1d, 0x0e2f, + 0x0e41, 0x0e53, 0x0e65, 0x0e77, 0x0e89, 0x0e9b, 0x0ead, 0x0ebf, + // Entry 4680 - 46BF + 0x0ed1, 0x0ee3, 0x0ef5, 0x0f07, 0x0f19, 0x0f2b, 0x0f3d, 0x0f53, + 0x0f69, 0x0f7f, 0x0f95, 0x0fab, 0x0fc1, 0x0fd7, 0x0fed, 0x1003, + 0x1019, 0x102f, 0x1045, 0x105b, 0x1071, 0x1087, 0x109d, 0x10b3, + 0x10c9, 0x10df, 0x10f1, 0x1103, 0x1115, 0x1127, 0x1139, 0x114b, + 0x115d, 0x116f, 0x1181, 0x1193, 0x11a5, 0x11b7, 0x11c9, 0x11db, + 0x11ed, 0x11ff, 0x1211, 0x1223, 0x1235, 0x1247, 0x1259, 0x126b, + 0x127d, 0x128f, 0x12a1, 0x12b3, 0x12c5, 0x12d7, 0x12e9, 0x12fb, + 0x130d, 0x131f, 0x1331, 0x1343, 0x1355, 0x1367, 0x1379, 0x138b, + // Entry 46C0 - 46FF + 0x139d, 0x13af, 0x13c1, 0x13d3, 0x13e5, 0x13f7, 0x1409, 0x141b, + 0x142d, 0x143f, 0x1451, 0x1463, 0x1475, 0x1487, 0x1499, 0x14ab, + 0x14bd, 0x14cf, 0x14e1, 0x14f3, 0x1505, 0x1517, 0x1529, 0x153b, + 0x154d, 0x155f, 0x1571, 0x1583, 0x1595, 0x15a7, 0x15b9, 0x15cb, + 0x15dd, 0x15ef, 0x1601, 0x1613, 0x1625, 0x1637, 0x1649, 0x165b, + 0x166d, 0x167f, 0x1691, 0x16a3, 0x16b5, 0x16c7, 0x16d9, 0x16eb, + 0x16fd, 0x170f, 0x1721, 0x1733, 0x1745, 0x1757, 0x1769, 0x177b, + 0x178d, 0x179f, 0x17b1, 0x17c3, 0x17d5, 0x17e7, 0x17f9, 0x180b, + // Entry 4700 - 473F + 0x181d, 0x182f, 0x1841, 0x1853, 0x1865, 0x1877, 0x1889, 0x189b, + 0x18ad, 0x18bf, 0x18d1, 0x18e3, 0x18f5, 0x1907, 0x1919, 0x192b, + 0x193d, 0x194f, 0x1961, 0x1973, 0x1985, 0x1997, 0x19a9, 0x19bb, + 0x19cd, 0x19df, 0x19f1, 0x1a03, 0x1a15, 0x1a27, 0x0227, 0x023b, + 0x024f, 0x0263, 0x0277, 0x028b, 0x029f, 0x02b3, 0x02c7, 0x02db, + 0x02f2, 0x0309, 0x0320, 0x0337, 0x034b, 0x035f, 0x0373, 0x038b, + 0x03a1, 0x03b6, 0x03cb, 0x03e2, 0x03f7, 0x03f7, 0x0409, 0x041b, + 0x042d, 0x043f, 0x0451, 0x0463, 0x0475, 0x0487, 0x0087, 0x0099, + // Entry 4740 - 477F + 0x00ab, 0x00bd, 0x00cf, 0x00e1, 0x00f4, 0x00f4, 0x0107, 0x0107, + 0x011a, 0x012d, 0x0140, 0x0153, 0x0166, 0x0179, 0x018c, 0x019f, + 0x01b2, 0x01c5, 0x01d8, 0x01eb, 0x01fe, 0x0211, 0x0224, 0x0237, + 0x024a, 0x025d, 0x0270, 0x0283, 0x0296, 0x02a9, 0x02bc, 0x02cf, + 0x02e2, 0x02f5, 0x0308, 0x031b, 0x032e, 0x0341, 0x0354, 0x0367, + 0x037a, 0x038d, 0x03a0, 0x03b3, 0x03c6, 0x03d9, 0x03ec, 0x03ff, + 0x0412, 0x0425, 0x0438, 0x044b, 0x004b, 0x005e, 0x0071, 0x0071, + 0x0084, 0x0084, 0x0097, 0x00b4, 0x00d0, 0x00ed, 0x010b, 0x0125, + // Entry 4780 - 47BF + 0x0140, 0x015d, 0x0179, 0x0195, 0x01b1, 0x01cd, 0x01eb, 0x0206, + 0x0221, 0x023f, 0x025b, 0x0275, 0x0292, 0x02ae, 0x02ca, 0x02e6, + 0x0301, 0x0301, 0x031e, 0x0339, 0x0354, 0x0371, 0x038c, 0x03aa, + 0x03cd, 0x03f1, 0x0415, 0x042b, 0x0440, 0x0456, 0x046d, 0x0480, + 0x0494, 0x04aa, 0x04bf, 0x04d4, 0x04e9, 0x04fe, 0x0515, 0x0529, + 0x0543, 0x0557, 0x056e, 0x0583, 0x0596, 0x05ac, 0x05c1, 0x05d6, + 0x05eb, 0x05ff, 0x061e, 0x063e, 0x0652, 0x0666, 0x067c, 0x0691, + 0x06a6, 0x06ba, 0x06d1, 0x06ed, 0x0703, 0x071e, 0x0733, 0x0749, + // Entry 47C0 - 47FF + 0x0760, 0x0779, 0x078c, 0x07a0, 0x07b6, 0x07cb, 0x07e0, 0x07fb, + 0x0810, 0x082b, 0x0840, 0x085d, 0x0874, 0x088e, 0x08a2, 0x08bc, + 0x08d0, 0x08e7, 0x08fc, 0x090f, 0x0925, 0x093a, 0x094f, 0x096a, + 0x097f, 0x0993, 0x0193, 0x01a7, 0x01bb, 0x01d1, 0x01e6, 0x0205, + 0x021a, 0x022e, 0x0245, 0x0261, 0x0261, 0x0274, 0x0286, 0x0299, + 0x02b2, 0x02c2, 0x02d3, 0x02e5, 0x02f7, 0x0309, 0x031b, 0x032d, + 0x0341, 0x0352, 0x0363, 0x0377, 0x0388, 0x0398, 0x03ab, 0x03bd, + 0x03bd, 0x03cf, 0x03e0, 0x03e0, 0x03f1, 0x0403, 0x0414, 0x0428, + // Entry 4800 - 483F + 0x0441, 0x0456, 0x046b, 0x0481, 0x0497, 0x04ab, 0x04c0, 0x04d5, + 0x04ea, 0x04ff, 0x0514, 0x0529, 0x053f, 0x0554, 0x0569, 0x057f, + 0x0594, 0x05a8, 0x05be, 0x05d3, 0x05e9, 0x05ff, 0x0614, 0x0629, + 0x063e, 0x0656, 0x0673, 0x0688, 0x069f, 0x029f, 0x02b8, 0x02c7, + 0x02d6, 0x02e5, 0x02f4, 0x0303, 0x0312, 0x0321, 0x0330, 0x033f, + 0x034e, 0x035d, 0x036c, 0x037b, 0x038a, 0x039a, 0x03a9, 0x03b8, + 0x03c7, 0x03d6, 0x03e5, 0x03f5, 0x0405, 0x0415, 0x0425, 0x0435, + 0x0444, 0x0044, 0x005a, 0x005a, 0x0078, 0x0096, 0x00b4, 0x00d2, + // Entry 4840 - 487F + 0x00f1, 0x0110, 0x012f, 0x0150, 0x016f, 0x018e, 0x01ad, 0x01ce, + 0x01ed, 0x020e, 0x022d, 0x024e, 0x026d, 0x028d, 0x02ad, 0x02cc, + 0x02ed, 0x030c, 0x032b, 0x034a, 0x0369, 0x038a, 0x03a9, 0x03ca, + 0x03e9, 0x0408, 0x0429, 0x044c, 0x0465, 0x047e, 0x0497, 0x04b0, + 0x04ca, 0x04e4, 0x04fe, 0x0518, 0x0532, 0x054c, 0x0566, 0x0580, + 0x059a, 0x05b5, 0x05d0, 0x05ea, 0x060c, 0x0626, 0x0640, 0x065a, + 0x0674, 0x068e, 0x06a8, 0x06c2, 0x02c2, 0x02eb, 0x030d, 0x032a, + 0x0347, 0x0362, 0x037d, 0x039a, 0x03b6, 0x03d2, 0x03ed, 0x040a, + // Entry 4880 - 48BF + 0x0427, 0x0443, 0x045e, 0x047c, 0x049a, 0x04b7, 0x04d4, 0x04f1, + 0x0510, 0x0110, 0x0133, 0x0156, 0x017b, 0x019f, 0x01c3, 0x01e6, + 0x020b, 0x0230, 0x0254, 0x0278, 0x029c, 0x02c2, 0x02e7, 0x030c, + 0x0330, 0x0356, 0x037c, 0x03a1, 0x03c5, 0x03ec, 0x0413, 0x0439, + 0x045f, 0x0485, 0x04ad, 0x04d4, 0x04fb, 0x0527, 0x0553, 0x0581, + 0x05ae, 0x05db, 0x0607, 0x0635, 0x0663, 0x0690, 0x06b5, 0x06db, + 0x0703, 0x072a, 0x0751, 0x0777, 0x079f, 0x07c7, 0x07ee, 0x0814, + 0x0827, 0x083e, 0x0855, 0x0874, 0x0074, 0x008b, 0x00a2, 0x00a2, + // Entry 48C0 - 48FF + 0x00be, 0x00df, 0x00f7, 0x010e, 0x0122, 0x0137, 0x014b, 0x0160, + 0x0160, 0x0174, 0x0189, 0x019d, 0x019d, 0x01b2, 0x01c7, 0x01dd, + 0x01f2, 0x0208, 0x021d, 0x0231, 0x0246, 0x025a, 0x026f, 0x0283, + 0x0297, 0x02ac, 0x02c0, 0x02d5, 0x02e9, 0x02fd, 0x0311, 0x0325, + 0x0339, 0x034e, 0x0363, 0x0377, 0x038b, 0x039f, 0x03b4, 0x03cb, + 0x03cb, 0x03e4, 0x03f9, 0x0412, 0x0012, 0x0023, 0x0037, 0x004b, + 0x0061, 0x0076, 0x008b, 0x00a3, 0x00c0, 0x00de, 0x00de, 0x00f8, + 0x011b, 0x0138, 0x015b, 0x017a, 0x0196, 0x01b2, 0x01d5, 0x01f1, + // Entry 4900 - 493F + 0x01f1, 0x020c, 0x022b, 0x0248, 0x0264, 0x0281, 0x029d, 0x02ba, + 0x02d7, 0x02f4, 0x0310, 0x032c, 0x0349, 0x0365, 0x0383, 0x03a1, + 0x03c0, 0x03db, 0x03f8, 0x0414, 0x0433, 0x0451, 0x0470, 0x048e, + 0x04ab, 0x04c8, 0x04e8, 0x0505, 0x0522, 0x0540, 0x055c, 0x057a, + 0x059d, 0x05b9, 0x05d5, 0x05f1, 0x060e, 0x062a, 0x0646, 0x0663, + 0x067f, 0x069b, 0x06b7, 0x06d4, 0x06f0, 0x070d, 0x072a, 0x0746, + 0x0763, 0x077f, 0x079c, 0x07b8, 0x07d4, 0x07f1, 0x080d, 0x082b, + 0x0847, 0x0864, 0x0881, 0x089d, 0x08ba, 0x08d6, 0x08f2, 0x090e, + // Entry 4940 - 497F + 0x092d, 0x012d, 0x0144, 0x015a, 0x0171, 0x0188, 0x01a0, 0x01b8, + 0x01cc, 0x01e1, 0x01f3, 0x020a, 0x0222, 0x0239, 0x0251, 0x0267, + 0x027d, 0x0293, 0x02a9, 0x02bf, 0x02d6, 0x02ee, 0x0307, 0x0320, + 0x0335, 0x034a, 0x0362, 0x0378, 0x038f, 0x03a3, 0x03b7, 0x03ce, + 0x03e4, 0x03fa, 0x0411, 0x0427, 0x043d, 0x0454, 0x0469, 0x048b, + 0x04ad, 0x00ad, 0x00c2, 0x00d8, 0x00ed, 0x0105, 0x0122, 0x013d, + 0x015b, 0x0187, 0x01ac, 0x01c6, 0x01e5, 0x0207, 0x0207, 0x0217, + 0x0228, 0x0239, 0x024b, 0x025c, 0x026e, 0x027f, 0x0291, 0x02a1, + // Entry 4980 - 49BF + 0x02b2, 0x02c2, 0x02d3, 0x02e3, 0x02f4, 0x0304, 0x0315, 0x0326, + 0x0337, 0x0349, 0x035b, 0x036c, 0x037e, 0x0390, 0x03a1, 0x03b2, + 0x03c3, 0x03d5, 0x03e6, 0x03f8, 0x040a, 0x041b, 0x042c, 0x043d, + 0x044f, 0x0461, 0x0474, 0x0487, 0x0498, 0x04aa, 0x04bc, 0x04cd, + 0x04df, 0x04f1, 0x0502, 0x0513, 0x0524, 0x0535, 0x0546, 0x0557, + 0x0569, 0x057b, 0x058e, 0x05a1, 0x05b2, 0x01b2, 0x01cb, 0x01f1, + 0x0218, 0x023f, 0x0266, 0x028f, 0x02b8, 0x02db, 0x02fd, 0x0320, + 0x0344, 0x0364, 0x0385, 0x03a8, 0x03ca, 0x03ec, 0x040e, 0x0430, + // Entry 49C0 - 49FF + 0x0454, 0x0475, 0x0496, 0x04ba, 0x04dc, 0x04fc, 0x051f, 0x0541, + 0x0563, 0x0585, 0x05a6, 0x01a6, 0x01c7, 0x01e8, 0x020b, 0x022d, + 0x024e, 0x0272, 0x029b, 0x02c5, 0x02e7, 0x0308, 0x032a, 0x034d, + 0x036c, 0x0396, 0x03b8, 0x03d9, 0x03fa, 0x041b, 0x043c, 0x045f, + 0x0484, 0x04a4, 0x04c7, 0x04e6, 0x0508, 0x0529, 0x0549, 0x0149, + 0x0169, 0x0189, 0x01ab, 0x01cc, 0x01ec, 0x020f, 0x0237, 0x0260, + 0x027c, 0x0297, 0x02b3, 0x02d0, 0x02e9, 0x030d, 0x0329, 0x0344, + 0x035f, 0x037a, 0x0397, 0x03b6, 0x03d0, 0x03ed, 0x0406, 0x0422, + // Entry 4A00 - 4A3F + 0x043d, 0x0457, 0x0057, 0x0073, 0x0096, 0x00ba, 0x00dc, 0x00dc, + 0x00f6, 0x0110, 0x012c, 0x0147, 0x0161, 0x017e, 0x01a0, 0x01a0, + 0x01ba, 0x01d5, 0x01f1, 0x020b, 0x0226, 0x0241, 0x025b, 0x0276, + 0x0292, 0x02ad, 0x02c9, 0x02e5, 0x0302, 0x031d, 0x0339, 0x0355, + 0x0372, 0x038d, 0x03a9, 0x03c5, 0x03e0, 0x03fc, 0x0417, 0x0433, + 0x044f, 0x046c, 0x0488, 0x04a5, 0x04c1, 0x04de, 0x04f9, 0x0515, + 0x0531, 0x054d, 0x0568, 0x0583, 0x059f, 0x05bc, 0x05d8, 0x05f5, + 0x0611, 0x062e, 0x064a, 0x0667, 0x0684, 0x06a0, 0x06be, 0x06d9, + // Entry 4A40 - 4A7F + 0x06f4, 0x070f, 0x072a, 0x0746, 0x0761, 0x077d, 0x0798, 0x07b4, + 0x07cf, 0x07eb, 0x0806, 0x0822, 0x083e, 0x0859, 0x0875, 0x0891, + 0x08ae, 0x08ca, 0x08e7, 0x0902, 0x091e, 0x093a, 0x0957, 0x0972, + 0x098f, 0x018f, 0x01ad, 0x01cc, 0x01eb, 0x020b, 0x022a, 0x024a, + 0x026a, 0x0289, 0x02a9, 0x02c7, 0x02eb, 0x030a, 0x0329, 0x0348, + 0x0368, 0x0387, 0x03a5, 0x03c4, 0x03e3, 0x0402, 0x0421, 0x0441, + 0x0460, 0x0480, 0x049f, 0x04be, 0x04de, 0x04fc, 0x051b, 0x0545, + 0x056e, 0x058e, 0x05ad, 0x05cd, 0x05ec, 0x0611, 0x0630, 0x0650, + // Entry 4A80 - 4ABF + 0x066f, 0x068f, 0x06af, 0x06cf, 0x06ed, 0x070c, 0x0736, 0x075f, + 0x077e, 0x079d, 0x07bd, 0x07e9, 0x0808, 0x0008, 0x0024, 0x0041, + 0x005e, 0x007c, 0x0099, 0x00b7, 0x00d5, 0x00f2, 0x0110, 0x012c, + 0x014e, 0x016b, 0x0188, 0x01a5, 0x01c3, 0x01e0, 0x01fc, 0x0219, + 0x0236, 0x0253, 0x0270, 0x028e, 0x02ab, 0x02c9, 0x02e6, 0x0303, + 0x0321, 0x033d, 0x035a, 0x0382, 0x03a9, 0x03c7, 0x03e4, 0x0402, + 0x041f, 0x0442, 0x045f, 0x047d, 0x049a, 0x04b8, 0x04d6, 0x04f4, + 0x0510, 0x052d, 0x0555, 0x057c, 0x0599, 0x05b6, 0x05d4, 0x05fe, + // Entry 4AC0 - 4AFF + 0x061b, 0x021b, 0x0233, 0x024c, 0x0264, 0x027e, 0x029e, 0x02bf, + 0x02bf, 0x02cd, 0x02db, 0x02eb, 0x02fa, 0x0309, 0x0317, 0x0327, + 0x0337, 0x0346, 0x0355, 0x0367, 0x0379, 0x038a, 0x039b, 0x03ac, + 0x03bf, 0x03d1, 0x03e3, 0x03fa, 0x0411, 0x042a, 0x0442, 0x045a, + 0x0471, 0x048a, 0x04a3, 0x04bb, 0x04d1, 0x04ea, 0x0501, 0x0519, + 0x0119, 0x0130, 0x0144, 0x0157, 0x016e, 0x0185, 0x0194, 0x01a4, + 0x01b3, 0x01c3, 0x01d2, 0x01e2, 0x01f9, 0x0211, 0x0228, 0x0240, + 0x024f, 0x025f, 0x026e, 0x027e, 0x028e, 0x029f, 0x02af, 0x02c0, + // Entry 4B00 - 4B3F + 0x02d1, 0x02e1, 0x02f2, 0x0302, 0x0313, 0x0324, 0x0335, 0x0347, + 0x0358, 0x036a, 0x037b, 0x038b, 0x039c, 0x03ac, 0x03bd, 0x03cd, + 0x03dd, 0x03ee, 0x03fe, 0x040f, 0x041f, 0x042f, 0x043f, 0x044f, + 0x045f, 0x0470, 0x0481, 0x0491, 0x04a1, 0x04b2, 0x04ce, 0x04e9, + 0x0505, 0x0519, 0x0539, 0x054c, 0x0560, 0x0573, 0x0587, 0x05a2, + 0x05be, 0x05d9, 0x05f5, 0x0608, 0x061c, 0x062f, 0x0643, 0x0650, + 0x065c, 0x066f, 0x0685, 0x06a2, 0x06b9, 0x06d8, 0x06f0, 0x02f0, + 0x0301, 0x0312, 0x0325, 0x0337, 0x0349, 0x035a, 0x036d, 0x0380, + // Entry 4B40 - 4B7F + 0x0392, 0x03a3, 0x03b7, 0x03cb, 0x03de, 0x03f1, 0x0404, 0x0419, + 0x042d, 0x0441, 0x045a, 0x0474, 0x0485, 0x0495, 0x04a5, 0x04b7, + 0x04c8, 0x04d9, 0x04e9, 0x04fb, 0x050d, 0x051e, 0x011e, 0x0132, + 0x0149, 0x015d, 0x0170, 0x017f, 0x018f, 0x019e, 0x01ae, 0x01bd, + 0x01cd, 0x01dc, 0x01ec, 0x01fb, 0x020b, 0x021b, 0x022c, 0x023c, + 0x024d, 0x025e, 0x026e, 0x027f, 0x028f, 0x02a0, 0x02b1, 0x02c2, + 0x02d4, 0x02e5, 0x02f8, 0x030a, 0x031b, 0x032c, 0x033c, 0x034d, + 0x035d, 0x036e, 0x037e, 0x038e, 0x039f, 0x03af, 0x03c0, 0x03d0, + // Entry 4B80 - 4BBF + 0x03e0, 0x03f0, 0x0400, 0x0410, 0x0421, 0x0432, 0x0442, 0x0452, + 0x0466, 0x0479, 0x048d, 0x04a0, 0x04b4, 0x04c7, 0x04db, 0x04ee, + 0x0502, 0x0514, 0x0525, 0x053d, 0x0554, 0x0566, 0x0579, 0x0593, + 0x059f, 0x05b2, 0x01b2, 0x01c9, 0x01e0, 0x01f7, 0x020e, 0x0225, + 0x023c, 0x0253, 0x026b, 0x0282, 0x0299, 0x02b0, 0x02c7, 0x02de, + 0x02f5, 0x030c, 0x0323, 0x033a, 0x0352, 0x0368, 0x037f, 0x0395, + 0x03ab, 0x03c1, 0x03d7, 0x03ee, 0x03ee, 0x0405, 0x041b, 0x0431, + 0x0449, 0x0460, 0x0477, 0x048d, 0x04a5, 0x04bd, 0x04d4, 0x00d4, + // Entry 4BC0 - 4BFF + 0x00eb, 0x00ff, 0x0112, 0x0122, 0x0131, 0x0140, 0x014f, 0x0160, + 0x0172, 0x0183, 0x0195, 0x01a7, 0x01b8, 0x01ca, 0x01db, 0x01ed, + 0x01ff, 0x0211, 0x0224, 0x0236, 0x0249, 0x025b, 0x026c, 0x027e, + 0x028f, 0x02a1, 0x02b2, 0x02c3, 0x02d5, 0x02e6, 0x02f8, 0x0309, + 0x031b, 0x032c, 0x033d, 0x034e, 0x035f, 0x0370, 0x0381, 0x0394, + 0x03a7, 0x03bb, 0x03ce, 0x03e2, 0x03f5, 0x0409, 0x041c, 0x0430, + 0x0444, 0x0451, 0x045f, 0x046c, 0x047a, 0x007a, 0x008b, 0x009b, + 0x00ab, 0x00bd, 0x00ce, 0x00df, 0x00ef, 0x0101, 0x0113, 0x0124, + // Entry 4C00 - 4C3F + 0x0137, 0x0143, 0x0156, 0x016a, 0x016a, 0x017b, 0x018c, 0x019d, + 0x01ae, 0x01bf, 0x01d1, 0x01e4, 0x01f6, 0x0209, 0x021b, 0x022e, + 0x0240, 0x0253, 0x0266, 0x0279, 0x028d, 0x02a0, 0x02b4, 0x02c7, + 0x02d9, 0x02ec, 0x02fe, 0x0311, 0x0323, 0x0335, 0x0348, 0x035a, + 0x036d, 0x037f, 0x0391, 0x03a3, 0x03b5, 0x03c7, 0x03d9, 0x03ec, + 0x03ff, 0x0419, 0x042e, 0x0444, 0x0044, 0x005c, 0x0071, 0x0085, + 0x0095, 0x00a6, 0x00b6, 0x00c7, 0x00d7, 0x00e8, 0x0100, 0x0119, + 0x0131, 0x014a, 0x015a, 0x016b, 0x017b, 0x018c, 0x019d, 0x01af, + // Entry 4C40 - 4C7F + 0x01c0, 0x01d2, 0x01e4, 0x01f5, 0x0207, 0x0218, 0x022a, 0x023c, + 0x024e, 0x0261, 0x0273, 0x0286, 0x0298, 0x02a9, 0x02bb, 0x02cc, + 0x02de, 0x02ef, 0x0300, 0x0312, 0x0323, 0x0335, 0x0346, 0x0357, + 0x0368, 0x0379, 0x038b, 0x039c, 0x03ae, 0x03c0, 0x03d1, 0x03e2, + 0x03f7, 0x040b, 0x0420, 0x0434, 0x0449, 0x0465, 0x0482, 0x049e, + 0x04bb, 0x04cf, 0x04e4, 0x04f8, 0x050d, 0x0520, 0x0535, 0x054d, + 0x0565, 0x056f, 0x057c, 0x0590, 0x05a9, 0x05ba, 0x05cd, 0x05df, + 0x05fa, 0x0618, 0x062a, 0x022a, 0x023c, 0x024d, 0x025e, 0x0271, + // Entry 4C80 - 4CBF + 0x0283, 0x0295, 0x02a6, 0x02b9, 0x02cc, 0x02de, 0x02ea, 0x02fe, + 0x0310, 0x0329, 0x033f, 0x0355, 0x0355, 0x036e, 0x0387, 0x03a2, + 0x03bc, 0x03d6, 0x03ef, 0x040a, 0x0425, 0x043f, 0x0459, 0x0476, + 0x0493, 0x04af, 0x04cb, 0x04e7, 0x0505, 0x0522, 0x053f, 0x0561, + 0x0584, 0x0184, 0x0193, 0x01a3, 0x01b2, 0x01c1, 0x01d0, 0x01e0, + 0x01ef, 0x01ff, 0x020f, 0x0220, 0x0230, 0x0241, 0x0252, 0x0263, + 0x0273, 0x0284, 0x0294, 0x02a5, 0x02a5, 0x02b6, 0x02c7, 0x02d9, + 0x02ea, 0x02fc, 0x030d, 0x031d, 0x032e, 0x033e, 0x0350, 0x0361, + // Entry 4CC0 - 4CFF + 0x0371, 0x0381, 0x0392, 0x03a2, 0x03b3, 0x03c4, 0x03d4, 0x03e4, + 0x03f4, 0x0404, 0x0414, 0x0424, 0x0434, 0x0445, 0x0459, 0x046c, + 0x0480, 0x0493, 0x04a6, 0x04ba, 0x04cd, 0x04e1, 0x04f5, 0x0507, + 0x0518, 0x052a, 0x0536, 0x0549, 0x055e, 0x0571, 0x058b, 0x05a3, + 0x05b4, 0x01b4, 0x01c4, 0x01d4, 0x01e4, 0x01f4, 0x0205, 0x0217, + 0x0228, 0x0228, 0x023a, 0x023a, 0x024b, 0x025d, 0x026e, 0x0280, + 0x0280, 0x0292, 0x02a4, 0x02b7, 0x02c9, 0x02dc, 0x02ef, 0x0301, + 0x0312, 0x0324, 0x0335, 0x0347, 0x0358, 0x0369, 0x037b, 0x038c, + // Entry 4D00 - 4D3F + 0x038c, 0x039e, 0x03af, 0x03c0, 0x03d1, 0x03e2, 0x03f3, 0x0404, + 0x0415, 0x0427, 0x0439, 0x044d, 0x004d, 0x005f, 0x0072, 0x0084, + 0x0097, 0x00a9, 0x00bc, 0x00ce, 0x00e1, 0x00f3, 0x0106, 0x0119, + 0x012d, 0x0140, 0x0154, 0x0168, 0x017c, 0x018f, 0x01a3, 0x01b6, + 0x01ca, 0x01de, 0x01f2, 0x0206, 0x021b, 0x022f, 0x0244, 0x0258, + 0x026d, 0x0281, 0x0294, 0x02a8, 0x02bb, 0x02cf, 0x02e2, 0x02f5, + 0x0309, 0x031c, 0x0330, 0x0344, 0x0357, 0x036a, 0x037d, 0x0390, + 0x03a3, 0x03b7, 0x03ca, 0x03dd, 0x03f4, 0x040b, 0x0421, 0x0438, + // Entry 4D40 - 4D7F + 0x044e, 0x0465, 0x047b, 0x0492, 0x04a8, 0x04bf, 0x04d3, 0x04e8, + 0x00e8, 0x00fc, 0x010f, 0x0122, 0x0137, 0x014b, 0x015f, 0x0172, + 0x0187, 0x019c, 0x01b0, 0x01b0, 0x01d5, 0x01ed, 0x0202, 0x0216, + 0x0216, 0x0226, 0x0237, 0x0247, 0x0258, 0x0268, 0x0279, 0x0291, + 0x02a9, 0x02a9, 0x02ba, 0x02cb, 0x02cb, 0x02dc, 0x02ed, 0x02fe, + 0x0310, 0x0321, 0x0333, 0x0345, 0x0356, 0x0368, 0x0379, 0x038b, + 0x039d, 0x03af, 0x03c2, 0x03d4, 0x03e7, 0x03f9, 0x040a, 0x041c, + 0x042d, 0x043f, 0x0450, 0x0050, 0x0061, 0x0073, 0x0084, 0x0096, + // Entry 4D80 - 4DBF + 0x00a7, 0x00b8, 0x00c9, 0x00c9, 0x00da, 0x00ec, 0x00ec, 0x00fd, + 0x010f, 0x0121, 0x0132, 0x0143, 0x0143, 0x0155, 0x016a, 0x017f, + 0x0193, 0x01a8, 0x01bc, 0x01d1, 0x01ed, 0x020a, 0x020a, 0x021f, + 0x0234, 0x0234, 0x0249, 0x025e, 0x0271, 0x0271, 0x027b, 0x027b, + 0x0291, 0x0291, 0x02a3, 0x02c0, 0x02e4, 0x02fd, 0x0316, 0x0332, + 0x034f, 0x034f, 0x036b, 0x0386, 0x03a1, 0x03be, 0x03da, 0x03f6, + 0x0411, 0x0011, 0x002b, 0x0046, 0x0061, 0x007c, 0x0097, 0x0097, + 0x00a4, 0x00b2, 0x00bf, 0x00cd, 0x00da, 0x00e8, 0x00fd, 0x0113, + // Entry 4DC0 - 4DFF + 0x0128, 0x013e, 0x014b, 0x0159, 0x0166, 0x0174, 0x0182, 0x0191, + 0x019f, 0x01ae, 0x01bd, 0x01cd, 0x01db, 0x01ea, 0x01f8, 0x0207, + 0x0216, 0x0226, 0x0235, 0x0245, 0x0254, 0x0264, 0x0273, 0x0281, + 0x0290, 0x029e, 0x02ad, 0x02bb, 0x02ca, 0x02d8, 0x02e7, 0x02f5, + 0x0304, 0x0312, 0x0321, 0x032f, 0x033d, 0x034c, 0x035a, 0x0369, + 0x0377, 0x0386, 0x0395, 0x03a3, 0x03b1, 0x03c3, 0x03d4, 0x03e6, + 0x03f7, 0x0409, 0x0422, 0x043c, 0x0455, 0x046f, 0x0480, 0x0492, + 0x04a3, 0x04b5, 0x04c5, 0x04da, 0x04ec, 0x04fd, 0x050c, 0x051e, + // Entry 4E00 - 4E3F + 0x0536, 0x053d, 0x0548, 0x0552, 0x0563, 0x056d, 0x057c, 0x0592, + 0x05a1, 0x05af, 0x05bd, 0x05cd, 0x05dc, 0x05eb, 0x05f9, 0x0609, + 0x0619, 0x0628, 0x0228, 0x023d, 0x023d, 0x0250, 0x0250, 0x025c, + 0x026c, 0x027d, 0x028d, 0x029e, 0x02ae, 0x02bf, 0x02d7, 0x02f0, + 0x0308, 0x0321, 0x0331, 0x0342, 0x0352, 0x0363, 0x0374, 0x0386, + 0x0397, 0x03a9, 0x03bb, 0x03cc, 0x03de, 0x03ef, 0x0401, 0x0413, + 0x0425, 0x0438, 0x044a, 0x045d, 0x046f, 0x0480, 0x0492, 0x04a3, + 0x04b5, 0x04c6, 0x04d7, 0x04e9, 0x04fa, 0x050c, 0x051d, 0x052e, + // Entry 4E40 - 4E7F + 0x053f, 0x0550, 0x0561, 0x0573, 0x0585, 0x0596, 0x05a7, 0x05bc, + 0x05d0, 0x05e5, 0x05f9, 0x060e, 0x062a, 0x0647, 0x0663, 0x0680, + 0x0694, 0x06ae, 0x06c3, 0x06d7, 0x06f1, 0x0706, 0x071e, 0x0733, + 0x0747, 0x075a, 0x076c, 0x0781, 0x078e, 0x07a7, 0x07b1, 0x03b1, + 0x03c3, 0x03d4, 0x03e5, 0x03f8, 0x040a, 0x041c, 0x042d, 0x0440, + 0x0453, 0x0465, 0x0065, 0x0075, 0x0086, 0x0096, 0x00a7, 0x00b7, + 0x00c8, 0x00e0, 0x00f9, 0x0111, 0x012a, 0x013a, 0x014b, 0x015b, + 0x016c, 0x017d, 0x018f, 0x01a0, 0x01b2, 0x01c4, 0x01d5, 0x01e7, + // Entry 4E80 - 4EBF + 0x01f8, 0x020a, 0x021c, 0x022e, 0x0241, 0x0253, 0x0266, 0x0278, + 0x0289, 0x029b, 0x02ac, 0x02be, 0x02cf, 0x02e0, 0x02f2, 0x0303, + 0x0315, 0x0326, 0x0337, 0x0348, 0x0359, 0x036a, 0x037c, 0x038e, + 0x039f, 0x03b0, 0x03c5, 0x03d9, 0x03ee, 0x0402, 0x0417, 0x0433, + 0x0450, 0x0050, 0x0064, 0x0079, 0x008d, 0x00a2, 0x00ba, 0x00cf, + 0x00e3, 0x00f6, 0x0108, 0x011c, 0x0129, 0x013d, 0x0152, 0x0167, + 0x0180, 0x0199, 0x01b2, 0x01ca, 0x0202, 0x0238, 0x026b, 0x02a5, + 0x02df, 0x02ff, 0x0329, 0x0353, 0x037d, 0x03aa, 0x03d6, 0x0400, + // Entry 4EC0 - 4EFF + 0x0434, 0x0469, 0x0490, 0x04b5, 0x04db, 0x04f5, 0x0513, 0x0532, + 0x0132, 0x013f, 0x014d, 0x015a, 0x0168, 0x0175, 0x0183, 0x0198, + 0x01ae, 0x01c3, 0x01d9, 0x01e6, 0x01f4, 0x0201, 0x020f, 0x021d, + 0x022c, 0x023a, 0x0249, 0x0258, 0x0266, 0x0275, 0x0283, 0x0292, + 0x02a1, 0x02b0, 0x02c0, 0x02cf, 0x02df, 0x02ee, 0x02fc, 0x030b, + 0x0319, 0x0328, 0x0336, 0x0344, 0x0353, 0x0361, 0x0370, 0x037e, + 0x038c, 0x039a, 0x03a8, 0x03b6, 0x03c5, 0x03d4, 0x03e2, 0x03f0, + 0x03ff, 0x0411, 0x0422, 0x0434, 0x0445, 0x0457, 0x0470, 0x048a, + // Entry 4F00 - 4F3F + 0x04a3, 0x04bd, 0x04ce, 0x04e0, 0x04f1, 0x0503, 0x0515, 0x0526, + 0x0536, 0x054b, 0x0555, 0x0566, 0x057c, 0x058a, 0x018a, 0x0199, + 0x01a7, 0x01b5, 0x01c5, 0x01d4, 0x01e3, 0x01f1, 0x0201, 0x0211, + 0x0220, 0x0220, 0x023d, 0x0254, 0x0278, 0x029c, 0x02c0, 0x02e5, + 0x0311, 0x0329, 0x0356, 0x036b, 0x038e, 0x03b8, 0x03e9, 0x03e9, + 0x03f7, 0x0406, 0x0414, 0x0423, 0x0431, 0x0440, 0x044e, 0x045d, + 0x046b, 0x047a, 0x0489, 0x0499, 0x04a8, 0x04b8, 0x04c8, 0x04d7, + 0x04e7, 0x04f6, 0x0506, 0x0516, 0x0526, 0x0537, 0x0547, 0x0558, + // Entry 4F40 - 4F7F + 0x0568, 0x0577, 0x0587, 0x0596, 0x05a6, 0x05b5, 0x05c4, 0x05d4, + 0x05e3, 0x05f3, 0x0602, 0x0611, 0x0620, 0x062f, 0x063e, 0x064e, + 0x065d, 0x066c, 0x067c, 0x068f, 0x06a1, 0x06b4, 0x06c6, 0x06d9, + 0x06eb, 0x06fe, 0x0710, 0x0723, 0x0735, 0x0748, 0x0759, 0x0769, + 0x0369, 0x0379, 0x0388, 0x0397, 0x03a8, 0x03b8, 0x03c8, 0x03d7, + 0x03e8, 0x03f9, 0x0409, 0x0009, 0x0017, 0x0026, 0x0035, 0x0043, + 0x0051, 0x0069, 0x0077, 0x0086, 0x0094, 0x00a2, 0x00b0, 0x00bf, + 0x00ce, 0x00dc, 0x00ea, 0x00f8, 0x0107, 0x0115, 0x0122, 0x0130, + // Entry 4F80 - 4FBF + 0x013f, 0x014d, 0x0165, 0x0174, 0x0183, 0x0192, 0x0192, 0x01af, + 0x01cc, 0x01f2, 0x0203, 0x0215, 0x0226, 0x0238, 0x0249, 0x025b, + 0x026c, 0x027e, 0x028f, 0x02a1, 0x02b3, 0x02c3, 0x02c3, 0x02d2, + 0x02e0, 0x02ee, 0x02fe, 0x030d, 0x031c, 0x032a, 0x033a, 0x034a, + 0x0359, 0x0368, 0x037a, 0x0391, 0x03a2, 0x03b1, 0x03bf, 0x03bf, + 0x03de, 0x03fa, 0x0417, 0x0434, 0x0451, 0x046e, 0x048b, 0x04a8, + 0x04c4, 0x04e0, 0x04fe, 0x051b, 0x0538, 0x0556, 0x0574, 0x0591, + 0x05af, 0x05cd, 0x05eb, 0x060a, 0x0627, 0x0644, 0x0661, 0x067e, + // Entry 4FC0 - 4FFF + 0x069b, 0x06ba, 0x06d9, 0x06f8, 0x0716, 0x0735, 0x0753, 0x0772, + 0x078f, 0x07a9, 0x07c4, 0x07df, 0x07fa, 0x0815, 0x0830, 0x084b, + 0x0865, 0x087f, 0x089b, 0x08b6, 0x08d1, 0x08ed, 0x0909, 0x0924, + 0x0940, 0x095c, 0x0978, 0x0995, 0x09b0, 0x09cb, 0x09e6, 0x0a01, + 0x0a1c, 0x0a39, 0x0a56, 0x0a73, 0x0a8f, 0x0aac, 0x0ac8, 0x0ae5, + 0x0afb, 0x0b10, 0x0b25, 0x0b3c, 0x0b52, 0x0b68, 0x0b7d, 0x0b94, + 0x0bab, 0x0bc1, 0x0bd7, 0x0bf0, 0x0c09, 0x0c21, 0x0c39, 0x0c51, + 0x0c6b, 0x0c84, 0x0c9d, 0x009d, 0x00ab, 0x00ab, 0x00c0, 0x00d5, + // Entry 5000 - 503F + 0x00ea, 0x00ff, 0x0114, 0x0129, 0x013e, 0x0154, 0x0169, 0x017e, + 0x0194, 0x01a9, 0x01be, 0x01d3, 0x01e8, 0x01fe, 0x0213, 0x0229, + 0x023e, 0x0253, 0x0269, 0x027d, 0x0291, 0x02a5, 0x02b9, 0x02cd, + 0x02e2, 0x02f7, 0x0311, 0x032b, 0x0345, 0x035f, 0x0379, 0x0393, + 0x03ad, 0x03c8, 0x03e2, 0x03fe, 0x0415, 0x0434, 0x0456, 0x0473, + 0x0498, 0x04b4, 0x04cb, 0x04ed, 0x050a, 0x0524, 0x0544, 0x0569, + 0x0589, 0x05aa, 0x05c6, 0x05de, 0x0605, 0x0627, 0x0645, 0x0245, + 0x0257, 0x026a, 0x027c, 0x028f, 0x02a1, 0x02b4, 0x02ce, 0x02e9, + // Entry 5040 - 507F + 0x0303, 0x0303, 0x0315, 0x0328, 0x033a, 0x034d, 0x0360, 0x0374, + 0x0387, 0x039b, 0x03af, 0x03c2, 0x03d6, 0x03e9, 0x03fd, 0x0411, + 0x0425, 0x043a, 0x044e, 0x0463, 0x0477, 0x048a, 0x049e, 0x04b1, + 0x04c5, 0x04d8, 0x04eb, 0x04ff, 0x0512, 0x0526, 0x0539, 0x054c, + 0x055f, 0x0572, 0x0585, 0x0599, 0x05ad, 0x05c0, 0x05d3, 0x05ea, + 0x0600, 0x0617, 0x062d, 0x0644, 0x0662, 0x0681, 0x069f, 0x029f, + 0x02b5, 0x02cc, 0x02e2, 0x02f9, 0x0313, 0x032a, 0x0340, 0x0355, + 0x036c, 0x037b, 0x0391, 0x03a9, 0x03bf, 0x03d5, 0x03d5, 0x03e9, + // Entry 5080 - 50BF + 0x03fc, 0x040f, 0x0424, 0x0438, 0x044c, 0x045f, 0x0474, 0x0489, + 0x049d, 0x04b1, 0x04c5, 0x04db, 0x04f0, 0x0505, 0x0519, 0x052f, + 0x0545, 0x055a, 0x056e, 0x0585, 0x059c, 0x05b2, 0x05c8, 0x05de, + 0x05f6, 0x060d, 0x0624, 0x0640, 0x0240, 0x0251, 0x0262, 0x0273, + 0x0285, 0x0296, 0x02a8, 0x02b9, 0x02cb, 0x02dc, 0x02ee, 0x02ff, + 0x0311, 0x0322, 0x0333, 0x0344, 0x0356, 0x0367, 0x0378, 0x038a, + 0x039d, 0x03af, 0x03c0, 0x03d2, 0x03e3, 0x03f4, 0x0405, 0x0416, + 0x0427, 0x0439, 0x044a, 0x045b, 0x046b, 0x006b, 0x0086, 0x00a2, + // Entry 50C0 - 50FF + 0x00bd, 0x00d9, 0x00f4, 0x0110, 0x012b, 0x0147, 0x0162, 0x017e, + 0x0199, 0x01b4, 0x01cf, 0x01eb, 0x0206, 0x0221, 0x023d, 0x025a, + 0x0276, 0x0291, 0x02ad, 0x02c8, 0x02c8, 0x02e3, 0x02fe, 0x0319, + 0x0335, 0x0350, 0x036b, 0x0385, 0x039a, 0x03ae, 0x03c2, 0x03d6, + 0x03ea, 0x03ff, 0x0417, 0x0017, 0x0027, 0x003f, 0x0059, 0x0079, + 0x0092, 0x00ac, 0x00cd, 0x00e8, 0x0102, 0x0113, 0x0124, 0x0140, + 0x0161, 0x017c, 0x019d, 0x01b7, 0x01d7, 0x01f3, 0x0210, 0x022d, + 0x0254, 0x026a, 0x027c, 0x029a, 0x02bc, 0x02df, 0x02fc, 0x0319, + // Entry 5100 - 513F + 0x032a, 0x033b, 0x0358, 0x037f, 0x0390, 0x03aa, 0x03c6, 0x03e2, + 0x03fc, 0x0418, 0x0432, 0x044d, 0x0468, 0x047b, 0x048f, 0x04a2, + 0x04bf, 0x04d0, 0x04e9, 0x0506, 0x0537, 0x055a, 0x056e, 0x0581, + 0x0594, 0x05b1, 0x05c5, 0x05d9, 0x05eb, 0x0607, 0x0623, 0x0660, + 0x0684, 0x06c7, 0x06da, 0x06ef, 0x0700, 0x0712, 0x0725, 0x073a, + 0x074c, 0x0767, 0x077b, 0x078d, 0x07a1, 0x07b2, 0x07cb, 0x07e6, + 0x0806, 0x0817, 0x0833, 0x084f, 0x086c, 0x0880, 0x089f, 0x08b1, + 0x08c4, 0x08d5, 0x08e7, 0x0912, 0x0936, 0x095b, 0x097d, 0x099f, + // Entry 5140 - 517F + 0x09cb, 0x09ed, 0x0a11, 0x0a34, 0x0a56, 0x0a78, 0x0aa2, 0x0ac5, + 0x0ae7, 0x0b09, 0x0b36, 0x0b59, 0x0b7b, 0x0ba7, 0x0bc9, 0x0bed, + 0x0c19, 0x0c3c, 0x0c4e, 0x0c60, 0x0c74, 0x0c88, 0x0c99, 0x0cab, + 0x0cbd, 0x0cd9, 0x0cec, 0x0cfe, 0x0d23, 0x0d36, 0x0d47, 0x0d60, + 0x0d76, 0x0d8f, 0x0da1, 0x0dbe, 0x0dd1, 0x0de3, 0x0df7, 0x0e09, + 0x0e1b, 0x0e2e, 0x0e46, 0x0e63, 0x0e76, 0x0e89, 0x0e99, 0x0eb3, + 0x0ed7, 0x0ee8, 0x0f11, 0x0f2c, 0x0f46, 0x0f61, 0x0f7c, 0x0f95, + 0x0fa8, 0x0fbb, 0x0fcc, 0x0fdd, 0x0ff9, 0x101a, 0x1034, 0x1051, + // Entry 5180 - 51BF + 0x106e, 0x1087, 0x109a, 0x10ae, 0x10c1, 0x10d4, 0x10ef, 0x1113, + 0x1141, 0x115d, 0x117a, 0x119d, 0x11c5, 0x11e1, 0x1202, 0x1224, + 0x1244, 0x126c, 0x1289, 0x12a5, 0x12cc, 0x12e8, 0x1304, 0x1320, + 0x133c, 0x134d, 0x1363, 0x1375, 0x139f, 0x13c1, 0x13e4, 0x140e, + 0x1429, 0x1445, 0x146b, 0x1487, 0x14ab, 0x14c7, 0x14eb, 0x1506, + 0x1521, 0x1547, 0x1563, 0x157e, 0x15a1, 0x15bc, 0x15e7, 0x1609, + 0x1625, 0x1640, 0x165c, 0x167f, 0x16a4, 0x16d1, 0x16ed, 0x1711, + 0x1734, 0x1751, 0x1772, 0x179f, 0x17bb, 0x17da, 0x17f6, 0x181b, + // Entry 51C0 - 51FF + 0x183f, 0x185a, 0x187d, 0x1898, 0x18b4, 0x18d9, 0x18f4, 0x1910, + 0x192c, 0x1948, 0x196d, 0x198a, 0x19a6, 0x19c3, 0x19dd, 0x19f8, + 0x1a1b, 0x1a36, 0x1a49, 0x1a6a, 0x1a7c, 0x1aa4, 0x1ab6, 0x1ae2, + 0x1af6, 0x1b08, 0x1b1a, 0x1b2d, 0x1b45, 0x1b62, 0x1b83, 0x1b95, + 0x1ba8, 0x1bbd, 0x1bd3, 0x1bf3, 0x1c04, 0x1c1d, 0x1c36, 0x1c53, + 0x1c65, 0x1c80, 0x1c9f, 0x1cb3, 0x1cc6, 0x1cde, 0x1cf1, 0x1d15, + 0x1d38, 0x1d55, 0x1d7a, 0x1d96, 0x1daa, 0x1dbd, 0x1dde, 0x1dfb, + 0x1e19, 0x1e31, 0x1e42, 0x1e5f, 0x1e71, 0x1e8d, 0x1eb8, 0x1ed4, + // Entry 5200 - 523F + 0x1efa, 0x1f11, 0x1f23, 0x1f46, 0x1f62, 0x1f83, 0x1f95, 0x1fa7, + 0x1fc3, 0x1fd5, 0x1fe8, 0x1ffc, 0x2011, 0x2022, 0x2038, 0x204e, + 0x2060, 0x2071, 0x208c, 0x20a8, 0x20c3, 0x20df, 0x20fa, 0x2115, + 0x2130, 0x214b, 0x2164, 0x2175, 0x2188, 0x21a4, 0x21c1, 0x21e1, + 0x21ff, 0x221b, 0x222e, 0x223e, 0x2250, 0x2261, 0x2274, 0x2295, + 0x22ba, 0x22cb, 0x22dd, 0x22f3, 0x2308, 0x233d, 0x2354, 0x2365, + 0x2386, 0x2398, 0x23a9, 0x23c5, 0x23e2, 0x23ff, 0x2418, 0x242b, + 0x243c, 0x244d, 0x245f, 0x2470, 0x2489, 0x24a3, 0x24c6, 0x24e2, + // Entry 5240 - 527F + 0x24fd, 0x251a, 0x2535, 0x254f, 0x256c, 0x2588, 0x25a2, 0x25bd, + 0x25de, 0x25f9, 0x2625, 0x263f, 0x265b, 0x2680, 0x26aa, 0x26c4, + 0x26e0, 0x26fb, 0x2715, 0x2730, 0x274a, 0x2765, 0x277f, 0x2799, + 0x27b3, 0x27d5, 0x27f7, 0x2819, 0x2833, 0x2858, 0x2872, 0x288d, + 0x28a7, 0x28c1, 0x28db, 0x28f6, 0x2911, 0x292c, 0x2948, 0x2963, + 0x297e, 0x299b, 0x29b6, 0x29cf, 0x29e9, 0x2a03, 0x2a28, 0x2a43, + 0x2a5d, 0x2a6f, 0x2a8e, 0x2aa0, 0x2ab3, 0x2ac6, 0x2ad9, 0x2aec, + 0x2b09, 0x2b1b, 0x2b3c, 0x2b4e, 0x2b6a, 0x2b89, 0x2b9c, 0x2baf, + // Entry 5280 - 52BF + 0x2bc4, 0x2bfa, 0x2c3c, 0x2c50, 0x2c61, 0x2c7c, 0x2c95, 0x2caf, + 0x2cc1, 0x2cd3, 0x2ce7, 0x2cfa, 0x2d0f, 0x2d30, 0x2d41, 0x2d7b, + 0x2d8d, 0x2d9f, 0x2dbe, 0x2dd0, 0x2de2, 0x2df9, 0x2e0b, 0x2e1d, + 0x2e3c, 0x2e51, 0x2e66, 0x2e77, 0x2e8b, 0x2ea7, 0x2ed3, 0x2ef8, + 0x2f1d, 0x2f3a, 0x2f57, 0x2f7f, 0x2f9d, 0x2fba, 0x2fd8, 0x2ff5, + 0x3012, 0x3030, 0x304e, 0x3075, 0x3092, 0x30b0, 0x30d7, 0x30fa, + 0x3117, 0x313c, 0x3161, 0x317e, 0x319c, 0x31ba, 0x31d8, 0x3205, + 0x3225, 0x3244, 0x3261, 0x327f, 0x329c, 0x32c1, 0x32e0, 0x32fd, + // Entry 52C0 - 52FF + 0x3324, 0x3359, 0x3388, 0x33a7, 0x33d0, 0x33ee, 0x340c, 0x342b, + 0x345f, 0x347b, 0x349e, 0x34c8, 0x34ee, 0x350b, 0x3529, 0x3545, + 0x3559, 0x3577, 0x359e, 0x35b7, 0x35e4, 0x35f9, 0x360b, 0x3627, + 0x3639, 0x3655, 0x3679, 0x368a, 0x369c, 0x36b1, 0x36c4, 0x36d5, + 0x36f0, 0x3702, 0x371d, 0x3739, 0x3756, 0x3778, 0x379a, 0x37bf, + 0x37da, 0x37f7, 0x3814, 0x383a, 0x3855, 0x3879, 0x3897, 0x38ba, + 0x38d5, 0x38f0, 0x3914, 0x3939, 0x3956, 0x396d, 0x398c, 0x39ab, + 0x39c5, 0x39df, 0x39f1, 0x3a05, 0x3a24, 0x3a47, 0x3a63, 0x3a75, + // Entry 5300 - 533F + 0x3a87, 0x3a99, 0x3ab4, 0x3adc, 0x3aed, 0x3b09, 0x3b1f, 0x3b31, + 0x3b43, 0x3b55, 0x3b68, 0x3b7c, 0x3b8d, 0x3b9f, 0x3bb0, 0x3bc2, + 0x3bd3, 0x3bec, 0x3bfe, 0x3c15, 0x3c2a, 0x3c3f, 0x3c52, 0x3c6d, + 0x3c8a, 0x3ca6, 0x3cc3, 0x3cf0, 0x3d11, 0x3d25, 0x3d41, 0x3d65, + 0x3d82, 0x3d9b, 0x3dac, 0x3dbe, 0x3dd1, 0x3ded, 0x3e0f, 0x3e30, + 0x3e44, 0x3e5e, 0x3e70, 0x3e83, 0x3e94, 0x3ead, 0x3ec7, 0x3ee0, + 0x3ef1, 0x3f0a, 0x3f1c, 0x3f2e, 0x3f50, 0x3f7b, 0x3f90, 0x3fae, + 0x3fcd, 0x3ff5, 0x4014, 0x4041, 0x405f, 0x407e, 0x409d, 0x40c6, + // Entry 5340 - 537F + 0x40ee, 0x411f, 0x4146, 0x4165, 0x4179, 0x418a, 0x419d, 0x41af, + 0x41d1, 0x41f4, 0x4216, 0x4251, 0x4273, 0x428a, 0x42a5, 0x42c4, + 0x42f4, 0x4308, 0x432d, 0x434e, 0x4370, 0x4392, 0x43b9, 0x43dc, + 0x43fd, 0x441e, 0x4442, 0x4463, 0x4487, 0x44ad, 0x44be, 0x44d0, + 0x44e2, 0x44f4, 0x4508, 0x4519, 0x4532, 0x454c, 0x4566, 0x4580, + 0x4599, 0x45b2, 0x45cc, 0x45e5, 0x45ff, 0x461c, 0x4630, 0x464e, + 0x466b, 0x4688, 0x46ab, 0x46bc, 0x46ce, 0x46df, 0x46f0, 0x4701, + 0x471b, 0x472d, 0x4747, 0x4762, 0x477e, 0x4799, 0x47b5, 0x47d1, + // Entry 5380 - 53BF + 0x47ed, 0x4808, 0x4824, 0x4840, 0x485d, 0x4879, 0x4894, 0x48af, + 0x48ca, 0x48e5, 0x4901, 0x491c, 0x4933, 0x4945, 0x4968, 0x497d, + 0x498f, 0x49a1, 0x49b4, 0x49cf, 0x49ec, 0x4a0a, 0x4a26, 0x4a44, + 0x4a61, 0x4a7c, 0x4a9e, 0x4ab1, 0x4ac5, 0x4ad9, 0x4aeb, 0x4b00, + 0x4b35, 0x4b6a, 0x4b7e, 0x4b91, 0x4ba5, 0x4bba, 0x4bd1, 0x4be4, + 0x4bff, 0x4c1b, 0x4c2e, 0x4c49, 0x4c66, 0x4c85, 0x4ca2, 0x4cbf, + 0x4cdc, 0x4cfe, 0x4d1e, 0x4d3b, 0x4d58, 0x4d75, 0x4d8a, 0x4d9d, + 0x4db5, 0x4ddf, 0x4df3, 0x4e05, 0x4e29, 0x4e3c, 0x4e51, 0x4e62, + // Entry 53C0 - 53FF + 0x4e78, 0x4e8a, 0x4e9d, 0x4ebf, 0x4ed2, 0x4ee6, 0x4ef7, 0x4f10, + 0x4f22, 0x4f35, 0x4f49, 0x4f5b, 0x4f70, 0x4f82, 0x4f95, 0x4fa6, + 0x4fc0, 0x4fda, 0x4ff4, 0x500a, 0x501c, 0x5051, 0x506b, 0x507d, + 0x5098, 0x50b4, 0x50d0, 0x50ec, 0x5109, 0x5124, 0x5137, 0x5149, + 0x515a, 0x5170, 0x5181, 0x5197, 0x51a9, 0x51bb, 0x51d8, 0x51f3, + 0x5228, 0x5239, 0x524c, 0x525e, 0x5270, 0x5282, 0x52a8, 0x52b8, + 0x52cc, 0x52e0, 0x530f, 0x5333, 0x5365, 0x5376, 0x5387, 0x5398, + 0x53b0, 0x53cb, 0x53e5, 0x540c, 0x5438, 0x544e, 0x5467, 0x548a, + // Entry 5400 - 543F + 0x549d, 0x54ae, 0x54cb, 0x54ed, 0x5509, 0x5522, 0x5536, 0x5549, + 0x5569, 0x5585, 0x5596, 0x55ac, 0x55bd, 0x55da, 0x55f3, 0x5605, + 0x5627, 0x5649, 0x5664, 0x567f, 0x569b, 0x56b6, 0x56da, 0x56fd, + 0x570f, 0x5721, 0x5734, 0x5746, 0x5760, 0x577f, 0x579b, 0x57b7, + 0x57d2, 0x57ee, 0x5810, 0x582c, 0x5847, 0x5862, 0x587e, 0x5899, + 0x58b5, 0x58d0, 0x58ec, 0x5908, 0x5923, 0x593f, 0x595c, 0x5977, + 0x599a, 0x59b5, 0x59d3, 0x59e7, 0x5a03, 0x5a15, 0x5a2f, 0x5a4a, + 0x5a66, 0x5a83, 0x5a96, 0x5aa9, 0x5abe, 0x5ad2, 0x5ae4, 0x5b03, + // Entry 5440 - 547F + 0x5b15, 0x5b26, 0x5b3c, 0x5b5f, 0x5b71, 0x5b84, 0x5b96, 0x5ba7, + 0x5bc0, 0x5bd2, 0x5be4, 0x5c00, 0x5c12, 0x5c25, 0x5c36, 0x5c48, + 0x5c62, 0x5c76, 0x5c88, 0x5ca2, 0x5cbd, 0x5cd7, 0x5cf4, 0x5d20, + 0x5d33, 0x5d4f, 0x5d6b, 0x5d88, 0x5da5, 0x5dd0, 0x5ded, 0x5e00, + 0x5e12, 0x5e25, 0x5e42, 0x5e5e, 0x5e7a, 0x5e95, 0x5eba, 0x5ed5, + 0x5eef, 0x5f0b, 0x5f25, 0x5f40, 0x5f5d, 0x5f81, 0x5fa7, 0x5fc3, + 0x5fd6, 0x5ff3, 0x6005, 0x6017, 0x602a, 0x6049, 0x6067, 0x6091, + 0x60ae, 0x60c1, 0x60e2, 0x60f4, 0x610e, 0x6120, 0x0120, 0x013e, + // Entry 5480 - 54BF + 0x015e, 0x017d, 0x019c, 0x01ba, 0x01da, 0x01fa, 0x0219, 0x023a, + 0x025a, 0x027a, 0x0299, 0x02ba, 0x02db, 0x02fb, 0x0318, 0x0335, + 0x0351, 0x036f, 0x038d, 0x03aa, 0x03ca, 0x03ea, 0x040c, 0x042d, + 0x044e, 0x046e, 0x0490, 0x04b2, 0x04d3, 0x04f3, 0x0513, 0x0535, + 0x0556, 0x0577, 0x0597, 0x05b9, 0x05e8, 0x0609, 0x062a, 0x064a, + 0x066c, 0x068e, 0x06af, 0x06cf, 0x06ef, 0x0711, 0x0740, 0x0761, + 0x0782, 0x07b2, 0x07e1, 0x0800, 0x081f, 0x0840, 0x086e, 0x088e, + 0x08ae, 0x08dd, 0x090c, 0x093a, 0x0969, 0x0999, 0x09c9, 0x09f5, + // Entry 54C0 - 54FF + 0x0a24, 0x0a54, 0x0a84, 0x0ab2, 0x0ae1, 0x0b10, 0x0b40, 0x0b70, + 0x0ba1, 0x0bc4, 0x0be9, 0x0c0d, 0x0c31, 0x0c54, 0x0c73, 0x0c92, + 0x0cb3, 0x0cd3, 0x0d00, 0x0d20, 0x0d4d, 0x0d6d, 0x0d8d, 0x0dad, + 0x0dcd, 0x0df2, 0x0e18, 0x0e3f, 0x0e6e, 0x0e9e, 0x0ec3, 0x0ee9, + 0x0f16, 0x0f45, 0x0f6b, 0x0f8e, 0x0fb6, 0x0fdf, 0x1003, 0x1027, + 0x1051, 0x107b, 0x10a4, 0x10cf, 0x10fa, 0x1124, 0x0124, 0x0158, + 0x0181, 0x01aa, 0x01d6, 0x0203, 0x0203, 0x0223, 0x023f, 0x025b, + 0x027d, 0x029c, 0x02ba, 0x02d8, 0x02fb, 0x0317, 0x0333, 0x034f, + // Entry 5500 - 553F + 0x036d, 0x0389, 0x03a7, 0x03c3, 0x03e7, 0x0403, 0x041f, 0x043d, + 0x0458, 0x0473, 0x0495, 0x04b2, 0x04cd, 0x04e8, 0x0509, 0x0528, + 0x0544, 0x0563, 0x058e, 0x05ae, 0x05ca, 0x05f0, 0x0616, 0x0633, + 0x064f, 0x066a, 0x0685, 0x06a0, 0x06bc, 0x06dc, 0x06f7, 0x0712, + 0x0728, 0x0749, 0x076e, 0x0792, 0x07bc, 0x07e0, 0x0805, 0x0829, + 0x084e, 0x0872, 0x088e, 0x08ad, 0x08ce, 0x08f9, 0x0922, 0x093f, + 0x095a, 0x097e, 0x09a2, 0x09c4, 0x09ef, 0x0a0b, 0x0a31, 0x0a4d, + 0x0a6a, 0x0a85, 0x0aa8, 0x0acb, 0x0ae8, 0x0b05, 0x0b2f, 0x0b4d, + // Entry 5540 - 557F + 0x0b79, 0x0b9a, 0x0bc1, 0x0bdc, 0x0c09, 0x0c23, 0x0c3d, 0x0c5a, + 0x0c74, 0x0c99, 0x0caf, 0x0cc5, 0x0cdb, 0x0cf1, 0x0d07, 0x0d1d, + 0x0d33, 0x0d5b, 0x0d71, 0x0d94, 0x0daa, 0x0dc0, 0x0dd6, 0x0dec, + 0x0e02, 0x0e18, 0x0e2e, 0x0e44, 0x0e5a, 0x0e70, 0x0e86, 0x0e9c, + 0x0eb2, 0x0ec8, 0x0ede, 0x0ef4, 0x0f0a, 0x0f20, 0x0f36, 0x0f55, + 0x0f75, 0x0f9e, 0x0fd0, 0x0ff7, 0x100d, 0x1023, 0x1039, 0x104f, + 0x1065, 0x107b, 0x1091, 0x10a7, 0x10bd, 0x10d3, 0x10e9, 0x1109, + 0x1129, 0x1154, 0x1174, 0x1193, 0x11b3, 0x11d2, 0x11f1, 0x1210, + // Entry 5580 - 55BF + 0x1232, 0x1248, 0x125e, 0x127e, 0x129d, 0x12bd, 0x12e2, 0x1301, + 0x1333, 0x135d, 0x137c, 0x139e, 0x13b4, 0x13ca, 0x13eb, 0x1408, + 0x1424, 0x1440, 0x146e, 0x148b, 0x14a5, 0x14cb, 0x14f2, 0x1516, + 0x1536, 0x1555, 0x1573, 0x1594, 0x15b7, 0x15d7, 0x15ff, 0x161c, + 0x1640, 0x1661, 0x1681, 0x169c, 0x16c0, 0x16dd, 0x16f5, 0x1710, + 0x172c, 0x1748, 0x1763, 0x1788, 0x17ac, 0x17c8, 0x17e4, 0x1806, + 0x1829, 0x1844, 0x185f, 0x187d, 0x189d, 0x18b9, 0x18cb, 0x18ed, + 0x1915, 0x0115, 0x012d, 0x0145, 0x015d, 0x0175, 0x018d, 0x01a6, + // Entry 55C0 - 55FF + 0x01be, 0x01d7, 0x01f0, 0x0208, 0x0220, 0x0238, 0x0250, 0x0268, + 0x0280, 0x0298, 0x02b0, 0x02c9, 0x02e1, 0x02f9, 0x0311, 0x032a, + 0x0342, 0x035a, 0x0372, 0x038a, 0x03a2, 0x03ba, 0x03d2, 0x03ea, + 0x0402, 0x041a, 0x0432, 0x044a, 0x0462, 0x047a, 0x0492, 0x04ab, + 0x04c3, 0x04db, 0x04f3, 0x050b, 0x0523, 0x053b, 0x0553, 0x056b, + 0x0584, 0x059c, 0x05b4, 0x05cd, 0x05e5, 0x05fe, 0x0616, 0x062e, + 0x0647, 0x065f, 0x0677, 0x068f, 0x06a7, 0x06bf, 0x06d7, 0x06ef, + 0x0707, 0x071f, 0x0737, 0x074f, 0x0767, 0x077f, 0x0797, 0x07af, + // Entry 5600 - 563F + 0x07c7, 0x07df, 0x07f7, 0x080f, 0x0827, 0x083f, 0x0857, 0x086f, + 0x0887, 0x089f, 0x08b7, 0x08cf, 0x08e7, 0x08ff, 0x0917, 0x0930, + 0x0948, 0x0960, 0x0978, 0x0990, 0x09a8, 0x09c0, 0x09d9, 0x09f2, + 0x0a0b, 0x0a23, 0x0a3b, 0x0a53, 0x0a6b, 0x0a83, 0x0a9b, 0x0ab3, + 0x0acb, 0x0ae4, 0x0afc, 0x0b14, 0x0b2c, 0x0b44, 0x0b5c, 0x0b74, + 0x0b8c, 0x0ba4, 0x0bbc, 0x0bd4, 0x0bec, 0x0c04, 0x0c1c, 0x0c34, + 0x0c4c, 0x0c64, 0x0c7c, 0x0c94, 0x0cac, 0x0cc4, 0x0cdc, 0x0cf4, + 0x0d0d, 0x0d25, 0x0d3d, 0x0d55, 0x0d6d, 0x0d85, 0x0d9d, 0x0db5, + // Entry 5640 - 567F + 0x0dcd, 0x0de5, 0x0dfd, 0x0e15, 0x0e2d, 0x0e45, 0x0e5d, 0x0e75, + 0x0e8d, 0x0ea5, 0x0ebd, 0x0ed5, 0x0eee, 0x0f06, 0x0f1e, 0x0f36, + 0x0f4e, 0x0f67, 0x0f7f, 0x0f97, 0x0faf, 0x0fc8, 0x0fe0, 0x0ff8, + 0x1010, 0x1028, 0x1040, 0x1058, 0x1070, 0x1088, 0x10a0, 0x10b8, + 0x10d0, 0x10e8, 0x1101, 0x1119, 0x1131, 0x114a, 0x1162, 0x117a, + 0x1193, 0x11ac, 0x11c5, 0x11de, 0x11f7, 0x1210, 0x1229, 0x1242, + 0x125b, 0x1273, 0x128b, 0x12a4, 0x12bc, 0x12d4, 0x12ed, 0x1305, + 0x131d, 0x1335, 0x134d, 0x1365, 0x137d, 0x1395, 0x13ad, 0x13c5, + // Entry 5680 - 56BF + 0x13dd, 0x13f5, 0x140d, 0x1425, 0x143e, 0x1457, 0x1470, 0x1489, + 0x14a2, 0x14bb, 0x14d4, 0x14ed, 0x1505, 0x151d, 0x1535, 0x154d, + 0x1565, 0x157d, 0x1595, 0x15ad, 0x15c6, 0x15de, 0x15f7, 0x160f, + 0x1627, 0x163f, 0x1657, 0x166f, 0x1687, 0x169f, 0x16b8, 0x16d0, + 0x16e9, 0x1701, 0x1719, 0x1731, 0x174a, 0x1762, 0x177a, 0x1792, + 0x17aa, 0x17c2, 0x17da, 0x17f2, 0x180a, 0x1823, 0x183b, 0x1853, + 0x186b, 0x1883, 0x189b, 0x18b3, 0x18cc, 0x18e4, 0x18fc, 0x1914, + 0x192c, 0x1945, 0x195d, 0x1975, 0x198d, 0x19a5, 0x19bd, 0x19d5, + // Entry 56C0 - 56FF + 0x19ed, 0x1a05, 0x1a1d, 0x1a35, 0x1a4d, 0x1a65, 0x1a7e, 0x1a96, + 0x1aae, 0x1ac6, 0x1ade, 0x1af6, 0x1b0e, 0x1b26, 0x1b3e, 0x1b57, + 0x1b6f, 0x1b87, 0x1b9f, 0x1bb7, 0x1bcf, 0x1be7, 0x1bff, 0x1c17, + 0x1c2f, 0x1c47, 0x1c60, 0x1c78, 0x1c90, 0x1ca8, 0x1cc0, 0x1cd8, + 0x1cf0, 0x1d09, 0x1d21, 0x1d3a, 0x1d52, 0x1d6a, 0x1d82, 0x1d9a, + 0x1db2, 0x1dca, 0x1de2, 0x1dfb, 0x1e13, 0x1e2c, 0x1e44, 0x1e5d, + 0x1e75, 0x1e8d, 0x1ea5, 0x1ebd, 0x1ed6, 0x1eef, 0x1f08, 0x1f20, + 0x1f38, 0x1f50, 0x1f68, 0x1f80, 0x1f98, 0x1fb0, 0x1fc8, 0x1fe1, + // Entry 5700 - 573F + 0x1ff9, 0x2012, 0x202b, 0x2043, 0x205b, 0x2073, 0x208b, 0x20a4, + 0x20bc, 0x20d4, 0x20ec, 0x2104, 0x211c, 0x2134, 0x214c, 0x2164, + 0x217c, 0x2195, 0x21ad, 0x21c5, 0x21dd, 0x21f5, 0x220d, 0x2225, + 0x223e, 0x2256, 0x226e, 0x2286, 0x229e, 0x22b6, 0x22ce, 0x22e6, + 0x22fe, 0x2316, 0x232e, 0x2347, 0x235f, 0x2378, 0x2390, 0x23a8, + 0x23c0, 0x23d8, 0x23f0, 0x2408, 0x2421, 0x2439, 0x2451, 0x246a, + 0x2482, 0x249a, 0x24b2, 0x24ca, 0x24e2, 0x24fa, 0x2512, 0x252a, + 0x2542, 0x255a, 0x2572, 0x258a, 0x25a2, 0x25ba, 0x25d2, 0x25eb, + // Entry 5740 - 577F + 0x2603, 0x261b, 0x2633, 0x264b, 0x2663, 0x267b, 0x2693, 0x26ac, + 0x26c4, 0x26dc, 0x26f4, 0x270c, 0x2725, 0x273d, 0x2756, 0x276e, + 0x2787, 0x279f, 0x27b7, 0x27cf, 0x27e7, 0x27ff, 0x2817, 0x282f, + 0x2847, 0x285f, 0x2877, 0x288f, 0x28a7, 0x28bf, 0x28d7, 0x28f0, + 0x2908, 0x2920, 0x2938, 0x2950, 0x2969, 0x2981, 0x2999, 0x29b1, + 0x29ca, 0x29e3, 0x29fb, 0x2a13, 0x2a2c, 0x2a44, 0x2a5c, 0x2a74, + 0x2a8c, 0x2aa4, 0x2abc, 0x2ad4, 0x2aed, 0x2b05, 0x2b1d, 0x2b36, + 0x2b4f, 0x2b68, 0x2b81, 0x2b9a, 0x2bb3, 0x2bcc, 0x2be5, 0x2bfd, + // Entry 5780 - 57BF + 0x2c15, 0x2c2d, 0x2c46, 0x2c5e, 0x2c77, 0x2c8f, 0x2ca8, 0x2cc0, + 0x2cd8, 0x2cf0, 0x2d08, 0x2d20, 0x2d39, 0x2d51, 0x2d69, 0x2d82, + 0x2d9a, 0x2db2, 0x2dca, 0x2de2, 0x2dfb, 0x2e13, 0x2e2b, 0x2e43, + 0x2e5c, 0x2e74, 0x2e8c, 0x2ea5, 0x2ebe, 0x2ed6, 0x2eee, 0x2f06, + 0x2f1e, 0x2f36, 0x2f4e, 0x2f66, 0x2f7f, 0x2f97, 0x2faf, 0x2fc7, + 0x2fdf, 0x2ff7, 0x300f, 0x3027, 0x303f, 0x3057, 0x306f, 0x3087, + 0x309f, 0x30b7, 0x30cf, 0x30e7, 0x30ff, 0x3117, 0x312f, 0x3147, + 0x315f, 0x3177, 0x318f, 0x31a8, 0x31c1, 0x31d9, 0x31f1, 0x3209, + // Entry 57C0 - 57FF + 0x3221, 0x3239, 0x3251, 0x3269, 0x3282, 0x329a, 0x32b2, 0x32ca, + 0x32e2, 0x32fa, 0x3312, 0x332a, 0x3342, 0x335b, 0x3373, 0x338c, + 0x33a4, 0x33bd, 0x33d5, 0x33ed, 0x3406, 0x341e, 0x3436, 0x344e, + 0x3466, 0x347e, 0x3497, 0x34b0, 0x34c9, 0x34e2, 0x34fb, 0x3515, + 0x352e, 0x3547, 0x3560, 0x3579, 0x3592, 0x35ab, 0x35c4, 0x35dd, + 0x35f6, 0x360f, 0x3628, 0x3641, 0x365b, 0x3674, 0x368d, 0x36a6, + 0x36bf, 0x36d8, 0x36f1, 0x370a, 0x3723, 0x373c, 0x3755, 0x376e, + 0x3787, 0x37a0, 0x37ba, 0x37d3, 0x37ed, 0x3806, 0x381f, 0x3838, + // Entry 5800 - 583F + 0x3851, 0x386a, 0x3883, 0x389c, 0x38b6, 0x38cf, 0x38e8, 0x3901, + 0x391a, 0x3934, 0x394c, 0x3965, 0x397d, 0x3995, 0x39ad, 0x39c5, + 0x39de, 0x39f6, 0x3a0f, 0x3a28, 0x3a41, 0x3a5a, 0x3a73, 0x3a8c, + 0x3aa4, 0x3abc, 0x3ad4, 0x3aec, 0x3b05, 0x3b1e, 0x3b37, 0x3b4f, + 0x3b67, 0x3b7f, 0x3b97, 0x3baf, 0x3bc7, 0x3bdf, 0x3bf7, 0x3c0f, + 0x3c28, 0x3c40, 0x3c59, 0x3c71, 0x3c89, 0x3ca1, 0x3cb9, 0x3cd2, + 0x3cea, 0x3d03, 0x3d1b, 0x3d33, 0x3d4b, 0x3d63, 0x3d7c, 0x3d94, + 0x3dad, 0x3dc5, 0x3ddd, 0x3df5, 0x3e0e, 0x3e26, 0x3e3e, 0x3e56, + // Entry 5840 - 587F + 0x3e6f, 0x3e88, 0x3ea1, 0x3eba, 0x3ed2, 0x3eea, 0x3f02, 0x3f1a, + 0x3f32, 0x3f4a, 0x3f62, 0x3f7a, 0x3f92, 0x3faa, 0x3fc2, 0x3fda, + 0x3ff2, 0x400a, 0x4023, 0x403c, 0x4054, 0x406c, 0x4085, 0x409d, + 0x40b5, 0x40ce, 0x40e6, 0x40fe, 0x4116, 0x412e, 0x4146, 0x415e, + 0x4176, 0x418e, 0x41a6, 0x41be, 0x41d6, 0x41ee, 0x4206, 0x421e, + 0x4236, 0x424e, 0x4266, 0x427f, 0x4297, 0x42b0, 0x42c9, 0x42e1, + 0x42f9, 0x4311, 0x4329, 0x4341, 0x4359, 0x4371, 0x438a, 0x43a2, + 0x43ba, 0x43d2, 0x43ea, 0x4402, 0x441a, 0x4433, 0x444b, 0x4463, + // Entry 5880 - 58BF + 0x447b, 0x4493, 0x44ab, 0x44c3, 0x44db, 0x44f3, 0x450b, 0x4523, + 0x453b, 0x4553, 0x456b, 0x4583, 0x459b, 0x45b4, 0x45cc, 0x45e4, + 0x45fc, 0x4614, 0x462d, 0x4645, 0x465d, 0x4675, 0x468d, 0x46a5, + 0x46bd, 0x46d5, 0x46ed, 0x4706, 0x471f, 0x4737, 0x474f, 0x4767, + 0x4780, 0x4798, 0x47b0, 0x47c8, 0x47e0, 0x47f8, 0x4810, 0x4828, + 0x4840, 0x4858, 0x4871, 0x488a, 0x48a2, 0x48ba, 0x48d2, 0x48ea, + 0x4902, 0x491a, 0x4932, 0x494a, 0x4962, 0x497b, 0x4993, 0x49ab, + 0x49c3, 0x49db, 0x49f3, 0x4a0b, 0x4a23, 0x4a3b, 0x4a53, 0x4a6b, + // Entry 58C0 - 58FF + 0x4a83, 0x4a9b, 0x4ab3, 0x4acb, 0x4ae4, 0x4afc, 0x4b14, 0x4b2c, + 0x4b44, 0x4b5d, 0x4b75, 0x4b8e, 0x4ba6, 0x4bbf, 0x4bd7, 0x4bef, + 0x4c08, 0x4c20, 0x4c38, 0x4c50, 0x4c68, 0x4c80, 0x4c99, 0x4cb1, + 0x4cc9, 0x4ce1, 0x4cf9, 0x4d11, 0x4d29, 0x4d41, 0x4d59, 0x4d71, + 0x4d89, 0x4da1, 0x4db9, 0x4dd1, 0x4de9, 0x4e01, 0x4e19, 0x4e32, + 0x4e4a, 0x4e63, 0x4e7b, 0x4e93, 0x4eab, 0x4ec3, 0x4edb, 0x4ef3, + 0x4f0b, 0x4f23, 0x4f3b, 0x4f54, 0x4f6d, 0x4f85, 0x4f9d, 0x4fb5, + 0x4fcd, 0x4fe5, 0x4ffd, 0x5015, 0x502d, 0x5045, 0x505d, 0x5075, + // Entry 5900 - 593F + 0x508d, 0x50a5, 0x50bd, 0x50d5, 0x50ed, 0x5105, 0x511e, 0x5136, + 0x514e, 0x5166, 0x517e, 0x5196, 0x51ae, 0x51c7, 0x51df, 0x51f7, + 0x520f, 0x5228, 0x5240, 0x5258, 0x5270, 0x5288, 0x52a0, 0x52b8, + 0x52d0, 0x52e8, 0x5300, 0x5318, 0x5330, 0x5349, 0x5362, 0x537b, + 0x5394, 0x53ad, 0x53c6, 0x53df, 0x53f8, 0x5411, 0x5429, 0x5442, + 0x545a, 0x5472, 0x548a, 0x54a2, 0x54ba, 0x54d3, 0x54ec, 0x5504, + 0x551c, 0x5534, 0x554c, 0x5565, 0x557e, 0x5597, 0x55af, 0x55c8, + 0x55e1, 0x55f9, 0x5611, 0x5629, 0x5641, 0x5659, 0x5671, 0x5689, + // Entry 5940 - 597F + 0x56a1, 0x56ba, 0x56d3, 0x56ec, 0x5705, 0x571e, 0x5737, 0x5750, + 0x5769, 0x5782, 0x579b, 0x57b4, 0x57cd, 0x57e5, 0x57fd, 0x5815, + 0x582e, 0x5846, 0x585e, 0x5876, 0x588e, 0x58a6, 0x58bf, 0x58d7, + 0x58f0, 0x5908, 0x5921, 0x5939, 0x5952, 0x596a, 0x5982, 0x599b, + 0x59b3, 0x59cb, 0x59e3, 0x59fb, 0x5a14, 0x5a2c, 0x5a44, 0x5a5c, + 0x5a75, 0x5a8d, 0x5aa5, 0x5abd, 0x5ad6, 0x5aee, 0x5b06, 0x5b1e, + 0x5b36, 0x5b4e, 0x5b66, 0x5b7f, 0x5b97, 0x5bb0, 0x5bc8, 0x5be0, + 0x5bf8, 0x5c10, 0x5c29, 0x5c41, 0x5c59, 0x5c71, 0x5c8a, 0x5ca2, + // Entry 5980 - 59BF + 0x5cbb, 0x5cd3, 0x5ceb, 0x5d03, 0x5d1b, 0x5d33, 0x5d4b, 0x5d64, + 0x5d7c, 0x5d94, 0x5dac, 0x5dc4, 0x5ddc, 0x5df5, 0x5e0e, 0x5e26, + 0x5e3e, 0x5e57, 0x5e6f, 0x5e87, 0x5ea0, 0x5eb8, 0x5ed1, 0x5ee9, + 0x5f01, 0x5f19, 0x5f31, 0x5f49, 0x5f61, 0x5f79, 0x5f91, 0x5fa9, + 0x5fc2, 0x5fdb, 0x5ff4, 0x600d, 0x6025, 0x603e, 0x6057, 0x606f, + 0x6088, 0x60a0, 0x60b9, 0x60d1, 0x60e9, 0x6101, 0x6119, 0x6131, + 0x6149, 0x6161, 0x6179, 0x6191, 0x61a9, 0x61c2, 0x61db, 0x61f4, + 0x620d, 0x6226, 0x623f, 0x6258, 0x6271, 0x628a, 0x62a2, 0x62bb, + // Entry 59C0 - 59FF + 0x62d4, 0x62ed, 0x6306, 0x631f, 0x6338, 0x6351, 0x636a, 0x6383, + 0x639c, 0x63b5, 0x63ce, 0x63e7, 0x6400, 0x6419, 0x6433, 0x644d, + 0x6466, 0x647f, 0x6498, 0x64b1, 0x64ca, 0x64e3, 0x64fc, 0x6515, + 0x652e, 0x6547, 0x6560, 0x6579, 0x6592, 0x65ab, 0x65c4, 0x65dd, + 0x65f6, 0x660f, 0x6628, 0x6641, 0x665a, 0x6673, 0x668c, 0x66a5, + 0x66be, 0x02be, 0x02d7, 0x02f0, 0x0309, 0x0322, 0x033b, 0x0354, + 0x036d, 0x0386, 0x039f, 0x03b8, 0x03d2, 0x03eb, 0x0404, 0x041d, + 0x0436, 0x044f, 0x0468, 0x0481, 0x049a, 0x04b3, 0x04cc, 0x04e5, + // Entry 5A00 - 5A3F + 0x04fe, 0x0517, 0x0530, 0x0549, 0x0562, 0x057c, 0x0595, 0x05ae, + 0x05c7, 0x05e0, 0x05f9, 0x0612, 0x062b, 0x0644, 0x065d, 0x0676, + 0x068f, 0x06a8, 0x06c1, 0x06db, 0x06f4, 0x070d, 0x0727, 0x0740, + 0x0759, 0x0772, 0x078b, 0x07a5, 0x07be, 0x07d8, 0x07f2, 0x080b, + 0x0824, 0x083d, 0x0856, 0x086f, 0x0888, 0x08a1, 0x08ba, 0x08d3, + 0x08ec, 0x0905, 0x091e, 0x0937, 0x0950, 0x0969, 0x0982, 0x099b, + 0x09b4, 0x09cd, 0x09e6, 0x0a00, 0x0a1a, 0x0a34, 0x0a4d, 0x0a66, + 0x0a7f, 0x0a98, 0x0ab1, 0x0aca, 0x0ae3, 0x0afc, 0x0b15, 0x0b2e, + // Entry 5A40 - 5A7F + 0x0b47, 0x0b60, 0x0b79, 0x0b92, 0x0bab, 0x0bc4, 0x0bdd, 0x0bf6, + 0x0c0f, 0x0c28, 0x0c41, 0x0c5a, 0x0c73, 0x0c8c, 0x0ca5, 0x0cbe, + 0x0cd7, 0x0cf0, 0x0d09, 0x0d22, 0x0d3b, 0x0d55, 0x0d6e, 0x0d88, + 0x0da1, 0x0dba, 0x0dd4, 0x0ded, 0x0e07, 0x0e20, 0x0e3a, 0x0e53, + 0x0e6c, 0x0e86, 0x0ea0, 0x0eba, 0x0ed3, 0x0eed, 0x0f07, 0x0f20, + 0x0f39, 0x0f53, 0x0f6d, 0x0f87, 0x0fa0, 0x0fb9, 0x0fd2, 0x0fec, + 0x1006, 0x101f, 0x1038, 0x1051, 0x106a, 0x1083, 0x109d, 0x10b6, + 0x10cf, 0x10e8, 0x1101, 0x111a, 0x1133, 0x114c, 0x1165, 0x117e, + // Entry 5A80 - 5ABF + 0x1197, 0x11b1, 0x11ca, 0x11e3, 0x11fc, 0x1215, 0x122e, 0x1247, + 0x1260, 0x1279, 0x1292, 0x12ab, 0x12c5, 0x12de, 0x12f7, 0x1310, + 0x1329, 0x1342, 0x135b, 0x1374, 0x138d, 0x13a6, 0x13bf, 0x13d8, + 0x13f1, 0x140a, 0x1423, 0x143c, 0x1455, 0x146e, 0x1487, 0x14a0, + 0x14b9, 0x14d2, 0x14eb, 0x1504, 0x151d, 0x1536, 0x154f, 0x1568, + 0x1581, 0x159a, 0x15b3, 0x15cc, 0x15e5, 0x15fe, 0x1617, 0x1630, + 0x1649, 0x1662, 0x167b, 0x1694, 0x16ad, 0x16c6, 0x16df, 0x16f8, + 0x1711, 0x172a, 0x1743, 0x175c, 0x1775, 0x178e, 0x17a7, 0x17c0, + // Entry 5AC0 - 5AFF + 0x17d9, 0x17f2, 0x180b, 0x1824, 0x183d, 0x1856, 0x186f, 0x1888, + 0x18a1, 0x18ba, 0x18d3, 0x18ec, 0x1905, 0x191e, 0x1937, 0x1950, + 0x196a, 0x1984, 0x199d, 0x19b6, 0x19cf, 0x19e8, 0x1a01, 0x1a1b, + 0x1a34, 0x1a4d, 0x1a67, 0x1a80, 0x1a99, 0x1ab2, 0x1acb, 0x1ae4, + 0x1afd, 0x1b17, 0x1b30, 0x1b4a, 0x1b63, 0x1b7c, 0x1b95, 0x1bae, + 0x1bc7, 0x1be0, 0x1bf9, 0x1c12, 0x1c2b, 0x1c44, 0x1c5d, 0x1c77, + 0x1c90, 0x1ca9, 0x1cc2, 0x1cdb, 0x1cf4, 0x1d0d, 0x1d26, 0x1d3f, + 0x1d58, 0x1d71, 0x1d8a, 0x1da3, 0x1dbc, 0x1dd5, 0x1dee, 0x1e07, + // Entry 5B00 - 5B3F + 0x1e20, 0x1e39, 0x1e52, 0x1e6b, 0x1e84, 0x1e9d, 0x1eb6, 0x1ecf, + 0x1ee8, 0x1f01, 0x1f1a, 0x1f33, 0x1f4c, 0x1f65, 0x1f7e, 0x1f97, + 0x1fb0, 0x1fc9, 0x1fe2, 0x1ffb, 0x2014, 0x202d, 0x2046, 0x205f, + 0x2079, 0x2092, 0x20ab, 0x20c4, 0x20dd, 0x20f6, 0x210f, 0x2128, + 0x2141, 0x215a, 0x2173, 0x218c, 0x21a5, 0x21be, 0x21d7, 0x21f0, + 0x2209, 0x2222, 0x223b, 0x2254, 0x226d, 0x2286, 0x229f, 0x22b9, + 0x22d2, 0x22eb, 0x2304, 0x231d, 0x2336, 0x2350, 0x2369, 0x2382, + 0x239b, 0x23b4, 0x23cd, 0x23e7, 0x2400, 0x2419, 0x2432, 0x244b, + // Entry 5B40 - 5B7F + 0x2464, 0x247d, 0x2496, 0x24af, 0x24c8, 0x24e1, 0x24fb, 0x2514, + 0x252d, 0x2546, 0x255f, 0x2578, 0x2591, 0x25aa, 0x25c3, 0x25dc, + 0x25f5, 0x260e, 0x2627, 0x2640, 0x2659, 0x2672, 0x268b, 0x26a4, + 0x26bd, 0x26d6, 0x26ef, 0x2709, 0x2722, 0x273b, 0x2755, 0x276f, + 0x2789, 0x27a2, 0x27bb, 0x27d4, 0x27ed, 0x2807, 0x2821, 0x283b, + 0x2854, 0x286d, 0x2886, 0x289f, 0x28b8, 0x28d1, 0x28ea, 0x2903, + 0x291c, 0x2935, 0x294e, 0x2967, 0x2980, 0x2999, 0x29b2, 0x29cb, + 0x29e4, 0x29fd, 0x2a16, 0x2a2f, 0x2a48, 0x2a61, 0x2a7a, 0x2a94, + // Entry 5B80 - 5BBF + 0x2aad, 0x2ac6, 0x2adf, 0x2af8, 0x2b11, 0x2b2b, 0x2b44, 0x2b5d, + 0x2b76, 0x2b8f, 0x2ba9, 0x2bc2, 0x2bdb, 0x2bf4, 0x2c0e, 0x2c27, + 0x2c40, 0x2c59, 0x2c72, 0x2c8b, 0x2ca4, 0x2cbd, 0x2cd6, 0x2cef, + 0x2d08, 0x2d22, 0x2d3b, 0x2d5d, 0x2d77, 0x2d90, 0x2da9, 0x2dc2, + 0x2ddc, 0x2df5, 0x2e0e, 0x2e27, 0x2e40, 0x2e59, 0x2e72, 0x2e91, + 0x2eaa, 0x2ec3, 0x2edc, 0x2ef5, 0x2f0e, 0x2f27, 0x2f40, 0x2f59, + 0x2f72, 0x2f8b, 0x2fa4, 0x2fbd, 0x2fd6, 0x2fef, 0x3008, 0x3021, + 0x304e, 0x307a, 0x3093, 0x30ac, 0x30c5, 0x30de, 0x30f7, 0x3110, + // Entry 5BC0 - 5BFF + 0x3129, 0x3142, 0x315b, 0x3174, 0x318d, 0x31a6, 0x31bf, 0x31d8, + 0x31f1, 0x320a, 0x3223, 0x323c, 0x3255, 0x326e, 0x3287, 0x32a0, + 0x32b9, 0x32d2, 0x32eb, 0x3304, 0x331d, 0x3336, 0x334f, 0x3368, + 0x3381, 0x339a, 0x33b3, 0x33cc, 0x33e5, 0x33fe, 0x3417, 0x3430, + 0x3449, 0x3462, 0x347c, 0x3495, 0x34ae, 0x34c7, 0x34e0, 0x34f9, + 0x3512, 0x352b, 0x3545, 0x355e, 0x3577, 0x3590, 0x35a9, 0x35c2, + 0x35db, 0x35f4, 0x360d, 0x3626, 0x363f, 0x3658, 0x3671, 0x368a, + 0x36a3, 0x36bc, 0x36d5, 0x36ee, 0x3707, 0x3720, 0x3739, 0x3752, + // Entry 5C00 - 5C3F + 0x376b, 0x3784, 0x379d, 0x37b6, 0x37cf, 0x37e8, 0x3801, 0x381a, + 0x3833, 0x384c, 0x3865, 0x387e, 0x3897, 0x38b0, 0x38c9, 0x38e2, + 0x38fb, 0x3914, 0x392d, 0x3946, 0x395f, 0x3978, 0x3991, 0x39aa, + 0x39c3, 0x39dc, 0x39f5, 0x3a0e, 0x3a27, 0x3a40, 0x3a59, 0x3a72, + 0x3a8b, 0x3aa4, 0x3abd, 0x3ad6, 0x3aef, 0x3b08, 0x3b21, 0x3b3a, + 0x3b53, 0x3b6c, 0x3b85, 0x3b9e, 0x3bb7, 0x3bd0, 0x3be9, 0x3c02, + 0x3c1b, 0x001b, 0x003a, 0x0058, 0x0081, 0x00a7, 0x00c4, 0x00e3, + 0x0101, 0x011e, 0x0140, 0x016b, 0x0193, 0x01b2, 0x01d0, 0x01eb, + // Entry 5C40 - 5C7F + 0x0208, 0x0224, 0x0243, 0x025f, 0x027b, 0x029a, 0x02b5, 0x02cd, + 0x02ec, 0x0306, 0x0322, 0x0340, 0x035c, 0x0377, 0x0395, 0x03b1, + 0x03d2, 0x03f0, 0x040e, 0x042f, 0x044d, 0x0466, 0x0481, 0x04a2, + 0x04be, 0x04d7, 0x04f7, 0x0518, 0x0530, 0x054d, 0x0566, 0x057e, + 0x0598, 0x05b2, 0x05cd, 0x05eb, 0x0606, 0x061e, 0x063f, 0x0658, + 0x0674, 0x068d, 0x06a8, 0x06c1, 0x06d9, 0x06f2, 0x070a, 0x0728, + 0x0743, 0x075c, 0x077f, 0x07a3, 0x07be, 0x07da, 0x07f6, 0x0810, + 0x082a, 0x0843, 0x085e, 0x0877, 0x0892, 0x08aa, 0x08c3, 0x08de, + // Entry 5C80 - 5CBF + 0x08f7, 0x090f, 0x0927, 0x0940, 0x0958, 0x096f, 0x0987, 0x099f, + 0x09b8, 0x09d3, 0x09f4, 0x0a0d, 0x0a28, 0x0a46, 0x0a65, 0x0a7f, + 0x0a9a, 0x0ab6, 0x0ace, 0x0ae9, 0x0b0b, 0x0b2e, 0x0b4f, 0x0b6c, + 0x0b8c, 0x0ba4, 0x0bc1, 0x0bdf, 0x0bfd, 0x0c1d, 0x0c3e, 0x0c5c, + 0x0c77, 0x0c94, 0x0cb0, 0x0ccb, 0x0ce5, 0x0cfe, 0x0d1f, 0x0d3d, + 0x0d57, 0x0d73, 0x0d8c, 0x0da5, 0x0dc0, 0x0de1, 0x0dfc, 0x0e14, + 0x0e2f, 0x0e4c, 0x0e68, 0x0e84, 0x0ea4, 0x0ebd, 0x0ed7, 0x0eef, + 0x0f0a, 0x0f2a, 0x0f47, 0x0f5f, 0x0f7a, 0x0f93, 0x0faa, 0x0fc2, + // Entry 5CC0 - 5CFF + 0x0fdb, 0x0ffc, 0x1014, 0x102c, 0x1049, 0x1063, 0x1081, 0x109b, + 0x10b6, 0x10d3, 0x10ed, 0x1113, 0x1130, 0x114a, 0x1166, 0x1181, + 0x11a7, 0x11c6, 0x11df, 0x11fa, 0x1218, 0x1232, 0x124b, 0x1267, + 0x1280, 0x1299, 0x12b4, 0x12cc, 0x12e5, 0x12ff, 0x131b, 0x1335, + 0x1352, 0x136c, 0x138d, 0x13a6, 0x13c3, 0x13e2, 0x13fb, 0x1416, + 0x142e, 0x144b, 0x1467, 0x1484, 0x14a0, 0x14ba, 0x14d2, 0x14ec, + 0x1504, 0x151e, 0x1537, 0x1554, 0x156f, 0x1586, 0x15a0, 0x15b8, + 0x15d4, 0x15f3, 0x160e, 0x1626, 0x163f, 0x1659, 0x1674, 0x168b, + // Entry 5D00 - 5D3F + 0x16a3, 0x16bc, 0x16d5, 0x16ed, 0x1709, 0x1722, 0x173b, 0x175c, + 0x1775, 0x178e, 0x17ab, 0x17c3, 0x17dc, 0x17f6, 0x1811, 0x1829, + 0x1844, 0x185f, 0x187b, 0x1895, 0x18ae, 0x18ce, 0x18e8, 0x1902, + 0x191b, 0x1934, 0x194d, 0x1969, 0x1989, 0x19a2, 0x19ba, 0x19d2, + 0x19ea, 0x1a02, 0x1a1a, 0x1a33, 0x1a4b, 0x1a63, 0x1a7c, 0x1a96, + 0x1aaf, 0x1ac9, 0x1ae3, 0x1b00, 0x1b19, 0x1b33, 0x1b4d, 0x1b66, + 0x1b80, 0x1b9f, 0x1bb8, 0x1bd3, 0x1bec, 0x1c04, 0x1c1c, 0x1c38, + 0x1c51, 0x1c69, 0x1c83, 0x1c9d, 0x1cb9, 0x1cd2, 0x1ced, 0x1d05, + // Entry 5D40 - 5D7F + 0x1d21, 0x1d41, 0x1d5d, 0x1d74, 0x1d8d, 0x1da8, 0x1dc6, 0x1ddf, + 0x1dfb, 0x1e16, 0x1e2f, 0x1e48, 0x1e63, 0x1e7c, 0x1e97, 0x1eaf, + 0x1ec7, 0x1ee2, 0x1efb, 0x1f15, 0x1f2e, 0x1f49, 0x1f61, 0x1f7b, + 0x1f94, 0x1fad, 0x1fc7, 0x1fe4, 0x1fff, 0x201a, 0x2033, 0x204b, + 0x2066, 0x207f, 0x2097, 0x20b2, 0x20cc, 0x20e8, 0x2101, 0x2119, + 0x2132, 0x214b, 0x2165, 0x217e, 0x2196, 0x21b1, 0x21cc, 0x21e5, + 0x21fe, 0x2216, 0x222f, 0x2248, 0x2264, 0x227e, 0x2297, 0x22b2, + 0x22cc, 0x22e6, 0x2301, 0x2318, 0x2334, 0x234c, 0x2364, 0x237c, + // Entry 5D80 - 5DBF + 0x2394, 0x23ae, 0x23c8, 0x23de, 0x23f6, 0x240d, 0x2426, 0x2440, + 0x2459, 0x2470, 0x2488, 0x24a1, 0x24b9, 0x24d0, 0x24e9, 0x2501, + 0x251a, 0x2532, 0x254f, 0x2566, 0x257f, 0x259e, 0x25b6, 0x25ce, + 0x25e7, 0x2600, 0x261a, 0x2632, 0x264a, 0x2663, 0x267b, 0x2693, + 0x26ab, 0x26c6, 0x26df, 0x26f8, 0x2710, 0x2729, 0x2743, 0x275b, + 0x2773, 0x2790, 0x27a9, 0x27c1, 0x27da, 0x27f2, 0x280d, 0x2826, + 0x283f, 0x285a, 0x2873, 0x288d, 0x28a8, 0x28c2, 0x28db, 0x28f3, + 0x290f, 0x2928, 0x2942, 0x295f, 0x297b, 0x2993, 0x29ac, 0x29c8, + // Entry 5DC0 - 5DFF + 0x29e1, 0x2a00, 0x2a18, 0x2a30, 0x2a52, 0x2a76, 0x2a8f, 0x2aa9, + 0x2ac2, 0x2adc, 0x2af3, 0x2b0d, 0x2b27, 0x2b41, 0x2b5c, 0x2b76, + 0x2b8f, 0x2ba8, 0x2bbf, 0x2bd8, 0x2bf4, 0x2c11, 0x2c2d, 0x2c47, + 0x2c60, 0x2c79, 0x2c92, 0x2cab, 0x2cc3, 0x2cdc, 0x2cf4, 0x2d14, + 0x2d2c, 0x2d46, 0x2d60, 0x2d7a, 0x2d93, 0x2dae, 0x2dc6, 0x2de0, + 0x2dfa, 0x2e12, 0x2e2a, 0x2e46, 0x2e5f, 0x2e76, 0x2e8f, 0x2ea8, + 0x2ec1, 0x2edd, 0x2efd, 0x2f16, 0x2f2f, 0x2f48, 0x2f61, 0x2f79, + 0x2f92, 0x2fad, 0x2fc6, 0x2fde, 0x2ff7, 0x3011, 0x3029, 0x3042, + // Entry 5E00 - 5E3F + 0x305b, 0x3076, 0x3090, 0x30ae, 0x30ca, 0x30e2, 0x30fb, 0x3111, + 0x3129, 0x313f, 0x3155, 0x316d, 0x318b, 0x31a3, 0x31bb, 0x31dd, + 0x31f6, 0x320f, 0x3229, 0x3243, 0x3264, 0x3282, 0x329a, 0x32b2, + 0x32cb, 0x32e4, 0x3303, 0x331b, 0x3333, 0x334b, 0x3363, 0x337a, + 0x3391, 0x33aa, 0x33c2, 0x33dd, 0x33f5, 0x340d, 0x3426, 0x3444, + 0x345b, 0x3472, 0x348a, 0x34a1, 0x34b9, 0x34d0, 0x34e8, 0x3500, + 0x3517, 0x352f, 0x3547, 0x355f, 0x3578, 0x358f, 0x35a5, 0x35bc, + 0x35d3, 0x35eb, 0x3603, 0x361b, 0x3632, 0x364a, 0x3663, 0x367d, + // Entry 5E40 - 5E7F + 0x3695, 0x36ae, 0x36c8, 0x36de, 0x36f6, 0x370f, 0x3726, 0x373f, + 0x3758, 0x3770, 0x3789, 0x37a0, 0x37ba, 0x37d2, 0x37ea, 0x3801, + 0x381a, 0x3833, 0x384c, 0x3864, 0x387c, 0x3893, 0x38aa, 0x38c3, + 0x38db, 0x38f7, 0x3910, 0x3928, 0x3941, 0x3959, 0x3970, 0x3987, + 0x399f, 0x39b6, 0x39cf, 0x39e7, 0x39fe, 0x3a15, 0x3a2e, 0x3a46, + 0x3a5e, 0x3a78, 0x3a91, 0x0291, 0x029e, 0x02ac, 0x02b9, 0x02c7, + 0x02d4, 0x02e1, 0x02ed, 0x02fb, 0x030a, 0x0318, 0x0326, 0x0334, + 0x0344, 0x0351, 0x0360, 0x036e, 0x037b, 0x0388, 0x0394, 0x03a1, + // Entry 5E80 - 5EBF + 0x03af, 0x03be, 0x03cb, 0x03d8, 0x03e4, 0x03f1, 0x03ff, 0x040c, + 0x041a, 0x0427, 0x0435, 0x0035, 0x0043, 0x0050, 0x005d, 0x006c, + 0x007a, 0x0088, 0x0095, 0x00a4, 0x00b3, 0x00c1, 0x00c1, 0x00ca, + 0x00da, 0x00da, 0x00ef, 0x0102, 0x0115, 0x0128, 0x013c, 0x0150, + 0x0164, 0x0179, 0x018e, 0x01a1, 0x01b6, 0x01c9, 0x01dc, 0x01f0, + 0x0203, 0x0216, 0x022a, 0x023d, 0x0250, 0x0263, 0x0278, 0x028b, + 0x02a1, 0x02b3, 0x02c5, 0x02d8, 0x02ea, 0x02fd, 0x030f, 0x0321, + 0x0321, 0x033e, 0x035a, 0x0376, 0x0396, 0x03b7, 0x03ca, 0x03ca, + // Entry 5EC0 - 5EFF + 0x03e1, 0x03f8, 0x040e, 0x0424, 0x043b, 0x0452, 0x0468, 0x047e, + 0x0494, 0x04aa, 0x04c1, 0x04d8, 0x04ef, 0x0506, 0x051d, 0x0534, + 0x054b, 0x0562, 0x0578, 0x058e, 0x05a5, 0x05bc, 0x05d2, 0x05e8, + 0x05fe, 0x0614, 0x062b, 0x0642, 0x065c, 0x0678, 0x0692, 0x06ac, + 0x06c7, 0x06e1, 0x06fc, 0x0717, 0x0731, 0x074c, 0x0766, 0x0781, + 0x079d, 0x07b8, 0x07d4, 0x07f0, 0x080a, 0x0823, 0x083d, 0x0857, + 0x0870, 0x0888, 0x08a1, 0x08bb, 0x08d5, 0x08ee, 0x0908, 0x0922, + 0x0942, 0x095d, 0x0978, 0x0992, 0x09af, 0x09ca, 0x09e5, 0x0a01, + // Entry 5F00 - 5F3F + 0x0a1b, 0x0a36, 0x0a50, 0x0a68, 0x0a7e, 0x0a9c, 0x029c, 0x02b3, + 0x02c9, 0x02df, 0x02f7, 0x030e, 0x0325, 0x033b, 0x0353, 0x036b, + 0x0382, 0x0382, 0x039a, 0x03b6, 0x03d7, 0x03f3, 0x0417, 0x0437, + 0x0454, 0x0054, 0x006d, 0x0083, 0x0098, 0x00b9, 0x00d3, 0x00e9, + 0x00ff, 0x0115, 0x012b, 0x013f, 0x015c, 0x0178, 0x018d, 0x01a2, + 0x01b7, 0x01df, 0x0200, 0x021a, 0x0239, 0x0257, 0x0275, 0x0275, + 0x0292, 0x02ad, 0x02c7, 0x02e2, 0x02fe, 0x0318, 0x0333, 0x034e, + 0x0369, 0x0384, 0x039f, 0x03ba, 0x03d4, 0x03ee, 0x0408, 0x0422, + // Entry 5F40 - 5F7F + 0x043d, 0x0457, 0x0471, 0x0071, 0x007f, 0x008d, 0x009e, 0x00ad, + 0x00bb, 0x00ca, 0x00e0, 0x00ee, 0x00fc, 0x010b, 0x0119, 0x0127, + 0x0139, 0x014a, 0x0159, 0x0168, 0x0176, 0x0185, 0x0197, 0x01ad, + 0x01bc, 0x01cc, 0x01da, 0x01e9, 0x01f8, 0x0208, 0x0218, 0x0228, + 0x0239, 0x024a, 0x0258, 0x0266, 0x0277, 0x0285, 0x0294, 0x02a3, + 0x02b3, 0x02ca, 0x02d8, 0x02e6, 0x02f5, 0x0305, 0x0315, 0x0325, + 0x0334, 0x0344, 0x0354, 0x0364, 0x0377, 0x038a, 0x03a3, 0x03b2, + 0x03c1, 0x03d0, 0x03e0, 0x03ef, 0x03fe, 0x0410, 0x041e, 0x042c, + // Entry 5F80 - 5FBF + 0x043b, 0x044a, 0x045a, 0x0471, 0x0481, 0x0492, 0x04a0, 0x04ae, + 0x04bd, 0x00bd, 0x00d5, 0x00e9, 0x0103, 0x0120, 0x0131, 0x0143, + 0x0156, 0x0168, 0x017b, 0x018c, 0x019e, 0x01b0, 0x01c1, 0x01d2, + 0x01e4, 0x01f7, 0x020a, 0x021b, 0x022d, 0x0240, 0x0254, 0x0266, + 0x0278, 0x028a, 0x029c, 0x02af, 0x02c0, 0x02d2, 0x02e5, 0x02f9, + 0x030b, 0x031e, 0x0331, 0x0342, 0x0354, 0x0366, 0x0379, 0x038c, + 0x03a7, 0x03b9, 0x03d3, 0x03e5, 0x03f7, 0x0409, 0x041b, 0x042c, + 0x043e, 0x003e, 0x004d, 0x0060, 0x006f, 0x007e, 0x0090, 0x00a2, + // Entry 5FC0 - 5FFF + 0x00b4, 0x00c6, 0x00d8, 0x00ea, 0x00fc, 0x0117, 0x0132, 0x014d, + 0x0168, 0x0183, 0x019e, 0x019e, 0x01b3, 0x01b3, 0x01c7, 0x01db, + 0x01ef, 0x0203, 0x0217, 0x022b, 0x023f, 0x0253, 0x0267, 0x027b, + 0x028f, 0x02a3, 0x02b7, 0x02cb, 0x02df, 0x02f3, 0x0307, 0x031b, + 0x032f, 0x0343, 0x0357, 0x036b, 0x037f, 0x0393, 0x03a7, 0x03bb, + 0x03cf, 0x03e3, 0x03f7, 0x040b, 0x041f, 0x0433, 0x0447, 0x045b, + 0x046f, 0x0483, 0x0497, 0x04ab, 0x04bf, 0x04d3, 0x04e7, 0x04fb, + 0x050f, 0x0523, 0x0537, 0x054b, 0x055f, 0x0573, 0x0587, 0x059b, + // Entry 6000 - 603F + 0x05af, 0x05c3, 0x05d7, 0x05eb, 0x05ff, 0x0613, 0x0627, 0x063b, + 0x064f, 0x0663, 0x0677, 0x068b, 0x069f, 0x06b3, 0x06c7, 0x06db, + 0x06ef, 0x0703, 0x0717, 0x072b, 0x073f, 0x0753, 0x0767, 0x077b, + 0x078f, 0x07a3, 0x07b7, 0x07cb, 0x07df, 0x07f3, 0x0807, 0x081b, + 0x082f, 0x0843, 0x0857, 0x086b, 0x087f, 0x0893, 0x08a7, 0x08bb, + 0x08cf, 0x08e3, 0x08f7, 0x090b, 0x091f, 0x0933, 0x0947, 0x095b, + 0x096f, 0x0983, 0x0997, 0x09ab, 0x09bf, 0x09d3, 0x09e7, 0x09fb, + 0x0a0f, 0x0a23, 0x0a37, 0x0a4b, 0x0a5f, 0x0a73, 0x0a87, 0x0a9b, + // Entry 6040 - 607F + 0x0aaf, 0x0ac3, 0x0ad7, 0x0aeb, 0x0aff, 0x0b13, 0x0b27, 0x0b3b, + 0x0b4f, 0x0b63, 0x0b77, 0x0b8b, 0x0b9f, 0x0bb3, 0x0bc7, 0x0bdb, + 0x0bef, 0x0c03, 0x0c17, 0x0c2b, 0x0c3f, 0x0c53, 0x0c67, 0x0c7b, + 0x0c8f, 0x0ca3, 0x0cb7, 0x0ccb, 0x0cdf, 0x0cf3, 0x0d07, 0x0d1b, + 0x0d2f, 0x0d43, 0x0d57, 0x0d6b, 0x0d7f, 0x0d93, 0x0da7, 0x0dbb, + 0x0dcf, 0x0de3, 0x0df7, 0x0e0b, 0x0e1f, 0x0e33, 0x0e47, 0x0e5b, + 0x0e6f, 0x0e83, 0x0e97, 0x0eab, 0x0ebf, 0x0ed3, 0x0ee7, 0x0efb, + 0x0f0f, 0x0f23, 0x0f37, 0x0f4b, 0x0f5f, 0x0f73, 0x0f87, 0x0f9b, + // Entry 6080 - 60BF + 0x0faf, 0x0fc3, 0x0fd7, 0x0feb, 0x0fff, 0x1013, 0x1027, 0x103b, + 0x104f, 0x1063, 0x1077, 0x108b, 0x109f, 0x10b3, 0x10c7, 0x10db, + 0x10ef, 0x1103, 0x1117, 0x112b, 0x113f, 0x1153, 0x1167, 0x117b, + 0x118f, 0x11a3, 0x11b7, 0x11cb, 0x11df, 0x11f3, 0x1207, 0x121b, + 0x122f, 0x1243, 0x1257, 0x126b, 0x127f, 0x1293, 0x12a7, 0x12bb, + 0x12cf, 0x12e3, 0x12f7, 0x130b, 0x131f, 0x1333, 0x1347, 0x135b, + 0x136f, 0x1383, 0x1397, 0x13ab, 0x13bf, 0x13d3, 0x13e7, 0x13fb, + 0x140f, 0x1423, 0x1437, 0x144b, 0x145f, 0x1473, 0x1487, 0x149b, + // Entry 60C0 - 60FF + 0x14af, 0x14c3, 0x14d7, 0x14eb, 0x14ff, 0x1513, 0x1527, 0x153b, + 0x154f, 0x1563, 0x1577, 0x158b, 0x159f, 0x15b3, 0x15c7, 0x15db, + 0x15ef, 0x1603, 0x1617, 0x162b, 0x163f, 0x1653, 0x1667, 0x167b, + 0x168f, 0x16a3, 0x16b7, 0x16cb, 0x16df, 0x16f3, 0x1707, 0x171b, + 0x172f, 0x1743, 0x1757, 0x176b, 0x177f, 0x1793, 0x17a7, 0x17bb, + 0x17cf, 0x17e3, 0x17f7, 0x180b, 0x181f, 0x1833, 0x1847, 0x185b, + 0x186f, 0x1883, 0x1897, 0x18ab, 0x18bf, 0x18d3, 0x18e7, 0x18fb, + 0x190f, 0x1923, 0x1937, 0x194b, 0x195f, 0x1973, 0x1987, 0x199b, + // Entry 6100 - 613F + 0x19af, 0x19c3, 0x19d7, 0x19eb, 0x19ff, 0x1a13, 0x1a27, 0x1a3b, + 0x1a4f, 0x1a63, 0x1a77, 0x1a8b, 0x1a9f, 0x1ab3, 0x1ac7, 0x1adb, + 0x1aef, 0x1b03, 0x1b17, 0x1b2b, 0x1b3f, 0x1b53, 0x1b67, 0x1b7b, + 0x1b8f, 0x1ba3, 0x1bb7, 0x1bcb, 0x1bdf, 0x1bf3, 0x1c07, 0x1c1b, + 0x1c2f, 0x1c43, 0x1c57, 0x1c6b, 0x1c7f, 0x1c93, 0x1ca7, 0x1cbb, + 0x1ccf, 0x1ce3, 0x1cf7, 0x1d0b, 0x1d1f, 0x1d33, 0x1d47, 0x1d5b, + 0x1d6f, 0x1d83, 0x1d97, 0x1dab, 0x1dbf, 0x1dd3, 0x1de7, 0x1dfb, + 0x1e0f, 0x1e23, 0x1e37, 0x1e4b, 0x1e5f, 0x1e73, 0x1e87, 0x1e9b, + // Entry 6140 - 617F + 0x1eaf, 0x1ec3, 0x1ed7, 0x1eeb, 0x1eff, 0x1f13, 0x1f27, 0x1f3b, + 0x1f4f, 0x1f63, 0x1f77, 0x1f8b, 0x1f9f, 0x1fb3, 0x1fc7, 0x1fdb, + 0x1fef, 0x2003, 0x2017, 0x202b, 0x203f, 0x2053, 0x2067, 0x207b, + 0x208f, 0x20a3, 0x20b7, 0x20cb, 0x20df, 0x20f3, 0x2107, 0x211b, + 0x212f, 0x2143, 0x2157, 0x216b, 0x217f, 0x2193, 0x21a7, 0x21bb, + 0x21cf, 0x21e3, 0x21f7, 0x220b, 0x221f, 0x2233, 0x2247, 0x225b, + 0x226f, 0x2283, 0x2297, 0x22ab, 0x22bf, 0x22d3, 0x22e7, 0x22fb, + 0x230f, 0x2323, 0x2337, 0x234b, 0x235f, 0x2373, 0x2387, 0x239b, + // Entry 6180 - 61BF + 0x23af, 0x23c3, 0x23d7, 0x23eb, 0x23ff, 0x2413, 0x2427, 0x243b, + 0x244f, 0x2463, 0x2477, 0x248b, 0x249f, 0x24b3, 0x24c7, 0x24db, + 0x24ef, 0x2503, 0x2517, 0x252b, 0x253f, 0x2553, 0x2567, 0x257b, + 0x258f, 0x25a3, 0x25b7, 0x25cb, 0x25df, 0x25f3, 0x2607, 0x261b, + 0x262f, 0x2643, 0x2657, 0x266b, 0x267f, 0x2693, 0x26a7, 0x26bb, + 0x26cf, 0x26e3, 0x26f7, 0x270b, 0x271f, 0x2733, 0x2747, 0x275b, + 0x276f, 0x2783, 0x2797, 0x27ab, 0x27bf, 0x27d3, 0x27e7, 0x27fb, + 0x280f, 0x2823, 0x2837, 0x284b, 0x285f, 0x2873, 0x2887, 0x289b, + // Entry 61C0 - 61FF + 0x28af, 0x28c3, 0x28d7, 0x28eb, 0x28ff, 0x2913, 0x2927, 0x293b, + 0x294f, 0x2963, 0x2977, 0x298b, 0x299f, 0x29b3, 0x29c7, 0x29db, + 0x29ef, 0x2a03, 0x2a17, 0x2a2b, 0x2a3f, 0x2a53, 0x2a67, 0x2a7b, + 0x2a8f, 0x2aa3, 0x2ab7, 0x2acb, 0x2adf, 0x2af3, 0x2b07, 0x2b1b, + 0x2b2f, 0x2b43, 0x2b57, 0x2b6b, 0x2b7f, 0x2b93, 0x2ba7, 0x2bbb, + 0x2bcf, 0x2be3, 0x2bf7, 0x2c0b, 0x2c1f, 0x2c33, 0x2c47, 0x2c5b, + 0x2c6f, 0x2c83, 0x2c97, 0x2cab, 0x2cbf, 0x2cd3, 0x2ce7, 0x2cfb, + 0x2d0f, 0x2d23, 0x2d37, 0x2d4b, 0x2d5f, 0x2d73, 0x2d87, 0x2d9b, + // Entry 6200 - 623F + 0x2daf, 0x2dc3, 0x2dd7, 0x2deb, 0x2dff, 0x2e13, 0x2e27, 0x2e3b, + 0x2e4f, 0x2e63, 0x2e77, 0x2e8b, 0x2e9f, 0x2eb3, 0x2ec7, 0x2edb, + 0x2eef, 0x2f03, 0x2f17, 0x2f2b, 0x2f3f, 0x2f53, 0x2f67, 0x2f7b, + 0x2f8f, 0x2fa3, 0x2fb7, 0x2fcb, 0x2fdf, 0x2ff3, 0x3007, 0x301b, + 0x302f, 0x3043, 0x3057, 0x306b, 0x307f, 0x3093, 0x30a7, 0x30bb, + 0x30cf, 0x30e3, 0x30f7, 0x310b, 0x311f, 0x3133, 0x3147, 0x315b, + 0x316f, 0x3183, 0x3197, 0x31ab, 0x31bf, 0x31d3, 0x31e7, 0x31fb, + 0x320f, 0x3223, 0x3237, 0x324b, 0x325f, 0x3273, 0x3287, 0x329b, + // Entry 6240 - 627F + 0x32af, 0x32c3, 0x32d7, 0x32eb, 0x32ff, 0x3313, 0x3327, 0x333b, + 0x334f, 0x3363, 0x3377, 0x338b, 0x339f, 0x33b3, 0x33c7, 0x33db, + 0x33ef, 0x3403, 0x3417, 0x342b, 0x343f, 0x3453, 0x3467, 0x347b, + 0x348f, 0x34a3, 0x34b7, 0x34cb, 0x34df, 0x34f3, 0x3507, 0x351b, + 0x352f, 0x3543, 0x3557, 0x356b, 0x357f, 0x3593, 0x35a7, 0x35bb, + 0x35cf, 0x35e3, 0x35f7, 0x360b, 0x361f, 0x3633, 0x3647, 0x365b, + 0x366f, 0x3683, 0x3697, 0x36ab, 0x36bf, 0x36d3, 0x36e7, 0x36fb, + 0x370f, 0x3723, 0x3737, 0x374b, 0x375f, 0x3773, 0x3787, 0x379b, + // Entry 6280 - 62BF + 0x37af, 0x37c3, 0x37d7, 0x37eb, 0x37ff, 0x3813, 0x3827, 0x383b, + 0x384f, 0x3863, 0x3877, 0x388b, 0x389f, 0x38b3, 0x38c7, 0x38db, + 0x38ef, 0x3903, 0x3917, 0x392b, 0x393f, 0x3953, 0x3967, 0x397b, + 0x398f, 0x39a3, 0x39b7, 0x39cb, 0x39df, 0x39f3, 0x3a07, 0x3a1b, + 0x3a2f, 0x3a43, 0x3a57, 0x3a6b, 0x3a7f, 0x3a93, 0x3aa7, 0x3abb, + 0x3acf, 0x3ae3, 0x3af7, 0x3b0b, 0x3b1f, 0x3b33, 0x3b47, 0x3b5b, + 0x3b6f, 0x3b83, 0x3b97, 0x3bab, 0x3bbf, 0x3bd3, 0x3be7, 0x3bfb, + 0x3c0f, 0x3c23, 0x3c37, 0x3c4b, 0x3c5f, 0x3c73, 0x3c87, 0x3c9b, + // Entry 62C0 - 62FF + 0x3caf, 0x00af, 0x00c8, 0x00e2, 0x00e2, 0x00f3, 0x0104, 0x0115, + 0x0126, 0x0137, 0x0148, 0x0159, 0x016a, 0x017b, 0x018c, 0x019d, + 0x01ae, 0x01c1, 0x01d4, 0x01e7, 0x01fa, 0x020d, 0x021f, 0x0237, + 0x0249, 0x025b, 0x0272, 0x0284, 0x0296, 0x02a8, 0x02b9, 0x02ca, + 0x02db, 0x02ec, 0x02ff, 0x0312, 0x0325, 0x0338, 0x0352, 0x036c, + 0x0386, 0x03b2, 0x03cc, 0x03ec, 0x03ff, 0x0412, 0x0425, 0x0438, + 0x044d, 0x0462, 0x0477, 0x048c, 0x04a8, 0x04bb, 0x04d0, 0x04e3, + 0x04f8, 0x050b, 0x0520, 0x0533, 0x0548, 0x0559, 0x056b, 0x057e, + // Entry 6300 - 633F + 0x0591, 0x05a4, 0x05b9, 0x05ce, 0x05e1, 0x05f6, 0x0607, 0x061f, + 0x0631, 0x0642, 0x0655, 0x0666, 0x0677, 0x0689, 0x06a0, 0x06b2, + 0x06c4, 0x06dc, 0x06f6, 0x070e, 0x0724, 0x0736, 0x0747, 0x0759, + 0x076b, 0x077e, 0x0794, 0x07ae, 0x07c0, 0x07d7, 0x07ea, 0x07fc, + 0x080e, 0x0820, 0x0832, 0x0844, 0x0857, 0x086a, 0x0881, 0x0898, + 0x08af, 0x08c6, 0x08df, 0x08f8, 0x0910, 0x0928, 0x0940, 0x0959, + 0x0159, 0x017e, 0x01a2, 0x01c8, 0x01ea, 0x020c, 0x022f, 0x024d, + 0x0279, 0x0298, 0x02b4, 0x02d2, 0x02f0, 0x0314, 0x0314, 0x032d, + // Entry 6340 - 637F + 0x034c, 0x0365, 0x0383, 0x039a, 0x03b4, 0x03cc, 0x03e4, 0x0400, + 0x0000, 0x0018, 0x0036, 0x004e, 0x006b, 0x0081, 0x009a, 0x00b1, + 0x00c8, 0x00e3, 0x00fb, 0x00fb, 0x0115, 0x0133, 0x0147, 0x016d, + 0x018c, 0x01af, 0x01c9, 0x01e1, 0x01e1, 0x01ff, 0x021e, 0x0242, + 0x026c, 0x0290, 0x02bb, 0x02e0, 0x0301, 0x0323, 0x0347, 0x0369, + 0x0391, 0x03b2, 0x03dc, 0x0404, 0x0423, 0x0445, 0x0468, 0x0491, + 0x04b1, 0x04cf, 0x04f7, 0x051f, 0x053e, 0x055f, 0x057d, 0x05a3, + 0x05cc, 0x05f7, 0x0618, 0x0639, 0x0662, 0x068a, 0x06b3, 0x06dd, + // Entry 6380 - 63BF + 0x06fe, 0x071d, 0x073b, 0x0763, 0x0783, 0x07a8, 0x07c7, 0x07f0, + 0x081d, 0x0848, 0x0866, 0x0884, 0x08a0, 0x08bd, 0x08dd, 0x08ff, + 0x0925, 0x094d, 0x096f, 0x0999, 0x09c1, 0x09e2, 0x0a04, 0x0a25, + 0x0a4f, 0x0a6f, 0x0a9c, 0x0ac9, 0x0ae9, 0x0b06, 0x0b26, 0x0b4c, + 0x0b72, 0x0b97, 0x0bbc, 0x0bdd, 0x0c00, 0x0c22, 0x0c42, 0x0c63, + 0x0c8b, 0x0cb3, 0x0cd8, 0x0d02, 0x0d2a, 0x0d49, 0x0d70, 0x0da1, + 0x0dc1, 0x0de9, 0x0e09, 0x0e29, 0x0e4d, 0x0e70, 0x0e93, 0x0eb9, + 0x0ed8, 0x0efb, 0x0f1b, 0x0f43, 0x0f6b, 0x0f96, 0x0fb6, 0x0fde, + // Entry 63C0 - 63FF + 0x1003, 0x1026, 0x104a, 0x1068, 0x108d, 0x10ae, 0x10d1, 0x10f6, + 0x111f, 0x1147, 0x116e, 0x1199, 0x11c5, 0x11ec, 0x1214, 0x123b, + 0x1261, 0x128e, 0x12b4, 0x12dc, 0x1304, 0x1329, 0x1352, 0x1374, + 0x1396, 0x13b8, 0x13d9, 0x13f9, 0x141c, 0x1443, 0x146c, 0x1491, + 0x14b5, 0x14da, 0x14f7, 0x1515, 0x1534, 0x1555, 0x1575, 0x15a1, + 0x15cc, 0x15f9, 0x1629, 0x1658, 0x167f, 0x16b5, 0x16e8, 0x1709, + 0x1746, 0x1782, 0x17b7, 0x17d9, 0x17f7, 0x181a, 0x183a, 0x1862, + 0x1889, 0x18ac, 0x18d1, 0x18f4, 0x1918, 0x1940, 0x1969, 0x1997, + // Entry 6400 - 643F + 0x19ca, 0x19fa, 0x1a2f, 0x1a5d, 0x1a88, 0x1ab8, 0x1af0, 0x1b1f, + 0x1b4e, 0x1b7e, 0x1bb2, 0x1be0, 0x1c0d, 0x1c38, 0x1c65, 0x1c97, + 0x1ccf, 0x1cfb, 0x1d28, 0x1d57, 0x1d78, 0x1d9b, 0x1dd2, 0x1dfe, + 0x1e2c, 0x1e56, 0x1e82, 0x1eb5, 0x1ee1, 0x1f0d, 0x1f3e, 0x1f6e, + 0x1fa5, 0x1fde, 0x2012, 0x2047, 0x206d, 0x2091, 0x20b6, 0x20db, + 0x2111, 0x2145, 0x2170, 0x219b, 0x21c8, 0x21f9, 0x2235, 0x226a, + 0x22a2, 0x22d3, 0x230f, 0x2344, 0x237c, 0x23a2, 0x23c8, 0x23f4, + 0x2421, 0x2448, 0x2471, 0x249a, 0x24cb, 0x24fd, 0x2531, 0x2559, + // Entry 6440 - 647F + 0x2589, 0x25ba, 0x25ed, 0x2611, 0x2636, 0x2655, 0x2678, 0x269c, + 0x26bf, 0x26e2, 0x2705, 0x2728, 0x274b, 0x2776, 0x279f, 0x27ca, + 0x27f3, 0x2817, 0x283f, 0x003f, 0x005c, 0x0079, 0x0095, 0x00b9, + 0x00d6, 0x00f2, 0x0111, 0x0131, 0x014b, 0x0163, 0x0179, 0x018d, + 0x01a0, 0x01c0, 0x01e0, 0x0200, 0x0216, 0x0232, 0x024c, 0x0262, + 0x0276, 0x028c, 0x02a9, 0x02c6, 0x02e5, 0x0303, 0x0321, 0x033e, + 0x0361, 0x0385, 0x039a, 0x03bb, 0x03dd, 0x03f2, 0x0407, 0x0428, + 0x044a, 0x0464, 0x047e, 0x007e, 0x00a2, 0x00bd, 0x00d7, 0x00ed, + // Entry 6480 - 64BF + 0x0105, 0x011e, 0x0139, 0x0150, 0x0169, 0x018a, 0x01aa, 0x01c4, + 0x01db, 0x01f5, 0x0210, 0x0230, 0x0251, 0x026a, 0x0283, 0x029b, + 0x02b6, 0x02d0, 0x02ed, 0x030e, 0x032e, 0x035b, 0x0374, 0x0390, + 0x03b0, 0x03d4, 0x03f8, 0x0421, 0x044a, 0x0475, 0x04a0, 0x04cc, + 0x04f8, 0x0523, 0x054e, 0x057d, 0x05ac, 0x05ce, 0x05f0, 0x0621, + 0x0652, 0x0675, 0x0691, 0x06ae, 0x06ca, 0x06ef, 0x0714, 0x0728, + 0x0741, 0x0759, 0x0774, 0x078e, 0x07ab, 0x07cc, 0x07ec, 0x0819, + 0x0836, 0x0860, 0x0882, 0x08a4, 0x08c6, 0x08e7, 0x0908, 0x0929, + // Entry 64C0 - 64FF + 0x0952, 0x0971, 0x0990, 0x09af, 0x09ce, 0x09ed, 0x0a06, 0x0a1d, + 0x0a35, 0x0a4b, 0x0a64, 0x0a7b, 0x0a96, 0x0aaf, 0x0ace, 0x0aef, + 0x0b0e, 0x0b34, 0x0b54, 0x0b7d, 0x0ba5, 0x0bc3, 0x0bdf, 0x0bfd, + 0x0c1a, 0x0c36, 0x0c53, 0x0c71, 0x0c8e, 0x0cb4, 0x0cda, 0x0cf4, + 0x0d09, 0x0d19, 0x0d2d, 0x0d41, 0x0d55, 0x0d6d, 0x0d87, 0x0da6, + 0x0dc8, 0x0dd9, 0x0dec, 0x0e08, 0x0e21, 0x0e37, 0x0e57, 0x0e77, + 0x0e97, 0x0eb7, 0x0ed7, 0x0ef7, 0x0f17, 0x0f37, 0x0f57, 0x0f78, + 0x0f99, 0x0fb3, 0x0fcd, 0x0fe9, 0x1004, 0x1025, 0x1044, 0x1065, + // Entry 6500 - 653F + 0x108c, 0x10a5, 0x10c1, 0x10df, 0x10fa, 0x1117, 0x1136, 0x1149, + 0x1160, 0x1175, 0x1189, 0x119e, 0x11bd, 0x11dc, 0x11f1, 0x120c, + 0x122b, 0x124a, 0x1263, 0x127c, 0x129e, 0x12c2, 0x12dc, 0x12fa, + 0x1314, 0x1332, 0x1369, 0x13a2, 0x13e6, 0x141f, 0x145a, 0x14a2, + 0x14ea, 0x1532, 0x1546, 0x1565, 0x1584, 0x159b, 0x15af, 0x15c5, + 0x15da, 0x15f2, 0x1609, 0x1620, 0x1638, 0x1657, 0x1676, 0x1697, + 0x16b4, 0x16d0, 0x16f2, 0x1712, 0x1737, 0x1757, 0x1776, 0x17a2, + 0x17cc, 0x17f7, 0x1820, 0x183f, 0x003f, 0x005c, 0x0079, 0x0096, + // Entry 6540 - 657F + 0x00b3, 0x00d0, 0x00ed, 0x010a, 0x0127, 0x0144, 0x0162, 0x0180, + 0x019e, 0x01bc, 0x01da, 0x01f8, 0x0216, 0x0234, 0x0252, 0x0270, + 0x028e, 0x02ac, 0x02ca, 0x02e8, 0x0306, 0x0324, 0x0342, 0x0360, + 0x037e, 0x039c, 0x03c0, 0x03e4, 0x0408, 0x042c, 0x0450, 0x0474, + 0x0499, 0x04be, 0x04e3, 0x0508, 0x052d, 0x0552, 0x0577, 0x059c, + 0x05c1, 0x05e6, 0x060b, 0x0630, 0x0655, 0x067a, 0x069f, 0x06c4, + 0x06e9, 0x070e, 0x0733, 0x0758, 0x077d, 0x07a2, 0x07c7, 0x07ec, + 0x0811, 0x0836, 0x085b, 0x0880, 0x08a5, 0x08ca, 0x08ef, 0x090e, + // Entry 6580 - 65BF + 0x092f, 0x0950, 0x0964, 0x0164, 0x0176, 0x018f, 0x01a5, 0x01be, + 0x01d6, 0x01e6, 0x01fa, 0x0213, 0x0226, 0x023b, 0x0256, 0x026f, + 0x0283, 0x029b, 0x02b6, 0x02df, 0x02f7, 0x0311, 0x0327, 0x0340, + 0x0353, 0x0368, 0x0382, 0x0397, 0x03ae, 0x03c3, 0x03d8, 0x03f0, + 0x0402, 0x0413, 0x042b, 0x0442, 0x0456, 0x046a, 0x0484, 0x04a1, + 0x04b6, 0x04ca, 0x04e1, 0x04f6, 0x050d, 0x0523, 0x0537, 0x054d, + 0x0564, 0x057e, 0x0594, 0x05af, 0x05c7, 0x05da, 0x05f1, 0x060a, + 0x061f, 0x0633, 0x0647, 0x0668, 0x067f, 0x0694, 0x06aa, 0x06bd, + // Entry 65C0 - 65FF + 0x06d7, 0x06f1, 0x070a, 0x0724, 0x0739, 0x0753, 0x076e, 0x0781, + 0x0794, 0x07a9, 0x07bc, 0x07d3, 0x07ea, 0x07ff, 0x0817, 0x082e, + 0x0844, 0x085a, 0x0872, 0x0887, 0x089c, 0x08b5, 0x08cd, 0x08e7, + 0x0901, 0x0918, 0x092f, 0x012f, 0x014a, 0x0165, 0x0182, 0x019e, + 0x01ba, 0x01d5, 0x01f2, 0x020f, 0x022b, 0x0246, 0x0261, 0x027e, + 0x029a, 0x02b6, 0x02d1, 0x02ee, 0x030b, 0x0327, 0x0327, 0x0342, + 0x035d, 0x0378, 0x0393, 0x03ae, 0x03c9, 0x03e4, 0x03ff, 0x041a, + 0x0435, 0x0450, 0x046b, 0x0486, 0x04a1, 0x04bc, 0x04d7, 0x04f2, + // Entry 6600 - 663F + 0x050d, 0x0528, 0x0543, 0x055e, 0x0579, 0x0594, 0x05af, 0x05ca, + 0x05e5, 0x05fe, 0x0617, 0x0630, 0x0649, 0x0662, 0x067b, 0x0694, + 0x06ad, 0x06c6, 0x06df, 0x06f8, 0x0711, 0x072a, 0x0743, 0x075c, + 0x0775, 0x078e, 0x07a7, 0x07c0, 0x07d9, 0x07f2, 0x080b, 0x0824, + 0x083d, 0x0856, 0x086f, 0x088c, 0x08a9, 0x08c6, 0x08e3, 0x0900, + 0x091d, 0x093a, 0x0957, 0x0974, 0x0991, 0x09ae, 0x09cb, 0x09e8, + 0x0a05, 0x0a22, 0x0a3f, 0x0a5c, 0x0a79, 0x0a96, 0x0ab3, 0x0ad0, + 0x0aed, 0x0b0a, 0x0b27, 0x0b44, 0x0b61, 0x0b7c, 0x0b97, 0x0bb2, + // Entry 6640 - 667F + 0x0bcd, 0x0be8, 0x0c03, 0x0c1e, 0x001e, 0x0039, 0x0054, 0x006f, + 0x008a, 0x00a5, 0x00c0, 0x00db, 0x00f6, 0x0111, 0x012c, 0x0147, + 0x0162, 0x017d, 0x0198, 0x01b3, 0x01ce, 0x01e9, 0x0204, 0x0226, + 0x0248, 0x026a, 0x028c, 0x02ae, 0x02d0, 0x02f2, 0x0314, 0x0336, + 0x0358, 0x037a, 0x039c, 0x03be, 0x03e0, 0x0402, 0x0424, 0x0446, + 0x0468, 0x048a, 0x04ac, 0x04ce, 0x04f0, 0x0512, 0x0534, 0x0556, + 0x0578, 0x0598, 0x05b8, 0x05d8, 0x05f8, 0x0618, 0x0638, 0x0658, + 0x0678, 0x0698, 0x06b8, 0x06d8, 0x06f8, 0x0718, 0x0738, 0x0758, + // Entry 6680 - 66BF + 0x0778, 0x0798, 0x07b8, 0x07d8, 0x07f8, 0x0818, 0x0838, 0x0858, + 0x0878, 0x0898, 0x08b8, 0x08d5, 0x00d5, 0x00f2, 0x010f, 0x010f, + 0x012c, 0x012c, 0x0149, 0x0166, 0x0166, 0x0183, 0x01a0, 0x01bd, + 0x01da, 0x01da, 0x01f7, 0x0214, 0x0231, 0x024e, 0x026b, 0x0288, + 0x02a5, 0x02c2, 0x02dd, 0x02f8, 0x0313, 0x032e, 0x032e, 0x0349, + 0x0349, 0x0364, 0x037f, 0x039a, 0x03b5, 0x03d0, 0x03eb, 0x0406, + 0x0006, 0x0021, 0x003c, 0x0057, 0x0072, 0x008d, 0x00a8, 0x00c3, + 0x00de, 0x00f9, 0x0114, 0x012f, 0x0151, 0x0173, 0x0195, 0x01b7, + // Entry 66C0 - 66FF + 0x01d9, 0x01fb, 0x021d, 0x023f, 0x0261, 0x0283, 0x02a5, 0x02c7, + 0x02e9, 0x030b, 0x032d, 0x034f, 0x0371, 0x0393, 0x03b5, 0x03d7, + 0x03f9, 0x041b, 0x043d, 0x045f, 0x0481, 0x04a3, 0x04c3, 0x04e3, + 0x0503, 0x0523, 0x0543, 0x0563, 0x0583, 0x05a3, 0x05c3, 0x05e3, + 0x0603, 0x0623, 0x0643, 0x0663, 0x0683, 0x06a3, 0x06c3, 0x06e3, + 0x0703, 0x0723, 0x0743, 0x0763, 0x0783, 0x07a3, 0x07c3, 0x07e3, + 0x0801, 0x081f, 0x001f, 0x003d, 0x005b, 0x0079, 0x0097, 0x0097, + 0x00b5, 0x00d3, 0x00f1, 0x010f, 0x012d, 0x014b, 0x0169, 0x0187, + // Entry 6700 - 673F + 0x0187, 0x01a5, 0x01c3, 0x01e1, 0x01ff, 0x021d, 0x023b, 0x0259, + 0x0259, 0x0275, 0x0291, 0x02ad, 0x02c9, 0x02e5, 0x0301, 0x031d, + 0x0339, 0x0355, 0x0371, 0x038d, 0x03a9, 0x03c5, 0x03e1, 0x03fd, + 0x0419, 0x0435, 0x0451, 0x046d, 0x0489, 0x04a5, 0x04c1, 0x04dd, + 0x04f9, 0x0515, 0x0531, 0x0555, 0x0579, 0x0179, 0x019d, 0x01c1, + 0x01e5, 0x0209, 0x0209, 0x022d, 0x0251, 0x0275, 0x0299, 0x02bd, + 0x02bd, 0x02e1, 0x02e1, 0x0305, 0x0329, 0x034d, 0x0371, 0x0395, + 0x03b9, 0x03dd, 0x03dd, 0x03ff, 0x0421, 0x0443, 0x0465, 0x0487, + // Entry 6740 - 677F + 0x04a9, 0x04cb, 0x04ed, 0x050f, 0x0531, 0x0553, 0x0575, 0x0597, + 0x05b9, 0x05db, 0x05fd, 0x061f, 0x0641, 0x0663, 0x0685, 0x06a7, + 0x06c9, 0x06eb, 0x070d, 0x072f, 0x0751, 0x0774, 0x0797, 0x07ba, + 0x07dd, 0x0800, 0x0823, 0x0846, 0x0869, 0x088c, 0x08af, 0x08d2, + 0x08f5, 0x0918, 0x093b, 0x095e, 0x0981, 0x09a4, 0x09c7, 0x09ea, + 0x0a0d, 0x0a30, 0x0a53, 0x0a76, 0x0a99, 0x0abc, 0x0adf, 0x0b00, + 0x0b21, 0x0b42, 0x0b63, 0x0b84, 0x0ba5, 0x0bc6, 0x0be7, 0x0c08, + 0x0c29, 0x0c4a, 0x0c6b, 0x0c8c, 0x0cad, 0x0cce, 0x0cef, 0x0d10, + // Entry 6780 - 67BF + 0x0d31, 0x0d52, 0x0d73, 0x0d94, 0x0db5, 0x0dd6, 0x0df7, 0x0e18, + 0x0e39, 0x0e5a, 0x0e7b, 0x0e9c, 0x0ebd, 0x0ede, 0x0eff, 0x0f20, + 0x0f41, 0x0f62, 0x0f83, 0x0fa4, 0x0fc5, 0x0fe6, 0x1007, 0x1028, + 0x1049, 0x106a, 0x108b, 0x10ac, 0x10cd, 0x10ee, 0x110f, 0x1130, + 0x1151, 0x1172, 0x1193, 0x11b2, 0x11d1, 0x11f0, 0x120f, 0x122e, + 0x124d, 0x126c, 0x128b, 0x12aa, 0x12c9, 0x12e8, 0x1307, 0x1326, + 0x1345, 0x1364, 0x1383, 0x13a2, 0x13c1, 0x13e0, 0x13ff, 0x141e, + 0x143d, 0x145c, 0x147b, 0x149a, 0x14b9, 0x14df, 0x1505, 0x152b, + // Entry 67C0 - 67FF + 0x1551, 0x1577, 0x159d, 0x15c3, 0x15e9, 0x160f, 0x1635, 0x165b, + 0x1681, 0x16a7, 0x16cd, 0x16f3, 0x1719, 0x173f, 0x1765, 0x178b, + 0x17b1, 0x17d7, 0x17fd, 0x1823, 0x1849, 0x186f, 0x1895, 0x18b9, + 0x18dd, 0x1901, 0x1925, 0x1949, 0x196d, 0x1991, 0x19b5, 0x19d9, + 0x19fd, 0x1a21, 0x1a45, 0x1a69, 0x1a8d, 0x1ab1, 0x1ad5, 0x1af9, + 0x1b1d, 0x1b41, 0x1b65, 0x1b89, 0x1bad, 0x1bd1, 0x1bf5, 0x1c19, + 0x1c3d, 0x1c65, 0x1c8d, 0x1cb5, 0x1cdd, 0x1d05, 0x1d2d, 0x1d55, + 0x1d7d, 0x1da5, 0x1dcd, 0x1df5, 0x1e1d, 0x1e45, 0x1e6d, 0x1e95, + // Entry 6800 - 683F + 0x1ebd, 0x1ee5, 0x1f0d, 0x1f35, 0x1f5d, 0x1f85, 0x1fad, 0x1fd5, + 0x1ffd, 0x2025, 0x204d, 0x2073, 0x2099, 0x20bf, 0x20e5, 0x210b, + 0x2131, 0x2157, 0x217d, 0x21a3, 0x21c9, 0x21ef, 0x2215, 0x223b, + 0x2261, 0x2287, 0x22ad, 0x22d3, 0x22f9, 0x231f, 0x2345, 0x236b, + 0x2391, 0x23b7, 0x23dd, 0x2403, 0x2429, 0x2456, 0x2483, 0x24b0, + 0x24dd, 0x250a, 0x2537, 0x2564, 0x2591, 0x25be, 0x25eb, 0x2618, + 0x2645, 0x2672, 0x269f, 0x26cc, 0x26f9, 0x2726, 0x2753, 0x2780, + 0x27ad, 0x27da, 0x2807, 0x2834, 0x2861, 0x288e, 0x28bb, 0x28e6, + // Entry 6840 - 687F + 0x2911, 0x293c, 0x2967, 0x2992, 0x29bd, 0x29e8, 0x2a13, 0x2a3e, + 0x2a69, 0x2a94, 0x2abf, 0x2aea, 0x2b15, 0x2b40, 0x2b6b, 0x2b96, + 0x2bc1, 0x2bec, 0x2c17, 0x2c42, 0x2c6d, 0x2c98, 0x2cc3, 0x2cee, + 0x2d19, 0x2d39, 0x2d59, 0x2d79, 0x2d99, 0x2db9, 0x2dd9, 0x2df9, + 0x2e19, 0x2e39, 0x2e59, 0x2e79, 0x2e99, 0x2eb9, 0x2ed9, 0x2ef9, + 0x2f19, 0x2f39, 0x2f59, 0x2f79, 0x2f99, 0x2fb9, 0x2fd9, 0x2ff9, + 0x3019, 0x3039, 0x3059, 0x3077, 0x3095, 0x30b3, 0x30d1, 0x30ef, + 0x310d, 0x312b, 0x3149, 0x3167, 0x3185, 0x31a3, 0x31c1, 0x31df, + // Entry 6880 - 68BF + 0x31fd, 0x321b, 0x3239, 0x3257, 0x3275, 0x3293, 0x32b1, 0x32cf, + 0x32ed, 0x330b, 0x3329, 0x3347, 0x3365, 0x3388, 0x33ab, 0x03ab, + 0x03ca, 0x03e8, 0x0407, 0x0426, 0x0447, 0x0465, 0x0482, 0x04a1, + 0x04bf, 0x04de, 0x04fd, 0x0519, 0x0535, 0x0551, 0x0572, 0x058e, + 0x05ab, 0x05d1, 0x05f0, 0x060d, 0x062e, 0x064b, 0x0668, 0x0685, + 0x06a4, 0x06bb, 0x06d8, 0x06f4, 0x0711, 0x072e, 0x074d, 0x0769, + 0x0784, 0x07a1, 0x07bd, 0x07da, 0x07f7, 0x0811, 0x082b, 0x0845, + 0x0864, 0x087e, 0x0899, 0x08bc, 0x08d9, 0x08f4, 0x0913, 0x092e, + // Entry 68C0 - 68FF + 0x0949, 0x0964, 0x0981, 0x09a7, 0x09c7, 0x09e5, 0x0a03, 0x0a1f, + 0x0a3b, 0x0a56, 0x0a77, 0x0a97, 0x0ab8, 0x0ad9, 0x0afc, 0x0b1c, + 0x0b3b, 0x0b5c, 0x0b7c, 0x0b9d, 0x0bbe, 0x0bdc, 0x0bfa, 0x0c18, + 0x0c3b, 0x0c59, 0x0c78, 0x0ca0, 0x0cc1, 0x0ce0, 0x0d03, 0x0d22, + 0x0d41, 0x0d60, 0x0d81, 0x0d9a, 0x0db9, 0x0dd7, 0x0df6, 0x0e15, + 0x0e36, 0x0e54, 0x0e71, 0x0e90, 0x0eae, 0x0ecd, 0x0eec, 0x0f08, + 0x0f24, 0x0f40, 0x0f61, 0x0f7d, 0x0f9a, 0x0fbf, 0x0fde, 0x0ffb, + 0x101c, 0x1039, 0x1056, 0x1073, 0x1092, 0x10ba, 0x10dc, 0x10fc, + // Entry 6900 - 693F + 0x111c, 0x113a, 0x1158, 0x1175, 0x119b, 0x11c0, 0x11e6, 0x120c, + 0x1234, 0x1259, 0x127d, 0x12a3, 0x12c8, 0x12ee, 0x1314, 0x1337, + 0x135a, 0x137d, 0x13a5, 0x13c8, 0x13ec, 0x1419, 0x143f, 0x1463, + 0x148b, 0x14af, 0x14d3, 0x14f7, 0x151d, 0x153b, 0x155f, 0x1582, + 0x15a6, 0x15ca, 0x15f0, 0x1613, 0x1635, 0x1659, 0x167c, 0x16a0, + 0x16c4, 0x16e5, 0x1706, 0x1727, 0x174d, 0x176e, 0x1790, 0x17ba, + 0x17de, 0x1800, 0x1826, 0x1848, 0x186a, 0x188c, 0x18b0, 0x18dd, + 0x1904, 0x1929, 0x194e, 0x1971, 0x1994, 0x19b6, 0x19e0, 0x1a09, + // Entry 6940 - 697F + 0x1a33, 0x1a5d, 0x1a89, 0x1ab2, 0x1ada, 0x1b04, 0x1b2d, 0x1b57, + 0x1b81, 0x1ba8, 0x1bcf, 0x1bf6, 0x1c22, 0x1c49, 0x1c71, 0x1ca2, + 0x1ccc, 0x1cf4, 0x1d20, 0x1d48, 0x1d70, 0x1d98, 0x1dc2, 0x1de4, + 0x1e0c, 0x1e33, 0x1e5b, 0x1e83, 0x1ead, 0x1ed4, 0x1efa, 0x1f22, + 0x1f49, 0x1f71, 0x1f99, 0x1fbe, 0x1fe3, 0x2008, 0x2032, 0x2057, + 0x207d, 0x20ab, 0x20d3, 0x20f9, 0x2123, 0x2149, 0x216f, 0x2195, + 0x21bd, 0x21ee, 0x2219, 0x2242, 0x226b, 0x2292, 0x22b9, 0x22df, + 0x2310, 0x2340, 0x2371, 0x23a2, 0x23d5, 0x2405, 0x2434, 0x2465, + // Entry 6980 - 69BF + 0x2495, 0x24c6, 0x24f7, 0x2525, 0x2553, 0x2581, 0x25b4, 0x25e2, + 0x2611, 0x2649, 0x267a, 0x26a9, 0x26dc, 0x270b, 0x273a, 0x2769, + 0x279a, 0x27c3, 0x27f2, 0x2820, 0x284f, 0x287e, 0x28af, 0x28dd, + 0x290a, 0x2939, 0x2967, 0x2996, 0x29c5, 0x29f1, 0x2a1d, 0x2a49, + 0x2a7a, 0x2aa6, 0x2ad3, 0x2b08, 0x2b37, 0x2b64, 0x2b95, 0x2bc2, + 0x2bef, 0x2c1c, 0x2c4b, 0x2c83, 0x2cb5, 0x2ce5, 0x2d15, 0x2d43, + 0x2d71, 0x2d9e, 0x2dbf, 0x2dde, 0x01de, 0x01fa, 0x0215, 0x0230, + 0x024d, 0x0269, 0x0285, 0x02a0, 0x02bd, 0x02da, 0x02f6, 0x031b, + // Entry 69C0 - 69FF + 0x033f, 0x0363, 0x0389, 0x03ae, 0x03d3, 0x03f7, 0x041d, 0x0443, + 0x0468, 0x048a, 0x04ab, 0x04cc, 0x04ef, 0x0511, 0x0533, 0x0554, + 0x0577, 0x059a, 0x05bc, 0x05e3, 0x0609, 0x062f, 0x0657, 0x067e, + 0x06a5, 0x06cb, 0x06f3, 0x071b, 0x0742, 0x0763, 0x0783, 0x07a3, + 0x07c5, 0x07e6, 0x0807, 0x0827, 0x0849, 0x086b, 0x088c, 0x08a7, + 0x08c4, 0x08de, 0x08f9, 0x0915, 0x0931, 0x0951, 0x0973, 0x099f, + 0x09c9, 0x09eb, 0x0a0d, 0x0a33, 0x0a56, 0x0a78, 0x0a9c, 0x0ac3, + 0x0af5, 0x0b1e, 0x0b4a, 0x0b76, 0x0ba2, 0x0bd9, 0x0c11, 0x0c44, + // Entry 6A00 - 6A3F + 0x0c77, 0x0ca1, 0x0ccd, 0x0cf9, 0x0d25, 0x0d4d, 0x0d77, 0x0dad, + 0x0de3, 0x0e10, 0x0e4b, 0x0e82, 0x0ebe, 0x0ef5, 0x0f2f, 0x0f5e, + 0x0f8e, 0x0fbd, 0x0fec, 0x1025, 0x105c, 0x109d, 0x10d9, 0x110b, + 0x113d, 0x117b, 0x11b0, 0x11ea, 0x122b, 0x125d, 0x128f, 0x12c2, + 0x12f9, 0x132f, 0x1364, 0x1397, 0x13d0, 0x1403, 0x1432, 0x1468, + 0x14a3, 0x14d5, 0x150b, 0x152d, 0x1554, 0x157d, 0x15a9, 0x15db, + 0x1607, 0x1638, 0x1665, 0x168e, 0x16bc, 0x16ef, 0x1727, 0x1755, + 0x1788, 0x17bf, 0x17e7, 0x1814, 0x1843, 0x186c, 0x189c, 0x18d7, + // Entry 6A40 - 6A7F + 0x1910, 0x1925, 0x194f, 0x1969, 0x1989, 0x19ae, 0x19ce, 0x19f1, + 0x1a1d, 0x1a3f, 0x1a6c, 0x1a9e, 0x1ac0, 0x1ad5, 0x1af5, 0x1b13, + 0x1b36, 0x1b54, 0x1b69, 0x1b82, 0x1b96, 0x1bba, 0x1bd9, 0x1bfb, + 0x1c18, 0x1c3f, 0x1c61, 0x1c7f, 0x1c98, 0x1caf, 0x1cc4, 0x1ce4, + 0x1d02, 0x1d25, 0x1d40, 0x1d69, 0x1d7f, 0x1d9b, 0x1dc1, 0x1de2, + 0x1e06, 0x1e25, 0x1e55, 0x1e85, 0x1e9b, 0x1ec2, 0x1eeb, 0x1f13, + 0x1f3b, 0x1f58, 0x1f84, 0x1fb5, 0x1fe7, 0x2008, 0x2039, 0x2068, + 0x2098, 0x20b7, 0x20e2, 0x2103, 0x2122, 0x2142, 0x216d, 0x218e, + // Entry 6A80 - 6ABF + 0x21b8, 0x21da, 0x21fd, 0x2225, 0x224e, 0x2287, 0x22bc, 0x22de, + 0x2302, 0x2325, 0x2348, 0x2371, 0x239c, 0x23c6, 0x23e1, 0x240b, + 0x243a, 0x246b, 0x248a, 0x24c2, 0x24fb, 0x2518, 0x2541, 0x2562, + 0x2585, 0x25a6, 0x25c8, 0x25e9, 0x2614, 0x2645, 0x2665, 0x2685, + 0x26a5, 0x26cc, 0x26f5, 0x2723, 0x274e, 0x2778, 0x27a5, 0x27cb, + 0x27f3, 0x281f, 0x2847, 0x2868, 0x2885, 0x28a4, 0x28c5, 0x28f0, + 0x291a, 0x293c, 0x2965, 0x2988, 0x29b0, 0x29da, 0x2a09, 0x2a30, + 0x2a59, 0x2a86, 0x2ab2, 0x2adb, 0x2b0a, 0x2b3c, 0x2b73, 0x2ba9, + // Entry 6AC0 - 6AFF + 0x2bde, 0x2c10, 0x2c33, 0x2c59, 0x2c80, 0x2cb5, 0x2ceb, 0x2d1c, + 0x2d4d, 0x2d7d, 0x2daf, 0x2de7, 0x2e1b, 0x2e41, 0x2e6b, 0x2e9f, + 0x2ed3, 0x2f06, 0x2f2e, 0x2f4e, 0x2f73, 0x2f9a, 0x2fc2, 0x2fe4, + 0x300c, 0x3032, 0x3057, 0x3079, 0x3094, 0x30b4, 0x30dd, 0x3107, + 0x312c, 0x314f, 0x317f, 0x31ae, 0x31dd, 0x320a, 0x3236, 0x3265, + 0x3293, 0x32c8, 0x32dd, 0x32f7, 0x330f, 0x3329, 0x3342, 0x335a, + 0x3374, 0x338d, 0x33a6, 0x33c1, 0x33db, 0x33f3, 0x340d, 0x3426, + 0x343c, 0x3454, 0x346b, 0x3486, 0x34a1, 0x34c1, 0x34e1, 0x3503, + // Entry 6B00 - 6B3F + 0x3525, 0x3543, 0x3561, 0x357f, 0x359f, 0x35bf, 0x35db, 0x3600, + 0x3628, 0x3650, 0x3678, 0x36a2, 0x36d6, 0x370a, 0x373a, 0x3767, + 0x3795, 0x37c9, 0x37fe, 0x3832, 0x3868, 0x3898, 0x38c6, 0x38f6, + 0x3927, 0x3963, 0x3987, 0x39be, 0x39ee, 0x3a1f, 0x3a5b, 0x3a84, + 0x3aae, 0x3ad7, 0x3b02, 0x3b2e, 0x3b59, 0x3b87, 0x3bb1, 0x3bdc, + 0x3c06, 0x3c2e, 0x3c57, 0x3c7f, 0x3caa, 0x3cd6, 0x3d01, 0x3d2b, + 0x3d56, 0x3d80, 0x3db6, 0x3dec, 0x3e27, 0x3e5e, 0x3e95, 0x3ed1, + 0x3ef5, 0x3f23, 0x3f51, 0x3f7f, 0x3fa7, 0x3fd0, 0x3ff8, 0x4022, + // Entry 6B40 - 6B7F + 0x404d, 0x4079, 0x40a4, 0x40d1, 0x4101, 0x4132, 0x4162, 0x4194, + 0x41c7, 0x41fb, 0x422e, 0x4263, 0x4298, 0x42ce, 0x4303, 0x433a, + 0x436b, 0x439a, 0x43cb, 0x43fd, 0x443a, 0x445f, 0x4497, 0x44c8, + 0x4503, 0x4540, 0x4564, 0x4590, 0x45bd, 0x45e9, 0x460e, 0x4637, + 0x4661, 0x468a, 0x46b6, 0x46e3, 0x470f, 0x473a, 0x4766, 0x4791, + 0x47c9, 0x4801, 0x483e, 0x4875, 0x48ac, 0x48e8, 0x490d, 0x493f, + 0x4972, 0x49a4, 0x49d8, 0x4a0e, 0x4a45, 0x4a7b, 0x4ab3, 0x4af2, + 0x4b32, 0x4b5b, 0x4b85, 0x4bae, 0x4bd7, 0x4c01, 0x4c2a, 0x4c5a, + // Entry 6B80 - 6BBF + 0x4c90, 0x4cc7, 0x4cfd, 0x4d33, 0x4d6a, 0x4da0, 0x4dd2, 0x4e03, + 0x4e35, 0x4e5a, 0x4e7f, 0x4ea7, 0x4ecd, 0x4f04, 0x4f3a, 0x4f70, + 0x4fa6, 0x4fde, 0x5016, 0x5053, 0x5085, 0x50b6, 0x50e7, 0x5118, + 0x514b, 0x517e, 0x51b6, 0x51ed, 0x5225, 0x525c, 0x5297, 0x52d2, + 0x5313, 0x5354, 0x5395, 0x53d6, 0x5417, 0x5458, 0x5499, 0x54da, + 0x5514, 0x554e, 0x5584, 0x55ba, 0x55f5, 0x562e, 0x5667, 0x56a6, + 0x56e5, 0x572b, 0x5771, 0x57b0, 0x57ef, 0x582e, 0x586d, 0x58a5, + 0x58dd, 0x5911, 0x5945, 0x597e, 0x59a9, 0x59d5, 0x5a00, 0x5a2d, + // Entry 6BC0 - 6BFF + 0x5a5b, 0x5a85, 0x5aaf, 0x5ad9, 0x5b03, 0x5b2d, 0x5b53, 0x5b79, + 0x5ba4, 0x5bd4, 0x5c0a, 0x5c41, 0x5c77, 0x5cae, 0x5cf2, 0x5d37, + 0x5d7b, 0x5dbf, 0x5e04, 0x5e48, 0x5e80, 0x5eb8, 0x5ef8, 0x5f38, + 0x5f6c, 0x5fa0, 0x5fe2, 0x6024, 0x6047, 0x606a, 0x6082, 0x609a, + 0x60b3, 0x60ce, 0x60ee, 0x611a, 0x613e, 0x6159, 0x6169, 0x617d, + 0x61a9, 0x61d1, 0x61fe, 0x6227, 0x6251, 0x6271, 0x62a9, 0x62dc, + 0x6317, 0x6337, 0x635c, 0x637e, 0x63a6, 0x63ce, 0x63f4, 0x641a, + 0x6436, 0x6452, 0x646f, 0x6484, 0x649d, 0x64b4, 0x64d0, 0x64ee, + // Entry 6C00 - 6C3F + 0x6508, 0x6522, 0x653e, 0x6560, 0x6574, 0x658c, 0x65a6, 0x65c6, + 0x65ec, 0x6619, 0x664b, 0x6672, 0x66a0, 0x66d3, 0x66f7, 0x671c, + 0x6742, 0x675b, 0x6775, 0x678e, 0x67ab, 0x67ca, 0x67e6, 0x67f6, + 0x680e, 0x6826, 0x683f, 0x6857, 0x6872, 0x688c, 0x68b0, 0x68d4, + 0x68ed, 0x6906, 0x6926, 0x6946, 0x6966, 0x697d, 0x699d, 0x69b9, + 0x69d0, 0x69f0, 0x6a0c, 0x6a29, 0x6a47, 0x6a66, 0x6a81, 0x6aa5, + 0x6ac5, 0x6ae5, 0x6b0e, 0x6b33, 0x6b49, 0x6b67, 0x6b86, 0x6b9d, + 0x6bbc, 0x6bda, 0x6bfb, 0x6c1b, 0x6c3b, 0x6c54, 0x6c75, 0x6c96, + // Entry 6C40 - 6C7F + 0x6cb9, 0x6cd8, 0x6cfb, 0x6d27, 0x6d4e, 0x6d74, 0x6d9a, 0x6dc0, + 0x6dd1, 0x6deb, 0x6e06, 0x6e2a, 0x6e43, 0x6e65, 0x6e80, 0x6ea2, + 0x6ec5, 0x6ed5, 0x6ee5, 0x6efb, 0x6f19, 0x6f3b, 0x6f62, 0x6f8a, + 0x6fb1, 0x6fdd, 0x7004, 0x7029, 0x7057, 0x7073, 0x708c, 0x70a5, + 0x70be, 0x70d7, 0x70f0, 0x7109, 0x7122, 0x7134, 0x7158, 0x717d, + 0x7198, 0x71b2, 0x71cc, 0x71ea, 0x7204, 0x7225, 0x7236, 0x724b, + 0x7260, 0x7271, 0x7288, 0x0288, 0x02a3, 0x02be, 0x02d9, 0x02f4, + 0x030f, 0x030f, 0x032e, 0x034d, 0x036c, 0x038b, 0x03aa, 0x03c9, + // Entry 6C80 - 6CBF + 0x03e8, 0x0407, 0x0427, 0x0447, 0x0467, 0x0487, 0x04a7, 0x04c7, + 0x04e7, 0x00e7, 0x0106, 0x0126, 0x0146, 0x0169, 0x018a, 0x01ab, + 0x01ce, 0x01ce, 0x01f0, 0x0210, 0x0238, 0x0255, 0x0277, 0x0297, + 0x02ba, 0x02dd, 0x02fe, 0x031d, 0x033f, 0x0360, 0x0381, 0x03a3, + 0x03c2, 0x03e3, 0x0403, 0x0003, 0x0023, 0x0042, 0x0064, 0x0083, + 0x00a3, 0x00c3, 0x00e3, 0x00e3, 0x0101, 0x0126, 0x0126, 0x0144, + 0x0171, 0x0194, 0x01bf, 0x01df, 0x01df, 0x01fd, 0x021b, 0x0239, + 0x0258, 0x0276, 0x0295, 0x02b3, 0x02d2, 0x02f0, 0x030e, 0x032c, + // Entry 6CC0 - 6CFF + 0x034b, 0x0369, 0x0388, 0x03a6, 0x03c5, 0x03e4, 0x0403, 0x0422, + 0x0441, 0x0460, 0x047f, 0x049e, 0x04bd, 0x04dc, 0x04fc, 0x051c, + 0x053a, 0x0558, 0x0576, 0x0595, 0x05b3, 0x05d2, 0x05f0, 0x060d, + 0x062a, 0x0647, 0x0665, 0x0682, 0x06a0, 0x06bd, 0x06db, 0x06f9, + 0x0717, 0x0735, 0x0753, 0x0771, 0x078f, 0x07ad, 0x07cc, 0x07ea, + 0x0809, 0x0827, 0x0846, 0x0864, 0x0882, 0x08a0, 0x08bf, 0x08dd, + 0x08fc, 0x091a, 0x093d, 0x095b, 0x0979, 0x0997, 0x09b6, 0x09d5, + 0x09f3, 0x0a11, 0x0a2f, 0x0a4d, 0x0a6c, 0x0a8a, 0x0aa9, 0x0ac7, + // Entry 6D00 - 6D3F + 0x0ae5, 0x0b03, 0x0b21, 0x0b40, 0x0b5e, 0x0b7d, 0x0b9b, 0x0bbe, + 0x0bdc, 0x0bfa, 0x0c18, 0x0c37, 0x0c55, 0x0c74, 0x0c92, 0x0cb0, + 0x0cce, 0x0cec, 0x0d0b, 0x0d29, 0x0d48, 0x0d66, 0x0d85, 0x0da4, + 0x0dc3, 0x0de2, 0x0e01, 0x0e20, 0x0e3f, 0x0e5d, 0x0e7b, 0x0e99, + 0x0eb8, 0x0ed6, 0x0ef5, 0x0f13, 0x0f33, 0x0f53, 0x0f72, 0x0f91, + 0x0fb0, 0x0fcf, 0x0fee, 0x100e, 0x102e, 0x104e, 0x106e, 0x108f, + 0x10af, 0x10d0, 0x10f0, 0x1111, 0x1132, 0x1157, 0x117d, 0x11a2, + 0x11c0, 0x11de, 0x11fc, 0x121b, 0x123b, 0x125b, 0x127b, 0x129b, + // Entry 6D40 - 6D7F + 0x12bc, 0x12da, 0x12f8, 0x1316, 0x1335, 0x1353, 0x1372, 0x1390, + 0x13af, 0x13ce, 0x13ed, 0x140d, 0x142d, 0x144c, 0x146c, 0x148b, + 0x14ab, 0x14cf, 0x14f4, 0x1518, 0x1537, 0x1556, 0x1575, 0x1595, + 0x15b4, 0x15d4, 0x15f3, 0x1612, 0x1631, 0x1650, 0x1670, 0x168f, + 0x16af, 0x16ce, 0x16ec, 0x170b, 0x172a, 0x1749, 0x1769, 0x1788, + 0x17a8, 0x17c7, 0x17e6, 0x1805, 0x1825, 0x1845, 0x1863, 0x1881, + 0x189f, 0x18be, 0x18dc, 0x18fb, 0x1919, 0x1939, 0x1959, 0x1979, + 0x1999, 0x19b9, 0x01b9, 0x01d0, 0x01e7, 0x0200, 0x0218, 0x0230, + // Entry 6D80 - 6DBF + 0x0247, 0x0260, 0x0279, 0x0291, 0x02b5, 0x02d8, 0x02ff, 0x0327, + 0x0353, 0x0383, 0x03aa, 0x03aa, 0x03c3, 0x03dd, 0x03f6, 0x040f, + 0x0426, 0x0445, 0x045c, 0x0474, 0x048b, 0x04a1, 0x04b8, 0x04ce, + 0x04e4, 0x04fc, 0x0514, 0x052c, 0x0544, 0x055c, 0x0573, 0x0589, + 0x05a2, 0x05ba, 0x05d1, 0x05ea, 0x0601, 0x0619, 0x0630, 0x0648, + 0x065f, 0x0677, 0x068f, 0x06a7, 0x06bf, 0x06d7, 0x06ee, 0x0706, + 0x071d, 0x0734, 0x0749, 0x0766, 0x077b, 0x0791, 0x07a6, 0x07ba, + 0x07cf, 0x07e3, 0x07f7, 0x080d, 0x0823, 0x0839, 0x084f, 0x0865, + // Entry 6DC0 - 6DFF + 0x087a, 0x088e, 0x08a5, 0x08bb, 0x08d0, 0x08e7, 0x08fc, 0x0912, + 0x0927, 0x093d, 0x0952, 0x0968, 0x097e, 0x0994, 0x09aa, 0x09c0, + 0x09d5, 0x09eb, 0x0a00, 0x0a0b, 0x0a23, 0x0a44, 0x0a4f, 0x024f, + 0x025f, 0x026e, 0x027d, 0x028e, 0x029e, 0x02ae, 0x02bd, 0x02ce, + 0x02df, 0x02ef, 0x02ef, 0x030d, 0x0328, 0x0328, 0x0340, 0x0357, + 0x036f, 0x0386, 0x0386, 0x039d, 0x03b5, 0x03cc, 0x03e3, 0x03fa, + 0x0411, 0x0428, 0x0440, 0x0458, 0x0470, 0x0487, 0x049e, 0x04b5, + 0x04cc, 0x04e3, 0x04fc, 0x0513, 0x052b, 0x0543, 0x055b, 0x0572, + // Entry 6E00 - 6E3F + 0x0589, 0x05a2, 0x05c1, 0x05e1, 0x0600, 0x061f, 0x021f, 0x023e, + 0x025e, 0x025e, 0x027d, 0x027d, 0x029c, 0x029c, 0x02bb, 0x02da, + 0x02f9, 0x0319, 0x0339, 0x0359, 0x0378, 0x0397, 0x03b6, 0x03d5, + 0x03d5, 0x03f6, 0x0415, 0x0435, 0x0455, 0x0055, 0x0074, 0x0074, + 0x0095, 0x0095, 0x00b4, 0x00b4, 0x00d2, 0x00d2, 0x00f0, 0x00f0, + 0x010e, 0x010e, 0x012d, 0x014c, 0x016a, 0x016a, 0x0188, 0x01a6, + 0x01a6, 0x01c6, 0x01c6, 0x01e5, 0x01e5, 0x0203, 0x0203, 0x0223, + 0x0223, 0x024a, 0x024a, 0x0270, 0x0270, 0x0291, 0x02b3, 0x02b3, + // Entry 6E40 - 6E7F + 0x02d4, 0x02d4, 0x02f5, 0x0316, 0x0337, 0x0358, 0x0358, 0x037a, + 0x039c, 0x03be, 0x03df, 0x0400, 0x0421, 0x0442, 0x0042, 0x0065, + 0x0086, 0x00a8, 0x00ca, 0x00ca, 0x00eb, 0x010c, 0x012f, 0x0158, + 0x0158, 0x0181, 0x0181, 0x01a0, 0x01be, 0x01dd, 0x01fb, 0x0219, + 0x0237, 0x0256, 0x0274, 0x0292, 0x02b0, 0x02b0, 0x02ce, 0x02ed, + 0x030c, 0x032b, 0x0349, 0x0367, 0x0385, 0x03a3, 0x03c1, 0x03e1, + 0x03ff, 0x041e, 0x043d, 0x045c, 0x047a, 0x0498, 0x04b8, 0x00b8, + 0x00dd, 0x0103, 0x0128, 0x0128, 0x014d, 0x0173, 0x0198, 0x01bd, + // Entry 6E80 - 6EBF + 0x01e2, 0x01e2, 0x0207, 0x022d, 0x0253, 0x0279, 0x029e, 0x02c3, + 0x02e8, 0x030d, 0x0332, 0x0359, 0x037e, 0x03a4, 0x03ca, 0x03f0, + 0x0415, 0x043a, 0x0461, 0x0061, 0x0098, 0x00c1, 0x00c1, 0x00d7, + 0x00ee, 0x0104, 0x011b, 0x0132, 0x014b, 0x0164, 0x0182, 0x01a0, + 0x01c0, 0x01df, 0x01fe, 0x021c, 0x023c, 0x025c, 0x027b, 0x0296, + 0x02b1, 0x02ce, 0x02ea, 0x0306, 0x0321, 0x033e, 0x035b, 0x0377, + 0x0392, 0x03ad, 0x03ca, 0x03e6, 0x0402, 0x041d, 0x043a, 0x0457, + 0x0473, 0x0484, 0x0497, 0x04aa, 0x04c4, 0x04d7, 0x04ea, 0x04fd, + // Entry 6EC0 - 6EFF + 0x0510, 0x0522, 0x0533, 0x0133, 0x014e, 0x016a, 0x0186, 0x01a2, + 0x01be, 0x01da, 0x01f6, 0x0212, 0x022e, 0x024a, 0x0266, 0x0282, + 0x029e, 0x02ba, 0x02d6, 0x02f2, 0x030e, 0x032a, 0x0346, 0x0362, + 0x037e, 0x039a, 0x03b6, 0x03d2, 0x03ee, 0x040a, 0x0426, 0x0442, + 0x045e, 0x047a, 0x0496, 0x04b2, 0x04ce, 0x04ea, 0x0506, 0x0522, + 0x053e, 0x055a, 0x0576, 0x0592, 0x05ae, 0x05ca, 0x05e6, 0x0602, + 0x061e, 0x063a, 0x0656, 0x0672, 0x068e, 0x06aa, 0x06c3, 0x06dd, + 0x06f7, 0x0711, 0x072b, 0x0745, 0x075f, 0x0779, 0x0793, 0x07ad, + // Entry 6F00 - 6F3F + 0x07c7, 0x07e1, 0x07fb, 0x0815, 0x082f, 0x0849, 0x0863, 0x087d, + 0x0897, 0x08b1, 0x08cb, 0x08e5, 0x08ff, 0x0919, 0x0933, 0x094d, + 0x0967, 0x0981, 0x099b, 0x09b5, 0x09cf, 0x09e9, 0x0a03, 0x0a1d, + 0x0a37, 0x0a51, 0x0a6b, 0x0a85, 0x0a9f, 0x0ab9, 0x0ad3, 0x0aed, + 0x0b07, 0x0b21, 0x0b3b, 0x0b55, 0x0b6f, 0x0b89, 0x0ba3, 0x0bbd, + 0x03bd, 0x03ce, 0x03e8, 0x0402, 0x041e, 0x0439, 0x0454, 0x046e, + 0x048a, 0x04a6, 0x04c1, 0x04db, 0x04f6, 0x0513, 0x052f, 0x054a, + 0x014a, 0x0164, 0x017e, 0x019a, 0x01b5, 0x01d0, 0x01ea, 0x0206, + // Entry 6F40 - 6F7F + 0x0222, 0x023d, 0x0257, 0x0272, 0x028f, 0x02ab, 0x02c6, 0x02dc, + 0x02dc, 0x02f8, 0x0314, 0x0332, 0x034f, 0x036c, 0x0388, 0x03a6, + 0x03c4, 0x03e1, 0x03fd, 0x041a, 0x0439, 0x0457, 0x0474, 0x048c, + 0x008c, 0x00a5, 0x00be, 0x00d9, 0x00f3, 0x010d, 0x0126, 0x0141, + 0x015c, 0x0176, 0x018f, 0x01a9, 0x01c5, 0x01e0, 0x01fa, 0x0212, + 0x0223, 0x0237, 0x024b, 0x025f, 0x0273, 0x0287, 0x029b, 0x02af, + 0x02c3, 0x02d7, 0x02ec, 0x0301, 0x0316, 0x032b, 0x0340, 0x0355, + 0x036a, 0x037f, 0x0394, 0x03a9, 0x03be, 0x03d3, 0x03d3, 0x03e7, + // Entry 6F80 - 6FBF + 0x03f7, 0x0406, 0x0415, 0x0426, 0x0436, 0x0446, 0x0455, 0x0466, + 0x0477, 0x0487, 0x04ac, 0x04da, 0x00da, 0x00fe, 0x0122, 0x0146, + 0x016a, 0x018e, 0x01b2, 0x01d6, 0x01fa, 0x021e, 0x0242, 0x0266, + 0x028a, 0x02ae, 0x02d2, 0x02f6, 0x031a, 0x033e, 0x0362, 0x0386, + 0x03aa, 0x03ce, 0x03f2, 0x0416, 0x043a, 0x045e, 0x0482, 0x04b1, + 0x04d6, 0x04fb, 0x0505, 0x050f, 0x010f, 0x012d, 0x014b, 0x0169, + 0x0187, 0x01a5, 0x01c3, 0x01e1, 0x01ff, 0x021d, 0x023b, 0x0259, + 0x0277, 0x0295, 0x02b3, 0x02d1, 0x02ef, 0x030d, 0x032b, 0x0349, + // Entry 6FC0 - 6FFF + 0x0367, 0x0385, 0x03a3, 0x03c1, 0x03df, 0x03fd, 0x041b, 0x0425, + 0x042f, 0x0439, 0x0443, 0x044e, 0x0458, 0x047f, 0x04a6, 0x04cd, + 0x04f4, 0x051b, 0x0542, 0x0569, 0x0590, 0x05b7, 0x05de, 0x0605, + 0x062c, 0x0653, 0x067a, 0x06a1, 0x06c8, 0x06ef, 0x0716, 0x073d, + 0x0764, 0x078b, 0x07b2, 0x07d9, 0x0800, 0x0827, 0x084e, 0x085c, + 0x086a, 0x006a, 0x0091, 0x00b8, 0x00df, 0x0106, 0x012d, 0x0154, + 0x017b, 0x01a2, 0x01c9, 0x01f0, 0x0217, 0x023e, 0x0265, 0x028c, + 0x02b3, 0x02da, 0x0301, 0x0328, 0x034f, 0x0376, 0x039d, 0x03c4, + // Entry 7000 - 703F + 0x03eb, 0x0412, 0x0439, 0x0460, 0x048f, 0x04a2, 0x04b5, 0x04c8, + 0x04db, 0x04ee, 0x04f7, 0x0501, 0x050d, 0x0519, 0x0523, 0x052e, + 0x0538, 0x0542, 0x054d, 0x056d, 0x0577, 0x0586, 0x059b, 0x05a8, + 0x05b6, 0x05c5, 0x05db, 0x05f2, 0x060e, 0x061d, 0x0639, 0x0655, + 0x065f, 0x066a, 0x0678, 0x0688, 0x0693, 0x069e, 0x06a9, 0x02a9, + 0x02cb, 0x02ed, 0x030f, 0x0331, 0x0353, 0x0375, 0x0397, 0x03b9, + 0x03db, 0x03fd, 0x041f, 0x0441, 0x0463, 0x0485, 0x04a7, 0x04c9, + 0x04eb, 0x050d, 0x052f, 0x0551, 0x0573, 0x0595, 0x05b7, 0x05d9, + // Entry 7040 - 707F + 0x05fb, 0x061d, 0x0631, 0x0646, 0x0659, 0x0259, 0x027b, 0x029d, + 0x02bf, 0x02d2, 0x02f4, 0x0316, 0x0338, 0x035a, 0x037c, 0x039e, + 0x03c0, 0x03e2, 0x0404, 0x0426, 0x0448, 0x046a, 0x048c, 0x04ae, + 0x04d0, 0x04f2, 0x0514, 0x0536, 0x0558, 0x057a, 0x059c, 0x05be, + 0x05e0, 0x0602, 0x0624, 0x0646, 0x0668, 0x068a, 0x06ac, 0x06ce, + 0x06f0, 0x0712, 0x0734, 0x0756, 0x0778, 0x079a, 0x07bc, 0x07de, + 0x0800, 0x0822, 0x0022, 0x0055, 0x0088, 0x00bb, 0x00ee, 0x0121, + 0x0154, 0x0187, 0x01ba, 0x01ed, 0x01ed, 0x0208, 0x0220, 0x0220, + // Entry 7080 - 70BF + 0x0227, 0x022c, 0x023b, 0x024b, 0x0261, 0x0268, 0x0279, 0x028e, + 0x0295, 0x02a4, 0x02ae, 0x02b5, 0x02be, 0x02d7, 0x02eb, 0x0305, + 0x0319, 0x0328, 0x0343, 0x035c, 0x0376, 0x0386, 0x03a0, 0x03b8, + 0x03d3, 0x03e0, 0x03f2, 0x040e, 0x0429, 0x043c, 0x0449, 0x0455, + 0x0462, 0x046d, 0x047a, 0x0483, 0x049d, 0x04b3, 0x04d3, 0x04e2, + 0x04f1, 0x0505, 0x0517, 0x051a, 0x052b, 0x0532, 0x0536, 0x053d, + 0x0545, 0x054d, 0x055b, 0x0569, 0x0572, 0x0578, 0x0582, 0x0587, + 0x0595, 0x0599, 0x05a1, 0x05aa, 0x05b1, 0x05bd, 0x05c8, 0x05cc, + // Entry 70C0 - 70FF + 0x05dc, 0x05e6, 0x05f1, 0x0608, 0x0610, 0x0616, 0x061f, 0x0625, + 0x062a, 0x0634, 0x063d, 0x0642, 0x0648, 0x0651, 0x065a, 0x0665, + 0x0669, 0x066e, 0x0676, 0x0680, 0x0689, 0x0697, 0x06a3, 0x06ae, + 0x06ba, 0x06c3, 0x06ce, 0x06dc, 0x06e9, 0x06f2, 0x06f7, 0x0703, + 0x0717, 0x071c, 0x0720, 0x0725, 0x0731, 0x074c, 0x075a, 0x0764, + 0x076d, 0x0775, 0x077b, 0x0788, 0x078d, 0x0795, 0x079c, 0x07a5, + 0x07ae, 0x07b7, 0x07c2, 0x07c9, 0x07d7, 0x07ec, 0x07ff, 0x0809, + 0x0817, 0x0825, 0x082d, 0x083f, 0x084a, 0x0863, 0x087b, 0x0882, + // Entry 7100 - 713F + 0x0888, 0x0897, 0x08a4, 0x08b2, 0x08c0, 0x08d0, 0x08d9, 0x08ea, + 0x08f1, 0x08fd, 0x090a, 0x0917, 0x0924, 0x0933, 0x0941, 0x094e, + 0x0958, 0x096d, 0x097b, 0x0989, 0x09a3, 0x09b5, 0x09c3, 0x09d2, + 0x09ed, 0x09fe, 0x0a0a, 0x0a17, 0x0a35, 0x0a54, 0x0a5f, 0x0a70, + 0x0a7e, 0x0a8a, 0x0a98, 0x0aad, 0x0ab7, 0x0ac3, 0x0ac9, 0x0ad2, + 0x0ae0, 0x0ae7, 0x0af2, 0x0af8, 0x0b05, 0x0b14, 0x0b1e, 0x0b28, + 0x0b34, 0x0b3d, 0x0b45, 0x0b4c, 0x0b60, 0x0b6c, 0x0b82, 0x0b8b, + 0x0b91, 0x0ba1, 0x0ba8, 0x0bae, 0x0bbb, 0x0bd2, 0x0be9, 0x0bf9, + // Entry 7140 - 717F + 0x0c0c, 0x0c1a, 0x0c25, 0x0c2b, 0x0c31, 0x0c3d, 0x0c43, 0x0c4f, + 0x0c60, 0x0c6e, 0x0c75, 0x0c82, 0x0c88, 0x0c99, 0x0ca3, 0x0cb7, + 0x0cc1, 0x0cdc, 0x0cf5, 0x0d11, 0x0d25, 0x0d2c, 0x0d3f, 0x0d54, + 0x0d63, 0x0d6c, 0x0d83, 0x0d95, 0x0d9b, 0x0da8, 0x0db5, 0x0dbc, + 0x0dca, 0x0ddb, 0x0dea, 0x0dfe, 0x0e12, 0x0e1a, 0x0e1e, 0x0e36, + 0x0e3b, 0x0e45, 0x0e56, 0x0e5c, 0x0e6c, 0x0e73, 0x0e82, 0x0e91, + 0x0ea0, 0x0ead, 0x0eba, 0x0ecb, 0x0edc, 0x0ee3, 0x0ef0, 0x0ef5, + 0x0f16, 0x0f23, 0x0f2a, 0x0f4d, 0x0f6e, 0x0f8f, 0x0fb0, 0x0fd1, + // Entry 7180 - 71BF + 0x0fd4, 0x0fd9, 0x0fdb, 0x0fe8, 0x0feb, 0x0ff0, 0x0ff7, 0x0ffd, + 0x1000, 0x1006, 0x100f, 0x1014, 0x1019, 0x101e, 0x1023, 0x1026, + 0x102a, 0x102f, 0x1035, 0x103c, 0x1043, 0x1046, 0x1049, 0x104d, + 0x1055, 0x105c, 0x1068, 0x106b, 0x106e, 0x1076, 0x1081, 0x1085, + 0x1092, 0x109a, 0x10a0, 0x10ae, 0x10b8, 0x10cf, 0x10d3, 0x10da, + 0x10df, 0x10e5, 0x10f4, 0x1102, 0x1109, 0x1113, 0x111b, 0x1125, + 0x1130, 0x1138, 0x1143, 0x1151, 0x115b, 0x1166, 0x116e, 0x1176, + 0x117f, 0x118b, 0x1194, 0x119d, 0x11a7, 0x11af, 0x11b9, 0x11c1, + // Entry 71C0 - 71FF + 0x11c5, 0x11c8, 0x11cb, 0x11cf, 0x11d4, 0x11da, 0x11fa, 0x121c, + 0x123e, 0x1261, 0x1271, 0x1281, 0x128d, 0x129b, 0x12ab, 0x12be, + 0x12cd, 0x12d2, 0x12dc, 0x12e6, 0x12ed, 0x12f4, 0x12f9, 0x12fe, + 0x1304, 0x130a, 0x1318, 0x131d, 0x1324, 0x1329, 0x1332, 0x133f, + 0x134f, 0x135c, 0x1368, 0x1372, 0x1384, 0x1397, 0x139a, 0x139e, + 0x13a1, 0x13a6, 0x13ac, 0x13c7, 0x13dc, 0x13f3, 0x1401, 0x1416, + 0x1425, 0x143b, 0x144e, 0x145d, 0x1466, 0x1471, 0x1475, 0x1488, + 0x1490, 0x149d, 0x14ac, 0x14b1, 0x14bb, 0x14d1, 0x14de, 0x14e1, + // Entry 7200 - 723F + 0x14e6, 0x14fd, 0x1506, 0x150c, 0x1514, 0x151f, 0x152b, 0x1532, + 0x153d, 0x1544, 0x1548, 0x1551, 0x155c, 0x1560, 0x1569, 0x156d, + 0x1574, 0x1585, 0x158c, 0x1599, 0x15a5, 0x15af, 0x15be, 0x15cb, + 0x15db, 0x15e5, 0x15f0, 0x15fc, 0x1608, 0x1619, 0x1629, 0x1639, + 0x1658, 0x166b, 0x1677, 0x167b, 0x168a, 0x169a, 0x16b0, 0x16b7, + 0x16c2, 0x16cd, 0x16da, 0x16e6, 0x16f4, 0x1703, 0x170f, 0x1724, + 0x172d, 0x173e, 0x174f, 0x175a, 0x1770, 0x1789, 0x17a0, 0x17b8, + 0x17c8, 0x17ed, 0x17f1, 0x1802, 0x180b, 0x1813, 0x181e, 0x182a, + // Entry 7240 - 727F + 0x182d, 0x1838, 0x1848, 0x1856, 0x1864, 0x186c, 0x187d, 0x1887, + 0x189f, 0x18b9, 0x18c2, 0x18cb, 0x18d2, 0x18df, 0x18e8, 0x18f6, + 0x1906, 0x1913, 0x1919, 0x1921, 0x193f, 0x194a, 0x1953, 0x195d, + 0x1966, 0x1971, 0x1976, 0x1980, 0x1986, 0x198a, 0x199c, 0x19a1, + 0x19ac, 0x19bd, 0x19d7, 0x19e9, 0x19f4, 0x19fe, 0x1a05, 0x1a12, + 0x1a23, 0x1a46, 0x1a66, 0x1a85, 0x1aa2, 0x1ac0, 0x1ac7, 0x1ad2, + 0x1adb, 0x1ae7, 0x1b11, 0x1b1f, 0x1b2f, 0x1b3f, 0x1b50, 0x1b56, + 0x1b67, 0x1b73, 0x1b7d, 0x1b82, 0x1b8f, 0x1b9d, 0x1bac, 0x1bb8, + // Entry 7280 - 72BF + 0x1bd1, 0x1c06, 0x1c54, 0x1c86, 0x1cbc, 0x1cd1, 0x1ce7, 0x1d07, + 0x1d0e, 0x1d29, 0x1d47, 0x1d4e, 0x1d5b, 0x1d79, 0x1d98, 0x1da9, + 0x1dbd, 0x1dc0, 0x1dc4, 0x1dcd, 0x1dd1, 0x1dee, 0x1df6, 0x1e01, + 0x1e0d, 0x1e2c, 0x1e4a, 0x1e7e, 0x1e9e, 0x1eba, 0x1ed6, 0x1ee0, + 0x1f06, 0x1f2a, 0x1f42, 0x1f5a, 0x1f78, 0x1f7c, 0x1f8a, 0x1f90, + 0x1f96, 0x1fa2, 0x1fa7, 0x1fad, 0x1fb7, 0x1fc0, 0x1fcc, 0x1fec, + 0x2008, 0x2016, 0x2029, 0x203c, 0x204c, 0x205d, 0x2071, 0x2083, + 0x2097, 0x20a9, 0x20c1, 0x20db, 0x20f9, 0x2119, 0x213a, 0x215b, + // Entry 72C0 - 72FF + 0x216f, 0x2192, 0x219e, 0x21c5, 0x21ed, 0x2205, 0x2216, 0x2227, + 0x2233, 0x223c, 0x2249, 0x224e, 0x2254, 0x225d, 0x2277, 0x2286, + 0x229b, 0x22b0, 0x22c7, 0x22dd, 0x22f3, 0x2308, 0x231f, 0x2336, + 0x234c, 0x2361, 0x2379, 0x2391, 0x23a6, 0x23bb, 0x23d2, 0x23e8, + 0x23fe, 0x2413, 0x242a, 0x2441, 0x2457, 0x246c, 0x2484, 0x249c, + 0x24a9, 0x24ca, 0x24ee, 0x24f6, 0x250f, 0x251b, 0x251f, 0x2525, + 0x2536, 0x2550, 0x2559, 0x255d, 0x257c, 0x2589, 0x2598, 0x259e, + 0x25a8, 0x25b0, 0x25bb, 0x25d7, 0x25f3, 0x2610, 0x2629, 0x2642, + // Entry 7300 - 733F + 0x265b, 0x2671, 0x2681, 0x2691, 0x26a8, 0x26b7, 0x26d0, 0x26e1, + 0x26ee, 0x26ff, 0x2717, 0x272e, 0x2743, 0x2754, 0x2765, 0x2778, + 0x2798, 0x27c1, 0x27d8, 0x27f1, 0x2806, 0x282f, 0x2864, 0x2887, + 0x28a9, 0x28cc, 0x28ee, 0x2911, 0x2933, 0x2956, 0x2976, 0x2998, + 0x29b8, 0x29da, 0x29fa, 0x2a1c, 0x2a27, 0x2a37, 0x2a49, 0x2a62, + 0x2a69, 0x2a7a, 0x2a96, 0x2ab2, 0x2ac8, 0x2ad6, 0x2ae4, 0x2af4, + 0x2b04, 0x2b16, 0x2b1f, 0x2b34, 0x2b3d, 0x2b43, 0x2b4f, 0x2b57, + 0x2b68, 0x2b7a, 0x2b98, 0x2bad, 0x2bbf, 0x2bcf, 0x2bde, 0x2bea, + // Entry 7340 - 737F + 0x2bf0, 0x2bfb, 0x2c0e, 0x2c1b, 0x2c27, 0x2c31, 0x2c40, 0x2c4e, + 0x2c52, 0x2c5b, 0x2c63, 0x2c71, 0x2c7b, 0x2c86, 0x2c8e, 0x2c92, + 0x2c97, 0x2ca2, 0x2cb1, 0x2cc4, 0x2cd2, 0x2cda, 0x2ce2, 0x2ce9, + 0x2d13, 0x2d21, 0x2d3a, 0x2d53, 0x2d5e, 0x2d65, 0x2d78, 0x2d8e, + 0x2d99, 0x2da5, 0x2da9, 0x2dc4, 0x2dd4, 0x2de4, 0x2df3, 0x2e03, + 0x2e15, 0x2e28, 0x2e3a, 0x2e4e, 0x2e61, 0x2e75, 0x2e86, 0x2e98, + 0x2ea3, 0x2eb8, 0x2ec6, 0x2edc, 0x2eeb, 0x2f03, 0x2f17, 0x2f34, + 0x2f44, 0x2f5e, 0x2f67, 0x2f71, 0x2f7c, 0x2f8d, 0x2fa0, 0x2fa5, + // Entry 7380 - 73BF + 0x2fb2, 0x2fd1, 0x2fe7, 0x3003, 0x3030, 0x305b, 0x308f, 0x30a5, + 0x30bc, 0x30c8, 0x30e6, 0x3103, 0x3110, 0x3133, 0x314f, 0x315c, + 0x3168, 0x317b, 0x3188, 0x319c, 0x31a8, 0x31b5, 0x31c4, 0x31d0, + 0x31e4, 0x3202, 0x321f, 0x3239, 0x3263, 0x3295, 0x32a6, 0x32b2, + 0x32bc, 0x32c8, 0x32d3, 0x32e3, 0x32fc, 0x331a, 0x3337, 0x3345, + 0x3351, 0x335b, 0x3366, 0x3370, 0x337e, 0x3390, 0x33a4, 0x33af, + 0x33d2, 0x33e8, 0x33f7, 0x3403, 0x3410, 0x341a, 0x342c, 0x3442, + 0x3465, 0x347f, 0x349f, 0x34c6, 0x34dd, 0x34fe, 0x350e, 0x351d, + // Entry 73C0 - 73FF + 0x352b, 0x3541, 0x3556, 0x3566, 0x357c, 0x3595, 0x35a9, 0x35bd, + 0x35cf, 0x35e2, 0x35f6, 0x3613, 0x363b, 0x364a, 0x3662, 0x367a, + 0x3692, 0x36aa, 0x36c2, 0x36da, 0x36f9, 0x3718, 0x3737, 0x3756, + 0x3773, 0x3790, 0x37ad, 0x37ca, 0x37ed, 0x3810, 0x3833, 0x3856, + 0x386d, 0x3884, 0x389b, 0x38b2, 0x38cf, 0x38ec, 0x3909, 0x3926, + 0x3942, 0x396e, 0x3989, 0x39b4, 0x39c4, 0x39d2, 0x39e3, 0x39f3, + 0x3a0e, 0x3a2f, 0x3a48, 0x3a67, 0x3a7f, 0x3a97, 0x3ad3, 0x3b08, + 0x3b41, 0x3b5b, 0x3b7a, 0x3b9f, 0x3bb1, 0x3bcb, 0x3bd8, 0x3bed, + // Entry 7400 - 743F + 0x3bf3, 0x3bfd, 0x3c0d, 0x3c18, 0x3c28, 0x3c49, 0x3c4e, 0x3c53, + 0x3c5d, 0x3c64, 0x3c68, 0x3c70, 0x3c73, 0x3c7f, 0x3c89, 0x3c91, + 0x3c98, 0x3ca1, 0x3cac, 0x3cb6, 0x3cc9, 0x3ccd, 0x3cda, 0x3ce4, + 0x3cf7, 0x3d0b, 0x3d19, 0x3d2a, 0x3d31, 0x3d39, 0x3d49, 0x3d5b, + 0x3d6c, 0x3d7a, 0x3d7e, 0x3d85, 0x3d8e, 0x3da6, 0x3dbc, 0x3dcd, + 0x3de8, 0x3dff, 0x3e03, 0x3e10, 0x3e1e, 0x3e2f, 0x3e4d, 0x3e61, + 0x3e75, 0x3e8d, 0x3e94, 0x3e9f, 0x3ea8, 0x3eba, 0x3ec4, 0x3ed2, + 0x3ee3, 0x3eee, 0x3efb, 0x3f03, 0x3f0e, 0x3f14, 0x3f20, 0x3f26, + // Entry 7440 - 747F + 0x3f2a, 0x3f31, 0x3f41, 0x3f48, 0x3f55, 0x3f61, 0x3f7e, 0x3f8d, + 0x3fa7, 0x3fb2, 0x3fbe, 0x3fcc, 0x3fe2, 0x3fef, 0x3ffb, 0x3ffe, + 0x400e, 0x401c, 0x402c, 0x002c, 0x003d, 0x0043, 0x004b, 0x0053, + 0x0060, 0x006a, 0x0087, 0x009b, 0x00b5, 0x00c3, 0x00de, 0x00f0, + 0x0101, 0x0101, 0x010a, 0x011e, 0x012f, 0x013d, 0x0144, 0x0151, + 0x0156, 0x0156, 0x0178, 0x0191, 0x01ab, 0x01c6, 0x01e1, 0x0201, + 0x0221, 0x0243, 0x0263, 0x0285, 0x02a2, 0x02c1, 0x02e0, 0x02fc, + 0x0325, 0x0347, 0x036e, 0x0397, 0x03c0, 0x03de, 0x03f8, 0x0413, + // Entry 7480 - 74BF + 0x0430, 0x044f, 0x046e, 0x048f, 0x04a9, 0x04c5, 0x04e3, 0x0503, + 0x0527, 0x054c, 0x056c, 0x0591, 0x05ba, 0x05e0, 0x0608, 0x0630, + 0x0660, 0x0691, 0x06b0, 0x06cd, 0x06eb, 0x070d, 0x0738, 0x075e, + 0x0791, 0x07ba, 0x07e3, 0x080e, 0x082b, 0x084a, 0x0869, 0x0888, + 0x08a4, 0x08c2, 0x08e1, 0x0903, 0x0920, 0x093d, 0x095c, 0x097d, + 0x099e, 0x09ba, 0x09d8, 0x09f8, 0x0a13, 0x0a30, 0x0a4d, 0x0a67, + 0x0a80, 0x0a9c, 0x0aba, 0x0ad3, 0x0aec, 0x0b08, 0x0b22, 0x0b3d, + 0x0b60, 0x0b85, 0x0ba3, 0x0bc0, 0x0be5, 0x0c04, 0x0c1e, 0x0c39, + // Entry 74C0 - 74FF + 0x0c59, 0x0c74, 0x0c93, 0x0cae, 0x0cd2, 0x0cef, 0x0d1a, 0x0d47, + 0x0d68, 0x0d89, 0x0da6, 0x0dc4, 0x0de4, 0x0e00, 0x0e22, 0x0e40, + 0x0e60, 0x0e80, 0x0ea0, 0x0ec0, 0x0edd, 0x0eff, 0x0f24, 0x0f40, + 0x0f5a, 0x0f75, 0x0f94, 0x0faf, 0x0fce, 0x0fee, 0x03ee, 0x041a, + 0x0444, 0x0471, 0x049d, 0x04b8, 0x04d0, 0x04e1, 0x04f3, 0x050a, + 0x0526, 0x0550, 0x055c, 0x056d, 0x0588, 0x059a, 0x05ad, 0x05be, + 0x05d0, 0x05e7, 0x0603, 0x0632, 0x065d, 0x066a, 0x067c, 0x0694, + 0x06ae, 0x06df, 0x070c, 0x071a, 0x072c, 0x0744, 0x075e, 0x078a, + // Entry 7500 - 753F + 0x079a, 0x07ab, 0x07bd, 0x07cd, 0x07e2, 0x07f8, 0x0813, 0x081f, + 0x082c, 0x083a, 0x0846, 0x0853, 0x0865, 0x087c, 0x0896, 0x08b1, + 0x08ca, 0x08e4, 0x0903, 0x0927, 0x0940, 0x095a, 0x0972, 0x098b, + 0x09a9, 0x09cc, 0x09e7, 0x0a03, 0x0a1d, 0x0a38, 0x0a58, 0x0a76, + 0x0a95, 0x0aad, 0x0acf, 0x0aec, 0x0b0a, 0x0b21, 0x0b42, 0x0b6a, + 0x0b87, 0x0ba4, 0x0bc1, 0x0bdd, 0x0bf6, 0x0c15, 0x0c33, 0x0c56, + 0x0c77, 0x0c96, 0x0cb5, 0x0cd7, 0x00d7, 0x0104, 0x012f, 0x015d, + 0x018a, 0x01b8, 0x01e4, 0x0213, 0x0241, 0x026e, 0x0299, 0x02c7, + // Entry 7540 - 757F + 0x02f4, 0x02f4, 0x0324, 0x0352, 0x0383, 0x03b3, 0x03dd, 0x0405, + 0x0430, 0x045a, 0x048a, 0x04b8, 0x04e9, 0x0519, 0x054f, 0x0583, + 0x05ba, 0x05f0, 0x0621, 0x0650, 0x0682, 0x06b3, 0x06e4, 0x0713, + 0x0745, 0x0776, 0x07a5, 0x07d2, 0x0802, 0x0831, 0x0861, 0x088f, + 0x08c0, 0x08f0, 0x0925, 0x0958, 0x098e, 0x09c3, 0x09de, 0x09f7, + 0x0a13, 0x0a2e, 0x0a45, 0x0a5a, 0x0a72, 0x0a89, 0x0aa3, 0x0abb, + 0x0ad6, 0x0af0, 0x0b10, 0x0b2e, 0x0b4f, 0x0b6f, 0x0b84, 0x0b97, + 0x0bad, 0x0bc2, 0x03c2, 0x03dc, 0x03f4, 0x040f, 0x0429, 0x0444, + // Entry 7580 - 75BF + 0x045f, 0x047a, 0x0495, 0x04b0, 0x04c8, 0x00c8, 0x00ee, 0x0112, + 0x0139, 0x015f, 0x0186, 0x01ad, 0x01d4, 0x01fb, 0x021b, 0x0239, + 0x025a, 0x027a, 0x029b, 0x02bc, 0x02dd, 0x02fe, 0x0325, 0x034a, + 0x0372, 0x0399, 0x03c1, 0x03e9, 0x0411, 0x0439, 0x045f, 0x0483, + 0x04aa, 0x04d0, 0x04f7, 0x051e, 0x0545, 0x056c, 0x0597, 0x05c0, + 0x05ec, 0x0617, 0x0643, 0x066f, 0x069b, 0x06c7, 0x02c7, 0x02e3, + 0x02fd, 0x031a, 0x0336, 0x0365, 0x0392, 0x03c2, 0x03f1, 0x0412, + 0x0431, 0x0453, 0x0474, 0x048f, 0x04b1, 0x04d1, 0x04f2, 0x0515, + // Entry 75C0 - 75FF + 0x0539, 0x0559, 0x057a, 0x059b, 0x05be, 0x05e0, 0x0602, 0x062c, + 0x0657, 0x0682, 0x06ae, 0x06c9, 0x06eb, 0x02eb, 0x02fc, 0x030c, + 0x0321, 0x032a, 0x0337, 0x034d, 0x0357, 0x0363, 0x0374, 0x0380, + 0x0393, 0x03a3, 0x03b4, 0x03bd, 0x03e7, 0x03e7, 0x03fb, 0x0405, + 0x0413, 0x0430, 0x043d, 0x0447, 0x0450, 0x045d, 0x005d, 0x006b, + 0x006b, 0x0071, 0x0077, 0x0084, 0x0094, 0x0099, 0x00af, 0x00b7, + 0x00bd, 0x00ce, 0x00d7, 0x00e1, 0x00e9, 0x00e9, 0x00f6, 0x010a, + 0x011a, 0x0127, 0x012c, 0x0134, 0x0139, 0x014a, 0x015c, 0x016d, + // Entry 7600 - 763F + 0x0179, 0x018d, 0x018d, 0x0196, 0x019d, 0x01a5, 0x01aa, 0x01b0, + 0x01b6, 0x01c4, 0x01cf, 0x01e2, 0x01f3, 0x01f6, 0x0203, 0x020a, + 0x0213, 0x021b, 0x021b, 0x021f, 0x0228, 0x0230, 0x0236, 0x0242, + 0x0247, 0x024b, 0x024e, 0x0253, 0x0256, 0x025e, 0x0267, 0x026b, + 0x0272, 0x0278, 0x0282, 0x0288, 0x028d, 0x028d, 0x0299, 0x0299, + 0x02ba, 0x02db, 0x02fc, 0x031d, 0x033e, 0x035f, 0x0380, 0x03a1, + 0x03c2, 0x03e3, 0x0404, 0x0425, 0x0446, 0x0467, 0x0488, 0x04a9, + 0x04ca, 0x04eb, 0x050c, 0x052d, 0x054e, 0x056f, 0x0590, 0x05b1, + // Entry 7640 - 767F + 0x05d2, 0x05f3, 0x0614, 0x0635, 0x0656, 0x0677, 0x0698, 0x06b9, + 0x06da, 0x06fb, 0x071c, 0x073d, 0x075e, 0x077f, 0x07a0, 0x07c1, + 0x07e2, 0x0803, 0x0824, 0x0845, 0x0866, 0x0887, 0x08a8, 0x08c9, + 0x08ea, 0x090b, 0x092c, 0x094d, 0x096e, 0x098f, 0x09b0, 0x09d1, + 0x09f2, 0x0a13, 0x0a34, 0x0a55, 0x0a76, 0x0a97, 0x0ab8, 0x0ad9, + 0x0afa, 0x0b1b, 0x0b3c, 0x0b5d, 0x0b7e, 0x0b9f, 0x0bc0, 0x0be1, + 0x0c02, 0x0c23, 0x0c44, 0x0c65, 0x0c86, 0x0ca7, 0x0cc8, 0x0ce9, + 0x0d0a, 0x0d2b, 0x0d4c, 0x0d6d, 0x0d8e, 0x0daf, 0x0dd0, 0x0df1, + // Entry 7680 - 76BF + 0x0e12, 0x0e33, 0x0e54, 0x0e75, 0x0e96, 0x0eb7, 0x0ed8, 0x0ef9, + 0x0f1a, 0x0f3b, 0x0f5c, 0x0f7d, 0x0f9e, 0x0fbf, 0x0fe0, 0x1001, + 0x1022, 0x1043, 0x1064, 0x1085, 0x10a6, 0x10c7, 0x10e8, 0x1109, + 0x112a, 0x114b, 0x116c, 0x118d, 0x11ae, 0x11cf, 0x11f0, 0x1211, + 0x1232, 0x1253, 0x1274, 0x1295, 0x12b6, 0x12d7, 0x12f8, 0x1319, + 0x133a, 0x135b, 0x137c, 0x139d, 0x13be, 0x13df, 0x1400, 0x1421, + 0x1442, 0x1463, 0x1484, 0x14a5, 0x14c6, 0x14e7, 0x1508, 0x1529, + 0x154a, 0x156b, 0x158c, 0x15ad, 0x15ce, 0x15ef, 0x1610, 0x1631, + // Entry 76C0 - 76FF + 0x1652, 0x1673, 0x1694, 0x16b5, 0x16d6, 0x16f7, 0x1718, 0x1739, + 0x175a, 0x177b, 0x179c, 0x17bd, 0x17de, 0x17ff, 0x1820, 0x1841, + 0x1862, 0x1883, 0x18a4, 0x18c5, 0x18e6, 0x1907, 0x1928, 0x1949, + 0x196a, 0x198b, 0x19ac, 0x19cd, 0x19ee, 0x1a0f, 0x1a30, 0x1a51, + 0x1a72, 0x1a93, 0x1ab4, 0x1ad5, 0x1af6, 0x1b17, 0x1b38, 0x1b59, + 0x1b7a, 0x1b9b, 0x1bbc, 0x1bdd, 0x1bfe, 0x1c1f, 0x1c40, 0x1c61, + 0x1c82, 0x1ca3, 0x1cc4, 0x1ce5, 0x1d06, 0x1d27, 0x1d48, 0x1d69, + 0x1d8a, 0x1dab, 0x1dcc, 0x1ded, 0x1e0e, 0x1e2f, 0x1e50, 0x1e71, + // Entry 7700 - 773F + 0x1e92, 0x1eb3, 0x1ed4, 0x1ef5, 0x1f16, 0x1f37, 0x1f58, 0x1f79, + 0x1f9a, 0x1fbb, 0x1fdc, 0x1ffd, 0x201e, 0x203f, 0x2060, 0x2081, + 0x20a2, 0x20c3, 0x20e4, 0x2105, 0x2126, 0x2147, 0x2168, 0x2189, + 0x21aa, 0x21cb, 0x21ec, 0x220d, 0x222e, 0x224f, 0x2270, 0x2291, + 0x22b2, 0x22d3, 0x22f4, 0x2315, 0x2336, 0x2357, 0x2378, 0x2399, + 0x23ba, 0x23db, 0x23fc, 0x241d, 0x243e, 0x245f, 0x2480, 0x24a1, + 0x24c2, 0x24e3, 0x2504, 0x2525, 0x2546, 0x2567, 0x2588, 0x25a9, + 0x25ca, 0x25eb, 0x260c, 0x262d, 0x264e, 0x266f, 0x2690, 0x26b1, + // Entry 7740 - 777F + 0x26d2, 0x26f3, 0x2714, 0x2735, 0x2756, 0x2777, 0x2798, 0x27b9, + 0x27da, 0x27fb, 0x281c, 0x283d, 0x285e, 0x287f, 0x28a0, 0x28c1, + 0x28e2, 0x2903, 0x2924, 0x2945, 0x2966, 0x2987, 0x29a8, 0x29c9, + 0x29ea, 0x2a0b, 0x2a2c, 0x2a4d, 0x2a6e, 0x2a8f, 0x2ab0, 0x2ad1, + 0x2af2, 0x2b13, 0x2b34, 0x2b55, 0x2b76, 0x2b97, 0x2bb8, 0x2bd9, + 0x2bfa, 0x2c1b, 0x2c3c, 0x2c5d, 0x2c7e, 0x2c9f, 0x2cc0, 0x2ce1, + 0x2d02, 0x2d23, 0x2d44, 0x2d65, 0x2d86, 0x2da7, 0x2dc8, 0x2de9, + 0x2e0a, 0x2e2b, 0x2e4c, 0x2e6d, 0x2e8e, 0x2eaf, 0x2ed0, 0x2ef1, + // Entry 7780 - 77BF + 0x2f12, 0x2f33, 0x2f54, 0x2f75, 0x2f96, 0x2fb7, 0x2fd8, 0x2ff9, + 0x301a, 0x303b, 0x305c, 0x307d, 0x309e, 0x30bf, 0x30e0, 0x3101, + 0x3122, 0x3143, 0x3164, 0x3185, 0x31a6, 0x31c7, 0x31e8, 0x3209, + 0x322a, 0x324b, 0x326c, 0x328d, 0x32ae, 0x32cf, 0x32f0, 0x3311, + 0x3332, 0x3353, 0x3374, 0x3395, 0x33b6, 0x33d7, 0x33f8, 0x3419, + 0x343a, 0x345b, 0x347c, 0x349d, 0x34be, 0x34df, 0x3500, 0x3521, + 0x3542, 0x3563, 0x3584, 0x35a5, 0x35c6, 0x35e7, 0x3608, 0x3629, + 0x364a, 0x366b, 0x368c, 0x36ad, 0x36ce, 0x36ef, 0x3710, 0x3731, + // Entry 77C0 - 77FF + 0x3752, 0x3773, 0x3794, 0x37b5, 0x37d6, 0x37f7, 0x3818, 0x3839, + 0x385a, 0x387b, 0x389c, 0x38bd, 0x38de, 0x38ff, 0x3920, 0x3941, + 0x3962, 0x3983, 0x39a4, 0x39c5, 0x39e6, 0x3a07, 0x3a28, 0x3a49, + 0x3a6a, 0x3a8b, 0x3aac, 0x3acd, 0x3aee, 0x3b0f, 0x3b30, 0x3b51, + 0x3b72, 0x3b93, 0x3bb4, 0x3bd5, 0x3bf6, 0x3c17, 0x3c38, 0x3c59, + 0x3c7a, 0x3c9b, 0x3cbc, 0x3cdd, 0x3cfe, 0x3d1f, 0x3d40, 0x3d61, + 0x3d82, 0x3da3, 0x3dc4, 0x3de5, 0x3e06, 0x3e27, 0x3e48, 0x3e69, + 0x3e8a, 0x3eab, 0x3ecc, 0x3eed, 0x3f0e, 0x3f2f, 0x3f50, 0x3f71, + // Entry 7800 - 783F + 0x3f92, 0x3fb3, 0x3fd4, 0x3ff5, 0x4016, 0x4037, 0x4058, 0x4079, + 0x409a, 0x40bb, 0x40dc, 0x40fd, 0x411e, 0x413f, 0x4160, 0x4181, + 0x41a2, 0x41c3, 0x41e4, 0x4205, 0x4226, 0x4247, 0x4268, 0x4289, + 0x42aa, 0x42cb, 0x42ec, 0x430d, 0x432e, 0x434f, 0x4370, 0x4391, + 0x43b2, 0x43d3, 0x43f4, 0x4415, 0x4436, 0x4457, 0x4478, 0x4499, + 0x44ba, 0x44db, 0x44fc, 0x451d, 0x453e, 0x455f, 0x4580, 0x45a1, + 0x45c2, 0x45e3, 0x4604, 0x4625, 0x4646, 0x4667, 0x4688, 0x46a9, + 0x46ca, 0x46eb, 0x470c, 0x472d, 0x474e, 0x476f, 0x4790, 0x47b1, + // Entry 7840 - 787F + 0x47d2, 0x47f3, 0x4814, 0x4835, 0x4856, 0x4877, 0x0077, 0x0083, + 0x0083, 0x008c, 0x00a0, 0x00b2, 0x00c1, 0x00d0, 0x00e0, 0x00ed, + 0x00fb, 0x010f, 0x0124, 0x0130, 0x013d, 0x0146, 0x0156, 0x0163, + 0x016e, 0x017c, 0x0189, 0x0196, 0x01a5, 0x01b3, 0x01c1, 0x01ce, + 0x01dd, 0x01ec, 0x01fa, 0x0203, 0x0210, 0x0222, 0x0231, 0x0246, + 0x0257, 0x0268, 0x0282, 0x029c, 0x02b6, 0x02d0, 0x02ea, 0x0304, + 0x031e, 0x0338, 0x0352, 0x036c, 0x0386, 0x03a0, 0x03ba, 0x03d4, + 0x03ee, 0x0408, 0x0422, 0x043c, 0x0456, 0x0470, 0x048a, 0x04a4, + // Entry 7880 - 78BF + 0x04be, 0x04d8, 0x04f2, 0x050c, 0x0523, 0x0536, 0x054e, 0x0563, + 0x056f, 0x057f, 0x0597, 0x05af, 0x05c7, 0x05df, 0x05f7, 0x060f, + 0x0627, 0x063f, 0x0657, 0x066f, 0x0687, 0x069f, 0x06b7, 0x06cf, + 0x06e7, 0x06ff, 0x0717, 0x072f, 0x0747, 0x075f, 0x0777, 0x078f, + 0x07a7, 0x07bf, 0x07d7, 0x07ef, 0x0805, 0x0816, 0x082d, 0x0836, + 0x0840, 0x0040, 0x0055, 0x006a, 0x007f, 0x0094, 0x00a9, 0x00be, + 0x00d3, 0x00e8, 0x00fd, 0x0112, 0x0127, 0x013c, 0x0151, 0x0166, + 0x017b, 0x0190, 0x01a5, 0x01ba, 0x01cf, 0x01e4, 0x01f9, 0x020e, + // Entry 78C0 - 78FF + 0x0223, 0x0238, 0x024d, 0x0262, 0x0277, 0x028c, 0x02a1, 0x02b6, + 0x02cb, 0x02e0, 0x02f5, 0x030a, 0x031f, 0x0334, 0x0349, 0x035e, + 0x0373, 0x0388, 0x039d, 0x03b2, 0x03c7, 0x03dc, 0x03f1, 0x0406, + 0x041b, 0x0430, 0x0445, 0x045a, 0x046f, 0x0484, 0x0499, 0x04ae, + 0x04c3, 0x04d8, 0x04ed, 0x0502, 0x0517, 0x052c, 0x0541, 0x0556, + 0x056b, 0x0580, 0x0595, 0x05aa, 0x05bf, 0x05d4, 0x05e9, 0x05fe, + 0x0613, 0x0628, 0x063d, 0x0652, 0x0667, 0x067c, 0x0691, 0x06a6, + 0x06bb, 0x06d0, 0x06e5, 0x06fa, 0x070f, 0x0725, 0x073b, 0x0751, + // Entry 7900 - 793F + 0x0767, 0x077d, 0x0793, 0x07a9, 0x07bf, 0x07d5, 0x07eb, 0x0801, + 0x0817, 0x082d, 0x0843, 0x0859, 0x086f, 0x0885, 0x089b, 0x08b1, + 0x08c7, 0x08dd, 0x08f3, 0x0909, 0x091f, 0x0935, 0x094b, 0x0961, + 0x0977, 0x098d, 0x09a3, 0x09b9, 0x09cf, 0x09e5, 0x09fb, 0x0a11, + 0x0a27, 0x0a3d, 0x0a53, 0x0a69, 0x0a7f, 0x0a95, 0x0aab, 0x0ac1, + 0x0ad7, 0x0aed, 0x0b03, 0x0b19, 0x0b2f, 0x0b45, 0x0b5b, 0x0b71, + 0x0b87, 0x0b9d, 0x0bb3, 0x0bc9, 0x0bdf, 0x0bf5, 0x0c0b, 0x0c21, + 0x0c37, 0x0c4d, 0x0c63, 0x0c79, 0x0c8f, 0x0ca5, 0x0cbb, 0x0cd1, + // Entry 7940 - 797F + 0x0ce7, 0x0cfd, 0x0d13, 0x0d29, 0x0d3f, 0x0d55, 0x0d6b, 0x0d81, + 0x0d97, 0x0dad, 0x0dc3, 0x0dd9, 0x0def, 0x0e05, 0x0e1b, 0x0e31, + 0x0e47, 0x0e5d, 0x0e73, 0x0e89, 0x0e9f, 0x0eb5, 0x0ecb, 0x0ee1, + 0x0ef7, 0x0f0d, 0x0f23, 0x0f39, 0x0f4f, 0x0f65, 0x0f7b, 0x0f91, + 0x0fa7, 0x0fbd, 0x0fd3, 0x0fe9, 0x0fff, 0x1015, 0x102b, 0x1041, + 0x1057, 0x106d, 0x1083, 0x1099, 0x10af, 0x10c5, 0x10db, 0x10f1, + 0x1107, 0x111d, 0x1133, 0x1149, 0x115f, 0x1175, 0x118b, 0x11a1, + 0x11b7, 0x11cd, 0x11e3, 0x11f9, 0x120f, 0x1225, 0x123b, 0x1251, + // Entry 7980 - 79BF + 0x1267, 0x127d, 0x1293, 0x12a9, 0x12bf, 0x12d5, 0x12eb, 0x1301, + 0x1317, 0x132d, 0x1343, 0x1359, 0x136f, 0x1385, 0x139b, 0x13b1, + 0x13c7, 0x13dd, 0x13f3, 0x1409, 0x141f, 0x1435, 0x144b, 0x1461, + 0x1477, 0x148d, +} // Size: 62284 bytes + +const data string = ("" + // Size: 787597 bytes; the redundant, explicit parens are for https://golang.org/issue/18078 + "<control><CJK Ideograph Extension A><CJK Ideograph><Hangul Syllable><Non" + + " Private Use High Surrogate><Private Use High Surrogate><Low Surrogate><" + + "Private Use><Tangut Ideograph><CJK Ideograph Extension B><CJK Ideograph " + + "Extension C><CJK Ideograph Extension D><CJK Ideograph Extension E><Plane" + + " 15 Private Use><Plane 16 Private Use>SPACEEXCLAMATION MARKQUOTATION MAR" + + "KNUMBER SIGNDOLLAR SIGNPERCENT SIGNAMPERSANDAPOSTROPHELEFT PARENTHESISRI" + + "GHT PARENTHESISASTERISKPLUS SIGNCOMMAHYPHEN-MINUSFULL STOPSOLIDUSDIGIT Z" + + "ERODIGIT ONEDIGIT TWODIGIT THREEDIGIT FOURDIGIT FIVEDIGIT SIXDIGIT SEVEN" + + "DIGIT EIGHTDIGIT NINECOLONSEMICOLONLESS-THAN SIGNEQUALS SIGNGREATER-THAN" + + " SIGNQUESTION MARKCOMMERCIAL ATLATIN CAPITAL LETTER ALATIN CAPITAL LETTE" + + "R BLATIN CAPITAL LETTER CLATIN CAPITAL LETTER DLATIN CAPITAL LETTER ELAT" + + "IN CAPITAL LETTER FLATIN CAPITAL LETTER GLATIN CAPITAL LETTER HLATIN CAP" + + "ITAL LETTER ILATIN CAPITAL LETTER JLATIN CAPITAL LETTER KLATIN CAPITAL L" + + "ETTER LLATIN CAPITAL LETTER MLATIN CAPITAL LETTER NLATIN CAPITAL LETTER " + + "OLATIN CAPITAL LETTER PLATIN CAPITAL LETTER QLATIN CAPITAL LETTER RLATIN" + + " CAPITAL LETTER SLATIN CAPITAL LETTER TLATIN CAPITAL LETTER ULATIN CAPIT" + + "AL LETTER VLATIN CAPITAL LETTER WLATIN CAPITAL LETTER XLATIN CAPITAL LET" + + "TER YLATIN CAPITAL LETTER ZLEFT SQUARE BRACKETREVERSE SOLIDUSRIGHT SQUAR" + + "E BRACKETCIRCUMFLEX ACCENTLOW LINEGRAVE ACCENTLATIN SMALL LETTER ALATIN " + + "SMALL LETTER BLATIN SMALL LETTER CLATIN SMALL LETTER DLATIN SMALL LETTER" + + " ELATIN SMALL LETTER FLATIN SMALL LETTER GLATIN SMALL LETTER HLATIN SMAL" + + "L LETTER ILATIN SMALL LETTER JLATIN SMALL LETTER KLATIN SMALL LETTER LLA" + + "TIN SMALL LETTER MLATIN SMALL LETTER NLATIN SMALL LETTER OLATIN SMALL LE" + + "TTER PLATIN SMALL LETTER QLATIN SMALL LETTER RLATIN SMALL LETTER SLATIN " + + "SMALL LETTER TLATIN SMALL LETTER ULATIN SMALL LETTER VLATIN SMALL LETTER" + + " WLATIN SMALL LETTER XLATIN SMALL LETTER YLATIN SMALL LETTER ZLEFT CURLY" + + " BRACKETVERTICAL LINERIGHT CURLY BRACKETTILDENO-BREAK SPACEINVERTED EXCL" + + "AMATION MARKCENT SIGNPOUND SIGNCURRENCY SIGNYEN SIGNBROKEN BARSECTION SI" + + "GNDIAERESISCOPYRIGHT SIGNFEMININE ORDINAL INDICATORLEFT-POINTING DOUBLE " + + "ANGLE QUOTATION MARKNOT SIGNSOFT HYPHENREGISTERED SIGNMACRONDEGREE SIGNP" + + "LUS-MINUS SIGNSUPERSCRIPT TWOSUPERSCRIPT THREEACUTE ACCENTMICRO SIGNPILC" + + "ROW SIGNMIDDLE DOTCEDILLASUPERSCRIPT ONEMASCULINE ORDINAL INDICATORRIGHT" + + "-POINTING DOUBLE ANGLE QUOTATION MARKVULGAR FRACTION ONE QUARTERVULGAR F" + + "RACTION ONE HALFVULGAR FRACTION THREE QUARTERSINVERTED QUESTION MARKLATI" + + "N CAPITAL LETTER A WITH GRAVELATIN CAPITAL LETTER A WITH ACUTELATIN CAPI" + + "TAL LETTER A WITH CIRCUMFLEXLATIN CAPITAL LETTER A WITH TILDELATIN CAPIT" + + "AL LETTER A WITH DIAERESISLATIN CAPITAL LETTER A WITH RING ABOVELATIN CA" + + "PITAL LETTER AELATIN CAPITAL LETTER C WITH CEDILLALATIN CAPITAL LETTER E" + + " WITH GRAVELATIN CAPITAL LETTER E WITH ACUTELATIN CAPITAL LETTER E WITH " + + "CIRCUMFLEXLATIN CAPITAL LETTER E WITH DIAERESISLATIN CAPITAL LETTER I WI" + + "TH GRAVELATIN CAPITAL LETTER I WITH ACUTELATIN CAPITAL LETTER I WITH CIR" + + "CUMFLEXLATIN CAPITAL LETTER I WITH DIAERESISLATIN CAPITAL LETTER ETHLATI" + + "N CAPITAL LETTER N WITH TILDELATIN CAPITAL LETTER O WITH GRAVELATIN CAPI" + + "TAL LETTER O WITH ACUTELATIN CAPITAL LETTER O WITH CIRCUMFLEXLATIN CAPIT" + + "AL LETTER O WITH TILDELATIN CAPITAL LETTER O WITH DIAERESISMULTIPLICATIO" + + "N SIGNLATIN CAPITAL LETTER O WITH STROKELATIN CAPITAL LETTER U WITH GRAV" + + "ELATIN CAPITAL LETTER U WITH ACUTELATIN CAPITAL LETTER U WITH CIRCUMFLEX" + + "LATIN CAPITAL LETTER U WITH DIAERESISLATIN CAPITAL LETTER Y WITH ACUTELA" + + "TIN CAPITAL LETTER THORNLATIN SMALL LETTER SHARP SLATIN SMALL LETTER A W" + + "ITH GRAVELATIN SMALL LETTER A WITH ACUTELATIN SMALL LETTER A WITH CIRCUM" + + "FLEXLATIN SMALL LETTER A WITH TILDELATIN SMALL LETTER A WITH DIAERESISLA" + + "TIN SMALL LETTER A WITH RING ABOVELATIN SMALL LETTER AELATIN SMALL LETTE" + + "R C WITH CEDILLALATIN SMALL LETTER E WITH GRAVELATIN SMALL LETTER E WITH" + + " ACUTELATIN SMALL LETTER E WITH CIRCUMFLEXLATIN SMALL LETTER E WITH DIAE" + + "RESISLATIN SMALL LETTER I WITH GRAVELATIN SMALL LETTER I WITH ACUTELATIN" + + " SMALL LETTER I WITH CIRCUMFLEXLATIN SMALL LETTER I WITH DIAERESISLATIN " + + "SMALL LETTER ETHLATIN SMALL LETTER N WITH TILDELATIN SMALL LETTER O WITH" + + " GRAVELATIN SMALL LETTER O WITH ACUTELATIN SMALL LETTER O WITH CIRCUMFLE" + + "XLATIN SMALL LETTER O WITH TILDELATIN SMALL LETTER O WITH DIAERESISDIVIS" + + "ION SIGNLATIN SMALL LETTER O WITH STROKELATIN SMALL LETTER U WITH GRAVEL" + + "ATIN SMALL LETTER U WITH ACUTELATIN SMALL LETTER U WITH CIRCUMFLEXLATIN " + + "SMALL LETTER U WITH DIAERESISLATIN SMALL LETTER Y WITH ACUTELATIN SMALL " + + "LETTER THORNLATIN SMALL LETTER Y WITH DIAERESISLATIN CAPITAL LETTER A WI") + ("" + + "TH MACRONLATIN SMALL LETTER A WITH MACRONLATIN CAPITAL LETTER A WITH BRE" + + "VELATIN SMALL LETTER A WITH BREVELATIN CAPITAL LETTER A WITH OGONEKLATIN" + + " SMALL LETTER A WITH OGONEKLATIN CAPITAL LETTER C WITH ACUTELATIN SMALL " + + "LETTER C WITH ACUTELATIN CAPITAL LETTER C WITH CIRCUMFLEXLATIN SMALL LET" + + "TER C WITH CIRCUMFLEXLATIN CAPITAL LETTER C WITH DOT ABOVELATIN SMALL LE" + + "TTER C WITH DOT ABOVELATIN CAPITAL LETTER C WITH CARONLATIN SMALL LETTER" + + " C WITH CARONLATIN CAPITAL LETTER D WITH CARONLATIN SMALL LETTER D WITH " + + "CARONLATIN CAPITAL LETTER D WITH STROKELATIN SMALL LETTER D WITH STROKEL" + + "ATIN CAPITAL LETTER E WITH MACRONLATIN SMALL LETTER E WITH MACRONLATIN C" + + "APITAL LETTER E WITH BREVELATIN SMALL LETTER E WITH BREVELATIN CAPITAL L" + + "ETTER E WITH DOT ABOVELATIN SMALL LETTER E WITH DOT ABOVELATIN CAPITAL L" + + "ETTER E WITH OGONEKLATIN SMALL LETTER E WITH OGONEKLATIN CAPITAL LETTER " + + "E WITH CARONLATIN SMALL LETTER E WITH CARONLATIN CAPITAL LETTER G WITH C" + + "IRCUMFLEXLATIN SMALL LETTER G WITH CIRCUMFLEXLATIN CAPITAL LETTER G WITH" + + " BREVELATIN SMALL LETTER G WITH BREVELATIN CAPITAL LETTER G WITH DOT ABO" + + "VELATIN SMALL LETTER G WITH DOT ABOVELATIN CAPITAL LETTER G WITH CEDILLA" + + "LATIN SMALL LETTER G WITH CEDILLALATIN CAPITAL LETTER H WITH CIRCUMFLEXL" + + "ATIN SMALL LETTER H WITH CIRCUMFLEXLATIN CAPITAL LETTER H WITH STROKELAT" + + "IN SMALL LETTER H WITH STROKELATIN CAPITAL LETTER I WITH TILDELATIN SMAL" + + "L LETTER I WITH TILDELATIN CAPITAL LETTER I WITH MACRONLATIN SMALL LETTE" + + "R I WITH MACRONLATIN CAPITAL LETTER I WITH BREVELATIN SMALL LETTER I WIT" + + "H BREVELATIN CAPITAL LETTER I WITH OGONEKLATIN SMALL LETTER I WITH OGONE" + + "KLATIN CAPITAL LETTER I WITH DOT ABOVELATIN SMALL LETTER DOTLESS ILATIN " + + "CAPITAL LIGATURE IJLATIN SMALL LIGATURE IJLATIN CAPITAL LETTER J WITH CI" + + "RCUMFLEXLATIN SMALL LETTER J WITH CIRCUMFLEXLATIN CAPITAL LETTER K WITH " + + "CEDILLALATIN SMALL LETTER K WITH CEDILLALATIN SMALL LETTER KRALATIN CAPI" + + "TAL LETTER L WITH ACUTELATIN SMALL LETTER L WITH ACUTELATIN CAPITAL LETT" + + "ER L WITH CEDILLALATIN SMALL LETTER L WITH CEDILLALATIN CAPITAL LETTER L" + + " WITH CARONLATIN SMALL LETTER L WITH CARONLATIN CAPITAL LETTER L WITH MI" + + "DDLE DOTLATIN SMALL LETTER L WITH MIDDLE DOTLATIN CAPITAL LETTER L WITH " + + "STROKELATIN SMALL LETTER L WITH STROKELATIN CAPITAL LETTER N WITH ACUTEL" + + "ATIN SMALL LETTER N WITH ACUTELATIN CAPITAL LETTER N WITH CEDILLALATIN S" + + "MALL LETTER N WITH CEDILLALATIN CAPITAL LETTER N WITH CARONLATIN SMALL L" + + "ETTER N WITH CARONLATIN SMALL LETTER N PRECEDED BY APOSTROPHELATIN CAPIT" + + "AL LETTER ENGLATIN SMALL LETTER ENGLATIN CAPITAL LETTER O WITH MACRONLAT" + + "IN SMALL LETTER O WITH MACRONLATIN CAPITAL LETTER O WITH BREVELATIN SMAL" + + "L LETTER O WITH BREVELATIN CAPITAL LETTER O WITH DOUBLE ACUTELATIN SMALL" + + " LETTER O WITH DOUBLE ACUTELATIN CAPITAL LIGATURE OELATIN SMALL LIGATURE" + + " OELATIN CAPITAL LETTER R WITH ACUTELATIN SMALL LETTER R WITH ACUTELATIN" + + " CAPITAL LETTER R WITH CEDILLALATIN SMALL LETTER R WITH CEDILLALATIN CAP" + + "ITAL LETTER R WITH CARONLATIN SMALL LETTER R WITH CARONLATIN CAPITAL LET" + + "TER S WITH ACUTELATIN SMALL LETTER S WITH ACUTELATIN CAPITAL LETTER S WI" + + "TH CIRCUMFLEXLATIN SMALL LETTER S WITH CIRCUMFLEXLATIN CAPITAL LETTER S " + + "WITH CEDILLALATIN SMALL LETTER S WITH CEDILLALATIN CAPITAL LETTER S WITH" + + " CARONLATIN SMALL LETTER S WITH CARONLATIN CAPITAL LETTER T WITH CEDILLA" + + "LATIN SMALL LETTER T WITH CEDILLALATIN CAPITAL LETTER T WITH CARONLATIN " + + "SMALL LETTER T WITH CARONLATIN CAPITAL LETTER T WITH STROKELATIN SMALL L" + + "ETTER T WITH STROKELATIN CAPITAL LETTER U WITH TILDELATIN SMALL LETTER U" + + " WITH TILDELATIN CAPITAL LETTER U WITH MACRONLATIN SMALL LETTER U WITH M" + + "ACRONLATIN CAPITAL LETTER U WITH BREVELATIN SMALL LETTER U WITH BREVELAT" + + "IN CAPITAL LETTER U WITH RING ABOVELATIN SMALL LETTER U WITH RING ABOVEL" + + "ATIN CAPITAL LETTER U WITH DOUBLE ACUTELATIN SMALL LETTER U WITH DOUBLE " + + "ACUTELATIN CAPITAL LETTER U WITH OGONEKLATIN SMALL LETTER U WITH OGONEKL" + + "ATIN CAPITAL LETTER W WITH CIRCUMFLEXLATIN SMALL LETTER W WITH CIRCUMFLE" + + "XLATIN CAPITAL LETTER Y WITH CIRCUMFLEXLATIN SMALL LETTER Y WITH CIRCUMF" + + "LEXLATIN CAPITAL LETTER Y WITH DIAERESISLATIN CAPITAL LETTER Z WITH ACUT" + + "ELATIN SMALL LETTER Z WITH ACUTELATIN CAPITAL LETTER Z WITH DOT ABOVELAT" + + "IN SMALL LETTER Z WITH DOT ABOVELATIN CAPITAL LETTER Z WITH CARONLATIN S" + + "MALL LETTER Z WITH CARONLATIN SMALL LETTER LONG SLATIN SMALL LETTER B WI" + + "TH STROKELATIN CAPITAL LETTER B WITH HOOKLATIN CAPITAL LETTER B WITH TOP" + + "BARLATIN SMALL LETTER B WITH TOPBARLATIN CAPITAL LETTER TONE SIXLATIN SM" + + "ALL LETTER TONE SIXLATIN CAPITAL LETTER OPEN OLATIN CAPITAL LETTER C WIT" + + "H HOOKLATIN SMALL LETTER C WITH HOOKLATIN CAPITAL LETTER AFRICAN DLATIN " + + "CAPITAL LETTER D WITH HOOKLATIN CAPITAL LETTER D WITH TOPBARLATIN SMALL ") + ("" + + "LETTER D WITH TOPBARLATIN SMALL LETTER TURNED DELTALATIN CAPITAL LETTER " + + "REVERSED ELATIN CAPITAL LETTER SCHWALATIN CAPITAL LETTER OPEN ELATIN CAP" + + "ITAL LETTER F WITH HOOKLATIN SMALL LETTER F WITH HOOKLATIN CAPITAL LETTE" + + "R G WITH HOOKLATIN CAPITAL LETTER GAMMALATIN SMALL LETTER HVLATIN CAPITA" + + "L LETTER IOTALATIN CAPITAL LETTER I WITH STROKELATIN CAPITAL LETTER K WI" + + "TH HOOKLATIN SMALL LETTER K WITH HOOKLATIN SMALL LETTER L WITH BARLATIN " + + "SMALL LETTER LAMBDA WITH STROKELATIN CAPITAL LETTER TURNED MLATIN CAPITA" + + "L LETTER N WITH LEFT HOOKLATIN SMALL LETTER N WITH LONG RIGHT LEGLATIN C" + + "APITAL LETTER O WITH MIDDLE TILDELATIN CAPITAL LETTER O WITH HORNLATIN S" + + "MALL LETTER O WITH HORNLATIN CAPITAL LETTER OILATIN SMALL LETTER OILATIN" + + " CAPITAL LETTER P WITH HOOKLATIN SMALL LETTER P WITH HOOKLATIN LETTER YR" + + "LATIN CAPITAL LETTER TONE TWOLATIN SMALL LETTER TONE TWOLATIN CAPITAL LE" + + "TTER ESHLATIN LETTER REVERSED ESH LOOPLATIN SMALL LETTER T WITH PALATAL " + + "HOOKLATIN CAPITAL LETTER T WITH HOOKLATIN SMALL LETTER T WITH HOOKLATIN " + + "CAPITAL LETTER T WITH RETROFLEX HOOKLATIN CAPITAL LETTER U WITH HORNLATI" + + "N SMALL LETTER U WITH HORNLATIN CAPITAL LETTER UPSILONLATIN CAPITAL LETT" + + "ER V WITH HOOKLATIN CAPITAL LETTER Y WITH HOOKLATIN SMALL LETTER Y WITH " + + "HOOKLATIN CAPITAL LETTER Z WITH STROKELATIN SMALL LETTER Z WITH STROKELA" + + "TIN CAPITAL LETTER EZHLATIN CAPITAL LETTER EZH REVERSEDLATIN SMALL LETTE" + + "R EZH REVERSEDLATIN SMALL LETTER EZH WITH TAILLATIN LETTER TWO WITH STRO" + + "KELATIN CAPITAL LETTER TONE FIVELATIN SMALL LETTER TONE FIVELATIN LETTER" + + " INVERTED GLOTTAL STOP WITH STROKELATIN LETTER WYNNLATIN LETTER DENTAL C" + + "LICKLATIN LETTER LATERAL CLICKLATIN LETTER ALVEOLAR CLICKLATIN LETTER RE" + + "TROFLEX CLICKLATIN CAPITAL LETTER DZ WITH CARONLATIN CAPITAL LETTER D WI" + + "TH SMALL LETTER Z WITH CARONLATIN SMALL LETTER DZ WITH CARONLATIN CAPITA" + + "L LETTER LJLATIN CAPITAL LETTER L WITH SMALL LETTER JLATIN SMALL LETTER " + + "LJLATIN CAPITAL LETTER NJLATIN CAPITAL LETTER N WITH SMALL LETTER JLATIN" + + " SMALL LETTER NJLATIN CAPITAL LETTER A WITH CARONLATIN SMALL LETTER A WI" + + "TH CARONLATIN CAPITAL LETTER I WITH CARONLATIN SMALL LETTER I WITH CARON" + + "LATIN CAPITAL LETTER O WITH CARONLATIN SMALL LETTER O WITH CARONLATIN CA" + + "PITAL LETTER U WITH CARONLATIN SMALL LETTER U WITH CARONLATIN CAPITAL LE" + + "TTER U WITH DIAERESIS AND MACRONLATIN SMALL LETTER U WITH DIAERESIS AND " + + "MACRONLATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTELATIN SMALL LETTER " + + "U WITH DIAERESIS AND ACUTELATIN CAPITAL LETTER U WITH DIAERESIS AND CARO" + + "NLATIN SMALL LETTER U WITH DIAERESIS AND CARONLATIN CAPITAL LETTER U WIT" + + "H DIAERESIS AND GRAVELATIN SMALL LETTER U WITH DIAERESIS AND GRAVELATIN " + + "SMALL LETTER TURNED ELATIN CAPITAL LETTER A WITH DIAERESIS AND MACRONLAT" + + "IN SMALL LETTER A WITH DIAERESIS AND MACRONLATIN CAPITAL LETTER A WITH D" + + "OT ABOVE AND MACRONLATIN SMALL LETTER A WITH DOT ABOVE AND MACRONLATIN C" + + "APITAL LETTER AE WITH MACRONLATIN SMALL LETTER AE WITH MACRONLATIN CAPIT" + + "AL LETTER G WITH STROKELATIN SMALL LETTER G WITH STROKELATIN CAPITAL LET" + + "TER G WITH CARONLATIN SMALL LETTER G WITH CARONLATIN CAPITAL LETTER K WI" + + "TH CARONLATIN SMALL LETTER K WITH CARONLATIN CAPITAL LETTER O WITH OGONE" + + "KLATIN SMALL LETTER O WITH OGONEKLATIN CAPITAL LETTER O WITH OGONEK AND " + + "MACRONLATIN SMALL LETTER O WITH OGONEK AND MACRONLATIN CAPITAL LETTER EZ" + + "H WITH CARONLATIN SMALL LETTER EZH WITH CARONLATIN SMALL LETTER J WITH C" + + "ARONLATIN CAPITAL LETTER DZLATIN CAPITAL LETTER D WITH SMALL LETTER ZLAT" + + "IN SMALL LETTER DZLATIN CAPITAL LETTER G WITH ACUTELATIN SMALL LETTER G " + + "WITH ACUTELATIN CAPITAL LETTER HWAIRLATIN CAPITAL LETTER WYNNLATIN CAPIT" + + "AL LETTER N WITH GRAVELATIN SMALL LETTER N WITH GRAVELATIN CAPITAL LETTE" + + "R A WITH RING ABOVE AND ACUTELATIN SMALL LETTER A WITH RING ABOVE AND AC" + + "UTELATIN CAPITAL LETTER AE WITH ACUTELATIN SMALL LETTER AE WITH ACUTELAT" + + "IN CAPITAL LETTER O WITH STROKE AND ACUTELATIN SMALL LETTER O WITH STROK" + + "E AND ACUTELATIN CAPITAL LETTER A WITH DOUBLE GRAVELATIN SMALL LETTER A " + + "WITH DOUBLE GRAVELATIN CAPITAL LETTER A WITH INVERTED BREVELATIN SMALL L" + + "ETTER A WITH INVERTED BREVELATIN CAPITAL LETTER E WITH DOUBLE GRAVELATIN" + + " SMALL LETTER E WITH DOUBLE GRAVELATIN CAPITAL LETTER E WITH INVERTED BR" + + "EVELATIN SMALL LETTER E WITH INVERTED BREVELATIN CAPITAL LETTER I WITH D" + + "OUBLE GRAVELATIN SMALL LETTER I WITH DOUBLE GRAVELATIN CAPITAL LETTER I " + + "WITH INVERTED BREVELATIN SMALL LETTER I WITH INVERTED BREVELATIN CAPITAL" + + " LETTER O WITH DOUBLE GRAVELATIN SMALL LETTER O WITH DOUBLE GRAVELATIN C" + + "APITAL LETTER O WITH INVERTED BREVELATIN SMALL LETTER O WITH INVERTED BR" + + "EVELATIN CAPITAL LETTER R WITH DOUBLE GRAVELATIN SMALL LETTER R WITH DOU" + + "BLE GRAVELATIN CAPITAL LETTER R WITH INVERTED BREVELATIN SMALL LETTER R ") + ("" + + "WITH INVERTED BREVELATIN CAPITAL LETTER U WITH DOUBLE GRAVELATIN SMALL L" + + "ETTER U WITH DOUBLE GRAVELATIN CAPITAL LETTER U WITH INVERTED BREVELATIN" + + " SMALL LETTER U WITH INVERTED BREVELATIN CAPITAL LETTER S WITH COMMA BEL" + + "OWLATIN SMALL LETTER S WITH COMMA BELOWLATIN CAPITAL LETTER T WITH COMMA" + + " BELOWLATIN SMALL LETTER T WITH COMMA BELOWLATIN CAPITAL LETTER YOGHLATI" + + "N SMALL LETTER YOGHLATIN CAPITAL LETTER H WITH CARONLATIN SMALL LETTER H" + + " WITH CARONLATIN CAPITAL LETTER N WITH LONG RIGHT LEGLATIN SMALL LETTER " + + "D WITH CURLLATIN CAPITAL LETTER OULATIN SMALL LETTER OULATIN CAPITAL LET" + + "TER Z WITH HOOKLATIN SMALL LETTER Z WITH HOOKLATIN CAPITAL LETTER A WITH" + + " DOT ABOVELATIN SMALL LETTER A WITH DOT ABOVELATIN CAPITAL LETTER E WITH" + + " CEDILLALATIN SMALL LETTER E WITH CEDILLALATIN CAPITAL LETTER O WITH DIA" + + "ERESIS AND MACRONLATIN SMALL LETTER O WITH DIAERESIS AND MACRONLATIN CAP" + + "ITAL LETTER O WITH TILDE AND MACRONLATIN SMALL LETTER O WITH TILDE AND M" + + "ACRONLATIN CAPITAL LETTER O WITH DOT ABOVELATIN SMALL LETTER O WITH DOT " + + "ABOVELATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRONLATIN SMALL LETTER " + + "O WITH DOT ABOVE AND MACRONLATIN CAPITAL LETTER Y WITH MACRONLATIN SMALL" + + " LETTER Y WITH MACRONLATIN SMALL LETTER L WITH CURLLATIN SMALL LETTER N " + + "WITH CURLLATIN SMALL LETTER T WITH CURLLATIN SMALL LETTER DOTLESS JLATIN" + + " SMALL LETTER DB DIGRAPHLATIN SMALL LETTER QP DIGRAPHLATIN CAPITAL LETTE" + + "R A WITH STROKELATIN CAPITAL LETTER C WITH STROKELATIN SMALL LETTER C WI" + + "TH STROKELATIN CAPITAL LETTER L WITH BARLATIN CAPITAL LETTER T WITH DIAG" + + "ONAL STROKELATIN SMALL LETTER S WITH SWASH TAILLATIN SMALL LETTER Z WITH" + + " SWASH TAILLATIN CAPITAL LETTER GLOTTAL STOPLATIN SMALL LETTER GLOTTAL S" + + "TOPLATIN CAPITAL LETTER B WITH STROKELATIN CAPITAL LETTER U BARLATIN CAP" + + "ITAL LETTER TURNED VLATIN CAPITAL LETTER E WITH STROKELATIN SMALL LETTER" + + " E WITH STROKELATIN CAPITAL LETTER J WITH STROKELATIN SMALL LETTER J WIT" + + "H STROKELATIN CAPITAL LETTER SMALL Q WITH HOOK TAILLATIN SMALL LETTER Q " + + "WITH HOOK TAILLATIN CAPITAL LETTER R WITH STROKELATIN SMALL LETTER R WIT" + + "H STROKELATIN CAPITAL LETTER Y WITH STROKELATIN SMALL LETTER Y WITH STRO" + + "KELATIN SMALL LETTER TURNED ALATIN SMALL LETTER ALPHALATIN SMALL LETTER " + + "TURNED ALPHALATIN SMALL LETTER B WITH HOOKLATIN SMALL LETTER OPEN OLATIN" + + " SMALL LETTER C WITH CURLLATIN SMALL LETTER D WITH TAILLATIN SMALL LETTE" + + "R D WITH HOOKLATIN SMALL LETTER REVERSED ELATIN SMALL LETTER SCHWALATIN " + + "SMALL LETTER SCHWA WITH HOOKLATIN SMALL LETTER OPEN ELATIN SMALL LETTER " + + "REVERSED OPEN ELATIN SMALL LETTER REVERSED OPEN E WITH HOOKLATIN SMALL L" + + "ETTER CLOSED REVERSED OPEN ELATIN SMALL LETTER DOTLESS J WITH STROKELATI" + + "N SMALL LETTER G WITH HOOKLATIN SMALL LETTER SCRIPT GLATIN LETTER SMALL " + + "CAPITAL GLATIN SMALL LETTER GAMMALATIN SMALL LETTER RAMS HORNLATIN SMALL" + + " LETTER TURNED HLATIN SMALL LETTER H WITH HOOKLATIN SMALL LETTER HENG WI" + + "TH HOOKLATIN SMALL LETTER I WITH STROKELATIN SMALL LETTER IOTALATIN LETT" + + "ER SMALL CAPITAL ILATIN SMALL LETTER L WITH MIDDLE TILDELATIN SMALL LETT" + + "ER L WITH BELTLATIN SMALL LETTER L WITH RETROFLEX HOOKLATIN SMALL LETTER" + + " LEZHLATIN SMALL LETTER TURNED MLATIN SMALL LETTER TURNED M WITH LONG LE" + + "GLATIN SMALL LETTER M WITH HOOKLATIN SMALL LETTER N WITH LEFT HOOKLATIN " + + "SMALL LETTER N WITH RETROFLEX HOOKLATIN LETTER SMALL CAPITAL NLATIN SMAL" + + "L LETTER BARRED OLATIN LETTER SMALL CAPITAL OELATIN SMALL LETTER CLOSED " + + "OMEGALATIN SMALL LETTER PHILATIN SMALL LETTER TURNED RLATIN SMALL LETTER" + + " TURNED R WITH LONG LEGLATIN SMALL LETTER TURNED R WITH HOOKLATIN SMALL " + + "LETTER R WITH LONG LEGLATIN SMALL LETTER R WITH TAILLATIN SMALL LETTER R" + + " WITH FISHHOOKLATIN SMALL LETTER REVERSED R WITH FISHHOOKLATIN LETTER SM" + + "ALL CAPITAL RLATIN LETTER SMALL CAPITAL INVERTED RLATIN SMALL LETTER S W" + + "ITH HOOKLATIN SMALL LETTER ESHLATIN SMALL LETTER DOTLESS J WITH STROKE A" + + "ND HOOKLATIN SMALL LETTER SQUAT REVERSED ESHLATIN SMALL LETTER ESH WITH " + + "CURLLATIN SMALL LETTER TURNED TLATIN SMALL LETTER T WITH RETROFLEX HOOKL" + + "ATIN SMALL LETTER U BARLATIN SMALL LETTER UPSILONLATIN SMALL LETTER V WI" + + "TH HOOKLATIN SMALL LETTER TURNED VLATIN SMALL LETTER TURNED WLATIN SMALL" + + " LETTER TURNED YLATIN LETTER SMALL CAPITAL YLATIN SMALL LETTER Z WITH RE" + + "TROFLEX HOOKLATIN SMALL LETTER Z WITH CURLLATIN SMALL LETTER EZHLATIN SM" + + "ALL LETTER EZH WITH CURLLATIN LETTER GLOTTAL STOPLATIN LETTER PHARYNGEAL" + + " VOICED FRICATIVELATIN LETTER INVERTED GLOTTAL STOPLATIN LETTER STRETCHE" + + "D CLATIN LETTER BILABIAL CLICKLATIN LETTER SMALL CAPITAL BLATIN SMALL LE" + + "TTER CLOSED OPEN ELATIN LETTER SMALL CAPITAL G WITH HOOKLATIN LETTER SMA" + + "LL CAPITAL HLATIN SMALL LETTER J WITH CROSSED-TAILLATIN SMALL LETTER TUR" + + "NED KLATIN LETTER SMALL CAPITAL LLATIN SMALL LETTER Q WITH HOOKLATIN LET") + ("" + + "TER GLOTTAL STOP WITH STROKELATIN LETTER REVERSED GLOTTAL STOP WITH STRO" + + "KELATIN SMALL LETTER DZ DIGRAPHLATIN SMALL LETTER DEZH DIGRAPHLATIN SMAL" + + "L LETTER DZ DIGRAPH WITH CURLLATIN SMALL LETTER TS DIGRAPHLATIN SMALL LE" + + "TTER TESH DIGRAPHLATIN SMALL LETTER TC DIGRAPH WITH CURLLATIN SMALL LETT" + + "ER FENG DIGRAPHLATIN SMALL LETTER LS DIGRAPHLATIN SMALL LETTER LZ DIGRAP" + + "HLATIN LETTER BILABIAL PERCUSSIVELATIN LETTER BIDENTAL PERCUSSIVELATIN S" + + "MALL LETTER TURNED H WITH FISHHOOKLATIN SMALL LETTER TURNED H WITH FISHH" + + "OOK AND TAILMODIFIER LETTER SMALL HMODIFIER LETTER SMALL H WITH HOOKMODI" + + "FIER LETTER SMALL JMODIFIER LETTER SMALL RMODIFIER LETTER SMALL TURNED R" + + "MODIFIER LETTER SMALL TURNED R WITH HOOKMODIFIER LETTER SMALL CAPITAL IN" + + "VERTED RMODIFIER LETTER SMALL WMODIFIER LETTER SMALL YMODIFIER LETTER PR" + + "IMEMODIFIER LETTER DOUBLE PRIMEMODIFIER LETTER TURNED COMMAMODIFIER LETT" + + "ER APOSTROPHEMODIFIER LETTER REVERSED COMMAMODIFIER LETTER RIGHT HALF RI" + + "NGMODIFIER LETTER LEFT HALF RINGMODIFIER LETTER GLOTTAL STOPMODIFIER LET" + + "TER REVERSED GLOTTAL STOPMODIFIER LETTER LEFT ARROWHEADMODIFIER LETTER R" + + "IGHT ARROWHEADMODIFIER LETTER UP ARROWHEADMODIFIER LETTER DOWN ARROWHEAD" + + "MODIFIER LETTER CIRCUMFLEX ACCENTCARONMODIFIER LETTER VERTICAL LINEMODIF" + + "IER LETTER MACRONMODIFIER LETTER ACUTE ACCENTMODIFIER LETTER GRAVE ACCEN" + + "TMODIFIER LETTER LOW VERTICAL LINEMODIFIER LETTER LOW MACRONMODIFIER LET" + + "TER LOW GRAVE ACCENTMODIFIER LETTER LOW ACUTE ACCENTMODIFIER LETTER TRIA" + + "NGULAR COLONMODIFIER LETTER HALF TRIANGULAR COLONMODIFIER LETTER CENTRED" + + " RIGHT HALF RINGMODIFIER LETTER CENTRED LEFT HALF RINGMODIFIER LETTER UP" + + " TACKMODIFIER LETTER DOWN TACKMODIFIER LETTER PLUS SIGNMODIFIER LETTER M" + + "INUS SIGNBREVEDOT ABOVERING ABOVEOGONEKSMALL TILDEDOUBLE ACUTE ACCENTMOD" + + "IFIER LETTER RHOTIC HOOKMODIFIER LETTER CROSS ACCENTMODIFIER LETTER SMAL" + + "L GAMMAMODIFIER LETTER SMALL LMODIFIER LETTER SMALL SMODIFIER LETTER SMA" + + "LL XMODIFIER LETTER SMALL REVERSED GLOTTAL STOPMODIFIER LETTER EXTRA-HIG" + + "H TONE BARMODIFIER LETTER HIGH TONE BARMODIFIER LETTER MID TONE BARMODIF" + + "IER LETTER LOW TONE BARMODIFIER LETTER EXTRA-LOW TONE BARMODIFIER LETTER" + + " YIN DEPARTING TONE MARKMODIFIER LETTER YANG DEPARTING TONE MARKMODIFIER" + + " LETTER VOICINGMODIFIER LETTER UNASPIRATEDMODIFIER LETTER DOUBLE APOSTRO" + + "PHEMODIFIER LETTER LOW DOWN ARROWHEADMODIFIER LETTER LOW UP ARROWHEADMOD" + + "IFIER LETTER LOW LEFT ARROWHEADMODIFIER LETTER LOW RIGHT ARROWHEADMODIFI" + + "ER LETTER LOW RINGMODIFIER LETTER MIDDLE GRAVE ACCENTMODIFIER LETTER MID" + + "DLE DOUBLE GRAVE ACCENTMODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENTMODIFIE" + + "R LETTER LOW TILDEMODIFIER LETTER RAISED COLONMODIFIER LETTER BEGIN HIGH" + + " TONEMODIFIER LETTER END HIGH TONEMODIFIER LETTER BEGIN LOW TONEMODIFIER" + + " LETTER END LOW TONEMODIFIER LETTER SHELFMODIFIER LETTER OPEN SHELFMODIF" + + "IER LETTER LOW LEFT ARROWCOMBINING GRAVE ACCENTCOMBINING ACUTE ACCENTCOM" + + "BINING CIRCUMFLEX ACCENTCOMBINING TILDECOMBINING MACRONCOMBINING OVERLIN" + + "ECOMBINING BREVECOMBINING DOT ABOVECOMBINING DIAERESISCOMBINING HOOK ABO" + + "VECOMBINING RING ABOVECOMBINING DOUBLE ACUTE ACCENTCOMBINING CARONCOMBIN" + + "ING VERTICAL LINE ABOVECOMBINING DOUBLE VERTICAL LINE ABOVECOMBINING DOU" + + "BLE GRAVE ACCENTCOMBINING CANDRABINDUCOMBINING INVERTED BREVECOMBINING T" + + "URNED COMMA ABOVECOMBINING COMMA ABOVECOMBINING REVERSED COMMA ABOVECOMB" + + "INING COMMA ABOVE RIGHTCOMBINING GRAVE ACCENT BELOWCOMBINING ACUTE ACCEN" + + "T BELOWCOMBINING LEFT TACK BELOWCOMBINING RIGHT TACK BELOWCOMBINING LEFT" + + " ANGLE ABOVECOMBINING HORNCOMBINING LEFT HALF RING BELOWCOMBINING UP TAC" + + "K BELOWCOMBINING DOWN TACK BELOWCOMBINING PLUS SIGN BELOWCOMBINING MINUS" + + " SIGN BELOWCOMBINING PALATALIZED HOOK BELOWCOMBINING RETROFLEX HOOK BELO" + + "WCOMBINING DOT BELOWCOMBINING DIAERESIS BELOWCOMBINING RING BELOWCOMBINI" + + "NG COMMA BELOWCOMBINING CEDILLACOMBINING OGONEKCOMBINING VERTICAL LINE B" + + "ELOWCOMBINING BRIDGE BELOWCOMBINING INVERTED DOUBLE ARCH BELOWCOMBINING " + + "CARON BELOWCOMBINING CIRCUMFLEX ACCENT BELOWCOMBINING BREVE BELOWCOMBINI" + + "NG INVERTED BREVE BELOWCOMBINING TILDE BELOWCOMBINING MACRON BELOWCOMBIN" + + "ING LOW LINECOMBINING DOUBLE LOW LINECOMBINING TILDE OVERLAYCOMBINING SH" + + "ORT STROKE OVERLAYCOMBINING LONG STROKE OVERLAYCOMBINING SHORT SOLIDUS O" + + "VERLAYCOMBINING LONG SOLIDUS OVERLAYCOMBINING RIGHT HALF RING BELOWCOMBI" + + "NING INVERTED BRIDGE BELOWCOMBINING SQUARE BELOWCOMBINING SEAGULL BELOWC" + + "OMBINING X ABOVECOMBINING VERTICAL TILDECOMBINING DOUBLE OVERLINECOMBINI" + + "NG GRAVE TONE MARKCOMBINING ACUTE TONE MARKCOMBINING GREEK PERISPOMENICO" + + "MBINING GREEK KORONISCOMBINING GREEK DIALYTIKA TONOSCOMBINING GREEK YPOG" + + "EGRAMMENICOMBINING BRIDGE ABOVECOMBINING EQUALS SIGN BELOWCOMBINING DOUB" + + "LE VERTICAL LINE BELOWCOMBINING LEFT ANGLE BELOWCOMBINING NOT TILDE ABOV") + ("" + + "ECOMBINING HOMOTHETIC ABOVECOMBINING ALMOST EQUAL TO ABOVECOMBINING LEFT" + + " RIGHT ARROW BELOWCOMBINING UPWARDS ARROW BELOWCOMBINING GRAPHEME JOINER" + + "COMBINING RIGHT ARROWHEAD ABOVECOMBINING LEFT HALF RING ABOVECOMBINING F" + + "ERMATACOMBINING X BELOWCOMBINING LEFT ARROWHEAD BELOWCOMBINING RIGHT ARR" + + "OWHEAD BELOWCOMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOWCOMBINING RI" + + "GHT HALF RING ABOVECOMBINING DOT ABOVE RIGHTCOMBINING ASTERISK BELOWCOMB" + + "INING DOUBLE RING BELOWCOMBINING ZIGZAG ABOVECOMBINING DOUBLE BREVE BELO" + + "WCOMBINING DOUBLE BREVECOMBINING DOUBLE MACRONCOMBINING DOUBLE MACRON BE" + + "LOWCOMBINING DOUBLE TILDECOMBINING DOUBLE INVERTED BREVECOMBINING DOUBLE" + + " RIGHTWARDS ARROW BELOWCOMBINING LATIN SMALL LETTER ACOMBINING LATIN SMA" + + "LL LETTER ECOMBINING LATIN SMALL LETTER ICOMBINING LATIN SMALL LETTER OC" + + "OMBINING LATIN SMALL LETTER UCOMBINING LATIN SMALL LETTER CCOMBINING LAT" + + "IN SMALL LETTER DCOMBINING LATIN SMALL LETTER HCOMBINING LATIN SMALL LET" + + "TER MCOMBINING LATIN SMALL LETTER RCOMBINING LATIN SMALL LETTER TCOMBINI" + + "NG LATIN SMALL LETTER VCOMBINING LATIN SMALL LETTER XGREEK CAPITAL LETTE" + + "R HETAGREEK SMALL LETTER HETAGREEK CAPITAL LETTER ARCHAIC SAMPIGREEK SMA" + + "LL LETTER ARCHAIC SAMPIGREEK NUMERAL SIGNGREEK LOWER NUMERAL SIGNGREEK C" + + "APITAL LETTER PAMPHYLIAN DIGAMMAGREEK SMALL LETTER PAMPHYLIAN DIGAMMAGRE" + + "EK YPOGEGRAMMENIGREEK SMALL REVERSED LUNATE SIGMA SYMBOLGREEK SMALL DOTT" + + "ED LUNATE SIGMA SYMBOLGREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOLGRE" + + "EK QUESTION MARKGREEK CAPITAL LETTER YOTGREEK TONOSGREEK DIALYTIKA TONOS" + + "GREEK CAPITAL LETTER ALPHA WITH TONOSGREEK ANO TELEIAGREEK CAPITAL LETTE" + + "R EPSILON WITH TONOSGREEK CAPITAL LETTER ETA WITH TONOSGREEK CAPITAL LET" + + "TER IOTA WITH TONOSGREEK CAPITAL LETTER OMICRON WITH TONOSGREEK CAPITAL " + + "LETTER UPSILON WITH TONOSGREEK CAPITAL LETTER OMEGA WITH TONOSGREEK SMAL" + + "L LETTER IOTA WITH DIALYTIKA AND TONOSGREEK CAPITAL LETTER ALPHAGREEK CA" + + "PITAL LETTER BETAGREEK CAPITAL LETTER GAMMAGREEK CAPITAL LETTER DELTAGRE" + + "EK CAPITAL LETTER EPSILONGREEK CAPITAL LETTER ZETAGREEK CAPITAL LETTER E" + + "TAGREEK CAPITAL LETTER THETAGREEK CAPITAL LETTER IOTAGREEK CAPITAL LETTE" + + "R KAPPAGREEK CAPITAL LETTER LAMDAGREEK CAPITAL LETTER MUGREEK CAPITAL LE" + + "TTER NUGREEK CAPITAL LETTER XIGREEK CAPITAL LETTER OMICRONGREEK CAPITAL " + + "LETTER PIGREEK CAPITAL LETTER RHOGREEK CAPITAL LETTER SIGMAGREEK CAPITAL" + + " LETTER TAUGREEK CAPITAL LETTER UPSILONGREEK CAPITAL LETTER PHIGREEK CAP" + + "ITAL LETTER CHIGREEK CAPITAL LETTER PSIGREEK CAPITAL LETTER OMEGAGREEK C" + + "APITAL LETTER IOTA WITH DIALYTIKAGREEK CAPITAL LETTER UPSILON WITH DIALY" + + "TIKAGREEK SMALL LETTER ALPHA WITH TONOSGREEK SMALL LETTER EPSILON WITH T" + + "ONOSGREEK SMALL LETTER ETA WITH TONOSGREEK SMALL LETTER IOTA WITH TONOSG" + + "REEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOSGREEK SMALL LETTER ALP" + + "HAGREEK SMALL LETTER BETAGREEK SMALL LETTER GAMMAGREEK SMALL LETTER DELT" + + "AGREEK SMALL LETTER EPSILONGREEK SMALL LETTER ZETAGREEK SMALL LETTER ETA" + + "GREEK SMALL LETTER THETAGREEK SMALL LETTER IOTAGREEK SMALL LETTER KAPPAG" + + "REEK SMALL LETTER LAMDAGREEK SMALL LETTER MUGREEK SMALL LETTER NUGREEK S" + + "MALL LETTER XIGREEK SMALL LETTER OMICRONGREEK SMALL LETTER PIGREEK SMALL" + + " LETTER RHOGREEK SMALL LETTER FINAL SIGMAGREEK SMALL LETTER SIGMAGREEK S" + + "MALL LETTER TAUGREEK SMALL LETTER UPSILONGREEK SMALL LETTER PHIGREEK SMA" + + "LL LETTER CHIGREEK SMALL LETTER PSIGREEK SMALL LETTER OMEGAGREEK SMALL L" + + "ETTER IOTA WITH DIALYTIKAGREEK SMALL LETTER UPSILON WITH DIALYTIKAGREEK " + + "SMALL LETTER OMICRON WITH TONOSGREEK SMALL LETTER UPSILON WITH TONOSGREE" + + "K SMALL LETTER OMEGA WITH TONOSGREEK CAPITAL KAI SYMBOLGREEK BETA SYMBOL" + + "GREEK THETA SYMBOLGREEK UPSILON WITH HOOK SYMBOLGREEK UPSILON WITH ACUTE" + + " AND HOOK SYMBOLGREEK UPSILON WITH DIAERESIS AND HOOK SYMBOLGREEK PHI SY" + + "MBOLGREEK PI SYMBOLGREEK KAI SYMBOLGREEK LETTER ARCHAIC KOPPAGREEK SMALL" + + " LETTER ARCHAIC KOPPAGREEK LETTER STIGMAGREEK SMALL LETTER STIGMAGREEK L" + + "ETTER DIGAMMAGREEK SMALL LETTER DIGAMMAGREEK LETTER KOPPAGREEK SMALL LET" + + "TER KOPPAGREEK LETTER SAMPIGREEK SMALL LETTER SAMPICOPTIC CAPITAL LETTER" + + " SHEICOPTIC SMALL LETTER SHEICOPTIC CAPITAL LETTER FEICOPTIC SMALL LETTE" + + "R FEICOPTIC CAPITAL LETTER KHEICOPTIC SMALL LETTER KHEICOPTIC CAPITAL LE" + + "TTER HORICOPTIC SMALL LETTER HORICOPTIC CAPITAL LETTER GANGIACOPTIC SMAL" + + "L LETTER GANGIACOPTIC CAPITAL LETTER SHIMACOPTIC SMALL LETTER SHIMACOPTI" + + "C CAPITAL LETTER DEICOPTIC SMALL LETTER DEIGREEK KAPPA SYMBOLGREEK RHO S" + + "YMBOLGREEK LUNATE SIGMA SYMBOLGREEK LETTER YOTGREEK CAPITAL THETA SYMBOL" + + "GREEK LUNATE EPSILON SYMBOLGREEK REVERSED LUNATE EPSILON SYMBOLGREEK CAP" + + "ITAL LETTER SHOGREEK SMALL LETTER SHOGREEK CAPITAL LUNATE SIGMA SYMBOLGR" + + "EEK CAPITAL LETTER SANGREEK SMALL LETTER SANGREEK RHO WITH STROKE SYMBOL") + ("" + + "GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOLGREEK CAPITAL DOTTED LUNATE SI" + + "GMA SYMBOLGREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOLCYRILLIC CAPI" + + "TAL LETTER IE WITH GRAVECYRILLIC CAPITAL LETTER IOCYRILLIC CAPITAL LETTE" + + "R DJECYRILLIC CAPITAL LETTER GJECYRILLIC CAPITAL LETTER UKRAINIAN IECYRI" + + "LLIC CAPITAL LETTER DZECYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN IC" + + "YRILLIC CAPITAL LETTER YICYRILLIC CAPITAL LETTER JECYRILLIC CAPITAL LETT" + + "ER LJECYRILLIC CAPITAL LETTER NJECYRILLIC CAPITAL LETTER TSHECYRILLIC CA" + + "PITAL LETTER KJECYRILLIC CAPITAL LETTER I WITH GRAVECYRILLIC CAPITAL LET" + + "TER SHORT UCYRILLIC CAPITAL LETTER DZHECYRILLIC CAPITAL LETTER ACYRILLIC" + + " CAPITAL LETTER BECYRILLIC CAPITAL LETTER VECYRILLIC CAPITAL LETTER GHEC" + + "YRILLIC CAPITAL LETTER DECYRILLIC CAPITAL LETTER IECYRILLIC CAPITAL LETT" + + "ER ZHECYRILLIC CAPITAL LETTER ZECYRILLIC CAPITAL LETTER ICYRILLIC CAPITA" + + "L LETTER SHORT ICYRILLIC CAPITAL LETTER KACYRILLIC CAPITAL LETTER ELCYRI" + + "LLIC CAPITAL LETTER EMCYRILLIC CAPITAL LETTER ENCYRILLIC CAPITAL LETTER " + + "OCYRILLIC CAPITAL LETTER PECYRILLIC CAPITAL LETTER ERCYRILLIC CAPITAL LE" + + "TTER ESCYRILLIC CAPITAL LETTER TECYRILLIC CAPITAL LETTER UCYRILLIC CAPIT" + + "AL LETTER EFCYRILLIC CAPITAL LETTER HACYRILLIC CAPITAL LETTER TSECYRILLI" + + "C CAPITAL LETTER CHECYRILLIC CAPITAL LETTER SHACYRILLIC CAPITAL LETTER S" + + "HCHACYRILLIC CAPITAL LETTER HARD SIGNCYRILLIC CAPITAL LETTER YERUCYRILLI" + + "C CAPITAL LETTER SOFT SIGNCYRILLIC CAPITAL LETTER ECYRILLIC CAPITAL LETT" + + "ER YUCYRILLIC CAPITAL LETTER YACYRILLIC SMALL LETTER ACYRILLIC SMALL LET" + + "TER BECYRILLIC SMALL LETTER VECYRILLIC SMALL LETTER GHECYRILLIC SMALL LE" + + "TTER DECYRILLIC SMALL LETTER IECYRILLIC SMALL LETTER ZHECYRILLIC SMALL L" + + "ETTER ZECYRILLIC SMALL LETTER ICYRILLIC SMALL LETTER SHORT ICYRILLIC SMA" + + "LL LETTER KACYRILLIC SMALL LETTER ELCYRILLIC SMALL LETTER EMCYRILLIC SMA" + + "LL LETTER ENCYRILLIC SMALL LETTER OCYRILLIC SMALL LETTER PECYRILLIC SMAL" + + "L LETTER ERCYRILLIC SMALL LETTER ESCYRILLIC SMALL LETTER TECYRILLIC SMAL" + + "L LETTER UCYRILLIC SMALL LETTER EFCYRILLIC SMALL LETTER HACYRILLIC SMALL" + + " LETTER TSECYRILLIC SMALL LETTER CHECYRILLIC SMALL LETTER SHACYRILLIC SM" + + "ALL LETTER SHCHACYRILLIC SMALL LETTER HARD SIGNCYRILLIC SMALL LETTER YER" + + "UCYRILLIC SMALL LETTER SOFT SIGNCYRILLIC SMALL LETTER ECYRILLIC SMALL LE" + + "TTER YUCYRILLIC SMALL LETTER YACYRILLIC SMALL LETTER IE WITH GRAVECYRILL" + + "IC SMALL LETTER IOCYRILLIC SMALL LETTER DJECYRILLIC SMALL LETTER GJECYRI" + + "LLIC SMALL LETTER UKRAINIAN IECYRILLIC SMALL LETTER DZECYRILLIC SMALL LE" + + "TTER BYELORUSSIAN-UKRAINIAN ICYRILLIC SMALL LETTER YICYRILLIC SMALL LETT" + + "ER JECYRILLIC SMALL LETTER LJECYRILLIC SMALL LETTER NJECYRILLIC SMALL LE" + + "TTER TSHECYRILLIC SMALL LETTER KJECYRILLIC SMALL LETTER I WITH GRAVECYRI" + + "LLIC SMALL LETTER SHORT UCYRILLIC SMALL LETTER DZHECYRILLIC CAPITAL LETT" + + "ER OMEGACYRILLIC SMALL LETTER OMEGACYRILLIC CAPITAL LETTER YATCYRILLIC S" + + "MALL LETTER YATCYRILLIC CAPITAL LETTER IOTIFIED ECYRILLIC SMALL LETTER I" + + "OTIFIED ECYRILLIC CAPITAL LETTER LITTLE YUSCYRILLIC SMALL LETTER LITTLE " + + "YUSCYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUSCYRILLIC SMALL LETTER IOTI" + + "FIED LITTLE YUSCYRILLIC CAPITAL LETTER BIG YUSCYRILLIC SMALL LETTER BIG " + + "YUSCYRILLIC CAPITAL LETTER IOTIFIED BIG YUSCYRILLIC SMALL LETTER IOTIFIE" + + "D BIG YUSCYRILLIC CAPITAL LETTER KSICYRILLIC SMALL LETTER KSICYRILLIC CA" + + "PITAL LETTER PSICYRILLIC SMALL LETTER PSICYRILLIC CAPITAL LETTER FITACYR" + + "ILLIC SMALL LETTER FITACYRILLIC CAPITAL LETTER IZHITSACYRILLIC SMALL LET" + + "TER IZHITSACYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENTCYRIL" + + "LIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENTCYRILLIC CAPITAL LETTER" + + " UKCYRILLIC SMALL LETTER UKCYRILLIC CAPITAL LETTER ROUND OMEGACYRILLIC S" + + "MALL LETTER ROUND OMEGACYRILLIC CAPITAL LETTER OMEGA WITH TITLOCYRILLIC " + + "SMALL LETTER OMEGA WITH TITLOCYRILLIC CAPITAL LETTER OTCYRILLIC SMALL LE" + + "TTER OTCYRILLIC CAPITAL LETTER KOPPACYRILLIC SMALL LETTER KOPPACYRILLIC " + + "THOUSANDS SIGNCOMBINING CYRILLIC TITLOCOMBINING CYRILLIC PALATALIZATIONC" + + "OMBINING CYRILLIC DASIA PNEUMATACOMBINING CYRILLIC PSILI PNEUMATACOMBINI" + + "NG CYRILLIC POKRYTIECOMBINING CYRILLIC HUNDRED THOUSANDS SIGNCOMBINING C" + + "YRILLIC MILLIONS SIGNCYRILLIC CAPITAL LETTER SHORT I WITH TAILCYRILLIC S" + + "MALL LETTER SHORT I WITH TAILCYRILLIC CAPITAL LETTER SEMISOFT SIGNCYRILL" + + "IC SMALL LETTER SEMISOFT SIGNCYRILLIC CAPITAL LETTER ER WITH TICKCYRILLI" + + "C SMALL LETTER ER WITH TICKCYRILLIC CAPITAL LETTER GHE WITH UPTURNCYRILL" + + "IC SMALL LETTER GHE WITH UPTURNCYRILLIC CAPITAL LETTER GHE WITH STROKECY" + + "RILLIC SMALL LETTER GHE WITH STROKECYRILLIC CAPITAL LETTER GHE WITH MIDD" + + "LE HOOKCYRILLIC SMALL LETTER GHE WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER" + + " ZHE WITH DESCENDERCYRILLIC SMALL LETTER ZHE WITH DESCENDERCYRILLIC CAPI") + ("" + + "TAL LETTER ZE WITH DESCENDERCYRILLIC SMALL LETTER ZE WITH DESCENDERCYRIL" + + "LIC CAPITAL LETTER KA WITH DESCENDERCYRILLIC SMALL LETTER KA WITH DESCEN" + + "DERCYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKECYRILLIC SMALL LETTER " + + "KA WITH VERTICAL STROKECYRILLIC CAPITAL LETTER KA WITH STROKECYRILLIC SM" + + "ALL LETTER KA WITH STROKECYRILLIC CAPITAL LETTER BASHKIR KACYRILLIC SMAL" + + "L LETTER BASHKIR KACYRILLIC CAPITAL LETTER EN WITH DESCENDERCYRILLIC SMA" + + "LL LETTER EN WITH DESCENDERCYRILLIC CAPITAL LIGATURE EN GHECYRILLIC SMAL" + + "L LIGATURE EN GHECYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOKCYRILLIC SMA" + + "LL LETTER PE WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER ABKHASIAN HACYRILLI" + + "C SMALL LETTER ABKHASIAN HACYRILLIC CAPITAL LETTER ES WITH DESCENDERCYRI" + + "LLIC SMALL LETTER ES WITH DESCENDERCYRILLIC CAPITAL LETTER TE WITH DESCE" + + "NDERCYRILLIC SMALL LETTER TE WITH DESCENDERCYRILLIC CAPITAL LETTER STRAI" + + "GHT UCYRILLIC SMALL LETTER STRAIGHT UCYRILLIC CAPITAL LETTER STRAIGHT U " + + "WITH STROKECYRILLIC SMALL LETTER STRAIGHT U WITH STROKECYRILLIC CAPITAL " + + "LETTER HA WITH DESCENDERCYRILLIC SMALL LETTER HA WITH DESCENDERCYRILLIC " + + "CAPITAL LIGATURE TE TSECYRILLIC SMALL LIGATURE TE TSECYRILLIC CAPITAL LE" + + "TTER CHE WITH DESCENDERCYRILLIC SMALL LETTER CHE WITH DESCENDERCYRILLIC " + + "CAPITAL LETTER CHE WITH VERTICAL STROKECYRILLIC SMALL LETTER CHE WITH VE" + + "RTICAL STROKECYRILLIC CAPITAL LETTER SHHACYRILLIC SMALL LETTER SHHACYRIL" + + "LIC CAPITAL LETTER ABKHASIAN CHECYRILLIC SMALL LETTER ABKHASIAN CHECYRIL" + + "LIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDERCYRILLIC SMALL LETTER ABK" + + "HASIAN CHE WITH DESCENDERCYRILLIC LETTER PALOCHKACYRILLIC CAPITAL LETTER" + + " ZHE WITH BREVECYRILLIC SMALL LETTER ZHE WITH BREVECYRILLIC CAPITAL LETT" + + "ER KA WITH HOOKCYRILLIC SMALL LETTER KA WITH HOOKCYRILLIC CAPITAL LETTER" + + " EL WITH TAILCYRILLIC SMALL LETTER EL WITH TAILCYRILLIC CAPITAL LETTER E" + + "N WITH HOOKCYRILLIC SMALL LETTER EN WITH HOOKCYRILLIC CAPITAL LETTER EN " + + "WITH TAILCYRILLIC SMALL LETTER EN WITH TAILCYRILLIC CAPITAL LETTER KHAKA" + + "SSIAN CHECYRILLIC SMALL LETTER KHAKASSIAN CHECYRILLIC CAPITAL LETTER EM " + + "WITH TAILCYRILLIC SMALL LETTER EM WITH TAILCYRILLIC SMALL LETTER PALOCHK" + + "ACYRILLIC CAPITAL LETTER A WITH BREVECYRILLIC SMALL LETTER A WITH BREVEC" + + "YRILLIC CAPITAL LETTER A WITH DIAERESISCYRILLIC SMALL LETTER A WITH DIAE" + + "RESISCYRILLIC CAPITAL LIGATURE A IECYRILLIC SMALL LIGATURE A IECYRILLIC " + + "CAPITAL LETTER IE WITH BREVECYRILLIC SMALL LETTER IE WITH BREVECYRILLIC " + + "CAPITAL LETTER SCHWACYRILLIC SMALL LETTER SCHWACYRILLIC CAPITAL LETTER S" + + "CHWA WITH DIAERESISCYRILLIC SMALL LETTER SCHWA WITH DIAERESISCYRILLIC CA" + + "PITAL LETTER ZHE WITH DIAERESISCYRILLIC SMALL LETTER ZHE WITH DIAERESISC" + + "YRILLIC CAPITAL LETTER ZE WITH DIAERESISCYRILLIC SMALL LETTER ZE WITH DI" + + "AERESISCYRILLIC CAPITAL LETTER ABKHASIAN DZECYRILLIC SMALL LETTER ABKHAS" + + "IAN DZECYRILLIC CAPITAL LETTER I WITH MACRONCYRILLIC SMALL LETTER I WITH" + + " MACRONCYRILLIC CAPITAL LETTER I WITH DIAERESISCYRILLIC SMALL LETTER I W" + + "ITH DIAERESISCYRILLIC CAPITAL LETTER O WITH DIAERESISCYRILLIC SMALL LETT" + + "ER O WITH DIAERESISCYRILLIC CAPITAL LETTER BARRED OCYRILLIC SMALL LETTER" + + " BARRED OCYRILLIC CAPITAL LETTER BARRED O WITH DIAERESISCYRILLIC SMALL L" + + "ETTER BARRED O WITH DIAERESISCYRILLIC CAPITAL LETTER E WITH DIAERESISCYR" + + "ILLIC SMALL LETTER E WITH DIAERESISCYRILLIC CAPITAL LETTER U WITH MACRON" + + "CYRILLIC SMALL LETTER U WITH MACRONCYRILLIC CAPITAL LETTER U WITH DIAERE" + + "SISCYRILLIC SMALL LETTER U WITH DIAERESISCYRILLIC CAPITAL LETTER U WITH " + + "DOUBLE ACUTECYRILLIC SMALL LETTER U WITH DOUBLE ACUTECYRILLIC CAPITAL LE" + + "TTER CHE WITH DIAERESISCYRILLIC SMALL LETTER CHE WITH DIAERESISCYRILLIC " + + "CAPITAL LETTER GHE WITH DESCENDERCYRILLIC SMALL LETTER GHE WITH DESCENDE" + + "RCYRILLIC CAPITAL LETTER YERU WITH DIAERESISCYRILLIC SMALL LETTER YERU W" + + "ITH DIAERESISCYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOKCYRILLIC SM" + + "ALL LETTER GHE WITH STROKE AND HOOKCYRILLIC CAPITAL LETTER HA WITH HOOKC" + + "YRILLIC SMALL LETTER HA WITH HOOKCYRILLIC CAPITAL LETTER HA WITH STROKEC" + + "YRILLIC SMALL LETTER HA WITH STROKECYRILLIC CAPITAL LETTER KOMI DECYRILL" + + "IC SMALL LETTER KOMI DECYRILLIC CAPITAL LETTER KOMI DJECYRILLIC SMALL LE" + + "TTER KOMI DJECYRILLIC CAPITAL LETTER KOMI ZJECYRILLIC SMALL LETTER KOMI " + + "ZJECYRILLIC CAPITAL LETTER KOMI DZJECYRILLIC SMALL LETTER KOMI DZJECYRIL" + + "LIC CAPITAL LETTER KOMI LJECYRILLIC SMALL LETTER KOMI LJECYRILLIC CAPITA" + + "L LETTER KOMI NJECYRILLIC SMALL LETTER KOMI NJECYRILLIC CAPITAL LETTER K" + + "OMI SJECYRILLIC SMALL LETTER KOMI SJECYRILLIC CAPITAL LETTER KOMI TJECYR" + + "ILLIC SMALL LETTER KOMI TJECYRILLIC CAPITAL LETTER REVERSED ZECYRILLIC S" + + "MALL LETTER REVERSED ZECYRILLIC CAPITAL LETTER EL WITH HOOKCYRILLIC SMAL" + + "L LETTER EL WITH HOOKCYRILLIC CAPITAL LETTER LHACYRILLIC SMALL LETTER LH") + ("" + + "ACYRILLIC CAPITAL LETTER RHACYRILLIC SMALL LETTER RHACYRILLIC CAPITAL LE" + + "TTER YAECYRILLIC SMALL LETTER YAECYRILLIC CAPITAL LETTER QACYRILLIC SMAL" + + "L LETTER QACYRILLIC CAPITAL LETTER WECYRILLIC SMALL LETTER WECYRILLIC CA" + + "PITAL LETTER ALEUT KACYRILLIC SMALL LETTER ALEUT KACYRILLIC CAPITAL LETT" + + "ER EL WITH MIDDLE HOOKCYRILLIC SMALL LETTER EL WITH MIDDLE HOOKCYRILLIC " + + "CAPITAL LETTER EN WITH MIDDLE HOOKCYRILLIC SMALL LETTER EN WITH MIDDLE H" + + "OOKCYRILLIC CAPITAL LETTER PE WITH DESCENDERCYRILLIC SMALL LETTER PE WIT" + + "H DESCENDERCYRILLIC CAPITAL LETTER SHHA WITH DESCENDERCYRILLIC SMALL LET" + + "TER SHHA WITH DESCENDERCYRILLIC CAPITAL LETTER EN WITH LEFT HOOKCYRILLIC" + + " SMALL LETTER EN WITH LEFT HOOKCYRILLIC CAPITAL LETTER DZZHECYRILLIC SMA" + + "LL LETTER DZZHECYRILLIC CAPITAL LETTER DCHECYRILLIC SMALL LETTER DCHECYR" + + "ILLIC CAPITAL LETTER EL WITH DESCENDERCYRILLIC SMALL LETTER EL WITH DESC" + + "ENDERARMENIAN CAPITAL LETTER AYBARMENIAN CAPITAL LETTER BENARMENIAN CAPI" + + "TAL LETTER GIMARMENIAN CAPITAL LETTER DAARMENIAN CAPITAL LETTER ECHARMEN" + + "IAN CAPITAL LETTER ZAARMENIAN CAPITAL LETTER EHARMENIAN CAPITAL LETTER E" + + "TARMENIAN CAPITAL LETTER TOARMENIAN CAPITAL LETTER ZHEARMENIAN CAPITAL L" + + "ETTER INIARMENIAN CAPITAL LETTER LIWNARMENIAN CAPITAL LETTER XEHARMENIAN" + + " CAPITAL LETTER CAARMENIAN CAPITAL LETTER KENARMENIAN CAPITAL LETTER HOA" + + "RMENIAN CAPITAL LETTER JAARMENIAN CAPITAL LETTER GHADARMENIAN CAPITAL LE" + + "TTER CHEHARMENIAN CAPITAL LETTER MENARMENIAN CAPITAL LETTER YIARMENIAN C" + + "APITAL LETTER NOWARMENIAN CAPITAL LETTER SHAARMENIAN CAPITAL LETTER VOAR" + + "MENIAN CAPITAL LETTER CHAARMENIAN CAPITAL LETTER PEHARMENIAN CAPITAL LET" + + "TER JHEHARMENIAN CAPITAL LETTER RAARMENIAN CAPITAL LETTER SEHARMENIAN CA" + + "PITAL LETTER VEWARMENIAN CAPITAL LETTER TIWNARMENIAN CAPITAL LETTER REHA" + + "RMENIAN CAPITAL LETTER COARMENIAN CAPITAL LETTER YIWNARMENIAN CAPITAL LE" + + "TTER PIWRARMENIAN CAPITAL LETTER KEHARMENIAN CAPITAL LETTER OHARMENIAN C" + + "APITAL LETTER FEHARMENIAN MODIFIER LETTER LEFT HALF RINGARMENIAN APOSTRO" + + "PHEARMENIAN EMPHASIS MARKARMENIAN EXCLAMATION MARKARMENIAN COMMAARMENIAN" + + " QUESTION MARKARMENIAN ABBREVIATION MARKARMENIAN SMALL LETTER AYBARMENIA" + + "N SMALL LETTER BENARMENIAN SMALL LETTER GIMARMENIAN SMALL LETTER DAARMEN" + + "IAN SMALL LETTER ECHARMENIAN SMALL LETTER ZAARMENIAN SMALL LETTER EHARME" + + "NIAN SMALL LETTER ETARMENIAN SMALL LETTER TOARMENIAN SMALL LETTER ZHEARM" + + "ENIAN SMALL LETTER INIARMENIAN SMALL LETTER LIWNARMENIAN SMALL LETTER XE" + + "HARMENIAN SMALL LETTER CAARMENIAN SMALL LETTER KENARMENIAN SMALL LETTER " + + "HOARMENIAN SMALL LETTER JAARMENIAN SMALL LETTER GHADARMENIAN SMALL LETTE" + + "R CHEHARMENIAN SMALL LETTER MENARMENIAN SMALL LETTER YIARMENIAN SMALL LE" + + "TTER NOWARMENIAN SMALL LETTER SHAARMENIAN SMALL LETTER VOARMENIAN SMALL " + + "LETTER CHAARMENIAN SMALL LETTER PEHARMENIAN SMALL LETTER JHEHARMENIAN SM" + + "ALL LETTER RAARMENIAN SMALL LETTER SEHARMENIAN SMALL LETTER VEWARMENIAN " + + "SMALL LETTER TIWNARMENIAN SMALL LETTER REHARMENIAN SMALL LETTER COARMENI" + + "AN SMALL LETTER YIWNARMENIAN SMALL LETTER PIWRARMENIAN SMALL LETTER KEHA" + + "RMENIAN SMALL LETTER OHARMENIAN SMALL LETTER FEHARMENIAN SMALL LIGATURE " + + "ECH YIWNARMENIAN FULL STOPARMENIAN HYPHENRIGHT-FACING ARMENIAN ETERNITY " + + "SIGNLEFT-FACING ARMENIAN ETERNITY SIGNARMENIAN DRAM SIGNHEBREW ACCENT ET" + + "NAHTAHEBREW ACCENT SEGOLHEBREW ACCENT SHALSHELETHEBREW ACCENT ZAQEF QATA" + + "NHEBREW ACCENT ZAQEF GADOLHEBREW ACCENT TIPEHAHEBREW ACCENT REVIAHEBREW " + + "ACCENT ZARQAHEBREW ACCENT PASHTAHEBREW ACCENT YETIVHEBREW ACCENT TEVIRHE" + + "BREW ACCENT GERESHHEBREW ACCENT GERESH MUQDAMHEBREW ACCENT GERSHAYIMHEBR" + + "EW ACCENT QARNEY PARAHEBREW ACCENT TELISHA GEDOLAHEBREW ACCENT PAZERHEBR" + + "EW ACCENT ATNAH HAFUKHHEBREW ACCENT MUNAHHEBREW ACCENT MAHAPAKHHEBREW AC" + + "CENT MERKHAHEBREW ACCENT MERKHA KEFULAHEBREW ACCENT DARGAHEBREW ACCENT Q" + + "ADMAHEBREW ACCENT TELISHA QETANAHEBREW ACCENT YERAH BEN YOMOHEBREW ACCEN" + + "T OLEHEBREW ACCENT ILUYHEBREW ACCENT DEHIHEBREW ACCENT ZINORHEBREW MARK " + + "MASORA CIRCLEHEBREW POINT SHEVAHEBREW POINT HATAF SEGOLHEBREW POINT HATA" + + "F PATAHHEBREW POINT HATAF QAMATSHEBREW POINT HIRIQHEBREW POINT TSEREHEBR" + + "EW POINT SEGOLHEBREW POINT PATAHHEBREW POINT QAMATSHEBREW POINT HOLAMHEB" + + "REW POINT HOLAM HASER FOR VAVHEBREW POINT QUBUTSHEBREW POINT DAGESH OR M" + + "APIQHEBREW POINT METEGHEBREW PUNCTUATION MAQAFHEBREW POINT RAFEHEBREW PU" + + "NCTUATION PASEQHEBREW POINT SHIN DOTHEBREW POINT SIN DOTHEBREW PUNCTUATI" + + "ON SOF PASUQHEBREW MARK UPPER DOTHEBREW MARK LOWER DOTHEBREW PUNCTUATION" + + " NUN HAFUKHAHEBREW POINT QAMATS QATANHEBREW LETTER ALEFHEBREW LETTER BET" + + "HEBREW LETTER GIMELHEBREW LETTER DALETHEBREW LETTER HEHEBREW LETTER VAVH" + + "EBREW LETTER ZAYINHEBREW LETTER HETHEBREW LETTER TETHEBREW LETTER YODHEB" + + "REW LETTER FINAL KAFHEBREW LETTER KAFHEBREW LETTER LAMEDHEBREW LETTER FI") + ("" + + "NAL MEMHEBREW LETTER MEMHEBREW LETTER FINAL NUNHEBREW LETTER NUNHEBREW L" + + "ETTER SAMEKHHEBREW LETTER AYINHEBREW LETTER FINAL PEHEBREW LETTER PEHEBR" + + "EW LETTER FINAL TSADIHEBREW LETTER TSADIHEBREW LETTER QOFHEBREW LETTER R" + + "ESHHEBREW LETTER SHINHEBREW LETTER TAVHEBREW LIGATURE YIDDISH DOUBLE VAV" + + "HEBREW LIGATURE YIDDISH VAV YODHEBREW LIGATURE YIDDISH DOUBLE YODHEBREW " + + "PUNCTUATION GERESHHEBREW PUNCTUATION GERSHAYIMARABIC NUMBER SIGNARABIC S" + + "IGN SANAHARABIC FOOTNOTE MARKERARABIC SIGN SAFHAARABIC SIGN SAMVATARABIC" + + " NUMBER MARK ABOVEARABIC-INDIC CUBE ROOTARABIC-INDIC FOURTH ROOTARABIC R" + + "AYARABIC-INDIC PER MILLE SIGNARABIC-INDIC PER TEN THOUSAND SIGNAFGHANI S" + + "IGNARABIC COMMAARABIC DATE SEPARATORARABIC POETIC VERSE SIGNARABIC SIGN " + + "MISRAARABIC SIGN SALLALLAHOU ALAYHE WASSALLAMARABIC SIGN ALAYHE ASSALLAM" + + "ARABIC SIGN RAHMATULLAH ALAYHEARABIC SIGN RADI ALLAHOU ANHUARABIC SIGN T" + + "AKHALLUSARABIC SMALL HIGH TAHARABIC SMALL HIGH LIGATURE ALEF WITH LAM WI" + + "TH YEHARABIC SMALL HIGH ZAINARABIC SMALL FATHAARABIC SMALL DAMMAARABIC S" + + "MALL KASRAARABIC SEMICOLONARABIC LETTER MARKARABIC TRIPLE DOT PUNCTUATIO" + + "N MARKARABIC QUESTION MARKARABIC LETTER KASHMIRI YEHARABIC LETTER HAMZAA" + + "RABIC LETTER ALEF WITH MADDA ABOVEARABIC LETTER ALEF WITH HAMZA ABOVEARA" + + "BIC LETTER WAW WITH HAMZA ABOVEARABIC LETTER ALEF WITH HAMZA BELOWARABIC" + + " LETTER YEH WITH HAMZA ABOVEARABIC LETTER ALEFARABIC LETTER BEHARABIC LE" + + "TTER TEH MARBUTAARABIC LETTER TEHARABIC LETTER THEHARABIC LETTER JEEMARA" + + "BIC LETTER HAHARABIC LETTER KHAHARABIC LETTER DALARABIC LETTER THALARABI" + + "C LETTER REHARABIC LETTER ZAINARABIC LETTER SEENARABIC LETTER SHEENARABI" + + "C LETTER SADARABIC LETTER DADARABIC LETTER TAHARABIC LETTER ZAHARABIC LE" + + "TTER AINARABIC LETTER GHAINARABIC LETTER KEHEH WITH TWO DOTS ABOVEARABIC" + + " LETTER KEHEH WITH THREE DOTS BELOWARABIC LETTER FARSI YEH WITH INVERTED" + + " VARABIC LETTER FARSI YEH WITH TWO DOTS ABOVEARABIC LETTER FARSI YEH WIT" + + "H THREE DOTS ABOVEARABIC TATWEELARABIC LETTER FEHARABIC LETTER QAFARABIC" + + " LETTER KAFARABIC LETTER LAMARABIC LETTER MEEMARABIC LETTER NOONARABIC L" + + "ETTER HEHARABIC LETTER WAWARABIC LETTER ALEF MAKSURAARABIC LETTER YEHARA" + + "BIC FATHATANARABIC DAMMATANARABIC KASRATANARABIC FATHAARABIC DAMMAARABIC" + + " KASRAARABIC SHADDAARABIC SUKUNARABIC MADDAH ABOVEARABIC HAMZA ABOVEARAB" + + "IC HAMZA BELOWARABIC SUBSCRIPT ALEFARABIC INVERTED DAMMAARABIC MARK NOON" + + " GHUNNAARABIC ZWARAKAYARABIC VOWEL SIGN SMALL V ABOVEARABIC VOWEL SIGN I" + + "NVERTED SMALL V ABOVEARABIC VOWEL SIGN DOT BELOWARABIC REVERSED DAMMAARA" + + "BIC FATHA WITH TWO DOTSARABIC WAVY HAMZA BELOWARABIC-INDIC DIGIT ZEROARA" + + "BIC-INDIC DIGIT ONEARABIC-INDIC DIGIT TWOARABIC-INDIC DIGIT THREEARABIC-" + + "INDIC DIGIT FOURARABIC-INDIC DIGIT FIVEARABIC-INDIC DIGIT SIXARABIC-INDI" + + "C DIGIT SEVENARABIC-INDIC DIGIT EIGHTARABIC-INDIC DIGIT NINEARABIC PERCE" + + "NT SIGNARABIC DECIMAL SEPARATORARABIC THOUSANDS SEPARATORARABIC FIVE POI" + + "NTED STARARABIC LETTER DOTLESS BEHARABIC LETTER DOTLESS QAFARABIC LETTER" + + " SUPERSCRIPT ALEFARABIC LETTER ALEF WASLAARABIC LETTER ALEF WITH WAVY HA" + + "MZA ABOVEARABIC LETTER ALEF WITH WAVY HAMZA BELOWARABIC LETTER HIGH HAMZ" + + "AARABIC LETTER HIGH HAMZA ALEFARABIC LETTER HIGH HAMZA WAWARABIC LETTER " + + "U WITH HAMZA ABOVEARABIC LETTER HIGH HAMZA YEHARABIC LETTER TTEHARABIC L" + + "ETTER TTEHEHARABIC LETTER BEEHARABIC LETTER TEH WITH RINGARABIC LETTER T" + + "EH WITH THREE DOTS ABOVE DOWNWARDSARABIC LETTER PEHARABIC LETTER TEHEHAR" + + "ABIC LETTER BEHEHARABIC LETTER HAH WITH HAMZA ABOVEARABIC LETTER HAH WIT" + + "H TWO DOTS VERTICAL ABOVEARABIC LETTER NYEHARABIC LETTER DYEHARABIC LETT" + + "ER HAH WITH THREE DOTS ABOVEARABIC LETTER TCHEHARABIC LETTER TCHEHEHARAB" + + "IC LETTER DDALARABIC LETTER DAL WITH RINGARABIC LETTER DAL WITH DOT BELO" + + "WARABIC LETTER DAL WITH DOT BELOW AND SMALL TAHARABIC LETTER DAHALARABIC" + + " LETTER DDAHALARABIC LETTER DULARABIC LETTER DAL WITH THREE DOTS ABOVE D" + + "OWNWARDSARABIC LETTER DAL WITH FOUR DOTS ABOVEARABIC LETTER RREHARABIC L" + + "ETTER REH WITH SMALL VARABIC LETTER REH WITH RINGARABIC LETTER REH WITH " + + "DOT BELOWARABIC LETTER REH WITH SMALL V BELOWARABIC LETTER REH WITH DOT " + + "BELOW AND DOT ABOVEARABIC LETTER REH WITH TWO DOTS ABOVEARABIC LETTER JE" + + "HARABIC LETTER REH WITH FOUR DOTS ABOVEARABIC LETTER SEEN WITH DOT BELOW" + + " AND DOT ABOVEARABIC LETTER SEEN WITH THREE DOTS BELOWARABIC LETTER SEEN" + + " WITH THREE DOTS BELOW AND THREE DOTS ABOVEARABIC LETTER SAD WITH TWO DO" + + "TS BELOWARABIC LETTER SAD WITH THREE DOTS ABOVEARABIC LETTER TAH WITH TH" + + "REE DOTS ABOVEARABIC LETTER AIN WITH THREE DOTS ABOVEARABIC LETTER DOTLE" + + "SS FEHARABIC LETTER FEH WITH DOT MOVED BELOWARABIC LETTER FEH WITH DOT B" + + "ELOWARABIC LETTER VEHARABIC LETTER FEH WITH THREE DOTS BELOWARABIC LETTE" + + "R PEHEHARABIC LETTER QAF WITH DOT ABOVEARABIC LETTER QAF WITH THREE DOTS") + ("" + + " ABOVEARABIC LETTER KEHEHARABIC LETTER SWASH KAFARABIC LETTER KAF WITH R" + + "INGARABIC LETTER KAF WITH DOT ABOVEARABIC LETTER NGARABIC LETTER KAF WIT" + + "H THREE DOTS BELOWARABIC LETTER GAFARABIC LETTER GAF WITH RINGARABIC LET" + + "TER NGOEHARABIC LETTER GAF WITH TWO DOTS BELOWARABIC LETTER GUEHARABIC L" + + "ETTER GAF WITH THREE DOTS ABOVEARABIC LETTER LAM WITH SMALL VARABIC LETT" + + "ER LAM WITH DOT ABOVEARABIC LETTER LAM WITH THREE DOTS ABOVEARABIC LETTE" + + "R LAM WITH THREE DOTS BELOWARABIC LETTER NOON WITH DOT BELOWARABIC LETTE" + + "R NOON GHUNNAARABIC LETTER RNOONARABIC LETTER NOON WITH RINGARABIC LETTE" + + "R NOON WITH THREE DOTS ABOVEARABIC LETTER HEH DOACHASHMEEARABIC LETTER T" + + "CHEH WITH DOT ABOVEARABIC LETTER HEH WITH YEH ABOVEARABIC LETTER HEH GOA" + + "LARABIC LETTER HEH GOAL WITH HAMZA ABOVEARABIC LETTER TEH MARBUTA GOALAR" + + "ABIC LETTER WAW WITH RINGARABIC LETTER KIRGHIZ OEARABIC LETTER OEARABIC " + + "LETTER UARABIC LETTER YUARABIC LETTER KIRGHIZ YUARABIC LETTER WAW WITH T" + + "WO DOTS ABOVEARABIC LETTER VEARABIC LETTER FARSI YEHARABIC LETTER YEH WI" + + "TH TAILARABIC LETTER YEH WITH SMALL VARABIC LETTER WAW WITH DOT ABOVEARA" + + "BIC LETTER EARABIC LETTER YEH WITH THREE DOTS BELOWARABIC LETTER YEH BAR" + + "REEARABIC LETTER YEH BARREE WITH HAMZA ABOVEARABIC FULL STOPARABIC LETTE" + + "R AEARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURAARABIC SMAL" + + "L HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURAARABIC SMALL HIGH MEEM INI" + + "TIAL FORMARABIC SMALL HIGH LAM ALEFARABIC SMALL HIGH JEEMARABIC SMALL HI" + + "GH THREE DOTSARABIC SMALL HIGH SEENARABIC END OF AYAHARABIC START OF RUB" + + " EL HIZBARABIC SMALL HIGH ROUNDED ZEROARABIC SMALL HIGH UPRIGHT RECTANGU" + + "LAR ZEROARABIC SMALL HIGH DOTLESS HEAD OF KHAHARABIC SMALL HIGH MEEM ISO" + + "LATED FORMARABIC SMALL LOW SEENARABIC SMALL HIGH MADDAARABIC SMALL WAWAR" + + "ABIC SMALL YEHARABIC SMALL HIGH YEHARABIC SMALL HIGH NOONARABIC PLACE OF" + + " SAJDAHARABIC EMPTY CENTRE LOW STOPARABIC EMPTY CENTRE HIGH STOPARABIC R" + + "OUNDED HIGH STOP WITH FILLED CENTREARABIC SMALL LOW MEEMARABIC LETTER DA" + + "L WITH INVERTED VARABIC LETTER REH WITH INVERTED VEXTENDED ARABIC-INDIC " + + "DIGIT ZEROEXTENDED ARABIC-INDIC DIGIT ONEEXTENDED ARABIC-INDIC DIGIT TWO" + + "EXTENDED ARABIC-INDIC DIGIT THREEEXTENDED ARABIC-INDIC DIGIT FOUREXTENDE" + + "D ARABIC-INDIC DIGIT FIVEEXTENDED ARABIC-INDIC DIGIT SIXEXTENDED ARABIC-" + + "INDIC DIGIT SEVENEXTENDED ARABIC-INDIC DIGIT EIGHTEXTENDED ARABIC-INDIC " + + "DIGIT NINEARABIC LETTER SHEEN WITH DOT BELOWARABIC LETTER DAD WITH DOT B" + + "ELOWARABIC LETTER GHAIN WITH DOT BELOWARABIC SIGN SINDHI AMPERSANDARABIC" + + " SIGN SINDHI POSTPOSITION MENARABIC LETTER HEH WITH INVERTED VSYRIAC END" + + " OF PARAGRAPHSYRIAC SUPRALINEAR FULL STOPSYRIAC SUBLINEAR FULL STOPSYRIA" + + "C SUPRALINEAR COLONSYRIAC SUBLINEAR COLONSYRIAC HORIZONTAL COLONSYRIAC C" + + "OLON SKEWED LEFTSYRIAC COLON SKEWED RIGHTSYRIAC SUPRALINEAR COLON SKEWED" + + " LEFTSYRIAC SUBLINEAR COLON SKEWED RIGHTSYRIAC CONTRACTIONSYRIAC HARKLEA" + + "N OBELUSSYRIAC HARKLEAN METOBELUSSYRIAC HARKLEAN ASTERISCUSSYRIAC ABBREV" + + "IATION MARKSYRIAC LETTER ALAPHSYRIAC LETTER SUPERSCRIPT ALAPHSYRIAC LETT" + + "ER BETHSYRIAC LETTER GAMALSYRIAC LETTER GAMAL GARSHUNISYRIAC LETTER DALA" + + "THSYRIAC LETTER DOTLESS DALATH RISHSYRIAC LETTER HESYRIAC LETTER WAWSYRI" + + "AC LETTER ZAINSYRIAC LETTER HETHSYRIAC LETTER TETHSYRIAC LETTER TETH GAR" + + "SHUNISYRIAC LETTER YUDHSYRIAC LETTER YUDH HESYRIAC LETTER KAPHSYRIAC LET" + + "TER LAMADHSYRIAC LETTER MIMSYRIAC LETTER NUNSYRIAC LETTER SEMKATHSYRIAC " + + "LETTER FINAL SEMKATHSYRIAC LETTER ESYRIAC LETTER PESYRIAC LETTER REVERSE" + + "D PESYRIAC LETTER SADHESYRIAC LETTER QAPHSYRIAC LETTER RISHSYRIAC LETTER" + + " SHINSYRIAC LETTER TAWSYRIAC LETTER PERSIAN BHETHSYRIAC LETTER PERSIAN G" + + "HAMALSYRIAC LETTER PERSIAN DHALATHSYRIAC PTHAHA ABOVESYRIAC PTHAHA BELOW" + + "SYRIAC PTHAHA DOTTEDSYRIAC ZQAPHA ABOVESYRIAC ZQAPHA BELOWSYRIAC ZQAPHA " + + "DOTTEDSYRIAC RBASA ABOVESYRIAC RBASA BELOWSYRIAC DOTTED ZLAMA HORIZONTAL" + + "SYRIAC DOTTED ZLAMA ANGULARSYRIAC HBASA ABOVESYRIAC HBASA BELOWSYRIAC HB" + + "ASA-ESASA DOTTEDSYRIAC ESASA ABOVESYRIAC ESASA BELOWSYRIAC RWAHASYRIAC F" + + "EMININE DOTSYRIAC QUSHSHAYASYRIAC RUKKAKHASYRIAC TWO VERTICAL DOTS ABOVE" + + "SYRIAC TWO VERTICAL DOTS BELOWSYRIAC THREE DOTS ABOVESYRIAC THREE DOTS B" + + "ELOWSYRIAC OBLIQUE LINE ABOVESYRIAC OBLIQUE LINE BELOWSYRIAC MUSICSYRIAC" + + " BARREKHSYRIAC LETTER SOGDIAN ZHAINSYRIAC LETTER SOGDIAN KHAPHSYRIAC LET" + + "TER SOGDIAN FEARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOWARABIC" + + " LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVEARABIC LETTER BEH WITH TH" + + "REE DOTS POINTING UPWARDS BELOWARABIC LETTER BEH WITH THREE DOTS POINTIN" + + "G UPWARDS BELOW AND TWO DOTS ABOVEARABIC LETTER BEH WITH TWO DOTS BELOW " + + "AND DOT ABOVEARABIC LETTER BEH WITH INVERTED SMALL V BELOWARABIC LETTER " + + "BEH WITH SMALL VARABIC LETTER HAH WITH TWO DOTS ABOVEARABIC LETTER HAH W") + ("" + + "ITH THREE DOTS POINTING UPWARDS BELOWARABIC LETTER DAL WITH TWO DOTS VER" + + "TICALLY BELOW AND SMALL TAHARABIC LETTER DAL WITH INVERTED SMALL V BELOW" + + "ARABIC LETTER REH WITH STROKEARABIC LETTER SEEN WITH FOUR DOTS ABOVEARAB" + + "IC LETTER AIN WITH TWO DOTS ABOVEARABIC LETTER AIN WITH THREE DOTS POINT" + + "ING DOWNWARDS ABOVEARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVEARABI" + + "C LETTER FEH WITH TWO DOTS BELOWARABIC LETTER FEH WITH THREE DOTS POINTI" + + "NG UPWARDS BELOWARABIC LETTER KEHEH WITH DOT ABOVEARABIC LETTER KEHEH WI" + + "TH THREE DOTS ABOVEARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS " + + "BELOWARABIC LETTER MEEM WITH DOT ABOVEARABIC LETTER MEEM WITH DOT BELOWA" + + "RABIC LETTER NOON WITH TWO DOTS BELOWARABIC LETTER NOON WITH SMALL TAHAR" + + "ABIC LETTER NOON WITH SMALL VARABIC LETTER LAM WITH BARARABIC LETTER REH" + + " WITH TWO DOTS VERTICALLY ABOVEARABIC LETTER REH WITH HAMZA ABOVEARABIC " + + "LETTER SEEN WITH TWO DOTS VERTICALLY ABOVEARABIC LETTER HAH WITH SMALL A" + + "RABIC LETTER TAH BELOWARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND" + + " TWO DOTSARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTSARA" + + "BIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTSARABIC LETTER HA" + + "H WITH SMALL ARABIC LETTER TAH ABOVEARABIC LETTER ALEF WITH EXTENDED ARA" + + "BIC-INDIC DIGIT TWO ABOVEARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC D" + + "IGIT THREE ABOVEARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT" + + " TWO ABOVEARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE" + + " ABOVEARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELO" + + "WARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVEARABIC LETT" + + "ER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVEARABIC LETTER YEH BAR" + + "REE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVEARABIC LETTER YEH BARREE W" + + "ITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVEARABIC LETTER HAH WITH EXTEND" + + "ED ARABIC-INDIC DIGIT FOUR BELOWARABIC LETTER SEEN WITH EXTENDED ARABIC-" + + "INDIC DIGIT FOUR ABOVEARABIC LETTER SEEN WITH INVERTED VARABIC LETTER KA" + + "F WITH TWO DOTS ABOVETHAANA LETTER HAATHAANA LETTER SHAVIYANITHAANA LETT" + + "ER NOONUTHAANA LETTER RAATHAANA LETTER BAATHAANA LETTER LHAVIYANITHAANA " + + "LETTER KAAFUTHAANA LETTER ALIFUTHAANA LETTER VAAVUTHAANA LETTER MEEMUTHA" + + "ANA LETTER FAAFUTHAANA LETTER DHAALUTHAANA LETTER THAATHAANA LETTER LAAM" + + "UTHAANA LETTER GAAFUTHAANA LETTER GNAVIYANITHAANA LETTER SEENUTHAANA LET" + + "TER DAVIYANITHAANA LETTER ZAVIYANITHAANA LETTER TAVIYANITHAANA LETTER YA" + + "ATHAANA LETTER PAVIYANITHAANA LETTER JAVIYANITHAANA LETTER CHAVIYANITHAA" + + "NA LETTER TTAATHAANA LETTER HHAATHAANA LETTER KHAATHAANA LETTER THAALUTH" + + "AANA LETTER ZAATHAANA LETTER SHEENUTHAANA LETTER SAADHUTHAANA LETTER DAA" + + "DHUTHAANA LETTER TOTHAANA LETTER ZOTHAANA LETTER AINUTHAANA LETTER GHAIN" + + "UTHAANA LETTER QAAFUTHAANA LETTER WAAVUTHAANA ABAFILITHAANA AABAAFILITHA" + + "ANA IBIFILITHAANA EEBEEFILITHAANA UBUFILITHAANA OOBOOFILITHAANA EBEFILIT" + + "HAANA EYBEYFILITHAANA OBOFILITHAANA OABOAFILITHAANA SUKUNTHAANA LETTER N" + + "AANKO DIGIT ZERONKO DIGIT ONENKO DIGIT TWONKO DIGIT THREENKO DIGIT FOURN" + + "KO DIGIT FIVENKO DIGIT SIXNKO DIGIT SEVENNKO DIGIT EIGHTNKO DIGIT NINENK" + + "O LETTER ANKO LETTER EENKO LETTER INKO LETTER ENKO LETTER UNKO LETTER OO" + + "NKO LETTER ONKO LETTER DAGBASINNANKO LETTER NNKO LETTER BANKO LETTER PAN" + + "KO LETTER TANKO LETTER JANKO LETTER CHANKO LETTER DANKO LETTER RANKO LET" + + "TER RRANKO LETTER SANKO LETTER GBANKO LETTER FANKO LETTER KANKO LETTER L" + + "ANKO LETTER NA WOLOSONKO LETTER MANKO LETTER NYANKO LETTER NANKO LETTER " + + "HANKO LETTER WANKO LETTER YANKO LETTER NYA WOLOSONKO LETTER JONA JANKO L" + + "ETTER JONA CHANKO LETTER JONA RANKO COMBINING SHORT HIGH TONENKO COMBINI" + + "NG SHORT LOW TONENKO COMBINING SHORT RISING TONENKO COMBINING LONG DESCE" + + "NDING TONENKO COMBINING LONG HIGH TONENKO COMBINING LONG LOW TONENKO COM" + + "BINING LONG RISING TONENKO COMBINING NASALIZATION MARKNKO COMBINING DOUB" + + "LE DOT ABOVENKO HIGH TONE APOSTROPHENKO LOW TONE APOSTROPHENKO SYMBOL OO" + + " DENNENNKO SYMBOL GBAKURUNENNKO COMMANKO EXCLAMATION MARKNKO LAJANYALANS" + + "AMARITAN LETTER ALAFSAMARITAN LETTER BITSAMARITAN LETTER GAMANSAMARITAN " + + "LETTER DALATSAMARITAN LETTER IYSAMARITAN LETTER BAASAMARITAN LETTER ZENS" + + "AMARITAN LETTER ITSAMARITAN LETTER TITSAMARITAN LETTER YUTSAMARITAN LETT" + + "ER KAAFSAMARITAN LETTER LABATSAMARITAN LETTER MIMSAMARITAN LETTER NUNSAM" + + "ARITAN LETTER SINGAATSAMARITAN LETTER INSAMARITAN LETTER FISAMARITAN LET" + + "TER TSAADIYSAMARITAN LETTER QUFSAMARITAN LETTER RISHSAMARITAN LETTER SHA" + + "NSAMARITAN LETTER TAAFSAMARITAN MARK INSAMARITAN MARK IN-ALAFSAMARITAN M" + + "ARK OCCLUSIONSAMARITAN MARK DAGESHSAMARITAN MODIFIER LETTER EPENTHETIC Y" + + "UTSAMARITAN MARK EPENTHETIC YUTSAMARITAN VOWEL SIGN LONG ESAMARITAN VOWE" + + "L SIGN ESAMARITAN VOWEL SIGN OVERLONG AASAMARITAN VOWEL SIGN LONG AASAMA") + ("" + + "RITAN VOWEL SIGN AASAMARITAN VOWEL SIGN OVERLONG ASAMARITAN VOWEL SIGN L" + + "ONG ASAMARITAN VOWEL SIGN ASAMARITAN MODIFIER LETTER SHORT ASAMARITAN VO" + + "WEL SIGN SHORT ASAMARITAN VOWEL SIGN LONG USAMARITAN VOWEL SIGN USAMARIT" + + "AN MODIFIER LETTER ISAMARITAN VOWEL SIGN LONG ISAMARITAN VOWEL SIGN ISAM" + + "ARITAN VOWEL SIGN OSAMARITAN VOWEL SIGN SUKUNSAMARITAN MARK NEQUDAASAMAR" + + "ITAN PUNCTUATION NEQUDAASAMARITAN PUNCTUATION AFSAAQSAMARITAN PUNCTUATIO" + + "N ANGEDSAMARITAN PUNCTUATION BAUSAMARITAN PUNCTUATION ATMAAUSAMARITAN PU" + + "NCTUATION SHIYYAALAASAMARITAN ABBREVIATION MARKSAMARITAN PUNCTUATION MEL" + + "ODIC QITSASAMARITAN PUNCTUATION ZIQAASAMARITAN PUNCTUATION QITSASAMARITA" + + "N PUNCTUATION ZAEFSAMARITAN PUNCTUATION TURUSAMARITAN PUNCTUATION ARKAAN" + + "USAMARITAN PUNCTUATION SOF MASHFAATSAMARITAN PUNCTUATION ANNAAUMANDAIC L" + + "ETTER HALQAMANDAIC LETTER ABMANDAIC LETTER AGMANDAIC LETTER ADMANDAIC LE" + + "TTER AHMANDAIC LETTER USHENNAMANDAIC LETTER AZMANDAIC LETTER ITMANDAIC L" + + "ETTER ATTMANDAIC LETTER AKSAMANDAIC LETTER AKMANDAIC LETTER ALMANDAIC LE" + + "TTER AMMANDAIC LETTER ANMANDAIC LETTER ASMANDAIC LETTER INMANDAIC LETTER" + + " APMANDAIC LETTER ASZMANDAIC LETTER AQMANDAIC LETTER ARMANDAIC LETTER AS" + + "HMANDAIC LETTER ATMANDAIC LETTER DUSHENNAMANDAIC LETTER KADMANDAIC LETTE" + + "R AINMANDAIC AFFRICATION MARKMANDAIC VOCALIZATION MARKMANDAIC GEMINATION" + + " MARKMANDAIC PUNCTUATIONARABIC LETTER BEH WITH SMALL V BELOWARABIC LETTE" + + "R BEH WITH HAMZA ABOVEARABIC LETTER JEEM WITH TWO DOTS ABOVEARABIC LETTE" + + "R TAH WITH TWO DOTS ABOVEARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS" + + " ABOVEARABIC LETTER QAF WITH DOT BELOWARABIC LETTER LAM WITH DOUBLE BARA" + + "RABIC LETTER MEEM WITH THREE DOTS ABOVEARABIC LETTER YEH WITH TWO DOTS B" + + "ELOW AND HAMZA ABOVEARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVEA" + + "RABIC LETTER REH WITH LOOPARABIC LETTER WAW WITH DOT WITHINARABIC LETTER" + + " ROHINGYA YEHARABIC LETTER LOW ALEFARABIC LETTER DAL WITH THREE DOTS BEL" + + "OWARABIC LETTER SAD WITH THREE DOTS BELOWARABIC LETTER GAF WITH INVERTED" + + " STROKEARABIC LETTER STRAIGHT WAWARABIC LETTER ZAIN WITH INVERTED V ABOV" + + "EARABIC LETTER AIN WITH THREE DOTS BELOWARABIC LETTER KAF WITH DOT BELOW" + + "ARABIC LETTER BEH WITH SMALL MEEM ABOVEARABIC LETTER PEH WITH SMALL MEEM" + + " ABOVEARABIC LETTER TEH WITH SMALL TEH ABOVEARABIC LETTER REH WITH SMALL" + + " NOON ABOVEARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVEARA" + + "BIC LETTER AFRICAN FEHARABIC LETTER AFRICAN QAFARABIC LETTER AFRICAN NOO" + + "NARABIC SMALL HIGH WORD AR-RUBARABIC SMALL HIGH SADARABIC SMALL HIGH AIN" + + "ARABIC SMALL HIGH QAFARABIC SMALL HIGH NOON WITH KASRAARABIC SMALL LOW N" + + "OON WITH KASRAARABIC SMALL HIGH WORD ATH-THALATHAARABIC SMALL HIGH WORD " + + "AS-SAJDAARABIC SMALL HIGH WORD AN-NISFARABIC SMALL HIGH WORD SAKTAARABIC" + + " SMALL HIGH WORD QIFARABIC SMALL HIGH WORD WAQFAARABIC SMALL HIGH FOOTNO" + + "TE MARKERARABIC SMALL HIGH SIGN SAFHAARABIC DISPUTED END OF AYAHARABIC T" + + "URNED DAMMA BELOWARABIC CURLY FATHAARABIC CURLY DAMMAARABIC CURLY KASRAA" + + "RABIC CURLY FATHATANARABIC CURLY DAMMATANARABIC CURLY KASRATANARABIC TON" + + "E ONE DOT ABOVEARABIC TONE TWO DOTS ABOVEARABIC TONE LOOP ABOVEARABIC TO" + + "NE ONE DOT BELOWARABIC TONE TWO DOTS BELOWARABIC TONE LOOP BELOWARABIC O" + + "PEN FATHATANARABIC OPEN DAMMATANARABIC OPEN KASRATANARABIC SMALL HIGH WA" + + "WARABIC FATHA WITH RINGARABIC FATHA WITH DOT ABOVEARABIC KASRA WITH DOT " + + "BELOWARABIC LEFT ARROWHEAD ABOVEARABIC RIGHT ARROWHEAD ABOVEARABIC LEFT " + + "ARROWHEAD BELOWARABIC RIGHT ARROWHEAD BELOWARABIC DOUBLE RIGHT ARROWHEAD" + + " ABOVEARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOTARABIC RIGHT ARROWHEAD" + + " ABOVE WITH DOTARABIC DAMMA WITH DOTARABIC MARK SIDEWAYS NOON GHUNNADEVA" + + "NAGARI SIGN INVERTED CANDRABINDUDEVANAGARI SIGN CANDRABINDUDEVANAGARI SI" + + "GN ANUSVARADEVANAGARI SIGN VISARGADEVANAGARI LETTER SHORT ADEVANAGARI LE" + + "TTER ADEVANAGARI LETTER AADEVANAGARI LETTER IDEVANAGARI LETTER IIDEVANAG" + + "ARI LETTER UDEVANAGARI LETTER UUDEVANAGARI LETTER VOCALIC RDEVANAGARI LE" + + "TTER VOCALIC LDEVANAGARI LETTER CANDRA EDEVANAGARI LETTER SHORT EDEVANAG" + + "ARI LETTER EDEVANAGARI LETTER AIDEVANAGARI LETTER CANDRA ODEVANAGARI LET" + + "TER SHORT ODEVANAGARI LETTER ODEVANAGARI LETTER AUDEVANAGARI LETTER KADE" + + "VANAGARI LETTER KHADEVANAGARI LETTER GADEVANAGARI LETTER GHADEVANAGARI L" + + "ETTER NGADEVANAGARI LETTER CADEVANAGARI LETTER CHADEVANAGARI LETTER JADE" + + "VANAGARI LETTER JHADEVANAGARI LETTER NYADEVANAGARI LETTER TTADEVANAGARI " + + "LETTER TTHADEVANAGARI LETTER DDADEVANAGARI LETTER DDHADEVANAGARI LETTER " + + "NNADEVANAGARI LETTER TADEVANAGARI LETTER THADEVANAGARI LETTER DADEVANAGA" + + "RI LETTER DHADEVANAGARI LETTER NADEVANAGARI LETTER NNNADEVANAGARI LETTER" + + " PADEVANAGARI LETTER PHADEVANAGARI LETTER BADEVANAGARI LETTER BHADEVANAG" + + "ARI LETTER MADEVANAGARI LETTER YADEVANAGARI LETTER RADEVANAGARI LETTER R") + ("" + + "RADEVANAGARI LETTER LADEVANAGARI LETTER LLADEVANAGARI LETTER LLLADEVANAG" + + "ARI LETTER VADEVANAGARI LETTER SHADEVANAGARI LETTER SSADEVANAGARI LETTER" + + " SADEVANAGARI LETTER HADEVANAGARI VOWEL SIGN OEDEVANAGARI VOWEL SIGN OOE" + + "DEVANAGARI SIGN NUKTADEVANAGARI SIGN AVAGRAHADEVANAGARI VOWEL SIGN AADEV" + + "ANAGARI VOWEL SIGN IDEVANAGARI VOWEL SIGN IIDEVANAGARI VOWEL SIGN UDEVAN" + + "AGARI VOWEL SIGN UUDEVANAGARI VOWEL SIGN VOCALIC RDEVANAGARI VOWEL SIGN " + + "VOCALIC RRDEVANAGARI VOWEL SIGN CANDRA EDEVANAGARI VOWEL SIGN SHORT EDEV" + + "ANAGARI VOWEL SIGN EDEVANAGARI VOWEL SIGN AIDEVANAGARI VOWEL SIGN CANDRA" + + " ODEVANAGARI VOWEL SIGN SHORT ODEVANAGARI VOWEL SIGN ODEVANAGARI VOWEL S" + + "IGN AUDEVANAGARI SIGN VIRAMADEVANAGARI VOWEL SIGN PRISHTHAMATRA EDEVANAG" + + "ARI VOWEL SIGN AWDEVANAGARI OMDEVANAGARI STRESS SIGN UDATTADEVANAGARI ST" + + "RESS SIGN ANUDATTADEVANAGARI GRAVE ACCENTDEVANAGARI ACUTE ACCENTDEVANAGA" + + "RI VOWEL SIGN CANDRA LONG EDEVANAGARI VOWEL SIGN UEDEVANAGARI VOWEL SIGN" + + " UUEDEVANAGARI LETTER QADEVANAGARI LETTER KHHADEVANAGARI LETTER GHHADEVA" + + "NAGARI LETTER ZADEVANAGARI LETTER DDDHADEVANAGARI LETTER RHADEVANAGARI L" + + "ETTER FADEVANAGARI LETTER YYADEVANAGARI LETTER VOCALIC RRDEVANAGARI LETT" + + "ER VOCALIC LLDEVANAGARI VOWEL SIGN VOCALIC LDEVANAGARI VOWEL SIGN VOCALI" + + "C LLDEVANAGARI DANDADEVANAGARI DOUBLE DANDADEVANAGARI DIGIT ZERODEVANAGA" + + "RI DIGIT ONEDEVANAGARI DIGIT TWODEVANAGARI DIGIT THREEDEVANAGARI DIGIT F" + + "OURDEVANAGARI DIGIT FIVEDEVANAGARI DIGIT SIXDEVANAGARI DIGIT SEVENDEVANA" + + "GARI DIGIT EIGHTDEVANAGARI DIGIT NINEDEVANAGARI ABBREVIATION SIGNDEVANAG" + + "ARI SIGN HIGH SPACING DOTDEVANAGARI LETTER CANDRA ADEVANAGARI LETTER OED" + + "EVANAGARI LETTER OOEDEVANAGARI LETTER AWDEVANAGARI LETTER UEDEVANAGARI L" + + "ETTER UUEDEVANAGARI LETTER MARWARI DDADEVANAGARI LETTER ZHADEVANAGARI LE" + + "TTER HEAVY YADEVANAGARI LETTER GGADEVANAGARI LETTER JJADEVANAGARI LETTER" + + " GLOTTAL STOPDEVANAGARI LETTER DDDADEVANAGARI LETTER BBABENGALI ANJIBENG" + + "ALI SIGN CANDRABINDUBENGALI SIGN ANUSVARABENGALI SIGN VISARGABENGALI LET" + + "TER ABENGALI LETTER AABENGALI LETTER IBENGALI LETTER IIBENGALI LETTER UB" + + "ENGALI LETTER UUBENGALI LETTER VOCALIC RBENGALI LETTER VOCALIC LBENGALI " + + "LETTER EBENGALI LETTER AIBENGALI LETTER OBENGALI LETTER AUBENGALI LETTER" + + " KABENGALI LETTER KHABENGALI LETTER GABENGALI LETTER GHABENGALI LETTER N" + + "GABENGALI LETTER CABENGALI LETTER CHABENGALI LETTER JABENGALI LETTER JHA" + + "BENGALI LETTER NYABENGALI LETTER TTABENGALI LETTER TTHABENGALI LETTER DD" + + "ABENGALI LETTER DDHABENGALI LETTER NNABENGALI LETTER TABENGALI LETTER TH" + + "ABENGALI LETTER DABENGALI LETTER DHABENGALI LETTER NABENGALI LETTER PABE" + + "NGALI LETTER PHABENGALI LETTER BABENGALI LETTER BHABENGALI LETTER MABENG" + + "ALI LETTER YABENGALI LETTER RABENGALI LETTER LABENGALI LETTER SHABENGALI" + + " LETTER SSABENGALI LETTER SABENGALI LETTER HABENGALI SIGN NUKTABENGALI S" + + "IGN AVAGRAHABENGALI VOWEL SIGN AABENGALI VOWEL SIGN IBENGALI VOWEL SIGN " + + "IIBENGALI VOWEL SIGN UBENGALI VOWEL SIGN UUBENGALI VOWEL SIGN VOCALIC RB" + + "ENGALI VOWEL SIGN VOCALIC RRBENGALI VOWEL SIGN EBENGALI VOWEL SIGN AIBEN" + + "GALI VOWEL SIGN OBENGALI VOWEL SIGN AUBENGALI SIGN VIRAMABENGALI LETTER " + + "KHANDA TABENGALI AU LENGTH MARKBENGALI LETTER RRABENGALI LETTER RHABENGA" + + "LI LETTER YYABENGALI LETTER VOCALIC RRBENGALI LETTER VOCALIC LLBENGALI V" + + "OWEL SIGN VOCALIC LBENGALI VOWEL SIGN VOCALIC LLBENGALI DIGIT ZEROBENGAL" + + "I DIGIT ONEBENGALI DIGIT TWOBENGALI DIGIT THREEBENGALI DIGIT FOURBENGALI" + + " DIGIT FIVEBENGALI DIGIT SIXBENGALI DIGIT SEVENBENGALI DIGIT EIGHTBENGAL" + + "I DIGIT NINEBENGALI LETTER RA WITH MIDDLE DIAGONALBENGALI LETTER RA WITH" + + " LOWER DIAGONALBENGALI RUPEE MARKBENGALI RUPEE SIGNBENGALI CURRENCY NUME" + + "RATOR ONEBENGALI CURRENCY NUMERATOR TWOBENGALI CURRENCY NUMERATOR THREEB" + + "ENGALI CURRENCY NUMERATOR FOURBENGALI CURRENCY NUMERATOR ONE LESS THAN T" + + "HE DENOMINATORBENGALI CURRENCY DENOMINATOR SIXTEENBENGALI ISSHARBENGALI " + + "GANDA MARKGURMUKHI SIGN ADAK BINDIGURMUKHI SIGN BINDIGURMUKHI SIGN VISAR" + + "GAGURMUKHI LETTER AGURMUKHI LETTER AAGURMUKHI LETTER IGURMUKHI LETTER II" + + "GURMUKHI LETTER UGURMUKHI LETTER UUGURMUKHI LETTER EEGURMUKHI LETTER AIG" + + "URMUKHI LETTER OOGURMUKHI LETTER AUGURMUKHI LETTER KAGURMUKHI LETTER KHA" + + "GURMUKHI LETTER GAGURMUKHI LETTER GHAGURMUKHI LETTER NGAGURMUKHI LETTER " + + "CAGURMUKHI LETTER CHAGURMUKHI LETTER JAGURMUKHI LETTER JHAGURMUKHI LETTE" + + "R NYAGURMUKHI LETTER TTAGURMUKHI LETTER TTHAGURMUKHI LETTER DDAGURMUKHI " + + "LETTER DDHAGURMUKHI LETTER NNAGURMUKHI LETTER TAGURMUKHI LETTER THAGURMU" + + "KHI LETTER DAGURMUKHI LETTER DHAGURMUKHI LETTER NAGURMUKHI LETTER PAGURM" + + "UKHI LETTER PHAGURMUKHI LETTER BAGURMUKHI LETTER BHAGURMUKHI LETTER MAGU" + + "RMUKHI LETTER YAGURMUKHI LETTER RAGURMUKHI LETTER LAGURMUKHI LETTER LLAG" + + "URMUKHI LETTER VAGURMUKHI LETTER SHAGURMUKHI LETTER SAGURMUKHI LETTER HA") + ("" + + "GURMUKHI SIGN NUKTAGURMUKHI VOWEL SIGN AAGURMUKHI VOWEL SIGN IGURMUKHI V" + + "OWEL SIGN IIGURMUKHI VOWEL SIGN UGURMUKHI VOWEL SIGN UUGURMUKHI VOWEL SI" + + "GN EEGURMUKHI VOWEL SIGN AIGURMUKHI VOWEL SIGN OOGURMUKHI VOWEL SIGN AUG" + + "URMUKHI SIGN VIRAMAGURMUKHI SIGN UDAATGURMUKHI LETTER KHHAGURMUKHI LETTE" + + "R GHHAGURMUKHI LETTER ZAGURMUKHI LETTER RRAGURMUKHI LETTER FAGURMUKHI DI" + + "GIT ZEROGURMUKHI DIGIT ONEGURMUKHI DIGIT TWOGURMUKHI DIGIT THREEGURMUKHI" + + " DIGIT FOURGURMUKHI DIGIT FIVEGURMUKHI DIGIT SIXGURMUKHI DIGIT SEVENGURM" + + "UKHI DIGIT EIGHTGURMUKHI DIGIT NINEGURMUKHI TIPPIGURMUKHI ADDAKGURMUKHI " + + "IRIGURMUKHI URAGURMUKHI EK ONKARGURMUKHI SIGN YAKASHGUJARATI SIGN CANDRA" + + "BINDUGUJARATI SIGN ANUSVARAGUJARATI SIGN VISARGAGUJARATI LETTER AGUJARAT" + + "I LETTER AAGUJARATI LETTER IGUJARATI LETTER IIGUJARATI LETTER UGUJARATI " + + "LETTER UUGUJARATI LETTER VOCALIC RGUJARATI LETTER VOCALIC LGUJARATI VOWE" + + "L CANDRA EGUJARATI LETTER EGUJARATI LETTER AIGUJARATI VOWEL CANDRA OGUJA" + + "RATI LETTER OGUJARATI LETTER AUGUJARATI LETTER KAGUJARATI LETTER KHAGUJA" + + "RATI LETTER GAGUJARATI LETTER GHAGUJARATI LETTER NGAGUJARATI LETTER CAGU" + + "JARATI LETTER CHAGUJARATI LETTER JAGUJARATI LETTER JHAGUJARATI LETTER NY" + + "AGUJARATI LETTER TTAGUJARATI LETTER TTHAGUJARATI LETTER DDAGUJARATI LETT" + + "ER DDHAGUJARATI LETTER NNAGUJARATI LETTER TAGUJARATI LETTER THAGUJARATI " + + "LETTER DAGUJARATI LETTER DHAGUJARATI LETTER NAGUJARATI LETTER PAGUJARATI" + + " LETTER PHAGUJARATI LETTER BAGUJARATI LETTER BHAGUJARATI LETTER MAGUJARA" + + "TI LETTER YAGUJARATI LETTER RAGUJARATI LETTER LAGUJARATI LETTER LLAGUJAR" + + "ATI LETTER VAGUJARATI LETTER SHAGUJARATI LETTER SSAGUJARATI LETTER SAGUJ" + + "ARATI LETTER HAGUJARATI SIGN NUKTAGUJARATI SIGN AVAGRAHAGUJARATI VOWEL S" + + "IGN AAGUJARATI VOWEL SIGN IGUJARATI VOWEL SIGN IIGUJARATI VOWEL SIGN UGU" + + "JARATI VOWEL SIGN UUGUJARATI VOWEL SIGN VOCALIC RGUJARATI VOWEL SIGN VOC" + + "ALIC RRGUJARATI VOWEL SIGN CANDRA EGUJARATI VOWEL SIGN EGUJARATI VOWEL S" + + "IGN AIGUJARATI VOWEL SIGN CANDRA OGUJARATI VOWEL SIGN OGUJARATI VOWEL SI" + + "GN AUGUJARATI SIGN VIRAMAGUJARATI OMGUJARATI LETTER VOCALIC RRGUJARATI L" + + "ETTER VOCALIC LLGUJARATI VOWEL SIGN VOCALIC LGUJARATI VOWEL SIGN VOCALIC" + + " LLGUJARATI DIGIT ZEROGUJARATI DIGIT ONEGUJARATI DIGIT TWOGUJARATI DIGIT" + + " THREEGUJARATI DIGIT FOURGUJARATI DIGIT FIVEGUJARATI DIGIT SIXGUJARATI D" + + "IGIT SEVENGUJARATI DIGIT EIGHTGUJARATI DIGIT NINEGUJARATI ABBREVIATION S" + + "IGNGUJARATI RUPEE SIGNGUJARATI LETTER ZHAORIYA SIGN CANDRABINDUORIYA SIG" + + "N ANUSVARAORIYA SIGN VISARGAORIYA LETTER AORIYA LETTER AAORIYA LETTER IO" + + "RIYA LETTER IIORIYA LETTER UORIYA LETTER UUORIYA LETTER VOCALIC RORIYA L" + + "ETTER VOCALIC LORIYA LETTER EORIYA LETTER AIORIYA LETTER OORIYA LETTER A" + + "UORIYA LETTER KAORIYA LETTER KHAORIYA LETTER GAORIYA LETTER GHAORIYA LET" + + "TER NGAORIYA LETTER CAORIYA LETTER CHAORIYA LETTER JAORIYA LETTER JHAORI" + + "YA LETTER NYAORIYA LETTER TTAORIYA LETTER TTHAORIYA LETTER DDAORIYA LETT" + + "ER DDHAORIYA LETTER NNAORIYA LETTER TAORIYA LETTER THAORIYA LETTER DAORI" + + "YA LETTER DHAORIYA LETTER NAORIYA LETTER PAORIYA LETTER PHAORIYA LETTER " + + "BAORIYA LETTER BHAORIYA LETTER MAORIYA LETTER YAORIYA LETTER RAORIYA LET" + + "TER LAORIYA LETTER LLAORIYA LETTER VAORIYA LETTER SHAORIYA LETTER SSAORI" + + "YA LETTER SAORIYA LETTER HAORIYA SIGN NUKTAORIYA SIGN AVAGRAHAORIYA VOWE" + + "L SIGN AAORIYA VOWEL SIGN IORIYA VOWEL SIGN IIORIYA VOWEL SIGN UORIYA VO" + + "WEL SIGN UUORIYA VOWEL SIGN VOCALIC RORIYA VOWEL SIGN VOCALIC RRORIYA VO" + + "WEL SIGN EORIYA VOWEL SIGN AIORIYA VOWEL SIGN OORIYA VOWEL SIGN AUORIYA " + + "SIGN VIRAMAORIYA AI LENGTH MARKORIYA AU LENGTH MARKORIYA LETTER RRAORIYA" + + " LETTER RHAORIYA LETTER YYAORIYA LETTER VOCALIC RRORIYA LETTER VOCALIC L" + + "LORIYA VOWEL SIGN VOCALIC LORIYA VOWEL SIGN VOCALIC LLORIYA DIGIT ZEROOR" + + "IYA DIGIT ONEORIYA DIGIT TWOORIYA DIGIT THREEORIYA DIGIT FOURORIYA DIGIT" + + " FIVEORIYA DIGIT SIXORIYA DIGIT SEVENORIYA DIGIT EIGHTORIYA DIGIT NINEOR" + + "IYA ISSHARORIYA LETTER WAORIYA FRACTION ONE QUARTERORIYA FRACTION ONE HA" + + "LFORIYA FRACTION THREE QUARTERSORIYA FRACTION ONE SIXTEENTHORIYA FRACTIO" + + "N ONE EIGHTHORIYA FRACTION THREE SIXTEENTHSTAMIL SIGN ANUSVARATAMIL SIGN" + + " VISARGATAMIL LETTER ATAMIL LETTER AATAMIL LETTER ITAMIL LETTER IITAMIL " + + "LETTER UTAMIL LETTER UUTAMIL LETTER ETAMIL LETTER EETAMIL LETTER AITAMIL" + + " LETTER OTAMIL LETTER OOTAMIL LETTER AUTAMIL LETTER KATAMIL LETTER NGATA" + + "MIL LETTER CATAMIL LETTER JATAMIL LETTER NYATAMIL LETTER TTATAMIL LETTER" + + " NNATAMIL LETTER TATAMIL LETTER NATAMIL LETTER NNNATAMIL LETTER PATAMIL " + + "LETTER MATAMIL LETTER YATAMIL LETTER RATAMIL LETTER RRATAMIL LETTER LATA" + + "MIL LETTER LLATAMIL LETTER LLLATAMIL LETTER VATAMIL LETTER SHATAMIL LETT" + + "ER SSATAMIL LETTER SATAMIL LETTER HATAMIL VOWEL SIGN AATAMIL VOWEL SIGN " + + "ITAMIL VOWEL SIGN IITAMIL VOWEL SIGN UTAMIL VOWEL SIGN UUTAMIL VOWEL SIG") + ("" + + "N ETAMIL VOWEL SIGN EETAMIL VOWEL SIGN AITAMIL VOWEL SIGN OTAMIL VOWEL S" + + "IGN OOTAMIL VOWEL SIGN AUTAMIL SIGN VIRAMATAMIL OMTAMIL AU LENGTH MARKTA" + + "MIL DIGIT ZEROTAMIL DIGIT ONETAMIL DIGIT TWOTAMIL DIGIT THREETAMIL DIGIT" + + " FOURTAMIL DIGIT FIVETAMIL DIGIT SIXTAMIL DIGIT SEVENTAMIL DIGIT EIGHTTA" + + "MIL DIGIT NINETAMIL NUMBER TENTAMIL NUMBER ONE HUNDREDTAMIL NUMBER ONE T" + + "HOUSANDTAMIL DAY SIGNTAMIL MONTH SIGNTAMIL YEAR SIGNTAMIL DEBIT SIGNTAMI" + + "L CREDIT SIGNTAMIL AS ABOVE SIGNTAMIL RUPEE SIGNTAMIL NUMBER SIGNTELUGU " + + "SIGN COMBINING CANDRABINDU ABOVETELUGU SIGN CANDRABINDUTELUGU SIGN ANUSV" + + "ARATELUGU SIGN VISARGATELUGU LETTER ATELUGU LETTER AATELUGU LETTER ITELU" + + "GU LETTER IITELUGU LETTER UTELUGU LETTER UUTELUGU LETTER VOCALIC RTELUGU" + + " LETTER VOCALIC LTELUGU LETTER ETELUGU LETTER EETELUGU LETTER AITELUGU L" + + "ETTER OTELUGU LETTER OOTELUGU LETTER AUTELUGU LETTER KATELUGU LETTER KHA" + + "TELUGU LETTER GATELUGU LETTER GHATELUGU LETTER NGATELUGU LETTER CATELUGU" + + " LETTER CHATELUGU LETTER JATELUGU LETTER JHATELUGU LETTER NYATELUGU LETT" + + "ER TTATELUGU LETTER TTHATELUGU LETTER DDATELUGU LETTER DDHATELUGU LETTER" + + " NNATELUGU LETTER TATELUGU LETTER THATELUGU LETTER DATELUGU LETTER DHATE" + + "LUGU LETTER NATELUGU LETTER PATELUGU LETTER PHATELUGU LETTER BATELUGU LE" + + "TTER BHATELUGU LETTER MATELUGU LETTER YATELUGU LETTER RATELUGU LETTER RR" + + "ATELUGU LETTER LATELUGU LETTER LLATELUGU LETTER LLLATELUGU LETTER VATELU" + + "GU LETTER SHATELUGU LETTER SSATELUGU LETTER SATELUGU LETTER HATELUGU SIG" + + "N AVAGRAHATELUGU VOWEL SIGN AATELUGU VOWEL SIGN ITELUGU VOWEL SIGN IITEL" + + "UGU VOWEL SIGN UTELUGU VOWEL SIGN UUTELUGU VOWEL SIGN VOCALIC RTELUGU VO" + + "WEL SIGN VOCALIC RRTELUGU VOWEL SIGN ETELUGU VOWEL SIGN EETELUGU VOWEL S" + + "IGN AITELUGU VOWEL SIGN OTELUGU VOWEL SIGN OOTELUGU VOWEL SIGN AUTELUGU " + + "SIGN VIRAMATELUGU LENGTH MARKTELUGU AI LENGTH MARKTELUGU LETTER TSATELUG" + + "U LETTER DZATELUGU LETTER RRRATELUGU LETTER VOCALIC RRTELUGU LETTER VOCA" + + "LIC LLTELUGU VOWEL SIGN VOCALIC LTELUGU VOWEL SIGN VOCALIC LLTELUGU DIGI" + + "T ZEROTELUGU DIGIT ONETELUGU DIGIT TWOTELUGU DIGIT THREETELUGU DIGIT FOU" + + "RTELUGU DIGIT FIVETELUGU DIGIT SIXTELUGU DIGIT SEVENTELUGU DIGIT EIGHTTE" + + "LUGU DIGIT NINETELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOURTELUGU F" + + "RACTION DIGIT ONE FOR ODD POWERS OF FOURTELUGU FRACTION DIGIT TWO FOR OD" + + "D POWERS OF FOURTELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOURTELUGU" + + " FRACTION DIGIT ONE FOR EVEN POWERS OF FOURTELUGU FRACTION DIGIT TWO FOR" + + " EVEN POWERS OF FOURTELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOURT" + + "ELUGU SIGN TUUMUKANNADA SIGN SPACING CANDRABINDUKANNADA SIGN CANDRABINDU" + + "KANNADA SIGN ANUSVARAKANNADA SIGN VISARGAKANNADA LETTER AKANNADA LETTER " + + "AAKANNADA LETTER IKANNADA LETTER IIKANNADA LETTER UKANNADA LETTER UUKANN" + + "ADA LETTER VOCALIC RKANNADA LETTER VOCALIC LKANNADA LETTER EKANNADA LETT" + + "ER EEKANNADA LETTER AIKANNADA LETTER OKANNADA LETTER OOKANNADA LETTER AU" + + "KANNADA LETTER KAKANNADA LETTER KHAKANNADA LETTER GAKANNADA LETTER GHAKA" + + "NNADA LETTER NGAKANNADA LETTER CAKANNADA LETTER CHAKANNADA LETTER JAKANN" + + "ADA LETTER JHAKANNADA LETTER NYAKANNADA LETTER TTAKANNADA LETTER TTHAKAN" + + "NADA LETTER DDAKANNADA LETTER DDHAKANNADA LETTER NNAKANNADA LETTER TAKAN" + + "NADA LETTER THAKANNADA LETTER DAKANNADA LETTER DHAKANNADA LETTER NAKANNA" + + "DA LETTER PAKANNADA LETTER PHAKANNADA LETTER BAKANNADA LETTER BHAKANNADA" + + " LETTER MAKANNADA LETTER YAKANNADA LETTER RAKANNADA LETTER RRAKANNADA LE" + + "TTER LAKANNADA LETTER LLAKANNADA LETTER VAKANNADA LETTER SHAKANNADA LETT" + + "ER SSAKANNADA LETTER SAKANNADA LETTER HAKANNADA SIGN NUKTAKANNADA SIGN A" + + "VAGRAHAKANNADA VOWEL SIGN AAKANNADA VOWEL SIGN IKANNADA VOWEL SIGN IIKAN" + + "NADA VOWEL SIGN UKANNADA VOWEL SIGN UUKANNADA VOWEL SIGN VOCALIC RKANNAD" + + "A VOWEL SIGN VOCALIC RRKANNADA VOWEL SIGN EKANNADA VOWEL SIGN EEKANNADA " + + "VOWEL SIGN AIKANNADA VOWEL SIGN OKANNADA VOWEL SIGN OOKANNADA VOWEL SIGN" + + " AUKANNADA SIGN VIRAMAKANNADA LENGTH MARKKANNADA AI LENGTH MARKKANNADA L" + + "ETTER FAKANNADA LETTER VOCALIC RRKANNADA LETTER VOCALIC LLKANNADA VOWEL " + + "SIGN VOCALIC LKANNADA VOWEL SIGN VOCALIC LLKANNADA DIGIT ZEROKANNADA DIG" + + "IT ONEKANNADA DIGIT TWOKANNADA DIGIT THREEKANNADA DIGIT FOURKANNADA DIGI" + + "T FIVEKANNADA DIGIT SIXKANNADA DIGIT SEVENKANNADA DIGIT EIGHTKANNADA DIG" + + "IT NINEKANNADA SIGN JIHVAMULIYAKANNADA SIGN UPADHMANIYAMALAYALAM SIGN CA" + + "NDRABINDUMALAYALAM SIGN ANUSVARAMALAYALAM SIGN VISARGAMALAYALAM LETTER A" + + "MALAYALAM LETTER AAMALAYALAM LETTER IMALAYALAM LETTER IIMALAYALAM LETTER" + + " UMALAYALAM LETTER UUMALAYALAM LETTER VOCALIC RMALAYALAM LETTER VOCALIC " + + "LMALAYALAM LETTER EMALAYALAM LETTER EEMALAYALAM LETTER AIMALAYALAM LETTE" + + "R OMALAYALAM LETTER OOMALAYALAM LETTER AUMALAYALAM LETTER KAMALAYALAM LE" + + "TTER KHAMALAYALAM LETTER GAMALAYALAM LETTER GHAMALAYALAM LETTER NGAMALAY") + ("" + + "ALAM LETTER CAMALAYALAM LETTER CHAMALAYALAM LETTER JAMALAYALAM LETTER JH" + + "AMALAYALAM LETTER NYAMALAYALAM LETTER TTAMALAYALAM LETTER TTHAMALAYALAM " + + "LETTER DDAMALAYALAM LETTER DDHAMALAYALAM LETTER NNAMALAYALAM LETTER TAMA" + + "LAYALAM LETTER THAMALAYALAM LETTER DAMALAYALAM LETTER DHAMALAYALAM LETTE" + + "R NAMALAYALAM LETTER NNNAMALAYALAM LETTER PAMALAYALAM LETTER PHAMALAYALA" + + "M LETTER BAMALAYALAM LETTER BHAMALAYALAM LETTER MAMALAYALAM LETTER YAMAL" + + "AYALAM LETTER RAMALAYALAM LETTER RRAMALAYALAM LETTER LAMALAYALAM LETTER " + + "LLAMALAYALAM LETTER LLLAMALAYALAM LETTER VAMALAYALAM LETTER SHAMALAYALAM" + + " LETTER SSAMALAYALAM LETTER SAMALAYALAM LETTER HAMALAYALAM LETTER TTTAMA" + + "LAYALAM SIGN AVAGRAHAMALAYALAM VOWEL SIGN AAMALAYALAM VOWEL SIGN IMALAYA" + + "LAM VOWEL SIGN IIMALAYALAM VOWEL SIGN UMALAYALAM VOWEL SIGN UUMALAYALAM " + + "VOWEL SIGN VOCALIC RMALAYALAM VOWEL SIGN VOCALIC RRMALAYALAM VOWEL SIGN " + + "EMALAYALAM VOWEL SIGN EEMALAYALAM VOWEL SIGN AIMALAYALAM VOWEL SIGN OMAL" + + "AYALAM VOWEL SIGN OOMALAYALAM VOWEL SIGN AUMALAYALAM SIGN VIRAMAMALAYALA" + + "M LETTER DOT REPHMALAYALAM SIGN PARAMALAYALAM LETTER CHILLU MMALAYALAM L" + + "ETTER CHILLU YMALAYALAM LETTER CHILLU LLLMALAYALAM AU LENGTH MARKMALAYAL" + + "AM FRACTION ONE ONE-HUNDRED-AND-SIXTIETHMALAYALAM FRACTION ONE FORTIETHM" + + "ALAYALAM FRACTION THREE EIGHTIETHSMALAYALAM FRACTION ONE TWENTIETHMALAYA" + + "LAM FRACTION ONE TENTHMALAYALAM FRACTION THREE TWENTIETHSMALAYALAM FRACT" + + "ION ONE FIFTHMALAYALAM LETTER ARCHAIC IIMALAYALAM LETTER VOCALIC RRMALAY" + + "ALAM LETTER VOCALIC LLMALAYALAM VOWEL SIGN VOCALIC LMALAYALAM VOWEL SIGN" + + " VOCALIC LLMALAYALAM DIGIT ZEROMALAYALAM DIGIT ONEMALAYALAM DIGIT TWOMAL" + + "AYALAM DIGIT THREEMALAYALAM DIGIT FOURMALAYALAM DIGIT FIVEMALAYALAM DIGI" + + "T SIXMALAYALAM DIGIT SEVENMALAYALAM DIGIT EIGHTMALAYALAM DIGIT NINEMALAY" + + "ALAM NUMBER TENMALAYALAM NUMBER ONE HUNDREDMALAYALAM NUMBER ONE THOUSAND" + + "MALAYALAM FRACTION ONE QUARTERMALAYALAM FRACTION ONE HALFMALAYALAM FRACT" + + "ION THREE QUARTERSMALAYALAM FRACTION ONE SIXTEENTHMALAYALAM FRACTION ONE" + + " EIGHTHMALAYALAM FRACTION THREE SIXTEENTHSMALAYALAM DATE MARKMALAYALAM L" + + "ETTER CHILLU NNMALAYALAM LETTER CHILLU NMALAYALAM LETTER CHILLU RRMALAYA" + + "LAM LETTER CHILLU LMALAYALAM LETTER CHILLU LLMALAYALAM LETTER CHILLU KSI" + + "NHALA SIGN ANUSVARAYASINHALA SIGN VISARGAYASINHALA LETTER AYANNASINHALA " + + "LETTER AAYANNASINHALA LETTER AEYANNASINHALA LETTER AEEYANNASINHALA LETTE" + + "R IYANNASINHALA LETTER IIYANNASINHALA LETTER UYANNASINHALA LETTER UUYANN" + + "ASINHALA LETTER IRUYANNASINHALA LETTER IRUUYANNASINHALA LETTER ILUYANNAS" + + "INHALA LETTER ILUUYANNASINHALA LETTER EYANNASINHALA LETTER EEYANNASINHAL" + + "A LETTER AIYANNASINHALA LETTER OYANNASINHALA LETTER OOYANNASINHALA LETTE" + + "R AUYANNASINHALA LETTER ALPAPRAANA KAYANNASINHALA LETTER MAHAAPRAANA KAY" + + "ANNASINHALA LETTER ALPAPRAANA GAYANNASINHALA LETTER MAHAAPRAANA GAYANNAS" + + "INHALA LETTER KANTAJA NAASIKYAYASINHALA LETTER SANYAKA GAYANNASINHALA LE" + + "TTER ALPAPRAANA CAYANNASINHALA LETTER MAHAAPRAANA CAYANNASINHALA LETTER " + + "ALPAPRAANA JAYANNASINHALA LETTER MAHAAPRAANA JAYANNASINHALA LETTER TAALU" + + "JA NAASIKYAYASINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYASINHALA LETTER S" + + "ANYAKA JAYANNASINHALA LETTER ALPAPRAANA TTAYANNASINHALA LETTER MAHAAPRAA" + + "NA TTAYANNASINHALA LETTER ALPAPRAANA DDAYANNASINHALA LETTER MAHAAPRAANA " + + "DDAYANNASINHALA LETTER MUURDHAJA NAYANNASINHALA LETTER SANYAKA DDAYANNAS" + + "INHALA LETTER ALPAPRAANA TAYANNASINHALA LETTER MAHAAPRAANA TAYANNASINHAL" + + "A LETTER ALPAPRAANA DAYANNASINHALA LETTER MAHAAPRAANA DAYANNASINHALA LET" + + "TER DANTAJA NAYANNASINHALA LETTER SANYAKA DAYANNASINHALA LETTER ALPAPRAA" + + "NA PAYANNASINHALA LETTER MAHAAPRAANA PAYANNASINHALA LETTER ALPAPRAANA BA" + + "YANNASINHALA LETTER MAHAAPRAANA BAYANNASINHALA LETTER MAYANNASINHALA LET" + + "TER AMBA BAYANNASINHALA LETTER YAYANNASINHALA LETTER RAYANNASINHALA LETT" + + "ER DANTAJA LAYANNASINHALA LETTER VAYANNASINHALA LETTER TAALUJA SAYANNASI" + + "NHALA LETTER MUURDHAJA SAYANNASINHALA LETTER DANTAJA SAYANNASINHALA LETT" + + "ER HAYANNASINHALA LETTER MUURDHAJA LAYANNASINHALA LETTER FAYANNASINHALA " + + "SIGN AL-LAKUNASINHALA VOWEL SIGN AELA-PILLASINHALA VOWEL SIGN KETTI AEDA" + + "-PILLASINHALA VOWEL SIGN DIGA AEDA-PILLASINHALA VOWEL SIGN KETTI IS-PILL" + + "ASINHALA VOWEL SIGN DIGA IS-PILLASINHALA VOWEL SIGN KETTI PAA-PILLASINHA" + + "LA VOWEL SIGN DIGA PAA-PILLASINHALA VOWEL SIGN GAETTA-PILLASINHALA VOWEL" + + " SIGN KOMBUVASINHALA VOWEL SIGN DIGA KOMBUVASINHALA VOWEL SIGN KOMBU DEK" + + "ASINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLASINHALA VOWEL SIGN KOMBUVA HAA" + + " DIGA AELA-PILLASINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTASINHALA VOWEL " + + "SIGN GAYANUKITTASINHALA LITH DIGIT ZEROSINHALA LITH DIGIT ONESINHALA LIT" + + "H DIGIT TWOSINHALA LITH DIGIT THREESINHALA LITH DIGIT FOURSINHALA LITH D" + + "IGIT FIVESINHALA LITH DIGIT SIXSINHALA LITH DIGIT SEVENSINHALA LITH DIGI") + ("" + + "T EIGHTSINHALA LITH DIGIT NINESINHALA VOWEL SIGN DIGA GAETTA-PILLASINHAL" + + "A VOWEL SIGN DIGA GAYANUKITTASINHALA PUNCTUATION KUNDDALIYATHAI CHARACTE" + + "R KO KAITHAI CHARACTER KHO KHAITHAI CHARACTER KHO KHUATTHAI CHARACTER KH" + + "O KHWAITHAI CHARACTER KHO KHONTHAI CHARACTER KHO RAKHANGTHAI CHARACTER N" + + "GO NGUTHAI CHARACTER CHO CHANTHAI CHARACTER CHO CHINGTHAI CHARACTER CHO " + + "CHANGTHAI CHARACTER SO SOTHAI CHARACTER CHO CHOETHAI CHARACTER YO YINGTH" + + "AI CHARACTER DO CHADATHAI CHARACTER TO PATAKTHAI CHARACTER THO THANTHAI " + + "CHARACTER THO NANGMONTHOTHAI CHARACTER THO PHUTHAOTHAI CHARACTER NO NENT" + + "HAI CHARACTER DO DEKTHAI CHARACTER TO TAOTHAI CHARACTER THO THUNGTHAI CH" + + "ARACTER THO THAHANTHAI CHARACTER THO THONGTHAI CHARACTER NO NUTHAI CHARA" + + "CTER BO BAIMAITHAI CHARACTER PO PLATHAI CHARACTER PHO PHUNGTHAI CHARACTE" + + "R FO FATHAI CHARACTER PHO PHANTHAI CHARACTER FO FANTHAI CHARACTER PHO SA" + + "MPHAOTHAI CHARACTER MO MATHAI CHARACTER YO YAKTHAI CHARACTER RO RUATHAI " + + "CHARACTER RUTHAI CHARACTER LO LINGTHAI CHARACTER LUTHAI CHARACTER WO WAE" + + "NTHAI CHARACTER SO SALATHAI CHARACTER SO RUSITHAI CHARACTER SO SUATHAI C" + + "HARACTER HO HIPTHAI CHARACTER LO CHULATHAI CHARACTER O ANGTHAI CHARACTER" + + " HO NOKHUKTHAI CHARACTER PAIYANNOITHAI CHARACTER SARA ATHAI CHARACTER MA" + + "I HAN-AKATTHAI CHARACTER SARA AATHAI CHARACTER SARA AMTHAI CHARACTER SAR" + + "A ITHAI CHARACTER SARA IITHAI CHARACTER SARA UETHAI CHARACTER SARA UEETH" + + "AI CHARACTER SARA UTHAI CHARACTER SARA UUTHAI CHARACTER PHINTHUTHAI CURR" + + "ENCY SYMBOL BAHTTHAI CHARACTER SARA ETHAI CHARACTER SARA AETHAI CHARACTE" + + "R SARA OTHAI CHARACTER SARA AI MAIMUANTHAI CHARACTER SARA AI MAIMALAITHA" + + "I CHARACTER LAKKHANGYAOTHAI CHARACTER MAIYAMOKTHAI CHARACTER MAITAIKHUTH" + + "AI CHARACTER MAI EKTHAI CHARACTER MAI THOTHAI CHARACTER MAI TRITHAI CHAR" + + "ACTER MAI CHATTAWATHAI CHARACTER THANTHAKHATTHAI CHARACTER NIKHAHITTHAI " + + "CHARACTER YAMAKKANTHAI CHARACTER FONGMANTHAI DIGIT ZEROTHAI DIGIT ONETHA" + + "I DIGIT TWOTHAI DIGIT THREETHAI DIGIT FOURTHAI DIGIT FIVETHAI DIGIT SIXT" + + "HAI DIGIT SEVENTHAI DIGIT EIGHTTHAI DIGIT NINETHAI CHARACTER ANGKHANKHUT" + + "HAI CHARACTER KHOMUTLAO LETTER KOLAO LETTER KHO SUNGLAO LETTER KHO TAMLA" + + "O LETTER NGOLAO LETTER COLAO LETTER SO TAMLAO LETTER NYOLAO LETTER DOLAO" + + " LETTER TOLAO LETTER THO SUNGLAO LETTER THO TAMLAO LETTER NOLAO LETTER B" + + "OLAO LETTER POLAO LETTER PHO SUNGLAO LETTER FO TAMLAO LETTER PHO TAMLAO " + + "LETTER FO SUNGLAO LETTER MOLAO LETTER YOLAO LETTER LO LINGLAO LETTER LO " + + "LOOTLAO LETTER WOLAO LETTER SO SUNGLAO LETTER HO SUNGLAO LETTER OLAO LET" + + "TER HO TAMLAO ELLIPSISLAO VOWEL SIGN ALAO VOWEL SIGN MAI KANLAO VOWEL SI" + + "GN AALAO VOWEL SIGN AMLAO VOWEL SIGN ILAO VOWEL SIGN IILAO VOWEL SIGN YL" + + "AO VOWEL SIGN YYLAO VOWEL SIGN ULAO VOWEL SIGN UULAO VOWEL SIGN MAI KONL" + + "AO SEMIVOWEL SIGN LOLAO SEMIVOWEL SIGN NYOLAO VOWEL SIGN ELAO VOWEL SIGN" + + " EILAO VOWEL SIGN OLAO VOWEL SIGN AYLAO VOWEL SIGN AILAO KO LALAO TONE M" + + "AI EKLAO TONE MAI THOLAO TONE MAI TILAO TONE MAI CATAWALAO CANCELLATION " + + "MARKLAO NIGGAHITALAO DIGIT ZEROLAO DIGIT ONELAO DIGIT TWOLAO DIGIT THREE" + + "LAO DIGIT FOURLAO DIGIT FIVELAO DIGIT SIXLAO DIGIT SEVENLAO DIGIT EIGHTL" + + "AO DIGIT NINELAO HO NOLAO HO MOLAO LETTER KHMU GOLAO LETTER KHMU NYOTIBE" + + "TAN SYLLABLE OMTIBETAN MARK GTER YIG MGO TRUNCATED ATIBETAN MARK GTER YI" + + "G MGO -UM RNAM BCAD MATIBETAN MARK GTER YIG MGO -UM GTER TSHEG MATIBETAN" + + " MARK INITIAL YIG MGO MDUN MATIBETAN MARK CLOSING YIG MGO SGAB MATIBETAN" + + " MARK CARET YIG MGO PHUR SHAD MATIBETAN MARK YIG MGO TSHEG SHAD MATIBETA" + + "N MARK SBRUL SHADTIBETAN MARK BSKUR YIG MGOTIBETAN MARK BKA- SHOG YIG MG" + + "OTIBETAN MARK INTERSYLLABIC TSHEGTIBETAN MARK DELIMITER TSHEG BSTARTIBET" + + "AN MARK SHADTIBETAN MARK NYIS SHADTIBETAN MARK TSHEG SHADTIBETAN MARK NY" + + "IS TSHEG SHADTIBETAN MARK RIN CHEN SPUNGS SHADTIBETAN MARK RGYA GRAM SHA" + + "DTIBETAN MARK CARET -DZUD RTAGS ME LONG CANTIBETAN MARK GTER TSHEGTIBETA" + + "N LOGOTYPE SIGN CHAD RTAGSTIBETAN LOGOTYPE SIGN LHAG RTAGSTIBETAN ASTROL" + + "OGICAL SIGN SGRA GCAN -CHAR RTAGSTIBETAN ASTROLOGICAL SIGN -KHYUD PATIBE" + + "TAN ASTROLOGICAL SIGN SDONG TSHUGSTIBETAN SIGN RDEL DKAR GCIGTIBETAN SIG" + + "N RDEL DKAR GNYISTIBETAN SIGN RDEL DKAR GSUMTIBETAN SIGN RDEL NAG GCIGTI" + + "BETAN SIGN RDEL NAG GNYISTIBETAN SIGN RDEL DKAR RDEL NAGTIBETAN DIGIT ZE" + + "ROTIBETAN DIGIT ONETIBETAN DIGIT TWOTIBETAN DIGIT THREETIBETAN DIGIT FOU" + + "RTIBETAN DIGIT FIVETIBETAN DIGIT SIXTIBETAN DIGIT SEVENTIBETAN DIGIT EIG" + + "HTTIBETAN DIGIT NINETIBETAN DIGIT HALF ONETIBETAN DIGIT HALF TWOTIBETAN " + + "DIGIT HALF THREETIBETAN DIGIT HALF FOURTIBETAN DIGIT HALF FIVETIBETAN DI" + + "GIT HALF SIXTIBETAN DIGIT HALF SEVENTIBETAN DIGIT HALF EIGHTTIBETAN DIGI" + + "T HALF NINETIBETAN DIGIT HALF ZEROTIBETAN MARK BSDUS RTAGSTIBETAN MARK N" + + "GAS BZUNG NYI ZLATIBETAN MARK CARET -DZUD RTAGS BZHI MIG CANTIBETAN MARK") + ("" + + " NGAS BZUNG SGOR RTAGSTIBETAN MARK CHE MGOTIBETAN MARK TSA -PHRUTIBETAN " + + "MARK GUG RTAGS GYONTIBETAN MARK GUG RTAGS GYASTIBETAN MARK ANG KHANG GYO" + + "NTIBETAN MARK ANG KHANG GYASTIBETAN SIGN YAR TSHESTIBETAN SIGN MAR TSHES" + + "TIBETAN LETTER KATIBETAN LETTER KHATIBETAN LETTER GATIBETAN LETTER GHATI" + + "BETAN LETTER NGATIBETAN LETTER CATIBETAN LETTER CHATIBETAN LETTER JATIBE" + + "TAN LETTER NYATIBETAN LETTER TTATIBETAN LETTER TTHATIBETAN LETTER DDATIB" + + "ETAN LETTER DDHATIBETAN LETTER NNATIBETAN LETTER TATIBETAN LETTER THATIB" + + "ETAN LETTER DATIBETAN LETTER DHATIBETAN LETTER NATIBETAN LETTER PATIBETA" + + "N LETTER PHATIBETAN LETTER BATIBETAN LETTER BHATIBETAN LETTER MATIBETAN " + + "LETTER TSATIBETAN LETTER TSHATIBETAN LETTER DZATIBETAN LETTER DZHATIBETA" + + "N LETTER WATIBETAN LETTER ZHATIBETAN LETTER ZATIBETAN LETTER -ATIBETAN L" + + "ETTER YATIBETAN LETTER RATIBETAN LETTER LATIBETAN LETTER SHATIBETAN LETT" + + "ER SSATIBETAN LETTER SATIBETAN LETTER HATIBETAN LETTER ATIBETAN LETTER K" + + "SSATIBETAN LETTER FIXED-FORM RATIBETAN LETTER KKATIBETAN LETTER RRATIBET" + + "AN VOWEL SIGN AATIBETAN VOWEL SIGN ITIBETAN VOWEL SIGN IITIBETAN VOWEL S" + + "IGN UTIBETAN VOWEL SIGN UUTIBETAN VOWEL SIGN VOCALIC RTIBETAN VOWEL SIGN" + + " VOCALIC RRTIBETAN VOWEL SIGN VOCALIC LTIBETAN VOWEL SIGN VOCALIC LLTIBE" + + "TAN VOWEL SIGN ETIBETAN VOWEL SIGN EETIBETAN VOWEL SIGN OTIBETAN VOWEL S" + + "IGN OOTIBETAN SIGN RJES SU NGA ROTIBETAN SIGN RNAM BCADTIBETAN VOWEL SIG" + + "N REVERSED ITIBETAN VOWEL SIGN REVERSED IITIBETAN SIGN NYI ZLA NAA DATIB" + + "ETAN SIGN SNA LDANTIBETAN MARK HALANTATIBETAN MARK PALUTATIBETAN SIGN LC" + + "I RTAGSTIBETAN SIGN YANG RTAGSTIBETAN SIGN LCE TSA CANTIBETAN SIGN MCHU " + + "CANTIBETAN SIGN GRU CAN RGYINGSTIBETAN SIGN GRU MED RGYINGSTIBETAN SIGN " + + "INVERTED MCHU CANTIBETAN SUBJOINED SIGN LCE TSA CANTIBETAN SUBJOINED SIG" + + "N MCHU CANTIBETAN SUBJOINED SIGN INVERTED MCHU CANTIBETAN SUBJOINED LETT" + + "ER KATIBETAN SUBJOINED LETTER KHATIBETAN SUBJOINED LETTER GATIBETAN SUBJ" + + "OINED LETTER GHATIBETAN SUBJOINED LETTER NGATIBETAN SUBJOINED LETTER CAT" + + "IBETAN SUBJOINED LETTER CHATIBETAN SUBJOINED LETTER JATIBETAN SUBJOINED " + + "LETTER NYATIBETAN SUBJOINED LETTER TTATIBETAN SUBJOINED LETTER TTHATIBET" + + "AN SUBJOINED LETTER DDATIBETAN SUBJOINED LETTER DDHATIBETAN SUBJOINED LE" + + "TTER NNATIBETAN SUBJOINED LETTER TATIBETAN SUBJOINED LETTER THATIBETAN S" + + "UBJOINED LETTER DATIBETAN SUBJOINED LETTER DHATIBETAN SUBJOINED LETTER N" + + "ATIBETAN SUBJOINED LETTER PATIBETAN SUBJOINED LETTER PHATIBETAN SUBJOINE" + + "D LETTER BATIBETAN SUBJOINED LETTER BHATIBETAN SUBJOINED LETTER MATIBETA" + + "N SUBJOINED LETTER TSATIBETAN SUBJOINED LETTER TSHATIBETAN SUBJOINED LET" + + "TER DZATIBETAN SUBJOINED LETTER DZHATIBETAN SUBJOINED LETTER WATIBETAN S" + + "UBJOINED LETTER ZHATIBETAN SUBJOINED LETTER ZATIBETAN SUBJOINED LETTER -" + + "ATIBETAN SUBJOINED LETTER YATIBETAN SUBJOINED LETTER RATIBETAN SUBJOINED" + + " LETTER LATIBETAN SUBJOINED LETTER SHATIBETAN SUBJOINED LETTER SSATIBETA" + + "N SUBJOINED LETTER SATIBETAN SUBJOINED LETTER HATIBETAN SUBJOINED LETTER" + + " ATIBETAN SUBJOINED LETTER KSSATIBETAN SUBJOINED LETTER FIXED-FORM WATIB" + + "ETAN SUBJOINED LETTER FIXED-FORM YATIBETAN SUBJOINED LETTER FIXED-FORM R" + + "ATIBETAN KU RU KHATIBETAN KU RU KHA BZHI MIG CANTIBETAN CANTILLATION SIG" + + "N HEAVY BEATTIBETAN CANTILLATION SIGN LIGHT BEATTIBETAN CANTILLATION SIG" + + "N CANG TE-UTIBETAN CANTILLATION SIGN SBUB -CHALTIBETAN SYMBOL DRIL BUTIB" + + "ETAN SYMBOL RDO RJETIBETAN SYMBOL PADMA GDANTIBETAN SYMBOL RDO RJE RGYA " + + "GRAMTIBETAN SYMBOL PHUR PATIBETAN SYMBOL NOR BUTIBETAN SYMBOL NOR BU NYI" + + "S -KHYILTIBETAN SYMBOL NOR BU GSUM -KHYILTIBETAN SYMBOL NOR BU BZHI -KHY" + + "ILTIBETAN SIGN RDEL NAG RDEL DKARTIBETAN SIGN RDEL NAG GSUMTIBETAN MARK " + + "BSKA- SHOG GI MGO RGYANTIBETAN MARK MNYAM YIG GI MGO RGYANTIBETAN MARK N" + + "YIS TSHEGTIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MATIBETAN MARK CL" + + "OSING BRDA RNYING YIG MGO SGAB MARIGHT-FACING SVASTI SIGNLEFT-FACING SVA" + + "STI SIGNRIGHT-FACING SVASTI SIGN WITH DOTSLEFT-FACING SVASTI SIGN WITH D" + + "OTSTIBETAN MARK LEADING MCHAN RTAGSTIBETAN MARK TRAILING MCHAN RTAGSMYAN" + + "MAR LETTER KAMYANMAR LETTER KHAMYANMAR LETTER GAMYANMAR LETTER GHAMYANMA" + + "R LETTER NGAMYANMAR LETTER CAMYANMAR LETTER CHAMYANMAR LETTER JAMYANMAR " + + "LETTER JHAMYANMAR LETTER NYAMYANMAR LETTER NNYAMYANMAR LETTER TTAMYANMAR" + + " LETTER TTHAMYANMAR LETTER DDAMYANMAR LETTER DDHAMYANMAR LETTER NNAMYANM" + + "AR LETTER TAMYANMAR LETTER THAMYANMAR LETTER DAMYANMAR LETTER DHAMYANMAR" + + " LETTER NAMYANMAR LETTER PAMYANMAR LETTER PHAMYANMAR LETTER BAMYANMAR LE" + + "TTER BHAMYANMAR LETTER MAMYANMAR LETTER YAMYANMAR LETTER RAMYANMAR LETTE" + + "R LAMYANMAR LETTER WAMYANMAR LETTER SAMYANMAR LETTER HAMYANMAR LETTER LL" + + "AMYANMAR LETTER AMYANMAR LETTER SHAN AMYANMAR LETTER IMYANMAR LETTER IIM" + + "YANMAR LETTER UMYANMAR LETTER UUMYANMAR LETTER EMYANMAR LETTER MON EMYAN") + ("" + + "MAR LETTER OMYANMAR LETTER AUMYANMAR VOWEL SIGN TALL AAMYANMAR VOWEL SIG" + + "N AAMYANMAR VOWEL SIGN IMYANMAR VOWEL SIGN IIMYANMAR VOWEL SIGN UMYANMAR" + + " VOWEL SIGN UUMYANMAR VOWEL SIGN EMYANMAR VOWEL SIGN AIMYANMAR VOWEL SIG" + + "N MON IIMYANMAR VOWEL SIGN MON OMYANMAR VOWEL SIGN E ABOVEMYANMAR SIGN A" + + "NUSVARAMYANMAR SIGN DOT BELOWMYANMAR SIGN VISARGAMYANMAR SIGN VIRAMAMYAN" + + "MAR SIGN ASATMYANMAR CONSONANT SIGN MEDIAL YAMYANMAR CONSONANT SIGN MEDI" + + "AL RAMYANMAR CONSONANT SIGN MEDIAL WAMYANMAR CONSONANT SIGN MEDIAL HAMYA" + + "NMAR LETTER GREAT SAMYANMAR DIGIT ZEROMYANMAR DIGIT ONEMYANMAR DIGIT TWO" + + "MYANMAR DIGIT THREEMYANMAR DIGIT FOURMYANMAR DIGIT FIVEMYANMAR DIGIT SIX" + + "MYANMAR DIGIT SEVENMYANMAR DIGIT EIGHTMYANMAR DIGIT NINEMYANMAR SIGN LIT" + + "TLE SECTIONMYANMAR SIGN SECTIONMYANMAR SYMBOL LOCATIVEMYANMAR SYMBOL COM" + + "PLETEDMYANMAR SYMBOL AFOREMENTIONEDMYANMAR SYMBOL GENITIVEMYANMAR LETTER" + + " SHAMYANMAR LETTER SSAMYANMAR LETTER VOCALIC RMYANMAR LETTER VOCALIC RRM" + + "YANMAR LETTER VOCALIC LMYANMAR LETTER VOCALIC LLMYANMAR VOWEL SIGN VOCAL" + + "IC RMYANMAR VOWEL SIGN VOCALIC RRMYANMAR VOWEL SIGN VOCALIC LMYANMAR VOW" + + "EL SIGN VOCALIC LLMYANMAR LETTER MON NGAMYANMAR LETTER MON JHAMYANMAR LE" + + "TTER MON BBAMYANMAR LETTER MON BBEMYANMAR CONSONANT SIGN MON MEDIAL NAMY" + + "ANMAR CONSONANT SIGN MON MEDIAL MAMYANMAR CONSONANT SIGN MON MEDIAL LAMY" + + "ANMAR LETTER SGAW KAREN SHAMYANMAR VOWEL SIGN SGAW KAREN EUMYANMAR TONE " + + "MARK SGAW KAREN HATHIMYANMAR TONE MARK SGAW KAREN KE PHOMYANMAR LETTER W" + + "ESTERN PWO KAREN THAMYANMAR LETTER WESTERN PWO KAREN PWAMYANMAR VOWEL SI" + + "GN WESTERN PWO KAREN EUMYANMAR VOWEL SIGN WESTERN PWO KAREN UEMYANMAR SI" + + "GN WESTERN PWO KAREN TONE-1MYANMAR SIGN WESTERN PWO KAREN TONE-2MYANMAR " + + "SIGN WESTERN PWO KAREN TONE-3MYANMAR SIGN WESTERN PWO KAREN TONE-4MYANMA" + + "R SIGN WESTERN PWO KAREN TONE-5MYANMAR LETTER EASTERN PWO KAREN NNAMYANM" + + "AR LETTER EASTERN PWO KAREN YWAMYANMAR LETTER EASTERN PWO KAREN GHWAMYAN" + + "MAR VOWEL SIGN GEBA KAREN IMYANMAR VOWEL SIGN KAYAH OEMYANMAR VOWEL SIGN" + + " KAYAH UMYANMAR VOWEL SIGN KAYAH EEMYANMAR LETTER SHAN KAMYANMAR LETTER " + + "SHAN KHAMYANMAR LETTER SHAN GAMYANMAR LETTER SHAN CAMYANMAR LETTER SHAN " + + "ZAMYANMAR LETTER SHAN NYAMYANMAR LETTER SHAN DAMYANMAR LETTER SHAN NAMYA" + + "NMAR LETTER SHAN PHAMYANMAR LETTER SHAN FAMYANMAR LETTER SHAN BAMYANMAR " + + "LETTER SHAN THAMYANMAR LETTER SHAN HAMYANMAR CONSONANT SIGN SHAN MEDIAL " + + "WAMYANMAR VOWEL SIGN SHAN AAMYANMAR VOWEL SIGN SHAN EMYANMAR VOWEL SIGN " + + "SHAN E ABOVEMYANMAR VOWEL SIGN SHAN FINAL YMYANMAR SIGN SHAN TONE-2MYANM" + + "AR SIGN SHAN TONE-3MYANMAR SIGN SHAN TONE-5MYANMAR SIGN SHAN TONE-6MYANM" + + "AR SIGN SHAN COUNCIL TONE-2MYANMAR SIGN SHAN COUNCIL TONE-3MYANMAR SIGN " + + "SHAN COUNCIL EMPHATIC TONEMYANMAR LETTER RUMAI PALAUNG FAMYANMAR SIGN RU" + + "MAI PALAUNG TONE-5MYANMAR SHAN DIGIT ZEROMYANMAR SHAN DIGIT ONEMYANMAR S" + + "HAN DIGIT TWOMYANMAR SHAN DIGIT THREEMYANMAR SHAN DIGIT FOURMYANMAR SHAN" + + " DIGIT FIVEMYANMAR SHAN DIGIT SIXMYANMAR SHAN DIGIT SEVENMYANMAR SHAN DI" + + "GIT EIGHTMYANMAR SHAN DIGIT NINEMYANMAR SIGN KHAMTI TONE-1MYANMAR SIGN K" + + "HAMTI TONE-3MYANMAR VOWEL SIGN AITON AMYANMAR VOWEL SIGN AITON AIMYANMAR" + + " SYMBOL SHAN ONEMYANMAR SYMBOL SHAN EXCLAMATIONGEORGIAN CAPITAL LETTER A" + + "NGEORGIAN CAPITAL LETTER BANGEORGIAN CAPITAL LETTER GANGEORGIAN CAPITAL " + + "LETTER DONGEORGIAN CAPITAL LETTER ENGEORGIAN CAPITAL LETTER VINGEORGIAN " + + "CAPITAL LETTER ZENGEORGIAN CAPITAL LETTER TANGEORGIAN CAPITAL LETTER ING" + + "EORGIAN CAPITAL LETTER KANGEORGIAN CAPITAL LETTER LASGEORGIAN CAPITAL LE" + + "TTER MANGEORGIAN CAPITAL LETTER NARGEORGIAN CAPITAL LETTER ONGEORGIAN CA" + + "PITAL LETTER PARGEORGIAN CAPITAL LETTER ZHARGEORGIAN CAPITAL LETTER RAEG" + + "EORGIAN CAPITAL LETTER SANGEORGIAN CAPITAL LETTER TARGEORGIAN CAPITAL LE" + + "TTER UNGEORGIAN CAPITAL LETTER PHARGEORGIAN CAPITAL LETTER KHARGEORGIAN " + + "CAPITAL LETTER GHANGEORGIAN CAPITAL LETTER QARGEORGIAN CAPITAL LETTER SH" + + "INGEORGIAN CAPITAL LETTER CHINGEORGIAN CAPITAL LETTER CANGEORGIAN CAPITA" + + "L LETTER JILGEORGIAN CAPITAL LETTER CILGEORGIAN CAPITAL LETTER CHARGEORG" + + "IAN CAPITAL LETTER XANGEORGIAN CAPITAL LETTER JHANGEORGIAN CAPITAL LETTE" + + "R HAEGEORGIAN CAPITAL LETTER HEGEORGIAN CAPITAL LETTER HIEGEORGIAN CAPIT" + + "AL LETTER WEGEORGIAN CAPITAL LETTER HARGEORGIAN CAPITAL LETTER HOEGEORGI" + + "AN CAPITAL LETTER YNGEORGIAN CAPITAL LETTER AENGEORGIAN LETTER ANGEORGIA" + + "N LETTER BANGEORGIAN LETTER GANGEORGIAN LETTER DONGEORGIAN LETTER ENGEOR" + + "GIAN LETTER VINGEORGIAN LETTER ZENGEORGIAN LETTER TANGEORGIAN LETTER ING" + + "EORGIAN LETTER KANGEORGIAN LETTER LASGEORGIAN LETTER MANGEORGIAN LETTER " + + "NARGEORGIAN LETTER ONGEORGIAN LETTER PARGEORGIAN LETTER ZHARGEORGIAN LET" + + "TER RAEGEORGIAN LETTER SANGEORGIAN LETTER TARGEORGIAN LETTER UNGEORGIAN " + + "LETTER PHARGEORGIAN LETTER KHARGEORGIAN LETTER GHANGEORGIAN LETTER QARGE") + ("" + + "ORGIAN LETTER SHINGEORGIAN LETTER CHINGEORGIAN LETTER CANGEORGIAN LETTER" + + " JILGEORGIAN LETTER CILGEORGIAN LETTER CHARGEORGIAN LETTER XANGEORGIAN L" + + "ETTER JHANGEORGIAN LETTER HAEGEORGIAN LETTER HEGEORGIAN LETTER HIEGEORGI" + + "AN LETTER WEGEORGIAN LETTER HARGEORGIAN LETTER HOEGEORGIAN LETTER FIGEOR" + + "GIAN LETTER YNGEORGIAN LETTER ELIFIGEORGIAN LETTER TURNED GANGEORGIAN LE" + + "TTER AINGEORGIAN PARAGRAPH SEPARATORMODIFIER LETTER GEORGIAN NARGEORGIAN" + + " LETTER AENGEORGIAN LETTER HARD SIGNGEORGIAN LETTER LABIAL SIGNHANGUL CH" + + "OSEONG KIYEOKHANGUL CHOSEONG SSANGKIYEOKHANGUL CHOSEONG NIEUNHANGUL CHOS" + + "EONG TIKEUTHANGUL CHOSEONG SSANGTIKEUTHANGUL CHOSEONG RIEULHANGUL CHOSEO" + + "NG MIEUMHANGUL CHOSEONG PIEUPHANGUL CHOSEONG SSANGPIEUPHANGUL CHOSEONG S" + + "IOSHANGUL CHOSEONG SSANGSIOSHANGUL CHOSEONG IEUNGHANGUL CHOSEONG CIEUCHA" + + "NGUL CHOSEONG SSANGCIEUCHANGUL CHOSEONG CHIEUCHHANGUL CHOSEONG KHIEUKHHA" + + "NGUL CHOSEONG THIEUTHHANGUL CHOSEONG PHIEUPHHANGUL CHOSEONG HIEUHHANGUL " + + "CHOSEONG NIEUN-KIYEOKHANGUL CHOSEONG SSANGNIEUNHANGUL CHOSEONG NIEUN-TIK" + + "EUTHANGUL CHOSEONG NIEUN-PIEUPHANGUL CHOSEONG TIKEUT-KIYEOKHANGUL CHOSEO" + + "NG RIEUL-NIEUNHANGUL CHOSEONG SSANGRIEULHANGUL CHOSEONG RIEUL-HIEUHHANGU" + + "L CHOSEONG KAPYEOUNRIEULHANGUL CHOSEONG MIEUM-PIEUPHANGUL CHOSEONG KAPYE" + + "OUNMIEUMHANGUL CHOSEONG PIEUP-KIYEOKHANGUL CHOSEONG PIEUP-NIEUNHANGUL CH" + + "OSEONG PIEUP-TIKEUTHANGUL CHOSEONG PIEUP-SIOSHANGUL CHOSEONG PIEUP-SIOS-" + + "KIYEOKHANGUL CHOSEONG PIEUP-SIOS-TIKEUTHANGUL CHOSEONG PIEUP-SIOS-PIEUPH" + + "ANGUL CHOSEONG PIEUP-SSANGSIOSHANGUL CHOSEONG PIEUP-SIOS-CIEUCHANGUL CHO" + + "SEONG PIEUP-CIEUCHANGUL CHOSEONG PIEUP-CHIEUCHHANGUL CHOSEONG PIEUP-THIE" + + "UTHHANGUL CHOSEONG PIEUP-PHIEUPHHANGUL CHOSEONG KAPYEOUNPIEUPHANGUL CHOS" + + "EONG KAPYEOUNSSANGPIEUPHANGUL CHOSEONG SIOS-KIYEOKHANGUL CHOSEONG SIOS-N" + + "IEUNHANGUL CHOSEONG SIOS-TIKEUTHANGUL CHOSEONG SIOS-RIEULHANGUL CHOSEONG" + + " SIOS-MIEUMHANGUL CHOSEONG SIOS-PIEUPHANGUL CHOSEONG SIOS-PIEUP-KIYEOKHA" + + "NGUL CHOSEONG SIOS-SSANGSIOSHANGUL CHOSEONG SIOS-IEUNGHANGUL CHOSEONG SI" + + "OS-CIEUCHANGUL CHOSEONG SIOS-CHIEUCHHANGUL CHOSEONG SIOS-KHIEUKHHANGUL C" + + "HOSEONG SIOS-THIEUTHHANGUL CHOSEONG SIOS-PHIEUPHHANGUL CHOSEONG SIOS-HIE" + + "UHHANGUL CHOSEONG CHITUEUMSIOSHANGUL CHOSEONG CHITUEUMSSANGSIOSHANGUL CH" + + "OSEONG CEONGCHIEUMSIOSHANGUL CHOSEONG CEONGCHIEUMSSANGSIOSHANGUL CHOSEON" + + "G PANSIOSHANGUL CHOSEONG IEUNG-KIYEOKHANGUL CHOSEONG IEUNG-TIKEUTHANGUL " + + "CHOSEONG IEUNG-MIEUMHANGUL CHOSEONG IEUNG-PIEUPHANGUL CHOSEONG IEUNG-SIO" + + "SHANGUL CHOSEONG IEUNG-PANSIOSHANGUL CHOSEONG SSANGIEUNGHANGUL CHOSEONG " + + "IEUNG-CIEUCHANGUL CHOSEONG IEUNG-CHIEUCHHANGUL CHOSEONG IEUNG-THIEUTHHAN" + + "GUL CHOSEONG IEUNG-PHIEUPHHANGUL CHOSEONG YESIEUNGHANGUL CHOSEONG CIEUC-" + + "IEUNGHANGUL CHOSEONG CHITUEUMCIEUCHANGUL CHOSEONG CHITUEUMSSANGCIEUCHANG" + + "UL CHOSEONG CEONGCHIEUMCIEUCHANGUL CHOSEONG CEONGCHIEUMSSANGCIEUCHANGUL " + + "CHOSEONG CHIEUCH-KHIEUKHHANGUL CHOSEONG CHIEUCH-HIEUHHANGUL CHOSEONG CHI" + + "TUEUMCHIEUCHHANGUL CHOSEONG CEONGCHIEUMCHIEUCHHANGUL CHOSEONG PHIEUPH-PI" + + "EUPHANGUL CHOSEONG KAPYEOUNPHIEUPHHANGUL CHOSEONG SSANGHIEUHHANGUL CHOSE" + + "ONG YEORINHIEUHHANGUL CHOSEONG KIYEOK-TIKEUTHANGUL CHOSEONG NIEUN-SIOSHA" + + "NGUL CHOSEONG NIEUN-CIEUCHANGUL CHOSEONG NIEUN-HIEUHHANGUL CHOSEONG TIKE" + + "UT-RIEULHANGUL CHOSEONG FILLERHANGUL JUNGSEONG FILLERHANGUL JUNGSEONG AH" + + "ANGUL JUNGSEONG AEHANGUL JUNGSEONG YAHANGUL JUNGSEONG YAEHANGUL JUNGSEON" + + "G EOHANGUL JUNGSEONG EHANGUL JUNGSEONG YEOHANGUL JUNGSEONG YEHANGUL JUNG" + + "SEONG OHANGUL JUNGSEONG WAHANGUL JUNGSEONG WAEHANGUL JUNGSEONG OEHANGUL " + + "JUNGSEONG YOHANGUL JUNGSEONG UHANGUL JUNGSEONG WEOHANGUL JUNGSEONG WEHAN" + + "GUL JUNGSEONG WIHANGUL JUNGSEONG YUHANGUL JUNGSEONG EUHANGUL JUNGSEONG Y" + + "IHANGUL JUNGSEONG IHANGUL JUNGSEONG A-OHANGUL JUNGSEONG A-UHANGUL JUNGSE" + + "ONG YA-OHANGUL JUNGSEONG YA-YOHANGUL JUNGSEONG EO-OHANGUL JUNGSEONG EO-U" + + "HANGUL JUNGSEONG EO-EUHANGUL JUNGSEONG YEO-OHANGUL JUNGSEONG YEO-UHANGUL" + + " JUNGSEONG O-EOHANGUL JUNGSEONG O-EHANGUL JUNGSEONG O-YEHANGUL JUNGSEONG" + + " O-OHANGUL JUNGSEONG O-UHANGUL JUNGSEONG YO-YAHANGUL JUNGSEONG YO-YAEHAN" + + "GUL JUNGSEONG YO-YEOHANGUL JUNGSEONG YO-OHANGUL JUNGSEONG YO-IHANGUL JUN" + + "GSEONG U-AHANGUL JUNGSEONG U-AEHANGUL JUNGSEONG U-EO-EUHANGUL JUNGSEONG " + + "U-YEHANGUL JUNGSEONG U-UHANGUL JUNGSEONG YU-AHANGUL JUNGSEONG YU-EOHANGU" + + "L JUNGSEONG YU-EHANGUL JUNGSEONG YU-YEOHANGUL JUNGSEONG YU-YEHANGUL JUNG" + + "SEONG YU-UHANGUL JUNGSEONG YU-IHANGUL JUNGSEONG EU-UHANGUL JUNGSEONG EU-" + + "EUHANGUL JUNGSEONG YI-UHANGUL JUNGSEONG I-AHANGUL JUNGSEONG I-YAHANGUL J" + + "UNGSEONG I-OHANGUL JUNGSEONG I-UHANGUL JUNGSEONG I-EUHANGUL JUNGSEONG I-" + + "ARAEAHANGUL JUNGSEONG ARAEAHANGUL JUNGSEONG ARAEA-EOHANGUL JUNGSEONG ARA" + + "EA-UHANGUL JUNGSEONG ARAEA-IHANGUL JUNGSEONG SSANGARAEAHANGUL JUNGSEONG " + + "A-EUHANGUL JUNGSEONG YA-UHANGUL JUNGSEONG YEO-YAHANGUL JUNGSEONG O-YAHAN") + ("" + + "GUL JUNGSEONG O-YAEHANGUL JONGSEONG KIYEOKHANGUL JONGSEONG SSANGKIYEOKHA" + + "NGUL JONGSEONG KIYEOK-SIOSHANGUL JONGSEONG NIEUNHANGUL JONGSEONG NIEUN-C" + + "IEUCHANGUL JONGSEONG NIEUN-HIEUHHANGUL JONGSEONG TIKEUTHANGUL JONGSEONG " + + "RIEULHANGUL JONGSEONG RIEUL-KIYEOKHANGUL JONGSEONG RIEUL-MIEUMHANGUL JON" + + "GSEONG RIEUL-PIEUPHANGUL JONGSEONG RIEUL-SIOSHANGUL JONGSEONG RIEUL-THIE" + + "UTHHANGUL JONGSEONG RIEUL-PHIEUPHHANGUL JONGSEONG RIEUL-HIEUHHANGUL JONG" + + "SEONG MIEUMHANGUL JONGSEONG PIEUPHANGUL JONGSEONG PIEUP-SIOSHANGUL JONGS" + + "EONG SIOSHANGUL JONGSEONG SSANGSIOSHANGUL JONGSEONG IEUNGHANGUL JONGSEON" + + "G CIEUCHANGUL JONGSEONG CHIEUCHHANGUL JONGSEONG KHIEUKHHANGUL JONGSEONG " + + "THIEUTHHANGUL JONGSEONG PHIEUPHHANGUL JONGSEONG HIEUHHANGUL JONGSEONG KI" + + "YEOK-RIEULHANGUL JONGSEONG KIYEOK-SIOS-KIYEOKHANGUL JONGSEONG NIEUN-KIYE" + + "OKHANGUL JONGSEONG NIEUN-TIKEUTHANGUL JONGSEONG NIEUN-SIOSHANGUL JONGSEO" + + "NG NIEUN-PANSIOSHANGUL JONGSEONG NIEUN-THIEUTHHANGUL JONGSEONG TIKEUT-KI" + + "YEOKHANGUL JONGSEONG TIKEUT-RIEULHANGUL JONGSEONG RIEUL-KIYEOK-SIOSHANGU" + + "L JONGSEONG RIEUL-NIEUNHANGUL JONGSEONG RIEUL-TIKEUTHANGUL JONGSEONG RIE" + + "UL-TIKEUT-HIEUHHANGUL JONGSEONG SSANGRIEULHANGUL JONGSEONG RIEUL-MIEUM-K" + + "IYEOKHANGUL JONGSEONG RIEUL-MIEUM-SIOSHANGUL JONGSEONG RIEUL-PIEUP-SIOSH" + + "ANGUL JONGSEONG RIEUL-PIEUP-HIEUHHANGUL JONGSEONG RIEUL-KAPYEOUNPIEUPHAN" + + "GUL JONGSEONG RIEUL-SSANGSIOSHANGUL JONGSEONG RIEUL-PANSIOSHANGUL JONGSE" + + "ONG RIEUL-KHIEUKHHANGUL JONGSEONG RIEUL-YEORINHIEUHHANGUL JONGSEONG MIEU" + + "M-KIYEOKHANGUL JONGSEONG MIEUM-RIEULHANGUL JONGSEONG MIEUM-PIEUPHANGUL J" + + "ONGSEONG MIEUM-SIOSHANGUL JONGSEONG MIEUM-SSANGSIOSHANGUL JONGSEONG MIEU" + + "M-PANSIOSHANGUL JONGSEONG MIEUM-CHIEUCHHANGUL JONGSEONG MIEUM-HIEUHHANGU" + + "L JONGSEONG KAPYEOUNMIEUMHANGUL JONGSEONG PIEUP-RIEULHANGUL JONGSEONG PI" + + "EUP-PHIEUPHHANGUL JONGSEONG PIEUP-HIEUHHANGUL JONGSEONG KAPYEOUNPIEUPHAN" + + "GUL JONGSEONG SIOS-KIYEOKHANGUL JONGSEONG SIOS-TIKEUTHANGUL JONGSEONG SI" + + "OS-RIEULHANGUL JONGSEONG SIOS-PIEUPHANGUL JONGSEONG PANSIOSHANGUL JONGSE" + + "ONG IEUNG-KIYEOKHANGUL JONGSEONG IEUNG-SSANGKIYEOKHANGUL JONGSEONG SSANG" + + "IEUNGHANGUL JONGSEONG IEUNG-KHIEUKHHANGUL JONGSEONG YESIEUNGHANGUL JONGS" + + "EONG YESIEUNG-SIOSHANGUL JONGSEONG YESIEUNG-PANSIOSHANGUL JONGSEONG PHIE" + + "UPH-PIEUPHANGUL JONGSEONG KAPYEOUNPHIEUPHHANGUL JONGSEONG HIEUH-NIEUNHAN" + + "GUL JONGSEONG HIEUH-RIEULHANGUL JONGSEONG HIEUH-MIEUMHANGUL JONGSEONG HI" + + "EUH-PIEUPHANGUL JONGSEONG YEORINHIEUHHANGUL JONGSEONG KIYEOK-NIEUNHANGUL" + + " JONGSEONG KIYEOK-PIEUPHANGUL JONGSEONG KIYEOK-CHIEUCHHANGUL JONGSEONG K" + + "IYEOK-KHIEUKHHANGUL JONGSEONG KIYEOK-HIEUHHANGUL JONGSEONG SSANGNIEUNETH" + + "IOPIC SYLLABLE HAETHIOPIC SYLLABLE HUETHIOPIC SYLLABLE HIETHIOPIC SYLLAB" + + "LE HAAETHIOPIC SYLLABLE HEEETHIOPIC SYLLABLE HEETHIOPIC SYLLABLE HOETHIO" + + "PIC SYLLABLE HOAETHIOPIC SYLLABLE LAETHIOPIC SYLLABLE LUETHIOPIC SYLLABL" + + "E LIETHIOPIC SYLLABLE LAAETHIOPIC SYLLABLE LEEETHIOPIC SYLLABLE LEETHIOP" + + "IC SYLLABLE LOETHIOPIC SYLLABLE LWAETHIOPIC SYLLABLE HHAETHIOPIC SYLLABL" + + "E HHUETHIOPIC SYLLABLE HHIETHIOPIC SYLLABLE HHAAETHIOPIC SYLLABLE HHEEET" + + "HIOPIC SYLLABLE HHEETHIOPIC SYLLABLE HHOETHIOPIC SYLLABLE HHWAETHIOPIC S" + + "YLLABLE MAETHIOPIC SYLLABLE MUETHIOPIC SYLLABLE MIETHIOPIC SYLLABLE MAAE" + + "THIOPIC SYLLABLE MEEETHIOPIC SYLLABLE MEETHIOPIC SYLLABLE MOETHIOPIC SYL" + + "LABLE MWAETHIOPIC SYLLABLE SZAETHIOPIC SYLLABLE SZUETHIOPIC SYLLABLE SZI" + + "ETHIOPIC SYLLABLE SZAAETHIOPIC SYLLABLE SZEEETHIOPIC SYLLABLE SZEETHIOPI" + + "C SYLLABLE SZOETHIOPIC SYLLABLE SZWAETHIOPIC SYLLABLE RAETHIOPIC SYLLABL" + + "E RUETHIOPIC SYLLABLE RIETHIOPIC SYLLABLE RAAETHIOPIC SYLLABLE REEETHIOP" + + "IC SYLLABLE REETHIOPIC SYLLABLE ROETHIOPIC SYLLABLE RWAETHIOPIC SYLLABLE" + + " SAETHIOPIC SYLLABLE SUETHIOPIC SYLLABLE SIETHIOPIC SYLLABLE SAAETHIOPIC" + + " SYLLABLE SEEETHIOPIC SYLLABLE SEETHIOPIC SYLLABLE SOETHIOPIC SYLLABLE S" + + "WAETHIOPIC SYLLABLE SHAETHIOPIC SYLLABLE SHUETHIOPIC SYLLABLE SHIETHIOPI" + + "C SYLLABLE SHAAETHIOPIC SYLLABLE SHEEETHIOPIC SYLLABLE SHEETHIOPIC SYLLA" + + "BLE SHOETHIOPIC SYLLABLE SHWAETHIOPIC SYLLABLE QAETHIOPIC SYLLABLE QUETH" + + "IOPIC SYLLABLE QIETHIOPIC SYLLABLE QAAETHIOPIC SYLLABLE QEEETHIOPIC SYLL" + + "ABLE QEETHIOPIC SYLLABLE QOETHIOPIC SYLLABLE QOAETHIOPIC SYLLABLE QWAETH" + + "IOPIC SYLLABLE QWIETHIOPIC SYLLABLE QWAAETHIOPIC SYLLABLE QWEEETHIOPIC S" + + "YLLABLE QWEETHIOPIC SYLLABLE QHAETHIOPIC SYLLABLE QHUETHIOPIC SYLLABLE Q" + + "HIETHIOPIC SYLLABLE QHAAETHIOPIC SYLLABLE QHEEETHIOPIC SYLLABLE QHEETHIO" + + "PIC SYLLABLE QHOETHIOPIC SYLLABLE QHWAETHIOPIC SYLLABLE QHWIETHIOPIC SYL" + + "LABLE QHWAAETHIOPIC SYLLABLE QHWEEETHIOPIC SYLLABLE QHWEETHIOPIC SYLLABL" + + "E BAETHIOPIC SYLLABLE BUETHIOPIC SYLLABLE BIETHIOPIC SYLLABLE BAAETHIOPI" + + "C SYLLABLE BEEETHIOPIC SYLLABLE BEETHIOPIC SYLLABLE BOETHIOPIC SYLLABLE " + + "BWAETHIOPIC SYLLABLE VAETHIOPIC SYLLABLE VUETHIOPIC SYLLABLE VIETHIOPIC ") + ("" + + "SYLLABLE VAAETHIOPIC SYLLABLE VEEETHIOPIC SYLLABLE VEETHIOPIC SYLLABLE V" + + "OETHIOPIC SYLLABLE VWAETHIOPIC SYLLABLE TAETHIOPIC SYLLABLE TUETHIOPIC S" + + "YLLABLE TIETHIOPIC SYLLABLE TAAETHIOPIC SYLLABLE TEEETHIOPIC SYLLABLE TE" + + "ETHIOPIC SYLLABLE TOETHIOPIC SYLLABLE TWAETHIOPIC SYLLABLE CAETHIOPIC SY" + + "LLABLE CUETHIOPIC SYLLABLE CIETHIOPIC SYLLABLE CAAETHIOPIC SYLLABLE CEEE" + + "THIOPIC SYLLABLE CEETHIOPIC SYLLABLE COETHIOPIC SYLLABLE CWAETHIOPIC SYL" + + "LABLE XAETHIOPIC SYLLABLE XUETHIOPIC SYLLABLE XIETHIOPIC SYLLABLE XAAETH" + + "IOPIC SYLLABLE XEEETHIOPIC SYLLABLE XEETHIOPIC SYLLABLE XOETHIOPIC SYLLA" + + "BLE XOAETHIOPIC SYLLABLE XWAETHIOPIC SYLLABLE XWIETHIOPIC SYLLABLE XWAAE" + + "THIOPIC SYLLABLE XWEEETHIOPIC SYLLABLE XWEETHIOPIC SYLLABLE NAETHIOPIC S" + + "YLLABLE NUETHIOPIC SYLLABLE NIETHIOPIC SYLLABLE NAAETHIOPIC SYLLABLE NEE" + + "ETHIOPIC SYLLABLE NEETHIOPIC SYLLABLE NOETHIOPIC SYLLABLE NWAETHIOPIC SY" + + "LLABLE NYAETHIOPIC SYLLABLE NYUETHIOPIC SYLLABLE NYIETHIOPIC SYLLABLE NY" + + "AAETHIOPIC SYLLABLE NYEEETHIOPIC SYLLABLE NYEETHIOPIC SYLLABLE NYOETHIOP" + + "IC SYLLABLE NYWAETHIOPIC SYLLABLE GLOTTAL AETHIOPIC SYLLABLE GLOTTAL UET" + + "HIOPIC SYLLABLE GLOTTAL IETHIOPIC SYLLABLE GLOTTAL AAETHIOPIC SYLLABLE G" + + "LOTTAL EEETHIOPIC SYLLABLE GLOTTAL EETHIOPIC SYLLABLE GLOTTAL OETHIOPIC " + + "SYLLABLE GLOTTAL WAETHIOPIC SYLLABLE KAETHIOPIC SYLLABLE KUETHIOPIC SYLL" + + "ABLE KIETHIOPIC SYLLABLE KAAETHIOPIC SYLLABLE KEEETHIOPIC SYLLABLE KEETH" + + "IOPIC SYLLABLE KOETHIOPIC SYLLABLE KOAETHIOPIC SYLLABLE KWAETHIOPIC SYLL" + + "ABLE KWIETHIOPIC SYLLABLE KWAAETHIOPIC SYLLABLE KWEEETHIOPIC SYLLABLE KW" + + "EETHIOPIC SYLLABLE KXAETHIOPIC SYLLABLE KXUETHIOPIC SYLLABLE KXIETHIOPIC" + + " SYLLABLE KXAAETHIOPIC SYLLABLE KXEEETHIOPIC SYLLABLE KXEETHIOPIC SYLLAB" + + "LE KXOETHIOPIC SYLLABLE KXWAETHIOPIC SYLLABLE KXWIETHIOPIC SYLLABLE KXWA" + + "AETHIOPIC SYLLABLE KXWEEETHIOPIC SYLLABLE KXWEETHIOPIC SYLLABLE WAETHIOP" + + "IC SYLLABLE WUETHIOPIC SYLLABLE WIETHIOPIC SYLLABLE WAAETHIOPIC SYLLABLE" + + " WEEETHIOPIC SYLLABLE WEETHIOPIC SYLLABLE WOETHIOPIC SYLLABLE WOAETHIOPI" + + "C SYLLABLE PHARYNGEAL AETHIOPIC SYLLABLE PHARYNGEAL UETHIOPIC SYLLABLE P" + + "HARYNGEAL IETHIOPIC SYLLABLE PHARYNGEAL AAETHIOPIC SYLLABLE PHARYNGEAL E" + + "EETHIOPIC SYLLABLE PHARYNGEAL EETHIOPIC SYLLABLE PHARYNGEAL OETHIOPIC SY" + + "LLABLE ZAETHIOPIC SYLLABLE ZUETHIOPIC SYLLABLE ZIETHIOPIC SYLLABLE ZAAET" + + "HIOPIC SYLLABLE ZEEETHIOPIC SYLLABLE ZEETHIOPIC SYLLABLE ZOETHIOPIC SYLL" + + "ABLE ZWAETHIOPIC SYLLABLE ZHAETHIOPIC SYLLABLE ZHUETHIOPIC SYLLABLE ZHIE" + + "THIOPIC SYLLABLE ZHAAETHIOPIC SYLLABLE ZHEEETHIOPIC SYLLABLE ZHEETHIOPIC" + + " SYLLABLE ZHOETHIOPIC SYLLABLE ZHWAETHIOPIC SYLLABLE YAETHIOPIC SYLLABLE" + + " YUETHIOPIC SYLLABLE YIETHIOPIC SYLLABLE YAAETHIOPIC SYLLABLE YEEETHIOPI" + + "C SYLLABLE YEETHIOPIC SYLLABLE YOETHIOPIC SYLLABLE YOAETHIOPIC SYLLABLE " + + "DAETHIOPIC SYLLABLE DUETHIOPIC SYLLABLE DIETHIOPIC SYLLABLE DAAETHIOPIC " + + "SYLLABLE DEEETHIOPIC SYLLABLE DEETHIOPIC SYLLABLE DOETHIOPIC SYLLABLE DW" + + "AETHIOPIC SYLLABLE DDAETHIOPIC SYLLABLE DDUETHIOPIC SYLLABLE DDIETHIOPIC" + + " SYLLABLE DDAAETHIOPIC SYLLABLE DDEEETHIOPIC SYLLABLE DDEETHIOPIC SYLLAB" + + "LE DDOETHIOPIC SYLLABLE DDWAETHIOPIC SYLLABLE JAETHIOPIC SYLLABLE JUETHI" + + "OPIC SYLLABLE JIETHIOPIC SYLLABLE JAAETHIOPIC SYLLABLE JEEETHIOPIC SYLLA" + + "BLE JEETHIOPIC SYLLABLE JOETHIOPIC SYLLABLE JWAETHIOPIC SYLLABLE GAETHIO" + + "PIC SYLLABLE GUETHIOPIC SYLLABLE GIETHIOPIC SYLLABLE GAAETHIOPIC SYLLABL" + + "E GEEETHIOPIC SYLLABLE GEETHIOPIC SYLLABLE GOETHIOPIC SYLLABLE GOAETHIOP" + + "IC SYLLABLE GWAETHIOPIC SYLLABLE GWIETHIOPIC SYLLABLE GWAAETHIOPIC SYLLA" + + "BLE GWEEETHIOPIC SYLLABLE GWEETHIOPIC SYLLABLE GGAETHIOPIC SYLLABLE GGUE" + + "THIOPIC SYLLABLE GGIETHIOPIC SYLLABLE GGAAETHIOPIC SYLLABLE GGEEETHIOPIC" + + " SYLLABLE GGEETHIOPIC SYLLABLE GGOETHIOPIC SYLLABLE GGWAAETHIOPIC SYLLAB" + + "LE THAETHIOPIC SYLLABLE THUETHIOPIC SYLLABLE THIETHIOPIC SYLLABLE THAAET" + + "HIOPIC SYLLABLE THEEETHIOPIC SYLLABLE THEETHIOPIC SYLLABLE THOETHIOPIC S" + + "YLLABLE THWAETHIOPIC SYLLABLE CHAETHIOPIC SYLLABLE CHUETHIOPIC SYLLABLE " + + "CHIETHIOPIC SYLLABLE CHAAETHIOPIC SYLLABLE CHEEETHIOPIC SYLLABLE CHEETHI" + + "OPIC SYLLABLE CHOETHIOPIC SYLLABLE CHWAETHIOPIC SYLLABLE PHAETHIOPIC SYL" + + "LABLE PHUETHIOPIC SYLLABLE PHIETHIOPIC SYLLABLE PHAAETHIOPIC SYLLABLE PH" + + "EEETHIOPIC SYLLABLE PHEETHIOPIC SYLLABLE PHOETHIOPIC SYLLABLE PHWAETHIOP" + + "IC SYLLABLE TSAETHIOPIC SYLLABLE TSUETHIOPIC SYLLABLE TSIETHIOPIC SYLLAB" + + "LE TSAAETHIOPIC SYLLABLE TSEEETHIOPIC SYLLABLE TSEETHIOPIC SYLLABLE TSOE" + + "THIOPIC SYLLABLE TSWAETHIOPIC SYLLABLE TZAETHIOPIC SYLLABLE TZUETHIOPIC " + + "SYLLABLE TZIETHIOPIC SYLLABLE TZAAETHIOPIC SYLLABLE TZEEETHIOPIC SYLLABL" + + "E TZEETHIOPIC SYLLABLE TZOETHIOPIC SYLLABLE TZOAETHIOPIC SYLLABLE FAETHI" + + "OPIC SYLLABLE FUETHIOPIC SYLLABLE FIETHIOPIC SYLLABLE FAAETHIOPIC SYLLAB" + + "LE FEEETHIOPIC SYLLABLE FEETHIOPIC SYLLABLE FOETHIOPIC SYLLABLE FWAETHIO") + ("" + + "PIC SYLLABLE PAETHIOPIC SYLLABLE PUETHIOPIC SYLLABLE PIETHIOPIC SYLLABLE" + + " PAAETHIOPIC SYLLABLE PEEETHIOPIC SYLLABLE PEETHIOPIC SYLLABLE POETHIOPI" + + "C SYLLABLE PWAETHIOPIC SYLLABLE RYAETHIOPIC SYLLABLE MYAETHIOPIC SYLLABL" + + "E FYAETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARKETHIOPIC COMBINI" + + "NG VOWEL LENGTH MARKETHIOPIC COMBINING GEMINATION MARKETHIOPIC SECTION M" + + "ARKETHIOPIC WORDSPACEETHIOPIC FULL STOPETHIOPIC COMMAETHIOPIC SEMICOLONE" + + "THIOPIC COLONETHIOPIC PREFACE COLONETHIOPIC QUESTION MARKETHIOPIC PARAGR" + + "APH SEPARATORETHIOPIC DIGIT ONEETHIOPIC DIGIT TWOETHIOPIC DIGIT THREEETH" + + "IOPIC DIGIT FOURETHIOPIC DIGIT FIVEETHIOPIC DIGIT SIXETHIOPIC DIGIT SEVE" + + "NETHIOPIC DIGIT EIGHTETHIOPIC DIGIT NINEETHIOPIC NUMBER TENETHIOPIC NUMB" + + "ER TWENTYETHIOPIC NUMBER THIRTYETHIOPIC NUMBER FORTYETHIOPIC NUMBER FIFT" + + "YETHIOPIC NUMBER SIXTYETHIOPIC NUMBER SEVENTYETHIOPIC NUMBER EIGHTYETHIO" + + "PIC NUMBER NINETYETHIOPIC NUMBER HUNDREDETHIOPIC NUMBER TEN THOUSANDETHI" + + "OPIC SYLLABLE SEBATBEIT MWAETHIOPIC SYLLABLE MWIETHIOPIC SYLLABLE MWEEET" + + "HIOPIC SYLLABLE MWEETHIOPIC SYLLABLE SEBATBEIT BWAETHIOPIC SYLLABLE BWIE" + + "THIOPIC SYLLABLE BWEEETHIOPIC SYLLABLE BWEETHIOPIC SYLLABLE SEBATBEIT FW" + + "AETHIOPIC SYLLABLE FWIETHIOPIC SYLLABLE FWEEETHIOPIC SYLLABLE FWEETHIOPI" + + "C SYLLABLE SEBATBEIT PWAETHIOPIC SYLLABLE PWIETHIOPIC SYLLABLE PWEEETHIO" + + "PIC SYLLABLE PWEETHIOPIC TONAL MARK YIZETETHIOPIC TONAL MARK DERETETHIOP" + + "IC TONAL MARK RIKRIKETHIOPIC TONAL MARK SHORT RIKRIKETHIOPIC TONAL MARK " + + "DIFATETHIOPIC TONAL MARK KENATETHIOPIC TONAL MARK CHIRETETHIOPIC TONAL M" + + "ARK HIDETETHIOPIC TONAL MARK DERET-HIDETETHIOPIC TONAL MARK KURTCHEROKEE" + + " LETTER ACHEROKEE LETTER ECHEROKEE LETTER ICHEROKEE LETTER OCHEROKEE LET" + + "TER UCHEROKEE LETTER VCHEROKEE LETTER GACHEROKEE LETTER KACHEROKEE LETTE" + + "R GECHEROKEE LETTER GICHEROKEE LETTER GOCHEROKEE LETTER GUCHEROKEE LETTE" + + "R GVCHEROKEE LETTER HACHEROKEE LETTER HECHEROKEE LETTER HICHEROKEE LETTE" + + "R HOCHEROKEE LETTER HUCHEROKEE LETTER HVCHEROKEE LETTER LACHEROKEE LETTE" + + "R LECHEROKEE LETTER LICHEROKEE LETTER LOCHEROKEE LETTER LUCHEROKEE LETTE" + + "R LVCHEROKEE LETTER MACHEROKEE LETTER MECHEROKEE LETTER MICHEROKEE LETTE" + + "R MOCHEROKEE LETTER MUCHEROKEE LETTER NACHEROKEE LETTER HNACHEROKEE LETT" + + "ER NAHCHEROKEE LETTER NECHEROKEE LETTER NICHEROKEE LETTER NOCHEROKEE LET" + + "TER NUCHEROKEE LETTER NVCHEROKEE LETTER QUACHEROKEE LETTER QUECHEROKEE L" + + "ETTER QUICHEROKEE LETTER QUOCHEROKEE LETTER QUUCHEROKEE LETTER QUVCHEROK" + + "EE LETTER SACHEROKEE LETTER SCHEROKEE LETTER SECHEROKEE LETTER SICHEROKE" + + "E LETTER SOCHEROKEE LETTER SUCHEROKEE LETTER SVCHEROKEE LETTER DACHEROKE" + + "E LETTER TACHEROKEE LETTER DECHEROKEE LETTER TECHEROKEE LETTER DICHEROKE" + + "E LETTER TICHEROKEE LETTER DOCHEROKEE LETTER DUCHEROKEE LETTER DVCHEROKE" + + "E LETTER DLACHEROKEE LETTER TLACHEROKEE LETTER TLECHEROKEE LETTER TLICHE" + + "ROKEE LETTER TLOCHEROKEE LETTER TLUCHEROKEE LETTER TLVCHEROKEE LETTER TS" + + "ACHEROKEE LETTER TSECHEROKEE LETTER TSICHEROKEE LETTER TSOCHEROKEE LETTE" + + "R TSUCHEROKEE LETTER TSVCHEROKEE LETTER WACHEROKEE LETTER WECHEROKEE LET" + + "TER WICHEROKEE LETTER WOCHEROKEE LETTER WUCHEROKEE LETTER WVCHEROKEE LET" + + "TER YACHEROKEE LETTER YECHEROKEE LETTER YICHEROKEE LETTER YOCHEROKEE LET" + + "TER YUCHEROKEE LETTER YVCHEROKEE LETTER MVCHEROKEE SMALL LETTER YECHEROK" + + "EE SMALL LETTER YICHEROKEE SMALL LETTER YOCHEROKEE SMALL LETTER YUCHEROK" + + "EE SMALL LETTER YVCHEROKEE SMALL LETTER MVCANADIAN SYLLABICS HYPHENCANAD" + + "IAN SYLLABICS ECANADIAN SYLLABICS AAICANADIAN SYLLABICS ICANADIAN SYLLAB" + + "ICS IICANADIAN SYLLABICS OCANADIAN SYLLABICS OOCANADIAN SYLLABICS Y-CREE" + + " OOCANADIAN SYLLABICS CARRIER EECANADIAN SYLLABICS CARRIER ICANADIAN SYL" + + "LABICS ACANADIAN SYLLABICS AACANADIAN SYLLABICS WECANADIAN SYLLABICS WES" + + "T-CREE WECANADIAN SYLLABICS WICANADIAN SYLLABICS WEST-CREE WICANADIAN SY" + + "LLABICS WIICANADIAN SYLLABICS WEST-CREE WIICANADIAN SYLLABICS WOCANADIAN" + + " SYLLABICS WEST-CREE WOCANADIAN SYLLABICS WOOCANADIAN SYLLABICS WEST-CRE" + + "E WOOCANADIAN SYLLABICS NASKAPI WOOCANADIAN SYLLABICS WACANADIAN SYLLABI" + + "CS WEST-CREE WACANADIAN SYLLABICS WAACANADIAN SYLLABICS WEST-CREE WAACAN" + + "ADIAN SYLLABICS NASKAPI WAACANADIAN SYLLABICS AICANADIAN SYLLABICS Y-CRE" + + "E WCANADIAN SYLLABICS GLOTTAL STOPCANADIAN SYLLABICS FINAL ACUTECANADIAN" + + " SYLLABICS FINAL GRAVECANADIAN SYLLABICS FINAL BOTTOM HALF RINGCANADIAN " + + "SYLLABICS FINAL TOP HALF RINGCANADIAN SYLLABICS FINAL RIGHT HALF RINGCAN" + + "ADIAN SYLLABICS FINAL RINGCANADIAN SYLLABICS FINAL DOUBLE ACUTECANADIAN " + + "SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKESCANADIAN SYLLABICS FINAL MI" + + "DDLE DOTCANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKECANADIAN SYLLABI" + + "CS FINAL PLUSCANADIAN SYLLABICS FINAL DOWN TACKCANADIAN SYLLABICS ENCANA" + + "DIAN SYLLABICS INCANADIAN SYLLABICS ONCANADIAN SYLLABICS ANCANADIAN SYLL") + ("" + + "ABICS PECANADIAN SYLLABICS PAAICANADIAN SYLLABICS PICANADIAN SYLLABICS P" + + "IICANADIAN SYLLABICS POCANADIAN SYLLABICS POOCANADIAN SYLLABICS Y-CREE P" + + "OOCANADIAN SYLLABICS CARRIER HEECANADIAN SYLLABICS CARRIER HICANADIAN SY" + + "LLABICS PACANADIAN SYLLABICS PAACANADIAN SYLLABICS PWECANADIAN SYLLABICS" + + " WEST-CREE PWECANADIAN SYLLABICS PWICANADIAN SYLLABICS WEST-CREE PWICANA" + + "DIAN SYLLABICS PWIICANADIAN SYLLABICS WEST-CREE PWIICANADIAN SYLLABICS P" + + "WOCANADIAN SYLLABICS WEST-CREE PWOCANADIAN SYLLABICS PWOOCANADIAN SYLLAB" + + "ICS WEST-CREE PWOOCANADIAN SYLLABICS PWACANADIAN SYLLABICS WEST-CREE PWA" + + "CANADIAN SYLLABICS PWAACANADIAN SYLLABICS WEST-CREE PWAACANADIAN SYLLABI" + + "CS Y-CREE PWAACANADIAN SYLLABICS PCANADIAN SYLLABICS WEST-CREE PCANADIAN" + + " SYLLABICS CARRIER HCANADIAN SYLLABICS TECANADIAN SYLLABICS TAAICANADIAN" + + " SYLLABICS TICANADIAN SYLLABICS TIICANADIAN SYLLABICS TOCANADIAN SYLLABI" + + "CS TOOCANADIAN SYLLABICS Y-CREE TOOCANADIAN SYLLABICS CARRIER DEECANADIA" + + "N SYLLABICS CARRIER DICANADIAN SYLLABICS TACANADIAN SYLLABICS TAACANADIA" + + "N SYLLABICS TWECANADIAN SYLLABICS WEST-CREE TWECANADIAN SYLLABICS TWICAN" + + "ADIAN SYLLABICS WEST-CREE TWICANADIAN SYLLABICS TWIICANADIAN SYLLABICS W" + + "EST-CREE TWIICANADIAN SYLLABICS TWOCANADIAN SYLLABICS WEST-CREE TWOCANAD" + + "IAN SYLLABICS TWOOCANADIAN SYLLABICS WEST-CREE TWOOCANADIAN SYLLABICS TW" + + "ACANADIAN SYLLABICS WEST-CREE TWACANADIAN SYLLABICS TWAACANADIAN SYLLABI" + + "CS WEST-CREE TWAACANADIAN SYLLABICS NASKAPI TWAACANADIAN SYLLABICS TCANA" + + "DIAN SYLLABICS TTECANADIAN SYLLABICS TTICANADIAN SYLLABICS TTOCANADIAN S" + + "YLLABICS TTACANADIAN SYLLABICS KECANADIAN SYLLABICS KAAICANADIAN SYLLABI" + + "CS KICANADIAN SYLLABICS KIICANADIAN SYLLABICS KOCANADIAN SYLLABICS KOOCA" + + "NADIAN SYLLABICS Y-CREE KOOCANADIAN SYLLABICS KACANADIAN SYLLABICS KAACA" + + "NADIAN SYLLABICS KWECANADIAN SYLLABICS WEST-CREE KWECANADIAN SYLLABICS K" + + "WICANADIAN SYLLABICS WEST-CREE KWICANADIAN SYLLABICS KWIICANADIAN SYLLAB" + + "ICS WEST-CREE KWIICANADIAN SYLLABICS KWOCANADIAN SYLLABICS WEST-CREE KWO" + + "CANADIAN SYLLABICS KWOOCANADIAN SYLLABICS WEST-CREE KWOOCANADIAN SYLLABI" + + "CS KWACANADIAN SYLLABICS WEST-CREE KWACANADIAN SYLLABICS KWAACANADIAN SY" + + "LLABICS WEST-CREE KWAACANADIAN SYLLABICS NASKAPI KWAACANADIAN SYLLABICS " + + "KCANADIAN SYLLABICS KWCANADIAN SYLLABICS SOUTH-SLAVEY KEHCANADIAN SYLLAB" + + "ICS SOUTH-SLAVEY KIHCANADIAN SYLLABICS SOUTH-SLAVEY KOHCANADIAN SYLLABIC" + + "S SOUTH-SLAVEY KAHCANADIAN SYLLABICS CECANADIAN SYLLABICS CAAICANADIAN S" + + "YLLABICS CICANADIAN SYLLABICS CIICANADIAN SYLLABICS COCANADIAN SYLLABICS" + + " COOCANADIAN SYLLABICS Y-CREE COOCANADIAN SYLLABICS CACANADIAN SYLLABICS" + + " CAACANADIAN SYLLABICS CWECANADIAN SYLLABICS WEST-CREE CWECANADIAN SYLLA" + + "BICS CWICANADIAN SYLLABICS WEST-CREE CWICANADIAN SYLLABICS CWIICANADIAN " + + "SYLLABICS WEST-CREE CWIICANADIAN SYLLABICS CWOCANADIAN SYLLABICS WEST-CR" + + "EE CWOCANADIAN SYLLABICS CWOOCANADIAN SYLLABICS WEST-CREE CWOOCANADIAN S" + + "YLLABICS CWACANADIAN SYLLABICS WEST-CREE CWACANADIAN SYLLABICS CWAACANAD" + + "IAN SYLLABICS WEST-CREE CWAACANADIAN SYLLABICS NASKAPI CWAACANADIAN SYLL" + + "ABICS CCANADIAN SYLLABICS SAYISI THCANADIAN SYLLABICS MECANADIAN SYLLABI" + + "CS MAAICANADIAN SYLLABICS MICANADIAN SYLLABICS MIICANADIAN SYLLABICS MOC" + + "ANADIAN SYLLABICS MOOCANADIAN SYLLABICS Y-CREE MOOCANADIAN SYLLABICS MAC" + + "ANADIAN SYLLABICS MAACANADIAN SYLLABICS MWECANADIAN SYLLABICS WEST-CREE " + + "MWECANADIAN SYLLABICS MWICANADIAN SYLLABICS WEST-CREE MWICANADIAN SYLLAB" + + "ICS MWIICANADIAN SYLLABICS WEST-CREE MWIICANADIAN SYLLABICS MWOCANADIAN " + + "SYLLABICS WEST-CREE MWOCANADIAN SYLLABICS MWOOCANADIAN SYLLABICS WEST-CR" + + "EE MWOOCANADIAN SYLLABICS MWACANADIAN SYLLABICS WEST-CREE MWACANADIAN SY" + + "LLABICS MWAACANADIAN SYLLABICS WEST-CREE MWAACANADIAN SYLLABICS NASKAPI " + + "MWAACANADIAN SYLLABICS MCANADIAN SYLLABICS WEST-CREE MCANADIAN SYLLABICS" + + " MHCANADIAN SYLLABICS ATHAPASCAN MCANADIAN SYLLABICS SAYISI MCANADIAN SY" + + "LLABICS NECANADIAN SYLLABICS NAAICANADIAN SYLLABICS NICANADIAN SYLLABICS" + + " NIICANADIAN SYLLABICS NOCANADIAN SYLLABICS NOOCANADIAN SYLLABICS Y-CREE" + + " NOOCANADIAN SYLLABICS NACANADIAN SYLLABICS NAACANADIAN SYLLABICS NWECAN" + + "ADIAN SYLLABICS WEST-CREE NWECANADIAN SYLLABICS NWACANADIAN SYLLABICS WE" + + "ST-CREE NWACANADIAN SYLLABICS NWAACANADIAN SYLLABICS WEST-CREE NWAACANAD" + + "IAN SYLLABICS NASKAPI NWAACANADIAN SYLLABICS NCANADIAN SYLLABICS CARRIER" + + " NGCANADIAN SYLLABICS NHCANADIAN SYLLABICS LECANADIAN SYLLABICS LAAICANA" + + "DIAN SYLLABICS LICANADIAN SYLLABICS LIICANADIAN SYLLABICS LOCANADIAN SYL" + + "LABICS LOOCANADIAN SYLLABICS Y-CREE LOOCANADIAN SYLLABICS LACANADIAN SYL" + + "LABICS LAACANADIAN SYLLABICS LWECANADIAN SYLLABICS WEST-CREE LWECANADIAN" + + " SYLLABICS LWICANADIAN SYLLABICS WEST-CREE LWICANADIAN SYLLABICS LWIICAN" + + "ADIAN SYLLABICS WEST-CREE LWIICANADIAN SYLLABICS LWOCANADIAN SYLLABICS W") + ("" + + "EST-CREE LWOCANADIAN SYLLABICS LWOOCANADIAN SYLLABICS WEST-CREE LWOOCANA" + + "DIAN SYLLABICS LWACANADIAN SYLLABICS WEST-CREE LWACANADIAN SYLLABICS LWA" + + "ACANADIAN SYLLABICS WEST-CREE LWAACANADIAN SYLLABICS LCANADIAN SYLLABICS" + + " WEST-CREE LCANADIAN SYLLABICS MEDIAL LCANADIAN SYLLABICS SECANADIAN SYL" + + "LABICS SAAICANADIAN SYLLABICS SICANADIAN SYLLABICS SIICANADIAN SYLLABICS" + + " SOCANADIAN SYLLABICS SOOCANADIAN SYLLABICS Y-CREE SOOCANADIAN SYLLABICS" + + " SACANADIAN SYLLABICS SAACANADIAN SYLLABICS SWECANADIAN SYLLABICS WEST-C" + + "REE SWECANADIAN SYLLABICS SWICANADIAN SYLLABICS WEST-CREE SWICANADIAN SY" + + "LLABICS SWIICANADIAN SYLLABICS WEST-CREE SWIICANADIAN SYLLABICS SWOCANAD" + + "IAN SYLLABICS WEST-CREE SWOCANADIAN SYLLABICS SWOOCANADIAN SYLLABICS WES" + + "T-CREE SWOOCANADIAN SYLLABICS SWACANADIAN SYLLABICS WEST-CREE SWACANADIA" + + "N SYLLABICS SWAACANADIAN SYLLABICS WEST-CREE SWAACANADIAN SYLLABICS NASK" + + "API SWAACANADIAN SYLLABICS SCANADIAN SYLLABICS ATHAPASCAN SCANADIAN SYLL" + + "ABICS SWCANADIAN SYLLABICS BLACKFOOT SCANADIAN SYLLABICS MOOSE-CREE SKCA" + + "NADIAN SYLLABICS NASKAPI SKWCANADIAN SYLLABICS NASKAPI S-WCANADIAN SYLLA" + + "BICS NASKAPI SPWACANADIAN SYLLABICS NASKAPI STWACANADIAN SYLLABICS NASKA" + + "PI SKWACANADIAN SYLLABICS NASKAPI SCWACANADIAN SYLLABICS SHECANADIAN SYL" + + "LABICS SHICANADIAN SYLLABICS SHIICANADIAN SYLLABICS SHOCANADIAN SYLLABIC" + + "S SHOOCANADIAN SYLLABICS SHACANADIAN SYLLABICS SHAACANADIAN SYLLABICS SH" + + "WECANADIAN SYLLABICS WEST-CREE SHWECANADIAN SYLLABICS SHWICANADIAN SYLLA" + + "BICS WEST-CREE SHWICANADIAN SYLLABICS SHWIICANADIAN SYLLABICS WEST-CREE " + + "SHWIICANADIAN SYLLABICS SHWOCANADIAN SYLLABICS WEST-CREE SHWOCANADIAN SY" + + "LLABICS SHWOOCANADIAN SYLLABICS WEST-CREE SHWOOCANADIAN SYLLABICS SHWACA" + + "NADIAN SYLLABICS WEST-CREE SHWACANADIAN SYLLABICS SHWAACANADIAN SYLLABIC" + + "S WEST-CREE SHWAACANADIAN SYLLABICS SHCANADIAN SYLLABICS YECANADIAN SYLL" + + "ABICS YAAICANADIAN SYLLABICS YICANADIAN SYLLABICS YIICANADIAN SYLLABICS " + + "YOCANADIAN SYLLABICS YOOCANADIAN SYLLABICS Y-CREE YOOCANADIAN SYLLABICS " + + "YACANADIAN SYLLABICS YAACANADIAN SYLLABICS YWECANADIAN SYLLABICS WEST-CR" + + "EE YWECANADIAN SYLLABICS YWICANADIAN SYLLABICS WEST-CREE YWICANADIAN SYL" + + "LABICS YWIICANADIAN SYLLABICS WEST-CREE YWIICANADIAN SYLLABICS YWOCANADI" + + "AN SYLLABICS WEST-CREE YWOCANADIAN SYLLABICS YWOOCANADIAN SYLLABICS WEST" + + "-CREE YWOOCANADIAN SYLLABICS YWACANADIAN SYLLABICS WEST-CREE YWACANADIAN" + + " SYLLABICS YWAACANADIAN SYLLABICS WEST-CREE YWAACANADIAN SYLLABICS NASKA" + + "PI YWAACANADIAN SYLLABICS YCANADIAN SYLLABICS BIBLE-CREE YCANADIAN SYLLA" + + "BICS WEST-CREE YCANADIAN SYLLABICS SAYISI YICANADIAN SYLLABICS RECANADIA" + + "N SYLLABICS R-CREE RECANADIAN SYLLABICS WEST-CREE LECANADIAN SYLLABICS R" + + "AAICANADIAN SYLLABICS RICANADIAN SYLLABICS RIICANADIAN SYLLABICS ROCANAD" + + "IAN SYLLABICS ROOCANADIAN SYLLABICS WEST-CREE LOCANADIAN SYLLABICS RACAN" + + "ADIAN SYLLABICS RAACANADIAN SYLLABICS WEST-CREE LACANADIAN SYLLABICS RWA" + + "ACANADIAN SYLLABICS WEST-CREE RWAACANADIAN SYLLABICS RCANADIAN SYLLABICS" + + " WEST-CREE RCANADIAN SYLLABICS MEDIAL RCANADIAN SYLLABICS FECANADIAN SYL" + + "LABICS FAAICANADIAN SYLLABICS FICANADIAN SYLLABICS FIICANADIAN SYLLABICS" + + " FOCANADIAN SYLLABICS FOOCANADIAN SYLLABICS FACANADIAN SYLLABICS FAACANA" + + "DIAN SYLLABICS FWAACANADIAN SYLLABICS WEST-CREE FWAACANADIAN SYLLABICS F" + + "CANADIAN SYLLABICS THECANADIAN SYLLABICS N-CREE THECANADIAN SYLLABICS TH" + + "ICANADIAN SYLLABICS N-CREE THICANADIAN SYLLABICS THIICANADIAN SYLLABICS " + + "N-CREE THIICANADIAN SYLLABICS THOCANADIAN SYLLABICS THOOCANADIAN SYLLABI" + + "CS THACANADIAN SYLLABICS THAACANADIAN SYLLABICS THWAACANADIAN SYLLABICS " + + "WEST-CREE THWAACANADIAN SYLLABICS THCANADIAN SYLLABICS TTHECANADIAN SYLL" + + "ABICS TTHICANADIAN SYLLABICS TTHOCANADIAN SYLLABICS TTHACANADIAN SYLLABI" + + "CS TTHCANADIAN SYLLABICS TYECANADIAN SYLLABICS TYICANADIAN SYLLABICS TYO" + + "CANADIAN SYLLABICS TYACANADIAN SYLLABICS NUNAVIK HECANADIAN SYLLABICS NU" + + "NAVIK HICANADIAN SYLLABICS NUNAVIK HIICANADIAN SYLLABICS NUNAVIK HOCANAD" + + "IAN SYLLABICS NUNAVIK HOOCANADIAN SYLLABICS NUNAVIK HACANADIAN SYLLABICS" + + " NUNAVIK HAACANADIAN SYLLABICS NUNAVIK HCANADIAN SYLLABICS NUNAVUT HCANA" + + "DIAN SYLLABICS HKCANADIAN SYLLABICS QAAICANADIAN SYLLABICS QICANADIAN SY" + + "LLABICS QIICANADIAN SYLLABICS QOCANADIAN SYLLABICS QOOCANADIAN SYLLABICS" + + " QACANADIAN SYLLABICS QAACANADIAN SYLLABICS QCANADIAN SYLLABICS TLHECANA" + + "DIAN SYLLABICS TLHICANADIAN SYLLABICS TLHOCANADIAN SYLLABICS TLHACANADIA" + + "N SYLLABICS WEST-CREE RECANADIAN SYLLABICS WEST-CREE RICANADIAN SYLLABIC" + + "S WEST-CREE ROCANADIAN SYLLABICS WEST-CREE RACANADIAN SYLLABICS NGAAICAN" + + "ADIAN SYLLABICS NGICANADIAN SYLLABICS NGIICANADIAN SYLLABICS NGOCANADIAN" + + " SYLLABICS NGOOCANADIAN SYLLABICS NGACANADIAN SYLLABICS NGAACANADIAN SYL" + + "LABICS NGCANADIAN SYLLABICS NNGCANADIAN SYLLABICS SAYISI SHECANADIAN SYL") + ("" + + "LABICS SAYISI SHICANADIAN SYLLABICS SAYISI SHOCANADIAN SYLLABICS SAYISI " + + "SHACANADIAN SYLLABICS WOODS-CREE THECANADIAN SYLLABICS WOODS-CREE THICAN" + + "ADIAN SYLLABICS WOODS-CREE THOCANADIAN SYLLABICS WOODS-CREE THACANADIAN " + + "SYLLABICS WOODS-CREE THCANADIAN SYLLABICS LHICANADIAN SYLLABICS LHIICANA" + + "DIAN SYLLABICS LHOCANADIAN SYLLABICS LHOOCANADIAN SYLLABICS LHACANADIAN " + + "SYLLABICS LHAACANADIAN SYLLABICS LHCANADIAN SYLLABICS TH-CREE THECANADIA" + + "N SYLLABICS TH-CREE THICANADIAN SYLLABICS TH-CREE THIICANADIAN SYLLABICS" + + " TH-CREE THOCANADIAN SYLLABICS TH-CREE THOOCANADIAN SYLLABICS TH-CREE TH" + + "ACANADIAN SYLLABICS TH-CREE THAACANADIAN SYLLABICS TH-CREE THCANADIAN SY" + + "LLABICS AIVILIK BCANADIAN SYLLABICS BLACKFOOT ECANADIAN SYLLABICS BLACKF" + + "OOT ICANADIAN SYLLABICS BLACKFOOT OCANADIAN SYLLABICS BLACKFOOT ACANADIA" + + "N SYLLABICS BLACKFOOT WECANADIAN SYLLABICS BLACKFOOT WICANADIAN SYLLABIC" + + "S BLACKFOOT WOCANADIAN SYLLABICS BLACKFOOT WACANADIAN SYLLABICS BLACKFOO" + + "T NECANADIAN SYLLABICS BLACKFOOT NICANADIAN SYLLABICS BLACKFOOT NOCANADI" + + "AN SYLLABICS BLACKFOOT NACANADIAN SYLLABICS BLACKFOOT KECANADIAN SYLLABI" + + "CS BLACKFOOT KICANADIAN SYLLABICS BLACKFOOT KOCANADIAN SYLLABICS BLACKFO" + + "OT KACANADIAN SYLLABICS SAYISI HECANADIAN SYLLABICS SAYISI HICANADIAN SY" + + "LLABICS SAYISI HOCANADIAN SYLLABICS SAYISI HACANADIAN SYLLABICS CARRIER " + + "GHUCANADIAN SYLLABICS CARRIER GHOCANADIAN SYLLABICS CARRIER GHECANADIAN " + + "SYLLABICS CARRIER GHEECANADIAN SYLLABICS CARRIER GHICANADIAN SYLLABICS C" + + "ARRIER GHACANADIAN SYLLABICS CARRIER RUCANADIAN SYLLABICS CARRIER ROCANA" + + "DIAN SYLLABICS CARRIER RECANADIAN SYLLABICS CARRIER REECANADIAN SYLLABIC" + + "S CARRIER RICANADIAN SYLLABICS CARRIER RACANADIAN SYLLABICS CARRIER WUCA" + + "NADIAN SYLLABICS CARRIER WOCANADIAN SYLLABICS CARRIER WECANADIAN SYLLABI" + + "CS CARRIER WEECANADIAN SYLLABICS CARRIER WICANADIAN SYLLABICS CARRIER WA" + + "CANADIAN SYLLABICS CARRIER HWUCANADIAN SYLLABICS CARRIER HWOCANADIAN SYL" + + "LABICS CARRIER HWECANADIAN SYLLABICS CARRIER HWEECANADIAN SYLLABICS CARR" + + "IER HWICANADIAN SYLLABICS CARRIER HWACANADIAN SYLLABICS CARRIER THUCANAD" + + "IAN SYLLABICS CARRIER THOCANADIAN SYLLABICS CARRIER THECANADIAN SYLLABIC" + + "S CARRIER THEECANADIAN SYLLABICS CARRIER THICANADIAN SYLLABICS CARRIER T" + + "HACANADIAN SYLLABICS CARRIER TTUCANADIAN SYLLABICS CARRIER TTOCANADIAN S" + + "YLLABICS CARRIER TTECANADIAN SYLLABICS CARRIER TTEECANADIAN SYLLABICS CA" + + "RRIER TTICANADIAN SYLLABICS CARRIER TTACANADIAN SYLLABICS CARRIER PUCANA" + + "DIAN SYLLABICS CARRIER POCANADIAN SYLLABICS CARRIER PECANADIAN SYLLABICS" + + " CARRIER PEECANADIAN SYLLABICS CARRIER PICANADIAN SYLLABICS CARRIER PACA" + + "NADIAN SYLLABICS CARRIER PCANADIAN SYLLABICS CARRIER GUCANADIAN SYLLABIC" + + "S CARRIER GOCANADIAN SYLLABICS CARRIER GECANADIAN SYLLABICS CARRIER GEEC" + + "ANADIAN SYLLABICS CARRIER GICANADIAN SYLLABICS CARRIER GACANADIAN SYLLAB" + + "ICS CARRIER KHUCANADIAN SYLLABICS CARRIER KHOCANADIAN SYLLABICS CARRIER " + + "KHECANADIAN SYLLABICS CARRIER KHEECANADIAN SYLLABICS CARRIER KHICANADIAN" + + " SYLLABICS CARRIER KHACANADIAN SYLLABICS CARRIER KKUCANADIAN SYLLABICS C" + + "ARRIER KKOCANADIAN SYLLABICS CARRIER KKECANADIAN SYLLABICS CARRIER KKEEC" + + "ANADIAN SYLLABICS CARRIER KKICANADIAN SYLLABICS CARRIER KKACANADIAN SYLL" + + "ABICS CARRIER KKCANADIAN SYLLABICS CARRIER NUCANADIAN SYLLABICS CARRIER " + + "NOCANADIAN SYLLABICS CARRIER NECANADIAN SYLLABICS CARRIER NEECANADIAN SY" + + "LLABICS CARRIER NICANADIAN SYLLABICS CARRIER NACANADIAN SYLLABICS CARRIE" + + "R MUCANADIAN SYLLABICS CARRIER MOCANADIAN SYLLABICS CARRIER MECANADIAN S" + + "YLLABICS CARRIER MEECANADIAN SYLLABICS CARRIER MICANADIAN SYLLABICS CARR" + + "IER MACANADIAN SYLLABICS CARRIER YUCANADIAN SYLLABICS CARRIER YOCANADIAN" + + " SYLLABICS CARRIER YECANADIAN SYLLABICS CARRIER YEECANADIAN SYLLABICS CA" + + "RRIER YICANADIAN SYLLABICS CARRIER YACANADIAN SYLLABICS CARRIER JUCANADI" + + "AN SYLLABICS SAYISI JUCANADIAN SYLLABICS CARRIER JOCANADIAN SYLLABICS CA" + + "RRIER JECANADIAN SYLLABICS CARRIER JEECANADIAN SYLLABICS CARRIER JICANAD" + + "IAN SYLLABICS SAYISI JICANADIAN SYLLABICS CARRIER JACANADIAN SYLLABICS C" + + "ARRIER JJUCANADIAN SYLLABICS CARRIER JJOCANADIAN SYLLABICS CARRIER JJECA" + + "NADIAN SYLLABICS CARRIER JJEECANADIAN SYLLABICS CARRIER JJICANADIAN SYLL" + + "ABICS CARRIER JJACANADIAN SYLLABICS CARRIER LUCANADIAN SYLLABICS CARRIER" + + " LOCANADIAN SYLLABICS CARRIER LECANADIAN SYLLABICS CARRIER LEECANADIAN S" + + "YLLABICS CARRIER LICANADIAN SYLLABICS CARRIER LACANADIAN SYLLABICS CARRI" + + "ER DLUCANADIAN SYLLABICS CARRIER DLOCANADIAN SYLLABICS CARRIER DLECANADI" + + "AN SYLLABICS CARRIER DLEECANADIAN SYLLABICS CARRIER DLICANADIAN SYLLABIC" + + "S CARRIER DLACANADIAN SYLLABICS CARRIER LHUCANADIAN SYLLABICS CARRIER LH" + + "OCANADIAN SYLLABICS CARRIER LHECANADIAN SYLLABICS CARRIER LHEECANADIAN S" + + "YLLABICS CARRIER LHICANADIAN SYLLABICS CARRIER LHACANADIAN SYLLABICS CAR") + ("" + + "RIER TLHUCANADIAN SYLLABICS CARRIER TLHOCANADIAN SYLLABICS CARRIER TLHEC" + + "ANADIAN SYLLABICS CARRIER TLHEECANADIAN SYLLABICS CARRIER TLHICANADIAN S" + + "YLLABICS CARRIER TLHACANADIAN SYLLABICS CARRIER TLUCANADIAN SYLLABICS CA" + + "RRIER TLOCANADIAN SYLLABICS CARRIER TLECANADIAN SYLLABICS CARRIER TLEECA" + + "NADIAN SYLLABICS CARRIER TLICANADIAN SYLLABICS CARRIER TLACANADIAN SYLLA" + + "BICS CARRIER ZUCANADIAN SYLLABICS CARRIER ZOCANADIAN SYLLABICS CARRIER Z" + + "ECANADIAN SYLLABICS CARRIER ZEECANADIAN SYLLABICS CARRIER ZICANADIAN SYL" + + "LABICS CARRIER ZACANADIAN SYLLABICS CARRIER ZCANADIAN SYLLABICS CARRIER " + + "INITIAL ZCANADIAN SYLLABICS CARRIER DZUCANADIAN SYLLABICS CARRIER DZOCAN" + + "ADIAN SYLLABICS CARRIER DZECANADIAN SYLLABICS CARRIER DZEECANADIAN SYLLA" + + "BICS CARRIER DZICANADIAN SYLLABICS CARRIER DZACANADIAN SYLLABICS CARRIER" + + " SUCANADIAN SYLLABICS CARRIER SOCANADIAN SYLLABICS CARRIER SECANADIAN SY" + + "LLABICS CARRIER SEECANADIAN SYLLABICS CARRIER SICANADIAN SYLLABICS CARRI" + + "ER SACANADIAN SYLLABICS CARRIER SHUCANADIAN SYLLABICS CARRIER SHOCANADIA" + + "N SYLLABICS CARRIER SHECANADIAN SYLLABICS CARRIER SHEECANADIAN SYLLABICS" + + " CARRIER SHICANADIAN SYLLABICS CARRIER SHACANADIAN SYLLABICS CARRIER SHC" + + "ANADIAN SYLLABICS CARRIER TSUCANADIAN SYLLABICS CARRIER TSOCANADIAN SYLL" + + "ABICS CARRIER TSECANADIAN SYLLABICS CARRIER TSEECANADIAN SYLLABICS CARRI" + + "ER TSICANADIAN SYLLABICS CARRIER TSACANADIAN SYLLABICS CARRIER CHUCANADI" + + "AN SYLLABICS CARRIER CHOCANADIAN SYLLABICS CARRIER CHECANADIAN SYLLABICS" + + " CARRIER CHEECANADIAN SYLLABICS CARRIER CHICANADIAN SYLLABICS CARRIER CH" + + "ACANADIAN SYLLABICS CARRIER TTSUCANADIAN SYLLABICS CARRIER TTSOCANADIAN " + + "SYLLABICS CARRIER TTSECANADIAN SYLLABICS CARRIER TTSEECANADIAN SYLLABICS" + + " CARRIER TTSICANADIAN SYLLABICS CARRIER TTSACANADIAN SYLLABICS CHI SIGNC" + + "ANADIAN SYLLABICS FULL STOPCANADIAN SYLLABICS QAICANADIAN SYLLABICS NGAI" + + "CANADIAN SYLLABICS NNGICANADIAN SYLLABICS NNGIICANADIAN SYLLABICS NNGOCA" + + "NADIAN SYLLABICS NNGOOCANADIAN SYLLABICS NNGACANADIAN SYLLABICS NNGAACAN" + + "ADIAN SYLLABICS WOODS-CREE THWEECANADIAN SYLLABICS WOODS-CREE THWICANADI" + + "AN SYLLABICS WOODS-CREE THWIICANADIAN SYLLABICS WOODS-CREE THWOCANADIAN " + + "SYLLABICS WOODS-CREE THWOOCANADIAN SYLLABICS WOODS-CREE THWACANADIAN SYL" + + "LABICS WOODS-CREE THWAACANADIAN SYLLABICS WOODS-CREE FINAL THCANADIAN SY" + + "LLABICS BLACKFOOT WOGHAM SPACE MARKOGHAM LETTER BEITHOGHAM LETTER LUISOG" + + "HAM LETTER FEARNOGHAM LETTER SAILOGHAM LETTER NIONOGHAM LETTER UATHOGHAM" + + " LETTER DAIROGHAM LETTER TINNEOGHAM LETTER COLLOGHAM LETTER CEIRTOGHAM L" + + "ETTER MUINOGHAM LETTER GORTOGHAM LETTER NGEADALOGHAM LETTER STRAIFOGHAM " + + "LETTER RUISOGHAM LETTER AILMOGHAM LETTER ONNOGHAM LETTER UROGHAM LETTER " + + "EADHADHOGHAM LETTER IODHADHOGHAM LETTER EABHADHOGHAM LETTER OROGHAM LETT" + + "ER UILLEANNOGHAM LETTER IFINOGHAM LETTER EAMHANCHOLLOGHAM LETTER PEITHOG" + + "HAM FEATHER MARKOGHAM REVERSED FEATHER MARKRUNIC LETTER FEHU FEOH FE FRU" + + "NIC LETTER VRUNIC LETTER URUZ UR URUNIC LETTER YRRUNIC LETTER YRUNIC LET" + + "TER WRUNIC LETTER THURISAZ THURS THORNRUNIC LETTER ETHRUNIC LETTER ANSUZ" + + " ARUNIC LETTER OS ORUNIC LETTER AC ARUNIC LETTER AESCRUNIC LETTER LONG-B" + + "RANCH-OSS ORUNIC LETTER SHORT-TWIG-OSS ORUNIC LETTER ORUNIC LETTER OERUN" + + "IC LETTER ONRUNIC LETTER RAIDO RAD REID RRUNIC LETTER KAUNARUNIC LETTER " + + "CENRUNIC LETTER KAUN KRUNIC LETTER GRUNIC LETTER ENGRUNIC LETTER GEBO GY" + + "FU GRUNIC LETTER GARRUNIC LETTER WUNJO WYNN WRUNIC LETTER HAGLAZ HRUNIC " + + "LETTER HAEGL HRUNIC LETTER LONG-BRANCH-HAGALL HRUNIC LETTER SHORT-TWIG-H" + + "AGALL HRUNIC LETTER NAUDIZ NYD NAUD NRUNIC LETTER SHORT-TWIG-NAUD NRUNIC" + + " LETTER DOTTED-NRUNIC LETTER ISAZ IS ISS IRUNIC LETTER ERUNIC LETTER JER" + + "AN JRUNIC LETTER GERRUNIC LETTER LONG-BRANCH-AR AERUNIC LETTER SHORT-TWI" + + "G-AR ARUNIC LETTER IWAZ EOHRUNIC LETTER PERTHO PEORTH PRUNIC LETTER ALGI" + + "Z EOLHXRUNIC LETTER SOWILO SRUNIC LETTER SIGEL LONG-BRANCH-SOL SRUNIC LE" + + "TTER SHORT-TWIG-SOL SRUNIC LETTER CRUNIC LETTER ZRUNIC LETTER TIWAZ TIR " + + "TYR TRUNIC LETTER SHORT-TWIG-TYR TRUNIC LETTER DRUNIC LETTER BERKANAN BE" + + "ORC BJARKAN BRUNIC LETTER SHORT-TWIG-BJARKAN BRUNIC LETTER DOTTED-PRUNIC" + + " LETTER OPEN-PRUNIC LETTER EHWAZ EH ERUNIC LETTER MANNAZ MAN MRUNIC LETT" + + "ER LONG-BRANCH-MADR MRUNIC LETTER SHORT-TWIG-MADR MRUNIC LETTER LAUKAZ L" + + "AGU LOGR LRUNIC LETTER DOTTED-LRUNIC LETTER INGWAZRUNIC LETTER INGRUNIC " + + "LETTER DAGAZ DAEG DRUNIC LETTER OTHALAN ETHEL ORUNIC LETTER EARRUNIC LET" + + "TER IORRUNIC LETTER CWEORTHRUNIC LETTER CALCRUNIC LETTER CEALCRUNIC LETT" + + "ER STANRUNIC LETTER LONG-BRANCH-YRRUNIC LETTER SHORT-TWIG-YRRUNIC LETTER" + + " ICELANDIC-YRRUNIC LETTER QRUNIC LETTER XRUNIC SINGLE PUNCTUATIONRUNIC M" + + "ULTIPLE PUNCTUATIONRUNIC CROSS PUNCTUATIONRUNIC ARLAUG SYMBOLRUNIC TVIMA" + + "DUR SYMBOLRUNIC BELGTHOR SYMBOLRUNIC LETTER KRUNIC LETTER SHRUNIC LETTER") + ("" + + " OORUNIC LETTER FRANKS CASKET OSRUNIC LETTER FRANKS CASKET ISRUNIC LETTE" + + "R FRANKS CASKET EHRUNIC LETTER FRANKS CASKET ACRUNIC LETTER FRANKS CASKE" + + "T AESCTAGALOG LETTER ATAGALOG LETTER ITAGALOG LETTER UTAGALOG LETTER KAT" + + "AGALOG LETTER GATAGALOG LETTER NGATAGALOG LETTER TATAGALOG LETTER DATAGA" + + "LOG LETTER NATAGALOG LETTER PATAGALOG LETTER BATAGALOG LETTER MATAGALOG " + + "LETTER YATAGALOG LETTER LATAGALOG LETTER WATAGALOG LETTER SATAGALOG LETT" + + "ER HATAGALOG VOWEL SIGN ITAGALOG VOWEL SIGN UTAGALOG SIGN VIRAMAHANUNOO " + + "LETTER AHANUNOO LETTER IHANUNOO LETTER UHANUNOO LETTER KAHANUNOO LETTER " + + "GAHANUNOO LETTER NGAHANUNOO LETTER TAHANUNOO LETTER DAHANUNOO LETTER NAH" + + "ANUNOO LETTER PAHANUNOO LETTER BAHANUNOO LETTER MAHANUNOO LETTER YAHANUN" + + "OO LETTER RAHANUNOO LETTER LAHANUNOO LETTER WAHANUNOO LETTER SAHANUNOO L" + + "ETTER HAHANUNOO VOWEL SIGN IHANUNOO VOWEL SIGN UHANUNOO SIGN PAMUDPODPHI" + + "LIPPINE SINGLE PUNCTUATIONPHILIPPINE DOUBLE PUNCTUATIONBUHID LETTER ABUH" + + "ID LETTER IBUHID LETTER UBUHID LETTER KABUHID LETTER GABUHID LETTER NGAB" + + "UHID LETTER TABUHID LETTER DABUHID LETTER NABUHID LETTER PABUHID LETTER " + + "BABUHID LETTER MABUHID LETTER YABUHID LETTER RABUHID LETTER LABUHID LETT" + + "ER WABUHID LETTER SABUHID LETTER HABUHID VOWEL SIGN IBUHID VOWEL SIGN UT" + + "AGBANWA LETTER ATAGBANWA LETTER ITAGBANWA LETTER UTAGBANWA LETTER KATAGB" + + "ANWA LETTER GATAGBANWA LETTER NGATAGBANWA LETTER TATAGBANWA LETTER DATAG" + + "BANWA LETTER NATAGBANWA LETTER PATAGBANWA LETTER BATAGBANWA LETTER MATAG" + + "BANWA LETTER YATAGBANWA LETTER LATAGBANWA LETTER WATAGBANWA LETTER SATAG" + + "BANWA VOWEL SIGN ITAGBANWA VOWEL SIGN UKHMER LETTER KAKHMER LETTER KHAKH" + + "MER LETTER KOKHMER LETTER KHOKHMER LETTER NGOKHMER LETTER CAKHMER LETTER" + + " CHAKHMER LETTER COKHMER LETTER CHOKHMER LETTER NYOKHMER LETTER DAKHMER " + + "LETTER TTHAKHMER LETTER DOKHMER LETTER TTHOKHMER LETTER NNOKHMER LETTER " + + "TAKHMER LETTER THAKHMER LETTER TOKHMER LETTER THOKHMER LETTER NOKHMER LE" + + "TTER BAKHMER LETTER PHAKHMER LETTER POKHMER LETTER PHOKHMER LETTER MOKHM" + + "ER LETTER YOKHMER LETTER ROKHMER LETTER LOKHMER LETTER VOKHMER LETTER SH" + + "AKHMER LETTER SSOKHMER LETTER SAKHMER LETTER HAKHMER LETTER LAKHMER LETT" + + "ER QAKHMER INDEPENDENT VOWEL QAQKHMER INDEPENDENT VOWEL QAAKHMER INDEPEN" + + "DENT VOWEL QIKHMER INDEPENDENT VOWEL QIIKHMER INDEPENDENT VOWEL QUKHMER " + + "INDEPENDENT VOWEL QUKKHMER INDEPENDENT VOWEL QUUKHMER INDEPENDENT VOWEL " + + "QUUVKHMER INDEPENDENT VOWEL RYKHMER INDEPENDENT VOWEL RYYKHMER INDEPENDE" + + "NT VOWEL LYKHMER INDEPENDENT VOWEL LYYKHMER INDEPENDENT VOWEL QEKHMER IN" + + "DEPENDENT VOWEL QAIKHMER INDEPENDENT VOWEL QOO TYPE ONEKHMER INDEPENDENT" + + " VOWEL QOO TYPE TWOKHMER INDEPENDENT VOWEL QAUKHMER VOWEL INHERENT AQKHM" + + "ER VOWEL INHERENT AAKHMER VOWEL SIGN AAKHMER VOWEL SIGN IKHMER VOWEL SIG" + + "N IIKHMER VOWEL SIGN YKHMER VOWEL SIGN YYKHMER VOWEL SIGN UKHMER VOWEL S" + + "IGN UUKHMER VOWEL SIGN UAKHMER VOWEL SIGN OEKHMER VOWEL SIGN YAKHMER VOW" + + "EL SIGN IEKHMER VOWEL SIGN EKHMER VOWEL SIGN AEKHMER VOWEL SIGN AIKHMER " + + "VOWEL SIGN OOKHMER VOWEL SIGN AUKHMER SIGN NIKAHITKHMER SIGN REAHMUKKHME" + + "R SIGN YUUKALEAPINTUKHMER SIGN MUUSIKATOANKHMER SIGN TRIISAPKHMER SIGN B" + + "ANTOCKHMER SIGN ROBATKHMER SIGN TOANDAKHIATKHMER SIGN KAKABATKHMER SIGN " + + "AHSDAKHMER SIGN SAMYOK SANNYAKHMER SIGN VIRIAMKHMER SIGN COENGKHMER SIGN" + + " BATHAMASATKHMER SIGN KHANKHMER SIGN BARIYOOSANKHMER SIGN CAMNUC PII KUU" + + "HKHMER SIGN LEK TOOKHMER SIGN BEYYALKHMER SIGN PHNAEK MUANKHMER SIGN KOO" + + "MUUTKHMER CURRENCY SYMBOL RIELKHMER SIGN AVAKRAHASANYAKHMER SIGN ATTHACA" + + "NKHMER DIGIT ZEROKHMER DIGIT ONEKHMER DIGIT TWOKHMER DIGIT THREEKHMER DI" + + "GIT FOURKHMER DIGIT FIVEKHMER DIGIT SIXKHMER DIGIT SEVENKHMER DIGIT EIGH" + + "TKHMER DIGIT NINEKHMER SYMBOL LEK ATTAK SONKHMER SYMBOL LEK ATTAK MUOYKH" + + "MER SYMBOL LEK ATTAK PIIKHMER SYMBOL LEK ATTAK BEIKHMER SYMBOL LEK ATTAK" + + " BUONKHMER SYMBOL LEK ATTAK PRAMKHMER SYMBOL LEK ATTAK PRAM-MUOYKHMER SY" + + "MBOL LEK ATTAK PRAM-PIIKHMER SYMBOL LEK ATTAK PRAM-BEIKHMER SYMBOL LEK A" + + "TTAK PRAM-BUONMONGOLIAN BIRGAMONGOLIAN ELLIPSISMONGOLIAN COMMAMONGOLIAN " + + "FULL STOPMONGOLIAN COLONMONGOLIAN FOUR DOTSMONGOLIAN TODO SOFT HYPHENMON" + + "GOLIAN SIBE SYLLABLE BOUNDARY MARKERMONGOLIAN MANCHU COMMAMONGOLIAN MANC" + + "HU FULL STOPMONGOLIAN NIRUGUMONGOLIAN FREE VARIATION SELECTOR ONEMONGOLI" + + "AN FREE VARIATION SELECTOR TWOMONGOLIAN FREE VARIATION SELECTOR THREEMON" + + "GOLIAN VOWEL SEPARATORMONGOLIAN DIGIT ZEROMONGOLIAN DIGIT ONEMONGOLIAN D" + + "IGIT TWOMONGOLIAN DIGIT THREEMONGOLIAN DIGIT FOURMONGOLIAN DIGIT FIVEMON" + + "GOLIAN DIGIT SIXMONGOLIAN DIGIT SEVENMONGOLIAN DIGIT EIGHTMONGOLIAN DIGI" + + "T NINEMONGOLIAN LETTER AMONGOLIAN LETTER EMONGOLIAN LETTER IMONGOLIAN LE" + + "TTER OMONGOLIAN LETTER UMONGOLIAN LETTER OEMONGOLIAN LETTER UEMONGOLIAN " + + "LETTER EEMONGOLIAN LETTER NAMONGOLIAN LETTER ANGMONGOLIAN LETTER BAMONGO") + ("" + + "LIAN LETTER PAMONGOLIAN LETTER QAMONGOLIAN LETTER GAMONGOLIAN LETTER MAM" + + "ONGOLIAN LETTER LAMONGOLIAN LETTER SAMONGOLIAN LETTER SHAMONGOLIAN LETTE" + + "R TAMONGOLIAN LETTER DAMONGOLIAN LETTER CHAMONGOLIAN LETTER JAMONGOLIAN " + + "LETTER YAMONGOLIAN LETTER RAMONGOLIAN LETTER WAMONGOLIAN LETTER FAMONGOL" + + "IAN LETTER KAMONGOLIAN LETTER KHAMONGOLIAN LETTER TSAMONGOLIAN LETTER ZA" + + "MONGOLIAN LETTER HAAMONGOLIAN LETTER ZRAMONGOLIAN LETTER LHAMONGOLIAN LE" + + "TTER ZHIMONGOLIAN LETTER CHIMONGOLIAN LETTER TODO LONG VOWEL SIGNMONGOLI" + + "AN LETTER TODO EMONGOLIAN LETTER TODO IMONGOLIAN LETTER TODO OMONGOLIAN " + + "LETTER TODO UMONGOLIAN LETTER TODO OEMONGOLIAN LETTER TODO UEMONGOLIAN L" + + "ETTER TODO ANGMONGOLIAN LETTER TODO BAMONGOLIAN LETTER TODO PAMONGOLIAN " + + "LETTER TODO QAMONGOLIAN LETTER TODO GAMONGOLIAN LETTER TODO MAMONGOLIAN " + + "LETTER TODO TAMONGOLIAN LETTER TODO DAMONGOLIAN LETTER TODO CHAMONGOLIAN" + + " LETTER TODO JAMONGOLIAN LETTER TODO TSAMONGOLIAN LETTER TODO YAMONGOLIA" + + "N LETTER TODO WAMONGOLIAN LETTER TODO KAMONGOLIAN LETTER TODO GAAMONGOLI" + + "AN LETTER TODO HAAMONGOLIAN LETTER TODO JIAMONGOLIAN LETTER TODO NIAMONG" + + "OLIAN LETTER TODO DZAMONGOLIAN LETTER SIBE EMONGOLIAN LETTER SIBE IMONGO" + + "LIAN LETTER SIBE IYMONGOLIAN LETTER SIBE UEMONGOLIAN LETTER SIBE UMONGOL" + + "IAN LETTER SIBE ANGMONGOLIAN LETTER SIBE KAMONGOLIAN LETTER SIBE GAMONGO" + + "LIAN LETTER SIBE HAMONGOLIAN LETTER SIBE PAMONGOLIAN LETTER SIBE SHAMONG" + + "OLIAN LETTER SIBE TAMONGOLIAN LETTER SIBE DAMONGOLIAN LETTER SIBE JAMONG" + + "OLIAN LETTER SIBE FAMONGOLIAN LETTER SIBE GAAMONGOLIAN LETTER SIBE HAAMO" + + "NGOLIAN LETTER SIBE TSAMONGOLIAN LETTER SIBE ZAMONGOLIAN LETTER SIBE RAA" + + "MONGOLIAN LETTER SIBE CHAMONGOLIAN LETTER SIBE ZHAMONGOLIAN LETTER MANCH" + + "U IMONGOLIAN LETTER MANCHU KAMONGOLIAN LETTER MANCHU RAMONGOLIAN LETTER " + + "MANCHU FAMONGOLIAN LETTER MANCHU ZHAMONGOLIAN LETTER ALI GALI ANUSVARA O" + + "NEMONGOLIAN LETTER ALI GALI VISARGA ONEMONGOLIAN LETTER ALI GALI DAMARUM" + + "ONGOLIAN LETTER ALI GALI UBADAMAMONGOLIAN LETTER ALI GALI INVERTED UBADA" + + "MAMONGOLIAN LETTER ALI GALI BALUDAMONGOLIAN LETTER ALI GALI THREE BALUDA" + + "MONGOLIAN LETTER ALI GALI AMONGOLIAN LETTER ALI GALI IMONGOLIAN LETTER A" + + "LI GALI KAMONGOLIAN LETTER ALI GALI NGAMONGOLIAN LETTER ALI GALI CAMONGO" + + "LIAN LETTER ALI GALI TTAMONGOLIAN LETTER ALI GALI TTHAMONGOLIAN LETTER A" + + "LI GALI DDAMONGOLIAN LETTER ALI GALI NNAMONGOLIAN LETTER ALI GALI TAMONG" + + "OLIAN LETTER ALI GALI DAMONGOLIAN LETTER ALI GALI PAMONGOLIAN LETTER ALI" + + " GALI PHAMONGOLIAN LETTER ALI GALI SSAMONGOLIAN LETTER ALI GALI ZHAMONGO" + + "LIAN LETTER ALI GALI ZAMONGOLIAN LETTER ALI GALI AHMONGOLIAN LETTER TODO" + + " ALI GALI TAMONGOLIAN LETTER TODO ALI GALI ZHAMONGOLIAN LETTER MANCHU AL" + + "I GALI GHAMONGOLIAN LETTER MANCHU ALI GALI NGAMONGOLIAN LETTER MANCHU AL" + + "I GALI CAMONGOLIAN LETTER MANCHU ALI GALI JHAMONGOLIAN LETTER MANCHU ALI" + + " GALI TTAMONGOLIAN LETTER MANCHU ALI GALI DDHAMONGOLIAN LETTER MANCHU AL" + + "I GALI TAMONGOLIAN LETTER MANCHU ALI GALI DHAMONGOLIAN LETTER MANCHU ALI" + + " GALI SSAMONGOLIAN LETTER MANCHU ALI GALI CYAMONGOLIAN LETTER MANCHU ALI" + + " GALI ZHAMONGOLIAN LETTER MANCHU ALI GALI ZAMONGOLIAN LETTER ALI GALI HA" + + "LF UMONGOLIAN LETTER ALI GALI HALF YAMONGOLIAN LETTER MANCHU ALI GALI BH" + + "AMONGOLIAN LETTER ALI GALI DAGALGAMONGOLIAN LETTER MANCHU ALI GALI LHACA" + + "NADIAN SYLLABICS OYCANADIAN SYLLABICS AYCANADIAN SYLLABICS AAYCANADIAN S" + + "YLLABICS WAYCANADIAN SYLLABICS POYCANADIAN SYLLABICS PAYCANADIAN SYLLABI" + + "CS PWOYCANADIAN SYLLABICS TAYCANADIAN SYLLABICS KAYCANADIAN SYLLABICS KW" + + "AYCANADIAN SYLLABICS MAYCANADIAN SYLLABICS NOYCANADIAN SYLLABICS NAYCANA" + + "DIAN SYLLABICS LAYCANADIAN SYLLABICS SOYCANADIAN SYLLABICS SAYCANADIAN S" + + "YLLABICS SHOYCANADIAN SYLLABICS SHAYCANADIAN SYLLABICS SHWOYCANADIAN SYL" + + "LABICS YOYCANADIAN SYLLABICS YAYCANADIAN SYLLABICS RAYCANADIAN SYLLABICS" + + " NWICANADIAN SYLLABICS OJIBWAY NWICANADIAN SYLLABICS NWIICANADIAN SYLLAB" + + "ICS OJIBWAY NWIICANADIAN SYLLABICS NWOCANADIAN SYLLABICS OJIBWAY NWOCANA" + + "DIAN SYLLABICS NWOOCANADIAN SYLLABICS OJIBWAY NWOOCANADIAN SYLLABICS RWE" + + "ECANADIAN SYLLABICS RWICANADIAN SYLLABICS RWIICANADIAN SYLLABICS RWOCANA" + + "DIAN SYLLABICS RWOOCANADIAN SYLLABICS RWACANADIAN SYLLABICS OJIBWAY PCAN" + + "ADIAN SYLLABICS OJIBWAY TCANADIAN SYLLABICS OJIBWAY KCANADIAN SYLLABICS " + + "OJIBWAY CCANADIAN SYLLABICS OJIBWAY MCANADIAN SYLLABICS OJIBWAY NCANADIA" + + "N SYLLABICS OJIBWAY SCANADIAN SYLLABICS OJIBWAY SHCANADIAN SYLLABICS EAS" + + "TERN WCANADIAN SYLLABICS WESTERN WCANADIAN SYLLABICS FINAL SMALL RINGCAN" + + "ADIAN SYLLABICS FINAL RAISED DOTCANADIAN SYLLABICS R-CREE RWECANADIAN SY" + + "LLABICS WEST-CREE LOOCANADIAN SYLLABICS WEST-CREE LAACANADIAN SYLLABICS " + + "THWECANADIAN SYLLABICS THWACANADIAN SYLLABICS TTHWECANADIAN SYLLABICS TT" + + "HOOCANADIAN SYLLABICS TTHAACANADIAN SYLLABICS TLHWECANADIAN SYLLABICS TL") + ("" + + "HOOCANADIAN SYLLABICS SAYISI SHWECANADIAN SYLLABICS SAYISI SHOOCANADIAN " + + "SYLLABICS SAYISI HOOCANADIAN SYLLABICS CARRIER GWUCANADIAN SYLLABICS CAR" + + "RIER DENE GEECANADIAN SYLLABICS CARRIER GAACANADIAN SYLLABICS CARRIER GW" + + "ACANADIAN SYLLABICS SAYISI JUUCANADIAN SYLLABICS CARRIER JWACANADIAN SYL" + + "LABICS BEAVER DENE LCANADIAN SYLLABICS BEAVER DENE RCANADIAN SYLLABICS C" + + "ARRIER DENTAL SLIMBU VOWEL-CARRIER LETTERLIMBU LETTER KALIMBU LETTER KHA" + + "LIMBU LETTER GALIMBU LETTER GHALIMBU LETTER NGALIMBU LETTER CALIMBU LETT" + + "ER CHALIMBU LETTER JALIMBU LETTER JHALIMBU LETTER YANLIMBU LETTER TALIMB" + + "U LETTER THALIMBU LETTER DALIMBU LETTER DHALIMBU LETTER NALIMBU LETTER P" + + "ALIMBU LETTER PHALIMBU LETTER BALIMBU LETTER BHALIMBU LETTER MALIMBU LET" + + "TER YALIMBU LETTER RALIMBU LETTER LALIMBU LETTER WALIMBU LETTER SHALIMBU" + + " LETTER SSALIMBU LETTER SALIMBU LETTER HALIMBU LETTER GYANLIMBU LETTER T" + + "RALIMBU VOWEL SIGN ALIMBU VOWEL SIGN ILIMBU VOWEL SIGN ULIMBU VOWEL SIGN" + + " EELIMBU VOWEL SIGN AILIMBU VOWEL SIGN OOLIMBU VOWEL SIGN AULIMBU VOWEL " + + "SIGN ELIMBU VOWEL SIGN OLIMBU SUBJOINED LETTER YALIMBU SUBJOINED LETTER " + + "RALIMBU SUBJOINED LETTER WALIMBU SMALL LETTER KALIMBU SMALL LETTER NGALI" + + "MBU SMALL LETTER ANUSVARALIMBU SMALL LETTER TALIMBU SMALL LETTER NALIMBU" + + " SMALL LETTER PALIMBU SMALL LETTER MALIMBU SMALL LETTER RALIMBU SMALL LE" + + "TTER LALIMBU SIGN MUKPHRENGLIMBU SIGN KEMPHRENGLIMBU SIGN SA-ILIMBU SIGN" + + " LOOLIMBU EXCLAMATION MARKLIMBU QUESTION MARKLIMBU DIGIT ZEROLIMBU DIGIT" + + " ONELIMBU DIGIT TWOLIMBU DIGIT THREELIMBU DIGIT FOURLIMBU DIGIT FIVELIMB" + + "U DIGIT SIXLIMBU DIGIT SEVENLIMBU DIGIT EIGHTLIMBU DIGIT NINETAI LE LETT" + + "ER KATAI LE LETTER XATAI LE LETTER NGATAI LE LETTER TSATAI LE LETTER SAT" + + "AI LE LETTER YATAI LE LETTER TATAI LE LETTER THATAI LE LETTER LATAI LE L" + + "ETTER PATAI LE LETTER PHATAI LE LETTER MATAI LE LETTER FATAI LE LETTER V" + + "ATAI LE LETTER HATAI LE LETTER QATAI LE LETTER KHATAI LE LETTER TSHATAI " + + "LE LETTER NATAI LE LETTER ATAI LE LETTER ITAI LE LETTER EETAI LE LETTER " + + "EHTAI LE LETTER UTAI LE LETTER OOTAI LE LETTER OTAI LE LETTER UETAI LE L" + + "ETTER ETAI LE LETTER AUETAI LE LETTER AITAI LE LETTER TONE-2TAI LE LETTE" + + "R TONE-3TAI LE LETTER TONE-4TAI LE LETTER TONE-5TAI LE LETTER TONE-6NEW " + + "TAI LUE LETTER HIGH QANEW TAI LUE LETTER LOW QANEW TAI LUE LETTER HIGH K" + + "ANEW TAI LUE LETTER HIGH XANEW TAI LUE LETTER HIGH NGANEW TAI LUE LETTER" + + " LOW KANEW TAI LUE LETTER LOW XANEW TAI LUE LETTER LOW NGANEW TAI LUE LE" + + "TTER HIGH TSANEW TAI LUE LETTER HIGH SANEW TAI LUE LETTER HIGH YANEW TAI" + + " LUE LETTER LOW TSANEW TAI LUE LETTER LOW SANEW TAI LUE LETTER LOW YANEW" + + " TAI LUE LETTER HIGH TANEW TAI LUE LETTER HIGH THANEW TAI LUE LETTER HIG" + + "H NANEW TAI LUE LETTER LOW TANEW TAI LUE LETTER LOW THANEW TAI LUE LETTE" + + "R LOW NANEW TAI LUE LETTER HIGH PANEW TAI LUE LETTER HIGH PHANEW TAI LUE" + + " LETTER HIGH MANEW TAI LUE LETTER LOW PANEW TAI LUE LETTER LOW PHANEW TA" + + "I LUE LETTER LOW MANEW TAI LUE LETTER HIGH FANEW TAI LUE LETTER HIGH VAN" + + "EW TAI LUE LETTER HIGH LANEW TAI LUE LETTER LOW FANEW TAI LUE LETTER LOW" + + " VANEW TAI LUE LETTER LOW LANEW TAI LUE LETTER HIGH HANEW TAI LUE LETTER" + + " HIGH DANEW TAI LUE LETTER HIGH BANEW TAI LUE LETTER LOW HANEW TAI LUE L" + + "ETTER LOW DANEW TAI LUE LETTER LOW BANEW TAI LUE LETTER HIGH KVANEW TAI " + + "LUE LETTER HIGH XVANEW TAI LUE LETTER LOW KVANEW TAI LUE LETTER LOW XVAN" + + "EW TAI LUE LETTER HIGH SUANEW TAI LUE LETTER LOW SUANEW TAI LUE VOWEL SI" + + "GN VOWEL SHORTENERNEW TAI LUE VOWEL SIGN AANEW TAI LUE VOWEL SIGN IINEW " + + "TAI LUE VOWEL SIGN UNEW TAI LUE VOWEL SIGN UUNEW TAI LUE VOWEL SIGN ENEW" + + " TAI LUE VOWEL SIGN AENEW TAI LUE VOWEL SIGN ONEW TAI LUE VOWEL SIGN OAN" + + "EW TAI LUE VOWEL SIGN UENEW TAI LUE VOWEL SIGN AYNEW TAI LUE VOWEL SIGN " + + "AAYNEW TAI LUE VOWEL SIGN UYNEW TAI LUE VOWEL SIGN OYNEW TAI LUE VOWEL S" + + "IGN OAYNEW TAI LUE VOWEL SIGN UEYNEW TAI LUE VOWEL SIGN IYNEW TAI LUE LE" + + "TTER FINAL VNEW TAI LUE LETTER FINAL NGNEW TAI LUE LETTER FINAL NNEW TAI" + + " LUE LETTER FINAL MNEW TAI LUE LETTER FINAL KNEW TAI LUE LETTER FINAL DN" + + "EW TAI LUE LETTER FINAL BNEW TAI LUE TONE MARK-1NEW TAI LUE TONE MARK-2N" + + "EW TAI LUE DIGIT ZERONEW TAI LUE DIGIT ONENEW TAI LUE DIGIT TWONEW TAI L" + + "UE DIGIT THREENEW TAI LUE DIGIT FOURNEW TAI LUE DIGIT FIVENEW TAI LUE DI" + + "GIT SIXNEW TAI LUE DIGIT SEVENNEW TAI LUE DIGIT EIGHTNEW TAI LUE DIGIT N" + + "INENEW TAI LUE THAM DIGIT ONENEW TAI LUE SIGN LAENEW TAI LUE SIGN LAEVKH" + + "MER SYMBOL PATHAMASATKHMER SYMBOL MUOY KOETKHMER SYMBOL PII KOETKHMER SY" + + "MBOL BEI KOETKHMER SYMBOL BUON KOETKHMER SYMBOL PRAM KOETKHMER SYMBOL PR" + + "AM-MUOY KOETKHMER SYMBOL PRAM-PII KOETKHMER SYMBOL PRAM-BEI KOETKHMER SY" + + "MBOL PRAM-BUON KOETKHMER SYMBOL DAP KOETKHMER SYMBOL DAP-MUOY KOETKHMER " + + "SYMBOL DAP-PII KOETKHMER SYMBOL DAP-BEI KOETKHMER SYMBOL DAP-BUON KOETKH") + ("" + + "MER SYMBOL DAP-PRAM KOETKHMER SYMBOL TUTEYASATKHMER SYMBOL MUOY ROCKHMER" + + " SYMBOL PII ROCKHMER SYMBOL BEI ROCKHMER SYMBOL BUON ROCKHMER SYMBOL PRA" + + "M ROCKHMER SYMBOL PRAM-MUOY ROCKHMER SYMBOL PRAM-PII ROCKHMER SYMBOL PRA" + + "M-BEI ROCKHMER SYMBOL PRAM-BUON ROCKHMER SYMBOL DAP ROCKHMER SYMBOL DAP-" + + "MUOY ROCKHMER SYMBOL DAP-PII ROCKHMER SYMBOL DAP-BEI ROCKHMER SYMBOL DAP" + + "-BUON ROCKHMER SYMBOL DAP-PRAM ROCBUGINESE LETTER KABUGINESE LETTER GABU" + + "GINESE LETTER NGABUGINESE LETTER NGKABUGINESE LETTER PABUGINESE LETTER B" + + "ABUGINESE LETTER MABUGINESE LETTER MPABUGINESE LETTER TABUGINESE LETTER " + + "DABUGINESE LETTER NABUGINESE LETTER NRABUGINESE LETTER CABUGINESE LETTER" + + " JABUGINESE LETTER NYABUGINESE LETTER NYCABUGINESE LETTER YABUGINESE LET" + + "TER RABUGINESE LETTER LABUGINESE LETTER VABUGINESE LETTER SABUGINESE LET" + + "TER ABUGINESE LETTER HABUGINESE VOWEL SIGN IBUGINESE VOWEL SIGN UBUGINES" + + "E VOWEL SIGN EBUGINESE VOWEL SIGN OBUGINESE VOWEL SIGN AEBUGINESE PALLAW" + + "ABUGINESE END OF SECTIONTAI THAM LETTER HIGH KATAI THAM LETTER HIGH KHAT" + + "AI THAM LETTER HIGH KXATAI THAM LETTER LOW KATAI THAM LETTER LOW KXATAI " + + "THAM LETTER LOW KHATAI THAM LETTER NGATAI THAM LETTER HIGH CATAI THAM LE" + + "TTER HIGH CHATAI THAM LETTER LOW CATAI THAM LETTER LOW SATAI THAM LETTER" + + " LOW CHATAI THAM LETTER NYATAI THAM LETTER RATATAI THAM LETTER HIGH RATH" + + "ATAI THAM LETTER DATAI THAM LETTER LOW RATHATAI THAM LETTER RANATAI THAM" + + " LETTER HIGH TATAI THAM LETTER HIGH THATAI THAM LETTER LOW TATAI THAM LE" + + "TTER LOW THATAI THAM LETTER NATAI THAM LETTER BATAI THAM LETTER HIGH PAT" + + "AI THAM LETTER HIGH PHATAI THAM LETTER HIGH FATAI THAM LETTER LOW PATAI " + + "THAM LETTER LOW FATAI THAM LETTER LOW PHATAI THAM LETTER MATAI THAM LETT" + + "ER LOW YATAI THAM LETTER HIGH YATAI THAM LETTER RATAI THAM LETTER RUETAI" + + " THAM LETTER LATAI THAM LETTER LUETAI THAM LETTER WATAI THAM LETTER HIGH" + + " SHATAI THAM LETTER HIGH SSATAI THAM LETTER HIGH SATAI THAM LETTER HIGH " + + "HATAI THAM LETTER LLATAI THAM LETTER ATAI THAM LETTER LOW HATAI THAM LET" + + "TER ITAI THAM LETTER IITAI THAM LETTER UTAI THAM LETTER UUTAI THAM LETTE" + + "R EETAI THAM LETTER OOTAI THAM LETTER LAETAI THAM LETTER GREAT SATAI THA" + + "M CONSONANT SIGN MEDIAL RATAI THAM CONSONANT SIGN MEDIAL LATAI THAM CONS" + + "ONANT SIGN LA TANG LAITAI THAM SIGN MAI KANG LAITAI THAM CONSONANT SIGN " + + "FINAL NGATAI THAM CONSONANT SIGN LOW PATAI THAM CONSONANT SIGN HIGH RATH" + + "A OR LOW PATAI THAM CONSONANT SIGN MATAI THAM CONSONANT SIGN BATAI THAM " + + "CONSONANT SIGN SATAI THAM SIGN SAKOTTAI THAM VOWEL SIGN ATAI THAM VOWEL " + + "SIGN MAI SATTAI THAM VOWEL SIGN AATAI THAM VOWEL SIGN TALL AATAI THAM VO" + + "WEL SIGN ITAI THAM VOWEL SIGN IITAI THAM VOWEL SIGN UETAI THAM VOWEL SIG" + + "N UUETAI THAM VOWEL SIGN UTAI THAM VOWEL SIGN UUTAI THAM VOWEL SIGN OTAI" + + " THAM VOWEL SIGN OA BELOWTAI THAM VOWEL SIGN OYTAI THAM VOWEL SIGN ETAI " + + "THAM VOWEL SIGN AETAI THAM VOWEL SIGN OOTAI THAM VOWEL SIGN AITAI THAM V" + + "OWEL SIGN THAM AITAI THAM VOWEL SIGN OA ABOVETAI THAM SIGN MAI KANGTAI T" + + "HAM SIGN TONE-1TAI THAM SIGN TONE-2TAI THAM SIGN KHUEN TONE-3TAI THAM SI" + + "GN KHUEN TONE-4TAI THAM SIGN KHUEN TONE-5TAI THAM SIGN RA HAAMTAI THAM S" + + "IGN MAI SAMTAI THAM SIGN KHUEN-LUE KARANTAI THAM COMBINING CRYPTOGRAMMIC" + + " DOTTAI THAM HORA DIGIT ZEROTAI THAM HORA DIGIT ONETAI THAM HORA DIGIT T" + + "WOTAI THAM HORA DIGIT THREETAI THAM HORA DIGIT FOURTAI THAM HORA DIGIT F" + + "IVETAI THAM HORA DIGIT SIXTAI THAM HORA DIGIT SEVENTAI THAM HORA DIGIT E" + + "IGHTTAI THAM HORA DIGIT NINETAI THAM THAM DIGIT ZEROTAI THAM THAM DIGIT " + + "ONETAI THAM THAM DIGIT TWOTAI THAM THAM DIGIT THREETAI THAM THAM DIGIT F" + + "OURTAI THAM THAM DIGIT FIVETAI THAM THAM DIGIT SIXTAI THAM THAM DIGIT SE" + + "VENTAI THAM THAM DIGIT EIGHTTAI THAM THAM DIGIT NINETAI THAM SIGN WIANGT" + + "AI THAM SIGN WIANGWAAKTAI THAM SIGN SAWANTAI THAM SIGN KEOWTAI THAM SIGN" + + " HOYTAI THAM SIGN DOKMAITAI THAM SIGN REVERSED ROTATED RANATAI THAM SIGN" + + " MAI YAMOKTAI THAM SIGN KAANTAI THAM SIGN KAANKUUTAI THAM SIGN SATKAANTA" + + "I THAM SIGN SATKAANKUUTAI THAM SIGN HANGTAI THAM SIGN CAANGCOMBINING DOU" + + "BLED CIRCUMFLEX ACCENTCOMBINING DIAERESIS-RINGCOMBINING INFINITYCOMBININ" + + "G DOWNWARDS ARROWCOMBINING TRIPLE DOTCOMBINING X-X BELOWCOMBINING WIGGLY" + + " LINE BELOWCOMBINING OPEN MARK BELOWCOMBINING DOUBLE OPEN MARK BELOWCOMB" + + "INING LIGHT CENTRALIZATION STROKE BELOWCOMBINING STRONG CENTRALIZATION S" + + "TROKE BELOWCOMBINING PARENTHESES ABOVECOMBINING DOUBLE PARENTHESES ABOVE" + + "COMBINING PARENTHESES BELOWCOMBINING PARENTHESES OVERLAYBALINESE SIGN UL" + + "U RICEMBALINESE SIGN ULU CANDRABALINESE SIGN CECEKBALINESE SIGN SURANGBA" + + "LINESE SIGN BISAHBALINESE LETTER AKARABALINESE LETTER AKARA TEDUNGBALINE" + + "SE LETTER IKARABALINESE LETTER IKARA TEDUNGBALINESE LETTER UKARABALINESE" + + " LETTER UKARA TEDUNGBALINESE LETTER RA REPABALINESE LETTER RA REPA TEDUN") + ("" + + "GBALINESE LETTER LA LENGABALINESE LETTER LA LENGA TEDUNGBALINESE LETTER " + + "EKARABALINESE LETTER AIKARABALINESE LETTER OKARABALINESE LETTER OKARA TE" + + "DUNGBALINESE LETTER KABALINESE LETTER KA MAHAPRANABALINESE LETTER GABALI" + + "NESE LETTER GA GORABALINESE LETTER NGABALINESE LETTER CABALINESE LETTER " + + "CA LACABALINESE LETTER JABALINESE LETTER JA JERABALINESE LETTER NYABALIN" + + "ESE LETTER TA LATIKBALINESE LETTER TA MURDA MAHAPRANABALINESE LETTER DA " + + "MURDA ALPAPRANABALINESE LETTER DA MURDA MAHAPRANABALINESE LETTER NA RAMB" + + "ATBALINESE LETTER TABALINESE LETTER TA TAWABALINESE LETTER DABALINESE LE" + + "TTER DA MADUBALINESE LETTER NABALINESE LETTER PABALINESE LETTER PA KAPAL" + + "BALINESE LETTER BABALINESE LETTER BA KEMBANGBALINESE LETTER MABALINESE L" + + "ETTER YABALINESE LETTER RABALINESE LETTER LABALINESE LETTER WABALINESE L" + + "ETTER SA SAGABALINESE LETTER SA SAPABALINESE LETTER SABALINESE LETTER HA" + + "BALINESE SIGN REREKANBALINESE VOWEL SIGN TEDUNGBALINESE VOWEL SIGN ULUBA" + + "LINESE VOWEL SIGN ULU SARIBALINESE VOWEL SIGN SUKUBALINESE VOWEL SIGN SU" + + "KU ILUTBALINESE VOWEL SIGN RA REPABALINESE VOWEL SIGN RA REPA TEDUNGBALI" + + "NESE VOWEL SIGN LA LENGABALINESE VOWEL SIGN LA LENGA TEDUNGBALINESE VOWE" + + "L SIGN TALINGBALINESE VOWEL SIGN TALING REPABALINESE VOWEL SIGN TALING T" + + "EDUNGBALINESE VOWEL SIGN TALING REPA TEDUNGBALINESE VOWEL SIGN PEPETBALI" + + "NESE VOWEL SIGN PEPET TEDUNGBALINESE ADEG ADEGBALINESE LETTER KAF SASAKB" + + "ALINESE LETTER KHOT SASAKBALINESE LETTER TZIR SASAKBALINESE LETTER EF SA" + + "SAKBALINESE LETTER VE SASAKBALINESE LETTER ZAL SASAKBALINESE LETTER ASYU" + + "RA SASAKBALINESE DIGIT ZEROBALINESE DIGIT ONEBALINESE DIGIT TWOBALINESE " + + "DIGIT THREEBALINESE DIGIT FOURBALINESE DIGIT FIVEBALINESE DIGIT SIXBALIN" + + "ESE DIGIT SEVENBALINESE DIGIT EIGHTBALINESE DIGIT NINEBALINESE PANTIBALI" + + "NESE PAMADABALINESE WINDUBALINESE CARIK PAMUNGKAHBALINESE CARIK SIKIBALI" + + "NESE CARIK PARERENBALINESE PAMENENGBALINESE MUSICAL SYMBOL DONGBALINESE " + + "MUSICAL SYMBOL DENGBALINESE MUSICAL SYMBOL DUNGBALINESE MUSICAL SYMBOL D" + + "ANGBALINESE MUSICAL SYMBOL DANG SURANGBALINESE MUSICAL SYMBOL DINGBALINE" + + "SE MUSICAL SYMBOL DAENGBALINESE MUSICAL SYMBOL DEUNGBALINESE MUSICAL SYM" + + "BOL DAINGBALINESE MUSICAL SYMBOL DANG GEDEBALINESE MUSICAL SYMBOL COMBIN" + + "ING TEGEHBALINESE MUSICAL SYMBOL COMBINING ENDEPBALINESE MUSICAL SYMBOL " + + "COMBINING KEMPULBALINESE MUSICAL SYMBOL COMBINING KEMPLIBALINESE MUSICAL" + + " SYMBOL COMBINING JEGOGANBALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH J" + + "EGOGANBALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGANBALINESE MUSI" + + "CAL SYMBOL COMBINING BENDEBALINESE MUSICAL SYMBOL COMBINING GONGBALINESE" + + " MUSICAL SYMBOL RIGHT-HAND OPEN DUGBALINESE MUSICAL SYMBOL RIGHT-HAND OP" + + "EN DAGBALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUKBALINESE MUSICAL SYMB" + + "OL RIGHT-HAND CLOSED TAKBALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANGBALIN" + + "ESE MUSICAL SYMBOL LEFT-HAND OPEN PUNGBALINESE MUSICAL SYMBOL LEFT-HAND " + + "CLOSED PLAKBALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUKBALINESE MUSICAL" + + " SYMBOL LEFT-HAND OPEN PINGSUNDANESE SIGN PANYECEKSUNDANESE SIGN PANGLAY" + + "ARSUNDANESE SIGN PANGWISADSUNDANESE LETTER ASUNDANESE LETTER ISUNDANESE " + + "LETTER USUNDANESE LETTER AESUNDANESE LETTER OSUNDANESE LETTER ESUNDANESE" + + " LETTER EUSUNDANESE LETTER KASUNDANESE LETTER QASUNDANESE LETTER GASUNDA" + + "NESE LETTER NGASUNDANESE LETTER CASUNDANESE LETTER JASUNDANESE LETTER ZA" + + "SUNDANESE LETTER NYASUNDANESE LETTER TASUNDANESE LETTER DASUNDANESE LETT" + + "ER NASUNDANESE LETTER PASUNDANESE LETTER FASUNDANESE LETTER VASUNDANESE " + + "LETTER BASUNDANESE LETTER MASUNDANESE LETTER YASUNDANESE LETTER RASUNDAN" + + "ESE LETTER LASUNDANESE LETTER WASUNDANESE LETTER SASUNDANESE LETTER XASU" + + "NDANESE LETTER HASUNDANESE CONSONANT SIGN PAMINGKALSUNDANESE CONSONANT S" + + "IGN PANYAKRASUNDANESE CONSONANT SIGN PANYIKUSUNDANESE VOWEL SIGN PANGHUL" + + "USUNDANESE VOWEL SIGN PANYUKUSUNDANESE VOWEL SIGN PANAELAENGSUNDANESE VO" + + "WEL SIGN PANOLONGSUNDANESE VOWEL SIGN PAMEPETSUNDANESE VOWEL SIGN PANEUL" + + "EUNGSUNDANESE SIGN PAMAAEHSUNDANESE SIGN VIRAMASUNDANESE CONSONANT SIGN " + + "PASANGAN MASUNDANESE CONSONANT SIGN PASANGAN WASUNDANESE LETTER KHASUNDA" + + "NESE LETTER SYASUNDANESE DIGIT ZEROSUNDANESE DIGIT ONESUNDANESE DIGIT TW" + + "OSUNDANESE DIGIT THREESUNDANESE DIGIT FOURSUNDANESE DIGIT FIVESUNDANESE " + + "DIGIT SIXSUNDANESE DIGIT SEVENSUNDANESE DIGIT EIGHTSUNDANESE DIGIT NINES" + + "UNDANESE AVAGRAHASUNDANESE LETTER REUSUNDANESE LETTER LEUSUNDANESE LETTE" + + "R BHASUNDANESE LETTER FINAL KSUNDANESE LETTER FINAL MBATAK LETTER ABATAK" + + " LETTER SIMALUNGUN ABATAK LETTER HABATAK LETTER SIMALUNGUN HABATAK LETTE" + + "R MANDAILING HABATAK LETTER BABATAK LETTER KARO BABATAK LETTER PABATAK L" + + "ETTER SIMALUNGUN PABATAK LETTER NABATAK LETTER MANDAILING NABATAK LETTER" + + " WABATAK LETTER SIMALUNGUN WABATAK LETTER PAKPAK WABATAK LETTER GABATAK ") + ("" + + "LETTER SIMALUNGUN GABATAK LETTER JABATAK LETTER DABATAK LETTER RABATAK L" + + "ETTER SIMALUNGUN RABATAK LETTER MABATAK LETTER SIMALUNGUN MABATAK LETTER" + + " SOUTHERN TABATAK LETTER NORTHERN TABATAK LETTER SABATAK LETTER SIMALUNG" + + "UN SABATAK LETTER MANDAILING SABATAK LETTER YABATAK LETTER SIMALUNGUN YA" + + "BATAK LETTER NGABATAK LETTER LABATAK LETTER SIMALUNGUN LABATAK LETTER NY" + + "ABATAK LETTER CABATAK LETTER NDABATAK LETTER MBABATAK LETTER IBATAK LETT" + + "ER UBATAK SIGN TOMPIBATAK VOWEL SIGN EBATAK VOWEL SIGN PAKPAK EBATAK VOW" + + "EL SIGN EEBATAK VOWEL SIGN IBATAK VOWEL SIGN KARO IBATAK VOWEL SIGN OBAT" + + "AK VOWEL SIGN KARO OBATAK VOWEL SIGN UBATAK VOWEL SIGN U FOR SIMALUNGUN " + + "SABATAK CONSONANT SIGN NGBATAK CONSONANT SIGN HBATAK PANGOLATBATAK PANON" + + "GONANBATAK SYMBOL BINDU NA METEKBATAK SYMBOL BINDU PINARBORASBATAK SYMBO" + + "L BINDU JUDULBATAK SYMBOL BINDU PANGOLATLEPCHA LETTER KALEPCHA LETTER KL" + + "ALEPCHA LETTER KHALEPCHA LETTER GALEPCHA LETTER GLALEPCHA LETTER NGALEPC" + + "HA LETTER CALEPCHA LETTER CHALEPCHA LETTER JALEPCHA LETTER NYALEPCHA LET" + + "TER TALEPCHA LETTER THALEPCHA LETTER DALEPCHA LETTER NALEPCHA LETTER PAL" + + "EPCHA LETTER PLALEPCHA LETTER PHALEPCHA LETTER FALEPCHA LETTER FLALEPCHA" + + " LETTER BALEPCHA LETTER BLALEPCHA LETTER MALEPCHA LETTER MLALEPCHA LETTE" + + "R TSALEPCHA LETTER TSHALEPCHA LETTER DZALEPCHA LETTER YALEPCHA LETTER RA" + + "LEPCHA LETTER LALEPCHA LETTER HALEPCHA LETTER HLALEPCHA LETTER VALEPCHA " + + "LETTER SALEPCHA LETTER SHALEPCHA LETTER WALEPCHA LETTER ALEPCHA SUBJOINE" + + "D LETTER YALEPCHA SUBJOINED LETTER RALEPCHA VOWEL SIGN AALEPCHA VOWEL SI" + + "GN ILEPCHA VOWEL SIGN OLEPCHA VOWEL SIGN OOLEPCHA VOWEL SIGN ULEPCHA VOW" + + "EL SIGN UULEPCHA VOWEL SIGN ELEPCHA CONSONANT SIGN KLEPCHA CONSONANT SIG" + + "N MLEPCHA CONSONANT SIGN LLEPCHA CONSONANT SIGN NLEPCHA CONSONANT SIGN P" + + "LEPCHA CONSONANT SIGN RLEPCHA CONSONANT SIGN TLEPCHA CONSONANT SIGN NYIN" + + "-DOLEPCHA CONSONANT SIGN KANGLEPCHA SIGN RANLEPCHA SIGN NUKTALEPCHA PUNC" + + "TUATION TA-ROLLEPCHA PUNCTUATION NYET THYOOM TA-ROLLEPCHA PUNCTUATION CE" + + "R-WALEPCHA PUNCTUATION TSHOOK CER-WALEPCHA PUNCTUATION TSHOOKLEPCHA DIGI" + + "T ZEROLEPCHA DIGIT ONELEPCHA DIGIT TWOLEPCHA DIGIT THREELEPCHA DIGIT FOU" + + "RLEPCHA DIGIT FIVELEPCHA DIGIT SIXLEPCHA DIGIT SEVENLEPCHA DIGIT EIGHTLE" + + "PCHA DIGIT NINELEPCHA LETTER TTALEPCHA LETTER TTHALEPCHA LETTER DDAOL CH" + + "IKI DIGIT ZEROOL CHIKI DIGIT ONEOL CHIKI DIGIT TWOOL CHIKI DIGIT THREEOL" + + " CHIKI DIGIT FOUROL CHIKI DIGIT FIVEOL CHIKI DIGIT SIXOL CHIKI DIGIT SEV" + + "ENOL CHIKI DIGIT EIGHTOL CHIKI DIGIT NINEOL CHIKI LETTER LAOL CHIKI LETT" + + "ER ATOL CHIKI LETTER AGOL CHIKI LETTER ANGOL CHIKI LETTER ALOL CHIKI LET" + + "TER LAAOL CHIKI LETTER AAKOL CHIKI LETTER AAJOL CHIKI LETTER AAMOL CHIKI" + + " LETTER AAWOL CHIKI LETTER LIOL CHIKI LETTER ISOL CHIKI LETTER IHOL CHIK" + + "I LETTER INYOL CHIKI LETTER IROL CHIKI LETTER LUOL CHIKI LETTER UCOL CHI" + + "KI LETTER UDOL CHIKI LETTER UNNOL CHIKI LETTER UYOL CHIKI LETTER LEOL CH" + + "IKI LETTER EPOL CHIKI LETTER EDDOL CHIKI LETTER ENOL CHIKI LETTER ERROL " + + "CHIKI LETTER LOOL CHIKI LETTER OTTOL CHIKI LETTER OBOL CHIKI LETTER OVOL" + + " CHIKI LETTER OHOL CHIKI MU TTUDDAGOL CHIKI GAAHLAA TTUDDAAGOL CHIKI MU-" + + "GAAHLAA TTUDDAAGOL CHIKI RELAAOL CHIKI PHAARKAAOL CHIKI AHADOL CHIKI PUN" + + "CTUATION MUCAADOL CHIKI PUNCTUATION DOUBLE MUCAADCYRILLIC SMALL LETTER R" + + "OUNDED VECYRILLIC SMALL LETTER LONG-LEGGED DECYRILLIC SMALL LETTER NARRO" + + "W OCYRILLIC SMALL LETTER WIDE ESCYRILLIC SMALL LETTER TALL TECYRILLIC SM" + + "ALL LETTER THREE-LEGGED TECYRILLIC SMALL LETTER TALL HARD SIGNCYRILLIC S" + + "MALL LETTER TALL YATCYRILLIC SMALL LETTER UNBLENDED UKSUNDANESE PUNCTUAT" + + "ION BINDU SURYASUNDANESE PUNCTUATION BINDU PANGLONGSUNDANESE PUNCTUATION" + + " BINDU PURNAMASUNDANESE PUNCTUATION BINDU CAKRASUNDANESE PUNCTUATION BIN" + + "DU LEU SATANGASUNDANESE PUNCTUATION BINDU KA SATANGASUNDANESE PUNCTUATIO" + + "N BINDU DA SATANGASUNDANESE PUNCTUATION BINDU BA SATANGAVEDIC TONE KARSH" + + "ANAVEDIC TONE SHARAVEDIC TONE PRENKHAVEDIC SIGN NIHSHVASAVEDIC SIGN YAJU" + + "RVEDIC MIDLINE SVARITAVEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARI" + + "TAVEDIC TONE YAJURVEDIC INDEPENDENT SVARITAVEDIC TONE YAJURVEDIC KATHAKA" + + " INDEPENDENT SVARITAVEDIC TONE CANDRA BELOWVEDIC TONE YAJURVEDIC KATHAKA" + + " INDEPENDENT SVARITA SCHROEDERVEDIC TONE DOUBLE SVARITAVEDIC TONE TRIPLE" + + " SVARITAVEDIC TONE KATHAKA ANUDATTAVEDIC TONE DOT BELOWVEDIC TONE TWO DO" + + "TS BELOWVEDIC TONE THREE DOTS BELOWVEDIC TONE RIGVEDIC KASHMIRI INDEPEND" + + "ENT SVARITAVEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITAVEDIC SIGN VISARGA" + + " SVARITAVEDIC SIGN VISARGA UDATTAVEDIC SIGN REVERSED VISARGA UDATTAVEDIC" + + " SIGN VISARGA ANUDATTAVEDIC SIGN REVERSED VISARGA ANUDATTAVEDIC SIGN VIS" + + "ARGA UDATTA WITH TAILVEDIC SIGN VISARGA ANUDATTA WITH TAILVEDIC SIGN ANU" + + "SVARA ANTARGOMUKHAVEDIC SIGN ANUSVARA BAHIRGOMUKHAVEDIC SIGN ANUSVARA VA") + ("" + + "MAGOMUKHAVEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAILVEDIC SIGN TIRYAKVEDIC" + + " SIGN HEXIFORM LONG ANUSVARAVEDIC SIGN LONG ANUSVARAVEDIC SIGN RTHANG LO" + + "NG ANUSVARAVEDIC SIGN ANUSVARA UBHAYATO MUKHAVEDIC SIGN ARDHAVISARGAVEDI" + + "C SIGN ROTATED ARDHAVISARGAVEDIC TONE CANDRA ABOVEVEDIC SIGN JIHVAMULIYA" + + "VEDIC SIGN UPADHMANIYAVEDIC TONE RING ABOVEVEDIC TONE DOUBLE RING ABOVEL" + + "ATIN LETTER SMALL CAPITAL ALATIN LETTER SMALL CAPITAL AELATIN SMALL LETT" + + "ER TURNED AELATIN LETTER SMALL CAPITAL BARRED BLATIN LETTER SMALL CAPITA" + + "L CLATIN LETTER SMALL CAPITAL DLATIN LETTER SMALL CAPITAL ETHLATIN LETTE" + + "R SMALL CAPITAL ELATIN SMALL LETTER TURNED OPEN ELATIN SMALL LETTER TURN" + + "ED ILATIN LETTER SMALL CAPITAL JLATIN LETTER SMALL CAPITAL KLATIN LETTER" + + " SMALL CAPITAL L WITH STROKELATIN LETTER SMALL CAPITAL MLATIN LETTER SMA" + + "LL CAPITAL REVERSED NLATIN LETTER SMALL CAPITAL OLATIN LETTER SMALL CAPI" + + "TAL OPEN OLATIN SMALL LETTER SIDEWAYS OLATIN SMALL LETTER SIDEWAYS OPEN " + + "OLATIN SMALL LETTER SIDEWAYS O WITH STROKELATIN SMALL LETTER TURNED OELA" + + "TIN LETTER SMALL CAPITAL OULATIN SMALL LETTER TOP HALF OLATIN SMALL LETT" + + "ER BOTTOM HALF OLATIN LETTER SMALL CAPITAL PLATIN LETTER SMALL CAPITAL R" + + "EVERSED RLATIN LETTER SMALL CAPITAL TURNED RLATIN LETTER SMALL CAPITAL T" + + "LATIN LETTER SMALL CAPITAL ULATIN SMALL LETTER SIDEWAYS ULATIN SMALL LET" + + "TER SIDEWAYS DIAERESIZED ULATIN SMALL LETTER SIDEWAYS TURNED MLATIN LETT" + + "ER SMALL CAPITAL VLATIN LETTER SMALL CAPITAL WLATIN LETTER SMALL CAPITAL" + + " ZLATIN LETTER SMALL CAPITAL EZHLATIN LETTER VOICED LARYNGEAL SPIRANTLAT" + + "IN LETTER AINGREEK LETTER SMALL CAPITAL GAMMAGREEK LETTER SMALL CAPITAL " + + "LAMDAGREEK LETTER SMALL CAPITAL PIGREEK LETTER SMALL CAPITAL RHOGREEK LE" + + "TTER SMALL CAPITAL PSICYRILLIC LETTER SMALL CAPITAL ELMODIFIER LETTER CA" + + "PITAL AMODIFIER LETTER CAPITAL AEMODIFIER LETTER CAPITAL BMODIFIER LETTE" + + "R CAPITAL BARRED BMODIFIER LETTER CAPITAL DMODIFIER LETTER CAPITAL EMODI" + + "FIER LETTER CAPITAL REVERSED EMODIFIER LETTER CAPITAL GMODIFIER LETTER C" + + "APITAL HMODIFIER LETTER CAPITAL IMODIFIER LETTER CAPITAL JMODIFIER LETTE" + + "R CAPITAL KMODIFIER LETTER CAPITAL LMODIFIER LETTER CAPITAL MMODIFIER LE" + + "TTER CAPITAL NMODIFIER LETTER CAPITAL REVERSED NMODIFIER LETTER CAPITAL " + + "OMODIFIER LETTER CAPITAL OUMODIFIER LETTER CAPITAL PMODIFIER LETTER CAPI" + + "TAL RMODIFIER LETTER CAPITAL TMODIFIER LETTER CAPITAL UMODIFIER LETTER C" + + "APITAL WMODIFIER LETTER SMALL AMODIFIER LETTER SMALL TURNED AMODIFIER LE" + + "TTER SMALL ALPHAMODIFIER LETTER SMALL TURNED AEMODIFIER LETTER SMALL BMO" + + "DIFIER LETTER SMALL DMODIFIER LETTER SMALL EMODIFIER LETTER SMALL SCHWAM" + + "ODIFIER LETTER SMALL OPEN EMODIFIER LETTER SMALL TURNED OPEN EMODIFIER L" + + "ETTER SMALL GMODIFIER LETTER SMALL TURNED IMODIFIER LETTER SMALL KMODIFI" + + "ER LETTER SMALL MMODIFIER LETTER SMALL ENGMODIFIER LETTER SMALL OMODIFIE" + + "R LETTER SMALL OPEN OMODIFIER LETTER SMALL TOP HALF OMODIFIER LETTER SMA" + + "LL BOTTOM HALF OMODIFIER LETTER SMALL PMODIFIER LETTER SMALL TMODIFIER L" + + "ETTER SMALL UMODIFIER LETTER SMALL SIDEWAYS UMODIFIER LETTER SMALL TURNE" + + "D MMODIFIER LETTER SMALL VMODIFIER LETTER SMALL AINMODIFIER LETTER SMALL" + + " BETAMODIFIER LETTER SMALL GREEK GAMMAMODIFIER LETTER SMALL DELTAMODIFIE" + + "R LETTER SMALL GREEK PHIMODIFIER LETTER SMALL CHILATIN SUBSCRIPT SMALL L" + + "ETTER ILATIN SUBSCRIPT SMALL LETTER RLATIN SUBSCRIPT SMALL LETTER ULATIN" + + " SUBSCRIPT SMALL LETTER VGREEK SUBSCRIPT SMALL LETTER BETAGREEK SUBSCRIP" + + "T SMALL LETTER GAMMAGREEK SUBSCRIPT SMALL LETTER RHOGREEK SUBSCRIPT SMAL" + + "L LETTER PHIGREEK SUBSCRIPT SMALL LETTER CHILATIN SMALL LETTER UELATIN S" + + "MALL LETTER B WITH MIDDLE TILDELATIN SMALL LETTER D WITH MIDDLE TILDELAT" + + "IN SMALL LETTER F WITH MIDDLE TILDELATIN SMALL LETTER M WITH MIDDLE TILD" + + "ELATIN SMALL LETTER N WITH MIDDLE TILDELATIN SMALL LETTER P WITH MIDDLE " + + "TILDELATIN SMALL LETTER R WITH MIDDLE TILDELATIN SMALL LETTER R WITH FIS" + + "HHOOK AND MIDDLE TILDELATIN SMALL LETTER S WITH MIDDLE TILDELATIN SMALL " + + "LETTER T WITH MIDDLE TILDELATIN SMALL LETTER Z WITH MIDDLE TILDELATIN SM" + + "ALL LETTER TURNED GMODIFIER LETTER CYRILLIC ENLATIN SMALL LETTER INSULAR" + + " GLATIN SMALL LETTER TH WITH STRIKETHROUGHLATIN SMALL CAPITAL LETTER I W" + + "ITH STROKELATIN SMALL LETTER IOTA WITH STROKELATIN SMALL LETTER P WITH S" + + "TROKELATIN SMALL CAPITAL LETTER U WITH STROKELATIN SMALL LETTER UPSILON " + + "WITH STROKELATIN SMALL LETTER B WITH PALATAL HOOKLATIN SMALL LETTER D WI" + + "TH PALATAL HOOKLATIN SMALL LETTER F WITH PALATAL HOOKLATIN SMALL LETTER " + + "G WITH PALATAL HOOKLATIN SMALL LETTER K WITH PALATAL HOOKLATIN SMALL LET" + + "TER L WITH PALATAL HOOKLATIN SMALL LETTER M WITH PALATAL HOOKLATIN SMALL" + + " LETTER N WITH PALATAL HOOKLATIN SMALL LETTER P WITH PALATAL HOOKLATIN S" + + "MALL LETTER R WITH PALATAL HOOKLATIN SMALL LETTER S WITH PALATAL HOOKLAT") + ("" + + "IN SMALL LETTER ESH WITH PALATAL HOOKLATIN SMALL LETTER V WITH PALATAL H" + + "OOKLATIN SMALL LETTER X WITH PALATAL HOOKLATIN SMALL LETTER Z WITH PALAT" + + "AL HOOKLATIN SMALL LETTER A WITH RETROFLEX HOOKLATIN SMALL LETTER ALPHA " + + "WITH RETROFLEX HOOKLATIN SMALL LETTER D WITH HOOK AND TAILLATIN SMALL LE" + + "TTER E WITH RETROFLEX HOOKLATIN SMALL LETTER OPEN E WITH RETROFLEX HOOKL" + + "ATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOKLATIN SMALL LETTER " + + "SCHWA WITH RETROFLEX HOOKLATIN SMALL LETTER I WITH RETROFLEX HOOKLATIN S" + + "MALL LETTER OPEN O WITH RETROFLEX HOOKLATIN SMALL LETTER ESH WITH RETROF" + + "LEX HOOKLATIN SMALL LETTER U WITH RETROFLEX HOOKLATIN SMALL LETTER EZH W" + + "ITH RETROFLEX HOOKMODIFIER LETTER SMALL TURNED ALPHAMODIFIER LETTER SMAL" + + "L CMODIFIER LETTER SMALL C WITH CURLMODIFIER LETTER SMALL ETHMODIFIER LE" + + "TTER SMALL REVERSED OPEN EMODIFIER LETTER SMALL FMODIFIER LETTER SMALL D" + + "OTLESS J WITH STROKEMODIFIER LETTER SMALL SCRIPT GMODIFIER LETTER SMALL " + + "TURNED HMODIFIER LETTER SMALL I WITH STROKEMODIFIER LETTER SMALL IOTAMOD" + + "IFIER LETTER SMALL CAPITAL IMODIFIER LETTER SMALL CAPITAL I WITH STROKEM" + + "ODIFIER LETTER SMALL J WITH CROSSED-TAILMODIFIER LETTER SMALL L WITH RET" + + "ROFLEX HOOKMODIFIER LETTER SMALL L WITH PALATAL HOOKMODIFIER LETTER SMAL" + + "L CAPITAL LMODIFIER LETTER SMALL M WITH HOOKMODIFIER LETTER SMALL TURNED" + + " M WITH LONG LEGMODIFIER LETTER SMALL N WITH LEFT HOOKMODIFIER LETTER SM" + + "ALL N WITH RETROFLEX HOOKMODIFIER LETTER SMALL CAPITAL NMODIFIER LETTER " + + "SMALL BARRED OMODIFIER LETTER SMALL PHIMODIFIER LETTER SMALL S WITH HOOK" + + "MODIFIER LETTER SMALL ESHMODIFIER LETTER SMALL T WITH PALATAL HOOKMODIFI" + + "ER LETTER SMALL U BARMODIFIER LETTER SMALL UPSILONMODIFIER LETTER SMALL " + + "CAPITAL UMODIFIER LETTER SMALL V WITH HOOKMODIFIER LETTER SMALL TURNED V" + + "MODIFIER LETTER SMALL ZMODIFIER LETTER SMALL Z WITH RETROFLEX HOOKMODIFI" + + "ER LETTER SMALL Z WITH CURLMODIFIER LETTER SMALL EZHMODIFIER LETTER SMAL" + + "L THETACOMBINING DOTTED GRAVE ACCENTCOMBINING DOTTED ACUTE ACCENTCOMBINI" + + "NG SNAKE BELOWCOMBINING SUSPENSION MARKCOMBINING MACRON-ACUTECOMBINING G" + + "RAVE-MACRONCOMBINING MACRON-GRAVECOMBINING ACUTE-MACRONCOMBINING GRAVE-A" + + "CUTE-GRAVECOMBINING ACUTE-GRAVE-ACUTECOMBINING LATIN SMALL LETTER R BELO" + + "WCOMBINING BREVE-MACRONCOMBINING MACRON-BREVECOMBINING DOUBLE CIRCUMFLEX" + + " ABOVECOMBINING OGONEK ABOVECOMBINING ZIGZAG BELOWCOMBINING IS BELOWCOMB" + + "INING UR ABOVECOMBINING US ABOVECOMBINING LATIN SMALL LETTER FLATTENED O" + + "PEN A ABOVECOMBINING LATIN SMALL LETTER AECOMBINING LATIN SMALL LETTER A" + + "OCOMBINING LATIN SMALL LETTER AVCOMBINING LATIN SMALL LETTER C CEDILLACO" + + "MBINING LATIN SMALL LETTER INSULAR DCOMBINING LATIN SMALL LETTER ETHCOMB" + + "INING LATIN SMALL LETTER GCOMBINING LATIN LETTER SMALL CAPITAL GCOMBININ" + + "G LATIN SMALL LETTER KCOMBINING LATIN SMALL LETTER LCOMBINING LATIN LETT" + + "ER SMALL CAPITAL LCOMBINING LATIN LETTER SMALL CAPITAL MCOMBINING LATIN " + + "SMALL LETTER NCOMBINING LATIN LETTER SMALL CAPITAL NCOMBINING LATIN LETT" + + "ER SMALL CAPITAL RCOMBINING LATIN SMALL LETTER R ROTUNDACOMBINING LATIN " + + "SMALL LETTER SCOMBINING LATIN SMALL LETTER LONG SCOMBINING LATIN SMALL L" + + "ETTER ZCOMBINING LATIN SMALL LETTER ALPHACOMBINING LATIN SMALL LETTER BC" + + "OMBINING LATIN SMALL LETTER BETACOMBINING LATIN SMALL LETTER SCHWACOMBIN" + + "ING LATIN SMALL LETTER FCOMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDL" + + "E TILDECOMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKECO" + + "MBINING LATIN SMALL LETTER PCOMBINING LATIN SMALL LETTER ESHCOMBINING LA" + + "TIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKECOMBINING LATIN SMALL" + + " LETTER WCOMBINING LATIN SMALL LETTER A WITH DIAERESISCOMBINING LATIN SM" + + "ALL LETTER O WITH DIAERESISCOMBINING LATIN SMALL LETTER U WITH DIAERESIS" + + "COMBINING UP TACK ABOVECOMBINING DELETION MARKCOMBINING DOUBLE INVERTED " + + "BREVE BELOWCOMBINING ALMOST EQUAL TO BELOWCOMBINING LEFT ARROWHEAD ABOVE" + + "COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOWLATIN CAPITAL LETTER A" + + " WITH RING BELOWLATIN SMALL LETTER A WITH RING BELOWLATIN CAPITAL LETTER" + + " B WITH DOT ABOVELATIN SMALL LETTER B WITH DOT ABOVELATIN CAPITAL LETTER" + + " B WITH DOT BELOWLATIN SMALL LETTER B WITH DOT BELOWLATIN CAPITAL LETTER" + + " B WITH LINE BELOWLATIN SMALL LETTER B WITH LINE BELOWLATIN CAPITAL LETT" + + "ER C WITH CEDILLA AND ACUTELATIN SMALL LETTER C WITH CEDILLA AND ACUTELA" + + "TIN CAPITAL LETTER D WITH DOT ABOVELATIN SMALL LETTER D WITH DOT ABOVELA" + + "TIN CAPITAL LETTER D WITH DOT BELOWLATIN SMALL LETTER D WITH DOT BELOWLA" + + "TIN CAPITAL LETTER D WITH LINE BELOWLATIN SMALL LETTER D WITH LINE BELOW" + + "LATIN CAPITAL LETTER D WITH CEDILLALATIN SMALL LETTER D WITH CEDILLALATI" + + "N CAPITAL LETTER D WITH CIRCUMFLEX BELOWLATIN SMALL LETTER D WITH CIRCUM" + + "FLEX BELOWLATIN CAPITAL LETTER E WITH MACRON AND GRAVELATIN SMALL LETTER") + ("" + + " E WITH MACRON AND GRAVELATIN CAPITAL LETTER E WITH MACRON AND ACUTELATI" + + "N SMALL LETTER E WITH MACRON AND ACUTELATIN CAPITAL LETTER E WITH CIRCUM" + + "FLEX BELOWLATIN SMALL LETTER E WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER" + + " E WITH TILDE BELOWLATIN SMALL LETTER E WITH TILDE BELOWLATIN CAPITAL LE" + + "TTER E WITH CEDILLA AND BREVELATIN SMALL LETTER E WITH CEDILLA AND BREVE" + + "LATIN CAPITAL LETTER F WITH DOT ABOVELATIN SMALL LETTER F WITH DOT ABOVE" + + "LATIN CAPITAL LETTER G WITH MACRONLATIN SMALL LETTER G WITH MACRONLATIN " + + "CAPITAL LETTER H WITH DOT ABOVELATIN SMALL LETTER H WITH DOT ABOVELATIN " + + "CAPITAL LETTER H WITH DOT BELOWLATIN SMALL LETTER H WITH DOT BELOWLATIN " + + "CAPITAL LETTER H WITH DIAERESISLATIN SMALL LETTER H WITH DIAERESISLATIN " + + "CAPITAL LETTER H WITH CEDILLALATIN SMALL LETTER H WITH CEDILLALATIN CAPI" + + "TAL LETTER H WITH BREVE BELOWLATIN SMALL LETTER H WITH BREVE BELOWLATIN " + + "CAPITAL LETTER I WITH TILDE BELOWLATIN SMALL LETTER I WITH TILDE BELOWLA" + + "TIN CAPITAL LETTER I WITH DIAERESIS AND ACUTELATIN SMALL LETTER I WITH D" + + "IAERESIS AND ACUTELATIN CAPITAL LETTER K WITH ACUTELATIN SMALL LETTER K " + + "WITH ACUTELATIN CAPITAL LETTER K WITH DOT BELOWLATIN SMALL LETTER K WITH" + + " DOT BELOWLATIN CAPITAL LETTER K WITH LINE BELOWLATIN SMALL LETTER K WIT" + + "H LINE BELOWLATIN CAPITAL LETTER L WITH DOT BELOWLATIN SMALL LETTER L WI" + + "TH DOT BELOWLATIN CAPITAL LETTER L WITH DOT BELOW AND MACRONLATIN SMALL " + + "LETTER L WITH DOT BELOW AND MACRONLATIN CAPITAL LETTER L WITH LINE BELOW" + + "LATIN SMALL LETTER L WITH LINE BELOWLATIN CAPITAL LETTER L WITH CIRCUMFL" + + "EX BELOWLATIN SMALL LETTER L WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER M" + + " WITH ACUTELATIN SMALL LETTER M WITH ACUTELATIN CAPITAL LETTER M WITH DO" + + "T ABOVELATIN SMALL LETTER M WITH DOT ABOVELATIN CAPITAL LETTER M WITH DO" + + "T BELOWLATIN SMALL LETTER M WITH DOT BELOWLATIN CAPITAL LETTER N WITH DO" + + "T ABOVELATIN SMALL LETTER N WITH DOT ABOVELATIN CAPITAL LETTER N WITH DO" + + "T BELOWLATIN SMALL LETTER N WITH DOT BELOWLATIN CAPITAL LETTER N WITH LI" + + "NE BELOWLATIN SMALL LETTER N WITH LINE BELOWLATIN CAPITAL LETTER N WITH " + + "CIRCUMFLEX BELOWLATIN SMALL LETTER N WITH CIRCUMFLEX BELOWLATIN CAPITAL " + + "LETTER O WITH TILDE AND ACUTELATIN SMALL LETTER O WITH TILDE AND ACUTELA" + + "TIN CAPITAL LETTER O WITH TILDE AND DIAERESISLATIN SMALL LETTER O WITH T" + + "ILDE AND DIAERESISLATIN CAPITAL LETTER O WITH MACRON AND GRAVELATIN SMAL" + + "L LETTER O WITH MACRON AND GRAVELATIN CAPITAL LETTER O WITH MACRON AND A" + + "CUTELATIN SMALL LETTER O WITH MACRON AND ACUTELATIN CAPITAL LETTER P WIT" + + "H ACUTELATIN SMALL LETTER P WITH ACUTELATIN CAPITAL LETTER P WITH DOT AB" + + "OVELATIN SMALL LETTER P WITH DOT ABOVELATIN CAPITAL LETTER R WITH DOT AB" + + "OVELATIN SMALL LETTER R WITH DOT ABOVELATIN CAPITAL LETTER R WITH DOT BE" + + "LOWLATIN SMALL LETTER R WITH DOT BELOWLATIN CAPITAL LETTER R WITH DOT BE" + + "LOW AND MACRONLATIN SMALL LETTER R WITH DOT BELOW AND MACRONLATIN CAPITA" + + "L LETTER R WITH LINE BELOWLATIN SMALL LETTER R WITH LINE BELOWLATIN CAPI" + + "TAL LETTER S WITH DOT ABOVELATIN SMALL LETTER S WITH DOT ABOVELATIN CAPI" + + "TAL LETTER S WITH DOT BELOWLATIN SMALL LETTER S WITH DOT BELOWLATIN CAPI" + + "TAL LETTER S WITH ACUTE AND DOT ABOVELATIN SMALL LETTER S WITH ACUTE AND" + + " DOT ABOVELATIN CAPITAL LETTER S WITH CARON AND DOT ABOVELATIN SMALL LET" + + "TER S WITH CARON AND DOT ABOVELATIN CAPITAL LETTER S WITH DOT BELOW AND " + + "DOT ABOVELATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVELATIN CAPITAL " + + "LETTER T WITH DOT ABOVELATIN SMALL LETTER T WITH DOT ABOVELATIN CAPITAL " + + "LETTER T WITH DOT BELOWLATIN SMALL LETTER T WITH DOT BELOWLATIN CAPITAL " + + "LETTER T WITH LINE BELOWLATIN SMALL LETTER T WITH LINE BELOWLATIN CAPITA" + + "L LETTER T WITH CIRCUMFLEX BELOWLATIN SMALL LETTER T WITH CIRCUMFLEX BEL" + + "OWLATIN CAPITAL LETTER U WITH DIAERESIS BELOWLATIN SMALL LETTER U WITH D" + + "IAERESIS BELOWLATIN CAPITAL LETTER U WITH TILDE BELOWLATIN SMALL LETTER " + + "U WITH TILDE BELOWLATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOWLATIN SMAL" + + "L LETTER U WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER U WITH TILDE AND AC" + + "UTELATIN SMALL LETTER U WITH TILDE AND ACUTELATIN CAPITAL LETTER U WITH " + + "MACRON AND DIAERESISLATIN SMALL LETTER U WITH MACRON AND DIAERESISLATIN " + + "CAPITAL LETTER V WITH TILDELATIN SMALL LETTER V WITH TILDELATIN CAPITAL " + + "LETTER V WITH DOT BELOWLATIN SMALL LETTER V WITH DOT BELOWLATIN CAPITAL " + + "LETTER W WITH GRAVELATIN SMALL LETTER W WITH GRAVELATIN CAPITAL LETTER W" + + " WITH ACUTELATIN SMALL LETTER W WITH ACUTELATIN CAPITAL LETTER W WITH DI" + + "AERESISLATIN SMALL LETTER W WITH DIAERESISLATIN CAPITAL LETTER W WITH DO" + + "T ABOVELATIN SMALL LETTER W WITH DOT ABOVELATIN CAPITAL LETTER W WITH DO" + + "T BELOWLATIN SMALL LETTER W WITH DOT BELOWLATIN CAPITAL LETTER X WITH DO" + + "T ABOVELATIN SMALL LETTER X WITH DOT ABOVELATIN CAPITAL LETTER X WITH DI") + ("" + + "AERESISLATIN SMALL LETTER X WITH DIAERESISLATIN CAPITAL LETTER Y WITH DO" + + "T ABOVELATIN SMALL LETTER Y WITH DOT ABOVELATIN CAPITAL LETTER Z WITH CI" + + "RCUMFLEXLATIN SMALL LETTER Z WITH CIRCUMFLEXLATIN CAPITAL LETTER Z WITH " + + "DOT BELOWLATIN SMALL LETTER Z WITH DOT BELOWLATIN CAPITAL LETTER Z WITH " + + "LINE BELOWLATIN SMALL LETTER Z WITH LINE BELOWLATIN SMALL LETTER H WITH " + + "LINE BELOWLATIN SMALL LETTER T WITH DIAERESISLATIN SMALL LETTER W WITH R" + + "ING ABOVELATIN SMALL LETTER Y WITH RING ABOVELATIN SMALL LETTER A WITH R" + + "IGHT HALF RINGLATIN SMALL LETTER LONG S WITH DOT ABOVELATIN SMALL LETTER" + + " LONG S WITH DIAGONAL STROKELATIN SMALL LETTER LONG S WITH HIGH STROKELA" + + "TIN CAPITAL LETTER SHARP SLATIN SMALL LETTER DELTALATIN CAPITAL LETTER A" + + " WITH DOT BELOWLATIN SMALL LETTER A WITH DOT BELOWLATIN CAPITAL LETTER A" + + " WITH HOOK ABOVELATIN SMALL LETTER A WITH HOOK ABOVELATIN CAPITAL LETTER" + + " A WITH CIRCUMFLEX AND ACUTELATIN SMALL LETTER A WITH CIRCUMFLEX AND ACU" + + "TELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVELATIN SMALL LETTER A W" + + "ITH CIRCUMFLEX AND GRAVELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK " + + "ABOVELATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVELATIN CAPITAL LE" + + "TTER A WITH CIRCUMFLEX AND TILDELATIN SMALL LETTER A WITH CIRCUMFLEX AND" + + " TILDELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOWLATIN SMALL LE" + + "TTER A WITH CIRCUMFLEX AND DOT BELOWLATIN CAPITAL LETTER A WITH BREVE AN" + + "D ACUTELATIN SMALL LETTER A WITH BREVE AND ACUTELATIN CAPITAL LETTER A W" + + "ITH BREVE AND GRAVELATIN SMALL LETTER A WITH BREVE AND GRAVELATIN CAPITA" + + "L LETTER A WITH BREVE AND HOOK ABOVELATIN SMALL LETTER A WITH BREVE AND " + + "HOOK ABOVELATIN CAPITAL LETTER A WITH BREVE AND TILDELATIN SMALL LETTER " + + "A WITH BREVE AND TILDELATIN CAPITAL LETTER A WITH BREVE AND DOT BELOWLAT" + + "IN SMALL LETTER A WITH BREVE AND DOT BELOWLATIN CAPITAL LETTER E WITH DO" + + "T BELOWLATIN SMALL LETTER E WITH DOT BELOWLATIN CAPITAL LETTER E WITH HO" + + "OK ABOVELATIN SMALL LETTER E WITH HOOK ABOVELATIN CAPITAL LETTER E WITH " + + "TILDELATIN SMALL LETTER E WITH TILDELATIN CAPITAL LETTER E WITH CIRCUMFL" + + "EX AND ACUTELATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTELATIN CAPITAL " + + "LETTER E WITH CIRCUMFLEX AND GRAVELATIN SMALL LETTER E WITH CIRCUMFLEX A" + + "ND GRAVELATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVELATIN SMALL" + + " LETTER E WITH CIRCUMFLEX AND HOOK ABOVELATIN CAPITAL LETTER E WITH CIRC" + + "UMFLEX AND TILDELATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDELATIN CAPI" + + "TAL LETTER E WITH CIRCUMFLEX AND DOT BELOWLATIN SMALL LETTER E WITH CIRC" + + "UMFLEX AND DOT BELOWLATIN CAPITAL LETTER I WITH HOOK ABOVELATIN SMALL LE" + + "TTER I WITH HOOK ABOVELATIN CAPITAL LETTER I WITH DOT BELOWLATIN SMALL L" + + "ETTER I WITH DOT BELOWLATIN CAPITAL LETTER O WITH DOT BELOWLATIN SMALL L" + + "ETTER O WITH DOT BELOWLATIN CAPITAL LETTER O WITH HOOK ABOVELATIN SMALL " + + "LETTER O WITH HOOK ABOVELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE" + + "LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTELATIN CAPITAL LETTER O WIT" + + "H CIRCUMFLEX AND GRAVELATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVELATI" + + "N CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVELATIN SMALL LETTER O WI" + + "TH CIRCUMFLEX AND HOOK ABOVELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND T" + + "ILDELATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDELATIN CAPITAL LETTER O" + + " WITH CIRCUMFLEX AND DOT BELOWLATIN SMALL LETTER O WITH CIRCUMFLEX AND D" + + "OT BELOWLATIN CAPITAL LETTER O WITH HORN AND ACUTELATIN SMALL LETTER O W" + + "ITH HORN AND ACUTELATIN CAPITAL LETTER O WITH HORN AND GRAVELATIN SMALL " + + "LETTER O WITH HORN AND GRAVELATIN CAPITAL LETTER O WITH HORN AND HOOK AB" + + "OVELATIN SMALL LETTER O WITH HORN AND HOOK ABOVELATIN CAPITAL LETTER O W" + + "ITH HORN AND TILDELATIN SMALL LETTER O WITH HORN AND TILDELATIN CAPITAL " + + "LETTER O WITH HORN AND DOT BELOWLATIN SMALL LETTER O WITH HORN AND DOT B" + + "ELOWLATIN CAPITAL LETTER U WITH DOT BELOWLATIN SMALL LETTER U WITH DOT B" + + "ELOWLATIN CAPITAL LETTER U WITH HOOK ABOVELATIN SMALL LETTER U WITH HOOK" + + " ABOVELATIN CAPITAL LETTER U WITH HORN AND ACUTELATIN SMALL LETTER U WIT" + + "H HORN AND ACUTELATIN CAPITAL LETTER U WITH HORN AND GRAVELATIN SMALL LE" + + "TTER U WITH HORN AND GRAVELATIN CAPITAL LETTER U WITH HORN AND HOOK ABOV" + + "ELATIN SMALL LETTER U WITH HORN AND HOOK ABOVELATIN CAPITAL LETTER U WIT" + + "H HORN AND TILDELATIN SMALL LETTER U WITH HORN AND TILDELATIN CAPITAL LE" + + "TTER U WITH HORN AND DOT BELOWLATIN SMALL LETTER U WITH HORN AND DOT BEL" + + "OWLATIN CAPITAL LETTER Y WITH GRAVELATIN SMALL LETTER Y WITH GRAVELATIN " + + "CAPITAL LETTER Y WITH DOT BELOWLATIN SMALL LETTER Y WITH DOT BELOWLATIN " + + "CAPITAL LETTER Y WITH HOOK ABOVELATIN SMALL LETTER Y WITH HOOK ABOVELATI" + + "N CAPITAL LETTER Y WITH TILDELATIN SMALL LETTER Y WITH TILDELATIN CAPITA" + + "L LETTER MIDDLE-WELSH LLLATIN SMALL LETTER MIDDLE-WELSH LLLATIN CAPITAL ") + ("" + + "LETTER MIDDLE-WELSH VLATIN SMALL LETTER MIDDLE-WELSH VLATIN CAPITAL LETT" + + "ER Y WITH LOOPLATIN SMALL LETTER Y WITH LOOPGREEK SMALL LETTER ALPHA WIT" + + "H PSILIGREEK SMALL LETTER ALPHA WITH DASIAGREEK SMALL LETTER ALPHA WITH " + + "PSILI AND VARIAGREEK SMALL LETTER ALPHA WITH DASIA AND VARIAGREEK SMALL " + + "LETTER ALPHA WITH PSILI AND OXIAGREEK SMALL LETTER ALPHA WITH DASIA AND " + + "OXIAGREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENIGREEK SMALL LETTE" + + "R ALPHA WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER ALPHA WITH PSILIG" + + "REEK CAPITAL LETTER ALPHA WITH DASIAGREEK CAPITAL LETTER ALPHA WITH PSIL" + + "I AND VARIAGREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIAGREEK CAPITAL " + + "LETTER ALPHA WITH PSILI AND OXIAGREEK CAPITAL LETTER ALPHA WITH DASIA AN" + + "D OXIAGREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENIGREEK CAPITAL" + + " LETTER ALPHA WITH DASIA AND PERISPOMENIGREEK SMALL LETTER EPSILON WITH " + + "PSILIGREEK SMALL LETTER EPSILON WITH DASIAGREEK SMALL LETTER EPSILON WIT" + + "H PSILI AND VARIAGREEK SMALL LETTER EPSILON WITH DASIA AND VARIAGREEK SM" + + "ALL LETTER EPSILON WITH PSILI AND OXIAGREEK SMALL LETTER EPSILON WITH DA" + + "SIA AND OXIAGREEK CAPITAL LETTER EPSILON WITH PSILIGREEK CAPITAL LETTER " + + "EPSILON WITH DASIAGREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIAGREEK" + + " CAPITAL LETTER EPSILON WITH DASIA AND VARIAGREEK CAPITAL LETTER EPSILON" + + " WITH PSILI AND OXIAGREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIAGREE" + + "K SMALL LETTER ETA WITH PSILIGREEK SMALL LETTER ETA WITH DASIAGREEK SMAL" + + "L LETTER ETA WITH PSILI AND VARIAGREEK SMALL LETTER ETA WITH DASIA AND V" + + "ARIAGREEK SMALL LETTER ETA WITH PSILI AND OXIAGREEK SMALL LETTER ETA WIT" + + "H DASIA AND OXIAGREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENIGREEK S" + + "MALL LETTER ETA WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER ETA WITH " + + "PSILIGREEK CAPITAL LETTER ETA WITH DASIAGREEK CAPITAL LETTER ETA WITH PS" + + "ILI AND VARIAGREEK CAPITAL LETTER ETA WITH DASIA AND VARIAGREEK CAPITAL " + + "LETTER ETA WITH PSILI AND OXIAGREEK CAPITAL LETTER ETA WITH DASIA AND OX" + + "IAGREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTE" + + "R ETA WITH DASIA AND PERISPOMENIGREEK SMALL LETTER IOTA WITH PSILIGREEK " + + "SMALL LETTER IOTA WITH DASIAGREEK SMALL LETTER IOTA WITH PSILI AND VARIA" + + "GREEK SMALL LETTER IOTA WITH DASIA AND VARIAGREEK SMALL LETTER IOTA WITH" + + " PSILI AND OXIAGREEK SMALL LETTER IOTA WITH DASIA AND OXIAGREEK SMALL LE" + + "TTER IOTA WITH PSILI AND PERISPOMENIGREEK SMALL LETTER IOTA WITH DASIA A" + + "ND PERISPOMENIGREEK CAPITAL LETTER IOTA WITH PSILIGREEK CAPITAL LETTER I" + + "OTA WITH DASIAGREEK CAPITAL LETTER IOTA WITH PSILI AND VARIAGREEK CAPITA" + + "L LETTER IOTA WITH DASIA AND VARIAGREEK CAPITAL LETTER IOTA WITH PSILI A" + + "ND OXIAGREEK CAPITAL LETTER IOTA WITH DASIA AND OXIAGREEK CAPITAL LETTER" + + " IOTA WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTER IOTA WITH DASIA AND" + + " PERISPOMENIGREEK SMALL LETTER OMICRON WITH PSILIGREEK SMALL LETTER OMIC" + + "RON WITH DASIAGREEK SMALL LETTER OMICRON WITH PSILI AND VARIAGREEK SMALL" + + " LETTER OMICRON WITH DASIA AND VARIAGREEK SMALL LETTER OMICRON WITH PSIL" + + "I AND OXIAGREEK SMALL LETTER OMICRON WITH DASIA AND OXIAGREEK CAPITAL LE" + + "TTER OMICRON WITH PSILIGREEK CAPITAL LETTER OMICRON WITH DASIAGREEK CAPI" + + "TAL LETTER OMICRON WITH PSILI AND VARIAGREEK CAPITAL LETTER OMICRON WITH" + + " DASIA AND VARIAGREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIAGREEK CA" + + "PITAL LETTER OMICRON WITH DASIA AND OXIAGREEK SMALL LETTER UPSILON WITH " + + "PSILIGREEK SMALL LETTER UPSILON WITH DASIAGREEK SMALL LETTER UPSILON WIT" + + "H PSILI AND VARIAGREEK SMALL LETTER UPSILON WITH DASIA AND VARIAGREEK SM" + + "ALL LETTER UPSILON WITH PSILI AND OXIAGREEK SMALL LETTER UPSILON WITH DA" + + "SIA AND OXIAGREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENIGREEK S" + + "MALL LETTER UPSILON WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER UPSIL" + + "ON WITH DASIAGREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIAGREEK CAPI" + + "TAL LETTER UPSILON WITH DASIA AND OXIAGREEK CAPITAL LETTER UPSILON WITH " + + "DASIA AND PERISPOMENIGREEK SMALL LETTER OMEGA WITH PSILIGREEK SMALL LETT" + + "ER OMEGA WITH DASIAGREEK SMALL LETTER OMEGA WITH PSILI AND VARIAGREEK SM" + + "ALL LETTER OMEGA WITH DASIA AND VARIAGREEK SMALL LETTER OMEGA WITH PSILI" + + " AND OXIAGREEK SMALL LETTER OMEGA WITH DASIA AND OXIAGREEK SMALL LETTER " + + "OMEGA WITH PSILI AND PERISPOMENIGREEK SMALL LETTER OMEGA WITH DASIA AND " + + "PERISPOMENIGREEK CAPITAL LETTER OMEGA WITH PSILIGREEK CAPITAL LETTER OME" + + "GA WITH DASIAGREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIAGREEK CAPITA" + + "L LETTER OMEGA WITH DASIA AND VARIAGREEK CAPITAL LETTER OMEGA WITH PSILI" + + " AND OXIAGREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIAGREEK CAPITAL LET" + + "TER OMEGA WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTER OMEGA WITH DASI" + + "A AND PERISPOMENIGREEK SMALL LETTER ALPHA WITH VARIAGREEK SMALL LETTER A") + ("" + + "LPHA WITH OXIAGREEK SMALL LETTER EPSILON WITH VARIAGREEK SMALL LETTER EP" + + "SILON WITH OXIAGREEK SMALL LETTER ETA WITH VARIAGREEK SMALL LETTER ETA W" + + "ITH OXIAGREEK SMALL LETTER IOTA WITH VARIAGREEK SMALL LETTER IOTA WITH O" + + "XIAGREEK SMALL LETTER OMICRON WITH VARIAGREEK SMALL LETTER OMICRON WITH " + + "OXIAGREEK SMALL LETTER UPSILON WITH VARIAGREEK SMALL LETTER UPSILON WITH" + + " OXIAGREEK SMALL LETTER OMEGA WITH VARIAGREEK SMALL LETTER OMEGA WITH OX" + + "IAGREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENIGREEK SMALL LETTE" + + "R ALPHA WITH DASIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH PSILI " + + "AND VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH DASIA AND VARIA" + + " AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGE" + + "GRAMMENIGREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENIGR" + + "EEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENIGREEK" + + " SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENIGREEK CA" + + "PITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALP" + + "HA WITH DASIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AN" + + "D VARIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND VARI" + + "A AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND P" + + "ROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGR" + + "AMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGR" + + "AMMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGR" + + "AMMENIGREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENIGREEK SMALL LET" + + "TER ETA WITH DASIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH PSILI AN" + + "D VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH DASIA AND VARIA AND" + + " YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMME" + + "NIGREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENIGREEK SMAL" + + "L LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENIGREEK SMALL LET" + + "TER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER" + + " ETA WITH PSILI AND PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH DASIA AN" + + "D PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGE" + + "GRAMMENIGREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI" + + "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENIGREEK CAP" + + "ITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETT" + + "ER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENIGREEK CAPITAL LETTER" + + " ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENIGREEK SMALL LETTER OME" + + "GA WITH PSILI AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH DASIA AND Y" + + "POGEGRAMMENIGREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMM" + + "ENIGREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENIGREEK " + + "SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETT" + + "ER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA W" + + "ITH PSILI AND PERISPOMENI AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH" + + " DASIA AND PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH " + + "PSILI AND PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGE" + + "GRAMMENIGREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMME" + + "NIGREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENIGREE" + + "K CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENIGREEK CAPIT" + + "AL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETT" + + "ER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENIGREEK CAPITAL LETT" + + "ER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENIGREEK SMALL LETTER" + + " ALPHA WITH VRACHYGREEK SMALL LETTER ALPHA WITH MACRONGREEK SMALL LETTER" + + " ALPHA WITH VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH YPOGEGR" + + "AMMENIGREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENIGREEK SMALL LE" + + "TTER ALPHA WITH PERISPOMENIGREEK SMALL LETTER ALPHA WITH PERISPOMENI AND" + + " YPOGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH VRACHYGREEK CAPITAL LETTER" + + " ALPHA WITH MACRONGREEK CAPITAL LETTER ALPHA WITH VARIAGREEK CAPITAL LET" + + "TER ALPHA WITH OXIAGREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENIGREEK K" + + "ORONISGREEK PROSGEGRAMMENIGREEK PSILIGREEK PERISPOMENIGREEK DIALYTIKA AN" + + "D PERISPOMENIGREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENIGREEK SM" + + "ALL LETTER ETA WITH YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH OXIA AND YP" + + "OGEGRAMMENIGREEK SMALL LETTER ETA WITH PERISPOMENIGREEK SMALL LETTER ETA" + + " WITH PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER EPSILON WITH VAR" + + "IAGREEK CAPITAL LETTER EPSILON WITH OXIAGREEK CAPITAL LETTER ETA WITH VA" + + "RIAGREEK CAPITAL LETTER ETA WITH OXIAGREEK CAPITAL LETTER ETA WITH PROSG" + + "EGRAMMENIGREEK PSILI AND VARIAGREEK PSILI AND OXIAGREEK PSILI AND PERISP" + + "OMENIGREEK SMALL LETTER IOTA WITH VRACHYGREEK SMALL LETTER IOTA WITH MAC") + ("" + + "RONGREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIAGREEK SMALL LETTER IO" + + "TA WITH DIALYTIKA AND OXIAGREEK SMALL LETTER IOTA WITH PERISPOMENIGREEK " + + "SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENIGREEK CAPITAL LETTER IOT" + + "A WITH VRACHYGREEK CAPITAL LETTER IOTA WITH MACRONGREEK CAPITAL LETTER I" + + "OTA WITH VARIAGREEK CAPITAL LETTER IOTA WITH OXIAGREEK DASIA AND VARIAGR" + + "EEK DASIA AND OXIAGREEK DASIA AND PERISPOMENIGREEK SMALL LETTER UPSILON " + + "WITH VRACHYGREEK SMALL LETTER UPSILON WITH MACRONGREEK SMALL LETTER UPSI" + + "LON WITH DIALYTIKA AND VARIAGREEK SMALL LETTER UPSILON WITH DIALYTIKA AN" + + "D OXIAGREEK SMALL LETTER RHO WITH PSILIGREEK SMALL LETTER RHO WITH DASIA" + + "GREEK SMALL LETTER UPSILON WITH PERISPOMENIGREEK SMALL LETTER UPSILON WI" + + "TH DIALYTIKA AND PERISPOMENIGREEK CAPITAL LETTER UPSILON WITH VRACHYGREE" + + "K CAPITAL LETTER UPSILON WITH MACRONGREEK CAPITAL LETTER UPSILON WITH VA" + + "RIAGREEK CAPITAL LETTER UPSILON WITH OXIAGREEK CAPITAL LETTER RHO WITH D" + + "ASIAGREEK DIALYTIKA AND VARIAGREEK DIALYTIKA AND OXIAGREEK VARIAGREEK SM" + + "ALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WI" + + "TH YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENIGREE" + + "K SMALL LETTER OMEGA WITH PERISPOMENIGREEK SMALL LETTER OMEGA WITH PERIS" + + "POMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER OMICRON WITH VARIAGREEK CAP" + + "ITAL LETTER OMICRON WITH OXIAGREEK CAPITAL LETTER OMEGA WITH VARIAGREEK " + + "CAPITAL LETTER OMEGA WITH OXIAGREEK CAPITAL LETTER OMEGA WITH PROSGEGRAM" + + "MENIGREEK OXIAGREEK DASIAEN QUADEM QUADEN SPACEEM SPACETHREE-PER-EM SPAC" + + "EFOUR-PER-EM SPACESIX-PER-EM SPACEFIGURE SPACEPUNCTUATION SPACETHIN SPAC" + + "EHAIR SPACEZERO WIDTH SPACEZERO WIDTH NON-JOINERZERO WIDTH JOINERLEFT-TO" + + "-RIGHT MARKRIGHT-TO-LEFT MARKHYPHENNON-BREAKING HYPHENFIGURE DASHEN DASH" + + "EM DASHHORIZONTAL BARDOUBLE VERTICAL LINEDOUBLE LOW LINELEFT SINGLE QUOT" + + "ATION MARKRIGHT SINGLE QUOTATION MARKSINGLE LOW-9 QUOTATION MARKSINGLE H" + + "IGH-REVERSED-9 QUOTATION MARKLEFT DOUBLE QUOTATION MARKRIGHT DOUBLE QUOT" + + "ATION MARKDOUBLE LOW-9 QUOTATION MARKDOUBLE HIGH-REVERSED-9 QUOTATION MA" + + "RKDAGGERDOUBLE DAGGERBULLETTRIANGULAR BULLETONE DOT LEADERTWO DOT LEADER" + + "HORIZONTAL ELLIPSISHYPHENATION POINTLINE SEPARATORPARAGRAPH SEPARATORLEF" + + "T-TO-RIGHT EMBEDDINGRIGHT-TO-LEFT EMBEDDINGPOP DIRECTIONAL FORMATTINGLEF" + + "T-TO-RIGHT OVERRIDERIGHT-TO-LEFT OVERRIDENARROW NO-BREAK SPACEPER MILLE " + + "SIGNPER TEN THOUSAND SIGNPRIMEDOUBLE PRIMETRIPLE PRIMEREVERSED PRIMEREVE" + + "RSED DOUBLE PRIMEREVERSED TRIPLE PRIMECARETSINGLE LEFT-POINTING ANGLE QU" + + "OTATION MARKSINGLE RIGHT-POINTING ANGLE QUOTATION MARKREFERENCE MARKDOUB" + + "LE EXCLAMATION MARKINTERROBANGOVERLINEUNDERTIECHARACTER TIECARET INSERTI" + + "ON POINTASTERISMHYPHEN BULLETFRACTION SLASHLEFT SQUARE BRACKET WITH QUIL" + + "LRIGHT SQUARE BRACKET WITH QUILLDOUBLE QUESTION MARKQUESTION EXCLAMATION" + + " MARKEXCLAMATION QUESTION MARKTIRONIAN SIGN ETREVERSED PILCROW SIGNBLACK" + + " LEFTWARDS BULLETBLACK RIGHTWARDS BULLETLOW ASTERISKREVERSED SEMICOLONCL" + + "OSE UPTWO ASTERISKS ALIGNED VERTICALLYCOMMERCIAL MINUS SIGNSWUNG DASHINV" + + "ERTED UNDERTIEFLOWER PUNCTUATION MARKTHREE DOT PUNCTUATIONQUADRUPLE PRIM" + + "EFOUR DOT PUNCTUATIONFIVE DOT PUNCTUATIONTWO DOT PUNCTUATIONFOUR DOT MAR" + + "KDOTTED CROSSTRICOLONVERTICAL FOUR DOTSMEDIUM MATHEMATICAL SPACEWORD JOI" + + "NERFUNCTION APPLICATIONINVISIBLE TIMESINVISIBLE SEPARATORINVISIBLE PLUSL" + + "EFT-TO-RIGHT ISOLATERIGHT-TO-LEFT ISOLATEFIRST STRONG ISOLATEPOP DIRECTI" + + "ONAL ISOLATEINHIBIT SYMMETRIC SWAPPINGACTIVATE SYMMETRIC SWAPPINGINHIBIT" + + " ARABIC FORM SHAPINGACTIVATE ARABIC FORM SHAPINGNATIONAL DIGIT SHAPESNOM" + + "INAL DIGIT SHAPESSUPERSCRIPT ZEROSUPERSCRIPT LATIN SMALL LETTER ISUPERSC" + + "RIPT FOURSUPERSCRIPT FIVESUPERSCRIPT SIXSUPERSCRIPT SEVENSUPERSCRIPT EIG" + + "HTSUPERSCRIPT NINESUPERSCRIPT PLUS SIGNSUPERSCRIPT MINUSSUPERSCRIPT EQUA" + + "LS SIGNSUPERSCRIPT LEFT PARENTHESISSUPERSCRIPT RIGHT PARENTHESISSUPERSCR" + + "IPT LATIN SMALL LETTER NSUBSCRIPT ZEROSUBSCRIPT ONESUBSCRIPT TWOSUBSCRIP" + + "T THREESUBSCRIPT FOURSUBSCRIPT FIVESUBSCRIPT SIXSUBSCRIPT SEVENSUBSCRIPT" + + " EIGHTSUBSCRIPT NINESUBSCRIPT PLUS SIGNSUBSCRIPT MINUSSUBSCRIPT EQUALS S" + + "IGNSUBSCRIPT LEFT PARENTHESISSUBSCRIPT RIGHT PARENTHESISLATIN SUBSCRIPT " + + "SMALL LETTER ALATIN SUBSCRIPT SMALL LETTER ELATIN SUBSCRIPT SMALL LETTER" + + " OLATIN SUBSCRIPT SMALL LETTER XLATIN SUBSCRIPT SMALL LETTER SCHWALATIN " + + "SUBSCRIPT SMALL LETTER HLATIN SUBSCRIPT SMALL LETTER KLATIN SUBSCRIPT SM" + + "ALL LETTER LLATIN SUBSCRIPT SMALL LETTER MLATIN SUBSCRIPT SMALL LETTER N" + + "LATIN SUBSCRIPT SMALL LETTER PLATIN SUBSCRIPT SMALL LETTER SLATIN SUBSCR" + + "IPT SMALL LETTER TEURO-CURRENCY SIGNCOLON SIGNCRUZEIRO SIGNFRENCH FRANC " + + "SIGNLIRA SIGNMILL SIGNNAIRA SIGNPESETA SIGNRUPEE SIGNWON SIGNNEW SHEQEL " + + "SIGNDONG SIGNEURO SIGNKIP SIGNTUGRIK SIGNDRACHMA SIGNGERMAN PENNY SIGNPE") + ("" + + "SO SIGNGUARANI SIGNAUSTRAL SIGNHRYVNIA SIGNCEDI SIGNLIVRE TOURNOIS SIGNS" + + "PESMILO SIGNTENGE SIGNINDIAN RUPEE SIGNTURKISH LIRA SIGNNORDIC MARK SIGN" + + "MANAT SIGNRUBLE SIGNLARI SIGNCOMBINING LEFT HARPOON ABOVECOMBINING RIGHT" + + " HARPOON ABOVECOMBINING LONG VERTICAL LINE OVERLAYCOMBINING SHORT VERTIC" + + "AL LINE OVERLAYCOMBINING ANTICLOCKWISE ARROW ABOVECOMBINING CLOCKWISE AR" + + "ROW ABOVECOMBINING LEFT ARROW ABOVECOMBINING RIGHT ARROW ABOVECOMBINING " + + "RING OVERLAYCOMBINING CLOCKWISE RING OVERLAYCOMBINING ANTICLOCKWISE RING" + + " OVERLAYCOMBINING THREE DOTS ABOVECOMBINING FOUR DOTS ABOVECOMBINING ENC" + + "LOSING CIRCLECOMBINING ENCLOSING SQUARECOMBINING ENCLOSING DIAMONDCOMBIN" + + "ING ENCLOSING CIRCLE BACKSLASHCOMBINING LEFT RIGHT ARROW ABOVECOMBINING " + + "ENCLOSING SCREENCOMBINING ENCLOSING KEYCAPCOMBINING ENCLOSING UPWARD POI" + + "NTING TRIANGLECOMBINING REVERSE SOLIDUS OVERLAYCOMBINING DOUBLE VERTICAL" + + " STROKE OVERLAYCOMBINING ANNUITY SYMBOLCOMBINING TRIPLE UNDERDOTCOMBININ" + + "G WIDE BRIDGE ABOVECOMBINING LEFTWARDS ARROW OVERLAYCOMBINING LONG DOUBL" + + "E SOLIDUS OVERLAYCOMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDSCOMBINI" + + "NG LEFTWARDS HARPOON WITH BARB DOWNWARDSCOMBINING LEFT ARROW BELOWCOMBIN" + + "ING RIGHT ARROW BELOWCOMBINING ASTERISK ABOVEACCOUNT OFADDRESSED TO THE " + + "SUBJECTDOUBLE-STRUCK CAPITAL CDEGREE CELSIUSCENTRE LINE SYMBOLCARE OFCAD" + + "A UNAEULER CONSTANTSCRUPLEDEGREE FAHRENHEITSCRIPT SMALL GSCRIPT CAPITAL " + + "HBLACK-LETTER CAPITAL HDOUBLE-STRUCK CAPITAL HPLANCK CONSTANTPLANCK CONS" + + "TANT OVER TWO PISCRIPT CAPITAL IBLACK-LETTER CAPITAL ISCRIPT CAPITAL LSC" + + "RIPT SMALL LL B BAR SYMBOLDOUBLE-STRUCK CAPITAL NNUMERO SIGNSOUND RECORD" + + "ING COPYRIGHTSCRIPT CAPITAL PDOUBLE-STRUCK CAPITAL PDOUBLE-STRUCK CAPITA" + + "L QSCRIPT CAPITAL RBLACK-LETTER CAPITAL RDOUBLE-STRUCK CAPITAL RPRESCRIP" + + "TION TAKERESPONSESERVICE MARKTELEPHONE SIGNTRADE MARK SIGNVERSICLEDOUBLE" + + "-STRUCK CAPITAL ZOUNCE SIGNOHM SIGNINVERTED OHM SIGNBLACK-LETTER CAPITAL" + + " ZTURNED GREEK SMALL LETTER IOTAKELVIN SIGNANGSTROM SIGNSCRIPT CAPITAL B" + + "BLACK-LETTER CAPITAL CESTIMATED SYMBOLSCRIPT SMALL ESCRIPT CAPITAL ESCRI" + + "PT CAPITAL FTURNED CAPITAL FSCRIPT CAPITAL MSCRIPT SMALL OALEF SYMBOLBET" + + " SYMBOLGIMEL SYMBOLDALET SYMBOLINFORMATION SOURCEROTATED CAPITAL QFACSIM" + + "ILE SIGNDOUBLE-STRUCK SMALL PIDOUBLE-STRUCK SMALL GAMMADOUBLE-STRUCK CAP" + + "ITAL GAMMADOUBLE-STRUCK CAPITAL PIDOUBLE-STRUCK N-ARY SUMMATIONTURNED SA" + + "NS-SERIF CAPITAL GTURNED SANS-SERIF CAPITAL LREVERSED SANS-SERIF CAPITAL" + + " LTURNED SANS-SERIF CAPITAL YDOUBLE-STRUCK ITALIC CAPITAL DDOUBLE-STRUCK" + + " ITALIC SMALL DDOUBLE-STRUCK ITALIC SMALL EDOUBLE-STRUCK ITALIC SMALL ID" + + "OUBLE-STRUCK ITALIC SMALL JPROPERTY LINETURNED AMPERSANDPER SIGNAKTIESEL" + + "SKABTURNED SMALL FSYMBOL FOR SAMARITAN SOURCEVULGAR FRACTION ONE SEVENTH" + + "VULGAR FRACTION ONE NINTHVULGAR FRACTION ONE TENTHVULGAR FRACTION ONE TH" + + "IRDVULGAR FRACTION TWO THIRDSVULGAR FRACTION ONE FIFTHVULGAR FRACTION TW" + + "O FIFTHSVULGAR FRACTION THREE FIFTHSVULGAR FRACTION FOUR FIFTHSVULGAR FR" + + "ACTION ONE SIXTHVULGAR FRACTION FIVE SIXTHSVULGAR FRACTION ONE EIGHTHVUL" + + "GAR FRACTION THREE EIGHTHSVULGAR FRACTION FIVE EIGHTHSVULGAR FRACTION SE" + + "VEN EIGHTHSFRACTION NUMERATOR ONEROMAN NUMERAL ONEROMAN NUMERAL TWOROMAN" + + " NUMERAL THREEROMAN NUMERAL FOURROMAN NUMERAL FIVEROMAN NUMERAL SIXROMAN" + + " NUMERAL SEVENROMAN NUMERAL EIGHTROMAN NUMERAL NINEROMAN NUMERAL TENROMA" + + "N NUMERAL ELEVENROMAN NUMERAL TWELVEROMAN NUMERAL FIFTYROMAN NUMERAL ONE" + + " HUNDREDROMAN NUMERAL FIVE HUNDREDROMAN NUMERAL ONE THOUSANDSMALL ROMAN " + + "NUMERAL ONESMALL ROMAN NUMERAL TWOSMALL ROMAN NUMERAL THREESMALL ROMAN N" + + "UMERAL FOURSMALL ROMAN NUMERAL FIVESMALL ROMAN NUMERAL SIXSMALL ROMAN NU" + + "MERAL SEVENSMALL ROMAN NUMERAL EIGHTSMALL ROMAN NUMERAL NINESMALL ROMAN " + + "NUMERAL TENSMALL ROMAN NUMERAL ELEVENSMALL ROMAN NUMERAL TWELVESMALL ROM" + + "AN NUMERAL FIFTYSMALL ROMAN NUMERAL ONE HUNDREDSMALL ROMAN NUMERAL FIVE " + + "HUNDREDSMALL ROMAN NUMERAL ONE THOUSANDROMAN NUMERAL ONE THOUSAND C DROM" + + "AN NUMERAL FIVE THOUSANDROMAN NUMERAL TEN THOUSANDROMAN NUMERAL REVERSED" + + " ONE HUNDREDLATIN SMALL LETTER REVERSED CROMAN NUMERAL SIX LATE FORMROMA" + + "N NUMERAL FIFTY EARLY FORMROMAN NUMERAL FIFTY THOUSANDROMAN NUMERAL ONE " + + "HUNDRED THOUSANDVULGAR FRACTION ZERO THIRDSTURNED DIGIT TWOTURNED DIGIT " + + "THREELEFTWARDS ARROWUPWARDS ARROWRIGHTWARDS ARROWDOWNWARDS ARROWLEFT RIG" + + "HT ARROWUP DOWN ARROWNORTH WEST ARROWNORTH EAST ARROWSOUTH EAST ARROWSOU" + + "TH WEST ARROWLEFTWARDS ARROW WITH STROKERIGHTWARDS ARROW WITH STROKELEFT" + + "WARDS WAVE ARROWRIGHTWARDS WAVE ARROWLEFTWARDS TWO HEADED ARROWUPWARDS T" + + "WO HEADED ARROWRIGHTWARDS TWO HEADED ARROWDOWNWARDS TWO HEADED ARROWLEFT" + + "WARDS ARROW WITH TAILRIGHTWARDS ARROW WITH TAILLEFTWARDS ARROW FROM BARU" + + "PWARDS ARROW FROM BARRIGHTWARDS ARROW FROM BARDOWNWARDS ARROW FROM BARUP") + ("" + + " DOWN ARROW WITH BASELEFTWARDS ARROW WITH HOOKRIGHTWARDS ARROW WITH HOOK" + + "LEFTWARDS ARROW WITH LOOPRIGHTWARDS ARROW WITH LOOPLEFT RIGHT WAVE ARROW" + + "LEFT RIGHT ARROW WITH STROKEDOWNWARDS ZIGZAG ARROWUPWARDS ARROW WITH TIP" + + " LEFTWARDSUPWARDS ARROW WITH TIP RIGHTWARDSDOWNWARDS ARROW WITH TIP LEFT" + + "WARDSDOWNWARDS ARROW WITH TIP RIGHTWARDSRIGHTWARDS ARROW WITH CORNER DOW" + + "NWARDSDOWNWARDS ARROW WITH CORNER LEFTWARDSANTICLOCKWISE TOP SEMICIRCLE " + + "ARROWCLOCKWISE TOP SEMICIRCLE ARROWNORTH WEST ARROW TO LONG BARLEFTWARDS" + + " ARROW TO BAR OVER RIGHTWARDS ARROW TO BARANTICLOCKWISE OPEN CIRCLE ARRO" + + "WCLOCKWISE OPEN CIRCLE ARROWLEFTWARDS HARPOON WITH BARB UPWARDSLEFTWARDS" + + " HARPOON WITH BARB DOWNWARDSUPWARDS HARPOON WITH BARB RIGHTWARDSUPWARDS " + + "HARPOON WITH BARB LEFTWARDSRIGHTWARDS HARPOON WITH BARB UPWARDSRIGHTWARD" + + "S HARPOON WITH BARB DOWNWARDSDOWNWARDS HARPOON WITH BARB RIGHTWARDSDOWNW" + + "ARDS HARPOON WITH BARB LEFTWARDSRIGHTWARDS ARROW OVER LEFTWARDS ARROWUPW" + + "ARDS ARROW LEFTWARDS OF DOWNWARDS ARROWLEFTWARDS ARROW OVER RIGHTWARDS A" + + "RROWLEFTWARDS PAIRED ARROWSUPWARDS PAIRED ARROWSRIGHTWARDS PAIRED ARROWS" + + "DOWNWARDS PAIRED ARROWSLEFTWARDS HARPOON OVER RIGHTWARDS HARPOONRIGHTWAR" + + "DS HARPOON OVER LEFTWARDS HARPOONLEFTWARDS DOUBLE ARROW WITH STROKELEFT " + + "RIGHT DOUBLE ARROW WITH STROKERIGHTWARDS DOUBLE ARROW WITH STROKELEFTWAR" + + "DS DOUBLE ARROWUPWARDS DOUBLE ARROWRIGHTWARDS DOUBLE ARROWDOWNWARDS DOUB" + + "LE ARROWLEFT RIGHT DOUBLE ARROWUP DOWN DOUBLE ARROWNORTH WEST DOUBLE ARR" + + "OWNORTH EAST DOUBLE ARROWSOUTH EAST DOUBLE ARROWSOUTH WEST DOUBLE ARROWL" + + "EFTWARDS TRIPLE ARROWRIGHTWARDS TRIPLE ARROWLEFTWARDS SQUIGGLE ARROWRIGH" + + "TWARDS SQUIGGLE ARROWUPWARDS ARROW WITH DOUBLE STROKEDOWNWARDS ARROW WIT" + + "H DOUBLE STROKELEFTWARDS DASHED ARROWUPWARDS DASHED ARROWRIGHTWARDS DASH" + + "ED ARROWDOWNWARDS DASHED ARROWLEFTWARDS ARROW TO BARRIGHTWARDS ARROW TO " + + "BARLEFTWARDS WHITE ARROWUPWARDS WHITE ARROWRIGHTWARDS WHITE ARROWDOWNWAR" + + "DS WHITE ARROWUPWARDS WHITE ARROW FROM BARUPWARDS WHITE ARROW ON PEDESTA" + + "LUPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BARUPWARDS WHITE ARROW " + + "ON PEDESTAL WITH VERTICAL BARUPWARDS WHITE DOUBLE ARROWUPWARDS WHITE DOU" + + "BLE ARROW ON PEDESTALRIGHTWARDS WHITE ARROW FROM WALLNORTH WEST ARROW TO" + + " CORNERSOUTH EAST ARROW TO CORNERUP DOWN WHITE ARROWRIGHT ARROW WITH SMA" + + "LL CIRCLEDOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROWTHREE RIGHTWARDS ARRO" + + "WSLEFTWARDS ARROW WITH VERTICAL STROKERIGHTWARDS ARROW WITH VERTICAL STR" + + "OKELEFT RIGHT ARROW WITH VERTICAL STROKELEFTWARDS ARROW WITH DOUBLE VERT" + + "ICAL STROKERIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKELEFT RIGHT ARROW " + + "WITH DOUBLE VERTICAL STROKELEFTWARDS OPEN-HEADED ARROWRIGHTWARDS OPEN-HE" + + "ADED ARROWLEFT RIGHT OPEN-HEADED ARROWFOR ALLCOMPLEMENTPARTIAL DIFFERENT" + + "IALTHERE EXISTSTHERE DOES NOT EXISTEMPTY SETINCREMENTNABLAELEMENT OFNOT " + + "AN ELEMENT OFSMALL ELEMENT OFCONTAINS AS MEMBERDOES NOT CONTAIN AS MEMBE" + + "RSMALL CONTAINS AS MEMBEREND OF PROOFN-ARY PRODUCTN-ARY COPRODUCTN-ARY S" + + "UMMATIONMINUS SIGNMINUS-OR-PLUS SIGNDOT PLUSDIVISION SLASHSET MINUSASTER" + + "ISK OPERATORRING OPERATORBULLET OPERATORSQUARE ROOTCUBE ROOTFOURTH ROOTP" + + "ROPORTIONAL TOINFINITYRIGHT ANGLEANGLEMEASURED ANGLESPHERICAL ANGLEDIVID" + + "ESDOES NOT DIVIDEPARALLEL TONOT PARALLEL TOLOGICAL ANDLOGICAL ORINTERSEC" + + "TIONUNIONINTEGRALDOUBLE INTEGRALTRIPLE INTEGRALCONTOUR INTEGRALSURFACE I" + + "NTEGRALVOLUME INTEGRALCLOCKWISE INTEGRALCLOCKWISE CONTOUR INTEGRALANTICL" + + "OCKWISE CONTOUR INTEGRALTHEREFOREBECAUSERATIOPROPORTIONDOT MINUSEXCESSGE" + + "OMETRIC PROPORTIONHOMOTHETICTILDE OPERATORREVERSED TILDEINVERTED LAZY SS" + + "INE WAVEWREATH PRODUCTNOT TILDEMINUS TILDEASYMPTOTICALLY EQUAL TONOT ASY" + + "MPTOTICALLY EQUAL TOAPPROXIMATELY EQUAL TOAPPROXIMATELY BUT NOT ACTUALLY" + + " EQUAL TONEITHER APPROXIMATELY NOR ACTUALLY EQUAL TOALMOST EQUAL TONOT A" + + "LMOST EQUAL TOALMOST EQUAL OR EQUAL TOTRIPLE TILDEALL EQUAL TOEQUIVALENT" + + " TOGEOMETRICALLY EQUIVALENT TODIFFERENCE BETWEENAPPROACHES THE LIMITGEOM" + + "ETRICALLY EQUAL TOAPPROXIMATELY EQUAL TO OR THE IMAGE OFIMAGE OF OR APPR" + + "OXIMATELY EQUAL TOCOLON EQUALSEQUALS COLONRING IN EQUAL TORING EQUAL TOC" + + "ORRESPONDS TOESTIMATESEQUIANGULAR TOSTAR EQUALSDELTA EQUAL TOEQUAL TO BY" + + " DEFINITIONMEASURED BYQUESTIONED EQUAL TONOT EQUAL TOIDENTICAL TONOT IDE" + + "NTICAL TOSTRICTLY EQUIVALENT TOLESS-THAN OR EQUAL TOGREATER-THAN OR EQUA" + + "L TOLESS-THAN OVER EQUAL TOGREATER-THAN OVER EQUAL TOLESS-THAN BUT NOT E" + + "QUAL TOGREATER-THAN BUT NOT EQUAL TOMUCH LESS-THANMUCH GREATER-THANBETWE" + + "ENNOT EQUIVALENT TONOT LESS-THANNOT GREATER-THANNEITHER LESS-THAN NOR EQ" + + "UAL TONEITHER GREATER-THAN NOR EQUAL TOLESS-THAN OR EQUIVALENT TOGREATER" + + "-THAN OR EQUIVALENT TONEITHER LESS-THAN NOR EQUIVALENT TONEITHER GREATER" + + "-THAN NOR EQUIVALENT TOLESS-THAN OR GREATER-THANGREATER-THAN OR LESS-THA") + ("" + + "NNEITHER LESS-THAN NOR GREATER-THANNEITHER GREATER-THAN NOR LESS-THANPRE" + + "CEDESSUCCEEDSPRECEDES OR EQUAL TOSUCCEEDS OR EQUAL TOPRECEDES OR EQUIVAL" + + "ENT TOSUCCEEDS OR EQUIVALENT TODOES NOT PRECEDEDOES NOT SUCCEEDSUBSET OF" + + "SUPERSET OFNOT A SUBSET OFNOT A SUPERSET OFSUBSET OF OR EQUAL TOSUPERSET" + + " OF OR EQUAL TONEITHER A SUBSET OF NOR EQUAL TONEITHER A SUPERSET OF NOR" + + " EQUAL TOSUBSET OF WITH NOT EQUAL TOSUPERSET OF WITH NOT EQUAL TOMULTISE" + + "TMULTISET MULTIPLICATIONMULTISET UNIONSQUARE IMAGE OFSQUARE ORIGINAL OFS" + + "QUARE IMAGE OF OR EQUAL TOSQUARE ORIGINAL OF OR EQUAL TOSQUARE CAPSQUARE" + + " CUPCIRCLED PLUSCIRCLED MINUSCIRCLED TIMESCIRCLED DIVISION SLASHCIRCLED " + + "DOT OPERATORCIRCLED RING OPERATORCIRCLED ASTERISK OPERATORCIRCLED EQUALS" + + "CIRCLED DASHSQUARED PLUSSQUARED MINUSSQUARED TIMESSQUARED DOT OPERATORRI" + + "GHT TACKLEFT TACKDOWN TACKUP TACKASSERTIONMODELSTRUEFORCESTRIPLE VERTICA" + + "L BAR RIGHT TURNSTILEDOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILEDOES NOT " + + "PROVENOT TRUEDOES NOT FORCENEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURN" + + "STILEPRECEDES UNDER RELATIONSUCCEEDS UNDER RELATIONNORMAL SUBGROUP OFCON" + + "TAINS AS NORMAL SUBGROUPNORMAL SUBGROUP OF OR EQUAL TOCONTAINS AS NORMAL" + + " SUBGROUP OR EQUAL TOORIGINAL OFIMAGE OFMULTIMAPHERMITIAN CONJUGATE MATR" + + "IXINTERCALATEXORNANDNORRIGHT ANGLE WITH ARCRIGHT TRIANGLEN-ARY LOGICAL A" + + "NDN-ARY LOGICAL ORN-ARY INTERSECTIONN-ARY UNIONDIAMOND OPERATORDOT OPERA" + + "TORSTAR OPERATORDIVISION TIMESBOWTIELEFT NORMAL FACTOR SEMIDIRECT PRODUC" + + "TRIGHT NORMAL FACTOR SEMIDIRECT PRODUCTLEFT SEMIDIRECT PRODUCTRIGHT SEMI" + + "DIRECT PRODUCTREVERSED TILDE EQUALSCURLY LOGICAL ORCURLY LOGICAL ANDDOUB" + + "LE SUBSETDOUBLE SUPERSETDOUBLE INTERSECTIONDOUBLE UNIONPITCHFORKEQUAL AN" + + "D PARALLEL TOLESS-THAN WITH DOTGREATER-THAN WITH DOTVERY MUCH LESS-THANV" + + "ERY MUCH GREATER-THANLESS-THAN EQUAL TO OR GREATER-THANGREATER-THAN EQUA" + + "L TO OR LESS-THANEQUAL TO OR LESS-THANEQUAL TO OR GREATER-THANEQUAL TO O" + + "R PRECEDESEQUAL TO OR SUCCEEDSDOES NOT PRECEDE OR EQUALDOES NOT SUCCEED " + + "OR EQUALNOT SQUARE IMAGE OF OR EQUAL TONOT SQUARE ORIGINAL OF OR EQUAL T" + + "OSQUARE IMAGE OF OR NOT EQUAL TOSQUARE ORIGINAL OF OR NOT EQUAL TOLESS-T" + + "HAN BUT NOT EQUIVALENT TOGREATER-THAN BUT NOT EQUIVALENT TOPRECEDES BUT " + + "NOT EQUIVALENT TOSUCCEEDS BUT NOT EQUIVALENT TONOT NORMAL SUBGROUP OFDOE" + + "S NOT CONTAIN AS NORMAL SUBGROUPNOT NORMAL SUBGROUP OF OR EQUAL TODOES N" + + "OT CONTAIN AS NORMAL SUBGROUP OR EQUALVERTICAL ELLIPSISMIDLINE HORIZONTA" + + "L ELLIPSISUP RIGHT DIAGONAL ELLIPSISDOWN RIGHT DIAGONAL ELLIPSISELEMENT " + + "OF WITH LONG HORIZONTAL STROKEELEMENT OF WITH VERTICAL BAR AT END OF HOR" + + "IZONTAL STROKESMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL ST" + + "ROKEELEMENT OF WITH DOT ABOVEELEMENT OF WITH OVERBARSMALL ELEMENT OF WIT" + + "H OVERBARELEMENT OF WITH UNDERBARELEMENT OF WITH TWO HORIZONTAL STROKESC" + + "ONTAINS WITH LONG HORIZONTAL STROKECONTAINS WITH VERTICAL BAR AT END OF " + + "HORIZONTAL STROKESMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL S" + + "TROKECONTAINS WITH OVERBARSMALL CONTAINS WITH OVERBARZ NOTATION BAG MEMB" + + "ERSHIPDIAMETER SIGNELECTRIC ARROWHOUSEUP ARROWHEADDOWN ARROWHEADPROJECTI" + + "VEPERSPECTIVEWAVY LINELEFT CEILINGRIGHT CEILINGLEFT FLOORRIGHT FLOORBOTT" + + "OM RIGHT CROPBOTTOM LEFT CROPTOP RIGHT CROPTOP LEFT CROPREVERSED NOT SIG" + + "NSQUARE LOZENGEARCSEGMENTSECTORTELEPHONE RECORDERPOSITION INDICATORVIEWD" + + "ATA SQUAREPLACE OF INTEREST SIGNTURNED NOT SIGNWATCHHOURGLASSTOP LEFT CO" + + "RNERTOP RIGHT CORNERBOTTOM LEFT CORNERBOTTOM RIGHT CORNERTOP HALF INTEGR" + + "ALBOTTOM HALF INTEGRALFROWNSMILEUP ARROWHEAD BETWEEN TWO HORIZONTAL BARS" + + "OPTION KEYERASE TO THE RIGHTX IN A RECTANGLE BOXKEYBOARDLEFT-POINTING AN" + + "GLE BRACKETRIGHT-POINTING ANGLE BRACKETERASE TO THE LEFTBENZENE RINGCYLI" + + "NDRICITYALL AROUND-PROFILESYMMETRYTOTAL RUNOUTDIMENSION ORIGINCONICAL TA" + + "PERSLOPECOUNTERBORECOUNTERSINKAPL FUNCTIONAL SYMBOL I-BEAMAPL FUNCTIONAL" + + " SYMBOL SQUISH QUADAPL FUNCTIONAL SYMBOL QUAD EQUALAPL FUNCTIONAL SYMBOL" + + " QUAD DIVIDEAPL FUNCTIONAL SYMBOL QUAD DIAMONDAPL FUNCTIONAL SYMBOL QUAD" + + " JOTAPL FUNCTIONAL SYMBOL QUAD CIRCLEAPL FUNCTIONAL SYMBOL CIRCLE STILEA" + + "PL FUNCTIONAL SYMBOL CIRCLE JOTAPL FUNCTIONAL SYMBOL SLASH BARAPL FUNCTI" + + "ONAL SYMBOL BACKSLASH BARAPL FUNCTIONAL SYMBOL QUAD SLASHAPL FUNCTIONAL " + + "SYMBOL QUAD BACKSLASHAPL FUNCTIONAL SYMBOL QUAD LESS-THANAPL FUNCTIONAL " + + "SYMBOL QUAD GREATER-THANAPL FUNCTIONAL SYMBOL LEFTWARDS VANEAPL FUNCTION" + + "AL SYMBOL RIGHTWARDS VANEAPL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROWAPL F" + + "UNCTIONAL SYMBOL QUAD RIGHTWARDS ARROWAPL FUNCTIONAL SYMBOL CIRCLE BACKS" + + "LASHAPL FUNCTIONAL SYMBOL DOWN TACK UNDERBARAPL FUNCTIONAL SYMBOL DELTA " + + "STILEAPL FUNCTIONAL SYMBOL QUAD DOWN CARETAPL FUNCTIONAL SYMBOL QUAD DEL" + + "TAAPL FUNCTIONAL SYMBOL DOWN TACK JOTAPL FUNCTIONAL SYMBOL UPWARDS VANEA") + ("" + + "PL FUNCTIONAL SYMBOL QUAD UPWARDS ARROWAPL FUNCTIONAL SYMBOL UP TACK OVE" + + "RBARAPL FUNCTIONAL SYMBOL DEL STILEAPL FUNCTIONAL SYMBOL QUAD UP CARETAP" + + "L FUNCTIONAL SYMBOL QUAD DELAPL FUNCTIONAL SYMBOL UP TACK JOTAPL FUNCTIO" + + "NAL SYMBOL DOWNWARDS VANEAPL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROWAPL F" + + "UNCTIONAL SYMBOL QUOTE UNDERBARAPL FUNCTIONAL SYMBOL DELTA UNDERBARAPL F" + + "UNCTIONAL SYMBOL DIAMOND UNDERBARAPL FUNCTIONAL SYMBOL JOT UNDERBARAPL F" + + "UNCTIONAL SYMBOL CIRCLE UNDERBARAPL FUNCTIONAL SYMBOL UP SHOE JOTAPL FUN" + + "CTIONAL SYMBOL QUOTE QUADAPL FUNCTIONAL SYMBOL CIRCLE STARAPL FUNCTIONAL" + + " SYMBOL QUAD COLONAPL FUNCTIONAL SYMBOL UP TACK DIAERESISAPL FUNCTIONAL " + + "SYMBOL DEL DIAERESISAPL FUNCTIONAL SYMBOL STAR DIAERESISAPL FUNCTIONAL S" + + "YMBOL JOT DIAERESISAPL FUNCTIONAL SYMBOL CIRCLE DIAERESISAPL FUNCTIONAL " + + "SYMBOL DOWN SHOE STILEAPL FUNCTIONAL SYMBOL LEFT SHOE STILEAPL FUNCTIONA" + + "L SYMBOL TILDE DIAERESISAPL FUNCTIONAL SYMBOL GREATER-THAN DIAERESISAPL " + + "FUNCTIONAL SYMBOL COMMA BARAPL FUNCTIONAL SYMBOL DEL TILDEAPL FUNCTIONAL" + + " SYMBOL ZILDEAPL FUNCTIONAL SYMBOL STILE TILDEAPL FUNCTIONAL SYMBOL SEMI" + + "COLON UNDERBARAPL FUNCTIONAL SYMBOL QUAD NOT EQUALAPL FUNCTIONAL SYMBOL " + + "QUAD QUESTIONAPL FUNCTIONAL SYMBOL DOWN CARET TILDEAPL FUNCTIONAL SYMBOL" + + " UP CARET TILDEAPL FUNCTIONAL SYMBOL IOTAAPL FUNCTIONAL SYMBOL RHOAPL FU" + + "NCTIONAL SYMBOL OMEGAAPL FUNCTIONAL SYMBOL ALPHA UNDERBARAPL FUNCTIONAL " + + "SYMBOL EPSILON UNDERBARAPL FUNCTIONAL SYMBOL IOTA UNDERBARAPL FUNCTIONAL" + + " SYMBOL OMEGA UNDERBARAPL FUNCTIONAL SYMBOL ALPHANOT CHECK MARKRIGHT ANG" + + "LE WITH DOWNWARDS ZIGZAG ARROWSHOULDERED OPEN BOXBELL SYMBOLVERTICAL LIN" + + "E WITH MIDDLE DOTINSERTION SYMBOLCONTINUOUS UNDERLINE SYMBOLDISCONTINUOU" + + "S UNDERLINE SYMBOLEMPHASIS SYMBOLCOMPOSITION SYMBOLWHITE SQUARE WITH CEN" + + "TRE VERTICAL LINEENTER SYMBOLALTERNATIVE KEY SYMBOLHELM SYMBOLCIRCLED HO" + + "RIZONTAL BAR WITH NOTCHCIRCLED TRIANGLE DOWNBROKEN CIRCLE WITH NORTHWEST" + + " ARROWUNDO SYMBOLMONOSTABLE SYMBOLHYSTERESIS SYMBOLOPEN-CIRCUIT-OUTPUT H" + + "-TYPE SYMBOLOPEN-CIRCUIT-OUTPUT L-TYPE SYMBOLPASSIVE-PULL-DOWN-OUTPUT SY" + + "MBOLPASSIVE-PULL-UP-OUTPUT SYMBOLDIRECT CURRENT SYMBOL FORM TWOSOFTWARE-" + + "FUNCTION SYMBOLAPL FUNCTIONAL SYMBOL QUADDECIMAL SEPARATOR KEY SYMBOLPRE" + + "VIOUS PAGENEXT PAGEPRINT SCREEN SYMBOLCLEAR SCREEN SYMBOLLEFT PARENTHESI" + + "S UPPER HOOKLEFT PARENTHESIS EXTENSIONLEFT PARENTHESIS LOWER HOOKRIGHT P" + + "ARENTHESIS UPPER HOOKRIGHT PARENTHESIS EXTENSIONRIGHT PARENTHESIS LOWER " + + "HOOKLEFT SQUARE BRACKET UPPER CORNERLEFT SQUARE BRACKET EXTENSIONLEFT SQ" + + "UARE BRACKET LOWER CORNERRIGHT SQUARE BRACKET UPPER CORNERRIGHT SQUARE B" + + "RACKET EXTENSIONRIGHT SQUARE BRACKET LOWER CORNERLEFT CURLY BRACKET UPPE" + + "R HOOKLEFT CURLY BRACKET MIDDLE PIECELEFT CURLY BRACKET LOWER HOOKCURLY " + + "BRACKET EXTENSIONRIGHT CURLY BRACKET UPPER HOOKRIGHT CURLY BRACKET MIDDL" + + "E PIECERIGHT CURLY BRACKET LOWER HOOKINTEGRAL EXTENSIONHORIZONTAL LINE E" + + "XTENSIONUPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTIONUPPER RIGHT OR LO" + + "WER LEFT CURLY BRACKET SECTIONSUMMATION TOPSUMMATION BOTTOMTOP SQUARE BR" + + "ACKETBOTTOM SQUARE BRACKETBOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKETR" + + "ADICAL SYMBOL BOTTOMLEFT VERTICAL BOX LINERIGHT VERTICAL BOX LINEHORIZON" + + "TAL SCAN LINE-1HORIZONTAL SCAN LINE-3HORIZONTAL SCAN LINE-7HORIZONTAL SC" + + "AN LINE-9DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHTDENTISTRY SYMBOL L" + + "IGHT VERTICAL AND BOTTOM RIGHTDENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCL" + + "EDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLEDENTISTRY SYMBOL " + + "LIGHT UP AND HORIZONTAL WITH CIRCLEDENTISTRY SYMBOL LIGHT VERTICAL WITH " + + "TRIANGLEDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLEDENTISTR" + + "Y SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLEDENTISTRY SYMBOL LIGHT VER" + + "TICAL AND WAVEDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVEDENTIS" + + "TRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVEDENTISTRY SYMBOL LIGHT DOWN " + + "AND HORIZONTALDENTISTRY SYMBOL LIGHT UP AND HORIZONTALDENTISTRY SYMBOL L" + + "IGHT VERTICAL AND TOP LEFTDENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEF" + + "TSQUARE FOOTRETURN SYMBOLEJECT SYMBOLVERTICAL LINE EXTENSIONMETRICAL BRE" + + "VEMETRICAL LONG OVER SHORTMETRICAL SHORT OVER LONGMETRICAL LONG OVER TWO" + + " SHORTSMETRICAL TWO SHORTS OVER LONGMETRICAL TWO SHORTS JOINEDMETRICAL T" + + "RISEMEMETRICAL TETRASEMEMETRICAL PENTASEMEEARTH GROUNDFUSETOP PARENTHESI" + + "SBOTTOM PARENTHESISTOP CURLY BRACKETBOTTOM CURLY BRACKETTOP TORTOISE SHE" + + "LL BRACKETBOTTOM TORTOISE SHELL BRACKETWHITE TRAPEZIUMBENZENE RING WITH " + + "CIRCLESTRAIGHTNESSFLATNESSAC CURRENTELECTRICAL INTERSECTIONDECIMAL EXPON" + + "ENT SYMBOLBLACK RIGHT-POINTING DOUBLE TRIANGLEBLACK LEFT-POINTING DOUBLE" + + " TRIANGLEBLACK UP-POINTING DOUBLE TRIANGLEBLACK DOWN-POINTING DOUBLE TRI" + + "ANGLEBLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BARBLACK LEFT-PO") + ("" + + "INTING DOUBLE TRIANGLE WITH VERTICAL BARBLACK RIGHT-POINTING TRIANGLE WI" + + "TH DOUBLE VERTICAL BARALARM CLOCKSTOPWATCHTIMER CLOCKHOURGLASS WITH FLOW" + + "ING SANDBLACK MEDIUM LEFT-POINTING TRIANGLEBLACK MEDIUM RIGHT-POINTING T" + + "RIANGLEBLACK MEDIUM UP-POINTING TRIANGLEBLACK MEDIUM DOWN-POINTING TRIAN" + + "GLEDOUBLE VERTICAL BARBLACK SQUARE FOR STOPBLACK CIRCLE FOR RECORDPOWER " + + "SYMBOLPOWER ON-OFF SYMBOLPOWER ON SYMBOLPOWER SLEEP SYMBOLSYMBOL FOR NUL" + + "LSYMBOL FOR START OF HEADINGSYMBOL FOR START OF TEXTSYMBOL FOR END OF TE" + + "XTSYMBOL FOR END OF TRANSMISSIONSYMBOL FOR ENQUIRYSYMBOL FOR ACKNOWLEDGE" + + "SYMBOL FOR BELLSYMBOL FOR BACKSPACESYMBOL FOR HORIZONTAL TABULATIONSYMBO" + + "L FOR LINE FEEDSYMBOL FOR VERTICAL TABULATIONSYMBOL FOR FORM FEEDSYMBOL " + + "FOR CARRIAGE RETURNSYMBOL FOR SHIFT OUTSYMBOL FOR SHIFT INSYMBOL FOR DAT" + + "A LINK ESCAPESYMBOL FOR DEVICE CONTROL ONESYMBOL FOR DEVICE CONTROL TWOS" + + "YMBOL FOR DEVICE CONTROL THREESYMBOL FOR DEVICE CONTROL FOURSYMBOL FOR N" + + "EGATIVE ACKNOWLEDGESYMBOL FOR SYNCHRONOUS IDLESYMBOL FOR END OF TRANSMIS" + + "SION BLOCKSYMBOL FOR CANCELSYMBOL FOR END OF MEDIUMSYMBOL FOR SUBSTITUTE" + + "SYMBOL FOR ESCAPESYMBOL FOR FILE SEPARATORSYMBOL FOR GROUP SEPARATORSYMB" + + "OL FOR RECORD SEPARATORSYMBOL FOR UNIT SEPARATORSYMBOL FOR SPACESYMBOL F" + + "OR DELETEBLANK SYMBOLOPEN BOXSYMBOL FOR NEWLINESYMBOL FOR DELETE FORM TW" + + "OSYMBOL FOR SUBSTITUTE FORM TWOOCR HOOKOCR CHAIROCR FORKOCR INVERTED FOR" + + "KOCR BELT BUCKLEOCR BOW TIEOCR BRANCH BANK IDENTIFICATIONOCR AMOUNT OF C" + + "HECKOCR DASHOCR CUSTOMER ACCOUNT NUMBEROCR DOUBLE BACKSLASHCIRCLED DIGIT" + + " ONECIRCLED DIGIT TWOCIRCLED DIGIT THREECIRCLED DIGIT FOURCIRCLED DIGIT " + + "FIVECIRCLED DIGIT SIXCIRCLED DIGIT SEVENCIRCLED DIGIT EIGHTCIRCLED DIGIT" + + " NINECIRCLED NUMBER TENCIRCLED NUMBER ELEVENCIRCLED NUMBER TWELVECIRCLED" + + " NUMBER THIRTEENCIRCLED NUMBER FOURTEENCIRCLED NUMBER FIFTEENCIRCLED NUM" + + "BER SIXTEENCIRCLED NUMBER SEVENTEENCIRCLED NUMBER EIGHTEENCIRCLED NUMBER" + + " NINETEENCIRCLED NUMBER TWENTYPARENTHESIZED DIGIT ONEPARENTHESIZED DIGIT" + + " TWOPARENTHESIZED DIGIT THREEPARENTHESIZED DIGIT FOURPARENTHESIZED DIGIT" + + " FIVEPARENTHESIZED DIGIT SIXPARENTHESIZED DIGIT SEVENPARENTHESIZED DIGIT" + + " EIGHTPARENTHESIZED DIGIT NINEPARENTHESIZED NUMBER TENPARENTHESIZED NUMB" + + "ER ELEVENPARENTHESIZED NUMBER TWELVEPARENTHESIZED NUMBER THIRTEENPARENTH" + + "ESIZED NUMBER FOURTEENPARENTHESIZED NUMBER FIFTEENPARENTHESIZED NUMBER S" + + "IXTEENPARENTHESIZED NUMBER SEVENTEENPARENTHESIZED NUMBER EIGHTEENPARENTH" + + "ESIZED NUMBER NINETEENPARENTHESIZED NUMBER TWENTYDIGIT ONE FULL STOPDIGI" + + "T TWO FULL STOPDIGIT THREE FULL STOPDIGIT FOUR FULL STOPDIGIT FIVE FULL " + + "STOPDIGIT SIX FULL STOPDIGIT SEVEN FULL STOPDIGIT EIGHT FULL STOPDIGIT N" + + "INE FULL STOPNUMBER TEN FULL STOPNUMBER ELEVEN FULL STOPNUMBER TWELVE FU" + + "LL STOPNUMBER THIRTEEN FULL STOPNUMBER FOURTEEN FULL STOPNUMBER FIFTEEN " + + "FULL STOPNUMBER SIXTEEN FULL STOPNUMBER SEVENTEEN FULL STOPNUMBER EIGHTE" + + "EN FULL STOPNUMBER NINETEEN FULL STOPNUMBER TWENTY FULL STOPPARENTHESIZE" + + "D LATIN SMALL LETTER APARENTHESIZED LATIN SMALL LETTER BPARENTHESIZED LA" + + "TIN SMALL LETTER CPARENTHESIZED LATIN SMALL LETTER DPARENTHESIZED LATIN " + + "SMALL LETTER EPARENTHESIZED LATIN SMALL LETTER FPARENTHESIZED LATIN SMAL" + + "L LETTER GPARENTHESIZED LATIN SMALL LETTER HPARENTHESIZED LATIN SMALL LE" + + "TTER IPARENTHESIZED LATIN SMALL LETTER JPARENTHESIZED LATIN SMALL LETTER" + + " KPARENTHESIZED LATIN SMALL LETTER LPARENTHESIZED LATIN SMALL LETTER MPA" + + "RENTHESIZED LATIN SMALL LETTER NPARENTHESIZED LATIN SMALL LETTER OPARENT" + + "HESIZED LATIN SMALL LETTER PPARENTHESIZED LATIN SMALL LETTER QPARENTHESI" + + "ZED LATIN SMALL LETTER RPARENTHESIZED LATIN SMALL LETTER SPARENTHESIZED " + + "LATIN SMALL LETTER TPARENTHESIZED LATIN SMALL LETTER UPARENTHESIZED LATI" + + "N SMALL LETTER VPARENTHESIZED LATIN SMALL LETTER WPARENTHESIZED LATIN SM" + + "ALL LETTER XPARENTHESIZED LATIN SMALL LETTER YPARENTHESIZED LATIN SMALL " + + "LETTER ZCIRCLED LATIN CAPITAL LETTER ACIRCLED LATIN CAPITAL LETTER BCIRC" + + "LED LATIN CAPITAL LETTER CCIRCLED LATIN CAPITAL LETTER DCIRCLED LATIN CA" + + "PITAL LETTER ECIRCLED LATIN CAPITAL LETTER FCIRCLED LATIN CAPITAL LETTER" + + " GCIRCLED LATIN CAPITAL LETTER HCIRCLED LATIN CAPITAL LETTER ICIRCLED LA" + + "TIN CAPITAL LETTER JCIRCLED LATIN CAPITAL LETTER KCIRCLED LATIN CAPITAL " + + "LETTER LCIRCLED LATIN CAPITAL LETTER MCIRCLED LATIN CAPITAL LETTER NCIRC" + + "LED LATIN CAPITAL LETTER OCIRCLED LATIN CAPITAL LETTER PCIRCLED LATIN CA" + + "PITAL LETTER QCIRCLED LATIN CAPITAL LETTER RCIRCLED LATIN CAPITAL LETTER" + + " SCIRCLED LATIN CAPITAL LETTER TCIRCLED LATIN CAPITAL LETTER UCIRCLED LA" + + "TIN CAPITAL LETTER VCIRCLED LATIN CAPITAL LETTER WCIRCLED LATIN CAPITAL " + + "LETTER XCIRCLED LATIN CAPITAL LETTER YCIRCLED LATIN CAPITAL LETTER ZCIRC" + + "LED LATIN SMALL LETTER ACIRCLED LATIN SMALL LETTER BCIRCLED LATIN SMALL ") + ("" + + "LETTER CCIRCLED LATIN SMALL LETTER DCIRCLED LATIN SMALL LETTER ECIRCLED " + + "LATIN SMALL LETTER FCIRCLED LATIN SMALL LETTER GCIRCLED LATIN SMALL LETT" + + "ER HCIRCLED LATIN SMALL LETTER ICIRCLED LATIN SMALL LETTER JCIRCLED LATI" + + "N SMALL LETTER KCIRCLED LATIN SMALL LETTER LCIRCLED LATIN SMALL LETTER M" + + "CIRCLED LATIN SMALL LETTER NCIRCLED LATIN SMALL LETTER OCIRCLED LATIN SM" + + "ALL LETTER PCIRCLED LATIN SMALL LETTER QCIRCLED LATIN SMALL LETTER RCIRC" + + "LED LATIN SMALL LETTER SCIRCLED LATIN SMALL LETTER TCIRCLED LATIN SMALL " + + "LETTER UCIRCLED LATIN SMALL LETTER VCIRCLED LATIN SMALL LETTER WCIRCLED " + + "LATIN SMALL LETTER XCIRCLED LATIN SMALL LETTER YCIRCLED LATIN SMALL LETT" + + "ER ZCIRCLED DIGIT ZERONEGATIVE CIRCLED NUMBER ELEVENNEGATIVE CIRCLED NUM" + + "BER TWELVENEGATIVE CIRCLED NUMBER THIRTEENNEGATIVE CIRCLED NUMBER FOURTE" + + "ENNEGATIVE CIRCLED NUMBER FIFTEENNEGATIVE CIRCLED NUMBER SIXTEENNEGATIVE" + + " CIRCLED NUMBER SEVENTEENNEGATIVE CIRCLED NUMBER EIGHTEENNEGATIVE CIRCLE" + + "D NUMBER NINETEENNEGATIVE CIRCLED NUMBER TWENTYDOUBLE CIRCLED DIGIT ONED" + + "OUBLE CIRCLED DIGIT TWODOUBLE CIRCLED DIGIT THREEDOUBLE CIRCLED DIGIT FO" + + "URDOUBLE CIRCLED DIGIT FIVEDOUBLE CIRCLED DIGIT SIXDOUBLE CIRCLED DIGIT " + + "SEVENDOUBLE CIRCLED DIGIT EIGHTDOUBLE CIRCLED DIGIT NINEDOUBLE CIRCLED N" + + "UMBER TENNEGATIVE CIRCLED DIGIT ZEROBOX DRAWINGS LIGHT HORIZONTALBOX DRA" + + "WINGS HEAVY HORIZONTALBOX DRAWINGS LIGHT VERTICALBOX DRAWINGS HEAVY VERT" + + "ICALBOX DRAWINGS LIGHT TRIPLE DASH HORIZONTALBOX DRAWINGS HEAVY TRIPLE D" + + "ASH HORIZONTALBOX DRAWINGS LIGHT TRIPLE DASH VERTICALBOX DRAWINGS HEAVY " + + "TRIPLE DASH VERTICALBOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTALBOX DRAW" + + "INGS HEAVY QUADRUPLE DASH HORIZONTALBOX DRAWINGS LIGHT QUADRUPLE DASH VE" + + "RTICALBOX DRAWINGS HEAVY QUADRUPLE DASH VERTICALBOX DRAWINGS LIGHT DOWN " + + "AND RIGHTBOX DRAWINGS DOWN LIGHT AND RIGHT HEAVYBOX DRAWINGS DOWN HEAVY " + + "AND RIGHT LIGHTBOX DRAWINGS HEAVY DOWN AND RIGHTBOX DRAWINGS LIGHT DOWN " + + "AND LEFTBOX DRAWINGS DOWN LIGHT AND LEFT HEAVYBOX DRAWINGS DOWN HEAVY AN" + + "D LEFT LIGHTBOX DRAWINGS HEAVY DOWN AND LEFTBOX DRAWINGS LIGHT UP AND RI" + + "GHTBOX DRAWINGS UP LIGHT AND RIGHT HEAVYBOX DRAWINGS UP HEAVY AND RIGHT " + + "LIGHTBOX DRAWINGS HEAVY UP AND RIGHTBOX DRAWINGS LIGHT UP AND LEFTBOX DR" + + "AWINGS UP LIGHT AND LEFT HEAVYBOX DRAWINGS UP HEAVY AND LEFT LIGHTBOX DR" + + "AWINGS HEAVY UP AND LEFTBOX DRAWINGS LIGHT VERTICAL AND RIGHTBOX DRAWING" + + "S VERTICAL LIGHT AND RIGHT HEAVYBOX DRAWINGS UP HEAVY AND RIGHT DOWN LIG" + + "HTBOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHTBOX DRAWINGS VERTICAL HEAVY " + + "AND RIGHT LIGHTBOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVYBOX DRAWINGS UP" + + " LIGHT AND RIGHT DOWN HEAVYBOX DRAWINGS HEAVY VERTICAL AND RIGHTBOX DRAW" + + "INGS LIGHT VERTICAL AND LEFTBOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVYBO" + + "X DRAWINGS UP HEAVY AND LEFT DOWN LIGHTBOX DRAWINGS DOWN HEAVY AND LEFT " + + "UP LIGHTBOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHTBOX DRAWINGS DOWN LIGH" + + "T AND LEFT UP HEAVYBOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVYBOX DRAWINGS" + + " HEAVY VERTICAL AND LEFTBOX DRAWINGS LIGHT DOWN AND HORIZONTALBOX DRAWIN" + + "GS LEFT HEAVY AND RIGHT DOWN LIGHTBOX DRAWINGS RIGHT HEAVY AND LEFT DOWN" + + " LIGHTBOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVYBOX DRAWINGS DOWN HEAV" + + "Y AND HORIZONTAL LIGHTBOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVYBOX DR" + + "AWINGS LEFT LIGHT AND RIGHT DOWN HEAVYBOX DRAWINGS HEAVY DOWN AND HORIZO" + + "NTALBOX DRAWINGS LIGHT UP AND HORIZONTALBOX DRAWINGS LEFT HEAVY AND RIGH" + + "T UP LIGHTBOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHTBOX DRAWINGS UP LIGH" + + "T AND HORIZONTAL HEAVYBOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHTBOX DRAW" + + "INGS RIGHT LIGHT AND LEFT UP HEAVYBOX DRAWINGS LEFT LIGHT AND RIGHT UP H" + + "EAVYBOX DRAWINGS HEAVY UP AND HORIZONTALBOX DRAWINGS LIGHT VERTICAL AND " + + "HORIZONTALBOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHTBOX DRAWINGS R" + + "IGHT HEAVY AND LEFT VERTICAL LIGHTBOX DRAWINGS VERTICAL LIGHT AND HORIZO" + + "NTAL HEAVYBOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHTBOX DRAWINGS DO" + + "WN HEAVY AND UP HORIZONTAL LIGHTBOX DRAWINGS VERTICAL HEAVY AND HORIZONT" + + "AL LIGHTBOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHTBOX DRAWINGS RIGH" + + "T UP HEAVY AND LEFT DOWN LIGHTBOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP " + + "LIGHTBOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHTBOX DRAWINGS DOWN LI" + + "GHT AND UP HORIZONTAL HEAVYBOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEA" + + "VYBOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVYBOX DRAWINGS LEFT LIGH" + + "T AND RIGHT VERTICAL HEAVYBOX DRAWINGS HEAVY VERTICAL AND HORIZONTALBOX " + + "DRAWINGS LIGHT DOUBLE DASH HORIZONTALBOX DRAWINGS HEAVY DOUBLE DASH HORI" + + "ZONTALBOX DRAWINGS LIGHT DOUBLE DASH VERTICALBOX DRAWINGS HEAVY DOUBLE D" + + "ASH VERTICALBOX DRAWINGS DOUBLE HORIZONTALBOX DRAWINGS DOUBLE VERTICALBO" + + "X DRAWINGS DOWN SINGLE AND RIGHT DOUBLEBOX DRAWINGS DOWN DOUBLE AND RIGH") + ("" + + "T SINGLEBOX DRAWINGS DOUBLE DOWN AND RIGHTBOX DRAWINGS DOWN SINGLE AND L" + + "EFT DOUBLEBOX DRAWINGS DOWN DOUBLE AND LEFT SINGLEBOX DRAWINGS DOUBLE DO" + + "WN AND LEFTBOX DRAWINGS UP SINGLE AND RIGHT DOUBLEBOX DRAWINGS UP DOUBLE" + + " AND RIGHT SINGLEBOX DRAWINGS DOUBLE UP AND RIGHTBOX DRAWINGS UP SINGLE " + + "AND LEFT DOUBLEBOX DRAWINGS UP DOUBLE AND LEFT SINGLEBOX DRAWINGS DOUBLE" + + " UP AND LEFTBOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLEBOX DRAWINGS VE" + + "RTICAL DOUBLE AND RIGHT SINGLEBOX DRAWINGS DOUBLE VERTICAL AND RIGHTBOX " + + "DRAWINGS VERTICAL SINGLE AND LEFT DOUBLEBOX DRAWINGS VERTICAL DOUBLE AND" + + " LEFT SINGLEBOX DRAWINGS DOUBLE VERTICAL AND LEFTBOX DRAWINGS DOWN SINGL" + + "E AND HORIZONTAL DOUBLEBOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLEBOX" + + " DRAWINGS DOUBLE DOWN AND HORIZONTALBOX DRAWINGS UP SINGLE AND HORIZONTA" + + "L DOUBLEBOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLEBOX DRAWINGS DOUBLE " + + "UP AND HORIZONTALBOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLEBOX D" + + "RAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLEBOX DRAWINGS DOUBLE VERTICA" + + "L AND HORIZONTALBOX DRAWINGS LIGHT ARC DOWN AND RIGHTBOX DRAWINGS LIGHT " + + "ARC DOWN AND LEFTBOX DRAWINGS LIGHT ARC UP AND LEFTBOX DRAWINGS LIGHT AR" + + "C UP AND RIGHTBOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFTBOX D" + + "RAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHTBOX DRAWINGS LIGHT DIAGO" + + "NAL CROSSBOX DRAWINGS LIGHT LEFTBOX DRAWINGS LIGHT UPBOX DRAWINGS LIGHT " + + "RIGHTBOX DRAWINGS LIGHT DOWNBOX DRAWINGS HEAVY LEFTBOX DRAWINGS HEAVY UP" + + "BOX DRAWINGS HEAVY RIGHTBOX DRAWINGS HEAVY DOWNBOX DRAWINGS LIGHT LEFT A" + + "ND HEAVY RIGHTBOX DRAWINGS LIGHT UP AND HEAVY DOWNBOX DRAWINGS HEAVY LEF" + + "T AND LIGHT RIGHTBOX DRAWINGS HEAVY UP AND LIGHT DOWNUPPER HALF BLOCKLOW" + + "ER ONE EIGHTH BLOCKLOWER ONE QUARTER BLOCKLOWER THREE EIGHTHS BLOCKLOWER" + + " HALF BLOCKLOWER FIVE EIGHTHS BLOCKLOWER THREE QUARTERS BLOCKLOWER SEVEN" + + " EIGHTHS BLOCKFULL BLOCKLEFT SEVEN EIGHTHS BLOCKLEFT THREE QUARTERS BLOC" + + "KLEFT FIVE EIGHTHS BLOCKLEFT HALF BLOCKLEFT THREE EIGHTHS BLOCKLEFT ONE " + + "QUARTER BLOCKLEFT ONE EIGHTH BLOCKRIGHT HALF BLOCKLIGHT SHADEMEDIUM SHAD" + + "EDARK SHADEUPPER ONE EIGHTH BLOCKRIGHT ONE EIGHTH BLOCKQUADRANT LOWER LE" + + "FTQUADRANT LOWER RIGHTQUADRANT UPPER LEFTQUADRANT UPPER LEFT AND LOWER L" + + "EFT AND LOWER RIGHTQUADRANT UPPER LEFT AND LOWER RIGHTQUADRANT UPPER LEF" + + "T AND UPPER RIGHT AND LOWER LEFTQUADRANT UPPER LEFT AND UPPER RIGHT AND " + + "LOWER RIGHTQUADRANT UPPER RIGHTQUADRANT UPPER RIGHT AND LOWER LEFTQUADRA" + + "NT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHTBLACK SQUAREWHITE SQUAREWHI" + + "TE SQUARE WITH ROUNDED CORNERSWHITE SQUARE CONTAINING BLACK SMALL SQUARE" + + "SQUARE WITH HORIZONTAL FILLSQUARE WITH VERTICAL FILLSQUARE WITH ORTHOGON" + + "AL CROSSHATCH FILLSQUARE WITH UPPER LEFT TO LOWER RIGHT FILLSQUARE WITH " + + "UPPER RIGHT TO LOWER LEFT FILLSQUARE WITH DIAGONAL CROSSHATCH FILLBLACK " + + "SMALL SQUAREWHITE SMALL SQUAREBLACK RECTANGLEWHITE RECTANGLEBLACK VERTIC" + + "AL RECTANGLEWHITE VERTICAL RECTANGLEBLACK PARALLELOGRAMWHITE PARALLELOGR" + + "AMBLACK UP-POINTING TRIANGLEWHITE UP-POINTING TRIANGLEBLACK UP-POINTING " + + "SMALL TRIANGLEWHITE UP-POINTING SMALL TRIANGLEBLACK RIGHT-POINTING TRIAN" + + "GLEWHITE RIGHT-POINTING TRIANGLEBLACK RIGHT-POINTING SMALL TRIANGLEWHITE" + + " RIGHT-POINTING SMALL TRIANGLEBLACK RIGHT-POINTING POINTERWHITE RIGHT-PO" + + "INTING POINTERBLACK DOWN-POINTING TRIANGLEWHITE DOWN-POINTING TRIANGLEBL" + + "ACK DOWN-POINTING SMALL TRIANGLEWHITE DOWN-POINTING SMALL TRIANGLEBLACK " + + "LEFT-POINTING TRIANGLEWHITE LEFT-POINTING TRIANGLEBLACK LEFT-POINTING SM" + + "ALL TRIANGLEWHITE LEFT-POINTING SMALL TRIANGLEBLACK LEFT-POINTING POINTE" + + "RWHITE LEFT-POINTING POINTERBLACK DIAMONDWHITE DIAMONDWHITE DIAMOND CONT" + + "AINING BLACK SMALL DIAMONDFISHEYELOZENGEWHITE CIRCLEDOTTED CIRCLECIRCLE " + + "WITH VERTICAL FILLBULLSEYEBLACK CIRCLECIRCLE WITH LEFT HALF BLACKCIRCLE " + + "WITH RIGHT HALF BLACKCIRCLE WITH LOWER HALF BLACKCIRCLE WITH UPPER HALF " + + "BLACKCIRCLE WITH UPPER RIGHT QUADRANT BLACKCIRCLE WITH ALL BUT UPPER LEF" + + "T QUADRANT BLACKLEFT HALF BLACK CIRCLERIGHT HALF BLACK CIRCLEINVERSE BUL" + + "LETINVERSE WHITE CIRCLEUPPER HALF INVERSE WHITE CIRCLELOWER HALF INVERSE" + + " WHITE CIRCLEUPPER LEFT QUADRANT CIRCULAR ARCUPPER RIGHT QUADRANT CIRCUL" + + "AR ARCLOWER RIGHT QUADRANT CIRCULAR ARCLOWER LEFT QUADRANT CIRCULAR ARCU" + + "PPER HALF CIRCLELOWER HALF CIRCLEBLACK LOWER RIGHT TRIANGLEBLACK LOWER L" + + "EFT TRIANGLEBLACK UPPER LEFT TRIANGLEBLACK UPPER RIGHT TRIANGLEWHITE BUL" + + "LETSQUARE WITH LEFT HALF BLACKSQUARE WITH RIGHT HALF BLACKSQUARE WITH UP" + + "PER LEFT DIAGONAL HALF BLACKSQUARE WITH LOWER RIGHT DIAGONAL HALF BLACKW" + + "HITE SQUARE WITH VERTICAL BISECTING LINEWHITE UP-POINTING TRIANGLE WITH " + + "DOTUP-POINTING TRIANGLE WITH LEFT HALF BLACKUP-POINTING TRIANGLE WITH RI" + + "GHT HALF BLACKLARGE CIRCLEWHITE SQUARE WITH UPPER LEFT QUADRANTWHITE SQU") + ("" + + "ARE WITH LOWER LEFT QUADRANTWHITE SQUARE WITH LOWER RIGHT QUADRANTWHITE " + + "SQUARE WITH UPPER RIGHT QUADRANTWHITE CIRCLE WITH UPPER LEFT QUADRANTWHI" + + "TE CIRCLE WITH LOWER LEFT QUADRANTWHITE CIRCLE WITH LOWER RIGHT QUADRANT" + + "WHITE CIRCLE WITH UPPER RIGHT QUADRANTUPPER LEFT TRIANGLEUPPER RIGHT TRI" + + "ANGLELOWER LEFT TRIANGLEWHITE MEDIUM SQUAREBLACK MEDIUM SQUAREWHITE MEDI" + + "UM SMALL SQUAREBLACK MEDIUM SMALL SQUARELOWER RIGHT TRIANGLEBLACK SUN WI" + + "TH RAYSCLOUDUMBRELLASNOWMANCOMETBLACK STARWHITE STARLIGHTNINGTHUNDERSTOR" + + "MSUNASCENDING NODEDESCENDING NODECONJUNCTIONOPPOSITIONBLACK TELEPHONEWHI" + + "TE TELEPHONEBALLOT BOXBALLOT BOX WITH CHECKBALLOT BOX WITH XSALTIREUMBRE" + + "LLA WITH RAIN DROPSHOT BEVERAGEWHITE SHOGI PIECEBLACK SHOGI PIECESHAMROC" + + "KREVERSED ROTATED FLORAL HEART BULLETBLACK LEFT POINTING INDEXBLACK RIGH" + + "T POINTING INDEXWHITE LEFT POINTING INDEXWHITE UP POINTING INDEXWHITE RI" + + "GHT POINTING INDEXWHITE DOWN POINTING INDEXSKULL AND CROSSBONESCAUTION S" + + "IGNRADIOACTIVE SIGNBIOHAZARD SIGNCADUCEUSANKHORTHODOX CROSSCHI RHOCROSS " + + "OF LORRAINECROSS OF JERUSALEMSTAR AND CRESCENTFARSI SYMBOLADI SHAKTIHAMM" + + "ER AND SICKLEPEACE SYMBOLYIN YANGTRIGRAM FOR HEAVENTRIGRAM FOR LAKETRIGR" + + "AM FOR FIRETRIGRAM FOR THUNDERTRIGRAM FOR WINDTRIGRAM FOR WATERTRIGRAM F" + + "OR MOUNTAINTRIGRAM FOR EARTHWHEEL OF DHARMAWHITE FROWNING FACEWHITE SMIL" + + "ING FACEBLACK SMILING FACEWHITE SUN WITH RAYSFIRST QUARTER MOONLAST QUAR" + + "TER MOONMERCURYFEMALE SIGNEARTHMALE SIGNJUPITERSATURNURANUSNEPTUNEPLUTOA" + + "RIESTAURUSGEMINICANCERLEOVIRGOLIBRASCORPIUSSAGITTARIUSCAPRICORNAQUARIUSP" + + "ISCESWHITE CHESS KINGWHITE CHESS QUEENWHITE CHESS ROOKWHITE CHESS BISHOP" + + "WHITE CHESS KNIGHTWHITE CHESS PAWNBLACK CHESS KINGBLACK CHESS QUEENBLACK" + + " CHESS ROOKBLACK CHESS BISHOPBLACK CHESS KNIGHTBLACK CHESS PAWNBLACK SPA" + + "DE SUITWHITE HEART SUITWHITE DIAMOND SUITBLACK CLUB SUITWHITE SPADE SUIT" + + "BLACK HEART SUITBLACK DIAMOND SUITWHITE CLUB SUITHOT SPRINGSQUARTER NOTE" + + "EIGHTH NOTEBEAMED EIGHTH NOTESBEAMED SIXTEENTH NOTESMUSIC FLAT SIGNMUSIC" + + " NATURAL SIGNMUSIC SHARP SIGNWEST SYRIAC CROSSEAST SYRIAC CROSSUNIVERSAL" + + " RECYCLING SYMBOLRECYCLING SYMBOL FOR TYPE-1 PLASTICSRECYCLING SYMBOL FO" + + "R TYPE-2 PLASTICSRECYCLING SYMBOL FOR TYPE-3 PLASTICSRECYCLING SYMBOL FO" + + "R TYPE-4 PLASTICSRECYCLING SYMBOL FOR TYPE-5 PLASTICSRECYCLING SYMBOL FO" + + "R TYPE-6 PLASTICSRECYCLING SYMBOL FOR TYPE-7 PLASTICSRECYCLING SYMBOL FO" + + "R GENERIC MATERIALSBLACK UNIVERSAL RECYCLING SYMBOLRECYCLED PAPER SYMBOL" + + "PARTIALLY-RECYCLED PAPER SYMBOLPERMANENT PAPER SIGNWHEELCHAIR SYMBOLDIE " + + "FACE-1DIE FACE-2DIE FACE-3DIE FACE-4DIE FACE-5DIE FACE-6WHITE CIRCLE WIT" + + "H DOT RIGHTWHITE CIRCLE WITH TWO DOTSBLACK CIRCLE WITH WHITE DOT RIGHTBL" + + "ACK CIRCLE WITH TWO WHITE DOTSMONOGRAM FOR YANGMONOGRAM FOR YINDIGRAM FO" + + "R GREATER YANGDIGRAM FOR LESSER YINDIGRAM FOR LESSER YANGDIGRAM FOR GREA" + + "TER YINWHITE FLAGBLACK FLAGHAMMER AND PICKANCHORCROSSED SWORDSSTAFF OF A" + + "ESCULAPIUSSCALESALEMBICFLOWERGEARSTAFF OF HERMESATOM SYMBOLFLEUR-DE-LISO" + + "UTLINED WHITE STARTHREE LINES CONVERGING RIGHTTHREE LINES CONVERGING LEF" + + "TWARNING SIGNHIGH VOLTAGE SIGNDOUBLED FEMALE SIGNDOUBLED MALE SIGNINTERL" + + "OCKED FEMALE AND MALE SIGNMALE AND FEMALE SIGNMALE WITH STROKE SIGNMALE " + + "WITH STROKE AND MALE AND FEMALE SIGNVERTICAL MALE WITH STROKE SIGNHORIZO" + + "NTAL MALE WITH STROKE SIGNMEDIUM WHITE CIRCLEMEDIUM BLACK CIRCLEMEDIUM S" + + "MALL WHITE CIRCLEMARRIAGE SYMBOLDIVORCE SYMBOLUNMARRIED PARTNERSHIP SYMB" + + "OLCOFFINFUNERAL URNNEUTERCERESPALLASJUNOVESTACHIRONBLACK MOON LILITHSEXT" + + "ILESEMISEXTILEQUINCUNXSESQUIQUADRATESOCCER BALLBASEBALLSQUARED KEYWHITE " + + "DRAUGHTS MANWHITE DRAUGHTS KINGBLACK DRAUGHTS MANBLACK DRAUGHTS KINGSNOW" + + "MAN WITHOUT SNOWSUN BEHIND CLOUDRAINBLACK SNOWMANTHUNDER CLOUD AND RAINT" + + "URNED WHITE SHOGI PIECETURNED BLACK SHOGI PIECEWHITE DIAMOND IN SQUARECR" + + "OSSING LANESDISABLED CAROPHIUCHUSPICKCAR SLIDINGHELMET WITH WHITE CROSSC" + + "IRCLED CROSSING LANESCHAINSNO ENTRYALTERNATE ONE-WAY LEFT WAY TRAFFICBLA" + + "CK TWO-WAY LEFT WAY TRAFFICWHITE TWO-WAY LEFT WAY TRAFFICBLACK LEFT LANE" + + " MERGEWHITE LEFT LANE MERGEDRIVE SLOW SIGNHEAVY WHITE DOWN-POINTING TRIA" + + "NGLELEFT CLOSED ENTRYSQUARED SALTIREFALLING DIAGONAL IN WHITE CIRCLE IN " + + "BLACK SQUAREBLACK TRUCKRESTRICTED LEFT ENTRY-1RESTRICTED LEFT ENTRY-2AST" + + "RONOMICAL SYMBOL FOR URANUSHEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVEPE" + + "NTAGRAMRIGHT-HANDED INTERLACED PENTAGRAMLEFT-HANDED INTERLACED PENTAGRAM" + + "INVERTED PENTAGRAMBLACK CROSS ON SHIELDSHINTO SHRINECHURCHCASTLEHISTORIC" + + " SITEGEAR WITHOUT HUBGEAR WITH HANDLESMAP SYMBOL FOR LIGHTHOUSEMOUNTAINU" + + "MBRELLA ON GROUNDFOUNTAINFLAG IN HOLEFERRYSAILBOATSQUARE FOUR CORNERSSKI" + + "ERICE SKATEPERSON WITH BALLTENTJAPANESE BANK SYMBOLHEADSTONE GRAVEYARD S" + + "YMBOLFUEL PUMPCUP ON BLACK SQUAREWHITE FLAG WITH HORIZONTAL MIDDLE BLACK") + ("" + + " STRIPEBLACK SAFETY SCISSORSUPPER BLADE SCISSORSBLACK SCISSORSLOWER BLAD" + + "E SCISSORSWHITE SCISSORSWHITE HEAVY CHECK MARKTELEPHONE LOCATION SIGNTAP" + + "E DRIVEAIRPLANEENVELOPERAISED FISTRAISED HANDVICTORY HANDWRITING HANDLOW" + + "ER RIGHT PENCILPENCILUPPER RIGHT PENCILWHITE NIBBLACK NIBCHECK MARKHEAVY" + + " CHECK MARKMULTIPLICATION XHEAVY MULTIPLICATION XBALLOT XHEAVY BALLOT XO" + + "UTLINED GREEK CROSSHEAVY GREEK CROSSOPEN CENTRE CROSSHEAVY OPEN CENTRE C" + + "ROSSLATIN CROSSSHADOWED WHITE LATIN CROSSOUTLINED LATIN CROSSMALTESE CRO" + + "SSSTAR OF DAVIDFOUR TEARDROP-SPOKED ASTERISKFOUR BALLOON-SPOKED ASTERISK" + + "HEAVY FOUR BALLOON-SPOKED ASTERISKFOUR CLUB-SPOKED ASTERISKBLACK FOUR PO" + + "INTED STARWHITE FOUR POINTED STARSPARKLESSTRESS OUTLINED WHITE STARCIRCL" + + "ED WHITE STAROPEN CENTRE BLACK STARBLACK CENTRE WHITE STAROUTLINED BLACK" + + " STARHEAVY OUTLINED BLACK STARPINWHEEL STARSHADOWED WHITE STARHEAVY ASTE" + + "RISKOPEN CENTRE ASTERISKEIGHT SPOKED ASTERISKEIGHT POINTED BLACK STAREIG" + + "HT POINTED PINWHEEL STARSIX POINTED BLACK STAREIGHT POINTED RECTILINEAR " + + "BLACK STARHEAVY EIGHT POINTED RECTILINEAR BLACK STARTWELVE POINTED BLACK" + + " STARSIXTEEN POINTED ASTERISKTEARDROP-SPOKED ASTERISKOPEN CENTRE TEARDRO" + + "P-SPOKED ASTERISKHEAVY TEARDROP-SPOKED ASTERISKSIX PETALLED BLACK AND WH" + + "ITE FLORETTEBLACK FLORETTEWHITE FLORETTEEIGHT PETALLED OUTLINED BLACK FL" + + "ORETTECIRCLED OPEN CENTRE EIGHT POINTED STARHEAVY TEARDROP-SPOKED PINWHE" + + "EL ASTERISKSNOWFLAKETIGHT TRIFOLIATE SNOWFLAKEHEAVY CHEVRON SNOWFLAKESPA" + + "RKLEHEAVY SPARKLEBALLOON-SPOKED ASTERISKEIGHT TEARDROP-SPOKED PROPELLER " + + "ASTERISKHEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISKCROSS MARKSHADOWED" + + " WHITE CIRCLENEGATIVE SQUARED CROSS MARKLOWER RIGHT DROP-SHADOWED WHITE " + + "SQUAREUPPER RIGHT DROP-SHADOWED WHITE SQUARELOWER RIGHT SHADOWED WHITE S" + + "QUAREUPPER RIGHT SHADOWED WHITE SQUAREBLACK QUESTION MARK ORNAMENTWHITE " + + "QUESTION MARK ORNAMENTWHITE EXCLAMATION MARK ORNAMENTBLACK DIAMOND MINUS" + + " WHITE XHEAVY EXCLAMATION MARK SYMBOLLIGHT VERTICAL BARMEDIUM VERTICAL B" + + "ARHEAVY VERTICAL BARHEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENTHEA" + + "VY SINGLE COMMA QUOTATION MARK ORNAMENTHEAVY DOUBLE TURNED COMMA QUOTATI" + + "ON MARK ORNAMENTHEAVY DOUBLE COMMA QUOTATION MARK ORNAMENTHEAVY LOW SING" + + "LE COMMA QUOTATION MARK ORNAMENTHEAVY LOW DOUBLE COMMA QUOTATION MARK OR" + + "NAMENTCURVED STEM PARAGRAPH SIGN ORNAMENTHEAVY EXCLAMATION MARK ORNAMENT" + + "HEAVY HEART EXCLAMATION MARK ORNAMENTHEAVY BLACK HEARTROTATED HEAVY BLAC" + + "K HEART BULLETFLORAL HEARTROTATED FLORAL HEART BULLETMEDIUM LEFT PARENTH" + + "ESIS ORNAMENTMEDIUM RIGHT PARENTHESIS ORNAMENTMEDIUM FLATTENED LEFT PARE" + + "NTHESIS ORNAMENTMEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENTMEDIUM LEFT-P" + + "OINTING ANGLE BRACKET ORNAMENTMEDIUM RIGHT-POINTING ANGLE BRACKET ORNAME" + + "NTHEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENTHEAVY RIGHT-POINTING " + + "ANGLE QUOTATION MARK ORNAMENTHEAVY LEFT-POINTING ANGLE BRACKET ORNAMENTH" + + "EAVY RIGHT-POINTING ANGLE BRACKET ORNAMENTLIGHT LEFT TORTOISE SHELL BRAC" + + "KET ORNAMENTLIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENTMEDIUM LEFT CURLY" + + " BRACKET ORNAMENTMEDIUM RIGHT CURLY BRACKET ORNAMENTDINGBAT NEGATIVE CIR" + + "CLED DIGIT ONEDINGBAT NEGATIVE CIRCLED DIGIT TWODINGBAT NEGATIVE CIRCLED" + + " DIGIT THREEDINGBAT NEGATIVE CIRCLED DIGIT FOURDINGBAT NEGATIVE CIRCLED " + + "DIGIT FIVEDINGBAT NEGATIVE CIRCLED DIGIT SIXDINGBAT NEGATIVE CIRCLED DIG" + + "IT SEVENDINGBAT NEGATIVE CIRCLED DIGIT EIGHTDINGBAT NEGATIVE CIRCLED DIG" + + "IT NINEDINGBAT NEGATIVE CIRCLED NUMBER TENDINGBAT CIRCLED SANS-SERIF DIG" + + "IT ONEDINGBAT CIRCLED SANS-SERIF DIGIT TWODINGBAT CIRCLED SANS-SERIF DIG" + + "IT THREEDINGBAT CIRCLED SANS-SERIF DIGIT FOURDINGBAT CIRCLED SANS-SERIF " + + "DIGIT FIVEDINGBAT CIRCLED SANS-SERIF DIGIT SIXDINGBAT CIRCLED SANS-SERIF" + + " DIGIT SEVENDINGBAT CIRCLED SANS-SERIF DIGIT EIGHTDINGBAT CIRCLED SANS-S" + + "ERIF DIGIT NINEDINGBAT CIRCLED SANS-SERIF NUMBER TENDINGBAT NEGATIVE CIR" + + "CLED SANS-SERIF DIGIT ONEDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWODI" + + "NGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREEDINGBAT NEGATIVE CIRCLED SA" + + "NS-SERIF DIGIT FOURDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVEDINGBAT" + + " NEGATIVE CIRCLED SANS-SERIF DIGIT SIXDINGBAT NEGATIVE CIRCLED SANS-SERI" + + "F DIGIT SEVENDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHTDINGBAT NEGA" + + "TIVE CIRCLED SANS-SERIF DIGIT NINEDINGBAT NEGATIVE CIRCLED SANS-SERIF NU" + + "MBER TENHEAVY WIDE-HEADED RIGHTWARDS ARROWHEAVY PLUS SIGNHEAVY MINUS SIG" + + "NHEAVY DIVISION SIGNHEAVY SOUTH EAST ARROWHEAVY RIGHTWARDS ARROWHEAVY NO" + + "RTH EAST ARROWDRAFTING POINT RIGHTWARDS ARROWHEAVY ROUND-TIPPED RIGHTWAR" + + "DS ARROWTRIANGLE-HEADED RIGHTWARDS ARROWHEAVY TRIANGLE-HEADED RIGHTWARDS" + + " ARROWDASHED TRIANGLE-HEADED RIGHTWARDS ARROWHEAVY DASHED TRIANGLE-HEADE" + + "D RIGHTWARDS ARROWBLACK RIGHTWARDS ARROWTHREE-D TOP-LIGHTED RIGHTWARDS A") + ("" + + "RROWHEADTHREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEADBLACK RIGHTWARDS ARRO" + + "WHEADHEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROWHEAVY BLACK CURVED" + + " UPWARDS AND RIGHTWARDS ARROWSQUAT BLACK RIGHTWARDS ARROWHEAVY CONCAVE-P" + + "OINTED BLACK RIGHTWARDS ARROWRIGHT-SHADED WHITE RIGHTWARDS ARROWLEFT-SHA" + + "DED WHITE RIGHTWARDS ARROWBACK-TILTED SHADOWED WHITE RIGHTWARDS ARROWFRO" + + "NT-TILTED SHADOWED WHITE RIGHTWARDS ARROWHEAVY LOWER RIGHT-SHADOWED WHIT" + + "E RIGHTWARDS ARROWHEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWNOTCH" + + "ED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWCURLY LOOPNOTCHED UPPER RI" + + "GHT-SHADOWED WHITE RIGHTWARDS ARROWCIRCLED HEAVY WHITE RIGHTWARDS ARROWW" + + "HITE-FEATHERED RIGHTWARDS ARROWBLACK-FEATHERED SOUTH EAST ARROWBLACK-FEA" + + "THERED RIGHTWARDS ARROWBLACK-FEATHERED NORTH EAST ARROWHEAVY BLACK-FEATH" + + "ERED SOUTH EAST ARROWHEAVY BLACK-FEATHERED RIGHTWARDS ARROWHEAVY BLACK-F" + + "EATHERED NORTH EAST ARROWTEARDROP-BARBED RIGHTWARDS ARROWHEAVY TEARDROP-" + + "SHANKED RIGHTWARDS ARROWWEDGE-TAILED RIGHTWARDS ARROWHEAVY WEDGE-TAILED " + + "RIGHTWARDS ARROWOPEN-OUTLINED RIGHTWARDS ARROWDOUBLE CURLY LOOPTHREE DIM" + + "ENSIONAL ANGLEWHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLEPERPENDICULA" + + "ROPEN SUBSETOPEN SUPERSETLEFT S-SHAPED BAG DELIMITERRIGHT S-SHAPED BAG D" + + "ELIMITEROR WITH DOT INSIDEREVERSE SOLIDUS PRECEDING SUBSETSUPERSET PRECE" + + "DING SOLIDUSVERTICAL BAR WITH HORIZONTAL STROKEMATHEMATICAL RISING DIAGO" + + "NALLONG DIVISIONMATHEMATICAL FALLING DIAGONALSQUARED LOGICAL ANDSQUARED " + + "LOGICAL ORWHITE DIAMOND WITH CENTRED DOTAND WITH DOTELEMENT OF OPENING U" + + "PWARDSLOWER RIGHT CORNER WITH DOTUPPER LEFT CORNER WITH DOTLEFT OUTER JO" + + "INRIGHT OUTER JOINFULL OUTER JOINLARGE UP TACKLARGE DOWN TACKLEFT AND RI" + + "GHT DOUBLE TURNSTILELEFT AND RIGHT TACKLEFT MULTIMAPLONG RIGHT TACKLONG " + + "LEFT TACKUP TACK WITH CIRCLE ABOVELOZENGE DIVIDED BY HORIZONTAL RULEWHIT" + + "E CONCAVE-SIDED DIAMONDWHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICKWH" + + "ITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICKWHITE SQUARE WITH LEFTWARD" + + "S TICKWHITE SQUARE WITH RIGHTWARDS TICKMATHEMATICAL LEFT WHITE SQUARE BR" + + "ACKETMATHEMATICAL RIGHT WHITE SQUARE BRACKETMATHEMATICAL LEFT ANGLE BRAC" + + "KETMATHEMATICAL RIGHT ANGLE BRACKETMATHEMATICAL LEFT DOUBLE ANGLE BRACKE" + + "TMATHEMATICAL RIGHT DOUBLE ANGLE BRACKETMATHEMATICAL LEFT WHITE TORTOISE" + + " SHELL BRACKETMATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKETMATHEMATICA" + + "L LEFT FLATTENED PARENTHESISMATHEMATICAL RIGHT FLATTENED PARENTHESISUPWA" + + "RDS QUADRUPLE ARROWDOWNWARDS QUADRUPLE ARROWANTICLOCKWISE GAPPED CIRCLE " + + "ARROWCLOCKWISE GAPPED CIRCLE ARROWRIGHT ARROW WITH CIRCLED PLUSLONG LEFT" + + "WARDS ARROWLONG RIGHTWARDS ARROWLONG LEFT RIGHT ARROWLONG LEFTWARDS DOUB" + + "LE ARROWLONG RIGHTWARDS DOUBLE ARROWLONG LEFT RIGHT DOUBLE ARROWLONG LEF" + + "TWARDS ARROW FROM BARLONG RIGHTWARDS ARROW FROM BARLONG LEFTWARDS DOUBLE" + + " ARROW FROM BARLONG RIGHTWARDS DOUBLE ARROW FROM BARLONG RIGHTWARDS SQUI" + + "GGLE ARROWBRAILLE PATTERN BLANKBRAILLE PATTERN DOTS-1BRAILLE PATTERN DOT" + + "S-2BRAILLE PATTERN DOTS-12BRAILLE PATTERN DOTS-3BRAILLE PATTERN DOTS-13B" + + "RAILLE PATTERN DOTS-23BRAILLE PATTERN DOTS-123BRAILLE PATTERN DOTS-4BRAI" + + "LLE PATTERN DOTS-14BRAILLE PATTERN DOTS-24BRAILLE PATTERN DOTS-124BRAILL" + + "E PATTERN DOTS-34BRAILLE PATTERN DOTS-134BRAILLE PATTERN DOTS-234BRAILLE" + + " PATTERN DOTS-1234BRAILLE PATTERN DOTS-5BRAILLE PATTERN DOTS-15BRAILLE P" + + "ATTERN DOTS-25BRAILLE PATTERN DOTS-125BRAILLE PATTERN DOTS-35BRAILLE PAT" + + "TERN DOTS-135BRAILLE PATTERN DOTS-235BRAILLE PATTERN DOTS-1235BRAILLE PA" + + "TTERN DOTS-45BRAILLE PATTERN DOTS-145BRAILLE PATTERN DOTS-245BRAILLE PAT" + + "TERN DOTS-1245BRAILLE PATTERN DOTS-345BRAILLE PATTERN DOTS-1345BRAILLE P" + + "ATTERN DOTS-2345BRAILLE PATTERN DOTS-12345BRAILLE PATTERN DOTS-6BRAILLE " + + "PATTERN DOTS-16BRAILLE PATTERN DOTS-26BRAILLE PATTERN DOTS-126BRAILLE PA" + + "TTERN DOTS-36BRAILLE PATTERN DOTS-136BRAILLE PATTERN DOTS-236BRAILLE PAT" + + "TERN DOTS-1236BRAILLE PATTERN DOTS-46BRAILLE PATTERN DOTS-146BRAILLE PAT" + + "TERN DOTS-246BRAILLE PATTERN DOTS-1246BRAILLE PATTERN DOTS-346BRAILLE PA" + + "TTERN DOTS-1346BRAILLE PATTERN DOTS-2346BRAILLE PATTERN DOTS-12346BRAILL" + + "E PATTERN DOTS-56BRAILLE PATTERN DOTS-156BRAILLE PATTERN DOTS-256BRAILLE" + + " PATTERN DOTS-1256BRAILLE PATTERN DOTS-356BRAILLE PATTERN DOTS-1356BRAIL" + + "LE PATTERN DOTS-2356BRAILLE PATTERN DOTS-12356BRAILLE PATTERN DOTS-456BR" + + "AILLE PATTERN DOTS-1456BRAILLE PATTERN DOTS-2456BRAILLE PATTERN DOTS-124" + + "56BRAILLE PATTERN DOTS-3456BRAILLE PATTERN DOTS-13456BRAILLE PATTERN DOT" + + "S-23456BRAILLE PATTERN DOTS-123456BRAILLE PATTERN DOTS-7BRAILLE PATTERN " + + "DOTS-17BRAILLE PATTERN DOTS-27BRAILLE PATTERN DOTS-127BRAILLE PATTERN DO" + + "TS-37BRAILLE PATTERN DOTS-137BRAILLE PATTERN DOTS-237BRAILLE PATTERN DOT" + + "S-1237BRAILLE PATTERN DOTS-47BRAILLE PATTERN DOTS-147BRAILLE PATTERN DOT") + ("" + + "S-247BRAILLE PATTERN DOTS-1247BRAILLE PATTERN DOTS-347BRAILLE PATTERN DO" + + "TS-1347BRAILLE PATTERN DOTS-2347BRAILLE PATTERN DOTS-12347BRAILLE PATTER" + + "N DOTS-57BRAILLE PATTERN DOTS-157BRAILLE PATTERN DOTS-257BRAILLE PATTERN" + + " DOTS-1257BRAILLE PATTERN DOTS-357BRAILLE PATTERN DOTS-1357BRAILLE PATTE" + + "RN DOTS-2357BRAILLE PATTERN DOTS-12357BRAILLE PATTERN DOTS-457BRAILLE PA" + + "TTERN DOTS-1457BRAILLE PATTERN DOTS-2457BRAILLE PATTERN DOTS-12457BRAILL" + + "E PATTERN DOTS-3457BRAILLE PATTERN DOTS-13457BRAILLE PATTERN DOTS-23457B" + + "RAILLE PATTERN DOTS-123457BRAILLE PATTERN DOTS-67BRAILLE PATTERN DOTS-16" + + "7BRAILLE PATTERN DOTS-267BRAILLE PATTERN DOTS-1267BRAILLE PATTERN DOTS-3" + + "67BRAILLE PATTERN DOTS-1367BRAILLE PATTERN DOTS-2367BRAILLE PATTERN DOTS" + + "-12367BRAILLE PATTERN DOTS-467BRAILLE PATTERN DOTS-1467BRAILLE PATTERN D" + + "OTS-2467BRAILLE PATTERN DOTS-12467BRAILLE PATTERN DOTS-3467BRAILLE PATTE" + + "RN DOTS-13467BRAILLE PATTERN DOTS-23467BRAILLE PATTERN DOTS-123467BRAILL" + + "E PATTERN DOTS-567BRAILLE PATTERN DOTS-1567BRAILLE PATTERN DOTS-2567BRAI" + + "LLE PATTERN DOTS-12567BRAILLE PATTERN DOTS-3567BRAILLE PATTERN DOTS-1356" + + "7BRAILLE PATTERN DOTS-23567BRAILLE PATTERN DOTS-123567BRAILLE PATTERN DO" + + "TS-4567BRAILLE PATTERN DOTS-14567BRAILLE PATTERN DOTS-24567BRAILLE PATTE" + + "RN DOTS-124567BRAILLE PATTERN DOTS-34567BRAILLE PATTERN DOTS-134567BRAIL" + + "LE PATTERN DOTS-234567BRAILLE PATTERN DOTS-1234567BRAILLE PATTERN DOTS-8" + + "BRAILLE PATTERN DOTS-18BRAILLE PATTERN DOTS-28BRAILLE PATTERN DOTS-128BR" + + "AILLE PATTERN DOTS-38BRAILLE PATTERN DOTS-138BRAILLE PATTERN DOTS-238BRA" + + "ILLE PATTERN DOTS-1238BRAILLE PATTERN DOTS-48BRAILLE PATTERN DOTS-148BRA" + + "ILLE PATTERN DOTS-248BRAILLE PATTERN DOTS-1248BRAILLE PATTERN DOTS-348BR" + + "AILLE PATTERN DOTS-1348BRAILLE PATTERN DOTS-2348BRAILLE PATTERN DOTS-123" + + "48BRAILLE PATTERN DOTS-58BRAILLE PATTERN DOTS-158BRAILLE PATTERN DOTS-25" + + "8BRAILLE PATTERN DOTS-1258BRAILLE PATTERN DOTS-358BRAILLE PATTERN DOTS-1" + + "358BRAILLE PATTERN DOTS-2358BRAILLE PATTERN DOTS-12358BRAILLE PATTERN DO" + + "TS-458BRAILLE PATTERN DOTS-1458BRAILLE PATTERN DOTS-2458BRAILLE PATTERN " + + "DOTS-12458BRAILLE PATTERN DOTS-3458BRAILLE PATTERN DOTS-13458BRAILLE PAT" + + "TERN DOTS-23458BRAILLE PATTERN DOTS-123458BRAILLE PATTERN DOTS-68BRAILLE" + + " PATTERN DOTS-168BRAILLE PATTERN DOTS-268BRAILLE PATTERN DOTS-1268BRAILL" + + "E PATTERN DOTS-368BRAILLE PATTERN DOTS-1368BRAILLE PATTERN DOTS-2368BRAI" + + "LLE PATTERN DOTS-12368BRAILLE PATTERN DOTS-468BRAILLE PATTERN DOTS-1468B" + + "RAILLE PATTERN DOTS-2468BRAILLE PATTERN DOTS-12468BRAILLE PATTERN DOTS-3" + + "468BRAILLE PATTERN DOTS-13468BRAILLE PATTERN DOTS-23468BRAILLE PATTERN D" + + "OTS-123468BRAILLE PATTERN DOTS-568BRAILLE PATTERN DOTS-1568BRAILLE PATTE" + + "RN DOTS-2568BRAILLE PATTERN DOTS-12568BRAILLE PATTERN DOTS-3568BRAILLE P" + + "ATTERN DOTS-13568BRAILLE PATTERN DOTS-23568BRAILLE PATTERN DOTS-123568BR" + + "AILLE PATTERN DOTS-4568BRAILLE PATTERN DOTS-14568BRAILLE PATTERN DOTS-24" + + "568BRAILLE PATTERN DOTS-124568BRAILLE PATTERN DOTS-34568BRAILLE PATTERN " + + "DOTS-134568BRAILLE PATTERN DOTS-234568BRAILLE PATTERN DOTS-1234568BRAILL" + + "E PATTERN DOTS-78BRAILLE PATTERN DOTS-178BRAILLE PATTERN DOTS-278BRAILLE" + + " PATTERN DOTS-1278BRAILLE PATTERN DOTS-378BRAILLE PATTERN DOTS-1378BRAIL" + + "LE PATTERN DOTS-2378BRAILLE PATTERN DOTS-12378BRAILLE PATTERN DOTS-478BR" + + "AILLE PATTERN DOTS-1478BRAILLE PATTERN DOTS-2478BRAILLE PATTERN DOTS-124" + + "78BRAILLE PATTERN DOTS-3478BRAILLE PATTERN DOTS-13478BRAILLE PATTERN DOT" + + "S-23478BRAILLE PATTERN DOTS-123478BRAILLE PATTERN DOTS-578BRAILLE PATTER" + + "N DOTS-1578BRAILLE PATTERN DOTS-2578BRAILLE PATTERN DOTS-12578BRAILLE PA" + + "TTERN DOTS-3578BRAILLE PATTERN DOTS-13578BRAILLE PATTERN DOTS-23578BRAIL" + + "LE PATTERN DOTS-123578BRAILLE PATTERN DOTS-4578BRAILLE PATTERN DOTS-1457" + + "8BRAILLE PATTERN DOTS-24578BRAILLE PATTERN DOTS-124578BRAILLE PATTERN DO" + + "TS-34578BRAILLE PATTERN DOTS-134578BRAILLE PATTERN DOTS-234578BRAILLE PA" + + "TTERN DOTS-1234578BRAILLE PATTERN DOTS-678BRAILLE PATTERN DOTS-1678BRAIL" + + "LE PATTERN DOTS-2678BRAILLE PATTERN DOTS-12678BRAILLE PATTERN DOTS-3678B" + + "RAILLE PATTERN DOTS-13678BRAILLE PATTERN DOTS-23678BRAILLE PATTERN DOTS-" + + "123678BRAILLE PATTERN DOTS-4678BRAILLE PATTERN DOTS-14678BRAILLE PATTERN" + + " DOTS-24678BRAILLE PATTERN DOTS-124678BRAILLE PATTERN DOTS-34678BRAILLE " + + "PATTERN DOTS-134678BRAILLE PATTERN DOTS-234678BRAILLE PATTERN DOTS-12346" + + "78BRAILLE PATTERN DOTS-5678BRAILLE PATTERN DOTS-15678BRAILLE PATTERN DOT" + + "S-25678BRAILLE PATTERN DOTS-125678BRAILLE PATTERN DOTS-35678BRAILLE PATT" + + "ERN DOTS-135678BRAILLE PATTERN DOTS-235678BRAILLE PATTERN DOTS-1235678BR" + + "AILLE PATTERN DOTS-45678BRAILLE PATTERN DOTS-145678BRAILLE PATTERN DOTS-" + + "245678BRAILLE PATTERN DOTS-1245678BRAILLE PATTERN DOTS-345678BRAILLE PAT" + + "TERN DOTS-1345678BRAILLE PATTERN DOTS-2345678BRAILLE PATTERN DOTS-123456") + ("" + + "78RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKERIGHTWARDS TWO-HEADED " + + "ARROW WITH DOUBLE VERTICAL STROKELEFTWARDS DOUBLE ARROW WITH VERTICAL ST" + + "ROKERIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKELEFT RIGHT DOUBLE ARROW " + + "WITH VERTICAL STROKERIGHTWARDS TWO-HEADED ARROW FROM BARLEFTWARDS DOUBLE" + + " ARROW FROM BARRIGHTWARDS DOUBLE ARROW FROM BARDOWNWARDS ARROW WITH HORI" + + "ZONTAL STROKEUPWARDS ARROW WITH HORIZONTAL STROKEUPWARDS TRIPLE ARROWDOW" + + "NWARDS TRIPLE ARROWLEFTWARDS DOUBLE DASH ARROWRIGHTWARDS DOUBLE DASH ARR" + + "OWLEFTWARDS TRIPLE DASH ARROWRIGHTWARDS TRIPLE DASH ARROWRIGHTWARDS TWO-" + + "HEADED TRIPLE DASH ARROWRIGHTWARDS ARROW WITH DOTTED STEMUPWARDS ARROW T" + + "O BARDOWNWARDS ARROW TO BARRIGHTWARDS ARROW WITH TAIL WITH VERTICAL STRO" + + "KERIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKERIGHTWARDS TWO-H" + + "EADED ARROW WITH TAILRIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL" + + " STROKERIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" + + "LEFTWARDS ARROW-TAILRIGHTWARDS ARROW-TAILLEFTWARDS DOUBLE ARROW-TAILRIGH" + + "TWARDS DOUBLE ARROW-TAILLEFTWARDS ARROW TO BLACK DIAMONDRIGHTWARDS ARROW" + + " TO BLACK DIAMONDLEFTWARDS ARROW FROM BAR TO BLACK DIAMONDRIGHTWARDS ARR" + + "OW FROM BAR TO BLACK DIAMONDNORTH WEST AND SOUTH EAST ARROWNORTH EAST AN" + + "D SOUTH WEST ARROWNORTH WEST ARROW WITH HOOKNORTH EAST ARROW WITH HOOKSO" + + "UTH EAST ARROW WITH HOOKSOUTH WEST ARROW WITH HOOKNORTH WEST ARROW AND N" + + "ORTH EAST ARROWNORTH EAST ARROW AND SOUTH EAST ARROWSOUTH EAST ARROW AND" + + " SOUTH WEST ARROWSOUTH WEST ARROW AND NORTH WEST ARROWRISING DIAGONAL CR" + + "OSSING FALLING DIAGONALFALLING DIAGONAL CROSSING RISING DIAGONALSOUTH EA" + + "ST ARROW CROSSING NORTH EAST ARROWNORTH EAST ARROW CROSSING SOUTH EAST A" + + "RROWFALLING DIAGONAL CROSSING NORTH EAST ARROWRISING DIAGONAL CROSSING S" + + "OUTH EAST ARROWNORTH EAST ARROW CROSSING NORTH WEST ARROWNORTH WEST ARRO" + + "W CROSSING NORTH EAST ARROWWAVE ARROW POINTING DIRECTLY RIGHTARROW POINT" + + "ING RIGHTWARDS THEN CURVING UPWARDSARROW POINTING RIGHTWARDS THEN CURVIN" + + "G DOWNWARDSARROW POINTING DOWNWARDS THEN CURVING LEFTWARDSARROW POINTING" + + " DOWNWARDS THEN CURVING RIGHTWARDSRIGHT-SIDE ARC CLOCKWISE ARROWLEFT-SID" + + "E ARC ANTICLOCKWISE ARROWTOP ARC ANTICLOCKWISE ARROWBOTTOM ARC ANTICLOCK" + + "WISE ARROWTOP ARC CLOCKWISE ARROW WITH MINUSTOP ARC ANTICLOCKWISE ARROW " + + "WITH PLUSLOWER RIGHT SEMICIRCULAR CLOCKWISE ARROWLOWER LEFT SEMICIRCULAR" + + " ANTICLOCKWISE ARROWANTICLOCKWISE CLOSED CIRCLE ARROWCLOCKWISE CLOSED CI" + + "RCLE ARROWRIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROWLEFTWARDS ARROW AB" + + "OVE SHORT RIGHTWARDS ARROWSHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROWRI" + + "GHTWARDS ARROW WITH PLUS BELOWLEFTWARDS ARROW WITH PLUS BELOWRIGHTWARDS " + + "ARROW THROUGH XLEFT RIGHT ARROW THROUGH SMALL CIRCLEUPWARDS TWO-HEADED A" + + "RROW FROM SMALL CIRCLELEFT BARB UP RIGHT BARB DOWN HARPOONLEFT BARB DOWN" + + " RIGHT BARB UP HARPOONUP BARB RIGHT DOWN BARB LEFT HARPOONUP BARB LEFT D" + + "OWN BARB RIGHT HARPOONLEFT BARB UP RIGHT BARB UP HARPOONUP BARB RIGHT DO" + + "WN BARB RIGHT HARPOONLEFT BARB DOWN RIGHT BARB DOWN HARPOONUP BARB LEFT " + + "DOWN BARB LEFT HARPOONLEFTWARDS HARPOON WITH BARB UP TO BARRIGHTWARDS HA" + + "RPOON WITH BARB UP TO BARUPWARDS HARPOON WITH BARB RIGHT TO BARDOWNWARDS" + + " HARPOON WITH BARB RIGHT TO BARLEFTWARDS HARPOON WITH BARB DOWN TO BARRI" + + "GHTWARDS HARPOON WITH BARB DOWN TO BARUPWARDS HARPOON WITH BARB LEFT TO " + + "BARDOWNWARDS HARPOON WITH BARB LEFT TO BARLEFTWARDS HARPOON WITH BARB UP" + + " FROM BARRIGHTWARDS HARPOON WITH BARB UP FROM BARUPWARDS HARPOON WITH BA" + + "RB RIGHT FROM BARDOWNWARDS HARPOON WITH BARB RIGHT FROM BARLEFTWARDS HAR" + + "POON WITH BARB DOWN FROM BARRIGHTWARDS HARPOON WITH BARB DOWN FROM BARUP" + + "WARDS HARPOON WITH BARB LEFT FROM BARDOWNWARDS HARPOON WITH BARB LEFT FR" + + "OM BARLEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB D" + + "OWNUPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" + + "RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWND" + + "OWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" + + "LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UPLEFT" + + "WARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWNRIGH" + + "TWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UPRIGHTWAR" + + "DS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWNLEFTWARD" + + "S HARPOON WITH BARB UP ABOVE LONG DASHLEFTWARDS HARPOON WITH BARB DOWN B" + + "ELOW LONG DASHRIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASHRIGHTWARDS " + + "HARPOON WITH BARB DOWN BELOW LONG DASHUPWARDS HARPOON WITH BARB LEFT BES" + + "IDE DOWNWARDS HARPOON WITH BARB RIGHTDOWNWARDS HARPOON WITH BARB LEFT BE" + + "SIDE UPWARDS HARPOON WITH BARB RIGHTRIGHT DOUBLE ARROW WITH ROUNDED HEAD" + + "EQUALS SIGN ABOVE RIGHTWARDS ARROWTILDE OPERATOR ABOVE RIGHTWARDS ARROWL") + ("" + + "EFTWARDS ARROW ABOVE TILDE OPERATORRIGHTWARDS ARROW ABOVE TILDE OPERATOR" + + "RIGHTWARDS ARROW ABOVE ALMOST EQUAL TOLESS-THAN ABOVE LEFTWARDS ARROWLEF" + + "TWARDS ARROW THROUGH LESS-THANGREATER-THAN ABOVE RIGHTWARDS ARROWSUBSET " + + "ABOVE RIGHTWARDS ARROWLEFTWARDS ARROW THROUGH SUBSETSUPERSET ABOVE LEFTW" + + "ARDS ARROWLEFT FISH TAILRIGHT FISH TAILUP FISH TAILDOWN FISH TAILTRIPLE " + + "VERTICAL BAR DELIMITERZ NOTATION SPOTZ NOTATION TYPE COLONLEFT WHITE CUR" + + "LY BRACKETRIGHT WHITE CURLY BRACKETLEFT WHITE PARENTHESISRIGHT WHITE PAR" + + "ENTHESISZ NOTATION LEFT IMAGE BRACKETZ NOTATION RIGHT IMAGE BRACKETZ NOT" + + "ATION LEFT BINDING BRACKETZ NOTATION RIGHT BINDING BRACKETLEFT SQUARE BR" + + "ACKET WITH UNDERBARRIGHT SQUARE BRACKET WITH UNDERBARLEFT SQUARE BRACKET" + + " WITH TICK IN TOP CORNERRIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNERL" + + "EFT SQUARE BRACKET WITH TICK IN BOTTOM CORNERRIGHT SQUARE BRACKET WITH T" + + "ICK IN TOP CORNERLEFT ANGLE BRACKET WITH DOTRIGHT ANGLE BRACKET WITH DOT" + + "LEFT ARC LESS-THAN BRACKETRIGHT ARC GREATER-THAN BRACKETDOUBLE LEFT ARC " + + "GREATER-THAN BRACKETDOUBLE RIGHT ARC LESS-THAN BRACKETLEFT BLACK TORTOIS" + + "E SHELL BRACKETRIGHT BLACK TORTOISE SHELL BRACKETDOTTED FENCEVERTICAL ZI" + + "GZAG LINEMEASURED ANGLE OPENING LEFTRIGHT ANGLE VARIANT WITH SQUAREMEASU" + + "RED RIGHT ANGLE WITH DOTANGLE WITH S INSIDEACUTE ANGLESPHERICAL ANGLE OP" + + "ENING LEFTSPHERICAL ANGLE OPENING UPTURNED ANGLEREVERSED ANGLEANGLE WITH" + + " UNDERBARREVERSED ANGLE WITH UNDERBAROBLIQUE ANGLE OPENING UPOBLIQUE ANG" + + "LE OPENING DOWNMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP " + + "AND RIGHTMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LE" + + "FTMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHTME" + + "ASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFTMEASURE" + + "D ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UPMEASURED ANGL" + + "E WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UPMEASURED ANGLE WITH " + + "OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWNMEASURED ANGLE WITH OPEN" + + " ARM ENDING IN ARROW POINTING LEFT AND DOWNREVERSED EMPTY SETEMPTY SET W" + + "ITH OVERBAREMPTY SET WITH SMALL CIRCLE ABOVEEMPTY SET WITH RIGHT ARROW A" + + "BOVEEMPTY SET WITH LEFT ARROW ABOVECIRCLE WITH HORIZONTAL BARCIRCLED VER" + + "TICAL BARCIRCLED PARALLELCIRCLED REVERSE SOLIDUSCIRCLED PERPENDICULARCIR" + + "CLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BARCIRCLE" + + " WITH SUPERIMPOSED XCIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGNUP ARROW " + + "THROUGH CIRCLECIRCLED WHITE BULLETCIRCLED BULLETCIRCLED LESS-THANCIRCLED" + + " GREATER-THANCIRCLE WITH SMALL CIRCLE TO THE RIGHTCIRCLE WITH TWO HORIZO" + + "NTAL STROKES TO THE RIGHTSQUARED RISING DIAGONAL SLASHSQUARED FALLING DI" + + "AGONAL SLASHSQUARED ASTERISKSQUARED SMALL CIRCLESQUARED SQUARETWO JOINED" + + " SQUARESTRIANGLE WITH DOT ABOVETRIANGLE WITH UNDERBARS IN TRIANGLETRIANG" + + "LE WITH SERIFS AT BOTTOMRIGHT TRIANGLE ABOVE LEFT TRIANGLELEFT TRIANGLE " + + "BESIDE VERTICAL BARVERTICAL BAR BESIDE RIGHT TRIANGLEBOWTIE WITH LEFT HA" + + "LF BLACKBOWTIE WITH RIGHT HALF BLACKBLACK BOWTIETIMES WITH LEFT HALF BLA" + + "CKTIMES WITH RIGHT HALF BLACKWHITE HOURGLASSBLACK HOURGLASSLEFT WIGGLY F" + + "ENCERIGHT WIGGLY FENCELEFT DOUBLE WIGGLY FENCERIGHT DOUBLE WIGGLY FENCEI" + + "NCOMPLETE INFINITYTIE OVER INFINITYINFINITY NEGATED WITH VERTICAL BARDOU" + + "BLE-ENDED MULTIMAPSQUARE WITH CONTOURED OUTLINEINCREASES ASSHUFFLE PRODU" + + "CTEQUALS SIGN AND SLANTED PARALLELEQUALS SIGN AND SLANTED PARALLEL WITH " + + "TILDE ABOVEIDENTICAL TO AND SLANTED PARALLELGLEICH STARKTHERMODYNAMICDOW" + + "N-POINTING TRIANGLE WITH LEFT HALF BLACKDOWN-POINTING TRIANGLE WITH RIGH" + + "T HALF BLACKBLACK DIAMOND WITH DOWN ARROWBLACK LOZENGEWHITE CIRCLE WITH " + + "DOWN ARROWBLACK CIRCLE WITH DOWN ARROWERROR-BARRED WHITE SQUAREERROR-BAR" + + "RED BLACK SQUAREERROR-BARRED WHITE DIAMONDERROR-BARRED BLACK DIAMONDERRO" + + "R-BARRED WHITE CIRCLEERROR-BARRED BLACK CIRCLERULE-DELAYEDREVERSE SOLIDU" + + "S OPERATORSOLIDUS WITH OVERBARREVERSE SOLIDUS WITH HORIZONTAL STROKEBIG " + + "SOLIDUSBIG REVERSE SOLIDUSDOUBLE PLUSTRIPLE PLUSLEFT-POINTING CURVED ANG" + + "LE BRACKETRIGHT-POINTING CURVED ANGLE BRACKETTINYMINYN-ARY CIRCLED DOT O" + + "PERATORN-ARY CIRCLED PLUS OPERATORN-ARY CIRCLED TIMES OPERATORN-ARY UNIO" + + "N OPERATOR WITH DOTN-ARY UNION OPERATOR WITH PLUSN-ARY SQUARE INTERSECTI" + + "ON OPERATORN-ARY SQUARE UNION OPERATORTWO LOGICAL AND OPERATORTWO LOGICA" + + "L OR OPERATORN-ARY TIMES OPERATORMODULO TWO SUMSUMMATION WITH INTEGRALQU" + + "ADRUPLE INTEGRAL OPERATORFINITE PART INTEGRALINTEGRAL WITH DOUBLE STROKE" + + "INTEGRAL AVERAGE WITH SLASHCIRCULATION FUNCTIONANTICLOCKWISE INTEGRATION" + + "LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLELINE INTEGRATION WITH " + + "SEMICIRCULAR PATH AROUND POLELINE INTEGRATION NOT INCLUDING THE POLEINTE" + + "GRAL AROUND A POINT OPERATORQUATERNION INTEGRAL OPERATORINTEGRAL WITH LE") + ("" + + "FTWARDS ARROW WITH HOOKINTEGRAL WITH TIMES SIGNINTEGRAL WITH INTERSECTIO" + + "NINTEGRAL WITH UNIONINTEGRAL WITH OVERBARINTEGRAL WITH UNDERBARJOINLARGE" + + " LEFT TRIANGLE OPERATORZ NOTATION SCHEMA COMPOSITIONZ NOTATION SCHEMA PI" + + "PINGZ NOTATION SCHEMA PROJECTIONPLUS SIGN WITH SMALL CIRCLE ABOVEPLUS SI" + + "GN WITH CIRCUMFLEX ACCENT ABOVEPLUS SIGN WITH TILDE ABOVEPLUS SIGN WITH " + + "DOT BELOWPLUS SIGN WITH TILDE BELOWPLUS SIGN WITH SUBSCRIPT TWOPLUS SIGN" + + " WITH BLACK TRIANGLEMINUS SIGN WITH COMMA ABOVEMINUS SIGN WITH DOT BELOW" + + "MINUS SIGN WITH FALLING DOTSMINUS SIGN WITH RISING DOTSPLUS SIGN IN LEFT" + + " HALF CIRCLEPLUS SIGN IN RIGHT HALF CIRCLEVECTOR OR CROSS PRODUCTMULTIPL" + + "ICATION SIGN WITH DOT ABOVEMULTIPLICATION SIGN WITH UNDERBARSEMIDIRECT P" + + "RODUCT WITH BOTTOM CLOSEDSMASH PRODUCTMULTIPLICATION SIGN IN LEFT HALF C" + + "IRCLEMULTIPLICATION SIGN IN RIGHT HALF CIRCLECIRCLED MULTIPLICATION SIGN" + + " WITH CIRCUMFLEX ACCENTMULTIPLICATION SIGN IN DOUBLE CIRCLECIRCLED DIVIS" + + "ION SIGNPLUS SIGN IN TRIANGLEMINUS SIGN IN TRIANGLEMULTIPLICATION SIGN I" + + "N TRIANGLEINTERIOR PRODUCTRIGHTHAND INTERIOR PRODUCTZ NOTATION RELATIONA" + + "L COMPOSITIONAMALGAMATION OR COPRODUCTINTERSECTION WITH DOTUNION WITH MI" + + "NUS SIGNUNION WITH OVERBARINTERSECTION WITH OVERBARINTERSECTION WITH LOG" + + "ICAL ANDUNION WITH LOGICAL ORUNION ABOVE INTERSECTIONINTERSECTION ABOVE " + + "UNIONUNION ABOVE BAR ABOVE INTERSECTIONINTERSECTION ABOVE BAR ABOVE UNIO" + + "NUNION BESIDE AND JOINED WITH UNIONINTERSECTION BESIDE AND JOINED WITH I" + + "NTERSECTIONCLOSED UNION WITH SERIFSCLOSED INTERSECTION WITH SERIFSDOUBLE" + + " SQUARE INTERSECTIONDOUBLE SQUARE UNIONCLOSED UNION WITH SERIFS AND SMAS" + + "H PRODUCTLOGICAL AND WITH DOT ABOVELOGICAL OR WITH DOT ABOVEDOUBLE LOGIC" + + "AL ANDDOUBLE LOGICAL ORTWO INTERSECTING LOGICAL ANDTWO INTERSECTING LOGI" + + "CAL ORSLOPING LARGE ORSLOPING LARGE ANDLOGICAL OR OVERLAPPING LOGICAL AN" + + "DLOGICAL AND WITH MIDDLE STEMLOGICAL OR WITH MIDDLE STEMLOGICAL AND WITH" + + " HORIZONTAL DASHLOGICAL OR WITH HORIZONTAL DASHLOGICAL AND WITH DOUBLE O" + + "VERBARLOGICAL AND WITH UNDERBARLOGICAL AND WITH DOUBLE UNDERBARSMALL VEE" + + " WITH UNDERBARLOGICAL OR WITH DOUBLE OVERBARLOGICAL OR WITH DOUBLE UNDER" + + "BARZ NOTATION DOMAIN ANTIRESTRICTIONZ NOTATION RANGE ANTIRESTRICTIONEQUA" + + "LS SIGN WITH DOT BELOWIDENTICAL WITH DOT ABOVETRIPLE HORIZONTAL BAR WITH" + + " DOUBLE VERTICAL STROKETRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE" + + "TILDE OPERATOR WITH DOT ABOVETILDE OPERATOR WITH RISING DOTSSIMILAR MINU" + + "S SIMILARCONGRUENT WITH DOT ABOVEEQUALS WITH ASTERISKALMOST EQUAL TO WIT" + + "H CIRCUMFLEX ACCENTAPPROXIMATELY EQUAL OR EQUAL TOEQUALS SIGN ABOVE PLUS" + + " SIGNPLUS SIGN ABOVE EQUALS SIGNEQUALS SIGN ABOVE TILDE OPERATORDOUBLE C" + + "OLON EQUALTWO CONSECUTIVE EQUALS SIGNSTHREE CONSECUTIVE EQUALS SIGNSEQUA" + + "LS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOWEQUIVALENT WITH FOUR DOTS " + + "ABOVELESS-THAN WITH CIRCLE INSIDEGREATER-THAN WITH CIRCLE INSIDELESS-THA" + + "N WITH QUESTION MARK ABOVEGREATER-THAN WITH QUESTION MARK ABOVELESS-THAN" + + " OR SLANTED EQUAL TOGREATER-THAN OR SLANTED EQUAL TOLESS-THAN OR SLANTED" + + " EQUAL TO WITH DOT INSIDEGREATER-THAN OR SLANTED EQUAL TO WITH DOT INSID" + + "ELESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVEGREATER-THAN OR SLANTED EQU" + + "AL TO WITH DOT ABOVELESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHTGR" + + "EATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFTLESS-THAN OR APPROXIMA" + + "TEGREATER-THAN OR APPROXIMATELESS-THAN AND SINGLE-LINE NOT EQUAL TOGREAT" + + "ER-THAN AND SINGLE-LINE NOT EQUAL TOLESS-THAN AND NOT APPROXIMATEGREATER" + + "-THAN AND NOT APPROXIMATELESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER" + + "-THANGREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THANLESS-THAN ABOVE" + + " SIMILAR OR EQUALGREATER-THAN ABOVE SIMILAR OR EQUALLESS-THAN ABOVE SIMI" + + "LAR ABOVE GREATER-THANGREATER-THAN ABOVE SIMILAR ABOVE LESS-THANLESS-THA" + + "N ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUALGREATER-THAN ABOVE LESS-THAN" + + " ABOVE DOUBLE-LINE EQUALLESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN" + + " ABOVE SLANTED EQUALGREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABO" + + "VE SLANTED EQUALSLANTED EQUAL TO OR LESS-THANSLANTED EQUAL TO OR GREATER" + + "-THANSLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDESLANTED EQUAL TO OR GR" + + "EATER-THAN WITH DOT INSIDEDOUBLE-LINE EQUAL TO OR LESS-THANDOUBLE-LINE E" + + "QUAL TO OR GREATER-THANDOUBLE-LINE SLANTED EQUAL TO OR LESS-THANDOUBLE-L" + + "INE SLANTED EQUAL TO OR GREATER-THANSIMILAR OR LESS-THANSIMILAR OR GREAT" + + "ER-THANSIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGNSIMILAR ABOVE GREATER-TH" + + "AN ABOVE EQUALS SIGNDOUBLE NESTED LESS-THANDOUBLE NESTED GREATER-THANDOU" + + "BLE NESTED LESS-THAN WITH UNDERBARGREATER-THAN OVERLAPPING LESS-THANGREA" + + "TER-THAN BESIDE LESS-THANLESS-THAN CLOSED BY CURVEGREATER-THAN CLOSED BY" + + " CURVELESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUALGREATER-THAN CLOSED B") + ("" + + "Y CURVE ABOVE SLANTED EQUALSMALLER THANLARGER THANSMALLER THAN OR EQUAL " + + "TOLARGER THAN OR EQUAL TOEQUALS SIGN WITH BUMPY ABOVEPRECEDES ABOVE SING" + + "LE-LINE EQUALS SIGNSUCCEEDS ABOVE SINGLE-LINE EQUALS SIGNPRECEDES ABOVE " + + "SINGLE-LINE NOT EQUAL TOSUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TOPRECEDES " + + "ABOVE EQUALS SIGNSUCCEEDS ABOVE EQUALS SIGNPRECEDES ABOVE NOT EQUAL TOSU" + + "CCEEDS ABOVE NOT EQUAL TOPRECEDES ABOVE ALMOST EQUAL TOSUCCEEDS ABOVE AL" + + "MOST EQUAL TOPRECEDES ABOVE NOT ALMOST EQUAL TOSUCCEEDS ABOVE NOT ALMOST" + + " EQUAL TODOUBLE PRECEDESDOUBLE SUCCEEDSSUBSET WITH DOTSUPERSET WITH DOTS" + + "UBSET WITH PLUS SIGN BELOWSUPERSET WITH PLUS SIGN BELOWSUBSET WITH MULTI" + + "PLICATION SIGN BELOWSUPERSET WITH MULTIPLICATION SIGN BELOWSUBSET OF OR " + + "EQUAL TO WITH DOT ABOVESUPERSET OF OR EQUAL TO WITH DOT ABOVESUBSET OF A" + + "BOVE EQUALS SIGNSUPERSET OF ABOVE EQUALS SIGNSUBSET OF ABOVE TILDE OPERA" + + "TORSUPERSET OF ABOVE TILDE OPERATORSUBSET OF ABOVE ALMOST EQUAL TOSUPERS" + + "ET OF ABOVE ALMOST EQUAL TOSUBSET OF ABOVE NOT EQUAL TOSUPERSET OF ABOVE" + + " NOT EQUAL TOSQUARE LEFT OPEN BOX OPERATORSQUARE RIGHT OPEN BOX OPERATOR" + + "CLOSED SUBSETCLOSED SUPERSETCLOSED SUBSET OR EQUAL TOCLOSED SUPERSET OR " + + "EQUAL TOSUBSET ABOVE SUPERSETSUPERSET ABOVE SUBSETSUBSET ABOVE SUBSETSUP" + + "ERSET ABOVE SUPERSETSUPERSET BESIDE SUBSETSUPERSET BESIDE AND JOINED BY " + + "DASH WITH SUBSETELEMENT OF OPENING DOWNWARDSPITCHFORK WITH TEE TOPTRANSV" + + "ERSAL INTERSECTIONFORKINGNONFORKINGSHORT LEFT TACKSHORT DOWN TACKSHORT U" + + "P TACKPERPENDICULAR WITH SVERTICAL BAR TRIPLE RIGHT TURNSTILEDOUBLE VERT" + + "ICAL BAR LEFT TURNSTILEVERTICAL BAR DOUBLE LEFT TURNSTILEDOUBLE VERTICAL" + + " BAR DOUBLE LEFT TURNSTILELONG DASH FROM LEFT MEMBER OF DOUBLE VERTICALS" + + "HORT DOWN TACK WITH OVERBARSHORT UP TACK WITH UNDERBARSHORT UP TACK ABOV" + + "E SHORT DOWN TACKDOUBLE DOWN TACKDOUBLE UP TACKDOUBLE STROKE NOT SIGNREV" + + "ERSED DOUBLE STROKE NOT SIGNDOES NOT DIVIDE WITH REVERSED NEGATION SLASH" + + "VERTICAL LINE WITH CIRCLE ABOVEVERTICAL LINE WITH CIRCLE BELOWDOWN TACK " + + "WITH CIRCLE BELOWPARALLEL WITH HORIZONTAL STROKEPARALLEL WITH TILDE OPER" + + "ATORTRIPLE VERTICAL BAR BINARY RELATIONTRIPLE VERTICAL BAR WITH HORIZONT" + + "AL STROKETRIPLE COLON OPERATORTRIPLE NESTED LESS-THANTRIPLE NESTED GREAT" + + "ER-THANDOUBLE-LINE SLANTED LESS-THAN OR EQUAL TODOUBLE-LINE SLANTED GREA" + + "TER-THAN OR EQUAL TOTRIPLE SOLIDUS BINARY RELATIONLARGE TRIPLE VERTICAL " + + "BAR OPERATORDOUBLE SOLIDUS OPERATORWHITE VERTICAL BARN-ARY WHITE VERTICA" + + "L BARNORTH EAST WHITE ARROWNORTH WEST WHITE ARROWSOUTH EAST WHITE ARROWS" + + "OUTH WEST WHITE ARROWLEFT RIGHT WHITE ARROWLEFTWARDS BLACK ARROWUPWARDS " + + "BLACK ARROWDOWNWARDS BLACK ARROWNORTH EAST BLACK ARROWNORTH WEST BLACK A" + + "RROWSOUTH EAST BLACK ARROWSOUTH WEST BLACK ARROWLEFT RIGHT BLACK ARROWUP" + + " DOWN BLACK ARROWRIGHTWARDS ARROW WITH TIP DOWNWARDSRIGHTWARDS ARROW WIT" + + "H TIP UPWARDSLEFTWARDS ARROW WITH TIP DOWNWARDSLEFTWARDS ARROW WITH TIP " + + "UPWARDSSQUARE WITH TOP HALF BLACKSQUARE WITH BOTTOM HALF BLACKSQUARE WIT" + + "H UPPER RIGHT DIAGONAL HALF BLACKSQUARE WITH LOWER LEFT DIAGONAL HALF BL" + + "ACKDIAMOND WITH LEFT HALF BLACKDIAMOND WITH RIGHT HALF BLACKDIAMOND WITH" + + " TOP HALF BLACKDIAMOND WITH BOTTOM HALF BLACKDOTTED SQUAREBLACK LARGE SQ" + + "UAREWHITE LARGE SQUAREBLACK VERY SMALL SQUAREWHITE VERY SMALL SQUAREBLAC" + + "K PENTAGONWHITE PENTAGONWHITE HEXAGONBLACK HEXAGONHORIZONTAL BLACK HEXAG" + + "ONBLACK LARGE CIRCLEBLACK MEDIUM DIAMONDWHITE MEDIUM DIAMONDBLACK MEDIUM" + + " LOZENGEWHITE MEDIUM LOZENGEBLACK SMALL DIAMONDBLACK SMALL LOZENGEWHITE " + + "SMALL LOZENGEBLACK HORIZONTAL ELLIPSEWHITE HORIZONTAL ELLIPSEBLACK VERTI" + + "CAL ELLIPSEWHITE VERTICAL ELLIPSELEFT ARROW WITH SMALL CIRCLETHREE LEFTW" + + "ARDS ARROWSLEFT ARROW WITH CIRCLED PLUSLONG LEFTWARDS SQUIGGLE ARROWLEFT" + + "WARDS TWO-HEADED ARROW WITH VERTICAL STROKELEFTWARDS TWO-HEADED ARROW WI" + + "TH DOUBLE VERTICAL STROKELEFTWARDS TWO-HEADED ARROW FROM BARLEFTWARDS TW" + + "O-HEADED TRIPLE DASH ARROWLEFTWARDS ARROW WITH DOTTED STEMLEFTWARDS ARRO" + + "W WITH TAIL WITH VERTICAL STROKELEFTWARDS ARROW WITH TAIL WITH DOUBLE VE" + + "RTICAL STROKELEFTWARDS TWO-HEADED ARROW WITH TAILLEFTWARDS TWO-HEADED AR" + + "ROW WITH TAIL WITH VERTICAL STROKELEFTWARDS TWO-HEADED ARROW WITH TAIL W" + + "ITH DOUBLE VERTICAL STROKELEFTWARDS ARROW THROUGH XWAVE ARROW POINTING D" + + "IRECTLY LEFTEQUALS SIGN ABOVE LEFTWARDS ARROWREVERSE TILDE OPERATOR ABOV" + + "E LEFTWARDS ARROWLEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TORIGHTWARDS" + + " ARROW THROUGH GREATER-THANRIGHTWARDS ARROW THROUGH SUPERSETLEFTWARDS QU" + + "ADRUPLE ARROWRIGHTWARDS QUADRUPLE ARROWREVERSE TILDE OPERATOR ABOVE RIGH" + + "TWARDS ARROWRIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TOTILDE OPERATOR" + + " ABOVE LEFTWARDS ARROWLEFTWARDS ARROW ABOVE ALMOST EQUAL TOLEFTWARDS ARR" + + "OW ABOVE REVERSE TILDE OPERATORRIGHTWARDS ARROW ABOVE REVERSE TILDE OPER") + ("" + + "ATORDOWNWARDS TRIANGLE-HEADED ZIGZAG ARROWSHORT SLANTED NORTH ARROWSHORT" + + " BACKSLANTED SOUTH ARROWWHITE MEDIUM STARBLACK SMALL STARWHITE SMALL STA" + + "RBLACK RIGHT-POINTING PENTAGONWHITE RIGHT-POINTING PENTAGONHEAVY LARGE C" + + "IRCLEHEAVY OVAL WITH OVAL INSIDEHEAVY CIRCLE WITH CIRCLE INSIDEHEAVY CIR" + + "CLEHEAVY CIRCLED SALTIRESLANTED NORTH ARROW WITH HOOKED HEADBACKSLANTED " + + "SOUTH ARROW WITH HOOKED TAILSLANTED NORTH ARROW WITH HORIZONTAL TAILBACK" + + "SLANTED SOUTH ARROW WITH HORIZONTAL TAILBENT ARROW POINTING DOWNWARDS TH" + + "EN NORTH EASTSHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EASTLEFTWARD" + + "S TRIANGLE-HEADED ARROWUPWARDS TRIANGLE-HEADED ARROWRIGHTWARDS TRIANGLE-" + + "HEADED ARROWDOWNWARDS TRIANGLE-HEADED ARROWLEFT RIGHT TRIANGLE-HEADED AR" + + "ROWUP DOWN TRIANGLE-HEADED ARROWNORTH WEST TRIANGLE-HEADED ARROWNORTH EA" + + "ST TRIANGLE-HEADED ARROWSOUTH EAST TRIANGLE-HEADED ARROWSOUTH WEST TRIAN" + + "GLE-HEADED ARROWLEFTWARDS TRIANGLE-HEADED DASHED ARROWUPWARDS TRIANGLE-H" + + "EADED DASHED ARROWRIGHTWARDS TRIANGLE-HEADED DASHED ARROWDOWNWARDS TRIAN" + + "GLE-HEADED DASHED ARROWCLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROWANTICL" + + "OCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROWLEFTWARDS TRIANGLE-HEADED ARROW" + + " TO BARUPWARDS TRIANGLE-HEADED ARROW TO BARRIGHTWARDS TRIANGLE-HEADED AR" + + "ROW TO BARDOWNWARDS TRIANGLE-HEADED ARROW TO BARNORTH WEST TRIANGLE-HEAD" + + "ED ARROW TO BARNORTH EAST TRIANGLE-HEADED ARROW TO BARSOUTH EAST TRIANGL" + + "E-HEADED ARROW TO BARSOUTH WEST TRIANGLE-HEADED ARROW TO BARLEFTWARDS TR" + + "IANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKEUPWARDS TRIANGLE-HEADED" + + " ARROW WITH DOUBLE HORIZONTAL STROKERIGHTWARDS TRIANGLE-HEADED ARROW WIT" + + "H DOUBLE HORIZONTAL STROKEDOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HO" + + "RIZONTAL STROKEHORIZONTAL TAB KEYVERTICAL TAB KEYLEFTWARDS TRIANGLE-HEAD" + + "ED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROWUPWARDS TRIANGLE-HEADED AR" + + "ROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROWRIGHTWARDS TRIANGLE-HEAD" + + "ED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROWDOWNWARDS TRIANGLE-HEADED A" + + "RROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROWLEFTWARDS TRIANGLE-HEADED" + + " PAIRED ARROWSUPWARDS TRIANGLE-HEADED PAIRED ARROWSRIGHTWARDS TRIANGLE-H" + + "EADED PAIRED ARROWSDOWNWARDS TRIANGLE-HEADED PAIRED ARROWSLEFTWARDS BLAC" + + "K CIRCLED WHITE ARROWUPWARDS BLACK CIRCLED WHITE ARROWRIGHTWARDS BLACK C" + + "IRCLED WHITE ARROWDOWNWARDS BLACK CIRCLED WHITE ARROWANTICLOCKWISE TRIAN" + + "GLE-HEADED RIGHT U-SHAPED ARROWANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SH" + + "APED ARROWANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROWANTICLOCKWISE" + + " TRIANGLE-HEADED TOP U-SHAPED ARROWRETURN LEFTRETURN RIGHTNEWLINE LEFTNE" + + "WLINE RIGHTFOUR CORNER ARROWS CIRCLING ANTICLOCKWISERIGHTWARDS BLACK ARR" + + "OWTHREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEADTHREE-D RIGHT-LIGHT" + + "ED UPWARDS EQUILATERAL ARROWHEADTHREE-D TOP-LIGHTED RIGHTWARDS EQUILATER" + + "AL ARROWHEADTHREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEADBLACK LE" + + "FTWARDS EQUILATERAL ARROWHEADBLACK UPWARDS EQUILATERAL ARROWHEADBLACK RI" + + "GHTWARDS EQUILATERAL ARROWHEADBLACK DOWNWARDS EQUILATERAL ARROWHEADDOWNW" + + "ARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDSDOWNWARDS TRIANGLE-HEA" + + "DED ARROW WITH LONG TIP RIGHTWARDSUPWARDS TRIANGLE-HEADED ARROW WITH LON" + + "G TIP LEFTWARDSUPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDSLEF" + + "TWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDSRIGHTWARDS TRIANGLE-HE" + + "ADED ARROW WITH LONG TIP UPWARDSLEFTWARDS TRIANGLE-HEADED ARROW WITH LON" + + "G TIP DOWNWARDSRIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDSB" + + "LACK CURVED DOWNWARDS AND LEFTWARDS ARROWBLACK CURVED DOWNWARDS AND RIGH" + + "TWARDS ARROWBLACK CURVED UPWARDS AND LEFTWARDS ARROWBLACK CURVED UPWARDS" + + " AND RIGHTWARDS ARROWBLACK CURVED LEFTWARDS AND UPWARDS ARROWBLACK CURVE" + + "D RIGHTWARDS AND UPWARDS ARROWBLACK CURVED LEFTWARDS AND DOWNWARDS ARROW" + + "BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROWRIBBON ARROW DOWN LEFTRIBBON " + + "ARROW DOWN RIGHTRIBBON ARROW UP LEFTRIBBON ARROW UP RIGHTRIBBON ARROW LE" + + "FT UPRIBBON ARROW RIGHT UPRIBBON ARROW LEFT DOWNRIBBON ARROW RIGHT DOWNU" + + "PWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BARUP ARROWHEAD IN A RECTANG" + + "LE BOXBALLOT BOX WITH LIGHT XCIRCLED XCIRCLED BOLD XBLACK SQUARE CENTRED" + + "BLACK DIAMOND CENTREDTURNED BLACK PENTAGONHORIZONTAL BLACK OCTAGONBLACK " + + "OCTAGONBLACK MEDIUM UP-POINTING TRIANGLE CENTREDBLACK MEDIUM DOWN-POINTI" + + "NG TRIANGLE CENTREDBLACK MEDIUM LEFT-POINTING TRIANGLE CENTREDBLACK MEDI" + + "UM RIGHT-POINTING TRIANGLE CENTREDTOP HALF BLACK CIRCLEBOTTOM HALF BLACK" + + " CIRCLELIGHT FOUR POINTED BLACK CUSPROTATED LIGHT FOUR POINTED BLACK CUS" + + "PWHITE FOUR POINTED CUSPROTATED WHITE FOUR POINTED CUSPSQUARE POSITION I" + + "NDICATORUNCERTAINTY SIGNLEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHE" + + "ADSUPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADSRIGHTWARDS TWO-HEADE") + ("" + + "D ARROW WITH TRIANGLE ARROWHEADSDOWNWARDS TWO-HEADED ARROW WITH TRIANGLE" + + " ARROWHEADSGLAGOLITIC CAPITAL LETTER AZUGLAGOLITIC CAPITAL LETTER BUKYGL" + + "AGOLITIC CAPITAL LETTER VEDEGLAGOLITIC CAPITAL LETTER GLAGOLIGLAGOLITIC " + + "CAPITAL LETTER DOBROGLAGOLITIC CAPITAL LETTER YESTUGLAGOLITIC CAPITAL LE" + + "TTER ZHIVETEGLAGOLITIC CAPITAL LETTER DZELOGLAGOLITIC CAPITAL LETTER ZEM" + + "LJAGLAGOLITIC CAPITAL LETTER IZHEGLAGOLITIC CAPITAL LETTER INITIAL IZHEG" + + "LAGOLITIC CAPITAL LETTER IGLAGOLITIC CAPITAL LETTER DJERVIGLAGOLITIC CAP" + + "ITAL LETTER KAKOGLAGOLITIC CAPITAL LETTER LJUDIJEGLAGOLITIC CAPITAL LETT" + + "ER MYSLITEGLAGOLITIC CAPITAL LETTER NASHIGLAGOLITIC CAPITAL LETTER ONUGL" + + "AGOLITIC CAPITAL LETTER POKOJIGLAGOLITIC CAPITAL LETTER RITSIGLAGOLITIC " + + "CAPITAL LETTER SLOVOGLAGOLITIC CAPITAL LETTER TVRIDOGLAGOLITIC CAPITAL L" + + "ETTER UKUGLAGOLITIC CAPITAL LETTER FRITUGLAGOLITIC CAPITAL LETTER HERUGL" + + "AGOLITIC CAPITAL LETTER OTUGLAGOLITIC CAPITAL LETTER PEGLAGOLITIC CAPITA" + + "L LETTER SHTAGLAGOLITIC CAPITAL LETTER TSIGLAGOLITIC CAPITAL LETTER CHRI" + + "VIGLAGOLITIC CAPITAL LETTER SHAGLAGOLITIC CAPITAL LETTER YERUGLAGOLITIC " + + "CAPITAL LETTER YERIGLAGOLITIC CAPITAL LETTER YATIGLAGOLITIC CAPITAL LETT" + + "ER SPIDERY HAGLAGOLITIC CAPITAL LETTER YUGLAGOLITIC CAPITAL LETTER SMALL" + + " YUSGLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAILGLAGOLITIC CAPITAL LETT" + + "ER YOGLAGOLITIC CAPITAL LETTER IOTATED SMALL YUSGLAGOLITIC CAPITAL LETTE" + + "R BIG YUSGLAGOLITIC CAPITAL LETTER IOTATED BIG YUSGLAGOLITIC CAPITAL LET" + + "TER FITAGLAGOLITIC CAPITAL LETTER IZHITSAGLAGOLITIC CAPITAL LETTER SHTAP" + + "ICGLAGOLITIC CAPITAL LETTER TROKUTASTI AGLAGOLITIC CAPITAL LETTER LATINA" + + "TE MYSLITEGLAGOLITIC SMALL LETTER AZUGLAGOLITIC SMALL LETTER BUKYGLAGOLI" + + "TIC SMALL LETTER VEDEGLAGOLITIC SMALL LETTER GLAGOLIGLAGOLITIC SMALL LET" + + "TER DOBROGLAGOLITIC SMALL LETTER YESTUGLAGOLITIC SMALL LETTER ZHIVETEGLA" + + "GOLITIC SMALL LETTER DZELOGLAGOLITIC SMALL LETTER ZEMLJAGLAGOLITIC SMALL" + + " LETTER IZHEGLAGOLITIC SMALL LETTER INITIAL IZHEGLAGOLITIC SMALL LETTER " + + "IGLAGOLITIC SMALL LETTER DJERVIGLAGOLITIC SMALL LETTER KAKOGLAGOLITIC SM" + + "ALL LETTER LJUDIJEGLAGOLITIC SMALL LETTER MYSLITEGLAGOLITIC SMALL LETTER" + + " NASHIGLAGOLITIC SMALL LETTER ONUGLAGOLITIC SMALL LETTER POKOJIGLAGOLITI" + + "C SMALL LETTER RITSIGLAGOLITIC SMALL LETTER SLOVOGLAGOLITIC SMALL LETTER" + + " TVRIDOGLAGOLITIC SMALL LETTER UKUGLAGOLITIC SMALL LETTER FRITUGLAGOLITI" + + "C SMALL LETTER HERUGLAGOLITIC SMALL LETTER OTUGLAGOLITIC SMALL LETTER PE" + + "GLAGOLITIC SMALL LETTER SHTAGLAGOLITIC SMALL LETTER TSIGLAGOLITIC SMALL " + + "LETTER CHRIVIGLAGOLITIC SMALL LETTER SHAGLAGOLITIC SMALL LETTER YERUGLAG" + + "OLITIC SMALL LETTER YERIGLAGOLITIC SMALL LETTER YATIGLAGOLITIC SMALL LET" + + "TER SPIDERY HAGLAGOLITIC SMALL LETTER YUGLAGOLITIC SMALL LETTER SMALL YU" + + "SGLAGOLITIC SMALL LETTER SMALL YUS WITH TAILGLAGOLITIC SMALL LETTER YOGL" + + "AGOLITIC SMALL LETTER IOTATED SMALL YUSGLAGOLITIC SMALL LETTER BIG YUSGL" + + "AGOLITIC SMALL LETTER IOTATED BIG YUSGLAGOLITIC SMALL LETTER FITAGLAGOLI" + + "TIC SMALL LETTER IZHITSAGLAGOLITIC SMALL LETTER SHTAPICGLAGOLITIC SMALL " + + "LETTER TROKUTASTI AGLAGOLITIC SMALL LETTER LATINATE MYSLITELATIN CAPITAL" + + " LETTER L WITH DOUBLE BARLATIN SMALL LETTER L WITH DOUBLE BARLATIN CAPIT" + + "AL LETTER L WITH MIDDLE TILDELATIN CAPITAL LETTER P WITH STROKELATIN CAP" + + "ITAL LETTER R WITH TAILLATIN SMALL LETTER A WITH STROKELATIN SMALL LETTE" + + "R T WITH DIAGONAL STROKELATIN CAPITAL LETTER H WITH DESCENDERLATIN SMALL" + + " LETTER H WITH DESCENDERLATIN CAPITAL LETTER K WITH DESCENDERLATIN SMALL" + + " LETTER K WITH DESCENDERLATIN CAPITAL LETTER Z WITH DESCENDERLATIN SMALL" + + " LETTER Z WITH DESCENDERLATIN CAPITAL LETTER ALPHALATIN CAPITAL LETTER M" + + " WITH HOOKLATIN CAPITAL LETTER TURNED ALATIN CAPITAL LETTER TURNED ALPHA" + + "LATIN SMALL LETTER V WITH RIGHT HOOKLATIN CAPITAL LETTER W WITH HOOKLATI" + + "N SMALL LETTER W WITH HOOKLATIN SMALL LETTER V WITH CURLLATIN CAPITAL LE" + + "TTER HALF HLATIN SMALL LETTER HALF HLATIN SMALL LETTER TAILLESS PHILATIN" + + " SMALL LETTER E WITH NOTCHLATIN SMALL LETTER TURNED R WITH TAILLATIN SMA" + + "LL LETTER O WITH LOW RING INSIDELATIN LETTER SMALL CAPITAL TURNED ELATIN" + + " SUBSCRIPT SMALL LETTER JMODIFIER LETTER CAPITAL VLATIN CAPITAL LETTER S" + + " WITH SWASH TAILLATIN CAPITAL LETTER Z WITH SWASH TAILCOPTIC CAPITAL LET" + + "TER ALFACOPTIC SMALL LETTER ALFACOPTIC CAPITAL LETTER VIDACOPTIC SMALL L" + + "ETTER VIDACOPTIC CAPITAL LETTER GAMMACOPTIC SMALL LETTER GAMMACOPTIC CAP" + + "ITAL LETTER DALDACOPTIC SMALL LETTER DALDACOPTIC CAPITAL LETTER EIECOPTI" + + "C SMALL LETTER EIECOPTIC CAPITAL LETTER SOUCOPTIC SMALL LETTER SOUCOPTIC" + + " CAPITAL LETTER ZATACOPTIC SMALL LETTER ZATACOPTIC CAPITAL LETTER HATECO" + + "PTIC SMALL LETTER HATECOPTIC CAPITAL LETTER THETHECOPTIC SMALL LETTER TH" + + "ETHECOPTIC CAPITAL LETTER IAUDACOPTIC SMALL LETTER IAUDACOPTIC CAPITAL L") + ("" + + "ETTER KAPACOPTIC SMALL LETTER KAPACOPTIC CAPITAL LETTER LAULACOPTIC SMAL" + + "L LETTER LAULACOPTIC CAPITAL LETTER MICOPTIC SMALL LETTER MICOPTIC CAPIT" + + "AL LETTER NICOPTIC SMALL LETTER NICOPTIC CAPITAL LETTER KSICOPTIC SMALL " + + "LETTER KSICOPTIC CAPITAL LETTER OCOPTIC SMALL LETTER OCOPTIC CAPITAL LET" + + "TER PICOPTIC SMALL LETTER PICOPTIC CAPITAL LETTER ROCOPTIC SMALL LETTER " + + "ROCOPTIC CAPITAL LETTER SIMACOPTIC SMALL LETTER SIMACOPTIC CAPITAL LETTE" + + "R TAUCOPTIC SMALL LETTER TAUCOPTIC CAPITAL LETTER UACOPTIC SMALL LETTER " + + "UACOPTIC CAPITAL LETTER FICOPTIC SMALL LETTER FICOPTIC CAPITAL LETTER KH" + + "ICOPTIC SMALL LETTER KHICOPTIC CAPITAL LETTER PSICOPTIC SMALL LETTER PSI" + + "COPTIC CAPITAL LETTER OOUCOPTIC SMALL LETTER OOUCOPTIC CAPITAL LETTER DI" + + "ALECT-P ALEFCOPTIC SMALL LETTER DIALECT-P ALEFCOPTIC CAPITAL LETTER OLD " + + "COPTIC AINCOPTIC SMALL LETTER OLD COPTIC AINCOPTIC CAPITAL LETTER CRYPTO" + + "GRAMMIC EIECOPTIC SMALL LETTER CRYPTOGRAMMIC EIECOPTIC CAPITAL LETTER DI" + + "ALECT-P KAPACOPTIC SMALL LETTER DIALECT-P KAPACOPTIC CAPITAL LETTER DIAL" + + "ECT-P NICOPTIC SMALL LETTER DIALECT-P NICOPTIC CAPITAL LETTER CRYPTOGRAM" + + "MIC NICOPTIC SMALL LETTER CRYPTOGRAMMIC NICOPTIC CAPITAL LETTER OLD COPT" + + "IC OOUCOPTIC SMALL LETTER OLD COPTIC OOUCOPTIC CAPITAL LETTER SAMPICOPTI" + + "C SMALL LETTER SAMPICOPTIC CAPITAL LETTER CROSSED SHEICOPTIC SMALL LETTE" + + "R CROSSED SHEICOPTIC CAPITAL LETTER OLD COPTIC SHEICOPTIC SMALL LETTER O" + + "LD COPTIC SHEICOPTIC CAPITAL LETTER OLD COPTIC ESHCOPTIC SMALL LETTER OL" + + "D COPTIC ESHCOPTIC CAPITAL LETTER AKHMIMIC KHEICOPTIC SMALL LETTER AKHMI" + + "MIC KHEICOPTIC CAPITAL LETTER DIALECT-P HORICOPTIC SMALL LETTER DIALECT-" + + "P HORICOPTIC CAPITAL LETTER OLD COPTIC HORICOPTIC SMALL LETTER OLD COPTI" + + "C HORICOPTIC CAPITAL LETTER OLD COPTIC HACOPTIC SMALL LETTER OLD COPTIC " + + "HACOPTIC CAPITAL LETTER L-SHAPED HACOPTIC SMALL LETTER L-SHAPED HACOPTIC" + + " CAPITAL LETTER OLD COPTIC HEICOPTIC SMALL LETTER OLD COPTIC HEICOPTIC C" + + "APITAL LETTER OLD COPTIC HATCOPTIC SMALL LETTER OLD COPTIC HATCOPTIC CAP" + + "ITAL LETTER OLD COPTIC GANGIACOPTIC SMALL LETTER OLD COPTIC GANGIACOPTIC" + + " CAPITAL LETTER OLD COPTIC DJACOPTIC SMALL LETTER OLD COPTIC DJACOPTIC C" + + "APITAL LETTER OLD COPTIC SHIMACOPTIC SMALL LETTER OLD COPTIC SHIMACOPTIC" + + " CAPITAL LETTER OLD NUBIAN SHIMACOPTIC SMALL LETTER OLD NUBIAN SHIMACOPT" + + "IC CAPITAL LETTER OLD NUBIAN NGICOPTIC SMALL LETTER OLD NUBIAN NGICOPTIC" + + " CAPITAL LETTER OLD NUBIAN NYICOPTIC SMALL LETTER OLD NUBIAN NYICOPTIC C" + + "APITAL LETTER OLD NUBIAN WAUCOPTIC SMALL LETTER OLD NUBIAN WAUCOPTIC SYM" + + "BOL KAICOPTIC SYMBOL MI ROCOPTIC SYMBOL PI ROCOPTIC SYMBOL STAUROSCOPTIC" + + " SYMBOL TAU ROCOPTIC SYMBOL KHI ROCOPTIC SYMBOL SHIMA SIMACOPTIC CAPITAL" + + " LETTER CRYPTOGRAMMIC SHEICOPTIC SMALL LETTER CRYPTOGRAMMIC SHEICOPTIC C" + + "APITAL LETTER CRYPTOGRAMMIC GANGIACOPTIC SMALL LETTER CRYPTOGRAMMIC GANG" + + "IACOPTIC COMBINING NI ABOVECOPTIC COMBINING SPIRITUS ASPERCOPTIC COMBINI" + + "NG SPIRITUS LENISCOPTIC CAPITAL LETTER BOHAIRIC KHEICOPTIC SMALL LETTER " + + "BOHAIRIC KHEICOPTIC OLD NUBIAN FULL STOPCOPTIC OLD NUBIAN DIRECT QUESTIO" + + "N MARKCOPTIC OLD NUBIAN INDIRECT QUESTION MARKCOPTIC OLD NUBIAN VERSE DI" + + "VIDERCOPTIC FRACTION ONE HALFCOPTIC FULL STOPCOPTIC MORPHOLOGICAL DIVIDE" + + "RGEORGIAN SMALL LETTER ANGEORGIAN SMALL LETTER BANGEORGIAN SMALL LETTER " + + "GANGEORGIAN SMALL LETTER DONGEORGIAN SMALL LETTER ENGEORGIAN SMALL LETTE" + + "R VINGEORGIAN SMALL LETTER ZENGEORGIAN SMALL LETTER TANGEORGIAN SMALL LE" + + "TTER INGEORGIAN SMALL LETTER KANGEORGIAN SMALL LETTER LASGEORGIAN SMALL " + + "LETTER MANGEORGIAN SMALL LETTER NARGEORGIAN SMALL LETTER ONGEORGIAN SMAL" + + "L LETTER PARGEORGIAN SMALL LETTER ZHARGEORGIAN SMALL LETTER RAEGEORGIAN " + + "SMALL LETTER SANGEORGIAN SMALL LETTER TARGEORGIAN SMALL LETTER UNGEORGIA" + + "N SMALL LETTER PHARGEORGIAN SMALL LETTER KHARGEORGIAN SMALL LETTER GHANG" + + "EORGIAN SMALL LETTER QARGEORGIAN SMALL LETTER SHINGEORGIAN SMALL LETTER " + + "CHINGEORGIAN SMALL LETTER CANGEORGIAN SMALL LETTER JILGEORGIAN SMALL LET" + + "TER CILGEORGIAN SMALL LETTER CHARGEORGIAN SMALL LETTER XANGEORGIAN SMALL" + + " LETTER JHANGEORGIAN SMALL LETTER HAEGEORGIAN SMALL LETTER HEGEORGIAN SM" + + "ALL LETTER HIEGEORGIAN SMALL LETTER WEGEORGIAN SMALL LETTER HARGEORGIAN " + + "SMALL LETTER HOEGEORGIAN SMALL LETTER YNGEORGIAN SMALL LETTER AENTIFINAG" + + "H LETTER YATIFINAGH LETTER YABTIFINAGH LETTER YABHTIFINAGH LETTER YAGTIF" + + "INAGH LETTER YAGHHTIFINAGH LETTER BERBER ACADEMY YAJTIFINAGH LETTER YAJT" + + "IFINAGH LETTER YADTIFINAGH LETTER YADHTIFINAGH LETTER YADDTIFINAGH LETTE" + + "R YADDHTIFINAGH LETTER YEYTIFINAGH LETTER YAFTIFINAGH LETTER YAKTIFINAGH" + + " LETTER TUAREG YAKTIFINAGH LETTER YAKHHTIFINAGH LETTER YAHTIFINAGH LETTE" + + "R BERBER ACADEMY YAHTIFINAGH LETTER TUAREG YAHTIFINAGH LETTER YAHHTIFINA" + + "GH LETTER YAATIFINAGH LETTER YAKHTIFINAGH LETTER TUAREG YAKHTIFINAGH LET") + ("" + + "TER YAQTIFINAGH LETTER TUAREG YAQTIFINAGH LETTER YITIFINAGH LETTER YAZHT" + + "IFINAGH LETTER AHAGGAR YAZHTIFINAGH LETTER TUAREG YAZHTIFINAGH LETTER YA" + + "LTIFINAGH LETTER YAMTIFINAGH LETTER YANTIFINAGH LETTER TUAREG YAGNTIFINA" + + "GH LETTER TUAREG YANGTIFINAGH LETTER YAPTIFINAGH LETTER YUTIFINAGH LETTE" + + "R YARTIFINAGH LETTER YARRTIFINAGH LETTER YAGHTIFINAGH LETTER TUAREG YAGH" + + "TIFINAGH LETTER AYER YAGHTIFINAGH LETTER YASTIFINAGH LETTER YASSTIFINAGH" + + " LETTER YASHTIFINAGH LETTER YATTIFINAGH LETTER YATHTIFINAGH LETTER YACHT" + + "IFINAGH LETTER YATTTIFINAGH LETTER YAVTIFINAGH LETTER YAWTIFINAGH LETTER" + + " YAYTIFINAGH LETTER YAZTIFINAGH LETTER TAWELLEMET YAZTIFINAGH LETTER YAZ" + + "ZTIFINAGH LETTER YETIFINAGH LETTER YOTIFINAGH MODIFIER LETTER LABIALIZAT" + + "ION MARKTIFINAGH SEPARATOR MARKTIFINAGH CONSONANT JOINERETHIOPIC SYLLABL" + + "E LOAETHIOPIC SYLLABLE MOAETHIOPIC SYLLABLE ROAETHIOPIC SYLLABLE SOAETHI" + + "OPIC SYLLABLE SHOAETHIOPIC SYLLABLE BOAETHIOPIC SYLLABLE TOAETHIOPIC SYL" + + "LABLE COAETHIOPIC SYLLABLE NOAETHIOPIC SYLLABLE NYOAETHIOPIC SYLLABLE GL" + + "OTTAL OAETHIOPIC SYLLABLE ZOAETHIOPIC SYLLABLE DOAETHIOPIC SYLLABLE DDOA" + + "ETHIOPIC SYLLABLE JOAETHIOPIC SYLLABLE THOAETHIOPIC SYLLABLE CHOAETHIOPI" + + "C SYLLABLE PHOAETHIOPIC SYLLABLE POAETHIOPIC SYLLABLE GGWAETHIOPIC SYLLA" + + "BLE GGWIETHIOPIC SYLLABLE GGWEEETHIOPIC SYLLABLE GGWEETHIOPIC SYLLABLE S" + + "SAETHIOPIC SYLLABLE SSUETHIOPIC SYLLABLE SSIETHIOPIC SYLLABLE SSAAETHIOP" + + "IC SYLLABLE SSEEETHIOPIC SYLLABLE SSEETHIOPIC SYLLABLE SSOETHIOPIC SYLLA" + + "BLE CCAETHIOPIC SYLLABLE CCUETHIOPIC SYLLABLE CCIETHIOPIC SYLLABLE CCAAE" + + "THIOPIC SYLLABLE CCEEETHIOPIC SYLLABLE CCEETHIOPIC SYLLABLE CCOETHIOPIC " + + "SYLLABLE ZZAETHIOPIC SYLLABLE ZZUETHIOPIC SYLLABLE ZZIETHIOPIC SYLLABLE " + + "ZZAAETHIOPIC SYLLABLE ZZEEETHIOPIC SYLLABLE ZZEETHIOPIC SYLLABLE ZZOETHI" + + "OPIC SYLLABLE CCHAETHIOPIC SYLLABLE CCHUETHIOPIC SYLLABLE CCHIETHIOPIC S" + + "YLLABLE CCHAAETHIOPIC SYLLABLE CCHEEETHIOPIC SYLLABLE CCHEETHIOPIC SYLLA" + + "BLE CCHOETHIOPIC SYLLABLE QYAETHIOPIC SYLLABLE QYUETHIOPIC SYLLABLE QYIE" + + "THIOPIC SYLLABLE QYAAETHIOPIC SYLLABLE QYEEETHIOPIC SYLLABLE QYEETHIOPIC" + + " SYLLABLE QYOETHIOPIC SYLLABLE KYAETHIOPIC SYLLABLE KYUETHIOPIC SYLLABLE" + + " KYIETHIOPIC SYLLABLE KYAAETHIOPIC SYLLABLE KYEEETHIOPIC SYLLABLE KYEETH" + + "IOPIC SYLLABLE KYOETHIOPIC SYLLABLE XYAETHIOPIC SYLLABLE XYUETHIOPIC SYL" + + "LABLE XYIETHIOPIC SYLLABLE XYAAETHIOPIC SYLLABLE XYEEETHIOPIC SYLLABLE X" + + "YEETHIOPIC SYLLABLE XYOETHIOPIC SYLLABLE GYAETHIOPIC SYLLABLE GYUETHIOPI" + + "C SYLLABLE GYIETHIOPIC SYLLABLE GYAAETHIOPIC SYLLABLE GYEEETHIOPIC SYLLA" + + "BLE GYEETHIOPIC SYLLABLE GYOCOMBINING CYRILLIC LETTER BECOMBINING CYRILL" + + "IC LETTER VECOMBINING CYRILLIC LETTER GHECOMBINING CYRILLIC LETTER DECOM" + + "BINING CYRILLIC LETTER ZHECOMBINING CYRILLIC LETTER ZECOMBINING CYRILLIC" + + " LETTER KACOMBINING CYRILLIC LETTER ELCOMBINING CYRILLIC LETTER EMCOMBIN" + + "ING CYRILLIC LETTER ENCOMBINING CYRILLIC LETTER OCOMBINING CYRILLIC LETT" + + "ER PECOMBINING CYRILLIC LETTER ERCOMBINING CYRILLIC LETTER ESCOMBINING C" + + "YRILLIC LETTER TECOMBINING CYRILLIC LETTER HACOMBINING CYRILLIC LETTER T" + + "SECOMBINING CYRILLIC LETTER CHECOMBINING CYRILLIC LETTER SHACOMBINING CY" + + "RILLIC LETTER SHCHACOMBINING CYRILLIC LETTER FITACOMBINING CYRILLIC LETT" + + "ER ES-TECOMBINING CYRILLIC LETTER ACOMBINING CYRILLIC LETTER IECOMBINING" + + " CYRILLIC LETTER DJERVCOMBINING CYRILLIC LETTER MONOGRAPH UKCOMBINING CY" + + "RILLIC LETTER YATCOMBINING CYRILLIC LETTER YUCOMBINING CYRILLIC LETTER I" + + "OTIFIED ACOMBINING CYRILLIC LETTER LITTLE YUSCOMBINING CYRILLIC LETTER B" + + "IG YUSCOMBINING CYRILLIC LETTER IOTIFIED BIG YUSRIGHT ANGLE SUBSTITUTION" + + " MARKERRIGHT ANGLE DOTTED SUBSTITUTION MARKERLEFT SUBSTITUTION BRACKETRI" + + "GHT SUBSTITUTION BRACKETLEFT DOTTED SUBSTITUTION BRACKETRIGHT DOTTED SUB" + + "STITUTION BRACKETRAISED INTERPOLATION MARKERRAISED DOTTED INTERPOLATION " + + "MARKERDOTTED TRANSPOSITION MARKERLEFT TRANSPOSITION BRACKETRIGHT TRANSPO" + + "SITION BRACKETRAISED SQUARELEFT RAISED OMISSION BRACKETRIGHT RAISED OMIS" + + "SION BRACKETEDITORIAL CORONISPARAGRAPHOSFORKED PARAGRAPHOSREVERSED FORKE" + + "D PARAGRAPHOSHYPODIASTOLEDOTTED OBELOSDOWNWARDS ANCORAUPWARDS ANCORADOTT" + + "ED RIGHT-POINTING ANGLEDOUBLE OBLIQUE HYPHENINVERTED INTERROBANGPALM BRA" + + "NCHHYPHEN WITH DIAERESISTILDE WITH RING ABOVELEFT LOW PARAPHRASE BRACKET" + + "RIGHT LOW PARAPHRASE BRACKETTILDE WITH DOT ABOVETILDE WITH DOT BELOWLEFT" + + " VERTICAL BAR WITH QUILLRIGHT VERTICAL BAR WITH QUILLTOP LEFT HALF BRACK" + + "ETTOP RIGHT HALF BRACKETBOTTOM LEFT HALF BRACKETBOTTOM RIGHT HALF BRACKE" + + "TLEFT SIDEWAYS U BRACKETRIGHT SIDEWAYS U BRACKETLEFT DOUBLE PARENTHESISR" + + "IGHT DOUBLE PARENTHESISTWO DOTS OVER ONE DOT PUNCTUATIONONE DOT OVER TWO" + + " DOTS PUNCTUATIONSQUARED FOUR DOT PUNCTUATIONFIVE DOT MARKREVERSED QUEST" + + "ION MARKVERTICAL TILDERING POINTWORD SEPARATOR MIDDLE DOTTURNED COMMARAI") + ("" + + "SED DOTRAISED COMMATURNED SEMICOLONDAGGER WITH LEFT GUARDDAGGER WITH RIG" + + "HT GUARDTURNED DAGGERTOP HALF SECTION SIGNTWO-EM DASHTHREE-EM DASHSTENOG" + + "RAPHIC FULL STOPVERTICAL SIX DOTSWIGGLY VERTICAL LINECAPITULUMDOUBLE HYP" + + "HENREVERSED COMMADOUBLE LOW-REVERSED-9 QUOTATION MARKDASH WITH LEFT UPTU" + + "RNDOUBLE SUSPENSION MARKCJK RADICAL REPEATCJK RADICAL CLIFFCJK RADICAL S" + + "ECOND ONECJK RADICAL SECOND TWOCJK RADICAL SECOND THREECJK RADICAL PERSO" + + "NCJK RADICAL BOXCJK RADICAL TABLECJK RADICAL KNIFE ONECJK RADICAL KNIFE " + + "TWOCJK RADICAL DIVINATIONCJK RADICAL SEALCJK RADICAL SMALL ONECJK RADICA" + + "L SMALL TWOCJK RADICAL LAME ONECJK RADICAL LAME TWOCJK RADICAL LAME THRE" + + "ECJK RADICAL LAME FOURCJK RADICAL SNAKECJK RADICAL THREADCJK RADICAL SNO" + + "UT ONECJK RADICAL SNOUT TWOCJK RADICAL HEART ONECJK RADICAL HEART TWOCJK" + + " RADICAL HANDCJK RADICAL RAPCJK RADICAL CHOKECJK RADICAL SUNCJK RADICAL " + + "MOONCJK RADICAL DEATHCJK RADICAL MOTHERCJK RADICAL CIVILIANCJK RADICAL W" + + "ATER ONECJK RADICAL WATER TWOCJK RADICAL FIRECJK RADICAL PAW ONECJK RADI" + + "CAL PAW TWOCJK RADICAL SIMPLIFIED HALF TREE TRUNKCJK RADICAL COWCJK RADI" + + "CAL DOGCJK RADICAL JADECJK RADICAL BOLT OF CLOTHCJK RADICAL EYECJK RADIC" + + "AL SPIRIT ONECJK RADICAL SPIRIT TWOCJK RADICAL BAMBOOCJK RADICAL SILKCJK" + + " RADICAL C-SIMPLIFIED SILKCJK RADICAL NET ONECJK RADICAL NET TWOCJK RADI" + + "CAL NET THREECJK RADICAL NET FOURCJK RADICAL MESHCJK RADICAL SHEEPCJK RA" + + "DICAL RAMCJK RADICAL EWECJK RADICAL OLDCJK RADICAL BRUSH ONECJK RADICAL " + + "BRUSH TWOCJK RADICAL MEATCJK RADICAL MORTARCJK RADICAL GRASS ONECJK RADI" + + "CAL GRASS TWOCJK RADICAL GRASS THREECJK RADICAL TIGERCJK RADICAL CLOTHES" + + "CJK RADICAL WEST ONECJK RADICAL WEST TWOCJK RADICAL C-SIMPLIFIED SEECJK " + + "RADICAL SIMPLIFIED HORNCJK RADICAL HORNCJK RADICAL C-SIMPLIFIED SPEECHCJ" + + "K RADICAL C-SIMPLIFIED SHELLCJK RADICAL FOOTCJK RADICAL C-SIMPLIFIED CAR" + + "TCJK RADICAL SIMPLIFIED WALKCJK RADICAL WALK ONECJK RADICAL WALK TWOCJK " + + "RADICAL CITYCJK RADICAL C-SIMPLIFIED GOLDCJK RADICAL LONG ONECJK RADICAL" + + " LONG TWOCJK RADICAL C-SIMPLIFIED LONGCJK RADICAL C-SIMPLIFIED GATECJK R" + + "ADICAL MOUND ONECJK RADICAL MOUND TWOCJK RADICAL RAINCJK RADICAL BLUECJK" + + " RADICAL C-SIMPLIFIED TANNED LEATHERCJK RADICAL C-SIMPLIFIED LEAFCJK RAD" + + "ICAL C-SIMPLIFIED WINDCJK RADICAL C-SIMPLIFIED FLYCJK RADICAL EAT ONECJK" + + " RADICAL EAT TWOCJK RADICAL EAT THREECJK RADICAL C-SIMPLIFIED EATCJK RAD" + + "ICAL HEADCJK RADICAL C-SIMPLIFIED HORSECJK RADICAL BONECJK RADICAL GHOST" + + "CJK RADICAL C-SIMPLIFIED FISHCJK RADICAL C-SIMPLIFIED BIRDCJK RADICAL C-" + + "SIMPLIFIED SALTCJK RADICAL SIMPLIFIED WHEATCJK RADICAL SIMPLIFIED YELLOW" + + "CJK RADICAL C-SIMPLIFIED FROGCJK RADICAL J-SIMPLIFIED EVENCJK RADICAL C-" + + "SIMPLIFIED EVENCJK RADICAL J-SIMPLIFIED TOOTHCJK RADICAL C-SIMPLIFIED TO" + + "OTHCJK RADICAL J-SIMPLIFIED DRAGONCJK RADICAL C-SIMPLIFIED DRAGONCJK RAD" + + "ICAL TURTLECJK RADICAL J-SIMPLIFIED TURTLECJK RADICAL C-SIMPLIFIED TURTL" + + "EKANGXI RADICAL ONEKANGXI RADICAL LINEKANGXI RADICAL DOTKANGXI RADICAL S" + + "LASHKANGXI RADICAL SECONDKANGXI RADICAL HOOKKANGXI RADICAL TWOKANGXI RAD" + + "ICAL LIDKANGXI RADICAL MANKANGXI RADICAL LEGSKANGXI RADICAL ENTERKANGXI " + + "RADICAL EIGHTKANGXI RADICAL DOWN BOXKANGXI RADICAL COVERKANGXI RADICAL I" + + "CEKANGXI RADICAL TABLEKANGXI RADICAL OPEN BOXKANGXI RADICAL KNIFEKANGXI " + + "RADICAL POWERKANGXI RADICAL WRAPKANGXI RADICAL SPOONKANGXI RADICAL RIGHT" + + " OPEN BOXKANGXI RADICAL HIDING ENCLOSUREKANGXI RADICAL TENKANGXI RADICAL" + + " DIVINATIONKANGXI RADICAL SEALKANGXI RADICAL CLIFFKANGXI RADICAL PRIVATE" + + "KANGXI RADICAL AGAINKANGXI RADICAL MOUTHKANGXI RADICAL ENCLOSUREKANGXI R" + + "ADICAL EARTHKANGXI RADICAL SCHOLARKANGXI RADICAL GOKANGXI RADICAL GO SLO" + + "WLYKANGXI RADICAL EVENINGKANGXI RADICAL BIGKANGXI RADICAL WOMANKANGXI RA" + + "DICAL CHILDKANGXI RADICAL ROOFKANGXI RADICAL INCHKANGXI RADICAL SMALLKAN" + + "GXI RADICAL LAMEKANGXI RADICAL CORPSEKANGXI RADICAL SPROUTKANGXI RADICAL" + + " MOUNTAINKANGXI RADICAL RIVERKANGXI RADICAL WORKKANGXI RADICAL ONESELFKA" + + "NGXI RADICAL TURBANKANGXI RADICAL DRYKANGXI RADICAL SHORT THREADKANGXI R" + + "ADICAL DOTTED CLIFFKANGXI RADICAL LONG STRIDEKANGXI RADICAL TWO HANDSKAN" + + "GXI RADICAL SHOOTKANGXI RADICAL BOWKANGXI RADICAL SNOUTKANGXI RADICAL BR" + + "ISTLEKANGXI RADICAL STEPKANGXI RADICAL HEARTKANGXI RADICAL HALBERDKANGXI" + + " RADICAL DOORKANGXI RADICAL HANDKANGXI RADICAL BRANCHKANGXI RADICAL RAPK" + + "ANGXI RADICAL SCRIPTKANGXI RADICAL DIPPERKANGXI RADICAL AXEKANGXI RADICA" + + "L SQUAREKANGXI RADICAL NOTKANGXI RADICAL SUNKANGXI RADICAL SAYKANGXI RAD" + + "ICAL MOONKANGXI RADICAL TREEKANGXI RADICAL LACKKANGXI RADICAL STOPKANGXI" + + " RADICAL DEATHKANGXI RADICAL WEAPONKANGXI RADICAL DO NOTKANGXI RADICAL C" + + "OMPAREKANGXI RADICAL FURKANGXI RADICAL CLANKANGXI RADICAL STEAMKANGXI RA" + + "DICAL WATERKANGXI RADICAL FIREKANGXI RADICAL CLAWKANGXI RADICAL FATHERKA") + ("" + + "NGXI RADICAL DOUBLE XKANGXI RADICAL HALF TREE TRUNKKANGXI RADICAL SLICEK" + + "ANGXI RADICAL FANGKANGXI RADICAL COWKANGXI RADICAL DOGKANGXI RADICAL PRO" + + "FOUNDKANGXI RADICAL JADEKANGXI RADICAL MELONKANGXI RADICAL TILEKANGXI RA" + + "DICAL SWEETKANGXI RADICAL LIFEKANGXI RADICAL USEKANGXI RADICAL FIELDKANG" + + "XI RADICAL BOLT OF CLOTHKANGXI RADICAL SICKNESSKANGXI RADICAL DOTTED TEN" + + "TKANGXI RADICAL WHITEKANGXI RADICAL SKINKANGXI RADICAL DISHKANGXI RADICA" + + "L EYEKANGXI RADICAL SPEARKANGXI RADICAL ARROWKANGXI RADICAL STONEKANGXI " + + "RADICAL SPIRITKANGXI RADICAL TRACKKANGXI RADICAL GRAINKANGXI RADICAL CAV" + + "EKANGXI RADICAL STANDKANGXI RADICAL BAMBOOKANGXI RADICAL RICEKANGXI RADI" + + "CAL SILKKANGXI RADICAL JARKANGXI RADICAL NETKANGXI RADICAL SHEEPKANGXI R" + + "ADICAL FEATHERKANGXI RADICAL OLDKANGXI RADICAL ANDKANGXI RADICAL PLOWKAN" + + "GXI RADICAL EARKANGXI RADICAL BRUSHKANGXI RADICAL MEATKANGXI RADICAL MIN" + + "ISTERKANGXI RADICAL SELFKANGXI RADICAL ARRIVEKANGXI RADICAL MORTARKANGXI" + + " RADICAL TONGUEKANGXI RADICAL OPPOSEKANGXI RADICAL BOATKANGXI RADICAL ST" + + "OPPINGKANGXI RADICAL COLORKANGXI RADICAL GRASSKANGXI RADICAL TIGERKANGXI" + + " RADICAL INSECTKANGXI RADICAL BLOODKANGXI RADICAL WALK ENCLOSUREKANGXI R" + + "ADICAL CLOTHESKANGXI RADICAL WESTKANGXI RADICAL SEEKANGXI RADICAL HORNKA" + + "NGXI RADICAL SPEECHKANGXI RADICAL VALLEYKANGXI RADICAL BEANKANGXI RADICA" + + "L PIGKANGXI RADICAL BADGERKANGXI RADICAL SHELLKANGXI RADICAL REDKANGXI R" + + "ADICAL RUNKANGXI RADICAL FOOTKANGXI RADICAL BODYKANGXI RADICAL CARTKANGX" + + "I RADICAL BITTERKANGXI RADICAL MORNINGKANGXI RADICAL WALKKANGXI RADICAL " + + "CITYKANGXI RADICAL WINEKANGXI RADICAL DISTINGUISHKANGXI RADICAL VILLAGEK" + + "ANGXI RADICAL GOLDKANGXI RADICAL LONGKANGXI RADICAL GATEKANGXI RADICAL M" + + "OUNDKANGXI RADICAL SLAVEKANGXI RADICAL SHORT TAILED BIRDKANGXI RADICAL R" + + "AINKANGXI RADICAL BLUEKANGXI RADICAL WRONGKANGXI RADICAL FACEKANGXI RADI" + + "CAL LEATHERKANGXI RADICAL TANNED LEATHERKANGXI RADICAL LEEKKANGXI RADICA" + + "L SOUNDKANGXI RADICAL LEAFKANGXI RADICAL WINDKANGXI RADICAL FLYKANGXI RA" + + "DICAL EATKANGXI RADICAL HEADKANGXI RADICAL FRAGRANTKANGXI RADICAL HORSEK" + + "ANGXI RADICAL BONEKANGXI RADICAL TALLKANGXI RADICAL HAIRKANGXI RADICAL F" + + "IGHTKANGXI RADICAL SACRIFICIAL WINEKANGXI RADICAL CAULDRONKANGXI RADICAL" + + " GHOSTKANGXI RADICAL FISHKANGXI RADICAL BIRDKANGXI RADICAL SALTKANGXI RA" + + "DICAL DEERKANGXI RADICAL WHEATKANGXI RADICAL HEMPKANGXI RADICAL YELLOWKA" + + "NGXI RADICAL MILLETKANGXI RADICAL BLACKKANGXI RADICAL EMBROIDERYKANGXI R" + + "ADICAL FROGKANGXI RADICAL TRIPODKANGXI RADICAL DRUMKANGXI RADICAL RATKAN" + + "GXI RADICAL NOSEKANGXI RADICAL EVENKANGXI RADICAL TOOTHKANGXI RADICAL DR" + + "AGONKANGXI RADICAL TURTLEKANGXI RADICAL FLUTEIDEOGRAPHIC DESCRIPTION CHA" + + "RACTER LEFT TO RIGHTIDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOWIDEO" + + "GRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHTIDEOGRAPHIC DESCRI" + + "PTION CHARACTER ABOVE TO MIDDLE AND BELOWIDEOGRAPHIC DESCRIPTION CHARACT" + + "ER FULL SURROUNDIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVEIDE" + + "OGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOWIDEOGRAPHIC DESCRIPTIO" + + "N CHARACTER SURROUND FROM LEFTIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND" + + " FROM UPPER LEFTIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RI" + + "GHTIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFTIDEOGRAPHIC" + + " DESCRIPTION CHARACTER OVERLAIDIDEOGRAPHIC SPACEIDEOGRAPHIC COMMAIDEOGRA" + + "PHIC FULL STOPDITTO MARKJAPANESE INDUSTRIAL STANDARD SYMBOLIDEOGRAPHIC I" + + "TERATION MARKIDEOGRAPHIC CLOSING MARKIDEOGRAPHIC NUMBER ZEROLEFT ANGLE B" + + "RACKETRIGHT ANGLE BRACKETLEFT DOUBLE ANGLE BRACKETRIGHT DOUBLE ANGLE BRA" + + "CKETLEFT CORNER BRACKETRIGHT CORNER BRACKETLEFT WHITE CORNER BRACKETRIGH" + + "T WHITE CORNER BRACKETLEFT BLACK LENTICULAR BRACKETRIGHT BLACK LENTICULA" + + "R BRACKETPOSTAL MARKGETA MARKLEFT TORTOISE SHELL BRACKETRIGHT TORTOISE S" + + "HELL BRACKETLEFT WHITE LENTICULAR BRACKETRIGHT WHITE LENTICULAR BRACKETL" + + "EFT WHITE TORTOISE SHELL BRACKETRIGHT WHITE TORTOISE SHELL BRACKETLEFT W" + + "HITE SQUARE BRACKETRIGHT WHITE SQUARE BRACKETWAVE DASHREVERSED DOUBLE PR" + + "IME QUOTATION MARKDOUBLE PRIME QUOTATION MARKLOW DOUBLE PRIME QUOTATION " + + "MARKPOSTAL MARK FACEHANGZHOU NUMERAL ONEHANGZHOU NUMERAL TWOHANGZHOU NUM" + + "ERAL THREEHANGZHOU NUMERAL FOURHANGZHOU NUMERAL FIVEHANGZHOU NUMERAL SIX" + + "HANGZHOU NUMERAL SEVENHANGZHOU NUMERAL EIGHTHANGZHOU NUMERAL NINEIDEOGRA" + + "PHIC LEVEL TONE MARKIDEOGRAPHIC RISING TONE MARKIDEOGRAPHIC DEPARTING TO" + + "NE MARKIDEOGRAPHIC ENTERING TONE MARKHANGUL SINGLE DOT TONE MARKHANGUL D" + + "OUBLE DOT TONE MARKWAVY DASHVERTICAL KANA REPEAT MARKVERTICAL KANA REPEA" + + "T WITH VOICED SOUND MARKVERTICAL KANA REPEAT MARK UPPER HALFVERTICAL KAN" + + "A REPEAT WITH VOICED SOUND MARK UPPER HALFVERTICAL KANA REPEAT MARK LOWE" + + "R HALFCIRCLED POSTAL MARKIDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBO") + ("" + + "LHANGZHOU NUMERAL TENHANGZHOU NUMERAL TWENTYHANGZHOU NUMERAL THIRTYVERTI" + + "CAL IDEOGRAPHIC ITERATION MARKMASU MARKPART ALTERNATION MARKIDEOGRAPHIC " + + "VARIATION INDICATORIDEOGRAPHIC HALF FILL SPACEHIRAGANA LETTER SMALL AHIR" + + "AGANA LETTER AHIRAGANA LETTER SMALL IHIRAGANA LETTER IHIRAGANA LETTER SM" + + "ALL UHIRAGANA LETTER UHIRAGANA LETTER SMALL EHIRAGANA LETTER EHIRAGANA L" + + "ETTER SMALL OHIRAGANA LETTER OHIRAGANA LETTER KAHIRAGANA LETTER GAHIRAGA" + + "NA LETTER KIHIRAGANA LETTER GIHIRAGANA LETTER KUHIRAGANA LETTER GUHIRAGA" + + "NA LETTER KEHIRAGANA LETTER GEHIRAGANA LETTER KOHIRAGANA LETTER GOHIRAGA" + + "NA LETTER SAHIRAGANA LETTER ZAHIRAGANA LETTER SIHIRAGANA LETTER ZIHIRAGA" + + "NA LETTER SUHIRAGANA LETTER ZUHIRAGANA LETTER SEHIRAGANA LETTER ZEHIRAGA" + + "NA LETTER SOHIRAGANA LETTER ZOHIRAGANA LETTER TAHIRAGANA LETTER DAHIRAGA" + + "NA LETTER TIHIRAGANA LETTER DIHIRAGANA LETTER SMALL TUHIRAGANA LETTER TU" + + "HIRAGANA LETTER DUHIRAGANA LETTER TEHIRAGANA LETTER DEHIRAGANA LETTER TO" + + "HIRAGANA LETTER DOHIRAGANA LETTER NAHIRAGANA LETTER NIHIRAGANA LETTER NU" + + "HIRAGANA LETTER NEHIRAGANA LETTER NOHIRAGANA LETTER HAHIRAGANA LETTER BA" + + "HIRAGANA LETTER PAHIRAGANA LETTER HIHIRAGANA LETTER BIHIRAGANA LETTER PI" + + "HIRAGANA LETTER HUHIRAGANA LETTER BUHIRAGANA LETTER PUHIRAGANA LETTER HE" + + "HIRAGANA LETTER BEHIRAGANA LETTER PEHIRAGANA LETTER HOHIRAGANA LETTER BO" + + "HIRAGANA LETTER POHIRAGANA LETTER MAHIRAGANA LETTER MIHIRAGANA LETTER MU" + + "HIRAGANA LETTER MEHIRAGANA LETTER MOHIRAGANA LETTER SMALL YAHIRAGANA LET" + + "TER YAHIRAGANA LETTER SMALL YUHIRAGANA LETTER YUHIRAGANA LETTER SMALL YO" + + "HIRAGANA LETTER YOHIRAGANA LETTER RAHIRAGANA LETTER RIHIRAGANA LETTER RU" + + "HIRAGANA LETTER REHIRAGANA LETTER ROHIRAGANA LETTER SMALL WAHIRAGANA LET" + + "TER WAHIRAGANA LETTER WIHIRAGANA LETTER WEHIRAGANA LETTER WOHIRAGANA LET" + + "TER NHIRAGANA LETTER VUHIRAGANA LETTER SMALL KAHIRAGANA LETTER SMALL KEC" + + "OMBINING KATAKANA-HIRAGANA VOICED SOUND MARKCOMBINING KATAKANA-HIRAGANA " + + "SEMI-VOICED SOUND MARKKATAKANA-HIRAGANA VOICED SOUND MARKKATAKANA-HIRAGA" + + "NA SEMI-VOICED SOUND MARKHIRAGANA ITERATION MARKHIRAGANA VOICED ITERATIO" + + "N MARKHIRAGANA DIGRAPH YORIKATAKANA-HIRAGANA DOUBLE HYPHENKATAKANA LETTE" + + "R SMALL AKATAKANA LETTER AKATAKANA LETTER SMALL IKATAKANA LETTER IKATAKA" + + "NA LETTER SMALL UKATAKANA LETTER UKATAKANA LETTER SMALL EKATAKANA LETTER" + + " EKATAKANA LETTER SMALL OKATAKANA LETTER OKATAKANA LETTER KAKATAKANA LET" + + "TER GAKATAKANA LETTER KIKATAKANA LETTER GIKATAKANA LETTER KUKATAKANA LET" + + "TER GUKATAKANA LETTER KEKATAKANA LETTER GEKATAKANA LETTER KOKATAKANA LET" + + "TER GOKATAKANA LETTER SAKATAKANA LETTER ZAKATAKANA LETTER SIKATAKANA LET" + + "TER ZIKATAKANA LETTER SUKATAKANA LETTER ZUKATAKANA LETTER SEKATAKANA LET" + + "TER ZEKATAKANA LETTER SOKATAKANA LETTER ZOKATAKANA LETTER TAKATAKANA LET" + + "TER DAKATAKANA LETTER TIKATAKANA LETTER DIKATAKANA LETTER SMALL TUKATAKA" + + "NA LETTER TUKATAKANA LETTER DUKATAKANA LETTER TEKATAKANA LETTER DEKATAKA" + + "NA LETTER TOKATAKANA LETTER DOKATAKANA LETTER NAKATAKANA LETTER NIKATAKA" + + "NA LETTER NUKATAKANA LETTER NEKATAKANA LETTER NOKATAKANA LETTER HAKATAKA" + + "NA LETTER BAKATAKANA LETTER PAKATAKANA LETTER HIKATAKANA LETTER BIKATAKA" + + "NA LETTER PIKATAKANA LETTER HUKATAKANA LETTER BUKATAKANA LETTER PUKATAKA" + + "NA LETTER HEKATAKANA LETTER BEKATAKANA LETTER PEKATAKANA LETTER HOKATAKA" + + "NA LETTER BOKATAKANA LETTER POKATAKANA LETTER MAKATAKANA LETTER MIKATAKA" + + "NA LETTER MUKATAKANA LETTER MEKATAKANA LETTER MOKATAKANA LETTER SMALL YA" + + "KATAKANA LETTER YAKATAKANA LETTER SMALL YUKATAKANA LETTER YUKATAKANA LET" + + "TER SMALL YOKATAKANA LETTER YOKATAKANA LETTER RAKATAKANA LETTER RIKATAKA" + + "NA LETTER RUKATAKANA LETTER REKATAKANA LETTER ROKATAKANA LETTER SMALL WA" + + "KATAKANA LETTER WAKATAKANA LETTER WIKATAKANA LETTER WEKATAKANA LETTER WO" + + "KATAKANA LETTER NKATAKANA LETTER VUKATAKANA LETTER SMALL KAKATAKANA LETT" + + "ER SMALL KEKATAKANA LETTER VAKATAKANA LETTER VIKATAKANA LETTER VEKATAKAN" + + "A LETTER VOKATAKANA MIDDLE DOTKATAKANA-HIRAGANA PROLONGED SOUND MARKKATA" + + "KANA ITERATION MARKKATAKANA VOICED ITERATION MARKKATAKANA DIGRAPH KOTOBO" + + "POMOFO LETTER BBOPOMOFO LETTER PBOPOMOFO LETTER MBOPOMOFO LETTER FBOPOMO" + + "FO LETTER DBOPOMOFO LETTER TBOPOMOFO LETTER NBOPOMOFO LETTER LBOPOMOFO L" + + "ETTER GBOPOMOFO LETTER KBOPOMOFO LETTER HBOPOMOFO LETTER JBOPOMOFO LETTE" + + "R QBOPOMOFO LETTER XBOPOMOFO LETTER ZHBOPOMOFO LETTER CHBOPOMOFO LETTER " + + "SHBOPOMOFO LETTER RBOPOMOFO LETTER ZBOPOMOFO LETTER CBOPOMOFO LETTER SBO" + + "POMOFO LETTER ABOPOMOFO LETTER OBOPOMOFO LETTER EBOPOMOFO LETTER EHBOPOM" + + "OFO LETTER AIBOPOMOFO LETTER EIBOPOMOFO LETTER AUBOPOMOFO LETTER OUBOPOM" + + "OFO LETTER ANBOPOMOFO LETTER ENBOPOMOFO LETTER ANGBOPOMOFO LETTER ENGBOP" + + "OMOFO LETTER ERBOPOMOFO LETTER IBOPOMOFO LETTER UBOPOMOFO LETTER IUBOPOM" + + "OFO LETTER VBOPOMOFO LETTER NGBOPOMOFO LETTER GNBOPOMOFO LETTER IHHANGUL") + ("" + + " LETTER KIYEOKHANGUL LETTER SSANGKIYEOKHANGUL LETTER KIYEOK-SIOSHANGUL L" + + "ETTER NIEUNHANGUL LETTER NIEUN-CIEUCHANGUL LETTER NIEUN-HIEUHHANGUL LETT" + + "ER TIKEUTHANGUL LETTER SSANGTIKEUTHANGUL LETTER RIEULHANGUL LETTER RIEUL" + + "-KIYEOKHANGUL LETTER RIEUL-MIEUMHANGUL LETTER RIEUL-PIEUPHANGUL LETTER R" + + "IEUL-SIOSHANGUL LETTER RIEUL-THIEUTHHANGUL LETTER RIEUL-PHIEUPHHANGUL LE" + + "TTER RIEUL-HIEUHHANGUL LETTER MIEUMHANGUL LETTER PIEUPHANGUL LETTER SSAN" + + "GPIEUPHANGUL LETTER PIEUP-SIOSHANGUL LETTER SIOSHANGUL LETTER SSANGSIOSH" + + "ANGUL LETTER IEUNGHANGUL LETTER CIEUCHANGUL LETTER SSANGCIEUCHANGUL LETT" + + "ER CHIEUCHHANGUL LETTER KHIEUKHHANGUL LETTER THIEUTHHANGUL LETTER PHIEUP" + + "HHANGUL LETTER HIEUHHANGUL LETTER AHANGUL LETTER AEHANGUL LETTER YAHANGU" + + "L LETTER YAEHANGUL LETTER EOHANGUL LETTER EHANGUL LETTER YEOHANGUL LETTE" + + "R YEHANGUL LETTER OHANGUL LETTER WAHANGUL LETTER WAEHANGUL LETTER OEHANG" + + "UL LETTER YOHANGUL LETTER UHANGUL LETTER WEOHANGUL LETTER WEHANGUL LETTE" + + "R WIHANGUL LETTER YUHANGUL LETTER EUHANGUL LETTER YIHANGUL LETTER IHANGU" + + "L FILLERHANGUL LETTER SSANGNIEUNHANGUL LETTER NIEUN-TIKEUTHANGUL LETTER " + + "NIEUN-SIOSHANGUL LETTER NIEUN-PANSIOSHANGUL LETTER RIEUL-KIYEOK-SIOSHANG" + + "UL LETTER RIEUL-TIKEUTHANGUL LETTER RIEUL-PIEUP-SIOSHANGUL LETTER RIEUL-" + + "PANSIOSHANGUL LETTER RIEUL-YEORINHIEUHHANGUL LETTER MIEUM-PIEUPHANGUL LE" + + "TTER MIEUM-SIOSHANGUL LETTER MIEUM-PANSIOSHANGUL LETTER KAPYEOUNMIEUMHAN" + + "GUL LETTER PIEUP-KIYEOKHANGUL LETTER PIEUP-TIKEUTHANGUL LETTER PIEUP-SIO" + + "S-KIYEOKHANGUL LETTER PIEUP-SIOS-TIKEUTHANGUL LETTER PIEUP-CIEUCHANGUL L" + + "ETTER PIEUP-THIEUTHHANGUL LETTER KAPYEOUNPIEUPHANGUL LETTER KAPYEOUNSSAN" + + "GPIEUPHANGUL LETTER SIOS-KIYEOKHANGUL LETTER SIOS-NIEUNHANGUL LETTER SIO" + + "S-TIKEUTHANGUL LETTER SIOS-PIEUPHANGUL LETTER SIOS-CIEUCHANGUL LETTER PA" + + "NSIOSHANGUL LETTER SSANGIEUNGHANGUL LETTER YESIEUNGHANGUL LETTER YESIEUN" + + "G-SIOSHANGUL LETTER YESIEUNG-PANSIOSHANGUL LETTER KAPYEOUNPHIEUPHHANGUL " + + "LETTER SSANGHIEUHHANGUL LETTER YEORINHIEUHHANGUL LETTER YO-YAHANGUL LETT" + + "ER YO-YAEHANGUL LETTER YO-IHANGUL LETTER YU-YEOHANGUL LETTER YU-YEHANGUL" + + " LETTER YU-IHANGUL LETTER ARAEAHANGUL LETTER ARAEAEIDEOGRAPHIC ANNOTATIO" + + "N LINKING MARKIDEOGRAPHIC ANNOTATION REVERSE MARKIDEOGRAPHIC ANNOTATION " + + "ONE MARKIDEOGRAPHIC ANNOTATION TWO MARKIDEOGRAPHIC ANNOTATION THREE MARK" + + "IDEOGRAPHIC ANNOTATION FOUR MARKIDEOGRAPHIC ANNOTATION TOP MARKIDEOGRAPH" + + "IC ANNOTATION MIDDLE MARKIDEOGRAPHIC ANNOTATION BOTTOM MARKIDEOGRAPHIC A" + + "NNOTATION FIRST MARKIDEOGRAPHIC ANNOTATION SECOND MARKIDEOGRAPHIC ANNOTA" + + "TION THIRD MARKIDEOGRAPHIC ANNOTATION FOURTH MARKIDEOGRAPHIC ANNOTATION " + + "HEAVEN MARKIDEOGRAPHIC ANNOTATION EARTH MARKIDEOGRAPHIC ANNOTATION MAN M" + + "ARKBOPOMOFO LETTER BUBOPOMOFO LETTER ZIBOPOMOFO LETTER JIBOPOMOFO LETTER" + + " GUBOPOMOFO LETTER EEBOPOMOFO LETTER ENNBOPOMOFO LETTER OOBOPOMOFO LETTE" + + "R ONNBOPOMOFO LETTER IRBOPOMOFO LETTER ANNBOPOMOFO LETTER INNBOPOMOFO LE" + + "TTER UNNBOPOMOFO LETTER IMBOPOMOFO LETTER NGGBOPOMOFO LETTER AINNBOPOMOF" + + "O LETTER AUNNBOPOMOFO LETTER AMBOPOMOFO LETTER OMBOPOMOFO LETTER ONGBOPO" + + "MOFO LETTER INNNBOPOMOFO FINAL LETTER PBOPOMOFO FINAL LETTER TBOPOMOFO F" + + "INAL LETTER KBOPOMOFO FINAL LETTER HBOPOMOFO LETTER GHBOPOMOFO LETTER LH" + + "BOPOMOFO LETTER ZYCJK STROKE TCJK STROKE WGCJK STROKE XGCJK STROKE BXGCJ" + + "K STROKE SWCJK STROKE HZZCJK STROKE HZGCJK STROKE HPCJK STROKE HZWGCJK S" + + "TROKE SZWGCJK STROKE HZTCJK STROKE HZZPCJK STROKE HPWGCJK STROKE HZWCJK " + + "STROKE HZZZCJK STROKE NCJK STROKE HCJK STROKE SCJK STROKE PCJK STROKE SP" + + "CJK STROKE DCJK STROKE HZCJK STROKE HGCJK STROKE SZCJK STROKE SWZCJK STR" + + "OKE STCJK STROKE SGCJK STROKE PDCJK STROKE PZCJK STROKE TNCJK STROKE SZZ" + + "CJK STROKE SWGCJK STROKE HXWGCJK STROKE HZZZGCJK STROKE PGCJK STROKE QKA" + + "TAKANA LETTER SMALL KUKATAKANA LETTER SMALL SIKATAKANA LETTER SMALL SUKA" + + "TAKANA LETTER SMALL TOKATAKANA LETTER SMALL NUKATAKANA LETTER SMALL HAKA" + + "TAKANA LETTER SMALL HIKATAKANA LETTER SMALL HUKATAKANA LETTER SMALL HEKA" + + "TAKANA LETTER SMALL HOKATAKANA LETTER SMALL MUKATAKANA LETTER SMALL RAKA" + + "TAKANA LETTER SMALL RIKATAKANA LETTER SMALL RUKATAKANA LETTER SMALL REKA" + + "TAKANA LETTER SMALL ROPARENTHESIZED HANGUL KIYEOKPARENTHESIZED HANGUL NI" + + "EUNPARENTHESIZED HANGUL TIKEUTPARENTHESIZED HANGUL RIEULPARENTHESIZED HA" + + "NGUL MIEUMPARENTHESIZED HANGUL PIEUPPARENTHESIZED HANGUL SIOSPARENTHESIZ" + + "ED HANGUL IEUNGPARENTHESIZED HANGUL CIEUCPARENTHESIZED HANGUL CHIEUCHPAR" + + "ENTHESIZED HANGUL KHIEUKHPARENTHESIZED HANGUL THIEUTHPARENTHESIZED HANGU" + + "L PHIEUPHPARENTHESIZED HANGUL HIEUHPARENTHESIZED HANGUL KIYEOK APARENTHE" + + "SIZED HANGUL NIEUN APARENTHESIZED HANGUL TIKEUT APARENTHESIZED HANGUL RI" + + "EUL APARENTHESIZED HANGUL MIEUM APARENTHESIZED HANGUL PIEUP APARENTHESIZ" + + "ED HANGUL SIOS APARENTHESIZED HANGUL IEUNG APARENTHESIZED HANGUL CIEUC A") + ("" + + "PARENTHESIZED HANGUL CHIEUCH APARENTHESIZED HANGUL KHIEUKH APARENTHESIZE" + + "D HANGUL THIEUTH APARENTHESIZED HANGUL PHIEUPH APARENTHESIZED HANGUL HIE" + + "UH APARENTHESIZED HANGUL CIEUC UPARENTHESIZED KOREAN CHARACTER OJEONPARE" + + "NTHESIZED KOREAN CHARACTER O HUPARENTHESIZED IDEOGRAPH ONEPARENTHESIZED " + + "IDEOGRAPH TWOPARENTHESIZED IDEOGRAPH THREEPARENTHESIZED IDEOGRAPH FOURPA" + + "RENTHESIZED IDEOGRAPH FIVEPARENTHESIZED IDEOGRAPH SIXPARENTHESIZED IDEOG" + + "RAPH SEVENPARENTHESIZED IDEOGRAPH EIGHTPARENTHESIZED IDEOGRAPH NINEPAREN" + + "THESIZED IDEOGRAPH TENPARENTHESIZED IDEOGRAPH MOONPARENTHESIZED IDEOGRAP" + + "H FIREPARENTHESIZED IDEOGRAPH WATERPARENTHESIZED IDEOGRAPH WOODPARENTHES" + + "IZED IDEOGRAPH METALPARENTHESIZED IDEOGRAPH EARTHPARENTHESIZED IDEOGRAPH" + + " SUNPARENTHESIZED IDEOGRAPH STOCKPARENTHESIZED IDEOGRAPH HAVEPARENTHESIZ" + + "ED IDEOGRAPH SOCIETYPARENTHESIZED IDEOGRAPH NAMEPARENTHESIZED IDEOGRAPH " + + "SPECIALPARENTHESIZED IDEOGRAPH FINANCIALPARENTHESIZED IDEOGRAPH CONGRATU" + + "LATIONPARENTHESIZED IDEOGRAPH LABORPARENTHESIZED IDEOGRAPH REPRESENTPARE" + + "NTHESIZED IDEOGRAPH CALLPARENTHESIZED IDEOGRAPH STUDYPARENTHESIZED IDEOG" + + "RAPH SUPERVISEPARENTHESIZED IDEOGRAPH ENTERPRISEPARENTHESIZED IDEOGRAPH " + + "RESOURCEPARENTHESIZED IDEOGRAPH ALLIANCEPARENTHESIZED IDEOGRAPH FESTIVAL" + + "PARENTHESIZED IDEOGRAPH RESTPARENTHESIZED IDEOGRAPH SELFPARENTHESIZED ID" + + "EOGRAPH REACHCIRCLED IDEOGRAPH QUESTIONCIRCLED IDEOGRAPH KINDERGARTENCIR" + + "CLED IDEOGRAPH SCHOOLCIRCLED IDEOGRAPH KOTOCIRCLED NUMBER TEN ON BLACK S" + + "QUARECIRCLED NUMBER TWENTY ON BLACK SQUARECIRCLED NUMBER THIRTY ON BLACK" + + " SQUARECIRCLED NUMBER FORTY ON BLACK SQUARECIRCLED NUMBER FIFTY ON BLACK" + + " SQUARECIRCLED NUMBER SIXTY ON BLACK SQUARECIRCLED NUMBER SEVENTY ON BLA" + + "CK SQUARECIRCLED NUMBER EIGHTY ON BLACK SQUAREPARTNERSHIP SIGNCIRCLED NU" + + "MBER TWENTY ONECIRCLED NUMBER TWENTY TWOCIRCLED NUMBER TWENTY THREECIRCL" + + "ED NUMBER TWENTY FOURCIRCLED NUMBER TWENTY FIVECIRCLED NUMBER TWENTY SIX" + + "CIRCLED NUMBER TWENTY SEVENCIRCLED NUMBER TWENTY EIGHTCIRCLED NUMBER TWE" + + "NTY NINECIRCLED NUMBER THIRTYCIRCLED NUMBER THIRTY ONECIRCLED NUMBER THI" + + "RTY TWOCIRCLED NUMBER THIRTY THREECIRCLED NUMBER THIRTY FOURCIRCLED NUMB" + + "ER THIRTY FIVECIRCLED HANGUL KIYEOKCIRCLED HANGUL NIEUNCIRCLED HANGUL TI" + + "KEUTCIRCLED HANGUL RIEULCIRCLED HANGUL MIEUMCIRCLED HANGUL PIEUPCIRCLED " + + "HANGUL SIOSCIRCLED HANGUL IEUNGCIRCLED HANGUL CIEUCCIRCLED HANGUL CHIEUC" + + "HCIRCLED HANGUL KHIEUKHCIRCLED HANGUL THIEUTHCIRCLED HANGUL PHIEUPHCIRCL" + + "ED HANGUL HIEUHCIRCLED HANGUL KIYEOK ACIRCLED HANGUL NIEUN ACIRCLED HANG" + + "UL TIKEUT ACIRCLED HANGUL RIEUL ACIRCLED HANGUL MIEUM ACIRCLED HANGUL PI" + + "EUP ACIRCLED HANGUL SIOS ACIRCLED HANGUL IEUNG ACIRCLED HANGUL CIEUC ACI" + + "RCLED HANGUL CHIEUCH ACIRCLED HANGUL KHIEUKH ACIRCLED HANGUL THIEUTH ACI" + + "RCLED HANGUL PHIEUPH ACIRCLED HANGUL HIEUH ACIRCLED KOREAN CHARACTER CHA" + + "MKOCIRCLED KOREAN CHARACTER JUEUICIRCLED HANGUL IEUNG UKOREAN STANDARD S" + + "YMBOLCIRCLED IDEOGRAPH ONECIRCLED IDEOGRAPH TWOCIRCLED IDEOGRAPH THREECI" + + "RCLED IDEOGRAPH FOURCIRCLED IDEOGRAPH FIVECIRCLED IDEOGRAPH SIXCIRCLED I" + + "DEOGRAPH SEVENCIRCLED IDEOGRAPH EIGHTCIRCLED IDEOGRAPH NINECIRCLED IDEOG" + + "RAPH TENCIRCLED IDEOGRAPH MOONCIRCLED IDEOGRAPH FIRECIRCLED IDEOGRAPH WA" + + "TERCIRCLED IDEOGRAPH WOODCIRCLED IDEOGRAPH METALCIRCLED IDEOGRAPH EARTHC" + + "IRCLED IDEOGRAPH SUNCIRCLED IDEOGRAPH STOCKCIRCLED IDEOGRAPH HAVECIRCLED" + + " IDEOGRAPH SOCIETYCIRCLED IDEOGRAPH NAMECIRCLED IDEOGRAPH SPECIALCIRCLED" + + " IDEOGRAPH FINANCIALCIRCLED IDEOGRAPH CONGRATULATIONCIRCLED IDEOGRAPH LA" + + "BORCIRCLED IDEOGRAPH SECRETCIRCLED IDEOGRAPH MALECIRCLED IDEOGRAPH FEMAL" + + "ECIRCLED IDEOGRAPH SUITABLECIRCLED IDEOGRAPH EXCELLENTCIRCLED IDEOGRAPH " + + "PRINTCIRCLED IDEOGRAPH ATTENTIONCIRCLED IDEOGRAPH ITEMCIRCLED IDEOGRAPH " + + "RESTCIRCLED IDEOGRAPH COPYCIRCLED IDEOGRAPH CORRECTCIRCLED IDEOGRAPH HIG" + + "HCIRCLED IDEOGRAPH CENTRECIRCLED IDEOGRAPH LOWCIRCLED IDEOGRAPH LEFTCIRC" + + "LED IDEOGRAPH RIGHTCIRCLED IDEOGRAPH MEDICINECIRCLED IDEOGRAPH RELIGIONC" + + "IRCLED IDEOGRAPH STUDYCIRCLED IDEOGRAPH SUPERVISECIRCLED IDEOGRAPH ENTER" + + "PRISECIRCLED IDEOGRAPH RESOURCECIRCLED IDEOGRAPH ALLIANCECIRCLED IDEOGRA" + + "PH NIGHTCIRCLED NUMBER THIRTY SIXCIRCLED NUMBER THIRTY SEVENCIRCLED NUMB" + + "ER THIRTY EIGHTCIRCLED NUMBER THIRTY NINECIRCLED NUMBER FORTYCIRCLED NUM" + + "BER FORTY ONECIRCLED NUMBER FORTY TWOCIRCLED NUMBER FORTY THREECIRCLED N" + + "UMBER FORTY FOURCIRCLED NUMBER FORTY FIVECIRCLED NUMBER FORTY SIXCIRCLED" + + " NUMBER FORTY SEVENCIRCLED NUMBER FORTY EIGHTCIRCLED NUMBER FORTY NINECI" + + "RCLED NUMBER FIFTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARYIDEOGRAPHIC TE" + + "LEGRAPH SYMBOL FOR FEBRUARYIDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCHIDEOGRA" + + "PHIC TELEGRAPH SYMBOL FOR APRILIDEOGRAPHIC TELEGRAPH SYMBOL FOR MAYIDEOG" + + "RAPHIC TELEGRAPH SYMBOL FOR JUNEIDEOGRAPHIC TELEGRAPH SYMBOL FOR JULYIDE") + ("" + + "OGRAPHIC TELEGRAPH SYMBOL FOR AUGUSTIDEOGRAPHIC TELEGRAPH SYMBOL FOR SEP" + + "TEMBERIDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBERIDEOGRAPHIC TELEGRAPH SYMB" + + "OL FOR NOVEMBERIDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBERSQUARE HGSQUARE " + + "ERGSQUARE EVLIMITED LIABILITY SIGNCIRCLED KATAKANA ACIRCLED KATAKANA ICI" + + "RCLED KATAKANA UCIRCLED KATAKANA ECIRCLED KATAKANA OCIRCLED KATAKANA KAC" + + "IRCLED KATAKANA KICIRCLED KATAKANA KUCIRCLED KATAKANA KECIRCLED KATAKANA" + + " KOCIRCLED KATAKANA SACIRCLED KATAKANA SICIRCLED KATAKANA SUCIRCLED KATA" + + "KANA SECIRCLED KATAKANA SOCIRCLED KATAKANA TACIRCLED KATAKANA TICIRCLED " + + "KATAKANA TUCIRCLED KATAKANA TECIRCLED KATAKANA TOCIRCLED KATAKANA NACIRC" + + "LED KATAKANA NICIRCLED KATAKANA NUCIRCLED KATAKANA NECIRCLED KATAKANA NO" + + "CIRCLED KATAKANA HACIRCLED KATAKANA HICIRCLED KATAKANA HUCIRCLED KATAKAN" + + "A HECIRCLED KATAKANA HOCIRCLED KATAKANA MACIRCLED KATAKANA MICIRCLED KAT" + + "AKANA MUCIRCLED KATAKANA MECIRCLED KATAKANA MOCIRCLED KATAKANA YACIRCLED" + + " KATAKANA YUCIRCLED KATAKANA YOCIRCLED KATAKANA RACIRCLED KATAKANA RICIR" + + "CLED KATAKANA RUCIRCLED KATAKANA RECIRCLED KATAKANA ROCIRCLED KATAKANA W" + + "ACIRCLED KATAKANA WICIRCLED KATAKANA WECIRCLED KATAKANA WOSQUARE APAATOS" + + "QUARE ARUHUASQUARE ANPEASQUARE AARUSQUARE ININGUSQUARE INTISQUARE UONSQU" + + "ARE ESUKUUDOSQUARE EEKAASQUARE ONSUSQUARE OOMUSQUARE KAIRISQUARE KARATTO" + + "SQUARE KARORIISQUARE GARONSQUARE GANMASQUARE GIGASQUARE GINIISQUARE KYUR" + + "IISQUARE GIRUDAASQUARE KIROSQUARE KIROGURAMUSQUARE KIROMEETORUSQUARE KIR" + + "OWATTOSQUARE GURAMUSQUARE GURAMUTONSQUARE KURUZEIROSQUARE KUROONESQUARE " + + "KEESUSQUARE KORUNASQUARE KOOPOSQUARE SAIKURUSQUARE SANTIIMUSQUARE SIRING" + + "USQUARE SENTISQUARE SENTOSQUARE DAASUSQUARE DESISQUARE DORUSQUARE TONSQU" + + "ARE NANOSQUARE NOTTOSQUARE HAITUSQUARE PAASENTOSQUARE PAATUSQUARE BAARER" + + "USQUARE PIASUTORUSQUARE PIKURUSQUARE PIKOSQUARE BIRUSQUARE HUARADDOSQUAR" + + "E HUIITOSQUARE BUSSYERUSQUARE HURANSQUARE HEKUTAARUSQUARE PESOSQUARE PEN" + + "IHISQUARE HERUTUSQUARE PENSUSQUARE PEEZISQUARE BEETASQUARE POINTOSQUARE " + + "BORUTOSQUARE HONSQUARE PONDOSQUARE HOORUSQUARE HOONSQUARE MAIKUROSQUARE " + + "MAIRUSQUARE MAHHASQUARE MARUKUSQUARE MANSYONSQUARE MIKURONSQUARE MIRISQU" + + "ARE MIRIBAARUSQUARE MEGASQUARE MEGATONSQUARE MEETORUSQUARE YAADOSQUARE Y" + + "AARUSQUARE YUANSQUARE RITTORUSQUARE RIRASQUARE RUPIISQUARE RUUBURUSQUARE" + + " REMUSQUARE RENTOGENSQUARE WATTOIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZE" + + "ROIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONEIDEOGRAPHIC TELEGRAPH SYMBOL " + + "FOR HOUR TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREEIDEOGRAPHIC TELEG" + + "RAPH SYMBOL FOR HOUR FOURIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVEIDEOG" + + "RAPHIC TELEGRAPH SYMBOL FOR HOUR SIXIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOU" + + "R SEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTIDEOGRAPHIC TELEGRAPH " + + "SYMBOL FOR HOUR NINEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TENIDEOGRAPHIC" + + " TELEGRAPH SYMBOL FOR HOUR ELEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR T" + + "WELVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEENIDEOGRAPHIC TELEGRAPH" + + " SYMBOL FOR HOUR FOURTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEENID" + + "EOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEENIDEOGRAPHIC TELEGRAPH SYMBOL " + + "FOR HOUR SEVENTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEENIDEOGRAP" + + "HIC TELEGRAPH SYMBOL FOR HOUR NINETEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR H" + + "OUR TWENTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONEIDEOGRAPHIC TE" + + "LEGRAPH SYMBOL FOR HOUR TWENTY-TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR " + + "TWENTY-THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOURSQUARE HPAS" + + "QUARE DASQUARE AUSQUARE BARSQUARE OVSQUARE PCSQUARE DMSQUARE DM SQUAREDS" + + "QUARE DM CUBEDSQUARE IUSQUARE ERA NAME HEISEISQUARE ERA NAME SYOUWASQUAR" + + "E ERA NAME TAISYOUSQUARE ERA NAME MEIZISQUARE CORPORATIONSQUARE PA AMPSS" + + "QUARE NASQUARE MU ASQUARE MASQUARE KASQUARE KBSQUARE MBSQUARE GBSQUARE C" + + "ALSQUARE KCALSQUARE PFSQUARE NFSQUARE MU FSQUARE MU GSQUARE MGSQUARE KGS" + + "QUARE HZSQUARE KHZSQUARE MHZSQUARE GHZSQUARE THZSQUARE MU LSQUARE MLSQUA" + + "RE DLSQUARE KLSQUARE FMSQUARE NMSQUARE MU MSQUARE MMSQUARE CMSQUARE KMSQ" + + "UARE MM SQUAREDSQUARE CM SQUAREDSQUARE M SQUAREDSQUARE KM SQUAREDSQUARE " + + "MM CUBEDSQUARE CM CUBEDSQUARE M CUBEDSQUARE KM CUBEDSQUARE M OVER SSQUAR" + + "E M OVER S SQUAREDSQUARE PASQUARE KPASQUARE MPASQUARE GPASQUARE RADSQUAR" + + "E RAD OVER SSQUARE RAD OVER S SQUAREDSQUARE PSSQUARE NSSQUARE MU SSQUARE" + + " MSSQUARE PVSQUARE NVSQUARE MU VSQUARE MVSQUARE KVSQUARE MV MEGASQUARE P" + + "WSQUARE NWSQUARE MU WSQUARE MWSQUARE KWSQUARE MW MEGASQUARE K OHMSQUARE " + + "M OHMSQUARE AMSQUARE BQSQUARE CCSQUARE CDSQUARE C OVER KGSQUARE COSQUARE" + + " DBSQUARE GYSQUARE HASQUARE HPSQUARE INSQUARE KKSQUARE KM CAPITALSQUARE " + + "KTSQUARE LMSQUARE LNSQUARE LOGSQUARE LXSQUARE MB SMALLSQUARE MILSQUARE M" + + "OLSQUARE PHSQUARE PMSQUARE PPMSQUARE PRSQUARE SRSQUARE SVSQUARE WBSQUARE") + ("" + + " V OVER MSQUARE A OVER MIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONEIDEOGRAP" + + "HIC TELEGRAPH SYMBOL FOR DAY TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THR" + + "EEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURIDEOGRAPHIC TELEGRAPH SYMBOL " + + "FOR DAY FIVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXIDEOGRAPHIC TELEGRAP" + + "H SYMBOL FOR DAY SEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTIDEOGRAP" + + "HIC TELEGRAPH SYMBOL FOR DAY NINEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TE" + + "NIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVENIDEOGRAPHIC TELEGRAPH SYMBOL" + + " FOR DAY TWELVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEENIDEOGRAPHIC " + + "TELEGRAPH SYMBOL FOR DAY FOURTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FI" + + "FTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEENIDEOGRAPHIC TELEGRAPH S" + + "YMBOL FOR DAY SEVENTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEENIDEO" + + "GRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEENIDEOGRAPHIC TELEGRAPH SYMBOL FO" + + "R DAY TWENTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONEIDEOGRAPHIC T" + + "ELEGRAPH SYMBOL FOR DAY TWENTY-TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY T" + + "WENTY-THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOURIDEOGRAPHIC T" + + "ELEGRAPH SYMBOL FOR DAY TWENTY-FIVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY " + + "TWENTY-SIXIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVENIDEOGRAPHIC T" + + "ELEGRAPH SYMBOL FOR DAY TWENTY-EIGHTIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY" + + " TWENTY-NINEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTYIDEOGRAPHIC TELEG" + + "RAPH SYMBOL FOR DAY THIRTY-ONESQUARE GALHEXAGRAM FOR THE CREATIVE HEAVEN" + + "HEXAGRAM FOR THE RECEPTIVE EARTHHEXAGRAM FOR DIFFICULTY AT THE BEGINNING" + + "HEXAGRAM FOR YOUTHFUL FOLLYHEXAGRAM FOR WAITINGHEXAGRAM FOR CONFLICTHEXA" + + "GRAM FOR THE ARMYHEXAGRAM FOR HOLDING TOGETHERHEXAGRAM FOR SMALL TAMINGH" + + "EXAGRAM FOR TREADINGHEXAGRAM FOR PEACEHEXAGRAM FOR STANDSTILLHEXAGRAM FO" + + "R FELLOWSHIPHEXAGRAM FOR GREAT POSSESSIONHEXAGRAM FOR MODESTYHEXAGRAM FO" + + "R ENTHUSIASMHEXAGRAM FOR FOLLOWINGHEXAGRAM FOR WORK ON THE DECAYEDHEXAGR" + + "AM FOR APPROACHHEXAGRAM FOR CONTEMPLATIONHEXAGRAM FOR BITING THROUGHHEXA" + + "GRAM FOR GRACEHEXAGRAM FOR SPLITTING APARTHEXAGRAM FOR RETURNHEXAGRAM FO" + + "R INNOCENCEHEXAGRAM FOR GREAT TAMINGHEXAGRAM FOR MOUTH CORNERSHEXAGRAM F" + + "OR GREAT PREPONDERANCEHEXAGRAM FOR THE ABYSMAL WATERHEXAGRAM FOR THE CLI" + + "NGING FIREHEXAGRAM FOR INFLUENCEHEXAGRAM FOR DURATIONHEXAGRAM FOR RETREA" + + "THEXAGRAM FOR GREAT POWERHEXAGRAM FOR PROGRESSHEXAGRAM FOR DARKENING OF " + + "THE LIGHTHEXAGRAM FOR THE FAMILYHEXAGRAM FOR OPPOSITIONHEXAGRAM FOR OBST" + + "RUCTIONHEXAGRAM FOR DELIVERANCEHEXAGRAM FOR DECREASEHEXAGRAM FOR INCREAS" + + "EHEXAGRAM FOR BREAKTHROUGHHEXAGRAM FOR COMING TO MEETHEXAGRAM FOR GATHER" + + "ING TOGETHERHEXAGRAM FOR PUSHING UPWARDHEXAGRAM FOR OPPRESSIONHEXAGRAM F" + + "OR THE WELLHEXAGRAM FOR REVOLUTIONHEXAGRAM FOR THE CAULDRONHEXAGRAM FOR " + + "THE AROUSING THUNDERHEXAGRAM FOR THE KEEPING STILL MOUNTAINHEXAGRAM FOR " + + "DEVELOPMENTHEXAGRAM FOR THE MARRYING MAIDENHEXAGRAM FOR ABUNDANCEHEXAGRA" + + "M FOR THE WANDERERHEXAGRAM FOR THE GENTLE WINDHEXAGRAM FOR THE JOYOUS LA" + + "KEHEXAGRAM FOR DISPERSIONHEXAGRAM FOR LIMITATIONHEXAGRAM FOR INNER TRUTH" + + "HEXAGRAM FOR SMALL PREPONDERANCEHEXAGRAM FOR AFTER COMPLETIONHEXAGRAM FO" + + "R BEFORE COMPLETIONYI SYLLABLE ITYI SYLLABLE IXYI SYLLABLE IYI SYLLABLE " + + "IPYI SYLLABLE IETYI SYLLABLE IEXYI SYLLABLE IEYI SYLLABLE IEPYI SYLLABLE" + + " ATYI SYLLABLE AXYI SYLLABLE AYI SYLLABLE APYI SYLLABLE UOXYI SYLLABLE U" + + "OYI SYLLABLE UOPYI SYLLABLE OTYI SYLLABLE OXYI SYLLABLE OYI SYLLABLE OPY" + + "I SYLLABLE EXYI SYLLABLE EYI SYLLABLE WUYI SYLLABLE BITYI SYLLABLE BIXYI" + + " SYLLABLE BIYI SYLLABLE BIPYI SYLLABLE BIETYI SYLLABLE BIEXYI SYLLABLE B" + + "IEYI SYLLABLE BIEPYI SYLLABLE BATYI SYLLABLE BAXYI SYLLABLE BAYI SYLLABL" + + "E BAPYI SYLLABLE BUOXYI SYLLABLE BUOYI SYLLABLE BUOPYI SYLLABLE BOTYI SY" + + "LLABLE BOXYI SYLLABLE BOYI SYLLABLE BOPYI SYLLABLE BEXYI SYLLABLE BEYI S" + + "YLLABLE BEPYI SYLLABLE BUTYI SYLLABLE BUXYI SYLLABLE BUYI SYLLABLE BUPYI" + + " SYLLABLE BURXYI SYLLABLE BURYI SYLLABLE BYTYI SYLLABLE BYXYI SYLLABLE B" + + "YYI SYLLABLE BYPYI SYLLABLE BYRXYI SYLLABLE BYRYI SYLLABLE PITYI SYLLABL" + + "E PIXYI SYLLABLE PIYI SYLLABLE PIPYI SYLLABLE PIEXYI SYLLABLE PIEYI SYLL" + + "ABLE PIEPYI SYLLABLE PATYI SYLLABLE PAXYI SYLLABLE PAYI SYLLABLE PAPYI S" + + "YLLABLE PUOXYI SYLLABLE PUOYI SYLLABLE PUOPYI SYLLABLE POTYI SYLLABLE PO" + + "XYI SYLLABLE POYI SYLLABLE POPYI SYLLABLE PUTYI SYLLABLE PUXYI SYLLABLE " + + "PUYI SYLLABLE PUPYI SYLLABLE PURXYI SYLLABLE PURYI SYLLABLE PYTYI SYLLAB" + + "LE PYXYI SYLLABLE PYYI SYLLABLE PYPYI SYLLABLE PYRXYI SYLLABLE PYRYI SYL" + + "LABLE BBITYI SYLLABLE BBIXYI SYLLABLE BBIYI SYLLABLE BBIPYI SYLLABLE BBI" + + "ETYI SYLLABLE BBIEXYI SYLLABLE BBIEYI SYLLABLE BBIEPYI SYLLABLE BBATYI S" + + "YLLABLE BBAXYI SYLLABLE BBAYI SYLLABLE BBAPYI SYLLABLE BBUOXYI SYLLABLE " + + "BBUOYI SYLLABLE BBUOPYI SYLLABLE BBOTYI SYLLABLE BBOXYI SYLLABLE BBOYI S") + ("" + + "YLLABLE BBOPYI SYLLABLE BBEXYI SYLLABLE BBEYI SYLLABLE BBEPYI SYLLABLE B" + + "BUTYI SYLLABLE BBUXYI SYLLABLE BBUYI SYLLABLE BBUPYI SYLLABLE BBURXYI SY" + + "LLABLE BBURYI SYLLABLE BBYTYI SYLLABLE BBYXYI SYLLABLE BBYYI SYLLABLE BB" + + "YPYI SYLLABLE NBITYI SYLLABLE NBIXYI SYLLABLE NBIYI SYLLABLE NBIPYI SYLL" + + "ABLE NBIEXYI SYLLABLE NBIEYI SYLLABLE NBIEPYI SYLLABLE NBATYI SYLLABLE N" + + "BAXYI SYLLABLE NBAYI SYLLABLE NBAPYI SYLLABLE NBOTYI SYLLABLE NBOXYI SYL" + + "LABLE NBOYI SYLLABLE NBOPYI SYLLABLE NBUTYI SYLLABLE NBUXYI SYLLABLE NBU" + + "YI SYLLABLE NBUPYI SYLLABLE NBURXYI SYLLABLE NBURYI SYLLABLE NBYTYI SYLL" + + "ABLE NBYXYI SYLLABLE NBYYI SYLLABLE NBYPYI SYLLABLE NBYRXYI SYLLABLE NBY" + + "RYI SYLLABLE HMITYI SYLLABLE HMIXYI SYLLABLE HMIYI SYLLABLE HMIPYI SYLLA" + + "BLE HMIEXYI SYLLABLE HMIEYI SYLLABLE HMIEPYI SYLLABLE HMATYI SYLLABLE HM" + + "AXYI SYLLABLE HMAYI SYLLABLE HMAPYI SYLLABLE HMUOXYI SYLLABLE HMUOYI SYL" + + "LABLE HMUOPYI SYLLABLE HMOTYI SYLLABLE HMOXYI SYLLABLE HMOYI SYLLABLE HM" + + "OPYI SYLLABLE HMUTYI SYLLABLE HMUXYI SYLLABLE HMUYI SYLLABLE HMUPYI SYLL" + + "ABLE HMURXYI SYLLABLE HMURYI SYLLABLE HMYXYI SYLLABLE HMYYI SYLLABLE HMY" + + "PYI SYLLABLE HMYRXYI SYLLABLE HMYRYI SYLLABLE MITYI SYLLABLE MIXYI SYLLA" + + "BLE MIYI SYLLABLE MIPYI SYLLABLE MIEXYI SYLLABLE MIEYI SYLLABLE MIEPYI S" + + "YLLABLE MATYI SYLLABLE MAXYI SYLLABLE MAYI SYLLABLE MAPYI SYLLABLE MUOTY" + + "I SYLLABLE MUOXYI SYLLABLE MUOYI SYLLABLE MUOPYI SYLLABLE MOTYI SYLLABLE" + + " MOXYI SYLLABLE MOYI SYLLABLE MOPYI SYLLABLE MEXYI SYLLABLE MEYI SYLLABL" + + "E MUTYI SYLLABLE MUXYI SYLLABLE MUYI SYLLABLE MUPYI SYLLABLE MURXYI SYLL" + + "ABLE MURYI SYLLABLE MYTYI SYLLABLE MYXYI SYLLABLE MYYI SYLLABLE MYPYI SY" + + "LLABLE FITYI SYLLABLE FIXYI SYLLABLE FIYI SYLLABLE FIPYI SYLLABLE FATYI " + + "SYLLABLE FAXYI SYLLABLE FAYI SYLLABLE FAPYI SYLLABLE FOXYI SYLLABLE FOYI" + + " SYLLABLE FOPYI SYLLABLE FUTYI SYLLABLE FUXYI SYLLABLE FUYI SYLLABLE FUP" + + "YI SYLLABLE FURXYI SYLLABLE FURYI SYLLABLE FYTYI SYLLABLE FYXYI SYLLABLE" + + " FYYI SYLLABLE FYPYI SYLLABLE VITYI SYLLABLE VIXYI SYLLABLE VIYI SYLLABL" + + "E VIPYI SYLLABLE VIETYI SYLLABLE VIEXYI SYLLABLE VIEYI SYLLABLE VIEPYI S" + + "YLLABLE VATYI SYLLABLE VAXYI SYLLABLE VAYI SYLLABLE VAPYI SYLLABLE VOTYI" + + " SYLLABLE VOXYI SYLLABLE VOYI SYLLABLE VOPYI SYLLABLE VEXYI SYLLABLE VEP" + + "YI SYLLABLE VUTYI SYLLABLE VUXYI SYLLABLE VUYI SYLLABLE VUPYI SYLLABLE V" + + "URXYI SYLLABLE VURYI SYLLABLE VYTYI SYLLABLE VYXYI SYLLABLE VYYI SYLLABL" + + "E VYPYI SYLLABLE VYRXYI SYLLABLE VYRYI SYLLABLE DITYI SYLLABLE DIXYI SYL" + + "LABLE DIYI SYLLABLE DIPYI SYLLABLE DIEXYI SYLLABLE DIEYI SYLLABLE DIEPYI" + + " SYLLABLE DATYI SYLLABLE DAXYI SYLLABLE DAYI SYLLABLE DAPYI SYLLABLE DUO" + + "XYI SYLLABLE DUOYI SYLLABLE DOTYI SYLLABLE DOXYI SYLLABLE DOYI SYLLABLE " + + "DOPYI SYLLABLE DEXYI SYLLABLE DEYI SYLLABLE DEPYI SYLLABLE DUTYI SYLLABL" + + "E DUXYI SYLLABLE DUYI SYLLABLE DUPYI SYLLABLE DURXYI SYLLABLE DURYI SYLL" + + "ABLE TITYI SYLLABLE TIXYI SYLLABLE TIYI SYLLABLE TIPYI SYLLABLE TIEXYI S" + + "YLLABLE TIEYI SYLLABLE TIEPYI SYLLABLE TATYI SYLLABLE TAXYI SYLLABLE TAY" + + "I SYLLABLE TAPYI SYLLABLE TUOTYI SYLLABLE TUOXYI SYLLABLE TUOYI SYLLABLE" + + " TUOPYI SYLLABLE TOTYI SYLLABLE TOXYI SYLLABLE TOYI SYLLABLE TOPYI SYLLA" + + "BLE TEXYI SYLLABLE TEYI SYLLABLE TEPYI SYLLABLE TUTYI SYLLABLE TUXYI SYL" + + "LABLE TUYI SYLLABLE TUPYI SYLLABLE TURXYI SYLLABLE TURYI SYLLABLE DDITYI" + + " SYLLABLE DDIXYI SYLLABLE DDIYI SYLLABLE DDIPYI SYLLABLE DDIEXYI SYLLABL" + + "E DDIEYI SYLLABLE DDIEPYI SYLLABLE DDATYI SYLLABLE DDAXYI SYLLABLE DDAYI" + + " SYLLABLE DDAPYI SYLLABLE DDUOXYI SYLLABLE DDUOYI SYLLABLE DDUOPYI SYLLA" + + "BLE DDOTYI SYLLABLE DDOXYI SYLLABLE DDOYI SYLLABLE DDOPYI SYLLABLE DDEXY" + + "I SYLLABLE DDEYI SYLLABLE DDEPYI SYLLABLE DDUTYI SYLLABLE DDUXYI SYLLABL" + + "E DDUYI SYLLABLE DDUPYI SYLLABLE DDURXYI SYLLABLE DDURYI SYLLABLE NDITYI" + + " SYLLABLE NDIXYI SYLLABLE NDIYI SYLLABLE NDIPYI SYLLABLE NDIEXYI SYLLABL" + + "E NDIEYI SYLLABLE NDATYI SYLLABLE NDAXYI SYLLABLE NDAYI SYLLABLE NDAPYI " + + "SYLLABLE NDOTYI SYLLABLE NDOXYI SYLLABLE NDOYI SYLLABLE NDOPYI SYLLABLE " + + "NDEXYI SYLLABLE NDEYI SYLLABLE NDEPYI SYLLABLE NDUTYI SYLLABLE NDUXYI SY" + + "LLABLE NDUYI SYLLABLE NDUPYI SYLLABLE NDURXYI SYLLABLE NDURYI SYLLABLE H" + + "NITYI SYLLABLE HNIXYI SYLLABLE HNIYI SYLLABLE HNIPYI SYLLABLE HNIETYI SY" + + "LLABLE HNIEXYI SYLLABLE HNIEYI SYLLABLE HNIEPYI SYLLABLE HNATYI SYLLABLE" + + " HNAXYI SYLLABLE HNAYI SYLLABLE HNAPYI SYLLABLE HNUOXYI SYLLABLE HNUOYI " + + "SYLLABLE HNOTYI SYLLABLE HNOXYI SYLLABLE HNOPYI SYLLABLE HNEXYI SYLLABLE" + + " HNEYI SYLLABLE HNEPYI SYLLABLE HNUTYI SYLLABLE NITYI SYLLABLE NIXYI SYL" + + "LABLE NIYI SYLLABLE NIPYI SYLLABLE NIEXYI SYLLABLE NIEYI SYLLABLE NIEPYI" + + " SYLLABLE NAXYI SYLLABLE NAYI SYLLABLE NAPYI SYLLABLE NUOXYI SYLLABLE NU" + + "OYI SYLLABLE NUOPYI SYLLABLE NOTYI SYLLABLE NOXYI SYLLABLE NOYI SYLLABLE" + + " NOPYI SYLLABLE NEXYI SYLLABLE NEYI SYLLABLE NEPYI SYLLABLE NUTYI SYLLAB") + ("" + + "LE NUXYI SYLLABLE NUYI SYLLABLE NUPYI SYLLABLE NURXYI SYLLABLE NURYI SYL" + + "LABLE HLITYI SYLLABLE HLIXYI SYLLABLE HLIYI SYLLABLE HLIPYI SYLLABLE HLI" + + "EXYI SYLLABLE HLIEYI SYLLABLE HLIEPYI SYLLABLE HLATYI SYLLABLE HLAXYI SY" + + "LLABLE HLAYI SYLLABLE HLAPYI SYLLABLE HLUOXYI SYLLABLE HLUOYI SYLLABLE H" + + "LUOPYI SYLLABLE HLOXYI SYLLABLE HLOYI SYLLABLE HLOPYI SYLLABLE HLEXYI SY" + + "LLABLE HLEYI SYLLABLE HLEPYI SYLLABLE HLUTYI SYLLABLE HLUXYI SYLLABLE HL" + + "UYI SYLLABLE HLUPYI SYLLABLE HLURXYI SYLLABLE HLURYI SYLLABLE HLYTYI SYL" + + "LABLE HLYXYI SYLLABLE HLYYI SYLLABLE HLYPYI SYLLABLE HLYRXYI SYLLABLE HL" + + "YRYI SYLLABLE LITYI SYLLABLE LIXYI SYLLABLE LIYI SYLLABLE LIPYI SYLLABLE" + + " LIETYI SYLLABLE LIEXYI SYLLABLE LIEYI SYLLABLE LIEPYI SYLLABLE LATYI SY" + + "LLABLE LAXYI SYLLABLE LAYI SYLLABLE LAPYI SYLLABLE LUOTYI SYLLABLE LUOXY" + + "I SYLLABLE LUOYI SYLLABLE LUOPYI SYLLABLE LOTYI SYLLABLE LOXYI SYLLABLE " + + "LOYI SYLLABLE LOPYI SYLLABLE LEXYI SYLLABLE LEYI SYLLABLE LEPYI SYLLABLE" + + " LUTYI SYLLABLE LUXYI SYLLABLE LUYI SYLLABLE LUPYI SYLLABLE LURXYI SYLLA" + + "BLE LURYI SYLLABLE LYTYI SYLLABLE LYXYI SYLLABLE LYYI SYLLABLE LYPYI SYL" + + "LABLE LYRXYI SYLLABLE LYRYI SYLLABLE GITYI SYLLABLE GIXYI SYLLABLE GIYI " + + "SYLLABLE GIPYI SYLLABLE GIETYI SYLLABLE GIEXYI SYLLABLE GIEYI SYLLABLE G" + + "IEPYI SYLLABLE GATYI SYLLABLE GAXYI SYLLABLE GAYI SYLLABLE GAPYI SYLLABL" + + "E GUOTYI SYLLABLE GUOXYI SYLLABLE GUOYI SYLLABLE GUOPYI SYLLABLE GOTYI S" + + "YLLABLE GOXYI SYLLABLE GOYI SYLLABLE GOPYI SYLLABLE GETYI SYLLABLE GEXYI" + + " SYLLABLE GEYI SYLLABLE GEPYI SYLLABLE GUTYI SYLLABLE GUXYI SYLLABLE GUY" + + "I SYLLABLE GUPYI SYLLABLE GURXYI SYLLABLE GURYI SYLLABLE KITYI SYLLABLE " + + "KIXYI SYLLABLE KIYI SYLLABLE KIPYI SYLLABLE KIEXYI SYLLABLE KIEYI SYLLAB" + + "LE KIEPYI SYLLABLE KATYI SYLLABLE KAXYI SYLLABLE KAYI SYLLABLE KAPYI SYL" + + "LABLE KUOXYI SYLLABLE KUOYI SYLLABLE KUOPYI SYLLABLE KOTYI SYLLABLE KOXY" + + "I SYLLABLE KOYI SYLLABLE KOPYI SYLLABLE KETYI SYLLABLE KEXYI SYLLABLE KE" + + "YI SYLLABLE KEPYI SYLLABLE KUTYI SYLLABLE KUXYI SYLLABLE KUYI SYLLABLE K" + + "UPYI SYLLABLE KURXYI SYLLABLE KURYI SYLLABLE GGITYI SYLLABLE GGIXYI SYLL" + + "ABLE GGIYI SYLLABLE GGIEXYI SYLLABLE GGIEYI SYLLABLE GGIEPYI SYLLABLE GG" + + "ATYI SYLLABLE GGAXYI SYLLABLE GGAYI SYLLABLE GGAPYI SYLLABLE GGUOTYI SYL" + + "LABLE GGUOXYI SYLLABLE GGUOYI SYLLABLE GGUOPYI SYLLABLE GGOTYI SYLLABLE " + + "GGOXYI SYLLABLE GGOYI SYLLABLE GGOPYI SYLLABLE GGETYI SYLLABLE GGEXYI SY" + + "LLABLE GGEYI SYLLABLE GGEPYI SYLLABLE GGUTYI SYLLABLE GGUXYI SYLLABLE GG" + + "UYI SYLLABLE GGUPYI SYLLABLE GGURXYI SYLLABLE GGURYI SYLLABLE MGIEXYI SY" + + "LLABLE MGIEYI SYLLABLE MGATYI SYLLABLE MGAXYI SYLLABLE MGAYI SYLLABLE MG" + + "APYI SYLLABLE MGUOXYI SYLLABLE MGUOYI SYLLABLE MGUOPYI SYLLABLE MGOTYI S" + + "YLLABLE MGOXYI SYLLABLE MGOYI SYLLABLE MGOPYI SYLLABLE MGEXYI SYLLABLE M" + + "GEYI SYLLABLE MGEPYI SYLLABLE MGUTYI SYLLABLE MGUXYI SYLLABLE MGUYI SYLL" + + "ABLE MGUPYI SYLLABLE MGURXYI SYLLABLE MGURYI SYLLABLE HXITYI SYLLABLE HX" + + "IXYI SYLLABLE HXIYI SYLLABLE HXIPYI SYLLABLE HXIETYI SYLLABLE HXIEXYI SY" + + "LLABLE HXIEYI SYLLABLE HXIEPYI SYLLABLE HXATYI SYLLABLE HXAXYI SYLLABLE " + + "HXAYI SYLLABLE HXAPYI SYLLABLE HXUOTYI SYLLABLE HXUOXYI SYLLABLE HXUOYI " + + "SYLLABLE HXUOPYI SYLLABLE HXOTYI SYLLABLE HXOXYI SYLLABLE HXOYI SYLLABLE" + + " HXOPYI SYLLABLE HXEXYI SYLLABLE HXEYI SYLLABLE HXEPYI SYLLABLE NGIEXYI " + + "SYLLABLE NGIEYI SYLLABLE NGIEPYI SYLLABLE NGATYI SYLLABLE NGAXYI SYLLABL" + + "E NGAYI SYLLABLE NGAPYI SYLLABLE NGUOTYI SYLLABLE NGUOXYI SYLLABLE NGUOY" + + "I SYLLABLE NGOTYI SYLLABLE NGOXYI SYLLABLE NGOYI SYLLABLE NGOPYI SYLLABL" + + "E NGEXYI SYLLABLE NGEYI SYLLABLE NGEPYI SYLLABLE HITYI SYLLABLE HIEXYI S" + + "YLLABLE HIEYI SYLLABLE HATYI SYLLABLE HAXYI SYLLABLE HAYI SYLLABLE HAPYI" + + " SYLLABLE HUOTYI SYLLABLE HUOXYI SYLLABLE HUOYI SYLLABLE HUOPYI SYLLABLE" + + " HOTYI SYLLABLE HOXYI SYLLABLE HOYI SYLLABLE HOPYI SYLLABLE HEXYI SYLLAB" + + "LE HEYI SYLLABLE HEPYI SYLLABLE WATYI SYLLABLE WAXYI SYLLABLE WAYI SYLLA" + + "BLE WAPYI SYLLABLE WUOXYI SYLLABLE WUOYI SYLLABLE WUOPYI SYLLABLE WOXYI " + + "SYLLABLE WOYI SYLLABLE WOPYI SYLLABLE WEXYI SYLLABLE WEYI SYLLABLE WEPYI" + + " SYLLABLE ZITYI SYLLABLE ZIXYI SYLLABLE ZIYI SYLLABLE ZIPYI SYLLABLE ZIE" + + "XYI SYLLABLE ZIEYI SYLLABLE ZIEPYI SYLLABLE ZATYI SYLLABLE ZAXYI SYLLABL" + + "E ZAYI SYLLABLE ZAPYI SYLLABLE ZUOXYI SYLLABLE ZUOYI SYLLABLE ZUOPYI SYL" + + "LABLE ZOTYI SYLLABLE ZOXYI SYLLABLE ZOYI SYLLABLE ZOPYI SYLLABLE ZEXYI S" + + "YLLABLE ZEYI SYLLABLE ZEPYI SYLLABLE ZUTYI SYLLABLE ZUXYI SYLLABLE ZUYI " + + "SYLLABLE ZUPYI SYLLABLE ZURXYI SYLLABLE ZURYI SYLLABLE ZYTYI SYLLABLE ZY" + + "XYI SYLLABLE ZYYI SYLLABLE ZYPYI SYLLABLE ZYRXYI SYLLABLE ZYRYI SYLLABLE" + + " CITYI SYLLABLE CIXYI SYLLABLE CIYI SYLLABLE CIPYI SYLLABLE CIETYI SYLLA" + + "BLE CIEXYI SYLLABLE CIEYI SYLLABLE CIEPYI SYLLABLE CATYI SYLLABLE CAXYI " + + "SYLLABLE CAYI SYLLABLE CAPYI SYLLABLE CUOXYI SYLLABLE CUOYI SYLLABLE CUO") + ("" + + "PYI SYLLABLE COTYI SYLLABLE COXYI SYLLABLE COYI SYLLABLE COPYI SYLLABLE " + + "CEXYI SYLLABLE CEYI SYLLABLE CEPYI SYLLABLE CUTYI SYLLABLE CUXYI SYLLABL" + + "E CUYI SYLLABLE CUPYI SYLLABLE CURXYI SYLLABLE CURYI SYLLABLE CYTYI SYLL" + + "ABLE CYXYI SYLLABLE CYYI SYLLABLE CYPYI SYLLABLE CYRXYI SYLLABLE CYRYI S" + + "YLLABLE ZZITYI SYLLABLE ZZIXYI SYLLABLE ZZIYI SYLLABLE ZZIPYI SYLLABLE Z" + + "ZIETYI SYLLABLE ZZIEXYI SYLLABLE ZZIEYI SYLLABLE ZZIEPYI SYLLABLE ZZATYI" + + " SYLLABLE ZZAXYI SYLLABLE ZZAYI SYLLABLE ZZAPYI SYLLABLE ZZOXYI SYLLABLE" + + " ZZOYI SYLLABLE ZZOPYI SYLLABLE ZZEXYI SYLLABLE ZZEYI SYLLABLE ZZEPYI SY" + + "LLABLE ZZUXYI SYLLABLE ZZUYI SYLLABLE ZZUPYI SYLLABLE ZZURXYI SYLLABLE Z" + + "ZURYI SYLLABLE ZZYTYI SYLLABLE ZZYXYI SYLLABLE ZZYYI SYLLABLE ZZYPYI SYL" + + "LABLE ZZYRXYI SYLLABLE ZZYRYI SYLLABLE NZITYI SYLLABLE NZIXYI SYLLABLE N" + + "ZIYI SYLLABLE NZIPYI SYLLABLE NZIEXYI SYLLABLE NZIEYI SYLLABLE NZIEPYI S" + + "YLLABLE NZATYI SYLLABLE NZAXYI SYLLABLE NZAYI SYLLABLE NZAPYI SYLLABLE N" + + "ZUOXYI SYLLABLE NZUOYI SYLLABLE NZOXYI SYLLABLE NZOPYI SYLLABLE NZEXYI S" + + "YLLABLE NZEYI SYLLABLE NZUXYI SYLLABLE NZUYI SYLLABLE NZUPYI SYLLABLE NZ" + + "URXYI SYLLABLE NZURYI SYLLABLE NZYTYI SYLLABLE NZYXYI SYLLABLE NZYYI SYL" + + "LABLE NZYPYI SYLLABLE NZYRXYI SYLLABLE NZYRYI SYLLABLE SITYI SYLLABLE SI" + + "XYI SYLLABLE SIYI SYLLABLE SIPYI SYLLABLE SIEXYI SYLLABLE SIEYI SYLLABLE" + + " SIEPYI SYLLABLE SATYI SYLLABLE SAXYI SYLLABLE SAYI SYLLABLE SAPYI SYLLA" + + "BLE SUOXYI SYLLABLE SUOYI SYLLABLE SUOPYI SYLLABLE SOTYI SYLLABLE SOXYI " + + "SYLLABLE SOYI SYLLABLE SOPYI SYLLABLE SEXYI SYLLABLE SEYI SYLLABLE SEPYI" + + " SYLLABLE SUTYI SYLLABLE SUXYI SYLLABLE SUYI SYLLABLE SUPYI SYLLABLE SUR" + + "XYI SYLLABLE SURYI SYLLABLE SYTYI SYLLABLE SYXYI SYLLABLE SYYI SYLLABLE " + + "SYPYI SYLLABLE SYRXYI SYLLABLE SYRYI SYLLABLE SSITYI SYLLABLE SSIXYI SYL" + + "LABLE SSIYI SYLLABLE SSIPYI SYLLABLE SSIEXYI SYLLABLE SSIEYI SYLLABLE SS" + + "IEPYI SYLLABLE SSATYI SYLLABLE SSAXYI SYLLABLE SSAYI SYLLABLE SSAPYI SYL" + + "LABLE SSOTYI SYLLABLE SSOXYI SYLLABLE SSOYI SYLLABLE SSOPYI SYLLABLE SSE" + + "XYI SYLLABLE SSEYI SYLLABLE SSEPYI SYLLABLE SSUTYI SYLLABLE SSUXYI SYLLA" + + "BLE SSUYI SYLLABLE SSUPYI SYLLABLE SSYTYI SYLLABLE SSYXYI SYLLABLE SSYYI" + + " SYLLABLE SSYPYI SYLLABLE SSYRXYI SYLLABLE SSYRYI SYLLABLE ZHATYI SYLLAB" + + "LE ZHAXYI SYLLABLE ZHAYI SYLLABLE ZHAPYI SYLLABLE ZHUOXYI SYLLABLE ZHUOY" + + "I SYLLABLE ZHUOPYI SYLLABLE ZHOTYI SYLLABLE ZHOXYI SYLLABLE ZHOYI SYLLAB" + + "LE ZHOPYI SYLLABLE ZHETYI SYLLABLE ZHEXYI SYLLABLE ZHEYI SYLLABLE ZHEPYI" + + " SYLLABLE ZHUTYI SYLLABLE ZHUXYI SYLLABLE ZHUYI SYLLABLE ZHUPYI SYLLABLE" + + " ZHURXYI SYLLABLE ZHURYI SYLLABLE ZHYTYI SYLLABLE ZHYXYI SYLLABLE ZHYYI " + + "SYLLABLE ZHYPYI SYLLABLE ZHYRXYI SYLLABLE ZHYRYI SYLLABLE CHATYI SYLLABL" + + "E CHAXYI SYLLABLE CHAYI SYLLABLE CHAPYI SYLLABLE CHUOTYI SYLLABLE CHUOXY" + + "I SYLLABLE CHUOYI SYLLABLE CHUOPYI SYLLABLE CHOTYI SYLLABLE CHOXYI SYLLA" + + "BLE CHOYI SYLLABLE CHOPYI SYLLABLE CHETYI SYLLABLE CHEXYI SYLLABLE CHEYI" + + " SYLLABLE CHEPYI SYLLABLE CHUXYI SYLLABLE CHUYI SYLLABLE CHUPYI SYLLABLE" + + " CHURXYI SYLLABLE CHURYI SYLLABLE CHYTYI SYLLABLE CHYXYI SYLLABLE CHYYI " + + "SYLLABLE CHYPYI SYLLABLE CHYRXYI SYLLABLE CHYRYI SYLLABLE RRAXYI SYLLABL" + + "E RRAYI SYLLABLE RRUOXYI SYLLABLE RRUOYI SYLLABLE RROTYI SYLLABLE RROXYI" + + " SYLLABLE RROYI SYLLABLE RROPYI SYLLABLE RRETYI SYLLABLE RREXYI SYLLABLE" + + " RREYI SYLLABLE RREPYI SYLLABLE RRUTYI SYLLABLE RRUXYI SYLLABLE RRUYI SY" + + "LLABLE RRUPYI SYLLABLE RRURXYI SYLLABLE RRURYI SYLLABLE RRYTYI SYLLABLE " + + "RRYXYI SYLLABLE RRYYI SYLLABLE RRYPYI SYLLABLE RRYRXYI SYLLABLE RRYRYI S" + + "YLLABLE NRATYI SYLLABLE NRAXYI SYLLABLE NRAYI SYLLABLE NRAPYI SYLLABLE N" + + "ROXYI SYLLABLE NROYI SYLLABLE NROPYI SYLLABLE NRETYI SYLLABLE NREXYI SYL" + + "LABLE NREYI SYLLABLE NREPYI SYLLABLE NRUTYI SYLLABLE NRUXYI SYLLABLE NRU" + + "YI SYLLABLE NRUPYI SYLLABLE NRURXYI SYLLABLE NRURYI SYLLABLE NRYTYI SYLL" + + "ABLE NRYXYI SYLLABLE NRYYI SYLLABLE NRYPYI SYLLABLE NRYRXYI SYLLABLE NRY" + + "RYI SYLLABLE SHATYI SYLLABLE SHAXYI SYLLABLE SHAYI SYLLABLE SHAPYI SYLLA" + + "BLE SHUOXYI SYLLABLE SHUOYI SYLLABLE SHUOPYI SYLLABLE SHOTYI SYLLABLE SH" + + "OXYI SYLLABLE SHOYI SYLLABLE SHOPYI SYLLABLE SHETYI SYLLABLE SHEXYI SYLL" + + "ABLE SHEYI SYLLABLE SHEPYI SYLLABLE SHUTYI SYLLABLE SHUXYI SYLLABLE SHUY" + + "I SYLLABLE SHUPYI SYLLABLE SHURXYI SYLLABLE SHURYI SYLLABLE SHYTYI SYLLA" + + "BLE SHYXYI SYLLABLE SHYYI SYLLABLE SHYPYI SYLLABLE SHYRXYI SYLLABLE SHYR" + + "YI SYLLABLE RATYI SYLLABLE RAXYI SYLLABLE RAYI SYLLABLE RAPYI SYLLABLE R" + + "UOXYI SYLLABLE RUOYI SYLLABLE RUOPYI SYLLABLE ROTYI SYLLABLE ROXYI SYLLA" + + "BLE ROYI SYLLABLE ROPYI SYLLABLE REXYI SYLLABLE REYI SYLLABLE REPYI SYLL" + + "ABLE RUTYI SYLLABLE RUXYI SYLLABLE RUYI SYLLABLE RUPYI SYLLABLE RURXYI S" + + "YLLABLE RURYI SYLLABLE RYTYI SYLLABLE RYXYI SYLLABLE RYYI SYLLABLE RYPYI" + + " SYLLABLE RYRXYI SYLLABLE RYRYI SYLLABLE JITYI SYLLABLE JIXYI SYLLABLE J") + ("" + + "IYI SYLLABLE JIPYI SYLLABLE JIETYI SYLLABLE JIEXYI SYLLABLE JIEYI SYLLAB" + + "LE JIEPYI SYLLABLE JUOTYI SYLLABLE JUOXYI SYLLABLE JUOYI SYLLABLE JUOPYI" + + " SYLLABLE JOTYI SYLLABLE JOXYI SYLLABLE JOYI SYLLABLE JOPYI SYLLABLE JUT" + + "YI SYLLABLE JUXYI SYLLABLE JUYI SYLLABLE JUPYI SYLLABLE JURXYI SYLLABLE " + + "JURYI SYLLABLE JYTYI SYLLABLE JYXYI SYLLABLE JYYI SYLLABLE JYPYI SYLLABL" + + "E JYRXYI SYLLABLE JYRYI SYLLABLE QITYI SYLLABLE QIXYI SYLLABLE QIYI SYLL" + + "ABLE QIPYI SYLLABLE QIETYI SYLLABLE QIEXYI SYLLABLE QIEYI SYLLABLE QIEPY" + + "I SYLLABLE QUOTYI SYLLABLE QUOXYI SYLLABLE QUOYI SYLLABLE QUOPYI SYLLABL" + + "E QOTYI SYLLABLE QOXYI SYLLABLE QOYI SYLLABLE QOPYI SYLLABLE QUTYI SYLLA" + + "BLE QUXYI SYLLABLE QUYI SYLLABLE QUPYI SYLLABLE QURXYI SYLLABLE QURYI SY" + + "LLABLE QYTYI SYLLABLE QYXYI SYLLABLE QYYI SYLLABLE QYPYI SYLLABLE QYRXYI" + + " SYLLABLE QYRYI SYLLABLE JJITYI SYLLABLE JJIXYI SYLLABLE JJIYI SYLLABLE " + + "JJIPYI SYLLABLE JJIETYI SYLLABLE JJIEXYI SYLLABLE JJIEYI SYLLABLE JJIEPY" + + "I SYLLABLE JJUOXYI SYLLABLE JJUOYI SYLLABLE JJUOPYI SYLLABLE JJOTYI SYLL" + + "ABLE JJOXYI SYLLABLE JJOYI SYLLABLE JJOPYI SYLLABLE JJUTYI SYLLABLE JJUX" + + "YI SYLLABLE JJUYI SYLLABLE JJUPYI SYLLABLE JJURXYI SYLLABLE JJURYI SYLLA" + + "BLE JJYTYI SYLLABLE JJYXYI SYLLABLE JJYYI SYLLABLE JJYPYI SYLLABLE NJITY" + + "I SYLLABLE NJIXYI SYLLABLE NJIYI SYLLABLE NJIPYI SYLLABLE NJIETYI SYLLAB" + + "LE NJIEXYI SYLLABLE NJIEYI SYLLABLE NJIEPYI SYLLABLE NJUOXYI SYLLABLE NJ" + + "UOYI SYLLABLE NJOTYI SYLLABLE NJOXYI SYLLABLE NJOYI SYLLABLE NJOPYI SYLL" + + "ABLE NJUXYI SYLLABLE NJUYI SYLLABLE NJUPYI SYLLABLE NJURXYI SYLLABLE NJU" + + "RYI SYLLABLE NJYTYI SYLLABLE NJYXYI SYLLABLE NJYYI SYLLABLE NJYPYI SYLLA" + + "BLE NJYRXYI SYLLABLE NJYRYI SYLLABLE NYITYI SYLLABLE NYIXYI SYLLABLE NYI" + + "YI SYLLABLE NYIPYI SYLLABLE NYIETYI SYLLABLE NYIEXYI SYLLABLE NYIEYI SYL" + + "LABLE NYIEPYI SYLLABLE NYUOXYI SYLLABLE NYUOYI SYLLABLE NYUOPYI SYLLABLE" + + " NYOTYI SYLLABLE NYOXYI SYLLABLE NYOYI SYLLABLE NYOPYI SYLLABLE NYUTYI S" + + "YLLABLE NYUXYI SYLLABLE NYUYI SYLLABLE NYUPYI SYLLABLE XITYI SYLLABLE XI" + + "XYI SYLLABLE XIYI SYLLABLE XIPYI SYLLABLE XIETYI SYLLABLE XIEXYI SYLLABL" + + "E XIEYI SYLLABLE XIEPYI SYLLABLE XUOXYI SYLLABLE XUOYI SYLLABLE XOTYI SY" + + "LLABLE XOXYI SYLLABLE XOYI SYLLABLE XOPYI SYLLABLE XYTYI SYLLABLE XYXYI " + + "SYLLABLE XYYI SYLLABLE XYPYI SYLLABLE XYRXYI SYLLABLE XYRYI SYLLABLE YIT" + + "YI SYLLABLE YIXYI SYLLABLE YIYI SYLLABLE YIPYI SYLLABLE YIETYI SYLLABLE " + + "YIEXYI SYLLABLE YIEYI SYLLABLE YIEPYI SYLLABLE YUOTYI SYLLABLE YUOXYI SY" + + "LLABLE YUOYI SYLLABLE YUOPYI SYLLABLE YOTYI SYLLABLE YOXYI SYLLABLE YOYI" + + " SYLLABLE YOPYI SYLLABLE YUTYI SYLLABLE YUXYI SYLLABLE YUYI SYLLABLE YUP" + + "YI SYLLABLE YURXYI SYLLABLE YURYI SYLLABLE YYTYI SYLLABLE YYXYI SYLLABLE" + + " YYYI SYLLABLE YYPYI SYLLABLE YYRXYI SYLLABLE YYRYI RADICAL QOTYI RADICA" + + "L LIYI RADICAL KITYI RADICAL NYIPYI RADICAL CYPYI RADICAL SSIYI RADICAL " + + "GGOPYI RADICAL GEPYI RADICAL MIYI RADICAL HXITYI RADICAL LYRYI RADICAL B" + + "BUTYI RADICAL MOPYI RADICAL YOYI RADICAL PUTYI RADICAL HXUOYI RADICAL TA" + + "TYI RADICAL GAYI RADICAL ZUPYI RADICAL CYTYI RADICAL DDURYI RADICAL BURY" + + "I RADICAL GGUOYI RADICAL NYOPYI RADICAL TUYI RADICAL OPYI RADICAL JJUTYI" + + " RADICAL ZOTYI RADICAL PYTYI RADICAL HMOYI RADICAL YITYI RADICAL VURYI R" + + "ADICAL SHYYI RADICAL VEPYI RADICAL ZAYI RADICAL JOYI RADICAL NZUPYI RADI" + + "CAL JJYYI RADICAL GOTYI RADICAL JJIEYI RADICAL WOYI RADICAL DUYI RADICAL" + + " SHURYI RADICAL LIEYI RADICAL CYYI RADICAL CUOPYI RADICAL CIPYI RADICAL " + + "HXOPYI RADICAL SHATYI RADICAL ZURYI RADICAL SHOPYI RADICAL CHEYI RADICAL" + + " ZZIETYI RADICAL NBIEYI RADICAL KELISU LETTER BALISU LETTER PALISU LETTE" + + "R PHALISU LETTER DALISU LETTER TALISU LETTER THALISU LETTER GALISU LETTE" + + "R KALISU LETTER KHALISU LETTER JALISU LETTER CALISU LETTER CHALISU LETTE" + + "R DZALISU LETTER TSALISU LETTER TSHALISU LETTER MALISU LETTER NALISU LET" + + "TER LALISU LETTER SALISU LETTER ZHALISU LETTER ZALISU LETTER NGALISU LET" + + "TER HALISU LETTER XALISU LETTER HHALISU LETTER FALISU LETTER WALISU LETT" + + "ER SHALISU LETTER YALISU LETTER GHALISU LETTER ALISU LETTER AELISU LETTE" + + "R ELISU LETTER EULISU LETTER ILISU LETTER OLISU LETTER ULISU LETTER UELI" + + "SU LETTER UHLISU LETTER OELISU LETTER TONE MYA TILISU LETTER TONE NA POL" + + "ISU LETTER TONE MYA CYALISU LETTER TONE MYA BOLISU LETTER TONE MYA NALIS" + + "U LETTER TONE MYA JEULISU PUNCTUATION COMMALISU PUNCTUATION FULL STOPVAI" + + " SYLLABLE EEVAI SYLLABLE EENVAI SYLLABLE HEEVAI SYLLABLE WEEVAI SYLLABLE" + + " WEENVAI SYLLABLE PEEVAI SYLLABLE BHEEVAI SYLLABLE BEEVAI SYLLABLE MBEEV" + + "AI SYLLABLE KPEEVAI SYLLABLE MGBEEVAI SYLLABLE GBEEVAI SYLLABLE FEEVAI S" + + "YLLABLE VEEVAI SYLLABLE TEEVAI SYLLABLE THEEVAI SYLLABLE DHEEVAI SYLLABL" + + "E DHHEEVAI SYLLABLE LEEVAI SYLLABLE REEVAI SYLLABLE DEEVAI SYLLABLE NDEE" + + "VAI SYLLABLE SEEVAI SYLLABLE SHEEVAI SYLLABLE ZEEVAI SYLLABLE ZHEEVAI SY") + ("" + + "LLABLE CEEVAI SYLLABLE JEEVAI SYLLABLE NJEEVAI SYLLABLE YEEVAI SYLLABLE " + + "KEEVAI SYLLABLE NGGEEVAI SYLLABLE GEEVAI SYLLABLE MEEVAI SYLLABLE NEEVAI" + + " SYLLABLE NYEEVAI SYLLABLE IVAI SYLLABLE INVAI SYLLABLE HIVAI SYLLABLE H" + + "INVAI SYLLABLE WIVAI SYLLABLE WINVAI SYLLABLE PIVAI SYLLABLE BHIVAI SYLL" + + "ABLE BIVAI SYLLABLE MBIVAI SYLLABLE KPIVAI SYLLABLE MGBIVAI SYLLABLE GBI" + + "VAI SYLLABLE FIVAI SYLLABLE VIVAI SYLLABLE TIVAI SYLLABLE THIVAI SYLLABL" + + "E DHIVAI SYLLABLE DHHIVAI SYLLABLE LIVAI SYLLABLE RIVAI SYLLABLE DIVAI S" + + "YLLABLE NDIVAI SYLLABLE SIVAI SYLLABLE SHIVAI SYLLABLE ZIVAI SYLLABLE ZH" + + "IVAI SYLLABLE CIVAI SYLLABLE JIVAI SYLLABLE NJIVAI SYLLABLE YIVAI SYLLAB" + + "LE KIVAI SYLLABLE NGGIVAI SYLLABLE GIVAI SYLLABLE MIVAI SYLLABLE NIVAI S" + + "YLLABLE NYIVAI SYLLABLE AVAI SYLLABLE ANVAI SYLLABLE NGANVAI SYLLABLE HA" + + "VAI SYLLABLE HANVAI SYLLABLE WAVAI SYLLABLE WANVAI SYLLABLE PAVAI SYLLAB" + + "LE BHAVAI SYLLABLE BAVAI SYLLABLE MBAVAI SYLLABLE KPAVAI SYLLABLE KPANVA" + + "I SYLLABLE MGBAVAI SYLLABLE GBAVAI SYLLABLE FAVAI SYLLABLE VAVAI SYLLABL" + + "E TAVAI SYLLABLE THAVAI SYLLABLE DHAVAI SYLLABLE DHHAVAI SYLLABLE LAVAI " + + "SYLLABLE RAVAI SYLLABLE DAVAI SYLLABLE NDAVAI SYLLABLE SAVAI SYLLABLE SH" + + "AVAI SYLLABLE ZAVAI SYLLABLE ZHAVAI SYLLABLE CAVAI SYLLABLE JAVAI SYLLAB" + + "LE NJAVAI SYLLABLE YAVAI SYLLABLE KAVAI SYLLABLE KANVAI SYLLABLE NGGAVAI" + + " SYLLABLE GAVAI SYLLABLE MAVAI SYLLABLE NAVAI SYLLABLE NYAVAI SYLLABLE O" + + "OVAI SYLLABLE OONVAI SYLLABLE HOOVAI SYLLABLE WOOVAI SYLLABLE WOONVAI SY" + + "LLABLE POOVAI SYLLABLE BHOOVAI SYLLABLE BOOVAI SYLLABLE MBOOVAI SYLLABLE" + + " KPOOVAI SYLLABLE MGBOOVAI SYLLABLE GBOOVAI SYLLABLE FOOVAI SYLLABLE VOO" + + "VAI SYLLABLE TOOVAI SYLLABLE THOOVAI SYLLABLE DHOOVAI SYLLABLE DHHOOVAI " + + "SYLLABLE LOOVAI SYLLABLE ROOVAI SYLLABLE DOOVAI SYLLABLE NDOOVAI SYLLABL" + + "E SOOVAI SYLLABLE SHOOVAI SYLLABLE ZOOVAI SYLLABLE ZHOOVAI SYLLABLE COOV" + + "AI SYLLABLE JOOVAI SYLLABLE NJOOVAI SYLLABLE YOOVAI SYLLABLE KOOVAI SYLL" + + "ABLE NGGOOVAI SYLLABLE GOOVAI SYLLABLE MOOVAI SYLLABLE NOOVAI SYLLABLE N" + + "YOOVAI SYLLABLE UVAI SYLLABLE UNVAI SYLLABLE HUVAI SYLLABLE HUNVAI SYLLA" + + "BLE WUVAI SYLLABLE WUNVAI SYLLABLE PUVAI SYLLABLE BHUVAI SYLLABLE BUVAI " + + "SYLLABLE MBUVAI SYLLABLE KPUVAI SYLLABLE MGBUVAI SYLLABLE GBUVAI SYLLABL" + + "E FUVAI SYLLABLE VUVAI SYLLABLE TUVAI SYLLABLE THUVAI SYLLABLE DHUVAI SY" + + "LLABLE DHHUVAI SYLLABLE LUVAI SYLLABLE RUVAI SYLLABLE DUVAI SYLLABLE NDU" + + "VAI SYLLABLE SUVAI SYLLABLE SHUVAI SYLLABLE ZUVAI SYLLABLE ZHUVAI SYLLAB" + + "LE CUVAI SYLLABLE JUVAI SYLLABLE NJUVAI SYLLABLE YUVAI SYLLABLE KUVAI SY" + + "LLABLE NGGUVAI SYLLABLE GUVAI SYLLABLE MUVAI SYLLABLE NUVAI SYLLABLE NYU" + + "VAI SYLLABLE OVAI SYLLABLE ONVAI SYLLABLE NGONVAI SYLLABLE HOVAI SYLLABL" + + "E HONVAI SYLLABLE WOVAI SYLLABLE WONVAI SYLLABLE POVAI SYLLABLE BHOVAI S" + + "YLLABLE BOVAI SYLLABLE MBOVAI SYLLABLE KPOVAI SYLLABLE MGBOVAI SYLLABLE " + + "GBOVAI SYLLABLE GBONVAI SYLLABLE FOVAI SYLLABLE VOVAI SYLLABLE TOVAI SYL" + + "LABLE THOVAI SYLLABLE DHOVAI SYLLABLE DHHOVAI SYLLABLE LOVAI SYLLABLE RO" + + "VAI SYLLABLE DOVAI SYLLABLE NDOVAI SYLLABLE SOVAI SYLLABLE SHOVAI SYLLAB" + + "LE ZOVAI SYLLABLE ZHOVAI SYLLABLE COVAI SYLLABLE JOVAI SYLLABLE NJOVAI S" + + "YLLABLE YOVAI SYLLABLE KOVAI SYLLABLE NGGOVAI SYLLABLE GOVAI SYLLABLE MO" + + "VAI SYLLABLE NOVAI SYLLABLE NYOVAI SYLLABLE EVAI SYLLABLE ENVAI SYLLABLE" + + " NGENVAI SYLLABLE HEVAI SYLLABLE HENVAI SYLLABLE WEVAI SYLLABLE WENVAI S" + + "YLLABLE PEVAI SYLLABLE BHEVAI SYLLABLE BEVAI SYLLABLE MBEVAI SYLLABLE KP" + + "EVAI SYLLABLE KPENVAI SYLLABLE MGBEVAI SYLLABLE GBEVAI SYLLABLE GBENVAI " + + "SYLLABLE FEVAI SYLLABLE VEVAI SYLLABLE TEVAI SYLLABLE THEVAI SYLLABLE DH" + + "EVAI SYLLABLE DHHEVAI SYLLABLE LEVAI SYLLABLE REVAI SYLLABLE DEVAI SYLLA" + + "BLE NDEVAI SYLLABLE SEVAI SYLLABLE SHEVAI SYLLABLE ZEVAI SYLLABLE ZHEVAI" + + " SYLLABLE CEVAI SYLLABLE JEVAI SYLLABLE NJEVAI SYLLABLE YEVAI SYLLABLE K" + + "EVAI SYLLABLE NGGEVAI SYLLABLE NGGENVAI SYLLABLE GEVAI SYLLABLE GENVAI S" + + "YLLABLE MEVAI SYLLABLE NEVAI SYLLABLE NYEVAI SYLLABLE NGVAI SYLLABLE LEN" + + "GTHENERVAI COMMAVAI FULL STOPVAI QUESTION MARKVAI SYLLABLE NDOLE FAVAI S" + + "YLLABLE NDOLE KAVAI SYLLABLE NDOLE SOOVAI SYMBOL FEENGVAI SYMBOL KEENGVA" + + "I SYMBOL TINGVAI SYMBOL NIIVAI SYMBOL BANGVAI SYMBOL FAAVAI SYMBOL TAAVA" + + "I SYMBOL DANGVAI SYMBOL DOONGVAI SYMBOL KUNGVAI SYMBOL TONGVAI SYMBOL DO" + + "-OVAI SYMBOL JONGVAI DIGIT ZEROVAI DIGIT ONEVAI DIGIT TWOVAI DIGIT THREE" + + "VAI DIGIT FOURVAI DIGIT FIVEVAI DIGIT SIXVAI DIGIT SEVENVAI DIGIT EIGHTV" + + "AI DIGIT NINEVAI SYLLABLE NDOLE MAVAI SYLLABLE NDOLE DOCYRILLIC CAPITAL " + + "LETTER ZEMLYACYRILLIC SMALL LETTER ZEMLYACYRILLIC CAPITAL LETTER DZELOCY" + + "RILLIC SMALL LETTER DZELOCYRILLIC CAPITAL LETTER REVERSED DZECYRILLIC SM" + + "ALL LETTER REVERSED DZECYRILLIC CAPITAL LETTER IOTACYRILLIC SMALL LETTER" + + " IOTACYRILLIC CAPITAL LETTER DJERVCYRILLIC SMALL LETTER DJERVCYRILLIC CA") + ("" + + "PITAL LETTER MONOGRAPH UKCYRILLIC SMALL LETTER MONOGRAPH UKCYRILLIC CAPI" + + "TAL LETTER BROAD OMEGACYRILLIC SMALL LETTER BROAD OMEGACYRILLIC CAPITAL " + + "LETTER NEUTRAL YERCYRILLIC SMALL LETTER NEUTRAL YERCYRILLIC CAPITAL LETT" + + "ER YERU WITH BACK YERCYRILLIC SMALL LETTER YERU WITH BACK YERCYRILLIC CA" + + "PITAL LETTER IOTIFIED YATCYRILLIC SMALL LETTER IOTIFIED YATCYRILLIC CAPI" + + "TAL LETTER REVERSED YUCYRILLIC SMALL LETTER REVERSED YUCYRILLIC CAPITAL " + + "LETTER IOTIFIED ACYRILLIC SMALL LETTER IOTIFIED ACYRILLIC CAPITAL LETTER" + + " CLOSED LITTLE YUSCYRILLIC SMALL LETTER CLOSED LITTLE YUSCYRILLIC CAPITA" + + "L LETTER BLENDED YUSCYRILLIC SMALL LETTER BLENDED YUSCYRILLIC CAPITAL LE" + + "TTER IOTIFIED CLOSED LITTLE YUSCYRILLIC SMALL LETTER IOTIFIED CLOSED LIT" + + "TLE YUSCYRILLIC CAPITAL LETTER YNCYRILLIC SMALL LETTER YNCYRILLIC CAPITA" + + "L LETTER REVERSED TSECYRILLIC SMALL LETTER REVERSED TSECYRILLIC CAPITAL " + + "LETTER SOFT DECYRILLIC SMALL LETTER SOFT DECYRILLIC CAPITAL LETTER SOFT " + + "ELCYRILLIC SMALL LETTER SOFT ELCYRILLIC CAPITAL LETTER SOFT EMCYRILLIC S" + + "MALL LETTER SOFT EMCYRILLIC CAPITAL LETTER MONOCULAR OCYRILLIC SMALL LET" + + "TER MONOCULAR OCYRILLIC CAPITAL LETTER BINOCULAR OCYRILLIC SMALL LETTER " + + "BINOCULAR OCYRILLIC CAPITAL LETTER DOUBLE MONOCULAR OCYRILLIC SMALL LETT" + + "ER DOUBLE MONOCULAR OCYRILLIC LETTER MULTIOCULAR OCOMBINING CYRILLIC VZM" + + "ETCOMBINING CYRILLIC TEN MILLIONS SIGNCOMBINING CYRILLIC HUNDRED MILLION" + + "S SIGNCOMBINING CYRILLIC THOUSAND MILLIONS SIGNSLAVONIC ASTERISKCOMBININ" + + "G CYRILLIC LETTER UKRAINIAN IECOMBINING CYRILLIC LETTER ICOMBINING CYRIL" + + "LIC LETTER YICOMBINING CYRILLIC LETTER UCOMBINING CYRILLIC LETTER HARD S" + + "IGNCOMBINING CYRILLIC LETTER YERUCOMBINING CYRILLIC LETTER SOFT SIGNCOMB" + + "INING CYRILLIC LETTER OMEGACOMBINING CYRILLIC KAVYKACOMBINING CYRILLIC P" + + "AYEROKCYRILLIC KAVYKACYRILLIC PAYEROKCYRILLIC CAPITAL LETTER DWECYRILLIC" + + " SMALL LETTER DWECYRILLIC CAPITAL LETTER DZWECYRILLIC SMALL LETTER DZWEC" + + "YRILLIC CAPITAL LETTER ZHWECYRILLIC SMALL LETTER ZHWECYRILLIC CAPITAL LE" + + "TTER CCHECYRILLIC SMALL LETTER CCHECYRILLIC CAPITAL LETTER DZZECYRILLIC " + + "SMALL LETTER DZZECYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOKCYRILLIC SMA" + + "LL LETTER TE WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER TWECYRILLIC SMALL L" + + "ETTER TWECYRILLIC CAPITAL LETTER TSWECYRILLIC SMALL LETTER TSWECYRILLIC " + + "CAPITAL LETTER TSSECYRILLIC SMALL LETTER TSSECYRILLIC CAPITAL LETTER TCH" + + "ECYRILLIC SMALL LETTER TCHECYRILLIC CAPITAL LETTER HWECYRILLIC SMALL LET" + + "TER HWECYRILLIC CAPITAL LETTER SHWECYRILLIC SMALL LETTER SHWECYRILLIC CA" + + "PITAL LETTER DOUBLE OCYRILLIC SMALL LETTER DOUBLE OCYRILLIC CAPITAL LETT" + + "ER CROSSED OCYRILLIC SMALL LETTER CROSSED OMODIFIER LETTER CYRILLIC HARD" + + " SIGNMODIFIER LETTER CYRILLIC SOFT SIGNCOMBINING CYRILLIC LETTER EFCOMBI" + + "NING CYRILLIC LETTER IOTIFIED EBAMUM LETTER ABAMUM LETTER KABAMUM LETTER" + + " UBAMUM LETTER KUBAMUM LETTER EEBAMUM LETTER REEBAMUM LETTER TAEBAMUM LE" + + "TTER OBAMUM LETTER NYIBAMUM LETTER IBAMUM LETTER LABAMUM LETTER PABAMUM " + + "LETTER RIIBAMUM LETTER RIEEBAMUM LETTER LEEEEBAMUM LETTER MEEEEBAMUM LET" + + "TER TAABAMUM LETTER NDAABAMUM LETTER NJAEMBAMUM LETTER MBAMUM LETTER SUU" + + "BAMUM LETTER MUBAMUM LETTER SHIIBAMUM LETTER SIBAMUM LETTER SHEUXBAMUM L" + + "ETTER SEUXBAMUM LETTER KYEEBAMUM LETTER KETBAMUM LETTER NUAEBAMUM LETTER" + + " NUBAMUM LETTER NJUAEBAMUM LETTER YOQBAMUM LETTER SHUBAMUM LETTER YUQBAM" + + "UM LETTER YABAMUM LETTER NSHABAMUM LETTER KEUXBAMUM LETTER PEUXBAMUM LET" + + "TER NJEEBAMUM LETTER NTEEBAMUM LETTER PUEBAMUM LETTER WUEBAMUM LETTER PE" + + "EBAMUM LETTER FEEBAMUM LETTER RUBAMUM LETTER LUBAMUM LETTER MIBAMUM LETT" + + "ER NIBAMUM LETTER REUXBAMUM LETTER RAEBAMUM LETTER KENBAMUM LETTER NGKWA" + + "ENBAMUM LETTER NGGABAMUM LETTER NGABAMUM LETTER SHOBAMUM LETTER PUAEBAMU" + + "M LETTER FUBAMUM LETTER FOMBAMUM LETTER WABAMUM LETTER NABAMUM LETTER LI" + + "BAMUM LETTER PIBAMUM LETTER LOQBAMUM LETTER KOBAMUM LETTER MBENBAMUM LET" + + "TER RENBAMUM LETTER MENBAMUM LETTER MABAMUM LETTER TIBAMUM LETTER KIBAMU" + + "M LETTER MOBAMUM LETTER MBAABAMUM LETTER TETBAMUM LETTER KPABAMUM LETTER" + + " TENBAMUM LETTER NTUUBAMUM LETTER SAMBABAMUM LETTER FAAMAEBAMUM LETTER K" + + "OVUUBAMUM LETTER KOGHOMBAMUM COMBINING MARK KOQNDONBAMUM COMBINING MARK " + + "TUKWENTISBAMUM NJAEMLIBAMUM FULL STOPBAMUM COLONBAMUM COMMABAMUM SEMICOL" + + "ONBAMUM QUESTION MARKMODIFIER LETTER CHINESE TONE YIN PINGMODIFIER LETTE" + + "R CHINESE TONE YANG PINGMODIFIER LETTER CHINESE TONE YIN SHANGMODIFIER L" + + "ETTER CHINESE TONE YANG SHANGMODIFIER LETTER CHINESE TONE YIN QUMODIFIER" + + " LETTER CHINESE TONE YANG QUMODIFIER LETTER CHINESE TONE YIN RUMODIFIER " + + "LETTER CHINESE TONE YANG RUMODIFIER LETTER EXTRA-HIGH DOTTED TONE BARMOD" + + "IFIER LETTER HIGH DOTTED TONE BARMODIFIER LETTER MID DOTTED TONE BARMODI" + + "FIER LETTER LOW DOTTED TONE BARMODIFIER LETTER EXTRA-LOW DOTTED TONE BAR") + ("" + + "MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BARMODIFIER LETTER HIGH" + + " DOTTED LEFT-STEM TONE BARMODIFIER LETTER MID DOTTED LEFT-STEM TONE BARM" + + "ODIFIER LETTER LOW DOTTED LEFT-STEM TONE BARMODIFIER LETTER EXTRA-LOW DO" + + "TTED LEFT-STEM TONE BARMODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BARMODI" + + "FIER LETTER HIGH LEFT-STEM TONE BARMODIFIER LETTER MID LEFT-STEM TONE BA" + + "RMODIFIER LETTER LOW LEFT-STEM TONE BARMODIFIER LETTER EXTRA-LOW LEFT-ST" + + "EM TONE BARMODIFIER LETTER DOT VERTICAL BARMODIFIER LETTER DOT SLASHMODI" + + "FIER LETTER DOT HORIZONTAL BARMODIFIER LETTER LOWER RIGHT CORNER ANGLEMO" + + "DIFIER LETTER RAISED UP ARROWMODIFIER LETTER RAISED DOWN ARROWMODIFIER L" + + "ETTER RAISED EXCLAMATION MARKMODIFIER LETTER RAISED INVERTED EXCLAMATION" + + " MARKMODIFIER LETTER LOW INVERTED EXCLAMATION MARKMODIFIER LETTER STRESS" + + " AND HIGH TONEMODIFIER LETTER STRESS AND LOW TONELATIN CAPITAL LETTER EG" + + "YPTOLOGICAL ALEFLATIN SMALL LETTER EGYPTOLOGICAL ALEFLATIN CAPITAL LETTE" + + "R EGYPTOLOGICAL AINLATIN SMALL LETTER EGYPTOLOGICAL AINLATIN CAPITAL LET" + + "TER HENGLATIN SMALL LETTER HENGLATIN CAPITAL LETTER TZLATIN SMALL LETTER" + + " TZLATIN CAPITAL LETTER TRESILLOLATIN SMALL LETTER TRESILLOLATIN CAPITAL" + + " LETTER CUATRILLOLATIN SMALL LETTER CUATRILLOLATIN CAPITAL LETTER CUATRI" + + "LLO WITH COMMALATIN SMALL LETTER CUATRILLO WITH COMMALATIN LETTER SMALL " + + "CAPITAL FLATIN LETTER SMALL CAPITAL SLATIN CAPITAL LETTER AALATIN SMALL " + + "LETTER AALATIN CAPITAL LETTER AOLATIN SMALL LETTER AOLATIN CAPITAL LETTE" + + "R AULATIN SMALL LETTER AULATIN CAPITAL LETTER AVLATIN SMALL LETTER AVLAT" + + "IN CAPITAL LETTER AV WITH HORIZONTAL BARLATIN SMALL LETTER AV WITH HORIZ" + + "ONTAL BARLATIN CAPITAL LETTER AYLATIN SMALL LETTER AYLATIN CAPITAL LETTE" + + "R REVERSED C WITH DOTLATIN SMALL LETTER REVERSED C WITH DOTLATIN CAPITAL" + + " LETTER K WITH STROKELATIN SMALL LETTER K WITH STROKELATIN CAPITAL LETTE" + + "R K WITH DIAGONAL STROKELATIN SMALL LETTER K WITH DIAGONAL STROKELATIN C" + + "APITAL LETTER K WITH STROKE AND DIAGONAL STROKELATIN SMALL LETTER K WITH" + + " STROKE AND DIAGONAL STROKELATIN CAPITAL LETTER BROKEN LLATIN SMALL LETT" + + "ER BROKEN LLATIN CAPITAL LETTER L WITH HIGH STROKELATIN SMALL LETTER L W" + + "ITH HIGH STROKELATIN CAPITAL LETTER O WITH LONG STROKE OVERLAYLATIN SMAL" + + "L LETTER O WITH LONG STROKE OVERLAYLATIN CAPITAL LETTER O WITH LOOPLATIN" + + " SMALL LETTER O WITH LOOPLATIN CAPITAL LETTER OOLATIN SMALL LETTER OOLAT" + + "IN CAPITAL LETTER P WITH STROKE THROUGH DESCENDERLATIN SMALL LETTER P WI" + + "TH STROKE THROUGH DESCENDERLATIN CAPITAL LETTER P WITH FLOURISHLATIN SMA" + + "LL LETTER P WITH FLOURISHLATIN CAPITAL LETTER P WITH SQUIRREL TAILLATIN " + + "SMALL LETTER P WITH SQUIRREL TAILLATIN CAPITAL LETTER Q WITH STROKE THRO" + + "UGH DESCENDERLATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDERLATIN CAP" + + "ITAL LETTER Q WITH DIAGONAL STROKELATIN SMALL LETTER Q WITH DIAGONAL STR" + + "OKELATIN CAPITAL LETTER R ROTUNDALATIN SMALL LETTER R ROTUNDALATIN CAPIT" + + "AL LETTER RUM ROTUNDALATIN SMALL LETTER RUM ROTUNDALATIN CAPITAL LETTER " + + "V WITH DIAGONAL STROKELATIN SMALL LETTER V WITH DIAGONAL STROKELATIN CAP" + + "ITAL LETTER VYLATIN SMALL LETTER VYLATIN CAPITAL LETTER VISIGOTHIC ZLATI" + + "N SMALL LETTER VISIGOTHIC ZLATIN CAPITAL LETTER THORN WITH STROKELATIN S" + + "MALL LETTER THORN WITH STROKELATIN CAPITAL LETTER THORN WITH STROKE THRO" + + "UGH DESCENDERLATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDERLATIN" + + " CAPITAL LETTER VENDLATIN SMALL LETTER VENDLATIN CAPITAL LETTER ETLATIN " + + "SMALL LETTER ETLATIN CAPITAL LETTER ISLATIN SMALL LETTER ISLATIN CAPITAL" + + " LETTER CONLATIN SMALL LETTER CONMODIFIER LETTER USLATIN SMALL LETTER DU" + + "MLATIN SMALL LETTER LUMLATIN SMALL LETTER MUMLATIN SMALL LETTER NUMLATIN" + + " SMALL LETTER RUMLATIN LETTER SMALL CAPITAL RUMLATIN SMALL LETTER TUMLAT" + + "IN SMALL LETTER UMLATIN CAPITAL LETTER INSULAR DLATIN SMALL LETTER INSUL" + + "AR DLATIN CAPITAL LETTER INSULAR FLATIN SMALL LETTER INSULAR FLATIN CAPI" + + "TAL LETTER INSULAR GLATIN CAPITAL LETTER TURNED INSULAR GLATIN SMALL LET" + + "TER TURNED INSULAR GLATIN CAPITAL LETTER TURNED LLATIN SMALL LETTER TURN" + + "ED LLATIN CAPITAL LETTER INSULAR RLATIN SMALL LETTER INSULAR RLATIN CAPI" + + "TAL LETTER INSULAR SLATIN SMALL LETTER INSULAR SLATIN CAPITAL LETTER INS" + + "ULAR TLATIN SMALL LETTER INSULAR TMODIFIER LETTER LOW CIRCUMFLEX ACCENTM" + + "ODIFIER LETTER COLONMODIFIER LETTER SHORT EQUALS SIGNLATIN CAPITAL LETTE" + + "R SALTILLOLATIN SMALL LETTER SALTILLOLATIN CAPITAL LETTER TURNED HLATIN " + + "SMALL LETTER L WITH RETROFLEX HOOK AND BELTLATIN LETTER SINOLOGICAL DOTL" + + "ATIN CAPITAL LETTER N WITH DESCENDERLATIN SMALL LETTER N WITH DESCENDERL" + + "ATIN CAPITAL LETTER C WITH BARLATIN SMALL LETTER C WITH BARLATIN SMALL L" + + "ETTER C WITH PALATAL HOOKLATIN SMALL LETTER H WITH PALATAL HOOKLATIN CAP" + + "ITAL LETTER B WITH FLOURISHLATIN SMALL LETTER B WITH FLOURISHLATIN CAPIT") + ("" + + "AL LETTER F WITH STROKELATIN SMALL LETTER F WITH STROKELATIN CAPITAL LET" + + "TER VOLAPUK AELATIN SMALL LETTER VOLAPUK AELATIN CAPITAL LETTER VOLAPUK " + + "OELATIN SMALL LETTER VOLAPUK OELATIN CAPITAL LETTER VOLAPUK UELATIN SMAL" + + "L LETTER VOLAPUK UELATIN CAPITAL LETTER G WITH OBLIQUE STROKELATIN SMALL" + + " LETTER G WITH OBLIQUE STROKELATIN CAPITAL LETTER K WITH OBLIQUE STROKEL" + + "ATIN SMALL LETTER K WITH OBLIQUE STROKELATIN CAPITAL LETTER N WITH OBLIQ" + + "UE STROKELATIN SMALL LETTER N WITH OBLIQUE STROKELATIN CAPITAL LETTER R " + + "WITH OBLIQUE STROKELATIN SMALL LETTER R WITH OBLIQUE STROKELATIN CAPITAL" + + " LETTER S WITH OBLIQUE STROKELATIN SMALL LETTER S WITH OBLIQUE STROKELAT" + + "IN CAPITAL LETTER H WITH HOOKLATIN CAPITAL LETTER REVERSED OPEN ELATIN C" + + "APITAL LETTER SCRIPT GLATIN CAPITAL LETTER L WITH BELTLATIN CAPITAL LETT" + + "ER SMALL CAPITAL ILATIN CAPITAL LETTER TURNED KLATIN CAPITAL LETTER TURN" + + "ED TLATIN CAPITAL LETTER J WITH CROSSED-TAILLATIN CAPITAL LETTER CHILATI" + + "N CAPITAL LETTER BETALATIN SMALL LETTER BETALATIN CAPITAL LETTER OMEGALA" + + "TIN SMALL LETTER OMEGALATIN EPIGRAPHIC LETTER SIDEWAYS IMODIFIER LETTER " + + "CAPITAL H WITH STROKEMODIFIER LETTER SMALL LIGATURE OELATIN LETTER SMALL" + + " CAPITAL TURNED MLATIN EPIGRAPHIC LETTER REVERSED FLATIN EPIGRAPHIC LETT" + + "ER REVERSED PLATIN EPIGRAPHIC LETTER INVERTED MLATIN EPIGRAPHIC LETTER I" + + " LONGALATIN EPIGRAPHIC LETTER ARCHAIC MSYLOTI NAGRI LETTER ASYLOTI NAGRI" + + " LETTER ISYLOTI NAGRI SIGN DVISVARASYLOTI NAGRI LETTER USYLOTI NAGRI LET" + + "TER ESYLOTI NAGRI LETTER OSYLOTI NAGRI SIGN HASANTASYLOTI NAGRI LETTER K" + + "OSYLOTI NAGRI LETTER KHOSYLOTI NAGRI LETTER GOSYLOTI NAGRI LETTER GHOSYL" + + "OTI NAGRI SIGN ANUSVARASYLOTI NAGRI LETTER COSYLOTI NAGRI LETTER CHOSYLO" + + "TI NAGRI LETTER JOSYLOTI NAGRI LETTER JHOSYLOTI NAGRI LETTER TTOSYLOTI N" + + "AGRI LETTER TTHOSYLOTI NAGRI LETTER DDOSYLOTI NAGRI LETTER DDHOSYLOTI NA" + + "GRI LETTER TOSYLOTI NAGRI LETTER THOSYLOTI NAGRI LETTER DOSYLOTI NAGRI L" + + "ETTER DHOSYLOTI NAGRI LETTER NOSYLOTI NAGRI LETTER POSYLOTI NAGRI LETTER" + + " PHOSYLOTI NAGRI LETTER BOSYLOTI NAGRI LETTER BHOSYLOTI NAGRI LETTER MOS" + + "YLOTI NAGRI LETTER ROSYLOTI NAGRI LETTER LOSYLOTI NAGRI LETTER RROSYLOTI" + + " NAGRI LETTER SOSYLOTI NAGRI LETTER HOSYLOTI NAGRI VOWEL SIGN ASYLOTI NA" + + "GRI VOWEL SIGN ISYLOTI NAGRI VOWEL SIGN USYLOTI NAGRI VOWEL SIGN ESYLOTI" + + " NAGRI VOWEL SIGN OOSYLOTI NAGRI POETRY MARK-1SYLOTI NAGRI POETRY MARK-2" + + "SYLOTI NAGRI POETRY MARK-3SYLOTI NAGRI POETRY MARK-4NORTH INDIC FRACTION" + + " ONE QUARTERNORTH INDIC FRACTION ONE HALFNORTH INDIC FRACTION THREE QUAR" + + "TERSNORTH INDIC FRACTION ONE SIXTEENTHNORTH INDIC FRACTION ONE EIGHTHNOR" + + "TH INDIC FRACTION THREE SIXTEENTHSNORTH INDIC QUARTER MARKNORTH INDIC PL" + + "ACEHOLDER MARKNORTH INDIC RUPEE MARKNORTH INDIC QUANTITY MARKPHAGS-PA LE" + + "TTER KAPHAGS-PA LETTER KHAPHAGS-PA LETTER GAPHAGS-PA LETTER NGAPHAGS-PA " + + "LETTER CAPHAGS-PA LETTER CHAPHAGS-PA LETTER JAPHAGS-PA LETTER NYAPHAGS-P" + + "A LETTER TAPHAGS-PA LETTER THAPHAGS-PA LETTER DAPHAGS-PA LETTER NAPHAGS-" + + "PA LETTER PAPHAGS-PA LETTER PHAPHAGS-PA LETTER BAPHAGS-PA LETTER MAPHAGS" + + "-PA LETTER TSAPHAGS-PA LETTER TSHAPHAGS-PA LETTER DZAPHAGS-PA LETTER WAP" + + "HAGS-PA LETTER ZHAPHAGS-PA LETTER ZAPHAGS-PA LETTER SMALL APHAGS-PA LETT" + + "ER YAPHAGS-PA LETTER RAPHAGS-PA LETTER LAPHAGS-PA LETTER SHAPHAGS-PA LET" + + "TER SAPHAGS-PA LETTER HAPHAGS-PA LETTER APHAGS-PA LETTER IPHAGS-PA LETTE" + + "R UPHAGS-PA LETTER EPHAGS-PA LETTER OPHAGS-PA LETTER QAPHAGS-PA LETTER X" + + "APHAGS-PA LETTER FAPHAGS-PA LETTER GGAPHAGS-PA LETTER EEPHAGS-PA SUBJOIN" + + "ED LETTER WAPHAGS-PA SUBJOINED LETTER YAPHAGS-PA LETTER TTAPHAGS-PA LETT" + + "ER TTHAPHAGS-PA LETTER DDAPHAGS-PA LETTER NNAPHAGS-PA LETTER ALTERNATE Y" + + "APHAGS-PA LETTER VOICELESS SHAPHAGS-PA LETTER VOICED HAPHAGS-PA LETTER A" + + "SPIRATED FAPHAGS-PA SUBJOINED LETTER RAPHAGS-PA SUPERFIXED LETTER RAPHAG" + + "S-PA LETTER CANDRABINDUPHAGS-PA SINGLE HEAD MARKPHAGS-PA DOUBLE HEAD MAR" + + "KPHAGS-PA MARK SHADPHAGS-PA MARK DOUBLE SHADSAURASHTRA SIGN ANUSVARASAUR" + + "ASHTRA SIGN VISARGASAURASHTRA LETTER ASAURASHTRA LETTER AASAURASHTRA LET" + + "TER ISAURASHTRA LETTER IISAURASHTRA LETTER USAURASHTRA LETTER UUSAURASHT" + + "RA LETTER VOCALIC RSAURASHTRA LETTER VOCALIC RRSAURASHTRA LETTER VOCALIC" + + " LSAURASHTRA LETTER VOCALIC LLSAURASHTRA LETTER ESAURASHTRA LETTER EESAU" + + "RASHTRA LETTER AISAURASHTRA LETTER OSAURASHTRA LETTER OOSAURASHTRA LETTE" + + "R AUSAURASHTRA LETTER KASAURASHTRA LETTER KHASAURASHTRA LETTER GASAURASH" + + "TRA LETTER GHASAURASHTRA LETTER NGASAURASHTRA LETTER CASAURASHTRA LETTER" + + " CHASAURASHTRA LETTER JASAURASHTRA LETTER JHASAURASHTRA LETTER NYASAURAS" + + "HTRA LETTER TTASAURASHTRA LETTER TTHASAURASHTRA LETTER DDASAURASHTRA LET" + + "TER DDHASAURASHTRA LETTER NNASAURASHTRA LETTER TASAURASHTRA LETTER THASA" + + "URASHTRA LETTER DASAURASHTRA LETTER DHASAURASHTRA LETTER NASAURASHTRA LE") + ("" + + "TTER PASAURASHTRA LETTER PHASAURASHTRA LETTER BASAURASHTRA LETTER BHASAU" + + "RASHTRA LETTER MASAURASHTRA LETTER YASAURASHTRA LETTER RASAURASHTRA LETT" + + "ER LASAURASHTRA LETTER VASAURASHTRA LETTER SHASAURASHTRA LETTER SSASAURA" + + "SHTRA LETTER SASAURASHTRA LETTER HASAURASHTRA LETTER LLASAURASHTRA CONSO" + + "NANT SIGN HAARUSAURASHTRA VOWEL SIGN AASAURASHTRA VOWEL SIGN ISAURASHTRA" + + " VOWEL SIGN IISAURASHTRA VOWEL SIGN USAURASHTRA VOWEL SIGN UUSAURASHTRA " + + "VOWEL SIGN VOCALIC RSAURASHTRA VOWEL SIGN VOCALIC RRSAURASHTRA VOWEL SIG" + + "N VOCALIC LSAURASHTRA VOWEL SIGN VOCALIC LLSAURASHTRA VOWEL SIGN ESAURAS" + + "HTRA VOWEL SIGN EESAURASHTRA VOWEL SIGN AISAURASHTRA VOWEL SIGN OSAURASH" + + "TRA VOWEL SIGN OOSAURASHTRA VOWEL SIGN AUSAURASHTRA SIGN VIRAMASAURASHTR" + + "A SIGN CANDRABINDUSAURASHTRA DANDASAURASHTRA DOUBLE DANDASAURASHTRA DIGI" + + "T ZEROSAURASHTRA DIGIT ONESAURASHTRA DIGIT TWOSAURASHTRA DIGIT THREESAUR" + + "ASHTRA DIGIT FOURSAURASHTRA DIGIT FIVESAURASHTRA DIGIT SIXSAURASHTRA DIG" + + "IT SEVENSAURASHTRA DIGIT EIGHTSAURASHTRA DIGIT NINECOMBINING DEVANAGARI " + + "DIGIT ZEROCOMBINING DEVANAGARI DIGIT ONECOMBINING DEVANAGARI DIGIT TWOCO" + + "MBINING DEVANAGARI DIGIT THREECOMBINING DEVANAGARI DIGIT FOURCOMBINING D" + + "EVANAGARI DIGIT FIVECOMBINING DEVANAGARI DIGIT SIXCOMBINING DEVANAGARI D" + + "IGIT SEVENCOMBINING DEVANAGARI DIGIT EIGHTCOMBINING DEVANAGARI DIGIT NIN" + + "ECOMBINING DEVANAGARI LETTER ACOMBINING DEVANAGARI LETTER UCOMBINING DEV" + + "ANAGARI LETTER KACOMBINING DEVANAGARI LETTER NACOMBINING DEVANAGARI LETT" + + "ER PACOMBINING DEVANAGARI LETTER RACOMBINING DEVANAGARI LETTER VICOMBINI" + + "NG DEVANAGARI SIGN AVAGRAHADEVANAGARI SIGN SPACING CANDRABINDUDEVANAGARI" + + " SIGN CANDRABINDU VIRAMADEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMADEVANAG" + + "ARI SIGN CANDRABINDU TWODEVANAGARI SIGN CANDRABINDU THREEDEVANAGARI SIGN" + + " CANDRABINDU AVAGRAHADEVANAGARI SIGN PUSHPIKADEVANAGARI GAP FILLERDEVANA" + + "GARI CARETDEVANAGARI HEADSTROKEDEVANAGARI SIGN SIDDHAMDEVANAGARI JAIN OM" + + "KAYAH LI DIGIT ZEROKAYAH LI DIGIT ONEKAYAH LI DIGIT TWOKAYAH LI DIGIT TH" + + "REEKAYAH LI DIGIT FOURKAYAH LI DIGIT FIVEKAYAH LI DIGIT SIXKAYAH LI DIGI" + + "T SEVENKAYAH LI DIGIT EIGHTKAYAH LI DIGIT NINEKAYAH LI LETTER KAKAYAH LI" + + " LETTER KHAKAYAH LI LETTER GAKAYAH LI LETTER NGAKAYAH LI LETTER SAKAYAH " + + "LI LETTER SHAKAYAH LI LETTER ZAKAYAH LI LETTER NYAKAYAH LI LETTER TAKAYA" + + "H LI LETTER HTAKAYAH LI LETTER NAKAYAH LI LETTER PAKAYAH LI LETTER PHAKA" + + "YAH LI LETTER MAKAYAH LI LETTER DAKAYAH LI LETTER BAKAYAH LI LETTER RAKA" + + "YAH LI LETTER YAKAYAH LI LETTER LAKAYAH LI LETTER WAKAYAH LI LETTER THAK" + + "AYAH LI LETTER HAKAYAH LI LETTER VAKAYAH LI LETTER CAKAYAH LI LETTER AKA" + + "YAH LI LETTER OEKAYAH LI LETTER IKAYAH LI LETTER OOKAYAH LI VOWEL UEKAYA" + + "H LI VOWEL EKAYAH LI VOWEL UKAYAH LI VOWEL EEKAYAH LI VOWEL OKAYAH LI TO" + + "NE PLOPHUKAYAH LI TONE CALYAKAYAH LI TONE CALYA PLOPHUKAYAH LI SIGN CWIK" + + "AYAH LI SIGN SHYAREJANG LETTER KAREJANG LETTER GAREJANG LETTER NGAREJANG" + + " LETTER TAREJANG LETTER DAREJANG LETTER NAREJANG LETTER PAREJANG LETTER " + + "BAREJANG LETTER MAREJANG LETTER CAREJANG LETTER JAREJANG LETTER NYAREJAN" + + "G LETTER SAREJANG LETTER RAREJANG LETTER LAREJANG LETTER YAREJANG LETTER" + + " WAREJANG LETTER HAREJANG LETTER MBAREJANG LETTER NGGAREJANG LETTER NDAR" + + "EJANG LETTER NYJAREJANG LETTER AREJANG VOWEL SIGN IREJANG VOWEL SIGN URE" + + "JANG VOWEL SIGN EREJANG VOWEL SIGN AIREJANG VOWEL SIGN OREJANG VOWEL SIG" + + "N AUREJANG VOWEL SIGN EUREJANG VOWEL SIGN EAREJANG CONSONANT SIGN NGREJA" + + "NG CONSONANT SIGN NREJANG CONSONANT SIGN RREJANG CONSONANT SIGN HREJANG " + + "VIRAMAREJANG SECTION MARKHANGUL CHOSEONG TIKEUT-MIEUMHANGUL CHOSEONG TIK" + + "EUT-PIEUPHANGUL CHOSEONG TIKEUT-SIOSHANGUL CHOSEONG TIKEUT-CIEUCHANGUL C" + + "HOSEONG RIEUL-KIYEOKHANGUL CHOSEONG RIEUL-SSANGKIYEOKHANGUL CHOSEONG RIE" + + "UL-TIKEUTHANGUL CHOSEONG RIEUL-SSANGTIKEUTHANGUL CHOSEONG RIEUL-MIEUMHAN" + + "GUL CHOSEONG RIEUL-PIEUPHANGUL CHOSEONG RIEUL-SSANGPIEUPHANGUL CHOSEONG " + + "RIEUL-KAPYEOUNPIEUPHANGUL CHOSEONG RIEUL-SIOSHANGUL CHOSEONG RIEUL-CIEUC" + + "HANGUL CHOSEONG RIEUL-KHIEUKHHANGUL CHOSEONG MIEUM-KIYEOKHANGUL CHOSEONG" + + " MIEUM-TIKEUTHANGUL CHOSEONG MIEUM-SIOSHANGUL CHOSEONG PIEUP-SIOS-THIEUT" + + "HHANGUL CHOSEONG PIEUP-KHIEUKHHANGUL CHOSEONG PIEUP-HIEUHHANGUL CHOSEONG" + + " SSANGSIOS-PIEUPHANGUL CHOSEONG IEUNG-RIEULHANGUL CHOSEONG IEUNG-HIEUHHA" + + "NGUL CHOSEONG SSANGCIEUC-HIEUHHANGUL CHOSEONG SSANGTHIEUTHHANGUL CHOSEON" + + "G PHIEUPH-HIEUHHANGUL CHOSEONG HIEUH-SIOSHANGUL CHOSEONG SSANGYEORINHIEU" + + "HJAVANESE SIGN PANYANGGAJAVANESE SIGN CECAKJAVANESE SIGN LAYARJAVANESE S" + + "IGN WIGNYANJAVANESE LETTER AJAVANESE LETTER I KAWIJAVANESE LETTER IJAVAN" + + "ESE LETTER IIJAVANESE LETTER UJAVANESE LETTER PA CEREKJAVANESE LETTER NG" + + "A LELETJAVANESE LETTER NGA LELET RASWADIJAVANESE LETTER EJAVANESE LETTER" + + " AIJAVANESE LETTER OJAVANESE LETTER KAJAVANESE LETTER KA SASAKJAVANESE L") + ("" + + "ETTER KA MURDAJAVANESE LETTER GAJAVANESE LETTER GA MURDAJAVANESE LETTER " + + "NGAJAVANESE LETTER CAJAVANESE LETTER CA MURDAJAVANESE LETTER JAJAVANESE " + + "LETTER NYA MURDAJAVANESE LETTER JA MAHAPRANAJAVANESE LETTER NYAJAVANESE " + + "LETTER TTAJAVANESE LETTER TTA MAHAPRANAJAVANESE LETTER DDAJAVANESE LETTE" + + "R DDA MAHAPRANAJAVANESE LETTER NA MURDAJAVANESE LETTER TAJAVANESE LETTER" + + " TA MURDAJAVANESE LETTER DAJAVANESE LETTER DA MAHAPRANAJAVANESE LETTER N" + + "AJAVANESE LETTER PAJAVANESE LETTER PA MURDAJAVANESE LETTER BAJAVANESE LE" + + "TTER BA MURDAJAVANESE LETTER MAJAVANESE LETTER YAJAVANESE LETTER RAJAVAN" + + "ESE LETTER RA AGUNGJAVANESE LETTER LAJAVANESE LETTER WAJAVANESE LETTER S" + + "A MURDAJAVANESE LETTER SA MAHAPRANAJAVANESE LETTER SAJAVANESE LETTER HAJ" + + "AVANESE SIGN CECAK TELUJAVANESE VOWEL SIGN TARUNGJAVANESE VOWEL SIGN TOL" + + "ONGJAVANESE VOWEL SIGN WULUJAVANESE VOWEL SIGN WULU MELIKJAVANESE VOWEL " + + "SIGN SUKUJAVANESE VOWEL SIGN SUKU MENDUTJAVANESE VOWEL SIGN TALINGJAVANE" + + "SE VOWEL SIGN DIRGA MUREJAVANESE VOWEL SIGN PEPETJAVANESE CONSONANT SIGN" + + " KERETJAVANESE CONSONANT SIGN PENGKALJAVANESE CONSONANT SIGN CAKRAJAVANE" + + "SE PANGKONJAVANESE LEFT RERENGGANJAVANESE RIGHT RERENGGANJAVANESE PADA A" + + "NDAPJAVANESE PADA MADYAJAVANESE PADA LUHURJAVANESE PADA WINDUJAVANESE PA" + + "DA PANGKATJAVANESE PADA LINGSAJAVANESE PADA LUNGSIJAVANESE PADA ADEGJAVA" + + "NESE PADA ADEG ADEGJAVANESE PADA PISELEHJAVANESE TURNED PADA PISELEHJAVA" + + "NESE PANGRANGKEPJAVANESE DIGIT ZEROJAVANESE DIGIT ONEJAVANESE DIGIT TWOJ" + + "AVANESE DIGIT THREEJAVANESE DIGIT FOURJAVANESE DIGIT FIVEJAVANESE DIGIT " + + "SIXJAVANESE DIGIT SEVENJAVANESE DIGIT EIGHTJAVANESE DIGIT NINEJAVANESE P" + + "ADA TIRTA TUMETESJAVANESE PADA ISEN-ISENMYANMAR LETTER SHAN GHAMYANMAR L" + + "ETTER SHAN CHAMYANMAR LETTER SHAN JHAMYANMAR LETTER SHAN NNAMYANMAR LETT" + + "ER SHAN BHAMYANMAR SIGN SHAN SAWMYANMAR MODIFIER LETTER SHAN REDUPLICATI" + + "ONMYANMAR LETTER TAI LAING NYAMYANMAR LETTER TAI LAING FAMYANMAR LETTER " + + "TAI LAING GAMYANMAR LETTER TAI LAING GHAMYANMAR LETTER TAI LAING JAMYANM" + + "AR LETTER TAI LAING JHAMYANMAR LETTER TAI LAING DDAMYANMAR LETTER TAI LA" + + "ING DDHAMYANMAR LETTER TAI LAING NNAMYANMAR TAI LAING DIGIT ZEROMYANMAR " + + "TAI LAING DIGIT ONEMYANMAR TAI LAING DIGIT TWOMYANMAR TAI LAING DIGIT TH" + + "REEMYANMAR TAI LAING DIGIT FOURMYANMAR TAI LAING DIGIT FIVEMYANMAR TAI L" + + "AING DIGIT SIXMYANMAR TAI LAING DIGIT SEVENMYANMAR TAI LAING DIGIT EIGHT" + + "MYANMAR TAI LAING DIGIT NINEMYANMAR LETTER TAI LAING LLAMYANMAR LETTER T" + + "AI LAING DAMYANMAR LETTER TAI LAING DHAMYANMAR LETTER TAI LAING BAMYANMA" + + "R LETTER TAI LAING BHACHAM LETTER ACHAM LETTER ICHAM LETTER UCHAM LETTER" + + " ECHAM LETTER AICHAM LETTER OCHAM LETTER KACHAM LETTER KHACHAM LETTER GA" + + "CHAM LETTER GHACHAM LETTER NGUECHAM LETTER NGACHAM LETTER CHACHAM LETTER" + + " CHHACHAM LETTER JACHAM LETTER JHACHAM LETTER NHUECHAM LETTER NHACHAM LE" + + "TTER NHJACHAM LETTER TACHAM LETTER THACHAM LETTER DACHAM LETTER DHACHAM " + + "LETTER NUECHAM LETTER NACHAM LETTER DDACHAM LETTER PACHAM LETTER PPACHAM" + + " LETTER PHACHAM LETTER BACHAM LETTER BHACHAM LETTER MUECHAM LETTER MACHA" + + "M LETTER BBACHAM LETTER YACHAM LETTER RACHAM LETTER LACHAM LETTER VACHAM" + + " LETTER SSACHAM LETTER SACHAM LETTER HACHAM VOWEL SIGN AACHAM VOWEL SIGN" + + " ICHAM VOWEL SIGN IICHAM VOWEL SIGN EICHAM VOWEL SIGN UCHAM VOWEL SIGN O" + + "ECHAM VOWEL SIGN OCHAM VOWEL SIGN AICHAM VOWEL SIGN AUCHAM VOWEL SIGN UE" + + "CHAM CONSONANT SIGN YACHAM CONSONANT SIGN RACHAM CONSONANT SIGN LACHAM C" + + "ONSONANT SIGN WACHAM LETTER FINAL KCHAM LETTER FINAL GCHAM LETTER FINAL " + + "NGCHAM CONSONANT SIGN FINAL NGCHAM LETTER FINAL CHCHAM LETTER FINAL TCHA" + + "M LETTER FINAL NCHAM LETTER FINAL PCHAM LETTER FINAL YCHAM LETTER FINAL " + + "RCHAM LETTER FINAL LCHAM LETTER FINAL SSCHAM CONSONANT SIGN FINAL MCHAM " + + "CONSONANT SIGN FINAL HCHAM DIGIT ZEROCHAM DIGIT ONECHAM DIGIT TWOCHAM DI" + + "GIT THREECHAM DIGIT FOURCHAM DIGIT FIVECHAM DIGIT SIXCHAM DIGIT SEVENCHA" + + "M DIGIT EIGHTCHAM DIGIT NINECHAM PUNCTUATION SPIRALCHAM PUNCTUATION DAND" + + "ACHAM PUNCTUATION DOUBLE DANDACHAM PUNCTUATION TRIPLE DANDAMYANMAR LETTE" + + "R KHAMTI GAMYANMAR LETTER KHAMTI CAMYANMAR LETTER KHAMTI CHAMYANMAR LETT" + + "ER KHAMTI JAMYANMAR LETTER KHAMTI JHAMYANMAR LETTER KHAMTI NYAMYANMAR LE" + + "TTER KHAMTI TTAMYANMAR LETTER KHAMTI TTHAMYANMAR LETTER KHAMTI DDAMYANMA" + + "R LETTER KHAMTI DDHAMYANMAR LETTER KHAMTI DHAMYANMAR LETTER KHAMTI NAMYA" + + "NMAR LETTER KHAMTI SAMYANMAR LETTER KHAMTI HAMYANMAR LETTER KHAMTI HHAMY" + + "ANMAR LETTER KHAMTI FAMYANMAR MODIFIER LETTER KHAMTI REDUPLICATIONMYANMA" + + "R LETTER KHAMTI XAMYANMAR LETTER KHAMTI ZAMYANMAR LETTER KHAMTI RAMYANMA" + + "R LOGOGRAM KHAMTI OAYMYANMAR LOGOGRAM KHAMTI QNMYANMAR LOGOGRAM KHAMTI H" + + "MMYANMAR SYMBOL AITON EXCLAMATIONMYANMAR SYMBOL AITON ONEMYANMAR SYMBOL " + + "AITON TWOMYANMAR LETTER AITON RAMYANMAR SIGN PAO KAREN TONEMYANMAR SIGN ") + ("" + + "TAI LAING TONE-2MYANMAR SIGN TAI LAING TONE-5MYANMAR LETTER SHWE PALAUNG" + + " CHAMYANMAR LETTER SHWE PALAUNG SHATAI VIET LETTER LOW KOTAI VIET LETTER" + + " HIGH KOTAI VIET LETTER LOW KHOTAI VIET LETTER HIGH KHOTAI VIET LETTER L" + + "OW KHHOTAI VIET LETTER HIGH KHHOTAI VIET LETTER LOW GOTAI VIET LETTER HI" + + "GH GOTAI VIET LETTER LOW NGOTAI VIET LETTER HIGH NGOTAI VIET LETTER LOW " + + "COTAI VIET LETTER HIGH COTAI VIET LETTER LOW CHOTAI VIET LETTER HIGH CHO" + + "TAI VIET LETTER LOW SOTAI VIET LETTER HIGH SOTAI VIET LETTER LOW NYOTAI " + + "VIET LETTER HIGH NYOTAI VIET LETTER LOW DOTAI VIET LETTER HIGH DOTAI VIE" + + "T LETTER LOW TOTAI VIET LETTER HIGH TOTAI VIET LETTER LOW THOTAI VIET LE" + + "TTER HIGH THOTAI VIET LETTER LOW NOTAI VIET LETTER HIGH NOTAI VIET LETTE" + + "R LOW BOTAI VIET LETTER HIGH BOTAI VIET LETTER LOW POTAI VIET LETTER HIG" + + "H POTAI VIET LETTER LOW PHOTAI VIET LETTER HIGH PHOTAI VIET LETTER LOW F" + + "OTAI VIET LETTER HIGH FOTAI VIET LETTER LOW MOTAI VIET LETTER HIGH MOTAI" + + " VIET LETTER LOW YOTAI VIET LETTER HIGH YOTAI VIET LETTER LOW ROTAI VIET" + + " LETTER HIGH ROTAI VIET LETTER LOW LOTAI VIET LETTER HIGH LOTAI VIET LET" + + "TER LOW VOTAI VIET LETTER HIGH VOTAI VIET LETTER LOW HOTAI VIET LETTER H" + + "IGH HOTAI VIET LETTER LOW OTAI VIET LETTER HIGH OTAI VIET MAI KANGTAI VI" + + "ET VOWEL AATAI VIET VOWEL ITAI VIET VOWEL UETAI VIET VOWEL UTAI VIET VOW" + + "EL ETAI VIET VOWEL OTAI VIET MAI KHITTAI VIET VOWEL IATAI VIET VOWEL UEA" + + "TAI VIET VOWEL UATAI VIET VOWEL AUETAI VIET VOWEL AYTAI VIET VOWEL ANTAI" + + " VIET VOWEL AMTAI VIET TONE MAI EKTAI VIET TONE MAI NUENGTAI VIET TONE M" + + "AI THOTAI VIET TONE MAI SONGTAI VIET SYMBOL KONTAI VIET SYMBOL NUENGTAI " + + "VIET SYMBOL SAMTAI VIET SYMBOL HO HOITAI VIET SYMBOL KOI KOIMEETEI MAYEK" + + " LETTER EMEETEI MAYEK LETTER OMEETEI MAYEK LETTER CHAMEETEI MAYEK LETTER" + + " NYAMEETEI MAYEK LETTER TTAMEETEI MAYEK LETTER TTHAMEETEI MAYEK LETTER D" + + "DAMEETEI MAYEK LETTER DDHAMEETEI MAYEK LETTER NNAMEETEI MAYEK LETTER SHA" + + "MEETEI MAYEK LETTER SSAMEETEI MAYEK VOWEL SIGN IIMEETEI MAYEK VOWEL SIGN" + + " UUMEETEI MAYEK VOWEL SIGN AAIMEETEI MAYEK VOWEL SIGN AUMEETEI MAYEK VOW" + + "EL SIGN AAUMEETEI MAYEK CHEIKHANMEETEI MAYEK AHANG KHUDAMMEETEI MAYEK AN" + + "JIMEETEI MAYEK SYLLABLE REPETITION MARKMEETEI MAYEK WORD REPETITION MARK" + + "MEETEI MAYEK VOWEL SIGN VISARGAMEETEI MAYEK VIRAMAETHIOPIC SYLLABLE TTHU" + + "ETHIOPIC SYLLABLE TTHIETHIOPIC SYLLABLE TTHAAETHIOPIC SYLLABLE TTHEEETHI" + + "OPIC SYLLABLE TTHEETHIOPIC SYLLABLE TTHOETHIOPIC SYLLABLE DDHUETHIOPIC S" + + "YLLABLE DDHIETHIOPIC SYLLABLE DDHAAETHIOPIC SYLLABLE DDHEEETHIOPIC SYLLA" + + "BLE DDHEETHIOPIC SYLLABLE DDHOETHIOPIC SYLLABLE DZUETHIOPIC SYLLABLE DZI" + + "ETHIOPIC SYLLABLE DZAAETHIOPIC SYLLABLE DZEEETHIOPIC SYLLABLE DZEETHIOPI" + + "C SYLLABLE DZOETHIOPIC SYLLABLE CCHHAETHIOPIC SYLLABLE CCHHUETHIOPIC SYL" + + "LABLE CCHHIETHIOPIC SYLLABLE CCHHAAETHIOPIC SYLLABLE CCHHEEETHIOPIC SYLL" + + "ABLE CCHHEETHIOPIC SYLLABLE CCHHOETHIOPIC SYLLABLE BBAETHIOPIC SYLLABLE " + + "BBUETHIOPIC SYLLABLE BBIETHIOPIC SYLLABLE BBAAETHIOPIC SYLLABLE BBEEETHI" + + "OPIC SYLLABLE BBEETHIOPIC SYLLABLE BBOLATIN SMALL LETTER BARRED ALPHALAT" + + "IN SMALL LETTER A REVERSED-SCHWALATIN SMALL LETTER BLACKLETTER ELATIN SM" + + "ALL LETTER BARRED ELATIN SMALL LETTER E WITH FLOURISHLATIN SMALL LETTER " + + "LENIS FLATIN SMALL LETTER SCRIPT G WITH CROSSED-TAILLATIN SMALL LETTER L" + + " WITH INVERTED LAZY SLATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDELATIN " + + "SMALL LETTER L WITH MIDDLE RINGLATIN SMALL LETTER M WITH CROSSED-TAILLAT" + + "IN SMALL LETTER N WITH CROSSED-TAILLATIN SMALL LETTER ENG WITH CROSSED-T" + + "AILLATIN SMALL LETTER BLACKLETTER OLATIN SMALL LETTER BLACKLETTER O WITH" + + " STROKELATIN SMALL LETTER OPEN O WITH STROKELATIN SMALL LETTER INVERTED " + + "OELATIN SMALL LETTER TURNED OE WITH STROKELATIN SMALL LETTER TURNED OE W" + + "ITH HORIZONTAL STROKELATIN SMALL LETTER TURNED O OPEN-OLATIN SMALL LETTE" + + "R TURNED O OPEN-O WITH STROKELATIN SMALL LETTER STIRRUP RLATIN LETTER SM" + + "ALL CAPITAL R WITH RIGHT LEGLATIN SMALL LETTER R WITHOUT HANDLELATIN SMA" + + "LL LETTER DOUBLE RLATIN SMALL LETTER R WITH CROSSED-TAILLATIN SMALL LETT" + + "ER DOUBLE R WITH CROSSED-TAILLATIN SMALL LETTER SCRIPT RLATIN SMALL LETT" + + "ER SCRIPT R WITH RINGLATIN SMALL LETTER BASELINE ESHLATIN SMALL LETTER U" + + " WITH SHORT RIGHT LEGLATIN SMALL LETTER U BAR WITH SHORT RIGHT LEGLATIN " + + "SMALL LETTER UILATIN SMALL LETTER TURNED UILATIN SMALL LETTER U WITH LEF" + + "T HOOKLATIN SMALL LETTER CHILATIN SMALL LETTER CHI WITH LOW RIGHT RINGLA" + + "TIN SMALL LETTER CHI WITH LOW LEFT SERIFLATIN SMALL LETTER X WITH LOW RI" + + "GHT RINGLATIN SMALL LETTER X WITH LONG LEFT LEGLATIN SMALL LETTER X WITH" + + " LONG LEFT LEG AND LOW RIGHT RINGLATIN SMALL LETTER X WITH LONG LEFT LEG" + + " WITH SERIFLATIN SMALL LETTER Y WITH SHORT RIGHT LEGMODIFIER BREVE WITH " + + "INVERTED BREVEMODIFIER LETTER SMALL HENGMODIFIER LETTER SMALL L WITH INV") + ("" + + "ERTED LAZY SMODIFIER LETTER SMALL L WITH MIDDLE TILDEMODIFIER LETTER SMA" + + "LL U WITH LEFT HOOKLATIN SMALL LETTER SAKHA YATLATIN SMALL LETTER IOTIFI" + + "ED ELATIN SMALL LETTER OPEN OELATIN SMALL LETTER UOLATIN SMALL LETTER IN" + + "VERTED ALPHAGREEK LETTER SMALL CAPITAL OMEGACHEROKEE SMALL LETTER ACHERO" + + "KEE SMALL LETTER ECHEROKEE SMALL LETTER ICHEROKEE SMALL LETTER OCHEROKEE" + + " SMALL LETTER UCHEROKEE SMALL LETTER VCHEROKEE SMALL LETTER GACHEROKEE S" + + "MALL LETTER KACHEROKEE SMALL LETTER GECHEROKEE SMALL LETTER GICHEROKEE S" + + "MALL LETTER GOCHEROKEE SMALL LETTER GUCHEROKEE SMALL LETTER GVCHEROKEE S" + + "MALL LETTER HACHEROKEE SMALL LETTER HECHEROKEE SMALL LETTER HICHEROKEE S" + + "MALL LETTER HOCHEROKEE SMALL LETTER HUCHEROKEE SMALL LETTER HVCHEROKEE S" + + "MALL LETTER LACHEROKEE SMALL LETTER LECHEROKEE SMALL LETTER LICHEROKEE S" + + "MALL LETTER LOCHEROKEE SMALL LETTER LUCHEROKEE SMALL LETTER LVCHEROKEE S" + + "MALL LETTER MACHEROKEE SMALL LETTER MECHEROKEE SMALL LETTER MICHEROKEE S" + + "MALL LETTER MOCHEROKEE SMALL LETTER MUCHEROKEE SMALL LETTER NACHEROKEE S" + + "MALL LETTER HNACHEROKEE SMALL LETTER NAHCHEROKEE SMALL LETTER NECHEROKEE" + + " SMALL LETTER NICHEROKEE SMALL LETTER NOCHEROKEE SMALL LETTER NUCHEROKEE" + + " SMALL LETTER NVCHEROKEE SMALL LETTER QUACHEROKEE SMALL LETTER QUECHEROK" + + "EE SMALL LETTER QUICHEROKEE SMALL LETTER QUOCHEROKEE SMALL LETTER QUUCHE" + + "ROKEE SMALL LETTER QUVCHEROKEE SMALL LETTER SACHEROKEE SMALL LETTER SCHE" + + "ROKEE SMALL LETTER SECHEROKEE SMALL LETTER SICHEROKEE SMALL LETTER SOCHE" + + "ROKEE SMALL LETTER SUCHEROKEE SMALL LETTER SVCHEROKEE SMALL LETTER DACHE" + + "ROKEE SMALL LETTER TACHEROKEE SMALL LETTER DECHEROKEE SMALL LETTER TECHE" + + "ROKEE SMALL LETTER DICHEROKEE SMALL LETTER TICHEROKEE SMALL LETTER DOCHE" + + "ROKEE SMALL LETTER DUCHEROKEE SMALL LETTER DVCHEROKEE SMALL LETTER DLACH" + + "EROKEE SMALL LETTER TLACHEROKEE SMALL LETTER TLECHEROKEE SMALL LETTER TL" + + "ICHEROKEE SMALL LETTER TLOCHEROKEE SMALL LETTER TLUCHEROKEE SMALL LETTER" + + " TLVCHEROKEE SMALL LETTER TSACHEROKEE SMALL LETTER TSECHEROKEE SMALL LET" + + "TER TSICHEROKEE SMALL LETTER TSOCHEROKEE SMALL LETTER TSUCHEROKEE SMALL " + + "LETTER TSVCHEROKEE SMALL LETTER WACHEROKEE SMALL LETTER WECHEROKEE SMALL" + + " LETTER WICHEROKEE SMALL LETTER WOCHEROKEE SMALL LETTER WUCHEROKEE SMALL" + + " LETTER WVCHEROKEE SMALL LETTER YAMEETEI MAYEK LETTER KOKMEETEI MAYEK LE" + + "TTER SAMMEETEI MAYEK LETTER LAIMEETEI MAYEK LETTER MITMEETEI MAYEK LETTE" + + "R PAMEETEI MAYEK LETTER NAMEETEI MAYEK LETTER CHILMEETEI MAYEK LETTER TI" + + "LMEETEI MAYEK LETTER KHOUMEETEI MAYEK LETTER NGOUMEETEI MAYEK LETTER THO" + + "UMEETEI MAYEK LETTER WAIMEETEI MAYEK LETTER YANGMEETEI MAYEK LETTER HUKM" + + "EETEI MAYEK LETTER UNMEETEI MAYEK LETTER IMEETEI MAYEK LETTER PHAMMEETEI" + + " MAYEK LETTER ATIYAMEETEI MAYEK LETTER GOKMEETEI MAYEK LETTER JHAMMEETEI" + + " MAYEK LETTER RAIMEETEI MAYEK LETTER BAMEETEI MAYEK LETTER JILMEETEI MAY" + + "EK LETTER DILMEETEI MAYEK LETTER GHOUMEETEI MAYEK LETTER DHOUMEETEI MAYE" + + "K LETTER BHAMMEETEI MAYEK LETTER KOK LONSUMMEETEI MAYEK LETTER LAI LONSU" + + "MMEETEI MAYEK LETTER MIT LONSUMMEETEI MAYEK LETTER PA LONSUMMEETEI MAYEK" + + " LETTER NA LONSUMMEETEI MAYEK LETTER TIL LONSUMMEETEI MAYEK LETTER NGOU " + + "LONSUMMEETEI MAYEK LETTER I LONSUMMEETEI MAYEK VOWEL SIGN ONAPMEETEI MAY" + + "EK VOWEL SIGN INAPMEETEI MAYEK VOWEL SIGN ANAPMEETEI MAYEK VOWEL SIGN YE" + + "NAPMEETEI MAYEK VOWEL SIGN SOUNAPMEETEI MAYEK VOWEL SIGN UNAPMEETEI MAYE" + + "K VOWEL SIGN CHEINAPMEETEI MAYEK VOWEL SIGN NUNGMEETEI MAYEK CHEIKHEIMEE" + + "TEI MAYEK LUM IYEKMEETEI MAYEK APUN IYEKMEETEI MAYEK DIGIT ZEROMEETEI MA" + + "YEK DIGIT ONEMEETEI MAYEK DIGIT TWOMEETEI MAYEK DIGIT THREEMEETEI MAYEK " + + "DIGIT FOURMEETEI MAYEK DIGIT FIVEMEETEI MAYEK DIGIT SIXMEETEI MAYEK DIGI" + + "T SEVENMEETEI MAYEK DIGIT EIGHTMEETEI MAYEK DIGIT NINEHANGUL JUNGSEONG O" + + "-YEOHANGUL JUNGSEONG O-O-IHANGUL JUNGSEONG YO-AHANGUL JUNGSEONG YO-AEHAN" + + "GUL JUNGSEONG YO-EOHANGUL JUNGSEONG U-YEOHANGUL JUNGSEONG U-I-IHANGUL JU" + + "NGSEONG YU-AEHANGUL JUNGSEONG YU-OHANGUL JUNGSEONG EU-AHANGUL JUNGSEONG " + + "EU-EOHANGUL JUNGSEONG EU-EHANGUL JUNGSEONG EU-OHANGUL JUNGSEONG I-YA-OHA" + + "NGUL JUNGSEONG I-YAEHANGUL JUNGSEONG I-YEOHANGUL JUNGSEONG I-YEHANGUL JU" + + "NGSEONG I-O-IHANGUL JUNGSEONG I-YOHANGUL JUNGSEONG I-YUHANGUL JUNGSEONG " + + "I-IHANGUL JUNGSEONG ARAEA-AHANGUL JUNGSEONG ARAEA-EHANGUL JONGSEONG NIEU" + + "N-RIEULHANGUL JONGSEONG NIEUN-CHIEUCHHANGUL JONGSEONG SSANGTIKEUTHANGUL " + + "JONGSEONG SSANGTIKEUT-PIEUPHANGUL JONGSEONG TIKEUT-PIEUPHANGUL JONGSEONG" + + " TIKEUT-SIOSHANGUL JONGSEONG TIKEUT-SIOS-KIYEOKHANGUL JONGSEONG TIKEUT-C" + + "IEUCHANGUL JONGSEONG TIKEUT-CHIEUCHHANGUL JONGSEONG TIKEUT-THIEUTHHANGUL" + + " JONGSEONG RIEUL-SSANGKIYEOKHANGUL JONGSEONG RIEUL-KIYEOK-HIEUHHANGUL JO" + + "NGSEONG SSANGRIEUL-KHIEUKHHANGUL JONGSEONG RIEUL-MIEUM-HIEUHHANGUL JONGS" + + "EONG RIEUL-PIEUP-TIKEUTHANGUL JONGSEONG RIEUL-PIEUP-PHIEUPHHANGUL JONGSE") + ("" + + "ONG RIEUL-YESIEUNGHANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUHHANGUL JONGSEO" + + "NG KAPYEOUNRIEULHANGUL JONGSEONG MIEUM-NIEUNHANGUL JONGSEONG MIEUM-SSANG" + + "NIEUNHANGUL JONGSEONG SSANGMIEUMHANGUL JONGSEONG MIEUM-PIEUP-SIOSHANGUL " + + "JONGSEONG MIEUM-CIEUCHANGUL JONGSEONG PIEUP-TIKEUTHANGUL JONGSEONG PIEUP" + + "-RIEUL-PHIEUPHHANGUL JONGSEONG PIEUP-MIEUMHANGUL JONGSEONG SSANGPIEUPHAN" + + "GUL JONGSEONG PIEUP-SIOS-TIKEUTHANGUL JONGSEONG PIEUP-CIEUCHANGUL JONGSE" + + "ONG PIEUP-CHIEUCHHANGUL JONGSEONG SIOS-MIEUMHANGUL JONGSEONG SIOS-KAPYEO" + + "UNPIEUPHANGUL JONGSEONG SSANGSIOS-KIYEOKHANGUL JONGSEONG SSANGSIOS-TIKEU" + + "THANGUL JONGSEONG SIOS-PANSIOSHANGUL JONGSEONG SIOS-CIEUCHANGUL JONGSEON" + + "G SIOS-CHIEUCHHANGUL JONGSEONG SIOS-THIEUTHHANGUL JONGSEONG SIOS-HIEUHHA" + + "NGUL JONGSEONG PANSIOS-PIEUPHANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUPHANGUL" + + " JONGSEONG YESIEUNG-MIEUMHANGUL JONGSEONG YESIEUNG-HIEUHHANGUL JONGSEONG" + + " CIEUC-PIEUPHANGUL JONGSEONG CIEUC-SSANGPIEUPHANGUL JONGSEONG SSANGCIEUC" + + "HANGUL JONGSEONG PHIEUPH-SIOSHANGUL JONGSEONG PHIEUPH-THIEUTHCJK COMPATI" + + "BILITY IDEOGRAPH-F900CJK COMPATIBILITY IDEOGRAPH-F901CJK COMPATIBILITY I" + + "DEOGRAPH-F902CJK COMPATIBILITY IDEOGRAPH-F903CJK COMPATIBILITY IDEOGRAPH" + + "-F904CJK COMPATIBILITY IDEOGRAPH-F905CJK COMPATIBILITY IDEOGRAPH-F906CJK" + + " COMPATIBILITY IDEOGRAPH-F907CJK COMPATIBILITY IDEOGRAPH-F908CJK COMPATI" + + "BILITY IDEOGRAPH-F909CJK COMPATIBILITY IDEOGRAPH-F90ACJK COMPATIBILITY I" + + "DEOGRAPH-F90BCJK COMPATIBILITY IDEOGRAPH-F90CCJK COMPATIBILITY IDEOGRAPH" + + "-F90DCJK COMPATIBILITY IDEOGRAPH-F90ECJK COMPATIBILITY IDEOGRAPH-F90FCJK" + + " COMPATIBILITY IDEOGRAPH-F910CJK COMPATIBILITY IDEOGRAPH-F911CJK COMPATI" + + "BILITY IDEOGRAPH-F912CJK COMPATIBILITY IDEOGRAPH-F913CJK COMPATIBILITY I" + + "DEOGRAPH-F914CJK COMPATIBILITY IDEOGRAPH-F915CJK COMPATIBILITY IDEOGRAPH" + + "-F916CJK COMPATIBILITY IDEOGRAPH-F917CJK COMPATIBILITY IDEOGRAPH-F918CJK" + + " COMPATIBILITY IDEOGRAPH-F919CJK COMPATIBILITY IDEOGRAPH-F91ACJK COMPATI" + + "BILITY IDEOGRAPH-F91BCJK COMPATIBILITY IDEOGRAPH-F91CCJK COMPATIBILITY I" + + "DEOGRAPH-F91DCJK COMPATIBILITY IDEOGRAPH-F91ECJK COMPATIBILITY IDEOGRAPH" + + "-F91FCJK COMPATIBILITY IDEOGRAPH-F920CJK COMPATIBILITY IDEOGRAPH-F921CJK" + + " COMPATIBILITY IDEOGRAPH-F922CJK COMPATIBILITY IDEOGRAPH-F923CJK COMPATI" + + "BILITY IDEOGRAPH-F924CJK COMPATIBILITY IDEOGRAPH-F925CJK COMPATIBILITY I" + + "DEOGRAPH-F926CJK COMPATIBILITY IDEOGRAPH-F927CJK COMPATIBILITY IDEOGRAPH" + + "-F928CJK COMPATIBILITY IDEOGRAPH-F929CJK COMPATIBILITY IDEOGRAPH-F92ACJK" + + " COMPATIBILITY IDEOGRAPH-F92BCJK COMPATIBILITY IDEOGRAPH-F92CCJK COMPATI" + + "BILITY IDEOGRAPH-F92DCJK COMPATIBILITY IDEOGRAPH-F92ECJK COMPATIBILITY I" + + "DEOGRAPH-F92FCJK COMPATIBILITY IDEOGRAPH-F930CJK COMPATIBILITY IDEOGRAPH" + + "-F931CJK COMPATIBILITY IDEOGRAPH-F932CJK COMPATIBILITY IDEOGRAPH-F933CJK" + + " COMPATIBILITY IDEOGRAPH-F934CJK COMPATIBILITY IDEOGRAPH-F935CJK COMPATI" + + "BILITY IDEOGRAPH-F936CJK COMPATIBILITY IDEOGRAPH-F937CJK COMPATIBILITY I" + + "DEOGRAPH-F938CJK COMPATIBILITY IDEOGRAPH-F939CJK COMPATIBILITY IDEOGRAPH" + + "-F93ACJK COMPATIBILITY IDEOGRAPH-F93BCJK COMPATIBILITY IDEOGRAPH-F93CCJK" + + " COMPATIBILITY IDEOGRAPH-F93DCJK COMPATIBILITY IDEOGRAPH-F93ECJK COMPATI" + + "BILITY IDEOGRAPH-F93FCJK COMPATIBILITY IDEOGRAPH-F940CJK COMPATIBILITY I" + + "DEOGRAPH-F941CJK COMPATIBILITY IDEOGRAPH-F942CJK COMPATIBILITY IDEOGRAPH" + + "-F943CJK COMPATIBILITY IDEOGRAPH-F944CJK COMPATIBILITY IDEOGRAPH-F945CJK" + + " COMPATIBILITY IDEOGRAPH-F946CJK COMPATIBILITY IDEOGRAPH-F947CJK COMPATI" + + "BILITY IDEOGRAPH-F948CJK COMPATIBILITY IDEOGRAPH-F949CJK COMPATIBILITY I" + + "DEOGRAPH-F94ACJK COMPATIBILITY IDEOGRAPH-F94BCJK COMPATIBILITY IDEOGRAPH" + + "-F94CCJK COMPATIBILITY IDEOGRAPH-F94DCJK COMPATIBILITY IDEOGRAPH-F94ECJK" + + " COMPATIBILITY IDEOGRAPH-F94FCJK COMPATIBILITY IDEOGRAPH-F950CJK COMPATI" + + "BILITY IDEOGRAPH-F951CJK COMPATIBILITY IDEOGRAPH-F952CJK COMPATIBILITY I" + + "DEOGRAPH-F953CJK COMPATIBILITY IDEOGRAPH-F954CJK COMPATIBILITY IDEOGRAPH" + + "-F955CJK COMPATIBILITY IDEOGRAPH-F956CJK COMPATIBILITY IDEOGRAPH-F957CJK" + + " COMPATIBILITY IDEOGRAPH-F958CJK COMPATIBILITY IDEOGRAPH-F959CJK COMPATI" + + "BILITY IDEOGRAPH-F95ACJK COMPATIBILITY IDEOGRAPH-F95BCJK COMPATIBILITY I" + + "DEOGRAPH-F95CCJK COMPATIBILITY IDEOGRAPH-F95DCJK COMPATIBILITY IDEOGRAPH" + + "-F95ECJK COMPATIBILITY IDEOGRAPH-F95FCJK COMPATIBILITY IDEOGRAPH-F960CJK" + + " COMPATIBILITY IDEOGRAPH-F961CJK COMPATIBILITY IDEOGRAPH-F962CJK COMPATI" + + "BILITY IDEOGRAPH-F963CJK COMPATIBILITY IDEOGRAPH-F964CJK COMPATIBILITY I" + + "DEOGRAPH-F965CJK COMPATIBILITY IDEOGRAPH-F966CJK COMPATIBILITY IDEOGRAPH" + + "-F967CJK COMPATIBILITY IDEOGRAPH-F968CJK COMPATIBILITY IDEOGRAPH-F969CJK" + + " COMPATIBILITY IDEOGRAPH-F96ACJK COMPATIBILITY IDEOGRAPH-F96BCJK COMPATI" + + "BILITY IDEOGRAPH-F96CCJK COMPATIBILITY IDEOGRAPH-F96DCJK COMPATIBILITY I" + + "DEOGRAPH-F96ECJK COMPATIBILITY IDEOGRAPH-F96FCJK COMPATIBILITY IDEOGRAPH") + ("" + + "-F970CJK COMPATIBILITY IDEOGRAPH-F971CJK COMPATIBILITY IDEOGRAPH-F972CJK" + + " COMPATIBILITY IDEOGRAPH-F973CJK COMPATIBILITY IDEOGRAPH-F974CJK COMPATI" + + "BILITY IDEOGRAPH-F975CJK COMPATIBILITY IDEOGRAPH-F976CJK COMPATIBILITY I" + + "DEOGRAPH-F977CJK COMPATIBILITY IDEOGRAPH-F978CJK COMPATIBILITY IDEOGRAPH" + + "-F979CJK COMPATIBILITY IDEOGRAPH-F97ACJK COMPATIBILITY IDEOGRAPH-F97BCJK" + + " COMPATIBILITY IDEOGRAPH-F97CCJK COMPATIBILITY IDEOGRAPH-F97DCJK COMPATI" + + "BILITY IDEOGRAPH-F97ECJK COMPATIBILITY IDEOGRAPH-F97FCJK COMPATIBILITY I" + + "DEOGRAPH-F980CJK COMPATIBILITY IDEOGRAPH-F981CJK COMPATIBILITY IDEOGRAPH" + + "-F982CJK COMPATIBILITY IDEOGRAPH-F983CJK COMPATIBILITY IDEOGRAPH-F984CJK" + + " COMPATIBILITY IDEOGRAPH-F985CJK COMPATIBILITY IDEOGRAPH-F986CJK COMPATI" + + "BILITY IDEOGRAPH-F987CJK COMPATIBILITY IDEOGRAPH-F988CJK COMPATIBILITY I" + + "DEOGRAPH-F989CJK COMPATIBILITY IDEOGRAPH-F98ACJK COMPATIBILITY IDEOGRAPH" + + "-F98BCJK COMPATIBILITY IDEOGRAPH-F98CCJK COMPATIBILITY IDEOGRAPH-F98DCJK" + + " COMPATIBILITY IDEOGRAPH-F98ECJK COMPATIBILITY IDEOGRAPH-F98FCJK COMPATI" + + "BILITY IDEOGRAPH-F990CJK COMPATIBILITY IDEOGRAPH-F991CJK COMPATIBILITY I" + + "DEOGRAPH-F992CJK COMPATIBILITY IDEOGRAPH-F993CJK COMPATIBILITY IDEOGRAPH" + + "-F994CJK COMPATIBILITY IDEOGRAPH-F995CJK COMPATIBILITY IDEOGRAPH-F996CJK" + + " COMPATIBILITY IDEOGRAPH-F997CJK COMPATIBILITY IDEOGRAPH-F998CJK COMPATI" + + "BILITY IDEOGRAPH-F999CJK COMPATIBILITY IDEOGRAPH-F99ACJK COMPATIBILITY I" + + "DEOGRAPH-F99BCJK COMPATIBILITY IDEOGRAPH-F99CCJK COMPATIBILITY IDEOGRAPH" + + "-F99DCJK COMPATIBILITY IDEOGRAPH-F99ECJK COMPATIBILITY IDEOGRAPH-F99FCJK" + + " COMPATIBILITY IDEOGRAPH-F9A0CJK COMPATIBILITY IDEOGRAPH-F9A1CJK COMPATI" + + "BILITY IDEOGRAPH-F9A2CJK COMPATIBILITY IDEOGRAPH-F9A3CJK COMPATIBILITY I" + + "DEOGRAPH-F9A4CJK COMPATIBILITY IDEOGRAPH-F9A5CJK COMPATIBILITY IDEOGRAPH" + + "-F9A6CJK COMPATIBILITY IDEOGRAPH-F9A7CJK COMPATIBILITY IDEOGRAPH-F9A8CJK" + + " COMPATIBILITY IDEOGRAPH-F9A9CJK COMPATIBILITY IDEOGRAPH-F9AACJK COMPATI" + + "BILITY IDEOGRAPH-F9ABCJK COMPATIBILITY IDEOGRAPH-F9ACCJK COMPATIBILITY I" + + "DEOGRAPH-F9ADCJK COMPATIBILITY IDEOGRAPH-F9AECJK COMPATIBILITY IDEOGRAPH" + + "-F9AFCJK COMPATIBILITY IDEOGRAPH-F9B0CJK COMPATIBILITY IDEOGRAPH-F9B1CJK" + + " COMPATIBILITY IDEOGRAPH-F9B2CJK COMPATIBILITY IDEOGRAPH-F9B3CJK COMPATI" + + "BILITY IDEOGRAPH-F9B4CJK COMPATIBILITY IDEOGRAPH-F9B5CJK COMPATIBILITY I" + + "DEOGRAPH-F9B6CJK COMPATIBILITY IDEOGRAPH-F9B7CJK COMPATIBILITY IDEOGRAPH" + + "-F9B8CJK COMPATIBILITY IDEOGRAPH-F9B9CJK COMPATIBILITY IDEOGRAPH-F9BACJK" + + " COMPATIBILITY IDEOGRAPH-F9BBCJK COMPATIBILITY IDEOGRAPH-F9BCCJK COMPATI" + + "BILITY IDEOGRAPH-F9BDCJK COMPATIBILITY IDEOGRAPH-F9BECJK COMPATIBILITY I" + + "DEOGRAPH-F9BFCJK COMPATIBILITY IDEOGRAPH-F9C0CJK COMPATIBILITY IDEOGRAPH" + + "-F9C1CJK COMPATIBILITY IDEOGRAPH-F9C2CJK COMPATIBILITY IDEOGRAPH-F9C3CJK" + + " COMPATIBILITY IDEOGRAPH-F9C4CJK COMPATIBILITY IDEOGRAPH-F9C5CJK COMPATI" + + "BILITY IDEOGRAPH-F9C6CJK COMPATIBILITY IDEOGRAPH-F9C7CJK COMPATIBILITY I" + + "DEOGRAPH-F9C8CJK COMPATIBILITY IDEOGRAPH-F9C9CJK COMPATIBILITY IDEOGRAPH" + + "-F9CACJK COMPATIBILITY IDEOGRAPH-F9CBCJK COMPATIBILITY IDEOGRAPH-F9CCCJK" + + " COMPATIBILITY IDEOGRAPH-F9CDCJK COMPATIBILITY IDEOGRAPH-F9CECJK COMPATI" + + "BILITY IDEOGRAPH-F9CFCJK COMPATIBILITY IDEOGRAPH-F9D0CJK COMPATIBILITY I" + + "DEOGRAPH-F9D1CJK COMPATIBILITY IDEOGRAPH-F9D2CJK COMPATIBILITY IDEOGRAPH" + + "-F9D3CJK COMPATIBILITY IDEOGRAPH-F9D4CJK COMPATIBILITY IDEOGRAPH-F9D5CJK" + + " COMPATIBILITY IDEOGRAPH-F9D6CJK COMPATIBILITY IDEOGRAPH-F9D7CJK COMPATI" + + "BILITY IDEOGRAPH-F9D8CJK COMPATIBILITY IDEOGRAPH-F9D9CJK COMPATIBILITY I" + + "DEOGRAPH-F9DACJK COMPATIBILITY IDEOGRAPH-F9DBCJK COMPATIBILITY IDEOGRAPH" + + "-F9DCCJK COMPATIBILITY IDEOGRAPH-F9DDCJK COMPATIBILITY IDEOGRAPH-F9DECJK" + + " COMPATIBILITY IDEOGRAPH-F9DFCJK COMPATIBILITY IDEOGRAPH-F9E0CJK COMPATI" + + "BILITY IDEOGRAPH-F9E1CJK COMPATIBILITY IDEOGRAPH-F9E2CJK COMPATIBILITY I" + + "DEOGRAPH-F9E3CJK COMPATIBILITY IDEOGRAPH-F9E4CJK COMPATIBILITY IDEOGRAPH" + + "-F9E5CJK COMPATIBILITY IDEOGRAPH-F9E6CJK COMPATIBILITY IDEOGRAPH-F9E7CJK" + + " COMPATIBILITY IDEOGRAPH-F9E8CJK COMPATIBILITY IDEOGRAPH-F9E9CJK COMPATI" + + "BILITY IDEOGRAPH-F9EACJK COMPATIBILITY IDEOGRAPH-F9EBCJK COMPATIBILITY I" + + "DEOGRAPH-F9ECCJK COMPATIBILITY IDEOGRAPH-F9EDCJK COMPATIBILITY IDEOGRAPH" + + "-F9EECJK COMPATIBILITY IDEOGRAPH-F9EFCJK COMPATIBILITY IDEOGRAPH-F9F0CJK" + + " COMPATIBILITY IDEOGRAPH-F9F1CJK COMPATIBILITY IDEOGRAPH-F9F2CJK COMPATI" + + "BILITY IDEOGRAPH-F9F3CJK COMPATIBILITY IDEOGRAPH-F9F4CJK COMPATIBILITY I" + + "DEOGRAPH-F9F5CJK COMPATIBILITY IDEOGRAPH-F9F6CJK COMPATIBILITY IDEOGRAPH" + + "-F9F7CJK COMPATIBILITY IDEOGRAPH-F9F8CJK COMPATIBILITY IDEOGRAPH-F9F9CJK" + + " COMPATIBILITY IDEOGRAPH-F9FACJK COMPATIBILITY IDEOGRAPH-F9FBCJK COMPATI" + + "BILITY IDEOGRAPH-F9FCCJK COMPATIBILITY IDEOGRAPH-F9FDCJK COMPATIBILITY I" + + "DEOGRAPH-F9FECJK COMPATIBILITY IDEOGRAPH-F9FFCJK COMPATIBILITY IDEOGRAPH") + ("" + + "-FA00CJK COMPATIBILITY IDEOGRAPH-FA01CJK COMPATIBILITY IDEOGRAPH-FA02CJK" + + " COMPATIBILITY IDEOGRAPH-FA03CJK COMPATIBILITY IDEOGRAPH-FA04CJK COMPATI" + + "BILITY IDEOGRAPH-FA05CJK COMPATIBILITY IDEOGRAPH-FA06CJK COMPATIBILITY I" + + "DEOGRAPH-FA07CJK COMPATIBILITY IDEOGRAPH-FA08CJK COMPATIBILITY IDEOGRAPH" + + "-FA09CJK COMPATIBILITY IDEOGRAPH-FA0ACJK COMPATIBILITY IDEOGRAPH-FA0BCJK" + + " COMPATIBILITY IDEOGRAPH-FA0CCJK COMPATIBILITY IDEOGRAPH-FA0DCJK COMPATI" + + "BILITY IDEOGRAPH-FA0ECJK COMPATIBILITY IDEOGRAPH-FA0FCJK COMPATIBILITY I" + + "DEOGRAPH-FA10CJK COMPATIBILITY IDEOGRAPH-FA11CJK COMPATIBILITY IDEOGRAPH" + + "-FA12CJK COMPATIBILITY IDEOGRAPH-FA13CJK COMPATIBILITY IDEOGRAPH-FA14CJK" + + " COMPATIBILITY IDEOGRAPH-FA15CJK COMPATIBILITY IDEOGRAPH-FA16CJK COMPATI" + + "BILITY IDEOGRAPH-FA17CJK COMPATIBILITY IDEOGRAPH-FA18CJK COMPATIBILITY I" + + "DEOGRAPH-FA19CJK COMPATIBILITY IDEOGRAPH-FA1ACJK COMPATIBILITY IDEOGRAPH" + + "-FA1BCJK COMPATIBILITY IDEOGRAPH-FA1CCJK COMPATIBILITY IDEOGRAPH-FA1DCJK" + + " COMPATIBILITY IDEOGRAPH-FA1ECJK COMPATIBILITY IDEOGRAPH-FA1FCJK COMPATI" + + "BILITY IDEOGRAPH-FA20CJK COMPATIBILITY IDEOGRAPH-FA21CJK COMPATIBILITY I" + + "DEOGRAPH-FA22CJK COMPATIBILITY IDEOGRAPH-FA23CJK COMPATIBILITY IDEOGRAPH" + + "-FA24CJK COMPATIBILITY IDEOGRAPH-FA25CJK COMPATIBILITY IDEOGRAPH-FA26CJK" + + " COMPATIBILITY IDEOGRAPH-FA27CJK COMPATIBILITY IDEOGRAPH-FA28CJK COMPATI" + + "BILITY IDEOGRAPH-FA29CJK COMPATIBILITY IDEOGRAPH-FA2ACJK COMPATIBILITY I" + + "DEOGRAPH-FA2BCJK COMPATIBILITY IDEOGRAPH-FA2CCJK COMPATIBILITY IDEOGRAPH" + + "-FA2DCJK COMPATIBILITY IDEOGRAPH-FA2ECJK COMPATIBILITY IDEOGRAPH-FA2FCJK" + + " COMPATIBILITY IDEOGRAPH-FA30CJK COMPATIBILITY IDEOGRAPH-FA31CJK COMPATI" + + "BILITY IDEOGRAPH-FA32CJK COMPATIBILITY IDEOGRAPH-FA33CJK COMPATIBILITY I" + + "DEOGRAPH-FA34CJK COMPATIBILITY IDEOGRAPH-FA35CJK COMPATIBILITY IDEOGRAPH" + + "-FA36CJK COMPATIBILITY IDEOGRAPH-FA37CJK COMPATIBILITY IDEOGRAPH-FA38CJK" + + " COMPATIBILITY IDEOGRAPH-FA39CJK COMPATIBILITY IDEOGRAPH-FA3ACJK COMPATI" + + "BILITY IDEOGRAPH-FA3BCJK COMPATIBILITY IDEOGRAPH-FA3CCJK COMPATIBILITY I" + + "DEOGRAPH-FA3DCJK COMPATIBILITY IDEOGRAPH-FA3ECJK COMPATIBILITY IDEOGRAPH" + + "-FA3FCJK COMPATIBILITY IDEOGRAPH-FA40CJK COMPATIBILITY IDEOGRAPH-FA41CJK" + + " COMPATIBILITY IDEOGRAPH-FA42CJK COMPATIBILITY IDEOGRAPH-FA43CJK COMPATI" + + "BILITY IDEOGRAPH-FA44CJK COMPATIBILITY IDEOGRAPH-FA45CJK COMPATIBILITY I" + + "DEOGRAPH-FA46CJK COMPATIBILITY IDEOGRAPH-FA47CJK COMPATIBILITY IDEOGRAPH" + + "-FA48CJK COMPATIBILITY IDEOGRAPH-FA49CJK COMPATIBILITY IDEOGRAPH-FA4ACJK" + + " COMPATIBILITY IDEOGRAPH-FA4BCJK COMPATIBILITY IDEOGRAPH-FA4CCJK COMPATI" + + "BILITY IDEOGRAPH-FA4DCJK COMPATIBILITY IDEOGRAPH-FA4ECJK COMPATIBILITY I" + + "DEOGRAPH-FA4FCJK COMPATIBILITY IDEOGRAPH-FA50CJK COMPATIBILITY IDEOGRAPH" + + "-FA51CJK COMPATIBILITY IDEOGRAPH-FA52CJK COMPATIBILITY IDEOGRAPH-FA53CJK" + + " COMPATIBILITY IDEOGRAPH-FA54CJK COMPATIBILITY IDEOGRAPH-FA55CJK COMPATI" + + "BILITY IDEOGRAPH-FA56CJK COMPATIBILITY IDEOGRAPH-FA57CJK COMPATIBILITY I" + + "DEOGRAPH-FA58CJK COMPATIBILITY IDEOGRAPH-FA59CJK COMPATIBILITY IDEOGRAPH" + + "-FA5ACJK COMPATIBILITY IDEOGRAPH-FA5BCJK COMPATIBILITY IDEOGRAPH-FA5CCJK" + + " COMPATIBILITY IDEOGRAPH-FA5DCJK COMPATIBILITY IDEOGRAPH-FA5ECJK COMPATI" + + "BILITY IDEOGRAPH-FA5FCJK COMPATIBILITY IDEOGRAPH-FA60CJK COMPATIBILITY I" + + "DEOGRAPH-FA61CJK COMPATIBILITY IDEOGRAPH-FA62CJK COMPATIBILITY IDEOGRAPH" + + "-FA63CJK COMPATIBILITY IDEOGRAPH-FA64CJK COMPATIBILITY IDEOGRAPH-FA65CJK" + + " COMPATIBILITY IDEOGRAPH-FA66CJK COMPATIBILITY IDEOGRAPH-FA67CJK COMPATI" + + "BILITY IDEOGRAPH-FA68CJK COMPATIBILITY IDEOGRAPH-FA69CJK COMPATIBILITY I" + + "DEOGRAPH-FA6ACJK COMPATIBILITY IDEOGRAPH-FA6BCJK COMPATIBILITY IDEOGRAPH" + + "-FA6CCJK COMPATIBILITY IDEOGRAPH-FA6DCJK COMPATIBILITY IDEOGRAPH-FA70CJK" + + " COMPATIBILITY IDEOGRAPH-FA71CJK COMPATIBILITY IDEOGRAPH-FA72CJK COMPATI" + + "BILITY IDEOGRAPH-FA73CJK COMPATIBILITY IDEOGRAPH-FA74CJK COMPATIBILITY I" + + "DEOGRAPH-FA75CJK COMPATIBILITY IDEOGRAPH-FA76CJK COMPATIBILITY IDEOGRAPH" + + "-FA77CJK COMPATIBILITY IDEOGRAPH-FA78CJK COMPATIBILITY IDEOGRAPH-FA79CJK" + + " COMPATIBILITY IDEOGRAPH-FA7ACJK COMPATIBILITY IDEOGRAPH-FA7BCJK COMPATI" + + "BILITY IDEOGRAPH-FA7CCJK COMPATIBILITY IDEOGRAPH-FA7DCJK COMPATIBILITY I" + + "DEOGRAPH-FA7ECJK COMPATIBILITY IDEOGRAPH-FA7FCJK COMPATIBILITY IDEOGRAPH" + + "-FA80CJK COMPATIBILITY IDEOGRAPH-FA81CJK COMPATIBILITY IDEOGRAPH-FA82CJK" + + " COMPATIBILITY IDEOGRAPH-FA83CJK COMPATIBILITY IDEOGRAPH-FA84CJK COMPATI" + + "BILITY IDEOGRAPH-FA85CJK COMPATIBILITY IDEOGRAPH-FA86CJK COMPATIBILITY I" + + "DEOGRAPH-FA87CJK COMPATIBILITY IDEOGRAPH-FA88CJK COMPATIBILITY IDEOGRAPH" + + "-FA89CJK COMPATIBILITY IDEOGRAPH-FA8ACJK COMPATIBILITY IDEOGRAPH-FA8BCJK" + + " COMPATIBILITY IDEOGRAPH-FA8CCJK COMPATIBILITY IDEOGRAPH-FA8DCJK COMPATI" + + "BILITY IDEOGRAPH-FA8ECJK COMPATIBILITY IDEOGRAPH-FA8FCJK COMPATIBILITY I" + + "DEOGRAPH-FA90CJK COMPATIBILITY IDEOGRAPH-FA91CJK COMPATIBILITY IDEOGRAPH") + ("" + + "-FA92CJK COMPATIBILITY IDEOGRAPH-FA93CJK COMPATIBILITY IDEOGRAPH-FA94CJK" + + " COMPATIBILITY IDEOGRAPH-FA95CJK COMPATIBILITY IDEOGRAPH-FA96CJK COMPATI" + + "BILITY IDEOGRAPH-FA97CJK COMPATIBILITY IDEOGRAPH-FA98CJK COMPATIBILITY I" + + "DEOGRAPH-FA99CJK COMPATIBILITY IDEOGRAPH-FA9ACJK COMPATIBILITY IDEOGRAPH" + + "-FA9BCJK COMPATIBILITY IDEOGRAPH-FA9CCJK COMPATIBILITY IDEOGRAPH-FA9DCJK" + + " COMPATIBILITY IDEOGRAPH-FA9ECJK COMPATIBILITY IDEOGRAPH-FA9FCJK COMPATI" + + "BILITY IDEOGRAPH-FAA0CJK COMPATIBILITY IDEOGRAPH-FAA1CJK COMPATIBILITY I" + + "DEOGRAPH-FAA2CJK COMPATIBILITY IDEOGRAPH-FAA3CJK COMPATIBILITY IDEOGRAPH" + + "-FAA4CJK COMPATIBILITY IDEOGRAPH-FAA5CJK COMPATIBILITY IDEOGRAPH-FAA6CJK" + + " COMPATIBILITY IDEOGRAPH-FAA7CJK COMPATIBILITY IDEOGRAPH-FAA8CJK COMPATI" + + "BILITY IDEOGRAPH-FAA9CJK COMPATIBILITY IDEOGRAPH-FAAACJK COMPATIBILITY I" + + "DEOGRAPH-FAABCJK COMPATIBILITY IDEOGRAPH-FAACCJK COMPATIBILITY IDEOGRAPH" + + "-FAADCJK COMPATIBILITY IDEOGRAPH-FAAECJK COMPATIBILITY IDEOGRAPH-FAAFCJK" + + " COMPATIBILITY IDEOGRAPH-FAB0CJK COMPATIBILITY IDEOGRAPH-FAB1CJK COMPATI" + + "BILITY IDEOGRAPH-FAB2CJK COMPATIBILITY IDEOGRAPH-FAB3CJK COMPATIBILITY I" + + "DEOGRAPH-FAB4CJK COMPATIBILITY IDEOGRAPH-FAB5CJK COMPATIBILITY IDEOGRAPH" + + "-FAB6CJK COMPATIBILITY IDEOGRAPH-FAB7CJK COMPATIBILITY IDEOGRAPH-FAB8CJK" + + " COMPATIBILITY IDEOGRAPH-FAB9CJK COMPATIBILITY IDEOGRAPH-FABACJK COMPATI" + + "BILITY IDEOGRAPH-FABBCJK COMPATIBILITY IDEOGRAPH-FABCCJK COMPATIBILITY I" + + "DEOGRAPH-FABDCJK COMPATIBILITY IDEOGRAPH-FABECJK COMPATIBILITY IDEOGRAPH" + + "-FABFCJK COMPATIBILITY IDEOGRAPH-FAC0CJK COMPATIBILITY IDEOGRAPH-FAC1CJK" + + " COMPATIBILITY IDEOGRAPH-FAC2CJK COMPATIBILITY IDEOGRAPH-FAC3CJK COMPATI" + + "BILITY IDEOGRAPH-FAC4CJK COMPATIBILITY IDEOGRAPH-FAC5CJK COMPATIBILITY I" + + "DEOGRAPH-FAC6CJK COMPATIBILITY IDEOGRAPH-FAC7CJK COMPATIBILITY IDEOGRAPH" + + "-FAC8CJK COMPATIBILITY IDEOGRAPH-FAC9CJK COMPATIBILITY IDEOGRAPH-FACACJK" + + " COMPATIBILITY IDEOGRAPH-FACBCJK COMPATIBILITY IDEOGRAPH-FACCCJK COMPATI" + + "BILITY IDEOGRAPH-FACDCJK COMPATIBILITY IDEOGRAPH-FACECJK COMPATIBILITY I" + + "DEOGRAPH-FACFCJK COMPATIBILITY IDEOGRAPH-FAD0CJK COMPATIBILITY IDEOGRAPH" + + "-FAD1CJK COMPATIBILITY IDEOGRAPH-FAD2CJK COMPATIBILITY IDEOGRAPH-FAD3CJK" + + " COMPATIBILITY IDEOGRAPH-FAD4CJK COMPATIBILITY IDEOGRAPH-FAD5CJK COMPATI" + + "BILITY IDEOGRAPH-FAD6CJK COMPATIBILITY IDEOGRAPH-FAD7CJK COMPATIBILITY I" + + "DEOGRAPH-FAD8CJK COMPATIBILITY IDEOGRAPH-FAD9LATIN SMALL LIGATURE FFLATI" + + "N SMALL LIGATURE FILATIN SMALL LIGATURE FLLATIN SMALL LIGATURE FFILATIN " + + "SMALL LIGATURE FFLLATIN SMALL LIGATURE LONG S TLATIN SMALL LIGATURE STAR" + + "MENIAN SMALL LIGATURE MEN NOWARMENIAN SMALL LIGATURE MEN ECHARMENIAN SMA" + + "LL LIGATURE MEN INIARMENIAN SMALL LIGATURE VEW NOWARMENIAN SMALL LIGATUR" + + "E MEN XEHHEBREW LETTER YOD WITH HIRIQHEBREW POINT JUDEO-SPANISH VARIKAHE" + + "BREW LIGATURE YIDDISH YOD YOD PATAHHEBREW LETTER ALTERNATIVE AYINHEBREW " + + "LETTER WIDE ALEFHEBREW LETTER WIDE DALETHEBREW LETTER WIDE HEHEBREW LETT" + + "ER WIDE KAFHEBREW LETTER WIDE LAMEDHEBREW LETTER WIDE FINAL MEMHEBREW LE" + + "TTER WIDE RESHHEBREW LETTER WIDE TAVHEBREW LETTER ALTERNATIVE PLUS SIGNH" + + "EBREW LETTER SHIN WITH SHIN DOTHEBREW LETTER SHIN WITH SIN DOTHEBREW LET" + + "TER SHIN WITH DAGESH AND SHIN DOTHEBREW LETTER SHIN WITH DAGESH AND SIN " + + "DOTHEBREW LETTER ALEF WITH PATAHHEBREW LETTER ALEF WITH QAMATSHEBREW LET" + + "TER ALEF WITH MAPIQHEBREW LETTER BET WITH DAGESHHEBREW LETTER GIMEL WITH" + + " DAGESHHEBREW LETTER DALET WITH DAGESHHEBREW LETTER HE WITH MAPIQHEBREW " + + "LETTER VAV WITH DAGESHHEBREW LETTER ZAYIN WITH DAGESHHEBREW LETTER TET W" + + "ITH DAGESHHEBREW LETTER YOD WITH DAGESHHEBREW LETTER FINAL KAF WITH DAGE" + + "SHHEBREW LETTER KAF WITH DAGESHHEBREW LETTER LAMED WITH DAGESHHEBREW LET" + + "TER MEM WITH DAGESHHEBREW LETTER NUN WITH DAGESHHEBREW LETTER SAMEKH WIT" + + "H DAGESHHEBREW LETTER FINAL PE WITH DAGESHHEBREW LETTER PE WITH DAGESHHE" + + "BREW LETTER TSADI WITH DAGESHHEBREW LETTER QOF WITH DAGESHHEBREW LETTER " + + "RESH WITH DAGESHHEBREW LETTER SHIN WITH DAGESHHEBREW LETTER TAV WITH DAG" + + "ESHHEBREW LETTER VAV WITH HOLAMHEBREW LETTER BET WITH RAFEHEBREW LETTER " + + "KAF WITH RAFEHEBREW LETTER PE WITH RAFEHEBREW LIGATURE ALEF LAMEDARABIC " + + "LETTER ALEF WASLA ISOLATED FORMARABIC LETTER ALEF WASLA FINAL FORMARABIC" + + " LETTER BEEH ISOLATED FORMARABIC LETTER BEEH FINAL FORMARABIC LETTER BEE" + + "H INITIAL FORMARABIC LETTER BEEH MEDIAL FORMARABIC LETTER PEH ISOLATED F" + + "ORMARABIC LETTER PEH FINAL FORMARABIC LETTER PEH INITIAL FORMARABIC LETT" + + "ER PEH MEDIAL FORMARABIC LETTER BEHEH ISOLATED FORMARABIC LETTER BEHEH F" + + "INAL FORMARABIC LETTER BEHEH INITIAL FORMARABIC LETTER BEHEH MEDIAL FORM" + + "ARABIC LETTER TTEHEH ISOLATED FORMARABIC LETTER TTEHEH FINAL FORMARABIC " + + "LETTER TTEHEH INITIAL FORMARABIC LETTER TTEHEH MEDIAL FORMARABIC LETTER " + + "TEHEH ISOLATED FORMARABIC LETTER TEHEH FINAL FORMARABIC LETTER TEHEH INI") + ("" + + "TIAL FORMARABIC LETTER TEHEH MEDIAL FORMARABIC LETTER TTEH ISOLATED FORM" + + "ARABIC LETTER TTEH FINAL FORMARABIC LETTER TTEH INITIAL FORMARABIC LETTE" + + "R TTEH MEDIAL FORMARABIC LETTER VEH ISOLATED FORMARABIC LETTER VEH FINAL" + + " FORMARABIC LETTER VEH INITIAL FORMARABIC LETTER VEH MEDIAL FORMARABIC L" + + "ETTER PEHEH ISOLATED FORMARABIC LETTER PEHEH FINAL FORMARABIC LETTER PEH" + + "EH INITIAL FORMARABIC LETTER PEHEH MEDIAL FORMARABIC LETTER DYEH ISOLATE" + + "D FORMARABIC LETTER DYEH FINAL FORMARABIC LETTER DYEH INITIAL FORMARABIC" + + " LETTER DYEH MEDIAL FORMARABIC LETTER NYEH ISOLATED FORMARABIC LETTER NY" + + "EH FINAL FORMARABIC LETTER NYEH INITIAL FORMARABIC LETTER NYEH MEDIAL FO" + + "RMARABIC LETTER TCHEH ISOLATED FORMARABIC LETTER TCHEH FINAL FORMARABIC " + + "LETTER TCHEH INITIAL FORMARABIC LETTER TCHEH MEDIAL FORMARABIC LETTER TC" + + "HEHEH ISOLATED FORMARABIC LETTER TCHEHEH FINAL FORMARABIC LETTER TCHEHEH" + + " INITIAL FORMARABIC LETTER TCHEHEH MEDIAL FORMARABIC LETTER DDAHAL ISOLA" + + "TED FORMARABIC LETTER DDAHAL FINAL FORMARABIC LETTER DAHAL ISOLATED FORM" + + "ARABIC LETTER DAHAL FINAL FORMARABIC LETTER DUL ISOLATED FORMARABIC LETT" + + "ER DUL FINAL FORMARABIC LETTER DDAL ISOLATED FORMARABIC LETTER DDAL FINA" + + "L FORMARABIC LETTER JEH ISOLATED FORMARABIC LETTER JEH FINAL FORMARABIC " + + "LETTER RREH ISOLATED FORMARABIC LETTER RREH FINAL FORMARABIC LETTER KEHE" + + "H ISOLATED FORMARABIC LETTER KEHEH FINAL FORMARABIC LETTER KEHEH INITIAL" + + " FORMARABIC LETTER KEHEH MEDIAL FORMARABIC LETTER GAF ISOLATED FORMARABI" + + "C LETTER GAF FINAL FORMARABIC LETTER GAF INITIAL FORMARABIC LETTER GAF M" + + "EDIAL FORMARABIC LETTER GUEH ISOLATED FORMARABIC LETTER GUEH FINAL FORMA" + + "RABIC LETTER GUEH INITIAL FORMARABIC LETTER GUEH MEDIAL FORMARABIC LETTE" + + "R NGOEH ISOLATED FORMARABIC LETTER NGOEH FINAL FORMARABIC LETTER NGOEH I" + + "NITIAL FORMARABIC LETTER NGOEH MEDIAL FORMARABIC LETTER NOON GHUNNA ISOL" + + "ATED FORMARABIC LETTER NOON GHUNNA FINAL FORMARABIC LETTER RNOON ISOLATE" + + "D FORMARABIC LETTER RNOON FINAL FORMARABIC LETTER RNOON INITIAL FORMARAB" + + "IC LETTER RNOON MEDIAL FORMARABIC LETTER HEH WITH YEH ABOVE ISOLATED FOR" + + "MARABIC LETTER HEH WITH YEH ABOVE FINAL FORMARABIC LETTER HEH GOAL ISOLA" + + "TED FORMARABIC LETTER HEH GOAL FINAL FORMARABIC LETTER HEH GOAL INITIAL " + + "FORMARABIC LETTER HEH GOAL MEDIAL FORMARABIC LETTER HEH DOACHASHMEE ISOL" + + "ATED FORMARABIC LETTER HEH DOACHASHMEE FINAL FORMARABIC LETTER HEH DOACH" + + "ASHMEE INITIAL FORMARABIC LETTER HEH DOACHASHMEE MEDIAL FORMARABIC LETTE" + + "R YEH BARREE ISOLATED FORMARABIC LETTER YEH BARREE FINAL FORMARABIC LETT" + + "ER YEH BARREE WITH HAMZA ABOVE ISOLATED FORMARABIC LETTER YEH BARREE WIT" + + "H HAMZA ABOVE FINAL FORMARABIC SYMBOL DOT ABOVEARABIC SYMBOL DOT BELOWAR" + + "ABIC SYMBOL TWO DOTS ABOVEARABIC SYMBOL TWO DOTS BELOWARABIC SYMBOL THRE" + + "E DOTS ABOVEARABIC SYMBOL THREE DOTS BELOWARABIC SYMBOL THREE DOTS POINT" + + "ING DOWNWARDS ABOVEARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOWARAB" + + "IC SYMBOL FOUR DOTS ABOVEARABIC SYMBOL FOUR DOTS BELOWARABIC SYMBOL DOUB" + + "LE VERTICAL BAR BELOWARABIC SYMBOL TWO DOTS VERTICALLY ABOVEARABIC SYMBO" + + "L TWO DOTS VERTICALLY BELOWARABIC SYMBOL RINGARABIC SYMBOL SMALL TAH ABO" + + "VEARABIC SYMBOL SMALL TAH BELOWARABIC LETTER NG ISOLATED FORMARABIC LETT" + + "ER NG FINAL FORMARABIC LETTER NG INITIAL FORMARABIC LETTER NG MEDIAL FOR" + + "MARABIC LETTER U ISOLATED FORMARABIC LETTER U FINAL FORMARABIC LETTER OE" + + " ISOLATED FORMARABIC LETTER OE FINAL FORMARABIC LETTER YU ISOLATED FORMA" + + "RABIC LETTER YU FINAL FORMARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM" + + "ARABIC LETTER VE ISOLATED FORMARABIC LETTER VE FINAL FORMARABIC LETTER K" + + "IRGHIZ OE ISOLATED FORMARABIC LETTER KIRGHIZ OE FINAL FORMARABIC LETTER " + + "KIRGHIZ YU ISOLATED FORMARABIC LETTER KIRGHIZ YU FINAL FORMARABIC LETTER" + + " E ISOLATED FORMARABIC LETTER E FINAL FORMARABIC LETTER E INITIAL FORMAR" + + "ABIC LETTER E MEDIAL FORMARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSUR" + + "A INITIAL FORMARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FO" + + "RMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORMARABIC LIG" + + "ATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORMARABIC LIGATURE YEH WITH " + + "HAMZA ABOVE WITH AE ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WI" + + "TH AE FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED F" + + "ORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORMARABIC LIGATU" + + "RE YEH WITH HAMZA ABOVE WITH U ISOLATED FORMARABIC LIGATURE YEH WITH HAM" + + "ZA ABOVE WITH U FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE I" + + "SOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORMARABI" + + "C LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORMARABIC LIGATURE YEH" + + " WITH HAMZA ABOVE WITH YU FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE" + + " WITH E ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL F") + ("" + + "ORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORMARABIC LIGATU" + + "RE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMAR" + + "ABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINA" + + "L FORMARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKS" + + "URA INITIAL FORMARABIC LETTER FARSI YEH ISOLATED FORMARABIC LETTER FARSI" + + " YEH FINAL FORMARABIC LETTER FARSI YEH INITIAL FORMARABIC LETTER FARSI Y" + + "EH MEDIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FO" + + "RMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORMARABIC LIGA" + + "TURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORMARABIC LIGATURE YEH WIT" + + "H HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE YEH WITH HA" + + "MZA ABOVE WITH YEH ISOLATED FORMARABIC LIGATURE BEH WITH JEEM ISOLATED F" + + "ORMARABIC LIGATURE BEH WITH HAH ISOLATED FORMARABIC LIGATURE BEH WITH KH" + + "AH ISOLATED FORMARABIC LIGATURE BEH WITH MEEM ISOLATED FORMARABIC LIGATU" + + "RE BEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE BEH WITH YEH ISOLA" + + "TED FORMARABIC LIGATURE TEH WITH JEEM ISOLATED FORMARABIC LIGATURE TEH W" + + "ITH HAH ISOLATED FORMARABIC LIGATURE TEH WITH KHAH ISOLATED FORMARABIC L" + + "IGATURE TEH WITH MEEM ISOLATED FORMARABIC LIGATURE TEH WITH ALEF MAKSURA" + + " ISOLATED FORMARABIC LIGATURE TEH WITH YEH ISOLATED FORMARABIC LIGATURE " + + "THEH WITH JEEM ISOLATED FORMARABIC LIGATURE THEH WITH MEEM ISOLATED FORM" + + "ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE THEH" + + " WITH YEH ISOLATED FORMARABIC LIGATURE JEEM WITH HAH ISOLATED FORMARABIC" + + " LIGATURE JEEM WITH MEEM ISOLATED FORMARABIC LIGATURE HAH WITH JEEM ISOL" + + "ATED FORMARABIC LIGATURE HAH WITH MEEM ISOLATED FORMARABIC LIGATURE KHAH" + + " WITH JEEM ISOLATED FORMARABIC LIGATURE KHAH WITH HAH ISOLATED FORMARABI" + + "C LIGATURE KHAH WITH MEEM ISOLATED FORMARABIC LIGATURE SEEN WITH JEEM IS" + + "OLATED FORMARABIC LIGATURE SEEN WITH HAH ISOLATED FORMARABIC LIGATURE SE" + + "EN WITH KHAH ISOLATED FORMARABIC LIGATURE SEEN WITH MEEM ISOLATED FORMAR" + + "ABIC LIGATURE SAD WITH HAH ISOLATED FORMARABIC LIGATURE SAD WITH MEEM IS" + + "OLATED FORMARABIC LIGATURE DAD WITH JEEM ISOLATED FORMARABIC LIGATURE DA" + + "D WITH HAH ISOLATED FORMARABIC LIGATURE DAD WITH KHAH ISOLATED FORMARABI" + + "C LIGATURE DAD WITH MEEM ISOLATED FORMARABIC LIGATURE TAH WITH HAH ISOLA" + + "TED FORMARABIC LIGATURE TAH WITH MEEM ISOLATED FORMARABIC LIGATURE ZAH W" + + "ITH MEEM ISOLATED FORMARABIC LIGATURE AIN WITH JEEM ISOLATED FORMARABIC " + + "LIGATURE AIN WITH MEEM ISOLATED FORMARABIC LIGATURE GHAIN WITH JEEM ISOL" + + "ATED FORMARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORMARABIC LIGATURE FE" + + "H WITH JEEM ISOLATED FORMARABIC LIGATURE FEH WITH HAH ISOLATED FORMARABI" + + "C LIGATURE FEH WITH KHAH ISOLATED FORMARABIC LIGATURE FEH WITH MEEM ISOL" + + "ATED FORMARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGAT" + + "URE FEH WITH YEH ISOLATED FORMARABIC LIGATURE QAF WITH HAH ISOLATED FORM" + + "ARABIC LIGATURE QAF WITH MEEM ISOLATED FORMARABIC LIGATURE QAF WITH ALEF" + + " MAKSURA ISOLATED FORMARABIC LIGATURE QAF WITH YEH ISOLATED FORMARABIC L" + + "IGATURE KAF WITH ALEF ISOLATED FORMARABIC LIGATURE KAF WITH JEEM ISOLATE" + + "D FORMARABIC LIGATURE KAF WITH HAH ISOLATED FORMARABIC LIGATURE KAF WITH" + + " KHAH ISOLATED FORMARABIC LIGATURE KAF WITH LAM ISOLATED FORMARABIC LIGA" + + "TURE KAF WITH MEEM ISOLATED FORMARABIC LIGATURE KAF WITH ALEF MAKSURA IS" + + "OLATED FORMARABIC LIGATURE KAF WITH YEH ISOLATED FORMARABIC LIGATURE LAM" + + " WITH JEEM ISOLATED FORMARABIC LIGATURE LAM WITH HAH ISOLATED FORMARABIC" + + " LIGATURE LAM WITH KHAH ISOLATED FORMARABIC LIGATURE LAM WITH MEEM ISOLA" + + "TED FORMARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATU" + + "RE LAM WITH YEH ISOLATED FORMARABIC LIGATURE MEEM WITH JEEM ISOLATED FOR" + + "MARABIC LIGATURE MEEM WITH HAH ISOLATED FORMARABIC LIGATURE MEEM WITH KH" + + "AH ISOLATED FORMARABIC LIGATURE MEEM WITH MEEM ISOLATED FORMARABIC LIGAT" + + "URE MEEM WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE MEEM WITH YEH IS" + + "OLATED FORMARABIC LIGATURE NOON WITH JEEM ISOLATED FORMARABIC LIGATURE N" + + "OON WITH HAH ISOLATED FORMARABIC LIGATURE NOON WITH KHAH ISOLATED FORMAR" + + "ABIC LIGATURE NOON WITH MEEM ISOLATED FORMARABIC LIGATURE NOON WITH ALEF" + + " MAKSURA ISOLATED FORMARABIC LIGATURE NOON WITH YEH ISOLATED FORMARABIC " + + "LIGATURE HEH WITH JEEM ISOLATED FORMARABIC LIGATURE HEH WITH MEEM ISOLAT" + + "ED FORMARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATUR" + + "E HEH WITH YEH ISOLATED FORMARABIC LIGATURE YEH WITH JEEM ISOLATED FORMA" + + "RABIC LIGATURE YEH WITH HAH ISOLATED FORMARABIC LIGATURE YEH WITH KHAH I" + + "SOLATED FORMARABIC LIGATURE YEH WITH MEEM ISOLATED FORMARABIC LIGATURE Y" + + "EH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE YEH WITH YEH ISOLATED " + + "FORMARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGAT") + ("" + + "URE REH WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGATURE ALEF MAKSURA " + + "WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGATURE SHADDA WITH DAMMATAN " + + "ISOLATED FORMARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORMARABIC LI" + + "GATURE SHADDA WITH FATHA ISOLATED FORMARABIC LIGATURE SHADDA WITH DAMMA " + + "ISOLATED FORMARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORMARABIC LIGAT" + + "URE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGATURE YEH WITH H" + + "AMZA ABOVE WITH REH FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH " + + "ZAIN FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM" + + "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORMARABIC LIGATURE" + + " YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE YEH WI" + + "TH HAMZA ABOVE WITH YEH FINAL FORMARABIC LIGATURE BEH WITH REH FINAL FOR" + + "MARABIC LIGATURE BEH WITH ZAIN FINAL FORMARABIC LIGATURE BEH WITH MEEM F" + + "INAL FORMARABIC LIGATURE BEH WITH NOON FINAL FORMARABIC LIGATURE BEH WIT" + + "H ALEF MAKSURA FINAL FORMARABIC LIGATURE BEH WITH YEH FINAL FORMARABIC L" + + "IGATURE TEH WITH REH FINAL FORMARABIC LIGATURE TEH WITH ZAIN FINAL FORMA" + + "RABIC LIGATURE TEH WITH MEEM FINAL FORMARABIC LIGATURE TEH WITH NOON FIN" + + "AL FORMARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE T" + + "EH WITH YEH FINAL FORMARABIC LIGATURE THEH WITH REH FINAL FORMARABIC LIG" + + "ATURE THEH WITH ZAIN FINAL FORMARABIC LIGATURE THEH WITH MEEM FINAL FORM" + + "ARABIC LIGATURE THEH WITH NOON FINAL FORMARABIC LIGATURE THEH WITH ALEF " + + "MAKSURA FINAL FORMARABIC LIGATURE THEH WITH YEH FINAL FORMARABIC LIGATUR" + + "E FEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE FEH WITH YEH FINAL FOR" + + "MARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE QAF WIT" + + "H YEH FINAL FORMARABIC LIGATURE KAF WITH ALEF FINAL FORMARABIC LIGATURE " + + "KAF WITH LAM FINAL FORMARABIC LIGATURE KAF WITH MEEM FINAL FORMARABIC LI" + + "GATURE KAF WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE KAF WITH YEH FINA" + + "L FORMARABIC LIGATURE LAM WITH MEEM FINAL FORMARABIC LIGATURE LAM WITH A" + + "LEF MAKSURA FINAL FORMARABIC LIGATURE LAM WITH YEH FINAL FORMARABIC LIGA" + + "TURE MEEM WITH ALEF FINAL FORMARABIC LIGATURE MEEM WITH MEEM FINAL FORMA" + + "RABIC LIGATURE NOON WITH REH FINAL FORMARABIC LIGATURE NOON WITH ZAIN FI" + + "NAL FORMARABIC LIGATURE NOON WITH MEEM FINAL FORMARABIC LIGATURE NOON WI" + + "TH NOON FINAL FORMARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORMARABI" + + "C LIGATURE NOON WITH YEH FINAL FORMARABIC LIGATURE ALEF MAKSURA WITH SUP" + + "ERSCRIPT ALEF FINAL FORMARABIC LIGATURE YEH WITH REH FINAL FORMARABIC LI" + + "GATURE YEH WITH ZAIN FINAL FORMARABIC LIGATURE YEH WITH MEEM FINAL FORMA" + + "RABIC LIGATURE YEH WITH NOON FINAL FORMARABIC LIGATURE YEH WITH ALEF MAK" + + "SURA FINAL FORMARABIC LIGATURE YEH WITH YEH FINAL FORMARABIC LIGATURE YE" + + "H WITH HAMZA ABOVE WITH JEEM INITIAL FORMARABIC LIGATURE YEH WITH HAMZA " + + "ABOVE WITH HAH INITIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHA" + + "H INITIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FOR" + + "MARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORMARABIC LIGATU" + + "RE BEH WITH JEEM INITIAL FORMARABIC LIGATURE BEH WITH HAH INITIAL FORMAR" + + "ABIC LIGATURE BEH WITH KHAH INITIAL FORMARABIC LIGATURE BEH WITH MEEM IN" + + "ITIAL FORMARABIC LIGATURE BEH WITH HEH INITIAL FORMARABIC LIGATURE TEH W" + + "ITH JEEM INITIAL FORMARABIC LIGATURE TEH WITH HAH INITIAL FORMARABIC LIG" + + "ATURE TEH WITH KHAH INITIAL FORMARABIC LIGATURE TEH WITH MEEM INITIAL FO" + + "RMARABIC LIGATURE TEH WITH HEH INITIAL FORMARABIC LIGATURE THEH WITH MEE" + + "M INITIAL FORMARABIC LIGATURE JEEM WITH HAH INITIAL FORMARABIC LIGATURE " + + "JEEM WITH MEEM INITIAL FORMARABIC LIGATURE HAH WITH JEEM INITIAL FORMARA" + + "BIC LIGATURE HAH WITH MEEM INITIAL FORMARABIC LIGATURE KHAH WITH JEEM IN" + + "ITIAL FORMARABIC LIGATURE KHAH WITH MEEM INITIAL FORMARABIC LIGATURE SEE" + + "N WITH JEEM INITIAL FORMARABIC LIGATURE SEEN WITH HAH INITIAL FORMARABIC" + + " LIGATURE SEEN WITH KHAH INITIAL FORMARABIC LIGATURE SEEN WITH MEEM INIT" + + "IAL FORMARABIC LIGATURE SAD WITH HAH INITIAL FORMARABIC LIGATURE SAD WIT" + + "H KHAH INITIAL FORMARABIC LIGATURE SAD WITH MEEM INITIAL FORMARABIC LIGA" + + "TURE DAD WITH JEEM INITIAL FORMARABIC LIGATURE DAD WITH HAH INITIAL FORM" + + "ARABIC LIGATURE DAD WITH KHAH INITIAL FORMARABIC LIGATURE DAD WITH MEEM " + + "INITIAL FORMARABIC LIGATURE TAH WITH HAH INITIAL FORMARABIC LIGATURE ZAH" + + " WITH MEEM INITIAL FORMARABIC LIGATURE AIN WITH JEEM INITIAL FORMARABIC " + + "LIGATURE AIN WITH MEEM INITIAL FORMARABIC LIGATURE GHAIN WITH JEEM INITI" + + "AL FORMARABIC LIGATURE GHAIN WITH MEEM INITIAL FORMARABIC LIGATURE FEH W" + + "ITH JEEM INITIAL FORMARABIC LIGATURE FEH WITH HAH INITIAL FORMARABIC LIG" + + "ATURE FEH WITH KHAH INITIAL FORMARABIC LIGATURE FEH WITH MEEM INITIAL FO" + + "RMARABIC LIGATURE QAF WITH HAH INITIAL FORMARABIC LIGATURE QAF WITH MEEM") + ("" + + " INITIAL FORMARABIC LIGATURE KAF WITH JEEM INITIAL FORMARABIC LIGATURE K" + + "AF WITH HAH INITIAL FORMARABIC LIGATURE KAF WITH KHAH INITIAL FORMARABIC" + + " LIGATURE KAF WITH LAM INITIAL FORMARABIC LIGATURE KAF WITH MEEM INITIAL" + + " FORMARABIC LIGATURE LAM WITH JEEM INITIAL FORMARABIC LIGATURE LAM WITH " + + "HAH INITIAL FORMARABIC LIGATURE LAM WITH KHAH INITIAL FORMARABIC LIGATUR" + + "E LAM WITH MEEM INITIAL FORMARABIC LIGATURE LAM WITH HEH INITIAL FORMARA" + + "BIC LIGATURE MEEM WITH JEEM INITIAL FORMARABIC LIGATURE MEEM WITH HAH IN" + + "ITIAL FORMARABIC LIGATURE MEEM WITH KHAH INITIAL FORMARABIC LIGATURE MEE" + + "M WITH MEEM INITIAL FORMARABIC LIGATURE NOON WITH JEEM INITIAL FORMARABI" + + "C LIGATURE NOON WITH HAH INITIAL FORMARABIC LIGATURE NOON WITH KHAH INIT" + + "IAL FORMARABIC LIGATURE NOON WITH MEEM INITIAL FORMARABIC LIGATURE NOON " + + "WITH HEH INITIAL FORMARABIC LIGATURE HEH WITH JEEM INITIAL FORMARABIC LI" + + "GATURE HEH WITH MEEM INITIAL FORMARABIC LIGATURE HEH WITH SUPERSCRIPT AL" + + "EF INITIAL FORMARABIC LIGATURE YEH WITH JEEM INITIAL FORMARABIC LIGATURE" + + " YEH WITH HAH INITIAL FORMARABIC LIGATURE YEH WITH KHAH INITIAL FORMARAB" + + "IC LIGATURE YEH WITH MEEM INITIAL FORMARABIC LIGATURE YEH WITH HEH INITI" + + "AL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORMARABIC " + + "LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORMARABIC LIGATURE BEH WI" + + "TH MEEM MEDIAL FORMARABIC LIGATURE BEH WITH HEH MEDIAL FORMARABIC LIGATU" + + "RE TEH WITH MEEM MEDIAL FORMARABIC LIGATURE TEH WITH HEH MEDIAL FORMARAB" + + "IC LIGATURE THEH WITH MEEM MEDIAL FORMARABIC LIGATURE THEH WITH HEH MEDI" + + "AL FORMARABIC LIGATURE SEEN WITH MEEM MEDIAL FORMARABIC LIGATURE SEEN WI" + + "TH HEH MEDIAL FORMARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORMARABIC LIGA" + + "TURE SHEEN WITH HEH MEDIAL FORMARABIC LIGATURE KAF WITH LAM MEDIAL FORMA" + + "RABIC LIGATURE KAF WITH MEEM MEDIAL FORMARABIC LIGATURE LAM WITH MEEM ME" + + "DIAL FORMARABIC LIGATURE NOON WITH MEEM MEDIAL FORMARABIC LIGATURE NOON " + + "WITH HEH MEDIAL FORMARABIC LIGATURE YEH WITH MEEM MEDIAL FORMARABIC LIGA" + + "TURE YEH WITH HEH MEDIAL FORMARABIC LIGATURE SHADDA WITH FATHA MEDIAL FO" + + "RMARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORMARABIC LIGATURE SHADDA WI" + + "TH KASRA MEDIAL FORMARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORMA" + + "RABIC LIGATURE TAH WITH YEH ISOLATED FORMARABIC LIGATURE AIN WITH ALEF M" + + "AKSURA ISOLATED FORMARABIC LIGATURE AIN WITH YEH ISOLATED FORMARABIC LIG" + + "ATURE GHAIN WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE GHAIN WITH YE" + + "H ISOLATED FORMARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORMARABI" + + "C LIGATURE SEEN WITH YEH ISOLATED FORMARABIC LIGATURE SHEEN WITH ALEF MA" + + "KSURA ISOLATED FORMARABIC LIGATURE SHEEN WITH YEH ISOLATED FORMARABIC LI" + + "GATURE HAH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE HAH WITH YEH I" + + "SOLATED FORMARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORMARABIC L" + + "IGATURE JEEM WITH YEH ISOLATED FORMARABIC LIGATURE KHAH WITH ALEF MAKSUR" + + "A ISOLATED FORMARABIC LIGATURE KHAH WITH YEH ISOLATED FORMARABIC LIGATUR" + + "E SAD WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE SAD WITH YEH ISOLAT" + + "ED FORMARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATUR" + + "E DAD WITH YEH ISOLATED FORMARABIC LIGATURE SHEEN WITH JEEM ISOLATED FOR" + + "MARABIC LIGATURE SHEEN WITH HAH ISOLATED FORMARABIC LIGATURE SHEEN WITH " + + "KHAH ISOLATED FORMARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORMARABIC LI" + + "GATURE SHEEN WITH REH ISOLATED FORMARABIC LIGATURE SEEN WITH REH ISOLATE" + + "D FORMARABIC LIGATURE SAD WITH REH ISOLATED FORMARABIC LIGATURE DAD WITH" + + " REH ISOLATED FORMARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORMARABIC" + + " LIGATURE TAH WITH YEH FINAL FORMARABIC LIGATURE AIN WITH ALEF MAKSURA F" + + "INAL FORMARABIC LIGATURE AIN WITH YEH FINAL FORMARABIC LIGATURE GHAIN WI" + + "TH ALEF MAKSURA FINAL FORMARABIC LIGATURE GHAIN WITH YEH FINAL FORMARABI" + + "C LIGATURE SEEN WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SEEN WITH YE" + + "H FINAL FORMARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORMARABIC LIG" + + "ATURE SHEEN WITH YEH FINAL FORMARABIC LIGATURE HAH WITH ALEF MAKSURA FIN" + + "AL FORMARABIC LIGATURE HAH WITH YEH FINAL FORMARABIC LIGATURE JEEM WITH " + + "ALEF MAKSURA FINAL FORMARABIC LIGATURE JEEM WITH YEH FINAL FORMARABIC LI" + + "GATURE KHAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE KHAH WITH YEH FI" + + "NAL FORMARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE " + + "SAD WITH YEH FINAL FORMARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORMA" + + "RABIC LIGATURE DAD WITH YEH FINAL FORMARABIC LIGATURE SHEEN WITH JEEM FI" + + "NAL FORMARABIC LIGATURE SHEEN WITH HAH FINAL FORMARABIC LIGATURE SHEEN W" + + "ITH KHAH FINAL FORMARABIC LIGATURE SHEEN WITH MEEM FINAL FORMARABIC LIGA" + + "TURE SHEEN WITH REH FINAL FORMARABIC LIGATURE SEEN WITH REH FINAL FORMAR" + + "ABIC LIGATURE SAD WITH REH FINAL FORMARABIC LIGATURE DAD WITH REH FINAL ") + ("" + + "FORMARABIC LIGATURE SHEEN WITH JEEM INITIAL FORMARABIC LIGATURE SHEEN WI" + + "TH HAH INITIAL FORMARABIC LIGATURE SHEEN WITH KHAH INITIAL FORMARABIC LI" + + "GATURE SHEEN WITH MEEM INITIAL FORMARABIC LIGATURE SEEN WITH HEH INITIAL" + + " FORMARABIC LIGATURE SHEEN WITH HEH INITIAL FORMARABIC LIGATURE TAH WITH" + + " MEEM INITIAL FORMARABIC LIGATURE SEEN WITH JEEM MEDIAL FORMARABIC LIGAT" + + "URE SEEN WITH HAH MEDIAL FORMARABIC LIGATURE SEEN WITH KHAH MEDIAL FORMA" + + "RABIC LIGATURE SHEEN WITH JEEM MEDIAL FORMARABIC LIGATURE SHEEN WITH HAH" + + " MEDIAL FORMARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORMARABIC LIGATURE T" + + "AH WITH MEEM MEDIAL FORMARABIC LIGATURE ZAH WITH MEEM MEDIAL FORMARABIC " + + "LIGATURE ALEF WITH FATHATAN FINAL FORMARABIC LIGATURE ALEF WITH FATHATAN" + + " ISOLATED FORMORNATE LEFT PARENTHESISORNATE RIGHT PARENTHESISARABIC LIGA" + + "TURE TEH WITH JEEM WITH MEEM INITIAL FORMARABIC LIGATURE TEH WITH HAH WI" + + "TH JEEM FINAL FORMARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORMARA" + + "BIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORMARABIC LIGATURE TEH WITH" + + " KHAH WITH MEEM INITIAL FORMARABIC LIGATURE TEH WITH MEEM WITH JEEM INIT" + + "IAL FORMARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORMARABIC LIGATU" + + "RE TEH WITH MEEM WITH KHAH INITIAL FORMARABIC LIGATURE JEEM WITH MEEM WI" + + "TH HAH FINAL FORMARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORMARA" + + "BIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE HAH WITH M" + + "EEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SEEN WITH HAH WITH JEEM " + + "INITIAL FORMARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORMARABIC L" + + "IGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SEEN " + + "WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE SEEN WITH MEEM WITH HAH INI" + + "TIAL FORMARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORMARABIC LIG" + + "ATURE SEEN WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE SEEN WITH MEEM " + + "WITH MEEM INITIAL FORMARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORMAR" + + "ABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORMARABIC LIGATURE SAD WITH" + + " MEEM WITH MEEM FINAL FORMARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL" + + " FORMARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORMARABIC LIGATUR" + + "E SHEEN WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE SHEEN WITH MEEM WIT" + + "H KHAH FINAL FORMARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORMA" + + "RABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE SHEEN" + + " WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE DAD WITH HAH WITH ALEF " + + "MAKSURA FINAL FORMARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORMARAB" + + "IC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORMARABIC LIGATURE TAH WITH" + + " MEEM WITH HAH FINAL FORMARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL " + + "FORMARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE " + + "TAH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE AIN WITH JEEM WITH MEEM" + + " FINAL FORMARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORMARABIC LIGA" + + "TURE AIN WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE AIN WITH MEEM W" + + "ITH ALEF MAKSURA FINAL FORMARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FIN" + + "AL FORMARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORMARABIC LIGATUR" + + "E GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE FEH WITH K" + + "HAH WITH MEEM FINAL FORMARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL " + + "FORMARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE QAF" + + " WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE LAM WITH HAH WITH MEEM FI" + + "NAL FORMARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORMARABIC LIGATURE " + + "LAM WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE LAM WITH JEEM W" + + "ITH JEEM INITIAL FORMARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORMA" + + "RABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORMARABIC LIGATURE LAM WIT" + + "H KHAH WITH MEEM INITIAL FORMARABIC LIGATURE LAM WITH MEEM WITH HAH FINA" + + "L FORMARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE" + + " MEEM WITH HAH WITH JEEM INITIAL FORMARABIC LIGATURE MEEM WITH HAH WITH " + + "MEEM INITIAL FORMARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORMARABIC" + + " LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORMARABIC LIGATURE MEEM WITH " + + "JEEM WITH MEEM INITIAL FORMARABIC LIGATURE MEEM WITH KHAH WITH JEEM INIT" + + "IAL FORMARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORMARABIC LIGA" + + "TURE MEEM WITH JEEM WITH KHAH INITIAL FORMARABIC LIGATURE HEH WITH MEEM " + + "WITH JEEM INITIAL FORMARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FO" + + "RMARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORMARABIC LIGATURE NO" + + "ON WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE NOON WITH JEEM W" + + "ITH MEEM FINAL FORMARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM" + + "ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATU" + + "RE NOON WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE NOON WITH MEEM WITH") + ("" + + " ALEF MAKSURA FINAL FORMARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FO" + + "RMARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE BE" + + "H WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE TEH WITH JEEM WITH YEH FI" + + "NAL FORMARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORMARABIC" + + " LIGATURE TEH WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE TEH WITH KHAH" + + " WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE TEH WITH MEEM WITH YEH FINA" + + "L FORMARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC L" + + "IGATURE JEEM WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE JEEM WITH HAH " + + "WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAK" + + "SURA FINAL FORMARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FO" + + "RMARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORMARABIC LIGATURE SHEEN " + + "WITH HAH WITH YEH FINAL FORMARABIC LIGATURE DAD WITH HAH WITH YEH FINAL " + + "FORMARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE LAM" + + " WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE YEH WITH HAH WITH YEH FINA" + + "L FORMARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE Y" + + "EH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE MEEM WITH MEEM WITH YEH " + + "FINAL FORMARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORMARABIC LIGATU" + + "RE NOON WITH HAH WITH YEH FINAL FORMARABIC LIGATURE QAF WITH MEEM WITH H" + + "AH INITIAL FORMARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORMARABIC" + + " LIGATURE AIN WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE KAF WITH MEEM" + + " WITH YEH FINAL FORMARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM" + + "ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE LAM WI" + + "TH JEEM WITH MEEM INITIAL FORMARABIC LIGATURE KAF WITH MEEM WITH MEEM FI" + + "NAL FORMARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORMARABIC LIGATUR" + + "E NOON WITH JEEM WITH HAH FINAL FORMARABIC LIGATURE JEEM WITH HAH WITH Y" + + "EH FINAL FORMARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORMARABIC LIG" + + "ATURE MEEM WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE FEH WITH MEEM WI" + + "TH YEH FINAL FORMARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORMARABIC " + + "LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE AIN WITH JE" + + "EM WITH MEEM INITIAL FORMARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL" + + " FORMARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE N" + + "OON WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE SALLA USED AS KORANIC S" + + "TOP SIGN ISOLATED FORMARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISO" + + "LATED FORMARABIC LIGATURE ALLAH ISOLATED FORMARABIC LIGATURE AKBAR ISOLA" + + "TED FORMARABIC LIGATURE MOHAMMAD ISOLATED FORMARABIC LIGATURE SALAM ISOL" + + "ATED FORMARABIC LIGATURE RASOUL ISOLATED FORMARABIC LIGATURE ALAYHE ISOL" + + "ATED FORMARABIC LIGATURE WASALLAM ISOLATED FORMARABIC LIGATURE SALLA ISO" + + "LATED FORMARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAMARABIC LIGATURE JAL" + + "LAJALALOUHOURIAL SIGNARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEMVARIAT" + + "ION SELECTOR-1VARIATION SELECTOR-2VARIATION SELECTOR-3VARIATION SELECTOR" + + "-4VARIATION SELECTOR-5VARIATION SELECTOR-6VARIATION SELECTOR-7VARIATION " + + "SELECTOR-8VARIATION SELECTOR-9VARIATION SELECTOR-10VARIATION SELECTOR-11" + + "VARIATION SELECTOR-12VARIATION SELECTOR-13VARIATION SELECTOR-14VARIATION" + + " SELECTOR-15VARIATION SELECTOR-16PRESENTATION FORM FOR VERTICAL COMMAPRE" + + "SENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMAPRESENTATION FORM FOR VERTI" + + "CAL IDEOGRAPHIC FULL STOPPRESENTATION FORM FOR VERTICAL COLONPRESENTATIO" + + "N FORM FOR VERTICAL SEMICOLONPRESENTATION FORM FOR VERTICAL EXCLAMATION " + + "MARKPRESENTATION FORM FOR VERTICAL QUESTION MARKPRESENTATION FORM FOR VE" + + "RTICAL LEFT WHITE LENTICULAR BRACKETPRESENTATION FORM FOR VERTICAL RIGHT" + + " WHITE LENTICULAR BRAKCETPRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIP" + + "SISCOMBINING LIGATURE LEFT HALFCOMBINING LIGATURE RIGHT HALFCOMBINING DO" + + "UBLE TILDE LEFT HALFCOMBINING DOUBLE TILDE RIGHT HALFCOMBINING MACRON LE" + + "FT HALFCOMBINING MACRON RIGHT HALFCOMBINING CONJOINING MACRONCOMBINING L" + + "IGATURE LEFT HALF BELOWCOMBINING LIGATURE RIGHT HALF BELOWCOMBINING TILD" + + "E LEFT HALF BELOWCOMBINING TILDE RIGHT HALF BELOWCOMBINING MACRON LEFT H" + + "ALF BELOWCOMBINING MACRON RIGHT HALF BELOWCOMBINING CONJOINING MACRON BE" + + "LOWCOMBINING CYRILLIC TITLO LEFT HALFCOMBINING CYRILLIC TITLO RIGHT HALF" + + "PRESENTATION FORM FOR VERTICAL TWO DOT LEADERPRESENTATION FORM FOR VERTI" + + "CAL EM DASHPRESENTATION FORM FOR VERTICAL EN DASHPRESENTATION FORM FOR V" + + "ERTICAL LOW LINEPRESENTATION FORM FOR VERTICAL WAVY LOW LINEPRESENTATION" + + " FORM FOR VERTICAL LEFT PARENTHESISPRESENTATION FORM FOR VERTICAL RIGHT " + + "PARENTHESISPRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKETPRESENTATION" + + " FORM FOR VERTICAL RIGHT CURLY BRACKETPRESENTATION FORM FOR VERTICAL LEF" + + "T TORTOISE SHELL BRACKETPRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SH") + ("" + + "ELL BRACKETPRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKETP" + + "RESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKETPRESENTATION" + + " FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKETPRESENTATION FORM FOR VERTIC" + + "AL RIGHT DOUBLE ANGLE BRACKETPRESENTATION FORM FOR VERTICAL LEFT ANGLE B" + + "RACKETPRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKETPRESENTATION FOR" + + "M FOR VERTICAL LEFT CORNER BRACKETPRESENTATION FORM FOR VERTICAL RIGHT C" + + "ORNER BRACKETPRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKETPRE" + + "SENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKETSESAME DOTWHITE SE" + + "SAME DOTPRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKETPRESENTATION F" + + "ORM FOR VERTICAL RIGHT SQUARE BRACKETDASHED OVERLINECENTRELINE OVERLINEW" + + "AVY OVERLINEDOUBLE WAVY OVERLINEDASHED LOW LINECENTRELINE LOW LINEWAVY L" + + "OW LINESMALL COMMASMALL IDEOGRAPHIC COMMASMALL FULL STOPSMALL SEMICOLONS" + + "MALL COLONSMALL QUESTION MARKSMALL EXCLAMATION MARKSMALL EM DASHSMALL LE" + + "FT PARENTHESISSMALL RIGHT PARENTHESISSMALL LEFT CURLY BRACKETSMALL RIGHT" + + " CURLY BRACKETSMALL LEFT TORTOISE SHELL BRACKETSMALL RIGHT TORTOISE SHEL" + + "L BRACKETSMALL NUMBER SIGNSMALL AMPERSANDSMALL ASTERISKSMALL PLUS SIGNSM" + + "ALL HYPHEN-MINUSSMALL LESS-THAN SIGNSMALL GREATER-THAN SIGNSMALL EQUALS " + + "SIGNSMALL REVERSE SOLIDUSSMALL DOLLAR SIGNSMALL PERCENT SIGNSMALL COMMER" + + "CIAL ATARABIC FATHATAN ISOLATED FORMARABIC TATWEEL WITH FATHATAN ABOVEAR" + + "ABIC DAMMATAN ISOLATED FORMARABIC TAIL FRAGMENTARABIC KASRATAN ISOLATED " + + "FORMARABIC FATHA ISOLATED FORMARABIC FATHA MEDIAL FORMARABIC DAMMA ISOLA" + + "TED FORMARABIC DAMMA MEDIAL FORMARABIC KASRA ISOLATED FORMARABIC KASRA M" + + "EDIAL FORMARABIC SHADDA ISOLATED FORMARABIC SHADDA MEDIAL FORMARABIC SUK" + + "UN ISOLATED FORMARABIC SUKUN MEDIAL FORMARABIC LETTER HAMZA ISOLATED FOR" + + "MARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORMARABIC LETTER ALEF WIT" + + "H MADDA ABOVE FINAL FORMARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FOR" + + "MARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORMARABIC LETTER WAW WITH HA" + + "MZA ABOVE ISOLATED FORMARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORMARAB" + + "IC LETTER ALEF WITH HAMZA BELOW ISOLATED FORMARABIC LETTER ALEF WITH HAM" + + "ZA BELOW FINAL FORMARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORMARABI" + + "C LETTER YEH WITH HAMZA ABOVE FINAL FORMARABIC LETTER YEH WITH HAMZA ABO" + + "VE INITIAL FORMARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORMARABIC LETT" + + "ER ALEF ISOLATED FORMARABIC LETTER ALEF FINAL FORMARABIC LETTER BEH ISOL" + + "ATED FORMARABIC LETTER BEH FINAL FORMARABIC LETTER BEH INITIAL FORMARABI" + + "C LETTER BEH MEDIAL FORMARABIC LETTER TEH MARBUTA ISOLATED FORMARABIC LE" + + "TTER TEH MARBUTA FINAL FORMARABIC LETTER TEH ISOLATED FORMARABIC LETTER " + + "TEH FINAL FORMARABIC LETTER TEH INITIAL FORMARABIC LETTER TEH MEDIAL FOR" + + "MARABIC LETTER THEH ISOLATED FORMARABIC LETTER THEH FINAL FORMARABIC LET" + + "TER THEH INITIAL FORMARABIC LETTER THEH MEDIAL FORMARABIC LETTER JEEM IS" + + "OLATED FORMARABIC LETTER JEEM FINAL FORMARABIC LETTER JEEM INITIAL FORMA" + + "RABIC LETTER JEEM MEDIAL FORMARABIC LETTER HAH ISOLATED FORMARABIC LETTE" + + "R HAH FINAL FORMARABIC LETTER HAH INITIAL FORMARABIC LETTER HAH MEDIAL F" + + "ORMARABIC LETTER KHAH ISOLATED FORMARABIC LETTER KHAH FINAL FORMARABIC L" + + "ETTER KHAH INITIAL FORMARABIC LETTER KHAH MEDIAL FORMARABIC LETTER DAL I" + + "SOLATED FORMARABIC LETTER DAL FINAL FORMARABIC LETTER THAL ISOLATED FORM" + + "ARABIC LETTER THAL FINAL FORMARABIC LETTER REH ISOLATED FORMARABIC LETTE" + + "R REH FINAL FORMARABIC LETTER ZAIN ISOLATED FORMARABIC LETTER ZAIN FINAL" + + " FORMARABIC LETTER SEEN ISOLATED FORMARABIC LETTER SEEN FINAL FORMARABIC" + + " LETTER SEEN INITIAL FORMARABIC LETTER SEEN MEDIAL FORMARABIC LETTER SHE" + + "EN ISOLATED FORMARABIC LETTER SHEEN FINAL FORMARABIC LETTER SHEEN INITIA" + + "L FORMARABIC LETTER SHEEN MEDIAL FORMARABIC LETTER SAD ISOLATED FORMARAB" + + "IC LETTER SAD FINAL FORMARABIC LETTER SAD INITIAL FORMARABIC LETTER SAD " + + "MEDIAL FORMARABIC LETTER DAD ISOLATED FORMARABIC LETTER DAD FINAL FORMAR" + + "ABIC LETTER DAD INITIAL FORMARABIC LETTER DAD MEDIAL FORMARABIC LETTER T" + + "AH ISOLATED FORMARABIC LETTER TAH FINAL FORMARABIC LETTER TAH INITIAL FO" + + "RMARABIC LETTER TAH MEDIAL FORMARABIC LETTER ZAH ISOLATED FORMARABIC LET" + + "TER ZAH FINAL FORMARABIC LETTER ZAH INITIAL FORMARABIC LETTER ZAH MEDIAL" + + " FORMARABIC LETTER AIN ISOLATED FORMARABIC LETTER AIN FINAL FORMARABIC L" + + "ETTER AIN INITIAL FORMARABIC LETTER AIN MEDIAL FORMARABIC LETTER GHAIN I" + + "SOLATED FORMARABIC LETTER GHAIN FINAL FORMARABIC LETTER GHAIN INITIAL FO" + + "RMARABIC LETTER GHAIN MEDIAL FORMARABIC LETTER FEH ISOLATED FORMARABIC L" + + "ETTER FEH FINAL FORMARABIC LETTER FEH INITIAL FORMARABIC LETTER FEH MEDI" + + "AL FORMARABIC LETTER QAF ISOLATED FORMARABIC LETTER QAF FINAL FORMARABIC" + + " LETTER QAF INITIAL FORMARABIC LETTER QAF MEDIAL FORMARABIC LETTER KAF I") + ("" + + "SOLATED FORMARABIC LETTER KAF FINAL FORMARABIC LETTER KAF INITIAL FORMAR" + + "ABIC LETTER KAF MEDIAL FORMARABIC LETTER LAM ISOLATED FORMARABIC LETTER " + + "LAM FINAL FORMARABIC LETTER LAM INITIAL FORMARABIC LETTER LAM MEDIAL FOR" + + "MARABIC LETTER MEEM ISOLATED FORMARABIC LETTER MEEM FINAL FORMARABIC LET" + + "TER MEEM INITIAL FORMARABIC LETTER MEEM MEDIAL FORMARABIC LETTER NOON IS" + + "OLATED FORMARABIC LETTER NOON FINAL FORMARABIC LETTER NOON INITIAL FORMA" + + "RABIC LETTER NOON MEDIAL FORMARABIC LETTER HEH ISOLATED FORMARABIC LETTE" + + "R HEH FINAL FORMARABIC LETTER HEH INITIAL FORMARABIC LETTER HEH MEDIAL F" + + "ORMARABIC LETTER WAW ISOLATED FORMARABIC LETTER WAW FINAL FORMARABIC LET" + + "TER ALEF MAKSURA ISOLATED FORMARABIC LETTER ALEF MAKSURA FINAL FORMARABI" + + "C LETTER YEH ISOLATED FORMARABIC LETTER YEH FINAL FORMARABIC LETTER YEH " + + "INITIAL FORMARABIC LETTER YEH MEDIAL FORMARABIC LIGATURE LAM WITH ALEF W" + + "ITH MADDA ABOVE ISOLATED FORMARABIC LIGATURE LAM WITH ALEF WITH MADDA AB" + + "OVE FINAL FORMARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FO" + + "RMARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORMARABIC LIGATU" + + "RE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORMARABIC LIGATURE LAM WITH " + + "ALEF WITH HAMZA BELOW FINAL FORMARABIC LIGATURE LAM WITH ALEF ISOLATED F" + + "ORMARABIC LIGATURE LAM WITH ALEF FINAL FORMZERO WIDTH NO-BREAK SPACEFULL" + + "WIDTH EXCLAMATION MARKFULLWIDTH QUOTATION MARKFULLWIDTH NUMBER SIGNFULLW" + + "IDTH DOLLAR SIGNFULLWIDTH PERCENT SIGNFULLWIDTH AMPERSANDFULLWIDTH APOST" + + "ROPHEFULLWIDTH LEFT PARENTHESISFULLWIDTH RIGHT PARENTHESISFULLWIDTH ASTE" + + "RISKFULLWIDTH PLUS SIGNFULLWIDTH COMMAFULLWIDTH HYPHEN-MINUSFULLWIDTH FU" + + "LL STOPFULLWIDTH SOLIDUSFULLWIDTH DIGIT ZEROFULLWIDTH DIGIT ONEFULLWIDTH" + + " DIGIT TWOFULLWIDTH DIGIT THREEFULLWIDTH DIGIT FOURFULLWIDTH DIGIT FIVEF" + + "ULLWIDTH DIGIT SIXFULLWIDTH DIGIT SEVENFULLWIDTH DIGIT EIGHTFULLWIDTH DI" + + "GIT NINEFULLWIDTH COLONFULLWIDTH SEMICOLONFULLWIDTH LESS-THAN SIGNFULLWI" + + "DTH EQUALS SIGNFULLWIDTH GREATER-THAN SIGNFULLWIDTH QUESTION MARKFULLWID" + + "TH COMMERCIAL ATFULLWIDTH LATIN CAPITAL LETTER AFULLWIDTH LATIN CAPITAL " + + "LETTER BFULLWIDTH LATIN CAPITAL LETTER CFULLWIDTH LATIN CAPITAL LETTER D" + + "FULLWIDTH LATIN CAPITAL LETTER EFULLWIDTH LATIN CAPITAL LETTER FFULLWIDT" + + "H LATIN CAPITAL LETTER GFULLWIDTH LATIN CAPITAL LETTER HFULLWIDTH LATIN " + + "CAPITAL LETTER IFULLWIDTH LATIN CAPITAL LETTER JFULLWIDTH LATIN CAPITAL " + + "LETTER KFULLWIDTH LATIN CAPITAL LETTER LFULLWIDTH LATIN CAPITAL LETTER M" + + "FULLWIDTH LATIN CAPITAL LETTER NFULLWIDTH LATIN CAPITAL LETTER OFULLWIDT" + + "H LATIN CAPITAL LETTER PFULLWIDTH LATIN CAPITAL LETTER QFULLWIDTH LATIN " + + "CAPITAL LETTER RFULLWIDTH LATIN CAPITAL LETTER SFULLWIDTH LATIN CAPITAL " + + "LETTER TFULLWIDTH LATIN CAPITAL LETTER UFULLWIDTH LATIN CAPITAL LETTER V" + + "FULLWIDTH LATIN CAPITAL LETTER WFULLWIDTH LATIN CAPITAL LETTER XFULLWIDT" + + "H LATIN CAPITAL LETTER YFULLWIDTH LATIN CAPITAL LETTER ZFULLWIDTH LEFT S" + + "QUARE BRACKETFULLWIDTH REVERSE SOLIDUSFULLWIDTH RIGHT SQUARE BRACKETFULL" + + "WIDTH CIRCUMFLEX ACCENTFULLWIDTH LOW LINEFULLWIDTH GRAVE ACCENTFULLWIDTH" + + " LATIN SMALL LETTER AFULLWIDTH LATIN SMALL LETTER BFULLWIDTH LATIN SMALL" + + " LETTER CFULLWIDTH LATIN SMALL LETTER DFULLWIDTH LATIN SMALL LETTER EFUL" + + "LWIDTH LATIN SMALL LETTER FFULLWIDTH LATIN SMALL LETTER GFULLWIDTH LATIN" + + " SMALL LETTER HFULLWIDTH LATIN SMALL LETTER IFULLWIDTH LATIN SMALL LETTE" + + "R JFULLWIDTH LATIN SMALL LETTER KFULLWIDTH LATIN SMALL LETTER LFULLWIDTH" + + " LATIN SMALL LETTER MFULLWIDTH LATIN SMALL LETTER NFULLWIDTH LATIN SMALL" + + " LETTER OFULLWIDTH LATIN SMALL LETTER PFULLWIDTH LATIN SMALL LETTER QFUL" + + "LWIDTH LATIN SMALL LETTER RFULLWIDTH LATIN SMALL LETTER SFULLWIDTH LATIN" + + " SMALL LETTER TFULLWIDTH LATIN SMALL LETTER UFULLWIDTH LATIN SMALL LETTE" + + "R VFULLWIDTH LATIN SMALL LETTER WFULLWIDTH LATIN SMALL LETTER XFULLWIDTH" + + " LATIN SMALL LETTER YFULLWIDTH LATIN SMALL LETTER ZFULLWIDTH LEFT CURLY " + + "BRACKETFULLWIDTH VERTICAL LINEFULLWIDTH RIGHT CURLY BRACKETFULLWIDTH TIL" + + "DEFULLWIDTH LEFT WHITE PARENTHESISFULLWIDTH RIGHT WHITE PARENTHESISHALFW" + + "IDTH IDEOGRAPHIC FULL STOPHALFWIDTH LEFT CORNER BRACKETHALFWIDTH RIGHT C" + + "ORNER BRACKETHALFWIDTH IDEOGRAPHIC COMMAHALFWIDTH KATAKANA MIDDLE DOTHAL" + + "FWIDTH KATAKANA LETTER WOHALFWIDTH KATAKANA LETTER SMALL AHALFWIDTH KATA" + + "KANA LETTER SMALL IHALFWIDTH KATAKANA LETTER SMALL UHALFWIDTH KATAKANA L" + + "ETTER SMALL EHALFWIDTH KATAKANA LETTER SMALL OHALFWIDTH KATAKANA LETTER " + + "SMALL YAHALFWIDTH KATAKANA LETTER SMALL YUHALFWIDTH KATAKANA LETTER SMAL" + + "L YOHALFWIDTH KATAKANA LETTER SMALL TUHALFWIDTH KATAKANA-HIRAGANA PROLON" + + "GED SOUND MARKHALFWIDTH KATAKANA LETTER AHALFWIDTH KATAKANA LETTER IHALF" + + "WIDTH KATAKANA LETTER UHALFWIDTH KATAKANA LETTER EHALFWIDTH KATAKANA LET" + + "TER OHALFWIDTH KATAKANA LETTER KAHALFWIDTH KATAKANA LETTER KIHALFWIDTH K") + ("" + + "ATAKANA LETTER KUHALFWIDTH KATAKANA LETTER KEHALFWIDTH KATAKANA LETTER K" + + "OHALFWIDTH KATAKANA LETTER SAHALFWIDTH KATAKANA LETTER SIHALFWIDTH KATAK" + + "ANA LETTER SUHALFWIDTH KATAKANA LETTER SEHALFWIDTH KATAKANA LETTER SOHAL" + + "FWIDTH KATAKANA LETTER TAHALFWIDTH KATAKANA LETTER TIHALFWIDTH KATAKANA " + + "LETTER TUHALFWIDTH KATAKANA LETTER TEHALFWIDTH KATAKANA LETTER TOHALFWID" + + "TH KATAKANA LETTER NAHALFWIDTH KATAKANA LETTER NIHALFWIDTH KATAKANA LETT" + + "ER NUHALFWIDTH KATAKANA LETTER NEHALFWIDTH KATAKANA LETTER NOHALFWIDTH K" + + "ATAKANA LETTER HAHALFWIDTH KATAKANA LETTER HIHALFWIDTH KATAKANA LETTER H" + + "UHALFWIDTH KATAKANA LETTER HEHALFWIDTH KATAKANA LETTER HOHALFWIDTH KATAK" + + "ANA LETTER MAHALFWIDTH KATAKANA LETTER MIHALFWIDTH KATAKANA LETTER MUHAL" + + "FWIDTH KATAKANA LETTER MEHALFWIDTH KATAKANA LETTER MOHALFWIDTH KATAKANA " + + "LETTER YAHALFWIDTH KATAKANA LETTER YUHALFWIDTH KATAKANA LETTER YOHALFWID" + + "TH KATAKANA LETTER RAHALFWIDTH KATAKANA LETTER RIHALFWIDTH KATAKANA LETT" + + "ER RUHALFWIDTH KATAKANA LETTER REHALFWIDTH KATAKANA LETTER ROHALFWIDTH K" + + "ATAKANA LETTER WAHALFWIDTH KATAKANA LETTER NHALFWIDTH KATAKANA VOICED SO" + + "UND MARKHALFWIDTH KATAKANA SEMI-VOICED SOUND MARKHALFWIDTH HANGUL FILLER" + + "HALFWIDTH HANGUL LETTER KIYEOKHALFWIDTH HANGUL LETTER SSANGKIYEOKHALFWID" + + "TH HANGUL LETTER KIYEOK-SIOSHALFWIDTH HANGUL LETTER NIEUNHALFWIDTH HANGU" + + "L LETTER NIEUN-CIEUCHALFWIDTH HANGUL LETTER NIEUN-HIEUHHALFWIDTH HANGUL " + + "LETTER TIKEUTHALFWIDTH HANGUL LETTER SSANGTIKEUTHALFWIDTH HANGUL LETTER " + + "RIEULHALFWIDTH HANGUL LETTER RIEUL-KIYEOKHALFWIDTH HANGUL LETTER RIEUL-M" + + "IEUMHALFWIDTH HANGUL LETTER RIEUL-PIEUPHALFWIDTH HANGUL LETTER RIEUL-SIO" + + "SHALFWIDTH HANGUL LETTER RIEUL-THIEUTHHALFWIDTH HANGUL LETTER RIEUL-PHIE" + + "UPHHALFWIDTH HANGUL LETTER RIEUL-HIEUHHALFWIDTH HANGUL LETTER MIEUMHALFW" + + "IDTH HANGUL LETTER PIEUPHALFWIDTH HANGUL LETTER SSANGPIEUPHALFWIDTH HANG" + + "UL LETTER PIEUP-SIOSHALFWIDTH HANGUL LETTER SIOSHALFWIDTH HANGUL LETTER " + + "SSANGSIOSHALFWIDTH HANGUL LETTER IEUNGHALFWIDTH HANGUL LETTER CIEUCHALFW" + + "IDTH HANGUL LETTER SSANGCIEUCHALFWIDTH HANGUL LETTER CHIEUCHHALFWIDTH HA" + + "NGUL LETTER KHIEUKHHALFWIDTH HANGUL LETTER THIEUTHHALFWIDTH HANGUL LETTE" + + "R PHIEUPHHALFWIDTH HANGUL LETTER HIEUHHALFWIDTH HANGUL LETTER AHALFWIDTH" + + " HANGUL LETTER AEHALFWIDTH HANGUL LETTER YAHALFWIDTH HANGUL LETTER YAEHA" + + "LFWIDTH HANGUL LETTER EOHALFWIDTH HANGUL LETTER EHALFWIDTH HANGUL LETTER" + + " YEOHALFWIDTH HANGUL LETTER YEHALFWIDTH HANGUL LETTER OHALFWIDTH HANGUL " + + "LETTER WAHALFWIDTH HANGUL LETTER WAEHALFWIDTH HANGUL LETTER OEHALFWIDTH " + + "HANGUL LETTER YOHALFWIDTH HANGUL LETTER UHALFWIDTH HANGUL LETTER WEOHALF" + + "WIDTH HANGUL LETTER WEHALFWIDTH HANGUL LETTER WIHALFWIDTH HANGUL LETTER " + + "YUHALFWIDTH HANGUL LETTER EUHALFWIDTH HANGUL LETTER YIHALFWIDTH HANGUL L" + + "ETTER IFULLWIDTH CENT SIGNFULLWIDTH POUND SIGNFULLWIDTH NOT SIGNFULLWIDT" + + "H MACRONFULLWIDTH BROKEN BARFULLWIDTH YEN SIGNFULLWIDTH WON SIGNHALFWIDT" + + "H FORMS LIGHT VERTICALHALFWIDTH LEFTWARDS ARROWHALFWIDTH UPWARDS ARROWHA" + + "LFWIDTH RIGHTWARDS ARROWHALFWIDTH DOWNWARDS ARROWHALFWIDTH BLACK SQUAREH" + + "ALFWIDTH WHITE CIRCLEINTERLINEAR ANNOTATION ANCHORINTERLINEAR ANNOTATION" + + " SEPARATORINTERLINEAR ANNOTATION TERMINATOROBJECT REPLACEMENT CHARACTERR" + + "EPLACEMENT CHARACTERLINEAR B SYLLABLE B008 ALINEAR B SYLLABLE B038 ELINE" + + "AR B SYLLABLE B028 ILINEAR B SYLLABLE B061 OLINEAR B SYLLABLE B010 ULINE" + + "AR B SYLLABLE B001 DALINEAR B SYLLABLE B045 DELINEAR B SYLLABLE B007 DIL" + + "INEAR B SYLLABLE B014 DOLINEAR B SYLLABLE B051 DULINEAR B SYLLABLE B057 " + + "JALINEAR B SYLLABLE B046 JELINEAR B SYLLABLE B036 JOLINEAR B SYLLABLE B0" + + "65 JULINEAR B SYLLABLE B077 KALINEAR B SYLLABLE B044 KELINEAR B SYLLABLE" + + " B067 KILINEAR B SYLLABLE B070 KOLINEAR B SYLLABLE B081 KULINEAR B SYLLA" + + "BLE B080 MALINEAR B SYLLABLE B013 MELINEAR B SYLLABLE B073 MILINEAR B SY" + + "LLABLE B015 MOLINEAR B SYLLABLE B023 MULINEAR B SYLLABLE B006 NALINEAR B" + + " SYLLABLE B024 NELINEAR B SYLLABLE B030 NILINEAR B SYLLABLE B052 NOLINEA" + + "R B SYLLABLE B055 NULINEAR B SYLLABLE B003 PALINEAR B SYLLABLE B072 PELI" + + "NEAR B SYLLABLE B039 PILINEAR B SYLLABLE B011 POLINEAR B SYLLABLE B050 P" + + "ULINEAR B SYLLABLE B016 QALINEAR B SYLLABLE B078 QELINEAR B SYLLABLE B02" + + "1 QILINEAR B SYLLABLE B032 QOLINEAR B SYLLABLE B060 RALINEAR B SYLLABLE " + + "B027 RELINEAR B SYLLABLE B053 RILINEAR B SYLLABLE B002 ROLINEAR B SYLLAB" + + "LE B026 RULINEAR B SYLLABLE B031 SALINEAR B SYLLABLE B009 SELINEAR B SYL" + + "LABLE B041 SILINEAR B SYLLABLE B012 SOLINEAR B SYLLABLE B058 SULINEAR B " + + "SYLLABLE B059 TALINEAR B SYLLABLE B004 TELINEAR B SYLLABLE B037 TILINEAR" + + " B SYLLABLE B005 TOLINEAR B SYLLABLE B069 TULINEAR B SYLLABLE B054 WALIN" + + "EAR B SYLLABLE B075 WELINEAR B SYLLABLE B040 WILINEAR B SYLLABLE B042 WO" + + "LINEAR B SYLLABLE B017 ZALINEAR B SYLLABLE B074 ZELINEAR B SYLLABLE B020") + ("" + + " ZOLINEAR B SYLLABLE B025 A2LINEAR B SYLLABLE B043 A3LINEAR B SYLLABLE B" + + "085 AULINEAR B SYLLABLE B071 DWELINEAR B SYLLABLE B090 DWOLINEAR B SYLLA" + + "BLE B048 NWALINEAR B SYLLABLE B029 PU2LINEAR B SYLLABLE B062 PTELINEAR B" + + " SYLLABLE B076 RA2LINEAR B SYLLABLE B033 RA3LINEAR B SYLLABLE B068 RO2LI" + + "NEAR B SYLLABLE B066 TA2LINEAR B SYLLABLE B087 TWELINEAR B SYLLABLE B091" + + " TWOLINEAR B SYMBOL B018LINEAR B SYMBOL B019LINEAR B SYMBOL B022LINEAR B" + + " SYMBOL B034LINEAR B SYMBOL B047LINEAR B SYMBOL B049LINEAR B SYMBOL B056" + + "LINEAR B SYMBOL B063LINEAR B SYMBOL B064LINEAR B SYMBOL B079LINEAR B SYM" + + "BOL B082LINEAR B SYMBOL B083LINEAR B SYMBOL B086LINEAR B SYMBOL B089LINE" + + "AR B IDEOGRAM B100 MANLINEAR B IDEOGRAM B102 WOMANLINEAR B IDEOGRAM B104" + + " DEERLINEAR B IDEOGRAM B105 EQUIDLINEAR B IDEOGRAM B105F MARELINEAR B ID" + + "EOGRAM B105M STALLIONLINEAR B IDEOGRAM B106F EWELINEAR B IDEOGRAM B106M " + + "RAMLINEAR B IDEOGRAM B107F SHE-GOATLINEAR B IDEOGRAM B107M HE-GOATLINEAR" + + " B IDEOGRAM B108F SOWLINEAR B IDEOGRAM B108M BOARLINEAR B IDEOGRAM B109F" + + " COWLINEAR B IDEOGRAM B109M BULLLINEAR B IDEOGRAM B120 WHEATLINEAR B IDE" + + "OGRAM B121 BARLEYLINEAR B IDEOGRAM B122 OLIVELINEAR B IDEOGRAM B123 SPIC" + + "ELINEAR B IDEOGRAM B125 CYPERUSLINEAR B MONOGRAM B127 KAPOLINEAR B MONOG" + + "RAM B128 KANAKOLINEAR B IDEOGRAM B130 OILLINEAR B IDEOGRAM B131 WINELINE" + + "AR B IDEOGRAM B132LINEAR B MONOGRAM B133 AREPALINEAR B MONOGRAM B135 MER" + + "ILINEAR B IDEOGRAM B140 BRONZELINEAR B IDEOGRAM B141 GOLDLINEAR B IDEOGR" + + "AM B142LINEAR B IDEOGRAM B145 WOOLLINEAR B IDEOGRAM B146LINEAR B IDEOGRA" + + "M B150LINEAR B IDEOGRAM B151 HORNLINEAR B IDEOGRAM B152LINEAR B IDEOGRAM" + + " B153LINEAR B IDEOGRAM B154LINEAR B MONOGRAM B156 TURO2LINEAR B IDEOGRAM" + + " B157LINEAR B IDEOGRAM B158LINEAR B IDEOGRAM B159 CLOTHLINEAR B IDEOGRAM" + + " B160LINEAR B IDEOGRAM B161LINEAR B IDEOGRAM B162 GARMENTLINEAR B IDEOGR" + + "AM B163 ARMOURLINEAR B IDEOGRAM B164LINEAR B IDEOGRAM B165LINEAR B IDEOG" + + "RAM B166LINEAR B IDEOGRAM B167LINEAR B IDEOGRAM B168LINEAR B IDEOGRAM B1" + + "69LINEAR B IDEOGRAM B170LINEAR B IDEOGRAM B171LINEAR B IDEOGRAM B172LINE" + + "AR B IDEOGRAM B173 MONTHLINEAR B IDEOGRAM B174LINEAR B IDEOGRAM B176 TRE" + + "ELINEAR B IDEOGRAM B177LINEAR B IDEOGRAM B178LINEAR B IDEOGRAM B179LINEA" + + "R B IDEOGRAM B180LINEAR B IDEOGRAM B181LINEAR B IDEOGRAM B182LINEAR B ID" + + "EOGRAM B183LINEAR B IDEOGRAM B184LINEAR B IDEOGRAM B185LINEAR B IDEOGRAM" + + " B189LINEAR B IDEOGRAM B190LINEAR B IDEOGRAM B191 HELMETLINEAR B IDEOGRA" + + "M B220 FOOTSTOOLLINEAR B IDEOGRAM B225 BATHTUBLINEAR B IDEOGRAM B230 SPE" + + "ARLINEAR B IDEOGRAM B231 ARROWLINEAR B IDEOGRAM B232LINEAR B IDEOGRAM B2" + + "33 SWORDLINEAR B IDEOGRAM B234LINEAR B IDEOGRAM B236LINEAR B IDEOGRAM B2" + + "40 WHEELED CHARIOTLINEAR B IDEOGRAM B241 CHARIOTLINEAR B IDEOGRAM B242 C" + + "HARIOT FRAMELINEAR B IDEOGRAM B243 WHEELLINEAR B IDEOGRAM B245LINEAR B I" + + "DEOGRAM B246LINEAR B MONOGRAM B247 DIPTELINEAR B IDEOGRAM B248LINEAR B I" + + "DEOGRAM B249LINEAR B IDEOGRAM B251LINEAR B IDEOGRAM B252LINEAR B IDEOGRA" + + "M B253LINEAR B IDEOGRAM B254 DARTLINEAR B IDEOGRAM B255LINEAR B IDEOGRAM" + + " B256LINEAR B IDEOGRAM B257LINEAR B IDEOGRAM B258LINEAR B IDEOGRAM B259L" + + "INEAR B IDEOGRAM VESSEL B155LINEAR B IDEOGRAM VESSEL B200LINEAR B IDEOGR" + + "AM VESSEL B201LINEAR B IDEOGRAM VESSEL B202LINEAR B IDEOGRAM VESSEL B203" + + "LINEAR B IDEOGRAM VESSEL B204LINEAR B IDEOGRAM VESSEL B205LINEAR B IDEOG" + + "RAM VESSEL B206LINEAR B IDEOGRAM VESSEL B207LINEAR B IDEOGRAM VESSEL B20" + + "8LINEAR B IDEOGRAM VESSEL B209LINEAR B IDEOGRAM VESSEL B210LINEAR B IDEO" + + "GRAM VESSEL B211LINEAR B IDEOGRAM VESSEL B212LINEAR B IDEOGRAM VESSEL B2" + + "13LINEAR B IDEOGRAM VESSEL B214LINEAR B IDEOGRAM VESSEL B215LINEAR B IDE" + + "OGRAM VESSEL B216LINEAR B IDEOGRAM VESSEL B217LINEAR B IDEOGRAM VESSEL B" + + "218LINEAR B IDEOGRAM VESSEL B219LINEAR B IDEOGRAM VESSEL B221LINEAR B ID" + + "EOGRAM VESSEL B222LINEAR B IDEOGRAM VESSEL B226LINEAR B IDEOGRAM VESSEL " + + "B227LINEAR B IDEOGRAM VESSEL B228LINEAR B IDEOGRAM VESSEL B229LINEAR B I" + + "DEOGRAM VESSEL B250LINEAR B IDEOGRAM VESSEL B305AEGEAN WORD SEPARATOR LI" + + "NEAEGEAN WORD SEPARATOR DOTAEGEAN CHECK MARKAEGEAN NUMBER ONEAEGEAN NUMB" + + "ER TWOAEGEAN NUMBER THREEAEGEAN NUMBER FOURAEGEAN NUMBER FIVEAEGEAN NUMB" + + "ER SIXAEGEAN NUMBER SEVENAEGEAN NUMBER EIGHTAEGEAN NUMBER NINEAEGEAN NUM" + + "BER TENAEGEAN NUMBER TWENTYAEGEAN NUMBER THIRTYAEGEAN NUMBER FORTYAEGEAN" + + " NUMBER FIFTYAEGEAN NUMBER SIXTYAEGEAN NUMBER SEVENTYAEGEAN NUMBER EIGHT" + + "YAEGEAN NUMBER NINETYAEGEAN NUMBER ONE HUNDREDAEGEAN NUMBER TWO HUNDREDA" + + "EGEAN NUMBER THREE HUNDREDAEGEAN NUMBER FOUR HUNDREDAEGEAN NUMBER FIVE H" + + "UNDREDAEGEAN NUMBER SIX HUNDREDAEGEAN NUMBER SEVEN HUNDREDAEGEAN NUMBER " + + "EIGHT HUNDREDAEGEAN NUMBER NINE HUNDREDAEGEAN NUMBER ONE THOUSANDAEGEAN " + + "NUMBER TWO THOUSANDAEGEAN NUMBER THREE THOUSANDAEGEAN NUMBER FOUR THOUSA") + ("" + + "NDAEGEAN NUMBER FIVE THOUSANDAEGEAN NUMBER SIX THOUSANDAEGEAN NUMBER SEV" + + "EN THOUSANDAEGEAN NUMBER EIGHT THOUSANDAEGEAN NUMBER NINE THOUSANDAEGEAN" + + " NUMBER TEN THOUSANDAEGEAN NUMBER TWENTY THOUSANDAEGEAN NUMBER THIRTY TH" + + "OUSANDAEGEAN NUMBER FORTY THOUSANDAEGEAN NUMBER FIFTY THOUSANDAEGEAN NUM" + + "BER SIXTY THOUSANDAEGEAN NUMBER SEVENTY THOUSANDAEGEAN NUMBER EIGHTY THO" + + "USANDAEGEAN NUMBER NINETY THOUSANDAEGEAN WEIGHT BASE UNITAEGEAN WEIGHT F" + + "IRST SUBUNITAEGEAN WEIGHT SECOND SUBUNITAEGEAN WEIGHT THIRD SUBUNITAEGEA" + + "N WEIGHT FOURTH SUBUNITAEGEAN DRY MEASURE FIRST SUBUNITAEGEAN LIQUID MEA" + + "SURE FIRST SUBUNITAEGEAN MEASURE SECOND SUBUNITAEGEAN MEASURE THIRD SUBU" + + "NITGREEK ACROPHONIC ATTIC ONE QUARTERGREEK ACROPHONIC ATTIC ONE HALFGREE" + + "K ACROPHONIC ATTIC ONE DRACHMAGREEK ACROPHONIC ATTIC FIVEGREEK ACROPHONI" + + "C ATTIC FIFTYGREEK ACROPHONIC ATTIC FIVE HUNDREDGREEK ACROPHONIC ATTIC F" + + "IVE THOUSANDGREEK ACROPHONIC ATTIC FIFTY THOUSANDGREEK ACROPHONIC ATTIC " + + "FIVE TALENTSGREEK ACROPHONIC ATTIC TEN TALENTSGREEK ACROPHONIC ATTIC FIF" + + "TY TALENTSGREEK ACROPHONIC ATTIC ONE HUNDRED TALENTSGREEK ACROPHONIC ATT" + + "IC FIVE HUNDRED TALENTSGREEK ACROPHONIC ATTIC ONE THOUSAND TALENTSGREEK " + + "ACROPHONIC ATTIC FIVE THOUSAND TALENTSGREEK ACROPHONIC ATTIC FIVE STATER" + + "SGREEK ACROPHONIC ATTIC TEN STATERSGREEK ACROPHONIC ATTIC FIFTY STATERSG" + + "REEK ACROPHONIC ATTIC ONE HUNDRED STATERSGREEK ACROPHONIC ATTIC FIVE HUN" + + "DRED STATERSGREEK ACROPHONIC ATTIC ONE THOUSAND STATERSGREEK ACROPHONIC " + + "ATTIC TEN THOUSAND STATERSGREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERSG" + + "REEK ACROPHONIC ATTIC TEN MNASGREEK ACROPHONIC HERAEUM ONE PLETHRONGREEK" + + " ACROPHONIC THESPIAN ONEGREEK ACROPHONIC HERMIONIAN ONEGREEK ACROPHONIC " + + "EPIDAUREAN TWOGREEK ACROPHONIC THESPIAN TWOGREEK ACROPHONIC CYRENAIC TWO" + + " DRACHMASGREEK ACROPHONIC EPIDAUREAN TWO DRACHMASGREEK ACROPHONIC TROEZE" + + "NIAN FIVEGREEK ACROPHONIC TROEZENIAN TENGREEK ACROPHONIC TROEZENIAN TEN " + + "ALTERNATE FORMGREEK ACROPHONIC HERMIONIAN TENGREEK ACROPHONIC MESSENIAN " + + "TENGREEK ACROPHONIC THESPIAN TENGREEK ACROPHONIC THESPIAN THIRTYGREEK AC" + + "ROPHONIC TROEZENIAN FIFTYGREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FOR" + + "MGREEK ACROPHONIC HERMIONIAN FIFTYGREEK ACROPHONIC THESPIAN FIFTYGREEK A" + + "CROPHONIC THESPIAN ONE HUNDREDGREEK ACROPHONIC THESPIAN THREE HUNDREDGRE" + + "EK ACROPHONIC EPIDAUREAN FIVE HUNDREDGREEK ACROPHONIC TROEZENIAN FIVE HU" + + "NDREDGREEK ACROPHONIC THESPIAN FIVE HUNDREDGREEK ACROPHONIC CARYSTIAN FI" + + "VE HUNDREDGREEK ACROPHONIC NAXIAN FIVE HUNDREDGREEK ACROPHONIC THESPIAN " + + "ONE THOUSANDGREEK ACROPHONIC THESPIAN FIVE THOUSANDGREEK ACROPHONIC DELP" + + "HIC FIVE MNASGREEK ACROPHONIC STRATIAN FIFTY MNASGREEK ONE HALF SIGNGREE" + + "K ONE HALF SIGN ALTERNATE FORMGREEK TWO THIRDS SIGNGREEK THREE QUARTERS " + + "SIGNGREEK YEAR SIGNGREEK TALENT SIGNGREEK DRACHMA SIGNGREEK OBOL SIGNGRE" + + "EK TWO OBOLS SIGNGREEK THREE OBOLS SIGNGREEK FOUR OBOLS SIGNGREEK FIVE O" + + "BOLS SIGNGREEK METRETES SIGNGREEK KYATHOS BASE SIGNGREEK LITRA SIGNGREEK" + + " OUNKIA SIGNGREEK XESTES SIGNGREEK ARTABE SIGNGREEK AROURA SIGNGREEK GRA" + + "MMA SIGNGREEK TRYBLION BASE SIGNGREEK ZERO SIGNGREEK ONE QUARTER SIGNGRE" + + "EK SINUSOID SIGNGREEK INDICTION SIGNNOMISMA SIGNROMAN SEXTANS SIGNROMAN " + + "UNCIA SIGNROMAN SEMUNCIA SIGNROMAN SEXTULA SIGNROMAN DIMIDIA SEXTULA SIG" + + "NROMAN SILIQUA SIGNROMAN DENARIUS SIGNROMAN QUINARIUS SIGNROMAN SESTERTI" + + "US SIGNROMAN DUPONDIUS SIGNROMAN AS SIGNROMAN CENTURIAL SIGNGREEK SYMBOL" + + " TAU RHOPHAISTOS DISC SIGN PEDESTRIANPHAISTOS DISC SIGN PLUMED HEADPHAIS" + + "TOS DISC SIGN TATTOOED HEADPHAISTOS DISC SIGN CAPTIVEPHAISTOS DISC SIGN " + + "CHILDPHAISTOS DISC SIGN WOMANPHAISTOS DISC SIGN HELMETPHAISTOS DISC SIGN" + + " GAUNTLETPHAISTOS DISC SIGN TIARAPHAISTOS DISC SIGN ARROWPHAISTOS DISC S" + + "IGN BOWPHAISTOS DISC SIGN SHIELDPHAISTOS DISC SIGN CLUBPHAISTOS DISC SIG" + + "N MANACLESPHAISTOS DISC SIGN MATTOCKPHAISTOS DISC SIGN SAWPHAISTOS DISC " + + "SIGN LIDPHAISTOS DISC SIGN BOOMERANGPHAISTOS DISC SIGN CARPENTRY PLANEPH" + + "AISTOS DISC SIGN DOLIUMPHAISTOS DISC SIGN COMBPHAISTOS DISC SIGN SLINGPH" + + "AISTOS DISC SIGN COLUMNPHAISTOS DISC SIGN BEEHIVEPHAISTOS DISC SIGN SHIP" + + "PHAISTOS DISC SIGN HORNPHAISTOS DISC SIGN HIDEPHAISTOS DISC SIGN BULLS L" + + "EGPHAISTOS DISC SIGN CATPHAISTOS DISC SIGN RAMPHAISTOS DISC SIGN EAGLEPH" + + "AISTOS DISC SIGN DOVEPHAISTOS DISC SIGN TUNNYPHAISTOS DISC SIGN BEEPHAIS" + + "TOS DISC SIGN PLANE TREEPHAISTOS DISC SIGN VINEPHAISTOS DISC SIGN PAPYRU" + + "SPHAISTOS DISC SIGN ROSETTEPHAISTOS DISC SIGN LILYPHAISTOS DISC SIGN OX " + + "BACKPHAISTOS DISC SIGN FLUTEPHAISTOS DISC SIGN GRATERPHAISTOS DISC SIGN " + + "STRAINERPHAISTOS DISC SIGN SMALL AXEPHAISTOS DISC SIGN WAVY BANDPHAISTOS" + + " DISC SIGN COMBINING OBLIQUE STROKELYCIAN LETTER ALYCIAN LETTER ELYCIAN " + + "LETTER BLYCIAN LETTER BHLYCIAN LETTER GLYCIAN LETTER DLYCIAN LETTER ILYC") + ("" + + "IAN LETTER WLYCIAN LETTER ZLYCIAN LETTER THLYCIAN LETTER JLYCIAN LETTER " + + "KLYCIAN LETTER QLYCIAN LETTER LLYCIAN LETTER MLYCIAN LETTER NLYCIAN LETT" + + "ER MMLYCIAN LETTER NNLYCIAN LETTER ULYCIAN LETTER PLYCIAN LETTER KKLYCIA" + + "N LETTER RLYCIAN LETTER SLYCIAN LETTER TLYCIAN LETTER TTLYCIAN LETTER AN" + + "LYCIAN LETTER ENLYCIAN LETTER HLYCIAN LETTER XCARIAN LETTER ACARIAN LETT" + + "ER P2CARIAN LETTER DCARIAN LETTER LCARIAN LETTER UUUCARIAN LETTER RCARIA" + + "N LETTER LDCARIAN LETTER A2CARIAN LETTER QCARIAN LETTER BCARIAN LETTER M" + + "CARIAN LETTER OCARIAN LETTER D2CARIAN LETTER TCARIAN LETTER SHCARIAN LET" + + "TER SH2CARIAN LETTER SCARIAN LETTER C-18CARIAN LETTER UCARIAN LETTER NNC" + + "ARIAN LETTER XCARIAN LETTER NCARIAN LETTER TT2CARIAN LETTER PCARIAN LETT" + + "ER SSCARIAN LETTER ICARIAN LETTER ECARIAN LETTER UUUUCARIAN LETTER KCARI" + + "AN LETTER K2CARIAN LETTER NDCARIAN LETTER UUCARIAN LETTER GCARIAN LETTER" + + " G2CARIAN LETTER STCARIAN LETTER ST2CARIAN LETTER NGCARIAN LETTER IICARI" + + "AN LETTER C-39CARIAN LETTER TTCARIAN LETTER UUU2CARIAN LETTER RRCARIAN L" + + "ETTER MBCARIAN LETTER MB2CARIAN LETTER MB3CARIAN LETTER MB4CARIAN LETTER" + + " LD2CARIAN LETTER E2CARIAN LETTER UUU3COPTIC EPACT THOUSANDS MARKCOPTIC " + + "EPACT DIGIT ONECOPTIC EPACT DIGIT TWOCOPTIC EPACT DIGIT THREECOPTIC EPAC" + + "T DIGIT FOURCOPTIC EPACT DIGIT FIVECOPTIC EPACT DIGIT SIXCOPTIC EPACT DI" + + "GIT SEVENCOPTIC EPACT DIGIT EIGHTCOPTIC EPACT DIGIT NINECOPTIC EPACT NUM" + + "BER TENCOPTIC EPACT NUMBER TWENTYCOPTIC EPACT NUMBER THIRTYCOPTIC EPACT " + + "NUMBER FORTYCOPTIC EPACT NUMBER FIFTYCOPTIC EPACT NUMBER SIXTYCOPTIC EPA" + + "CT NUMBER SEVENTYCOPTIC EPACT NUMBER EIGHTYCOPTIC EPACT NUMBER NINETYCOP" + + "TIC EPACT NUMBER ONE HUNDREDCOPTIC EPACT NUMBER TWO HUNDREDCOPTIC EPACT " + + "NUMBER THREE HUNDREDCOPTIC EPACT NUMBER FOUR HUNDREDCOPTIC EPACT NUMBER " + + "FIVE HUNDREDCOPTIC EPACT NUMBER SIX HUNDREDCOPTIC EPACT NUMBER SEVEN HUN" + + "DREDCOPTIC EPACT NUMBER EIGHT HUNDREDCOPTIC EPACT NUMBER NINE HUNDREDOLD" + + " ITALIC LETTER AOLD ITALIC LETTER BEOLD ITALIC LETTER KEOLD ITALIC LETTE" + + "R DEOLD ITALIC LETTER EOLD ITALIC LETTER VEOLD ITALIC LETTER ZEOLD ITALI" + + "C LETTER HEOLD ITALIC LETTER THEOLD ITALIC LETTER IOLD ITALIC LETTER KAO" + + "LD ITALIC LETTER ELOLD ITALIC LETTER EMOLD ITALIC LETTER ENOLD ITALIC LE" + + "TTER ESHOLD ITALIC LETTER OOLD ITALIC LETTER PEOLD ITALIC LETTER SHEOLD " + + "ITALIC LETTER KUOLD ITALIC LETTER EROLD ITALIC LETTER ESOLD ITALIC LETTE" + + "R TEOLD ITALIC LETTER UOLD ITALIC LETTER EKSOLD ITALIC LETTER PHEOLD ITA" + + "LIC LETTER KHEOLD ITALIC LETTER EFOLD ITALIC LETTER ERSOLD ITALIC LETTER" + + " CHEOLD ITALIC LETTER IIOLD ITALIC LETTER UUOLD ITALIC LETTER ESSOLD ITA" + + "LIC NUMERAL ONEOLD ITALIC NUMERAL FIVEOLD ITALIC NUMERAL TENOLD ITALIC N" + + "UMERAL FIFTYGOTHIC LETTER AHSAGOTHIC LETTER BAIRKANGOTHIC LETTER GIBAGOT" + + "HIC LETTER DAGSGOTHIC LETTER AIHVUSGOTHIC LETTER QAIRTHRAGOTHIC LETTER I" + + "UJAGOTHIC LETTER HAGLGOTHIC LETTER THIUTHGOTHIC LETTER EISGOTHIC LETTER " + + "KUSMAGOTHIC LETTER LAGUSGOTHIC LETTER MANNAGOTHIC LETTER NAUTHSGOTHIC LE" + + "TTER JERGOTHIC LETTER URUSGOTHIC LETTER PAIRTHRAGOTHIC LETTER NINETYGOTH" + + "IC LETTER RAIDAGOTHIC LETTER SAUILGOTHIC LETTER TEIWSGOTHIC LETTER WINJA" + + "GOTHIC LETTER FAIHUGOTHIC LETTER IGGWSGOTHIC LETTER HWAIRGOTHIC LETTER O" + + "THALGOTHIC LETTER NINE HUNDREDOLD PERMIC LETTER ANOLD PERMIC LETTER BURO" + + "LD PERMIC LETTER GAIOLD PERMIC LETTER DOIOLD PERMIC LETTER EOLD PERMIC L" + + "ETTER ZHOIOLD PERMIC LETTER DZHOIOLD PERMIC LETTER ZATAOLD PERMIC LETTER" + + " DZITAOLD PERMIC LETTER IOLD PERMIC LETTER KOKEOLD PERMIC LETTER LEIOLD " + + "PERMIC LETTER MENOEOLD PERMIC LETTER NENOEOLD PERMIC LETTER VOOIOLD PERM" + + "IC LETTER PEEIOLD PERMIC LETTER REIOLD PERMIC LETTER SIIOLD PERMIC LETTE" + + "R TAIOLD PERMIC LETTER UOLD PERMIC LETTER CHERYOLD PERMIC LETTER SHOOIOL" + + "D PERMIC LETTER SHCHOOIOLD PERMIC LETTER YRYOLD PERMIC LETTER YERUOLD PE" + + "RMIC LETTER OOLD PERMIC LETTER OOOLD PERMIC LETTER EFOLD PERMIC LETTER H" + + "AOLD PERMIC LETTER TSIUOLD PERMIC LETTER VEROLD PERMIC LETTER YEROLD PER" + + "MIC LETTER YERIOLD PERMIC LETTER YATOLD PERMIC LETTER IEOLD PERMIC LETTE" + + "R YUOLD PERMIC LETTER YAOLD PERMIC LETTER IACOMBINING OLD PERMIC LETTER " + + "ANCOMBINING OLD PERMIC LETTER DOICOMBINING OLD PERMIC LETTER ZATACOMBINI" + + "NG OLD PERMIC LETTER NENOECOMBINING OLD PERMIC LETTER SIIUGARITIC LETTER" + + " ALPAUGARITIC LETTER BETAUGARITIC LETTER GAMLAUGARITIC LETTER KHAUGARITI" + + "C LETTER DELTAUGARITIC LETTER HOUGARITIC LETTER WOUGARITIC LETTER ZETAUG" + + "ARITIC LETTER HOTAUGARITIC LETTER TETUGARITIC LETTER YODUGARITIC LETTER " + + "KAFUGARITIC LETTER SHINUGARITIC LETTER LAMDAUGARITIC LETTER MEMUGARITIC " + + "LETTER DHALUGARITIC LETTER NUNUGARITIC LETTER ZUUGARITIC LETTER SAMKAUGA" + + "RITIC LETTER AINUGARITIC LETTER PUUGARITIC LETTER SADEUGARITIC LETTER QO" + + "PAUGARITIC LETTER RASHAUGARITIC LETTER THANNAUGARITIC LETTER GHAINUGARIT") + ("" + + "IC LETTER TOUGARITIC LETTER IUGARITIC LETTER UUGARITIC LETTER SSUUGARITI" + + "C WORD DIVIDEROLD PERSIAN SIGN AOLD PERSIAN SIGN IOLD PERSIAN SIGN UOLD " + + "PERSIAN SIGN KAOLD PERSIAN SIGN KUOLD PERSIAN SIGN GAOLD PERSIAN SIGN GU" + + "OLD PERSIAN SIGN XAOLD PERSIAN SIGN CAOLD PERSIAN SIGN JAOLD PERSIAN SIG" + + "N JIOLD PERSIAN SIGN TAOLD PERSIAN SIGN TUOLD PERSIAN SIGN DAOLD PERSIAN" + + " SIGN DIOLD PERSIAN SIGN DUOLD PERSIAN SIGN THAOLD PERSIAN SIGN PAOLD PE" + + "RSIAN SIGN BAOLD PERSIAN SIGN FAOLD PERSIAN SIGN NAOLD PERSIAN SIGN NUOL" + + "D PERSIAN SIGN MAOLD PERSIAN SIGN MIOLD PERSIAN SIGN MUOLD PERSIAN SIGN " + + "YAOLD PERSIAN SIGN VAOLD PERSIAN SIGN VIOLD PERSIAN SIGN RAOLD PERSIAN S" + + "IGN RUOLD PERSIAN SIGN LAOLD PERSIAN SIGN SAOLD PERSIAN SIGN ZAOLD PERSI" + + "AN SIGN SHAOLD PERSIAN SIGN SSAOLD PERSIAN SIGN HAOLD PERSIAN SIGN AURAM" + + "AZDAAOLD PERSIAN SIGN AURAMAZDAA-2OLD PERSIAN SIGN AURAMAZDAAHAOLD PERSI" + + "AN SIGN XSHAAYATHIYAOLD PERSIAN SIGN DAHYAAUSHOLD PERSIAN SIGN DAHYAAUSH" + + "-2OLD PERSIAN SIGN BAGAOLD PERSIAN SIGN BUUMISHOLD PERSIAN WORD DIVIDERO" + + "LD PERSIAN NUMBER ONEOLD PERSIAN NUMBER TWOOLD PERSIAN NUMBER TENOLD PER" + + "SIAN NUMBER TWENTYOLD PERSIAN NUMBER HUNDREDDESERET CAPITAL LETTER LONG " + + "IDESERET CAPITAL LETTER LONG EDESERET CAPITAL LETTER LONG ADESERET CAPIT" + + "AL LETTER LONG AHDESERET CAPITAL LETTER LONG ODESERET CAPITAL LETTER LON" + + "G OODESERET CAPITAL LETTER SHORT IDESERET CAPITAL LETTER SHORT EDESERET " + + "CAPITAL LETTER SHORT ADESERET CAPITAL LETTER SHORT AHDESERET CAPITAL LET" + + "TER SHORT ODESERET CAPITAL LETTER SHORT OODESERET CAPITAL LETTER AYDESER" + + "ET CAPITAL LETTER OWDESERET CAPITAL LETTER WUDESERET CAPITAL LETTER YEED" + + "ESERET CAPITAL LETTER HDESERET CAPITAL LETTER PEEDESERET CAPITAL LETTER " + + "BEEDESERET CAPITAL LETTER TEEDESERET CAPITAL LETTER DEEDESERET CAPITAL L" + + "ETTER CHEEDESERET CAPITAL LETTER JEEDESERET CAPITAL LETTER KAYDESERET CA" + + "PITAL LETTER GAYDESERET CAPITAL LETTER EFDESERET CAPITAL LETTER VEEDESER" + + "ET CAPITAL LETTER ETHDESERET CAPITAL LETTER THEEDESERET CAPITAL LETTER E" + + "SDESERET CAPITAL LETTER ZEEDESERET CAPITAL LETTER ESHDESERET CAPITAL LET" + + "TER ZHEEDESERET CAPITAL LETTER ERDESERET CAPITAL LETTER ELDESERET CAPITA" + + "L LETTER EMDESERET CAPITAL LETTER ENDESERET CAPITAL LETTER ENGDESERET CA" + + "PITAL LETTER OIDESERET CAPITAL LETTER EWDESERET SMALL LETTER LONG IDESER" + + "ET SMALL LETTER LONG EDESERET SMALL LETTER LONG ADESERET SMALL LETTER LO" + + "NG AHDESERET SMALL LETTER LONG ODESERET SMALL LETTER LONG OODESERET SMAL" + + "L LETTER SHORT IDESERET SMALL LETTER SHORT EDESERET SMALL LETTER SHORT A" + + "DESERET SMALL LETTER SHORT AHDESERET SMALL LETTER SHORT ODESERET SMALL L" + + "ETTER SHORT OODESERET SMALL LETTER AYDESERET SMALL LETTER OWDESERET SMAL" + + "L LETTER WUDESERET SMALL LETTER YEEDESERET SMALL LETTER HDESERET SMALL L" + + "ETTER PEEDESERET SMALL LETTER BEEDESERET SMALL LETTER TEEDESERET SMALL L" + + "ETTER DEEDESERET SMALL LETTER CHEEDESERET SMALL LETTER JEEDESERET SMALL " + + "LETTER KAYDESERET SMALL LETTER GAYDESERET SMALL LETTER EFDESERET SMALL L" + + "ETTER VEEDESERET SMALL LETTER ETHDESERET SMALL LETTER THEEDESERET SMALL " + + "LETTER ESDESERET SMALL LETTER ZEEDESERET SMALL LETTER ESHDESERET SMALL L" + + "ETTER ZHEEDESERET SMALL LETTER ERDESERET SMALL LETTER ELDESERET SMALL LE" + + "TTER EMDESERET SMALL LETTER ENDESERET SMALL LETTER ENGDESERET SMALL LETT" + + "ER OIDESERET SMALL LETTER EWSHAVIAN LETTER PEEPSHAVIAN LETTER TOTSHAVIAN" + + " LETTER KICKSHAVIAN LETTER FEESHAVIAN LETTER THIGHSHAVIAN LETTER SOSHAVI" + + "AN LETTER SURESHAVIAN LETTER CHURCHSHAVIAN LETTER YEASHAVIAN LETTER HUNG" + + "SHAVIAN LETTER BIBSHAVIAN LETTER DEADSHAVIAN LETTER GAGSHAVIAN LETTER VO" + + "WSHAVIAN LETTER THEYSHAVIAN LETTER ZOOSHAVIAN LETTER MEASURESHAVIAN LETT" + + "ER JUDGESHAVIAN LETTER WOESHAVIAN LETTER HA-HASHAVIAN LETTER LOLLSHAVIAN" + + " LETTER MIMESHAVIAN LETTER IFSHAVIAN LETTER EGGSHAVIAN LETTER ASHSHAVIAN" + + " LETTER ADOSHAVIAN LETTER ONSHAVIAN LETTER WOOLSHAVIAN LETTER OUTSHAVIAN" + + " LETTER AHSHAVIAN LETTER ROARSHAVIAN LETTER NUNSHAVIAN LETTER EATSHAVIAN" + + " LETTER AGESHAVIAN LETTER ICESHAVIAN LETTER UPSHAVIAN LETTER OAKSHAVIAN " + + "LETTER OOZESHAVIAN LETTER OILSHAVIAN LETTER AWESHAVIAN LETTER ARESHAVIAN" + + " LETTER ORSHAVIAN LETTER AIRSHAVIAN LETTER ERRSHAVIAN LETTER ARRAYSHAVIA" + + "N LETTER EARSHAVIAN LETTER IANSHAVIAN LETTER YEWOSMANYA LETTER ALEFOSMAN" + + "YA LETTER BAOSMANYA LETTER TAOSMANYA LETTER JAOSMANYA LETTER XAOSMANYA L" + + "ETTER KHAOSMANYA LETTER DEELOSMANYA LETTER RAOSMANYA LETTER SAOSMANYA LE" + + "TTER SHIINOSMANYA LETTER DHAOSMANYA LETTER CAYNOSMANYA LETTER GAOSMANYA " + + "LETTER FAOSMANYA LETTER QAAFOSMANYA LETTER KAAFOSMANYA LETTER LAANOSMANY" + + "A LETTER MIINOSMANYA LETTER NUUNOSMANYA LETTER WAWOSMANYA LETTER HAOSMAN" + + "YA LETTER YAOSMANYA LETTER AOSMANYA LETTER EOSMANYA LETTER IOSMANYA LETT" + + "ER OOSMANYA LETTER UOSMANYA LETTER AAOSMANYA LETTER EEOSMANYA LETTER OOO") + ("" + + "SMANYA DIGIT ZEROOSMANYA DIGIT ONEOSMANYA DIGIT TWOOSMANYA DIGIT THREEOS" + + "MANYA DIGIT FOUROSMANYA DIGIT FIVEOSMANYA DIGIT SIXOSMANYA DIGIT SEVENOS" + + "MANYA DIGIT EIGHTOSMANYA DIGIT NINEOSAGE CAPITAL LETTER AOSAGE CAPITAL L" + + "ETTER AIOSAGE CAPITAL LETTER AINOSAGE CAPITAL LETTER AHOSAGE CAPITAL LET" + + "TER BRAOSAGE CAPITAL LETTER CHAOSAGE CAPITAL LETTER EHCHAOSAGE CAPITAL L" + + "ETTER EOSAGE CAPITAL LETTER EINOSAGE CAPITAL LETTER HAOSAGE CAPITAL LETT" + + "ER HYAOSAGE CAPITAL LETTER IOSAGE CAPITAL LETTER KAOSAGE CAPITAL LETTER " + + "EHKAOSAGE CAPITAL LETTER KYAOSAGE CAPITAL LETTER LAOSAGE CAPITAL LETTER " + + "MAOSAGE CAPITAL LETTER NAOSAGE CAPITAL LETTER OOSAGE CAPITAL LETTER OINO" + + "SAGE CAPITAL LETTER PAOSAGE CAPITAL LETTER EHPAOSAGE CAPITAL LETTER SAOS" + + "AGE CAPITAL LETTER SHAOSAGE CAPITAL LETTER TAOSAGE CAPITAL LETTER EHTAOS" + + "AGE CAPITAL LETTER TSAOSAGE CAPITAL LETTER EHTSAOSAGE CAPITAL LETTER TSH" + + "AOSAGE CAPITAL LETTER DHAOSAGE CAPITAL LETTER UOSAGE CAPITAL LETTER WAOS" + + "AGE CAPITAL LETTER KHAOSAGE CAPITAL LETTER GHAOSAGE CAPITAL LETTER ZAOSA" + + "GE CAPITAL LETTER ZHAOSAGE SMALL LETTER AOSAGE SMALL LETTER AIOSAGE SMAL" + + "L LETTER AINOSAGE SMALL LETTER AHOSAGE SMALL LETTER BRAOSAGE SMALL LETTE" + + "R CHAOSAGE SMALL LETTER EHCHAOSAGE SMALL LETTER EOSAGE SMALL LETTER EINO" + + "SAGE SMALL LETTER HAOSAGE SMALL LETTER HYAOSAGE SMALL LETTER IOSAGE SMAL" + + "L LETTER KAOSAGE SMALL LETTER EHKAOSAGE SMALL LETTER KYAOSAGE SMALL LETT" + + "ER LAOSAGE SMALL LETTER MAOSAGE SMALL LETTER NAOSAGE SMALL LETTER OOSAGE" + + " SMALL LETTER OINOSAGE SMALL LETTER PAOSAGE SMALL LETTER EHPAOSAGE SMALL" + + " LETTER SAOSAGE SMALL LETTER SHAOSAGE SMALL LETTER TAOSAGE SMALL LETTER " + + "EHTAOSAGE SMALL LETTER TSAOSAGE SMALL LETTER EHTSAOSAGE SMALL LETTER TSH" + + "AOSAGE SMALL LETTER DHAOSAGE SMALL LETTER UOSAGE SMALL LETTER WAOSAGE SM" + + "ALL LETTER KHAOSAGE SMALL LETTER GHAOSAGE SMALL LETTER ZAOSAGE SMALL LET" + + "TER ZHAELBASAN LETTER AELBASAN LETTER BEELBASAN LETTER CEELBASAN LETTER " + + "CHEELBASAN LETTER DEELBASAN LETTER NDEELBASAN LETTER DHEELBASAN LETTER E" + + "IELBASAN LETTER EELBASAN LETTER FEELBASAN LETTER GEELBASAN LETTER GJEELB" + + "ASAN LETTER HEELBASAN LETTER IELBASAN LETTER JEELBASAN LETTER KEELBASAN " + + "LETTER LEELBASAN LETTER LLEELBASAN LETTER MEELBASAN LETTER NEELBASAN LET" + + "TER NAELBASAN LETTER NJEELBASAN LETTER OELBASAN LETTER PEELBASAN LETTER " + + "QEELBASAN LETTER REELBASAN LETTER RREELBASAN LETTER SEELBASAN LETTER SHE" + + "ELBASAN LETTER TEELBASAN LETTER THEELBASAN LETTER UELBASAN LETTER VEELBA" + + "SAN LETTER XEELBASAN LETTER YELBASAN LETTER ZEELBASAN LETTER ZHEELBASAN " + + "LETTER GHEELBASAN LETTER GHAMMAELBASAN LETTER KHECAUCASIAN ALBANIAN LETT" + + "ER ALTCAUCASIAN ALBANIAN LETTER BETCAUCASIAN ALBANIAN LETTER GIMCAUCASIA" + + "N ALBANIAN LETTER DATCAUCASIAN ALBANIAN LETTER EBCAUCASIAN ALBANIAN LETT" + + "ER ZARLCAUCASIAN ALBANIAN LETTER EYNCAUCASIAN ALBANIAN LETTER ZHILCAUCAS" + + "IAN ALBANIAN LETTER TASCAUCASIAN ALBANIAN LETTER CHACAUCASIAN ALBANIAN L" + + "ETTER YOWDCAUCASIAN ALBANIAN LETTER ZHACAUCASIAN ALBANIAN LETTER IRBCAUC" + + "ASIAN ALBANIAN LETTER SHACAUCASIAN ALBANIAN LETTER LANCAUCASIAN ALBANIAN" + + " LETTER INYACAUCASIAN ALBANIAN LETTER XEYNCAUCASIAN ALBANIAN LETTER DYAN" + + "CAUCASIAN ALBANIAN LETTER CARCAUCASIAN ALBANIAN LETTER JHOXCAUCASIAN ALB" + + "ANIAN LETTER KARCAUCASIAN ALBANIAN LETTER LYITCAUCASIAN ALBANIAN LETTER " + + "HEYTCAUCASIAN ALBANIAN LETTER QAYCAUCASIAN ALBANIAN LETTER AORCAUCASIAN " + + "ALBANIAN LETTER CHOYCAUCASIAN ALBANIAN LETTER CHICAUCASIAN ALBANIAN LETT" + + "ER CYAYCAUCASIAN ALBANIAN LETTER MAQCAUCASIAN ALBANIAN LETTER QARCAUCASI" + + "AN ALBANIAN LETTER NOWCCAUCASIAN ALBANIAN LETTER DZYAYCAUCASIAN ALBANIAN" + + " LETTER SHAKCAUCASIAN ALBANIAN LETTER JAYNCAUCASIAN ALBANIAN LETTER ONCA" + + "UCASIAN ALBANIAN LETTER TYAYCAUCASIAN ALBANIAN LETTER FAMCAUCASIAN ALBAN" + + "IAN LETTER DZAYCAUCASIAN ALBANIAN LETTER CHATCAUCASIAN ALBANIAN LETTER P" + + "ENCAUCASIAN ALBANIAN LETTER GHEYSCAUCASIAN ALBANIAN LETTER RATCAUCASIAN " + + "ALBANIAN LETTER SEYKCAUCASIAN ALBANIAN LETTER VEYZCAUCASIAN ALBANIAN LET" + + "TER TIWRCAUCASIAN ALBANIAN LETTER SHOYCAUCASIAN ALBANIAN LETTER IWNCAUCA" + + "SIAN ALBANIAN LETTER CYAWCAUCASIAN ALBANIAN LETTER CAYNCAUCASIAN ALBANIA" + + "N LETTER YAYDCAUCASIAN ALBANIAN LETTER PIWRCAUCASIAN ALBANIAN LETTER KIW" + + "CAUCASIAN ALBANIAN CITATION MARKLINEAR A SIGN AB001LINEAR A SIGN AB002LI" + + "NEAR A SIGN AB003LINEAR A SIGN AB004LINEAR A SIGN AB005LINEAR A SIGN AB0" + + "06LINEAR A SIGN AB007LINEAR A SIGN AB008LINEAR A SIGN AB009LINEAR A SIGN" + + " AB010LINEAR A SIGN AB011LINEAR A SIGN AB013LINEAR A SIGN AB016LINEAR A " + + "SIGN AB017LINEAR A SIGN AB020LINEAR A SIGN AB021LINEAR A SIGN AB021FLINE" + + "AR A SIGN AB021MLINEAR A SIGN AB022LINEAR A SIGN AB022FLINEAR A SIGN AB0" + + "22MLINEAR A SIGN AB023LINEAR A SIGN AB023MLINEAR A SIGN AB024LINEAR A SI" + + "GN AB026LINEAR A SIGN AB027LINEAR A SIGN AB028LINEAR A SIGN A028BLINEAR ") + ("" + + "A SIGN AB029LINEAR A SIGN AB030LINEAR A SIGN AB031LINEAR A SIGN AB034LIN" + + "EAR A SIGN AB037LINEAR A SIGN AB038LINEAR A SIGN AB039LINEAR A SIGN AB04" + + "0LINEAR A SIGN AB041LINEAR A SIGN AB044LINEAR A SIGN AB045LINEAR A SIGN " + + "AB046LINEAR A SIGN AB047LINEAR A SIGN AB048LINEAR A SIGN AB049LINEAR A S" + + "IGN AB050LINEAR A SIGN AB051LINEAR A SIGN AB053LINEAR A SIGN AB054LINEAR" + + " A SIGN AB055LINEAR A SIGN AB056LINEAR A SIGN AB057LINEAR A SIGN AB058LI" + + "NEAR A SIGN AB059LINEAR A SIGN AB060LINEAR A SIGN AB061LINEAR A SIGN AB0" + + "65LINEAR A SIGN AB066LINEAR A SIGN AB067LINEAR A SIGN AB069LINEAR A SIGN" + + " AB070LINEAR A SIGN AB073LINEAR A SIGN AB074LINEAR A SIGN AB076LINEAR A " + + "SIGN AB077LINEAR A SIGN AB078LINEAR A SIGN AB079LINEAR A SIGN AB080LINEA" + + "R A SIGN AB081LINEAR A SIGN AB082LINEAR A SIGN AB085LINEAR A SIGN AB086L" + + "INEAR A SIGN AB087LINEAR A SIGN A100-102LINEAR A SIGN AB118LINEAR A SIGN" + + " AB120LINEAR A SIGN A120BLINEAR A SIGN AB122LINEAR A SIGN AB123LINEAR A " + + "SIGN AB131ALINEAR A SIGN AB131BLINEAR A SIGN A131CLINEAR A SIGN AB164LIN" + + "EAR A SIGN AB171LINEAR A SIGN AB180LINEAR A SIGN AB188LINEAR A SIGN AB19" + + "1LINEAR A SIGN A301LINEAR A SIGN A302LINEAR A SIGN A303LINEAR A SIGN A30" + + "4LINEAR A SIGN A305LINEAR A SIGN A306LINEAR A SIGN A307LINEAR A SIGN A30" + + "8LINEAR A SIGN A309ALINEAR A SIGN A309BLINEAR A SIGN A309CLINEAR A SIGN " + + "A310LINEAR A SIGN A311LINEAR A SIGN A312LINEAR A SIGN A313ALINEAR A SIGN" + + " A313BLINEAR A SIGN A313CLINEAR A SIGN A314LINEAR A SIGN A315LINEAR A SI" + + "GN A316LINEAR A SIGN A317LINEAR A SIGN A318LINEAR A SIGN A319LINEAR A SI" + + "GN A320LINEAR A SIGN A321LINEAR A SIGN A322LINEAR A SIGN A323LINEAR A SI" + + "GN A324LINEAR A SIGN A325LINEAR A SIGN A326LINEAR A SIGN A327LINEAR A SI" + + "GN A328LINEAR A SIGN A329LINEAR A SIGN A330LINEAR A SIGN A331LINEAR A SI" + + "GN A332LINEAR A SIGN A333LINEAR A SIGN A334LINEAR A SIGN A335LINEAR A SI" + + "GN A336LINEAR A SIGN A337LINEAR A SIGN A338LINEAR A SIGN A339LINEAR A SI" + + "GN A340LINEAR A SIGN A341LINEAR A SIGN A342LINEAR A SIGN A343LINEAR A SI" + + "GN A344LINEAR A SIGN A345LINEAR A SIGN A346LINEAR A SIGN A347LINEAR A SI" + + "GN A348LINEAR A SIGN A349LINEAR A SIGN A350LINEAR A SIGN A351LINEAR A SI" + + "GN A352LINEAR A SIGN A353LINEAR A SIGN A354LINEAR A SIGN A355LINEAR A SI" + + "GN A356LINEAR A SIGN A357LINEAR A SIGN A358LINEAR A SIGN A359LINEAR A SI" + + "GN A360LINEAR A SIGN A361LINEAR A SIGN A362LINEAR A SIGN A363LINEAR A SI" + + "GN A364LINEAR A SIGN A365LINEAR A SIGN A366LINEAR A SIGN A367LINEAR A SI" + + "GN A368LINEAR A SIGN A369LINEAR A SIGN A370LINEAR A SIGN A371LINEAR A SI" + + "GN A400-VASLINEAR A SIGN A401-VASLINEAR A SIGN A402-VASLINEAR A SIGN A40" + + "3-VASLINEAR A SIGN A404-VASLINEAR A SIGN A405-VASLINEAR A SIGN A406-VASL" + + "INEAR A SIGN A407-VASLINEAR A SIGN A408-VASLINEAR A SIGN A409-VASLINEAR " + + "A SIGN A410-VASLINEAR A SIGN A411-VASLINEAR A SIGN A412-VASLINEAR A SIGN" + + " A413-VASLINEAR A SIGN A414-VASLINEAR A SIGN A415-VASLINEAR A SIGN A416-" + + "VASLINEAR A SIGN A417-VASLINEAR A SIGN A418-VASLINEAR A SIGN A501LINEAR " + + "A SIGN A502LINEAR A SIGN A503LINEAR A SIGN A504LINEAR A SIGN A505LINEAR " + + "A SIGN A506LINEAR A SIGN A508LINEAR A SIGN A509LINEAR A SIGN A510LINEAR " + + "A SIGN A511LINEAR A SIGN A512LINEAR A SIGN A513LINEAR A SIGN A515LINEAR " + + "A SIGN A516LINEAR A SIGN A520LINEAR A SIGN A521LINEAR A SIGN A523LINEAR " + + "A SIGN A524LINEAR A SIGN A525LINEAR A SIGN A526LINEAR A SIGN A527LINEAR " + + "A SIGN A528LINEAR A SIGN A529LINEAR A SIGN A530LINEAR A SIGN A531LINEAR " + + "A SIGN A532LINEAR A SIGN A534LINEAR A SIGN A535LINEAR A SIGN A536LINEAR " + + "A SIGN A537LINEAR A SIGN A538LINEAR A SIGN A539LINEAR A SIGN A540LINEAR " + + "A SIGN A541LINEAR A SIGN A542LINEAR A SIGN A545LINEAR A SIGN A547LINEAR " + + "A SIGN A548LINEAR A SIGN A549LINEAR A SIGN A550LINEAR A SIGN A551LINEAR " + + "A SIGN A552LINEAR A SIGN A553LINEAR A SIGN A554LINEAR A SIGN A555LINEAR " + + "A SIGN A556LINEAR A SIGN A557LINEAR A SIGN A559LINEAR A SIGN A563LINEAR " + + "A SIGN A564LINEAR A SIGN A565LINEAR A SIGN A566LINEAR A SIGN A568LINEAR " + + "A SIGN A569LINEAR A SIGN A570LINEAR A SIGN A571LINEAR A SIGN A572LINEAR " + + "A SIGN A573LINEAR A SIGN A574LINEAR A SIGN A575LINEAR A SIGN A576LINEAR " + + "A SIGN A577LINEAR A SIGN A578LINEAR A SIGN A579LINEAR A SIGN A580LINEAR " + + "A SIGN A581LINEAR A SIGN A582LINEAR A SIGN A583LINEAR A SIGN A584LINEAR " + + "A SIGN A585LINEAR A SIGN A586LINEAR A SIGN A587LINEAR A SIGN A588LINEAR " + + "A SIGN A589LINEAR A SIGN A591LINEAR A SIGN A592LINEAR A SIGN A594LINEAR " + + "A SIGN A595LINEAR A SIGN A596LINEAR A SIGN A598LINEAR A SIGN A600LINEAR " + + "A SIGN A601LINEAR A SIGN A602LINEAR A SIGN A603LINEAR A SIGN A604LINEAR " + + "A SIGN A606LINEAR A SIGN A608LINEAR A SIGN A609LINEAR A SIGN A610LINEAR " + + "A SIGN A611LINEAR A SIGN A612LINEAR A SIGN A613LINEAR A SIGN A614LINEAR " + + "A SIGN A615LINEAR A SIGN A616LINEAR A SIGN A617LINEAR A SIGN A618LINEAR ") + ("" + + "A SIGN A619LINEAR A SIGN A620LINEAR A SIGN A621LINEAR A SIGN A622LINEAR " + + "A SIGN A623LINEAR A SIGN A624LINEAR A SIGN A626LINEAR A SIGN A627LINEAR " + + "A SIGN A628LINEAR A SIGN A629LINEAR A SIGN A634LINEAR A SIGN A637LINEAR " + + "A SIGN A638LINEAR A SIGN A640LINEAR A SIGN A642LINEAR A SIGN A643LINEAR " + + "A SIGN A644LINEAR A SIGN A645LINEAR A SIGN A646LINEAR A SIGN A648LINEAR " + + "A SIGN A649LINEAR A SIGN A651LINEAR A SIGN A652LINEAR A SIGN A653LINEAR " + + "A SIGN A654LINEAR A SIGN A655LINEAR A SIGN A656LINEAR A SIGN A657LINEAR " + + "A SIGN A658LINEAR A SIGN A659LINEAR A SIGN A660LINEAR A SIGN A661LINEAR " + + "A SIGN A662LINEAR A SIGN A663LINEAR A SIGN A664LINEAR A SIGN A701 ALINEA" + + "R A SIGN A702 BLINEAR A SIGN A703 DLINEAR A SIGN A704 ELINEAR A SIGN A70" + + "5 FLINEAR A SIGN A706 HLINEAR A SIGN A707 JLINEAR A SIGN A708 KLINEAR A " + + "SIGN A709 LLINEAR A SIGN A709-2 L2LINEAR A SIGN A709-3 L3LINEAR A SIGN A" + + "709-4 L4LINEAR A SIGN A709-6 L6LINEAR A SIGN A710 WLINEAR A SIGN A711 XL" + + "INEAR A SIGN A712 YLINEAR A SIGN A713 OMEGALINEAR A SIGN A714 ABBLINEAR " + + "A SIGN A715 BBLINEAR A SIGN A717 DDLINEAR A SIGN A726 EYYYLINEAR A SIGN " + + "A732 JELINEAR A SIGN A800LINEAR A SIGN A801LINEAR A SIGN A802LINEAR A SI" + + "GN A803LINEAR A SIGN A804LINEAR A SIGN A805LINEAR A SIGN A806LINEAR A SI" + + "GN A807CYPRIOT SYLLABLE ACYPRIOT SYLLABLE ECYPRIOT SYLLABLE ICYPRIOT SYL" + + "LABLE OCYPRIOT SYLLABLE UCYPRIOT SYLLABLE JACYPRIOT SYLLABLE JOCYPRIOT S" + + "YLLABLE KACYPRIOT SYLLABLE KECYPRIOT SYLLABLE KICYPRIOT SYLLABLE KOCYPRI" + + "OT SYLLABLE KUCYPRIOT SYLLABLE LACYPRIOT SYLLABLE LECYPRIOT SYLLABLE LIC" + + "YPRIOT SYLLABLE LOCYPRIOT SYLLABLE LUCYPRIOT SYLLABLE MACYPRIOT SYLLABLE" + + " MECYPRIOT SYLLABLE MICYPRIOT SYLLABLE MOCYPRIOT SYLLABLE MUCYPRIOT SYLL" + + "ABLE NACYPRIOT SYLLABLE NECYPRIOT SYLLABLE NICYPRIOT SYLLABLE NOCYPRIOT " + + "SYLLABLE NUCYPRIOT SYLLABLE PACYPRIOT SYLLABLE PECYPRIOT SYLLABLE PICYPR" + + "IOT SYLLABLE POCYPRIOT SYLLABLE PUCYPRIOT SYLLABLE RACYPRIOT SYLLABLE RE" + + "CYPRIOT SYLLABLE RICYPRIOT SYLLABLE ROCYPRIOT SYLLABLE RUCYPRIOT SYLLABL" + + "E SACYPRIOT SYLLABLE SECYPRIOT SYLLABLE SICYPRIOT SYLLABLE SOCYPRIOT SYL" + + "LABLE SUCYPRIOT SYLLABLE TACYPRIOT SYLLABLE TECYPRIOT SYLLABLE TICYPRIOT" + + " SYLLABLE TOCYPRIOT SYLLABLE TUCYPRIOT SYLLABLE WACYPRIOT SYLLABLE WECYP" + + "RIOT SYLLABLE WICYPRIOT SYLLABLE WOCYPRIOT SYLLABLE XACYPRIOT SYLLABLE X" + + "ECYPRIOT SYLLABLE ZACYPRIOT SYLLABLE ZOIMPERIAL ARAMAIC LETTER ALEPHIMPE" + + "RIAL ARAMAIC LETTER BETHIMPERIAL ARAMAIC LETTER GIMELIMPERIAL ARAMAIC LE" + + "TTER DALETHIMPERIAL ARAMAIC LETTER HEIMPERIAL ARAMAIC LETTER WAWIMPERIAL" + + " ARAMAIC LETTER ZAYINIMPERIAL ARAMAIC LETTER HETHIMPERIAL ARAMAIC LETTER" + + " TETHIMPERIAL ARAMAIC LETTER YODHIMPERIAL ARAMAIC LETTER KAPHIMPERIAL AR" + + "AMAIC LETTER LAMEDHIMPERIAL ARAMAIC LETTER MEMIMPERIAL ARAMAIC LETTER NU" + + "NIMPERIAL ARAMAIC LETTER SAMEKHIMPERIAL ARAMAIC LETTER AYINIMPERIAL ARAM" + + "AIC LETTER PEIMPERIAL ARAMAIC LETTER SADHEIMPERIAL ARAMAIC LETTER QOPHIM" + + "PERIAL ARAMAIC LETTER RESHIMPERIAL ARAMAIC LETTER SHINIMPERIAL ARAMAIC L" + + "ETTER TAWIMPERIAL ARAMAIC SECTION SIGNIMPERIAL ARAMAIC NUMBER ONEIMPERIA" + + "L ARAMAIC NUMBER TWOIMPERIAL ARAMAIC NUMBER THREEIMPERIAL ARAMAIC NUMBER" + + " TENIMPERIAL ARAMAIC NUMBER TWENTYIMPERIAL ARAMAIC NUMBER ONE HUNDREDIMP" + + "ERIAL ARAMAIC NUMBER ONE THOUSANDIMPERIAL ARAMAIC NUMBER TEN THOUSANDPAL" + + "MYRENE LETTER ALEPHPALMYRENE LETTER BETHPALMYRENE LETTER GIMELPALMYRENE " + + "LETTER DALETHPALMYRENE LETTER HEPALMYRENE LETTER WAWPALMYRENE LETTER ZAY" + + "INPALMYRENE LETTER HETHPALMYRENE LETTER TETHPALMYRENE LETTER YODHPALMYRE" + + "NE LETTER KAPHPALMYRENE LETTER LAMEDHPALMYRENE LETTER MEMPALMYRENE LETTE" + + "R FINAL NUNPALMYRENE LETTER NUNPALMYRENE LETTER SAMEKHPALMYRENE LETTER A" + + "YINPALMYRENE LETTER PEPALMYRENE LETTER SADHEPALMYRENE LETTER QOPHPALMYRE" + + "NE LETTER RESHPALMYRENE LETTER SHINPALMYRENE LETTER TAWPALMYRENE LEFT-PO" + + "INTING FLEURONPALMYRENE RIGHT-POINTING FLEURONPALMYRENE NUMBER ONEPALMYR" + + "ENE NUMBER TWOPALMYRENE NUMBER THREEPALMYRENE NUMBER FOURPALMYRENE NUMBE" + + "R FIVEPALMYRENE NUMBER TENPALMYRENE NUMBER TWENTYNABATAEAN LETTER FINAL " + + "ALEPHNABATAEAN LETTER ALEPHNABATAEAN LETTER FINAL BETHNABATAEAN LETTER B" + + "ETHNABATAEAN LETTER GIMELNABATAEAN LETTER DALETHNABATAEAN LETTER FINAL H" + + "ENABATAEAN LETTER HENABATAEAN LETTER WAWNABATAEAN LETTER ZAYINNABATAEAN " + + "LETTER HETHNABATAEAN LETTER TETHNABATAEAN LETTER FINAL YODHNABATAEAN LET" + + "TER YODHNABATAEAN LETTER FINAL KAPHNABATAEAN LETTER KAPHNABATAEAN LETTER" + + " FINAL LAMEDHNABATAEAN LETTER LAMEDHNABATAEAN LETTER FINAL MEMNABATAEAN " + + "LETTER MEMNABATAEAN LETTER FINAL NUNNABATAEAN LETTER NUNNABATAEAN LETTER" + + " SAMEKHNABATAEAN LETTER AYINNABATAEAN LETTER PENABATAEAN LETTER SADHENAB" + + "ATAEAN LETTER QOPHNABATAEAN LETTER RESHNABATAEAN LETTER FINAL SHINNABATA" + + "EAN LETTER SHINNABATAEAN LETTER TAWNABATAEAN NUMBER ONENABATAEAN NUMBER ") + ("" + + "TWONABATAEAN NUMBER THREENABATAEAN NUMBER FOURNABATAEAN CRUCIFORM NUMBER" + + " FOURNABATAEAN NUMBER FIVENABATAEAN NUMBER TENNABATAEAN NUMBER TWENTYNAB" + + "ATAEAN NUMBER ONE HUNDREDHATRAN LETTER ALEPHHATRAN LETTER BETHHATRAN LET" + + "TER GIMELHATRAN LETTER DALETH-RESHHATRAN LETTER HEHATRAN LETTER WAWHATRA" + + "N LETTER ZAYNHATRAN LETTER HETHHATRAN LETTER TETHHATRAN LETTER YODHHATRA" + + "N LETTER KAPHHATRAN LETTER LAMEDHHATRAN LETTER MEMHATRAN LETTER NUNHATRA" + + "N LETTER SAMEKHHATRAN LETTER AYNHATRAN LETTER PEHATRAN LETTER SADHEHATRA" + + "N LETTER QOPHHATRAN LETTER SHINHATRAN LETTER TAWHATRAN NUMBER ONEHATRAN " + + "NUMBER FIVEHATRAN NUMBER TENHATRAN NUMBER TWENTYHATRAN NUMBER ONE HUNDRE" + + "DPHOENICIAN LETTER ALFPHOENICIAN LETTER BETPHOENICIAN LETTER GAMLPHOENIC" + + "IAN LETTER DELTPHOENICIAN LETTER HEPHOENICIAN LETTER WAUPHOENICIAN LETTE" + + "R ZAIPHOENICIAN LETTER HETPHOENICIAN LETTER TETPHOENICIAN LETTER YODPHOE" + + "NICIAN LETTER KAFPHOENICIAN LETTER LAMDPHOENICIAN LETTER MEMPHOENICIAN L" + + "ETTER NUNPHOENICIAN LETTER SEMKPHOENICIAN LETTER AINPHOENICIAN LETTER PE" + + "PHOENICIAN LETTER SADEPHOENICIAN LETTER QOFPHOENICIAN LETTER ROSHPHOENIC" + + "IAN LETTER SHINPHOENICIAN LETTER TAUPHOENICIAN NUMBER ONEPHOENICIAN NUMB" + + "ER TENPHOENICIAN NUMBER TWENTYPHOENICIAN NUMBER ONE HUNDREDPHOENICIAN NU" + + "MBER TWOPHOENICIAN NUMBER THREEPHOENICIAN WORD SEPARATORLYDIAN LETTER AL" + + "YDIAN LETTER BLYDIAN LETTER GLYDIAN LETTER DLYDIAN LETTER ELYDIAN LETTER" + + " VLYDIAN LETTER ILYDIAN LETTER YLYDIAN LETTER KLYDIAN LETTER LLYDIAN LET" + + "TER MLYDIAN LETTER NLYDIAN LETTER OLYDIAN LETTER RLYDIAN LETTER SSLYDIAN" + + " LETTER TLYDIAN LETTER ULYDIAN LETTER FLYDIAN LETTER QLYDIAN LETTER SLYD" + + "IAN LETTER TTLYDIAN LETTER ANLYDIAN LETTER ENLYDIAN LETTER LYLYDIAN LETT" + + "ER NNLYDIAN LETTER CLYDIAN TRIANGULAR MARKMEROITIC HIEROGLYPHIC LETTER A" + + "MEROITIC HIEROGLYPHIC LETTER EMEROITIC HIEROGLYPHIC LETTER IMEROITIC HIE" + + "ROGLYPHIC LETTER OMEROITIC HIEROGLYPHIC LETTER YAMEROITIC HIEROGLYPHIC L" + + "ETTER WAMEROITIC HIEROGLYPHIC LETTER BAMEROITIC HIEROGLYPHIC LETTER BA-2" + + "MEROITIC HIEROGLYPHIC LETTER PAMEROITIC HIEROGLYPHIC LETTER MAMEROITIC H" + + "IEROGLYPHIC LETTER NAMEROITIC HIEROGLYPHIC LETTER NA-2MEROITIC HIEROGLYP" + + "HIC LETTER NEMEROITIC HIEROGLYPHIC LETTER NE-2MEROITIC HIEROGLYPHIC LETT" + + "ER RAMEROITIC HIEROGLYPHIC LETTER RA-2MEROITIC HIEROGLYPHIC LETTER LAMER" + + "OITIC HIEROGLYPHIC LETTER KHAMEROITIC HIEROGLYPHIC LETTER HHAMEROITIC HI" + + "EROGLYPHIC LETTER SAMEROITIC HIEROGLYPHIC LETTER SA-2MEROITIC HIEROGLYPH" + + "IC LETTER SEMEROITIC HIEROGLYPHIC LETTER KAMEROITIC HIEROGLYPHIC LETTER " + + "QAMEROITIC HIEROGLYPHIC LETTER TAMEROITIC HIEROGLYPHIC LETTER TA-2MEROIT" + + "IC HIEROGLYPHIC LETTER TEMEROITIC HIEROGLYPHIC LETTER TE-2MEROITIC HIERO" + + "GLYPHIC LETTER TOMEROITIC HIEROGLYPHIC LETTER DAMEROITIC HIEROGLYPHIC SY" + + "MBOL VIDJMEROITIC HIEROGLYPHIC SYMBOL VIDJ-2MEROITIC CURSIVE LETTER AMER" + + "OITIC CURSIVE LETTER EMEROITIC CURSIVE LETTER IMEROITIC CURSIVE LETTER O" + + "MEROITIC CURSIVE LETTER YAMEROITIC CURSIVE LETTER WAMEROITIC CURSIVE LET" + + "TER BAMEROITIC CURSIVE LETTER PAMEROITIC CURSIVE LETTER MAMEROITIC CURSI" + + "VE LETTER NAMEROITIC CURSIVE LETTER NEMEROITIC CURSIVE LETTER RAMEROITIC" + + " CURSIVE LETTER LAMEROITIC CURSIVE LETTER KHAMEROITIC CURSIVE LETTER HHA" + + "MEROITIC CURSIVE LETTER SAMEROITIC CURSIVE LETTER ARCHAIC SAMEROITIC CUR" + + "SIVE LETTER SEMEROITIC CURSIVE LETTER KAMEROITIC CURSIVE LETTER QAMEROIT" + + "IC CURSIVE LETTER TAMEROITIC CURSIVE LETTER TEMEROITIC CURSIVE LETTER TO" + + "MEROITIC CURSIVE LETTER DAMEROITIC CURSIVE FRACTION ELEVEN TWELFTHSMEROI" + + "TIC CURSIVE FRACTION ONE HALFMEROITIC CURSIVE LOGOGRAM RMTMEROITIC CURSI" + + "VE LOGOGRAM IMNMEROITIC CURSIVE NUMBER ONEMEROITIC CURSIVE NUMBER TWOMER" + + "OITIC CURSIVE NUMBER THREEMEROITIC CURSIVE NUMBER FOURMEROITIC CURSIVE N" + + "UMBER FIVEMEROITIC CURSIVE NUMBER SIXMEROITIC CURSIVE NUMBER SEVENMEROIT" + + "IC CURSIVE NUMBER EIGHTMEROITIC CURSIVE NUMBER NINEMEROITIC CURSIVE NUMB" + + "ER TENMEROITIC CURSIVE NUMBER TWENTYMEROITIC CURSIVE NUMBER THIRTYMEROIT" + + "IC CURSIVE NUMBER FORTYMEROITIC CURSIVE NUMBER FIFTYMEROITIC CURSIVE NUM" + + "BER SIXTYMEROITIC CURSIVE NUMBER SEVENTYMEROITIC CURSIVE NUMBER ONE HUND" + + "REDMEROITIC CURSIVE NUMBER TWO HUNDREDMEROITIC CURSIVE NUMBER THREE HUND" + + "REDMEROITIC CURSIVE NUMBER FOUR HUNDREDMEROITIC CURSIVE NUMBER FIVE HUND" + + "REDMEROITIC CURSIVE NUMBER SIX HUNDREDMEROITIC CURSIVE NUMBER SEVEN HUND" + + "REDMEROITIC CURSIVE NUMBER EIGHT HUNDREDMEROITIC CURSIVE NUMBER NINE HUN" + + "DREDMEROITIC CURSIVE NUMBER ONE THOUSANDMEROITIC CURSIVE NUMBER TWO THOU" + + "SANDMEROITIC CURSIVE NUMBER THREE THOUSANDMEROITIC CURSIVE NUMBER FOUR T" + + "HOUSANDMEROITIC CURSIVE NUMBER FIVE THOUSANDMEROITIC CURSIVE NUMBER SIX " + + "THOUSANDMEROITIC CURSIVE NUMBER SEVEN THOUSANDMEROITIC CURSIVE NUMBER EI" + + "GHT THOUSANDMEROITIC CURSIVE NUMBER NINE THOUSANDMEROITIC CURSIVE NUMBER") + ("" + + " TEN THOUSANDMEROITIC CURSIVE NUMBER TWENTY THOUSANDMEROITIC CURSIVE NUM" + + "BER THIRTY THOUSANDMEROITIC CURSIVE NUMBER FORTY THOUSANDMEROITIC CURSIV" + + "E NUMBER FIFTY THOUSANDMEROITIC CURSIVE NUMBER SIXTY THOUSANDMEROITIC CU" + + "RSIVE NUMBER SEVENTY THOUSANDMEROITIC CURSIVE NUMBER EIGHTY THOUSANDMERO" + + "ITIC CURSIVE NUMBER NINETY THOUSANDMEROITIC CURSIVE NUMBER ONE HUNDRED T" + + "HOUSANDMEROITIC CURSIVE NUMBER TWO HUNDRED THOUSANDMEROITIC CURSIVE NUMB" + + "ER THREE HUNDRED THOUSANDMEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSANDME" + + "ROITIC CURSIVE NUMBER FIVE HUNDRED THOUSANDMEROITIC CURSIVE NUMBER SIX H" + + "UNDRED THOUSANDMEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSANDMEROITIC CU" + + "RSIVE NUMBER EIGHT HUNDRED THOUSANDMEROITIC CURSIVE NUMBER NINE HUNDRED " + + "THOUSANDMEROITIC CURSIVE FRACTION ONE TWELFTHMEROITIC CURSIVE FRACTION T" + + "WO TWELFTHSMEROITIC CURSIVE FRACTION THREE TWELFTHSMEROITIC CURSIVE FRAC" + + "TION FOUR TWELFTHSMEROITIC CURSIVE FRACTION FIVE TWELFTHSMEROITIC CURSIV" + + "E FRACTION SIX TWELFTHSMEROITIC CURSIVE FRACTION SEVEN TWELFTHSMEROITIC " + + "CURSIVE FRACTION EIGHT TWELFTHSMEROITIC CURSIVE FRACTION NINE TWELFTHSME" + + "ROITIC CURSIVE FRACTION TEN TWELFTHSKHAROSHTHI LETTER AKHAROSHTHI VOWEL " + + "SIGN IKHAROSHTHI VOWEL SIGN UKHAROSHTHI VOWEL SIGN VOCALIC RKHAROSHTHI V" + + "OWEL SIGN EKHAROSHTHI VOWEL SIGN OKHAROSHTHI VOWEL LENGTH MARKKHAROSHTHI" + + " SIGN DOUBLE RING BELOWKHAROSHTHI SIGN ANUSVARAKHAROSHTHI SIGN VISARGAKH" + + "AROSHTHI LETTER KAKHAROSHTHI LETTER KHAKHAROSHTHI LETTER GAKHAROSHTHI LE" + + "TTER GHAKHAROSHTHI LETTER CAKHAROSHTHI LETTER CHAKHAROSHTHI LETTER JAKHA" + + "ROSHTHI LETTER NYAKHAROSHTHI LETTER TTAKHAROSHTHI LETTER TTHAKHAROSHTHI " + + "LETTER DDAKHAROSHTHI LETTER DDHAKHAROSHTHI LETTER NNAKHAROSHTHI LETTER T" + + "AKHAROSHTHI LETTER THAKHAROSHTHI LETTER DAKHAROSHTHI LETTER DHAKHAROSHTH" + + "I LETTER NAKHAROSHTHI LETTER PAKHAROSHTHI LETTER PHAKHAROSHTHI LETTER BA" + + "KHAROSHTHI LETTER BHAKHAROSHTHI LETTER MAKHAROSHTHI LETTER YAKHAROSHTHI " + + "LETTER RAKHAROSHTHI LETTER LAKHAROSHTHI LETTER VAKHAROSHTHI LETTER SHAKH" + + "AROSHTHI LETTER SSAKHAROSHTHI LETTER SAKHAROSHTHI LETTER ZAKHAROSHTHI LE" + + "TTER HAKHAROSHTHI LETTER KKAKHAROSHTHI LETTER TTTHAKHAROSHTHI SIGN BAR A" + + "BOVEKHAROSHTHI SIGN CAUDAKHAROSHTHI SIGN DOT BELOWKHAROSHTHI VIRAMAKHARO" + + "SHTHI DIGIT ONEKHAROSHTHI DIGIT TWOKHAROSHTHI DIGIT THREEKHAROSHTHI DIGI" + + "T FOURKHAROSHTHI NUMBER TENKHAROSHTHI NUMBER TWENTYKHAROSHTHI NUMBER ONE" + + " HUNDREDKHAROSHTHI NUMBER ONE THOUSANDKHAROSHTHI PUNCTUATION DOTKHAROSHT" + + "HI PUNCTUATION SMALL CIRCLEKHAROSHTHI PUNCTUATION CIRCLEKHAROSHTHI PUNCT" + + "UATION CRESCENT BARKHAROSHTHI PUNCTUATION MANGALAMKHAROSHTHI PUNCTUATION" + + " LOTUSKHAROSHTHI PUNCTUATION DANDAKHAROSHTHI PUNCTUATION DOUBLE DANDAKHA" + + "ROSHTHI PUNCTUATION LINESOLD SOUTH ARABIAN LETTER HEOLD SOUTH ARABIAN LE" + + "TTER LAMEDHOLD SOUTH ARABIAN LETTER HETHOLD SOUTH ARABIAN LETTER MEMOLD " + + "SOUTH ARABIAN LETTER QOPHOLD SOUTH ARABIAN LETTER WAWOLD SOUTH ARABIAN L" + + "ETTER SHINOLD SOUTH ARABIAN LETTER RESHOLD SOUTH ARABIAN LETTER BETHOLD " + + "SOUTH ARABIAN LETTER TAWOLD SOUTH ARABIAN LETTER SATOLD SOUTH ARABIAN LE" + + "TTER KAPHOLD SOUTH ARABIAN LETTER NUNOLD SOUTH ARABIAN LETTER KHETHOLD S" + + "OUTH ARABIAN LETTER SADHEOLD SOUTH ARABIAN LETTER SAMEKHOLD SOUTH ARABIA" + + "N LETTER FEOLD SOUTH ARABIAN LETTER ALEFOLD SOUTH ARABIAN LETTER AYNOLD " + + "SOUTH ARABIAN LETTER DHADHEOLD SOUTH ARABIAN LETTER GIMELOLD SOUTH ARABI" + + "AN LETTER DALETHOLD SOUTH ARABIAN LETTER GHAYNOLD SOUTH ARABIAN LETTER T" + + "ETHOLD SOUTH ARABIAN LETTER ZAYNOLD SOUTH ARABIAN LETTER DHALETHOLD SOUT" + + "H ARABIAN LETTER YODHOLD SOUTH ARABIAN LETTER THAWOLD SOUTH ARABIAN LETT" + + "ER THETHOLD SOUTH ARABIAN NUMBER ONEOLD SOUTH ARABIAN NUMBER FIFTYOLD SO" + + "UTH ARABIAN NUMERIC INDICATOROLD NORTH ARABIAN LETTER HEHOLD NORTH ARABI" + + "AN LETTER LAMOLD NORTH ARABIAN LETTER HAHOLD NORTH ARABIAN LETTER MEEMOL" + + "D NORTH ARABIAN LETTER QAFOLD NORTH ARABIAN LETTER WAWOLD NORTH ARABIAN " + + "LETTER ES-2OLD NORTH ARABIAN LETTER REHOLD NORTH ARABIAN LETTER BEHOLD N" + + "ORTH ARABIAN LETTER TEHOLD NORTH ARABIAN LETTER ES-1OLD NORTH ARABIAN LE" + + "TTER KAFOLD NORTH ARABIAN LETTER NOONOLD NORTH ARABIAN LETTER KHAHOLD NO" + + "RTH ARABIAN LETTER SADOLD NORTH ARABIAN LETTER ES-3OLD NORTH ARABIAN LET" + + "TER FEHOLD NORTH ARABIAN LETTER ALEFOLD NORTH ARABIAN LETTER AINOLD NORT" + + "H ARABIAN LETTER DADOLD NORTH ARABIAN LETTER GEEMOLD NORTH ARABIAN LETTE" + + "R DALOLD NORTH ARABIAN LETTER GHAINOLD NORTH ARABIAN LETTER TAHOLD NORTH" + + " ARABIAN LETTER ZAINOLD NORTH ARABIAN LETTER THALOLD NORTH ARABIAN LETTE" + + "R YEHOLD NORTH ARABIAN LETTER THEHOLD NORTH ARABIAN LETTER ZAHOLD NORTH " + + "ARABIAN NUMBER ONEOLD NORTH ARABIAN NUMBER TENOLD NORTH ARABIAN NUMBER T" + + "WENTYMANICHAEAN LETTER ALEPHMANICHAEAN LETTER BETHMANICHAEAN LETTER BHET" + + "HMANICHAEAN LETTER GIMELMANICHAEAN LETTER GHIMELMANICHAEAN LETTER DALETH") + ("" + + "MANICHAEAN LETTER HEMANICHAEAN LETTER WAWMANICHAEAN SIGN UDMANICHAEAN LE" + + "TTER ZAYINMANICHAEAN LETTER ZHAYINMANICHAEAN LETTER JAYINMANICHAEAN LETT" + + "ER JHAYINMANICHAEAN LETTER HETHMANICHAEAN LETTER TETHMANICHAEAN LETTER Y" + + "ODHMANICHAEAN LETTER KAPHMANICHAEAN LETTER XAPHMANICHAEAN LETTER KHAPHMA" + + "NICHAEAN LETTER LAMEDHMANICHAEAN LETTER DHAMEDHMANICHAEAN LETTER THAMEDH" + + "MANICHAEAN LETTER MEMMANICHAEAN LETTER NUNMANICHAEAN LETTER SAMEKHMANICH" + + "AEAN LETTER AYINMANICHAEAN LETTER AAYINMANICHAEAN LETTER PEMANICHAEAN LE" + + "TTER FEMANICHAEAN LETTER SADHEMANICHAEAN LETTER QOPHMANICHAEAN LETTER XO" + + "PHMANICHAEAN LETTER QHOPHMANICHAEAN LETTER RESHMANICHAEAN LETTER SHINMAN" + + "ICHAEAN LETTER SSHINMANICHAEAN LETTER TAWMANICHAEAN ABBREVIATION MARK AB" + + "OVEMANICHAEAN ABBREVIATION MARK BELOWMANICHAEAN NUMBER ONEMANICHAEAN NUM" + + "BER FIVEMANICHAEAN NUMBER TENMANICHAEAN NUMBER TWENTYMANICHAEAN NUMBER O" + + "NE HUNDREDMANICHAEAN PUNCTUATION STARMANICHAEAN PUNCTUATION FLEURONMANIC" + + "HAEAN PUNCTUATION DOUBLE DOT WITHIN DOTMANICHAEAN PUNCTUATION DOT WITHIN" + + " DOTMANICHAEAN PUNCTUATION DOTMANICHAEAN PUNCTUATION TWO DOTSMANICHAEAN " + + "PUNCTUATION LINE FILLERAVESTAN LETTER AAVESTAN LETTER AAAVESTAN LETTER A" + + "OAVESTAN LETTER AAOAVESTAN LETTER ANAVESTAN LETTER AANAVESTAN LETTER AEA" + + "VESTAN LETTER AEEAVESTAN LETTER EAVESTAN LETTER EEAVESTAN LETTER OAVESTA" + + "N LETTER OOAVESTAN LETTER IAVESTAN LETTER IIAVESTAN LETTER UAVESTAN LETT" + + "ER UUAVESTAN LETTER KEAVESTAN LETTER XEAVESTAN LETTER XYEAVESTAN LETTER " + + "XVEAVESTAN LETTER GEAVESTAN LETTER GGEAVESTAN LETTER GHEAVESTAN LETTER C" + + "EAVESTAN LETTER JEAVESTAN LETTER TEAVESTAN LETTER THEAVESTAN LETTER DEAV" + + "ESTAN LETTER DHEAVESTAN LETTER TTEAVESTAN LETTER PEAVESTAN LETTER FEAVES" + + "TAN LETTER BEAVESTAN LETTER BHEAVESTAN LETTER NGEAVESTAN LETTER NGYEAVES" + + "TAN LETTER NGVEAVESTAN LETTER NEAVESTAN LETTER NYEAVESTAN LETTER NNEAVES" + + "TAN LETTER MEAVESTAN LETTER HMEAVESTAN LETTER YYEAVESTAN LETTER YEAVESTA" + + "N LETTER VEAVESTAN LETTER REAVESTAN LETTER LEAVESTAN LETTER SEAVESTAN LE" + + "TTER ZEAVESTAN LETTER SHEAVESTAN LETTER ZHEAVESTAN LETTER SHYEAVESTAN LE" + + "TTER SSHEAVESTAN LETTER HEAVESTAN ABBREVIATION MARKTINY TWO DOTS OVER ON" + + "E DOT PUNCTUATIONSMALL TWO DOTS OVER ONE DOT PUNCTUATIONLARGE TWO DOTS O" + + "VER ONE DOT PUNCTUATIONLARGE ONE DOT OVER TWO DOTS PUNCTUATIONLARGE TWO " + + "RINGS OVER ONE RING PUNCTUATIONLARGE ONE RING OVER TWO RINGS PUNCTUATION" + + "INSCRIPTIONAL PARTHIAN LETTER ALEPHINSCRIPTIONAL PARTHIAN LETTER BETHINS" + + "CRIPTIONAL PARTHIAN LETTER GIMELINSCRIPTIONAL PARTHIAN LETTER DALETHINSC" + + "RIPTIONAL PARTHIAN LETTER HEINSCRIPTIONAL PARTHIAN LETTER WAWINSCRIPTION" + + "AL PARTHIAN LETTER ZAYININSCRIPTIONAL PARTHIAN LETTER HETHINSCRIPTIONAL " + + "PARTHIAN LETTER TETHINSCRIPTIONAL PARTHIAN LETTER YODHINSCRIPTIONAL PART" + + "HIAN LETTER KAPHINSCRIPTIONAL PARTHIAN LETTER LAMEDHINSCRIPTIONAL PARTHI" + + "AN LETTER MEMINSCRIPTIONAL PARTHIAN LETTER NUNINSCRIPTIONAL PARTHIAN LET" + + "TER SAMEKHINSCRIPTIONAL PARTHIAN LETTER AYININSCRIPTIONAL PARTHIAN LETTE" + + "R PEINSCRIPTIONAL PARTHIAN LETTER SADHEINSCRIPTIONAL PARTHIAN LETTER QOP" + + "HINSCRIPTIONAL PARTHIAN LETTER RESHINSCRIPTIONAL PARTHIAN LETTER SHININS" + + "CRIPTIONAL PARTHIAN LETTER TAWINSCRIPTIONAL PARTHIAN NUMBER ONEINSCRIPTI" + + "ONAL PARTHIAN NUMBER TWOINSCRIPTIONAL PARTHIAN NUMBER THREEINSCRIPTIONAL" + + " PARTHIAN NUMBER FOURINSCRIPTIONAL PARTHIAN NUMBER TENINSCRIPTIONAL PART" + + "HIAN NUMBER TWENTYINSCRIPTIONAL PARTHIAN NUMBER ONE HUNDREDINSCRIPTIONAL" + + " PARTHIAN NUMBER ONE THOUSANDINSCRIPTIONAL PAHLAVI LETTER ALEPHINSCRIPTI" + + "ONAL PAHLAVI LETTER BETHINSCRIPTIONAL PAHLAVI LETTER GIMELINSCRIPTIONAL " + + "PAHLAVI LETTER DALETHINSCRIPTIONAL PAHLAVI LETTER HEINSCRIPTIONAL PAHLAV" + + "I LETTER WAW-AYIN-RESHINSCRIPTIONAL PAHLAVI LETTER ZAYININSCRIPTIONAL PA" + + "HLAVI LETTER HETHINSCRIPTIONAL PAHLAVI LETTER TETHINSCRIPTIONAL PAHLAVI " + + "LETTER YODHINSCRIPTIONAL PAHLAVI LETTER KAPHINSCRIPTIONAL PAHLAVI LETTER" + + " LAMEDHINSCRIPTIONAL PAHLAVI LETTER MEM-QOPHINSCRIPTIONAL PAHLAVI LETTER" + + " NUNINSCRIPTIONAL PAHLAVI LETTER SAMEKHINSCRIPTIONAL PAHLAVI LETTER PEIN" + + "SCRIPTIONAL PAHLAVI LETTER SADHEINSCRIPTIONAL PAHLAVI LETTER SHININSCRIP" + + "TIONAL PAHLAVI LETTER TAWINSCRIPTIONAL PAHLAVI NUMBER ONEINSCRIPTIONAL P" + + "AHLAVI NUMBER TWOINSCRIPTIONAL PAHLAVI NUMBER THREEINSCRIPTIONAL PAHLAVI" + + " NUMBER FOURINSCRIPTIONAL PAHLAVI NUMBER TENINSCRIPTIONAL PAHLAVI NUMBER" + + " TWENTYINSCRIPTIONAL PAHLAVI NUMBER ONE HUNDREDINSCRIPTIONAL PAHLAVI NUM" + + "BER ONE THOUSANDPSALTER PAHLAVI LETTER ALEPHPSALTER PAHLAVI LETTER BETHP" + + "SALTER PAHLAVI LETTER GIMELPSALTER PAHLAVI LETTER DALETHPSALTER PAHLAVI " + + "LETTER HEPSALTER PAHLAVI LETTER WAW-AYIN-RESHPSALTER PAHLAVI LETTER ZAYI" + + "NPSALTER PAHLAVI LETTER HETHPSALTER PAHLAVI LETTER YODHPSALTER PAHLAVI L" + + "ETTER KAPHPSALTER PAHLAVI LETTER LAMEDHPSALTER PAHLAVI LETTER MEM-QOPHPS") + ("" + + "ALTER PAHLAVI LETTER NUNPSALTER PAHLAVI LETTER SAMEKHPSALTER PAHLAVI LET" + + "TER PEPSALTER PAHLAVI LETTER SADHEPSALTER PAHLAVI LETTER SHINPSALTER PAH" + + "LAVI LETTER TAWPSALTER PAHLAVI SECTION MARKPSALTER PAHLAVI TURNED SECTIO" + + "N MARKPSALTER PAHLAVI FOUR DOTS WITH CROSSPSALTER PAHLAVI FOUR DOTS WITH" + + " DOTPSALTER PAHLAVI NUMBER ONEPSALTER PAHLAVI NUMBER TWOPSALTER PAHLAVI " + + "NUMBER THREEPSALTER PAHLAVI NUMBER FOURPSALTER PAHLAVI NUMBER TENPSALTER" + + " PAHLAVI NUMBER TWENTYPSALTER PAHLAVI NUMBER ONE HUNDREDOLD TURKIC LETTE" + + "R ORKHON AOLD TURKIC LETTER YENISEI AOLD TURKIC LETTER YENISEI AEOLD TUR" + + "KIC LETTER ORKHON IOLD TURKIC LETTER YENISEI IOLD TURKIC LETTER YENISEI " + + "EOLD TURKIC LETTER ORKHON OOLD TURKIC LETTER ORKHON OEOLD TURKIC LETTER " + + "YENISEI OEOLD TURKIC LETTER ORKHON ABOLD TURKIC LETTER YENISEI ABOLD TUR" + + "KIC LETTER ORKHON AEBOLD TURKIC LETTER YENISEI AEBOLD TURKIC LETTER ORKH" + + "ON AGOLD TURKIC LETTER YENISEI AGOLD TURKIC LETTER ORKHON AEGOLD TURKIC " + + "LETTER YENISEI AEGOLD TURKIC LETTER ORKHON ADOLD TURKIC LETTER YENISEI A" + + "DOLD TURKIC LETTER ORKHON AEDOLD TURKIC LETTER ORKHON EZOLD TURKIC LETTE" + + "R YENISEI EZOLD TURKIC LETTER ORKHON AYOLD TURKIC LETTER YENISEI AYOLD T" + + "URKIC LETTER ORKHON AEYOLD TURKIC LETTER YENISEI AEYOLD TURKIC LETTER OR" + + "KHON AEKOLD TURKIC LETTER YENISEI AEKOLD TURKIC LETTER ORKHON OEKOLD TUR" + + "KIC LETTER YENISEI OEKOLD TURKIC LETTER ORKHON ALOLD TURKIC LETTER YENIS" + + "EI ALOLD TURKIC LETTER ORKHON AELOLD TURKIC LETTER ORKHON ELTOLD TURKIC " + + "LETTER ORKHON EMOLD TURKIC LETTER ORKHON ANOLD TURKIC LETTER ORKHON AENO" + + "LD TURKIC LETTER YENISEI AENOLD TURKIC LETTER ORKHON ENTOLD TURKIC LETTE" + + "R YENISEI ENTOLD TURKIC LETTER ORKHON ENCOLD TURKIC LETTER YENISEI ENCOL" + + "D TURKIC LETTER ORKHON ENYOLD TURKIC LETTER YENISEI ENYOLD TURKIC LETTER" + + " YENISEI ANGOLD TURKIC LETTER ORKHON ENGOLD TURKIC LETTER YENISEI AENGOL" + + "D TURKIC LETTER ORKHON EPOLD TURKIC LETTER ORKHON OPOLD TURKIC LETTER OR" + + "KHON ICOLD TURKIC LETTER ORKHON ECOLD TURKIC LETTER YENISEI ECOLD TURKIC" + + " LETTER ORKHON AQOLD TURKIC LETTER YENISEI AQOLD TURKIC LETTER ORKHON IQ" + + "OLD TURKIC LETTER YENISEI IQOLD TURKIC LETTER ORKHON OQOLD TURKIC LETTER" + + " YENISEI OQOLD TURKIC LETTER ORKHON AROLD TURKIC LETTER YENISEI AROLD TU" + + "RKIC LETTER ORKHON AEROLD TURKIC LETTER ORKHON ASOLD TURKIC LETTER ORKHO" + + "N AESOLD TURKIC LETTER ORKHON ASHOLD TURKIC LETTER YENISEI ASHOLD TURKIC" + + " LETTER ORKHON ESHOLD TURKIC LETTER YENISEI ESHOLD TURKIC LETTER ORKHON " + + "ATOLD TURKIC LETTER YENISEI ATOLD TURKIC LETTER ORKHON AETOLD TURKIC LET" + + "TER YENISEI AETOLD TURKIC LETTER ORKHON OTOLD TURKIC LETTER ORKHON BASHO" + + "LD HUNGARIAN CAPITAL LETTER AOLD HUNGARIAN CAPITAL LETTER AAOLD HUNGARIA" + + "N CAPITAL LETTER EBOLD HUNGARIAN CAPITAL LETTER AMBOLD HUNGARIAN CAPITAL" + + " LETTER ECOLD HUNGARIAN CAPITAL LETTER ENCOLD HUNGARIAN CAPITAL LETTER E" + + "CSOLD HUNGARIAN CAPITAL LETTER EDOLD HUNGARIAN CAPITAL LETTER ANDOLD HUN" + + "GARIAN CAPITAL LETTER EOLD HUNGARIAN CAPITAL LETTER CLOSE EOLD HUNGARIAN" + + " CAPITAL LETTER EEOLD HUNGARIAN CAPITAL LETTER EFOLD HUNGARIAN CAPITAL L" + + "ETTER EGOLD HUNGARIAN CAPITAL LETTER EGYOLD HUNGARIAN CAPITAL LETTER EHO" + + "LD HUNGARIAN CAPITAL LETTER IOLD HUNGARIAN CAPITAL LETTER IIOLD HUNGARIA" + + "N CAPITAL LETTER EJOLD HUNGARIAN CAPITAL LETTER EKOLD HUNGARIAN CAPITAL " + + "LETTER AKOLD HUNGARIAN CAPITAL LETTER UNKOLD HUNGARIAN CAPITAL LETTER EL" + + "OLD HUNGARIAN CAPITAL LETTER ELYOLD HUNGARIAN CAPITAL LETTER EMOLD HUNGA" + + "RIAN CAPITAL LETTER ENOLD HUNGARIAN CAPITAL LETTER ENYOLD HUNGARIAN CAPI" + + "TAL LETTER OOLD HUNGARIAN CAPITAL LETTER OOOLD HUNGARIAN CAPITAL LETTER " + + "NIKOLSBURG OEOLD HUNGARIAN CAPITAL LETTER RUDIMENTA OEOLD HUNGARIAN CAPI" + + "TAL LETTER OEEOLD HUNGARIAN CAPITAL LETTER EPOLD HUNGARIAN CAPITAL LETTE" + + "R EMPOLD HUNGARIAN CAPITAL LETTER EROLD HUNGARIAN CAPITAL LETTER SHORT E" + + "ROLD HUNGARIAN CAPITAL LETTER ESOLD HUNGARIAN CAPITAL LETTER ESZOLD HUNG" + + "ARIAN CAPITAL LETTER ETOLD HUNGARIAN CAPITAL LETTER ENTOLD HUNGARIAN CAP" + + "ITAL LETTER ETYOLD HUNGARIAN CAPITAL LETTER ECHOLD HUNGARIAN CAPITAL LET" + + "TER UOLD HUNGARIAN CAPITAL LETTER UUOLD HUNGARIAN CAPITAL LETTER NIKOLSB" + + "URG UEOLD HUNGARIAN CAPITAL LETTER RUDIMENTA UEOLD HUNGARIAN CAPITAL LET" + + "TER EVOLD HUNGARIAN CAPITAL LETTER EZOLD HUNGARIAN CAPITAL LETTER EZSOLD" + + " HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGNOLD HUNGARIAN CAPITAL LETTER US" + + "OLD HUNGARIAN SMALL LETTER AOLD HUNGARIAN SMALL LETTER AAOLD HUNGARIAN S" + + "MALL LETTER EBOLD HUNGARIAN SMALL LETTER AMBOLD HUNGARIAN SMALL LETTER E" + + "COLD HUNGARIAN SMALL LETTER ENCOLD HUNGARIAN SMALL LETTER ECSOLD HUNGARI" + + "AN SMALL LETTER EDOLD HUNGARIAN SMALL LETTER ANDOLD HUNGARIAN SMALL LETT" + + "ER EOLD HUNGARIAN SMALL LETTER CLOSE EOLD HUNGARIAN SMALL LETTER EEOLD H" + + "UNGARIAN SMALL LETTER EFOLD HUNGARIAN SMALL LETTER EGOLD HUNGARIAN SMALL") + ("" + + " LETTER EGYOLD HUNGARIAN SMALL LETTER EHOLD HUNGARIAN SMALL LETTER IOLD " + + "HUNGARIAN SMALL LETTER IIOLD HUNGARIAN SMALL LETTER EJOLD HUNGARIAN SMAL" + + "L LETTER EKOLD HUNGARIAN SMALL LETTER AKOLD HUNGARIAN SMALL LETTER UNKOL" + + "D HUNGARIAN SMALL LETTER ELOLD HUNGARIAN SMALL LETTER ELYOLD HUNGARIAN S" + + "MALL LETTER EMOLD HUNGARIAN SMALL LETTER ENOLD HUNGARIAN SMALL LETTER EN" + + "YOLD HUNGARIAN SMALL LETTER OOLD HUNGARIAN SMALL LETTER OOOLD HUNGARIAN " + + "SMALL LETTER NIKOLSBURG OEOLD HUNGARIAN SMALL LETTER RUDIMENTA OEOLD HUN" + + "GARIAN SMALL LETTER OEEOLD HUNGARIAN SMALL LETTER EPOLD HUNGARIAN SMALL " + + "LETTER EMPOLD HUNGARIAN SMALL LETTER EROLD HUNGARIAN SMALL LETTER SHORT " + + "EROLD HUNGARIAN SMALL LETTER ESOLD HUNGARIAN SMALL LETTER ESZOLD HUNGARI" + + "AN SMALL LETTER ETOLD HUNGARIAN SMALL LETTER ENTOLD HUNGARIAN SMALL LETT" + + "ER ETYOLD HUNGARIAN SMALL LETTER ECHOLD HUNGARIAN SMALL LETTER UOLD HUNG" + + "ARIAN SMALL LETTER UUOLD HUNGARIAN SMALL LETTER NIKOLSBURG UEOLD HUNGARI" + + "AN SMALL LETTER RUDIMENTA UEOLD HUNGARIAN SMALL LETTER EVOLD HUNGARIAN S" + + "MALL LETTER EZOLD HUNGARIAN SMALL LETTER EZSOLD HUNGARIAN SMALL LETTER E" + + "NT-SHAPED SIGNOLD HUNGARIAN SMALL LETTER USOLD HUNGARIAN NUMBER ONEOLD H" + + "UNGARIAN NUMBER FIVEOLD HUNGARIAN NUMBER TENOLD HUNGARIAN NUMBER FIFTYOL" + + "D HUNGARIAN NUMBER ONE HUNDREDOLD HUNGARIAN NUMBER ONE THOUSANDRUMI DIGI" + + "T ONERUMI DIGIT TWORUMI DIGIT THREERUMI DIGIT FOURRUMI DIGIT FIVERUMI DI" + + "GIT SIXRUMI DIGIT SEVENRUMI DIGIT EIGHTRUMI DIGIT NINERUMI NUMBER TENRUM" + + "I NUMBER TWENTYRUMI NUMBER THIRTYRUMI NUMBER FORTYRUMI NUMBER FIFTYRUMI " + + "NUMBER SIXTYRUMI NUMBER SEVENTYRUMI NUMBER EIGHTYRUMI NUMBER NINETYRUMI " + + "NUMBER ONE HUNDREDRUMI NUMBER TWO HUNDREDRUMI NUMBER THREE HUNDREDRUMI N" + + "UMBER FOUR HUNDREDRUMI NUMBER FIVE HUNDREDRUMI NUMBER SIX HUNDREDRUMI NU" + + "MBER SEVEN HUNDREDRUMI NUMBER EIGHT HUNDREDRUMI NUMBER NINE HUNDREDRUMI " + + "FRACTION ONE HALFRUMI FRACTION ONE QUARTERRUMI FRACTION ONE THIRDRUMI FR" + + "ACTION TWO THIRDSBRAHMI SIGN CANDRABINDUBRAHMI SIGN ANUSVARABRAHMI SIGN " + + "VISARGABRAHMI SIGN JIHVAMULIYABRAHMI SIGN UPADHMANIYABRAHMI LETTER ABRAH" + + "MI LETTER AABRAHMI LETTER IBRAHMI LETTER IIBRAHMI LETTER UBRAHMI LETTER " + + "UUBRAHMI LETTER VOCALIC RBRAHMI LETTER VOCALIC RRBRAHMI LETTER VOCALIC L" + + "BRAHMI LETTER VOCALIC LLBRAHMI LETTER EBRAHMI LETTER AIBRAHMI LETTER OBR" + + "AHMI LETTER AUBRAHMI LETTER KABRAHMI LETTER KHABRAHMI LETTER GABRAHMI LE" + + "TTER GHABRAHMI LETTER NGABRAHMI LETTER CABRAHMI LETTER CHABRAHMI LETTER " + + "JABRAHMI LETTER JHABRAHMI LETTER NYABRAHMI LETTER TTABRAHMI LETTER TTHAB" + + "RAHMI LETTER DDABRAHMI LETTER DDHABRAHMI LETTER NNABRAHMI LETTER TABRAHM" + + "I LETTER THABRAHMI LETTER DABRAHMI LETTER DHABRAHMI LETTER NABRAHMI LETT" + + "ER PABRAHMI LETTER PHABRAHMI LETTER BABRAHMI LETTER BHABRAHMI LETTER MAB" + + "RAHMI LETTER YABRAHMI LETTER RABRAHMI LETTER LABRAHMI LETTER VABRAHMI LE" + + "TTER SHABRAHMI LETTER SSABRAHMI LETTER SABRAHMI LETTER HABRAHMI LETTER L" + + "LABRAHMI LETTER OLD TAMIL LLLABRAHMI LETTER OLD TAMIL RRABRAHMI LETTER O" + + "LD TAMIL NNNABRAHMI VOWEL SIGN AABRAHMI VOWEL SIGN BHATTIPROLU AABRAHMI " + + "VOWEL SIGN IBRAHMI VOWEL SIGN IIBRAHMI VOWEL SIGN UBRAHMI VOWEL SIGN UUB" + + "RAHMI VOWEL SIGN VOCALIC RBRAHMI VOWEL SIGN VOCALIC RRBRAHMI VOWEL SIGN " + + "VOCALIC LBRAHMI VOWEL SIGN VOCALIC LLBRAHMI VOWEL SIGN EBRAHMI VOWEL SIG" + + "N AIBRAHMI VOWEL SIGN OBRAHMI VOWEL SIGN AUBRAHMI VIRAMABRAHMI DANDABRAH" + + "MI DOUBLE DANDABRAHMI PUNCTUATION DOTBRAHMI PUNCTUATION DOUBLE DOTBRAHMI" + + " PUNCTUATION LINEBRAHMI PUNCTUATION CRESCENT BARBRAHMI PUNCTUATION LOTUS" + + "BRAHMI NUMBER ONEBRAHMI NUMBER TWOBRAHMI NUMBER THREEBRAHMI NUMBER FOURB" + + "RAHMI NUMBER FIVEBRAHMI NUMBER SIXBRAHMI NUMBER SEVENBRAHMI NUMBER EIGHT" + + "BRAHMI NUMBER NINEBRAHMI NUMBER TENBRAHMI NUMBER TWENTYBRAHMI NUMBER THI" + + "RTYBRAHMI NUMBER FORTYBRAHMI NUMBER FIFTYBRAHMI NUMBER SIXTYBRAHMI NUMBE" + + "R SEVENTYBRAHMI NUMBER EIGHTYBRAHMI NUMBER NINETYBRAHMI NUMBER ONE HUNDR" + + "EDBRAHMI NUMBER ONE THOUSANDBRAHMI DIGIT ZEROBRAHMI DIGIT ONEBRAHMI DIGI" + + "T TWOBRAHMI DIGIT THREEBRAHMI DIGIT FOURBRAHMI DIGIT FIVEBRAHMI DIGIT SI" + + "XBRAHMI DIGIT SEVENBRAHMI DIGIT EIGHTBRAHMI DIGIT NINEBRAHMI NUMBER JOIN" + + "ERKAITHI SIGN CANDRABINDUKAITHI SIGN ANUSVARAKAITHI SIGN VISARGAKAITHI L" + + "ETTER AKAITHI LETTER AAKAITHI LETTER IKAITHI LETTER IIKAITHI LETTER UKAI" + + "THI LETTER UUKAITHI LETTER EKAITHI LETTER AIKAITHI LETTER OKAITHI LETTER" + + " AUKAITHI LETTER KAKAITHI LETTER KHAKAITHI LETTER GAKAITHI LETTER GHAKAI" + + "THI LETTER NGAKAITHI LETTER CAKAITHI LETTER CHAKAITHI LETTER JAKAITHI LE" + + "TTER JHAKAITHI LETTER NYAKAITHI LETTER TTAKAITHI LETTER TTHAKAITHI LETTE" + + "R DDAKAITHI LETTER DDDHAKAITHI LETTER DDHAKAITHI LETTER RHAKAITHI LETTER" + + " NNAKAITHI LETTER TAKAITHI LETTER THAKAITHI LETTER DAKAITHI LETTER DHAKA" + + "ITHI LETTER NAKAITHI LETTER PAKAITHI LETTER PHAKAITHI LETTER BAKAITHI LE") + ("" + + "TTER BHAKAITHI LETTER MAKAITHI LETTER YAKAITHI LETTER RAKAITHI LETTER LA" + + "KAITHI LETTER VAKAITHI LETTER SHAKAITHI LETTER SSAKAITHI LETTER SAKAITHI" + + " LETTER HAKAITHI VOWEL SIGN AAKAITHI VOWEL SIGN IKAITHI VOWEL SIGN IIKAI" + + "THI VOWEL SIGN UKAITHI VOWEL SIGN UUKAITHI VOWEL SIGN EKAITHI VOWEL SIGN" + + " AIKAITHI VOWEL SIGN OKAITHI VOWEL SIGN AUKAITHI SIGN VIRAMAKAITHI SIGN " + + "NUKTAKAITHI ABBREVIATION SIGNKAITHI ENUMERATION SIGNKAITHI NUMBER SIGNKA" + + "ITHI SECTION MARKKAITHI DOUBLE SECTION MARKKAITHI DANDAKAITHI DOUBLE DAN" + + "DASORA SOMPENG LETTER SAHSORA SOMPENG LETTER TAHSORA SOMPENG LETTER BAHS" + + "ORA SOMPENG LETTER CAHSORA SOMPENG LETTER DAHSORA SOMPENG LETTER GAHSORA" + + " SOMPENG LETTER MAHSORA SOMPENG LETTER NGAHSORA SOMPENG LETTER LAHSORA S" + + "OMPENG LETTER NAHSORA SOMPENG LETTER VAHSORA SOMPENG LETTER PAHSORA SOMP" + + "ENG LETTER YAHSORA SOMPENG LETTER RAHSORA SOMPENG LETTER HAHSORA SOMPENG" + + " LETTER KAHSORA SOMPENG LETTER JAHSORA SOMPENG LETTER NYAHSORA SOMPENG L" + + "ETTER AHSORA SOMPENG LETTER EEHSORA SOMPENG LETTER IHSORA SOMPENG LETTER" + + " UHSORA SOMPENG LETTER OHSORA SOMPENG LETTER EHSORA SOMPENG LETTER MAESO" + + "RA SOMPENG DIGIT ZEROSORA SOMPENG DIGIT ONESORA SOMPENG DIGIT TWOSORA SO" + + "MPENG DIGIT THREESORA SOMPENG DIGIT FOURSORA SOMPENG DIGIT FIVESORA SOMP" + + "ENG DIGIT SIXSORA SOMPENG DIGIT SEVENSORA SOMPENG DIGIT EIGHTSORA SOMPEN" + + "G DIGIT NINECHAKMA SIGN CANDRABINDUCHAKMA SIGN ANUSVARACHAKMA SIGN VISAR" + + "GACHAKMA LETTER AACHAKMA LETTER ICHAKMA LETTER UCHAKMA LETTER ECHAKMA LE" + + "TTER KAACHAKMA LETTER KHAACHAKMA LETTER GAACHAKMA LETTER GHAACHAKMA LETT" + + "ER NGAACHAKMA LETTER CAACHAKMA LETTER CHAACHAKMA LETTER JAACHAKMA LETTER" + + " JHAACHAKMA LETTER NYAACHAKMA LETTER TTAACHAKMA LETTER TTHAACHAKMA LETTE" + + "R DDAACHAKMA LETTER DDHAACHAKMA LETTER NNAACHAKMA LETTER TAACHAKMA LETTE" + + "R THAACHAKMA LETTER DAACHAKMA LETTER DHAACHAKMA LETTER NAACHAKMA LETTER " + + "PAACHAKMA LETTER PHAACHAKMA LETTER BAACHAKMA LETTER BHAACHAKMA LETTER MA" + + "ACHAKMA LETTER YYAACHAKMA LETTER YAACHAKMA LETTER RAACHAKMA LETTER LAACH" + + "AKMA LETTER WAACHAKMA LETTER SAACHAKMA LETTER HAACHAKMA VOWEL SIGN ACHAK" + + "MA VOWEL SIGN ICHAKMA VOWEL SIGN IICHAKMA VOWEL SIGN UCHAKMA VOWEL SIGN " + + "UUCHAKMA VOWEL SIGN ECHAKMA VOWEL SIGN AICHAKMA VOWEL SIGN OCHAKMA VOWEL" + + " SIGN AUCHAKMA VOWEL SIGN OICHAKMA O MARKCHAKMA AU MARKCHAKMA VIRAMACHAK" + + "MA MAAYYAACHAKMA DIGIT ZEROCHAKMA DIGIT ONECHAKMA DIGIT TWOCHAKMA DIGIT " + + "THREECHAKMA DIGIT FOURCHAKMA DIGIT FIVECHAKMA DIGIT SIXCHAKMA DIGIT SEVE" + + "NCHAKMA DIGIT EIGHTCHAKMA DIGIT NINECHAKMA SECTION MARKCHAKMA DANDACHAKM" + + "A DOUBLE DANDACHAKMA QUESTION MARKMAHAJANI LETTER AMAHAJANI LETTER IMAHA" + + "JANI LETTER UMAHAJANI LETTER EMAHAJANI LETTER OMAHAJANI LETTER KAMAHAJAN" + + "I LETTER KHAMAHAJANI LETTER GAMAHAJANI LETTER GHAMAHAJANI LETTER CAMAHAJ" + + "ANI LETTER CHAMAHAJANI LETTER JAMAHAJANI LETTER JHAMAHAJANI LETTER NYAMA" + + "HAJANI LETTER TTAMAHAJANI LETTER TTHAMAHAJANI LETTER DDAMAHAJANI LETTER " + + "DDHAMAHAJANI LETTER NNAMAHAJANI LETTER TAMAHAJANI LETTER THAMAHAJANI LET" + + "TER DAMAHAJANI LETTER DHAMAHAJANI LETTER NAMAHAJANI LETTER PAMAHAJANI LE" + + "TTER PHAMAHAJANI LETTER BAMAHAJANI LETTER BHAMAHAJANI LETTER MAMAHAJANI " + + "LETTER RAMAHAJANI LETTER LAMAHAJANI LETTER VAMAHAJANI LETTER SAMAHAJANI " + + "LETTER HAMAHAJANI LETTER RRAMAHAJANI SIGN NUKTAMAHAJANI ABBREVIATION SIG" + + "NMAHAJANI SECTION MARKMAHAJANI LIGATURE SHRISHARADA SIGN CANDRABINDUSHAR" + + "ADA SIGN ANUSVARASHARADA SIGN VISARGASHARADA LETTER ASHARADA LETTER AASH" + + "ARADA LETTER ISHARADA LETTER IISHARADA LETTER USHARADA LETTER UUSHARADA " + + "LETTER VOCALIC RSHARADA LETTER VOCALIC RRSHARADA LETTER VOCALIC LSHARADA" + + " LETTER VOCALIC LLSHARADA LETTER ESHARADA LETTER AISHARADA LETTER OSHARA" + + "DA LETTER AUSHARADA LETTER KASHARADA LETTER KHASHARADA LETTER GASHARADA " + + "LETTER GHASHARADA LETTER NGASHARADA LETTER CASHARADA LETTER CHASHARADA L" + + "ETTER JASHARADA LETTER JHASHARADA LETTER NYASHARADA LETTER TTASHARADA LE" + + "TTER TTHASHARADA LETTER DDASHARADA LETTER DDHASHARADA LETTER NNASHARADA " + + "LETTER TASHARADA LETTER THASHARADA LETTER DASHARADA LETTER DHASHARADA LE" + + "TTER NASHARADA LETTER PASHARADA LETTER PHASHARADA LETTER BASHARADA LETTE" + + "R BHASHARADA LETTER MASHARADA LETTER YASHARADA LETTER RASHARADA LETTER L" + + "ASHARADA LETTER LLASHARADA LETTER VASHARADA LETTER SHASHARADA LETTER SSA" + + "SHARADA LETTER SASHARADA LETTER HASHARADA VOWEL SIGN AASHARADA VOWEL SIG" + + "N ISHARADA VOWEL SIGN IISHARADA VOWEL SIGN USHARADA VOWEL SIGN UUSHARADA" + + " VOWEL SIGN VOCALIC RSHARADA VOWEL SIGN VOCALIC RRSHARADA VOWEL SIGN VOC" + + "ALIC LSHARADA VOWEL SIGN VOCALIC LLSHARADA VOWEL SIGN ESHARADA VOWEL SIG" + + "N AISHARADA VOWEL SIGN OSHARADA VOWEL SIGN AUSHARADA SIGN VIRAMASHARADA " + + "SIGN AVAGRAHASHARADA SIGN JIHVAMULIYASHARADA SIGN UPADHMANIYASHARADA OMS" + + "HARADA DANDASHARADA DOUBLE DANDASHARADA ABBREVIATION SIGNSHARADA SEPARAT") + ("" + + "ORSHARADA SANDHI MARKSHARADA SIGN NUKTASHARADA VOWEL MODIFIER MARKSHARAD" + + "A EXTRA SHORT VOWEL MARKSHARADA SUTRA MARKSHARADA DIGIT ZEROSHARADA DIGI" + + "T ONESHARADA DIGIT TWOSHARADA DIGIT THREESHARADA DIGIT FOURSHARADA DIGIT" + + " FIVESHARADA DIGIT SIXSHARADA DIGIT SEVENSHARADA DIGIT EIGHTSHARADA DIGI" + + "T NINESHARADA EKAMSHARADA SIGN SIDDHAMSHARADA HEADSTROKESHARADA CONTINUA" + + "TION SIGNSHARADA SECTION MARK-1SHARADA SECTION MARK-2SINHALA ARCHAIC DIG" + + "IT ONESINHALA ARCHAIC DIGIT TWOSINHALA ARCHAIC DIGIT THREESINHALA ARCHAI" + + "C DIGIT FOURSINHALA ARCHAIC DIGIT FIVESINHALA ARCHAIC DIGIT SIXSINHALA A" + + "RCHAIC DIGIT SEVENSINHALA ARCHAIC DIGIT EIGHTSINHALA ARCHAIC DIGIT NINES" + + "INHALA ARCHAIC NUMBER TENSINHALA ARCHAIC NUMBER TWENTYSINHALA ARCHAIC NU" + + "MBER THIRTYSINHALA ARCHAIC NUMBER FORTYSINHALA ARCHAIC NUMBER FIFTYSINHA" + + "LA ARCHAIC NUMBER SIXTYSINHALA ARCHAIC NUMBER SEVENTYSINHALA ARCHAIC NUM" + + "BER EIGHTYSINHALA ARCHAIC NUMBER NINETYSINHALA ARCHAIC NUMBER ONE HUNDRE" + + "DSINHALA ARCHAIC NUMBER ONE THOUSANDKHOJKI LETTER AKHOJKI LETTER AAKHOJK" + + "I LETTER IKHOJKI LETTER UKHOJKI LETTER EKHOJKI LETTER AIKHOJKI LETTER OK" + + "HOJKI LETTER AUKHOJKI LETTER KAKHOJKI LETTER KHAKHOJKI LETTER GAKHOJKI L" + + "ETTER GGAKHOJKI LETTER GHAKHOJKI LETTER NGAKHOJKI LETTER CAKHOJKI LETTER" + + " CHAKHOJKI LETTER JAKHOJKI LETTER JJAKHOJKI LETTER NYAKHOJKI LETTER TTAK" + + "HOJKI LETTER TTHAKHOJKI LETTER DDAKHOJKI LETTER DDHAKHOJKI LETTER NNAKHO" + + "JKI LETTER TAKHOJKI LETTER THAKHOJKI LETTER DAKHOJKI LETTER DDDAKHOJKI L" + + "ETTER DHAKHOJKI LETTER NAKHOJKI LETTER PAKHOJKI LETTER PHAKHOJKI LETTER " + + "BAKHOJKI LETTER BBAKHOJKI LETTER BHAKHOJKI LETTER MAKHOJKI LETTER YAKHOJ" + + "KI LETTER RAKHOJKI LETTER LAKHOJKI LETTER VAKHOJKI LETTER SAKHOJKI LETTE" + + "R HAKHOJKI LETTER LLAKHOJKI VOWEL SIGN AAKHOJKI VOWEL SIGN IKHOJKI VOWEL" + + " SIGN IIKHOJKI VOWEL SIGN UKHOJKI VOWEL SIGN EKHOJKI VOWEL SIGN AIKHOJKI" + + " VOWEL SIGN OKHOJKI VOWEL SIGN AUKHOJKI SIGN ANUSVARAKHOJKI SIGN VIRAMAK" + + "HOJKI SIGN NUKTAKHOJKI SIGN SHADDAKHOJKI DANDAKHOJKI DOUBLE DANDAKHOJKI " + + "WORD SEPARATORKHOJKI SECTION MARKKHOJKI DOUBLE SECTION MARKKHOJKI ABBREV" + + "IATION SIGNKHOJKI SIGN SUKUNMULTANI LETTER AMULTANI LETTER IMULTANI LETT" + + "ER UMULTANI LETTER EMULTANI LETTER KAMULTANI LETTER KHAMULTANI LETTER GA" + + "MULTANI LETTER GHAMULTANI LETTER CAMULTANI LETTER CHAMULTANI LETTER JAMU" + + "LTANI LETTER JJAMULTANI LETTER NYAMULTANI LETTER TTAMULTANI LETTER TTHAM" + + "ULTANI LETTER DDAMULTANI LETTER DDDAMULTANI LETTER DDHAMULTANI LETTER NN" + + "AMULTANI LETTER TAMULTANI LETTER THAMULTANI LETTER DAMULTANI LETTER DHAM" + + "ULTANI LETTER NAMULTANI LETTER PAMULTANI LETTER PHAMULTANI LETTER BAMULT" + + "ANI LETTER BHAMULTANI LETTER MAMULTANI LETTER YAMULTANI LETTER RAMULTANI" + + " LETTER LAMULTANI LETTER VAMULTANI LETTER SAMULTANI LETTER HAMULTANI LET" + + "TER RRAMULTANI LETTER RHAMULTANI SECTION MARKKHUDAWADI LETTER AKHUDAWADI" + + " LETTER AAKHUDAWADI LETTER IKHUDAWADI LETTER IIKHUDAWADI LETTER UKHUDAWA" + + "DI LETTER UUKHUDAWADI LETTER EKHUDAWADI LETTER AIKHUDAWADI LETTER OKHUDA" + + "WADI LETTER AUKHUDAWADI LETTER KAKHUDAWADI LETTER KHAKHUDAWADI LETTER GA" + + "KHUDAWADI LETTER GGAKHUDAWADI LETTER GHAKHUDAWADI LETTER NGAKHUDAWADI LE" + + "TTER CAKHUDAWADI LETTER CHAKHUDAWADI LETTER JAKHUDAWADI LETTER JJAKHUDAW" + + "ADI LETTER JHAKHUDAWADI LETTER NYAKHUDAWADI LETTER TTAKHUDAWADI LETTER T" + + "THAKHUDAWADI LETTER DDAKHUDAWADI LETTER DDDAKHUDAWADI LETTER RRAKHUDAWAD" + + "I LETTER DDHAKHUDAWADI LETTER NNAKHUDAWADI LETTER TAKHUDAWADI LETTER THA" + + "KHUDAWADI LETTER DAKHUDAWADI LETTER DHAKHUDAWADI LETTER NAKHUDAWADI LETT" + + "ER PAKHUDAWADI LETTER PHAKHUDAWADI LETTER BAKHUDAWADI LETTER BBAKHUDAWAD" + + "I LETTER BHAKHUDAWADI LETTER MAKHUDAWADI LETTER YAKHUDAWADI LETTER RAKHU" + + "DAWADI LETTER LAKHUDAWADI LETTER VAKHUDAWADI LETTER SHAKHUDAWADI LETTER " + + "SAKHUDAWADI LETTER HAKHUDAWADI SIGN ANUSVARAKHUDAWADI VOWEL SIGN AAKHUDA" + + "WADI VOWEL SIGN IKHUDAWADI VOWEL SIGN IIKHUDAWADI VOWEL SIGN UKHUDAWADI " + + "VOWEL SIGN UUKHUDAWADI VOWEL SIGN EKHUDAWADI VOWEL SIGN AIKHUDAWADI VOWE" + + "L SIGN OKHUDAWADI VOWEL SIGN AUKHUDAWADI SIGN NUKTAKHUDAWADI SIGN VIRAMA" + + "KHUDAWADI DIGIT ZEROKHUDAWADI DIGIT ONEKHUDAWADI DIGIT TWOKHUDAWADI DIGI" + + "T THREEKHUDAWADI DIGIT FOURKHUDAWADI DIGIT FIVEKHUDAWADI DIGIT SIXKHUDAW" + + "ADI DIGIT SEVENKHUDAWADI DIGIT EIGHTKHUDAWADI DIGIT NINEGRANTHA SIGN COM" + + "BINING ANUSVARA ABOVEGRANTHA SIGN CANDRABINDUGRANTHA SIGN ANUSVARAGRANTH" + + "A SIGN VISARGAGRANTHA LETTER AGRANTHA LETTER AAGRANTHA LETTER IGRANTHA L" + + "ETTER IIGRANTHA LETTER UGRANTHA LETTER UUGRANTHA LETTER VOCALIC RGRANTHA" + + " LETTER VOCALIC LGRANTHA LETTER EEGRANTHA LETTER AIGRANTHA LETTER OOGRAN" + + "THA LETTER AUGRANTHA LETTER KAGRANTHA LETTER KHAGRANTHA LETTER GAGRANTHA" + + " LETTER GHAGRANTHA LETTER NGAGRANTHA LETTER CAGRANTHA LETTER CHAGRANTHA " + + "LETTER JAGRANTHA LETTER JHAGRANTHA LETTER NYAGRANTHA LETTER TTAGRANTHA L") + ("" + + "ETTER TTHAGRANTHA LETTER DDAGRANTHA LETTER DDHAGRANTHA LETTER NNAGRANTHA" + + " LETTER TAGRANTHA LETTER THAGRANTHA LETTER DAGRANTHA LETTER DHAGRANTHA L" + + "ETTER NAGRANTHA LETTER PAGRANTHA LETTER PHAGRANTHA LETTER BAGRANTHA LETT" + + "ER BHAGRANTHA LETTER MAGRANTHA LETTER YAGRANTHA LETTER RAGRANTHA LETTER " + + "LAGRANTHA LETTER LLAGRANTHA LETTER VAGRANTHA LETTER SHAGRANTHA LETTER SS" + + "AGRANTHA LETTER SAGRANTHA LETTER HAGRANTHA SIGN NUKTAGRANTHA SIGN AVAGRA" + + "HAGRANTHA VOWEL SIGN AAGRANTHA VOWEL SIGN IGRANTHA VOWEL SIGN IIGRANTHA " + + "VOWEL SIGN UGRANTHA VOWEL SIGN UUGRANTHA VOWEL SIGN VOCALIC RGRANTHA VOW" + + "EL SIGN VOCALIC RRGRANTHA VOWEL SIGN EEGRANTHA VOWEL SIGN AIGRANTHA VOWE" + + "L SIGN OOGRANTHA VOWEL SIGN AUGRANTHA SIGN VIRAMAGRANTHA OMGRANTHA AU LE" + + "NGTH MARKGRANTHA SIGN PLUTAGRANTHA LETTER VEDIC ANUSVARAGRANTHA LETTER V" + + "EDIC DOUBLE ANUSVARAGRANTHA LETTER VOCALIC RRGRANTHA LETTER VOCALIC LLGR" + + "ANTHA VOWEL SIGN VOCALIC LGRANTHA VOWEL SIGN VOCALIC LLCOMBINING GRANTHA" + + " DIGIT ZEROCOMBINING GRANTHA DIGIT ONECOMBINING GRANTHA DIGIT TWOCOMBINI" + + "NG GRANTHA DIGIT THREECOMBINING GRANTHA DIGIT FOURCOMBINING GRANTHA DIGI" + + "T FIVECOMBINING GRANTHA DIGIT SIXCOMBINING GRANTHA LETTER ACOMBINING GRA" + + "NTHA LETTER KACOMBINING GRANTHA LETTER NACOMBINING GRANTHA LETTER VICOMB" + + "INING GRANTHA LETTER PANEWA LETTER ANEWA LETTER AANEWA LETTER INEWA LETT" + + "ER IINEWA LETTER UNEWA LETTER UUNEWA LETTER VOCALIC RNEWA LETTER VOCALIC" + + " RRNEWA LETTER VOCALIC LNEWA LETTER VOCALIC LLNEWA LETTER ENEWA LETTER A" + + "INEWA LETTER ONEWA LETTER AUNEWA LETTER KANEWA LETTER KHANEWA LETTER GAN" + + "EWA LETTER GHANEWA LETTER NGANEWA LETTER NGHANEWA LETTER CANEWA LETTER C" + + "HANEWA LETTER JANEWA LETTER JHANEWA LETTER NYANEWA LETTER NYHANEWA LETTE" + + "R TTANEWA LETTER TTHANEWA LETTER DDANEWA LETTER DDHANEWA LETTER NNANEWA " + + "LETTER TANEWA LETTER THANEWA LETTER DANEWA LETTER DHANEWA LETTER NANEWA " + + "LETTER NHANEWA LETTER PANEWA LETTER PHANEWA LETTER BANEWA LETTER BHANEWA" + + " LETTER MANEWA LETTER MHANEWA LETTER YANEWA LETTER RANEWA LETTER RHANEWA" + + " LETTER LANEWA LETTER LHANEWA LETTER WANEWA LETTER SHANEWA LETTER SSANEW" + + "A LETTER SANEWA LETTER HANEWA VOWEL SIGN AANEWA VOWEL SIGN INEWA VOWEL S" + + "IGN IINEWA VOWEL SIGN UNEWA VOWEL SIGN UUNEWA VOWEL SIGN VOCALIC RNEWA V" + + "OWEL SIGN VOCALIC RRNEWA VOWEL SIGN VOCALIC LNEWA VOWEL SIGN VOCALIC LLN" + + "EWA VOWEL SIGN ENEWA VOWEL SIGN AINEWA VOWEL SIGN ONEWA VOWEL SIGN AUNEW" + + "A SIGN VIRAMANEWA SIGN CANDRABINDUNEWA SIGN ANUSVARANEWA SIGN VISARGANEW" + + "A SIGN NUKTANEWA SIGN AVAGRAHANEWA SIGN FINAL ANUSVARANEWA OMNEWA SIDDHI" + + "NEWA DANDANEWA DOUBLE DANDANEWA COMMANEWA GAP FILLERNEWA ABBREVIATION SI" + + "GNNEWA DIGIT ZERONEWA DIGIT ONENEWA DIGIT TWONEWA DIGIT THREENEWA DIGIT " + + "FOURNEWA DIGIT FIVENEWA DIGIT SIXNEWA DIGIT SEVENNEWA DIGIT EIGHTNEWA DI" + + "GIT NINENEWA PLACEHOLDER MARKNEWA INSERTION SIGNTIRHUTA ANJITIRHUTA LETT" + + "ER ATIRHUTA LETTER AATIRHUTA LETTER ITIRHUTA LETTER IITIRHUTA LETTER UTI" + + "RHUTA LETTER UUTIRHUTA LETTER VOCALIC RTIRHUTA LETTER VOCALIC RRTIRHUTA " + + "LETTER VOCALIC LTIRHUTA LETTER VOCALIC LLTIRHUTA LETTER ETIRHUTA LETTER " + + "AITIRHUTA LETTER OTIRHUTA LETTER AUTIRHUTA LETTER KATIRHUTA LETTER KHATI" + + "RHUTA LETTER GATIRHUTA LETTER GHATIRHUTA LETTER NGATIRHUTA LETTER CATIRH" + + "UTA LETTER CHATIRHUTA LETTER JATIRHUTA LETTER JHATIRHUTA LETTER NYATIRHU" + + "TA LETTER TTATIRHUTA LETTER TTHATIRHUTA LETTER DDATIRHUTA LETTER DDHATIR" + + "HUTA LETTER NNATIRHUTA LETTER TATIRHUTA LETTER THATIRHUTA LETTER DATIRHU" + + "TA LETTER DHATIRHUTA LETTER NATIRHUTA LETTER PATIRHUTA LETTER PHATIRHUTA" + + " LETTER BATIRHUTA LETTER BHATIRHUTA LETTER MATIRHUTA LETTER YATIRHUTA LE" + + "TTER RATIRHUTA LETTER LATIRHUTA LETTER VATIRHUTA LETTER SHATIRHUTA LETTE" + + "R SSATIRHUTA LETTER SATIRHUTA LETTER HATIRHUTA VOWEL SIGN AATIRHUTA VOWE" + + "L SIGN ITIRHUTA VOWEL SIGN IITIRHUTA VOWEL SIGN UTIRHUTA VOWEL SIGN UUTI" + + "RHUTA VOWEL SIGN VOCALIC RTIRHUTA VOWEL SIGN VOCALIC RRTIRHUTA VOWEL SIG" + + "N VOCALIC LTIRHUTA VOWEL SIGN VOCALIC LLTIRHUTA VOWEL SIGN ETIRHUTA VOWE" + + "L SIGN SHORT ETIRHUTA VOWEL SIGN AITIRHUTA VOWEL SIGN OTIRHUTA VOWEL SIG" + + "N SHORT OTIRHUTA VOWEL SIGN AUTIRHUTA SIGN CANDRABINDUTIRHUTA SIGN ANUSV" + + "ARATIRHUTA SIGN VISARGATIRHUTA SIGN VIRAMATIRHUTA SIGN NUKTATIRHUTA SIGN" + + " AVAGRAHATIRHUTA GVANGTIRHUTA ABBREVIATION SIGNTIRHUTA OMTIRHUTA DIGIT Z" + + "EROTIRHUTA DIGIT ONETIRHUTA DIGIT TWOTIRHUTA DIGIT THREETIRHUTA DIGIT FO" + + "URTIRHUTA DIGIT FIVETIRHUTA DIGIT SIXTIRHUTA DIGIT SEVENTIRHUTA DIGIT EI" + + "GHTTIRHUTA DIGIT NINESIDDHAM LETTER ASIDDHAM LETTER AASIDDHAM LETTER ISI" + + "DDHAM LETTER IISIDDHAM LETTER USIDDHAM LETTER UUSIDDHAM LETTER VOCALIC R" + + "SIDDHAM LETTER VOCALIC RRSIDDHAM LETTER VOCALIC LSIDDHAM LETTER VOCALIC " + + "LLSIDDHAM LETTER ESIDDHAM LETTER AISIDDHAM LETTER OSIDDHAM LETTER AUSIDD" + + "HAM LETTER KASIDDHAM LETTER KHASIDDHAM LETTER GASIDDHAM LETTER GHASIDDHA") + ("" + + "M LETTER NGASIDDHAM LETTER CASIDDHAM LETTER CHASIDDHAM LETTER JASIDDHAM " + + "LETTER JHASIDDHAM LETTER NYASIDDHAM LETTER TTASIDDHAM LETTER TTHASIDDHAM" + + " LETTER DDASIDDHAM LETTER DDHASIDDHAM LETTER NNASIDDHAM LETTER TASIDDHAM" + + " LETTER THASIDDHAM LETTER DASIDDHAM LETTER DHASIDDHAM LETTER NASIDDHAM L" + + "ETTER PASIDDHAM LETTER PHASIDDHAM LETTER BASIDDHAM LETTER BHASIDDHAM LET" + + "TER MASIDDHAM LETTER YASIDDHAM LETTER RASIDDHAM LETTER LASIDDHAM LETTER " + + "VASIDDHAM LETTER SHASIDDHAM LETTER SSASIDDHAM LETTER SASIDDHAM LETTER HA" + + "SIDDHAM VOWEL SIGN AASIDDHAM VOWEL SIGN ISIDDHAM VOWEL SIGN IISIDDHAM VO" + + "WEL SIGN USIDDHAM VOWEL SIGN UUSIDDHAM VOWEL SIGN VOCALIC RSIDDHAM VOWEL" + + " SIGN VOCALIC RRSIDDHAM VOWEL SIGN ESIDDHAM VOWEL SIGN AISIDDHAM VOWEL S" + + "IGN OSIDDHAM VOWEL SIGN AUSIDDHAM SIGN CANDRABINDUSIDDHAM SIGN ANUSVARAS" + + "IDDHAM SIGN VISARGASIDDHAM SIGN VIRAMASIDDHAM SIGN NUKTASIDDHAM SIGN SID" + + "DHAMSIDDHAM DANDASIDDHAM DOUBLE DANDASIDDHAM SEPARATOR DOTSIDDHAM SEPARA" + + "TOR BARSIDDHAM REPETITION MARK-1SIDDHAM REPETITION MARK-2SIDDHAM REPETIT" + + "ION MARK-3SIDDHAM END OF TEXT MARKSIDDHAM SECTION MARK WITH TRIDENT AND " + + "U-SHAPED ORNAMENTSSIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS" + + "SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTSSIDDHAM SECTION MARK " + + "WITH RAYS AND DOTTED DOUBLE CRESCENTSSIDDHAM SECTION MARK WITH RAYS AND " + + "DOTTED TRIPLE CRESCENTSSIDDHAM SECTION MARK DOUBLE RINGSIDDHAM SECTION M" + + "ARK DOUBLE RING WITH RAYSSIDDHAM SECTION MARK WITH DOUBLE CRESCENTSSIDDH" + + "AM SECTION MARK WITH TRIPLE CRESCENTSSIDDHAM SECTION MARK WITH QUADRUPLE" + + " CRESCENTSSIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTSSIDDHAM SECTION MA" + + "RK WITH CIRCLES AND RAYSSIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOS" + + "URESSIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURESSIDDHAM LETTER " + + "THREE-CIRCLE ALTERNATE ISIDDHAM LETTER TWO-CIRCLE ALTERNATE ISIDDHAM LET" + + "TER TWO-CIRCLE ALTERNATE IISIDDHAM LETTER ALTERNATE USIDDHAM VOWEL SIGN " + + "ALTERNATE USIDDHAM VOWEL SIGN ALTERNATE UUMODI LETTER AMODI LETTER AAMOD" + + "I LETTER IMODI LETTER IIMODI LETTER UMODI LETTER UUMODI LETTER VOCALIC R" + + "MODI LETTER VOCALIC RRMODI LETTER VOCALIC LMODI LETTER VOCALIC LLMODI LE" + + "TTER EMODI LETTER AIMODI LETTER OMODI LETTER AUMODI LETTER KAMODI LETTER" + + " KHAMODI LETTER GAMODI LETTER GHAMODI LETTER NGAMODI LETTER CAMODI LETTE" + + "R CHAMODI LETTER JAMODI LETTER JHAMODI LETTER NYAMODI LETTER TTAMODI LET" + + "TER TTHAMODI LETTER DDAMODI LETTER DDHAMODI LETTER NNAMODI LETTER TAMODI" + + " LETTER THAMODI LETTER DAMODI LETTER DHAMODI LETTER NAMODI LETTER PAMODI" + + " LETTER PHAMODI LETTER BAMODI LETTER BHAMODI LETTER MAMODI LETTER YAMODI" + + " LETTER RAMODI LETTER LAMODI LETTER VAMODI LETTER SHAMODI LETTER SSAMODI" + + " LETTER SAMODI LETTER HAMODI LETTER LLAMODI VOWEL SIGN AAMODI VOWEL SIGN" + + " IMODI VOWEL SIGN IIMODI VOWEL SIGN UMODI VOWEL SIGN UUMODI VOWEL SIGN V" + + "OCALIC RMODI VOWEL SIGN VOCALIC RRMODI VOWEL SIGN VOCALIC LMODI VOWEL SI" + + "GN VOCALIC LLMODI VOWEL SIGN EMODI VOWEL SIGN AIMODI VOWEL SIGN OMODI VO" + + "WEL SIGN AUMODI SIGN ANUSVARAMODI SIGN VISARGAMODI SIGN VIRAMAMODI SIGN " + + "ARDHACANDRAMODI DANDAMODI DOUBLE DANDAMODI ABBREVIATION SIGNMODI SIGN HU" + + "VAMODI DIGIT ZEROMODI DIGIT ONEMODI DIGIT TWOMODI DIGIT THREEMODI DIGIT " + + "FOURMODI DIGIT FIVEMODI DIGIT SIXMODI DIGIT SEVENMODI DIGIT EIGHTMODI DI" + + "GIT NINEMONGOLIAN BIRGA WITH ORNAMENTMONGOLIAN ROTATED BIRGAMONGOLIAN DO" + + "UBLE BIRGA WITH ORNAMENTMONGOLIAN TRIPLE BIRGA WITH ORNAMENTMONGOLIAN BI" + + "RGA WITH DOUBLE ORNAMENTMONGOLIAN ROTATED BIRGA WITH ORNAMENTMONGOLIAN R" + + "OTATED BIRGA WITH DOUBLE ORNAMENTMONGOLIAN INVERTED BIRGAMONGOLIAN INVER" + + "TED BIRGA WITH DOUBLE ORNAMENTMONGOLIAN SWIRL BIRGAMONGOLIAN SWIRL BIRGA" + + " WITH ORNAMENTMONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENTMONGOLIAN TURNED" + + " SWIRL BIRGA WITH DOUBLE ORNAMENTTAKRI LETTER ATAKRI LETTER AATAKRI LETT" + + "ER ITAKRI LETTER IITAKRI LETTER UTAKRI LETTER UUTAKRI LETTER ETAKRI LETT" + + "ER AITAKRI LETTER OTAKRI LETTER AUTAKRI LETTER KATAKRI LETTER KHATAKRI L" + + "ETTER GATAKRI LETTER GHATAKRI LETTER NGATAKRI LETTER CATAKRI LETTER CHAT" + + "AKRI LETTER JATAKRI LETTER JHATAKRI LETTER NYATAKRI LETTER TTATAKRI LETT" + + "ER TTHATAKRI LETTER DDATAKRI LETTER DDHATAKRI LETTER NNATAKRI LETTER TAT" + + "AKRI LETTER THATAKRI LETTER DATAKRI LETTER DHATAKRI LETTER NATAKRI LETTE" + + "R PATAKRI LETTER PHATAKRI LETTER BATAKRI LETTER BHATAKRI LETTER MATAKRI " + + "LETTER YATAKRI LETTER RATAKRI LETTER LATAKRI LETTER VATAKRI LETTER SHATA" + + "KRI LETTER SATAKRI LETTER HATAKRI LETTER RRATAKRI SIGN ANUSVARATAKRI SIG" + + "N VISARGATAKRI VOWEL SIGN AATAKRI VOWEL SIGN ITAKRI VOWEL SIGN IITAKRI V" + + "OWEL SIGN UTAKRI VOWEL SIGN UUTAKRI VOWEL SIGN ETAKRI VOWEL SIGN AITAKRI" + + " VOWEL SIGN OTAKRI VOWEL SIGN AUTAKRI SIGN VIRAMATAKRI SIGN NUKTATAKRI D" + + "IGIT ZEROTAKRI DIGIT ONETAKRI DIGIT TWOTAKRI DIGIT THREETAKRI DIGIT FOUR") + ("" + + "TAKRI DIGIT FIVETAKRI DIGIT SIXTAKRI DIGIT SEVENTAKRI DIGIT EIGHTTAKRI D" + + "IGIT NINEAHOM LETTER KAAHOM LETTER KHAAHOM LETTER NGAAHOM LETTER NAAHOM " + + "LETTER TAAHOM LETTER ALTERNATE TAAHOM LETTER PAAHOM LETTER PHAAHOM LETTE" + + "R BAAHOM LETTER MAAHOM LETTER JAAHOM LETTER CHAAHOM LETTER THAAHOM LETTE" + + "R RAAHOM LETTER LAAHOM LETTER SAAHOM LETTER NYAAHOM LETTER HAAHOM LETTER" + + " AAHOM LETTER DAAHOM LETTER DHAAHOM LETTER GAAHOM LETTER ALTERNATE GAAHO" + + "M LETTER GHAAHOM LETTER BHAAHOM LETTER JHAAHOM CONSONANT SIGN MEDIAL LAA" + + "HOM CONSONANT SIGN MEDIAL RAAHOM CONSONANT SIGN MEDIAL LIGATING RAAHOM V" + + "OWEL SIGN AAHOM VOWEL SIGN AAAHOM VOWEL SIGN IAHOM VOWEL SIGN IIAHOM VOW" + + "EL SIGN UAHOM VOWEL SIGN UUAHOM VOWEL SIGN EAHOM VOWEL SIGN AWAHOM VOWEL" + + " SIGN OAHOM VOWEL SIGN AIAHOM VOWEL SIGN AMAHOM SIGN KILLERAHOM DIGIT ZE" + + "ROAHOM DIGIT ONEAHOM DIGIT TWOAHOM DIGIT THREEAHOM DIGIT FOURAHOM DIGIT " + + "FIVEAHOM DIGIT SIXAHOM DIGIT SEVENAHOM DIGIT EIGHTAHOM DIGIT NINEAHOM NU" + + "MBER TENAHOM NUMBER TWENTYAHOM SIGN SMALL SECTIONAHOM SIGN SECTIONAHOM S" + + "IGN RULAIAHOM SYMBOL VIWARANG CITI CAPITAL LETTER NGAAWARANG CITI CAPITA" + + "L LETTER AWARANG CITI CAPITAL LETTER WIWARANG CITI CAPITAL LETTER YUWARA" + + "NG CITI CAPITAL LETTER YAWARANG CITI CAPITAL LETTER YOWARANG CITI CAPITA" + + "L LETTER IIWARANG CITI CAPITAL LETTER UUWARANG CITI CAPITAL LETTER EWARA" + + "NG CITI CAPITAL LETTER OWARANG CITI CAPITAL LETTER ANGWARANG CITI CAPITA" + + "L LETTER GAWARANG CITI CAPITAL LETTER KOWARANG CITI CAPITAL LETTER ENYWA" + + "RANG CITI CAPITAL LETTER YUJWARANG CITI CAPITAL LETTER UCWARANG CITI CAP" + + "ITAL LETTER ENNWARANG CITI CAPITAL LETTER ODDWARANG CITI CAPITAL LETTER " + + "TTEWARANG CITI CAPITAL LETTER NUNGWARANG CITI CAPITAL LETTER DAWARANG CI" + + "TI CAPITAL LETTER ATWARANG CITI CAPITAL LETTER AMWARANG CITI CAPITAL LET" + + "TER BUWARANG CITI CAPITAL LETTER PUWARANG CITI CAPITAL LETTER HIYOWARANG" + + " CITI CAPITAL LETTER HOLOWARANG CITI CAPITAL LETTER HORRWARANG CITI CAPI" + + "TAL LETTER HARWARANG CITI CAPITAL LETTER SSUUWARANG CITI CAPITAL LETTER " + + "SIIWARANG CITI CAPITAL LETTER VIYOWARANG CITI SMALL LETTER NGAAWARANG CI" + + "TI SMALL LETTER AWARANG CITI SMALL LETTER WIWARANG CITI SMALL LETTER YUW" + + "ARANG CITI SMALL LETTER YAWARANG CITI SMALL LETTER YOWARANG CITI SMALL L" + + "ETTER IIWARANG CITI SMALL LETTER UUWARANG CITI SMALL LETTER EWARANG CITI" + + " SMALL LETTER OWARANG CITI SMALL LETTER ANGWARANG CITI SMALL LETTER GAWA" + + "RANG CITI SMALL LETTER KOWARANG CITI SMALL LETTER ENYWARANG CITI SMALL L" + + "ETTER YUJWARANG CITI SMALL LETTER UCWARANG CITI SMALL LETTER ENNWARANG C" + + "ITI SMALL LETTER ODDWARANG CITI SMALL LETTER TTEWARANG CITI SMALL LETTER" + + " NUNGWARANG CITI SMALL LETTER DAWARANG CITI SMALL LETTER ATWARANG CITI S" + + "MALL LETTER AMWARANG CITI SMALL LETTER BUWARANG CITI SMALL LETTER PUWARA" + + "NG CITI SMALL LETTER HIYOWARANG CITI SMALL LETTER HOLOWARANG CITI SMALL " + + "LETTER HORRWARANG CITI SMALL LETTER HARWARANG CITI SMALL LETTER SSUUWARA" + + "NG CITI SMALL LETTER SIIWARANG CITI SMALL LETTER VIYOWARANG CITI DIGIT Z" + + "EROWARANG CITI DIGIT ONEWARANG CITI DIGIT TWOWARANG CITI DIGIT THREEWARA" + + "NG CITI DIGIT FOURWARANG CITI DIGIT FIVEWARANG CITI DIGIT SIXWARANG CITI" + + " DIGIT SEVENWARANG CITI DIGIT EIGHTWARANG CITI DIGIT NINEWARANG CITI NUM" + + "BER TENWARANG CITI NUMBER TWENTYWARANG CITI NUMBER THIRTYWARANG CITI NUM" + + "BER FORTYWARANG CITI NUMBER FIFTYWARANG CITI NUMBER SIXTYWARANG CITI NUM" + + "BER SEVENTYWARANG CITI NUMBER EIGHTYWARANG CITI NUMBER NINETYWARANG CITI" + + " OMPAU CIN HAU LETTER PAPAU CIN HAU LETTER KAPAU CIN HAU LETTER LAPAU CI" + + "N HAU LETTER MAPAU CIN HAU LETTER DAPAU CIN HAU LETTER ZAPAU CIN HAU LET" + + "TER VAPAU CIN HAU LETTER NGAPAU CIN HAU LETTER HAPAU CIN HAU LETTER GAPA" + + "U CIN HAU LETTER KHAPAU CIN HAU LETTER SAPAU CIN HAU LETTER BAPAU CIN HA" + + "U LETTER CAPAU CIN HAU LETTER TAPAU CIN HAU LETTER THAPAU CIN HAU LETTER" + + " NAPAU CIN HAU LETTER PHAPAU CIN HAU LETTER RAPAU CIN HAU LETTER FAPAU C" + + "IN HAU LETTER CHAPAU CIN HAU LETTER APAU CIN HAU LETTER EPAU CIN HAU LET" + + "TER IPAU CIN HAU LETTER OPAU CIN HAU LETTER UPAU CIN HAU LETTER UAPAU CI" + + "N HAU LETTER IAPAU CIN HAU LETTER FINAL PPAU CIN HAU LETTER FINAL KPAU C" + + "IN HAU LETTER FINAL TPAU CIN HAU LETTER FINAL MPAU CIN HAU LETTER FINAL " + + "NPAU CIN HAU LETTER FINAL LPAU CIN HAU LETTER FINAL WPAU CIN HAU LETTER " + + "FINAL NGPAU CIN HAU LETTER FINAL YPAU CIN HAU RISING TONE LONGPAU CIN HA" + + "U RISING TONEPAU CIN HAU SANDHI GLOTTAL STOPPAU CIN HAU RISING TONE LONG" + + " FINALPAU CIN HAU RISING TONE FINALPAU CIN HAU SANDHI GLOTTAL STOP FINAL" + + "PAU CIN HAU SANDHI TONE LONGPAU CIN HAU SANDHI TONEPAU CIN HAU SANDHI TO" + + "NE LONG FINALPAU CIN HAU SANDHI TONE FINALPAU CIN HAU MID-LEVEL TONEPAU " + + "CIN HAU GLOTTAL STOP VARIANTPAU CIN HAU MID-LEVEL TONE LONG FINALPAU CIN" + + " HAU MID-LEVEL TONE FINALPAU CIN HAU LOW-FALLING TONE LONGPAU CIN HAU LO") + ("" + + "W-FALLING TONEPAU CIN HAU GLOTTAL STOPPAU CIN HAU LOW-FALLING TONE LONG " + + "FINALPAU CIN HAU LOW-FALLING TONE FINALPAU CIN HAU GLOTTAL STOP FINALBHA" + + "IKSUKI LETTER ABHAIKSUKI LETTER AABHAIKSUKI LETTER IBHAIKSUKI LETTER IIB" + + "HAIKSUKI LETTER UBHAIKSUKI LETTER UUBHAIKSUKI LETTER VOCALIC RBHAIKSUKI " + + "LETTER VOCALIC RRBHAIKSUKI LETTER VOCALIC LBHAIKSUKI LETTER EBHAIKSUKI L" + + "ETTER AIBHAIKSUKI LETTER OBHAIKSUKI LETTER AUBHAIKSUKI LETTER KABHAIKSUK" + + "I LETTER KHABHAIKSUKI LETTER GABHAIKSUKI LETTER GHABHAIKSUKI LETTER NGAB" + + "HAIKSUKI LETTER CABHAIKSUKI LETTER CHABHAIKSUKI LETTER JABHAIKSUKI LETTE" + + "R JHABHAIKSUKI LETTER NYABHAIKSUKI LETTER TTABHAIKSUKI LETTER TTHABHAIKS" + + "UKI LETTER DDABHAIKSUKI LETTER DDHABHAIKSUKI LETTER NNABHAIKSUKI LETTER " + + "TABHAIKSUKI LETTER THABHAIKSUKI LETTER DABHAIKSUKI LETTER DHABHAIKSUKI L" + + "ETTER NABHAIKSUKI LETTER PABHAIKSUKI LETTER PHABHAIKSUKI LETTER BABHAIKS" + + "UKI LETTER BHABHAIKSUKI LETTER MABHAIKSUKI LETTER YABHAIKSUKI LETTER RAB" + + "HAIKSUKI LETTER LABHAIKSUKI LETTER VABHAIKSUKI LETTER SHABHAIKSUKI LETTE" + + "R SSABHAIKSUKI LETTER SABHAIKSUKI LETTER HABHAIKSUKI VOWEL SIGN AABHAIKS" + + "UKI VOWEL SIGN IBHAIKSUKI VOWEL SIGN IIBHAIKSUKI VOWEL SIGN UBHAIKSUKI V" + + "OWEL SIGN UUBHAIKSUKI VOWEL SIGN VOCALIC RBHAIKSUKI VOWEL SIGN VOCALIC R" + + "RBHAIKSUKI VOWEL SIGN VOCALIC LBHAIKSUKI VOWEL SIGN EBHAIKSUKI VOWEL SIG" + + "N AIBHAIKSUKI VOWEL SIGN OBHAIKSUKI VOWEL SIGN AUBHAIKSUKI SIGN CANDRABI" + + "NDUBHAIKSUKI SIGN ANUSVARABHAIKSUKI SIGN VISARGABHAIKSUKI SIGN VIRAMABHA" + + "IKSUKI SIGN AVAGRAHABHAIKSUKI DANDABHAIKSUKI DOUBLE DANDABHAIKSUKI WORD " + + "SEPARATORBHAIKSUKI GAP FILLER-1BHAIKSUKI GAP FILLER-2BHAIKSUKI DIGIT ZER" + + "OBHAIKSUKI DIGIT ONEBHAIKSUKI DIGIT TWOBHAIKSUKI DIGIT THREEBHAIKSUKI DI" + + "GIT FOURBHAIKSUKI DIGIT FIVEBHAIKSUKI DIGIT SIXBHAIKSUKI DIGIT SEVENBHAI" + + "KSUKI DIGIT EIGHTBHAIKSUKI DIGIT NINEBHAIKSUKI NUMBER ONEBHAIKSUKI NUMBE" + + "R TWOBHAIKSUKI NUMBER THREEBHAIKSUKI NUMBER FOURBHAIKSUKI NUMBER FIVEBHA" + + "IKSUKI NUMBER SIXBHAIKSUKI NUMBER SEVENBHAIKSUKI NUMBER EIGHTBHAIKSUKI N" + + "UMBER NINEBHAIKSUKI NUMBER TENBHAIKSUKI NUMBER TWENTYBHAIKSUKI NUMBER TH" + + "IRTYBHAIKSUKI NUMBER FORTYBHAIKSUKI NUMBER FIFTYBHAIKSUKI NUMBER SIXTYBH" + + "AIKSUKI NUMBER SEVENTYBHAIKSUKI NUMBER EIGHTYBHAIKSUKI NUMBER NINETYBHAI" + + "KSUKI HUNDREDS UNIT MARKMARCHEN HEAD MARKMARCHEN MARK SHADMARCHEN LETTER" + + " KAMARCHEN LETTER KHAMARCHEN LETTER GAMARCHEN LETTER NGAMARCHEN LETTER C" + + "AMARCHEN LETTER CHAMARCHEN LETTER JAMARCHEN LETTER NYAMARCHEN LETTER TAM" + + "ARCHEN LETTER THAMARCHEN LETTER DAMARCHEN LETTER NAMARCHEN LETTER PAMARC" + + "HEN LETTER PHAMARCHEN LETTER BAMARCHEN LETTER MAMARCHEN LETTER TSAMARCHE" + + "N LETTER TSHAMARCHEN LETTER DZAMARCHEN LETTER WAMARCHEN LETTER ZHAMARCHE" + + "N LETTER ZAMARCHEN LETTER -AMARCHEN LETTER YAMARCHEN LETTER RAMARCHEN LE" + + "TTER LAMARCHEN LETTER SHAMARCHEN LETTER SAMARCHEN LETTER HAMARCHEN LETTE" + + "R AMARCHEN SUBJOINED LETTER KAMARCHEN SUBJOINED LETTER KHAMARCHEN SUBJOI" + + "NED LETTER GAMARCHEN SUBJOINED LETTER NGAMARCHEN SUBJOINED LETTER CAMARC" + + "HEN SUBJOINED LETTER CHAMARCHEN SUBJOINED LETTER JAMARCHEN SUBJOINED LET" + + "TER NYAMARCHEN SUBJOINED LETTER TAMARCHEN SUBJOINED LETTER THAMARCHEN SU" + + "BJOINED LETTER DAMARCHEN SUBJOINED LETTER NAMARCHEN SUBJOINED LETTER PAM" + + "ARCHEN SUBJOINED LETTER PHAMARCHEN SUBJOINED LETTER BAMARCHEN SUBJOINED " + + "LETTER MAMARCHEN SUBJOINED LETTER TSAMARCHEN SUBJOINED LETTER TSHAMARCHE" + + "N SUBJOINED LETTER DZAMARCHEN SUBJOINED LETTER WAMARCHEN SUBJOINED LETTE" + + "R ZHAMARCHEN SUBJOINED LETTER ZAMARCHEN SUBJOINED LETTER YAMARCHEN SUBJO" + + "INED LETTER RAMARCHEN SUBJOINED LETTER LAMARCHEN SUBJOINED LETTER SHAMAR" + + "CHEN SUBJOINED LETTER SAMARCHEN SUBJOINED LETTER HAMARCHEN SUBJOINED LET" + + "TER AMARCHEN VOWEL SIGN AAMARCHEN VOWEL SIGN IMARCHEN VOWEL SIGN UMARCHE" + + "N VOWEL SIGN EMARCHEN VOWEL SIGN OMARCHEN SIGN ANUSVARAMARCHEN SIGN CAND" + + "RABINDUCUNEIFORM SIGN ACUNEIFORM SIGN A TIMES ACUNEIFORM SIGN A TIMES BA" + + "DCUNEIFORM SIGN A TIMES GAN2 TENUCUNEIFORM SIGN A TIMES HACUNEIFORM SIGN" + + " A TIMES IGICUNEIFORM SIGN A TIMES LAGAR GUNUCUNEIFORM SIGN A TIMES MUSH" + + "CUNEIFORM SIGN A TIMES SAGCUNEIFORM SIGN A2CUNEIFORM SIGN ABCUNEIFORM SI" + + "GN AB TIMES ASH2CUNEIFORM SIGN AB TIMES DUN3 GUNUCUNEIFORM SIGN AB TIMES" + + " GALCUNEIFORM SIGN AB TIMES GAN2 TENUCUNEIFORM SIGN AB TIMES HACUNEIFORM" + + " SIGN AB TIMES IGI GUNUCUNEIFORM SIGN AB TIMES IMINCUNEIFORM SIGN AB TIM" + + "ES LAGABCUNEIFORM SIGN AB TIMES SHESHCUNEIFORM SIGN AB TIMES U PLUS U PL" + + "US UCUNEIFORM SIGN AB GUNUCUNEIFORM SIGN AB2CUNEIFORM SIGN AB2 TIMES BAL" + + "AGCUNEIFORM SIGN AB2 TIMES GAN2 TENUCUNEIFORM SIGN AB2 TIMES ME PLUS ENC" + + "UNEIFORM SIGN AB2 TIMES SHA3CUNEIFORM SIGN AB2 TIMES TAK4CUNEIFORM SIGN " + + "ADCUNEIFORM SIGN AKCUNEIFORM SIGN AK TIMES ERIN2CUNEIFORM SIGN AK TIMES " + + "SHITA PLUS GISHCUNEIFORM SIGN ALCUNEIFORM SIGN AL TIMES ALCUNEIFORM SIGN") + ("" + + " AL TIMES DIM2CUNEIFORM SIGN AL TIMES GISHCUNEIFORM SIGN AL TIMES HACUNE" + + "IFORM SIGN AL TIMES KAD3CUNEIFORM SIGN AL TIMES KICUNEIFORM SIGN AL TIME" + + "S SHECUNEIFORM SIGN AL TIMES USHCUNEIFORM SIGN ALANCUNEIFORM SIGN ALEPHC" + + "UNEIFORM SIGN AMARCUNEIFORM SIGN AMAR TIMES SHECUNEIFORM SIGN ANCUNEIFOR" + + "M SIGN AN OVER ANCUNEIFORM SIGN AN THREE TIMESCUNEIFORM SIGN AN PLUS NAG" + + "A OPPOSING AN PLUS NAGACUNEIFORM SIGN AN PLUS NAGA SQUAREDCUNEIFORM SIGN" + + " ANSHECUNEIFORM SIGN APINCUNEIFORM SIGN ARADCUNEIFORM SIGN ARAD TIMES KU" + + "RCUNEIFORM SIGN ARKABCUNEIFORM SIGN ASAL2CUNEIFORM SIGN ASHCUNEIFORM SIG" + + "N ASH ZIDA TENUCUNEIFORM SIGN ASH KABA TENUCUNEIFORM SIGN ASH OVER ASH T" + + "UG2 OVER TUG2 TUG2 OVER TUG2 PAPCUNEIFORM SIGN ASH OVER ASH OVER ASHCUNE" + + "IFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASHCUNEIFORM" + + " SIGN ASH2CUNEIFORM SIGN ASHGABCUNEIFORM SIGN BACUNEIFORM SIGN BADCUNEIF" + + "ORM SIGN BAG3CUNEIFORM SIGN BAHAR2CUNEIFORM SIGN BALCUNEIFORM SIGN BAL O" + + "VER BALCUNEIFORM SIGN BALAGCUNEIFORM SIGN BARCUNEIFORM SIGN BARA2CUNEIFO" + + "RM SIGN BICUNEIFORM SIGN BI TIMES ACUNEIFORM SIGN BI TIMES GARCUNEIFORM " + + "SIGN BI TIMES IGI GUNUCUNEIFORM SIGN BUCUNEIFORM SIGN BU OVER BU ABCUNEI" + + "FORM SIGN BU OVER BU UNCUNEIFORM SIGN BU CROSSING BUCUNEIFORM SIGN BULUG" + + "CUNEIFORM SIGN BULUG OVER BULUGCUNEIFORM SIGN BURCUNEIFORM SIGN BUR2CUNE" + + "IFORM SIGN DACUNEIFORM SIGN DAGCUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MA" + + "SHCUNEIFORM SIGN DAG KISIM5 TIMES AMARCUNEIFORM SIGN DAG KISIM5 TIMES BA" + + "LAGCUNEIFORM SIGN DAG KISIM5 TIMES BICUNEIFORM SIGN DAG KISIM5 TIMES GAC" + + "UNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASHCUNEIFORM SIGN DAG KISIM5 TIM" + + "ES GICUNEIFORM SIGN DAG KISIM5 TIMES GIR2CUNEIFORM SIGN DAG KISIM5 TIMES" + + " GUDCUNEIFORM SIGN DAG KISIM5 TIMES HACUNEIFORM SIGN DAG KISIM5 TIMES IR" + + "CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LUCUNEIFORM SIGN DAG KISIM5 TIME" + + "S KAKCUNEIFORM SIGN DAG KISIM5 TIMES LACUNEIFORM SIGN DAG KISIM5 TIMES L" + + "UCUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2CUNEIFORM SIGN DAG KISIM5 " + + "TIMES LUMCUNEIFORM SIGN DAG KISIM5 TIMES NECUNEIFORM SIGN DAG KISIM5 TIM" + + "ES PAP PLUS PAPCUNEIFORM SIGN DAG KISIM5 TIMES SICUNEIFORM SIGN DAG KISI" + + "M5 TIMES TAK4CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2CUNEIFORM SIGN " + + "DAG KISIM5 TIMES USHCUNEIFORM SIGN DAMCUNEIFORM SIGN DARCUNEIFORM SIGN D" + + "ARA3CUNEIFORM SIGN DARA4CUNEIFORM SIGN DICUNEIFORM SIGN DIBCUNEIFORM SIG" + + "N DIMCUNEIFORM SIGN DIM TIMES SHECUNEIFORM SIGN DIM2CUNEIFORM SIGN DINCU" + + "NEIFORM SIGN DIN KASKAL U GUNU DISHCUNEIFORM SIGN DISHCUNEIFORM SIGN DUC" + + "UNEIFORM SIGN DU OVER DUCUNEIFORM SIGN DU GUNUCUNEIFORM SIGN DU SHESHIGC" + + "UNEIFORM SIGN DUBCUNEIFORM SIGN DUB TIMES ESH2CUNEIFORM SIGN DUB2CUNEIFO" + + "RM SIGN DUGCUNEIFORM SIGN DUGUDCUNEIFORM SIGN DUHCUNEIFORM SIGN DUNCUNEI" + + "FORM SIGN DUN3CUNEIFORM SIGN DUN3 GUNUCUNEIFORM SIGN DUN3 GUNU GUNUCUNEI" + + "FORM SIGN DUN4CUNEIFORM SIGN DUR2CUNEIFORM SIGN ECUNEIFORM SIGN E TIMES " + + "PAPCUNEIFORM SIGN E OVER E NUN OVER NUNCUNEIFORM SIGN E2CUNEIFORM SIGN E" + + "2 TIMES A PLUS HA PLUS DACUNEIFORM SIGN E2 TIMES GARCUNEIFORM SIGN E2 TI" + + "MES MICUNEIFORM SIGN E2 TIMES SALCUNEIFORM SIGN E2 TIMES SHECUNEIFORM SI" + + "GN E2 TIMES UCUNEIFORM SIGN EDINCUNEIFORM SIGN EGIRCUNEIFORM SIGN ELCUNE" + + "IFORM SIGN ENCUNEIFORM SIGN EN TIMES GAN2CUNEIFORM SIGN EN TIMES GAN2 TE" + + "NUCUNEIFORM SIGN EN TIMES MECUNEIFORM SIGN EN CROSSING ENCUNEIFORM SIGN " + + "EN OPPOSING ENCUNEIFORM SIGN EN SQUAREDCUNEIFORM SIGN ERENCUNEIFORM SIGN" + + " ERIN2CUNEIFORM SIGN ESH2CUNEIFORM SIGN EZENCUNEIFORM SIGN EZEN TIMES AC" + + "UNEIFORM SIGN EZEN TIMES A PLUS LALCUNEIFORM SIGN EZEN TIMES A PLUS LAL " + + "TIMES LALCUNEIFORM SIGN EZEN TIMES ANCUNEIFORM SIGN EZEN TIMES BADCUNEIF" + + "ORM SIGN EZEN TIMES DUN3 GUNUCUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNUCUN" + + "EIFORM SIGN EZEN TIMES HACUNEIFORM SIGN EZEN TIMES HA GUNUCUNEIFORM SIGN" + + " EZEN TIMES IGI GUNUCUNEIFORM SIGN EZEN TIMES KASKALCUNEIFORM SIGN EZEN " + + "TIMES KASKAL SQUAREDCUNEIFORM SIGN EZEN TIMES KU3CUNEIFORM SIGN EZEN TIM" + + "ES LACUNEIFORM SIGN EZEN TIMES LAL TIMES LALCUNEIFORM SIGN EZEN TIMES LI" + + "CUNEIFORM SIGN EZEN TIMES LUCUNEIFORM SIGN EZEN TIMES U2CUNEIFORM SIGN E" + + "ZEN TIMES UDCUNEIFORM SIGN GACUNEIFORM SIGN GA GUNUCUNEIFORM SIGN GA2CUN" + + "EIFORM SIGN GA2 TIMES A PLUS DA PLUS HACUNEIFORM SIGN GA2 TIMES A PLUS H" + + "ACUNEIFORM SIGN GA2 TIMES A PLUS IGICUNEIFORM SIGN GA2 TIMES AB2 TENU PL" + + "US TABCUNEIFORM SIGN GA2 TIMES ANCUNEIFORM SIGN GA2 TIMES ASHCUNEIFORM S" + + "IGN GA2 TIMES ASH2 PLUS GALCUNEIFORM SIGN GA2 TIMES BADCUNEIFORM SIGN GA" + + "2 TIMES BAR PLUS RACUNEIFORM SIGN GA2 TIMES BURCUNEIFORM SIGN GA2 TIMES " + + "BUR PLUS RACUNEIFORM SIGN GA2 TIMES DACUNEIFORM SIGN GA2 TIMES DICUNEIFO" + + "RM SIGN GA2 TIMES DIM TIMES SHECUNEIFORM SIGN GA2 TIMES DUBCUNEIFORM SIG" + + "N GA2 TIMES ELCUNEIFORM SIGN GA2 TIMES EL PLUS LACUNEIFORM SIGN GA2 TIME") + ("" + + "S ENCUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENUCUNEIFORM SIGN GA2 TIMES " + + "GAN2 TENUCUNEIFORM SIGN GA2 TIMES GARCUNEIFORM SIGN GA2 TIMES GICUNEIFOR" + + "M SIGN GA2 TIMES GI4CUNEIFORM SIGN GA2 TIMES GI4 PLUS ACUNEIFORM SIGN GA" + + "2 TIMES GIR2 PLUS SUCUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2CUNEIFO" + + "RM SIGN GA2 TIMES HALCUNEIFORM SIGN GA2 TIMES HAL PLUS LACUNEIFORM SIGN " + + "GA2 TIMES HI PLUS LICUNEIFORM SIGN GA2 TIMES HUB2CUNEIFORM SIGN GA2 TIME" + + "S IGI GUNUCUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASHCUNEIFORM SIGN GA" + + "2 TIMES KAKCUNEIFORM SIGN GA2 TIMES KASKALCUNEIFORM SIGN GA2 TIMES KIDCU" + + "NEIFORM SIGN GA2 TIMES KID PLUS LALCUNEIFORM SIGN GA2 TIMES KU3 PLUS ANC" + + "UNEIFORM SIGN GA2 TIMES LACUNEIFORM SIGN GA2 TIMES ME PLUS ENCUNEIFORM S" + + "IGN GA2 TIMES MICUNEIFORM SIGN GA2 TIMES NUNCUNEIFORM SIGN GA2 TIMES NUN" + + " OVER NUNCUNEIFORM SIGN GA2 TIMES PACUNEIFORM SIGN GA2 TIMES SALCUNEIFOR" + + "M SIGN GA2 TIMES SARCUNEIFORM SIGN GA2 TIMES SHECUNEIFORM SIGN GA2 TIMES" + + " SHE PLUS TURCUNEIFORM SIGN GA2 TIMES SHIDCUNEIFORM SIGN GA2 TIMES SUMCU" + + "NEIFORM SIGN GA2 TIMES TAK4CUNEIFORM SIGN GA2 TIMES UCUNEIFORM SIGN GA2 " + + "TIMES UDCUNEIFORM SIGN GA2 TIMES UD PLUS DUCUNEIFORM SIGN GA2 OVER GA2CU" + + "NEIFORM SIGN GABACUNEIFORM SIGN GABA CROSSING GABACUNEIFORM SIGN GADCUNE" + + "IFORM SIGN GAD OVER GAD GAR OVER GARCUNEIFORM SIGN GALCUNEIFORM SIGN GAL" + + " GAD OVER GAD GAR OVER GARCUNEIFORM SIGN GALAMCUNEIFORM SIGN GAMCUNEIFOR" + + "M SIGN GANCUNEIFORM SIGN GAN2CUNEIFORM SIGN GAN2 TENUCUNEIFORM SIGN GAN2" + + " OVER GAN2CUNEIFORM SIGN GAN2 CROSSING GAN2CUNEIFORM SIGN GARCUNEIFORM S" + + "IGN GAR3CUNEIFORM SIGN GASHANCUNEIFORM SIGN GESHTINCUNEIFORM SIGN GESHTI" + + "N TIMES KURCUNEIFORM SIGN GICUNEIFORM SIGN GI TIMES ECUNEIFORM SIGN GI T" + + "IMES UCUNEIFORM SIGN GI CROSSING GICUNEIFORM SIGN GI4CUNEIFORM SIGN GI4 " + + "OVER GI4CUNEIFORM SIGN GI4 CROSSING GI4CUNEIFORM SIGN GIDIMCUNEIFORM SIG" + + "N GIR2CUNEIFORM SIGN GIR2 GUNUCUNEIFORM SIGN GIR3CUNEIFORM SIGN GIR3 TIM" + + "ES A PLUS IGICUNEIFORM SIGN GIR3 TIMES GAN2 TENUCUNEIFORM SIGN GIR3 TIME" + + "S IGICUNEIFORM SIGN GIR3 TIMES LU PLUS IGICUNEIFORM SIGN GIR3 TIMES PACU" + + "NEIFORM SIGN GISALCUNEIFORM SIGN GISHCUNEIFORM SIGN GISH CROSSING GISHCU" + + "NEIFORM SIGN GISH TIMES BADCUNEIFORM SIGN GISH TIMES TAK4CUNEIFORM SIGN " + + "GISH TENUCUNEIFORM SIGN GUCUNEIFORM SIGN GU CROSSING GUCUNEIFORM SIGN GU" + + "2CUNEIFORM SIGN GU2 TIMES KAKCUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU" + + "CUNEIFORM SIGN GU2 TIMES NUNCUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2CUNEIF" + + "ORM SIGN GU2 GUNUCUNEIFORM SIGN GUDCUNEIFORM SIGN GUD TIMES A PLUS KURCU" + + "NEIFORM SIGN GUD TIMES KURCUNEIFORM SIGN GUD OVER GUD LUGALCUNEIFORM SIG" + + "N GULCUNEIFORM SIGN GUMCUNEIFORM SIGN GUM TIMES SHECUNEIFORM SIGN GURCUN" + + "EIFORM SIGN GUR7CUNEIFORM SIGN GURUNCUNEIFORM SIGN GURUSHCUNEIFORM SIGN " + + "HACUNEIFORM SIGN HA TENUCUNEIFORM SIGN HA GUNUCUNEIFORM SIGN HALCUNEIFOR" + + "M SIGN HICUNEIFORM SIGN HI TIMES ASHCUNEIFORM SIGN HI TIMES ASH2CUNEIFOR" + + "M SIGN HI TIMES BADCUNEIFORM SIGN HI TIMES DISHCUNEIFORM SIGN HI TIMES G" + + "ADCUNEIFORM SIGN HI TIMES KINCUNEIFORM SIGN HI TIMES NUNCUNEIFORM SIGN H" + + "I TIMES SHECUNEIFORM SIGN HI TIMES UCUNEIFORM SIGN HUCUNEIFORM SIGN HUB2" + + "CUNEIFORM SIGN HUB2 TIMES ANCUNEIFORM SIGN HUB2 TIMES HALCUNEIFORM SIGN " + + "HUB2 TIMES KASKALCUNEIFORM SIGN HUB2 TIMES LISHCUNEIFORM SIGN HUB2 TIMES" + + " UDCUNEIFORM SIGN HUL2CUNEIFORM SIGN ICUNEIFORM SIGN I ACUNEIFORM SIGN I" + + "BCUNEIFORM SIGN IDIMCUNEIFORM SIGN IDIM OVER IDIM BURCUNEIFORM SIGN IDIM" + + " OVER IDIM SQUAREDCUNEIFORM SIGN IGCUNEIFORM SIGN IGICUNEIFORM SIGN IGI " + + "DIBCUNEIFORM SIGN IGI RICUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OV" + + "ER UDCUNEIFORM SIGN IGI GUNUCUNEIFORM SIGN ILCUNEIFORM SIGN IL TIMES GAN" + + "2 TENUCUNEIFORM SIGN IL2CUNEIFORM SIGN IMCUNEIFORM SIGN IM TIMES TAK4CUN" + + "EIFORM SIGN IM CROSSING IMCUNEIFORM SIGN IM OPPOSING IMCUNEIFORM SIGN IM" + + " SQUAREDCUNEIFORM SIGN IMINCUNEIFORM SIGN INCUNEIFORM SIGN IRCUNEIFORM S" + + "IGN ISHCUNEIFORM SIGN KACUNEIFORM SIGN KA TIMES ACUNEIFORM SIGN KA TIMES" + + " ADCUNEIFORM SIGN KA TIMES AD PLUS KU3CUNEIFORM SIGN KA TIMES ASH2CUNEIF" + + "ORM SIGN KA TIMES BADCUNEIFORM SIGN KA TIMES BALAGCUNEIFORM SIGN KA TIME" + + "S BARCUNEIFORM SIGN KA TIMES BICUNEIFORM SIGN KA TIMES ERIN2CUNEIFORM SI" + + "GN KA TIMES ESH2CUNEIFORM SIGN KA TIMES GACUNEIFORM SIGN KA TIMES GALCUN" + + "EIFORM SIGN KA TIMES GAN2 TENUCUNEIFORM SIGN KA TIMES GARCUNEIFORM SIGN " + + "KA TIMES GAR PLUS SHA3 PLUS ACUNEIFORM SIGN KA TIMES GICUNEIFORM SIGN KA" + + " TIMES GIR2CUNEIFORM SIGN KA TIMES GISH PLUS SARCUNEIFORM SIGN KA TIMES " + + "GISH CROSSING GISHCUNEIFORM SIGN KA TIMES GUCUNEIFORM SIGN KA TIMES GUR7" + + "CUNEIFORM SIGN KA TIMES IGICUNEIFORM SIGN KA TIMES IMCUNEIFORM SIGN KA T" + + "IMES KAKCUNEIFORM SIGN KA TIMES KICUNEIFORM SIGN KA TIMES KIDCUNEIFORM S" + + "IGN KA TIMES LICUNEIFORM SIGN KA TIMES LUCUNEIFORM SIGN KA TIMES MECUNEI") + ("" + + "FORM SIGN KA TIMES ME PLUS DUCUNEIFORM SIGN KA TIMES ME PLUS GICUNEIFORM" + + " SIGN KA TIMES ME PLUS TECUNEIFORM SIGN KA TIMES MICUNEIFORM SIGN KA TIM" + + "ES MI PLUS NUNUZCUNEIFORM SIGN KA TIMES NECUNEIFORM SIGN KA TIMES NUNCUN" + + "EIFORM SIGN KA TIMES PICUNEIFORM SIGN KA TIMES RUCUNEIFORM SIGN KA TIMES" + + " SACUNEIFORM SIGN KA TIMES SARCUNEIFORM SIGN KA TIMES SHACUNEIFORM SIGN " + + "KA TIMES SHECUNEIFORM SIGN KA TIMES SHIDCUNEIFORM SIGN KA TIMES SHUCUNEI" + + "FORM SIGN KA TIMES SIGCUNEIFORM SIGN KA TIMES SUHURCUNEIFORM SIGN KA TIM" + + "ES TARCUNEIFORM SIGN KA TIMES UCUNEIFORM SIGN KA TIMES U2CUNEIFORM SIGN " + + "KA TIMES UDCUNEIFORM SIGN KA TIMES UMUM TIMES PACUNEIFORM SIGN KA TIMES " + + "USHCUNEIFORM SIGN KA TIMES ZICUNEIFORM SIGN KA2CUNEIFORM SIGN KA2 CROSSI" + + "NG KA2CUNEIFORM SIGN KABCUNEIFORM SIGN KAD2CUNEIFORM SIGN KAD3CUNEIFORM " + + "SIGN KAD4CUNEIFORM SIGN KAD5CUNEIFORM SIGN KAD5 OVER KAD5CUNEIFORM SIGN " + + "KAKCUNEIFORM SIGN KAK TIMES IGI GUNUCUNEIFORM SIGN KALCUNEIFORM SIGN KAL" + + " TIMES BADCUNEIFORM SIGN KAL CROSSING KALCUNEIFORM SIGN KAM2CUNEIFORM SI" + + "GN KAM4CUNEIFORM SIGN KASKALCUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAG" + + "AB TIMES UCUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIM" + + "ES UCUNEIFORM SIGN KESH2CUNEIFORM SIGN KICUNEIFORM SIGN KI TIMES BADCUNE" + + "IFORM SIGN KI TIMES UCUNEIFORM SIGN KI TIMES UDCUNEIFORM SIGN KIDCUNEIFO" + + "RM SIGN KINCUNEIFORM SIGN KISALCUNEIFORM SIGN KISHCUNEIFORM SIGN KISIM5C" + + "UNEIFORM SIGN KISIM5 OVER KISIM5CUNEIFORM SIGN KUCUNEIFORM SIGN KU OVER " + + "HI TIMES ASH2 KU OVER HI TIMES ASH2CUNEIFORM SIGN KU3CUNEIFORM SIGN KU4C" + + "UNEIFORM SIGN KU4 VARIANT FORMCUNEIFORM SIGN KU7CUNEIFORM SIGN KULCUNEIF" + + "ORM SIGN KUL GUNUCUNEIFORM SIGN KUNCUNEIFORM SIGN KURCUNEIFORM SIGN KUR " + + "OPPOSING KURCUNEIFORM SIGN KUSHU2CUNEIFORM SIGN KWU318CUNEIFORM SIGN LAC" + + "UNEIFORM SIGN LAGABCUNEIFORM SIGN LAGAB TIMES ACUNEIFORM SIGN LAGAB TIME" + + "S A PLUS DA PLUS HACUNEIFORM SIGN LAGAB TIMES A PLUS GARCUNEIFORM SIGN L" + + "AGAB TIMES A PLUS LALCUNEIFORM SIGN LAGAB TIMES ALCUNEIFORM SIGN LAGAB T" + + "IMES ANCUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENUCUNEIFORM SIGN LAGAB TIME" + + "S BADCUNEIFORM SIGN LAGAB TIMES BICUNEIFORM SIGN LAGAB TIMES DARCUNEIFOR" + + "M SIGN LAGAB TIMES ENCUNEIFORM SIGN LAGAB TIMES GACUNEIFORM SIGN LAGAB T" + + "IMES GARCUNEIFORM SIGN LAGAB TIMES GUDCUNEIFORM SIGN LAGAB TIMES GUD PLU" + + "S GUDCUNEIFORM SIGN LAGAB TIMES HACUNEIFORM SIGN LAGAB TIMES HALCUNEIFOR" + + "M SIGN LAGAB TIMES HI TIMES NUNCUNEIFORM SIGN LAGAB TIMES IGI GUNUCUNEIF" + + "ORM SIGN LAGAB TIMES IMCUNEIFORM SIGN LAGAB TIMES IM PLUS HACUNEIFORM SI" + + "GN LAGAB TIMES IM PLUS LUCUNEIFORM SIGN LAGAB TIMES KICUNEIFORM SIGN LAG" + + "AB TIMES KINCUNEIFORM SIGN LAGAB TIMES KU3CUNEIFORM SIGN LAGAB TIMES KUL" + + "CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS ACUNEIFORM SIGN LAGAB TIMES " + + "LAGABCUNEIFORM SIGN LAGAB TIMES LISHCUNEIFORM SIGN LAGAB TIMES LUCUNEIFO" + + "RM SIGN LAGAB TIMES LULCUNEIFORM SIGN LAGAB TIMES MECUNEIFORM SIGN LAGAB" + + " TIMES ME PLUS ENCUNEIFORM SIGN LAGAB TIMES MUSHCUNEIFORM SIGN LAGAB TIM" + + "ES NECUNEIFORM SIGN LAGAB TIMES SHE PLUS SUMCUNEIFORM SIGN LAGAB TIMES S" + + "HITA PLUS GISH PLUS ERIN2CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU" + + "CUNEIFORM SIGN LAGAB TIMES SHU2CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2" + + "CUNEIFORM SIGN LAGAB TIMES SUMCUNEIFORM SIGN LAGAB TIMES TAGCUNEIFORM SI" + + "GN LAGAB TIMES TAK4CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NAC" + + "UNEIFORM SIGN LAGAB TIMES UCUNEIFORM SIGN LAGAB TIMES U PLUS ACUNEIFORM " + + "SIGN LAGAB TIMES U PLUS U PLUS UCUNEIFORM SIGN LAGAB TIMES U2 PLUS ASHCU" + + "NEIFORM SIGN LAGAB TIMES UDCUNEIFORM SIGN LAGAB TIMES USHCUNEIFORM SIGN " + + "LAGAB SQUAREDCUNEIFORM SIGN LAGARCUNEIFORM SIGN LAGAR TIMES SHECUNEIFORM" + + " SIGN LAGAR TIMES SHE PLUS SUMCUNEIFORM SIGN LAGAR GUNUCUNEIFORM SIGN LA" + + "GAR GUNU OVER LAGAR GUNU SHECUNEIFORM SIGN LAHSHUCUNEIFORM SIGN LALCUNEI" + + "FORM SIGN LAL TIMES LALCUNEIFORM SIGN LAMCUNEIFORM SIGN LAM TIMES KURCUN" + + "EIFORM SIGN LAM TIMES KUR PLUS RUCUNEIFORM SIGN LICUNEIFORM SIGN LILCUNE" + + "IFORM SIGN LIMMU2CUNEIFORM SIGN LISHCUNEIFORM SIGN LUCUNEIFORM SIGN LU T" + + "IMES BADCUNEIFORM SIGN LU2CUNEIFORM SIGN LU2 TIMES ALCUNEIFORM SIGN LU2 " + + "TIMES BADCUNEIFORM SIGN LU2 TIMES ESH2CUNEIFORM SIGN LU2 TIMES ESH2 TENU" + + "CUNEIFORM SIGN LU2 TIMES GAN2 TENUCUNEIFORM SIGN LU2 TIMES HI TIMES BADC" + + "UNEIFORM SIGN LU2 TIMES IMCUNEIFORM SIGN LU2 TIMES KAD2CUNEIFORM SIGN LU" + + "2 TIMES KAD3CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASHCUNEIFORM SIGN LU2 TIM" + + "ES KICUNEIFORM SIGN LU2 TIMES LA PLUS ASHCUNEIFORM SIGN LU2 TIMES LAGABC" + + "UNEIFORM SIGN LU2 TIMES ME PLUS ENCUNEIFORM SIGN LU2 TIMES NECUNEIFORM S" + + "IGN LU2 TIMES NUCUNEIFORM SIGN LU2 TIMES SI PLUS ASHCUNEIFORM SIGN LU2 T" + + "IMES SIK2 PLUS BUCUNEIFORM SIGN LU2 TIMES TUG2CUNEIFORM SIGN LU2 TENUCUN" + + "EIFORM SIGN LU2 CROSSING LU2CUNEIFORM SIGN LU2 OPPOSING LU2CUNEIFORM SIG") + ("" + + "N LU2 SQUAREDCUNEIFORM SIGN LU2 SHESHIGCUNEIFORM SIGN LU3CUNEIFORM SIGN " + + "LUGALCUNEIFORM SIGN LUGAL OVER LUGALCUNEIFORM SIGN LUGAL OPPOSING LUGALC" + + "UNEIFORM SIGN LUGAL SHESHIGCUNEIFORM SIGN LUHCUNEIFORM SIGN LULCUNEIFORM" + + " SIGN LUMCUNEIFORM SIGN LUM OVER LUMCUNEIFORM SIGN LUM OVER LUM GAR OVER" + + " GARCUNEIFORM SIGN MACUNEIFORM SIGN MA TIMES TAK4CUNEIFORM SIGN MA GUNUC" + + "UNEIFORM SIGN MA2CUNEIFORM SIGN MAHCUNEIFORM SIGN MARCUNEIFORM SIGN MASH" + + "CUNEIFORM SIGN MASH2CUNEIFORM SIGN MECUNEIFORM SIGN MESCUNEIFORM SIGN MI" + + "CUNEIFORM SIGN MINCUNEIFORM SIGN MUCUNEIFORM SIGN MU OVER MUCUNEIFORM SI" + + "GN MUGCUNEIFORM SIGN MUG GUNUCUNEIFORM SIGN MUNSUBCUNEIFORM SIGN MURGU2C" + + "UNEIFORM SIGN MUSHCUNEIFORM SIGN MUSH TIMES ACUNEIFORM SIGN MUSH TIMES K" + + "URCUNEIFORM SIGN MUSH TIMES ZACUNEIFORM SIGN MUSH OVER MUSHCUNEIFORM SIG" + + "N MUSH OVER MUSH TIMES A PLUS NACUNEIFORM SIGN MUSH CROSSING MUSHCUNEIFO" + + "RM SIGN MUSH3CUNEIFORM SIGN MUSH3 TIMES ACUNEIFORM SIGN MUSH3 TIMES A PL" + + "US DICUNEIFORM SIGN MUSH3 TIMES DICUNEIFORM SIGN MUSH3 GUNUCUNEIFORM SIG" + + "N NACUNEIFORM SIGN NA2CUNEIFORM SIGN NAGACUNEIFORM SIGN NAGA INVERTEDCUN" + + "EIFORM SIGN NAGA TIMES SHU TENUCUNEIFORM SIGN NAGA OPPOSING NAGACUNEIFOR" + + "M SIGN NAGARCUNEIFORM SIGN NAM NUTILLUCUNEIFORM SIGN NAMCUNEIFORM SIGN N" + + "AM2CUNEIFORM SIGN NECUNEIFORM SIGN NE TIMES ACUNEIFORM SIGN NE TIMES UDC" + + "UNEIFORM SIGN NE SHESHIGCUNEIFORM SIGN NICUNEIFORM SIGN NI TIMES ECUNEIF" + + "ORM SIGN NI2CUNEIFORM SIGN NIMCUNEIFORM SIGN NIM TIMES GAN2 TENUCUNEIFOR" + + "M SIGN NIM TIMES GAR PLUS GAN2 TENUCUNEIFORM SIGN NINDA2CUNEIFORM SIGN N" + + "INDA2 TIMES ANCUNEIFORM SIGN NINDA2 TIMES ASHCUNEIFORM SIGN NINDA2 TIMES" + + " ASH PLUS ASHCUNEIFORM SIGN NINDA2 TIMES GUDCUNEIFORM SIGN NINDA2 TIMES " + + "ME PLUS GAN2 TENUCUNEIFORM SIGN NINDA2 TIMES NECUNEIFORM SIGN NINDA2 TIM" + + "ES NUNCUNEIFORM SIGN NINDA2 TIMES SHECUNEIFORM SIGN NINDA2 TIMES SHE PLU" + + "S A ANCUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASHCUNEIFORM SIGN NINDA2 TIME" + + "S SHE PLUS ASH PLUS ASHCUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASHCUNEIFORM " + + "SIGN NINDA2 TIMES USHCUNEIFORM SIGN NISAGCUNEIFORM SIGN NUCUNEIFORM SIGN" + + " NU11CUNEIFORM SIGN NUNCUNEIFORM SIGN NUN LAGAR TIMES GARCUNEIFORM SIGN " + + "NUN LAGAR TIMES MASHCUNEIFORM SIGN NUN LAGAR TIMES SALCUNEIFORM SIGN NUN" + + " LAGAR TIMES SAL OVER NUN LAGAR TIMES SALCUNEIFORM SIGN NUN LAGAR TIMES " + + "USHCUNEIFORM SIGN NUN TENUCUNEIFORM SIGN NUN OVER NUNCUNEIFORM SIGN NUN " + + "CROSSING NUNCUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGARCUNEIFORM SI" + + "GN NUNUZCUNEIFORM SIGN NUNUZ AB2 TIMES ASHGABCUNEIFORM SIGN NUNUZ AB2 TI" + + "MES BICUNEIFORM SIGN NUNUZ AB2 TIMES DUGCUNEIFORM SIGN NUNUZ AB2 TIMES G" + + "UDCUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNUCUNEIFORM SIGN NUNUZ AB2 TIMES " + + "KAD3CUNEIFORM SIGN NUNUZ AB2 TIMES LACUNEIFORM SIGN NUNUZ AB2 TIMES NECU" + + "NEIFORM SIGN NUNUZ AB2 TIMES SILA3CUNEIFORM SIGN NUNUZ AB2 TIMES U2CUNEI" + + "FORM SIGN NUNUZ KISIM5 TIMES BICUNEIFORM SIGN NUNUZ KISIM5 TIMES BI UCUN" + + "EIFORM SIGN PACUNEIFORM SIGN PADCUNEIFORM SIGN PANCUNEIFORM SIGN PAPCUNE" + + "IFORM SIGN PESH2CUNEIFORM SIGN PICUNEIFORM SIGN PI TIMES ACUNEIFORM SIGN" + + " PI TIMES ABCUNEIFORM SIGN PI TIMES BICUNEIFORM SIGN PI TIMES BUCUNEIFOR" + + "M SIGN PI TIMES ECUNEIFORM SIGN PI TIMES ICUNEIFORM SIGN PI TIMES IBCUNE" + + "IFORM SIGN PI TIMES UCUNEIFORM SIGN PI TIMES U2CUNEIFORM SIGN PI CROSSIN" + + "G PICUNEIFORM SIGN PIRIGCUNEIFORM SIGN PIRIG TIMES KALCUNEIFORM SIGN PIR" + + "IG TIMES UDCUNEIFORM SIGN PIRIG TIMES ZACUNEIFORM SIGN PIRIG OPPOSING PI" + + "RIGCUNEIFORM SIGN RACUNEIFORM SIGN RABCUNEIFORM SIGN RICUNEIFORM SIGN RU" + + "CUNEIFORM SIGN SACUNEIFORM SIGN SAG NUTILLUCUNEIFORM SIGN SAGCUNEIFORM S" + + "IGN SAG TIMES ACUNEIFORM SIGN SAG TIMES DUCUNEIFORM SIGN SAG TIMES DUBCU" + + "NEIFORM SIGN SAG TIMES HACUNEIFORM SIGN SAG TIMES KAKCUNEIFORM SIGN SAG " + + "TIMES KURCUNEIFORM SIGN SAG TIMES LUMCUNEIFORM SIGN SAG TIMES MICUNEIFOR" + + "M SIGN SAG TIMES NUNCUNEIFORM SIGN SAG TIMES SALCUNEIFORM SIGN SAG TIMES" + + " SHIDCUNEIFORM SIGN SAG TIMES TABCUNEIFORM SIGN SAG TIMES U2CUNEIFORM SI" + + "GN SAG TIMES UBCUNEIFORM SIGN SAG TIMES UMCUNEIFORM SIGN SAG TIMES URCUN" + + "EIFORM SIGN SAG TIMES USHCUNEIFORM SIGN SAG OVER SAGCUNEIFORM SIGN SAG G" + + "UNUCUNEIFORM SIGN SALCUNEIFORM SIGN SAL LAGAB TIMES ASH2CUNEIFORM SIGN S" + + "ANGA2CUNEIFORM SIGN SARCUNEIFORM SIGN SHACUNEIFORM SIGN SHA3CUNEIFORM SI" + + "GN SHA3 TIMES ACUNEIFORM SIGN SHA3 TIMES BADCUNEIFORM SIGN SHA3 TIMES GI" + + "SHCUNEIFORM SIGN SHA3 TIMES NECUNEIFORM SIGN SHA3 TIMES SHU2CUNEIFORM SI" + + "GN SHA3 TIMES TURCUNEIFORM SIGN SHA3 TIMES UCUNEIFORM SIGN SHA3 TIMES U " + + "PLUS ACUNEIFORM SIGN SHA6CUNEIFORM SIGN SHAB6CUNEIFORM SIGN SHAR2CUNEIFO" + + "RM SIGN SHECUNEIFORM SIGN SHE HUCUNEIFORM SIGN SHE OVER SHE GAD OVER GAD" + + " GAR OVER GARCUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GARCUNEIF" + + "ORM SIGN SHEG9CUNEIFORM SIGN SHENCUNEIFORM SIGN SHESHCUNEIFORM SIGN SHES") + ("" + + "H2CUNEIFORM SIGN SHESHLAMCUNEIFORM SIGN SHIDCUNEIFORM SIGN SHID TIMES AC" + + "UNEIFORM SIGN SHID TIMES IMCUNEIFORM SIGN SHIMCUNEIFORM SIGN SHIM TIMES " + + "ACUNEIFORM SIGN SHIM TIMES BALCUNEIFORM SIGN SHIM TIMES BULUGCUNEIFORM S" + + "IGN SHIM TIMES DINCUNEIFORM SIGN SHIM TIMES GARCUNEIFORM SIGN SHIM TIMES" + + " IGICUNEIFORM SIGN SHIM TIMES IGI GUNUCUNEIFORM SIGN SHIM TIMES KUSHU2CU" + + "NEIFORM SIGN SHIM TIMES LULCUNEIFORM SIGN SHIM TIMES MUGCUNEIFORM SIGN S" + + "HIM TIMES SALCUNEIFORM SIGN SHINIGCUNEIFORM SIGN SHIRCUNEIFORM SIGN SHIR" + + " TENUCUNEIFORM SIGN SHIR OVER SHIR BUR OVER BURCUNEIFORM SIGN SHITACUNEI" + + "FORM SIGN SHUCUNEIFORM SIGN SHU OVER INVERTED SHUCUNEIFORM SIGN SHU2CUNE" + + "IFORM SIGN SHUBURCUNEIFORM SIGN SICUNEIFORM SIGN SI GUNUCUNEIFORM SIGN S" + + "IGCUNEIFORM SIGN SIG4CUNEIFORM SIGN SIG4 OVER SIG4 SHU2CUNEIFORM SIGN SI" + + "K2CUNEIFORM SIGN SILA3CUNEIFORM SIGN SUCUNEIFORM SIGN SU OVER SUCUNEIFOR" + + "M SIGN SUDCUNEIFORM SIGN SUD2CUNEIFORM SIGN SUHURCUNEIFORM SIGN SUMCUNEI" + + "FORM SIGN SUMASHCUNEIFORM SIGN SURCUNEIFORM SIGN SUR9CUNEIFORM SIGN TACU" + + "NEIFORM SIGN TA ASTERISKCUNEIFORM SIGN TA TIMES HICUNEIFORM SIGN TA TIME" + + "S MICUNEIFORM SIGN TA GUNUCUNEIFORM SIGN TABCUNEIFORM SIGN TAB OVER TAB " + + "NI OVER NI DISH OVER DISHCUNEIFORM SIGN TAB SQUAREDCUNEIFORM SIGN TAGCUN" + + "EIFORM SIGN TAG TIMES BICUNEIFORM SIGN TAG TIMES GUDCUNEIFORM SIGN TAG T" + + "IMES SHECUNEIFORM SIGN TAG TIMES SHUCUNEIFORM SIGN TAG TIMES TUG2CUNEIFO" + + "RM SIGN TAG TIMES UDCUNEIFORM SIGN TAK4CUNEIFORM SIGN TARCUNEIFORM SIGN " + + "TECUNEIFORM SIGN TE GUNUCUNEIFORM SIGN TICUNEIFORM SIGN TI TENUCUNEIFORM" + + " SIGN TILCUNEIFORM SIGN TIRCUNEIFORM SIGN TIR TIMES TAK4CUNEIFORM SIGN T" + + "IR OVER TIRCUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GARCUNEIFOR" + + "M SIGN TUCUNEIFORM SIGN TUG2CUNEIFORM SIGN TUKCUNEIFORM SIGN TUMCUNEIFOR" + + "M SIGN TURCUNEIFORM SIGN TUR OVER TUR ZA OVER ZACUNEIFORM SIGN UCUNEIFOR" + + "M SIGN U GUDCUNEIFORM SIGN U U UCUNEIFORM SIGN U OVER U PA OVER PA GAR O" + + "VER GARCUNEIFORM SIGN U OVER U SUR OVER SURCUNEIFORM SIGN U OVER U U REV" + + "ERSED OVER U REVERSEDCUNEIFORM SIGN U2CUNEIFORM SIGN UBCUNEIFORM SIGN UD" + + "CUNEIFORM SIGN UD KUSHU2CUNEIFORM SIGN UD TIMES BADCUNEIFORM SIGN UD TIM" + + "ES MICUNEIFORM SIGN UD TIMES U PLUS U PLUS UCUNEIFORM SIGN UD TIMES U PL" + + "US U PLUS U GUNUCUNEIFORM SIGN UD GUNUCUNEIFORM SIGN UD SHESHIGCUNEIFORM" + + " SIGN UD SHESHIG TIMES BADCUNEIFORM SIGN UDUGCUNEIFORM SIGN UMCUNEIFORM " + + "SIGN UM TIMES LAGABCUNEIFORM SIGN UM TIMES ME PLUS DACUNEIFORM SIGN UM T" + + "IMES SHA3CUNEIFORM SIGN UM TIMES UCUNEIFORM SIGN UMBINCUNEIFORM SIGN UMU" + + "MCUNEIFORM SIGN UMUM TIMES KASKALCUNEIFORM SIGN UMUM TIMES PACUNEIFORM S" + + "IGN UNCUNEIFORM SIGN UN GUNUCUNEIFORM SIGN URCUNEIFORM SIGN UR CROSSING " + + "URCUNEIFORM SIGN UR SHESHIGCUNEIFORM SIGN UR2CUNEIFORM SIGN UR2 TIMES A " + + "PLUS HACUNEIFORM SIGN UR2 TIMES A PLUS NACUNEIFORM SIGN UR2 TIMES ALCUNE" + + "IFORM SIGN UR2 TIMES HACUNEIFORM SIGN UR2 TIMES NUNCUNEIFORM SIGN UR2 TI" + + "MES U2CUNEIFORM SIGN UR2 TIMES U2 PLUS ASHCUNEIFORM SIGN UR2 TIMES U2 PL" + + "US BICUNEIFORM SIGN UR4CUNEIFORM SIGN URICUNEIFORM SIGN URI3CUNEIFORM SI" + + "GN URUCUNEIFORM SIGN URU TIMES ACUNEIFORM SIGN URU TIMES ASHGABCUNEIFORM" + + " SIGN URU TIMES BARCUNEIFORM SIGN URU TIMES DUNCUNEIFORM SIGN URU TIMES " + + "GACUNEIFORM SIGN URU TIMES GALCUNEIFORM SIGN URU TIMES GAN2 TENUCUNEIFOR" + + "M SIGN URU TIMES GARCUNEIFORM SIGN URU TIMES GUCUNEIFORM SIGN URU TIMES " + + "HACUNEIFORM SIGN URU TIMES IGICUNEIFORM SIGN URU TIMES IMCUNEIFORM SIGN " + + "URU TIMES ISHCUNEIFORM SIGN URU TIMES KICUNEIFORM SIGN URU TIMES LUMCUNE" + + "IFORM SIGN URU TIMES MINCUNEIFORM SIGN URU TIMES PACUNEIFORM SIGN URU TI" + + "MES SHECUNEIFORM SIGN URU TIMES SIG4CUNEIFORM SIGN URU TIMES TUCUNEIFORM" + + " SIGN URU TIMES U PLUS GUDCUNEIFORM SIGN URU TIMES UDCUNEIFORM SIGN URU " + + "TIMES URUDACUNEIFORM SIGN URUDACUNEIFORM SIGN URUDA TIMES UCUNEIFORM SIG" + + "N USHCUNEIFORM SIGN USH TIMES ACUNEIFORM SIGN USH TIMES KUCUNEIFORM SIGN" + + " USH TIMES KURCUNEIFORM SIGN USH TIMES TAK4CUNEIFORM SIGN USHXCUNEIFORM " + + "SIGN USH2CUNEIFORM SIGN USHUMXCUNEIFORM SIGN UTUKICUNEIFORM SIGN UZ3CUNE" + + "IFORM SIGN UZ3 TIMES KASKALCUNEIFORM SIGN UZUCUNEIFORM SIGN ZACUNEIFORM " + + "SIGN ZA TENUCUNEIFORM SIGN ZA SQUARED TIMES KURCUNEIFORM SIGN ZAGCUNEIFO" + + "RM SIGN ZAMXCUNEIFORM SIGN ZE2CUNEIFORM SIGN ZICUNEIFORM SIGN ZI OVER ZI" + + "CUNEIFORM SIGN ZI3CUNEIFORM SIGN ZIBCUNEIFORM SIGN ZIB KABA TENUCUNEIFOR" + + "M SIGN ZIGCUNEIFORM SIGN ZIZ2CUNEIFORM SIGN ZUCUNEIFORM SIGN ZU5CUNEIFOR" + + "M SIGN ZU5 TIMES ACUNEIFORM SIGN ZUBURCUNEIFORM SIGN ZUMCUNEIFORM SIGN K" + + "AP ELAMITECUNEIFORM SIGN AB TIMES NUNCUNEIFORM SIGN AB2 TIMES ACUNEIFORM" + + " SIGN AMAR TIMES KUGCUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASHCUNEIFOR" + + "M SIGN DAG3CUNEIFORM SIGN DISH PLUS SHUCUNEIFORM SIGN DUB TIMES SHECUNEI" + + "FORM SIGN EZEN TIMES GUDCUNEIFORM SIGN EZEN TIMES SHECUNEIFORM SIGN GA2 ") + ("" + + "TIMES AN PLUS KAK PLUS ACUNEIFORM SIGN GA2 TIMES ASH2CUNEIFORM SIGN GE22" + + "CUNEIFORM SIGN GIGCUNEIFORM SIGN HUSHCUNEIFORM SIGN KA TIMES ANSHECUNEIF" + + "ORM SIGN KA TIMES ASH3CUNEIFORM SIGN KA TIMES GISHCUNEIFORM SIGN KA TIME" + + "S GUDCUNEIFORM SIGN KA TIMES HI TIMES ASH2CUNEIFORM SIGN KA TIMES LUMCUN" + + "EIFORM SIGN KA TIMES PACUNEIFORM SIGN KA TIMES SHULCUNEIFORM SIGN KA TIM" + + "ES TUCUNEIFORM SIGN KA TIMES UR2CUNEIFORM SIGN LAGAB TIMES GICUNEIFORM S" + + "IGN LU2 SHESHIG TIMES BADCUNEIFORM SIGN LU2 TIMES ESH2 PLUS LALCUNEIFORM" + + " SIGN LU2 TIMES SHUCUNEIFORM SIGN MESHCUNEIFORM SIGN MUSH3 TIMES ZACUNEI" + + "FORM SIGN NA4CUNEIFORM SIGN NINCUNEIFORM SIGN NIN9CUNEIFORM SIGN NINDA2 " + + "TIMES BALCUNEIFORM SIGN NINDA2 TIMES GICUNEIFORM SIGN NU11 ROTATED NINET" + + "Y DEGREESCUNEIFORM SIGN PESH2 ASTERISKCUNEIFORM SIGN PIR2CUNEIFORM SIGN " + + "SAG TIMES IGI GUNUCUNEIFORM SIGN TI2CUNEIFORM SIGN UM TIMES MECUNEIFORM " + + "SIGN U UCUNEIFORM NUMERIC SIGN TWO ASHCUNEIFORM NUMERIC SIGN THREE ASHCU" + + "NEIFORM NUMERIC SIGN FOUR ASHCUNEIFORM NUMERIC SIGN FIVE ASHCUNEIFORM NU" + + "MERIC SIGN SIX ASHCUNEIFORM NUMERIC SIGN SEVEN ASHCUNEIFORM NUMERIC SIGN" + + " EIGHT ASHCUNEIFORM NUMERIC SIGN NINE ASHCUNEIFORM NUMERIC SIGN THREE DI" + + "SHCUNEIFORM NUMERIC SIGN FOUR DISHCUNEIFORM NUMERIC SIGN FIVE DISHCUNEIF" + + "ORM NUMERIC SIGN SIX DISHCUNEIFORM NUMERIC SIGN SEVEN DISHCUNEIFORM NUME" + + "RIC SIGN EIGHT DISHCUNEIFORM NUMERIC SIGN NINE DISHCUNEIFORM NUMERIC SIG" + + "N FOUR UCUNEIFORM NUMERIC SIGN FIVE UCUNEIFORM NUMERIC SIGN SIX UCUNEIFO" + + "RM NUMERIC SIGN SEVEN UCUNEIFORM NUMERIC SIGN EIGHT UCUNEIFORM NUMERIC S" + + "IGN NINE UCUNEIFORM NUMERIC SIGN ONE GESH2CUNEIFORM NUMERIC SIGN TWO GES" + + "H2CUNEIFORM NUMERIC SIGN THREE GESH2CUNEIFORM NUMERIC SIGN FOUR GESH2CUN" + + "EIFORM NUMERIC SIGN FIVE GESH2CUNEIFORM NUMERIC SIGN SIX GESH2CUNEIFORM " + + "NUMERIC SIGN SEVEN GESH2CUNEIFORM NUMERIC SIGN EIGHT GESH2CUNEIFORM NUME" + + "RIC SIGN NINE GESH2CUNEIFORM NUMERIC SIGN ONE GESHUCUNEIFORM NUMERIC SIG" + + "N TWO GESHUCUNEIFORM NUMERIC SIGN THREE GESHUCUNEIFORM NUMERIC SIGN FOUR" + + " GESHUCUNEIFORM NUMERIC SIGN FIVE GESHUCUNEIFORM NUMERIC SIGN TWO SHAR2C" + + "UNEIFORM NUMERIC SIGN THREE SHAR2CUNEIFORM NUMERIC SIGN THREE SHAR2 VARI" + + "ANT FORMCUNEIFORM NUMERIC SIGN FOUR SHAR2CUNEIFORM NUMERIC SIGN FIVE SHA" + + "R2CUNEIFORM NUMERIC SIGN SIX SHAR2CUNEIFORM NUMERIC SIGN SEVEN SHAR2CUNE" + + "IFORM NUMERIC SIGN EIGHT SHAR2CUNEIFORM NUMERIC SIGN NINE SHAR2CUNEIFORM" + + " NUMERIC SIGN ONE SHARUCUNEIFORM NUMERIC SIGN TWO SHARUCUNEIFORM NUMERIC" + + " SIGN THREE SHARUCUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORMCUNEIFOR" + + "M NUMERIC SIGN FOUR SHARUCUNEIFORM NUMERIC SIGN FIVE SHARUCUNEIFORM NUME" + + "RIC SIGN SHAR2 TIMES GAL PLUS DISHCUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL" + + " PLUS MINCUNEIFORM NUMERIC SIGN ONE BURUCUNEIFORM NUMERIC SIGN TWO BURUC" + + "UNEIFORM NUMERIC SIGN THREE BURUCUNEIFORM NUMERIC SIGN THREE BURU VARIAN" + + "T FORMCUNEIFORM NUMERIC SIGN FOUR BURUCUNEIFORM NUMERIC SIGN FIVE BURUCU" + + "NEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16CUNEIFORM NUMERIC SIGN THRE" + + "E VARIANT FORM ESH21CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMUCUNEIF" + + "ORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4CUNEIFORM NUMERIC SIGN FOUR VAR" + + "IANT FORM LIMMU ACUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU BCUNEIFO" + + "RM NUMERIC SIGN SIX VARIANT FORM ASH9CUNEIFORM NUMERIC SIGN SEVEN VARIAN" + + "T FORM IMIN3CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN ACUNEIFORM NU" + + "MERIC SIGN SEVEN VARIANT FORM IMIN BCUNEIFORM NUMERIC SIGN EIGHT VARIANT" + + " FORM USSUCUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3CUNEIFORM NUMER" + + "IC SIGN NINE VARIANT FORM ILIMMUCUNEIFORM NUMERIC SIGN NINE VARIANT FORM" + + " ILIMMU3CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4CUNEIFORM NUMERI" + + "C SIGN NINE VARIANT FORM ILIMMU ACUNEIFORM NUMERIC SIGN TWO ASH TENUCUNE" + + "IFORM NUMERIC SIGN THREE ASH TENUCUNEIFORM NUMERIC SIGN FOUR ASH TENUCUN" + + "EIFORM NUMERIC SIGN FIVE ASH TENUCUNEIFORM NUMERIC SIGN SIX ASH TENUCUNE" + + "IFORM NUMERIC SIGN ONE BAN2CUNEIFORM NUMERIC SIGN TWO BAN2CUNEIFORM NUME" + + "RIC SIGN THREE BAN2CUNEIFORM NUMERIC SIGN FOUR BAN2CUNEIFORM NUMERIC SIG" + + "N FOUR BAN2 VARIANT FORMCUNEIFORM NUMERIC SIGN FIVE BAN2CUNEIFORM NUMERI" + + "C SIGN FIVE BAN2 VARIANT FORMCUNEIFORM NUMERIC SIGN NIGIDAMINCUNEIFORM N" + + "UMERIC SIGN NIGIDAESHCUNEIFORM NUMERIC SIGN ONE ESHE3CUNEIFORM NUMERIC S" + + "IGN TWO ESHE3CUNEIFORM NUMERIC SIGN ONE THIRD DISHCUNEIFORM NUMERIC SIGN" + + " TWO THIRDS DISHCUNEIFORM NUMERIC SIGN FIVE SIXTHS DISHCUNEIFORM NUMERIC" + + " SIGN ONE THIRD VARIANT FORM ACUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT " + + "FORM ACUNEIFORM NUMERIC SIGN ONE EIGHTH ASHCUNEIFORM NUMERIC SIGN ONE QU" + + "ARTER ASHCUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTHCUNEIFORM NUMERIC " + + "SIGN OLD ASSYRIAN ONE QUARTERCUNEIFORM NUMERIC SIGN ONE QUARTER GURCUNEI" + + "FORM NUMERIC SIGN ONE HALF GURCUNEIFORM NUMERIC SIGN ELAMITE ONE THIRDCU") + ("" + + "NEIFORM NUMERIC SIGN ELAMITE TWO THIRDSCUNEIFORM NUMERIC SIGN ELAMITE FO" + + "RTYCUNEIFORM NUMERIC SIGN ELAMITE FIFTYCUNEIFORM NUMERIC SIGN FOUR U VAR" + + "IANT FORMCUNEIFORM NUMERIC SIGN FIVE U VARIANT FORMCUNEIFORM NUMERIC SIG" + + "N SIX U VARIANT FORMCUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORMCUNEIFORM" + + " NUMERIC SIGN EIGHT U VARIANT FORMCUNEIFORM NUMERIC SIGN NINE U VARIANT " + + "FORMCUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDERCUNEIFORM PUNCTU" + + "ATION SIGN VERTICAL COLONCUNEIFORM PUNCTUATION SIGN DIAGONAL COLONCUNEIF" + + "ORM PUNCTUATION SIGN DIAGONAL TRICOLONCUNEIFORM PUNCTUATION SIGN DIAGONA" + + "L QUADCOLONCUNEIFORM SIGN AB TIMES NUN TENUCUNEIFORM SIGN AB TIMES SHU2C" + + "UNEIFORM SIGN AD TIMES ESH2CUNEIFORM SIGN BAD TIMES DISH TENUCUNEIFORM S" + + "IGN BAHAR2 TIMES AB2CUNEIFORM SIGN BAHAR2 TIMES NICUNEIFORM SIGN BAHAR2 " + + "TIMES ZACUNEIFORM SIGN BU OVER BU TIMES NA2CUNEIFORM SIGN DA TIMES TAK4C" + + "UNEIFORM SIGN DAG TIMES KURCUNEIFORM SIGN DIM TIMES IGICUNEIFORM SIGN DI" + + "M TIMES U U UCUNEIFORM SIGN DIM2 TIMES UDCUNEIFORM SIGN DUG TIMES ANSHEC" + + "UNEIFORM SIGN DUG TIMES ASHCUNEIFORM SIGN DUG TIMES ASH AT LEFTCUNEIFORM" + + " SIGN DUG TIMES DINCUNEIFORM SIGN DUG TIMES DUNCUNEIFORM SIGN DUG TIMES " + + "ERIN2CUNEIFORM SIGN DUG TIMES GACUNEIFORM SIGN DUG TIMES GICUNEIFORM SIG" + + "N DUG TIMES GIR2 GUNUCUNEIFORM SIGN DUG TIMES GISHCUNEIFORM SIGN DUG TIM" + + "ES HACUNEIFORM SIGN DUG TIMES HICUNEIFORM SIGN DUG TIMES IGI GUNUCUNEIFO" + + "RM SIGN DUG TIMES KASKALCUNEIFORM SIGN DUG TIMES KURCUNEIFORM SIGN DUG T" + + "IMES KUSHU2CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKALCUNEIFORM SIGN DUG" + + " TIMES LAK-020CUNEIFORM SIGN DUG TIMES LAMCUNEIFORM SIGN DUG TIMES LAM T" + + "IMES KURCUNEIFORM SIGN DUG TIMES LUH PLUS GISHCUNEIFORM SIGN DUG TIMES M" + + "ASHCUNEIFORM SIGN DUG TIMES MESCUNEIFORM SIGN DUG TIMES MICUNEIFORM SIGN" + + " DUG TIMES NICUNEIFORM SIGN DUG TIMES PICUNEIFORM SIGN DUG TIMES SHECUNE" + + "IFORM SIGN DUG TIMES SI GUNUCUNEIFORM SIGN E2 TIMES KURCUNEIFORM SIGN E2" + + " TIMES PAPCUNEIFORM SIGN ERIN2 XCUNEIFORM SIGN ESH2 CROSSING ESH2CUNEIFO" + + "RM SIGN EZEN SHESHIG TIMES ASHCUNEIFORM SIGN EZEN SHESHIG TIMES HICUNEIF" + + "ORM SIGN EZEN SHESHIG TIMES IGI GUNUCUNEIFORM SIGN EZEN SHESHIG TIMES LA" + + "CUNEIFORM SIGN EZEN SHESHIG TIMES LALCUNEIFORM SIGN EZEN SHESHIG TIMES M" + + "ECUNEIFORM SIGN EZEN SHESHIG TIMES MESCUNEIFORM SIGN EZEN SHESHIG TIMES " + + "SUCUNEIFORM SIGN EZEN TIMES SUCUNEIFORM SIGN GA2 TIMES BAHAR2CUNEIFORM S" + + "IGN GA2 TIMES DIM GUNUCUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNUCUNEIFO" + + "RM SIGN GA2 TIMES DUG TIMES KASKALCUNEIFORM SIGN GA2 TIMES ERENCUNEIFORM" + + " SIGN GA2 TIMES GACUNEIFORM SIGN GA2 TIMES GAR PLUS DICUNEIFORM SIGN GA2" + + " TIMES GAR PLUS NECUNEIFORM SIGN GA2 TIMES HA PLUS ACUNEIFORM SIGN GA2 T" + + "IMES KUSHU2 PLUS KASKALCUNEIFORM SIGN GA2 TIMES LAMCUNEIFORM SIGN GA2 TI" + + "MES LAM TIMES KURCUNEIFORM SIGN GA2 TIMES LUHCUNEIFORM SIGN GA2 TIMES MU" + + "SHCUNEIFORM SIGN GA2 TIMES NECUNEIFORM SIGN GA2 TIMES NE PLUS E2CUNEIFOR" + + "M SIGN GA2 TIMES NE PLUS GICUNEIFORM SIGN GA2 TIMES SHIMCUNEIFORM SIGN G" + + "A2 TIMES ZIZ2CUNEIFORM SIGN GABA ROTATED NINETY DEGREESCUNEIFORM SIGN GE" + + "SHTIN TIMES UCUNEIFORM SIGN GISH TIMES GISH CROSSING GISHCUNEIFORM SIGN " + + "GU2 TIMES IGI GUNUCUNEIFORM SIGN GUD PLUS GISH TIMES TAK4CUNEIFORM SIGN " + + "HA TENU GUNUCUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASHCUNEIFORM SIGN " + + "KA TIMES BUCUNEIFORM SIGN KA TIMES KACUNEIFORM SIGN KA TIMES U U UCUNEIF" + + "ORM SIGN KA TIMES URCUNEIFORM SIGN LAGAB TIMES ZU OVER ZUCUNEIFORM SIGN " + + "LAK-003CUNEIFORM SIGN LAK-021CUNEIFORM SIGN LAK-025CUNEIFORM SIGN LAK-03" + + "0CUNEIFORM SIGN LAK-050CUNEIFORM SIGN LAK-051CUNEIFORM SIGN LAK-062CUNEI" + + "FORM SIGN LAK-079 OVER LAK-079 GUNUCUNEIFORM SIGN LAK-080CUNEIFORM SIGN " + + "LAK-081 OVER LAK-081CUNEIFORM SIGN LAK-092CUNEIFORM SIGN LAK-130CUNEIFOR" + + "M SIGN LAK-142CUNEIFORM SIGN LAK-210CUNEIFORM SIGN LAK-219CUNEIFORM SIGN" + + " LAK-220CUNEIFORM SIGN LAK-225CUNEIFORM SIGN LAK-228CUNEIFORM SIGN LAK-2" + + "38CUNEIFORM SIGN LAK-265CUNEIFORM SIGN LAK-266CUNEIFORM SIGN LAK-343CUNE" + + "IFORM SIGN LAK-347CUNEIFORM SIGN LAK-348CUNEIFORM SIGN LAK-383CUNEIFORM " + + "SIGN LAK-384CUNEIFORM SIGN LAK-390CUNEIFORM SIGN LAK-441CUNEIFORM SIGN L" + + "AK-449CUNEIFORM SIGN LAK-449 TIMES GUCUNEIFORM SIGN LAK-449 TIMES IGICUN" + + "EIFORM SIGN LAK-449 TIMES PAP PLUS LU3CUNEIFORM SIGN LAK-449 TIMES PAP P" + + "LUS PAP PLUS LU3CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BACUNEIFORM SIGN LA" + + "K-450CUNEIFORM SIGN LAK-457CUNEIFORM SIGN LAK-470CUNEIFORM SIGN LAK-483C" + + "UNEIFORM SIGN LAK-490CUNEIFORM SIGN LAK-492CUNEIFORM SIGN LAK-493CUNEIFO" + + "RM SIGN LAK-495CUNEIFORM SIGN LAK-550CUNEIFORM SIGN LAK-608CUNEIFORM SIG" + + "N LAK-617CUNEIFORM SIGN LAK-617 TIMES ASHCUNEIFORM SIGN LAK-617 TIMES BA" + + "DCUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNUCUNEIFORM SIGN LAK-617 TIMES" + + " KU3CUNEIFORM SIGN LAK-617 TIMES LACUNEIFORM SIGN LAK-617 TIMES TARCUNEI") + ("" + + "FORM SIGN LAK-617 TIMES TECUNEIFORM SIGN LAK-617 TIMES U2CUNEIFORM SIGN " + + "LAK-617 TIMES UDCUNEIFORM SIGN LAK-617 TIMES URUDACUNEIFORM SIGN LAK-636" + + "CUNEIFORM SIGN LAK-648CUNEIFORM SIGN LAK-648 TIMES DUBCUNEIFORM SIGN LAK" + + "-648 TIMES GACUNEIFORM SIGN LAK-648 TIMES IGICUNEIFORM SIGN LAK-648 TIME" + + "S IGI GUNUCUNEIFORM SIGN LAK-648 TIMES NICUNEIFORM SIGN LAK-648 TIMES PA" + + "P PLUS PAP PLUS LU3CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KICUNEIFORM S" + + "IGN LAK-648 TIMES UDCUNEIFORM SIGN LAK-648 TIMES URUDACUNEIFORM SIGN LAK" + + "-724CUNEIFORM SIGN LAK-749CUNEIFORM SIGN LU2 GUNU TIMES ASHCUNEIFORM SIG" + + "N LU2 TIMES DISHCUNEIFORM SIGN LU2 TIMES HALCUNEIFORM SIGN LU2 TIMES PAP" + + "CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3CUNEIFORM SIGN LU2 TIMES T" + + "AK4CUNEIFORM SIGN MI PLUS ZA7CUNEIFORM SIGN MUSH OVER MUSH TIMES GACUNEI" + + "FORM SIGN MUSH OVER MUSH TIMES KAKCUNEIFORM SIGN NINDA2 TIMES DIM GUNUCU" + + "NEIFORM SIGN NINDA2 TIMES GISHCUNEIFORM SIGN NINDA2 TIMES GULCUNEIFORM S" + + "IGN NINDA2 TIMES HICUNEIFORM SIGN NINDA2 TIMES KESH2CUNEIFORM SIGN NINDA" + + "2 TIMES LAK-050CUNEIFORM SIGN NINDA2 TIMES MASHCUNEIFORM SIGN NINDA2 TIM" + + "ES PAP PLUS PAPCUNEIFORM SIGN NINDA2 TIMES UCUNEIFORM SIGN NINDA2 TIMES " + + "U PLUS UCUNEIFORM SIGN NINDA2 TIMES URUDACUNEIFORM SIGN SAG GUNU TIMES H" + + "ACUNEIFORM SIGN SAG TIMES ENCUNEIFORM SIGN SAG TIMES SHE AT LEFTCUNEIFOR" + + "M SIGN SAG TIMES TAK4CUNEIFORM SIGN SHA6 TENUCUNEIFORM SIGN SHE OVER SHE" + + "CUNEIFORM SIGN SHE PLUS HUB2CUNEIFORM SIGN SHE PLUS NAM2CUNEIFORM SIGN S" + + "HE PLUS SARCUNEIFORM SIGN SHU2 PLUS DUG TIMES NICUNEIFORM SIGN SHU2 PLUS" + + " E2 TIMES ANCUNEIFORM SIGN SI TIMES TAK4CUNEIFORM SIGN TAK4 PLUS SAGCUNE" + + "IFORM SIGN TUM TIMES GAN2 TENUCUNEIFORM SIGN TUM TIMES THREE DISHCUNEIFO" + + "RM SIGN UR2 INVERTEDCUNEIFORM SIGN UR2 TIMES UDCUNEIFORM SIGN URU TIMES " + + "DARA3CUNEIFORM SIGN URU TIMES LAK-668CUNEIFORM SIGN URU TIMES LU3CUNEIFO" + + "RM SIGN ZA7CUNEIFORM SIGN ZU OVER ZU PLUS SARCUNEIFORM SIGN ZU5 TIMES TH" + + "REE DISH TENUEGYPTIAN HIEROGLYPH A001EGYPTIAN HIEROGLYPH A002EGYPTIAN HI" + + "EROGLYPH A003EGYPTIAN HIEROGLYPH A004EGYPTIAN HIEROGLYPH A005EGYPTIAN HI" + + "EROGLYPH A005AEGYPTIAN HIEROGLYPH A006EGYPTIAN HIEROGLYPH A006AEGYPTIAN " + + "HIEROGLYPH A006BEGYPTIAN HIEROGLYPH A007EGYPTIAN HIEROGLYPH A008EGYPTIAN" + + " HIEROGLYPH A009EGYPTIAN HIEROGLYPH A010EGYPTIAN HIEROGLYPH A011EGYPTIAN" + + " HIEROGLYPH A012EGYPTIAN HIEROGLYPH A013EGYPTIAN HIEROGLYPH A014EGYPTIAN" + + " HIEROGLYPH A014AEGYPTIAN HIEROGLYPH A015EGYPTIAN HIEROGLYPH A016EGYPTIA" + + "N HIEROGLYPH A017EGYPTIAN HIEROGLYPH A017AEGYPTIAN HIEROGLYPH A018EGYPTI" + + "AN HIEROGLYPH A019EGYPTIAN HIEROGLYPH A020EGYPTIAN HIEROGLYPH A021EGYPTI" + + "AN HIEROGLYPH A022EGYPTIAN HIEROGLYPH A023EGYPTIAN HIEROGLYPH A024EGYPTI" + + "AN HIEROGLYPH A025EGYPTIAN HIEROGLYPH A026EGYPTIAN HIEROGLYPH A027EGYPTI" + + "AN HIEROGLYPH A028EGYPTIAN HIEROGLYPH A029EGYPTIAN HIEROGLYPH A030EGYPTI" + + "AN HIEROGLYPH A031EGYPTIAN HIEROGLYPH A032EGYPTIAN HIEROGLYPH A032AEGYPT" + + "IAN HIEROGLYPH A033EGYPTIAN HIEROGLYPH A034EGYPTIAN HIEROGLYPH A035EGYPT" + + "IAN HIEROGLYPH A036EGYPTIAN HIEROGLYPH A037EGYPTIAN HIEROGLYPH A038EGYPT" + + "IAN HIEROGLYPH A039EGYPTIAN HIEROGLYPH A040EGYPTIAN HIEROGLYPH A040AEGYP" + + "TIAN HIEROGLYPH A041EGYPTIAN HIEROGLYPH A042EGYPTIAN HIEROGLYPH A042AEGY" + + "PTIAN HIEROGLYPH A043EGYPTIAN HIEROGLYPH A043AEGYPTIAN HIEROGLYPH A044EG" + + "YPTIAN HIEROGLYPH A045EGYPTIAN HIEROGLYPH A045AEGYPTIAN HIEROGLYPH A046E" + + "GYPTIAN HIEROGLYPH A047EGYPTIAN HIEROGLYPH A048EGYPTIAN HIEROGLYPH A049E" + + "GYPTIAN HIEROGLYPH A050EGYPTIAN HIEROGLYPH A051EGYPTIAN HIEROGLYPH A052E" + + "GYPTIAN HIEROGLYPH A053EGYPTIAN HIEROGLYPH A054EGYPTIAN HIEROGLYPH A055E" + + "GYPTIAN HIEROGLYPH A056EGYPTIAN HIEROGLYPH A057EGYPTIAN HIEROGLYPH A058E" + + "GYPTIAN HIEROGLYPH A059EGYPTIAN HIEROGLYPH A060EGYPTIAN HIEROGLYPH A061E" + + "GYPTIAN HIEROGLYPH A062EGYPTIAN HIEROGLYPH A063EGYPTIAN HIEROGLYPH A064E" + + "GYPTIAN HIEROGLYPH A065EGYPTIAN HIEROGLYPH A066EGYPTIAN HIEROGLYPH A067E" + + "GYPTIAN HIEROGLYPH A068EGYPTIAN HIEROGLYPH A069EGYPTIAN HIEROGLYPH A070E" + + "GYPTIAN HIEROGLYPH B001EGYPTIAN HIEROGLYPH B002EGYPTIAN HIEROGLYPH B003E" + + "GYPTIAN HIEROGLYPH B004EGYPTIAN HIEROGLYPH B005EGYPTIAN HIEROGLYPH B005A" + + "EGYPTIAN HIEROGLYPH B006EGYPTIAN HIEROGLYPH B007EGYPTIAN HIEROGLYPH B008" + + "EGYPTIAN HIEROGLYPH B009EGYPTIAN HIEROGLYPH C001EGYPTIAN HIEROGLYPH C002" + + "EGYPTIAN HIEROGLYPH C002AEGYPTIAN HIEROGLYPH C002BEGYPTIAN HIEROGLYPH C0" + + "02CEGYPTIAN HIEROGLYPH C003EGYPTIAN HIEROGLYPH C004EGYPTIAN HIEROGLYPH C" + + "005EGYPTIAN HIEROGLYPH C006EGYPTIAN HIEROGLYPH C007EGYPTIAN HIEROGLYPH C" + + "008EGYPTIAN HIEROGLYPH C009EGYPTIAN HIEROGLYPH C010EGYPTIAN HIEROGLYPH C" + + "010AEGYPTIAN HIEROGLYPH C011EGYPTIAN HIEROGLYPH C012EGYPTIAN HIEROGLYPH " + + "C013EGYPTIAN HIEROGLYPH C014EGYPTIAN HIEROGLYPH C015EGYPTIAN HIEROGLYPH " + + "C016EGYPTIAN HIEROGLYPH C017EGYPTIAN HIEROGLYPH C018EGYPTIAN HIEROGLYPH ") + ("" + + "C019EGYPTIAN HIEROGLYPH C020EGYPTIAN HIEROGLYPH C021EGYPTIAN HIEROGLYPH " + + "C022EGYPTIAN HIEROGLYPH C023EGYPTIAN HIEROGLYPH C024EGYPTIAN HIEROGLYPH " + + "D001EGYPTIAN HIEROGLYPH D002EGYPTIAN HIEROGLYPH D003EGYPTIAN HIEROGLYPH " + + "D004EGYPTIAN HIEROGLYPH D005EGYPTIAN HIEROGLYPH D006EGYPTIAN HIEROGLYPH " + + "D007EGYPTIAN HIEROGLYPH D008EGYPTIAN HIEROGLYPH D008AEGYPTIAN HIEROGLYPH" + + " D009EGYPTIAN HIEROGLYPH D010EGYPTIAN HIEROGLYPH D011EGYPTIAN HIEROGLYPH" + + " D012EGYPTIAN HIEROGLYPH D013EGYPTIAN HIEROGLYPH D014EGYPTIAN HIEROGLYPH" + + " D015EGYPTIAN HIEROGLYPH D016EGYPTIAN HIEROGLYPH D017EGYPTIAN HIEROGLYPH" + + " D018EGYPTIAN HIEROGLYPH D019EGYPTIAN HIEROGLYPH D020EGYPTIAN HIEROGLYPH" + + " D021EGYPTIAN HIEROGLYPH D022EGYPTIAN HIEROGLYPH D023EGYPTIAN HIEROGLYPH" + + " D024EGYPTIAN HIEROGLYPH D025EGYPTIAN HIEROGLYPH D026EGYPTIAN HIEROGLYPH" + + " D027EGYPTIAN HIEROGLYPH D027AEGYPTIAN HIEROGLYPH D028EGYPTIAN HIEROGLYP" + + "H D029EGYPTIAN HIEROGLYPH D030EGYPTIAN HIEROGLYPH D031EGYPTIAN HIEROGLYP" + + "H D031AEGYPTIAN HIEROGLYPH D032EGYPTIAN HIEROGLYPH D033EGYPTIAN HIEROGLY" + + "PH D034EGYPTIAN HIEROGLYPH D034AEGYPTIAN HIEROGLYPH D035EGYPTIAN HIEROGL" + + "YPH D036EGYPTIAN HIEROGLYPH D037EGYPTIAN HIEROGLYPH D038EGYPTIAN HIEROGL" + + "YPH D039EGYPTIAN HIEROGLYPH D040EGYPTIAN HIEROGLYPH D041EGYPTIAN HIEROGL" + + "YPH D042EGYPTIAN HIEROGLYPH D043EGYPTIAN HIEROGLYPH D044EGYPTIAN HIEROGL" + + "YPH D045EGYPTIAN HIEROGLYPH D046EGYPTIAN HIEROGLYPH D046AEGYPTIAN HIEROG" + + "LYPH D047EGYPTIAN HIEROGLYPH D048EGYPTIAN HIEROGLYPH D048AEGYPTIAN HIERO" + + "GLYPH D049EGYPTIAN HIEROGLYPH D050EGYPTIAN HIEROGLYPH D050AEGYPTIAN HIER" + + "OGLYPH D050BEGYPTIAN HIEROGLYPH D050CEGYPTIAN HIEROGLYPH D050DEGYPTIAN H" + + "IEROGLYPH D050EEGYPTIAN HIEROGLYPH D050FEGYPTIAN HIEROGLYPH D050GEGYPTIA" + + "N HIEROGLYPH D050HEGYPTIAN HIEROGLYPH D050IEGYPTIAN HIEROGLYPH D051EGYPT" + + "IAN HIEROGLYPH D052EGYPTIAN HIEROGLYPH D052AEGYPTIAN HIEROGLYPH D053EGYP" + + "TIAN HIEROGLYPH D054EGYPTIAN HIEROGLYPH D054AEGYPTIAN HIEROGLYPH D055EGY" + + "PTIAN HIEROGLYPH D056EGYPTIAN HIEROGLYPH D057EGYPTIAN HIEROGLYPH D058EGY" + + "PTIAN HIEROGLYPH D059EGYPTIAN HIEROGLYPH D060EGYPTIAN HIEROGLYPH D061EGY" + + "PTIAN HIEROGLYPH D062EGYPTIAN HIEROGLYPH D063EGYPTIAN HIEROGLYPH D064EGY" + + "PTIAN HIEROGLYPH D065EGYPTIAN HIEROGLYPH D066EGYPTIAN HIEROGLYPH D067EGY" + + "PTIAN HIEROGLYPH D067AEGYPTIAN HIEROGLYPH D067BEGYPTIAN HIEROGLYPH D067C" + + "EGYPTIAN HIEROGLYPH D067DEGYPTIAN HIEROGLYPH D067EEGYPTIAN HIEROGLYPH D0" + + "67FEGYPTIAN HIEROGLYPH D067GEGYPTIAN HIEROGLYPH D067HEGYPTIAN HIEROGLYPH" + + " E001EGYPTIAN HIEROGLYPH E002EGYPTIAN HIEROGLYPH E003EGYPTIAN HIEROGLYPH" + + " E004EGYPTIAN HIEROGLYPH E005EGYPTIAN HIEROGLYPH E006EGYPTIAN HIEROGLYPH" + + " E007EGYPTIAN HIEROGLYPH E008EGYPTIAN HIEROGLYPH E008AEGYPTIAN HIEROGLYP" + + "H E009EGYPTIAN HIEROGLYPH E009AEGYPTIAN HIEROGLYPH E010EGYPTIAN HIEROGLY" + + "PH E011EGYPTIAN HIEROGLYPH E012EGYPTIAN HIEROGLYPH E013EGYPTIAN HIEROGLY" + + "PH E014EGYPTIAN HIEROGLYPH E015EGYPTIAN HIEROGLYPH E016EGYPTIAN HIEROGLY" + + "PH E016AEGYPTIAN HIEROGLYPH E017EGYPTIAN HIEROGLYPH E017AEGYPTIAN HIEROG" + + "LYPH E018EGYPTIAN HIEROGLYPH E019EGYPTIAN HIEROGLYPH E020EGYPTIAN HIEROG" + + "LYPH E020AEGYPTIAN HIEROGLYPH E021EGYPTIAN HIEROGLYPH E022EGYPTIAN HIERO" + + "GLYPH E023EGYPTIAN HIEROGLYPH E024EGYPTIAN HIEROGLYPH E025EGYPTIAN HIERO" + + "GLYPH E026EGYPTIAN HIEROGLYPH E027EGYPTIAN HIEROGLYPH E028EGYPTIAN HIERO" + + "GLYPH E028AEGYPTIAN HIEROGLYPH E029EGYPTIAN HIEROGLYPH E030EGYPTIAN HIER" + + "OGLYPH E031EGYPTIAN HIEROGLYPH E032EGYPTIAN HIEROGLYPH E033EGYPTIAN HIER" + + "OGLYPH E034EGYPTIAN HIEROGLYPH E034AEGYPTIAN HIEROGLYPH E036EGYPTIAN HIE" + + "ROGLYPH E037EGYPTIAN HIEROGLYPH E038EGYPTIAN HIEROGLYPH F001EGYPTIAN HIE" + + "ROGLYPH F001AEGYPTIAN HIEROGLYPH F002EGYPTIAN HIEROGLYPH F003EGYPTIAN HI" + + "EROGLYPH F004EGYPTIAN HIEROGLYPH F005EGYPTIAN HIEROGLYPH F006EGYPTIAN HI" + + "EROGLYPH F007EGYPTIAN HIEROGLYPH F008EGYPTIAN HIEROGLYPH F009EGYPTIAN HI" + + "EROGLYPH F010EGYPTIAN HIEROGLYPH F011EGYPTIAN HIEROGLYPH F012EGYPTIAN HI" + + "EROGLYPH F013EGYPTIAN HIEROGLYPH F013AEGYPTIAN HIEROGLYPH F014EGYPTIAN H" + + "IEROGLYPH F015EGYPTIAN HIEROGLYPH F016EGYPTIAN HIEROGLYPH F017EGYPTIAN H" + + "IEROGLYPH F018EGYPTIAN HIEROGLYPH F019EGYPTIAN HIEROGLYPH F020EGYPTIAN H" + + "IEROGLYPH F021EGYPTIAN HIEROGLYPH F021AEGYPTIAN HIEROGLYPH F022EGYPTIAN " + + "HIEROGLYPH F023EGYPTIAN HIEROGLYPH F024EGYPTIAN HIEROGLYPH F025EGYPTIAN " + + "HIEROGLYPH F026EGYPTIAN HIEROGLYPH F027EGYPTIAN HIEROGLYPH F028EGYPTIAN " + + "HIEROGLYPH F029EGYPTIAN HIEROGLYPH F030EGYPTIAN HIEROGLYPH F031EGYPTIAN " + + "HIEROGLYPH F031AEGYPTIAN HIEROGLYPH F032EGYPTIAN HIEROGLYPH F033EGYPTIAN" + + " HIEROGLYPH F034EGYPTIAN HIEROGLYPH F035EGYPTIAN HIEROGLYPH F036EGYPTIAN" + + " HIEROGLYPH F037EGYPTIAN HIEROGLYPH F037AEGYPTIAN HIEROGLYPH F038EGYPTIA" + + "N HIEROGLYPH F038AEGYPTIAN HIEROGLYPH F039EGYPTIAN HIEROGLYPH F040EGYPTI" + + "AN HIEROGLYPH F041EGYPTIAN HIEROGLYPH F042EGYPTIAN HIEROGLYPH F043EGYPTI") + ("" + + "AN HIEROGLYPH F044EGYPTIAN HIEROGLYPH F045EGYPTIAN HIEROGLYPH F045AEGYPT" + + "IAN HIEROGLYPH F046EGYPTIAN HIEROGLYPH F046AEGYPTIAN HIEROGLYPH F047EGYP" + + "TIAN HIEROGLYPH F047AEGYPTIAN HIEROGLYPH F048EGYPTIAN HIEROGLYPH F049EGY" + + "PTIAN HIEROGLYPH F050EGYPTIAN HIEROGLYPH F051EGYPTIAN HIEROGLYPH F051AEG" + + "YPTIAN HIEROGLYPH F051BEGYPTIAN HIEROGLYPH F051CEGYPTIAN HIEROGLYPH F052" + + "EGYPTIAN HIEROGLYPH F053EGYPTIAN HIEROGLYPH G001EGYPTIAN HIEROGLYPH G002" + + "EGYPTIAN HIEROGLYPH G003EGYPTIAN HIEROGLYPH G004EGYPTIAN HIEROGLYPH G005" + + "EGYPTIAN HIEROGLYPH G006EGYPTIAN HIEROGLYPH G006AEGYPTIAN HIEROGLYPH G00" + + "7EGYPTIAN HIEROGLYPH G007AEGYPTIAN HIEROGLYPH G007BEGYPTIAN HIEROGLYPH G" + + "008EGYPTIAN HIEROGLYPH G009EGYPTIAN HIEROGLYPH G010EGYPTIAN HIEROGLYPH G" + + "011EGYPTIAN HIEROGLYPH G011AEGYPTIAN HIEROGLYPH G012EGYPTIAN HIEROGLYPH " + + "G013EGYPTIAN HIEROGLYPH G014EGYPTIAN HIEROGLYPH G015EGYPTIAN HIEROGLYPH " + + "G016EGYPTIAN HIEROGLYPH G017EGYPTIAN HIEROGLYPH G018EGYPTIAN HIEROGLYPH " + + "G019EGYPTIAN HIEROGLYPH G020EGYPTIAN HIEROGLYPH G020AEGYPTIAN HIEROGLYPH" + + " G021EGYPTIAN HIEROGLYPH G022EGYPTIAN HIEROGLYPH G023EGYPTIAN HIEROGLYPH" + + " G024EGYPTIAN HIEROGLYPH G025EGYPTIAN HIEROGLYPH G026EGYPTIAN HIEROGLYPH" + + " G026AEGYPTIAN HIEROGLYPH G027EGYPTIAN HIEROGLYPH G028EGYPTIAN HIEROGLYP" + + "H G029EGYPTIAN HIEROGLYPH G030EGYPTIAN HIEROGLYPH G031EGYPTIAN HIEROGLYP" + + "H G032EGYPTIAN HIEROGLYPH G033EGYPTIAN HIEROGLYPH G034EGYPTIAN HIEROGLYP" + + "H G035EGYPTIAN HIEROGLYPH G036EGYPTIAN HIEROGLYPH G036AEGYPTIAN HIEROGLY" + + "PH G037EGYPTIAN HIEROGLYPH G037AEGYPTIAN HIEROGLYPH G038EGYPTIAN HIEROGL" + + "YPH G039EGYPTIAN HIEROGLYPH G040EGYPTIAN HIEROGLYPH G041EGYPTIAN HIEROGL" + + "YPH G042EGYPTIAN HIEROGLYPH G043EGYPTIAN HIEROGLYPH G043AEGYPTIAN HIEROG" + + "LYPH G044EGYPTIAN HIEROGLYPH G045EGYPTIAN HIEROGLYPH G045AEGYPTIAN HIERO" + + "GLYPH G046EGYPTIAN HIEROGLYPH G047EGYPTIAN HIEROGLYPH G048EGYPTIAN HIERO" + + "GLYPH G049EGYPTIAN HIEROGLYPH G050EGYPTIAN HIEROGLYPH G051EGYPTIAN HIERO" + + "GLYPH G052EGYPTIAN HIEROGLYPH G053EGYPTIAN HIEROGLYPH G054EGYPTIAN HIERO" + + "GLYPH H001EGYPTIAN HIEROGLYPH H002EGYPTIAN HIEROGLYPH H003EGYPTIAN HIERO" + + "GLYPH H004EGYPTIAN HIEROGLYPH H005EGYPTIAN HIEROGLYPH H006EGYPTIAN HIERO" + + "GLYPH H006AEGYPTIAN HIEROGLYPH H007EGYPTIAN HIEROGLYPH H008EGYPTIAN HIER" + + "OGLYPH I001EGYPTIAN HIEROGLYPH I002EGYPTIAN HIEROGLYPH I003EGYPTIAN HIER" + + "OGLYPH I004EGYPTIAN HIEROGLYPH I005EGYPTIAN HIEROGLYPH I005AEGYPTIAN HIE" + + "ROGLYPH I006EGYPTIAN HIEROGLYPH I007EGYPTIAN HIEROGLYPH I008EGYPTIAN HIE" + + "ROGLYPH I009EGYPTIAN HIEROGLYPH I009AEGYPTIAN HIEROGLYPH I010EGYPTIAN HI" + + "EROGLYPH I010AEGYPTIAN HIEROGLYPH I011EGYPTIAN HIEROGLYPH I011AEGYPTIAN " + + "HIEROGLYPH I012EGYPTIAN HIEROGLYPH I013EGYPTIAN HIEROGLYPH I014EGYPTIAN " + + "HIEROGLYPH I015EGYPTIAN HIEROGLYPH K001EGYPTIAN HIEROGLYPH K002EGYPTIAN " + + "HIEROGLYPH K003EGYPTIAN HIEROGLYPH K004EGYPTIAN HIEROGLYPH K005EGYPTIAN " + + "HIEROGLYPH K006EGYPTIAN HIEROGLYPH K007EGYPTIAN HIEROGLYPH K008EGYPTIAN " + + "HIEROGLYPH L001EGYPTIAN HIEROGLYPH L002EGYPTIAN HIEROGLYPH L002AEGYPTIAN" + + " HIEROGLYPH L003EGYPTIAN HIEROGLYPH L004EGYPTIAN HIEROGLYPH L005EGYPTIAN" + + " HIEROGLYPH L006EGYPTIAN HIEROGLYPH L006AEGYPTIAN HIEROGLYPH L007EGYPTIA" + + "N HIEROGLYPH L008EGYPTIAN HIEROGLYPH M001EGYPTIAN HIEROGLYPH M001AEGYPTI" + + "AN HIEROGLYPH M001BEGYPTIAN HIEROGLYPH M002EGYPTIAN HIEROGLYPH M003EGYPT" + + "IAN HIEROGLYPH M003AEGYPTIAN HIEROGLYPH M004EGYPTIAN HIEROGLYPH M005EGYP" + + "TIAN HIEROGLYPH M006EGYPTIAN HIEROGLYPH M007EGYPTIAN HIEROGLYPH M008EGYP" + + "TIAN HIEROGLYPH M009EGYPTIAN HIEROGLYPH M010EGYPTIAN HIEROGLYPH M010AEGY" + + "PTIAN HIEROGLYPH M011EGYPTIAN HIEROGLYPH M012EGYPTIAN HIEROGLYPH M012AEG" + + "YPTIAN HIEROGLYPH M012BEGYPTIAN HIEROGLYPH M012CEGYPTIAN HIEROGLYPH M012" + + "DEGYPTIAN HIEROGLYPH M012EEGYPTIAN HIEROGLYPH M012FEGYPTIAN HIEROGLYPH M" + + "012GEGYPTIAN HIEROGLYPH M012HEGYPTIAN HIEROGLYPH M013EGYPTIAN HIEROGLYPH" + + " M014EGYPTIAN HIEROGLYPH M015EGYPTIAN HIEROGLYPH M015AEGYPTIAN HIEROGLYP" + + "H M016EGYPTIAN HIEROGLYPH M016AEGYPTIAN HIEROGLYPH M017EGYPTIAN HIEROGLY" + + "PH M017AEGYPTIAN HIEROGLYPH M018EGYPTIAN HIEROGLYPH M019EGYPTIAN HIEROGL" + + "YPH M020EGYPTIAN HIEROGLYPH M021EGYPTIAN HIEROGLYPH M022EGYPTIAN HIEROGL" + + "YPH M022AEGYPTIAN HIEROGLYPH M023EGYPTIAN HIEROGLYPH M024EGYPTIAN HIEROG" + + "LYPH M024AEGYPTIAN HIEROGLYPH M025EGYPTIAN HIEROGLYPH M026EGYPTIAN HIERO" + + "GLYPH M027EGYPTIAN HIEROGLYPH M028EGYPTIAN HIEROGLYPH M028AEGYPTIAN HIER" + + "OGLYPH M029EGYPTIAN HIEROGLYPH M030EGYPTIAN HIEROGLYPH M031EGYPTIAN HIER" + + "OGLYPH M031AEGYPTIAN HIEROGLYPH M032EGYPTIAN HIEROGLYPH M033EGYPTIAN HIE" + + "ROGLYPH M033AEGYPTIAN HIEROGLYPH M033BEGYPTIAN HIEROGLYPH M034EGYPTIAN H" + + "IEROGLYPH M035EGYPTIAN HIEROGLYPH M036EGYPTIAN HIEROGLYPH M037EGYPTIAN H" + + "IEROGLYPH M038EGYPTIAN HIEROGLYPH M039EGYPTIAN HIEROGLYPH M040EGYPTIAN H" + + "IEROGLYPH M040AEGYPTIAN HIEROGLYPH M041EGYPTIAN HIEROGLYPH M042EGYPTIAN ") + ("" + + "HIEROGLYPH M043EGYPTIAN HIEROGLYPH M044EGYPTIAN HIEROGLYPH N001EGYPTIAN " + + "HIEROGLYPH N002EGYPTIAN HIEROGLYPH N003EGYPTIAN HIEROGLYPH N004EGYPTIAN " + + "HIEROGLYPH N005EGYPTIAN HIEROGLYPH N006EGYPTIAN HIEROGLYPH N007EGYPTIAN " + + "HIEROGLYPH N008EGYPTIAN HIEROGLYPH N009EGYPTIAN HIEROGLYPH N010EGYPTIAN " + + "HIEROGLYPH N011EGYPTIAN HIEROGLYPH N012EGYPTIAN HIEROGLYPH N013EGYPTIAN " + + "HIEROGLYPH N014EGYPTIAN HIEROGLYPH N015EGYPTIAN HIEROGLYPH N016EGYPTIAN " + + "HIEROGLYPH N017EGYPTIAN HIEROGLYPH N018EGYPTIAN HIEROGLYPH N018AEGYPTIAN" + + " HIEROGLYPH N018BEGYPTIAN HIEROGLYPH N019EGYPTIAN HIEROGLYPH N020EGYPTIA" + + "N HIEROGLYPH N021EGYPTIAN HIEROGLYPH N022EGYPTIAN HIEROGLYPH N023EGYPTIA" + + "N HIEROGLYPH N024EGYPTIAN HIEROGLYPH N025EGYPTIAN HIEROGLYPH N025AEGYPTI" + + "AN HIEROGLYPH N026EGYPTIAN HIEROGLYPH N027EGYPTIAN HIEROGLYPH N028EGYPTI" + + "AN HIEROGLYPH N029EGYPTIAN HIEROGLYPH N030EGYPTIAN HIEROGLYPH N031EGYPTI" + + "AN HIEROGLYPH N032EGYPTIAN HIEROGLYPH N033EGYPTIAN HIEROGLYPH N033AEGYPT" + + "IAN HIEROGLYPH N034EGYPTIAN HIEROGLYPH N034AEGYPTIAN HIEROGLYPH N035EGYP" + + "TIAN HIEROGLYPH N035AEGYPTIAN HIEROGLYPH N036EGYPTIAN HIEROGLYPH N037EGY" + + "PTIAN HIEROGLYPH N037AEGYPTIAN HIEROGLYPH N038EGYPTIAN HIEROGLYPH N039EG" + + "YPTIAN HIEROGLYPH N040EGYPTIAN HIEROGLYPH N041EGYPTIAN HIEROGLYPH N042EG" + + "YPTIAN HIEROGLYPH NL001EGYPTIAN HIEROGLYPH NL002EGYPTIAN HIEROGLYPH NL00" + + "3EGYPTIAN HIEROGLYPH NL004EGYPTIAN HIEROGLYPH NL005EGYPTIAN HIEROGLYPH N" + + "L005AEGYPTIAN HIEROGLYPH NL006EGYPTIAN HIEROGLYPH NL007EGYPTIAN HIEROGLY" + + "PH NL008EGYPTIAN HIEROGLYPH NL009EGYPTIAN HIEROGLYPH NL010EGYPTIAN HIERO" + + "GLYPH NL011EGYPTIAN HIEROGLYPH NL012EGYPTIAN HIEROGLYPH NL013EGYPTIAN HI" + + "EROGLYPH NL014EGYPTIAN HIEROGLYPH NL015EGYPTIAN HIEROGLYPH NL016EGYPTIAN" + + " HIEROGLYPH NL017EGYPTIAN HIEROGLYPH NL017AEGYPTIAN HIEROGLYPH NL018EGYP" + + "TIAN HIEROGLYPH NL019EGYPTIAN HIEROGLYPH NL020EGYPTIAN HIEROGLYPH NU001E" + + "GYPTIAN HIEROGLYPH NU002EGYPTIAN HIEROGLYPH NU003EGYPTIAN HIEROGLYPH NU0" + + "04EGYPTIAN HIEROGLYPH NU005EGYPTIAN HIEROGLYPH NU006EGYPTIAN HIEROGLYPH " + + "NU007EGYPTIAN HIEROGLYPH NU008EGYPTIAN HIEROGLYPH NU009EGYPTIAN HIEROGLY" + + "PH NU010EGYPTIAN HIEROGLYPH NU010AEGYPTIAN HIEROGLYPH NU011EGYPTIAN HIER" + + "OGLYPH NU011AEGYPTIAN HIEROGLYPH NU012EGYPTIAN HIEROGLYPH NU013EGYPTIAN " + + "HIEROGLYPH NU014EGYPTIAN HIEROGLYPH NU015EGYPTIAN HIEROGLYPH NU016EGYPTI" + + "AN HIEROGLYPH NU017EGYPTIAN HIEROGLYPH NU018EGYPTIAN HIEROGLYPH NU018AEG" + + "YPTIAN HIEROGLYPH NU019EGYPTIAN HIEROGLYPH NU020EGYPTIAN HIEROGLYPH NU02" + + "1EGYPTIAN HIEROGLYPH NU022EGYPTIAN HIEROGLYPH NU022AEGYPTIAN HIEROGLYPH " + + "O001EGYPTIAN HIEROGLYPH O001AEGYPTIAN HIEROGLYPH O002EGYPTIAN HIEROGLYPH" + + " O003EGYPTIAN HIEROGLYPH O004EGYPTIAN HIEROGLYPH O005EGYPTIAN HIEROGLYPH" + + " O005AEGYPTIAN HIEROGLYPH O006EGYPTIAN HIEROGLYPH O006AEGYPTIAN HIEROGLY" + + "PH O006BEGYPTIAN HIEROGLYPH O006CEGYPTIAN HIEROGLYPH O006DEGYPTIAN HIERO" + + "GLYPH O006EEGYPTIAN HIEROGLYPH O006FEGYPTIAN HIEROGLYPH O007EGYPTIAN HIE" + + "ROGLYPH O008EGYPTIAN HIEROGLYPH O009EGYPTIAN HIEROGLYPH O010EGYPTIAN HIE" + + "ROGLYPH O010AEGYPTIAN HIEROGLYPH O010BEGYPTIAN HIEROGLYPH O010CEGYPTIAN " + + "HIEROGLYPH O011EGYPTIAN HIEROGLYPH O012EGYPTIAN HIEROGLYPH O013EGYPTIAN " + + "HIEROGLYPH O014EGYPTIAN HIEROGLYPH O015EGYPTIAN HIEROGLYPH O016EGYPTIAN " + + "HIEROGLYPH O017EGYPTIAN HIEROGLYPH O018EGYPTIAN HIEROGLYPH O019EGYPTIAN " + + "HIEROGLYPH O019AEGYPTIAN HIEROGLYPH O020EGYPTIAN HIEROGLYPH O020AEGYPTIA" + + "N HIEROGLYPH O021EGYPTIAN HIEROGLYPH O022EGYPTIAN HIEROGLYPH O023EGYPTIA" + + "N HIEROGLYPH O024EGYPTIAN HIEROGLYPH O024AEGYPTIAN HIEROGLYPH O025EGYPTI" + + "AN HIEROGLYPH O025AEGYPTIAN HIEROGLYPH O026EGYPTIAN HIEROGLYPH O027EGYPT" + + "IAN HIEROGLYPH O028EGYPTIAN HIEROGLYPH O029EGYPTIAN HIEROGLYPH O029AEGYP" + + "TIAN HIEROGLYPH O030EGYPTIAN HIEROGLYPH O030AEGYPTIAN HIEROGLYPH O031EGY" + + "PTIAN HIEROGLYPH O032EGYPTIAN HIEROGLYPH O033EGYPTIAN HIEROGLYPH O033AEG" + + "YPTIAN HIEROGLYPH O034EGYPTIAN HIEROGLYPH O035EGYPTIAN HIEROGLYPH O036EG" + + "YPTIAN HIEROGLYPH O036AEGYPTIAN HIEROGLYPH O036BEGYPTIAN HIEROGLYPH O036" + + "CEGYPTIAN HIEROGLYPH O036DEGYPTIAN HIEROGLYPH O037EGYPTIAN HIEROGLYPH O0" + + "38EGYPTIAN HIEROGLYPH O039EGYPTIAN HIEROGLYPH O040EGYPTIAN HIEROGLYPH O0" + + "41EGYPTIAN HIEROGLYPH O042EGYPTIAN HIEROGLYPH O043EGYPTIAN HIEROGLYPH O0" + + "44EGYPTIAN HIEROGLYPH O045EGYPTIAN HIEROGLYPH O046EGYPTIAN HIEROGLYPH O0" + + "47EGYPTIAN HIEROGLYPH O048EGYPTIAN HIEROGLYPH O049EGYPTIAN HIEROGLYPH O0" + + "50EGYPTIAN HIEROGLYPH O050AEGYPTIAN HIEROGLYPH O050BEGYPTIAN HIEROGLYPH " + + "O051EGYPTIAN HIEROGLYPH P001EGYPTIAN HIEROGLYPH P001AEGYPTIAN HIEROGLYPH" + + " P002EGYPTIAN HIEROGLYPH P003EGYPTIAN HIEROGLYPH P003AEGYPTIAN HIEROGLYP" + + "H P004EGYPTIAN HIEROGLYPH P005EGYPTIAN HIEROGLYPH P006EGYPTIAN HIEROGLYP" + + "H P007EGYPTIAN HIEROGLYPH P008EGYPTIAN HIEROGLYPH P009EGYPTIAN HIEROGLYP" + + "H P010EGYPTIAN HIEROGLYPH P011EGYPTIAN HIEROGLYPH Q001EGYPTIAN HIEROGLYP") + ("" + + "H Q002EGYPTIAN HIEROGLYPH Q003EGYPTIAN HIEROGLYPH Q004EGYPTIAN HIEROGLYP" + + "H Q005EGYPTIAN HIEROGLYPH Q006EGYPTIAN HIEROGLYPH Q007EGYPTIAN HIEROGLYP" + + "H R001EGYPTIAN HIEROGLYPH R002EGYPTIAN HIEROGLYPH R002AEGYPTIAN HIEROGLY" + + "PH R003EGYPTIAN HIEROGLYPH R003AEGYPTIAN HIEROGLYPH R003BEGYPTIAN HIEROG" + + "LYPH R004EGYPTIAN HIEROGLYPH R005EGYPTIAN HIEROGLYPH R006EGYPTIAN HIEROG" + + "LYPH R007EGYPTIAN HIEROGLYPH R008EGYPTIAN HIEROGLYPH R009EGYPTIAN HIEROG" + + "LYPH R010EGYPTIAN HIEROGLYPH R010AEGYPTIAN HIEROGLYPH R011EGYPTIAN HIERO" + + "GLYPH R012EGYPTIAN HIEROGLYPH R013EGYPTIAN HIEROGLYPH R014EGYPTIAN HIERO" + + "GLYPH R015EGYPTIAN HIEROGLYPH R016EGYPTIAN HIEROGLYPH R016AEGYPTIAN HIER" + + "OGLYPH R017EGYPTIAN HIEROGLYPH R018EGYPTIAN HIEROGLYPH R019EGYPTIAN HIER" + + "OGLYPH R020EGYPTIAN HIEROGLYPH R021EGYPTIAN HIEROGLYPH R022EGYPTIAN HIER" + + "OGLYPH R023EGYPTIAN HIEROGLYPH R024EGYPTIAN HIEROGLYPH R025EGYPTIAN HIER" + + "OGLYPH R026EGYPTIAN HIEROGLYPH R027EGYPTIAN HIEROGLYPH R028EGYPTIAN HIER" + + "OGLYPH R029EGYPTIAN HIEROGLYPH S001EGYPTIAN HIEROGLYPH S002EGYPTIAN HIER" + + "OGLYPH S002AEGYPTIAN HIEROGLYPH S003EGYPTIAN HIEROGLYPH S004EGYPTIAN HIE" + + "ROGLYPH S005EGYPTIAN HIEROGLYPH S006EGYPTIAN HIEROGLYPH S006AEGYPTIAN HI" + + "EROGLYPH S007EGYPTIAN HIEROGLYPH S008EGYPTIAN HIEROGLYPH S009EGYPTIAN HI" + + "EROGLYPH S010EGYPTIAN HIEROGLYPH S011EGYPTIAN HIEROGLYPH S012EGYPTIAN HI" + + "EROGLYPH S013EGYPTIAN HIEROGLYPH S014EGYPTIAN HIEROGLYPH S014AEGYPTIAN H" + + "IEROGLYPH S014BEGYPTIAN HIEROGLYPH S015EGYPTIAN HIEROGLYPH S016EGYPTIAN " + + "HIEROGLYPH S017EGYPTIAN HIEROGLYPH S017AEGYPTIAN HIEROGLYPH S018EGYPTIAN" + + " HIEROGLYPH S019EGYPTIAN HIEROGLYPH S020EGYPTIAN HIEROGLYPH S021EGYPTIAN" + + " HIEROGLYPH S022EGYPTIAN HIEROGLYPH S023EGYPTIAN HIEROGLYPH S024EGYPTIAN" + + " HIEROGLYPH S025EGYPTIAN HIEROGLYPH S026EGYPTIAN HIEROGLYPH S026AEGYPTIA" + + "N HIEROGLYPH S026BEGYPTIAN HIEROGLYPH S027EGYPTIAN HIEROGLYPH S028EGYPTI" + + "AN HIEROGLYPH S029EGYPTIAN HIEROGLYPH S030EGYPTIAN HIEROGLYPH S031EGYPTI" + + "AN HIEROGLYPH S032EGYPTIAN HIEROGLYPH S033EGYPTIAN HIEROGLYPH S034EGYPTI" + + "AN HIEROGLYPH S035EGYPTIAN HIEROGLYPH S035AEGYPTIAN HIEROGLYPH S036EGYPT" + + "IAN HIEROGLYPH S037EGYPTIAN HIEROGLYPH S038EGYPTIAN HIEROGLYPH S039EGYPT" + + "IAN HIEROGLYPH S040EGYPTIAN HIEROGLYPH S041EGYPTIAN HIEROGLYPH S042EGYPT" + + "IAN HIEROGLYPH S043EGYPTIAN HIEROGLYPH S044EGYPTIAN HIEROGLYPH S045EGYPT" + + "IAN HIEROGLYPH S046EGYPTIAN HIEROGLYPH T001EGYPTIAN HIEROGLYPH T002EGYPT" + + "IAN HIEROGLYPH T003EGYPTIAN HIEROGLYPH T003AEGYPTIAN HIEROGLYPH T004EGYP" + + "TIAN HIEROGLYPH T005EGYPTIAN HIEROGLYPH T006EGYPTIAN HIEROGLYPH T007EGYP" + + "TIAN HIEROGLYPH T007AEGYPTIAN HIEROGLYPH T008EGYPTIAN HIEROGLYPH T008AEG" + + "YPTIAN HIEROGLYPH T009EGYPTIAN HIEROGLYPH T009AEGYPTIAN HIEROGLYPH T010E" + + "GYPTIAN HIEROGLYPH T011EGYPTIAN HIEROGLYPH T011AEGYPTIAN HIEROGLYPH T012" + + "EGYPTIAN HIEROGLYPH T013EGYPTIAN HIEROGLYPH T014EGYPTIAN HIEROGLYPH T015" + + "EGYPTIAN HIEROGLYPH T016EGYPTIAN HIEROGLYPH T016AEGYPTIAN HIEROGLYPH T01" + + "7EGYPTIAN HIEROGLYPH T018EGYPTIAN HIEROGLYPH T019EGYPTIAN HIEROGLYPH T02" + + "0EGYPTIAN HIEROGLYPH T021EGYPTIAN HIEROGLYPH T022EGYPTIAN HIEROGLYPH T02" + + "3EGYPTIAN HIEROGLYPH T024EGYPTIAN HIEROGLYPH T025EGYPTIAN HIEROGLYPH T02" + + "6EGYPTIAN HIEROGLYPH T027EGYPTIAN HIEROGLYPH T028EGYPTIAN HIEROGLYPH T02" + + "9EGYPTIAN HIEROGLYPH T030EGYPTIAN HIEROGLYPH T031EGYPTIAN HIEROGLYPH T03" + + "2EGYPTIAN HIEROGLYPH T032AEGYPTIAN HIEROGLYPH T033EGYPTIAN HIEROGLYPH T0" + + "33AEGYPTIAN HIEROGLYPH T034EGYPTIAN HIEROGLYPH T035EGYPTIAN HIEROGLYPH T" + + "036EGYPTIAN HIEROGLYPH U001EGYPTIAN HIEROGLYPH U002EGYPTIAN HIEROGLYPH U" + + "003EGYPTIAN HIEROGLYPH U004EGYPTIAN HIEROGLYPH U005EGYPTIAN HIEROGLYPH U" + + "006EGYPTIAN HIEROGLYPH U006AEGYPTIAN HIEROGLYPH U006BEGYPTIAN HIEROGLYPH" + + " U007EGYPTIAN HIEROGLYPH U008EGYPTIAN HIEROGLYPH U009EGYPTIAN HIEROGLYPH" + + " U010EGYPTIAN HIEROGLYPH U011EGYPTIAN HIEROGLYPH U012EGYPTIAN HIEROGLYPH" + + " U013EGYPTIAN HIEROGLYPH U014EGYPTIAN HIEROGLYPH U015EGYPTIAN HIEROGLYPH" + + " U016EGYPTIAN HIEROGLYPH U017EGYPTIAN HIEROGLYPH U018EGYPTIAN HIEROGLYPH" + + " U019EGYPTIAN HIEROGLYPH U020EGYPTIAN HIEROGLYPH U021EGYPTIAN HIEROGLYPH" + + " U022EGYPTIAN HIEROGLYPH U023EGYPTIAN HIEROGLYPH U023AEGYPTIAN HIEROGLYP" + + "H U024EGYPTIAN HIEROGLYPH U025EGYPTIAN HIEROGLYPH U026EGYPTIAN HIEROGLYP" + + "H U027EGYPTIAN HIEROGLYPH U028EGYPTIAN HIEROGLYPH U029EGYPTIAN HIEROGLYP" + + "H U029AEGYPTIAN HIEROGLYPH U030EGYPTIAN HIEROGLYPH U031EGYPTIAN HIEROGLY" + + "PH U032EGYPTIAN HIEROGLYPH U032AEGYPTIAN HIEROGLYPH U033EGYPTIAN HIEROGL" + + "YPH U034EGYPTIAN HIEROGLYPH U035EGYPTIAN HIEROGLYPH U036EGYPTIAN HIEROGL" + + "YPH U037EGYPTIAN HIEROGLYPH U038EGYPTIAN HIEROGLYPH U039EGYPTIAN HIEROGL" + + "YPH U040EGYPTIAN HIEROGLYPH U041EGYPTIAN HIEROGLYPH U042EGYPTIAN HIEROGL" + + "YPH V001EGYPTIAN HIEROGLYPH V001AEGYPTIAN HIEROGLYPH V001BEGYPTIAN HIERO" + + "GLYPH V001CEGYPTIAN HIEROGLYPH V001DEGYPTIAN HIEROGLYPH V001EEGYPTIAN HI") + ("" + + "EROGLYPH V001FEGYPTIAN HIEROGLYPH V001GEGYPTIAN HIEROGLYPH V001HEGYPTIAN" + + " HIEROGLYPH V001IEGYPTIAN HIEROGLYPH V002EGYPTIAN HIEROGLYPH V002AEGYPTI" + + "AN HIEROGLYPH V003EGYPTIAN HIEROGLYPH V004EGYPTIAN HIEROGLYPH V005EGYPTI" + + "AN HIEROGLYPH V006EGYPTIAN HIEROGLYPH V007EGYPTIAN HIEROGLYPH V007AEGYPT" + + "IAN HIEROGLYPH V007BEGYPTIAN HIEROGLYPH V008EGYPTIAN HIEROGLYPH V009EGYP" + + "TIAN HIEROGLYPH V010EGYPTIAN HIEROGLYPH V011EGYPTIAN HIEROGLYPH V011AEGY" + + "PTIAN HIEROGLYPH V011BEGYPTIAN HIEROGLYPH V011CEGYPTIAN HIEROGLYPH V012E" + + "GYPTIAN HIEROGLYPH V012AEGYPTIAN HIEROGLYPH V012BEGYPTIAN HIEROGLYPH V01" + + "3EGYPTIAN HIEROGLYPH V014EGYPTIAN HIEROGLYPH V015EGYPTIAN HIEROGLYPH V01" + + "6EGYPTIAN HIEROGLYPH V017EGYPTIAN HIEROGLYPH V018EGYPTIAN HIEROGLYPH V01" + + "9EGYPTIAN HIEROGLYPH V020EGYPTIAN HIEROGLYPH V020AEGYPTIAN HIEROGLYPH V0" + + "20BEGYPTIAN HIEROGLYPH V020CEGYPTIAN HIEROGLYPH V020DEGYPTIAN HIEROGLYPH" + + " V020EEGYPTIAN HIEROGLYPH V020FEGYPTIAN HIEROGLYPH V020GEGYPTIAN HIEROGL" + + "YPH V020HEGYPTIAN HIEROGLYPH V020IEGYPTIAN HIEROGLYPH V020JEGYPTIAN HIER" + + "OGLYPH V020KEGYPTIAN HIEROGLYPH V020LEGYPTIAN HIEROGLYPH V021EGYPTIAN HI" + + "EROGLYPH V022EGYPTIAN HIEROGLYPH V023EGYPTIAN HIEROGLYPH V023AEGYPTIAN H" + + "IEROGLYPH V024EGYPTIAN HIEROGLYPH V025EGYPTIAN HIEROGLYPH V026EGYPTIAN H" + + "IEROGLYPH V027EGYPTIAN HIEROGLYPH V028EGYPTIAN HIEROGLYPH V028AEGYPTIAN " + + "HIEROGLYPH V029EGYPTIAN HIEROGLYPH V029AEGYPTIAN HIEROGLYPH V030EGYPTIAN" + + " HIEROGLYPH V030AEGYPTIAN HIEROGLYPH V031EGYPTIAN HIEROGLYPH V031AEGYPTI" + + "AN HIEROGLYPH V032EGYPTIAN HIEROGLYPH V033EGYPTIAN HIEROGLYPH V033AEGYPT" + + "IAN HIEROGLYPH V034EGYPTIAN HIEROGLYPH V035EGYPTIAN HIEROGLYPH V036EGYPT" + + "IAN HIEROGLYPH V037EGYPTIAN HIEROGLYPH V037AEGYPTIAN HIEROGLYPH V038EGYP" + + "TIAN HIEROGLYPH V039EGYPTIAN HIEROGLYPH V040EGYPTIAN HIEROGLYPH V040AEGY" + + "PTIAN HIEROGLYPH W001EGYPTIAN HIEROGLYPH W002EGYPTIAN HIEROGLYPH W003EGY" + + "PTIAN HIEROGLYPH W003AEGYPTIAN HIEROGLYPH W004EGYPTIAN HIEROGLYPH W005EG" + + "YPTIAN HIEROGLYPH W006EGYPTIAN HIEROGLYPH W007EGYPTIAN HIEROGLYPH W008EG" + + "YPTIAN HIEROGLYPH W009EGYPTIAN HIEROGLYPH W009AEGYPTIAN HIEROGLYPH W010E" + + "GYPTIAN HIEROGLYPH W010AEGYPTIAN HIEROGLYPH W011EGYPTIAN HIEROGLYPH W012" + + "EGYPTIAN HIEROGLYPH W013EGYPTIAN HIEROGLYPH W014EGYPTIAN HIEROGLYPH W014" + + "AEGYPTIAN HIEROGLYPH W015EGYPTIAN HIEROGLYPH W016EGYPTIAN HIEROGLYPH W01" + + "7EGYPTIAN HIEROGLYPH W017AEGYPTIAN HIEROGLYPH W018EGYPTIAN HIEROGLYPH W0" + + "18AEGYPTIAN HIEROGLYPH W019EGYPTIAN HIEROGLYPH W020EGYPTIAN HIEROGLYPH W" + + "021EGYPTIAN HIEROGLYPH W022EGYPTIAN HIEROGLYPH W023EGYPTIAN HIEROGLYPH W" + + "024EGYPTIAN HIEROGLYPH W024AEGYPTIAN HIEROGLYPH W025EGYPTIAN HIEROGLYPH " + + "X001EGYPTIAN HIEROGLYPH X002EGYPTIAN HIEROGLYPH X003EGYPTIAN HIEROGLYPH " + + "X004EGYPTIAN HIEROGLYPH X004AEGYPTIAN HIEROGLYPH X004BEGYPTIAN HIEROGLYP" + + "H X005EGYPTIAN HIEROGLYPH X006EGYPTIAN HIEROGLYPH X006AEGYPTIAN HIEROGLY" + + "PH X007EGYPTIAN HIEROGLYPH X008EGYPTIAN HIEROGLYPH X008AEGYPTIAN HIEROGL" + + "YPH Y001EGYPTIAN HIEROGLYPH Y001AEGYPTIAN HIEROGLYPH Y002EGYPTIAN HIEROG" + + "LYPH Y003EGYPTIAN HIEROGLYPH Y004EGYPTIAN HIEROGLYPH Y005EGYPTIAN HIEROG" + + "LYPH Y006EGYPTIAN HIEROGLYPH Y007EGYPTIAN HIEROGLYPH Y008EGYPTIAN HIEROG" + + "LYPH Z001EGYPTIAN HIEROGLYPH Z002EGYPTIAN HIEROGLYPH Z002AEGYPTIAN HIERO" + + "GLYPH Z002BEGYPTIAN HIEROGLYPH Z002CEGYPTIAN HIEROGLYPH Z002DEGYPTIAN HI" + + "EROGLYPH Z003EGYPTIAN HIEROGLYPH Z003AEGYPTIAN HIEROGLYPH Z003BEGYPTIAN " + + "HIEROGLYPH Z004EGYPTIAN HIEROGLYPH Z004AEGYPTIAN HIEROGLYPH Z005EGYPTIAN" + + " HIEROGLYPH Z005AEGYPTIAN HIEROGLYPH Z006EGYPTIAN HIEROGLYPH Z007EGYPTIA" + + "N HIEROGLYPH Z008EGYPTIAN HIEROGLYPH Z009EGYPTIAN HIEROGLYPH Z010EGYPTIA" + + "N HIEROGLYPH Z011EGYPTIAN HIEROGLYPH Z012EGYPTIAN HIEROGLYPH Z013EGYPTIA" + + "N HIEROGLYPH Z014EGYPTIAN HIEROGLYPH Z015EGYPTIAN HIEROGLYPH Z015AEGYPTI" + + "AN HIEROGLYPH Z015BEGYPTIAN HIEROGLYPH Z015CEGYPTIAN HIEROGLYPH Z015DEGY" + + "PTIAN HIEROGLYPH Z015EEGYPTIAN HIEROGLYPH Z015FEGYPTIAN HIEROGLYPH Z015G" + + "EGYPTIAN HIEROGLYPH Z015HEGYPTIAN HIEROGLYPH Z015IEGYPTIAN HIEROGLYPH Z0" + + "16EGYPTIAN HIEROGLYPH Z016AEGYPTIAN HIEROGLYPH Z016BEGYPTIAN HIEROGLYPH " + + "Z016CEGYPTIAN HIEROGLYPH Z016DEGYPTIAN HIEROGLYPH Z016EEGYPTIAN HIEROGLY" + + "PH Z016FEGYPTIAN HIEROGLYPH Z016GEGYPTIAN HIEROGLYPH Z016HEGYPTIAN HIERO" + + "GLYPH AA001EGYPTIAN HIEROGLYPH AA002EGYPTIAN HIEROGLYPH AA003EGYPTIAN HI" + + "EROGLYPH AA004EGYPTIAN HIEROGLYPH AA005EGYPTIAN HIEROGLYPH AA006EGYPTIAN" + + " HIEROGLYPH AA007EGYPTIAN HIEROGLYPH AA007AEGYPTIAN HIEROGLYPH AA007BEGY" + + "PTIAN HIEROGLYPH AA008EGYPTIAN HIEROGLYPH AA009EGYPTIAN HIEROGLYPH AA010" + + "EGYPTIAN HIEROGLYPH AA011EGYPTIAN HIEROGLYPH AA012EGYPTIAN HIEROGLYPH AA" + + "013EGYPTIAN HIEROGLYPH AA014EGYPTIAN HIEROGLYPH AA015EGYPTIAN HIEROGLYPH" + + " AA016EGYPTIAN HIEROGLYPH AA017EGYPTIAN HIEROGLYPH AA018EGYPTIAN HIEROGL" + + "YPH AA019EGYPTIAN HIEROGLYPH AA020EGYPTIAN HIEROGLYPH AA021EGYPTIAN HIER") + ("" + + "OGLYPH AA022EGYPTIAN HIEROGLYPH AA023EGYPTIAN HIEROGLYPH AA024EGYPTIAN H" + + "IEROGLYPH AA025EGYPTIAN HIEROGLYPH AA026EGYPTIAN HIEROGLYPH AA027EGYPTIA" + + "N HIEROGLYPH AA028EGYPTIAN HIEROGLYPH AA029EGYPTIAN HIEROGLYPH AA030EGYP" + + "TIAN HIEROGLYPH AA031EGYPTIAN HIEROGLYPH AA032ANATOLIAN HIEROGLYPH A001A" + + "NATOLIAN HIEROGLYPH A002ANATOLIAN HIEROGLYPH A003ANATOLIAN HIEROGLYPH A0" + + "04ANATOLIAN HIEROGLYPH A005ANATOLIAN HIEROGLYPH A006ANATOLIAN HIEROGLYPH" + + " A007ANATOLIAN HIEROGLYPH A008ANATOLIAN HIEROGLYPH A009ANATOLIAN HIEROGL" + + "YPH A010ANATOLIAN HIEROGLYPH A010AANATOLIAN HIEROGLYPH A011ANATOLIAN HIE" + + "ROGLYPH A012ANATOLIAN HIEROGLYPH A013ANATOLIAN HIEROGLYPH A014ANATOLIAN " + + "HIEROGLYPH A015ANATOLIAN HIEROGLYPH A016ANATOLIAN HIEROGLYPH A017ANATOLI" + + "AN HIEROGLYPH A018ANATOLIAN HIEROGLYPH A019ANATOLIAN HIEROGLYPH A020ANAT" + + "OLIAN HIEROGLYPH A021ANATOLIAN HIEROGLYPH A022ANATOLIAN HIEROGLYPH A023A" + + "NATOLIAN HIEROGLYPH A024ANATOLIAN HIEROGLYPH A025ANATOLIAN HIEROGLYPH A0" + + "26ANATOLIAN HIEROGLYPH A026AANATOLIAN HIEROGLYPH A027ANATOLIAN HIEROGLYP" + + "H A028ANATOLIAN HIEROGLYPH A029ANATOLIAN HIEROGLYPH A030ANATOLIAN HIEROG" + + "LYPH A031ANATOLIAN HIEROGLYPH A032ANATOLIAN HIEROGLYPH A033ANATOLIAN HIE" + + "ROGLYPH A034ANATOLIAN HIEROGLYPH A035ANATOLIAN HIEROGLYPH A036ANATOLIAN " + + "HIEROGLYPH A037ANATOLIAN HIEROGLYPH A038ANATOLIAN HIEROGLYPH A039ANATOLI" + + "AN HIEROGLYPH A039AANATOLIAN HIEROGLYPH A040ANATOLIAN HIEROGLYPH A041ANA" + + "TOLIAN HIEROGLYPH A041AANATOLIAN HIEROGLYPH A042ANATOLIAN HIEROGLYPH A04" + + "3ANATOLIAN HIEROGLYPH A044ANATOLIAN HIEROGLYPH A045ANATOLIAN HIEROGLYPH " + + "A045AANATOLIAN HIEROGLYPH A046ANATOLIAN HIEROGLYPH A046AANATOLIAN HIEROG" + + "LYPH A046BANATOLIAN HIEROGLYPH A047ANATOLIAN HIEROGLYPH A048ANATOLIAN HI" + + "EROGLYPH A049ANATOLIAN HIEROGLYPH A050ANATOLIAN HIEROGLYPH A051ANATOLIAN" + + " HIEROGLYPH A052ANATOLIAN HIEROGLYPH A053ANATOLIAN HIEROGLYPH A054ANATOL" + + "IAN HIEROGLYPH A055ANATOLIAN HIEROGLYPH A056ANATOLIAN HIEROGLYPH A057ANA" + + "TOLIAN HIEROGLYPH A058ANATOLIAN HIEROGLYPH A059ANATOLIAN HIEROGLYPH A060" + + "ANATOLIAN HIEROGLYPH A061ANATOLIAN HIEROGLYPH A062ANATOLIAN HIEROGLYPH A" + + "063ANATOLIAN HIEROGLYPH A064ANATOLIAN HIEROGLYPH A065ANATOLIAN HIEROGLYP" + + "H A066ANATOLIAN HIEROGLYPH A066AANATOLIAN HIEROGLYPH A066BANATOLIAN HIER" + + "OGLYPH A066CANATOLIAN HIEROGLYPH A067ANATOLIAN HIEROGLYPH A068ANATOLIAN " + + "HIEROGLYPH A069ANATOLIAN HIEROGLYPH A070ANATOLIAN HIEROGLYPH A071ANATOLI" + + "AN HIEROGLYPH A072ANATOLIAN HIEROGLYPH A073ANATOLIAN HIEROGLYPH A074ANAT" + + "OLIAN HIEROGLYPH A075ANATOLIAN HIEROGLYPH A076ANATOLIAN HIEROGLYPH A077A" + + "NATOLIAN HIEROGLYPH A078ANATOLIAN HIEROGLYPH A079ANATOLIAN HIEROGLYPH A0" + + "80ANATOLIAN HIEROGLYPH A081ANATOLIAN HIEROGLYPH A082ANATOLIAN HIEROGLYPH" + + " A083ANATOLIAN HIEROGLYPH A084ANATOLIAN HIEROGLYPH A085ANATOLIAN HIEROGL" + + "YPH A086ANATOLIAN HIEROGLYPH A087ANATOLIAN HIEROGLYPH A088ANATOLIAN HIER" + + "OGLYPH A089ANATOLIAN HIEROGLYPH A090ANATOLIAN HIEROGLYPH A091ANATOLIAN H" + + "IEROGLYPH A092ANATOLIAN HIEROGLYPH A093ANATOLIAN HIEROGLYPH A094ANATOLIA" + + "N HIEROGLYPH A095ANATOLIAN HIEROGLYPH A096ANATOLIAN HIEROGLYPH A097ANATO" + + "LIAN HIEROGLYPH A097AANATOLIAN HIEROGLYPH A098ANATOLIAN HIEROGLYPH A098A" + + "ANATOLIAN HIEROGLYPH A099ANATOLIAN HIEROGLYPH A100ANATOLIAN HIEROGLYPH A" + + "100AANATOLIAN HIEROGLYPH A101ANATOLIAN HIEROGLYPH A101AANATOLIAN HIEROGL" + + "YPH A102ANATOLIAN HIEROGLYPH A102AANATOLIAN HIEROGLYPH A103ANATOLIAN HIE" + + "ROGLYPH A104ANATOLIAN HIEROGLYPH A104AANATOLIAN HIEROGLYPH A104BANATOLIA" + + "N HIEROGLYPH A104CANATOLIAN HIEROGLYPH A105ANATOLIAN HIEROGLYPH A105AANA" + + "TOLIAN HIEROGLYPH A105BANATOLIAN HIEROGLYPH A106ANATOLIAN HIEROGLYPH A10" + + "7ANATOLIAN HIEROGLYPH A107AANATOLIAN HIEROGLYPH A107BANATOLIAN HIEROGLYP" + + "H A107CANATOLIAN HIEROGLYPH A108ANATOLIAN HIEROGLYPH A109ANATOLIAN HIERO" + + "GLYPH A110ANATOLIAN HIEROGLYPH A110AANATOLIAN HIEROGLYPH A110BANATOLIAN " + + "HIEROGLYPH A111ANATOLIAN HIEROGLYPH A112ANATOLIAN HIEROGLYPH A113ANATOLI" + + "AN HIEROGLYPH A114ANATOLIAN HIEROGLYPH A115ANATOLIAN HIEROGLYPH A115AANA" + + "TOLIAN HIEROGLYPH A116ANATOLIAN HIEROGLYPH A117ANATOLIAN HIEROGLYPH A118" + + "ANATOLIAN HIEROGLYPH A119ANATOLIAN HIEROGLYPH A120ANATOLIAN HIEROGLYPH A" + + "121ANATOLIAN HIEROGLYPH A122ANATOLIAN HIEROGLYPH A123ANATOLIAN HIEROGLYP" + + "H A124ANATOLIAN HIEROGLYPH A125ANATOLIAN HIEROGLYPH A125AANATOLIAN HIERO" + + "GLYPH A126ANATOLIAN HIEROGLYPH A127ANATOLIAN HIEROGLYPH A128ANATOLIAN HI" + + "EROGLYPH A129ANATOLIAN HIEROGLYPH A130ANATOLIAN HIEROGLYPH A131ANATOLIAN" + + " HIEROGLYPH A132ANATOLIAN HIEROGLYPH A133ANATOLIAN HIEROGLYPH A134ANATOL" + + "IAN HIEROGLYPH A135ANATOLIAN HIEROGLYPH A135AANATOLIAN HIEROGLYPH A136AN" + + "ATOLIAN HIEROGLYPH A137ANATOLIAN HIEROGLYPH A138ANATOLIAN HIEROGLYPH A13" + + "9ANATOLIAN HIEROGLYPH A140ANATOLIAN HIEROGLYPH A141ANATOLIAN HIEROGLYPH " + + "A142ANATOLIAN HIEROGLYPH A143ANATOLIAN HIEROGLYPH A144ANATOLIAN HIEROGLY") + ("" + + "PH A145ANATOLIAN HIEROGLYPH A146ANATOLIAN HIEROGLYPH A147ANATOLIAN HIERO" + + "GLYPH A148ANATOLIAN HIEROGLYPH A149ANATOLIAN HIEROGLYPH A150ANATOLIAN HI" + + "EROGLYPH A151ANATOLIAN HIEROGLYPH A152ANATOLIAN HIEROGLYPH A153ANATOLIAN" + + " HIEROGLYPH A154ANATOLIAN HIEROGLYPH A155ANATOLIAN HIEROGLYPH A156ANATOL" + + "IAN HIEROGLYPH A157ANATOLIAN HIEROGLYPH A158ANATOLIAN HIEROGLYPH A159ANA" + + "TOLIAN HIEROGLYPH A160ANATOLIAN HIEROGLYPH A161ANATOLIAN HIEROGLYPH A162" + + "ANATOLIAN HIEROGLYPH A163ANATOLIAN HIEROGLYPH A164ANATOLIAN HIEROGLYPH A" + + "165ANATOLIAN HIEROGLYPH A166ANATOLIAN HIEROGLYPH A167ANATOLIAN HIEROGLYP" + + "H A168ANATOLIAN HIEROGLYPH A169ANATOLIAN HIEROGLYPH A170ANATOLIAN HIEROG" + + "LYPH A171ANATOLIAN HIEROGLYPH A172ANATOLIAN HIEROGLYPH A173ANATOLIAN HIE" + + "ROGLYPH A174ANATOLIAN HIEROGLYPH A175ANATOLIAN HIEROGLYPH A176ANATOLIAN " + + "HIEROGLYPH A177ANATOLIAN HIEROGLYPH A178ANATOLIAN HIEROGLYPH A179ANATOLI" + + "AN HIEROGLYPH A180ANATOLIAN HIEROGLYPH A181ANATOLIAN HIEROGLYPH A182ANAT" + + "OLIAN HIEROGLYPH A183ANATOLIAN HIEROGLYPH A184ANATOLIAN HIEROGLYPH A185A" + + "NATOLIAN HIEROGLYPH A186ANATOLIAN HIEROGLYPH A187ANATOLIAN HIEROGLYPH A1" + + "88ANATOLIAN HIEROGLYPH A189ANATOLIAN HIEROGLYPH A190ANATOLIAN HIEROGLYPH" + + " A191ANATOLIAN HIEROGLYPH A192ANATOLIAN HIEROGLYPH A193ANATOLIAN HIEROGL" + + "YPH A194ANATOLIAN HIEROGLYPH A195ANATOLIAN HIEROGLYPH A196ANATOLIAN HIER" + + "OGLYPH A197ANATOLIAN HIEROGLYPH A198ANATOLIAN HIEROGLYPH A199ANATOLIAN H" + + "IEROGLYPH A200ANATOLIAN HIEROGLYPH A201ANATOLIAN HIEROGLYPH A202ANATOLIA" + + "N HIEROGLYPH A202AANATOLIAN HIEROGLYPH A202BANATOLIAN HIEROGLYPH A203ANA" + + "TOLIAN HIEROGLYPH A204ANATOLIAN HIEROGLYPH A205ANATOLIAN HIEROGLYPH A206" + + "ANATOLIAN HIEROGLYPH A207ANATOLIAN HIEROGLYPH A207AANATOLIAN HIEROGLYPH " + + "A208ANATOLIAN HIEROGLYPH A209ANATOLIAN HIEROGLYPH A209AANATOLIAN HIEROGL" + + "YPH A210ANATOLIAN HIEROGLYPH A211ANATOLIAN HIEROGLYPH A212ANATOLIAN HIER" + + "OGLYPH A213ANATOLIAN HIEROGLYPH A214ANATOLIAN HIEROGLYPH A215ANATOLIAN H" + + "IEROGLYPH A215AANATOLIAN HIEROGLYPH A216ANATOLIAN HIEROGLYPH A216AANATOL" + + "IAN HIEROGLYPH A217ANATOLIAN HIEROGLYPH A218ANATOLIAN HIEROGLYPH A219ANA" + + "TOLIAN HIEROGLYPH A220ANATOLIAN HIEROGLYPH A221ANATOLIAN HIEROGLYPH A222" + + "ANATOLIAN HIEROGLYPH A223ANATOLIAN HIEROGLYPH A224ANATOLIAN HIEROGLYPH A" + + "225ANATOLIAN HIEROGLYPH A226ANATOLIAN HIEROGLYPH A227ANATOLIAN HIEROGLYP" + + "H A227AANATOLIAN HIEROGLYPH A228ANATOLIAN HIEROGLYPH A229ANATOLIAN HIERO" + + "GLYPH A230ANATOLIAN HIEROGLYPH A231ANATOLIAN HIEROGLYPH A232ANATOLIAN HI" + + "EROGLYPH A233ANATOLIAN HIEROGLYPH A234ANATOLIAN HIEROGLYPH A235ANATOLIAN" + + " HIEROGLYPH A236ANATOLIAN HIEROGLYPH A237ANATOLIAN HIEROGLYPH A238ANATOL" + + "IAN HIEROGLYPH A239ANATOLIAN HIEROGLYPH A240ANATOLIAN HIEROGLYPH A241ANA" + + "TOLIAN HIEROGLYPH A242ANATOLIAN HIEROGLYPH A243ANATOLIAN HIEROGLYPH A244" + + "ANATOLIAN HIEROGLYPH A245ANATOLIAN HIEROGLYPH A246ANATOLIAN HIEROGLYPH A" + + "247ANATOLIAN HIEROGLYPH A248ANATOLIAN HIEROGLYPH A249ANATOLIAN HIEROGLYP" + + "H A250ANATOLIAN HIEROGLYPH A251ANATOLIAN HIEROGLYPH A252ANATOLIAN HIEROG" + + "LYPH A253ANATOLIAN HIEROGLYPH A254ANATOLIAN HIEROGLYPH A255ANATOLIAN HIE" + + "ROGLYPH A256ANATOLIAN HIEROGLYPH A257ANATOLIAN HIEROGLYPH A258ANATOLIAN " + + "HIEROGLYPH A259ANATOLIAN HIEROGLYPH A260ANATOLIAN HIEROGLYPH A261ANATOLI" + + "AN HIEROGLYPH A262ANATOLIAN HIEROGLYPH A263ANATOLIAN HIEROGLYPH A264ANAT" + + "OLIAN HIEROGLYPH A265ANATOLIAN HIEROGLYPH A266ANATOLIAN HIEROGLYPH A267A" + + "NATOLIAN HIEROGLYPH A267AANATOLIAN HIEROGLYPH A268ANATOLIAN HIEROGLYPH A" + + "269ANATOLIAN HIEROGLYPH A270ANATOLIAN HIEROGLYPH A271ANATOLIAN HIEROGLYP" + + "H A272ANATOLIAN HIEROGLYPH A273ANATOLIAN HIEROGLYPH A274ANATOLIAN HIEROG" + + "LYPH A275ANATOLIAN HIEROGLYPH A276ANATOLIAN HIEROGLYPH A277ANATOLIAN HIE" + + "ROGLYPH A278ANATOLIAN HIEROGLYPH A279ANATOLIAN HIEROGLYPH A280ANATOLIAN " + + "HIEROGLYPH A281ANATOLIAN HIEROGLYPH A282ANATOLIAN HIEROGLYPH A283ANATOLI" + + "AN HIEROGLYPH A284ANATOLIAN HIEROGLYPH A285ANATOLIAN HIEROGLYPH A286ANAT" + + "OLIAN HIEROGLYPH A287ANATOLIAN HIEROGLYPH A288ANATOLIAN HIEROGLYPH A289A" + + "NATOLIAN HIEROGLYPH A289AANATOLIAN HIEROGLYPH A290ANATOLIAN HIEROGLYPH A" + + "291ANATOLIAN HIEROGLYPH A292ANATOLIAN HIEROGLYPH A293ANATOLIAN HIEROGLYP" + + "H A294ANATOLIAN HIEROGLYPH A294AANATOLIAN HIEROGLYPH A295ANATOLIAN HIERO" + + "GLYPH A296ANATOLIAN HIEROGLYPH A297ANATOLIAN HIEROGLYPH A298ANATOLIAN HI" + + "EROGLYPH A299ANATOLIAN HIEROGLYPH A299AANATOLIAN HIEROGLYPH A300ANATOLIA" + + "N HIEROGLYPH A301ANATOLIAN HIEROGLYPH A302ANATOLIAN HIEROGLYPH A303ANATO" + + "LIAN HIEROGLYPH A304ANATOLIAN HIEROGLYPH A305ANATOLIAN HIEROGLYPH A306AN" + + "ATOLIAN HIEROGLYPH A307ANATOLIAN HIEROGLYPH A308ANATOLIAN HIEROGLYPH A30" + + "9ANATOLIAN HIEROGLYPH A309AANATOLIAN HIEROGLYPH A310ANATOLIAN HIEROGLYPH" + + " A311ANATOLIAN HIEROGLYPH A312ANATOLIAN HIEROGLYPH A313ANATOLIAN HIEROGL" + + "YPH A314ANATOLIAN HIEROGLYPH A315ANATOLIAN HIEROGLYPH A316ANATOLIAN HIER") + ("" + + "OGLYPH A317ANATOLIAN HIEROGLYPH A318ANATOLIAN HIEROGLYPH A319ANATOLIAN H" + + "IEROGLYPH A320ANATOLIAN HIEROGLYPH A321ANATOLIAN HIEROGLYPH A322ANATOLIA" + + "N HIEROGLYPH A323ANATOLIAN HIEROGLYPH A324ANATOLIAN HIEROGLYPH A325ANATO" + + "LIAN HIEROGLYPH A326ANATOLIAN HIEROGLYPH A327ANATOLIAN HIEROGLYPH A328AN" + + "ATOLIAN HIEROGLYPH A329ANATOLIAN HIEROGLYPH A329AANATOLIAN HIEROGLYPH A3" + + "30ANATOLIAN HIEROGLYPH A331ANATOLIAN HIEROGLYPH A332AANATOLIAN HIEROGLYP" + + "H A332BANATOLIAN HIEROGLYPH A332CANATOLIAN HIEROGLYPH A333ANATOLIAN HIER" + + "OGLYPH A334ANATOLIAN HIEROGLYPH A335ANATOLIAN HIEROGLYPH A336ANATOLIAN H" + + "IEROGLYPH A336AANATOLIAN HIEROGLYPH A336BANATOLIAN HIEROGLYPH A336CANATO" + + "LIAN HIEROGLYPH A337ANATOLIAN HIEROGLYPH A338ANATOLIAN HIEROGLYPH A339AN" + + "ATOLIAN HIEROGLYPH A340ANATOLIAN HIEROGLYPH A341ANATOLIAN HIEROGLYPH A34" + + "2ANATOLIAN HIEROGLYPH A343ANATOLIAN HIEROGLYPH A344ANATOLIAN HIEROGLYPH " + + "A345ANATOLIAN HIEROGLYPH A346ANATOLIAN HIEROGLYPH A347ANATOLIAN HIEROGLY" + + "PH A348ANATOLIAN HIEROGLYPH A349ANATOLIAN HIEROGLYPH A350ANATOLIAN HIERO" + + "GLYPH A351ANATOLIAN HIEROGLYPH A352ANATOLIAN HIEROGLYPH A353ANATOLIAN HI" + + "EROGLYPH A354ANATOLIAN HIEROGLYPH A355ANATOLIAN HIEROGLYPH A356ANATOLIAN" + + " HIEROGLYPH A357ANATOLIAN HIEROGLYPH A358ANATOLIAN HIEROGLYPH A359ANATOL" + + "IAN HIEROGLYPH A359AANATOLIAN HIEROGLYPH A360ANATOLIAN HIEROGLYPH A361AN" + + "ATOLIAN HIEROGLYPH A362ANATOLIAN HIEROGLYPH A363ANATOLIAN HIEROGLYPH A36" + + "4ANATOLIAN HIEROGLYPH A364AANATOLIAN HIEROGLYPH A365ANATOLIAN HIEROGLYPH" + + " A366ANATOLIAN HIEROGLYPH A367ANATOLIAN HIEROGLYPH A368ANATOLIAN HIEROGL" + + "YPH A368AANATOLIAN HIEROGLYPH A369ANATOLIAN HIEROGLYPH A370ANATOLIAN HIE" + + "ROGLYPH A371ANATOLIAN HIEROGLYPH A371AANATOLIAN HIEROGLYPH A372ANATOLIAN" + + " HIEROGLYPH A373ANATOLIAN HIEROGLYPH A374ANATOLIAN HIEROGLYPH A375ANATOL" + + "IAN HIEROGLYPH A376ANATOLIAN HIEROGLYPH A377ANATOLIAN HIEROGLYPH A378ANA" + + "TOLIAN HIEROGLYPH A379ANATOLIAN HIEROGLYPH A380ANATOLIAN HIEROGLYPH A381" + + "ANATOLIAN HIEROGLYPH A381AANATOLIAN HIEROGLYPH A382ANATOLIAN HIEROGLYPH " + + "A383 RA OR RIANATOLIAN HIEROGLYPH A383AANATOLIAN HIEROGLYPH A384ANATOLIA" + + "N HIEROGLYPH A385ANATOLIAN HIEROGLYPH A386ANATOLIAN HIEROGLYPH A386AANAT" + + "OLIAN HIEROGLYPH A387ANATOLIAN HIEROGLYPH A388ANATOLIAN HIEROGLYPH A389A" + + "NATOLIAN HIEROGLYPH A390ANATOLIAN HIEROGLYPH A391ANATOLIAN HIEROGLYPH A3" + + "92ANATOLIAN HIEROGLYPH A393 EIGHTANATOLIAN HIEROGLYPH A394ANATOLIAN HIER" + + "OGLYPH A395ANATOLIAN HIEROGLYPH A396ANATOLIAN HIEROGLYPH A397ANATOLIAN H" + + "IEROGLYPH A398ANATOLIAN HIEROGLYPH A399ANATOLIAN HIEROGLYPH A400ANATOLIA" + + "N HIEROGLYPH A401ANATOLIAN HIEROGLYPH A402ANATOLIAN HIEROGLYPH A403ANATO" + + "LIAN HIEROGLYPH A404ANATOLIAN HIEROGLYPH A405ANATOLIAN HIEROGLYPH A406AN" + + "ATOLIAN HIEROGLYPH A407ANATOLIAN HIEROGLYPH A408ANATOLIAN HIEROGLYPH A40" + + "9ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARKANATOLIAN HIEROGLYPH A410A" + + " END LOGOGRAM MARKANATOLIAN HIEROGLYPH A411ANATOLIAN HIEROGLYPH A412ANAT" + + "OLIAN HIEROGLYPH A413ANATOLIAN HIEROGLYPH A414ANATOLIAN HIEROGLYPH A415A" + + "NATOLIAN HIEROGLYPH A416ANATOLIAN HIEROGLYPH A417ANATOLIAN HIEROGLYPH A4" + + "18ANATOLIAN HIEROGLYPH A419ANATOLIAN HIEROGLYPH A420ANATOLIAN HIEROGLYPH" + + " A421ANATOLIAN HIEROGLYPH A422ANATOLIAN HIEROGLYPH A423ANATOLIAN HIEROGL" + + "YPH A424ANATOLIAN HIEROGLYPH A425ANATOLIAN HIEROGLYPH A426ANATOLIAN HIER" + + "OGLYPH A427ANATOLIAN HIEROGLYPH A428ANATOLIAN HIEROGLYPH A429ANATOLIAN H" + + "IEROGLYPH A430ANATOLIAN HIEROGLYPH A431ANATOLIAN HIEROGLYPH A432ANATOLIA" + + "N HIEROGLYPH A433ANATOLIAN HIEROGLYPH A434ANATOLIAN HIEROGLYPH A435ANATO" + + "LIAN HIEROGLYPH A436ANATOLIAN HIEROGLYPH A437ANATOLIAN HIEROGLYPH A438AN" + + "ATOLIAN HIEROGLYPH A439ANATOLIAN HIEROGLYPH A440ANATOLIAN HIEROGLYPH A44" + + "1ANATOLIAN HIEROGLYPH A442ANATOLIAN HIEROGLYPH A443ANATOLIAN HIEROGLYPH " + + "A444ANATOLIAN HIEROGLYPH A445ANATOLIAN HIEROGLYPH A446ANATOLIAN HIEROGLY" + + "PH A447ANATOLIAN HIEROGLYPH A448ANATOLIAN HIEROGLYPH A449ANATOLIAN HIERO" + + "GLYPH A450ANATOLIAN HIEROGLYPH A450AANATOLIAN HIEROGLYPH A451ANATOLIAN H" + + "IEROGLYPH A452ANATOLIAN HIEROGLYPH A453ANATOLIAN HIEROGLYPH A454ANATOLIA" + + "N HIEROGLYPH A455ANATOLIAN HIEROGLYPH A456ANATOLIAN HIEROGLYPH A457ANATO" + + "LIAN HIEROGLYPH A457AANATOLIAN HIEROGLYPH A458ANATOLIAN HIEROGLYPH A459A" + + "NATOLIAN HIEROGLYPH A460ANATOLIAN HIEROGLYPH A461ANATOLIAN HIEROGLYPH A4" + + "62ANATOLIAN HIEROGLYPH A463ANATOLIAN HIEROGLYPH A464ANATOLIAN HIEROGLYPH" + + " A465ANATOLIAN HIEROGLYPH A466ANATOLIAN HIEROGLYPH A467ANATOLIAN HIEROGL" + + "YPH A468ANATOLIAN HIEROGLYPH A469ANATOLIAN HIEROGLYPH A470ANATOLIAN HIER" + + "OGLYPH A471ANATOLIAN HIEROGLYPH A472ANATOLIAN HIEROGLYPH A473ANATOLIAN H" + + "IEROGLYPH A474ANATOLIAN HIEROGLYPH A475ANATOLIAN HIEROGLYPH A476ANATOLIA" + + "N HIEROGLYPH A477ANATOLIAN HIEROGLYPH A478ANATOLIAN HIEROGLYPH A479ANATO" + + "LIAN HIEROGLYPH A480ANATOLIAN HIEROGLYPH A481ANATOLIAN HIEROGLYPH A482AN") + ("" + + "ATOLIAN HIEROGLYPH A483ANATOLIAN HIEROGLYPH A484ANATOLIAN HIEROGLYPH A48" + + "5ANATOLIAN HIEROGLYPH A486ANATOLIAN HIEROGLYPH A487ANATOLIAN HIEROGLYPH " + + "A488ANATOLIAN HIEROGLYPH A489ANATOLIAN HIEROGLYPH A490ANATOLIAN HIEROGLY" + + "PH A491ANATOLIAN HIEROGLYPH A492ANATOLIAN HIEROGLYPH A493ANATOLIAN HIERO" + + "GLYPH A494ANATOLIAN HIEROGLYPH A495ANATOLIAN HIEROGLYPH A496ANATOLIAN HI" + + "EROGLYPH A497ANATOLIAN HIEROGLYPH A501ANATOLIAN HIEROGLYPH A502ANATOLIAN" + + " HIEROGLYPH A503ANATOLIAN HIEROGLYPH A504ANATOLIAN HIEROGLYPH A505ANATOL" + + "IAN HIEROGLYPH A506ANATOLIAN HIEROGLYPH A507ANATOLIAN HIEROGLYPH A508ANA" + + "TOLIAN HIEROGLYPH A509ANATOLIAN HIEROGLYPH A510ANATOLIAN HIEROGLYPH A511" + + "ANATOLIAN HIEROGLYPH A512ANATOLIAN HIEROGLYPH A513ANATOLIAN HIEROGLYPH A" + + "514ANATOLIAN HIEROGLYPH A515ANATOLIAN HIEROGLYPH A516ANATOLIAN HIEROGLYP" + + "H A517ANATOLIAN HIEROGLYPH A518ANATOLIAN HIEROGLYPH A519ANATOLIAN HIEROG" + + "LYPH A520ANATOLIAN HIEROGLYPH A521ANATOLIAN HIEROGLYPH A522ANATOLIAN HIE" + + "ROGLYPH A523ANATOLIAN HIEROGLYPH A524ANATOLIAN HIEROGLYPH A525ANATOLIAN " + + "HIEROGLYPH A526ANATOLIAN HIEROGLYPH A527ANATOLIAN HIEROGLYPH A528ANATOLI" + + "AN HIEROGLYPH A529ANATOLIAN HIEROGLYPH A530BAMUM LETTER PHASE-A NGKUE MF" + + "ONBAMUM LETTER PHASE-A GBIEE FONBAMUM LETTER PHASE-A PON MFON PIPAEMGBIE" + + "EBAMUM LETTER PHASE-A PON MFON PIPAEMBABAMUM LETTER PHASE-A NAA MFONBAMU" + + "M LETTER PHASE-A SHUENSHUETBAMUM LETTER PHASE-A TITA MFONBAMUM LETTER PH" + + "ASE-A NZA MFONBAMUM LETTER PHASE-A SHINDA PA NJIBAMUM LETTER PHASE-A PON" + + " PA NJI PIPAEMGBIEEBAMUM LETTER PHASE-A PON PA NJI PIPAEMBABAMUM LETTER " + + "PHASE-A MAEMBGBIEEBAMUM LETTER PHASE-A TU MAEMBABAMUM LETTER PHASE-A NGA" + + "NGUBAMUM LETTER PHASE-A MAEMVEUXBAMUM LETTER PHASE-A MANSUAEBAMUM LETTER" + + " PHASE-A MVEUAENGAMBAMUM LETTER PHASE-A SEUNYAMBAMUM LETTER PHASE-A NTOQ" + + "PENBAMUM LETTER PHASE-A KEUKEUTNDABAMUM LETTER PHASE-A NKINDIBAMUM LETTE" + + "R PHASE-A SUUBAMUM LETTER PHASE-A NGKUENZEUMBAMUM LETTER PHASE-A LAPAQBA" + + "MUM LETTER PHASE-A LET KUTBAMUM LETTER PHASE-A NTAP MFAABAMUM LETTER PHA" + + "SE-A MAEKEUPBAMUM LETTER PHASE-A PASHAEBAMUM LETTER PHASE-A GHEUAERAEBAM" + + "UM LETTER PHASE-A PAMSHAEBAMUM LETTER PHASE-A MON NGGEUAETBAMUM LETTER P" + + "HASE-A NZUN MEUTBAMUM LETTER PHASE-A U YUQ NAEBAMUM LETTER PHASE-A GHEUA" + + "EGHEUAEBAMUM LETTER PHASE-A NTAP NTAABAMUM LETTER PHASE-A SISABAMUM LETT" + + "ER PHASE-A MGBASABAMUM LETTER PHASE-A MEUNJOMNDEUQBAMUM LETTER PHASE-A M" + + "OOMPUQBAMUM LETTER PHASE-A KAFABAMUM LETTER PHASE-A PA LEERAEWABAMUM LET" + + "TER PHASE-A NDA LEERAEWABAMUM LETTER PHASE-A PETBAMUM LETTER PHASE-A MAE" + + "MKPENBAMUM LETTER PHASE-A NIKABAMUM LETTER PHASE-A PUPBAMUM LETTER PHASE" + + "-A TUAEPBAMUM LETTER PHASE-A LUAEPBAMUM LETTER PHASE-A SONJAMBAMUM LETTE" + + "R PHASE-A TEUTEUWENBAMUM LETTER PHASE-A MAENYIBAMUM LETTER PHASE-A KETBA" + + "MUM LETTER PHASE-A NDAANGGEUAETBAMUM LETTER PHASE-A KUOQBAMUM LETTER PHA" + + "SE-A MOOMEUTBAMUM LETTER PHASE-A SHUMBAMUM LETTER PHASE-A LOMMAEBAMUM LE" + + "TTER PHASE-A FIRIBAMUM LETTER PHASE-A ROMBAMUM LETTER PHASE-A KPOQBAMUM " + + "LETTER PHASE-A SOQBAMUM LETTER PHASE-A MAP PIEETBAMUM LETTER PHASE-A SHI" + + "RAEBAMUM LETTER PHASE-A NTAPBAMUM LETTER PHASE-A SHOQ NSHUT YUMBAMUM LET" + + "TER PHASE-A NYIT MONGKEUAEQBAMUM LETTER PHASE-A PAARAEBAMUM LETTER PHASE" + + "-A NKAARAEBAMUM LETTER PHASE-A UNKNOWNBAMUM LETTER PHASE-A NGGENBAMUM LE" + + "TTER PHASE-A MAESIBAMUM LETTER PHASE-A NJAMBAMUM LETTER PHASE-A MBANYIBA" + + "MUM LETTER PHASE-A NYETBAMUM LETTER PHASE-A TEUAENBAMUM LETTER PHASE-A S" + + "OTBAMUM LETTER PHASE-A PAAMBAMUM LETTER PHASE-A NSHIEEBAMUM LETTER PHASE" + + "-A MAEMBAMUM LETTER PHASE-A NYIBAMUM LETTER PHASE-A KAQBAMUM LETTER PHAS" + + "E-A NSHABAMUM LETTER PHASE-A VEEBAMUM LETTER PHASE-A LUBAMUM LETTER PHAS" + + "E-A NENBAMUM LETTER PHASE-A NAQBAMUM LETTER PHASE-A MBAQBAMUM LETTER PHA" + + "SE-B NSHUETBAMUM LETTER PHASE-B TU MAEMGBIEEBAMUM LETTER PHASE-B SIEEBAM" + + "UM LETTER PHASE-B SET TUBAMUM LETTER PHASE-B LOM NTEUMBAMUM LETTER PHASE" + + "-B MBA MAELEEBAMUM LETTER PHASE-B KIEEMBAMUM LETTER PHASE-B YEURAEBAMUM " + + "LETTER PHASE-B MBAARAEBAMUM LETTER PHASE-B KAMBAMUM LETTER PHASE-B PEESH" + + "IBAMUM LETTER PHASE-B YAFU LEERAEWABAMUM LETTER PHASE-B LAM NSHUT NYAMBA" + + "MUM LETTER PHASE-B NTIEE SHEUOQBAMUM LETTER PHASE-B NDU NJAABAMUM LETTER" + + " PHASE-B GHEUGHEUAEMBAMUM LETTER PHASE-B PITBAMUM LETTER PHASE-B TU NSIE" + + "EBAMUM LETTER PHASE-B SHET NJAQBAMUM LETTER PHASE-B SHEUAEQTUBAMUM LETTE" + + "R PHASE-B MFON TEUAEQBAMUM LETTER PHASE-B MBIT MBAAKETBAMUM LETTER PHASE" + + "-B NYI NTEUMBAMUM LETTER PHASE-B KEUPUQBAMUM LETTER PHASE-B GHEUGHENBAMU" + + "M LETTER PHASE-B KEUYEUXBAMUM LETTER PHASE-B LAANAEBAMUM LETTER PHASE-B " + + "PARUMBAMUM LETTER PHASE-B VEUMBAMUM LETTER PHASE-B NGKINDI MVOPBAMUM LET" + + "TER PHASE-B NGGEU MBUBAMUM LETTER PHASE-B WUAETBAMUM LETTER PHASE-B SAKE" + + "UAEBAMUM LETTER PHASE-B TAAMBAMUM LETTER PHASE-B MEUQBAMUM LETTER PHASE-") + ("" + + "B NGGUOQBAMUM LETTER PHASE-B NGGUOQ LARGEBAMUM LETTER PHASE-B MFIYAQBAMU" + + "M LETTER PHASE-B SUEBAMUM LETTER PHASE-B MBEURIBAMUM LETTER PHASE-B MONT" + + "IEENBAMUM LETTER PHASE-B NYAEMAEBAMUM LETTER PHASE-B PUNGAAMBAMUM LETTER" + + " PHASE-B MEUT NGGEETBAMUM LETTER PHASE-B FEUXBAMUM LETTER PHASE-B MBUOQB" + + "AMUM LETTER PHASE-B FEEBAMUM LETTER PHASE-B KEUAEMBAMUM LETTER PHASE-B M" + + "A NJEUAENABAMUM LETTER PHASE-B MA NJUQABAMUM LETTER PHASE-B LETBAMUM LET" + + "TER PHASE-B NGGAAMBAMUM LETTER PHASE-B NSENBAMUM LETTER PHASE-B MABAMUM " + + "LETTER PHASE-B KIQBAMUM LETTER PHASE-B NGOMBAMUM LETTER PHASE-C NGKUE MA" + + "EMBABAMUM LETTER PHASE-C NZABAMUM LETTER PHASE-C YUMBAMUM LETTER PHASE-C" + + " WANGKUOQBAMUM LETTER PHASE-C NGGENBAMUM LETTER PHASE-C NDEUAEREEBAMUM L" + + "ETTER PHASE-C NGKAQBAMUM LETTER PHASE-C GHARAEBAMUM LETTER PHASE-C MBEEK" + + "EETBAMUM LETTER PHASE-C GBAYIBAMUM LETTER PHASE-C NYIR MKPARAQ MEUNBAMUM" + + " LETTER PHASE-C NTU MBITBAMUM LETTER PHASE-C MBEUMBAMUM LETTER PHASE-C P" + + "IRIEENBAMUM LETTER PHASE-C NDOMBUBAMUM LETTER PHASE-C MBAA CABBAGE-TREEB" + + "AMUM LETTER PHASE-C KEUSHEUAEPBAMUM LETTER PHASE-C GHAPBAMUM LETTER PHAS" + + "E-C KEUKAQBAMUM LETTER PHASE-C YU MUOMAEBAMUM LETTER PHASE-C NZEUMBAMUM " + + "LETTER PHASE-C MBUEBAMUM LETTER PHASE-C NSEUAENBAMUM LETTER PHASE-C MBIT" + + "BAMUM LETTER PHASE-C YEUQBAMUM LETTER PHASE-C KPARAQBAMUM LETTER PHASE-C" + + " KAABAMUM LETTER PHASE-C SEUXBAMUM LETTER PHASE-C NDIDABAMUM LETTER PHAS" + + "E-C TAASHAEBAMUM LETTER PHASE-C NJUEQBAMUM LETTER PHASE-C TITA YUEBAMUM " + + "LETTER PHASE-C SUAETBAMUM LETTER PHASE-C NGGUAEN NYAMBAMUM LETTER PHASE-" + + "C VEUXBAMUM LETTER PHASE-C NANSANAQBAMUM LETTER PHASE-C MA KEUAERIBAMUM " + + "LETTER PHASE-C NTAABAMUM LETTER PHASE-C NGGUONBAMUM LETTER PHASE-C LAPBA" + + "MUM LETTER PHASE-C MBIRIEENBAMUM LETTER PHASE-C MGBASAQBAMUM LETTER PHAS" + + "E-C NTEUNGBABAMUM LETTER PHASE-C TEUTEUXBAMUM LETTER PHASE-C NGGUMBAMUM " + + "LETTER PHASE-C FUEBAMUM LETTER PHASE-C NDEUTBAMUM LETTER PHASE-C NSABAMU" + + "M LETTER PHASE-C NSHAQBAMUM LETTER PHASE-C BUNGBAMUM LETTER PHASE-C VEUA" + + "EPENBAMUM LETTER PHASE-C MBERAEBAMUM LETTER PHASE-C RUBAMUM LETTER PHASE" + + "-C NJAEMBAMUM LETTER PHASE-C LAMBAMUM LETTER PHASE-C TITUAEPBAMUM LETTER" + + " PHASE-C NSUOT NGOMBAMUM LETTER PHASE-C NJEEEEBAMUM LETTER PHASE-C KETBA" + + "MUM LETTER PHASE-C NGGUBAMUM LETTER PHASE-C MAESIBAMUM LETTER PHASE-C MB" + + "UAEMBAMUM LETTER PHASE-C LUBAMUM LETTER PHASE-C KUTBAMUM LETTER PHASE-C " + + "NJAMBAMUM LETTER PHASE-C NGOMBAMUM LETTER PHASE-C WUPBAMUM LETTER PHASE-" + + "C NGGUEETBAMUM LETTER PHASE-C NSOMBAMUM LETTER PHASE-C NTENBAMUM LETTER " + + "PHASE-C KUOP NKAARAEBAMUM LETTER PHASE-C NSUNBAMUM LETTER PHASE-C NDAMBA" + + "MUM LETTER PHASE-C MA NSIEEBAMUM LETTER PHASE-C YAABAMUM LETTER PHASE-C " + + "NDAPBAMUM LETTER PHASE-C SHUEQBAMUM LETTER PHASE-C SETFONBAMUM LETTER PH" + + "ASE-C MBIBAMUM LETTER PHASE-C MAEMBABAMUM LETTER PHASE-C MBANYIBAMUM LET" + + "TER PHASE-C KEUSEUXBAMUM LETTER PHASE-C MBEUXBAMUM LETTER PHASE-C KEUMBA" + + "MUM LETTER PHASE-C MBAA PICKETBAMUM LETTER PHASE-C YUWOQBAMUM LETTER PHA" + + "SE-C NJEUXBAMUM LETTER PHASE-C MIEEBAMUM LETTER PHASE-C MUAEBAMUM LETTER" + + " PHASE-C SHIQBAMUM LETTER PHASE-C KEN LAWBAMUM LETTER PHASE-C KEN FATIGU" + + "EBAMUM LETTER PHASE-C NGAQBAMUM LETTER PHASE-C NAQBAMUM LETTER PHASE-C L" + + "IQBAMUM LETTER PHASE-C PINBAMUM LETTER PHASE-C PENBAMUM LETTER PHASE-C T" + + "ETBAMUM LETTER PHASE-D MBUOBAMUM LETTER PHASE-D WAPBAMUM LETTER PHASE-D " + + "NJIBAMUM LETTER PHASE-D MFONBAMUM LETTER PHASE-D NJIEEBAMUM LETTER PHASE" + + "-D LIEEBAMUM LETTER PHASE-D NJEUTBAMUM LETTER PHASE-D NSHEEBAMUM LETTER " + + "PHASE-D NGGAAMAEBAMUM LETTER PHASE-D NYAMBAMUM LETTER PHASE-D WUAENBAMUM" + + " LETTER PHASE-D NGKUNBAMUM LETTER PHASE-D SHEEBAMUM LETTER PHASE-D NGKAP" + + "BAMUM LETTER PHASE-D KEUAETMEUNBAMUM LETTER PHASE-D TEUTBAMUM LETTER PHA" + + "SE-D SHEUAEBAMUM LETTER PHASE-D NJAPBAMUM LETTER PHASE-D SUEBAMUM LETTER" + + " PHASE-D KETBAMUM LETTER PHASE-D YAEMMAEBAMUM LETTER PHASE-D KUOMBAMUM L" + + "ETTER PHASE-D SAPBAMUM LETTER PHASE-D MFEUTBAMUM LETTER PHASE-D NDEUXBAM" + + "UM LETTER PHASE-D MALEERIBAMUM LETTER PHASE-D MEUTBAMUM LETTER PHASE-D S" + + "EUAEQBAMUM LETTER PHASE-D YENBAMUM LETTER PHASE-D NJEUAEMBAMUM LETTER PH" + + "ASE-D KEUOT MBUAEBAMUM LETTER PHASE-D NGKEURIBAMUM LETTER PHASE-D TUBAMU" + + "M LETTER PHASE-D GHAABAMUM LETTER PHASE-D NGKYEEBAMUM LETTER PHASE-D FEU" + + "FEUAETBAMUM LETTER PHASE-D NDEEBAMUM LETTER PHASE-D MGBOFUMBAMUM LETTER " + + "PHASE-D LEUAEPBAMUM LETTER PHASE-D NDONBAMUM LETTER PHASE-D MONIBAMUM LE" + + "TTER PHASE-D MGBEUNBAMUM LETTER PHASE-D PUUTBAMUM LETTER PHASE-D MGBIEEB" + + "AMUM LETTER PHASE-D MFOBAMUM LETTER PHASE-D LUMBAMUM LETTER PHASE-D NSIE" + + "EPBAMUM LETTER PHASE-D MBAABAMUM LETTER PHASE-D KWAETBAMUM LETTER PHASE-" + + "D NYETBAMUM LETTER PHASE-D TEUAENBAMUM LETTER PHASE-D SOTBAMUM LETTER PH" + + "ASE-D YUWOQBAMUM LETTER PHASE-D KEUMBAMUM LETTER PHASE-D RAEMBAMUM LETTE") + ("" + + "R PHASE-D TEEEEBAMUM LETTER PHASE-D NGKEUAEQBAMUM LETTER PHASE-D MFEUAEB" + + "AMUM LETTER PHASE-D NSIEETBAMUM LETTER PHASE-D KEUPBAMUM LETTER PHASE-D " + + "PIPBAMUM LETTER PHASE-D PEUTAEBAMUM LETTER PHASE-D NYUEBAMUM LETTER PHAS" + + "E-D LETBAMUM LETTER PHASE-D NGGAAMBAMUM LETTER PHASE-D MFIEEBAMUM LETTER" + + " PHASE-D NGGWAENBAMUM LETTER PHASE-D YUOMBAMUM LETTER PHASE-D PAPBAMUM L" + + "ETTER PHASE-D YUOPBAMUM LETTER PHASE-D NDAMBAMUM LETTER PHASE-D NTEUMBAM" + + "UM LETTER PHASE-D SUAEBAMUM LETTER PHASE-D KUNBAMUM LETTER PHASE-D NGGEU" + + "XBAMUM LETTER PHASE-D NGKIEEBAMUM LETTER PHASE-D TUOTBAMUM LETTER PHASE-" + + "D MEUNBAMUM LETTER PHASE-D KUQBAMUM LETTER PHASE-D NSUMBAMUM LETTER PHAS" + + "E-D TEUNBAMUM LETTER PHASE-D MAENJETBAMUM LETTER PHASE-D NGGAPBAMUM LETT" + + "ER PHASE-D LEUMBAMUM LETTER PHASE-D NGGUOMBAMUM LETTER PHASE-D NSHUTBAMU" + + "M LETTER PHASE-D NJUEQBAMUM LETTER PHASE-D GHEUAEBAMUM LETTER PHASE-D KU" + + "BAMUM LETTER PHASE-D REN OLDBAMUM LETTER PHASE-D TAEBAMUM LETTER PHASE-D" + + " TOQBAMUM LETTER PHASE-D NYIBAMUM LETTER PHASE-D RIIBAMUM LETTER PHASE-D" + + " LEEEEBAMUM LETTER PHASE-D MEEEEBAMUM LETTER PHASE-D MBAMUM LETTER PHASE" + + "-D SUUBAMUM LETTER PHASE-D MUBAMUM LETTER PHASE-D SHIIBAMUM LETTER PHASE" + + "-D SHEUXBAMUM LETTER PHASE-D KYEEBAMUM LETTER PHASE-D NUBAMUM LETTER PHA" + + "SE-D SHUBAMUM LETTER PHASE-D NTEEBAMUM LETTER PHASE-D PEEBAMUM LETTER PH" + + "ASE-D NIBAMUM LETTER PHASE-D SHOQBAMUM LETTER PHASE-D PUQBAMUM LETTER PH" + + "ASE-D MVOPBAMUM LETTER PHASE-D LOQBAMUM LETTER PHASE-D REN MUCHBAMUM LET" + + "TER PHASE-D TIBAMUM LETTER PHASE-D NTUUBAMUM LETTER PHASE-D MBAA SEVENBA" + + "MUM LETTER PHASE-D SAQBAMUM LETTER PHASE-D FAABAMUM LETTER PHASE-E NDAPB" + + "AMUM LETTER PHASE-E TOONBAMUM LETTER PHASE-E MBEUMBAMUM LETTER PHASE-E L" + + "APBAMUM LETTER PHASE-E VOMBAMUM LETTER PHASE-E LOONBAMUM LETTER PHASE-E " + + "PAABAMUM LETTER PHASE-E SOMBAMUM LETTER PHASE-E RAQBAMUM LETTER PHASE-E " + + "NSHUOPBAMUM LETTER PHASE-E NDUNBAMUM LETTER PHASE-E PUAEBAMUM LETTER PHA" + + "SE-E TAMBAMUM LETTER PHASE-E NGKABAMUM LETTER PHASE-E KPEUXBAMUM LETTER " + + "PHASE-E WUOBAMUM LETTER PHASE-E SEEBAMUM LETTER PHASE-E NGGEUAETBAMUM LE" + + "TTER PHASE-E PAAMBAMUM LETTER PHASE-E TOOBAMUM LETTER PHASE-E KUOPBAMUM " + + "LETTER PHASE-E LOMBAMUM LETTER PHASE-E NSHIEEBAMUM LETTER PHASE-E NGOPBA" + + "MUM LETTER PHASE-E MAEMBAMUM LETTER PHASE-E NGKEUXBAMUM LETTER PHASE-E N" + + "GOQBAMUM LETTER PHASE-E NSHUEBAMUM LETTER PHASE-E RIMGBABAMUM LETTER PHA" + + "SE-E NJEUXBAMUM LETTER PHASE-E PEEMBAMUM LETTER PHASE-E SAABAMUM LETTER " + + "PHASE-E NGGURAEBAMUM LETTER PHASE-E MGBABAMUM LETTER PHASE-E GHEUXBAMUM " + + "LETTER PHASE-E NGKEUAEMBAMUM LETTER PHASE-E NJAEMLIBAMUM LETTER PHASE-E " + + "MAPBAMUM LETTER PHASE-E LOOTBAMUM LETTER PHASE-E NGGEEEEBAMUM LETTER PHA" + + "SE-E NDIQBAMUM LETTER PHASE-E TAEN NTEUMBAMUM LETTER PHASE-E SETBAMUM LE" + + "TTER PHASE-E PUMBAMUM LETTER PHASE-E NDAA SOFTNESSBAMUM LETTER PHASE-E N" + + "GGUAESHAE NYAMBAMUM LETTER PHASE-E YIEEBAMUM LETTER PHASE-E GHEUNBAMUM L" + + "ETTER PHASE-E TUAEBAMUM LETTER PHASE-E YEUAEBAMUM LETTER PHASE-E POBAMUM" + + " LETTER PHASE-E TUMAEBAMUM LETTER PHASE-E KEUAEBAMUM LETTER PHASE-E SUAE" + + "NBAMUM LETTER PHASE-E TEUAEQBAMUM LETTER PHASE-E VEUAEBAMUM LETTER PHASE" + + "-E WEUXBAMUM LETTER PHASE-E LAAMBAMUM LETTER PHASE-E PUBAMUM LETTER PHAS" + + "E-E TAAQBAMUM LETTER PHASE-E GHAAMAEBAMUM LETTER PHASE-E NGEUREUTBAMUM L" + + "ETTER PHASE-E SHEUAEQBAMUM LETTER PHASE-E MGBENBAMUM LETTER PHASE-E MBEE" + + "BAMUM LETTER PHASE-E NZAQBAMUM LETTER PHASE-E NKOMBAMUM LETTER PHASE-E G" + + "BETBAMUM LETTER PHASE-E TUMBAMUM LETTER PHASE-E KUETBAMUM LETTER PHASE-E" + + " YAPBAMUM LETTER PHASE-E NYI CLEAVERBAMUM LETTER PHASE-E YITBAMUM LETTER" + + " PHASE-E MFEUQBAMUM LETTER PHASE-E NDIAQBAMUM LETTER PHASE-E PIEEQBAMUM " + + "LETTER PHASE-E YUEQBAMUM LETTER PHASE-E LEUAEMBAMUM LETTER PHASE-E FUEBA" + + "MUM LETTER PHASE-E GBEUXBAMUM LETTER PHASE-E NGKUPBAMUM LETTER PHASE-E K" + + "ETBAMUM LETTER PHASE-E MAEBAMUM LETTER PHASE-E NGKAAMIBAMUM LETTER PHASE" + + "-E GHETBAMUM LETTER PHASE-E FABAMUM LETTER PHASE-E NTUMBAMUM LETTER PHAS" + + "E-E PEUTBAMUM LETTER PHASE-E YEUMBAMUM LETTER PHASE-E NGGEUAEBAMUM LETTE" + + "R PHASE-E NYI BETWEENBAMUM LETTER PHASE-E NZUQBAMUM LETTER PHASE-E POONB" + + "AMUM LETTER PHASE-E MIEEBAMUM LETTER PHASE-E FUETBAMUM LETTER PHASE-E NA" + + "EBAMUM LETTER PHASE-E MUAEBAMUM LETTER PHASE-E GHEUAEBAMUM LETTER PHASE-" + + "E FU IBAMUM LETTER PHASE-E MVIBAMUM LETTER PHASE-E PUAQBAMUM LETTER PHAS" + + "E-E NGKUMBAMUM LETTER PHASE-E KUTBAMUM LETTER PHASE-E PIETBAMUM LETTER P" + + "HASE-E NTAPBAMUM LETTER PHASE-E YEUAETBAMUM LETTER PHASE-E NGGUPBAMUM LE" + + "TTER PHASE-E PA PEOPLEBAMUM LETTER PHASE-E FU CALLBAMUM LETTER PHASE-E F" + + "OMBAMUM LETTER PHASE-E NJEEBAMUM LETTER PHASE-E ABAMUM LETTER PHASE-E TO" + + "QBAMUM LETTER PHASE-E OBAMUM LETTER PHASE-E IBAMUM LETTER PHASE-E LAQBAM" + + "UM LETTER PHASE-E PA PLURALBAMUM LETTER PHASE-E TAABAMUM LETTER PHASE-E ") + ("" + + "TAQBAMUM LETTER PHASE-E NDAA MY HOUSEBAMUM LETTER PHASE-E SHIQBAMUM LETT" + + "ER PHASE-E YEUXBAMUM LETTER PHASE-E NGUAEBAMUM LETTER PHASE-E YUAENBAMUM" + + " LETTER PHASE-E YOQ SWIMMINGBAMUM LETTER PHASE-E YOQ COVERBAMUM LETTER P" + + "HASE-E YUQBAMUM LETTER PHASE-E YUNBAMUM LETTER PHASE-E KEUXBAMUM LETTER " + + "PHASE-E PEUXBAMUM LETTER PHASE-E NJEE EPOCHBAMUM LETTER PHASE-E PUEBAMUM" + + " LETTER PHASE-E WUEBAMUM LETTER PHASE-E FEEBAMUM LETTER PHASE-E VEEBAMUM" + + " LETTER PHASE-E LUBAMUM LETTER PHASE-E MIBAMUM LETTER PHASE-E REUXBAMUM " + + "LETTER PHASE-E RAEBAMUM LETTER PHASE-E NGUAETBAMUM LETTER PHASE-E NGABAM" + + "UM LETTER PHASE-E SHOBAMUM LETTER PHASE-E SHOQBAMUM LETTER PHASE-E FU RE" + + "MEDYBAMUM LETTER PHASE-E NABAMUM LETTER PHASE-E PIBAMUM LETTER PHASE-E L" + + "OQBAMUM LETTER PHASE-E KOBAMUM LETTER PHASE-E MENBAMUM LETTER PHASE-E MA" + + "BAMUM LETTER PHASE-E MAQBAMUM LETTER PHASE-E TEUBAMUM LETTER PHASE-E KIB" + + "AMUM LETTER PHASE-E MONBAMUM LETTER PHASE-E TENBAMUM LETTER PHASE-E FAQB" + + "AMUM LETTER PHASE-E GHOMBAMUM LETTER PHASE-F KABAMUM LETTER PHASE-F UBAM" + + "UM LETTER PHASE-F KUBAMUM LETTER PHASE-F EEBAMUM LETTER PHASE-F REEBAMUM" + + " LETTER PHASE-F TAEBAMUM LETTER PHASE-F NYIBAMUM LETTER PHASE-F LABAMUM " + + "LETTER PHASE-F RIIBAMUM LETTER PHASE-F RIEEBAMUM LETTER PHASE-F MEEEEBAM" + + "UM LETTER PHASE-F TAABAMUM LETTER PHASE-F NDAABAMUM LETTER PHASE-F NJAEM" + + "BAMUM LETTER PHASE-F MBAMUM LETTER PHASE-F SUUBAMUM LETTER PHASE-F SHIIB" + + "AMUM LETTER PHASE-F SIBAMUM LETTER PHASE-F SEUXBAMUM LETTER PHASE-F KYEE" + + "BAMUM LETTER PHASE-F KETBAMUM LETTER PHASE-F NUAEBAMUM LETTER PHASE-F NU" + + "BAMUM LETTER PHASE-F NJUAEBAMUM LETTER PHASE-F YOQBAMUM LETTER PHASE-F S" + + "HUBAMUM LETTER PHASE-F YABAMUM LETTER PHASE-F NSHABAMUM LETTER PHASE-F P" + + "EUXBAMUM LETTER PHASE-F NTEEBAMUM LETTER PHASE-F WUEBAMUM LETTER PHASE-F" + + " PEEBAMUM LETTER PHASE-F RUBAMUM LETTER PHASE-F NIBAMUM LETTER PHASE-F R" + + "EUXBAMUM LETTER PHASE-F KENBAMUM LETTER PHASE-F NGKWAENBAMUM LETTER PHAS" + + "E-F NGGABAMUM LETTER PHASE-F SHOBAMUM LETTER PHASE-F PUAEBAMUM LETTER PH" + + "ASE-F FOMBAMUM LETTER PHASE-F WABAMUM LETTER PHASE-F LIBAMUM LETTER PHAS" + + "E-F LOQBAMUM LETTER PHASE-F KOBAMUM LETTER PHASE-F MBENBAMUM LETTER PHAS" + + "E-F RENBAMUM LETTER PHASE-F MABAMUM LETTER PHASE-F MOBAMUM LETTER PHASE-" + + "F MBAABAMUM LETTER PHASE-F TETBAMUM LETTER PHASE-F KPABAMUM LETTER PHASE" + + "-F SAMBABAMUM LETTER PHASE-F VUEQMRO LETTER TAMRO LETTER NGIMRO LETTER Y" + + "OMRO LETTER MIMMRO LETTER BAMRO LETTER DAMRO LETTER AMRO LETTER PHIMRO L" + + "ETTER KHAIMRO LETTER HAOMRO LETTER DAIMRO LETTER CHUMRO LETTER KEAAEMRO " + + "LETTER OLMRO LETTER MAEMMRO LETTER NINMRO LETTER PAMRO LETTER OOMRO LETT" + + "ER OMRO LETTER ROMRO LETTER SHIMRO LETTER THEAMRO LETTER EAMRO LETTER WA" + + "MRO LETTER EMRO LETTER KOMRO LETTER LANMRO LETTER LAMRO LETTER HAIMRO LE" + + "TTER RIMRO LETTER TEKMRO DIGIT ZEROMRO DIGIT ONEMRO DIGIT TWOMRO DIGIT T" + + "HREEMRO DIGIT FOURMRO DIGIT FIVEMRO DIGIT SIXMRO DIGIT SEVENMRO DIGIT EI" + + "GHTMRO DIGIT NINEMRO DANDAMRO DOUBLE DANDABASSA VAH LETTER ENNIBASSA VAH" + + " LETTER KABASSA VAH LETTER SEBASSA VAH LETTER FABASSA VAH LETTER MBEBASS" + + "A VAH LETTER YIEBASSA VAH LETTER GAHBASSA VAH LETTER DHIIBASSA VAH LETTE" + + "R KPAHBASSA VAH LETTER JOBASSA VAH LETTER HWAHBASSA VAH LETTER WABASSA V" + + "AH LETTER ZOBASSA VAH LETTER GBUBASSA VAH LETTER DOBASSA VAH LETTER CEBA" + + "SSA VAH LETTER UWUBASSA VAH LETTER TOBASSA VAH LETTER BABASSA VAH LETTER" + + " VUBASSA VAH LETTER YEINBASSA VAH LETTER PABASSA VAH LETTER WADDABASSA V" + + "AH LETTER ABASSA VAH LETTER OBASSA VAH LETTER OOBASSA VAH LETTER UBASSA " + + "VAH LETTER EEBASSA VAH LETTER EBASSA VAH LETTER IBASSA VAH COMBINING HIG" + + "H TONEBASSA VAH COMBINING LOW TONEBASSA VAH COMBINING MID TONEBASSA VAH " + + "COMBINING LOW-MID TONEBASSA VAH COMBINING HIGH-LOW TONEBASSA VAH FULL ST" + + "OPPAHAWH HMONG VOWEL KEEBPAHAWH HMONG VOWEL KEEVPAHAWH HMONG VOWEL KIBPA" + + "HAWH HMONG VOWEL KIVPAHAWH HMONG VOWEL KAUBPAHAWH HMONG VOWEL KAUVPAHAWH" + + " HMONG VOWEL KUBPAHAWH HMONG VOWEL KUVPAHAWH HMONG VOWEL KEBPAHAWH HMONG" + + " VOWEL KEVPAHAWH HMONG VOWEL KAIBPAHAWH HMONG VOWEL KAIVPAHAWH HMONG VOW" + + "EL KOOBPAHAWH HMONG VOWEL KOOVPAHAWH HMONG VOWEL KAWBPAHAWH HMONG VOWEL " + + "KAWVPAHAWH HMONG VOWEL KUABPAHAWH HMONG VOWEL KUAVPAHAWH HMONG VOWEL KOB" + + "PAHAWH HMONG VOWEL KOVPAHAWH HMONG VOWEL KIABPAHAWH HMONG VOWEL KIAVPAHA" + + "WH HMONG VOWEL KABPAHAWH HMONG VOWEL KAVPAHAWH HMONG VOWEL KWBPAHAWH HMO" + + "NG VOWEL KWVPAHAWH HMONG VOWEL KAABPAHAWH HMONG VOWEL KAAVPAHAWH HMONG C" + + "ONSONANT VAUPAHAWH HMONG CONSONANT NTSAUPAHAWH HMONG CONSONANT LAUPAHAWH" + + " HMONG CONSONANT HAUPAHAWH HMONG CONSONANT NLAUPAHAWH HMONG CONSONANT RA" + + "UPAHAWH HMONG CONSONANT NKAUPAHAWH HMONG CONSONANT QHAUPAHAWH HMONG CONS" + + "ONANT YAUPAHAWH HMONG CONSONANT HLAUPAHAWH HMONG CONSONANT MAUPAHAWH HMO" + + "NG CONSONANT CHAUPAHAWH HMONG CONSONANT NCHAUPAHAWH HMONG CONSONANT HNAU") + ("" + + "PAHAWH HMONG CONSONANT PLHAUPAHAWH HMONG CONSONANT NTHAUPAHAWH HMONG CON" + + "SONANT NAUPAHAWH HMONG CONSONANT AUPAHAWH HMONG CONSONANT XAUPAHAWH HMON" + + "G CONSONANT CAUPAHAWH HMONG MARK CIM TUBPAHAWH HMONG MARK CIM SOPAHAWH H" + + "MONG MARK CIM KESPAHAWH HMONG MARK CIM KHAVPAHAWH HMONG MARK CIM SUAMPAH" + + "AWH HMONG MARK CIM HOMPAHAWH HMONG MARK CIM TAUMPAHAWH HMONG SIGN VOS TH" + + "OMPAHAWH HMONG SIGN VOS TSHAB CEEBPAHAWH HMONG SIGN CIM CHEEMPAHAWH HMON" + + "G SIGN VOS THIABPAHAWH HMONG SIGN VOS FEEMPAHAWH HMONG SIGN XYEEM NTXIVP" + + "AHAWH HMONG SIGN XYEEM RHOPAHAWH HMONG SIGN XYEEM TOVPAHAWH HMONG SIGN X" + + "YEEM FAIBPAHAWH HMONG SIGN VOS SEEVPAHAWH HMONG SIGN MEEJ SUABPAHAWH HMO" + + "NG SIGN VOS NRUAPAHAWH HMONG SIGN IB YAMPAHAWH HMONG SIGN XAUSPAHAWH HMO" + + "NG SIGN CIM TSOV ROGPAHAWH HMONG DIGIT ZEROPAHAWH HMONG DIGIT ONEPAHAWH " + + "HMONG DIGIT TWOPAHAWH HMONG DIGIT THREEPAHAWH HMONG DIGIT FOURPAHAWH HMO" + + "NG DIGIT FIVEPAHAWH HMONG DIGIT SIXPAHAWH HMONG DIGIT SEVENPAHAWH HMONG " + + "DIGIT EIGHTPAHAWH HMONG DIGIT NINEPAHAWH HMONG NUMBER TENSPAHAWH HMONG N" + + "UMBER HUNDREDSPAHAWH HMONG NUMBER TEN THOUSANDSPAHAWH HMONG NUMBER MILLI" + + "ONSPAHAWH HMONG NUMBER HUNDRED MILLIONSPAHAWH HMONG NUMBER TEN BILLIONSP" + + "AHAWH HMONG NUMBER TRILLIONSPAHAWH HMONG SIGN VOS LUBPAHAWH HMONG SIGN X" + + "YOOPAHAWH HMONG SIGN HLIPAHAWH HMONG SIGN THIRD-STAGE HLIPAHAWH HMONG SI" + + "GN ZWJ THAJPAHAWH HMONG SIGN HNUBPAHAWH HMONG SIGN NQIGPAHAWH HMONG SIGN" + + " XIABPAHAWH HMONG SIGN NTUJPAHAWH HMONG SIGN AVPAHAWH HMONG SIGN TXHEEJ " + + "CEEVPAHAWH HMONG SIGN MEEJ TSEEBPAHAWH HMONG SIGN TAUPAHAWH HMONG SIGN L" + + "OSPAHAWH HMONG SIGN MUSPAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOGPAHAWH HM" + + "ONG SIGN CIM CUAM TSHOOJPAHAWH HMONG SIGN CIM TXWVPAHAWH HMONG SIGN CIM " + + "TXWV CHWVPAHAWH HMONG SIGN CIM PUB DAWBPAHAWH HMONG SIGN CIM NRES TOSPAH" + + "AWH HMONG CLAN SIGN TSHEEJPAHAWH HMONG CLAN SIGN YEEGPAHAWH HMONG CLAN S" + + "IGN LISPAHAWH HMONG CLAN SIGN LAUJPAHAWH HMONG CLAN SIGN XYOOJPAHAWH HMO" + + "NG CLAN SIGN KOOPAHAWH HMONG CLAN SIGN HAWJPAHAWH HMONG CLAN SIGN MUASPA" + + "HAWH HMONG CLAN SIGN THOJPAHAWH HMONG CLAN SIGN TSABPAHAWH HMONG CLAN SI" + + "GN PHABPAHAWH HMONG CLAN SIGN KHABPAHAWH HMONG CLAN SIGN HAMPAHAWH HMONG" + + " CLAN SIGN VAJPAHAWH HMONG CLAN SIGN FAJPAHAWH HMONG CLAN SIGN YAJPAHAWH" + + " HMONG CLAN SIGN TSWBPAHAWH HMONG CLAN SIGN KWMPAHAWH HMONG CLAN SIGN VW" + + "JMIAO LETTER PAMIAO LETTER BAMIAO LETTER YI PAMIAO LETTER PLAMIAO LETTER" + + " MAMIAO LETTER MHAMIAO LETTER ARCHAIC MAMIAO LETTER FAMIAO LETTER VAMIAO" + + " LETTER VFAMIAO LETTER TAMIAO LETTER DAMIAO LETTER YI TTAMIAO LETTER YI " + + "TAMIAO LETTER TTAMIAO LETTER DDAMIAO LETTER NAMIAO LETTER NHAMIAO LETTER" + + " YI NNAMIAO LETTER ARCHAIC NAMIAO LETTER NNAMIAO LETTER NNHAMIAO LETTER " + + "LAMIAO LETTER LYAMIAO LETTER LHAMIAO LETTER LHYAMIAO LETTER TLHAMIAO LET" + + "TER DLHAMIAO LETTER TLHYAMIAO LETTER DLHYAMIAO LETTER KAMIAO LETTER GAMI" + + "AO LETTER YI KAMIAO LETTER QAMIAO LETTER QGAMIAO LETTER NGAMIAO LETTER N" + + "GHAMIAO LETTER ARCHAIC NGAMIAO LETTER HAMIAO LETTER XAMIAO LETTER GHAMIA" + + "O LETTER GHHAMIAO LETTER TSSAMIAO LETTER DZZAMIAO LETTER NYAMIAO LETTER " + + "NYHAMIAO LETTER TSHAMIAO LETTER DZHAMIAO LETTER YI TSHAMIAO LETTER YI DZ" + + "HAMIAO LETTER REFORMED TSHAMIAO LETTER SHAMIAO LETTER SSAMIAO LETTER ZHA" + + "MIAO LETTER ZSHAMIAO LETTER TSAMIAO LETTER DZAMIAO LETTER YI TSAMIAO LET" + + "TER SAMIAO LETTER ZAMIAO LETTER ZSAMIAO LETTER ZZAMIAO LETTER ZZSAMIAO L" + + "ETTER ARCHAIC ZZAMIAO LETTER ZZYAMIAO LETTER ZZSYAMIAO LETTER WAMIAO LET" + + "TER AHMIAO LETTER HHAMIAO LETTER NASALIZATIONMIAO SIGN ASPIRATIONMIAO SI" + + "GN REFORMED VOICINGMIAO SIGN REFORMED ASPIRATIONMIAO VOWEL SIGN AMIAO VO" + + "WEL SIGN AAMIAO VOWEL SIGN AHHMIAO VOWEL SIGN ANMIAO VOWEL SIGN ANGMIAO " + + "VOWEL SIGN OMIAO VOWEL SIGN OOMIAO VOWEL SIGN WOMIAO VOWEL SIGN WMIAO VO" + + "WEL SIGN EMIAO VOWEL SIGN ENMIAO VOWEL SIGN ENGMIAO VOWEL SIGN OEYMIAO V" + + "OWEL SIGN IMIAO VOWEL SIGN IAMIAO VOWEL SIGN IANMIAO VOWEL SIGN IANGMIAO" + + " VOWEL SIGN IOMIAO VOWEL SIGN IEMIAO VOWEL SIGN IIMIAO VOWEL SIGN IUMIAO" + + " VOWEL SIGN INGMIAO VOWEL SIGN UMIAO VOWEL SIGN UAMIAO VOWEL SIGN UANMIA" + + "O VOWEL SIGN UANGMIAO VOWEL SIGN UUMIAO VOWEL SIGN UEIMIAO VOWEL SIGN UN" + + "GMIAO VOWEL SIGN YMIAO VOWEL SIGN YIMIAO VOWEL SIGN AEMIAO VOWEL SIGN AE" + + "EMIAO VOWEL SIGN ERRMIAO VOWEL SIGN ROUNDED ERRMIAO VOWEL SIGN ERMIAO VO" + + "WEL SIGN ROUNDED ERMIAO VOWEL SIGN AIMIAO VOWEL SIGN EIMIAO VOWEL SIGN A" + + "UMIAO VOWEL SIGN OUMIAO VOWEL SIGN NMIAO VOWEL SIGN NGMIAO TONE RIGHTMIA" + + "O TONE TOP RIGHTMIAO TONE ABOVEMIAO TONE BELOWMIAO LETTER TONE-2MIAO LET" + + "TER TONE-3MIAO LETTER TONE-4MIAO LETTER TONE-5MIAO LETTER TONE-6MIAO LET" + + "TER TONE-7MIAO LETTER TONE-8MIAO LETTER REFORMED TONE-1MIAO LETTER REFOR" + + "MED TONE-2MIAO LETTER REFORMED TONE-4MIAO LETTER REFORMED TONE-5MIAO LET" + + "TER REFORMED TONE-6MIAO LETTER REFORMED TONE-8TANGUT ITERATION MARKTANGU") + ("" + + "T COMPONENT-001TANGUT COMPONENT-002TANGUT COMPONENT-003TANGUT COMPONENT-" + + "004TANGUT COMPONENT-005TANGUT COMPONENT-006TANGUT COMPONENT-007TANGUT CO" + + "MPONENT-008TANGUT COMPONENT-009TANGUT COMPONENT-010TANGUT COMPONENT-011T" + + "ANGUT COMPONENT-012TANGUT COMPONENT-013TANGUT COMPONENT-014TANGUT COMPON" + + "ENT-015TANGUT COMPONENT-016TANGUT COMPONENT-017TANGUT COMPONENT-018TANGU" + + "T COMPONENT-019TANGUT COMPONENT-020TANGUT COMPONENT-021TANGUT COMPONENT-" + + "022TANGUT COMPONENT-023TANGUT COMPONENT-024TANGUT COMPONENT-025TANGUT CO" + + "MPONENT-026TANGUT COMPONENT-027TANGUT COMPONENT-028TANGUT COMPONENT-029T" + + "ANGUT COMPONENT-030TANGUT COMPONENT-031TANGUT COMPONENT-032TANGUT COMPON" + + "ENT-033TANGUT COMPONENT-034TANGUT COMPONENT-035TANGUT COMPONENT-036TANGU" + + "T COMPONENT-037TANGUT COMPONENT-038TANGUT COMPONENT-039TANGUT COMPONENT-" + + "040TANGUT COMPONENT-041TANGUT COMPONENT-042TANGUT COMPONENT-043TANGUT CO" + + "MPONENT-044TANGUT COMPONENT-045TANGUT COMPONENT-046TANGUT COMPONENT-047T" + + "ANGUT COMPONENT-048TANGUT COMPONENT-049TANGUT COMPONENT-050TANGUT COMPON" + + "ENT-051TANGUT COMPONENT-052TANGUT COMPONENT-053TANGUT COMPONENT-054TANGU" + + "T COMPONENT-055TANGUT COMPONENT-056TANGUT COMPONENT-057TANGUT COMPONENT-" + + "058TANGUT COMPONENT-059TANGUT COMPONENT-060TANGUT COMPONENT-061TANGUT CO" + + "MPONENT-062TANGUT COMPONENT-063TANGUT COMPONENT-064TANGUT COMPONENT-065T" + + "ANGUT COMPONENT-066TANGUT COMPONENT-067TANGUT COMPONENT-068TANGUT COMPON" + + "ENT-069TANGUT COMPONENT-070TANGUT COMPONENT-071TANGUT COMPONENT-072TANGU" + + "T COMPONENT-073TANGUT COMPONENT-074TANGUT COMPONENT-075TANGUT COMPONENT-" + + "076TANGUT COMPONENT-077TANGUT COMPONENT-078TANGUT COMPONENT-079TANGUT CO" + + "MPONENT-080TANGUT COMPONENT-081TANGUT COMPONENT-082TANGUT COMPONENT-083T" + + "ANGUT COMPONENT-084TANGUT COMPONENT-085TANGUT COMPONENT-086TANGUT COMPON" + + "ENT-087TANGUT COMPONENT-088TANGUT COMPONENT-089TANGUT COMPONENT-090TANGU" + + "T COMPONENT-091TANGUT COMPONENT-092TANGUT COMPONENT-093TANGUT COMPONENT-" + + "094TANGUT COMPONENT-095TANGUT COMPONENT-096TANGUT COMPONENT-097TANGUT CO" + + "MPONENT-098TANGUT COMPONENT-099TANGUT COMPONENT-100TANGUT COMPONENT-101T" + + "ANGUT COMPONENT-102TANGUT COMPONENT-103TANGUT COMPONENT-104TANGUT COMPON" + + "ENT-105TANGUT COMPONENT-106TANGUT COMPONENT-107TANGUT COMPONENT-108TANGU" + + "T COMPONENT-109TANGUT COMPONENT-110TANGUT COMPONENT-111TANGUT COMPONENT-" + + "112TANGUT COMPONENT-113TANGUT COMPONENT-114TANGUT COMPONENT-115TANGUT CO" + + "MPONENT-116TANGUT COMPONENT-117TANGUT COMPONENT-118TANGUT COMPONENT-119T" + + "ANGUT COMPONENT-120TANGUT COMPONENT-121TANGUT COMPONENT-122TANGUT COMPON" + + "ENT-123TANGUT COMPONENT-124TANGUT COMPONENT-125TANGUT COMPONENT-126TANGU" + + "T COMPONENT-127TANGUT COMPONENT-128TANGUT COMPONENT-129TANGUT COMPONENT-" + + "130TANGUT COMPONENT-131TANGUT COMPONENT-132TANGUT COMPONENT-133TANGUT CO" + + "MPONENT-134TANGUT COMPONENT-135TANGUT COMPONENT-136TANGUT COMPONENT-137T" + + "ANGUT COMPONENT-138TANGUT COMPONENT-139TANGUT COMPONENT-140TANGUT COMPON" + + "ENT-141TANGUT COMPONENT-142TANGUT COMPONENT-143TANGUT COMPONENT-144TANGU" + + "T COMPONENT-145TANGUT COMPONENT-146TANGUT COMPONENT-147TANGUT COMPONENT-" + + "148TANGUT COMPONENT-149TANGUT COMPONENT-150TANGUT COMPONENT-151TANGUT CO" + + "MPONENT-152TANGUT COMPONENT-153TANGUT COMPONENT-154TANGUT COMPONENT-155T" + + "ANGUT COMPONENT-156TANGUT COMPONENT-157TANGUT COMPONENT-158TANGUT COMPON" + + "ENT-159TANGUT COMPONENT-160TANGUT COMPONENT-161TANGUT COMPONENT-162TANGU" + + "T COMPONENT-163TANGUT COMPONENT-164TANGUT COMPONENT-165TANGUT COMPONENT-" + + "166TANGUT COMPONENT-167TANGUT COMPONENT-168TANGUT COMPONENT-169TANGUT CO" + + "MPONENT-170TANGUT COMPONENT-171TANGUT COMPONENT-172TANGUT COMPONENT-173T" + + "ANGUT COMPONENT-174TANGUT COMPONENT-175TANGUT COMPONENT-176TANGUT COMPON" + + "ENT-177TANGUT COMPONENT-178TANGUT COMPONENT-179TANGUT COMPONENT-180TANGU" + + "T COMPONENT-181TANGUT COMPONENT-182TANGUT COMPONENT-183TANGUT COMPONENT-" + + "184TANGUT COMPONENT-185TANGUT COMPONENT-186TANGUT COMPONENT-187TANGUT CO" + + "MPONENT-188TANGUT COMPONENT-189TANGUT COMPONENT-190TANGUT COMPONENT-191T" + + "ANGUT COMPONENT-192TANGUT COMPONENT-193TANGUT COMPONENT-194TANGUT COMPON" + + "ENT-195TANGUT COMPONENT-196TANGUT COMPONENT-197TANGUT COMPONENT-198TANGU" + + "T COMPONENT-199TANGUT COMPONENT-200TANGUT COMPONENT-201TANGUT COMPONENT-" + + "202TANGUT COMPONENT-203TANGUT COMPONENT-204TANGUT COMPONENT-205TANGUT CO" + + "MPONENT-206TANGUT COMPONENT-207TANGUT COMPONENT-208TANGUT COMPONENT-209T" + + "ANGUT COMPONENT-210TANGUT COMPONENT-211TANGUT COMPONENT-212TANGUT COMPON" + + "ENT-213TANGUT COMPONENT-214TANGUT COMPONENT-215TANGUT COMPONENT-216TANGU" + + "T COMPONENT-217TANGUT COMPONENT-218TANGUT COMPONENT-219TANGUT COMPONENT-" + + "220TANGUT COMPONENT-221TANGUT COMPONENT-222TANGUT COMPONENT-223TANGUT CO" + + "MPONENT-224TANGUT COMPONENT-225TANGUT COMPONENT-226TANGUT COMPONENT-227T" + + "ANGUT COMPONENT-228TANGUT COMPONENT-229TANGUT COMPONENT-230TANGUT COMPON") + ("" + + "ENT-231TANGUT COMPONENT-232TANGUT COMPONENT-233TANGUT COMPONENT-234TANGU" + + "T COMPONENT-235TANGUT COMPONENT-236TANGUT COMPONENT-237TANGUT COMPONENT-" + + "238TANGUT COMPONENT-239TANGUT COMPONENT-240TANGUT COMPONENT-241TANGUT CO" + + "MPONENT-242TANGUT COMPONENT-243TANGUT COMPONENT-244TANGUT COMPONENT-245T" + + "ANGUT COMPONENT-246TANGUT COMPONENT-247TANGUT COMPONENT-248TANGUT COMPON" + + "ENT-249TANGUT COMPONENT-250TANGUT COMPONENT-251TANGUT COMPONENT-252TANGU" + + "T COMPONENT-253TANGUT COMPONENT-254TANGUT COMPONENT-255TANGUT COMPONENT-" + + "256TANGUT COMPONENT-257TANGUT COMPONENT-258TANGUT COMPONENT-259TANGUT CO" + + "MPONENT-260TANGUT COMPONENT-261TANGUT COMPONENT-262TANGUT COMPONENT-263T" + + "ANGUT COMPONENT-264TANGUT COMPONENT-265TANGUT COMPONENT-266TANGUT COMPON" + + "ENT-267TANGUT COMPONENT-268TANGUT COMPONENT-269TANGUT COMPONENT-270TANGU" + + "T COMPONENT-271TANGUT COMPONENT-272TANGUT COMPONENT-273TANGUT COMPONENT-" + + "274TANGUT COMPONENT-275TANGUT COMPONENT-276TANGUT COMPONENT-277TANGUT CO" + + "MPONENT-278TANGUT COMPONENT-279TANGUT COMPONENT-280TANGUT COMPONENT-281T" + + "ANGUT COMPONENT-282TANGUT COMPONENT-283TANGUT COMPONENT-284TANGUT COMPON" + + "ENT-285TANGUT COMPONENT-286TANGUT COMPONENT-287TANGUT COMPONENT-288TANGU" + + "T COMPONENT-289TANGUT COMPONENT-290TANGUT COMPONENT-291TANGUT COMPONENT-" + + "292TANGUT COMPONENT-293TANGUT COMPONENT-294TANGUT COMPONENT-295TANGUT CO" + + "MPONENT-296TANGUT COMPONENT-297TANGUT COMPONENT-298TANGUT COMPONENT-299T" + + "ANGUT COMPONENT-300TANGUT COMPONENT-301TANGUT COMPONENT-302TANGUT COMPON" + + "ENT-303TANGUT COMPONENT-304TANGUT COMPONENT-305TANGUT COMPONENT-306TANGU" + + "T COMPONENT-307TANGUT COMPONENT-308TANGUT COMPONENT-309TANGUT COMPONENT-" + + "310TANGUT COMPONENT-311TANGUT COMPONENT-312TANGUT COMPONENT-313TANGUT CO" + + "MPONENT-314TANGUT COMPONENT-315TANGUT COMPONENT-316TANGUT COMPONENT-317T" + + "ANGUT COMPONENT-318TANGUT COMPONENT-319TANGUT COMPONENT-320TANGUT COMPON" + + "ENT-321TANGUT COMPONENT-322TANGUT COMPONENT-323TANGUT COMPONENT-324TANGU" + + "T COMPONENT-325TANGUT COMPONENT-326TANGUT COMPONENT-327TANGUT COMPONENT-" + + "328TANGUT COMPONENT-329TANGUT COMPONENT-330TANGUT COMPONENT-331TANGUT CO" + + "MPONENT-332TANGUT COMPONENT-333TANGUT COMPONENT-334TANGUT COMPONENT-335T" + + "ANGUT COMPONENT-336TANGUT COMPONENT-337TANGUT COMPONENT-338TANGUT COMPON" + + "ENT-339TANGUT COMPONENT-340TANGUT COMPONENT-341TANGUT COMPONENT-342TANGU" + + "T COMPONENT-343TANGUT COMPONENT-344TANGUT COMPONENT-345TANGUT COMPONENT-" + + "346TANGUT COMPONENT-347TANGUT COMPONENT-348TANGUT COMPONENT-349TANGUT CO" + + "MPONENT-350TANGUT COMPONENT-351TANGUT COMPONENT-352TANGUT COMPONENT-353T" + + "ANGUT COMPONENT-354TANGUT COMPONENT-355TANGUT COMPONENT-356TANGUT COMPON" + + "ENT-357TANGUT COMPONENT-358TANGUT COMPONENT-359TANGUT COMPONENT-360TANGU" + + "T COMPONENT-361TANGUT COMPONENT-362TANGUT COMPONENT-363TANGUT COMPONENT-" + + "364TANGUT COMPONENT-365TANGUT COMPONENT-366TANGUT COMPONENT-367TANGUT CO" + + "MPONENT-368TANGUT COMPONENT-369TANGUT COMPONENT-370TANGUT COMPONENT-371T" + + "ANGUT COMPONENT-372TANGUT COMPONENT-373TANGUT COMPONENT-374TANGUT COMPON" + + "ENT-375TANGUT COMPONENT-376TANGUT COMPONENT-377TANGUT COMPONENT-378TANGU" + + "T COMPONENT-379TANGUT COMPONENT-380TANGUT COMPONENT-381TANGUT COMPONENT-" + + "382TANGUT COMPONENT-383TANGUT COMPONENT-384TANGUT COMPONENT-385TANGUT CO" + + "MPONENT-386TANGUT COMPONENT-387TANGUT COMPONENT-388TANGUT COMPONENT-389T" + + "ANGUT COMPONENT-390TANGUT COMPONENT-391TANGUT COMPONENT-392TANGUT COMPON" + + "ENT-393TANGUT COMPONENT-394TANGUT COMPONENT-395TANGUT COMPONENT-396TANGU" + + "T COMPONENT-397TANGUT COMPONENT-398TANGUT COMPONENT-399TANGUT COMPONENT-" + + "400TANGUT COMPONENT-401TANGUT COMPONENT-402TANGUT COMPONENT-403TANGUT CO" + + "MPONENT-404TANGUT COMPONENT-405TANGUT COMPONENT-406TANGUT COMPONENT-407T" + + "ANGUT COMPONENT-408TANGUT COMPONENT-409TANGUT COMPONENT-410TANGUT COMPON" + + "ENT-411TANGUT COMPONENT-412TANGUT COMPONENT-413TANGUT COMPONENT-414TANGU" + + "T COMPONENT-415TANGUT COMPONENT-416TANGUT COMPONENT-417TANGUT COMPONENT-" + + "418TANGUT COMPONENT-419TANGUT COMPONENT-420TANGUT COMPONENT-421TANGUT CO" + + "MPONENT-422TANGUT COMPONENT-423TANGUT COMPONENT-424TANGUT COMPONENT-425T" + + "ANGUT COMPONENT-426TANGUT COMPONENT-427TANGUT COMPONENT-428TANGUT COMPON" + + "ENT-429TANGUT COMPONENT-430TANGUT COMPONENT-431TANGUT COMPONENT-432TANGU" + + "T COMPONENT-433TANGUT COMPONENT-434TANGUT COMPONENT-435TANGUT COMPONENT-" + + "436TANGUT COMPONENT-437TANGUT COMPONENT-438TANGUT COMPONENT-439TANGUT CO" + + "MPONENT-440TANGUT COMPONENT-441TANGUT COMPONENT-442TANGUT COMPONENT-443T" + + "ANGUT COMPONENT-444TANGUT COMPONENT-445TANGUT COMPONENT-446TANGUT COMPON" + + "ENT-447TANGUT COMPONENT-448TANGUT COMPONENT-449TANGUT COMPONENT-450TANGU" + + "T COMPONENT-451TANGUT COMPONENT-452TANGUT COMPONENT-453TANGUT COMPONENT-" + + "454TANGUT COMPONENT-455TANGUT COMPONENT-456TANGUT COMPONENT-457TANGUT CO" + + "MPONENT-458TANGUT COMPONENT-459TANGUT COMPONENT-460TANGUT COMPONENT-461T") + ("" + + "ANGUT COMPONENT-462TANGUT COMPONENT-463TANGUT COMPONENT-464TANGUT COMPON" + + "ENT-465TANGUT COMPONENT-466TANGUT COMPONENT-467TANGUT COMPONENT-468TANGU" + + "T COMPONENT-469TANGUT COMPONENT-470TANGUT COMPONENT-471TANGUT COMPONENT-" + + "472TANGUT COMPONENT-473TANGUT COMPONENT-474TANGUT COMPONENT-475TANGUT CO" + + "MPONENT-476TANGUT COMPONENT-477TANGUT COMPONENT-478TANGUT COMPONENT-479T" + + "ANGUT COMPONENT-480TANGUT COMPONENT-481TANGUT COMPONENT-482TANGUT COMPON" + + "ENT-483TANGUT COMPONENT-484TANGUT COMPONENT-485TANGUT COMPONENT-486TANGU" + + "T COMPONENT-487TANGUT COMPONENT-488TANGUT COMPONENT-489TANGUT COMPONENT-" + + "490TANGUT COMPONENT-491TANGUT COMPONENT-492TANGUT COMPONENT-493TANGUT CO" + + "MPONENT-494TANGUT COMPONENT-495TANGUT COMPONENT-496TANGUT COMPONENT-497T" + + "ANGUT COMPONENT-498TANGUT COMPONENT-499TANGUT COMPONENT-500TANGUT COMPON" + + "ENT-501TANGUT COMPONENT-502TANGUT COMPONENT-503TANGUT COMPONENT-504TANGU" + + "T COMPONENT-505TANGUT COMPONENT-506TANGUT COMPONENT-507TANGUT COMPONENT-" + + "508TANGUT COMPONENT-509TANGUT COMPONENT-510TANGUT COMPONENT-511TANGUT CO" + + "MPONENT-512TANGUT COMPONENT-513TANGUT COMPONENT-514TANGUT COMPONENT-515T" + + "ANGUT COMPONENT-516TANGUT COMPONENT-517TANGUT COMPONENT-518TANGUT COMPON" + + "ENT-519TANGUT COMPONENT-520TANGUT COMPONENT-521TANGUT COMPONENT-522TANGU" + + "T COMPONENT-523TANGUT COMPONENT-524TANGUT COMPONENT-525TANGUT COMPONENT-" + + "526TANGUT COMPONENT-527TANGUT COMPONENT-528TANGUT COMPONENT-529TANGUT CO" + + "MPONENT-530TANGUT COMPONENT-531TANGUT COMPONENT-532TANGUT COMPONENT-533T" + + "ANGUT COMPONENT-534TANGUT COMPONENT-535TANGUT COMPONENT-536TANGUT COMPON" + + "ENT-537TANGUT COMPONENT-538TANGUT COMPONENT-539TANGUT COMPONENT-540TANGU" + + "T COMPONENT-541TANGUT COMPONENT-542TANGUT COMPONENT-543TANGUT COMPONENT-" + + "544TANGUT COMPONENT-545TANGUT COMPONENT-546TANGUT COMPONENT-547TANGUT CO" + + "MPONENT-548TANGUT COMPONENT-549TANGUT COMPONENT-550TANGUT COMPONENT-551T" + + "ANGUT COMPONENT-552TANGUT COMPONENT-553TANGUT COMPONENT-554TANGUT COMPON" + + "ENT-555TANGUT COMPONENT-556TANGUT COMPONENT-557TANGUT COMPONENT-558TANGU" + + "T COMPONENT-559TANGUT COMPONENT-560TANGUT COMPONENT-561TANGUT COMPONENT-" + + "562TANGUT COMPONENT-563TANGUT COMPONENT-564TANGUT COMPONENT-565TANGUT CO" + + "MPONENT-566TANGUT COMPONENT-567TANGUT COMPONENT-568TANGUT COMPONENT-569T" + + "ANGUT COMPONENT-570TANGUT COMPONENT-571TANGUT COMPONENT-572TANGUT COMPON" + + "ENT-573TANGUT COMPONENT-574TANGUT COMPONENT-575TANGUT COMPONENT-576TANGU" + + "T COMPONENT-577TANGUT COMPONENT-578TANGUT COMPONENT-579TANGUT COMPONENT-" + + "580TANGUT COMPONENT-581TANGUT COMPONENT-582TANGUT COMPONENT-583TANGUT CO" + + "MPONENT-584TANGUT COMPONENT-585TANGUT COMPONENT-586TANGUT COMPONENT-587T" + + "ANGUT COMPONENT-588TANGUT COMPONENT-589TANGUT COMPONENT-590TANGUT COMPON" + + "ENT-591TANGUT COMPONENT-592TANGUT COMPONENT-593TANGUT COMPONENT-594TANGU" + + "T COMPONENT-595TANGUT COMPONENT-596TANGUT COMPONENT-597TANGUT COMPONENT-" + + "598TANGUT COMPONENT-599TANGUT COMPONENT-600TANGUT COMPONENT-601TANGUT CO" + + "MPONENT-602TANGUT COMPONENT-603TANGUT COMPONENT-604TANGUT COMPONENT-605T" + + "ANGUT COMPONENT-606TANGUT COMPONENT-607TANGUT COMPONENT-608TANGUT COMPON" + + "ENT-609TANGUT COMPONENT-610TANGUT COMPONENT-611TANGUT COMPONENT-612TANGU" + + "T COMPONENT-613TANGUT COMPONENT-614TANGUT COMPONENT-615TANGUT COMPONENT-" + + "616TANGUT COMPONENT-617TANGUT COMPONENT-618TANGUT COMPONENT-619TANGUT CO" + + "MPONENT-620TANGUT COMPONENT-621TANGUT COMPONENT-622TANGUT COMPONENT-623T" + + "ANGUT COMPONENT-624TANGUT COMPONENT-625TANGUT COMPONENT-626TANGUT COMPON" + + "ENT-627TANGUT COMPONENT-628TANGUT COMPONENT-629TANGUT COMPONENT-630TANGU" + + "T COMPONENT-631TANGUT COMPONENT-632TANGUT COMPONENT-633TANGUT COMPONENT-" + + "634TANGUT COMPONENT-635TANGUT COMPONENT-636TANGUT COMPONENT-637TANGUT CO" + + "MPONENT-638TANGUT COMPONENT-639TANGUT COMPONENT-640TANGUT COMPONENT-641T" + + "ANGUT COMPONENT-642TANGUT COMPONENT-643TANGUT COMPONENT-644TANGUT COMPON" + + "ENT-645TANGUT COMPONENT-646TANGUT COMPONENT-647TANGUT COMPONENT-648TANGU" + + "T COMPONENT-649TANGUT COMPONENT-650TANGUT COMPONENT-651TANGUT COMPONENT-" + + "652TANGUT COMPONENT-653TANGUT COMPONENT-654TANGUT COMPONENT-655TANGUT CO" + + "MPONENT-656TANGUT COMPONENT-657TANGUT COMPONENT-658TANGUT COMPONENT-659T" + + "ANGUT COMPONENT-660TANGUT COMPONENT-661TANGUT COMPONENT-662TANGUT COMPON" + + "ENT-663TANGUT COMPONENT-664TANGUT COMPONENT-665TANGUT COMPONENT-666TANGU" + + "T COMPONENT-667TANGUT COMPONENT-668TANGUT COMPONENT-669TANGUT COMPONENT-" + + "670TANGUT COMPONENT-671TANGUT COMPONENT-672TANGUT COMPONENT-673TANGUT CO" + + "MPONENT-674TANGUT COMPONENT-675TANGUT COMPONENT-676TANGUT COMPONENT-677T" + + "ANGUT COMPONENT-678TANGUT COMPONENT-679TANGUT COMPONENT-680TANGUT COMPON" + + "ENT-681TANGUT COMPONENT-682TANGUT COMPONENT-683TANGUT COMPONENT-684TANGU" + + "T COMPONENT-685TANGUT COMPONENT-686TANGUT COMPONENT-687TANGUT COMPONENT-" + + "688TANGUT COMPONENT-689TANGUT COMPONENT-690TANGUT COMPONENT-691TANGUT CO") + ("" + + "MPONENT-692TANGUT COMPONENT-693TANGUT COMPONENT-694TANGUT COMPONENT-695T" + + "ANGUT COMPONENT-696TANGUT COMPONENT-697TANGUT COMPONENT-698TANGUT COMPON" + + "ENT-699TANGUT COMPONENT-700TANGUT COMPONENT-701TANGUT COMPONENT-702TANGU" + + "T COMPONENT-703TANGUT COMPONENT-704TANGUT COMPONENT-705TANGUT COMPONENT-" + + "706TANGUT COMPONENT-707TANGUT COMPONENT-708TANGUT COMPONENT-709TANGUT CO" + + "MPONENT-710TANGUT COMPONENT-711TANGUT COMPONENT-712TANGUT COMPONENT-713T" + + "ANGUT COMPONENT-714TANGUT COMPONENT-715TANGUT COMPONENT-716TANGUT COMPON" + + "ENT-717TANGUT COMPONENT-718TANGUT COMPONENT-719TANGUT COMPONENT-720TANGU" + + "T COMPONENT-721TANGUT COMPONENT-722TANGUT COMPONENT-723TANGUT COMPONENT-" + + "724TANGUT COMPONENT-725TANGUT COMPONENT-726TANGUT COMPONENT-727TANGUT CO" + + "MPONENT-728TANGUT COMPONENT-729TANGUT COMPONENT-730TANGUT COMPONENT-731T" + + "ANGUT COMPONENT-732TANGUT COMPONENT-733TANGUT COMPONENT-734TANGUT COMPON" + + "ENT-735TANGUT COMPONENT-736TANGUT COMPONENT-737TANGUT COMPONENT-738TANGU" + + "T COMPONENT-739TANGUT COMPONENT-740TANGUT COMPONENT-741TANGUT COMPONENT-" + + "742TANGUT COMPONENT-743TANGUT COMPONENT-744TANGUT COMPONENT-745TANGUT CO" + + "MPONENT-746TANGUT COMPONENT-747TANGUT COMPONENT-748TANGUT COMPONENT-749T" + + "ANGUT COMPONENT-750TANGUT COMPONENT-751TANGUT COMPONENT-752TANGUT COMPON" + + "ENT-753TANGUT COMPONENT-754TANGUT COMPONENT-755KATAKANA LETTER ARCHAIC E" + + "HIRAGANA LETTER ARCHAIC YEDUPLOYAN LETTER HDUPLOYAN LETTER XDUPLOYAN LET" + + "TER PDUPLOYAN LETTER TDUPLOYAN LETTER FDUPLOYAN LETTER KDUPLOYAN LETTER " + + "LDUPLOYAN LETTER BDUPLOYAN LETTER DDUPLOYAN LETTER VDUPLOYAN LETTER GDUP" + + "LOYAN LETTER RDUPLOYAN LETTER P NDUPLOYAN LETTER D SDUPLOYAN LETTER F ND" + + "UPLOYAN LETTER K MDUPLOYAN LETTER R SDUPLOYAN LETTER THDUPLOYAN LETTER S" + + "LOAN DHDUPLOYAN LETTER DHDUPLOYAN LETTER KKDUPLOYAN LETTER SLOAN JDUPLOY" + + "AN LETTER HLDUPLOYAN LETTER LHDUPLOYAN LETTER RHDUPLOYAN LETTER MDUPLOYA" + + "N LETTER NDUPLOYAN LETTER JDUPLOYAN LETTER SDUPLOYAN LETTER M NDUPLOYAN " + + "LETTER N MDUPLOYAN LETTER J MDUPLOYAN LETTER S JDUPLOYAN LETTER M WITH D" + + "OTDUPLOYAN LETTER N WITH DOTDUPLOYAN LETTER J WITH DOTDUPLOYAN LETTER J " + + "WITH DOTS INSIDE AND ABOVEDUPLOYAN LETTER S WITH DOTDUPLOYAN LETTER S WI" + + "TH DOT BELOWDUPLOYAN LETTER M SDUPLOYAN LETTER N SDUPLOYAN LETTER J SDUP" + + "LOYAN LETTER S SDUPLOYAN LETTER M N SDUPLOYAN LETTER N M SDUPLOYAN LETTE" + + "R J M SDUPLOYAN LETTER S J SDUPLOYAN LETTER J S WITH DOTDUPLOYAN LETTER " + + "J NDUPLOYAN LETTER J N SDUPLOYAN LETTER S TDUPLOYAN LETTER S T RDUPLOYAN" + + " LETTER S PDUPLOYAN LETTER S P RDUPLOYAN LETTER T SDUPLOYAN LETTER T R S" + + "DUPLOYAN LETTER WDUPLOYAN LETTER WHDUPLOYAN LETTER W RDUPLOYAN LETTER S " + + "NDUPLOYAN LETTER S MDUPLOYAN LETTER K R SDUPLOYAN LETTER G R SDUPLOYAN L" + + "ETTER S KDUPLOYAN LETTER S K RDUPLOYAN LETTER ADUPLOYAN LETTER SLOAN OWD" + + "UPLOYAN LETTER OADUPLOYAN LETTER ODUPLOYAN LETTER AOUDUPLOYAN LETTER IDU" + + "PLOYAN LETTER EDUPLOYAN LETTER IEDUPLOYAN LETTER SHORT IDUPLOYAN LETTER " + + "UIDUPLOYAN LETTER EEDUPLOYAN LETTER SLOAN EHDUPLOYAN LETTER ROMANIAN IDU" + + "PLOYAN LETTER SLOAN EEDUPLOYAN LETTER LONG IDUPLOYAN LETTER YEDUPLOYAN L" + + "ETTER UDUPLOYAN LETTER EUDUPLOYAN LETTER XWDUPLOYAN LETTER U NDUPLOYAN L" + + "ETTER LONG UDUPLOYAN LETTER ROMANIAN UDUPLOYAN LETTER UHDUPLOYAN LETTER " + + "SLOAN UDUPLOYAN LETTER OOHDUPLOYAN LETTER OWDUPLOYAN LETTER OUDUPLOYAN L" + + "ETTER WADUPLOYAN LETTER WODUPLOYAN LETTER WIDUPLOYAN LETTER WEIDUPLOYAN " + + "LETTER WOWDUPLOYAN LETTER NASAL UDUPLOYAN LETTER NASAL ODUPLOYAN LETTER " + + "NASAL IDUPLOYAN LETTER NASAL ADUPLOYAN LETTER PERNIN ANDUPLOYAN LETTER P" + + "ERNIN AMDUPLOYAN LETTER SLOAN ENDUPLOYAN LETTER SLOAN ANDUPLOYAN LETTER " + + "SLOAN ONDUPLOYAN LETTER VOCALIC MDUPLOYAN AFFIX LEFT HORIZONTAL SECANTDU" + + "PLOYAN AFFIX MID HORIZONTAL SECANTDUPLOYAN AFFIX RIGHT HORIZONTAL SECANT" + + "DUPLOYAN AFFIX LOW VERTICAL SECANTDUPLOYAN AFFIX MID VERTICAL SECANTDUPL" + + "OYAN AFFIX HIGH VERTICAL SECANTDUPLOYAN AFFIX ATTACHED SECANTDUPLOYAN AF" + + "FIX ATTACHED LEFT-TO-RIGHT SECANTDUPLOYAN AFFIX ATTACHED TANGENTDUPLOYAN" + + " AFFIX ATTACHED TAILDUPLOYAN AFFIX ATTACHED E HOOKDUPLOYAN AFFIX ATTACHE" + + "D I HOOKDUPLOYAN AFFIX ATTACHED TANGENT HOOKDUPLOYAN AFFIX HIGH ACUTEDUP" + + "LOYAN AFFIX HIGH TIGHT ACUTEDUPLOYAN AFFIX HIGH GRAVEDUPLOYAN AFFIX HIGH" + + " LONG GRAVEDUPLOYAN AFFIX HIGH DOTDUPLOYAN AFFIX HIGH CIRCLEDUPLOYAN AFF" + + "IX HIGH LINEDUPLOYAN AFFIX HIGH WAVEDUPLOYAN AFFIX HIGH VERTICALDUPLOYAN" + + " AFFIX LOW ACUTEDUPLOYAN AFFIX LOW TIGHT ACUTEDUPLOYAN AFFIX LOW GRAVEDU" + + "PLOYAN AFFIX LOW LONG GRAVEDUPLOYAN AFFIX LOW DOTDUPLOYAN AFFIX LOW CIRC" + + "LEDUPLOYAN AFFIX LOW LINEDUPLOYAN AFFIX LOW WAVEDUPLOYAN AFFIX LOW VERTI" + + "CALDUPLOYAN AFFIX LOW ARROWDUPLOYAN SIGN O WITH CROSSDUPLOYAN THICK LETT" + + "ER SELECTORDUPLOYAN DOUBLE MARKDUPLOYAN PUNCTUATION CHINOOK FULL STOPSHO" + + "RTHAND FORMAT LETTER OVERLAPSHORTHAND FORMAT CONTINUING OVERLAPSHORTHAND") + ("" + + " FORMAT DOWN STEPSHORTHAND FORMAT UP STEPBYZANTINE MUSICAL SYMBOL PSILIB" + + "YZANTINE MUSICAL SYMBOL DASEIABYZANTINE MUSICAL SYMBOL PERISPOMENIBYZANT" + + "INE MUSICAL SYMBOL OXEIA EKFONITIKONBYZANTINE MUSICAL SYMBOL OXEIA DIPLI" + + "BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKONBYZANTINE MUSICAL SYMBOL VARE" + + "IA DIPLIBYZANTINE MUSICAL SYMBOL KATHISTIBYZANTINE MUSICAL SYMBOL SYRMAT" + + "IKIBYZANTINE MUSICAL SYMBOL PARAKLITIKIBYZANTINE MUSICAL SYMBOL YPOKRISI" + + "SBYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLIBYZANTINE MUSICAL SYMBOL KREMAS" + + "TIBYZANTINE MUSICAL SYMBOL APESO EKFONITIKONBYZANTINE MUSICAL SYMBOL EXO" + + " EKFONITIKONBYZANTINE MUSICAL SYMBOL TELEIABYZANTINE MUSICAL SYMBOL KENT" + + "IMATABYZANTINE MUSICAL SYMBOL APOSTROFOSBYZANTINE MUSICAL SYMBOL APOSTRO" + + "FOS DIPLIBYZANTINE MUSICAL SYMBOL SYNEVMABYZANTINE MUSICAL SYMBOL THITAB" + + "YZANTINE MUSICAL SYMBOL OLIGON ARCHAIONBYZANTINE MUSICAL SYMBOL GORGON A" + + "RCHAIONBYZANTINE MUSICAL SYMBOL PSILONBYZANTINE MUSICAL SYMBOL CHAMILONB" + + "YZANTINE MUSICAL SYMBOL VATHYBYZANTINE MUSICAL SYMBOL ISON ARCHAIONBYZAN" + + "TINE MUSICAL SYMBOL KENTIMA ARCHAIONBYZANTINE MUSICAL SYMBOL KENTIMATA A" + + "RCHAIONBYZANTINE MUSICAL SYMBOL SAXIMATABYZANTINE MUSICAL SYMBOL PARICHO" + + "NBYZANTINE MUSICAL SYMBOL STAVROS APODEXIABYZANTINE MUSICAL SYMBOL OXEIA" + + "I ARCHAIONBYZANTINE MUSICAL SYMBOL VAREIAI ARCHAIONBYZANTINE MUSICAL SYM" + + "BOL APODERMA ARCHAIONBYZANTINE MUSICAL SYMBOL APOTHEMABYZANTINE MUSICAL " + + "SYMBOL KLASMABYZANTINE MUSICAL SYMBOL REVMABYZANTINE MUSICAL SYMBOL PIAS" + + "MA ARCHAIONBYZANTINE MUSICAL SYMBOL TINAGMABYZANTINE MUSICAL SYMBOL ANAT" + + "RICHISMABYZANTINE MUSICAL SYMBOL SEISMABYZANTINE MUSICAL SYMBOL SYNAGMA " + + "ARCHAIONBYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROUBYZANTINE MUSICAL S" + + "YMBOL OYRANISMA ARCHAIONBYZANTINE MUSICAL SYMBOL THEMABYZANTINE MUSICAL " + + "SYMBOL LEMOIBYZANTINE MUSICAL SYMBOL DYOBYZANTINE MUSICAL SYMBOL TRIABYZ" + + "ANTINE MUSICAL SYMBOL TESSERABYZANTINE MUSICAL SYMBOL KRATIMATABYZANTINE" + + " MUSICAL SYMBOL APESO EXO NEOBYZANTINE MUSICAL SYMBOL FTHORA ARCHAIONBYZ" + + "ANTINE MUSICAL SYMBOL IMIFTHORABYZANTINE MUSICAL SYMBOL TROMIKON ARCHAIO" + + "NBYZANTINE MUSICAL SYMBOL KATAVA TROMIKONBYZANTINE MUSICAL SYMBOL PELAST" + + "ONBYZANTINE MUSICAL SYMBOL PSIFISTONBYZANTINE MUSICAL SYMBOL KONTEVMABYZ" + + "ANTINE MUSICAL SYMBOL CHOREVMA ARCHAIONBYZANTINE MUSICAL SYMBOL RAPISMAB" + + "YZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAIONBYZANTINE MUSICAL SYMBOL PAR" + + "AKLITIKI ARCHAIONBYZANTINE MUSICAL SYMBOL ICHADINBYZANTINE MUSICAL SYMBO" + + "L NANABYZANTINE MUSICAL SYMBOL PETASMABYZANTINE MUSICAL SYMBOL KONTEVMA " + + "ALLOBYZANTINE MUSICAL SYMBOL TROMIKON ALLOBYZANTINE MUSICAL SYMBOL STRAG" + + "GISMATABYZANTINE MUSICAL SYMBOL GRONTHISMATABYZANTINE MUSICAL SYMBOL ISO" + + "N NEOBYZANTINE MUSICAL SYMBOL OLIGON NEOBYZANTINE MUSICAL SYMBOL OXEIA N" + + "EOBYZANTINE MUSICAL SYMBOL PETASTIBYZANTINE MUSICAL SYMBOL KOUFISMABYZAN" + + "TINE MUSICAL SYMBOL PETASTOKOUFISMABYZANTINE MUSICAL SYMBOL KRATIMOKOUFI" + + "SMABYZANTINE MUSICAL SYMBOL PELASTON NEOBYZANTINE MUSICAL SYMBOL KENTIMA" + + "TA NEO ANOBYZANTINE MUSICAL SYMBOL KENTIMA NEO ANOBYZANTINE MUSICAL SYMB" + + "OL YPSILIBYZANTINE MUSICAL SYMBOL APOSTROFOS NEOBYZANTINE MUSICAL SYMBOL" + + " APOSTROFOI SYNDESMOS NEOBYZANTINE MUSICAL SYMBOL YPORROIBYZANTINE MUSIC" + + "AL SYMBOL KRATIMOYPORROONBYZANTINE MUSICAL SYMBOL ELAFRONBYZANTINE MUSIC" + + "AL SYMBOL CHAMILIBYZANTINE MUSICAL SYMBOL MIKRON ISONBYZANTINE MUSICAL S" + + "YMBOL VAREIA NEOBYZANTINE MUSICAL SYMBOL PIASMA NEOBYZANTINE MUSICAL SYM" + + "BOL PSIFISTON NEOBYZANTINE MUSICAL SYMBOL OMALONBYZANTINE MUSICAL SYMBOL" + + " ANTIKENOMABYZANTINE MUSICAL SYMBOL LYGISMABYZANTINE MUSICAL SYMBOL PARA" + + "KLITIKI NEOBYZANTINE MUSICAL SYMBOL PARAKALESMA NEOBYZANTINE MUSICAL SYM" + + "BOL ETERON PARAKALESMABYZANTINE MUSICAL SYMBOL KYLISMABYZANTINE MUSICAL " + + "SYMBOL ANTIKENOKYLISMABYZANTINE MUSICAL SYMBOL TROMIKON NEOBYZANTINE MUS" + + "ICAL SYMBOL EKSTREPTONBYZANTINE MUSICAL SYMBOL SYNAGMA NEOBYZANTINE MUSI" + + "CAL SYMBOL SYRMABYZANTINE MUSICAL SYMBOL CHOREVMA NEOBYZANTINE MUSICAL S" + + "YMBOL EPEGERMABYZANTINE MUSICAL SYMBOL SEISMA NEOBYZANTINE MUSICAL SYMBO" + + "L XIRON KLASMABYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTONBYZANTINE MUSICAL" + + " SYMBOL PSIFISTOLYGISMABYZANTINE MUSICAL SYMBOL TROMIKOLYGISMABYZANTINE " + + "MUSICAL SYMBOL TROMIKOPARAKALESMABYZANTINE MUSICAL SYMBOL PSIFISTOPARAKA" + + "LESMABYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMABYZANTINE MUSICAL SYMBOL PSI" + + "FISTOSYNAGMABYZANTINE MUSICAL SYMBOL GORGOSYNTHETONBYZANTINE MUSICAL SYM" + + "BOL ARGOSYNTHETONBYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETONBYZANTINE " + + "MUSICAL SYMBOL OYRANISMA NEOBYZANTINE MUSICAL SYMBOL THEMATISMOS ESOBYZA" + + "NTINE MUSICAL SYMBOL THEMATISMOS EXOBYZANTINE MUSICAL SYMBOL THEMA APLOU" + + "NBYZANTINE MUSICAL SYMBOL THES KAI APOTHESBYZANTINE MUSICAL SYMBOL KATAV" + + "ASMABYZANTINE MUSICAL SYMBOL ENDOFONONBYZANTINE MUSICAL SYMBOL YFEN KATO") + ("" + + "BYZANTINE MUSICAL SYMBOL YFEN ANOBYZANTINE MUSICAL SYMBOL STAVROSBYZANTI" + + "NE MUSICAL SYMBOL KLASMA ANOBYZANTINE MUSICAL SYMBOL DIPLI ARCHAIONBYZAN" + + "TINE MUSICAL SYMBOL KRATIMA ARCHAIONBYZANTINE MUSICAL SYMBOL KRATIMA ALL" + + "OBYZANTINE MUSICAL SYMBOL KRATIMA NEOBYZANTINE MUSICAL SYMBOL APODERMA N" + + "EOBYZANTINE MUSICAL SYMBOL APLIBYZANTINE MUSICAL SYMBOL DIPLIBYZANTINE M" + + "USICAL SYMBOL TRIPLIBYZANTINE MUSICAL SYMBOL TETRAPLIBYZANTINE MUSICAL S" + + "YMBOL KORONISBYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOUBYZANTINE MUSIC" + + "AL SYMBOL LEIMMA DYO CHRONONBYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONO" + + "NBYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONONBYZANTINE MUSICAL SYMBO" + + "L LEIMMA IMISEOS CHRONOUBYZANTINE MUSICAL SYMBOL GORGON NEO ANOBYZANTINE" + + " MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERABYZANTINE MUSICAL SYMBOL GO" + + "RGON PARESTIGMENON DEXIABYZANTINE MUSICAL SYMBOL DIGORGONBYZANTINE MUSIC" + + "AL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATOBYZANTINE MUSICAL SYMBOL D" + + "IGORGON PARESTIGMENON ARISTERA ANOBYZANTINE MUSICAL SYMBOL DIGORGON PARE" + + "STIGMENON DEXIABYZANTINE MUSICAL SYMBOL TRIGORGONBYZANTINE MUSICAL SYMBO" + + "L ARGONBYZANTINE MUSICAL SYMBOL IMIDIARGONBYZANTINE MUSICAL SYMBOL DIARG" + + "ONBYZANTINE MUSICAL SYMBOL AGOGI POLI ARGIBYZANTINE MUSICAL SYMBOL AGOGI" + + " ARGOTERIBYZANTINE MUSICAL SYMBOL AGOGI ARGIBYZANTINE MUSICAL SYMBOL AGO" + + "GI METRIABYZANTINE MUSICAL SYMBOL AGOGI MESIBYZANTINE MUSICAL SYMBOL AGO" + + "GI GORGIBYZANTINE MUSICAL SYMBOL AGOGI GORGOTERIBYZANTINE MUSICAL SYMBOL" + + " AGOGI POLI GORGIBYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOSBYZANTINE" + + " MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOSBYZANTINE MUSICAL SYMBOL MARTY" + + "RIA DEYTEROS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOSB" + + "YZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOSBYZANTINE MUSICAL SYMBOL MA" + + "RTYRIA TRIFONIASBYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOSBYZANTIN" + + "E MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOSBYZANTINE MUSICAL SYMBOL" + + " MARTYRIA LEGETOS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOSBY" + + "ZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOSBYZANTINE MUSICAL SYMBOL A" + + "POSTROFOI TELOUS ICHIMATOSBYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS" + + "BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIASBYZANTINE MUSICAL SYMBOL FA" + + "NEROSIS DIFONIASBYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOSBYZANTINE M" + + "USICAL SYMBOL MARTYRIA PROTOVARYS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA" + + " PLAGIOS TETARTOS ICHOSBYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUNBYZAN" + + "TINE MUSICAL SYMBOL GORTHMIKON N DIPLOUNBYZANTINE MUSICAL SYMBOL ENARXIS" + + " KAI FTHORA VOUBYZANTINE MUSICAL SYMBOL IMIFONONBYZANTINE MUSICAL SYMBOL" + + " IMIFTHORONBYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOUBYZANT" + + "INE MUSICAL SYMBOL FTHORA DIATONIKI PABYZANTINE MUSICAL SYMBOL FTHORA DI" + + "ATONIKI NANABYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOSBYZANTINE MUSICAL " + + "SYMBOL FTHORA DIATONIKI DIBYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATON" + + "ON DIBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KEBYZANTINE MUSICAL SYMBO" + + "L FTHORA DIATONIKI ZOBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATOBY" + + "ZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANOBYZANTINE MUSICAL SYMBOL F" + + "THORA MALAKON CHROMA DIFONIASBYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHR" + + "OMA MONOFONIASBYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASISBYZANT" + + "INE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFIBYZANTINE MUSICAL SYMBOL " + + "FTHORA NENANOBYZANTINE MUSICAL SYMBOL CHROA ZYGOSBYZANTINE MUSICAL SYMBO" + + "L CHROA KLITONBYZANTINE MUSICAL SYMBOL CHROA SPATHIBYZANTINE MUSICAL SYM" + + "BOL FTHORA I YFESIS TETARTIMORIONBYZANTINE MUSICAL SYMBOL FTHORA ENARMON" + + "IOS ANTIFONIABYZANTINE MUSICAL SYMBOL YFESIS TRITIMORIONBYZANTINE MUSICA" + + "L SYMBOL DIESIS TRITIMORIONBYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION" + + "BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATABYZANTINE MUSICAL SYMBO" + + "L DIESIS MONOGRAMMOS TESSERA DODEKATABYZANTINE MUSICAL SYMBOL DIESIS DIG" + + "RAMMOS EX DODEKATABYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKA" + + "TABYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATABYZANTINE MUSICAL SYM" + + "BOL YFESIS MONOGRAMMOS TESSERA DODEKATABYZANTINE MUSICAL SYMBOL YFESIS D" + + "IGRAMMOS EX DODEKATABYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODE" + + "KATABYZANTINE MUSICAL SYMBOL GENIKI DIESISBYZANTINE MUSICAL SYMBOL GENIK" + + "I YFESISBYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRIBYZANTINE MUSICAL SY" + + "MBOL DIASTOLI APLI MEGALIBYZANTINE MUSICAL SYMBOL DIASTOLI DIPLIBYZANTIN" + + "E MUSICAL SYMBOL DIASTOLI THESEOSBYZANTINE MUSICAL SYMBOL SIMANSIS THESE" + + "OSBYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOUBYZANTINE MUSICAL SYM" + + "BOL SIMANSIS THESEOS TRISIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS T" + + "ETRASIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOSBYZANTINE MUSICAL SYMBO" + + "L SIMANSIS ARSEOS DISIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIM") + ("" + + "OUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOUBYZANTINE MUSICAL S" + + "YMBOL DIGRAMMA GGBYZANTINE MUSICAL SYMBOL DIFTOGGOS OUBYZANTINE MUSICAL " + + "SYMBOL STIGMABYZANTINE MUSICAL SYMBOL ARKTIKO PABYZANTINE MUSICAL SYMBOL" + + " ARKTIKO VOUBYZANTINE MUSICAL SYMBOL ARKTIKO GABYZANTINE MUSICAL SYMBOL " + + "ARKTIKO DIBYZANTINE MUSICAL SYMBOL ARKTIKO KEBYZANTINE MUSICAL SYMBOL AR" + + "KTIKO ZOBYZANTINE MUSICAL SYMBOL ARKTIKO NIBYZANTINE MUSICAL SYMBOL KENT" + + "IMATA NEO MESOBYZANTINE MUSICAL SYMBOL KENTIMA NEO MESOBYZANTINE MUSICAL" + + " SYMBOL KENTIMATA NEO KATOBYZANTINE MUSICAL SYMBOL KENTIMA NEO KATOBYZAN" + + "TINE MUSICAL SYMBOL KLASMA KATOBYZANTINE MUSICAL SYMBOL GORGON NEO KATOM" + + "USICAL SYMBOL SINGLE BARLINEMUSICAL SYMBOL DOUBLE BARLINEMUSICAL SYMBOL " + + "FINAL BARLINEMUSICAL SYMBOL REVERSE FINAL BARLINEMUSICAL SYMBOL DASHED B" + + "ARLINEMUSICAL SYMBOL SHORT BARLINEMUSICAL SYMBOL LEFT REPEAT SIGNMUSICAL" + + " SYMBOL RIGHT REPEAT SIGNMUSICAL SYMBOL REPEAT DOTSMUSICAL SYMBOL DAL SE" + + "GNOMUSICAL SYMBOL DA CAPOMUSICAL SYMBOL SEGNOMUSICAL SYMBOL CODAMUSICAL " + + "SYMBOL REPEATED FIGURE-1MUSICAL SYMBOL REPEATED FIGURE-2MUSICAL SYMBOL R" + + "EPEATED FIGURE-3MUSICAL SYMBOL FERMATAMUSICAL SYMBOL FERMATA BELOWMUSICA" + + "L SYMBOL BREATH MARKMUSICAL SYMBOL CAESURAMUSICAL SYMBOL BRACEMUSICAL SY" + + "MBOL BRACKETMUSICAL SYMBOL ONE-LINE STAFFMUSICAL SYMBOL TWO-LINE STAFFMU" + + "SICAL SYMBOL THREE-LINE STAFFMUSICAL SYMBOL FOUR-LINE STAFFMUSICAL SYMBO" + + "L FIVE-LINE STAFFMUSICAL SYMBOL SIX-LINE STAFFMUSICAL SYMBOL SIX-STRING " + + "FRETBOARDMUSICAL SYMBOL FOUR-STRING FRETBOARDMUSICAL SYMBOL G CLEFMUSICA" + + "L SYMBOL G CLEF OTTAVA ALTAMUSICAL SYMBOL G CLEF OTTAVA BASSAMUSICAL SYM" + + "BOL C CLEFMUSICAL SYMBOL F CLEFMUSICAL SYMBOL F CLEF OTTAVA ALTAMUSICAL " + + "SYMBOL F CLEF OTTAVA BASSAMUSICAL SYMBOL DRUM CLEF-1MUSICAL SYMBOL DRUM " + + "CLEF-2MUSICAL SYMBOL MULTIPLE MEASURE RESTMUSICAL SYMBOL DOUBLE SHARPMUS" + + "ICAL SYMBOL DOUBLE FLATMUSICAL SYMBOL FLAT UPMUSICAL SYMBOL FLAT DOWNMUS" + + "ICAL SYMBOL NATURAL UPMUSICAL SYMBOL NATURAL DOWNMUSICAL SYMBOL SHARP UP" + + "MUSICAL SYMBOL SHARP DOWNMUSICAL SYMBOL QUARTER TONE SHARPMUSICAL SYMBOL" + + " QUARTER TONE FLATMUSICAL SYMBOL COMMON TIMEMUSICAL SYMBOL CUT TIMEMUSIC" + + "AL SYMBOL OTTAVA ALTAMUSICAL SYMBOL OTTAVA BASSAMUSICAL SYMBOL QUINDICES" + + "IMA ALTAMUSICAL SYMBOL QUINDICESIMA BASSAMUSICAL SYMBOL MULTI RESTMUSICA" + + "L SYMBOL WHOLE RESTMUSICAL SYMBOL HALF RESTMUSICAL SYMBOL QUARTER RESTMU" + + "SICAL SYMBOL EIGHTH RESTMUSICAL SYMBOL SIXTEENTH RESTMUSICAL SYMBOL THIR" + + "TY-SECOND RESTMUSICAL SYMBOL SIXTY-FOURTH RESTMUSICAL SYMBOL ONE HUNDRED" + + " TWENTY-EIGHTH RESTMUSICAL SYMBOL X NOTEHEADMUSICAL SYMBOL PLUS NOTEHEAD" + + "MUSICAL SYMBOL CIRCLE X NOTEHEADMUSICAL SYMBOL SQUARE NOTEHEAD WHITEMUSI" + + "CAL SYMBOL SQUARE NOTEHEAD BLACKMUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHIT" + + "EMUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACKMUSICAL SYMBOL TRIANGLE NOTEHE" + + "AD LEFT WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACKMUSICAL SYMBOL T" + + "RIANGLE NOTEHEAD RIGHT WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK" + + "MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITEMUSICAL SYMBOL TRIANGLE NOTEH" + + "EAD DOWN BLACKMUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITEMUSICAL SYM" + + "BOL TRIANGLE NOTEHEAD UP RIGHT BLACKMUSICAL SYMBOL MOON NOTEHEAD WHITEMU" + + "SICAL SYMBOL MOON NOTEHEAD BLACKMUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD D" + + "OWN WHITEMUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACKMUSICAL SYMBOL" + + " PARENTHESIS NOTEHEADMUSICAL SYMBOL VOID NOTEHEADMUSICAL SYMBOL NOTEHEAD" + + " BLACKMUSICAL SYMBOL NULL NOTEHEADMUSICAL SYMBOL CLUSTER NOTEHEAD WHITEM" + + "USICAL SYMBOL CLUSTER NOTEHEAD BLACKMUSICAL SYMBOL BREVEMUSICAL SYMBOL W" + + "HOLE NOTEMUSICAL SYMBOL HALF NOTEMUSICAL SYMBOL QUARTER NOTEMUSICAL SYMB" + + "OL EIGHTH NOTEMUSICAL SYMBOL SIXTEENTH NOTEMUSICAL SYMBOL THIRTY-SECOND " + + "NOTEMUSICAL SYMBOL SIXTY-FOURTH NOTEMUSICAL SYMBOL ONE HUNDRED TWENTY-EI" + + "GHTH NOTEMUSICAL SYMBOL COMBINING STEMMUSICAL SYMBOL COMBINING SPRECHGES" + + "ANG STEMMUSICAL SYMBOL COMBINING TREMOLO-1MUSICAL SYMBOL COMBINING TREMO" + + "LO-2MUSICAL SYMBOL COMBINING TREMOLO-3MUSICAL SYMBOL FINGERED TREMOLO-1M" + + "USICAL SYMBOL FINGERED TREMOLO-2MUSICAL SYMBOL FINGERED TREMOLO-3MUSICAL" + + " SYMBOL COMBINING AUGMENTATION DOTMUSICAL SYMBOL COMBINING FLAG-1MUSICAL" + + " SYMBOL COMBINING FLAG-2MUSICAL SYMBOL COMBINING FLAG-3MUSICAL SYMBOL CO" + + "MBINING FLAG-4MUSICAL SYMBOL COMBINING FLAG-5MUSICAL SYMBOL BEGIN BEAMMU" + + "SICAL SYMBOL END BEAMMUSICAL SYMBOL BEGIN TIEMUSICAL SYMBOL END TIEMUSIC" + + "AL SYMBOL BEGIN SLURMUSICAL SYMBOL END SLURMUSICAL SYMBOL BEGIN PHRASEMU" + + "SICAL SYMBOL END PHRASEMUSICAL SYMBOL COMBINING ACCENTMUSICAL SYMBOL COM" + + "BINING STACCATOMUSICAL SYMBOL COMBINING TENUTOMUSICAL SYMBOL COMBINING S" + + "TACCATISSIMOMUSICAL SYMBOL COMBINING MARCATOMUSICAL SYMBOL COMBINING MAR" + + "CATO-STACCATOMUSICAL SYMBOL COMBINING ACCENT-STACCATOMUSICAL SYMBOL COMB") + ("" + + "INING LOUREMUSICAL SYMBOL ARPEGGIATO UPMUSICAL SYMBOL ARPEGGIATO DOWNMUS" + + "ICAL SYMBOL COMBINING DOITMUSICAL SYMBOL COMBINING RIPMUSICAL SYMBOL COM" + + "BINING FLIPMUSICAL SYMBOL COMBINING SMEARMUSICAL SYMBOL COMBINING BENDMU" + + "SICAL SYMBOL COMBINING DOUBLE TONGUEMUSICAL SYMBOL COMBINING TRIPLE TONG" + + "UEMUSICAL SYMBOL RINFORZANDOMUSICAL SYMBOL SUBITOMUSICAL SYMBOL ZMUSICAL" + + " SYMBOL PIANOMUSICAL SYMBOL MEZZOMUSICAL SYMBOL FORTEMUSICAL SYMBOL CRES" + + "CENDOMUSICAL SYMBOL DECRESCENDOMUSICAL SYMBOL GRACE NOTE SLASHMUSICAL SY" + + "MBOL GRACE NOTE NO SLASHMUSICAL SYMBOL TRMUSICAL SYMBOL TURNMUSICAL SYMB" + + "OL INVERTED TURNMUSICAL SYMBOL TURN SLASHMUSICAL SYMBOL TURN UPMUSICAL S" + + "YMBOL ORNAMENT STROKE-1MUSICAL SYMBOL ORNAMENT STROKE-2MUSICAL SYMBOL OR" + + "NAMENT STROKE-3MUSICAL SYMBOL ORNAMENT STROKE-4MUSICAL SYMBOL ORNAMENT S" + + "TROKE-5MUSICAL SYMBOL ORNAMENT STROKE-6MUSICAL SYMBOL ORNAMENT STROKE-7M" + + "USICAL SYMBOL ORNAMENT STROKE-8MUSICAL SYMBOL ORNAMENT STROKE-9MUSICAL S" + + "YMBOL ORNAMENT STROKE-10MUSICAL SYMBOL ORNAMENT STROKE-11MUSICAL SYMBOL " + + "HAUPTSTIMMEMUSICAL SYMBOL NEBENSTIMMEMUSICAL SYMBOL END OF STIMMEMUSICAL" + + " SYMBOL DEGREE SLASHMUSICAL SYMBOL COMBINING DOWN BOWMUSICAL SYMBOL COMB" + + "INING UP BOWMUSICAL SYMBOL COMBINING HARMONICMUSICAL SYMBOL COMBINING SN" + + "AP PIZZICATOMUSICAL SYMBOL PEDAL MARKMUSICAL SYMBOL PEDAL UP MARKMUSICAL" + + " SYMBOL HALF PEDAL MARKMUSICAL SYMBOL GLISSANDO UPMUSICAL SYMBOL GLISSAN" + + "DO DOWNMUSICAL SYMBOL WITH FINGERNAILSMUSICAL SYMBOL DAMPMUSICAL SYMBOL " + + "DAMP ALLMUSICAL SYMBOL MAXIMAMUSICAL SYMBOL LONGAMUSICAL SYMBOL BREVISMU" + + "SICAL SYMBOL SEMIBREVIS WHITEMUSICAL SYMBOL SEMIBREVIS BLACKMUSICAL SYMB" + + "OL MINIMAMUSICAL SYMBOL MINIMA BLACKMUSICAL SYMBOL SEMIMINIMA WHITEMUSIC" + + "AL SYMBOL SEMIMINIMA BLACKMUSICAL SYMBOL FUSA WHITEMUSICAL SYMBOL FUSA B" + + "LACKMUSICAL SYMBOL LONGA PERFECTA RESTMUSICAL SYMBOL LONGA IMPERFECTA RE" + + "STMUSICAL SYMBOL BREVIS RESTMUSICAL SYMBOL SEMIBREVIS RESTMUSICAL SYMBOL" + + " MINIMA RESTMUSICAL SYMBOL SEMIMINIMA RESTMUSICAL SYMBOL TEMPUS PERFECTU" + + "M CUM PROLATIONE PERFECTAMUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE " + + "IMPERFECTAMUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINU" + + "TION-1MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTAMUSICAL S" + + "YMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTAMUSICAL SYMBOL TEMPUS " + + "IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1MUSICAL SYMBOL TEMPUS " + + "IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2MUSICAL SYMBOL TEMPUS " + + "IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3MUSICAL SYMBOL CROIXMU" + + "SICAL SYMBOL GREGORIAN C CLEFMUSICAL SYMBOL GREGORIAN F CLEFMUSICAL SYMB" + + "OL SQUARE BMUSICAL SYMBOL VIRGAMUSICAL SYMBOL PODATUSMUSICAL SYMBOL CLIV" + + "ISMUSICAL SYMBOL SCANDICUSMUSICAL SYMBOL CLIMACUSMUSICAL SYMBOL TORCULUS" + + "MUSICAL SYMBOL PORRECTUSMUSICAL SYMBOL PORRECTUS FLEXUSMUSICAL SYMBOL SC" + + "ANDICUS FLEXUSMUSICAL SYMBOL TORCULUS RESUPINUSMUSICAL SYMBOL PES SUBPUN" + + "CTISMUSICAL SYMBOL KIEVAN C CLEFMUSICAL SYMBOL KIEVAN END OF PIECEMUSICA" + + "L SYMBOL KIEVAN FINAL NOTEMUSICAL SYMBOL KIEVAN RECITATIVE MARKMUSICAL S" + + "YMBOL KIEVAN WHOLE NOTEMUSICAL SYMBOL KIEVAN HALF NOTEMUSICAL SYMBOL KIE" + + "VAN QUARTER NOTE STEM DOWNMUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UPMUSI" + + "CAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWNMUSICAL SYMBOL KIEVAN EIGHTH NOTE" + + " STEM UPMUSICAL SYMBOL KIEVAN FLAT SIGNGREEK VOCAL NOTATION SYMBOL-1GREE" + + "K VOCAL NOTATION SYMBOL-2GREEK VOCAL NOTATION SYMBOL-3GREEK VOCAL NOTATI" + + "ON SYMBOL-4GREEK VOCAL NOTATION SYMBOL-5GREEK VOCAL NOTATION SYMBOL-6GRE" + + "EK VOCAL NOTATION SYMBOL-7GREEK VOCAL NOTATION SYMBOL-8GREEK VOCAL NOTAT" + + "ION SYMBOL-9GREEK VOCAL NOTATION SYMBOL-10GREEK VOCAL NOTATION SYMBOL-11" + + "GREEK VOCAL NOTATION SYMBOL-12GREEK VOCAL NOTATION SYMBOL-13GREEK VOCAL " + + "NOTATION SYMBOL-14GREEK VOCAL NOTATION SYMBOL-15GREEK VOCAL NOTATION SYM" + + "BOL-16GREEK VOCAL NOTATION SYMBOL-17GREEK VOCAL NOTATION SYMBOL-18GREEK " + + "VOCAL NOTATION SYMBOL-19GREEK VOCAL NOTATION SYMBOL-20GREEK VOCAL NOTATI" + + "ON SYMBOL-21GREEK VOCAL NOTATION SYMBOL-22GREEK VOCAL NOTATION SYMBOL-23" + + "GREEK VOCAL NOTATION SYMBOL-24GREEK VOCAL NOTATION SYMBOL-50GREEK VOCAL " + + "NOTATION SYMBOL-51GREEK VOCAL NOTATION SYMBOL-52GREEK VOCAL NOTATION SYM" + + "BOL-53GREEK VOCAL NOTATION SYMBOL-54GREEK INSTRUMENTAL NOTATION SYMBOL-1" + + "GREEK INSTRUMENTAL NOTATION SYMBOL-2GREEK INSTRUMENTAL NOTATION SYMBOL-4" + + "GREEK INSTRUMENTAL NOTATION SYMBOL-5GREEK INSTRUMENTAL NOTATION SYMBOL-7" + + "GREEK INSTRUMENTAL NOTATION SYMBOL-8GREEK INSTRUMENTAL NOTATION SYMBOL-1" + + "1GREEK INSTRUMENTAL NOTATION SYMBOL-12GREEK INSTRUMENTAL NOTATION SYMBOL" + + "-13GREEK INSTRUMENTAL NOTATION SYMBOL-14GREEK INSTRUMENTAL NOTATION SYMB" + + "OL-17GREEK INSTRUMENTAL NOTATION SYMBOL-18GREEK INSTRUMENTAL NOTATION SY" + + "MBOL-19GREEK INSTRUMENTAL NOTATION SYMBOL-23GREEK INSTRUMENTAL NOTATION ") + ("" + + "SYMBOL-24GREEK INSTRUMENTAL NOTATION SYMBOL-25GREEK INSTRUMENTAL NOTATIO" + + "N SYMBOL-26GREEK INSTRUMENTAL NOTATION SYMBOL-27GREEK INSTRUMENTAL NOTAT" + + "ION SYMBOL-29GREEK INSTRUMENTAL NOTATION SYMBOL-30GREEK INSTRUMENTAL NOT" + + "ATION SYMBOL-32GREEK INSTRUMENTAL NOTATION SYMBOL-36GREEK INSTRUMENTAL N" + + "OTATION SYMBOL-37GREEK INSTRUMENTAL NOTATION SYMBOL-38GREEK INSTRUMENTAL" + + " NOTATION SYMBOL-39GREEK INSTRUMENTAL NOTATION SYMBOL-40GREEK INSTRUMENT" + + "AL NOTATION SYMBOL-42GREEK INSTRUMENTAL NOTATION SYMBOL-43GREEK INSTRUME" + + "NTAL NOTATION SYMBOL-45GREEK INSTRUMENTAL NOTATION SYMBOL-47GREEK INSTRU" + + "MENTAL NOTATION SYMBOL-48GREEK INSTRUMENTAL NOTATION SYMBOL-49GREEK INST" + + "RUMENTAL NOTATION SYMBOL-50GREEK INSTRUMENTAL NOTATION SYMBOL-51GREEK IN" + + "STRUMENTAL NOTATION SYMBOL-52GREEK INSTRUMENTAL NOTATION SYMBOL-53GREEK " + + "INSTRUMENTAL NOTATION SYMBOL-54COMBINING GREEK MUSICAL TRISEMECOMBINING " + + "GREEK MUSICAL TETRASEMECOMBINING GREEK MUSICAL PENTASEMEGREEK MUSICAL LE" + + "IMMAMONOGRAM FOR EARTHDIGRAM FOR HEAVENLY EARTHDIGRAM FOR HUMAN EARTHDIG" + + "RAM FOR EARTHLY HEAVENDIGRAM FOR EARTHLY HUMANDIGRAM FOR EARTHTETRAGRAM " + + "FOR CENTRETETRAGRAM FOR FULL CIRCLETETRAGRAM FOR MIREDTETRAGRAM FOR BARR" + + "IERTETRAGRAM FOR KEEPING SMALLTETRAGRAM FOR CONTRARIETYTETRAGRAM FOR ASC" + + "ENTTETRAGRAM FOR OPPOSITIONTETRAGRAM FOR BRANCHING OUTTETRAGRAM FOR DEFE" + + "CTIVENESS OR DISTORTIONTETRAGRAM FOR DIVERGENCETETRAGRAM FOR YOUTHFULNES" + + "STETRAGRAM FOR INCREASETETRAGRAM FOR PENETRATIONTETRAGRAM FOR REACHTETRA" + + "GRAM FOR CONTACTTETRAGRAM FOR HOLDING BACKTETRAGRAM FOR WAITINGTETRAGRAM" + + " FOR FOLLOWINGTETRAGRAM FOR ADVANCETETRAGRAM FOR RELEASETETRAGRAM FOR RE" + + "SISTANCETETRAGRAM FOR EASETETRAGRAM FOR JOYTETRAGRAM FOR CONTENTIONTETRA" + + "GRAM FOR ENDEAVOURTETRAGRAM FOR DUTIESTETRAGRAM FOR CHANGETETRAGRAM FOR " + + "DECISIVENESSTETRAGRAM FOR BOLD RESOLUTIONTETRAGRAM FOR PACKINGTETRAGRAM " + + "FOR LEGIONTETRAGRAM FOR CLOSENESSTETRAGRAM FOR KINSHIPTETRAGRAM FOR GATH" + + "ERINGTETRAGRAM FOR STRENGTHTETRAGRAM FOR PURITYTETRAGRAM FOR FULLNESSTET" + + "RAGRAM FOR RESIDENCETETRAGRAM FOR LAW OR MODELTETRAGRAM FOR RESPONSETETR" + + "AGRAM FOR GOING TO MEETTETRAGRAM FOR ENCOUNTERSTETRAGRAM FOR STOVETETRAG" + + "RAM FOR GREATNESSTETRAGRAM FOR ENLARGEMENTTETRAGRAM FOR PATTERNTETRAGRAM" + + " FOR RITUALTETRAGRAM FOR FLIGHTTETRAGRAM FOR VASTNESS OR WASTINGTETRAGRA" + + "M FOR CONSTANCYTETRAGRAM FOR MEASURETETRAGRAM FOR ETERNITYTETRAGRAM FOR " + + "UNITYTETRAGRAM FOR DIMINISHMENTTETRAGRAM FOR CLOSED MOUTHTETRAGRAM FOR G" + + "UARDEDNESSTETRAGRAM FOR GATHERING INTETRAGRAM FOR MASSINGTETRAGRAM FOR A" + + "CCUMULATIONTETRAGRAM FOR EMBELLISHMENTTETRAGRAM FOR DOUBTTETRAGRAM FOR W" + + "ATCHTETRAGRAM FOR SINKINGTETRAGRAM FOR INNERTETRAGRAM FOR DEPARTURETETRA" + + "GRAM FOR DARKENINGTETRAGRAM FOR DIMMINGTETRAGRAM FOR EXHAUSTIONTETRAGRAM" + + " FOR SEVERANCETETRAGRAM FOR STOPPAGETETRAGRAM FOR HARDNESSTETRAGRAM FOR " + + "COMPLETIONTETRAGRAM FOR CLOSURETETRAGRAM FOR FAILURETETRAGRAM FOR AGGRAV" + + "ATIONTETRAGRAM FOR COMPLIANCETETRAGRAM FOR ON THE VERGETETRAGRAM FOR DIF" + + "FICULTIESTETRAGRAM FOR LABOURINGTETRAGRAM FOR FOSTERINGCOUNTING ROD UNIT" + + " DIGIT ONECOUNTING ROD UNIT DIGIT TWOCOUNTING ROD UNIT DIGIT THREECOUNTI" + + "NG ROD UNIT DIGIT FOURCOUNTING ROD UNIT DIGIT FIVECOUNTING ROD UNIT DIGI" + + "T SIXCOUNTING ROD UNIT DIGIT SEVENCOUNTING ROD UNIT DIGIT EIGHTCOUNTING " + + "ROD UNIT DIGIT NINECOUNTING ROD TENS DIGIT ONECOUNTING ROD TENS DIGIT TW" + + "OCOUNTING ROD TENS DIGIT THREECOUNTING ROD TENS DIGIT FOURCOUNTING ROD T" + + "ENS DIGIT FIVECOUNTING ROD TENS DIGIT SIXCOUNTING ROD TENS DIGIT SEVENCO" + + "UNTING ROD TENS DIGIT EIGHTCOUNTING ROD TENS DIGIT NINEMATHEMATICAL BOLD" + + " CAPITAL AMATHEMATICAL BOLD CAPITAL BMATHEMATICAL BOLD CAPITAL CMATHEMAT" + + "ICAL BOLD CAPITAL DMATHEMATICAL BOLD CAPITAL EMATHEMATICAL BOLD CAPITAL " + + "FMATHEMATICAL BOLD CAPITAL GMATHEMATICAL BOLD CAPITAL HMATHEMATICAL BOLD" + + " CAPITAL IMATHEMATICAL BOLD CAPITAL JMATHEMATICAL BOLD CAPITAL KMATHEMAT" + + "ICAL BOLD CAPITAL LMATHEMATICAL BOLD CAPITAL MMATHEMATICAL BOLD CAPITAL " + + "NMATHEMATICAL BOLD CAPITAL OMATHEMATICAL BOLD CAPITAL PMATHEMATICAL BOLD" + + " CAPITAL QMATHEMATICAL BOLD CAPITAL RMATHEMATICAL BOLD CAPITAL SMATHEMAT" + + "ICAL BOLD CAPITAL TMATHEMATICAL BOLD CAPITAL UMATHEMATICAL BOLD CAPITAL " + + "VMATHEMATICAL BOLD CAPITAL WMATHEMATICAL BOLD CAPITAL XMATHEMATICAL BOLD" + + " CAPITAL YMATHEMATICAL BOLD CAPITAL ZMATHEMATICAL BOLD SMALL AMATHEMATIC" + + "AL BOLD SMALL BMATHEMATICAL BOLD SMALL CMATHEMATICAL BOLD SMALL DMATHEMA" + + "TICAL BOLD SMALL EMATHEMATICAL BOLD SMALL FMATHEMATICAL BOLD SMALL GMATH" + + "EMATICAL BOLD SMALL HMATHEMATICAL BOLD SMALL IMATHEMATICAL BOLD SMALL JM" + + "ATHEMATICAL BOLD SMALL KMATHEMATICAL BOLD SMALL LMATHEMATICAL BOLD SMALL" + + " MMATHEMATICAL BOLD SMALL NMATHEMATICAL BOLD SMALL OMATHEMATICAL BOLD SM" + + "ALL PMATHEMATICAL BOLD SMALL QMATHEMATICAL BOLD SMALL RMATHEMATICAL BOLD") + ("" + + " SMALL SMATHEMATICAL BOLD SMALL TMATHEMATICAL BOLD SMALL UMATHEMATICAL B" + + "OLD SMALL VMATHEMATICAL BOLD SMALL WMATHEMATICAL BOLD SMALL XMATHEMATICA" + + "L BOLD SMALL YMATHEMATICAL BOLD SMALL ZMATHEMATICAL ITALIC CAPITAL AMATH" + + "EMATICAL ITALIC CAPITAL BMATHEMATICAL ITALIC CAPITAL CMATHEMATICAL ITALI" + + "C CAPITAL DMATHEMATICAL ITALIC CAPITAL EMATHEMATICAL ITALIC CAPITAL FMAT" + + "HEMATICAL ITALIC CAPITAL GMATHEMATICAL ITALIC CAPITAL HMATHEMATICAL ITAL" + + "IC CAPITAL IMATHEMATICAL ITALIC CAPITAL JMATHEMATICAL ITALIC CAPITAL KMA" + + "THEMATICAL ITALIC CAPITAL LMATHEMATICAL ITALIC CAPITAL MMATHEMATICAL ITA" + + "LIC CAPITAL NMATHEMATICAL ITALIC CAPITAL OMATHEMATICAL ITALIC CAPITAL PM" + + "ATHEMATICAL ITALIC CAPITAL QMATHEMATICAL ITALIC CAPITAL RMATHEMATICAL IT" + + "ALIC CAPITAL SMATHEMATICAL ITALIC CAPITAL TMATHEMATICAL ITALIC CAPITAL U" + + "MATHEMATICAL ITALIC CAPITAL VMATHEMATICAL ITALIC CAPITAL WMATHEMATICAL I" + + "TALIC CAPITAL XMATHEMATICAL ITALIC CAPITAL YMATHEMATICAL ITALIC CAPITAL " + + "ZMATHEMATICAL ITALIC SMALL AMATHEMATICAL ITALIC SMALL BMATHEMATICAL ITAL" + + "IC SMALL CMATHEMATICAL ITALIC SMALL DMATHEMATICAL ITALIC SMALL EMATHEMAT" + + "ICAL ITALIC SMALL FMATHEMATICAL ITALIC SMALL GMATHEMATICAL ITALIC SMALL " + + "IMATHEMATICAL ITALIC SMALL JMATHEMATICAL ITALIC SMALL KMATHEMATICAL ITAL" + + "IC SMALL LMATHEMATICAL ITALIC SMALL MMATHEMATICAL ITALIC SMALL NMATHEMAT" + + "ICAL ITALIC SMALL OMATHEMATICAL ITALIC SMALL PMATHEMATICAL ITALIC SMALL " + + "QMATHEMATICAL ITALIC SMALL RMATHEMATICAL ITALIC SMALL SMATHEMATICAL ITAL" + + "IC SMALL TMATHEMATICAL ITALIC SMALL UMATHEMATICAL ITALIC SMALL VMATHEMAT" + + "ICAL ITALIC SMALL WMATHEMATICAL ITALIC SMALL XMATHEMATICAL ITALIC SMALL " + + "YMATHEMATICAL ITALIC SMALL ZMATHEMATICAL BOLD ITALIC CAPITAL AMATHEMATIC" + + "AL BOLD ITALIC CAPITAL BMATHEMATICAL BOLD ITALIC CAPITAL CMATHEMATICAL B" + + "OLD ITALIC CAPITAL DMATHEMATICAL BOLD ITALIC CAPITAL EMATHEMATICAL BOLD " + + "ITALIC CAPITAL FMATHEMATICAL BOLD ITALIC CAPITAL GMATHEMATICAL BOLD ITAL" + + "IC CAPITAL HMATHEMATICAL BOLD ITALIC CAPITAL IMATHEMATICAL BOLD ITALIC C" + + "APITAL JMATHEMATICAL BOLD ITALIC CAPITAL KMATHEMATICAL BOLD ITALIC CAPIT" + + "AL LMATHEMATICAL BOLD ITALIC CAPITAL MMATHEMATICAL BOLD ITALIC CAPITAL N" + + "MATHEMATICAL BOLD ITALIC CAPITAL OMATHEMATICAL BOLD ITALIC CAPITAL PMATH" + + "EMATICAL BOLD ITALIC CAPITAL QMATHEMATICAL BOLD ITALIC CAPITAL RMATHEMAT" + + "ICAL BOLD ITALIC CAPITAL SMATHEMATICAL BOLD ITALIC CAPITAL TMATHEMATICAL" + + " BOLD ITALIC CAPITAL UMATHEMATICAL BOLD ITALIC CAPITAL VMATHEMATICAL BOL" + + "D ITALIC CAPITAL WMATHEMATICAL BOLD ITALIC CAPITAL XMATHEMATICAL BOLD IT" + + "ALIC CAPITAL YMATHEMATICAL BOLD ITALIC CAPITAL ZMATHEMATICAL BOLD ITALIC" + + " SMALL AMATHEMATICAL BOLD ITALIC SMALL BMATHEMATICAL BOLD ITALIC SMALL C" + + "MATHEMATICAL BOLD ITALIC SMALL DMATHEMATICAL BOLD ITALIC SMALL EMATHEMAT" + + "ICAL BOLD ITALIC SMALL FMATHEMATICAL BOLD ITALIC SMALL GMATHEMATICAL BOL" + + "D ITALIC SMALL HMATHEMATICAL BOLD ITALIC SMALL IMATHEMATICAL BOLD ITALIC" + + " SMALL JMATHEMATICAL BOLD ITALIC SMALL KMATHEMATICAL BOLD ITALIC SMALL L" + + "MATHEMATICAL BOLD ITALIC SMALL MMATHEMATICAL BOLD ITALIC SMALL NMATHEMAT" + + "ICAL BOLD ITALIC SMALL OMATHEMATICAL BOLD ITALIC SMALL PMATHEMATICAL BOL" + + "D ITALIC SMALL QMATHEMATICAL BOLD ITALIC SMALL RMATHEMATICAL BOLD ITALIC" + + " SMALL SMATHEMATICAL BOLD ITALIC SMALL TMATHEMATICAL BOLD ITALIC SMALL U" + + "MATHEMATICAL BOLD ITALIC SMALL VMATHEMATICAL BOLD ITALIC SMALL WMATHEMAT" + + "ICAL BOLD ITALIC SMALL XMATHEMATICAL BOLD ITALIC SMALL YMATHEMATICAL BOL" + + "D ITALIC SMALL ZMATHEMATICAL SCRIPT CAPITAL AMATHEMATICAL SCRIPT CAPITAL" + + " CMATHEMATICAL SCRIPT CAPITAL DMATHEMATICAL SCRIPT CAPITAL GMATHEMATICAL" + + " SCRIPT CAPITAL JMATHEMATICAL SCRIPT CAPITAL KMATHEMATICAL SCRIPT CAPITA" + + "L NMATHEMATICAL SCRIPT CAPITAL OMATHEMATICAL SCRIPT CAPITAL PMATHEMATICA" + + "L SCRIPT CAPITAL QMATHEMATICAL SCRIPT CAPITAL SMATHEMATICAL SCRIPT CAPIT" + + "AL TMATHEMATICAL SCRIPT CAPITAL UMATHEMATICAL SCRIPT CAPITAL VMATHEMATIC" + + "AL SCRIPT CAPITAL WMATHEMATICAL SCRIPT CAPITAL XMATHEMATICAL SCRIPT CAPI" + + "TAL YMATHEMATICAL SCRIPT CAPITAL ZMATHEMATICAL SCRIPT SMALL AMATHEMATICA" + + "L SCRIPT SMALL BMATHEMATICAL SCRIPT SMALL CMATHEMATICAL SCRIPT SMALL DMA" + + "THEMATICAL SCRIPT SMALL FMATHEMATICAL SCRIPT SMALL HMATHEMATICAL SCRIPT " + + "SMALL IMATHEMATICAL SCRIPT SMALL JMATHEMATICAL SCRIPT SMALL KMATHEMATICA" + + "L SCRIPT SMALL LMATHEMATICAL SCRIPT SMALL MMATHEMATICAL SCRIPT SMALL NMA" + + "THEMATICAL SCRIPT SMALL PMATHEMATICAL SCRIPT SMALL QMATHEMATICAL SCRIPT " + + "SMALL RMATHEMATICAL SCRIPT SMALL SMATHEMATICAL SCRIPT SMALL TMATHEMATICA" + + "L SCRIPT SMALL UMATHEMATICAL SCRIPT SMALL VMATHEMATICAL SCRIPT SMALL WMA" + + "THEMATICAL SCRIPT SMALL XMATHEMATICAL SCRIPT SMALL YMATHEMATICAL SCRIPT " + + "SMALL ZMATHEMATICAL BOLD SCRIPT CAPITAL AMATHEMATICAL BOLD SCRIPT CAPITA" + + "L BMATHEMATICAL BOLD SCRIPT CAPITAL CMATHEMATICAL BOLD SCRIPT CAPITAL DM") + ("" + + "ATHEMATICAL BOLD SCRIPT CAPITAL EMATHEMATICAL BOLD SCRIPT CAPITAL FMATHE" + + "MATICAL BOLD SCRIPT CAPITAL GMATHEMATICAL BOLD SCRIPT CAPITAL HMATHEMATI" + + "CAL BOLD SCRIPT CAPITAL IMATHEMATICAL BOLD SCRIPT CAPITAL JMATHEMATICAL " + + "BOLD SCRIPT CAPITAL KMATHEMATICAL BOLD SCRIPT CAPITAL LMATHEMATICAL BOLD" + + " SCRIPT CAPITAL MMATHEMATICAL BOLD SCRIPT CAPITAL NMATHEMATICAL BOLD SCR" + + "IPT CAPITAL OMATHEMATICAL BOLD SCRIPT CAPITAL PMATHEMATICAL BOLD SCRIPT " + + "CAPITAL QMATHEMATICAL BOLD SCRIPT CAPITAL RMATHEMATICAL BOLD SCRIPT CAPI" + + "TAL SMATHEMATICAL BOLD SCRIPT CAPITAL TMATHEMATICAL BOLD SCRIPT CAPITAL " + + "UMATHEMATICAL BOLD SCRIPT CAPITAL VMATHEMATICAL BOLD SCRIPT CAPITAL WMAT" + + "HEMATICAL BOLD SCRIPT CAPITAL XMATHEMATICAL BOLD SCRIPT CAPITAL YMATHEMA" + + "TICAL BOLD SCRIPT CAPITAL ZMATHEMATICAL BOLD SCRIPT SMALL AMATHEMATICAL " + + "BOLD SCRIPT SMALL BMATHEMATICAL BOLD SCRIPT SMALL CMATHEMATICAL BOLD SCR" + + "IPT SMALL DMATHEMATICAL BOLD SCRIPT SMALL EMATHEMATICAL BOLD SCRIPT SMAL" + + "L FMATHEMATICAL BOLD SCRIPT SMALL GMATHEMATICAL BOLD SCRIPT SMALL HMATHE" + + "MATICAL BOLD SCRIPT SMALL IMATHEMATICAL BOLD SCRIPT SMALL JMATHEMATICAL " + + "BOLD SCRIPT SMALL KMATHEMATICAL BOLD SCRIPT SMALL LMATHEMATICAL BOLD SCR" + + "IPT SMALL MMATHEMATICAL BOLD SCRIPT SMALL NMATHEMATICAL BOLD SCRIPT SMAL" + + "L OMATHEMATICAL BOLD SCRIPT SMALL PMATHEMATICAL BOLD SCRIPT SMALL QMATHE" + + "MATICAL BOLD SCRIPT SMALL RMATHEMATICAL BOLD SCRIPT SMALL SMATHEMATICAL " + + "BOLD SCRIPT SMALL TMATHEMATICAL BOLD SCRIPT SMALL UMATHEMATICAL BOLD SCR" + + "IPT SMALL VMATHEMATICAL BOLD SCRIPT SMALL WMATHEMATICAL BOLD SCRIPT SMAL" + + "L XMATHEMATICAL BOLD SCRIPT SMALL YMATHEMATICAL BOLD SCRIPT SMALL ZMATHE" + + "MATICAL FRAKTUR CAPITAL AMATHEMATICAL FRAKTUR CAPITAL BMATHEMATICAL FRAK" + + "TUR CAPITAL DMATHEMATICAL FRAKTUR CAPITAL EMATHEMATICAL FRAKTUR CAPITAL " + + "FMATHEMATICAL FRAKTUR CAPITAL GMATHEMATICAL FRAKTUR CAPITAL JMATHEMATICA" + + "L FRAKTUR CAPITAL KMATHEMATICAL FRAKTUR CAPITAL LMATHEMATICAL FRAKTUR CA" + + "PITAL MMATHEMATICAL FRAKTUR CAPITAL NMATHEMATICAL FRAKTUR CAPITAL OMATHE" + + "MATICAL FRAKTUR CAPITAL PMATHEMATICAL FRAKTUR CAPITAL QMATHEMATICAL FRAK" + + "TUR CAPITAL SMATHEMATICAL FRAKTUR CAPITAL TMATHEMATICAL FRAKTUR CAPITAL " + + "UMATHEMATICAL FRAKTUR CAPITAL VMATHEMATICAL FRAKTUR CAPITAL WMATHEMATICA" + + "L FRAKTUR CAPITAL XMATHEMATICAL FRAKTUR CAPITAL YMATHEMATICAL FRAKTUR SM" + + "ALL AMATHEMATICAL FRAKTUR SMALL BMATHEMATICAL FRAKTUR SMALL CMATHEMATICA" + + "L FRAKTUR SMALL DMATHEMATICAL FRAKTUR SMALL EMATHEMATICAL FRAKTUR SMALL " + + "FMATHEMATICAL FRAKTUR SMALL GMATHEMATICAL FRAKTUR SMALL HMATHEMATICAL FR" + + "AKTUR SMALL IMATHEMATICAL FRAKTUR SMALL JMATHEMATICAL FRAKTUR SMALL KMAT" + + "HEMATICAL FRAKTUR SMALL LMATHEMATICAL FRAKTUR SMALL MMATHEMATICAL FRAKTU" + + "R SMALL NMATHEMATICAL FRAKTUR SMALL OMATHEMATICAL FRAKTUR SMALL PMATHEMA" + + "TICAL FRAKTUR SMALL QMATHEMATICAL FRAKTUR SMALL RMATHEMATICAL FRAKTUR SM" + + "ALL SMATHEMATICAL FRAKTUR SMALL TMATHEMATICAL FRAKTUR SMALL UMATHEMATICA" + + "L FRAKTUR SMALL VMATHEMATICAL FRAKTUR SMALL WMATHEMATICAL FRAKTUR SMALL " + + "XMATHEMATICAL FRAKTUR SMALL YMATHEMATICAL FRAKTUR SMALL ZMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL AMATHEMATICAL DOUBLE-STRUCK CAPITAL BMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL DMATHEMATICAL DOUBLE-STRUCK CAPITAL EMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL FMATHEMATICAL DOUBLE-STRUCK CAPITAL GMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL IMATHEMATICAL DOUBLE-STRUCK CAPITAL JMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL KMATHEMATICAL DOUBLE-STRUCK CAPITAL LMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL MMATHEMATICAL DOUBLE-STRUCK CAPITAL OMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL SMATHEMATICAL DOUBLE-STRUCK CAPITAL TMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL UMATHEMATICAL DOUBLE-STRUCK CAPITAL VMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL WMATHEMATICAL DOUBLE-STRUCK CAPITAL XMATHEMATICAL DO" + + "UBLE-STRUCK CAPITAL YMATHEMATICAL DOUBLE-STRUCK SMALL AMATHEMATICAL DOUB" + + "LE-STRUCK SMALL BMATHEMATICAL DOUBLE-STRUCK SMALL CMATHEMATICAL DOUBLE-S" + + "TRUCK SMALL DMATHEMATICAL DOUBLE-STRUCK SMALL EMATHEMATICAL DOUBLE-STRUC" + + "K SMALL FMATHEMATICAL DOUBLE-STRUCK SMALL GMATHEMATICAL DOUBLE-STRUCK SM" + + "ALL HMATHEMATICAL DOUBLE-STRUCK SMALL IMATHEMATICAL DOUBLE-STRUCK SMALL " + + "JMATHEMATICAL DOUBLE-STRUCK SMALL KMATHEMATICAL DOUBLE-STRUCK SMALL LMAT" + + "HEMATICAL DOUBLE-STRUCK SMALL MMATHEMATICAL DOUBLE-STRUCK SMALL NMATHEMA" + + "TICAL DOUBLE-STRUCK SMALL OMATHEMATICAL DOUBLE-STRUCK SMALL PMATHEMATICA" + + "L DOUBLE-STRUCK SMALL QMATHEMATICAL DOUBLE-STRUCK SMALL RMATHEMATICAL DO" + + "UBLE-STRUCK SMALL SMATHEMATICAL DOUBLE-STRUCK SMALL TMATHEMATICAL DOUBLE" + + "-STRUCK SMALL UMATHEMATICAL DOUBLE-STRUCK SMALL VMATHEMATICAL DOUBLE-STR" + + "UCK SMALL WMATHEMATICAL DOUBLE-STRUCK SMALL XMATHEMATICAL DOUBLE-STRUCK " + + "SMALL YMATHEMATICAL DOUBLE-STRUCK SMALL ZMATHEMATICAL BOLD FRAKTUR CAPIT" + + "AL AMATHEMATICAL BOLD FRAKTUR CAPITAL BMATHEMATICAL BOLD FRAKTUR CAPITAL") + ("" + + " CMATHEMATICAL BOLD FRAKTUR CAPITAL DMATHEMATICAL BOLD FRAKTUR CAPITAL E" + + "MATHEMATICAL BOLD FRAKTUR CAPITAL FMATHEMATICAL BOLD FRAKTUR CAPITAL GMA" + + "THEMATICAL BOLD FRAKTUR CAPITAL HMATHEMATICAL BOLD FRAKTUR CAPITAL IMATH" + + "EMATICAL BOLD FRAKTUR CAPITAL JMATHEMATICAL BOLD FRAKTUR CAPITAL KMATHEM" + + "ATICAL BOLD FRAKTUR CAPITAL LMATHEMATICAL BOLD FRAKTUR CAPITAL MMATHEMAT" + + "ICAL BOLD FRAKTUR CAPITAL NMATHEMATICAL BOLD FRAKTUR CAPITAL OMATHEMATIC" + + "AL BOLD FRAKTUR CAPITAL PMATHEMATICAL BOLD FRAKTUR CAPITAL QMATHEMATICAL" + + " BOLD FRAKTUR CAPITAL RMATHEMATICAL BOLD FRAKTUR CAPITAL SMATHEMATICAL B" + + "OLD FRAKTUR CAPITAL TMATHEMATICAL BOLD FRAKTUR CAPITAL UMATHEMATICAL BOL" + + "D FRAKTUR CAPITAL VMATHEMATICAL BOLD FRAKTUR CAPITAL WMATHEMATICAL BOLD " + + "FRAKTUR CAPITAL XMATHEMATICAL BOLD FRAKTUR CAPITAL YMATHEMATICAL BOLD FR" + + "AKTUR CAPITAL ZMATHEMATICAL BOLD FRAKTUR SMALL AMATHEMATICAL BOLD FRAKTU" + + "R SMALL BMATHEMATICAL BOLD FRAKTUR SMALL CMATHEMATICAL BOLD FRAKTUR SMAL" + + "L DMATHEMATICAL BOLD FRAKTUR SMALL EMATHEMATICAL BOLD FRAKTUR SMALL FMAT" + + "HEMATICAL BOLD FRAKTUR SMALL GMATHEMATICAL BOLD FRAKTUR SMALL HMATHEMATI" + + "CAL BOLD FRAKTUR SMALL IMATHEMATICAL BOLD FRAKTUR SMALL JMATHEMATICAL BO" + + "LD FRAKTUR SMALL KMATHEMATICAL BOLD FRAKTUR SMALL LMATHEMATICAL BOLD FRA" + + "KTUR SMALL MMATHEMATICAL BOLD FRAKTUR SMALL NMATHEMATICAL BOLD FRAKTUR S" + + "MALL OMATHEMATICAL BOLD FRAKTUR SMALL PMATHEMATICAL BOLD FRAKTUR SMALL Q" + + "MATHEMATICAL BOLD FRAKTUR SMALL RMATHEMATICAL BOLD FRAKTUR SMALL SMATHEM" + + "ATICAL BOLD FRAKTUR SMALL TMATHEMATICAL BOLD FRAKTUR SMALL UMATHEMATICAL" + + " BOLD FRAKTUR SMALL VMATHEMATICAL BOLD FRAKTUR SMALL WMATHEMATICAL BOLD " + + "FRAKTUR SMALL XMATHEMATICAL BOLD FRAKTUR SMALL YMATHEMATICAL BOLD FRAKTU" + + "R SMALL ZMATHEMATICAL SANS-SERIF CAPITAL AMATHEMATICAL SANS-SERIF CAPITA" + + "L BMATHEMATICAL SANS-SERIF CAPITAL CMATHEMATICAL SANS-SERIF CAPITAL DMAT" + + "HEMATICAL SANS-SERIF CAPITAL EMATHEMATICAL SANS-SERIF CAPITAL FMATHEMATI" + + "CAL SANS-SERIF CAPITAL GMATHEMATICAL SANS-SERIF CAPITAL HMATHEMATICAL SA" + + "NS-SERIF CAPITAL IMATHEMATICAL SANS-SERIF CAPITAL JMATHEMATICAL SANS-SER" + + "IF CAPITAL KMATHEMATICAL SANS-SERIF CAPITAL LMATHEMATICAL SANS-SERIF CAP" + + "ITAL MMATHEMATICAL SANS-SERIF CAPITAL NMATHEMATICAL SANS-SERIF CAPITAL O" + + "MATHEMATICAL SANS-SERIF CAPITAL PMATHEMATICAL SANS-SERIF CAPITAL QMATHEM" + + "ATICAL SANS-SERIF CAPITAL RMATHEMATICAL SANS-SERIF CAPITAL SMATHEMATICAL" + + " SANS-SERIF CAPITAL TMATHEMATICAL SANS-SERIF CAPITAL UMATHEMATICAL SANS-" + + "SERIF CAPITAL VMATHEMATICAL SANS-SERIF CAPITAL WMATHEMATICAL SANS-SERIF " + + "CAPITAL XMATHEMATICAL SANS-SERIF CAPITAL YMATHEMATICAL SANS-SERIF CAPITA" + + "L ZMATHEMATICAL SANS-SERIF SMALL AMATHEMATICAL SANS-SERIF SMALL BMATHEMA" + + "TICAL SANS-SERIF SMALL CMATHEMATICAL SANS-SERIF SMALL DMATHEMATICAL SANS" + + "-SERIF SMALL EMATHEMATICAL SANS-SERIF SMALL FMATHEMATICAL SANS-SERIF SMA" + + "LL GMATHEMATICAL SANS-SERIF SMALL HMATHEMATICAL SANS-SERIF SMALL IMATHEM" + + "ATICAL SANS-SERIF SMALL JMATHEMATICAL SANS-SERIF SMALL KMATHEMATICAL SAN" + + "S-SERIF SMALL LMATHEMATICAL SANS-SERIF SMALL MMATHEMATICAL SANS-SERIF SM" + + "ALL NMATHEMATICAL SANS-SERIF SMALL OMATHEMATICAL SANS-SERIF SMALL PMATHE" + + "MATICAL SANS-SERIF SMALL QMATHEMATICAL SANS-SERIF SMALL RMATHEMATICAL SA" + + "NS-SERIF SMALL SMATHEMATICAL SANS-SERIF SMALL TMATHEMATICAL SANS-SERIF S" + + "MALL UMATHEMATICAL SANS-SERIF SMALL VMATHEMATICAL SANS-SERIF SMALL WMATH" + + "EMATICAL SANS-SERIF SMALL XMATHEMATICAL SANS-SERIF SMALL YMATHEMATICAL S" + + "ANS-SERIF SMALL ZMATHEMATICAL SANS-SERIF BOLD CAPITAL AMATHEMATICAL SANS" + + "-SERIF BOLD CAPITAL BMATHEMATICAL SANS-SERIF BOLD CAPITAL CMATHEMATICAL " + + "SANS-SERIF BOLD CAPITAL DMATHEMATICAL SANS-SERIF BOLD CAPITAL EMATHEMATI" + + "CAL SANS-SERIF BOLD CAPITAL FMATHEMATICAL SANS-SERIF BOLD CAPITAL GMATHE" + + "MATICAL SANS-SERIF BOLD CAPITAL HMATHEMATICAL SANS-SERIF BOLD CAPITAL IM" + + "ATHEMATICAL SANS-SERIF BOLD CAPITAL JMATHEMATICAL SANS-SERIF BOLD CAPITA" + + "L KMATHEMATICAL SANS-SERIF BOLD CAPITAL LMATHEMATICAL SANS-SERIF BOLD CA" + + "PITAL MMATHEMATICAL SANS-SERIF BOLD CAPITAL NMATHEMATICAL SANS-SERIF BOL" + + "D CAPITAL OMATHEMATICAL SANS-SERIF BOLD CAPITAL PMATHEMATICAL SANS-SERIF" + + " BOLD CAPITAL QMATHEMATICAL SANS-SERIF BOLD CAPITAL RMATHEMATICAL SANS-S" + + "ERIF BOLD CAPITAL SMATHEMATICAL SANS-SERIF BOLD CAPITAL TMATHEMATICAL SA" + + "NS-SERIF BOLD CAPITAL UMATHEMATICAL SANS-SERIF BOLD CAPITAL VMATHEMATICA" + + "L SANS-SERIF BOLD CAPITAL WMATHEMATICAL SANS-SERIF BOLD CAPITAL XMATHEMA" + + "TICAL SANS-SERIF BOLD CAPITAL YMATHEMATICAL SANS-SERIF BOLD CAPITAL ZMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL AMATHEMATICAL SANS-SERIF BOLD SMALL BMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL CMATHEMATICAL SANS-SERIF BOLD SMALL DMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL EMATHEMATICAL SANS-SERIF BOLD SMALL FMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL GMATHEMATICAL SANS-SERIF BOLD SMALL HMAT") + ("" + + "HEMATICAL SANS-SERIF BOLD SMALL IMATHEMATICAL SANS-SERIF BOLD SMALL JMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL KMATHEMATICAL SANS-SERIF BOLD SMALL LMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL MMATHEMATICAL SANS-SERIF BOLD SMALL NMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL OMATHEMATICAL SANS-SERIF BOLD SMALL PMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL QMATHEMATICAL SANS-SERIF BOLD SMALL RMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL SMATHEMATICAL SANS-SERIF BOLD SMALL TMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL UMATHEMATICAL SANS-SERIF BOLD SMALL VMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL WMATHEMATICAL SANS-SERIF BOLD SMALL XMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL YMATHEMATICAL SANS-SERIF BOLD SMALL ZMAT" + + "HEMATICAL SANS-SERIF ITALIC CAPITAL AMATHEMATICAL SANS-SERIF ITALIC CAPI" + + "TAL BMATHEMATICAL SANS-SERIF ITALIC CAPITAL CMATHEMATICAL SANS-SERIF ITA" + + "LIC CAPITAL DMATHEMATICAL SANS-SERIF ITALIC CAPITAL EMATHEMATICAL SANS-S" + + "ERIF ITALIC CAPITAL FMATHEMATICAL SANS-SERIF ITALIC CAPITAL GMATHEMATICA" + + "L SANS-SERIF ITALIC CAPITAL HMATHEMATICAL SANS-SERIF ITALIC CAPITAL IMAT" + + "HEMATICAL SANS-SERIF ITALIC CAPITAL JMATHEMATICAL SANS-SERIF ITALIC CAPI" + + "TAL KMATHEMATICAL SANS-SERIF ITALIC CAPITAL LMATHEMATICAL SANS-SERIF ITA" + + "LIC CAPITAL MMATHEMATICAL SANS-SERIF ITALIC CAPITAL NMATHEMATICAL SANS-S" + + "ERIF ITALIC CAPITAL OMATHEMATICAL SANS-SERIF ITALIC CAPITAL PMATHEMATICA" + + "L SANS-SERIF ITALIC CAPITAL QMATHEMATICAL SANS-SERIF ITALIC CAPITAL RMAT" + + "HEMATICAL SANS-SERIF ITALIC CAPITAL SMATHEMATICAL SANS-SERIF ITALIC CAPI" + + "TAL TMATHEMATICAL SANS-SERIF ITALIC CAPITAL UMATHEMATICAL SANS-SERIF ITA" + + "LIC CAPITAL VMATHEMATICAL SANS-SERIF ITALIC CAPITAL WMATHEMATICAL SANS-S" + + "ERIF ITALIC CAPITAL XMATHEMATICAL SANS-SERIF ITALIC CAPITAL YMATHEMATICA" + + "L SANS-SERIF ITALIC CAPITAL ZMATHEMATICAL SANS-SERIF ITALIC SMALL AMATHE" + + "MATICAL SANS-SERIF ITALIC SMALL BMATHEMATICAL SANS-SERIF ITALIC SMALL CM" + + "ATHEMATICAL SANS-SERIF ITALIC SMALL DMATHEMATICAL SANS-SERIF ITALIC SMAL" + + "L EMATHEMATICAL SANS-SERIF ITALIC SMALL FMATHEMATICAL SANS-SERIF ITALIC " + + "SMALL GMATHEMATICAL SANS-SERIF ITALIC SMALL HMATHEMATICAL SANS-SERIF ITA" + + "LIC SMALL IMATHEMATICAL SANS-SERIF ITALIC SMALL JMATHEMATICAL SANS-SERIF" + + " ITALIC SMALL KMATHEMATICAL SANS-SERIF ITALIC SMALL LMATHEMATICAL SANS-S" + + "ERIF ITALIC SMALL MMATHEMATICAL SANS-SERIF ITALIC SMALL NMATHEMATICAL SA" + + "NS-SERIF ITALIC SMALL OMATHEMATICAL SANS-SERIF ITALIC SMALL PMATHEMATICA" + + "L SANS-SERIF ITALIC SMALL QMATHEMATICAL SANS-SERIF ITALIC SMALL RMATHEMA" + + "TICAL SANS-SERIF ITALIC SMALL SMATHEMATICAL SANS-SERIF ITALIC SMALL TMAT" + + "HEMATICAL SANS-SERIF ITALIC SMALL UMATHEMATICAL SANS-SERIF ITALIC SMALL " + + "VMATHEMATICAL SANS-SERIF ITALIC SMALL WMATHEMATICAL SANS-SERIF ITALIC SM" + + "ALL XMATHEMATICAL SANS-SERIF ITALIC SMALL YMATHEMATICAL SANS-SERIF ITALI" + + "C SMALL ZMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL AMATHEMATICAL SANS-" + + "SERIF BOLD ITALIC CAPITAL BMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C" + + "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DMATHEMATICAL SANS-SERIF BOL" + + "D ITALIC CAPITAL EMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL FMATHEMATI" + + "CAL SANS-SERIF BOLD ITALIC CAPITAL GMATHEMATICAL SANS-SERIF BOLD ITALIC " + + "CAPITAL HMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IMATHEMATICAL SANS-" + + "SERIF BOLD ITALIC CAPITAL JMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K" + + "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LMATHEMATICAL SANS-SERIF BOL" + + "D ITALIC CAPITAL MMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NMATHEMATI" + + "CAL SANS-SERIF BOLD ITALIC CAPITAL OMATHEMATICAL SANS-SERIF BOLD ITALIC " + + "CAPITAL PMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL QMATHEMATICAL SANS-" + + "SERIF BOLD ITALIC CAPITAL RMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S" + + "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TMATHEMATICAL SANS-SERIF BOL" + + "D ITALIC CAPITAL UMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL VMATHEMATI" + + "CAL SANS-SERIF BOLD ITALIC CAPITAL WMATHEMATICAL SANS-SERIF BOLD ITALIC " + + "CAPITAL XMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL YMATHEMATICAL SANS-" + + "SERIF BOLD ITALIC CAPITAL ZMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL AMA" + + "THEMATICAL SANS-SERIF BOLD ITALIC SMALL BMATHEMATICAL SANS-SERIF BOLD IT" + + "ALIC SMALL CMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DMATHEMATICAL SANS" + + "-SERIF BOLD ITALIC SMALL EMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FMAT" + + "HEMATICAL SANS-SERIF BOLD ITALIC SMALL GMATHEMATICAL SANS-SERIF BOLD ITA" + + "LIC SMALL HMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IMATHEMATICAL SANS-" + + "SERIF BOLD ITALIC SMALL JMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KMATH" + + "EMATICAL SANS-SERIF BOLD ITALIC SMALL LMATHEMATICAL SANS-SERIF BOLD ITAL" + + "IC SMALL MMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NMATHEMATICAL SANS-S" + + "ERIF BOLD ITALIC SMALL OMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PMATHE" + + "MATICAL SANS-SERIF BOLD ITALIC SMALL QMATHEMATICAL SANS-SERIF BOLD ITALI") + ("" + + "C SMALL RMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SMATHEMATICAL SANS-SE" + + "RIF BOLD ITALIC SMALL TMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UMATHEM" + + "ATICAL SANS-SERIF BOLD ITALIC SMALL VMATHEMATICAL SANS-SERIF BOLD ITALIC" + + " SMALL WMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XMATHEMATICAL SANS-SER" + + "IF BOLD ITALIC SMALL YMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZMATHEMA" + + "TICAL MONOSPACE CAPITAL AMATHEMATICAL MONOSPACE CAPITAL BMATHEMATICAL MO" + + "NOSPACE CAPITAL CMATHEMATICAL MONOSPACE CAPITAL DMATHEMATICAL MONOSPACE " + + "CAPITAL EMATHEMATICAL MONOSPACE CAPITAL FMATHEMATICAL MONOSPACE CAPITAL " + + "GMATHEMATICAL MONOSPACE CAPITAL HMATHEMATICAL MONOSPACE CAPITAL IMATHEMA" + + "TICAL MONOSPACE CAPITAL JMATHEMATICAL MONOSPACE CAPITAL KMATHEMATICAL MO" + + "NOSPACE CAPITAL LMATHEMATICAL MONOSPACE CAPITAL MMATHEMATICAL MONOSPACE " + + "CAPITAL NMATHEMATICAL MONOSPACE CAPITAL OMATHEMATICAL MONOSPACE CAPITAL " + + "PMATHEMATICAL MONOSPACE CAPITAL QMATHEMATICAL MONOSPACE CAPITAL RMATHEMA" + + "TICAL MONOSPACE CAPITAL SMATHEMATICAL MONOSPACE CAPITAL TMATHEMATICAL MO" + + "NOSPACE CAPITAL UMATHEMATICAL MONOSPACE CAPITAL VMATHEMATICAL MONOSPACE " + + "CAPITAL WMATHEMATICAL MONOSPACE CAPITAL XMATHEMATICAL MONOSPACE CAPITAL " + + "YMATHEMATICAL MONOSPACE CAPITAL ZMATHEMATICAL MONOSPACE SMALL AMATHEMATI" + + "CAL MONOSPACE SMALL BMATHEMATICAL MONOSPACE SMALL CMATHEMATICAL MONOSPAC" + + "E SMALL DMATHEMATICAL MONOSPACE SMALL EMATHEMATICAL MONOSPACE SMALL FMAT" + + "HEMATICAL MONOSPACE SMALL GMATHEMATICAL MONOSPACE SMALL HMATHEMATICAL MO" + + "NOSPACE SMALL IMATHEMATICAL MONOSPACE SMALL JMATHEMATICAL MONOSPACE SMAL" + + "L KMATHEMATICAL MONOSPACE SMALL LMATHEMATICAL MONOSPACE SMALL MMATHEMATI" + + "CAL MONOSPACE SMALL NMATHEMATICAL MONOSPACE SMALL OMATHEMATICAL MONOSPAC" + + "E SMALL PMATHEMATICAL MONOSPACE SMALL QMATHEMATICAL MONOSPACE SMALL RMAT" + + "HEMATICAL MONOSPACE SMALL SMATHEMATICAL MONOSPACE SMALL TMATHEMATICAL MO" + + "NOSPACE SMALL UMATHEMATICAL MONOSPACE SMALL VMATHEMATICAL MONOSPACE SMAL" + + "L WMATHEMATICAL MONOSPACE SMALL XMATHEMATICAL MONOSPACE SMALL YMATHEMATI" + + "CAL MONOSPACE SMALL ZMATHEMATICAL ITALIC SMALL DOTLESS IMATHEMATICAL ITA" + + "LIC SMALL DOTLESS JMATHEMATICAL BOLD CAPITAL ALPHAMATHEMATICAL BOLD CAPI" + + "TAL BETAMATHEMATICAL BOLD CAPITAL GAMMAMATHEMATICAL BOLD CAPITAL DELTAMA" + + "THEMATICAL BOLD CAPITAL EPSILONMATHEMATICAL BOLD CAPITAL ZETAMATHEMATICA" + + "L BOLD CAPITAL ETAMATHEMATICAL BOLD CAPITAL THETAMATHEMATICAL BOLD CAPIT" + + "AL IOTAMATHEMATICAL BOLD CAPITAL KAPPAMATHEMATICAL BOLD CAPITAL LAMDAMAT" + + "HEMATICAL BOLD CAPITAL MUMATHEMATICAL BOLD CAPITAL NUMATHEMATICAL BOLD C" + + "APITAL XIMATHEMATICAL BOLD CAPITAL OMICRONMATHEMATICAL BOLD CAPITAL PIMA" + + "THEMATICAL BOLD CAPITAL RHOMATHEMATICAL BOLD CAPITAL THETA SYMBOLMATHEMA" + + "TICAL BOLD CAPITAL SIGMAMATHEMATICAL BOLD CAPITAL TAUMATHEMATICAL BOLD C" + + "APITAL UPSILONMATHEMATICAL BOLD CAPITAL PHIMATHEMATICAL BOLD CAPITAL CHI" + + "MATHEMATICAL BOLD CAPITAL PSIMATHEMATICAL BOLD CAPITAL OMEGAMATHEMATICAL" + + " BOLD NABLAMATHEMATICAL BOLD SMALL ALPHAMATHEMATICAL BOLD SMALL BETAMATH" + + "EMATICAL BOLD SMALL GAMMAMATHEMATICAL BOLD SMALL DELTAMATHEMATICAL BOLD " + + "SMALL EPSILONMATHEMATICAL BOLD SMALL ZETAMATHEMATICAL BOLD SMALL ETAMATH" + + "EMATICAL BOLD SMALL THETAMATHEMATICAL BOLD SMALL IOTAMATHEMATICAL BOLD S" + + "MALL KAPPAMATHEMATICAL BOLD SMALL LAMDAMATHEMATICAL BOLD SMALL MUMATHEMA" + + "TICAL BOLD SMALL NUMATHEMATICAL BOLD SMALL XIMATHEMATICAL BOLD SMALL OMI" + + "CRONMATHEMATICAL BOLD SMALL PIMATHEMATICAL BOLD SMALL RHOMATHEMATICAL BO" + + "LD SMALL FINAL SIGMAMATHEMATICAL BOLD SMALL SIGMAMATHEMATICAL BOLD SMALL" + + " TAUMATHEMATICAL BOLD SMALL UPSILONMATHEMATICAL BOLD SMALL PHIMATHEMATIC" + + "AL BOLD SMALL CHIMATHEMATICAL BOLD SMALL PSIMATHEMATICAL BOLD SMALL OMEG" + + "AMATHEMATICAL BOLD PARTIAL DIFFERENTIALMATHEMATICAL BOLD EPSILON SYMBOLM" + + "ATHEMATICAL BOLD THETA SYMBOLMATHEMATICAL BOLD KAPPA SYMBOLMATHEMATICAL " + + "BOLD PHI SYMBOLMATHEMATICAL BOLD RHO SYMBOLMATHEMATICAL BOLD PI SYMBOLMA" + + "THEMATICAL ITALIC CAPITAL ALPHAMATHEMATICAL ITALIC CAPITAL BETAMATHEMATI" + + "CAL ITALIC CAPITAL GAMMAMATHEMATICAL ITALIC CAPITAL DELTAMATHEMATICAL IT" + + "ALIC CAPITAL EPSILONMATHEMATICAL ITALIC CAPITAL ZETAMATHEMATICAL ITALIC " + + "CAPITAL ETAMATHEMATICAL ITALIC CAPITAL THETAMATHEMATICAL ITALIC CAPITAL " + + "IOTAMATHEMATICAL ITALIC CAPITAL KAPPAMATHEMATICAL ITALIC CAPITAL LAMDAMA" + + "THEMATICAL ITALIC CAPITAL MUMATHEMATICAL ITALIC CAPITAL NUMATHEMATICAL I" + + "TALIC CAPITAL XIMATHEMATICAL ITALIC CAPITAL OMICRONMATHEMATICAL ITALIC C" + + "APITAL PIMATHEMATICAL ITALIC CAPITAL RHOMATHEMATICAL ITALIC CAPITAL THET" + + "A SYMBOLMATHEMATICAL ITALIC CAPITAL SIGMAMATHEMATICAL ITALIC CAPITAL TAU" + + "MATHEMATICAL ITALIC CAPITAL UPSILONMATHEMATICAL ITALIC CAPITAL PHIMATHEM" + + "ATICAL ITALIC CAPITAL CHIMATHEMATICAL ITALIC CAPITAL PSIMATHEMATICAL ITA" + + "LIC CAPITAL OMEGAMATHEMATICAL ITALIC NABLAMATHEMATICAL ITALIC SMALL ALPH") + ("" + + "AMATHEMATICAL ITALIC SMALL BETAMATHEMATICAL ITALIC SMALL GAMMAMATHEMATIC" + + "AL ITALIC SMALL DELTAMATHEMATICAL ITALIC SMALL EPSILONMATHEMATICAL ITALI" + + "C SMALL ZETAMATHEMATICAL ITALIC SMALL ETAMATHEMATICAL ITALIC SMALL THETA" + + "MATHEMATICAL ITALIC SMALL IOTAMATHEMATICAL ITALIC SMALL KAPPAMATHEMATICA" + + "L ITALIC SMALL LAMDAMATHEMATICAL ITALIC SMALL MUMATHEMATICAL ITALIC SMAL" + + "L NUMATHEMATICAL ITALIC SMALL XIMATHEMATICAL ITALIC SMALL OMICRONMATHEMA" + + "TICAL ITALIC SMALL PIMATHEMATICAL ITALIC SMALL RHOMATHEMATICAL ITALIC SM" + + "ALL FINAL SIGMAMATHEMATICAL ITALIC SMALL SIGMAMATHEMATICAL ITALIC SMALL " + + "TAUMATHEMATICAL ITALIC SMALL UPSILONMATHEMATICAL ITALIC SMALL PHIMATHEMA" + + "TICAL ITALIC SMALL CHIMATHEMATICAL ITALIC SMALL PSIMATHEMATICAL ITALIC S" + + "MALL OMEGAMATHEMATICAL ITALIC PARTIAL DIFFERENTIALMATHEMATICAL ITALIC EP" + + "SILON SYMBOLMATHEMATICAL ITALIC THETA SYMBOLMATHEMATICAL ITALIC KAPPA SY" + + "MBOLMATHEMATICAL ITALIC PHI SYMBOLMATHEMATICAL ITALIC RHO SYMBOLMATHEMAT" + + "ICAL ITALIC PI SYMBOLMATHEMATICAL BOLD ITALIC CAPITAL ALPHAMATHEMATICAL " + + "BOLD ITALIC CAPITAL BETAMATHEMATICAL BOLD ITALIC CAPITAL GAMMAMATHEMATIC" + + "AL BOLD ITALIC CAPITAL DELTAMATHEMATICAL BOLD ITALIC CAPITAL EPSILONMATH" + + "EMATICAL BOLD ITALIC CAPITAL ZETAMATHEMATICAL BOLD ITALIC CAPITAL ETAMAT" + + "HEMATICAL BOLD ITALIC CAPITAL THETAMATHEMATICAL BOLD ITALIC CAPITAL IOTA" + + "MATHEMATICAL BOLD ITALIC CAPITAL KAPPAMATHEMATICAL BOLD ITALIC CAPITAL L" + + "AMDAMATHEMATICAL BOLD ITALIC CAPITAL MUMATHEMATICAL BOLD ITALIC CAPITAL " + + "NUMATHEMATICAL BOLD ITALIC CAPITAL XIMATHEMATICAL BOLD ITALIC CAPITAL OM" + + "ICRONMATHEMATICAL BOLD ITALIC CAPITAL PIMATHEMATICAL BOLD ITALIC CAPITAL" + + " RHOMATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOLMATHEMATICAL BOLD ITALI" + + "C CAPITAL SIGMAMATHEMATICAL BOLD ITALIC CAPITAL TAUMATHEMATICAL BOLD ITA" + + "LIC CAPITAL UPSILONMATHEMATICAL BOLD ITALIC CAPITAL PHIMATHEMATICAL BOLD" + + " ITALIC CAPITAL CHIMATHEMATICAL BOLD ITALIC CAPITAL PSIMATHEMATICAL BOLD" + + " ITALIC CAPITAL OMEGAMATHEMATICAL BOLD ITALIC NABLAMATHEMATICAL BOLD ITA" + + "LIC SMALL ALPHAMATHEMATICAL BOLD ITALIC SMALL BETAMATHEMATICAL BOLD ITAL" + + "IC SMALL GAMMAMATHEMATICAL BOLD ITALIC SMALL DELTAMATHEMATICAL BOLD ITAL" + + "IC SMALL EPSILONMATHEMATICAL BOLD ITALIC SMALL ZETAMATHEMATICAL BOLD ITA" + + "LIC SMALL ETAMATHEMATICAL BOLD ITALIC SMALL THETAMATHEMATICAL BOLD ITALI" + + "C SMALL IOTAMATHEMATICAL BOLD ITALIC SMALL KAPPAMATHEMATICAL BOLD ITALIC" + + " SMALL LAMDAMATHEMATICAL BOLD ITALIC SMALL MUMATHEMATICAL BOLD ITALIC SM" + + "ALL NUMATHEMATICAL BOLD ITALIC SMALL XIMATHEMATICAL BOLD ITALIC SMALL OM" + + "ICRONMATHEMATICAL BOLD ITALIC SMALL PIMATHEMATICAL BOLD ITALIC SMALL RHO" + + "MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMAMATHEMATICAL BOLD ITALIC SMALL" + + " SIGMAMATHEMATICAL BOLD ITALIC SMALL TAUMATHEMATICAL BOLD ITALIC SMALL U" + + "PSILONMATHEMATICAL BOLD ITALIC SMALL PHIMATHEMATICAL BOLD ITALIC SMALL C" + + "HIMATHEMATICAL BOLD ITALIC SMALL PSIMATHEMATICAL BOLD ITALIC SMALL OMEGA" + + "MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIALMATHEMATICAL BOLD ITALIC EP" + + "SILON SYMBOLMATHEMATICAL BOLD ITALIC THETA SYMBOLMATHEMATICAL BOLD ITALI" + + "C KAPPA SYMBOLMATHEMATICAL BOLD ITALIC PHI SYMBOLMATHEMATICAL BOLD ITALI" + + "C RHO SYMBOLMATHEMATICAL BOLD ITALIC PI SYMBOLMATHEMATICAL SANS-SERIF BO" + + "LD CAPITAL ALPHAMATHEMATICAL SANS-SERIF BOLD CAPITAL BETAMATHEMATICAL SA" + + "NS-SERIF BOLD CAPITAL GAMMAMATHEMATICAL SANS-SERIF BOLD CAPITAL DELTAMAT" + + "HEMATICAL SANS-SERIF BOLD CAPITAL EPSILONMATHEMATICAL SANS-SERIF BOLD CA" + + "PITAL ZETAMATHEMATICAL SANS-SERIF BOLD CAPITAL ETAMATHEMATICAL SANS-SERI" + + "F BOLD CAPITAL THETAMATHEMATICAL SANS-SERIF BOLD CAPITAL IOTAMATHEMATICA" + + "L SANS-SERIF BOLD CAPITAL KAPPAMATHEMATICAL SANS-SERIF BOLD CAPITAL LAMD" + + "AMATHEMATICAL SANS-SERIF BOLD CAPITAL MUMATHEMATICAL SANS-SERIF BOLD CAP" + + "ITAL NUMATHEMATICAL SANS-SERIF BOLD CAPITAL XIMATHEMATICAL SANS-SERIF BO" + + "LD CAPITAL OMICRONMATHEMATICAL SANS-SERIF BOLD CAPITAL PIMATHEMATICAL SA" + + "NS-SERIF BOLD CAPITAL RHOMATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMB" + + "OLMATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMAMATHEMATICAL SANS-SERIF BOLD" + + " CAPITAL TAUMATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILONMATHEMATICAL SAN" + + "S-SERIF BOLD CAPITAL PHIMATHEMATICAL SANS-SERIF BOLD CAPITAL CHIMATHEMAT" + + "ICAL SANS-SERIF BOLD CAPITAL PSIMATHEMATICAL SANS-SERIF BOLD CAPITAL OME" + + "GAMATHEMATICAL SANS-SERIF BOLD NABLAMATHEMATICAL SANS-SERIF BOLD SMALL A" + + "LPHAMATHEMATICAL SANS-SERIF BOLD SMALL BETAMATHEMATICAL SANS-SERIF BOLD " + + "SMALL GAMMAMATHEMATICAL SANS-SERIF BOLD SMALL DELTAMATHEMATICAL SANS-SER" + + "IF BOLD SMALL EPSILONMATHEMATICAL SANS-SERIF BOLD SMALL ZETAMATHEMATICAL" + + " SANS-SERIF BOLD SMALL ETAMATHEMATICAL SANS-SERIF BOLD SMALL THETAMATHEM" + + "ATICAL SANS-SERIF BOLD SMALL IOTAMATHEMATICAL SANS-SERIF BOLD SMALL KAPP" + + "AMATHEMATICAL SANS-SERIF BOLD SMALL LAMDAMATHEMATICAL SANS-SERIF BOLD SM") + ("" + + "ALL MUMATHEMATICAL SANS-SERIF BOLD SMALL NUMATHEMATICAL SANS-SERIF BOLD " + + "SMALL XIMATHEMATICAL SANS-SERIF BOLD SMALL OMICRONMATHEMATICAL SANS-SERI" + + "F BOLD SMALL PIMATHEMATICAL SANS-SERIF BOLD SMALL RHOMATHEMATICAL SANS-S" + + "ERIF BOLD SMALL FINAL SIGMAMATHEMATICAL SANS-SERIF BOLD SMALL SIGMAMATHE" + + "MATICAL SANS-SERIF BOLD SMALL TAUMATHEMATICAL SANS-SERIF BOLD SMALL UPSI" + + "LONMATHEMATICAL SANS-SERIF BOLD SMALL PHIMATHEMATICAL SANS-SERIF BOLD SM" + + "ALL CHIMATHEMATICAL SANS-SERIF BOLD SMALL PSIMATHEMATICAL SANS-SERIF BOL" + + "D SMALL OMEGAMATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIALMATHEMATIC" + + "AL SANS-SERIF BOLD EPSILON SYMBOLMATHEMATICAL SANS-SERIF BOLD THETA SYMB" + + "OLMATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOLMATHEMATICAL SANS-SERIF BOLD " + + "PHI SYMBOLMATHEMATICAL SANS-SERIF BOLD RHO SYMBOLMATHEMATICAL SANS-SERIF" + + " BOLD PI SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHAMATHEMAT" + + "ICAL SANS-SERIF BOLD ITALIC CAPITAL BETAMATHEMATICAL SANS-SERIF BOLD ITA" + + "LIC CAPITAL GAMMAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTAMATHEM" + + "ATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILONMATHEMATICAL SANS-SERIF BOL" + + "D ITALIC CAPITAL ZETAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETAMATH" + + "EMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETAMATHEMATICAL SANS-SERIF BOL" + + "D ITALIC CAPITAL IOTAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPAMA" + + "THEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDAMATHEMATICAL SANS-SERIF B" + + "OLD ITALIC CAPITAL MUMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NUMATHE" + + "MATICAL SANS-SERIF BOLD ITALIC CAPITAL XIMATHEMATICAL SANS-SERIF BOLD IT" + + "ALIC CAPITAL OMICRONMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PIMATHEM" + + "ATICAL SANS-SERIF BOLD ITALIC CAPITAL RHOMATHEMATICAL SANS-SERIF BOLD IT" + + "ALIC CAPITAL THETA SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIG" + + "MAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAUMATHEMATICAL SANS-SERIF" + + " BOLD ITALIC CAPITAL UPSILONMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL " + + "PHIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHIMATHEMATICAL SANS-SERI" + + "F BOLD ITALIC CAPITAL PSIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OME" + + "GAMATHEMATICAL SANS-SERIF BOLD ITALIC NABLAMATHEMATICAL SANS-SERIF BOLD " + + "ITALIC SMALL ALPHAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETAMATHEMAT" + + "ICAL SANS-SERIF BOLD ITALIC SMALL GAMMAMATHEMATICAL SANS-SERIF BOLD ITAL" + + "IC SMALL DELTAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILONMATHEMATI" + + "CAL SANS-SERIF BOLD ITALIC SMALL ZETAMATHEMATICAL SANS-SERIF BOLD ITALIC" + + " SMALL ETAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETAMATHEMATICAL SA" + + "NS-SERIF BOLD ITALIC SMALL IOTAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL" + + " KAPPAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDAMATHEMATICAL SANS-S" + + "ERIF BOLD ITALIC SMALL MUMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NUMAT" + + "HEMATICAL SANS-SERIF BOLD ITALIC SMALL XIMATHEMATICAL SANS-SERIF BOLD IT" + + "ALIC SMALL OMICRONMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PIMATHEMATIC" + + "AL SANS-SERIF BOLD ITALIC SMALL RHOMATHEMATICAL SANS-SERIF BOLD ITALIC S" + + "MALL FINAL SIGMAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMAMATHEMATI" + + "CAL SANS-SERIF BOLD ITALIC SMALL TAUMATHEMATICAL SANS-SERIF BOLD ITALIC " + + "SMALL UPSILONMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHIMATHEMATICAL S" + + "ANS-SERIF BOLD ITALIC SMALL CHIMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL" + + " PSIMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGAMATHEMATICAL SANS-SER" + + "IF BOLD ITALIC PARTIAL DIFFERENTIALMATHEMATICAL SANS-SERIF BOLD ITALIC E" + + "PSILON SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOLMATHEMATICA" + + "L SANS-SERIF BOLD ITALIC KAPPA SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC" + + " PHI SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOLMATHEMATICAL SA" + + "NS-SERIF BOLD ITALIC PI SYMBOLMATHEMATICAL BOLD CAPITAL DIGAMMAMATHEMATI" + + "CAL BOLD SMALL DIGAMMAMATHEMATICAL BOLD DIGIT ZEROMATHEMATICAL BOLD DIGI" + + "T ONEMATHEMATICAL BOLD DIGIT TWOMATHEMATICAL BOLD DIGIT THREEMATHEMATICA" + + "L BOLD DIGIT FOURMATHEMATICAL BOLD DIGIT FIVEMATHEMATICAL BOLD DIGIT SIX" + + "MATHEMATICAL BOLD DIGIT SEVENMATHEMATICAL BOLD DIGIT EIGHTMATHEMATICAL B" + + "OLD DIGIT NINEMATHEMATICAL DOUBLE-STRUCK DIGIT ZEROMATHEMATICAL DOUBLE-S" + + "TRUCK DIGIT ONEMATHEMATICAL DOUBLE-STRUCK DIGIT TWOMATHEMATICAL DOUBLE-S" + + "TRUCK DIGIT THREEMATHEMATICAL DOUBLE-STRUCK DIGIT FOURMATHEMATICAL DOUBL" + + "E-STRUCK DIGIT FIVEMATHEMATICAL DOUBLE-STRUCK DIGIT SIXMATHEMATICAL DOUB" + + "LE-STRUCK DIGIT SEVENMATHEMATICAL DOUBLE-STRUCK DIGIT EIGHTMATHEMATICAL " + + "DOUBLE-STRUCK DIGIT NINEMATHEMATICAL SANS-SERIF DIGIT ZEROMATHEMATICAL S" + + "ANS-SERIF DIGIT ONEMATHEMATICAL SANS-SERIF DIGIT TWOMATHEMATICAL SANS-SE" + + "RIF DIGIT THREEMATHEMATICAL SANS-SERIF DIGIT FOURMATHEMATICAL SANS-SERIF" + + " DIGIT FIVEMATHEMATICAL SANS-SERIF DIGIT SIXMATHEMATICAL SANS-SERIF DIGI" + + "T SEVENMATHEMATICAL SANS-SERIF DIGIT EIGHTMATHEMATICAL SANS-SERIF DIGIT ") + ("" + + "NINEMATHEMATICAL SANS-SERIF BOLD DIGIT ZEROMATHEMATICAL SANS-SERIF BOLD " + + "DIGIT ONEMATHEMATICAL SANS-SERIF BOLD DIGIT TWOMATHEMATICAL SANS-SERIF B" + + "OLD DIGIT THREEMATHEMATICAL SANS-SERIF BOLD DIGIT FOURMATHEMATICAL SANS-" + + "SERIF BOLD DIGIT FIVEMATHEMATICAL SANS-SERIF BOLD DIGIT SIXMATHEMATICAL " + + "SANS-SERIF BOLD DIGIT SEVENMATHEMATICAL SANS-SERIF BOLD DIGIT EIGHTMATHE" + + "MATICAL SANS-SERIF BOLD DIGIT NINEMATHEMATICAL MONOSPACE DIGIT ZEROMATHE" + + "MATICAL MONOSPACE DIGIT ONEMATHEMATICAL MONOSPACE DIGIT TWOMATHEMATICAL " + + "MONOSPACE DIGIT THREEMATHEMATICAL MONOSPACE DIGIT FOURMATHEMATICAL MONOS" + + "PACE DIGIT FIVEMATHEMATICAL MONOSPACE DIGIT SIXMATHEMATICAL MONOSPACE DI" + + "GIT SEVENMATHEMATICAL MONOSPACE DIGIT EIGHTMATHEMATICAL MONOSPACE DIGIT " + + "NINESIGNWRITING HAND-FIST INDEXSIGNWRITING HAND-CIRCLE INDEXSIGNWRITING " + + "HAND-CUP INDEXSIGNWRITING HAND-OVAL INDEXSIGNWRITING HAND-HINGE INDEXSIG" + + "NWRITING HAND-ANGLE INDEXSIGNWRITING HAND-FIST INDEX BENTSIGNWRITING HAN" + + "D-CIRCLE INDEX BENTSIGNWRITING HAND-FIST THUMB UNDER INDEX BENTSIGNWRITI" + + "NG HAND-FIST INDEX RAISED KNUCKLESIGNWRITING HAND-FIST INDEX CUPPEDSIGNW" + + "RITING HAND-FIST INDEX HINGEDSIGNWRITING HAND-FIST INDEX HINGED LOWSIGNW" + + "RITING HAND-CIRCLE INDEX HINGESIGNWRITING HAND-FIST INDEX MIDDLESIGNWRIT" + + "ING HAND-CIRCLE INDEX MIDDLESIGNWRITING HAND-FIST INDEX MIDDLE BENTSIGNW" + + "RITING HAND-FIST INDEX MIDDLE RAISED KNUCKLESSIGNWRITING HAND-FIST INDEX" + + " MIDDLE HINGEDSIGNWRITING HAND-FIST INDEX UP MIDDLE HINGEDSIGNWRITING HA" + + "ND-FIST INDEX HINGED MIDDLE UPSIGNWRITING HAND-FIST INDEX MIDDLE CONJOIN" + + "EDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENTSIGNWRITING HAN" + + "D-FIST INDEX MIDDLE CONJOINED MIDDLE BENTSIGNWRITING HAND-FIST INDEX MID" + + "DLE CONJOINED CUPPEDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGEDS" + + "IGNWRITING HAND-FIST INDEX MIDDLE CROSSEDSIGNWRITING HAND-CIRCLE INDEX M" + + "IDDLE CROSSEDSIGNWRITING HAND-FIST MIDDLE BENT OVER INDEXSIGNWRITING HAN" + + "D-FIST INDEX BENT OVER MIDDLESIGNWRITING HAND-FIST INDEX MIDDLE THUMBSIG" + + "NWRITING HAND-CIRCLE INDEX MIDDLE THUMBSIGNWRITING HAND-FIST INDEX MIDDL" + + "E STRAIGHT THUMB BENTSIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAI" + + "GHTSIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENTSIGNWRITING HAND-FIST IN" + + "DEX MIDDLE HINGED SPREAD THUMB SIDESIGNWRITING HAND-FIST INDEX UP MIDDLE" + + " HINGED THUMB SIDESIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CON" + + "JOINEDSIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDESIGNWRITING" + + " HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARDSIGNWRITING HAND-FIST IND" + + "EX MIDDLE THUMB CUPPEDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLEDSI" + + "GNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKEDSIGNWRITING HAND-FIST INDEX" + + " MIDDLE THUMB HINGEDSIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STR" + + "AIGHTSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDESIGNWRITING " + + "HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINEDSIGNWRITING HAND-FI" + + "ST INDEX MIDDLE CONJOINED THUMB SIDE BENTSIGNWRITING HAND-FIST MIDDLE TH" + + "UMB HOOKED INDEX UPSIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UPSIG" + + "NWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDESIGNWRITING H" + + "AND-FIST INDEX MIDDLE CROSSED THUMB SIDESIGNWRITING HAND-FIST INDEX MIDD" + + "LE CONJOINED THUMB FORWARDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED C" + + "UPPED THUMB FORWARDSIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UPSIG" + + "NWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UPSIGNWRITING HAND-FIST MID" + + "DLE THUMB CIRCLED INDEX UPSIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED IND" + + "EX HINGEDSIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UPSIGNWRITI" + + "NG HAND-FIST INDEX THUMB ANGLED IN MIDDLE UPSIGNWRITING HAND-FIST INDEX " + + "THUMB CIRCLED MIDDLE UPSIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINE" + + "D HINGEDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUTSIGNWRITING H" + + "AND-FIST INDEX MIDDLE THUMB ANGLEDSIGNWRITING HAND-FIST MIDDLE THUMB ANG" + + "LED OUT INDEX UPSIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROS" + + "SEDSIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UPSIGNWRITING HAND-FI" + + "ST INDEX THUMB HOOKED MIDDLE HINGEDSIGNWRITING HAND-FLAT FOUR FINGERSSIG" + + "NWRITING HAND-FLAT FOUR FINGERS BENTSIGNWRITING HAND-FLAT FOUR FINGERS H" + + "INGEDSIGNWRITING HAND-FLAT FOUR FINGERS CONJOINEDSIGNWRITING HAND-FLAT F" + + "OUR FINGERS CONJOINED SPLITSIGNWRITING HAND-CLAW FOUR FINGERS CONJOINEDS" + + "IGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENTSIGNWRITING HAND-HINGE F" + + "OUR FINGERS CONJOINEDSIGNWRITING HAND-FLAT FIVE FINGERS SPREADSIGNWRITIN" + + "G HAND-FLAT HEEL FIVE FINGERS SPREADSIGNWRITING HAND-FLAT FIVE FINGERS S" + + "PREAD FOUR BENTSIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENTS" + + "IGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENTSIGNWRITING HAND-FLAT HEEL " + + "FIVE FINGERS SPREAD BENTSIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB ") + ("" + + "FORWARDSIGNWRITING HAND-CUP FIVE FINGERS SPREADSIGNWRITING HAND-CUP FIVE" + + " FINGERS SPREAD OPENSIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPENSIGNW" + + "RITING HAND-OVAL FIVE FINGERS SPREADSIGNWRITING HAND-FLAT FIVE FINGERS S" + + "PREAD HINGEDSIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDES" + + "IGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMBSIGNWRITING HAND" + + "-FLATSIGNWRITING HAND-FLAT BETWEEN PALM FACINGSSIGNWRITING HAND-FLAT HEE" + + "LSIGNWRITING HAND-FLAT THUMB SIDESIGNWRITING HAND-FLAT HEEL THUMB SIDESI" + + "GNWRITING HAND-FLAT THUMB BENTSIGNWRITING HAND-FLAT THUMB FORWARDSIGNWRI" + + "TING HAND-FLAT SPLIT INDEX THUMB SIDESIGNWRITING HAND-FLAT SPLIT CENTRES" + + "IGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDESIGNWRITING HAND-FLAT SPLIT " + + "CENTRE THUMB SIDE BENTSIGNWRITING HAND-FLAT SPLIT LITTLESIGNWRITING HAND" + + "-CLAWSIGNWRITING HAND-CLAW THUMB SIDESIGNWRITING HAND-CLAW NO THUMBSIGNW" + + "RITING HAND-CLAW THUMB FORWARDSIGNWRITING HAND-HOOK CURLICUESIGNWRITING " + + "HAND-HOOKSIGNWRITING HAND-CUP OPENSIGNWRITING HAND-CUPSIGNWRITING HAND-C" + + "UP OPEN THUMB SIDESIGNWRITING HAND-CUP THUMB SIDESIGNWRITING HAND-CUP OP" + + "EN NO THUMBSIGNWRITING HAND-CUP NO THUMBSIGNWRITING HAND-CUP OPEN THUMB " + + "FORWARDSIGNWRITING HAND-CUP THUMB FORWARDSIGNWRITING HAND-CURLICUE OPENS" + + "IGNWRITING HAND-CURLICUESIGNWRITING HAND-CIRCLESIGNWRITING HAND-OVALSIGN" + + "WRITING HAND-OVAL THUMB SIDESIGNWRITING HAND-OVAL NO THUMBSIGNWRITING HA" + + "ND-OVAL THUMB FORWARDSIGNWRITING HAND-HINGE OPENSIGNWRITING HAND-HINGE O" + + "PEN THUMB FORWARDSIGNWRITING HAND-HINGESIGNWRITING HAND-HINGE SMALLSIGNW" + + "RITING HAND-HINGE OPEN THUMB SIDESIGNWRITING HAND-HINGE THUMB SIDESIGNWR" + + "ITING HAND-HINGE OPEN NO THUMBSIGNWRITING HAND-HINGE NO THUMBSIGNWRITING" + + " HAND-HINGE THUMB SIDE TOUCHING INDEXSIGNWRITING HAND-HINGE THUMB BETWEE" + + "N MIDDLE RINGSIGNWRITING HAND-ANGLESIGNWRITING HAND-FIST INDEX MIDDLE RI" + + "NGSIGNWRITING HAND-CIRCLE INDEX MIDDLE RINGSIGNWRITING HAND-HINGE INDEX " + + "MIDDLE RINGSIGNWRITING HAND-ANGLE INDEX MIDDLE RINGSIGNWRITING HAND-HING" + + "E LITTLESIGNWRITING HAND-FIST INDEX MIDDLE RING BENTSIGNWRITING HAND-FIS" + + "T INDEX MIDDLE RING CONJOINEDSIGNWRITING HAND-HINGE INDEX MIDDLE RING CO" + + "NJOINEDSIGNWRITING HAND-FIST LITTLE DOWNSIGNWRITING HAND-FIST LITTLE DOW" + + "N RIPPLE STRAIGHTSIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVEDSIGNWRIT" + + "ING HAND-FIST LITTLE DOWN OTHERS CIRCLEDSIGNWRITING HAND-FIST LITTLE UPS" + + "IGNWRITING HAND-FIST THUMB UNDER LITTLE UPSIGNWRITING HAND-CIRCLE LITTLE" + + " UPSIGNWRITING HAND-OVAL LITTLE UPSIGNWRITING HAND-ANGLE LITTLE UPSIGNWR" + + "ITING HAND-FIST LITTLE RAISED KNUCKLESIGNWRITING HAND-FIST LITTLE BENTSI" + + "GNWRITING HAND-FIST LITTLE TOUCHES THUMBSIGNWRITING HAND-FIST LITTLE THU" + + "MBSIGNWRITING HAND-HINGE LITTLE THUMBSIGNWRITING HAND-FIST LITTLE INDEX " + + "THUMBSIGNWRITING HAND-HINGE LITTLE INDEX THUMBSIGNWRITING HAND-ANGLE LIT" + + "TLE INDEX THUMB INDEX THUMB OUTSIGNWRITING HAND-ANGLE LITTLE INDEX THUMB" + + " INDEX THUMBSIGNWRITING HAND-FIST LITTLE INDEXSIGNWRITING HAND-CIRCLE LI" + + "TTLE INDEXSIGNWRITING HAND-HINGE LITTLE INDEXSIGNWRITING HAND-ANGLE LITT" + + "LE INDEXSIGNWRITING HAND-FIST INDEX MIDDLE LITTLESIGNWRITING HAND-CIRCLE" + + " INDEX MIDDLE LITTLESIGNWRITING HAND-HINGE INDEX MIDDLE LITTLESIGNWRITIN" + + "G HAND-HINGE RINGSIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLESIGNWRITING H" + + "AND-FIST INDEX MIDDLE CROSS LITTLESIGNWRITING HAND-CIRCLE INDEX MIDDLE C" + + "ROSS LITTLESIGNWRITING HAND-FIST RING DOWNSIGNWRITING HAND-HINGE RING DO" + + "WN INDEX THUMB HOOK MIDDLESIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB " + + "INDEX CROSSSIGNWRITING HAND-FIST RING UPSIGNWRITING HAND-FIST RING RAISE" + + "D KNUCKLESIGNWRITING HAND-FIST RING LITTLESIGNWRITING HAND-CIRCLE RING L" + + "ITTLESIGNWRITING HAND-OVAL RING LITTLESIGNWRITING HAND-ANGLE RING LITTLE" + + "SIGNWRITING HAND-FIST RING MIDDLESIGNWRITING HAND-FIST RING MIDDLE CONJO" + + "INEDSIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLESSIGNWRITING HAND-FI" + + "ST RING INDEXSIGNWRITING HAND-FIST RING THUMBSIGNWRITING HAND-HOOK RING " + + "THUMBSIGNWRITING HAND-FIST INDEX RING LITTLESIGNWRITING HAND-CIRCLE INDE" + + "X RING LITTLESIGNWRITING HAND-CURLICUE INDEX RING LITTLE ONSIGNWRITING H" + + "AND-HOOK INDEX RING LITTLE OUTSIGNWRITING HAND-HOOK INDEX RING LITTLE IN" + + "SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDERSIGNWRITING HAND-CUP INDEX " + + "RING LITTLESIGNWRITING HAND-HINGE INDEX RING LITTLESIGNWRITING HAND-ANGL" + + "E INDEX RING LITTLE OUTSIGNWRITING HAND-ANGLE INDEX RING LITTLESIGNWRITI" + + "NG HAND-FIST MIDDLE DOWNSIGNWRITING HAND-HINGE MIDDLESIGNWRITING HAND-FI" + + "ST MIDDLE UPSIGNWRITING HAND-CIRCLE MIDDLE UPSIGNWRITING HAND-FIST MIDDL" + + "E RAISED KNUCKLESIGNWRITING HAND-FIST MIDDLE UP THUMB SIDESIGNWRITING HA" + + "ND-HOOK MIDDLE THUMBSIGNWRITING HAND-FIST MIDDLE THUMB LITTLESIGNWRITING" + + " HAND-FIST MIDDLE LITTLESIGNWRITING HAND-FIST MIDDLE RING LITTLESIGNWRIT") + ("" + + "ING HAND-CIRCLE MIDDLE RING LITTLESIGNWRITING HAND-CURLICUE MIDDLE RING " + + "LITTLE ONSIGNWRITING HAND-CUP MIDDLE RING LITTLESIGNWRITING HAND-HINGE M" + + "IDDLE RING LITTLESIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUTSIGNWRITIN" + + "G HAND-ANGLE MIDDLE RING LITTLE INSIGNWRITING HAND-ANGLE MIDDLE RING LIT" + + "TLESIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENTSIGNWRITING HAND-CLAW " + + "MIDDLE RING LITTLE CONJOINEDSIGNWRITING HAND-CLAW MIDDLE RING LITTLE CON" + + "JOINED SIDESIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUTSIGNWRI" + + "TING HAND-HOOK MIDDLE RING LITTLE CONJOINED INSIGNWRITING HAND-HOOK MIDD" + + "LE RING LITTLE CONJOINEDSIGNWRITING HAND-HINGE INDEX HINGEDSIGNWRITING H" + + "AND-FIST INDEX THUMB SIDESIGNWRITING HAND-HINGE INDEX THUMB SIDESIGNWRIT" + + "ING HAND-FIST INDEX THUMB SIDE THUMB DIAGONALSIGNWRITING HAND-FIST INDEX" + + " THUMB SIDE THUMB CONJOINEDSIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB " + + "BENTSIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENTSIGNWRITING HAND-FI" + + "ST INDEX THUMB SIDE BOTH BENTSIGNWRITING HAND-FIST INDEX THUMB SIDE INDE" + + "X HINGESIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHTSIGNWRITI" + + "NG HAND-FIST INDEX THUMB FORWARD INDEX BENTSIGNWRITING HAND-FIST INDEX T" + + "HUMB HOOKSIGNWRITING HAND-FIST INDEX THUMB CURLICUESIGNWRITING HAND-FIST" + + " INDEX THUMB CURVE THUMB INSIDESIGNWRITING HAND-CLAW INDEX THUMB CURVE T" + + "HUMB INSIDESIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDERSIGNWRITIN" + + "G HAND-FIST INDEX THUMB CIRCLESIGNWRITING HAND-CUP INDEX THUMBSIGNWRITIN" + + "G HAND-CUP INDEX THUMB OPENSIGNWRITING HAND-HINGE INDEX THUMB OPENSIGNWR" + + "ITING HAND-HINGE INDEX THUMB LARGESIGNWRITING HAND-HINGE INDEX THUMBSIGN" + + "WRITING HAND-HINGE INDEX THUMB SMALLSIGNWRITING HAND-ANGLE INDEX THUMB O" + + "UTSIGNWRITING HAND-ANGLE INDEX THUMB INSIGNWRITING HAND-ANGLE INDEX THUM" + + "BSIGNWRITING HAND-FIST THUMBSIGNWRITING HAND-FIST THUMB HEELSIGNWRITING " + + "HAND-FIST THUMB SIDE DIAGONALSIGNWRITING HAND-FIST THUMB SIDE CONJOINEDS" + + "IGNWRITING HAND-FIST THUMB SIDE BENTSIGNWRITING HAND-FIST THUMB FORWARDS" + + "IGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLESIGNWRITING HAND-FIST THU" + + "MB BETWEEN MIDDLE RINGSIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLESIG" + + "NWRITING HAND-FIST THUMB UNDER TWO FINGERSSIGNWRITING HAND-FIST THUMB OV" + + "ER TWO FINGERSSIGNWRITING HAND-FIST THUMB UNDER THREE FINGERSSIGNWRITING" + + " HAND-FIST THUMB UNDER FOUR FINGERSSIGNWRITING HAND-FIST THUMB OVER FOUR" + + " RAISED KNUCKLESSIGNWRITING HAND-FISTSIGNWRITING HAND-FIST HEELSIGNWRITI" + + "NG TOUCH SINGLESIGNWRITING TOUCH MULTIPLESIGNWRITING TOUCH BETWEENSIGNWR" + + "ITING GRASP SINGLESIGNWRITING GRASP MULTIPLESIGNWRITING GRASP BETWEENSIG" + + "NWRITING STRIKE SINGLESIGNWRITING STRIKE MULTIPLESIGNWRITING STRIKE BETW" + + "EENSIGNWRITING BRUSH SINGLESIGNWRITING BRUSH MULTIPLESIGNWRITING BRUSH B" + + "ETWEENSIGNWRITING RUB SINGLESIGNWRITING RUB MULTIPLESIGNWRITING RUB BETW" + + "EENSIGNWRITING SURFACE SYMBOLSSIGNWRITING SURFACE BETWEENSIGNWRITING SQU" + + "EEZE LARGE SINGLESIGNWRITING SQUEEZE SMALL SINGLESIGNWRITING SQUEEZE LAR" + + "GE MULTIPLESIGNWRITING SQUEEZE SMALL MULTIPLESIGNWRITING SQUEEZE SEQUENT" + + "IALSIGNWRITING FLICK LARGE SINGLESIGNWRITING FLICK SMALL SINGLESIGNWRITI" + + "NG FLICK LARGE MULTIPLESIGNWRITING FLICK SMALL MULTIPLESIGNWRITING FLICK" + + " SEQUENTIALSIGNWRITING SQUEEZE FLICK ALTERNATINGSIGNWRITING MOVEMENT-HIN" + + "GE UP DOWN LARGESIGNWRITING MOVEMENT-HINGE UP DOWN SMALLSIGNWRITING MOVE" + + "MENT-HINGE UP SEQUENTIALSIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIALSIGNWR" + + "ITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGESIGNWRITING MOVEMENT-HINGE" + + " UP DOWN ALTERNATING SMALLSIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSO" + + "RSSIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACTSIGNWRITING MOVEMENT-FLOO" + + "RPLANE FINGER CONTACTSIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMAL" + + "LSIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUMSIGNWRITING MOVEME" + + "NT-WALLPLANE SINGLE STRAIGHT LARGESIGNWRITING MOVEMENT-WALLPLANE SINGLE " + + "STRAIGHT LARGESTSIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEXSIGNWRIT" + + "ING MOVEMENT-WALLPLANE DOUBLE STRAIGHTSIGNWRITING MOVEMENT-WALLPLANE DOU" + + "BLE WRIST FLEXSIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATINGSIGNWRITI" + + "NG MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEXSIGNWRITING MOVEMENT-" + + "WALLPLANE CROSSSIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENTSI" + + "GNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEXSIGNWRITING MOVEMENT-WALLP" + + "LANE TRIPLE ALTERNATINGSIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING" + + " WRIST FLEXSIGNWRITING MOVEMENT-WALLPLANE BEND SMALLSIGNWRITING MOVEMENT" + + "-WALLPLANE BEND MEDIUMSIGNWRITING MOVEMENT-WALLPLANE BEND LARGESIGNWRITI" + + "NG MOVEMENT-WALLPLANE CORNER SMALLSIGNWRITING MOVEMENT-WALLPLANE CORNER " + + "MEDIUMSIGNWRITING MOVEMENT-WALLPLANE CORNER LARGESIGNWRITING MOVEMENT-WA" + + "LLPLANE CORNER ROTATIONSIGNWRITING MOVEMENT-WALLPLANE CHECK SMALLSIGNWRI") + ("" + + "TING MOVEMENT-WALLPLANE CHECK MEDIUMSIGNWRITING MOVEMENT-WALLPLANE CHECK" + + " LARGESIGNWRITING MOVEMENT-WALLPLANE BOX SMALLSIGNWRITING MOVEMENT-WALLP" + + "LANE BOX MEDIUMSIGNWRITING MOVEMENT-WALLPLANE BOX LARGESIGNWRITING MOVEM" + + "ENT-WALLPLANE ZIGZAG SMALLSIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUMSI" + + "GNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGESIGNWRITING MOVEMENT-WALLPLANE " + + "PEAKS SMALLSIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUMSIGNWRITING MOVEME" + + "NT-WALLPLANE PEAKS LARGESIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE " + + "SINGLESIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLESIGNWRITING " + + "TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATINGSIGNWRITING TRAVEL-WALLPL" + + "ANE ROTATION-FLOORPLANE SINGLESIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOO" + + "RPLANE DOUBLESIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATIN" + + "GSIGNWRITING TRAVEL-WALLPLANE SHAKINGSIGNWRITING TRAVEL-WALLPLANE ARM SP" + + "IRAL SINGLESIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLESIGNWRITING TRA" + + "VEL-WALLPLANE ARM SPIRAL TRIPLESIGNWRITING MOVEMENT-DIAGONAL AWAY SMALLS" + + "IGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUMSIGNWRITING MOVEMENT-DIAGONAL AW" + + "AY LARGESIGNWRITING MOVEMENT-DIAGONAL AWAY LARGESTSIGNWRITING MOVEMENT-D" + + "IAGONAL TOWARDS SMALLSIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUMSIGNWRI" + + "TING MOVEMENT-DIAGONAL TOWARDS LARGESIGNWRITING MOVEMENT-DIAGONAL TOWARD" + + "S LARGESTSIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALLSIGNWRITING MOV" + + "EMENT-DIAGONAL BETWEEN AWAY MEDIUMSIGNWRITING MOVEMENT-DIAGONAL BETWEEN " + + "AWAY LARGESIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGESTSIGNWRITING " + + "MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALLSIGNWRITING MOVEMENT-DIAGONAL BET" + + "WEEN TOWARDS MEDIUMSIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGESI" + + "GNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGESTSIGNWRITING MOVEMENT-" + + "FLOORPLANE SINGLE STRAIGHT SMALLSIGNWRITING MOVEMENT-FLOORPLANE SINGLE S" + + "TRAIGHT MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGESIGNW" + + "RITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGESTSIGNWRITING MOVEMENT-F" + + "LOORPLANE SINGLE WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIG" + + "HTSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEXSIGNWRITING MOVEMENT-" + + "FLOORPLANE DOUBLE ALTERNATINGSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTE" + + "RNATING WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE CROSSSIGNWRITING MOVEM" + + "ENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENTSIGNWRITING MOVEMENT-FLOORPLANE T" + + "RIPLE WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEM" + + "ENTSIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEXSIGNWRIT" + + "ING MOVEMENT-FLOORPLANE BENDSIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL" + + "SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUMSIGNWRITING MOVEMENT-FLOORP" + + "LANE CORNER LARGESIGNWRITING MOVEMENT-FLOORPLANE CHECKSIGNWRITING MOVEME" + + "NT-FLOORPLANE BOX SMALLSIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUMSIGNWRI" + + "TING MOVEMENT-FLOORPLANE BOX LARGESIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG" + + " SMALLSIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUMSIGNWRITING MOVEMENT-" + + "FLOORPLANE ZIGZAG LARGESIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALLSIGNWR" + + "ITING MOVEMENT-FLOORPLANE PEAKS MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE PE" + + "AKS LARGESIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLESIGNWRI" + + "TING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLESIGNWRITING TRAVEL-FLOO" + + "RPLANE ROTATION-FLOORPLANE ALTERNATINGSIGNWRITING TRAVEL-FLOORPLANE ROTA" + + "TION-WALLPLANE SINGLESIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DO" + + "UBLESIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATINGSIGNWRIT" + + "ING TRAVEL-FLOORPLANE SHAKINGSIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTE" + + "R SMALLSIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUMSIGNWRITING MO" + + "VEMENT-WALLPLANE CURVE QUARTER LARGESIGNWRITING MOVEMENT-WALLPLANE CURVE" + + " QUARTER LARGESTSIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALLSI" + + "GNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUMSIGNWRITING MOVEMEN" + + "T-WALLPLANE CURVE HALF-CIRCLE LARGESIGNWRITING MOVEMENT-WALLPLANE CURVE " + + "HALF-CIRCLE LARGESTSIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CI" + + "RCLE SMALLSIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDI" + + "UMSIGNWRITING MOVEMENT-WALLPLANE HUMP SMALLSIGNWRITING MOVEMENT-WALLPLAN" + + "E HUMP MEDIUMSIGNWRITING MOVEMENT-WALLPLANE HUMP LARGESIGNWRITING MOVEME" + + "NT-WALLPLANE LOOP SMALLSIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUMSIGNWRI" + + "TING MOVEMENT-WALLPLANE LOOP LARGESIGNWRITING MOVEMENT-WALLPLANE LOOP SM" + + "ALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALLSIGNWRIT" + + "ING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUMSIGNWRITING MOVEMENT-WALL" + + "PLANE WAVE CURVE DOUBLE LARGESIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE T" + + "RIPLE SMALLSIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUMSIGNWR" + + "ITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGESIGNWRITING MOVEMENT-WAL") + ("" + + "LPLANE CURVE THEN STRAIGHTSIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SM" + + "ALLSIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUMSIGNWRITING ROTATIO" + + "N-WALLPLANE SINGLESIGNWRITING ROTATION-WALLPLANE DOUBLESIGNWRITING ROTAT" + + "ION-WALLPLANE ALTERNATESIGNWRITING MOVEMENT-WALLPLANE SHAKINGSIGNWRITING" + + " MOVEMENT-WALLPLANE CURVE HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLA" + + "NE HUMP HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FR" + + "ONT WALLSIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALLSIGNWRITIN" + + "G ROTATION-WALLPLANE SINGLE HITTING FRONT WALLSIGNWRITING ROTATION-WALLP" + + "LANE DOUBLE HITTING FRONT WALLSIGNWRITING ROTATION-WALLPLANE ALTERNATING" + + " HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHESTSIG" + + "NWRITING MOVEMENT-WALLPLANE HUMP HITTING CHESTSIGNWRITING MOVEMENT-WALLP" + + "LANE LOOP HITTING CHESTSIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST" + + "SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHESTSIGNWRITING ROTATION-" + + "WALLPLANE DOUBLE HITTING CHESTSIGNWRITING ROTATION-WALLPLANE ALTERNATING" + + " HITTING CHESTSIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALLSIG" + + "NWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUMSIGNWRITING MOVEMEN" + + "T-WALLPLANE WAVE DIAGONAL PATH LARGESIGNWRITING MOVEMENT-FLOORPLANE CURV" + + "E HITTING CEILING SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEI" + + "LING LARGESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOU" + + "BLESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLESIGN" + + "WRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLESIGNWRITING" + + " MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLESIGNWRITING MOVEME" + + "NT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLESIGNWRITING MOVEMENT-FLOO" + + "RPLANE LOOP HITTING CEILING LARGE SINGLESIGNWRITING MOVEMENT-FLOORPLANE " + + "LOOP HITTING CEILING SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HI" + + "TTING CEILING LARGE DOUBLESIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING C" + + "EILING SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGESI" + + "GNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILINGSIGNWRITING ROTATION" + + "-FLOORPLANE DOUBLE HITTING CEILINGSIGNWRITING ROTATION-FLOORPLANE ALTERN" + + "ATING HITTING CEILINGSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR" + + " SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGESIGNWRITI" + + "NG MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLESIGNWRITING MOVEME" + + "NT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLESIGNWRITING MOVEMENT-FLOORP" + + "LANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLESIGNWRITING MOVEMENT-FLOORPLA" + + "NE HUMP HITTING FLOOR TRIPLE LARGE TRIPLESIGNWRITING MOVEMENT-FLOORPLANE" + + " LOOP HITTING FLOOR SMALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HIT" + + "TING FLOOR LARGE SINGLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOO" + + "R SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE D" + + "OUBLESIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALLSIGNWRITING" + + " MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGESIGNWRITING ROTATION-FLOORP" + + "LANE SINGLE HITTING FLOORSIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING " + + "FLOORSIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOORSIGNWRITIN" + + "G MOVEMENT-FLOORPLANE CURVE SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURVE M" + + "EDIUMSIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGESIGNWRITING MOVEMENT-FLO" + + "ORPLANE CURVE LARGESTSIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINEDSIGNW" + + "RITING MOVEMENT-FLOORPLANE HUMP SMALLSIGNWRITING MOVEMENT-FLOORPLANE LOO" + + "P SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKESIGNWRITING MOVEMENT-FL" + + "OORPLANE WAVE SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGESIGNWRITING" + + " ROTATION-FLOORPLANE SINGLESIGNWRITING ROTATION-FLOORPLANE DOUBLESIGNWRI" + + "TING ROTATION-FLOORPLANE ALTERNATINGSIGNWRITING MOVEMENT-FLOORPLANE SHAK" + + "ING PARALLELSIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLESIGNWR" + + "ITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLESIGNWRITING MOVEMENT-WA" + + "LLPLANE ARM CIRCLE SMALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE" + + " MEDIUM DOUBLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SM" + + "ALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM" + + " SINGLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SIN" + + "GLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLES" + + "IGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLESIGN" + + "WRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLESIGNWRIT" + + "ING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLESIGNWRITING MOVEMENT-WAL" + + "LPLANE WRIST CIRCLE FRONT DOUBLESIGNWRITING MOVEMENT-FLOORPLANE WRIST CI" + + "RCLE HITTING WALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HIT" + + "TING WALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLESIGN" + + "WRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLESIGNWRITING MOVEMENT-FLO") + ("" + + "ORPLANE FINGER CIRCLES HITTING WALL SINGLESIGNWRITING MOVEMENT-FLOORPLAN" + + "E FINGER CIRCLES HITTING WALL DOUBLESIGNWRITING DYNAMIC ARROWHEAD SMALLS" + + "IGNWRITING DYNAMIC ARROWHEAD LARGESIGNWRITING DYNAMIC FASTSIGNWRITING DY" + + "NAMIC SLOWSIGNWRITING DYNAMIC TENSESIGNWRITING DYNAMIC RELAXEDSIGNWRITIN" + + "G DYNAMIC SIMULTANEOUSSIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATINGSIGNWR" + + "ITING DYNAMIC EVERY OTHER TIMESIGNWRITING DYNAMIC GRADUALSIGNWRITING HEA" + + "DSIGNWRITING HEAD RIMSIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHTSIGNWRI" + + "TING HEAD MOVEMENT-WALLPLANE TILTSIGNWRITING HEAD MOVEMENT-FLOORPLANE ST" + + "RAIGHTSIGNWRITING HEAD MOVEMENT-WALLPLANE CURVESIGNWRITING HEAD MOVEMENT" + + "-FLOORPLANE CURVESIGNWRITING HEAD MOVEMENT CIRCLESIGNWRITING FACE DIRECT" + + "ION POSITION NOSE FORWARD TILTINGSIGNWRITING FACE DIRECTION POSITION NOS" + + "E UP OR DOWNSIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTINGS" + + "IGNWRITING EYEBROWS STRAIGHT UPSIGNWRITING EYEBROWS STRAIGHT NEUTRALSIGN" + + "WRITING EYEBROWS STRAIGHT DOWNSIGNWRITING DREAMY EYEBROWS NEUTRAL DOWNSI" + + "GNWRITING DREAMY EYEBROWS DOWN NEUTRALSIGNWRITING DREAMY EYEBROWS UP NEU" + + "TRALSIGNWRITING DREAMY EYEBROWS NEUTRAL UPSIGNWRITING FOREHEAD NEUTRALSI" + + "GNWRITING FOREHEAD CONTACTSIGNWRITING FOREHEAD WRINKLEDSIGNWRITING EYES " + + "OPENSIGNWRITING EYES SQUEEZEDSIGNWRITING EYES CLOSEDSIGNWRITING EYE BLIN" + + "K SINGLESIGNWRITING EYE BLINK MULTIPLESIGNWRITING EYES HALF OPENSIGNWRIT" + + "ING EYES WIDE OPENSIGNWRITING EYES HALF CLOSEDSIGNWRITING EYES WIDENING " + + "MOVEMENTSIGNWRITING EYE WINKSIGNWRITING EYELASHES UPSIGNWRITING EYELASHE" + + "S DOWNSIGNWRITING EYELASHES FLUTTERINGSIGNWRITING EYEGAZE-WALLPLANE STRA" + + "IGHTSIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLESIGNWRITING EYEGAZE-WAL" + + "LPLANE STRAIGHT ALTERNATINGSIGNWRITING EYEGAZE-FLOORPLANE STRAIGHTSIGNWR" + + "ITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLESIGNWRITING EYEGAZE-FLOORPLANE S" + + "TRAIGHT ALTERNATINGSIGNWRITING EYEGAZE-WALLPLANE CURVEDSIGNWRITING EYEGA" + + "ZE-FLOORPLANE CURVEDSIGNWRITING EYEGAZE-WALLPLANE CIRCLINGSIGNWRITING CH" + + "EEKS PUFFEDSIGNWRITING CHEEKS NEUTRALSIGNWRITING CHEEKS SUCKEDSIGNWRITIN" + + "G TENSE CHEEKS HIGHSIGNWRITING TENSE CHEEKS MIDDLESIGNWRITING TENSE CHEE" + + "KS LOWSIGNWRITING EARSSIGNWRITING NOSE NEUTRALSIGNWRITING NOSE CONTACTSI" + + "GNWRITING NOSE WRINKLESSIGNWRITING NOSE WIGGLESSIGNWRITING AIR BLOWING O" + + "UTSIGNWRITING AIR SUCKING INSIGNWRITING AIR BLOW SMALL ROTATIONSSIGNWRIT" + + "ING AIR SUCK SMALL ROTATIONSSIGNWRITING BREATH INHALESIGNWRITING BREATH " + + "EXHALESIGNWRITING MOUTH CLOSED NEUTRALSIGNWRITING MOUTH CLOSED FORWARDSI" + + "GNWRITING MOUTH CLOSED CONTACTSIGNWRITING MOUTH SMILESIGNWRITING MOUTH S" + + "MILE WRINKLEDSIGNWRITING MOUTH SMILE OPENSIGNWRITING MOUTH FROWNSIGNWRIT" + + "ING MOUTH FROWN WRINKLEDSIGNWRITING MOUTH FROWN OPENSIGNWRITING MOUTH OP" + + "EN CIRCLESIGNWRITING MOUTH OPEN FORWARDSIGNWRITING MOUTH OPEN WRINKLEDSI" + + "GNWRITING MOUTH OPEN OVALSIGNWRITING MOUTH OPEN OVAL WRINKLEDSIGNWRITING" + + " MOUTH OPEN OVAL YAWNSIGNWRITING MOUTH OPEN RECTANGLESIGNWRITING MOUTH O" + + "PEN RECTANGLE WRINKLEDSIGNWRITING MOUTH OPEN RECTANGLE YAWNSIGNWRITING M" + + "OUTH KISSSIGNWRITING MOUTH KISS FORWARDSIGNWRITING MOUTH KISS WRINKLEDSI" + + "GNWRITING MOUTH TENSESIGNWRITING MOUTH TENSE FORWARDSIGNWRITING MOUTH TE" + + "NSE SUCKEDSIGNWRITING LIPS PRESSED TOGETHERSIGNWRITING LIP LOWER OVER UP" + + "PERSIGNWRITING LIP UPPER OVER LOWERSIGNWRITING MOUTH CORNERSSIGNWRITING " + + "MOUTH WRINKLES SINGLESIGNWRITING MOUTH WRINKLES DOUBLESIGNWRITING TONGUE" + + " STICKING OUT FARSIGNWRITING TONGUE LICKING LIPSSIGNWRITING TONGUE TIP B" + + "ETWEEN LIPSSIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTHSIGNWRITING TONGU" + + "E INSIDE MOUTH RELAXEDSIGNWRITING TONGUE MOVES AGAINST CHEEKSIGNWRITING " + + "TONGUE CENTRE STICKING OUTSIGNWRITING TONGUE CENTRE INSIDE MOUTHSIGNWRIT" + + "ING TEETHSIGNWRITING TEETH MOVEMENTSIGNWRITING TEETH ON TONGUESIGNWRITIN" + + "G TEETH ON TONGUE MOVEMENTSIGNWRITING TEETH ON LIPSSIGNWRITING TEETH ON " + + "LIPS MOVEMENTSIGNWRITING TEETH BITE LIPSSIGNWRITING MOVEMENT-WALLPLANE J" + + "AWSIGNWRITING MOVEMENT-FLOORPLANE JAWSIGNWRITING NECKSIGNWRITING HAIRSIG" + + "NWRITING EXCITEMENTSIGNWRITING SHOULDER HIP SPINESIGNWRITING SHOULDER HI" + + "P POSITIONSSIGNWRITING WALLPLANE SHOULDER HIP MOVESIGNWRITING FLOORPLANE" + + " SHOULDER HIP MOVESIGNWRITING SHOULDER TILTING FROM WAISTSIGNWRITING TOR" + + "SO-WALLPLANE STRAIGHT STRETCHSIGNWRITING TORSO-WALLPLANE CURVED BENDSIGN" + + "WRITING TORSO-FLOORPLANE TWISTINGSIGNWRITING UPPER BODY TILTING FROM HIP" + + " JOINTSSIGNWRITING LIMB COMBINATIONSIGNWRITING LIMB LENGTH-1SIGNWRITING " + + "LIMB LENGTH-2SIGNWRITING LIMB LENGTH-3SIGNWRITING LIMB LENGTH-4SIGNWRITI" + + "NG LIMB LENGTH-5SIGNWRITING LIMB LENGTH-6SIGNWRITING LIMB LENGTH-7SIGNWR" + + "ITING FINGERSIGNWRITING LOCATION-WALLPLANE SPACESIGNWRITING LOCATION-FLO" + + "ORPLANE SPACESIGNWRITING LOCATION HEIGHTSIGNWRITING LOCATION WIDTHSIGNWR") + ("" + + "ITING LOCATION DEPTHSIGNWRITING LOCATION HEAD NECKSIGNWRITING LOCATION T" + + "ORSOSIGNWRITING LOCATION LIMBS DIGITSSIGNWRITING COMMASIGNWRITING FULL S" + + "TOPSIGNWRITING SEMICOLONSIGNWRITING COLONSIGNWRITING PARENTHESISSIGNWRIT" + + "ING FILL MODIFIER-2SIGNWRITING FILL MODIFIER-3SIGNWRITING FILL MODIFIER-" + + "4SIGNWRITING FILL MODIFIER-5SIGNWRITING FILL MODIFIER-6SIGNWRITING ROTAT" + + "ION MODIFIER-2SIGNWRITING ROTATION MODIFIER-3SIGNWRITING ROTATION MODIFI" + + "ER-4SIGNWRITING ROTATION MODIFIER-5SIGNWRITING ROTATION MODIFIER-6SIGNWR" + + "ITING ROTATION MODIFIER-7SIGNWRITING ROTATION MODIFIER-8SIGNWRITING ROTA" + + "TION MODIFIER-9SIGNWRITING ROTATION MODIFIER-10SIGNWRITING ROTATION MODI" + + "FIER-11SIGNWRITING ROTATION MODIFIER-12SIGNWRITING ROTATION MODIFIER-13S" + + "IGNWRITING ROTATION MODIFIER-14SIGNWRITING ROTATION MODIFIER-15SIGNWRITI" + + "NG ROTATION MODIFIER-16COMBINING GLAGOLITIC LETTER AZUCOMBINING GLAGOLIT" + + "IC LETTER BUKYCOMBINING GLAGOLITIC LETTER VEDECOMBINING GLAGOLITIC LETTE" + + "R GLAGOLICOMBINING GLAGOLITIC LETTER DOBROCOMBINING GLAGOLITIC LETTER YE" + + "STUCOMBINING GLAGOLITIC LETTER ZHIVETECOMBINING GLAGOLITIC LETTER ZEMLJA" + + "COMBINING GLAGOLITIC LETTER IZHECOMBINING GLAGOLITIC LETTER INITIAL IZHE" + + "COMBINING GLAGOLITIC LETTER ICOMBINING GLAGOLITIC LETTER DJERVICOMBINING" + + " GLAGOLITIC LETTER KAKOCOMBINING GLAGOLITIC LETTER LJUDIJECOMBINING GLAG" + + "OLITIC LETTER MYSLITECOMBINING GLAGOLITIC LETTER NASHICOMBINING GLAGOLIT" + + "IC LETTER ONUCOMBINING GLAGOLITIC LETTER POKOJICOMBINING GLAGOLITIC LETT" + + "ER RITSICOMBINING GLAGOLITIC LETTER SLOVOCOMBINING GLAGOLITIC LETTER TVR" + + "IDOCOMBINING GLAGOLITIC LETTER UKUCOMBINING GLAGOLITIC LETTER FRITUCOMBI" + + "NING GLAGOLITIC LETTER HERUCOMBINING GLAGOLITIC LETTER SHTACOMBINING GLA" + + "GOLITIC LETTER TSICOMBINING GLAGOLITIC LETTER CHRIVICOMBINING GLAGOLITIC" + + " LETTER SHACOMBINING GLAGOLITIC LETTER YERUCOMBINING GLAGOLITIC LETTER Y" + + "ERICOMBINING GLAGOLITIC LETTER YATICOMBINING GLAGOLITIC LETTER YUCOMBINI" + + "NG GLAGOLITIC LETTER SMALL YUSCOMBINING GLAGOLITIC LETTER YOCOMBINING GL" + + "AGOLITIC LETTER IOTATED SMALL YUSCOMBINING GLAGOLITIC LETTER BIG YUSCOMB" + + "INING GLAGOLITIC LETTER IOTATED BIG YUSCOMBINING GLAGOLITIC LETTER FITAM" + + "ENDE KIKAKUI SYLLABLE M001 KIMENDE KIKAKUI SYLLABLE M002 KAMENDE KIKAKUI" + + " SYLLABLE M003 KUMENDE KIKAKUI SYLLABLE M065 KEEMENDE KIKAKUI SYLLABLE M" + + "095 KEMENDE KIKAKUI SYLLABLE M076 KOOMENDE KIKAKUI SYLLABLE M048 KOMENDE" + + " KIKAKUI SYLLABLE M179 KUAMENDE KIKAKUI SYLLABLE M004 WIMENDE KIKAKUI SY" + + "LLABLE M005 WAMENDE KIKAKUI SYLLABLE M006 WUMENDE KIKAKUI SYLLABLE M126 " + + "WEEMENDE KIKAKUI SYLLABLE M118 WEMENDE KIKAKUI SYLLABLE M114 WOOMENDE KI" + + "KAKUI SYLLABLE M045 WOMENDE KIKAKUI SYLLABLE M194 WUIMENDE KIKAKUI SYLLA" + + "BLE M143 WEIMENDE KIKAKUI SYLLABLE M061 WVIMENDE KIKAKUI SYLLABLE M049 W" + + "VAMENDE KIKAKUI SYLLABLE M139 WVEMENDE KIKAKUI SYLLABLE M007 MINMENDE KI" + + "KAKUI SYLLABLE M008 MANMENDE KIKAKUI SYLLABLE M009 MUNMENDE KIKAKUI SYLL" + + "ABLE M059 MENMENDE KIKAKUI SYLLABLE M094 MONMENDE KIKAKUI SYLLABLE M154 " + + "MUANMENDE KIKAKUI SYLLABLE M189 MUENMENDE KIKAKUI SYLLABLE M010 BIMENDE " + + "KIKAKUI SYLLABLE M011 BAMENDE KIKAKUI SYLLABLE M012 BUMENDE KIKAKUI SYLL" + + "ABLE M150 BEEMENDE KIKAKUI SYLLABLE M097 BEMENDE KIKAKUI SYLLABLE M103 B" + + "OOMENDE KIKAKUI SYLLABLE M138 BOMENDE KIKAKUI SYLLABLE M013 IMENDE KIKAK" + + "UI SYLLABLE M014 AMENDE KIKAKUI SYLLABLE M015 UMENDE KIKAKUI SYLLABLE M1" + + "63 EEMENDE KIKAKUI SYLLABLE M100 EMENDE KIKAKUI SYLLABLE M165 OOMENDE KI" + + "KAKUI SYLLABLE M147 OMENDE KIKAKUI SYLLABLE M137 EIMENDE KIKAKUI SYLLABL" + + "E M131 INMENDE KIKAKUI SYLLABLE M135 INMENDE KIKAKUI SYLLABLE M195 ANMEN" + + "DE KIKAKUI SYLLABLE M178 ENMENDE KIKAKUI SYLLABLE M019 SIMENDE KIKAKUI S" + + "YLLABLE M020 SAMENDE KIKAKUI SYLLABLE M021 SUMENDE KIKAKUI SYLLABLE M162" + + " SEEMENDE KIKAKUI SYLLABLE M116 SEMENDE KIKAKUI SYLLABLE M136 SOOMENDE K" + + "IKAKUI SYLLABLE M079 SOMENDE KIKAKUI SYLLABLE M196 SIAMENDE KIKAKUI SYLL" + + "ABLE M025 LIMENDE KIKAKUI SYLLABLE M026 LAMENDE KIKAKUI SYLLABLE M027 LU" + + "MENDE KIKAKUI SYLLABLE M084 LEEMENDE KIKAKUI SYLLABLE M073 LEMENDE KIKAK" + + "UI SYLLABLE M054 LOOMENDE KIKAKUI SYLLABLE M153 LOMENDE KIKAKUI SYLLABLE" + + " M110 LONG LEMENDE KIKAKUI SYLLABLE M016 DIMENDE KIKAKUI SYLLABLE M017 D" + + "AMENDE KIKAKUI SYLLABLE M018 DUMENDE KIKAKUI SYLLABLE M089 DEEMENDE KIKA" + + "KUI SYLLABLE M180 DOOMENDE KIKAKUI SYLLABLE M181 DOMENDE KIKAKUI SYLLABL" + + "E M022 TIMENDE KIKAKUI SYLLABLE M023 TAMENDE KIKAKUI SYLLABLE M024 TUMEN" + + "DE KIKAKUI SYLLABLE M091 TEEMENDE KIKAKUI SYLLABLE M055 TEMENDE KIKAKUI " + + "SYLLABLE M104 TOOMENDE KIKAKUI SYLLABLE M069 TOMENDE KIKAKUI SYLLABLE M0" + + "28 JIMENDE KIKAKUI SYLLABLE M029 JAMENDE KIKAKUI SYLLABLE M030 JUMENDE K" + + "IKAKUI SYLLABLE M157 JEEMENDE KIKAKUI SYLLABLE M113 JEMENDE KIKAKUI SYLL" + + "ABLE M160 JOOMENDE KIKAKUI SYLLABLE M063 JOMENDE KIKAKUI SYLLABLE M175 L") + ("" + + "ONG JOMENDE KIKAKUI SYLLABLE M031 YIMENDE KIKAKUI SYLLABLE M032 YAMENDE " + + "KIKAKUI SYLLABLE M033 YUMENDE KIKAKUI SYLLABLE M109 YEEMENDE KIKAKUI SYL" + + "LABLE M080 YEMENDE KIKAKUI SYLLABLE M141 YOOMENDE KIKAKUI SYLLABLE M121 " + + "YOMENDE KIKAKUI SYLLABLE M034 FIMENDE KIKAKUI SYLLABLE M035 FAMENDE KIKA" + + "KUI SYLLABLE M036 FUMENDE KIKAKUI SYLLABLE M078 FEEMENDE KIKAKUI SYLLABL" + + "E M075 FEMENDE KIKAKUI SYLLABLE M133 FOOMENDE KIKAKUI SYLLABLE M088 FOME" + + "NDE KIKAKUI SYLLABLE M197 FUAMENDE KIKAKUI SYLLABLE M101 FANMENDE KIKAKU" + + "I SYLLABLE M037 NINMENDE KIKAKUI SYLLABLE M038 NANMENDE KIKAKUI SYLLABLE" + + " M039 NUNMENDE KIKAKUI SYLLABLE M117 NENMENDE KIKAKUI SYLLABLE M169 NONM" + + "ENDE KIKAKUI SYLLABLE M176 HIMENDE KIKAKUI SYLLABLE M041 HAMENDE KIKAKUI" + + " SYLLABLE M186 HUMENDE KIKAKUI SYLLABLE M040 HEEMENDE KIKAKUI SYLLABLE M" + + "096 HEMENDE KIKAKUI SYLLABLE M042 HOOMENDE KIKAKUI SYLLABLE M140 HOMENDE" + + " KIKAKUI SYLLABLE M083 HEEIMENDE KIKAKUI SYLLABLE M128 HOOUMENDE KIKAKUI" + + " SYLLABLE M053 HINMENDE KIKAKUI SYLLABLE M130 HANMENDE KIKAKUI SYLLABLE " + + "M087 HUNMENDE KIKAKUI SYLLABLE M052 HENMENDE KIKAKUI SYLLABLE M193 HONME" + + "NDE KIKAKUI SYLLABLE M046 HUANMENDE KIKAKUI SYLLABLE M090 NGGIMENDE KIKA" + + "KUI SYLLABLE M043 NGGAMENDE KIKAKUI SYLLABLE M082 NGGUMENDE KIKAKUI SYLL" + + "ABLE M115 NGGEEMENDE KIKAKUI SYLLABLE M146 NGGEMENDE KIKAKUI SYLLABLE M1" + + "56 NGGOOMENDE KIKAKUI SYLLABLE M120 NGGOMENDE KIKAKUI SYLLABLE M159 NGGA" + + "AMENDE KIKAKUI SYLLABLE M127 NGGUAMENDE KIKAKUI SYLLABLE M086 LONG NGGEM" + + "ENDE KIKAKUI SYLLABLE M106 LONG NGGOOMENDE KIKAKUI SYLLABLE M183 LONG NG" + + "GOMENDE KIKAKUI SYLLABLE M155 GIMENDE KIKAKUI SYLLABLE M111 GAMENDE KIKA" + + "KUI SYLLABLE M168 GUMENDE KIKAKUI SYLLABLE M190 GEEMENDE KIKAKUI SYLLABL" + + "E M166 GUEIMENDE KIKAKUI SYLLABLE M167 GUANMENDE KIKAKUI SYLLABLE M184 N" + + "GENMENDE KIKAKUI SYLLABLE M057 NGONMENDE KIKAKUI SYLLABLE M177 NGUANMEND" + + "E KIKAKUI SYLLABLE M068 PIMENDE KIKAKUI SYLLABLE M099 PAMENDE KIKAKUI SY" + + "LLABLE M050 PUMENDE KIKAKUI SYLLABLE M081 PEEMENDE KIKAKUI SYLLABLE M051" + + " PEMENDE KIKAKUI SYLLABLE M102 POOMENDE KIKAKUI SYLLABLE M066 POMENDE KI" + + "KAKUI SYLLABLE M145 MBIMENDE KIKAKUI SYLLABLE M062 MBAMENDE KIKAKUI SYLL" + + "ABLE M122 MBUMENDE KIKAKUI SYLLABLE M047 MBEEMENDE KIKAKUI SYLLABLE M188" + + " MBEEMENDE KIKAKUI SYLLABLE M072 MBEMENDE KIKAKUI SYLLABLE M172 MBOOMEND" + + "E KIKAKUI SYLLABLE M174 MBOMENDE KIKAKUI SYLLABLE M187 MBUUMENDE KIKAKUI" + + " SYLLABLE M161 LONG MBEMENDE KIKAKUI SYLLABLE M105 LONG MBOOMENDE KIKAKU" + + "I SYLLABLE M142 LONG MBOMENDE KIKAKUI SYLLABLE M132 KPIMENDE KIKAKUI SYL" + + "LABLE M092 KPAMENDE KIKAKUI SYLLABLE M074 KPUMENDE KIKAKUI SYLLABLE M044" + + " KPEEMENDE KIKAKUI SYLLABLE M108 KPEMENDE KIKAKUI SYLLABLE M112 KPOOMEND" + + "E KIKAKUI SYLLABLE M158 KPOMENDE KIKAKUI SYLLABLE M124 GBIMENDE KIKAKUI " + + "SYLLABLE M056 GBAMENDE KIKAKUI SYLLABLE M148 GBUMENDE KIKAKUI SYLLABLE M" + + "093 GBEEMENDE KIKAKUI SYLLABLE M107 GBEMENDE KIKAKUI SYLLABLE M071 GBOOM" + + "ENDE KIKAKUI SYLLABLE M070 GBOMENDE KIKAKUI SYLLABLE M171 RAMENDE KIKAKU" + + "I SYLLABLE M123 NDIMENDE KIKAKUI SYLLABLE M129 NDAMENDE KIKAKUI SYLLABLE" + + " M125 NDUMENDE KIKAKUI SYLLABLE M191 NDEEMENDE KIKAKUI SYLLABLE M119 NDE" + + "MENDE KIKAKUI SYLLABLE M067 NDOOMENDE KIKAKUI SYLLABLE M064 NDOMENDE KIK" + + "AKUI SYLLABLE M152 NJAMENDE KIKAKUI SYLLABLE M192 NJUMENDE KIKAKUI SYLLA" + + "BLE M149 NJEEMENDE KIKAKUI SYLLABLE M134 NJOOMENDE KIKAKUI SYLLABLE M182" + + " VIMENDE KIKAKUI SYLLABLE M185 VAMENDE KIKAKUI SYLLABLE M151 VUMENDE KIK" + + "AKUI SYLLABLE M173 VEEMENDE KIKAKUI SYLLABLE M085 VEMENDE KIKAKUI SYLLAB" + + "LE M144 VOOMENDE KIKAKUI SYLLABLE M077 VOMENDE KIKAKUI SYLLABLE M164 NYI" + + "NMENDE KIKAKUI SYLLABLE M058 NYANMENDE KIKAKUI SYLLABLE M170 NYUNMENDE K" + + "IKAKUI SYLLABLE M098 NYENMENDE KIKAKUI SYLLABLE M060 NYONMENDE KIKAKUI D" + + "IGIT ONEMENDE KIKAKUI DIGIT TWOMENDE KIKAKUI DIGIT THREEMENDE KIKAKUI DI" + + "GIT FOURMENDE KIKAKUI DIGIT FIVEMENDE KIKAKUI DIGIT SIXMENDE KIKAKUI DIG" + + "IT SEVENMENDE KIKAKUI DIGIT EIGHTMENDE KIKAKUI DIGIT NINEMENDE KIKAKUI C" + + "OMBINING NUMBER TEENSMENDE KIKAKUI COMBINING NUMBER TENSMENDE KIKAKUI CO" + + "MBINING NUMBER HUNDREDSMENDE KIKAKUI COMBINING NUMBER THOUSANDSMENDE KIK" + + "AKUI COMBINING NUMBER TEN THOUSANDSMENDE KIKAKUI COMBINING NUMBER HUNDRE" + + "D THOUSANDSMENDE KIKAKUI COMBINING NUMBER MILLIONSADLAM CAPITAL LETTER A" + + "LIFADLAM CAPITAL LETTER DAALIADLAM CAPITAL LETTER LAAMADLAM CAPITAL LETT" + + "ER MIIMADLAM CAPITAL LETTER BAADLAM CAPITAL LETTER SINNYIIYHEADLAM CAPIT" + + "AL LETTER PEADLAM CAPITAL LETTER BHEADLAM CAPITAL LETTER RAADLAM CAPITAL" + + " LETTER EADLAM CAPITAL LETTER FAADLAM CAPITAL LETTER IADLAM CAPITAL LETT" + + "ER OADLAM CAPITAL LETTER DHAADLAM CAPITAL LETTER YHEADLAM CAPITAL LETTER" + + " WAWADLAM CAPITAL LETTER NUNADLAM CAPITAL LETTER KAFADLAM CAPITAL LETTER" + + " YAADLAM CAPITAL LETTER UADLAM CAPITAL LETTER JIIMADLAM CAPITAL LETTER C") + ("" + + "HIADLAM CAPITAL LETTER HAADLAM CAPITAL LETTER QAAFADLAM CAPITAL LETTER G" + + "AADLAM CAPITAL LETTER NYAADLAM CAPITAL LETTER TUADLAM CAPITAL LETTER NHA" + + "ADLAM CAPITAL LETTER VAADLAM CAPITAL LETTER KHAADLAM CAPITAL LETTER GBEA" + + "DLAM CAPITAL LETTER ZALADLAM CAPITAL LETTER KPOADLAM CAPITAL LETTER SHAA" + + "DLAM SMALL LETTER ALIFADLAM SMALL LETTER DAALIADLAM SMALL LETTER LAAMADL" + + "AM SMALL LETTER MIIMADLAM SMALL LETTER BAADLAM SMALL LETTER SINNYIIYHEAD" + + "LAM SMALL LETTER PEADLAM SMALL LETTER BHEADLAM SMALL LETTER RAADLAM SMAL" + + "L LETTER EADLAM SMALL LETTER FAADLAM SMALL LETTER IADLAM SMALL LETTER OA" + + "DLAM SMALL LETTER DHAADLAM SMALL LETTER YHEADLAM SMALL LETTER WAWADLAM S" + + "MALL LETTER NUNADLAM SMALL LETTER KAFADLAM SMALL LETTER YAADLAM SMALL LE" + + "TTER UADLAM SMALL LETTER JIIMADLAM SMALL LETTER CHIADLAM SMALL LETTER HA" + + "ADLAM SMALL LETTER QAAFADLAM SMALL LETTER GAADLAM SMALL LETTER NYAADLAM " + + "SMALL LETTER TUADLAM SMALL LETTER NHAADLAM SMALL LETTER VAADLAM SMALL LE" + + "TTER KHAADLAM SMALL LETTER GBEADLAM SMALL LETTER ZALADLAM SMALL LETTER K" + + "POADLAM SMALL LETTER SHAADLAM ALIF LENGTHENERADLAM VOWEL LENGTHENERADLAM" + + " GEMINATION MARKADLAM HAMZAADLAM CONSONANT MODIFIERADLAM GEMINATE CONSON" + + "ANT MODIFIERADLAM NUKTAADLAM DIGIT ZEROADLAM DIGIT ONEADLAM DIGIT TWOADL" + + "AM DIGIT THREEADLAM DIGIT FOURADLAM DIGIT FIVEADLAM DIGIT SIXADLAM DIGIT" + + " SEVENADLAM DIGIT EIGHTADLAM DIGIT NINEADLAM INITIAL EXCLAMATION MARKADL" + + "AM INITIAL QUESTION MARKARABIC MATHEMATICAL ALEFARABIC MATHEMATICAL BEHA" + + "RABIC MATHEMATICAL JEEMARABIC MATHEMATICAL DALARABIC MATHEMATICAL WAWARA" + + "BIC MATHEMATICAL ZAINARABIC MATHEMATICAL HAHARABIC MATHEMATICAL TAHARABI" + + "C MATHEMATICAL YEHARABIC MATHEMATICAL KAFARABIC MATHEMATICAL LAMARABIC M" + + "ATHEMATICAL MEEMARABIC MATHEMATICAL NOONARABIC MATHEMATICAL SEENARABIC M" + + "ATHEMATICAL AINARABIC MATHEMATICAL FEHARABIC MATHEMATICAL SADARABIC MATH" + + "EMATICAL QAFARABIC MATHEMATICAL REHARABIC MATHEMATICAL SHEENARABIC MATHE" + + "MATICAL TEHARABIC MATHEMATICAL THEHARABIC MATHEMATICAL KHAHARABIC MATHEM" + + "ATICAL THALARABIC MATHEMATICAL DADARABIC MATHEMATICAL ZAHARABIC MATHEMAT" + + "ICAL GHAINARABIC MATHEMATICAL DOTLESS BEHARABIC MATHEMATICAL DOTLESS NOO" + + "NARABIC MATHEMATICAL DOTLESS FEHARABIC MATHEMATICAL DOTLESS QAFARABIC MA" + + "THEMATICAL INITIAL BEHARABIC MATHEMATICAL INITIAL JEEMARABIC MATHEMATICA" + + "L INITIAL HEHARABIC MATHEMATICAL INITIAL HAHARABIC MATHEMATICAL INITIAL " + + "YEHARABIC MATHEMATICAL INITIAL KAFARABIC MATHEMATICAL INITIAL LAMARABIC " + + "MATHEMATICAL INITIAL MEEMARABIC MATHEMATICAL INITIAL NOONARABIC MATHEMAT" + + "ICAL INITIAL SEENARABIC MATHEMATICAL INITIAL AINARABIC MATHEMATICAL INIT" + + "IAL FEHARABIC MATHEMATICAL INITIAL SADARABIC MATHEMATICAL INITIAL QAFARA" + + "BIC MATHEMATICAL INITIAL SHEENARABIC MATHEMATICAL INITIAL TEHARABIC MATH" + + "EMATICAL INITIAL THEHARABIC MATHEMATICAL INITIAL KHAHARABIC MATHEMATICAL" + + " INITIAL DADARABIC MATHEMATICAL INITIAL GHAINARABIC MATHEMATICAL TAILED " + + "JEEMARABIC MATHEMATICAL TAILED HAHARABIC MATHEMATICAL TAILED YEHARABIC M" + + "ATHEMATICAL TAILED LAMARABIC MATHEMATICAL TAILED NOONARABIC MATHEMATICAL" + + " TAILED SEENARABIC MATHEMATICAL TAILED AINARABIC MATHEMATICAL TAILED SAD" + + "ARABIC MATHEMATICAL TAILED QAFARABIC MATHEMATICAL TAILED SHEENARABIC MAT" + + "HEMATICAL TAILED KHAHARABIC MATHEMATICAL TAILED DADARABIC MATHEMATICAL T" + + "AILED GHAINARABIC MATHEMATICAL TAILED DOTLESS NOONARABIC MATHEMATICAL TA" + + "ILED DOTLESS QAFARABIC MATHEMATICAL STRETCHED BEHARABIC MATHEMATICAL STR" + + "ETCHED JEEMARABIC MATHEMATICAL STRETCHED HEHARABIC MATHEMATICAL STRETCHE" + + "D HAHARABIC MATHEMATICAL STRETCHED TAHARABIC MATHEMATICAL STRETCHED YEHA" + + "RABIC MATHEMATICAL STRETCHED KAFARABIC MATHEMATICAL STRETCHED MEEMARABIC" + + " MATHEMATICAL STRETCHED NOONARABIC MATHEMATICAL STRETCHED SEENARABIC MAT" + + "HEMATICAL STRETCHED AINARABIC MATHEMATICAL STRETCHED FEHARABIC MATHEMATI" + + "CAL STRETCHED SADARABIC MATHEMATICAL STRETCHED QAFARABIC MATHEMATICAL ST" + + "RETCHED SHEENARABIC MATHEMATICAL STRETCHED TEHARABIC MATHEMATICAL STRETC" + + "HED THEHARABIC MATHEMATICAL STRETCHED KHAHARABIC MATHEMATICAL STRETCHED " + + "DADARABIC MATHEMATICAL STRETCHED ZAHARABIC MATHEMATICAL STRETCHED GHAINA" + + "RABIC MATHEMATICAL STRETCHED DOTLESS BEHARABIC MATHEMATICAL STRETCHED DO" + + "TLESS FEHARABIC MATHEMATICAL LOOPED ALEFARABIC MATHEMATICAL LOOPED BEHAR" + + "ABIC MATHEMATICAL LOOPED JEEMARABIC MATHEMATICAL LOOPED DALARABIC MATHEM" + + "ATICAL LOOPED HEHARABIC MATHEMATICAL LOOPED WAWARABIC MATHEMATICAL LOOPE" + + "D ZAINARABIC MATHEMATICAL LOOPED HAHARABIC MATHEMATICAL LOOPED TAHARABIC" + + " MATHEMATICAL LOOPED YEHARABIC MATHEMATICAL LOOPED LAMARABIC MATHEMATICA" + + "L LOOPED MEEMARABIC MATHEMATICAL LOOPED NOONARABIC MATHEMATICAL LOOPED S" + + "EENARABIC MATHEMATICAL LOOPED AINARABIC MATHEMATICAL LOOPED FEHARABIC MA" + + "THEMATICAL LOOPED SADARABIC MATHEMATICAL LOOPED QAFARABIC MATHEMATICAL L") + ("" + + "OOPED REHARABIC MATHEMATICAL LOOPED SHEENARABIC MATHEMATICAL LOOPED TEHA" + + "RABIC MATHEMATICAL LOOPED THEHARABIC MATHEMATICAL LOOPED KHAHARABIC MATH" + + "EMATICAL LOOPED THALARABIC MATHEMATICAL LOOPED DADARABIC MATHEMATICAL LO" + + "OPED ZAHARABIC MATHEMATICAL LOOPED GHAINARABIC MATHEMATICAL DOUBLE-STRUC" + + "K BEHARABIC MATHEMATICAL DOUBLE-STRUCK JEEMARABIC MATHEMATICAL DOUBLE-ST" + + "RUCK DALARABIC MATHEMATICAL DOUBLE-STRUCK WAWARABIC MATHEMATICAL DOUBLE-" + + "STRUCK ZAINARABIC MATHEMATICAL DOUBLE-STRUCK HAHARABIC MATHEMATICAL DOUB" + + "LE-STRUCK TAHARABIC MATHEMATICAL DOUBLE-STRUCK YEHARABIC MATHEMATICAL DO" + + "UBLE-STRUCK LAMARABIC MATHEMATICAL DOUBLE-STRUCK MEEMARABIC MATHEMATICAL" + + " DOUBLE-STRUCK NOONARABIC MATHEMATICAL DOUBLE-STRUCK SEENARABIC MATHEMAT" + + "ICAL DOUBLE-STRUCK AINARABIC MATHEMATICAL DOUBLE-STRUCK FEHARABIC MATHEM" + + "ATICAL DOUBLE-STRUCK SADARABIC MATHEMATICAL DOUBLE-STRUCK QAFARABIC MATH" + + "EMATICAL DOUBLE-STRUCK REHARABIC MATHEMATICAL DOUBLE-STRUCK SHEENARABIC " + + "MATHEMATICAL DOUBLE-STRUCK TEHARABIC MATHEMATICAL DOUBLE-STRUCK THEHARAB" + + "IC MATHEMATICAL DOUBLE-STRUCK KHAHARABIC MATHEMATICAL DOUBLE-STRUCK THAL" + + "ARABIC MATHEMATICAL DOUBLE-STRUCK DADARABIC MATHEMATICAL DOUBLE-STRUCK Z" + + "AHARABIC MATHEMATICAL DOUBLE-STRUCK GHAINARABIC MATHEMATICAL OPERATOR ME" + + "EM WITH HAH WITH TATWEELARABIC MATHEMATICAL OPERATOR HAH WITH DALMAHJONG" + + " TILE EAST WINDMAHJONG TILE SOUTH WINDMAHJONG TILE WEST WINDMAHJONG TILE" + + " NORTH WINDMAHJONG TILE RED DRAGONMAHJONG TILE GREEN DRAGONMAHJONG TILE " + + "WHITE DRAGONMAHJONG TILE ONE OF CHARACTERSMAHJONG TILE TWO OF CHARACTERS" + + "MAHJONG TILE THREE OF CHARACTERSMAHJONG TILE FOUR OF CHARACTERSMAHJONG T" + + "ILE FIVE OF CHARACTERSMAHJONG TILE SIX OF CHARACTERSMAHJONG TILE SEVEN O" + + "F CHARACTERSMAHJONG TILE EIGHT OF CHARACTERSMAHJONG TILE NINE OF CHARACT" + + "ERSMAHJONG TILE ONE OF BAMBOOSMAHJONG TILE TWO OF BAMBOOSMAHJONG TILE TH" + + "REE OF BAMBOOSMAHJONG TILE FOUR OF BAMBOOSMAHJONG TILE FIVE OF BAMBOOSMA" + + "HJONG TILE SIX OF BAMBOOSMAHJONG TILE SEVEN OF BAMBOOSMAHJONG TILE EIGHT" + + " OF BAMBOOSMAHJONG TILE NINE OF BAMBOOSMAHJONG TILE ONE OF CIRCLESMAHJON" + + "G TILE TWO OF CIRCLESMAHJONG TILE THREE OF CIRCLESMAHJONG TILE FOUR OF C" + + "IRCLESMAHJONG TILE FIVE OF CIRCLESMAHJONG TILE SIX OF CIRCLESMAHJONG TIL" + + "E SEVEN OF CIRCLESMAHJONG TILE EIGHT OF CIRCLESMAHJONG TILE NINE OF CIRC" + + "LESMAHJONG TILE PLUMMAHJONG TILE ORCHIDMAHJONG TILE BAMBOOMAHJONG TILE C" + + "HRYSANTHEMUMMAHJONG TILE SPRINGMAHJONG TILE SUMMERMAHJONG TILE AUTUMNMAH" + + "JONG TILE WINTERMAHJONG TILE JOKERMAHJONG TILE BACKDOMINO TILE HORIZONTA" + + "L BACKDOMINO TILE HORIZONTAL-00-00DOMINO TILE HORIZONTAL-00-01DOMINO TIL" + + "E HORIZONTAL-00-02DOMINO TILE HORIZONTAL-00-03DOMINO TILE HORIZONTAL-00-" + + "04DOMINO TILE HORIZONTAL-00-05DOMINO TILE HORIZONTAL-00-06DOMINO TILE HO" + + "RIZONTAL-01-00DOMINO TILE HORIZONTAL-01-01DOMINO TILE HORIZONTAL-01-02DO" + + "MINO TILE HORIZONTAL-01-03DOMINO TILE HORIZONTAL-01-04DOMINO TILE HORIZO" + + "NTAL-01-05DOMINO TILE HORIZONTAL-01-06DOMINO TILE HORIZONTAL-02-00DOMINO" + + " TILE HORIZONTAL-02-01DOMINO TILE HORIZONTAL-02-02DOMINO TILE HORIZONTAL" + + "-02-03DOMINO TILE HORIZONTAL-02-04DOMINO TILE HORIZONTAL-02-05DOMINO TIL" + + "E HORIZONTAL-02-06DOMINO TILE HORIZONTAL-03-00DOMINO TILE HORIZONTAL-03-" + + "01DOMINO TILE HORIZONTAL-03-02DOMINO TILE HORIZONTAL-03-03DOMINO TILE HO" + + "RIZONTAL-03-04DOMINO TILE HORIZONTAL-03-05DOMINO TILE HORIZONTAL-03-06DO" + + "MINO TILE HORIZONTAL-04-00DOMINO TILE HORIZONTAL-04-01DOMINO TILE HORIZO" + + "NTAL-04-02DOMINO TILE HORIZONTAL-04-03DOMINO TILE HORIZONTAL-04-04DOMINO" + + " TILE HORIZONTAL-04-05DOMINO TILE HORIZONTAL-04-06DOMINO TILE HORIZONTAL" + + "-05-00DOMINO TILE HORIZONTAL-05-01DOMINO TILE HORIZONTAL-05-02DOMINO TIL" + + "E HORIZONTAL-05-03DOMINO TILE HORIZONTAL-05-04DOMINO TILE HORIZONTAL-05-" + + "05DOMINO TILE HORIZONTAL-05-06DOMINO TILE HORIZONTAL-06-00DOMINO TILE HO" + + "RIZONTAL-06-01DOMINO TILE HORIZONTAL-06-02DOMINO TILE HORIZONTAL-06-03DO" + + "MINO TILE HORIZONTAL-06-04DOMINO TILE HORIZONTAL-06-05DOMINO TILE HORIZO" + + "NTAL-06-06DOMINO TILE VERTICAL BACKDOMINO TILE VERTICAL-00-00DOMINO TILE" + + " VERTICAL-00-01DOMINO TILE VERTICAL-00-02DOMINO TILE VERTICAL-00-03DOMIN" + + "O TILE VERTICAL-00-04DOMINO TILE VERTICAL-00-05DOMINO TILE VERTICAL-00-0" + + "6DOMINO TILE VERTICAL-01-00DOMINO TILE VERTICAL-01-01DOMINO TILE VERTICA" + + "L-01-02DOMINO TILE VERTICAL-01-03DOMINO TILE VERTICAL-01-04DOMINO TILE V" + + "ERTICAL-01-05DOMINO TILE VERTICAL-01-06DOMINO TILE VERTICAL-02-00DOMINO " + + "TILE VERTICAL-02-01DOMINO TILE VERTICAL-02-02DOMINO TILE VERTICAL-02-03D" + + "OMINO TILE VERTICAL-02-04DOMINO TILE VERTICAL-02-05DOMINO TILE VERTICAL-" + + "02-06DOMINO TILE VERTICAL-03-00DOMINO TILE VERTICAL-03-01DOMINO TILE VER" + + "TICAL-03-02DOMINO TILE VERTICAL-03-03DOMINO TILE VERTICAL-03-04DOMINO TI" + + "LE VERTICAL-03-05DOMINO TILE VERTICAL-03-06DOMINO TILE VERTICAL-04-00DOM") + ("" + + "INO TILE VERTICAL-04-01DOMINO TILE VERTICAL-04-02DOMINO TILE VERTICAL-04" + + "-03DOMINO TILE VERTICAL-04-04DOMINO TILE VERTICAL-04-05DOMINO TILE VERTI" + + "CAL-04-06DOMINO TILE VERTICAL-05-00DOMINO TILE VERTICAL-05-01DOMINO TILE" + + " VERTICAL-05-02DOMINO TILE VERTICAL-05-03DOMINO TILE VERTICAL-05-04DOMIN" + + "O TILE VERTICAL-05-05DOMINO TILE VERTICAL-05-06DOMINO TILE VERTICAL-06-0" + + "0DOMINO TILE VERTICAL-06-01DOMINO TILE VERTICAL-06-02DOMINO TILE VERTICA" + + "L-06-03DOMINO TILE VERTICAL-06-04DOMINO TILE VERTICAL-06-05DOMINO TILE V" + + "ERTICAL-06-06PLAYING CARD BACKPLAYING CARD ACE OF SPADESPLAYING CARD TWO" + + " OF SPADESPLAYING CARD THREE OF SPADESPLAYING CARD FOUR OF SPADESPLAYING" + + " CARD FIVE OF SPADESPLAYING CARD SIX OF SPADESPLAYING CARD SEVEN OF SPAD" + + "ESPLAYING CARD EIGHT OF SPADESPLAYING CARD NINE OF SPADESPLAYING CARD TE" + + "N OF SPADESPLAYING CARD JACK OF SPADESPLAYING CARD KNIGHT OF SPADESPLAYI" + + "NG CARD QUEEN OF SPADESPLAYING CARD KING OF SPADESPLAYING CARD ACE OF HE" + + "ARTSPLAYING CARD TWO OF HEARTSPLAYING CARD THREE OF HEARTSPLAYING CARD F" + + "OUR OF HEARTSPLAYING CARD FIVE OF HEARTSPLAYING CARD SIX OF HEARTSPLAYIN" + + "G CARD SEVEN OF HEARTSPLAYING CARD EIGHT OF HEARTSPLAYING CARD NINE OF H" + + "EARTSPLAYING CARD TEN OF HEARTSPLAYING CARD JACK OF HEARTSPLAYING CARD K" + + "NIGHT OF HEARTSPLAYING CARD QUEEN OF HEARTSPLAYING CARD KING OF HEARTSPL" + + "AYING CARD RED JOKERPLAYING CARD ACE OF DIAMONDSPLAYING CARD TWO OF DIAM" + + "ONDSPLAYING CARD THREE OF DIAMONDSPLAYING CARD FOUR OF DIAMONDSPLAYING C" + + "ARD FIVE OF DIAMONDSPLAYING CARD SIX OF DIAMONDSPLAYING CARD SEVEN OF DI" + + "AMONDSPLAYING CARD EIGHT OF DIAMONDSPLAYING CARD NINE OF DIAMONDSPLAYING" + + " CARD TEN OF DIAMONDSPLAYING CARD JACK OF DIAMONDSPLAYING CARD KNIGHT OF" + + " DIAMONDSPLAYING CARD QUEEN OF DIAMONDSPLAYING CARD KING OF DIAMONDSPLAY" + + "ING CARD BLACK JOKERPLAYING CARD ACE OF CLUBSPLAYING CARD TWO OF CLUBSPL" + + "AYING CARD THREE OF CLUBSPLAYING CARD FOUR OF CLUBSPLAYING CARD FIVE OF " + + "CLUBSPLAYING CARD SIX OF CLUBSPLAYING CARD SEVEN OF CLUBSPLAYING CARD EI" + + "GHT OF CLUBSPLAYING CARD NINE OF CLUBSPLAYING CARD TEN OF CLUBSPLAYING C" + + "ARD JACK OF CLUBSPLAYING CARD KNIGHT OF CLUBSPLAYING CARD QUEEN OF CLUBS" + + "PLAYING CARD KING OF CLUBSPLAYING CARD WHITE JOKERPLAYING CARD FOOLPLAYI" + + "NG CARD TRUMP-1PLAYING CARD TRUMP-2PLAYING CARD TRUMP-3PLAYING CARD TRUM" + + "P-4PLAYING CARD TRUMP-5PLAYING CARD TRUMP-6PLAYING CARD TRUMP-7PLAYING C" + + "ARD TRUMP-8PLAYING CARD TRUMP-9PLAYING CARD TRUMP-10PLAYING CARD TRUMP-1" + + "1PLAYING CARD TRUMP-12PLAYING CARD TRUMP-13PLAYING CARD TRUMP-14PLAYING " + + "CARD TRUMP-15PLAYING CARD TRUMP-16PLAYING CARD TRUMP-17PLAYING CARD TRUM" + + "P-18PLAYING CARD TRUMP-19PLAYING CARD TRUMP-20PLAYING CARD TRUMP-21DIGIT" + + " ZERO FULL STOPDIGIT ZERO COMMADIGIT ONE COMMADIGIT TWO COMMADIGIT THREE" + + " COMMADIGIT FOUR COMMADIGIT FIVE COMMADIGIT SIX COMMADIGIT SEVEN COMMADI" + + "GIT EIGHT COMMADIGIT NINE COMMADINGBAT CIRCLED SANS-SERIF DIGIT ZERODING" + + "BAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZEROPARENTHESIZED LATIN CAPITAL LE" + + "TTER APARENTHESIZED LATIN CAPITAL LETTER BPARENTHESIZED LATIN CAPITAL LE" + + "TTER CPARENTHESIZED LATIN CAPITAL LETTER DPARENTHESIZED LATIN CAPITAL LE" + + "TTER EPARENTHESIZED LATIN CAPITAL LETTER FPARENTHESIZED LATIN CAPITAL LE" + + "TTER GPARENTHESIZED LATIN CAPITAL LETTER HPARENTHESIZED LATIN CAPITAL LE" + + "TTER IPARENTHESIZED LATIN CAPITAL LETTER JPARENTHESIZED LATIN CAPITAL LE" + + "TTER KPARENTHESIZED LATIN CAPITAL LETTER LPARENTHESIZED LATIN CAPITAL LE" + + "TTER MPARENTHESIZED LATIN CAPITAL LETTER NPARENTHESIZED LATIN CAPITAL LE" + + "TTER OPARENTHESIZED LATIN CAPITAL LETTER PPARENTHESIZED LATIN CAPITAL LE" + + "TTER QPARENTHESIZED LATIN CAPITAL LETTER RPARENTHESIZED LATIN CAPITAL LE" + + "TTER SPARENTHESIZED LATIN CAPITAL LETTER TPARENTHESIZED LATIN CAPITAL LE" + + "TTER UPARENTHESIZED LATIN CAPITAL LETTER VPARENTHESIZED LATIN CAPITAL LE" + + "TTER WPARENTHESIZED LATIN CAPITAL LETTER XPARENTHESIZED LATIN CAPITAL LE" + + "TTER YPARENTHESIZED LATIN CAPITAL LETTER ZTORTOISE SHELL BRACKETED LATIN" + + " CAPITAL LETTER SCIRCLED ITALIC LATIN CAPITAL LETTER CCIRCLED ITALIC LAT" + + "IN CAPITAL LETTER RCIRCLED CDCIRCLED WZSQUARED LATIN CAPITAL LETTER ASQU" + + "ARED LATIN CAPITAL LETTER BSQUARED LATIN CAPITAL LETTER CSQUARED LATIN C" + + "APITAL LETTER DSQUARED LATIN CAPITAL LETTER ESQUARED LATIN CAPITAL LETTE" + + "R FSQUARED LATIN CAPITAL LETTER GSQUARED LATIN CAPITAL LETTER HSQUARED L" + + "ATIN CAPITAL LETTER ISQUARED LATIN CAPITAL LETTER JSQUARED LATIN CAPITAL" + + " LETTER KSQUARED LATIN CAPITAL LETTER LSQUARED LATIN CAPITAL LETTER MSQU" + + "ARED LATIN CAPITAL LETTER NSQUARED LATIN CAPITAL LETTER OSQUARED LATIN C" + + "APITAL LETTER PSQUARED LATIN CAPITAL LETTER QSQUARED LATIN CAPITAL LETTE" + + "R RSQUARED LATIN CAPITAL LETTER SSQUARED LATIN CAPITAL LETTER TSQUARED L" + + "ATIN CAPITAL LETTER USQUARED LATIN CAPITAL LETTER VSQUARED LATIN CAPITAL") + ("" + + " LETTER WSQUARED LATIN CAPITAL LETTER XSQUARED LATIN CAPITAL LETTER YSQU" + + "ARED LATIN CAPITAL LETTER ZSQUARED HVSQUARED MVSQUARED SDSQUARED SSSQUAR" + + "ED PPVSQUARED WCNEGATIVE CIRCLED LATIN CAPITAL LETTER ANEGATIVE CIRCLED " + + "LATIN CAPITAL LETTER BNEGATIVE CIRCLED LATIN CAPITAL LETTER CNEGATIVE CI" + + "RCLED LATIN CAPITAL LETTER DNEGATIVE CIRCLED LATIN CAPITAL LETTER ENEGAT" + + "IVE CIRCLED LATIN CAPITAL LETTER FNEGATIVE CIRCLED LATIN CAPITAL LETTER " + + "GNEGATIVE CIRCLED LATIN CAPITAL LETTER HNEGATIVE CIRCLED LATIN CAPITAL L" + + "ETTER INEGATIVE CIRCLED LATIN CAPITAL LETTER JNEGATIVE CIRCLED LATIN CAP" + + "ITAL LETTER KNEGATIVE CIRCLED LATIN CAPITAL LETTER LNEGATIVE CIRCLED LAT" + + "IN CAPITAL LETTER MNEGATIVE CIRCLED LATIN CAPITAL LETTER NNEGATIVE CIRCL" + + "ED LATIN CAPITAL LETTER ONEGATIVE CIRCLED LATIN CAPITAL LETTER PNEGATIVE" + + " CIRCLED LATIN CAPITAL LETTER QNEGATIVE CIRCLED LATIN CAPITAL LETTER RNE" + + "GATIVE CIRCLED LATIN CAPITAL LETTER SNEGATIVE CIRCLED LATIN CAPITAL LETT" + + "ER TNEGATIVE CIRCLED LATIN CAPITAL LETTER UNEGATIVE CIRCLED LATIN CAPITA" + + "L LETTER VNEGATIVE CIRCLED LATIN CAPITAL LETTER WNEGATIVE CIRCLED LATIN " + + "CAPITAL LETTER XNEGATIVE CIRCLED LATIN CAPITAL LETTER YNEGATIVE CIRCLED " + + "LATIN CAPITAL LETTER ZRAISED MC SIGNRAISED MD SIGNNEGATIVE SQUARED LATIN" + + " CAPITAL LETTER ANEGATIVE SQUARED LATIN CAPITAL LETTER BNEGATIVE SQUARED" + + " LATIN CAPITAL LETTER CNEGATIVE SQUARED LATIN CAPITAL LETTER DNEGATIVE S" + + "QUARED LATIN CAPITAL LETTER ENEGATIVE SQUARED LATIN CAPITAL LETTER FNEGA" + + "TIVE SQUARED LATIN CAPITAL LETTER GNEGATIVE SQUARED LATIN CAPITAL LETTER" + + " HNEGATIVE SQUARED LATIN CAPITAL LETTER INEGATIVE SQUARED LATIN CAPITAL " + + "LETTER JNEGATIVE SQUARED LATIN CAPITAL LETTER KNEGATIVE SQUARED LATIN CA" + + "PITAL LETTER LNEGATIVE SQUARED LATIN CAPITAL LETTER MNEGATIVE SQUARED LA" + + "TIN CAPITAL LETTER NNEGATIVE SQUARED LATIN CAPITAL LETTER ONEGATIVE SQUA" + + "RED LATIN CAPITAL LETTER PNEGATIVE SQUARED LATIN CAPITAL LETTER QNEGATIV" + + "E SQUARED LATIN CAPITAL LETTER RNEGATIVE SQUARED LATIN CAPITAL LETTER SN" + + "EGATIVE SQUARED LATIN CAPITAL LETTER TNEGATIVE SQUARED LATIN CAPITAL LET" + + "TER UNEGATIVE SQUARED LATIN CAPITAL LETTER VNEGATIVE SQUARED LATIN CAPIT" + + "AL LETTER WNEGATIVE SQUARED LATIN CAPITAL LETTER XNEGATIVE SQUARED LATIN" + + " CAPITAL LETTER YNEGATIVE SQUARED LATIN CAPITAL LETTER ZCROSSED NEGATIVE" + + " SQUARED LATIN CAPITAL LETTER PNEGATIVE SQUARED ICNEGATIVE SQUARED PANEG" + + "ATIVE SQUARED SANEGATIVE SQUARED ABNEGATIVE SQUARED WCSQUARE DJSQUARED C" + + "LSQUARED COOLSQUARED FREESQUARED IDSQUARED NEWSQUARED NGSQUARED OKSQUARE" + + "D SOSSQUARED UP WITH EXCLAMATION MARKSQUARED VSSQUARED THREE DSQUARED SE" + + "COND SCREENSQUARED TWO KSQUARED FOUR KSQUARED EIGHT KSQUARED FIVE POINT " + + "ONESQUARED SEVEN POINT ONESQUARED TWENTY-TWO POINT TWOSQUARED SIXTY PSQU" + + "ARED ONE HUNDRED TWENTY PSQUARED LATIN SMALL LETTER DSQUARED HCSQUARED H" + + "DRSQUARED HI-RESSQUARED LOSSLESSSQUARED SHVSQUARED UHDSQUARED VODREGIONA" + + "L INDICATOR SYMBOL LETTER AREGIONAL INDICATOR SYMBOL LETTER BREGIONAL IN" + + "DICATOR SYMBOL LETTER CREGIONAL INDICATOR SYMBOL LETTER DREGIONAL INDICA" + + "TOR SYMBOL LETTER EREGIONAL INDICATOR SYMBOL LETTER FREGIONAL INDICATOR " + + "SYMBOL LETTER GREGIONAL INDICATOR SYMBOL LETTER HREGIONAL INDICATOR SYMB" + + "OL LETTER IREGIONAL INDICATOR SYMBOL LETTER JREGIONAL INDICATOR SYMBOL L" + + "ETTER KREGIONAL INDICATOR SYMBOL LETTER LREGIONAL INDICATOR SYMBOL LETTE" + + "R MREGIONAL INDICATOR SYMBOL LETTER NREGIONAL INDICATOR SYMBOL LETTER OR" + + "EGIONAL INDICATOR SYMBOL LETTER PREGIONAL INDICATOR SYMBOL LETTER QREGIO" + + "NAL INDICATOR SYMBOL LETTER RREGIONAL INDICATOR SYMBOL LETTER SREGIONAL " + + "INDICATOR SYMBOL LETTER TREGIONAL INDICATOR SYMBOL LETTER UREGIONAL INDI" + + "CATOR SYMBOL LETTER VREGIONAL INDICATOR SYMBOL LETTER WREGIONAL INDICATO" + + "R SYMBOL LETTER XREGIONAL INDICATOR SYMBOL LETTER YREGIONAL INDICATOR SY" + + "MBOL LETTER ZSQUARE HIRAGANA HOKASQUARED KATAKANA KOKOSQUARED KATAKANA S" + + "ASQUARED CJK UNIFIED IDEOGRAPH-624BSQUARED CJK UNIFIED IDEOGRAPH-5B57SQU" + + "ARED CJK UNIFIED IDEOGRAPH-53CCSQUARED KATAKANA DESQUARED CJK UNIFIED ID" + + "EOGRAPH-4E8CSQUARED CJK UNIFIED IDEOGRAPH-591ASQUARED CJK UNIFIED IDEOGR" + + "APH-89E3SQUARED CJK UNIFIED IDEOGRAPH-5929SQUARED CJK UNIFIED IDEOGRAPH-" + + "4EA4SQUARED CJK UNIFIED IDEOGRAPH-6620SQUARED CJK UNIFIED IDEOGRAPH-7121" + + "SQUARED CJK UNIFIED IDEOGRAPH-6599SQUARED CJK UNIFIED IDEOGRAPH-524DSQUA" + + "RED CJK UNIFIED IDEOGRAPH-5F8CSQUARED CJK UNIFIED IDEOGRAPH-518DSQUARED " + + "CJK UNIFIED IDEOGRAPH-65B0SQUARED CJK UNIFIED IDEOGRAPH-521DSQUARED CJK " + + "UNIFIED IDEOGRAPH-7D42SQUARED CJK UNIFIED IDEOGRAPH-751FSQUARED CJK UNIF" + + "IED IDEOGRAPH-8CA9SQUARED CJK UNIFIED IDEOGRAPH-58F0SQUARED CJK UNIFIED " + + "IDEOGRAPH-5439SQUARED CJK UNIFIED IDEOGRAPH-6F14SQUARED CJK UNIFIED IDEO" + + "GRAPH-6295SQUARED CJK UNIFIED IDEOGRAPH-6355SQUARED CJK UNIFIED IDEOGRAP") + ("" + + "H-4E00SQUARED CJK UNIFIED IDEOGRAPH-4E09SQUARED CJK UNIFIED IDEOGRAPH-90" + + "4ASQUARED CJK UNIFIED IDEOGRAPH-5DE6SQUARED CJK UNIFIED IDEOGRAPH-4E2DSQ" + + "UARED CJK UNIFIED IDEOGRAPH-53F3SQUARED CJK UNIFIED IDEOGRAPH-6307SQUARE" + + "D CJK UNIFIED IDEOGRAPH-8D70SQUARED CJK UNIFIED IDEOGRAPH-6253SQUARED CJ" + + "K UNIFIED IDEOGRAPH-7981SQUARED CJK UNIFIED IDEOGRAPH-7A7ASQUARED CJK UN" + + "IFIED IDEOGRAPH-5408SQUARED CJK UNIFIED IDEOGRAPH-6E80SQUARED CJK UNIFIE" + + "D IDEOGRAPH-6709SQUARED CJK UNIFIED IDEOGRAPH-6708SQUARED CJK UNIFIED ID" + + "EOGRAPH-7533SQUARED CJK UNIFIED IDEOGRAPH-5272SQUARED CJK UNIFIED IDEOGR" + + "APH-55B6SQUARED CJK UNIFIED IDEOGRAPH-914DTORTOISE SHELL BRACKETED CJK U" + + "NIFIED IDEOGRAPH-672CTORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09" + + "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8CTORTOISE SHELL BRACKE" + + "TED CJK UNIFIED IDEOGRAPH-5B89TORTOISE SHELL BRACKETED CJK UNIFIED IDEOG" + + "RAPH-70B9TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253TORTOISE SHE" + + "LL BRACKETED CJK UNIFIED IDEOGRAPH-76D7TORTOISE SHELL BRACKETED CJK UNIF" + + "IED IDEOGRAPH-52DDTORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557CIR" + + "CLED IDEOGRAPH ADVANTAGECIRCLED IDEOGRAPH ACCEPTCYCLONEFOGGYCLOSED UMBRE" + + "LLANIGHT WITH STARSSUNRISE OVER MOUNTAINSSUNRISECITYSCAPE AT DUSKSUNSET " + + "OVER BUILDINGSRAINBOWBRIDGE AT NIGHTWATER WAVEVOLCANOMILKY WAYEARTH GLOB" + + "E EUROPE-AFRICAEARTH GLOBE AMERICASEARTH GLOBE ASIA-AUSTRALIAGLOBE WITH " + + "MERIDIANSNEW MOON SYMBOLWAXING CRESCENT MOON SYMBOLFIRST QUARTER MOON SY" + + "MBOLWAXING GIBBOUS MOON SYMBOLFULL MOON SYMBOLWANING GIBBOUS MOON SYMBOL" + + "LAST QUARTER MOON SYMBOLWANING CRESCENT MOON SYMBOLCRESCENT MOONNEW MOON" + + " WITH FACEFIRST QUARTER MOON WITH FACELAST QUARTER MOON WITH FACEFULL MO" + + "ON WITH FACESUN WITH FACEGLOWING STARSHOOTING STARTHERMOMETERBLACK DROPL" + + "ETWHITE SUNWHITE SUN WITH SMALL CLOUDWHITE SUN BEHIND CLOUDWHITE SUN BEH" + + "IND CLOUD WITH RAINCLOUD WITH RAINCLOUD WITH SNOWCLOUD WITH LIGHTNINGCLO" + + "UD WITH TORNADOFOGWIND BLOWING FACEHOT DOGTACOBURRITOCHESTNUTSEEDLINGEVE" + + "RGREEN TREEDECIDUOUS TREEPALM TREECACTUSHOT PEPPERTULIPCHERRY BLOSSOMROS" + + "EHIBISCUSSUNFLOWERBLOSSOMEAR OF MAIZEEAR OF RICEHERBFOUR LEAF CLOVERMAPL" + + "E LEAFFALLEN LEAFLEAF FLUTTERING IN WINDMUSHROOMTOMATOAUBERGINEGRAPESMEL" + + "ONWATERMELONTANGERINELEMONBANANAPINEAPPLERED APPLEGREEN APPLEPEARPEACHCH" + + "ERRIESSTRAWBERRYHAMBURGERSLICE OF PIZZAMEAT ON BONEPOULTRY LEGRICE CRACK" + + "ERRICE BALLCOOKED RICECURRY AND RICESTEAMING BOWLSPAGHETTIBREADFRENCH FR" + + "IESROASTED SWEET POTATODANGOODENSUSHIFRIED SHRIMPFISH CAKE WITH SWIRL DE" + + "SIGNSOFT ICE CREAMSHAVED ICEICE CREAMDOUGHNUTCOOKIECHOCOLATE BARCANDYLOL" + + "LIPOPCUSTARDHONEY POTSHORTCAKEBENTO BOXPOT OF FOODCOOKINGFORK AND KNIFET" + + "EACUP WITHOUT HANDLESAKE BOTTLE AND CUPWINE GLASSCOCKTAIL GLASSTROPICAL " + + "DRINKBEER MUGCLINKING BEER MUGSBABY BOTTLEFORK AND KNIFE WITH PLATEBOTTL" + + "E WITH POPPING CORKPOPCORNRIBBONWRAPPED PRESENTBIRTHDAY CAKEJACK-O-LANTE" + + "RNCHRISTMAS TREEFATHER CHRISTMASFIREWORKSFIREWORK SPARKLERBALLOONPARTY P" + + "OPPERCONFETTI BALLTANABATA TREECROSSED FLAGSPINE DECORATIONJAPANESE DOLL" + + "SCARP STREAMERWIND CHIMEMOON VIEWING CEREMONYSCHOOL SATCHELGRADUATION CA" + + "PHEART WITH TIP ON THE LEFTBOUQUET OF FLOWERSMILITARY MEDALREMINDER RIBB" + + "ONMUSICAL KEYBOARD WITH JACKSSTUDIO MICROPHONELEVEL SLIDERCONTROL KNOBSB" + + "EAMED ASCENDING MUSICAL NOTESBEAMED DESCENDING MUSICAL NOTESFILM FRAMESA" + + "DMISSION TICKETSCAROUSEL HORSEFERRIS WHEELROLLER COASTERFISHING POLE AND" + + " FISHMICROPHONEMOVIE CAMERACINEMAHEADPHONEARTIST PALETTETOP HATCIRCUS TE" + + "NTTICKETCLAPPER BOARDPERFORMING ARTSVIDEO GAMEDIRECT HITSLOT MACHINEBILL" + + "IARDSGAME DIEBOWLINGFLOWER PLAYING CARDSMUSICAL NOTEMULTIPLE MUSICAL NOT" + + "ESSAXOPHONEGUITARMUSICAL KEYBOARDTRUMPETVIOLINMUSICAL SCORERUNNING SHIRT" + + " WITH SASHTENNIS RACQUET AND BALLSKI AND SKI BOOTBASKETBALL AND HOOPCHEQ" + + "UERED FLAGSNOWBOARDERRUNNERSURFERSPORTS MEDALTROPHYHORSE RACINGAMERICAN " + + "FOOTBALLRUGBY FOOTBALLSWIMMERWEIGHT LIFTERGOLFERRACING MOTORCYCLERACING " + + "CARCRICKET BAT AND BALLVOLLEYBALLFIELD HOCKEY STICK AND BALLICE HOCKEY S" + + "TICK AND PUCKTABLE TENNIS PADDLE AND BALLSNOW CAPPED MOUNTAINCAMPINGBEAC" + + "H WITH UMBRELLABUILDING CONSTRUCTIONHOUSE BUILDINGSCITYSCAPEDERELICT HOU" + + "SE BUILDINGCLASSICAL BUILDINGDESERTDESERT ISLANDNATIONAL PARKSTADIUMHOUS" + + "E BUILDINGHOUSE WITH GARDENOFFICE BUILDINGJAPANESE POST OFFICEEUROPEAN P" + + "OST OFFICEHOSPITALBANKAUTOMATED TELLER MACHINEHOTELLOVE HOTELCONVENIENCE" + + " STORESCHOOLDEPARTMENT STOREFACTORYIZAKAYA LANTERNJAPANESE CASTLEEUROPEA" + + "N CASTLEWHITE PENNANTBLACK PENNANTWAVING WHITE FLAGWAVING BLACK FLAGROSE" + + "TTEBLACK ROSETTELABELBADMINTON RACQUET AND SHUTTLECOCKBOW AND ARROWAMPHO" + + "RAEMOJI MODIFIER FITZPATRICK TYPE-1-2EMOJI MODIFIER FITZPATRICK TYPE-3EM" + + "OJI MODIFIER FITZPATRICK TYPE-4EMOJI MODIFIER FITZPATRICK TYPE-5EMOJI MO") + ("" + + "DIFIER FITZPATRICK TYPE-6RATMOUSEOXWATER BUFFALOCOWTIGERLEOPARDRABBITCAT" + + "DRAGONCROCODILEWHALESNAILSNAKEHORSERAMGOATSHEEPMONKEYROOSTERCHICKENDOGPI" + + "GBOARELEPHANTOCTOPUSSPIRAL SHELLBUGANTHONEYBEELADY BEETLEFISHTROPICAL FI" + + "SHBLOWFISHTURTLEHATCHING CHICKBABY CHICKFRONT-FACING BABY CHICKBIRDPENGU" + + "INKOALAPOODLEDROMEDARY CAMELBACTRIAN CAMELDOLPHINMOUSE FACECOW FACETIGER" + + " FACERABBIT FACECAT FACEDRAGON FACESPOUTING WHALEHORSE FACEMONKEY FACEDO" + + "G FACEPIG FACEFROG FACEHAMSTER FACEWOLF FACEBEAR FACEPANDA FACEPIG NOSEP" + + "AW PRINTSCHIPMUNKEYESEYEEARNOSEMOUTHTONGUEWHITE UP POINTING BACKHAND IND" + + "EXWHITE DOWN POINTING BACKHAND INDEXWHITE LEFT POINTING BACKHAND INDEXWH" + + "ITE RIGHT POINTING BACKHAND INDEXFISTED HAND SIGNWAVING HAND SIGNOK HAND" + + " SIGNTHUMBS UP SIGNTHUMBS DOWN SIGNCLAPPING HANDS SIGNOPEN HANDS SIGNCRO" + + "WNWOMANS HATEYEGLASSESNECKTIET-SHIRTJEANSDRESSKIMONOBIKINIWOMANS CLOTHES" + + "PURSEHANDBAGPOUCHMANS SHOEATHLETIC SHOEHIGH-HEELED SHOEWOMANS SANDALWOMA" + + "NS BOOTSFOOTPRINTSBUST IN SILHOUETTEBUSTS IN SILHOUETTEBOYGIRLMANWOMANFA" + + "MILYMAN AND WOMAN HOLDING HANDSTWO MEN HOLDING HANDSTWO WOMEN HOLDING HA" + + "NDSPOLICE OFFICERWOMAN WITH BUNNY EARSBRIDE WITH VEILPERSON WITH BLOND H" + + "AIRMAN WITH GUA PI MAOMAN WITH TURBANOLDER MANOLDER WOMANBABYCONSTRUCTIO" + + "N WORKERPRINCESSJAPANESE OGREJAPANESE GOBLINGHOSTBABY ANGELEXTRATERRESTR" + + "IAL ALIENALIEN MONSTERIMPSKULLINFORMATION DESK PERSONGUARDSMANDANCERLIPS" + + "TICKNAIL POLISHFACE MASSAGEHAIRCUTBARBER POLESYRINGEPILLKISS MARKLOVE LE" + + "TTERRINGGEM STONEKISSBOUQUETCOUPLE WITH HEARTWEDDINGBEATING HEARTBROKEN " + + "HEARTTWO HEARTSSPARKLING HEARTGROWING HEARTHEART WITH ARROWBLUE HEARTGRE" + + "EN HEARTYELLOW HEARTPURPLE HEARTHEART WITH RIBBONREVOLVING HEARTSHEART D" + + "ECORATIONDIAMOND SHAPE WITH A DOT INSIDEELECTRIC LIGHT BULBANGER SYMBOLB" + + "OMBSLEEPING SYMBOLCOLLISION SYMBOLSPLASHING SWEAT SYMBOLDROPLETDASH SYMB" + + "OLPILE OF POOFLEXED BICEPSDIZZY SYMBOLSPEECH BALLOONTHOUGHT BALLOONWHITE" + + " FLOWERHUNDRED POINTS SYMBOLMONEY BAGCURRENCY EXCHANGEHEAVY DOLLAR SIGNC" + + "REDIT CARDBANKNOTE WITH YEN SIGNBANKNOTE WITH DOLLAR SIGNBANKNOTE WITH E" + + "URO SIGNBANKNOTE WITH POUND SIGNMONEY WITH WINGSCHART WITH UPWARDS TREND" + + " AND YEN SIGNSEATPERSONAL COMPUTERBRIEFCASEMINIDISCFLOPPY DISKOPTICAL DI" + + "SCDVDFILE FOLDEROPEN FILE FOLDERPAGE WITH CURLPAGE FACING UPCALENDARTEAR" + + "-OFF CALENDARCARD INDEXCHART WITH UPWARDS TRENDCHART WITH DOWNWARDS TREN" + + "DBAR CHARTCLIPBOARDPUSHPINROUND PUSHPINPAPERCLIPSTRAIGHT RULERTRIANGULAR" + + " RULERBOOKMARK TABSLEDGERNOTEBOOKNOTEBOOK WITH DECORATIVE COVERCLOSED BO" + + "OKOPEN BOOKGREEN BOOKBLUE BOOKORANGE BOOKBOOKSNAME BADGESCROLLMEMOTELEPH" + + "ONE RECEIVERPAGERFAX MACHINESATELLITE ANTENNAPUBLIC ADDRESS LOUDSPEAKERC" + + "HEERING MEGAPHONEOUTBOX TRAYINBOX TRAYPACKAGEE-MAIL SYMBOLINCOMING ENVEL" + + "OPEENVELOPE WITH DOWNWARDS ARROW ABOVECLOSED MAILBOX WITH LOWERED FLAGCL" + + "OSED MAILBOX WITH RAISED FLAGOPEN MAILBOX WITH RAISED FLAGOPEN MAILBOX W" + + "ITH LOWERED FLAGPOSTBOXPOSTAL HORNNEWSPAPERMOBILE PHONEMOBILE PHONE WITH" + + " RIGHTWARDS ARROW AT LEFTVIBRATION MODEMOBILE PHONE OFFNO MOBILE PHONESA" + + "NTENNA WITH BARSCAMERACAMERA WITH FLASHVIDEO CAMERATELEVISIONRADIOVIDEOC" + + "ASSETTEFILM PROJECTORPORTABLE STEREOPRAYER BEADSTWISTED RIGHTWARDS ARROW" + + "SCLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWSCLOCKWISE RIGHTWAR" + + "DS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAYCLOCKWISE DO" + + "WNWARDS AND UPWARDS OPEN CIRCLE ARROWSANTICLOCKWISE DOWNWARDS AND UPWARD" + + "S OPEN CIRCLE ARROWSLOW BRIGHTNESS SYMBOLHIGH BRIGHTNESS SYMBOLSPEAKER W" + + "ITH CANCELLATION STROKESPEAKERSPEAKER WITH ONE SOUND WAVESPEAKER WITH TH" + + "REE SOUND WAVESBATTERYELECTRIC PLUGLEFT-POINTING MAGNIFYING GLASSRIGHT-P" + + "OINTING MAGNIFYING GLASSLOCK WITH INK PENCLOSED LOCK WITH KEYKEYLOCKOPEN" + + " LOCKBELLBELL WITH CANCELLATION STROKEBOOKMARKLINK SYMBOLRADIO BUTTONBAC" + + "K WITH LEFTWARDS ARROW ABOVEEND WITH LEFTWARDS ARROW ABOVEON WITH EXCLAM" + + "ATION MARK WITH LEFT RIGHT ARROW ABOVESOON WITH RIGHTWARDS ARROW ABOVETO" + + "P WITH UPWARDS ARROW ABOVENO ONE UNDER EIGHTEEN SYMBOLKEYCAP TENINPUT SY" + + "MBOL FOR LATIN CAPITAL LETTERSINPUT SYMBOL FOR LATIN SMALL LETTERSINPUT " + + "SYMBOL FOR NUMBERSINPUT SYMBOL FOR SYMBOLSINPUT SYMBOL FOR LATIN LETTERS" + + "FIREELECTRIC TORCHWRENCHHAMMERNUT AND BOLTHOCHOPISTOLMICROSCOPETELESCOPE" + + "CRYSTAL BALLSIX POINTED STAR WITH MIDDLE DOTJAPANESE SYMBOL FOR BEGINNER" + + "TRIDENT EMBLEMBLACK SQUARE BUTTONWHITE SQUARE BUTTONLARGE RED CIRCLELARG" + + "E BLUE CIRCLELARGE ORANGE DIAMONDLARGE BLUE DIAMONDSMALL ORANGE DIAMONDS" + + "MALL BLUE DIAMONDUP-POINTING RED TRIANGLEDOWN-POINTING RED TRIANGLEUP-PO" + + "INTING SMALL RED TRIANGLEDOWN-POINTING SMALL RED TRIANGLELOWER RIGHT SHA" + + "DOWED WHITE CIRCLEUPPER RIGHT SHADOWED WHITE CIRCLECIRCLED CROSS POMMEEC" + + "ROSS POMMEE WITH HALF-CIRCLE BELOWCROSS POMMEENOTCHED LEFT SEMICIRCLE WI") + ("" + + "TH THREE DOTSNOTCHED RIGHT SEMICIRCLE WITH THREE DOTSSYMBOL FOR MARKS CH" + + "APTERWHITE LATIN CROSSHEAVY LATIN CROSSCELTIC CROSSOM SYMBOLDOVE OF PEAC" + + "EKAABAMOSQUESYNAGOGUEMENORAH WITH NINE BRANCHESBOWL OF HYGIEIACLOCK FACE" + + " ONE OCLOCKCLOCK FACE TWO OCLOCKCLOCK FACE THREE OCLOCKCLOCK FACE FOUR O" + + "CLOCKCLOCK FACE FIVE OCLOCKCLOCK FACE SIX OCLOCKCLOCK FACE SEVEN OCLOCKC" + + "LOCK FACE EIGHT OCLOCKCLOCK FACE NINE OCLOCKCLOCK FACE TEN OCLOCKCLOCK F" + + "ACE ELEVEN OCLOCKCLOCK FACE TWELVE OCLOCKCLOCK FACE ONE-THIRTYCLOCK FACE" + + " TWO-THIRTYCLOCK FACE THREE-THIRTYCLOCK FACE FOUR-THIRTYCLOCK FACE FIVE-" + + "THIRTYCLOCK FACE SIX-THIRTYCLOCK FACE SEVEN-THIRTYCLOCK FACE EIGHT-THIRT" + + "YCLOCK FACE NINE-THIRTYCLOCK FACE TEN-THIRTYCLOCK FACE ELEVEN-THIRTYCLOC" + + "K FACE TWELVE-THIRTYRIGHT SPEAKERRIGHT SPEAKER WITH ONE SOUND WAVERIGHT " + + "SPEAKER WITH THREE SOUND WAVESBULLHORNBULLHORN WITH SOUND WAVESRINGING B" + + "ELLBOOKCANDLEMANTELPIECE CLOCKBLACK SKULL AND CROSSBONESNO PIRACYHOLEMAN" + + " IN BUSINESS SUIT LEVITATINGSLEUTH OR SPYDARK SUNGLASSESSPIDERSPIDER WEB" + + "JOYSTICKMAN DANCINGLEFT HAND TELEPHONE RECEIVERTELEPHONE RECEIVER WITH P" + + "AGERIGHT HAND TELEPHONE RECEIVERWHITE TOUCHTONE TELEPHONEBLACK TOUCHTONE" + + " TELEPHONETELEPHONE ON TOP OF MODEMCLAMSHELL MOBILE PHONEBACK OF ENVELOP" + + "ESTAMPED ENVELOPEENVELOPE WITH LIGHTNINGFLYING ENVELOPEPEN OVER STAMPED " + + "ENVELOPELINKED PAPERCLIPSBLACK PUSHPINLOWER LEFT PENCILLOWER LEFT BALLPO" + + "INT PENLOWER LEFT FOUNTAIN PENLOWER LEFT PAINTBRUSHLOWER LEFT CRAYONLEFT" + + " WRITING HANDTURNED OK HAND SIGNRAISED HAND WITH FINGERS SPLAYEDREVERSED" + + " RAISED HAND WITH FINGERS SPLAYEDREVERSED THUMBS UP SIGNREVERSED THUMBS " + + "DOWN SIGNREVERSED VICTORY HANDREVERSED HAND WITH MIDDLE FINGER EXTENDEDR" + + "AISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERSWHITE DOWN POINTING " + + "LEFT HAND INDEXSIDEWAYS WHITE LEFT POINTING INDEXSIDEWAYS WHITE RIGHT PO" + + "INTING INDEXSIDEWAYS BLACK LEFT POINTING INDEXSIDEWAYS BLACK RIGHT POINT" + + "ING INDEXBLACK LEFT POINTING BACKHAND INDEXBLACK RIGHT POINTING BACKHAND" + + " INDEXSIDEWAYS WHITE UP POINTING INDEXSIDEWAYS WHITE DOWN POINTING INDEX" + + "SIDEWAYS BLACK UP POINTING INDEXSIDEWAYS BLACK DOWN POINTING INDEXBLACK " + + "UP POINTING BACKHAND INDEXBLACK DOWN POINTING BACKHAND INDEXBLACK HEARTD" + + "ESKTOP COMPUTERKEYBOARD AND MOUSETHREE NETWORKED COMPUTERSPRINTERPOCKET " + + "CALCULATORBLACK HARD SHELL FLOPPY DISKWHITE HARD SHELL FLOPPY DISKSOFT S" + + "HELL FLOPPY DISKTAPE CARTRIDGEWIRED KEYBOARDONE BUTTON MOUSETWO BUTTON M" + + "OUSETHREE BUTTON MOUSETRACKBALLOLD PERSONAL COMPUTERHARD DISKSCREENPRINT" + + "ER ICONFAX ICONOPTICAL DISC ICONDOCUMENT WITH TEXTDOCUMENT WITH TEXT AND" + + " PICTUREDOCUMENT WITH PICTUREFRAME WITH PICTUREFRAME WITH TILESFRAME WIT" + + "H AN XBLACK FOLDERFOLDEROPEN FOLDERCARD INDEX DIVIDERSCARD FILE BOXFILE " + + "CABINETEMPTY NOTEEMPTY NOTE PAGEEMPTY NOTE PADNOTENOTE PAGENOTE PADEMPTY" + + " DOCUMENTEMPTY PAGEEMPTY PAGESDOCUMENTPAGEPAGESWASTEBASKETSPIRAL NOTE PA" + + "DSPIRAL CALENDAR PADDESKTOP WINDOWMINIMIZEMAXIMIZEOVERLAPCLOCKWISE RIGHT" + + " AND LEFT SEMICIRCLE ARROWSCANCELLATION XINCREASE FONT SIZE SYMBOLDECREA" + + "SE FONT SIZE SYMBOLCOMPRESSIONOLD KEYROLLED-UP NEWSPAPERPAGE WITH CIRCLE" + + "D TEXTSTOCK CHARTDAGGER KNIFELIPSSPEAKING HEAD IN SILHOUETTETHREE RAYS A" + + "BOVETHREE RAYS BELOWTHREE RAYS LEFTTHREE RAYS RIGHTLEFT SPEECH BUBBLERIG" + + "HT SPEECH BUBBLETWO SPEECH BUBBLESTHREE SPEECH BUBBLESLEFT THOUGHT BUBBL" + + "ERIGHT THOUGHT BUBBLELEFT ANGER BUBBLERIGHT ANGER BUBBLEMOOD BUBBLELIGHT" + + "NING MOOD BUBBLELIGHTNING MOODBALLOT BOX WITH BALLOTBALLOT SCRIPT XBALLO" + + "T BOX WITH SCRIPT XBALLOT BOLD SCRIPT XBALLOT BOX WITH BOLD SCRIPT XLIGH" + + "T CHECK MARKBALLOT BOX WITH BOLD CHECKWORLD MAPMOUNT FUJITOKYO TOWERSTAT" + + "UE OF LIBERTYSILHOUETTE OF JAPANMOYAIGRINNING FACEGRINNING FACE WITH SMI" + + "LING EYESFACE WITH TEARS OF JOYSMILING FACE WITH OPEN MOUTHSMILING FACE " + + "WITH OPEN MOUTH AND SMILING EYESSMILING FACE WITH OPEN MOUTH AND COLD SW" + + "EATSMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYESSMILING FACE WITH" + + " HALOSMILING FACE WITH HORNSWINKING FACESMILING FACE WITH SMILING EYESFA" + + "CE SAVOURING DELICIOUS FOODRELIEVED FACESMILING FACE WITH HEART-SHAPED E" + + "YESSMILING FACE WITH SUNGLASSESSMIRKING FACENEUTRAL FACEEXPRESSIONLESS F" + + "ACEUNAMUSED FACEFACE WITH COLD SWEATPENSIVE FACECONFUSED FACECONFOUNDED " + + "FACEKISSING FACEFACE THROWING A KISSKISSING FACE WITH SMILING EYESKISSIN" + + "G FACE WITH CLOSED EYESFACE WITH STUCK-OUT TONGUEFACE WITH STUCK-OUT TON" + + "GUE AND WINKING EYEFACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYESDIS" + + "APPOINTED FACEWORRIED FACEANGRY FACEPOUTING FACECRYING FACEPERSEVERING F" + + "ACEFACE WITH LOOK OF TRIUMPHDISAPPOINTED BUT RELIEVED FACEFROWNING FACE " + + "WITH OPEN MOUTHANGUISHED FACEFEARFUL FACEWEARY FACESLEEPY FACETIRED FACE" + + "GRIMACING FACELOUDLY CRYING FACEFACE WITH OPEN MOUTHHUSHED FACEFACE WITH") + ("" + + " OPEN MOUTH AND COLD SWEATFACE SCREAMING IN FEARASTONISHED FACEFLUSHED F" + + "ACESLEEPING FACEDIZZY FACEFACE WITHOUT MOUTHFACE WITH MEDICAL MASKGRINNI" + + "NG CAT FACE WITH SMILING EYESCAT FACE WITH TEARS OF JOYSMILING CAT FACE " + + "WITH OPEN MOUTHSMILING CAT FACE WITH HEART-SHAPED EYESCAT FACE WITH WRY " + + "SMILEKISSING CAT FACE WITH CLOSED EYESPOUTING CAT FACECRYING CAT FACEWEA" + + "RY CAT FACESLIGHTLY FROWNING FACESLIGHTLY SMILING FACEUPSIDE-DOWN FACEFA" + + "CE WITH ROLLING EYESFACE WITH NO GOOD GESTUREFACE WITH OK GESTUREPERSON " + + "BOWING DEEPLYSEE-NO-EVIL MONKEYHEAR-NO-EVIL MONKEYSPEAK-NO-EVIL MONKEYHA" + + "PPY PERSON RAISING ONE HANDPERSON RAISING BOTH HANDS IN CELEBRATIONPERSO" + + "N FROWNINGPERSON WITH POUTING FACEPERSON WITH FOLDED HANDSNORTH WEST POI" + + "NTING LEAFSOUTH WEST POINTING LEAFNORTH EAST POINTING LEAFSOUTH EAST POI" + + "NTING LEAFTURNED NORTH WEST POINTING LEAFTURNED SOUTH WEST POINTING LEAF" + + "TURNED NORTH EAST POINTING LEAFTURNED SOUTH EAST POINTING LEAFNORTH WEST" + + " POINTING VINE LEAFSOUTH WEST POINTING VINE LEAFNORTH EAST POINTING VINE" + + " LEAFSOUTH EAST POINTING VINE LEAFHEAVY NORTH WEST POINTING VINE LEAFHEA" + + "VY SOUTH WEST POINTING VINE LEAFHEAVY NORTH EAST POINTING VINE LEAFHEAVY" + + " SOUTH EAST POINTING VINE LEAFNORTH WEST POINTING BUDSOUTH WEST POINTING" + + " BUDNORTH EAST POINTING BUDSOUTH EAST POINTING BUDHEAVY NORTH WEST POINT" + + "ING BUDHEAVY SOUTH WEST POINTING BUDHEAVY NORTH EAST POINTING BUDHEAVY S" + + "OUTH EAST POINTING BUDHOLLOW QUILT SQUARE ORNAMENTHOLLOW QUILT SQUARE OR" + + "NAMENT IN BLACK SQUARESOLID QUILT SQUARE ORNAMENTSOLID QUILT SQUARE ORNA" + + "MENT IN BLACK SQUARELEFTWARDS ROCKETUPWARDS ROCKETRIGHTWARDS ROCKETDOWNW" + + "ARDS ROCKETSCRIPT LIGATURE ET ORNAMENTHEAVY SCRIPT LIGATURE ET ORNAMENTL" + + "IGATURE OPEN ET ORNAMENTHEAVY LIGATURE OPEN ET ORNAMENTHEAVY AMPERSAND O" + + "RNAMENTSWASH AMPERSAND ORNAMENTSANS-SERIF HEAVY DOUBLE TURNED COMMA QUOT" + + "ATION MARK ORNAMENTSANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT" + + "SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENTHEAVY INTERROBA" + + "NG ORNAMENTSANS-SERIF INTERROBANG ORNAMENTHEAVY SANS-SERIF INTERROBANG O" + + "RNAMENTVERY HEAVY SOLIDUSVERY HEAVY REVERSE SOLIDUSCHECKER BOARDREVERSE " + + "CHECKER BOARDROCKETHELICOPTERSTEAM LOCOMOTIVERAILWAY CARHIGH-SPEED TRAIN" + + "HIGH-SPEED TRAIN WITH BULLET NOSETRAINMETROLIGHT RAILSTATIONTRAMTRAM CAR" + + "BUSONCOMING BUSTROLLEYBUSBUS STOPMINIBUSAMBULANCEFIRE ENGINEPOLICE CARON" + + "COMING POLICE CARTAXIONCOMING TAXIAUTOMOBILEONCOMING AUTOMOBILERECREATIO" + + "NAL VEHICLEDELIVERY TRUCKARTICULATED LORRYTRACTORMONORAILMOUNTAIN RAILWA" + + "YSUSPENSION RAILWAYMOUNTAIN CABLEWAYAERIAL TRAMWAYSHIPROWBOATSPEEDBOATHO" + + "RIZONTAL TRAFFIC LIGHTVERTICAL TRAFFIC LIGHTCONSTRUCTION SIGNPOLICE CARS" + + " REVOLVING LIGHTTRIANGULAR FLAG ON POSTDOORNO ENTRY SIGNSMOKING SYMBOLNO" + + " SMOKING SYMBOLPUT LITTER IN ITS PLACE SYMBOLDO NOT LITTER SYMBOLPOTABLE" + + " WATER SYMBOLNON-POTABLE WATER SYMBOLBICYCLENO BICYCLESBICYCLISTMOUNTAIN" + + " BICYCLISTPEDESTRIANNO PEDESTRIANSCHILDREN CROSSINGMENS SYMBOLWOMENS SYM" + + "BOLRESTROOMBABY SYMBOLTOILETWATER CLOSETSHOWERBATHBATHTUBPASSPORT CONTRO" + + "LCUSTOMSBAGGAGE CLAIMLEFT LUGGAGETRIANGLE WITH ROUNDED CORNERSPROHIBITED" + + " SIGNCIRCLED INFORMATION SOURCEBOYS SYMBOLGIRLS SYMBOLCOUCH AND LAMPSLEE" + + "PING ACCOMMODATIONSHOPPING BAGSBELLHOP BELLBEDPLACE OF WORSHIPOCTAGONAL " + + "SIGNSHOPPING TROLLEYHAMMER AND WRENCHSHIELDOIL DRUMMOTORWAYRAILWAY TRACK" + + "MOTOR BOATUP-POINTING MILITARY AIRPLANEUP-POINTING AIRPLANEUP-POINTING S" + + "MALL AIRPLANESMALL AIRPLANENORTHEAST-POINTING AIRPLANEAIRPLANE DEPARTURE" + + "AIRPLANE ARRIVINGSATELLITEONCOMING FIRE ENGINEDIESEL LOCOMOTIVEPASSENGER" + + " SHIPSCOOTERMOTOR SCOOTERCANOEALCHEMICAL SYMBOL FOR QUINTESSENCEALCHEMIC" + + "AL SYMBOL FOR AIRALCHEMICAL SYMBOL FOR FIREALCHEMICAL SYMBOL FOR EARTHAL" + + "CHEMICAL SYMBOL FOR WATERALCHEMICAL SYMBOL FOR AQUAFORTISALCHEMICAL SYMB" + + "OL FOR AQUA REGIAALCHEMICAL SYMBOL FOR AQUA REGIA-2ALCHEMICAL SYMBOL FOR" + + " AQUA VITAEALCHEMICAL SYMBOL FOR AQUA VITAE-2ALCHEMICAL SYMBOL FOR VINEG" + + "ARALCHEMICAL SYMBOL FOR VINEGAR-2ALCHEMICAL SYMBOL FOR VINEGAR-3ALCHEMIC" + + "AL SYMBOL FOR SULFURALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFURALCHEMICAL " + + "SYMBOL FOR BLACK SULFURALCHEMICAL SYMBOL FOR MERCURY SUBLIMATEALCHEMICAL" + + " SYMBOL FOR MERCURY SUBLIMATE-2ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3" + + "ALCHEMICAL SYMBOL FOR CINNABARALCHEMICAL SYMBOL FOR SALTALCHEMICAL SYMBO" + + "L FOR NITREALCHEMICAL SYMBOL FOR VITRIOLALCHEMICAL SYMBOL FOR VITRIOL-2A" + + "LCHEMICAL SYMBOL FOR ROCK SALTALCHEMICAL SYMBOL FOR ROCK SALT-2ALCHEMICA" + + "L SYMBOL FOR GOLDALCHEMICAL SYMBOL FOR SILVERALCHEMICAL SYMBOL FOR IRON " + + "OREALCHEMICAL SYMBOL FOR IRON ORE-2ALCHEMICAL SYMBOL FOR CROCUS OF IRONA" + + "LCHEMICAL SYMBOL FOR REGULUS OF IRONALCHEMICAL SYMBOL FOR COPPER OREALCH" + + "EMICAL SYMBOL FOR IRON-COPPER OREALCHEMICAL SYMBOL FOR SUBLIMATE OF COPP") + ("" + + "ERALCHEMICAL SYMBOL FOR CROCUS OF COPPERALCHEMICAL SYMBOL FOR CROCUS OF " + + "COPPER-2ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATEALCHEMICAL SYMBOL FOR SA" + + "LT OF COPPER ANTIMONIATEALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPE" + + "RALCHEMICAL SYMBOL FOR VERDIGRISALCHEMICAL SYMBOL FOR TIN OREALCHEMICAL " + + "SYMBOL FOR LEAD OREALCHEMICAL SYMBOL FOR ANTIMONY OREALCHEMICAL SYMBOL F" + + "OR SUBLIMATE OF ANTIMONYALCHEMICAL SYMBOL FOR SALT OF ANTIMONYALCHEMICAL" + + " SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONYALCHEMICAL SYMBOL FOR VINEGAR O" + + "F ANTIMONYALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONYALCHEMICAL SYMBOL FOR" + + " REGULUS OF ANTIMONY-2ALCHEMICAL SYMBOL FOR REGULUSALCHEMICAL SYMBOL FOR" + + " REGULUS-2ALCHEMICAL SYMBOL FOR REGULUS-3ALCHEMICAL SYMBOL FOR REGULUS-4" + + "ALCHEMICAL SYMBOL FOR ALKALIALCHEMICAL SYMBOL FOR ALKALI-2ALCHEMICAL SYM" + + "BOL FOR MARCASITEALCHEMICAL SYMBOL FOR SAL-AMMONIACALCHEMICAL SYMBOL FOR" + + " ARSENICALCHEMICAL SYMBOL FOR REALGARALCHEMICAL SYMBOL FOR REALGAR-2ALCH" + + "EMICAL SYMBOL FOR AURIPIGMENTALCHEMICAL SYMBOL FOR BISMUTH OREALCHEMICAL" + + " SYMBOL FOR TARTARALCHEMICAL SYMBOL FOR TARTAR-2ALCHEMICAL SYMBOL FOR QU" + + "ICK LIMEALCHEMICAL SYMBOL FOR BORAXALCHEMICAL SYMBOL FOR BORAX-2ALCHEMIC" + + "AL SYMBOL FOR BORAX-3ALCHEMICAL SYMBOL FOR ALUMALCHEMICAL SYMBOL FOR OIL" + + "ALCHEMICAL SYMBOL FOR SPIRITALCHEMICAL SYMBOL FOR TINCTUREALCHEMICAL SYM" + + "BOL FOR GUMALCHEMICAL SYMBOL FOR WAXALCHEMICAL SYMBOL FOR POWDERALCHEMIC" + + "AL SYMBOL FOR CALXALCHEMICAL SYMBOL FOR TUTTYALCHEMICAL SYMBOL FOR CAPUT" + + " MORTUUMALCHEMICAL SYMBOL FOR SCEPTER OF JOVEALCHEMICAL SYMBOL FOR CADUC" + + "EUSALCHEMICAL SYMBOL FOR TRIDENTALCHEMICAL SYMBOL FOR STARRED TRIDENTALC" + + "HEMICAL SYMBOL FOR LODESTONEALCHEMICAL SYMBOL FOR SOAPALCHEMICAL SYMBOL " + + "FOR URINEALCHEMICAL SYMBOL FOR HORSE DUNGALCHEMICAL SYMBOL FOR ASHESALCH" + + "EMICAL SYMBOL FOR POT ASHESALCHEMICAL SYMBOL FOR BRICKALCHEMICAL SYMBOL " + + "FOR POWDERED BRICKALCHEMICAL SYMBOL FOR AMALGAMALCHEMICAL SYMBOL FOR STR" + + "ATUM SUPER STRATUMALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2ALCHEMICA" + + "L SYMBOL FOR SUBLIMATIONALCHEMICAL SYMBOL FOR PRECIPITATEALCHEMICAL SYMB" + + "OL FOR DISTILLALCHEMICAL SYMBOL FOR DISSOLVEALCHEMICAL SYMBOL FOR DISSOL" + + "VE-2ALCHEMICAL SYMBOL FOR PURIFYALCHEMICAL SYMBOL FOR PUTREFACTIONALCHEM" + + "ICAL SYMBOL FOR CRUCIBLEALCHEMICAL SYMBOL FOR CRUCIBLE-2ALCHEMICAL SYMBO" + + "L FOR CRUCIBLE-3ALCHEMICAL SYMBOL FOR CRUCIBLE-4ALCHEMICAL SYMBOL FOR CR" + + "UCIBLE-5ALCHEMICAL SYMBOL FOR ALEMBICALCHEMICAL SYMBOL FOR BATH OF MARYA" + + "LCHEMICAL SYMBOL FOR BATH OF VAPOURSALCHEMICAL SYMBOL FOR RETORTALCHEMIC" + + "AL SYMBOL FOR HOURALCHEMICAL SYMBOL FOR NIGHTALCHEMICAL SYMBOL FOR DAY-N" + + "IGHTALCHEMICAL SYMBOL FOR MONTHALCHEMICAL SYMBOL FOR HALF DRAMALCHEMICAL" + + " SYMBOL FOR HALF OUNCEBLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLEBLACK " + + "UP-POINTING ISOSCELES RIGHT TRIANGLEBLACK RIGHT-POINTING ISOSCELES RIGHT" + + " TRIANGLEBLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLEBLACK SLIGHTLY SMAL" + + "L CIRCLEMEDIUM BOLD WHITE CIRCLEBOLD WHITE CIRCLEHEAVY WHITE CIRCLEVERY " + + "HEAVY WHITE CIRCLEEXTREMELY HEAVY WHITE CIRCLEWHITE CIRCLE CONTAINING BL" + + "ACK SMALL CIRCLEROUND TARGETBLACK TINY SQUAREBLACK SLIGHTLY SMALL SQUARE" + + "LIGHT WHITE SQUAREMEDIUM WHITE SQUAREBOLD WHITE SQUAREHEAVY WHITE SQUARE" + + "VERY HEAVY WHITE SQUAREEXTREMELY HEAVY WHITE SQUAREWHITE SQUARE CONTAINI" + + "NG BLACK VERY SMALL SQUAREWHITE SQUARE CONTAINING BLACK MEDIUM SQUARESQU" + + "ARE TARGETBLACK TINY DIAMONDBLACK VERY SMALL DIAMONDBLACK MEDIUM SMALL D" + + "IAMONDWHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMONDWHITE DIAMOND CON" + + "TAINING BLACK MEDIUM DIAMONDDIAMOND TARGETBLACK TINY LOZENGEBLACK VERY S" + + "MALL LOZENGEBLACK MEDIUM SMALL LOZENGEWHITE LOZENGE CONTAINING BLACK SMA" + + "LL LOZENGETHIN GREEK CROSSLIGHT GREEK CROSSMEDIUM GREEK CROSSBOLD GREEK " + + "CROSSVERY BOLD GREEK CROSSVERY HEAVY GREEK CROSSEXTREMELY HEAVY GREEK CR" + + "OSSTHIN SALTIRELIGHT SALTIREMEDIUM SALTIREBOLD SALTIREHEAVY SALTIREVERY " + + "HEAVY SALTIREEXTREMELY HEAVY SALTIRELIGHT FIVE SPOKED ASTERISKMEDIUM FIV" + + "E SPOKED ASTERISKBOLD FIVE SPOKED ASTERISKHEAVY FIVE SPOKED ASTERISKVERY" + + " HEAVY FIVE SPOKED ASTERISKEXTREMELY HEAVY FIVE SPOKED ASTERISKLIGHT SIX" + + " SPOKED ASTERISKMEDIUM SIX SPOKED ASTERISKBOLD SIX SPOKED ASTERISKHEAVY " + + "SIX SPOKED ASTERISKVERY HEAVY SIX SPOKED ASTERISKEXTREMELY HEAVY SIX SPO" + + "KED ASTERISKLIGHT EIGHT SPOKED ASTERISKMEDIUM EIGHT SPOKED ASTERISKBOLD " + + "EIGHT SPOKED ASTERISKHEAVY EIGHT SPOKED ASTERISKVERY HEAVY EIGHT SPOKED " + + "ASTERISKLIGHT THREE POINTED BLACK STARMEDIUM THREE POINTED BLACK STARTHR" + + "EE POINTED BLACK STARMEDIUM THREE POINTED PINWHEEL STARLIGHT FOUR POINTE" + + "D BLACK STARMEDIUM FOUR POINTED BLACK STARFOUR POINTED BLACK STARMEDIUM " + + "FOUR POINTED PINWHEEL STARREVERSE LIGHT FOUR POINTED PINWHEEL STARLIGHT " + + "FIVE POINTED BLACK STARHEAVY FIVE POINTED BLACK STARMEDIUM SIX POINTED B") + ("" + + "LACK STARHEAVY SIX POINTED BLACK STARSIX POINTED PINWHEEL STARMEDIUM EIG" + + "HT POINTED BLACK STARHEAVY EIGHT POINTED BLACK STARVERY HEAVY EIGHT POIN" + + "TED BLACK STARHEAVY EIGHT POINTED PINWHEEL STARLIGHT TWELVE POINTED BLAC" + + "K STARHEAVY TWELVE POINTED BLACK STARHEAVY TWELVE POINTED PINWHEEL STARL" + + "EFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEADUPWARDS ARROW WITH SMALL TRI" + + "ANGLE ARROWHEADRIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEADDOWNWARDS A" + + "RROW WITH SMALL TRIANGLE ARROWHEADLEFTWARDS ARROW WITH MEDIUM TRIANGLE A" + + "RROWHEADUPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEADRIGHTWARDS ARROW WIT" + + "H MEDIUM TRIANGLE ARROWHEADDOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEA" + + "DLEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEADUPWARDS ARROW WITH LARGE T" + + "RIANGLE ARROWHEADRIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEADDOWNWARDS" + + " ARROW WITH LARGE TRIANGLE ARROWHEADLEFTWARDS ARROW WITH SMALL EQUILATER" + + "AL ARROWHEADUPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEADRIGHTWARDS ARR" + + "OW WITH SMALL EQUILATERAL ARROWHEADDOWNWARDS ARROW WITH SMALL EQUILATERA" + + "L ARROWHEADLEFTWARDS ARROW WITH EQUILATERAL ARROWHEADUPWARDS ARROW WITH " + + "EQUILATERAL ARROWHEADRIGHTWARDS ARROW WITH EQUILATERAL ARROWHEADDOWNWARD" + + "S ARROW WITH EQUILATERAL ARROWHEADHEAVY LEFTWARDS ARROW WITH EQUILATERAL" + + " ARROWHEADHEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEADHEAVY RIGHTWARDS" + + " ARROW WITH EQUILATERAL ARROWHEADHEAVY DOWNWARDS ARROW WITH EQUILATERAL " + + "ARROWHEADHEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEADHEAVY UPW" + + "ARDS ARROW WITH LARGE EQUILATERAL ARROWHEADHEAVY RIGHTWARDS ARROW WITH L" + + "ARGE EQUILATERAL ARROWHEADHEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL A" + + "RROWHEADLEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFTUPWARDS TRIANGL" + + "E-HEADED ARROW WITH NARROW SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH NA" + + "RROW SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFTLEFTWARDS TRI" + + "ANGLE-HEADED ARROW WITH MEDIUM SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH M" + + "EDIUM SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFTDOWNWARDS T" + + "RIANGLE-HEADED ARROW WITH MEDIUM SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WI" + + "TH BOLD SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFTRIGHTWARDS TRI" + + "ANGLE-HEADED ARROW WITH BOLD SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH B" + + "OLD SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFTUPWARDS TRIANGL" + + "E-HEADED ARROW WITH HEAVY SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH HEA" + + "VY SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFTLEFTWARDS TRIANG" + + "LE-HEADED ARROW WITH VERY HEAVY SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH " + + "VERY HEAVY SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFTDO" + + "WNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFTLEFTWARDS FINGER-POST" + + " ARROWUPWARDS FINGER-POST ARROWRIGHTWARDS FINGER-POST ARROWDOWNWARDS FIN" + + "GER-POST ARROWLEFTWARDS SQUARED ARROWUPWARDS SQUARED ARROWRIGHTWARDS SQU" + + "ARED ARROWDOWNWARDS SQUARED ARROWLEFTWARDS COMPRESSED ARROWUPWARDS COMPR" + + "ESSED ARROWRIGHTWARDS COMPRESSED ARROWDOWNWARDS COMPRESSED ARROWLEFTWARD" + + "S HEAVY COMPRESSED ARROWUPWARDS HEAVY COMPRESSED ARROWRIGHTWARDS HEAVY C" + + "OMPRESSED ARROWDOWNWARDS HEAVY COMPRESSED ARROWLEFTWARDS HEAVY ARROWUPWA" + + "RDS HEAVY ARROWRIGHTWARDS HEAVY ARROWDOWNWARDS HEAVY ARROWLEFTWARDS SANS" + + "-SERIF ARROWUPWARDS SANS-SERIF ARROWRIGHTWARDS SANS-SERIF ARROWDOWNWARDS" + + " SANS-SERIF ARROWNORTH WEST SANS-SERIF ARROWNORTH EAST SANS-SERIF ARROWS" + + "OUTH EAST SANS-SERIF ARROWSOUTH WEST SANS-SERIF ARROWLEFT RIGHT SANS-SER" + + "IF ARROWUP DOWN SANS-SERIF ARROWWIDE-HEADED LEFTWARDS LIGHT BARB ARROWWI" + + "DE-HEADED UPWARDS LIGHT BARB ARROWWIDE-HEADED RIGHTWARDS LIGHT BARB ARRO" + + "WWIDE-HEADED DOWNWARDS LIGHT BARB ARROWWIDE-HEADED NORTH WEST LIGHT BARB" + + " ARROWWIDE-HEADED NORTH EAST LIGHT BARB ARROWWIDE-HEADED SOUTH EAST LIGH" + + "T BARB ARROWWIDE-HEADED SOUTH WEST LIGHT BARB ARROWWIDE-HEADED LEFTWARDS" + + " BARB ARROWWIDE-HEADED UPWARDS BARB ARROWWIDE-HEADED RIGHTWARDS BARB ARR" + + "OWWIDE-HEADED DOWNWARDS BARB ARROWWIDE-HEADED NORTH WEST BARB ARROWWIDE-" + + "HEADED NORTH EAST BARB ARROWWIDE-HEADED SOUTH EAST BARB ARROWWIDE-HEADED" + + " SOUTH WEST BARB ARROWWIDE-HEADED LEFTWARDS MEDIUM BARB ARROWWIDE-HEADED" + + " UPWARDS MEDIUM BARB ARROWWIDE-HEADED RIGHTWARDS MEDIUM BARB ARROWWIDE-H" + + "EADED DOWNWARDS MEDIUM BARB ARROWWIDE-HEADED NORTH WEST MEDIUM BARB ARRO" + + "WWIDE-HEADED NORTH EAST MEDIUM BARB ARROWWIDE-HEADED SOUTH EAST MEDIUM B" + + "ARB ARROWWIDE-HEADED SOUTH WEST MEDIUM BARB ARROWWIDE-HEADED LEFTWARDS H" + + "EAVY BARB ARROWWIDE-HEADED UPWARDS HEAVY BARB ARROWWIDE-HEADED RIGHTWARD" + + "S HEAVY BARB ARROWWIDE-HEADED DOWNWARDS HEAVY BARB ARROWWIDE-HEADED NORT" + + "H WEST HEAVY BARB ARROWWIDE-HEADED NORTH EAST HEAVY BARB ARROWWIDE-HEADE" + + "D SOUTH EAST HEAVY BARB ARROWWIDE-HEADED SOUTH WEST HEAVY BARB ARROWWIDE" + + "-HEADED LEFTWARDS VERY HEAVY BARB ARROWWIDE-HEADED UPWARDS VERY HEAVY BA") + ("" + + "RB ARROWWIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROWWIDE-HEADED DOWNWARD" + + "S VERY HEAVY BARB ARROWWIDE-HEADED NORTH WEST VERY HEAVY BARB ARROWWIDE-" + + "HEADED NORTH EAST VERY HEAVY BARB ARROWWIDE-HEADED SOUTH EAST VERY HEAVY" + + " BARB ARROWWIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROWLEFTWARDS TRIANGL" + + "E ARROWHEADUPWARDS TRIANGLE ARROWHEADRIGHTWARDS TRIANGLE ARROWHEADDOWNWA" + + "RDS TRIANGLE ARROWHEADLEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEADUPW" + + "ARDS WHITE ARROW WITHIN TRIANGLE ARROWHEADRIGHTWARDS WHITE ARROW WITHIN " + + "TRIANGLE ARROWHEADDOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEADLEFTWAR" + + "DS ARROW WITH NOTCHED TAILUPWARDS ARROW WITH NOTCHED TAILRIGHTWARDS ARRO" + + "W WITH NOTCHED TAILDOWNWARDS ARROW WITH NOTCHED TAILHEAVY ARROW SHAFT WI" + + "DTH ONEHEAVY ARROW SHAFT WIDTH TWO THIRDSHEAVY ARROW SHAFT WIDTH ONE HAL" + + "FHEAVY ARROW SHAFT WIDTH ONE THIRDLEFTWARDS BOTTOM-SHADED WHITE ARROWRIG" + + "HTWARDS BOTTOM SHADED WHITE ARROWLEFTWARDS TOP SHADED WHITE ARROWRIGHTWA" + + "RDS TOP SHADED WHITE ARROWLEFTWARDS LEFT-SHADED WHITE ARROWRIGHTWARDS RI" + + "GHT-SHADED WHITE ARROWLEFTWARDS RIGHT-SHADED WHITE ARROWRIGHTWARDS LEFT-" + + "SHADED WHITE ARROWLEFTWARDS BACK-TILTED SHADOWED WHITE ARROWRIGHTWARDS B" + + "ACK-TILTED SHADOWED WHITE ARROWLEFTWARDS FRONT-TILTED SHADOWED WHITE ARR" + + "OWRIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROWWHITE ARROW SHAFT WIDTH ON" + + "EWHITE ARROW SHAFT WIDTH TWO THIRDSZIPPER-MOUTH FACEMONEY-MOUTH FACEFACE" + + " WITH THERMOMETERNERD FACETHINKING FACEFACE WITH HEAD-BANDAGEROBOT FACEH" + + "UGGING FACESIGN OF THE HORNSCALL ME HANDRAISED BACK OF HANDLEFT-FACING F" + + "ISTRIGHT-FACING FISTHANDSHAKEHAND WITH INDEX AND MIDDLE FINGERS CROSSEDF" + + "ACE WITH COWBOY HATCLOWN FACENAUSEATED FACEROLLING ON THE FLOOR LAUGHING" + + "DROOLING FACELYING FACEFACE PALMSNEEZING FACEPREGNANT WOMANSELFIEPRINCEM" + + "AN IN TUXEDOMOTHER CHRISTMASSHRUGPERSON DOING CARTWHEELJUGGLINGFENCERMOD" + + "ERN PENTATHLONWRESTLERSWATER POLOHANDBALLWILTED FLOWERDRUM WITH DRUMSTIC" + + "KSCLINKING GLASSESTUMBLER GLASSSPOONGOAL NETRIFLEFIRST PLACE MEDALSECOND" + + " PLACE MEDALTHIRD PLACE MEDALBOXING GLOVEMARTIAL ARTS UNIFORMCROISSANTAV" + + "OCADOCUCUMBERBACONPOTATOCARROTBAGUETTE BREADGREEN SALADSHALLOW PAN OF FO" + + "ODSTUFFED FLATBREADEGGGLASS OF MILKPEANUTSKIWIFRUITPANCAKESCRABLION FACE" + + "SCORPIONTURKEYUNICORN FACEEAGLEDUCKBATSHARKOWLFOX FACEBUTTERFLYDEERGORIL" + + "LALIZARDRHINOCEROSSHRIMPSQUIDCHEESE WEDGECJK COMPATIBILITY IDEOGRAPH-2F8" + + "00CJK COMPATIBILITY IDEOGRAPH-2F801CJK COMPATIBILITY IDEOGRAPH-2F802CJK " + + "COMPATIBILITY IDEOGRAPH-2F803CJK COMPATIBILITY IDEOGRAPH-2F804CJK COMPAT" + + "IBILITY IDEOGRAPH-2F805CJK COMPATIBILITY IDEOGRAPH-2F806CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F807CJK COMPATIBILITY IDEOGRAPH-2F808CJK COMPATIBILITY IDEO" + + "GRAPH-2F809CJK COMPATIBILITY IDEOGRAPH-2F80ACJK COMPATIBILITY IDEOGRAPH-" + + "2F80BCJK COMPATIBILITY IDEOGRAPH-2F80CCJK COMPATIBILITY IDEOGRAPH-2F80DC" + + "JK COMPATIBILITY IDEOGRAPH-2F80ECJK COMPATIBILITY IDEOGRAPH-2F80FCJK COM" + + "PATIBILITY IDEOGRAPH-2F810CJK COMPATIBILITY IDEOGRAPH-2F811CJK COMPATIBI" + + "LITY IDEOGRAPH-2F812CJK COMPATIBILITY IDEOGRAPH-2F813CJK COMPATIBILITY I" + + "DEOGRAPH-2F814CJK COMPATIBILITY IDEOGRAPH-2F815CJK COMPATIBILITY IDEOGRA" + + "PH-2F816CJK COMPATIBILITY IDEOGRAPH-2F817CJK COMPATIBILITY IDEOGRAPH-2F8" + + "18CJK COMPATIBILITY IDEOGRAPH-2F819CJK COMPATIBILITY IDEOGRAPH-2F81ACJK " + + "COMPATIBILITY IDEOGRAPH-2F81BCJK COMPATIBILITY IDEOGRAPH-2F81CCJK COMPAT" + + "IBILITY IDEOGRAPH-2F81DCJK COMPATIBILITY IDEOGRAPH-2F81ECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F81FCJK COMPATIBILITY IDEOGRAPH-2F820CJK COMPATIBILITY IDEO" + + "GRAPH-2F821CJK COMPATIBILITY IDEOGRAPH-2F822CJK COMPATIBILITY IDEOGRAPH-" + + "2F823CJK COMPATIBILITY IDEOGRAPH-2F824CJK COMPATIBILITY IDEOGRAPH-2F825C" + + "JK COMPATIBILITY IDEOGRAPH-2F826CJK COMPATIBILITY IDEOGRAPH-2F827CJK COM" + + "PATIBILITY IDEOGRAPH-2F828CJK COMPATIBILITY IDEOGRAPH-2F829CJK COMPATIBI" + + "LITY IDEOGRAPH-2F82ACJK COMPATIBILITY IDEOGRAPH-2F82BCJK COMPATIBILITY I" + + "DEOGRAPH-2F82CCJK COMPATIBILITY IDEOGRAPH-2F82DCJK COMPATIBILITY IDEOGRA" + + "PH-2F82ECJK COMPATIBILITY IDEOGRAPH-2F82FCJK COMPATIBILITY IDEOGRAPH-2F8" + + "30CJK COMPATIBILITY IDEOGRAPH-2F831CJK COMPATIBILITY IDEOGRAPH-2F832CJK " + + "COMPATIBILITY IDEOGRAPH-2F833CJK COMPATIBILITY IDEOGRAPH-2F834CJK COMPAT" + + "IBILITY IDEOGRAPH-2F835CJK COMPATIBILITY IDEOGRAPH-2F836CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F837CJK COMPATIBILITY IDEOGRAPH-2F838CJK COMPATIBILITY IDEO" + + "GRAPH-2F839CJK COMPATIBILITY IDEOGRAPH-2F83ACJK COMPATIBILITY IDEOGRAPH-" + + "2F83BCJK COMPATIBILITY IDEOGRAPH-2F83CCJK COMPATIBILITY IDEOGRAPH-2F83DC" + + "JK COMPATIBILITY IDEOGRAPH-2F83ECJK COMPATIBILITY IDEOGRAPH-2F83FCJK COM" + + "PATIBILITY IDEOGRAPH-2F840CJK COMPATIBILITY IDEOGRAPH-2F841CJK COMPATIBI" + + "LITY IDEOGRAPH-2F842CJK COMPATIBILITY IDEOGRAPH-2F843CJK COMPATIBILITY I" + + "DEOGRAPH-2F844CJK COMPATIBILITY IDEOGRAPH-2F845CJK COMPATIBILITY IDEOGRA") + ("" + + "PH-2F846CJK COMPATIBILITY IDEOGRAPH-2F847CJK COMPATIBILITY IDEOGRAPH-2F8" + + "48CJK COMPATIBILITY IDEOGRAPH-2F849CJK COMPATIBILITY IDEOGRAPH-2F84ACJK " + + "COMPATIBILITY IDEOGRAPH-2F84BCJK COMPATIBILITY IDEOGRAPH-2F84CCJK COMPAT" + + "IBILITY IDEOGRAPH-2F84DCJK COMPATIBILITY IDEOGRAPH-2F84ECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F84FCJK COMPATIBILITY IDEOGRAPH-2F850CJK COMPATIBILITY IDEO" + + "GRAPH-2F851CJK COMPATIBILITY IDEOGRAPH-2F852CJK COMPATIBILITY IDEOGRAPH-" + + "2F853CJK COMPATIBILITY IDEOGRAPH-2F854CJK COMPATIBILITY IDEOGRAPH-2F855C" + + "JK COMPATIBILITY IDEOGRAPH-2F856CJK COMPATIBILITY IDEOGRAPH-2F857CJK COM" + + "PATIBILITY IDEOGRAPH-2F858CJK COMPATIBILITY IDEOGRAPH-2F859CJK COMPATIBI" + + "LITY IDEOGRAPH-2F85ACJK COMPATIBILITY IDEOGRAPH-2F85BCJK COMPATIBILITY I" + + "DEOGRAPH-2F85CCJK COMPATIBILITY IDEOGRAPH-2F85DCJK COMPATIBILITY IDEOGRA" + + "PH-2F85ECJK COMPATIBILITY IDEOGRAPH-2F85FCJK COMPATIBILITY IDEOGRAPH-2F8" + + "60CJK COMPATIBILITY IDEOGRAPH-2F861CJK COMPATIBILITY IDEOGRAPH-2F862CJK " + + "COMPATIBILITY IDEOGRAPH-2F863CJK COMPATIBILITY IDEOGRAPH-2F864CJK COMPAT" + + "IBILITY IDEOGRAPH-2F865CJK COMPATIBILITY IDEOGRAPH-2F866CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F867CJK COMPATIBILITY IDEOGRAPH-2F868CJK COMPATIBILITY IDEO" + + "GRAPH-2F869CJK COMPATIBILITY IDEOGRAPH-2F86ACJK COMPATIBILITY IDEOGRAPH-" + + "2F86BCJK COMPATIBILITY IDEOGRAPH-2F86CCJK COMPATIBILITY IDEOGRAPH-2F86DC" + + "JK COMPATIBILITY IDEOGRAPH-2F86ECJK COMPATIBILITY IDEOGRAPH-2F86FCJK COM" + + "PATIBILITY IDEOGRAPH-2F870CJK COMPATIBILITY IDEOGRAPH-2F871CJK COMPATIBI" + + "LITY IDEOGRAPH-2F872CJK COMPATIBILITY IDEOGRAPH-2F873CJK COMPATIBILITY I" + + "DEOGRAPH-2F874CJK COMPATIBILITY IDEOGRAPH-2F875CJK COMPATIBILITY IDEOGRA" + + "PH-2F876CJK COMPATIBILITY IDEOGRAPH-2F877CJK COMPATIBILITY IDEOGRAPH-2F8" + + "78CJK COMPATIBILITY IDEOGRAPH-2F879CJK COMPATIBILITY IDEOGRAPH-2F87ACJK " + + "COMPATIBILITY IDEOGRAPH-2F87BCJK COMPATIBILITY IDEOGRAPH-2F87CCJK COMPAT" + + "IBILITY IDEOGRAPH-2F87DCJK COMPATIBILITY IDEOGRAPH-2F87ECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F87FCJK COMPATIBILITY IDEOGRAPH-2F880CJK COMPATIBILITY IDEO" + + "GRAPH-2F881CJK COMPATIBILITY IDEOGRAPH-2F882CJK COMPATIBILITY IDEOGRAPH-" + + "2F883CJK COMPATIBILITY IDEOGRAPH-2F884CJK COMPATIBILITY IDEOGRAPH-2F885C" + + "JK COMPATIBILITY IDEOGRAPH-2F886CJK COMPATIBILITY IDEOGRAPH-2F887CJK COM" + + "PATIBILITY IDEOGRAPH-2F888CJK COMPATIBILITY IDEOGRAPH-2F889CJK COMPATIBI" + + "LITY IDEOGRAPH-2F88ACJK COMPATIBILITY IDEOGRAPH-2F88BCJK COMPATIBILITY I" + + "DEOGRAPH-2F88CCJK COMPATIBILITY IDEOGRAPH-2F88DCJK COMPATIBILITY IDEOGRA" + + "PH-2F88ECJK COMPATIBILITY IDEOGRAPH-2F88FCJK COMPATIBILITY IDEOGRAPH-2F8" + + "90CJK COMPATIBILITY IDEOGRAPH-2F891CJK COMPATIBILITY IDEOGRAPH-2F892CJK " + + "COMPATIBILITY IDEOGRAPH-2F893CJK COMPATIBILITY IDEOGRAPH-2F894CJK COMPAT" + + "IBILITY IDEOGRAPH-2F895CJK COMPATIBILITY IDEOGRAPH-2F896CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F897CJK COMPATIBILITY IDEOGRAPH-2F898CJK COMPATIBILITY IDEO" + + "GRAPH-2F899CJK COMPATIBILITY IDEOGRAPH-2F89ACJK COMPATIBILITY IDEOGRAPH-" + + "2F89BCJK COMPATIBILITY IDEOGRAPH-2F89CCJK COMPATIBILITY IDEOGRAPH-2F89DC" + + "JK COMPATIBILITY IDEOGRAPH-2F89ECJK COMPATIBILITY IDEOGRAPH-2F89FCJK COM" + + "PATIBILITY IDEOGRAPH-2F8A0CJK COMPATIBILITY IDEOGRAPH-2F8A1CJK COMPATIBI" + + "LITY IDEOGRAPH-2F8A2CJK COMPATIBILITY IDEOGRAPH-2F8A3CJK COMPATIBILITY I" + + "DEOGRAPH-2F8A4CJK COMPATIBILITY IDEOGRAPH-2F8A5CJK COMPATIBILITY IDEOGRA" + + "PH-2F8A6CJK COMPATIBILITY IDEOGRAPH-2F8A7CJK COMPATIBILITY IDEOGRAPH-2F8" + + "A8CJK COMPATIBILITY IDEOGRAPH-2F8A9CJK COMPATIBILITY IDEOGRAPH-2F8AACJK " + + "COMPATIBILITY IDEOGRAPH-2F8ABCJK COMPATIBILITY IDEOGRAPH-2F8ACCJK COMPAT" + + "IBILITY IDEOGRAPH-2F8ADCJK COMPATIBILITY IDEOGRAPH-2F8AECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F8AFCJK COMPATIBILITY IDEOGRAPH-2F8B0CJK COMPATIBILITY IDEO" + + "GRAPH-2F8B1CJK COMPATIBILITY IDEOGRAPH-2F8B2CJK COMPATIBILITY IDEOGRAPH-" + + "2F8B3CJK COMPATIBILITY IDEOGRAPH-2F8B4CJK COMPATIBILITY IDEOGRAPH-2F8B5C" + + "JK COMPATIBILITY IDEOGRAPH-2F8B6CJK COMPATIBILITY IDEOGRAPH-2F8B7CJK COM" + + "PATIBILITY IDEOGRAPH-2F8B8CJK COMPATIBILITY IDEOGRAPH-2F8B9CJK COMPATIBI" + + "LITY IDEOGRAPH-2F8BACJK COMPATIBILITY IDEOGRAPH-2F8BBCJK COMPATIBILITY I" + + "DEOGRAPH-2F8BCCJK COMPATIBILITY IDEOGRAPH-2F8BDCJK COMPATIBILITY IDEOGRA" + + "PH-2F8BECJK COMPATIBILITY IDEOGRAPH-2F8BFCJK COMPATIBILITY IDEOGRAPH-2F8" + + "C0CJK COMPATIBILITY IDEOGRAPH-2F8C1CJK COMPATIBILITY IDEOGRAPH-2F8C2CJK " + + "COMPATIBILITY IDEOGRAPH-2F8C3CJK COMPATIBILITY IDEOGRAPH-2F8C4CJK COMPAT" + + "IBILITY IDEOGRAPH-2F8C5CJK COMPATIBILITY IDEOGRAPH-2F8C6CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F8C7CJK COMPATIBILITY IDEOGRAPH-2F8C8CJK COMPATIBILITY IDEO" + + "GRAPH-2F8C9CJK COMPATIBILITY IDEOGRAPH-2F8CACJK COMPATIBILITY IDEOGRAPH-" + + "2F8CBCJK COMPATIBILITY IDEOGRAPH-2F8CCCJK COMPATIBILITY IDEOGRAPH-2F8CDC" + + "JK COMPATIBILITY IDEOGRAPH-2F8CECJK COMPATIBILITY IDEOGRAPH-2F8CFCJK COM" + + "PATIBILITY IDEOGRAPH-2F8D0CJK COMPATIBILITY IDEOGRAPH-2F8D1CJK COMPATIBI") + ("" + + "LITY IDEOGRAPH-2F8D2CJK COMPATIBILITY IDEOGRAPH-2F8D3CJK COMPATIBILITY I" + + "DEOGRAPH-2F8D4CJK COMPATIBILITY IDEOGRAPH-2F8D5CJK COMPATIBILITY IDEOGRA" + + "PH-2F8D6CJK COMPATIBILITY IDEOGRAPH-2F8D7CJK COMPATIBILITY IDEOGRAPH-2F8" + + "D8CJK COMPATIBILITY IDEOGRAPH-2F8D9CJK COMPATIBILITY IDEOGRAPH-2F8DACJK " + + "COMPATIBILITY IDEOGRAPH-2F8DBCJK COMPATIBILITY IDEOGRAPH-2F8DCCJK COMPAT" + + "IBILITY IDEOGRAPH-2F8DDCJK COMPATIBILITY IDEOGRAPH-2F8DECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F8DFCJK COMPATIBILITY IDEOGRAPH-2F8E0CJK COMPATIBILITY IDEO" + + "GRAPH-2F8E1CJK COMPATIBILITY IDEOGRAPH-2F8E2CJK COMPATIBILITY IDEOGRAPH-" + + "2F8E3CJK COMPATIBILITY IDEOGRAPH-2F8E4CJK COMPATIBILITY IDEOGRAPH-2F8E5C" + + "JK COMPATIBILITY IDEOGRAPH-2F8E6CJK COMPATIBILITY IDEOGRAPH-2F8E7CJK COM" + + "PATIBILITY IDEOGRAPH-2F8E8CJK COMPATIBILITY IDEOGRAPH-2F8E9CJK COMPATIBI" + + "LITY IDEOGRAPH-2F8EACJK COMPATIBILITY IDEOGRAPH-2F8EBCJK COMPATIBILITY I" + + "DEOGRAPH-2F8ECCJK COMPATIBILITY IDEOGRAPH-2F8EDCJK COMPATIBILITY IDEOGRA" + + "PH-2F8EECJK COMPATIBILITY IDEOGRAPH-2F8EFCJK COMPATIBILITY IDEOGRAPH-2F8" + + "F0CJK COMPATIBILITY IDEOGRAPH-2F8F1CJK COMPATIBILITY IDEOGRAPH-2F8F2CJK " + + "COMPATIBILITY IDEOGRAPH-2F8F3CJK COMPATIBILITY IDEOGRAPH-2F8F4CJK COMPAT" + + "IBILITY IDEOGRAPH-2F8F5CJK COMPATIBILITY IDEOGRAPH-2F8F6CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F8F7CJK COMPATIBILITY IDEOGRAPH-2F8F8CJK COMPATIBILITY IDEO" + + "GRAPH-2F8F9CJK COMPATIBILITY IDEOGRAPH-2F8FACJK COMPATIBILITY IDEOGRAPH-" + + "2F8FBCJK COMPATIBILITY IDEOGRAPH-2F8FCCJK COMPATIBILITY IDEOGRAPH-2F8FDC" + + "JK COMPATIBILITY IDEOGRAPH-2F8FECJK COMPATIBILITY IDEOGRAPH-2F8FFCJK COM" + + "PATIBILITY IDEOGRAPH-2F900CJK COMPATIBILITY IDEOGRAPH-2F901CJK COMPATIBI" + + "LITY IDEOGRAPH-2F902CJK COMPATIBILITY IDEOGRAPH-2F903CJK COMPATIBILITY I" + + "DEOGRAPH-2F904CJK COMPATIBILITY IDEOGRAPH-2F905CJK COMPATIBILITY IDEOGRA" + + "PH-2F906CJK COMPATIBILITY IDEOGRAPH-2F907CJK COMPATIBILITY IDEOGRAPH-2F9" + + "08CJK COMPATIBILITY IDEOGRAPH-2F909CJK COMPATIBILITY IDEOGRAPH-2F90ACJK " + + "COMPATIBILITY IDEOGRAPH-2F90BCJK COMPATIBILITY IDEOGRAPH-2F90CCJK COMPAT" + + "IBILITY IDEOGRAPH-2F90DCJK COMPATIBILITY IDEOGRAPH-2F90ECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F90FCJK COMPATIBILITY IDEOGRAPH-2F910CJK COMPATIBILITY IDEO" + + "GRAPH-2F911CJK COMPATIBILITY IDEOGRAPH-2F912CJK COMPATIBILITY IDEOGRAPH-" + + "2F913CJK COMPATIBILITY IDEOGRAPH-2F914CJK COMPATIBILITY IDEOGRAPH-2F915C" + + "JK COMPATIBILITY IDEOGRAPH-2F916CJK COMPATIBILITY IDEOGRAPH-2F917CJK COM" + + "PATIBILITY IDEOGRAPH-2F918CJK COMPATIBILITY IDEOGRAPH-2F919CJK COMPATIBI" + + "LITY IDEOGRAPH-2F91ACJK COMPATIBILITY IDEOGRAPH-2F91BCJK COMPATIBILITY I" + + "DEOGRAPH-2F91CCJK COMPATIBILITY IDEOGRAPH-2F91DCJK COMPATIBILITY IDEOGRA" + + "PH-2F91ECJK COMPATIBILITY IDEOGRAPH-2F91FCJK COMPATIBILITY IDEOGRAPH-2F9" + + "20CJK COMPATIBILITY IDEOGRAPH-2F921CJK COMPATIBILITY IDEOGRAPH-2F922CJK " + + "COMPATIBILITY IDEOGRAPH-2F923CJK COMPATIBILITY IDEOGRAPH-2F924CJK COMPAT" + + "IBILITY IDEOGRAPH-2F925CJK COMPATIBILITY IDEOGRAPH-2F926CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F927CJK COMPATIBILITY IDEOGRAPH-2F928CJK COMPATIBILITY IDEO" + + "GRAPH-2F929CJK COMPATIBILITY IDEOGRAPH-2F92ACJK COMPATIBILITY IDEOGRAPH-" + + "2F92BCJK COMPATIBILITY IDEOGRAPH-2F92CCJK COMPATIBILITY IDEOGRAPH-2F92DC" + + "JK COMPATIBILITY IDEOGRAPH-2F92ECJK COMPATIBILITY IDEOGRAPH-2F92FCJK COM" + + "PATIBILITY IDEOGRAPH-2F930CJK COMPATIBILITY IDEOGRAPH-2F931CJK COMPATIBI" + + "LITY IDEOGRAPH-2F932CJK COMPATIBILITY IDEOGRAPH-2F933CJK COMPATIBILITY I" + + "DEOGRAPH-2F934CJK COMPATIBILITY IDEOGRAPH-2F935CJK COMPATIBILITY IDEOGRA" + + "PH-2F936CJK COMPATIBILITY IDEOGRAPH-2F937CJK COMPATIBILITY IDEOGRAPH-2F9" + + "38CJK COMPATIBILITY IDEOGRAPH-2F939CJK COMPATIBILITY IDEOGRAPH-2F93ACJK " + + "COMPATIBILITY IDEOGRAPH-2F93BCJK COMPATIBILITY IDEOGRAPH-2F93CCJK COMPAT" + + "IBILITY IDEOGRAPH-2F93DCJK COMPATIBILITY IDEOGRAPH-2F93ECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F93FCJK COMPATIBILITY IDEOGRAPH-2F940CJK COMPATIBILITY IDEO" + + "GRAPH-2F941CJK COMPATIBILITY IDEOGRAPH-2F942CJK COMPATIBILITY IDEOGRAPH-" + + "2F943CJK COMPATIBILITY IDEOGRAPH-2F944CJK COMPATIBILITY IDEOGRAPH-2F945C" + + "JK COMPATIBILITY IDEOGRAPH-2F946CJK COMPATIBILITY IDEOGRAPH-2F947CJK COM" + + "PATIBILITY IDEOGRAPH-2F948CJK COMPATIBILITY IDEOGRAPH-2F949CJK COMPATIBI" + + "LITY IDEOGRAPH-2F94ACJK COMPATIBILITY IDEOGRAPH-2F94BCJK COMPATIBILITY I" + + "DEOGRAPH-2F94CCJK COMPATIBILITY IDEOGRAPH-2F94DCJK COMPATIBILITY IDEOGRA" + + "PH-2F94ECJK COMPATIBILITY IDEOGRAPH-2F94FCJK COMPATIBILITY IDEOGRAPH-2F9" + + "50CJK COMPATIBILITY IDEOGRAPH-2F951CJK COMPATIBILITY IDEOGRAPH-2F952CJK " + + "COMPATIBILITY IDEOGRAPH-2F953CJK COMPATIBILITY IDEOGRAPH-2F954CJK COMPAT" + + "IBILITY IDEOGRAPH-2F955CJK COMPATIBILITY IDEOGRAPH-2F956CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F957CJK COMPATIBILITY IDEOGRAPH-2F958CJK COMPATIBILITY IDEO" + + "GRAPH-2F959CJK COMPATIBILITY IDEOGRAPH-2F95ACJK COMPATIBILITY IDEOGRAPH-" + + "2F95BCJK COMPATIBILITY IDEOGRAPH-2F95CCJK COMPATIBILITY IDEOGRAPH-2F95DC") + ("" + + "JK COMPATIBILITY IDEOGRAPH-2F95ECJK COMPATIBILITY IDEOGRAPH-2F95FCJK COM" + + "PATIBILITY IDEOGRAPH-2F960CJK COMPATIBILITY IDEOGRAPH-2F961CJK COMPATIBI" + + "LITY IDEOGRAPH-2F962CJK COMPATIBILITY IDEOGRAPH-2F963CJK COMPATIBILITY I" + + "DEOGRAPH-2F964CJK COMPATIBILITY IDEOGRAPH-2F965CJK COMPATIBILITY IDEOGRA" + + "PH-2F966CJK COMPATIBILITY IDEOGRAPH-2F967CJK COMPATIBILITY IDEOGRAPH-2F9" + + "68CJK COMPATIBILITY IDEOGRAPH-2F969CJK COMPATIBILITY IDEOGRAPH-2F96ACJK " + + "COMPATIBILITY IDEOGRAPH-2F96BCJK COMPATIBILITY IDEOGRAPH-2F96CCJK COMPAT" + + "IBILITY IDEOGRAPH-2F96DCJK COMPATIBILITY IDEOGRAPH-2F96ECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F96FCJK COMPATIBILITY IDEOGRAPH-2F970CJK COMPATIBILITY IDEO" + + "GRAPH-2F971CJK COMPATIBILITY IDEOGRAPH-2F972CJK COMPATIBILITY IDEOGRAPH-" + + "2F973CJK COMPATIBILITY IDEOGRAPH-2F974CJK COMPATIBILITY IDEOGRAPH-2F975C" + + "JK COMPATIBILITY IDEOGRAPH-2F976CJK COMPATIBILITY IDEOGRAPH-2F977CJK COM" + + "PATIBILITY IDEOGRAPH-2F978CJK COMPATIBILITY IDEOGRAPH-2F979CJK COMPATIBI" + + "LITY IDEOGRAPH-2F97ACJK COMPATIBILITY IDEOGRAPH-2F97BCJK COMPATIBILITY I" + + "DEOGRAPH-2F97CCJK COMPATIBILITY IDEOGRAPH-2F97DCJK COMPATIBILITY IDEOGRA" + + "PH-2F97ECJK COMPATIBILITY IDEOGRAPH-2F97FCJK COMPATIBILITY IDEOGRAPH-2F9" + + "80CJK COMPATIBILITY IDEOGRAPH-2F981CJK COMPATIBILITY IDEOGRAPH-2F982CJK " + + "COMPATIBILITY IDEOGRAPH-2F983CJK COMPATIBILITY IDEOGRAPH-2F984CJK COMPAT" + + "IBILITY IDEOGRAPH-2F985CJK COMPATIBILITY IDEOGRAPH-2F986CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F987CJK COMPATIBILITY IDEOGRAPH-2F988CJK COMPATIBILITY IDEO" + + "GRAPH-2F989CJK COMPATIBILITY IDEOGRAPH-2F98ACJK COMPATIBILITY IDEOGRAPH-" + + "2F98BCJK COMPATIBILITY IDEOGRAPH-2F98CCJK COMPATIBILITY IDEOGRAPH-2F98DC" + + "JK COMPATIBILITY IDEOGRAPH-2F98ECJK COMPATIBILITY IDEOGRAPH-2F98FCJK COM" + + "PATIBILITY IDEOGRAPH-2F990CJK COMPATIBILITY IDEOGRAPH-2F991CJK COMPATIBI" + + "LITY IDEOGRAPH-2F992CJK COMPATIBILITY IDEOGRAPH-2F993CJK COMPATIBILITY I" + + "DEOGRAPH-2F994CJK COMPATIBILITY IDEOGRAPH-2F995CJK COMPATIBILITY IDEOGRA" + + "PH-2F996CJK COMPATIBILITY IDEOGRAPH-2F997CJK COMPATIBILITY IDEOGRAPH-2F9" + + "98CJK COMPATIBILITY IDEOGRAPH-2F999CJK COMPATIBILITY IDEOGRAPH-2F99ACJK " + + "COMPATIBILITY IDEOGRAPH-2F99BCJK COMPATIBILITY IDEOGRAPH-2F99CCJK COMPAT" + + "IBILITY IDEOGRAPH-2F99DCJK COMPATIBILITY IDEOGRAPH-2F99ECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F99FCJK COMPATIBILITY IDEOGRAPH-2F9A0CJK COMPATIBILITY IDEO" + + "GRAPH-2F9A1CJK COMPATIBILITY IDEOGRAPH-2F9A2CJK COMPATIBILITY IDEOGRAPH-" + + "2F9A3CJK COMPATIBILITY IDEOGRAPH-2F9A4CJK COMPATIBILITY IDEOGRAPH-2F9A5C" + + "JK COMPATIBILITY IDEOGRAPH-2F9A6CJK COMPATIBILITY IDEOGRAPH-2F9A7CJK COM" + + "PATIBILITY IDEOGRAPH-2F9A8CJK COMPATIBILITY IDEOGRAPH-2F9A9CJK COMPATIBI" + + "LITY IDEOGRAPH-2F9AACJK COMPATIBILITY IDEOGRAPH-2F9ABCJK COMPATIBILITY I" + + "DEOGRAPH-2F9ACCJK COMPATIBILITY IDEOGRAPH-2F9ADCJK COMPATIBILITY IDEOGRA" + + "PH-2F9AECJK COMPATIBILITY IDEOGRAPH-2F9AFCJK COMPATIBILITY IDEOGRAPH-2F9" + + "B0CJK COMPATIBILITY IDEOGRAPH-2F9B1CJK COMPATIBILITY IDEOGRAPH-2F9B2CJK " + + "COMPATIBILITY IDEOGRAPH-2F9B3CJK COMPATIBILITY IDEOGRAPH-2F9B4CJK COMPAT" + + "IBILITY IDEOGRAPH-2F9B5CJK COMPATIBILITY IDEOGRAPH-2F9B6CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F9B7CJK COMPATIBILITY IDEOGRAPH-2F9B8CJK COMPATIBILITY IDEO" + + "GRAPH-2F9B9CJK COMPATIBILITY IDEOGRAPH-2F9BACJK COMPATIBILITY IDEOGRAPH-" + + "2F9BBCJK COMPATIBILITY IDEOGRAPH-2F9BCCJK COMPATIBILITY IDEOGRAPH-2F9BDC" + + "JK COMPATIBILITY IDEOGRAPH-2F9BECJK COMPATIBILITY IDEOGRAPH-2F9BFCJK COM" + + "PATIBILITY IDEOGRAPH-2F9C0CJK COMPATIBILITY IDEOGRAPH-2F9C1CJK COMPATIBI" + + "LITY IDEOGRAPH-2F9C2CJK COMPATIBILITY IDEOGRAPH-2F9C3CJK COMPATIBILITY I" + + "DEOGRAPH-2F9C4CJK COMPATIBILITY IDEOGRAPH-2F9C5CJK COMPATIBILITY IDEOGRA" + + "PH-2F9C6CJK COMPATIBILITY IDEOGRAPH-2F9C7CJK COMPATIBILITY IDEOGRAPH-2F9" + + "C8CJK COMPATIBILITY IDEOGRAPH-2F9C9CJK COMPATIBILITY IDEOGRAPH-2F9CACJK " + + "COMPATIBILITY IDEOGRAPH-2F9CBCJK COMPATIBILITY IDEOGRAPH-2F9CCCJK COMPAT" + + "IBILITY IDEOGRAPH-2F9CDCJK COMPATIBILITY IDEOGRAPH-2F9CECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F9CFCJK COMPATIBILITY IDEOGRAPH-2F9D0CJK COMPATIBILITY IDEO" + + "GRAPH-2F9D1CJK COMPATIBILITY IDEOGRAPH-2F9D2CJK COMPATIBILITY IDEOGRAPH-" + + "2F9D3CJK COMPATIBILITY IDEOGRAPH-2F9D4CJK COMPATIBILITY IDEOGRAPH-2F9D5C" + + "JK COMPATIBILITY IDEOGRAPH-2F9D6CJK COMPATIBILITY IDEOGRAPH-2F9D7CJK COM" + + "PATIBILITY IDEOGRAPH-2F9D8CJK COMPATIBILITY IDEOGRAPH-2F9D9CJK COMPATIBI" + + "LITY IDEOGRAPH-2F9DACJK COMPATIBILITY IDEOGRAPH-2F9DBCJK COMPATIBILITY I" + + "DEOGRAPH-2F9DCCJK COMPATIBILITY IDEOGRAPH-2F9DDCJK COMPATIBILITY IDEOGRA" + + "PH-2F9DECJK COMPATIBILITY IDEOGRAPH-2F9DFCJK COMPATIBILITY IDEOGRAPH-2F9" + + "E0CJK COMPATIBILITY IDEOGRAPH-2F9E1CJK COMPATIBILITY IDEOGRAPH-2F9E2CJK " + + "COMPATIBILITY IDEOGRAPH-2F9E3CJK COMPATIBILITY IDEOGRAPH-2F9E4CJK COMPAT" + + "IBILITY IDEOGRAPH-2F9E5CJK COMPATIBILITY IDEOGRAPH-2F9E6CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F9E7CJK COMPATIBILITY IDEOGRAPH-2F9E8CJK COMPATIBILITY IDEO") + ("" + + "GRAPH-2F9E9CJK COMPATIBILITY IDEOGRAPH-2F9EACJK COMPATIBILITY IDEOGRAPH-" + + "2F9EBCJK COMPATIBILITY IDEOGRAPH-2F9ECCJK COMPATIBILITY IDEOGRAPH-2F9EDC" + + "JK COMPATIBILITY IDEOGRAPH-2F9EECJK COMPATIBILITY IDEOGRAPH-2F9EFCJK COM" + + "PATIBILITY IDEOGRAPH-2F9F0CJK COMPATIBILITY IDEOGRAPH-2F9F1CJK COMPATIBI" + + "LITY IDEOGRAPH-2F9F2CJK COMPATIBILITY IDEOGRAPH-2F9F3CJK COMPATIBILITY I" + + "DEOGRAPH-2F9F4CJK COMPATIBILITY IDEOGRAPH-2F9F5CJK COMPATIBILITY IDEOGRA" + + "PH-2F9F6CJK COMPATIBILITY IDEOGRAPH-2F9F7CJK COMPATIBILITY IDEOGRAPH-2F9" + + "F8CJK COMPATIBILITY IDEOGRAPH-2F9F9CJK COMPATIBILITY IDEOGRAPH-2F9FACJK " + + "COMPATIBILITY IDEOGRAPH-2F9FBCJK COMPATIBILITY IDEOGRAPH-2F9FCCJK COMPAT" + + "IBILITY IDEOGRAPH-2F9FDCJK COMPATIBILITY IDEOGRAPH-2F9FECJK COMPATIBILIT" + + "Y IDEOGRAPH-2F9FFCJK COMPATIBILITY IDEOGRAPH-2FA00CJK COMPATIBILITY IDEO" + + "GRAPH-2FA01CJK COMPATIBILITY IDEOGRAPH-2FA02CJK COMPATIBILITY IDEOGRAPH-" + + "2FA03CJK COMPATIBILITY IDEOGRAPH-2FA04CJK COMPATIBILITY IDEOGRAPH-2FA05C" + + "JK COMPATIBILITY IDEOGRAPH-2FA06CJK COMPATIBILITY IDEOGRAPH-2FA07CJK COM" + + "PATIBILITY IDEOGRAPH-2FA08CJK COMPATIBILITY IDEOGRAPH-2FA09CJK COMPATIBI" + + "LITY IDEOGRAPH-2FA0ACJK COMPATIBILITY IDEOGRAPH-2FA0BCJK COMPATIBILITY I" + + "DEOGRAPH-2FA0CCJK COMPATIBILITY IDEOGRAPH-2FA0DCJK COMPATIBILITY IDEOGRA" + + "PH-2FA0ECJK COMPATIBILITY IDEOGRAPH-2FA0FCJK COMPATIBILITY IDEOGRAPH-2FA" + + "10CJK COMPATIBILITY IDEOGRAPH-2FA11CJK COMPATIBILITY IDEOGRAPH-2FA12CJK " + + "COMPATIBILITY IDEOGRAPH-2FA13CJK COMPATIBILITY IDEOGRAPH-2FA14CJK COMPAT" + + "IBILITY IDEOGRAPH-2FA15CJK COMPATIBILITY IDEOGRAPH-2FA16CJK COMPATIBILIT" + + "Y IDEOGRAPH-2FA17CJK COMPATIBILITY IDEOGRAPH-2FA18CJK COMPATIBILITY IDEO" + + "GRAPH-2FA19CJK COMPATIBILITY IDEOGRAPH-2FA1ACJK COMPATIBILITY IDEOGRAPH-" + + "2FA1BCJK COMPATIBILITY IDEOGRAPH-2FA1CCJK COMPATIBILITY IDEOGRAPH-2FA1DL" + + "ANGUAGE TAGTAG SPACETAG EXCLAMATION MARKTAG QUOTATION MARKTAG NUMBER SIG" + + "NTAG DOLLAR SIGNTAG PERCENT SIGNTAG AMPERSANDTAG APOSTROPHETAG LEFT PARE" + + "NTHESISTAG RIGHT PARENTHESISTAG ASTERISKTAG PLUS SIGNTAG COMMATAG HYPHEN" + + "-MINUSTAG FULL STOPTAG SOLIDUSTAG DIGIT ZEROTAG DIGIT ONETAG DIGIT TWOTA" + + "G DIGIT THREETAG DIGIT FOURTAG DIGIT FIVETAG DIGIT SIXTAG DIGIT SEVENTAG" + + " DIGIT EIGHTTAG DIGIT NINETAG COLONTAG SEMICOLONTAG LESS-THAN SIGNTAG EQ" + + "UALS SIGNTAG GREATER-THAN SIGNTAG QUESTION MARKTAG COMMERCIAL ATTAG LATI" + + "N CAPITAL LETTER ATAG LATIN CAPITAL LETTER BTAG LATIN CAPITAL LETTER CTA" + + "G LATIN CAPITAL LETTER DTAG LATIN CAPITAL LETTER ETAG LATIN CAPITAL LETT" + + "ER FTAG LATIN CAPITAL LETTER GTAG LATIN CAPITAL LETTER HTAG LATIN CAPITA" + + "L LETTER ITAG LATIN CAPITAL LETTER JTAG LATIN CAPITAL LETTER KTAG LATIN " + + "CAPITAL LETTER LTAG LATIN CAPITAL LETTER MTAG LATIN CAPITAL LETTER NTAG " + + "LATIN CAPITAL LETTER OTAG LATIN CAPITAL LETTER PTAG LATIN CAPITAL LETTER" + + " QTAG LATIN CAPITAL LETTER RTAG LATIN CAPITAL LETTER STAG LATIN CAPITAL " + + "LETTER TTAG LATIN CAPITAL LETTER UTAG LATIN CAPITAL LETTER VTAG LATIN CA" + + "PITAL LETTER WTAG LATIN CAPITAL LETTER XTAG LATIN CAPITAL LETTER YTAG LA" + + "TIN CAPITAL LETTER ZTAG LEFT SQUARE BRACKETTAG REVERSE SOLIDUSTAG RIGHT " + + "SQUARE BRACKETTAG CIRCUMFLEX ACCENTTAG LOW LINETAG GRAVE ACCENTTAG LATIN" + + " SMALL LETTER ATAG LATIN SMALL LETTER BTAG LATIN SMALL LETTER CTAG LATIN" + + " SMALL LETTER DTAG LATIN SMALL LETTER ETAG LATIN SMALL LETTER FTAG LATIN" + + " SMALL LETTER GTAG LATIN SMALL LETTER HTAG LATIN SMALL LETTER ITAG LATIN" + + " SMALL LETTER JTAG LATIN SMALL LETTER KTAG LATIN SMALL LETTER LTAG LATIN" + + " SMALL LETTER MTAG LATIN SMALL LETTER NTAG LATIN SMALL LETTER OTAG LATIN" + + " SMALL LETTER PTAG LATIN SMALL LETTER QTAG LATIN SMALL LETTER RTAG LATIN" + + " SMALL LETTER STAG LATIN SMALL LETTER TTAG LATIN SMALL LETTER UTAG LATIN" + + " SMALL LETTER VTAG LATIN SMALL LETTER WTAG LATIN SMALL LETTER XTAG LATIN" + + " SMALL LETTER YTAG LATIN SMALL LETTER ZTAG LEFT CURLY BRACKETTAG VERTICA" + + "L LINETAG RIGHT CURLY BRACKETTAG TILDECANCEL TAGVARIATION SELECTOR-17VAR" + + "IATION SELECTOR-18VARIATION SELECTOR-19VARIATION SELECTOR-20VARIATION SE" + + "LECTOR-21VARIATION SELECTOR-22VARIATION SELECTOR-23VARIATION SELECTOR-24" + + "VARIATION SELECTOR-25VARIATION SELECTOR-26VARIATION SELECTOR-27VARIATION" + + " SELECTOR-28VARIATION SELECTOR-29VARIATION SELECTOR-30VARIATION SELECTOR" + + "-31VARIATION SELECTOR-32VARIATION SELECTOR-33VARIATION SELECTOR-34VARIAT" + + "ION SELECTOR-35VARIATION SELECTOR-36VARIATION SELECTOR-37VARIATION SELEC" + + "TOR-38VARIATION SELECTOR-39VARIATION SELECTOR-40VARIATION SELECTOR-41VAR" + + "IATION SELECTOR-42VARIATION SELECTOR-43VARIATION SELECTOR-44VARIATION SE" + + "LECTOR-45VARIATION SELECTOR-46VARIATION SELECTOR-47VARIATION SELECTOR-48" + + "VARIATION SELECTOR-49VARIATION SELECTOR-50VARIATION SELECTOR-51VARIATION" + + " SELECTOR-52VARIATION SELECTOR-53VARIATION SELECTOR-54VARIATION SELECTOR" + + "-55VARIATION SELECTOR-56VARIATION SELECTOR-57VARIATION SELECTOR-58VARIAT") + ("" + + "ION SELECTOR-59VARIATION SELECTOR-60VARIATION SELECTOR-61VARIATION SELEC" + + "TOR-62VARIATION SELECTOR-63VARIATION SELECTOR-64VARIATION SELECTOR-65VAR" + + "IATION SELECTOR-66VARIATION SELECTOR-67VARIATION SELECTOR-68VARIATION SE" + + "LECTOR-69VARIATION SELECTOR-70VARIATION SELECTOR-71VARIATION SELECTOR-72" + + "VARIATION SELECTOR-73VARIATION SELECTOR-74VARIATION SELECTOR-75VARIATION" + + " SELECTOR-76VARIATION SELECTOR-77VARIATION SELECTOR-78VARIATION SELECTOR" + + "-79VARIATION SELECTOR-80VARIATION SELECTOR-81VARIATION SELECTOR-82VARIAT" + + "ION SELECTOR-83VARIATION SELECTOR-84VARIATION SELECTOR-85VARIATION SELEC" + + "TOR-86VARIATION SELECTOR-87VARIATION SELECTOR-88VARIATION SELECTOR-89VAR" + + "IATION SELECTOR-90VARIATION SELECTOR-91VARIATION SELECTOR-92VARIATION SE" + + "LECTOR-93VARIATION SELECTOR-94VARIATION SELECTOR-95VARIATION SELECTOR-96" + + "VARIATION SELECTOR-97VARIATION SELECTOR-98VARIATION SELECTOR-99VARIATION" + + " SELECTOR-100VARIATION SELECTOR-101VARIATION SELECTOR-102VARIATION SELEC" + + "TOR-103VARIATION SELECTOR-104VARIATION SELECTOR-105VARIATION SELECTOR-10" + + "6VARIATION SELECTOR-107VARIATION SELECTOR-108VARIATION SELECTOR-109VARIA" + + "TION SELECTOR-110VARIATION SELECTOR-111VARIATION SELECTOR-112VARIATION S" + + "ELECTOR-113VARIATION SELECTOR-114VARIATION SELECTOR-115VARIATION SELECTO" + + "R-116VARIATION SELECTOR-117VARIATION SELECTOR-118VARIATION SELECTOR-119V" + + "ARIATION SELECTOR-120VARIATION SELECTOR-121VARIATION SELECTOR-122VARIATI" + + "ON SELECTOR-123VARIATION SELECTOR-124VARIATION SELECTOR-125VARIATION SEL" + + "ECTOR-126VARIATION SELECTOR-127VARIATION SELECTOR-128VARIATION SELECTOR-" + + "129VARIATION SELECTOR-130VARIATION SELECTOR-131VARIATION SELECTOR-132VAR" + + "IATION SELECTOR-133VARIATION SELECTOR-134VARIATION SELECTOR-135VARIATION" + + " SELECTOR-136VARIATION SELECTOR-137VARIATION SELECTOR-138VARIATION SELEC" + + "TOR-139VARIATION SELECTOR-140VARIATION SELECTOR-141VARIATION SELECTOR-14" + + "2VARIATION SELECTOR-143VARIATION SELECTOR-144VARIATION SELECTOR-145VARIA" + + "TION SELECTOR-146VARIATION SELECTOR-147VARIATION SELECTOR-148VARIATION S" + + "ELECTOR-149VARIATION SELECTOR-150VARIATION SELECTOR-151VARIATION SELECTO" + + "R-152VARIATION SELECTOR-153VARIATION SELECTOR-154VARIATION SELECTOR-155V" + + "ARIATION SELECTOR-156VARIATION SELECTOR-157VARIATION SELECTOR-158VARIATI" + + "ON SELECTOR-159VARIATION SELECTOR-160VARIATION SELECTOR-161VARIATION SEL" + + "ECTOR-162VARIATION SELECTOR-163VARIATION SELECTOR-164VARIATION SELECTOR-" + + "165VARIATION SELECTOR-166VARIATION SELECTOR-167VARIATION SELECTOR-168VAR" + + "IATION SELECTOR-169VARIATION SELECTOR-170VARIATION SELECTOR-171VARIATION" + + " SELECTOR-172VARIATION SELECTOR-173VARIATION SELECTOR-174VARIATION SELEC" + + "TOR-175VARIATION SELECTOR-176VARIATION SELECTOR-177VARIATION SELECTOR-17" + + "8VARIATION SELECTOR-179VARIATION SELECTOR-180VARIATION SELECTOR-181VARIA" + + "TION SELECTOR-182VARIATION SELECTOR-183VARIATION SELECTOR-184VARIATION S" + + "ELECTOR-185VARIATION SELECTOR-186VARIATION SELECTOR-187VARIATION SELECTO" + + "R-188VARIATION SELECTOR-189VARIATION SELECTOR-190VARIATION SELECTOR-191V" + + "ARIATION SELECTOR-192VARIATION SELECTOR-193VARIATION SELECTOR-194VARIATI" + + "ON SELECTOR-195VARIATION SELECTOR-196VARIATION SELECTOR-197VARIATION SEL" + + "ECTOR-198VARIATION SELECTOR-199VARIATION SELECTOR-200VARIATION SELECTOR-" + + "201VARIATION SELECTOR-202VARIATION SELECTOR-203VARIATION SELECTOR-204VAR" + + "IATION SELECTOR-205VARIATION SELECTOR-206VARIATION SELECTOR-207VARIATION" + + " SELECTOR-208VARIATION SELECTOR-209VARIATION SELECTOR-210VARIATION SELEC" + + "TOR-211VARIATION SELECTOR-212VARIATION SELECTOR-213VARIATION SELECTOR-21" + + "4VARIATION SELECTOR-215VARIATION SELECTOR-216VARIATION SELECTOR-217VARIA" + + "TION SELECTOR-218VARIATION SELECTOR-219VARIATION SELECTOR-220VARIATION S" + + "ELECTOR-221VARIATION SELECTOR-222VARIATION SELECTOR-223VARIATION SELECTO" + + "R-224VARIATION SELECTOR-225VARIATION SELECTOR-226VARIATION SELECTOR-227V" + + "ARIATION SELECTOR-228VARIATION SELECTOR-229VARIATION SELECTOR-230VARIATI" + + "ON SELECTOR-231VARIATION SELECTOR-232VARIATION SELECTOR-233VARIATION SEL" + + "ECTOR-234VARIATION SELECTOR-235VARIATION SELECTOR-236VARIATION SELECTOR-" + + "237VARIATION SELECTOR-238VARIATION SELECTOR-239VARIATION SELECTOR-240VAR" + + "IATION SELECTOR-241VARIATION SELECTOR-242VARIATION SELECTOR-243VARIATION" + + " SELECTOR-244VARIATION SELECTOR-245VARIATION SELECTOR-246VARIATION SELEC" + + "TOR-247VARIATION SELECTOR-248VARIATION SELECTOR-249VARIATION SELECTOR-25" + + "0VARIATION SELECTOR-251VARIATION SELECTOR-252VARIATION SELECTOR-253VARIA" + + "TION SELECTOR-254VARIATION SELECTOR-255VARIATION SELECTOR-256") + +// Total table size 855081 bytes (835KiB); checksum: 98E3EADD diff --git a/vendor/golang.org/x/text/width/common_test.go b/vendor/golang.org/x/text/width/common_test.go new file mode 100644 index 0000000..9ebb782 --- /dev/null +++ b/vendor/golang.org/x/text/width/common_test.go @@ -0,0 +1,92 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package width + +// This code is shared between the main code generator and the test code. + +import ( + "flag" + "log" + "strconv" + "strings" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/ucd" +) + +var ( + outputFile = flag.String("out", "tables.go", "output file") +) + +var typeMap = map[string]elem{ + "A": tagAmbiguous, + "N": tagNeutral, + "Na": tagNarrow, + "W": tagWide, + "F": tagFullwidth, + "H": tagHalfwidth, +} + +// getWidthData calls f for every entry for which it is defined. +// +// f may be called multiple times for the same rune. The last call to f is the +// correct value. f is not called for all runes. The default tag type is +// Neutral. +func getWidthData(f func(r rune, tag elem, alt rune)) { + // Set the default values for Unified Ideographs. In line with Annex 11, + // we encode full ranges instead of the defined runes in Unified_Ideograph. + for _, b := range []struct{ lo, hi rune }{ + {0x4E00, 0x9FFF}, // the CJK Unified Ideographs block, + {0x3400, 0x4DBF}, // the CJK Unified Ideographs Externsion A block, + {0xF900, 0xFAFF}, // the CJK Compatibility Ideographs block, + {0x20000, 0x2FFFF}, // the Supplementary Ideographic Plane, + {0x30000, 0x3FFFF}, // the Tertiary Ideographic Plane, + } { + for r := b.lo; r <= b.hi; r++ { + f(r, tagWide, 0) + } + } + + inverse := map[rune]rune{} + maps := map[string]bool{ + "<wide>": true, + "<narrow>": true, + } + + // We cannot reuse package norm's decomposition, as we need an unexpanded + // decomposition. We make use of the opportunity to verify that the + // decomposition type is as expected. + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + s := strings.SplitN(p.String(ucd.DecompMapping), " ", 2) + if !maps[s[0]] { + return + } + x, err := strconv.ParseUint(s[1], 16, 32) + if err != nil { + log.Fatalf("Error parsing rune %q", s[1]) + } + if inverse[r] != 0 || inverse[rune(x)] != 0 { + log.Fatalf("Circular dependency in mapping between %U and %U", r, x) + } + inverse[r] = rune(x) + inverse[rune(x)] = r + }) + + // <rune range>;<type> + ucd.Parse(gen.OpenUCDFile("EastAsianWidth.txt"), func(p *ucd.Parser) { + tag, ok := typeMap[p.String(1)] + if !ok { + log.Fatalf("Unknown width type %q", p.String(1)) + } + r := p.Rune(0) + alt, ok := inverse[r] + if tag == tagFullwidth || tag == tagHalfwidth && r != wonSign { + tag |= tagNeedsFold + if !ok { + log.Fatalf("Narrow or wide rune %U has no decomposition", r) + } + } + f(r, tag, alt) + }) +} diff --git a/vendor/golang.org/x/text/width/example_test.go b/vendor/golang.org/x/text/width/example_test.go new file mode 100644 index 0000000..62adba6 --- /dev/null +++ b/vendor/golang.org/x/text/width/example_test.go @@ -0,0 +1,52 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package width_test + +import ( + "fmt" + + "golang.org/x/text/width" +) + +func ExampleTransformer_fold() { + s := "abヲ₩○¥A" + f := width.Fold.String(s) + fmt.Printf("%U: %s\n", []rune(s), s) + fmt.Printf("%U: %s\n", []rune(f), f) + + // Output: + // [U+0061 U+0062 U+FF66 U+FFE6 U+FFEE U+FFE5 U+FF21]: abヲ₩○¥A + // [U+0061 U+0062 U+30F2 U+20A9 U+25CB U+00A5 U+0041]: abヲ₩○¥A +} + +func ExampleTransformer_widen() { + s := "ab¥ヲ₩○" + w := width.Widen.String(s) + fmt.Printf("%U: %s\n", []rune(s), s) + fmt.Printf("%U: %s\n", []rune(w), w) + + // Output: + // [U+0061 U+0062 U+00A5 U+FF66 U+20A9 U+FFEE]: ab¥ヲ₩○ + // [U+FF41 U+FF42 U+FFE5 U+30F2 U+FFE6 U+25CB]: ab¥ヲ₩○ +} + +func ExampleTransformer_narrow() { + s := "abヲ₩○¥A" + n := width.Narrow.String(s) + fmt.Printf("%U: %s\n", []rune(s), s) + fmt.Printf("%U: %s\n", []rune(n), n) + + // Ambiguous characters with a halfwidth equivalent get mapped as well. + s = "←" + n = width.Narrow.String(s) + fmt.Printf("%U: %s\n", []rune(s), s) + fmt.Printf("%U: %s\n", []rune(n), n) + + // Output: + // [U+0061 U+0062 U+30F2 U+FFE6 U+25CB U+FFE5 U+FF21]: abヲ₩○¥A + // [U+0061 U+0062 U+FF66 U+20A9 U+FFEE U+00A5 U+0041]: abヲ₩○¥A + // [U+2190]: ← + // [U+FFE9]: ← +} diff --git a/vendor/golang.org/x/text/width/gen.go b/vendor/golang.org/x/text/width/gen.go new file mode 100644 index 0000000..03d9f99 --- /dev/null +++ b/vendor/golang.org/x/text/width/gen.go @@ -0,0 +1,115 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// This program generates the trie for width operations. The generated table +// includes width category information as well as the normalization mappings. +package main + +import ( + "bytes" + "fmt" + "io" + "log" + "math" + "unicode/utf8" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/triegen" +) + +// See gen_common.go for flags. + +func main() { + gen.Init() + genTables() + genTests() + gen.Repackage("gen_trieval.go", "trieval.go", "width") + gen.Repackage("gen_common.go", "common_test.go", "width") +} + +func genTables() { + t := triegen.NewTrie("width") + // fold and inverse mappings. See mapComment for a description of the format + // of each entry. Add dummy value to make an index of 0 mean no mapping. + inverse := [][4]byte{{}} + mapping := map[[4]byte]int{[4]byte{}: 0} + + getWidthData(func(r rune, tag elem, alt rune) { + idx := 0 + if alt != 0 { + var buf [4]byte + buf[0] = byte(utf8.EncodeRune(buf[1:], alt)) + s := string(r) + buf[buf[0]] ^= s[len(s)-1] + var ok bool + if idx, ok = mapping[buf]; !ok { + idx = len(mapping) + if idx > math.MaxUint8 { + log.Fatalf("Index %d does not fit in a byte.", idx) + } + mapping[buf] = idx + inverse = append(inverse, buf) + } + } + t.Insert(r, uint64(tag|elem(idx))) + }) + + w := &bytes.Buffer{} + gen.WriteUnicodeVersion(w) + + sz, err := t.Gen(w) + if err != nil { + log.Fatal(err) + } + + sz += writeMappings(w, inverse) + + fmt.Fprintf(w, "// Total table size %d bytes (%dKiB)\n", sz, sz/1024) + + gen.WriteGoFile(*outputFile, "width", w.Bytes()) +} + +const inverseDataComment = ` +// inverseData contains 4-byte entries of the following format: +// <length> <modified UTF-8-encoded rune> <0 padding> +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// { 0x01, 0xE0, 0x00, 0x00 } +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// E0 ^ A1 = 41. +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// E0 ^ A2 = 42. +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8.` + +func writeMappings(w io.Writer, data [][4]byte) int { + fmt.Fprintln(w, inverseDataComment) + fmt.Fprintf(w, "var inverseData = [%d][4]byte{\n", len(data)) + for _, x := range data { + fmt.Fprintf(w, "{ 0x%02x, 0x%02x, 0x%02x, 0x%02x },\n", x[0], x[1], x[2], x[3]) + } + fmt.Fprintln(w, "}") + return len(data) * 4 +} + +func genTests() { + w := &bytes.Buffer{} + fmt.Fprintf(w, "\nvar mapRunes = map[rune]struct{r rune; e elem}{\n") + getWidthData(func(r rune, tag elem, alt rune) { + if alt != 0 { + fmt.Fprintf(w, "\t0x%X: {0x%X, 0x%X},\n", r, alt, tag) + } + }) + fmt.Fprintln(w, "}") + gen.WriteGoFile("runes_test.go", "width", w.Bytes()) +} diff --git a/vendor/golang.org/x/text/width/gen_common.go b/vendor/golang.org/x/text/width/gen_common.go new file mode 100644 index 0000000..601e752 --- /dev/null +++ b/vendor/golang.org/x/text/width/gen_common.go @@ -0,0 +1,96 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// This code is shared between the main code generator and the test code. + +import ( + "flag" + "log" + "strconv" + "strings" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/ucd" +) + +var ( + outputFile = flag.String("out", "tables.go", "output file") +) + +var typeMap = map[string]elem{ + "A": tagAmbiguous, + "N": tagNeutral, + "Na": tagNarrow, + "W": tagWide, + "F": tagFullwidth, + "H": tagHalfwidth, +} + +// getWidthData calls f for every entry for which it is defined. +// +// f may be called multiple times for the same rune. The last call to f is the +// correct value. f is not called for all runes. The default tag type is +// Neutral. +func getWidthData(f func(r rune, tag elem, alt rune)) { + // Set the default values for Unified Ideographs. In line with Annex 11, + // we encode full ranges instead of the defined runes in Unified_Ideograph. + for _, b := range []struct{ lo, hi rune }{ + {0x4E00, 0x9FFF}, // the CJK Unified Ideographs block, + {0x3400, 0x4DBF}, // the CJK Unified Ideographs Externsion A block, + {0xF900, 0xFAFF}, // the CJK Compatibility Ideographs block, + {0x20000, 0x2FFFF}, // the Supplementary Ideographic Plane, + {0x30000, 0x3FFFF}, // the Tertiary Ideographic Plane, + } { + for r := b.lo; r <= b.hi; r++ { + f(r, tagWide, 0) + } + } + + inverse := map[rune]rune{} + maps := map[string]bool{ + "<wide>": true, + "<narrow>": true, + } + + // We cannot reuse package norm's decomposition, as we need an unexpanded + // decomposition. We make use of the opportunity to verify that the + // decomposition type is as expected. + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + s := strings.SplitN(p.String(ucd.DecompMapping), " ", 2) + if !maps[s[0]] { + return + } + x, err := strconv.ParseUint(s[1], 16, 32) + if err != nil { + log.Fatalf("Error parsing rune %q", s[1]) + } + if inverse[r] != 0 || inverse[rune(x)] != 0 { + log.Fatalf("Circular dependency in mapping between %U and %U", r, x) + } + inverse[r] = rune(x) + inverse[rune(x)] = r + }) + + // <rune range>;<type> + ucd.Parse(gen.OpenUCDFile("EastAsianWidth.txt"), func(p *ucd.Parser) { + tag, ok := typeMap[p.String(1)] + if !ok { + log.Fatalf("Unknown width type %q", p.String(1)) + } + r := p.Rune(0) + alt, ok := inverse[r] + if tag == tagFullwidth || tag == tagHalfwidth && r != wonSign { + tag |= tagNeedsFold + if !ok { + log.Fatalf("Narrow or wide rune %U has no decomposition", r) + } + } + f(r, tag, alt) + }) +} diff --git a/vendor/golang.org/x/text/width/gen_trieval.go b/vendor/golang.org/x/text/width/gen_trieval.go new file mode 100644 index 0000000..c17334a --- /dev/null +++ b/vendor/golang.org/x/text/width/gen_trieval.go @@ -0,0 +1,34 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +// elem is an entry of the width trie. The high byte is used to encode the type +// of the rune. The low byte is used to store the index to a mapping entry in +// the inverseData array. +type elem uint16 + +const ( + tagNeutral elem = iota << typeShift + tagAmbiguous + tagWide + tagNarrow + tagFullwidth + tagHalfwidth +) + +const ( + numTypeBits = 3 + typeShift = 16 - numTypeBits + + // tagNeedsFold is true for all fullwidth and halfwidth runes except for + // the Won sign U+20A9. + tagNeedsFold = 0x1000 + + // The Korean Won sign is halfwidth, but SHOULD NOT be mapped to a wide + // variant. + wonSign rune = 0x20A9 +) diff --git a/vendor/golang.org/x/text/width/kind_string.go b/vendor/golang.org/x/text/width/kind_string.go new file mode 100644 index 0000000..ab4fee5 --- /dev/null +++ b/vendor/golang.org/x/text/width/kind_string.go @@ -0,0 +1,16 @@ +// Code generated by "stringer -type=Kind"; DO NOT EDIT + +package width + +import "fmt" + +const _Kind_name = "NeutralEastAsianAmbiguousEastAsianWideEastAsianNarrowEastAsianFullwidthEastAsianHalfwidth" + +var _Kind_index = [...]uint8{0, 7, 25, 38, 53, 71, 89} + +func (i Kind) String() string { + if i < 0 || i >= Kind(len(_Kind_index)-1) { + return fmt.Sprintf("Kind(%d)", i) + } + return _Kind_name[_Kind_index[i]:_Kind_index[i+1]] +} diff --git a/vendor/golang.org/x/text/width/runes_test.go b/vendor/golang.org/x/text/width/runes_test.go new file mode 100644 index 0000000..587dab4 --- /dev/null +++ b/vendor/golang.org/x/text/width/runes_test.go @@ -0,0 +1,461 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package width + +var mapRunes = map[rune]struct { + r rune + e elem +}{ + 0x20: {0x3000, 0x6000}, + 0x21: {0xFF01, 0x6000}, + 0x22: {0xFF02, 0x6000}, + 0x23: {0xFF03, 0x6000}, + 0x24: {0xFF04, 0x6000}, + 0x25: {0xFF05, 0x6000}, + 0x26: {0xFF06, 0x6000}, + 0x27: {0xFF07, 0x6000}, + 0x28: {0xFF08, 0x6000}, + 0x29: {0xFF09, 0x6000}, + 0x2A: {0xFF0A, 0x6000}, + 0x2B: {0xFF0B, 0x6000}, + 0x2C: {0xFF0C, 0x6000}, + 0x2D: {0xFF0D, 0x6000}, + 0x2E: {0xFF0E, 0x6000}, + 0x2F: {0xFF0F, 0x6000}, + 0x30: {0xFF10, 0x6000}, + 0x31: {0xFF11, 0x6000}, + 0x32: {0xFF12, 0x6000}, + 0x33: {0xFF13, 0x6000}, + 0x34: {0xFF14, 0x6000}, + 0x35: {0xFF15, 0x6000}, + 0x36: {0xFF16, 0x6000}, + 0x37: {0xFF17, 0x6000}, + 0x38: {0xFF18, 0x6000}, + 0x39: {0xFF19, 0x6000}, + 0x3A: {0xFF1A, 0x6000}, + 0x3B: {0xFF1B, 0x6000}, + 0x3C: {0xFF1C, 0x6000}, + 0x3D: {0xFF1D, 0x6000}, + 0x3E: {0xFF1E, 0x6000}, + 0x3F: {0xFF1F, 0x6000}, + 0x40: {0xFF20, 0x6000}, + 0x41: {0xFF21, 0x6000}, + 0x42: {0xFF22, 0x6000}, + 0x43: {0xFF23, 0x6000}, + 0x44: {0xFF24, 0x6000}, + 0x45: {0xFF25, 0x6000}, + 0x46: {0xFF26, 0x6000}, + 0x47: {0xFF27, 0x6000}, + 0x48: {0xFF28, 0x6000}, + 0x49: {0xFF29, 0x6000}, + 0x4A: {0xFF2A, 0x6000}, + 0x4B: {0xFF2B, 0x6000}, + 0x4C: {0xFF2C, 0x6000}, + 0x4D: {0xFF2D, 0x6000}, + 0x4E: {0xFF2E, 0x6000}, + 0x4F: {0xFF2F, 0x6000}, + 0x50: {0xFF30, 0x6000}, + 0x51: {0xFF31, 0x6000}, + 0x52: {0xFF32, 0x6000}, + 0x53: {0xFF33, 0x6000}, + 0x54: {0xFF34, 0x6000}, + 0x55: {0xFF35, 0x6000}, + 0x56: {0xFF36, 0x6000}, + 0x57: {0xFF37, 0x6000}, + 0x58: {0xFF38, 0x6000}, + 0x59: {0xFF39, 0x6000}, + 0x5A: {0xFF3A, 0x6000}, + 0x5B: {0xFF3B, 0x6000}, + 0x5C: {0xFF3C, 0x6000}, + 0x5D: {0xFF3D, 0x6000}, + 0x5E: {0xFF3E, 0x6000}, + 0x5F: {0xFF3F, 0x6000}, + 0x60: {0xFF40, 0x6000}, + 0x61: {0xFF41, 0x6000}, + 0x62: {0xFF42, 0x6000}, + 0x63: {0xFF43, 0x6000}, + 0x64: {0xFF44, 0x6000}, + 0x65: {0xFF45, 0x6000}, + 0x66: {0xFF46, 0x6000}, + 0x67: {0xFF47, 0x6000}, + 0x68: {0xFF48, 0x6000}, + 0x69: {0xFF49, 0x6000}, + 0x6A: {0xFF4A, 0x6000}, + 0x6B: {0xFF4B, 0x6000}, + 0x6C: {0xFF4C, 0x6000}, + 0x6D: {0xFF4D, 0x6000}, + 0x6E: {0xFF4E, 0x6000}, + 0x6F: {0xFF4F, 0x6000}, + 0x70: {0xFF50, 0x6000}, + 0x71: {0xFF51, 0x6000}, + 0x72: {0xFF52, 0x6000}, + 0x73: {0xFF53, 0x6000}, + 0x74: {0xFF54, 0x6000}, + 0x75: {0xFF55, 0x6000}, + 0x76: {0xFF56, 0x6000}, + 0x77: {0xFF57, 0x6000}, + 0x78: {0xFF58, 0x6000}, + 0x79: {0xFF59, 0x6000}, + 0x7A: {0xFF5A, 0x6000}, + 0x7B: {0xFF5B, 0x6000}, + 0x7C: {0xFF5C, 0x6000}, + 0x7D: {0xFF5D, 0x6000}, + 0x7E: {0xFF5E, 0x6000}, + 0xA2: {0xFFE0, 0x6000}, + 0xA3: {0xFFE1, 0x6000}, + 0xA5: {0xFFE5, 0x6000}, + 0xA6: {0xFFE4, 0x6000}, + 0xAC: {0xFFE2, 0x6000}, + 0xAF: {0xFFE3, 0x6000}, + 0x20A9: {0xFFE6, 0xA000}, + 0x2190: {0xFFE9, 0x2000}, + 0x2191: {0xFFEA, 0x2000}, + 0x2192: {0xFFEB, 0x2000}, + 0x2193: {0xFFEC, 0x2000}, + 0x2502: {0xFFE8, 0x2000}, + 0x25A0: {0xFFED, 0x2000}, + 0x25CB: {0xFFEE, 0x2000}, + 0x2985: {0xFF5F, 0x6000}, + 0x2986: {0xFF60, 0x6000}, + 0x3000: {0x20, 0x9000}, + 0x3001: {0xFF64, 0x4000}, + 0x3002: {0xFF61, 0x4000}, + 0x300C: {0xFF62, 0x4000}, + 0x300D: {0xFF63, 0x4000}, + 0x3099: {0xFF9E, 0x4000}, + 0x309A: {0xFF9F, 0x4000}, + 0x30A1: {0xFF67, 0x4000}, + 0x30A2: {0xFF71, 0x4000}, + 0x30A3: {0xFF68, 0x4000}, + 0x30A4: {0xFF72, 0x4000}, + 0x30A5: {0xFF69, 0x4000}, + 0x30A6: {0xFF73, 0x4000}, + 0x30A7: {0xFF6A, 0x4000}, + 0x30A8: {0xFF74, 0x4000}, + 0x30A9: {0xFF6B, 0x4000}, + 0x30AA: {0xFF75, 0x4000}, + 0x30AB: {0xFF76, 0x4000}, + 0x30AD: {0xFF77, 0x4000}, + 0x30AF: {0xFF78, 0x4000}, + 0x30B1: {0xFF79, 0x4000}, + 0x30B3: {0xFF7A, 0x4000}, + 0x30B5: {0xFF7B, 0x4000}, + 0x30B7: {0xFF7C, 0x4000}, + 0x30B9: {0xFF7D, 0x4000}, + 0x30BB: {0xFF7E, 0x4000}, + 0x30BD: {0xFF7F, 0x4000}, + 0x30BF: {0xFF80, 0x4000}, + 0x30C1: {0xFF81, 0x4000}, + 0x30C3: {0xFF6F, 0x4000}, + 0x30C4: {0xFF82, 0x4000}, + 0x30C6: {0xFF83, 0x4000}, + 0x30C8: {0xFF84, 0x4000}, + 0x30CA: {0xFF85, 0x4000}, + 0x30CB: {0xFF86, 0x4000}, + 0x30CC: {0xFF87, 0x4000}, + 0x30CD: {0xFF88, 0x4000}, + 0x30CE: {0xFF89, 0x4000}, + 0x30CF: {0xFF8A, 0x4000}, + 0x30D2: {0xFF8B, 0x4000}, + 0x30D5: {0xFF8C, 0x4000}, + 0x30D8: {0xFF8D, 0x4000}, + 0x30DB: {0xFF8E, 0x4000}, + 0x30DE: {0xFF8F, 0x4000}, + 0x30DF: {0xFF90, 0x4000}, + 0x30E0: {0xFF91, 0x4000}, + 0x30E1: {0xFF92, 0x4000}, + 0x30E2: {0xFF93, 0x4000}, + 0x30E3: {0xFF6C, 0x4000}, + 0x30E4: {0xFF94, 0x4000}, + 0x30E5: {0xFF6D, 0x4000}, + 0x30E6: {0xFF95, 0x4000}, + 0x30E7: {0xFF6E, 0x4000}, + 0x30E8: {0xFF96, 0x4000}, + 0x30E9: {0xFF97, 0x4000}, + 0x30EA: {0xFF98, 0x4000}, + 0x30EB: {0xFF99, 0x4000}, + 0x30EC: {0xFF9A, 0x4000}, + 0x30ED: {0xFF9B, 0x4000}, + 0x30EF: {0xFF9C, 0x4000}, + 0x30F2: {0xFF66, 0x4000}, + 0x30F3: {0xFF9D, 0x4000}, + 0x30FB: {0xFF65, 0x4000}, + 0x30FC: {0xFF70, 0x4000}, + 0x3131: {0xFFA1, 0x4000}, + 0x3132: {0xFFA2, 0x4000}, + 0x3133: {0xFFA3, 0x4000}, + 0x3134: {0xFFA4, 0x4000}, + 0x3135: {0xFFA5, 0x4000}, + 0x3136: {0xFFA6, 0x4000}, + 0x3137: {0xFFA7, 0x4000}, + 0x3138: {0xFFA8, 0x4000}, + 0x3139: {0xFFA9, 0x4000}, + 0x313A: {0xFFAA, 0x4000}, + 0x313B: {0xFFAB, 0x4000}, + 0x313C: {0xFFAC, 0x4000}, + 0x313D: {0xFFAD, 0x4000}, + 0x313E: {0xFFAE, 0x4000}, + 0x313F: {0xFFAF, 0x4000}, + 0x3140: {0xFFB0, 0x4000}, + 0x3141: {0xFFB1, 0x4000}, + 0x3142: {0xFFB2, 0x4000}, + 0x3143: {0xFFB3, 0x4000}, + 0x3144: {0xFFB4, 0x4000}, + 0x3145: {0xFFB5, 0x4000}, + 0x3146: {0xFFB6, 0x4000}, + 0x3147: {0xFFB7, 0x4000}, + 0x3148: {0xFFB8, 0x4000}, + 0x3149: {0xFFB9, 0x4000}, + 0x314A: {0xFFBA, 0x4000}, + 0x314B: {0xFFBB, 0x4000}, + 0x314C: {0xFFBC, 0x4000}, + 0x314D: {0xFFBD, 0x4000}, + 0x314E: {0xFFBE, 0x4000}, + 0x314F: {0xFFC2, 0x4000}, + 0x3150: {0xFFC3, 0x4000}, + 0x3151: {0xFFC4, 0x4000}, + 0x3152: {0xFFC5, 0x4000}, + 0x3153: {0xFFC6, 0x4000}, + 0x3154: {0xFFC7, 0x4000}, + 0x3155: {0xFFCA, 0x4000}, + 0x3156: {0xFFCB, 0x4000}, + 0x3157: {0xFFCC, 0x4000}, + 0x3158: {0xFFCD, 0x4000}, + 0x3159: {0xFFCE, 0x4000}, + 0x315A: {0xFFCF, 0x4000}, + 0x315B: {0xFFD2, 0x4000}, + 0x315C: {0xFFD3, 0x4000}, + 0x315D: {0xFFD4, 0x4000}, + 0x315E: {0xFFD5, 0x4000}, + 0x315F: {0xFFD6, 0x4000}, + 0x3160: {0xFFD7, 0x4000}, + 0x3161: {0xFFDA, 0x4000}, + 0x3162: {0xFFDB, 0x4000}, + 0x3163: {0xFFDC, 0x4000}, + 0x3164: {0xFFA0, 0x4000}, + 0xFF01: {0x21, 0x9000}, + 0xFF02: {0x22, 0x9000}, + 0xFF03: {0x23, 0x9000}, + 0xFF04: {0x24, 0x9000}, + 0xFF05: {0x25, 0x9000}, + 0xFF06: {0x26, 0x9000}, + 0xFF07: {0x27, 0x9000}, + 0xFF08: {0x28, 0x9000}, + 0xFF09: {0x29, 0x9000}, + 0xFF0A: {0x2A, 0x9000}, + 0xFF0B: {0x2B, 0x9000}, + 0xFF0C: {0x2C, 0x9000}, + 0xFF0D: {0x2D, 0x9000}, + 0xFF0E: {0x2E, 0x9000}, + 0xFF0F: {0x2F, 0x9000}, + 0xFF10: {0x30, 0x9000}, + 0xFF11: {0x31, 0x9000}, + 0xFF12: {0x32, 0x9000}, + 0xFF13: {0x33, 0x9000}, + 0xFF14: {0x34, 0x9000}, + 0xFF15: {0x35, 0x9000}, + 0xFF16: {0x36, 0x9000}, + 0xFF17: {0x37, 0x9000}, + 0xFF18: {0x38, 0x9000}, + 0xFF19: {0x39, 0x9000}, + 0xFF1A: {0x3A, 0x9000}, + 0xFF1B: {0x3B, 0x9000}, + 0xFF1C: {0x3C, 0x9000}, + 0xFF1D: {0x3D, 0x9000}, + 0xFF1E: {0x3E, 0x9000}, + 0xFF1F: {0x3F, 0x9000}, + 0xFF20: {0x40, 0x9000}, + 0xFF21: {0x41, 0x9000}, + 0xFF22: {0x42, 0x9000}, + 0xFF23: {0x43, 0x9000}, + 0xFF24: {0x44, 0x9000}, + 0xFF25: {0x45, 0x9000}, + 0xFF26: {0x46, 0x9000}, + 0xFF27: {0x47, 0x9000}, + 0xFF28: {0x48, 0x9000}, + 0xFF29: {0x49, 0x9000}, + 0xFF2A: {0x4A, 0x9000}, + 0xFF2B: {0x4B, 0x9000}, + 0xFF2C: {0x4C, 0x9000}, + 0xFF2D: {0x4D, 0x9000}, + 0xFF2E: {0x4E, 0x9000}, + 0xFF2F: {0x4F, 0x9000}, + 0xFF30: {0x50, 0x9000}, + 0xFF31: {0x51, 0x9000}, + 0xFF32: {0x52, 0x9000}, + 0xFF33: {0x53, 0x9000}, + 0xFF34: {0x54, 0x9000}, + 0xFF35: {0x55, 0x9000}, + 0xFF36: {0x56, 0x9000}, + 0xFF37: {0x57, 0x9000}, + 0xFF38: {0x58, 0x9000}, + 0xFF39: {0x59, 0x9000}, + 0xFF3A: {0x5A, 0x9000}, + 0xFF3B: {0x5B, 0x9000}, + 0xFF3C: {0x5C, 0x9000}, + 0xFF3D: {0x5D, 0x9000}, + 0xFF3E: {0x5E, 0x9000}, + 0xFF3F: {0x5F, 0x9000}, + 0xFF40: {0x60, 0x9000}, + 0xFF41: {0x61, 0x9000}, + 0xFF42: {0x62, 0x9000}, + 0xFF43: {0x63, 0x9000}, + 0xFF44: {0x64, 0x9000}, + 0xFF45: {0x65, 0x9000}, + 0xFF46: {0x66, 0x9000}, + 0xFF47: {0x67, 0x9000}, + 0xFF48: {0x68, 0x9000}, + 0xFF49: {0x69, 0x9000}, + 0xFF4A: {0x6A, 0x9000}, + 0xFF4B: {0x6B, 0x9000}, + 0xFF4C: {0x6C, 0x9000}, + 0xFF4D: {0x6D, 0x9000}, + 0xFF4E: {0x6E, 0x9000}, + 0xFF4F: {0x6F, 0x9000}, + 0xFF50: {0x70, 0x9000}, + 0xFF51: {0x71, 0x9000}, + 0xFF52: {0x72, 0x9000}, + 0xFF53: {0x73, 0x9000}, + 0xFF54: {0x74, 0x9000}, + 0xFF55: {0x75, 0x9000}, + 0xFF56: {0x76, 0x9000}, + 0xFF57: {0x77, 0x9000}, + 0xFF58: {0x78, 0x9000}, + 0xFF59: {0x79, 0x9000}, + 0xFF5A: {0x7A, 0x9000}, + 0xFF5B: {0x7B, 0x9000}, + 0xFF5C: {0x7C, 0x9000}, + 0xFF5D: {0x7D, 0x9000}, + 0xFF5E: {0x7E, 0x9000}, + 0xFF5F: {0x2985, 0x9000}, + 0xFF60: {0x2986, 0x9000}, + 0xFF61: {0x3002, 0xB000}, + 0xFF62: {0x300C, 0xB000}, + 0xFF63: {0x300D, 0xB000}, + 0xFF64: {0x3001, 0xB000}, + 0xFF65: {0x30FB, 0xB000}, + 0xFF66: {0x30F2, 0xB000}, + 0xFF67: {0x30A1, 0xB000}, + 0xFF68: {0x30A3, 0xB000}, + 0xFF69: {0x30A5, 0xB000}, + 0xFF6A: {0x30A7, 0xB000}, + 0xFF6B: {0x30A9, 0xB000}, + 0xFF6C: {0x30E3, 0xB000}, + 0xFF6D: {0x30E5, 0xB000}, + 0xFF6E: {0x30E7, 0xB000}, + 0xFF6F: {0x30C3, 0xB000}, + 0xFF70: {0x30FC, 0xB000}, + 0xFF71: {0x30A2, 0xB000}, + 0xFF72: {0x30A4, 0xB000}, + 0xFF73: {0x30A6, 0xB000}, + 0xFF74: {0x30A8, 0xB000}, + 0xFF75: {0x30AA, 0xB000}, + 0xFF76: {0x30AB, 0xB000}, + 0xFF77: {0x30AD, 0xB000}, + 0xFF78: {0x30AF, 0xB000}, + 0xFF79: {0x30B1, 0xB000}, + 0xFF7A: {0x30B3, 0xB000}, + 0xFF7B: {0x30B5, 0xB000}, + 0xFF7C: {0x30B7, 0xB000}, + 0xFF7D: {0x30B9, 0xB000}, + 0xFF7E: {0x30BB, 0xB000}, + 0xFF7F: {0x30BD, 0xB000}, + 0xFF80: {0x30BF, 0xB000}, + 0xFF81: {0x30C1, 0xB000}, + 0xFF82: {0x30C4, 0xB000}, + 0xFF83: {0x30C6, 0xB000}, + 0xFF84: {0x30C8, 0xB000}, + 0xFF85: {0x30CA, 0xB000}, + 0xFF86: {0x30CB, 0xB000}, + 0xFF87: {0x30CC, 0xB000}, + 0xFF88: {0x30CD, 0xB000}, + 0xFF89: {0x30CE, 0xB000}, + 0xFF8A: {0x30CF, 0xB000}, + 0xFF8B: {0x30D2, 0xB000}, + 0xFF8C: {0x30D5, 0xB000}, + 0xFF8D: {0x30D8, 0xB000}, + 0xFF8E: {0x30DB, 0xB000}, + 0xFF8F: {0x30DE, 0xB000}, + 0xFF90: {0x30DF, 0xB000}, + 0xFF91: {0x30E0, 0xB000}, + 0xFF92: {0x30E1, 0xB000}, + 0xFF93: {0x30E2, 0xB000}, + 0xFF94: {0x30E4, 0xB000}, + 0xFF95: {0x30E6, 0xB000}, + 0xFF96: {0x30E8, 0xB000}, + 0xFF97: {0x30E9, 0xB000}, + 0xFF98: {0x30EA, 0xB000}, + 0xFF99: {0x30EB, 0xB000}, + 0xFF9A: {0x30EC, 0xB000}, + 0xFF9B: {0x30ED, 0xB000}, + 0xFF9C: {0x30EF, 0xB000}, + 0xFF9D: {0x30F3, 0xB000}, + 0xFF9E: {0x3099, 0xB000}, + 0xFF9F: {0x309A, 0xB000}, + 0xFFA0: {0x3164, 0xB000}, + 0xFFA1: {0x3131, 0xB000}, + 0xFFA2: {0x3132, 0xB000}, + 0xFFA3: {0x3133, 0xB000}, + 0xFFA4: {0x3134, 0xB000}, + 0xFFA5: {0x3135, 0xB000}, + 0xFFA6: {0x3136, 0xB000}, + 0xFFA7: {0x3137, 0xB000}, + 0xFFA8: {0x3138, 0xB000}, + 0xFFA9: {0x3139, 0xB000}, + 0xFFAA: {0x313A, 0xB000}, + 0xFFAB: {0x313B, 0xB000}, + 0xFFAC: {0x313C, 0xB000}, + 0xFFAD: {0x313D, 0xB000}, + 0xFFAE: {0x313E, 0xB000}, + 0xFFAF: {0x313F, 0xB000}, + 0xFFB0: {0x3140, 0xB000}, + 0xFFB1: {0x3141, 0xB000}, + 0xFFB2: {0x3142, 0xB000}, + 0xFFB3: {0x3143, 0xB000}, + 0xFFB4: {0x3144, 0xB000}, + 0xFFB5: {0x3145, 0xB000}, + 0xFFB6: {0x3146, 0xB000}, + 0xFFB7: {0x3147, 0xB000}, + 0xFFB8: {0x3148, 0xB000}, + 0xFFB9: {0x3149, 0xB000}, + 0xFFBA: {0x314A, 0xB000}, + 0xFFBB: {0x314B, 0xB000}, + 0xFFBC: {0x314C, 0xB000}, + 0xFFBD: {0x314D, 0xB000}, + 0xFFBE: {0x314E, 0xB000}, + 0xFFC2: {0x314F, 0xB000}, + 0xFFC3: {0x3150, 0xB000}, + 0xFFC4: {0x3151, 0xB000}, + 0xFFC5: {0x3152, 0xB000}, + 0xFFC6: {0x3153, 0xB000}, + 0xFFC7: {0x3154, 0xB000}, + 0xFFCA: {0x3155, 0xB000}, + 0xFFCB: {0x3156, 0xB000}, + 0xFFCC: {0x3157, 0xB000}, + 0xFFCD: {0x3158, 0xB000}, + 0xFFCE: {0x3159, 0xB000}, + 0xFFCF: {0x315A, 0xB000}, + 0xFFD2: {0x315B, 0xB000}, + 0xFFD3: {0x315C, 0xB000}, + 0xFFD4: {0x315D, 0xB000}, + 0xFFD5: {0x315E, 0xB000}, + 0xFFD6: {0x315F, 0xB000}, + 0xFFD7: {0x3160, 0xB000}, + 0xFFDA: {0x3161, 0xB000}, + 0xFFDB: {0x3162, 0xB000}, + 0xFFDC: {0x3163, 0xB000}, + 0xFFE0: {0xA2, 0x9000}, + 0xFFE1: {0xA3, 0x9000}, + 0xFFE2: {0xAC, 0x9000}, + 0xFFE3: {0xAF, 0x9000}, + 0xFFE4: {0xA6, 0x9000}, + 0xFFE5: {0xA5, 0x9000}, + 0xFFE6: {0x20A9, 0x9000}, + 0xFFE8: {0x2502, 0xB000}, + 0xFFE9: {0x2190, 0xB000}, + 0xFFEA: {0x2191, 0xB000}, + 0xFFEB: {0x2192, 0xB000}, + 0xFFEC: {0x2193, 0xB000}, + 0xFFED: {0x25A0, 0xB000}, + 0xFFEE: {0x25CB, 0xB000}, +} diff --git a/vendor/golang.org/x/text/width/tables.go b/vendor/golang.org/x/text/width/tables.go new file mode 100644 index 0000000..e21f0b8 --- /dev/null +++ b/vendor/golang.org/x/text/width/tables.go @@ -0,0 +1,1284 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14080 bytes (13.75 KiB). Checksum: 3b8aeb3dc03667a3. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 99 blocks, 6336 entries, 12672 bytes +// The third block is the zero block. +var widthValues = [6336]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, + 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, + 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, + 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, + 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, + 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, + 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, + 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, + 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, + 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, + // Block 0x3e, offset 0xf80 + 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, + 0xf86: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, + 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, + 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, + 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, + 0xffc: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, + 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, + 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, + 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, + 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, + 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, + 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, + 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, + 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, + // Block 0x42, offset 0x1080 + 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, + 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, + 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, + 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, + 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, + 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, + 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, + 0x10aa: 0x4000, 0x10ab: 0x4000, + // Block 0x43, offset 0x10c0 + 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, + 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, + 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, + 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, + 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, + 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, + 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, + 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, + 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, + 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, + 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, + // Block 0x44, offset 0x1100 + 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, + 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, + 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, + 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, + 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, + 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, + 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, + 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, + 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, + 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, + 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, + // Block 0x45, offset 0x1140 + 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, + 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, + 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, + 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, + 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, + 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, + 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, + 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, + 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, + 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, + 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, + // Block 0x46, offset 0x1180 + 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, + 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, + 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, + 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, + 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, + 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, + 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, + 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, + 0x11bd: 0x2000, + // Block 0x47, offset 0x11c0 + 0x11e0: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, + 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, + 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, + 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, + 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, + 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, + 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, + 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, + 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, + 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, + 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, + 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, + // Block 0x4a, offset 0x1280 + 0x1280: 0x4000, 0x1281: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12c4: 0x4000, + // Block 0x4c, offset 0x1300 + 0x130f: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1340: 0x2000, 0x1341: 0x2000, 0x1342: 0x2000, 0x1343: 0x2000, 0x1344: 0x2000, 0x1345: 0x2000, + 0x1346: 0x2000, 0x1347: 0x2000, 0x1348: 0x2000, 0x1349: 0x2000, 0x134a: 0x2000, + 0x1350: 0x2000, 0x1351: 0x2000, + 0x1352: 0x2000, 0x1353: 0x2000, 0x1354: 0x2000, 0x1355: 0x2000, 0x1356: 0x2000, 0x1357: 0x2000, + 0x1358: 0x2000, 0x1359: 0x2000, 0x135a: 0x2000, 0x135b: 0x2000, 0x135c: 0x2000, 0x135d: 0x2000, + 0x135e: 0x2000, 0x135f: 0x2000, 0x1360: 0x2000, 0x1361: 0x2000, 0x1362: 0x2000, 0x1363: 0x2000, + 0x1364: 0x2000, 0x1365: 0x2000, 0x1366: 0x2000, 0x1367: 0x2000, 0x1368: 0x2000, 0x1369: 0x2000, + 0x136a: 0x2000, 0x136b: 0x2000, 0x136c: 0x2000, 0x136d: 0x2000, + 0x1370: 0x2000, 0x1371: 0x2000, 0x1372: 0x2000, 0x1373: 0x2000, 0x1374: 0x2000, 0x1375: 0x2000, + 0x1376: 0x2000, 0x1377: 0x2000, 0x1378: 0x2000, 0x1379: 0x2000, 0x137a: 0x2000, 0x137b: 0x2000, + 0x137c: 0x2000, 0x137d: 0x2000, 0x137e: 0x2000, 0x137f: 0x2000, + // Block 0x4e, offset 0x1380 + 0x1380: 0x2000, 0x1381: 0x2000, 0x1382: 0x2000, 0x1383: 0x2000, 0x1384: 0x2000, 0x1385: 0x2000, + 0x1386: 0x2000, 0x1387: 0x2000, 0x1388: 0x2000, 0x1389: 0x2000, 0x138a: 0x2000, 0x138b: 0x2000, + 0x138c: 0x2000, 0x138d: 0x2000, 0x138e: 0x2000, 0x138f: 0x2000, 0x1390: 0x2000, 0x1391: 0x2000, + 0x1392: 0x2000, 0x1393: 0x2000, 0x1394: 0x2000, 0x1395: 0x2000, 0x1396: 0x2000, 0x1397: 0x2000, + 0x1398: 0x2000, 0x1399: 0x2000, 0x139a: 0x2000, 0x139b: 0x2000, 0x139c: 0x2000, 0x139d: 0x2000, + 0x139e: 0x2000, 0x139f: 0x2000, 0x13a0: 0x2000, 0x13a1: 0x2000, 0x13a2: 0x2000, 0x13a3: 0x2000, + 0x13a4: 0x2000, 0x13a5: 0x2000, 0x13a6: 0x2000, 0x13a7: 0x2000, 0x13a8: 0x2000, 0x13a9: 0x2000, + 0x13b0: 0x2000, 0x13b1: 0x2000, 0x13b2: 0x2000, 0x13b3: 0x2000, 0x13b4: 0x2000, 0x13b5: 0x2000, + 0x13b6: 0x2000, 0x13b7: 0x2000, 0x13b8: 0x2000, 0x13b9: 0x2000, 0x13ba: 0x2000, 0x13bb: 0x2000, + 0x13bc: 0x2000, 0x13bd: 0x2000, 0x13be: 0x2000, 0x13bf: 0x2000, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, + 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, 0x13cb: 0x2000, + 0x13cc: 0x2000, 0x13cd: 0x2000, 0x13ce: 0x4000, 0x13cf: 0x2000, 0x13d0: 0x2000, 0x13d1: 0x4000, + 0x13d2: 0x4000, 0x13d3: 0x4000, 0x13d4: 0x4000, 0x13d5: 0x4000, 0x13d6: 0x4000, 0x13d7: 0x4000, + 0x13d8: 0x4000, 0x13d9: 0x4000, 0x13da: 0x4000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, + 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, + 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, + 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, + // Block 0x50, offset 0x1400 + 0x1400: 0x4000, 0x1401: 0x4000, 0x1402: 0x4000, + 0x1410: 0x4000, 0x1411: 0x4000, + 0x1412: 0x4000, 0x1413: 0x4000, 0x1414: 0x4000, 0x1415: 0x4000, 0x1416: 0x4000, 0x1417: 0x4000, + 0x1418: 0x4000, 0x1419: 0x4000, 0x141a: 0x4000, 0x141b: 0x4000, 0x141c: 0x4000, 0x141d: 0x4000, + 0x141e: 0x4000, 0x141f: 0x4000, 0x1420: 0x4000, 0x1421: 0x4000, 0x1422: 0x4000, 0x1423: 0x4000, + 0x1424: 0x4000, 0x1425: 0x4000, 0x1426: 0x4000, 0x1427: 0x4000, 0x1428: 0x4000, 0x1429: 0x4000, + 0x142a: 0x4000, 0x142b: 0x4000, 0x142c: 0x4000, 0x142d: 0x4000, 0x142e: 0x4000, 0x142f: 0x4000, + 0x1430: 0x4000, 0x1431: 0x4000, 0x1432: 0x4000, 0x1433: 0x4000, 0x1434: 0x4000, 0x1435: 0x4000, + 0x1436: 0x4000, 0x1437: 0x4000, 0x1438: 0x4000, 0x1439: 0x4000, 0x143a: 0x4000, 0x143b: 0x4000, + // Block 0x51, offset 0x1440 + 0x1440: 0x4000, 0x1441: 0x4000, 0x1442: 0x4000, 0x1443: 0x4000, 0x1444: 0x4000, 0x1445: 0x4000, + 0x1446: 0x4000, 0x1447: 0x4000, 0x1448: 0x4000, + 0x1450: 0x4000, 0x1451: 0x4000, + // Block 0x52, offset 0x1480 + 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, 0x1483: 0x4000, 0x1484: 0x4000, 0x1485: 0x4000, + 0x1486: 0x4000, 0x1487: 0x4000, 0x1488: 0x4000, 0x1489: 0x4000, 0x148a: 0x4000, 0x148b: 0x4000, + 0x148c: 0x4000, 0x148d: 0x4000, 0x148e: 0x4000, 0x148f: 0x4000, 0x1490: 0x4000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, + 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, + 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, + 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, + 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + 0x14bc: 0x4000, 0x14bd: 0x4000, 0x14be: 0x4000, 0x14bf: 0x4000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, + 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, 0x14c9: 0x4000, 0x14ca: 0x4000, 0x14cb: 0x4000, + 0x14cc: 0x4000, 0x14cd: 0x4000, 0x14ce: 0x4000, 0x14cf: 0x4000, 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14d2: 0x4000, 0x14d3: 0x4000, 0x14d4: 0x4000, 0x14d5: 0x4000, 0x14d6: 0x4000, 0x14d7: 0x4000, + 0x14d8: 0x4000, 0x14d9: 0x4000, 0x14da: 0x4000, 0x14db: 0x4000, 0x14dc: 0x4000, 0x14dd: 0x4000, + 0x14de: 0x4000, 0x14df: 0x4000, 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, 0x14e6: 0x4000, 0x14e7: 0x4000, 0x14e8: 0x4000, 0x14e9: 0x4000, + 0x14ea: 0x4000, 0x14eb: 0x4000, 0x14ec: 0x4000, 0x14ed: 0x4000, 0x14ee: 0x4000, 0x14ef: 0x4000, + 0x14f0: 0x4000, 0x14f1: 0x4000, 0x14f2: 0x4000, 0x14f3: 0x4000, 0x14f4: 0x4000, 0x14f5: 0x4000, + 0x14f6: 0x4000, 0x14f7: 0x4000, 0x14f8: 0x4000, 0x14f9: 0x4000, 0x14fa: 0x4000, 0x14fb: 0x4000, + 0x14fc: 0x4000, 0x14fe: 0x4000, 0x14ff: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, + 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1512: 0x4000, 0x1513: 0x4000, + 0x1520: 0x4000, 0x1521: 0x4000, 0x1522: 0x4000, 0x1523: 0x4000, + 0x1524: 0x4000, 0x1525: 0x4000, 0x1526: 0x4000, 0x1527: 0x4000, 0x1528: 0x4000, 0x1529: 0x4000, + 0x152a: 0x4000, 0x152b: 0x4000, 0x152c: 0x4000, 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, + 0x1536: 0x4000, 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, + 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, + 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, + 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, + 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1574: 0x4000, + 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157d: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, 0x1594: 0x4000, 0x1595: 0x4000, 0x1596: 0x4000, 0x1597: 0x4000, + 0x1598: 0x4000, 0x1599: 0x4000, 0x159a: 0x4000, 0x159b: 0x4000, 0x159c: 0x4000, 0x159d: 0x4000, + 0x159e: 0x4000, 0x159f: 0x4000, 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, 0x15cb: 0x4000, + 0x15cc: 0x4000, 0x15cd: 0x4000, 0x15ce: 0x4000, 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, 0x15d4: 0x4000, 0x15d5: 0x4000, 0x15d6: 0x4000, 0x15d7: 0x4000, + 0x15d8: 0x4000, 0x15d9: 0x4000, 0x15da: 0x4000, 0x15db: 0x4000, 0x15dc: 0x4000, 0x15dd: 0x4000, + 0x15de: 0x4000, 0x15df: 0x4000, 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f1: 0x4000, 0x15f2: 0x4000, 0x15f3: 0x4000, 0x15f4: 0x4000, 0x15f5: 0x4000, + 0x15f6: 0x4000, 0x15f7: 0x4000, 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1601: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, + 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, + 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, + 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, + 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, + // Block 0x59, offset 0x1640 + 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, + 0x167a: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1695: 0x4000, 0x1696: 0x4000, + 0x16a4: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16fb: 0x4000, + 0x16fc: 0x4000, 0x16fd: 0x4000, 0x16fe: 0x4000, 0x16ff: 0x4000, + // Block 0x5c, offset 0x1700 + 0x1700: 0x4000, 0x1701: 0x4000, 0x1702: 0x4000, 0x1703: 0x4000, 0x1704: 0x4000, 0x1705: 0x4000, + 0x1706: 0x4000, 0x1707: 0x4000, 0x1708: 0x4000, 0x1709: 0x4000, 0x170a: 0x4000, 0x170b: 0x4000, + 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x170f: 0x4000, + // Block 0x5d, offset 0x1740 + 0x1740: 0x4000, 0x1741: 0x4000, 0x1742: 0x4000, 0x1743: 0x4000, 0x1744: 0x4000, 0x1745: 0x4000, + 0x174c: 0x4000, 0x1750: 0x4000, 0x1751: 0x4000, + 0x1752: 0x4000, + 0x176b: 0x4000, 0x176c: 0x4000, + 0x1774: 0x4000, 0x1775: 0x4000, + 0x1776: 0x4000, + // Block 0x5e, offset 0x1780 + 0x1790: 0x4000, 0x1791: 0x4000, + 0x1792: 0x4000, 0x1793: 0x4000, 0x1794: 0x4000, 0x1795: 0x4000, 0x1796: 0x4000, 0x1797: 0x4000, + 0x1798: 0x4000, 0x1799: 0x4000, 0x179a: 0x4000, 0x179b: 0x4000, 0x179c: 0x4000, 0x179d: 0x4000, + 0x179e: 0x4000, 0x17a0: 0x4000, 0x17a1: 0x4000, 0x17a2: 0x4000, 0x17a3: 0x4000, + 0x17a4: 0x4000, 0x17a5: 0x4000, 0x17a6: 0x4000, 0x17a7: 0x4000, + 0x17b0: 0x4000, 0x17b3: 0x4000, 0x17b4: 0x4000, 0x17b5: 0x4000, + 0x17b6: 0x4000, 0x17b7: 0x4000, 0x17b8: 0x4000, 0x17b9: 0x4000, 0x17ba: 0x4000, 0x17bb: 0x4000, + 0x17bc: 0x4000, 0x17bd: 0x4000, 0x17be: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, + 0x17c6: 0x4000, 0x17c7: 0x4000, 0x17c8: 0x4000, 0x17c9: 0x4000, 0x17ca: 0x4000, 0x17cb: 0x4000, + 0x17d0: 0x4000, 0x17d1: 0x4000, + 0x17d2: 0x4000, 0x17d3: 0x4000, 0x17d4: 0x4000, 0x17d5: 0x4000, 0x17d6: 0x4000, 0x17d7: 0x4000, + 0x17d8: 0x4000, 0x17d9: 0x4000, 0x17da: 0x4000, 0x17db: 0x4000, 0x17dc: 0x4000, 0x17dd: 0x4000, + 0x17de: 0x4000, + // Block 0x60, offset 0x1800 + 0x1800: 0x4000, 0x1801: 0x4000, 0x1802: 0x4000, 0x1803: 0x4000, 0x1804: 0x4000, 0x1805: 0x4000, + 0x1806: 0x4000, 0x1807: 0x4000, 0x1808: 0x4000, 0x1809: 0x4000, 0x180a: 0x4000, 0x180b: 0x4000, + 0x180c: 0x4000, 0x180d: 0x4000, 0x180e: 0x4000, 0x180f: 0x4000, 0x1810: 0x4000, 0x1811: 0x4000, + // Block 0x61, offset 0x1840 + 0x1840: 0x4000, + // Block 0x62, offset 0x1880 + 0x1880: 0x2000, 0x1881: 0x2000, 0x1882: 0x2000, 0x1883: 0x2000, 0x1884: 0x2000, 0x1885: 0x2000, + 0x1886: 0x2000, 0x1887: 0x2000, 0x1888: 0x2000, 0x1889: 0x2000, 0x188a: 0x2000, 0x188b: 0x2000, + 0x188c: 0x2000, 0x188d: 0x2000, 0x188e: 0x2000, 0x188f: 0x2000, 0x1890: 0x2000, 0x1891: 0x2000, + 0x1892: 0x2000, 0x1893: 0x2000, 0x1894: 0x2000, 0x1895: 0x2000, 0x1896: 0x2000, 0x1897: 0x2000, + 0x1898: 0x2000, 0x1899: 0x2000, 0x189a: 0x2000, 0x189b: 0x2000, 0x189c: 0x2000, 0x189d: 0x2000, + 0x189e: 0x2000, 0x189f: 0x2000, 0x18a0: 0x2000, 0x18a1: 0x2000, 0x18a2: 0x2000, 0x18a3: 0x2000, + 0x18a4: 0x2000, 0x18a5: 0x2000, 0x18a6: 0x2000, 0x18a7: 0x2000, 0x18a8: 0x2000, 0x18a9: 0x2000, + 0x18aa: 0x2000, 0x18ab: 0x2000, 0x18ac: 0x2000, 0x18ad: 0x2000, 0x18ae: 0x2000, 0x18af: 0x2000, + 0x18b0: 0x2000, 0x18b1: 0x2000, 0x18b2: 0x2000, 0x18b3: 0x2000, 0x18b4: 0x2000, 0x18b5: 0x2000, + 0x18b6: 0x2000, 0x18b7: 0x2000, 0x18b8: 0x2000, 0x18b9: 0x2000, 0x18ba: 0x2000, 0x18bb: 0x2000, + 0x18bc: 0x2000, 0x18bd: 0x2000, +} + +// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var widthIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, + 0x265: 0x3d, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, + // Block 0xd, offset 0x340 + 0x37f: 0x45, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x48, + // Block 0x10, offset 0x400 + 0x400: 0x49, 0x403: 0x4a, 0x404: 0x4b, 0x405: 0x4c, 0x406: 0x4d, + 0x408: 0x4e, 0x409: 0x4f, 0x40c: 0x50, 0x40d: 0x51, 0x40e: 0x52, 0x40f: 0x53, + 0x410: 0x3a, 0x411: 0x54, 0x412: 0x0e, 0x413: 0x55, 0x414: 0x56, 0x415: 0x57, 0x416: 0x58, 0x417: 0x59, + 0x418: 0x0e, 0x419: 0x5a, 0x41a: 0x0e, 0x41b: 0x5b, + 0x424: 0x5c, 0x425: 0x5d, 0x426: 0x5e, 0x427: 0x5f, + // Block 0x11, offset 0x440 + 0x456: 0x0b, 0x457: 0x06, + 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, + 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, + 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, + 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, + 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + // Block 0x12, offset 0x480 + 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, + 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, + 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, + 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, + 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, + 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, + 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, + 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x60, + // Block 0x14, offset 0x500 + 0x520: 0x10, + 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, + 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + // Block 0x15, offset 0x540 + 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, + 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, +} + +// inverseData contains 4-byte entries of the following format: +// <length> <modified UTF-8-encoded rune> <0 padding> +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// { 0x01, 0xE0, 0x00, 0x00 } +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// E0 ^ A1 = 41. +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// E0 ^ A2 = 42. +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 14680 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables_test.go b/vendor/golang.org/x/text/width/tables_test.go new file mode 100644 index 0000000..189febd --- /dev/null +++ b/vendor/golang.org/x/text/width/tables_test.go @@ -0,0 +1,59 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package width + +import ( + "testing" + + "golang.org/x/text/internal/testtext" +) + +const ( + loSurrogate = 0xD800 + hiSurrogate = 0xDFFF +) + +func TestTables(t *testing.T) { + testtext.SkipIfNotLong(t) + + runes := map[rune]Kind{} + getWidthData(func(r rune, tag elem, _ rune) { + runes[r] = tag.kind() + }) + for r := rune(0); r < 0x10FFFF; r++ { + if loSurrogate <= r && r <= hiSurrogate { + continue + } + p := LookupRune(r) + if got, want := p.Kind(), runes[r]; got != want { + t.Errorf("Kind of %U was %s; want %s.", r, got, want) + } + want, mapped := foldRune(r) + if got := p.Folded(); (got == 0) == mapped || got != 0 && got != want { + t.Errorf("Folded(%U) = %U; want %U", r, got, want) + } + want, mapped = widenRune(r) + if got := p.Wide(); (got == 0) == mapped || got != 0 && got != want { + t.Errorf("Wide(%U) = %U; want %U", r, got, want) + } + want, mapped = narrowRune(r) + if got := p.Narrow(); (got == 0) == mapped || got != 0 && got != want { + t.Errorf("Narrow(%U) = %U; want %U", r, got, want) + } + } +} + +// TestAmbiguous verifies that that ambiguous runes with a mapping always map to +// a halfwidth rune. +func TestAmbiguous(t *testing.T) { + for r, m := range mapRunes { + if m.e != tagAmbiguous { + continue + } + if k := mapRunes[m.r].e.kind(); k != EastAsianHalfwidth { + t.Errorf("Rune %U is ambiguous and maps to a rune of type %v", r, k) + } + } +} diff --git a/vendor/golang.org/x/text/width/transform.go b/vendor/golang.org/x/text/width/transform.go new file mode 100644 index 0000000..0049f70 --- /dev/null +++ b/vendor/golang.org/x/text/width/transform.go @@ -0,0 +1,239 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package width + +import ( + "unicode/utf8" + + "golang.org/x/text/transform" +) + +type foldTransform struct { + transform.NopResetter +} + +func (foldTransform) Span(src []byte, atEOF bool) (n int, err error) { + for n < len(src) { + if src[n] < utf8.RuneSelf { + // ASCII fast path. + for n++; n < len(src) && src[n] < utf8.RuneSelf; n++ { + } + continue + } + v, size := trie.lookup(src[n:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + err = transform.ErrShortSrc + } else { + n = len(src) + } + break + } + if elem(v)&tagNeedsFold != 0 { + err = transform.ErrEndOfSpan + break + } + n += size + } + return n, err +} + +func (foldTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for nSrc < len(src) { + if src[nSrc] < utf8.RuneSelf { + // ASCII fast path. + start, end := nSrc, len(src) + if d := len(dst) - nDst; d < end-start { + end = nSrc + d + } + for nSrc++; nSrc < end && src[nSrc] < utf8.RuneSelf; nSrc++ { + } + n := copy(dst[nDst:], src[start:nSrc]) + if nDst += n; nDst == len(dst) { + nSrc = start + n + if nSrc == len(src) { + return nDst, nSrc, nil + } + if src[nSrc] < utf8.RuneSelf { + return nDst, nSrc, transform.ErrShortDst + } + } + continue + } + v, size := trie.lookup(src[nSrc:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + size = 1 // gobble 1 byte + } + if elem(v)&tagNeedsFold == 0 { + if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += size + } else { + data := inverseData[byte(v)] + if len(dst)-nDst < int(data[0]) { + return nDst, nSrc, transform.ErrShortDst + } + i := 1 + for end := int(data[0]); i < end; i++ { + dst[nDst] = data[i] + nDst++ + } + dst[nDst] = data[i] ^ src[nSrc+size-1] + nDst++ + } + nSrc += size + } + return nDst, nSrc, nil +} + +type narrowTransform struct { + transform.NopResetter +} + +func (narrowTransform) Span(src []byte, atEOF bool) (n int, err error) { + for n < len(src) { + if src[n] < utf8.RuneSelf { + // ASCII fast path. + for n++; n < len(src) && src[n] < utf8.RuneSelf; n++ { + } + continue + } + v, size := trie.lookup(src[n:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + err = transform.ErrShortSrc + } else { + n = len(src) + } + break + } + if k := elem(v).kind(); byte(v) == 0 || k != EastAsianFullwidth && k != EastAsianWide && k != EastAsianAmbiguous { + } else { + err = transform.ErrEndOfSpan + break + } + n += size + } + return n, err +} + +func (narrowTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for nSrc < len(src) { + if src[nSrc] < utf8.RuneSelf { + // ASCII fast path. + start, end := nSrc, len(src) + if d := len(dst) - nDst; d < end-start { + end = nSrc + d + } + for nSrc++; nSrc < end && src[nSrc] < utf8.RuneSelf; nSrc++ { + } + n := copy(dst[nDst:], src[start:nSrc]) + if nDst += n; nDst == len(dst) { + nSrc = start + n + if nSrc == len(src) { + return nDst, nSrc, nil + } + if src[nSrc] < utf8.RuneSelf { + return nDst, nSrc, transform.ErrShortDst + } + } + continue + } + v, size := trie.lookup(src[nSrc:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + size = 1 // gobble 1 byte + } + if k := elem(v).kind(); byte(v) == 0 || k != EastAsianFullwidth && k != EastAsianWide && k != EastAsianAmbiguous { + if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += size + } else { + data := inverseData[byte(v)] + if len(dst)-nDst < int(data[0]) { + return nDst, nSrc, transform.ErrShortDst + } + i := 1 + for end := int(data[0]); i < end; i++ { + dst[nDst] = data[i] + nDst++ + } + dst[nDst] = data[i] ^ src[nSrc+size-1] + nDst++ + } + nSrc += size + } + return nDst, nSrc, nil +} + +type wideTransform struct { + transform.NopResetter +} + +func (wideTransform) Span(src []byte, atEOF bool) (n int, err error) { + for n < len(src) { + // TODO: Consider ASCII fast path. Special-casing ASCII handling can + // reduce the ns/op of BenchmarkWideASCII by about 30%. This is probably + // not enough to warrant the extra code and complexity. + v, size := trie.lookup(src[n:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + err = transform.ErrShortSrc + } else { + n = len(src) + } + break + } + if k := elem(v).kind(); byte(v) == 0 || k != EastAsianHalfwidth && k != EastAsianNarrow { + } else { + err = transform.ErrEndOfSpan + break + } + n += size + } + return n, err +} + +func (wideTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for nSrc < len(src) { + // TODO: Consider ASCII fast path. Special-casing ASCII handling can + // reduce the ns/op of BenchmarkWideASCII by about 30%. This is probably + // not enough to warrant the extra code and complexity. + v, size := trie.lookup(src[nSrc:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + size = 1 // gobble 1 byte + } + if k := elem(v).kind(); byte(v) == 0 || k != EastAsianHalfwidth && k != EastAsianNarrow { + if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += size + } else { + data := inverseData[byte(v)] + if len(dst)-nDst < int(data[0]) { + return nDst, nSrc, transform.ErrShortDst + } + i := 1 + for end := int(data[0]); i < end; i++ { + dst[nDst] = data[i] + nDst++ + } + dst[nDst] = data[i] ^ src[nSrc+size-1] + nDst++ + } + nSrc += size + } + return nDst, nSrc, nil +} diff --git a/vendor/golang.org/x/text/width/transform_test.go b/vendor/golang.org/x/text/width/transform_test.go new file mode 100644 index 0000000..f9122d6 --- /dev/null +++ b/vendor/golang.org/x/text/width/transform_test.go @@ -0,0 +1,701 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package width + +import ( + "bytes" + "strings" + "testing" + + "golang.org/x/text/internal/testtext" + "golang.org/x/text/transform" +) + +func foldRune(r rune) (folded rune, ok bool) { + alt, ok := mapRunes[r] + if ok && alt.e&tagNeedsFold != 0 { + return alt.r, true + } + return r, false +} + +func widenRune(r rune) (wide rune, ok bool) { + alt, ok := mapRunes[r] + if k := alt.e.kind(); k == EastAsianHalfwidth || k == EastAsianNarrow { + return alt.r, true + } + return r, false +} + +func narrowRune(r rune) (narrow rune, ok bool) { + alt, ok := mapRunes[r] + if k := alt.e.kind(); k == EastAsianFullwidth || k == EastAsianWide || k == EastAsianAmbiguous { + return alt.r, true + } + return r, false +} + +func TestFoldSingleRunes(t *testing.T) { + for r := rune(0); r < 0x1FFFF; r++ { + if loSurrogate <= r && r <= hiSurrogate { + continue + } + x, _ := foldRune(r) + want := string(x) + got := Fold.String(string(r)) + if got != want { + t.Errorf("Fold().String(%U) = %+q; want %+q", r, got, want) + } + } +} + +type transformTest struct { + desc string + src string + nBuf int + nDst int + atEOF bool + dst string + nSrc int + err error + nSpan int + errSpan error +} + +func (tc *transformTest) doTest(t *testing.T, tr Transformer) { + testtext.Run(t, tc.desc, func(t *testing.T) { + b := make([]byte, tc.nBuf) + nDst, nSrc, err := tr.Transform(b, []byte(tc.src), tc.atEOF) + if got := string(b[:nDst]); got != tc.dst[:nDst] { + t.Errorf("dst was %+q; want %+q", got, tc.dst) + } + if nDst != tc.nDst { + t.Errorf("nDst was %d; want %d", nDst, tc.nDst) + } + if nSrc != tc.nSrc { + t.Errorf("nSrc was %d; want %d", nSrc, tc.nSrc) + } + if err != tc.err { + t.Errorf("error was %v; want %v", err, tc.err) + } + if got := tr.String(tc.src); got != tc.dst { + t.Errorf("String(%q) = %q; want %q", tc.src, got, tc.dst) + } + n, err := tr.Span([]byte(tc.src), tc.atEOF) + if n != tc.nSpan || err != tc.errSpan { + t.Errorf("Span: got %d, %v; want %d, %v", n, err, tc.nSpan, tc.errSpan) + } + }) +} + +func TestFold(t *testing.T) { + for _, tc := range []transformTest{{ + desc: "empty", + src: "", + nBuf: 10, + dst: "", + nDst: 0, + nSrc: 0, + atEOF: false, + err: nil, + nSpan: 0, + errSpan: nil, + }, { + desc: "short source 1", + src: "a\xc2", + nBuf: 10, + dst: "a\xc2", + nDst: 1, + nSrc: 1, + atEOF: false, + err: transform.ErrShortSrc, + nSpan: 1, + errSpan: transform.ErrShortSrc, + }, { + desc: "short source 2", + src: "a\xe0\x80", + nBuf: 10, + dst: "a\xe0\x80", + nDst: 1, + nSrc: 1, + atEOF: false, + err: transform.ErrShortSrc, + nSpan: 1, + errSpan: transform.ErrShortSrc, + }, { + desc: "incomplete but terminated source 1", + src: "a\xc2", + nBuf: 10, + dst: "a\xc2", + nDst: 2, + nSrc: 2, + atEOF: true, + err: nil, + nSpan: 2, + errSpan: nil, + }, { + desc: "incomplete but terminated source 2", + src: "a\xe0\x80", + nBuf: 10, + dst: "a\xe0\x80", + nDst: 3, + nSrc: 3, + atEOF: true, + err: nil, + nSpan: 3, + errSpan: nil, + }, { + desc: "exact fit dst", + src: "a\uff01", + nBuf: 2, + dst: "a!", + nDst: 2, + nSrc: 4, + atEOF: false, + err: nil, + nSpan: 1, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "exact fit dst and src ascii", + src: "ab", + nBuf: 2, + dst: "ab", + nDst: 2, + nSrc: 2, + atEOF: true, + err: nil, + nSpan: 2, + errSpan: nil, + }, { + desc: "empty dst", + src: "\u0300", + nBuf: 0, + dst: "\u0300", + nDst: 0, + nSrc: 0, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 2, + errSpan: nil, + }, { + desc: "empty dst ascii", + src: "a", + nBuf: 0, + dst: "a", + nDst: 0, + nSrc: 0, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 1, + errSpan: nil, + }, { + desc: "short dst 1", + src: "a\uffe0", // ¢ + nBuf: 2, + dst: "a\u00a2", // ¢ + nDst: 1, + nSrc: 1, + atEOF: false, + err: transform.ErrShortDst, + nSpan: 1, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "short dst 2", + src: "不夠", + nBuf: 3, + dst: "不夠", + nDst: 3, + nSrc: 3, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 6, + errSpan: nil, + }, { + desc: "short dst fast path", + src: "fast", + nDst: 3, + dst: "fast", + nBuf: 3, + nSrc: 3, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 4, + errSpan: nil, + }, { + desc: "short dst larger buffer", + src: "\uff21" + strings.Repeat("0", 127) + "B", + nBuf: 128, + dst: "A" + strings.Repeat("0", 127) + "B", + nDst: 128, + nSrc: 130, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "fast path alternation", + src: "fast路徑fast路徑", + nBuf: 20, + dst: "fast路徑fast路徑", + nDst: 20, + nSrc: 20, + atEOF: true, + err: nil, + nSpan: 20, + errSpan: nil, + }} { + tc.doTest(t, Fold) + } +} + +func TestWidenSingleRunes(t *testing.T) { + for r := rune(0); r < 0x1FFFF; r++ { + if loSurrogate <= r && r <= hiSurrogate { + continue + } + alt, _ := widenRune(r) + want := string(alt) + got := Widen.String(string(r)) + if got != want { + t.Errorf("Widen().String(%U) = %+q; want %+q", r, got, want) + } + } +} + +func TestWiden(t *testing.T) { + for _, tc := range []transformTest{{ + desc: "empty", + src: "", + nBuf: 10, + dst: "", + nDst: 0, + nSrc: 0, + atEOF: false, + err: nil, + nSpan: 0, + errSpan: nil, + }, { + desc: "short source 1", + src: "a\xc2", + nBuf: 10, + dst: "a\xc2", + nDst: 3, + nSrc: 1, + atEOF: false, + err: transform.ErrShortSrc, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "short source 2", + src: "a\xe0\x80", + nBuf: 10, + dst: "a\xe0\x80", + nDst: 3, + nSrc: 1, + atEOF: false, + err: transform.ErrShortSrc, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "incomplete but terminated source 1", + src: "a\xc2", + nBuf: 10, + dst: "a\xc2", + nDst: 4, + nSrc: 2, + atEOF: true, + err: nil, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "incomplete but terminated source 2", + src: "a\xe0\x80", + nBuf: 10, + dst: "a\xe0\x80", + nDst: 5, + nSrc: 3, + atEOF: true, + err: nil, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "short source 1 some span", + src: "a\xc2", + nBuf: 10, + dst: "a\xc2", + nDst: 3, + nSrc: 3, + atEOF: false, + err: transform.ErrShortSrc, + nSpan: 3, + errSpan: transform.ErrShortSrc, + }, { + desc: "short source 2 some span", + src: "a\xe0\x80", + nBuf: 10, + dst: "a\xe0\x80", + nDst: 3, + nSrc: 3, + atEOF: false, + err: transform.ErrShortSrc, + nSpan: 3, + errSpan: transform.ErrShortSrc, + }, { + desc: "incomplete but terminated source 1 some span", + src: "a\xc2", + nBuf: 10, + dst: "a\xc2", + nDst: 4, + nSrc: 4, + atEOF: true, + err: nil, + nSpan: 4, + errSpan: nil, + }, { + desc: "incomplete but terminated source 2 some span", + src: "a\xe0\x80", + nBuf: 10, + dst: "a\xe0\x80", + nDst: 5, + nSrc: 5, + atEOF: true, + err: nil, + nSpan: 5, + errSpan: nil, + }, { + desc: "exact fit dst", + src: "a!", + nBuf: 6, + dst: "a\uff01", + nDst: 6, + nSrc: 2, + atEOF: false, + err: nil, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "empty dst", + src: "\u0300", + nBuf: 0, + dst: "\u0300", + nDst: 0, + nSrc: 0, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 2, + errSpan: nil, + }, { + desc: "empty dst ascii", + src: "a", + nBuf: 0, + dst: "a", + nDst: 0, + nSrc: 0, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "short dst 1", + src: "a\uffe0", + nBuf: 4, + dst: "a\uffe0", + nDst: 3, + nSrc: 1, + atEOF: false, + err: transform.ErrShortDst, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "short dst 2", + src: "不夠", + nBuf: 3, + dst: "不夠", + nDst: 3, + nSrc: 3, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 6, + errSpan: nil, + }, { + desc: "short dst ascii", + src: "ascii", + nBuf: 3, + dst: "ascii", // U+ff41, ... + nDst: 3, + nSrc: 1, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "ambiguous", + src: "\uffe9", + nBuf: 4, + dst: "\u2190", + nDst: 3, + nSrc: 3, + atEOF: false, + err: nil, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }} { + tc.doTest(t, Widen) + } +} + +func TestNarrowSingleRunes(t *testing.T) { + for r := rune(0); r < 0x1FFFF; r++ { + if loSurrogate <= r && r <= hiSurrogate { + continue + } + alt, _ := narrowRune(r) + want := string(alt) + got := Narrow.String(string(r)) + if got != want { + t.Errorf("Narrow().String(%U) = %+q; want %+q", r, got, want) + } + } +} + +func TestNarrow(t *testing.T) { + for _, tc := range []transformTest{{ + desc: "empty", + src: "", + nBuf: 10, + dst: "", + nDst: 0, + nSrc: 0, + atEOF: false, + err: nil, + nSpan: 0, + errSpan: nil, + }, { + desc: "short source 1", + src: "a\xc2", + nBuf: 10, + dst: "a\xc2", + nDst: 1, + nSrc: 1, + atEOF: false, + err: transform.ErrShortSrc, + nSpan: 1, + errSpan: transform.ErrShortSrc, + }, { + desc: "short source 2", + src: "a\xe0\x80", + nBuf: 10, + dst: "a\xe0\x80", + nDst: 1, + nSrc: 3, + atEOF: false, + err: transform.ErrShortSrc, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "incomplete but terminated source 1", + src: "a\xc2", + nBuf: 10, + dst: "a\xc2", + nDst: 2, + nSrc: 4, + atEOF: true, + err: nil, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "incomplete but terminated source 2", + src: "a\xe0\x80", + nBuf: 10, + dst: "a\xe0\x80", + nDst: 3, + nSrc: 5, + atEOF: true, + err: nil, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "exact fit dst", + src: "a\uff01", + nBuf: 2, + dst: "a!", + nDst: 2, + nSrc: 6, + atEOF: false, + err: nil, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "exact fit dst some span", + src: "a\uff01", + nBuf: 2, + dst: "a!", + nDst: 2, + nSrc: 4, + atEOF: false, + err: nil, + nSpan: 1, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "empty dst", + src: "\u0300", + nBuf: 0, + dst: "\u0300", + nDst: 0, + nSrc: 0, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 2, + errSpan: nil, + }, { + desc: "empty dst ascii", + src: "a", + nBuf: 0, + dst: "a", + nDst: 0, + nSrc: 0, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 1, + errSpan: nil, + }, { + desc: "short dst 1", + src: "a\uffe0", // ¢ + nBuf: 2, + dst: "a\u00a2", // ¢ + nDst: 1, + nSrc: 3, + atEOF: false, + err: transform.ErrShortDst, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "short dst 2", + src: "不夠", + nBuf: 3, + dst: "不夠", + nDst: 3, + nSrc: 3, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 6, + errSpan: nil, + }, { + // Create a narrow variant of ambiguous runes, if they exist. + desc: "ambiguous", + src: "\u2190", + nBuf: 4, + dst: "\uffe9", + nDst: 3, + nSrc: 3, + atEOF: false, + err: nil, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "short dst fast path", + src: "fast", + nBuf: 3, + dst: "fast", + nDst: 3, + nSrc: 3, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 4, + errSpan: nil, + }, { + desc: "short dst larger buffer", + src: "\uff21" + strings.Repeat("0", 127) + "B", + nBuf: 128, + dst: "A" + strings.Repeat("0", 127) + "B", + nDst: 128, + nSrc: 130, + atEOF: true, + err: transform.ErrShortDst, + nSpan: 0, + errSpan: transform.ErrEndOfSpan, + }, { + desc: "fast path alternation", + src: "fast路徑fast路徑", + nBuf: 20, + dst: "fast路徑fast路徑", + nDst: 20, + nSrc: 20, + atEOF: true, + err: nil, + nSpan: 20, + errSpan: nil, + }} { + tc.doTest(t, Narrow) + } +} + +func bench(b *testing.B, t Transformer, s string) { + dst := make([]byte, 1024) + src := []byte(s) + b.SetBytes(int64(len(src))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + t.Transform(dst, src, true) + } +} + +func changingRunes(f func(r rune) (rune, bool)) string { + buf := &bytes.Buffer{} + for r := rune(0); r <= 0xFFFF; r++ { + if _, ok := foldRune(r); ok { + buf.WriteRune(r) + } + } + return buf.String() +} + +func BenchmarkFoldASCII(b *testing.B) { + bench(b, Fold, testtext.ASCII) +} + +func BenchmarkFoldCJK(b *testing.B) { + bench(b, Fold, testtext.CJK) +} + +func BenchmarkFoldNonCanonical(b *testing.B) { + bench(b, Fold, changingRunes(foldRune)) +} + +func BenchmarkFoldOther(b *testing.B) { + bench(b, Fold, testtext.TwoByteUTF8+testtext.ThreeByteUTF8) +} + +func BenchmarkWideASCII(b *testing.B) { + bench(b, Widen, testtext.ASCII) +} + +func BenchmarkWideCJK(b *testing.B) { + bench(b, Widen, testtext.CJK) +} + +func BenchmarkWideNonCanonical(b *testing.B) { + bench(b, Widen, changingRunes(widenRune)) +} + +func BenchmarkWideOther(b *testing.B) { + bench(b, Widen, testtext.TwoByteUTF8+testtext.ThreeByteUTF8) +} + +func BenchmarkNarrowASCII(b *testing.B) { + bench(b, Narrow, testtext.ASCII) +} + +func BenchmarkNarrowCJK(b *testing.B) { + bench(b, Narrow, testtext.CJK) +} + +func BenchmarkNarrowNonCanonical(b *testing.B) { + bench(b, Narrow, changingRunes(narrowRune)) +} + +func BenchmarkNarrowOther(b *testing.B) { + bench(b, Narrow, testtext.TwoByteUTF8+testtext.ThreeByteUTF8) +} diff --git a/vendor/golang.org/x/text/width/trieval.go b/vendor/golang.org/x/text/width/trieval.go new file mode 100644 index 0000000..ca8e45f --- /dev/null +++ b/vendor/golang.org/x/text/width/trieval.go @@ -0,0 +1,30 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package width + +// elem is an entry of the width trie. The high byte is used to encode the type +// of the rune. The low byte is used to store the index to a mapping entry in +// the inverseData array. +type elem uint16 + +const ( + tagNeutral elem = iota << typeShift + tagAmbiguous + tagWide + tagNarrow + tagFullwidth + tagHalfwidth +) + +const ( + numTypeBits = 3 + typeShift = 16 - numTypeBits + + // tagNeedsFold is true for all fullwidth and halfwidth runes except for + // the Won sign U+20A9. + tagNeedsFold = 0x1000 + + // The Korean Won sign is halfwidth, but SHOULD NOT be mapped to a wide + // variant. + wonSign rune = 0x20A9 +) diff --git a/vendor/golang.org/x/text/width/width.go b/vendor/golang.org/x/text/width/width.go new file mode 100644 index 0000000..f1639ca --- /dev/null +++ b/vendor/golang.org/x/text/width/width.go @@ -0,0 +1,206 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate stringer -type=Kind +//go:generate go run gen.go gen_common.go gen_trieval.go + +// Package width provides functionality for handling different widths in text. +// +// Wide characters behave like ideographs; they tend to allow line breaks after +// each character and remain upright in vertical text layout. Narrow characters +// are kept together in words or runs that are rotated sideways in vertical text +// layout. +// +// For more information, see http://unicode.org/reports/tr11/. +package width // import "golang.org/x/text/width" + +import ( + "unicode/utf8" + + "golang.org/x/text/transform" +) + +// TODO +// 1) Reduce table size by compressing blocks. +// 2) API proposition for computing display length +// (approximation, fixed pitch only). +// 3) Implement display length. + +// Kind indicates the type of width property as defined in http://unicode.org/reports/tr11/. +type Kind int + +const ( + // Neutral characters do not occur in legacy East Asian character sets. + Neutral Kind = iota + + // EastAsianAmbiguous characters that can be sometimes wide and sometimes + // narrow and require additional information not contained in the character + // code to further resolve their width. + EastAsianAmbiguous + + // EastAsianWide characters are wide in its usual form. They occur only in + // the context of East Asian typography. These runes may have explicit + // halfwidth counterparts. + EastAsianWide + + // EastAsianNarrow characters are narrow in its usual form. They often have + // fullwidth counterparts. + EastAsianNarrow + + // Note: there exist Narrow runes that do not have fullwidth or wide + // counterparts, despite what the definition says (e.g. U+27E6). + + // EastAsianFullwidth characters have a compatibility decompositions of type + // wide that map to a narrow counterpart. + EastAsianFullwidth + + // EastAsianHalfwidth characters have a compatibility decomposition of type + // narrow that map to a wide or ambiguous counterpart, plus U+20A9 ₩ WON + // SIGN. + EastAsianHalfwidth + + // Note: there exist runes that have a halfwidth counterparts but that are + // classified as Ambiguous, rather than wide (e.g. U+2190). +) + +// TODO: the generated tries need to return size 1 for invalid runes for the +// width to be computed correctly (each byte should render width 1) + +var trie = newWidthTrie(0) + +// Lookup reports the Properties of the first rune in b and the number of bytes +// of its UTF-8 encoding. +func Lookup(b []byte) (p Properties, size int) { + v, sz := trie.lookup(b) + return Properties{elem(v), b[sz-1]}, sz +} + +// LookupString reports the Properties of the first rune in s and the number of +// bytes of its UTF-8 encoding. +func LookupString(s string) (p Properties, size int) { + v, sz := trie.lookupString(s) + return Properties{elem(v), s[sz-1]}, sz +} + +// LookupRune reports the Properties of rune r. +func LookupRune(r rune) Properties { + var buf [4]byte + n := utf8.EncodeRune(buf[:], r) + v, _ := trie.lookup(buf[:n]) + last := byte(r) + if r >= utf8.RuneSelf { + last = 0x80 + byte(r&0x3f) + } + return Properties{elem(v), last} +} + +// Properties provides access to width properties of a rune. +type Properties struct { + elem elem + last byte +} + +func (e elem) kind() Kind { + return Kind(e >> typeShift) +} + +// Kind returns the Kind of a rune as defined in Unicode TR #11. +// See http://unicode.org/reports/tr11/ for more details. +func (p Properties) Kind() Kind { + return p.elem.kind() +} + +// Folded returns the folded variant of a rune or 0 if the rune is canonical. +func (p Properties) Folded() rune { + if p.elem&tagNeedsFold != 0 { + buf := inverseData[byte(p.elem)] + buf[buf[0]] ^= p.last + r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) + return r + } + return 0 +} + +// Narrow returns the narrow variant of a rune or 0 if the rune is already +// narrow or doesn't have a narrow variant. +func (p Properties) Narrow() rune { + if k := p.elem.kind(); byte(p.elem) != 0 && (k == EastAsianFullwidth || k == EastAsianWide || k == EastAsianAmbiguous) { + buf := inverseData[byte(p.elem)] + buf[buf[0]] ^= p.last + r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) + return r + } + return 0 +} + +// Wide returns the wide variant of a rune or 0 if the rune is already +// wide or doesn't have a wide variant. +func (p Properties) Wide() rune { + if k := p.elem.kind(); byte(p.elem) != 0 && (k == EastAsianHalfwidth || k == EastAsianNarrow) { + buf := inverseData[byte(p.elem)] + buf[buf[0]] ^= p.last + r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) + return r + } + return 0 +} + +// TODO for Properties: +// - Add Fullwidth/Halfwidth or Inverted methods for computing variants +// mapping. +// - Add width information (including information on non-spacing runes). + +// Transformer implements the transform.Transformer interface. +type Transformer struct { + t transform.SpanningTransformer +} + +// Reset implements the transform.Transformer interface. +func (t Transformer) Reset() { t.t.Reset() } + +// Transform implements the transform.Transformer interface. +func (t Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + return t.t.Transform(dst, src, atEOF) +} + +// Span implements the transform.SpanningTransformer interface. +func (t Transformer) Span(src []byte, atEOF bool) (n int, err error) { + return t.t.Span(src, atEOF) +} + +// Bytes returns a new byte slice with the result of applying t to b. +func (t Transformer) Bytes(b []byte) []byte { + b, _, _ = transform.Bytes(t, b) + return b +} + +// String returns a string with the result of applying t to s. +func (t Transformer) String(s string) string { + s, _, _ = transform.String(t, s) + return s +} + +var ( + // Fold is a transform that maps all runes to their canonical width. + // + // Note that the NFKC and NFKD transforms in golang.org/x/text/unicode/norm + // provide a more generic folding mechanism. + Fold Transformer = Transformer{foldTransform{}} + + // Widen is a transform that maps runes to their wide variant, if + // available. + Widen Transformer = Transformer{wideTransform{}} + + // Narrow is a transform that maps runes to their narrow variant, if + // available. + Narrow Transformer = Transformer{narrowTransform{}} +) + +// TODO: Consider the following options: +// - Treat Ambiguous runes that have a halfwidth counterpart as wide, or some +// generalized variant of this. +// - Consider a wide Won character to be the default width (or some generalized +// variant of this). +// - Filter the set of characters that gets converted (the preferred approach is +// to allow applying filters to transforms). diff --git a/vendor/google.golang.org/genproto/.travis.yml b/vendor/google.golang.org/genproto/.travis.yml new file mode 100644 index 0000000..0a0f71c --- /dev/null +++ b/vendor/google.golang.org/genproto/.travis.yml @@ -0,0 +1,5 @@ +language: go +go: + - 1.5 + - 1.6 +go_import_path: google.golang.org/genproto diff --git a/vendor/google.golang.org/genproto/CONTRIBUTING.md b/vendor/google.golang.org/genproto/CONTRIBUTING.md new file mode 100644 index 0000000..2827b7d --- /dev/null +++ b/vendor/google.golang.org/genproto/CONTRIBUTING.md @@ -0,0 +1,27 @@ +Want to contribute? Great! First, read this page (including the small print at the end). + +### Before you contribute +Before we can use your code, you must sign the +[Google Individual Contributor License Agreement] +(https://cla.developers.google.com/about/google-individual) +(CLA), which you can do online. The CLA is necessary mainly because you own the +copyright to your changes, even after your contribution becomes part of our +codebase, so we need your permission to use and distribute your code. We also +need to be sure of various other things—for instance that you'll tell us if you +know that your code infringes on other people's patents. You don't have to sign +the CLA until after you've submitted your code for review and a member has +approved it, but you must do it before we can put your code into our codebase. +Before you start working on a larger contribution, you should get in touch with +us first through the issue tracker with your idea so that we can help out and +possibly guide you. Coordinating up front makes it much easier to avoid +frustration later on. + +### Code reviews +All submissions, including submissions by project members, require review. We +use Github pull requests for this purpose. + +### The small print +Contributions made by corporations are covered by a different agreement than +the one above, the +[Software Grant and Corporate Contributor License Agreement] +(https://cla.developers.google.com/about/google-corporate). diff --git a/vendor/google.golang.org/genproto/LICENSE b/vendor/google.golang.org/genproto/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/google.golang.org/genproto/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/vendor/google.golang.org/genproto/README.md b/vendor/google.golang.org/genproto/README.md new file mode 100644 index 0000000..51d0bae --- /dev/null +++ b/vendor/google.golang.org/genproto/README.md @@ -0,0 +1,28 @@ +Go generated proto packages +=========================== + +[![Build Status](https://travis-ci.org/google/go-genproto.svg?branch=master)](https://travis-ci.org/google/go-genproto) +[![GoDoc](https://godoc.org/google.golang.org/genproto?status.svg)](https://godoc.org/google.golang.org/genproto) + +> **IMPORTANT** This repository is currently experimental. The structure +> of the contained packages is subject to change. Please see the original +> source repositories (listed below) to find out the status of the each +> protocol buffer's associated service. + +This repository contains the generated Go packages for common protocol buffer +types, and the generated [gRPC][1] code necessary for interacting with Google's gRPC +APIs. + +There are two sources for the proto files used in this repository: + +1. [google/protobuf][2]: the code in the `protobuf` and `ptypes` subdirectories + is derived from this repo. The messages in `protobuf` are used to describe + protocol buffer messages themselves. The messages under `ptypes` define the + common well-known types. +2. [googleapis/googleapis][3]: the code in the `googleapis` is derived from this + repo. The packages here contain types specifically for interacting with Google + APIs. + +[1]: http://grpc.io +[2]: https://github.com/google/protobuf/ +[3]: https://github.com/googleapis/googleapis/ diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api/annotations.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go similarity index 76% rename from vendor/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api/annotations.pb.go rename to vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go index 98366b5..b37ccee 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api/annotations.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go @@ -3,17 +3,18 @@ // DO NOT EDIT! /* -Package google_api is a generated protocol buffer package. +Package annotations is a generated protocol buffer package. It is generated from these files: google/api/annotations.proto google/api/http.proto It has these top-level messages: + Http HttpRule CustomHttpPattern */ -package google_api +package annotations import proto "github.com/golang/protobuf/proto" import fmt "fmt" @@ -47,8 +48,8 @@ func init() { func init() { proto.RegisterFile("google/api/annotations.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 169 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcf, 0xcf, 0x4f, + // 208 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x82, 0xc8, 0xea, 0x25, 0x16, 0x64, 0x4a, 0x89, 0x22, 0xa9, 0xcc, 0x28, 0x29, 0x29, 0x80, 0x28, 0x91, 0x52, 0x80, 0x0a, 0x83, 0x79, @@ -56,7 +57,9 @@ var fileDescriptor0 = []byte{ 0x56, 0xde, 0x5c, 0x2c, 0x20, 0xf5, 0x42, 0x72, 0x7a, 0x50, 0xd3, 0x60, 0x4a, 0xf5, 0x7c, 0x53, 0x4b, 0x32, 0xf2, 0x53, 0xfc, 0x0b, 0xc0, 0x56, 0x4a, 0x6c, 0x38, 0xb5, 0x47, 0x49, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x44, 0x0f, 0x61, 0xad, 0x9e, 0x47, 0x49, 0x49, 0x41, 0x50, 0x69, 0x4e, 0x6a, - 0x10, 0xd8, 0x10, 0x27, 0x15, 0x2e, 0xbe, 0xe4, 0xfc, 0x5c, 0x24, 0x05, 0x4e, 0x02, 0x8e, 0x08, - 0x67, 0x07, 0x80, 0x4c, 0x0e, 0x60, 0x4c, 0x62, 0x03, 0x5b, 0x61, 0x0c, 0x08, 0x00, 0x00, 0xff, - 0xff, 0x4f, 0xd1, 0x89, 0x83, 0xde, 0x00, 0x00, 0x00, + 0x10, 0xd8, 0x10, 0xa7, 0x3c, 0x2e, 0xbe, 0xe4, 0xfc, 0x5c, 0x24, 0x05, 0x4e, 0x02, 0x8e, 0x08, + 0x67, 0x07, 0x80, 0x4c, 0x0e, 0x60, 0x8c, 0x72, 0x84, 0xca, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, + 0xeb, 0xe5, 0x17, 0xa5, 0xeb, 0xa7, 0xa7, 0xe6, 0x81, 0xed, 0xd5, 0x87, 0x48, 0x25, 0x16, 0x64, + 0x16, 0xa3, 0x7b, 0xda, 0x1a, 0x89, 0xbd, 0x88, 0x89, 0xc5, 0xdd, 0x31, 0xc0, 0x33, 0x89, 0x0d, + 0xac, 0xc9, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xe3, 0x29, 0x19, 0x62, 0x28, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go new file mode 100644 index 0000000..583ecf6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go @@ -0,0 +1,567 @@ +// Code generated by protoc-gen-go. +// source: google/api/http.proto +// DO NOT EDIT! + +package annotations + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Defines the HTTP configuration for a service. It contains a list of +// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method +// to one or more HTTP REST API methods. +type Http struct { + // A list of HTTP configuration rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + Rules []*HttpRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` +} + +func (m *Http) Reset() { *m = Http{} } +func (m *Http) String() string { return proto.CompactTextString(m) } +func (*Http) ProtoMessage() {} +func (*Http) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Http) GetRules() []*HttpRule { + if m != nil { + return m.Rules + } + return nil +} + +// `HttpRule` defines the mapping of an RPC method to one or more HTTP +// REST APIs. The mapping determines what portions of the request +// message are populated from the path, query parameters, or body of +// the HTTP request. The mapping is typically specified as an +// `google.api.http` annotation, see "google/api/annotations.proto" +// for details. +// +// The mapping consists of a field specifying the path template and +// method kind. The path template can refer to fields in the request +// message, as in the example below which describes a REST GET +// operation on a resource collection of messages: +// +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}"; +// } +// } +// message GetMessageRequest { +// message SubMessage { +// string subfield = 1; +// } +// string message_id = 1; // mapped to the URL +// SubMessage sub = 2; // `sub.subfield` is url-mapped +// } +// message Message { +// string text = 1; // content of the resource +// } +// +// The same http annotation can alternatively be expressed inside the +// `GRPC API Configuration` YAML file. +// +// http: +// rules: +// - selector: <proto_package_name>.Messaging.GetMessage +// get: /v1/messages/{message_id}/{sub.subfield} +// +// This definition enables an automatic, bidrectional mapping of HTTP +// JSON to RPC. Example: +// +// HTTP | RPC +// -----|----- +// `GET /v1/messages/123456/foo` | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))` +// +// In general, not only fields but also field paths can be referenced +// from a path pattern. Fields mapped to the path pattern cannot be +// repeated and must have a primitive (non-message) type. +// +// Any fields in the request message which are not bound by the path +// pattern automatically become (optional) HTTP query +// parameters. Assume the following definition of the request message: +// +// +// message GetMessageRequest { +// message SubMessage { +// string subfield = 1; +// } +// string message_id = 1; // mapped to the URL +// int64 revision = 2; // becomes a parameter +// SubMessage sub = 3; // `sub.subfield` becomes a parameter +// } +// +// +// This enables a HTTP JSON to RPC mapping as below: +// +// HTTP | RPC +// -----|----- +// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))` +// +// Note that fields which are mapped to HTTP parameters must have a +// primitive type or a repeated primitive type. Message types are not +// allowed. In the case of a repeated type, the parameter can be +// repeated in the URL, as in `...?param=A¶m=B`. +// +// For HTTP method kinds which allow a request body, the `body` field +// specifies the mapping. Consider a REST update method on the +// message resource collection: +// +// +// service Messaging { +// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { +// option (google.api.http) = { +// put: "/v1/messages/{message_id}" +// body: "message" +// }; +// } +// } +// message UpdateMessageRequest { +// string message_id = 1; // mapped to the URL +// Message message = 2; // mapped to the body +// } +// +// +// The following HTTP JSON to RPC mapping is enabled, where the +// representation of the JSON in the request body is determined by +// protos JSON encoding: +// +// HTTP | RPC +// -----|----- +// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })` +// +// The special name `*` can be used in the body mapping to define that +// every field not bound by the path template should be mapped to the +// request body. This enables the following alternative definition of +// the update method: +// +// service Messaging { +// rpc UpdateMessage(Message) returns (Message) { +// option (google.api.http) = { +// put: "/v1/messages/{message_id}" +// body: "*" +// }; +// } +// } +// message Message { +// string message_id = 1; +// string text = 2; +// } +// +// +// The following HTTP JSON to RPC mapping is enabled: +// +// HTTP | RPC +// -----|----- +// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")` +// +// Note that when using `*` in the body mapping, it is not possible to +// have HTTP parameters, as all fields not bound by the path end in +// the body. This makes this option more rarely used in practice of +// defining REST APIs. The common usage of `*` is in custom methods +// which don't use the URL at all for transferring data. +// +// It is possible to define multiple HTTP methods for one RPC by using +// the `additional_bindings` option. Example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get: "/v1/messages/{message_id}" +// additional_bindings { +// get: "/v1/users/{user_id}/messages/{message_id}" +// } +// }; +// } +// } +// message GetMessageRequest { +// string message_id = 1; +// string user_id = 2; +// } +// +// +// This enables the following two alternative HTTP JSON to RPC +// mappings: +// +// HTTP | RPC +// -----|----- +// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` +// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")` +// +// # Rules for HTTP mapping +// +// The rules for mapping HTTP path, query parameters, and body fields +// to the request message are as follows: +// +// 1. The `body` field specifies either `*` or a field path, or is +// omitted. If omitted, it assumes there is no HTTP body. +// 2. Leaf fields (recursive expansion of nested messages in the +// request) can be classified into three types: +// (a) Matched in the URL template. +// (b) Covered by body (if body is `*`, everything except (a) fields; +// else everything under the body field) +// (c) All other fields. +// 3. URL query parameters found in the HTTP request are mapped to (c) fields. +// 4. Any body sent with an HTTP request can contain only (b) fields. +// +// The syntax of the path template is as follows: +// +// Template = "/" Segments [ Verb ] ; +// Segments = Segment { "/" Segment } ; +// Segment = "*" | "**" | LITERAL | Variable ; +// Variable = "{" FieldPath [ "=" Segments ] "}" ; +// FieldPath = IDENT { "." IDENT } ; +// Verb = ":" LITERAL ; +// +// The syntax `*` matches a single path segment. It follows the semantics of +// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String +// Expansion. +// +// The syntax `**` matches zero or more path segments. It follows the semantics +// of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved +// Expansion. NOTE: it must be the last segment in the path except the Verb. +// +// The syntax `LITERAL` matches literal text in the URL path. +// +// The syntax `Variable` matches the entire path as specified by its template; +// this nested template must not contain further variables. If a variable +// matches a single path segment, its template may be omitted, e.g. `{var}` +// is equivalent to `{var=*}`. +// +// NOTE: the field paths in variables and in the `body` must not refer to +// repeated fields or map fields. +// +// Use CustomHttpPattern to specify any HTTP method that is not included in the +// `pattern` field, such as HEAD, or "*" to leave the HTTP method unspecified for +// a given URL path rule. The wild-card rule is useful for services that provide +// content to Web (HTML) clients. +type HttpRule struct { + // Selects methods to which this rule applies. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` + // Determines the URL pattern is matched by this rules. This pattern can be + // used with any of the {get|put|post|delete|patch} methods. A custom method + // can be defined using the 'custom' field. + // + // Types that are valid to be assigned to Pattern: + // *HttpRule_Get + // *HttpRule_Put + // *HttpRule_Post + // *HttpRule_Delete + // *HttpRule_Patch + // *HttpRule_Custom + Pattern isHttpRule_Pattern `protobuf_oneof:"pattern"` + // The name of the request field whose value is mapped to the HTTP body, or + // `*` for mapping all fields not captured by the path pattern to the HTTP + // body. NOTE: the referred field must not be a repeated field and must be + // present at the top-level of request message type. + Body string `protobuf:"bytes,7,opt,name=body" json:"body,omitempty"` + // Additional HTTP bindings for the selector. Nested bindings must + // not contain an `additional_bindings` field themselves (that is, + // the nesting may only be one level deep). + AdditionalBindings []*HttpRule `protobuf:"bytes,11,rep,name=additional_bindings,json=additionalBindings" json:"additional_bindings,omitempty"` +} + +func (m *HttpRule) Reset() { *m = HttpRule{} } +func (m *HttpRule) String() string { return proto.CompactTextString(m) } +func (*HttpRule) ProtoMessage() {} +func (*HttpRule) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isHttpRule_Pattern interface { + isHttpRule_Pattern() +} + +type HttpRule_Get struct { + Get string `protobuf:"bytes,2,opt,name=get,oneof"` +} +type HttpRule_Put struct { + Put string `protobuf:"bytes,3,opt,name=put,oneof"` +} +type HttpRule_Post struct { + Post string `protobuf:"bytes,4,opt,name=post,oneof"` +} +type HttpRule_Delete struct { + Delete string `protobuf:"bytes,5,opt,name=delete,oneof"` +} +type HttpRule_Patch struct { + Patch string `protobuf:"bytes,6,opt,name=patch,oneof"` +} +type HttpRule_Custom struct { + Custom *CustomHttpPattern `protobuf:"bytes,8,opt,name=custom,oneof"` +} + +func (*HttpRule_Get) isHttpRule_Pattern() {} +func (*HttpRule_Put) isHttpRule_Pattern() {} +func (*HttpRule_Post) isHttpRule_Pattern() {} +func (*HttpRule_Delete) isHttpRule_Pattern() {} +func (*HttpRule_Patch) isHttpRule_Pattern() {} +func (*HttpRule_Custom) isHttpRule_Pattern() {} + +func (m *HttpRule) GetPattern() isHttpRule_Pattern { + if m != nil { + return m.Pattern + } + return nil +} + +func (m *HttpRule) GetSelector() string { + if m != nil { + return m.Selector + } + return "" +} + +func (m *HttpRule) GetGet() string { + if x, ok := m.GetPattern().(*HttpRule_Get); ok { + return x.Get + } + return "" +} + +func (m *HttpRule) GetPut() string { + if x, ok := m.GetPattern().(*HttpRule_Put); ok { + return x.Put + } + return "" +} + +func (m *HttpRule) GetPost() string { + if x, ok := m.GetPattern().(*HttpRule_Post); ok { + return x.Post + } + return "" +} + +func (m *HttpRule) GetDelete() string { + if x, ok := m.GetPattern().(*HttpRule_Delete); ok { + return x.Delete + } + return "" +} + +func (m *HttpRule) GetPatch() string { + if x, ok := m.GetPattern().(*HttpRule_Patch); ok { + return x.Patch + } + return "" +} + +func (m *HttpRule) GetCustom() *CustomHttpPattern { + if x, ok := m.GetPattern().(*HttpRule_Custom); ok { + return x.Custom + } + return nil +} + +func (m *HttpRule) GetBody() string { + if m != nil { + return m.Body + } + return "" +} + +func (m *HttpRule) GetAdditionalBindings() []*HttpRule { + if m != nil { + return m.AdditionalBindings + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*HttpRule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _HttpRule_OneofMarshaler, _HttpRule_OneofUnmarshaler, _HttpRule_OneofSizer, []interface{}{ + (*HttpRule_Get)(nil), + (*HttpRule_Put)(nil), + (*HttpRule_Post)(nil), + (*HttpRule_Delete)(nil), + (*HttpRule_Patch)(nil), + (*HttpRule_Custom)(nil), + } +} + +func _HttpRule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*HttpRule) + // pattern + switch x := m.Pattern.(type) { + case *HttpRule_Get: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Get) + case *HttpRule_Put: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Put) + case *HttpRule_Post: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Post) + case *HttpRule_Delete: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Delete) + case *HttpRule_Patch: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Patch) + case *HttpRule_Custom: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Custom); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("HttpRule.Pattern has unexpected type %T", x) + } + return nil +} + +func _HttpRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*HttpRule) + switch tag { + case 2: // pattern.get + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Pattern = &HttpRule_Get{x} + return true, err + case 3: // pattern.put + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Pattern = &HttpRule_Put{x} + return true, err + case 4: // pattern.post + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Pattern = &HttpRule_Post{x} + return true, err + case 5: // pattern.delete + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Pattern = &HttpRule_Delete{x} + return true, err + case 6: // pattern.patch + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Pattern = &HttpRule_Patch{x} + return true, err + case 8: // pattern.custom + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomHttpPattern) + err := b.DecodeMessage(msg) + m.Pattern = &HttpRule_Custom{msg} + return true, err + default: + return false, nil + } +} + +func _HttpRule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*HttpRule) + // pattern + switch x := m.Pattern.(type) { + case *HttpRule_Get: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Get))) + n += len(x.Get) + case *HttpRule_Put: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Put))) + n += len(x.Put) + case *HttpRule_Post: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Post))) + n += len(x.Post) + case *HttpRule_Delete: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Delete))) + n += len(x.Delete) + case *HttpRule_Patch: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Patch))) + n += len(x.Patch) + case *HttpRule_Custom: + s := proto.Size(x.Custom) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A custom pattern is used for defining custom HTTP verb. +type CustomHttpPattern struct { + // The name of this custom HTTP verb. + Kind string `protobuf:"bytes,1,opt,name=kind" json:"kind,omitempty"` + // The path matched by this custom verb. + Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` +} + +func (m *CustomHttpPattern) Reset() { *m = CustomHttpPattern{} } +func (m *CustomHttpPattern) String() string { return proto.CompactTextString(m) } +func (*CustomHttpPattern) ProtoMessage() {} +func (*CustomHttpPattern) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *CustomHttpPattern) GetKind() string { + if m != nil { + return m.Kind + } + return "" +} + +func (m *CustomHttpPattern) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func init() { + proto.RegisterType((*Http)(nil), "google.api.Http") + proto.RegisterType((*HttpRule)(nil), "google.api.HttpRule") + proto.RegisterType((*CustomHttpPattern)(nil), "google.api.CustomHttpPattern") +} + +func init() { proto.RegisterFile("google/api/http.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 359 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0x6a, 0xe3, 0x30, + 0x10, 0xc6, 0xd7, 0x89, 0xe3, 0x24, 0x13, 0x58, 0x58, 0x6d, 0x76, 0x11, 0x85, 0x42, 0xc8, 0x29, + 0xf4, 0x60, 0x43, 0x7a, 0xe8, 0x21, 0xa7, 0xb8, 0x94, 0xa6, 0xb7, 0xe0, 0x63, 0x2f, 0x45, 0xb1, + 0x85, 0xa2, 0xd6, 0x91, 0x84, 0x3d, 0x3e, 0xf4, 0x75, 0xfa, 0x0e, 0x7d, 0xb7, 0x1e, 0x8b, 0xfe, + 0xa4, 0x09, 0x14, 0x7a, 0x9b, 0xef, 0x37, 0x9f, 0x34, 0xa3, 0x19, 0xc1, 0x3f, 0xa1, 0xb5, 0xa8, + 0x79, 0xc6, 0x8c, 0xcc, 0xf6, 0x88, 0x26, 0x35, 0x8d, 0x46, 0x4d, 0xc0, 0xe3, 0x94, 0x19, 0x39, + 0x5f, 0x42, 0xbc, 0x41, 0x34, 0xe4, 0x0a, 0x06, 0x4d, 0x57, 0xf3, 0x96, 0x46, 0xb3, 0xfe, 0x62, + 0xb2, 0x9c, 0xa6, 0x27, 0x4f, 0x6a, 0x0d, 0x45, 0x57, 0xf3, 0xc2, 0x5b, 0xe6, 0xef, 0x3d, 0x18, + 0x1d, 0x19, 0xb9, 0x80, 0x51, 0xcb, 0x6b, 0x5e, 0xa2, 0x6e, 0x68, 0x34, 0x8b, 0x16, 0xe3, 0xe2, + 0x4b, 0x13, 0x02, 0x7d, 0xc1, 0x91, 0xf6, 0x2c, 0xde, 0xfc, 0x2a, 0xac, 0xb0, 0xcc, 0x74, 0x48, + 0xfb, 0x47, 0x66, 0x3a, 0x24, 0x53, 0x88, 0x8d, 0x6e, 0x91, 0xc6, 0x01, 0x3a, 0x45, 0x28, 0x24, + 0x15, 0xaf, 0x39, 0x72, 0x3a, 0x08, 0x3c, 0x68, 0xf2, 0x1f, 0x06, 0x86, 0x61, 0xb9, 0xa7, 0x49, + 0x48, 0x78, 0x49, 0x6e, 0x20, 0x29, 0xbb, 0x16, 0xf5, 0x81, 0x8e, 0x66, 0xd1, 0x62, 0xb2, 0xbc, + 0x3c, 0x7f, 0xc5, 0xad, 0xcb, 0xd8, 0xbe, 0xb7, 0x0c, 0x91, 0x37, 0xca, 0x5e, 0xe8, 0xed, 0x84, + 0x40, 0xbc, 0xd3, 0xd5, 0x2b, 0x1d, 0xba, 0x07, 0xb8, 0x98, 0xdc, 0xc1, 0x5f, 0x56, 0x55, 0x12, + 0xa5, 0x56, 0xac, 0x7e, 0xda, 0x49, 0x55, 0x49, 0x25, 0x5a, 0x3a, 0xf9, 0x61, 0x3e, 0xe4, 0x74, + 0x20, 0x0f, 0xfe, 0x7c, 0x0c, 0x43, 0xe3, 0xeb, 0xcd, 0x57, 0xf0, 0xe7, 0x5b, 0x13, 0xb6, 0xf4, + 0x8b, 0x54, 0x55, 0x98, 0x9d, 0x8b, 0x2d, 0x33, 0x0c, 0xf7, 0x7e, 0x70, 0x85, 0x8b, 0xf3, 0x67, + 0xf8, 0x5d, 0xea, 0xc3, 0x59, 0xd9, 0x7c, 0xec, 0xae, 0xb1, 0x1b, 0xdd, 0x46, 0x8f, 0xeb, 0x90, + 0x10, 0xba, 0x66, 0x4a, 0xa4, 0xba, 0x11, 0x99, 0xe0, 0xca, 0xed, 0x3b, 0xf3, 0x29, 0x66, 0x64, + 0xeb, 0x7e, 0x02, 0x53, 0x4a, 0x23, 0xb3, 0x6d, 0xb6, 0xab, 0xb3, 0xf8, 0x23, 0x8a, 0xde, 0x7a, + 0xf1, 0xfd, 0x7a, 0xfb, 0xb0, 0x4b, 0xdc, 0xb9, 0xeb, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x68, + 0x15, 0x60, 0x5b, 0x40, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/authorization_config.pb.go b/vendor/google.golang.org/genproto/googleapis/api/authorization_config.pb.go new file mode 100644 index 0000000..410112b --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/authorization_config.pb.go @@ -0,0 +1,81 @@ +// Code generated by protoc-gen-go. +// source: google/api/experimental/authorization_config.proto +// DO NOT EDIT! + +/* +Package api is a generated protocol buffer package. + +It is generated from these files: + google/api/experimental/authorization_config.proto + google/api/experimental/experimental.proto + +It has these top-level messages: + AuthorizationConfig + Experimental +*/ +package api + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Configuration of authorization. +// +// This section determines the authorization provider, if unspecified, then no +// authorization check will be done. +// +// Example: +// +// experimental: +// authorization: +// provider: firebaserules.googleapis.com +type AuthorizationConfig struct { + // The name of the authorization provider, such as + // firebaserules.googleapis.com. + Provider string `protobuf:"bytes,1,opt,name=provider" json:"provider,omitempty"` +} + +func (m *AuthorizationConfig) Reset() { *m = AuthorizationConfig{} } +func (m *AuthorizationConfig) String() string { return proto.CompactTextString(m) } +func (*AuthorizationConfig) ProtoMessage() {} +func (*AuthorizationConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AuthorizationConfig) GetProvider() string { + if m != nil { + return m.Provider + } + return "" +} + +func init() { + proto.RegisterType((*AuthorizationConfig)(nil), "google.api.AuthorizationConfig") +} + +func init() { proto.RegisterFile("google/api/experimental/authorization_config.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 180 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4a, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xad, 0x28, 0x48, 0x2d, 0xca, 0xcc, 0x4d, 0xcd, + 0x2b, 0x49, 0xcc, 0xd1, 0x4f, 0x2c, 0x2d, 0xc9, 0xc8, 0x2f, 0xca, 0xac, 0x4a, 0x2c, 0xc9, 0xcc, + 0xcf, 0x8b, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, + 0x82, 0xe8, 0xd1, 0x4b, 0x2c, 0xc8, 0x54, 0x32, 0xe4, 0x12, 0x76, 0x44, 0x56, 0xe9, 0x0c, 0x56, + 0x28, 0x24, 0xc5, 0xc5, 0x51, 0x50, 0x94, 0x5f, 0x96, 0x99, 0x92, 0x5a, 0x24, 0xc1, 0xa8, 0xc0, + 0xa8, 0xc1, 0x19, 0x04, 0xe7, 0x3b, 0x25, 0x71, 0xf1, 0x25, 0xe7, 0xe7, 0xea, 0x21, 0x0c, 0x71, + 0x92, 0xc0, 0x62, 0x44, 0x00, 0xc8, 0xaa, 0x00, 0xc6, 0x28, 0x5d, 0xa8, 0xba, 0xf4, 0xfc, 0x9c, + 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0xb0, 0x43, 0xf4, 0x21, 0x52, + 0x89, 0x05, 0x99, 0xc5, 0x20, 0xf7, 0x5b, 0x27, 0x16, 0x64, 0x2e, 0x62, 0x62, 0x71, 0x77, 0x0c, + 0xf0, 0x4c, 0x62, 0x03, 0x2b, 0x30, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x52, 0x27, 0x0c, 0xba, + 0xdf, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/configchange/config_change.pb.go b/vendor/google.golang.org/genproto/googleapis/api/configchange/config_change.pb.go new file mode 100644 index 0000000..65bc8da --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/configchange/config_change.pb.go @@ -0,0 +1,190 @@ +// Code generated by protoc-gen-go. +// source: google/api/config_change.proto +// DO NOT EDIT! + +/* +Package configchange is a generated protocol buffer package. + +It is generated from these files: + google/api/config_change.proto + +It has these top-level messages: + ConfigChange + Advice +*/ +package configchange + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Classifies set of possible modifications to an object in the service +// configuration. +type ChangeType int32 + +const ( + // No value was provided. + ChangeType_CHANGE_TYPE_UNSPECIFIED ChangeType = 0 + // The changed object exists in the 'new' service configuration, but not + // in the 'old' service configuration. + ChangeType_ADDED ChangeType = 1 + // The changed object exists in the 'old' service configuration, but not + // in the 'new' service configuration. + ChangeType_REMOVED ChangeType = 2 + // The changed object exists in both service configurations, but its value + // is different. + ChangeType_MODIFIED ChangeType = 3 +) + +var ChangeType_name = map[int32]string{ + 0: "CHANGE_TYPE_UNSPECIFIED", + 1: "ADDED", + 2: "REMOVED", + 3: "MODIFIED", +} +var ChangeType_value = map[string]int32{ + "CHANGE_TYPE_UNSPECIFIED": 0, + "ADDED": 1, + "REMOVED": 2, + "MODIFIED": 3, +} + +func (x ChangeType) String() string { + return proto.EnumName(ChangeType_name, int32(x)) +} +func (ChangeType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Output generated from semantically comparing two versions of a service +// configuration. +// +// Includes detailed information about a field that have changed with +// applicable advice about potential consequences for the change, such as +// backwards-incompatibility. +type ConfigChange struct { + // Object hierarchy path to the change, with levels separated by a '.' + // character. For repeated fields, an applicable unique identifier field is + // used for the index (usually selector, name, or id). For maps, the term + // 'key' is used. If the field has no unique identifier, the numeric index + // is used. + // Examples: + // - visibility.rules[selector=="google.LibraryService.CreateBook"].restriction + // - quota.metric_rules[selector=="google"].metric_costs[key=="reads"].value + // - logging.producer_destinations[0] + Element string `protobuf:"bytes,1,opt,name=element" json:"element,omitempty"` + // Value of the changed object in the old Service configuration, + // in JSON format. This field will not be populated if ChangeType == ADDED. + OldValue string `protobuf:"bytes,2,opt,name=old_value,json=oldValue" json:"old_value,omitempty"` + // Value of the changed object in the new Service configuration, + // in JSON format. This field will not be populated if ChangeType == REMOVED. + NewValue string `protobuf:"bytes,3,opt,name=new_value,json=newValue" json:"new_value,omitempty"` + // The type for this change, either ADDED, REMOVED, or MODIFIED. + ChangeType ChangeType `protobuf:"varint,4,opt,name=change_type,json=changeType,enum=google.api.ChangeType" json:"change_type,omitempty"` + // Collection of advice provided for this change, useful for determining the + // possible impact of this change. + Advices []*Advice `protobuf:"bytes,5,rep,name=advices" json:"advices,omitempty"` +} + +func (m *ConfigChange) Reset() { *m = ConfigChange{} } +func (m *ConfigChange) String() string { return proto.CompactTextString(m) } +func (*ConfigChange) ProtoMessage() {} +func (*ConfigChange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ConfigChange) GetElement() string { + if m != nil { + return m.Element + } + return "" +} + +func (m *ConfigChange) GetOldValue() string { + if m != nil { + return m.OldValue + } + return "" +} + +func (m *ConfigChange) GetNewValue() string { + if m != nil { + return m.NewValue + } + return "" +} + +func (m *ConfigChange) GetChangeType() ChangeType { + if m != nil { + return m.ChangeType + } + return ChangeType_CHANGE_TYPE_UNSPECIFIED +} + +func (m *ConfigChange) GetAdvices() []*Advice { + if m != nil { + return m.Advices + } + return nil +} + +// Generated advice about this change, used for providing more +// information about how a change will affect the existing service. +type Advice struct { + // Useful description for why this advice was applied and what actions should + // be taken to mitigate any implied risks. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *Advice) Reset() { *m = Advice{} } +func (m *Advice) String() string { return proto.CompactTextString(m) } +func (*Advice) ProtoMessage() {} +func (*Advice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Advice) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func init() { + proto.RegisterType((*ConfigChange)(nil), "google.api.ConfigChange") + proto.RegisterType((*Advice)(nil), "google.api.Advice") + proto.RegisterEnum("google.api.ChangeType", ChangeType_name, ChangeType_value) +} + +func init() { proto.RegisterFile("google/api/config_change.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 338 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x91, 0xcd, 0x4e, 0xc2, 0x40, + 0x14, 0x85, 0x2d, 0xff, 0xdc, 0x12, 0x82, 0xb3, 0xd0, 0x26, 0x24, 0xa6, 0x61, 0x45, 0x88, 0x69, + 0x13, 0x5c, 0xb8, 0x70, 0x55, 0xda, 0x8a, 0x2c, 0x80, 0xa6, 0x22, 0x89, 0x6e, 0x9a, 0xb1, 0x1d, + 0xc7, 0x49, 0xca, 0xcc, 0x08, 0x15, 0xc2, 0xeb, 0xf8, 0x36, 0xbe, 0x95, 0xa1, 0x03, 0xd2, 0xdd, + 0x9c, 0xf9, 0xce, 0xcd, 0x3d, 0x39, 0x17, 0x6e, 0xa8, 0x10, 0x34, 0x25, 0x36, 0x96, 0xcc, 0x8e, + 0x05, 0xff, 0x60, 0x34, 0x8a, 0x3f, 0x31, 0xa7, 0xc4, 0x92, 0x6b, 0x91, 0x09, 0x04, 0x8a, 0x5b, + 0x58, 0xb2, 0xde, 0xaf, 0x06, 0x2d, 0x37, 0xf7, 0xb8, 0xb9, 0x05, 0x19, 0x50, 0x27, 0x29, 0x59, + 0x11, 0x9e, 0x19, 0x9a, 0xa9, 0xf5, 0x9b, 0xe1, 0x49, 0xa2, 0x2e, 0x34, 0x45, 0x9a, 0x44, 0x5b, + 0x9c, 0x7e, 0x13, 0xa3, 0x94, 0xb3, 0x86, 0x48, 0x93, 0xe5, 0x41, 0x1f, 0x20, 0x27, 0xbb, 0x23, + 0x2c, 0x2b, 0xc8, 0xc9, 0x4e, 0xc1, 0x7b, 0xd0, 0x55, 0x80, 0x28, 0xdb, 0x4b, 0x62, 0x54, 0x4c, + 0xad, 0xdf, 0x1e, 0x5e, 0x59, 0xe7, 0x18, 0x96, 0x5a, 0xbe, 0xd8, 0x4b, 0x12, 0x42, 0xfc, 0xff, + 0x46, 0xb7, 0x50, 0xc7, 0xc9, 0x96, 0xc5, 0x64, 0x63, 0x54, 0xcd, 0x72, 0x5f, 0x1f, 0xa2, 0xe2, + 0x90, 0x93, 0xa3, 0xf0, 0x64, 0xe9, 0x0d, 0xa0, 0xa6, 0xbe, 0x90, 0x09, 0x7a, 0x42, 0x36, 0xf1, + 0x9a, 0xc9, 0x8c, 0x09, 0x7e, 0x0c, 0x5b, 0xfc, 0x1a, 0xcc, 0x01, 0xce, 0x3b, 0x51, 0x17, 0xae, + 0xdd, 0x27, 0x67, 0x36, 0xf6, 0xa3, 0xc5, 0x6b, 0xe0, 0x47, 0x2f, 0xb3, 0xe7, 0xc0, 0x77, 0x27, + 0x8f, 0x13, 0xdf, 0xeb, 0x5c, 0xa0, 0x26, 0x54, 0x1d, 0xcf, 0xf3, 0xbd, 0x8e, 0x86, 0x74, 0xa8, + 0x87, 0xfe, 0x74, 0xbe, 0xf4, 0xbd, 0x4e, 0x09, 0xb5, 0xa0, 0x31, 0x9d, 0x7b, 0xca, 0x55, 0x1e, + 0x7d, 0x41, 0x3b, 0x16, 0xab, 0x42, 0xbc, 0xd1, 0x65, 0xb1, 0xd7, 0xe0, 0xd0, 0x7c, 0xa0, 0xbd, + 0xb9, 0x47, 0x03, 0x15, 0x29, 0xe6, 0xd4, 0x12, 0x6b, 0x6a, 0x53, 0xc2, 0xf3, 0xbb, 0xd8, 0x0a, + 0x61, 0xc9, 0x36, 0x85, 0xd3, 0xa9, 0x36, 0x1e, 0x8a, 0xe2, 0xa7, 0x54, 0x19, 0x3b, 0xc1, 0xe4, + 0xbd, 0x96, 0x8f, 0xdd, 0xfd, 0x05, 0x00, 0x00, 0xff, 0xff, 0x46, 0x8b, 0xd3, 0xf5, 0xf0, 0x01, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/distribution/distribution.pb.go b/vendor/google.golang.org/genproto/googleapis/api/distribution/distribution.pb.go new file mode 100644 index 0000000..1ff5823 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/distribution/distribution.pb.go @@ -0,0 +1,507 @@ +// Code generated by protoc-gen-go. +// source: google/api/distribution.proto +// DO NOT EDIT! + +/* +Package distribution is a generated protocol buffer package. + +It is generated from these files: + google/api/distribution.proto + +It has these top-level messages: + Distribution +*/ +package distribution + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "github.com/golang/protobuf/ptypes/any" +import _ "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Distribution contains summary statistics for a population of values and, +// optionally, a histogram representing the distribution of those values across +// a specified set of histogram buckets. +// +// The summary statistics are the count, mean, sum of the squared deviation from +// the mean, the minimum, and the maximum of the set of population of values. +// +// The histogram is based on a sequence of buckets and gives a count of values +// that fall into each bucket. The boundaries of the buckets are given either +// explicitly or by specifying parameters for a method of computing them +// (buckets of fixed width or buckets of exponentially increasing width). +// +// Although it is not forbidden, it is generally a bad idea to include +// non-finite values (infinities or NaNs) in the population of values, as this +// will render the `mean` and `sum_of_squared_deviation` fields meaningless. +type Distribution struct { + // The number of values in the population. Must be non-negative. + Count int64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"` + // The arithmetic mean of the values in the population. If `count` is zero + // then this field must be zero. + Mean float64 `protobuf:"fixed64,2,opt,name=mean" json:"mean,omitempty"` + // The sum of squared deviations from the mean of the values in the + // population. For values x_i this is: + // + // Sum[i=1..n]((x_i - mean)^2) + // + // Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition + // describes Welford's method for accumulating this sum in one pass. + // + // If `count` is zero then this field must be zero. + SumOfSquaredDeviation float64 `protobuf:"fixed64,3,opt,name=sum_of_squared_deviation,json=sumOfSquaredDeviation" json:"sum_of_squared_deviation,omitempty"` + // If specified, contains the range of the population values. The field + // must not be present if the `count` is zero. + Range *Distribution_Range `protobuf:"bytes,4,opt,name=range" json:"range,omitempty"` + // Defines the histogram bucket boundaries. + BucketOptions *Distribution_BucketOptions `protobuf:"bytes,6,opt,name=bucket_options,json=bucketOptions" json:"bucket_options,omitempty"` + // If `bucket_options` is given, then the sum of the values in `bucket_counts` + // must equal the value in `count`. If `bucket_options` is not given, no + // `bucket_counts` fields may be given. + // + // Bucket counts are given in order under the numbering scheme described + // above (the underflow bucket has number 0; the finite buckets, if any, + // have numbers 1 through N-2; the overflow bucket has number N-1). + // + // The size of `bucket_counts` must be no greater than N as defined in + // `bucket_options`. + // + // Any suffix of trailing zero bucket_count fields may be omitted. + BucketCounts []int64 `protobuf:"varint,7,rep,packed,name=bucket_counts,json=bucketCounts" json:"bucket_counts,omitempty"` +} + +func (m *Distribution) Reset() { *m = Distribution{} } +func (m *Distribution) String() string { return proto.CompactTextString(m) } +func (*Distribution) ProtoMessage() {} +func (*Distribution) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Distribution) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +func (m *Distribution) GetMean() float64 { + if m != nil { + return m.Mean + } + return 0 +} + +func (m *Distribution) GetSumOfSquaredDeviation() float64 { + if m != nil { + return m.SumOfSquaredDeviation + } + return 0 +} + +func (m *Distribution) GetRange() *Distribution_Range { + if m != nil { + return m.Range + } + return nil +} + +func (m *Distribution) GetBucketOptions() *Distribution_BucketOptions { + if m != nil { + return m.BucketOptions + } + return nil +} + +func (m *Distribution) GetBucketCounts() []int64 { + if m != nil { + return m.BucketCounts + } + return nil +} + +// The range of the population values. +type Distribution_Range struct { + // The minimum of the population values. + Min float64 `protobuf:"fixed64,1,opt,name=min" json:"min,omitempty"` + // The maximum of the population values. + Max float64 `protobuf:"fixed64,2,opt,name=max" json:"max,omitempty"` +} + +func (m *Distribution_Range) Reset() { *m = Distribution_Range{} } +func (m *Distribution_Range) String() string { return proto.CompactTextString(m) } +func (*Distribution_Range) ProtoMessage() {} +func (*Distribution_Range) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +func (m *Distribution_Range) GetMin() float64 { + if m != nil { + return m.Min + } + return 0 +} + +func (m *Distribution_Range) GetMax() float64 { + if m != nil { + return m.Max + } + return 0 +} + +// A Distribution may optionally contain a histogram of the values in the +// population. The histogram is given in `bucket_counts` as counts of values +// that fall into one of a sequence of non-overlapping buckets. The sequence +// of buckets is described by `bucket_options`. +// +// A bucket specifies an inclusive lower bound and exclusive upper bound for +// the values that are counted for that bucket. The upper bound of a bucket +// is strictly greater than the lower bound. +// +// The sequence of N buckets for a Distribution consists of an underflow +// bucket (number 0), zero or more finite buckets (number 1 through N - 2) and +// an overflow bucket (number N - 1). The buckets are contiguous: the lower +// bound of bucket i (i > 0) is the same as the upper bound of bucket i - 1. +// The buckets span the whole range of finite values: lower bound of the +// underflow bucket is -infinity and the upper bound of the overflow bucket is +// +infinity. The finite buckets are so-called because both bounds are +// finite. +// +// `BucketOptions` describes bucket boundaries in one of three ways. Two +// describe the boundaries by giving parameters for a formula to generate +// boundaries and one gives the bucket boundaries explicitly. +// +// If `bucket_boundaries` is not given, then no `bucket_counts` may be given. +type Distribution_BucketOptions struct { + // Exactly one of these three fields must be set. + // + // Types that are valid to be assigned to Options: + // *Distribution_BucketOptions_LinearBuckets + // *Distribution_BucketOptions_ExponentialBuckets + // *Distribution_BucketOptions_ExplicitBuckets + Options isDistribution_BucketOptions_Options `protobuf_oneof:"options"` +} + +func (m *Distribution_BucketOptions) Reset() { *m = Distribution_BucketOptions{} } +func (m *Distribution_BucketOptions) String() string { return proto.CompactTextString(m) } +func (*Distribution_BucketOptions) ProtoMessage() {} +func (*Distribution_BucketOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 1} } + +type isDistribution_BucketOptions_Options interface { + isDistribution_BucketOptions_Options() +} + +type Distribution_BucketOptions_LinearBuckets struct { + LinearBuckets *Distribution_BucketOptions_Linear `protobuf:"bytes,1,opt,name=linear_buckets,json=linearBuckets,oneof"` +} +type Distribution_BucketOptions_ExponentialBuckets struct { + ExponentialBuckets *Distribution_BucketOptions_Exponential `protobuf:"bytes,2,opt,name=exponential_buckets,json=exponentialBuckets,oneof"` +} +type Distribution_BucketOptions_ExplicitBuckets struct { + ExplicitBuckets *Distribution_BucketOptions_Explicit `protobuf:"bytes,3,opt,name=explicit_buckets,json=explicitBuckets,oneof"` +} + +func (*Distribution_BucketOptions_LinearBuckets) isDistribution_BucketOptions_Options() {} +func (*Distribution_BucketOptions_ExponentialBuckets) isDistribution_BucketOptions_Options() {} +func (*Distribution_BucketOptions_ExplicitBuckets) isDistribution_BucketOptions_Options() {} + +func (m *Distribution_BucketOptions) GetOptions() isDistribution_BucketOptions_Options { + if m != nil { + return m.Options + } + return nil +} + +func (m *Distribution_BucketOptions) GetLinearBuckets() *Distribution_BucketOptions_Linear { + if x, ok := m.GetOptions().(*Distribution_BucketOptions_LinearBuckets); ok { + return x.LinearBuckets + } + return nil +} + +func (m *Distribution_BucketOptions) GetExponentialBuckets() *Distribution_BucketOptions_Exponential { + if x, ok := m.GetOptions().(*Distribution_BucketOptions_ExponentialBuckets); ok { + return x.ExponentialBuckets + } + return nil +} + +func (m *Distribution_BucketOptions) GetExplicitBuckets() *Distribution_BucketOptions_Explicit { + if x, ok := m.GetOptions().(*Distribution_BucketOptions_ExplicitBuckets); ok { + return x.ExplicitBuckets + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Distribution_BucketOptions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Distribution_BucketOptions_OneofMarshaler, _Distribution_BucketOptions_OneofUnmarshaler, _Distribution_BucketOptions_OneofSizer, []interface{}{ + (*Distribution_BucketOptions_LinearBuckets)(nil), + (*Distribution_BucketOptions_ExponentialBuckets)(nil), + (*Distribution_BucketOptions_ExplicitBuckets)(nil), + } +} + +func _Distribution_BucketOptions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Distribution_BucketOptions) + // options + switch x := m.Options.(type) { + case *Distribution_BucketOptions_LinearBuckets: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LinearBuckets); err != nil { + return err + } + case *Distribution_BucketOptions_ExponentialBuckets: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ExponentialBuckets); err != nil { + return err + } + case *Distribution_BucketOptions_ExplicitBuckets: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ExplicitBuckets); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Distribution_BucketOptions.Options has unexpected type %T", x) + } + return nil +} + +func _Distribution_BucketOptions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Distribution_BucketOptions) + switch tag { + case 1: // options.linear_buckets + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Distribution_BucketOptions_Linear) + err := b.DecodeMessage(msg) + m.Options = &Distribution_BucketOptions_LinearBuckets{msg} + return true, err + case 2: // options.exponential_buckets + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Distribution_BucketOptions_Exponential) + err := b.DecodeMessage(msg) + m.Options = &Distribution_BucketOptions_ExponentialBuckets{msg} + return true, err + case 3: // options.explicit_buckets + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Distribution_BucketOptions_Explicit) + err := b.DecodeMessage(msg) + m.Options = &Distribution_BucketOptions_ExplicitBuckets{msg} + return true, err + default: + return false, nil + } +} + +func _Distribution_BucketOptions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Distribution_BucketOptions) + // options + switch x := m.Options.(type) { + case *Distribution_BucketOptions_LinearBuckets: + s := proto.Size(x.LinearBuckets) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Distribution_BucketOptions_ExponentialBuckets: + s := proto.Size(x.ExponentialBuckets) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Distribution_BucketOptions_ExplicitBuckets: + s := proto.Size(x.ExplicitBuckets) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Specify a sequence of buckets that all have the same width (except +// overflow and underflow). Each bucket represents a constant absolute +// uncertainty on the specific value in the bucket. +// +// Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for +// bucket `i`: +// +// Upper bound (0 <= i < N-1): offset + (width * i). +// Lower bound (1 <= i < N): offset + (width * (i - 1)). +type Distribution_BucketOptions_Linear struct { + // Must be greater than 0. + NumFiniteBuckets int32 `protobuf:"varint,1,opt,name=num_finite_buckets,json=numFiniteBuckets" json:"num_finite_buckets,omitempty"` + // Must be greater than 0. + Width float64 `protobuf:"fixed64,2,opt,name=width" json:"width,omitempty"` + // Lower bound of the first bucket. + Offset float64 `protobuf:"fixed64,3,opt,name=offset" json:"offset,omitempty"` +} + +func (m *Distribution_BucketOptions_Linear) Reset() { *m = Distribution_BucketOptions_Linear{} } +func (m *Distribution_BucketOptions_Linear) String() string { return proto.CompactTextString(m) } +func (*Distribution_BucketOptions_Linear) ProtoMessage() {} +func (*Distribution_BucketOptions_Linear) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 1, 0} +} + +func (m *Distribution_BucketOptions_Linear) GetNumFiniteBuckets() int32 { + if m != nil { + return m.NumFiniteBuckets + } + return 0 +} + +func (m *Distribution_BucketOptions_Linear) GetWidth() float64 { + if m != nil { + return m.Width + } + return 0 +} + +func (m *Distribution_BucketOptions_Linear) GetOffset() float64 { + if m != nil { + return m.Offset + } + return 0 +} + +// Specify a sequence of buckets that have a width that is proportional to +// the value of the lower bound. Each bucket represents a constant relative +// uncertainty on a specific value in the bucket. +// +// Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for +// bucket i: +// +// Upper bound (0 <= i < N-1): scale * (growth_factor ^ i). +// Lower bound (1 <= i < N): scale * (growth_factor ^ (i - 1)). +type Distribution_BucketOptions_Exponential struct { + // Must be greater than 0. + NumFiniteBuckets int32 `protobuf:"varint,1,opt,name=num_finite_buckets,json=numFiniteBuckets" json:"num_finite_buckets,omitempty"` + // Must be greater than 1. + GrowthFactor float64 `protobuf:"fixed64,2,opt,name=growth_factor,json=growthFactor" json:"growth_factor,omitempty"` + // Must be greater than 0. + Scale float64 `protobuf:"fixed64,3,opt,name=scale" json:"scale,omitempty"` +} + +func (m *Distribution_BucketOptions_Exponential) Reset() { + *m = Distribution_BucketOptions_Exponential{} +} +func (m *Distribution_BucketOptions_Exponential) String() string { return proto.CompactTextString(m) } +func (*Distribution_BucketOptions_Exponential) ProtoMessage() {} +func (*Distribution_BucketOptions_Exponential) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 1, 1} +} + +func (m *Distribution_BucketOptions_Exponential) GetNumFiniteBuckets() int32 { + if m != nil { + return m.NumFiniteBuckets + } + return 0 +} + +func (m *Distribution_BucketOptions_Exponential) GetGrowthFactor() float64 { + if m != nil { + return m.GrowthFactor + } + return 0 +} + +func (m *Distribution_BucketOptions_Exponential) GetScale() float64 { + if m != nil { + return m.Scale + } + return 0 +} + +// A set of buckets with arbitrary widths. +// +// Defines `size(bounds) + 1` (= N) buckets with these boundaries for +// bucket i: +// +// Upper bound (0 <= i < N-1): bounds[i] +// Lower bound (1 <= i < N); bounds[i - 1] +// +// There must be at least one element in `bounds`. If `bounds` has only one +// element, there are no finite buckets, and that single element is the +// common boundary of the overflow and underflow buckets. +type Distribution_BucketOptions_Explicit struct { + // The values must be monotonically increasing. + Bounds []float64 `protobuf:"fixed64,1,rep,packed,name=bounds" json:"bounds,omitempty"` +} + +func (m *Distribution_BucketOptions_Explicit) Reset() { *m = Distribution_BucketOptions_Explicit{} } +func (m *Distribution_BucketOptions_Explicit) String() string { return proto.CompactTextString(m) } +func (*Distribution_BucketOptions_Explicit) ProtoMessage() {} +func (*Distribution_BucketOptions_Explicit) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 1, 2} +} + +func (m *Distribution_BucketOptions_Explicit) GetBounds() []float64 { + if m != nil { + return m.Bounds + } + return nil +} + +func init() { + proto.RegisterType((*Distribution)(nil), "google.api.Distribution") + proto.RegisterType((*Distribution_Range)(nil), "google.api.Distribution.Range") + proto.RegisterType((*Distribution_BucketOptions)(nil), "google.api.Distribution.BucketOptions") + proto.RegisterType((*Distribution_BucketOptions_Linear)(nil), "google.api.Distribution.BucketOptions.Linear") + proto.RegisterType((*Distribution_BucketOptions_Exponential)(nil), "google.api.Distribution.BucketOptions.Exponential") + proto.RegisterType((*Distribution_BucketOptions_Explicit)(nil), "google.api.Distribution.BucketOptions.Explicit") +} + +func init() { proto.RegisterFile("google/api/distribution.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 544 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x5d, 0x6f, 0xd3, 0x30, + 0x14, 0x5d, 0x96, 0xb5, 0x85, 0xdb, 0x0f, 0x8a, 0x19, 0x28, 0x44, 0x7c, 0x54, 0x9b, 0x84, 0x2a, + 0x01, 0x89, 0x54, 0x90, 0x78, 0xe0, 0xad, 0x1b, 0x53, 0x1f, 0x40, 0x9b, 0x8c, 0xc4, 0x03, 0x42, + 0x8a, 0x9c, 0xc4, 0xc9, 0x0c, 0x89, 0x1d, 0x62, 0x67, 0x2b, 0xef, 0xfc, 0x29, 0xfe, 0x1d, 0x8a, + 0xed, 0x6e, 0x19, 0x08, 0xa9, 0xbc, 0xf9, 0xde, 0x73, 0x7c, 0xce, 0xb9, 0x57, 0x71, 0xe0, 0x71, + 0x2e, 0x44, 0x5e, 0xd0, 0x90, 0x54, 0x2c, 0x4c, 0x99, 0x54, 0x35, 0x8b, 0x1b, 0xc5, 0x04, 0x0f, + 0xaa, 0x5a, 0x28, 0x81, 0xc0, 0xc0, 0x01, 0xa9, 0x98, 0xff, 0xa8, 0x43, 0x25, 0x9c, 0x0b, 0x45, + 0x5a, 0xa2, 0x34, 0x4c, 0xff, 0xa1, 0x45, 0x75, 0x15, 0x37, 0x59, 0x48, 0xf8, 0x0f, 0x0b, 0x3d, + 0xfd, 0x13, 0x52, 0xac, 0xa4, 0x52, 0x91, 0xb2, 0x32, 0x84, 0x83, 0x9f, 0x03, 0x18, 0x1d, 0x77, + 0xcc, 0xd1, 0x3e, 0xf4, 0x12, 0xd1, 0x70, 0xe5, 0x39, 0x33, 0x67, 0xee, 0x62, 0x53, 0x20, 0x04, + 0x7b, 0x25, 0x25, 0xdc, 0xdb, 0x9d, 0x39, 0x73, 0x07, 0xeb, 0x33, 0x7a, 0x03, 0x9e, 0x6c, 0xca, + 0x48, 0x64, 0x91, 0xfc, 0xde, 0x90, 0x9a, 0xa6, 0x51, 0x4a, 0x2f, 0x98, 0x4e, 0xe6, 0xb9, 0x9a, + 0x77, 0x5f, 0x36, 0xe5, 0x69, 0xf6, 0xd1, 0xa0, 0xc7, 0x1b, 0x10, 0xbd, 0x86, 0x5e, 0x4d, 0x78, + 0x4e, 0xbd, 0xbd, 0x99, 0x33, 0x1f, 0x2e, 0x9e, 0x04, 0xd7, 0x93, 0x06, 0xdd, 0x2c, 0x01, 0x6e, + 0x59, 0xd8, 0x90, 0xd1, 0x07, 0x98, 0xc4, 0x4d, 0xf2, 0x8d, 0xaa, 0x48, 0x54, 0x7a, 0x7a, 0xaf, + 0xaf, 0xaf, 0x3f, 0xfb, 0xe7, 0xf5, 0xa5, 0xa6, 0x9f, 0x1a, 0x36, 0x1e, 0xc7, 0xdd, 0x12, 0x1d, + 0x82, 0x6d, 0x44, 0x7a, 0x42, 0xe9, 0x0d, 0x66, 0xee, 0xdc, 0xc5, 0x23, 0xd3, 0x3c, 0xd2, 0x3d, + 0xff, 0x39, 0xf4, 0x74, 0x06, 0x34, 0x05, 0xb7, 0x64, 0x5c, 0xef, 0xc4, 0xc1, 0xed, 0x51, 0x77, + 0xc8, 0xda, 0x2e, 0xa4, 0x3d, 0xfa, 0xbf, 0xf6, 0x60, 0x7c, 0xc3, 0x12, 0x7d, 0x82, 0x49, 0xc1, + 0x38, 0x25, 0x75, 0x64, 0x54, 0xa5, 0x16, 0x18, 0x2e, 0x5e, 0x6e, 0x17, 0x39, 0x78, 0xaf, 0x2f, + 0xaf, 0x76, 0xf0, 0xd8, 0xc8, 0x18, 0x54, 0x22, 0x0a, 0xf7, 0xe8, 0xba, 0x12, 0x9c, 0x72, 0xc5, + 0x48, 0x71, 0x25, 0xbe, 0xab, 0xc5, 0x17, 0x5b, 0x8a, 0xbf, 0xbb, 0x56, 0x58, 0xed, 0x60, 0xd4, + 0x11, 0xdc, 0xd8, 0x7c, 0x81, 0x29, 0x5d, 0x57, 0x05, 0x4b, 0x98, 0xba, 0xf2, 0x70, 0xb5, 0x47, + 0xb8, 0xbd, 0x87, 0xbe, 0xbe, 0xda, 0xc1, 0x77, 0x36, 0x52, 0x56, 0xdd, 0x4f, 0xa1, 0x6f, 0xe6, + 0x43, 0x2f, 0x00, 0xf1, 0xa6, 0x8c, 0x32, 0xc6, 0x99, 0xa2, 0x37, 0x56, 0xd5, 0xc3, 0x53, 0xde, + 0x94, 0x27, 0x1a, 0xd8, 0xa4, 0xda, 0x87, 0xde, 0x25, 0x4b, 0xd5, 0xb9, 0x5d, 0xbd, 0x29, 0xd0, + 0x03, 0xe8, 0x8b, 0x2c, 0x93, 0x54, 0xd9, 0x4f, 0xcf, 0x56, 0xfe, 0x05, 0x0c, 0x3b, 0x83, 0xfe, + 0xa7, 0xd5, 0x21, 0x8c, 0xf3, 0x5a, 0x5c, 0xaa, 0xf3, 0x28, 0x23, 0x89, 0x12, 0xb5, 0xb5, 0x1c, + 0x99, 0xe6, 0x89, 0xee, 0xb5, 0x79, 0x64, 0x42, 0x0a, 0x6a, 0x8d, 0x4d, 0xe1, 0x1f, 0xc0, 0xad, + 0xcd, 0xf0, 0x6d, 0xb6, 0x58, 0x34, 0x3c, 0x6d, 0x8d, 0xdc, 0x36, 0x9b, 0xa9, 0x96, 0xb7, 0x61, + 0x60, 0x3f, 0xe5, 0xe5, 0x57, 0x98, 0x24, 0xa2, 0xec, 0x6c, 0x75, 0x79, 0xb7, 0xbb, 0xd6, 0xb3, + 0xf6, 0xad, 0x9e, 0x39, 0x9f, 0x8f, 0x2c, 0x21, 0x17, 0x05, 0xe1, 0x79, 0x20, 0xea, 0x3c, 0xcc, + 0x29, 0xd7, 0x2f, 0x39, 0x34, 0x10, 0xa9, 0x98, 0xfc, 0xeb, 0x8f, 0xf2, 0xb6, 0x5b, 0xc4, 0x7d, + 0xcd, 0x7f, 0xf5, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x88, 0x8e, 0xc5, 0x4b, 0x80, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/experimental.pb.go b/vendor/google.golang.org/genproto/googleapis/api/experimental.pb.go new file mode 100644 index 0000000..e3e02e4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/experimental.pb.go @@ -0,0 +1,57 @@ +// Code generated by protoc-gen-go. +// source: google/api/experimental/experimental.proto +// DO NOT EDIT! + +package api + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Experimental service configuration. These configuration options can +// only be used by whitelisted users. +type Experimental struct { + // Authorization configuration. + Authorization *AuthorizationConfig `protobuf:"bytes,8,opt,name=authorization" json:"authorization,omitempty"` +} + +func (m *Experimental) Reset() { *m = Experimental{} } +func (m *Experimental) String() string { return proto.CompactTextString(m) } +func (*Experimental) ProtoMessage() {} +func (*Experimental) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Experimental) GetAuthorization() *AuthorizationConfig { + if m != nil { + return m.Authorization + } + return nil +} + +func init() { + proto.RegisterType((*Experimental)(nil), "google.api.Experimental") +} + +func init() { proto.RegisterFile("google/api/experimental/experimental.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 204 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4a, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xad, 0x28, 0x48, 0x2d, 0xca, 0xcc, 0x4d, 0xcd, + 0x2b, 0x49, 0xcc, 0x41, 0xe1, 0xe8, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0x71, 0x41, 0xd4, 0xea, + 0x25, 0x16, 0x64, 0x4a, 0xc9, 0x20, 0xe9, 0x4b, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, + 0xcf, 0x2b, 0x86, 0xa8, 0x94, 0x32, 0xc2, 0x65, 0x6a, 0x62, 0x69, 0x49, 0x46, 0x7e, 0x51, 0x66, + 0x15, 0x58, 0x75, 0x7c, 0x72, 0x7e, 0x5e, 0x5a, 0x66, 0x3a, 0x44, 0x8f, 0x52, 0x28, 0x17, 0x8f, + 0x2b, 0x92, 0x52, 0x21, 0x57, 0x2e, 0x5e, 0x14, 0xd5, 0x12, 0x1c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, + 0xf2, 0x7a, 0x08, 0x57, 0xe8, 0x39, 0x22, 0x2b, 0x70, 0x06, 0x9b, 0x16, 0x84, 0xaa, 0xcb, 0x29, + 0x9a, 0x8b, 0x2f, 0x39, 0x3f, 0x17, 0x49, 0x93, 0x93, 0x20, 0xb2, 0x35, 0x01, 0x20, 0xbb, 0x03, + 0x18, 0xa3, 0x74, 0xa1, 0x0a, 0xd2, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, + 0xd3, 0x53, 0xf3, 0xc0, 0x2e, 0xd3, 0x87, 0x48, 0x25, 0x16, 0x64, 0x16, 0x83, 0x3c, 0x64, 0x9d, + 0x58, 0x90, 0xb9, 0x88, 0x89, 0xc5, 0xdd, 0x31, 0xc0, 0x33, 0x89, 0x0d, 0xac, 0xc0, 0x18, 0x10, + 0x00, 0x00, 0xff, 0xff, 0xa0, 0x95, 0x20, 0xe5, 0x46, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go b/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go new file mode 100644 index 0000000..96f998d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go @@ -0,0 +1,115 @@ +// Code generated by protoc-gen-go. +// source: google/api/httpbody.proto +// DO NOT EDIT! + +/* +Package httpbody is a generated protocol buffer package. + +It is generated from these files: + google/api/httpbody.proto + +It has these top-level messages: + HttpBody +*/ +package httpbody + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Message that represents an arbitrary HTTP body. It should only be used for +// payload formats that can't be represented as JSON, such as raw binary or +// an HTML page. +// +// +// This message can be used both in streaming and non-streaming API methods in +// the request as well as the response. +// +// It can be used as a top-level request field, which is convenient if one +// wants to extract parameters from either the URL or HTTP template into the +// request fields and also want access to the raw HTTP body. +// +// Example: +// +// message GetResourceRequest { +// // A unique request id. +// string request_id = 1; +// +// // The raw HTTP body is bound to this field. +// google.api.HttpBody http_body = 2; +// } +// +// service ResourceService { +// rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); +// rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); +// } +// +// Example with streaming methods: +// +// service CaldavService { +// rpc GetCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// rpc UpdateCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// } +// +// Use of this type only changes how the request and response bodies are +// handled, all other features will continue to work unchanged. +type HttpBody struct { + // The HTTP Content-Type string representing the content type of the body. + ContentType string `protobuf:"bytes,1,opt,name=content_type,json=contentType" json:"content_type,omitempty"` + // HTTP body binary data. + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *HttpBody) Reset() { *m = HttpBody{} } +func (m *HttpBody) String() string { return proto.CompactTextString(m) } +func (*HttpBody) ProtoMessage() {} +func (*HttpBody) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *HttpBody) GetContentType() string { + if m != nil { + return m.ContentType + } + return "" +} + +func (m *HttpBody) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +func init() { + proto.RegisterType((*HttpBody)(nil), "google.api.HttpBody") +} + +func init() { proto.RegisterFile("google/api/httpbody.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 181 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0xcf, 0x28, 0x29, 0x29, 0x48, 0xca, 0x4f, 0xa9, 0xd4, + 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x82, 0x48, 0xe9, 0x25, 0x16, 0x64, 0x2a, 0x39, 0x72, + 0x71, 0x78, 0x94, 0x94, 0x14, 0x38, 0xe5, 0xa7, 0x54, 0x0a, 0x29, 0x72, 0xf1, 0x24, 0xe7, 0xe7, + 0x95, 0xa4, 0xe6, 0x95, 0xc4, 0x97, 0x54, 0x16, 0xa4, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, + 0x71, 0x43, 0xc5, 0x42, 0x2a, 0x0b, 0x52, 0x85, 0x84, 0xb8, 0x58, 0x52, 0x12, 0x4b, 0x12, 0x25, + 0x98, 0x14, 0x18, 0x35, 0x78, 0x82, 0xc0, 0x6c, 0xa7, 0x54, 0x2e, 0xbe, 0xe4, 0xfc, 0x5c, 0x3d, + 0x84, 0xa1, 0x4e, 0xbc, 0x30, 0x23, 0x03, 0x40, 0xf6, 0x05, 0x30, 0x46, 0x59, 0x43, 0x25, 0xd3, + 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0xae, 0xd1, + 0x87, 0x48, 0x25, 0x16, 0x64, 0x16, 0xa3, 0xb8, 0xd5, 0x1a, 0xc6, 0x58, 0xc4, 0xc4, 0xe2, 0xee, + 0x18, 0xe0, 0x99, 0xc4, 0x06, 0x56, 0x6e, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x0e, 0x3a, 0xdf, + 0x30, 0xd9, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/label/label.pb.go b/vendor/google.golang.org/genproto/googleapis/api/label/label.pb.go new file mode 100644 index 0000000..d0327ab --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/label/label.pb.go @@ -0,0 +1,120 @@ +// Code generated by protoc-gen-go. +// source: google/api/label.proto +// DO NOT EDIT! + +/* +Package label is a generated protocol buffer package. + +It is generated from these files: + google/api/label.proto + +It has these top-level messages: + LabelDescriptor +*/ +package label + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Value types that can be used as label values. +type LabelDescriptor_ValueType int32 + +const ( + // A variable-length string. This is the default. + LabelDescriptor_STRING LabelDescriptor_ValueType = 0 + // Boolean; true or false. + LabelDescriptor_BOOL LabelDescriptor_ValueType = 1 + // A 64-bit signed integer. + LabelDescriptor_INT64 LabelDescriptor_ValueType = 2 +) + +var LabelDescriptor_ValueType_name = map[int32]string{ + 0: "STRING", + 1: "BOOL", + 2: "INT64", +} +var LabelDescriptor_ValueType_value = map[string]int32{ + "STRING": 0, + "BOOL": 1, + "INT64": 2, +} + +func (x LabelDescriptor_ValueType) String() string { + return proto.EnumName(LabelDescriptor_ValueType_name, int32(x)) +} +func (LabelDescriptor_ValueType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// A description of a label. +type LabelDescriptor struct { + // The label key. + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // The type of data that can be assigned to the label. + ValueType LabelDescriptor_ValueType `protobuf:"varint,2,opt,name=value_type,json=valueType,enum=google.api.LabelDescriptor_ValueType" json:"value_type,omitempty"` + // A human-readable description for the label. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *LabelDescriptor) Reset() { *m = LabelDescriptor{} } +func (m *LabelDescriptor) String() string { return proto.CompactTextString(m) } +func (*LabelDescriptor) ProtoMessage() {} +func (*LabelDescriptor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *LabelDescriptor) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *LabelDescriptor) GetValueType() LabelDescriptor_ValueType { + if m != nil { + return m.ValueType + } + return LabelDescriptor_STRING +} + +func (m *LabelDescriptor) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func init() { + proto.RegisterType((*LabelDescriptor)(nil), "google.api.LabelDescriptor") + proto.RegisterEnum("google.api.LabelDescriptor_ValueType", LabelDescriptor_ValueType_name, LabelDescriptor_ValueType_value) +} + +func init() { proto.RegisterFile("google/api/label.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 252 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0xcf, 0x49, 0x4c, 0x4a, 0xcd, 0xd1, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0xe2, 0x82, 0x88, 0xeb, 0x25, 0x16, 0x64, 0x2a, 0xed, 0x64, 0xe4, 0xe2, 0xf7, + 0x01, 0xc9, 0xb9, 0xa4, 0x16, 0x27, 0x17, 0x65, 0x16, 0x94, 0xe4, 0x17, 0x09, 0x09, 0x70, 0x31, + 0x67, 0xa7, 0x56, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x81, 0x98, 0x42, 0x2e, 0x5c, 0x5c, + 0x65, 0x89, 0x39, 0xa5, 0xa9, 0xf1, 0x25, 0x95, 0x05, 0xa9, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0x7c, + 0x46, 0xaa, 0x7a, 0x08, 0x63, 0xf4, 0xd0, 0x8c, 0xd0, 0x0b, 0x03, 0xa9, 0x0e, 0xa9, 0x2c, 0x48, + 0x0d, 0xe2, 0x2c, 0x83, 0x31, 0x85, 0x14, 0xb8, 0xb8, 0x53, 0xa0, 0x4a, 0x32, 0xf3, 0xf3, 0x24, + 0x98, 0xc1, 0xe6, 0x23, 0x0b, 0x29, 0xe9, 0x70, 0x71, 0xc2, 0x75, 0x0a, 0x71, 0x71, 0xb1, 0x05, + 0x87, 0x04, 0x79, 0xfa, 0xb9, 0x0b, 0x30, 0x08, 0x71, 0x70, 0xb1, 0x38, 0xf9, 0xfb, 0xfb, 0x08, + 0x30, 0x0a, 0x71, 0x72, 0xb1, 0x7a, 0xfa, 0x85, 0x98, 0x99, 0x08, 0x30, 0x39, 0xc5, 0x73, 0xf1, + 0x25, 0xe7, 0xe7, 0x22, 0x39, 0xc3, 0x89, 0x0b, 0xec, 0x8e, 0x00, 0x90, 0x2f, 0x03, 0x18, 0xa3, + 0x4c, 0xa1, 0x32, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a, 0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, + 0x79, 0xe0, 0x30, 0xd0, 0x87, 0x48, 0x25, 0x16, 0x64, 0x16, 0x23, 0x82, 0xc7, 0x1a, 0x4c, 0xfe, + 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0xe2, 0xee, 0x18, 0xe0, 0x99, 0xc4, 0x06, 0x56, 0x6b, 0x0c, 0x08, + 0x00, 0x00, 0xff, 0xff, 0x57, 0x04, 0xaa, 0x1f, 0x49, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/metric/metric.pb.go b/vendor/google.golang.org/genproto/googleapis/api/metric/metric.pb.go new file mode 100644 index 0000000..93abe41 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/metric/metric.pb.go @@ -0,0 +1,359 @@ +// Code generated by protoc-gen-go. +// source: google/api/metric.proto +// DO NOT EDIT! + +/* +Package metric is a generated protocol buffer package. + +It is generated from these files: + google/api/metric.proto + +It has these top-level messages: + MetricDescriptor + Metric +*/ +package metric + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_api "google.golang.org/genproto/googleapis/api/label" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The kind of measurement. It describes how the data is reported. +type MetricDescriptor_MetricKind int32 + +const ( + // Do not use this default value. + MetricDescriptor_METRIC_KIND_UNSPECIFIED MetricDescriptor_MetricKind = 0 + // An instantaneous measurement of a value. + MetricDescriptor_GAUGE MetricDescriptor_MetricKind = 1 + // The change in a value during a time interval. + MetricDescriptor_DELTA MetricDescriptor_MetricKind = 2 + // A value accumulated over a time interval. Cumulative + // measurements in a time series should have the same start time + // and increasing end times, until an event resets the cumulative + // value to zero and sets a new start time for the following + // points. + MetricDescriptor_CUMULATIVE MetricDescriptor_MetricKind = 3 +) + +var MetricDescriptor_MetricKind_name = map[int32]string{ + 0: "METRIC_KIND_UNSPECIFIED", + 1: "GAUGE", + 2: "DELTA", + 3: "CUMULATIVE", +} +var MetricDescriptor_MetricKind_value = map[string]int32{ + "METRIC_KIND_UNSPECIFIED": 0, + "GAUGE": 1, + "DELTA": 2, + "CUMULATIVE": 3, +} + +func (x MetricDescriptor_MetricKind) String() string { + return proto.EnumName(MetricDescriptor_MetricKind_name, int32(x)) +} +func (MetricDescriptor_MetricKind) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 0} +} + +// The value type of a metric. +type MetricDescriptor_ValueType int32 + +const ( + // Do not use this default value. + MetricDescriptor_VALUE_TYPE_UNSPECIFIED MetricDescriptor_ValueType = 0 + // The value is a boolean. + // This value type can be used only if the metric kind is `GAUGE`. + MetricDescriptor_BOOL MetricDescriptor_ValueType = 1 + // The value is a signed 64-bit integer. + MetricDescriptor_INT64 MetricDescriptor_ValueType = 2 + // The value is a double precision floating point number. + MetricDescriptor_DOUBLE MetricDescriptor_ValueType = 3 + // The value is a text string. + // This value type can be used only if the metric kind is `GAUGE`. + MetricDescriptor_STRING MetricDescriptor_ValueType = 4 + // The value is a [`Distribution`][google.api.Distribution]. + MetricDescriptor_DISTRIBUTION MetricDescriptor_ValueType = 5 + // The value is money. + MetricDescriptor_MONEY MetricDescriptor_ValueType = 6 +) + +var MetricDescriptor_ValueType_name = map[int32]string{ + 0: "VALUE_TYPE_UNSPECIFIED", + 1: "BOOL", + 2: "INT64", + 3: "DOUBLE", + 4: "STRING", + 5: "DISTRIBUTION", + 6: "MONEY", +} +var MetricDescriptor_ValueType_value = map[string]int32{ + "VALUE_TYPE_UNSPECIFIED": 0, + "BOOL": 1, + "INT64": 2, + "DOUBLE": 3, + "STRING": 4, + "DISTRIBUTION": 5, + "MONEY": 6, +} + +func (x MetricDescriptor_ValueType) String() string { + return proto.EnumName(MetricDescriptor_ValueType_name, int32(x)) +} +func (MetricDescriptor_ValueType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 1} +} + +// Defines a metric type and its schema. Once a metric descriptor is created, +// deleting or altering it stops data collection and makes the metric type's +// existing data unusable. +type MetricDescriptor struct { + // The resource name of the metric descriptor. Depending on the + // implementation, the name typically includes: (1) the parent resource name + // that defines the scope of the metric type or of its data; and (2) the + // metric's URL-encoded type, which also appears in the `type` field of this + // descriptor. For example, following is the resource name of a custom + // metric within the GCP project 123456789: + // + // "projects/123456789/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The metric type, including its DNS name prefix. The type is not + // URL-encoded. All user-defined metric types have the DNS name + // `custom.googleapis.com`. Metric types should use a natural hierarchical + // grouping. For example: + // + // "custom.googleapis.com/invoice/paid/amount" + // "appengine.googleapis.com/http/server/response_latencies" + Type string `protobuf:"bytes,8,opt,name=type" json:"type,omitempty"` + // The set of labels that can be used to describe a specific + // instance of this metric type. For example, the + // `appengine.googleapis.com/http/server/response_latencies` metric + // type has a label for the HTTP response code, `response_code`, so + // you can look at latencies for successful responses or just + // for responses that failed. + Labels []*google_api.LabelDescriptor `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty"` + // Whether the metric records instantaneous values, changes to a value, etc. + // Some combinations of `metric_kind` and `value_type` might not be supported. + MetricKind MetricDescriptor_MetricKind `protobuf:"varint,3,opt,name=metric_kind,json=metricKind,enum=google.api.MetricDescriptor_MetricKind" json:"metric_kind,omitempty"` + // Whether the measurement is an integer, a floating-point number, etc. + // Some combinations of `metric_kind` and `value_type` might not be supported. + ValueType MetricDescriptor_ValueType `protobuf:"varint,4,opt,name=value_type,json=valueType,enum=google.api.MetricDescriptor_ValueType" json:"value_type,omitempty"` + // The unit in which the metric value is reported. It is only applicable + // if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The + // supported units are a subset of [The Unified Code for Units of + // Measure](http://unitsofmeasure.org/ucum.html) standard: + // + // **Basic units (UNIT)** + // + // * `bit` bit + // * `By` byte + // * `s` second + // * `min` minute + // * `h` hour + // * `d` day + // + // **Prefixes (PREFIX)** + // + // * `k` kilo (10**3) + // * `M` mega (10**6) + // * `G` giga (10**9) + // * `T` tera (10**12) + // * `P` peta (10**15) + // * `E` exa (10**18) + // * `Z` zetta (10**21) + // * `Y` yotta (10**24) + // * `m` milli (10**-3) + // * `u` micro (10**-6) + // * `n` nano (10**-9) + // * `p` pico (10**-12) + // * `f` femto (10**-15) + // * `a` atto (10**-18) + // * `z` zepto (10**-21) + // * `y` yocto (10**-24) + // * `Ki` kibi (2**10) + // * `Mi` mebi (2**20) + // * `Gi` gibi (2**30) + // * `Ti` tebi (2**40) + // + // **Grammar** + // + // The grammar includes the dimensionless unit `1`, such as `1/s`. + // + // The grammar also includes these connectors: + // + // * `/` division (as an infix operator, e.g. `1/s`). + // * `.` multiplication (as an infix operator, e.g. `GBy.d`) + // + // The grammar for a unit is as follows: + // + // Expression = Component { "." Component } { "/" Component } ; + // + // Component = [ PREFIX ] UNIT [ Annotation ] + // | Annotation + // | "1" + // ; + // + // Annotation = "{" NAME "}" ; + // + // Notes: + // + // * `Annotation` is just a comment if it follows a `UNIT` and is + // equivalent to `1` if it is used alone. For examples, + // `{requests}/s == 1/s`, `By{transmitted}/s == By/s`. + // * `NAME` is a sequence of non-blank printable ASCII characters not + // containing '{' or '}'. + Unit string `protobuf:"bytes,5,opt,name=unit" json:"unit,omitempty"` + // A detailed description of the metric, which can be used in documentation. + Description string `protobuf:"bytes,6,opt,name=description" json:"description,omitempty"` + // A concise name for the metric, which can be displayed in user interfaces. + // Use sentence case without an ending period, for example "Request count". + DisplayName string `protobuf:"bytes,7,opt,name=display_name,json=displayName" json:"display_name,omitempty"` +} + +func (m *MetricDescriptor) Reset() { *m = MetricDescriptor{} } +func (m *MetricDescriptor) String() string { return proto.CompactTextString(m) } +func (*MetricDescriptor) ProtoMessage() {} +func (*MetricDescriptor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *MetricDescriptor) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *MetricDescriptor) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *MetricDescriptor) GetLabels() []*google_api.LabelDescriptor { + if m != nil { + return m.Labels + } + return nil +} + +func (m *MetricDescriptor) GetMetricKind() MetricDescriptor_MetricKind { + if m != nil { + return m.MetricKind + } + return MetricDescriptor_METRIC_KIND_UNSPECIFIED +} + +func (m *MetricDescriptor) GetValueType() MetricDescriptor_ValueType { + if m != nil { + return m.ValueType + } + return MetricDescriptor_VALUE_TYPE_UNSPECIFIED +} + +func (m *MetricDescriptor) GetUnit() string { + if m != nil { + return m.Unit + } + return "" +} + +func (m *MetricDescriptor) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *MetricDescriptor) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +// A specific metric, identified by specifying values for all of the +// labels of a [`MetricDescriptor`][google.api.MetricDescriptor]. +type Metric struct { + // An existing metric type, see [google.api.MetricDescriptor][google.api.MetricDescriptor]. + // For example, `custom.googleapis.com/invoice/paid/amount`. + Type string `protobuf:"bytes,3,opt,name=type" json:"type,omitempty"` + // The set of label values that uniquely identify this metric. All + // labels listed in the `MetricDescriptor` must be assigned values. + Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Metric) Reset() { *m = Metric{} } +func (m *Metric) String() string { return proto.CompactTextString(m) } +func (*Metric) ProtoMessage() {} +func (*Metric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Metric) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *Metric) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func init() { + proto.RegisterType((*MetricDescriptor)(nil), "google.api.MetricDescriptor") + proto.RegisterType((*Metric)(nil), "google.api.Metric") + proto.RegisterEnum("google.api.MetricDescriptor_MetricKind", MetricDescriptor_MetricKind_name, MetricDescriptor_MetricKind_value) + proto.RegisterEnum("google.api.MetricDescriptor_ValueType", MetricDescriptor_ValueType_name, MetricDescriptor_ValueType_value) +} + +func init() { proto.RegisterFile("google/api/metric.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 506 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0x4d, 0x6f, 0xda, 0x40, + 0x10, 0xad, 0x3f, 0x70, 0xc3, 0x10, 0xa1, 0xd5, 0xaa, 0x4a, 0x2c, 0x22, 0x55, 0x94, 0x43, 0xcb, + 0x09, 0xa4, 0xa4, 0x4a, 0xbf, 0x4e, 0x80, 0xb7, 0xd4, 0x8a, 0xb1, 0x91, 0x63, 0x23, 0xa5, 0x17, + 0xcb, 0x81, 0x95, 0x65, 0xc5, 0xd8, 0xae, 0x71, 0x22, 0xf9, 0x57, 0xf4, 0x17, 0xf4, 0xd2, 0x5f, + 0x5a, 0xed, 0xae, 0x03, 0x16, 0x95, 0x72, 0xe2, 0xed, 0x9b, 0x37, 0x6f, 0x67, 0x96, 0x67, 0x38, + 0x8f, 0xb2, 0x2c, 0x4a, 0xe8, 0x38, 0xcc, 0xe3, 0xf1, 0x96, 0x96, 0x45, 0xbc, 0x1e, 0xe5, 0x45, + 0x56, 0x66, 0x18, 0x44, 0x61, 0x14, 0xe6, 0x71, 0xef, 0xac, 0x21, 0x4a, 0xc2, 0x7b, 0x9a, 0x08, + 0xcd, 0xe0, 0x8f, 0x0a, 0x68, 0xc1, 0x9b, 0x0c, 0xba, 0x5b, 0x17, 0x71, 0x5e, 0x66, 0x05, 0xc6, + 0xa0, 0xa6, 0xe1, 0x96, 0xea, 0x52, 0x5f, 0x1a, 0xb6, 0x5d, 0x8e, 0x19, 0x57, 0x56, 0x39, 0xd5, + 0x4f, 0x04, 0xc7, 0x30, 0xbe, 0x02, 0x8d, 0x7b, 0xed, 0x74, 0xb9, 0xaf, 0x0c, 0x3b, 0x97, 0x17, + 0xa3, 0xc3, 0x8d, 0x23, 0x8b, 0x55, 0x0e, 0xa6, 0x6e, 0x2d, 0xc5, 0x3f, 0xa0, 0x23, 0xa6, 0x0c, + 0x1e, 0xe2, 0x74, 0xa3, 0x2b, 0x7d, 0x69, 0xd8, 0xbd, 0xfc, 0xd0, 0xec, 0x3c, 0x9e, 0xa7, 0x26, + 0x6e, 0xe2, 0x74, 0xe3, 0xc2, 0x76, 0x8f, 0x31, 0x01, 0x78, 0x0a, 0x93, 0x47, 0x1a, 0xf0, 0xc1, + 0x54, 0x6e, 0xf4, 0xfe, 0x45, 0xa3, 0x15, 0x93, 0x7b, 0x55, 0x4e, 0xdd, 0xf6, 0xd3, 0x33, 0x64, + 0x9b, 0x3d, 0xa6, 0x71, 0xa9, 0xb7, 0xc4, 0x66, 0x0c, 0xe3, 0x3e, 0x74, 0x36, 0x75, 0x5b, 0x9c, + 0xa5, 0xba, 0xc6, 0x4b, 0x4d, 0x0a, 0xbf, 0x83, 0xd3, 0x4d, 0xbc, 0xcb, 0x93, 0xb0, 0x0a, 0xf8, + 0x5b, 0xbd, 0xae, 0x25, 0x82, 0xb3, 0xc3, 0x2d, 0x1d, 0x38, 0x00, 0x87, 0xc9, 0xf1, 0x05, 0x9c, + 0x2f, 0x88, 0xe7, 0x9a, 0xb3, 0xe0, 0xc6, 0xb4, 0x8d, 0xc0, 0xb7, 0x6f, 0x97, 0x64, 0x66, 0x7e, + 0x37, 0x89, 0x81, 0x5e, 0xe1, 0x36, 0xb4, 0xe6, 0x13, 0x7f, 0x4e, 0x90, 0xc4, 0xa0, 0x41, 0x2c, + 0x6f, 0x82, 0x64, 0xdc, 0x05, 0x98, 0xf9, 0x0b, 0xdf, 0x9a, 0x78, 0xe6, 0x8a, 0x20, 0x65, 0xf0, + 0x0b, 0xda, 0xfb, 0x0d, 0x70, 0x0f, 0xce, 0x56, 0x13, 0xcb, 0x27, 0x81, 0x77, 0xb7, 0x24, 0x47, + 0x76, 0x27, 0xa0, 0x4e, 0x1d, 0xc7, 0x12, 0x6e, 0xa6, 0xed, 0x5d, 0x7f, 0x44, 0x32, 0x06, 0xd0, + 0x0c, 0xc7, 0x9f, 0x5a, 0x04, 0x29, 0x0c, 0xdf, 0x7a, 0xae, 0x69, 0xcf, 0x91, 0x8a, 0x11, 0x9c, + 0x1a, 0x26, 0x3b, 0x4d, 0x7d, 0xcf, 0x74, 0x6c, 0xd4, 0x62, 0x4d, 0x0b, 0xc7, 0x26, 0x77, 0x48, + 0x1b, 0xfc, 0x96, 0x40, 0x13, 0x4b, 0xec, 0x13, 0xa0, 0x34, 0x12, 0x70, 0x7d, 0x94, 0x80, 0xb7, + 0xff, 0x3f, 0xbf, 0x08, 0xc2, 0x8e, 0xa4, 0x65, 0x51, 0x3d, 0x87, 0xa0, 0xf7, 0x05, 0x3a, 0x0d, + 0x1a, 0x23, 0x50, 0x1e, 0x68, 0x55, 0xe7, 0x8d, 0x41, 0xfc, 0x06, 0x5a, 0xfc, 0x1f, 0xd2, 0x65, + 0xce, 0x89, 0xc3, 0x57, 0xf9, 0xb3, 0x34, 0x0d, 0xa0, 0xbb, 0xce, 0xb6, 0x8d, 0x7b, 0xa6, 0x1d, + 0x71, 0xd1, 0x92, 0x05, 0x7a, 0x29, 0xfd, 0xfc, 0x54, 0x97, 0xa2, 0x2c, 0x09, 0xd3, 0x68, 0x94, + 0x15, 0xd1, 0x38, 0xa2, 0x29, 0x8f, 0xfb, 0x58, 0x94, 0xc2, 0x3c, 0xde, 0x35, 0x3e, 0x97, 0x6f, + 0xe2, 0xe7, 0xaf, 0xac, 0xce, 0x27, 0x4b, 0xf3, 0x5e, 0xe3, 0xd2, 0xab, 0x7f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x18, 0x04, 0x05, 0x82, 0x58, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/monitoredres/monitored_resource.pb.go b/vendor/google.golang.org/genproto/googleapis/api/monitoredres/monitored_resource.pb.go new file mode 100644 index 0000000..9ceb24b --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/monitoredres/monitored_resource.pb.go @@ -0,0 +1,181 @@ +// Code generated by protoc-gen-go. +// source: google/api/monitored_resource.proto +// DO NOT EDIT! + +/* +Package monitoredres is a generated protocol buffer package. + +It is generated from these files: + google/api/monitored_resource.proto + +It has these top-level messages: + MonitoredResourceDescriptor + MonitoredResource +*/ +package monitoredres + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_api "google.golang.org/genproto/googleapis/api/label" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// An object that describes the schema of a [MonitoredResource][google.api.MonitoredResource] object using a +// type name and a set of labels. For example, the monitored resource +// descriptor for Google Compute Engine VM instances has a type of +// `"gce_instance"` and specifies the use of the labels `"instance_id"` and +// `"zone"` to identify particular VM instances. +// +// Different APIs can support different monitored resource types. APIs generally +// provide a `list` method that returns the monitored resource descriptors used +// by the API. +type MonitoredResourceDescriptor struct { + // Optional. The resource name of the monitored resource descriptor: + // `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where + // {type} is the value of the `type` field in this object and + // {project_id} is a project ID that provides API-specific context for + // accessing the type. APIs that do not use project information can use the + // resource name format `"monitoredResourceDescriptors/{type}"`. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` + // Required. The monitored resource type. For example, the type + // `"cloudsql_database"` represents databases in Google Cloud SQL. + // The maximum length of this value is 256 characters. + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + // Optional. A concise name for the monitored resource type that might be + // displayed in user interfaces. It should be a Title Cased Noun Phrase, + // without any article or other determiners. For example, + // `"Google Cloud SQL Database"`. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Optional. A detailed description of the monitored resource type that might + // be used in documentation. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // Required. A set of labels used to describe instances of this monitored + // resource type. For example, an individual Google Cloud SQL database is + // identified by values for the labels `"database_id"` and `"zone"`. + Labels []*google_api.LabelDescriptor `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty"` +} + +func (m *MonitoredResourceDescriptor) Reset() { *m = MonitoredResourceDescriptor{} } +func (m *MonitoredResourceDescriptor) String() string { return proto.CompactTextString(m) } +func (*MonitoredResourceDescriptor) ProtoMessage() {} +func (*MonitoredResourceDescriptor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *MonitoredResourceDescriptor) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *MonitoredResourceDescriptor) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *MonitoredResourceDescriptor) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *MonitoredResourceDescriptor) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *MonitoredResourceDescriptor) GetLabels() []*google_api.LabelDescriptor { + if m != nil { + return m.Labels + } + return nil +} + +// An object representing a resource that can be used for monitoring, logging, +// billing, or other purposes. Examples include virtual machine instances, +// databases, and storage devices such as disks. The `type` field identifies a +// [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor] object that describes the resource's +// schema. Information in the `labels` field identifies the actual resource and +// its attributes according to the schema. For example, a particular Compute +// Engine VM instance could be represented by the following object, because the +// [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor] for `"gce_instance"` has labels +// `"instance_id"` and `"zone"`: +// +// { "type": "gce_instance", +// "labels": { "instance_id": "12345678901234", +// "zone": "us-central1-a" }} +type MonitoredResource struct { + // Required. The monitored resource type. This field must match + // the `type` field of a [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor] object. For + // example, the type of a Cloud SQL database is `"cloudsql_database"`. + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + // Required. Values for all of the labels listed in the associated monitored + // resource descriptor. For example, Cloud SQL databases use the labels + // `"database_id"` and `"zone"`. + Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *MonitoredResource) Reset() { *m = MonitoredResource{} } +func (m *MonitoredResource) String() string { return proto.CompactTextString(m) } +func (*MonitoredResource) ProtoMessage() {} +func (*MonitoredResource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *MonitoredResource) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *MonitoredResource) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func init() { + proto.RegisterType((*MonitoredResourceDescriptor)(nil), "google.api.MonitoredResourceDescriptor") + proto.RegisterType((*MonitoredResource)(nil), "google.api.MonitoredResource") +} + +func init() { proto.RegisterFile("google/api/monitored_resource.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 321 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x51, 0x4b, 0x4b, 0x3b, 0x31, + 0x10, 0x27, 0xdb, 0x07, 0xfc, 0x67, 0xff, 0x88, 0x06, 0x29, 0x4b, 0x7b, 0xa9, 0xf5, 0x52, 0x2f, + 0xbb, 0x60, 0x2f, 0x3e, 0x4e, 0xad, 0x8a, 0x08, 0x2a, 0xa5, 0x47, 0x2f, 0x25, 0x6d, 0xc3, 0x12, + 0xdc, 0x66, 0x42, 0xb2, 0x15, 0xf6, 0xeb, 0x08, 0x7e, 0x0e, 0xbf, 0x96, 0x47, 0xc9, 0xa3, 0x76, + 0xa5, 0xde, 0x26, 0xbf, 0xf9, 0x3d, 0x66, 0x32, 0x70, 0x9a, 0x23, 0xe6, 0x05, 0xcf, 0x98, 0x12, + 0xd9, 0x1a, 0xa5, 0x28, 0x51, 0xf3, 0xd5, 0x5c, 0x73, 0x83, 0x1b, 0xbd, 0xe4, 0xa9, 0xd2, 0x58, + 0x22, 0x05, 0x4f, 0x4a, 0x99, 0x12, 0xdd, 0x4e, 0x4d, 0x50, 0xb0, 0x05, 0x2f, 0x3c, 0x67, 0xf0, + 0x49, 0xa0, 0xf7, 0xb4, 0x35, 0x98, 0x05, 0xfd, 0x2d, 0x37, 0x4b, 0x2d, 0x54, 0x89, 0x9a, 0x52, + 0x68, 0x4a, 0xb6, 0xe6, 0x49, 0xab, 0x4f, 0x86, 0xff, 0x66, 0xae, 0xb6, 0x58, 0x59, 0x29, 0x9e, + 0x10, 0x8f, 0xd9, 0x9a, 0x9e, 0xc0, 0xff, 0x95, 0x30, 0xaa, 0x60, 0xd5, 0xdc, 0xf1, 0x23, 0xd7, + 0x8b, 0x03, 0xf6, 0x6c, 0x65, 0x7d, 0x88, 0x57, 0xc1, 0x58, 0xa0, 0x4c, 0x1a, 0x81, 0xb1, 0x83, + 0xe8, 0x08, 0xda, 0x6e, 0x36, 0x93, 0x34, 0xfb, 0x8d, 0x61, 0x7c, 0xde, 0x4b, 0x77, 0x1b, 0xa4, + 0x8f, 0xb6, 0xb3, 0x9b, 0x6c, 0x16, 0xa8, 0x83, 0x0f, 0x02, 0x47, 0x7b, 0x1b, 0xfc, 0x39, 0xe3, + 0xf8, 0xc7, 0x3e, 0x72, 0xf6, 0x67, 0x75, 0xfb, 0x3d, 0x0b, 0x1f, 0x68, 0xee, 0x64, 0xa9, 0xab, + 0x6d, 0x58, 0xf7, 0x12, 0xe2, 0x1a, 0x4c, 0x0f, 0xa1, 0xf1, 0xca, 0xab, 0x10, 0x62, 0x4b, 0x7a, + 0x0c, 0xad, 0x37, 0x56, 0x6c, 0xb6, 0x1f, 0xe0, 0x1f, 0x57, 0xd1, 0x05, 0x99, 0x54, 0x70, 0xb0, + 0xc4, 0x75, 0x2d, 0x72, 0xd2, 0xd9, 0xcb, 0x9c, 0xda, 0x9b, 0x4c, 0xc9, 0xcb, 0x4d, 0x60, 0xe5, + 0x58, 0x30, 0x99, 0xa7, 0xa8, 0xf3, 0x2c, 0xe7, 0xd2, 0x5d, 0x2c, 0xf3, 0x2d, 0xa6, 0x84, 0xf9, + 0x7d, 0x7d, 0xcd, 0xcd, 0x75, 0xfd, 0xf1, 0x45, 0xc8, 0x7b, 0xd4, 0xbc, 0x1f, 0x4f, 0x1f, 0x16, + 0x6d, 0xa7, 0x1c, 0x7d, 0x07, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xfb, 0xfb, 0x11, 0x36, 0x02, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/auth.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/auth.pb.go new file mode 100644 index 0000000..6db5ec4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/auth.pb.go @@ -0,0 +1,376 @@ +// Code generated by protoc-gen-go. +// source: google/api/auth.proto +// DO NOT EDIT! + +/* +Package serviceconfig is a generated protocol buffer package. + +It is generated from these files: + google/api/auth.proto + google/api/backend.proto + google/api/billing.proto + google/api/consumer.proto + google/api/context.proto + google/api/control.proto + google/api/documentation.proto + google/api/endpoint.proto + google/api/log.proto + google/api/logging.proto + google/api/monitoring.proto + google/api/service.proto + google/api/system_parameter.proto + google/api/usage.proto + +It has these top-level messages: + Authentication + AuthenticationRule + AuthProvider + OAuthRequirements + AuthRequirement + Backend + BackendRule + Billing + BillingStatusRule + ProjectProperties + Property + Context + ContextRule + Control + Documentation + DocumentationRule + Page + Endpoint + LogDescriptor + Logging + Monitoring + Service + SystemParameters + SystemParameterRule + SystemParameter + Usage + UsageRule +*/ +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// `Authentication` defines the authentication configuration for an API. +// +// Example for an API targeted for external use: +// +// name: calendar.googleapis.com +// authentication: +// providers: +// - id: google_calendar_auth +// jwks_uri: https://www.googleapis.com/oauth2/v1/certs +// issuer: https://securetoken.google.com +// rules: +// - selector: "*" +// requirements: +// provider_id: google_calendar_auth +type Authentication struct { + // A list of authentication rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + Rules []*AuthenticationRule `protobuf:"bytes,3,rep,name=rules" json:"rules,omitempty"` + // Defines a set of authentication providers that a service supports. + Providers []*AuthProvider `protobuf:"bytes,4,rep,name=providers" json:"providers,omitempty"` +} + +func (m *Authentication) Reset() { *m = Authentication{} } +func (m *Authentication) String() string { return proto.CompactTextString(m) } +func (*Authentication) ProtoMessage() {} +func (*Authentication) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Authentication) GetRules() []*AuthenticationRule { + if m != nil { + return m.Rules + } + return nil +} + +func (m *Authentication) GetProviders() []*AuthProvider { + if m != nil { + return m.Providers + } + return nil +} + +// Authentication rules for the service. +// +// By default, if a method has any authentication requirements, every request +// must include a valid credential matching one of the requirements. +// It's an error to include more than one kind of credential in a single +// request. +// +// If a method doesn't have any auth requirements, request credentials will be +// ignored. +type AuthenticationRule struct { + // Selects the methods to which this rule applies. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` + // The requirements for OAuth credentials. + Oauth *OAuthRequirements `protobuf:"bytes,2,opt,name=oauth" json:"oauth,omitempty"` + // Whether to allow requests without a credential. The credential can be + // an OAuth token, Google cookies (first-party auth) or EndUserCreds. + // + // For requests without credentials, if the service control environment is + // specified, each incoming request **must** be associated with a service + // consumer. This can be done by passing an API key that belongs to a consumer + // project. + AllowWithoutCredential bool `protobuf:"varint,5,opt,name=allow_without_credential,json=allowWithoutCredential" json:"allow_without_credential,omitempty"` + // Requirements for additional authentication providers. + Requirements []*AuthRequirement `protobuf:"bytes,7,rep,name=requirements" json:"requirements,omitempty"` +} + +func (m *AuthenticationRule) Reset() { *m = AuthenticationRule{} } +func (m *AuthenticationRule) String() string { return proto.CompactTextString(m) } +func (*AuthenticationRule) ProtoMessage() {} +func (*AuthenticationRule) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *AuthenticationRule) GetSelector() string { + if m != nil { + return m.Selector + } + return "" +} + +func (m *AuthenticationRule) GetOauth() *OAuthRequirements { + if m != nil { + return m.Oauth + } + return nil +} + +func (m *AuthenticationRule) GetAllowWithoutCredential() bool { + if m != nil { + return m.AllowWithoutCredential + } + return false +} + +func (m *AuthenticationRule) GetRequirements() []*AuthRequirement { + if m != nil { + return m.Requirements + } + return nil +} + +// Configuration for an anthentication provider, including support for +// [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32). +type AuthProvider struct { + // The unique identifier of the auth provider. It will be referred to by + // `AuthRequirement.provider_id`. + // + // Example: "bookstore_auth". + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // Identifies the principal that issued the JWT. See + // https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1 + // Usually a URL or an email address. + // + // Example: https://securetoken.google.com + // Example: 1234567-compute@developer.gserviceaccount.com + Issuer string `protobuf:"bytes,2,opt,name=issuer" json:"issuer,omitempty"` + // URL of the provider's public key set to validate signature of the JWT. See + // [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata). + // Optional if the key set document: + // - can be retrieved from + // [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html + // of the issuer. + // - can be inferred from the email domain of the issuer (e.g. a Google service account). + // + // Example: https://www.googleapis.com/oauth2/v1/certs + JwksUri string `protobuf:"bytes,3,opt,name=jwks_uri,json=jwksUri" json:"jwks_uri,omitempty"` + // The list of JWT + // [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). + // that are allowed to access. A JWT containing any of these audiences will + // be accepted. When this setting is absent, only JWTs with audience + // "https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]" + // will be accepted. For example, if no audiences are in the setting, + // LibraryService API will only accept JWTs with the following audience + // "https://library-example.googleapis.com/google.example.library.v1.LibraryService". + // + // Example: + // + // audiences: bookstore_android.apps.googleusercontent.com, + // bookstore_web.apps.googleusercontent.com + Audiences string `protobuf:"bytes,4,opt,name=audiences" json:"audiences,omitempty"` +} + +func (m *AuthProvider) Reset() { *m = AuthProvider{} } +func (m *AuthProvider) String() string { return proto.CompactTextString(m) } +func (*AuthProvider) ProtoMessage() {} +func (*AuthProvider) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *AuthProvider) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *AuthProvider) GetIssuer() string { + if m != nil { + return m.Issuer + } + return "" +} + +func (m *AuthProvider) GetJwksUri() string { + if m != nil { + return m.JwksUri + } + return "" +} + +func (m *AuthProvider) GetAudiences() string { + if m != nil { + return m.Audiences + } + return "" +} + +// OAuth scopes are a way to define data and permissions on data. For example, +// there are scopes defined for "Read-only access to Google Calendar" and +// "Access to Cloud Platform". Users can consent to a scope for an application, +// giving it permission to access that data on their behalf. +// +// OAuth scope specifications should be fairly coarse grained; a user will need +// to see and understand the text description of what your scope means. +// +// In most cases: use one or at most two OAuth scopes for an entire family of +// products. If your product has multiple APIs, you should probably be sharing +// the OAuth scope across all of those APIs. +// +// When you need finer grained OAuth consent screens: talk with your product +// management about how developers will use them in practice. +// +// Please note that even though each of the canonical scopes is enough for a +// request to be accepted and passed to the backend, a request can still fail +// due to the backend requiring additional scopes or permissions. +type OAuthRequirements struct { + // The list of publicly documented OAuth scopes that are allowed access. An + // OAuth token containing any of these scopes will be accepted. + // + // Example: + // + // canonical_scopes: https://www.googleapis.com/auth/calendar, + // https://www.googleapis.com/auth/calendar.read + CanonicalScopes string `protobuf:"bytes,1,opt,name=canonical_scopes,json=canonicalScopes" json:"canonical_scopes,omitempty"` +} + +func (m *OAuthRequirements) Reset() { *m = OAuthRequirements{} } +func (m *OAuthRequirements) String() string { return proto.CompactTextString(m) } +func (*OAuthRequirements) ProtoMessage() {} +func (*OAuthRequirements) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *OAuthRequirements) GetCanonicalScopes() string { + if m != nil { + return m.CanonicalScopes + } + return "" +} + +// User-defined authentication requirements, including support for +// [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32). +type AuthRequirement struct { + // [id][google.api.AuthProvider.id] from authentication provider. + // + // Example: + // + // provider_id: bookstore_auth + ProviderId string `protobuf:"bytes,1,opt,name=provider_id,json=providerId" json:"provider_id,omitempty"` + // NOTE: This will be deprecated soon, once AuthProvider.audiences is + // implemented and accepted in all the runtime components. + // + // The list of JWT + // [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). + // that are allowed to access. A JWT containing any of these audiences will + // be accepted. When this setting is absent, only JWTs with audience + // "https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]" + // will be accepted. For example, if no audiences are in the setting, + // LibraryService API will only accept JWTs with the following audience + // "https://library-example.googleapis.com/google.example.library.v1.LibraryService". + // + // Example: + // + // audiences: bookstore_android.apps.googleusercontent.com, + // bookstore_web.apps.googleusercontent.com + Audiences string `protobuf:"bytes,2,opt,name=audiences" json:"audiences,omitempty"` +} + +func (m *AuthRequirement) Reset() { *m = AuthRequirement{} } +func (m *AuthRequirement) String() string { return proto.CompactTextString(m) } +func (*AuthRequirement) ProtoMessage() {} +func (*AuthRequirement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *AuthRequirement) GetProviderId() string { + if m != nil { + return m.ProviderId + } + return "" +} + +func (m *AuthRequirement) GetAudiences() string { + if m != nil { + return m.Audiences + } + return "" +} + +func init() { + proto.RegisterType((*Authentication)(nil), "google.api.Authentication") + proto.RegisterType((*AuthenticationRule)(nil), "google.api.AuthenticationRule") + proto.RegisterType((*AuthProvider)(nil), "google.api.AuthProvider") + proto.RegisterType((*OAuthRequirements)(nil), "google.api.OAuthRequirements") + proto.RegisterType((*AuthRequirement)(nil), "google.api.AuthRequirement") +} + +func init() { proto.RegisterFile("google/api/auth.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 437 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x52, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0x96, 0x9d, 0xa6, 0x8d, 0x27, 0x55, 0x0a, 0x2b, 0x51, 0x99, 0x52, 0x20, 0xf2, 0x29, 0x5c, + 0x1c, 0xa9, 0x45, 0x08, 0x09, 0x09, 0xd4, 0x22, 0x84, 0x7a, 0x22, 0x32, 0x42, 0x48, 0x5c, 0xac, + 0x65, 0x3d, 0x38, 0x4b, 0xdd, 0x1d, 0xb3, 0x3f, 0xcd, 0x8d, 0x87, 0xe1, 0xc9, 0x78, 0x94, 0xca, + 0x6b, 0x37, 0x71, 0xd2, 0xe3, 0x7c, 0x3f, 0x33, 0xf3, 0xcd, 0x2e, 0x3c, 0x29, 0x89, 0xca, 0x0a, + 0xe7, 0xbc, 0x96, 0x73, 0xee, 0xec, 0x32, 0xad, 0x35, 0x59, 0x62, 0xd0, 0xc2, 0x29, 0xaf, 0xe5, + 0xc9, 0x69, 0x5f, 0xa2, 0x14, 0x59, 0x6e, 0x25, 0x29, 0xd3, 0x2a, 0x93, 0xbf, 0x30, 0xb9, 0x70, + 0x76, 0x89, 0xca, 0x4a, 0xe1, 0x09, 0xf6, 0x1a, 0x86, 0xda, 0x55, 0x68, 0xe2, 0xc1, 0x74, 0x30, + 0x1b, 0x9f, 0xbd, 0x48, 0x37, 0xbd, 0xd2, 0x6d, 0x69, 0xe6, 0x2a, 0xcc, 0x5a, 0x31, 0x7b, 0x03, + 0x51, 0xad, 0xe9, 0x56, 0x16, 0xa8, 0x4d, 0xbc, 0xe7, 0x9d, 0xf1, 0xae, 0x73, 0xd1, 0x09, 0xb2, + 0x8d, 0x34, 0xf9, 0x1f, 0x00, 0x7b, 0xd8, 0x95, 0x9d, 0xc0, 0xc8, 0x60, 0x85, 0xc2, 0x92, 0x8e, + 0x83, 0x69, 0x30, 0x8b, 0xb2, 0x75, 0xcd, 0xce, 0x61, 0x48, 0x4d, 0xd6, 0x38, 0x9c, 0x06, 0xb3, + 0xf1, 0xd9, 0xf3, 0xfe, 0x98, 0x2f, 0x4d, 0xaf, 0x0c, 0xff, 0x38, 0xa9, 0xf1, 0x06, 0x95, 0x35, + 0x59, 0xab, 0x65, 0x6f, 0x21, 0xe6, 0x55, 0x45, 0xab, 0x7c, 0x25, 0xed, 0x92, 0x9c, 0xcd, 0x85, + 0xc6, 0xa2, 0x19, 0xca, 0xab, 0x78, 0x38, 0x0d, 0x66, 0xa3, 0xec, 0xd8, 0xf3, 0xdf, 0x5b, 0xfa, + 0xe3, 0x9a, 0x65, 0x1f, 0xe0, 0x50, 0xf7, 0x1a, 0xc6, 0x07, 0x3e, 0xdc, 0xb3, 0xdd, 0x70, 0xbd, + 0xa1, 0xd9, 0x96, 0x21, 0x21, 0x38, 0xec, 0xa7, 0x67, 0x13, 0x08, 0x65, 0xd1, 0xa5, 0x0a, 0x65, + 0xc1, 0x8e, 0x61, 0x5f, 0x1a, 0xe3, 0x50, 0xfb, 0x40, 0x51, 0xd6, 0x55, 0xec, 0x29, 0x8c, 0x7e, + 0xaf, 0xae, 0x4d, 0xee, 0xb4, 0x8c, 0x07, 0x9e, 0x39, 0x68, 0xea, 0x6f, 0x5a, 0xb2, 0x53, 0x88, + 0xb8, 0x2b, 0x24, 0x2a, 0x81, 0xcd, 0xb5, 0x1b, 0x6e, 0x03, 0x24, 0xef, 0xe1, 0xf1, 0x83, 0x3b, + 0xb0, 0x57, 0xf0, 0x48, 0x70, 0x45, 0x4a, 0x0a, 0x5e, 0xe5, 0x46, 0x50, 0x8d, 0xa6, 0xdb, 0xe1, + 0x68, 0x8d, 0x7f, 0xf5, 0x70, 0xb2, 0x80, 0xa3, 0x1d, 0x3b, 0x7b, 0x09, 0xe3, 0xfb, 0x37, 0xcb, + 0xd7, 0xcb, 0xc3, 0x3d, 0x74, 0x55, 0x6c, 0x6f, 0x14, 0xee, 0x6c, 0x74, 0x79, 0x0d, 0x13, 0x41, + 0x37, 0xbd, 0x93, 0x5d, 0x46, 0xdd, 0x49, 0x2c, 0x2d, 0x82, 0x1f, 0x9f, 0x3a, 0xa2, 0xa4, 0x8a, + 0xab, 0x32, 0x25, 0x5d, 0xce, 0x4b, 0x54, 0xfe, 0x83, 0xce, 0x5b, 0x8a, 0xd7, 0xd2, 0xf8, 0x1f, + 0x6c, 0x50, 0xdf, 0x4a, 0x81, 0x82, 0xd4, 0x2f, 0x59, 0xbe, 0xdb, 0xaa, 0xfe, 0x85, 0x7b, 0x9f, + 0x2f, 0x16, 0x57, 0x3f, 0xf7, 0xbd, 0xf1, 0xfc, 0x2e, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x6d, 0xc6, + 0x5e, 0x1c, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/backend.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/backend.pb.go new file mode 100644 index 0000000..5054353 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/backend.pb.go @@ -0,0 +1,99 @@ +// Code generated by protoc-gen-go. +// source: google/api/backend.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `Backend` defines the backend configuration for a service. +type Backend struct { + // A list of API backend rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + Rules []*BackendRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` +} + +func (m *Backend) Reset() { *m = Backend{} } +func (m *Backend) String() string { return proto.CompactTextString(m) } +func (*Backend) ProtoMessage() {} +func (*Backend) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Backend) GetRules() []*BackendRule { + if m != nil { + return m.Rules + } + return nil +} + +// A backend rule provides configuration for an individual API element. +type BackendRule struct { + // Selects the methods to which this rule applies. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` + // The address of the API backend. + Address string `protobuf:"bytes,2,opt,name=address" json:"address,omitempty"` + // The number of seconds to wait for a response from a request. The + // default depends on the deployment context. + Deadline float64 `protobuf:"fixed64,3,opt,name=deadline" json:"deadline,omitempty"` +} + +func (m *BackendRule) Reset() { *m = BackendRule{} } +func (m *BackendRule) String() string { return proto.CompactTextString(m) } +func (*BackendRule) ProtoMessage() {} +func (*BackendRule) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *BackendRule) GetSelector() string { + if m != nil { + return m.Selector + } + return "" +} + +func (m *BackendRule) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *BackendRule) GetDeadline() float64 { + if m != nil { + return m.Deadline + } + return 0 +} + +func init() { + proto.RegisterType((*Backend)(nil), "google.api.Backend") + proto.RegisterType((*BackendRule)(nil), "google.api.BackendRule") +} + +func init() { proto.RegisterFile("google/api/backend.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 227 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0x31, 0x4f, 0x03, 0x21, + 0x18, 0x86, 0x43, 0xab, 0x56, 0xbf, 0x1a, 0x87, 0x5b, 0x24, 0x4e, 0x97, 0x4e, 0xb7, 0xc8, 0x25, + 0xba, 0x98, 0x38, 0x79, 0x89, 0x31, 0x6e, 0x17, 0x46, 0x17, 0x43, 0xe1, 0x93, 0x10, 0x91, 0x8f, + 0x40, 0xeb, 0x0f, 0xf2, 0x97, 0x9a, 0xc2, 0x59, 0xdb, 0xf1, 0xe1, 0x79, 0xdf, 0xc0, 0x0b, 0x70, + 0x4b, 0x64, 0x3d, 0xf6, 0x2a, 0xba, 0x7e, 0xad, 0xf4, 0x27, 0x06, 0x23, 0x62, 0xa2, 0x0d, 0x35, + 0x50, 0x8d, 0x50, 0xd1, 0xad, 0x1e, 0x60, 0x31, 0x54, 0xd9, 0xdc, 0xc2, 0x69, 0xda, 0x7a, 0xcc, + 0x9c, 0xb5, 0xf3, 0x6e, 0x79, 0x77, 0x2d, 0xfe, 0x63, 0x62, 0xca, 0xc8, 0xad, 0x47, 0x59, 0x53, + 0xab, 0x77, 0x58, 0x1e, 0x9c, 0x36, 0x37, 0x70, 0x9e, 0xd1, 0xa3, 0xde, 0x50, 0xe2, 0xac, 0x65, + 0xdd, 0x85, 0xdc, 0x73, 0xc3, 0x61, 0xa1, 0x8c, 0x49, 0x98, 0x33, 0x9f, 0x15, 0xf5, 0x87, 0xbb, + 0x96, 0x41, 0x65, 0xbc, 0x0b, 0xc8, 0xe7, 0x2d, 0xeb, 0x98, 0xdc, 0xf3, 0x10, 0xe0, 0x4a, 0xd3, + 0xd7, 0xc1, 0x2b, 0x86, 0xcb, 0xe9, 0xc2, 0x71, 0x37, 0x63, 0x64, 0x6f, 0xcf, 0x93, 0xb3, 0xe4, + 0x55, 0xb0, 0x82, 0x92, 0xed, 0x2d, 0x86, 0x32, 0xb2, 0xaf, 0x4a, 0x45, 0x97, 0xcb, 0x0f, 0x64, + 0x4c, 0xdf, 0x4e, 0xa3, 0xa6, 0xf0, 0xe1, 0xec, 0xe3, 0x11, 0xfd, 0xcc, 0x4e, 0x5e, 0x9e, 0xc6, + 0xd7, 0xf5, 0x59, 0x29, 0xde, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x93, 0x9e, 0x00, 0x39, + 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/billing.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/billing.pb.go new file mode 100644 index 0000000..2c43eaf --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/billing.pb.go @@ -0,0 +1,151 @@ +// Code generated by protoc-gen-go. +// source: google/api/billing.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/metric" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Billing related configuration of the service. +// +// The following example shows how to configure metrics for billing: +// +// metrics: +// - name: library.googleapis.com/read_calls +// metric_kind: DELTA +// value_type: INT64 +// - name: library.googleapis.com/write_calls +// metric_kind: DELTA +// value_type: INT64 +// billing: +// metrics: +// - library.googleapis.com/read_calls +// - library.googleapis.com/write_calls +// +// The next example shows how to enable billing status check and customize the +// check behavior. It makes sure billing status check is included in the `Check` +// method of [Service Control API](https://cloud.google.com/service-control/). +// In the example, "google.storage.Get" method can be served when the billing +// status is either `current` or `delinquent`, while "google.storage.Write" +// method can only be served when the billing status is `current`: +// +// billing: +// rules: +// - selector: google.storage.Get +// allowed_statuses: +// - current +// - delinquent +// - selector: google.storage.Write +// allowed_statuses: current +// +// Mostly services should only allow `current` status when serving requests. +// In addition, services can choose to allow both `current` and `delinquent` +// statuses when serving read-only requests to resources. If there's no +// matching selector for operation, no billing status check will be performed. +// +type Billing struct { + // Names of the metrics to report to billing. Each name must + // be defined in [Service.metrics][google.api.Service.metrics] section. + Metrics []string `protobuf:"bytes,1,rep,name=metrics" json:"metrics,omitempty"` + // A list of billing status rules for configuring billing status check. + Rules []*BillingStatusRule `protobuf:"bytes,5,rep,name=rules" json:"rules,omitempty"` +} + +func (m *Billing) Reset() { *m = Billing{} } +func (m *Billing) String() string { return proto.CompactTextString(m) } +func (*Billing) ProtoMessage() {} +func (*Billing) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *Billing) GetMetrics() []string { + if m != nil { + return m.Metrics + } + return nil +} + +func (m *Billing) GetRules() []*BillingStatusRule { + if m != nil { + return m.Rules + } + return nil +} + +// Defines the billing status requirements for operations. +// +// When used with +// [Service Control API](https://cloud.google.com/service-control/), the +// following statuses are supported: +// +// - **current**: the associated billing account is up to date and capable of +// paying for resource usages. +// - **delinquent**: the associated billing account has a correctable problem, +// such as late payment. +// +// Mostly services should only allow `current` status when serving requests. +// In addition, services can choose to allow both `current` and `delinquent` +// statuses when serving read-only requests to resources. If the list of +// allowed_statuses is empty, it means no billing requirement. +// +type BillingStatusRule struct { + // Selects the operation names to which this rule applies. + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` + // Allowed billing statuses. The billing status check passes if the actual + // billing status matches any of the provided values here. + AllowedStatuses []string `protobuf:"bytes,2,rep,name=allowed_statuses,json=allowedStatuses" json:"allowed_statuses,omitempty"` +} + +func (m *BillingStatusRule) Reset() { *m = BillingStatusRule{} } +func (m *BillingStatusRule) String() string { return proto.CompactTextString(m) } +func (*BillingStatusRule) ProtoMessage() {} +func (*BillingStatusRule) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *BillingStatusRule) GetSelector() string { + if m != nil { + return m.Selector + } + return "" +} + +func (m *BillingStatusRule) GetAllowedStatuses() []string { + if m != nil { + return m.AllowedStatuses + } + return nil +} + +func init() { + proto.RegisterType((*Billing)(nil), "google.api.Billing") + proto.RegisterType((*BillingStatusRule)(nil), "google.api.BillingStatusRule") +} + +func init() { proto.RegisterFile("google/api/billing.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 253 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0x4f, 0x4b, 0x03, 0x31, + 0x10, 0xc5, 0x59, 0x4b, 0xad, 0x8d, 0xe2, 0x9f, 0xbd, 0x18, 0x16, 0x85, 0xa5, 0xa7, 0xf5, 0x92, + 0x05, 0x7b, 0xf4, 0xb6, 0xe0, 0xbd, 0x6c, 0x2f, 0xd2, 0x8b, 0xa4, 0x71, 0x0c, 0x81, 0x34, 0xb3, + 0x64, 0xb2, 0xfa, 0xf5, 0xc5, 0x24, 0xea, 0x4a, 0x8f, 0x6f, 0x7e, 0xef, 0x65, 0xe6, 0x85, 0x71, + 0x8d, 0xa8, 0x2d, 0xb4, 0x72, 0x30, 0xed, 0xde, 0x58, 0x6b, 0x9c, 0x16, 0x83, 0xc7, 0x80, 0x25, + 0x4b, 0x44, 0xc8, 0xc1, 0x54, 0x77, 0x13, 0x97, 0x74, 0x0e, 0x83, 0x0c, 0x06, 0x1d, 0x25, 0x67, + 0x75, 0x3b, 0xa1, 0x07, 0x08, 0xde, 0xa8, 0x04, 0x56, 0x2f, 0x6c, 0xd1, 0xa5, 0x37, 0x4b, 0xce, + 0x16, 0x09, 0x11, 0x2f, 0xea, 0x59, 0xb3, 0xec, 0x7f, 0x64, 0xb9, 0x66, 0x73, 0x3f, 0x5a, 0x20, + 0x3e, 0xaf, 0x67, 0xcd, 0xf9, 0xe3, 0xbd, 0xf8, 0xdb, 0x2b, 0x72, 0x7a, 0x1b, 0x64, 0x18, 0xa9, + 0x1f, 0x2d, 0xf4, 0xc9, 0xbb, 0xda, 0xb1, 0x9b, 0x23, 0x56, 0x56, 0xec, 0x8c, 0xc0, 0x82, 0x0a, + 0xe8, 0x79, 0x51, 0x17, 0xcd, 0xb2, 0xff, 0xd5, 0xe5, 0x03, 0xbb, 0x96, 0xd6, 0xe2, 0x27, 0xbc, + 0xbd, 0x52, 0x4c, 0x00, 0xf1, 0x93, 0x78, 0xc8, 0x55, 0x9e, 0x6f, 0xf3, 0xb8, 0xd3, 0xec, 0x52, + 0xe1, 0x61, 0x72, 0x46, 0x77, 0x91, 0x77, 0x6d, 0xbe, 0x5b, 0x6d, 0x8a, 0xdd, 0x73, 0x66, 0x1a, + 0xad, 0x74, 0x5a, 0xa0, 0xd7, 0xad, 0x06, 0x17, 0x3b, 0xb7, 0x09, 0xc9, 0xc1, 0x50, 0xfc, 0x0f, + 0x02, 0xff, 0x61, 0x14, 0x28, 0x74, 0xef, 0x46, 0x3f, 0xfd, 0x53, 0xfb, 0xd3, 0x98, 0x58, 0x7f, + 0x05, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x90, 0x2d, 0x32, 0x84, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/consumer.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/consumer.pb.go new file mode 100644 index 0000000..00f94ca --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/consumer.pb.go @@ -0,0 +1,159 @@ +// Code generated by protoc-gen-go. +// source: google/api/consumer.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Supported data type of the property values +type Property_PropertyType int32 + +const ( + // The type is unspecified, and will result in an error. + Property_UNSPECIFIED Property_PropertyType = 0 + // The type is `int64`. + Property_INT64 Property_PropertyType = 1 + // The type is `bool`. + Property_BOOL Property_PropertyType = 2 + // The type is `string`. + Property_STRING Property_PropertyType = 3 + // The type is 'double'. + Property_DOUBLE Property_PropertyType = 4 +) + +var Property_PropertyType_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "INT64", + 2: "BOOL", + 3: "STRING", + 4: "DOUBLE", +} +var Property_PropertyType_value = map[string]int32{ + "UNSPECIFIED": 0, + "INT64": 1, + "BOOL": 2, + "STRING": 3, + "DOUBLE": 4, +} + +func (x Property_PropertyType) String() string { + return proto.EnumName(Property_PropertyType_name, int32(x)) +} +func (Property_PropertyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{1, 0} } + +// A descriptor for defining project properties for a service. One service may +// have many consumer projects, and the service may want to behave differently +// depending on some properties on the project. For example, a project may be +// associated with a school, or a business, or a government agency, a business +// type property on the project may affect how a service responds to the client. +// This descriptor defines which properties are allowed to be set on a project. +// +// Example: +// +// project_properties: +// properties: +// - name: NO_WATERMARK +// type: BOOL +// description: Allows usage of the API without watermarks. +// - name: EXTENDED_TILE_CACHE_PERIOD +// type: INT64 +type ProjectProperties struct { + // List of per consumer project-specific properties. + Properties []*Property `protobuf:"bytes,1,rep,name=properties" json:"properties,omitempty"` +} + +func (m *ProjectProperties) Reset() { *m = ProjectProperties{} } +func (m *ProjectProperties) String() string { return proto.CompactTextString(m) } +func (*ProjectProperties) ProtoMessage() {} +func (*ProjectProperties) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *ProjectProperties) GetProperties() []*Property { + if m != nil { + return m.Properties + } + return nil +} + +// Defines project properties. +// +// API services can define properties that can be assigned to consumer projects +// so that backends can perform response customization without having to make +// additional calls or maintain additional storage. For example, Maps API +// defines properties that controls map tile cache period, or whether to embed a +// watermark in a result. +// +// These values can be set via API producer console. Only API providers can +// define and set these properties. +type Property struct { + // The name of the property (a.k.a key). + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The type of this property. + Type Property_PropertyType `protobuf:"varint,2,opt,name=type,enum=google.api.Property_PropertyType" json:"type,omitempty"` + // The description of the property + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *Property) Reset() { *m = Property{} } +func (m *Property) String() string { return proto.CompactTextString(m) } +func (*Property) ProtoMessage() {} +func (*Property) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *Property) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Property) GetType() Property_PropertyType { + if m != nil { + return m.Type + } + return Property_UNSPECIFIED +} + +func (m *Property) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func init() { + proto.RegisterType((*ProjectProperties)(nil), "google.api.ProjectProperties") + proto.RegisterType((*Property)(nil), "google.api.Property") + proto.RegisterEnum("google.api.Property_PropertyType", Property_PropertyType_name, Property_PropertyType_value) +} + +func init() { proto.RegisterFile("google/api/consumer.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 299 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x4f, 0x4f, 0xf2, 0x40, + 0x10, 0xc6, 0xdf, 0x85, 0xbe, 0x04, 0x06, 0xc5, 0xba, 0xf1, 0x50, 0x6f, 0x95, 0x13, 0xa7, 0x36, + 0x41, 0xf4, 0xe2, 0xad, 0x50, 0x4d, 0x13, 0x02, 0x4d, 0x81, 0x8b, 0xb7, 0x5a, 0xc7, 0x75, 0x0d, + 0xec, 0x6c, 0xb6, 0xd5, 0x84, 0x0f, 0xe8, 0xf7, 0x32, 0x2c, 0x88, 0x35, 0xf1, 0xf6, 0xcc, 0x3e, + 0x7f, 0xb2, 0xf9, 0xc1, 0xa5, 0x20, 0x12, 0x6b, 0x0c, 0x73, 0x2d, 0xc3, 0x82, 0x54, 0xf9, 0xbe, + 0x41, 0x13, 0x68, 0x43, 0x15, 0x71, 0xd8, 0x5b, 0x41, 0xae, 0x65, 0x3f, 0x81, 0xf3, 0xd4, 0xd0, + 0x1b, 0x16, 0x55, 0x6a, 0x48, 0xa3, 0xa9, 0x24, 0x96, 0x7c, 0x04, 0xa0, 0x8f, 0x97, 0xc7, 0xfc, + 0xe6, 0xa0, 0x3b, 0xbc, 0x08, 0x7e, 0x5a, 0xc1, 0x21, 0xbb, 0xcd, 0x6a, 0xb9, 0xfe, 0x27, 0x83, + 0xf6, 0xb7, 0xc1, 0x39, 0x38, 0x2a, 0xdf, 0xa0, 0xc7, 0x7c, 0x36, 0xe8, 0x64, 0x56, 0xf3, 0x1b, + 0x70, 0xaa, 0xad, 0x46, 0xaf, 0xe1, 0xb3, 0x41, 0x6f, 0x78, 0xf5, 0xd7, 0xe0, 0x51, 0x2c, 0xb7, + 0x1a, 0x33, 0x1b, 0xe7, 0x3e, 0x74, 0x9f, 0xb1, 0x2c, 0x8c, 0xd4, 0x95, 0x24, 0xe5, 0x35, 0xed, + 0x62, 0xfd, 0xa9, 0x3f, 0x85, 0x93, 0x7a, 0x8f, 0x9f, 0x41, 0x77, 0x35, 0x5b, 0xa4, 0xf1, 0x38, + 0xb9, 0x4f, 0xe2, 0x89, 0xfb, 0x8f, 0x77, 0xe0, 0x7f, 0x32, 0x5b, 0xde, 0x8e, 0x5c, 0xc6, 0xdb, + 0xe0, 0x44, 0xf3, 0xf9, 0xd4, 0x6d, 0x70, 0x80, 0xd6, 0x62, 0x99, 0x25, 0xb3, 0x07, 0xb7, 0xb9, + 0xd3, 0x93, 0xf9, 0x2a, 0x9a, 0xc6, 0xae, 0x13, 0xbd, 0x42, 0xaf, 0xa0, 0x4d, 0xed, 0x77, 0xd1, + 0xe9, 0xf8, 0x00, 0x30, 0xdd, 0xf1, 0x4b, 0xd9, 0x63, 0x7c, 0x30, 0x05, 0xad, 0x73, 0x25, 0x02, + 0x32, 0x22, 0x14, 0xa8, 0x2c, 0xdd, 0x70, 0x6f, 0xe5, 0x5a, 0x96, 0x96, 0x7d, 0x89, 0xe6, 0x43, + 0x16, 0x58, 0x90, 0x7a, 0x91, 0xe2, 0xee, 0xd7, 0xf5, 0xd4, 0xb2, 0x8d, 0xeb, 0xaf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xb7, 0xa4, 0x04, 0x2c, 0xac, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/context.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/context.pb.go new file mode 100644 index 0000000..692a037 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/context.pb.go @@ -0,0 +1,115 @@ +// Code generated by protoc-gen-go. +// source: google/api/context.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `Context` defines which contexts an API requests. +// +// Example: +// +// context: +// rules: +// - selector: "*" +// requested: +// - google.rpc.context.ProjectContext +// - google.rpc.context.OriginContext +// +// The above specifies that all methods in the API request +// `google.rpc.context.ProjectContext` and +// `google.rpc.context.OriginContext`. +// +// Available context types are defined in package +// `google.rpc.context`. +type Context struct { + // A list of RPC context rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + Rules []*ContextRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` +} + +func (m *Context) Reset() { *m = Context{} } +func (m *Context) String() string { return proto.CompactTextString(m) } +func (*Context) ProtoMessage() {} +func (*Context) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *Context) GetRules() []*ContextRule { + if m != nil { + return m.Rules + } + return nil +} + +// A context rule provides information about the context for an individual API +// element. +type ContextRule struct { + // Selects the methods to which this rule applies. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` + // A list of full type names of requested contexts. + Requested []string `protobuf:"bytes,2,rep,name=requested" json:"requested,omitempty"` + // A list of full type names of provided contexts. + Provided []string `protobuf:"bytes,3,rep,name=provided" json:"provided,omitempty"` +} + +func (m *ContextRule) Reset() { *m = ContextRule{} } +func (m *ContextRule) String() string { return proto.CompactTextString(m) } +func (*ContextRule) ProtoMessage() {} +func (*ContextRule) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +func (m *ContextRule) GetSelector() string { + if m != nil { + return m.Selector + } + return "" +} + +func (m *ContextRule) GetRequested() []string { + if m != nil { + return m.Requested + } + return nil +} + +func (m *ContextRule) GetProvided() []string { + if m != nil { + return m.Provided + } + return nil +} + +func init() { + proto.RegisterType((*Context)(nil), "google.api.Context") + proto.RegisterType((*ContextRule)(nil), "google.api.ContextRule") +} + +func init() { proto.RegisterFile("google/api/context.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 231 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0x4f, 0x4b, 0xc4, 0x30, + 0x14, 0xc4, 0xe9, 0xd6, 0x7f, 0x7d, 0x2b, 0x1e, 0x7a, 0x31, 0x88, 0x87, 0xb2, 0xa7, 0x5e, 0x4c, + 0x41, 0x2f, 0x82, 0x27, 0x57, 0x44, 0xbc, 0x95, 0x1e, 0xbd, 0xc5, 0xf4, 0x19, 0x02, 0x31, 0x2f, + 0x26, 0xe9, 0xe2, 0xe7, 0xf1, 0x93, 0xca, 0x26, 0x65, 0xff, 0x1c, 0x67, 0x7e, 0x33, 0x24, 0xf3, + 0x80, 0x29, 0x22, 0x65, 0xb0, 0x13, 0x4e, 0x77, 0x92, 0x6c, 0xc4, 0xdf, 0xc8, 0x9d, 0xa7, 0x48, + 0x35, 0x64, 0xc2, 0x85, 0xd3, 0xab, 0x47, 0x38, 0x7f, 0xc9, 0xb0, 0xbe, 0x83, 0x53, 0x3f, 0x19, + 0x0c, 0xac, 0x68, 0xca, 0x76, 0x79, 0x7f, 0xcd, 0xf7, 0x31, 0x3e, 0x67, 0x86, 0xc9, 0xe0, 0x90, + 0x53, 0x2b, 0x09, 0xcb, 0x03, 0xb7, 0xbe, 0x81, 0x8b, 0x80, 0x06, 0x65, 0x24, 0xcf, 0x8a, 0xa6, + 0x68, 0xab, 0x61, 0xa7, 0xeb, 0x5b, 0xa8, 0x3c, 0xfe, 0x4c, 0x18, 0x22, 0x8e, 0x6c, 0xd1, 0x94, + 0x6d, 0x35, 0xec, 0x8d, 0x6d, 0xd3, 0x79, 0xda, 0xe8, 0x11, 0x47, 0x56, 0x26, 0xb8, 0xd3, 0x6b, + 0x0b, 0x57, 0x92, 0xbe, 0x0f, 0x7e, 0xb2, 0xbe, 0x9c, 0x1f, 0xed, 0xb7, 0x53, 0xfa, 0xe2, 0xe3, + 0x75, 0x66, 0x8a, 0x8c, 0xb0, 0x8a, 0x93, 0x57, 0x9d, 0x42, 0x9b, 0x86, 0x76, 0x19, 0x09, 0xa7, + 0x43, 0xba, 0x42, 0x40, 0xbf, 0xd1, 0x12, 0x25, 0xd9, 0x2f, 0xad, 0x9e, 0x8e, 0xd4, 0xdf, 0xe2, + 0xe4, 0xed, 0xb9, 0x7f, 0xff, 0x3c, 0x4b, 0xc5, 0x87, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb5, + 0x18, 0x98, 0x7a, 0x3d, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/control.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/control.pb.go new file mode 100644 index 0000000..36c6c81 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/control.pb.go @@ -0,0 +1,56 @@ +// Code generated by protoc-gen-go. +// source: google/api/control.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Selects and configures the service controller used by the service. The +// service controller handles features like abuse, quota, billing, logging, +// monitoring, etc. +type Control struct { + // The service control environment to use. If empty, no control plane + // feature (like quota and billing) will be enabled. + Environment string `protobuf:"bytes,1,opt,name=environment" json:"environment,omitempty"` +} + +func (m *Control) Reset() { *m = Control{} } +func (m *Control) String() string { return proto.CompactTextString(m) } +func (*Control) ProtoMessage() {} +func (*Control) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +func (m *Control) GetEnvironment() string { + if m != nil { + return m.Environment + } + return "" +} + +func init() { + proto.RegisterType((*Control)(nil), "google.api.Control") +} + +func init() { proto.RegisterFile("google/api/control.proto", fileDescriptor5) } + +var fileDescriptor5 = []byte{ + // 165 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x48, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xce, 0xcf, 0x2b, 0x29, 0xca, 0xcf, 0xd1, 0x2b, + 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x82, 0xc8, 0xe8, 0x25, 0x16, 0x64, 0x2a, 0x69, 0x73, 0xb1, + 0x3b, 0x43, 0x24, 0x85, 0x14, 0xb8, 0xb8, 0x53, 0xf3, 0xca, 0x32, 0x8b, 0xf2, 0xf3, 0x72, 0x53, + 0xf3, 0x4a, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0x90, 0x85, 0x9c, 0xf2, 0xb8, 0xf8, 0x92, + 0xf3, 0x73, 0xf5, 0x10, 0xda, 0x9d, 0x78, 0xa0, 0x9a, 0x03, 0x40, 0x06, 0x07, 0x30, 0x46, 0xb9, + 0x42, 0xe5, 0xd2, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3, 0x53, 0xf3, + 0xc0, 0xd6, 0xea, 0x43, 0xa4, 0x12, 0x0b, 0x32, 0x8b, 0xc1, 0x6e, 0x2a, 0x4e, 0x2d, 0x2a, 0xcb, + 0x4c, 0x4e, 0x4d, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xb7, 0x46, 0xe1, 0x2d, 0x62, 0x62, 0x71, 0x77, + 0x0c, 0xf0, 0x4c, 0x62, 0x03, 0x6b, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x44, 0x6e, 0x78, + 0xbd, 0xcb, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/documentation.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/documentation.pb.go new file mode 100644 index 0000000..1885fd4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/documentation.pb.go @@ -0,0 +1,268 @@ +// Code generated by protoc-gen-go. +// source: google/api/documentation.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `Documentation` provides the information for describing a service. +// +// Example: +// <pre><code>documentation: +// summary: > +// The Google Calendar API gives access +// to most calendar features. +// pages: +// - name: Overview +// content: (== include google/foo/overview.md ==) +// - name: Tutorial +// content: (== include google/foo/tutorial.md ==) +// subpages; +// - name: Java +// content: (== include google/foo/tutorial_java.md ==) +// rules: +// - selector: google.calendar.Calendar.Get +// description: > +// ... +// - selector: google.calendar.Calendar.Put +// description: > +// ... +// </code></pre> +// Documentation is provided in markdown syntax. In addition to +// standard markdown features, definition lists, tables and fenced +// code blocks are supported. Section headers can be provided and are +// interpreted relative to the section nesting of the context where +// a documentation fragment is embedded. +// +// Documentation from the IDL is merged with documentation defined +// via the config at normalization time, where documentation provided +// by config rules overrides IDL provided. +// +// A number of constructs specific to the API platform are supported +// in documentation text. +// +// In order to reference a proto element, the following +// notation can be used: +// <pre><code>[fully.qualified.proto.name][]</code></pre> +// To override the display text used for the link, this can be used: +// <pre><code>[display text][fully.qualified.proto.name]</code></pre> +// Text can be excluded from doc using the following notation: +// <pre><code>(-- internal comment --)</code></pre> +// Comments can be made conditional using a visibility label. The below +// text will be only rendered if the `BETA` label is available: +// <pre><code>(--BETA: comment for BETA users --)</code></pre> +// A few directives are available in documentation. Note that +// directives must appear on a single line to be properly +// identified. The `include` directive includes a markdown file from +// an external source: +// <pre><code>(== include path/to/file ==)</code></pre> +// The `resource_for` directive marks a message to be the resource of +// a collection in REST view. If it is not specified, tools attempt +// to infer the resource from the operations in a collection: +// <pre><code>(== resource_for v1.shelves.books ==)</code></pre> +// The directive `suppress_warning` does not directly affect documentation +// and is documented together with service config validation. +type Documentation struct { + // A short summary of what the service does. Can only be provided by + // plain text. + Summary string `protobuf:"bytes,1,opt,name=summary" json:"summary,omitempty"` + // The top level pages for the documentation set. + Pages []*Page `protobuf:"bytes,5,rep,name=pages" json:"pages,omitempty"` + // A list of documentation rules that apply to individual API elements. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + Rules []*DocumentationRule `protobuf:"bytes,3,rep,name=rules" json:"rules,omitempty"` + // The URL to the root of documentation. + DocumentationRootUrl string `protobuf:"bytes,4,opt,name=documentation_root_url,json=documentationRootUrl" json:"documentation_root_url,omitempty"` + // Declares a single overview page. For example: + // <pre><code>documentation: + // summary: ... + // overview: (== include overview.md ==) + // </code></pre> + // This is a shortcut for the following declaration (using pages style): + // <pre><code>documentation: + // summary: ... + // pages: + // - name: Overview + // content: (== include overview.md ==) + // </code></pre> + // Note: you cannot specify both `overview` field and `pages` field. + Overview string `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"` +} + +func (m *Documentation) Reset() { *m = Documentation{} } +func (m *Documentation) String() string { return proto.CompactTextString(m) } +func (*Documentation) ProtoMessage() {} +func (*Documentation) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } + +func (m *Documentation) GetSummary() string { + if m != nil { + return m.Summary + } + return "" +} + +func (m *Documentation) GetPages() []*Page { + if m != nil { + return m.Pages + } + return nil +} + +func (m *Documentation) GetRules() []*DocumentationRule { + if m != nil { + return m.Rules + } + return nil +} + +func (m *Documentation) GetDocumentationRootUrl() string { + if m != nil { + return m.DocumentationRootUrl + } + return "" +} + +func (m *Documentation) GetOverview() string { + if m != nil { + return m.Overview + } + return "" +} + +// A documentation rule provides information about individual API elements. +type DocumentationRule struct { + // The selector is a comma-separated list of patterns. Each pattern is a + // qualified name of the element which may end in "*", indicating a wildcard. + // Wildcards are only allowed at the end and for a whole component of the + // qualified name, i.e. "foo.*" is ok, but not "foo.b*" or "foo.*.bar". To + // specify a default for all applicable elements, the whole pattern "*" + // is used. + Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` + // Description of the selected API(s). + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Deprecation description of the selected element(s). It can be provided if an + // element is marked as `deprecated`. + DeprecationDescription string `protobuf:"bytes,3,opt,name=deprecation_description,json=deprecationDescription" json:"deprecation_description,omitempty"` +} + +func (m *DocumentationRule) Reset() { *m = DocumentationRule{} } +func (m *DocumentationRule) String() string { return proto.CompactTextString(m) } +func (*DocumentationRule) ProtoMessage() {} +func (*DocumentationRule) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1} } + +func (m *DocumentationRule) GetSelector() string { + if m != nil { + return m.Selector + } + return "" +} + +func (m *DocumentationRule) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *DocumentationRule) GetDeprecationDescription() string { + if m != nil { + return m.DeprecationDescription + } + return "" +} + +// Represents a documentation page. A page can contain subpages to represent +// nested documentation set structure. +type Page struct { + // The name of the page. It will be used as an identity of the page to + // generate URI of the page, text of the link to this page in navigation, + // etc. The full page name (start from the root page name to this page + // concatenated with `.`) can be used as reference to the page in your + // documentation. For example: + // <pre><code>pages: + // - name: Tutorial + // content: (== include tutorial.md ==) + // subpages: + // - name: Java + // content: (== include tutorial_java.md ==) + // </code></pre> + // You can reference `Java` page using Markdown reference link syntax: + // `[Java][Tutorial.Java]`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The Markdown content of the page. You can use <code>(== include {path} ==)</code> + // to include content from a Markdown file. + Content string `protobuf:"bytes,2,opt,name=content" json:"content,omitempty"` + // Subpages of this page. The order of subpages specified here will be + // honored in the generated docset. + Subpages []*Page `protobuf:"bytes,3,rep,name=subpages" json:"subpages,omitempty"` +} + +func (m *Page) Reset() { *m = Page{} } +func (m *Page) String() string { return proto.CompactTextString(m) } +func (*Page) ProtoMessage() {} +func (*Page) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{2} } + +func (m *Page) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Page) GetContent() string { + if m != nil { + return m.Content + } + return "" +} + +func (m *Page) GetSubpages() []*Page { + if m != nil { + return m.Subpages + } + return nil +} + +func init() { + proto.RegisterType((*Documentation)(nil), "google.api.Documentation") + proto.RegisterType((*DocumentationRule)(nil), "google.api.DocumentationRule") + proto.RegisterType((*Page)(nil), "google.api.Page") +} + +func init() { proto.RegisterFile("google/api/documentation.proto", fileDescriptor6) } + +var fileDescriptor6 = []byte{ + // 356 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0x6a, 0xe3, 0x30, + 0x14, 0x45, 0x71, 0xec, 0xcc, 0x64, 0x5e, 0x98, 0x61, 0x46, 0x0c, 0x19, 0x33, 0xd0, 0x12, 0xb2, + 0x28, 0x59, 0x14, 0x1b, 0x9a, 0x42, 0x17, 0x5d, 0x35, 0xa4, 0x94, 0xee, 0x8c, 0xa1, 0x9b, 0x6e, + 0x82, 0xa2, 0xbc, 0x0a, 0x83, 0xad, 0x67, 0x24, 0x39, 0xa5, 0xbf, 0xd0, 0xcf, 0xe8, 0x57, 0xf5, + 0x73, 0x8a, 0x65, 0x27, 0xb1, 0x29, 0xdd, 0xf9, 0xfa, 0x1e, 0xe9, 0x3e, 0x5d, 0x09, 0x4e, 0x25, + 0x91, 0xcc, 0x31, 0xe6, 0x65, 0x16, 0x6f, 0x49, 0x54, 0x05, 0x2a, 0xcb, 0x6d, 0x46, 0x2a, 0x2a, + 0x35, 0x59, 0x62, 0xd0, 0xf8, 0x11, 0x2f, 0xb3, 0xd9, 0xbb, 0x07, 0x3f, 0x57, 0x5d, 0x86, 0x85, + 0xf0, 0xdd, 0x54, 0x45, 0xc1, 0xf5, 0x4b, 0xe8, 0x4d, 0xbd, 0xf9, 0x8f, 0x74, 0x2f, 0xd9, 0x19, + 0x0c, 0x4b, 0x2e, 0xd1, 0x84, 0xc3, 0xa9, 0x3f, 0x1f, 0x5f, 0xfc, 0x8e, 0x8e, 0xfb, 0x44, 0x09, + 0x97, 0x98, 0x36, 0x36, 0x5b, 0xc0, 0x50, 0x57, 0x39, 0x9a, 0xd0, 0x77, 0xdc, 0x49, 0x97, 0xeb, + 0x65, 0xa5, 0x55, 0x8e, 0x69, 0xc3, 0xb2, 0x4b, 0x98, 0xf4, 0x66, 0x5d, 0x6b, 0x22, 0xbb, 0xae, + 0x74, 0x1e, 0x06, 0x6e, 0x8a, 0xbf, 0x3d, 0x37, 0x25, 0xb2, 0x0f, 0x3a, 0x67, 0xff, 0x61, 0x44, + 0x3b, 0xd4, 0xbb, 0x0c, 0x9f, 0xc3, 0x81, 0xe3, 0x0e, 0x7a, 0xf6, 0xea, 0xc1, 0x9f, 0x4f, 0x71, + 0xf5, 0x0a, 0x83, 0x39, 0x0a, 0x4b, 0xba, 0x3d, 0xdf, 0x41, 0xb3, 0x29, 0x8c, 0xb7, 0x68, 0x84, + 0xce, 0xca, 0x1a, 0x6f, 0x37, 0xec, 0xfe, 0x62, 0x57, 0xf0, 0x6f, 0x8b, 0xa5, 0x46, 0xd1, 0xcc, + 0xd8, 0xa5, 0x7d, 0x47, 0x4f, 0x3a, 0xf6, 0xea, 0xe8, 0xce, 0x36, 0x10, 0xd4, 0x15, 0x31, 0x06, + 0x81, 0xe2, 0x05, 0xb6, 0xd1, 0xee, 0xbb, 0x6e, 0x5c, 0x90, 0xb2, 0xa8, 0x6c, 0x1b, 0xb9, 0x97, + 0xec, 0x1c, 0x46, 0xa6, 0xda, 0x34, 0xa5, 0xfb, 0x5f, 0x94, 0x7e, 0x20, 0x96, 0x16, 0x7e, 0x09, + 0x2a, 0x3a, 0xc0, 0x92, 0xf5, 0xce, 0x9f, 0xd4, 0xb7, 0x9f, 0x78, 0x8f, 0xb7, 0x2d, 0x21, 0x29, + 0xe7, 0x4a, 0x46, 0xa4, 0x65, 0x2c, 0x51, 0xb9, 0xb7, 0x11, 0x37, 0x16, 0x2f, 0x33, 0xe3, 0x9e, + 0x8f, 0xa9, 0xbb, 0x14, 0x28, 0x48, 0x3d, 0x65, 0xf2, 0xba, 0xa7, 0xde, 0x06, 0xc1, 0xdd, 0x4d, + 0x72, 0xbf, 0xf9, 0xe6, 0x16, 0x2e, 0x3e, 0x02, 0x00, 0x00, 0xff, 0xff, 0x3e, 0x04, 0x32, 0xbf, + 0x76, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.pb.go new file mode 100644 index 0000000..c726472 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.pb.go @@ -0,0 +1,119 @@ +// Code generated by protoc-gen-go. +// source: google/api/endpoint.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `Endpoint` describes a network endpoint that serves a set of APIs. +// A service may expose any number of endpoints, and all endpoints share the +// same service configuration, such as quota configuration and monitoring +// configuration. +// +// Example service configuration: +// +// name: library-example.googleapis.com +// endpoints: +// # Below entry makes 'google.example.library.v1.Library' +// # API be served from endpoint address library-example.googleapis.com. +// # It also allows HTTP OPTIONS calls to be passed to the backend, for +// # it to decide whether the subsequent cross-origin request is +// # allowed to proceed. +// - name: library-example.googleapis.com +// allow_cors: true +type Endpoint struct { + // The canonical name of this endpoint. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // DEPRECATED: This field is no longer supported. Instead of using aliases, + // please specify multiple [google.api.Endpoint][google.api.Endpoint] for each of the intented + // alias. + // + // Additional names that this endpoint will be hosted on. + Aliases []string `protobuf:"bytes,2,rep,name=aliases" json:"aliases,omitempty"` + // The list of APIs served by this endpoint. + Apis []string `protobuf:"bytes,3,rep,name=apis" json:"apis,omitempty"` + // The list of features enabled on this endpoint. + Features []string `protobuf:"bytes,4,rep,name=features" json:"features,omitempty"` + // Allowing + // [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka + // cross-domain traffic, would allow the backends served from this endpoint to + // receive and respond to HTTP OPTIONS requests. The response will be used by + // the browser to determine whether the subsequent cross-origin request is + // allowed to proceed. + AllowCors bool `protobuf:"varint,5,opt,name=allow_cors,json=allowCors" json:"allow_cors,omitempty"` +} + +func (m *Endpoint) Reset() { *m = Endpoint{} } +func (m *Endpoint) String() string { return proto.CompactTextString(m) } +func (*Endpoint) ProtoMessage() {} +func (*Endpoint) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0} } + +func (m *Endpoint) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Endpoint) GetAliases() []string { + if m != nil { + return m.Aliases + } + return nil +} + +func (m *Endpoint) GetApis() []string { + if m != nil { + return m.Apis + } + return nil +} + +func (m *Endpoint) GetFeatures() []string { + if m != nil { + return m.Features + } + return nil +} + +func (m *Endpoint) GetAllowCors() bool { + if m != nil { + return m.AllowCors + } + return false +} + +func init() { + proto.RegisterType((*Endpoint)(nil), "google.api.Endpoint") +} + +func init() { proto.RegisterFile("google/api/endpoint.proto", fileDescriptor7) } + +var fileDescriptor7 = []byte{ + // 241 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x8f, 0xbf, 0x4e, 0xc3, 0x30, + 0x10, 0xc6, 0xe5, 0x36, 0x40, 0x62, 0x09, 0x06, 0x4f, 0xa6, 0x02, 0x29, 0x62, 0xca, 0x94, 0x0c, + 0x8c, 0x4c, 0x14, 0x55, 0x88, 0x2d, 0xca, 0xc8, 0x82, 0x8e, 0x70, 0xb5, 0x2c, 0xb9, 0x77, 0x96, + 0x6d, 0xe0, 0x11, 0x78, 0x0f, 0x9e, 0x14, 0xc5, 0x69, 0x81, 0x6e, 0xf7, 0xfd, 0x39, 0xe9, 0xf7, + 0xc9, 0x4b, 0xc3, 0x6c, 0x1c, 0x76, 0xe0, 0x6d, 0x87, 0xf4, 0xe6, 0xd9, 0x52, 0x6a, 0x7d, 0xe0, + 0xc4, 0x4a, 0xce, 0x51, 0x0b, 0xde, 0xae, 0xae, 0xfe, 0xd5, 0x80, 0x88, 0x13, 0x24, 0xcb, 0x14, + 0xe7, 0xe6, 0xcd, 0x97, 0x90, 0xe5, 0x66, 0xff, 0xac, 0x94, 0x2c, 0x08, 0x76, 0xa8, 0x45, 0x2d, + 0x9a, 0x6a, 0xc8, 0xb7, 0xd2, 0xf2, 0x0c, 0x9c, 0x85, 0x88, 0x51, 0x2f, 0xea, 0x65, 0x53, 0x0d, + 0x07, 0x39, 0xb5, 0xc1, 0xdb, 0xa8, 0x97, 0xd9, 0xce, 0xb7, 0x5a, 0xc9, 0x72, 0x8b, 0x90, 0xde, + 0x03, 0x46, 0x5d, 0x64, 0xff, 0x57, 0xab, 0x6b, 0x29, 0xc1, 0x39, 0xfe, 0x7c, 0x19, 0x39, 0x44, + 0x7d, 0x52, 0x8b, 0xa6, 0x1c, 0xaa, 0xec, 0x3c, 0x70, 0x88, 0x6b, 0x96, 0x17, 0x23, 0xef, 0xda, + 0x3f, 0xf2, 0xf5, 0xf9, 0x01, 0xac, 0x9f, 0x50, 0x7b, 0xf1, 0xbc, 0xd9, 0x87, 0x86, 0x1d, 0x90, + 0x69, 0x39, 0x98, 0xce, 0x20, 0xe5, 0x21, 0xdd, 0x1c, 0x4d, 0x10, 0x79, 0x69, 0xc4, 0xf0, 0x61, + 0x47, 0x1c, 0x99, 0xb6, 0xd6, 0xdc, 0x1d, 0xa9, 0xef, 0x45, 0xf1, 0x78, 0xdf, 0x3f, 0xbd, 0x9e, + 0xe6, 0xc7, 0xdb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x43, 0xb9, 0x21, 0x48, 0x01, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/log.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/log.pb.go new file mode 100644 index 0000000..c1a959d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/log.pb.go @@ -0,0 +1,99 @@ +// Code generated by protoc-gen-go. +// source: google/api/log.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_api2 "google.golang.org/genproto/googleapis/api/label" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A description of a log type. Example in YAML format: +// +// - name: library.googleapis.com/activity_history +// description: The history of borrowing and returning library items. +// display_name: Activity +// labels: +// - key: /customer_id +// description: Identifier of a library customer +type LogDescriptor struct { + // The name of the log. It must be less than 512 characters long and can + // include the following characters: upper- and lower-case alphanumeric + // characters [A-Za-z0-9], and punctuation characters including + // slash, underscore, hyphen, period [/_-.]. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The set of labels that are available to describe a specific log entry. + // Runtime requests that contain labels not specified here are + // considered invalid. + Labels []*google_api2.LabelDescriptor `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty"` + // A human-readable description of this log. This information appears in + // the documentation and can contain details. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The human-readable name for this log. This information appears on + // the user interface and should be concise. + DisplayName string `protobuf:"bytes,4,opt,name=display_name,json=displayName" json:"display_name,omitempty"` +} + +func (m *LogDescriptor) Reset() { *m = LogDescriptor{} } +func (m *LogDescriptor) String() string { return proto.CompactTextString(m) } +func (*LogDescriptor) ProtoMessage() {} +func (*LogDescriptor) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } + +func (m *LogDescriptor) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *LogDescriptor) GetLabels() []*google_api2.LabelDescriptor { + if m != nil { + return m.Labels + } + return nil +} + +func (m *LogDescriptor) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *LogDescriptor) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func init() { + proto.RegisterType((*LogDescriptor)(nil), "google.api.LogDescriptor") +} + +func init() { proto.RegisterFile("google/api/log.proto", fileDescriptor8) } + +var fileDescriptor8 = []byte{ + // 238 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x8f, 0xc1, 0x4a, 0xc3, 0x40, + 0x10, 0x86, 0x49, 0x1b, 0x8a, 0x6e, 0xd5, 0xc3, 0x22, 0x12, 0xf4, 0x12, 0x3d, 0xf5, 0xb4, 0x01, + 0x7b, 0xf4, 0x64, 0x51, 0x44, 0x08, 0x12, 0x7a, 0xf4, 0x22, 0xd3, 0x74, 0x1c, 0x46, 0x36, 0x3b, + 0xcb, 0x6e, 0x11, 0x7c, 0x18, 0x2f, 0x3e, 0xa9, 0x74, 0x13, 0x68, 0x7a, 0xdb, 0xfd, 0xe6, 0x9b, + 0x7f, 0x66, 0xd4, 0x25, 0x89, 0x90, 0xc5, 0x0a, 0x3c, 0x57, 0x56, 0xc8, 0xf8, 0x20, 0x3b, 0xd1, + 0xaa, 0xa7, 0x06, 0x3c, 0x5f, 0x5f, 0x8d, 0x0d, 0xd8, 0xa0, 0xed, 0x9d, 0xbb, 0xdf, 0x4c, 0x9d, + 0xd7, 0x42, 0x4f, 0x18, 0xdb, 0xc0, 0x7e, 0x27, 0x41, 0x6b, 0x95, 0x3b, 0xe8, 0xb0, 0xc8, 0xca, + 0x6c, 0x71, 0xba, 0x4e, 0x6f, 0xbd, 0x54, 0xb3, 0xd4, 0x14, 0x8b, 0x49, 0x39, 0x5d, 0xcc, 0xef, + 0x6f, 0xcc, 0x21, 0xda, 0xd4, 0xfb, 0xca, 0x21, 0x60, 0x3d, 0xa8, 0xba, 0x54, 0xf3, 0xed, 0x40, + 0x59, 0x5c, 0x31, 0x4d, 0x79, 0x63, 0xa4, 0x6f, 0xd5, 0xd9, 0x96, 0xa3, 0xb7, 0xf0, 0xf3, 0x91, + 0x46, 0xe6, 0x83, 0xd2, 0xb3, 0x37, 0xe8, 0x70, 0xf5, 0xa5, 0x2e, 0x5a, 0xe9, 0x46, 0xe3, 0x56, + 0x27, 0xb5, 0x50, 0xb3, 0xdf, 0xbd, 0xc9, 0xde, 0x9f, 0x07, 0x4e, 0x62, 0xc1, 0x91, 0x91, 0x40, + 0x15, 0xa1, 0x4b, 0x97, 0x55, 0x7d, 0x09, 0x3c, 0xc7, 0x74, 0x74, 0xc4, 0xf0, 0xcd, 0x2d, 0xb6, + 0xe2, 0x3e, 0x99, 0x1e, 0x8e, 0x7e, 0x7f, 0x93, 0xfc, 0xe5, 0xb1, 0x79, 0xdd, 0xcc, 0x52, 0xe3, + 0xf2, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x25, 0x6c, 0x32, 0xff, 0x4e, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/logging.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/logging.pb.go new file mode 100644 index 0000000..0eb15b2 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/logging.pb.go @@ -0,0 +1,136 @@ +// Code generated by protoc-gen-go. +// source: google/api/logging.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Logging configuration of the service. +// +// The following example shows how to configure logs to be sent to the +// producer and consumer projects. In the example, the `activity_history` +// log is sent to both the producer and consumer projects, whereas the +// `purchase_history` log is only sent to the producer project. +// +// monitored_resources: +// - type: library.googleapis.com/branch +// labels: +// - key: /city +// description: The city where the library branch is located in. +// - key: /name +// description: The name of the branch. +// logs: +// - name: activity_history +// labels: +// - key: /customer_id +// - name: purchase_history +// logging: +// producer_destinations: +// - monitored_resource: library.googleapis.com/branch +// logs: +// - activity_history +// - purchase_history +// consumer_destinations: +// - monitored_resource: library.googleapis.com/branch +// logs: +// - activity_history +type Logging struct { + // Logging configurations for sending logs to the producer project. + // There can be multiple producer destinations, each one must have a + // different monitored resource type. A log can be used in at most + // one producer destination. + ProducerDestinations []*Logging_LoggingDestination `protobuf:"bytes,1,rep,name=producer_destinations,json=producerDestinations" json:"producer_destinations,omitempty"` + // Logging configurations for sending logs to the consumer project. + // There can be multiple consumer destinations, each one must have a + // different monitored resource type. A log can be used in at most + // one consumer destination. + ConsumerDestinations []*Logging_LoggingDestination `protobuf:"bytes,2,rep,name=consumer_destinations,json=consumerDestinations" json:"consumer_destinations,omitempty"` +} + +func (m *Logging) Reset() { *m = Logging{} } +func (m *Logging) String() string { return proto.CompactTextString(m) } +func (*Logging) ProtoMessage() {} +func (*Logging) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{0} } + +func (m *Logging) GetProducerDestinations() []*Logging_LoggingDestination { + if m != nil { + return m.ProducerDestinations + } + return nil +} + +func (m *Logging) GetConsumerDestinations() []*Logging_LoggingDestination { + if m != nil { + return m.ConsumerDestinations + } + return nil +} + +// Configuration of a specific logging destination (the producer project +// or the consumer project). +type Logging_LoggingDestination struct { + // The monitored resource type. The type must be defined in the + // [Service.monitored_resources][google.api.Service.monitored_resources] section. + MonitoredResource string `protobuf:"bytes,3,opt,name=monitored_resource,json=monitoredResource" json:"monitored_resource,omitempty"` + // Names of the logs to be sent to this destination. Each name must + // be defined in the [Service.logs][google.api.Service.logs] section. If the log name is + // not a domain scoped name, it will be automatically prefixed with + // the service name followed by "/". + Logs []string `protobuf:"bytes,1,rep,name=logs" json:"logs,omitempty"` +} + +func (m *Logging_LoggingDestination) Reset() { *m = Logging_LoggingDestination{} } +func (m *Logging_LoggingDestination) String() string { return proto.CompactTextString(m) } +func (*Logging_LoggingDestination) ProtoMessage() {} +func (*Logging_LoggingDestination) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{0, 0} } + +func (m *Logging_LoggingDestination) GetMonitoredResource() string { + if m != nil { + return m.MonitoredResource + } + return "" +} + +func (m *Logging_LoggingDestination) GetLogs() []string { + if m != nil { + return m.Logs + } + return nil +} + +func init() { + proto.RegisterType((*Logging)(nil), "google.api.Logging") + proto.RegisterType((*Logging_LoggingDestination)(nil), "google.api.Logging.LoggingDestination") +} + +func init() { proto.RegisterFile("google/api/logging.proto", fileDescriptor9) } + +var fileDescriptor9 = []byte{ + // 270 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0x4f, 0x4b, 0xc4, 0x30, + 0x10, 0xc5, 0x69, 0x77, 0x51, 0x36, 0x8a, 0x60, 0x50, 0x28, 0x8b, 0x87, 0xc5, 0x83, 0xec, 0xc5, + 0x14, 0xf4, 0xe8, 0xc9, 0x45, 0x11, 0xc1, 0x43, 0xe9, 0x45, 0xd0, 0xc3, 0x12, 0xd3, 0x38, 0x04, + 0xda, 0x99, 0x90, 0xa4, 0x7e, 0x1a, 0x4f, 0x7e, 0x52, 0xd9, 0xa6, 0x75, 0xab, 0x9e, 0xf6, 0x94, + 0x3f, 0xef, 0xbd, 0x5f, 0x32, 0x8f, 0x65, 0x40, 0x04, 0xb5, 0xce, 0xa5, 0x35, 0x79, 0x4d, 0x00, + 0x06, 0x41, 0x58, 0x47, 0x81, 0x38, 0x8b, 0x8a, 0x90, 0xd6, 0xcc, 0xcf, 0x46, 0x2e, 0x89, 0x48, + 0x41, 0x06, 0x43, 0xe8, 0xa3, 0xf3, 0xfc, 0x33, 0x65, 0xfb, 0x4f, 0x31, 0xcb, 0x5f, 0xd9, 0xa9, + 0x75, 0x54, 0xb5, 0x4a, 0xbb, 0x75, 0xa5, 0x7d, 0x30, 0x18, 0xad, 0x59, 0xb2, 0x98, 0x2c, 0x0f, + 0xae, 0x2e, 0xc4, 0x96, 0x2a, 0xfa, 0xcc, 0xb0, 0xde, 0x6d, 0xed, 0xe5, 0xc9, 0x00, 0x19, 0x5d, + 0xfa, 0x0d, 0x5c, 0x11, 0xfa, 0xb6, 0xf9, 0x0b, 0x4f, 0x77, 0x83, 0x0f, 0x90, 0x31, 0x7c, 0xfe, + 0xcc, 0xf8, 0x7f, 0x2f, 0xbf, 0x64, 0xbc, 0x21, 0x34, 0x81, 0x9c, 0xae, 0xd6, 0x4e, 0x7b, 0x6a, + 0x9d, 0xd2, 0xd9, 0x64, 0x91, 0x2c, 0x67, 0xe5, 0xf1, 0x8f, 0x52, 0xf6, 0x02, 0xe7, 0x6c, 0x5a, + 0x13, 0xc4, 0x69, 0x67, 0x65, 0xb7, 0x5f, 0x21, 0x3b, 0x52, 0xd4, 0x8c, 0xfe, 0xb6, 0x3a, 0xec, + 0x1f, 0x2a, 0x36, 0xf5, 0x15, 0xc9, 0xcb, 0x7d, 0xaf, 0x01, 0xd5, 0x12, 0x41, 0x90, 0x83, 0x1c, + 0x34, 0x76, 0xe5, 0xe6, 0x51, 0x92, 0xd6, 0xf8, 0xae, 0x7d, 0xaf, 0xdd, 0x87, 0x51, 0x5a, 0x11, + 0xbe, 0x1b, 0xb8, 0xf9, 0x75, 0xfa, 0x4a, 0xa7, 0x0f, 0xb7, 0xc5, 0xe3, 0xdb, 0x5e, 0x17, 0xbc, + 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x73, 0x4f, 0x86, 0x6e, 0xdb, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.pb.go new file mode 100644 index 0000000..3dde768 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.pb.go @@ -0,0 +1,144 @@ +// Code generated by protoc-gen-go. +// source: google/api/monitoring.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Monitoring configuration of the service. +// +// The example below shows how to configure monitored resources and metrics +// for monitoring. In the example, a monitored resource and two metrics are +// defined. The `library.googleapis.com/book/returned_count` metric is sent +// to both producer and consumer projects, whereas the +// `library.googleapis.com/book/overdue_count` metric is only sent to the +// consumer project. +// +// monitored_resources: +// - type: library.googleapis.com/branch +// labels: +// - key: /city +// description: The city where the library branch is located in. +// - key: /name +// description: The name of the branch. +// metrics: +// - name: library.googleapis.com/book/returned_count +// metric_kind: DELTA +// value_type: INT64 +// labels: +// - key: /customer_id +// - name: library.googleapis.com/book/overdue_count +// metric_kind: GAUGE +// value_type: INT64 +// labels: +// - key: /customer_id +// monitoring: +// producer_destinations: +// - monitored_resource: library.googleapis.com/branch +// metrics: +// - library.googleapis.com/book/returned_count +// consumer_destinations: +// - monitored_resource: library.googleapis.com/branch +// metrics: +// - library.googleapis.com/book/returned_count +// - library.googleapis.com/book/overdue_count +type Monitoring struct { + // Monitoring configurations for sending metrics to the producer project. + // There can be multiple producer destinations, each one must have a + // different monitored resource type. A metric can be used in at most + // one producer destination. + ProducerDestinations []*Monitoring_MonitoringDestination `protobuf:"bytes,1,rep,name=producer_destinations,json=producerDestinations" json:"producer_destinations,omitempty"` + // Monitoring configurations for sending metrics to the consumer project. + // There can be multiple consumer destinations, each one must have a + // different monitored resource type. A metric can be used in at most + // one consumer destination. + ConsumerDestinations []*Monitoring_MonitoringDestination `protobuf:"bytes,2,rep,name=consumer_destinations,json=consumerDestinations" json:"consumer_destinations,omitempty"` +} + +func (m *Monitoring) Reset() { *m = Monitoring{} } +func (m *Monitoring) String() string { return proto.CompactTextString(m) } +func (*Monitoring) ProtoMessage() {} +func (*Monitoring) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{0} } + +func (m *Monitoring) GetProducerDestinations() []*Monitoring_MonitoringDestination { + if m != nil { + return m.ProducerDestinations + } + return nil +} + +func (m *Monitoring) GetConsumerDestinations() []*Monitoring_MonitoringDestination { + if m != nil { + return m.ConsumerDestinations + } + return nil +} + +// Configuration of a specific monitoring destination (the producer project +// or the consumer project). +type Monitoring_MonitoringDestination struct { + // The monitored resource type. The type must be defined in + // [Service.monitored_resources][google.api.Service.monitored_resources] section. + MonitoredResource string `protobuf:"bytes,1,opt,name=monitored_resource,json=monitoredResource" json:"monitored_resource,omitempty"` + // Names of the metrics to report to this monitoring destination. + // Each name must be defined in [Service.metrics][google.api.Service.metrics] section. + Metrics []string `protobuf:"bytes,2,rep,name=metrics" json:"metrics,omitempty"` +} + +func (m *Monitoring_MonitoringDestination) Reset() { *m = Monitoring_MonitoringDestination{} } +func (m *Monitoring_MonitoringDestination) String() string { return proto.CompactTextString(m) } +func (*Monitoring_MonitoringDestination) ProtoMessage() {} +func (*Monitoring_MonitoringDestination) Descriptor() ([]byte, []int) { + return fileDescriptor10, []int{0, 0} +} + +func (m *Monitoring_MonitoringDestination) GetMonitoredResource() string { + if m != nil { + return m.MonitoredResource + } + return "" +} + +func (m *Monitoring_MonitoringDestination) GetMetrics() []string { + if m != nil { + return m.Metrics + } + return nil +} + +func init() { + proto.RegisterType((*Monitoring)(nil), "google.api.Monitoring") + proto.RegisterType((*Monitoring_MonitoringDestination)(nil), "google.api.Monitoring.MonitoringDestination") +} + +func init() { proto.RegisterFile("google/api/monitoring.proto", fileDescriptor10) } + +var fileDescriptor10 = []byte{ + // 271 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x51, 0xcd, 0x4a, 0xc4, 0x30, + 0x10, 0xa6, 0x55, 0x94, 0x8d, 0xa0, 0x58, 0x5c, 0x28, 0xab, 0x87, 0xc5, 0xd3, 0x1e, 0xb4, 0x05, + 0x3d, 0x7a, 0x72, 0x51, 0xc4, 0x83, 0x50, 0x7a, 0xf4, 0xb2, 0xc6, 0x74, 0x0c, 0x03, 0xdb, 0x99, + 0x9a, 0xa4, 0x3e, 0x90, 0xcf, 0xe0, 0x03, 0xca, 0x36, 0xed, 0x36, 0x8a, 0x27, 0x6f, 0x99, 0x7c, + 0x7f, 0xc3, 0x37, 0xe2, 0x54, 0x33, 0xeb, 0x35, 0xe4, 0xb2, 0xc1, 0xbc, 0x66, 0x42, 0xc7, 0x06, + 0x49, 0x67, 0x8d, 0x61, 0xc7, 0x89, 0xf0, 0x60, 0x26, 0x1b, 0x9c, 0x9d, 0x05, 0x44, 0x49, 0xc4, + 0x4e, 0x3a, 0x64, 0xb2, 0x9e, 0x79, 0xfe, 0x15, 0x0b, 0xf1, 0xb4, 0x95, 0x27, 0x52, 0x4c, 0x1b, + 0xc3, 0x55, 0xab, 0xc0, 0xac, 0x2a, 0xb0, 0x0e, 0xc9, 0xb3, 0xd3, 0x68, 0xbe, 0xb3, 0x38, 0xb8, + 0xba, 0xc8, 0x46, 0xe3, 0x6c, 0x94, 0x05, 0xcf, 0xbb, 0x51, 0x54, 0x9e, 0x0c, 0x56, 0xc1, 0xa7, + 0xdd, 0x44, 0x28, 0x26, 0xdb, 0xd6, 0xbf, 0x23, 0xe2, 0xff, 0x44, 0x0c, 0x56, 0x61, 0xc4, 0xec, + 0x45, 0x4c, 0xff, 0xa4, 0x27, 0x97, 0x22, 0xe9, 0xbb, 0x82, 0x6a, 0x65, 0xc0, 0x72, 0x6b, 0x14, + 0xa4, 0xd1, 0x3c, 0x5a, 0x4c, 0xca, 0xe3, 0x2d, 0x52, 0xf6, 0x40, 0x92, 0x8a, 0xfd, 0x1a, 0x9c, + 0x41, 0xe5, 0x97, 0x9b, 0x94, 0xc3, 0xb8, 0x7c, 0x17, 0x87, 0x8a, 0xeb, 0x60, 0xd5, 0xe5, 0xd1, + 0x98, 0x58, 0x6c, 0x9a, 0x2d, 0xa2, 0xe7, 0xfb, 0x1e, 0xd6, 0xbc, 0x96, 0xa4, 0x33, 0x36, 0x3a, + 0xd7, 0x40, 0x5d, 0xef, 0xb9, 0x87, 0x64, 0x83, 0xb6, 0x3b, 0x8c, 0x05, 0xf3, 0x81, 0x0a, 0x14, + 0xd3, 0x1b, 0xea, 0x9b, 0x1f, 0xd3, 0x67, 0xbc, 0xfb, 0x70, 0x5b, 0x3c, 0xbe, 0xee, 0x75, 0xc2, + 0xeb, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x51, 0x35, 0xf3, 0xe2, 0xf9, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/service.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/service.pb.go new file mode 100644 index 0000000..e2ce14d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/service.pb.go @@ -0,0 +1,348 @@ +// Code generated by protoc-gen-go. +// source: google/api/service.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api5 "google.golang.org/genproto/googleapis/api" +import google_api "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/label" +import google_api3 "google.golang.org/genproto/googleapis/api/metric" +import google_api6 "google.golang.org/genproto/googleapis/api/monitoredres" +import _ "github.com/golang/protobuf/ptypes/any" +import google_protobuf4 "google.golang.org/genproto/protobuf/api" +import google_protobuf3 "google.golang.org/genproto/protobuf/ptype" +import google_protobuf5 "github.com/golang/protobuf/ptypes/wrappers" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `Service` is the root object of Google service configuration schema. It +// describes basic information about a service, such as the name and the +// title, and delegates other aspects to sub-sections. Each sub-section is +// either a proto message or a repeated proto message that configures a +// specific aspect, such as auth. See each proto message definition for details. +// +// Example: +// +// type: google.api.Service +// config_version: 3 +// name: calendar.googleapis.com +// title: Google Calendar API +// apis: +// - name: google.calendar.v3.Calendar +// authentication: +// providers: +// - id: google_calendar_auth +// jwks_uri: https://www.googleapis.com/oauth2/v1/certs +// issuer: https://securetoken.google.com +// rules: +// - selector: "*" +// requirements: +// provider_id: google_calendar_auth +type Service struct { + // The version of the service configuration. The config version may + // influence interpretation of the configuration, for example, to + // determine defaults. This is documented together with applicable + // options. The current default for the config version itself is `3`. + ConfigVersion *google_protobuf5.UInt32Value `protobuf:"bytes,20,opt,name=config_version,json=configVersion" json:"config_version,omitempty"` + // The DNS address at which this service is available, + // e.g. `calendar.googleapis.com`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A unique ID for a specific instance of this message, typically assigned + // by the client for tracking purpose. If empty, the server may choose to + // generate one instead. + Id string `protobuf:"bytes,33,opt,name=id" json:"id,omitempty"` + // The product title associated with this service. + Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + // The id of the Google developer project that owns the service. + // Members of this project can manage the service configuration, + // manage consumption of the service, etc. + ProducerProjectId string `protobuf:"bytes,22,opt,name=producer_project_id,json=producerProjectId" json:"producer_project_id,omitempty"` + // A list of API interfaces exported by this service. Only the `name` field + // of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration + // author, as the remaining fields will be derived from the IDL during the + // normalization process. It is an error to specify an API interface here + // which cannot be resolved against the associated IDL files. + Apis []*google_protobuf4.Api `protobuf:"bytes,3,rep,name=apis" json:"apis,omitempty"` + // A list of all proto message types included in this API service. + // Types referenced directly or indirectly by the `apis` are + // automatically included. Messages which are not referenced but + // shall be included, such as types used by the `google.protobuf.Any` type, + // should be listed here by name. Example: + // + // types: + // - name: google.protobuf.Int32 + Types []*google_protobuf3.Type `protobuf:"bytes,4,rep,name=types" json:"types,omitempty"` + // A list of all enum types included in this API service. Enums + // referenced directly or indirectly by the `apis` are automatically + // included. Enums which are not referenced but shall be included + // should be listed here by name. Example: + // + // enums: + // - name: google.someapi.v1.SomeEnum + Enums []*google_protobuf3.Enum `protobuf:"bytes,5,rep,name=enums" json:"enums,omitempty"` + // Additional API documentation. + Documentation *Documentation `protobuf:"bytes,6,opt,name=documentation" json:"documentation,omitempty"` + // API backend configuration. + Backend *Backend `protobuf:"bytes,8,opt,name=backend" json:"backend,omitempty"` + // HTTP configuration. + Http *google_api.Http `protobuf:"bytes,9,opt,name=http" json:"http,omitempty"` + // Auth configuration. + Authentication *Authentication `protobuf:"bytes,11,opt,name=authentication" json:"authentication,omitempty"` + // Context configuration. + Context *Context `protobuf:"bytes,12,opt,name=context" json:"context,omitempty"` + // Configuration controlling usage of this service. + Usage *Usage `protobuf:"bytes,15,opt,name=usage" json:"usage,omitempty"` + // Configuration for network endpoints. If this is empty, then an endpoint + // with the same name as the service is automatically generated to service all + // defined APIs. + Endpoints []*Endpoint `protobuf:"bytes,18,rep,name=endpoints" json:"endpoints,omitempty"` + // Configuration for the service control plane. + Control *Control `protobuf:"bytes,21,opt,name=control" json:"control,omitempty"` + // Defines the logs used by this service. + Logs []*LogDescriptor `protobuf:"bytes,23,rep,name=logs" json:"logs,omitempty"` + // Defines the metrics used by this service. + Metrics []*google_api3.MetricDescriptor `protobuf:"bytes,24,rep,name=metrics" json:"metrics,omitempty"` + // Defines the monitored resources used by this service. This is required + // by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations. + MonitoredResources []*google_api6.MonitoredResourceDescriptor `protobuf:"bytes,25,rep,name=monitored_resources,json=monitoredResources" json:"monitored_resources,omitempty"` + // Logging configuration. + Logging *Logging `protobuf:"bytes,27,opt,name=logging" json:"logging,omitempty"` + // Monitoring configuration. + Monitoring *Monitoring `protobuf:"bytes,28,opt,name=monitoring" json:"monitoring,omitempty"` + // System parameter configuration. + SystemParameters *SystemParameters `protobuf:"bytes,29,opt,name=system_parameters,json=systemParameters" json:"system_parameters,omitempty"` + // Experimental configuration. + Experimental *google_api5.Experimental `protobuf:"bytes,101,opt,name=experimental" json:"experimental,omitempty"` +} + +func (m *Service) Reset() { *m = Service{} } +func (m *Service) String() string { return proto.CompactTextString(m) } +func (*Service) ProtoMessage() {} +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{0} } + +func (m *Service) GetConfigVersion() *google_protobuf5.UInt32Value { + if m != nil { + return m.ConfigVersion + } + return nil +} + +func (m *Service) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Service) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Service) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Service) GetProducerProjectId() string { + if m != nil { + return m.ProducerProjectId + } + return "" +} + +func (m *Service) GetApis() []*google_protobuf4.Api { + if m != nil { + return m.Apis + } + return nil +} + +func (m *Service) GetTypes() []*google_protobuf3.Type { + if m != nil { + return m.Types + } + return nil +} + +func (m *Service) GetEnums() []*google_protobuf3.Enum { + if m != nil { + return m.Enums + } + return nil +} + +func (m *Service) GetDocumentation() *Documentation { + if m != nil { + return m.Documentation + } + return nil +} + +func (m *Service) GetBackend() *Backend { + if m != nil { + return m.Backend + } + return nil +} + +func (m *Service) GetHttp() *google_api.Http { + if m != nil { + return m.Http + } + return nil +} + +func (m *Service) GetAuthentication() *Authentication { + if m != nil { + return m.Authentication + } + return nil +} + +func (m *Service) GetContext() *Context { + if m != nil { + return m.Context + } + return nil +} + +func (m *Service) GetUsage() *Usage { + if m != nil { + return m.Usage + } + return nil +} + +func (m *Service) GetEndpoints() []*Endpoint { + if m != nil { + return m.Endpoints + } + return nil +} + +func (m *Service) GetControl() *Control { + if m != nil { + return m.Control + } + return nil +} + +func (m *Service) GetLogs() []*LogDescriptor { + if m != nil { + return m.Logs + } + return nil +} + +func (m *Service) GetMetrics() []*google_api3.MetricDescriptor { + if m != nil { + return m.Metrics + } + return nil +} + +func (m *Service) GetMonitoredResources() []*google_api6.MonitoredResourceDescriptor { + if m != nil { + return m.MonitoredResources + } + return nil +} + +func (m *Service) GetLogging() *Logging { + if m != nil { + return m.Logging + } + return nil +} + +func (m *Service) GetMonitoring() *Monitoring { + if m != nil { + return m.Monitoring + } + return nil +} + +func (m *Service) GetSystemParameters() *SystemParameters { + if m != nil { + return m.SystemParameters + } + return nil +} + +func (m *Service) GetExperimental() *google_api5.Experimental { + if m != nil { + return m.Experimental + } + return nil +} + +func init() { + proto.RegisterType((*Service)(nil), "google.api.Service") +} + +func init() { proto.RegisterFile("google/api/service.proto", fileDescriptor11) } + +var fileDescriptor11 = []byte{ + // 756 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x95, 0x5f, 0x4f, 0xdb, 0x3a, + 0x14, 0xc0, 0xd5, 0xd2, 0xc2, 0xad, 0xf9, 0x73, 0xc1, 0x14, 0x30, 0xa5, 0xf7, 0x0a, 0xb6, 0x49, + 0x54, 0x9b, 0x48, 0xa5, 0x22, 0xf1, 0xb2, 0x49, 0x13, 0x05, 0xb4, 0x55, 0x62, 0x52, 0x65, 0x06, + 0x9a, 0xf6, 0x52, 0xa5, 0x89, 0x09, 0xde, 0x12, 0xdb, 0xb2, 0x1d, 0x46, 0x5f, 0xf7, 0x51, 0xf6, + 0x49, 0xa7, 0xd8, 0x09, 0x75, 0xda, 0xf2, 0x86, 0xfd, 0xfb, 0x9d, 0xc3, 0x71, 0xec, 0x73, 0x0a, + 0x50, 0xc4, 0x79, 0x14, 0x93, 0xae, 0x2f, 0x68, 0x57, 0x11, 0xf9, 0x48, 0x03, 0xe2, 0x09, 0xc9, + 0x35, 0x87, 0xc0, 0x12, 0xcf, 0x17, 0xb4, 0xd5, 0x76, 0x2c, 0x9f, 0x31, 0xae, 0x7d, 0x4d, 0x39, + 0x53, 0xd6, 0x6c, 0xed, 0xb8, 0x34, 0xd5, 0x0f, 0xf9, 0xb6, 0x9b, 0x7a, 0xec, 0x07, 0x3f, 0x09, + 0x0b, 0x17, 0x90, 0x80, 0x33, 0x4d, 0x9e, 0xf4, 0x0b, 0x44, 0xf2, 0x38, 0x27, 0xff, 0x3b, 0x24, + 0xe4, 0x41, 0x9a, 0x10, 0x66, 0xab, 0xc8, 0xf9, 0xbe, 0xc3, 0x09, 0x0b, 0x05, 0xa7, 0xac, 0x48, + 0xfa, 0xd6, 0x45, 0x4f, 0x82, 0x48, 0x6a, 0x82, 0xe3, 0xd2, 0x62, 0xc1, 0x59, 0x1e, 0xb4, 0x16, + 0xf9, 0xf6, 0xae, 0xb3, 0x1d, 0xfb, 0x63, 0x52, 0xe8, 0x4d, 0x77, 0x9f, 0x47, 0x0b, 0x4e, 0x11, + 0xf3, 0x28, 0xa2, 0xac, 0x20, 0x7b, 0x0e, 0x49, 0x88, 0x96, 0x34, 0xc8, 0xc1, 0x6b, 0x17, 0x70, + 0x46, 0x35, 0x97, 0x24, 0x1c, 0x49, 0xa2, 0x78, 0x2a, 0x8b, 0x2b, 0x69, 0x1d, 0xcc, 0x4b, 0xd3, + 0xd4, 0x47, 0xee, 0x4d, 0x4e, 0x94, 0x26, 0xc9, 0x48, 0xf8, 0xd2, 0x4f, 0x88, 0x26, 0x72, 0xc1, + 0x29, 0x52, 0xe5, 0x47, 0x64, 0xe6, 0xdb, 0x99, 0xd5, 0x38, 0xbd, 0xef, 0xfa, 0x6c, 0xf2, 0x22, + 0x12, 0x34, 0x47, 0xad, 0x59, 0xa4, 0x27, 0x82, 0xcc, 0xdc, 0xd6, 0x33, 0xfb, 0x25, 0x7d, 0x21, + 0x88, 0xcc, 0x9f, 0xcc, 0xab, 0xdf, 0x0d, 0xb0, 0x72, 0x63, 0x9f, 0x1b, 0xbc, 0x00, 0x1b, 0x01, + 0x67, 0xf7, 0x34, 0x1a, 0x3d, 0x12, 0xa9, 0x28, 0x67, 0xa8, 0x79, 0x58, 0xe9, 0xac, 0xf6, 0xda, + 0x5e, 0xfe, 0x02, 0x8b, 0x24, 0xde, 0xed, 0x80, 0xe9, 0xd3, 0xde, 0x9d, 0x1f, 0xa7, 0x04, 0xaf, + 0xdb, 0x98, 0x3b, 0x1b, 0x02, 0x21, 0xa8, 0x31, 0x3f, 0x21, 0xa8, 0x72, 0x58, 0xe9, 0x34, 0xb0, + 0xf9, 0x1b, 0x6e, 0x80, 0x2a, 0x0d, 0xd1, 0x91, 0xd9, 0xa9, 0xd2, 0x10, 0x36, 0x41, 0x5d, 0x53, + 0x1d, 0x13, 0x54, 0x35, 0x5b, 0x76, 0x01, 0x3d, 0xb0, 0x2d, 0x24, 0x0f, 0xd3, 0x80, 0xc8, 0x91, + 0x90, 0xfc, 0x07, 0x09, 0xf4, 0x88, 0x86, 0x68, 0xd7, 0x38, 0x5b, 0x05, 0x1a, 0x5a, 0x32, 0x08, + 0x61, 0x07, 0xd4, 0x7c, 0x41, 0x15, 0x5a, 0x3a, 0x5c, 0xea, 0xac, 0xf6, 0x9a, 0x73, 0x45, 0x9e, + 0x0b, 0x8a, 0x8d, 0x01, 0xdf, 0x81, 0x7a, 0xf6, 0x49, 0x14, 0xaa, 0x19, 0x75, 0x67, 0x4e, 0xfd, + 0x3a, 0x11, 0x04, 0x5b, 0x27, 0x93, 0x09, 0x4b, 0x13, 0x85, 0xea, 0x2f, 0xc8, 0x57, 0x2c, 0x4d, + 0xb0, 0x75, 0xe0, 0x47, 0xb0, 0x5e, 0xea, 0x01, 0xb4, 0x6c, 0xbe, 0xd8, 0xbe, 0x37, 0xed, 0x59, + 0xef, 0xd2, 0x15, 0x70, 0xd9, 0x87, 0x27, 0x60, 0x25, 0x6f, 0x49, 0xf4, 0x8f, 0x09, 0xdd, 0x76, + 0x43, 0xfb, 0x16, 0xe1, 0xc2, 0x81, 0x6f, 0x40, 0x2d, 0x6b, 0x06, 0xd4, 0x30, 0xee, 0xa6, 0xeb, + 0x7e, 0xd6, 0x5a, 0x60, 0x43, 0x61, 0x1f, 0x6c, 0x64, 0xed, 0x4f, 0x98, 0xa6, 0x81, 0x2d, 0x6b, + 0xd5, 0xf8, 0x2d, 0xd7, 0x3f, 0x2f, 0x19, 0x78, 0x26, 0x22, 0x2b, 0x2c, 0x9f, 0x08, 0x68, 0x6d, + 0xbe, 0xb0, 0x0b, 0x8b, 0x70, 0xe1, 0xc0, 0x63, 0x50, 0x37, 0x0f, 0x19, 0xfd, 0x6b, 0xe4, 0x2d, + 0x57, 0xbe, 0xcd, 0x00, 0xb6, 0x1c, 0xf6, 0x40, 0xa3, 0x98, 0x0a, 0x0a, 0xc1, 0xf2, 0xd5, 0x65, + 0xf2, 0x55, 0x0e, 0xf1, 0x54, 0x2b, 0x6a, 0x91, 0x3c, 0x46, 0x3b, 0x8b, 0x6b, 0x91, 0x3c, 0xc6, + 0x85, 0x03, 0x4f, 0x40, 0x2d, 0xe6, 0x91, 0x42, 0x7b, 0x26, 0x7b, 0xe9, 0x2e, 0xae, 0x79, 0x74, + 0x49, 0x54, 0x20, 0xa9, 0xd0, 0x5c, 0x62, 0xa3, 0xc1, 0x33, 0xb0, 0x62, 0x27, 0x80, 0x42, 0xc8, + 0x44, 0xb4, 0xdd, 0x88, 0x2f, 0x06, 0x39, 0x41, 0x85, 0x0c, 0xbf, 0x81, 0xed, 0xf9, 0x01, 0xa1, + 0xd0, 0xbe, 0xc9, 0x71, 0x5c, 0xca, 0x51, 0x68, 0x38, 0xb7, 0x9c, 0x74, 0x30, 0x99, 0x85, 0xe6, + 0xbc, 0xf9, 0xb4, 0x42, 0x07, 0xf3, 0xe7, 0xbd, 0xb6, 0x08, 0x17, 0x0e, 0x3c, 0x03, 0x60, 0x3a, + 0x84, 0x50, 0xdb, 0x44, 0xec, 0x2e, 0xf8, 0xff, 0x59, 0x90, 0x63, 0xc2, 0x01, 0xd8, 0x9a, 0x9d, + 0x4f, 0x0a, 0xfd, 0x57, 0x6e, 0xf9, 0x2c, 0xfc, 0xc6, 0x48, 0xc3, 0x67, 0x07, 0x6f, 0xaa, 0x99, + 0x1d, 0xf8, 0x01, 0xac, 0xb9, 0x33, 0x1c, 0x11, 0x93, 0x05, 0x95, 0x2e, 0xd6, 0xe1, 0xb8, 0x64, + 0xf7, 0x59, 0x36, 0x78, 0x12, 0x47, 0xee, 0xaf, 0xe5, 0x33, 0x69, 0x98, 0x35, 0xdd, 0xb0, 0xf2, + 0xfd, 0x2a, 0x67, 0x11, 0x8f, 0x7d, 0x16, 0x79, 0x5c, 0x46, 0xdd, 0x88, 0x30, 0xd3, 0x92, 0x5d, + 0x8b, 0xb2, 0x46, 0x77, 0x7f, 0x3c, 0xed, 0x54, 0x7a, 0x5f, 0x5a, 0xfd, 0xa9, 0xd6, 0x3e, 0x9d, + 0x0f, 0x07, 0xe3, 0x65, 0x13, 0x78, 0xfa, 0x37, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xee, 0x78, 0x1f, + 0x74, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.pb.go new file mode 100644 index 0000000..937416e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.pb.go @@ -0,0 +1,170 @@ +// Code generated by protoc-gen-go. +// source: google/api/system_parameter.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// ### System parameter configuration +// +// A system parameter is a special kind of parameter defined by the API +// system, not by an individual API. It is typically mapped to an HTTP header +// and/or a URL query parameter. This configuration specifies which methods +// change the names of the system parameters. +type SystemParameters struct { + // Define system parameters. + // + // The parameters defined here will override the default parameters + // implemented by the system. If this field is missing from the service + // config, default system parameters will be used. Default system parameters + // and names is implementation-dependent. + // + // Example: define api key for all methods + // + // system_parameters + // rules: + // - selector: "*" + // parameters: + // - name: api_key + // url_query_parameter: api_key + // + // + // Example: define 2 api key names for a specific method. + // + // system_parameters + // rules: + // - selector: "/ListShelves" + // parameters: + // - name: api_key + // http_header: Api-Key1 + // - name: api_key + // http_header: Api-Key2 + // + // **NOTE:** All service configuration rules follow "last one wins" order. + Rules []*SystemParameterRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` +} + +func (m *SystemParameters) Reset() { *m = SystemParameters{} } +func (m *SystemParameters) String() string { return proto.CompactTextString(m) } +func (*SystemParameters) ProtoMessage() {} +func (*SystemParameters) Descriptor() ([]byte, []int) { return fileDescriptor12, []int{0} } + +func (m *SystemParameters) GetRules() []*SystemParameterRule { + if m != nil { + return m.Rules + } + return nil +} + +// Define a system parameter rule mapping system parameter definitions to +// methods. +type SystemParameterRule struct { + // Selects the methods to which this rule applies. Use '*' to indicate all + // methods in all APIs. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` + // Define parameters. Multiple names may be defined for a parameter. + // For a given method call, only one of them should be used. If multiple + // names are used the behavior is implementation-dependent. + // If none of the specified names are present the behavior is + // parameter-dependent. + Parameters []*SystemParameter `protobuf:"bytes,2,rep,name=parameters" json:"parameters,omitempty"` +} + +func (m *SystemParameterRule) Reset() { *m = SystemParameterRule{} } +func (m *SystemParameterRule) String() string { return proto.CompactTextString(m) } +func (*SystemParameterRule) ProtoMessage() {} +func (*SystemParameterRule) Descriptor() ([]byte, []int) { return fileDescriptor12, []int{1} } + +func (m *SystemParameterRule) GetSelector() string { + if m != nil { + return m.Selector + } + return "" +} + +func (m *SystemParameterRule) GetParameters() []*SystemParameter { + if m != nil { + return m.Parameters + } + return nil +} + +// Define a parameter's name and location. The parameter may be passed as either +// an HTTP header or a URL query parameter, and if both are passed the behavior +// is implementation-dependent. +type SystemParameter struct { + // Define the name of the parameter, such as "api_key" . It is case sensitive. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Define the HTTP header name to use for the parameter. It is case + // insensitive. + HttpHeader string `protobuf:"bytes,2,opt,name=http_header,json=httpHeader" json:"http_header,omitempty"` + // Define the URL query parameter name to use for the parameter. It is case + // sensitive. + UrlQueryParameter string `protobuf:"bytes,3,opt,name=url_query_parameter,json=urlQueryParameter" json:"url_query_parameter,omitempty"` +} + +func (m *SystemParameter) Reset() { *m = SystemParameter{} } +func (m *SystemParameter) String() string { return proto.CompactTextString(m) } +func (*SystemParameter) ProtoMessage() {} +func (*SystemParameter) Descriptor() ([]byte, []int) { return fileDescriptor12, []int{2} } + +func (m *SystemParameter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *SystemParameter) GetHttpHeader() string { + if m != nil { + return m.HttpHeader + } + return "" +} + +func (m *SystemParameter) GetUrlQueryParameter() string { + if m != nil { + return m.UrlQueryParameter + } + return "" +} + +func init() { + proto.RegisterType((*SystemParameters)(nil), "google.api.SystemParameters") + proto.RegisterType((*SystemParameterRule)(nil), "google.api.SystemParameterRule") + proto.RegisterType((*SystemParameter)(nil), "google.api.SystemParameter") +} + +func init() { proto.RegisterFile("google/api/system_parameter.proto", fileDescriptor12) } + +var fileDescriptor12 = []byte{ + // 286 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xbf, 0x4e, 0xc3, 0x30, + 0x10, 0x87, 0x95, 0xb6, 0x20, 0xb8, 0x4a, 0xfc, 0x71, 0x19, 0x22, 0x18, 0x5a, 0x3a, 0x75, 0x72, + 0x24, 0x10, 0x53, 0x27, 0x2a, 0x21, 0xe8, 0x16, 0xca, 0xc6, 0x12, 0x99, 0x70, 0xb8, 0x91, 0x9c, + 0xd8, 0x9c, 0x9d, 0x48, 0x7d, 0x1d, 0x9e, 0x14, 0xc5, 0x29, 0x69, 0x89, 0x10, 0x9b, 0xef, 0xbe, + 0xcf, 0xfa, 0x9d, 0xee, 0xe0, 0x5a, 0x6a, 0x2d, 0x15, 0x46, 0xc2, 0x64, 0x91, 0xdd, 0x58, 0x87, + 0x79, 0x62, 0x04, 0x89, 0x1c, 0x1d, 0x12, 0x37, 0xa4, 0x9d, 0x66, 0xd0, 0x28, 0x5c, 0x98, 0x6c, + 0xba, 0x84, 0xb3, 0x17, 0x6f, 0xc5, 0x3f, 0x92, 0x65, 0x77, 0x70, 0x40, 0xa5, 0x42, 0x1b, 0x06, + 0x93, 0xfe, 0x6c, 0x78, 0x33, 0xe6, 0x3b, 0x9f, 0x77, 0xe4, 0x55, 0xa9, 0x70, 0xd5, 0xd8, 0xd3, + 0x02, 0x46, 0x7f, 0x50, 0x76, 0x09, 0x47, 0x16, 0x15, 0xa6, 0x4e, 0x53, 0x18, 0x4c, 0x82, 0xd9, + 0xf1, 0xaa, 0xad, 0xd9, 0x1c, 0xa0, 0x1d, 0xce, 0x86, 0x3d, 0x1f, 0x77, 0xf5, 0x5f, 0xdc, 0x9e, + 0x3e, 0xad, 0xe0, 0xb4, 0x83, 0x19, 0x83, 0x41, 0x21, 0x72, 0xdc, 0xe6, 0xf8, 0x37, 0x1b, 0xc3, + 0x70, 0xed, 0x9c, 0x49, 0xd6, 0x28, 0xde, 0x91, 0xc2, 0x9e, 0x47, 0x50, 0xb7, 0x9e, 0x7c, 0x87, + 0x71, 0x18, 0x95, 0xa4, 0x92, 0xcf, 0x12, 0x69, 0xb3, 0xdb, 0x55, 0xd8, 0xf7, 0xe2, 0x79, 0x49, + 0xea, 0xb9, 0x26, 0x6d, 0xc8, 0xa2, 0x82, 0x93, 0x54, 0xe7, 0x7b, 0x53, 0x2e, 0x2e, 0x3a, 0x73, + 0xc4, 0xf5, 0x9a, 0xe3, 0xe0, 0xf5, 0x61, 0xeb, 0x48, 0xad, 0x44, 0x21, 0xb9, 0x26, 0x19, 0x49, + 0x2c, 0xfc, 0x11, 0xa2, 0x06, 0x09, 0x93, 0xd9, 0xe6, 0x54, 0x48, 0x55, 0x96, 0x62, 0xaa, 0x8b, + 0x8f, 0x4c, 0xce, 0x7f, 0x55, 0x5f, 0xbd, 0xc1, 0xe3, 0x7d, 0xbc, 0x7c, 0x3b, 0xf4, 0x1f, 0x6f, + 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x5e, 0xdf, 0x2e, 0x09, 0xe2, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/usage.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/usage.pb.go new file mode 100644 index 0000000..cabacf8 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/usage.pb.go @@ -0,0 +1,146 @@ +// Code generated by protoc-gen-go. +// source: google/api/usage.proto +// DO NOT EDIT! + +package serviceconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Configuration controlling usage of a service. +type Usage struct { + // Requirements that must be satisfied before a consumer project can use the + // service. Each requirement is of the form <service.name>/<requirement-id>; + // for example 'serviceusage.googleapis.com/billing-enabled'. + Requirements []string `protobuf:"bytes,1,rep,name=requirements" json:"requirements,omitempty"` + // A list of usage rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + Rules []*UsageRule `protobuf:"bytes,6,rep,name=rules" json:"rules,omitempty"` + // The full resource name of a channel used for sending notifications to the + // service producer. + // + // Google Service Management currently only supports + // [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification + // channel. To use Google Cloud Pub/Sub as the channel, this must be the name + // of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format + // documented in https://cloud.google.com/pubsub/docs/overview. + ProducerNotificationChannel string `protobuf:"bytes,7,opt,name=producer_notification_channel,json=producerNotificationChannel" json:"producer_notification_channel,omitempty"` +} + +func (m *Usage) Reset() { *m = Usage{} } +func (m *Usage) String() string { return proto.CompactTextString(m) } +func (*Usage) ProtoMessage() {} +func (*Usage) Descriptor() ([]byte, []int) { return fileDescriptor13, []int{0} } + +func (m *Usage) GetRequirements() []string { + if m != nil { + return m.Requirements + } + return nil +} + +func (m *Usage) GetRules() []*UsageRule { + if m != nil { + return m.Rules + } + return nil +} + +func (m *Usage) GetProducerNotificationChannel() string { + if m != nil { + return m.ProducerNotificationChannel + } + return "" +} + +// Usage configuration rules for the service. +// +// NOTE: Under development. +// +// +// Use this rule to configure unregistered calls for the service. Unregistered +// calls are calls that do not contain consumer project identity. +// (Example: calls that do not contain an API key). +// By default, API methods do not allow unregistered calls, and each method call +// must be identified by a consumer project identity. Use this rule to +// allow/disallow unregistered calls. +// +// Example of an API that wants to allow unregistered calls for entire service. +// +// usage: +// rules: +// - selector: "*" +// allow_unregistered_calls: true +// +// Example of a method that wants to allow unregistered calls. +// +// usage: +// rules: +// - selector: "google.example.library.v1.LibraryService.CreateBook" +// allow_unregistered_calls: true +type UsageRule struct { + // Selects the methods to which this rule applies. Use '*' to indicate all + // methods in all APIs. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` + // True, if the method allows unregistered calls; false otherwise. + AllowUnregisteredCalls bool `protobuf:"varint,2,opt,name=allow_unregistered_calls,json=allowUnregisteredCalls" json:"allow_unregistered_calls,omitempty"` +} + +func (m *UsageRule) Reset() { *m = UsageRule{} } +func (m *UsageRule) String() string { return proto.CompactTextString(m) } +func (*UsageRule) ProtoMessage() {} +func (*UsageRule) Descriptor() ([]byte, []int) { return fileDescriptor13, []int{1} } + +func (m *UsageRule) GetSelector() string { + if m != nil { + return m.Selector + } + return "" +} + +func (m *UsageRule) GetAllowUnregisteredCalls() bool { + if m != nil { + return m.AllowUnregisteredCalls + } + return false +} + +func init() { + proto.RegisterType((*Usage)(nil), "google.api.Usage") + proto.RegisterType((*UsageRule)(nil), "google.api.UsageRule") +} + +func init() { proto.RegisterFile("google/api/usage.proto", fileDescriptor13) } + +var fileDescriptor13 = []byte{ + // 303 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0xcf, 0x4b, 0x3b, 0x31, + 0x10, 0xc5, 0x49, 0xfb, 0x6d, 0xbf, 0x6d, 0x14, 0x0f, 0x01, 0x4b, 0xa8, 0x0a, 0x4b, 0x4f, 0x0b, + 0xc2, 0x2e, 0xe8, 0x45, 0xf0, 0x64, 0x8b, 0x88, 0x17, 0x29, 0x0b, 0xbd, 0x78, 0x59, 0x62, 0x3a, + 0x8d, 0x81, 0x34, 0xb3, 0xe6, 0x87, 0xfe, 0x33, 0x9e, 0xfc, 0x4b, 0xa5, 0x59, 0xad, 0xdb, 0xe3, + 0xcc, 0xfb, 0xbc, 0x79, 0xcc, 0xa3, 0x13, 0x85, 0xa8, 0x0c, 0x94, 0xa2, 0xd1, 0x65, 0xf4, 0x42, + 0x41, 0xd1, 0x38, 0x0c, 0xc8, 0x68, 0xbb, 0x2f, 0x44, 0xa3, 0xa7, 0xe7, 0x1d, 0x46, 0x58, 0x8b, + 0x41, 0x04, 0x8d, 0xd6, 0xb7, 0xe4, 0xec, 0x93, 0xd0, 0xc1, 0x6a, 0xe7, 0x64, 0x33, 0x7a, 0xec, + 0xe0, 0x2d, 0x6a, 0x07, 0x5b, 0xb0, 0xc1, 0x73, 0x92, 0xf5, 0xf3, 0x71, 0x75, 0xb0, 0x63, 0x97, + 0x74, 0xe0, 0xa2, 0x01, 0xcf, 0x87, 0x59, 0x3f, 0x3f, 0xba, 0x3a, 0x2d, 0xfe, 0x72, 0x8a, 0x74, + 0xa5, 0x8a, 0x06, 0xaa, 0x96, 0x61, 0x73, 0x7a, 0xd1, 0x38, 0x5c, 0x47, 0x09, 0xae, 0xb6, 0x18, + 0xf4, 0x46, 0xcb, 0x14, 0x5d, 0xcb, 0x57, 0x61, 0x2d, 0x18, 0xfe, 0x3f, 0x23, 0xf9, 0xb8, 0x3a, + 0xfb, 0x85, 0x9e, 0x3a, 0xcc, 0xa2, 0x45, 0x66, 0x82, 0x8e, 0xf7, 0x77, 0xd9, 0x94, 0x8e, 0x3c, + 0x18, 0x90, 0x01, 0x1d, 0x27, 0xc9, 0xbb, 0x9f, 0xd9, 0x0d, 0xe5, 0xc2, 0x18, 0xfc, 0xa8, 0xa3, + 0x75, 0xa0, 0xb4, 0x0f, 0xe0, 0x60, 0x5d, 0x4b, 0x61, 0x8c, 0xe7, 0xbd, 0x8c, 0xe4, 0xa3, 0x6a, + 0x92, 0xf4, 0x55, 0x47, 0x5e, 0xec, 0xd4, 0xb9, 0xa1, 0x27, 0x12, 0xb7, 0x9d, 0x4f, 0xe6, 0x34, + 0x45, 0x2e, 0x77, 0xfd, 0x2c, 0xc9, 0xf3, 0xfd, 0x8f, 0xa2, 0xd0, 0x08, 0xab, 0x0a, 0x74, 0xaa, + 0x54, 0x60, 0x53, 0x7b, 0x65, 0x2b, 0x89, 0x46, 0xfb, 0x54, 0xaf, 0x07, 0xf7, 0xae, 0x25, 0x48, + 0xb4, 0x1b, 0xad, 0x6e, 0x0f, 0xa6, 0xaf, 0xde, 0xbf, 0x87, 0xbb, 0xe5, 0xe3, 0xcb, 0x30, 0x19, + 0xaf, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xba, 0x6f, 0x72, 0xba, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/check_error.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/check_error.pb.go new file mode 100644 index 0000000..3d493e1 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/check_error.pb.go @@ -0,0 +1,203 @@ +// Code generated by protoc-gen-go. +// source: google/api/servicecontrol/v1/check_error.proto +// DO NOT EDIT! + +/* +Package servicecontrol is a generated protocol buffer package. + +It is generated from these files: + google/api/servicecontrol/v1/check_error.proto + google/api/servicecontrol/v1/distribution.proto + google/api/servicecontrol/v1/log_entry.proto + google/api/servicecontrol/v1/metric_value.proto + google/api/servicecontrol/v1/operation.proto + google/api/servicecontrol/v1/service_controller.proto + +It has these top-level messages: + CheckError + Distribution + LogEntry + MetricValue + MetricValueSet + Operation + CheckRequest + CheckResponse + ReportRequest + ReportResponse +*/ +package servicecontrol + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Error codes for Check responses. +type CheckError_Code int32 + +const ( + // This is never used in `CheckResponse`. + CheckError_ERROR_CODE_UNSPECIFIED CheckError_Code = 0 + // The consumer's project id was not found. + // Same as [google.rpc.Code.NOT_FOUND][]. + CheckError_NOT_FOUND CheckError_Code = 5 + // The consumer doesn't have access to the specified resource. + // Same as [google.rpc.Code.PERMISSION_DENIED][]. + CheckError_PERMISSION_DENIED CheckError_Code = 7 + // Quota check failed. Same as [google.rpc.Code.RESOURCE_EXHAUSTED][]. + CheckError_RESOURCE_EXHAUSTED CheckError_Code = 8 + // The consumer hasn't activated the service. + CheckError_SERVICE_NOT_ACTIVATED CheckError_Code = 104 + // The consumer cannot access the service because billing is disabled. + CheckError_BILLING_DISABLED CheckError_Code = 107 + // The consumer's project has been marked as deleted (soft deletion). + CheckError_PROJECT_DELETED CheckError_Code = 108 + // The consumer's project number or id does not represent a valid project. + CheckError_PROJECT_INVALID CheckError_Code = 114 + // The IP address of the consumer is invalid for the specific consumer + // project. + CheckError_IP_ADDRESS_BLOCKED CheckError_Code = 109 + // The referer address of the consumer request is invalid for the specific + // consumer project. + CheckError_REFERER_BLOCKED CheckError_Code = 110 + // The client application of the consumer request is invalid for the + // specific consumer project. + CheckError_CLIENT_APP_BLOCKED CheckError_Code = 111 + // The consumer's API key is invalid. + CheckError_API_KEY_INVALID CheckError_Code = 105 + // The consumer's API Key has expired. + CheckError_API_KEY_EXPIRED CheckError_Code = 112 + // The consumer's API Key was not found in config record. + CheckError_API_KEY_NOT_FOUND CheckError_Code = 113 + // The backend server for looking up project id/number is unavailable. + CheckError_NAMESPACE_LOOKUP_UNAVAILABLE CheckError_Code = 300 + // The backend server for checking service status is unavailable. + CheckError_SERVICE_STATUS_UNAVAILABLE CheckError_Code = 301 + // The backend server for checking billing status is unavailable. + CheckError_BILLING_STATUS_UNAVAILABLE CheckError_Code = 302 +) + +var CheckError_Code_name = map[int32]string{ + 0: "ERROR_CODE_UNSPECIFIED", + 5: "NOT_FOUND", + 7: "PERMISSION_DENIED", + 8: "RESOURCE_EXHAUSTED", + 104: "SERVICE_NOT_ACTIVATED", + 107: "BILLING_DISABLED", + 108: "PROJECT_DELETED", + 114: "PROJECT_INVALID", + 109: "IP_ADDRESS_BLOCKED", + 110: "REFERER_BLOCKED", + 111: "CLIENT_APP_BLOCKED", + 105: "API_KEY_INVALID", + 112: "API_KEY_EXPIRED", + 113: "API_KEY_NOT_FOUND", + 300: "NAMESPACE_LOOKUP_UNAVAILABLE", + 301: "SERVICE_STATUS_UNAVAILABLE", + 302: "BILLING_STATUS_UNAVAILABLE", +} +var CheckError_Code_value = map[string]int32{ + "ERROR_CODE_UNSPECIFIED": 0, + "NOT_FOUND": 5, + "PERMISSION_DENIED": 7, + "RESOURCE_EXHAUSTED": 8, + "SERVICE_NOT_ACTIVATED": 104, + "BILLING_DISABLED": 107, + "PROJECT_DELETED": 108, + "PROJECT_INVALID": 114, + "IP_ADDRESS_BLOCKED": 109, + "REFERER_BLOCKED": 110, + "CLIENT_APP_BLOCKED": 111, + "API_KEY_INVALID": 105, + "API_KEY_EXPIRED": 112, + "API_KEY_NOT_FOUND": 113, + "NAMESPACE_LOOKUP_UNAVAILABLE": 300, + "SERVICE_STATUS_UNAVAILABLE": 301, + "BILLING_STATUS_UNAVAILABLE": 302, +} + +func (x CheckError_Code) String() string { + return proto.EnumName(CheckError_Code_name, int32(x)) +} +func (CheckError_Code) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// Defines the errors to be returned in +// [google.api.servicecontrol.v1.CheckResponse.check_errors][google.api.servicecontrol.v1.CheckResponse.check_errors]. +type CheckError struct { + // The error code. + Code CheckError_Code `protobuf:"varint,1,opt,name=code,enum=google.api.servicecontrol.v1.CheckError_Code" json:"code,omitempty"` + // Free-form text providing details on the error cause of the error. + Detail string `protobuf:"bytes,2,opt,name=detail" json:"detail,omitempty"` +} + +func (m *CheckError) Reset() { *m = CheckError{} } +func (m *CheckError) String() string { return proto.CompactTextString(m) } +func (*CheckError) ProtoMessage() {} +func (*CheckError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *CheckError) GetCode() CheckError_Code { + if m != nil { + return m.Code + } + return CheckError_ERROR_CODE_UNSPECIFIED +} + +func (m *CheckError) GetDetail() string { + if m != nil { + return m.Detail + } + return "" +} + +func init() { + proto.RegisterType((*CheckError)(nil), "google.api.servicecontrol.v1.CheckError") + proto.RegisterEnum("google.api.servicecontrol.v1.CheckError_Code", CheckError_Code_name, CheckError_Code_value) +} + +func init() { proto.RegisterFile("google/api/servicecontrol/v1/check_error.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 484 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xdd, 0x6e, 0xd3, 0x3e, + 0x18, 0xc6, 0xff, 0xe9, 0xbf, 0x0c, 0x66, 0x09, 0x16, 0x0c, 0xab, 0x46, 0x55, 0x89, 0xb2, 0xa3, + 0x9d, 0x90, 0x68, 0x70, 0xc8, 0x91, 0x6b, 0xbf, 0x05, 0xaf, 0x59, 0x62, 0xd9, 0x49, 0x35, 0x38, + 0xb1, 0x42, 0x1a, 0x65, 0xd1, 0xba, 0xb8, 0xa4, 0x51, 0xaf, 0x80, 0x0b, 0xe0, 0x2a, 0x38, 0x02, + 0xae, 0x8f, 0x43, 0xe4, 0x76, 0xfd, 0x92, 0xa6, 0x1d, 0xfa, 0x79, 0x7f, 0xcf, 0x63, 0xbd, 0x1f, + 0xc8, 0x2b, 0x8c, 0x29, 0xa6, 0xb9, 0x9f, 0xce, 0x4a, 0x7f, 0x9e, 0xd7, 0x8b, 0x32, 0xcb, 0x33, + 0x53, 0x35, 0xb5, 0x99, 0xfa, 0x8b, 0x73, 0x3f, 0xbb, 0xce, 0xb3, 0x1b, 0x9d, 0xd7, 0xb5, 0xa9, + 0xbd, 0x59, 0x6d, 0x1a, 0x83, 0x7b, 0x2b, 0xde, 0x4b, 0x67, 0xa5, 0xb7, 0xcf, 0x7b, 0x8b, 0xf3, + 0x6e, 0x6f, 0x27, 0x2d, 0xad, 0x2a, 0xd3, 0xa4, 0x4d, 0x69, 0xaa, 0xf9, 0xca, 0x7b, 0xfa, 0xa3, + 0x8d, 0x10, 0xb5, 0x89, 0x60, 0x03, 0x31, 0x41, 0xed, 0xcc, 0x4c, 0xf2, 0x13, 0xa7, 0xef, 0x9c, + 0x3d, 0x7b, 0xf7, 0xd6, 0x7b, 0x28, 0xd9, 0xdb, 0xfa, 0x3c, 0x6a, 0x26, 0xb9, 0x5c, 0x5a, 0x71, + 0x07, 0x1d, 0x4c, 0xf2, 0x26, 0x2d, 0xa7, 0x27, 0xad, 0xbe, 0x73, 0x76, 0x28, 0xef, 0x5e, 0xa7, + 0x3f, 0xff, 0x47, 0x6d, 0x8b, 0xe1, 0x2e, 0xea, 0x80, 0x94, 0x91, 0xd4, 0x34, 0x62, 0xa0, 0x93, + 0x50, 0x09, 0xa0, 0x7c, 0xc8, 0x81, 0xb9, 0xff, 0xe1, 0xa7, 0xe8, 0x30, 0x8c, 0x62, 0x3d, 0x8c, + 0x92, 0x90, 0xb9, 0x8f, 0xf0, 0x31, 0x7a, 0x2e, 0x40, 0x5e, 0x72, 0xa5, 0x78, 0x14, 0x6a, 0x06, + 0xa1, 0xa5, 0x1e, 0xe3, 0x0e, 0xc2, 0x12, 0x54, 0x94, 0x48, 0x0a, 0x1a, 0xae, 0x3e, 0x91, 0x44, + 0xc5, 0xc0, 0xdc, 0x27, 0xf8, 0x15, 0x3a, 0x56, 0x20, 0xc7, 0x9c, 0x82, 0xb6, 0x29, 0x84, 0xc6, + 0x7c, 0x4c, 0x6c, 0xe9, 0x1a, 0xbf, 0x44, 0xee, 0x80, 0x07, 0x01, 0x0f, 0x3f, 0x6a, 0xc6, 0x15, + 0x19, 0x04, 0xc0, 0xdc, 0x1b, 0xfc, 0x02, 0x1d, 0x09, 0x19, 0x5d, 0x00, 0x8d, 0x35, 0x83, 0x00, + 0x2c, 0x3a, 0xdd, 0x15, 0x79, 0x38, 0x26, 0x01, 0x67, 0x6e, 0x6d, 0xbf, 0xe4, 0x42, 0x13, 0xc6, + 0x24, 0x28, 0xa5, 0x07, 0x41, 0x44, 0x47, 0xc0, 0xdc, 0x5b, 0x0b, 0x4b, 0x18, 0x82, 0x04, 0xb9, + 0x11, 0x2b, 0x0b, 0xd3, 0x80, 0x43, 0x18, 0x6b, 0x22, 0xc4, 0x46, 0x37, 0x16, 0x26, 0x82, 0xeb, + 0x11, 0x7c, 0xde, 0x24, 0x97, 0xbb, 0x22, 0x5c, 0x09, 0x2e, 0x81, 0xb9, 0x33, 0xdb, 0xf8, 0x5a, + 0xdc, 0xce, 0xe3, 0x1b, 0x7e, 0x83, 0x7a, 0x21, 0xb9, 0x04, 0x25, 0x08, 0x05, 0x1d, 0x44, 0xd1, + 0x28, 0x11, 0x3a, 0x09, 0xc9, 0x98, 0xf0, 0xc0, 0xb6, 0xe4, 0xfe, 0x6a, 0xe1, 0xd7, 0xa8, 0xbb, + 0x9e, 0x81, 0x8a, 0x49, 0x9c, 0xa8, 0x3d, 0xe0, 0xf7, 0x12, 0x58, 0x4f, 0xe2, 0x1e, 0xe0, 0x4f, + 0x6b, 0xf0, 0xdd, 0x41, 0xfd, 0xcc, 0xdc, 0x3e, 0xb8, 0xfb, 0xc1, 0xd1, 0x76, 0xf9, 0xc2, 0x1e, + 0x92, 0x70, 0xbe, 0x5c, 0xdc, 0x19, 0x0a, 0x33, 0x4d, 0xab, 0xc2, 0x33, 0x75, 0xe1, 0x17, 0x79, + 0xb5, 0x3c, 0x33, 0x7f, 0x55, 0x4a, 0x67, 0xe5, 0xfc, 0xfe, 0xab, 0xfe, 0xb0, 0xaf, 0xfc, 0x75, + 0x9c, 0xaf, 0x07, 0x4b, 0xe7, 0xfb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x65, 0x26, 0xbf, + 0x0e, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/distribution.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/distribution.pb.go new file mode 100644 index 0000000..90c8682 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/distribution.pb.go @@ -0,0 +1,431 @@ +// Code generated by protoc-gen-go. +// source: google/api/servicecontrol/v1/distribution.proto +// DO NOT EDIT! + +package servicecontrol + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Distribution represents a frequency distribution of double-valued sample +// points. It contains the size of the population of sample points plus +// additional optional information: +// +// - the arithmetic mean of the samples +// - the minimum and maximum of the samples +// - the sum-squared-deviation of the samples, used to compute variance +// - a histogram of the values of the sample points +type Distribution struct { + // The total number of samples in the distribution. Must be >= 0. + Count int64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"` + // The arithmetic mean of the samples in the distribution. If `count` is + // zero then this field must be zero. + Mean float64 `protobuf:"fixed64,2,opt,name=mean" json:"mean,omitempty"` + // The minimum of the population of values. Ignored if `count` is zero. + Minimum float64 `protobuf:"fixed64,3,opt,name=minimum" json:"minimum,omitempty"` + // The maximum of the population of values. Ignored if `count` is zero. + Maximum float64 `protobuf:"fixed64,4,opt,name=maximum" json:"maximum,omitempty"` + // The sum of squared deviations from the mean: + // Sum[i=1..count]((x_i - mean)^2) + // where each x_i is a sample values. If `count` is zero then this field + // must be zero, otherwise validation of the request fails. + SumOfSquaredDeviation float64 `protobuf:"fixed64,5,opt,name=sum_of_squared_deviation,json=sumOfSquaredDeviation" json:"sum_of_squared_deviation,omitempty"` + // The number of samples in each histogram bucket. `bucket_counts` are + // optional. If present, they must sum to the `count` value. + // + // The buckets are defined below in `bucket_option`. There are N buckets. + // `bucket_counts[0]` is the number of samples in the underflow bucket. + // `bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of samples + // in each of the finite buckets. And `bucket_counts[N] is the number + // of samples in the overflow bucket. See the comments of `bucket_option` + // below for more details. + // + // Any suffix of trailing zeros may be omitted. + BucketCounts []int64 `protobuf:"varint,6,rep,packed,name=bucket_counts,json=bucketCounts" json:"bucket_counts,omitempty"` + // Defines the buckets in the histogram. `bucket_option` and `bucket_counts` + // must be both set, or both unset. + // + // Buckets are numbered the the range of [0, N], with a total of N+1 buckets. + // There must be at least two buckets (a single-bucket histogram gives + // no information that isn't already provided by `count`). + // + // The first bucket is the underflow bucket which has a lower bound + // of -inf. The last bucket is the overflow bucket which has an + // upper bound of +inf. All other buckets (if any) are called "finite" + // buckets because they have finite lower and upper bounds. As described + // below, there are three ways to define the finite buckets. + // + // (1) Buckets with constant width. + // (2) Buckets with exponentially growing widths. + // (3) Buckets with arbitrary user-provided widths. + // + // In all cases, the buckets cover the entire real number line (-inf, + // +inf). Bucket upper bounds are exclusive and lower bounds are + // inclusive. The upper bound of the underflow bucket is equal to the + // lower bound of the smallest finite bucket; the lower bound of the + // overflow bucket is equal to the upper bound of the largest finite + // bucket. + // + // Types that are valid to be assigned to BucketOption: + // *Distribution_LinearBuckets_ + // *Distribution_ExponentialBuckets_ + // *Distribution_ExplicitBuckets_ + BucketOption isDistribution_BucketOption `protobuf_oneof:"bucket_option"` +} + +func (m *Distribution) Reset() { *m = Distribution{} } +func (m *Distribution) String() string { return proto.CompactTextString(m) } +func (*Distribution) ProtoMessage() {} +func (*Distribution) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +type isDistribution_BucketOption interface { + isDistribution_BucketOption() +} + +type Distribution_LinearBuckets_ struct { + LinearBuckets *Distribution_LinearBuckets `protobuf:"bytes,7,opt,name=linear_buckets,json=linearBuckets,oneof"` +} +type Distribution_ExponentialBuckets_ struct { + ExponentialBuckets *Distribution_ExponentialBuckets `protobuf:"bytes,8,opt,name=exponential_buckets,json=exponentialBuckets,oneof"` +} +type Distribution_ExplicitBuckets_ struct { + ExplicitBuckets *Distribution_ExplicitBuckets `protobuf:"bytes,9,opt,name=explicit_buckets,json=explicitBuckets,oneof"` +} + +func (*Distribution_LinearBuckets_) isDistribution_BucketOption() {} +func (*Distribution_ExponentialBuckets_) isDistribution_BucketOption() {} +func (*Distribution_ExplicitBuckets_) isDistribution_BucketOption() {} + +func (m *Distribution) GetBucketOption() isDistribution_BucketOption { + if m != nil { + return m.BucketOption + } + return nil +} + +func (m *Distribution) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +func (m *Distribution) GetMean() float64 { + if m != nil { + return m.Mean + } + return 0 +} + +func (m *Distribution) GetMinimum() float64 { + if m != nil { + return m.Minimum + } + return 0 +} + +func (m *Distribution) GetMaximum() float64 { + if m != nil { + return m.Maximum + } + return 0 +} + +func (m *Distribution) GetSumOfSquaredDeviation() float64 { + if m != nil { + return m.SumOfSquaredDeviation + } + return 0 +} + +func (m *Distribution) GetBucketCounts() []int64 { + if m != nil { + return m.BucketCounts + } + return nil +} + +func (m *Distribution) GetLinearBuckets() *Distribution_LinearBuckets { + if x, ok := m.GetBucketOption().(*Distribution_LinearBuckets_); ok { + return x.LinearBuckets + } + return nil +} + +func (m *Distribution) GetExponentialBuckets() *Distribution_ExponentialBuckets { + if x, ok := m.GetBucketOption().(*Distribution_ExponentialBuckets_); ok { + return x.ExponentialBuckets + } + return nil +} + +func (m *Distribution) GetExplicitBuckets() *Distribution_ExplicitBuckets { + if x, ok := m.GetBucketOption().(*Distribution_ExplicitBuckets_); ok { + return x.ExplicitBuckets + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Distribution) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Distribution_OneofMarshaler, _Distribution_OneofUnmarshaler, _Distribution_OneofSizer, []interface{}{ + (*Distribution_LinearBuckets_)(nil), + (*Distribution_ExponentialBuckets_)(nil), + (*Distribution_ExplicitBuckets_)(nil), + } +} + +func _Distribution_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Distribution) + // bucket_option + switch x := m.BucketOption.(type) { + case *Distribution_LinearBuckets_: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LinearBuckets); err != nil { + return err + } + case *Distribution_ExponentialBuckets_: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ExponentialBuckets); err != nil { + return err + } + case *Distribution_ExplicitBuckets_: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ExplicitBuckets); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Distribution.BucketOption has unexpected type %T", x) + } + return nil +} + +func _Distribution_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Distribution) + switch tag { + case 7: // bucket_option.linear_buckets + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Distribution_LinearBuckets) + err := b.DecodeMessage(msg) + m.BucketOption = &Distribution_LinearBuckets_{msg} + return true, err + case 8: // bucket_option.exponential_buckets + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Distribution_ExponentialBuckets) + err := b.DecodeMessage(msg) + m.BucketOption = &Distribution_ExponentialBuckets_{msg} + return true, err + case 9: // bucket_option.explicit_buckets + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Distribution_ExplicitBuckets) + err := b.DecodeMessage(msg) + m.BucketOption = &Distribution_ExplicitBuckets_{msg} + return true, err + default: + return false, nil + } +} + +func _Distribution_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Distribution) + // bucket_option + switch x := m.BucketOption.(type) { + case *Distribution_LinearBuckets_: + s := proto.Size(x.LinearBuckets) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Distribution_ExponentialBuckets_: + s := proto.Size(x.ExponentialBuckets) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Distribution_ExplicitBuckets_: + s := proto.Size(x.ExplicitBuckets) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Describing buckets with constant width. +type Distribution_LinearBuckets struct { + // The number of finite buckets. With the underflow and overflow buckets, + // the total number of buckets is `num_finite_buckets` + 2. + // See comments on `bucket_options` for details. + NumFiniteBuckets int32 `protobuf:"varint,1,opt,name=num_finite_buckets,json=numFiniteBuckets" json:"num_finite_buckets,omitempty"` + // The i'th linear bucket covers the interval + // [offset + (i-1) * width, offset + i * width) + // where i ranges from 1 to num_finite_buckets, inclusive. + // Must be strictly positive. + Width float64 `protobuf:"fixed64,2,opt,name=width" json:"width,omitempty"` + // The i'th linear bucket covers the interval + // [offset + (i-1) * width, offset + i * width) + // where i ranges from 1 to num_finite_buckets, inclusive. + Offset float64 `protobuf:"fixed64,3,opt,name=offset" json:"offset,omitempty"` +} + +func (m *Distribution_LinearBuckets) Reset() { *m = Distribution_LinearBuckets{} } +func (m *Distribution_LinearBuckets) String() string { return proto.CompactTextString(m) } +func (*Distribution_LinearBuckets) ProtoMessage() {} +func (*Distribution_LinearBuckets) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +func (m *Distribution_LinearBuckets) GetNumFiniteBuckets() int32 { + if m != nil { + return m.NumFiniteBuckets + } + return 0 +} + +func (m *Distribution_LinearBuckets) GetWidth() float64 { + if m != nil { + return m.Width + } + return 0 +} + +func (m *Distribution_LinearBuckets) GetOffset() float64 { + if m != nil { + return m.Offset + } + return 0 +} + +// Describing buckets with exponentially growing width. +type Distribution_ExponentialBuckets struct { + // The number of finite buckets. With the underflow and overflow buckets, + // the total number of buckets is `num_finite_buckets` + 2. + // See comments on `bucket_options` for details. + NumFiniteBuckets int32 `protobuf:"varint,1,opt,name=num_finite_buckets,json=numFiniteBuckets" json:"num_finite_buckets,omitempty"` + // The i'th exponential bucket covers the interval + // [scale * growth_factor^(i-1), scale * growth_factor^i) + // where i ranges from 1 to num_finite_buckets inclusive. + // Must be larger than 1.0. + GrowthFactor float64 `protobuf:"fixed64,2,opt,name=growth_factor,json=growthFactor" json:"growth_factor,omitempty"` + // The i'th exponential bucket covers the interval + // [scale * growth_factor^(i-1), scale * growth_factor^i) + // where i ranges from 1 to num_finite_buckets inclusive. + // Must be > 0. + Scale float64 `protobuf:"fixed64,3,opt,name=scale" json:"scale,omitempty"` +} + +func (m *Distribution_ExponentialBuckets) Reset() { *m = Distribution_ExponentialBuckets{} } +func (m *Distribution_ExponentialBuckets) String() string { return proto.CompactTextString(m) } +func (*Distribution_ExponentialBuckets) ProtoMessage() {} +func (*Distribution_ExponentialBuckets) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{0, 1} +} + +func (m *Distribution_ExponentialBuckets) GetNumFiniteBuckets() int32 { + if m != nil { + return m.NumFiniteBuckets + } + return 0 +} + +func (m *Distribution_ExponentialBuckets) GetGrowthFactor() float64 { + if m != nil { + return m.GrowthFactor + } + return 0 +} + +func (m *Distribution_ExponentialBuckets) GetScale() float64 { + if m != nil { + return m.Scale + } + return 0 +} + +// Describing buckets with arbitrary user-provided width. +type Distribution_ExplicitBuckets struct { + // 'bound' is a list of strictly increasing boundaries between + // buckets. Note that a list of length N-1 defines N buckets because + // of fenceposting. See comments on `bucket_options` for details. + // + // The i'th finite bucket covers the interval + // [bound[i-1], bound[i]) + // where i ranges from 1 to bound_size() - 1. Note that there are no + // finite buckets at all if 'bound' only contains a single element; in + // that special case the single bound defines the boundary between the + // underflow and overflow buckets. + // + // bucket number lower bound upper bound + // i == 0 (underflow) -inf bound[i] + // 0 < i < bound_size() bound[i-1] bound[i] + // i == bound_size() (overflow) bound[i-1] +inf + Bounds []float64 `protobuf:"fixed64,1,rep,packed,name=bounds" json:"bounds,omitempty"` +} + +func (m *Distribution_ExplicitBuckets) Reset() { *m = Distribution_ExplicitBuckets{} } +func (m *Distribution_ExplicitBuckets) String() string { return proto.CompactTextString(m) } +func (*Distribution_ExplicitBuckets) ProtoMessage() {} +func (*Distribution_ExplicitBuckets) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 2} } + +func (m *Distribution_ExplicitBuckets) GetBounds() []float64 { + if m != nil { + return m.Bounds + } + return nil +} + +func init() { + proto.RegisterType((*Distribution)(nil), "google.api.servicecontrol.v1.Distribution") + proto.RegisterType((*Distribution_LinearBuckets)(nil), "google.api.servicecontrol.v1.Distribution.LinearBuckets") + proto.RegisterType((*Distribution_ExponentialBuckets)(nil), "google.api.servicecontrol.v1.Distribution.ExponentialBuckets") + proto.RegisterType((*Distribution_ExplicitBuckets)(nil), "google.api.servicecontrol.v1.Distribution.ExplicitBuckets") +} + +func init() { proto.RegisterFile("google/api/servicecontrol/v1/distribution.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 486 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0x86, 0x31, 0x6e, 0x52, 0x18, 0x12, 0x52, 0x96, 0x82, 0xac, 0x88, 0x83, 0x45, 0x2f, 0x41, + 0x42, 0xb6, 0x0a, 0x07, 0x10, 0x88, 0x4b, 0x28, 0x15, 0x42, 0x48, 0x54, 0xe6, 0xc6, 0xc5, 0xda, + 0xd8, 0x6b, 0x77, 0x55, 0x7b, 0xc7, 0xec, 0x47, 0x9a, 0x0b, 0x57, 0x7e, 0x0f, 0x3f, 0x8f, 0x23, + 0xf2, 0xae, 0xf3, 0x45, 0xab, 0x48, 0xb9, 0xf9, 0x7d, 0xc7, 0x33, 0xcf, 0xec, 0x68, 0x06, 0xe2, + 0x12, 0xb1, 0xac, 0x58, 0x4c, 0x1b, 0x1e, 0x2b, 0x26, 0xe7, 0x3c, 0x63, 0x19, 0x0a, 0x2d, 0xb1, + 0x8a, 0xe7, 0xa7, 0x71, 0xce, 0x95, 0x96, 0x7c, 0x66, 0x34, 0x47, 0x11, 0x35, 0x12, 0x35, 0x92, + 0x67, 0x2e, 0x21, 0xa2, 0x0d, 0x8f, 0xb6, 0x13, 0xa2, 0xf9, 0xe9, 0xf3, 0x3f, 0x7d, 0x18, 0x9c, + 0x6d, 0x24, 0x91, 0x63, 0xe8, 0x65, 0x68, 0x84, 0x0e, 0xbc, 0xd0, 0x9b, 0xf8, 0x89, 0x13, 0x84, + 0xc0, 0x41, 0xcd, 0xa8, 0x08, 0xee, 0x86, 0xde, 0xc4, 0x4b, 0xec, 0x37, 0x09, 0xe0, 0xb0, 0xe6, + 0x82, 0xd7, 0xa6, 0x0e, 0x7c, 0x6b, 0x2f, 0xa5, 0x8d, 0xd0, 0x85, 0x8d, 0x1c, 0x74, 0x11, 0x27, + 0xc9, 0x1b, 0x08, 0x94, 0xa9, 0x53, 0x2c, 0x52, 0xf5, 0xd3, 0x50, 0xc9, 0xf2, 0x34, 0x67, 0x73, + 0x4e, 0x5b, 0x72, 0xd0, 0xb3, 0xbf, 0x3e, 0x51, 0xa6, 0xfe, 0x56, 0x7c, 0x77, 0xd1, 0xb3, 0x65, + 0x90, 0x9c, 0xc0, 0x70, 0x66, 0xb2, 0x2b, 0xa6, 0x53, 0xdb, 0x90, 0x0a, 0xfa, 0xa1, 0x3f, 0xf1, + 0x93, 0x81, 0x33, 0x3f, 0x5a, 0x8f, 0x50, 0x78, 0x58, 0x71, 0xc1, 0xa8, 0x4c, 0x9d, 0xad, 0x82, + 0xc3, 0xd0, 0x9b, 0x3c, 0x78, 0xf5, 0x36, 0xda, 0x35, 0x83, 0x68, 0xf3, 0xfd, 0xd1, 0x57, 0x5b, + 0x60, 0xea, 0xf2, 0x3f, 0xdf, 0x49, 0x86, 0xd5, 0xa6, 0x41, 0x1a, 0x78, 0xcc, 0x16, 0x0d, 0x0a, + 0x26, 0x34, 0xa7, 0xd5, 0x8a, 0x73, 0xcf, 0x72, 0x3e, 0xec, 0xc1, 0xf9, 0xb4, 0xae, 0xb2, 0x86, + 0x11, 0x76, 0xc3, 0x25, 0x25, 0x1c, 0xb1, 0x45, 0x53, 0xf1, 0x8c, 0xeb, 0x15, 0xee, 0xbe, 0xc5, + 0xbd, 0xdb, 0x0f, 0x67, 0x4b, 0xac, 0x59, 0x23, 0xb6, 0x6d, 0x8d, 0xaf, 0x60, 0xb8, 0xf5, 0x78, + 0xf2, 0x12, 0x88, 0x30, 0x75, 0x5a, 0x70, 0xc1, 0x35, 0x5b, 0xb1, 0xdb, 0xbd, 0xe8, 0x25, 0x47, + 0xc2, 0xd4, 0xe7, 0x36, 0xb0, 0xfc, 0xfb, 0x18, 0x7a, 0xd7, 0x3c, 0xd7, 0x97, 0xdd, 0x8e, 0x38, + 0x41, 0x9e, 0x42, 0x1f, 0x8b, 0x42, 0x31, 0xdd, 0xed, 0x48, 0xa7, 0xc6, 0xbf, 0x80, 0xdc, 0x9c, + 0xc0, 0x9e, 0xc4, 0x13, 0x18, 0x96, 0x12, 0xaf, 0xf5, 0x65, 0x5a, 0xd0, 0x4c, 0xa3, 0xec, 0xc8, + 0x03, 0x67, 0x9e, 0x5b, 0xaf, 0x6d, 0x4b, 0x65, 0xb4, 0x62, 0x1d, 0xdf, 0x89, 0xf1, 0x0b, 0x18, + 0xfd, 0x37, 0x91, 0xb6, 0xd3, 0x19, 0x1a, 0x91, 0xb7, 0x3c, 0xbf, 0xed, 0xd4, 0xa9, 0xe9, 0x68, + 0xb5, 0x79, 0xd8, 0xb4, 0xa3, 0x9c, 0xfe, 0xf6, 0x20, 0xcc, 0xb0, 0xde, 0x39, 0xfc, 0xe9, 0xa3, + 0xcd, 0xe9, 0x5f, 0xb4, 0x87, 0x78, 0xe1, 0xfd, 0xf8, 0xd2, 0xa5, 0x94, 0x58, 0x51, 0x51, 0x46, + 0x28, 0xcb, 0xb8, 0x64, 0xc2, 0x9e, 0x69, 0x77, 0xd6, 0xb4, 0xe1, 0xea, 0xf6, 0xd3, 0x7e, 0xbf, + 0xed, 0xfc, 0xf5, 0xbc, 0x59, 0xdf, 0x66, 0xbe, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x14, 0x52, + 0xaf, 0xef, 0x13, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/log_entry.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/log_entry.pb.go new file mode 100644 index 0000000..361302d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/log_entry.pb.go @@ -0,0 +1,259 @@ +// Code generated by protoc-gen-go. +// source: google/api/servicecontrol/v1/log_entry.proto +// DO NOT EDIT! + +package servicecontrol + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_logging_type "google.golang.org/genproto/googleapis/logging/type" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" +import google_protobuf2 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// An individual log entry. +type LogEntry struct { + // Required. The log to which this log entry belongs. Examples: `"syslog"`, + // `"book_log"`. + Name string `protobuf:"bytes,10,opt,name=name" json:"name,omitempty"` + // The time the event described by the log entry occurred. If + // omitted, defaults to operation start time. + Timestamp *google_protobuf3.Timestamp `protobuf:"bytes,11,opt,name=timestamp" json:"timestamp,omitempty"` + // The severity of the log entry. The default value is + // `LogSeverity.DEFAULT`. + Severity google_logging_type.LogSeverity `protobuf:"varint,12,opt,name=severity,enum=google.logging.type.LogSeverity" json:"severity,omitempty"` + // A unique ID for the log entry used for deduplication. If omitted, + // the implementation will generate one based on operation_id. + InsertId string `protobuf:"bytes,4,opt,name=insert_id,json=insertId" json:"insert_id,omitempty"` + // A set of user-defined (key, value) data that provides additional + // information about the log entry. + Labels map[string]string `protobuf:"bytes,13,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The log entry payload, which can be one of multiple types. + // + // Types that are valid to be assigned to Payload: + // *LogEntry_ProtoPayload + // *LogEntry_TextPayload + // *LogEntry_StructPayload + Payload isLogEntry_Payload `protobuf_oneof:"payload"` +} + +func (m *LogEntry) Reset() { *m = LogEntry{} } +func (m *LogEntry) String() string { return proto.CompactTextString(m) } +func (*LogEntry) ProtoMessage() {} +func (*LogEntry) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +type isLogEntry_Payload interface { + isLogEntry_Payload() +} + +type LogEntry_ProtoPayload struct { + ProtoPayload *google_protobuf1.Any `protobuf:"bytes,2,opt,name=proto_payload,json=protoPayload,oneof"` +} +type LogEntry_TextPayload struct { + TextPayload string `protobuf:"bytes,3,opt,name=text_payload,json=textPayload,oneof"` +} +type LogEntry_StructPayload struct { + StructPayload *google_protobuf2.Struct `protobuf:"bytes,6,opt,name=struct_payload,json=structPayload,oneof"` +} + +func (*LogEntry_ProtoPayload) isLogEntry_Payload() {} +func (*LogEntry_TextPayload) isLogEntry_Payload() {} +func (*LogEntry_StructPayload) isLogEntry_Payload() {} + +func (m *LogEntry) GetPayload() isLogEntry_Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *LogEntry) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *LogEntry) GetTimestamp() *google_protobuf3.Timestamp { + if m != nil { + return m.Timestamp + } + return nil +} + +func (m *LogEntry) GetSeverity() google_logging_type.LogSeverity { + if m != nil { + return m.Severity + } + return google_logging_type.LogSeverity_DEFAULT +} + +func (m *LogEntry) GetInsertId() string { + if m != nil { + return m.InsertId + } + return "" +} + +func (m *LogEntry) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *LogEntry) GetProtoPayload() *google_protobuf1.Any { + if x, ok := m.GetPayload().(*LogEntry_ProtoPayload); ok { + return x.ProtoPayload + } + return nil +} + +func (m *LogEntry) GetTextPayload() string { + if x, ok := m.GetPayload().(*LogEntry_TextPayload); ok { + return x.TextPayload + } + return "" +} + +func (m *LogEntry) GetStructPayload() *google_protobuf2.Struct { + if x, ok := m.GetPayload().(*LogEntry_StructPayload); ok { + return x.StructPayload + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LogEntry) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LogEntry_OneofMarshaler, _LogEntry_OneofUnmarshaler, _LogEntry_OneofSizer, []interface{}{ + (*LogEntry_ProtoPayload)(nil), + (*LogEntry_TextPayload)(nil), + (*LogEntry_StructPayload)(nil), + } +} + +func _LogEntry_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LogEntry) + // payload + switch x := m.Payload.(type) { + case *LogEntry_ProtoPayload: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ProtoPayload); err != nil { + return err + } + case *LogEntry_TextPayload: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.TextPayload) + case *LogEntry_StructPayload: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StructPayload); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("LogEntry.Payload has unexpected type %T", x) + } + return nil +} + +func _LogEntry_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LogEntry) + switch tag { + case 2: // payload.proto_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Any) + err := b.DecodeMessage(msg) + m.Payload = &LogEntry_ProtoPayload{msg} + return true, err + case 3: // payload.text_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Payload = &LogEntry_TextPayload{x} + return true, err + case 6: // payload.struct_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf2.Struct) + err := b.DecodeMessage(msg) + m.Payload = &LogEntry_StructPayload{msg} + return true, err + default: + return false, nil + } +} + +func _LogEntry_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LogEntry) + // payload + switch x := m.Payload.(type) { + case *LogEntry_ProtoPayload: + s := proto.Size(x.ProtoPayload) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LogEntry_TextPayload: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.TextPayload))) + n += len(x.TextPayload) + case *LogEntry_StructPayload: + s := proto.Size(x.StructPayload) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*LogEntry)(nil), "google.api.servicecontrol.v1.LogEntry") +} + +func init() { proto.RegisterFile("google/api/servicecontrol/v1/log_entry.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 454 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x4f, 0x8f, 0xd3, 0x30, + 0x10, 0xc5, 0x9b, 0xed, 0x52, 0x1a, 0xa7, 0x5d, 0x21, 0x6b, 0x25, 0x42, 0xa8, 0x44, 0x04, 0x12, + 0xea, 0x01, 0x39, 0xda, 0x72, 0x59, 0x58, 0x0e, 0x50, 0x09, 0xa9, 0xac, 0x7a, 0x58, 0x65, 0x39, + 0x71, 0xa9, 0xdc, 0xd6, 0x58, 0x16, 0xae, 0x27, 0x4a, 0xdc, 0x88, 0x9c, 0xf8, 0xbc, 0x7c, 0x0b, + 0x94, 0xb1, 0x53, 0xf6, 0x9f, 0xf6, 0xe6, 0xf1, 0xfb, 0xbd, 0x99, 0x79, 0x8e, 0x42, 0xde, 0x49, + 0x00, 0xa9, 0x45, 0xc6, 0x0b, 0x95, 0x55, 0xa2, 0xac, 0xd5, 0x46, 0x6c, 0xc0, 0xd8, 0x12, 0x74, + 0x56, 0x9f, 0x65, 0x1a, 0xe4, 0x4a, 0x18, 0x5b, 0x36, 0xac, 0x28, 0xc1, 0x02, 0x9d, 0x38, 0x9a, + 0xf1, 0x42, 0xb1, 0xdb, 0x34, 0xab, 0xcf, 0x92, 0xc9, 0x8d, 0x5e, 0xdc, 0x18, 0xb0, 0xdc, 0x2a, + 0x30, 0x95, 0xf3, 0x26, 0x6f, 0xbd, 0xaa, 0x41, 0x4a, 0x65, 0x64, 0x66, 0x9b, 0x02, 0x8b, 0x55, + 0x25, 0x6a, 0x51, 0x2a, 0xeb, 0x67, 0x24, 0x2f, 0x3c, 0x87, 0xd5, 0x7a, 0xff, 0x33, 0xe3, 0xa6, + 0x93, 0x26, 0x77, 0xa5, 0xca, 0x96, 0xfb, 0x8d, 0xf5, 0xea, 0xab, 0xbb, 0xaa, 0x55, 0x3b, 0x51, + 0x59, 0xbe, 0x2b, 0x1c, 0xf0, 0xfa, 0x6f, 0x9f, 0x0c, 0x97, 0x20, 0xbf, 0xb6, 0x81, 0x28, 0x25, + 0xc7, 0x86, 0xef, 0x44, 0x4c, 0xd2, 0x60, 0x1a, 0xe6, 0x78, 0xa6, 0xe7, 0x24, 0x3c, 0x78, 0xe2, + 0x28, 0x0d, 0xa6, 0xd1, 0x2c, 0x61, 0x3e, 0x72, 0xd7, 0x95, 0x7d, 0xef, 0x88, 0xfc, 0x3f, 0x4c, + 0x3f, 0x91, 0x61, 0x17, 0x23, 0x1e, 0xa5, 0xc1, 0xf4, 0x64, 0x96, 0x76, 0x46, 0x9f, 0x97, 0xb5, + 0x79, 0xd9, 0x12, 0xe4, 0xb5, 0xe7, 0xf2, 0x83, 0x83, 0xbe, 0x24, 0xa1, 0x32, 0x95, 0x28, 0xed, + 0x4a, 0x6d, 0xe3, 0x63, 0x5c, 0x68, 0xe8, 0x2e, 0xbe, 0x6d, 0xe9, 0x25, 0x19, 0x68, 0xbe, 0x16, + 0xba, 0x8a, 0xc7, 0x69, 0x7f, 0x1a, 0xcd, 0x66, 0xec, 0xb1, 0x8f, 0xc0, 0xba, 0x80, 0x6c, 0x89, + 0x26, 0x3c, 0xe7, 0xbe, 0x03, 0xbd, 0x20, 0x63, 0xcc, 0xb1, 0x2a, 0x78, 0xa3, 0x81, 0x6f, 0xe3, + 0x23, 0x0c, 0x79, 0x7a, 0x2f, 0xe4, 0x17, 0xd3, 0x2c, 0x7a, 0xf9, 0x08, 0xeb, 0x2b, 0xc7, 0xd2, + 0x37, 0x64, 0x64, 0xc5, 0x6f, 0x7b, 0xf0, 0xf6, 0xdb, 0x45, 0x17, 0xbd, 0x3c, 0x6a, 0x6f, 0x3b, + 0xe8, 0x33, 0x39, 0x71, 0x1f, 0xe5, 0x80, 0x0d, 0x70, 0xc4, 0xf3, 0x7b, 0x23, 0xae, 0x11, 0x5b, + 0xf4, 0xf2, 0xb1, 0x33, 0xf8, 0x0e, 0xc9, 0x07, 0x12, 0xdd, 0x58, 0x9d, 0x3e, 0x23, 0xfd, 0x5f, + 0xa2, 0x89, 0x03, 0x7c, 0x95, 0xf6, 0x48, 0x4f, 0xc9, 0x93, 0x9a, 0xeb, 0xbd, 0xc0, 0xe5, 0xc3, + 0xdc, 0x15, 0x1f, 0x8f, 0xce, 0x83, 0x79, 0x48, 0x9e, 0xfa, 0xa9, 0xf3, 0x3f, 0x24, 0xdd, 0xc0, + 0xee, 0xd1, 0xa7, 0x9a, 0x8f, 0xbb, 0xb7, 0xba, 0xc2, 0x98, 0xc1, 0x8f, 0x4b, 0x8f, 0x4b, 0xd0, + 0xdc, 0x48, 0x06, 0xa5, 0xcc, 0xa4, 0x30, 0xb8, 0x71, 0xe6, 0x24, 0x5e, 0xa8, 0xea, 0xe1, 0x7f, + 0xe5, 0xe2, 0xf6, 0xcd, 0x7a, 0x80, 0xb6, 0xf7, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x67, 0x50, + 0x6e, 0x13, 0x61, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/metric_value.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/metric_value.pb.go new file mode 100644 index 0000000..0a2c593 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/metric_value.pb.go @@ -0,0 +1,325 @@ +// Code generated by protoc-gen-go. +// source: google/api/servicecontrol/v1/metric_value.proto +// DO NOT EDIT! + +package servicecontrol + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" +import _ "google.golang.org/genproto/googleapis/type/money" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Represents a single metric value. +type MetricValue struct { + // The labels describing the metric value. + // See comments on [google.api.servicecontrol.v1.Operation.labels][google.api.servicecontrol.v1.Operation.labels] for + // the overriding relationship. + Labels map[string]string `protobuf:"bytes,1,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The start of the time period over which this metric value's measurement + // applies. The time period has different semantics for different metric + // types (cumulative, delta, and gauge). See the metric definition + // documentation in the service configuration for details. + StartTime *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The end of the time period over which this metric value's measurement + // applies. + EndTime *google_protobuf3.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // The value. The type of value used in the request must + // agree with the metric definition in the service configuration, otherwise + // the MetricValue is rejected. + // + // Types that are valid to be assigned to Value: + // *MetricValue_BoolValue + // *MetricValue_Int64Value + // *MetricValue_DoubleValue + // *MetricValue_StringValue + // *MetricValue_DistributionValue + Value isMetricValue_Value `protobuf_oneof:"value"` +} + +func (m *MetricValue) Reset() { *m = MetricValue{} } +func (m *MetricValue) String() string { return proto.CompactTextString(m) } +func (*MetricValue) ProtoMessage() {} +func (*MetricValue) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +type isMetricValue_Value interface { + isMetricValue_Value() +} + +type MetricValue_BoolValue struct { + BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,oneof"` +} +type MetricValue_Int64Value struct { + Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value,oneof"` +} +type MetricValue_DoubleValue struct { + DoubleValue float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue,oneof"` +} +type MetricValue_StringValue struct { + StringValue string `protobuf:"bytes,7,opt,name=string_value,json=stringValue,oneof"` +} +type MetricValue_DistributionValue struct { + DistributionValue *Distribution `protobuf:"bytes,8,opt,name=distribution_value,json=distributionValue,oneof"` +} + +func (*MetricValue_BoolValue) isMetricValue_Value() {} +func (*MetricValue_Int64Value) isMetricValue_Value() {} +func (*MetricValue_DoubleValue) isMetricValue_Value() {} +func (*MetricValue_StringValue) isMetricValue_Value() {} +func (*MetricValue_DistributionValue) isMetricValue_Value() {} + +func (m *MetricValue) GetValue() isMetricValue_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *MetricValue) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *MetricValue) GetStartTime() *google_protobuf3.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *MetricValue) GetEndTime() *google_protobuf3.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *MetricValue) GetBoolValue() bool { + if x, ok := m.GetValue().(*MetricValue_BoolValue); ok { + return x.BoolValue + } + return false +} + +func (m *MetricValue) GetInt64Value() int64 { + if x, ok := m.GetValue().(*MetricValue_Int64Value); ok { + return x.Int64Value + } + return 0 +} + +func (m *MetricValue) GetDoubleValue() float64 { + if x, ok := m.GetValue().(*MetricValue_DoubleValue); ok { + return x.DoubleValue + } + return 0 +} + +func (m *MetricValue) GetStringValue() string { + if x, ok := m.GetValue().(*MetricValue_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *MetricValue) GetDistributionValue() *Distribution { + if x, ok := m.GetValue().(*MetricValue_DistributionValue); ok { + return x.DistributionValue + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*MetricValue) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _MetricValue_OneofMarshaler, _MetricValue_OneofUnmarshaler, _MetricValue_OneofSizer, []interface{}{ + (*MetricValue_BoolValue)(nil), + (*MetricValue_Int64Value)(nil), + (*MetricValue_DoubleValue)(nil), + (*MetricValue_StringValue)(nil), + (*MetricValue_DistributionValue)(nil), + } +} + +func _MetricValue_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*MetricValue) + // value + switch x := m.Value.(type) { + case *MetricValue_BoolValue: + t := uint64(0) + if x.BoolValue { + t = 1 + } + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *MetricValue_Int64Value: + b.EncodeVarint(5<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Int64Value)) + case *MetricValue_DoubleValue: + b.EncodeVarint(6<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.DoubleValue)) + case *MetricValue_StringValue: + b.EncodeVarint(7<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *MetricValue_DistributionValue: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DistributionValue); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("MetricValue.Value has unexpected type %T", x) + } + return nil +} + +func _MetricValue_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*MetricValue) + switch tag { + case 4: // value.bool_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &MetricValue_BoolValue{x != 0} + return true, err + case 5: // value.int64_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &MetricValue_Int64Value{int64(x)} + return true, err + case 6: // value.double_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Value = &MetricValue_DoubleValue{math.Float64frombits(x)} + return true, err + case 7: // value.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Value = &MetricValue_StringValue{x} + return true, err + case 8: // value.distribution_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Distribution) + err := b.DecodeMessage(msg) + m.Value = &MetricValue_DistributionValue{msg} + return true, err + default: + return false, nil + } +} + +func _MetricValue_OneofSizer(msg proto.Message) (n int) { + m := msg.(*MetricValue) + // value + switch x := m.Value.(type) { + case *MetricValue_BoolValue: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += 1 + case *MetricValue_Int64Value: + n += proto.SizeVarint(5<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Int64Value)) + case *MetricValue_DoubleValue: + n += proto.SizeVarint(6<<3 | proto.WireFixed64) + n += 8 + case *MetricValue_StringValue: + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *MetricValue_DistributionValue: + s := proto.Size(x.DistributionValue) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents a set of metric values in the same metric. +// Each metric value in the set should have a unique combination of start time, +// end time, and label values. +type MetricValueSet struct { + // The metric name defined in the service configuration. + MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName" json:"metric_name,omitempty"` + // The values in this metric. + MetricValues []*MetricValue `protobuf:"bytes,2,rep,name=metric_values,json=metricValues" json:"metric_values,omitempty"` +} + +func (m *MetricValueSet) Reset() { *m = MetricValueSet{} } +func (m *MetricValueSet) String() string { return proto.CompactTextString(m) } +func (*MetricValueSet) ProtoMessage() {} +func (*MetricValueSet) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *MetricValueSet) GetMetricName() string { + if m != nil { + return m.MetricName + } + return "" +} + +func (m *MetricValueSet) GetMetricValues() []*MetricValue { + if m != nil { + return m.MetricValues + } + return nil +} + +func init() { + proto.RegisterType((*MetricValue)(nil), "google.api.servicecontrol.v1.MetricValue") + proto.RegisterType((*MetricValueSet)(nil), "google.api.servicecontrol.v1.MetricValueSet") +} + +func init() { proto.RegisterFile("google/api/servicecontrol/v1/metric_value.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 482 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcf, 0x8b, 0xd3, 0x40, + 0x14, 0xc7, 0x3b, 0x8d, 0xdb, 0x1f, 0x2f, 0xab, 0x68, 0x14, 0x0c, 0x65, 0xa1, 0x71, 0xbd, 0x44, + 0x0f, 0x13, 0x76, 0x75, 0xc5, 0xd5, 0x5b, 0x51, 0x28, 0xe2, 0x2e, 0x4b, 0x14, 0x0f, 0x7a, 0x58, + 0x26, 0xed, 0x33, 0x0c, 0x26, 0x33, 0x21, 0x33, 0x2d, 0xf4, 0xe8, 0xcd, 0x3f, 0xd9, 0x8b, 0x20, + 0xf3, 0xa3, 0x9a, 0x82, 0xd4, 0xbd, 0xe5, 0x7d, 0xf3, 0xfd, 0xbc, 0x7c, 0x27, 0xef, 0x0d, 0x64, + 0xa5, 0x94, 0x65, 0x85, 0x19, 0x6b, 0x78, 0xa6, 0xb0, 0x5d, 0xf3, 0x05, 0x2e, 0xa4, 0xd0, 0xad, + 0xac, 0xb2, 0xf5, 0x49, 0x56, 0xa3, 0x6e, 0xf9, 0xe2, 0x7a, 0xcd, 0xaa, 0x15, 0xd2, 0xa6, 0x95, + 0x5a, 0x46, 0x47, 0x0e, 0xa0, 0xac, 0xe1, 0x74, 0x17, 0xa0, 0xeb, 0x93, 0xc9, 0x51, 0xa7, 0x1d, + 0x13, 0x42, 0x6a, 0xa6, 0xb9, 0x14, 0xca, 0xb1, 0x93, 0xfd, 0x1f, 0x5b, 0x72, 0xa5, 0x5b, 0x5e, + 0xac, 0x0c, 0xe1, 0x81, 0xa9, 0x07, 0x6c, 0x55, 0xac, 0xbe, 0x66, 0x9a, 0xd7, 0xa8, 0x34, 0xab, + 0x1b, 0x6f, 0x78, 0xe8, 0x0d, 0x7a, 0xd3, 0x60, 0x56, 0x4b, 0x81, 0x1b, 0xf7, 0xe2, 0xf8, 0x57, + 0x00, 0xe1, 0x85, 0x4d, 0xff, 0xc9, 0x84, 0x8f, 0x2e, 0x60, 0x50, 0xb1, 0x02, 0x2b, 0x15, 0x93, + 0x24, 0x48, 0xc3, 0xd3, 0x33, 0xba, 0xef, 0x1c, 0xb4, 0x83, 0xd2, 0xf7, 0x96, 0x7b, 0x2b, 0x74, + 0xbb, 0xc9, 0x7d, 0x93, 0xe8, 0x1c, 0x40, 0x69, 0xd6, 0xea, 0x6b, 0x13, 0x28, 0xee, 0x27, 0x24, + 0x0d, 0x4f, 0x27, 0xdb, 0x96, 0xdb, 0xb4, 0xf4, 0xe3, 0x36, 0x6d, 0x3e, 0xb6, 0x6e, 0x53, 0x47, + 0x67, 0x30, 0x42, 0xb1, 0x74, 0x60, 0xf0, 0x5f, 0x70, 0x88, 0x62, 0x69, 0xb1, 0x29, 0x40, 0x21, + 0x65, 0xe5, 0x66, 0x11, 0xdf, 0x4a, 0x48, 0x3a, 0x9a, 0xf7, 0xf2, 0xb1, 0xd1, 0xdc, 0x09, 0x1f, + 0x41, 0xc8, 0x85, 0x7e, 0xf1, 0xdc, 0x3b, 0x0e, 0x12, 0x92, 0x06, 0xf3, 0x5e, 0x0e, 0x56, 0x74, + 0x96, 0xc7, 0x70, 0xb8, 0x94, 0xab, 0xa2, 0x42, 0xef, 0x19, 0x24, 0x24, 0x25, 0xf3, 0x5e, 0x1e, + 0x3a, 0xf5, 0x8f, 0xc9, 0xcc, 0x41, 0x94, 0xde, 0x34, 0x4c, 0x48, 0x3a, 0x36, 0x26, 0xa7, 0x3a, + 0xd3, 0x17, 0x88, 0xba, 0xe3, 0xf2, 0xd6, 0x91, 0x3d, 0xce, 0xd3, 0xfd, 0xbf, 0xf6, 0x4d, 0x87, + 0x9b, 0xf7, 0xf2, 0x7b, 0xdd, 0x3e, 0xb6, 0xf9, 0xe4, 0x1c, 0xc2, 0xce, 0x3f, 0x8f, 0xee, 0x42, + 0xf0, 0x0d, 0x37, 0x31, 0x31, 0x39, 0x72, 0xf3, 0x18, 0x3d, 0x80, 0x03, 0xf7, 0xc1, 0xbe, 0xd5, + 0x5c, 0xf1, 0xaa, 0xff, 0x92, 0xcc, 0x86, 0xfe, 0xcd, 0xf1, 0x77, 0x02, 0x77, 0x3a, 0x43, 0xfc, + 0x80, 0x3a, 0x9a, 0x42, 0xe8, 0xf7, 0x59, 0xb0, 0x1a, 0x7d, 0x3f, 0x70, 0xd2, 0x25, 0xab, 0x31, + 0xba, 0x84, 0xdb, 0xdd, 0x85, 0x57, 0x71, 0xdf, 0xae, 0xca, 0x93, 0x1b, 0xaf, 0x4a, 0x7e, 0x58, + 0xff, 0x2d, 0xd4, 0xec, 0x07, 0x81, 0x64, 0x21, 0xeb, 0xbd, 0xf8, 0xec, 0xfe, 0x6e, 0xca, 0x2b, + 0xb3, 0x02, 0x57, 0xe4, 0xf3, 0x3b, 0x0f, 0x95, 0xb2, 0x62, 0xa2, 0xa4, 0xb2, 0x2d, 0xb3, 0x12, + 0x85, 0x5d, 0x10, 0x7f, 0x8b, 0x58, 0xc3, 0xd5, 0xbf, 0x6f, 0xd2, 0xeb, 0x5d, 0xe5, 0x27, 0x21, + 0xc5, 0xc0, 0x92, 0xcf, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x00, 0x1a, 0xde, 0xef, 0x03, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/operation.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/operation.pb.go new file mode 100644 index 0000000..fa5449b --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/operation.pb.go @@ -0,0 +1,216 @@ +// Code generated by protoc-gen-go. +// source: google/api/servicecontrol/v1/operation.proto +// DO NOT EDIT! + +package servicecontrol + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Defines the importance of the data contained in the operation. +type Operation_Importance int32 + +const ( + // The API implementation may cache and aggregate the data. + // The data may be lost when rare and unexpected system failures occur. + Operation_LOW Operation_Importance = 0 + // The API implementation doesn't cache and aggregate the data. + // If the method returns successfully, it's guaranteed that the data has + // been persisted in durable storage. + Operation_HIGH Operation_Importance = 1 +) + +var Operation_Importance_name = map[int32]string{ + 0: "LOW", + 1: "HIGH", +} +var Operation_Importance_value = map[string]int32{ + "LOW": 0, + "HIGH": 1, +} + +func (x Operation_Importance) String() string { + return proto.EnumName(Operation_Importance_name, int32(x)) +} +func (Operation_Importance) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{0, 0} } + +// Represents information regarding an operation. +type Operation struct { + // Identity of the operation. This must be unique within the scope of the + // service that generated the operation. If the service calls + // Check() and Report() on the same operation, the two calls should carry + // the same id. + // + // UUID version 4 is recommended, though not required. + // In scenarios where an operation is computed from existing information + // and an idempotent id is desirable for deduplication purpose, UUID version 5 + // is recommended. See RFC 4122 for details. + OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // Fully qualified name of the operation. Reserved for future use. + OperationName string `protobuf:"bytes,2,opt,name=operation_name,json=operationName" json:"operation_name,omitempty"` + // Identity of the consumer who is using the service. + // This field should be filled in for the operations initiated by a + // consumer, but not for service-initiated operations that are + // not related to a specific consumer. + // + // This can be in one of the following formats: + // project:<project_id>, + // project_number:<project_number>, + // api_key:<api_key>. + ConsumerId string `protobuf:"bytes,3,opt,name=consumer_id,json=consumerId" json:"consumer_id,omitempty"` + // Required. Start time of the operation. + StartTime *google_protobuf3.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // End time of the operation. + // Required when the operation is used in [ServiceController.Report][google.api.servicecontrol.v1.ServiceController.Report], + // but optional when the operation is used in [ServiceController.Check][google.api.servicecontrol.v1.ServiceController.Check]. + EndTime *google_protobuf3.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Labels describing the operation. Only the following labels are allowed: + // + // - Labels describing monitored resources as defined in + // the service configuration. + // - Default labels of metric values. When specified, labels defined in the + // metric value override these default. + // - The following labels defined by Google Cloud Platform: + // - `cloud.googleapis.com/location` describing the location where the + // operation happened, + // - `servicecontrol.googleapis.com/user_agent` describing the user agent + // of the API request, + // - `servicecontrol.googleapis.com/service_agent` describing the service + // used to handle the API request (e.g. ESP), + // - `servicecontrol.googleapis.com/platform` describing the platform + // where the API is served (e.g. GAE, GCE, GKE). + Labels map[string]string `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Represents information about this operation. Each MetricValueSet + // corresponds to a metric defined in the service configuration. + // The data type used in the MetricValueSet must agree with + // the data type specified in the metric definition. + // + // Within a single operation, it is not allowed to have more than one + // MetricValue instances that have the same metric names and identical + // label value combinations. If a request has such duplicated MetricValue + // instances, the entire request is rejected with + // an invalid argument error. + MetricValueSets []*MetricValueSet `protobuf:"bytes,7,rep,name=metric_value_sets,json=metricValueSets" json:"metric_value_sets,omitempty"` + // Represents information to be logged. + LogEntries []*LogEntry `protobuf:"bytes,8,rep,name=log_entries,json=logEntries" json:"log_entries,omitempty"` + // DO NOT USE. This is an experimental field. + Importance Operation_Importance `protobuf:"varint,11,opt,name=importance,enum=google.api.servicecontrol.v1.Operation_Importance" json:"importance,omitempty"` +} + +func (m *Operation) Reset() { *m = Operation{} } +func (m *Operation) String() string { return proto.CompactTextString(m) } +func (*Operation) ProtoMessage() {} +func (*Operation) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *Operation) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *Operation) GetOperationName() string { + if m != nil { + return m.OperationName + } + return "" +} + +func (m *Operation) GetConsumerId() string { + if m != nil { + return m.ConsumerId + } + return "" +} + +func (m *Operation) GetStartTime() *google_protobuf3.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *Operation) GetEndTime() *google_protobuf3.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *Operation) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *Operation) GetMetricValueSets() []*MetricValueSet { + if m != nil { + return m.MetricValueSets + } + return nil +} + +func (m *Operation) GetLogEntries() []*LogEntry { + if m != nil { + return m.LogEntries + } + return nil +} + +func (m *Operation) GetImportance() Operation_Importance { + if m != nil { + return m.Importance + } + return Operation_LOW +} + +func init() { + proto.RegisterType((*Operation)(nil), "google.api.servicecontrol.v1.Operation") + proto.RegisterEnum("google.api.servicecontrol.v1.Operation_Importance", Operation_Importance_name, Operation_Importance_value) +} + +func init() { proto.RegisterFile("google/api/servicecontrol/v1/operation.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 483 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcf, 0x6b, 0x13, 0x41, + 0x14, 0xc7, 0x9d, 0xa6, 0xf9, 0xf5, 0x56, 0x63, 0x1c, 0x3c, 0x2c, 0xa1, 0x90, 0x58, 0x50, 0x72, + 0x28, 0xb3, 0x34, 0x45, 0xb0, 0x7a, 0x2b, 0x48, 0x1b, 0x8d, 0xb6, 0xac, 0xa2, 0xe2, 0x25, 0x4c, + 0x36, 0xcf, 0x65, 0x70, 0x77, 0x66, 0x99, 0x99, 0x04, 0x7a, 0xf6, 0xe2, 0x9f, 0xec, 0x51, 0x76, + 0xf6, 0x47, 0x13, 0x90, 0xb5, 0xb7, 0x7d, 0x8f, 0xef, 0xe7, 0xbb, 0xdf, 0x79, 0x6f, 0x06, 0x4e, + 0x62, 0xa5, 0xe2, 0x04, 0x03, 0x9e, 0x89, 0xc0, 0xa0, 0xde, 0x8a, 0x08, 0x23, 0x25, 0xad, 0x56, + 0x49, 0xb0, 0x3d, 0x0d, 0x54, 0x86, 0x9a, 0x5b, 0xa1, 0x24, 0xcb, 0xb4, 0xb2, 0x8a, 0x1e, 0x15, + 0x6a, 0xc6, 0x33, 0xc1, 0xf6, 0xd5, 0x6c, 0x7b, 0x3a, 0x3a, 0xda, 0xf1, 0xe2, 0x52, 0x2a, 0xeb, + 0x50, 0x53, 0xb0, 0xa3, 0xe6, 0x3f, 0x25, 0x2a, 0x5e, 0xa2, 0xb4, 0xfa, 0xb6, 0x54, 0x07, 0x8d, + 0xea, 0x14, 0xad, 0x16, 0xd1, 0x72, 0xcb, 0x93, 0x0d, 0x96, 0xc0, 0xb8, 0x04, 0x5c, 0xb5, 0xda, + 0xfc, 0x08, 0xac, 0x48, 0xd1, 0x58, 0x9e, 0x66, 0x85, 0xe0, 0xf8, 0x77, 0x1b, 0xfa, 0xd7, 0xd5, + 0x79, 0xe8, 0x33, 0x78, 0x58, 0x1f, 0x6e, 0x29, 0xd6, 0x3e, 0x99, 0x90, 0x69, 0x3f, 0xf4, 0xea, + 0xde, 0x7c, 0x4d, 0x9f, 0xc3, 0xe0, 0x4e, 0x22, 0x79, 0x8a, 0xfe, 0x81, 0x13, 0x3d, 0xaa, 0xbb, + 0x1f, 0x79, 0x8a, 0x74, 0x0c, 0x5e, 0xa4, 0xa4, 0xd9, 0xa4, 0xa8, 0x73, 0xa3, 0x96, 0xd3, 0x40, + 0xd5, 0x9a, 0xaf, 0xe9, 0x39, 0x80, 0xb1, 0x5c, 0xdb, 0x65, 0x9e, 0xc8, 0x3f, 0x9c, 0x90, 0xa9, + 0x37, 0x1b, 0xb1, 0x72, 0x92, 0x55, 0x5c, 0xf6, 0xb9, 0x8a, 0x1b, 0xf6, 0x9d, 0x3a, 0xaf, 0xe9, + 0x4b, 0xe8, 0xa1, 0x5c, 0x17, 0x60, 0xfb, 0xbf, 0x60, 0x17, 0xe5, 0xda, 0x61, 0xef, 0xa1, 0x93, + 0xf0, 0x15, 0x26, 0xc6, 0xef, 0x4c, 0x5a, 0x53, 0x6f, 0x76, 0xc6, 0x9a, 0xf6, 0xc6, 0xea, 0xa9, + 0xb0, 0x85, 0xa3, 0xde, 0xe6, 0x7b, 0x08, 0x4b, 0x0b, 0xfa, 0x0d, 0x9e, 0xec, 0x8e, 0x7b, 0x69, + 0xd0, 0x1a, 0xbf, 0xeb, 0x7c, 0x4f, 0x9a, 0x7d, 0x3f, 0x38, 0xec, 0x4b, 0x4e, 0x7d, 0x42, 0x1b, + 0x3e, 0x4e, 0xf7, 0x6a, 0x43, 0x2f, 0xc1, 0xab, 0xd6, 0x2e, 0xd0, 0xf8, 0x3d, 0xe7, 0xf9, 0xa2, + 0xd9, 0x73, 0xa1, 0xe2, 0x22, 0x1e, 0x24, 0xc5, 0x97, 0x40, 0x43, 0x43, 0x00, 0x91, 0x66, 0x4a, + 0x5b, 0x2e, 0x23, 0xf4, 0xbd, 0x09, 0x99, 0x0e, 0x66, 0xb3, 0xfb, 0x9e, 0x79, 0x5e, 0x93, 0xe1, + 0x8e, 0xcb, 0xe8, 0x1c, 0xbc, 0x9d, 0x69, 0xd0, 0x21, 0xb4, 0x7e, 0xe2, 0x6d, 0x79, 0x4d, 0xf2, + 0x4f, 0xfa, 0x14, 0xda, 0x6e, 0x20, 0xe5, 0xad, 0x28, 0x8a, 0xd7, 0x07, 0xaf, 0xc8, 0xf1, 0x18, + 0xe0, 0xce, 0x94, 0x76, 0xa1, 0xb5, 0xb8, 0xfe, 0x3a, 0x7c, 0x40, 0x7b, 0x70, 0x78, 0x35, 0xbf, + 0xbc, 0x1a, 0x92, 0x8b, 0x5f, 0x04, 0x26, 0x91, 0x4a, 0x1b, 0x13, 0x5e, 0x0c, 0xea, 0x88, 0x37, + 0xf9, 0xaa, 0x6f, 0xc8, 0xf7, 0x77, 0xa5, 0x3e, 0x56, 0x09, 0x97, 0x31, 0x53, 0x3a, 0x0e, 0x62, + 0x94, 0xee, 0x22, 0x94, 0xcf, 0x85, 0x67, 0xc2, 0xfc, 0xfb, 0xc9, 0xbc, 0xd9, 0xef, 0xfc, 0x21, + 0x64, 0xd5, 0x71, 0xe4, 0xd9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8d, 0x9c, 0xc2, 0x5d, 0x03, + 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/service_controller.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/service_controller.pb.go new file mode 100644 index 0000000..2f34a99 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/service_controller.pb.go @@ -0,0 +1,424 @@ +// Code generated by protoc-gen-go. +// source: google/api/servicecontrol/v1/service_controller.proto +// DO NOT EDIT! + +package servicecontrol + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request message for the Check method. +type CheckRequest struct { + // The service name as specified in its service configuration. For example, + // `"pubsub.googleapis.com"`. + // + // See [google.api.Service][google.api.Service] for the definition of a service name. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The operation to be checked. + Operation *Operation `protobuf:"bytes,2,opt,name=operation" json:"operation,omitempty"` + // Specifies which version of service configuration should be used to process + // the request. + // + // If unspecified or no matching version can be found, the + // latest one will be used. + ServiceConfigId string `protobuf:"bytes,4,opt,name=service_config_id,json=serviceConfigId" json:"service_config_id,omitempty"` +} + +func (m *CheckRequest) Reset() { *m = CheckRequest{} } +func (m *CheckRequest) String() string { return proto.CompactTextString(m) } +func (*CheckRequest) ProtoMessage() {} +func (*CheckRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +func (m *CheckRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *CheckRequest) GetOperation() *Operation { + if m != nil { + return m.Operation + } + return nil +} + +func (m *CheckRequest) GetServiceConfigId() string { + if m != nil { + return m.ServiceConfigId + } + return "" +} + +// Response message for the Check method. +type CheckResponse struct { + // The same operation_id value used in the CheckRequest. + // Used for logging and diagnostics purposes. + OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // Indicate the decision of the check. + // + // If no check errors are present, the service should process the operation. + // Otherwise the service should use the list of errors to determine the + // appropriate action. + CheckErrors []*CheckError `protobuf:"bytes,2,rep,name=check_errors,json=checkErrors" json:"check_errors,omitempty"` + // The actual config id used to process the request. + ServiceConfigId string `protobuf:"bytes,5,opt,name=service_config_id,json=serviceConfigId" json:"service_config_id,omitempty"` +} + +func (m *CheckResponse) Reset() { *m = CheckResponse{} } +func (m *CheckResponse) String() string { return proto.CompactTextString(m) } +func (*CheckResponse) ProtoMessage() {} +func (*CheckResponse) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{1} } + +func (m *CheckResponse) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *CheckResponse) GetCheckErrors() []*CheckError { + if m != nil { + return m.CheckErrors + } + return nil +} + +func (m *CheckResponse) GetServiceConfigId() string { + if m != nil { + return m.ServiceConfigId + } + return "" +} + +// Request message for the Report method. +type ReportRequest struct { + // The service name as specified in its service configuration. For example, + // `"pubsub.googleapis.com"`. + // + // See [google.api.Service][google.api.Service] for the definition of a service name. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // Operations to be reported. + // + // Typically the service should report one operation per request. + // Putting multiple operations into a single request is allowed, but should + // be used only when multiple operations are natually available at the time + // of the report. + // + // If multiple operations are in a single request, the total request size + // should be no larger than 1MB. See [ReportResponse.report_errors][google.api.servicecontrol.v1.ReportResponse.report_errors] for + // partial failure behavior. + Operations []*Operation `protobuf:"bytes,2,rep,name=operations" json:"operations,omitempty"` + // Specifies which version of service config should be used to process the + // request. + // + // If unspecified or no matching version can be found, the + // latest one will be used. + ServiceConfigId string `protobuf:"bytes,3,opt,name=service_config_id,json=serviceConfigId" json:"service_config_id,omitempty"` +} + +func (m *ReportRequest) Reset() { *m = ReportRequest{} } +func (m *ReportRequest) String() string { return proto.CompactTextString(m) } +func (*ReportRequest) ProtoMessage() {} +func (*ReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2} } + +func (m *ReportRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *ReportRequest) GetOperations() []*Operation { + if m != nil { + return m.Operations + } + return nil +} + +func (m *ReportRequest) GetServiceConfigId() string { + if m != nil { + return m.ServiceConfigId + } + return "" +} + +// Response message for the Report method. +type ReportResponse struct { + // Partial failures, one for each `Operation` in the request that failed + // processing. There are three possible combinations of the RPC status: + // + // 1. The combination of a successful RPC status and an empty `report_errors` + // list indicates a complete success where all `Operations` in the + // request are processed successfully. + // 2. The combination of a successful RPC status and a non-empty + // `report_errors` list indicates a partial success where some + // `Operations` in the request succeeded. Each + // `Operation` that failed processing has a corresponding item + // in this list. + // 3. A failed RPC status indicates a complete failure where none of the + // `Operations` in the request succeeded. + ReportErrors []*ReportResponse_ReportError `protobuf:"bytes,1,rep,name=report_errors,json=reportErrors" json:"report_errors,omitempty"` + // The actual config id used to process the request. + ServiceConfigId string `protobuf:"bytes,2,opt,name=service_config_id,json=serviceConfigId" json:"service_config_id,omitempty"` +} + +func (m *ReportResponse) Reset() { *m = ReportResponse{} } +func (m *ReportResponse) String() string { return proto.CompactTextString(m) } +func (*ReportResponse) ProtoMessage() {} +func (*ReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{3} } + +func (m *ReportResponse) GetReportErrors() []*ReportResponse_ReportError { + if m != nil { + return m.ReportErrors + } + return nil +} + +func (m *ReportResponse) GetServiceConfigId() string { + if m != nil { + return m.ServiceConfigId + } + return "" +} + +// Represents the processing error of one `Operation` in the request. +type ReportResponse_ReportError struct { + // The [Operation.operation_id][google.api.servicecontrol.v1.Operation.operation_id] value from the request. + OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // Details of the error when processing the `Operation`. + Status *google_rpc.Status `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"` +} + +func (m *ReportResponse_ReportError) Reset() { *m = ReportResponse_ReportError{} } +func (m *ReportResponse_ReportError) String() string { return proto.CompactTextString(m) } +func (*ReportResponse_ReportError) ProtoMessage() {} +func (*ReportResponse_ReportError) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{3, 0} } + +func (m *ReportResponse_ReportError) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *ReportResponse_ReportError) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func init() { + proto.RegisterType((*CheckRequest)(nil), "google.api.servicecontrol.v1.CheckRequest") + proto.RegisterType((*CheckResponse)(nil), "google.api.servicecontrol.v1.CheckResponse") + proto.RegisterType((*ReportRequest)(nil), "google.api.servicecontrol.v1.ReportRequest") + proto.RegisterType((*ReportResponse)(nil), "google.api.servicecontrol.v1.ReportResponse") + proto.RegisterType((*ReportResponse_ReportError)(nil), "google.api.servicecontrol.v1.ReportResponse.ReportError") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ServiceController service + +type ServiceControllerClient interface { + // Checks an operation with Google Service Control to decide whether + // the given operation should proceed. It should be called before the + // operation is executed. + // + // If feasible, the client should cache the check results and reuse them for + // up to 60s. In case of server errors, the client may rely on the cached + // results for longer time. + // + // This method requires the `servicemanagement.services.check` permission + // on the specified service. For more information, see + // [Google Cloud IAM](https://cloud.google.com/iam). + Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error) + // Reports operations to Google Service Control. It should be called + // after the operation is completed. + // + // If feasible, the client should aggregate reporting data for up to 5s to + // reduce API traffic. Limiting aggregation to 5s is to reduce data loss + // during client crashes. Clients should carefully choose the aggregation + // window to avoid data loss risk more than 0.01% for business and + // compliance reasons. + // + // This method requires the `servicemanagement.services.report` permission + // on the specified service. For more information, see + // [Google Cloud IAM](https://cloud.google.com/iam). + Report(ctx context.Context, in *ReportRequest, opts ...grpc.CallOption) (*ReportResponse, error) +} + +type serviceControllerClient struct { + cc *grpc.ClientConn +} + +func NewServiceControllerClient(cc *grpc.ClientConn) ServiceControllerClient { + return &serviceControllerClient{cc} +} + +func (c *serviceControllerClient) Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error) { + out := new(CheckResponse) + err := grpc.Invoke(ctx, "/google.api.servicecontrol.v1.ServiceController/Check", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceControllerClient) Report(ctx context.Context, in *ReportRequest, opts ...grpc.CallOption) (*ReportResponse, error) { + out := new(ReportResponse) + err := grpc.Invoke(ctx, "/google.api.servicecontrol.v1.ServiceController/Report", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ServiceController service + +type ServiceControllerServer interface { + // Checks an operation with Google Service Control to decide whether + // the given operation should proceed. It should be called before the + // operation is executed. + // + // If feasible, the client should cache the check results and reuse them for + // up to 60s. In case of server errors, the client may rely on the cached + // results for longer time. + // + // This method requires the `servicemanagement.services.check` permission + // on the specified service. For more information, see + // [Google Cloud IAM](https://cloud.google.com/iam). + Check(context.Context, *CheckRequest) (*CheckResponse, error) + // Reports operations to Google Service Control. It should be called + // after the operation is completed. + // + // If feasible, the client should aggregate reporting data for up to 5s to + // reduce API traffic. Limiting aggregation to 5s is to reduce data loss + // during client crashes. Clients should carefully choose the aggregation + // window to avoid data loss risk more than 0.01% for business and + // compliance reasons. + // + // This method requires the `servicemanagement.services.report` permission + // on the specified service. For more information, see + // [Google Cloud IAM](https://cloud.google.com/iam). + Report(context.Context, *ReportRequest) (*ReportResponse, error) +} + +func RegisterServiceControllerServer(s *grpc.Server, srv ServiceControllerServer) { + s.RegisterService(&_ServiceController_serviceDesc, srv) +} + +func _ServiceController_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceControllerServer).Check(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicecontrol.v1.ServiceController/Check", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceControllerServer).Check(ctx, req.(*CheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceController_Report_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceControllerServer).Report(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicecontrol.v1.ServiceController/Report", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceControllerServer).Report(ctx, req.(*ReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ServiceController_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.api.servicecontrol.v1.ServiceController", + HandlerType: (*ServiceControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Check", + Handler: _ServiceController_Check_Handler, + }, + { + MethodName: "Report", + Handler: _ServiceController_Report_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/api/servicecontrol/v1/service_controller.proto", +} + +func init() { + proto.RegisterFile("google/api/servicecontrol/v1/service_controller.proto", fileDescriptor5) +} + +var fileDescriptor5 = []byte{ + // 537 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xcf, 0x6e, 0xd3, 0x40, + 0x10, 0xc6, 0xb5, 0xee, 0x1f, 0xa9, 0xe3, 0x04, 0xd4, 0x3d, 0x40, 0x64, 0xf5, 0x90, 0xfa, 0x40, + 0x23, 0x37, 0xd8, 0x6a, 0x10, 0x12, 0x0a, 0x27, 0x1a, 0x55, 0x55, 0x41, 0x82, 0xca, 0xb9, 0x21, + 0x50, 0xb4, 0x38, 0x8b, 0xb1, 0x48, 0xbc, 0xcb, 0xae, 0x9b, 0x0b, 0xe2, 0xc2, 0x03, 0x70, 0x28, + 0x6f, 0x80, 0x90, 0x38, 0xf0, 0x04, 0x3c, 0x07, 0xaf, 0xc0, 0x43, 0xc0, 0x0d, 0x79, 0x77, 0xed, + 0x3a, 0xc2, 0x58, 0xee, 0x2d, 0x9e, 0x9d, 0xf9, 0xe6, 0xb7, 0xdf, 0x4c, 0x16, 0xee, 0xc7, 0x8c, + 0xc5, 0x0b, 0x1a, 0x10, 0x9e, 0x04, 0x92, 0x8a, 0x55, 0x12, 0xd1, 0x88, 0xa5, 0x99, 0x60, 0x8b, + 0x60, 0x75, 0x54, 0x44, 0x66, 0x26, 0xb4, 0xa0, 0xc2, 0xe7, 0x82, 0x65, 0x0c, 0xef, 0xe9, 0x32, + 0x9f, 0xf0, 0xc4, 0x5f, 0x2f, 0xf3, 0x57, 0x47, 0xce, 0x5e, 0x45, 0x94, 0xa4, 0x29, 0xcb, 0x48, + 0x96, 0xb0, 0x54, 0xea, 0x5a, 0xc7, 0x6f, 0x6c, 0x19, 0xbd, 0xa1, 0xd1, 0xdb, 0x19, 0x15, 0x82, + 0x99, 0x5e, 0xce, 0xb0, 0x31, 0x9f, 0x71, 0x2a, 0x94, 0xbc, 0xc9, 0xbe, 0x6d, 0xb2, 0x05, 0x8f, + 0x02, 0x99, 0x91, 0xec, 0xc2, 0xb4, 0x75, 0xbf, 0x22, 0xe8, 0x4c, 0x72, 0xf1, 0x90, 0xbe, 0xbb, + 0xa0, 0x32, 0xc3, 0xfb, 0xd0, 0x29, 0xee, 0x97, 0x92, 0x25, 0xed, 0xa1, 0x3e, 0x1a, 0xec, 0x84, + 0xb6, 0x89, 0x3d, 0x25, 0x4b, 0x8a, 0x4f, 0x60, 0xa7, 0xd4, 0xef, 0x59, 0x7d, 0x34, 0xb0, 0x47, + 0x07, 0x7e, 0xd3, 0xd5, 0xfd, 0x67, 0x45, 0x7a, 0x78, 0x55, 0x89, 0x3d, 0xd8, 0xad, 0x38, 0xf9, + 0x3a, 0x89, 0x67, 0xc9, 0xbc, 0xb7, 0xa9, 0xda, 0xdd, 0x34, 0x07, 0x13, 0x15, 0x3f, 0x9b, 0xbb, + 0xdf, 0x11, 0x74, 0x0d, 0xa6, 0xe4, 0x2c, 0x95, 0x34, 0xe7, 0x2c, 0xa5, 0xf2, 0x42, 0xc3, 0x59, + 0xc6, 0xce, 0xe6, 0xf8, 0x09, 0x74, 0x2a, 0xbe, 0xc9, 0x9e, 0xd5, 0xdf, 0x18, 0xd8, 0xa3, 0x41, + 0x33, 0xaa, 0xea, 0x72, 0x92, 0x17, 0x84, 0x76, 0x54, 0xfe, 0x96, 0xf5, 0xb4, 0x5b, 0xf5, 0xb4, + 0xdf, 0x10, 0x74, 0x43, 0xca, 0x99, 0xc8, 0xae, 0xe1, 0xea, 0x29, 0x40, 0x09, 0x5f, 0xb0, 0xb6, + 0xb6, 0xb5, 0x52, 0x5a, 0x4f, 0xba, 0x51, 0x4f, 0xfa, 0x07, 0xc1, 0x8d, 0x82, 0xd4, 0x18, 0xfb, + 0x12, 0xba, 0x42, 0x45, 0x0a, 0xdb, 0x90, 0x42, 0x79, 0xd0, 0x8c, 0xb2, 0x2e, 0x62, 0x3e, 0xb5, + 0x8d, 0x1d, 0x71, 0xf5, 0xf1, 0x1f, 0x3a, 0xab, 0x96, 0xce, 0x79, 0x01, 0x76, 0x45, 0xa8, 0xcd, + 0xc8, 0x3d, 0xd8, 0xd6, 0xeb, 0x6d, 0xf6, 0x12, 0x17, 0xd4, 0x82, 0x47, 0xfe, 0x54, 0x9d, 0x84, + 0x26, 0x63, 0xf4, 0xc3, 0x82, 0xdd, 0x69, 0xd9, 0xd1, 0xfc, 0x93, 0xf1, 0x27, 0x04, 0x5b, 0x6a, + 0x07, 0xb0, 0xd7, 0x62, 0x51, 0xcc, 0x7c, 0x9d, 0xc3, 0x56, 0xb9, 0xda, 0x1c, 0x77, 0xf8, 0xf1, + 0xe7, 0xaf, 0xcf, 0xd6, 0x1d, 0x77, 0xbf, 0xf2, 0x98, 0xc8, 0xe0, 0x7d, 0x75, 0x41, 0x3e, 0x8c, + 0xd5, 0xee, 0x8d, 0x91, 0x87, 0x2f, 0x11, 0x6c, 0x6b, 0x17, 0xf0, 0x61, 0xbb, 0x19, 0x68, 0xa4, + 0xe1, 0x75, 0x06, 0xe6, 0xde, 0x55, 0x4c, 0x07, 0xae, 0xdb, 0xc4, 0xa4, 0x07, 0x39, 0x46, 0xde, + 0xf1, 0x25, 0x82, 0x7e, 0xc4, 0x96, 0x8d, 0x2d, 0x8e, 0x6f, 0xfd, 0xe3, 0xee, 0x79, 0xfe, 0xe6, + 0x9c, 0xa3, 0xe7, 0x8f, 0x4d, 0x5d, 0xcc, 0x16, 0x24, 0x8d, 0x7d, 0x26, 0xe2, 0x20, 0xa6, 0xa9, + 0x7a, 0x91, 0x02, 0x7d, 0x44, 0x78, 0x22, 0xeb, 0xdf, 0xb6, 0x87, 0xeb, 0x91, 0xdf, 0x08, 0x7d, + 0xb1, 0x36, 0x4f, 0x1f, 0x4d, 0x27, 0xaf, 0xb6, 0x95, 0xc0, 0xbd, 0xbf, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x6c, 0x58, 0x92, 0x07, 0xbe, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/resources.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/resources.pb.go new file mode 100644 index 0000000..d5bbcfa --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/resources.pb.go @@ -0,0 +1,803 @@ +// Code generated by protoc-gen-go. +// source: google/api/servicemanagement/v1/resources.proto +// DO NOT EDIT! + +/* +Package servicemanagement is a generated protocol buffer package. + +It is generated from these files: + google/api/servicemanagement/v1/resources.proto + google/api/servicemanagement/v1/servicemanager.proto + +It has these top-level messages: + ManagedService + OperationMetadata + Diagnostic + ConfigSource + ConfigFile + ConfigRef + ChangeReport + Rollout + ListServicesRequest + ListServicesResponse + GetServiceRequest + CreateServiceRequest + DeleteServiceRequest + UndeleteServiceRequest + UndeleteServiceResponse + GetServiceConfigRequest + ListServiceConfigsRequest + ListServiceConfigsResponse + CreateServiceConfigRequest + SubmitConfigSourceRequest + SubmitConfigSourceResponse + CreateServiceRolloutRequest + ListServiceRolloutsRequest + ListServiceRolloutsResponse + GetServiceRolloutRequest + EnableServiceRequest + DisableServiceRequest + GenerateConfigReportRequest + GenerateConfigReportResponse +*/ +package servicemanagement + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api2 "google.golang.org/genproto/googleapis/api/configchange" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import _ "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/any" +import _ "google.golang.org/genproto/protobuf/field_mask" +import _ "github.com/golang/protobuf/ptypes/struct" +import google_protobuf9 "github.com/golang/protobuf/ptypes/timestamp" +import _ "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Code describes the status of one operation step. +type OperationMetadata_Status int32 + +const ( + // Unspecifed code. + OperationMetadata_STATUS_UNSPECIFIED OperationMetadata_Status = 0 + // The step has completed without errors. + OperationMetadata_DONE OperationMetadata_Status = 1 + // The step has not started yet. + OperationMetadata_NOT_STARTED OperationMetadata_Status = 2 + // The step is in progress. + OperationMetadata_IN_PROGRESS OperationMetadata_Status = 3 + // The step has completed with errors. + OperationMetadata_FAILED OperationMetadata_Status = 4 + // The step has completed with cancellation. + OperationMetadata_CANCELLED OperationMetadata_Status = 5 +) + +var OperationMetadata_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "DONE", + 2: "NOT_STARTED", + 3: "IN_PROGRESS", + 4: "FAILED", + 5: "CANCELLED", +} +var OperationMetadata_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "DONE": 1, + "NOT_STARTED": 2, + "IN_PROGRESS": 3, + "FAILED": 4, + "CANCELLED": 5, +} + +func (x OperationMetadata_Status) String() string { + return proto.EnumName(OperationMetadata_Status_name, int32(x)) +} +func (OperationMetadata_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +// The kind of diagnostic information possible. +type Diagnostic_Kind int32 + +const ( + // Warnings and errors + Diagnostic_WARNING Diagnostic_Kind = 0 + // Only errors + Diagnostic_ERROR Diagnostic_Kind = 1 +) + +var Diagnostic_Kind_name = map[int32]string{ + 0: "WARNING", + 1: "ERROR", +} +var Diagnostic_Kind_value = map[string]int32{ + "WARNING": 0, + "ERROR": 1, +} + +func (x Diagnostic_Kind) String() string { + return proto.EnumName(Diagnostic_Kind_name, int32(x)) +} +func (Diagnostic_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +type ConfigFile_FileType int32 + +const ( + // Unknown file type. + ConfigFile_FILE_TYPE_UNSPECIFIED ConfigFile_FileType = 0 + // YAML-specification of service. + ConfigFile_SERVICE_CONFIG_YAML ConfigFile_FileType = 1 + // OpenAPI specification, serialized in JSON. + ConfigFile_OPEN_API_JSON ConfigFile_FileType = 2 + // OpenAPI specification, serialized in YAML. + ConfigFile_OPEN_API_YAML ConfigFile_FileType = 3 + // FileDescriptorSet, generated by protoc. + // + // To generate, use protoc with imports and source info included. + // For an example test.proto file, the following command would put the value + // in a new file named out.pb. + // + // $protoc --include_imports --include_source_info test.proto -o out.pb + ConfigFile_FILE_DESCRIPTOR_SET_PROTO ConfigFile_FileType = 4 +) + +var ConfigFile_FileType_name = map[int32]string{ + 0: "FILE_TYPE_UNSPECIFIED", + 1: "SERVICE_CONFIG_YAML", + 2: "OPEN_API_JSON", + 3: "OPEN_API_YAML", + 4: "FILE_DESCRIPTOR_SET_PROTO", +} +var ConfigFile_FileType_value = map[string]int32{ + "FILE_TYPE_UNSPECIFIED": 0, + "SERVICE_CONFIG_YAML": 1, + "OPEN_API_JSON": 2, + "OPEN_API_YAML": 3, + "FILE_DESCRIPTOR_SET_PROTO": 4, +} + +func (x ConfigFile_FileType) String() string { + return proto.EnumName(ConfigFile_FileType_name, int32(x)) +} +func (ConfigFile_FileType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } + +// Status of a Rollout. +type Rollout_RolloutStatus int32 + +const ( + // No status specified. + Rollout_ROLLOUT_STATUS_UNSPECIFIED Rollout_RolloutStatus = 0 + // The Rollout is in progress. + Rollout_IN_PROGRESS Rollout_RolloutStatus = 1 + // The Rollout has completed successfully. + Rollout_SUCCESS Rollout_RolloutStatus = 2 + // The Rollout has been cancelled. This can happen if you have overlapping + // Rollout pushes, and the previous ones will be cancelled. + Rollout_CANCELLED Rollout_RolloutStatus = 3 + // The Rollout has failed. It is typically caused by configuration errors. + Rollout_FAILED Rollout_RolloutStatus = 4 + // The Rollout has not started yet and is pending for execution. + Rollout_PENDING Rollout_RolloutStatus = 5 +) + +var Rollout_RolloutStatus_name = map[int32]string{ + 0: "ROLLOUT_STATUS_UNSPECIFIED", + 1: "IN_PROGRESS", + 2: "SUCCESS", + 3: "CANCELLED", + 4: "FAILED", + 5: "PENDING", +} +var Rollout_RolloutStatus_value = map[string]int32{ + "ROLLOUT_STATUS_UNSPECIFIED": 0, + "IN_PROGRESS": 1, + "SUCCESS": 2, + "CANCELLED": 3, + "FAILED": 4, + "PENDING": 5, +} + +func (x Rollout_RolloutStatus) String() string { + return proto.EnumName(Rollout_RolloutStatus_name, int32(x)) +} +func (Rollout_RolloutStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +// The full representation of a Service that is managed by +// Google Service Management. +type ManagedService struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. + ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // ID of the project that produces and owns this service. + ProducerProjectId string `protobuf:"bytes,3,opt,name=producer_project_id,json=producerProjectId" json:"producer_project_id,omitempty"` +} + +func (m *ManagedService) Reset() { *m = ManagedService{} } +func (m *ManagedService) String() string { return proto.CompactTextString(m) } +func (*ManagedService) ProtoMessage() {} +func (*ManagedService) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ManagedService) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *ManagedService) GetProducerProjectId() string { + if m != nil { + return m.ProducerProjectId + } + return "" +} + +// The metadata associated with a long running operation resource. +type OperationMetadata struct { + // The full name of the resources that this operation is directly + // associated with. + ResourceNames []string `protobuf:"bytes,1,rep,name=resource_names,json=resourceNames" json:"resource_names,omitempty"` + // Detailed status information for each step. The order is undetermined. + Steps []*OperationMetadata_Step `protobuf:"bytes,2,rep,name=steps" json:"steps,omitempty"` + // Percentage of completion of this operation, ranging from 0 to 100. + ProgressPercentage int32 `protobuf:"varint,3,opt,name=progress_percentage,json=progressPercentage" json:"progress_percentage,omitempty"` + // The start time of the operation. + StartTime *google_protobuf9.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime" json:"start_time,omitempty"` +} + +func (m *OperationMetadata) Reset() { *m = OperationMetadata{} } +func (m *OperationMetadata) String() string { return proto.CompactTextString(m) } +func (*OperationMetadata) ProtoMessage() {} +func (*OperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *OperationMetadata) GetResourceNames() []string { + if m != nil { + return m.ResourceNames + } + return nil +} + +func (m *OperationMetadata) GetSteps() []*OperationMetadata_Step { + if m != nil { + return m.Steps + } + return nil +} + +func (m *OperationMetadata) GetProgressPercentage() int32 { + if m != nil { + return m.ProgressPercentage + } + return 0 +} + +func (m *OperationMetadata) GetStartTime() *google_protobuf9.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +// Represents the status of one operation step. +type OperationMetadata_Step struct { + // The short description of the step. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // The status code. + Status OperationMetadata_Status `protobuf:"varint,4,opt,name=status,enum=google.api.servicemanagement.v1.OperationMetadata_Status" json:"status,omitempty"` +} + +func (m *OperationMetadata_Step) Reset() { *m = OperationMetadata_Step{} } +func (m *OperationMetadata_Step) String() string { return proto.CompactTextString(m) } +func (*OperationMetadata_Step) ProtoMessage() {} +func (*OperationMetadata_Step) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +func (m *OperationMetadata_Step) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *OperationMetadata_Step) GetStatus() OperationMetadata_Status { + if m != nil { + return m.Status + } + return OperationMetadata_STATUS_UNSPECIFIED +} + +// Represents a diagnostic message (error or warning) +type Diagnostic struct { + // File name and line number of the error or warning. + Location string `protobuf:"bytes,1,opt,name=location" json:"location,omitempty"` + // The kind of diagnostic information provided. + Kind Diagnostic_Kind `protobuf:"varint,2,opt,name=kind,enum=google.api.servicemanagement.v1.Diagnostic_Kind" json:"kind,omitempty"` + // Message describing the error or warning. + Message string `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` +} + +func (m *Diagnostic) Reset() { *m = Diagnostic{} } +func (m *Diagnostic) String() string { return proto.CompactTextString(m) } +func (*Diagnostic) ProtoMessage() {} +func (*Diagnostic) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Diagnostic) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +func (m *Diagnostic) GetKind() Diagnostic_Kind { + if m != nil { + return m.Kind + } + return Diagnostic_WARNING +} + +func (m *Diagnostic) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +// Represents a source file which is used to generate the service configuration +// defined by `google.api.Service`. +type ConfigSource struct { + // A unique ID for a specific instance of this message, typically assigned + // by the client for tracking purpose. If empty, the server may choose to + // generate one instead. + Id string `protobuf:"bytes,5,opt,name=id" json:"id,omitempty"` + // Set of source configuration files that are used to generate a service + // configuration (`google.api.Service`). + Files []*ConfigFile `protobuf:"bytes,2,rep,name=files" json:"files,omitempty"` +} + +func (m *ConfigSource) Reset() { *m = ConfigSource{} } +func (m *ConfigSource) String() string { return proto.CompactTextString(m) } +func (*ConfigSource) ProtoMessage() {} +func (*ConfigSource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ConfigSource) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *ConfigSource) GetFiles() []*ConfigFile { + if m != nil { + return m.Files + } + return nil +} + +// Generic specification of a source configuration file +type ConfigFile struct { + // The file name of the configuration file (full or relative path). + FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath" json:"file_path,omitempty"` + // The bytes that constitute the file. + FileContents []byte `protobuf:"bytes,3,opt,name=file_contents,json=fileContents,proto3" json:"file_contents,omitempty"` + // The type of configuration file this represents. + FileType ConfigFile_FileType `protobuf:"varint,4,opt,name=file_type,json=fileType,enum=google.api.servicemanagement.v1.ConfigFile_FileType" json:"file_type,omitempty"` +} + +func (m *ConfigFile) Reset() { *m = ConfigFile{} } +func (m *ConfigFile) String() string { return proto.CompactTextString(m) } +func (*ConfigFile) ProtoMessage() {} +func (*ConfigFile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ConfigFile) GetFilePath() string { + if m != nil { + return m.FilePath + } + return "" +} + +func (m *ConfigFile) GetFileContents() []byte { + if m != nil { + return m.FileContents + } + return nil +} + +func (m *ConfigFile) GetFileType() ConfigFile_FileType { + if m != nil { + return m.FileType + } + return ConfigFile_FILE_TYPE_UNSPECIFIED +} + +// Represents a service configuration with its name and id. +type ConfigRef struct { + // Resource name of a service config. It must have the following + // format: "services/{service name}/configs/{config id}". + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *ConfigRef) Reset() { *m = ConfigRef{} } +func (m *ConfigRef) String() string { return proto.CompactTextString(m) } +func (*ConfigRef) ProtoMessage() {} +func (*ConfigRef) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ConfigRef) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Change report associated with a particular service configuration. +// +// It contains a list of ConfigChanges based on the comparison between +// two service configurations. +type ChangeReport struct { + // List of changes between two service configurations. + // The changes will be alphabetically sorted based on the identifier + // of each change. + // A ConfigChange identifier is a dot separated path to the configuration. + // Example: visibility.rules[selector='LibraryService.CreateBook'].restriction + ConfigChanges []*google_api2.ConfigChange `protobuf:"bytes,1,rep,name=config_changes,json=configChanges" json:"config_changes,omitempty"` +} + +func (m *ChangeReport) Reset() { *m = ChangeReport{} } +func (m *ChangeReport) String() string { return proto.CompactTextString(m) } +func (*ChangeReport) ProtoMessage() {} +func (*ChangeReport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ChangeReport) GetConfigChanges() []*google_api2.ConfigChange { + if m != nil { + return m.ConfigChanges + } + return nil +} + +// A rollout resource that defines how service configuration versions are pushed +// to control plane systems. Typically, you create a new version of the +// service config, and then create a Rollout to push the service config. +type Rollout struct { + // Optional unique identifier of this Rollout. Only lower case letters, digits + // and '-' are allowed. + // + // If not specified by client, the server will generate one. The generated id + // will have the form of <date><revision number>, where "date" is the create + // date in ISO 8601 format. "revision number" is a monotonically increasing + // positive number that is reset every day for each service. + // An example of the generated rollout_id is '2016-02-16r1' + RolloutId string `protobuf:"bytes,1,opt,name=rollout_id,json=rolloutId" json:"rollout_id,omitempty"` + // Creation time of the rollout. Readonly. + CreateTime *google_protobuf9.Timestamp `protobuf:"bytes,2,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The user who created the Rollout. Readonly. + CreatedBy string `protobuf:"bytes,3,opt,name=created_by,json=createdBy" json:"created_by,omitempty"` + // The status of this rollout. Readonly. In case of a failed rollout, + // the system will automatically rollback to the current Rollout + // version. Readonly. + Status Rollout_RolloutStatus `protobuf:"varint,4,opt,name=status,enum=google.api.servicemanagement.v1.Rollout_RolloutStatus" json:"status,omitempty"` + // Strategy that defines which versions of service configurations should be + // pushed + // and how they should be used at runtime. + // + // Types that are valid to be assigned to Strategy: + // *Rollout_TrafficPercentStrategy_ + // *Rollout_DeleteServiceStrategy_ + Strategy isRollout_Strategy `protobuf_oneof:"strategy"` + // The name of the service associated with this Rollout. + ServiceName string `protobuf:"bytes,8,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` +} + +func (m *Rollout) Reset() { *m = Rollout{} } +func (m *Rollout) String() string { return proto.CompactTextString(m) } +func (*Rollout) ProtoMessage() {} +func (*Rollout) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type isRollout_Strategy interface { + isRollout_Strategy() +} + +type Rollout_TrafficPercentStrategy_ struct { + TrafficPercentStrategy *Rollout_TrafficPercentStrategy `protobuf:"bytes,5,opt,name=traffic_percent_strategy,json=trafficPercentStrategy,oneof"` +} +type Rollout_DeleteServiceStrategy_ struct { + DeleteServiceStrategy *Rollout_DeleteServiceStrategy `protobuf:"bytes,200,opt,name=delete_service_strategy,json=deleteServiceStrategy,oneof"` +} + +func (*Rollout_TrafficPercentStrategy_) isRollout_Strategy() {} +func (*Rollout_DeleteServiceStrategy_) isRollout_Strategy() {} + +func (m *Rollout) GetStrategy() isRollout_Strategy { + if m != nil { + return m.Strategy + } + return nil +} + +func (m *Rollout) GetRolloutId() string { + if m != nil { + return m.RolloutId + } + return "" +} + +func (m *Rollout) GetCreateTime() *google_protobuf9.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Rollout) GetCreatedBy() string { + if m != nil { + return m.CreatedBy + } + return "" +} + +func (m *Rollout) GetStatus() Rollout_RolloutStatus { + if m != nil { + return m.Status + } + return Rollout_ROLLOUT_STATUS_UNSPECIFIED +} + +func (m *Rollout) GetTrafficPercentStrategy() *Rollout_TrafficPercentStrategy { + if x, ok := m.GetStrategy().(*Rollout_TrafficPercentStrategy_); ok { + return x.TrafficPercentStrategy + } + return nil +} + +func (m *Rollout) GetDeleteServiceStrategy() *Rollout_DeleteServiceStrategy { + if x, ok := m.GetStrategy().(*Rollout_DeleteServiceStrategy_); ok { + return x.DeleteServiceStrategy + } + return nil +} + +func (m *Rollout) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Rollout) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Rollout_OneofMarshaler, _Rollout_OneofUnmarshaler, _Rollout_OneofSizer, []interface{}{ + (*Rollout_TrafficPercentStrategy_)(nil), + (*Rollout_DeleteServiceStrategy_)(nil), + } +} + +func _Rollout_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Rollout) + // strategy + switch x := m.Strategy.(type) { + case *Rollout_TrafficPercentStrategy_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TrafficPercentStrategy); err != nil { + return err + } + case *Rollout_DeleteServiceStrategy_: + b.EncodeVarint(200<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DeleteServiceStrategy); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Rollout.Strategy has unexpected type %T", x) + } + return nil +} + +func _Rollout_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Rollout) + switch tag { + case 5: // strategy.traffic_percent_strategy + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Rollout_TrafficPercentStrategy) + err := b.DecodeMessage(msg) + m.Strategy = &Rollout_TrafficPercentStrategy_{msg} + return true, err + case 200: // strategy.delete_service_strategy + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Rollout_DeleteServiceStrategy) + err := b.DecodeMessage(msg) + m.Strategy = &Rollout_DeleteServiceStrategy_{msg} + return true, err + default: + return false, nil + } +} + +func _Rollout_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Rollout) + // strategy + switch x := m.Strategy.(type) { + case *Rollout_TrafficPercentStrategy_: + s := proto.Size(x.TrafficPercentStrategy) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Rollout_DeleteServiceStrategy_: + s := proto.Size(x.DeleteServiceStrategy) + n += proto.SizeVarint(200<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Strategy that specifies how Google Service Control should select +// different +// versions of service configurations based on traffic percentage. +// +// One example of how to gradually rollout a new service configuration using +// this +// strategy: +// Day 1 +// +// Rollout { +// id: "example.googleapis.com/rollout_20160206" +// traffic_percent_strategy { +// percentages: { +// "example.googleapis.com/20160201": 70.00 +// "example.googleapis.com/20160206": 30.00 +// } +// } +// } +// +// Day 2 +// +// Rollout { +// id: "example.googleapis.com/rollout_20160207" +// traffic_percent_strategy: { +// percentages: { +// "example.googleapis.com/20160206": 100.00 +// } +// } +// } +type Rollout_TrafficPercentStrategy struct { + // Maps service configuration IDs to their corresponding traffic percentage. + // Key is the service configuration ID, Value is the traffic percentage + // which must be greater than 0.0 and the sum must equal to 100.0. + Percentages map[string]float64 `protobuf:"bytes,1,rep,name=percentages" json:"percentages,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` +} + +func (m *Rollout_TrafficPercentStrategy) Reset() { *m = Rollout_TrafficPercentStrategy{} } +func (m *Rollout_TrafficPercentStrategy) String() string { return proto.CompactTextString(m) } +func (*Rollout_TrafficPercentStrategy) ProtoMessage() {} +func (*Rollout_TrafficPercentStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{7, 0} +} + +func (m *Rollout_TrafficPercentStrategy) GetPercentages() map[string]float64 { + if m != nil { + return m.Percentages + } + return nil +} + +// Strategy used to delete a service. This strategy is a placeholder only +// used by the system generated rollout to delete a service. +type Rollout_DeleteServiceStrategy struct { +} + +func (m *Rollout_DeleteServiceStrategy) Reset() { *m = Rollout_DeleteServiceStrategy{} } +func (m *Rollout_DeleteServiceStrategy) String() string { return proto.CompactTextString(m) } +func (*Rollout_DeleteServiceStrategy) ProtoMessage() {} +func (*Rollout_DeleteServiceStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{7, 1} +} + +func init() { + proto.RegisterType((*ManagedService)(nil), "google.api.servicemanagement.v1.ManagedService") + proto.RegisterType((*OperationMetadata)(nil), "google.api.servicemanagement.v1.OperationMetadata") + proto.RegisterType((*OperationMetadata_Step)(nil), "google.api.servicemanagement.v1.OperationMetadata.Step") + proto.RegisterType((*Diagnostic)(nil), "google.api.servicemanagement.v1.Diagnostic") + proto.RegisterType((*ConfigSource)(nil), "google.api.servicemanagement.v1.ConfigSource") + proto.RegisterType((*ConfigFile)(nil), "google.api.servicemanagement.v1.ConfigFile") + proto.RegisterType((*ConfigRef)(nil), "google.api.servicemanagement.v1.ConfigRef") + proto.RegisterType((*ChangeReport)(nil), "google.api.servicemanagement.v1.ChangeReport") + proto.RegisterType((*Rollout)(nil), "google.api.servicemanagement.v1.Rollout") + proto.RegisterType((*Rollout_TrafficPercentStrategy)(nil), "google.api.servicemanagement.v1.Rollout.TrafficPercentStrategy") + proto.RegisterType((*Rollout_DeleteServiceStrategy)(nil), "google.api.servicemanagement.v1.Rollout.DeleteServiceStrategy") + proto.RegisterEnum("google.api.servicemanagement.v1.OperationMetadata_Status", OperationMetadata_Status_name, OperationMetadata_Status_value) + proto.RegisterEnum("google.api.servicemanagement.v1.Diagnostic_Kind", Diagnostic_Kind_name, Diagnostic_Kind_value) + proto.RegisterEnum("google.api.servicemanagement.v1.ConfigFile_FileType", ConfigFile_FileType_name, ConfigFile_FileType_value) + proto.RegisterEnum("google.api.servicemanagement.v1.Rollout_RolloutStatus", Rollout_RolloutStatus_name, Rollout_RolloutStatus_value) +} + +func init() { proto.RegisterFile("google/api/servicemanagement/v1/resources.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1166 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xef, 0x8e, 0xdb, 0x44, + 0x10, 0xaf, 0xf3, 0xe7, 0xee, 0x32, 0xb9, 0x0b, 0xee, 0x96, 0xf6, 0xd2, 0xd0, 0x3f, 0xc1, 0x15, + 0xd2, 0x49, 0x48, 0x0e, 0x0d, 0x08, 0x28, 0x95, 0x5a, 0xe5, 0x12, 0xdf, 0x61, 0xc8, 0xd9, 0xee, + 0xda, 0x07, 0x2a, 0x5f, 0xac, 0xad, 0xbd, 0x71, 0x4d, 0x13, 0xdb, 0xb2, 0x37, 0x27, 0x45, 0xfd, + 0xc8, 0x0b, 0xf0, 0x0c, 0x7c, 0x81, 0x47, 0xe1, 0x03, 0x4f, 0x00, 0x2f, 0x83, 0xbc, 0x5e, 0xdf, + 0xe5, 0xcf, 0xa1, 0x14, 0xf8, 0x92, 0xec, 0xfc, 0x66, 0xf6, 0x37, 0xb3, 0xb3, 0x33, 0xb3, 0x86, + 0x5e, 0x10, 0xc7, 0xc1, 0x94, 0xf6, 0x48, 0x12, 0xf6, 0x32, 0x9a, 0x5e, 0x84, 0x1e, 0x9d, 0x91, + 0x88, 0x04, 0x74, 0x46, 0x23, 0xd6, 0xbb, 0x78, 0xdc, 0x4b, 0x69, 0x16, 0xcf, 0x53, 0x8f, 0x66, + 0x6a, 0x92, 0xc6, 0x2c, 0x46, 0x0f, 0x8b, 0x0d, 0x2a, 0x49, 0x42, 0x75, 0x63, 0x83, 0x7a, 0xf1, + 0xb8, 0x73, 0x6f, 0x89, 0x91, 0x44, 0x51, 0xcc, 0x08, 0x0b, 0xe3, 0x48, 0x6c, 0xef, 0x3c, 0x58, + 0xd2, 0x7a, 0x71, 0x34, 0x09, 0x03, 0xd7, 0x7b, 0x4d, 0xa2, 0x80, 0x0a, 0x7d, 0x7b, 0x33, 0x1e, + 0xa1, 0x79, 0x24, 0x34, 0xd3, 0x38, 0x0a, 0xd2, 0x79, 0x14, 0x85, 0x51, 0xd0, 0x8b, 0x13, 0x9a, + 0xae, 0xd0, 0xdf, 0x15, 0x46, 0x5c, 0x7a, 0x35, 0x9f, 0xf4, 0x48, 0xb4, 0x10, 0xaa, 0xee, 0xba, + 0x6a, 0x12, 0xd2, 0xa9, 0xef, 0xce, 0x48, 0xf6, 0x46, 0x58, 0xdc, 0x5b, 0xb7, 0xc8, 0x58, 0x3a, + 0xf7, 0x98, 0xd0, 0x3e, 0x5c, 0xd7, 0xb2, 0x70, 0x46, 0x33, 0x46, 0x66, 0x89, 0x30, 0x38, 0x14, + 0x06, 0x69, 0xe2, 0xf5, 0x32, 0x46, 0xd8, 0x5c, 0x04, 0xa5, 0x78, 0xd0, 0x3a, 0xe3, 0x29, 0xf2, + 0xed, 0xe2, 0x44, 0xe8, 0x43, 0xd8, 0x17, 0x87, 0x73, 0x23, 0x32, 0xa3, 0xed, 0x4a, 0x57, 0x3a, + 0x6a, 0xe0, 0xa6, 0xc0, 0x0c, 0x32, 0xa3, 0x48, 0x85, 0x5b, 0x49, 0x1a, 0xfb, 0x73, 0x8f, 0xa6, + 0x6e, 0x92, 0xc6, 0x3f, 0x52, 0x8f, 0xb9, 0xa1, 0xdf, 0xae, 0x72, 0xcb, 0x9b, 0xa5, 0xca, 0x2a, + 0x34, 0xba, 0xaf, 0xfc, 0x55, 0x85, 0x9b, 0x66, 0x99, 0x8e, 0x33, 0xca, 0x88, 0x4f, 0x18, 0x41, + 0x1f, 0x41, 0xab, 0xbc, 0x40, 0xee, 0x29, 0x6b, 0x4b, 0xdd, 0xea, 0x51, 0x03, 0x1f, 0x94, 0x68, + 0xee, 0x2b, 0x43, 0x67, 0x50, 0xcf, 0x18, 0x4d, 0xb2, 0x76, 0xa5, 0x5b, 0x3d, 0x6a, 0xf6, 0xbf, + 0x50, 0xb7, 0x5c, 0xb2, 0xba, 0xe1, 0x49, 0xb5, 0x19, 0x4d, 0x70, 0xc1, 0x82, 0x7a, 0x3c, 0xf6, + 0x20, 0xa5, 0x59, 0xe6, 0x26, 0x34, 0xf5, 0x68, 0xc4, 0x48, 0x40, 0x79, 0xec, 0x75, 0x8c, 0x4a, + 0x95, 0x75, 0xa9, 0x41, 0x4f, 0x00, 0x32, 0x46, 0x52, 0xe6, 0xe6, 0x39, 0x6d, 0xd7, 0xba, 0xd2, + 0x51, 0xb3, 0xdf, 0x29, 0x83, 0x28, 0x13, 0xae, 0x3a, 0x65, 0xc2, 0x71, 0x83, 0x5b, 0xe7, 0x72, + 0xe7, 0x2d, 0xd4, 0x72, 0xd7, 0xa8, 0x0b, 0x4d, 0x9f, 0x66, 0x5e, 0x1a, 0x26, 0x79, 0x58, 0x65, + 0x46, 0x97, 0x20, 0xf4, 0x02, 0x76, 0x8a, 0x6b, 0xe1, 0x0e, 0x5a, 0xfd, 0x27, 0xff, 0xe9, 0x94, + 0x39, 0x01, 0x16, 0x44, 0x4a, 0x00, 0x3b, 0x05, 0x82, 0xee, 0x00, 0xb2, 0x9d, 0x81, 0x73, 0x6e, + 0xbb, 0xe7, 0x86, 0x6d, 0x69, 0x43, 0xfd, 0x44, 0xd7, 0x46, 0xf2, 0x0d, 0xb4, 0x07, 0xb5, 0x91, + 0x69, 0x68, 0xb2, 0x84, 0xde, 0x83, 0xa6, 0x61, 0x3a, 0xae, 0xed, 0x0c, 0xb0, 0xa3, 0x8d, 0xe4, + 0x4a, 0x0e, 0xe8, 0x86, 0x6b, 0x61, 0xf3, 0x14, 0x6b, 0xb6, 0x2d, 0x57, 0x11, 0xc0, 0xce, 0xc9, + 0x40, 0x1f, 0x6b, 0x23, 0xb9, 0x86, 0x0e, 0xa0, 0x31, 0x1c, 0x18, 0x43, 0x6d, 0x9c, 0x8b, 0x75, + 0xe5, 0x37, 0x09, 0x60, 0x14, 0x92, 0x20, 0x8a, 0x33, 0x16, 0x7a, 0xa8, 0x03, 0x7b, 0xd3, 0xd8, + 0xe3, 0xa1, 0xb5, 0x25, 0x7e, 0xd2, 0x4b, 0x19, 0x8d, 0xa0, 0xf6, 0x26, 0x8c, 0x7c, 0x9e, 0x81, + 0x56, 0xff, 0x93, 0xad, 0x87, 0xbc, 0xa2, 0x55, 0xbf, 0x0d, 0x23, 0x1f, 0xf3, 0xdd, 0xa8, 0x0d, + 0xbb, 0x33, 0x9a, 0x65, 0xe5, 0xb5, 0x35, 0x70, 0x29, 0x2a, 0x0f, 0xa0, 0x96, 0xdb, 0xa1, 0x26, + 0xec, 0x7e, 0x3f, 0xc0, 0x86, 0x6e, 0x9c, 0xca, 0x37, 0x50, 0x03, 0xea, 0x1a, 0xc6, 0x26, 0x96, + 0x25, 0x85, 0xc0, 0xfe, 0x90, 0x37, 0xb6, 0xcd, 0x0b, 0x0c, 0xb5, 0xa0, 0x12, 0xfa, 0xed, 0x3a, + 0x27, 0xa9, 0x84, 0x3e, 0x1a, 0x40, 0x7d, 0x12, 0x4e, 0x69, 0x59, 0x6b, 0x1f, 0x6f, 0x0d, 0xb0, + 0x60, 0x3b, 0x09, 0xa7, 0x14, 0x17, 0x3b, 0x95, 0x5f, 0x2b, 0x00, 0x57, 0x28, 0xfa, 0x00, 0x1a, + 0x39, 0xee, 0x26, 0x84, 0xbd, 0x2e, 0xd3, 0x91, 0x03, 0x16, 0x61, 0xaf, 0xd1, 0x23, 0x38, 0xe0, + 0x4a, 0x2f, 0x8e, 0x18, 0x8d, 0x58, 0xc6, 0x8f, 0xb3, 0x8f, 0xf7, 0x73, 0x70, 0x28, 0x30, 0xf4, + 0x42, 0x30, 0xb0, 0x45, 0x42, 0x45, 0x75, 0x7c, 0xf6, 0x2f, 0xe2, 0x52, 0xf3, 0x1f, 0x67, 0x91, + 0xd0, 0xc2, 0x6f, 0xbe, 0x52, 0x7e, 0x92, 0x60, 0xaf, 0x84, 0xd1, 0x5d, 0xb8, 0x7d, 0xa2, 0x8f, + 0x35, 0xd7, 0x79, 0x69, 0x69, 0x6b, 0x05, 0x72, 0x08, 0xb7, 0x6c, 0x0d, 0x7f, 0xa7, 0x0f, 0x35, + 0x77, 0x68, 0x1a, 0x27, 0xfa, 0xa9, 0xfb, 0x72, 0x70, 0x36, 0x96, 0x25, 0x74, 0x13, 0x0e, 0x4c, + 0x4b, 0x33, 0xdc, 0x81, 0xa5, 0xbb, 0xdf, 0xd8, 0xa6, 0x21, 0x57, 0x56, 0x20, 0x6e, 0x55, 0x45, + 0xf7, 0xe1, 0x2e, 0x67, 0x1e, 0x69, 0xf6, 0x10, 0xeb, 0x96, 0x63, 0x62, 0xd7, 0xd6, 0x9c, 0xbc, + 0xaa, 0x1c, 0x53, 0xae, 0x29, 0x0f, 0xa1, 0x51, 0x84, 0x89, 0xe9, 0x04, 0x21, 0xa8, 0xf1, 0x69, + 0x53, 0xa4, 0x88, 0xaf, 0x15, 0x13, 0xf6, 0x87, 0x7c, 0xfe, 0x62, 0x9a, 0xc4, 0x29, 0x43, 0xcf, + 0xa1, 0xb5, 0x32, 0x96, 0x8b, 0x81, 0xd1, 0xec, 0xb7, 0x97, 0xd3, 0x51, 0x50, 0x8a, 0x7d, 0x07, + 0xde, 0x92, 0x94, 0x29, 0x7f, 0xee, 0xc0, 0x2e, 0x8e, 0xa7, 0xd3, 0x78, 0xce, 0xd0, 0x7d, 0x80, + 0xb4, 0x58, 0xe6, 0xa3, 0xab, 0x70, 0xdb, 0x10, 0x88, 0xee, 0xa3, 0xa7, 0xd0, 0xf4, 0x52, 0x4a, + 0x18, 0x2d, 0xda, 0xbe, 0xb2, 0xb5, 0xed, 0xa1, 0x30, 0xcf, 0x81, 0x9c, 0xbb, 0x90, 0x7c, 0xf7, + 0xd5, 0x42, 0xd4, 0x68, 0x43, 0x20, 0xc7, 0x0b, 0x64, 0xac, 0x35, 0xfb, 0xe7, 0x5b, 0xaf, 0x53, + 0x04, 0x5d, 0xfe, 0xaf, 0x76, 0x3a, 0x7a, 0x0b, 0x6d, 0x96, 0x92, 0xc9, 0x24, 0xf4, 0xca, 0x89, + 0xe6, 0x66, 0x2c, 0x25, 0x8c, 0x06, 0x0b, 0x5e, 0xdb, 0xcd, 0xfe, 0xf3, 0x77, 0xf6, 0xe0, 0x14, + 0x44, 0x62, 0xfe, 0xd9, 0x82, 0xe6, 0xeb, 0x1b, 0xf8, 0x0e, 0xbb, 0x56, 0x83, 0x16, 0x70, 0xe8, + 0xd3, 0x29, 0x65, 0xd4, 0x2d, 0x5f, 0x8d, 0x4b, 0xdf, 0xbf, 0x4b, 0xdc, 0xf9, 0xb3, 0x77, 0x76, + 0x3e, 0xe2, 0x44, 0xe2, 0x21, 0x5a, 0xf2, 0x7d, 0xdb, 0xbf, 0x4e, 0xb1, 0xf1, 0x52, 0xed, 0x6d, + 0xbc, 0x54, 0x9d, 0x3f, 0x24, 0xb8, 0x73, 0xfd, 0x91, 0x50, 0x0a, 0xcd, 0xab, 0xf9, 0x5f, 0x96, + 0x92, 0xf5, 0x3f, 0x13, 0xa5, 0x5e, 0x3d, 0x1c, 0x99, 0x16, 0xb1, 0x74, 0x81, 0x97, 0x9d, 0x74, + 0x9e, 0x81, 0xbc, 0x6e, 0x80, 0x64, 0xa8, 0xbe, 0xa1, 0x0b, 0x51, 0x81, 0xf9, 0x12, 0xbd, 0x0f, + 0xf5, 0x0b, 0x32, 0x9d, 0x17, 0x55, 0x27, 0xe1, 0x42, 0xf8, 0xaa, 0xf2, 0xa5, 0xd4, 0x39, 0x84, + 0xdb, 0xd7, 0xe6, 0x48, 0x99, 0xc3, 0xc1, 0x4a, 0x6d, 0xa0, 0x07, 0xd0, 0xc1, 0xe6, 0x78, 0x6c, + 0x9e, 0xf3, 0xa9, 0xbe, 0x39, 0xfb, 0xd7, 0x06, 0xbc, 0x94, 0x8f, 0x4c, 0xfb, 0x7c, 0x38, 0xcc, + 0x85, 0xca, 0xea, 0x84, 0x5f, 0x1d, 0xfe, 0x4d, 0xd8, 0xb5, 0x34, 0x63, 0x94, 0x8f, 0xd6, 0xfa, + 0x31, 0xc0, 0x5e, 0x79, 0xdb, 0xc7, 0x3f, 0x4b, 0xf0, 0xc8, 0x8b, 0x67, 0xdb, 0x12, 0x78, 0xdc, + 0xc2, 0xe5, 0x57, 0x9b, 0x95, 0x77, 0x91, 0x25, 0xfd, 0x60, 0x89, 0x2d, 0x41, 0x3c, 0x25, 0x51, + 0xa0, 0xc6, 0x69, 0xd0, 0x0b, 0x68, 0xc4, 0x7b, 0x4c, 0x7c, 0x02, 0x92, 0x24, 0xcc, 0xfe, 0xf1, + 0x33, 0xf0, 0xe9, 0x06, 0xf8, 0x4b, 0xa5, 0x76, 0x3a, 0xb0, 0xcf, 0x5e, 0xed, 0x70, 0x8e, 0x4f, + 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x64, 0x4d, 0x1e, 0x49, 0x0a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/servicemanager.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/servicemanager.pb.go new file mode 100644 index 0000000..55aa67f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/servicemanager.pb.go @@ -0,0 +1,1417 @@ +// Code generated by protoc-gen-go. +// source: google/api/servicemanagement/v1/servicemanager.proto +// DO NOT EDIT! + +package servicemanagement + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api19 "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" +import _ "github.com/golang/protobuf/ptypes/empty" +import _ "google.golang.org/genproto/protobuf/field_mask" +import _ "github.com/golang/protobuf/ptypes/struct" +import _ "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request message for `ListServices` method. +type ListServicesRequest struct { + // Include services produced by the specified project. + ProducerProjectId string `protobuf:"bytes,1,opt,name=producer_project_id,json=producerProjectId" json:"producer_project_id,omitempty"` + // Requested size of the next page of data. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Token identifying which result to start with; returned by a previous list + // call. + PageToken string `protobuf:"bytes,6,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListServicesRequest) Reset() { *m = ListServicesRequest{} } +func (m *ListServicesRequest) String() string { return proto.CompactTextString(m) } +func (*ListServicesRequest) ProtoMessage() {} +func (*ListServicesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *ListServicesRequest) GetProducerProjectId() string { + if m != nil { + return m.ProducerProjectId + } + return "" +} + +func (m *ListServicesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListServicesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for `ListServices` method. +type ListServicesResponse struct { + // The results of the query. + Services []*ManagedService `protobuf:"bytes,1,rep,name=services" json:"services,omitempty"` + // Token that can be passed to `ListServices` to resume a paginated query. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListServicesResponse) Reset() { *m = ListServicesResponse{} } +func (m *ListServicesResponse) String() string { return proto.CompactTextString(m) } +func (*ListServicesResponse) ProtoMessage() {} +func (*ListServicesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *ListServicesResponse) GetServices() []*ManagedService { + if m != nil { + return m.Services + } + return nil +} + +func (m *ListServicesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for `GetService` method. +type GetServiceRequest struct { + // The name of the service. See the `ServiceManager` overview for naming + // requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` +} + +func (m *GetServiceRequest) Reset() { *m = GetServiceRequest{} } +func (m *GetServiceRequest) String() string { return proto.CompactTextString(m) } +func (*GetServiceRequest) ProtoMessage() {} +func (*GetServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *GetServiceRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +// Request message for CreateService method. +type CreateServiceRequest struct { + // Initial values for the service resource. + Service *ManagedService `protobuf:"bytes,1,opt,name=service" json:"service,omitempty"` +} + +func (m *CreateServiceRequest) Reset() { *m = CreateServiceRequest{} } +func (m *CreateServiceRequest) String() string { return proto.CompactTextString(m) } +func (*CreateServiceRequest) ProtoMessage() {} +func (*CreateServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *CreateServiceRequest) GetService() *ManagedService { + if m != nil { + return m.Service + } + return nil +} + +// Request message for DeleteService method. +type DeleteServiceRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` +} + +func (m *DeleteServiceRequest) Reset() { *m = DeleteServiceRequest{} } +func (m *DeleteServiceRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteServiceRequest) ProtoMessage() {} +func (*DeleteServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *DeleteServiceRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +// Request message for UndeleteService method. +type UndeleteServiceRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` +} + +func (m *UndeleteServiceRequest) Reset() { *m = UndeleteServiceRequest{} } +func (m *UndeleteServiceRequest) String() string { return proto.CompactTextString(m) } +func (*UndeleteServiceRequest) ProtoMessage() {} +func (*UndeleteServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *UndeleteServiceRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +// Response message for UndeleteService method. +type UndeleteServiceResponse struct { + // Revived service resource. + Service *ManagedService `protobuf:"bytes,1,opt,name=service" json:"service,omitempty"` +} + +func (m *UndeleteServiceResponse) Reset() { *m = UndeleteServiceResponse{} } +func (m *UndeleteServiceResponse) String() string { return proto.CompactTextString(m) } +func (*UndeleteServiceResponse) ProtoMessage() {} +func (*UndeleteServiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *UndeleteServiceResponse) GetService() *ManagedService { + if m != nil { + return m.Service + } + return nil +} + +// Request message for GetServiceConfig method. +type GetServiceConfigRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + ConfigId string `protobuf:"bytes,2,opt,name=config_id,json=configId" json:"config_id,omitempty"` +} + +func (m *GetServiceConfigRequest) Reset() { *m = GetServiceConfigRequest{} } +func (m *GetServiceConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetServiceConfigRequest) ProtoMessage() {} +func (*GetServiceConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *GetServiceConfigRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *GetServiceConfigRequest) GetConfigId() string { + if m != nil { + return m.ConfigId + } + return "" +} + +// Request message for ListServiceConfigs method. +type ListServiceConfigsRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The token of the page to retrieve. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The max number of items to include in the response list. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListServiceConfigsRequest) Reset() { *m = ListServiceConfigsRequest{} } +func (m *ListServiceConfigsRequest) String() string { return proto.CompactTextString(m) } +func (*ListServiceConfigsRequest) ProtoMessage() {} +func (*ListServiceConfigsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *ListServiceConfigsRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *ListServiceConfigsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListServiceConfigsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for ListServiceConfigs method. +type ListServiceConfigsResponse struct { + // The list of service configuration resources. + ServiceConfigs []*google_api19.Service `protobuf:"bytes,1,rep,name=service_configs,json=serviceConfigs" json:"service_configs,omitempty"` + // The token of the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListServiceConfigsResponse) Reset() { *m = ListServiceConfigsResponse{} } +func (m *ListServiceConfigsResponse) String() string { return proto.CompactTextString(m) } +func (*ListServiceConfigsResponse) ProtoMessage() {} +func (*ListServiceConfigsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *ListServiceConfigsResponse) GetServiceConfigs() []*google_api19.Service { + if m != nil { + return m.ServiceConfigs + } + return nil +} + +func (m *ListServiceConfigsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for CreateServiceConfig method. +type CreateServiceConfigRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The service configuration resource. + ServiceConfig *google_api19.Service `protobuf:"bytes,2,opt,name=service_config,json=serviceConfig" json:"service_config,omitempty"` +} + +func (m *CreateServiceConfigRequest) Reset() { *m = CreateServiceConfigRequest{} } +func (m *CreateServiceConfigRequest) String() string { return proto.CompactTextString(m) } +func (*CreateServiceConfigRequest) ProtoMessage() {} +func (*CreateServiceConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *CreateServiceConfigRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *CreateServiceConfigRequest) GetServiceConfig() *google_api19.Service { + if m != nil { + return m.ServiceConfig + } + return nil +} + +// Request message for SubmitConfigSource method. +type SubmitConfigSourceRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The source configuration for the service. + ConfigSource *ConfigSource `protobuf:"bytes,2,opt,name=config_source,json=configSource" json:"config_source,omitempty"` + // Optional. If set, this will result in the generation of a + // `google.api.Service` configuration based on the `ConfigSource` provided, + // but the generated config and the sources will NOT be persisted. + ValidateOnly bool `protobuf:"varint,3,opt,name=validate_only,json=validateOnly" json:"validate_only,omitempty"` +} + +func (m *SubmitConfigSourceRequest) Reset() { *m = SubmitConfigSourceRequest{} } +func (m *SubmitConfigSourceRequest) String() string { return proto.CompactTextString(m) } +func (*SubmitConfigSourceRequest) ProtoMessage() {} +func (*SubmitConfigSourceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *SubmitConfigSourceRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *SubmitConfigSourceRequest) GetConfigSource() *ConfigSource { + if m != nil { + return m.ConfigSource + } + return nil +} + +func (m *SubmitConfigSourceRequest) GetValidateOnly() bool { + if m != nil { + return m.ValidateOnly + } + return false +} + +// Response message for SubmitConfigSource method. +type SubmitConfigSourceResponse struct { + // The generated service configuration. + ServiceConfig *google_api19.Service `protobuf:"bytes,1,opt,name=service_config,json=serviceConfig" json:"service_config,omitempty"` +} + +func (m *SubmitConfigSourceResponse) Reset() { *m = SubmitConfigSourceResponse{} } +func (m *SubmitConfigSourceResponse) String() string { return proto.CompactTextString(m) } +func (*SubmitConfigSourceResponse) ProtoMessage() {} +func (*SubmitConfigSourceResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *SubmitConfigSourceResponse) GetServiceConfig() *google_api19.Service { + if m != nil { + return m.ServiceConfig + } + return nil +} + +// Request message for 'CreateServiceRollout' +type CreateServiceRolloutRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The rollout resource. The `service_name` field is output only. + Rollout *Rollout `protobuf:"bytes,2,opt,name=rollout" json:"rollout,omitempty"` +} + +func (m *CreateServiceRolloutRequest) Reset() { *m = CreateServiceRolloutRequest{} } +func (m *CreateServiceRolloutRequest) String() string { return proto.CompactTextString(m) } +func (*CreateServiceRolloutRequest) ProtoMessage() {} +func (*CreateServiceRolloutRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *CreateServiceRolloutRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *CreateServiceRolloutRequest) GetRollout() *Rollout { + if m != nil { + return m.Rollout + } + return nil +} + +// Request message for 'ListServiceRollouts' +type ListServiceRolloutsRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The token of the page to retrieve. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The max number of items to include in the response list. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListServiceRolloutsRequest) Reset() { *m = ListServiceRolloutsRequest{} } +func (m *ListServiceRolloutsRequest) String() string { return proto.CompactTextString(m) } +func (*ListServiceRolloutsRequest) ProtoMessage() {} +func (*ListServiceRolloutsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *ListServiceRolloutsRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *ListServiceRolloutsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListServiceRolloutsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for ListServiceRollouts method. +type ListServiceRolloutsResponse struct { + // The list of rollout resources. + Rollouts []*Rollout `protobuf:"bytes,1,rep,name=rollouts" json:"rollouts,omitempty"` + // The token of the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListServiceRolloutsResponse) Reset() { *m = ListServiceRolloutsResponse{} } +func (m *ListServiceRolloutsResponse) String() string { return proto.CompactTextString(m) } +func (*ListServiceRolloutsResponse) ProtoMessage() {} +func (*ListServiceRolloutsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *ListServiceRolloutsResponse) GetRollouts() []*Rollout { + if m != nil { + return m.Rollouts + } + return nil +} + +func (m *ListServiceRolloutsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for GetServiceRollout method. +type GetServiceRolloutRequest struct { + // The name of the service. See the [overview](/service-management/overview) + // for naming requirements. For example: `example.googleapis.com`. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The id of the rollout resource. + RolloutId string `protobuf:"bytes,2,opt,name=rollout_id,json=rolloutId" json:"rollout_id,omitempty"` +} + +func (m *GetServiceRolloutRequest) Reset() { *m = GetServiceRolloutRequest{} } +func (m *GetServiceRolloutRequest) String() string { return proto.CompactTextString(m) } +func (*GetServiceRolloutRequest) ProtoMessage() {} +func (*GetServiceRolloutRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *GetServiceRolloutRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *GetServiceRolloutRequest) GetRolloutId() string { + if m != nil { + return m.RolloutId + } + return "" +} + +// Request message for EnableService method. +type EnableServiceRequest struct { + // Name of the service to enable. Specifying an unknown service name will + // cause the request to fail. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The identity of consumer resource which service enablement will be + // applied to. + // + // The Google Service Management implementation accepts the following + // forms: "project:<project_id>", "project_number:<project_number>". + // + // Note: this is made compatible with + // google.api.servicecontrol.v1.Operation.consumer_id. + ConsumerId string `protobuf:"bytes,2,opt,name=consumer_id,json=consumerId" json:"consumer_id,omitempty"` +} + +func (m *EnableServiceRequest) Reset() { *m = EnableServiceRequest{} } +func (m *EnableServiceRequest) String() string { return proto.CompactTextString(m) } +func (*EnableServiceRequest) ProtoMessage() {} +func (*EnableServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *EnableServiceRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *EnableServiceRequest) GetConsumerId() string { + if m != nil { + return m.ConsumerId + } + return "" +} + +// Request message for DisableService method. +type DisableServiceRequest struct { + // Name of the service to disable. Specifying an unknown service name + // will cause the request to fail. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The identity of consumer resource which service disablement will be + // applied to. + // + // The Google Service Management implementation accepts the following + // forms: "project:<project_id>", "project_number:<project_number>". + // + // Note: this is made compatible with + // google.api.servicecontrol.v1.Operation.consumer_id. + ConsumerId string `protobuf:"bytes,2,opt,name=consumer_id,json=consumerId" json:"consumer_id,omitempty"` +} + +func (m *DisableServiceRequest) Reset() { *m = DisableServiceRequest{} } +func (m *DisableServiceRequest) String() string { return proto.CompactTextString(m) } +func (*DisableServiceRequest) ProtoMessage() {} +func (*DisableServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } + +func (m *DisableServiceRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *DisableServiceRequest) GetConsumerId() string { + if m != nil { + return m.ConsumerId + } + return "" +} + +// Request message for GenerateConfigReport method. +type GenerateConfigReportRequest struct { + // Service configuration for which we want to generate the report. + // For this version of API, the supported types are + // [google.api.servicemanagement.v1.ConfigRef][google.api.servicemanagement.v1.ConfigRef], + // [google.api.servicemanagement.v1.ConfigSource][google.api.servicemanagement.v1.ConfigSource], + // and [google.api.Service][google.api.Service] + NewConfig *google_protobuf1.Any `protobuf:"bytes,1,opt,name=new_config,json=newConfig" json:"new_config,omitempty"` + // Service configuration against which the comparison will be done. + // For this version of API, the supported types are + // [google.api.servicemanagement.v1.ConfigRef][google.api.servicemanagement.v1.ConfigRef], + // [google.api.servicemanagement.v1.ConfigSource][google.api.servicemanagement.v1.ConfigSource], + // and [google.api.Service][google.api.Service] + OldConfig *google_protobuf1.Any `protobuf:"bytes,2,opt,name=old_config,json=oldConfig" json:"old_config,omitempty"` +} + +func (m *GenerateConfigReportRequest) Reset() { *m = GenerateConfigReportRequest{} } +func (m *GenerateConfigReportRequest) String() string { return proto.CompactTextString(m) } +func (*GenerateConfigReportRequest) ProtoMessage() {} +func (*GenerateConfigReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } + +func (m *GenerateConfigReportRequest) GetNewConfig() *google_protobuf1.Any { + if m != nil { + return m.NewConfig + } + return nil +} + +func (m *GenerateConfigReportRequest) GetOldConfig() *google_protobuf1.Any { + if m != nil { + return m.OldConfig + } + return nil +} + +// Response message for GenerateConfigReport method. +type GenerateConfigReportResponse struct { + // Name of the service this report belongs to. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // ID of the service configuration this report belongs to. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // list of ChangeReport, each corresponding to comparison between two + // service configurations. + ChangeReports []*ChangeReport `protobuf:"bytes,3,rep,name=change_reports,json=changeReports" json:"change_reports,omitempty"` + // Errors / Linter warnings associated with the service definition this + // report + // belongs to. + Diagnostics []*Diagnostic `protobuf:"bytes,4,rep,name=diagnostics" json:"diagnostics,omitempty"` +} + +func (m *GenerateConfigReportResponse) Reset() { *m = GenerateConfigReportResponse{} } +func (m *GenerateConfigReportResponse) String() string { return proto.CompactTextString(m) } +func (*GenerateConfigReportResponse) ProtoMessage() {} +func (*GenerateConfigReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{20} } + +func (m *GenerateConfigReportResponse) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *GenerateConfigReportResponse) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *GenerateConfigReportResponse) GetChangeReports() []*ChangeReport { + if m != nil { + return m.ChangeReports + } + return nil +} + +func (m *GenerateConfigReportResponse) GetDiagnostics() []*Diagnostic { + if m != nil { + return m.Diagnostics + } + return nil +} + +func init() { + proto.RegisterType((*ListServicesRequest)(nil), "google.api.servicemanagement.v1.ListServicesRequest") + proto.RegisterType((*ListServicesResponse)(nil), "google.api.servicemanagement.v1.ListServicesResponse") + proto.RegisterType((*GetServiceRequest)(nil), "google.api.servicemanagement.v1.GetServiceRequest") + proto.RegisterType((*CreateServiceRequest)(nil), "google.api.servicemanagement.v1.CreateServiceRequest") + proto.RegisterType((*DeleteServiceRequest)(nil), "google.api.servicemanagement.v1.DeleteServiceRequest") + proto.RegisterType((*UndeleteServiceRequest)(nil), "google.api.servicemanagement.v1.UndeleteServiceRequest") + proto.RegisterType((*UndeleteServiceResponse)(nil), "google.api.servicemanagement.v1.UndeleteServiceResponse") + proto.RegisterType((*GetServiceConfigRequest)(nil), "google.api.servicemanagement.v1.GetServiceConfigRequest") + proto.RegisterType((*ListServiceConfigsRequest)(nil), "google.api.servicemanagement.v1.ListServiceConfigsRequest") + proto.RegisterType((*ListServiceConfigsResponse)(nil), "google.api.servicemanagement.v1.ListServiceConfigsResponse") + proto.RegisterType((*CreateServiceConfigRequest)(nil), "google.api.servicemanagement.v1.CreateServiceConfigRequest") + proto.RegisterType((*SubmitConfigSourceRequest)(nil), "google.api.servicemanagement.v1.SubmitConfigSourceRequest") + proto.RegisterType((*SubmitConfigSourceResponse)(nil), "google.api.servicemanagement.v1.SubmitConfigSourceResponse") + proto.RegisterType((*CreateServiceRolloutRequest)(nil), "google.api.servicemanagement.v1.CreateServiceRolloutRequest") + proto.RegisterType((*ListServiceRolloutsRequest)(nil), "google.api.servicemanagement.v1.ListServiceRolloutsRequest") + proto.RegisterType((*ListServiceRolloutsResponse)(nil), "google.api.servicemanagement.v1.ListServiceRolloutsResponse") + proto.RegisterType((*GetServiceRolloutRequest)(nil), "google.api.servicemanagement.v1.GetServiceRolloutRequest") + proto.RegisterType((*EnableServiceRequest)(nil), "google.api.servicemanagement.v1.EnableServiceRequest") + proto.RegisterType((*DisableServiceRequest)(nil), "google.api.servicemanagement.v1.DisableServiceRequest") + proto.RegisterType((*GenerateConfigReportRequest)(nil), "google.api.servicemanagement.v1.GenerateConfigReportRequest") + proto.RegisterType((*GenerateConfigReportResponse)(nil), "google.api.servicemanagement.v1.GenerateConfigReportResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ServiceManager service + +type ServiceManagerClient interface { + // Lists all managed services. + ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) + // Gets a managed service. + GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*ManagedService, error) + // Creates a new managed service. + // Please note one producer project can own no more than 20 services. + // + // Operation<response: ManagedService> + CreateService(ctx context.Context, in *CreateServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes a managed service. This method will change the serivce in the + // `Soft-Delete` state for 30 days. Within this period, service producers may + // call [UndeleteService][google.api.servicemanagement.v1.ServiceManager.UndeleteService] to restore the service. + // After 30 days, the service will be permanently deleted. + // + // Operation<response: google.protobuf.Empty> + DeleteService(ctx context.Context, in *DeleteServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Revives a previously deleted managed service. The method restores the + // service using the configuration at the time the service was deleted. + // The target service must exist and must have been deleted within the + // last 30 days. + // + // Operation<response: UndeleteServiceResponse> + UndeleteService(ctx context.Context, in *UndeleteServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Lists the history of the service configuration for a managed service, + // from the newest to the oldest. + ListServiceConfigs(ctx context.Context, in *ListServiceConfigsRequest, opts ...grpc.CallOption) (*ListServiceConfigsResponse, error) + // Gets a service configuration (version) for a managed service. + GetServiceConfig(ctx context.Context, in *GetServiceConfigRequest, opts ...grpc.CallOption) (*google_api19.Service, error) + // Creates a new service configuration (version) for a managed service. + // This method only stores the service configuration. To roll out the service + // configuration to backend systems please call + // [CreateServiceRollout][google.api.servicemanagement.v1.ServiceManager.CreateServiceRollout]. + CreateServiceConfig(ctx context.Context, in *CreateServiceConfigRequest, opts ...grpc.CallOption) (*google_api19.Service, error) + // Creates a new service configuration (version) for a managed service based + // on + // user-supplied configuration source files (for example: OpenAPI + // Specification). This method stores the source configurations as well as the + // generated service configuration. To rollout the service configuration to + // other services, + // please call [CreateServiceRollout][google.api.servicemanagement.v1.ServiceManager.CreateServiceRollout]. + // + // Operation<response: SubmitConfigSourceResponse> + SubmitConfigSource(ctx context.Context, in *SubmitConfigSourceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Lists the history of the service configuration rollouts for a managed + // service, from the newest to the oldest. + ListServiceRollouts(ctx context.Context, in *ListServiceRolloutsRequest, opts ...grpc.CallOption) (*ListServiceRolloutsResponse, error) + // Gets a service configuration [rollout][google.api.servicemanagement.v1.Rollout]. + GetServiceRollout(ctx context.Context, in *GetServiceRolloutRequest, opts ...grpc.CallOption) (*Rollout, error) + // Creates a new service configuration rollout. Based on rollout, the + // Google Service Management will roll out the service configurations to + // different backend services. For example, the logging configuration will be + // pushed to Google Cloud Logging. + // + // Please note that any previous pending and running Rollouts and associated + // Operations will be automatically cancelled so that the latest Rollout will + // not be blocked by previous Rollouts. + // + // Operation<response: Rollout> + CreateServiceRollout(ctx context.Context, in *CreateServiceRolloutRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Generates and returns a report (errors, warnings and changes from + // existing configurations) associated with + // GenerateConfigReportRequest.new_value + // + // If GenerateConfigReportRequest.old_value is specified, + // GenerateConfigReportRequest will contain a single ChangeReport based on the + // comparison between GenerateConfigReportRequest.new_value and + // GenerateConfigReportRequest.old_value. + // If GenerateConfigReportRequest.old_value is not specified, this method + // will compare GenerateConfigReportRequest.new_value with the last pushed + // service configuration. + GenerateConfigReport(ctx context.Context, in *GenerateConfigReportRequest, opts ...grpc.CallOption) (*GenerateConfigReportResponse, error) + // Enable a managed service for a project with default setting. + // + // Operation<response: EnableServiceResponse> + // + // [google.rpc.Status][google.rpc.Status] errors may contain a + // [google.rpc.PreconditionFailure][] error detail. + EnableService(ctx context.Context, in *EnableServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Disable a managed service for a project. + // + // Operation<response: DisableServiceResponse> + DisableService(ctx context.Context, in *DisableServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type serviceManagerClient struct { + cc *grpc.ClientConn +} + +func NewServiceManagerClient(cc *grpc.ClientConn) ServiceManagerClient { + return &serviceManagerClient{cc} +} + +func (c *serviceManagerClient) ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) { + out := new(ListServicesResponse) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/ListServices", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*ManagedService, error) { + out := new(ManagedService) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/GetService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) CreateService(ctx context.Context, in *CreateServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/CreateService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) DeleteService(ctx context.Context, in *DeleteServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/DeleteService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) UndeleteService(ctx context.Context, in *UndeleteServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/UndeleteService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) ListServiceConfigs(ctx context.Context, in *ListServiceConfigsRequest, opts ...grpc.CallOption) (*ListServiceConfigsResponse, error) { + out := new(ListServiceConfigsResponse) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/ListServiceConfigs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) GetServiceConfig(ctx context.Context, in *GetServiceConfigRequest, opts ...grpc.CallOption) (*google_api19.Service, error) { + out := new(google_api19.Service) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/GetServiceConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) CreateServiceConfig(ctx context.Context, in *CreateServiceConfigRequest, opts ...grpc.CallOption) (*google_api19.Service, error) { + out := new(google_api19.Service) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/CreateServiceConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) SubmitConfigSource(ctx context.Context, in *SubmitConfigSourceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/SubmitConfigSource", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) ListServiceRollouts(ctx context.Context, in *ListServiceRolloutsRequest, opts ...grpc.CallOption) (*ListServiceRolloutsResponse, error) { + out := new(ListServiceRolloutsResponse) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/ListServiceRollouts", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) GetServiceRollout(ctx context.Context, in *GetServiceRolloutRequest, opts ...grpc.CallOption) (*Rollout, error) { + out := new(Rollout) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/GetServiceRollout", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) CreateServiceRollout(ctx context.Context, in *CreateServiceRolloutRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/CreateServiceRollout", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) GenerateConfigReport(ctx context.Context, in *GenerateConfigReportRequest, opts ...grpc.CallOption) (*GenerateConfigReportResponse, error) { + out := new(GenerateConfigReportResponse) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/GenerateConfigReport", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) EnableService(ctx context.Context, in *EnableServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/EnableService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceManagerClient) DisableService(ctx context.Context, in *DisableServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/DisableService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ServiceManager service + +type ServiceManagerServer interface { + // Lists all managed services. + ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) + // Gets a managed service. + GetService(context.Context, *GetServiceRequest) (*ManagedService, error) + // Creates a new managed service. + // Please note one producer project can own no more than 20 services. + // + // Operation<response: ManagedService> + CreateService(context.Context, *CreateServiceRequest) (*google_longrunning.Operation, error) + // Deletes a managed service. This method will change the serivce in the + // `Soft-Delete` state for 30 days. Within this period, service producers may + // call [UndeleteService][google.api.servicemanagement.v1.ServiceManager.UndeleteService] to restore the service. + // After 30 days, the service will be permanently deleted. + // + // Operation<response: google.protobuf.Empty> + DeleteService(context.Context, *DeleteServiceRequest) (*google_longrunning.Operation, error) + // Revives a previously deleted managed service. The method restores the + // service using the configuration at the time the service was deleted. + // The target service must exist and must have been deleted within the + // last 30 days. + // + // Operation<response: UndeleteServiceResponse> + UndeleteService(context.Context, *UndeleteServiceRequest) (*google_longrunning.Operation, error) + // Lists the history of the service configuration for a managed service, + // from the newest to the oldest. + ListServiceConfigs(context.Context, *ListServiceConfigsRequest) (*ListServiceConfigsResponse, error) + // Gets a service configuration (version) for a managed service. + GetServiceConfig(context.Context, *GetServiceConfigRequest) (*google_api19.Service, error) + // Creates a new service configuration (version) for a managed service. + // This method only stores the service configuration. To roll out the service + // configuration to backend systems please call + // [CreateServiceRollout][google.api.servicemanagement.v1.ServiceManager.CreateServiceRollout]. + CreateServiceConfig(context.Context, *CreateServiceConfigRequest) (*google_api19.Service, error) + // Creates a new service configuration (version) for a managed service based + // on + // user-supplied configuration source files (for example: OpenAPI + // Specification). This method stores the source configurations as well as the + // generated service configuration. To rollout the service configuration to + // other services, + // please call [CreateServiceRollout][google.api.servicemanagement.v1.ServiceManager.CreateServiceRollout]. + // + // Operation<response: SubmitConfigSourceResponse> + SubmitConfigSource(context.Context, *SubmitConfigSourceRequest) (*google_longrunning.Operation, error) + // Lists the history of the service configuration rollouts for a managed + // service, from the newest to the oldest. + ListServiceRollouts(context.Context, *ListServiceRolloutsRequest) (*ListServiceRolloutsResponse, error) + // Gets a service configuration [rollout][google.api.servicemanagement.v1.Rollout]. + GetServiceRollout(context.Context, *GetServiceRolloutRequest) (*Rollout, error) + // Creates a new service configuration rollout. Based on rollout, the + // Google Service Management will roll out the service configurations to + // different backend services. For example, the logging configuration will be + // pushed to Google Cloud Logging. + // + // Please note that any previous pending and running Rollouts and associated + // Operations will be automatically cancelled so that the latest Rollout will + // not be blocked by previous Rollouts. + // + // Operation<response: Rollout> + CreateServiceRollout(context.Context, *CreateServiceRolloutRequest) (*google_longrunning.Operation, error) + // Generates and returns a report (errors, warnings and changes from + // existing configurations) associated with + // GenerateConfigReportRequest.new_value + // + // If GenerateConfigReportRequest.old_value is specified, + // GenerateConfigReportRequest will contain a single ChangeReport based on the + // comparison between GenerateConfigReportRequest.new_value and + // GenerateConfigReportRequest.old_value. + // If GenerateConfigReportRequest.old_value is not specified, this method + // will compare GenerateConfigReportRequest.new_value with the last pushed + // service configuration. + GenerateConfigReport(context.Context, *GenerateConfigReportRequest) (*GenerateConfigReportResponse, error) + // Enable a managed service for a project with default setting. + // + // Operation<response: EnableServiceResponse> + // + // [google.rpc.Status][google.rpc.Status] errors may contain a + // [google.rpc.PreconditionFailure][] error detail. + EnableService(context.Context, *EnableServiceRequest) (*google_longrunning.Operation, error) + // Disable a managed service for a project. + // + // Operation<response: DisableServiceResponse> + DisableService(context.Context, *DisableServiceRequest) (*google_longrunning.Operation, error) +} + +func RegisterServiceManagerServer(s *grpc.Server, srv ServiceManagerServer) { + s.RegisterService(&_ServiceManager_serviceDesc, srv) +} + +func _ServiceManager_ListServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServicesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).ListServices(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/ListServices", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).ListServices(ctx, req.(*ListServicesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_GetService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).GetService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/GetService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).GetService(ctx, req.(*GetServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_CreateService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).CreateService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/CreateService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).CreateService(ctx, req.(*CreateServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_DeleteService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).DeleteService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/DeleteService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).DeleteService(ctx, req.(*DeleteServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_UndeleteService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UndeleteServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).UndeleteService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/UndeleteService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).UndeleteService(ctx, req.(*UndeleteServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_ListServiceConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServiceConfigsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).ListServiceConfigs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/ListServiceConfigs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).ListServiceConfigs(ctx, req.(*ListServiceConfigsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_GetServiceConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServiceConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).GetServiceConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/GetServiceConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).GetServiceConfig(ctx, req.(*GetServiceConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_CreateServiceConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateServiceConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).CreateServiceConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/CreateServiceConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).CreateServiceConfig(ctx, req.(*CreateServiceConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_SubmitConfigSource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SubmitConfigSourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).SubmitConfigSource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/SubmitConfigSource", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).SubmitConfigSource(ctx, req.(*SubmitConfigSourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_ListServiceRollouts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServiceRolloutsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).ListServiceRollouts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/ListServiceRollouts", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).ListServiceRollouts(ctx, req.(*ListServiceRolloutsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_GetServiceRollout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServiceRolloutRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).GetServiceRollout(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/GetServiceRollout", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).GetServiceRollout(ctx, req.(*GetServiceRolloutRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_CreateServiceRollout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateServiceRolloutRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).CreateServiceRollout(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/CreateServiceRollout", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).CreateServiceRollout(ctx, req.(*CreateServiceRolloutRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_GenerateConfigReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GenerateConfigReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).GenerateConfigReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/GenerateConfigReport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).GenerateConfigReport(ctx, req.(*GenerateConfigReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_EnableService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EnableServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).EnableService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/EnableService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).EnableService(ctx, req.(*EnableServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceManager_DisableService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DisableServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceManagerServer).DisableService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicemanagement.v1.ServiceManager/DisableService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceManagerServer).DisableService(ctx, req.(*DisableServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ServiceManager_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.api.servicemanagement.v1.ServiceManager", + HandlerType: (*ServiceManagerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListServices", + Handler: _ServiceManager_ListServices_Handler, + }, + { + MethodName: "GetService", + Handler: _ServiceManager_GetService_Handler, + }, + { + MethodName: "CreateService", + Handler: _ServiceManager_CreateService_Handler, + }, + { + MethodName: "DeleteService", + Handler: _ServiceManager_DeleteService_Handler, + }, + { + MethodName: "UndeleteService", + Handler: _ServiceManager_UndeleteService_Handler, + }, + { + MethodName: "ListServiceConfigs", + Handler: _ServiceManager_ListServiceConfigs_Handler, + }, + { + MethodName: "GetServiceConfig", + Handler: _ServiceManager_GetServiceConfig_Handler, + }, + { + MethodName: "CreateServiceConfig", + Handler: _ServiceManager_CreateServiceConfig_Handler, + }, + { + MethodName: "SubmitConfigSource", + Handler: _ServiceManager_SubmitConfigSource_Handler, + }, + { + MethodName: "ListServiceRollouts", + Handler: _ServiceManager_ListServiceRollouts_Handler, + }, + { + MethodName: "GetServiceRollout", + Handler: _ServiceManager_GetServiceRollout_Handler, + }, + { + MethodName: "CreateServiceRollout", + Handler: _ServiceManager_CreateServiceRollout_Handler, + }, + { + MethodName: "GenerateConfigReport", + Handler: _ServiceManager_GenerateConfigReport_Handler, + }, + { + MethodName: "EnableService", + Handler: _ServiceManager_EnableService_Handler, + }, + { + MethodName: "DisableService", + Handler: _ServiceManager_DisableService_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/api/servicemanagement/v1/servicemanager.proto", +} + +func init() { + proto.RegisterFile("google/api/servicemanagement/v1/servicemanager.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 1343 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcf, 0x6f, 0xdc, 0x44, + 0x14, 0xd6, 0x6c, 0x7f, 0x25, 0x2f, 0xd9, 0x2d, 0x9d, 0x5d, 0xc8, 0xd6, 0xdb, 0xa8, 0xa9, 0x03, + 0x25, 0x4a, 0xe9, 0x5a, 0xe9, 0x4f, 0xba, 0x29, 0x87, 0xb6, 0x41, 0x55, 0x04, 0xa5, 0xd1, 0xa6, + 0x48, 0x50, 0x90, 0x56, 0x8e, 0x3d, 0x31, 0xa6, 0xde, 0x19, 0xe3, 0xf1, 0xa6, 0x24, 0x51, 0x0e, + 0x54, 0x95, 0x90, 0xe8, 0x09, 0xf1, 0xa3, 0x12, 0x47, 0x84, 0x38, 0x70, 0xe0, 0xc2, 0x01, 0x89, + 0x03, 0x12, 0x7f, 0x03, 0xff, 0x02, 0x7f, 0x03, 0x67, 0xb4, 0xe3, 0xf1, 0xc6, 0xb3, 0xeb, 0xac, + 0xed, 0x08, 0x38, 0xfa, 0x8d, 0xbf, 0xf7, 0xbe, 0x79, 0xf3, 0xcd, 0xf3, 0xb7, 0x0b, 0x57, 0x1c, + 0xc6, 0x1c, 0x8f, 0x18, 0xa6, 0xef, 0x1a, 0x9c, 0x04, 0x5b, 0xae, 0x45, 0xba, 0x26, 0x35, 0x1d, + 0xd2, 0x25, 0x34, 0x34, 0xb6, 0x96, 0xd4, 0x60, 0xd0, 0xf4, 0x03, 0x16, 0x32, 0x7c, 0x36, 0x42, + 0x35, 0x4d, 0xdf, 0x6d, 0x8e, 0xa0, 0x9a, 0x5b, 0x4b, 0xda, 0x99, 0x44, 0x5a, 0x93, 0x52, 0x16, + 0x9a, 0xa1, 0xcb, 0x28, 0x8f, 0xe0, 0x5a, 0x7d, 0xb4, 0xa8, 0x5c, 0x31, 0xb2, 0xe8, 0x04, 0x84, + 0xb3, 0x5e, 0x60, 0x91, 0x38, 0xd5, 0xbc, 0x04, 0x78, 0x8c, 0x3a, 0x41, 0x8f, 0x52, 0x97, 0x3a, + 0x06, 0xf3, 0x49, 0xa0, 0xd4, 0x3b, 0x2d, 0x5f, 0x12, 0x4f, 0x1b, 0xbd, 0x4d, 0xc3, 0xa4, 0xdb, + 0x72, 0xa9, 0x31, 0xbc, 0x44, 0xba, 0x7e, 0x18, 0x2f, 0xce, 0x0d, 0x2f, 0x6e, 0xba, 0xc4, 0xb3, + 0x3b, 0x5d, 0x93, 0x3f, 0x92, 0x6f, 0x9c, 0x19, 0x7e, 0x83, 0x87, 0x41, 0xcf, 0x0a, 0xe5, 0xea, + 0x8c, 0x5c, 0x0d, 0x7c, 0xcb, 0xe0, 0xa1, 0x19, 0xf6, 0x24, 0x21, 0xfd, 0x33, 0x04, 0xd5, 0xb7, + 0x5d, 0x1e, 0xae, 0x47, 0x5b, 0xe4, 0x6d, 0xf2, 0x49, 0x8f, 0xf0, 0x10, 0x37, 0xa1, 0xea, 0x07, + 0xcc, 0xee, 0x59, 0x24, 0xe8, 0xf8, 0x01, 0xfb, 0x98, 0x58, 0x61, 0xc7, 0xb5, 0xeb, 0x68, 0x0e, + 0x2d, 0x4c, 0xb6, 0x4f, 0xc5, 0x4b, 0x6b, 0xd1, 0xca, 0xaa, 0x8d, 0x1b, 0x30, 0xe9, 0x9b, 0x0e, + 0xe9, 0x70, 0x77, 0x87, 0xd4, 0x8f, 0xcd, 0xa1, 0x85, 0x63, 0xed, 0x89, 0x7e, 0x60, 0xdd, 0xdd, + 0x21, 0x78, 0x16, 0x40, 0x2c, 0x86, 0xec, 0x11, 0xa1, 0xf5, 0xe3, 0x22, 0x87, 0x78, 0xfd, 0x41, + 0x3f, 0xa0, 0x3f, 0x43, 0x50, 0x53, 0x39, 0x70, 0x9f, 0x51, 0x4e, 0xf0, 0x5b, 0x30, 0x21, 0x5b, + 0xcf, 0xeb, 0x68, 0xee, 0xc8, 0xc2, 0xd4, 0x25, 0xa3, 0x99, 0x71, 0xde, 0xcd, 0x7b, 0xe2, 0xc9, + 0x96, 0xb9, 0xda, 0x83, 0x04, 0xf8, 0x3c, 0x9c, 0xa4, 0xe4, 0xd3, 0xb0, 0x93, 0x60, 0x52, 0x12, + 0x4c, 0xca, 0xfd, 0xf0, 0xda, 0x80, 0xcd, 0x35, 0x38, 0x75, 0x97, 0xc4, 0x5c, 0xe2, 0x76, 0x9c, + 0x83, 0x69, 0x99, 0xa8, 0x43, 0xcd, 0x2e, 0x91, 0x7d, 0x98, 0x92, 0xb1, 0x77, 0xcc, 0x2e, 0xd1, + 0x4d, 0xa8, 0xdd, 0x09, 0x88, 0x19, 0x92, 0x21, 0xe8, 0x2a, 0x9c, 0x90, 0xaf, 0x09, 0xd4, 0x21, + 0xf6, 0x10, 0xe3, 0xf5, 0x1b, 0x50, 0x5b, 0x21, 0x1e, 0x19, 0x29, 0x91, 0x83, 0xdd, 0x32, 0xbc, + 0xf4, 0x2e, 0xb5, 0x0f, 0x09, 0xb6, 0x61, 0x66, 0x04, 0x2c, 0x8f, 0xe8, 0x5f, 0xdc, 0xdd, 0xfb, + 0x30, 0xb3, 0xdf, 0xf8, 0x3b, 0x8c, 0x6e, 0xba, 0x4e, 0x7e, 0x8e, 0x7d, 0x01, 0x5a, 0x02, 0xd3, + 0x97, 0x69, 0x74, 0xb0, 0x13, 0x51, 0x60, 0xd5, 0xd6, 0x77, 0xe0, 0x74, 0x42, 0x60, 0x51, 0x6e, + 0x5e, 0x20, 0xb9, 0x2a, 0xe0, 0xd2, 0x90, 0x80, 0x55, 0xf1, 0x1f, 0x51, 0xc5, 0xaf, 0x3f, 0x41, + 0xa0, 0xa5, 0x15, 0x97, 0x0d, 0xbc, 0x09, 0x27, 0xe3, 0xea, 0x11, 0xdd, 0x58, 0xea, 0xd5, 0x64, + 0x23, 0xe3, 0x66, 0x55, 0xb8, 0x92, 0x25, 0xb7, 0xa8, 0x77, 0x41, 0x53, 0xc4, 0x59, 0xb8, 0xbd, + 0x2d, 0xa8, 0xa8, 0x34, 0x45, 0x9d, 0x03, 0x58, 0x96, 0x15, 0x96, 0xfa, 0xaf, 0x08, 0x4e, 0xaf, + 0xf7, 0x36, 0xba, 0x6e, 0x18, 0x05, 0xd6, 0xc5, 0xdc, 0x2c, 0x50, 0xbc, 0x0d, 0x65, 0x79, 0xb6, + 0xd1, 0xc8, 0x95, 0xb5, 0x2f, 0x66, 0x4a, 0x4d, 0xa9, 0x37, 0x6d, 0x25, 0x9e, 0xf0, 0x3c, 0x94, + 0xb7, 0x4c, 0xcf, 0xb5, 0xcd, 0x90, 0x74, 0x18, 0xf5, 0xb6, 0xc5, 0xb9, 0x4d, 0xb4, 0xa7, 0xe3, + 0xe0, 0x7d, 0xea, 0x6d, 0xeb, 0xef, 0x81, 0x96, 0x46, 0x5c, 0x1e, 0xdd, 0x68, 0x4f, 0x50, 0xee, + 0x9e, 0x3c, 0x45, 0xd0, 0x50, 0xc7, 0x05, 0xf3, 0x3c, 0xd6, 0x0b, 0x0b, 0x74, 0xe5, 0x36, 0x9c, + 0x08, 0x22, 0x90, 0xec, 0xc7, 0x42, 0x66, 0x3f, 0xe2, 0x22, 0x31, 0xb0, 0xaf, 0x8b, 0x84, 0x36, + 0xe5, 0xf2, 0xff, 0x75, 0x33, 0x9e, 0x21, 0x68, 0xa4, 0x56, 0x97, 0xfd, 0x5d, 0x81, 0x09, 0xc9, + 0x33, 0xbe, 0x13, 0xf9, 0x77, 0x38, 0x40, 0xe6, 0xbe, 0x22, 0x1f, 0x42, 0x3d, 0x31, 0xf7, 0x0b, + 0x9f, 0xc6, 0x2c, 0x80, 0x2c, 0xb9, 0x3f, 0x80, 0x26, 0x65, 0x64, 0xd5, 0xd6, 0x1f, 0x42, 0xed, + 0x4d, 0x6a, 0x6e, 0x78, 0xc5, 0xa7, 0x2f, 0x3e, 0x0b, 0x53, 0x16, 0xa3, 0xbc, 0xd7, 0x25, 0xc1, + 0x7e, 0x6a, 0x88, 0x43, 0xab, 0xb6, 0xfe, 0x01, 0xbc, 0xb8, 0xe2, 0xf2, 0xff, 0x28, 0xf9, 0xe7, + 0x08, 0x1a, 0x77, 0x09, 0xed, 0xfb, 0x98, 0xc1, 0xd4, 0xf0, 0x59, 0x30, 0x68, 0xcd, 0x65, 0x00, + 0x4a, 0x1e, 0xab, 0x17, 0xa0, 0x16, 0x1f, 0x53, 0x6c, 0x46, 0x9a, 0xb7, 0xe8, 0x76, 0x7b, 0x92, + 0x92, 0xc7, 0x51, 0x86, 0x3e, 0x88, 0x79, 0xb6, 0x3a, 0x49, 0x0e, 0x00, 0x31, 0xcf, 0x96, 0x57, + 0xe6, 0x6f, 0x04, 0x67, 0xd2, 0x99, 0x48, 0xbd, 0xe4, 0xd8, 0x6e, 0x05, 0x4a, 0x83, 0x5d, 0x96, + 0x5c, 0x1b, 0x3f, 0x80, 0x8a, 0xf5, 0x91, 0x49, 0x1d, 0xd2, 0x09, 0x44, 0x2e, 0x5e, 0x3f, 0x22, + 0x84, 0x96, 0x63, 0xb4, 0x08, 0x98, 0x64, 0x50, 0xb6, 0x12, 0x4f, 0x1c, 0xdf, 0x83, 0x29, 0xdb, + 0x35, 0x1d, 0xca, 0x78, 0xe8, 0x5a, 0xbc, 0x7e, 0x54, 0xa4, 0xbc, 0x90, 0x99, 0x72, 0x65, 0x80, + 0x69, 0x27, 0xf1, 0x97, 0x7e, 0xae, 0x42, 0x45, 0x9e, 0x6c, 0xf4, 0xed, 0x0c, 0xf0, 0x97, 0x08, + 0xa6, 0x93, 0x96, 0x09, 0x5f, 0xc9, 0xcc, 0x9e, 0xe2, 0xf2, 0xb4, 0xab, 0x05, 0x51, 0x51, 0xa3, + 0xf5, 0xda, 0x93, 0x3f, 0xff, 0xfa, 0xaa, 0x54, 0xc1, 0xd3, 0x09, 0x5b, 0xce, 0xf1, 0xb7, 0x08, + 0x60, 0xff, 0x06, 0xe1, 0x4b, 0x99, 0xb9, 0x47, 0x6c, 0x96, 0x56, 0xd4, 0x3c, 0xe8, 0xf3, 0x82, + 0xc9, 0x2c, 0x6e, 0x24, 0x99, 0x18, 0xbb, 0x49, 0x19, 0xec, 0xe1, 0xa7, 0x08, 0xca, 0xca, 0xac, + 0xc5, 0xd9, 0xfb, 0x4e, 0xb3, 0x72, 0xda, 0x6c, 0x0c, 0x4b, 0x78, 0xfc, 0xe6, 0xfd, 0xd8, 0xe3, + 0xeb, 0xb3, 0x82, 0xcc, 0x8c, 0xae, 0xb4, 0xa5, 0x15, 0xfb, 0x1b, 0xfc, 0x05, 0x82, 0xb2, 0x62, + 0xdf, 0x72, 0xd0, 0x48, 0xb3, 0x7b, 0x59, 0x34, 0x64, 0x4f, 0x16, 0xc7, 0xf6, 0xe4, 0x39, 0x82, + 0x93, 0x43, 0x9e, 0x0e, 0x5f, 0xcf, 0xa4, 0x93, 0x6e, 0x21, 0xb3, 0x08, 0xbd, 0x26, 0x08, 0x9d, + 0xd7, 0x5f, 0x1e, 0x43, 0xa8, 0xd5, 0x93, 0xa9, 0xf1, 0x6f, 0x08, 0xf0, 0xa8, 0x5f, 0xc2, 0xad, + 0x22, 0x52, 0x55, 0x1d, 0x9e, 0xb6, 0x7c, 0x28, 0xac, 0x14, 0xfb, 0x05, 0xc1, 0xfe, 0x15, 0x3c, + 0x3f, 0x86, 0xbd, 0x21, 0xad, 0x1b, 0xfe, 0x0e, 0xc1, 0x0b, 0xc3, 0x26, 0x16, 0xbf, 0x5e, 0xe0, + 0x26, 0x28, 0xc6, 0x4c, 0x4b, 0x73, 0x12, 0xfa, 0x75, 0x41, 0x68, 0x09, 0x1b, 0x39, 0x08, 0x19, + 0xbb, 0x03, 0x53, 0xbc, 0x87, 0x7f, 0x40, 0x50, 0x4d, 0x71, 0x81, 0x78, 0xb9, 0xd8, 0x6d, 0xc8, + 0x41, 0x71, 0x59, 0x50, 0xbc, 0xaa, 0xe7, 0xe9, 0x59, 0x6b, 0xc8, 0x44, 0xe1, 0x1f, 0x11, 0xe0, + 0x51, 0xd7, 0x95, 0x43, 0x00, 0x07, 0x7a, 0xcc, 0x2c, 0x81, 0x5e, 0x15, 0x74, 0x0d, 0x7d, 0x31, + 0x0f, 0x5d, 0x2e, 0xaa, 0xb4, 0xd0, 0x22, 0xfe, 0x5d, 0xfd, 0xed, 0x1c, 0xfb, 0x17, 0x5c, 0x48, + 0x6e, 0x43, 0x9e, 0x4b, 0xbb, 0x79, 0x38, 0xb0, 0x14, 0xab, 0xbc, 0x6a, 0x78, 0xdc, 0x55, 0x33, + 0x06, 0xd6, 0xe8, 0x17, 0xa4, 0xfc, 0xd6, 0x8d, 0xc2, 0xf8, 0x46, 0x91, 0xc1, 0xad, 0xf8, 0x24, + 0x2d, 0xb7, 0x3f, 0xd3, 0x6f, 0x08, 0xa2, 0x97, 0xf1, 0x52, 0x1e, 0xa2, 0xc6, 0xee, 0xbe, 0xb5, + 0xda, 0xc3, 0x3f, 0xa1, 0xe1, 0x5f, 0xda, 0x92, 0xf8, 0xcd, 0x82, 0x53, 0x5d, 0xe5, 0x9e, 0x53, + 0x23, 0xb9, 0x3a, 0xdb, 0x8a, 0x0d, 0x36, 0xfe, 0x03, 0x41, 0x2d, 0xcd, 0xb4, 0xe4, 0x20, 0x3b, + 0xc6, 0x75, 0x69, 0x6f, 0x1c, 0x12, 0xad, 0xca, 0x44, 0x3f, 0xa7, 0x7c, 0xa9, 0x9c, 0x14, 0x48, + 0x5f, 0xe7, 0x5f, 0x23, 0x28, 0x2b, 0xe6, 0x35, 0xc7, 0x87, 0x2b, 0xcd, 0xec, 0x66, 0xb5, 0xf8, + 0xa2, 0x60, 0xf5, 0xaa, 0xae, 0x8f, 0xfb, 0x4e, 0x10, 0x91, 0xb8, 0x4f, 0xeb, 0x39, 0x82, 0x8a, + 0xea, 0x7b, 0xf1, 0xb5, 0x1c, 0x1e, 0x8b, 0x17, 0x27, 0xd6, 0x14, 0xc4, 0x16, 0xc6, 0x8e, 0xb3, + 0x96, 0x1d, 0x65, 0x6e, 0xa1, 0xc5, 0xdb, 0xdf, 0x20, 0x98, 0xb7, 0x58, 0x37, 0x8b, 0xcc, 0xed, + 0xaa, 0xea, 0xea, 0xd6, 0xfa, 0xc6, 0x77, 0x0d, 0x3d, 0x5c, 0x93, 0x38, 0x87, 0x79, 0x26, 0x75, + 0x9a, 0x2c, 0x70, 0x0c, 0x87, 0x50, 0x61, 0x8b, 0xe5, 0xbf, 0x92, 0xa6, 0xef, 0xf2, 0x03, 0xff, + 0x99, 0x5c, 0x1e, 0x09, 0x7e, 0x5f, 0x3a, 0x7a, 0xf7, 0xd6, 0xfa, 0xbd, 0x8d, 0xe3, 0x22, 0xc7, + 0xe5, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xb2, 0xf0, 0x70, 0x6f, 0x6b, 0x15, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/legacy/audit_data.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/legacy/audit_data.pb.go new file mode 100644 index 0000000..0265460 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/legacy/audit_data.pb.go @@ -0,0 +1,84 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/legacy/audit_data.proto +// DO NOT EDIT! + +/* +Package legacy is a generated protocol buffer package. + +It is generated from these files: + google/appengine/legacy/audit_data.proto + +It has these top-level messages: + AuditData +*/ +package legacy + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Admin Console legacy audit log. +type AuditData struct { + // Text description of the admin event. + // This is the "Event" column in Admin Console's Admin Logs. + EventMessage string `protobuf:"bytes,1,opt,name=event_message,json=eventMessage" json:"event_message,omitempty"` + // Arbitrary event data. + // This is the "Result" column in Admin Console's Admin Logs. + EventData map[string]string `protobuf:"bytes,2,rep,name=event_data,json=eventData" json:"event_data,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *AuditData) Reset() { *m = AuditData{} } +func (m *AuditData) String() string { return proto.CompactTextString(m) } +func (*AuditData) ProtoMessage() {} +func (*AuditData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AuditData) GetEventMessage() string { + if m != nil { + return m.EventMessage + } + return "" +} + +func (m *AuditData) GetEventData() map[string]string { + if m != nil { + return m.EventData + } + return nil +} + +func init() { + proto.RegisterType((*AuditData)(nil), "google.appengine.legacy.AuditData") +} + +func init() { proto.RegisterFile("google/appengine/legacy/audit_data.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 247 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0x4f, 0x4b, 0x03, 0x31, + 0x10, 0xc5, 0xc9, 0x16, 0x85, 0x1d, 0xb5, 0x48, 0x10, 0x5c, 0xf4, 0x52, 0xf4, 0xb2, 0xa7, 0x04, + 0xf5, 0x22, 0xfe, 0x39, 0x58, 0xec, 0x51, 0x58, 0x7a, 0xf4, 0x52, 0xc6, 0x76, 0x18, 0x16, 0xb7, + 0x49, 0xd8, 0x4d, 0x0b, 0xfb, 0xed, 0xfc, 0x68, 0x92, 0xa4, 0x2e, 0x48, 0xe9, 0x29, 0x33, 0x6f, + 0x7e, 0x99, 0x79, 0x3c, 0x28, 0xd9, 0x5a, 0x6e, 0x48, 0xa3, 0x73, 0x64, 0xb8, 0x36, 0xa4, 0x1b, + 0x62, 0x5c, 0xf6, 0x1a, 0x37, 0xab, 0xda, 0x2f, 0x56, 0xe8, 0x51, 0xb9, 0xd6, 0x7a, 0x2b, 0x2f, + 0x13, 0xa9, 0x06, 0x52, 0x25, 0xf2, 0xe6, 0x47, 0x40, 0xfe, 0x16, 0xe8, 0x77, 0xf4, 0x28, 0x6f, + 0xe1, 0x8c, 0xb6, 0x64, 0xfc, 0x62, 0x4d, 0x5d, 0x87, 0x4c, 0x85, 0x98, 0x88, 0x32, 0x9f, 0x9f, + 0x46, 0xf1, 0x23, 0x69, 0xb2, 0x02, 0x48, 0x50, 0xd8, 0x5f, 0x64, 0x93, 0x51, 0x79, 0x72, 0x7f, + 0xa7, 0x0e, 0x1c, 0x50, 0xc3, 0x72, 0x35, 0x0b, 0x9f, 0x42, 0x35, 0x33, 0xbe, 0xed, 0xe7, 0x39, + 0xfd, 0xf5, 0x57, 0x2f, 0x30, 0xfe, 0x3f, 0x94, 0xe7, 0x30, 0xfa, 0xa6, 0x7e, 0x77, 0x3e, 0x94, + 0xf2, 0x02, 0x8e, 0xb6, 0xd8, 0x6c, 0xa8, 0xc8, 0xa2, 0x96, 0x9a, 0xa7, 0xec, 0x51, 0x4c, 0x0d, + 0x5c, 0x2f, 0xed, 0xfa, 0x90, 0x81, 0xe9, 0x78, 0x70, 0x50, 0x85, 0x28, 0x2a, 0xf1, 0xf9, 0xba, + 0x43, 0xd9, 0x36, 0x68, 0x58, 0xd9, 0x96, 0x35, 0x93, 0x89, 0x41, 0xe9, 0x34, 0x42, 0x57, 0x77, + 0x7b, 0xa9, 0x3e, 0xa7, 0xe7, 0xeb, 0x38, 0x92, 0x0f, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x4e, + 0x5d, 0x14, 0xaa, 0x7e, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/logging/v1/request_log.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/logging/v1/request_log.pb.go new file mode 100644 index 0000000..4f285cc --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/logging/v1/request_log.pb.go @@ -0,0 +1,539 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/logging/v1/request_log.proto +// DO NOT EDIT! + +/* +Package logging is a generated protocol buffer package. + +It is generated from these files: + google/appengine/logging/v1/request_log.proto + +It has these top-level messages: + LogLine + SourceLocation + SourceReference + RequestLog +*/ +package logging + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_logging_type "google.golang.org/genproto/googleapis/logging/type" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Application log line emitted while processing a request. +type LogLine struct { + // Approximate time when this log entry was made. + Time *google_protobuf2.Timestamp `protobuf:"bytes,1,opt,name=time" json:"time,omitempty"` + // Severity of this log entry. + Severity google_logging_type.LogSeverity `protobuf:"varint,2,opt,name=severity,enum=google.logging.type.LogSeverity" json:"severity,omitempty"` + // App-provided log message. + LogMessage string `protobuf:"bytes,3,opt,name=log_message,json=logMessage" json:"log_message,omitempty"` + // Where in the source code this log message was written. + SourceLocation *SourceLocation `protobuf:"bytes,4,opt,name=source_location,json=sourceLocation" json:"source_location,omitempty"` +} + +func (m *LogLine) Reset() { *m = LogLine{} } +func (m *LogLine) String() string { return proto.CompactTextString(m) } +func (*LogLine) ProtoMessage() {} +func (*LogLine) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *LogLine) GetTime() *google_protobuf2.Timestamp { + if m != nil { + return m.Time + } + return nil +} + +func (m *LogLine) GetSeverity() google_logging_type.LogSeverity { + if m != nil { + return m.Severity + } + return google_logging_type.LogSeverity_DEFAULT +} + +func (m *LogLine) GetLogMessage() string { + if m != nil { + return m.LogMessage + } + return "" +} + +func (m *LogLine) GetSourceLocation() *SourceLocation { + if m != nil { + return m.SourceLocation + } + return nil +} + +// Specifies a location in a source code file. +type SourceLocation struct { + // Source file name. Depending on the runtime environment, this might be a + // simple name or a fully-qualified name. + File string `protobuf:"bytes,1,opt,name=file" json:"file,omitempty"` + // Line within the source file. + Line int64 `protobuf:"varint,2,opt,name=line" json:"line,omitempty"` + // Human-readable name of the function or method being invoked, with optional + // context such as the class or package name. This information is used in + // contexts such as the logs viewer, where a file and line number are less + // meaningful. The format can vary by language. For example: + // `qual.if.ied.Class.method` (Java), `dir/package.func` (Go), `function` + // (Python). + FunctionName string `protobuf:"bytes,3,opt,name=function_name,json=functionName" json:"function_name,omitempty"` +} + +func (m *SourceLocation) Reset() { *m = SourceLocation{} } +func (m *SourceLocation) String() string { return proto.CompactTextString(m) } +func (*SourceLocation) ProtoMessage() {} +func (*SourceLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *SourceLocation) GetFile() string { + if m != nil { + return m.File + } + return "" +} + +func (m *SourceLocation) GetLine() int64 { + if m != nil { + return m.Line + } + return 0 +} + +func (m *SourceLocation) GetFunctionName() string { + if m != nil { + return m.FunctionName + } + return "" +} + +// A reference to a particular snapshot of the source tree used to build and +// deploy an application. +type SourceReference struct { + // Optional. A URI string identifying the repository. + // Example: "https://github.com/GoogleCloudPlatform/kubernetes.git" + Repository string `protobuf:"bytes,1,opt,name=repository" json:"repository,omitempty"` + // The canonical and persistent identifier of the deployed revision. + // Example (git): "0035781c50ec7aa23385dc841529ce8a4b70db1b" + RevisionId string `protobuf:"bytes,2,opt,name=revision_id,json=revisionId" json:"revision_id,omitempty"` +} + +func (m *SourceReference) Reset() { *m = SourceReference{} } +func (m *SourceReference) String() string { return proto.CompactTextString(m) } +func (*SourceReference) ProtoMessage() {} +func (*SourceReference) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *SourceReference) GetRepository() string { + if m != nil { + return m.Repository + } + return "" +} + +func (m *SourceReference) GetRevisionId() string { + if m != nil { + return m.RevisionId + } + return "" +} + +// Complete log information about a single HTTP request to an App Engine +// application. +type RequestLog struct { + // Application that handled this request. + AppId string `protobuf:"bytes,1,opt,name=app_id,json=appId" json:"app_id,omitempty"` + // Module of the application that handled this request. + ModuleId string `protobuf:"bytes,37,opt,name=module_id,json=moduleId" json:"module_id,omitempty"` + // Version of the application that handled this request. + VersionId string `protobuf:"bytes,2,opt,name=version_id,json=versionId" json:"version_id,omitempty"` + // Globally unique identifier for a request, which is based on the request + // start time. Request IDs for requests which started later will compare + // greater as strings than those for requests which started earlier. + RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId" json:"request_id,omitempty"` + // Origin IP address. + Ip string `protobuf:"bytes,4,opt,name=ip" json:"ip,omitempty"` + // Time when the request started. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time when the request finished. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,7,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Latency of the request. + Latency *google_protobuf1.Duration `protobuf:"bytes,8,opt,name=latency" json:"latency,omitempty"` + // Number of CPU megacycles used to process request. + MegaCycles int64 `protobuf:"varint,9,opt,name=mega_cycles,json=megaCycles" json:"mega_cycles,omitempty"` + // Request method. Example: `"GET"`, `"HEAD"`, `"PUT"`, `"POST"`, `"DELETE"`. + Method string `protobuf:"bytes,10,opt,name=method" json:"method,omitempty"` + // Contains the path and query portion of the URL that was requested. For + // example, if the URL was "http://example.com/app?name=val", the resource + // would be "/app?name=val". The fragment identifier, which is identified by + // the `#` character, is not included. + Resource string `protobuf:"bytes,11,opt,name=resource" json:"resource,omitempty"` + // HTTP version of request. Example: `"HTTP/1.1"`. + HttpVersion string `protobuf:"bytes,12,opt,name=http_version,json=httpVersion" json:"http_version,omitempty"` + // HTTP response status code. Example: 200, 404. + Status int32 `protobuf:"varint,13,opt,name=status" json:"status,omitempty"` + // Size in bytes sent back to client by request. + ResponseSize int64 `protobuf:"varint,14,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` + // Referrer URL of request. + Referrer string `protobuf:"bytes,15,opt,name=referrer" json:"referrer,omitempty"` + // User agent that made the request. + UserAgent string `protobuf:"bytes,16,opt,name=user_agent,json=userAgent" json:"user_agent,omitempty"` + // The logged-in user who made the request. + // + // Most likely, this is the part of the user's email before the `@` sign. The + // field value is the same for different requests from the same user, but + // different users can have similar names. This information is also + // available to the application via the App Engine Users API. + // + // This field will be populated starting with App Engine 1.9.21. + Nickname string `protobuf:"bytes,40,opt,name=nickname" json:"nickname,omitempty"` + // File or class that handled the request. + UrlMapEntry string `protobuf:"bytes,17,opt,name=url_map_entry,json=urlMapEntry" json:"url_map_entry,omitempty"` + // Internet host and port number of the resource being requested. + Host string `protobuf:"bytes,20,opt,name=host" json:"host,omitempty"` + // An indication of the relative cost of serving this request. + Cost float64 `protobuf:"fixed64,21,opt,name=cost" json:"cost,omitempty"` + // Queue name of the request, in the case of an offline request. + TaskQueueName string `protobuf:"bytes,22,opt,name=task_queue_name,json=taskQueueName" json:"task_queue_name,omitempty"` + // Task name of the request, in the case of an offline request. + TaskName string `protobuf:"bytes,23,opt,name=task_name,json=taskName" json:"task_name,omitempty"` + // Whether this was a loading request for the instance. + WasLoadingRequest bool `protobuf:"varint,24,opt,name=was_loading_request,json=wasLoadingRequest" json:"was_loading_request,omitempty"` + // Time this request spent in the pending request queue. + PendingTime *google_protobuf1.Duration `protobuf:"bytes,25,opt,name=pending_time,json=pendingTime" json:"pending_time,omitempty"` + // If the instance processing this request belongs to a manually scaled + // module, then this is the 0-based index of the instance. Otherwise, this + // value is -1. + InstanceIndex int32 `protobuf:"varint,26,opt,name=instance_index,json=instanceIndex" json:"instance_index,omitempty"` + // Whether this request is finished or active. + Finished bool `protobuf:"varint,27,opt,name=finished" json:"finished,omitempty"` + // Whether this is the first `RequestLog` entry for this request. If an + // active request has several `RequestLog` entries written to Stackdriver + // Logging, then this field will be set for one of them. + First bool `protobuf:"varint,42,opt,name=first" json:"first,omitempty"` + // An identifier for the instance that handled the request. + InstanceId string `protobuf:"bytes,28,opt,name=instance_id,json=instanceId" json:"instance_id,omitempty"` + // A list of log lines emitted by the application while serving this request. + Line []*LogLine `protobuf:"bytes,29,rep,name=line" json:"line,omitempty"` + // App Engine release version. + AppEngineRelease string `protobuf:"bytes,38,opt,name=app_engine_release,json=appEngineRelease" json:"app_engine_release,omitempty"` + // Stackdriver Trace identifier for this request. + TraceId string `protobuf:"bytes,39,opt,name=trace_id,json=traceId" json:"trace_id,omitempty"` + // Source code for the application that handled this request. There can be + // more than one source reference per deployed application if source code is + // distributed among multiple repositories. + SourceReference []*SourceReference `protobuf:"bytes,41,rep,name=source_reference,json=sourceReference" json:"source_reference,omitempty"` +} + +func (m *RequestLog) Reset() { *m = RequestLog{} } +func (m *RequestLog) String() string { return proto.CompactTextString(m) } +func (*RequestLog) ProtoMessage() {} +func (*RequestLog) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *RequestLog) GetAppId() string { + if m != nil { + return m.AppId + } + return "" +} + +func (m *RequestLog) GetModuleId() string { + if m != nil { + return m.ModuleId + } + return "" +} + +func (m *RequestLog) GetVersionId() string { + if m != nil { + return m.VersionId + } + return "" +} + +func (m *RequestLog) GetRequestId() string { + if m != nil { + return m.RequestId + } + return "" +} + +func (m *RequestLog) GetIp() string { + if m != nil { + return m.Ip + } + return "" +} + +func (m *RequestLog) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *RequestLog) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *RequestLog) GetLatency() *google_protobuf1.Duration { + if m != nil { + return m.Latency + } + return nil +} + +func (m *RequestLog) GetMegaCycles() int64 { + if m != nil { + return m.MegaCycles + } + return 0 +} + +func (m *RequestLog) GetMethod() string { + if m != nil { + return m.Method + } + return "" +} + +func (m *RequestLog) GetResource() string { + if m != nil { + return m.Resource + } + return "" +} + +func (m *RequestLog) GetHttpVersion() string { + if m != nil { + return m.HttpVersion + } + return "" +} + +func (m *RequestLog) GetStatus() int32 { + if m != nil { + return m.Status + } + return 0 +} + +func (m *RequestLog) GetResponseSize() int64 { + if m != nil { + return m.ResponseSize + } + return 0 +} + +func (m *RequestLog) GetReferrer() string { + if m != nil { + return m.Referrer + } + return "" +} + +func (m *RequestLog) GetUserAgent() string { + if m != nil { + return m.UserAgent + } + return "" +} + +func (m *RequestLog) GetNickname() string { + if m != nil { + return m.Nickname + } + return "" +} + +func (m *RequestLog) GetUrlMapEntry() string { + if m != nil { + return m.UrlMapEntry + } + return "" +} + +func (m *RequestLog) GetHost() string { + if m != nil { + return m.Host + } + return "" +} + +func (m *RequestLog) GetCost() float64 { + if m != nil { + return m.Cost + } + return 0 +} + +func (m *RequestLog) GetTaskQueueName() string { + if m != nil { + return m.TaskQueueName + } + return "" +} + +func (m *RequestLog) GetTaskName() string { + if m != nil { + return m.TaskName + } + return "" +} + +func (m *RequestLog) GetWasLoadingRequest() bool { + if m != nil { + return m.WasLoadingRequest + } + return false +} + +func (m *RequestLog) GetPendingTime() *google_protobuf1.Duration { + if m != nil { + return m.PendingTime + } + return nil +} + +func (m *RequestLog) GetInstanceIndex() int32 { + if m != nil { + return m.InstanceIndex + } + return 0 +} + +func (m *RequestLog) GetFinished() bool { + if m != nil { + return m.Finished + } + return false +} + +func (m *RequestLog) GetFirst() bool { + if m != nil { + return m.First + } + return false +} + +func (m *RequestLog) GetInstanceId() string { + if m != nil { + return m.InstanceId + } + return "" +} + +func (m *RequestLog) GetLine() []*LogLine { + if m != nil { + return m.Line + } + return nil +} + +func (m *RequestLog) GetAppEngineRelease() string { + if m != nil { + return m.AppEngineRelease + } + return "" +} + +func (m *RequestLog) GetTraceId() string { + if m != nil { + return m.TraceId + } + return "" +} + +func (m *RequestLog) GetSourceReference() []*SourceReference { + if m != nil { + return m.SourceReference + } + return nil +} + +func init() { + proto.RegisterType((*LogLine)(nil), "google.appengine.logging.v1.LogLine") + proto.RegisterType((*SourceLocation)(nil), "google.appengine.logging.v1.SourceLocation") + proto.RegisterType((*SourceReference)(nil), "google.appengine.logging.v1.SourceReference") + proto.RegisterType((*RequestLog)(nil), "google.appengine.logging.v1.RequestLog") +} + +func init() { proto.RegisterFile("google/appengine/logging/v1/request_log.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 921 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x7f, 0x6f, 0x1c, 0x35, + 0x10, 0xd5, 0xe6, 0xe7, 0x9d, 0x2f, 0xb9, 0xa4, 0xa6, 0x2d, 0x4e, 0x42, 0x9b, 0x23, 0xd0, 0x70, + 0x40, 0xd9, 0x53, 0x53, 0x21, 0x81, 0xe8, 0x3f, 0x04, 0xfa, 0xc7, 0x49, 0x57, 0x54, 0x36, 0x15, + 0x48, 0x48, 0x68, 0xe5, 0xee, 0xce, 0x6d, 0xac, 0xee, 0xda, 0xae, 0xed, 0xbd, 0xf6, 0xfa, 0x41, + 0xf8, 0x98, 0x7c, 0x06, 0xe4, 0xb1, 0xf7, 0x4a, 0x00, 0x25, 0xfc, 0xb7, 0xf3, 0xe6, 0xbd, 0xf1, + 0xd8, 0x7e, 0x9e, 0x25, 0x5f, 0x55, 0x4a, 0x55, 0x35, 0x4c, 0xb8, 0xd6, 0x20, 0x2b, 0x21, 0x61, + 0x52, 0xab, 0xaa, 0x12, 0xb2, 0x9a, 0x2c, 0x1e, 0x4d, 0x0c, 0xbc, 0x6e, 0xc1, 0xba, 0xbc, 0x56, + 0x55, 0xaa, 0x8d, 0x72, 0x8a, 0x1e, 0x05, 0x7a, 0xba, 0xa2, 0xa7, 0x91, 0x9e, 0x2e, 0x1e, 0x1d, + 0x9e, 0xc6, 0x5a, 0x5d, 0x05, 0xb7, 0xd4, 0x18, 0xe4, 0x16, 0x16, 0x60, 0x84, 0x5b, 0x86, 0x22, + 0x87, 0xf7, 0x23, 0x0f, 0xa3, 0x97, 0xed, 0x7c, 0x52, 0xb6, 0x86, 0x3b, 0xa1, 0x64, 0xcc, 0x1f, + 0xff, 0x33, 0xef, 0x44, 0x03, 0xd6, 0xf1, 0x46, 0x07, 0xc2, 0xc9, 0x9f, 0x09, 0xd9, 0x9e, 0xa9, + 0x6a, 0x26, 0x24, 0xd0, 0x94, 0x6c, 0xf8, 0x34, 0x4b, 0x46, 0xc9, 0x78, 0x70, 0x76, 0x98, 0xc6, + 0x06, 0x3b, 0x6d, 0xfa, 0xa2, 0xd3, 0x66, 0xc8, 0xa3, 0x4f, 0x48, 0xaf, 0x6b, 0x87, 0xad, 0x8d, + 0x92, 0xf1, 0xf0, 0x6c, 0xd4, 0x69, 0xba, 0xad, 0xf8, 0xbe, 0xd3, 0x99, 0xaa, 0x2e, 0x22, 0x2f, + 0x5b, 0x29, 0xe8, 0x31, 0x19, 0xf8, 0x0d, 0x35, 0x60, 0x2d, 0xaf, 0x80, 0xad, 0x8f, 0x92, 0x71, + 0x3f, 0x23, 0xb5, 0xaa, 0x9e, 0x05, 0x84, 0xbe, 0x20, 0x7b, 0x56, 0xb5, 0xa6, 0x80, 0xbc, 0x56, + 0x05, 0x6e, 0x8a, 0x6d, 0x60, 0x67, 0x5f, 0xa6, 0xd7, 0x1c, 0x5d, 0x7a, 0x81, 0x9a, 0x59, 0x94, + 0x64, 0x43, 0x7b, 0x25, 0x3e, 0xf9, 0x9d, 0x0c, 0xaf, 0x32, 0x28, 0x25, 0x1b, 0x73, 0x51, 0x87, + 0x6d, 0xf7, 0x33, 0xfc, 0xf6, 0x58, 0x2d, 0x24, 0xe0, 0xb6, 0xd6, 0x33, 0xfc, 0xa6, 0x9f, 0x90, + 0xdd, 0x79, 0x2b, 0x0b, 0xaf, 0xc9, 0x25, 0x6f, 0xba, 0x96, 0x77, 0x3a, 0xf0, 0x27, 0xde, 0xc0, + 0x49, 0x46, 0xf6, 0x42, 0xf9, 0x0c, 0xe6, 0x60, 0x40, 0x16, 0x40, 0xef, 0x13, 0x62, 0x40, 0x2b, + 0x2b, 0x9c, 0x32, 0xcb, 0xb8, 0xca, 0xdf, 0x10, 0x7f, 0x10, 0x06, 0x16, 0xc2, 0xfa, 0xba, 0xa2, + 0xc4, 0x25, 0x91, 0x10, 0xa0, 0x69, 0x79, 0xf2, 0x47, 0x9f, 0x90, 0x2c, 0xf8, 0x67, 0xa6, 0x2a, + 0x7a, 0x87, 0x6c, 0x71, 0xad, 0x3d, 0x35, 0xd4, 0xda, 0xe4, 0x5a, 0x4f, 0x4b, 0x7a, 0x44, 0xfa, + 0x8d, 0x2a, 0xdb, 0x1a, 0x7c, 0xe6, 0x01, 0x66, 0x7a, 0x01, 0x98, 0x96, 0xf4, 0x1e, 0x21, 0x0b, + 0x30, 0x57, 0x97, 0xe8, 0x47, 0x24, 0xa4, 0x3b, 0x83, 0x8a, 0x32, 0xee, 0xab, 0x1f, 0x91, 0x69, + 0x49, 0x87, 0x64, 0x4d, 0x68, 0x3c, 0xfc, 0x7e, 0xb6, 0x26, 0x34, 0xfd, 0x96, 0x10, 0xeb, 0xb8, + 0x71, 0x39, 0xda, 0x65, 0xeb, 0x46, 0xbb, 0xf4, 0x91, 0xed, 0x63, 0xfa, 0x35, 0xe9, 0x81, 0x2c, + 0x83, 0x70, 0xfb, 0x46, 0xe1, 0x36, 0xc8, 0x12, 0x65, 0x8f, 0xc9, 0x76, 0xcd, 0x1d, 0xc8, 0x62, + 0xc9, 0x7a, 0xa8, 0x3a, 0xf8, 0x97, 0xea, 0xc7, 0xe8, 0xfc, 0xac, 0x63, 0xfa, 0x83, 0x6d, 0xa0, + 0xe2, 0x79, 0xb1, 0x2c, 0x6a, 0xb0, 0xac, 0x8f, 0x77, 0x49, 0x3c, 0xf4, 0x03, 0x22, 0xf4, 0x2e, + 0xd9, 0x6a, 0xc0, 0x5d, 0xaa, 0x92, 0x11, 0xdc, 0x5b, 0x8c, 0xe8, 0x21, 0xe9, 0x19, 0x08, 0xbe, + 0x61, 0x83, 0x70, 0x92, 0x5d, 0x4c, 0x3f, 0x26, 0x3b, 0x97, 0xce, 0xe9, 0x3c, 0x1e, 0x1e, 0xdb, + 0xc1, 0xfc, 0xc0, 0x63, 0xbf, 0x04, 0xc8, 0x97, 0xb5, 0x8e, 0xbb, 0xd6, 0xb2, 0xdd, 0x51, 0x32, + 0xde, 0xcc, 0x62, 0xe4, 0x0d, 0x64, 0xc0, 0x6a, 0x25, 0x2d, 0xe4, 0x56, 0xbc, 0x03, 0x36, 0xc4, + 0x8e, 0x76, 0x3a, 0xf0, 0x42, 0xbc, 0x83, 0xb0, 0xf6, 0x1c, 0x8c, 0x01, 0xc3, 0xf6, 0xba, 0xb5, + 0x43, 0xec, 0xaf, 0xa9, 0xb5, 0x60, 0x72, 0x5e, 0x81, 0x74, 0x6c, 0x3f, 0x5c, 0x93, 0x47, 0xbe, + 0xf7, 0x80, 0x97, 0x4a, 0x51, 0xbc, 0x42, 0x6f, 0x8e, 0x83, 0xb4, 0x8b, 0xe9, 0x09, 0xd9, 0x6d, + 0x4d, 0x9d, 0x37, 0x5c, 0xe7, 0x20, 0x9d, 0x59, 0xb2, 0x5b, 0xa1, 0xef, 0xd6, 0xd4, 0xcf, 0xb8, + 0x7e, 0xea, 0x21, 0x6f, 0xfa, 0x4b, 0x65, 0x1d, 0xbb, 0x1d, 0x1e, 0x82, 0xff, 0xf6, 0x58, 0xe1, + 0xb1, 0x3b, 0xa3, 0x64, 0x9c, 0x64, 0xf8, 0x4d, 0x4f, 0xc9, 0x9e, 0xe3, 0xf6, 0x55, 0xfe, 0xba, + 0x85, 0x16, 0xc2, 0x53, 0xb8, 0x8b, 0x92, 0x5d, 0x0f, 0xff, 0xec, 0x51, 0xff, 0x16, 0xbc, 0x23, + 0x91, 0x87, 0x8c, 0x0f, 0x43, 0x43, 0x1e, 0xc0, 0x64, 0x4a, 0x3e, 0x78, 0xc3, 0x6d, 0x5e, 0x2b, + 0x5e, 0x0a, 0x59, 0xe5, 0xd1, 0x6c, 0x8c, 0x8d, 0x92, 0x71, 0x2f, 0xbb, 0xf5, 0x86, 0xdb, 0x59, + 0xc8, 0x44, 0xe3, 0xd3, 0x27, 0x64, 0x47, 0x83, 0x44, 0x2e, 0x9a, 0xe7, 0xe0, 0x26, 0x1b, 0x0c, + 0x22, 0x1d, 0xfd, 0xf3, 0x80, 0x0c, 0x85, 0xb4, 0x8e, 0xcb, 0x02, 0x72, 0x21, 0x4b, 0x78, 0xcb, + 0x0e, 0xf1, 0x6a, 0x76, 0x3b, 0x74, 0xea, 0x41, 0x7f, 0x82, 0x73, 0x21, 0x85, 0xbd, 0x84, 0x92, + 0x1d, 0x61, 0x27, 0xab, 0x98, 0xde, 0x26, 0x9b, 0x73, 0x61, 0xac, 0x63, 0x5f, 0x60, 0x22, 0x04, + 0xde, 0x63, 0xef, 0x0b, 0x97, 0xec, 0xa3, 0xf0, 0x78, 0x57, 0x55, 0x4b, 0xfa, 0x4d, 0x9c, 0x24, + 0xf7, 0x46, 0xeb, 0xe3, 0xc1, 0xd9, 0xa7, 0xd7, 0x8e, 0xae, 0x38, 0x88, 0xe3, 0xbc, 0x79, 0x48, + 0xa8, 0x7f, 0xe7, 0x81, 0x96, 0x1b, 0xa8, 0x81, 0x5b, 0x60, 0xa7, 0xb8, 0xc2, 0x3e, 0xd7, 0xfa, + 0x29, 0x26, 0xb2, 0x80, 0xd3, 0x03, 0xd2, 0x73, 0x86, 0x87, 0x2e, 0x3e, 0x43, 0xce, 0x36, 0xc6, + 0xd3, 0x92, 0xfe, 0x4a, 0xf6, 0xe3, 0x20, 0x35, 0xdd, 0x50, 0x62, 0x9f, 0x63, 0x3b, 0x0f, 0xff, + 0xc7, 0x24, 0x5d, 0x0d, 0xb2, 0x2c, 0x8e, 0xe3, 0x15, 0x70, 0xfe, 0x96, 0x1c, 0x17, 0xaa, 0xb9, + 0xae, 0xc6, 0xf9, 0xde, 0xfb, 0xc1, 0xf5, 0xdc, 0x5f, 0xd1, 0xf3, 0xe4, 0xb7, 0xf3, 0xc8, 0xaf, + 0x54, 0xcd, 0x65, 0x95, 0x2a, 0x53, 0x4d, 0x2a, 0x90, 0x78, 0x81, 0x93, 0x90, 0xe2, 0x5a, 0xd8, + 0xff, 0xfc, 0x8d, 0x7e, 0x17, 0x3f, 0x5f, 0x6e, 0x21, 0xfd, 0xf1, 0x5f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x05, 0xf7, 0x68, 0xa8, 0x74, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/app_yaml.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/app_yaml.pb.go new file mode 100644 index 0000000..7d56552 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/app_yaml.pb.go @@ -0,0 +1,897 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/app_yaml.proto +// DO NOT EDIT! + +/* +Package appengine is a generated protocol buffer package. + +It is generated from these files: + google/appengine/v1/app_yaml.proto + google/appengine/v1/appengine.proto + google/appengine/v1/application.proto + google/appengine/v1/deploy.proto + google/appengine/v1/instance.proto + google/appengine/v1/location.proto + google/appengine/v1/operation.proto + google/appengine/v1/service.proto + google/appengine/v1/version.proto + +It has these top-level messages: + ApiConfigHandler + ErrorHandler + UrlMap + StaticFilesHandler + ScriptHandler + ApiEndpointHandler + HealthCheck + Library + GetApplicationRequest + RepairApplicationRequest + ListServicesRequest + ListServicesResponse + GetServiceRequest + UpdateServiceRequest + DeleteServiceRequest + ListVersionsRequest + ListVersionsResponse + GetVersionRequest + CreateVersionRequest + UpdateVersionRequest + DeleteVersionRequest + ListInstancesRequest + ListInstancesResponse + GetInstanceRequest + DeleteInstanceRequest + DebugInstanceRequest + Application + UrlDispatchRule + Deployment + FileInfo + ContainerInfo + ZipInfo + Instance + LocationMetadata + OperationMetadataV1 + Service + TrafficSplit + Version + AutomaticScaling + BasicScaling + ManualScaling + CpuUtilization + RequestUtilization + DiskUtilization + NetworkUtilization + Network + Resources +*/ +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Actions to take when the user is not logged in. +type AuthFailAction int32 + +const ( + // Not specified. `AUTH_FAIL_ACTION_REDIRECT` is assumed. + AuthFailAction_AUTH_FAIL_ACTION_UNSPECIFIED AuthFailAction = 0 + // Redirects user to "accounts.google.com". The user is redirected back to the + // application URL after signing in or creating an account. + AuthFailAction_AUTH_FAIL_ACTION_REDIRECT AuthFailAction = 1 + // Rejects request with a `401` HTTP status code and an error + // message. + AuthFailAction_AUTH_FAIL_ACTION_UNAUTHORIZED AuthFailAction = 2 +) + +var AuthFailAction_name = map[int32]string{ + 0: "AUTH_FAIL_ACTION_UNSPECIFIED", + 1: "AUTH_FAIL_ACTION_REDIRECT", + 2: "AUTH_FAIL_ACTION_UNAUTHORIZED", +} +var AuthFailAction_value = map[string]int32{ + "AUTH_FAIL_ACTION_UNSPECIFIED": 0, + "AUTH_FAIL_ACTION_REDIRECT": 1, + "AUTH_FAIL_ACTION_UNAUTHORIZED": 2, +} + +func (x AuthFailAction) String() string { + return proto.EnumName(AuthFailAction_name, int32(x)) +} +func (AuthFailAction) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Methods to restrict access to a URL based on login status. +type LoginRequirement int32 + +const ( + // Not specified. `LOGIN_OPTIONAL` is assumed. + LoginRequirement_LOGIN_UNSPECIFIED LoginRequirement = 0 + // Does not require that the user is signed in. + LoginRequirement_LOGIN_OPTIONAL LoginRequirement = 1 + // If the user is not signed in, the `auth_fail_action` is taken. + // In addition, if the user is not an administrator for the + // application, they are given an error message regardless of + // `auth_fail_action`. If the user is an administrator, the handler + // proceeds. + LoginRequirement_LOGIN_ADMIN LoginRequirement = 2 + // If the user has signed in, the handler proceeds normally. Otherwise, the + // auth_fail_action is taken. + LoginRequirement_LOGIN_REQUIRED LoginRequirement = 3 +) + +var LoginRequirement_name = map[int32]string{ + 0: "LOGIN_UNSPECIFIED", + 1: "LOGIN_OPTIONAL", + 2: "LOGIN_ADMIN", + 3: "LOGIN_REQUIRED", +} +var LoginRequirement_value = map[string]int32{ + "LOGIN_UNSPECIFIED": 0, + "LOGIN_OPTIONAL": 1, + "LOGIN_ADMIN": 2, + "LOGIN_REQUIRED": 3, +} + +func (x LoginRequirement) String() string { + return proto.EnumName(LoginRequirement_name, int32(x)) +} +func (LoginRequirement) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// Methods to enforce security (HTTPS) on a URL. +type SecurityLevel int32 + +const ( + // Not specified. + SecurityLevel_SECURE_UNSPECIFIED SecurityLevel = 0 + // Both HTTP and HTTPS requests with URLs that match the handler succeed + // without redirects. The application can examine the request to determine + // which protocol was used, and respond accordingly. + SecurityLevel_SECURE_DEFAULT SecurityLevel = 0 + // Requests for a URL that match this handler that use HTTPS are automatically + // redirected to the HTTP equivalent URL. + SecurityLevel_SECURE_NEVER SecurityLevel = 1 + // Both HTTP and HTTPS requests with URLs that match the handler succeed + // without redirects. The application can examine the request to determine + // which protocol was used and respond accordingly. + SecurityLevel_SECURE_OPTIONAL SecurityLevel = 2 + // Requests for a URL that match this handler that do not use HTTPS are + // automatically redirected to the HTTPS URL with the same path. Query + // parameters are reserved for the redirect. + SecurityLevel_SECURE_ALWAYS SecurityLevel = 3 +) + +var SecurityLevel_name = map[int32]string{ + 0: "SECURE_UNSPECIFIED", + // Duplicate value: 0: "SECURE_DEFAULT", + 1: "SECURE_NEVER", + 2: "SECURE_OPTIONAL", + 3: "SECURE_ALWAYS", +} +var SecurityLevel_value = map[string]int32{ + "SECURE_UNSPECIFIED": 0, + "SECURE_DEFAULT": 0, + "SECURE_NEVER": 1, + "SECURE_OPTIONAL": 2, + "SECURE_ALWAYS": 3, +} + +func (x SecurityLevel) String() string { + return proto.EnumName(SecurityLevel_name, int32(x)) +} +func (SecurityLevel) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// Error codes. +type ErrorHandler_ErrorCode int32 + +const ( + // Not specified. ERROR_CODE_DEFAULT is assumed. + ErrorHandler_ERROR_CODE_UNSPECIFIED ErrorHandler_ErrorCode = 0 + // All other error types. + ErrorHandler_ERROR_CODE_DEFAULT ErrorHandler_ErrorCode = 0 + // Application has exceeded a resource quota. + ErrorHandler_ERROR_CODE_OVER_QUOTA ErrorHandler_ErrorCode = 1 + // Client blocked by the application's Denial of Service protection + // configuration. + ErrorHandler_ERROR_CODE_DOS_API_DENIAL ErrorHandler_ErrorCode = 2 + // Deadline reached before the application responds. + ErrorHandler_ERROR_CODE_TIMEOUT ErrorHandler_ErrorCode = 3 +) + +var ErrorHandler_ErrorCode_name = map[int32]string{ + 0: "ERROR_CODE_UNSPECIFIED", + // Duplicate value: 0: "ERROR_CODE_DEFAULT", + 1: "ERROR_CODE_OVER_QUOTA", + 2: "ERROR_CODE_DOS_API_DENIAL", + 3: "ERROR_CODE_TIMEOUT", +} +var ErrorHandler_ErrorCode_value = map[string]int32{ + "ERROR_CODE_UNSPECIFIED": 0, + "ERROR_CODE_DEFAULT": 0, + "ERROR_CODE_OVER_QUOTA": 1, + "ERROR_CODE_DOS_API_DENIAL": 2, + "ERROR_CODE_TIMEOUT": 3, +} + +func (x ErrorHandler_ErrorCode) String() string { + return proto.EnumName(ErrorHandler_ErrorCode_name, int32(x)) +} +func (ErrorHandler_ErrorCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +// Redirect codes. +type UrlMap_RedirectHttpResponseCode int32 + +const ( + // Not specified. `302` is assumed. + UrlMap_REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED UrlMap_RedirectHttpResponseCode = 0 + // `301 Moved Permanently` code. + UrlMap_REDIRECT_HTTP_RESPONSE_CODE_301 UrlMap_RedirectHttpResponseCode = 1 + // `302 Moved Temporarily` code. + UrlMap_REDIRECT_HTTP_RESPONSE_CODE_302 UrlMap_RedirectHttpResponseCode = 2 + // `303 See Other` code. + UrlMap_REDIRECT_HTTP_RESPONSE_CODE_303 UrlMap_RedirectHttpResponseCode = 3 + // `307 Temporary Redirect` code. + UrlMap_REDIRECT_HTTP_RESPONSE_CODE_307 UrlMap_RedirectHttpResponseCode = 4 +) + +var UrlMap_RedirectHttpResponseCode_name = map[int32]string{ + 0: "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED", + 1: "REDIRECT_HTTP_RESPONSE_CODE_301", + 2: "REDIRECT_HTTP_RESPONSE_CODE_302", + 3: "REDIRECT_HTTP_RESPONSE_CODE_303", + 4: "REDIRECT_HTTP_RESPONSE_CODE_307", +} +var UrlMap_RedirectHttpResponseCode_value = map[string]int32{ + "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED": 0, + "REDIRECT_HTTP_RESPONSE_CODE_301": 1, + "REDIRECT_HTTP_RESPONSE_CODE_302": 2, + "REDIRECT_HTTP_RESPONSE_CODE_303": 3, + "REDIRECT_HTTP_RESPONSE_CODE_307": 4, +} + +func (x UrlMap_RedirectHttpResponseCode) String() string { + return proto.EnumName(UrlMap_RedirectHttpResponseCode_name, int32(x)) +} +func (UrlMap_RedirectHttpResponseCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{2, 0} +} + +// [Google Cloud Endpoints](https://cloud.google.com/appengine/docs/python/endpoints/) +// configuration for API handlers. +type ApiConfigHandler struct { + // Action to take when users access resources that require + // authentication. Defaults to `redirect`. + AuthFailAction AuthFailAction `protobuf:"varint,1,opt,name=auth_fail_action,json=authFailAction,enum=google.appengine.v1.AuthFailAction" json:"auth_fail_action,omitempty"` + // Level of login required to access this resource. Defaults to + // `optional`. + Login LoginRequirement `protobuf:"varint,2,opt,name=login,enum=google.appengine.v1.LoginRequirement" json:"login,omitempty"` + // Path to the script from the application root directory. + Script string `protobuf:"bytes,3,opt,name=script" json:"script,omitempty"` + // Security (HTTPS) enforcement for this URL. + SecurityLevel SecurityLevel `protobuf:"varint,4,opt,name=security_level,json=securityLevel,enum=google.appengine.v1.SecurityLevel" json:"security_level,omitempty"` + // URL to serve the endpoint at. + Url string `protobuf:"bytes,5,opt,name=url" json:"url,omitempty"` +} + +func (m *ApiConfigHandler) Reset() { *m = ApiConfigHandler{} } +func (m *ApiConfigHandler) String() string { return proto.CompactTextString(m) } +func (*ApiConfigHandler) ProtoMessage() {} +func (*ApiConfigHandler) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ApiConfigHandler) GetAuthFailAction() AuthFailAction { + if m != nil { + return m.AuthFailAction + } + return AuthFailAction_AUTH_FAIL_ACTION_UNSPECIFIED +} + +func (m *ApiConfigHandler) GetLogin() LoginRequirement { + if m != nil { + return m.Login + } + return LoginRequirement_LOGIN_UNSPECIFIED +} + +func (m *ApiConfigHandler) GetScript() string { + if m != nil { + return m.Script + } + return "" +} + +func (m *ApiConfigHandler) GetSecurityLevel() SecurityLevel { + if m != nil { + return m.SecurityLevel + } + return SecurityLevel_SECURE_UNSPECIFIED +} + +func (m *ApiConfigHandler) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +// Custom static error page to be served when an error occurs. +type ErrorHandler struct { + // Error condition this handler applies to. + ErrorCode ErrorHandler_ErrorCode `protobuf:"varint,1,opt,name=error_code,json=errorCode,enum=google.appengine.v1.ErrorHandler_ErrorCode" json:"error_code,omitempty"` + // Static file content to be served for this error. + StaticFile string `protobuf:"bytes,2,opt,name=static_file,json=staticFile" json:"static_file,omitempty"` + // MIME type of file. Defaults to `text/html`. + MimeType string `protobuf:"bytes,3,opt,name=mime_type,json=mimeType" json:"mime_type,omitempty"` +} + +func (m *ErrorHandler) Reset() { *m = ErrorHandler{} } +func (m *ErrorHandler) String() string { return proto.CompactTextString(m) } +func (*ErrorHandler) ProtoMessage() {} +func (*ErrorHandler) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ErrorHandler) GetErrorCode() ErrorHandler_ErrorCode { + if m != nil { + return m.ErrorCode + } + return ErrorHandler_ERROR_CODE_UNSPECIFIED +} + +func (m *ErrorHandler) GetStaticFile() string { + if m != nil { + return m.StaticFile + } + return "" +} + +func (m *ErrorHandler) GetMimeType() string { + if m != nil { + return m.MimeType + } + return "" +} + +// URL pattern and description of how the URL should be handled. App Engine can +// handle URLs by executing application code or by serving static files +// uploaded with the version, such as images, CSS, or JavaScript. +type UrlMap struct { + // URL prefix. Uses regular expression syntax, which means regexp + // special characters must be escaped, but should not contain groupings. + // All URLs that begin with this prefix are handled by this handler, using the + // portion of the URL after the prefix as part of the file path. + UrlRegex string `protobuf:"bytes,1,opt,name=url_regex,json=urlRegex" json:"url_regex,omitempty"` + // Type of handler for this URL pattern. + // + // Types that are valid to be assigned to HandlerType: + // *UrlMap_StaticFiles + // *UrlMap_Script + // *UrlMap_ApiEndpoint + HandlerType isUrlMap_HandlerType `protobuf_oneof:"handler_type"` + // Security (HTTPS) enforcement for this URL. + SecurityLevel SecurityLevel `protobuf:"varint,5,opt,name=security_level,json=securityLevel,enum=google.appengine.v1.SecurityLevel" json:"security_level,omitempty"` + // Level of login required to access this resource. + Login LoginRequirement `protobuf:"varint,6,opt,name=login,enum=google.appengine.v1.LoginRequirement" json:"login,omitempty"` + // Action to take when users access resources that require + // authentication. Defaults to `redirect`. + AuthFailAction AuthFailAction `protobuf:"varint,7,opt,name=auth_fail_action,json=authFailAction,enum=google.appengine.v1.AuthFailAction" json:"auth_fail_action,omitempty"` + // `30x` code to use when performing redirects for the `secure` field. + // Defaults to `302`. + RedirectHttpResponseCode UrlMap_RedirectHttpResponseCode `protobuf:"varint,8,opt,name=redirect_http_response_code,json=redirectHttpResponseCode,enum=google.appengine.v1.UrlMap_RedirectHttpResponseCode" json:"redirect_http_response_code,omitempty"` +} + +func (m *UrlMap) Reset() { *m = UrlMap{} } +func (m *UrlMap) String() string { return proto.CompactTextString(m) } +func (*UrlMap) ProtoMessage() {} +func (*UrlMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isUrlMap_HandlerType interface { + isUrlMap_HandlerType() +} + +type UrlMap_StaticFiles struct { + StaticFiles *StaticFilesHandler `protobuf:"bytes,2,opt,name=static_files,json=staticFiles,oneof"` +} +type UrlMap_Script struct { + Script *ScriptHandler `protobuf:"bytes,3,opt,name=script,oneof"` +} +type UrlMap_ApiEndpoint struct { + ApiEndpoint *ApiEndpointHandler `protobuf:"bytes,4,opt,name=api_endpoint,json=apiEndpoint,oneof"` +} + +func (*UrlMap_StaticFiles) isUrlMap_HandlerType() {} +func (*UrlMap_Script) isUrlMap_HandlerType() {} +func (*UrlMap_ApiEndpoint) isUrlMap_HandlerType() {} + +func (m *UrlMap) GetHandlerType() isUrlMap_HandlerType { + if m != nil { + return m.HandlerType + } + return nil +} + +func (m *UrlMap) GetUrlRegex() string { + if m != nil { + return m.UrlRegex + } + return "" +} + +func (m *UrlMap) GetStaticFiles() *StaticFilesHandler { + if x, ok := m.GetHandlerType().(*UrlMap_StaticFiles); ok { + return x.StaticFiles + } + return nil +} + +func (m *UrlMap) GetScript() *ScriptHandler { + if x, ok := m.GetHandlerType().(*UrlMap_Script); ok { + return x.Script + } + return nil +} + +func (m *UrlMap) GetApiEndpoint() *ApiEndpointHandler { + if x, ok := m.GetHandlerType().(*UrlMap_ApiEndpoint); ok { + return x.ApiEndpoint + } + return nil +} + +func (m *UrlMap) GetSecurityLevel() SecurityLevel { + if m != nil { + return m.SecurityLevel + } + return SecurityLevel_SECURE_UNSPECIFIED +} + +func (m *UrlMap) GetLogin() LoginRequirement { + if m != nil { + return m.Login + } + return LoginRequirement_LOGIN_UNSPECIFIED +} + +func (m *UrlMap) GetAuthFailAction() AuthFailAction { + if m != nil { + return m.AuthFailAction + } + return AuthFailAction_AUTH_FAIL_ACTION_UNSPECIFIED +} + +func (m *UrlMap) GetRedirectHttpResponseCode() UrlMap_RedirectHttpResponseCode { + if m != nil { + return m.RedirectHttpResponseCode + } + return UrlMap_REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*UrlMap) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _UrlMap_OneofMarshaler, _UrlMap_OneofUnmarshaler, _UrlMap_OneofSizer, []interface{}{ + (*UrlMap_StaticFiles)(nil), + (*UrlMap_Script)(nil), + (*UrlMap_ApiEndpoint)(nil), + } +} + +func _UrlMap_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*UrlMap) + // handler_type + switch x := m.HandlerType.(type) { + case *UrlMap_StaticFiles: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StaticFiles); err != nil { + return err + } + case *UrlMap_Script: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Script); err != nil { + return err + } + case *UrlMap_ApiEndpoint: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ApiEndpoint); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("UrlMap.HandlerType has unexpected type %T", x) + } + return nil +} + +func _UrlMap_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*UrlMap) + switch tag { + case 2: // handler_type.static_files + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StaticFilesHandler) + err := b.DecodeMessage(msg) + m.HandlerType = &UrlMap_StaticFiles{msg} + return true, err + case 3: // handler_type.script + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ScriptHandler) + err := b.DecodeMessage(msg) + m.HandlerType = &UrlMap_Script{msg} + return true, err + case 4: // handler_type.api_endpoint + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ApiEndpointHandler) + err := b.DecodeMessage(msg) + m.HandlerType = &UrlMap_ApiEndpoint{msg} + return true, err + default: + return false, nil + } +} + +func _UrlMap_OneofSizer(msg proto.Message) (n int) { + m := msg.(*UrlMap) + // handler_type + switch x := m.HandlerType.(type) { + case *UrlMap_StaticFiles: + s := proto.Size(x.StaticFiles) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *UrlMap_Script: + s := proto.Size(x.Script) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *UrlMap_ApiEndpoint: + s := proto.Size(x.ApiEndpoint) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Files served directly to the user for a given URL, such as images, CSS +// stylesheets, or JavaScript source files. Static file handlers describe which +// files in the application directory are static files, and which URLs serve +// them. +type StaticFilesHandler struct { + // Path to the static files matched by the URL pattern, from the + // application root directory. The path can refer to text matched in groupings + // in the URL pattern. + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + // Regular expression that matches the file paths for all files that should be + // referenced by this handler. + UploadPathRegex string `protobuf:"bytes,2,opt,name=upload_path_regex,json=uploadPathRegex" json:"upload_path_regex,omitempty"` + // HTTP headers to use for all responses from these URLs. + HttpHeaders map[string]string `protobuf:"bytes,3,rep,name=http_headers,json=httpHeaders" json:"http_headers,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // MIME type used to serve all files served by this handler. + // + // Defaults to file-specific MIME types, which are derived from each file's + // filename extension. + MimeType string `protobuf:"bytes,4,opt,name=mime_type,json=mimeType" json:"mime_type,omitempty"` + // Time a static file served by this handler should be cached + // by web proxies and browsers. + Expiration *google_protobuf1.Duration `protobuf:"bytes,5,opt,name=expiration" json:"expiration,omitempty"` + // Whether this handler should match the request if the file + // referenced by the handler does not exist. + RequireMatchingFile bool `protobuf:"varint,6,opt,name=require_matching_file,json=requireMatchingFile" json:"require_matching_file,omitempty"` + // Whether files should also be uploaded as code data. By default, files + // declared in static file handlers are uploaded as static + // data and are only served to end users; they cannot be read by the + // application. If enabled, uploads are charged against both your code and + // static data storage resource quotas. + ApplicationReadable bool `protobuf:"varint,7,opt,name=application_readable,json=applicationReadable" json:"application_readable,omitempty"` +} + +func (m *StaticFilesHandler) Reset() { *m = StaticFilesHandler{} } +func (m *StaticFilesHandler) String() string { return proto.CompactTextString(m) } +func (*StaticFilesHandler) ProtoMessage() {} +func (*StaticFilesHandler) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *StaticFilesHandler) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *StaticFilesHandler) GetUploadPathRegex() string { + if m != nil { + return m.UploadPathRegex + } + return "" +} + +func (m *StaticFilesHandler) GetHttpHeaders() map[string]string { + if m != nil { + return m.HttpHeaders + } + return nil +} + +func (m *StaticFilesHandler) GetMimeType() string { + if m != nil { + return m.MimeType + } + return "" +} + +func (m *StaticFilesHandler) GetExpiration() *google_protobuf1.Duration { + if m != nil { + return m.Expiration + } + return nil +} + +func (m *StaticFilesHandler) GetRequireMatchingFile() bool { + if m != nil { + return m.RequireMatchingFile + } + return false +} + +func (m *StaticFilesHandler) GetApplicationReadable() bool { + if m != nil { + return m.ApplicationReadable + } + return false +} + +// Executes a script to handle the request that matches the URL pattern. +type ScriptHandler struct { + // Path to the script from the application root directory. + ScriptPath string `protobuf:"bytes,1,opt,name=script_path,json=scriptPath" json:"script_path,omitempty"` +} + +func (m *ScriptHandler) Reset() { *m = ScriptHandler{} } +func (m *ScriptHandler) String() string { return proto.CompactTextString(m) } +func (*ScriptHandler) ProtoMessage() {} +func (*ScriptHandler) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ScriptHandler) GetScriptPath() string { + if m != nil { + return m.ScriptPath + } + return "" +} + +// Uses Google Cloud Endpoints to handle requests. +type ApiEndpointHandler struct { + // Path to the script from the application root directory. + ScriptPath string `protobuf:"bytes,1,opt,name=script_path,json=scriptPath" json:"script_path,omitempty"` +} + +func (m *ApiEndpointHandler) Reset() { *m = ApiEndpointHandler{} } +func (m *ApiEndpointHandler) String() string { return proto.CompactTextString(m) } +func (*ApiEndpointHandler) ProtoMessage() {} +func (*ApiEndpointHandler) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ApiEndpointHandler) GetScriptPath() string { + if m != nil { + return m.ScriptPath + } + return "" +} + +// Health checking configuration for VM instances. Unhealthy instances +// are killed and replaced with new instances. Only applicable for +// instances in App Engine flexible environment. +type HealthCheck struct { + // Whether to explicitly disable health checks for this instance. + DisableHealthCheck bool `protobuf:"varint,1,opt,name=disable_health_check,json=disableHealthCheck" json:"disable_health_check,omitempty"` + // Host header to send when performing an HTTP health check. + // Example: "myapp.appspot.com" + Host string `protobuf:"bytes,2,opt,name=host" json:"host,omitempty"` + // Number of consecutive successful health checks required before receiving + // traffic. + HealthyThreshold uint32 `protobuf:"varint,3,opt,name=healthy_threshold,json=healthyThreshold" json:"healthy_threshold,omitempty"` + // Number of consecutive failed health checks required before removing + // traffic. + UnhealthyThreshold uint32 `protobuf:"varint,4,opt,name=unhealthy_threshold,json=unhealthyThreshold" json:"unhealthy_threshold,omitempty"` + // Number of consecutive failed health checks required before an instance is + // restarted. + RestartThreshold uint32 `protobuf:"varint,5,opt,name=restart_threshold,json=restartThreshold" json:"restart_threshold,omitempty"` + // Interval between health checks. + CheckInterval *google_protobuf1.Duration `protobuf:"bytes,6,opt,name=check_interval,json=checkInterval" json:"check_interval,omitempty"` + // Time before the health check is considered failed. + Timeout *google_protobuf1.Duration `protobuf:"bytes,7,opt,name=timeout" json:"timeout,omitempty"` +} + +func (m *HealthCheck) Reset() { *m = HealthCheck{} } +func (m *HealthCheck) String() string { return proto.CompactTextString(m) } +func (*HealthCheck) ProtoMessage() {} +func (*HealthCheck) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *HealthCheck) GetDisableHealthCheck() bool { + if m != nil { + return m.DisableHealthCheck + } + return false +} + +func (m *HealthCheck) GetHost() string { + if m != nil { + return m.Host + } + return "" +} + +func (m *HealthCheck) GetHealthyThreshold() uint32 { + if m != nil { + return m.HealthyThreshold + } + return 0 +} + +func (m *HealthCheck) GetUnhealthyThreshold() uint32 { + if m != nil { + return m.UnhealthyThreshold + } + return 0 +} + +func (m *HealthCheck) GetRestartThreshold() uint32 { + if m != nil { + return m.RestartThreshold + } + return 0 +} + +func (m *HealthCheck) GetCheckInterval() *google_protobuf1.Duration { + if m != nil { + return m.CheckInterval + } + return nil +} + +func (m *HealthCheck) GetTimeout() *google_protobuf1.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +// Third-party Python runtime library that is required by the application. +type Library struct { + // Name of the library. Example: "django". + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Version of the library to select, or "latest". + Version string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` +} + +func (m *Library) Reset() { *m = Library{} } +func (m *Library) String() string { return proto.CompactTextString(m) } +func (*Library) ProtoMessage() {} +func (*Library) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *Library) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Library) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func init() { + proto.RegisterType((*ApiConfigHandler)(nil), "google.appengine.v1.ApiConfigHandler") + proto.RegisterType((*ErrorHandler)(nil), "google.appengine.v1.ErrorHandler") + proto.RegisterType((*UrlMap)(nil), "google.appengine.v1.UrlMap") + proto.RegisterType((*StaticFilesHandler)(nil), "google.appengine.v1.StaticFilesHandler") + proto.RegisterType((*ScriptHandler)(nil), "google.appengine.v1.ScriptHandler") + proto.RegisterType((*ApiEndpointHandler)(nil), "google.appengine.v1.ApiEndpointHandler") + proto.RegisterType((*HealthCheck)(nil), "google.appengine.v1.HealthCheck") + proto.RegisterType((*Library)(nil), "google.appengine.v1.Library") + proto.RegisterEnum("google.appengine.v1.AuthFailAction", AuthFailAction_name, AuthFailAction_value) + proto.RegisterEnum("google.appengine.v1.LoginRequirement", LoginRequirement_name, LoginRequirement_value) + proto.RegisterEnum("google.appengine.v1.SecurityLevel", SecurityLevel_name, SecurityLevel_value) + proto.RegisterEnum("google.appengine.v1.ErrorHandler_ErrorCode", ErrorHandler_ErrorCode_name, ErrorHandler_ErrorCode_value) + proto.RegisterEnum("google.appengine.v1.UrlMap_RedirectHttpResponseCode", UrlMap_RedirectHttpResponseCode_name, UrlMap_RedirectHttpResponseCode_value) +} + +func init() { proto.RegisterFile("google/appengine/v1/app_yaml.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1232 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xdd, 0x6e, 0x13, 0x47, + 0x14, 0xc6, 0x76, 0x7e, 0x8f, 0x1d, 0xb3, 0x99, 0x00, 0x75, 0x02, 0x94, 0xd4, 0xa8, 0x02, 0x25, + 0x92, 0x4d, 0x92, 0x56, 0xd0, 0x82, 0xaa, 0x2e, 0xf6, 0xa6, 0xde, 0xca, 0x89, 0xcd, 0xd8, 0xa6, + 0x82, 0x5e, 0x8c, 0x26, 0xf6, 0xc4, 0x3b, 0x62, 0xbd, 0xbb, 0x9d, 0x1d, 0x47, 0xf8, 0x39, 0xaa, + 0xbe, 0x07, 0xb7, 0x7d, 0x90, 0x5e, 0xf5, 0x65, 0xaa, 0x99, 0x1d, 0xff, 0x25, 0x0e, 0xa9, 0xb8, + 0x9b, 0x73, 0xce, 0xf7, 0x9d, 0x9d, 0xf3, 0x3b, 0x0b, 0xc5, 0x7e, 0x18, 0xf6, 0x7d, 0x56, 0xa6, + 0x51, 0xc4, 0x82, 0x3e, 0x0f, 0x58, 0xf9, 0xe2, 0x40, 0x09, 0x64, 0x44, 0x07, 0x7e, 0x29, 0x12, + 0xa1, 0x0c, 0xd1, 0x56, 0x82, 0x29, 0x4d, 0x30, 0xa5, 0x8b, 0x83, 0x9d, 0x07, 0x13, 0x22, 0x2f, + 0xd3, 0x20, 0x08, 0x25, 0x95, 0x3c, 0x0c, 0xe2, 0x84, 0xb2, 0xf3, 0xb5, 0xb1, 0x6a, 0xe9, 0x6c, + 0x78, 0x5e, 0xee, 0x0d, 0x85, 0x06, 0x24, 0xf6, 0xe2, 0x9f, 0x69, 0xb0, 0xec, 0x88, 0x57, 0xc2, + 0xe0, 0x9c, 0xf7, 0x6b, 0x34, 0xe8, 0xf9, 0x4c, 0xa0, 0x13, 0xb0, 0xe8, 0x50, 0x7a, 0xe4, 0x9c, + 0x72, 0x9f, 0xd0, 0xae, 0x82, 0x17, 0x52, 0xbb, 0xa9, 0xa7, 0xf9, 0xc3, 0xc7, 0xa5, 0x05, 0x57, + 0x28, 0xd9, 0x43, 0xe9, 0x1d, 0x53, 0xee, 0xdb, 0x1a, 0x8a, 0xf3, 0x74, 0x4e, 0x46, 0x2f, 0x61, + 0xd9, 0x0f, 0xfb, 0x3c, 0x28, 0xa4, 0xb5, 0x8f, 0x6f, 0x17, 0xfa, 0xa8, 0x2b, 0x04, 0x66, 0x7f, + 0x0c, 0xb9, 0x60, 0x03, 0x16, 0x48, 0x9c, 0x70, 0xd0, 0x3d, 0x58, 0x89, 0xbb, 0x82, 0x47, 0xb2, + 0x90, 0xd9, 0x4d, 0x3d, 0x5d, 0xc7, 0x46, 0x42, 0x2e, 0xe4, 0x63, 0xd6, 0x1d, 0x0a, 0x2e, 0x47, + 0xc4, 0x67, 0x17, 0xcc, 0x2f, 0x2c, 0x69, 0xef, 0xc5, 0x85, 0xde, 0x5b, 0x06, 0x5a, 0x57, 0x48, + 0xbc, 0x11, 0xcf, 0x8a, 0xc8, 0x82, 0xcc, 0x50, 0xf8, 0x85, 0x65, 0xed, 0x5f, 0x1d, 0x8b, 0x9f, + 0xd2, 0x90, 0x73, 0x84, 0x08, 0xc5, 0x38, 0x23, 0xbf, 0x02, 0x30, 0x25, 0x93, 0x6e, 0xd8, 0x63, + 0x26, 0x17, 0xfb, 0x0b, 0xbf, 0x34, 0x4b, 0x4b, 0x84, 0x4a, 0xd8, 0x63, 0x78, 0x9d, 0x8d, 0x8f, + 0xe8, 0x11, 0x64, 0x63, 0x55, 0xa4, 0x2e, 0x39, 0xe7, 0x3e, 0xd3, 0x49, 0x59, 0xc7, 0x90, 0xa8, + 0x8e, 0xb9, 0xcf, 0xd0, 0x7d, 0x58, 0x1f, 0xf0, 0x01, 0x23, 0x72, 0x14, 0x31, 0x13, 0xf5, 0x9a, + 0x52, 0xb4, 0x47, 0x11, 0x2b, 0xfe, 0x95, 0x82, 0xf5, 0x89, 0x5b, 0xb4, 0x03, 0xf7, 0x1c, 0x8c, + 0x1b, 0x98, 0x54, 0x1a, 0x55, 0x87, 0x74, 0x4e, 0x5b, 0x4d, 0xa7, 0xe2, 0x1e, 0xbb, 0x4e, 0xd5, + 0xba, 0x85, 0xee, 0x01, 0x9a, 0xb1, 0x55, 0x9d, 0x63, 0xbb, 0x53, 0x6f, 0x5b, 0xb7, 0xd0, 0x36, + 0xdc, 0x9d, 0xd1, 0x37, 0xde, 0x3a, 0x98, 0xbc, 0xe9, 0x34, 0xda, 0xb6, 0x95, 0x42, 0x0f, 0x61, + 0x7b, 0x96, 0xd2, 0x68, 0x11, 0xbb, 0xe9, 0x92, 0xaa, 0x73, 0xea, 0xda, 0x75, 0x2b, 0x7d, 0xc9, + 0x63, 0xdb, 0x3d, 0x71, 0x1a, 0x9d, 0xb6, 0x95, 0xd9, 0x49, 0x5b, 0xa9, 0xe2, 0xdf, 0x2b, 0xb0, + 0xd2, 0x11, 0xfe, 0x09, 0x8d, 0xd4, 0xfd, 0x87, 0xc2, 0x27, 0x82, 0xf5, 0xd9, 0x47, 0x9d, 0xab, + 0x75, 0xbc, 0x36, 0x14, 0x3e, 0x56, 0x32, 0xaa, 0x43, 0x6e, 0x26, 0xfa, 0x58, 0x87, 0x9f, 0x3d, + 0x7c, 0xb2, 0xb8, 0x6a, 0x93, 0x9c, 0xc4, 0x26, 0xa3, 0xb5, 0x5b, 0x38, 0x3b, 0xcd, 0x54, 0x8c, + 0x5e, 0xcd, 0x75, 0x47, 0xf6, 0xba, 0xea, 0x6b, 0xc8, 0xd4, 0xc5, 0xb8, 0x87, 0xea, 0x90, 0xa3, + 0x11, 0x27, 0x2c, 0xe8, 0x45, 0x21, 0x0f, 0xa4, 0xee, 0xa0, 0xeb, 0xee, 0x62, 0x47, 0xdc, 0x31, + 0xb8, 0x99, 0xbb, 0xd0, 0xa9, 0x76, 0x41, 0x47, 0x2e, 0x7f, 0x69, 0x47, 0x4e, 0x26, 0x66, 0xe5, + 0x0b, 0x26, 0x66, 0xd1, 0xf4, 0xae, 0x7e, 0xf9, 0xf4, 0xc6, 0x70, 0x5f, 0xb0, 0x1e, 0x17, 0xac, + 0x2b, 0x89, 0x27, 0x65, 0x44, 0x04, 0x8b, 0xa3, 0x30, 0x88, 0x59, 0x32, 0x0b, 0x6b, 0xda, 0xf3, + 0x77, 0x0b, 0x3d, 0x27, 0xfd, 0x50, 0xc2, 0x86, 0x5e, 0x93, 0x32, 0xc2, 0x86, 0xac, 0x87, 0xa2, + 0x20, 0xae, 0xb1, 0x14, 0xff, 0x4d, 0x41, 0xe1, 0x3a, 0x1a, 0xda, 0x87, 0x27, 0xd8, 0xa9, 0xba, + 0xd8, 0xa9, 0xb4, 0x49, 0xad, 0xdd, 0x6e, 0x12, 0xec, 0xb4, 0x9a, 0x8d, 0xd3, 0x96, 0xb3, 0x68, + 0x0a, 0x1e, 0xc3, 0xa3, 0xcf, 0x81, 0x8f, 0x9e, 0x1d, 0x58, 0xa9, 0x9b, 0x41, 0x87, 0x56, 0xfa, + 0x66, 0xd0, 0x91, 0x95, 0xb9, 0x19, 0xf4, 0xdc, 0x5a, 0x7a, 0x9d, 0x87, 0x9c, 0x97, 0xf4, 0x90, + 0x9e, 0xf1, 0xe2, 0xa7, 0x0c, 0xa0, 0xab, 0xbd, 0x8e, 0x10, 0x2c, 0x45, 0x54, 0x7a, 0x66, 0x84, + 0xf4, 0x19, 0xed, 0xc1, 0xe6, 0x30, 0xf2, 0x43, 0xda, 0x23, 0x4a, 0x34, 0x33, 0x96, 0xac, 0x90, + 0xdb, 0x89, 0xa1, 0x49, 0xa5, 0x97, 0x8c, 0xda, 0xef, 0x90, 0xd3, 0x05, 0xf3, 0x18, 0xed, 0x31, + 0x11, 0x17, 0x32, 0xbb, 0x99, 0xa7, 0xd9, 0xc3, 0x17, 0xff, 0x73, 0xd4, 0x4a, 0x2a, 0xef, 0xb5, + 0x84, 0xea, 0x04, 0x52, 0x8c, 0x70, 0xd6, 0x9b, 0x6a, 0xe6, 0x97, 0xd4, 0xd2, 0xfc, 0x92, 0x42, + 0x3f, 0x00, 0xb0, 0x8f, 0x11, 0x4f, 0x5e, 0x1a, 0x3d, 0x06, 0xd9, 0xc3, 0xed, 0xf1, 0x77, 0xc7, + 0x4f, 0x51, 0xa9, 0x6a, 0x9e, 0x22, 0x3c, 0x03, 0x46, 0x87, 0x70, 0x57, 0x24, 0x3d, 0x4d, 0x06, + 0x54, 0x76, 0x3d, 0x1e, 0xf4, 0x93, 0x3d, 0xa9, 0x46, 0x61, 0x0d, 0x6f, 0x19, 0xe3, 0x89, 0xb1, + 0xe9, 0x85, 0x79, 0x00, 0x77, 0x68, 0x14, 0xf9, 0xbc, 0xab, 0x5d, 0x10, 0xc1, 0x68, 0x8f, 0x9e, + 0xf9, 0x4c, 0x77, 0xfd, 0x1a, 0xde, 0x9a, 0xb1, 0x61, 0x63, 0xda, 0xf9, 0x09, 0xac, 0xcb, 0xf1, + 0xa9, 0x77, 0xe0, 0x03, 0x1b, 0x99, 0x74, 0xab, 0x23, 0xba, 0x03, 0xcb, 0x17, 0xd4, 0x1f, 0x8e, + 0x97, 0x74, 0x22, 0xfc, 0x98, 0x7e, 0x91, 0x2a, 0x3e, 0x83, 0x8d, 0xb9, 0xad, 0xa2, 0xb7, 0xba, + 0x56, 0x90, 0x99, 0x9a, 0x41, 0xa2, 0x52, 0x25, 0x29, 0x7e, 0x0f, 0xe8, 0xea, 0x0e, 0xb9, 0x99, + 0xf6, 0x4f, 0x1a, 0xb2, 0x35, 0x46, 0x7d, 0xe9, 0x55, 0x3c, 0xd6, 0xfd, 0x80, 0x9e, 0xc1, 0x9d, + 0x1e, 0x8f, 0x55, 0x0c, 0xaa, 0xae, 0xbe, 0xf4, 0x48, 0x57, 0xe9, 0x35, 0x73, 0x0d, 0x23, 0x63, + 0x9b, 0x65, 0x20, 0x58, 0xf2, 0xc2, 0x58, 0x9a, 0x18, 0xf4, 0x19, 0xed, 0xc3, 0x66, 0xc2, 0x1e, + 0x11, 0xe9, 0x09, 0x16, 0x7b, 0xa1, 0xdf, 0xd3, 0x2b, 0x74, 0x03, 0x5b, 0xc6, 0xd0, 0x1e, 0xeb, + 0x51, 0x19, 0xb6, 0x86, 0xc1, 0x55, 0xf8, 0x92, 0x86, 0xa3, 0x89, 0x69, 0x4a, 0xd8, 0x87, 0x4d, + 0xc1, 0x62, 0x49, 0x85, 0x9c, 0x81, 0x2f, 0x27, 0xde, 0x8d, 0x61, 0x0a, 0xfe, 0x19, 0xf2, 0x3a, + 0x02, 0xc2, 0x03, 0xc9, 0xc4, 0x05, 0xf5, 0x75, 0xa5, 0x3f, 0xdb, 0x2f, 0x1b, 0x9a, 0xe0, 0x1a, + 0x3c, 0x3a, 0x82, 0x55, 0xc9, 0x07, 0x2c, 0x1c, 0x4a, 0x5d, 0xf1, 0xcf, 0x52, 0xc7, 0xc8, 0xe2, + 0x73, 0x58, 0xad, 0xf3, 0x33, 0x41, 0xc5, 0x48, 0x25, 0x28, 0xa0, 0x03, 0x36, 0x9e, 0x33, 0x75, + 0x46, 0x05, 0x58, 0xbd, 0x60, 0x22, 0x56, 0xed, 0x9b, 0xe4, 0x6d, 0x2c, 0xee, 0x49, 0xc8, 0xcf, + 0x6f, 0x4c, 0xb4, 0x0b, 0x0f, 0xec, 0x4e, 0xbb, 0x46, 0x8e, 0x6d, 0xb7, 0x4e, 0xec, 0x4a, 0xdb, + 0x6d, 0x9c, 0x5e, 0x5a, 0x42, 0x0f, 0x61, 0xfb, 0x0a, 0x62, 0xbc, 0x26, 0xac, 0x14, 0xfa, 0x06, + 0x1e, 0x2e, 0x70, 0xa0, 0x54, 0x0d, 0xec, 0xbe, 0x77, 0xaa, 0x56, 0x7a, 0xef, 0x0c, 0xac, 0xcb, + 0xfb, 0x1e, 0xdd, 0x85, 0xcd, 0x7a, 0xe3, 0x17, 0xf7, 0xf2, 0xc7, 0x10, 0xe4, 0x13, 0x75, 0xa3, + 0xa9, 0x3c, 0xd9, 0x75, 0x2b, 0x85, 0x6e, 0x43, 0x36, 0xd1, 0xd9, 0xd5, 0x13, 0xf7, 0xd4, 0x4a, + 0x4f, 0x41, 0xd8, 0x79, 0xd3, 0x71, 0xb1, 0x53, 0xb5, 0x32, 0x7b, 0x23, 0xd8, 0x98, 0x7b, 0x95, + 0xd4, 0x7b, 0xdf, 0x72, 0x2a, 0x1d, 0xec, 0x5c, 0xfd, 0x82, 0xd1, 0x4f, 0xff, 0x2a, 0x2c, 0xc8, + 0x19, 0xdd, 0xa9, 0xf3, 0xd6, 0xc1, 0x56, 0x0a, 0x6d, 0xc1, 0x6d, 0xa3, 0x99, 0x5c, 0x24, 0x8d, + 0x36, 0x61, 0xc3, 0x28, 0xed, 0xfa, 0x6f, 0xf6, 0xbb, 0x56, 0xf2, 0xf7, 0xf0, 0xba, 0x0f, 0x5f, + 0x75, 0xc3, 0xc1, 0xa2, 0xcd, 0xf4, 0x3a, 0x67, 0x47, 0xd1, 0x3b, 0x3a, 0xf0, 0x9b, 0xaa, 0x96, + 0xcd, 0xd4, 0xfb, 0x57, 0x06, 0xd4, 0x0f, 0x7d, 0x1a, 0xf4, 0x4b, 0xa1, 0xe8, 0x97, 0xfb, 0x2c, + 0xd0, 0x95, 0x2e, 0x27, 0x26, 0x1a, 0xf1, 0x78, 0xee, 0x3f, 0xfa, 0xe5, 0x44, 0x38, 0x5b, 0xd1, + 0xc0, 0xa3, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x96, 0x5d, 0x26, 0x6c, 0x6f, 0x0b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/appengine.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/appengine.pb.go new file mode 100644 index 0000000..24d32d8 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/appengine.pb.go @@ -0,0 +1,1360 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/appengine.proto +// DO NOT EDIT! + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/iam/v1" +import _ "google.golang.org/genproto/googleapis/iam/v1" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/empty" +import google_protobuf5 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Fields that should be returned when [Version][google.appengine.v1.Version] resources +// are retreived. +type VersionView int32 + +const ( + // Basic version information including scaling and inbound services, + // but not detailed deployment information. + VersionView_BASIC VersionView = 0 + // The information from `BASIC`, plus detailed information about the + // deployment. This format is required when creating resources, but + // is not returned in `Get` or `List` by default. + VersionView_FULL VersionView = 1 +) + +var VersionView_name = map[int32]string{ + 0: "BASIC", + 1: "FULL", +} +var VersionView_value = map[string]int32{ + "BASIC": 0, + "FULL": 1, +} + +func (x VersionView) String() string { + return proto.EnumName(VersionView_name, int32(x)) +} +func (VersionView) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Request message for `Applications.GetApplication`. +type GetApplicationRequest struct { + // Name of the Application resource to get. Example: `apps/myapp`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetApplicationRequest) Reset() { *m = GetApplicationRequest{} } +func (m *GetApplicationRequest) String() string { return proto.CompactTextString(m) } +func (*GetApplicationRequest) ProtoMessage() {} +func (*GetApplicationRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *GetApplicationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for 'Applications.RepairApplication'. +type RepairApplicationRequest struct { + // Name of the application to repair. Example: `apps/myapp` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *RepairApplicationRequest) Reset() { *m = RepairApplicationRequest{} } +func (m *RepairApplicationRequest) String() string { return proto.CompactTextString(m) } +func (*RepairApplicationRequest) ProtoMessage() {} +func (*RepairApplicationRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *RepairApplicationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `Services.ListServices`. +type ListServicesRequest struct { + // Name of the parent Application resource. Example: `apps/myapp`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Maximum results to return per page. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Continuation token for fetching the next page of results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListServicesRequest) Reset() { *m = ListServicesRequest{} } +func (m *ListServicesRequest) String() string { return proto.CompactTextString(m) } +func (*ListServicesRequest) ProtoMessage() {} +func (*ListServicesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ListServicesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListServicesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListServicesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for `Services.ListServices`. +type ListServicesResponse struct { + // The services belonging to the requested application. + Services []*Service `protobuf:"bytes,1,rep,name=services" json:"services,omitempty"` + // Continuation token for fetching the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListServicesResponse) Reset() { *m = ListServicesResponse{} } +func (m *ListServicesResponse) String() string { return proto.CompactTextString(m) } +func (*ListServicesResponse) ProtoMessage() {} +func (*ListServicesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *ListServicesResponse) GetServices() []*Service { + if m != nil { + return m.Services + } + return nil +} + +func (m *ListServicesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for `Services.GetService`. +type GetServiceRequest struct { + // Name of the resource requested. Example: `apps/myapp/services/default`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetServiceRequest) Reset() { *m = GetServiceRequest{} } +func (m *GetServiceRequest) String() string { return proto.CompactTextString(m) } +func (*GetServiceRequest) ProtoMessage() {} +func (*GetServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *GetServiceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `Services.UpdateService`. +type UpdateServiceRequest struct { + // Name of the resource to update. Example: `apps/myapp/services/default`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A Service resource containing the updated service. Only fields set in the + // field mask will be updated. + Service *Service `protobuf:"bytes,2,opt,name=service" json:"service,omitempty"` + // Standard field mask for the set of fields to be updated. + UpdateMask *google_protobuf5.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // Set to `true` to gradually shift traffic from one version to another + // single version. By default, traffic is shifted immediately. + // For gradual traffic migration, the target version + // must be located within instances that are configured for both + // [warmup requests](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#inboundservicetype) + // and + // [automatic scaling](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#automaticscaling). + // You must specify the + // [`shardBy`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services#shardby) + // field in the Service resource. Gradual traffic migration is not + // supported in the App Engine flexible environment. For examples, see + // [Migrating and Splitting Traffic](https://cloud.google.com/appengine/docs/admin-api/migrating-splitting-traffic). + MigrateTraffic bool `protobuf:"varint,4,opt,name=migrate_traffic,json=migrateTraffic" json:"migrate_traffic,omitempty"` +} + +func (m *UpdateServiceRequest) Reset() { *m = UpdateServiceRequest{} } +func (m *UpdateServiceRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateServiceRequest) ProtoMessage() {} +func (*UpdateServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *UpdateServiceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateServiceRequest) GetService() *Service { + if m != nil { + return m.Service + } + return nil +} + +func (m *UpdateServiceRequest) GetUpdateMask() *google_protobuf5.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *UpdateServiceRequest) GetMigrateTraffic() bool { + if m != nil { + return m.MigrateTraffic + } + return false +} + +// Request message for `Services.DeleteService`. +type DeleteServiceRequest struct { + // Name of the resource requested. Example: `apps/myapp/services/default`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteServiceRequest) Reset() { *m = DeleteServiceRequest{} } +func (m *DeleteServiceRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteServiceRequest) ProtoMessage() {} +func (*DeleteServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *DeleteServiceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `Versions.ListVersions`. +type ListVersionsRequest struct { + // Name of the parent Service resource. Example: + // `apps/myapp/services/default`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Controls the set of fields returned in the `List` response. + View VersionView `protobuf:"varint,2,opt,name=view,enum=google.appengine.v1.VersionView" json:"view,omitempty"` + // Maximum results to return per page. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Continuation token for fetching the next page of results. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListVersionsRequest) Reset() { *m = ListVersionsRequest{} } +func (m *ListVersionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListVersionsRequest) ProtoMessage() {} +func (*ListVersionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *ListVersionsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListVersionsRequest) GetView() VersionView { + if m != nil { + return m.View + } + return VersionView_BASIC +} + +func (m *ListVersionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListVersionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for `Versions.ListVersions`. +type ListVersionsResponse struct { + // The versions belonging to the requested service. + Versions []*Version `protobuf:"bytes,1,rep,name=versions" json:"versions,omitempty"` + // Continuation token for fetching the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListVersionsResponse) Reset() { *m = ListVersionsResponse{} } +func (m *ListVersionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListVersionsResponse) ProtoMessage() {} +func (*ListVersionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *ListVersionsResponse) GetVersions() []*Version { + if m != nil { + return m.Versions + } + return nil +} + +func (m *ListVersionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for `Versions.GetVersion`. +type GetVersionRequest struct { + // Name of the resource requested. Example: + // `apps/myapp/services/default/versions/v1`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Controls the set of fields returned in the `Get` response. + View VersionView `protobuf:"varint,2,opt,name=view,enum=google.appengine.v1.VersionView" json:"view,omitempty"` +} + +func (m *GetVersionRequest) Reset() { *m = GetVersionRequest{} } +func (m *GetVersionRequest) String() string { return proto.CompactTextString(m) } +func (*GetVersionRequest) ProtoMessage() {} +func (*GetVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *GetVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetVersionRequest) GetView() VersionView { + if m != nil { + return m.View + } + return VersionView_BASIC +} + +// Request message for `Versions.CreateVersion`. +type CreateVersionRequest struct { + // Name of the parent resource to create this version under. Example: + // `apps/myapp/services/default`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Application deployment configuration. + Version *Version `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` +} + +func (m *CreateVersionRequest) Reset() { *m = CreateVersionRequest{} } +func (m *CreateVersionRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVersionRequest) ProtoMessage() {} +func (*CreateVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *CreateVersionRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateVersionRequest) GetVersion() *Version { + if m != nil { + return m.Version + } + return nil +} + +// Request message for `Versions.UpdateVersion`. +type UpdateVersionRequest struct { + // Name of the resource to update. Example: + // `apps/myapp/services/default/versions/1`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A Version containing the updated resource. Only fields set in the field + // mask will be updated. + Version *Version `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` + // Standard field mask for the set of fields to be updated. + UpdateMask *google_protobuf5.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateVersionRequest) Reset() { *m = UpdateVersionRequest{} } +func (m *UpdateVersionRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateVersionRequest) ProtoMessage() {} +func (*UpdateVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *UpdateVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateVersionRequest) GetVersion() *Version { + if m != nil { + return m.Version + } + return nil +} + +func (m *UpdateVersionRequest) GetUpdateMask() *google_protobuf5.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request message for `Versions.DeleteVersion`. +type DeleteVersionRequest struct { + // Name of the resource requested. Example: + // `apps/myapp/services/default/versions/v1`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteVersionRequest) Reset() { *m = DeleteVersionRequest{} } +func (m *DeleteVersionRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVersionRequest) ProtoMessage() {} +func (*DeleteVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *DeleteVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `Instances.ListInstances`. +type ListInstancesRequest struct { + // Name of the parent Version resource. Example: + // `apps/myapp/services/default/versions/v1`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Maximum results to return per page. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Continuation token for fetching the next page of results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListInstancesRequest) Reset() { *m = ListInstancesRequest{} } +func (m *ListInstancesRequest) String() string { return proto.CompactTextString(m) } +func (*ListInstancesRequest) ProtoMessage() {} +func (*ListInstancesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *ListInstancesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListInstancesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListInstancesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for `Instances.ListInstances`. +type ListInstancesResponse struct { + // The instances belonging to the requested version. + Instances []*Instance `protobuf:"bytes,1,rep,name=instances" json:"instances,omitempty"` + // Continuation token for fetching the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListInstancesResponse) Reset() { *m = ListInstancesResponse{} } +func (m *ListInstancesResponse) String() string { return proto.CompactTextString(m) } +func (*ListInstancesResponse) ProtoMessage() {} +func (*ListInstancesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *ListInstancesResponse) GetInstances() []*Instance { + if m != nil { + return m.Instances + } + return nil +} + +func (m *ListInstancesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for `Instances.GetInstance`. +type GetInstanceRequest struct { + // Name of the resource requested. Example: + // `apps/myapp/services/default/versions/v1/instances/instance-1`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetInstanceRequest) Reset() { *m = GetInstanceRequest{} } +func (m *GetInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*GetInstanceRequest) ProtoMessage() {} +func (*GetInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *GetInstanceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `Instances.DeleteInstance`. +type DeleteInstanceRequest struct { + // Name of the resource requested. Example: + // `apps/myapp/services/default/versions/v1/instances/instance-1`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteInstanceRequest) Reset() { *m = DeleteInstanceRequest{} } +func (m *DeleteInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteInstanceRequest) ProtoMessage() {} +func (*DeleteInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *DeleteInstanceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `Instances.DebugInstance`. +type DebugInstanceRequest struct { + // Name of the resource requested. Example: + // `apps/myapp/services/default/versions/v1/instances/instance-1`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DebugInstanceRequest) Reset() { *m = DebugInstanceRequest{} } +func (m *DebugInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*DebugInstanceRequest) ProtoMessage() {} +func (*DebugInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *DebugInstanceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*GetApplicationRequest)(nil), "google.appengine.v1.GetApplicationRequest") + proto.RegisterType((*RepairApplicationRequest)(nil), "google.appengine.v1.RepairApplicationRequest") + proto.RegisterType((*ListServicesRequest)(nil), "google.appengine.v1.ListServicesRequest") + proto.RegisterType((*ListServicesResponse)(nil), "google.appengine.v1.ListServicesResponse") + proto.RegisterType((*GetServiceRequest)(nil), "google.appengine.v1.GetServiceRequest") + proto.RegisterType((*UpdateServiceRequest)(nil), "google.appengine.v1.UpdateServiceRequest") + proto.RegisterType((*DeleteServiceRequest)(nil), "google.appengine.v1.DeleteServiceRequest") + proto.RegisterType((*ListVersionsRequest)(nil), "google.appengine.v1.ListVersionsRequest") + proto.RegisterType((*ListVersionsResponse)(nil), "google.appengine.v1.ListVersionsResponse") + proto.RegisterType((*GetVersionRequest)(nil), "google.appengine.v1.GetVersionRequest") + proto.RegisterType((*CreateVersionRequest)(nil), "google.appengine.v1.CreateVersionRequest") + proto.RegisterType((*UpdateVersionRequest)(nil), "google.appengine.v1.UpdateVersionRequest") + proto.RegisterType((*DeleteVersionRequest)(nil), "google.appengine.v1.DeleteVersionRequest") + proto.RegisterType((*ListInstancesRequest)(nil), "google.appengine.v1.ListInstancesRequest") + proto.RegisterType((*ListInstancesResponse)(nil), "google.appengine.v1.ListInstancesResponse") + proto.RegisterType((*GetInstanceRequest)(nil), "google.appengine.v1.GetInstanceRequest") + proto.RegisterType((*DeleteInstanceRequest)(nil), "google.appengine.v1.DeleteInstanceRequest") + proto.RegisterType((*DebugInstanceRequest)(nil), "google.appengine.v1.DebugInstanceRequest") + proto.RegisterEnum("google.appengine.v1.VersionView", VersionView_name, VersionView_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Instances service + +type InstancesClient interface { + // Lists the instances of a version. + ListInstances(ctx context.Context, in *ListInstancesRequest, opts ...grpc.CallOption) (*ListInstancesResponse, error) + // Gets instance information. + GetInstance(ctx context.Context, in *GetInstanceRequest, opts ...grpc.CallOption) (*Instance, error) + // Stops a running instance. + DeleteInstance(ctx context.Context, in *DeleteInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Enables debugging on a VM instance. This allows you to use the SSH + // command to connect to the virtual machine where the instance lives. + // While in "debug mode", the instance continues to serve live traffic. + // You should delete the instance when you are done debugging and then + // allow the system to take over and determine if another instance + // should be started. + // + // Only applicable for instances in App Engine flexible environment. + DebugInstance(ctx context.Context, in *DebugInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type instancesClient struct { + cc *grpc.ClientConn +} + +func NewInstancesClient(cc *grpc.ClientConn) InstancesClient { + return &instancesClient{cc} +} + +func (c *instancesClient) ListInstances(ctx context.Context, in *ListInstancesRequest, opts ...grpc.CallOption) (*ListInstancesResponse, error) { + out := new(ListInstancesResponse) + err := grpc.Invoke(ctx, "/google.appengine.v1.Instances/ListInstances", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instancesClient) GetInstance(ctx context.Context, in *GetInstanceRequest, opts ...grpc.CallOption) (*Instance, error) { + out := new(Instance) + err := grpc.Invoke(ctx, "/google.appengine.v1.Instances/GetInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instancesClient) DeleteInstance(ctx context.Context, in *DeleteInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.appengine.v1.Instances/DeleteInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instancesClient) DebugInstance(ctx context.Context, in *DebugInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.appengine.v1.Instances/DebugInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Instances service + +type InstancesServer interface { + // Lists the instances of a version. + ListInstances(context.Context, *ListInstancesRequest) (*ListInstancesResponse, error) + // Gets instance information. + GetInstance(context.Context, *GetInstanceRequest) (*Instance, error) + // Stops a running instance. + DeleteInstance(context.Context, *DeleteInstanceRequest) (*google_longrunning.Operation, error) + // Enables debugging on a VM instance. This allows you to use the SSH + // command to connect to the virtual machine where the instance lives. + // While in "debug mode", the instance continues to serve live traffic. + // You should delete the instance when you are done debugging and then + // allow the system to take over and determine if another instance + // should be started. + // + // Only applicable for instances in App Engine flexible environment. + DebugInstance(context.Context, *DebugInstanceRequest) (*google_longrunning.Operation, error) +} + +func RegisterInstancesServer(s *grpc.Server, srv InstancesServer) { + s.RegisterService(&_Instances_serviceDesc, srv) +} + +func _Instances_ListInstances_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInstancesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstancesServer).ListInstances(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Instances/ListInstances", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstancesServer).ListInstances(ctx, req.(*ListInstancesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Instances_GetInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstancesServer).GetInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Instances/GetInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstancesServer).GetInstance(ctx, req.(*GetInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Instances_DeleteInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstancesServer).DeleteInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Instances/DeleteInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstancesServer).DeleteInstance(ctx, req.(*DeleteInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Instances_DebugInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DebugInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstancesServer).DebugInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Instances/DebugInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstancesServer).DebugInstance(ctx, req.(*DebugInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Instances_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.appengine.v1.Instances", + HandlerType: (*InstancesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListInstances", + Handler: _Instances_ListInstances_Handler, + }, + { + MethodName: "GetInstance", + Handler: _Instances_GetInstance_Handler, + }, + { + MethodName: "DeleteInstance", + Handler: _Instances_DeleteInstance_Handler, + }, + { + MethodName: "DebugInstance", + Handler: _Instances_DebugInstance_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/appengine/v1/appengine.proto", +} + +// Client API for Versions service + +type VersionsClient interface { + // Lists the versions of a service. + ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*ListVersionsResponse, error) + // Gets the specified Version resource. + // By default, only a `BASIC_VIEW` will be returned. + // Specify the `FULL_VIEW` parameter to get the full resource. + GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*Version, error) + // Deploys code and resource files to a new version. + CreateVersion(ctx context.Context, in *CreateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Updates the specified Version resource. + // You can specify the following fields depending on the App Engine + // environment and type of scaling that the version resource uses: + // + // * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status): + // For Version resources that use basic scaling, manual scaling, or run in + // the App Engine flexible environment. + // * [`instance_class`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.instance_class): + // For Version resources that run in the App Engine standard environment. + // * [`automatic_scaling.min_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling): + // For Version resources that use automatic scaling and run in the App + // Engine standard environment. + // * [`automatic_scaling.max_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling): + // For Version resources that use automatic scaling and run in the App + // Engine standard environment. + UpdateVersion(ctx context.Context, in *UpdateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes an existing Version resource. + DeleteVersion(ctx context.Context, in *DeleteVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type versionsClient struct { + cc *grpc.ClientConn +} + +func NewVersionsClient(cc *grpc.ClientConn) VersionsClient { + return &versionsClient{cc} +} + +func (c *versionsClient) ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*ListVersionsResponse, error) { + out := new(ListVersionsResponse) + err := grpc.Invoke(ctx, "/google.appengine.v1.Versions/ListVersions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *versionsClient) GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*Version, error) { + out := new(Version) + err := grpc.Invoke(ctx, "/google.appengine.v1.Versions/GetVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *versionsClient) CreateVersion(ctx context.Context, in *CreateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.appengine.v1.Versions/CreateVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *versionsClient) UpdateVersion(ctx context.Context, in *UpdateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.appengine.v1.Versions/UpdateVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *versionsClient) DeleteVersion(ctx context.Context, in *DeleteVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.appengine.v1.Versions/DeleteVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Versions service + +type VersionsServer interface { + // Lists the versions of a service. + ListVersions(context.Context, *ListVersionsRequest) (*ListVersionsResponse, error) + // Gets the specified Version resource. + // By default, only a `BASIC_VIEW` will be returned. + // Specify the `FULL_VIEW` parameter to get the full resource. + GetVersion(context.Context, *GetVersionRequest) (*Version, error) + // Deploys code and resource files to a new version. + CreateVersion(context.Context, *CreateVersionRequest) (*google_longrunning.Operation, error) + // Updates the specified Version resource. + // You can specify the following fields depending on the App Engine + // environment and type of scaling that the version resource uses: + // + // * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status): + // For Version resources that use basic scaling, manual scaling, or run in + // the App Engine flexible environment. + // * [`instance_class`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.instance_class): + // For Version resources that run in the App Engine standard environment. + // * [`automatic_scaling.min_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling): + // For Version resources that use automatic scaling and run in the App + // Engine standard environment. + // * [`automatic_scaling.max_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling): + // For Version resources that use automatic scaling and run in the App + // Engine standard environment. + UpdateVersion(context.Context, *UpdateVersionRequest) (*google_longrunning.Operation, error) + // Deletes an existing Version resource. + DeleteVersion(context.Context, *DeleteVersionRequest) (*google_longrunning.Operation, error) +} + +func RegisterVersionsServer(s *grpc.Server, srv VersionsServer) { + s.RegisterService(&_Versions_serviceDesc, srv) +} + +func _Versions_ListVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVersionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VersionsServer).ListVersions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Versions/ListVersions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VersionsServer).ListVersions(ctx, req.(*ListVersionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Versions_GetVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VersionsServer).GetVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Versions/GetVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VersionsServer).GetVersion(ctx, req.(*GetVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Versions_CreateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VersionsServer).CreateVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Versions/CreateVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VersionsServer).CreateVersion(ctx, req.(*CreateVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Versions_UpdateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VersionsServer).UpdateVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Versions/UpdateVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VersionsServer).UpdateVersion(ctx, req.(*UpdateVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Versions_DeleteVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VersionsServer).DeleteVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Versions/DeleteVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VersionsServer).DeleteVersion(ctx, req.(*DeleteVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Versions_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.appengine.v1.Versions", + HandlerType: (*VersionsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListVersions", + Handler: _Versions_ListVersions_Handler, + }, + { + MethodName: "GetVersion", + Handler: _Versions_GetVersion_Handler, + }, + { + MethodName: "CreateVersion", + Handler: _Versions_CreateVersion_Handler, + }, + { + MethodName: "UpdateVersion", + Handler: _Versions_UpdateVersion_Handler, + }, + { + MethodName: "DeleteVersion", + Handler: _Versions_DeleteVersion_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/appengine/v1/appengine.proto", +} + +// Client API for Services service + +type ServicesClient interface { + // Lists all the services in the application. + ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) + // Gets the current configuration of the specified service. + GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*Service, error) + // Updates the configuration of the specified service. + UpdateService(ctx context.Context, in *UpdateServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes the specified service and all enclosed versions. + DeleteService(ctx context.Context, in *DeleteServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type servicesClient struct { + cc *grpc.ClientConn +} + +func NewServicesClient(cc *grpc.ClientConn) ServicesClient { + return &servicesClient{cc} +} + +func (c *servicesClient) ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) { + out := new(ListServicesResponse) + err := grpc.Invoke(ctx, "/google.appengine.v1.Services/ListServices", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *servicesClient) GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*Service, error) { + out := new(Service) + err := grpc.Invoke(ctx, "/google.appengine.v1.Services/GetService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *servicesClient) UpdateService(ctx context.Context, in *UpdateServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.appengine.v1.Services/UpdateService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *servicesClient) DeleteService(ctx context.Context, in *DeleteServiceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.appengine.v1.Services/DeleteService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Services service + +type ServicesServer interface { + // Lists all the services in the application. + ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) + // Gets the current configuration of the specified service. + GetService(context.Context, *GetServiceRequest) (*Service, error) + // Updates the configuration of the specified service. + UpdateService(context.Context, *UpdateServiceRequest) (*google_longrunning.Operation, error) + // Deletes the specified service and all enclosed versions. + DeleteService(context.Context, *DeleteServiceRequest) (*google_longrunning.Operation, error) +} + +func RegisterServicesServer(s *grpc.Server, srv ServicesServer) { + s.RegisterService(&_Services_serviceDesc, srv) +} + +func _Services_ListServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServicesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServicesServer).ListServices(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Services/ListServices", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServicesServer).ListServices(ctx, req.(*ListServicesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Services_GetService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServicesServer).GetService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Services/GetService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServicesServer).GetService(ctx, req.(*GetServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Services_UpdateService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServicesServer).UpdateService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Services/UpdateService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServicesServer).UpdateService(ctx, req.(*UpdateServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Services_DeleteService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServicesServer).DeleteService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Services/DeleteService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServicesServer).DeleteService(ctx, req.(*DeleteServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Services_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.appengine.v1.Services", + HandlerType: (*ServicesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListServices", + Handler: _Services_ListServices_Handler, + }, + { + MethodName: "GetService", + Handler: _Services_GetService_Handler, + }, + { + MethodName: "UpdateService", + Handler: _Services_UpdateService_Handler, + }, + { + MethodName: "DeleteService", + Handler: _Services_DeleteService_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/appengine/v1/appengine.proto", +} + +// Client API for Applications service + +type ApplicationsClient interface { + // Gets information about an application. + GetApplication(ctx context.Context, in *GetApplicationRequest, opts ...grpc.CallOption) (*Application, error) + // Recreates the required App Engine features for the application in your + // project, for example a Cloud Storage bucket or App Engine service account. + // Use this method if you receive an error message about a missing feature, + // for example "*Error retrieving the App Engine service account*". + RepairApplication(ctx context.Context, in *RepairApplicationRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type applicationsClient struct { + cc *grpc.ClientConn +} + +func NewApplicationsClient(cc *grpc.ClientConn) ApplicationsClient { + return &applicationsClient{cc} +} + +func (c *applicationsClient) GetApplication(ctx context.Context, in *GetApplicationRequest, opts ...grpc.CallOption) (*Application, error) { + out := new(Application) + err := grpc.Invoke(ctx, "/google.appengine.v1.Applications/GetApplication", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *applicationsClient) RepairApplication(ctx context.Context, in *RepairApplicationRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.appengine.v1.Applications/RepairApplication", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Applications service + +type ApplicationsServer interface { + // Gets information about an application. + GetApplication(context.Context, *GetApplicationRequest) (*Application, error) + // Recreates the required App Engine features for the application in your + // project, for example a Cloud Storage bucket or App Engine service account. + // Use this method if you receive an error message about a missing feature, + // for example "*Error retrieving the App Engine service account*". + RepairApplication(context.Context, *RepairApplicationRequest) (*google_longrunning.Operation, error) +} + +func RegisterApplicationsServer(s *grpc.Server, srv ApplicationsServer) { + s.RegisterService(&_Applications_serviceDesc, srv) +} + +func _Applications_GetApplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetApplicationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ApplicationsServer).GetApplication(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Applications/GetApplication", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ApplicationsServer).GetApplication(ctx, req.(*GetApplicationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Applications_RepairApplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RepairApplicationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ApplicationsServer).RepairApplication(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.appengine.v1.Applications/RepairApplication", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ApplicationsServer).RepairApplication(ctx, req.(*RepairApplicationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Applications_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.appengine.v1.Applications", + HandlerType: (*ApplicationsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetApplication", + Handler: _Applications_GetApplication_Handler, + }, + { + MethodName: "RepairApplication", + Handler: _Applications_RepairApplication_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/appengine/v1/appengine.proto", +} + +func init() { proto.RegisterFile("google/appengine/v1/appengine.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1134 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xdf, 0x6f, 0xdb, 0x54, + 0x14, 0xc6, 0x6d, 0xba, 0x25, 0x27, 0x6b, 0xb6, 0xde, 0xb6, 0x10, 0xbc, 0x76, 0x0a, 0x1e, 0x2c, + 0xa9, 0xa7, 0xc5, 0x9a, 0x07, 0xd3, 0x48, 0x01, 0xa9, 0xdd, 0xb4, 0x6a, 0x52, 0x11, 0x95, 0xbb, + 0xed, 0x01, 0x09, 0x55, 0x6e, 0x7a, 0x63, 0x5d, 0x9a, 0xd8, 0xc6, 0x76, 0xb2, 0x6e, 0x10, 0x21, + 0x31, 0x09, 0x01, 0x8f, 0x1b, 0x0f, 0x3c, 0x20, 0xed, 0x81, 0x7f, 0x86, 0x77, 0xfe, 0x01, 0x1e, + 0xf8, 0x43, 0x90, 0xaf, 0xef, 0xb5, 0x63, 0xc7, 0xbf, 0x54, 0xc4, 0x5b, 0x7c, 0xef, 0x77, 0xef, + 0xf9, 0xee, 0x77, 0x3e, 0xfb, 0x9c, 0x1b, 0xb8, 0x6e, 0x58, 0x96, 0x31, 0xc4, 0x8a, 0x6e, 0xdb, + 0xd8, 0x34, 0x88, 0x89, 0x95, 0xc9, 0xed, 0xe8, 0xa1, 0x6b, 0x3b, 0x96, 0x67, 0xa1, 0xd5, 0x00, + 0xd4, 0x8d, 0xc6, 0x27, 0xb7, 0xc5, 0x8d, 0x70, 0x25, 0x51, 0x74, 0xd3, 0xb4, 0x3c, 0xdd, 0x23, + 0x96, 0xe9, 0x06, 0x4b, 0xc4, 0x0f, 0x32, 0xf6, 0x1d, 0x92, 0x3e, 0xc5, 0x31, 0x98, 0x94, 0x06, + 0x23, 0xa6, 0xeb, 0xe9, 0x66, 0x9f, 0x45, 0x17, 0xdf, 0x4b, 0xc3, 0xb8, 0xd8, 0x99, 0x90, 0x7c, + 0xc8, 0x04, 0x3b, 0x6e, 0x14, 0xe9, 0x1a, 0x83, 0x10, 0x7d, 0x44, 0x63, 0xe8, 0xa3, 0x23, 0xdb, + 0x1a, 0x92, 0xfe, 0x73, 0x36, 0x2f, 0xc6, 0xe7, 0x63, 0x73, 0x5c, 0xa4, 0xa1, 0x65, 0x1a, 0xce, + 0xd8, 0x34, 0x89, 0x69, 0x28, 0x96, 0x8d, 0x9d, 0xd8, 0x89, 0xaf, 0x32, 0x10, 0x7d, 0x3a, 0x1e, + 0x0f, 0x14, 0x3c, 0xb2, 0x3d, 0xbe, 0x43, 0x2b, 0x39, 0x39, 0x20, 0x78, 0x78, 0x72, 0x34, 0xd2, + 0xdd, 0xd3, 0x00, 0x21, 0xdd, 0x84, 0xf5, 0x3d, 0xec, 0xed, 0x44, 0x0a, 0x69, 0xf8, 0x9b, 0x31, + 0x76, 0x3d, 0x84, 0xa0, 0x62, 0xea, 0x23, 0xdc, 0x14, 0x5a, 0x42, 0xa7, 0xa6, 0xd1, 0xdf, 0x52, + 0x17, 0x9a, 0x1a, 0xb6, 0x75, 0xe2, 0x94, 0xc4, 0x13, 0x58, 0xdd, 0x27, 0xae, 0x77, 0x18, 0x88, + 0xe6, 0x72, 0xe8, 0xdb, 0x70, 0xc1, 0xd6, 0x1d, 0x6c, 0x7a, 0x0c, 0xcc, 0x9e, 0xd0, 0x55, 0xa8, + 0xd9, 0xba, 0x81, 0x8f, 0x5c, 0xf2, 0x02, 0x37, 0x17, 0x5a, 0x42, 0x67, 0x49, 0xab, 0xfa, 0x03, + 0x87, 0xe4, 0x05, 0x46, 0x9b, 0x00, 0x74, 0xd2, 0xb3, 0x4e, 0xb1, 0xd9, 0x5c, 0xa4, 0x0b, 0x29, + 0xfc, 0xb1, 0x3f, 0x20, 0x9d, 0xc1, 0x5a, 0x3c, 0x94, 0x6b, 0x5b, 0xa6, 0x8b, 0xd1, 0x3d, 0xa8, + 0xb2, 0x9c, 0xb9, 0x4d, 0xa1, 0xb5, 0xd8, 0xa9, 0xab, 0x1b, 0xdd, 0x14, 0x5b, 0x75, 0xd9, 0x42, + 0x2d, 0x44, 0xa3, 0x1b, 0x70, 0xd9, 0xc4, 0x67, 0xde, 0xd1, 0x4c, 0xd4, 0x05, 0x1a, 0x75, 0xd9, + 0x1f, 0x3e, 0x08, 0x23, 0xb7, 0x61, 0x65, 0x0f, 0xf3, 0xc0, 0x79, 0x6a, 0xfc, 0x29, 0xc0, 0xda, + 0x13, 0xfb, 0x44, 0xf7, 0x70, 0x31, 0x18, 0xdd, 0x85, 0x8b, 0x8c, 0x09, 0x8d, 0x5a, 0x44, 0x9b, + 0x83, 0xd1, 0x36, 0xd4, 0xc7, 0x34, 0x06, 0x4d, 0x32, 0xd5, 0xa9, 0xae, 0x8a, 0x7c, 0x2d, 0xf7, + 0x41, 0xf7, 0xa1, 0xef, 0x83, 0xcf, 0x75, 0xf7, 0x54, 0x83, 0x00, 0xee, 0xff, 0x46, 0x6d, 0xb8, + 0x3c, 0x22, 0x86, 0xe3, 0xaf, 0xf6, 0x1c, 0x7d, 0x30, 0x20, 0xfd, 0x66, 0xa5, 0x25, 0x74, 0xaa, + 0x5a, 0x83, 0x0d, 0x3f, 0x0e, 0x46, 0x25, 0x19, 0xd6, 0x1e, 0xe0, 0x21, 0x2e, 0x73, 0x12, 0xe9, + 0x8d, 0x10, 0xb8, 0xe0, 0x69, 0xf0, 0x5e, 0x14, 0xba, 0xe0, 0x43, 0xa8, 0x4c, 0x08, 0x7e, 0x46, + 0x8f, 0xdd, 0x50, 0x5b, 0xa9, 0xc7, 0x66, 0x7b, 0x3d, 0x25, 0xf8, 0x99, 0x46, 0xd1, 0x71, 0xef, + 0x2c, 0xe6, 0x7a, 0xa7, 0x92, 0xe1, 0x9d, 0x88, 0x60, 0xe4, 0x1d, 0xf6, 0x32, 0xe7, 0x7b, 0x87, + 0x2d, 0xd4, 0x42, 0x74, 0x69, 0xef, 0x7c, 0x45, 0xbd, 0xc3, 0xd7, 0xe7, 0xd8, 0xe1, 0x5c, 0xa2, + 0x48, 0x03, 0x58, 0xbb, 0xef, 0x60, 0xdd, 0xc3, 0x89, 0x08, 0x59, 0xd2, 0xdf, 0x85, 0x8b, 0xec, + 0x08, 0xb9, 0xa6, 0xe3, 0xbb, 0x71, 0xb0, 0x9f, 0x62, 0xe6, 0xec, 0x12, 0x47, 0x39, 0x67, 0x90, + 0xff, 0xe4, 0xec, 0xc8, 0xb0, 0xc5, 0x04, 0xa5, 0xaf, 0x03, 0x3b, 0x3c, 0x62, 0xe5, 0xe0, 0x7f, + 0xfd, 0x6c, 0x7d, 0x07, 0xeb, 0x89, 0x58, 0xcc, 0x7b, 0xdb, 0x50, 0xe3, 0xf5, 0x88, 0x9b, 0x6f, + 0x33, 0x55, 0x27, 0xbe, 0x54, 0x8b, 0xf0, 0xa5, 0xed, 0xd7, 0x01, 0xb4, 0x87, 0xc3, 0xe0, 0x79, + 0x9a, 0xdc, 0x84, 0xf5, 0x40, 0xbf, 0x32, 0x60, 0x2a, 0xf6, 0xf1, 0xd8, 0x28, 0x81, 0x95, 0x25, + 0xa8, 0xcf, 0xf8, 0x16, 0xd5, 0x60, 0x69, 0x77, 0xe7, 0xf0, 0xd1, 0xfd, 0x2b, 0x6f, 0xa1, 0x2a, + 0x54, 0x1e, 0x3e, 0xd9, 0xdf, 0xbf, 0x22, 0xa8, 0x2f, 0x97, 0xa0, 0x16, 0x2a, 0x84, 0xfe, 0x10, + 0x60, 0x39, 0xa6, 0x19, 0xda, 0x4a, 0x15, 0x26, 0x2d, 0x87, 0xa2, 0x5c, 0x06, 0x1a, 0xa4, 0x40, + 0xda, 0xfe, 0xe1, 0xaf, 0x7f, 0x5e, 0x2f, 0x7c, 0x84, 0xee, 0xf8, 0x85, 0xf9, 0xdb, 0x20, 0xd9, + 0x9f, 0xea, 0xb6, 0xed, 0x2a, 0x32, 0xef, 0x03, 0xfc, 0x9f, 0xfc, 0xa5, 0x57, 0xe4, 0xa9, 0x12, + 0xa5, 0xe0, 0x95, 0x00, 0xf5, 0x19, 0x6d, 0x51, 0x3b, 0x35, 0xf0, 0xbc, 0xfa, 0x62, 0x7e, 0x96, + 0x13, 0xa4, 0x7c, 0x09, 0x73, 0x29, 0x45, 0x8c, 0x14, 0x79, 0x8a, 0x7e, 0x13, 0xa0, 0x11, 0x4f, + 0x23, 0x4a, 0x17, 0x24, 0x35, 0xd7, 0x11, 0xb5, 0x99, 0x86, 0xa4, 0xfb, 0x05, 0x6f, 0x48, 0x38, + 0x35, 0xf9, 0x5c, 0xd4, 0xde, 0x08, 0xb0, 0x1c, 0x33, 0x4d, 0x46, 0x56, 0xd3, 0x8c, 0x55, 0x44, + 0xec, 0x01, 0x25, 0xf6, 0x99, 0xf4, 0xf1, 0x39, 0x88, 0xf5, 0x4e, 0xfc, 0x80, 0x3d, 0x41, 0x56, + 0xff, 0x5e, 0x82, 0x2a, 0x2f, 0x11, 0xe8, 0x57, 0x01, 0x2e, 0xcd, 0xd6, 0x0c, 0xd4, 0xc9, 0x34, + 0x56, 0xa2, 0xee, 0x89, 0x5b, 0x25, 0x90, 0xcc, 0x81, 0x0a, 0x25, 0xbe, 0x85, 0xda, 0xb9, 0x0e, + 0x9c, 0x86, 0xdc, 0xd1, 0x4b, 0x01, 0x20, 0x2a, 0x28, 0xe8, 0x46, 0x96, 0xe9, 0xe2, 0x5f, 0x41, + 0x31, 0xf7, 0x0b, 0x9c, 0x60, 0x51, 0x28, 0xdf, 0x14, 0xbd, 0x16, 0x60, 0x39, 0x56, 0x77, 0x32, + 0x72, 0x99, 0x56, 0x9b, 0x8a, 0x72, 0x79, 0x8f, 0x92, 0x51, 0xa5, 0xb2, 0x92, 0xf4, 0xc2, 0xfa, + 0xe1, 0xb3, 0x8a, 0x15, 0xa9, 0x0c, 0x56, 0x69, 0x85, 0xac, 0x24, 0x2b, 0xb5, 0xac, 0x44, 0x11, + 0xab, 0x5f, 0xa8, 0xef, 0x67, 0x2a, 0x53, 0xa6, 0xef, 0xe7, 0xab, 0x57, 0x11, 0x2b, 0x96, 0x38, + 0xb9, 0x2c, 0x2b, 0xf5, 0xf7, 0x0a, 0x54, 0x79, 0x07, 0x8d, 0x7e, 0x66, 0x16, 0x0f, 0x07, 0xb2, + 0x2d, 0x9e, 0x68, 0xf0, 0x73, 0x2c, 0x9e, 0xec, 0xcf, 0xa5, 0xf7, 0x29, 0xc7, 0x6b, 0x68, 0x63, + 0x3e, 0x9f, 0xd3, 0x90, 0x26, 0x3a, 0xa3, 0xb6, 0x66, 0x8b, 0xb3, 0x6d, 0x1d, 0xef, 0x46, 0xc5, + 0xdc, 0x96, 0x39, 0x11, 0x39, 0x5d, 0x9d, 0x29, 0xfa, 0x29, 0x74, 0x0d, 0x8f, 0x9e, 0xe7, 0x9a, + 0x04, 0x81, 0x82, 0xfc, 0xdc, 0xa2, 0x0c, 0xda, 0x6a, 0x2e, 0x83, 0x5e, 0xd8, 0xda, 0x7f, 0xcf, + 0x9d, 0x92, 0xcf, 0x24, 0xad, 0x31, 0x2f, 0x62, 0xc2, 0xb4, 0x90, 0x73, 0x99, 0xa8, 0xaf, 0x16, + 0xe0, 0xd2, 0xcc, 0xcd, 0xcf, 0x45, 0xcf, 0xa1, 0x11, 0xbf, 0x3c, 0x66, 0x94, 0x93, 0xd4, 0x1b, + 0xa6, 0x98, 0xde, 0xc5, 0xce, 0x00, 0xa5, 0x77, 0x29, 0xad, 0x55, 0xb4, 0x92, 0xa4, 0x35, 0x45, + 0x3f, 0x0a, 0xb0, 0x32, 0x77, 0x17, 0x45, 0xb7, 0x52, 0xb7, 0xcc, 0xba, 0xb3, 0x16, 0xa9, 0x72, + 0x9d, 0x86, 0xdf, 0x94, 0x9a, 0x73, 0xe1, 0x7b, 0x0e, 0xdd, 0xb2, 0x27, 0xc8, 0xbb, 0x04, 0xde, + 0xe9, 0x5b, 0xa3, 0xb4, 0xb8, 0xbb, 0x8d, 0x1d, 0xfe, 0x74, 0xe0, 0x77, 0xa7, 0x07, 0xc2, 0x97, + 0x9f, 0x30, 0x98, 0x61, 0x0d, 0x75, 0xd3, 0xe8, 0x5a, 0x8e, 0xa1, 0x18, 0xd8, 0xa4, 0xbd, 0xab, + 0x12, 0x4c, 0xe9, 0x36, 0x71, 0x63, 0xff, 0x27, 0x6c, 0x87, 0x0f, 0xc7, 0x17, 0x28, 0xf0, 0xce, + 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x89, 0x36, 0x22, 0x8f, 0x3d, 0x11, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/application.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/application.pb.go new file mode 100644 index 0000000..03c7822 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/application.pb.go @@ -0,0 +1,223 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/application.proto +// DO NOT EDIT! + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// An Application resource contains the top-level configuration of an App +// Engine application. +type Application struct { + // Full path to the Application resource in the API. + // Example: `apps/myapp`. + // + // @OutputOnly + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Identifier of the Application resource. This identifier is equivalent + // to the project ID of the Google Cloud Platform project where you want to + // deploy your application. + // Example: `myapp`. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // HTTP path dispatch rules for requests to the application that do not + // explicitly target a service or version. Rules are order-dependent. + // + // @OutputOnly + DispatchRules []*UrlDispatchRule `protobuf:"bytes,3,rep,name=dispatch_rules,json=dispatchRules" json:"dispatch_rules,omitempty"` + // Google Apps authentication domain that controls which users can access + // this application. + // + // Defaults to open access for any Google Account. + AuthDomain string `protobuf:"bytes,6,opt,name=auth_domain,json=authDomain" json:"auth_domain,omitempty"` + // Location from which this application will be run. Application instances + // will run out of data centers in the chosen location, which is also where + // all of the application's end user content is stored. + // + // Defaults to `us-central`. + // + // Options are: + // + // `us-central` - Central US + // + // `europe-west` - Western Europe + // + // `us-east1` - Eastern US + LocationId string `protobuf:"bytes,7,opt,name=location_id,json=locationId" json:"location_id,omitempty"` + // Google Cloud Storage bucket that can be used for storing files + // associated with this application. This bucket is associated with the + // application and can be used by the gcloud deployment commands. + // + // @OutputOnly + CodeBucket string `protobuf:"bytes,8,opt,name=code_bucket,json=codeBucket" json:"code_bucket,omitempty"` + // Cookie expiration policy for this application. + // + // @OutputOnly + DefaultCookieExpiration *google_protobuf1.Duration `protobuf:"bytes,9,opt,name=default_cookie_expiration,json=defaultCookieExpiration" json:"default_cookie_expiration,omitempty"` + // Hostname used to reach this application, as resolved by App Engine. + // + // @OutputOnly + DefaultHostname string `protobuf:"bytes,11,opt,name=default_hostname,json=defaultHostname" json:"default_hostname,omitempty"` + // Google Cloud Storage bucket that can be used by this application to store + // content. + // + // @OutputOnly + DefaultBucket string `protobuf:"bytes,12,opt,name=default_bucket,json=defaultBucket" json:"default_bucket,omitempty"` +} + +func (m *Application) Reset() { *m = Application{} } +func (m *Application) String() string { return proto.CompactTextString(m) } +func (*Application) ProtoMessage() {} +func (*Application) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *Application) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Application) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Application) GetDispatchRules() []*UrlDispatchRule { + if m != nil { + return m.DispatchRules + } + return nil +} + +func (m *Application) GetAuthDomain() string { + if m != nil { + return m.AuthDomain + } + return "" +} + +func (m *Application) GetLocationId() string { + if m != nil { + return m.LocationId + } + return "" +} + +func (m *Application) GetCodeBucket() string { + if m != nil { + return m.CodeBucket + } + return "" +} + +func (m *Application) GetDefaultCookieExpiration() *google_protobuf1.Duration { + if m != nil { + return m.DefaultCookieExpiration + } + return nil +} + +func (m *Application) GetDefaultHostname() string { + if m != nil { + return m.DefaultHostname + } + return "" +} + +func (m *Application) GetDefaultBucket() string { + if m != nil { + return m.DefaultBucket + } + return "" +} + +// Rules to match an HTTP request and dispatch that request to a service. +type UrlDispatchRule struct { + // Domain name to match against. The wildcard "`*`" is supported if + // specified before a period: "`*.`". + // + // Defaults to matching all domains: "`*`". + Domain string `protobuf:"bytes,1,opt,name=domain" json:"domain,omitempty"` + // Pathname within the host. Must start with a "`/`". A + // single "`*`" can be included at the end of the path. The sum + // of the lengths of the domain and path may not exceed 100 + // characters. + Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` + // Resource ID of a service in this application that should + // serve the matched request. The service must already + // exist. Example: `default`. + Service string `protobuf:"bytes,3,opt,name=service" json:"service,omitempty"` +} + +func (m *UrlDispatchRule) Reset() { *m = UrlDispatchRule{} } +func (m *UrlDispatchRule) String() string { return proto.CompactTextString(m) } +func (*UrlDispatchRule) ProtoMessage() {} +func (*UrlDispatchRule) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *UrlDispatchRule) GetDomain() string { + if m != nil { + return m.Domain + } + return "" +} + +func (m *UrlDispatchRule) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *UrlDispatchRule) GetService() string { + if m != nil { + return m.Service + } + return "" +} + +func init() { + proto.RegisterType((*Application)(nil), "google.appengine.v1.Application") + proto.RegisterType((*UrlDispatchRule)(nil), "google.appengine.v1.UrlDispatchRule") +} + +func init() { proto.RegisterFile("google/appengine/v1/application.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 409 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x5f, 0x6b, 0xdb, 0x30, + 0x14, 0xc5, 0x71, 0x3c, 0x92, 0x45, 0x5e, 0xfe, 0xa0, 0xc1, 0xa2, 0x84, 0xb1, 0x85, 0xb0, 0x40, + 0xf6, 0x62, 0x93, 0xec, 0x71, 0x7b, 0x59, 0x9a, 0x42, 0x4b, 0x5f, 0x82, 0x21, 0x14, 0xfa, 0x62, + 0x14, 0x4b, 0xb1, 0x45, 0x14, 0xc9, 0xd8, 0x72, 0xe8, 0x67, 0xe8, 0xa7, 0x2e, 0x96, 0x64, 0x37, + 0x2d, 0x79, 0xd3, 0x3d, 0xfa, 0x1d, 0xdd, 0xeb, 0x73, 0x0d, 0xe6, 0x89, 0x94, 0x09, 0xa7, 0x01, + 0xce, 0x32, 0x2a, 0x12, 0x26, 0x68, 0x70, 0x5e, 0x56, 0x05, 0x67, 0x31, 0x56, 0x4c, 0x0a, 0x3f, + 0xcb, 0xa5, 0x92, 0xf0, 0xab, 0xc1, 0xfc, 0x06, 0xf3, 0xcf, 0xcb, 0xc9, 0xf7, 0xc6, 0xcb, 0x02, + 0x2c, 0x84, 0x54, 0xda, 0x51, 0x18, 0xcb, 0xe4, 0x87, 0xbd, 0xd5, 0xd5, 0xbe, 0x3c, 0x04, 0xa4, + 0xcc, 0x2f, 0x9e, 0x9c, 0xbd, 0xb8, 0xc0, 0xfb, 0xff, 0xd6, 0x08, 0x42, 0xf0, 0x49, 0xe0, 0x13, + 0x45, 0xce, 0xd4, 0x59, 0x74, 0x43, 0x7d, 0x86, 0x7d, 0xd0, 0x62, 0x04, 0xb5, 0xb4, 0xd2, 0x62, + 0x04, 0x3e, 0x80, 0x3e, 0x61, 0x45, 0x86, 0x55, 0x9c, 0x46, 0x79, 0xc9, 0x69, 0x81, 0xdc, 0xa9, + 0xbb, 0xf0, 0x56, 0xbf, 0xfc, 0x2b, 0xf3, 0xf9, 0xbb, 0x9c, 0x6f, 0x2c, 0x1d, 0x96, 0x9c, 0x86, + 0x3d, 0x72, 0x51, 0x15, 0xf0, 0x27, 0xf0, 0x70, 0xa9, 0xd2, 0x88, 0xc8, 0x13, 0x66, 0x02, 0xb5, + 0x75, 0x17, 0x50, 0x49, 0x1b, 0xad, 0x54, 0x00, 0x97, 0x66, 0xba, 0x88, 0x11, 0xd4, 0x31, 0x40, + 0x2d, 0xdd, 0x93, 0x0a, 0x88, 0x25, 0xa1, 0xd1, 0xbe, 0x8c, 0x8f, 0x54, 0xa1, 0xcf, 0x06, 0xa8, + 0xa4, 0xb5, 0x56, 0xe0, 0x0e, 0x8c, 0x09, 0x3d, 0xe0, 0x92, 0xab, 0x28, 0x96, 0xf2, 0xc8, 0x68, + 0x44, 0x9f, 0x33, 0x66, 0x62, 0x40, 0xdd, 0xa9, 0xb3, 0xf0, 0x56, 0xe3, 0x7a, 0xf4, 0x3a, 0x27, + 0x7f, 0x63, 0x73, 0x0a, 0x47, 0xd6, 0x7b, 0xa3, 0xad, 0xb7, 0x8d, 0x13, 0xfe, 0x06, 0xc3, 0xfa, + 0xd9, 0x54, 0x16, 0x4a, 0xc7, 0xe6, 0xe9, 0xe6, 0x03, 0xab, 0xdf, 0x59, 0x19, 0xce, 0x41, 0xbf, + 0x46, 0xed, 0x94, 0x5f, 0x34, 0xd8, 0xb3, 0xaa, 0x19, 0x74, 0xf6, 0x08, 0x06, 0x1f, 0xd2, 0x82, + 0xdf, 0x40, 0xdb, 0x26, 0x63, 0x36, 0x62, 0xab, 0x6a, 0x4f, 0x19, 0x56, 0xa9, 0xdd, 0x8a, 0x3e, + 0x43, 0x04, 0x3a, 0x05, 0xcd, 0xcf, 0x2c, 0xa6, 0xc8, 0xd5, 0x72, 0x5d, 0xae, 0x8f, 0x60, 0x14, + 0xcb, 0xd3, 0xb5, 0xf5, 0xac, 0x87, 0x17, 0xdb, 0xdf, 0x56, 0x1f, 0xbf, 0x75, 0x9e, 0xfe, 0x59, + 0x30, 0x91, 0x1c, 0x8b, 0xc4, 0x97, 0x79, 0x12, 0x24, 0x54, 0xe8, 0x68, 0x02, 0x73, 0x85, 0x33, + 0x56, 0xbc, 0xfb, 0x5b, 0xff, 0x36, 0xc5, 0xbe, 0xad, 0xc1, 0x3f, 0xaf, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x7a, 0x51, 0x2e, 0x3c, 0xd5, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/deploy.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/deploy.pb.go new file mode 100644 index 0000000..ffc4397 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/deploy.pb.go @@ -0,0 +1,184 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/deploy.proto +// DO NOT EDIT! + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Code and application artifacts used to deploy a version to App Engine. +type Deployment struct { + // Manifest of the files stored in Google Cloud Storage that are included + // as part of this version. All files must be readable using the + // credentials supplied with this call. + Files map[string]*FileInfo `protobuf:"bytes,1,rep,name=files" json:"files,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // A Docker image that App Engine uses to run the version. + // Only applicable for instances in App Engine flexible environment. + Container *ContainerInfo `protobuf:"bytes,2,opt,name=container" json:"container,omitempty"` + // The zip file for this deployment, if this is a zip deployment. + Zip *ZipInfo `protobuf:"bytes,3,opt,name=zip" json:"zip,omitempty"` +} + +func (m *Deployment) Reset() { *m = Deployment{} } +func (m *Deployment) String() string { return proto.CompactTextString(m) } +func (*Deployment) ProtoMessage() {} +func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *Deployment) GetFiles() map[string]*FileInfo { + if m != nil { + return m.Files + } + return nil +} + +func (m *Deployment) GetContainer() *ContainerInfo { + if m != nil { + return m.Container + } + return nil +} + +func (m *Deployment) GetZip() *ZipInfo { + if m != nil { + return m.Zip + } + return nil +} + +// Single source file that is part of the version to be deployed. Each source +// file that is deployed must be specified separately. +type FileInfo struct { + // URL source to use to fetch this file. Must be a URL to a resource in + // Google Cloud Storage in the form + // 'http(s)://storage.googleapis.com/\<bucket\>/\<object\>'. + SourceUrl string `protobuf:"bytes,1,opt,name=source_url,json=sourceUrl" json:"source_url,omitempty"` + // The SHA1 hash of the file, in hex. + Sha1Sum string `protobuf:"bytes,2,opt,name=sha1_sum,json=sha1Sum" json:"sha1_sum,omitempty"` + // The MIME type of the file. + // + // Defaults to the value from Google Cloud Storage. + MimeType string `protobuf:"bytes,3,opt,name=mime_type,json=mimeType" json:"mime_type,omitempty"` +} + +func (m *FileInfo) Reset() { *m = FileInfo{} } +func (m *FileInfo) String() string { return proto.CompactTextString(m) } +func (*FileInfo) ProtoMessage() {} +func (*FileInfo) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *FileInfo) GetSourceUrl() string { + if m != nil { + return m.SourceUrl + } + return "" +} + +func (m *FileInfo) GetSha1Sum() string { + if m != nil { + return m.Sha1Sum + } + return "" +} + +func (m *FileInfo) GetMimeType() string { + if m != nil { + return m.MimeType + } + return "" +} + +// Docker image that is used to start a VM container for the version you +// deploy. +type ContainerInfo struct { + // URI to the hosted container image in a Docker repository. The URI must be + // fully qualified and include a tag or digest. + // Examples: "gcr.io/my-project/image:tag" or "gcr.io/my-project/image@digest" + Image string `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` +} + +func (m *ContainerInfo) Reset() { *m = ContainerInfo{} } +func (m *ContainerInfo) String() string { return proto.CompactTextString(m) } +func (*ContainerInfo) ProtoMessage() {} +func (*ContainerInfo) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } + +func (m *ContainerInfo) GetImage() string { + if m != nil { + return m.Image + } + return "" +} + +type ZipInfo struct { + // URL of the zip file to deploy from. Must be a URL to a resource in + // Google Cloud Storage in the form + // 'http(s)://storage.googleapis.com/\<bucket\>/\<object\>'. + SourceUrl string `protobuf:"bytes,3,opt,name=source_url,json=sourceUrl" json:"source_url,omitempty"` + // An estimate of the number of files in a zip for a zip deployment. + // If set, must be greater than or equal to the actual number of files. + // Used for optimizing performance; if not provided, deployment may be slow. + FilesCount int32 `protobuf:"varint,4,opt,name=files_count,json=filesCount" json:"files_count,omitempty"` +} + +func (m *ZipInfo) Reset() { *m = ZipInfo{} } +func (m *ZipInfo) String() string { return proto.CompactTextString(m) } +func (*ZipInfo) ProtoMessage() {} +func (*ZipInfo) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{3} } + +func (m *ZipInfo) GetSourceUrl() string { + if m != nil { + return m.SourceUrl + } + return "" +} + +func (m *ZipInfo) GetFilesCount() int32 { + if m != nil { + return m.FilesCount + } + return 0 +} + +func init() { + proto.RegisterType((*Deployment)(nil), "google.appengine.v1.Deployment") + proto.RegisterType((*FileInfo)(nil), "google.appengine.v1.FileInfo") + proto.RegisterType((*ContainerInfo)(nil), "google.appengine.v1.ContainerInfo") + proto.RegisterType((*ZipInfo)(nil), "google.appengine.v1.ZipInfo") +} + +func init() { proto.RegisterFile("google/appengine/v1/deploy.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 394 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xd1, 0xab, 0xd3, 0x30, + 0x14, 0xc6, 0xe9, 0x6a, 0xbd, 0xeb, 0x29, 0x82, 0x44, 0xc1, 0x7a, 0xbd, 0x17, 0x4b, 0x41, 0x28, + 0x3e, 0xa4, 0xec, 0xde, 0x17, 0x51, 0x1f, 0x2e, 0x9b, 0x0a, 0x7b, 0x1b, 0x55, 0x11, 0xf6, 0x52, + 0x62, 0xcd, 0x62, 0xb0, 0x4d, 0x42, 0x9b, 0x0e, 0xea, 0x7f, 0xe2, 0x7f, 0x2b, 0x49, 0xba, 0x8d, + 0x8d, 0xbe, 0xf5, 0x7c, 0xfd, 0x7d, 0x5f, 0x4e, 0x72, 0x0e, 0x24, 0x4c, 0x4a, 0x56, 0xd3, 0x9c, + 0x28, 0x45, 0x05, 0xe3, 0x82, 0xe6, 0xfb, 0x45, 0xfe, 0x8b, 0xaa, 0x5a, 0x0e, 0x58, 0xb5, 0x52, + 0x4b, 0xf4, 0xcc, 0x11, 0xf8, 0x48, 0xe0, 0xfd, 0xe2, 0xfa, 0xe6, 0x68, 0xe3, 0x39, 0x11, 0x42, + 0x6a, 0xa2, 0xb9, 0x14, 0x9d, 0xb3, 0xa4, 0xff, 0x66, 0x00, 0x9f, 0x6c, 0x46, 0x43, 0x85, 0x46, + 0x0f, 0x10, 0xec, 0x78, 0x4d, 0xbb, 0xd8, 0x4b, 0xfc, 0x2c, 0xba, 0x7b, 0x8b, 0x27, 0x12, 0xf1, + 0x89, 0xc7, 0x5f, 0x0c, 0xfc, 0x59, 0xe8, 0x76, 0x28, 0x9c, 0x11, 0x3d, 0x40, 0x58, 0x49, 0xa1, + 0x09, 0x17, 0xb4, 0x8d, 0x67, 0x89, 0x97, 0x45, 0x77, 0xe9, 0x64, 0xca, 0xea, 0x40, 0xad, 0xc5, + 0x4e, 0x16, 0x27, 0x13, 0xc2, 0xe0, 0xff, 0xe5, 0x2a, 0xf6, 0xad, 0xf7, 0x66, 0xd2, 0xbb, 0xe5, + 0xca, 0xba, 0x0c, 0x78, 0xfd, 0x03, 0xe0, 0xd4, 0x06, 0x7a, 0x0a, 0xfe, 0x1f, 0x3a, 0xc4, 0x5e, + 0xe2, 0x65, 0x61, 0x61, 0x3e, 0xd1, 0x3d, 0x04, 0x7b, 0x52, 0xf7, 0x74, 0xec, 0xe6, 0x76, 0x32, + 0xd1, 0x24, 0xd8, 0x48, 0xc7, 0xbe, 0x9f, 0xbd, 0xf3, 0x52, 0x02, 0xf3, 0x83, 0x8c, 0x6e, 0x01, + 0x3a, 0xd9, 0xb7, 0x15, 0x2d, 0xfb, 0xb6, 0x1e, 0xd3, 0x43, 0xa7, 0x7c, 0x6f, 0x6b, 0xf4, 0x12, + 0xe6, 0xdd, 0x6f, 0xb2, 0x28, 0xbb, 0xbe, 0xb1, 0xc7, 0x84, 0xc5, 0x95, 0xa9, 0xbf, 0xf6, 0x0d, + 0x7a, 0x05, 0x61, 0xc3, 0x1b, 0x5a, 0xea, 0x41, 0x51, 0x7b, 0xa9, 0xb0, 0x98, 0x1b, 0xe1, 0xdb, + 0xa0, 0x68, 0xfa, 0x06, 0x9e, 0x9c, 0xbd, 0x03, 0x7a, 0x0e, 0x01, 0x6f, 0x08, 0xa3, 0xe3, 0x11, + 0xae, 0x48, 0xd7, 0x70, 0x35, 0x5e, 0xf9, 0xa2, 0x11, 0xff, 0xb2, 0x91, 0xd7, 0x10, 0xd9, 0x39, + 0x94, 0x95, 0xec, 0x85, 0x8e, 0x1f, 0x25, 0x5e, 0x16, 0x14, 0x60, 0xa5, 0x95, 0x51, 0x96, 0x3b, + 0x78, 0x51, 0xc9, 0x66, 0xea, 0x0d, 0x96, 0x91, 0x1b, 0xec, 0xc6, 0x2c, 0xc6, 0xc6, 0xdb, 0x7e, + 0x1c, 0x19, 0x26, 0x6b, 0x22, 0x18, 0x96, 0x2d, 0xcb, 0x19, 0x15, 0x76, 0x6d, 0x72, 0xf7, 0x8b, + 0x28, 0xde, 0x9d, 0xad, 0xe3, 0x87, 0x63, 0xf1, 0xf3, 0xb1, 0x05, 0xef, 0xff, 0x07, 0x00, 0x00, + 0xff, 0xff, 0x6e, 0xeb, 0x52, 0x5a, 0xb6, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/instance.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/instance.pb.go new file mode 100644 index 0000000..591da0d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/instance.pb.go @@ -0,0 +1,267 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/instance.proto +// DO NOT EDIT! + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Availability of the instance. +type Instance_Availability int32 + +const ( + Instance_UNSPECIFIED Instance_Availability = 0 + Instance_RESIDENT Instance_Availability = 1 + Instance_DYNAMIC Instance_Availability = 2 +) + +var Instance_Availability_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "RESIDENT", + 2: "DYNAMIC", +} +var Instance_Availability_value = map[string]int32{ + "UNSPECIFIED": 0, + "RESIDENT": 1, + "DYNAMIC": 2, +} + +func (x Instance_Availability) String() string { + return proto.EnumName(Instance_Availability_name, int32(x)) +} +func (Instance_Availability) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{0, 0} } + +// An Instance resource is the computing unit that App Engine uses to +// automatically scale an application. +type Instance struct { + // Full path to the Instance resource in the API. + // Example: `apps/myapp/services/default/versions/v1/instances/instance-1`. + // + // @OutputOnly + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Relative name of the instance within the version. + // Example: `instance-1`. + // + // @OutputOnly + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // App Engine release this instance is running on. + // + // @OutputOnly + AppEngineRelease string `protobuf:"bytes,3,opt,name=app_engine_release,json=appEngineRelease" json:"app_engine_release,omitempty"` + // Availability of the instance. + // + // @OutputOnly + Availability Instance_Availability `protobuf:"varint,4,opt,name=availability,enum=google.appengine.v1.Instance_Availability" json:"availability,omitempty"` + // Name of the virtual machine where this instance lives. Only applicable + // for instances in App Engine flexible environment. + // + // @OutputOnly + VmName string `protobuf:"bytes,5,opt,name=vm_name,json=vmName" json:"vm_name,omitempty"` + // Zone where the virtual machine is located. Only applicable for instances + // in App Engine flexible environment. + // + // @OutputOnly + VmZoneName string `protobuf:"bytes,6,opt,name=vm_zone_name,json=vmZoneName" json:"vm_zone_name,omitempty"` + // Virtual machine ID of this instance. Only applicable for instances in + // App Engine flexible environment. + // + // @OutputOnly + VmId string `protobuf:"bytes,7,opt,name=vm_id,json=vmId" json:"vm_id,omitempty"` + // Time that this instance was started. + // + // @OutputOnly + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,8,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Number of requests since this instance was started. + // + // @OutputOnly + Requests int32 `protobuf:"varint,9,opt,name=requests" json:"requests,omitempty"` + // Number of errors since this instance was started. + // + // @OutputOnly + Errors int32 `protobuf:"varint,10,opt,name=errors" json:"errors,omitempty"` + // Average queries per second (QPS) over the last minute. + // + // @OutputOnly + Qps float32 `protobuf:"fixed32,11,opt,name=qps" json:"qps,omitempty"` + // Average latency (ms) over the last minute. + // + // @OutputOnly + AverageLatency int32 `protobuf:"varint,12,opt,name=average_latency,json=averageLatency" json:"average_latency,omitempty"` + // Total memory in use (bytes). + // + // @OutputOnly + MemoryUsage int64 `protobuf:"varint,13,opt,name=memory_usage,json=memoryUsage" json:"memory_usage,omitempty"` + // Status of the virtual machine where this instance lives. Only applicable + // for instances in App Engine flexible environment. + // + // @OutputOnly + VmStatus string `protobuf:"bytes,14,opt,name=vm_status,json=vmStatus" json:"vm_status,omitempty"` + // Whether this instance is in debug mode. Only applicable for instances in + // App Engine flexible environment. + // + // @OutputOnly + VmDebugEnabled bool `protobuf:"varint,15,opt,name=vm_debug_enabled,json=vmDebugEnabled" json:"vm_debug_enabled,omitempty"` +} + +func (m *Instance) Reset() { *m = Instance{} } +func (m *Instance) String() string { return proto.CompactTextString(m) } +func (*Instance) ProtoMessage() {} +func (*Instance) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *Instance) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Instance) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Instance) GetAppEngineRelease() string { + if m != nil { + return m.AppEngineRelease + } + return "" +} + +func (m *Instance) GetAvailability() Instance_Availability { + if m != nil { + return m.Availability + } + return Instance_UNSPECIFIED +} + +func (m *Instance) GetVmName() string { + if m != nil { + return m.VmName + } + return "" +} + +func (m *Instance) GetVmZoneName() string { + if m != nil { + return m.VmZoneName + } + return "" +} + +func (m *Instance) GetVmId() string { + if m != nil { + return m.VmId + } + return "" +} + +func (m *Instance) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *Instance) GetRequests() int32 { + if m != nil { + return m.Requests + } + return 0 +} + +func (m *Instance) GetErrors() int32 { + if m != nil { + return m.Errors + } + return 0 +} + +func (m *Instance) GetQps() float32 { + if m != nil { + return m.Qps + } + return 0 +} + +func (m *Instance) GetAverageLatency() int32 { + if m != nil { + return m.AverageLatency + } + return 0 +} + +func (m *Instance) GetMemoryUsage() int64 { + if m != nil { + return m.MemoryUsage + } + return 0 +} + +func (m *Instance) GetVmStatus() string { + if m != nil { + return m.VmStatus + } + return "" +} + +func (m *Instance) GetVmDebugEnabled() bool { + if m != nil { + return m.VmDebugEnabled + } + return false +} + +func init() { + proto.RegisterType((*Instance)(nil), "google.appengine.v1.Instance") + proto.RegisterEnum("google.appengine.v1.Instance_Availability", Instance_Availability_name, Instance_Availability_value) +} + +func init() { proto.RegisterFile("google/appengine/v1/instance.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 521 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0x5d, 0x6b, 0xdb, 0x3c, + 0x14, 0x7e, 0x9d, 0xb6, 0xa9, 0x73, 0xe2, 0x26, 0x46, 0x85, 0xb7, 0x22, 0x1b, 0xcc, 0xcb, 0xcd, + 0xcc, 0x18, 0x36, 0xed, 0xae, 0xf6, 0x71, 0xd3, 0x36, 0x1e, 0x18, 0xb6, 0x10, 0x9c, 0xf6, 0x62, + 0xbd, 0x31, 0x4a, 0xac, 0x79, 0x02, 0x4b, 0x72, 0x2d, 0x45, 0x90, 0xfd, 0xc6, 0xfd, 0xa8, 0x61, + 0x39, 0x09, 0x2d, 0xf4, 0xce, 0xcf, 0xc7, 0x41, 0xcf, 0x79, 0x0e, 0x86, 0x69, 0x29, 0x65, 0x59, + 0xd1, 0x98, 0xd4, 0x35, 0x15, 0x25, 0x13, 0x34, 0x36, 0x97, 0x31, 0x13, 0x4a, 0x13, 0xb1, 0xa6, + 0x51, 0xdd, 0x48, 0x2d, 0xd1, 0x79, 0xe7, 0x89, 0x0e, 0x9e, 0xc8, 0x5c, 0x4e, 0x5e, 0x1f, 0x06, + 0x59, 0x4c, 0x84, 0x90, 0x9a, 0x68, 0x26, 0x85, 0xea, 0x46, 0x26, 0x6f, 0x76, 0xaa, 0x45, 0xab, + 0xcd, 0xaf, 0x58, 0x33, 0x4e, 0x95, 0x26, 0xbc, 0xee, 0x0c, 0xd3, 0xbf, 0xc7, 0xe0, 0xa6, 0xbb, + 0x67, 0x10, 0x82, 0x63, 0x41, 0x38, 0xc5, 0x4e, 0xe0, 0x84, 0x83, 0xcc, 0x7e, 0xa3, 0x11, 0xf4, + 0x58, 0x81, 0x7b, 0x96, 0xe9, 0xb1, 0x02, 0x7d, 0x00, 0x44, 0xea, 0x3a, 0xef, 0x02, 0xe4, 0x0d, + 0xad, 0x28, 0x51, 0x14, 0x1f, 0x59, 0xdd, 0x27, 0x75, 0x9d, 0x58, 0x21, 0xeb, 0x78, 0x34, 0x07, + 0x8f, 0x18, 0xc2, 0x2a, 0xb2, 0x62, 0x15, 0xd3, 0x5b, 0x7c, 0x1c, 0x38, 0xe1, 0xe8, 0xea, 0x7d, + 0xf4, 0xc2, 0x26, 0xd1, 0x3e, 0x46, 0x74, 0xfd, 0x64, 0x22, 0x7b, 0x36, 0x8f, 0x2e, 0xe0, 0xd4, + 0xf0, 0xdc, 0x86, 0x3c, 0xb1, 0x4f, 0xf6, 0x0d, 0x9f, 0xb7, 0x31, 0x03, 0xf0, 0x0c, 0xcf, 0xff, + 0x48, 0x41, 0x3b, 0xb5, 0x6f, 0x55, 0x30, 0xfc, 0x41, 0x0a, 0x6a, 0x1d, 0xe7, 0x70, 0x62, 0x78, + 0xce, 0x0a, 0x7c, 0xda, 0x6d, 0x67, 0x78, 0x5a, 0xa0, 0x4f, 0x00, 0x4a, 0x93, 0x46, 0xe7, 0x6d, + 0x2f, 0xd8, 0x0d, 0x9c, 0x70, 0x78, 0x35, 0xd9, 0xa7, 0xdb, 0x97, 0x16, 0xdd, 0xed, 0x4b, 0xcb, + 0x06, 0xd6, 0xdd, 0x62, 0x34, 0x01, 0xb7, 0xa1, 0x8f, 0x1b, 0xaa, 0xb4, 0xc2, 0x83, 0xc0, 0x09, + 0x4f, 0xb2, 0x03, 0x46, 0xff, 0x43, 0x9f, 0x36, 0x8d, 0x6c, 0x14, 0x06, 0xab, 0xec, 0x10, 0xf2, + 0xe1, 0xe8, 0xb1, 0x56, 0x78, 0x18, 0x38, 0x61, 0x2f, 0x6b, 0x3f, 0xd1, 0x3b, 0x18, 0x13, 0x43, + 0x1b, 0x52, 0xd2, 0xbc, 0x22, 0x9a, 0x8a, 0xf5, 0x16, 0x7b, 0x76, 0x64, 0xb4, 0xa3, 0xbf, 0x77, + 0x2c, 0x7a, 0x0b, 0x1e, 0xa7, 0x5c, 0x36, 0xdb, 0x7c, 0xa3, 0x48, 0x49, 0xf1, 0x59, 0xe0, 0x84, + 0x47, 0xd9, 0xb0, 0xe3, 0xee, 0x5b, 0x0a, 0xbd, 0x82, 0x81, 0xe1, 0xb9, 0xd2, 0x44, 0x6f, 0x14, + 0x1e, 0xd9, 0x2d, 0x5d, 0xc3, 0x97, 0x16, 0xa3, 0x10, 0x7c, 0xc3, 0xf3, 0x82, 0xae, 0x36, 0x65, + 0x4e, 0x05, 0x59, 0x55, 0xb4, 0xc0, 0xe3, 0xc0, 0x09, 0xdd, 0x6c, 0x64, 0xf8, 0xac, 0xa5, 0x93, + 0x8e, 0x9d, 0x7e, 0x06, 0xef, 0xe9, 0x05, 0xd0, 0x18, 0x86, 0xf7, 0xf3, 0xe5, 0x22, 0xb9, 0x4d, + 0xbf, 0xa5, 0xc9, 0xcc, 0xff, 0x0f, 0x79, 0xe0, 0x66, 0xc9, 0x32, 0x9d, 0x25, 0xf3, 0x3b, 0xdf, + 0x41, 0x43, 0x38, 0x9d, 0xfd, 0x9c, 0x5f, 0xff, 0x48, 0x6f, 0xfd, 0xde, 0xcd, 0x6f, 0xb8, 0x58, + 0x4b, 0xfe, 0xd2, 0x79, 0x6f, 0xce, 0xf6, 0xf7, 0x5d, 0xb4, 0xb5, 0x2e, 0x9c, 0x87, 0xaf, 0x3b, + 0x57, 0x29, 0x2b, 0x22, 0xca, 0x48, 0x36, 0x65, 0x5c, 0x52, 0x61, 0x4b, 0x8f, 0x3b, 0x89, 0xd4, + 0x4c, 0x3d, 0xfb, 0x23, 0xbe, 0x1c, 0xc0, 0xaa, 0x6f, 0x8d, 0x1f, 0xff, 0x05, 0x00, 0x00, 0xff, + 0xff, 0x97, 0xe7, 0x7d, 0x88, 0x39, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/location.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/location.pb.go new file mode 100644 index 0000000..9b2309a --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/location.pb.go @@ -0,0 +1,72 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/location.proto +// DO NOT EDIT! + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/type/latlng" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Metadata for the given [google.cloud.location.Location][google.cloud.location.Location]. +type LocationMetadata struct { + // App Engine Standard Environment is available in the given location. + // + // @OutputOnly + StandardEnvironmentAvailable bool `protobuf:"varint,2,opt,name=standard_environment_available,json=standardEnvironmentAvailable" json:"standard_environment_available,omitempty"` + // App Engine Flexible Environment is available in the given location. + // + // @OutputOnly + FlexibleEnvironmentAvailable bool `protobuf:"varint,4,opt,name=flexible_environment_available,json=flexibleEnvironmentAvailable" json:"flexible_environment_available,omitempty"` +} + +func (m *LocationMetadata) Reset() { *m = LocationMetadata{} } +func (m *LocationMetadata) String() string { return proto.CompactTextString(m) } +func (*LocationMetadata) ProtoMessage() {} +func (*LocationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +func (m *LocationMetadata) GetStandardEnvironmentAvailable() bool { + if m != nil { + return m.StandardEnvironmentAvailable + } + return false +} + +func (m *LocationMetadata) GetFlexibleEnvironmentAvailable() bool { + if m != nil { + return m.FlexibleEnvironmentAvailable + } + return false +} + +func init() { + proto.RegisterType((*LocationMetadata)(nil), "google.appengine.v1.LocationMetadata") +} + +func init() { proto.RegisterFile("google/appengine/v1/location.proto", fileDescriptor5) } + +var fileDescriptor5 = []byte{ + // 236 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0x41, 0x4b, 0xc3, 0x40, + 0x10, 0x85, 0x89, 0x88, 0x48, 0x40, 0x90, 0x7a, 0xb0, 0x94, 0x22, 0xd2, 0x93, 0xa7, 0x5d, 0x8a, + 0x47, 0xbd, 0x58, 0xf4, 0xa6, 0x50, 0x3c, 0x7a, 0x29, 0x93, 0x66, 0x1c, 0x17, 0xa6, 0x33, 0x4b, + 0x32, 0x04, 0xfd, 0x33, 0xfe, 0x56, 0x69, 0x36, 0x1b, 0x11, 0xea, 0x71, 0x79, 0xdf, 0xfb, 0xd8, + 0x37, 0xe5, 0x82, 0x54, 0x89, 0xd1, 0x43, 0x8c, 0x28, 0x14, 0x04, 0x7d, 0xb7, 0xf4, 0xac, 0x5b, + 0xb0, 0xa0, 0xe2, 0x62, 0xa3, 0xa6, 0x93, 0x8b, 0xc4, 0xb8, 0x91, 0x71, 0xdd, 0x72, 0x36, 0x1f, + 0x8b, 0xc1, 0x83, 0x88, 0x5a, 0xdf, 0x68, 0x53, 0x65, 0x36, 0x1d, 0x52, 0xfb, 0x8a, 0xe8, 0x19, + 0x8c, 0x85, 0x52, 0xb2, 0xf8, 0x2e, 0xca, 0xf3, 0xe7, 0xc1, 0xff, 0x82, 0x06, 0x35, 0x18, 0x4c, + 0x1e, 0xcb, 0xab, 0xd6, 0x40, 0x6a, 0x68, 0xea, 0x0d, 0x4a, 0x17, 0x1a, 0x95, 0x1d, 0x8a, 0x6d, + 0xa0, 0x83, 0xc0, 0x50, 0x31, 0x4e, 0x8f, 0xae, 0x8b, 0x9b, 0xd3, 0xd7, 0x79, 0xa6, 0x9e, 0x7e, + 0xa1, 0x87, 0xcc, 0xec, 0x2d, 0xef, 0x8c, 0x9f, 0xa1, 0x62, 0xfc, 0xc7, 0x72, 0x9c, 0x2c, 0x99, + 0x3a, 0x64, 0x59, 0x7d, 0x94, 0x97, 0x5b, 0xdd, 0xb9, 0x03, 0x9b, 0x57, 0x67, 0xf9, 0xe3, 0xeb, + 0xfd, 0x94, 0x75, 0xf1, 0x76, 0x3f, 0x50, 0xa4, 0x0c, 0x42, 0x4e, 0x1b, 0xf2, 0x84, 0xd2, 0x0f, + 0xf5, 0x29, 0x82, 0x18, 0xda, 0x3f, 0xc7, 0xbd, 0x1b, 0x1f, 0xd5, 0x49, 0x0f, 0xde, 0xfe, 0x04, + 0x00, 0x00, 0xff, 0xff, 0x93, 0x9b, 0x7c, 0xf8, 0x84, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/operation.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/operation.pb.go new file mode 100644 index 0000000..d5f5a00 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/operation.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/operation.proto +// DO NOT EDIT! + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Metadata for the given [google.longrunning.Operation][google.longrunning.Operation]. +type OperationMetadataV1 struct { + // API method that initiated this operation. Example: + // `google.appengine.v1.Versions.CreateVersion`. + // + // @OutputOnly + Method string `protobuf:"bytes,1,opt,name=method" json:"method,omitempty"` + // Time that this operation was created. + // + // @OutputOnly + InsertTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=insert_time,json=insertTime" json:"insert_time,omitempty"` + // Time that this operation completed. + // + // @OutputOnly + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // User who requested this operation. + // + // @OutputOnly + User string `protobuf:"bytes,4,opt,name=user" json:"user,omitempty"` + // Name of the resource that this operation is acting on. Example: + // `apps/myapp/services/default`. + // + // @OutputOnly + Target string `protobuf:"bytes,5,opt,name=target" json:"target,omitempty"` +} + +func (m *OperationMetadataV1) Reset() { *m = OperationMetadataV1{} } +func (m *OperationMetadataV1) String() string { return proto.CompactTextString(m) } +func (*OperationMetadataV1) ProtoMessage() {} +func (*OperationMetadataV1) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } + +func (m *OperationMetadataV1) GetMethod() string { + if m != nil { + return m.Method + } + return "" +} + +func (m *OperationMetadataV1) GetInsertTime() *google_protobuf2.Timestamp { + if m != nil { + return m.InsertTime + } + return nil +} + +func (m *OperationMetadataV1) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *OperationMetadataV1) GetUser() string { + if m != nil { + return m.User + } + return "" +} + +func (m *OperationMetadataV1) GetTarget() string { + if m != nil { + return m.Target + } + return "" +} + +func init() { + proto.RegisterType((*OperationMetadataV1)(nil), "google.appengine.v1.OperationMetadataV1") +} + +func init() { proto.RegisterFile("google/appengine/v1/operation.proto", fileDescriptor6) } + +var fileDescriptor6 = []byte{ + // 271 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x41, 0x4b, 0x03, 0x31, + 0x10, 0x85, 0x59, 0xad, 0x55, 0x53, 0xf0, 0xb0, 0x05, 0x5d, 0x16, 0xc1, 0xa2, 0x97, 0x9e, 0x12, + 0x56, 0xf1, 0x54, 0x4f, 0xbd, 0x8b, 0xa5, 0x88, 0x07, 0x2f, 0x92, 0xba, 0x63, 0x0c, 0x74, 0x67, + 0x42, 0x32, 0xed, 0xbf, 0xf4, 0x3f, 0xc9, 0x26, 0xbb, 0x0b, 0x82, 0xd0, 0x5b, 0x5e, 0xe6, 0x7d, + 0x79, 0x2f, 0x89, 0xb8, 0x33, 0x44, 0x66, 0x0b, 0x4a, 0x3b, 0x07, 0x68, 0x2c, 0x82, 0xda, 0x57, + 0x8a, 0x1c, 0x78, 0xcd, 0x96, 0x50, 0x3a, 0x4f, 0x4c, 0xf9, 0x34, 0x99, 0xe4, 0x60, 0x92, 0xfb, + 0xaa, 0xbc, 0x1e, 0x48, 0xab, 0x34, 0x22, 0x71, 0x24, 0x42, 0x42, 0xca, 0x9b, 0x6e, 0x1a, 0xd5, + 0x66, 0xf7, 0xa5, 0xd8, 0x36, 0x10, 0x58, 0x37, 0x2e, 0x19, 0x6e, 0x7f, 0x32, 0x31, 0x7d, 0xe9, + 0x73, 0x9e, 0x81, 0x75, 0xad, 0x59, 0xbf, 0x55, 0xf9, 0xa5, 0x18, 0x37, 0xc0, 0xdf, 0x54, 0x17, + 0xd9, 0x2c, 0x9b, 0x9f, 0xaf, 0x3b, 0x95, 0x2f, 0xc4, 0xc4, 0x62, 0x00, 0xcf, 0x1f, 0xed, 0x49, + 0xc5, 0xd1, 0x2c, 0x9b, 0x4f, 0xee, 0x4b, 0xd9, 0x35, 0xeb, 0x63, 0xe4, 0x6b, 0x1f, 0xb3, 0x16, + 0xc9, 0xde, 0x6e, 0xe4, 0x8f, 0xe2, 0x0c, 0xb0, 0x4e, 0xe4, 0xf1, 0x41, 0xf2, 0x14, 0xb0, 0x8e, + 0x58, 0x2e, 0x46, 0xbb, 0x00, 0xbe, 0x18, 0xc5, 0x26, 0x71, 0xdd, 0xf6, 0x63, 0xed, 0x0d, 0x70, + 0x71, 0x92, 0xfa, 0x25, 0xb5, 0xb4, 0xe2, 0xea, 0x93, 0x1a, 0xf9, 0xcf, 0x4b, 0x2d, 0x2f, 0x86, + 0x7b, 0xae, 0xda, 0xb0, 0x55, 0xf6, 0xfe, 0xd4, 0xd9, 0x0c, 0x6d, 0x35, 0x1a, 0x49, 0xde, 0x28, + 0x03, 0x18, 0xab, 0xa8, 0x34, 0xd2, 0xce, 0x86, 0x3f, 0x9f, 0xb2, 0x18, 0xc4, 0x66, 0x1c, 0x8d, + 0x0f, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x8e, 0xb2, 0x00, 0xbc, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/service.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/service.pb.go new file mode 100644 index 0000000..222cb13 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/service.pb.go @@ -0,0 +1,166 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/service.proto +// DO NOT EDIT! + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Available sharding mechanisms. +type TrafficSplit_ShardBy int32 + +const ( + // Diversion method unspecified. + TrafficSplit_UNSPECIFIED TrafficSplit_ShardBy = 0 + // Diversion based on a specially named cookie, "GOOGAPPUID." The cookie + // must be set by the application itself or no diversion will occur. + TrafficSplit_COOKIE TrafficSplit_ShardBy = 1 + // Diversion based on applying the modulus operation to a fingerprint + // of the IP address. + TrafficSplit_IP TrafficSplit_ShardBy = 2 +) + +var TrafficSplit_ShardBy_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "COOKIE", + 2: "IP", +} +var TrafficSplit_ShardBy_value = map[string]int32{ + "UNSPECIFIED": 0, + "COOKIE": 1, + "IP": 2, +} + +func (x TrafficSplit_ShardBy) String() string { + return proto.EnumName(TrafficSplit_ShardBy_name, int32(x)) +} +func (TrafficSplit_ShardBy) EnumDescriptor() ([]byte, []int) { return fileDescriptor7, []int{1, 0} } + +// A Service resource is a logical component of an application that can share +// state and communicate in a secure fashion with other services. +// For example, an application that handles customer requests might +// include separate services to handle tasks such as backend data +// analysis or API requests from mobile devices. Each service has a +// collection of versions that define a specific set of code used to +// implement the functionality of that service. +type Service struct { + // Full path to the Service resource in the API. + // Example: `apps/myapp/services/default`. + // + // @OutputOnly + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Relative name of the service within the application. + // Example: `default`. + // + // @OutputOnly + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // Mapping that defines fractional HTTP traffic diversion to + // different versions within the service. + Split *TrafficSplit `protobuf:"bytes,3,opt,name=split" json:"split,omitempty"` +} + +func (m *Service) Reset() { *m = Service{} } +func (m *Service) String() string { return proto.CompactTextString(m) } +func (*Service) ProtoMessage() {} +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0} } + +func (m *Service) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Service) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Service) GetSplit() *TrafficSplit { + if m != nil { + return m.Split + } + return nil +} + +// Traffic routing configuration for versions within a single service. Traffic +// splits define how traffic directed to the service is assigned to versions. +type TrafficSplit struct { + // Mechanism used to determine which version a request is sent to. + // The traffic selection algorithm will + // be stable for either type until allocations are changed. + ShardBy TrafficSplit_ShardBy `protobuf:"varint,1,opt,name=shard_by,json=shardBy,enum=google.appengine.v1.TrafficSplit_ShardBy" json:"shard_by,omitempty"` + // Mapping from version IDs within the service to fractional + // (0.000, 1] allocations of traffic for that version. Each version can + // be specified only once, but some versions in the service may not + // have any traffic allocation. Services that have traffic allocated + // cannot be deleted until either the service is deleted or + // their traffic allocation is removed. Allocations must sum to 1. + // Up to two decimal place precision is supported for IP-based splits and + // up to three decimal places is supported for cookie-based splits. + Allocations map[string]float64 `protobuf:"bytes,2,rep,name=allocations" json:"allocations,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` +} + +func (m *TrafficSplit) Reset() { *m = TrafficSplit{} } +func (m *TrafficSplit) String() string { return proto.CompactTextString(m) } +func (*TrafficSplit) ProtoMessage() {} +func (*TrafficSplit) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{1} } + +func (m *TrafficSplit) GetShardBy() TrafficSplit_ShardBy { + if m != nil { + return m.ShardBy + } + return TrafficSplit_UNSPECIFIED +} + +func (m *TrafficSplit) GetAllocations() map[string]float64 { + if m != nil { + return m.Allocations + } + return nil +} + +func init() { + proto.RegisterType((*Service)(nil), "google.appengine.v1.Service") + proto.RegisterType((*TrafficSplit)(nil), "google.appengine.v1.TrafficSplit") + proto.RegisterEnum("google.appengine.v1.TrafficSplit_ShardBy", TrafficSplit_ShardBy_name, TrafficSplit_ShardBy_value) +} + +func init() { proto.RegisterFile("google/appengine/v1/service.proto", fileDescriptor7) } + +var fileDescriptor7 = []byte{ + // 356 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x51, 0x8b, 0xda, 0x40, + 0x10, 0xc7, 0x9b, 0xb5, 0x6a, 0x3b, 0x11, 0x1b, 0xb6, 0x85, 0x06, 0xe9, 0x83, 0xfa, 0x64, 0x5f, + 0x36, 0x98, 0x3e, 0xb4, 0xb4, 0xa5, 0x50, 0x35, 0x85, 0x50, 0x38, 0x43, 0xe2, 0xbd, 0xdc, 0xcb, + 0xb1, 0xc6, 0x75, 0x6f, 0xb9, 0xb8, 0x1b, 0x92, 0x5c, 0x20, 0x5f, 0xe5, 0x3e, 0xed, 0x91, 0x6c, + 0xf0, 0xbc, 0x43, 0xf0, 0x6d, 0x66, 0xf2, 0xfb, 0xff, 0x67, 0x32, 0xb3, 0x30, 0xe1, 0x4a, 0xf1, + 0x84, 0x39, 0x34, 0x4d, 0x99, 0xe4, 0x42, 0x32, 0xa7, 0x9c, 0x3b, 0x39, 0xcb, 0x4a, 0x11, 0x33, + 0x92, 0x66, 0xaa, 0x50, 0xf8, 0xa3, 0x46, 0xc8, 0x11, 0x21, 0xe5, 0x7c, 0xf4, 0xe5, 0xa8, 0x13, + 0x0e, 0x95, 0x52, 0x15, 0xb4, 0x10, 0x4a, 0xe6, 0x5a, 0x32, 0xdd, 0x43, 0x3f, 0xd2, 0x1e, 0x18, + 0xc3, 0x5b, 0x49, 0x0f, 0xcc, 0x36, 0xc6, 0xc6, 0xec, 0x7d, 0xd8, 0xc4, 0x78, 0x08, 0x48, 0xec, + 0x6c, 0xd4, 0x54, 0x90, 0xd8, 0xe1, 0xef, 0xd0, 0xcd, 0xd3, 0x44, 0x14, 0x76, 0x67, 0x6c, 0xcc, + 0x4c, 0x77, 0x42, 0xce, 0x74, 0x24, 0x9b, 0x8c, 0xee, 0xf7, 0x22, 0x8e, 0x6a, 0x30, 0xd4, 0xfc, + 0xf4, 0x11, 0xc1, 0xe0, 0xb4, 0x8e, 0x57, 0xf0, 0x2e, 0xbf, 0xa3, 0xd9, 0xee, 0x76, 0x5b, 0x35, + 0x1d, 0x87, 0xee, 0xd7, 0x8b, 0x66, 0x24, 0xaa, 0x15, 0x8b, 0x2a, 0xec, 0xe7, 0x3a, 0xc0, 0x1b, + 0x30, 0x69, 0x92, 0xa8, 0x58, 0xff, 0x93, 0x8d, 0xc6, 0x9d, 0x99, 0xe9, 0xba, 0x97, 0x8d, 0xfe, + 0x3e, 0x8b, 0x3c, 0x59, 0x64, 0x55, 0x78, 0x6a, 0x33, 0xfa, 0x03, 0xd6, 0x6b, 0x00, 0x5b, 0xd0, + 0xb9, 0x67, 0x55, 0xbb, 0x9c, 0x3a, 0xc4, 0x9f, 0xa0, 0x5b, 0xd2, 0xe4, 0x81, 0x35, 0xeb, 0x31, + 0x42, 0x9d, 0xfc, 0x44, 0x3f, 0x8c, 0x29, 0x81, 0x7e, 0x3b, 0x29, 0xfe, 0x00, 0xe6, 0xf5, 0x55, + 0x14, 0x78, 0x4b, 0xff, 0x9f, 0xef, 0xad, 0xac, 0x37, 0x18, 0xa0, 0xb7, 0x5c, 0xaf, 0xff, 0xfb, + 0x9e, 0x65, 0xe0, 0x1e, 0x20, 0x3f, 0xb0, 0xd0, 0x82, 0xc3, 0xe7, 0x58, 0x1d, 0xce, 0x4d, 0xbd, + 0x18, 0xb4, 0xd7, 0x09, 0xea, 0x6b, 0x05, 0xc6, 0xcd, 0xef, 0x16, 0xe2, 0x2a, 0xa1, 0x92, 0x13, + 0x95, 0x71, 0x87, 0x33, 0xd9, 0xdc, 0xd2, 0xd1, 0x9f, 0x68, 0x2a, 0xf2, 0x17, 0x8f, 0xe4, 0xd7, + 0x31, 0xd9, 0xf6, 0x1a, 0xf0, 0xdb, 0x53, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5f, 0xbc, 0x13, 0xf4, + 0x4c, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/version.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/version.pb.go new file mode 100644 index 0000000..331a9e5 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/version.pb.go @@ -0,0 +1,1073 @@ +// Code generated by protoc-gen-go. +// source: google/appengine/v1/version.proto +// DO NOT EDIT! + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Available inbound services. +type InboundServiceType int32 + +const ( + // Not specified. + InboundServiceType_INBOUND_SERVICE_UNSPECIFIED InboundServiceType = 0 + // Allows an application to receive mail. + InboundServiceType_INBOUND_SERVICE_MAIL InboundServiceType = 1 + // Allows an application to receive email-bound notifications. + InboundServiceType_INBOUND_SERVICE_MAIL_BOUNCE InboundServiceType = 2 + // Allows an application to receive error stanzas. + InboundServiceType_INBOUND_SERVICE_XMPP_ERROR InboundServiceType = 3 + // Allows an application to receive instant messages. + InboundServiceType_INBOUND_SERVICE_XMPP_MESSAGE InboundServiceType = 4 + // Allows an application to receive user subscription POSTs. + InboundServiceType_INBOUND_SERVICE_XMPP_SUBSCRIBE InboundServiceType = 5 + // Allows an application to receive a user's chat presence. + InboundServiceType_INBOUND_SERVICE_XMPP_PRESENCE InboundServiceType = 6 + // Registers an application for notifications when a client connects or + // disconnects from a channel. + InboundServiceType_INBOUND_SERVICE_CHANNEL_PRESENCE InboundServiceType = 7 + // Enables warmup requests. + InboundServiceType_INBOUND_SERVICE_WARMUP InboundServiceType = 9 +) + +var InboundServiceType_name = map[int32]string{ + 0: "INBOUND_SERVICE_UNSPECIFIED", + 1: "INBOUND_SERVICE_MAIL", + 2: "INBOUND_SERVICE_MAIL_BOUNCE", + 3: "INBOUND_SERVICE_XMPP_ERROR", + 4: "INBOUND_SERVICE_XMPP_MESSAGE", + 5: "INBOUND_SERVICE_XMPP_SUBSCRIBE", + 6: "INBOUND_SERVICE_XMPP_PRESENCE", + 7: "INBOUND_SERVICE_CHANNEL_PRESENCE", + 9: "INBOUND_SERVICE_WARMUP", +} +var InboundServiceType_value = map[string]int32{ + "INBOUND_SERVICE_UNSPECIFIED": 0, + "INBOUND_SERVICE_MAIL": 1, + "INBOUND_SERVICE_MAIL_BOUNCE": 2, + "INBOUND_SERVICE_XMPP_ERROR": 3, + "INBOUND_SERVICE_XMPP_MESSAGE": 4, + "INBOUND_SERVICE_XMPP_SUBSCRIBE": 5, + "INBOUND_SERVICE_XMPP_PRESENCE": 6, + "INBOUND_SERVICE_CHANNEL_PRESENCE": 7, + "INBOUND_SERVICE_WARMUP": 9, +} + +func (x InboundServiceType) String() string { + return proto.EnumName(InboundServiceType_name, int32(x)) +} +func (InboundServiceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } + +// Run states of a version. +type ServingStatus int32 + +const ( + // Not specified. + ServingStatus_SERVING_STATUS_UNSPECIFIED ServingStatus = 0 + // Currently serving. Instances are created according to the + // scaling settings of the version. + ServingStatus_SERVING ServingStatus = 1 + // Disabled. No instances will be created and the scaling + // settings are ignored until the state of the version changes + // to `SERVING`. + ServingStatus_STOPPED ServingStatus = 2 +) + +var ServingStatus_name = map[int32]string{ + 0: "SERVING_STATUS_UNSPECIFIED", + 1: "SERVING", + 2: "STOPPED", +} +var ServingStatus_value = map[string]int32{ + "SERVING_STATUS_UNSPECIFIED": 0, + "SERVING": 1, + "STOPPED": 2, +} + +func (x ServingStatus) String() string { + return proto.EnumName(ServingStatus_name, int32(x)) +} +func (ServingStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor8, []int{1} } + +// A Version resource is a specific set of source code and configuration files +// that are deployed into a service. +type Version struct { + // Full path to the Version resource in the API. Example: + // `apps/myapp/services/default/versions/v1`. + // + // @OutputOnly + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Relative name of the version within the service. Example: `v1`. + // Version names can contain only lowercase letters, numbers, or hyphens. + // Reserved names: "default", "latest", and any name with the prefix "ah-". + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // Controls how instances are created. + // + // Defaults to `AutomaticScaling`. + // + // Types that are valid to be assigned to Scaling: + // *Version_AutomaticScaling + // *Version_BasicScaling + // *Version_ManualScaling + Scaling isVersion_Scaling `protobuf_oneof:"scaling"` + // Before an application can receive email or XMPP messages, the application + // must be configured to enable the service. + InboundServices []InboundServiceType `protobuf:"varint,6,rep,packed,name=inbound_services,json=inboundServices,enum=google.appengine.v1.InboundServiceType" json:"inbound_services,omitempty"` + // Instance class that is used to run this version. Valid values are: + // * AutomaticScaling: `F1`, `F2`, `F4`, `F4_1G` + // * ManualScaling or BasicScaling: `B1`, `B2`, `B4`, `B8`, `B4_1G` + // + // Defaults to `F1` for AutomaticScaling and `B1` for ManualScaling or + // BasicScaling. + InstanceClass string `protobuf:"bytes,7,opt,name=instance_class,json=instanceClass" json:"instance_class,omitempty"` + // Extra network settings. Only applicable for VM runtimes. + Network *Network `protobuf:"bytes,8,opt,name=network" json:"network,omitempty"` + // Machine resources for this version. Only applicable for VM runtimes. + Resources *Resources `protobuf:"bytes,9,opt,name=resources" json:"resources,omitempty"` + // Desired runtime. Example: `python27`. + Runtime string `protobuf:"bytes,10,opt,name=runtime" json:"runtime,omitempty"` + // Whether multiple requests can be dispatched to this version at once. + Threadsafe bool `protobuf:"varint,11,opt,name=threadsafe" json:"threadsafe,omitempty"` + // Whether to deploy this version in a container on a virtual machine. + Vm bool `protobuf:"varint,12,opt,name=vm" json:"vm,omitempty"` + // Metadata settings that are supplied to this version to enable + // beta runtime features. + BetaSettings map[string]string `protobuf:"bytes,13,rep,name=beta_settings,json=betaSettings" json:"beta_settings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // App Engine execution environment for this version. + // + // Defaults to `standard`. + Env string `protobuf:"bytes,14,opt,name=env" json:"env,omitempty"` + // Current serving status of this version. Only the versions with a + // `SERVING` status create instances and can be billed. + // + // `SERVING_STATUS_UNSPECIFIED` is an invalid value. Defaults to `SERVING`. + ServingStatus ServingStatus `protobuf:"varint,15,opt,name=serving_status,json=servingStatus,enum=google.appengine.v1.ServingStatus" json:"serving_status,omitempty"` + // Email address of the user who created this version. + // + // @OutputOnly + CreatedBy string `protobuf:"bytes,16,opt,name=created_by,json=createdBy" json:"created_by,omitempty"` + // Time that this version was created. + // + // @OutputOnly + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,17,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Total size in bytes of all the files that are included in this version + // and curerntly hosted on the App Engine disk. + // + // @OutputOnly + DiskUsageBytes int64 `protobuf:"varint,18,opt,name=disk_usage_bytes,json=diskUsageBytes" json:"disk_usage_bytes,omitempty"` + // An ordered list of URL-matching patterns that should be applied to incoming + // requests. The first matching URL handles the request and other request + // handlers are not attempted. + // + // Only returned in `GET` requests if `view=FULL` is set. + Handlers []*UrlMap `protobuf:"bytes,100,rep,name=handlers" json:"handlers,omitempty"` + // Custom static error pages. Limited to 10KB per page. + // + // Only returned in `GET` requests if `view=FULL` is set. + ErrorHandlers []*ErrorHandler `protobuf:"bytes,101,rep,name=error_handlers,json=errorHandlers" json:"error_handlers,omitempty"` + // Configuration for third-party Python runtime libraries that are required + // by the application. + // + // Only returned in `GET` requests if `view=FULL` is set. + Libraries []*Library `protobuf:"bytes,102,rep,name=libraries" json:"libraries,omitempty"` + // Serving configuration for + // [Google Cloud Endpoints](https://cloud.google.com/appengine/docs/python/endpoints/). + // + // Only returned in `GET` requests if `view=FULL` is set. + ApiConfig *ApiConfigHandler `protobuf:"bytes,103,opt,name=api_config,json=apiConfig" json:"api_config,omitempty"` + // Environment variables available to the application. + // + // Only returned in `GET` requests if `view=FULL` is set. + EnvVariables map[string]string `protobuf:"bytes,104,rep,name=env_variables,json=envVariables" json:"env_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Duration that static files should be cached by web proxies and browsers. + // Only applicable if the corresponding + // [StaticFilesHandler](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#staticfileshandler) + // does not specify its own expiration time. + // + // Only returned in `GET` requests if `view=FULL` is set. + DefaultExpiration *google_protobuf1.Duration `protobuf:"bytes,105,opt,name=default_expiration,json=defaultExpiration" json:"default_expiration,omitempty"` + // Configures health checking for VM instances. Unhealthy instances are + // stopped and replaced with new instances. Only applicable for VM + // runtimes. + // + // Only returned in `GET` requests if `view=FULL` is set. + HealthCheck *HealthCheck `protobuf:"bytes,106,opt,name=health_check,json=healthCheck" json:"health_check,omitempty"` + // Files that match this pattern will not be built into this version. + // Only applicable for Go runtimes. + // + // Only returned in `GET` requests if `view=FULL` is set. + NobuildFilesRegex string `protobuf:"bytes,107,opt,name=nobuild_files_regex,json=nobuildFilesRegex" json:"nobuild_files_regex,omitempty"` + // Code and application artifacts that make up this version. + // + // Only returned in `GET` requests if `view=FULL` is set. + Deployment *Deployment `protobuf:"bytes,108,opt,name=deployment" json:"deployment,omitempty"` + // Serving URL for this version. Example: + // "https://myversion-dot-myservice-dot-myapp.appspot.com" + // + // @OutputOnly + VersionUrl string `protobuf:"bytes,109,opt,name=version_url,json=versionUrl" json:"version_url,omitempty"` +} + +func (m *Version) Reset() { *m = Version{} } +func (m *Version) String() string { return proto.CompactTextString(m) } +func (*Version) ProtoMessage() {} +func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } + +type isVersion_Scaling interface { + isVersion_Scaling() +} + +type Version_AutomaticScaling struct { + AutomaticScaling *AutomaticScaling `protobuf:"bytes,3,opt,name=automatic_scaling,json=automaticScaling,oneof"` +} +type Version_BasicScaling struct { + BasicScaling *BasicScaling `protobuf:"bytes,4,opt,name=basic_scaling,json=basicScaling,oneof"` +} +type Version_ManualScaling struct { + ManualScaling *ManualScaling `protobuf:"bytes,5,opt,name=manual_scaling,json=manualScaling,oneof"` +} + +func (*Version_AutomaticScaling) isVersion_Scaling() {} +func (*Version_BasicScaling) isVersion_Scaling() {} +func (*Version_ManualScaling) isVersion_Scaling() {} + +func (m *Version) GetScaling() isVersion_Scaling { + if m != nil { + return m.Scaling + } + return nil +} + +func (m *Version) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Version) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Version) GetAutomaticScaling() *AutomaticScaling { + if x, ok := m.GetScaling().(*Version_AutomaticScaling); ok { + return x.AutomaticScaling + } + return nil +} + +func (m *Version) GetBasicScaling() *BasicScaling { + if x, ok := m.GetScaling().(*Version_BasicScaling); ok { + return x.BasicScaling + } + return nil +} + +func (m *Version) GetManualScaling() *ManualScaling { + if x, ok := m.GetScaling().(*Version_ManualScaling); ok { + return x.ManualScaling + } + return nil +} + +func (m *Version) GetInboundServices() []InboundServiceType { + if m != nil { + return m.InboundServices + } + return nil +} + +func (m *Version) GetInstanceClass() string { + if m != nil { + return m.InstanceClass + } + return "" +} + +func (m *Version) GetNetwork() *Network { + if m != nil { + return m.Network + } + return nil +} + +func (m *Version) GetResources() *Resources { + if m != nil { + return m.Resources + } + return nil +} + +func (m *Version) GetRuntime() string { + if m != nil { + return m.Runtime + } + return "" +} + +func (m *Version) GetThreadsafe() bool { + if m != nil { + return m.Threadsafe + } + return false +} + +func (m *Version) GetVm() bool { + if m != nil { + return m.Vm + } + return false +} + +func (m *Version) GetBetaSettings() map[string]string { + if m != nil { + return m.BetaSettings + } + return nil +} + +func (m *Version) GetEnv() string { + if m != nil { + return m.Env + } + return "" +} + +func (m *Version) GetServingStatus() ServingStatus { + if m != nil { + return m.ServingStatus + } + return ServingStatus_SERVING_STATUS_UNSPECIFIED +} + +func (m *Version) GetCreatedBy() string { + if m != nil { + return m.CreatedBy + } + return "" +} + +func (m *Version) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Version) GetDiskUsageBytes() int64 { + if m != nil { + return m.DiskUsageBytes + } + return 0 +} + +func (m *Version) GetHandlers() []*UrlMap { + if m != nil { + return m.Handlers + } + return nil +} + +func (m *Version) GetErrorHandlers() []*ErrorHandler { + if m != nil { + return m.ErrorHandlers + } + return nil +} + +func (m *Version) GetLibraries() []*Library { + if m != nil { + return m.Libraries + } + return nil +} + +func (m *Version) GetApiConfig() *ApiConfigHandler { + if m != nil { + return m.ApiConfig + } + return nil +} + +func (m *Version) GetEnvVariables() map[string]string { + if m != nil { + return m.EnvVariables + } + return nil +} + +func (m *Version) GetDefaultExpiration() *google_protobuf1.Duration { + if m != nil { + return m.DefaultExpiration + } + return nil +} + +func (m *Version) GetHealthCheck() *HealthCheck { + if m != nil { + return m.HealthCheck + } + return nil +} + +func (m *Version) GetNobuildFilesRegex() string { + if m != nil { + return m.NobuildFilesRegex + } + return "" +} + +func (m *Version) GetDeployment() *Deployment { + if m != nil { + return m.Deployment + } + return nil +} + +func (m *Version) GetVersionUrl() string { + if m != nil { + return m.VersionUrl + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Version) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Version_OneofMarshaler, _Version_OneofUnmarshaler, _Version_OneofSizer, []interface{}{ + (*Version_AutomaticScaling)(nil), + (*Version_BasicScaling)(nil), + (*Version_ManualScaling)(nil), + } +} + +func _Version_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Version) + // scaling + switch x := m.Scaling.(type) { + case *Version_AutomaticScaling: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AutomaticScaling); err != nil { + return err + } + case *Version_BasicScaling: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BasicScaling); err != nil { + return err + } + case *Version_ManualScaling: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ManualScaling); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Version.Scaling has unexpected type %T", x) + } + return nil +} + +func _Version_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Version) + switch tag { + case 3: // scaling.automatic_scaling + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AutomaticScaling) + err := b.DecodeMessage(msg) + m.Scaling = &Version_AutomaticScaling{msg} + return true, err + case 4: // scaling.basic_scaling + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BasicScaling) + err := b.DecodeMessage(msg) + m.Scaling = &Version_BasicScaling{msg} + return true, err + case 5: // scaling.manual_scaling + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ManualScaling) + err := b.DecodeMessage(msg) + m.Scaling = &Version_ManualScaling{msg} + return true, err + default: + return false, nil + } +} + +func _Version_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Version) + // scaling + switch x := m.Scaling.(type) { + case *Version_AutomaticScaling: + s := proto.Size(x.AutomaticScaling) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Version_BasicScaling: + s := proto.Size(x.BasicScaling) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Version_ManualScaling: + s := proto.Size(x.ManualScaling) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Automatic scaling is based on request rate, response latencies, and other +// application metrics. +type AutomaticScaling struct { + // Amount of time that the + // [Autoscaler](https://cloud.google.com/compute/docs/autoscaler/) + // should wait between changes to the number of virtual machines. + // Only applicable for VM runtimes. + CoolDownPeriod *google_protobuf1.Duration `protobuf:"bytes,1,opt,name=cool_down_period,json=coolDownPeriod" json:"cool_down_period,omitempty"` + // Target scaling by CPU usage. + CpuUtilization *CpuUtilization `protobuf:"bytes,2,opt,name=cpu_utilization,json=cpuUtilization" json:"cpu_utilization,omitempty"` + // Number of concurrent requests an automatic scaling instance can accept + // before the scheduler spawns a new instance. + // + // Defaults to a runtime-specific value. + MaxConcurrentRequests int32 `protobuf:"varint,3,opt,name=max_concurrent_requests,json=maxConcurrentRequests" json:"max_concurrent_requests,omitempty"` + // Maximum number of idle instances that should be maintained for this + // version. + MaxIdleInstances int32 `protobuf:"varint,4,opt,name=max_idle_instances,json=maxIdleInstances" json:"max_idle_instances,omitempty"` + // Maximum number of instances that should be started to handle requests. + MaxTotalInstances int32 `protobuf:"varint,5,opt,name=max_total_instances,json=maxTotalInstances" json:"max_total_instances,omitempty"` + // Maximum amount of time that a request should wait in the pending queue + // before starting a new instance to handle it. + MaxPendingLatency *google_protobuf1.Duration `protobuf:"bytes,6,opt,name=max_pending_latency,json=maxPendingLatency" json:"max_pending_latency,omitempty"` + // Minimum number of idle instances that should be maintained for + // this version. Only applicable for the default version of a service. + MinIdleInstances int32 `protobuf:"varint,7,opt,name=min_idle_instances,json=minIdleInstances" json:"min_idle_instances,omitempty"` + // Minimum number of instances that should be maintained for this version. + MinTotalInstances int32 `protobuf:"varint,8,opt,name=min_total_instances,json=minTotalInstances" json:"min_total_instances,omitempty"` + // Minimum amount of time a request should wait in the pending queue before + // starting a new instance to handle it. + MinPendingLatency *google_protobuf1.Duration `protobuf:"bytes,9,opt,name=min_pending_latency,json=minPendingLatency" json:"min_pending_latency,omitempty"` + // Target scaling by request utilization. + RequestUtilization *RequestUtilization `protobuf:"bytes,10,opt,name=request_utilization,json=requestUtilization" json:"request_utilization,omitempty"` + // Target scaling by disk usage. + DiskUtilization *DiskUtilization `protobuf:"bytes,11,opt,name=disk_utilization,json=diskUtilization" json:"disk_utilization,omitempty"` + // Target scaling by network usage. + NetworkUtilization *NetworkUtilization `protobuf:"bytes,12,opt,name=network_utilization,json=networkUtilization" json:"network_utilization,omitempty"` +} + +func (m *AutomaticScaling) Reset() { *m = AutomaticScaling{} } +func (m *AutomaticScaling) String() string { return proto.CompactTextString(m) } +func (*AutomaticScaling) ProtoMessage() {} +func (*AutomaticScaling) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{1} } + +func (m *AutomaticScaling) GetCoolDownPeriod() *google_protobuf1.Duration { + if m != nil { + return m.CoolDownPeriod + } + return nil +} + +func (m *AutomaticScaling) GetCpuUtilization() *CpuUtilization { + if m != nil { + return m.CpuUtilization + } + return nil +} + +func (m *AutomaticScaling) GetMaxConcurrentRequests() int32 { + if m != nil { + return m.MaxConcurrentRequests + } + return 0 +} + +func (m *AutomaticScaling) GetMaxIdleInstances() int32 { + if m != nil { + return m.MaxIdleInstances + } + return 0 +} + +func (m *AutomaticScaling) GetMaxTotalInstances() int32 { + if m != nil { + return m.MaxTotalInstances + } + return 0 +} + +func (m *AutomaticScaling) GetMaxPendingLatency() *google_protobuf1.Duration { + if m != nil { + return m.MaxPendingLatency + } + return nil +} + +func (m *AutomaticScaling) GetMinIdleInstances() int32 { + if m != nil { + return m.MinIdleInstances + } + return 0 +} + +func (m *AutomaticScaling) GetMinTotalInstances() int32 { + if m != nil { + return m.MinTotalInstances + } + return 0 +} + +func (m *AutomaticScaling) GetMinPendingLatency() *google_protobuf1.Duration { + if m != nil { + return m.MinPendingLatency + } + return nil +} + +func (m *AutomaticScaling) GetRequestUtilization() *RequestUtilization { + if m != nil { + return m.RequestUtilization + } + return nil +} + +func (m *AutomaticScaling) GetDiskUtilization() *DiskUtilization { + if m != nil { + return m.DiskUtilization + } + return nil +} + +func (m *AutomaticScaling) GetNetworkUtilization() *NetworkUtilization { + if m != nil { + return m.NetworkUtilization + } + return nil +} + +// A service with basic scaling will create an instance when the application +// receives a request. The instance will be turned down when the app becomes +// idle. Basic scaling is ideal for work that is intermittent or driven by +// user activity. +type BasicScaling struct { + // Duration of time after the last request that an instance must wait before + // the instance is shut down. + IdleTimeout *google_protobuf1.Duration `protobuf:"bytes,1,opt,name=idle_timeout,json=idleTimeout" json:"idle_timeout,omitempty"` + // Maximum number of instances to create for this version. + MaxInstances int32 `protobuf:"varint,2,opt,name=max_instances,json=maxInstances" json:"max_instances,omitempty"` +} + +func (m *BasicScaling) Reset() { *m = BasicScaling{} } +func (m *BasicScaling) String() string { return proto.CompactTextString(m) } +func (*BasicScaling) ProtoMessage() {} +func (*BasicScaling) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{2} } + +func (m *BasicScaling) GetIdleTimeout() *google_protobuf1.Duration { + if m != nil { + return m.IdleTimeout + } + return nil +} + +func (m *BasicScaling) GetMaxInstances() int32 { + if m != nil { + return m.MaxInstances + } + return 0 +} + +// A service with manual scaling runs continuously, allowing you to perform +// complex initialization and rely on the state of its memory over time. +type ManualScaling struct { + // Number of instances to assign to the service at the start. This number + // can later be altered by using the + // [Modules API](https://cloud.google.com/appengine/docs/python/modules/functions) + // `set_num_instances()` function. + Instances int32 `protobuf:"varint,1,opt,name=instances" json:"instances,omitempty"` +} + +func (m *ManualScaling) Reset() { *m = ManualScaling{} } +func (m *ManualScaling) String() string { return proto.CompactTextString(m) } +func (*ManualScaling) ProtoMessage() {} +func (*ManualScaling) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{3} } + +func (m *ManualScaling) GetInstances() int32 { + if m != nil { + return m.Instances + } + return 0 +} + +// Target scaling by CPU usage. +type CpuUtilization struct { + // Period of time over which CPU utilization is calculated. + AggregationWindowLength *google_protobuf1.Duration `protobuf:"bytes,1,opt,name=aggregation_window_length,json=aggregationWindowLength" json:"aggregation_window_length,omitempty"` + // Target CPU utilization ratio to maintain when scaling. Must be between 0 + // and 1. + TargetUtilization float64 `protobuf:"fixed64,2,opt,name=target_utilization,json=targetUtilization" json:"target_utilization,omitempty"` +} + +func (m *CpuUtilization) Reset() { *m = CpuUtilization{} } +func (m *CpuUtilization) String() string { return proto.CompactTextString(m) } +func (*CpuUtilization) ProtoMessage() {} +func (*CpuUtilization) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{4} } + +func (m *CpuUtilization) GetAggregationWindowLength() *google_protobuf1.Duration { + if m != nil { + return m.AggregationWindowLength + } + return nil +} + +func (m *CpuUtilization) GetTargetUtilization() float64 { + if m != nil { + return m.TargetUtilization + } + return 0 +} + +// Target scaling by request utilization. Only applicable for VM runtimes. +type RequestUtilization struct { + // Target requests per second. + TargetRequestCountPerSecond int32 `protobuf:"varint,1,opt,name=target_request_count_per_second,json=targetRequestCountPerSecond" json:"target_request_count_per_second,omitempty"` + // Target number of concurrent requests. + TargetConcurrentRequests int32 `protobuf:"varint,2,opt,name=target_concurrent_requests,json=targetConcurrentRequests" json:"target_concurrent_requests,omitempty"` +} + +func (m *RequestUtilization) Reset() { *m = RequestUtilization{} } +func (m *RequestUtilization) String() string { return proto.CompactTextString(m) } +func (*RequestUtilization) ProtoMessage() {} +func (*RequestUtilization) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{5} } + +func (m *RequestUtilization) GetTargetRequestCountPerSecond() int32 { + if m != nil { + return m.TargetRequestCountPerSecond + } + return 0 +} + +func (m *RequestUtilization) GetTargetConcurrentRequests() int32 { + if m != nil { + return m.TargetConcurrentRequests + } + return 0 +} + +// Target scaling by disk usage. Only applicable for VM runtimes. +type DiskUtilization struct { + // Target bytes written per second. + TargetWriteBytesPerSecond int32 `protobuf:"varint,14,opt,name=target_write_bytes_per_second,json=targetWriteBytesPerSecond" json:"target_write_bytes_per_second,omitempty"` + // Target ops written per second. + TargetWriteOpsPerSecond int32 `protobuf:"varint,15,opt,name=target_write_ops_per_second,json=targetWriteOpsPerSecond" json:"target_write_ops_per_second,omitempty"` + // Target bytes read per second. + TargetReadBytesPerSecond int32 `protobuf:"varint,16,opt,name=target_read_bytes_per_second,json=targetReadBytesPerSecond" json:"target_read_bytes_per_second,omitempty"` + // Target ops read per seconds. + TargetReadOpsPerSecond int32 `protobuf:"varint,17,opt,name=target_read_ops_per_second,json=targetReadOpsPerSecond" json:"target_read_ops_per_second,omitempty"` +} + +func (m *DiskUtilization) Reset() { *m = DiskUtilization{} } +func (m *DiskUtilization) String() string { return proto.CompactTextString(m) } +func (*DiskUtilization) ProtoMessage() {} +func (*DiskUtilization) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{6} } + +func (m *DiskUtilization) GetTargetWriteBytesPerSecond() int32 { + if m != nil { + return m.TargetWriteBytesPerSecond + } + return 0 +} + +func (m *DiskUtilization) GetTargetWriteOpsPerSecond() int32 { + if m != nil { + return m.TargetWriteOpsPerSecond + } + return 0 +} + +func (m *DiskUtilization) GetTargetReadBytesPerSecond() int32 { + if m != nil { + return m.TargetReadBytesPerSecond + } + return 0 +} + +func (m *DiskUtilization) GetTargetReadOpsPerSecond() int32 { + if m != nil { + return m.TargetReadOpsPerSecond + } + return 0 +} + +// Target scaling by network usage. Only applicable for VM runtimes. +type NetworkUtilization struct { + // Target bytes sent per second. + TargetSentBytesPerSecond int32 `protobuf:"varint,1,opt,name=target_sent_bytes_per_second,json=targetSentBytesPerSecond" json:"target_sent_bytes_per_second,omitempty"` + // Target packets sent per second. + TargetSentPacketsPerSecond int32 `protobuf:"varint,11,opt,name=target_sent_packets_per_second,json=targetSentPacketsPerSecond" json:"target_sent_packets_per_second,omitempty"` + // Target bytes received per second. + TargetReceivedBytesPerSecond int32 `protobuf:"varint,12,opt,name=target_received_bytes_per_second,json=targetReceivedBytesPerSecond" json:"target_received_bytes_per_second,omitempty"` + // Target packets received per second. + TargetReceivedPacketsPerSecond int32 `protobuf:"varint,13,opt,name=target_received_packets_per_second,json=targetReceivedPacketsPerSecond" json:"target_received_packets_per_second,omitempty"` +} + +func (m *NetworkUtilization) Reset() { *m = NetworkUtilization{} } +func (m *NetworkUtilization) String() string { return proto.CompactTextString(m) } +func (*NetworkUtilization) ProtoMessage() {} +func (*NetworkUtilization) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{7} } + +func (m *NetworkUtilization) GetTargetSentBytesPerSecond() int32 { + if m != nil { + return m.TargetSentBytesPerSecond + } + return 0 +} + +func (m *NetworkUtilization) GetTargetSentPacketsPerSecond() int32 { + if m != nil { + return m.TargetSentPacketsPerSecond + } + return 0 +} + +func (m *NetworkUtilization) GetTargetReceivedBytesPerSecond() int32 { + if m != nil { + return m.TargetReceivedBytesPerSecond + } + return 0 +} + +func (m *NetworkUtilization) GetTargetReceivedPacketsPerSecond() int32 { + if m != nil { + return m.TargetReceivedPacketsPerSecond + } + return 0 +} + +// Extra network settings. Only applicable for VM runtimes. +type Network struct { + // List of ports, or port pairs, to forward from the virtual machine to the + // application container. + ForwardedPorts []string `protobuf:"bytes,1,rep,name=forwarded_ports,json=forwardedPorts" json:"forwarded_ports,omitempty"` + // Tag to apply to the VM instance during creation. + InstanceTag string `protobuf:"bytes,2,opt,name=instance_tag,json=instanceTag" json:"instance_tag,omitempty"` + // Google Cloud Platform network where the virtual machines are created. + // Specify the short name, not the resource path. + // + // Defaults to `default`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +} + +func (m *Network) Reset() { *m = Network{} } +func (m *Network) String() string { return proto.CompactTextString(m) } +func (*Network) ProtoMessage() {} +func (*Network) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{8} } + +func (m *Network) GetForwardedPorts() []string { + if m != nil { + return m.ForwardedPorts + } + return nil +} + +func (m *Network) GetInstanceTag() string { + if m != nil { + return m.InstanceTag + } + return "" +} + +func (m *Network) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Machine resources for a version. +type Resources struct { + // Number of CPU cores needed. + Cpu float64 `protobuf:"fixed64,1,opt,name=cpu" json:"cpu,omitempty"` + // Disk size (GB) needed. + DiskGb float64 `protobuf:"fixed64,2,opt,name=disk_gb,json=diskGb" json:"disk_gb,omitempty"` + // Memory (GB) needed. + MemoryGb float64 `protobuf:"fixed64,3,opt,name=memory_gb,json=memoryGb" json:"memory_gb,omitempty"` +} + +func (m *Resources) Reset() { *m = Resources{} } +func (m *Resources) String() string { return proto.CompactTextString(m) } +func (*Resources) ProtoMessage() {} +func (*Resources) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{9} } + +func (m *Resources) GetCpu() float64 { + if m != nil { + return m.Cpu + } + return 0 +} + +func (m *Resources) GetDiskGb() float64 { + if m != nil { + return m.DiskGb + } + return 0 +} + +func (m *Resources) GetMemoryGb() float64 { + if m != nil { + return m.MemoryGb + } + return 0 +} + +func init() { + proto.RegisterType((*Version)(nil), "google.appengine.v1.Version") + proto.RegisterType((*AutomaticScaling)(nil), "google.appengine.v1.AutomaticScaling") + proto.RegisterType((*BasicScaling)(nil), "google.appengine.v1.BasicScaling") + proto.RegisterType((*ManualScaling)(nil), "google.appengine.v1.ManualScaling") + proto.RegisterType((*CpuUtilization)(nil), "google.appengine.v1.CpuUtilization") + proto.RegisterType((*RequestUtilization)(nil), "google.appengine.v1.RequestUtilization") + proto.RegisterType((*DiskUtilization)(nil), "google.appengine.v1.DiskUtilization") + proto.RegisterType((*NetworkUtilization)(nil), "google.appengine.v1.NetworkUtilization") + proto.RegisterType((*Network)(nil), "google.appengine.v1.Network") + proto.RegisterType((*Resources)(nil), "google.appengine.v1.Resources") + proto.RegisterEnum("google.appengine.v1.InboundServiceType", InboundServiceType_name, InboundServiceType_value) + proto.RegisterEnum("google.appengine.v1.ServingStatus", ServingStatus_name, ServingStatus_value) +} + +func init() { proto.RegisterFile("google/appengine/v1/version.proto", fileDescriptor8) } + +var fileDescriptor8 = []byte{ + // 1767 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0x5d, 0x73, 0xdb, 0xc6, + 0x15, 0x0d, 0x29, 0x4b, 0x14, 0x2f, 0x3f, 0x04, 0xad, 0xd3, 0x08, 0x96, 0x64, 0x89, 0x66, 0x92, + 0xb1, 0x26, 0xd3, 0x50, 0x13, 0x77, 0x26, 0xed, 0x38, 0x9e, 0xa6, 0x22, 0x45, 0x5b, 0x6c, 0xf5, + 0xc1, 0x01, 0x48, 0x3b, 0xd3, 0x17, 0xcc, 0x12, 0x58, 0x41, 0x5b, 0x01, 0x0b, 0x64, 0xb1, 0xa0, + 0xc4, 0xfe, 0x87, 0x3e, 0xb6, 0xd3, 0x1f, 0xd1, 0xc7, 0xbe, 0xf5, 0xcf, 0x75, 0x76, 0x01, 0x90, + 0x20, 0x89, 0xd8, 0xed, 0x1b, 0xf7, 0xee, 0x39, 0x67, 0x0f, 0xee, 0xde, 0xbd, 0x0b, 0x10, 0x5e, + 0xb8, 0x41, 0xe0, 0x7a, 0xe4, 0x14, 0x87, 0x21, 0x61, 0x2e, 0x65, 0xe4, 0x74, 0xfa, 0xdd, 0xe9, + 0x94, 0xf0, 0x88, 0x06, 0xac, 0x13, 0xf2, 0x40, 0x04, 0xe8, 0x69, 0x02, 0xe9, 0xcc, 0x21, 0x9d, + 0xe9, 0x77, 0xfb, 0x87, 0x73, 0x1e, 0x3d, 0xc5, 0x8c, 0x05, 0x02, 0x0b, 0x1a, 0xb0, 0x28, 0xa1, + 0xec, 0xb7, 0x8b, 0x54, 0x71, 0x18, 0x5a, 0x33, 0xec, 0x7b, 0x29, 0xa6, 0x55, 0x84, 0x71, 0x48, + 0xe8, 0x05, 0xb3, 0x14, 0x71, 0x94, 0x22, 0xd4, 0x68, 0x12, 0xdf, 0x9e, 0x3a, 0x31, 0x57, 0xcb, + 0xa4, 0xf3, 0xc7, 0xab, 0xf3, 0x82, 0xfa, 0x24, 0x12, 0xd8, 0x0f, 0x13, 0x40, 0xfb, 0xef, 0x0d, + 0xa8, 0xbc, 0x4f, 0x9e, 0x05, 0x21, 0x78, 0xc2, 0xb0, 0x4f, 0xf4, 0x52, 0xab, 0x74, 0x52, 0x35, + 0xd4, 0x6f, 0xd4, 0x84, 0x32, 0x75, 0xf4, 0xb2, 0x8a, 0x94, 0xa9, 0x83, 0x46, 0xb0, 0x8b, 0x63, + 0x11, 0xf8, 0x58, 0x50, 0xdb, 0x8a, 0x6c, 0xec, 0x51, 0xe6, 0xea, 0x1b, 0xad, 0xd2, 0x49, 0xed, + 0xd5, 0xd7, 0x9d, 0x82, 0x2c, 0x74, 0xce, 0x32, 0xb4, 0x99, 0x80, 0x2f, 0x3e, 0x33, 0x34, 0xbc, + 0x12, 0x43, 0x17, 0xd0, 0x98, 0xe0, 0x28, 0xa7, 0xf8, 0x44, 0x29, 0xbe, 0x28, 0x54, 0xec, 0x4a, + 0xe4, 0x42, 0xad, 0x3e, 0xc9, 0x8d, 0xd1, 0x9f, 0xa0, 0xe9, 0x63, 0x16, 0x63, 0x6f, 0x2e, 0xb5, + 0xa9, 0xa4, 0xda, 0x85, 0x52, 0x57, 0x0a, 0xba, 0xd0, 0x6a, 0xf8, 0xf9, 0x00, 0x32, 0x40, 0xa3, + 0x6c, 0x12, 0xc4, 0xcc, 0xb1, 0x22, 0xc2, 0xa7, 0xd4, 0x26, 0x91, 0xbe, 0xd5, 0xda, 0x38, 0x69, + 0xbe, 0x7a, 0x59, 0x28, 0x37, 0x48, 0xc0, 0x66, 0x82, 0x1d, 0xcd, 0x42, 0x62, 0xec, 0xd0, 0xa5, + 0x58, 0x84, 0xbe, 0x86, 0x26, 0x65, 0x91, 0xc0, 0xcc, 0x26, 0x96, 0xed, 0xe1, 0x28, 0xd2, 0x2b, + 0x2a, 0xb9, 0x8d, 0x2c, 0xda, 0x93, 0x41, 0xf4, 0x3d, 0x54, 0x18, 0x11, 0x0f, 0x01, 0xbf, 0xd7, + 0xb7, 0xd5, 0x03, 0x1c, 0x16, 0xae, 0x78, 0x9d, 0x60, 0x8c, 0x0c, 0x8c, 0xde, 0x40, 0x95, 0x93, + 0x28, 0x88, 0xb9, 0xf4, 0x5a, 0x55, 0xcc, 0xa3, 0x42, 0xa6, 0x91, 0xa1, 0x8c, 0x05, 0x01, 0xe9, + 0x50, 0xe1, 0x31, 0x93, 0x35, 0xa2, 0x83, 0x72, 0x95, 0x0d, 0xd1, 0x11, 0x80, 0xb8, 0xe3, 0x04, + 0x3b, 0x11, 0xbe, 0x25, 0x7a, 0xad, 0x55, 0x3a, 0xd9, 0x36, 0x72, 0x11, 0x59, 0x27, 0x53, 0x5f, + 0xaf, 0xab, 0x78, 0x79, 0xea, 0x23, 0x13, 0x1a, 0x13, 0x22, 0xb0, 0x15, 0x11, 0x21, 0x28, 0x73, + 0x23, 0xbd, 0xd1, 0xda, 0x38, 0xa9, 0xbd, 0xea, 0x14, 0x7a, 0x49, 0x0b, 0xb0, 0xd3, 0x25, 0x02, + 0x9b, 0x29, 0xa1, 0xcf, 0x04, 0x9f, 0x19, 0xf5, 0x49, 0x2e, 0x84, 0x34, 0xd8, 0x20, 0x6c, 0xaa, + 0x37, 0x95, 0x35, 0xf9, 0x13, 0x0d, 0xa0, 0xa9, 0x76, 0x86, 0xb9, 0x56, 0x24, 0xb0, 0x88, 0x23, + 0x7d, 0xa7, 0x55, 0x3a, 0x69, 0xfe, 0xc2, 0x76, 0x9b, 0x09, 0xd4, 0x54, 0x48, 0xa3, 0x11, 0xe5, + 0x87, 0xe8, 0x39, 0x80, 0xcd, 0x09, 0x16, 0xc4, 0xb1, 0x26, 0x33, 0x5d, 0x53, 0x6b, 0x54, 0xd3, + 0x48, 0x77, 0x86, 0x7e, 0x80, 0x5a, 0x32, 0xb0, 0x54, 0x7a, 0x76, 0x55, 0x6a, 0xf7, 0xb3, 0x65, + 0xb2, 0xf3, 0xd5, 0x19, 0x65, 0xe7, 0xcb, 0x48, 0xd5, 0x64, 0x00, 0x9d, 0x80, 0xe6, 0xd0, 0xe8, + 0xde, 0x8a, 0x23, 0xec, 0x12, 0x6b, 0x32, 0x13, 0x24, 0xd2, 0x51, 0xab, 0x74, 0xb2, 0x61, 0x34, + 0x65, 0x7c, 0x2c, 0xc3, 0x5d, 0x19, 0x45, 0xbf, 0x85, 0xed, 0x3b, 0xcc, 0x1c, 0x8f, 0xf0, 0x48, + 0x77, 0x54, 0xca, 0x0e, 0x0a, 0x1f, 0x65, 0xcc, 0xbd, 0x2b, 0x1c, 0x1a, 0x73, 0x30, 0xba, 0x80, + 0x26, 0xe1, 0x3c, 0xe0, 0xd6, 0x9c, 0x4e, 0x14, 0xbd, 0xf8, 0x0c, 0xf5, 0x25, 0xf4, 0x22, 0x41, + 0x1a, 0x0d, 0x92, 0x1b, 0x45, 0xe8, 0x35, 0x54, 0x3d, 0x3a, 0xe1, 0x98, 0x53, 0x12, 0xe9, 0xb7, + 0x4a, 0xa4, 0xb8, 0xf8, 0x2e, 0x15, 0x6a, 0x66, 0x2c, 0xe0, 0xe8, 0x1c, 0x00, 0x87, 0xd4, 0xb2, + 0x03, 0x76, 0x4b, 0x5d, 0xdd, 0xfd, 0x58, 0x5f, 0x08, 0x69, 0x4f, 0xa1, 0x32, 0x17, 0x55, 0x9c, + 0x45, 0x64, 0xf1, 0x10, 0x36, 0xb5, 0xa6, 0x98, 0x53, 0x3c, 0xf1, 0x48, 0xa4, 0xdf, 0xfd, 0x0f, + 0xc5, 0xd3, 0x67, 0xd3, 0xf7, 0x19, 0x21, 0x2d, 0x1e, 0x92, 0x0b, 0xa1, 0x0b, 0x40, 0x0e, 0xb9, + 0xc5, 0xb1, 0x27, 0x2c, 0xf2, 0x18, 0xd2, 0xa4, 0x4d, 0xea, 0x54, 0x59, 0x7c, 0xb6, 0xb6, 0x8f, + 0xe7, 0x69, 0x1f, 0x35, 0x76, 0x53, 0x52, 0x7f, 0xce, 0x41, 0x3d, 0xa8, 0xdf, 0x11, 0xec, 0x89, + 0x3b, 0xcb, 0xbe, 0x23, 0xf6, 0xbd, 0xfe, 0x17, 0xa5, 0xd1, 0x2a, 0x74, 0x77, 0xa1, 0x80, 0x3d, + 0x89, 0x33, 0x6a, 0x77, 0x8b, 0x01, 0xea, 0xc0, 0x53, 0x16, 0x4c, 0x62, 0xea, 0x39, 0xd6, 0x2d, + 0xf5, 0x48, 0x64, 0x71, 0xe2, 0x92, 0x47, 0xfd, 0x5e, 0xd5, 0xdd, 0x6e, 0x3a, 0xf5, 0x56, 0xce, + 0x18, 0x72, 0x02, 0xfd, 0x08, 0x90, 0x74, 0x7e, 0x9f, 0x30, 0xa1, 0x7b, 0x6a, 0xc9, 0xe3, 0xc2, + 0x25, 0xcf, 0xe7, 0x30, 0x23, 0x47, 0x41, 0xc7, 0x50, 0x4b, 0x2f, 0x2d, 0x2b, 0xe6, 0x9e, 0xee, + 0xab, 0x85, 0x20, 0x0d, 0x8d, 0xb9, 0xb7, 0xff, 0x23, 0xec, 0xae, 0x1d, 0x40, 0x79, 0xe4, 0xee, + 0xc9, 0x2c, 0xbd, 0x12, 0xe4, 0x4f, 0xf4, 0x39, 0x6c, 0x4e, 0xb1, 0x17, 0x93, 0xf4, 0x52, 0x48, + 0x06, 0xaf, 0xcb, 0xbf, 0x2b, 0x49, 0x81, 0xb5, 0x4d, 0xf8, 0x7f, 0x04, 0xba, 0x55, 0xa8, 0xa4, + 0x5d, 0xbb, 0xfd, 0xef, 0x2d, 0xd0, 0x56, 0xaf, 0x0e, 0xd4, 0x03, 0xcd, 0x0e, 0x02, 0xcf, 0x72, + 0x82, 0x07, 0x66, 0x85, 0x84, 0xd3, 0xc0, 0x51, 0xc2, 0x1f, 0xdd, 0xc0, 0xa6, 0xa4, 0x9c, 0x07, + 0x0f, 0x6c, 0xa8, 0x08, 0xe8, 0x12, 0x76, 0xec, 0x30, 0xb6, 0x62, 0x41, 0x3d, 0xfa, 0xd7, 0xa4, + 0x08, 0xca, 0x4a, 0xe3, 0xcb, 0xc2, 0x6c, 0xf6, 0xc2, 0x78, 0xbc, 0x80, 0x1a, 0x4d, 0x7b, 0x69, + 0x8c, 0xbe, 0x87, 0x3d, 0x1f, 0x3f, 0xca, 0x82, 0xb7, 0x63, 0xce, 0x09, 0x13, 0x16, 0x27, 0x3f, + 0xc7, 0x24, 0x12, 0x91, 0xba, 0x15, 0x37, 0x8d, 0x5f, 0xf9, 0xf8, 0xb1, 0x37, 0x9f, 0x35, 0xd2, + 0x49, 0xf4, 0x6b, 0x40, 0x92, 0x47, 0x1d, 0x8f, 0x58, 0x59, 0xe7, 0x8f, 0xd4, 0xb5, 0xb7, 0x69, + 0x68, 0x3e, 0x7e, 0x1c, 0x38, 0x1e, 0x19, 0x64, 0x71, 0x59, 0x2c, 0x12, 0x2d, 0x02, 0x81, 0xbd, + 0x1c, 0x7c, 0x53, 0xc1, 0x77, 0x7d, 0xfc, 0x38, 0x92, 0x33, 0x0b, 0xfc, 0x20, 0xc1, 0x87, 0x84, + 0x39, 0xb2, 0x35, 0x7a, 0x58, 0x10, 0x66, 0xcf, 0xf4, 0xad, 0x4f, 0x16, 0xbb, 0x8f, 0x1f, 0x87, + 0x09, 0xe9, 0x32, 0xe1, 0x28, 0xa3, 0x94, 0xad, 0x1a, 0xad, 0xa4, 0x46, 0x29, 0x5b, 0x37, 0x4a, + 0xd9, 0x9a, 0xd1, 0xed, 0xd4, 0x28, 0x65, 0x05, 0x46, 0x29, 0x5b, 0x33, 0x5a, 0xfd, 0xb4, 0x51, + 0xca, 0x56, 0x8c, 0xfe, 0x04, 0x4f, 0xd3, 0xd4, 0x2f, 0xed, 0x2d, 0x28, 0xa9, 0x97, 0xbf, 0x70, + 0x07, 0x2a, 0x7c, 0x7e, 0x7f, 0x11, 0x5f, 0x8b, 0xa1, 0x9b, 0xac, 0x7b, 0xe7, 0x64, 0x6b, 0x4a, + 0xf6, 0xab, 0xe2, 0x03, 0x28, 0x5b, 0x7a, 0x4e, 0x73, 0xc7, 0x59, 0x0e, 0x48, 0xab, 0xe9, 0x7d, + 0xbd, 0xa4, 0x59, 0xff, 0x88, 0xd5, 0xf4, 0xa2, 0x5f, 0xb2, 0xca, 0xd6, 0x62, 0xed, 0x9f, 0xa1, + 0x9e, 0x7f, 0x3d, 0x42, 0x6f, 0xa0, 0xae, 0x76, 0x4e, 0xde, 0x59, 0x41, 0x2c, 0x3e, 0x7d, 0x5a, + 0x6a, 0x12, 0x3e, 0x4a, 0xd0, 0xe8, 0x4b, 0x68, 0xa8, 0x22, 0x9d, 0xef, 0x63, 0x59, 0xed, 0x63, + 0x5d, 0xd6, 0x67, 0x16, 0x6b, 0x7f, 0x0b, 0x8d, 0xa5, 0xd7, 0x28, 0x74, 0x08, 0xd5, 0x05, 0xa3, + 0xa4, 0x18, 0x8b, 0x40, 0xfb, 0x1f, 0x25, 0x68, 0x2e, 0x9f, 0x29, 0x34, 0x86, 0x67, 0xd8, 0x75, + 0x39, 0x71, 0xd5, 0xd0, 0x7a, 0xa0, 0xcc, 0x09, 0x1e, 0x2c, 0x8f, 0x30, 0x57, 0xdc, 0x7d, 0xda, + 0xf1, 0x5e, 0x8e, 0xfb, 0x41, 0x51, 0x2f, 0x15, 0x13, 0x7d, 0x0b, 0x48, 0x60, 0xee, 0x12, 0xb1, + 0x76, 0xd6, 0x4b, 0xc6, 0x6e, 0x32, 0x93, 0x4f, 0xdd, 0x3f, 0x4b, 0x80, 0xd6, 0x0b, 0x02, 0x9d, + 0xc3, 0x71, 0xaa, 0x92, 0x55, 0x97, 0x1d, 0xc4, 0x4c, 0xc8, 0xf6, 0x63, 0x45, 0xc4, 0x0e, 0x98, + 0x93, 0x3e, 0xe3, 0x41, 0x02, 0x4b, 0x25, 0x7a, 0x12, 0x34, 0x24, 0xdc, 0x54, 0x10, 0xf4, 0x06, + 0xf6, 0x53, 0x95, 0xa2, 0x4e, 0x91, 0xa4, 0x55, 0x4f, 0x10, 0xeb, 0xcd, 0xa2, 0xfd, 0xb7, 0x32, + 0xec, 0xac, 0x14, 0x15, 0xfa, 0x03, 0x3c, 0x4f, 0x15, 0x1f, 0x38, 0x15, 0xe9, 0x4b, 0x45, 0xde, + 0x55, 0x53, 0x89, 0x3e, 0x4b, 0x40, 0x1f, 0x24, 0x46, 0xbd, 0x61, 0xe4, 0x3d, 0x1d, 0x2c, 0x29, + 0x04, 0xe1, 0x12, 0x7f, 0x47, 0xf1, 0xf7, 0x72, 0xfc, 0x9b, 0x30, 0xc7, 0xfe, 0x3d, 0x1c, 0xce, + 0xf3, 0x82, 0x9d, 0xf5, 0xe5, 0xb5, 0xfc, 0x33, 0x19, 0x04, 0x3b, 0x2b, 0xab, 0xbf, 0x9e, 0x67, + 0x44, 0xf1, 0x57, 0x16, 0xdf, 0x55, 0xec, 0x2f, 0x16, 0xec, 0xfc, 0xda, 0xed, 0x7f, 0x95, 0x01, + 0xad, 0x1f, 0x88, 0x9c, 0xa5, 0x48, 0xa6, 0x77, 0xcd, 0x52, 0x29, 0x6f, 0xc9, 0x24, 0x4c, 0xac, + 0x58, 0xea, 0xc2, 0x51, 0x9e, 0x1f, 0x62, 0xfb, 0x9e, 0x88, 0x25, 0x85, 0x9a, 0x52, 0xd8, 0x5f, + 0x28, 0x0c, 0x13, 0xcc, 0x42, 0xe3, 0x2d, 0xb4, 0xe6, 0x8f, 0x65, 0x13, 0x3a, 0x25, 0x05, 0xa9, + 0xa9, 0x2b, 0x95, 0xc3, 0xec, 0xe1, 0x12, 0xd8, 0x8a, 0x97, 0x3f, 0x42, 0x7b, 0x55, 0xa7, 0xc0, + 0x4f, 0x43, 0x29, 0x1d, 0x2d, 0x2b, 0xad, 0x7a, 0x6a, 0x53, 0xa8, 0xa4, 0xd9, 0x42, 0x2f, 0x61, + 0xe7, 0x36, 0xe0, 0x0f, 0x98, 0x3b, 0x52, 0x30, 0xe0, 0x42, 0x9e, 0xd0, 0x8d, 0x93, 0xaa, 0xd1, + 0x9c, 0x87, 0x87, 0x32, 0x8a, 0x5e, 0x40, 0x7d, 0xfe, 0x99, 0x22, 0xb0, 0x9b, 0xde, 0xd5, 0xb5, + 0x2c, 0x36, 0xc2, 0xee, 0xfc, 0x73, 0x71, 0x63, 0xf1, 0xb9, 0xd8, 0x36, 0xa1, 0x3a, 0xff, 0xb0, + 0x90, 0x57, 0xbf, 0x1d, 0xc6, 0x2a, 0xed, 0x25, 0x43, 0xfe, 0x44, 0x7b, 0x50, 0x51, 0x9d, 0xd4, + 0x9d, 0xa4, 0xe7, 0x70, 0x4b, 0x0e, 0xdf, 0x4d, 0xd0, 0x01, 0x54, 0x7d, 0xe2, 0x07, 0x7c, 0x26, + 0xa7, 0x36, 0xd4, 0xd4, 0x76, 0x12, 0x78, 0x37, 0xf9, 0xe6, 0x3f, 0x65, 0x40, 0xeb, 0x9f, 0x56, + 0xe8, 0x18, 0x0e, 0x06, 0xd7, 0xdd, 0x9b, 0xf1, 0xf5, 0xb9, 0x65, 0xf6, 0x8d, 0xf7, 0x83, 0x5e, + 0xdf, 0x1a, 0x5f, 0x9b, 0xc3, 0x7e, 0x6f, 0xf0, 0x76, 0xd0, 0x3f, 0xd7, 0x3e, 0x43, 0x3a, 0x7c, + 0xbe, 0x0a, 0xb8, 0x3a, 0x1b, 0x5c, 0x6a, 0xa5, 0x22, 0xaa, 0x9c, 0xb1, 0x64, 0xa8, 0xd7, 0xd7, + 0xca, 0xe8, 0x08, 0xf6, 0x57, 0x01, 0x3f, 0x5d, 0x0d, 0x87, 0x56, 0xdf, 0x30, 0x6e, 0x0c, 0x6d, + 0x03, 0xb5, 0xe0, 0xb0, 0x70, 0xfe, 0xaa, 0x6f, 0x9a, 0x67, 0xef, 0xfa, 0xda, 0x13, 0xd4, 0x86, + 0xa3, 0x42, 0x84, 0x39, 0xee, 0x9a, 0x3d, 0x63, 0xd0, 0xed, 0x6b, 0x9b, 0xe8, 0x05, 0x3c, 0x2f, + 0xc4, 0x0c, 0x8d, 0xbe, 0xd9, 0x97, 0x46, 0xb6, 0xd0, 0x57, 0xd0, 0x5a, 0x85, 0xf4, 0x2e, 0xce, + 0xae, 0xaf, 0xfb, 0x97, 0x0b, 0x54, 0x05, 0xed, 0xc3, 0x17, 0xab, 0xa8, 0x0f, 0x67, 0xc6, 0xd5, + 0x78, 0xa8, 0x55, 0xbf, 0x19, 0x40, 0x63, 0xe9, 0xbb, 0x47, 0x3e, 0x9b, 0x02, 0x5d, 0xbf, 0xb3, + 0xcc, 0xd1, 0xd9, 0x68, 0x6c, 0xae, 0xa4, 0xad, 0x06, 0x95, 0x74, 0x5e, 0x2b, 0xa9, 0xc1, 0xe8, + 0x66, 0x38, 0xec, 0x9f, 0x6b, 0xe5, 0xae, 0x0b, 0x7b, 0x76, 0xe0, 0x17, 0xdd, 0x4f, 0xdd, 0x7a, + 0xfa, 0x1a, 0x3e, 0x94, 0xfd, 0x79, 0x58, 0xfa, 0xf3, 0x9b, 0x14, 0xe4, 0x06, 0x1e, 0x66, 0x6e, + 0x27, 0xe0, 0xee, 0xa9, 0x4b, 0x98, 0xea, 0xde, 0xa7, 0xc9, 0x14, 0x0e, 0x69, 0xb4, 0xf4, 0xcf, + 0xc6, 0x0f, 0xf3, 0xc1, 0x64, 0x4b, 0x01, 0x7f, 0xf3, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, + 0xe1, 0xd6, 0xfa, 0x7b, 0x11, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_data.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_data.pb.go new file mode 100644 index 0000000..24636a7 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_data.pb.go @@ -0,0 +1,452 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/admin/table/v1/bigtable_table_data.proto +// DO NOT EDIT! + +/* +Package table is a generated protocol buffer package. + +It is generated from these files: + google/bigtable/admin/table/v1/bigtable_table_data.proto + google/bigtable/admin/table/v1/bigtable_table_service.proto + google/bigtable/admin/table/v1/bigtable_table_service_messages.proto + +It has these top-level messages: + Table + ColumnFamily + GcRule + CreateTableRequest + ListTablesRequest + ListTablesResponse + GetTableRequest + DeleteTableRequest + RenameTableRequest + CreateColumnFamilyRequest + DeleteColumnFamilyRequest + BulkDeleteRowsRequest +*/ +package table + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type Table_TimestampGranularity int32 + +const ( + Table_MILLIS Table_TimestampGranularity = 0 +) + +var Table_TimestampGranularity_name = map[int32]string{ + 0: "MILLIS", +} +var Table_TimestampGranularity_value = map[string]int32{ + "MILLIS": 0, +} + +func (x Table_TimestampGranularity) String() string { + return proto.EnumName(Table_TimestampGranularity_name, int32(x)) +} +func (Table_TimestampGranularity) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 0} +} + +// A collection of user data indexed by row, column, and timestamp. +// Each table is served using the resources of its parent cluster. +type Table struct { + // A unique identifier of the form + // <cluster_name>/tables/[_a-zA-Z0-9][-_.a-zA-Z0-9]* + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // If this Table is in the process of being created, the Operation used to + // track its progress. As long as this operation is present, the Table will + // not accept any Table Admin or Read/Write requests. + CurrentOperation *google_longrunning.Operation `protobuf:"bytes,2,opt,name=current_operation,json=currentOperation" json:"current_operation,omitempty"` + // The column families configured for this table, mapped by column family id. + ColumnFamilies map[string]*ColumnFamily `protobuf:"bytes,3,rep,name=column_families,json=columnFamilies" json:"column_families,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The granularity (e.g. MILLIS, MICROS) at which timestamps are stored in + // this table. Timestamps not matching the granularity will be rejected. + // Cannot be changed once the table is created. + Granularity Table_TimestampGranularity `protobuf:"varint,4,opt,name=granularity,enum=google.bigtable.admin.table.v1.Table_TimestampGranularity" json:"granularity,omitempty"` +} + +func (m *Table) Reset() { *m = Table{} } +func (m *Table) String() string { return proto.CompactTextString(m) } +func (*Table) ProtoMessage() {} +func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Table) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Table) GetCurrentOperation() *google_longrunning.Operation { + if m != nil { + return m.CurrentOperation + } + return nil +} + +func (m *Table) GetColumnFamilies() map[string]*ColumnFamily { + if m != nil { + return m.ColumnFamilies + } + return nil +} + +func (m *Table) GetGranularity() Table_TimestampGranularity { + if m != nil { + return m.Granularity + } + return Table_MILLIS +} + +// A set of columns within a table which share a common configuration. +type ColumnFamily struct { + // A unique identifier of the form <table_name>/columnFamilies/[-_.a-zA-Z0-9]+ + // The last segment is the same as the "name" field in + // google.bigtable.v1.Family. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Garbage collection expression specified by the following grammar: + // GC = EXPR + // | "" ; + // EXPR = EXPR, "||", EXPR (* lowest precedence *) + // | EXPR, "&&", EXPR + // | "(", EXPR, ")" (* highest precedence *) + // | PROP ; + // PROP = "version() >", NUM32 + // | "age() >", NUM64, [ UNIT ] ; + // NUM32 = non-zero-digit { digit } ; (* # NUM32 <= 2^32 - 1 *) + // NUM64 = non-zero-digit { digit } ; (* # NUM64 <= 2^63 - 1 *) + // UNIT = "d" | "h" | "m" (* d=days, h=hours, m=minutes, else micros *) + // GC expressions can be up to 500 characters in length + // + // The different types of PROP are defined as follows: + // version() - cell index, counting from most recent and starting at 1 + // age() - age of the cell (current time minus cell timestamp) + // + // Example: "version() > 3 || (age() > 3d && version() > 1)" + // drop cells beyond the most recent three, and drop cells older than three + // days unless they're the most recent cell in the row/column + // + // Garbage collection executes opportunistically in the background, and so + // it's possible for reads to return a cell even if it matches the active GC + // expression for its family. + GcExpression string `protobuf:"bytes,2,opt,name=gc_expression,json=gcExpression" json:"gc_expression,omitempty"` + // Garbage collection rule specified as a protobuf. + // Supersedes `gc_expression`. + // Must serialize to at most 500 bytes. + // + // NOTE: Garbage collection executes opportunistically in the background, and + // so it's possible for reads to return a cell even if it matches the active + // GC expression for its family. + GcRule *GcRule `protobuf:"bytes,3,opt,name=gc_rule,json=gcRule" json:"gc_rule,omitempty"` +} + +func (m *ColumnFamily) Reset() { *m = ColumnFamily{} } +func (m *ColumnFamily) String() string { return proto.CompactTextString(m) } +func (*ColumnFamily) ProtoMessage() {} +func (*ColumnFamily) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ColumnFamily) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ColumnFamily) GetGcExpression() string { + if m != nil { + return m.GcExpression + } + return "" +} + +func (m *ColumnFamily) GetGcRule() *GcRule { + if m != nil { + return m.GcRule + } + return nil +} + +// Rule for determining which cells to delete during garbage collection. +type GcRule struct { + // Types that are valid to be assigned to Rule: + // *GcRule_MaxNumVersions + // *GcRule_MaxAge + // *GcRule_Intersection_ + // *GcRule_Union_ + Rule isGcRule_Rule `protobuf_oneof:"rule"` +} + +func (m *GcRule) Reset() { *m = GcRule{} } +func (m *GcRule) String() string { return proto.CompactTextString(m) } +func (*GcRule) ProtoMessage() {} +func (*GcRule) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isGcRule_Rule interface { + isGcRule_Rule() +} + +type GcRule_MaxNumVersions struct { + MaxNumVersions int32 `protobuf:"varint,1,opt,name=max_num_versions,json=maxNumVersions,oneof"` +} +type GcRule_MaxAge struct { + MaxAge *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=max_age,json=maxAge,oneof"` +} +type GcRule_Intersection_ struct { + Intersection *GcRule_Intersection `protobuf:"bytes,3,opt,name=intersection,oneof"` +} +type GcRule_Union_ struct { + Union *GcRule_Union `protobuf:"bytes,4,opt,name=union,oneof"` +} + +func (*GcRule_MaxNumVersions) isGcRule_Rule() {} +func (*GcRule_MaxAge) isGcRule_Rule() {} +func (*GcRule_Intersection_) isGcRule_Rule() {} +func (*GcRule_Union_) isGcRule_Rule() {} + +func (m *GcRule) GetRule() isGcRule_Rule { + if m != nil { + return m.Rule + } + return nil +} + +func (m *GcRule) GetMaxNumVersions() int32 { + if x, ok := m.GetRule().(*GcRule_MaxNumVersions); ok { + return x.MaxNumVersions + } + return 0 +} + +func (m *GcRule) GetMaxAge() *google_protobuf3.Duration { + if x, ok := m.GetRule().(*GcRule_MaxAge); ok { + return x.MaxAge + } + return nil +} + +func (m *GcRule) GetIntersection() *GcRule_Intersection { + if x, ok := m.GetRule().(*GcRule_Intersection_); ok { + return x.Intersection + } + return nil +} + +func (m *GcRule) GetUnion() *GcRule_Union { + if x, ok := m.GetRule().(*GcRule_Union_); ok { + return x.Union + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*GcRule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _GcRule_OneofMarshaler, _GcRule_OneofUnmarshaler, _GcRule_OneofSizer, []interface{}{ + (*GcRule_MaxNumVersions)(nil), + (*GcRule_MaxAge)(nil), + (*GcRule_Intersection_)(nil), + (*GcRule_Union_)(nil), + } +} + +func _GcRule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*GcRule) + // rule + switch x := m.Rule.(type) { + case *GcRule_MaxNumVersions: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.MaxNumVersions)) + case *GcRule_MaxAge: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.MaxAge); err != nil { + return err + } + case *GcRule_Intersection_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Intersection); err != nil { + return err + } + case *GcRule_Union_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Union); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("GcRule.Rule has unexpected type %T", x) + } + return nil +} + +func _GcRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*GcRule) + switch tag { + case 1: // rule.max_num_versions + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Rule = &GcRule_MaxNumVersions{int32(x)} + return true, err + case 2: // rule.max_age + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf3.Duration) + err := b.DecodeMessage(msg) + m.Rule = &GcRule_MaxAge{msg} + return true, err + case 3: // rule.intersection + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GcRule_Intersection) + err := b.DecodeMessage(msg) + m.Rule = &GcRule_Intersection_{msg} + return true, err + case 4: // rule.union + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GcRule_Union) + err := b.DecodeMessage(msg) + m.Rule = &GcRule_Union_{msg} + return true, err + default: + return false, nil + } +} + +func _GcRule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*GcRule) + // rule + switch x := m.Rule.(type) { + case *GcRule_MaxNumVersions: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.MaxNumVersions)) + case *GcRule_MaxAge: + s := proto.Size(x.MaxAge) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *GcRule_Intersection_: + s := proto.Size(x.Intersection) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *GcRule_Union_: + s := proto.Size(x.Union) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A GcRule which deletes cells matching all of the given rules. +type GcRule_Intersection struct { + // Only delete cells which would be deleted by every element of `rules`. + Rules []*GcRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` +} + +func (m *GcRule_Intersection) Reset() { *m = GcRule_Intersection{} } +func (m *GcRule_Intersection) String() string { return proto.CompactTextString(m) } +func (*GcRule_Intersection) ProtoMessage() {} +func (*GcRule_Intersection) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *GcRule_Intersection) GetRules() []*GcRule { + if m != nil { + return m.Rules + } + return nil +} + +// A GcRule which deletes cells matching any of the given rules. +type GcRule_Union struct { + // Delete cells which would be deleted by any element of `rules`. + Rules []*GcRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` +} + +func (m *GcRule_Union) Reset() { *m = GcRule_Union{} } +func (m *GcRule_Union) String() string { return proto.CompactTextString(m) } +func (*GcRule_Union) ProtoMessage() {} +func (*GcRule_Union) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } + +func (m *GcRule_Union) GetRules() []*GcRule { + if m != nil { + return m.Rules + } + return nil +} + +func init() { + proto.RegisterType((*Table)(nil), "google.bigtable.admin.table.v1.Table") + proto.RegisterType((*ColumnFamily)(nil), "google.bigtable.admin.table.v1.ColumnFamily") + proto.RegisterType((*GcRule)(nil), "google.bigtable.admin.table.v1.GcRule") + proto.RegisterType((*GcRule_Intersection)(nil), "google.bigtable.admin.table.v1.GcRule.Intersection") + proto.RegisterType((*GcRule_Union)(nil), "google.bigtable.admin.table.v1.GcRule.Union") + proto.RegisterEnum("google.bigtable.admin.table.v1.Table_TimestampGranularity", Table_TimestampGranularity_name, Table_TimestampGranularity_value) +} + +func init() { + proto.RegisterFile("google/bigtable/admin/table/v1/bigtable_table_data.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 579 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0x61, 0x6b, 0xd3, 0x40, + 0x18, 0xc7, 0x9b, 0xa5, 0xed, 0xd8, 0xb3, 0x3a, 0xeb, 0x29, 0x52, 0x0b, 0x4a, 0xc9, 0x40, 0x8a, + 0xc8, 0x85, 0x6d, 0xbe, 0x98, 0x53, 0x10, 0xbb, 0xcd, 0x6d, 0x32, 0x75, 0xc4, 0x29, 0x28, 0x42, + 0xb8, 0x66, 0xb7, 0x23, 0x98, 0xbb, 0x2b, 0x97, 0x5c, 0x69, 0x5f, 0xfb, 0xc6, 0x8f, 0xe2, 0xa7, + 0xf0, 0xb3, 0x49, 0xee, 0x2e, 0x35, 0x83, 0xe9, 0x26, 0xbe, 0x49, 0x9e, 0x3c, 0xf7, 0xfc, 0x7f, + 0xf7, 0xcf, 0xf3, 0x5c, 0x02, 0xdb, 0x4c, 0x4a, 0x96, 0xd1, 0x70, 0x9c, 0xb2, 0x82, 0x8c, 0x33, + 0x1a, 0x92, 0x33, 0x9e, 0x8a, 0xd0, 0xc6, 0xd3, 0x8d, 0x45, 0x3e, 0xb6, 0xd7, 0x33, 0x52, 0x10, + 0x3c, 0x51, 0xb2, 0x90, 0xe8, 0x81, 0x55, 0xe2, 0xaa, 0x02, 0x1b, 0x25, 0xb6, 0xf1, 0x74, 0xa3, + 0xbf, 0xee, 0xc8, 0x99, 0x14, 0x4c, 0x69, 0x21, 0x52, 0xc1, 0x42, 0x39, 0xa1, 0x8a, 0x14, 0xa9, + 0x14, 0xb9, 0x85, 0xf4, 0x1d, 0x24, 0x34, 0x4f, 0x63, 0x7d, 0x1e, 0x9e, 0x69, 0x5b, 0x60, 0xd7, + 0x83, 0x9f, 0x3e, 0xb4, 0x4e, 0x4b, 0x22, 0x42, 0xd0, 0x14, 0x84, 0xd3, 0x9e, 0x37, 0xf0, 0x86, + 0x2b, 0x91, 0x89, 0xd1, 0x6b, 0xb8, 0x95, 0x68, 0xa5, 0xa8, 0x28, 0xe2, 0x05, 0xb9, 0xb7, 0x34, + 0xf0, 0x86, 0xab, 0x9b, 0xf7, 0xb1, 0xb3, 0x57, 0xdb, 0x1e, 0xbf, 0xab, 0x8a, 0xa2, 0xae, 0xd3, + 0x2d, 0x32, 0x68, 0x0c, 0x37, 0x13, 0x99, 0x69, 0x2e, 0xe2, 0x73, 0xc2, 0xd3, 0x2c, 0xa5, 0x79, + 0xcf, 0x1f, 0xf8, 0xc3, 0xd5, 0xcd, 0xa7, 0xf8, 0xef, 0x2f, 0x8a, 0x8d, 0x3f, 0xbc, 0x6b, 0xc4, + 0xaf, 0x9c, 0x76, 0x5f, 0x14, 0x6a, 0x1e, 0xad, 0x25, 0x17, 0x92, 0xe8, 0x0b, 0xac, 0x32, 0x45, + 0x84, 0xce, 0x88, 0x4a, 0x8b, 0x79, 0xaf, 0x39, 0xf0, 0x86, 0x6b, 0x9b, 0x3b, 0xd7, 0xe3, 0x9f, + 0xa6, 0x9c, 0xe6, 0x05, 0xe1, 0x93, 0x83, 0xdf, 0x84, 0xa8, 0x8e, 0xeb, 0x4b, 0xb8, 0x7d, 0x89, + 0x09, 0xd4, 0x05, 0xff, 0x2b, 0x9d, 0xbb, 0xbe, 0x95, 0x21, 0x1a, 0x41, 0x6b, 0x4a, 0x32, 0x4d, + 0x5d, 0xab, 0x1e, 0x5f, 0x65, 0xa0, 0x46, 0x9d, 0x47, 0x56, 0xba, 0xb3, 0xb4, 0xed, 0x05, 0x01, + 0xdc, 0xb9, 0xcc, 0x15, 0x02, 0x68, 0xbf, 0x39, 0x3a, 0x3e, 0x3e, 0x7a, 0xdf, 0x6d, 0x04, 0xdf, + 0x3d, 0xe8, 0xd4, 0xf5, 0x97, 0xce, 0x71, 0x1d, 0x6e, 0xb0, 0x24, 0xa6, 0xb3, 0x89, 0xa2, 0x79, + 0x5e, 0xcd, 0x70, 0x25, 0xea, 0xb0, 0x64, 0x7f, 0x91, 0x43, 0x2f, 0x60, 0x99, 0x25, 0xb1, 0xd2, + 0x19, 0xed, 0xf9, 0xc6, 0xf7, 0xc3, 0xab, 0x7c, 0x1f, 0x24, 0x91, 0xce, 0x68, 0xd4, 0x66, 0xe6, + 0x1e, 0xfc, 0xf0, 0xa1, 0x6d, 0x53, 0xe8, 0x11, 0x74, 0x39, 0x99, 0xc5, 0x42, 0xf3, 0x78, 0x4a, + 0x55, 0x89, 0xcf, 0x8d, 0xa1, 0xd6, 0x61, 0x23, 0x5a, 0xe3, 0x64, 0xf6, 0x56, 0xf3, 0x8f, 0x2e, + 0x8f, 0x9e, 0xc0, 0x72, 0x59, 0x4b, 0x58, 0xd5, 0xaf, 0x7b, 0xd5, 0xbe, 0xd5, 0xa1, 0xc5, 0x7b, + 0xee, 0xd0, 0x1e, 0x36, 0xa2, 0x36, 0x27, 0xb3, 0x97, 0x8c, 0xa2, 0x4f, 0xd0, 0x49, 0x45, 0x41, + 0x55, 0x4e, 0x13, 0x73, 0x2a, 0xad, 0xe5, 0xad, 0xeb, 0x59, 0xc6, 0x47, 0x35, 0xe9, 0x61, 0x23, + 0xba, 0x80, 0x42, 0x7b, 0xd0, 0xd2, 0xa2, 0x64, 0x36, 0xaf, 0x37, 0x3e, 0xc7, 0xfc, 0x20, 0x2c, + 0xcc, 0x8a, 0xfb, 0xc7, 0xd0, 0xa9, 0xef, 0x82, 0x9e, 0x43, 0xab, 0xec, 0x6d, 0xd9, 0x07, 0xff, + 0x1f, 0x9a, 0x6b, 0x45, 0xfd, 0x7d, 0x68, 0x19, 0xfe, 0xff, 0x61, 0x46, 0x6d, 0x68, 0x96, 0xc1, + 0xe8, 0x9b, 0x07, 0x41, 0x22, 0xf9, 0x15, 0xe2, 0xd1, 0xdd, 0x91, 0x5b, 0x30, 0x9f, 0xc8, 0x1e, + 0x29, 0xc8, 0x49, 0x39, 0x92, 0x13, 0xef, 0xf3, 0xae, 0x53, 0x32, 0x99, 0x11, 0xc1, 0xb0, 0x54, + 0x2c, 0x64, 0x54, 0x98, 0x81, 0x85, 0x76, 0x89, 0x4c, 0xd2, 0xfc, 0x4f, 0x7f, 0xbd, 0x67, 0x26, + 0x18, 0xb7, 0x4d, 0xfd, 0xd6, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x80, 0x76, 0xdc, 0x24, + 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service.pb.go new file mode 100644 index 0000000..342c076 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service.pb.go @@ -0,0 +1,424 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/admin/table/v1/bigtable_table_service.proto +// DO NOT EDIT! + +package table + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for BigtableTableService service + +type BigtableTableServiceClient interface { + // Creates a new table, to be served from a specified cluster. + // The table can be created with a full set of initial column families, + // specified in the request. + CreateTable(ctx context.Context, in *CreateTableRequest, opts ...grpc.CallOption) (*Table, error) + // Lists the names of all tables served from a specified cluster. + ListTables(ctx context.Context, in *ListTablesRequest, opts ...grpc.CallOption) (*ListTablesResponse, error) + // Gets the schema of the specified table, including its column families. + GetTable(ctx context.Context, in *GetTableRequest, opts ...grpc.CallOption) (*Table, error) + // Permanently deletes a specified table and all of its data. + DeleteTable(ctx context.Context, in *DeleteTableRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Changes the name of a specified table. + // Cannot be used to move tables between clusters, zones, or projects. + RenameTable(ctx context.Context, in *RenameTableRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Creates a new column family within a specified table. + CreateColumnFamily(ctx context.Context, in *CreateColumnFamilyRequest, opts ...grpc.CallOption) (*ColumnFamily, error) + // Changes the configuration of a specified column family. + UpdateColumnFamily(ctx context.Context, in *ColumnFamily, opts ...grpc.CallOption) (*ColumnFamily, error) + // Permanently deletes a specified column family and all of its data. + DeleteColumnFamily(ctx context.Context, in *DeleteColumnFamilyRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Delete all rows in a table corresponding to a particular prefix + BulkDeleteRows(ctx context.Context, in *BulkDeleteRowsRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type bigtableTableServiceClient struct { + cc *grpc.ClientConn +} + +func NewBigtableTableServiceClient(cc *grpc.ClientConn) BigtableTableServiceClient { + return &bigtableTableServiceClient{cc} +} + +func (c *bigtableTableServiceClient) CreateTable(ctx context.Context, in *CreateTableRequest, opts ...grpc.CallOption) (*Table, error) { + out := new(Table) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/CreateTable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableServiceClient) ListTables(ctx context.Context, in *ListTablesRequest, opts ...grpc.CallOption) (*ListTablesResponse, error) { + out := new(ListTablesResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/ListTables", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableServiceClient) GetTable(ctx context.Context, in *GetTableRequest, opts ...grpc.CallOption) (*Table, error) { + out := new(Table) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/GetTable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableServiceClient) DeleteTable(ctx context.Context, in *DeleteTableRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/DeleteTable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableServiceClient) RenameTable(ctx context.Context, in *RenameTableRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/RenameTable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableServiceClient) CreateColumnFamily(ctx context.Context, in *CreateColumnFamilyRequest, opts ...grpc.CallOption) (*ColumnFamily, error) { + out := new(ColumnFamily) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/CreateColumnFamily", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableServiceClient) UpdateColumnFamily(ctx context.Context, in *ColumnFamily, opts ...grpc.CallOption) (*ColumnFamily, error) { + out := new(ColumnFamily) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/UpdateColumnFamily", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableServiceClient) DeleteColumnFamily(ctx context.Context, in *DeleteColumnFamilyRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/DeleteColumnFamily", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableServiceClient) BulkDeleteRows(ctx context.Context, in *BulkDeleteRowsRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.table.v1.BigtableTableService/BulkDeleteRows", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for BigtableTableService service + +type BigtableTableServiceServer interface { + // Creates a new table, to be served from a specified cluster. + // The table can be created with a full set of initial column families, + // specified in the request. + CreateTable(context.Context, *CreateTableRequest) (*Table, error) + // Lists the names of all tables served from a specified cluster. + ListTables(context.Context, *ListTablesRequest) (*ListTablesResponse, error) + // Gets the schema of the specified table, including its column families. + GetTable(context.Context, *GetTableRequest) (*Table, error) + // Permanently deletes a specified table and all of its data. + DeleteTable(context.Context, *DeleteTableRequest) (*google_protobuf2.Empty, error) + // Changes the name of a specified table. + // Cannot be used to move tables between clusters, zones, or projects. + RenameTable(context.Context, *RenameTableRequest) (*google_protobuf2.Empty, error) + // Creates a new column family within a specified table. + CreateColumnFamily(context.Context, *CreateColumnFamilyRequest) (*ColumnFamily, error) + // Changes the configuration of a specified column family. + UpdateColumnFamily(context.Context, *ColumnFamily) (*ColumnFamily, error) + // Permanently deletes a specified column family and all of its data. + DeleteColumnFamily(context.Context, *DeleteColumnFamilyRequest) (*google_protobuf2.Empty, error) + // Delete all rows in a table corresponding to a particular prefix + BulkDeleteRows(context.Context, *BulkDeleteRowsRequest) (*google_protobuf2.Empty, error) +} + +func RegisterBigtableTableServiceServer(s *grpc.Server, srv BigtableTableServiceServer) { + s.RegisterService(&_BigtableTableService_serviceDesc, srv) +} + +func _BigtableTableService_CreateTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).CreateTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/CreateTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).CreateTable(ctx, req.(*CreateTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableService_ListTables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).ListTables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/ListTables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).ListTables(ctx, req.(*ListTablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableService_GetTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).GetTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/GetTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).GetTable(ctx, req.(*GetTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableService_DeleteTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).DeleteTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/DeleteTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).DeleteTable(ctx, req.(*DeleteTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableService_RenameTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RenameTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).RenameTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/RenameTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).RenameTable(ctx, req.(*RenameTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableService_CreateColumnFamily_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateColumnFamilyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).CreateColumnFamily(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/CreateColumnFamily", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).CreateColumnFamily(ctx, req.(*CreateColumnFamilyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableService_UpdateColumnFamily_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ColumnFamily) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).UpdateColumnFamily(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/UpdateColumnFamily", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).UpdateColumnFamily(ctx, req.(*ColumnFamily)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableService_DeleteColumnFamily_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteColumnFamilyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).DeleteColumnFamily(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/DeleteColumnFamily", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).DeleteColumnFamily(ctx, req.(*DeleteColumnFamilyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableService_BulkDeleteRows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BulkDeleteRowsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableServiceServer).BulkDeleteRows(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.table.v1.BigtableTableService/BulkDeleteRows", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableServiceServer).BulkDeleteRows(ctx, req.(*BulkDeleteRowsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _BigtableTableService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.bigtable.admin.table.v1.BigtableTableService", + HandlerType: (*BigtableTableServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateTable", + Handler: _BigtableTableService_CreateTable_Handler, + }, + { + MethodName: "ListTables", + Handler: _BigtableTableService_ListTables_Handler, + }, + { + MethodName: "GetTable", + Handler: _BigtableTableService_GetTable_Handler, + }, + { + MethodName: "DeleteTable", + Handler: _BigtableTableService_DeleteTable_Handler, + }, + { + MethodName: "RenameTable", + Handler: _BigtableTableService_RenameTable_Handler, + }, + { + MethodName: "CreateColumnFamily", + Handler: _BigtableTableService_CreateColumnFamily_Handler, + }, + { + MethodName: "UpdateColumnFamily", + Handler: _BigtableTableService_UpdateColumnFamily_Handler, + }, + { + MethodName: "DeleteColumnFamily", + Handler: _BigtableTableService_DeleteColumnFamily_Handler, + }, + { + MethodName: "BulkDeleteRows", + Handler: _BigtableTableService_BulkDeleteRows_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/bigtable/admin/table/v1/bigtable_table_service.proto", +} + +func init() { + proto.RegisterFile("google/bigtable/admin/table/v1/bigtable_table_service.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 560 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0xbf, 0x6f, 0xd4, 0x30, + 0x14, 0xc7, 0x65, 0x06, 0x84, 0x7c, 0x88, 0xc1, 0x42, 0x0c, 0x07, 0x62, 0x88, 0xc4, 0x12, 0xa1, + 0x58, 0xb9, 0x82, 0x68, 0xaf, 0xaa, 0x84, 0x72, 0xd7, 0x56, 0xa2, 0x20, 0x95, 0x03, 0x16, 0x96, + 0xca, 0xc9, 0x3d, 0xa2, 0x40, 0x62, 0x87, 0xd8, 0x39, 0x54, 0x50, 0x17, 0x16, 0xfe, 0x00, 0x58, + 0x61, 0x62, 0x64, 0x82, 0x1d, 0x76, 0x56, 0xfe, 0x05, 0xfe, 0x10, 0x14, 0x3b, 0xa1, 0x69, 0xf9, + 0xe1, 0x73, 0xd5, 0x25, 0xe7, 0xb3, 0xbf, 0xdf, 0xf7, 0x3e, 0xcf, 0x7e, 0x96, 0xf1, 0x7a, 0x2a, + 0x44, 0x9a, 0x03, 0x8d, 0xb3, 0x54, 0xb1, 0x38, 0x07, 0xca, 0xe6, 0x45, 0xc6, 0xa9, 0x19, 0x2f, + 0xc2, 0xdf, 0xf3, 0x7b, 0xe6, 0x2b, 0xa1, 0x5a, 0x64, 0x09, 0x04, 0x65, 0x25, 0x94, 0x20, 0x57, + 0x8d, 0x39, 0xe8, 0x44, 0x81, 0x36, 0x07, 0x66, 0xbc, 0x08, 0x87, 0x57, 0xda, 0xe0, 0xac, 0xcc, + 0x28, 0xe3, 0x5c, 0x28, 0xa6, 0x32, 0xc1, 0xa5, 0x71, 0x0f, 0x57, 0xdd, 0x52, 0xcf, 0x99, 0x62, + 0xad, 0x73, 0x7a, 0x22, 0xe8, 0xbd, 0x02, 0xa4, 0x64, 0x29, 0x74, 0xf9, 0x2f, 0xb7, 0x51, 0xf4, + 0xbf, 0xb8, 0x7e, 0x42, 0xa1, 0x28, 0xd5, 0xbe, 0x59, 0x1c, 0x7d, 0x3d, 0x8f, 0x2f, 0x46, 0x6d, + 0x98, 0x87, 0xcd, 0xe7, 0x81, 0x09, 0x42, 0x3e, 0x22, 0x3c, 0x98, 0x54, 0xc0, 0x94, 0x99, 0x26, + 0xa3, 0xe0, 0xff, 0x9b, 0x10, 0xf4, 0xc4, 0x33, 0x78, 0x5e, 0x83, 0x54, 0xc3, 0x6b, 0x36, 0x8f, + 0x56, 0x7b, 0xe3, 0xd7, 0x3f, 0x7e, 0xbe, 0x3d, 0x73, 0xc3, 0xa3, 0x4d, 0x4d, 0xaf, 0x38, 0x2b, + 0x60, 0xa3, 0xac, 0xc4, 0x53, 0x48, 0x94, 0xa4, 0x3e, 0x7d, 0x29, 0x38, 0x34, 0xbf, 0x49, 0x5e, + 0x4b, 0x05, 0x95, 0xa4, 0xfe, 0x81, 0xd9, 0x01, 0x39, 0x46, 0x3e, 0xf9, 0x84, 0x30, 0xbe, 0x9b, + 0x49, 0xa5, 0x23, 0x49, 0x12, 0xda, 0x32, 0x1e, 0x6a, 0x3b, 0xc8, 0x91, 0x8b, 0x45, 0x96, 0x82, + 0x4b, 0xf0, 0x6e, 0x69, 0xe2, 0x90, 0xb8, 0x12, 0x93, 0xf7, 0x08, 0x9f, 0xdb, 0x06, 0x13, 0x8e, + 0x50, 0x5b, 0xe6, 0x4e, 0xe9, 0xb8, 0x9f, 0x6b, 0x9a, 0x6e, 0x85, 0x84, 0x4b, 0xd2, 0xb5, 0x70, + 0xd4, 0x3f, 0x20, 0xef, 0x10, 0x1e, 0x4c, 0x21, 0x87, 0xa5, 0x4f, 0xbd, 0x27, 0xee, 0x28, 0x2f, + 0x75, 0x9e, 0xae, 0xe1, 0x82, 0xcd, 0xa6, 0xe1, 0x3a, 0x2c, 0xff, 0x04, 0x58, 0x1f, 0x10, 0x1e, + 0xcc, 0xa0, 0xb1, 0x2c, 0x89, 0xd5, 0x13, 0xdb, 0xb0, 0x26, 0x1a, 0x6b, 0xc3, 0x5b, 0x75, 0xc6, + 0x1a, 0x57, 0x3a, 0x4b, 0xd3, 0x86, 0xdf, 0x11, 0x26, 0xe6, 0x02, 0x4c, 0x44, 0x5e, 0x17, 0x7c, + 0x8b, 0x15, 0x59, 0xbe, 0x4f, 0xd6, 0x96, 0xbb, 0x34, 0x7d, 0x4f, 0x87, 0x7b, 0xdd, 0x6a, 0xed, + 0x99, 0xbc, 0x1d, 0x5d, 0xc4, 0xa6, 0x77, 0xdb, 0xb9, 0x08, 0x9a, 0x1c, 0xc6, 0xc9, 0xcc, 0x9d, + 0xfa, 0x86, 0x30, 0x79, 0x54, 0xce, 0x8f, 0x17, 0xe3, 0x44, 0xe4, 0xc8, 0x7f, 0x4f, 0xf3, 0x6f, + 0x0f, 0x23, 0x57, 0xfe, 0x63, 0xf8, 0xcd, 0xa9, 0x20, 0x9f, 0x7c, 0x41, 0x98, 0x98, 0xce, 0x74, + 0x3b, 0x8e, 0x3f, 0x3d, 0xb6, 0xee, 0xb9, 0xa3, 0xc1, 0xa7, 0xfe, 0x29, 0x80, 0x93, 0xcf, 0x08, + 0x5f, 0x88, 0xea, 0xfc, 0x99, 0xa1, 0x98, 0x89, 0x17, 0x92, 0xdc, 0xb4, 0x11, 0x1f, 0xd5, 0xdb, + 0x68, 0xef, 0x6b, 0xda, 0x1d, 0x6f, 0x4b, 0xd3, 0x9a, 0x57, 0xc3, 0xa9, 0xe3, 0xe3, 0x23, 0xe9, + 0xc6, 0xc8, 0x8f, 0xde, 0x20, 0xec, 0x25, 0xa2, 0xb0, 0x70, 0x46, 0xc3, 0xbf, 0x3d, 0x32, 0x72, + 0xb7, 0xc1, 0xdb, 0x45, 0x8f, 0x27, 0xad, 0x3b, 0x15, 0x39, 0xe3, 0x69, 0x20, 0xaa, 0x94, 0xa6, + 0xc0, 0x35, 0x3c, 0x35, 0x4b, 0xac, 0xcc, 0xe4, 0xbf, 0xde, 0xc1, 0x75, 0x3d, 0x88, 0xcf, 0x6a, + 0xfd, 0xca, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x65, 0xb4, 0xe0, 0xeb, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service_messages.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service_messages.pb.go new file mode 100644 index 0000000..3ac7d7f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service_messages.pb.go @@ -0,0 +1,401 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/admin/table/v1/bigtable_table_service_messages.proto +// DO NOT EDIT! + +package table + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type CreateTableRequest struct { + // The unique name of the cluster in which to create the new table. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name by which the new table should be referred to within the cluster, + // e.g. "foobar" rather than "<cluster_name>/tables/foobar". + TableId string `protobuf:"bytes,2,opt,name=table_id,json=tableId" json:"table_id,omitempty"` + // The Table to create. The `name` field of the Table and all of its + // ColumnFamilies must be left blank, and will be populated in the response. + Table *Table `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"` + // The optional list of row keys that will be used to initially split the + // table into several tablets (Tablets are similar to HBase regions). + // Given two split keys, "s1" and "s2", three tablets will be created, + // spanning the key ranges: [, s1), [s1, s2), [s2, ). + // + // Example: + // * Row keys := ["a", "apple", "custom", "customer_1", "customer_2", + // "other", "zz"] + // * initial_split_keys := ["apple", "customer_1", "customer_2", "other"] + // * Key assignment: + // - Tablet 1 [, apple) => {"a"}. + // - Tablet 2 [apple, customer_1) => {"apple", "custom"}. + // - Tablet 3 [customer_1, customer_2) => {"customer_1"}. + // - Tablet 4 [customer_2, other) => {"customer_2"}. + // - Tablet 5 [other, ) => {"other", "zz"}. + InitialSplitKeys []string `protobuf:"bytes,4,rep,name=initial_split_keys,json=initialSplitKeys" json:"initial_split_keys,omitempty"` +} + +func (m *CreateTableRequest) Reset() { *m = CreateTableRequest{} } +func (m *CreateTableRequest) String() string { return proto.CompactTextString(m) } +func (*CreateTableRequest) ProtoMessage() {} +func (*CreateTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *CreateTableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateTableRequest) GetTableId() string { + if m != nil { + return m.TableId + } + return "" +} + +func (m *CreateTableRequest) GetTable() *Table { + if m != nil { + return m.Table + } + return nil +} + +func (m *CreateTableRequest) GetInitialSplitKeys() []string { + if m != nil { + return m.InitialSplitKeys + } + return nil +} + +type ListTablesRequest struct { + // The unique name of the cluster for which tables should be listed. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *ListTablesRequest) Reset() { *m = ListTablesRequest{} } +func (m *ListTablesRequest) String() string { return proto.CompactTextString(m) } +func (*ListTablesRequest) ProtoMessage() {} +func (*ListTablesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ListTablesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type ListTablesResponse struct { + // The tables present in the requested cluster. + // At present, only the names of the tables are populated. + Tables []*Table `protobuf:"bytes,1,rep,name=tables" json:"tables,omitempty"` +} + +func (m *ListTablesResponse) Reset() { *m = ListTablesResponse{} } +func (m *ListTablesResponse) String() string { return proto.CompactTextString(m) } +func (*ListTablesResponse) ProtoMessage() {} +func (*ListTablesResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *ListTablesResponse) GetTables() []*Table { + if m != nil { + return m.Tables + } + return nil +} + +type GetTableRequest struct { + // The unique name of the requested table. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetTableRequest) Reset() { *m = GetTableRequest{} } +func (m *GetTableRequest) String() string { return proto.CompactTextString(m) } +func (*GetTableRequest) ProtoMessage() {} +func (*GetTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *GetTableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type DeleteTableRequest struct { + // The unique name of the table to be deleted. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteTableRequest) Reset() { *m = DeleteTableRequest{} } +func (m *DeleteTableRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteTableRequest) ProtoMessage() {} +func (*DeleteTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *DeleteTableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type RenameTableRequest struct { + // The current unique name of the table. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The new name by which the table should be referred to within its containing + // cluster, e.g. "foobar" rather than "<cluster_name>/tables/foobar". + NewId string `protobuf:"bytes,2,opt,name=new_id,json=newId" json:"new_id,omitempty"` +} + +func (m *RenameTableRequest) Reset() { *m = RenameTableRequest{} } +func (m *RenameTableRequest) String() string { return proto.CompactTextString(m) } +func (*RenameTableRequest) ProtoMessage() {} +func (*RenameTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *RenameTableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *RenameTableRequest) GetNewId() string { + if m != nil { + return m.NewId + } + return "" +} + +type CreateColumnFamilyRequest struct { + // The unique name of the table in which to create the new column family. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name by which the new column family should be referred to within the + // table, e.g. "foobar" rather than "<table_name>/columnFamilies/foobar". + ColumnFamilyId string `protobuf:"bytes,2,opt,name=column_family_id,json=columnFamilyId" json:"column_family_id,omitempty"` + // The column family to create. The `name` field must be left blank. + ColumnFamily *ColumnFamily `protobuf:"bytes,3,opt,name=column_family,json=columnFamily" json:"column_family,omitempty"` +} + +func (m *CreateColumnFamilyRequest) Reset() { *m = CreateColumnFamilyRequest{} } +func (m *CreateColumnFamilyRequest) String() string { return proto.CompactTextString(m) } +func (*CreateColumnFamilyRequest) ProtoMessage() {} +func (*CreateColumnFamilyRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *CreateColumnFamilyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateColumnFamilyRequest) GetColumnFamilyId() string { + if m != nil { + return m.ColumnFamilyId + } + return "" +} + +func (m *CreateColumnFamilyRequest) GetColumnFamily() *ColumnFamily { + if m != nil { + return m.ColumnFamily + } + return nil +} + +type DeleteColumnFamilyRequest struct { + // The unique name of the column family to be deleted. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteColumnFamilyRequest) Reset() { *m = DeleteColumnFamilyRequest{} } +func (m *DeleteColumnFamilyRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteColumnFamilyRequest) ProtoMessage() {} +func (*DeleteColumnFamilyRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *DeleteColumnFamilyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type BulkDeleteRowsRequest struct { + // The unique name of the table on which to perform the bulk delete + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // Types that are valid to be assigned to Target: + // *BulkDeleteRowsRequest_RowKeyPrefix + // *BulkDeleteRowsRequest_DeleteAllDataFromTable + Target isBulkDeleteRowsRequest_Target `protobuf_oneof:"target"` +} + +func (m *BulkDeleteRowsRequest) Reset() { *m = BulkDeleteRowsRequest{} } +func (m *BulkDeleteRowsRequest) String() string { return proto.CompactTextString(m) } +func (*BulkDeleteRowsRequest) ProtoMessage() {} +func (*BulkDeleteRowsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +type isBulkDeleteRowsRequest_Target interface { + isBulkDeleteRowsRequest_Target() +} + +type BulkDeleteRowsRequest_RowKeyPrefix struct { + RowKeyPrefix []byte `protobuf:"bytes,2,opt,name=row_key_prefix,json=rowKeyPrefix,proto3,oneof"` +} +type BulkDeleteRowsRequest_DeleteAllDataFromTable struct { + DeleteAllDataFromTable bool `protobuf:"varint,3,opt,name=delete_all_data_from_table,json=deleteAllDataFromTable,oneof"` +} + +func (*BulkDeleteRowsRequest_RowKeyPrefix) isBulkDeleteRowsRequest_Target() {} +func (*BulkDeleteRowsRequest_DeleteAllDataFromTable) isBulkDeleteRowsRequest_Target() {} + +func (m *BulkDeleteRowsRequest) GetTarget() isBulkDeleteRowsRequest_Target { + if m != nil { + return m.Target + } + return nil +} + +func (m *BulkDeleteRowsRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *BulkDeleteRowsRequest) GetRowKeyPrefix() []byte { + if x, ok := m.GetTarget().(*BulkDeleteRowsRequest_RowKeyPrefix); ok { + return x.RowKeyPrefix + } + return nil +} + +func (m *BulkDeleteRowsRequest) GetDeleteAllDataFromTable() bool { + if x, ok := m.GetTarget().(*BulkDeleteRowsRequest_DeleteAllDataFromTable); ok { + return x.DeleteAllDataFromTable + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*BulkDeleteRowsRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _BulkDeleteRowsRequest_OneofMarshaler, _BulkDeleteRowsRequest_OneofUnmarshaler, _BulkDeleteRowsRequest_OneofSizer, []interface{}{ + (*BulkDeleteRowsRequest_RowKeyPrefix)(nil), + (*BulkDeleteRowsRequest_DeleteAllDataFromTable)(nil), + } +} + +func _BulkDeleteRowsRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*BulkDeleteRowsRequest) + // target + switch x := m.Target.(type) { + case *BulkDeleteRowsRequest_RowKeyPrefix: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.RowKeyPrefix) + case *BulkDeleteRowsRequest_DeleteAllDataFromTable: + t := uint64(0) + if x.DeleteAllDataFromTable { + t = 1 + } + b.EncodeVarint(3<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("BulkDeleteRowsRequest.Target has unexpected type %T", x) + } + return nil +} + +func _BulkDeleteRowsRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*BulkDeleteRowsRequest) + switch tag { + case 2: // target.row_key_prefix + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Target = &BulkDeleteRowsRequest_RowKeyPrefix{x} + return true, err + case 3: // target.delete_all_data_from_table + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Target = &BulkDeleteRowsRequest_DeleteAllDataFromTable{x != 0} + return true, err + default: + return false, nil + } +} + +func _BulkDeleteRowsRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*BulkDeleteRowsRequest) + // target + switch x := m.Target.(type) { + case *BulkDeleteRowsRequest_RowKeyPrefix: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RowKeyPrefix))) + n += len(x.RowKeyPrefix) + case *BulkDeleteRowsRequest_DeleteAllDataFromTable: + n += proto.SizeVarint(3<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*CreateTableRequest)(nil), "google.bigtable.admin.table.v1.CreateTableRequest") + proto.RegisterType((*ListTablesRequest)(nil), "google.bigtable.admin.table.v1.ListTablesRequest") + proto.RegisterType((*ListTablesResponse)(nil), "google.bigtable.admin.table.v1.ListTablesResponse") + proto.RegisterType((*GetTableRequest)(nil), "google.bigtable.admin.table.v1.GetTableRequest") + proto.RegisterType((*DeleteTableRequest)(nil), "google.bigtable.admin.table.v1.DeleteTableRequest") + proto.RegisterType((*RenameTableRequest)(nil), "google.bigtable.admin.table.v1.RenameTableRequest") + proto.RegisterType((*CreateColumnFamilyRequest)(nil), "google.bigtable.admin.table.v1.CreateColumnFamilyRequest") + proto.RegisterType((*DeleteColumnFamilyRequest)(nil), "google.bigtable.admin.table.v1.DeleteColumnFamilyRequest") + proto.RegisterType((*BulkDeleteRowsRequest)(nil), "google.bigtable.admin.table.v1.BulkDeleteRowsRequest") +} + +func init() { + proto.RegisterFile("google/bigtable/admin/table/v1/bigtable_table_service_messages.proto", fileDescriptor2) +} + +var fileDescriptor2 = []byte{ + // 514 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0xad, 0x49, 0x1b, 0x92, 0x21, 0x94, 0xb2, 0x52, 0x51, 0x52, 0x09, 0x14, 0x56, 0x2a, 0xe4, + 0x50, 0xd9, 0x2a, 0x5c, 0x90, 0x0a, 0x42, 0x24, 0x51, 0x69, 0x54, 0x40, 0xc1, 0xe1, 0xc4, 0xc5, + 0xda, 0xc4, 0x13, 0x6b, 0xd5, 0xb5, 0x37, 0xec, 0x6e, 0x12, 0xf2, 0x13, 0x7c, 0x06, 0x27, 0xc4, + 0x37, 0x22, 0xef, 0x9a, 0x26, 0x3d, 0x10, 0x97, 0x8b, 0x35, 0x9e, 0x79, 0xf3, 0x66, 0xf6, 0xcd, + 0x0c, 0xf4, 0x13, 0x29, 0x13, 0x81, 0xc1, 0x98, 0x27, 0x86, 0x8d, 0x05, 0x06, 0x2c, 0x4e, 0x79, + 0x16, 0x38, 0x7b, 0x71, 0x7a, 0xed, 0x8f, 0xdc, 0x57, 0xa3, 0x5a, 0xf0, 0x09, 0x46, 0x29, 0x6a, + 0xcd, 0x12, 0xd4, 0xfe, 0x4c, 0x49, 0x23, 0xc9, 0x13, 0xc7, 0xe2, 0xff, 0x45, 0xfb, 0x96, 0xc5, + 0x77, 0xf6, 0xe2, 0xf4, 0xe8, 0xd5, 0xff, 0x55, 0x89, 0x99, 0x61, 0x8e, 0x99, 0xfe, 0xf6, 0x80, + 0xf4, 0x14, 0x32, 0x83, 0x5f, 0xf2, 0x50, 0x88, 0xdf, 0xe6, 0xa8, 0x0d, 0x21, 0xb0, 0x9b, 0xb1, + 0x14, 0x9b, 0x5e, 0xdb, 0xeb, 0xd4, 0x43, 0x6b, 0x93, 0x16, 0xd4, 0x5c, 0x3a, 0x8f, 0x9b, 0x77, + 0xac, 0xff, 0xae, 0xfd, 0x1f, 0xc4, 0xe4, 0x0c, 0xf6, 0xac, 0xd9, 0xac, 0xb4, 0xbd, 0xce, 0xbd, + 0x17, 0xc7, 0xfe, 0xf6, 0x7e, 0x7d, 0x57, 0xcb, 0xe5, 0x90, 0x13, 0x20, 0x3c, 0xe3, 0x86, 0x33, + 0x11, 0xe9, 0x99, 0xe0, 0x26, 0xba, 0xc2, 0x95, 0x6e, 0xee, 0xb6, 0x2b, 0x9d, 0x7a, 0x78, 0x50, + 0x44, 0x46, 0x79, 0xe0, 0x12, 0x57, 0x9a, 0x3e, 0x87, 0x87, 0x1f, 0xb8, 0x36, 0x96, 0x41, 0x6f, + 0x69, 0x97, 0x8e, 0x80, 0x6c, 0x02, 0xf5, 0x4c, 0x66, 0x1a, 0xc9, 0x1b, 0xa8, 0xda, 0xaa, 0xba, + 0xe9, 0xb5, 0x2b, 0xb7, 0x6f, 0xb5, 0x48, 0xa2, 0xc7, 0xf0, 0xe0, 0x3d, 0x9a, 0x32, 0xa9, 0x68, + 0x07, 0x48, 0x1f, 0x05, 0x96, 0x8b, 0x4a, 0xdf, 0x02, 0x09, 0x31, 0xb7, 0x4a, 0xe5, 0x3f, 0x84, + 0x6a, 0x86, 0xcb, 0xb5, 0xf8, 0x7b, 0x19, 0x2e, 0x07, 0x31, 0xfd, 0xe5, 0x41, 0xcb, 0x0d, 0xb0, + 0x27, 0xc5, 0x3c, 0xcd, 0xce, 0x59, 0xca, 0xc5, 0x6a, 0x1b, 0x51, 0x07, 0x0e, 0x26, 0x16, 0x1a, + 0x4d, 0x2d, 0x76, 0x4d, 0xb9, 0x3f, 0xd9, 0xa0, 0x18, 0xc4, 0xe4, 0x33, 0xdc, 0xbf, 0x81, 0x2c, + 0xc6, 0x7b, 0x52, 0xa6, 0xd9, 0x8d, 0x4e, 0x1a, 0x9b, 0xa4, 0x34, 0x80, 0x96, 0x53, 0xe6, 0x96, + 0xdd, 0xd2, 0x9f, 0x1e, 0x1c, 0x76, 0xe7, 0xe2, 0xca, 0x65, 0x85, 0x72, 0x79, 0x3d, 0xf4, 0xc7, + 0x00, 0x6e, 0x1f, 0x37, 0x72, 0xea, 0xd6, 0xf3, 0x29, 0x7f, 0xe6, 0x33, 0xd8, 0x57, 0x72, 0x99, + 0x2f, 0x53, 0x34, 0x53, 0x38, 0xe5, 0xdf, 0xed, 0x23, 0x1b, 0x17, 0x3b, 0x61, 0x43, 0xc9, 0xe5, + 0x25, 0xae, 0x86, 0xd6, 0x4b, 0x5e, 0xc3, 0x51, 0x6c, 0xb9, 0x23, 0x26, 0x84, 0x3d, 0x8d, 0x68, + 0xaa, 0x64, 0x1a, 0xad, 0x17, 0xba, 0x76, 0xb1, 0x13, 0x3e, 0x72, 0x98, 0x77, 0x42, 0xf4, 0x99, + 0x61, 0xe7, 0x4a, 0xa6, 0x76, 0x60, 0xdd, 0x5a, 0xbe, 0x4f, 0x2a, 0x41, 0xd3, 0xfd, 0xe1, 0x01, + 0x9d, 0xc8, 0xb4, 0x44, 0x9b, 0xee, 0xd3, 0x6e, 0x11, 0xb0, 0xf9, 0x23, 0x77, 0xef, 0x1f, 0x8b, + 0x73, 0x1f, 0xe6, 0x37, 0x39, 0xf4, 0xbe, 0xf6, 0x0a, 0x92, 0x44, 0x0a, 0x96, 0x25, 0xbe, 0x54, + 0x49, 0x90, 0x60, 0x66, 0x2f, 0x36, 0x70, 0x21, 0x36, 0xe3, 0xfa, 0x5f, 0xe7, 0x7e, 0x66, 0x8d, + 0x71, 0xd5, 0xe2, 0x5f, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x08, 0x29, 0x16, 0x83, 0x04, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_instance_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_instance_admin.pb.go new file mode 100644 index 0000000..bf2f449 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_instance_admin.pb.go @@ -0,0 +1,922 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/admin/v2/bigtable_instance_admin.proto +// DO NOT EDIT! + +/* +Package admin is a generated protocol buffer package. + +It is generated from these files: + google/bigtable/admin/v2/bigtable_instance_admin.proto + google/bigtable/admin/v2/bigtable_table_admin.proto + google/bigtable/admin/v2/common.proto + google/bigtable/admin/v2/instance.proto + google/bigtable/admin/v2/table.proto + +It has these top-level messages: + CreateInstanceRequest + GetInstanceRequest + ListInstancesRequest + ListInstancesResponse + DeleteInstanceRequest + CreateClusterRequest + GetClusterRequest + ListClustersRequest + ListClustersResponse + DeleteClusterRequest + CreateInstanceMetadata + UpdateClusterMetadata + CreateTableRequest + DropRowRangeRequest + ListTablesRequest + ListTablesResponse + GetTableRequest + DeleteTableRequest + ModifyColumnFamiliesRequest + Instance + Cluster + Table + ColumnFamily + GcRule +*/ +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Request message for BigtableInstanceAdmin.CreateInstance. +type CreateInstanceRequest struct { + // The unique name of the project in which to create the new instance. + // Values are of the form `projects/<project>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The ID to be used when referring to the new instance within its project, + // e.g., just `myinstance` rather than + // `projects/myproject/instances/myinstance`. + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId" json:"instance_id,omitempty"` + // The instance to create. + // Fields marked `OutputOnly` must be left blank. + Instance *Instance `protobuf:"bytes,3,opt,name=instance" json:"instance,omitempty"` + // The clusters to be created within the instance, mapped by desired + // cluster ID, e.g., just `mycluster` rather than + // `projects/myproject/instances/myinstance/clusters/mycluster`. + // Fields marked `OutputOnly` must be left blank. + // Currently exactly one cluster must be specified. + Clusters map[string]*Cluster `protobuf:"bytes,4,rep,name=clusters" json:"clusters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *CreateInstanceRequest) Reset() { *m = CreateInstanceRequest{} } +func (m *CreateInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*CreateInstanceRequest) ProtoMessage() {} +func (*CreateInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *CreateInstanceRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateInstanceRequest) GetInstanceId() string { + if m != nil { + return m.InstanceId + } + return "" +} + +func (m *CreateInstanceRequest) GetInstance() *Instance { + if m != nil { + return m.Instance + } + return nil +} + +func (m *CreateInstanceRequest) GetClusters() map[string]*Cluster { + if m != nil { + return m.Clusters + } + return nil +} + +// Request message for BigtableInstanceAdmin.GetInstance. +type GetInstanceRequest struct { + // The unique name of the requested instance. Values are of the form + // `projects/<project>/instances/<instance>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetInstanceRequest) Reset() { *m = GetInstanceRequest{} } +func (m *GetInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*GetInstanceRequest) ProtoMessage() {} +func (*GetInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *GetInstanceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for BigtableInstanceAdmin.ListInstances. +type ListInstancesRequest struct { + // The unique name of the project for which a list of instances is requested. + // Values are of the form `projects/<project>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The value of `next_page_token` returned by a previous call. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListInstancesRequest) Reset() { *m = ListInstancesRequest{} } +func (m *ListInstancesRequest) String() string { return proto.CompactTextString(m) } +func (*ListInstancesRequest) ProtoMessage() {} +func (*ListInstancesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ListInstancesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListInstancesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for BigtableInstanceAdmin.ListInstances. +type ListInstancesResponse struct { + // The list of requested instances. + Instances []*Instance `protobuf:"bytes,1,rep,name=instances" json:"instances,omitempty"` + // Locations from which Instance information could not be retrieved, + // due to an outage or some other transient condition. + // Instances whose Clusters are all in one of the failed locations + // may be missing from `instances`, and Instances with at least one + // Cluster in a failed location may only have partial information returned. + FailedLocations []string `protobuf:"bytes,2,rep,name=failed_locations,json=failedLocations" json:"failed_locations,omitempty"` + // Set if not all instances could be returned in a single response. + // Pass this value to `page_token` in another request to get the next + // page of results. + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListInstancesResponse) Reset() { *m = ListInstancesResponse{} } +func (m *ListInstancesResponse) String() string { return proto.CompactTextString(m) } +func (*ListInstancesResponse) ProtoMessage() {} +func (*ListInstancesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ListInstancesResponse) GetInstances() []*Instance { + if m != nil { + return m.Instances + } + return nil +} + +func (m *ListInstancesResponse) GetFailedLocations() []string { + if m != nil { + return m.FailedLocations + } + return nil +} + +func (m *ListInstancesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for BigtableInstanceAdmin.DeleteInstance. +type DeleteInstanceRequest struct { + // The unique name of the instance to be deleted. + // Values are of the form `projects/<project>/instances/<instance>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteInstanceRequest) Reset() { *m = DeleteInstanceRequest{} } +func (m *DeleteInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteInstanceRequest) ProtoMessage() {} +func (*DeleteInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *DeleteInstanceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for BigtableInstanceAdmin.CreateCluster. +type CreateClusterRequest struct { + // The unique name of the instance in which to create the new cluster. + // Values are of the form + // `projects/<project>/instances/<instance>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The ID to be used when referring to the new cluster within its instance, + // e.g., just `mycluster` rather than + // `projects/myproject/instances/myinstance/clusters/mycluster`. + ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The cluster to be created. + // Fields marked `OutputOnly` must be left blank. + Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"` +} + +func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } +func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*CreateClusterRequest) ProtoMessage() {} +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *CreateClusterRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *CreateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +// Request message for BigtableInstanceAdmin.GetCluster. +type GetClusterRequest struct { + // The unique name of the requested cluster. Values are of the form + // `projects/<project>/instances/<instance>/clusters/<cluster>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } +func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } +func (*GetClusterRequest) ProtoMessage() {} +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *GetClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for BigtableInstanceAdmin.ListClusters. +type ListClustersRequest struct { + // The unique name of the instance for which a list of clusters is requested. + // Values are of the form `projects/<project>/instances/<instance>`. + // Use `<instance> = '-'` to list Clusters for all Instances in a project, + // e.g., `projects/myproject/instances/-`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The value of `next_page_token` returned by a previous call. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } +func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } +func (*ListClustersRequest) ProtoMessage() {} +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ListClustersRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListClustersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for BigtableInstanceAdmin.ListClusters. +type ListClustersResponse struct { + // The list of requested clusters. + Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"` + // Locations from which Cluster information could not be retrieved, + // due to an outage or some other transient condition. + // Clusters from these locations may be missing from `clusters`, + // or may only have partial information returned. + FailedLocations []string `protobuf:"bytes,2,rep,name=failed_locations,json=failedLocations" json:"failed_locations,omitempty"` + // Set if not all clusters could be returned in a single response. + // Pass this value to `page_token` in another request to get the next + // page of results. + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } +func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } +func (*ListClustersResponse) ProtoMessage() {} +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ListClustersResponse) GetClusters() []*Cluster { + if m != nil { + return m.Clusters + } + return nil +} + +func (m *ListClustersResponse) GetFailedLocations() []string { + if m != nil { + return m.FailedLocations + } + return nil +} + +func (m *ListClustersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for BigtableInstanceAdmin.DeleteCluster. +type DeleteClusterRequest struct { + // The unique name of the cluster to be deleted. Values are of the form + // `projects/<project>/instances/<instance>/clusters/<cluster>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } +func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteClusterRequest) ProtoMessage() {} +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeleteClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The metadata for the Operation returned by CreateInstance. +type CreateInstanceMetadata struct { + // The request that prompted the initiation of this CreateInstance operation. + OriginalRequest *CreateInstanceRequest `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The time at which the original request was received. + RequestTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which the operation failed or was completed successfully. + FinishTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *CreateInstanceMetadata) Reset() { *m = CreateInstanceMetadata{} } +func (m *CreateInstanceMetadata) String() string { return proto.CompactTextString(m) } +func (*CreateInstanceMetadata) ProtoMessage() {} +func (*CreateInstanceMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *CreateInstanceMetadata) GetOriginalRequest() *CreateInstanceRequest { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *CreateInstanceMetadata) GetRequestTime() *google_protobuf1.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *CreateInstanceMetadata) GetFinishTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +// The metadata for the Operation returned by UpdateCluster. +type UpdateClusterMetadata struct { + // The request that prompted the initiation of this UpdateCluster operation. + OriginalRequest *Cluster `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The time at which the original request was received. + RequestTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which the operation failed or was completed successfully. + FinishTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *UpdateClusterMetadata) Reset() { *m = UpdateClusterMetadata{} } +func (m *UpdateClusterMetadata) String() string { return proto.CompactTextString(m) } +func (*UpdateClusterMetadata) ProtoMessage() {} +func (*UpdateClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *UpdateClusterMetadata) GetOriginalRequest() *Cluster { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *UpdateClusterMetadata) GetRequestTime() *google_protobuf1.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *UpdateClusterMetadata) GetFinishTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +func init() { + proto.RegisterType((*CreateInstanceRequest)(nil), "google.bigtable.admin.v2.CreateInstanceRequest") + proto.RegisterType((*GetInstanceRequest)(nil), "google.bigtable.admin.v2.GetInstanceRequest") + proto.RegisterType((*ListInstancesRequest)(nil), "google.bigtable.admin.v2.ListInstancesRequest") + proto.RegisterType((*ListInstancesResponse)(nil), "google.bigtable.admin.v2.ListInstancesResponse") + proto.RegisterType((*DeleteInstanceRequest)(nil), "google.bigtable.admin.v2.DeleteInstanceRequest") + proto.RegisterType((*CreateClusterRequest)(nil), "google.bigtable.admin.v2.CreateClusterRequest") + proto.RegisterType((*GetClusterRequest)(nil), "google.bigtable.admin.v2.GetClusterRequest") + proto.RegisterType((*ListClustersRequest)(nil), "google.bigtable.admin.v2.ListClustersRequest") + proto.RegisterType((*ListClustersResponse)(nil), "google.bigtable.admin.v2.ListClustersResponse") + proto.RegisterType((*DeleteClusterRequest)(nil), "google.bigtable.admin.v2.DeleteClusterRequest") + proto.RegisterType((*CreateInstanceMetadata)(nil), "google.bigtable.admin.v2.CreateInstanceMetadata") + proto.RegisterType((*UpdateClusterMetadata)(nil), "google.bigtable.admin.v2.UpdateClusterMetadata") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for BigtableInstanceAdmin service + +type BigtableInstanceAdminClient interface { + // Create an instance within a project. + CreateInstance(ctx context.Context, in *CreateInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Gets information about an instance. + GetInstance(ctx context.Context, in *GetInstanceRequest, opts ...grpc.CallOption) (*Instance, error) + // Lists information about instances in a project. + ListInstances(ctx context.Context, in *ListInstancesRequest, opts ...grpc.CallOption) (*ListInstancesResponse, error) + // Updates an instance within a project. + UpdateInstance(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Instance, error) + // Delete an instance from a project. + DeleteInstance(ctx context.Context, in *DeleteInstanceRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Creates a cluster within an instance. + CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Gets information about a cluster. + GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + // Lists information about clusters in an instance. + ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) + // Updates a cluster within an instance. + UpdateCluster(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes a cluster from an instance. + DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) +} + +type bigtableInstanceAdminClient struct { + cc *grpc.ClientConn +} + +func NewBigtableInstanceAdminClient(cc *grpc.ClientConn) BigtableInstanceAdminClient { + return &bigtableInstanceAdminClient{cc} +} + +func (c *bigtableInstanceAdminClient) CreateInstance(ctx context.Context, in *CreateInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/CreateInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) GetInstance(ctx context.Context, in *GetInstanceRequest, opts ...grpc.CallOption) (*Instance, error) { + out := new(Instance) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/GetInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) ListInstances(ctx context.Context, in *ListInstancesRequest, opts ...grpc.CallOption) (*ListInstancesResponse, error) { + out := new(ListInstancesResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/ListInstances", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) UpdateInstance(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Instance, error) { + out := new(Instance) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/UpdateInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) DeleteInstance(ctx context.Context, in *DeleteInstanceRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/DeleteInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/CreateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/GetCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { + out := new(ListClustersResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/ListClusters", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) UpdateCluster(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/UpdateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/DeleteCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for BigtableInstanceAdmin service + +type BigtableInstanceAdminServer interface { + // Create an instance within a project. + CreateInstance(context.Context, *CreateInstanceRequest) (*google_longrunning.Operation, error) + // Gets information about an instance. + GetInstance(context.Context, *GetInstanceRequest) (*Instance, error) + // Lists information about instances in a project. + ListInstances(context.Context, *ListInstancesRequest) (*ListInstancesResponse, error) + // Updates an instance within a project. + UpdateInstance(context.Context, *Instance) (*Instance, error) + // Delete an instance from a project. + DeleteInstance(context.Context, *DeleteInstanceRequest) (*google_protobuf3.Empty, error) + // Creates a cluster within an instance. + CreateCluster(context.Context, *CreateClusterRequest) (*google_longrunning.Operation, error) + // Gets information about a cluster. + GetCluster(context.Context, *GetClusterRequest) (*Cluster, error) + // Lists information about clusters in an instance. + ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) + // Updates a cluster within an instance. + UpdateCluster(context.Context, *Cluster) (*google_longrunning.Operation, error) + // Deletes a cluster from an instance. + DeleteCluster(context.Context, *DeleteClusterRequest) (*google_protobuf3.Empty, error) +} + +func RegisterBigtableInstanceAdminServer(s *grpc.Server, srv BigtableInstanceAdminServer) { + s.RegisterService(&_BigtableInstanceAdmin_serviceDesc, srv) +} + +func _BigtableInstanceAdmin_CreateInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).CreateInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/CreateInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).CreateInstance(ctx, req.(*CreateInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_GetInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).GetInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/GetInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).GetInstance(ctx, req.(*GetInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_ListInstances_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInstancesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).ListInstances(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/ListInstances", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).ListInstances(ctx, req.(*ListInstancesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_UpdateInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Instance) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).UpdateInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/UpdateInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).UpdateInstance(ctx, req.(*Instance)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_DeleteInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).DeleteInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/DeleteInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).DeleteInstance(ctx, req.(*DeleteInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_CreateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).CreateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/CreateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).CreateCluster(ctx, req.(*CreateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).GetCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/GetCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).GetCluster(ctx, req.(*GetClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListClustersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).ListClusters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/ListClusters", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).ListClusters(ctx, req.(*ListClustersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Cluster) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).UpdateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/UpdateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).UpdateCluster(ctx, req.(*Cluster)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_DeleteCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).DeleteCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/DeleteCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).DeleteCluster(ctx, req.(*DeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _BigtableInstanceAdmin_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.bigtable.admin.v2.BigtableInstanceAdmin", + HandlerType: (*BigtableInstanceAdminServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateInstance", + Handler: _BigtableInstanceAdmin_CreateInstance_Handler, + }, + { + MethodName: "GetInstance", + Handler: _BigtableInstanceAdmin_GetInstance_Handler, + }, + { + MethodName: "ListInstances", + Handler: _BigtableInstanceAdmin_ListInstances_Handler, + }, + { + MethodName: "UpdateInstance", + Handler: _BigtableInstanceAdmin_UpdateInstance_Handler, + }, + { + MethodName: "DeleteInstance", + Handler: _BigtableInstanceAdmin_DeleteInstance_Handler, + }, + { + MethodName: "CreateCluster", + Handler: _BigtableInstanceAdmin_CreateCluster_Handler, + }, + { + MethodName: "GetCluster", + Handler: _BigtableInstanceAdmin_GetCluster_Handler, + }, + { + MethodName: "ListClusters", + Handler: _BigtableInstanceAdmin_ListClusters_Handler, + }, + { + MethodName: "UpdateCluster", + Handler: _BigtableInstanceAdmin_UpdateCluster_Handler, + }, + { + MethodName: "DeleteCluster", + Handler: _BigtableInstanceAdmin_DeleteCluster_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/bigtable/admin/v2/bigtable_instance_admin.proto", +} + +func init() { + proto.RegisterFile("google/bigtable/admin/v2/bigtable_instance_admin.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 985 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x41, 0x8f, 0xdb, 0x44, + 0x14, 0xd6, 0x24, 0xa5, 0x34, 0xcf, 0xcd, 0xee, 0x32, 0x6c, 0x56, 0x91, 0x69, 0xd5, 0xad, 0x2b, + 0xb5, 0x69, 0xba, 0xd8, 0x22, 0x20, 0x16, 0xed, 0x2a, 0x08, 0xb6, 0x54, 0xd5, 0x4a, 0x5b, 0xb1, + 0x8a, 0xca, 0x81, 0x1e, 0x88, 0x66, 0x93, 0x59, 0x63, 0xea, 0x8c, 0x8d, 0x3d, 0x59, 0xb1, 0xaa, + 0x7a, 0x41, 0x88, 0x43, 0x25, 0x38, 0xc0, 0x11, 0x71, 0xe2, 0xc2, 0x81, 0x7f, 0xc2, 0x91, 0x23, + 0x27, 0x24, 0x7e, 0x00, 0x3f, 0x01, 0x8d, 0x67, 0xc6, 0x89, 0xb3, 0x76, 0xec, 0x08, 0x21, 0xf5, + 0x66, 0xcf, 0xbc, 0xf7, 0xe6, 0x9b, 0xef, 0xfb, 0xfc, 0x5e, 0x02, 0xef, 0xba, 0x41, 0xe0, 0xfa, + 0xd4, 0x39, 0xf1, 0x5c, 0x4e, 0x4e, 0x7c, 0xea, 0x90, 0xf1, 0xc4, 0x63, 0xce, 0x59, 0x2f, 0x5d, + 0x19, 0x7a, 0x2c, 0xe6, 0x84, 0x8d, 0xe8, 0x30, 0xd9, 0xb2, 0xc3, 0x28, 0xe0, 0x01, 0x6e, 0xcb, + 0x3c, 0x5b, 0x47, 0xd9, 0x72, 0xf3, 0xac, 0x67, 0x5e, 0x53, 0x15, 0x49, 0xe8, 0x39, 0x84, 0xb1, + 0x80, 0x13, 0xee, 0x05, 0x2c, 0x96, 0x79, 0xe6, 0x9d, 0xc2, 0xf3, 0xf4, 0x31, 0x2a, 0xf0, 0x96, + 0x0a, 0xf4, 0x03, 0xe6, 0x46, 0x53, 0xc6, 0x3c, 0xe6, 0x3a, 0x41, 0x48, 0xa3, 0x4c, 0xb5, 0x37, + 0x54, 0x50, 0xf2, 0x76, 0x32, 0x3d, 0x75, 0xe8, 0x24, 0xe4, 0xe7, 0x6a, 0xf3, 0xc6, 0xe2, 0x26, + 0xf7, 0x26, 0x34, 0xe6, 0x64, 0x12, 0xca, 0x00, 0xeb, 0xf7, 0x1a, 0xb4, 0xee, 0x47, 0x94, 0x70, + 0x7a, 0xa8, 0xce, 0x1e, 0xd0, 0x2f, 0xa7, 0x34, 0xe6, 0x78, 0x0b, 0x2e, 0x87, 0x24, 0xa2, 0x8c, + 0xb7, 0xd1, 0x36, 0xea, 0x34, 0x06, 0xea, 0x0d, 0xdf, 0x00, 0x23, 0x65, 0xc3, 0x1b, 0xb7, 0x6b, + 0xc9, 0x26, 0xe8, 0xa5, 0xc3, 0x31, 0x7e, 0x1f, 0xae, 0xe8, 0xb7, 0x76, 0x7d, 0x1b, 0x75, 0x8c, + 0x9e, 0x65, 0x17, 0x31, 0x65, 0xa7, 0xa7, 0xa6, 0x39, 0xf8, 0x53, 0xb8, 0x32, 0xf2, 0xa7, 0x31, + 0xa7, 0x51, 0xdc, 0xbe, 0xb4, 0x5d, 0xef, 0x18, 0xbd, 0x7e, 0x71, 0x7e, 0x2e, 0x76, 0xfb, 0xbe, + 0xca, 0x7f, 0xc0, 0x78, 0x74, 0x3e, 0x48, 0xcb, 0x99, 0x9f, 0x41, 0x33, 0xb3, 0x85, 0x37, 0xa0, + 0xfe, 0x94, 0x9e, 0xab, 0x1b, 0x8a, 0x47, 0xbc, 0x0b, 0xaf, 0x9c, 0x11, 0x7f, 0x4a, 0x93, 0x8b, + 0x19, 0xbd, 0x9b, 0x4b, 0x8e, 0x96, 0x95, 0x06, 0x32, 0x7e, 0xaf, 0xf6, 0x1e, 0xb2, 0x3a, 0x80, + 0x1f, 0x52, 0xbe, 0xc8, 0x24, 0x86, 0x4b, 0x8c, 0x4c, 0xa8, 0x3a, 0x25, 0x79, 0xb6, 0x1e, 0xc1, + 0xe6, 0x91, 0x17, 0xa7, 0xa1, 0x71, 0x19, 0xeb, 0xd7, 0x01, 0x42, 0xe2, 0xd2, 0x21, 0x0f, 0x9e, + 0x52, 0xa6, 0x48, 0x6f, 0x88, 0x95, 0xc7, 0x62, 0xc1, 0xfa, 0x0d, 0x41, 0x6b, 0xa1, 0x5e, 0x1c, + 0x06, 0x2c, 0xa6, 0xf8, 0x03, 0x68, 0x68, 0x66, 0xe3, 0x36, 0x4a, 0xe8, 0xac, 0x22, 0xc7, 0x2c, + 0x09, 0xdf, 0x85, 0x8d, 0x53, 0xe2, 0xf9, 0x74, 0x3c, 0xf4, 0x83, 0x91, 0xb4, 0x5e, 0xbb, 0xb6, + 0x5d, 0xef, 0x34, 0x06, 0xeb, 0x72, 0xfd, 0x48, 0x2f, 0xe3, 0xdb, 0xb0, 0xce, 0xe8, 0x57, 0x7c, + 0x38, 0x07, 0xb5, 0x9e, 0x40, 0x6d, 0x8a, 0xe5, 0xe3, 0x14, 0xee, 0x3d, 0x68, 0x7d, 0x44, 0x7d, + 0x7a, 0xd1, 0x74, 0x79, 0x54, 0xbd, 0x40, 0xb0, 0x29, 0x65, 0xd6, 0x8c, 0x97, 0x73, 0xa5, 0x14, + 0x9f, 0x19, 0xb4, 0xa1, 0x56, 0x0e, 0xc7, 0x78, 0x1f, 0x5e, 0x55, 0x2f, 0xca, 0x9e, 0x15, 0x34, + 0xd6, 0x19, 0xd6, 0x1d, 0x78, 0xed, 0x21, 0xe5, 0x0b, 0x40, 0xf2, 0x50, 0x1f, 0xc1, 0xeb, 0x42, + 0x10, 0x6d, 0xb7, 0xff, 0xa8, 0xef, 0xaf, 0x48, 0xfa, 0x65, 0x56, 0x4e, 0xc9, 0xdb, 0x9f, 0xfb, + 0x58, 0xa4, 0xba, 0x15, 0x6e, 0x93, 0xa6, 0xfc, 0x1f, 0xda, 0x76, 0x61, 0x53, 0x6a, 0x5b, 0x81, + 0xa4, 0x7f, 0x10, 0x6c, 0x65, 0xbf, 0xe0, 0x47, 0x94, 0x93, 0x31, 0xe1, 0x04, 0x3f, 0x81, 0x8d, + 0x20, 0xf2, 0x5c, 0x8f, 0x11, 0x7f, 0x18, 0xc9, 0x12, 0x49, 0xaa, 0xd1, 0x73, 0x56, 0xec, 0x06, + 0x83, 0x75, 0x5d, 0x48, 0x43, 0xe9, 0xc3, 0x55, 0x55, 0x72, 0x28, 0xfa, 0xa1, 0xfa, 0xd4, 0x4d, + 0x5d, 0x57, 0x37, 0x4b, 0xfb, 0xb1, 0x6e, 0x96, 0x03, 0x43, 0xc5, 0x8b, 0x15, 0xbc, 0x0f, 0xc6, + 0xa9, 0xc7, 0xbc, 0xf8, 0x73, 0x99, 0x5d, 0x2f, 0xcd, 0x06, 0x19, 0x2e, 0x16, 0xac, 0xbf, 0x10, + 0xb4, 0x3e, 0x09, 0xc7, 0x33, 0x37, 0xa7, 0x37, 0x3e, 0x2a, 0xbc, 0x71, 0x05, 0x49, 0x5f, 0xa6, + 0x3b, 0xf6, 0xfe, 0x34, 0xa0, 0x75, 0xa0, 0xa0, 0x6a, 0x31, 0x3e, 0x14, 0x88, 0xf1, 0xf7, 0x08, + 0xd6, 0xb2, 0x22, 0xe1, 0x55, 0xe5, 0x34, 0xaf, 0xeb, 0x84, 0xb9, 0xb1, 0x68, 0x7f, 0xac, 0xc7, + 0xa2, 0xb5, 0xf3, 0xf5, 0x1f, 0x7f, 0xff, 0x58, 0xbb, 0x6d, 0xdd, 0x14, 0x03, 0xf5, 0x99, 0xfc, + 0xbc, 0xfa, 0x61, 0x14, 0x7c, 0x41, 0x47, 0x3c, 0x76, 0xba, 0xcf, 0xd3, 0x21, 0x1b, 0xef, 0xa1, + 0x2e, 0x7e, 0x81, 0xc0, 0x98, 0x6b, 0xd9, 0x78, 0xa7, 0x18, 0xcd, 0xc5, 0xce, 0x6e, 0x56, 0xe8, + 0xa4, 0xd6, 0xdd, 0x04, 0xcf, 0x2d, 0x2c, 0xf1, 0x08, 0xdb, 0xcf, 0xa1, 0x99, 0x81, 0x71, 0xba, + 0xcf, 0xf1, 0x4f, 0x08, 0x9a, 0x99, 0x2e, 0x8e, 0xed, 0xe2, 0x03, 0xf2, 0xc6, 0x87, 0xe9, 0x54, + 0x8e, 0x97, 0xfd, 0x63, 0x01, 0xdd, 0x32, 0xb6, 0xf0, 0xb7, 0x08, 0xd6, 0xa4, 0x73, 0x53, 0xb6, + 0x2a, 0xdc, 0xbf, 0x12, 0x47, 0x4a, 0x33, 0xb3, 0x9c, 0x23, 0xa1, 0xd9, 0x37, 0x08, 0xd6, 0xb2, + 0xe3, 0x63, 0x99, 0x89, 0x72, 0x07, 0x8d, 0xb9, 0x75, 0xc1, 0xca, 0x0f, 0xc4, 0xcf, 0x26, 0xcd, + 0x47, 0xb7, 0x82, 0x5a, 0x3f, 0x23, 0x68, 0x66, 0xe6, 0xd2, 0x32, 0xb5, 0xf2, 0x06, 0x58, 0x99, + 0x93, 0xfb, 0x09, 0x96, 0x5d, 0x6b, 0x27, 0x5f, 0x9b, 0x0c, 0x1a, 0x47, 0xb7, 0xf4, 0x3d, 0x3d, + 0xaa, 0xf0, 0x0f, 0x08, 0x60, 0x36, 0xab, 0xf0, 0xbd, 0xa5, 0xce, 0x5e, 0x40, 0x56, 0xde, 0x71, + 0xac, 0x77, 0x12, 0x74, 0x36, 0xde, 0x29, 0x63, 0x2a, 0x85, 0x26, 0x48, 0xfb, 0x05, 0xc1, 0xd5, + 0xf9, 0x41, 0x86, 0xdf, 0x5c, 0xee, 0xd8, 0x85, 0xf9, 0x69, 0xda, 0x55, 0xc3, 0x95, 0xbf, 0xb3, + 0x28, 0x2b, 0x72, 0x28, 0xba, 0x42, 0x33, 0xd3, 0xa4, 0x71, 0x39, 0x21, 0x65, 0x6a, 0xee, 0x26, + 0x48, 0xde, 0x32, 0x57, 0xe2, 0x4b, 0xd8, 0xfd, 0x3b, 0x04, 0xcd, 0xcc, 0x44, 0x5d, 0xe6, 0xb3, + 0xbc, 0xd1, 0x5b, 0x68, 0x76, 0x45, 0x4e, 0x77, 0x25, 0x48, 0x07, 0xcf, 0xe0, 0xda, 0x28, 0x98, + 0x14, 0x42, 0x38, 0x30, 0x73, 0x5b, 0xff, 0xb1, 0x38, 0xfa, 0x18, 0x3d, 0xe9, 0xab, 0x3c, 0x37, + 0xf0, 0x09, 0x73, 0xed, 0x20, 0x72, 0x1d, 0x97, 0xb2, 0x04, 0x98, 0x23, 0xb7, 0x48, 0xe8, 0xc5, + 0x17, 0xff, 0x1b, 0xed, 0x27, 0x0f, 0x27, 0x97, 0x93, 0xc8, 0xb7, 0xff, 0x0d, 0x00, 0x00, 0xff, + 0xff, 0xb8, 0x4b, 0x18, 0x4a, 0xb4, 0x0d, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_table_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_table_admin.pb.go new file mode 100644 index 0000000..36146a6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_table_admin.pb.go @@ -0,0 +1,897 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/admin/v2/bigtable_table_admin.proto +// DO NOT EDIT! + +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import _ "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/duration" +import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" +import _ "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.CreateTable][google.bigtable.admin.v2.BigtableTableAdmin.CreateTable] +type CreateTableRequest struct { + // The unique name of the instance in which to create the table. + // Values are of the form `projects/<project>/instances/<instance>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The name by which the new table should be referred to within the parent + // instance, e.g., `foobar` rather than `<parent>/tables/foobar`. + TableId string `protobuf:"bytes,2,opt,name=table_id,json=tableId" json:"table_id,omitempty"` + // The Table to create. + Table *Table `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"` + // The optional list of row keys that will be used to initially split the + // table into several tablets (tablets are similar to HBase regions). + // Given two split keys, `s1` and `s2`, three tablets will be created, + // spanning the key ranges: `[, s1), [s1, s2), [s2, )`. + // + // Example: + // + // * Row keys := `["a", "apple", "custom", "customer_1", "customer_2",` + // `"other", "zz"]` + // * initial_split_keys := `["apple", "customer_1", "customer_2", "other"]` + // * Key assignment: + // - Tablet 1 `[, apple) => {"a"}.` + // - Tablet 2 `[apple, customer_1) => {"apple", "custom"}.` + // - Tablet 3 `[customer_1, customer_2) => {"customer_1"}.` + // - Tablet 4 `[customer_2, other) => {"customer_2"}.` + // - Tablet 5 `[other, ) => {"other", "zz"}.` + InitialSplits []*CreateTableRequest_Split `protobuf:"bytes,4,rep,name=initial_splits,json=initialSplits" json:"initial_splits,omitempty"` +} + +func (m *CreateTableRequest) Reset() { *m = CreateTableRequest{} } +func (m *CreateTableRequest) String() string { return proto.CompactTextString(m) } +func (*CreateTableRequest) ProtoMessage() {} +func (*CreateTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *CreateTableRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateTableRequest) GetTableId() string { + if m != nil { + return m.TableId + } + return "" +} + +func (m *CreateTableRequest) GetTable() *Table { + if m != nil { + return m.Table + } + return nil +} + +func (m *CreateTableRequest) GetInitialSplits() []*CreateTableRequest_Split { + if m != nil { + return m.InitialSplits + } + return nil +} + +// An initial split point for a newly created table. +type CreateTableRequest_Split struct { + // Row key to use as an initial tablet boundary. + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` +} + +func (m *CreateTableRequest_Split) Reset() { *m = CreateTableRequest_Split{} } +func (m *CreateTableRequest_Split) String() string { return proto.CompactTextString(m) } +func (*CreateTableRequest_Split) ProtoMessage() {} +func (*CreateTableRequest_Split) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +func (m *CreateTableRequest_Split) GetKey() []byte { + if m != nil { + return m.Key + } + return nil +} + +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.DropRowRange][google.bigtable.admin.v2.BigtableTableAdmin.DropRowRange] +type DropRowRangeRequest struct { + // The unique name of the table on which to drop a range of rows. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Delete all rows or by prefix. + // + // Types that are valid to be assigned to Target: + // *DropRowRangeRequest_RowKeyPrefix + // *DropRowRangeRequest_DeleteAllDataFromTable + Target isDropRowRangeRequest_Target `protobuf_oneof:"target"` +} + +func (m *DropRowRangeRequest) Reset() { *m = DropRowRangeRequest{} } +func (m *DropRowRangeRequest) String() string { return proto.CompactTextString(m) } +func (*DropRowRangeRequest) ProtoMessage() {} +func (*DropRowRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isDropRowRangeRequest_Target interface { + isDropRowRangeRequest_Target() +} + +type DropRowRangeRequest_RowKeyPrefix struct { + RowKeyPrefix []byte `protobuf:"bytes,2,opt,name=row_key_prefix,json=rowKeyPrefix,proto3,oneof"` +} +type DropRowRangeRequest_DeleteAllDataFromTable struct { + DeleteAllDataFromTable bool `protobuf:"varint,3,opt,name=delete_all_data_from_table,json=deleteAllDataFromTable,oneof"` +} + +func (*DropRowRangeRequest_RowKeyPrefix) isDropRowRangeRequest_Target() {} +func (*DropRowRangeRequest_DeleteAllDataFromTable) isDropRowRangeRequest_Target() {} + +func (m *DropRowRangeRequest) GetTarget() isDropRowRangeRequest_Target { + if m != nil { + return m.Target + } + return nil +} + +func (m *DropRowRangeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DropRowRangeRequest) GetRowKeyPrefix() []byte { + if x, ok := m.GetTarget().(*DropRowRangeRequest_RowKeyPrefix); ok { + return x.RowKeyPrefix + } + return nil +} + +func (m *DropRowRangeRequest) GetDeleteAllDataFromTable() bool { + if x, ok := m.GetTarget().(*DropRowRangeRequest_DeleteAllDataFromTable); ok { + return x.DeleteAllDataFromTable + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DropRowRangeRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DropRowRangeRequest_OneofMarshaler, _DropRowRangeRequest_OneofUnmarshaler, _DropRowRangeRequest_OneofSizer, []interface{}{ + (*DropRowRangeRequest_RowKeyPrefix)(nil), + (*DropRowRangeRequest_DeleteAllDataFromTable)(nil), + } +} + +func _DropRowRangeRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DropRowRangeRequest) + // target + switch x := m.Target.(type) { + case *DropRowRangeRequest_RowKeyPrefix: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.RowKeyPrefix) + case *DropRowRangeRequest_DeleteAllDataFromTable: + t := uint64(0) + if x.DeleteAllDataFromTable { + t = 1 + } + b.EncodeVarint(3<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("DropRowRangeRequest.Target has unexpected type %T", x) + } + return nil +} + +func _DropRowRangeRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DropRowRangeRequest) + switch tag { + case 2: // target.row_key_prefix + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Target = &DropRowRangeRequest_RowKeyPrefix{x} + return true, err + case 3: // target.delete_all_data_from_table + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Target = &DropRowRangeRequest_DeleteAllDataFromTable{x != 0} + return true, err + default: + return false, nil + } +} + +func _DropRowRangeRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DropRowRangeRequest) + // target + switch x := m.Target.(type) { + case *DropRowRangeRequest_RowKeyPrefix: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RowKeyPrefix))) + n += len(x.RowKeyPrefix) + case *DropRowRangeRequest_DeleteAllDataFromTable: + n += proto.SizeVarint(3<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.ListTables][google.bigtable.admin.v2.BigtableTableAdmin.ListTables] +type ListTablesRequest struct { + // The unique name of the instance for which tables should be listed. + // Values are of the form `projects/<project>/instances/<instance>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The view to be applied to the returned tables' fields. + // Defaults to `NAME_ONLY` if unspecified; no others are currently supported. + View Table_View `protobuf:"varint,2,opt,name=view,enum=google.bigtable.admin.v2.Table_View" json:"view,omitempty"` + // The value of `next_page_token` returned by a previous call. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListTablesRequest) Reset() { *m = ListTablesRequest{} } +func (m *ListTablesRequest) String() string { return proto.CompactTextString(m) } +func (*ListTablesRequest) ProtoMessage() {} +func (*ListTablesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ListTablesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListTablesRequest) GetView() Table_View { + if m != nil { + return m.View + } + return Table_VIEW_UNSPECIFIED +} + +func (m *ListTablesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for +// [google.bigtable.admin.v2.BigtableTableAdmin.ListTables][google.bigtable.admin.v2.BigtableTableAdmin.ListTables] +type ListTablesResponse struct { + // The tables present in the requested instance. + Tables []*Table `protobuf:"bytes,1,rep,name=tables" json:"tables,omitempty"` + // Set if not all tables could be returned in a single response. + // Pass this value to `page_token` in another request to get the next + // page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTablesResponse) Reset() { *m = ListTablesResponse{} } +func (m *ListTablesResponse) String() string { return proto.CompactTextString(m) } +func (*ListTablesResponse) ProtoMessage() {} +func (*ListTablesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *ListTablesResponse) GetTables() []*Table { + if m != nil { + return m.Tables + } + return nil +} + +func (m *ListTablesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.GetTable][google.bigtable.admin.v2.BigtableTableAdmin.GetTable] +type GetTableRequest struct { + // The unique name of the requested table. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The view to be applied to the returned table's fields. + // Defaults to `SCHEMA_ONLY` if unspecified. + View Table_View `protobuf:"varint,2,opt,name=view,enum=google.bigtable.admin.v2.Table_View" json:"view,omitempty"` +} + +func (m *GetTableRequest) Reset() { *m = GetTableRequest{} } +func (m *GetTableRequest) String() string { return proto.CompactTextString(m) } +func (*GetTableRequest) ProtoMessage() {} +func (*GetTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *GetTableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetTableRequest) GetView() Table_View { + if m != nil { + return m.View + } + return Table_VIEW_UNSPECIFIED +} + +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.DeleteTable][google.bigtable.admin.v2.BigtableTableAdmin.DeleteTable] +type DeleteTableRequest struct { + // The unique name of the table to be deleted. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteTableRequest) Reset() { *m = DeleteTableRequest{} } +func (m *DeleteTableRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteTableRequest) ProtoMessage() {} +func (*DeleteTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *DeleteTableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.ModifyColumnFamilies][google.bigtable.admin.v2.BigtableTableAdmin.ModifyColumnFamilies] +type ModifyColumnFamiliesRequest struct { + // The unique name of the table whose families should be modified. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Modifications to be atomically applied to the specified table's families. + // Entries are applied in order, meaning that earlier modifications can be + // masked by later ones (in the case of repeated updates to the same family, + // for example). + Modifications []*ModifyColumnFamiliesRequest_Modification `protobuf:"bytes,2,rep,name=modifications" json:"modifications,omitempty"` +} + +func (m *ModifyColumnFamiliesRequest) Reset() { *m = ModifyColumnFamiliesRequest{} } +func (m *ModifyColumnFamiliesRequest) String() string { return proto.CompactTextString(m) } +func (*ModifyColumnFamiliesRequest) ProtoMessage() {} +func (*ModifyColumnFamiliesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *ModifyColumnFamiliesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ModifyColumnFamiliesRequest) GetModifications() []*ModifyColumnFamiliesRequest_Modification { + if m != nil { + return m.Modifications + } + return nil +} + +// A create, update, or delete of a particular column family. +type ModifyColumnFamiliesRequest_Modification struct { + // The ID of the column family to be modified. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // Column familiy modifications. + // + // Types that are valid to be assigned to Mod: + // *ModifyColumnFamiliesRequest_Modification_Create + // *ModifyColumnFamiliesRequest_Modification_Update + // *ModifyColumnFamiliesRequest_Modification_Drop + Mod isModifyColumnFamiliesRequest_Modification_Mod `protobuf_oneof:"mod"` +} + +func (m *ModifyColumnFamiliesRequest_Modification) Reset() { + *m = ModifyColumnFamiliesRequest_Modification{} +} +func (m *ModifyColumnFamiliesRequest_Modification) String() string { return proto.CompactTextString(m) } +func (*ModifyColumnFamiliesRequest_Modification) ProtoMessage() {} +func (*ModifyColumnFamiliesRequest_Modification) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{6, 0} +} + +type isModifyColumnFamiliesRequest_Modification_Mod interface { + isModifyColumnFamiliesRequest_Modification_Mod() +} + +type ModifyColumnFamiliesRequest_Modification_Create struct { + Create *ColumnFamily `protobuf:"bytes,2,opt,name=create,oneof"` +} +type ModifyColumnFamiliesRequest_Modification_Update struct { + Update *ColumnFamily `protobuf:"bytes,3,opt,name=update,oneof"` +} +type ModifyColumnFamiliesRequest_Modification_Drop struct { + Drop bool `protobuf:"varint,4,opt,name=drop,oneof"` +} + +func (*ModifyColumnFamiliesRequest_Modification_Create) isModifyColumnFamiliesRequest_Modification_Mod() { +} +func (*ModifyColumnFamiliesRequest_Modification_Update) isModifyColumnFamiliesRequest_Modification_Mod() { +} +func (*ModifyColumnFamiliesRequest_Modification_Drop) isModifyColumnFamiliesRequest_Modification_Mod() { +} + +func (m *ModifyColumnFamiliesRequest_Modification) GetMod() isModifyColumnFamiliesRequest_Modification_Mod { + if m != nil { + return m.Mod + } + return nil +} + +func (m *ModifyColumnFamiliesRequest_Modification) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *ModifyColumnFamiliesRequest_Modification) GetCreate() *ColumnFamily { + if x, ok := m.GetMod().(*ModifyColumnFamiliesRequest_Modification_Create); ok { + return x.Create + } + return nil +} + +func (m *ModifyColumnFamiliesRequest_Modification) GetUpdate() *ColumnFamily { + if x, ok := m.GetMod().(*ModifyColumnFamiliesRequest_Modification_Update); ok { + return x.Update + } + return nil +} + +func (m *ModifyColumnFamiliesRequest_Modification) GetDrop() bool { + if x, ok := m.GetMod().(*ModifyColumnFamiliesRequest_Modification_Drop); ok { + return x.Drop + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ModifyColumnFamiliesRequest_Modification) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ModifyColumnFamiliesRequest_Modification_OneofMarshaler, _ModifyColumnFamiliesRequest_Modification_OneofUnmarshaler, _ModifyColumnFamiliesRequest_Modification_OneofSizer, []interface{}{ + (*ModifyColumnFamiliesRequest_Modification_Create)(nil), + (*ModifyColumnFamiliesRequest_Modification_Update)(nil), + (*ModifyColumnFamiliesRequest_Modification_Drop)(nil), + } +} + +func _ModifyColumnFamiliesRequest_Modification_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ModifyColumnFamiliesRequest_Modification) + // mod + switch x := m.Mod.(type) { + case *ModifyColumnFamiliesRequest_Modification_Create: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Create); err != nil { + return err + } + case *ModifyColumnFamiliesRequest_Modification_Update: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Update); err != nil { + return err + } + case *ModifyColumnFamiliesRequest_Modification_Drop: + t := uint64(0) + if x.Drop { + t = 1 + } + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("ModifyColumnFamiliesRequest_Modification.Mod has unexpected type %T", x) + } + return nil +} + +func _ModifyColumnFamiliesRequest_Modification_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ModifyColumnFamiliesRequest_Modification) + switch tag { + case 2: // mod.create + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ColumnFamily) + err := b.DecodeMessage(msg) + m.Mod = &ModifyColumnFamiliesRequest_Modification_Create{msg} + return true, err + case 3: // mod.update + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ColumnFamily) + err := b.DecodeMessage(msg) + m.Mod = &ModifyColumnFamiliesRequest_Modification_Update{msg} + return true, err + case 4: // mod.drop + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Mod = &ModifyColumnFamiliesRequest_Modification_Drop{x != 0} + return true, err + default: + return false, nil + } +} + +func _ModifyColumnFamiliesRequest_Modification_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ModifyColumnFamiliesRequest_Modification) + // mod + switch x := m.Mod.(type) { + case *ModifyColumnFamiliesRequest_Modification_Create: + s := proto.Size(x.Create) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ModifyColumnFamiliesRequest_Modification_Update: + s := proto.Size(x.Update) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ModifyColumnFamiliesRequest_Modification_Drop: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*CreateTableRequest)(nil), "google.bigtable.admin.v2.CreateTableRequest") + proto.RegisterType((*CreateTableRequest_Split)(nil), "google.bigtable.admin.v2.CreateTableRequest.Split") + proto.RegisterType((*DropRowRangeRequest)(nil), "google.bigtable.admin.v2.DropRowRangeRequest") + proto.RegisterType((*ListTablesRequest)(nil), "google.bigtable.admin.v2.ListTablesRequest") + proto.RegisterType((*ListTablesResponse)(nil), "google.bigtable.admin.v2.ListTablesResponse") + proto.RegisterType((*GetTableRequest)(nil), "google.bigtable.admin.v2.GetTableRequest") + proto.RegisterType((*DeleteTableRequest)(nil), "google.bigtable.admin.v2.DeleteTableRequest") + proto.RegisterType((*ModifyColumnFamiliesRequest)(nil), "google.bigtable.admin.v2.ModifyColumnFamiliesRequest") + proto.RegisterType((*ModifyColumnFamiliesRequest_Modification)(nil), "google.bigtable.admin.v2.ModifyColumnFamiliesRequest.Modification") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for BigtableTableAdmin service + +type BigtableTableAdminClient interface { + // Creates a new table in the specified instance. + // The table can be created with a full set of initial column families, + // specified in the request. + CreateTable(ctx context.Context, in *CreateTableRequest, opts ...grpc.CallOption) (*Table, error) + // Lists all tables served from a specified instance. + ListTables(ctx context.Context, in *ListTablesRequest, opts ...grpc.CallOption) (*ListTablesResponse, error) + // Gets metadata information about the specified table. + GetTable(ctx context.Context, in *GetTableRequest, opts ...grpc.CallOption) (*Table, error) + // Permanently deletes a specified table and all of its data. + DeleteTable(ctx context.Context, in *DeleteTableRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Atomically performs a series of column family modifications + // on the specified table. + ModifyColumnFamilies(ctx context.Context, in *ModifyColumnFamiliesRequest, opts ...grpc.CallOption) (*Table, error) + // Permanently drop/delete a row range from a specified table. The request can + // specify whether to delete all rows in a table, or only those that match a + // particular prefix. + DropRowRange(ctx context.Context, in *DropRowRangeRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) +} + +type bigtableTableAdminClient struct { + cc *grpc.ClientConn +} + +func NewBigtableTableAdminClient(cc *grpc.ClientConn) BigtableTableAdminClient { + return &bigtableTableAdminClient{cc} +} + +func (c *bigtableTableAdminClient) CreateTable(ctx context.Context, in *CreateTableRequest, opts ...grpc.CallOption) (*Table, error) { + out := new(Table) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/CreateTable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) ListTables(ctx context.Context, in *ListTablesRequest, opts ...grpc.CallOption) (*ListTablesResponse, error) { + out := new(ListTablesResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/ListTables", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) GetTable(ctx context.Context, in *GetTableRequest, opts ...grpc.CallOption) (*Table, error) { + out := new(Table) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/GetTable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) DeleteTable(ctx context.Context, in *DeleteTableRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/DeleteTable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) ModifyColumnFamilies(ctx context.Context, in *ModifyColumnFamiliesRequest, opts ...grpc.CallOption) (*Table, error) { + out := new(Table) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/ModifyColumnFamilies", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) DropRowRange(ctx context.Context, in *DropRowRangeRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/DropRowRange", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for BigtableTableAdmin service + +type BigtableTableAdminServer interface { + // Creates a new table in the specified instance. + // The table can be created with a full set of initial column families, + // specified in the request. + CreateTable(context.Context, *CreateTableRequest) (*Table, error) + // Lists all tables served from a specified instance. + ListTables(context.Context, *ListTablesRequest) (*ListTablesResponse, error) + // Gets metadata information about the specified table. + GetTable(context.Context, *GetTableRequest) (*Table, error) + // Permanently deletes a specified table and all of its data. + DeleteTable(context.Context, *DeleteTableRequest) (*google_protobuf3.Empty, error) + // Atomically performs a series of column family modifications + // on the specified table. + ModifyColumnFamilies(context.Context, *ModifyColumnFamiliesRequest) (*Table, error) + // Permanently drop/delete a row range from a specified table. The request can + // specify whether to delete all rows in a table, or only those that match a + // particular prefix. + DropRowRange(context.Context, *DropRowRangeRequest) (*google_protobuf3.Empty, error) +} + +func RegisterBigtableTableAdminServer(s *grpc.Server, srv BigtableTableAdminServer) { + s.RegisterService(&_BigtableTableAdmin_serviceDesc, srv) +} + +func _BigtableTableAdmin_CreateTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).CreateTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/CreateTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).CreateTable(ctx, req.(*CreateTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_ListTables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).ListTables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/ListTables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).ListTables(ctx, req.(*ListTablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_GetTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).GetTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/GetTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).GetTable(ctx, req.(*GetTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_DeleteTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).DeleteTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/DeleteTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).DeleteTable(ctx, req.(*DeleteTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_ModifyColumnFamilies_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ModifyColumnFamiliesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).ModifyColumnFamilies(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/ModifyColumnFamilies", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).ModifyColumnFamilies(ctx, req.(*ModifyColumnFamiliesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_DropRowRange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DropRowRangeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).DropRowRange(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/DropRowRange", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).DropRowRange(ctx, req.(*DropRowRangeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _BigtableTableAdmin_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.bigtable.admin.v2.BigtableTableAdmin", + HandlerType: (*BigtableTableAdminServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateTable", + Handler: _BigtableTableAdmin_CreateTable_Handler, + }, + { + MethodName: "ListTables", + Handler: _BigtableTableAdmin_ListTables_Handler, + }, + { + MethodName: "GetTable", + Handler: _BigtableTableAdmin_GetTable_Handler, + }, + { + MethodName: "DeleteTable", + Handler: _BigtableTableAdmin_DeleteTable_Handler, + }, + { + MethodName: "ModifyColumnFamilies", + Handler: _BigtableTableAdmin_ModifyColumnFamilies_Handler, + }, + { + MethodName: "DropRowRange", + Handler: _BigtableTableAdmin_DropRowRange_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/bigtable/admin/v2/bigtable_table_admin.proto", +} + +func init() { + proto.RegisterFile("google/bigtable/admin/v2/bigtable_table_admin.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 910 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xdd, 0x6e, 0x1b, 0x45, + 0x14, 0xce, 0xd8, 0x4e, 0x9a, 0x1c, 0x3b, 0x29, 0x0c, 0x25, 0xb8, 0x6e, 0xa1, 0xd1, 0x52, 0x45, + 0xc1, 0x84, 0x5d, 0x69, 0xab, 0xa8, 0x28, 0xb4, 0x82, 0xba, 0xa1, 0x84, 0x3f, 0x29, 0x5a, 0x2a, + 0x24, 0xb8, 0x59, 0x4d, 0xbc, 0x93, 0xed, 0x90, 0xdd, 0x99, 0x65, 0x77, 0x1c, 0xc7, 0x42, 0xbd, + 0x41, 0x48, 0x48, 0xdc, 0xf6, 0xaa, 0xe2, 0x45, 0x10, 0x37, 0x3c, 0x04, 0xd7, 0xdc, 0xf1, 0x08, + 0x3c, 0x00, 0x9a, 0x1f, 0x27, 0x9b, 0x38, 0x1b, 0xd7, 0xb9, 0xb1, 0x66, 0xce, 0xf9, 0xce, 0x39, + 0xdf, 0x9c, 0x33, 0xdf, 0x8e, 0xe1, 0x5e, 0x2c, 0x44, 0x9c, 0x50, 0x6f, 0x9f, 0xc5, 0x92, 0xec, + 0x27, 0xd4, 0x23, 0x51, 0xca, 0xb8, 0x77, 0xe4, 0x9f, 0x58, 0x42, 0xf3, 0xab, 0xed, 0x6e, 0x96, + 0x0b, 0x29, 0x70, 0xdb, 0x04, 0xb9, 0x63, 0x88, 0x6b, 0x9c, 0x47, 0x7e, 0xe7, 0xb6, 0x4d, 0x47, + 0x32, 0xe6, 0x11, 0xce, 0x85, 0x24, 0x92, 0x09, 0x5e, 0x98, 0xb8, 0xce, 0x9b, 0x65, 0xef, 0x40, + 0x3e, 0xb3, 0xe6, 0xbb, 0x95, 0x1c, 0x4c, 0x76, 0x83, 0x7a, 0xd7, 0xa2, 0x12, 0xc1, 0xe3, 0x7c, + 0xc0, 0x39, 0xe3, 0xb1, 0x27, 0x32, 0x9a, 0x9f, 0xa9, 0xf0, 0x8e, 0x05, 0xe9, 0xdd, 0xfe, 0xe0, + 0xc0, 0x8b, 0x06, 0x06, 0x60, 0xfd, 0xb7, 0xce, 0xfb, 0x69, 0x9a, 0xc9, 0x91, 0x75, 0xde, 0x39, + 0xef, 0x94, 0x2c, 0xa5, 0x85, 0x24, 0x69, 0x66, 0x00, 0xce, 0x7f, 0x08, 0xf0, 0xe3, 0x9c, 0x12, + 0x49, 0x9f, 0x2a, 0x62, 0x01, 0xfd, 0x71, 0x40, 0x0b, 0x89, 0x57, 0x61, 0x21, 0x23, 0x39, 0xe5, + 0xb2, 0x8d, 0xd6, 0xd0, 0xc6, 0x52, 0x60, 0x77, 0xf8, 0x26, 0x2c, 0x9a, 0xde, 0xb1, 0xa8, 0x5d, + 0xd3, 0x9e, 0x6b, 0x7a, 0xff, 0x79, 0x84, 0xb7, 0x60, 0x5e, 0x2f, 0xdb, 0xf5, 0x35, 0xb4, 0xd1, + 0xf4, 0xef, 0xb8, 0x55, 0x1d, 0x75, 0x4d, 0x25, 0x83, 0xc6, 0xdf, 0xc1, 0x0a, 0xe3, 0x4c, 0x32, + 0x92, 0x84, 0x45, 0x96, 0x30, 0x59, 0xb4, 0x1b, 0x6b, 0xf5, 0x8d, 0xa6, 0xef, 0x57, 0xc7, 0x4f, + 0xf2, 0x75, 0xbf, 0x51, 0xa1, 0xc1, 0xb2, 0xcd, 0xa4, 0x77, 0x45, 0xe7, 0x26, 0xcc, 0xeb, 0x15, + 0x7e, 0x0d, 0xea, 0x87, 0x74, 0xa4, 0x8f, 0xd2, 0x0a, 0xd4, 0xd2, 0x79, 0x89, 0xe0, 0x8d, 0x9d, + 0x5c, 0x64, 0x81, 0x18, 0x06, 0x84, 0xc7, 0x27, 0xe7, 0xc6, 0xd0, 0xe0, 0x24, 0xa5, 0xf6, 0xd4, + 0x7a, 0x8d, 0xd7, 0x61, 0x25, 0x17, 0xc3, 0xf0, 0x90, 0x8e, 0xc2, 0x2c, 0xa7, 0x07, 0xec, 0x58, + 0x9f, 0xbc, 0xb5, 0x3b, 0x17, 0xb4, 0x72, 0x31, 0xfc, 0x92, 0x8e, 0xf6, 0xb4, 0x15, 0x3f, 0x80, + 0x4e, 0x44, 0x13, 0x2a, 0x69, 0x48, 0x92, 0x24, 0x8c, 0x88, 0x24, 0xe1, 0x41, 0x2e, 0xd2, 0xf0, + 0xb4, 0x2b, 0x8b, 0xbb, 0x73, 0xc1, 0xaa, 0xc1, 0x3c, 0x4a, 0x92, 0x1d, 0x22, 0xc9, 0x93, 0x5c, + 0xa4, 0xfa, 0x20, 0xbd, 0x45, 0x58, 0x90, 0x24, 0x8f, 0xa9, 0x74, 0x7e, 0x41, 0xf0, 0xfa, 0x57, + 0xac, 0x90, 0xda, 0x5e, 0x4c, 0x9b, 0xc8, 0x87, 0xd0, 0x38, 0x62, 0x74, 0xa8, 0x39, 0xad, 0xf8, + 0x77, 0xa7, 0x74, 0xdd, 0xfd, 0x96, 0xd1, 0x61, 0xa0, 0x23, 0xf0, 0xdb, 0x00, 0x19, 0x89, 0x69, + 0x28, 0xc5, 0x21, 0xe5, 0x9a, 0xdf, 0x52, 0xb0, 0xa4, 0x2c, 0x4f, 0x95, 0xc1, 0x19, 0x00, 0x2e, + 0xb3, 0x28, 0x32, 0xc1, 0x0b, 0x8a, 0xef, 0x2b, 0x9a, 0xca, 0xd2, 0x46, 0x7a, 0x4c, 0x53, 0xc7, + 0x6c, 0xe1, 0x78, 0x1d, 0xae, 0x73, 0x7a, 0x2c, 0xc3, 0x52, 0x49, 0x73, 0x81, 0x96, 0x95, 0x79, + 0xef, 0xa4, 0x6c, 0x08, 0xd7, 0x3f, 0xa3, 0xf2, 0xcc, 0x65, 0xbc, 0x68, 0x28, 0x57, 0x3e, 0xb6, + 0xb3, 0x01, 0x78, 0x47, 0x8f, 0x60, 0x5a, 0x0d, 0xe7, 0x9f, 0x1a, 0xdc, 0xfa, 0x5a, 0x44, 0xec, + 0x60, 0xf4, 0x58, 0x24, 0x83, 0x94, 0x3f, 0x21, 0x29, 0x4b, 0xd8, 0xe9, 0x48, 0x2e, 0xe2, 0xf5, + 0x0c, 0x96, 0x53, 0x15, 0xc2, 0xfa, 0x46, 0xc4, 0xed, 0x9a, 0x6e, 0x53, 0xaf, 0x9a, 0xe0, 0x25, + 0x15, 0x8c, 0xcf, 0xa6, 0x0a, 0xce, 0x26, 0xee, 0xfc, 0x85, 0xa0, 0x55, 0xf6, 0xe3, 0x15, 0xa8, + 0xb1, 0xc8, 0x92, 0xa9, 0xb1, 0x08, 0x7f, 0x02, 0x0b, 0x7d, 0xad, 0x14, 0xdd, 0xa4, 0xa6, 0xbf, + 0x7e, 0x89, 0xa2, 0x4e, 0xab, 0x8f, 0x76, 0xe7, 0x02, 0x1b, 0xa7, 0x32, 0x0c, 0xb2, 0x48, 0x65, + 0xa8, 0xcf, 0x9a, 0xc1, 0xc4, 0xe1, 0x1b, 0xd0, 0x88, 0x72, 0x91, 0xb5, 0x1b, 0xf6, 0xf6, 0xeb, + 0x5d, 0x6f, 0x1e, 0xea, 0xa9, 0x88, 0xfc, 0x3f, 0xae, 0x01, 0xee, 0xd9, 0x4c, 0x7a, 0x18, 0x8f, + 0x54, 0x36, 0xfc, 0x02, 0x41, 0xb3, 0x24, 0x71, 0xbc, 0x39, 0xcb, 0x97, 0xa0, 0x33, 0xed, 0x42, + 0x3a, 0x5b, 0x3f, 0xff, 0xfd, 0xef, 0x8b, 0x9a, 0xe7, 0x74, 0xd5, 0xd7, 0xf8, 0x27, 0xa3, 0xa2, + 0x87, 0x59, 0x2e, 0x7e, 0xa0, 0x7d, 0x59, 0x78, 0x5d, 0x8f, 0xf1, 0x42, 0x12, 0xde, 0xa7, 0x85, + 0xd7, 0x7d, 0x6e, 0xbe, 0xd6, 0xc5, 0x36, 0xea, 0xe2, 0xdf, 0x11, 0xc0, 0xa9, 0x1e, 0xf0, 0xfb, + 0xd5, 0x65, 0x26, 0xb4, 0xdb, 0xd9, 0x7c, 0x35, 0xb0, 0x91, 0x98, 0xe3, 0x6b, 0x82, 0x9b, 0x78, + 0x06, 0x82, 0xf8, 0x37, 0x04, 0x8b, 0x63, 0xd9, 0xe0, 0xf7, 0xaa, 0xcb, 0x9d, 0x93, 0xd6, 0xf4, + 0x6e, 0x9d, 0x25, 0xa3, 0xae, 0x78, 0x05, 0x15, 0xcb, 0xc4, 0xeb, 0x3e, 0xc7, 0xbf, 0x22, 0x68, + 0x96, 0x24, 0x76, 0xd9, 0x00, 0x27, 0x95, 0xd8, 0x59, 0x1d, 0xa3, 0xc7, 0x6f, 0x96, 0xfb, 0xa9, + 0x7a, 0xd0, 0xc6, 0x4c, 0xba, 0xb3, 0x30, 0xf9, 0x13, 0xc1, 0x8d, 0x8b, 0xf4, 0x85, 0xb7, 0xae, + 0xa4, 0xc7, 0xe9, 0xed, 0xfa, 0x42, 0x93, 0xdc, 0x71, 0x3e, 0x7e, 0x75, 0x92, 0xdb, 0xe9, 0x05, + 0x05, 0xd5, 0x8d, 0x7b, 0x89, 0xa0, 0x55, 0x7e, 0xa3, 0xf0, 0x07, 0x97, 0xf4, 0x71, 0xf2, 0x2d, + 0xab, 0x6c, 0x64, 0x4f, 0x73, 0x7c, 0xe0, 0xdc, 0x9f, 0x81, 0x63, 0x54, 0xca, 0xbf, 0x8d, 0xba, + 0xbd, 0x63, 0xb8, 0xdd, 0x17, 0x69, 0x25, 0x9f, 0xde, 0x5b, 0x93, 0xba, 0xde, 0x53, 0x2c, 0xf6, + 0xd0, 0xf7, 0x0f, 0x6d, 0x50, 0x2c, 0x12, 0xc2, 0x63, 0x57, 0xe4, 0xb1, 0x17, 0x53, 0xae, 0x39, + 0x7a, 0xc6, 0x45, 0x32, 0x56, 0x4c, 0xfe, 0x73, 0xfa, 0x48, 0x2f, 0xf6, 0x17, 0x34, 0xf2, 0xde, + 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x5d, 0x18, 0x44, 0xe6, 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/common.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/common.pb.go new file mode 100644 index 0000000..d52196d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/common.pb.go @@ -0,0 +1,69 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/admin/v2/common.proto +// DO NOT EDIT! + +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Storage media types for persisting Bigtable data. +type StorageType int32 + +const ( + // The user did not specify a storage type. + StorageType_STORAGE_TYPE_UNSPECIFIED StorageType = 0 + // Flash (SSD) storage should be used. + StorageType_SSD StorageType = 1 + // Magnetic drive (HDD) storage should be used. + StorageType_HDD StorageType = 2 +) + +var StorageType_name = map[int32]string{ + 0: "STORAGE_TYPE_UNSPECIFIED", + 1: "SSD", + 2: "HDD", +} +var StorageType_value = map[string]int32{ + "STORAGE_TYPE_UNSPECIFIED": 0, + "SSD": 1, + "HDD": 2, +} + +func (x StorageType) String() string { + return proto.EnumName(StorageType_name, int32(x)) +} +func (StorageType) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func init() { + proto.RegisterEnum("google.bigtable.admin.v2.StorageType", StorageType_name, StorageType_value) +} + +func init() { proto.RegisterFile("google/bigtable/admin/v2/common.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 234 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0x31, 0x4b, 0xc4, 0x40, + 0x10, 0x85, 0x3d, 0x05, 0x85, 0xbd, 0x26, 0xa4, 0x3a, 0x8e, 0x80, 0x95, 0x8d, 0xc5, 0x0e, 0x9c, + 0xa5, 0x5c, 0xe1, 0x5d, 0xa2, 0x5e, 0xa3, 0xc1, 0x8d, 0x85, 0x36, 0xc7, 0xe4, 0x5c, 0x87, 0x85, + 0xec, 0xce, 0x92, 0xac, 0x07, 0xfe, 0x7b, 0xc9, 0x6e, 0xac, 0xc4, 0xee, 0x0d, 0xef, 0x9b, 0x99, + 0x37, 0x23, 0xae, 0x88, 0x99, 0x3a, 0x0d, 0xad, 0xa1, 0x80, 0x6d, 0xa7, 0x01, 0x3f, 0xac, 0x71, + 0x70, 0x5c, 0xc1, 0x81, 0xad, 0x65, 0x27, 0x7d, 0xcf, 0x81, 0xf3, 0x45, 0xc2, 0xe4, 0x2f, 0x26, + 0x23, 0x26, 0x8f, 0xab, 0x65, 0x31, 0x0d, 0x40, 0x6f, 0x00, 0x9d, 0xe3, 0x80, 0xc1, 0xb0, 0x1b, + 0x52, 0xdf, 0xf2, 0x72, 0x72, 0x63, 0xd5, 0x7e, 0x7d, 0x42, 0x30, 0x56, 0x0f, 0x01, 0xad, 0x4f, + 0xc0, 0xf5, 0x5a, 0xcc, 0x55, 0xe0, 0x1e, 0x49, 0x37, 0xdf, 0x5e, 0xe7, 0x85, 0x58, 0xa8, 0xe6, + 0xf9, 0xe5, 0xee, 0xa1, 0xda, 0x37, 0x6f, 0x75, 0xb5, 0x7f, 0x7d, 0x52, 0x75, 0xb5, 0xdd, 0xdd, + 0xef, 0xaa, 0x32, 0x3b, 0xc9, 0x2f, 0xc4, 0x99, 0x52, 0x65, 0x36, 0x1b, 0xc5, 0x63, 0x59, 0x66, + 0xa7, 0x9b, 0x4e, 0x14, 0x07, 0xb6, 0xf2, 0xbf, 0x74, 0x9b, 0xf9, 0x36, 0x5e, 0x51, 0x8f, 0xbb, + 0xea, 0xd9, 0xfb, 0x7a, 0x02, 0x89, 0x3b, 0x74, 0x24, 0xb9, 0x27, 0x20, 0xed, 0x62, 0x12, 0x48, + 0x16, 0x7a, 0x33, 0xfc, 0x7d, 0xc6, 0x6d, 0x14, 0xed, 0x79, 0x24, 0x6f, 0x7e, 0x02, 0x00, 0x00, + 0xff, 0xff, 0x66, 0x13, 0x33, 0x8e, 0x35, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/instance.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/instance.pb.go new file mode 100644 index 0000000..01b61e4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/instance.pb.go @@ -0,0 +1,277 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/admin/v2/instance.proto +// DO NOT EDIT! + +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Possible states of an instance. +type Instance_State int32 + +const ( + // The state of the instance could not be determined. + Instance_STATE_NOT_KNOWN Instance_State = 0 + // The instance has been successfully created and can serve requests + // to its tables. + Instance_READY Instance_State = 1 + // The instance is currently being created, and may be destroyed + // if the creation process encounters an error. + Instance_CREATING Instance_State = 2 +) + +var Instance_State_name = map[int32]string{ + 0: "STATE_NOT_KNOWN", + 1: "READY", + 2: "CREATING", +} +var Instance_State_value = map[string]int32{ + "STATE_NOT_KNOWN": 0, + "READY": 1, + "CREATING": 2, +} + +func (x Instance_State) String() string { + return proto.EnumName(Instance_State_name, int32(x)) +} +func (Instance_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +// The type of the instance. +type Instance_Type int32 + +const ( + // The type of the instance is unspecified. If set when creating an + // instance, a `PRODUCTION` instance will be created. If set when updating + // an instance, the type will be left unchanged. + Instance_TYPE_UNSPECIFIED Instance_Type = 0 + // An instance meant for production use. `serve_nodes` must be set + // on the cluster. + Instance_PRODUCTION Instance_Type = 1 +) + +var Instance_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "PRODUCTION", +} +var Instance_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "PRODUCTION": 1, +} + +func (x Instance_Type) String() string { + return proto.EnumName(Instance_Type_name, int32(x)) +} +func (Instance_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 1} } + +// Possible states of a cluster. +type Cluster_State int32 + +const ( + // The state of the cluster could not be determined. + Cluster_STATE_NOT_KNOWN Cluster_State = 0 + // The cluster has been successfully created and is ready to serve requests. + Cluster_READY Cluster_State = 1 + // The cluster is currently being created, and may be destroyed + // if the creation process encounters an error. + // A cluster may not be able to serve requests while being created. + Cluster_CREATING Cluster_State = 2 + // The cluster is currently being resized, and may revert to its previous + // node count if the process encounters an error. + // A cluster is still capable of serving requests while being resized, + // but may exhibit performance as if its number of allocated nodes is + // between the starting and requested states. + Cluster_RESIZING Cluster_State = 3 + // The cluster has no backing nodes. The data (tables) still + // exist, but no operations can be performed on the cluster. + Cluster_DISABLED Cluster_State = 4 +) + +var Cluster_State_name = map[int32]string{ + 0: "STATE_NOT_KNOWN", + 1: "READY", + 2: "CREATING", + 3: "RESIZING", + 4: "DISABLED", +} +var Cluster_State_value = map[string]int32{ + "STATE_NOT_KNOWN": 0, + "READY": 1, + "CREATING": 2, + "RESIZING": 3, + "DISABLED": 4, +} + +func (x Cluster_State) String() string { + return proto.EnumName(Cluster_State_name, int32(x)) +} +func (Cluster_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{1, 0} } + +// A collection of Bigtable [Tables][google.bigtable.admin.v2.Table] and +// the resources that serve them. +// All tables in an instance are served from a single +// [Cluster][google.bigtable.admin.v2.Cluster]. +type Instance struct { + // (`OutputOnly`) + // The unique name of the instance. Values are of the form + // `projects/<project>/instances/[a-z][a-z0-9\\-]+[a-z0-9]`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The descriptive name for this instance as it appears in UIs. + // Can be changed at any time, but should be kept globally unique + // to avoid confusion. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // (`OutputOnly`) + // The current state of the instance. + State Instance_State `protobuf:"varint,3,opt,name=state,enum=google.bigtable.admin.v2.Instance_State" json:"state,omitempty"` + // The type of the instance. Defaults to `PRODUCTION`. + Type Instance_Type `protobuf:"varint,4,opt,name=type,enum=google.bigtable.admin.v2.Instance_Type" json:"type,omitempty"` +} + +func (m *Instance) Reset() { *m = Instance{} } +func (m *Instance) String() string { return proto.CompactTextString(m) } +func (*Instance) ProtoMessage() {} +func (*Instance) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *Instance) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Instance) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Instance) GetState() Instance_State { + if m != nil { + return m.State + } + return Instance_STATE_NOT_KNOWN +} + +func (m *Instance) GetType() Instance_Type { + if m != nil { + return m.Type + } + return Instance_TYPE_UNSPECIFIED +} + +// A resizable group of nodes in a particular cloud location, capable +// of serving all [Tables][google.bigtable.admin.v2.Table] in the parent +// [Instance][google.bigtable.admin.v2.Instance]. +type Cluster struct { + // (`OutputOnly`) + // The unique name of the cluster. Values are of the form + // `projects/<project>/instances/<instance>/clusters/[a-z][-a-z0-9]*`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // (`CreationOnly`) + // The location where this cluster's nodes and storage reside. For best + // performance, clients should be located as close as possible to this cluster. + // Currently only zones are supported, so values should be of the form + // `projects/<project>/locations/<zone>`. + Location string `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"` + // (`OutputOnly`) + // The current state of the cluster. + State Cluster_State `protobuf:"varint,3,opt,name=state,enum=google.bigtable.admin.v2.Cluster_State" json:"state,omitempty"` + // The number of nodes allocated to this cluster. More nodes enable higher + // throughput and more consistent performance. + ServeNodes int32 `protobuf:"varint,4,opt,name=serve_nodes,json=serveNodes" json:"serve_nodes,omitempty"` + // (`CreationOnly`) + // The type of storage used by this cluster to serve its + // parent instance's tables, unless explicitly overridden. + DefaultStorageType StorageType `protobuf:"varint,5,opt,name=default_storage_type,json=defaultStorageType,enum=google.bigtable.admin.v2.StorageType" json:"default_storage_type,omitempty"` +} + +func (m *Cluster) Reset() { *m = Cluster{} } +func (m *Cluster) String() string { return proto.CompactTextString(m) } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *Cluster) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Cluster) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +func (m *Cluster) GetState() Cluster_State { + if m != nil { + return m.State + } + return Cluster_STATE_NOT_KNOWN +} + +func (m *Cluster) GetServeNodes() int32 { + if m != nil { + return m.ServeNodes + } + return 0 +} + +func (m *Cluster) GetDefaultStorageType() StorageType { + if m != nil { + return m.DefaultStorageType + } + return StorageType_STORAGE_TYPE_UNSPECIFIED +} + +func init() { + proto.RegisterType((*Instance)(nil), "google.bigtable.admin.v2.Instance") + proto.RegisterType((*Cluster)(nil), "google.bigtable.admin.v2.Cluster") + proto.RegisterEnum("google.bigtable.admin.v2.Instance_State", Instance_State_name, Instance_State_value) + proto.RegisterEnum("google.bigtable.admin.v2.Instance_Type", Instance_Type_name, Instance_Type_value) + proto.RegisterEnum("google.bigtable.admin.v2.Cluster_State", Cluster_State_name, Cluster_State_value) +} + +func init() { proto.RegisterFile("google/bigtable/admin/v2/instance.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 463 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xc1, 0x6a, 0xdb, 0x40, + 0x10, 0x86, 0x23, 0x47, 0x6a, 0x9d, 0x49, 0x9a, 0x8a, 0x6d, 0x0e, 0xc6, 0x04, 0x9a, 0x0a, 0x42, + 0x7c, 0x28, 0x12, 0xb8, 0xf4, 0x14, 0x52, 0xb0, 0x2d, 0xb5, 0x88, 0x16, 0x59, 0x95, 0x14, 0x42, + 0x72, 0x11, 0x6b, 0x7b, 0x2b, 0x04, 0xd2, 0xae, 0xd0, 0x6e, 0x0c, 0x7e, 0x9e, 0x3e, 0x4b, 0xdf, + 0xab, 0x68, 0x24, 0x97, 0x9a, 0xd6, 0xa5, 0xe4, 0xb6, 0x33, 0xfb, 0xff, 0xf3, 0xaf, 0x3e, 0x0d, + 0x5c, 0x65, 0x42, 0x64, 0x05, 0x73, 0x16, 0x79, 0xa6, 0xe8, 0xa2, 0x60, 0x0e, 0x5d, 0x95, 0x39, + 0x77, 0xd6, 0x63, 0x27, 0xe7, 0x52, 0x51, 0xbe, 0x64, 0x76, 0x55, 0x0b, 0x25, 0xc8, 0xa0, 0x15, + 0xda, 0x5b, 0xa1, 0x8d, 0x42, 0x7b, 0x3d, 0x1e, 0x9e, 0x77, 0x23, 0x68, 0x95, 0x3b, 0x94, 0x73, + 0xa1, 0xa8, 0xca, 0x05, 0x97, 0xad, 0x6f, 0x78, 0xb9, 0x37, 0x60, 0x29, 0xca, 0x52, 0xf0, 0x56, + 0x66, 0x7d, 0xef, 0x41, 0xdf, 0xef, 0x12, 0x09, 0x01, 0x9d, 0xd3, 0x92, 0x0d, 0xb4, 0x0b, 0x6d, + 0x74, 0x14, 0xe1, 0x99, 0xbc, 0x81, 0x93, 0x55, 0x2e, 0xab, 0x82, 0x6e, 0x52, 0xbc, 0xeb, 0xe1, + 0xdd, 0x71, 0xd7, 0x0b, 0x1a, 0xc9, 0x07, 0x30, 0xa4, 0xa2, 0x8a, 0x0d, 0x0e, 0x2f, 0xb4, 0xd1, + 0xe9, 0x78, 0x64, 0xef, 0x7b, 0xb2, 0xbd, 0x4d, 0xb2, 0xe3, 0x46, 0x1f, 0xb5, 0x36, 0x72, 0x0d, + 0xba, 0xda, 0x54, 0x6c, 0xa0, 0xa3, 0xfd, 0xea, 0x3f, 0xec, 0xc9, 0xa6, 0x62, 0x11, 0x9a, 0xac, + 0xf7, 0x60, 0xe0, 0x30, 0xf2, 0x0a, 0x5e, 0xc6, 0xc9, 0x24, 0xf1, 0xd2, 0x60, 0x9e, 0xa4, 0x9f, + 0x83, 0xf9, 0x5d, 0x60, 0x1e, 0x90, 0x23, 0x30, 0x22, 0x6f, 0xe2, 0xde, 0x9b, 0x1a, 0x39, 0x81, + 0xfe, 0x2c, 0xf2, 0x26, 0x89, 0x1f, 0x7c, 0x32, 0x7b, 0xd6, 0x5b, 0xd0, 0x9b, 0x21, 0xe4, 0x0c, + 0xcc, 0xe4, 0x3e, 0xf4, 0xd2, 0xdb, 0x20, 0x0e, 0xbd, 0x99, 0xff, 0xd1, 0xf7, 0x5c, 0xf3, 0x80, + 0x9c, 0x02, 0x84, 0xd1, 0xdc, 0xbd, 0x9d, 0x25, 0xfe, 0x3c, 0x30, 0x35, 0xeb, 0x47, 0x0f, 0x9e, + 0xcf, 0x8a, 0x47, 0xa9, 0x58, 0xfd, 0x57, 0x48, 0x43, 0xe8, 0x17, 0x62, 0x89, 0xfc, 0x3b, 0x40, + 0xbf, 0x6a, 0x72, 0xb3, 0x4b, 0xe7, 0x1f, 0x9f, 0xd7, 0x25, 0xec, 0xc2, 0x79, 0x0d, 0xc7, 0x92, + 0xd5, 0x6b, 0x96, 0x72, 0xb1, 0x62, 0x12, 0x19, 0x19, 0x11, 0x60, 0x2b, 0x68, 0x3a, 0xe4, 0x0e, + 0xce, 0x56, 0xec, 0x1b, 0x7d, 0x2c, 0x54, 0x2a, 0x95, 0xa8, 0x69, 0xc6, 0x52, 0xa4, 0x69, 0x60, + 0xdc, 0xe5, 0xfe, 0xb8, 0xb8, 0x55, 0x23, 0x4b, 0xd2, 0x8d, 0xf8, 0xad, 0x67, 0x7d, 0x7d, 0x12, + 0xd9, 0xa6, 0x8a, 0xbc, 0xd8, 0x7f, 0x68, 0xaa, 0xc3, 0xa6, 0x72, 0xfd, 0x78, 0x32, 0xfd, 0xe2, + 0xb9, 0xa6, 0x3e, 0xe5, 0x70, 0xbe, 0x14, 0xe5, 0xde, 0x27, 0x4d, 0x5f, 0x6c, 0xff, 0x70, 0xd8, + 0x2c, 0x67, 0xa8, 0x3d, 0xdc, 0x74, 0xd2, 0x4c, 0x14, 0x94, 0x67, 0xb6, 0xa8, 0x33, 0x27, 0x63, + 0x1c, 0x57, 0xd7, 0x69, 0xaf, 0x68, 0x95, 0xcb, 0x3f, 0x97, 0xfc, 0x1a, 0x0f, 0x8b, 0x67, 0xa8, + 0x7c, 0xf7, 0x33, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x10, 0x73, 0x5b, 0x6e, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/table.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/table.pb.go new file mode 100644 index 0000000..24b715c --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/table.pb.go @@ -0,0 +1,417 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/admin/v2/table.proto +// DO NOT EDIT! + +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf4 "github.com/golang/protobuf/ptypes/duration" +import _ "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Possible timestamp granularities to use when keeping multiple versions +// of data in a table. +type Table_TimestampGranularity int32 + +const ( + // The user did not specify a granularity. Should not be returned. + // When specified during table creation, MILLIS will be used. + Table_TIMESTAMP_GRANULARITY_UNSPECIFIED Table_TimestampGranularity = 0 + // The table keeps data versioned at a granularity of 1ms. + Table_MILLIS Table_TimestampGranularity = 1 +) + +var Table_TimestampGranularity_name = map[int32]string{ + 0: "TIMESTAMP_GRANULARITY_UNSPECIFIED", + 1: "MILLIS", +} +var Table_TimestampGranularity_value = map[string]int32{ + "TIMESTAMP_GRANULARITY_UNSPECIFIED": 0, + "MILLIS": 1, +} + +func (x Table_TimestampGranularity) String() string { + return proto.EnumName(Table_TimestampGranularity_name, int32(x)) +} +func (Table_TimestampGranularity) EnumDescriptor() ([]byte, []int) { + return fileDescriptor4, []int{0, 0} +} + +// Defines a view over a table's fields. +type Table_View int32 + +const ( + // Uses the default view for each method as documented in its request. + Table_VIEW_UNSPECIFIED Table_View = 0 + // Only populates `name`. + Table_NAME_ONLY Table_View = 1 + // Only populates `name` and fields related to the table's schema. + Table_SCHEMA_VIEW Table_View = 2 + // Populates all fields. + Table_FULL Table_View = 4 +) + +var Table_View_name = map[int32]string{ + 0: "VIEW_UNSPECIFIED", + 1: "NAME_ONLY", + 2: "SCHEMA_VIEW", + 4: "FULL", +} +var Table_View_value = map[string]int32{ + "VIEW_UNSPECIFIED": 0, + "NAME_ONLY": 1, + "SCHEMA_VIEW": 2, + "FULL": 4, +} + +func (x Table_View) String() string { + return proto.EnumName(Table_View_name, int32(x)) +} +func (Table_View) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{0, 1} } + +// A collection of user data indexed by row, column, and timestamp. +// Each table is served using the resources of its parent cluster. +type Table struct { + // (`OutputOnly`) + // The unique name of the table. Values are of the form + // `projects/<project>/instances/<instance>/tables/[_a-zA-Z0-9][-_.a-zA-Z0-9]*`. + // Views: `NAME_ONLY`, `SCHEMA_VIEW`, `FULL` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // (`CreationOnly`) + // The column families configured for this table, mapped by column family ID. + // Views: `SCHEMA_VIEW`, `FULL` + ColumnFamilies map[string]*ColumnFamily `protobuf:"bytes,3,rep,name=column_families,json=columnFamilies" json:"column_families,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // (`CreationOnly`) + // The granularity (e.g. `MILLIS`, `MICROS`) at which timestamps are stored in + // this table. Timestamps not matching the granularity will be rejected. + // If unspecified at creation time, the value will be set to `MILLIS`. + // Views: `SCHEMA_VIEW`, `FULL` + Granularity Table_TimestampGranularity `protobuf:"varint,4,opt,name=granularity,enum=google.bigtable.admin.v2.Table_TimestampGranularity" json:"granularity,omitempty"` +} + +func (m *Table) Reset() { *m = Table{} } +func (m *Table) String() string { return proto.CompactTextString(m) } +func (*Table) ProtoMessage() {} +func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *Table) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Table) GetColumnFamilies() map[string]*ColumnFamily { + if m != nil { + return m.ColumnFamilies + } + return nil +} + +func (m *Table) GetGranularity() Table_TimestampGranularity { + if m != nil { + return m.Granularity + } + return Table_TIMESTAMP_GRANULARITY_UNSPECIFIED +} + +// A set of columns within a table which share a common configuration. +type ColumnFamily struct { + // Garbage collection rule specified as a protobuf. + // Must serialize to at most 500 bytes. + // + // NOTE: Garbage collection executes opportunistically in the background, and + // so it's possible for reads to return a cell even if it matches the active + // GC expression for its family. + GcRule *GcRule `protobuf:"bytes,1,opt,name=gc_rule,json=gcRule" json:"gc_rule,omitempty"` +} + +func (m *ColumnFamily) Reset() { *m = ColumnFamily{} } +func (m *ColumnFamily) String() string { return proto.CompactTextString(m) } +func (*ColumnFamily) ProtoMessage() {} +func (*ColumnFamily) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +func (m *ColumnFamily) GetGcRule() *GcRule { + if m != nil { + return m.GcRule + } + return nil +} + +// Rule for determining which cells to delete during garbage collection. +type GcRule struct { + // Garbage collection rules. + // + // Types that are valid to be assigned to Rule: + // *GcRule_MaxNumVersions + // *GcRule_MaxAge + // *GcRule_Intersection_ + // *GcRule_Union_ + Rule isGcRule_Rule `protobuf_oneof:"rule"` +} + +func (m *GcRule) Reset() { *m = GcRule{} } +func (m *GcRule) String() string { return proto.CompactTextString(m) } +func (*GcRule) ProtoMessage() {} +func (*GcRule) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } + +type isGcRule_Rule interface { + isGcRule_Rule() +} + +type GcRule_MaxNumVersions struct { + MaxNumVersions int32 `protobuf:"varint,1,opt,name=max_num_versions,json=maxNumVersions,oneof"` +} +type GcRule_MaxAge struct { + MaxAge *google_protobuf4.Duration `protobuf:"bytes,2,opt,name=max_age,json=maxAge,oneof"` +} +type GcRule_Intersection_ struct { + Intersection *GcRule_Intersection `protobuf:"bytes,3,opt,name=intersection,oneof"` +} +type GcRule_Union_ struct { + Union *GcRule_Union `protobuf:"bytes,4,opt,name=union,oneof"` +} + +func (*GcRule_MaxNumVersions) isGcRule_Rule() {} +func (*GcRule_MaxAge) isGcRule_Rule() {} +func (*GcRule_Intersection_) isGcRule_Rule() {} +func (*GcRule_Union_) isGcRule_Rule() {} + +func (m *GcRule) GetRule() isGcRule_Rule { + if m != nil { + return m.Rule + } + return nil +} + +func (m *GcRule) GetMaxNumVersions() int32 { + if x, ok := m.GetRule().(*GcRule_MaxNumVersions); ok { + return x.MaxNumVersions + } + return 0 +} + +func (m *GcRule) GetMaxAge() *google_protobuf4.Duration { + if x, ok := m.GetRule().(*GcRule_MaxAge); ok { + return x.MaxAge + } + return nil +} + +func (m *GcRule) GetIntersection() *GcRule_Intersection { + if x, ok := m.GetRule().(*GcRule_Intersection_); ok { + return x.Intersection + } + return nil +} + +func (m *GcRule) GetUnion() *GcRule_Union { + if x, ok := m.GetRule().(*GcRule_Union_); ok { + return x.Union + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*GcRule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _GcRule_OneofMarshaler, _GcRule_OneofUnmarshaler, _GcRule_OneofSizer, []interface{}{ + (*GcRule_MaxNumVersions)(nil), + (*GcRule_MaxAge)(nil), + (*GcRule_Intersection_)(nil), + (*GcRule_Union_)(nil), + } +} + +func _GcRule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*GcRule) + // rule + switch x := m.Rule.(type) { + case *GcRule_MaxNumVersions: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.MaxNumVersions)) + case *GcRule_MaxAge: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.MaxAge); err != nil { + return err + } + case *GcRule_Intersection_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Intersection); err != nil { + return err + } + case *GcRule_Union_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Union); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("GcRule.Rule has unexpected type %T", x) + } + return nil +} + +func _GcRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*GcRule) + switch tag { + case 1: // rule.max_num_versions + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Rule = &GcRule_MaxNumVersions{int32(x)} + return true, err + case 2: // rule.max_age + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf4.Duration) + err := b.DecodeMessage(msg) + m.Rule = &GcRule_MaxAge{msg} + return true, err + case 3: // rule.intersection + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GcRule_Intersection) + err := b.DecodeMessage(msg) + m.Rule = &GcRule_Intersection_{msg} + return true, err + case 4: // rule.union + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GcRule_Union) + err := b.DecodeMessage(msg) + m.Rule = &GcRule_Union_{msg} + return true, err + default: + return false, nil + } +} + +func _GcRule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*GcRule) + // rule + switch x := m.Rule.(type) { + case *GcRule_MaxNumVersions: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.MaxNumVersions)) + case *GcRule_MaxAge: + s := proto.Size(x.MaxAge) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *GcRule_Intersection_: + s := proto.Size(x.Intersection) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *GcRule_Union_: + s := proto.Size(x.Union) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A GcRule which deletes cells matching all of the given rules. +type GcRule_Intersection struct { + // Only delete cells which would be deleted by every element of `rules`. + Rules []*GcRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` +} + +func (m *GcRule_Intersection) Reset() { *m = GcRule_Intersection{} } +func (m *GcRule_Intersection) String() string { return proto.CompactTextString(m) } +func (*GcRule_Intersection) ProtoMessage() {} +func (*GcRule_Intersection) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2, 0} } + +func (m *GcRule_Intersection) GetRules() []*GcRule { + if m != nil { + return m.Rules + } + return nil +} + +// A GcRule which deletes cells matching any of the given rules. +type GcRule_Union struct { + // Delete cells which would be deleted by any element of `rules`. + Rules []*GcRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` +} + +func (m *GcRule_Union) Reset() { *m = GcRule_Union{} } +func (m *GcRule_Union) String() string { return proto.CompactTextString(m) } +func (*GcRule_Union) ProtoMessage() {} +func (*GcRule_Union) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2, 1} } + +func (m *GcRule_Union) GetRules() []*GcRule { + if m != nil { + return m.Rules + } + return nil +} + +func init() { + proto.RegisterType((*Table)(nil), "google.bigtable.admin.v2.Table") + proto.RegisterType((*ColumnFamily)(nil), "google.bigtable.admin.v2.ColumnFamily") + proto.RegisterType((*GcRule)(nil), "google.bigtable.admin.v2.GcRule") + proto.RegisterType((*GcRule_Intersection)(nil), "google.bigtable.admin.v2.GcRule.Intersection") + proto.RegisterType((*GcRule_Union)(nil), "google.bigtable.admin.v2.GcRule.Union") + proto.RegisterEnum("google.bigtable.admin.v2.Table_TimestampGranularity", Table_TimestampGranularity_name, Table_TimestampGranularity_value) + proto.RegisterEnum("google.bigtable.admin.v2.Table_View", Table_View_name, Table_View_value) +} + +func init() { proto.RegisterFile("google/bigtable/admin/v2/table.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 598 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x7d, 0x6b, 0xda, 0x5e, + 0x14, 0x36, 0x4d, 0xb4, 0xbf, 0x1e, 0xfb, 0x6b, 0xc3, 0x5d, 0xff, 0x70, 0x52, 0x36, 0x27, 0xdb, + 0x90, 0xc1, 0x12, 0xb0, 0x65, 0xec, 0x7d, 0xd8, 0x36, 0xd6, 0x80, 0x3a, 0x89, 0x2f, 0xa3, 0x63, + 0x10, 0xae, 0xe9, 0xed, 0xe5, 0xd2, 0xdc, 0x1b, 0xc9, 0x8b, 0xab, 0xdf, 0x62, 0xdf, 0x6c, 0x5f, + 0x69, 0xe4, 0x26, 0x32, 0xdb, 0x55, 0x1c, 0xfb, 0xcb, 0x73, 0xcf, 0x79, 0x9e, 0xe7, 0xbc, 0x1a, + 0x78, 0x4a, 0x83, 0x80, 0xfa, 0xc4, 0x9c, 0x32, 0x1a, 0xe3, 0xa9, 0x4f, 0x4c, 0x7c, 0xc9, 0x99, + 0x30, 0xe7, 0x4d, 0x53, 0x3e, 0x8d, 0x59, 0x18, 0xc4, 0x01, 0xaa, 0x64, 0x28, 0x63, 0x89, 0x32, + 0x24, 0xca, 0x98, 0x37, 0xab, 0x87, 0x39, 0x1f, 0xcf, 0x98, 0x89, 0x85, 0x08, 0x62, 0x1c, 0xb3, + 0x40, 0x44, 0x19, 0xaf, 0xfa, 0x28, 0x8f, 0xca, 0xd7, 0x34, 0xb9, 0x32, 0x2f, 0x93, 0x50, 0x02, + 0xf2, 0xf8, 0xe3, 0xbb, 0xf1, 0x98, 0x71, 0x12, 0xc5, 0x98, 0xcf, 0x32, 0x40, 0xfd, 0xa7, 0x0a, + 0xc5, 0x51, 0x9a, 0x11, 0x21, 0xd0, 0x04, 0xe6, 0xa4, 0xa2, 0xd4, 0x94, 0xc6, 0x8e, 0x23, 0x6d, + 0xf4, 0x0d, 0xf6, 0xbd, 0xc0, 0x4f, 0xb8, 0x70, 0xaf, 0x30, 0x67, 0x3e, 0x23, 0x51, 0x45, 0xad, + 0xa9, 0x8d, 0x72, 0xf3, 0xc8, 0x58, 0x57, 0xb0, 0x21, 0xd5, 0x8c, 0x53, 0x49, 0x6b, 0xe7, 0x2c, + 0x4b, 0xc4, 0xe1, 0xc2, 0xd9, 0xf3, 0x6e, 0x39, 0xd1, 0x04, 0xca, 0x34, 0xc4, 0x22, 0xf1, 0x71, + 0xc8, 0xe2, 0x45, 0x45, 0xab, 0x29, 0x8d, 0xbd, 0xe6, 0xf1, 0x26, 0xe5, 0xd1, 0xb2, 0x83, 0xf3, + 0xdf, 0x5c, 0x67, 0x55, 0xa8, 0xca, 0xe0, 0xc1, 0x3d, 0xe9, 0x91, 0x0e, 0xea, 0x35, 0x59, 0xe4, + 0xfd, 0xa5, 0x26, 0x7a, 0x0f, 0xc5, 0x39, 0xf6, 0x13, 0x52, 0xd9, 0xaa, 0x29, 0x8d, 0x72, 0xf3, + 0xf9, 0xfa, 0xd4, 0x2b, 0x7a, 0x0b, 0x27, 0x23, 0xbd, 0xdd, 0x7a, 0xad, 0xd4, 0x6d, 0x38, 0xb8, + 0xaf, 0x1e, 0xf4, 0x0c, 0x9e, 0x8c, 0xec, 0x9e, 0x35, 0x1c, 0xb5, 0x7a, 0x03, 0xf7, 0xdc, 0x69, + 0xf5, 0xc7, 0xdd, 0x96, 0x63, 0x8f, 0x2e, 0xdc, 0x71, 0x7f, 0x38, 0xb0, 0x4e, 0xed, 0xb6, 0x6d, + 0x9d, 0xe9, 0x05, 0x04, 0x50, 0xea, 0xd9, 0xdd, 0xae, 0x3d, 0xd4, 0x95, 0x7a, 0x1b, 0xb4, 0x09, + 0x23, 0xdf, 0xd1, 0x01, 0xe8, 0x13, 0xdb, 0xfa, 0x72, 0x07, 0xf9, 0x3f, 0xec, 0xf4, 0x5b, 0x3d, + 0xcb, 0xfd, 0xdc, 0xef, 0x5e, 0xe8, 0x0a, 0xda, 0x87, 0xf2, 0xf0, 0xb4, 0x63, 0xf5, 0x5a, 0x6e, + 0x8a, 0xd5, 0xb7, 0xd0, 0x7f, 0xa0, 0xb5, 0xc7, 0xdd, 0xae, 0xae, 0xd5, 0x6d, 0xd8, 0x5d, 0xad, + 0x16, 0xbd, 0x81, 0x6d, 0xea, 0xb9, 0x61, 0xe2, 0x67, 0xab, 0x2d, 0x37, 0x6b, 0xeb, 0xdb, 0x3c, + 0xf7, 0x9c, 0xc4, 0x27, 0x4e, 0x89, 0xca, 0xdf, 0xfa, 0x0f, 0x15, 0x4a, 0x99, 0x0b, 0xbd, 0x00, + 0x9d, 0xe3, 0x1b, 0x57, 0x24, 0xdc, 0x9d, 0x93, 0x30, 0x4a, 0x4f, 0x50, 0xca, 0x15, 0x3b, 0x05, + 0x67, 0x8f, 0xe3, 0x9b, 0x7e, 0xc2, 0x27, 0xb9, 0x1f, 0x1d, 0xc3, 0x76, 0x8a, 0xc5, 0x74, 0x39, + 0xd8, 0x87, 0xcb, 0x8c, 0xcb, 0x33, 0x34, 0xce, 0xf2, 0x33, 0xed, 0x14, 0x9c, 0x12, 0xc7, 0x37, + 0x2d, 0x4a, 0xd0, 0x10, 0x76, 0x99, 0x88, 0x49, 0x18, 0x11, 0x2f, 0x8d, 0x54, 0x54, 0x49, 0x7d, + 0xb9, 0xa9, 0x58, 0xc3, 0x5e, 0x21, 0x75, 0x0a, 0xce, 0x2d, 0x11, 0xf4, 0x11, 0x8a, 0x89, 0x48, + 0xd5, 0xb4, 0x4d, 0x1b, 0xce, 0xd5, 0xc6, 0x22, 0x93, 0xc9, 0x68, 0xd5, 0x36, 0xec, 0xae, 0xea, + 0xa3, 0x57, 0x50, 0x4c, 0x27, 0x99, 0xf6, 0xae, 0xfe, 0xd5, 0x28, 0x33, 0x78, 0xf5, 0x13, 0x14, + 0xa5, 0xf2, 0xbf, 0x0a, 0x9c, 0x94, 0x40, 0x4b, 0x8d, 0x93, 0x6b, 0x38, 0xf4, 0x02, 0xbe, 0x96, + 0x75, 0x02, 0xf2, 0x4f, 0x32, 0x48, 0xe7, 0x3c, 0x50, 0xbe, 0x7e, 0xc8, 0x71, 0x34, 0xf0, 0xb1, + 0xa0, 0x46, 0x10, 0x52, 0x93, 0x12, 0x21, 0xb7, 0x60, 0x66, 0x21, 0x3c, 0x63, 0xd1, 0x9f, 0xdf, + 0xa6, 0x77, 0xd2, 0x98, 0x96, 0x24, 0xf2, 0xe8, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x68, 0xe3, + 0x1b, 0xd9, 0xc4, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_data.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_data.pb.go new file mode 100644 index 0000000..2c530ff --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_data.pb.go @@ -0,0 +1,1981 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/v1/bigtable_data.proto +// DO NOT EDIT! + +/* +Package bigtable is a generated protocol buffer package. + +It is generated from these files: + google/bigtable/v1/bigtable_data.proto + google/bigtable/v1/bigtable_service.proto + google/bigtable/v1/bigtable_service_messages.proto + +It has these top-level messages: + Row + Family + Column + Cell + RowRange + RowSet + ColumnRange + TimestampRange + ValueRange + RowFilter + Mutation + ReadModifyWriteRule + ReadRowsRequest + ReadRowsResponse + SampleRowKeysRequest + SampleRowKeysResponse + MutateRowRequest + MutateRowsRequest + MutateRowsResponse + CheckAndMutateRowRequest + CheckAndMutateRowResponse + ReadModifyWriteRowRequest +*/ +package bigtable + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Specifies the complete (requested) contents of a single row of a table. +// Rows which exceed 256MiB in size cannot be read in full. +type Row struct { + // The unique key which identifies this row within its table. This is the same + // key that's used to identify the row in, for example, a MutateRowRequest. + // May contain any non-empty byte string up to 4KiB in length. + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // May be empty, but only if the entire row is empty. + // The mutual ordering of column families is not specified. + Families []*Family `protobuf:"bytes,2,rep,name=families" json:"families,omitempty"` +} + +func (m *Row) Reset() { *m = Row{} } +func (m *Row) String() string { return proto.CompactTextString(m) } +func (*Row) ProtoMessage() {} +func (*Row) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Row) GetKey() []byte { + if m != nil { + return m.Key + } + return nil +} + +func (m *Row) GetFamilies() []*Family { + if m != nil { + return m.Families + } + return nil +} + +// Specifies (some of) the contents of a single row/column family of a table. +type Family struct { + // The unique key which identifies this family within its row. This is the + // same key that's used to identify the family in, for example, a RowFilter + // which sets its "family_name_regex_filter" field. + // Must match [-_.a-zA-Z0-9]+, except that AggregatingRowProcessors may + // produce cells in a sentinel family with an empty name. + // Must be no greater than 64 characters in length. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Must not be empty. Sorted in order of increasing "qualifier". + Columns []*Column `protobuf:"bytes,2,rep,name=columns" json:"columns,omitempty"` +} + +func (m *Family) Reset() { *m = Family{} } +func (m *Family) String() string { return proto.CompactTextString(m) } +func (*Family) ProtoMessage() {} +func (*Family) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Family) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Family) GetColumns() []*Column { + if m != nil { + return m.Columns + } + return nil +} + +// Specifies (some of) the contents of a single row/column of a table. +type Column struct { + // The unique key which identifies this column within its family. This is the + // same key that's used to identify the column in, for example, a RowFilter + // which sets its "column_qualifier_regex_filter" field. + // May contain any byte string, including the empty string, up to 16kiB in + // length. + Qualifier []byte `protobuf:"bytes,1,opt,name=qualifier,proto3" json:"qualifier,omitempty"` + // Must not be empty. Sorted in order of decreasing "timestamp_micros". + Cells []*Cell `protobuf:"bytes,2,rep,name=cells" json:"cells,omitempty"` +} + +func (m *Column) Reset() { *m = Column{} } +func (m *Column) String() string { return proto.CompactTextString(m) } +func (*Column) ProtoMessage() {} +func (*Column) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Column) GetQualifier() []byte { + if m != nil { + return m.Qualifier + } + return nil +} + +func (m *Column) GetCells() []*Cell { + if m != nil { + return m.Cells + } + return nil +} + +// Specifies (some of) the contents of a single row/column/timestamp of a table. +type Cell struct { + // The cell's stored timestamp, which also uniquely identifies it within + // its column. + // Values are always expressed in microseconds, but individual tables may set + // a coarser "granularity" to further restrict the allowed values. For + // example, a table which specifies millisecond granularity will only allow + // values of "timestamp_micros" which are multiples of 1000. + TimestampMicros int64 `protobuf:"varint,1,opt,name=timestamp_micros,json=timestampMicros" json:"timestamp_micros,omitempty"` + // The value stored in the cell. + // May contain any byte string, including the empty string, up to 100MiB in + // length. + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // Labels applied to the cell by a [RowFilter][google.bigtable.v1.RowFilter]. + Labels []string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty"` +} + +func (m *Cell) Reset() { *m = Cell{} } +func (m *Cell) String() string { return proto.CompactTextString(m) } +func (*Cell) ProtoMessage() {} +func (*Cell) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Cell) GetTimestampMicros() int64 { + if m != nil { + return m.TimestampMicros + } + return 0 +} + +func (m *Cell) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +func (m *Cell) GetLabels() []string { + if m != nil { + return m.Labels + } + return nil +} + +// Specifies a contiguous range of rows. +type RowRange struct { + // Inclusive lower bound. If left empty, interpreted as the empty string. + StartKey []byte `protobuf:"bytes,2,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` + // Exclusive upper bound. If left empty, interpreted as infinity. + EndKey []byte `protobuf:"bytes,3,opt,name=end_key,json=endKey,proto3" json:"end_key,omitempty"` +} + +func (m *RowRange) Reset() { *m = RowRange{} } +func (m *RowRange) String() string { return proto.CompactTextString(m) } +func (*RowRange) ProtoMessage() {} +func (*RowRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *RowRange) GetStartKey() []byte { + if m != nil { + return m.StartKey + } + return nil +} + +func (m *RowRange) GetEndKey() []byte { + if m != nil { + return m.EndKey + } + return nil +} + +// Specifies a non-contiguous set of rows. +type RowSet struct { + // Single rows included in the set. + RowKeys [][]byte `protobuf:"bytes,1,rep,name=row_keys,json=rowKeys,proto3" json:"row_keys,omitempty"` + // Contiguous row ranges included in the set. + RowRanges []*RowRange `protobuf:"bytes,2,rep,name=row_ranges,json=rowRanges" json:"row_ranges,omitempty"` +} + +func (m *RowSet) Reset() { *m = RowSet{} } +func (m *RowSet) String() string { return proto.CompactTextString(m) } +func (*RowSet) ProtoMessage() {} +func (*RowSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *RowSet) GetRowKeys() [][]byte { + if m != nil { + return m.RowKeys + } + return nil +} + +func (m *RowSet) GetRowRanges() []*RowRange { + if m != nil { + return m.RowRanges + } + return nil +} + +// Specifies a contiguous range of columns within a single column family. +// The range spans from <column_family>:<start_qualifier> to +// <column_family>:<end_qualifier>, where both bounds can be either inclusive or +// exclusive. +type ColumnRange struct { + // The name of the column family within which this range falls. + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The column qualifier at which to start the range (within 'column_family'). + // If neither field is set, interpreted as the empty string, inclusive. + // + // Types that are valid to be assigned to StartQualifier: + // *ColumnRange_StartQualifierInclusive + // *ColumnRange_StartQualifierExclusive + StartQualifier isColumnRange_StartQualifier `protobuf_oneof:"start_qualifier"` + // The column qualifier at which to end the range (within 'column_family'). + // If neither field is set, interpreted as the infinite string, exclusive. + // + // Types that are valid to be assigned to EndQualifier: + // *ColumnRange_EndQualifierInclusive + // *ColumnRange_EndQualifierExclusive + EndQualifier isColumnRange_EndQualifier `protobuf_oneof:"end_qualifier"` +} + +func (m *ColumnRange) Reset() { *m = ColumnRange{} } +func (m *ColumnRange) String() string { return proto.CompactTextString(m) } +func (*ColumnRange) ProtoMessage() {} +func (*ColumnRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +type isColumnRange_StartQualifier interface { + isColumnRange_StartQualifier() +} +type isColumnRange_EndQualifier interface { + isColumnRange_EndQualifier() +} + +type ColumnRange_StartQualifierInclusive struct { + StartQualifierInclusive []byte `protobuf:"bytes,2,opt,name=start_qualifier_inclusive,json=startQualifierInclusive,proto3,oneof"` +} +type ColumnRange_StartQualifierExclusive struct { + StartQualifierExclusive []byte `protobuf:"bytes,3,opt,name=start_qualifier_exclusive,json=startQualifierExclusive,proto3,oneof"` +} +type ColumnRange_EndQualifierInclusive struct { + EndQualifierInclusive []byte `protobuf:"bytes,4,opt,name=end_qualifier_inclusive,json=endQualifierInclusive,proto3,oneof"` +} +type ColumnRange_EndQualifierExclusive struct { + EndQualifierExclusive []byte `protobuf:"bytes,5,opt,name=end_qualifier_exclusive,json=endQualifierExclusive,proto3,oneof"` +} + +func (*ColumnRange_StartQualifierInclusive) isColumnRange_StartQualifier() {} +func (*ColumnRange_StartQualifierExclusive) isColumnRange_StartQualifier() {} +func (*ColumnRange_EndQualifierInclusive) isColumnRange_EndQualifier() {} +func (*ColumnRange_EndQualifierExclusive) isColumnRange_EndQualifier() {} + +func (m *ColumnRange) GetStartQualifier() isColumnRange_StartQualifier { + if m != nil { + return m.StartQualifier + } + return nil +} +func (m *ColumnRange) GetEndQualifier() isColumnRange_EndQualifier { + if m != nil { + return m.EndQualifier + } + return nil +} + +func (m *ColumnRange) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +func (m *ColumnRange) GetStartQualifierInclusive() []byte { + if x, ok := m.GetStartQualifier().(*ColumnRange_StartQualifierInclusive); ok { + return x.StartQualifierInclusive + } + return nil +} + +func (m *ColumnRange) GetStartQualifierExclusive() []byte { + if x, ok := m.GetStartQualifier().(*ColumnRange_StartQualifierExclusive); ok { + return x.StartQualifierExclusive + } + return nil +} + +func (m *ColumnRange) GetEndQualifierInclusive() []byte { + if x, ok := m.GetEndQualifier().(*ColumnRange_EndQualifierInclusive); ok { + return x.EndQualifierInclusive + } + return nil +} + +func (m *ColumnRange) GetEndQualifierExclusive() []byte { + if x, ok := m.GetEndQualifier().(*ColumnRange_EndQualifierExclusive); ok { + return x.EndQualifierExclusive + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ColumnRange) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ColumnRange_OneofMarshaler, _ColumnRange_OneofUnmarshaler, _ColumnRange_OneofSizer, []interface{}{ + (*ColumnRange_StartQualifierInclusive)(nil), + (*ColumnRange_StartQualifierExclusive)(nil), + (*ColumnRange_EndQualifierInclusive)(nil), + (*ColumnRange_EndQualifierExclusive)(nil), + } +} + +func _ColumnRange_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ColumnRange) + // start_qualifier + switch x := m.StartQualifier.(type) { + case *ColumnRange_StartQualifierInclusive: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartQualifierInclusive) + case *ColumnRange_StartQualifierExclusive: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartQualifierExclusive) + case nil: + default: + return fmt.Errorf("ColumnRange.StartQualifier has unexpected type %T", x) + } + // end_qualifier + switch x := m.EndQualifier.(type) { + case *ColumnRange_EndQualifierInclusive: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndQualifierInclusive) + case *ColumnRange_EndQualifierExclusive: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndQualifierExclusive) + case nil: + default: + return fmt.Errorf("ColumnRange.EndQualifier has unexpected type %T", x) + } + return nil +} + +func _ColumnRange_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ColumnRange) + switch tag { + case 2: // start_qualifier.start_qualifier_inclusive + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartQualifier = &ColumnRange_StartQualifierInclusive{x} + return true, err + case 3: // start_qualifier.start_qualifier_exclusive + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartQualifier = &ColumnRange_StartQualifierExclusive{x} + return true, err + case 4: // end_qualifier.end_qualifier_inclusive + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndQualifier = &ColumnRange_EndQualifierInclusive{x} + return true, err + case 5: // end_qualifier.end_qualifier_exclusive + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndQualifier = &ColumnRange_EndQualifierExclusive{x} + return true, err + default: + return false, nil + } +} + +func _ColumnRange_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ColumnRange) + // start_qualifier + switch x := m.StartQualifier.(type) { + case *ColumnRange_StartQualifierInclusive: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartQualifierInclusive))) + n += len(x.StartQualifierInclusive) + case *ColumnRange_StartQualifierExclusive: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartQualifierExclusive))) + n += len(x.StartQualifierExclusive) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // end_qualifier + switch x := m.EndQualifier.(type) { + case *ColumnRange_EndQualifierInclusive: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndQualifierInclusive))) + n += len(x.EndQualifierInclusive) + case *ColumnRange_EndQualifierExclusive: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndQualifierExclusive))) + n += len(x.EndQualifierExclusive) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Specified a contiguous range of microsecond timestamps. +type TimestampRange struct { + // Inclusive lower bound. If left empty, interpreted as 0. + StartTimestampMicros int64 `protobuf:"varint,1,opt,name=start_timestamp_micros,json=startTimestampMicros" json:"start_timestamp_micros,omitempty"` + // Exclusive upper bound. If left empty, interpreted as infinity. + EndTimestampMicros int64 `protobuf:"varint,2,opt,name=end_timestamp_micros,json=endTimestampMicros" json:"end_timestamp_micros,omitempty"` +} + +func (m *TimestampRange) Reset() { *m = TimestampRange{} } +func (m *TimestampRange) String() string { return proto.CompactTextString(m) } +func (*TimestampRange) ProtoMessage() {} +func (*TimestampRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *TimestampRange) GetStartTimestampMicros() int64 { + if m != nil { + return m.StartTimestampMicros + } + return 0 +} + +func (m *TimestampRange) GetEndTimestampMicros() int64 { + if m != nil { + return m.EndTimestampMicros + } + return 0 +} + +// Specifies a contiguous range of raw byte values. +type ValueRange struct { + // The value at which to start the range. + // If neither field is set, interpreted as the empty string, inclusive. + // + // Types that are valid to be assigned to StartValue: + // *ValueRange_StartValueInclusive + // *ValueRange_StartValueExclusive + StartValue isValueRange_StartValue `protobuf_oneof:"start_value"` + // The value at which to end the range. + // If neither field is set, interpreted as the infinite string, exclusive. + // + // Types that are valid to be assigned to EndValue: + // *ValueRange_EndValueInclusive + // *ValueRange_EndValueExclusive + EndValue isValueRange_EndValue `protobuf_oneof:"end_value"` +} + +func (m *ValueRange) Reset() { *m = ValueRange{} } +func (m *ValueRange) String() string { return proto.CompactTextString(m) } +func (*ValueRange) ProtoMessage() {} +func (*ValueRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +type isValueRange_StartValue interface { + isValueRange_StartValue() +} +type isValueRange_EndValue interface { + isValueRange_EndValue() +} + +type ValueRange_StartValueInclusive struct { + StartValueInclusive []byte `protobuf:"bytes,1,opt,name=start_value_inclusive,json=startValueInclusive,proto3,oneof"` +} +type ValueRange_StartValueExclusive struct { + StartValueExclusive []byte `protobuf:"bytes,2,opt,name=start_value_exclusive,json=startValueExclusive,proto3,oneof"` +} +type ValueRange_EndValueInclusive struct { + EndValueInclusive []byte `protobuf:"bytes,3,opt,name=end_value_inclusive,json=endValueInclusive,proto3,oneof"` +} +type ValueRange_EndValueExclusive struct { + EndValueExclusive []byte `protobuf:"bytes,4,opt,name=end_value_exclusive,json=endValueExclusive,proto3,oneof"` +} + +func (*ValueRange_StartValueInclusive) isValueRange_StartValue() {} +func (*ValueRange_StartValueExclusive) isValueRange_StartValue() {} +func (*ValueRange_EndValueInclusive) isValueRange_EndValue() {} +func (*ValueRange_EndValueExclusive) isValueRange_EndValue() {} + +func (m *ValueRange) GetStartValue() isValueRange_StartValue { + if m != nil { + return m.StartValue + } + return nil +} +func (m *ValueRange) GetEndValue() isValueRange_EndValue { + if m != nil { + return m.EndValue + } + return nil +} + +func (m *ValueRange) GetStartValueInclusive() []byte { + if x, ok := m.GetStartValue().(*ValueRange_StartValueInclusive); ok { + return x.StartValueInclusive + } + return nil +} + +func (m *ValueRange) GetStartValueExclusive() []byte { + if x, ok := m.GetStartValue().(*ValueRange_StartValueExclusive); ok { + return x.StartValueExclusive + } + return nil +} + +func (m *ValueRange) GetEndValueInclusive() []byte { + if x, ok := m.GetEndValue().(*ValueRange_EndValueInclusive); ok { + return x.EndValueInclusive + } + return nil +} + +func (m *ValueRange) GetEndValueExclusive() []byte { + if x, ok := m.GetEndValue().(*ValueRange_EndValueExclusive); ok { + return x.EndValueExclusive + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ValueRange) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ValueRange_OneofMarshaler, _ValueRange_OneofUnmarshaler, _ValueRange_OneofSizer, []interface{}{ + (*ValueRange_StartValueInclusive)(nil), + (*ValueRange_StartValueExclusive)(nil), + (*ValueRange_EndValueInclusive)(nil), + (*ValueRange_EndValueExclusive)(nil), + } +} + +func _ValueRange_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ValueRange) + // start_value + switch x := m.StartValue.(type) { + case *ValueRange_StartValueInclusive: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartValueInclusive) + case *ValueRange_StartValueExclusive: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartValueExclusive) + case nil: + default: + return fmt.Errorf("ValueRange.StartValue has unexpected type %T", x) + } + // end_value + switch x := m.EndValue.(type) { + case *ValueRange_EndValueInclusive: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndValueInclusive) + case *ValueRange_EndValueExclusive: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndValueExclusive) + case nil: + default: + return fmt.Errorf("ValueRange.EndValue has unexpected type %T", x) + } + return nil +} + +func _ValueRange_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ValueRange) + switch tag { + case 1: // start_value.start_value_inclusive + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartValue = &ValueRange_StartValueInclusive{x} + return true, err + case 2: // start_value.start_value_exclusive + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartValue = &ValueRange_StartValueExclusive{x} + return true, err + case 3: // end_value.end_value_inclusive + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndValue = &ValueRange_EndValueInclusive{x} + return true, err + case 4: // end_value.end_value_exclusive + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndValue = &ValueRange_EndValueExclusive{x} + return true, err + default: + return false, nil + } +} + +func _ValueRange_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ValueRange) + // start_value + switch x := m.StartValue.(type) { + case *ValueRange_StartValueInclusive: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartValueInclusive))) + n += len(x.StartValueInclusive) + case *ValueRange_StartValueExclusive: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartValueExclusive))) + n += len(x.StartValueExclusive) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // end_value + switch x := m.EndValue.(type) { + case *ValueRange_EndValueInclusive: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndValueInclusive))) + n += len(x.EndValueInclusive) + case *ValueRange_EndValueExclusive: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndValueExclusive))) + n += len(x.EndValueExclusive) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Takes a row as input and produces an alternate view of the row based on +// specified rules. For example, a RowFilter might trim down a row to include +// just the cells from columns matching a given regular expression, or might +// return all the cells of a row but not their values. More complicated filters +// can be composed out of these components to express requests such as, "within +// every column of a particular family, give just the two most recent cells +// which are older than timestamp X." +// +// There are two broad categories of RowFilters (true filters and transformers), +// as well as two ways to compose simple filters into more complex ones +// (chains and interleaves). They work as follows: +// +// * True filters alter the input row by excluding some of its cells wholesale +// from the output row. An example of a true filter is the "value_regex_filter", +// which excludes cells whose values don't match the specified pattern. All +// regex true filters use RE2 syntax (https://github.com/google/re2/wiki/Syntax) +// in raw byte mode (RE2::Latin1), and are evaluated as full matches. An +// important point to keep in mind is that RE2(.) is equivalent by default to +// RE2([^\n]), meaning that it does not match newlines. When attempting to match +// an arbitrary byte, you should therefore use the escape sequence '\C', which +// may need to be further escaped as '\\C' in your client language. +// +// * Transformers alter the input row by changing the values of some of its +// cells in the output, without excluding them completely. Currently, the only +// supported transformer is the "strip_value_transformer", which replaces every +// cell's value with the empty string. +// +// * Chains and interleaves are described in more detail in the +// RowFilter.Chain and RowFilter.Interleave documentation. +// +// The total serialized size of a RowFilter message must not +// exceed 4096 bytes, and RowFilters may not be nested within each other +// (in Chains or Interleaves) to a depth of more than 20. +type RowFilter struct { + // Which of the possible RowFilter types to apply. If none are set, this + // RowFilter returns all cells in the input row. + // + // Types that are valid to be assigned to Filter: + // *RowFilter_Chain_ + // *RowFilter_Interleave_ + // *RowFilter_Condition_ + // *RowFilter_Sink + // *RowFilter_PassAllFilter + // *RowFilter_BlockAllFilter + // *RowFilter_RowKeyRegexFilter + // *RowFilter_RowSampleFilter + // *RowFilter_FamilyNameRegexFilter + // *RowFilter_ColumnQualifierRegexFilter + // *RowFilter_ColumnRangeFilter + // *RowFilter_TimestampRangeFilter + // *RowFilter_ValueRegexFilter + // *RowFilter_ValueRangeFilter + // *RowFilter_CellsPerRowOffsetFilter + // *RowFilter_CellsPerRowLimitFilter + // *RowFilter_CellsPerColumnLimitFilter + // *RowFilter_StripValueTransformer + // *RowFilter_ApplyLabelTransformer + Filter isRowFilter_Filter `protobuf_oneof:"filter"` +} + +func (m *RowFilter) Reset() { *m = RowFilter{} } +func (m *RowFilter) String() string { return proto.CompactTextString(m) } +func (*RowFilter) ProtoMessage() {} +func (*RowFilter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +type isRowFilter_Filter interface { + isRowFilter_Filter() +} + +type RowFilter_Chain_ struct { + Chain *RowFilter_Chain `protobuf:"bytes,1,opt,name=chain,oneof"` +} +type RowFilter_Interleave_ struct { + Interleave *RowFilter_Interleave `protobuf:"bytes,2,opt,name=interleave,oneof"` +} +type RowFilter_Condition_ struct { + Condition *RowFilter_Condition `protobuf:"bytes,3,opt,name=condition,oneof"` +} +type RowFilter_Sink struct { + Sink bool `protobuf:"varint,16,opt,name=sink,oneof"` +} +type RowFilter_PassAllFilter struct { + PassAllFilter bool `protobuf:"varint,17,opt,name=pass_all_filter,json=passAllFilter,oneof"` +} +type RowFilter_BlockAllFilter struct { + BlockAllFilter bool `protobuf:"varint,18,opt,name=block_all_filter,json=blockAllFilter,oneof"` +} +type RowFilter_RowKeyRegexFilter struct { + RowKeyRegexFilter []byte `protobuf:"bytes,4,opt,name=row_key_regex_filter,json=rowKeyRegexFilter,proto3,oneof"` +} +type RowFilter_RowSampleFilter struct { + RowSampleFilter float64 `protobuf:"fixed64,14,opt,name=row_sample_filter,json=rowSampleFilter,oneof"` +} +type RowFilter_FamilyNameRegexFilter struct { + FamilyNameRegexFilter string `protobuf:"bytes,5,opt,name=family_name_regex_filter,json=familyNameRegexFilter,oneof"` +} +type RowFilter_ColumnQualifierRegexFilter struct { + ColumnQualifierRegexFilter []byte `protobuf:"bytes,6,opt,name=column_qualifier_regex_filter,json=columnQualifierRegexFilter,proto3,oneof"` +} +type RowFilter_ColumnRangeFilter struct { + ColumnRangeFilter *ColumnRange `protobuf:"bytes,7,opt,name=column_range_filter,json=columnRangeFilter,oneof"` +} +type RowFilter_TimestampRangeFilter struct { + TimestampRangeFilter *TimestampRange `protobuf:"bytes,8,opt,name=timestamp_range_filter,json=timestampRangeFilter,oneof"` +} +type RowFilter_ValueRegexFilter struct { + ValueRegexFilter []byte `protobuf:"bytes,9,opt,name=value_regex_filter,json=valueRegexFilter,proto3,oneof"` +} +type RowFilter_ValueRangeFilter struct { + ValueRangeFilter *ValueRange `protobuf:"bytes,15,opt,name=value_range_filter,json=valueRangeFilter,oneof"` +} +type RowFilter_CellsPerRowOffsetFilter struct { + CellsPerRowOffsetFilter int32 `protobuf:"varint,10,opt,name=cells_per_row_offset_filter,json=cellsPerRowOffsetFilter,oneof"` +} +type RowFilter_CellsPerRowLimitFilter struct { + CellsPerRowLimitFilter int32 `protobuf:"varint,11,opt,name=cells_per_row_limit_filter,json=cellsPerRowLimitFilter,oneof"` +} +type RowFilter_CellsPerColumnLimitFilter struct { + CellsPerColumnLimitFilter int32 `protobuf:"varint,12,opt,name=cells_per_column_limit_filter,json=cellsPerColumnLimitFilter,oneof"` +} +type RowFilter_StripValueTransformer struct { + StripValueTransformer bool `protobuf:"varint,13,opt,name=strip_value_transformer,json=stripValueTransformer,oneof"` +} +type RowFilter_ApplyLabelTransformer struct { + ApplyLabelTransformer string `protobuf:"bytes,19,opt,name=apply_label_transformer,json=applyLabelTransformer,oneof"` +} + +func (*RowFilter_Chain_) isRowFilter_Filter() {} +func (*RowFilter_Interleave_) isRowFilter_Filter() {} +func (*RowFilter_Condition_) isRowFilter_Filter() {} +func (*RowFilter_Sink) isRowFilter_Filter() {} +func (*RowFilter_PassAllFilter) isRowFilter_Filter() {} +func (*RowFilter_BlockAllFilter) isRowFilter_Filter() {} +func (*RowFilter_RowKeyRegexFilter) isRowFilter_Filter() {} +func (*RowFilter_RowSampleFilter) isRowFilter_Filter() {} +func (*RowFilter_FamilyNameRegexFilter) isRowFilter_Filter() {} +func (*RowFilter_ColumnQualifierRegexFilter) isRowFilter_Filter() {} +func (*RowFilter_ColumnRangeFilter) isRowFilter_Filter() {} +func (*RowFilter_TimestampRangeFilter) isRowFilter_Filter() {} +func (*RowFilter_ValueRegexFilter) isRowFilter_Filter() {} +func (*RowFilter_ValueRangeFilter) isRowFilter_Filter() {} +func (*RowFilter_CellsPerRowOffsetFilter) isRowFilter_Filter() {} +func (*RowFilter_CellsPerRowLimitFilter) isRowFilter_Filter() {} +func (*RowFilter_CellsPerColumnLimitFilter) isRowFilter_Filter() {} +func (*RowFilter_StripValueTransformer) isRowFilter_Filter() {} +func (*RowFilter_ApplyLabelTransformer) isRowFilter_Filter() {} + +func (m *RowFilter) GetFilter() isRowFilter_Filter { + if m != nil { + return m.Filter + } + return nil +} + +func (m *RowFilter) GetChain() *RowFilter_Chain { + if x, ok := m.GetFilter().(*RowFilter_Chain_); ok { + return x.Chain + } + return nil +} + +func (m *RowFilter) GetInterleave() *RowFilter_Interleave { + if x, ok := m.GetFilter().(*RowFilter_Interleave_); ok { + return x.Interleave + } + return nil +} + +func (m *RowFilter) GetCondition() *RowFilter_Condition { + if x, ok := m.GetFilter().(*RowFilter_Condition_); ok { + return x.Condition + } + return nil +} + +func (m *RowFilter) GetSink() bool { + if x, ok := m.GetFilter().(*RowFilter_Sink); ok { + return x.Sink + } + return false +} + +func (m *RowFilter) GetPassAllFilter() bool { + if x, ok := m.GetFilter().(*RowFilter_PassAllFilter); ok { + return x.PassAllFilter + } + return false +} + +func (m *RowFilter) GetBlockAllFilter() bool { + if x, ok := m.GetFilter().(*RowFilter_BlockAllFilter); ok { + return x.BlockAllFilter + } + return false +} + +func (m *RowFilter) GetRowKeyRegexFilter() []byte { + if x, ok := m.GetFilter().(*RowFilter_RowKeyRegexFilter); ok { + return x.RowKeyRegexFilter + } + return nil +} + +func (m *RowFilter) GetRowSampleFilter() float64 { + if x, ok := m.GetFilter().(*RowFilter_RowSampleFilter); ok { + return x.RowSampleFilter + } + return 0 +} + +func (m *RowFilter) GetFamilyNameRegexFilter() string { + if x, ok := m.GetFilter().(*RowFilter_FamilyNameRegexFilter); ok { + return x.FamilyNameRegexFilter + } + return "" +} + +func (m *RowFilter) GetColumnQualifierRegexFilter() []byte { + if x, ok := m.GetFilter().(*RowFilter_ColumnQualifierRegexFilter); ok { + return x.ColumnQualifierRegexFilter + } + return nil +} + +func (m *RowFilter) GetColumnRangeFilter() *ColumnRange { + if x, ok := m.GetFilter().(*RowFilter_ColumnRangeFilter); ok { + return x.ColumnRangeFilter + } + return nil +} + +func (m *RowFilter) GetTimestampRangeFilter() *TimestampRange { + if x, ok := m.GetFilter().(*RowFilter_TimestampRangeFilter); ok { + return x.TimestampRangeFilter + } + return nil +} + +func (m *RowFilter) GetValueRegexFilter() []byte { + if x, ok := m.GetFilter().(*RowFilter_ValueRegexFilter); ok { + return x.ValueRegexFilter + } + return nil +} + +func (m *RowFilter) GetValueRangeFilter() *ValueRange { + if x, ok := m.GetFilter().(*RowFilter_ValueRangeFilter); ok { + return x.ValueRangeFilter + } + return nil +} + +func (m *RowFilter) GetCellsPerRowOffsetFilter() int32 { + if x, ok := m.GetFilter().(*RowFilter_CellsPerRowOffsetFilter); ok { + return x.CellsPerRowOffsetFilter + } + return 0 +} + +func (m *RowFilter) GetCellsPerRowLimitFilter() int32 { + if x, ok := m.GetFilter().(*RowFilter_CellsPerRowLimitFilter); ok { + return x.CellsPerRowLimitFilter + } + return 0 +} + +func (m *RowFilter) GetCellsPerColumnLimitFilter() int32 { + if x, ok := m.GetFilter().(*RowFilter_CellsPerColumnLimitFilter); ok { + return x.CellsPerColumnLimitFilter + } + return 0 +} + +func (m *RowFilter) GetStripValueTransformer() bool { + if x, ok := m.GetFilter().(*RowFilter_StripValueTransformer); ok { + return x.StripValueTransformer + } + return false +} + +func (m *RowFilter) GetApplyLabelTransformer() string { + if x, ok := m.GetFilter().(*RowFilter_ApplyLabelTransformer); ok { + return x.ApplyLabelTransformer + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RowFilter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RowFilter_OneofMarshaler, _RowFilter_OneofUnmarshaler, _RowFilter_OneofSizer, []interface{}{ + (*RowFilter_Chain_)(nil), + (*RowFilter_Interleave_)(nil), + (*RowFilter_Condition_)(nil), + (*RowFilter_Sink)(nil), + (*RowFilter_PassAllFilter)(nil), + (*RowFilter_BlockAllFilter)(nil), + (*RowFilter_RowKeyRegexFilter)(nil), + (*RowFilter_RowSampleFilter)(nil), + (*RowFilter_FamilyNameRegexFilter)(nil), + (*RowFilter_ColumnQualifierRegexFilter)(nil), + (*RowFilter_ColumnRangeFilter)(nil), + (*RowFilter_TimestampRangeFilter)(nil), + (*RowFilter_ValueRegexFilter)(nil), + (*RowFilter_ValueRangeFilter)(nil), + (*RowFilter_CellsPerRowOffsetFilter)(nil), + (*RowFilter_CellsPerRowLimitFilter)(nil), + (*RowFilter_CellsPerColumnLimitFilter)(nil), + (*RowFilter_StripValueTransformer)(nil), + (*RowFilter_ApplyLabelTransformer)(nil), + } +} + +func _RowFilter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RowFilter) + // filter + switch x := m.Filter.(type) { + case *RowFilter_Chain_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Chain); err != nil { + return err + } + case *RowFilter_Interleave_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Interleave); err != nil { + return err + } + case *RowFilter_Condition_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Condition); err != nil { + return err + } + case *RowFilter_Sink: + t := uint64(0) + if x.Sink { + t = 1 + } + b.EncodeVarint(16<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *RowFilter_PassAllFilter: + t := uint64(0) + if x.PassAllFilter { + t = 1 + } + b.EncodeVarint(17<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *RowFilter_BlockAllFilter: + t := uint64(0) + if x.BlockAllFilter { + t = 1 + } + b.EncodeVarint(18<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *RowFilter_RowKeyRegexFilter: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.RowKeyRegexFilter) + case *RowFilter_RowSampleFilter: + b.EncodeVarint(14<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.RowSampleFilter)) + case *RowFilter_FamilyNameRegexFilter: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.FamilyNameRegexFilter) + case *RowFilter_ColumnQualifierRegexFilter: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeRawBytes(x.ColumnQualifierRegexFilter) + case *RowFilter_ColumnRangeFilter: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ColumnRangeFilter); err != nil { + return err + } + case *RowFilter_TimestampRangeFilter: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimestampRangeFilter); err != nil { + return err + } + case *RowFilter_ValueRegexFilter: + b.EncodeVarint(9<<3 | proto.WireBytes) + b.EncodeRawBytes(x.ValueRegexFilter) + case *RowFilter_ValueRangeFilter: + b.EncodeVarint(15<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ValueRangeFilter); err != nil { + return err + } + case *RowFilter_CellsPerRowOffsetFilter: + b.EncodeVarint(10<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CellsPerRowOffsetFilter)) + case *RowFilter_CellsPerRowLimitFilter: + b.EncodeVarint(11<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CellsPerRowLimitFilter)) + case *RowFilter_CellsPerColumnLimitFilter: + b.EncodeVarint(12<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CellsPerColumnLimitFilter)) + case *RowFilter_StripValueTransformer: + t := uint64(0) + if x.StripValueTransformer { + t = 1 + } + b.EncodeVarint(13<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *RowFilter_ApplyLabelTransformer: + b.EncodeVarint(19<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ApplyLabelTransformer) + case nil: + default: + return fmt.Errorf("RowFilter.Filter has unexpected type %T", x) + } + return nil +} + +func _RowFilter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RowFilter) + switch tag { + case 1: // filter.chain + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RowFilter_Chain) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_Chain_{msg} + return true, err + case 2: // filter.interleave + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RowFilter_Interleave) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_Interleave_{msg} + return true, err + case 3: // filter.condition + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RowFilter_Condition) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_Condition_{msg} + return true, err + case 16: // filter.sink + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_Sink{x != 0} + return true, err + case 17: // filter.pass_all_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_PassAllFilter{x != 0} + return true, err + case 18: // filter.block_all_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_BlockAllFilter{x != 0} + return true, err + case 4: // filter.row_key_regex_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Filter = &RowFilter_RowKeyRegexFilter{x} + return true, err + case 14: // filter.row_sample_filter + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Filter = &RowFilter_RowSampleFilter{math.Float64frombits(x)} + return true, err + case 5: // filter.family_name_regex_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Filter = &RowFilter_FamilyNameRegexFilter{x} + return true, err + case 6: // filter.column_qualifier_regex_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Filter = &RowFilter_ColumnQualifierRegexFilter{x} + return true, err + case 7: // filter.column_range_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ColumnRange) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_ColumnRangeFilter{msg} + return true, err + case 8: // filter.timestamp_range_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TimestampRange) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_TimestampRangeFilter{msg} + return true, err + case 9: // filter.value_regex_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Filter = &RowFilter_ValueRegexFilter{x} + return true, err + case 15: // filter.value_range_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ValueRange) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_ValueRangeFilter{msg} + return true, err + case 10: // filter.cells_per_row_offset_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_CellsPerRowOffsetFilter{int32(x)} + return true, err + case 11: // filter.cells_per_row_limit_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_CellsPerRowLimitFilter{int32(x)} + return true, err + case 12: // filter.cells_per_column_limit_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_CellsPerColumnLimitFilter{int32(x)} + return true, err + case 13: // filter.strip_value_transformer + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_StripValueTransformer{x != 0} + return true, err + case 19: // filter.apply_label_transformer + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Filter = &RowFilter_ApplyLabelTransformer{x} + return true, err + default: + return false, nil + } +} + +func _RowFilter_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RowFilter) + // filter + switch x := m.Filter.(type) { + case *RowFilter_Chain_: + s := proto.Size(x.Chain) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_Interleave_: + s := proto.Size(x.Interleave) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_Condition_: + s := proto.Size(x.Condition) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_Sink: + n += proto.SizeVarint(16<<3 | proto.WireVarint) + n += 1 + case *RowFilter_PassAllFilter: + n += proto.SizeVarint(17<<3 | proto.WireVarint) + n += 1 + case *RowFilter_BlockAllFilter: + n += proto.SizeVarint(18<<3 | proto.WireVarint) + n += 1 + case *RowFilter_RowKeyRegexFilter: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RowKeyRegexFilter))) + n += len(x.RowKeyRegexFilter) + case *RowFilter_RowSampleFilter: + n += proto.SizeVarint(14<<3 | proto.WireFixed64) + n += 8 + case *RowFilter_FamilyNameRegexFilter: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.FamilyNameRegexFilter))) + n += len(x.FamilyNameRegexFilter) + case *RowFilter_ColumnQualifierRegexFilter: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ColumnQualifierRegexFilter))) + n += len(x.ColumnQualifierRegexFilter) + case *RowFilter_ColumnRangeFilter: + s := proto.Size(x.ColumnRangeFilter) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_TimestampRangeFilter: + s := proto.Size(x.TimestampRangeFilter) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_ValueRegexFilter: + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ValueRegexFilter))) + n += len(x.ValueRegexFilter) + case *RowFilter_ValueRangeFilter: + s := proto.Size(x.ValueRangeFilter) + n += proto.SizeVarint(15<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_CellsPerRowOffsetFilter: + n += proto.SizeVarint(10<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CellsPerRowOffsetFilter)) + case *RowFilter_CellsPerRowLimitFilter: + n += proto.SizeVarint(11<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CellsPerRowLimitFilter)) + case *RowFilter_CellsPerColumnLimitFilter: + n += proto.SizeVarint(12<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CellsPerColumnLimitFilter)) + case *RowFilter_StripValueTransformer: + n += proto.SizeVarint(13<<3 | proto.WireVarint) + n += 1 + case *RowFilter_ApplyLabelTransformer: + n += proto.SizeVarint(19<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ApplyLabelTransformer))) + n += len(x.ApplyLabelTransformer) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A RowFilter which sends rows through several RowFilters in sequence. +type RowFilter_Chain struct { + // The elements of "filters" are chained together to process the input row: + // in row -> f(0) -> intermediate row -> f(1) -> ... -> f(N) -> out row + // The full chain is executed atomically. + Filters []*RowFilter `protobuf:"bytes,1,rep,name=filters" json:"filters,omitempty"` +} + +func (m *RowFilter_Chain) Reset() { *m = RowFilter_Chain{} } +func (m *RowFilter_Chain) String() string { return proto.CompactTextString(m) } +func (*RowFilter_Chain) ProtoMessage() {} +func (*RowFilter_Chain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} } + +func (m *RowFilter_Chain) GetFilters() []*RowFilter { + if m != nil { + return m.Filters + } + return nil +} + +// A RowFilter which sends each row to each of several component +// RowFilters and interleaves the results. +type RowFilter_Interleave struct { + // The elements of "filters" all process a copy of the input row, and the + // results are pooled, sorted, and combined into a single output row. + // If multiple cells are produced with the same column and timestamp, + // they will all appear in the output row in an unspecified mutual order. + // Consider the following example, with three filters: + // + // input row + // | + // ----------------------------------------------------- + // | | | + // f(0) f(1) f(2) + // | | | + // 1: foo,bar,10,x foo,bar,10,z far,bar,7,a + // 2: foo,blah,11,z far,blah,5,x far,blah,5,x + // | | | + // ----------------------------------------------------- + // | + // 1: foo,bar,10,z // could have switched with #2 + // 2: foo,bar,10,x // could have switched with #1 + // 3: foo,blah,11,z + // 4: far,bar,7,a + // 5: far,blah,5,x // identical to #6 + // 6: far,blah,5,x // identical to #5 + // All interleaved filters are executed atomically. + Filters []*RowFilter `protobuf:"bytes,1,rep,name=filters" json:"filters,omitempty"` +} + +func (m *RowFilter_Interleave) Reset() { *m = RowFilter_Interleave{} } +func (m *RowFilter_Interleave) String() string { return proto.CompactTextString(m) } +func (*RowFilter_Interleave) ProtoMessage() {} +func (*RowFilter_Interleave) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 1} } + +func (m *RowFilter_Interleave) GetFilters() []*RowFilter { + if m != nil { + return m.Filters + } + return nil +} + +// A RowFilter which evaluates one of two possible RowFilters, depending on +// whether or not a predicate RowFilter outputs any cells from the input row. +// +// IMPORTANT NOTE: The predicate filter does not execute atomically with the +// true and false filters, which may lead to inconsistent or unexpected +// results. Additionally, Condition filters have poor performance, especially +// when filters are set for the false condition. +type RowFilter_Condition struct { + // If "predicate_filter" outputs any cells, then "true_filter" will be + // evaluated on the input row. Otherwise, "false_filter" will be evaluated. + PredicateFilter *RowFilter `protobuf:"bytes,1,opt,name=predicate_filter,json=predicateFilter" json:"predicate_filter,omitempty"` + // The filter to apply to the input row if "predicate_filter" returns any + // results. If not provided, no results will be returned in the true case. + TrueFilter *RowFilter `protobuf:"bytes,2,opt,name=true_filter,json=trueFilter" json:"true_filter,omitempty"` + // The filter to apply to the input row if "predicate_filter" does not + // return any results. If not provided, no results will be returned in the + // false case. + FalseFilter *RowFilter `protobuf:"bytes,3,opt,name=false_filter,json=falseFilter" json:"false_filter,omitempty"` +} + +func (m *RowFilter_Condition) Reset() { *m = RowFilter_Condition{} } +func (m *RowFilter_Condition) String() string { return proto.CompactTextString(m) } +func (*RowFilter_Condition) ProtoMessage() {} +func (*RowFilter_Condition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 2} } + +func (m *RowFilter_Condition) GetPredicateFilter() *RowFilter { + if m != nil { + return m.PredicateFilter + } + return nil +} + +func (m *RowFilter_Condition) GetTrueFilter() *RowFilter { + if m != nil { + return m.TrueFilter + } + return nil +} + +func (m *RowFilter_Condition) GetFalseFilter() *RowFilter { + if m != nil { + return m.FalseFilter + } + return nil +} + +// Specifies a particular change to be made to the contents of a row. +type Mutation struct { + // Which of the possible Mutation types to apply. + // + // Types that are valid to be assigned to Mutation: + // *Mutation_SetCell_ + // *Mutation_DeleteFromColumn_ + // *Mutation_DeleteFromFamily_ + // *Mutation_DeleteFromRow_ + Mutation isMutation_Mutation `protobuf_oneof:"mutation"` +} + +func (m *Mutation) Reset() { *m = Mutation{} } +func (m *Mutation) String() string { return proto.CompactTextString(m) } +func (*Mutation) ProtoMessage() {} +func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +type isMutation_Mutation interface { + isMutation_Mutation() +} + +type Mutation_SetCell_ struct { + SetCell *Mutation_SetCell `protobuf:"bytes,1,opt,name=set_cell,json=setCell,oneof"` +} +type Mutation_DeleteFromColumn_ struct { + DeleteFromColumn *Mutation_DeleteFromColumn `protobuf:"bytes,2,opt,name=delete_from_column,json=deleteFromColumn,oneof"` +} +type Mutation_DeleteFromFamily_ struct { + DeleteFromFamily *Mutation_DeleteFromFamily `protobuf:"bytes,3,opt,name=delete_from_family,json=deleteFromFamily,oneof"` +} +type Mutation_DeleteFromRow_ struct { + DeleteFromRow *Mutation_DeleteFromRow `protobuf:"bytes,4,opt,name=delete_from_row,json=deleteFromRow,oneof"` +} + +func (*Mutation_SetCell_) isMutation_Mutation() {} +func (*Mutation_DeleteFromColumn_) isMutation_Mutation() {} +func (*Mutation_DeleteFromFamily_) isMutation_Mutation() {} +func (*Mutation_DeleteFromRow_) isMutation_Mutation() {} + +func (m *Mutation) GetMutation() isMutation_Mutation { + if m != nil { + return m.Mutation + } + return nil +} + +func (m *Mutation) GetSetCell() *Mutation_SetCell { + if x, ok := m.GetMutation().(*Mutation_SetCell_); ok { + return x.SetCell + } + return nil +} + +func (m *Mutation) GetDeleteFromColumn() *Mutation_DeleteFromColumn { + if x, ok := m.GetMutation().(*Mutation_DeleteFromColumn_); ok { + return x.DeleteFromColumn + } + return nil +} + +func (m *Mutation) GetDeleteFromFamily() *Mutation_DeleteFromFamily { + if x, ok := m.GetMutation().(*Mutation_DeleteFromFamily_); ok { + return x.DeleteFromFamily + } + return nil +} + +func (m *Mutation) GetDeleteFromRow() *Mutation_DeleteFromRow { + if x, ok := m.GetMutation().(*Mutation_DeleteFromRow_); ok { + return x.DeleteFromRow + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Mutation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Mutation_OneofMarshaler, _Mutation_OneofUnmarshaler, _Mutation_OneofSizer, []interface{}{ + (*Mutation_SetCell_)(nil), + (*Mutation_DeleteFromColumn_)(nil), + (*Mutation_DeleteFromFamily_)(nil), + (*Mutation_DeleteFromRow_)(nil), + } +} + +func _Mutation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Mutation) + // mutation + switch x := m.Mutation.(type) { + case *Mutation_SetCell_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SetCell); err != nil { + return err + } + case *Mutation_DeleteFromColumn_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DeleteFromColumn); err != nil { + return err + } + case *Mutation_DeleteFromFamily_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DeleteFromFamily); err != nil { + return err + } + case *Mutation_DeleteFromRow_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DeleteFromRow); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Mutation.Mutation has unexpected type %T", x) + } + return nil +} + +func _Mutation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Mutation) + switch tag { + case 1: // mutation.set_cell + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_SetCell) + err := b.DecodeMessage(msg) + m.Mutation = &Mutation_SetCell_{msg} + return true, err + case 2: // mutation.delete_from_column + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_DeleteFromColumn) + err := b.DecodeMessage(msg) + m.Mutation = &Mutation_DeleteFromColumn_{msg} + return true, err + case 3: // mutation.delete_from_family + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_DeleteFromFamily) + err := b.DecodeMessage(msg) + m.Mutation = &Mutation_DeleteFromFamily_{msg} + return true, err + case 4: // mutation.delete_from_row + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_DeleteFromRow) + err := b.DecodeMessage(msg) + m.Mutation = &Mutation_DeleteFromRow_{msg} + return true, err + default: + return false, nil + } +} + +func _Mutation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Mutation) + // mutation + switch x := m.Mutation.(type) { + case *Mutation_SetCell_: + s := proto.Size(x.SetCell) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_DeleteFromColumn_: + s := proto.Size(x.DeleteFromColumn) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_DeleteFromFamily_: + s := proto.Size(x.DeleteFromFamily) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_DeleteFromRow_: + s := proto.Size(x.DeleteFromRow) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Mutation which sets the value of the specified cell. +type Mutation_SetCell struct { + // The name of the family into which new data should be written. + // Must match [-_.a-zA-Z0-9]+ + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The qualifier of the column into which new data should be written. + // Can be any byte string, including the empty string. + ColumnQualifier []byte `protobuf:"bytes,2,opt,name=column_qualifier,json=columnQualifier,proto3" json:"column_qualifier,omitempty"` + // The timestamp of the cell into which new data should be written. + // Use -1 for current Bigtable server time. + // Otherwise, the client should set this value itself, noting that the + // default value is a timestamp of zero if the field is left unspecified. + // Values must match the "granularity" of the table (e.g. micros, millis). + TimestampMicros int64 `protobuf:"varint,3,opt,name=timestamp_micros,json=timestampMicros" json:"timestamp_micros,omitempty"` + // The value to be written into the specified cell. + Value []byte `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *Mutation_SetCell) Reset() { *m = Mutation_SetCell{} } +func (m *Mutation_SetCell) String() string { return proto.CompactTextString(m) } +func (*Mutation_SetCell) ProtoMessage() {} +func (*Mutation_SetCell) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} } + +func (m *Mutation_SetCell) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +func (m *Mutation_SetCell) GetColumnQualifier() []byte { + if m != nil { + return m.ColumnQualifier + } + return nil +} + +func (m *Mutation_SetCell) GetTimestampMicros() int64 { + if m != nil { + return m.TimestampMicros + } + return 0 +} + +func (m *Mutation_SetCell) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +// A Mutation which deletes cells from the specified column, optionally +// restricting the deletions to a given timestamp range. +type Mutation_DeleteFromColumn struct { + // The name of the family from which cells should be deleted. + // Must match [-_.a-zA-Z0-9]+ + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The qualifier of the column from which cells should be deleted. + // Can be any byte string, including the empty string. + ColumnQualifier []byte `protobuf:"bytes,2,opt,name=column_qualifier,json=columnQualifier,proto3" json:"column_qualifier,omitempty"` + // The range of timestamps within which cells should be deleted. + TimeRange *TimestampRange `protobuf:"bytes,3,opt,name=time_range,json=timeRange" json:"time_range,omitempty"` +} + +func (m *Mutation_DeleteFromColumn) Reset() { *m = Mutation_DeleteFromColumn{} } +func (m *Mutation_DeleteFromColumn) String() string { return proto.CompactTextString(m) } +func (*Mutation_DeleteFromColumn) ProtoMessage() {} +func (*Mutation_DeleteFromColumn) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 1} } + +func (m *Mutation_DeleteFromColumn) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +func (m *Mutation_DeleteFromColumn) GetColumnQualifier() []byte { + if m != nil { + return m.ColumnQualifier + } + return nil +} + +func (m *Mutation_DeleteFromColumn) GetTimeRange() *TimestampRange { + if m != nil { + return m.TimeRange + } + return nil +} + +// A Mutation which deletes all cells from the specified column family. +type Mutation_DeleteFromFamily struct { + // The name of the family from which cells should be deleted. + // Must match [-_.a-zA-Z0-9]+ + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` +} + +func (m *Mutation_DeleteFromFamily) Reset() { *m = Mutation_DeleteFromFamily{} } +func (m *Mutation_DeleteFromFamily) String() string { return proto.CompactTextString(m) } +func (*Mutation_DeleteFromFamily) ProtoMessage() {} +func (*Mutation_DeleteFromFamily) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 2} } + +func (m *Mutation_DeleteFromFamily) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +// A Mutation which deletes all cells from the containing row. +type Mutation_DeleteFromRow struct { +} + +func (m *Mutation_DeleteFromRow) Reset() { *m = Mutation_DeleteFromRow{} } +func (m *Mutation_DeleteFromRow) String() string { return proto.CompactTextString(m) } +func (*Mutation_DeleteFromRow) ProtoMessage() {} +func (*Mutation_DeleteFromRow) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 3} } + +// Specifies an atomic read/modify/write operation on the latest value of the +// specified column. +type ReadModifyWriteRule struct { + // The name of the family to which the read/modify/write should be applied. + // Must match [-_.a-zA-Z0-9]+ + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The qualifier of the column to which the read/modify/write should be + // applied. + // Can be any byte string, including the empty string. + ColumnQualifier []byte `protobuf:"bytes,2,opt,name=column_qualifier,json=columnQualifier,proto3" json:"column_qualifier,omitempty"` + // The rule used to determine the column's new latest value from its current + // latest value. + // + // Types that are valid to be assigned to Rule: + // *ReadModifyWriteRule_AppendValue + // *ReadModifyWriteRule_IncrementAmount + Rule isReadModifyWriteRule_Rule `protobuf_oneof:"rule"` +} + +func (m *ReadModifyWriteRule) Reset() { *m = ReadModifyWriteRule{} } +func (m *ReadModifyWriteRule) String() string { return proto.CompactTextString(m) } +func (*ReadModifyWriteRule) ProtoMessage() {} +func (*ReadModifyWriteRule) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +type isReadModifyWriteRule_Rule interface { + isReadModifyWriteRule_Rule() +} + +type ReadModifyWriteRule_AppendValue struct { + AppendValue []byte `protobuf:"bytes,3,opt,name=append_value,json=appendValue,proto3,oneof"` +} +type ReadModifyWriteRule_IncrementAmount struct { + IncrementAmount int64 `protobuf:"varint,4,opt,name=increment_amount,json=incrementAmount,oneof"` +} + +func (*ReadModifyWriteRule_AppendValue) isReadModifyWriteRule_Rule() {} +func (*ReadModifyWriteRule_IncrementAmount) isReadModifyWriteRule_Rule() {} + +func (m *ReadModifyWriteRule) GetRule() isReadModifyWriteRule_Rule { + if m != nil { + return m.Rule + } + return nil +} + +func (m *ReadModifyWriteRule) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +func (m *ReadModifyWriteRule) GetColumnQualifier() []byte { + if m != nil { + return m.ColumnQualifier + } + return nil +} + +func (m *ReadModifyWriteRule) GetAppendValue() []byte { + if x, ok := m.GetRule().(*ReadModifyWriteRule_AppendValue); ok { + return x.AppendValue + } + return nil +} + +func (m *ReadModifyWriteRule) GetIncrementAmount() int64 { + if x, ok := m.GetRule().(*ReadModifyWriteRule_IncrementAmount); ok { + return x.IncrementAmount + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ReadModifyWriteRule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ReadModifyWriteRule_OneofMarshaler, _ReadModifyWriteRule_OneofUnmarshaler, _ReadModifyWriteRule_OneofSizer, []interface{}{ + (*ReadModifyWriteRule_AppendValue)(nil), + (*ReadModifyWriteRule_IncrementAmount)(nil), + } +} + +func _ReadModifyWriteRule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ReadModifyWriteRule) + // rule + switch x := m.Rule.(type) { + case *ReadModifyWriteRule_AppendValue: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.AppendValue) + case *ReadModifyWriteRule_IncrementAmount: + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IncrementAmount)) + case nil: + default: + return fmt.Errorf("ReadModifyWriteRule.Rule has unexpected type %T", x) + } + return nil +} + +func _ReadModifyWriteRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ReadModifyWriteRule) + switch tag { + case 3: // rule.append_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Rule = &ReadModifyWriteRule_AppendValue{x} + return true, err + case 4: // rule.increment_amount + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Rule = &ReadModifyWriteRule_IncrementAmount{int64(x)} + return true, err + default: + return false, nil + } +} + +func _ReadModifyWriteRule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ReadModifyWriteRule) + // rule + switch x := m.Rule.(type) { + case *ReadModifyWriteRule_AppendValue: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AppendValue))) + n += len(x.AppendValue) + case *ReadModifyWriteRule_IncrementAmount: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IncrementAmount)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*Row)(nil), "google.bigtable.v1.Row") + proto.RegisterType((*Family)(nil), "google.bigtable.v1.Family") + proto.RegisterType((*Column)(nil), "google.bigtable.v1.Column") + proto.RegisterType((*Cell)(nil), "google.bigtable.v1.Cell") + proto.RegisterType((*RowRange)(nil), "google.bigtable.v1.RowRange") + proto.RegisterType((*RowSet)(nil), "google.bigtable.v1.RowSet") + proto.RegisterType((*ColumnRange)(nil), "google.bigtable.v1.ColumnRange") + proto.RegisterType((*TimestampRange)(nil), "google.bigtable.v1.TimestampRange") + proto.RegisterType((*ValueRange)(nil), "google.bigtable.v1.ValueRange") + proto.RegisterType((*RowFilter)(nil), "google.bigtable.v1.RowFilter") + proto.RegisterType((*RowFilter_Chain)(nil), "google.bigtable.v1.RowFilter.Chain") + proto.RegisterType((*RowFilter_Interleave)(nil), "google.bigtable.v1.RowFilter.Interleave") + proto.RegisterType((*RowFilter_Condition)(nil), "google.bigtable.v1.RowFilter.Condition") + proto.RegisterType((*Mutation)(nil), "google.bigtable.v1.Mutation") + proto.RegisterType((*Mutation_SetCell)(nil), "google.bigtable.v1.Mutation.SetCell") + proto.RegisterType((*Mutation_DeleteFromColumn)(nil), "google.bigtable.v1.Mutation.DeleteFromColumn") + proto.RegisterType((*Mutation_DeleteFromFamily)(nil), "google.bigtable.v1.Mutation.DeleteFromFamily") + proto.RegisterType((*Mutation_DeleteFromRow)(nil), "google.bigtable.v1.Mutation.DeleteFromRow") + proto.RegisterType((*ReadModifyWriteRule)(nil), "google.bigtable.v1.ReadModifyWriteRule") +} + +func init() { proto.RegisterFile("google/bigtable/v1/bigtable_data.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1378 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdb, 0x6e, 0x1b, 0x37, + 0x13, 0xd6, 0x5a, 0xb2, 0x0e, 0xb3, 0x76, 0x24, 0xd3, 0x27, 0x45, 0x49, 0xfe, 0x18, 0xca, 0x8f, + 0x56, 0x49, 0x5b, 0x39, 0x71, 0x82, 0x36, 0x6d, 0x82, 0x22, 0x56, 0x0e, 0x55, 0x9a, 0x33, 0x63, + 0xa4, 0x40, 0x80, 0x62, 0x4b, 0x6b, 0x29, 0x75, 0x11, 0xee, 0x52, 0xe5, 0xae, 0xac, 0xe8, 0x45, + 0x7a, 0xdf, 0xe7, 0xe8, 0x5d, 0x5f, 0xa2, 0xaf, 0xd1, 0xcb, 0x5e, 0xf4, 0xa2, 0xe0, 0x61, 0x4f, + 0xb2, 0x62, 0x1b, 0x45, 0xee, 0x96, 0x9c, 0xef, 0xfb, 0x66, 0x38, 0x1c, 0x0e, 0xb9, 0xf0, 0xc9, + 0x88, 0xf3, 0x11, 0xa3, 0xbb, 0x87, 0xde, 0x28, 0x22, 0x87, 0x8c, 0xee, 0x1e, 0xdd, 0x48, 0xbe, + 0x1d, 0x97, 0x44, 0xa4, 0x3b, 0x16, 0x3c, 0xe2, 0x08, 0x69, 0x5c, 0x37, 0xb6, 0x75, 0x8f, 0x6e, + 0xb4, 0x5f, 0x40, 0x11, 0xf3, 0x29, 0x6a, 0x40, 0xf1, 0x1d, 0x9d, 0x35, 0xad, 0x1d, 0xab, 0xb3, + 0x82, 0xe5, 0x27, 0xfa, 0x12, 0xaa, 0x43, 0xe2, 0x7b, 0xcc, 0xa3, 0x61, 0x73, 0x69, 0xa7, 0xd8, + 0xb1, 0xf7, 0x5a, 0xdd, 0xe3, 0xfc, 0xee, 0x23, 0x89, 0x99, 0xe1, 0x04, 0xdb, 0xc6, 0x50, 0xd6, + 0x73, 0x08, 0x41, 0x29, 0x20, 0x3e, 0x55, 0xa2, 0x35, 0xac, 0xbe, 0xd1, 0x2d, 0xa8, 0x0c, 0x38, + 0x9b, 0xf8, 0xc1, 0x89, 0xa2, 0xf7, 0x15, 0x04, 0xc7, 0xd0, 0xf6, 0x1b, 0x28, 0xeb, 0x29, 0x74, + 0x11, 0x6a, 0xbf, 0x4c, 0x08, 0xf3, 0x86, 0x1e, 0x15, 0x26, 0xda, 0x74, 0x02, 0x75, 0x61, 0x79, + 0x40, 0x19, 0x8b, 0xb5, 0x9b, 0x0b, 0xb5, 0x29, 0x63, 0x58, 0xc3, 0xda, 0x0e, 0x94, 0xe4, 0x10, + 0x5d, 0x85, 0x46, 0xe4, 0xf9, 0x34, 0x8c, 0x88, 0x3f, 0x76, 0x7c, 0x6f, 0x20, 0x78, 0xa8, 0xc4, + 0x8b, 0xb8, 0x9e, 0xcc, 0x3f, 0x53, 0xd3, 0x68, 0x03, 0x96, 0x8f, 0x08, 0x9b, 0xd0, 0xe6, 0x92, + 0x72, 0xae, 0x07, 0x68, 0x0b, 0xca, 0x8c, 0x1c, 0x52, 0x16, 0x36, 0x8b, 0x3b, 0xc5, 0x4e, 0x0d, + 0x9b, 0x51, 0xfb, 0x1e, 0x54, 0x31, 0x9f, 0x62, 0x12, 0x8c, 0x28, 0xba, 0x00, 0xb5, 0x30, 0x22, + 0x22, 0x72, 0x64, 0xa2, 0x35, 0xbb, 0xaa, 0x26, 0x9e, 0xd0, 0x19, 0xda, 0x86, 0x0a, 0x0d, 0x5c, + 0x65, 0x2a, 0x2a, 0x53, 0x99, 0x06, 0xee, 0x13, 0x3a, 0x6b, 0xff, 0x04, 0x65, 0xcc, 0xa7, 0xaf, + 0x69, 0x84, 0xce, 0x43, 0x55, 0xf0, 0xa9, 0x84, 0xc8, 0xe0, 0x8a, 0x9d, 0x15, 0x5c, 0x11, 0x7c, + 0xfa, 0x84, 0xce, 0x42, 0x74, 0x07, 0x40, 0x9a, 0x84, 0xf4, 0x13, 0x2f, 0xfe, 0xe2, 0xa2, 0xc5, + 0xc7, 0xc1, 0xe0, 0x9a, 0x30, 0x5f, 0x61, 0xfb, 0x8f, 0x25, 0xb0, 0x4d, 0xc2, 0x55, 0x9c, 0x97, + 0xc1, 0x56, 0x9b, 0x39, 0x73, 0x32, 0xbb, 0x07, 0x7a, 0xea, 0xb9, 0xdc, 0xc3, 0xbb, 0x70, 0x5e, + 0x2f, 0x24, 0x49, 0xbc, 0xe3, 0x05, 0x03, 0x36, 0x09, 0xbd, 0x23, 0x93, 0x96, 0x7e, 0x01, 0x6f, + 0x2b, 0xc8, 0xab, 0x18, 0xf1, 0x38, 0x06, 0x2c, 0x62, 0xd3, 0xf7, 0x31, 0xbb, 0xb8, 0x98, 0xfd, + 0x30, 0x06, 0xa0, 0xdb, 0xb0, 0x2d, 0xf3, 0xb4, 0xc8, 0x73, 0x49, 0x71, 0x2d, 0xbc, 0x49, 0x03, + 0x77, 0x81, 0xdf, 0x63, 0xcc, 0xd4, 0xeb, 0xf2, 0x22, 0x66, 0xe2, 0xb3, 0xb7, 0x06, 0xf5, 0xb9, + 0x88, 0x7b, 0x75, 0x58, 0xcd, 0x89, 0xb5, 0xdf, 0xc3, 0xb9, 0x83, 0xb8, 0x52, 0x74, 0x1a, 0x6f, + 0xc1, 0x96, 0x66, 0x7d, 0xa0, 0xb2, 0x36, 0x94, 0xf5, 0x60, 0xae, 0xbc, 0xae, 0xc3, 0x86, 0x14, + 0x3e, 0xc6, 0x59, 0x52, 0x1c, 0x44, 0x03, 0x77, 0x8e, 0xd1, 0xfe, 0xdb, 0x02, 0x78, 0x23, 0x8b, + 0x30, 0x76, 0xbb, 0xa9, 0xdd, 0xaa, 0xc2, 0xcc, 0xa4, 0xc7, 0x32, 0xa9, 0x5d, 0x57, 0x66, 0xc5, + 0x48, 0x93, 0x33, 0xc7, 0x4a, 0x53, 0xb3, 0x74, 0x9c, 0x95, 0x6e, 0xc6, 0x75, 0x58, 0x97, 0xc1, + 0xce, 0x7b, 0x2a, 0x9a, 0x74, 0xae, 0xd1, 0xc0, 0x9d, 0xf3, 0x93, 0x63, 0xa4, 0x5e, 0x4a, 0xf3, + 0x8c, 0x34, 0xf9, 0xab, 0x60, 0x67, 0x22, 0xeb, 0xd9, 0x50, 0x4b, 0x04, 0xda, 0xff, 0xd8, 0x50, + 0xc3, 0x7c, 0xfa, 0xc8, 0x63, 0x11, 0x15, 0xe8, 0x0e, 0x2c, 0x0f, 0x7e, 0x26, 0x5e, 0xa0, 0x56, + 0x6a, 0xef, 0x5d, 0xf9, 0x40, 0xfd, 0x6b, 0x74, 0xf7, 0xbe, 0x84, 0xf6, 0x0b, 0x58, 0x73, 0xd0, + 0xf7, 0x00, 0x5e, 0x10, 0x51, 0xc1, 0x28, 0x31, 0xab, 0xb6, 0xf7, 0x3a, 0x27, 0x2b, 0x3c, 0x4e, + 0xf0, 0xfd, 0x02, 0xce, 0xb0, 0xd1, 0x77, 0x50, 0x1b, 0xf0, 0xc0, 0xf5, 0x22, 0x8f, 0x07, 0x2a, + 0x19, 0xf6, 0xde, 0xa7, 0xa7, 0x04, 0x13, 0xc3, 0xfb, 0x05, 0x9c, 0x72, 0xd1, 0x06, 0x94, 0x42, + 0x2f, 0x78, 0xd7, 0x6c, 0xec, 0x58, 0x9d, 0x6a, 0xbf, 0x80, 0xd5, 0x08, 0x75, 0xa0, 0x3e, 0x26, + 0x61, 0xe8, 0x10, 0xc6, 0x9c, 0xa1, 0xe2, 0x37, 0xd7, 0x0c, 0x60, 0x55, 0x1a, 0xf6, 0x19, 0x33, + 0x19, 0xb9, 0x06, 0x8d, 0x43, 0xc6, 0x07, 0xef, 0xb2, 0x50, 0x64, 0xa0, 0xe7, 0x94, 0x25, 0xc5, + 0xde, 0x80, 0x0d, 0xd3, 0x5d, 0x1c, 0x41, 0x47, 0xf4, 0x7d, 0x8c, 0x2f, 0x99, 0x02, 0x58, 0xd3, + 0xbd, 0x06, 0x4b, 0x9b, 0xa1, 0x7c, 0x0e, 0x72, 0xd2, 0x09, 0x89, 0x3f, 0x66, 0x34, 0xc6, 0x9f, + 0xdb, 0xb1, 0x3a, 0x56, 0xbf, 0x80, 0xeb, 0x82, 0x4f, 0x5f, 0x2b, 0x8b, 0x41, 0x7f, 0x0d, 0xcd, + 0x4c, 0x5b, 0xc9, 0x3b, 0x91, 0x07, 0xb0, 0xd6, 0x2f, 0xe0, 0xcd, 0xb4, 0xcb, 0x64, 0x1d, 0xdd, + 0x87, 0x4b, 0xfa, 0x26, 0xc8, 0x9c, 0xde, 0x1c, 0xbf, 0x6c, 0x82, 0x6c, 0x69, 0x58, 0x72, 0x86, + 0xb3, 0x22, 0xaf, 0x60, 0xdd, 0x88, 0xa8, 0x36, 0x19, 0x53, 0x2b, 0x6a, 0x7f, 0x2e, 0x9f, 0x70, + 0x0b, 0x49, 0xb4, 0x4c, 0xc0, 0x20, 0x1d, 0x1a, 0xc9, 0xb7, 0xb0, 0x95, 0x1e, 0xd4, 0x9c, 0x6a, + 0x55, 0xa9, 0xb6, 0x17, 0xa9, 0xe6, 0xdb, 0x44, 0xbf, 0x80, 0x37, 0xa2, 0xdc, 0x8c, 0xd1, 0xee, + 0x02, 0xd2, 0xa7, 0x24, 0xb7, 0xd0, 0x9a, 0x59, 0x68, 0x43, 0xd9, 0xb2, 0xcb, 0x7b, 0x9e, 0xe0, + 0xb3, 0x71, 0xd4, 0x55, 0x1c, 0xff, 0x5b, 0x14, 0x47, 0xda, 0x33, 0x52, 0xbd, 0x8c, 0xff, 0x6f, + 0xe1, 0x82, 0xba, 0x23, 0x9d, 0xb1, 0x4c, 0x36, 0x9f, 0x3a, 0x7c, 0x38, 0x0c, 0x69, 0x14, 0x0b, + 0xc3, 0x8e, 0xd5, 0x59, 0x96, 0x8d, 0x5a, 0x81, 0x5e, 0x52, 0x81, 0xf9, 0xf4, 0x85, 0x42, 0x18, + 0xfe, 0x5d, 0x68, 0xe5, 0xf9, 0xcc, 0xf3, 0xbd, 0x84, 0x6e, 0x1b, 0xfa, 0x56, 0x86, 0xfe, 0x54, + 0x02, 0x0c, 0xbb, 0x07, 0x97, 0x52, 0xb6, 0xd9, 0xb6, 0x9c, 0xc0, 0x8a, 0x11, 0x38, 0x1f, 0x0b, + 0xe8, 0xcd, 0xca, 0x6a, 0xdc, 0x86, 0xed, 0x30, 0x12, 0xde, 0xd8, 0x74, 0x9b, 0x48, 0x90, 0x20, + 0x1c, 0x72, 0xe1, 0x53, 0xd1, 0x5c, 0x35, 0x87, 0x60, 0x53, 0x01, 0x54, 0x26, 0x0e, 0x52, 0xb3, + 0x64, 0x92, 0xf1, 0x98, 0xcd, 0x1c, 0x75, 0x8b, 0xe7, 0x98, 0xeb, 0x71, 0xa5, 0x2a, 0xc0, 0x53, + 0x69, 0xcf, 0x30, 0x5b, 0xf7, 0x60, 0x59, 0x35, 0x16, 0xf4, 0x15, 0x54, 0x74, 0xa4, 0xfa, 0xae, + 0xb6, 0xf7, 0x2e, 0x9d, 0xd8, 0x01, 0x70, 0x8c, 0x6e, 0x3d, 0x04, 0x48, 0x1b, 0xcb, 0x7f, 0x97, + 0xf9, 0xd3, 0x82, 0x5a, 0xd2, 0x55, 0x50, 0x1f, 0x1a, 0x63, 0x41, 0x5d, 0x6f, 0x40, 0xa2, 0xa4, + 0x34, 0x74, 0x97, 0x3c, 0x45, 0xaf, 0x9e, 0xd0, 0x92, 0xb2, 0xb0, 0x23, 0x31, 0x49, 0x44, 0x96, + 0xce, 0x22, 0x02, 0x92, 0x61, 0xf8, 0xf7, 0x60, 0x65, 0x48, 0x58, 0x98, 0x08, 0x14, 0xcf, 0x22, + 0x60, 0x2b, 0x8a, 0x1e, 0xf4, 0xaa, 0x50, 0xd6, 0xdc, 0xf6, 0x5f, 0xcb, 0x50, 0x7d, 0x36, 0x89, + 0x88, 0x5a, 0xe2, 0x3e, 0x54, 0x65, 0x79, 0xca, 0x72, 0x30, 0x4b, 0xfb, 0xff, 0x22, 0xd1, 0x18, + 0xdf, 0x7d, 0x4d, 0x23, 0xf9, 0xf4, 0xeb, 0x17, 0x70, 0x25, 0xd4, 0x9f, 0xe8, 0x47, 0x40, 0x2e, + 0x65, 0x54, 0xa6, 0x48, 0x70, 0xdf, 0x94, 0x9d, 0x59, 0xe2, 0x17, 0x27, 0x8a, 0x3d, 0x50, 0xb4, + 0x47, 0x82, 0xfb, 0xba, 0x0c, 0xe5, 0x89, 0x72, 0xe7, 0xe6, 0xe6, 0xe5, 0x75, 0xab, 0x33, 0x09, + 0x38, 0xab, 0xbc, 0x7e, 0x59, 0xe7, 0xe5, 0xcd, 0x6b, 0xfb, 0x00, 0xea, 0x59, 0x79, 0xc1, 0xa7, + 0xaa, 0x77, 0xdb, 0x7b, 0xd7, 0xce, 0xa8, 0x8d, 0xf9, 0x54, 0x5e, 0x21, 0x6e, 0x76, 0xa2, 0xf5, + 0xab, 0x05, 0x15, 0x93, 0xaa, 0xd3, 0x1f, 0x86, 0x57, 0xa1, 0x31, 0xdf, 0xa7, 0xcd, 0x43, 0xb7, + 0x3e, 0xd7, 0x98, 0x17, 0xbe, 0xb8, 0x8b, 0xa7, 0xbc, 0xb8, 0x4b, 0x99, 0x17, 0x77, 0xeb, 0x37, + 0x0b, 0x1a, 0xf3, 0x69, 0xff, 0xa8, 0x11, 0xee, 0x03, 0xc8, 0x48, 0x74, 0x3f, 0x35, 0xdb, 0x74, + 0x86, 0x86, 0x8e, 0x6b, 0x92, 0xa5, 0x3e, 0x5b, 0x37, 0xb3, 0x21, 0x9a, 0x6d, 0x3a, 0x2d, 0xc4, + 0x56, 0x1d, 0x56, 0x73, 0x7b, 0xd2, 0x03, 0xa8, 0xfa, 0x66, 0xb7, 0xda, 0xbf, 0x5b, 0xb0, 0x8e, + 0x29, 0x71, 0x9f, 0x71, 0xd7, 0x1b, 0xce, 0x7e, 0x10, 0x5e, 0x44, 0xf1, 0x84, 0xd1, 0x8f, 0xba, + 0xf0, 0x2b, 0xb0, 0x42, 0xc6, 0xe3, 0xe4, 0x95, 0x95, 0xbc, 0xc9, 0x6d, 0x3d, 0xab, 0xba, 0x25, + 0xfa, 0x0c, 0x1a, 0x5e, 0x30, 0x10, 0xd4, 0xa7, 0x41, 0xe4, 0x10, 0x9f, 0x4f, 0x82, 0x48, 0xed, + 0x4f, 0x51, 0x5e, 0xfd, 0x89, 0x65, 0x5f, 0x19, 0x7a, 0x65, 0x28, 0x89, 0x09, 0xa3, 0x3d, 0x0f, + 0xb6, 0x06, 0xdc, 0x5f, 0x90, 0xc3, 0xde, 0x5a, 0xcf, 0x0c, 0x1e, 0x90, 0x88, 0xbc, 0x94, 0x3f, + 0xab, 0x2f, 0xad, 0xb7, 0xdf, 0x18, 0xe0, 0x88, 0x33, 0x12, 0x8c, 0xba, 0x5c, 0x8c, 0x76, 0x47, + 0x34, 0x50, 0xbf, 0xb2, 0xbb, 0xda, 0x44, 0xc6, 0x5e, 0x98, 0xfd, 0xeb, 0xbd, 0x13, 0x7f, 0x1f, + 0x96, 0x15, 0xec, 0xe6, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3e, 0x54, 0x66, 0x7c, 0x1b, 0x0f, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service.pb.go new file mode 100644 index 0000000..dac6f4a --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service.pb.go @@ -0,0 +1,388 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/v1/bigtable_service.proto +// DO NOT EDIT! + +package bigtable + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for BigtableService service + +type BigtableServiceClient interface { + // Streams back the contents of all requested rows, optionally applying + // the same Reader filter to each. Depending on their size, rows may be + // broken up across multiple responses, but atomicity of each row will still + // be preserved. + ReadRows(ctx context.Context, in *ReadRowsRequest, opts ...grpc.CallOption) (BigtableService_ReadRowsClient, error) + // Returns a sample of row keys in the table. The returned row keys will + // delimit contiguous sections of the table of approximately equal size, + // which can be used to break up the data for distributed tasks like + // mapreduces. + SampleRowKeys(ctx context.Context, in *SampleRowKeysRequest, opts ...grpc.CallOption) (BigtableService_SampleRowKeysClient, error) + // Mutates a row atomically. Cells already present in the row are left + // unchanged unless explicitly changed by 'mutation'. + MutateRow(ctx context.Context, in *MutateRowRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Mutates multiple rows in a batch. Each individual row is mutated + // atomically as in MutateRow, but the entire batch is not executed + // atomically. + MutateRows(ctx context.Context, in *MutateRowsRequest, opts ...grpc.CallOption) (*MutateRowsResponse, error) + // Mutates a row atomically based on the output of a predicate Reader filter. + CheckAndMutateRow(ctx context.Context, in *CheckAndMutateRowRequest, opts ...grpc.CallOption) (*CheckAndMutateRowResponse, error) + // Modifies a row atomically, reading the latest existing timestamp/value from + // the specified columns and writing a new value at + // max(existing timestamp, current server time) based on pre-defined + // read/modify/write rules. Returns the new contents of all modified cells. + ReadModifyWriteRow(ctx context.Context, in *ReadModifyWriteRowRequest, opts ...grpc.CallOption) (*Row, error) +} + +type bigtableServiceClient struct { + cc *grpc.ClientConn +} + +func NewBigtableServiceClient(cc *grpc.ClientConn) BigtableServiceClient { + return &bigtableServiceClient{cc} +} + +func (c *bigtableServiceClient) ReadRows(ctx context.Context, in *ReadRowsRequest, opts ...grpc.CallOption) (BigtableService_ReadRowsClient, error) { + stream, err := grpc.NewClientStream(ctx, &_BigtableService_serviceDesc.Streams[0], c.cc, "/google.bigtable.v1.BigtableService/ReadRows", opts...) + if err != nil { + return nil, err + } + x := &bigtableServiceReadRowsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type BigtableService_ReadRowsClient interface { + Recv() (*ReadRowsResponse, error) + grpc.ClientStream +} + +type bigtableServiceReadRowsClient struct { + grpc.ClientStream +} + +func (x *bigtableServiceReadRowsClient) Recv() (*ReadRowsResponse, error) { + m := new(ReadRowsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *bigtableServiceClient) SampleRowKeys(ctx context.Context, in *SampleRowKeysRequest, opts ...grpc.CallOption) (BigtableService_SampleRowKeysClient, error) { + stream, err := grpc.NewClientStream(ctx, &_BigtableService_serviceDesc.Streams[1], c.cc, "/google.bigtable.v1.BigtableService/SampleRowKeys", opts...) + if err != nil { + return nil, err + } + x := &bigtableServiceSampleRowKeysClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type BigtableService_SampleRowKeysClient interface { + Recv() (*SampleRowKeysResponse, error) + grpc.ClientStream +} + +type bigtableServiceSampleRowKeysClient struct { + grpc.ClientStream +} + +func (x *bigtableServiceSampleRowKeysClient) Recv() (*SampleRowKeysResponse, error) { + m := new(SampleRowKeysResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *bigtableServiceClient) MutateRow(ctx context.Context, in *MutateRowRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.v1.BigtableService/MutateRow", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableServiceClient) MutateRows(ctx context.Context, in *MutateRowsRequest, opts ...grpc.CallOption) (*MutateRowsResponse, error) { + out := new(MutateRowsResponse) + err := grpc.Invoke(ctx, "/google.bigtable.v1.BigtableService/MutateRows", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableServiceClient) CheckAndMutateRow(ctx context.Context, in *CheckAndMutateRowRequest, opts ...grpc.CallOption) (*CheckAndMutateRowResponse, error) { + out := new(CheckAndMutateRowResponse) + err := grpc.Invoke(ctx, "/google.bigtable.v1.BigtableService/CheckAndMutateRow", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableServiceClient) ReadModifyWriteRow(ctx context.Context, in *ReadModifyWriteRowRequest, opts ...grpc.CallOption) (*Row, error) { + out := new(Row) + err := grpc.Invoke(ctx, "/google.bigtable.v1.BigtableService/ReadModifyWriteRow", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for BigtableService service + +type BigtableServiceServer interface { + // Streams back the contents of all requested rows, optionally applying + // the same Reader filter to each. Depending on their size, rows may be + // broken up across multiple responses, but atomicity of each row will still + // be preserved. + ReadRows(*ReadRowsRequest, BigtableService_ReadRowsServer) error + // Returns a sample of row keys in the table. The returned row keys will + // delimit contiguous sections of the table of approximately equal size, + // which can be used to break up the data for distributed tasks like + // mapreduces. + SampleRowKeys(*SampleRowKeysRequest, BigtableService_SampleRowKeysServer) error + // Mutates a row atomically. Cells already present in the row are left + // unchanged unless explicitly changed by 'mutation'. + MutateRow(context.Context, *MutateRowRequest) (*google_protobuf2.Empty, error) + // Mutates multiple rows in a batch. Each individual row is mutated + // atomically as in MutateRow, but the entire batch is not executed + // atomically. + MutateRows(context.Context, *MutateRowsRequest) (*MutateRowsResponse, error) + // Mutates a row atomically based on the output of a predicate Reader filter. + CheckAndMutateRow(context.Context, *CheckAndMutateRowRequest) (*CheckAndMutateRowResponse, error) + // Modifies a row atomically, reading the latest existing timestamp/value from + // the specified columns and writing a new value at + // max(existing timestamp, current server time) based on pre-defined + // read/modify/write rules. Returns the new contents of all modified cells. + ReadModifyWriteRow(context.Context, *ReadModifyWriteRowRequest) (*Row, error) +} + +func RegisterBigtableServiceServer(s *grpc.Server, srv BigtableServiceServer) { + s.RegisterService(&_BigtableService_serviceDesc, srv) +} + +func _BigtableService_ReadRows_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ReadRowsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(BigtableServiceServer).ReadRows(m, &bigtableServiceReadRowsServer{stream}) +} + +type BigtableService_ReadRowsServer interface { + Send(*ReadRowsResponse) error + grpc.ServerStream +} + +type bigtableServiceReadRowsServer struct { + grpc.ServerStream +} + +func (x *bigtableServiceReadRowsServer) Send(m *ReadRowsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _BigtableService_SampleRowKeys_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SampleRowKeysRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(BigtableServiceServer).SampleRowKeys(m, &bigtableServiceSampleRowKeysServer{stream}) +} + +type BigtableService_SampleRowKeysServer interface { + Send(*SampleRowKeysResponse) error + grpc.ServerStream +} + +type bigtableServiceSampleRowKeysServer struct { + grpc.ServerStream +} + +func (x *bigtableServiceSampleRowKeysServer) Send(m *SampleRowKeysResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _BigtableService_MutateRow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MutateRowRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableServiceServer).MutateRow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.v1.BigtableService/MutateRow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableServiceServer).MutateRow(ctx, req.(*MutateRowRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableService_MutateRows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MutateRowsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableServiceServer).MutateRows(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.v1.BigtableService/MutateRows", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableServiceServer).MutateRows(ctx, req.(*MutateRowsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableService_CheckAndMutateRow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckAndMutateRowRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableServiceServer).CheckAndMutateRow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.v1.BigtableService/CheckAndMutateRow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableServiceServer).CheckAndMutateRow(ctx, req.(*CheckAndMutateRowRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableService_ReadModifyWriteRow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReadModifyWriteRowRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableServiceServer).ReadModifyWriteRow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.v1.BigtableService/ReadModifyWriteRow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableServiceServer).ReadModifyWriteRow(ctx, req.(*ReadModifyWriteRowRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _BigtableService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.bigtable.v1.BigtableService", + HandlerType: (*BigtableServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "MutateRow", + Handler: _BigtableService_MutateRow_Handler, + }, + { + MethodName: "MutateRows", + Handler: _BigtableService_MutateRows_Handler, + }, + { + MethodName: "CheckAndMutateRow", + Handler: _BigtableService_CheckAndMutateRow_Handler, + }, + { + MethodName: "ReadModifyWriteRow", + Handler: _BigtableService_ReadModifyWriteRow_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ReadRows", + Handler: _BigtableService_ReadRows_Handler, + ServerStreams: true, + }, + { + StreamName: "SampleRowKeys", + Handler: _BigtableService_SampleRowKeys_Handler, + ServerStreams: true, + }, + }, + Metadata: "google/bigtable/v1/bigtable_service.proto", +} + +func init() { proto.RegisterFile("google/bigtable/v1/bigtable_service.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 521 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xcd, 0x6e, 0xd4, 0x30, + 0x10, 0xc7, 0x65, 0x0e, 0xa8, 0x58, 0x42, 0x08, 0x4b, 0x14, 0x69, 0xe1, 0x14, 0xa0, 0xa2, 0x11, + 0x8d, 0xdb, 0x72, 0x0b, 0xe2, 0xd0, 0x45, 0x50, 0x21, 0x58, 0x51, 0xa5, 0xe2, 0x43, 0xe5, 0xb0, + 0x78, 0x93, 0x69, 0x08, 0x4d, 0xe2, 0x60, 0x7b, 0x37, 0x5a, 0xaa, 0x5e, 0x38, 0x71, 0xe7, 0x11, + 0x10, 0x17, 0x5e, 0x80, 0x23, 0xef, 0x00, 0x67, 0x6e, 0x3c, 0x08, 0xb2, 0x63, 0x2f, 0x2c, 0x0d, + 0xcb, 0x8a, 0xee, 0x29, 0x8e, 0xe6, 0x3f, 0x33, 0xbf, 0xff, 0xf8, 0x03, 0xaf, 0xa6, 0x9c, 0xa7, + 0x39, 0xd0, 0x41, 0x96, 0x2a, 0x36, 0xc8, 0x81, 0x8e, 0x36, 0x26, 0xeb, 0xbe, 0x04, 0x31, 0xca, + 0x62, 0x08, 0x2a, 0xc1, 0x15, 0x27, 0xa4, 0x91, 0x06, 0x2e, 0x1c, 0x8c, 0x36, 0x3a, 0x97, 0x6d, + 0x3a, 0xab, 0x32, 0xca, 0xca, 0x92, 0x2b, 0xa6, 0x32, 0x5e, 0xca, 0x26, 0xa3, 0xb3, 0x32, 0xab, + 0x78, 0xc2, 0x14, 0xb3, 0xba, 0xcd, 0x39, 0x20, 0xfa, 0x05, 0x48, 0xc9, 0x52, 0x70, 0xb5, 0x2f, + 0xd9, 0x1c, 0xf3, 0x37, 0x18, 0xee, 0x53, 0x28, 0x2a, 0x35, 0x6e, 0x82, 0x9b, 0xdf, 0x97, 0xf0, + 0xb9, 0xae, 0x2d, 0xb0, 0xdb, 0xe4, 0x93, 0x8f, 0x08, 0x2f, 0x45, 0xc0, 0x92, 0x88, 0xd7, 0x92, + 0x5c, 0x09, 0x8e, 0x9b, 0x09, 0x5c, 0x34, 0x82, 0xd7, 0x43, 0x90, 0xaa, 0x73, 0x75, 0xb6, 0x48, + 0x56, 0xbc, 0x94, 0xe0, 0x3d, 0x7c, 0xfb, 0xed, 0xc7, 0xfb, 0x53, 0xf7, 0xbc, 0x2d, 0x4d, 0x7d, + 0xd8, 0x30, 0x97, 0xac, 0x80, 0xdb, 0x95, 0xe0, 0xaf, 0x20, 0x56, 0x92, 0xfa, 0xf4, 0x0d, 0x2f, + 0x41, 0x7f, 0xe3, 0x7c, 0x28, 0x15, 0x08, 0xbd, 0x34, 0x42, 0x49, 0xfd, 0x23, 0x2a, 0x78, 0x2d, + 0x43, 0x01, 0x2c, 0x09, 0x91, 0xbf, 0x8e, 0xc8, 0x67, 0x84, 0xcf, 0xee, 0xb2, 0xa2, 0xca, 0x21, + 0xe2, 0xf5, 0x03, 0x18, 0x4b, 0x72, 0xbd, 0x8d, 0x63, 0x4a, 0xe2, 0x88, 0x57, 0xe7, 0x50, 0x5a, + 0xec, 0x47, 0x06, 0xfb, 0x3e, 0xd9, 0x3e, 0x11, 0xb6, 0x34, 0xb5, 0x75, 0xe1, 0x75, 0x44, 0x3e, + 0x20, 0x7c, 0xa6, 0x37, 0x54, 0x4c, 0xe9, 0x66, 0xa4, 0x75, 0x7a, 0x93, 0xb0, 0x23, 0x5e, 0x76, + 0x2a, 0xb7, 0x8f, 0xc1, 0x5d, 0xbd, 0x8f, 0xde, 0x33, 0x83, 0x17, 0x79, 0xbd, 0x93, 0xe0, 0xd1, + 0x43, 0xc1, 0xeb, 0xfe, 0x01, 0x8c, 0x8f, 0xc2, 0xc2, 0x34, 0x0e, 0x91, 0x4f, 0x3e, 0x21, 0x8c, + 0x27, 0x18, 0x92, 0x5c, 0x9b, 0x89, 0x39, 0x99, 0xec, 0xca, 0xbf, 0x64, 0x76, 0xac, 0x3d, 0xc3, + 0xbd, 0xed, 0x75, 0xff, 0x93, 0xdb, 0x82, 0xea, 0x9a, 0x1a, 0xf6, 0x2b, 0xc2, 0xe7, 0xef, 0xbc, + 0x84, 0xf8, 0x60, 0xab, 0x4c, 0x7e, 0x8d, 0xf6, 0x46, 0x1b, 0xcc, 0x31, 0x99, 0x43, 0x5f, 0x9b, + 0x53, 0x6d, 0x1d, 0xbc, 0x30, 0x0e, 0xf6, 0xbc, 0xc7, 0x0b, 0x9a, 0x7c, 0x3c, 0xd5, 0x49, 0x9b, + 0xfa, 0x82, 0x30, 0xd1, 0xd7, 0xa8, 0xc7, 0x93, 0x6c, 0x7f, 0xfc, 0x54, 0x64, 0x8d, 0xab, 0xb5, + 0xbf, 0x5d, 0xb7, 0x69, 0x9d, 0xb3, 0x75, 0xb1, 0x55, 0xce, 0x6b, 0x8f, 0x19, 0x03, 0xcf, 0xbd, + 0x27, 0x0b, 0x32, 0x20, 0xa6, 0x11, 0x42, 0xe4, 0x77, 0x2b, 0xbc, 0x1c, 0xf3, 0xa2, 0x05, 0xa0, + 0x7b, 0xe1, 0x8f, 0x67, 0x47, 0xee, 0xe8, 0x73, 0xbd, 0x83, 0xf6, 0x42, 0x2b, 0x4e, 0x79, 0xce, + 0xca, 0x34, 0xe0, 0x22, 0xa5, 0x29, 0x94, 0xe6, 0xd4, 0xd3, 0x26, 0xc4, 0xaa, 0x4c, 0xfe, 0xfe, + 0x04, 0xde, 0x72, 0xeb, 0x77, 0x08, 0x0d, 0x4e, 0x1b, 0xe5, 0xcd, 0x9f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x4c, 0x27, 0x6e, 0x9a, 0xb0, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service_messages.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service_messages.pb.go new file mode 100644 index 0000000..1e7fad4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service_messages.pb.go @@ -0,0 +1,760 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/v1/bigtable_service_messages.proto +// DO NOT EDIT! + +package bigtable + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request message for BigtableServer.ReadRows. +type ReadRowsRequest struct { + // The unique name of the table from which to read. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // If neither row_key nor row_range is set, reads from all rows. + // + // Types that are valid to be assigned to Target: + // *ReadRowsRequest_RowKey + // *ReadRowsRequest_RowRange + // *ReadRowsRequest_RowSet + Target isReadRowsRequest_Target `protobuf_oneof:"target"` + // The filter to apply to the contents of the specified row(s). If unset, + // reads the entire table. + Filter *RowFilter `protobuf:"bytes,5,opt,name=filter" json:"filter,omitempty"` + // By default, rows are read sequentially, producing results which are + // guaranteed to arrive in increasing row order. Setting + // "allow_row_interleaving" to true allows multiple rows to be interleaved in + // the response stream, which increases throughput but breaks this guarantee, + // and may force the client to use more memory to buffer partially-received + // rows. Cannot be set to true when specifying "num_rows_limit". + AllowRowInterleaving bool `protobuf:"varint,6,opt,name=allow_row_interleaving,json=allowRowInterleaving" json:"allow_row_interleaving,omitempty"` + // The read will terminate after committing to N rows' worth of results. The + // default (zero) is to return all results. + // Note that "allow_row_interleaving" cannot be set to true when this is set. + NumRowsLimit int64 `protobuf:"varint,7,opt,name=num_rows_limit,json=numRowsLimit" json:"num_rows_limit,omitempty"` +} + +func (m *ReadRowsRequest) Reset() { *m = ReadRowsRequest{} } +func (m *ReadRowsRequest) String() string { return proto.CompactTextString(m) } +func (*ReadRowsRequest) ProtoMessage() {} +func (*ReadRowsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +type isReadRowsRequest_Target interface { + isReadRowsRequest_Target() +} + +type ReadRowsRequest_RowKey struct { + RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3,oneof"` +} +type ReadRowsRequest_RowRange struct { + RowRange *RowRange `protobuf:"bytes,3,opt,name=row_range,json=rowRange,oneof"` +} +type ReadRowsRequest_RowSet struct { + RowSet *RowSet `protobuf:"bytes,8,opt,name=row_set,json=rowSet,oneof"` +} + +func (*ReadRowsRequest_RowKey) isReadRowsRequest_Target() {} +func (*ReadRowsRequest_RowRange) isReadRowsRequest_Target() {} +func (*ReadRowsRequest_RowSet) isReadRowsRequest_Target() {} + +func (m *ReadRowsRequest) GetTarget() isReadRowsRequest_Target { + if m != nil { + return m.Target + } + return nil +} + +func (m *ReadRowsRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *ReadRowsRequest) GetRowKey() []byte { + if x, ok := m.GetTarget().(*ReadRowsRequest_RowKey); ok { + return x.RowKey + } + return nil +} + +func (m *ReadRowsRequest) GetRowRange() *RowRange { + if x, ok := m.GetTarget().(*ReadRowsRequest_RowRange); ok { + return x.RowRange + } + return nil +} + +func (m *ReadRowsRequest) GetRowSet() *RowSet { + if x, ok := m.GetTarget().(*ReadRowsRequest_RowSet); ok { + return x.RowSet + } + return nil +} + +func (m *ReadRowsRequest) GetFilter() *RowFilter { + if m != nil { + return m.Filter + } + return nil +} + +func (m *ReadRowsRequest) GetAllowRowInterleaving() bool { + if m != nil { + return m.AllowRowInterleaving + } + return false +} + +func (m *ReadRowsRequest) GetNumRowsLimit() int64 { + if m != nil { + return m.NumRowsLimit + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ReadRowsRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ReadRowsRequest_OneofMarshaler, _ReadRowsRequest_OneofUnmarshaler, _ReadRowsRequest_OneofSizer, []interface{}{ + (*ReadRowsRequest_RowKey)(nil), + (*ReadRowsRequest_RowRange)(nil), + (*ReadRowsRequest_RowSet)(nil), + } +} + +func _ReadRowsRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ReadRowsRequest) + // target + switch x := m.Target.(type) { + case *ReadRowsRequest_RowKey: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.RowKey) + case *ReadRowsRequest_RowRange: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RowRange); err != nil { + return err + } + case *ReadRowsRequest_RowSet: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RowSet); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ReadRowsRequest.Target has unexpected type %T", x) + } + return nil +} + +func _ReadRowsRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ReadRowsRequest) + switch tag { + case 2: // target.row_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Target = &ReadRowsRequest_RowKey{x} + return true, err + case 3: // target.row_range + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RowRange) + err := b.DecodeMessage(msg) + m.Target = &ReadRowsRequest_RowRange{msg} + return true, err + case 8: // target.row_set + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RowSet) + err := b.DecodeMessage(msg) + m.Target = &ReadRowsRequest_RowSet{msg} + return true, err + default: + return false, nil + } +} + +func _ReadRowsRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ReadRowsRequest) + // target + switch x := m.Target.(type) { + case *ReadRowsRequest_RowKey: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RowKey))) + n += len(x.RowKey) + case *ReadRowsRequest_RowRange: + s := proto.Size(x.RowRange) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ReadRowsRequest_RowSet: + s := proto.Size(x.RowSet) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Response message for BigtableService.ReadRows. +type ReadRowsResponse struct { + // The key of the row for which we're receiving data. + // Results will be received in increasing row key order, unless + // "allow_row_interleaving" was specified in the request. + RowKey []byte `protobuf:"bytes,1,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // One or more chunks of the row specified by "row_key". + Chunks []*ReadRowsResponse_Chunk `protobuf:"bytes,2,rep,name=chunks" json:"chunks,omitempty"` +} + +func (m *ReadRowsResponse) Reset() { *m = ReadRowsResponse{} } +func (m *ReadRowsResponse) String() string { return proto.CompactTextString(m) } +func (*ReadRowsResponse) ProtoMessage() {} +func (*ReadRowsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ReadRowsResponse) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *ReadRowsResponse) GetChunks() []*ReadRowsResponse_Chunk { + if m != nil { + return m.Chunks + } + return nil +} + +// Specifies a piece of a row's contents returned as part of the read +// response stream. +type ReadRowsResponse_Chunk struct { + // Types that are valid to be assigned to Chunk: + // *ReadRowsResponse_Chunk_RowContents + // *ReadRowsResponse_Chunk_ResetRow + // *ReadRowsResponse_Chunk_CommitRow + Chunk isReadRowsResponse_Chunk_Chunk `protobuf_oneof:"chunk"` +} + +func (m *ReadRowsResponse_Chunk) Reset() { *m = ReadRowsResponse_Chunk{} } +func (m *ReadRowsResponse_Chunk) String() string { return proto.CompactTextString(m) } +func (*ReadRowsResponse_Chunk) ProtoMessage() {} +func (*ReadRowsResponse_Chunk) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1, 0} } + +type isReadRowsResponse_Chunk_Chunk interface { + isReadRowsResponse_Chunk_Chunk() +} + +type ReadRowsResponse_Chunk_RowContents struct { + RowContents *Family `protobuf:"bytes,1,opt,name=row_contents,json=rowContents,oneof"` +} +type ReadRowsResponse_Chunk_ResetRow struct { + ResetRow bool `protobuf:"varint,2,opt,name=reset_row,json=resetRow,oneof"` +} +type ReadRowsResponse_Chunk_CommitRow struct { + CommitRow bool `protobuf:"varint,3,opt,name=commit_row,json=commitRow,oneof"` +} + +func (*ReadRowsResponse_Chunk_RowContents) isReadRowsResponse_Chunk_Chunk() {} +func (*ReadRowsResponse_Chunk_ResetRow) isReadRowsResponse_Chunk_Chunk() {} +func (*ReadRowsResponse_Chunk_CommitRow) isReadRowsResponse_Chunk_Chunk() {} + +func (m *ReadRowsResponse_Chunk) GetChunk() isReadRowsResponse_Chunk_Chunk { + if m != nil { + return m.Chunk + } + return nil +} + +func (m *ReadRowsResponse_Chunk) GetRowContents() *Family { + if x, ok := m.GetChunk().(*ReadRowsResponse_Chunk_RowContents); ok { + return x.RowContents + } + return nil +} + +func (m *ReadRowsResponse_Chunk) GetResetRow() bool { + if x, ok := m.GetChunk().(*ReadRowsResponse_Chunk_ResetRow); ok { + return x.ResetRow + } + return false +} + +func (m *ReadRowsResponse_Chunk) GetCommitRow() bool { + if x, ok := m.GetChunk().(*ReadRowsResponse_Chunk_CommitRow); ok { + return x.CommitRow + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ReadRowsResponse_Chunk) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ReadRowsResponse_Chunk_OneofMarshaler, _ReadRowsResponse_Chunk_OneofUnmarshaler, _ReadRowsResponse_Chunk_OneofSizer, []interface{}{ + (*ReadRowsResponse_Chunk_RowContents)(nil), + (*ReadRowsResponse_Chunk_ResetRow)(nil), + (*ReadRowsResponse_Chunk_CommitRow)(nil), + } +} + +func _ReadRowsResponse_Chunk_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ReadRowsResponse_Chunk) + // chunk + switch x := m.Chunk.(type) { + case *ReadRowsResponse_Chunk_RowContents: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RowContents); err != nil { + return err + } + case *ReadRowsResponse_Chunk_ResetRow: + t := uint64(0) + if x.ResetRow { + t = 1 + } + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *ReadRowsResponse_Chunk_CommitRow: + t := uint64(0) + if x.CommitRow { + t = 1 + } + b.EncodeVarint(3<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("ReadRowsResponse_Chunk.Chunk has unexpected type %T", x) + } + return nil +} + +func _ReadRowsResponse_Chunk_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ReadRowsResponse_Chunk) + switch tag { + case 1: // chunk.row_contents + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Family) + err := b.DecodeMessage(msg) + m.Chunk = &ReadRowsResponse_Chunk_RowContents{msg} + return true, err + case 2: // chunk.reset_row + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Chunk = &ReadRowsResponse_Chunk_ResetRow{x != 0} + return true, err + case 3: // chunk.commit_row + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Chunk = &ReadRowsResponse_Chunk_CommitRow{x != 0} + return true, err + default: + return false, nil + } +} + +func _ReadRowsResponse_Chunk_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ReadRowsResponse_Chunk) + // chunk + switch x := m.Chunk.(type) { + case *ReadRowsResponse_Chunk_RowContents: + s := proto.Size(x.RowContents) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ReadRowsResponse_Chunk_ResetRow: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += 1 + case *ReadRowsResponse_Chunk_CommitRow: + n += proto.SizeVarint(3<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request message for BigtableService.SampleRowKeys. +type SampleRowKeysRequest struct { + // The unique name of the table from which to sample row keys. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` +} + +func (m *SampleRowKeysRequest) Reset() { *m = SampleRowKeysRequest{} } +func (m *SampleRowKeysRequest) String() string { return proto.CompactTextString(m) } +func (*SampleRowKeysRequest) ProtoMessage() {} +func (*SampleRowKeysRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *SampleRowKeysRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +// Response message for BigtableService.SampleRowKeys. +type SampleRowKeysResponse struct { + // Sorted streamed sequence of sample row keys in the table. The table might + // have contents before the first row key in the list and after the last one, + // but a key containing the empty string indicates "end of table" and will be + // the last response given, if present. + // Note that row keys in this list may not have ever been written to or read + // from, and users should therefore not make any assumptions about the row key + // structure that are specific to their use case. + RowKey []byte `protobuf:"bytes,1,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // Approximate total storage space used by all rows in the table which precede + // "row_key". Buffering the contents of all rows between two subsequent + // samples would require space roughly equal to the difference in their + // "offset_bytes" fields. + OffsetBytes int64 `protobuf:"varint,2,opt,name=offset_bytes,json=offsetBytes" json:"offset_bytes,omitempty"` +} + +func (m *SampleRowKeysResponse) Reset() { *m = SampleRowKeysResponse{} } +func (m *SampleRowKeysResponse) String() string { return proto.CompactTextString(m) } +func (*SampleRowKeysResponse) ProtoMessage() {} +func (*SampleRowKeysResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *SampleRowKeysResponse) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *SampleRowKeysResponse) GetOffsetBytes() int64 { + if m != nil { + return m.OffsetBytes + } + return 0 +} + +// Request message for BigtableService.MutateRow. +type MutateRowRequest struct { + // The unique name of the table to which the mutation should be applied. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The key of the row to which the mutation should be applied. + RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // Changes to be atomically applied to the specified row. Entries are applied + // in order, meaning that earlier mutations can be masked by later ones. + // Must contain at least one entry and at most 100000. + Mutations []*Mutation `protobuf:"bytes,3,rep,name=mutations" json:"mutations,omitempty"` +} + +func (m *MutateRowRequest) Reset() { *m = MutateRowRequest{} } +func (m *MutateRowRequest) String() string { return proto.CompactTextString(m) } +func (*MutateRowRequest) ProtoMessage() {} +func (*MutateRowRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *MutateRowRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *MutateRowRequest) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *MutateRowRequest) GetMutations() []*Mutation { + if m != nil { + return m.Mutations + } + return nil +} + +// Request message for BigtableService.MutateRows. +type MutateRowsRequest struct { + // The unique name of the table to which the mutations should be applied. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The row keys/mutations to be applied in bulk. + // Each entry is applied as an atomic mutation, but the entries may be + // applied in arbitrary order (even between entries for the same row). + // At least one entry must be specified, and in total the entries may + // contain at most 100000 mutations. + Entries []*MutateRowsRequest_Entry `protobuf:"bytes,2,rep,name=entries" json:"entries,omitempty"` +} + +func (m *MutateRowsRequest) Reset() { *m = MutateRowsRequest{} } +func (m *MutateRowsRequest) String() string { return proto.CompactTextString(m) } +func (*MutateRowsRequest) ProtoMessage() {} +func (*MutateRowsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *MutateRowsRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *MutateRowsRequest) GetEntries() []*MutateRowsRequest_Entry { + if m != nil { + return m.Entries + } + return nil +} + +type MutateRowsRequest_Entry struct { + // The key of the row to which the `mutations` should be applied. + RowKey []byte `protobuf:"bytes,1,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // Changes to be atomically applied to the specified row. Mutations are + // applied in order, meaning that earlier mutations can be masked by + // later ones. + // At least one mutation must be specified. + Mutations []*Mutation `protobuf:"bytes,2,rep,name=mutations" json:"mutations,omitempty"` +} + +func (m *MutateRowsRequest_Entry) Reset() { *m = MutateRowsRequest_Entry{} } +func (m *MutateRowsRequest_Entry) String() string { return proto.CompactTextString(m) } +func (*MutateRowsRequest_Entry) ProtoMessage() {} +func (*MutateRowsRequest_Entry) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5, 0} } + +func (m *MutateRowsRequest_Entry) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *MutateRowsRequest_Entry) GetMutations() []*Mutation { + if m != nil { + return m.Mutations + } + return nil +} + +// Response message for BigtableService.MutateRows. +type MutateRowsResponse struct { + // The results for each Entry from the request, presented in the order + // in which the entries were originally given. + // Depending on how requests are batched during execution, it is possible + // for one Entry to fail due to an error with another Entry. In the event + // that this occurs, the same error will be reported for both entries. + Statuses []*google_rpc.Status `protobuf:"bytes,1,rep,name=statuses" json:"statuses,omitempty"` +} + +func (m *MutateRowsResponse) Reset() { *m = MutateRowsResponse{} } +func (m *MutateRowsResponse) String() string { return proto.CompactTextString(m) } +func (*MutateRowsResponse) ProtoMessage() {} +func (*MutateRowsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *MutateRowsResponse) GetStatuses() []*google_rpc.Status { + if m != nil { + return m.Statuses + } + return nil +} + +// Request message for BigtableService.CheckAndMutateRowRequest +type CheckAndMutateRowRequest struct { + // The unique name of the table to which the conditional mutation should be + // applied. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The key of the row to which the conditional mutation should be applied. + RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // The filter to be applied to the contents of the specified row. Depending + // on whether or not any results are yielded, either "true_mutations" or + // "false_mutations" will be executed. If unset, checks that the row contains + // any values at all. + PredicateFilter *RowFilter `protobuf:"bytes,6,opt,name=predicate_filter,json=predicateFilter" json:"predicate_filter,omitempty"` + // Changes to be atomically applied to the specified row if "predicate_filter" + // yields at least one cell when applied to "row_key". Entries are applied in + // order, meaning that earlier mutations can be masked by later ones. + // Must contain at least one entry if "false_mutations" is empty, and at most + // 100000. + TrueMutations []*Mutation `protobuf:"bytes,4,rep,name=true_mutations,json=trueMutations" json:"true_mutations,omitempty"` + // Changes to be atomically applied to the specified row if "predicate_filter" + // does not yield any cells when applied to "row_key". Entries are applied in + // order, meaning that earlier mutations can be masked by later ones. + // Must contain at least one entry if "true_mutations" is empty, and at most + // 100000. + FalseMutations []*Mutation `protobuf:"bytes,5,rep,name=false_mutations,json=falseMutations" json:"false_mutations,omitempty"` +} + +func (m *CheckAndMutateRowRequest) Reset() { *m = CheckAndMutateRowRequest{} } +func (m *CheckAndMutateRowRequest) String() string { return proto.CompactTextString(m) } +func (*CheckAndMutateRowRequest) ProtoMessage() {} +func (*CheckAndMutateRowRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *CheckAndMutateRowRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *CheckAndMutateRowRequest) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *CheckAndMutateRowRequest) GetPredicateFilter() *RowFilter { + if m != nil { + return m.PredicateFilter + } + return nil +} + +func (m *CheckAndMutateRowRequest) GetTrueMutations() []*Mutation { + if m != nil { + return m.TrueMutations + } + return nil +} + +func (m *CheckAndMutateRowRequest) GetFalseMutations() []*Mutation { + if m != nil { + return m.FalseMutations + } + return nil +} + +// Response message for BigtableService.CheckAndMutateRowRequest. +type CheckAndMutateRowResponse struct { + // Whether or not the request's "predicate_filter" yielded any results for + // the specified row. + PredicateMatched bool `protobuf:"varint,1,opt,name=predicate_matched,json=predicateMatched" json:"predicate_matched,omitempty"` +} + +func (m *CheckAndMutateRowResponse) Reset() { *m = CheckAndMutateRowResponse{} } +func (m *CheckAndMutateRowResponse) String() string { return proto.CompactTextString(m) } +func (*CheckAndMutateRowResponse) ProtoMessage() {} +func (*CheckAndMutateRowResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +func (m *CheckAndMutateRowResponse) GetPredicateMatched() bool { + if m != nil { + return m.PredicateMatched + } + return false +} + +// Request message for BigtableService.ReadModifyWriteRowRequest. +type ReadModifyWriteRowRequest struct { + // The unique name of the table to which the read/modify/write rules should be + // applied. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The key of the row to which the read/modify/write rules should be applied. + RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // Rules specifying how the specified row's contents are to be transformed + // into writes. Entries are applied in order, meaning that earlier rules will + // affect the results of later ones. + Rules []*ReadModifyWriteRule `protobuf:"bytes,3,rep,name=rules" json:"rules,omitempty"` +} + +func (m *ReadModifyWriteRowRequest) Reset() { *m = ReadModifyWriteRowRequest{} } +func (m *ReadModifyWriteRowRequest) String() string { return proto.CompactTextString(m) } +func (*ReadModifyWriteRowRequest) ProtoMessage() {} +func (*ReadModifyWriteRowRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{9} } + +func (m *ReadModifyWriteRowRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *ReadModifyWriteRowRequest) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *ReadModifyWriteRowRequest) GetRules() []*ReadModifyWriteRule { + if m != nil { + return m.Rules + } + return nil +} + +func init() { + proto.RegisterType((*ReadRowsRequest)(nil), "google.bigtable.v1.ReadRowsRequest") + proto.RegisterType((*ReadRowsResponse)(nil), "google.bigtable.v1.ReadRowsResponse") + proto.RegisterType((*ReadRowsResponse_Chunk)(nil), "google.bigtable.v1.ReadRowsResponse.Chunk") + proto.RegisterType((*SampleRowKeysRequest)(nil), "google.bigtable.v1.SampleRowKeysRequest") + proto.RegisterType((*SampleRowKeysResponse)(nil), "google.bigtable.v1.SampleRowKeysResponse") + proto.RegisterType((*MutateRowRequest)(nil), "google.bigtable.v1.MutateRowRequest") + proto.RegisterType((*MutateRowsRequest)(nil), "google.bigtable.v1.MutateRowsRequest") + proto.RegisterType((*MutateRowsRequest_Entry)(nil), "google.bigtable.v1.MutateRowsRequest.Entry") + proto.RegisterType((*MutateRowsResponse)(nil), "google.bigtable.v1.MutateRowsResponse") + proto.RegisterType((*CheckAndMutateRowRequest)(nil), "google.bigtable.v1.CheckAndMutateRowRequest") + proto.RegisterType((*CheckAndMutateRowResponse)(nil), "google.bigtable.v1.CheckAndMutateRowResponse") + proto.RegisterType((*ReadModifyWriteRowRequest)(nil), "google.bigtable.v1.ReadModifyWriteRowRequest") +} + +func init() { proto.RegisterFile("google/bigtable/v1/bigtable_service_messages.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 788 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x5f, 0x8b, 0x23, 0x45, + 0x10, 0xdf, 0x49, 0xcc, 0xbf, 0x4a, 0xdc, 0xdd, 0x6b, 0xce, 0xdb, 0xd9, 0x70, 0x8b, 0x71, 0x10, + 0x0d, 0x1e, 0x4c, 0xb8, 0xd5, 0x7d, 0xb9, 0x43, 0xc4, 0xc4, 0x3d, 0x22, 0x1a, 0x39, 0x3a, 0x0f, + 0x82, 0x08, 0xa1, 0x33, 0xa9, 0xcc, 0x0e, 0x3b, 0xd3, 0x1d, 0xbb, 0x7b, 0x32, 0xe4, 0x59, 0xf0, + 0x5d, 0x3f, 0x85, 0xdf, 0xc8, 0x17, 0x3f, 0x8c, 0x74, 0xcf, 0xe4, 0x8f, 0x6b, 0xa2, 0x11, 0xf6, + 0xad, 0xa7, 0xaa, 0x7e, 0xbf, 0xaa, 0xfa, 0x75, 0x4d, 0x17, 0x5c, 0x87, 0x42, 0x84, 0x31, 0xf6, + 0xa6, 0x51, 0xa8, 0xd9, 0x34, 0xc6, 0xde, 0xf2, 0xe5, 0xe6, 0x3c, 0x51, 0x28, 0x97, 0x51, 0x80, + 0x93, 0x04, 0x95, 0x62, 0x21, 0x2a, 0x7f, 0x21, 0x85, 0x16, 0x84, 0xe4, 0x18, 0x7f, 0x1d, 0xe7, + 0x2f, 0x5f, 0xb6, 0x3f, 0xfa, 0x37, 0x9e, 0x19, 0xd3, 0x2c, 0xc7, 0xb6, 0x2f, 0x8a, 0x38, 0xb9, + 0x08, 0x7a, 0x4a, 0x33, 0x9d, 0x16, 0xa4, 0xde, 0x9f, 0x25, 0x38, 0xa3, 0xc8, 0x66, 0x54, 0x64, + 0x8a, 0xe2, 0x4f, 0x29, 0x2a, 0x4d, 0xae, 0x00, 0x72, 0x02, 0xce, 0x12, 0x74, 0x9d, 0x8e, 0xd3, + 0x6d, 0xd0, 0x86, 0xb5, 0x7c, 0xc7, 0x12, 0x24, 0x97, 0x50, 0x93, 0x22, 0x9b, 0xdc, 0xe3, 0xca, + 0x2d, 0x75, 0x9c, 0x6e, 0x6b, 0x78, 0x42, 0xab, 0x52, 0x64, 0xdf, 0xe0, 0x8a, 0xbc, 0x86, 0x86, + 0x71, 0x49, 0xc6, 0x43, 0x74, 0xcb, 0x1d, 0xa7, 0xdb, 0xbc, 0x7e, 0xee, 0xff, 0xb3, 0x6c, 0x9f, + 0x8a, 0x8c, 0x9a, 0x98, 0xe1, 0x09, 0xad, 0xcb, 0xe2, 0x4c, 0x6e, 0x72, 0x5e, 0x85, 0xda, 0xad, + 0x5b, 0x68, 0xfb, 0x00, 0x74, 0x8c, 0xba, 0xc8, 0x39, 0x46, 0x4d, 0x6e, 0xa0, 0x3a, 0x8f, 0x62, + 0x8d, 0xd2, 0xad, 0x58, 0xd4, 0xd5, 0x01, 0xd4, 0x1b, 0x1b, 0x44, 0x8b, 0x60, 0xf2, 0x19, 0x3c, + 0x63, 0x71, 0x6c, 0x8a, 0x15, 0xd9, 0x24, 0xe2, 0x1a, 0x65, 0x8c, 0x6c, 0x19, 0xf1, 0xd0, 0xad, + 0x76, 0x9c, 0x6e, 0x9d, 0x3e, 0xb5, 0x5e, 0x2a, 0xb2, 0xaf, 0x77, 0x7c, 0xe4, 0x43, 0x38, 0xe5, + 0x69, 0x62, 0x30, 0x6a, 0x12, 0x47, 0x49, 0xa4, 0xdd, 0x5a, 0xc7, 0xe9, 0x96, 0x69, 0x8b, 0xa7, + 0x89, 0x91, 0xf0, 0x5b, 0x63, 0xeb, 0xd7, 0xa1, 0xaa, 0x99, 0x0c, 0x51, 0x7b, 0x3f, 0x97, 0xe0, + 0x7c, 0x2b, 0xaf, 0x5a, 0x08, 0xae, 0x90, 0x5c, 0x6c, 0x05, 0x34, 0xe2, 0xb6, 0x36, 0xf2, 0xf5, + 0xa1, 0x1a, 0xdc, 0xa5, 0xfc, 0x5e, 0xb9, 0xa5, 0x4e, 0xb9, 0xdb, 0xbc, 0xfe, 0x64, 0x6f, 0x2b, + 0x0f, 0xe8, 0xfc, 0x81, 0x81, 0xd0, 0x02, 0xd9, 0xfe, 0xd5, 0x81, 0x8a, 0xb5, 0x90, 0x2f, 0xa0, + 0x65, 0xd2, 0x04, 0x82, 0x6b, 0xe4, 0x5a, 0xd9, 0x5c, 0x07, 0x44, 0x7d, 0xc3, 0x92, 0x28, 0x5e, + 0x0d, 0x4f, 0x68, 0x53, 0x8a, 0x6c, 0x50, 0x00, 0xc8, 0x15, 0x34, 0x24, 0x2a, 0xd4, 0xa6, 0x5d, + 0x7b, 0xd5, 0x75, 0x7b, 0x5f, 0xc6, 0x44, 0x45, 0x46, 0xde, 0x07, 0x08, 0x44, 0x92, 0x44, 0xb9, + 0xbf, 0x5c, 0xf8, 0x1b, 0xb9, 0x8d, 0x8a, 0xac, 0x5f, 0x83, 0x8a, 0x2d, 0xca, 0xbb, 0x81, 0xa7, + 0x63, 0x96, 0x2c, 0x62, 0xa4, 0xb6, 0xcf, 0x23, 0x07, 0xcd, 0x1b, 0xc3, 0x7b, 0x0f, 0x60, 0xff, + 0x25, 0xe0, 0x07, 0xd0, 0x12, 0xf3, 0xb9, 0x29, 0x79, 0xba, 0xd2, 0xa8, 0x6c, 0xd1, 0x65, 0xda, + 0xcc, 0x6d, 0x7d, 0x63, 0xf2, 0x7e, 0x71, 0xe0, 0x7c, 0x94, 0x6a, 0xa6, 0x0d, 0xeb, 0x91, 0x13, + 0x7f, 0xf1, 0x60, 0xe2, 0x37, 0xf9, 0x5e, 0x41, 0x23, 0x31, 0x5c, 0x91, 0xe0, 0xca, 0x2d, 0xdb, + 0x3b, 0xdb, 0x3b, 0xef, 0xa3, 0x22, 0x88, 0x6e, 0xc3, 0xbd, 0x3f, 0x1c, 0x78, 0xb2, 0x29, 0xe4, + 0xd8, 0x7f, 0xef, 0x16, 0x6a, 0xc8, 0xb5, 0x8c, 0x70, 0x3d, 0x22, 0x2f, 0x0e, 0xa6, 0xdb, 0xa5, + 0xf5, 0x6f, 0xb9, 0x96, 0x2b, 0xba, 0xc6, 0xb6, 0x7f, 0x84, 0x8a, 0xb5, 0x1c, 0x56, 0xf2, 0x6f, + 0x9d, 0x95, 0xfe, 0x5f, 0x67, 0x5f, 0x01, 0xd9, 0xad, 0xa0, 0xb8, 0x34, 0x1f, 0xea, 0xf9, 0xcb, + 0x83, 0x66, 0x14, 0x0d, 0x21, 0x59, 0x13, 0xca, 0x45, 0xe0, 0x8f, 0xad, 0x8f, 0x6e, 0x62, 0xbc, + 0xdf, 0x4b, 0xe0, 0x0e, 0xee, 0x30, 0xb8, 0xff, 0x92, 0xcf, 0x1e, 0xed, 0xc2, 0x86, 0x70, 0xbe, + 0x90, 0x38, 0x8b, 0x02, 0xa6, 0x71, 0x52, 0x3c, 0x1b, 0xd5, 0x63, 0x9e, 0x8d, 0xb3, 0x0d, 0x2c, + 0x37, 0x90, 0x01, 0x9c, 0x6a, 0x99, 0xe2, 0x64, 0xab, 0xd2, 0x3b, 0x47, 0xa8, 0xf4, 0xae, 0xc1, + 0xac, 0xbf, 0x14, 0xb9, 0x85, 0xb3, 0x39, 0x8b, 0xd5, 0x2e, 0x4b, 0xe5, 0x08, 0x96, 0x53, 0x0b, + 0xda, 0xd0, 0x78, 0x43, 0xb8, 0xdc, 0xa3, 0x54, 0xa1, 0xfb, 0x0b, 0x78, 0xb2, 0x6d, 0x39, 0x61, + 0x3a, 0xb8, 0xc3, 0x99, 0x55, 0xac, 0x4e, 0xb7, 0x5a, 0x8c, 0x72, 0xbb, 0xf7, 0x9b, 0x03, 0x97, + 0xe6, 0x81, 0x19, 0x89, 0x59, 0x34, 0x5f, 0x7d, 0x2f, 0xa3, 0x47, 0x51, 0xfd, 0x73, 0xa8, 0xc8, + 0x34, 0xc6, 0xf5, 0x2f, 0xf2, 0xf1, 0xa1, 0x67, 0x6d, 0x37, 0x6b, 0x1a, 0x23, 0xcd, 0x51, 0x7d, + 0x0d, 0xcf, 0x02, 0x91, 0xec, 0x01, 0xf5, 0x9f, 0xf7, 0x8b, 0x8f, 0x71, 0xbe, 0x32, 0x47, 0xc5, + 0xc6, 0x7c, 0x6b, 0x76, 0xdb, 0x5b, 0xe7, 0x87, 0x57, 0x05, 0x26, 0x14, 0x31, 0xe3, 0xa1, 0x2f, + 0x64, 0xd8, 0x0b, 0x91, 0xdb, 0xcd, 0xd7, 0xcb, 0x5d, 0x6c, 0x11, 0xa9, 0xdd, 0xed, 0xf9, 0x7a, + 0x7d, 0x9e, 0x56, 0x6d, 0xd8, 0xa7, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x16, 0x55, 0x90, 0x95, + 0xab, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v2/bigtable.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v2/bigtable.pb.go new file mode 100644 index 0000000..b41f14f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v2/bigtable.pb.go @@ -0,0 +1,1167 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/v2/bigtable.proto +// DO NOT EDIT! + +/* +Package bigtable is a generated protocol buffer package. + +It is generated from these files: + google/bigtable/v2/bigtable.proto + google/bigtable/v2/data.proto + +It has these top-level messages: + ReadRowsRequest + ReadRowsResponse + SampleRowKeysRequest + SampleRowKeysResponse + MutateRowRequest + MutateRowResponse + MutateRowsRequest + MutateRowsResponse + CheckAndMutateRowRequest + CheckAndMutateRowResponse + ReadModifyWriteRowRequest + ReadModifyWriteRowResponse + Row + Family + Column + Cell + RowRange + RowSet + ColumnRange + TimestampRange + ValueRange + RowFilter + Mutation + ReadModifyWriteRule +*/ +package bigtable + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/wrappers" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Request message for Bigtable.ReadRows. +type ReadRowsRequest struct { + // The unique name of the table from which to read. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The row keys and/or ranges to read. If not specified, reads from all rows. + Rows *RowSet `protobuf:"bytes,2,opt,name=rows" json:"rows,omitempty"` + // The filter to apply to the contents of the specified row(s). If unset, + // reads the entirety of each row. + Filter *RowFilter `protobuf:"bytes,3,opt,name=filter" json:"filter,omitempty"` + // The read will terminate after committing to N rows' worth of results. The + // default (zero) is to return all results. + RowsLimit int64 `protobuf:"varint,4,opt,name=rows_limit,json=rowsLimit" json:"rows_limit,omitempty"` +} + +func (m *ReadRowsRequest) Reset() { *m = ReadRowsRequest{} } +func (m *ReadRowsRequest) String() string { return proto.CompactTextString(m) } +func (*ReadRowsRequest) ProtoMessage() {} +func (*ReadRowsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ReadRowsRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *ReadRowsRequest) GetRows() *RowSet { + if m != nil { + return m.Rows + } + return nil +} + +func (m *ReadRowsRequest) GetFilter() *RowFilter { + if m != nil { + return m.Filter + } + return nil +} + +func (m *ReadRowsRequest) GetRowsLimit() int64 { + if m != nil { + return m.RowsLimit + } + return 0 +} + +// Response message for Bigtable.ReadRows. +type ReadRowsResponse struct { + Chunks []*ReadRowsResponse_CellChunk `protobuf:"bytes,1,rep,name=chunks" json:"chunks,omitempty"` + // Optionally the server might return the row key of the last row it + // has scanned. The client can use this to construct a more + // efficient retry request if needed: any row keys or portions of + // ranges less than this row key can be dropped from the request. + // This is primarily useful for cases where the server has read a + // lot of data that was filtered out since the last committed row + // key, allowing the client to skip that work on a retry. + LastScannedRowKey []byte `protobuf:"bytes,2,opt,name=last_scanned_row_key,json=lastScannedRowKey,proto3" json:"last_scanned_row_key,omitempty"` +} + +func (m *ReadRowsResponse) Reset() { *m = ReadRowsResponse{} } +func (m *ReadRowsResponse) String() string { return proto.CompactTextString(m) } +func (*ReadRowsResponse) ProtoMessage() {} +func (*ReadRowsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ReadRowsResponse) GetChunks() []*ReadRowsResponse_CellChunk { + if m != nil { + return m.Chunks + } + return nil +} + +func (m *ReadRowsResponse) GetLastScannedRowKey() []byte { + if m != nil { + return m.LastScannedRowKey + } + return nil +} + +// Specifies a piece of a row's contents returned as part of the read +// response stream. +type ReadRowsResponse_CellChunk struct { + // The row key for this chunk of data. If the row key is empty, + // this CellChunk is a continuation of the same row as the previous + // CellChunk in the response stream, even if that CellChunk was in a + // previous ReadRowsResponse message. + RowKey []byte `protobuf:"bytes,1,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // The column family name for this chunk of data. If this message + // is not present this CellChunk is a continuation of the same column + // family as the previous CellChunk. The empty string can occur as a + // column family name in a response so clients must check + // explicitly for the presence of this message, not just for + // `family_name.value` being non-empty. + FamilyName *google_protobuf1.StringValue `protobuf:"bytes,2,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The column qualifier for this chunk of data. If this message + // is not present, this CellChunk is a continuation of the same column + // as the previous CellChunk. Column qualifiers may be empty so + // clients must check for the presence of this message, not just + // for `qualifier.value` being non-empty. + Qualifier *google_protobuf1.BytesValue `protobuf:"bytes,3,opt,name=qualifier" json:"qualifier,omitempty"` + // The cell's stored timestamp, which also uniquely identifies it + // within its column. Values are always expressed in + // microseconds, but individual tables may set a coarser + // granularity to further restrict the allowed values. For + // example, a table which specifies millisecond granularity will + // only allow values of `timestamp_micros` which are multiples of + // 1000. Timestamps are only set in the first CellChunk per cell + // (for cells split into multiple chunks). + TimestampMicros int64 `protobuf:"varint,4,opt,name=timestamp_micros,json=timestampMicros" json:"timestamp_micros,omitempty"` + // Labels applied to the cell by a + // [RowFilter][google.bigtable.v2.RowFilter]. Labels are only set + // on the first CellChunk per cell. + Labels []string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty"` + // The value stored in the cell. Cell values can be split across + // multiple CellChunks. In that case only the value field will be + // set in CellChunks after the first: the timestamp and labels + // will only be present in the first CellChunk, even if the first + // CellChunk came in a previous ReadRowsResponse. + Value []byte `protobuf:"bytes,6,opt,name=value,proto3" json:"value,omitempty"` + // If this CellChunk is part of a chunked cell value and this is + // not the final chunk of that cell, value_size will be set to the + // total length of the cell value. The client can use this size + // to pre-allocate memory to hold the full cell value. + ValueSize int32 `protobuf:"varint,7,opt,name=value_size,json=valueSize" json:"value_size,omitempty"` + // Types that are valid to be assigned to RowStatus: + // *ReadRowsResponse_CellChunk_ResetRow + // *ReadRowsResponse_CellChunk_CommitRow + RowStatus isReadRowsResponse_CellChunk_RowStatus `protobuf_oneof:"row_status"` +} + +func (m *ReadRowsResponse_CellChunk) Reset() { *m = ReadRowsResponse_CellChunk{} } +func (m *ReadRowsResponse_CellChunk) String() string { return proto.CompactTextString(m) } +func (*ReadRowsResponse_CellChunk) ProtoMessage() {} +func (*ReadRowsResponse_CellChunk) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +type isReadRowsResponse_CellChunk_RowStatus interface { + isReadRowsResponse_CellChunk_RowStatus() +} + +type ReadRowsResponse_CellChunk_ResetRow struct { + ResetRow bool `protobuf:"varint,8,opt,name=reset_row,json=resetRow,oneof"` +} +type ReadRowsResponse_CellChunk_CommitRow struct { + CommitRow bool `protobuf:"varint,9,opt,name=commit_row,json=commitRow,oneof"` +} + +func (*ReadRowsResponse_CellChunk_ResetRow) isReadRowsResponse_CellChunk_RowStatus() {} +func (*ReadRowsResponse_CellChunk_CommitRow) isReadRowsResponse_CellChunk_RowStatus() {} + +func (m *ReadRowsResponse_CellChunk) GetRowStatus() isReadRowsResponse_CellChunk_RowStatus { + if m != nil { + return m.RowStatus + } + return nil +} + +func (m *ReadRowsResponse_CellChunk) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *ReadRowsResponse_CellChunk) GetFamilyName() *google_protobuf1.StringValue { + if m != nil { + return m.FamilyName + } + return nil +} + +func (m *ReadRowsResponse_CellChunk) GetQualifier() *google_protobuf1.BytesValue { + if m != nil { + return m.Qualifier + } + return nil +} + +func (m *ReadRowsResponse_CellChunk) GetTimestampMicros() int64 { + if m != nil { + return m.TimestampMicros + } + return 0 +} + +func (m *ReadRowsResponse_CellChunk) GetLabels() []string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *ReadRowsResponse_CellChunk) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +func (m *ReadRowsResponse_CellChunk) GetValueSize() int32 { + if m != nil { + return m.ValueSize + } + return 0 +} + +func (m *ReadRowsResponse_CellChunk) GetResetRow() bool { + if x, ok := m.GetRowStatus().(*ReadRowsResponse_CellChunk_ResetRow); ok { + return x.ResetRow + } + return false +} + +func (m *ReadRowsResponse_CellChunk) GetCommitRow() bool { + if x, ok := m.GetRowStatus().(*ReadRowsResponse_CellChunk_CommitRow); ok { + return x.CommitRow + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ReadRowsResponse_CellChunk) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ReadRowsResponse_CellChunk_OneofMarshaler, _ReadRowsResponse_CellChunk_OneofUnmarshaler, _ReadRowsResponse_CellChunk_OneofSizer, []interface{}{ + (*ReadRowsResponse_CellChunk_ResetRow)(nil), + (*ReadRowsResponse_CellChunk_CommitRow)(nil), + } +} + +func _ReadRowsResponse_CellChunk_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ReadRowsResponse_CellChunk) + // row_status + switch x := m.RowStatus.(type) { + case *ReadRowsResponse_CellChunk_ResetRow: + t := uint64(0) + if x.ResetRow { + t = 1 + } + b.EncodeVarint(8<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *ReadRowsResponse_CellChunk_CommitRow: + t := uint64(0) + if x.CommitRow { + t = 1 + } + b.EncodeVarint(9<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("ReadRowsResponse_CellChunk.RowStatus has unexpected type %T", x) + } + return nil +} + +func _ReadRowsResponse_CellChunk_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ReadRowsResponse_CellChunk) + switch tag { + case 8: // row_status.reset_row + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.RowStatus = &ReadRowsResponse_CellChunk_ResetRow{x != 0} + return true, err + case 9: // row_status.commit_row + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.RowStatus = &ReadRowsResponse_CellChunk_CommitRow{x != 0} + return true, err + default: + return false, nil + } +} + +func _ReadRowsResponse_CellChunk_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ReadRowsResponse_CellChunk) + // row_status + switch x := m.RowStatus.(type) { + case *ReadRowsResponse_CellChunk_ResetRow: + n += proto.SizeVarint(8<<3 | proto.WireVarint) + n += 1 + case *ReadRowsResponse_CellChunk_CommitRow: + n += proto.SizeVarint(9<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request message for Bigtable.SampleRowKeys. +type SampleRowKeysRequest struct { + // The unique name of the table from which to sample row keys. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` +} + +func (m *SampleRowKeysRequest) Reset() { *m = SampleRowKeysRequest{} } +func (m *SampleRowKeysRequest) String() string { return proto.CompactTextString(m) } +func (*SampleRowKeysRequest) ProtoMessage() {} +func (*SampleRowKeysRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *SampleRowKeysRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +// Response message for Bigtable.SampleRowKeys. +type SampleRowKeysResponse struct { + // Sorted streamed sequence of sample row keys in the table. The table might + // have contents before the first row key in the list and after the last one, + // but a key containing the empty string indicates "end of table" and will be + // the last response given, if present. + // Note that row keys in this list may not have ever been written to or read + // from, and users should therefore not make any assumptions about the row key + // structure that are specific to their use case. + RowKey []byte `protobuf:"bytes,1,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // Approximate total storage space used by all rows in the table which precede + // `row_key`. Buffering the contents of all rows between two subsequent + // samples would require space roughly equal to the difference in their + // `offset_bytes` fields. + OffsetBytes int64 `protobuf:"varint,2,opt,name=offset_bytes,json=offsetBytes" json:"offset_bytes,omitempty"` +} + +func (m *SampleRowKeysResponse) Reset() { *m = SampleRowKeysResponse{} } +func (m *SampleRowKeysResponse) String() string { return proto.CompactTextString(m) } +func (*SampleRowKeysResponse) ProtoMessage() {} +func (*SampleRowKeysResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *SampleRowKeysResponse) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *SampleRowKeysResponse) GetOffsetBytes() int64 { + if m != nil { + return m.OffsetBytes + } + return 0 +} + +// Request message for Bigtable.MutateRow. +type MutateRowRequest struct { + // The unique name of the table to which the mutation should be applied. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The key of the row to which the mutation should be applied. + RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // Changes to be atomically applied to the specified row. Entries are applied + // in order, meaning that earlier mutations can be masked by later ones. + // Must contain at least one entry and at most 100000. + Mutations []*Mutation `protobuf:"bytes,3,rep,name=mutations" json:"mutations,omitempty"` +} + +func (m *MutateRowRequest) Reset() { *m = MutateRowRequest{} } +func (m *MutateRowRequest) String() string { return proto.CompactTextString(m) } +func (*MutateRowRequest) ProtoMessage() {} +func (*MutateRowRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *MutateRowRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *MutateRowRequest) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *MutateRowRequest) GetMutations() []*Mutation { + if m != nil { + return m.Mutations + } + return nil +} + +// Response message for Bigtable.MutateRow. +type MutateRowResponse struct { +} + +func (m *MutateRowResponse) Reset() { *m = MutateRowResponse{} } +func (m *MutateRowResponse) String() string { return proto.CompactTextString(m) } +func (*MutateRowResponse) ProtoMessage() {} +func (*MutateRowResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +// Request message for BigtableService.MutateRows. +type MutateRowsRequest struct { + // The unique name of the table to which the mutations should be applied. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The row keys and corresponding mutations to be applied in bulk. + // Each entry is applied as an atomic mutation, but the entries may be + // applied in arbitrary order (even between entries for the same row). + // At least one entry must be specified, and in total the entries can + // contain at most 100000 mutations. + Entries []*MutateRowsRequest_Entry `protobuf:"bytes,2,rep,name=entries" json:"entries,omitempty"` +} + +func (m *MutateRowsRequest) Reset() { *m = MutateRowsRequest{} } +func (m *MutateRowsRequest) String() string { return proto.CompactTextString(m) } +func (*MutateRowsRequest) ProtoMessage() {} +func (*MutateRowsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *MutateRowsRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *MutateRowsRequest) GetEntries() []*MutateRowsRequest_Entry { + if m != nil { + return m.Entries + } + return nil +} + +type MutateRowsRequest_Entry struct { + // The key of the row to which the `mutations` should be applied. + RowKey []byte `protobuf:"bytes,1,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // Changes to be atomically applied to the specified row. Mutations are + // applied in order, meaning that earlier mutations can be masked by + // later ones. + // You must specify at least one mutation. + Mutations []*Mutation `protobuf:"bytes,2,rep,name=mutations" json:"mutations,omitempty"` +} + +func (m *MutateRowsRequest_Entry) Reset() { *m = MutateRowsRequest_Entry{} } +func (m *MutateRowsRequest_Entry) String() string { return proto.CompactTextString(m) } +func (*MutateRowsRequest_Entry) ProtoMessage() {} +func (*MutateRowsRequest_Entry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } + +func (m *MutateRowsRequest_Entry) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *MutateRowsRequest_Entry) GetMutations() []*Mutation { + if m != nil { + return m.Mutations + } + return nil +} + +// Response message for BigtableService.MutateRows. +type MutateRowsResponse struct { + // One or more results for Entries from the batch request. + Entries []*MutateRowsResponse_Entry `protobuf:"bytes,1,rep,name=entries" json:"entries,omitempty"` +} + +func (m *MutateRowsResponse) Reset() { *m = MutateRowsResponse{} } +func (m *MutateRowsResponse) String() string { return proto.CompactTextString(m) } +func (*MutateRowsResponse) ProtoMessage() {} +func (*MutateRowsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *MutateRowsResponse) GetEntries() []*MutateRowsResponse_Entry { + if m != nil { + return m.Entries + } + return nil +} + +type MutateRowsResponse_Entry struct { + // The index into the original request's `entries` list of the Entry + // for which a result is being reported. + Index int64 `protobuf:"varint,1,opt,name=index" json:"index,omitempty"` + // The result of the request Entry identified by `index`. + // Depending on how requests are batched during execution, it is possible + // for one Entry to fail due to an error with another Entry. In the event + // that this occurs, the same error will be reported for both entries. + Status *google_rpc.Status `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"` +} + +func (m *MutateRowsResponse_Entry) Reset() { *m = MutateRowsResponse_Entry{} } +func (m *MutateRowsResponse_Entry) String() string { return proto.CompactTextString(m) } +func (*MutateRowsResponse_Entry) ProtoMessage() {} +func (*MutateRowsResponse_Entry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +func (m *MutateRowsResponse_Entry) GetIndex() int64 { + if m != nil { + return m.Index + } + return 0 +} + +func (m *MutateRowsResponse_Entry) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +// Request message for Bigtable.CheckAndMutateRow. +type CheckAndMutateRowRequest struct { + // The unique name of the table to which the conditional mutation should be + // applied. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The key of the row to which the conditional mutation should be applied. + RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // The filter to be applied to the contents of the specified row. Depending + // on whether or not any results are yielded, either `true_mutations` or + // `false_mutations` will be executed. If unset, checks that the row contains + // any values at all. + PredicateFilter *RowFilter `protobuf:"bytes,6,opt,name=predicate_filter,json=predicateFilter" json:"predicate_filter,omitempty"` + // Changes to be atomically applied to the specified row if `predicate_filter` + // yields at least one cell when applied to `row_key`. Entries are applied in + // order, meaning that earlier mutations can be masked by later ones. + // Must contain at least one entry if `false_mutations` is empty, and at most + // 100000. + TrueMutations []*Mutation `protobuf:"bytes,4,rep,name=true_mutations,json=trueMutations" json:"true_mutations,omitempty"` + // Changes to be atomically applied to the specified row if `predicate_filter` + // does not yield any cells when applied to `row_key`. Entries are applied in + // order, meaning that earlier mutations can be masked by later ones. + // Must contain at least one entry if `true_mutations` is empty, and at most + // 100000. + FalseMutations []*Mutation `protobuf:"bytes,5,rep,name=false_mutations,json=falseMutations" json:"false_mutations,omitempty"` +} + +func (m *CheckAndMutateRowRequest) Reset() { *m = CheckAndMutateRowRequest{} } +func (m *CheckAndMutateRowRequest) String() string { return proto.CompactTextString(m) } +func (*CheckAndMutateRowRequest) ProtoMessage() {} +func (*CheckAndMutateRowRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *CheckAndMutateRowRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *CheckAndMutateRowRequest) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *CheckAndMutateRowRequest) GetPredicateFilter() *RowFilter { + if m != nil { + return m.PredicateFilter + } + return nil +} + +func (m *CheckAndMutateRowRequest) GetTrueMutations() []*Mutation { + if m != nil { + return m.TrueMutations + } + return nil +} + +func (m *CheckAndMutateRowRequest) GetFalseMutations() []*Mutation { + if m != nil { + return m.FalseMutations + } + return nil +} + +// Response message for Bigtable.CheckAndMutateRow. +type CheckAndMutateRowResponse struct { + // Whether or not the request's `predicate_filter` yielded any results for + // the specified row. + PredicateMatched bool `protobuf:"varint,1,opt,name=predicate_matched,json=predicateMatched" json:"predicate_matched,omitempty"` +} + +func (m *CheckAndMutateRowResponse) Reset() { *m = CheckAndMutateRowResponse{} } +func (m *CheckAndMutateRowResponse) String() string { return proto.CompactTextString(m) } +func (*CheckAndMutateRowResponse) ProtoMessage() {} +func (*CheckAndMutateRowResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *CheckAndMutateRowResponse) GetPredicateMatched() bool { + if m != nil { + return m.PredicateMatched + } + return false +} + +// Request message for Bigtable.ReadModifyWriteRow. +type ReadModifyWriteRowRequest struct { + // The unique name of the table to which the read/modify/write rules should be + // applied. + // Values are of the form + // `projects/<project>/instances/<instance>/tables/<table>`. + TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // The key of the row to which the read/modify/write rules should be applied. + RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` + // Rules specifying how the specified row's contents are to be transformed + // into writes. Entries are applied in order, meaning that earlier rules will + // affect the results of later ones. + Rules []*ReadModifyWriteRule `protobuf:"bytes,3,rep,name=rules" json:"rules,omitempty"` +} + +func (m *ReadModifyWriteRowRequest) Reset() { *m = ReadModifyWriteRowRequest{} } +func (m *ReadModifyWriteRowRequest) String() string { return proto.CompactTextString(m) } +func (*ReadModifyWriteRowRequest) ProtoMessage() {} +func (*ReadModifyWriteRowRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *ReadModifyWriteRowRequest) GetTableName() string { + if m != nil { + return m.TableName + } + return "" +} + +func (m *ReadModifyWriteRowRequest) GetRowKey() []byte { + if m != nil { + return m.RowKey + } + return nil +} + +func (m *ReadModifyWriteRowRequest) GetRules() []*ReadModifyWriteRule { + if m != nil { + return m.Rules + } + return nil +} + +// Response message for Bigtable.ReadModifyWriteRow. +type ReadModifyWriteRowResponse struct { + // A Row containing the new contents of all cells modified by the request. + Row *Row `protobuf:"bytes,1,opt,name=row" json:"row,omitempty"` +} + +func (m *ReadModifyWriteRowResponse) Reset() { *m = ReadModifyWriteRowResponse{} } +func (m *ReadModifyWriteRowResponse) String() string { return proto.CompactTextString(m) } +func (*ReadModifyWriteRowResponse) ProtoMessage() {} +func (*ReadModifyWriteRowResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ReadModifyWriteRowResponse) GetRow() *Row { + if m != nil { + return m.Row + } + return nil +} + +func init() { + proto.RegisterType((*ReadRowsRequest)(nil), "google.bigtable.v2.ReadRowsRequest") + proto.RegisterType((*ReadRowsResponse)(nil), "google.bigtable.v2.ReadRowsResponse") + proto.RegisterType((*ReadRowsResponse_CellChunk)(nil), "google.bigtable.v2.ReadRowsResponse.CellChunk") + proto.RegisterType((*SampleRowKeysRequest)(nil), "google.bigtable.v2.SampleRowKeysRequest") + proto.RegisterType((*SampleRowKeysResponse)(nil), "google.bigtable.v2.SampleRowKeysResponse") + proto.RegisterType((*MutateRowRequest)(nil), "google.bigtable.v2.MutateRowRequest") + proto.RegisterType((*MutateRowResponse)(nil), "google.bigtable.v2.MutateRowResponse") + proto.RegisterType((*MutateRowsRequest)(nil), "google.bigtable.v2.MutateRowsRequest") + proto.RegisterType((*MutateRowsRequest_Entry)(nil), "google.bigtable.v2.MutateRowsRequest.Entry") + proto.RegisterType((*MutateRowsResponse)(nil), "google.bigtable.v2.MutateRowsResponse") + proto.RegisterType((*MutateRowsResponse_Entry)(nil), "google.bigtable.v2.MutateRowsResponse.Entry") + proto.RegisterType((*CheckAndMutateRowRequest)(nil), "google.bigtable.v2.CheckAndMutateRowRequest") + proto.RegisterType((*CheckAndMutateRowResponse)(nil), "google.bigtable.v2.CheckAndMutateRowResponse") + proto.RegisterType((*ReadModifyWriteRowRequest)(nil), "google.bigtable.v2.ReadModifyWriteRowRequest") + proto.RegisterType((*ReadModifyWriteRowResponse)(nil), "google.bigtable.v2.ReadModifyWriteRowResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Bigtable service + +type BigtableClient interface { + // Streams back the contents of all requested rows, optionally + // applying the same Reader filter to each. Depending on their size, + // rows and cells may be broken up across multiple responses, but + // atomicity of each row will still be preserved. See the + // ReadRowsResponse documentation for details. + ReadRows(ctx context.Context, in *ReadRowsRequest, opts ...grpc.CallOption) (Bigtable_ReadRowsClient, error) + // Returns a sample of row keys in the table. The returned row keys will + // delimit contiguous sections of the table of approximately equal size, + // which can be used to break up the data for distributed tasks like + // mapreduces. + SampleRowKeys(ctx context.Context, in *SampleRowKeysRequest, opts ...grpc.CallOption) (Bigtable_SampleRowKeysClient, error) + // Mutates a row atomically. Cells already present in the row are left + // unchanged unless explicitly changed by `mutation`. + MutateRow(ctx context.Context, in *MutateRowRequest, opts ...grpc.CallOption) (*MutateRowResponse, error) + // Mutates multiple rows in a batch. Each individual row is mutated + // atomically as in MutateRow, but the entire batch is not executed + // atomically. + MutateRows(ctx context.Context, in *MutateRowsRequest, opts ...grpc.CallOption) (Bigtable_MutateRowsClient, error) + // Mutates a row atomically based on the output of a predicate Reader filter. + CheckAndMutateRow(ctx context.Context, in *CheckAndMutateRowRequest, opts ...grpc.CallOption) (*CheckAndMutateRowResponse, error) + // Modifies a row atomically. The method reads the latest existing timestamp + // and value from the specified columns and writes a new entry based on + // pre-defined read/modify/write rules. The new value for the timestamp is the + // greater of the existing timestamp or the current server time. The method + // returns the new contents of all modified cells. + ReadModifyWriteRow(ctx context.Context, in *ReadModifyWriteRowRequest, opts ...grpc.CallOption) (*ReadModifyWriteRowResponse, error) +} + +type bigtableClient struct { + cc *grpc.ClientConn +} + +func NewBigtableClient(cc *grpc.ClientConn) BigtableClient { + return &bigtableClient{cc} +} + +func (c *bigtableClient) ReadRows(ctx context.Context, in *ReadRowsRequest, opts ...grpc.CallOption) (Bigtable_ReadRowsClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Bigtable_serviceDesc.Streams[0], c.cc, "/google.bigtable.v2.Bigtable/ReadRows", opts...) + if err != nil { + return nil, err + } + x := &bigtableReadRowsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Bigtable_ReadRowsClient interface { + Recv() (*ReadRowsResponse, error) + grpc.ClientStream +} + +type bigtableReadRowsClient struct { + grpc.ClientStream +} + +func (x *bigtableReadRowsClient) Recv() (*ReadRowsResponse, error) { + m := new(ReadRowsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *bigtableClient) SampleRowKeys(ctx context.Context, in *SampleRowKeysRequest, opts ...grpc.CallOption) (Bigtable_SampleRowKeysClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Bigtable_serviceDesc.Streams[1], c.cc, "/google.bigtable.v2.Bigtable/SampleRowKeys", opts...) + if err != nil { + return nil, err + } + x := &bigtableSampleRowKeysClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Bigtable_SampleRowKeysClient interface { + Recv() (*SampleRowKeysResponse, error) + grpc.ClientStream +} + +type bigtableSampleRowKeysClient struct { + grpc.ClientStream +} + +func (x *bigtableSampleRowKeysClient) Recv() (*SampleRowKeysResponse, error) { + m := new(SampleRowKeysResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *bigtableClient) MutateRow(ctx context.Context, in *MutateRowRequest, opts ...grpc.CallOption) (*MutateRowResponse, error) { + out := new(MutateRowResponse) + err := grpc.Invoke(ctx, "/google.bigtable.v2.Bigtable/MutateRow", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableClient) MutateRows(ctx context.Context, in *MutateRowsRequest, opts ...grpc.CallOption) (Bigtable_MutateRowsClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Bigtable_serviceDesc.Streams[2], c.cc, "/google.bigtable.v2.Bigtable/MutateRows", opts...) + if err != nil { + return nil, err + } + x := &bigtableMutateRowsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Bigtable_MutateRowsClient interface { + Recv() (*MutateRowsResponse, error) + grpc.ClientStream +} + +type bigtableMutateRowsClient struct { + grpc.ClientStream +} + +func (x *bigtableMutateRowsClient) Recv() (*MutateRowsResponse, error) { + m := new(MutateRowsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *bigtableClient) CheckAndMutateRow(ctx context.Context, in *CheckAndMutateRowRequest, opts ...grpc.CallOption) (*CheckAndMutateRowResponse, error) { + out := new(CheckAndMutateRowResponse) + err := grpc.Invoke(ctx, "/google.bigtable.v2.Bigtable/CheckAndMutateRow", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableClient) ReadModifyWriteRow(ctx context.Context, in *ReadModifyWriteRowRequest, opts ...grpc.CallOption) (*ReadModifyWriteRowResponse, error) { + out := new(ReadModifyWriteRowResponse) + err := grpc.Invoke(ctx, "/google.bigtable.v2.Bigtable/ReadModifyWriteRow", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Bigtable service + +type BigtableServer interface { + // Streams back the contents of all requested rows, optionally + // applying the same Reader filter to each. Depending on their size, + // rows and cells may be broken up across multiple responses, but + // atomicity of each row will still be preserved. See the + // ReadRowsResponse documentation for details. + ReadRows(*ReadRowsRequest, Bigtable_ReadRowsServer) error + // Returns a sample of row keys in the table. The returned row keys will + // delimit contiguous sections of the table of approximately equal size, + // which can be used to break up the data for distributed tasks like + // mapreduces. + SampleRowKeys(*SampleRowKeysRequest, Bigtable_SampleRowKeysServer) error + // Mutates a row atomically. Cells already present in the row are left + // unchanged unless explicitly changed by `mutation`. + MutateRow(context.Context, *MutateRowRequest) (*MutateRowResponse, error) + // Mutates multiple rows in a batch. Each individual row is mutated + // atomically as in MutateRow, but the entire batch is not executed + // atomically. + MutateRows(*MutateRowsRequest, Bigtable_MutateRowsServer) error + // Mutates a row atomically based on the output of a predicate Reader filter. + CheckAndMutateRow(context.Context, *CheckAndMutateRowRequest) (*CheckAndMutateRowResponse, error) + // Modifies a row atomically. The method reads the latest existing timestamp + // and value from the specified columns and writes a new entry based on + // pre-defined read/modify/write rules. The new value for the timestamp is the + // greater of the existing timestamp or the current server time. The method + // returns the new contents of all modified cells. + ReadModifyWriteRow(context.Context, *ReadModifyWriteRowRequest) (*ReadModifyWriteRowResponse, error) +} + +func RegisterBigtableServer(s *grpc.Server, srv BigtableServer) { + s.RegisterService(&_Bigtable_serviceDesc, srv) +} + +func _Bigtable_ReadRows_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ReadRowsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(BigtableServer).ReadRows(m, &bigtableReadRowsServer{stream}) +} + +type Bigtable_ReadRowsServer interface { + Send(*ReadRowsResponse) error + grpc.ServerStream +} + +type bigtableReadRowsServer struct { + grpc.ServerStream +} + +func (x *bigtableReadRowsServer) Send(m *ReadRowsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Bigtable_SampleRowKeys_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SampleRowKeysRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(BigtableServer).SampleRowKeys(m, &bigtableSampleRowKeysServer{stream}) +} + +type Bigtable_SampleRowKeysServer interface { + Send(*SampleRowKeysResponse) error + grpc.ServerStream +} + +type bigtableSampleRowKeysServer struct { + grpc.ServerStream +} + +func (x *bigtableSampleRowKeysServer) Send(m *SampleRowKeysResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Bigtable_MutateRow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MutateRowRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableServer).MutateRow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.v2.Bigtable/MutateRow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableServer).MutateRow(ctx, req.(*MutateRowRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Bigtable_MutateRows_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(MutateRowsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(BigtableServer).MutateRows(m, &bigtableMutateRowsServer{stream}) +} + +type Bigtable_MutateRowsServer interface { + Send(*MutateRowsResponse) error + grpc.ServerStream +} + +type bigtableMutateRowsServer struct { + grpc.ServerStream +} + +func (x *bigtableMutateRowsServer) Send(m *MutateRowsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Bigtable_CheckAndMutateRow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckAndMutateRowRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableServer).CheckAndMutateRow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.v2.Bigtable/CheckAndMutateRow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableServer).CheckAndMutateRow(ctx, req.(*CheckAndMutateRowRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Bigtable_ReadModifyWriteRow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReadModifyWriteRowRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableServer).ReadModifyWriteRow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.v2.Bigtable/ReadModifyWriteRow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableServer).ReadModifyWriteRow(ctx, req.(*ReadModifyWriteRowRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Bigtable_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.bigtable.v2.Bigtable", + HandlerType: (*BigtableServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "MutateRow", + Handler: _Bigtable_MutateRow_Handler, + }, + { + MethodName: "CheckAndMutateRow", + Handler: _Bigtable_CheckAndMutateRow_Handler, + }, + { + MethodName: "ReadModifyWriteRow", + Handler: _Bigtable_ReadModifyWriteRow_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ReadRows", + Handler: _Bigtable_ReadRows_Handler, + ServerStreams: true, + }, + { + StreamName: "SampleRowKeys", + Handler: _Bigtable_SampleRowKeys_Handler, + ServerStreams: true, + }, + { + StreamName: "MutateRows", + Handler: _Bigtable_MutateRows_Handler, + ServerStreams: true, + }, + }, + Metadata: "google/bigtable/v2/bigtable.proto", +} + +func init() { proto.RegisterFile("google/bigtable/v2/bigtable.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1135 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0x67, 0xec, 0xda, 0xf1, 0xbe, 0x24, 0x4d, 0x32, 0x84, 0xc6, 0x35, 0x09, 0xb8, 0x4b, 0x0b, + 0x8e, 0x4b, 0xd7, 0x55, 0x50, 0x0f, 0x75, 0x95, 0x02, 0x0e, 0x49, 0x83, 0xc0, 0x55, 0x35, 0x96, + 0x40, 0x42, 0x48, 0xd6, 0x78, 0x3d, 0x76, 0x96, 0xec, 0xbf, 0xee, 0x8c, 0x63, 0x5c, 0xc4, 0x85, + 0x03, 0x1f, 0x00, 0xce, 0x88, 0x13, 0x82, 0x0b, 0x1c, 0xb9, 0x72, 0xe0, 0x23, 0x70, 0xe0, 0x0b, + 0xf4, 0x13, 0xf0, 0x09, 0xd0, 0xcc, 0xce, 0xda, 0x4e, 0x62, 0xb7, 0x9b, 0xaa, 0xb7, 0x9d, 0xf7, + 0xde, 0xef, 0xcd, 0xef, 0xfd, 0x1d, 0x1b, 0xae, 0xf5, 0x83, 0xa0, 0xef, 0xb2, 0x5a, 0xc7, 0xe9, + 0x0b, 0xda, 0x71, 0x59, 0xed, 0x64, 0x67, 0xfc, 0x6d, 0x85, 0x51, 0x20, 0x02, 0x8c, 0x63, 0x13, + 0x6b, 0x2c, 0x3e, 0xd9, 0x29, 0x6d, 0x6a, 0x18, 0x0d, 0x9d, 0x1a, 0xf5, 0xfd, 0x40, 0x50, 0xe1, + 0x04, 0x3e, 0x8f, 0x11, 0xa5, 0xad, 0x19, 0x4e, 0xbb, 0x54, 0x50, 0xad, 0x7e, 0x43, 0xab, 0xd5, + 0xa9, 0x33, 0xe8, 0xd5, 0x86, 0x11, 0x0d, 0x43, 0x16, 0x25, 0xf0, 0x0d, 0xad, 0x8f, 0x42, 0xbb, + 0xc6, 0x05, 0x15, 0x03, 0xad, 0x30, 0xff, 0x44, 0xb0, 0x42, 0x18, 0xed, 0x92, 0x60, 0xc8, 0x09, + 0x7b, 0x3c, 0x60, 0x5c, 0xe0, 0x2d, 0x00, 0x75, 0x47, 0xdb, 0xa7, 0x1e, 0x2b, 0xa2, 0x32, 0xaa, + 0x18, 0xc4, 0x50, 0x92, 0x87, 0xd4, 0x63, 0xd8, 0x82, 0x4b, 0x51, 0x30, 0xe4, 0xc5, 0x4c, 0x19, + 0x55, 0x16, 0x77, 0x4a, 0xd6, 0xf9, 0x58, 0x2c, 0x12, 0x0c, 0x5b, 0x4c, 0x10, 0x65, 0x87, 0xef, + 0x40, 0xbe, 0xe7, 0xb8, 0x82, 0x45, 0xc5, 0xac, 0x42, 0x6c, 0xcd, 0x41, 0x1c, 0x28, 0x23, 0xa2, + 0x8d, 0x25, 0x0b, 0x09, 0x6f, 0xbb, 0x8e, 0xe7, 0x88, 0xe2, 0xa5, 0x32, 0xaa, 0x64, 0x89, 0x21, + 0x25, 0x9f, 0x4a, 0x81, 0xf9, 0x5f, 0x16, 0x56, 0x27, 0xc4, 0x79, 0x18, 0xf8, 0x9c, 0xe1, 0x03, + 0xc8, 0xdb, 0x47, 0x03, 0xff, 0x98, 0x17, 0x51, 0x39, 0x5b, 0x59, 0xdc, 0xb1, 0x66, 0x5e, 0x75, + 0x06, 0x65, 0xed, 0x31, 0xd7, 0xdd, 0x93, 0x30, 0xa2, 0xd1, 0xb8, 0x06, 0xeb, 0x2e, 0xe5, 0xa2, + 0xcd, 0x6d, 0xea, 0xfb, 0xac, 0xdb, 0x8e, 0x82, 0x61, 0xfb, 0x98, 0x8d, 0x54, 0xc8, 0x4b, 0x64, + 0x4d, 0xea, 0x5a, 0xb1, 0x8a, 0x04, 0xc3, 0x4f, 0xd8, 0xa8, 0xf4, 0x34, 0x03, 0xc6, 0xd8, 0x0d, + 0xde, 0x80, 0x85, 0x04, 0x81, 0x14, 0x22, 0x1f, 0x29, 0x33, 0xbc, 0x0b, 0x8b, 0x3d, 0xea, 0x39, + 0xee, 0x28, 0x4e, 0x6d, 0x9c, 0xc1, 0xcd, 0x84, 0x64, 0x52, 0x3c, 0xab, 0x25, 0x22, 0xc7, 0xef, + 0x7f, 0x46, 0xdd, 0x01, 0x23, 0x10, 0x03, 0x54, 0xe6, 0xef, 0x82, 0xf1, 0x78, 0x40, 0x5d, 0xa7, + 0xe7, 0x8c, 0x93, 0xf9, 0xfa, 0x39, 0x70, 0x63, 0x24, 0x18, 0x8f, 0xb1, 0x13, 0x6b, 0xbc, 0x0d, + 0xab, 0xc2, 0xf1, 0x18, 0x17, 0xd4, 0x0b, 0xdb, 0x9e, 0x63, 0x47, 0x01, 0xd7, 0x39, 0x5d, 0x19, + 0xcb, 0x9b, 0x4a, 0x8c, 0xaf, 0x40, 0xde, 0xa5, 0x1d, 0xe6, 0xf2, 0x62, 0xae, 0x9c, 0xad, 0x18, + 0x44, 0x9f, 0xf0, 0x3a, 0xe4, 0x4e, 0xa4, 0xdb, 0x62, 0x5e, 0xc5, 0x14, 0x1f, 0x64, 0x99, 0xd4, + 0x47, 0x9b, 0x3b, 0x4f, 0x58, 0x71, 0xa1, 0x8c, 0x2a, 0x39, 0x62, 0x28, 0x49, 0xcb, 0x79, 0x22, + 0xd5, 0x46, 0xc4, 0x38, 0x13, 0x32, 0x85, 0xc5, 0x42, 0x19, 0x55, 0x0a, 0x87, 0xaf, 0x90, 0x82, + 0x12, 0x91, 0x60, 0x88, 0xdf, 0x04, 0xb0, 0x03, 0xcf, 0x73, 0x62, 0xbd, 0xa1, 0xf5, 0x46, 0x2c, + 0x23, 0xc1, 0xb0, 0xb1, 0xa4, 0xba, 0xa0, 0x1d, 0xf7, 0xac, 0x79, 0x07, 0xd6, 0x5b, 0xd4, 0x0b, + 0x5d, 0x16, 0xa7, 0x3d, 0x65, 0xc7, 0x9a, 0x2d, 0x78, 0xed, 0x0c, 0x4c, 0xf7, 0xcb, 0xdc, 0x42, + 0x5d, 0x83, 0xa5, 0xa0, 0xd7, 0x93, 0xbc, 0x3b, 0x32, 0x9d, 0xaa, 0x52, 0x59, 0xb2, 0x18, 0xcb, + 0x54, 0x86, 0xcd, 0xef, 0x11, 0xac, 0x36, 0x07, 0x82, 0x0a, 0xe9, 0x35, 0xe5, 0xe8, 0x4c, 0xdd, + 0x97, 0x39, 0x75, 0x5f, 0x1d, 0x0c, 0x6f, 0xa0, 0x27, 0xbe, 0x98, 0x55, 0xbd, 0xbb, 0x39, 0xab, + 0x77, 0x9b, 0xda, 0x88, 0x4c, 0xcc, 0xcd, 0x57, 0x61, 0x6d, 0x8a, 0x47, 0x1c, 0x99, 0xf9, 0x2f, + 0x9a, 0x92, 0xa6, 0x9d, 0xec, 0x7d, 0x58, 0x60, 0xbe, 0x88, 0x1c, 0x15, 0xb0, 0xe4, 0x70, 0x73, + 0x2e, 0x87, 0x69, 0xb7, 0xd6, 0xbe, 0x2f, 0xa2, 0x11, 0x49, 0xb0, 0xa5, 0x2f, 0x21, 0xa7, 0x24, + 0xf3, 0xd3, 0x7b, 0x2a, 0xdc, 0xcc, 0xc5, 0xc2, 0xfd, 0x15, 0x01, 0x9e, 0xa6, 0x30, 0x1e, 0xfd, + 0x31, 0xf7, 0x78, 0xf6, 0xdf, 0x7d, 0x1e, 0x77, 0x3d, 0xfd, 0x67, 0xc8, 0x7f, 0x9c, 0x90, 0x5f, + 0x87, 0x9c, 0xe3, 0x77, 0xd9, 0xd7, 0x8a, 0x7a, 0x96, 0xc4, 0x07, 0x5c, 0x85, 0x7c, 0xdc, 0x8b, + 0x7a, 0x78, 0x71, 0x72, 0x4b, 0x14, 0xda, 0x56, 0x4b, 0x69, 0x88, 0xb6, 0x30, 0x7f, 0xcb, 0x40, + 0x71, 0xef, 0x88, 0xd9, 0xc7, 0x1f, 0xfa, 0xdd, 0x97, 0xd6, 0x29, 0x87, 0xb0, 0x1a, 0x46, 0xac, + 0xeb, 0xd8, 0x54, 0xb0, 0xb6, 0xde, 0xab, 0xf9, 0x34, 0x7b, 0x75, 0x65, 0x0c, 0x8b, 0x05, 0x78, + 0x0f, 0x2e, 0x8b, 0x68, 0xc0, 0xda, 0x93, 0x4a, 0x5c, 0x4a, 0x51, 0x89, 0x65, 0x89, 0x49, 0x4e, + 0x1c, 0xef, 0xc3, 0x4a, 0x8f, 0xba, 0x7c, 0xda, 0x4b, 0x2e, 0x85, 0x97, 0xcb, 0x0a, 0x34, 0x76, + 0x63, 0x1e, 0xc2, 0xd5, 0x19, 0x99, 0xd2, 0xa5, 0xbd, 0x09, 0x6b, 0x93, 0x90, 0x3d, 0x2a, 0xec, + 0x23, 0xd6, 0x55, 0x19, 0x2b, 0x90, 0x49, 0x2e, 0x9a, 0xb1, 0xdc, 0xfc, 0x01, 0xc1, 0x55, 0xb9, + 0xe1, 0x9b, 0x41, 0xd7, 0xe9, 0x8d, 0x3e, 0x8f, 0x9c, 0x97, 0x92, 0xf5, 0x5d, 0xc8, 0x45, 0x03, + 0x97, 0x25, 0xb3, 0xf9, 0xce, 0xbc, 0x77, 0x65, 0xfa, 0xd6, 0x81, 0xcb, 0x48, 0x8c, 0x32, 0x1f, + 0x40, 0x69, 0x16, 0x27, 0x1d, 0xdf, 0x36, 0x64, 0xe5, 0xf6, 0x43, 0xaa, 0x8a, 0x1b, 0x73, 0xaa, + 0x48, 0xa4, 0xcd, 0xce, 0xef, 0x05, 0x28, 0x34, 0xb4, 0x02, 0xff, 0x84, 0xa0, 0x90, 0x3c, 0x66, + 0xf8, 0xad, 0x67, 0x3f, 0x75, 0x2a, 0xfc, 0xd2, 0xf5, 0x34, 0xef, 0xa1, 0xf9, 0xd1, 0x77, 0xff, + 0x3c, 0xfd, 0x31, 0x73, 0xdf, 0xbc, 0x2b, 0x7f, 0x64, 0x7c, 0x33, 0xc9, 0xd7, 0x6e, 0x18, 0x05, + 0x5f, 0x31, 0x5b, 0xf0, 0x5a, 0xb5, 0xe6, 0xf8, 0x5c, 0x50, 0xdf, 0x66, 0xf2, 0x5b, 0x59, 0xf0, + 0x5a, 0xf5, 0xdb, 0x7a, 0xa4, 0x5d, 0xd5, 0x51, 0xf5, 0x36, 0xc2, 0x7f, 0x20, 0x58, 0x3e, 0xb5, + 0x77, 0x71, 0x65, 0xd6, 0xfd, 0xb3, 0x36, 0x7a, 0x69, 0x3b, 0x85, 0xa5, 0xa6, 0x7b, 0xa0, 0xe8, + 0x7e, 0x80, 0xef, 0x5f, 0x98, 0x2e, 0x9f, 0xf6, 0x77, 0x1b, 0xe1, 0x9f, 0x11, 0x18, 0xe3, 0xf6, + 0xc3, 0xd7, 0x9f, 0xb9, 0x40, 0x12, 0xa2, 0x37, 0x9e, 0x63, 0xa5, 0x49, 0xee, 0x2b, 0x92, 0xef, + 0x9b, 0xf5, 0x0b, 0x93, 0xf4, 0x12, 0x5f, 0x75, 0x54, 0xc5, 0xbf, 0x20, 0x80, 0xc9, 0x0e, 0xc3, + 0x37, 0x52, 0xed, 0xe7, 0xd2, 0xdb, 0xe9, 0x56, 0x61, 0x92, 0x49, 0xf3, 0xde, 0x8b, 0x93, 0xd4, + 0xa5, 0xff, 0x0b, 0xc1, 0xda, 0xb9, 0x81, 0xc6, 0x33, 0x57, 0xf2, 0xbc, 0x0d, 0x59, 0xba, 0x95, + 0xd2, 0x5a, 0x93, 0x6f, 0x2a, 0xf2, 0x0f, 0xcc, 0xc6, 0x85, 0xc9, 0xdb, 0x67, 0x7d, 0xca, 0x4c, + 0xff, 0x8d, 0x00, 0x9f, 0x9f, 0x59, 0x7c, 0x2b, 0xcd, 0xe4, 0x4f, 0x62, 0xb0, 0xd2, 0x9a, 0xeb, + 0x20, 0x1e, 0xaa, 0x20, 0x0e, 0xcd, 0xbd, 0x17, 0x1a, 0xbd, 0xd3, 0x4e, 0xeb, 0xa8, 0xda, 0x60, + 0x70, 0xc5, 0x0e, 0xbc, 0x19, 0x24, 0x1a, 0xcb, 0xc9, 0x1a, 0x79, 0x24, 0x7f, 0x38, 0x3e, 0x42, + 0x5f, 0xd4, 0xb5, 0x51, 0x3f, 0x70, 0xa9, 0xdf, 0xb7, 0x82, 0xa8, 0x5f, 0xeb, 0x33, 0x5f, 0xfd, + 0xac, 0xac, 0xc5, 0x2a, 0x1a, 0x3a, 0x7c, 0xfa, 0x0f, 0xc8, 0xbd, 0xe4, 0xbb, 0x93, 0x57, 0x66, + 0xef, 0xfd, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x38, 0x8d, 0xf4, 0x91, 0xfb, 0x0c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v2/data.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v2/data.pb.go new file mode 100644 index 0000000..2a57566 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v2/data.pb.go @@ -0,0 +1,2118 @@ +// Code generated by protoc-gen-go. +// source: google/bigtable/v2/data.proto +// DO NOT EDIT! + +package bigtable + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Specifies the complete (requested) contents of a single row of a table. +// Rows which exceed 256MiB in size cannot be read in full. +type Row struct { + // The unique key which identifies this row within its table. This is the same + // key that's used to identify the row in, for example, a MutateRowRequest. + // May contain any non-empty byte string up to 4KiB in length. + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // May be empty, but only if the entire row is empty. + // The mutual ordering of column families is not specified. + Families []*Family `protobuf:"bytes,2,rep,name=families" json:"families,omitempty"` +} + +func (m *Row) Reset() { *m = Row{} } +func (m *Row) String() string { return proto.CompactTextString(m) } +func (*Row) ProtoMessage() {} +func (*Row) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Row) GetKey() []byte { + if m != nil { + return m.Key + } + return nil +} + +func (m *Row) GetFamilies() []*Family { + if m != nil { + return m.Families + } + return nil +} + +// Specifies (some of) the contents of a single row/column family intersection +// of a table. +type Family struct { + // The unique key which identifies this family within its row. This is the + // same key that's used to identify the family in, for example, a RowFilter + // which sets its "family_name_regex_filter" field. + // Must match `[-_.a-zA-Z0-9]+`, except that AggregatingRowProcessors may + // produce cells in a sentinel family with an empty name. + // Must be no greater than 64 characters in length. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Must not be empty. Sorted in order of increasing "qualifier". + Columns []*Column `protobuf:"bytes,2,rep,name=columns" json:"columns,omitempty"` +} + +func (m *Family) Reset() { *m = Family{} } +func (m *Family) String() string { return proto.CompactTextString(m) } +func (*Family) ProtoMessage() {} +func (*Family) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *Family) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Family) GetColumns() []*Column { + if m != nil { + return m.Columns + } + return nil +} + +// Specifies (some of) the contents of a single row/column intersection of a +// table. +type Column struct { + // The unique key which identifies this column within its family. This is the + // same key that's used to identify the column in, for example, a RowFilter + // which sets its `column_qualifier_regex_filter` field. + // May contain any byte string, including the empty string, up to 16kiB in + // length. + Qualifier []byte `protobuf:"bytes,1,opt,name=qualifier,proto3" json:"qualifier,omitempty"` + // Must not be empty. Sorted in order of decreasing "timestamp_micros". + Cells []*Cell `protobuf:"bytes,2,rep,name=cells" json:"cells,omitempty"` +} + +func (m *Column) Reset() { *m = Column{} } +func (m *Column) String() string { return proto.CompactTextString(m) } +func (*Column) ProtoMessage() {} +func (*Column) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *Column) GetQualifier() []byte { + if m != nil { + return m.Qualifier + } + return nil +} + +func (m *Column) GetCells() []*Cell { + if m != nil { + return m.Cells + } + return nil +} + +// Specifies (some of) the contents of a single row/column/timestamp of a table. +type Cell struct { + // The cell's stored timestamp, which also uniquely identifies it within + // its column. + // Values are always expressed in microseconds, but individual tables may set + // a coarser granularity to further restrict the allowed values. For + // example, a table which specifies millisecond granularity will only allow + // values of `timestamp_micros` which are multiples of 1000. + TimestampMicros int64 `protobuf:"varint,1,opt,name=timestamp_micros,json=timestampMicros" json:"timestamp_micros,omitempty"` + // The value stored in the cell. + // May contain any byte string, including the empty string, up to 100MiB in + // length. + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // Labels applied to the cell by a [RowFilter][google.bigtable.v2.RowFilter]. + Labels []string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty"` +} + +func (m *Cell) Reset() { *m = Cell{} } +func (m *Cell) String() string { return proto.CompactTextString(m) } +func (*Cell) ProtoMessage() {} +func (*Cell) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *Cell) GetTimestampMicros() int64 { + if m != nil { + return m.TimestampMicros + } + return 0 +} + +func (m *Cell) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +func (m *Cell) GetLabels() []string { + if m != nil { + return m.Labels + } + return nil +} + +// Specifies a contiguous range of rows. +type RowRange struct { + // The row key at which to start the range. + // If neither field is set, interpreted as the empty string, inclusive. + // + // Types that are valid to be assigned to StartKey: + // *RowRange_StartKeyClosed + // *RowRange_StartKeyOpen + StartKey isRowRange_StartKey `protobuf_oneof:"start_key"` + // The row key at which to end the range. + // If neither field is set, interpreted as the infinite row key, exclusive. + // + // Types that are valid to be assigned to EndKey: + // *RowRange_EndKeyOpen + // *RowRange_EndKeyClosed + EndKey isRowRange_EndKey `protobuf_oneof:"end_key"` +} + +func (m *RowRange) Reset() { *m = RowRange{} } +func (m *RowRange) String() string { return proto.CompactTextString(m) } +func (*RowRange) ProtoMessage() {} +func (*RowRange) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +type isRowRange_StartKey interface { + isRowRange_StartKey() +} +type isRowRange_EndKey interface { + isRowRange_EndKey() +} + +type RowRange_StartKeyClosed struct { + StartKeyClosed []byte `protobuf:"bytes,1,opt,name=start_key_closed,json=startKeyClosed,proto3,oneof"` +} +type RowRange_StartKeyOpen struct { + StartKeyOpen []byte `protobuf:"bytes,2,opt,name=start_key_open,json=startKeyOpen,proto3,oneof"` +} +type RowRange_EndKeyOpen struct { + EndKeyOpen []byte `protobuf:"bytes,3,opt,name=end_key_open,json=endKeyOpen,proto3,oneof"` +} +type RowRange_EndKeyClosed struct { + EndKeyClosed []byte `protobuf:"bytes,4,opt,name=end_key_closed,json=endKeyClosed,proto3,oneof"` +} + +func (*RowRange_StartKeyClosed) isRowRange_StartKey() {} +func (*RowRange_StartKeyOpen) isRowRange_StartKey() {} +func (*RowRange_EndKeyOpen) isRowRange_EndKey() {} +func (*RowRange_EndKeyClosed) isRowRange_EndKey() {} + +func (m *RowRange) GetStartKey() isRowRange_StartKey { + if m != nil { + return m.StartKey + } + return nil +} +func (m *RowRange) GetEndKey() isRowRange_EndKey { + if m != nil { + return m.EndKey + } + return nil +} + +func (m *RowRange) GetStartKeyClosed() []byte { + if x, ok := m.GetStartKey().(*RowRange_StartKeyClosed); ok { + return x.StartKeyClosed + } + return nil +} + +func (m *RowRange) GetStartKeyOpen() []byte { + if x, ok := m.GetStartKey().(*RowRange_StartKeyOpen); ok { + return x.StartKeyOpen + } + return nil +} + +func (m *RowRange) GetEndKeyOpen() []byte { + if x, ok := m.GetEndKey().(*RowRange_EndKeyOpen); ok { + return x.EndKeyOpen + } + return nil +} + +func (m *RowRange) GetEndKeyClosed() []byte { + if x, ok := m.GetEndKey().(*RowRange_EndKeyClosed); ok { + return x.EndKeyClosed + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RowRange) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RowRange_OneofMarshaler, _RowRange_OneofUnmarshaler, _RowRange_OneofSizer, []interface{}{ + (*RowRange_StartKeyClosed)(nil), + (*RowRange_StartKeyOpen)(nil), + (*RowRange_EndKeyOpen)(nil), + (*RowRange_EndKeyClosed)(nil), + } +} + +func _RowRange_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RowRange) + // start_key + switch x := m.StartKey.(type) { + case *RowRange_StartKeyClosed: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartKeyClosed) + case *RowRange_StartKeyOpen: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartKeyOpen) + case nil: + default: + return fmt.Errorf("RowRange.StartKey has unexpected type %T", x) + } + // end_key + switch x := m.EndKey.(type) { + case *RowRange_EndKeyOpen: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndKeyOpen) + case *RowRange_EndKeyClosed: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndKeyClosed) + case nil: + default: + return fmt.Errorf("RowRange.EndKey has unexpected type %T", x) + } + return nil +} + +func _RowRange_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RowRange) + switch tag { + case 1: // start_key.start_key_closed + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartKey = &RowRange_StartKeyClosed{x} + return true, err + case 2: // start_key.start_key_open + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartKey = &RowRange_StartKeyOpen{x} + return true, err + case 3: // end_key.end_key_open + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndKey = &RowRange_EndKeyOpen{x} + return true, err + case 4: // end_key.end_key_closed + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndKey = &RowRange_EndKeyClosed{x} + return true, err + default: + return false, nil + } +} + +func _RowRange_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RowRange) + // start_key + switch x := m.StartKey.(type) { + case *RowRange_StartKeyClosed: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartKeyClosed))) + n += len(x.StartKeyClosed) + case *RowRange_StartKeyOpen: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartKeyOpen))) + n += len(x.StartKeyOpen) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // end_key + switch x := m.EndKey.(type) { + case *RowRange_EndKeyOpen: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndKeyOpen))) + n += len(x.EndKeyOpen) + case *RowRange_EndKeyClosed: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndKeyClosed))) + n += len(x.EndKeyClosed) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Specifies a non-contiguous set of rows. +type RowSet struct { + // Single rows included in the set. + RowKeys [][]byte `protobuf:"bytes,1,rep,name=row_keys,json=rowKeys,proto3" json:"row_keys,omitempty"` + // Contiguous row ranges included in the set. + RowRanges []*RowRange `protobuf:"bytes,2,rep,name=row_ranges,json=rowRanges" json:"row_ranges,omitempty"` +} + +func (m *RowSet) Reset() { *m = RowSet{} } +func (m *RowSet) String() string { return proto.CompactTextString(m) } +func (*RowSet) ProtoMessage() {} +func (*RowSet) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *RowSet) GetRowKeys() [][]byte { + if m != nil { + return m.RowKeys + } + return nil +} + +func (m *RowSet) GetRowRanges() []*RowRange { + if m != nil { + return m.RowRanges + } + return nil +} + +// Specifies a contiguous range of columns within a single column family. +// The range spans from <column_family>:<start_qualifier> to +// <column_family>:<end_qualifier>, where both bounds can be either +// inclusive or exclusive. +type ColumnRange struct { + // The name of the column family within which this range falls. + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The column qualifier at which to start the range (within `column_family`). + // If neither field is set, interpreted as the empty string, inclusive. + // + // Types that are valid to be assigned to StartQualifier: + // *ColumnRange_StartQualifierClosed + // *ColumnRange_StartQualifierOpen + StartQualifier isColumnRange_StartQualifier `protobuf_oneof:"start_qualifier"` + // The column qualifier at which to end the range (within `column_family`). + // If neither field is set, interpreted as the infinite string, exclusive. + // + // Types that are valid to be assigned to EndQualifier: + // *ColumnRange_EndQualifierClosed + // *ColumnRange_EndQualifierOpen + EndQualifier isColumnRange_EndQualifier `protobuf_oneof:"end_qualifier"` +} + +func (m *ColumnRange) Reset() { *m = ColumnRange{} } +func (m *ColumnRange) String() string { return proto.CompactTextString(m) } +func (*ColumnRange) ProtoMessage() {} +func (*ColumnRange) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +type isColumnRange_StartQualifier interface { + isColumnRange_StartQualifier() +} +type isColumnRange_EndQualifier interface { + isColumnRange_EndQualifier() +} + +type ColumnRange_StartQualifierClosed struct { + StartQualifierClosed []byte `protobuf:"bytes,2,opt,name=start_qualifier_closed,json=startQualifierClosed,proto3,oneof"` +} +type ColumnRange_StartQualifierOpen struct { + StartQualifierOpen []byte `protobuf:"bytes,3,opt,name=start_qualifier_open,json=startQualifierOpen,proto3,oneof"` +} +type ColumnRange_EndQualifierClosed struct { + EndQualifierClosed []byte `protobuf:"bytes,4,opt,name=end_qualifier_closed,json=endQualifierClosed,proto3,oneof"` +} +type ColumnRange_EndQualifierOpen struct { + EndQualifierOpen []byte `protobuf:"bytes,5,opt,name=end_qualifier_open,json=endQualifierOpen,proto3,oneof"` +} + +func (*ColumnRange_StartQualifierClosed) isColumnRange_StartQualifier() {} +func (*ColumnRange_StartQualifierOpen) isColumnRange_StartQualifier() {} +func (*ColumnRange_EndQualifierClosed) isColumnRange_EndQualifier() {} +func (*ColumnRange_EndQualifierOpen) isColumnRange_EndQualifier() {} + +func (m *ColumnRange) GetStartQualifier() isColumnRange_StartQualifier { + if m != nil { + return m.StartQualifier + } + return nil +} +func (m *ColumnRange) GetEndQualifier() isColumnRange_EndQualifier { + if m != nil { + return m.EndQualifier + } + return nil +} + +func (m *ColumnRange) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +func (m *ColumnRange) GetStartQualifierClosed() []byte { + if x, ok := m.GetStartQualifier().(*ColumnRange_StartQualifierClosed); ok { + return x.StartQualifierClosed + } + return nil +} + +func (m *ColumnRange) GetStartQualifierOpen() []byte { + if x, ok := m.GetStartQualifier().(*ColumnRange_StartQualifierOpen); ok { + return x.StartQualifierOpen + } + return nil +} + +func (m *ColumnRange) GetEndQualifierClosed() []byte { + if x, ok := m.GetEndQualifier().(*ColumnRange_EndQualifierClosed); ok { + return x.EndQualifierClosed + } + return nil +} + +func (m *ColumnRange) GetEndQualifierOpen() []byte { + if x, ok := m.GetEndQualifier().(*ColumnRange_EndQualifierOpen); ok { + return x.EndQualifierOpen + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ColumnRange) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ColumnRange_OneofMarshaler, _ColumnRange_OneofUnmarshaler, _ColumnRange_OneofSizer, []interface{}{ + (*ColumnRange_StartQualifierClosed)(nil), + (*ColumnRange_StartQualifierOpen)(nil), + (*ColumnRange_EndQualifierClosed)(nil), + (*ColumnRange_EndQualifierOpen)(nil), + } +} + +func _ColumnRange_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ColumnRange) + // start_qualifier + switch x := m.StartQualifier.(type) { + case *ColumnRange_StartQualifierClosed: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartQualifierClosed) + case *ColumnRange_StartQualifierOpen: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartQualifierOpen) + case nil: + default: + return fmt.Errorf("ColumnRange.StartQualifier has unexpected type %T", x) + } + // end_qualifier + switch x := m.EndQualifier.(type) { + case *ColumnRange_EndQualifierClosed: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndQualifierClosed) + case *ColumnRange_EndQualifierOpen: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndQualifierOpen) + case nil: + default: + return fmt.Errorf("ColumnRange.EndQualifier has unexpected type %T", x) + } + return nil +} + +func _ColumnRange_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ColumnRange) + switch tag { + case 2: // start_qualifier.start_qualifier_closed + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartQualifier = &ColumnRange_StartQualifierClosed{x} + return true, err + case 3: // start_qualifier.start_qualifier_open + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartQualifier = &ColumnRange_StartQualifierOpen{x} + return true, err + case 4: // end_qualifier.end_qualifier_closed + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndQualifier = &ColumnRange_EndQualifierClosed{x} + return true, err + case 5: // end_qualifier.end_qualifier_open + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndQualifier = &ColumnRange_EndQualifierOpen{x} + return true, err + default: + return false, nil + } +} + +func _ColumnRange_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ColumnRange) + // start_qualifier + switch x := m.StartQualifier.(type) { + case *ColumnRange_StartQualifierClosed: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartQualifierClosed))) + n += len(x.StartQualifierClosed) + case *ColumnRange_StartQualifierOpen: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartQualifierOpen))) + n += len(x.StartQualifierOpen) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // end_qualifier + switch x := m.EndQualifier.(type) { + case *ColumnRange_EndQualifierClosed: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndQualifierClosed))) + n += len(x.EndQualifierClosed) + case *ColumnRange_EndQualifierOpen: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndQualifierOpen))) + n += len(x.EndQualifierOpen) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Specified a contiguous range of microsecond timestamps. +type TimestampRange struct { + // Inclusive lower bound. If left empty, interpreted as 0. + StartTimestampMicros int64 `protobuf:"varint,1,opt,name=start_timestamp_micros,json=startTimestampMicros" json:"start_timestamp_micros,omitempty"` + // Exclusive upper bound. If left empty, interpreted as infinity. + EndTimestampMicros int64 `protobuf:"varint,2,opt,name=end_timestamp_micros,json=endTimestampMicros" json:"end_timestamp_micros,omitempty"` +} + +func (m *TimestampRange) Reset() { *m = TimestampRange{} } +func (m *TimestampRange) String() string { return proto.CompactTextString(m) } +func (*TimestampRange) ProtoMessage() {} +func (*TimestampRange) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *TimestampRange) GetStartTimestampMicros() int64 { + if m != nil { + return m.StartTimestampMicros + } + return 0 +} + +func (m *TimestampRange) GetEndTimestampMicros() int64 { + if m != nil { + return m.EndTimestampMicros + } + return 0 +} + +// Specifies a contiguous range of raw byte values. +type ValueRange struct { + // The value at which to start the range. + // If neither field is set, interpreted as the empty string, inclusive. + // + // Types that are valid to be assigned to StartValue: + // *ValueRange_StartValueClosed + // *ValueRange_StartValueOpen + StartValue isValueRange_StartValue `protobuf_oneof:"start_value"` + // The value at which to end the range. + // If neither field is set, interpreted as the infinite string, exclusive. + // + // Types that are valid to be assigned to EndValue: + // *ValueRange_EndValueClosed + // *ValueRange_EndValueOpen + EndValue isValueRange_EndValue `protobuf_oneof:"end_value"` +} + +func (m *ValueRange) Reset() { *m = ValueRange{} } +func (m *ValueRange) String() string { return proto.CompactTextString(m) } +func (*ValueRange) ProtoMessage() {} +func (*ValueRange) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +type isValueRange_StartValue interface { + isValueRange_StartValue() +} +type isValueRange_EndValue interface { + isValueRange_EndValue() +} + +type ValueRange_StartValueClosed struct { + StartValueClosed []byte `protobuf:"bytes,1,opt,name=start_value_closed,json=startValueClosed,proto3,oneof"` +} +type ValueRange_StartValueOpen struct { + StartValueOpen []byte `protobuf:"bytes,2,opt,name=start_value_open,json=startValueOpen,proto3,oneof"` +} +type ValueRange_EndValueClosed struct { + EndValueClosed []byte `protobuf:"bytes,3,opt,name=end_value_closed,json=endValueClosed,proto3,oneof"` +} +type ValueRange_EndValueOpen struct { + EndValueOpen []byte `protobuf:"bytes,4,opt,name=end_value_open,json=endValueOpen,proto3,oneof"` +} + +func (*ValueRange_StartValueClosed) isValueRange_StartValue() {} +func (*ValueRange_StartValueOpen) isValueRange_StartValue() {} +func (*ValueRange_EndValueClosed) isValueRange_EndValue() {} +func (*ValueRange_EndValueOpen) isValueRange_EndValue() {} + +func (m *ValueRange) GetStartValue() isValueRange_StartValue { + if m != nil { + return m.StartValue + } + return nil +} +func (m *ValueRange) GetEndValue() isValueRange_EndValue { + if m != nil { + return m.EndValue + } + return nil +} + +func (m *ValueRange) GetStartValueClosed() []byte { + if x, ok := m.GetStartValue().(*ValueRange_StartValueClosed); ok { + return x.StartValueClosed + } + return nil +} + +func (m *ValueRange) GetStartValueOpen() []byte { + if x, ok := m.GetStartValue().(*ValueRange_StartValueOpen); ok { + return x.StartValueOpen + } + return nil +} + +func (m *ValueRange) GetEndValueClosed() []byte { + if x, ok := m.GetEndValue().(*ValueRange_EndValueClosed); ok { + return x.EndValueClosed + } + return nil +} + +func (m *ValueRange) GetEndValueOpen() []byte { + if x, ok := m.GetEndValue().(*ValueRange_EndValueOpen); ok { + return x.EndValueOpen + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ValueRange) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ValueRange_OneofMarshaler, _ValueRange_OneofUnmarshaler, _ValueRange_OneofSizer, []interface{}{ + (*ValueRange_StartValueClosed)(nil), + (*ValueRange_StartValueOpen)(nil), + (*ValueRange_EndValueClosed)(nil), + (*ValueRange_EndValueOpen)(nil), + } +} + +func _ValueRange_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ValueRange) + // start_value + switch x := m.StartValue.(type) { + case *ValueRange_StartValueClosed: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartValueClosed) + case *ValueRange_StartValueOpen: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.StartValueOpen) + case nil: + default: + return fmt.Errorf("ValueRange.StartValue has unexpected type %T", x) + } + // end_value + switch x := m.EndValue.(type) { + case *ValueRange_EndValueClosed: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndValueClosed) + case *ValueRange_EndValueOpen: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.EndValueOpen) + case nil: + default: + return fmt.Errorf("ValueRange.EndValue has unexpected type %T", x) + } + return nil +} + +func _ValueRange_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ValueRange) + switch tag { + case 1: // start_value.start_value_closed + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartValue = &ValueRange_StartValueClosed{x} + return true, err + case 2: // start_value.start_value_open + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StartValue = &ValueRange_StartValueOpen{x} + return true, err + case 3: // end_value.end_value_closed + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndValue = &ValueRange_EndValueClosed{x} + return true, err + case 4: // end_value.end_value_open + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.EndValue = &ValueRange_EndValueOpen{x} + return true, err + default: + return false, nil + } +} + +func _ValueRange_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ValueRange) + // start_value + switch x := m.StartValue.(type) { + case *ValueRange_StartValueClosed: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartValueClosed))) + n += len(x.StartValueClosed) + case *ValueRange_StartValueOpen: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StartValueOpen))) + n += len(x.StartValueOpen) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // end_value + switch x := m.EndValue.(type) { + case *ValueRange_EndValueClosed: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndValueClosed))) + n += len(x.EndValueClosed) + case *ValueRange_EndValueOpen: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EndValueOpen))) + n += len(x.EndValueOpen) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Takes a row as input and produces an alternate view of the row based on +// specified rules. For example, a RowFilter might trim down a row to include +// just the cells from columns matching a given regular expression, or might +// return all the cells of a row but not their values. More complicated filters +// can be composed out of these components to express requests such as, "within +// every column of a particular family, give just the two most recent cells +// which are older than timestamp X." +// +// There are two broad categories of RowFilters (true filters and transformers), +// as well as two ways to compose simple filters into more complex ones +// (chains and interleaves). They work as follows: +// +// * True filters alter the input row by excluding some of its cells wholesale +// from the output row. An example of a true filter is the `value_regex_filter`, +// which excludes cells whose values don't match the specified pattern. All +// regex true filters use RE2 syntax (https://github.com/google/re2/wiki/Syntax) +// in raw byte mode (RE2::Latin1), and are evaluated as full matches. An +// important point to keep in mind is that `RE2(.)` is equivalent by default to +// `RE2([^\n])`, meaning that it does not match newlines. When attempting to +// match an arbitrary byte, you should therefore use the escape sequence `\C`, +// which may need to be further escaped as `\\C` in your client language. +// +// * Transformers alter the input row by changing the values of some of its +// cells in the output, without excluding them completely. Currently, the only +// supported transformer is the `strip_value_transformer`, which replaces every +// cell's value with the empty string. +// +// * Chains and interleaves are described in more detail in the +// RowFilter.Chain and RowFilter.Interleave documentation. +// +// The total serialized size of a RowFilter message must not +// exceed 4096 bytes, and RowFilters may not be nested within each other +// (in Chains or Interleaves) to a depth of more than 20. +type RowFilter struct { + // Which of the possible RowFilter types to apply. If none are set, this + // RowFilter returns all cells in the input row. + // + // Types that are valid to be assigned to Filter: + // *RowFilter_Chain_ + // *RowFilter_Interleave_ + // *RowFilter_Condition_ + // *RowFilter_Sink + // *RowFilter_PassAllFilter + // *RowFilter_BlockAllFilter + // *RowFilter_RowKeyRegexFilter + // *RowFilter_RowSampleFilter + // *RowFilter_FamilyNameRegexFilter + // *RowFilter_ColumnQualifierRegexFilter + // *RowFilter_ColumnRangeFilter + // *RowFilter_TimestampRangeFilter + // *RowFilter_ValueRegexFilter + // *RowFilter_ValueRangeFilter + // *RowFilter_CellsPerRowOffsetFilter + // *RowFilter_CellsPerRowLimitFilter + // *RowFilter_CellsPerColumnLimitFilter + // *RowFilter_StripValueTransformer + // *RowFilter_ApplyLabelTransformer + Filter isRowFilter_Filter `protobuf_oneof:"filter"` +} + +func (m *RowFilter) Reset() { *m = RowFilter{} } +func (m *RowFilter) String() string { return proto.CompactTextString(m) } +func (*RowFilter) ProtoMessage() {} +func (*RowFilter) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +type isRowFilter_Filter interface { + isRowFilter_Filter() +} + +type RowFilter_Chain_ struct { + Chain *RowFilter_Chain `protobuf:"bytes,1,opt,name=chain,oneof"` +} +type RowFilter_Interleave_ struct { + Interleave *RowFilter_Interleave `protobuf:"bytes,2,opt,name=interleave,oneof"` +} +type RowFilter_Condition_ struct { + Condition *RowFilter_Condition `protobuf:"bytes,3,opt,name=condition,oneof"` +} +type RowFilter_Sink struct { + Sink bool `protobuf:"varint,16,opt,name=sink,oneof"` +} +type RowFilter_PassAllFilter struct { + PassAllFilter bool `protobuf:"varint,17,opt,name=pass_all_filter,json=passAllFilter,oneof"` +} +type RowFilter_BlockAllFilter struct { + BlockAllFilter bool `protobuf:"varint,18,opt,name=block_all_filter,json=blockAllFilter,oneof"` +} +type RowFilter_RowKeyRegexFilter struct { + RowKeyRegexFilter []byte `protobuf:"bytes,4,opt,name=row_key_regex_filter,json=rowKeyRegexFilter,proto3,oneof"` +} +type RowFilter_RowSampleFilter struct { + RowSampleFilter float64 `protobuf:"fixed64,14,opt,name=row_sample_filter,json=rowSampleFilter,oneof"` +} +type RowFilter_FamilyNameRegexFilter struct { + FamilyNameRegexFilter string `protobuf:"bytes,5,opt,name=family_name_regex_filter,json=familyNameRegexFilter,oneof"` +} +type RowFilter_ColumnQualifierRegexFilter struct { + ColumnQualifierRegexFilter []byte `protobuf:"bytes,6,opt,name=column_qualifier_regex_filter,json=columnQualifierRegexFilter,proto3,oneof"` +} +type RowFilter_ColumnRangeFilter struct { + ColumnRangeFilter *ColumnRange `protobuf:"bytes,7,opt,name=column_range_filter,json=columnRangeFilter,oneof"` +} +type RowFilter_TimestampRangeFilter struct { + TimestampRangeFilter *TimestampRange `protobuf:"bytes,8,opt,name=timestamp_range_filter,json=timestampRangeFilter,oneof"` +} +type RowFilter_ValueRegexFilter struct { + ValueRegexFilter []byte `protobuf:"bytes,9,opt,name=value_regex_filter,json=valueRegexFilter,proto3,oneof"` +} +type RowFilter_ValueRangeFilter struct { + ValueRangeFilter *ValueRange `protobuf:"bytes,15,opt,name=value_range_filter,json=valueRangeFilter,oneof"` +} +type RowFilter_CellsPerRowOffsetFilter struct { + CellsPerRowOffsetFilter int32 `protobuf:"varint,10,opt,name=cells_per_row_offset_filter,json=cellsPerRowOffsetFilter,oneof"` +} +type RowFilter_CellsPerRowLimitFilter struct { + CellsPerRowLimitFilter int32 `protobuf:"varint,11,opt,name=cells_per_row_limit_filter,json=cellsPerRowLimitFilter,oneof"` +} +type RowFilter_CellsPerColumnLimitFilter struct { + CellsPerColumnLimitFilter int32 `protobuf:"varint,12,opt,name=cells_per_column_limit_filter,json=cellsPerColumnLimitFilter,oneof"` +} +type RowFilter_StripValueTransformer struct { + StripValueTransformer bool `protobuf:"varint,13,opt,name=strip_value_transformer,json=stripValueTransformer,oneof"` +} +type RowFilter_ApplyLabelTransformer struct { + ApplyLabelTransformer string `protobuf:"bytes,19,opt,name=apply_label_transformer,json=applyLabelTransformer,oneof"` +} + +func (*RowFilter_Chain_) isRowFilter_Filter() {} +func (*RowFilter_Interleave_) isRowFilter_Filter() {} +func (*RowFilter_Condition_) isRowFilter_Filter() {} +func (*RowFilter_Sink) isRowFilter_Filter() {} +func (*RowFilter_PassAllFilter) isRowFilter_Filter() {} +func (*RowFilter_BlockAllFilter) isRowFilter_Filter() {} +func (*RowFilter_RowKeyRegexFilter) isRowFilter_Filter() {} +func (*RowFilter_RowSampleFilter) isRowFilter_Filter() {} +func (*RowFilter_FamilyNameRegexFilter) isRowFilter_Filter() {} +func (*RowFilter_ColumnQualifierRegexFilter) isRowFilter_Filter() {} +func (*RowFilter_ColumnRangeFilter) isRowFilter_Filter() {} +func (*RowFilter_TimestampRangeFilter) isRowFilter_Filter() {} +func (*RowFilter_ValueRegexFilter) isRowFilter_Filter() {} +func (*RowFilter_ValueRangeFilter) isRowFilter_Filter() {} +func (*RowFilter_CellsPerRowOffsetFilter) isRowFilter_Filter() {} +func (*RowFilter_CellsPerRowLimitFilter) isRowFilter_Filter() {} +func (*RowFilter_CellsPerColumnLimitFilter) isRowFilter_Filter() {} +func (*RowFilter_StripValueTransformer) isRowFilter_Filter() {} +func (*RowFilter_ApplyLabelTransformer) isRowFilter_Filter() {} + +func (m *RowFilter) GetFilter() isRowFilter_Filter { + if m != nil { + return m.Filter + } + return nil +} + +func (m *RowFilter) GetChain() *RowFilter_Chain { + if x, ok := m.GetFilter().(*RowFilter_Chain_); ok { + return x.Chain + } + return nil +} + +func (m *RowFilter) GetInterleave() *RowFilter_Interleave { + if x, ok := m.GetFilter().(*RowFilter_Interleave_); ok { + return x.Interleave + } + return nil +} + +func (m *RowFilter) GetCondition() *RowFilter_Condition { + if x, ok := m.GetFilter().(*RowFilter_Condition_); ok { + return x.Condition + } + return nil +} + +func (m *RowFilter) GetSink() bool { + if x, ok := m.GetFilter().(*RowFilter_Sink); ok { + return x.Sink + } + return false +} + +func (m *RowFilter) GetPassAllFilter() bool { + if x, ok := m.GetFilter().(*RowFilter_PassAllFilter); ok { + return x.PassAllFilter + } + return false +} + +func (m *RowFilter) GetBlockAllFilter() bool { + if x, ok := m.GetFilter().(*RowFilter_BlockAllFilter); ok { + return x.BlockAllFilter + } + return false +} + +func (m *RowFilter) GetRowKeyRegexFilter() []byte { + if x, ok := m.GetFilter().(*RowFilter_RowKeyRegexFilter); ok { + return x.RowKeyRegexFilter + } + return nil +} + +func (m *RowFilter) GetRowSampleFilter() float64 { + if x, ok := m.GetFilter().(*RowFilter_RowSampleFilter); ok { + return x.RowSampleFilter + } + return 0 +} + +func (m *RowFilter) GetFamilyNameRegexFilter() string { + if x, ok := m.GetFilter().(*RowFilter_FamilyNameRegexFilter); ok { + return x.FamilyNameRegexFilter + } + return "" +} + +func (m *RowFilter) GetColumnQualifierRegexFilter() []byte { + if x, ok := m.GetFilter().(*RowFilter_ColumnQualifierRegexFilter); ok { + return x.ColumnQualifierRegexFilter + } + return nil +} + +func (m *RowFilter) GetColumnRangeFilter() *ColumnRange { + if x, ok := m.GetFilter().(*RowFilter_ColumnRangeFilter); ok { + return x.ColumnRangeFilter + } + return nil +} + +func (m *RowFilter) GetTimestampRangeFilter() *TimestampRange { + if x, ok := m.GetFilter().(*RowFilter_TimestampRangeFilter); ok { + return x.TimestampRangeFilter + } + return nil +} + +func (m *RowFilter) GetValueRegexFilter() []byte { + if x, ok := m.GetFilter().(*RowFilter_ValueRegexFilter); ok { + return x.ValueRegexFilter + } + return nil +} + +func (m *RowFilter) GetValueRangeFilter() *ValueRange { + if x, ok := m.GetFilter().(*RowFilter_ValueRangeFilter); ok { + return x.ValueRangeFilter + } + return nil +} + +func (m *RowFilter) GetCellsPerRowOffsetFilter() int32 { + if x, ok := m.GetFilter().(*RowFilter_CellsPerRowOffsetFilter); ok { + return x.CellsPerRowOffsetFilter + } + return 0 +} + +func (m *RowFilter) GetCellsPerRowLimitFilter() int32 { + if x, ok := m.GetFilter().(*RowFilter_CellsPerRowLimitFilter); ok { + return x.CellsPerRowLimitFilter + } + return 0 +} + +func (m *RowFilter) GetCellsPerColumnLimitFilter() int32 { + if x, ok := m.GetFilter().(*RowFilter_CellsPerColumnLimitFilter); ok { + return x.CellsPerColumnLimitFilter + } + return 0 +} + +func (m *RowFilter) GetStripValueTransformer() bool { + if x, ok := m.GetFilter().(*RowFilter_StripValueTransformer); ok { + return x.StripValueTransformer + } + return false +} + +func (m *RowFilter) GetApplyLabelTransformer() string { + if x, ok := m.GetFilter().(*RowFilter_ApplyLabelTransformer); ok { + return x.ApplyLabelTransformer + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RowFilter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RowFilter_OneofMarshaler, _RowFilter_OneofUnmarshaler, _RowFilter_OneofSizer, []interface{}{ + (*RowFilter_Chain_)(nil), + (*RowFilter_Interleave_)(nil), + (*RowFilter_Condition_)(nil), + (*RowFilter_Sink)(nil), + (*RowFilter_PassAllFilter)(nil), + (*RowFilter_BlockAllFilter)(nil), + (*RowFilter_RowKeyRegexFilter)(nil), + (*RowFilter_RowSampleFilter)(nil), + (*RowFilter_FamilyNameRegexFilter)(nil), + (*RowFilter_ColumnQualifierRegexFilter)(nil), + (*RowFilter_ColumnRangeFilter)(nil), + (*RowFilter_TimestampRangeFilter)(nil), + (*RowFilter_ValueRegexFilter)(nil), + (*RowFilter_ValueRangeFilter)(nil), + (*RowFilter_CellsPerRowOffsetFilter)(nil), + (*RowFilter_CellsPerRowLimitFilter)(nil), + (*RowFilter_CellsPerColumnLimitFilter)(nil), + (*RowFilter_StripValueTransformer)(nil), + (*RowFilter_ApplyLabelTransformer)(nil), + } +} + +func _RowFilter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RowFilter) + // filter + switch x := m.Filter.(type) { + case *RowFilter_Chain_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Chain); err != nil { + return err + } + case *RowFilter_Interleave_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Interleave); err != nil { + return err + } + case *RowFilter_Condition_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Condition); err != nil { + return err + } + case *RowFilter_Sink: + t := uint64(0) + if x.Sink { + t = 1 + } + b.EncodeVarint(16<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *RowFilter_PassAllFilter: + t := uint64(0) + if x.PassAllFilter { + t = 1 + } + b.EncodeVarint(17<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *RowFilter_BlockAllFilter: + t := uint64(0) + if x.BlockAllFilter { + t = 1 + } + b.EncodeVarint(18<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *RowFilter_RowKeyRegexFilter: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.RowKeyRegexFilter) + case *RowFilter_RowSampleFilter: + b.EncodeVarint(14<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.RowSampleFilter)) + case *RowFilter_FamilyNameRegexFilter: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.FamilyNameRegexFilter) + case *RowFilter_ColumnQualifierRegexFilter: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeRawBytes(x.ColumnQualifierRegexFilter) + case *RowFilter_ColumnRangeFilter: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ColumnRangeFilter); err != nil { + return err + } + case *RowFilter_TimestampRangeFilter: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimestampRangeFilter); err != nil { + return err + } + case *RowFilter_ValueRegexFilter: + b.EncodeVarint(9<<3 | proto.WireBytes) + b.EncodeRawBytes(x.ValueRegexFilter) + case *RowFilter_ValueRangeFilter: + b.EncodeVarint(15<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ValueRangeFilter); err != nil { + return err + } + case *RowFilter_CellsPerRowOffsetFilter: + b.EncodeVarint(10<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CellsPerRowOffsetFilter)) + case *RowFilter_CellsPerRowLimitFilter: + b.EncodeVarint(11<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CellsPerRowLimitFilter)) + case *RowFilter_CellsPerColumnLimitFilter: + b.EncodeVarint(12<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CellsPerColumnLimitFilter)) + case *RowFilter_StripValueTransformer: + t := uint64(0) + if x.StripValueTransformer { + t = 1 + } + b.EncodeVarint(13<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *RowFilter_ApplyLabelTransformer: + b.EncodeVarint(19<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ApplyLabelTransformer) + case nil: + default: + return fmt.Errorf("RowFilter.Filter has unexpected type %T", x) + } + return nil +} + +func _RowFilter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RowFilter) + switch tag { + case 1: // filter.chain + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RowFilter_Chain) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_Chain_{msg} + return true, err + case 2: // filter.interleave + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RowFilter_Interleave) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_Interleave_{msg} + return true, err + case 3: // filter.condition + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RowFilter_Condition) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_Condition_{msg} + return true, err + case 16: // filter.sink + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_Sink{x != 0} + return true, err + case 17: // filter.pass_all_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_PassAllFilter{x != 0} + return true, err + case 18: // filter.block_all_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_BlockAllFilter{x != 0} + return true, err + case 4: // filter.row_key_regex_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Filter = &RowFilter_RowKeyRegexFilter{x} + return true, err + case 14: // filter.row_sample_filter + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Filter = &RowFilter_RowSampleFilter{math.Float64frombits(x)} + return true, err + case 5: // filter.family_name_regex_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Filter = &RowFilter_FamilyNameRegexFilter{x} + return true, err + case 6: // filter.column_qualifier_regex_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Filter = &RowFilter_ColumnQualifierRegexFilter{x} + return true, err + case 7: // filter.column_range_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ColumnRange) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_ColumnRangeFilter{msg} + return true, err + case 8: // filter.timestamp_range_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TimestampRange) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_TimestampRangeFilter{msg} + return true, err + case 9: // filter.value_regex_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Filter = &RowFilter_ValueRegexFilter{x} + return true, err + case 15: // filter.value_range_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ValueRange) + err := b.DecodeMessage(msg) + m.Filter = &RowFilter_ValueRangeFilter{msg} + return true, err + case 10: // filter.cells_per_row_offset_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_CellsPerRowOffsetFilter{int32(x)} + return true, err + case 11: // filter.cells_per_row_limit_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_CellsPerRowLimitFilter{int32(x)} + return true, err + case 12: // filter.cells_per_column_limit_filter + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_CellsPerColumnLimitFilter{int32(x)} + return true, err + case 13: // filter.strip_value_transformer + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Filter = &RowFilter_StripValueTransformer{x != 0} + return true, err + case 19: // filter.apply_label_transformer + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Filter = &RowFilter_ApplyLabelTransformer{x} + return true, err + default: + return false, nil + } +} + +func _RowFilter_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RowFilter) + // filter + switch x := m.Filter.(type) { + case *RowFilter_Chain_: + s := proto.Size(x.Chain) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_Interleave_: + s := proto.Size(x.Interleave) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_Condition_: + s := proto.Size(x.Condition) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_Sink: + n += proto.SizeVarint(16<<3 | proto.WireVarint) + n += 1 + case *RowFilter_PassAllFilter: + n += proto.SizeVarint(17<<3 | proto.WireVarint) + n += 1 + case *RowFilter_BlockAllFilter: + n += proto.SizeVarint(18<<3 | proto.WireVarint) + n += 1 + case *RowFilter_RowKeyRegexFilter: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RowKeyRegexFilter))) + n += len(x.RowKeyRegexFilter) + case *RowFilter_RowSampleFilter: + n += proto.SizeVarint(14<<3 | proto.WireFixed64) + n += 8 + case *RowFilter_FamilyNameRegexFilter: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.FamilyNameRegexFilter))) + n += len(x.FamilyNameRegexFilter) + case *RowFilter_ColumnQualifierRegexFilter: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ColumnQualifierRegexFilter))) + n += len(x.ColumnQualifierRegexFilter) + case *RowFilter_ColumnRangeFilter: + s := proto.Size(x.ColumnRangeFilter) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_TimestampRangeFilter: + s := proto.Size(x.TimestampRangeFilter) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_ValueRegexFilter: + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ValueRegexFilter))) + n += len(x.ValueRegexFilter) + case *RowFilter_ValueRangeFilter: + s := proto.Size(x.ValueRangeFilter) + n += proto.SizeVarint(15<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RowFilter_CellsPerRowOffsetFilter: + n += proto.SizeVarint(10<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CellsPerRowOffsetFilter)) + case *RowFilter_CellsPerRowLimitFilter: + n += proto.SizeVarint(11<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CellsPerRowLimitFilter)) + case *RowFilter_CellsPerColumnLimitFilter: + n += proto.SizeVarint(12<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CellsPerColumnLimitFilter)) + case *RowFilter_StripValueTransformer: + n += proto.SizeVarint(13<<3 | proto.WireVarint) + n += 1 + case *RowFilter_ApplyLabelTransformer: + n += proto.SizeVarint(19<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ApplyLabelTransformer))) + n += len(x.ApplyLabelTransformer) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A RowFilter which sends rows through several RowFilters in sequence. +type RowFilter_Chain struct { + // The elements of "filters" are chained together to process the input row: + // in row -> f(0) -> intermediate row -> f(1) -> ... -> f(N) -> out row + // The full chain is executed atomically. + Filters []*RowFilter `protobuf:"bytes,1,rep,name=filters" json:"filters,omitempty"` +} + +func (m *RowFilter_Chain) Reset() { *m = RowFilter_Chain{} } +func (m *RowFilter_Chain) String() string { return proto.CompactTextString(m) } +func (*RowFilter_Chain) ProtoMessage() {} +func (*RowFilter_Chain) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 0} } + +func (m *RowFilter_Chain) GetFilters() []*RowFilter { + if m != nil { + return m.Filters + } + return nil +} + +// A RowFilter which sends each row to each of several component +// RowFilters and interleaves the results. +type RowFilter_Interleave struct { + // The elements of "filters" all process a copy of the input row, and the + // results are pooled, sorted, and combined into a single output row. + // If multiple cells are produced with the same column and timestamp, + // they will all appear in the output row in an unspecified mutual order. + // Consider the following example, with three filters: + // + // input row + // | + // ----------------------------------------------------- + // | | | + // f(0) f(1) f(2) + // | | | + // 1: foo,bar,10,x foo,bar,10,z far,bar,7,a + // 2: foo,blah,11,z far,blah,5,x far,blah,5,x + // | | | + // ----------------------------------------------------- + // | + // 1: foo,bar,10,z // could have switched with #2 + // 2: foo,bar,10,x // could have switched with #1 + // 3: foo,blah,11,z + // 4: far,bar,7,a + // 5: far,blah,5,x // identical to #6 + // 6: far,blah,5,x // identical to #5 + // + // All interleaved filters are executed atomically. + Filters []*RowFilter `protobuf:"bytes,1,rep,name=filters" json:"filters,omitempty"` +} + +func (m *RowFilter_Interleave) Reset() { *m = RowFilter_Interleave{} } +func (m *RowFilter_Interleave) String() string { return proto.CompactTextString(m) } +func (*RowFilter_Interleave) ProtoMessage() {} +func (*RowFilter_Interleave) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 1} } + +func (m *RowFilter_Interleave) GetFilters() []*RowFilter { + if m != nil { + return m.Filters + } + return nil +} + +// A RowFilter which evaluates one of two possible RowFilters, depending on +// whether or not a predicate RowFilter outputs any cells from the input row. +// +// IMPORTANT NOTE: The predicate filter does not execute atomically with the +// true and false filters, which may lead to inconsistent or unexpected +// results. Additionally, Condition filters have poor performance, especially +// when filters are set for the false condition. +type RowFilter_Condition struct { + // If `predicate_filter` outputs any cells, then `true_filter` will be + // evaluated on the input row. Otherwise, `false_filter` will be evaluated. + PredicateFilter *RowFilter `protobuf:"bytes,1,opt,name=predicate_filter,json=predicateFilter" json:"predicate_filter,omitempty"` + // The filter to apply to the input row if `predicate_filter` returns any + // results. If not provided, no results will be returned in the true case. + TrueFilter *RowFilter `protobuf:"bytes,2,opt,name=true_filter,json=trueFilter" json:"true_filter,omitempty"` + // The filter to apply to the input row if `predicate_filter` does not + // return any results. If not provided, no results will be returned in the + // false case. + FalseFilter *RowFilter `protobuf:"bytes,3,opt,name=false_filter,json=falseFilter" json:"false_filter,omitempty"` +} + +func (m *RowFilter_Condition) Reset() { *m = RowFilter_Condition{} } +func (m *RowFilter_Condition) String() string { return proto.CompactTextString(m) } +func (*RowFilter_Condition) ProtoMessage() {} +func (*RowFilter_Condition) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 2} } + +func (m *RowFilter_Condition) GetPredicateFilter() *RowFilter { + if m != nil { + return m.PredicateFilter + } + return nil +} + +func (m *RowFilter_Condition) GetTrueFilter() *RowFilter { + if m != nil { + return m.TrueFilter + } + return nil +} + +func (m *RowFilter_Condition) GetFalseFilter() *RowFilter { + if m != nil { + return m.FalseFilter + } + return nil +} + +// Specifies a particular change to be made to the contents of a row. +type Mutation struct { + // Which of the possible Mutation types to apply. + // + // Types that are valid to be assigned to Mutation: + // *Mutation_SetCell_ + // *Mutation_DeleteFromColumn_ + // *Mutation_DeleteFromFamily_ + // *Mutation_DeleteFromRow_ + Mutation isMutation_Mutation `protobuf_oneof:"mutation"` +} + +func (m *Mutation) Reset() { *m = Mutation{} } +func (m *Mutation) String() string { return proto.CompactTextString(m) } +func (*Mutation) ProtoMessage() {} +func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +type isMutation_Mutation interface { + isMutation_Mutation() +} + +type Mutation_SetCell_ struct { + SetCell *Mutation_SetCell `protobuf:"bytes,1,opt,name=set_cell,json=setCell,oneof"` +} +type Mutation_DeleteFromColumn_ struct { + DeleteFromColumn *Mutation_DeleteFromColumn `protobuf:"bytes,2,opt,name=delete_from_column,json=deleteFromColumn,oneof"` +} +type Mutation_DeleteFromFamily_ struct { + DeleteFromFamily *Mutation_DeleteFromFamily `protobuf:"bytes,3,opt,name=delete_from_family,json=deleteFromFamily,oneof"` +} +type Mutation_DeleteFromRow_ struct { + DeleteFromRow *Mutation_DeleteFromRow `protobuf:"bytes,4,opt,name=delete_from_row,json=deleteFromRow,oneof"` +} + +func (*Mutation_SetCell_) isMutation_Mutation() {} +func (*Mutation_DeleteFromColumn_) isMutation_Mutation() {} +func (*Mutation_DeleteFromFamily_) isMutation_Mutation() {} +func (*Mutation_DeleteFromRow_) isMutation_Mutation() {} + +func (m *Mutation) GetMutation() isMutation_Mutation { + if m != nil { + return m.Mutation + } + return nil +} + +func (m *Mutation) GetSetCell() *Mutation_SetCell { + if x, ok := m.GetMutation().(*Mutation_SetCell_); ok { + return x.SetCell + } + return nil +} + +func (m *Mutation) GetDeleteFromColumn() *Mutation_DeleteFromColumn { + if x, ok := m.GetMutation().(*Mutation_DeleteFromColumn_); ok { + return x.DeleteFromColumn + } + return nil +} + +func (m *Mutation) GetDeleteFromFamily() *Mutation_DeleteFromFamily { + if x, ok := m.GetMutation().(*Mutation_DeleteFromFamily_); ok { + return x.DeleteFromFamily + } + return nil +} + +func (m *Mutation) GetDeleteFromRow() *Mutation_DeleteFromRow { + if x, ok := m.GetMutation().(*Mutation_DeleteFromRow_); ok { + return x.DeleteFromRow + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Mutation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Mutation_OneofMarshaler, _Mutation_OneofUnmarshaler, _Mutation_OneofSizer, []interface{}{ + (*Mutation_SetCell_)(nil), + (*Mutation_DeleteFromColumn_)(nil), + (*Mutation_DeleteFromFamily_)(nil), + (*Mutation_DeleteFromRow_)(nil), + } +} + +func _Mutation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Mutation) + // mutation + switch x := m.Mutation.(type) { + case *Mutation_SetCell_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SetCell); err != nil { + return err + } + case *Mutation_DeleteFromColumn_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DeleteFromColumn); err != nil { + return err + } + case *Mutation_DeleteFromFamily_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DeleteFromFamily); err != nil { + return err + } + case *Mutation_DeleteFromRow_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DeleteFromRow); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Mutation.Mutation has unexpected type %T", x) + } + return nil +} + +func _Mutation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Mutation) + switch tag { + case 1: // mutation.set_cell + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_SetCell) + err := b.DecodeMessage(msg) + m.Mutation = &Mutation_SetCell_{msg} + return true, err + case 2: // mutation.delete_from_column + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_DeleteFromColumn) + err := b.DecodeMessage(msg) + m.Mutation = &Mutation_DeleteFromColumn_{msg} + return true, err + case 3: // mutation.delete_from_family + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_DeleteFromFamily) + err := b.DecodeMessage(msg) + m.Mutation = &Mutation_DeleteFromFamily_{msg} + return true, err + case 4: // mutation.delete_from_row + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_DeleteFromRow) + err := b.DecodeMessage(msg) + m.Mutation = &Mutation_DeleteFromRow_{msg} + return true, err + default: + return false, nil + } +} + +func _Mutation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Mutation) + // mutation + switch x := m.Mutation.(type) { + case *Mutation_SetCell_: + s := proto.Size(x.SetCell) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_DeleteFromColumn_: + s := proto.Size(x.DeleteFromColumn) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_DeleteFromFamily_: + s := proto.Size(x.DeleteFromFamily) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_DeleteFromRow_: + s := proto.Size(x.DeleteFromRow) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Mutation which sets the value of the specified cell. +type Mutation_SetCell struct { + // The name of the family into which new data should be written. + // Must match `[-_.a-zA-Z0-9]+` + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The qualifier of the column into which new data should be written. + // Can be any byte string, including the empty string. + ColumnQualifier []byte `protobuf:"bytes,2,opt,name=column_qualifier,json=columnQualifier,proto3" json:"column_qualifier,omitempty"` + // The timestamp of the cell into which new data should be written. + // Use -1 for current Bigtable server time. + // Otherwise, the client should set this value itself, noting that the + // default value is a timestamp of zero if the field is left unspecified. + // Values must match the granularity of the table (e.g. micros, millis). + TimestampMicros int64 `protobuf:"varint,3,opt,name=timestamp_micros,json=timestampMicros" json:"timestamp_micros,omitempty"` + // The value to be written into the specified cell. + Value []byte `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *Mutation_SetCell) Reset() { *m = Mutation_SetCell{} } +func (m *Mutation_SetCell) String() string { return proto.CompactTextString(m) } +func (*Mutation_SetCell) ProtoMessage() {} +func (*Mutation_SetCell) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10, 0} } + +func (m *Mutation_SetCell) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +func (m *Mutation_SetCell) GetColumnQualifier() []byte { + if m != nil { + return m.ColumnQualifier + } + return nil +} + +func (m *Mutation_SetCell) GetTimestampMicros() int64 { + if m != nil { + return m.TimestampMicros + } + return 0 +} + +func (m *Mutation_SetCell) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +// A Mutation which deletes cells from the specified column, optionally +// restricting the deletions to a given timestamp range. +type Mutation_DeleteFromColumn struct { + // The name of the family from which cells should be deleted. + // Must match `[-_.a-zA-Z0-9]+` + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The qualifier of the column from which cells should be deleted. + // Can be any byte string, including the empty string. + ColumnQualifier []byte `protobuf:"bytes,2,opt,name=column_qualifier,json=columnQualifier,proto3" json:"column_qualifier,omitempty"` + // The range of timestamps within which cells should be deleted. + TimeRange *TimestampRange `protobuf:"bytes,3,opt,name=time_range,json=timeRange" json:"time_range,omitempty"` +} + +func (m *Mutation_DeleteFromColumn) Reset() { *m = Mutation_DeleteFromColumn{} } +func (m *Mutation_DeleteFromColumn) String() string { return proto.CompactTextString(m) } +func (*Mutation_DeleteFromColumn) ProtoMessage() {} +func (*Mutation_DeleteFromColumn) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10, 1} } + +func (m *Mutation_DeleteFromColumn) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +func (m *Mutation_DeleteFromColumn) GetColumnQualifier() []byte { + if m != nil { + return m.ColumnQualifier + } + return nil +} + +func (m *Mutation_DeleteFromColumn) GetTimeRange() *TimestampRange { + if m != nil { + return m.TimeRange + } + return nil +} + +// A Mutation which deletes all cells from the specified column family. +type Mutation_DeleteFromFamily struct { + // The name of the family from which cells should be deleted. + // Must match `[-_.a-zA-Z0-9]+` + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` +} + +func (m *Mutation_DeleteFromFamily) Reset() { *m = Mutation_DeleteFromFamily{} } +func (m *Mutation_DeleteFromFamily) String() string { return proto.CompactTextString(m) } +func (*Mutation_DeleteFromFamily) ProtoMessage() {} +func (*Mutation_DeleteFromFamily) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10, 2} } + +func (m *Mutation_DeleteFromFamily) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +// A Mutation which deletes all cells from the containing row. +type Mutation_DeleteFromRow struct { +} + +func (m *Mutation_DeleteFromRow) Reset() { *m = Mutation_DeleteFromRow{} } +func (m *Mutation_DeleteFromRow) String() string { return proto.CompactTextString(m) } +func (*Mutation_DeleteFromRow) ProtoMessage() {} +func (*Mutation_DeleteFromRow) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10, 3} } + +// Specifies an atomic read/modify/write operation on the latest value of the +// specified column. +type ReadModifyWriteRule struct { + // The name of the family to which the read/modify/write should be applied. + // Must match `[-_.a-zA-Z0-9]+` + FamilyName string `protobuf:"bytes,1,opt,name=family_name,json=familyName" json:"family_name,omitempty"` + // The qualifier of the column to which the read/modify/write should be + // applied. + // Can be any byte string, including the empty string. + ColumnQualifier []byte `protobuf:"bytes,2,opt,name=column_qualifier,json=columnQualifier,proto3" json:"column_qualifier,omitempty"` + // The rule used to determine the column's new latest value from its current + // latest value. + // + // Types that are valid to be assigned to Rule: + // *ReadModifyWriteRule_AppendValue + // *ReadModifyWriteRule_IncrementAmount + Rule isReadModifyWriteRule_Rule `protobuf_oneof:"rule"` +} + +func (m *ReadModifyWriteRule) Reset() { *m = ReadModifyWriteRule{} } +func (m *ReadModifyWriteRule) String() string { return proto.CompactTextString(m) } +func (*ReadModifyWriteRule) ProtoMessage() {} +func (*ReadModifyWriteRule) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +type isReadModifyWriteRule_Rule interface { + isReadModifyWriteRule_Rule() +} + +type ReadModifyWriteRule_AppendValue struct { + AppendValue []byte `protobuf:"bytes,3,opt,name=append_value,json=appendValue,proto3,oneof"` +} +type ReadModifyWriteRule_IncrementAmount struct { + IncrementAmount int64 `protobuf:"varint,4,opt,name=increment_amount,json=incrementAmount,oneof"` +} + +func (*ReadModifyWriteRule_AppendValue) isReadModifyWriteRule_Rule() {} +func (*ReadModifyWriteRule_IncrementAmount) isReadModifyWriteRule_Rule() {} + +func (m *ReadModifyWriteRule) GetRule() isReadModifyWriteRule_Rule { + if m != nil { + return m.Rule + } + return nil +} + +func (m *ReadModifyWriteRule) GetFamilyName() string { + if m != nil { + return m.FamilyName + } + return "" +} + +func (m *ReadModifyWriteRule) GetColumnQualifier() []byte { + if m != nil { + return m.ColumnQualifier + } + return nil +} + +func (m *ReadModifyWriteRule) GetAppendValue() []byte { + if x, ok := m.GetRule().(*ReadModifyWriteRule_AppendValue); ok { + return x.AppendValue + } + return nil +} + +func (m *ReadModifyWriteRule) GetIncrementAmount() int64 { + if x, ok := m.GetRule().(*ReadModifyWriteRule_IncrementAmount); ok { + return x.IncrementAmount + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ReadModifyWriteRule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ReadModifyWriteRule_OneofMarshaler, _ReadModifyWriteRule_OneofUnmarshaler, _ReadModifyWriteRule_OneofSizer, []interface{}{ + (*ReadModifyWriteRule_AppendValue)(nil), + (*ReadModifyWriteRule_IncrementAmount)(nil), + } +} + +func _ReadModifyWriteRule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ReadModifyWriteRule) + // rule + switch x := m.Rule.(type) { + case *ReadModifyWriteRule_AppendValue: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.AppendValue) + case *ReadModifyWriteRule_IncrementAmount: + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IncrementAmount)) + case nil: + default: + return fmt.Errorf("ReadModifyWriteRule.Rule has unexpected type %T", x) + } + return nil +} + +func _ReadModifyWriteRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ReadModifyWriteRule) + switch tag { + case 3: // rule.append_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Rule = &ReadModifyWriteRule_AppendValue{x} + return true, err + case 4: // rule.increment_amount + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Rule = &ReadModifyWriteRule_IncrementAmount{int64(x)} + return true, err + default: + return false, nil + } +} + +func _ReadModifyWriteRule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ReadModifyWriteRule) + // rule + switch x := m.Rule.(type) { + case *ReadModifyWriteRule_AppendValue: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AppendValue))) + n += len(x.AppendValue) + case *ReadModifyWriteRule_IncrementAmount: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IncrementAmount)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*Row)(nil), "google.bigtable.v2.Row") + proto.RegisterType((*Family)(nil), "google.bigtable.v2.Family") + proto.RegisterType((*Column)(nil), "google.bigtable.v2.Column") + proto.RegisterType((*Cell)(nil), "google.bigtable.v2.Cell") + proto.RegisterType((*RowRange)(nil), "google.bigtable.v2.RowRange") + proto.RegisterType((*RowSet)(nil), "google.bigtable.v2.RowSet") + proto.RegisterType((*ColumnRange)(nil), "google.bigtable.v2.ColumnRange") + proto.RegisterType((*TimestampRange)(nil), "google.bigtable.v2.TimestampRange") + proto.RegisterType((*ValueRange)(nil), "google.bigtable.v2.ValueRange") + proto.RegisterType((*RowFilter)(nil), "google.bigtable.v2.RowFilter") + proto.RegisterType((*RowFilter_Chain)(nil), "google.bigtable.v2.RowFilter.Chain") + proto.RegisterType((*RowFilter_Interleave)(nil), "google.bigtable.v2.RowFilter.Interleave") + proto.RegisterType((*RowFilter_Condition)(nil), "google.bigtable.v2.RowFilter.Condition") + proto.RegisterType((*Mutation)(nil), "google.bigtable.v2.Mutation") + proto.RegisterType((*Mutation_SetCell)(nil), "google.bigtable.v2.Mutation.SetCell") + proto.RegisterType((*Mutation_DeleteFromColumn)(nil), "google.bigtable.v2.Mutation.DeleteFromColumn") + proto.RegisterType((*Mutation_DeleteFromFamily)(nil), "google.bigtable.v2.Mutation.DeleteFromFamily") + proto.RegisterType((*Mutation_DeleteFromRow)(nil), "google.bigtable.v2.Mutation.DeleteFromRow") + proto.RegisterType((*ReadModifyWriteRule)(nil), "google.bigtable.v2.ReadModifyWriteRule") +} + +func init() { proto.RegisterFile("google/bigtable/v2/data.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1412 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdb, 0x6e, 0xdb, 0x46, + 0x13, 0x16, 0x2d, 0xeb, 0x34, 0x94, 0x25, 0x65, 0xe3, 0x38, 0x8a, 0xfe, 0xf8, 0x8f, 0xc1, 0x14, + 0xa9, 0xe2, 0xb6, 0x72, 0xab, 0x04, 0xe9, 0x21, 0x45, 0x11, 0xcb, 0x69, 0xaa, 0x36, 0xe7, 0x8d, + 0x91, 0x02, 0x01, 0x0a, 0x76, 0x2d, 0xad, 0x54, 0xc2, 0x4b, 0x2e, 0x4b, 0x52, 0x56, 0xf4, 0x22, + 0xbd, 0x6f, 0x5f, 0xa3, 0x77, 0x7d, 0x89, 0xf6, 0x31, 0xfa, 0x00, 0xbd, 0x28, 0xf6, 0xc0, 0x93, + 0xa2, 0xd8, 0x46, 0x91, 0x3b, 0x72, 0xe6, 0xfb, 0xbe, 0x99, 0x9d, 0x9d, 0x1d, 0x2e, 0x61, 0x7b, + 0xca, 0xf9, 0x94, 0xd1, 0xbd, 0x23, 0x67, 0x1a, 0x91, 0x23, 0x46, 0xf7, 0x4e, 0xfa, 0x7b, 0x63, + 0x12, 0x91, 0x9e, 0x1f, 0xf0, 0x88, 0x23, 0xa4, 0xdc, 0xbd, 0xd8, 0xdd, 0x3b, 0xe9, 0x5b, 0x4f, + 0xa1, 0x88, 0xf9, 0x1c, 0xb5, 0xa0, 0x78, 0x4c, 0x17, 0x6d, 0x63, 0xc7, 0xe8, 0xd6, 0xb1, 0x78, + 0x44, 0x77, 0xa0, 0x3a, 0x21, 0xae, 0xc3, 0x1c, 0x1a, 0xb6, 0xd7, 0x76, 0x8a, 0x5d, 0xb3, 0xdf, + 0xe9, 0xbd, 0xc9, 0xef, 0x3d, 0x10, 0x98, 0x05, 0x4e, 0xb0, 0x16, 0x86, 0xb2, 0xb2, 0x21, 0x04, + 0xeb, 0x1e, 0x71, 0xa9, 0x14, 0xad, 0x61, 0xf9, 0x8c, 0x6e, 0x43, 0x65, 0xc4, 0xd9, 0xcc, 0xf5, + 0x4e, 0x15, 0x3d, 0x90, 0x10, 0x1c, 0x43, 0xad, 0x97, 0x50, 0x56, 0x26, 0x74, 0x15, 0x6a, 0x3f, + 0xcf, 0x08, 0x73, 0x26, 0x0e, 0x0d, 0x74, 0xb6, 0xa9, 0x01, 0xf5, 0xa0, 0x34, 0xa2, 0x8c, 0xc5, + 0xda, 0xed, 0x95, 0xda, 0x94, 0x31, 0xac, 0x60, 0x96, 0x0d, 0xeb, 0xe2, 0x15, 0xdd, 0x84, 0x56, + 0xe4, 0xb8, 0x34, 0x8c, 0x88, 0xeb, 0xdb, 0xae, 0x33, 0x0a, 0x78, 0x28, 0xc5, 0x8b, 0xb8, 0x99, + 0xd8, 0x1f, 0x4b, 0x33, 0xda, 0x84, 0xd2, 0x09, 0x61, 0x33, 0xda, 0x5e, 0x93, 0xc1, 0xd5, 0x0b, + 0xda, 0x82, 0x32, 0x23, 0x47, 0x94, 0x85, 0xed, 0xe2, 0x4e, 0xb1, 0x5b, 0xc3, 0xfa, 0xcd, 0xfa, + 0xc3, 0x80, 0x2a, 0xe6, 0x73, 0x4c, 0xbc, 0x29, 0x45, 0xbb, 0xd0, 0x0a, 0x23, 0x12, 0x44, 0xf6, + 0x31, 0x5d, 0xd8, 0x23, 0xc6, 0x43, 0x3a, 0x56, 0x4b, 0x18, 0x16, 0x70, 0x43, 0x7a, 0x1e, 0xd2, + 0xc5, 0x81, 0xb4, 0xa3, 0x1b, 0xd0, 0x48, 0xb1, 0xdc, 0xa7, 0x9e, 0x8a, 0x37, 0x2c, 0xe0, 0x7a, + 0x8c, 0x7c, 0xea, 0x53, 0x0f, 0x59, 0x50, 0xa7, 0xde, 0x38, 0x45, 0x15, 0x25, 0xca, 0xc0, 0x40, + 0xbd, 0x71, 0x8c, 0xb9, 0x01, 0x8d, 0x18, 0xa3, 0xa3, 0xae, 0x6b, 0x54, 0x5d, 0xa1, 0x54, 0xcc, + 0x81, 0x09, 0xb5, 0x24, 0xe6, 0xa0, 0x06, 0x15, 0x4d, 0xb2, 0x7e, 0x84, 0x32, 0xe6, 0xf3, 0x17, + 0x34, 0x42, 0x57, 0xa0, 0x1a, 0xf0, 0xb9, 0x30, 0x8a, 0xfa, 0x14, 0xbb, 0x75, 0x5c, 0x09, 0xf8, + 0xfc, 0x21, 0x5d, 0x84, 0xe8, 0x2e, 0x80, 0x70, 0x05, 0x62, 0xa5, 0x71, 0xfd, 0xaf, 0xae, 0xaa, + 0x7f, 0x5c, 0x0e, 0x5c, 0x0b, 0xf4, 0x53, 0x68, 0xfd, 0xb6, 0x06, 0xa6, 0xde, 0x73, 0x59, 0xa9, + 0x6b, 0x60, 0xca, 0x7e, 0x5a, 0xd8, 0x99, 0x06, 0x02, 0x65, 0x7a, 0x22, 0xda, 0xe8, 0x0e, 0x6c, + 0xa9, 0x54, 0x93, 0xbd, 0x8f, 0x97, 0x16, 0x97, 0x69, 0x53, 0xfa, 0x9f, 0xc7, 0x6e, 0x5d, 0xd6, + 0x3e, 0x6c, 0x2e, 0xf3, 0x32, 0x65, 0x2b, 0x60, 0x94, 0x67, 0xc9, 0xf2, 0xf5, 0x61, 0x53, 0x54, + 0xe2, 0x8d, 0x48, 0x71, 0x11, 0x11, 0xf5, 0xc6, 0xcb, 0x71, 0x7a, 0x80, 0xf2, 0x1c, 0x19, 0xa5, + 0xa4, 0x19, 0xad, 0x2c, 0x43, 0xc4, 0x18, 0x5c, 0x80, 0xe6, 0x52, 0x5e, 0x83, 0x26, 0x6c, 0xe4, + 0x24, 0xac, 0xd7, 0xd0, 0x38, 0x8c, 0x9b, 0x51, 0x95, 0xe9, 0x76, 0x5c, 0x85, 0xb7, 0x34, 0xaf, + 0x5a, 0xeb, 0xe1, 0x52, 0x07, 0x7f, 0xac, 0xd6, 0xf3, 0x06, 0x67, 0x4d, 0x72, 0x44, 0xde, 0x4b, + 0x0c, 0xeb, 0x2f, 0x03, 0xe0, 0xa5, 0xe8, 0x73, 0x15, 0xb6, 0x07, 0xaa, 0x4c, 0xb6, 0xec, 0xfd, + 0xe5, 0x4e, 0x56, 0x3d, 0x2e, 0xe1, 0xba, 0x18, 0x49, 0xdf, 0x2b, 0x7c, 0xae, 0x9b, 0x1b, 0x29, + 0x5a, 0x16, 0x7b, 0x17, 0x44, 0x71, 0xf2, 0xca, 0x71, 0x4f, 0x8b, 0x2e, 0xce, 0xea, 0xea, 0xbe, + 0xce, 0xa8, 0x66, 0xfb, 0x3a, 0xd1, 0x1c, 0x6c, 0x80, 0x99, 0x89, 0x2f, 0xda, 0x3c, 0xa1, 0x59, + 0xff, 0x98, 0x50, 0xc3, 0x7c, 0xfe, 0xc0, 0x61, 0x11, 0x0d, 0xd0, 0x5d, 0x28, 0x8d, 0x7e, 0x22, + 0x8e, 0x27, 0x17, 0x63, 0xf6, 0xaf, 0xbf, 0xa5, 0x7f, 0x15, 0xba, 0x77, 0x20, 0xa0, 0xc3, 0x02, + 0x56, 0x1c, 0xf4, 0x1d, 0x80, 0xe3, 0x45, 0x34, 0x60, 0x94, 0x9c, 0xa8, 0xf1, 0x60, 0xf6, 0xbb, + 0xa7, 0x2b, 0x7c, 0x9b, 0xe0, 0x87, 0x05, 0x9c, 0x61, 0xa3, 0x6f, 0xa0, 0x36, 0xe2, 0xde, 0xd8, + 0x89, 0x1c, 0xae, 0x9a, 0xd3, 0xec, 0xbf, 0x7f, 0x46, 0x32, 0x31, 0x7c, 0x58, 0xc0, 0x29, 0x17, + 0x6d, 0xc2, 0x7a, 0xe8, 0x78, 0xc7, 0xed, 0xd6, 0x8e, 0xd1, 0xad, 0x0e, 0x0b, 0x58, 0xbe, 0xa1, + 0x2e, 0x34, 0x7d, 0x12, 0x86, 0x36, 0x61, 0xcc, 0x9e, 0x48, 0x7e, 0xfb, 0x82, 0x06, 0x6c, 0x08, + 0xc7, 0x3e, 0x63, 0xba, 0x22, 0xbb, 0xd0, 0x3a, 0x62, 0x7c, 0x74, 0x9c, 0x85, 0x22, 0x0d, 0x6d, + 0x48, 0x4f, 0x8a, 0xfd, 0x04, 0x36, 0xf5, 0x74, 0xb0, 0x03, 0x3a, 0xa5, 0xaf, 0x63, 0xfc, 0xba, + 0xde, 0xeb, 0x0b, 0x6a, 0x56, 0x60, 0xe1, 0xd3, 0x94, 0x0f, 0x41, 0x18, 0xed, 0x90, 0xb8, 0x3e, + 0xa3, 0x31, 0xbe, 0xb1, 0x63, 0x74, 0x8d, 0x61, 0x01, 0x37, 0x03, 0x3e, 0x7f, 0x21, 0x3d, 0x1a, + 0xfd, 0x39, 0xb4, 0x33, 0x63, 0x21, 0x1f, 0x44, 0x9c, 0xad, 0xda, 0xb0, 0x80, 0x2f, 0xa5, 0x53, + 0x22, 0x1b, 0xe8, 0x00, 0xb6, 0xd5, 0xc7, 0x24, 0x73, 0x26, 0x73, 0xfc, 0xb2, 0x4e, 0xb2, 0xa3, + 0x60, 0xc9, 0xf1, 0xcc, 0x8a, 0x3c, 0x87, 0x8b, 0x5a, 0x44, 0x8e, 0xb9, 0x98, 0x5a, 0x91, 0xfb, + 0x73, 0xed, 0x94, 0x0f, 0x99, 0x40, 0x8b, 0x02, 0x8c, 0xd2, 0x57, 0x2d, 0xf9, 0x0a, 0xb6, 0xd2, + 0x83, 0x98, 0x53, 0xad, 0x4a, 0x55, 0x6b, 0x95, 0x6a, 0x7e, 0x0c, 0x88, 0x61, 0x17, 0xe5, 0x2c, + 0x5a, 0xbb, 0x07, 0x48, 0x9d, 0x8d, 0xdc, 0x42, 0x6b, 0xf1, 0x39, 0x95, 0xbe, 0xec, 0xf2, 0x9e, + 0x24, 0xf8, 0x6c, 0x1e, 0x4d, 0x99, 0xc7, 0xff, 0x57, 0xe5, 0x91, 0xce, 0x84, 0x54, 0x2f, 0x13, + 0xff, 0x2b, 0xf8, 0x9f, 0xfc, 0xcc, 0xda, 0xbe, 0x28, 0x36, 0x9f, 0xdb, 0x7c, 0x32, 0x09, 0x69, + 0x14, 0x0b, 0xc3, 0x8e, 0xd1, 0x2d, 0x0d, 0x0b, 0xf8, 0xb2, 0x04, 0x3d, 0xa3, 0x01, 0xe6, 0xf3, + 0xa7, 0x12, 0xa1, 0xf9, 0x5f, 0x42, 0x27, 0xcf, 0x67, 0x8e, 0xeb, 0x24, 0x74, 0x53, 0xd3, 0xb7, + 0x32, 0xf4, 0x47, 0x02, 0xa0, 0xd9, 0x03, 0xd8, 0x4e, 0xd9, 0x7a, 0xdb, 0x72, 0x02, 0x75, 0x2d, + 0x70, 0x25, 0x16, 0x50, 0x9b, 0x95, 0xd5, 0xf8, 0x0c, 0x2e, 0x87, 0x51, 0xe0, 0xf8, 0x7a, 0xc6, + 0x44, 0x01, 0xf1, 0xc2, 0x09, 0x0f, 0x5c, 0x1a, 0xb4, 0x37, 0xf4, 0x21, 0xb8, 0x24, 0x01, 0xb2, + 0x12, 0x87, 0xa9, 0x5b, 0x30, 0x89, 0xef, 0xb3, 0x85, 0x2d, 0x2f, 0x02, 0x39, 0xe6, 0xc5, 0xb8, + 0x53, 0x25, 0xe0, 0x91, 0xf0, 0x67, 0x98, 0x9d, 0x7b, 0x50, 0x92, 0x83, 0x05, 0x7d, 0x0a, 0x15, + 0x95, 0xa9, 0xfa, 0xd6, 0x9a, 0xfd, 0xed, 0x53, 0x27, 0x00, 0x8e, 0xd1, 0x9d, 0xaf, 0x01, 0xd2, + 0xc1, 0xf2, 0xdf, 0x65, 0xfe, 0x34, 0xa0, 0x96, 0x4c, 0x15, 0x34, 0x84, 0x96, 0x1f, 0xd0, 0xb1, + 0x33, 0x22, 0x51, 0xd2, 0x1a, 0x6a, 0x4a, 0x9e, 0xa1, 0xd7, 0x4c, 0x68, 0x49, 0x5b, 0x98, 0x51, + 0x30, 0x4b, 0x44, 0xd6, 0xce, 0x23, 0x02, 0x82, 0xa1, 0xf9, 0xf7, 0xa0, 0x3e, 0x21, 0x2c, 0x4c, + 0x04, 0x8a, 0xe7, 0x11, 0x30, 0x25, 0x45, 0xbd, 0x0c, 0xaa, 0x50, 0x56, 0x5c, 0xeb, 0xef, 0x12, + 0x54, 0x1f, 0xcf, 0x22, 0x22, 0x97, 0xb8, 0x0f, 0x55, 0xd1, 0x9e, 0xa2, 0x1d, 0xf4, 0xd2, 0xde, + 0x5b, 0x25, 0x1a, 0xe3, 0x7b, 0x2f, 0x68, 0x24, 0x6e, 0x8f, 0xc3, 0x02, 0xae, 0x84, 0xea, 0x11, + 0xfd, 0x00, 0x68, 0x4c, 0x19, 0x15, 0x25, 0x0a, 0xb8, 0xab, 0xdb, 0x4e, 0x2f, 0xf1, 0xa3, 0x53, + 0xc5, 0xee, 0x4b, 0xda, 0x83, 0x80, 0xbb, 0xaa, 0x0d, 0xc5, 0x89, 0x1a, 0x2f, 0xd9, 0x96, 0xe5, + 0xd5, 0xa8, 0xd3, 0x05, 0x38, 0xaf, 0xbc, 0xba, 0x9c, 0xe7, 0xe5, 0xf5, 0x85, 0xfd, 0x10, 0x9a, + 0x59, 0xf9, 0x80, 0xcf, 0xe5, 0xec, 0x36, 0xfb, 0xbb, 0xe7, 0xd4, 0xc6, 0x7c, 0x2e, 0x3e, 0x21, + 0xe3, 0xac, 0xa1, 0xf3, 0x8b, 0x01, 0x15, 0x5d, 0xaa, 0xb3, 0x2f, 0x76, 0x37, 0xa1, 0xb5, 0x3c, + 0xa7, 0xf5, 0x4d, 0xbb, 0xb9, 0x34, 0x98, 0x57, 0x5e, 0xda, 0x8b, 0x67, 0x5c, 0xda, 0xd7, 0x33, + 0x97, 0xf6, 0xce, 0xaf, 0x06, 0xb4, 0x96, 0xcb, 0xfe, 0x4e, 0x33, 0xdc, 0x07, 0x10, 0x99, 0xa8, + 0x79, 0xaa, 0xb7, 0xe9, 0x1c, 0x03, 0x1d, 0xd7, 0x04, 0x4b, 0x3e, 0x76, 0x6e, 0x65, 0x53, 0xd4, + 0xdb, 0x74, 0x56, 0x8a, 0x9d, 0x26, 0x6c, 0xe4, 0xf6, 0x64, 0x00, 0x50, 0x75, 0xf5, 0x6e, 0x59, + 0xbf, 0x1b, 0x70, 0x11, 0x53, 0x32, 0x7e, 0xcc, 0xc7, 0xce, 0x64, 0xf1, 0x7d, 0xe0, 0x44, 0x14, + 0xcf, 0x18, 0x7d, 0xa7, 0x0b, 0xbf, 0x0e, 0x75, 0xe2, 0xfb, 0xc9, 0x2d, 0x2b, 0xb9, 0x5e, 0x9b, + 0xca, 0x2a, 0xa7, 0x25, 0xfa, 0x00, 0x5a, 0x8e, 0x37, 0x0a, 0xa8, 0x4b, 0xbd, 0xc8, 0x26, 0x2e, + 0x9f, 0x79, 0x91, 0xdc, 0x9f, 0xa2, 0xf8, 0xf4, 0x27, 0x9e, 0x7d, 0xe9, 0x18, 0x94, 0x61, 0x3d, + 0x98, 0x31, 0x3a, 0x20, 0xb0, 0x35, 0xe2, 0xee, 0x8a, 0x1a, 0x0e, 0x6a, 0xf7, 0x49, 0x44, 0x9e, + 0x89, 0xff, 0xdc, 0x67, 0xc6, 0xab, 0x2f, 0x34, 0x60, 0xca, 0x19, 0xf1, 0xa6, 0x3d, 0x1e, 0x4c, + 0xf7, 0xa6, 0xd4, 0x93, 0x7f, 0xc1, 0x7b, 0xca, 0x45, 0x7c, 0x27, 0xcc, 0xfe, 0x27, 0xdf, 0x8d, + 0x9f, 0x8f, 0xca, 0x12, 0x76, 0xeb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0xbb, 0x74, 0x4d, + 0x4d, 0x0f, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bytestream/bytestream.pb.go b/vendor/google.golang.org/genproto/googleapis/bytestream/bytestream.pb.go new file mode 100644 index 0000000..f52ab26 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bytestream/bytestream.pb.go @@ -0,0 +1,556 @@ +// Code generated by protoc-gen-go. +// source: google/bytestream/bytestream.proto +// DO NOT EDIT! + +/* +Package bytestream is a generated protocol buffer package. + +It is generated from these files: + google/bytestream/bytestream.proto + +It has these top-level messages: + ReadRequest + ReadResponse + WriteRequest + WriteResponse + QueryWriteStatusRequest + QueryWriteStatusResponse +*/ +package bytestream + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "github.com/golang/protobuf/ptypes/wrappers" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Request object for ByteStream.Read. +type ReadRequest struct { + // The name of the resource to read. + ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName" json:"resource_name,omitempty"` + // The offset for the first byte to return in the read, relative to the start + // of the resource. + // + // A `read_offset` that is negative or greater than the size of the resource + // will cause an `OUT_OF_RANGE` error. + ReadOffset int64 `protobuf:"varint,2,opt,name=read_offset,json=readOffset" json:"read_offset,omitempty"` + // The maximum number of `data` bytes the server is allowed to return in the + // sum of all `ReadResponse` messages. A `read_limit` of zero indicates that + // there is no limit, and a negative `read_limit` will cause an error. + // + // If the stream returns fewer bytes than allowed by the `read_limit` and no + // error occurred, the stream includes all data from the `read_offset` to the + // end of the resource. + ReadLimit int64 `protobuf:"varint,3,opt,name=read_limit,json=readLimit" json:"read_limit,omitempty"` +} + +func (m *ReadRequest) Reset() { *m = ReadRequest{} } +func (m *ReadRequest) String() string { return proto.CompactTextString(m) } +func (*ReadRequest) ProtoMessage() {} +func (*ReadRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ReadRequest) GetResourceName() string { + if m != nil { + return m.ResourceName + } + return "" +} + +func (m *ReadRequest) GetReadOffset() int64 { + if m != nil { + return m.ReadOffset + } + return 0 +} + +func (m *ReadRequest) GetReadLimit() int64 { + if m != nil { + return m.ReadLimit + } + return 0 +} + +// Response object for ByteStream.Read. +type ReadResponse struct { + // A portion of the data for the resource. The service **may** leave `data` + // empty for any given `ReadResponse`. This enables the service to inform the + // client that the request is still live while it is running an operation to + // generate more data. + Data []byte `protobuf:"bytes,10,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *ReadResponse) Reset() { *m = ReadResponse{} } +func (m *ReadResponse) String() string { return proto.CompactTextString(m) } +func (*ReadResponse) ProtoMessage() {} +func (*ReadResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ReadResponse) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +// Request object for ByteStream.Write. +type WriteRequest struct { + // The name of the resource to write. This **must** be set on the first + // `WriteRequest` of each `Write()` action. If it is set on subsequent calls, + // it **must** match the value of the first request. + ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName" json:"resource_name,omitempty"` + // The offset from the beginning of the resource at which the data should be + // written. It is required on all `WriteRequest`s. + // + // In the first `WriteRequest` of a `Write()` action, it indicates + // the initial offset for the `Write()` call. The value **must** be equal to + // the `committed_size` that a call to `QueryWriteStatus()` would return. + // + // On subsequent calls, this value **must** be set and **must** be equal to + // the sum of the first `write_offset` and the sizes of all `data` bundles + // sent previously on this stream. + // + // An incorrect value will cause an error. + WriteOffset int64 `protobuf:"varint,2,opt,name=write_offset,json=writeOffset" json:"write_offset,omitempty"` + // If `true`, this indicates that the write is complete. Sending any + // `WriteRequest`s subsequent to one in which `finish_write` is `true` will + // cause an error. + FinishWrite bool `protobuf:"varint,3,opt,name=finish_write,json=finishWrite" json:"finish_write,omitempty"` + // A portion of the data for the resource. The client **may** leave `data` + // empty for any given `WriteRequest`. This enables the client to inform the + // service that the request is still live while it is running an operation to + // generate more data. + Data []byte `protobuf:"bytes,10,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *WriteRequest) Reset() { *m = WriteRequest{} } +func (m *WriteRequest) String() string { return proto.CompactTextString(m) } +func (*WriteRequest) ProtoMessage() {} +func (*WriteRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *WriteRequest) GetResourceName() string { + if m != nil { + return m.ResourceName + } + return "" +} + +func (m *WriteRequest) GetWriteOffset() int64 { + if m != nil { + return m.WriteOffset + } + return 0 +} + +func (m *WriteRequest) GetFinishWrite() bool { + if m != nil { + return m.FinishWrite + } + return false +} + +func (m *WriteRequest) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +// Response object for ByteStream.Write. +type WriteResponse struct { + // The number of bytes that have been processed for the given resource. + CommittedSize int64 `protobuf:"varint,1,opt,name=committed_size,json=committedSize" json:"committed_size,omitempty"` +} + +func (m *WriteResponse) Reset() { *m = WriteResponse{} } +func (m *WriteResponse) String() string { return proto.CompactTextString(m) } +func (*WriteResponse) ProtoMessage() {} +func (*WriteResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *WriteResponse) GetCommittedSize() int64 { + if m != nil { + return m.CommittedSize + } + return 0 +} + +// Request object for ByteStream.QueryWriteStatus. +type QueryWriteStatusRequest struct { + // The name of the resource whose write status is being requested. + ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName" json:"resource_name,omitempty"` +} + +func (m *QueryWriteStatusRequest) Reset() { *m = QueryWriteStatusRequest{} } +func (m *QueryWriteStatusRequest) String() string { return proto.CompactTextString(m) } +func (*QueryWriteStatusRequest) ProtoMessage() {} +func (*QueryWriteStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *QueryWriteStatusRequest) GetResourceName() string { + if m != nil { + return m.ResourceName + } + return "" +} + +// Response object for ByteStream.QueryWriteStatus. +type QueryWriteStatusResponse struct { + // The number of bytes that have been processed for the given resource. + CommittedSize int64 `protobuf:"varint,1,opt,name=committed_size,json=committedSize" json:"committed_size,omitempty"` + // `complete` is `true` only if the client has sent a `WriteRequest` with + // `finish_write` set to true, and the server has processed that request. + Complete bool `protobuf:"varint,2,opt,name=complete" json:"complete,omitempty"` +} + +func (m *QueryWriteStatusResponse) Reset() { *m = QueryWriteStatusResponse{} } +func (m *QueryWriteStatusResponse) String() string { return proto.CompactTextString(m) } +func (*QueryWriteStatusResponse) ProtoMessage() {} +func (*QueryWriteStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *QueryWriteStatusResponse) GetCommittedSize() int64 { + if m != nil { + return m.CommittedSize + } + return 0 +} + +func (m *QueryWriteStatusResponse) GetComplete() bool { + if m != nil { + return m.Complete + } + return false +} + +func init() { + proto.RegisterType((*ReadRequest)(nil), "google.bytestream.ReadRequest") + proto.RegisterType((*ReadResponse)(nil), "google.bytestream.ReadResponse") + proto.RegisterType((*WriteRequest)(nil), "google.bytestream.WriteRequest") + proto.RegisterType((*WriteResponse)(nil), "google.bytestream.WriteResponse") + proto.RegisterType((*QueryWriteStatusRequest)(nil), "google.bytestream.QueryWriteStatusRequest") + proto.RegisterType((*QueryWriteStatusResponse)(nil), "google.bytestream.QueryWriteStatusResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ByteStream service + +type ByteStreamClient interface { + // `Read()` is used to retrieve the contents of a resource as a sequence + // of bytes. The bytes are returned in a sequence of responses, and the + // responses are delivered as the results of a server-side streaming RPC. + Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (ByteStream_ReadClient, error) + // `Write()` is used to send the contents of a resource as a sequence of + // bytes. The bytes are sent in a sequence of request protos of a client-side + // streaming RPC. + // + // A `Write()` action is resumable. If there is an error or the connection is + // broken during the `Write()`, the client should check the status of the + // `Write()` by calling `QueryWriteStatus()` and continue writing from the + // returned `committed_size`. This may be less than the amount of data the + // client previously sent. + // + // Calling `Write()` on a resource name that was previously written and + // finalized could cause an error, depending on whether the underlying service + // allows over-writing of previously written resources. + // + // When the client closes the request channel, the service will respond with + // a `WriteResponse`. The service will not view the resource as `complete` + // until the client has sent a `WriteRequest` with `finish_write` set to + // `true`. Sending any requests on a stream after sending a request with + // `finish_write` set to `true` will cause an error. The client **should** + // check the `WriteResponse` it receives to determine how much data the + // service was able to commit and whether the service views the resource as + // `complete` or not. + Write(ctx context.Context, opts ...grpc.CallOption) (ByteStream_WriteClient, error) + // `QueryWriteStatus()` is used to find the `committed_size` for a resource + // that is being written, which can then be used as the `write_offset` for + // the next `Write()` call. + // + // If the resource does not exist (i.e., the resource has been deleted, or the + // first `Write()` has not yet reached the service), this method returns the + // error `NOT_FOUND`. + // + // The client **may** call `QueryWriteStatus()` at any time to determine how + // much data has been processed for this resource. This is useful if the + // client is buffering data and needs to know which data can be safely + // evicted. For any sequence of `QueryWriteStatus()` calls for a given + // resource name, the sequence of returned `committed_size` values will be + // non-decreasing. + QueryWriteStatus(ctx context.Context, in *QueryWriteStatusRequest, opts ...grpc.CallOption) (*QueryWriteStatusResponse, error) +} + +type byteStreamClient struct { + cc *grpc.ClientConn +} + +func NewByteStreamClient(cc *grpc.ClientConn) ByteStreamClient { + return &byteStreamClient{cc} +} + +func (c *byteStreamClient) Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (ByteStream_ReadClient, error) { + stream, err := grpc.NewClientStream(ctx, &_ByteStream_serviceDesc.Streams[0], c.cc, "/google.bytestream.ByteStream/Read", opts...) + if err != nil { + return nil, err + } + x := &byteStreamReadClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type ByteStream_ReadClient interface { + Recv() (*ReadResponse, error) + grpc.ClientStream +} + +type byteStreamReadClient struct { + grpc.ClientStream +} + +func (x *byteStreamReadClient) Recv() (*ReadResponse, error) { + m := new(ReadResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *byteStreamClient) Write(ctx context.Context, opts ...grpc.CallOption) (ByteStream_WriteClient, error) { + stream, err := grpc.NewClientStream(ctx, &_ByteStream_serviceDesc.Streams[1], c.cc, "/google.bytestream.ByteStream/Write", opts...) + if err != nil { + return nil, err + } + x := &byteStreamWriteClient{stream} + return x, nil +} + +type ByteStream_WriteClient interface { + Send(*WriteRequest) error + CloseAndRecv() (*WriteResponse, error) + grpc.ClientStream +} + +type byteStreamWriteClient struct { + grpc.ClientStream +} + +func (x *byteStreamWriteClient) Send(m *WriteRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *byteStreamWriteClient) CloseAndRecv() (*WriteResponse, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(WriteResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *byteStreamClient) QueryWriteStatus(ctx context.Context, in *QueryWriteStatusRequest, opts ...grpc.CallOption) (*QueryWriteStatusResponse, error) { + out := new(QueryWriteStatusResponse) + err := grpc.Invoke(ctx, "/google.bytestream.ByteStream/QueryWriteStatus", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ByteStream service + +type ByteStreamServer interface { + // `Read()` is used to retrieve the contents of a resource as a sequence + // of bytes. The bytes are returned in a sequence of responses, and the + // responses are delivered as the results of a server-side streaming RPC. + Read(*ReadRequest, ByteStream_ReadServer) error + // `Write()` is used to send the contents of a resource as a sequence of + // bytes. The bytes are sent in a sequence of request protos of a client-side + // streaming RPC. + // + // A `Write()` action is resumable. If there is an error or the connection is + // broken during the `Write()`, the client should check the status of the + // `Write()` by calling `QueryWriteStatus()` and continue writing from the + // returned `committed_size`. This may be less than the amount of data the + // client previously sent. + // + // Calling `Write()` on a resource name that was previously written and + // finalized could cause an error, depending on whether the underlying service + // allows over-writing of previously written resources. + // + // When the client closes the request channel, the service will respond with + // a `WriteResponse`. The service will not view the resource as `complete` + // until the client has sent a `WriteRequest` with `finish_write` set to + // `true`. Sending any requests on a stream after sending a request with + // `finish_write` set to `true` will cause an error. The client **should** + // check the `WriteResponse` it receives to determine how much data the + // service was able to commit and whether the service views the resource as + // `complete` or not. + Write(ByteStream_WriteServer) error + // `QueryWriteStatus()` is used to find the `committed_size` for a resource + // that is being written, which can then be used as the `write_offset` for + // the next `Write()` call. + // + // If the resource does not exist (i.e., the resource has been deleted, or the + // first `Write()` has not yet reached the service), this method returns the + // error `NOT_FOUND`. + // + // The client **may** call `QueryWriteStatus()` at any time to determine how + // much data has been processed for this resource. This is useful if the + // client is buffering data and needs to know which data can be safely + // evicted. For any sequence of `QueryWriteStatus()` calls for a given + // resource name, the sequence of returned `committed_size` values will be + // non-decreasing. + QueryWriteStatus(context.Context, *QueryWriteStatusRequest) (*QueryWriteStatusResponse, error) +} + +func RegisterByteStreamServer(s *grpc.Server, srv ByteStreamServer) { + s.RegisterService(&_ByteStream_serviceDesc, srv) +} + +func _ByteStream_Read_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ReadRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ByteStreamServer).Read(m, &byteStreamReadServer{stream}) +} + +type ByteStream_ReadServer interface { + Send(*ReadResponse) error + grpc.ServerStream +} + +type byteStreamReadServer struct { + grpc.ServerStream +} + +func (x *byteStreamReadServer) Send(m *ReadResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _ByteStream_Write_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ByteStreamServer).Write(&byteStreamWriteServer{stream}) +} + +type ByteStream_WriteServer interface { + SendAndClose(*WriteResponse) error + Recv() (*WriteRequest, error) + grpc.ServerStream +} + +type byteStreamWriteServer struct { + grpc.ServerStream +} + +func (x *byteStreamWriteServer) SendAndClose(m *WriteResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *byteStreamWriteServer) Recv() (*WriteRequest, error) { + m := new(WriteRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _ByteStream_QueryWriteStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryWriteStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ByteStreamServer).QueryWriteStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bytestream.ByteStream/QueryWriteStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ByteStreamServer).QueryWriteStatus(ctx, req.(*QueryWriteStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ByteStream_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.bytestream.ByteStream", + HandlerType: (*ByteStreamServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "QueryWriteStatus", + Handler: _ByteStream_QueryWriteStatus_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "Read", + Handler: _ByteStream_Read_Handler, + ServerStreams: true, + }, + { + StreamName: "Write", + Handler: _ByteStream_Write_Handler, + ClientStreams: true, + }, + }, + Metadata: "google/bytestream/bytestream.proto", +} + +func init() { proto.RegisterFile("google/bytestream/bytestream.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 446 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x5b, 0x8b, 0x13, 0x31, + 0x14, 0x66, 0xb6, 0xab, 0x74, 0x4f, 0xa7, 0x5e, 0x02, 0xe2, 0x30, 0xe8, 0x6e, 0x77, 0x44, 0x28, + 0x0a, 0x33, 0xa2, 0xe0, 0xcb, 0x82, 0x0f, 0x7d, 0x13, 0x16, 0x2f, 0xd9, 0x07, 0x41, 0x90, 0x21, + 0x6d, 0x4f, 0xc7, 0x60, 0x93, 0x8c, 0x49, 0x86, 0xa5, 0xfb, 0x1f, 0x7c, 0xf1, 0x17, 0x4b, 0x92, + 0xb1, 0x1d, 0x6d, 0x0b, 0xdb, 0xb7, 0xe4, 0xbb, 0xcc, 0xf9, 0xe6, 0xe4, 0x1c, 0xc8, 0x2a, 0xa5, + 0xaa, 0x25, 0x16, 0xd3, 0x95, 0x45, 0x63, 0x35, 0x32, 0xd1, 0x39, 0xe6, 0xb5, 0x56, 0x56, 0x91, + 0x87, 0x41, 0x93, 0x6f, 0x88, 0xf4, 0x49, 0x6b, 0x63, 0x35, 0x2f, 0x98, 0x94, 0xca, 0x32, 0xcb, + 0x95, 0x34, 0xc1, 0x90, 0x9e, 0xb6, 0xac, 0xbf, 0x4d, 0x9b, 0x45, 0x71, 0xad, 0x59, 0x5d, 0xa3, + 0x6e, 0xf9, 0x4c, 0xc3, 0x80, 0x22, 0x9b, 0x53, 0xfc, 0xd9, 0xa0, 0xb1, 0xe4, 0x19, 0x0c, 0x35, + 0x1a, 0xd5, 0xe8, 0x19, 0x96, 0x92, 0x09, 0x4c, 0xa2, 0x51, 0x34, 0x3e, 0xa1, 0xf1, 0x5f, 0xf0, + 0x03, 0x13, 0x48, 0xce, 0x60, 0xa0, 0x91, 0xcd, 0x4b, 0xb5, 0x58, 0x18, 0xb4, 0xc9, 0xd1, 0x28, + 0x1a, 0xf7, 0x28, 0x38, 0xe8, 0xa3, 0x47, 0xc8, 0x53, 0xf0, 0xb7, 0x72, 0xc9, 0x05, 0xb7, 0x49, + 0xcf, 0xf3, 0x27, 0x0e, 0xb9, 0x74, 0x40, 0x96, 0x41, 0x1c, 0x6a, 0x9a, 0x5a, 0x49, 0x83, 0x84, + 0xc0, 0xf1, 0x9c, 0x59, 0x96, 0xc0, 0x28, 0x1a, 0xc7, 0xd4, 0x9f, 0xb3, 0x5f, 0x11, 0xc4, 0x5f, + 0x34, 0xb7, 0x78, 0x50, 0xb2, 0x73, 0x88, 0xaf, 0x9d, 0xe9, 0xdf, 0x68, 0x03, 0x8f, 0xb5, 0xd9, + 0xce, 0x21, 0x5e, 0x70, 0xc9, 0xcd, 0xf7, 0xd2, 0xa3, 0x3e, 0x5d, 0x9f, 0x0e, 0x02, 0xe6, 0x2b, + 0xee, 0xcc, 0xf3, 0x16, 0x86, 0x6d, 0x9c, 0x36, 0xf4, 0x73, 0xb8, 0x37, 0x53, 0x42, 0x70, 0x6b, + 0x71, 0x5e, 0x1a, 0x7e, 0x13, 0x02, 0xf5, 0xe8, 0x70, 0x8d, 0x5e, 0xf1, 0x1b, 0xcc, 0xde, 0xc1, + 0xe3, 0xcf, 0x0d, 0xea, 0x95, 0x37, 0x5f, 0x59, 0x66, 0x1b, 0x73, 0xc8, 0x1f, 0x65, 0xdf, 0x20, + 0xd9, 0xf6, 0x1f, 0x14, 0x81, 0xa4, 0xd0, 0x9f, 0x29, 0x51, 0x2f, 0xd1, 0xa2, 0x6f, 0x48, 0x9f, + 0xae, 0xef, 0xaf, 0x7f, 0x1f, 0x01, 0x4c, 0x56, 0xee, 0xcb, 0x6e, 0x96, 0xc8, 0x7b, 0x38, 0x76, + 0x2f, 0x43, 0x4e, 0xf3, 0xad, 0x39, 0xcb, 0x3b, 0x63, 0x92, 0x9e, 0xed, 0xe5, 0x43, 0xb4, 0x57, + 0x11, 0xb9, 0x84, 0x3b, 0xa1, 0x9b, 0xbb, 0xb4, 0xdd, 0x97, 0x4d, 0x47, 0xfb, 0x05, 0xe1, 0x6b, + 0xe3, 0x88, 0xfc, 0x80, 0x07, 0xff, 0xb7, 0x81, 0xbc, 0xd8, 0xe1, 0xdb, 0xd3, 0xeb, 0xf4, 0xe5, + 0xad, 0xb4, 0xa1, 0xdc, 0x04, 0xe1, 0xd1, 0x4c, 0x89, 0x6d, 0xc7, 0xe4, 0xfe, 0xa6, 0x55, 0x9f, + 0xdc, 0xf6, 0x7c, 0xbd, 0x68, 0x35, 0x95, 0x5a, 0x32, 0x59, 0xe5, 0x4a, 0x57, 0x45, 0x85, 0xd2, + 0x6f, 0x56, 0x11, 0x28, 0x56, 0x73, 0xd3, 0x59, 0xe3, 0x8b, 0xcd, 0x71, 0x7a, 0xd7, 0xeb, 0xde, + 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0x8f, 0x91, 0x09, 0xd4, 0xf8, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/audit/audit_log.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/audit/audit_log.pb.go new file mode 100644 index 0000000..30b080d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/audit/audit_log.pb.go @@ -0,0 +1,311 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/audit/audit_log.proto +// DO NOT EDIT! + +/* +Package audit is a generated protocol buffer package. + +It is generated from these files: + google/cloud/audit/audit_log.proto + +It has these top-level messages: + AuditLog + AuthenticationInfo + AuthorizationInfo + RequestMetadata +*/ +package audit + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" +import google_protobuf2 "github.com/golang/protobuf/ptypes/struct" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Common audit log format for Google Cloud Platform API operations. +type AuditLog struct { + // The name of the API service performing the operation. For example, + // `"datastore.googleapis.com"`. + ServiceName string `protobuf:"bytes,7,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // The name of the service method or operation. + // For API calls, this should be the name of the API method. + // For example, + // + // "google.datastore.v1.Datastore.RunQuery" + // "google.logging.v1.LoggingService.DeleteLog" + MethodName string `protobuf:"bytes,8,opt,name=method_name,json=methodName" json:"method_name,omitempty"` + // The resource or collection that is the target of the operation. + // The name is a scheme-less URI, not including the API service name. + // For example: + // + // "shelves/SHELF_ID/books" + // "shelves/SHELF_ID/books/BOOK_ID" + ResourceName string `protobuf:"bytes,11,opt,name=resource_name,json=resourceName" json:"resource_name,omitempty"` + // The number of items returned from a List or Query API method, + // if applicable. + NumResponseItems int64 `protobuf:"varint,12,opt,name=num_response_items,json=numResponseItems" json:"num_response_items,omitempty"` + // The status of the overall operation. + Status *google_rpc.Status `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"` + // Authentication information. + AuthenticationInfo *AuthenticationInfo `protobuf:"bytes,3,opt,name=authentication_info,json=authenticationInfo" json:"authentication_info,omitempty"` + // Authorization information. If there are multiple + // resources or permissions involved, then there is + // one AuthorizationInfo element for each {resource, permission} tuple. + AuthorizationInfo []*AuthorizationInfo `protobuf:"bytes,9,rep,name=authorization_info,json=authorizationInfo" json:"authorization_info,omitempty"` + // Metadata about the operation. + RequestMetadata *RequestMetadata `protobuf:"bytes,4,opt,name=request_metadata,json=requestMetadata" json:"request_metadata,omitempty"` + // The operation request. This may not include all request parameters, + // such as those that are too large, privacy-sensitive, or duplicated + // elsewhere in the log record. + // It should never include user-generated data, such as file contents. + // When the JSON object represented here has a proto equivalent, the proto + // name will be indicated in the `@type` property. + Request *google_protobuf2.Struct `protobuf:"bytes,16,opt,name=request" json:"request,omitempty"` + // The operation response. This may not include all response elements, + // such as those that are too large, privacy-sensitive, or duplicated + // elsewhere in the log record. + // It should never include user-generated data, such as file contents. + // When the JSON object represented here has a proto equivalent, the proto + // name will be indicated in the `@type` property. + Response *google_protobuf2.Struct `protobuf:"bytes,17,opt,name=response" json:"response,omitempty"` + // Other service-specific data about the request, response, and other + // activities. + ServiceData *google_protobuf1.Any `protobuf:"bytes,15,opt,name=service_data,json=serviceData" json:"service_data,omitempty"` +} + +func (m *AuditLog) Reset() { *m = AuditLog{} } +func (m *AuditLog) String() string { return proto.CompactTextString(m) } +func (*AuditLog) ProtoMessage() {} +func (*AuditLog) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AuditLog) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *AuditLog) GetMethodName() string { + if m != nil { + return m.MethodName + } + return "" +} + +func (m *AuditLog) GetResourceName() string { + if m != nil { + return m.ResourceName + } + return "" +} + +func (m *AuditLog) GetNumResponseItems() int64 { + if m != nil { + return m.NumResponseItems + } + return 0 +} + +func (m *AuditLog) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func (m *AuditLog) GetAuthenticationInfo() *AuthenticationInfo { + if m != nil { + return m.AuthenticationInfo + } + return nil +} + +func (m *AuditLog) GetAuthorizationInfo() []*AuthorizationInfo { + if m != nil { + return m.AuthorizationInfo + } + return nil +} + +func (m *AuditLog) GetRequestMetadata() *RequestMetadata { + if m != nil { + return m.RequestMetadata + } + return nil +} + +func (m *AuditLog) GetRequest() *google_protobuf2.Struct { + if m != nil { + return m.Request + } + return nil +} + +func (m *AuditLog) GetResponse() *google_protobuf2.Struct { + if m != nil { + return m.Response + } + return nil +} + +func (m *AuditLog) GetServiceData() *google_protobuf1.Any { + if m != nil { + return m.ServiceData + } + return nil +} + +// Authentication information for the operation. +type AuthenticationInfo struct { + // The email address of the authenticated user making the request. + PrincipalEmail string `protobuf:"bytes,1,opt,name=principal_email,json=principalEmail" json:"principal_email,omitempty"` +} + +func (m *AuthenticationInfo) Reset() { *m = AuthenticationInfo{} } +func (m *AuthenticationInfo) String() string { return proto.CompactTextString(m) } +func (*AuthenticationInfo) ProtoMessage() {} +func (*AuthenticationInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *AuthenticationInfo) GetPrincipalEmail() string { + if m != nil { + return m.PrincipalEmail + } + return "" +} + +// Authorization information for the operation. +type AuthorizationInfo struct { + // The resource being accessed, as a REST-style string. For example: + // + // bigquery.googlapis.com/projects/PROJECTID/datasets/DATASETID + Resource string `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` + // The required IAM permission. + Permission string `protobuf:"bytes,2,opt,name=permission" json:"permission,omitempty"` + // Whether or not authorization for `resource` and `permission` + // was granted. + Granted bool `protobuf:"varint,3,opt,name=granted" json:"granted,omitempty"` +} + +func (m *AuthorizationInfo) Reset() { *m = AuthorizationInfo{} } +func (m *AuthorizationInfo) String() string { return proto.CompactTextString(m) } +func (*AuthorizationInfo) ProtoMessage() {} +func (*AuthorizationInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *AuthorizationInfo) GetResource() string { + if m != nil { + return m.Resource + } + return "" +} + +func (m *AuthorizationInfo) GetPermission() string { + if m != nil { + return m.Permission + } + return "" +} + +func (m *AuthorizationInfo) GetGranted() bool { + if m != nil { + return m.Granted + } + return false +} + +// Metadata about the request. +type RequestMetadata struct { + // The IP address of the caller. + CallerIp string `protobuf:"bytes,1,opt,name=caller_ip,json=callerIp" json:"caller_ip,omitempty"` + // The user agent of the caller. + // This information is not authenticated and should be treated accordingly. + // For example: + // + // + `google-api-python-client/1.4.0`: + // The request was made by the Google API client for Python. + // + `Cloud SDK Command Line Tool apitools-client/1.0 gcloud/0.9.62`: + // The request was made by the Google Cloud SDK CLI (gcloud). + // + `AppEngine-Google; (+http://code.google.com/appengine; appid: s~my-project`: + // The request was made from the `my-project` App Engine app. + CallerSuppliedUserAgent string `protobuf:"bytes,2,opt,name=caller_supplied_user_agent,json=callerSuppliedUserAgent" json:"caller_supplied_user_agent,omitempty"` +} + +func (m *RequestMetadata) Reset() { *m = RequestMetadata{} } +func (m *RequestMetadata) String() string { return proto.CompactTextString(m) } +func (*RequestMetadata) ProtoMessage() {} +func (*RequestMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *RequestMetadata) GetCallerIp() string { + if m != nil { + return m.CallerIp + } + return "" +} + +func (m *RequestMetadata) GetCallerSuppliedUserAgent() string { + if m != nil { + return m.CallerSuppliedUserAgent + } + return "" +} + +func init() { + proto.RegisterType((*AuditLog)(nil), "google.cloud.audit.AuditLog") + proto.RegisterType((*AuthenticationInfo)(nil), "google.cloud.audit.AuthenticationInfo") + proto.RegisterType((*AuthorizationInfo)(nil), "google.cloud.audit.AuthorizationInfo") + proto.RegisterType((*RequestMetadata)(nil), "google.cloud.audit.RequestMetadata") +} + +func init() { proto.RegisterFile("google/cloud/audit/audit_log.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 576 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0x5f, 0x6f, 0xd3, 0x30, + 0x14, 0xc5, 0x55, 0x36, 0x6d, 0xad, 0xbb, 0xd1, 0xd6, 0x20, 0x1a, 0xca, 0x04, 0xa5, 0x13, 0x50, + 0x21, 0x94, 0x88, 0xed, 0x61, 0x0f, 0x13, 0x0f, 0x9d, 0xe0, 0xa1, 0x12, 0x4c, 0x53, 0x0a, 0x42, + 0xe2, 0x25, 0x72, 0x93, 0xdb, 0xcc, 0x22, 0xb1, 0x8d, 0xff, 0x20, 0x8d, 0xef, 0xcc, 0x77, 0x40, + 0xbd, 0x71, 0x4a, 0xd7, 0x0e, 0x5e, 0x2c, 0xf9, 0x9c, 0xdf, 0xbd, 0x76, 0xaf, 0x4f, 0x43, 0x46, + 0xb9, 0x94, 0x79, 0x01, 0x51, 0x5a, 0x48, 0x97, 0x45, 0xcc, 0x65, 0xdc, 0x56, 0x6b, 0x52, 0xc8, + 0x3c, 0x54, 0x5a, 0x5a, 0x49, 0x69, 0xc5, 0x84, 0xc8, 0x84, 0xe8, 0x0e, 0x8e, 0x7c, 0x1d, 0x53, + 0x3c, 0x62, 0x42, 0x48, 0xcb, 0x2c, 0x97, 0xc2, 0x54, 0x15, 0x83, 0xc7, 0xde, 0xc5, 0xdd, 0xdc, + 0x2d, 0x22, 0x26, 0x6e, 0xbc, 0x75, 0xb4, 0x69, 0x19, 0xab, 0x5d, 0x6a, 0xbd, 0xdb, 0xf7, 0xae, + 0x56, 0x69, 0x64, 0x2c, 0xb3, 0xce, 0x77, 0x1c, 0xfd, 0xde, 0x25, 0xcd, 0xc9, 0xf2, 0xe4, 0x8f, + 0x32, 0xa7, 0xcf, 0xc9, 0x81, 0x01, 0xfd, 0x93, 0xa7, 0x90, 0x08, 0x56, 0x42, 0xb0, 0x3f, 0x6c, + 0x8c, 0x5b, 0x71, 0xdb, 0x6b, 0x97, 0xac, 0x04, 0xfa, 0x8c, 0xb4, 0x4b, 0xb0, 0xd7, 0x32, 0xab, + 0x88, 0x26, 0x12, 0xa4, 0x92, 0x10, 0x38, 0x26, 0x87, 0x1a, 0x8c, 0x74, 0xba, 0x6e, 0xd2, 0x46, + 0xe4, 0xa0, 0x16, 0x11, 0x7a, 0x43, 0xa8, 0x70, 0x65, 0xa2, 0xc1, 0x28, 0x29, 0x0c, 0x24, 0xdc, + 0x42, 0x69, 0x82, 0x83, 0x61, 0x63, 0xbc, 0x13, 0x77, 0x85, 0x2b, 0x63, 0x6f, 0x4c, 0x97, 0x3a, + 0x7d, 0x4d, 0xf6, 0xaa, 0x3b, 0x07, 0xf7, 0x86, 0x8d, 0x71, 0xfb, 0x84, 0x86, 0x7e, 0x70, 0x5a, + 0xa5, 0xe1, 0x0c, 0x9d, 0xd8, 0x13, 0xf4, 0x2b, 0x79, 0xc0, 0x9c, 0xbd, 0x06, 0x61, 0x79, 0x8a, + 0xa3, 0x4b, 0xb8, 0x58, 0xc8, 0x60, 0x07, 0x0b, 0x5f, 0x86, 0xdb, 0x13, 0x0f, 0x27, 0xb7, 0xf0, + 0xa9, 0x58, 0xc8, 0x98, 0xb2, 0x2d, 0x8d, 0x7e, 0x26, 0xa8, 0x4a, 0xcd, 0x7f, 0xad, 0xf5, 0x6d, + 0x0d, 0x77, 0xc6, 0xed, 0x93, 0x17, 0xff, 0xea, 0xbb, 0xa2, 0xb1, 0x6d, 0x8f, 0x6d, 0x4a, 0xf4, + 0x92, 0x74, 0x35, 0xfc, 0x70, 0x60, 0x6c, 0x52, 0x82, 0x65, 0x19, 0xb3, 0x2c, 0xd8, 0xc5, 0xbb, + 0x1e, 0xdf, 0xd5, 0x33, 0xae, 0xd8, 0x4f, 0x1e, 0x8d, 0x3b, 0xfa, 0xb6, 0x40, 0xdf, 0x92, 0x7d, + 0x2f, 0x05, 0x5d, 0x6c, 0xd3, 0xaf, 0xdb, 0xd4, 0xb9, 0x08, 0x67, 0x98, 0x8b, 0xb8, 0xe6, 0xe8, + 0x29, 0x69, 0xd6, 0xef, 0x10, 0xf4, 0xfe, 0x5f, 0xb3, 0x02, 0xe9, 0xd9, 0xdf, 0xa4, 0xe0, 0x9d, + 0x3b, 0x58, 0xf8, 0x70, 0xab, 0x70, 0x22, 0x6e, 0x56, 0xf9, 0x79, 0xcf, 0x2c, 0x1b, 0xbd, 0x23, + 0x74, 0x7b, 0xe0, 0xf4, 0x15, 0xe9, 0x28, 0xcd, 0x45, 0xca, 0x15, 0x2b, 0x12, 0x28, 0x19, 0x2f, + 0x82, 0x06, 0xc6, 0xe6, 0xfe, 0x4a, 0xfe, 0xb0, 0x54, 0x47, 0x9c, 0xf4, 0xb6, 0xe6, 0x4a, 0x07, + 0xf8, 0x0b, 0x30, 0x5d, 0xbe, 0x6c, 0xb5, 0xa7, 0x4f, 0x09, 0x51, 0xa0, 0x4b, 0x6e, 0x0c, 0x97, + 0x02, 0xf3, 0xd3, 0x8a, 0xd7, 0x14, 0x1a, 0x90, 0xfd, 0x5c, 0x33, 0x61, 0x21, 0xc3, 0x8c, 0x34, + 0xe3, 0x7a, 0x3b, 0xfa, 0x4e, 0x3a, 0x1b, 0xe3, 0xa6, 0x4f, 0x48, 0x2b, 0x65, 0x45, 0x01, 0x3a, + 0xe1, 0xaa, 0x3e, 0xa9, 0x12, 0xa6, 0x8a, 0x9e, 0x93, 0x81, 0x37, 0x8d, 0x53, 0xaa, 0xe0, 0x90, + 0x25, 0xce, 0x80, 0x4e, 0x58, 0x0e, 0xc2, 0xfa, 0x93, 0xfb, 0x15, 0x31, 0xf3, 0xc0, 0x17, 0x03, + 0x7a, 0xb2, 0xb4, 0x2f, 0xe6, 0xe4, 0x51, 0x2a, 0xcb, 0x3b, 0x9e, 0xfc, 0xe2, 0xb0, 0xfe, 0x77, + 0x5e, 0x2d, 0x67, 0x7a, 0xd5, 0xf8, 0x76, 0xe6, 0xa1, 0x5c, 0x16, 0x4c, 0xe4, 0xa1, 0xd4, 0x79, + 0x94, 0x83, 0xc0, 0x89, 0x47, 0x95, 0xc5, 0x14, 0x37, 0xeb, 0x1f, 0x9e, 0x73, 0x5c, 0xe7, 0x7b, + 0xc8, 0x9c, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x90, 0xe4, 0x37, 0xbf, 0x9b, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/billing/v1/cloud_billing.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/billing/v1/cloud_billing.pb.go new file mode 100644 index 0000000..67d476b --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/billing/v1/cloud_billing.pb.go @@ -0,0 +1,689 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/billing/v1/cloud_billing.proto +// DO NOT EDIT! + +/* +Package billing is a generated protocol buffer package. + +It is generated from these files: + google/cloud/billing/v1/cloud_billing.proto + +It has these top-level messages: + BillingAccount + ProjectBillingInfo + GetBillingAccountRequest + ListBillingAccountsRequest + ListBillingAccountsResponse + ListProjectBillingInfoRequest + ListProjectBillingInfoResponse + GetProjectBillingInfoRequest + UpdateProjectBillingInfoRequest +*/ +package billing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A billing account in [Google Cloud +// Console](https://console.cloud.google.com/). You can assign a billing account +// to one or more projects. +type BillingAccount struct { + // The resource name of the billing account. The resource name has the form + // `billingAccounts/{billing_account_id}`. For example, + // `billingAccounts/012345-567890-ABCDEF` would be the resource name for + // billing account `012345-567890-ABCDEF`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // True if the billing account is open, and will therefore be charged for any + // usage on associated projects. False if the billing account is closed, and + // therefore projects associated with it will be unable to use paid services. + Open bool `protobuf:"varint,2,opt,name=open" json:"open,omitempty"` + // The display name given to the billing account, such as `My Billing + // Account`. This name is displayed in the Google Cloud Console. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName" json:"display_name,omitempty"` +} + +func (m *BillingAccount) Reset() { *m = BillingAccount{} } +func (m *BillingAccount) String() string { return proto.CompactTextString(m) } +func (*BillingAccount) ProtoMessage() {} +func (*BillingAccount) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *BillingAccount) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *BillingAccount) GetOpen() bool { + if m != nil { + return m.Open + } + return false +} + +func (m *BillingAccount) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +// Encapsulation of billing information for a Cloud Console project. A project +// has at most one associated billing account at a time (but a billing account +// can be assigned to multiple projects). +type ProjectBillingInfo struct { + // The resource name for the `ProjectBillingInfo`; has the form + // `projects/{project_id}/billingInfo`. For example, the resource name for the + // billing information for project `tokyo-rain-123` would be + // `projects/tokyo-rain-123/billingInfo`. This field is read-only. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The ID of the project that this `ProjectBillingInfo` represents, such as + // `tokyo-rain-123`. This is a convenience field so that you don't need to + // parse the `name` field to obtain a project ID. This field is read-only. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The resource name of the billing account associated with the project, if + // any. For example, `billingAccounts/012345-567890-ABCDEF`. + BillingAccountName string `protobuf:"bytes,3,opt,name=billing_account_name,json=billingAccountName" json:"billing_account_name,omitempty"` + // True if the project is associated with an open billing account, to which + // usage on the project is charged. False if the project is associated with a + // closed billing account, or no billing account at all, and therefore cannot + // use paid services. This field is read-only. + BillingEnabled bool `protobuf:"varint,4,opt,name=billing_enabled,json=billingEnabled" json:"billing_enabled,omitempty"` +} + +func (m *ProjectBillingInfo) Reset() { *m = ProjectBillingInfo{} } +func (m *ProjectBillingInfo) String() string { return proto.CompactTextString(m) } +func (*ProjectBillingInfo) ProtoMessage() {} +func (*ProjectBillingInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ProjectBillingInfo) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ProjectBillingInfo) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ProjectBillingInfo) GetBillingAccountName() string { + if m != nil { + return m.BillingAccountName + } + return "" +} + +func (m *ProjectBillingInfo) GetBillingEnabled() bool { + if m != nil { + return m.BillingEnabled + } + return false +} + +// Request message for `GetBillingAccount`. +type GetBillingAccountRequest struct { + // The resource name of the billing account to retrieve. For example, + // `billingAccounts/012345-567890-ABCDEF`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetBillingAccountRequest) Reset() { *m = GetBillingAccountRequest{} } +func (m *GetBillingAccountRequest) String() string { return proto.CompactTextString(m) } +func (*GetBillingAccountRequest) ProtoMessage() {} +func (*GetBillingAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *GetBillingAccountRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `ListBillingAccounts`. +type ListBillingAccountsRequest struct { + // Requested page size. The maximum page size is 100; this is also the + // default. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // A token identifying a page of results to return. This should be a + // `next_page_token` value returned from a previous `ListBillingAccounts` + // call. If unspecified, the first page of results is returned. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListBillingAccountsRequest) Reset() { *m = ListBillingAccountsRequest{} } +func (m *ListBillingAccountsRequest) String() string { return proto.CompactTextString(m) } +func (*ListBillingAccountsRequest) ProtoMessage() {} +func (*ListBillingAccountsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ListBillingAccountsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListBillingAccountsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for `ListBillingAccounts`. +type ListBillingAccountsResponse struct { + // A list of billing accounts. + BillingAccounts []*BillingAccount `protobuf:"bytes,1,rep,name=billing_accounts,json=billingAccounts" json:"billing_accounts,omitempty"` + // A token to retrieve the next page of results. To retrieve the next page, + // call `ListBillingAccounts` again with the `page_token` field set to this + // value. This field is empty if there are no more results to retrieve. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListBillingAccountsResponse) Reset() { *m = ListBillingAccountsResponse{} } +func (m *ListBillingAccountsResponse) String() string { return proto.CompactTextString(m) } +func (*ListBillingAccountsResponse) ProtoMessage() {} +func (*ListBillingAccountsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ListBillingAccountsResponse) GetBillingAccounts() []*BillingAccount { + if m != nil { + return m.BillingAccounts + } + return nil +} + +func (m *ListBillingAccountsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for `ListProjectBillingInfo`. +type ListProjectBillingInfoRequest struct { + // The resource name of the billing account associated with the projects that + // you want to list. For example, `billingAccounts/012345-567890-ABCDEF`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Requested page size. The maximum page size is 100; this is also the + // default. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // A token identifying a page of results to be returned. This should be a + // `next_page_token` value returned from a previous `ListProjectBillingInfo` + // call. If unspecified, the first page of results is returned. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListProjectBillingInfoRequest) Reset() { *m = ListProjectBillingInfoRequest{} } +func (m *ListProjectBillingInfoRequest) String() string { return proto.CompactTextString(m) } +func (*ListProjectBillingInfoRequest) ProtoMessage() {} +func (*ListProjectBillingInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ListProjectBillingInfoRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListProjectBillingInfoRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListProjectBillingInfoRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Request message for `ListProjectBillingInfoResponse`. +type ListProjectBillingInfoResponse struct { + // A list of `ProjectBillingInfo` resources representing the projects + // associated with the billing account. + ProjectBillingInfo []*ProjectBillingInfo `protobuf:"bytes,1,rep,name=project_billing_info,json=projectBillingInfo" json:"project_billing_info,omitempty"` + // A token to retrieve the next page of results. To retrieve the next page, + // call `ListProjectBillingInfo` again with the `page_token` field set to this + // value. This field is empty if there are no more results to retrieve. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListProjectBillingInfoResponse) Reset() { *m = ListProjectBillingInfoResponse{} } +func (m *ListProjectBillingInfoResponse) String() string { return proto.CompactTextString(m) } +func (*ListProjectBillingInfoResponse) ProtoMessage() {} +func (*ListProjectBillingInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ListProjectBillingInfoResponse) GetProjectBillingInfo() []*ProjectBillingInfo { + if m != nil { + return m.ProjectBillingInfo + } + return nil +} + +func (m *ListProjectBillingInfoResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for `GetProjectBillingInfo`. +type GetProjectBillingInfoRequest struct { + // The resource name of the project for which billing information is + // retrieved. For example, `projects/tokyo-rain-123`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetProjectBillingInfoRequest) Reset() { *m = GetProjectBillingInfoRequest{} } +func (m *GetProjectBillingInfoRequest) String() string { return proto.CompactTextString(m) } +func (*GetProjectBillingInfoRequest) ProtoMessage() {} +func (*GetProjectBillingInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *GetProjectBillingInfoRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `UpdateProjectBillingInfo`. +type UpdateProjectBillingInfoRequest struct { + // The resource name of the project associated with the billing information + // that you want to update. For example, `projects/tokyo-rain-123`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The new billing information for the project. Read-only fields are ignored; + // thus, you may leave empty all fields except `billing_account_name`. + ProjectBillingInfo *ProjectBillingInfo `protobuf:"bytes,2,opt,name=project_billing_info,json=projectBillingInfo" json:"project_billing_info,omitempty"` +} + +func (m *UpdateProjectBillingInfoRequest) Reset() { *m = UpdateProjectBillingInfoRequest{} } +func (m *UpdateProjectBillingInfoRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateProjectBillingInfoRequest) ProtoMessage() {} +func (*UpdateProjectBillingInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *UpdateProjectBillingInfoRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateProjectBillingInfoRequest) GetProjectBillingInfo() *ProjectBillingInfo { + if m != nil { + return m.ProjectBillingInfo + } + return nil +} + +func init() { + proto.RegisterType((*BillingAccount)(nil), "google.cloud.billing.v1.BillingAccount") + proto.RegisterType((*ProjectBillingInfo)(nil), "google.cloud.billing.v1.ProjectBillingInfo") + proto.RegisterType((*GetBillingAccountRequest)(nil), "google.cloud.billing.v1.GetBillingAccountRequest") + proto.RegisterType((*ListBillingAccountsRequest)(nil), "google.cloud.billing.v1.ListBillingAccountsRequest") + proto.RegisterType((*ListBillingAccountsResponse)(nil), "google.cloud.billing.v1.ListBillingAccountsResponse") + proto.RegisterType((*ListProjectBillingInfoRequest)(nil), "google.cloud.billing.v1.ListProjectBillingInfoRequest") + proto.RegisterType((*ListProjectBillingInfoResponse)(nil), "google.cloud.billing.v1.ListProjectBillingInfoResponse") + proto.RegisterType((*GetProjectBillingInfoRequest)(nil), "google.cloud.billing.v1.GetProjectBillingInfoRequest") + proto.RegisterType((*UpdateProjectBillingInfoRequest)(nil), "google.cloud.billing.v1.UpdateProjectBillingInfoRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for CloudBilling service + +type CloudBillingClient interface { + // Gets information about a billing account. The current authenticated user + // must be an [owner of the billing + // account](https://support.google.com/cloud/answer/4430947). + GetBillingAccount(ctx context.Context, in *GetBillingAccountRequest, opts ...grpc.CallOption) (*BillingAccount, error) + // Lists the billing accounts that the current authenticated user + // [owns](https://support.google.com/cloud/answer/4430947). + ListBillingAccounts(ctx context.Context, in *ListBillingAccountsRequest, opts ...grpc.CallOption) (*ListBillingAccountsResponse, error) + // Lists the projects associated with a billing account. The current + // authenticated user must be an [owner of the billing + // account](https://support.google.com/cloud/answer/4430947). + ListProjectBillingInfo(ctx context.Context, in *ListProjectBillingInfoRequest, opts ...grpc.CallOption) (*ListProjectBillingInfoResponse, error) + // Gets the billing information for a project. The current authenticated user + // must have [permission to view the + // project](https://cloud.google.com/docs/permissions-overview#h.bgs0oxofvnoo + // ). + GetProjectBillingInfo(ctx context.Context, in *GetProjectBillingInfoRequest, opts ...grpc.CallOption) (*ProjectBillingInfo, error) + // Sets or updates the billing account associated with a project. You specify + // the new billing account by setting the `billing_account_name` in the + // `ProjectBillingInfo` resource to the resource name of a billing account. + // Associating a project with an open billing account enables billing on the + // project and allows charges for resource usage. If the project already had a + // billing account, this method changes the billing account used for resource + // usage charges. + // + // *Note:* Incurred charges that have not yet been reported in the transaction + // history of the Google Cloud Console may be billed to the new billing + // account, even if the charge occurred before the new billing account was + // assigned to the project. + // + // The current authenticated user must have ownership privileges for both the + // [project](https://cloud.google.com/docs/permissions-overview#h.bgs0oxofvnoo + // ) and the [billing + // account](https://support.google.com/cloud/answer/4430947). + // + // You can disable billing on the project by setting the + // `billing_account_name` field to empty. This action disassociates the + // current billing account from the project. Any billable activity of your + // in-use services will stop, and your application could stop functioning as + // expected. Any unbilled charges to date will be billed to the previously + // associated account. The current authenticated user must be either an owner + // of the project or an owner of the billing account for the project. + // + // Note that associating a project with a *closed* billing account will have + // much the same effect as disabling billing on the project: any paid + // resources used by the project will be shut down. Thus, unless you wish to + // disable billing, you should always call this method with the name of an + // *open* billing account. + UpdateProjectBillingInfo(ctx context.Context, in *UpdateProjectBillingInfoRequest, opts ...grpc.CallOption) (*ProjectBillingInfo, error) +} + +type cloudBillingClient struct { + cc *grpc.ClientConn +} + +func NewCloudBillingClient(cc *grpc.ClientConn) CloudBillingClient { + return &cloudBillingClient{cc} +} + +func (c *cloudBillingClient) GetBillingAccount(ctx context.Context, in *GetBillingAccountRequest, opts ...grpc.CallOption) (*BillingAccount, error) { + out := new(BillingAccount) + err := grpc.Invoke(ctx, "/google.cloud.billing.v1.CloudBilling/GetBillingAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBillingClient) ListBillingAccounts(ctx context.Context, in *ListBillingAccountsRequest, opts ...grpc.CallOption) (*ListBillingAccountsResponse, error) { + out := new(ListBillingAccountsResponse) + err := grpc.Invoke(ctx, "/google.cloud.billing.v1.CloudBilling/ListBillingAccounts", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBillingClient) ListProjectBillingInfo(ctx context.Context, in *ListProjectBillingInfoRequest, opts ...grpc.CallOption) (*ListProjectBillingInfoResponse, error) { + out := new(ListProjectBillingInfoResponse) + err := grpc.Invoke(ctx, "/google.cloud.billing.v1.CloudBilling/ListProjectBillingInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBillingClient) GetProjectBillingInfo(ctx context.Context, in *GetProjectBillingInfoRequest, opts ...grpc.CallOption) (*ProjectBillingInfo, error) { + out := new(ProjectBillingInfo) + err := grpc.Invoke(ctx, "/google.cloud.billing.v1.CloudBilling/GetProjectBillingInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBillingClient) UpdateProjectBillingInfo(ctx context.Context, in *UpdateProjectBillingInfoRequest, opts ...grpc.CallOption) (*ProjectBillingInfo, error) { + out := new(ProjectBillingInfo) + err := grpc.Invoke(ctx, "/google.cloud.billing.v1.CloudBilling/UpdateProjectBillingInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for CloudBilling service + +type CloudBillingServer interface { + // Gets information about a billing account. The current authenticated user + // must be an [owner of the billing + // account](https://support.google.com/cloud/answer/4430947). + GetBillingAccount(context.Context, *GetBillingAccountRequest) (*BillingAccount, error) + // Lists the billing accounts that the current authenticated user + // [owns](https://support.google.com/cloud/answer/4430947). + ListBillingAccounts(context.Context, *ListBillingAccountsRequest) (*ListBillingAccountsResponse, error) + // Lists the projects associated with a billing account. The current + // authenticated user must be an [owner of the billing + // account](https://support.google.com/cloud/answer/4430947). + ListProjectBillingInfo(context.Context, *ListProjectBillingInfoRequest) (*ListProjectBillingInfoResponse, error) + // Gets the billing information for a project. The current authenticated user + // must have [permission to view the + // project](https://cloud.google.com/docs/permissions-overview#h.bgs0oxofvnoo + // ). + GetProjectBillingInfo(context.Context, *GetProjectBillingInfoRequest) (*ProjectBillingInfo, error) + // Sets or updates the billing account associated with a project. You specify + // the new billing account by setting the `billing_account_name` in the + // `ProjectBillingInfo` resource to the resource name of a billing account. + // Associating a project with an open billing account enables billing on the + // project and allows charges for resource usage. If the project already had a + // billing account, this method changes the billing account used for resource + // usage charges. + // + // *Note:* Incurred charges that have not yet been reported in the transaction + // history of the Google Cloud Console may be billed to the new billing + // account, even if the charge occurred before the new billing account was + // assigned to the project. + // + // The current authenticated user must have ownership privileges for both the + // [project](https://cloud.google.com/docs/permissions-overview#h.bgs0oxofvnoo + // ) and the [billing + // account](https://support.google.com/cloud/answer/4430947). + // + // You can disable billing on the project by setting the + // `billing_account_name` field to empty. This action disassociates the + // current billing account from the project. Any billable activity of your + // in-use services will stop, and your application could stop functioning as + // expected. Any unbilled charges to date will be billed to the previously + // associated account. The current authenticated user must be either an owner + // of the project or an owner of the billing account for the project. + // + // Note that associating a project with a *closed* billing account will have + // much the same effect as disabling billing on the project: any paid + // resources used by the project will be shut down. Thus, unless you wish to + // disable billing, you should always call this method with the name of an + // *open* billing account. + UpdateProjectBillingInfo(context.Context, *UpdateProjectBillingInfoRequest) (*ProjectBillingInfo, error) +} + +func RegisterCloudBillingServer(s *grpc.Server, srv CloudBillingServer) { + s.RegisterService(&_CloudBilling_serviceDesc, srv) +} + +func _CloudBilling_GetBillingAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBillingAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBillingServer).GetBillingAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.billing.v1.CloudBilling/GetBillingAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBillingServer).GetBillingAccount(ctx, req.(*GetBillingAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBilling_ListBillingAccounts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListBillingAccountsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBillingServer).ListBillingAccounts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.billing.v1.CloudBilling/ListBillingAccounts", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBillingServer).ListBillingAccounts(ctx, req.(*ListBillingAccountsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBilling_ListProjectBillingInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListProjectBillingInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBillingServer).ListProjectBillingInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.billing.v1.CloudBilling/ListProjectBillingInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBillingServer).ListProjectBillingInfo(ctx, req.(*ListProjectBillingInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBilling_GetProjectBillingInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetProjectBillingInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBillingServer).GetProjectBillingInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.billing.v1.CloudBilling/GetProjectBillingInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBillingServer).GetProjectBillingInfo(ctx, req.(*GetProjectBillingInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBilling_UpdateProjectBillingInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateProjectBillingInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBillingServer).UpdateProjectBillingInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.billing.v1.CloudBilling/UpdateProjectBillingInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBillingServer).UpdateProjectBillingInfo(ctx, req.(*UpdateProjectBillingInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _CloudBilling_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.billing.v1.CloudBilling", + HandlerType: (*CloudBillingServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetBillingAccount", + Handler: _CloudBilling_GetBillingAccount_Handler, + }, + { + MethodName: "ListBillingAccounts", + Handler: _CloudBilling_ListBillingAccounts_Handler, + }, + { + MethodName: "ListProjectBillingInfo", + Handler: _CloudBilling_ListProjectBillingInfo_Handler, + }, + { + MethodName: "GetProjectBillingInfo", + Handler: _CloudBilling_GetProjectBillingInfo_Handler, + }, + { + MethodName: "UpdateProjectBillingInfo", + Handler: _CloudBilling_UpdateProjectBillingInfo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/billing/v1/cloud_billing.proto", +} + +func init() { proto.RegisterFile("google/cloud/billing/v1/cloud_billing.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 667 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x4e, 0xd4, 0x40, + 0x14, 0xce, 0x00, 0x12, 0xf6, 0x80, 0x20, 0x03, 0xe8, 0x66, 0x17, 0x10, 0xea, 0x0f, 0x28, 0xb1, + 0x15, 0xf0, 0xdf, 0xa8, 0x11, 0x63, 0x08, 0x89, 0x31, 0x9b, 0xaa, 0x89, 0xd1, 0x98, 0x66, 0x76, + 0x3b, 0x34, 0xd5, 0x32, 0x53, 0x77, 0x0a, 0x51, 0x8c, 0x37, 0xbe, 0x82, 0x7a, 0xe1, 0x85, 0x37, + 0x5e, 0xe8, 0x2b, 0x78, 0xed, 0x2b, 0xf8, 0x0a, 0xde, 0xfb, 0x0a, 0x66, 0xa6, 0x53, 0x65, 0xbb, + 0x9d, 0x85, 0xc6, 0xbb, 0xe6, 0x9b, 0x73, 0xfa, 0x7d, 0xe7, 0x9b, 0xef, 0x6c, 0x17, 0x96, 0x02, + 0xce, 0x83, 0x88, 0x3a, 0xad, 0x88, 0x6f, 0xfb, 0x4e, 0x33, 0x8c, 0xa2, 0x90, 0x05, 0xce, 0xce, + 0x72, 0x0a, 0x78, 0x1a, 0xb0, 0xe3, 0x36, 0x4f, 0x38, 0x3e, 0x96, 0x16, 0xdb, 0xea, 0xcc, 0xce, + 0xce, 0x76, 0x96, 0x6b, 0xd3, 0xfa, 0x2d, 0x24, 0x0e, 0x1d, 0xc2, 0x18, 0x4f, 0x48, 0x12, 0x72, + 0x26, 0xd2, 0x36, 0xeb, 0x29, 0x8c, 0xae, 0xa5, 0xb5, 0xb7, 0x5b, 0x2d, 0xbe, 0xcd, 0x12, 0x8c, + 0x61, 0x80, 0x91, 0x2d, 0x5a, 0x45, 0x73, 0x68, 0xb1, 0xe2, 0xaa, 0x67, 0x89, 0xf1, 0x98, 0xb2, + 0x6a, 0xdf, 0x1c, 0x5a, 0x1c, 0x72, 0xd5, 0x33, 0x9e, 0x87, 0x11, 0x3f, 0x14, 0x71, 0x44, 0x5e, + 0x7b, 0xaa, 0xbe, 0x5f, 0xd5, 0x0f, 0x6b, 0xec, 0x3e, 0xd9, 0xa2, 0xd6, 0x17, 0x04, 0xb8, 0xd1, + 0xe6, 0xcf, 0x69, 0x2b, 0xd1, 0x24, 0x1b, 0x6c, 0x93, 0x17, 0x32, 0xcc, 0x00, 0xc4, 0x69, 0xa5, + 0x17, 0xfa, 0x8a, 0xa7, 0xe2, 0x56, 0x34, 0xb2, 0xe1, 0xe3, 0xf3, 0x30, 0xa9, 0x47, 0xf2, 0x48, + 0xaa, 0x73, 0x2f, 0x29, 0x6e, 0x76, 0x8c, 0x20, 0xb9, 0xf1, 0x02, 0x8c, 0x65, 0x1d, 0x94, 0x91, + 0x66, 0x44, 0xfd, 0xea, 0x80, 0x52, 0x3f, 0xaa, 0xe1, 0xbb, 0x29, 0x6a, 0xd9, 0x50, 0x5d, 0xa7, + 0x49, 0xa7, 0x09, 0x2e, 0x7d, 0xb9, 0x4d, 0x45, 0xa1, 0x17, 0xd6, 0x63, 0xa8, 0xdd, 0x0b, 0x45, + 0xae, 0x41, 0x64, 0x1d, 0x75, 0xa8, 0xc4, 0x24, 0xa0, 0x9e, 0x08, 0x77, 0xd3, 0xb6, 0x43, 0xee, + 0x90, 0x04, 0x1e, 0x84, 0xbb, 0xe9, 0x90, 0xf2, 0x30, 0xe1, 0x2f, 0xb4, 0x99, 0x72, 0x48, 0x12, + 0xd0, 0x87, 0x12, 0xb0, 0x3e, 0x21, 0xa8, 0x17, 0xbe, 0x5a, 0xc4, 0x9c, 0x09, 0x8a, 0x5d, 0x38, + 0x92, 0x33, 0x41, 0x54, 0xd1, 0x5c, 0xff, 0xe2, 0xf0, 0xca, 0x82, 0x6d, 0xb8, 0x7d, 0x3b, 0x37, + 0xd7, 0x58, 0xa7, 0x53, 0x02, 0x9f, 0x86, 0x31, 0x46, 0x5f, 0x25, 0x5e, 0x97, 0xae, 0xc3, 0x12, + 0x6e, 0xfc, 0xd5, 0xc6, 0x61, 0x46, 0x4a, 0xeb, 0xbe, 0xcd, 0x1e, 0x56, 0x75, 0x9a, 0xd1, 0xd7, + 0xd3, 0x8c, 0xfe, 0xbc, 0x19, 0xdf, 0x10, 0xcc, 0x9a, 0x18, 0xb5, 0x1f, 0xcf, 0x60, 0x32, 0xcb, + 0x4c, 0xe6, 0x4b, 0xc8, 0x36, 0xb9, 0xf6, 0x64, 0xc9, 0xe8, 0x49, 0xc1, 0x2b, 0x71, 0xdc, 0x1d, + 0xd3, 0x83, 0x5a, 0xb3, 0x02, 0xd3, 0xeb, 0xb4, 0x9c, 0x33, 0xd6, 0x07, 0x04, 0xc7, 0x1f, 0xc5, + 0x3e, 0x49, 0x68, 0x39, 0x47, 0x4d, 0x23, 0x4b, 0x61, 0xff, 0x3f, 0xf2, 0xca, 0xef, 0x41, 0x18, + 0xb9, 0x23, 0x7b, 0x35, 0x88, 0x3f, 0x22, 0x18, 0xef, 0xda, 0x0e, 0xbc, 0x6c, 0xe4, 0x31, 0x6d, + 0x52, 0xed, 0xa0, 0x09, 0xb5, 0x4e, 0xbe, 0xfb, 0xf9, 0xeb, 0x7d, 0xdf, 0x2c, 0x9e, 0x96, 0x3f, + 0x74, 0x6f, 0xe4, 0xd0, 0x37, 0x72, 0x99, 0x75, 0xce, 0xbe, 0xc5, 0x9f, 0x11, 0x4c, 0x14, 0xac, + 0x0a, 0x5e, 0x35, 0xd2, 0x98, 0x77, 0xb6, 0x76, 0xa1, 0x5c, 0x53, 0x9a, 0x3e, 0xab, 0xae, 0x84, + 0x4e, 0xe1, 0x09, 0x29, 0x34, 0xbf, 0x56, 0xdf, 0x11, 0x1c, 0x2d, 0x4e, 0x2f, 0xbe, 0xd4, 0x93, + 0xcd, 0x18, 0x87, 0xda, 0xe5, 0xd2, 0x7d, 0x5a, 0xe8, 0x39, 0x25, 0x74, 0x01, 0x9f, 0xea, 0xe5, + 0xa8, 0xa3, 0xd3, 0x20, 0xf0, 0x57, 0x04, 0x53, 0x85, 0x79, 0xc6, 0x17, 0x7b, 0x5d, 0xbb, 0x59, + 0x78, 0x99, 0x54, 0x5a, 0x67, 0x94, 0xd8, 0x13, 0x78, 0xfe, 0x9f, 0xd8, 0x4c, 0x99, 0x54, 0xd9, + 0xdc, 0x23, 0xe7, 0x07, 0x82, 0xaa, 0x69, 0x87, 0xf0, 0x15, 0x23, 0xe9, 0x3e, 0x6b, 0x57, 0x4e, + 0xee, 0x2d, 0x25, 0xf7, 0x6a, 0x6d, 0x7f, 0xb9, 0xd7, 0x0a, 0x17, 0x77, 0xad, 0x0d, 0xf5, 0x16, + 0xdf, 0x32, 0x51, 0xae, 0x8d, 0xef, 0xdd, 0xc6, 0x86, 0xfc, 0x62, 0x37, 0xd0, 0x93, 0x9b, 0xba, + 0x3a, 0xe0, 0x11, 0x61, 0x81, 0xcd, 0xdb, 0x81, 0x13, 0x50, 0xa6, 0xbe, 0xe7, 0x4e, 0x7a, 0x44, + 0xe2, 0x50, 0x74, 0xfd, 0x6d, 0xb8, 0xae, 0x1f, 0x9b, 0x83, 0xaa, 0x74, 0xf5, 0x4f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xc0, 0x01, 0x24, 0x32, 0x60, 0x08, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/clusters.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/clusters.pb.go new file mode 100644 index 0000000..ff691c2 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/clusters.pb.go @@ -0,0 +1,1333 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/dataproc/v1/clusters.proto +// DO NOT EDIT! + +/* +Package dataproc is a generated protocol buffer package. + +It is generated from these files: + google/cloud/dataproc/v1/clusters.proto + google/cloud/dataproc/v1/jobs.proto + google/cloud/dataproc/v1/operations.proto + +It has these top-level messages: + Cluster + ClusterConfig + GceClusterConfig + InstanceGroupConfig + ManagedGroupConfig + DiskConfig + NodeInitializationAction + ClusterStatus + SoftwareConfig + CreateClusterRequest + UpdateClusterRequest + DeleteClusterRequest + GetClusterRequest + ListClustersRequest + ListClustersResponse + DiagnoseClusterRequest + DiagnoseClusterResults + LoggingConfig + HadoopJob + SparkJob + PySparkJob + QueryList + HiveJob + SparkSqlJob + PigJob + JobPlacement + JobStatus + JobReference + Job + SubmitJobRequest + GetJobRequest + ListJobsRequest + ListJobsResponse + CancelJobRequest + DeleteJobRequest + ClusterOperationStatus + ClusterOperationMetadata +*/ +package dataproc + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf4 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf5 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The cluster state. +type ClusterStatus_State int32 + +const ( + // The cluster state is unknown. + ClusterStatus_UNKNOWN ClusterStatus_State = 0 + // The cluster is being created and set up. It is not ready for use. + ClusterStatus_CREATING ClusterStatus_State = 1 + // The cluster is currently running and healthy. It is ready for use. + ClusterStatus_RUNNING ClusterStatus_State = 2 + // The cluster encountered an error. It is not ready for use. + ClusterStatus_ERROR ClusterStatus_State = 3 + // The cluster is being deleted. It cannot be used. + ClusterStatus_DELETING ClusterStatus_State = 4 + // The cluster is being updated. It continues to accept and process jobs. + ClusterStatus_UPDATING ClusterStatus_State = 5 +) + +var ClusterStatus_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CREATING", + 2: "RUNNING", + 3: "ERROR", + 4: "DELETING", + 5: "UPDATING", +} +var ClusterStatus_State_value = map[string]int32{ + "UNKNOWN": 0, + "CREATING": 1, + "RUNNING": 2, + "ERROR": 3, + "DELETING": 4, + "UPDATING": 5, +} + +func (x ClusterStatus_State) String() string { + return proto.EnumName(ClusterStatus_State_name, int32(x)) +} +func (ClusterStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +// Describes the identifying information, config, and status of +// a cluster of Google Compute Engine instances. +type Cluster struct { + // [Required] The Google Cloud Platform project ID that the cluster belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The cluster name. Cluster names within a project must be + // unique. Names of deleted clusters can be reused. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // [Required] The cluster config. Note that Cloud Dataproc may set + // default values, and values may change when clusters are updated. + Config *ClusterConfig `protobuf:"bytes,3,opt,name=config" json:"config,omitempty"` + // [Output-only] Cluster status. + Status *ClusterStatus `protobuf:"bytes,4,opt,name=status" json:"status,omitempty"` + // [Output-only] The previous cluster status. + StatusHistory []*ClusterStatus `protobuf:"bytes,7,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` + // [Output-only] A cluster UUID (Unique Universal Identifier). Cloud Dataproc + // generates this value when it creates the cluster. + ClusterUuid string `protobuf:"bytes,6,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` +} + +func (m *Cluster) Reset() { *m = Cluster{} } +func (m *Cluster) String() string { return proto.CompactTextString(m) } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Cluster) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *Cluster) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *Cluster) GetConfig() *ClusterConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *Cluster) GetStatus() *ClusterStatus { + if m != nil { + return m.Status + } + return nil +} + +func (m *Cluster) GetStatusHistory() []*ClusterStatus { + if m != nil { + return m.StatusHistory + } + return nil +} + +func (m *Cluster) GetClusterUuid() string { + if m != nil { + return m.ClusterUuid + } + return "" +} + +// The cluster config. +type ClusterConfig struct { + // [Optional] A Google Cloud Storage staging bucket used for sharing generated + // SSH keys and config. If you do not specify a staging bucket, Cloud + // Dataproc will determine an appropriate Cloud Storage location (US, + // ASIA, or EU) for your cluster's staging bucket according to the Google + // Compute Engine zone where your cluster is deployed, and then it will create + // and manage this project-level, per-location bucket for you. + ConfigBucket string `protobuf:"bytes,1,opt,name=config_bucket,json=configBucket" json:"config_bucket,omitempty"` + // [Required] The shared Google Compute Engine config settings for + // all instances in a cluster. + GceClusterConfig *GceClusterConfig `protobuf:"bytes,8,opt,name=gce_cluster_config,json=gceClusterConfig" json:"gce_cluster_config,omitempty"` + // [Optional] The Google Compute Engine config settings for + // the master instance in a cluster. + MasterConfig *InstanceGroupConfig `protobuf:"bytes,9,opt,name=master_config,json=masterConfig" json:"master_config,omitempty"` + // [Optional] The Google Compute Engine config settings for + // worker instances in a cluster. + WorkerConfig *InstanceGroupConfig `protobuf:"bytes,10,opt,name=worker_config,json=workerConfig" json:"worker_config,omitempty"` + // [Optional] The Google Compute Engine config settings for + // additional worker instances in a cluster. + SecondaryWorkerConfig *InstanceGroupConfig `protobuf:"bytes,12,opt,name=secondary_worker_config,json=secondaryWorkerConfig" json:"secondary_worker_config,omitempty"` + // [Optional] The config settings for software inside the cluster. + SoftwareConfig *SoftwareConfig `protobuf:"bytes,13,opt,name=software_config,json=softwareConfig" json:"software_config,omitempty"` + // [Optional] Commands to execute on each node after config is + // completed. By default, executables are run on master and all worker nodes. + // You can test a node's <code>role</code> metadata to run an executable on + // a master or worker node, as shown below using `curl` (you can also use `wget`): + // + // ROLE=$(curl -H Metadata-Flavor:Google http://metadata/computeMetadata/v1/instance/attributes/dataproc-role) + // if [[ "${ROLE}" == 'Master' ]]; then + // ... master specific actions ... + // else + // ... worker specific actions ... + // fi + InitializationActions []*NodeInitializationAction `protobuf:"bytes,11,rep,name=initialization_actions,json=initializationActions" json:"initialization_actions,omitempty"` +} + +func (m *ClusterConfig) Reset() { *m = ClusterConfig{} } +func (m *ClusterConfig) String() string { return proto.CompactTextString(m) } +func (*ClusterConfig) ProtoMessage() {} +func (*ClusterConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ClusterConfig) GetConfigBucket() string { + if m != nil { + return m.ConfigBucket + } + return "" +} + +func (m *ClusterConfig) GetGceClusterConfig() *GceClusterConfig { + if m != nil { + return m.GceClusterConfig + } + return nil +} + +func (m *ClusterConfig) GetMasterConfig() *InstanceGroupConfig { + if m != nil { + return m.MasterConfig + } + return nil +} + +func (m *ClusterConfig) GetWorkerConfig() *InstanceGroupConfig { + if m != nil { + return m.WorkerConfig + } + return nil +} + +func (m *ClusterConfig) GetSecondaryWorkerConfig() *InstanceGroupConfig { + if m != nil { + return m.SecondaryWorkerConfig + } + return nil +} + +func (m *ClusterConfig) GetSoftwareConfig() *SoftwareConfig { + if m != nil { + return m.SoftwareConfig + } + return nil +} + +func (m *ClusterConfig) GetInitializationActions() []*NodeInitializationAction { + if m != nil { + return m.InitializationActions + } + return nil +} + +// Common config settings for resources of Google Compute Engine cluster +// instances, applicable to all instances in the cluster. +type GceClusterConfig struct { + // [Required] The zone where the Google Compute Engine cluster will be located. + // Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]`. + ZoneUri string `protobuf:"bytes,1,opt,name=zone_uri,json=zoneUri" json:"zone_uri,omitempty"` + // [Optional] The Google Compute Engine network to be used for machine + // communications. Cannot be specified with subnetwork_uri. If neither + // `network_uri` nor `subnetwork_uri` is specified, the "default" network of + // the project is used, if it exists. Cannot be a "Custom Subnet Network" (see + // [Using Subnetworks](/compute/docs/subnetworks) for more information). + // Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default`. + NetworkUri string `protobuf:"bytes,2,opt,name=network_uri,json=networkUri" json:"network_uri,omitempty"` + // [Optional] The Google Compute Engine subnetwork to be used for machine + // communications. Cannot be specified with network_uri. + // Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0`. + SubnetworkUri string `protobuf:"bytes,6,opt,name=subnetwork_uri,json=subnetworkUri" json:"subnetwork_uri,omitempty"` + // [Optional] If true, all instances in the cluster will only have internal IP + // addresses. By default, clusters are not restricted to internal IP addresses, + // and will have ephemeral external IP addresses assigned to each instance. + // This `internal_ip_only` restriction can only be enabled for subnetwork + // enabled networks, and all off-cluster dependencies must be configured to be + // accessible without external IP addresses. + InternalIpOnly bool `protobuf:"varint,7,opt,name=internal_ip_only,json=internalIpOnly" json:"internal_ip_only,omitempty"` + // [Optional] The URIs of service account scopes to be included in Google + // Compute Engine instances. The following base set of scopes is always + // included: + // + // * https://www.googleapis.com/auth/cloud.useraccounts.readonly + // * https://www.googleapis.com/auth/devstorage.read_write + // * https://www.googleapis.com/auth/logging.write + // + // If no scopes are specified, the following defaults are also provided: + // + // * https://www.googleapis.com/auth/bigquery + // * https://www.googleapis.com/auth/bigtable.admin.table + // * https://www.googleapis.com/auth/bigtable.data + // * https://www.googleapis.com/auth/devstorage.full_control + ServiceAccountScopes []string `protobuf:"bytes,3,rep,name=service_account_scopes,json=serviceAccountScopes" json:"service_account_scopes,omitempty"` + // The Google Compute Engine tags to add to all instances (see + // [Labeling instances](/compute/docs/label-or-tag-resources#labeling_instances)). + Tags []string `protobuf:"bytes,4,rep,name=tags" json:"tags,omitempty"` + // The Google Compute Engine metadata entries to add to all instances (see + // [Project and instance metadata](https://cloud.google.com/compute/docs/storing-retrieving-metadata#project_and_instance_metadata)). + Metadata map[string]string `protobuf:"bytes,5,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *GceClusterConfig) Reset() { *m = GceClusterConfig{} } +func (m *GceClusterConfig) String() string { return proto.CompactTextString(m) } +func (*GceClusterConfig) ProtoMessage() {} +func (*GceClusterConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *GceClusterConfig) GetZoneUri() string { + if m != nil { + return m.ZoneUri + } + return "" +} + +func (m *GceClusterConfig) GetNetworkUri() string { + if m != nil { + return m.NetworkUri + } + return "" +} + +func (m *GceClusterConfig) GetSubnetworkUri() string { + if m != nil { + return m.SubnetworkUri + } + return "" +} + +func (m *GceClusterConfig) GetInternalIpOnly() bool { + if m != nil { + return m.InternalIpOnly + } + return false +} + +func (m *GceClusterConfig) GetServiceAccountScopes() []string { + if m != nil { + return m.ServiceAccountScopes + } + return nil +} + +func (m *GceClusterConfig) GetTags() []string { + if m != nil { + return m.Tags + } + return nil +} + +func (m *GceClusterConfig) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +// [Optional] The config settings for Google Compute Engine resources in +// an instance group, such as a master or worker group. +type InstanceGroupConfig struct { + // [Required] The number of VM instances in the instance group. + // For master instance groups, must be set to 1. + NumInstances int32 `protobuf:"varint,1,opt,name=num_instances,json=numInstances" json:"num_instances,omitempty"` + // [Optional] The list of instance names. Cloud Dataproc derives the names from + // `cluster_name`, `num_instances`, and the instance group if not set by user + // (recommended practice is to let Cloud Dataproc derive the name). + InstanceNames []string `protobuf:"bytes,2,rep,name=instance_names,json=instanceNames" json:"instance_names,omitempty"` + // [Output-only] The Google Compute Engine image resource used for cluster + // instances. Inferred from `SoftwareConfig.image_version`. + ImageUri string `protobuf:"bytes,3,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` + // [Required] The Google Compute Engine machine type used for cluster instances. + // Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`. + MachineTypeUri string `protobuf:"bytes,4,opt,name=machine_type_uri,json=machineTypeUri" json:"machine_type_uri,omitempty"` + // [Optional] Disk option config settings. + DiskConfig *DiskConfig `protobuf:"bytes,5,opt,name=disk_config,json=diskConfig" json:"disk_config,omitempty"` + // [Optional] Specifies that this instance group contains preemptible instances. + IsPreemptible bool `protobuf:"varint,6,opt,name=is_preemptible,json=isPreemptible" json:"is_preemptible,omitempty"` + // [Output-only] The config for Google Compute Engine Instance Group + // Manager that manages this group. + // This is only used for preemptible instance groups. + ManagedGroupConfig *ManagedGroupConfig `protobuf:"bytes,7,opt,name=managed_group_config,json=managedGroupConfig" json:"managed_group_config,omitempty"` +} + +func (m *InstanceGroupConfig) Reset() { *m = InstanceGroupConfig{} } +func (m *InstanceGroupConfig) String() string { return proto.CompactTextString(m) } +func (*InstanceGroupConfig) ProtoMessage() {} +func (*InstanceGroupConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *InstanceGroupConfig) GetNumInstances() int32 { + if m != nil { + return m.NumInstances + } + return 0 +} + +func (m *InstanceGroupConfig) GetInstanceNames() []string { + if m != nil { + return m.InstanceNames + } + return nil +} + +func (m *InstanceGroupConfig) GetImageUri() string { + if m != nil { + return m.ImageUri + } + return "" +} + +func (m *InstanceGroupConfig) GetMachineTypeUri() string { + if m != nil { + return m.MachineTypeUri + } + return "" +} + +func (m *InstanceGroupConfig) GetDiskConfig() *DiskConfig { + if m != nil { + return m.DiskConfig + } + return nil +} + +func (m *InstanceGroupConfig) GetIsPreemptible() bool { + if m != nil { + return m.IsPreemptible + } + return false +} + +func (m *InstanceGroupConfig) GetManagedGroupConfig() *ManagedGroupConfig { + if m != nil { + return m.ManagedGroupConfig + } + return nil +} + +// Specifies the resources used to actively manage an instance group. +type ManagedGroupConfig struct { + // [Output-only] The name of the Instance Template used for the Managed + // Instance Group. + InstanceTemplateName string `protobuf:"bytes,1,opt,name=instance_template_name,json=instanceTemplateName" json:"instance_template_name,omitempty"` + // [Output-only] The name of the Instance Group Manager for this group. + InstanceGroupManagerName string `protobuf:"bytes,2,opt,name=instance_group_manager_name,json=instanceGroupManagerName" json:"instance_group_manager_name,omitempty"` +} + +func (m *ManagedGroupConfig) Reset() { *m = ManagedGroupConfig{} } +func (m *ManagedGroupConfig) String() string { return proto.CompactTextString(m) } +func (*ManagedGroupConfig) ProtoMessage() {} +func (*ManagedGroupConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ManagedGroupConfig) GetInstanceTemplateName() string { + if m != nil { + return m.InstanceTemplateName + } + return "" +} + +func (m *ManagedGroupConfig) GetInstanceGroupManagerName() string { + if m != nil { + return m.InstanceGroupManagerName + } + return "" +} + +// Specifies the config of disk options for a group of VM instances. +type DiskConfig struct { + // [Optional] Size in GB of the boot disk (default is 500GB). + BootDiskSizeGb int32 `protobuf:"varint,1,opt,name=boot_disk_size_gb,json=bootDiskSizeGb" json:"boot_disk_size_gb,omitempty"` + // [Optional] Number of attached SSDs, from 0 to 4 (default is 0). + // If SSDs are not attached, the boot disk is used to store runtime logs and + // [HDFS](https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. + // If one or more SSDs are attached, this runtime bulk + // data is spread across them, and the boot disk contains only basic + // config and installed binaries. + NumLocalSsds int32 `protobuf:"varint,2,opt,name=num_local_ssds,json=numLocalSsds" json:"num_local_ssds,omitempty"` +} + +func (m *DiskConfig) Reset() { *m = DiskConfig{} } +func (m *DiskConfig) String() string { return proto.CompactTextString(m) } +func (*DiskConfig) ProtoMessage() {} +func (*DiskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *DiskConfig) GetBootDiskSizeGb() int32 { + if m != nil { + return m.BootDiskSizeGb + } + return 0 +} + +func (m *DiskConfig) GetNumLocalSsds() int32 { + if m != nil { + return m.NumLocalSsds + } + return 0 +} + +// Specifies an executable to run on a fully configured node and a +// timeout period for executable completion. +type NodeInitializationAction struct { + // [Required] Google Cloud Storage URI of executable file. + ExecutableFile string `protobuf:"bytes,1,opt,name=executable_file,json=executableFile" json:"executable_file,omitempty"` + // [Optional] Amount of time executable has to complete. Default is + // 10 minutes. Cluster creation fails with an explanatory error message (the + // name of the executable that caused the error and the exceeded timeout + // period) if the executable is not completed at end of the timeout period. + ExecutionTimeout *google_protobuf4.Duration `protobuf:"bytes,2,opt,name=execution_timeout,json=executionTimeout" json:"execution_timeout,omitempty"` +} + +func (m *NodeInitializationAction) Reset() { *m = NodeInitializationAction{} } +func (m *NodeInitializationAction) String() string { return proto.CompactTextString(m) } +func (*NodeInitializationAction) ProtoMessage() {} +func (*NodeInitializationAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *NodeInitializationAction) GetExecutableFile() string { + if m != nil { + return m.ExecutableFile + } + return "" +} + +func (m *NodeInitializationAction) GetExecutionTimeout() *google_protobuf4.Duration { + if m != nil { + return m.ExecutionTimeout + } + return nil +} + +// The status of a cluster and its instances. +type ClusterStatus struct { + // [Output-only] The cluster's state. + State ClusterStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1.ClusterStatus_State" json:"state,omitempty"` + // [Output-only] Optional details of cluster's state. + Detail string `protobuf:"bytes,2,opt,name=detail" json:"detail,omitempty"` + // [Output-only] Time when this state was entered. + StateStartTime *google_protobuf3.Timestamp `protobuf:"bytes,3,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` +} + +func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } +func (m *ClusterStatus) String() string { return proto.CompactTextString(m) } +func (*ClusterStatus) ProtoMessage() {} +func (*ClusterStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ClusterStatus) GetState() ClusterStatus_State { + if m != nil { + return m.State + } + return ClusterStatus_UNKNOWN +} + +func (m *ClusterStatus) GetDetail() string { + if m != nil { + return m.Detail + } + return "" +} + +func (m *ClusterStatus) GetStateStartTime() *google_protobuf3.Timestamp { + if m != nil { + return m.StateStartTime + } + return nil +} + +// Specifies the selection and config of software inside the cluster. +type SoftwareConfig struct { + // [Optional] The version of software inside the cluster. It must match the + // regular expression `[0-9]+\.[0-9]+`. If unspecified, it defaults to the + // latest version (see [Cloud Dataproc Versioning](/dataproc/versioning)). + ImageVersion string `protobuf:"bytes,1,opt,name=image_version,json=imageVersion" json:"image_version,omitempty"` + // [Optional] The properties to set on daemon config files. + // + // Property keys are specified in `prefix:property` format, such as + // `core:fs.defaultFS`. The following are supported prefixes + // and their mappings: + // + // * core: `core-site.xml` + // * hdfs: `hdfs-site.xml` + // * mapred: `mapred-site.xml` + // * yarn: `yarn-site.xml` + // * hive: `hive-site.xml` + // * pig: `pig.properties` + // * spark: `spark-defaults.conf` + Properties map[string]string `protobuf:"bytes,2,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *SoftwareConfig) Reset() { *m = SoftwareConfig{} } +func (m *SoftwareConfig) String() string { return proto.CompactTextString(m) } +func (*SoftwareConfig) ProtoMessage() {} +func (*SoftwareConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *SoftwareConfig) GetImageVersion() string { + if m != nil { + return m.ImageVersion + } + return "" +} + +func (m *SoftwareConfig) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +// A request to create a cluster. +type CreateClusterRequest struct { + // [Required] The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // [Required] The cluster to create. + Cluster *Cluster `protobuf:"bytes,2,opt,name=cluster" json:"cluster,omitempty"` +} + +func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } +func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*CreateClusterRequest) ProtoMessage() {} +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *CreateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *CreateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +// A request to update a cluster. +type UpdateClusterRequest struct { + // [Required] The ID of the Google Cloud Platform project the + // cluster belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,5,opt,name=region" json:"region,omitempty"` + // [Required] The cluster name. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // [Required] The changes to the cluster. + Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"` + // [Required] Specifies the path, relative to <code>Cluster</code>, of + // the field to update. For example, to change the number of workers + // in a cluster to 5, the <code>update_mask</code> parameter would be + // specified as <code>config.worker_config.num_instances</code>, + // and the `PATCH` request body would specify the new value, as follows: + // + // { + // "config":{ + // "workerConfig":{ + // "numInstances":"5" + // } + // } + // } + // Similarly, to change the number of preemptible workers in a cluster to 5, the + // <code>update_mask</code> parameter would be <code>config.secondary_worker_config.num_instances</code>, + // and the `PATCH` request body would be set as follows: + // + // { + // "config":{ + // "secondaryWorkerConfig":{ + // "numInstances":"5" + // } + // } + // } + // <strong>Note:</strong> Currently, <code>config.worker_config.num_instances</code> + // and <code>config.secondary_worker_config.num_instances</code> are the only + // fields that can be updated. + UpdateMask *google_protobuf5.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateClusterRequest) Reset() { *m = UpdateClusterRequest{} } +func (m *UpdateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateClusterRequest) ProtoMessage() {} +func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *UpdateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *UpdateClusterRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *UpdateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +func (m *UpdateClusterRequest) GetUpdateMask() *google_protobuf5.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// A request to delete a cluster. +type DeleteClusterRequest struct { + // [Required] The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // [Required] The cluster name. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` +} + +func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } +func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteClusterRequest) ProtoMessage() {} +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *DeleteClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *DeleteClusterRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +// Request to get the resource representation for a cluster in a project. +type GetClusterRequest struct { + // [Required] The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // [Required] The cluster name. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` +} + +func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } +func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } +func (*GetClusterRequest) ProtoMessage() {} +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *GetClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *GetClusterRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +// A request to list the clusters in a project. +type ListClustersRequest struct { + // [Required] The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,4,opt,name=region" json:"region,omitempty"` + // [Optional] The standard List page size. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // [Optional] The standard List page token. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } +func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } +func (*ListClustersRequest) ProtoMessage() {} +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *ListClustersRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListClustersRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *ListClustersRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListClustersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The list of all clusters in a project. +type ListClustersResponse struct { + // [Output-only] The clusters in the project. + Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"` + // [Output-only] This token is included in the response if there are more + // results to fetch. To fetch additional results, provide this value as the + // `page_token` in a subsequent <code>ListClustersRequest</code>. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } +func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } +func (*ListClustersResponse) ProtoMessage() {} +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ListClustersResponse) GetClusters() []*Cluster { + if m != nil { + return m.Clusters + } + return nil +} + +func (m *ListClustersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to collect cluster diagnostic information. +type DiagnoseClusterRequest struct { + // [Required] The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // [Required] The cluster name. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` +} + +func (m *DiagnoseClusterRequest) Reset() { *m = DiagnoseClusterRequest{} } +func (m *DiagnoseClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DiagnoseClusterRequest) ProtoMessage() {} +func (*DiagnoseClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *DiagnoseClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DiagnoseClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *DiagnoseClusterRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +// The location of diagnostic output. +type DiagnoseClusterResults struct { + // [Output-only] The Google Cloud Storage URI of the diagnostic output. + // The output report is a plain text file with a summary of collected + // diagnostics. + OutputUri string `protobuf:"bytes,1,opt,name=output_uri,json=outputUri" json:"output_uri,omitempty"` +} + +func (m *DiagnoseClusterResults) Reset() { *m = DiagnoseClusterResults{} } +func (m *DiagnoseClusterResults) String() string { return proto.CompactTextString(m) } +func (*DiagnoseClusterResults) ProtoMessage() {} +func (*DiagnoseClusterResults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *DiagnoseClusterResults) GetOutputUri() string { + if m != nil { + return m.OutputUri + } + return "" +} + +func init() { + proto.RegisterType((*Cluster)(nil), "google.cloud.dataproc.v1.Cluster") + proto.RegisterType((*ClusterConfig)(nil), "google.cloud.dataproc.v1.ClusterConfig") + proto.RegisterType((*GceClusterConfig)(nil), "google.cloud.dataproc.v1.GceClusterConfig") + proto.RegisterType((*InstanceGroupConfig)(nil), "google.cloud.dataproc.v1.InstanceGroupConfig") + proto.RegisterType((*ManagedGroupConfig)(nil), "google.cloud.dataproc.v1.ManagedGroupConfig") + proto.RegisterType((*DiskConfig)(nil), "google.cloud.dataproc.v1.DiskConfig") + proto.RegisterType((*NodeInitializationAction)(nil), "google.cloud.dataproc.v1.NodeInitializationAction") + proto.RegisterType((*ClusterStatus)(nil), "google.cloud.dataproc.v1.ClusterStatus") + proto.RegisterType((*SoftwareConfig)(nil), "google.cloud.dataproc.v1.SoftwareConfig") + proto.RegisterType((*CreateClusterRequest)(nil), "google.cloud.dataproc.v1.CreateClusterRequest") + proto.RegisterType((*UpdateClusterRequest)(nil), "google.cloud.dataproc.v1.UpdateClusterRequest") + proto.RegisterType((*DeleteClusterRequest)(nil), "google.cloud.dataproc.v1.DeleteClusterRequest") + proto.RegisterType((*GetClusterRequest)(nil), "google.cloud.dataproc.v1.GetClusterRequest") + proto.RegisterType((*ListClustersRequest)(nil), "google.cloud.dataproc.v1.ListClustersRequest") + proto.RegisterType((*ListClustersResponse)(nil), "google.cloud.dataproc.v1.ListClustersResponse") + proto.RegisterType((*DiagnoseClusterRequest)(nil), "google.cloud.dataproc.v1.DiagnoseClusterRequest") + proto.RegisterType((*DiagnoseClusterResults)(nil), "google.cloud.dataproc.v1.DiagnoseClusterResults") + proto.RegisterEnum("google.cloud.dataproc.v1.ClusterStatus_State", ClusterStatus_State_name, ClusterStatus_State_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ClusterController service + +type ClusterControllerClient interface { + // Creates a cluster in a project. + CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Updates a cluster in a project. + UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes a cluster in a project. + DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Gets the resource representation for a cluster in a project. + GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + // Lists all regions/{region}/clusters in a project. + ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) + // Gets cluster diagnostic information. + // After the operation completes, the Operation.response field + // contains `DiagnoseClusterOutputLocation`. + DiagnoseCluster(ctx context.Context, in *DiagnoseClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type clusterControllerClient struct { + cc *grpc.ClientConn +} + +func NewClusterControllerClient(cc *grpc.ClientConn) ClusterControllerClient { + return &clusterControllerClient{cc} +} + +func (c *clusterControllerClient) CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.ClusterController/CreateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.ClusterController/UpdateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.ClusterController/DeleteCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.ClusterController/GetCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { + out := new(ListClustersResponse) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.ClusterController/ListClusters", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) DiagnoseCluster(ctx context.Context, in *DiagnoseClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.ClusterController/DiagnoseCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ClusterController service + +type ClusterControllerServer interface { + // Creates a cluster in a project. + CreateCluster(context.Context, *CreateClusterRequest) (*google_longrunning.Operation, error) + // Updates a cluster in a project. + UpdateCluster(context.Context, *UpdateClusterRequest) (*google_longrunning.Operation, error) + // Deletes a cluster in a project. + DeleteCluster(context.Context, *DeleteClusterRequest) (*google_longrunning.Operation, error) + // Gets the resource representation for a cluster in a project. + GetCluster(context.Context, *GetClusterRequest) (*Cluster, error) + // Lists all regions/{region}/clusters in a project. + ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) + // Gets cluster diagnostic information. + // After the operation completes, the Operation.response field + // contains `DiagnoseClusterOutputLocation`. + DiagnoseCluster(context.Context, *DiagnoseClusterRequest) (*google_longrunning.Operation, error) +} + +func RegisterClusterControllerServer(s *grpc.Server, srv ClusterControllerServer) { + s.RegisterService(&_ClusterController_serviceDesc, srv) +} + +func _ClusterController_CreateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).CreateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.ClusterController/CreateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).CreateCluster(ctx, req.(*CreateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).UpdateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.ClusterController/UpdateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).UpdateCluster(ctx, req.(*UpdateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_DeleteCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).DeleteCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.ClusterController/DeleteCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).DeleteCluster(ctx, req.(*DeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).GetCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.ClusterController/GetCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).GetCluster(ctx, req.(*GetClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListClustersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).ListClusters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.ClusterController/ListClusters", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).ListClusters(ctx, req.(*ListClustersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_DiagnoseCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DiagnoseClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).DiagnoseCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.ClusterController/DiagnoseCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).DiagnoseCluster(ctx, req.(*DiagnoseClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ClusterController_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dataproc.v1.ClusterController", + HandlerType: (*ClusterControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateCluster", + Handler: _ClusterController_CreateCluster_Handler, + }, + { + MethodName: "UpdateCluster", + Handler: _ClusterController_UpdateCluster_Handler, + }, + { + MethodName: "DeleteCluster", + Handler: _ClusterController_DeleteCluster_Handler, + }, + { + MethodName: "GetCluster", + Handler: _ClusterController_GetCluster_Handler, + }, + { + MethodName: "ListClusters", + Handler: _ClusterController_ListClusters_Handler, + }, + { + MethodName: "DiagnoseCluster", + Handler: _ClusterController_DiagnoseCluster_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dataproc/v1/clusters.proto", +} + +func init() { proto.RegisterFile("google/cloud/dataproc/v1/clusters.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1667 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x73, 0x23, 0x47, + 0x15, 0x67, 0x64, 0xcb, 0x96, 0x9f, 0x2c, 0x59, 0xdb, 0x51, 0x8c, 0xa2, 0x4d, 0x88, 0x33, 0x09, + 0xac, 0xb3, 0x80, 0x44, 0x1c, 0x28, 0x52, 0xeb, 0x0a, 0xb0, 0x6b, 0x79, 0x8d, 0xc9, 0xae, 0xd6, + 0x8c, 0xed, 0x4d, 0x8a, 0x2a, 0x98, 0x6a, 0xcd, 0xb4, 0x27, 0x8d, 0x66, 0xa6, 0x27, 0xd3, 0x3d, + 0x4e, 0xbc, 0x5b, 0x7b, 0xe1, 0x04, 0xe1, 0xc8, 0x57, 0xe0, 0x40, 0xe5, 0x08, 0x37, 0x4e, 0x7c, + 0x02, 0x2e, 0x1c, 0xb9, 0x72, 0xe2, 0x03, 0x70, 0xe2, 0x40, 0xf5, 0x9f, 0x91, 0x34, 0xb6, 0x24, + 0x7b, 0x17, 0xd7, 0x9e, 0xd4, 0xfd, 0xde, 0xef, 0xfd, 0xe9, 0xd7, 0xef, 0xbd, 0x7e, 0x23, 0xb8, + 0x15, 0x30, 0x16, 0x84, 0xa4, 0xeb, 0x85, 0x2c, 0xf3, 0xbb, 0x3e, 0x16, 0x38, 0x49, 0x99, 0xd7, + 0x3d, 0x7d, 0xaf, 0xeb, 0x85, 0x19, 0x17, 0x24, 0xe5, 0x9d, 0x24, 0x65, 0x82, 0xa1, 0x96, 0x06, + 0x76, 0x14, 0xb0, 0x93, 0x03, 0x3b, 0xa7, 0xef, 0xb5, 0x5f, 0x37, 0x2a, 0x70, 0x42, 0xbb, 0x38, + 0x8e, 0x99, 0xc0, 0x82, 0xb2, 0xd8, 0xc8, 0xb5, 0xdf, 0x9d, 0x69, 0x80, 0x25, 0x24, 0x2d, 0x40, + 0xdf, 0x36, 0xd0, 0x90, 0xc5, 0x41, 0x9a, 0xc5, 0x31, 0x8d, 0x83, 0x8b, 0xa0, 0x6f, 0x18, 0x90, + 0xda, 0x0d, 0xb2, 0x93, 0xae, 0x9f, 0x69, 0x80, 0xe1, 0x6f, 0x9c, 0xe7, 0x9f, 0x50, 0x12, 0xfa, + 0x6e, 0x84, 0xf9, 0xd0, 0x20, 0xde, 0x3c, 0x8f, 0x10, 0x34, 0x22, 0x5c, 0xe0, 0x28, 0xd1, 0x00, + 0xfb, 0x6f, 0x25, 0x58, 0xde, 0xd1, 0xa7, 0x47, 0x6f, 0x00, 0x24, 0x29, 0xfb, 0x35, 0xf1, 0x84, + 0x4b, 0xfd, 0x96, 0xb5, 0x61, 0x6d, 0xae, 0x38, 0x2b, 0x86, 0xb2, 0xef, 0xa3, 0xb7, 0x60, 0xd5, + 0xc4, 0xc9, 0x8d, 0x71, 0x44, 0x5a, 0x25, 0x05, 0xa8, 0x1a, 0x5a, 0x1f, 0x47, 0x04, 0xfd, 0x18, + 0x96, 0x3c, 0x16, 0x9f, 0xd0, 0xa0, 0xb5, 0xb0, 0x61, 0x6d, 0x56, 0xb7, 0x6e, 0x75, 0x66, 0x45, + 0xb2, 0x63, 0x8c, 0xee, 0x28, 0xb8, 0x63, 0xc4, 0xa4, 0x02, 0x2e, 0xb0, 0xc8, 0x78, 0x6b, 0xf1, + 0x8a, 0x0a, 0x0e, 0x15, 0xdc, 0x31, 0x62, 0xa8, 0x0f, 0x75, 0xbd, 0x72, 0x3f, 0xa5, 0x5c, 0xb0, + 0xf4, 0xac, 0xb5, 0xbc, 0xb1, 0xf0, 0x3c, 0x8a, 0x6a, 0x5a, 0xfc, 0xa7, 0x5a, 0x7a, 0xf2, 0xd0, + 0x59, 0x46, 0xfd, 0xd6, 0x52, 0xe1, 0xd0, 0xc7, 0x19, 0xf5, 0xed, 0x7f, 0x2e, 0x42, 0xad, 0x70, + 0x1a, 0xf4, 0x36, 0xd4, 0xf4, 0x79, 0xdc, 0x41, 0xe6, 0x0d, 0x89, 0x30, 0xb1, 0x5c, 0xd5, 0xc4, + 0x7b, 0x8a, 0x86, 0x3e, 0x01, 0x14, 0x78, 0xc4, 0xcd, 0xb5, 0x9b, 0xb8, 0x55, 0xd4, 0xb1, 0x6f, + 0xcf, 0xf6, 0x76, 0xcf, 0x23, 0xc5, 0xd0, 0x35, 0x82, 0x73, 0x14, 0xe4, 0x40, 0x2d, 0xc2, 0x93, + 0x4a, 0x57, 0x94, 0xd2, 0xef, 0xce, 0x56, 0xba, 0x1f, 0x73, 0x81, 0x63, 0x8f, 0xec, 0xa5, 0x2c, + 0x4b, 0x8c, 0xde, 0x55, 0xad, 0x63, 0xac, 0xf3, 0x73, 0x96, 0x0e, 0xc7, 0x3a, 0xe1, 0x85, 0x74, + 0x6a, 0x1d, 0x46, 0x27, 0x81, 0xaf, 0x73, 0xe2, 0xb1, 0xd8, 0xc7, 0xe9, 0x99, 0x5b, 0xd4, 0xbe, + 0xfa, 0x22, 0xda, 0x5f, 0x1d, 0x69, 0xfb, 0x78, 0xd2, 0xcc, 0xcf, 0x61, 0x8d, 0xb3, 0x13, 0xf1, + 0x39, 0x4e, 0x49, 0xae, 0xbe, 0xa6, 0xd4, 0x6f, 0xce, 0x56, 0x7f, 0x68, 0x04, 0x8c, 0xe6, 0x3a, + 0x2f, 0xec, 0x11, 0x85, 0x75, 0x1a, 0x53, 0x41, 0x71, 0x48, 0x9f, 0xa8, 0x82, 0x74, 0xb1, 0xa7, + 0x0a, 0xb7, 0x55, 0x55, 0xd9, 0xb6, 0x35, 0x5b, 0x73, 0x9f, 0xf9, 0x64, 0xbf, 0x20, 0x7b, 0x57, + 0x89, 0x3a, 0xaf, 0xd2, 0x29, 0x54, 0x6e, 0xff, 0xb7, 0x04, 0x8d, 0xf3, 0x77, 0x8e, 0x5e, 0x83, + 0xca, 0x13, 0x16, 0x13, 0x37, 0x4b, 0xa9, 0xc9, 0xad, 0x65, 0xb9, 0x3f, 0x4e, 0x29, 0x7a, 0x13, + 0xaa, 0x31, 0x11, 0x32, 0x9a, 0x8a, 0xab, 0x8b, 0x14, 0x0c, 0x49, 0x02, 0xbe, 0x09, 0x75, 0x9e, + 0x0d, 0x26, 0x31, 0x3a, 0xa7, 0x6b, 0x63, 0xaa, 0x84, 0x6d, 0x42, 0x83, 0xc6, 0x82, 0xa4, 0x31, + 0x0e, 0x5d, 0x9a, 0xb8, 0x2c, 0x0e, 0x65, 0x29, 0x59, 0x9b, 0x15, 0xa7, 0x9e, 0xd3, 0xf7, 0x93, + 0x47, 0x71, 0x78, 0x86, 0xbe, 0x0f, 0xeb, 0x9c, 0xa4, 0xa7, 0xd4, 0x23, 0x2e, 0xf6, 0x3c, 0x96, + 0xc5, 0xc2, 0xe5, 0x1e, 0x4b, 0x08, 0x6f, 0x2d, 0x6c, 0x2c, 0x6c, 0xae, 0x38, 0x4d, 0xc3, 0xbd, + 0xab, 0x99, 0x87, 0x8a, 0x87, 0x10, 0x2c, 0x0a, 0x1c, 0xc8, 0x3a, 0x97, 0x18, 0xb5, 0x46, 0x47, + 0x50, 0x89, 0x88, 0xc0, 0x32, 0x5c, 0xad, 0xb2, 0x0a, 0xe4, 0x07, 0x57, 0x2f, 0x84, 0xce, 0x43, + 0x23, 0xba, 0x1b, 0x8b, 0xf4, 0xcc, 0x19, 0x69, 0x6a, 0x6f, 0x43, 0xad, 0xc0, 0x42, 0x0d, 0x58, + 0x18, 0x92, 0x33, 0x13, 0x38, 0xb9, 0x44, 0x4d, 0x28, 0x9f, 0xe2, 0x30, 0xcb, 0x7b, 0x9a, 0xde, + 0xdc, 0x29, 0x7d, 0x60, 0xd9, 0xff, 0x29, 0xc1, 0x2b, 0x53, 0x72, 0x4d, 0x96, 0x78, 0x9c, 0x45, + 0x2e, 0x35, 0x2c, 0xae, 0xb4, 0x95, 0x9d, 0xd5, 0x38, 0x8b, 0x72, 0x38, 0x97, 0xa1, 0xce, 0x01, + 0xaa, 0x65, 0xf2, 0x56, 0x49, 0x9d, 0xb6, 0x96, 0x53, 0x65, 0xd3, 0xe4, 0xe8, 0x26, 0xac, 0xd0, + 0x08, 0x07, 0xfa, 0x3a, 0x17, 0x94, 0x07, 0x15, 0x45, 0x30, 0xf7, 0x10, 0x61, 0xef, 0x53, 0x1a, + 0x13, 0x57, 0x9c, 0x25, 0x1a, 0xb3, 0xa8, 0x30, 0x75, 0x43, 0x3f, 0x3a, 0x4b, 0x14, 0x72, 0x17, + 0xaa, 0x3e, 0xe5, 0xc3, 0x3c, 0xc7, 0xcb, 0x2a, 0xc7, 0xdf, 0x99, 0x1d, 0xc0, 0x1e, 0xe5, 0x43, + 0x93, 0xdf, 0xe0, 0x8f, 0xd6, 0xca, 0x69, 0xee, 0x26, 0x29, 0x21, 0x51, 0x22, 0xe8, 0x20, 0x24, + 0x2a, 0x3f, 0x2a, 0x4e, 0x8d, 0xf2, 0x83, 0x31, 0x11, 0xfd, 0x0a, 0x9a, 0x11, 0x8e, 0x71, 0x40, + 0x7c, 0x37, 0x90, 0x71, 0xc9, 0xcd, 0x2e, 0x2b, 0xb3, 0xdf, 0x99, 0x6d, 0xf6, 0xa1, 0x96, 0x9a, + 0x2c, 0x5c, 0x14, 0x5d, 0xa0, 0xd9, 0xbf, 0xb3, 0x00, 0x5d, 0x84, 0xca, 0x64, 0x1b, 0x85, 0x54, + 0x90, 0x28, 0x09, 0xb1, 0xd0, 0xb1, 0x35, 0xd7, 0xd9, 0xcc, 0xb9, 0x47, 0x86, 0xa9, 0xde, 0xa5, + 0x0f, 0xe1, 0xe6, 0x48, 0x4a, 0x7b, 0xab, 0x2d, 0x16, 0x5e, 0xb2, 0x16, 0x9d, 0xbc, 0x67, 0x6d, + 0x5b, 0x3d, 0x6b, 0xf6, 0x2f, 0x01, 0xc6, 0xc1, 0x42, 0xef, 0xc2, 0x8d, 0x01, 0x63, 0xc2, 0x55, + 0xc1, 0xe6, 0xf4, 0x09, 0x71, 0x83, 0x81, 0xb9, 0xfe, 0xba, 0x64, 0x48, 0xe8, 0x21, 0x7d, 0x42, + 0xf6, 0x06, 0xe8, 0x1d, 0xa8, 0xcb, 0x2c, 0x09, 0x99, 0x87, 0x43, 0x97, 0x73, 0x9f, 0x2b, 0x53, + 0x3a, 0x4d, 0x1e, 0x48, 0xe2, 0x21, 0xf7, 0xb9, 0xfd, 0x7b, 0x0b, 0x5a, 0xb3, 0xda, 0x02, 0xba, + 0x05, 0x6b, 0xe4, 0x0b, 0xe2, 0x65, 0x02, 0x0f, 0x42, 0xe2, 0x9e, 0xd0, 0x30, 0x3f, 0x69, 0x7d, + 0x4c, 0xbe, 0x4f, 0x43, 0x82, 0xee, 0xc3, 0x0d, 0x4d, 0x91, 0xed, 0x48, 0x3e, 0xf3, 0x2c, 0x13, + 0xca, 0x5c, 0x75, 0xeb, 0xb5, 0xfc, 0x36, 0xf2, 0x31, 0xa0, 0xd3, 0x33, 0x83, 0x84, 0xd3, 0x18, + 0xc9, 0x1c, 0x69, 0x11, 0xfb, 0xcb, 0xd2, 0xe8, 0x39, 0xd3, 0x4f, 0x22, 0xda, 0x81, 0xb2, 0x7c, + 0x14, 0xb5, 0xe1, 0xfa, 0xbc, 0xae, 0x5c, 0x90, 0xeb, 0xc8, 0x1f, 0xe2, 0x68, 0x59, 0xb4, 0x0e, + 0x4b, 0x3e, 0x11, 0x98, 0x86, 0x26, 0xda, 0x66, 0x87, 0x7a, 0xd0, 0x50, 0x00, 0x97, 0x0b, 0x9c, + 0x0a, 0xe5, 0xb8, 0x19, 0x1e, 0xda, 0x17, 0xbc, 0x3e, 0xca, 0x87, 0x17, 0x47, 0x3d, 0xf2, 0xe4, + 0x50, 0x8a, 0x48, 0xa2, 0xfd, 0x18, 0xca, 0xca, 0x1a, 0xaa, 0xc2, 0xf2, 0x71, 0xff, 0xa3, 0xfe, + 0xa3, 0x8f, 0xfb, 0x8d, 0xaf, 0xa1, 0x55, 0xa8, 0xec, 0x38, 0xbb, 0x77, 0x8f, 0xf6, 0xfb, 0x7b, + 0x0d, 0x4b, 0xb2, 0x9c, 0xe3, 0x7e, 0x5f, 0x6e, 0x4a, 0x68, 0x05, 0xca, 0xbb, 0x8e, 0xf3, 0xc8, + 0x69, 0x2c, 0x48, 0x54, 0x6f, 0xf7, 0xc1, 0xae, 0x42, 0x2d, 0xca, 0xdd, 0xf1, 0x41, 0x4f, 0xcb, + 0x94, 0xed, 0xbf, 0x5b, 0x50, 0x2f, 0xbe, 0x05, 0xb2, 0xf2, 0x75, 0xb5, 0x9e, 0x92, 0x94, 0x53, + 0x16, 0xe7, 0x8f, 0xbb, 0x22, 0x3e, 0xd6, 0x34, 0xf4, 0x89, 0x1a, 0xa5, 0x12, 0x92, 0x0a, 0x6a, + 0xaa, 0x7e, 0x6e, 0x2f, 0x2b, 0x9a, 0xe8, 0x1c, 0x8c, 0x44, 0x75, 0x2f, 0x9b, 0xd0, 0xd5, 0xfe, + 0x10, 0xd6, 0xce, 0xb1, 0x9f, 0xab, 0x9f, 0x7d, 0x69, 0x41, 0x73, 0x27, 0x25, 0x58, 0xe4, 0xcd, + 0xd3, 0x21, 0x9f, 0x65, 0x84, 0x8b, 0xcb, 0x86, 0xbf, 0x75, 0x58, 0x4a, 0x49, 0x20, 0x8f, 0xab, + 0x1b, 0x94, 0xd9, 0xa1, 0x6d, 0x58, 0x36, 0x13, 0x8c, 0xc9, 0xb5, 0xb7, 0x2e, 0xcd, 0x0e, 0x27, + 0x97, 0xb0, 0xff, 0x6d, 0x41, 0xf3, 0x38, 0xf1, 0xff, 0x0f, 0x67, 0xca, 0x05, 0x67, 0xae, 0x30, + 0xa1, 0x4e, 0xf8, 0xbb, 0xf0, 0xbc, 0xfe, 0xa2, 0x6d, 0xa8, 0x66, 0xca, 0x5d, 0x35, 0x62, 0x9b, + 0x11, 0xf5, 0x62, 0x9a, 0xde, 0x97, 0x53, 0xf8, 0x43, 0xcc, 0x87, 0x0e, 0x68, 0xb8, 0x5c, 0xdb, + 0x09, 0x34, 0x7b, 0x24, 0x24, 0xd7, 0x15, 0xf8, 0xcb, 0xcf, 0x6a, 0x47, 0x70, 0x63, 0x8f, 0x88, + 0x97, 0x66, 0xee, 0xb7, 0x16, 0xbc, 0xf2, 0x80, 0xf2, 0xdc, 0x20, 0x7f, 0x6e, 0x8b, 0x8b, 0x05, + 0x8b, 0x37, 0x61, 0x25, 0x91, 0x65, 0x26, 0x3b, 0xac, 0x69, 0x9b, 0x15, 0x49, 0x90, 0xad, 0x55, + 0xe9, 0x94, 0x4c, 0xc1, 0x86, 0x24, 0x77, 0x55, 0xc1, 0x8f, 0x24, 0xc1, 0x7e, 0x06, 0xcd, 0xa2, + 0x27, 0x3c, 0x61, 0x31, 0x97, 0xef, 0x40, 0x25, 0xff, 0xd4, 0x6b, 0x59, 0xaa, 0x28, 0xaf, 0x70, + 0xfd, 0x23, 0x11, 0xf4, 0x2d, 0x58, 0x8b, 0xc9, 0x17, 0xc2, 0x9d, 0x30, 0xad, 0xe3, 0x50, 0x93, + 0xe4, 0x83, 0x91, 0xf9, 0x14, 0xd6, 0x7b, 0x14, 0x07, 0x31, 0xe3, 0x2f, 0xef, 0xb2, 0x7f, 0x38, + 0xc5, 0x26, 0xcf, 0x42, 0xc1, 0xa5, 0x4d, 0x96, 0x89, 0x24, 0x13, 0x13, 0xe3, 0xe2, 0x8a, 0xa6, + 0x1c, 0xa7, 0x74, 0xeb, 0xcf, 0x15, 0xb8, 0x31, 0x1e, 0xa4, 0x44, 0xca, 0xc2, 0x90, 0xa4, 0xe8, + 0x8f, 0x16, 0xd4, 0x0a, 0x7d, 0x02, 0x75, 0xe6, 0x44, 0x6a, 0x4a, 0x43, 0x69, 0xbf, 0x91, 0xe3, + 0x27, 0x3e, 0x71, 0x3b, 0x8f, 0xf2, 0x4f, 0x5c, 0xbb, 0xf7, 0x9b, 0x7f, 0xfc, 0xeb, 0x0f, 0xa5, + 0x1f, 0xd9, 0xef, 0xcb, 0xcf, 0x63, 0x13, 0x01, 0xde, 0x7d, 0x3a, 0x8e, 0xce, 0xb3, 0xae, 0x3e, + 0x3c, 0xef, 0x3e, 0xd5, 0x8b, 0x67, 0xa3, 0xcf, 0xf4, 0x3b, 0xa3, 0x8a, 0xfc, 0x8b, 0x05, 0xb5, + 0x42, 0x07, 0x99, 0xe7, 0xe6, 0xb4, 0x56, 0x73, 0x99, 0x9b, 0x87, 0xca, 0xcd, 0x87, 0x5b, 0xf7, + 0x5e, 0xc0, 0xcd, 0xee, 0xd3, 0xc9, 0x4b, 0x7b, 0x36, 0xf6, 0xfa, 0x2b, 0x0b, 0x6a, 0x85, 0x5e, + 0x30, 0xcf, 0xeb, 0x69, 0x4d, 0xe3, 0x32, 0xaf, 0x7f, 0xa6, 0xbc, 0xee, 0xdd, 0xbe, 0x06, 0xaf, + 0xd1, 0x9f, 0x2c, 0x80, 0x71, 0x1b, 0x41, 0xdf, 0x9e, 0x33, 0x91, 0x9f, 0x6f, 0x36, 0xed, 0xcb, + 0xab, 0x2b, 0x77, 0x15, 0x5d, 0x87, 0xab, 0x5f, 0x59, 0xb0, 0x3a, 0x59, 0xf7, 0x68, 0xce, 0xa8, + 0x32, 0xa5, 0x53, 0xb5, 0x3b, 0x57, 0x85, 0xeb, 0x76, 0x62, 0x6f, 0x2b, 0xdf, 0x7f, 0x80, 0x5e, + 0x24, 0x87, 0xd1, 0x5f, 0x2d, 0x58, 0x3b, 0x57, 0xb1, 0xe8, 0x7b, 0xf3, 0xa6, 0xf5, 0x69, 0x0d, + 0xe5, 0xb2, 0x44, 0x78, 0xac, 0x3c, 0x3c, 0xb0, 0x3f, 0xba, 0x86, 0xf4, 0xf5, 0x8d, 0x07, 0x77, + 0xac, 0xdb, 0xf7, 0x3e, 0x83, 0xd7, 0x3d, 0x16, 0xcd, 0xf4, 0xf6, 0x5e, 0x3e, 0x41, 0xf2, 0x03, + 0xf9, 0x28, 0x1e, 0x58, 0xbf, 0xf8, 0x89, 0x81, 0x06, 0x2c, 0xc4, 0x71, 0xd0, 0x61, 0x69, 0xd0, + 0x0d, 0x48, 0xac, 0x9e, 0xcc, 0xae, 0x66, 0xe1, 0x84, 0xf2, 0x8b, 0xff, 0x9c, 0x6d, 0xe7, 0xeb, + 0xc1, 0x92, 0x02, 0xbf, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0xab, 0x60, 0x26, 0xc6, + 0x13, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/jobs.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/jobs.pb.go new file mode 100644 index 0000000..5717e98 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/jobs.pb.go @@ -0,0 +1,2197 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/dataproc/v1/jobs.proto +// DO NOT EDIT! + +package dataproc + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The Log4j level for job execution. When running an +// [Apache Hive](http://hive.apache.org/) job, Cloud +// Dataproc configures the Hive client to an equivalent verbosity level. +type LoggingConfig_Level int32 + +const ( + // Level is unspecified. Use default level for log4j. + LoggingConfig_LEVEL_UNSPECIFIED LoggingConfig_Level = 0 + // Use ALL level for log4j. + LoggingConfig_ALL LoggingConfig_Level = 1 + // Use TRACE level for log4j. + LoggingConfig_TRACE LoggingConfig_Level = 2 + // Use DEBUG level for log4j. + LoggingConfig_DEBUG LoggingConfig_Level = 3 + // Use INFO level for log4j. + LoggingConfig_INFO LoggingConfig_Level = 4 + // Use WARN level for log4j. + LoggingConfig_WARN LoggingConfig_Level = 5 + // Use ERROR level for log4j. + LoggingConfig_ERROR LoggingConfig_Level = 6 + // Use FATAL level for log4j. + LoggingConfig_FATAL LoggingConfig_Level = 7 + // Turn off log4j. + LoggingConfig_OFF LoggingConfig_Level = 8 +) + +var LoggingConfig_Level_name = map[int32]string{ + 0: "LEVEL_UNSPECIFIED", + 1: "ALL", + 2: "TRACE", + 3: "DEBUG", + 4: "INFO", + 5: "WARN", + 6: "ERROR", + 7: "FATAL", + 8: "OFF", +} +var LoggingConfig_Level_value = map[string]int32{ + "LEVEL_UNSPECIFIED": 0, + "ALL": 1, + "TRACE": 2, + "DEBUG": 3, + "INFO": 4, + "WARN": 5, + "ERROR": 6, + "FATAL": 7, + "OFF": 8, +} + +func (x LoggingConfig_Level) String() string { + return proto.EnumName(LoggingConfig_Level_name, int32(x)) +} +func (LoggingConfig_Level) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +// The job state. +type JobStatus_State int32 + +const ( + // The job state is unknown. + JobStatus_STATE_UNSPECIFIED JobStatus_State = 0 + // The job is pending; it has been submitted, but is not yet running. + JobStatus_PENDING JobStatus_State = 1 + // Job has been received by the service and completed initial setup; + // it will soon be submitted to the cluster. + JobStatus_SETUP_DONE JobStatus_State = 8 + // The job is running on the cluster. + JobStatus_RUNNING JobStatus_State = 2 + // A CancelJob request has been received, but is pending. + JobStatus_CANCEL_PENDING JobStatus_State = 3 + // Transient in-flight resources have been canceled, and the request to + // cancel the running job has been issued to the cluster. + JobStatus_CANCEL_STARTED JobStatus_State = 7 + // The job cancellation was successful. + JobStatus_CANCELLED JobStatus_State = 4 + // The job has completed successfully. + JobStatus_DONE JobStatus_State = 5 + // The job has completed, but encountered an error. + JobStatus_ERROR JobStatus_State = 6 +) + +var JobStatus_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "PENDING", + 8: "SETUP_DONE", + 2: "RUNNING", + 3: "CANCEL_PENDING", + 7: "CANCEL_STARTED", + 4: "CANCELLED", + 5: "DONE", + 6: "ERROR", +} +var JobStatus_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "PENDING": 1, + "SETUP_DONE": 8, + "RUNNING": 2, + "CANCEL_PENDING": 3, + "CANCEL_STARTED": 7, + "CANCELLED": 4, + "DONE": 5, + "ERROR": 6, +} + +func (x JobStatus_State) String() string { + return proto.EnumName(JobStatus_State_name, int32(x)) +} +func (JobStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 0} } + +// A matcher that specifies categories of job states. +type ListJobsRequest_JobStateMatcher int32 + +const ( + // Match all jobs, regardless of state. + ListJobsRequest_ALL ListJobsRequest_JobStateMatcher = 0 + // Only match jobs in non-terminal states: PENDING, RUNNING, or + // CANCEL_PENDING. + ListJobsRequest_ACTIVE ListJobsRequest_JobStateMatcher = 1 + // Only match jobs in terminal states: CANCELLED, DONE, or ERROR. + ListJobsRequest_NON_ACTIVE ListJobsRequest_JobStateMatcher = 2 +) + +var ListJobsRequest_JobStateMatcher_name = map[int32]string{ + 0: "ALL", + 1: "ACTIVE", + 2: "NON_ACTIVE", +} +var ListJobsRequest_JobStateMatcher_value = map[string]int32{ + "ALL": 0, + "ACTIVE": 1, + "NON_ACTIVE": 2, +} + +func (x ListJobsRequest_JobStateMatcher) String() string { + return proto.EnumName(ListJobsRequest_JobStateMatcher_name, int32(x)) +} +func (ListJobsRequest_JobStateMatcher) EnumDescriptor() ([]byte, []int) { + return fileDescriptor1, []int{14, 0} +} + +// The runtime logging config of the job. +type LoggingConfig struct { + // The per-package log levels for the driver. This may include + // "root" package name to configure rootLogger. + // Examples: + // 'com.google = FATAL', 'root = INFO', 'org.apache = DEBUG' + DriverLogLevels map[string]LoggingConfig_Level `protobuf:"bytes,2,rep,name=driver_log_levels,json=driverLogLevels" json:"driver_log_levels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.cloud.dataproc.v1.LoggingConfig_Level"` +} + +func (m *LoggingConfig) Reset() { *m = LoggingConfig{} } +func (m *LoggingConfig) String() string { return proto.CompactTextString(m) } +func (*LoggingConfig) ProtoMessage() {} +func (*LoggingConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *LoggingConfig) GetDriverLogLevels() map[string]LoggingConfig_Level { + if m != nil { + return m.DriverLogLevels + } + return nil +} + +// A Cloud Dataproc job for running +// [Apache Hadoop MapReduce](https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) +// jobs on [Apache Hadoop YARN](https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html). +type HadoopJob struct { + // [Required] Indicates the location of the driver's main class. Specify + // either the jar file that contains the main class or the main class name. + // To specify both, add the jar file to `jar_file_uris`, and then specify + // the main class name in this property. + // + // Types that are valid to be assigned to Driver: + // *HadoopJob_MainJarFileUri + // *HadoopJob_MainClass + Driver isHadoopJob_Driver `protobuf_oneof:"driver"` + // [Optional] The arguments to pass to the driver. Do not + // include arguments, such as `-libjars` or `-Dfoo=bar`, that can be set as job + // properties, since a collision may occur that causes an incorrect job + // submission. + Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` + // [Optional] Jar file URIs to add to the CLASSPATHs of the + // Hadoop driver and tasks. + JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // [Optional] HCFS (Hadoop Compatible Filesystem) URIs of files to be copied + // to the working directory of Hadoop drivers and distributed tasks. Useful + // for naively parallel tasks. + FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` + // [Optional] HCFS URIs of archives to be extracted in the working directory of + // Hadoop drivers and tasks. Supported file types: + // .jar, .tar, .tar.gz, .tgz, or .zip. + ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` + // [Optional] A mapping of property names to values, used to configure Hadoop. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in /etc/hadoop/conf/*-site and + // classes in user code. + Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *HadoopJob) Reset() { *m = HadoopJob{} } +func (m *HadoopJob) String() string { return proto.CompactTextString(m) } +func (*HadoopJob) ProtoMessage() {} +func (*HadoopJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isHadoopJob_Driver interface { + isHadoopJob_Driver() +} + +type HadoopJob_MainJarFileUri struct { + MainJarFileUri string `protobuf:"bytes,1,opt,name=main_jar_file_uri,json=mainJarFileUri,oneof"` +} +type HadoopJob_MainClass struct { + MainClass string `protobuf:"bytes,2,opt,name=main_class,json=mainClass,oneof"` +} + +func (*HadoopJob_MainJarFileUri) isHadoopJob_Driver() {} +func (*HadoopJob_MainClass) isHadoopJob_Driver() {} + +func (m *HadoopJob) GetDriver() isHadoopJob_Driver { + if m != nil { + return m.Driver + } + return nil +} + +func (m *HadoopJob) GetMainJarFileUri() string { + if x, ok := m.GetDriver().(*HadoopJob_MainJarFileUri); ok { + return x.MainJarFileUri + } + return "" +} + +func (m *HadoopJob) GetMainClass() string { + if x, ok := m.GetDriver().(*HadoopJob_MainClass); ok { + return x.MainClass + } + return "" +} + +func (m *HadoopJob) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *HadoopJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *HadoopJob) GetFileUris() []string { + if m != nil { + return m.FileUris + } + return nil +} + +func (m *HadoopJob) GetArchiveUris() []string { + if m != nil { + return m.ArchiveUris + } + return nil +} + +func (m *HadoopJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *HadoopJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*HadoopJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _HadoopJob_OneofMarshaler, _HadoopJob_OneofUnmarshaler, _HadoopJob_OneofSizer, []interface{}{ + (*HadoopJob_MainJarFileUri)(nil), + (*HadoopJob_MainClass)(nil), + } +} + +func _HadoopJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*HadoopJob) + // driver + switch x := m.Driver.(type) { + case *HadoopJob_MainJarFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.MainJarFileUri) + case *HadoopJob_MainClass: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.MainClass) + case nil: + default: + return fmt.Errorf("HadoopJob.Driver has unexpected type %T", x) + } + return nil +} + +func _HadoopJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*HadoopJob) + switch tag { + case 1: // driver.main_jar_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Driver = &HadoopJob_MainJarFileUri{x} + return true, err + case 2: // driver.main_class + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Driver = &HadoopJob_MainClass{x} + return true, err + default: + return false, nil + } +} + +func _HadoopJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*HadoopJob) + // driver + switch x := m.Driver.(type) { + case *HadoopJob_MainJarFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.MainJarFileUri))) + n += len(x.MainJarFileUri) + case *HadoopJob_MainClass: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.MainClass))) + n += len(x.MainClass) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc job for running [Apache Spark](http://spark.apache.org/) +// applications on YARN. +type SparkJob struct { + // [Required] The specification of the main method to call to drive the job. + // Specify either the jar file that contains the main class or the main class + // name. To pass both a main jar and a main class in that jar, add the jar to + // `CommonJob.jar_file_uris`, and then specify the main class name in `main_class`. + // + // Types that are valid to be assigned to Driver: + // *SparkJob_MainJarFileUri + // *SparkJob_MainClass + Driver isSparkJob_Driver `protobuf_oneof:"driver"` + // [Optional] The arguments to pass to the driver. Do not include arguments, + // such as `--conf`, that can be set as job properties, since a collision may + // occur that causes an incorrect job submission. + Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` + // [Optional] HCFS URIs of jar files to add to the CLASSPATHs of the + // Spark driver and tasks. + JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // [Optional] HCFS URIs of files to be copied to the working directory of + // Spark drivers and distributed tasks. Useful for naively parallel tasks. + FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` + // [Optional] HCFS URIs of archives to be extracted in the working directory + // of Spark drivers and tasks. Supported file types: + // .jar, .tar, .tar.gz, .tgz, and .zip. + ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` + // [Optional] A mapping of property names to values, used to configure Spark. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in + // /etc/spark/conf/spark-defaults.conf and classes in user code. + Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *SparkJob) Reset() { *m = SparkJob{} } +func (m *SparkJob) String() string { return proto.CompactTextString(m) } +func (*SparkJob) ProtoMessage() {} +func (*SparkJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +type isSparkJob_Driver interface { + isSparkJob_Driver() +} + +type SparkJob_MainJarFileUri struct { + MainJarFileUri string `protobuf:"bytes,1,opt,name=main_jar_file_uri,json=mainJarFileUri,oneof"` +} +type SparkJob_MainClass struct { + MainClass string `protobuf:"bytes,2,opt,name=main_class,json=mainClass,oneof"` +} + +func (*SparkJob_MainJarFileUri) isSparkJob_Driver() {} +func (*SparkJob_MainClass) isSparkJob_Driver() {} + +func (m *SparkJob) GetDriver() isSparkJob_Driver { + if m != nil { + return m.Driver + } + return nil +} + +func (m *SparkJob) GetMainJarFileUri() string { + if x, ok := m.GetDriver().(*SparkJob_MainJarFileUri); ok { + return x.MainJarFileUri + } + return "" +} + +func (m *SparkJob) GetMainClass() string { + if x, ok := m.GetDriver().(*SparkJob_MainClass); ok { + return x.MainClass + } + return "" +} + +func (m *SparkJob) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *SparkJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *SparkJob) GetFileUris() []string { + if m != nil { + return m.FileUris + } + return nil +} + +func (m *SparkJob) GetArchiveUris() []string { + if m != nil { + return m.ArchiveUris + } + return nil +} + +func (m *SparkJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *SparkJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SparkJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SparkJob_OneofMarshaler, _SparkJob_OneofUnmarshaler, _SparkJob_OneofSizer, []interface{}{ + (*SparkJob_MainJarFileUri)(nil), + (*SparkJob_MainClass)(nil), + } +} + +func _SparkJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SparkJob) + // driver + switch x := m.Driver.(type) { + case *SparkJob_MainJarFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.MainJarFileUri) + case *SparkJob_MainClass: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.MainClass) + case nil: + default: + return fmt.Errorf("SparkJob.Driver has unexpected type %T", x) + } + return nil +} + +func _SparkJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SparkJob) + switch tag { + case 1: // driver.main_jar_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Driver = &SparkJob_MainJarFileUri{x} + return true, err + case 2: // driver.main_class + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Driver = &SparkJob_MainClass{x} + return true, err + default: + return false, nil + } +} + +func _SparkJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SparkJob) + // driver + switch x := m.Driver.(type) { + case *SparkJob_MainJarFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.MainJarFileUri))) + n += len(x.MainJarFileUri) + case *SparkJob_MainClass: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.MainClass))) + n += len(x.MainClass) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc job for running +// [Apache PySpark](https://spark.apache.org/docs/0.9.0/python-programming-guide.html) +// applications on YARN. +type PySparkJob struct { + // [Required] The HCFS URI of the main Python file to use as the driver. Must + // be a .py file. + MainPythonFileUri string `protobuf:"bytes,1,opt,name=main_python_file_uri,json=mainPythonFileUri" json:"main_python_file_uri,omitempty"` + // [Optional] The arguments to pass to the driver. Do not include arguments, + // such as `--conf`, that can be set as job properties, since a collision may + // occur that causes an incorrect job submission. + Args []string `protobuf:"bytes,2,rep,name=args" json:"args,omitempty"` + // [Optional] HCFS file URIs of Python files to pass to the PySpark + // framework. Supported file types: .py, .egg, and .zip. + PythonFileUris []string `protobuf:"bytes,3,rep,name=python_file_uris,json=pythonFileUris" json:"python_file_uris,omitempty"` + // [Optional] HCFS URIs of jar files to add to the CLASSPATHs of the + // Python driver and tasks. + JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // [Optional] HCFS URIs of files to be copied to the working directory of + // Python drivers and distributed tasks. Useful for naively parallel tasks. + FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` + // [Optional] HCFS URIs of archives to be extracted in the working directory of + // .jar, .tar, .tar.gz, .tgz, and .zip. + ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` + // [Optional] A mapping of property names to values, used to configure PySpark. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in + // /etc/spark/conf/spark-defaults.conf and classes in user code. + Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *PySparkJob) Reset() { *m = PySparkJob{} } +func (m *PySparkJob) String() string { return proto.CompactTextString(m) } +func (*PySparkJob) ProtoMessage() {} +func (*PySparkJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *PySparkJob) GetMainPythonFileUri() string { + if m != nil { + return m.MainPythonFileUri + } + return "" +} + +func (m *PySparkJob) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *PySparkJob) GetPythonFileUris() []string { + if m != nil { + return m.PythonFileUris + } + return nil +} + +func (m *PySparkJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *PySparkJob) GetFileUris() []string { + if m != nil { + return m.FileUris + } + return nil +} + +func (m *PySparkJob) GetArchiveUris() []string { + if m != nil { + return m.ArchiveUris + } + return nil +} + +func (m *PySparkJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *PySparkJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// A list of queries to run on a cluster. +type QueryList struct { + // [Required] The queries to execute. You do not need to terminate a query + // with a semicolon. Multiple queries can be specified in one string + // by separating each with a semicolon. Here is an example of an Cloud + // Dataproc API snippet that uses a QueryList to specify a HiveJob: + // + // "hiveJob": { + // "queryList": { + // "queries": [ + // "query1", + // "query2", + // "query3;query4", + // ] + // } + // } + Queries []string `protobuf:"bytes,1,rep,name=queries" json:"queries,omitempty"` +} + +func (m *QueryList) Reset() { *m = QueryList{} } +func (m *QueryList) String() string { return proto.CompactTextString(m) } +func (*QueryList) ProtoMessage() {} +func (*QueryList) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *QueryList) GetQueries() []string { + if m != nil { + return m.Queries + } + return nil +} + +// A Cloud Dataproc job for running [Apache Hive](https://hive.apache.org/) +// queries on YARN. +type HiveJob struct { + // [Required] The sequence of Hive queries to execute, specified as either + // an HCFS file URI or a list of queries. + // + // Types that are valid to be assigned to Queries: + // *HiveJob_QueryFileUri + // *HiveJob_QueryList + Queries isHiveJob_Queries `protobuf_oneof:"queries"` + // [Optional] Whether to continue executing queries if a query fails. + // The default value is `false`. Setting to `true` can be useful when executing + // independent parallel queries. + ContinueOnFailure bool `protobuf:"varint,3,opt,name=continue_on_failure,json=continueOnFailure" json:"continue_on_failure,omitempty"` + // [Optional] Mapping of query variable names to values (equivalent to the + // Hive command: `SET name="value";`). + ScriptVariables map[string]string `protobuf:"bytes,4,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] A mapping of property names and values, used to configure Hive. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, + // /etc/hive/conf/hive-site.xml, and classes in user code. + Properties map[string]string `protobuf:"bytes,5,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] HCFS URIs of jar files to add to the CLASSPATH of the + // Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes + // and UDFs. + JarFileUris []string `protobuf:"bytes,6,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` +} + +func (m *HiveJob) Reset() { *m = HiveJob{} } +func (m *HiveJob) String() string { return proto.CompactTextString(m) } +func (*HiveJob) ProtoMessage() {} +func (*HiveJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +type isHiveJob_Queries interface { + isHiveJob_Queries() +} + +type HiveJob_QueryFileUri struct { + QueryFileUri string `protobuf:"bytes,1,opt,name=query_file_uri,json=queryFileUri,oneof"` +} +type HiveJob_QueryList struct { + QueryList *QueryList `protobuf:"bytes,2,opt,name=query_list,json=queryList,oneof"` +} + +func (*HiveJob_QueryFileUri) isHiveJob_Queries() {} +func (*HiveJob_QueryList) isHiveJob_Queries() {} + +func (m *HiveJob) GetQueries() isHiveJob_Queries { + if m != nil { + return m.Queries + } + return nil +} + +func (m *HiveJob) GetQueryFileUri() string { + if x, ok := m.GetQueries().(*HiveJob_QueryFileUri); ok { + return x.QueryFileUri + } + return "" +} + +func (m *HiveJob) GetQueryList() *QueryList { + if x, ok := m.GetQueries().(*HiveJob_QueryList); ok { + return x.QueryList + } + return nil +} + +func (m *HiveJob) GetContinueOnFailure() bool { + if m != nil { + return m.ContinueOnFailure + } + return false +} + +func (m *HiveJob) GetScriptVariables() map[string]string { + if m != nil { + return m.ScriptVariables + } + return nil +} + +func (m *HiveJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *HiveJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*HiveJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _HiveJob_OneofMarshaler, _HiveJob_OneofUnmarshaler, _HiveJob_OneofSizer, []interface{}{ + (*HiveJob_QueryFileUri)(nil), + (*HiveJob_QueryList)(nil), + } +} + +func _HiveJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*HiveJob) + // queries + switch x := m.Queries.(type) { + case *HiveJob_QueryFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.QueryFileUri) + case *HiveJob_QueryList: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.QueryList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("HiveJob.Queries has unexpected type %T", x) + } + return nil +} + +func _HiveJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*HiveJob) + switch tag { + case 1: // queries.query_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Queries = &HiveJob_QueryFileUri{x} + return true, err + case 2: // queries.query_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(QueryList) + err := b.DecodeMessage(msg) + m.Queries = &HiveJob_QueryList{msg} + return true, err + default: + return false, nil + } +} + +func _HiveJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*HiveJob) + // queries + switch x := m.Queries.(type) { + case *HiveJob_QueryFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.QueryFileUri))) + n += len(x.QueryFileUri) + case *HiveJob_QueryList: + s := proto.Size(x.QueryList) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc job for running [Apache Spark SQL](http://spark.apache.org/sql/) +// queries. +type SparkSqlJob struct { + // [Required] The sequence of Spark SQL queries to execute, specified as + // either an HCFS file URI or as a list of queries. + // + // Types that are valid to be assigned to Queries: + // *SparkSqlJob_QueryFileUri + // *SparkSqlJob_QueryList + Queries isSparkSqlJob_Queries `protobuf_oneof:"queries"` + // [Optional] Mapping of query variable names to values (equivalent to the + // Spark SQL command: SET `name="value";`). + ScriptVariables map[string]string `protobuf:"bytes,3,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] A mapping of property names to values, used to configure + // Spark SQL's SparkConf. Properties that conflict with values set by the + // Cloud Dataproc API may be overwritten. + Properties map[string]string `protobuf:"bytes,4,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] HCFS URIs of jar files to be added to the Spark CLASSPATH. + JarFileUris []string `protobuf:"bytes,56,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // [Optional] The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,6,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *SparkSqlJob) Reset() { *m = SparkSqlJob{} } +func (m *SparkSqlJob) String() string { return proto.CompactTextString(m) } +func (*SparkSqlJob) ProtoMessage() {} +func (*SparkSqlJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +type isSparkSqlJob_Queries interface { + isSparkSqlJob_Queries() +} + +type SparkSqlJob_QueryFileUri struct { + QueryFileUri string `protobuf:"bytes,1,opt,name=query_file_uri,json=queryFileUri,oneof"` +} +type SparkSqlJob_QueryList struct { + QueryList *QueryList `protobuf:"bytes,2,opt,name=query_list,json=queryList,oneof"` +} + +func (*SparkSqlJob_QueryFileUri) isSparkSqlJob_Queries() {} +func (*SparkSqlJob_QueryList) isSparkSqlJob_Queries() {} + +func (m *SparkSqlJob) GetQueries() isSparkSqlJob_Queries { + if m != nil { + return m.Queries + } + return nil +} + +func (m *SparkSqlJob) GetQueryFileUri() string { + if x, ok := m.GetQueries().(*SparkSqlJob_QueryFileUri); ok { + return x.QueryFileUri + } + return "" +} + +func (m *SparkSqlJob) GetQueryList() *QueryList { + if x, ok := m.GetQueries().(*SparkSqlJob_QueryList); ok { + return x.QueryList + } + return nil +} + +func (m *SparkSqlJob) GetScriptVariables() map[string]string { + if m != nil { + return m.ScriptVariables + } + return nil +} + +func (m *SparkSqlJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *SparkSqlJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *SparkSqlJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SparkSqlJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SparkSqlJob_OneofMarshaler, _SparkSqlJob_OneofUnmarshaler, _SparkSqlJob_OneofSizer, []interface{}{ + (*SparkSqlJob_QueryFileUri)(nil), + (*SparkSqlJob_QueryList)(nil), + } +} + +func _SparkSqlJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SparkSqlJob) + // queries + switch x := m.Queries.(type) { + case *SparkSqlJob_QueryFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.QueryFileUri) + case *SparkSqlJob_QueryList: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.QueryList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("SparkSqlJob.Queries has unexpected type %T", x) + } + return nil +} + +func _SparkSqlJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SparkSqlJob) + switch tag { + case 1: // queries.query_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Queries = &SparkSqlJob_QueryFileUri{x} + return true, err + case 2: // queries.query_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(QueryList) + err := b.DecodeMessage(msg) + m.Queries = &SparkSqlJob_QueryList{msg} + return true, err + default: + return false, nil + } +} + +func _SparkSqlJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SparkSqlJob) + // queries + switch x := m.Queries.(type) { + case *SparkSqlJob_QueryFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.QueryFileUri))) + n += len(x.QueryFileUri) + case *SparkSqlJob_QueryList: + s := proto.Size(x.QueryList) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc job for running [Apache Pig](https://pig.apache.org/) +// queries on YARN. +type PigJob struct { + // [Required] The sequence of Pig queries to execute, specified as an HCFS + // file URI or a list of queries. + // + // Types that are valid to be assigned to Queries: + // *PigJob_QueryFileUri + // *PigJob_QueryList + Queries isPigJob_Queries `protobuf_oneof:"queries"` + // [Optional] Whether to continue executing queries if a query fails. + // The default value is `false`. Setting to `true` can be useful when executing + // independent parallel queries. + ContinueOnFailure bool `protobuf:"varint,3,opt,name=continue_on_failure,json=continueOnFailure" json:"continue_on_failure,omitempty"` + // [Optional] Mapping of query variable names to values (equivalent to the Pig + // command: `name=[value]`). + ScriptVariables map[string]string `protobuf:"bytes,4,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] A mapping of property names to values, used to configure Pig. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, + // /etc/pig/conf/pig.properties, and classes in user code. + Properties map[string]string `protobuf:"bytes,5,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // [Optional] HCFS URIs of jar files to add to the CLASSPATH of + // the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs. + JarFileUris []string `protobuf:"bytes,6,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // [Optional] The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,7,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *PigJob) Reset() { *m = PigJob{} } +func (m *PigJob) String() string { return proto.CompactTextString(m) } +func (*PigJob) ProtoMessage() {} +func (*PigJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +type isPigJob_Queries interface { + isPigJob_Queries() +} + +type PigJob_QueryFileUri struct { + QueryFileUri string `protobuf:"bytes,1,opt,name=query_file_uri,json=queryFileUri,oneof"` +} +type PigJob_QueryList struct { + QueryList *QueryList `protobuf:"bytes,2,opt,name=query_list,json=queryList,oneof"` +} + +func (*PigJob_QueryFileUri) isPigJob_Queries() {} +func (*PigJob_QueryList) isPigJob_Queries() {} + +func (m *PigJob) GetQueries() isPigJob_Queries { + if m != nil { + return m.Queries + } + return nil +} + +func (m *PigJob) GetQueryFileUri() string { + if x, ok := m.GetQueries().(*PigJob_QueryFileUri); ok { + return x.QueryFileUri + } + return "" +} + +func (m *PigJob) GetQueryList() *QueryList { + if x, ok := m.GetQueries().(*PigJob_QueryList); ok { + return x.QueryList + } + return nil +} + +func (m *PigJob) GetContinueOnFailure() bool { + if m != nil { + return m.ContinueOnFailure + } + return false +} + +func (m *PigJob) GetScriptVariables() map[string]string { + if m != nil { + return m.ScriptVariables + } + return nil +} + +func (m *PigJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *PigJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *PigJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PigJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PigJob_OneofMarshaler, _PigJob_OneofUnmarshaler, _PigJob_OneofSizer, []interface{}{ + (*PigJob_QueryFileUri)(nil), + (*PigJob_QueryList)(nil), + } +} + +func _PigJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PigJob) + // queries + switch x := m.Queries.(type) { + case *PigJob_QueryFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.QueryFileUri) + case *PigJob_QueryList: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.QueryList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PigJob.Queries has unexpected type %T", x) + } + return nil +} + +func _PigJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PigJob) + switch tag { + case 1: // queries.query_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Queries = &PigJob_QueryFileUri{x} + return true, err + case 2: // queries.query_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(QueryList) + err := b.DecodeMessage(msg) + m.Queries = &PigJob_QueryList{msg} + return true, err + default: + return false, nil + } +} + +func _PigJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PigJob) + // queries + switch x := m.Queries.(type) { + case *PigJob_QueryFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.QueryFileUri))) + n += len(x.QueryFileUri) + case *PigJob_QueryList: + s := proto.Size(x.QueryList) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Cloud Dataproc job config. +type JobPlacement struct { + // [Required] The name of the cluster where the job will be submitted. + ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // [Output-only] A cluster UUID generated by the Cloud Dataproc service when + // the job is submitted. + ClusterUuid string `protobuf:"bytes,2,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` +} + +func (m *JobPlacement) Reset() { *m = JobPlacement{} } +func (m *JobPlacement) String() string { return proto.CompactTextString(m) } +func (*JobPlacement) ProtoMessage() {} +func (*JobPlacement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *JobPlacement) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *JobPlacement) GetClusterUuid() string { + if m != nil { + return m.ClusterUuid + } + return "" +} + +// Cloud Dataproc job status. +type JobStatus struct { + // [Output-only] A state message specifying the overall job state. + State JobStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1.JobStatus_State" json:"state,omitempty"` + // [Output-only] Optional job state details, such as an error + // description if the state is <code>ERROR</code>. + Details string `protobuf:"bytes,2,opt,name=details" json:"details,omitempty"` + // [Output-only] The time when this state was entered. + StateStartTime *google_protobuf3.Timestamp `protobuf:"bytes,6,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` +} + +func (m *JobStatus) Reset() { *m = JobStatus{} } +func (m *JobStatus) String() string { return proto.CompactTextString(m) } +func (*JobStatus) ProtoMessage() {} +func (*JobStatus) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *JobStatus) GetState() JobStatus_State { + if m != nil { + return m.State + } + return JobStatus_STATE_UNSPECIFIED +} + +func (m *JobStatus) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +func (m *JobStatus) GetStateStartTime() *google_protobuf3.Timestamp { + if m != nil { + return m.StateStartTime + } + return nil +} + +// Encapsulates the full scoping used to reference a job. +type JobReference struct { + // [Required] The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Optional] The job ID, which must be unique within the project. The job ID + // is generated by the server upon job submission or provided by the user as a + // means to perform retries without creating duplicate jobs. The ID must + // contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or + // hyphens (-). The maximum length is 512 characters. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *JobReference) Reset() { *m = JobReference{} } +func (m *JobReference) String() string { return proto.CompactTextString(m) } +func (*JobReference) ProtoMessage() {} +func (*JobReference) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *JobReference) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *JobReference) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// A Cloud Dataproc job resource. +type Job struct { + // [Optional] The fully qualified reference to the job, which can be used to + // obtain the equivalent REST path of the job resource. If this property + // is not specified when a job is created, the server generates a + // <code>job_id</code>. + Reference *JobReference `protobuf:"bytes,1,opt,name=reference" json:"reference,omitempty"` + // [Required] Job information, including how, when, and where to + // run the job. + Placement *JobPlacement `protobuf:"bytes,2,opt,name=placement" json:"placement,omitempty"` + // [Required] The application/framework-specific portion of the job. + // + // Types that are valid to be assigned to TypeJob: + // *Job_HadoopJob + // *Job_SparkJob + // *Job_PysparkJob + // *Job_HiveJob + // *Job_PigJob + // *Job_SparkSqlJob + TypeJob isJob_TypeJob `protobuf_oneof:"type_job"` + // [Output-only] The job status. Additional application-specific + // status information may be contained in the <code>type_job</code> + // and <code>yarn_applications</code> fields. + Status *JobStatus `protobuf:"bytes,8,opt,name=status" json:"status,omitempty"` + // [Output-only] The previous job status. + StatusHistory []*JobStatus `protobuf:"bytes,13,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` + // [Output-only] A URI pointing to the location of the stdout of the job's + // driver program. + DriverOutputResourceUri string `protobuf:"bytes,17,opt,name=driver_output_resource_uri,json=driverOutputResourceUri" json:"driver_output_resource_uri,omitempty"` + // [Output-only] If present, the location of miscellaneous control files + // which may be used as part of job setup and handling. If not present, + // control files may be placed in the same location as `driver_output_uri`. + DriverControlFilesUri string `protobuf:"bytes,15,opt,name=driver_control_files_uri,json=driverControlFilesUri" json:"driver_control_files_uri,omitempty"` +} + +func (m *Job) Reset() { *m = Job{} } +func (m *Job) String() string { return proto.CompactTextString(m) } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +type isJob_TypeJob interface { + isJob_TypeJob() +} + +type Job_HadoopJob struct { + HadoopJob *HadoopJob `protobuf:"bytes,3,opt,name=hadoop_job,json=hadoopJob,oneof"` +} +type Job_SparkJob struct { + SparkJob *SparkJob `protobuf:"bytes,4,opt,name=spark_job,json=sparkJob,oneof"` +} +type Job_PysparkJob struct { + PysparkJob *PySparkJob `protobuf:"bytes,5,opt,name=pyspark_job,json=pysparkJob,oneof"` +} +type Job_HiveJob struct { + HiveJob *HiveJob `protobuf:"bytes,6,opt,name=hive_job,json=hiveJob,oneof"` +} +type Job_PigJob struct { + PigJob *PigJob `protobuf:"bytes,7,opt,name=pig_job,json=pigJob,oneof"` +} +type Job_SparkSqlJob struct { + SparkSqlJob *SparkSqlJob `protobuf:"bytes,12,opt,name=spark_sql_job,json=sparkSqlJob,oneof"` +} + +func (*Job_HadoopJob) isJob_TypeJob() {} +func (*Job_SparkJob) isJob_TypeJob() {} +func (*Job_PysparkJob) isJob_TypeJob() {} +func (*Job_HiveJob) isJob_TypeJob() {} +func (*Job_PigJob) isJob_TypeJob() {} +func (*Job_SparkSqlJob) isJob_TypeJob() {} + +func (m *Job) GetTypeJob() isJob_TypeJob { + if m != nil { + return m.TypeJob + } + return nil +} + +func (m *Job) GetReference() *JobReference { + if m != nil { + return m.Reference + } + return nil +} + +func (m *Job) GetPlacement() *JobPlacement { + if m != nil { + return m.Placement + } + return nil +} + +func (m *Job) GetHadoopJob() *HadoopJob { + if x, ok := m.GetTypeJob().(*Job_HadoopJob); ok { + return x.HadoopJob + } + return nil +} + +func (m *Job) GetSparkJob() *SparkJob { + if x, ok := m.GetTypeJob().(*Job_SparkJob); ok { + return x.SparkJob + } + return nil +} + +func (m *Job) GetPysparkJob() *PySparkJob { + if x, ok := m.GetTypeJob().(*Job_PysparkJob); ok { + return x.PysparkJob + } + return nil +} + +func (m *Job) GetHiveJob() *HiveJob { + if x, ok := m.GetTypeJob().(*Job_HiveJob); ok { + return x.HiveJob + } + return nil +} + +func (m *Job) GetPigJob() *PigJob { + if x, ok := m.GetTypeJob().(*Job_PigJob); ok { + return x.PigJob + } + return nil +} + +func (m *Job) GetSparkSqlJob() *SparkSqlJob { + if x, ok := m.GetTypeJob().(*Job_SparkSqlJob); ok { + return x.SparkSqlJob + } + return nil +} + +func (m *Job) GetStatus() *JobStatus { + if m != nil { + return m.Status + } + return nil +} + +func (m *Job) GetStatusHistory() []*JobStatus { + if m != nil { + return m.StatusHistory + } + return nil +} + +func (m *Job) GetDriverOutputResourceUri() string { + if m != nil { + return m.DriverOutputResourceUri + } + return "" +} + +func (m *Job) GetDriverControlFilesUri() string { + if m != nil { + return m.DriverControlFilesUri + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Job) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Job_OneofMarshaler, _Job_OneofUnmarshaler, _Job_OneofSizer, []interface{}{ + (*Job_HadoopJob)(nil), + (*Job_SparkJob)(nil), + (*Job_PysparkJob)(nil), + (*Job_HiveJob)(nil), + (*Job_PigJob)(nil), + (*Job_SparkSqlJob)(nil), + } +} + +func _Job_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Job) + // type_job + switch x := m.TypeJob.(type) { + case *Job_HadoopJob: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HadoopJob); err != nil { + return err + } + case *Job_SparkJob: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SparkJob); err != nil { + return err + } + case *Job_PysparkJob: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PysparkJob); err != nil { + return err + } + case *Job_HiveJob: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HiveJob); err != nil { + return err + } + case *Job_PigJob: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PigJob); err != nil { + return err + } + case *Job_SparkSqlJob: + b.EncodeVarint(12<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SparkSqlJob); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Job.TypeJob has unexpected type %T", x) + } + return nil +} + +func _Job_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Job) + switch tag { + case 3: // type_job.hadoop_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(HadoopJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_HadoopJob{msg} + return true, err + case 4: // type_job.spark_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SparkJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_SparkJob{msg} + return true, err + case 5: // type_job.pyspark_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PySparkJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_PysparkJob{msg} + return true, err + case 6: // type_job.hive_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(HiveJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_HiveJob{msg} + return true, err + case 7: // type_job.pig_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PigJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_PigJob{msg} + return true, err + case 12: // type_job.spark_sql_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SparkSqlJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_SparkSqlJob{msg} + return true, err + default: + return false, nil + } +} + +func _Job_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Job) + // type_job + switch x := m.TypeJob.(type) { + case *Job_HadoopJob: + s := proto.Size(x.HadoopJob) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_SparkJob: + s := proto.Size(x.SparkJob) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_PysparkJob: + s := proto.Size(x.PysparkJob) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_HiveJob: + s := proto.Size(x.HiveJob) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_PigJob: + s := proto.Size(x.PigJob) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_SparkSqlJob: + s := proto.Size(x.SparkSqlJob) + n += proto.SizeVarint(12<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A request to submit a job. +type SubmitJobRequest struct { + // [Required] The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // [Required] The job resource. + Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` +} + +func (m *SubmitJobRequest) Reset() { *m = SubmitJobRequest{} } +func (m *SubmitJobRequest) String() string { return proto.CompactTextString(m) } +func (*SubmitJobRequest) ProtoMessage() {} +func (*SubmitJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *SubmitJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SubmitJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *SubmitJobRequest) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +// A request to get the resource representation for a job in a project. +type GetJobRequest struct { + // [Required] The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // [Required] The job ID. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *GetJobRequest) Reset() { *m = GetJobRequest{} } +func (m *GetJobRequest) String() string { return proto.CompactTextString(m) } +func (*GetJobRequest) ProtoMessage() {} +func (*GetJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *GetJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *GetJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// A request to list jobs in a project. +type ListJobsRequest struct { + // [Required] The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,6,opt,name=region" json:"region,omitempty"` + // [Optional] The number of results to return in each response. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // [Optional] The page token, returned by a previous call, to request the + // next page of results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // [Optional] If set, the returned jobs list includes only jobs that were + // submitted to the named cluster. + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // [Optional] Specifies enumerated categories of jobs to list + // (default = match ALL jobs). + JobStateMatcher ListJobsRequest_JobStateMatcher `protobuf:"varint,5,opt,name=job_state_matcher,json=jobStateMatcher,enum=google.cloud.dataproc.v1.ListJobsRequest_JobStateMatcher" json:"job_state_matcher,omitempty"` +} + +func (m *ListJobsRequest) Reset() { *m = ListJobsRequest{} } +func (m *ListJobsRequest) String() string { return proto.CompactTextString(m) } +func (*ListJobsRequest) ProtoMessage() {} +func (*ListJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *ListJobsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListJobsRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *ListJobsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListJobsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListJobsRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *ListJobsRequest) GetJobStateMatcher() ListJobsRequest_JobStateMatcher { + if m != nil { + return m.JobStateMatcher + } + return ListJobsRequest_ALL +} + +// A list of jobs in a project. +type ListJobsResponse struct { + // [Output-only] Jobs list. + Jobs []*Job `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"` + // [Optional] This token is included in the response if there are more results + // to fetch. To fetch additional results, provide this value as the + // `page_token` in a subsequent <code>ListJobsRequest</code>. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListJobsResponse) Reset() { *m = ListJobsResponse{} } +func (m *ListJobsResponse) String() string { return proto.CompactTextString(m) } +func (*ListJobsResponse) ProtoMessage() {} +func (*ListJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *ListJobsResponse) GetJobs() []*Job { + if m != nil { + return m.Jobs + } + return nil +} + +func (m *ListJobsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to cancel a job. +type CancelJobRequest struct { + // [Required] The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // [Required] The job ID. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *CancelJobRequest) Reset() { *m = CancelJobRequest{} } +func (m *CancelJobRequest) String() string { return proto.CompactTextString(m) } +func (*CancelJobRequest) ProtoMessage() {} +func (*CancelJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *CancelJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CancelJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *CancelJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// A request to delete a job. +type DeleteJobRequest struct { + // [Required] The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // [Required] The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // [Required] The job ID. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *DeleteJobRequest) Reset() { *m = DeleteJobRequest{} } +func (m *DeleteJobRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteJobRequest) ProtoMessage() {} +func (*DeleteJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *DeleteJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *DeleteJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +func init() { + proto.RegisterType((*LoggingConfig)(nil), "google.cloud.dataproc.v1.LoggingConfig") + proto.RegisterType((*HadoopJob)(nil), "google.cloud.dataproc.v1.HadoopJob") + proto.RegisterType((*SparkJob)(nil), "google.cloud.dataproc.v1.SparkJob") + proto.RegisterType((*PySparkJob)(nil), "google.cloud.dataproc.v1.PySparkJob") + proto.RegisterType((*QueryList)(nil), "google.cloud.dataproc.v1.QueryList") + proto.RegisterType((*HiveJob)(nil), "google.cloud.dataproc.v1.HiveJob") + proto.RegisterType((*SparkSqlJob)(nil), "google.cloud.dataproc.v1.SparkSqlJob") + proto.RegisterType((*PigJob)(nil), "google.cloud.dataproc.v1.PigJob") + proto.RegisterType((*JobPlacement)(nil), "google.cloud.dataproc.v1.JobPlacement") + proto.RegisterType((*JobStatus)(nil), "google.cloud.dataproc.v1.JobStatus") + proto.RegisterType((*JobReference)(nil), "google.cloud.dataproc.v1.JobReference") + proto.RegisterType((*Job)(nil), "google.cloud.dataproc.v1.Job") + proto.RegisterType((*SubmitJobRequest)(nil), "google.cloud.dataproc.v1.SubmitJobRequest") + proto.RegisterType((*GetJobRequest)(nil), "google.cloud.dataproc.v1.GetJobRequest") + proto.RegisterType((*ListJobsRequest)(nil), "google.cloud.dataproc.v1.ListJobsRequest") + proto.RegisterType((*ListJobsResponse)(nil), "google.cloud.dataproc.v1.ListJobsResponse") + proto.RegisterType((*CancelJobRequest)(nil), "google.cloud.dataproc.v1.CancelJobRequest") + proto.RegisterType((*DeleteJobRequest)(nil), "google.cloud.dataproc.v1.DeleteJobRequest") + proto.RegisterEnum("google.cloud.dataproc.v1.LoggingConfig_Level", LoggingConfig_Level_name, LoggingConfig_Level_value) + proto.RegisterEnum("google.cloud.dataproc.v1.JobStatus_State", JobStatus_State_name, JobStatus_State_value) + proto.RegisterEnum("google.cloud.dataproc.v1.ListJobsRequest_JobStateMatcher", ListJobsRequest_JobStateMatcher_name, ListJobsRequest_JobStateMatcher_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for JobController service + +type JobControllerClient interface { + // Submits a job to a cluster. + SubmitJob(ctx context.Context, in *SubmitJobRequest, opts ...grpc.CallOption) (*Job, error) + // Gets the resource representation for a job in a project. + GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) + // Lists regions/{region}/jobs in a project. + ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) + // Starts a job cancellation request. To access the job resource + // after cancellation, call + // [regions/{region}/jobs.list](/dataproc/reference/rest/v1/projects.regions.jobs/list) or + // [regions/{region}/jobs.get](/dataproc/reference/rest/v1/projects.regions.jobs/get). + CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*Job, error) + // Deletes the job from the project. If the job is active, the delete fails, + // and the response returns `FAILED_PRECONDITION`. + DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type jobControllerClient struct { + cc *grpc.ClientConn +} + +func NewJobControllerClient(cc *grpc.ClientConn) JobControllerClient { + return &jobControllerClient{cc} +} + +func (c *jobControllerClient) SubmitJob(ctx context.Context, in *SubmitJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.JobController/SubmitJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.JobController/GetJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) { + out := new(ListJobsResponse) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.JobController/ListJobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.JobController/CancelJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.JobController/DeleteJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for JobController service + +type JobControllerServer interface { + // Submits a job to a cluster. + SubmitJob(context.Context, *SubmitJobRequest) (*Job, error) + // Gets the resource representation for a job in a project. + GetJob(context.Context, *GetJobRequest) (*Job, error) + // Lists regions/{region}/jobs in a project. + ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) + // Starts a job cancellation request. To access the job resource + // after cancellation, call + // [regions/{region}/jobs.list](/dataproc/reference/rest/v1/projects.regions.jobs/list) or + // [regions/{region}/jobs.get](/dataproc/reference/rest/v1/projects.regions.jobs/get). + CancelJob(context.Context, *CancelJobRequest) (*Job, error) + // Deletes the job from the project. If the job is active, the delete fails, + // and the response returns `FAILED_PRECONDITION`. + DeleteJob(context.Context, *DeleteJobRequest) (*google_protobuf2.Empty, error) +} + +func RegisterJobControllerServer(s *grpc.Server, srv JobControllerServer) { + s.RegisterService(&_JobController_serviceDesc, srv) +} + +func _JobController_SubmitJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SubmitJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).SubmitJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.JobController/SubmitJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).SubmitJob(ctx, req.(*SubmitJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_GetJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).GetJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.JobController/GetJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).GetJob(ctx, req.(*GetJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_ListJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListJobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).ListJobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.JobController/ListJobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).ListJobs(ctx, req.(*ListJobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_CancelJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).CancelJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.JobController/CancelJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).CancelJob(ctx, req.(*CancelJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_DeleteJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).DeleteJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.JobController/DeleteJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).DeleteJob(ctx, req.(*DeleteJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _JobController_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dataproc.v1.JobController", + HandlerType: (*JobControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SubmitJob", + Handler: _JobController_SubmitJob_Handler, + }, + { + MethodName: "GetJob", + Handler: _JobController_GetJob_Handler, + }, + { + MethodName: "ListJobs", + Handler: _JobController_ListJobs_Handler, + }, + { + MethodName: "CancelJob", + Handler: _JobController_CancelJob_Handler, + }, + { + MethodName: "DeleteJob", + Handler: _JobController_DeleteJob_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dataproc/v1/jobs.proto", +} + +func init() { proto.RegisterFile("google/cloud/dataproc/v1/jobs.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1862 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0x5b, 0x6f, 0x23, 0x49, + 0x15, 0x8e, 0xef, 0xee, 0xe3, 0xb1, 0xd3, 0x29, 0x66, 0x17, 0xcb, 0xb3, 0xab, 0xcd, 0xf6, 0xb0, + 0x43, 0x76, 0x10, 0x36, 0xf1, 0xc2, 0xec, 0x90, 0x00, 0xbb, 0x8e, 0xed, 0x8c, 0x13, 0x8c, 0xe3, + 0x6d, 0x3b, 0x83, 0x84, 0x84, 0x7a, 0xda, 0x76, 0xc5, 0x69, 0x4f, 0xbb, 0xab, 0xd3, 0xd5, 0x6d, + 0xe1, 0x19, 0xcd, 0x0b, 0x7f, 0x00, 0x71, 0x11, 0x12, 0x3c, 0xf2, 0x2b, 0x90, 0x10, 0xe2, 0x01, + 0xc4, 0x1f, 0xe0, 0x15, 0xf1, 0xc4, 0x0f, 0x41, 0x55, 0xd5, 0xed, 0xf8, 0x12, 0x5f, 0xb2, 0xc3, + 0xae, 0x76, 0xf7, 0x29, 0xd5, 0xe7, 0x56, 0xa7, 0xea, 0xfb, 0xce, 0xa9, 0x2a, 0x07, 0xee, 0xf7, + 0x09, 0xe9, 0x9b, 0xb8, 0xd0, 0x35, 0x89, 0xd7, 0x2b, 0xf4, 0x74, 0x57, 0xb7, 0x1d, 0xd2, 0x2d, + 0x8c, 0xf6, 0x0b, 0x03, 0xd2, 0xa1, 0x79, 0xdb, 0x21, 0x2e, 0x41, 0x59, 0x61, 0x94, 0xe7, 0x46, + 0xf9, 0xc0, 0x28, 0x3f, 0xda, 0xcf, 0xbd, 0xe5, 0xbb, 0xeb, 0xb6, 0x51, 0xd0, 0x2d, 0x8b, 0xb8, + 0xba, 0x6b, 0x10, 0xcb, 0xf7, 0xcb, 0xdd, 0xf3, 0xb5, 0xfc, 0xab, 0xe3, 0x5d, 0x14, 0xf0, 0xd0, + 0x76, 0xc7, 0xbe, 0xf2, 0x9d, 0x79, 0xa5, 0x6b, 0x0c, 0x31, 0x75, 0xf5, 0xa1, 0x2d, 0x0c, 0x94, + 0xff, 0x84, 0x21, 0x5d, 0x27, 0xfd, 0xbe, 0x61, 0xf5, 0xcb, 0xc4, 0xba, 0x30, 0xfa, 0xe8, 0x12, + 0x76, 0x7a, 0x8e, 0x31, 0xc2, 0x8e, 0x66, 0x92, 0xbe, 0x66, 0xe2, 0x11, 0x36, 0x69, 0x36, 0xbc, + 0x1b, 0xd9, 0x4b, 0x15, 0x7f, 0x90, 0x5f, 0x96, 0x63, 0x7e, 0x26, 0x46, 0xbe, 0xc2, 0x03, 0xd4, + 0x49, 0xbf, 0xce, 0xdd, 0xab, 0x96, 0xeb, 0x8c, 0xd5, 0xed, 0xde, 0xac, 0x34, 0x77, 0x05, 0x77, + 0x6f, 0x32, 0x44, 0x32, 0x44, 0x9e, 0xe3, 0x71, 0x36, 0xb4, 0x1b, 0xda, 0x93, 0x54, 0x36, 0x44, + 0x65, 0x88, 0x8d, 0x74, 0xd3, 0xc3, 0xd9, 0xf0, 0x6e, 0x68, 0x2f, 0x53, 0xfc, 0xf6, 0xa6, 0x79, + 0xf0, 0xa8, 0xaa, 0xf0, 0x3d, 0x08, 0x3f, 0x0e, 0x29, 0x36, 0xc4, 0xb8, 0x0c, 0xbd, 0x01, 0x3b, + 0xf5, 0xea, 0xd3, 0x6a, 0x5d, 0x3b, 0x6f, 0xb4, 0x9a, 0xd5, 0xf2, 0xc9, 0xf1, 0x49, 0xb5, 0x22, + 0x6f, 0xa1, 0x04, 0x44, 0x4a, 0xf5, 0xba, 0x1c, 0x42, 0x12, 0xc4, 0xda, 0x6a, 0xa9, 0x5c, 0x95, + 0xc3, 0x6c, 0x58, 0xa9, 0x1e, 0x9d, 0x3f, 0x91, 0x23, 0x28, 0x09, 0xd1, 0x93, 0xc6, 0xf1, 0x99, + 0x1c, 0x65, 0xa3, 0x9f, 0x96, 0xd4, 0x86, 0x1c, 0x63, 0xea, 0xaa, 0xaa, 0x9e, 0xa9, 0x72, 0x9c, + 0x0d, 0x8f, 0x4b, 0xed, 0x52, 0x5d, 0x4e, 0xb0, 0x40, 0x67, 0xc7, 0xc7, 0x72, 0x52, 0xf9, 0x5b, + 0x04, 0xa4, 0x9a, 0xde, 0x23, 0xc4, 0x3e, 0x25, 0x1d, 0xf4, 0x2d, 0xd8, 0x19, 0xea, 0x86, 0xa5, + 0x0d, 0x74, 0x47, 0xbb, 0x30, 0x4c, 0xac, 0x79, 0x8e, 0x21, 0x16, 0x5a, 0xdb, 0x52, 0x33, 0x4c, + 0x75, 0xaa, 0x3b, 0xc7, 0x86, 0x89, 0xcf, 0x1d, 0x03, 0xbd, 0x03, 0xc0, 0x8d, 0xbb, 0xa6, 0x4e, + 0x29, 0x5f, 0x3a, 0xb3, 0x92, 0x98, 0xac, 0xcc, 0x44, 0x08, 0x41, 0x54, 0x77, 0xfa, 0x34, 0x1b, + 0xd9, 0x8d, 0xec, 0x49, 0x2a, 0x1f, 0x23, 0x05, 0xd2, 0xd3, 0xc1, 0x69, 0x36, 0xca, 0x95, 0xa9, + 0xc1, 0x24, 0x2e, 0x45, 0xf7, 0x40, 0xba, 0xd6, 0xc7, 0xb8, 0x3e, 0x79, 0x11, 0x28, 0xdf, 0x85, + 0x3b, 0xba, 0xd3, 0xbd, 0x34, 0x46, 0xbe, 0x3e, 0x2e, 0xfc, 0x7d, 0x19, 0x37, 0x69, 0x01, 0xd8, + 0x0e, 0xb1, 0xb1, 0xe3, 0x1a, 0x98, 0x66, 0x13, 0x9c, 0x1b, 0x1f, 0x2c, 0xc7, 0x64, 0xb2, 0xfc, + 0x7c, 0x73, 0xe2, 0x25, 0x28, 0x31, 0x15, 0x06, 0x35, 0x20, 0x63, 0x0a, 0xf0, 0xb4, 0x2e, 0x47, + 0x2f, 0x9b, 0xdc, 0x0d, 0xed, 0xa5, 0x8a, 0xdf, 0xdc, 0x10, 0x6c, 0x35, 0x6d, 0x4e, 0x7f, 0xe6, + 0x7e, 0x08, 0xdb, 0x73, 0xd3, 0xdd, 0x40, 0xac, 0xbb, 0xd3, 0xc4, 0x92, 0xa6, 0x98, 0x72, 0x94, + 0x84, 0xb8, 0xe0, 0xab, 0xf2, 0xd7, 0x08, 0x24, 0x5b, 0xb6, 0xee, 0x3c, 0xff, 0xea, 0x00, 0xa8, + 0xde, 0x00, 0x60, 0x71, 0xf9, 0x3e, 0x07, 0xab, 0xff, 0x72, 0xe2, 0xf7, 0x8f, 0x08, 0x40, 0x73, + 0x3c, 0x41, 0xb0, 0x00, 0x77, 0x39, 0x28, 0xf6, 0xd8, 0xbd, 0x24, 0xd6, 0x1c, 0x88, 0x2a, 0x47, + 0xb7, 0xc9, 0x55, 0x01, 0x8a, 0x01, 0x48, 0xe1, 0x29, 0x90, 0xf6, 0x40, 0x9e, 0xf3, 0x0f, 0x40, + 0xcc, 0xd8, 0xd3, 0xce, 0x9f, 0x0f, 0x9c, 0xed, 0x1b, 0xe0, 0xfc, 0xee, 0xf2, 0x6d, 0xbf, 0xde, + 0x8c, 0x2f, 0x11, 0xa0, 0xca, 0x7b, 0x20, 0x7d, 0xe2, 0x61, 0x67, 0x5c, 0x37, 0xa8, 0x8b, 0xb2, + 0x90, 0xb8, 0xf2, 0xb0, 0xc3, 0x96, 0x1b, 0xe2, 0xfb, 0x11, 0x7c, 0x2a, 0xbf, 0x8a, 0x42, 0xa2, + 0x66, 0x8c, 0x30, 0x83, 0xfa, 0x01, 0x64, 0x98, 0x78, 0xbc, 0x58, 0xa9, 0x77, 0xb8, 0x3c, 0x40, + 0xb8, 0x02, 0x20, 0xec, 0x4c, 0x83, 0xba, 0x7c, 0xe6, 0x54, 0xf1, 0xfe, 0xf2, 0x55, 0x4e, 0xd2, + 0x60, 0xc5, 0x7c, 0x35, 0xc9, 0x29, 0x0f, 0x5f, 0xeb, 0x12, 0xcb, 0x35, 0x2c, 0x0f, 0x6b, 0x8c, + 0x18, 0xba, 0x61, 0x7a, 0x0e, 0xce, 0x46, 0x76, 0x43, 0x7b, 0x49, 0x75, 0x27, 0x50, 0x9d, 0x59, + 0xc7, 0x42, 0x81, 0x74, 0x90, 0x69, 0xd7, 0x31, 0x6c, 0x57, 0x1b, 0xe9, 0x8e, 0xa1, 0x77, 0x4c, + 0x2c, 0xc8, 0x91, 0x2a, 0x3e, 0x5a, 0xd1, 0x4b, 0xc5, 0xd2, 0xf2, 0x2d, 0xee, 0xf9, 0x34, 0x70, + 0xf4, 0x4f, 0x58, 0x3a, 0x2b, 0x45, 0x9f, 0xcc, 0x10, 0x23, 0xc6, 0x83, 0xef, 0xaf, 0x0f, 0xbe, + 0x8a, 0x15, 0x0b, 0x7c, 0x8e, 0x2f, 0xf0, 0x39, 0x77, 0x04, 0x77, 0x6f, 0xca, 0xef, 0x36, 0x70, + 0xbf, 0x6e, 0xf9, 0x4b, 0x13, 0x82, 0x28, 0x7f, 0x89, 0x42, 0x8a, 0x13, 0xbe, 0x75, 0x65, 0x7e, + 0xfe, 0xac, 0xc0, 0x37, 0xa0, 0x1c, 0xe1, 0x40, 0x1c, 0xac, 0x69, 0xb8, 0x22, 0xdd, 0x0d, 0x91, + 0x3e, 0x9f, 0x41, 0x5a, 0xd0, 0xe8, 0x7b, 0x9b, 0x4d, 0x70, 0x2b, 0xb4, 0x1f, 0x2f, 0x76, 0xaf, + 0xc5, 0x3e, 0x11, 0x7f, 0xad, 0x3e, 0xf1, 0xc5, 0x62, 0xcf, 0xbf, 0xa3, 0x10, 0x6f, 0x1a, 0xfd, + 0x2f, 0x7e, 0x3b, 0x79, 0xb6, 0xb4, 0x9d, 0xac, 0xe0, 0x81, 0x58, 0xd9, 0x86, 0x1c, 0x6b, 0xde, + 0xd0, 0x4d, 0xbe, 0xb3, 0x36, 0xf6, 0x6b, 0x36, 0x93, 0x1b, 0xe8, 0x95, 0xf8, 0x0a, 0xd1, 0xab, + 0x0d, 0x77, 0x4e, 0x49, 0xa7, 0x69, 0xea, 0x5d, 0x3c, 0xc4, 0x96, 0xcb, 0x4e, 0xfb, 0xae, 0xe9, + 0x51, 0x17, 0x3b, 0x9a, 0xa5, 0x0f, 0xb1, 0x1f, 0x2f, 0xe5, 0xcb, 0x1a, 0xfa, 0x10, 0x4f, 0x9b, + 0x78, 0x9e, 0xd1, 0xf3, 0xc3, 0x07, 0x26, 0xe7, 0x9e, 0xd1, 0x53, 0xfe, 0x1e, 0x06, 0xe9, 0x94, + 0x74, 0x5a, 0xae, 0xee, 0x7a, 0x14, 0x7d, 0x04, 0x31, 0xea, 0xea, 0xae, 0x08, 0x96, 0x29, 0xbe, + 0xbf, 0x7c, 0xe3, 0x26, 0x3e, 0x79, 0xf6, 0x07, 0xab, 0xc2, 0x8f, 0x9d, 0xb6, 0x3d, 0xec, 0xea, + 0x86, 0xe9, 0x5f, 0x62, 0xd5, 0xe0, 0x13, 0x55, 0x40, 0xe6, 0x26, 0x1a, 0x75, 0x75, 0xc7, 0xd5, + 0xd8, 0xeb, 0xd2, 0xaf, 0xfe, 0x5c, 0x30, 0x4b, 0xf0, 0xf4, 0xcc, 0xb7, 0x83, 0xa7, 0xa7, 0x9a, + 0xe1, 0x3e, 0x2d, 0xe6, 0xc2, 0x84, 0xca, 0xef, 0x42, 0x10, 0xe3, 0x13, 0xb2, 0x67, 0x59, 0xab, + 0x5d, 0x6a, 0x57, 0xe7, 0x9e, 0x65, 0x29, 0x48, 0x34, 0xab, 0x8d, 0xca, 0x49, 0xe3, 0x89, 0x1c, + 0x42, 0x19, 0x80, 0x56, 0xb5, 0x7d, 0xde, 0xd4, 0x2a, 0x67, 0x8d, 0xaa, 0x9c, 0x64, 0x4a, 0xf5, + 0xbc, 0xd1, 0x60, 0xca, 0x30, 0x42, 0x90, 0x29, 0x97, 0x1a, 0xe5, 0x6a, 0x5d, 0x0b, 0x1c, 0x22, + 0x53, 0xb2, 0x56, 0xbb, 0xa4, 0xb6, 0xab, 0x15, 0x39, 0x81, 0xd2, 0x20, 0x09, 0x59, 0xbd, 0x5a, + 0x11, 0xcf, 0x39, 0x1e, 0x6d, 0xfa, 0x39, 0xa7, 0x54, 0x38, 0x36, 0x2a, 0xbe, 0xc0, 0x0e, 0xb6, + 0xba, 0x18, 0xbd, 0xcd, 0xf9, 0x3f, 0xc0, 0x5d, 0x57, 0x33, 0x7a, 0x3e, 0x32, 0x92, 0x2f, 0x39, + 0xe9, 0xa1, 0x37, 0x20, 0x3e, 0x20, 0x1d, 0x6d, 0x82, 0x48, 0x6c, 0x40, 0x3a, 0x27, 0x3d, 0xe5, + 0xcf, 0x71, 0x88, 0xb0, 0xee, 0x51, 0x01, 0xc9, 0x09, 0x42, 0x71, 0xe7, 0x54, 0xf1, 0xc1, 0x4a, + 0x24, 0x26, 0x13, 0xab, 0xd7, 0x8e, 0x2c, 0x8a, 0x1d, 0x90, 0xc5, 0x6f, 0x2d, 0xab, 0xa3, 0x4c, + 0xa8, 0xa5, 0x5e, 0x3b, 0xb2, 0x0e, 0x75, 0xc9, 0x1f, 0x65, 0xda, 0x80, 0x74, 0x78, 0x4b, 0x59, + 0xd9, 0xa1, 0x26, 0x0f, 0x38, 0xd6, 0xa1, 0x2e, 0x27, 0x8f, 0xd9, 0x12, 0x48, 0x94, 0x9d, 0x23, + 0x3c, 0x48, 0x94, 0x07, 0x51, 0xd6, 0x3f, 0x22, 0x6a, 0x5b, 0x6a, 0x92, 0x06, 0x97, 0xf1, 0x27, + 0x90, 0xb2, 0xc7, 0xd7, 0x41, 0x62, 0x3c, 0xc8, 0x37, 0x36, 0xb9, 0xba, 0xd6, 0xb6, 0x54, 0xf0, + 0x5d, 0x59, 0xa0, 0x1f, 0x41, 0x92, 0x5f, 0x91, 0x59, 0x14, 0x41, 0xc0, 0x77, 0xd7, 0xde, 0x73, + 0x6a, 0x5b, 0x6a, 0xe2, 0xd2, 0xbf, 0x2a, 0x1e, 0x42, 0xc2, 0x36, 0xfa, 0xdc, 0x5d, 0xb4, 0x97, + 0xdd, 0x75, 0x8d, 0xad, 0xb6, 0xa5, 0xc6, 0x6d, 0x71, 0x30, 0xfc, 0x18, 0xd2, 0x62, 0x0d, 0xf4, + 0xca, 0xe4, 0x21, 0xee, 0xf0, 0x10, 0xef, 0x6d, 0x74, 0xfe, 0xd6, 0xb6, 0xd4, 0x14, 0x9d, 0xba, + 0x9e, 0x1c, 0x42, 0x9c, 0xf2, 0x1a, 0xf4, 0xaf, 0xdb, 0xf7, 0x37, 0x28, 0x57, 0xd5, 0x77, 0x41, + 0xa7, 0x90, 0x11, 0x23, 0xed, 0xd2, 0xa0, 0x2e, 0x71, 0xc6, 0xd9, 0x34, 0x6f, 0xd3, 0x1b, 0x05, + 0x49, 0x0b, 0xd7, 0x9a, 0xf0, 0x44, 0x87, 0x90, 0xf3, 0x7f, 0x08, 0x22, 0x9e, 0x6b, 0x7b, 0xae, + 0xe6, 0x60, 0x4a, 0x3c, 0xa7, 0x2b, 0x8e, 0xbe, 0x1d, 0xce, 0xf1, 0xaf, 0x0b, 0x8b, 0x33, 0x6e, + 0xa0, 0xfa, 0x7a, 0x76, 0x06, 0x7e, 0x08, 0x59, 0xdf, 0x99, 0x9d, 0x54, 0x0e, 0x31, 0x79, 0x93, + 0xa7, 0xdc, 0x75, 0x9b, 0xbb, 0xbe, 0x21, 0xf4, 0x65, 0xa1, 0x66, 0xed, 0x9e, 0x9e, 0x3b, 0xc6, + 0x11, 0x40, 0xd2, 0x1d, 0xdb, 0x1c, 0x48, 0xe5, 0x05, 0xc8, 0x2d, 0xaf, 0x33, 0x34, 0x5c, 0x5e, + 0x0d, 0x57, 0x1e, 0xa6, 0xee, 0xba, 0x22, 0x7c, 0x13, 0xe2, 0x0e, 0xee, 0x1b, 0xc4, 0xe2, 0xac, + 0x96, 0x54, 0xff, 0x0b, 0x15, 0x20, 0xc2, 0x80, 0x11, 0x15, 0xf3, 0xf6, 0xea, 0xba, 0x63, 0x96, + 0xca, 0xcf, 0x21, 0xfd, 0x04, 0xff, 0x1f, 0x26, 0x5e, 0xd2, 0x15, 0xfe, 0x19, 0x86, 0x6d, 0x76, + 0xcc, 0x9f, 0x92, 0x0e, 0xbd, 0xf5, 0x0c, 0xf1, 0x99, 0x19, 0xee, 0x81, 0x64, 0xeb, 0x7d, 0xac, + 0x51, 0xe3, 0x85, 0x38, 0x6b, 0x62, 0x6a, 0x92, 0x09, 0x5a, 0xc6, 0x0b, 0xd1, 0xb3, 0x98, 0xd2, + 0x25, 0xcf, 0x71, 0x90, 0x1a, 0x37, 0x6f, 0x33, 0xc1, 0xc2, 0x71, 0x13, 0x5d, 0x3c, 0x6e, 0x30, + 0xec, 0xb0, 0x05, 0x88, 0x36, 0x3f, 0xd4, 0xdd, 0xee, 0x25, 0x76, 0x78, 0xa1, 0x66, 0x8a, 0xdf, + 0x5f, 0x71, 0x04, 0xcf, 0xae, 0x2d, 0x60, 0x19, 0xfe, 0x89, 0x08, 0xa0, 0x6e, 0x0f, 0x66, 0x05, + 0xca, 0x23, 0xd8, 0x9e, 0xb3, 0x09, 0x7e, 0x8c, 0xdb, 0x42, 0x00, 0xf1, 0x52, 0xb9, 0x7d, 0xf2, + 0xb4, 0x2a, 0xba, 0x7f, 0xe3, 0xac, 0xa1, 0xf9, 0xdf, 0x61, 0x65, 0x08, 0xf2, 0xf5, 0x5c, 0xd4, + 0x26, 0x16, 0xc5, 0x68, 0x1f, 0xa2, 0x03, 0xd2, 0x11, 0x4f, 0xc3, 0xb5, 0x68, 0x73, 0x53, 0xf4, + 0x00, 0xb6, 0x2d, 0xfc, 0x0b, 0x57, 0x9b, 0xda, 0x2c, 0x81, 0x57, 0x9a, 0x89, 0x9b, 0xc1, 0x86, + 0x29, 0xcf, 0x40, 0x2e, 0xeb, 0x56, 0x17, 0x9b, 0x9f, 0x19, 0x33, 0x9e, 0x81, 0x5c, 0xc1, 0x26, + 0x76, 0xf1, 0x67, 0x35, 0x43, 0xf1, 0xf7, 0x71, 0x48, 0x9f, 0x92, 0x8e, 0x5f, 0x79, 0x26, 0x76, + 0xd0, 0x1f, 0x42, 0x20, 0x4d, 0x2a, 0x0d, 0x3d, 0x5c, 0xd1, 0xb7, 0xe6, 0xca, 0x31, 0xb7, 0x7a, + 0x73, 0x95, 0xd2, 0x2f, 0xff, 0xf5, 0xdf, 0xdf, 0x86, 0x0f, 0x95, 0x47, 0x85, 0xd1, 0x7e, 0xc1, + 0x4f, 0x98, 0x16, 0x5e, 0x5e, 0x2f, 0xe6, 0x55, 0x41, 0xe4, 0x4a, 0x0b, 0x2f, 0xc5, 0xe0, 0x15, + 0xff, 0x4d, 0xfc, 0x80, 0xf2, 0x89, 0x0e, 0x42, 0x0f, 0xd1, 0x6f, 0x42, 0x10, 0x17, 0x95, 0x88, + 0x56, 0x5c, 0xf9, 0x66, 0x6a, 0x75, 0x5d, 0x56, 0x1f, 0xf3, 0xac, 0x0e, 0xd0, 0xe3, 0x5b, 0x66, + 0x55, 0x78, 0x29, 0xb6, 0xf3, 0x15, 0xfa, 0x63, 0x08, 0x92, 0x01, 0xed, 0xd0, 0xfb, 0x1b, 0x97, + 0x41, 0xee, 0xe1, 0x26, 0xa6, 0x82, 0xc5, 0xca, 0x87, 0x3c, 0xcb, 0x7d, 0x54, 0xb8, 0x65, 0x96, + 0xe8, 0x4f, 0x21, 0x90, 0x26, 0x24, 0x5d, 0x85, 0xe6, 0x3c, 0x93, 0xd7, 0xed, 0xdb, 0x29, 0xcf, + 0xa8, 0xa2, 0x7c, 0xf4, 0x69, 0xf7, 0xed, 0xa0, 0xcb, 0x67, 0x64, 0xb0, 0xfe, 0x3a, 0x04, 0xd2, + 0x84, 0xe7, 0xab, 0x92, 0x9c, 0x2f, 0x86, 0xdc, 0x9b, 0x0b, 0x37, 0xcb, 0xea, 0xd0, 0x76, 0xc7, + 0x01, 0xaa, 0x0f, 0x3f, 0x35, 0xaa, 0x47, 0x43, 0x78, 0xab, 0x4b, 0x86, 0x4b, 0x53, 0x39, 0x62, + 0x77, 0x6a, 0xda, 0x64, 0xb3, 0x36, 0x43, 0x3f, 0xfb, 0xd8, 0x37, 0xeb, 0x13, 0x53, 0xb7, 0xfa, + 0x79, 0xe2, 0xf4, 0x0b, 0x7d, 0x6c, 0xf1, 0x9c, 0x0a, 0x42, 0xa5, 0xdb, 0x06, 0x5d, 0xfc, 0x9f, + 0xcf, 0x61, 0x30, 0xee, 0xc4, 0xb9, 0xf1, 0x07, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x59, + 0x9b, 0xa1, 0x1f, 0x1a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/operations.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/operations.pb.go new file mode 100644 index 0000000..f29c49a --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/operations.pb.go @@ -0,0 +1,202 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/dataproc/v1/operations.proto +// DO NOT EDIT! + +package dataproc + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The operation state. +type ClusterOperationStatus_State int32 + +const ( + // Unused. + ClusterOperationStatus_UNKNOWN ClusterOperationStatus_State = 0 + // The operation has been created. + ClusterOperationStatus_PENDING ClusterOperationStatus_State = 1 + // The operation is running. + ClusterOperationStatus_RUNNING ClusterOperationStatus_State = 2 + // The operation is done; either cancelled or completed. + ClusterOperationStatus_DONE ClusterOperationStatus_State = 3 +) + +var ClusterOperationStatus_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PENDING", + 2: "RUNNING", + 3: "DONE", +} +var ClusterOperationStatus_State_value = map[string]int32{ + "UNKNOWN": 0, + "PENDING": 1, + "RUNNING": 2, + "DONE": 3, +} + +func (x ClusterOperationStatus_State) String() string { + return proto.EnumName(ClusterOperationStatus_State_name, int32(x)) +} +func (ClusterOperationStatus_State) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 0} +} + +// The status of the operation. +type ClusterOperationStatus struct { + // [Output-only] A message containing the operation state. + State ClusterOperationStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1.ClusterOperationStatus_State" json:"state,omitempty"` + // [Output-only] A message containing the detailed operation state. + InnerState string `protobuf:"bytes,2,opt,name=inner_state,json=innerState" json:"inner_state,omitempty"` + // [Output-only]A message containing any operation metadata details. + Details string `protobuf:"bytes,3,opt,name=details" json:"details,omitempty"` + // [Output-only] The time this state was entered. + StateStartTime *google_protobuf3.Timestamp `protobuf:"bytes,4,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` +} + +func (m *ClusterOperationStatus) Reset() { *m = ClusterOperationStatus{} } +func (m *ClusterOperationStatus) String() string { return proto.CompactTextString(m) } +func (*ClusterOperationStatus) ProtoMessage() {} +func (*ClusterOperationStatus) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *ClusterOperationStatus) GetState() ClusterOperationStatus_State { + if m != nil { + return m.State + } + return ClusterOperationStatus_UNKNOWN +} + +func (m *ClusterOperationStatus) GetInnerState() string { + if m != nil { + return m.InnerState + } + return "" +} + +func (m *ClusterOperationStatus) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +func (m *ClusterOperationStatus) GetStateStartTime() *google_protobuf3.Timestamp { + if m != nil { + return m.StateStartTime + } + return nil +} + +// Metadata describing the operation. +type ClusterOperationMetadata struct { + // [Output-only] Name of the cluster for the operation. + ClusterName string `protobuf:"bytes,7,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // [Output-only] Cluster UUID for the operation. + ClusterUuid string `protobuf:"bytes,8,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` + // [Output-only] Current operation status. + Status *ClusterOperationStatus `protobuf:"bytes,9,opt,name=status" json:"status,omitempty"` + // [Output-only] The previous operation status. + StatusHistory []*ClusterOperationStatus `protobuf:"bytes,10,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` + // [Output-only] The operation type. + OperationType string `protobuf:"bytes,11,opt,name=operation_type,json=operationType" json:"operation_type,omitempty"` + // [Output-only] Short description of operation. + Description string `protobuf:"bytes,12,opt,name=description" json:"description,omitempty"` +} + +func (m *ClusterOperationMetadata) Reset() { *m = ClusterOperationMetadata{} } +func (m *ClusterOperationMetadata) String() string { return proto.CompactTextString(m) } +func (*ClusterOperationMetadata) ProtoMessage() {} +func (*ClusterOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ClusterOperationMetadata) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *ClusterOperationMetadata) GetClusterUuid() string { + if m != nil { + return m.ClusterUuid + } + return "" +} + +func (m *ClusterOperationMetadata) GetStatus() *ClusterOperationStatus { + if m != nil { + return m.Status + } + return nil +} + +func (m *ClusterOperationMetadata) GetStatusHistory() []*ClusterOperationStatus { + if m != nil { + return m.StatusHistory + } + return nil +} + +func (m *ClusterOperationMetadata) GetOperationType() string { + if m != nil { + return m.OperationType + } + return "" +} + +func (m *ClusterOperationMetadata) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func init() { + proto.RegisterType((*ClusterOperationStatus)(nil), "google.cloud.dataproc.v1.ClusterOperationStatus") + proto.RegisterType((*ClusterOperationMetadata)(nil), "google.cloud.dataproc.v1.ClusterOperationMetadata") + proto.RegisterEnum("google.cloud.dataproc.v1.ClusterOperationStatus_State", ClusterOperationStatus_State_name, ClusterOperationStatus_State_value) +} + +func init() { proto.RegisterFile("google/cloud/dataproc/v1/operations.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 479 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x4f, 0x6f, 0xd3, 0x30, + 0x14, 0x27, 0xed, 0xb6, 0x6e, 0xce, 0x56, 0x2a, 0x1f, 0x90, 0x55, 0x26, 0x2d, 0x14, 0x21, 0x95, + 0x4b, 0xc2, 0x86, 0x84, 0x90, 0xb8, 0xa0, 0xd1, 0x89, 0x21, 0xc0, 0xad, 0xb2, 0x55, 0x93, 0xb8, + 0x44, 0x5e, 0x62, 0x82, 0xa5, 0xc4, 0xb6, 0x6c, 0x67, 0x52, 0x3f, 0x0e, 0xdf, 0x87, 0x0f, 0x85, + 0x6c, 0x27, 0x55, 0xd9, 0xe8, 0x01, 0x4e, 0xf1, 0x7b, 0xbf, 0x3f, 0x79, 0xbf, 0xe7, 0x04, 0xbc, + 0x2c, 0x85, 0x28, 0x2b, 0x9a, 0xe4, 0x95, 0x68, 0x8a, 0xa4, 0x20, 0x86, 0x48, 0x25, 0xf2, 0xe4, + 0xee, 0x34, 0x11, 0x92, 0x2a, 0x62, 0x98, 0xe0, 0x3a, 0x96, 0x4a, 0x18, 0x01, 0x91, 0xa7, 0xc6, + 0x8e, 0x1a, 0x77, 0xd4, 0xf8, 0xee, 0x74, 0x7c, 0xdc, 0x9a, 0x10, 0xc9, 0x12, 0xc2, 0xb9, 0x30, + 0x9b, 0xba, 0xf1, 0xf3, 0x16, 0xad, 0x04, 0x2f, 0x55, 0xc3, 0x39, 0xe3, 0xe5, 0x03, 0xf3, 0xf1, + 0xd3, 0x96, 0xe4, 0xaa, 0xdb, 0xe6, 0x7b, 0x42, 0x6b, 0x69, 0x56, 0x2d, 0x78, 0x72, 0x1f, 0x34, + 0xac, 0xa6, 0xda, 0x90, 0x5a, 0x7a, 0xc2, 0xe4, 0x67, 0x0f, 0x3c, 0xf9, 0x50, 0x35, 0xda, 0x50, + 0x35, 0xef, 0x9c, 0xaf, 0x0c, 0x31, 0x8d, 0x86, 0x5f, 0xc0, 0xae, 0x36, 0xc4, 0x50, 0x14, 0x44, + 0xc1, 0x74, 0x78, 0xf6, 0x26, 0xde, 0x96, 0x22, 0xfe, 0xbb, 0x41, 0x6c, 0x1f, 0x34, 0xf5, 0x26, + 0xf0, 0x04, 0x84, 0x8c, 0x73, 0xaa, 0x32, 0xef, 0xd9, 0x8b, 0x82, 0xe9, 0x41, 0x0a, 0x5c, 0xcb, + 0xf1, 0x20, 0x02, 0x83, 0x82, 0x1a, 0xc2, 0x2a, 0x8d, 0xfa, 0x0e, 0xec, 0x4a, 0x38, 0x03, 0x23, + 0x27, 0xb2, 0x52, 0x65, 0x32, 0x1b, 0x01, 0xed, 0x44, 0xc1, 0x34, 0x3c, 0x1b, 0x77, 0x33, 0x75, + 0xf9, 0xe2, 0xeb, 0x2e, 0x5f, 0x3a, 0x74, 0x9a, 0x2b, 0x2b, 0xb1, 0xcd, 0xc9, 0x5b, 0xb0, 0xeb, + 0x5f, 0x14, 0x82, 0xc1, 0x12, 0x7f, 0xc6, 0xf3, 0x1b, 0x3c, 0x7a, 0x64, 0x8b, 0xc5, 0x05, 0x9e, + 0x7d, 0xc2, 0x1f, 0x47, 0x81, 0x2d, 0xd2, 0x25, 0xc6, 0xb6, 0xe8, 0xc1, 0x7d, 0xb0, 0x33, 0x9b, + 0xe3, 0x8b, 0x51, 0x7f, 0xf2, 0xab, 0x07, 0xd0, 0xfd, 0x88, 0x5f, 0xa9, 0x21, 0x76, 0x05, 0xf0, + 0x19, 0x38, 0xcc, 0x3d, 0x96, 0x71, 0x52, 0x53, 0x34, 0x70, 0xb3, 0x87, 0x6d, 0x0f, 0x93, 0x9a, + 0x6e, 0x52, 0x9a, 0x86, 0x15, 0x68, 0xff, 0x0f, 0xca, 0xb2, 0x61, 0x05, 0xbc, 0x04, 0x7b, 0xda, + 0x2d, 0x0d, 0x1d, 0xb8, 0x60, 0xaf, 0xfe, 0x75, 0xd9, 0x69, 0xab, 0x87, 0x37, 0x60, 0xe8, 0x4f, + 0xd9, 0x0f, 0xa6, 0x8d, 0x50, 0x2b, 0x04, 0xa2, 0xfe, 0x7f, 0x39, 0x1e, 0x79, 0x9f, 0x4b, 0x6f, + 0x03, 0x5f, 0x80, 0xe1, 0xfa, 0xdb, 0xcb, 0xcc, 0x4a, 0x52, 0x14, 0xba, 0x1c, 0x47, 0xeb, 0xee, + 0xf5, 0x4a, 0x52, 0x18, 0x81, 0xb0, 0xa0, 0x3a, 0x57, 0x4c, 0xda, 0x16, 0x3a, 0xf4, 0x59, 0x37, + 0x5a, 0xe7, 0x1a, 0x1c, 0xe7, 0xa2, 0xde, 0x3a, 0xce, 0xf9, 0xe3, 0xf5, 0x20, 0x7a, 0x61, 0xaf, + 0x75, 0x11, 0x7c, 0x7b, 0xdf, 0x92, 0x4b, 0x51, 0x11, 0x5e, 0xc6, 0x42, 0x95, 0x49, 0x49, 0xb9, + 0xbb, 0xf4, 0xc4, 0x43, 0x44, 0x32, 0xfd, 0xf0, 0x57, 0x7c, 0xd7, 0x9d, 0x6f, 0xf7, 0x1c, 0xf9, + 0xf5, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x8c, 0x74, 0x3e, 0xb6, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/functions.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/functions.pb.go new file mode 100644 index 0000000..f853a77 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/functions.pb.go @@ -0,0 +1,1204 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/functions/v1beta2/functions.proto +// DO NOT EDIT! + +/* +Package functions is a generated protocol buffer package. + +It is generated from these files: + google/cloud/functions/v1beta2/functions.proto + google/cloud/functions/v1beta2/operations.proto + +It has these top-level messages: + CloudFunction + HTTPSTrigger + EventTrigger + SourceRepository + CreateFunctionRequest + UpdateFunctionRequest + GetFunctionRequest + ListFunctionsRequest + ListFunctionsResponse + DeleteFunctionRequest + CallFunctionRequest + CallFunctionResponse + OperationMetadataV1Beta2 +*/ +package functions + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Describes the current stage of a deployment. +type CloudFunctionStatus int32 + +const ( + // Status not specified. + CloudFunctionStatus_STATUS_UNSPECIFIED CloudFunctionStatus = 0 + // Successfully deployed. + CloudFunctionStatus_READY CloudFunctionStatus = 1 + // Not deployed correctly - behavior is undefined. The item should be updated + // or deleted to move it out of this state. + CloudFunctionStatus_FAILED CloudFunctionStatus = 2 + // Creation or update in progress. + CloudFunctionStatus_DEPLOYING CloudFunctionStatus = 3 + // Deletion in progress. + CloudFunctionStatus_DELETING CloudFunctionStatus = 4 +) + +var CloudFunctionStatus_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "READY", + 2: "FAILED", + 3: "DEPLOYING", + 4: "DELETING", +} +var CloudFunctionStatus_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "READY": 1, + "FAILED": 2, + "DEPLOYING": 3, + "DELETING": 4, +} + +func (x CloudFunctionStatus) String() string { + return proto.EnumName(CloudFunctionStatus_name, int32(x)) +} +func (CloudFunctionStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Describes a Cloud Function that contains user computation executed in +// response to an event. It encapsulate function and triggers configurations. +type CloudFunction struct { + // A user-defined name of the function. Function names must be unique + // globally and match pattern `projects/*/locations/*/functions/*` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The location of the function source code. + // + // Types that are valid to be assigned to SourceCode: + // *CloudFunction_SourceArchiveUrl + // *CloudFunction_SourceRepository + SourceCode isCloudFunction_SourceCode `protobuf_oneof:"source_code"` + // An event that triggers the function. + // + // Types that are valid to be assigned to Trigger: + // *CloudFunction_HttpsTrigger + // *CloudFunction_EventTrigger + Trigger isCloudFunction_Trigger `protobuf_oneof:"trigger"` + // Output only. Status of the function deployment. + Status CloudFunctionStatus `protobuf:"varint,7,opt,name=status,enum=google.cloud.functions.v1beta2.CloudFunctionStatus" json:"status,omitempty"` + // Output only. Name of the most recent operation modifying the function. If + // the function status is `DEPLOYING` or `DELETING`, then it points to the + // active operation. + LatestOperation string `protobuf:"bytes,8,opt,name=latest_operation,json=latestOperation" json:"latest_operation,omitempty"` + // The name of the function (as defined in source code) that will be + // executed. Defaults to the resource name suffix, if not specified. For + // backward compatibility, if function with given name is not found, then the + // system will try to use function named "function". + // For Node.js this is name of a function exported by the module specified + // in `source_location`. + EntryPoint string `protobuf:"bytes,9,opt,name=entry_point,json=entryPoint" json:"entry_point,omitempty"` + // The function execution timeout. Execution is considered failed and + // can be terminated if the function is not completed at the end of the + // timeout period. Defaults to 60 seconds. + Timeout *google_protobuf3.Duration `protobuf:"bytes,10,opt,name=timeout" json:"timeout,omitempty"` + // The amount of memory in MB available for a function. + // Defaults to 256MB. + AvailableMemoryMb int32 `protobuf:"varint,11,opt,name=available_memory_mb,json=availableMemoryMb" json:"available_memory_mb,omitempty"` + // Output only. The service account of the function. + ServiceAccount string `protobuf:"bytes,13,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // Output only. The last update timestamp of a Cloud Function. + UpdateTime *google_protobuf4.Timestamp `protobuf:"bytes,15,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *CloudFunction) Reset() { *m = CloudFunction{} } +func (m *CloudFunction) String() string { return proto.CompactTextString(m) } +func (*CloudFunction) ProtoMessage() {} +func (*CloudFunction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isCloudFunction_SourceCode interface { + isCloudFunction_SourceCode() +} +type isCloudFunction_Trigger interface { + isCloudFunction_Trigger() +} + +type CloudFunction_SourceArchiveUrl struct { + SourceArchiveUrl string `protobuf:"bytes,14,opt,name=source_archive_url,json=sourceArchiveUrl,oneof"` +} +type CloudFunction_SourceRepository struct { + SourceRepository *SourceRepository `protobuf:"bytes,3,opt,name=source_repository,json=sourceRepository,oneof"` +} +type CloudFunction_HttpsTrigger struct { + HttpsTrigger *HTTPSTrigger `protobuf:"bytes,6,opt,name=https_trigger,json=httpsTrigger,oneof"` +} +type CloudFunction_EventTrigger struct { + EventTrigger *EventTrigger `protobuf:"bytes,12,opt,name=event_trigger,json=eventTrigger,oneof"` +} + +func (*CloudFunction_SourceArchiveUrl) isCloudFunction_SourceCode() {} +func (*CloudFunction_SourceRepository) isCloudFunction_SourceCode() {} +func (*CloudFunction_HttpsTrigger) isCloudFunction_Trigger() {} +func (*CloudFunction_EventTrigger) isCloudFunction_Trigger() {} + +func (m *CloudFunction) GetSourceCode() isCloudFunction_SourceCode { + if m != nil { + return m.SourceCode + } + return nil +} +func (m *CloudFunction) GetTrigger() isCloudFunction_Trigger { + if m != nil { + return m.Trigger + } + return nil +} + +func (m *CloudFunction) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CloudFunction) GetSourceArchiveUrl() string { + if x, ok := m.GetSourceCode().(*CloudFunction_SourceArchiveUrl); ok { + return x.SourceArchiveUrl + } + return "" +} + +func (m *CloudFunction) GetSourceRepository() *SourceRepository { + if x, ok := m.GetSourceCode().(*CloudFunction_SourceRepository); ok { + return x.SourceRepository + } + return nil +} + +func (m *CloudFunction) GetHttpsTrigger() *HTTPSTrigger { + if x, ok := m.GetTrigger().(*CloudFunction_HttpsTrigger); ok { + return x.HttpsTrigger + } + return nil +} + +func (m *CloudFunction) GetEventTrigger() *EventTrigger { + if x, ok := m.GetTrigger().(*CloudFunction_EventTrigger); ok { + return x.EventTrigger + } + return nil +} + +func (m *CloudFunction) GetStatus() CloudFunctionStatus { + if m != nil { + return m.Status + } + return CloudFunctionStatus_STATUS_UNSPECIFIED +} + +func (m *CloudFunction) GetLatestOperation() string { + if m != nil { + return m.LatestOperation + } + return "" +} + +func (m *CloudFunction) GetEntryPoint() string { + if m != nil { + return m.EntryPoint + } + return "" +} + +func (m *CloudFunction) GetTimeout() *google_protobuf3.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +func (m *CloudFunction) GetAvailableMemoryMb() int32 { + if m != nil { + return m.AvailableMemoryMb + } + return 0 +} + +func (m *CloudFunction) GetServiceAccount() string { + if m != nil { + return m.ServiceAccount + } + return "" +} + +func (m *CloudFunction) GetUpdateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CloudFunction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CloudFunction_OneofMarshaler, _CloudFunction_OneofUnmarshaler, _CloudFunction_OneofSizer, []interface{}{ + (*CloudFunction_SourceArchiveUrl)(nil), + (*CloudFunction_SourceRepository)(nil), + (*CloudFunction_HttpsTrigger)(nil), + (*CloudFunction_EventTrigger)(nil), + } +} + +func _CloudFunction_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CloudFunction) + // source_code + switch x := m.SourceCode.(type) { + case *CloudFunction_SourceArchiveUrl: + b.EncodeVarint(14<<3 | proto.WireBytes) + b.EncodeStringBytes(x.SourceArchiveUrl) + case *CloudFunction_SourceRepository: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SourceRepository); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CloudFunction.SourceCode has unexpected type %T", x) + } + // trigger + switch x := m.Trigger.(type) { + case *CloudFunction_HttpsTrigger: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HttpsTrigger); err != nil { + return err + } + case *CloudFunction_EventTrigger: + b.EncodeVarint(12<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.EventTrigger); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CloudFunction.Trigger has unexpected type %T", x) + } + return nil +} + +func _CloudFunction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CloudFunction) + switch tag { + case 14: // source_code.source_archive_url + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.SourceCode = &CloudFunction_SourceArchiveUrl{x} + return true, err + case 3: // source_code.source_repository + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SourceRepository) + err := b.DecodeMessage(msg) + m.SourceCode = &CloudFunction_SourceRepository{msg} + return true, err + case 6: // trigger.https_trigger + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(HTTPSTrigger) + err := b.DecodeMessage(msg) + m.Trigger = &CloudFunction_HttpsTrigger{msg} + return true, err + case 12: // trigger.event_trigger + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(EventTrigger) + err := b.DecodeMessage(msg) + m.Trigger = &CloudFunction_EventTrigger{msg} + return true, err + default: + return false, nil + } +} + +func _CloudFunction_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CloudFunction) + // source_code + switch x := m.SourceCode.(type) { + case *CloudFunction_SourceArchiveUrl: + n += proto.SizeVarint(14<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.SourceArchiveUrl))) + n += len(x.SourceArchiveUrl) + case *CloudFunction_SourceRepository: + s := proto.Size(x.SourceRepository) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // trigger + switch x := m.Trigger.(type) { + case *CloudFunction_HttpsTrigger: + s := proto.Size(x.HttpsTrigger) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CloudFunction_EventTrigger: + s := proto.Size(x.EventTrigger) + n += proto.SizeVarint(12<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Describes HTTPSTrigger, could be used to connect web hooks to function. +type HTTPSTrigger struct { + // Output only. The deployed url for the function. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` +} + +func (m *HTTPSTrigger) Reset() { *m = HTTPSTrigger{} } +func (m *HTTPSTrigger) String() string { return proto.CompactTextString(m) } +func (*HTTPSTrigger) ProtoMessage() {} +func (*HTTPSTrigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *HTTPSTrigger) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +// Describes EventTrigger, used to request events be sent from another +// service. +type EventTrigger struct { + // `event_type` names contain the service that is sending an event and the + // kind of event that was fired. Must be of the form + // `providers/*/eventTypes/*` e.g. Directly handle a Message published to + // Google Cloud Pub/Sub `providers/cloud.pubsub/eventTypes/topic.publish` + // + // Handle an object changing in Google Cloud Storage + // `providers/cloud.storage/eventTypes/object.change` + // + // Handle a write to the Firebase Realtime Database + // `providers/firebase.database/eventTypes/data.write` + EventType string `protobuf:"bytes,1,opt,name=event_type,json=eventType" json:"event_type,omitempty"` + // Which instance of the source's service should send events. E.g. for Pub/Sub + // this would be a Pub/Sub topic at `projects/*/topics/*`. For Google Cloud + // Storage this would be a bucket at `projects/*/buckets/*`. For any source + // that only supports one instance per-project, this should be the name of the + // project (`projects/*`) + Resource string `protobuf:"bytes,2,opt,name=resource" json:"resource,omitempty"` +} + +func (m *EventTrigger) Reset() { *m = EventTrigger{} } +func (m *EventTrigger) String() string { return proto.CompactTextString(m) } +func (*EventTrigger) ProtoMessage() {} +func (*EventTrigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *EventTrigger) GetEventType() string { + if m != nil { + return m.EventType + } + return "" +} + +func (m *EventTrigger) GetResource() string { + if m != nil { + return m.Resource + } + return "" +} + +// Describes the location of the function source in a remote repository. +type SourceRepository struct { + // URL to the hosted repository where the function is defined. Only paths in + // https://source.developers.google.com domain are supported. The path should + // contain the name of the repository. + RepositoryUrl string `protobuf:"bytes,1,opt,name=repository_url,json=repositoryUrl" json:"repository_url,omitempty"` + // The path within the repository where the function is defined. The path + // should point to the directory where Cloud Functions files are located. Use + // "/" if the function is defined directly in the root directory of a + // repository. + SourcePath string `protobuf:"bytes,2,opt,name=source_path,json=sourcePath" json:"source_path,omitempty"` + // The version of a function. Defaults to the latest version of the master + // branch. + // + // Types that are valid to be assigned to Version: + // *SourceRepository_Branch + // *SourceRepository_Tag + // *SourceRepository_Revision + Version isSourceRepository_Version `protobuf_oneof:"version"` + // Output only. The id of the revision that was resolved at the moment of + // function creation or update. For example when a user deployed from a + // branch, it will be the revision id of the latest change on this branch at + // that time. If user deployed from revision then this value will be always + // equal to the revision specified by the user. + DeployedRevision string `protobuf:"bytes,6,opt,name=deployed_revision,json=deployedRevision" json:"deployed_revision,omitempty"` +} + +func (m *SourceRepository) Reset() { *m = SourceRepository{} } +func (m *SourceRepository) String() string { return proto.CompactTextString(m) } +func (*SourceRepository) ProtoMessage() {} +func (*SourceRepository) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +type isSourceRepository_Version interface { + isSourceRepository_Version() +} + +type SourceRepository_Branch struct { + Branch string `protobuf:"bytes,3,opt,name=branch,oneof"` +} +type SourceRepository_Tag struct { + Tag string `protobuf:"bytes,4,opt,name=tag,oneof"` +} +type SourceRepository_Revision struct { + Revision string `protobuf:"bytes,5,opt,name=revision,oneof"` +} + +func (*SourceRepository_Branch) isSourceRepository_Version() {} +func (*SourceRepository_Tag) isSourceRepository_Version() {} +func (*SourceRepository_Revision) isSourceRepository_Version() {} + +func (m *SourceRepository) GetVersion() isSourceRepository_Version { + if m != nil { + return m.Version + } + return nil +} + +func (m *SourceRepository) GetRepositoryUrl() string { + if m != nil { + return m.RepositoryUrl + } + return "" +} + +func (m *SourceRepository) GetSourcePath() string { + if m != nil { + return m.SourcePath + } + return "" +} + +func (m *SourceRepository) GetBranch() string { + if x, ok := m.GetVersion().(*SourceRepository_Branch); ok { + return x.Branch + } + return "" +} + +func (m *SourceRepository) GetTag() string { + if x, ok := m.GetVersion().(*SourceRepository_Tag); ok { + return x.Tag + } + return "" +} + +func (m *SourceRepository) GetRevision() string { + if x, ok := m.GetVersion().(*SourceRepository_Revision); ok { + return x.Revision + } + return "" +} + +func (m *SourceRepository) GetDeployedRevision() string { + if m != nil { + return m.DeployedRevision + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SourceRepository) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SourceRepository_OneofMarshaler, _SourceRepository_OneofUnmarshaler, _SourceRepository_OneofSizer, []interface{}{ + (*SourceRepository_Branch)(nil), + (*SourceRepository_Tag)(nil), + (*SourceRepository_Revision)(nil), + } +} + +func _SourceRepository_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SourceRepository) + // version + switch x := m.Version.(type) { + case *SourceRepository_Branch: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Branch) + case *SourceRepository_Tag: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Tag) + case *SourceRepository_Revision: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Revision) + case nil: + default: + return fmt.Errorf("SourceRepository.Version has unexpected type %T", x) + } + return nil +} + +func _SourceRepository_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SourceRepository) + switch tag { + case 3: // version.branch + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Version = &SourceRepository_Branch{x} + return true, err + case 4: // version.tag + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Version = &SourceRepository_Tag{x} + return true, err + case 5: // version.revision + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Version = &SourceRepository_Revision{x} + return true, err + default: + return false, nil + } +} + +func _SourceRepository_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SourceRepository) + // version + switch x := m.Version.(type) { + case *SourceRepository_Branch: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Branch))) + n += len(x.Branch) + case *SourceRepository_Tag: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Tag))) + n += len(x.Tag) + case *SourceRepository_Revision: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Revision))) + n += len(x.Revision) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request for the `CreateFunction` method. +type CreateFunctionRequest struct { + // The project and location in which the function should be created, specified + // in the format `projects/*/locations/*` + Location string `protobuf:"bytes,1,opt,name=location" json:"location,omitempty"` + // Function to be created. + Function *CloudFunction `protobuf:"bytes,2,opt,name=function" json:"function,omitempty"` +} + +func (m *CreateFunctionRequest) Reset() { *m = CreateFunctionRequest{} } +func (m *CreateFunctionRequest) String() string { return proto.CompactTextString(m) } +func (*CreateFunctionRequest) ProtoMessage() {} +func (*CreateFunctionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *CreateFunctionRequest) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +func (m *CreateFunctionRequest) GetFunction() *CloudFunction { + if m != nil { + return m.Function + } + return nil +} + +// Request for the `UpdateFunction` method. +type UpdateFunctionRequest struct { + // The name of the function to be updated. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // New version of the function. + Function *CloudFunction `protobuf:"bytes,2,opt,name=function" json:"function,omitempty"` +} + +func (m *UpdateFunctionRequest) Reset() { *m = UpdateFunctionRequest{} } +func (m *UpdateFunctionRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateFunctionRequest) ProtoMessage() {} +func (*UpdateFunctionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *UpdateFunctionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateFunctionRequest) GetFunction() *CloudFunction { + if m != nil { + return m.Function + } + return nil +} + +// Request for the `GetFunction` method. +type GetFunctionRequest struct { + // The name of the function which details should be obtained. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetFunctionRequest) Reset() { *m = GetFunctionRequest{} } +func (m *GetFunctionRequest) String() string { return proto.CompactTextString(m) } +func (*GetFunctionRequest) ProtoMessage() {} +func (*GetFunctionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *GetFunctionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request for the `ListFunctions` method. +type ListFunctionsRequest struct { + // The project and location from which the function should be listed, + // specified in the format `projects/*/locations/*` + // If you want to list functions in all locations, use "-" in place of a + // location. + Location string `protobuf:"bytes,1,opt,name=location" json:"location,omitempty"` + // Maximum number of functions to return per call. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last + // `ListFunctionsResponse`; indicates that + // this is a continuation of a prior `ListFunctions` call, and that the + // system should return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListFunctionsRequest) Reset() { *m = ListFunctionsRequest{} } +func (m *ListFunctionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListFunctionsRequest) ProtoMessage() {} +func (*ListFunctionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ListFunctionsRequest) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +func (m *ListFunctionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListFunctionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the `ListFunctions` method. +type ListFunctionsResponse struct { + // The functions that match the request. + Functions []*CloudFunction `protobuf:"bytes,1,rep,name=functions" json:"functions,omitempty"` + // If not empty, indicates that there may be more functions that match + // the request; this value should be passed in a new + // [google.cloud.functions.v1beta2.ListFunctionsRequest][] + // to get more functions. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListFunctionsResponse) Reset() { *m = ListFunctionsResponse{} } +func (m *ListFunctionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListFunctionsResponse) ProtoMessage() {} +func (*ListFunctionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ListFunctionsResponse) GetFunctions() []*CloudFunction { + if m != nil { + return m.Functions + } + return nil +} + +func (m *ListFunctionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the `DeleteFunction` method. +type DeleteFunctionRequest struct { + // The name of the function which should be deleted. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteFunctionRequest) Reset() { *m = DeleteFunctionRequest{} } +func (m *DeleteFunctionRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteFunctionRequest) ProtoMessage() {} +func (*DeleteFunctionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeleteFunctionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request for the `CallFunction` method. +type CallFunctionRequest struct { + // The name of the function to be called. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Input to be passed to the function. + Data string `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` +} + +func (m *CallFunctionRequest) Reset() { *m = CallFunctionRequest{} } +func (m *CallFunctionRequest) String() string { return proto.CompactTextString(m) } +func (*CallFunctionRequest) ProtoMessage() {} +func (*CallFunctionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *CallFunctionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CallFunctionRequest) GetData() string { + if m != nil { + return m.Data + } + return "" +} + +// Response of `CallFunction` method. +type CallFunctionResponse struct { + // Execution id of function invocation. + ExecutionId string `protobuf:"bytes,1,opt,name=execution_id,json=executionId" json:"execution_id,omitempty"` + // Result populated for successful execution of synchronous function. Will + // not be populated if function does not return a result through context. + Result string `protobuf:"bytes,2,opt,name=result" json:"result,omitempty"` + // Either system or user-function generated error. Set if execution + // was not successful. + Error string `protobuf:"bytes,3,opt,name=error" json:"error,omitempty"` +} + +func (m *CallFunctionResponse) Reset() { *m = CallFunctionResponse{} } +func (m *CallFunctionResponse) String() string { return proto.CompactTextString(m) } +func (*CallFunctionResponse) ProtoMessage() {} +func (*CallFunctionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *CallFunctionResponse) GetExecutionId() string { + if m != nil { + return m.ExecutionId + } + return "" +} + +func (m *CallFunctionResponse) GetResult() string { + if m != nil { + return m.Result + } + return "" +} + +func (m *CallFunctionResponse) GetError() string { + if m != nil { + return m.Error + } + return "" +} + +func init() { + proto.RegisterType((*CloudFunction)(nil), "google.cloud.functions.v1beta2.CloudFunction") + proto.RegisterType((*HTTPSTrigger)(nil), "google.cloud.functions.v1beta2.HTTPSTrigger") + proto.RegisterType((*EventTrigger)(nil), "google.cloud.functions.v1beta2.EventTrigger") + proto.RegisterType((*SourceRepository)(nil), "google.cloud.functions.v1beta2.SourceRepository") + proto.RegisterType((*CreateFunctionRequest)(nil), "google.cloud.functions.v1beta2.CreateFunctionRequest") + proto.RegisterType((*UpdateFunctionRequest)(nil), "google.cloud.functions.v1beta2.UpdateFunctionRequest") + proto.RegisterType((*GetFunctionRequest)(nil), "google.cloud.functions.v1beta2.GetFunctionRequest") + proto.RegisterType((*ListFunctionsRequest)(nil), "google.cloud.functions.v1beta2.ListFunctionsRequest") + proto.RegisterType((*ListFunctionsResponse)(nil), "google.cloud.functions.v1beta2.ListFunctionsResponse") + proto.RegisterType((*DeleteFunctionRequest)(nil), "google.cloud.functions.v1beta2.DeleteFunctionRequest") + proto.RegisterType((*CallFunctionRequest)(nil), "google.cloud.functions.v1beta2.CallFunctionRequest") + proto.RegisterType((*CallFunctionResponse)(nil), "google.cloud.functions.v1beta2.CallFunctionResponse") + proto.RegisterEnum("google.cloud.functions.v1beta2.CloudFunctionStatus", CloudFunctionStatus_name, CloudFunctionStatus_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for CloudFunctionsService service + +type CloudFunctionsServiceClient interface { + // Returns a list of functions that belong to the requested project. + ListFunctions(ctx context.Context, in *ListFunctionsRequest, opts ...grpc.CallOption) (*ListFunctionsResponse, error) + // Returns a function with the given name from the requested project. + GetFunction(ctx context.Context, in *GetFunctionRequest, opts ...grpc.CallOption) (*CloudFunction, error) + // Creates a new function. If a function with the given name already exists in + // the specified project, the long running operation will return + // `ALREADY_EXISTS` error. + CreateFunction(ctx context.Context, in *CreateFunctionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Updates existing function. + UpdateFunction(ctx context.Context, in *UpdateFunctionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes a function with the given name from the specified project. If the + // given function is used by some trigger, the trigger will be updated to + // remove this function. + DeleteFunction(ctx context.Context, in *DeleteFunctionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Invokes synchronously deployed function. To be used for testing, very + // limited traffic allowed. + CallFunction(ctx context.Context, in *CallFunctionRequest, opts ...grpc.CallOption) (*CallFunctionResponse, error) +} + +type cloudFunctionsServiceClient struct { + cc *grpc.ClientConn +} + +func NewCloudFunctionsServiceClient(cc *grpc.ClientConn) CloudFunctionsServiceClient { + return &cloudFunctionsServiceClient{cc} +} + +func (c *cloudFunctionsServiceClient) ListFunctions(ctx context.Context, in *ListFunctionsRequest, opts ...grpc.CallOption) (*ListFunctionsResponse, error) { + out := new(ListFunctionsResponse) + err := grpc.Invoke(ctx, "/google.cloud.functions.v1beta2.CloudFunctionsService/ListFunctions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudFunctionsServiceClient) GetFunction(ctx context.Context, in *GetFunctionRequest, opts ...grpc.CallOption) (*CloudFunction, error) { + out := new(CloudFunction) + err := grpc.Invoke(ctx, "/google.cloud.functions.v1beta2.CloudFunctionsService/GetFunction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudFunctionsServiceClient) CreateFunction(ctx context.Context, in *CreateFunctionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.functions.v1beta2.CloudFunctionsService/CreateFunction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudFunctionsServiceClient) UpdateFunction(ctx context.Context, in *UpdateFunctionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.functions.v1beta2.CloudFunctionsService/UpdateFunction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudFunctionsServiceClient) DeleteFunction(ctx context.Context, in *DeleteFunctionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.functions.v1beta2.CloudFunctionsService/DeleteFunction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudFunctionsServiceClient) CallFunction(ctx context.Context, in *CallFunctionRequest, opts ...grpc.CallOption) (*CallFunctionResponse, error) { + out := new(CallFunctionResponse) + err := grpc.Invoke(ctx, "/google.cloud.functions.v1beta2.CloudFunctionsService/CallFunction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for CloudFunctionsService service + +type CloudFunctionsServiceServer interface { + // Returns a list of functions that belong to the requested project. + ListFunctions(context.Context, *ListFunctionsRequest) (*ListFunctionsResponse, error) + // Returns a function with the given name from the requested project. + GetFunction(context.Context, *GetFunctionRequest) (*CloudFunction, error) + // Creates a new function. If a function with the given name already exists in + // the specified project, the long running operation will return + // `ALREADY_EXISTS` error. + CreateFunction(context.Context, *CreateFunctionRequest) (*google_longrunning.Operation, error) + // Updates existing function. + UpdateFunction(context.Context, *UpdateFunctionRequest) (*google_longrunning.Operation, error) + // Deletes a function with the given name from the specified project. If the + // given function is used by some trigger, the trigger will be updated to + // remove this function. + DeleteFunction(context.Context, *DeleteFunctionRequest) (*google_longrunning.Operation, error) + // Invokes synchronously deployed function. To be used for testing, very + // limited traffic allowed. + CallFunction(context.Context, *CallFunctionRequest) (*CallFunctionResponse, error) +} + +func RegisterCloudFunctionsServiceServer(s *grpc.Server, srv CloudFunctionsServiceServer) { + s.RegisterService(&_CloudFunctionsService_serviceDesc, srv) +} + +func _CloudFunctionsService_ListFunctions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListFunctionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudFunctionsServiceServer).ListFunctions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.functions.v1beta2.CloudFunctionsService/ListFunctions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudFunctionsServiceServer).ListFunctions(ctx, req.(*ListFunctionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudFunctionsService_GetFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetFunctionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudFunctionsServiceServer).GetFunction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.functions.v1beta2.CloudFunctionsService/GetFunction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudFunctionsServiceServer).GetFunction(ctx, req.(*GetFunctionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudFunctionsService_CreateFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateFunctionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudFunctionsServiceServer).CreateFunction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.functions.v1beta2.CloudFunctionsService/CreateFunction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudFunctionsServiceServer).CreateFunction(ctx, req.(*CreateFunctionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudFunctionsService_UpdateFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateFunctionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudFunctionsServiceServer).UpdateFunction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.functions.v1beta2.CloudFunctionsService/UpdateFunction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudFunctionsServiceServer).UpdateFunction(ctx, req.(*UpdateFunctionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudFunctionsService_DeleteFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteFunctionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudFunctionsServiceServer).DeleteFunction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.functions.v1beta2.CloudFunctionsService/DeleteFunction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudFunctionsServiceServer).DeleteFunction(ctx, req.(*DeleteFunctionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudFunctionsService_CallFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CallFunctionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudFunctionsServiceServer).CallFunction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.functions.v1beta2.CloudFunctionsService/CallFunction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudFunctionsServiceServer).CallFunction(ctx, req.(*CallFunctionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _CloudFunctionsService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.functions.v1beta2.CloudFunctionsService", + HandlerType: (*CloudFunctionsServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListFunctions", + Handler: _CloudFunctionsService_ListFunctions_Handler, + }, + { + MethodName: "GetFunction", + Handler: _CloudFunctionsService_GetFunction_Handler, + }, + { + MethodName: "CreateFunction", + Handler: _CloudFunctionsService_CreateFunction_Handler, + }, + { + MethodName: "UpdateFunction", + Handler: _CloudFunctionsService_UpdateFunction_Handler, + }, + { + MethodName: "DeleteFunction", + Handler: _CloudFunctionsService_DeleteFunction_Handler, + }, + { + MethodName: "CallFunction", + Handler: _CloudFunctionsService_CallFunction_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/functions/v1beta2/functions.proto", +} + +func init() { proto.RegisterFile("google/cloud/functions/v1beta2/functions.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1216 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4d, 0x73, 0xdb, 0x44, + 0x18, 0xae, 0xf2, 0xe1, 0xc6, 0xaf, 0x3f, 0xe2, 0x6e, 0x9b, 0x8e, 0x30, 0x2d, 0x0d, 0x62, 0x80, + 0x90, 0x82, 0x0d, 0x6e, 0x80, 0x99, 0x7e, 0x30, 0x24, 0xb1, 0x93, 0x78, 0x9a, 0xb6, 0x1e, 0xd9, + 0x39, 0x94, 0x8b, 0x66, 0x2d, 0x6f, 0x15, 0x81, 0xac, 0x15, 0xab, 0x95, 0xa7, 0x29, 0x53, 0x0e, + 0xcc, 0x70, 0xe3, 0xc6, 0x3f, 0xe8, 0x99, 0xe1, 0x07, 0x30, 0xc3, 0x9d, 0x3b, 0x57, 0x86, 0x13, + 0x3f, 0x84, 0xd9, 0xd5, 0x4a, 0x96, 0x93, 0x14, 0x25, 0x19, 0x6e, 0xda, 0xe7, 0xfd, 0x7a, 0x76, + 0xdf, 0x67, 0x5f, 0xaf, 0xa1, 0xe1, 0x50, 0xea, 0x78, 0xa4, 0x69, 0x7b, 0x34, 0x1a, 0x35, 0x9f, + 0x45, 0xbe, 0xcd, 0x5d, 0xea, 0x87, 0xcd, 0xc9, 0x27, 0x43, 0xc2, 0x71, 0x6b, 0x8a, 0x34, 0x02, + 0x46, 0x39, 0x45, 0x6f, 0xc5, 0xfe, 0x0d, 0xe9, 0xdf, 0x98, 0x5a, 0x95, 0x7f, 0xfd, 0x86, 0xca, + 0x87, 0x03, 0xb7, 0x89, 0x7d, 0x9f, 0x72, 0x9c, 0x89, 0xae, 0xaf, 0x64, 0xad, 0x11, 0x3f, 0x54, + 0x70, 0x33, 0x87, 0x04, 0x0d, 0x08, 0x9b, 0xc9, 0xf3, 0x8e, 0x0a, 0xf0, 0xa8, 0xef, 0xb0, 0xc8, + 0xf7, 0x5d, 0xdf, 0x39, 0xe9, 0xa4, 0xa8, 0x36, 0xe5, 0x6a, 0x18, 0x3d, 0x6b, 0x8e, 0xa2, 0xd8, + 0x41, 0xd9, 0x6f, 0x1d, 0xb7, 0x73, 0x77, 0x4c, 0x42, 0x8e, 0xc7, 0x41, 0xec, 0x60, 0xfc, 0xb5, + 0x08, 0x95, 0x6d, 0x41, 0x69, 0x47, 0x31, 0x42, 0x08, 0x16, 0x7c, 0x3c, 0x26, 0xba, 0xb6, 0xaa, + 0xad, 0x15, 0x4d, 0xf9, 0x8d, 0x1a, 0x80, 0x42, 0x1a, 0x31, 0x9b, 0x58, 0x98, 0xd9, 0x87, 0xee, + 0x84, 0x58, 0x11, 0xf3, 0xf4, 0xaa, 0xf0, 0xd8, 0xbb, 0x64, 0xd6, 0x62, 0xdb, 0x66, 0x6c, 0x3a, + 0x60, 0x1e, 0xb2, 0xe0, 0x8a, 0xf2, 0x67, 0x24, 0xa0, 0xa1, 0xcb, 0x29, 0x3b, 0xd2, 0xe7, 0x57, + 0xb5, 0xb5, 0x52, 0xeb, 0xe3, 0xc6, 0x7f, 0x9f, 0x6e, 0xa3, 0x2f, 0x03, 0xcd, 0x34, 0x6e, 0x5a, + 0x60, 0x8a, 0xa1, 0x3e, 0x54, 0x0e, 0x39, 0x0f, 0x42, 0x8b, 0x33, 0xd7, 0x71, 0x08, 0xd3, 0x0b, + 0x32, 0xf9, 0x87, 0x79, 0xc9, 0xf7, 0x06, 0x83, 0x5e, 0x7f, 0x10, 0xc7, 0xec, 0x69, 0x66, 0x59, + 0x26, 0x51, 0x6b, 0x91, 0x94, 0x4c, 0x88, 0xcf, 0xd3, 0xa4, 0xe5, 0xb3, 0x25, 0xed, 0x88, 0xa0, + 0x4c, 0x52, 0x92, 0x59, 0xa3, 0x87, 0x50, 0x08, 0x39, 0xe6, 0x51, 0xa8, 0x5f, 0x5e, 0xd5, 0xd6, + 0xaa, 0xad, 0x3b, 0x79, 0xd9, 0x66, 0xba, 0xd1, 0x97, 0xa1, 0xa6, 0x4a, 0x81, 0x3e, 0x80, 0x9a, + 0x87, 0x39, 0x09, 0xb9, 0x95, 0x2a, 0x41, 0x5f, 0x92, 0x7d, 0x5a, 0x8e, 0xf1, 0x27, 0x09, 0x8c, + 0x6e, 0x41, 0x89, 0xf8, 0x9c, 0x1d, 0x59, 0x01, 0x75, 0x7d, 0xae, 0x17, 0xa5, 0x17, 0x48, 0xa8, + 0x27, 0x10, 0x74, 0x07, 0x2e, 0x0b, 0x31, 0xd0, 0x88, 0xeb, 0x20, 0xf7, 0xf9, 0x46, 0xc2, 0x2c, + 0x11, 0x4b, 0xa3, 0xad, 0xc4, 0x64, 0x26, 0x9e, 0xa8, 0x01, 0x57, 0xf1, 0x04, 0xbb, 0x1e, 0x1e, + 0x7a, 0xc4, 0x1a, 0x93, 0x31, 0x65, 0x47, 0xd6, 0x78, 0xa8, 0x97, 0x56, 0xb5, 0xb5, 0x45, 0xf3, + 0x4a, 0x6a, 0x7a, 0x24, 0x2d, 0x8f, 0x86, 0xe8, 0x7d, 0x58, 0x0e, 0x09, 0x9b, 0xb8, 0x42, 0x39, + 0xb6, 0x4d, 0x23, 0x9f, 0xeb, 0x15, 0xc9, 0xa4, 0xaa, 0xe0, 0xcd, 0x18, 0x45, 0xf7, 0xa0, 0x14, + 0x05, 0x23, 0xcc, 0x89, 0x25, 0x4a, 0xe9, 0xcb, 0x92, 0x51, 0xfd, 0x04, 0xa3, 0x41, 0x22, 0x5f, + 0x13, 0x62, 0x77, 0x01, 0x6c, 0x55, 0xa0, 0xa4, 0xe4, 0x66, 0xd3, 0x11, 0xd9, 0x2a, 0xc2, 0x65, + 0xd5, 0x41, 0x63, 0x15, 0xca, 0xd9, 0x96, 0xa3, 0x1a, 0xcc, 0x0b, 0xe5, 0xc6, 0xda, 0x16, 0x9f, + 0x46, 0x17, 0xca, 0xd9, 0xfe, 0xa1, 0x9b, 0x00, 0x4a, 0x04, 0x47, 0x41, 0x72, 0x09, 0x8a, 0x71, + 0x47, 0x8f, 0x02, 0x82, 0xea, 0xb0, 0xc4, 0x48, 0x5c, 0x4c, 0x9f, 0x93, 0xc6, 0x74, 0x6d, 0xfc, + 0xad, 0x41, 0xed, 0xb8, 0x7a, 0xd1, 0xbb, 0x50, 0x9d, 0xde, 0x01, 0x6b, 0x5a, 0xbc, 0x32, 0x45, + 0xc5, 0x8d, 0xb9, 0x95, 0x6e, 0x21, 0xc0, 0xfc, 0x50, 0xa5, 0x86, 0x18, 0xea, 0x61, 0x7e, 0x88, + 0x74, 0x28, 0x0c, 0x19, 0xf6, 0xed, 0x43, 0x79, 0x8f, 0xc4, 0xb5, 0x53, 0x6b, 0x84, 0x60, 0x9e, + 0x63, 0x47, 0x5f, 0x50, 0xb0, 0x58, 0xa0, 0x1b, 0x82, 0xe6, 0xc4, 0x0d, 0x85, 0x40, 0x16, 0x95, + 0x21, 0x45, 0xd0, 0x6d, 0xb8, 0x32, 0x22, 0x81, 0x47, 0x8f, 0xc8, 0xc8, 0x4a, 0xdd, 0x0a, 0xb2, + 0x64, 0x2d, 0x31, 0x98, 0x0a, 0x17, 0xa7, 0x39, 0x21, 0x4c, 0x7c, 0x1a, 0xdf, 0xc3, 0xca, 0x36, + 0x23, 0x98, 0x93, 0x44, 0x9e, 0x26, 0xf9, 0x36, 0x22, 0x21, 0x17, 0xa7, 0xe2, 0x51, 0x3b, 0xd6, + 0x63, 0xbc, 0xbd, 0x74, 0x8d, 0xba, 0xb0, 0x94, 0x88, 0x5c, 0x6e, 0xab, 0xd4, 0xfa, 0xe8, 0x5c, + 0x57, 0xc0, 0x4c, 0xc3, 0x8d, 0x09, 0xac, 0x1c, 0xc8, 0xae, 0x1f, 0xaf, 0x7f, 0xda, 0xcc, 0xfa, + 0x1f, 0xeb, 0xae, 0x01, 0xda, 0x25, 0xfc, 0x0c, 0x45, 0x0d, 0x1f, 0xae, 0xed, 0xbb, 0x61, 0xea, + 0x1a, 0x9e, 0xe5, 0x80, 0xde, 0x84, 0x62, 0x80, 0x1d, 0x62, 0x85, 0xee, 0x8b, 0x58, 0x53, 0x8b, + 0xe6, 0x92, 0x00, 0xfa, 0xee, 0x0b, 0x22, 0xe4, 0x28, 0x8d, 0x9c, 0x7e, 0x43, 0xfc, 0xb8, 0xf5, + 0xa6, 0x74, 0x1f, 0x08, 0xc0, 0xf8, 0x49, 0x83, 0x95, 0x63, 0x05, 0xc3, 0x80, 0xfa, 0x21, 0x41, + 0x0f, 0xa1, 0x98, 0x6e, 0x50, 0xd7, 0x56, 0xe7, 0xcf, 0xbf, 0xff, 0x69, 0x3c, 0x7a, 0x0f, 0x96, + 0x7d, 0xf2, 0x9c, 0x5b, 0x19, 0x2a, 0xb1, 0x42, 0x2b, 0x02, 0xee, 0xa5, 0x74, 0x6e, 0xc3, 0x4a, + 0x9b, 0x78, 0xe4, 0x4c, 0x0d, 0x32, 0x1e, 0xc0, 0xd5, 0x6d, 0xec, 0x79, 0x67, 0xe9, 0x25, 0x82, + 0x85, 0x11, 0xe6, 0x58, 0x15, 0x95, 0xdf, 0x86, 0x03, 0xd7, 0x66, 0xc3, 0xd5, 0xc6, 0xdf, 0x86, + 0x32, 0x79, 0x4e, 0xec, 0x48, 0x80, 0x96, 0x3b, 0x52, 0x79, 0x4a, 0x29, 0xd6, 0x1d, 0xa1, 0xeb, + 0x50, 0x60, 0x24, 0x8c, 0x3c, 0xae, 0x12, 0xaa, 0x15, 0xba, 0x06, 0x8b, 0x84, 0x31, 0xca, 0xd4, + 0x39, 0xc7, 0x8b, 0x75, 0x0c, 0x57, 0x4f, 0x99, 0xc9, 0xe8, 0x3a, 0xa0, 0xfe, 0x60, 0x73, 0x70, + 0xd0, 0xb7, 0x0e, 0x1e, 0xf7, 0x7b, 0x9d, 0xed, 0xee, 0x4e, 0xb7, 0xd3, 0xae, 0x5d, 0x42, 0x45, + 0x58, 0x34, 0x3b, 0x9b, 0xed, 0xa7, 0x35, 0x0d, 0x01, 0x14, 0x76, 0x36, 0xbb, 0xfb, 0x9d, 0x76, + 0x6d, 0x0e, 0x55, 0xa0, 0xd8, 0xee, 0xf4, 0xf6, 0x9f, 0x3c, 0xed, 0x3e, 0xde, 0xad, 0xcd, 0xa3, + 0x32, 0x2c, 0xb5, 0x3b, 0xfb, 0x9d, 0x81, 0x58, 0x2d, 0xb4, 0xfe, 0x58, 0x82, 0x95, 0x99, 0x1a, + 0x61, 0x3f, 0x1e, 0x8f, 0xe8, 0x37, 0x0d, 0x2a, 0x33, 0x0d, 0x46, 0x1b, 0x79, 0x5d, 0x3c, 0x4d, + 0x80, 0xf5, 0x4f, 0xcf, 0x19, 0x15, 0x1f, 0xa6, 0x71, 0xff, 0x87, 0x3f, 0xff, 0xf9, 0x79, 0xee, + 0x33, 0xb4, 0x91, 0xbe, 0x53, 0xbe, 0x4b, 0x74, 0xfb, 0x20, 0x60, 0xf4, 0x6b, 0x62, 0xf3, 0xb0, + 0xb9, 0xde, 0x4c, 0xb0, 0xb0, 0xb9, 0xfe, 0x72, 0xfa, 0xb6, 0x41, 0xbf, 0x68, 0x50, 0xca, 0x5c, + 0x1c, 0xd4, 0xca, 0x23, 0x71, 0xf2, 0x96, 0xd5, 0xcf, 0x27, 0x5a, 0xe3, 0xae, 0x24, 0xbc, 0x81, + 0x5a, 0x53, 0xc2, 0x42, 0x41, 0xaf, 0x21, 0x9b, 0x79, 0x87, 0xad, 0xbf, 0x44, 0xbf, 0x6a, 0x50, + 0x9d, 0x9d, 0x6f, 0x28, 0xf7, 0xd8, 0x4e, 0x9d, 0x87, 0xf5, 0x9b, 0x49, 0x58, 0xe6, 0xf1, 0xd6, + 0x48, 0x7f, 0x9b, 0x8d, 0x1d, 0x49, 0xf2, 0x4b, 0xe3, 0x42, 0xa7, 0x7a, 0x37, 0x9d, 0x4b, 0xe2, + 0x7c, 0xab, 0xb3, 0x03, 0x31, 0x9f, 0xf0, 0xa9, 0x03, 0x34, 0x8f, 0x70, 0x5b, 0x12, 0xfe, 0xa2, + 0x7e, 0x81, 0x53, 0xcd, 0xd0, 0x7d, 0xa5, 0x41, 0x75, 0x76, 0x3c, 0xe4, 0xd3, 0x3d, 0x75, 0x9c, + 0xe4, 0xd1, 0x55, 0x22, 0x58, 0xbf, 0x88, 0x08, 0x7e, 0xd7, 0xa0, 0x9c, 0x9d, 0x2b, 0x28, 0xff, + 0xc1, 0x76, 0x72, 0x88, 0xd5, 0x37, 0xce, 0x17, 0xa4, 0x6e, 0xdb, 0x96, 0xe4, 0x7d, 0xdf, 0xf8, + 0xfc, 0x02, 0xc7, 0x6c, 0x63, 0xcf, 0xbb, 0xab, 0xad, 0x6f, 0xfd, 0xa8, 0x81, 0x61, 0xd3, 0x71, + 0x4e, 0xfd, 0xad, 0x6a, 0x7a, 0xd7, 0x7b, 0xe2, 0x6d, 0xd5, 0xd3, 0xbe, 0xda, 0x55, 0x11, 0x0e, + 0xf5, 0xb0, 0xef, 0x34, 0x28, 0x73, 0x9a, 0x0e, 0xf1, 0xe5, 0xcb, 0x4b, 0xfd, 0x77, 0xc1, 0x81, + 0x1b, 0xbe, 0xee, 0xff, 0xcb, 0xbd, 0x14, 0x79, 0x35, 0x37, 0xbf, 0xbb, 0xbd, 0x33, 0x2c, 0xc8, + 0xc8, 0x3b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x22, 0xa1, 0xda, 0x9f, 0x7d, 0x0d, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/operations.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/operations.pb.go new file mode 100644 index 0000000..33658f6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/operations.pb.go @@ -0,0 +1,117 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/functions/v1beta2/operations.proto +// DO NOT EDIT! + +package functions + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A type of an operation. +type OperationType int32 + +const ( + // Unknown operation type. + OperationType_OPERATION_UNSPECIFIED OperationType = 0 + // Triggered by CreateFunction call + OperationType_CREATE_FUNCTION OperationType = 1 + // Triggered by UpdateFunction call + OperationType_UPDATE_FUNCTION OperationType = 2 + // Triggered by DeleteFunction call. + OperationType_DELETE_FUNCTION OperationType = 3 +) + +var OperationType_name = map[int32]string{ + 0: "OPERATION_UNSPECIFIED", + 1: "CREATE_FUNCTION", + 2: "UPDATE_FUNCTION", + 3: "DELETE_FUNCTION", +} +var OperationType_value = map[string]int32{ + "OPERATION_UNSPECIFIED": 0, + "CREATE_FUNCTION": 1, + "UPDATE_FUNCTION": 2, + "DELETE_FUNCTION": 3, +} + +func (x OperationType) String() string { + return proto.EnumName(OperationType_name, int32(x)) +} +func (OperationType) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Metadata describing an [Operation][google.longrunning.Operation] +type OperationMetadataV1Beta2 struct { + // Target of the operation - for example + // projects/project-1/locations/region-1/functions/function-1 + Target string `protobuf:"bytes,1,opt,name=target" json:"target,omitempty"` + // Type of operation. + Type OperationType `protobuf:"varint,2,opt,name=type,enum=google.cloud.functions.v1beta2.OperationType" json:"type,omitempty"` + // The original request that started the operation. + Request *google_protobuf1.Any `protobuf:"bytes,3,opt,name=request" json:"request,omitempty"` +} + +func (m *OperationMetadataV1Beta2) Reset() { *m = OperationMetadataV1Beta2{} } +func (m *OperationMetadataV1Beta2) String() string { return proto.CompactTextString(m) } +func (*OperationMetadataV1Beta2) ProtoMessage() {} +func (*OperationMetadataV1Beta2) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *OperationMetadataV1Beta2) GetTarget() string { + if m != nil { + return m.Target + } + return "" +} + +func (m *OperationMetadataV1Beta2) GetType() OperationType { + if m != nil { + return m.Type + } + return OperationType_OPERATION_UNSPECIFIED +} + +func (m *OperationMetadataV1Beta2) GetRequest() *google_protobuf1.Any { + if m != nil { + return m.Request + } + return nil +} + +func init() { + proto.RegisterType((*OperationMetadataV1Beta2)(nil), "google.cloud.functions.v1beta2.OperationMetadataV1Beta2") + proto.RegisterEnum("google.cloud.functions.v1beta2.OperationType", OperationType_name, OperationType_value) +} + +func init() { proto.RegisterFile("google/cloud/functions/v1beta2/operations.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 333 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x4f, 0x4f, 0xf2, 0x30, + 0x1c, 0xc7, 0x9f, 0xc2, 0x13, 0x8c, 0x35, 0x2a, 0x99, 0x7f, 0x32, 0x88, 0x31, 0x84, 0x13, 0x31, + 0xb1, 0x0d, 0x78, 0xf4, 0x34, 0xa0, 0x18, 0x12, 0x85, 0x65, 0x82, 0x07, 0x2f, 0xa4, 0x40, 0x69, + 0x96, 0xcc, 0xb6, 0x6e, 0x9d, 0xc9, 0x5e, 0x82, 0x2f, 0xc4, 0xf7, 0x69, 0x56, 0xba, 0x05, 0x0e, + 0xea, 0xb1, 0x9f, 0xf6, 0xf3, 0xed, 0xf7, 0x97, 0x1f, 0xc4, 0x5c, 0x4a, 0x1e, 0x31, 0xbc, 0x8a, + 0x64, 0xba, 0xc6, 0x9b, 0x54, 0xac, 0x74, 0x28, 0x45, 0x82, 0x3f, 0xba, 0x4b, 0xa6, 0x69, 0x0f, + 0x4b, 0xc5, 0x62, 0x6a, 0x10, 0x52, 0xb1, 0xd4, 0xd2, 0xb9, 0xde, 0x0a, 0xc8, 0x08, 0xa8, 0x14, + 0x90, 0x15, 0x9a, 0x57, 0x36, 0x90, 0xaa, 0x10, 0x53, 0x21, 0xa4, 0xde, 0xb5, 0x9b, 0x0d, 0x7b, + 0x6b, 0x4e, 0xcb, 0x74, 0x83, 0xa9, 0xc8, 0xb6, 0x57, 0xed, 0x2f, 0x00, 0xdd, 0x69, 0xf1, 0xdb, + 0x13, 0xd3, 0x74, 0x4d, 0x35, 0x7d, 0xe9, 0xf6, 0xf3, 0x54, 0xe7, 0x12, 0xd6, 0x34, 0x8d, 0x39, + 0xd3, 0x2e, 0x68, 0x81, 0xce, 0x61, 0x60, 0x4f, 0x8e, 0x07, 0xff, 0xeb, 0x4c, 0x31, 0xb7, 0xd2, + 0x02, 0x9d, 0x93, 0xde, 0x2d, 0xfa, 0xbd, 0x1c, 0x2a, 0xf3, 0x67, 0x99, 0x62, 0x81, 0x51, 0x1d, + 0x04, 0x0f, 0x62, 0xf6, 0x9e, 0xb2, 0x44, 0xbb, 0xd5, 0x16, 0xe8, 0x1c, 0xf5, 0xce, 0x8b, 0x94, + 0xa2, 0x24, 0xf2, 0x44, 0x16, 0x14, 0x8f, 0x6e, 0x42, 0x78, 0xbc, 0x17, 0xe3, 0x34, 0xe0, 0xc5, + 0xd4, 0x27, 0x81, 0x37, 0x1b, 0x4f, 0x27, 0x8b, 0xf9, 0xe4, 0xd9, 0x27, 0x83, 0xf1, 0x68, 0x4c, + 0x86, 0xf5, 0x7f, 0xce, 0x19, 0x3c, 0x1d, 0x04, 0xc4, 0x9b, 0x91, 0xc5, 0x68, 0x3e, 0x19, 0xe4, + 0x0f, 0xea, 0x20, 0x87, 0x73, 0x7f, 0xb8, 0x07, 0x2b, 0x39, 0x1c, 0x92, 0x47, 0xb2, 0x0b, 0xab, + 0xfd, 0x4f, 0x00, 0xdb, 0x2b, 0xf9, 0xf6, 0xc7, 0x54, 0x7d, 0x77, 0x54, 0xa0, 0xb2, 0x58, 0xe2, + 0xe7, 0xdd, 0x7d, 0xf0, 0xfa, 0x60, 0x5d, 0x2e, 0x23, 0x2a, 0x38, 0x92, 0x31, 0xc7, 0x9c, 0x09, + 0x33, 0x99, 0x5d, 0x3d, 0x55, 0x61, 0xf2, 0xd3, 0xfa, 0xef, 0x4b, 0xb2, 0xac, 0x19, 0xe7, 0xee, + 0x3b, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x8a, 0xb1, 0x83, 0x31, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/language/v1/language_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1/language_service.pb.go new file mode 100644 index 0000000..59b8393 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1/language_service.pb.go @@ -0,0 +1,2302 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/language/v1/language_service.proto +// DO NOT EDIT! + +/* +Package language is a generated protocol buffer package. + +It is generated from these files: + google/cloud/language/v1/language_service.proto + +It has these top-level messages: + Document + Sentence + Entity + Token + Sentiment + PartOfSpeech + DependencyEdge + EntityMention + TextSpan + AnalyzeSentimentRequest + AnalyzeSentimentResponse + AnalyzeEntitiesRequest + AnalyzeEntitiesResponse + AnalyzeSyntaxRequest + AnalyzeSyntaxResponse + AnnotateTextRequest + AnnotateTextResponse +*/ +package language + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Represents the text encoding that the caller uses to process the output. +// Providing an `EncodingType` is recommended because the API provides the +// beginning offsets for various outputs, such as tokens and mentions, and +// languages that natively use different text encodings may access offsets +// differently. +type EncodingType int32 + +const ( + // If `EncodingType` is not specified, encoding-dependent information (such as + // `begin_offset`) will be set at `-1`. + EncodingType_NONE EncodingType = 0 + // Encoding-dependent information (such as `begin_offset`) is calculated based + // on the UTF-8 encoding of the input. C++ and Go are examples of languages + // that use this encoding natively. + EncodingType_UTF8 EncodingType = 1 + // Encoding-dependent information (such as `begin_offset`) is calculated based + // on the UTF-16 encoding of the input. Java and Javascript are examples of + // languages that use this encoding natively. + EncodingType_UTF16 EncodingType = 2 + // Encoding-dependent information (such as `begin_offset`) is calculated based + // on the UTF-32 encoding of the input. Python is an example of a language + // that uses this encoding natively. + EncodingType_UTF32 EncodingType = 3 +) + +var EncodingType_name = map[int32]string{ + 0: "NONE", + 1: "UTF8", + 2: "UTF16", + 3: "UTF32", +} +var EncodingType_value = map[string]int32{ + "NONE": 0, + "UTF8": 1, + "UTF16": 2, + "UTF32": 3, +} + +func (x EncodingType) String() string { + return proto.EnumName(EncodingType_name, int32(x)) +} +func (EncodingType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// The document types enum. +type Document_Type int32 + +const ( + // The content type is not specified. + Document_TYPE_UNSPECIFIED Document_Type = 0 + // Plain text + Document_PLAIN_TEXT Document_Type = 1 + // HTML + Document_HTML Document_Type = 2 +) + +var Document_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "PLAIN_TEXT", + 2: "HTML", +} +var Document_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "PLAIN_TEXT": 1, + "HTML": 2, +} + +func (x Document_Type) String() string { + return proto.EnumName(Document_Type_name, int32(x)) +} +func (Document_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// The type of the entity. +type Entity_Type int32 + +const ( + // Unknown + Entity_UNKNOWN Entity_Type = 0 + // Person + Entity_PERSON Entity_Type = 1 + // Location + Entity_LOCATION Entity_Type = 2 + // Organization + Entity_ORGANIZATION Entity_Type = 3 + // Event + Entity_EVENT Entity_Type = 4 + // Work of art + Entity_WORK_OF_ART Entity_Type = 5 + // Consumer goods + Entity_CONSUMER_GOOD Entity_Type = 6 + // Other types + Entity_OTHER Entity_Type = 7 +) + +var Entity_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PERSON", + 2: "LOCATION", + 3: "ORGANIZATION", + 4: "EVENT", + 5: "WORK_OF_ART", + 6: "CONSUMER_GOOD", + 7: "OTHER", +} +var Entity_Type_value = map[string]int32{ + "UNKNOWN": 0, + "PERSON": 1, + "LOCATION": 2, + "ORGANIZATION": 3, + "EVENT": 4, + "WORK_OF_ART": 5, + "CONSUMER_GOOD": 6, + "OTHER": 7, +} + +func (x Entity_Type) String() string { + return proto.EnumName(Entity_Type_name, int32(x)) +} +func (Entity_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +// The part of speech tags enum. +type PartOfSpeech_Tag int32 + +const ( + // Unknown + PartOfSpeech_UNKNOWN PartOfSpeech_Tag = 0 + // Adjective + PartOfSpeech_ADJ PartOfSpeech_Tag = 1 + // Adposition (preposition and postposition) + PartOfSpeech_ADP PartOfSpeech_Tag = 2 + // Adverb + PartOfSpeech_ADV PartOfSpeech_Tag = 3 + // Conjunction + PartOfSpeech_CONJ PartOfSpeech_Tag = 4 + // Determiner + PartOfSpeech_DET PartOfSpeech_Tag = 5 + // Noun (common and proper) + PartOfSpeech_NOUN PartOfSpeech_Tag = 6 + // Cardinal number + PartOfSpeech_NUM PartOfSpeech_Tag = 7 + // Pronoun + PartOfSpeech_PRON PartOfSpeech_Tag = 8 + // Particle or other function word + PartOfSpeech_PRT PartOfSpeech_Tag = 9 + // Punctuation + PartOfSpeech_PUNCT PartOfSpeech_Tag = 10 + // Verb (all tenses and modes) + PartOfSpeech_VERB PartOfSpeech_Tag = 11 + // Other: foreign words, typos, abbreviations + PartOfSpeech_X PartOfSpeech_Tag = 12 + // Affix + PartOfSpeech_AFFIX PartOfSpeech_Tag = 13 +) + +var PartOfSpeech_Tag_name = map[int32]string{ + 0: "UNKNOWN", + 1: "ADJ", + 2: "ADP", + 3: "ADV", + 4: "CONJ", + 5: "DET", + 6: "NOUN", + 7: "NUM", + 8: "PRON", + 9: "PRT", + 10: "PUNCT", + 11: "VERB", + 12: "X", + 13: "AFFIX", +} +var PartOfSpeech_Tag_value = map[string]int32{ + "UNKNOWN": 0, + "ADJ": 1, + "ADP": 2, + "ADV": 3, + "CONJ": 4, + "DET": 5, + "NOUN": 6, + "NUM": 7, + "PRON": 8, + "PRT": 9, + "PUNCT": 10, + "VERB": 11, + "X": 12, + "AFFIX": 13, +} + +func (x PartOfSpeech_Tag) String() string { + return proto.EnumName(PartOfSpeech_Tag_name, int32(x)) +} +func (PartOfSpeech_Tag) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 0} } + +// The characteristic of a verb that expresses time flow during an event. +type PartOfSpeech_Aspect int32 + +const ( + // Aspect is not applicable in the analyzed language or is not predicted. + PartOfSpeech_ASPECT_UNKNOWN PartOfSpeech_Aspect = 0 + // Perfective + PartOfSpeech_PERFECTIVE PartOfSpeech_Aspect = 1 + // Imperfective + PartOfSpeech_IMPERFECTIVE PartOfSpeech_Aspect = 2 + // Progressive + PartOfSpeech_PROGRESSIVE PartOfSpeech_Aspect = 3 +) + +var PartOfSpeech_Aspect_name = map[int32]string{ + 0: "ASPECT_UNKNOWN", + 1: "PERFECTIVE", + 2: "IMPERFECTIVE", + 3: "PROGRESSIVE", +} +var PartOfSpeech_Aspect_value = map[string]int32{ + "ASPECT_UNKNOWN": 0, + "PERFECTIVE": 1, + "IMPERFECTIVE": 2, + "PROGRESSIVE": 3, +} + +func (x PartOfSpeech_Aspect) String() string { + return proto.EnumName(PartOfSpeech_Aspect_name, int32(x)) +} +func (PartOfSpeech_Aspect) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 1} } + +// The grammatical function performed by a noun or pronoun in a phrase, +// clause, or sentence. In some languages, other parts of speech, such as +// adjective and determiner, take case inflection in agreement with the noun. +type PartOfSpeech_Case int32 + +const ( + // Case is not applicable in the analyzed language or is not predicted. + PartOfSpeech_CASE_UNKNOWN PartOfSpeech_Case = 0 + // Accusative + PartOfSpeech_ACCUSATIVE PartOfSpeech_Case = 1 + // Adverbial + PartOfSpeech_ADVERBIAL PartOfSpeech_Case = 2 + // Complementive + PartOfSpeech_COMPLEMENTIVE PartOfSpeech_Case = 3 + // Dative + PartOfSpeech_DATIVE PartOfSpeech_Case = 4 + // Genitive + PartOfSpeech_GENITIVE PartOfSpeech_Case = 5 + // Instrumental + PartOfSpeech_INSTRUMENTAL PartOfSpeech_Case = 6 + // Locative + PartOfSpeech_LOCATIVE PartOfSpeech_Case = 7 + // Nominative + PartOfSpeech_NOMINATIVE PartOfSpeech_Case = 8 + // Oblique + PartOfSpeech_OBLIQUE PartOfSpeech_Case = 9 + // Partitive + PartOfSpeech_PARTITIVE PartOfSpeech_Case = 10 + // Prepositional + PartOfSpeech_PREPOSITIONAL PartOfSpeech_Case = 11 + // Reflexive + PartOfSpeech_REFLEXIVE_CASE PartOfSpeech_Case = 12 + // Relative + PartOfSpeech_RELATIVE_CASE PartOfSpeech_Case = 13 + // Vocative + PartOfSpeech_VOCATIVE PartOfSpeech_Case = 14 +) + +var PartOfSpeech_Case_name = map[int32]string{ + 0: "CASE_UNKNOWN", + 1: "ACCUSATIVE", + 2: "ADVERBIAL", + 3: "COMPLEMENTIVE", + 4: "DATIVE", + 5: "GENITIVE", + 6: "INSTRUMENTAL", + 7: "LOCATIVE", + 8: "NOMINATIVE", + 9: "OBLIQUE", + 10: "PARTITIVE", + 11: "PREPOSITIONAL", + 12: "REFLEXIVE_CASE", + 13: "RELATIVE_CASE", + 14: "VOCATIVE", +} +var PartOfSpeech_Case_value = map[string]int32{ + "CASE_UNKNOWN": 0, + "ACCUSATIVE": 1, + "ADVERBIAL": 2, + "COMPLEMENTIVE": 3, + "DATIVE": 4, + "GENITIVE": 5, + "INSTRUMENTAL": 6, + "LOCATIVE": 7, + "NOMINATIVE": 8, + "OBLIQUE": 9, + "PARTITIVE": 10, + "PREPOSITIONAL": 11, + "REFLEXIVE_CASE": 12, + "RELATIVE_CASE": 13, + "VOCATIVE": 14, +} + +func (x PartOfSpeech_Case) String() string { + return proto.EnumName(PartOfSpeech_Case_name, int32(x)) +} +func (PartOfSpeech_Case) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 2} } + +// Depending on the language, Form can be categorizing different forms of +// verbs, adjectives, adverbs, etc. For example, categorizing inflected +// endings of verbs and adjectives or distinguishing between short and long +// forms of adjectives and participles +type PartOfSpeech_Form int32 + +const ( + // Form is not applicable in the analyzed language or is not predicted. + PartOfSpeech_FORM_UNKNOWN PartOfSpeech_Form = 0 + // Adnomial + PartOfSpeech_ADNOMIAL PartOfSpeech_Form = 1 + // Auxiliary + PartOfSpeech_AUXILIARY PartOfSpeech_Form = 2 + // Complementizer + PartOfSpeech_COMPLEMENTIZER PartOfSpeech_Form = 3 + // Final ending + PartOfSpeech_FINAL_ENDING PartOfSpeech_Form = 4 + // Gerund + PartOfSpeech_GERUND PartOfSpeech_Form = 5 + // Realis + PartOfSpeech_REALIS PartOfSpeech_Form = 6 + // Irrealis + PartOfSpeech_IRREALIS PartOfSpeech_Form = 7 + // Short form + PartOfSpeech_SHORT PartOfSpeech_Form = 8 + // Long form + PartOfSpeech_LONG PartOfSpeech_Form = 9 + // Order form + PartOfSpeech_ORDER PartOfSpeech_Form = 10 + // Specific form + PartOfSpeech_SPECIFIC PartOfSpeech_Form = 11 +) + +var PartOfSpeech_Form_name = map[int32]string{ + 0: "FORM_UNKNOWN", + 1: "ADNOMIAL", + 2: "AUXILIARY", + 3: "COMPLEMENTIZER", + 4: "FINAL_ENDING", + 5: "GERUND", + 6: "REALIS", + 7: "IRREALIS", + 8: "SHORT", + 9: "LONG", + 10: "ORDER", + 11: "SPECIFIC", +} +var PartOfSpeech_Form_value = map[string]int32{ + "FORM_UNKNOWN": 0, + "ADNOMIAL": 1, + "AUXILIARY": 2, + "COMPLEMENTIZER": 3, + "FINAL_ENDING": 4, + "GERUND": 5, + "REALIS": 6, + "IRREALIS": 7, + "SHORT": 8, + "LONG": 9, + "ORDER": 10, + "SPECIFIC": 11, +} + +func (x PartOfSpeech_Form) String() string { + return proto.EnumName(PartOfSpeech_Form_name, int32(x)) +} +func (PartOfSpeech_Form) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 3} } + +// Gender classes of nouns reflected in the behaviour of associated words. +type PartOfSpeech_Gender int32 + +const ( + // Gender is not applicable in the analyzed language or is not predicted. + PartOfSpeech_GENDER_UNKNOWN PartOfSpeech_Gender = 0 + // Feminine + PartOfSpeech_FEMININE PartOfSpeech_Gender = 1 + // Masculine + PartOfSpeech_MASCULINE PartOfSpeech_Gender = 2 + // Neuter + PartOfSpeech_NEUTER PartOfSpeech_Gender = 3 +) + +var PartOfSpeech_Gender_name = map[int32]string{ + 0: "GENDER_UNKNOWN", + 1: "FEMININE", + 2: "MASCULINE", + 3: "NEUTER", +} +var PartOfSpeech_Gender_value = map[string]int32{ + "GENDER_UNKNOWN": 0, + "FEMININE": 1, + "MASCULINE": 2, + "NEUTER": 3, +} + +func (x PartOfSpeech_Gender) String() string { + return proto.EnumName(PartOfSpeech_Gender_name, int32(x)) +} +func (PartOfSpeech_Gender) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 4} } + +// The grammatical feature of verbs, used for showing modality and attitude. +type PartOfSpeech_Mood int32 + +const ( + // Mood is not applicable in the analyzed language or is not predicted. + PartOfSpeech_MOOD_UNKNOWN PartOfSpeech_Mood = 0 + // Conditional + PartOfSpeech_CONDITIONAL_MOOD PartOfSpeech_Mood = 1 + // Imperative + PartOfSpeech_IMPERATIVE PartOfSpeech_Mood = 2 + // Indicative + PartOfSpeech_INDICATIVE PartOfSpeech_Mood = 3 + // Interrogative + PartOfSpeech_INTERROGATIVE PartOfSpeech_Mood = 4 + // Jussive + PartOfSpeech_JUSSIVE PartOfSpeech_Mood = 5 + // Subjunctive + PartOfSpeech_SUBJUNCTIVE PartOfSpeech_Mood = 6 +) + +var PartOfSpeech_Mood_name = map[int32]string{ + 0: "MOOD_UNKNOWN", + 1: "CONDITIONAL_MOOD", + 2: "IMPERATIVE", + 3: "INDICATIVE", + 4: "INTERROGATIVE", + 5: "JUSSIVE", + 6: "SUBJUNCTIVE", +} +var PartOfSpeech_Mood_value = map[string]int32{ + "MOOD_UNKNOWN": 0, + "CONDITIONAL_MOOD": 1, + "IMPERATIVE": 2, + "INDICATIVE": 3, + "INTERROGATIVE": 4, + "JUSSIVE": 5, + "SUBJUNCTIVE": 6, +} + +func (x PartOfSpeech_Mood) String() string { + return proto.EnumName(PartOfSpeech_Mood_name, int32(x)) +} +func (PartOfSpeech_Mood) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 5} } + +// Count distinctions. +type PartOfSpeech_Number int32 + +const ( + // Number is not applicable in the analyzed language or is not predicted. + PartOfSpeech_NUMBER_UNKNOWN PartOfSpeech_Number = 0 + // Singular + PartOfSpeech_SINGULAR PartOfSpeech_Number = 1 + // Plural + PartOfSpeech_PLURAL PartOfSpeech_Number = 2 + // Dual + PartOfSpeech_DUAL PartOfSpeech_Number = 3 +) + +var PartOfSpeech_Number_name = map[int32]string{ + 0: "NUMBER_UNKNOWN", + 1: "SINGULAR", + 2: "PLURAL", + 3: "DUAL", +} +var PartOfSpeech_Number_value = map[string]int32{ + "NUMBER_UNKNOWN": 0, + "SINGULAR": 1, + "PLURAL": 2, + "DUAL": 3, +} + +func (x PartOfSpeech_Number) String() string { + return proto.EnumName(PartOfSpeech_Number_name, int32(x)) +} +func (PartOfSpeech_Number) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 6} } + +// The distinction between the speaker, second person, third person, etc. +type PartOfSpeech_Person int32 + +const ( + // Person is not applicable in the analyzed language or is not predicted. + PartOfSpeech_PERSON_UNKNOWN PartOfSpeech_Person = 0 + // First + PartOfSpeech_FIRST PartOfSpeech_Person = 1 + // Second + PartOfSpeech_SECOND PartOfSpeech_Person = 2 + // Third + PartOfSpeech_THIRD PartOfSpeech_Person = 3 + // Reflexive + PartOfSpeech_REFLEXIVE_PERSON PartOfSpeech_Person = 4 +) + +var PartOfSpeech_Person_name = map[int32]string{ + 0: "PERSON_UNKNOWN", + 1: "FIRST", + 2: "SECOND", + 3: "THIRD", + 4: "REFLEXIVE_PERSON", +} +var PartOfSpeech_Person_value = map[string]int32{ + "PERSON_UNKNOWN": 0, + "FIRST": 1, + "SECOND": 2, + "THIRD": 3, + "REFLEXIVE_PERSON": 4, +} + +func (x PartOfSpeech_Person) String() string { + return proto.EnumName(PartOfSpeech_Person_name, int32(x)) +} +func (PartOfSpeech_Person) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 7} } + +// This category shows if the token is part of a proper name. +type PartOfSpeech_Proper int32 + +const ( + // Proper is not applicable in the analyzed language or is not predicted. + PartOfSpeech_PROPER_UNKNOWN PartOfSpeech_Proper = 0 + // Proper + PartOfSpeech_PROPER PartOfSpeech_Proper = 1 + // Not proper + PartOfSpeech_NOT_PROPER PartOfSpeech_Proper = 2 +) + +var PartOfSpeech_Proper_name = map[int32]string{ + 0: "PROPER_UNKNOWN", + 1: "PROPER", + 2: "NOT_PROPER", +} +var PartOfSpeech_Proper_value = map[string]int32{ + "PROPER_UNKNOWN": 0, + "PROPER": 1, + "NOT_PROPER": 2, +} + +func (x PartOfSpeech_Proper) String() string { + return proto.EnumName(PartOfSpeech_Proper_name, int32(x)) +} +func (PartOfSpeech_Proper) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 8} } + +// Reciprocal features of a pronoun. +type PartOfSpeech_Reciprocity int32 + +const ( + // Reciprocity is not applicable in the analyzed language or is not + // predicted. + PartOfSpeech_RECIPROCITY_UNKNOWN PartOfSpeech_Reciprocity = 0 + // Reciprocal + PartOfSpeech_RECIPROCAL PartOfSpeech_Reciprocity = 1 + // Non-reciprocal + PartOfSpeech_NON_RECIPROCAL PartOfSpeech_Reciprocity = 2 +) + +var PartOfSpeech_Reciprocity_name = map[int32]string{ + 0: "RECIPROCITY_UNKNOWN", + 1: "RECIPROCAL", + 2: "NON_RECIPROCAL", +} +var PartOfSpeech_Reciprocity_value = map[string]int32{ + "RECIPROCITY_UNKNOWN": 0, + "RECIPROCAL": 1, + "NON_RECIPROCAL": 2, +} + +func (x PartOfSpeech_Reciprocity) String() string { + return proto.EnumName(PartOfSpeech_Reciprocity_name, int32(x)) +} +func (PartOfSpeech_Reciprocity) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 9} } + +// Time reference. +type PartOfSpeech_Tense int32 + +const ( + // Tense is not applicable in the analyzed language or is not predicted. + PartOfSpeech_TENSE_UNKNOWN PartOfSpeech_Tense = 0 + // Conditional + PartOfSpeech_CONDITIONAL_TENSE PartOfSpeech_Tense = 1 + // Future + PartOfSpeech_FUTURE PartOfSpeech_Tense = 2 + // Past + PartOfSpeech_PAST PartOfSpeech_Tense = 3 + // Present + PartOfSpeech_PRESENT PartOfSpeech_Tense = 4 + // Imperfect + PartOfSpeech_IMPERFECT PartOfSpeech_Tense = 5 + // Pluperfect + PartOfSpeech_PLUPERFECT PartOfSpeech_Tense = 6 +) + +var PartOfSpeech_Tense_name = map[int32]string{ + 0: "TENSE_UNKNOWN", + 1: "CONDITIONAL_TENSE", + 2: "FUTURE", + 3: "PAST", + 4: "PRESENT", + 5: "IMPERFECT", + 6: "PLUPERFECT", +} +var PartOfSpeech_Tense_value = map[string]int32{ + "TENSE_UNKNOWN": 0, + "CONDITIONAL_TENSE": 1, + "FUTURE": 2, + "PAST": 3, + "PRESENT": 4, + "IMPERFECT": 5, + "PLUPERFECT": 6, +} + +func (x PartOfSpeech_Tense) String() string { + return proto.EnumName(PartOfSpeech_Tense_name, int32(x)) +} +func (PartOfSpeech_Tense) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 10} } + +// The relationship between the action that a verb expresses and the +// participants identified by its arguments. +type PartOfSpeech_Voice int32 + +const ( + // Voice is not applicable in the analyzed language or is not predicted. + PartOfSpeech_VOICE_UNKNOWN PartOfSpeech_Voice = 0 + // Active + PartOfSpeech_ACTIVE PartOfSpeech_Voice = 1 + // Causative + PartOfSpeech_CAUSATIVE PartOfSpeech_Voice = 2 + // Passive + PartOfSpeech_PASSIVE PartOfSpeech_Voice = 3 +) + +var PartOfSpeech_Voice_name = map[int32]string{ + 0: "VOICE_UNKNOWN", + 1: "ACTIVE", + 2: "CAUSATIVE", + 3: "PASSIVE", +} +var PartOfSpeech_Voice_value = map[string]int32{ + "VOICE_UNKNOWN": 0, + "ACTIVE": 1, + "CAUSATIVE": 2, + "PASSIVE": 3, +} + +func (x PartOfSpeech_Voice) String() string { + return proto.EnumName(PartOfSpeech_Voice_name, int32(x)) +} +func (PartOfSpeech_Voice) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 11} } + +// The parse label enum for the token. +type DependencyEdge_Label int32 + +const ( + // Unknown + DependencyEdge_UNKNOWN DependencyEdge_Label = 0 + // Abbreviation modifier + DependencyEdge_ABBREV DependencyEdge_Label = 1 + // Adjectival complement + DependencyEdge_ACOMP DependencyEdge_Label = 2 + // Adverbial clause modifier + DependencyEdge_ADVCL DependencyEdge_Label = 3 + // Adverbial modifier + DependencyEdge_ADVMOD DependencyEdge_Label = 4 + // Adjectival modifier of an NP + DependencyEdge_AMOD DependencyEdge_Label = 5 + // Appositional modifier of an NP + DependencyEdge_APPOS DependencyEdge_Label = 6 + // Attribute dependent of a copular verb + DependencyEdge_ATTR DependencyEdge_Label = 7 + // Auxiliary (non-main) verb + DependencyEdge_AUX DependencyEdge_Label = 8 + // Passive auxiliary + DependencyEdge_AUXPASS DependencyEdge_Label = 9 + // Coordinating conjunction + DependencyEdge_CC DependencyEdge_Label = 10 + // Clausal complement of a verb or adjective + DependencyEdge_CCOMP DependencyEdge_Label = 11 + // Conjunct + DependencyEdge_CONJ DependencyEdge_Label = 12 + // Clausal subject + DependencyEdge_CSUBJ DependencyEdge_Label = 13 + // Clausal passive subject + DependencyEdge_CSUBJPASS DependencyEdge_Label = 14 + // Dependency (unable to determine) + DependencyEdge_DEP DependencyEdge_Label = 15 + // Determiner + DependencyEdge_DET DependencyEdge_Label = 16 + // Discourse + DependencyEdge_DISCOURSE DependencyEdge_Label = 17 + // Direct object + DependencyEdge_DOBJ DependencyEdge_Label = 18 + // Expletive + DependencyEdge_EXPL DependencyEdge_Label = 19 + // Goes with (part of a word in a text not well edited) + DependencyEdge_GOESWITH DependencyEdge_Label = 20 + // Indirect object + DependencyEdge_IOBJ DependencyEdge_Label = 21 + // Marker (word introducing a subordinate clause) + DependencyEdge_MARK DependencyEdge_Label = 22 + // Multi-word expression + DependencyEdge_MWE DependencyEdge_Label = 23 + // Multi-word verbal expression + DependencyEdge_MWV DependencyEdge_Label = 24 + // Negation modifier + DependencyEdge_NEG DependencyEdge_Label = 25 + // Noun compound modifier + DependencyEdge_NN DependencyEdge_Label = 26 + // Noun phrase used as an adverbial modifier + DependencyEdge_NPADVMOD DependencyEdge_Label = 27 + // Nominal subject + DependencyEdge_NSUBJ DependencyEdge_Label = 28 + // Passive nominal subject + DependencyEdge_NSUBJPASS DependencyEdge_Label = 29 + // Numeric modifier of a noun + DependencyEdge_NUM DependencyEdge_Label = 30 + // Element of compound number + DependencyEdge_NUMBER DependencyEdge_Label = 31 + // Punctuation mark + DependencyEdge_P DependencyEdge_Label = 32 + // Parataxis relation + DependencyEdge_PARATAXIS DependencyEdge_Label = 33 + // Participial modifier + DependencyEdge_PARTMOD DependencyEdge_Label = 34 + // The complement of a preposition is a clause + DependencyEdge_PCOMP DependencyEdge_Label = 35 + // Object of a preposition + DependencyEdge_POBJ DependencyEdge_Label = 36 + // Possession modifier + DependencyEdge_POSS DependencyEdge_Label = 37 + // Postverbal negative particle + DependencyEdge_POSTNEG DependencyEdge_Label = 38 + // Predicate complement + DependencyEdge_PRECOMP DependencyEdge_Label = 39 + // Preconjunt + DependencyEdge_PRECONJ DependencyEdge_Label = 40 + // Predeterminer + DependencyEdge_PREDET DependencyEdge_Label = 41 + // Prefix + DependencyEdge_PREF DependencyEdge_Label = 42 + // Prepositional modifier + DependencyEdge_PREP DependencyEdge_Label = 43 + // The relationship between a verb and verbal morpheme + DependencyEdge_PRONL DependencyEdge_Label = 44 + // Particle + DependencyEdge_PRT DependencyEdge_Label = 45 + // Associative or possessive marker + DependencyEdge_PS DependencyEdge_Label = 46 + // Quantifier phrase modifier + DependencyEdge_QUANTMOD DependencyEdge_Label = 47 + // Relative clause modifier + DependencyEdge_RCMOD DependencyEdge_Label = 48 + // Complementizer in relative clause + DependencyEdge_RCMODREL DependencyEdge_Label = 49 + // Ellipsis without a preceding predicate + DependencyEdge_RDROP DependencyEdge_Label = 50 + // Referent + DependencyEdge_REF DependencyEdge_Label = 51 + // Remnant + DependencyEdge_REMNANT DependencyEdge_Label = 52 + // Reparandum + DependencyEdge_REPARANDUM DependencyEdge_Label = 53 + // Root + DependencyEdge_ROOT DependencyEdge_Label = 54 + // Suffix specifying a unit of number + DependencyEdge_SNUM DependencyEdge_Label = 55 + // Suffix + DependencyEdge_SUFF DependencyEdge_Label = 56 + // Temporal modifier + DependencyEdge_TMOD DependencyEdge_Label = 57 + // Topic marker + DependencyEdge_TOPIC DependencyEdge_Label = 58 + // Clause headed by an infinite form of the verb that modifies a noun + DependencyEdge_VMOD DependencyEdge_Label = 59 + // Vocative + DependencyEdge_VOCATIVE DependencyEdge_Label = 60 + // Open clausal complement + DependencyEdge_XCOMP DependencyEdge_Label = 61 + // Name suffix + DependencyEdge_SUFFIX DependencyEdge_Label = 62 + // Name title + DependencyEdge_TITLE DependencyEdge_Label = 63 + // Adverbial phrase modifier + DependencyEdge_ADVPHMOD DependencyEdge_Label = 64 + // Causative auxiliary + DependencyEdge_AUXCAUS DependencyEdge_Label = 65 + // Helper auxiliary + DependencyEdge_AUXVV DependencyEdge_Label = 66 + // Rentaishi (Prenominal modifier) + DependencyEdge_DTMOD DependencyEdge_Label = 67 + // Foreign words + DependencyEdge_FOREIGN DependencyEdge_Label = 68 + // Keyword + DependencyEdge_KW DependencyEdge_Label = 69 + // List for chains of comparable items + DependencyEdge_LIST DependencyEdge_Label = 70 + // Nominalized clause + DependencyEdge_NOMC DependencyEdge_Label = 71 + // Nominalized clausal subject + DependencyEdge_NOMCSUBJ DependencyEdge_Label = 72 + // Nominalized clausal passive + DependencyEdge_NOMCSUBJPASS DependencyEdge_Label = 73 + // Compound of numeric modifier + DependencyEdge_NUMC DependencyEdge_Label = 74 + // Copula + DependencyEdge_COP DependencyEdge_Label = 75 + // Dislocated relation (for fronted/topicalized elements) + DependencyEdge_DISLOCATED DependencyEdge_Label = 76 +) + +var DependencyEdge_Label_name = map[int32]string{ + 0: "UNKNOWN", + 1: "ABBREV", + 2: "ACOMP", + 3: "ADVCL", + 4: "ADVMOD", + 5: "AMOD", + 6: "APPOS", + 7: "ATTR", + 8: "AUX", + 9: "AUXPASS", + 10: "CC", + 11: "CCOMP", + 12: "CONJ", + 13: "CSUBJ", + 14: "CSUBJPASS", + 15: "DEP", + 16: "DET", + 17: "DISCOURSE", + 18: "DOBJ", + 19: "EXPL", + 20: "GOESWITH", + 21: "IOBJ", + 22: "MARK", + 23: "MWE", + 24: "MWV", + 25: "NEG", + 26: "NN", + 27: "NPADVMOD", + 28: "NSUBJ", + 29: "NSUBJPASS", + 30: "NUM", + 31: "NUMBER", + 32: "P", + 33: "PARATAXIS", + 34: "PARTMOD", + 35: "PCOMP", + 36: "POBJ", + 37: "POSS", + 38: "POSTNEG", + 39: "PRECOMP", + 40: "PRECONJ", + 41: "PREDET", + 42: "PREF", + 43: "PREP", + 44: "PRONL", + 45: "PRT", + 46: "PS", + 47: "QUANTMOD", + 48: "RCMOD", + 49: "RCMODREL", + 50: "RDROP", + 51: "REF", + 52: "REMNANT", + 53: "REPARANDUM", + 54: "ROOT", + 55: "SNUM", + 56: "SUFF", + 57: "TMOD", + 58: "TOPIC", + 59: "VMOD", + 60: "VOCATIVE", + 61: "XCOMP", + 62: "SUFFIX", + 63: "TITLE", + 64: "ADVPHMOD", + 65: "AUXCAUS", + 66: "AUXVV", + 67: "DTMOD", + 68: "FOREIGN", + 69: "KW", + 70: "LIST", + 71: "NOMC", + 72: "NOMCSUBJ", + 73: "NOMCSUBJPASS", + 74: "NUMC", + 75: "COP", + 76: "DISLOCATED", +} +var DependencyEdge_Label_value = map[string]int32{ + "UNKNOWN": 0, + "ABBREV": 1, + "ACOMP": 2, + "ADVCL": 3, + "ADVMOD": 4, + "AMOD": 5, + "APPOS": 6, + "ATTR": 7, + "AUX": 8, + "AUXPASS": 9, + "CC": 10, + "CCOMP": 11, + "CONJ": 12, + "CSUBJ": 13, + "CSUBJPASS": 14, + "DEP": 15, + "DET": 16, + "DISCOURSE": 17, + "DOBJ": 18, + "EXPL": 19, + "GOESWITH": 20, + "IOBJ": 21, + "MARK": 22, + "MWE": 23, + "MWV": 24, + "NEG": 25, + "NN": 26, + "NPADVMOD": 27, + "NSUBJ": 28, + "NSUBJPASS": 29, + "NUM": 30, + "NUMBER": 31, + "P": 32, + "PARATAXIS": 33, + "PARTMOD": 34, + "PCOMP": 35, + "POBJ": 36, + "POSS": 37, + "POSTNEG": 38, + "PRECOMP": 39, + "PRECONJ": 40, + "PREDET": 41, + "PREF": 42, + "PREP": 43, + "PRONL": 44, + "PRT": 45, + "PS": 46, + "QUANTMOD": 47, + "RCMOD": 48, + "RCMODREL": 49, + "RDROP": 50, + "REF": 51, + "REMNANT": 52, + "REPARANDUM": 53, + "ROOT": 54, + "SNUM": 55, + "SUFF": 56, + "TMOD": 57, + "TOPIC": 58, + "VMOD": 59, + "VOCATIVE": 60, + "XCOMP": 61, + "SUFFIX": 62, + "TITLE": 63, + "ADVPHMOD": 64, + "AUXCAUS": 65, + "AUXVV": 66, + "DTMOD": 67, + "FOREIGN": 68, + "KW": 69, + "LIST": 70, + "NOMC": 71, + "NOMCSUBJ": 72, + "NOMCSUBJPASS": 73, + "NUMC": 74, + "COP": 75, + "DISLOCATED": 76, +} + +func (x DependencyEdge_Label) String() string { + return proto.EnumName(DependencyEdge_Label_name, int32(x)) +} +func (DependencyEdge_Label) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } + +// The supported types of mentions. +type EntityMention_Type int32 + +const ( + // Unknown + EntityMention_TYPE_UNKNOWN EntityMention_Type = 0 + // Proper name + EntityMention_PROPER EntityMention_Type = 1 + // Common noun (or noun compound) + EntityMention_COMMON EntityMention_Type = 2 +) + +var EntityMention_Type_name = map[int32]string{ + 0: "TYPE_UNKNOWN", + 1: "PROPER", + 2: "COMMON", +} +var EntityMention_Type_value = map[string]int32{ + "TYPE_UNKNOWN": 0, + "PROPER": 1, + "COMMON": 2, +} + +func (x EntityMention_Type) String() string { + return proto.EnumName(EntityMention_Type_name, int32(x)) +} +func (EntityMention_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +// ################################################################ # +// +// Represents the input to API methods. +type Document struct { + // Required. If the type is not set or is `TYPE_UNSPECIFIED`, + // returns an `INVALID_ARGUMENT` error. + Type Document_Type `protobuf:"varint,1,opt,name=type,enum=google.cloud.language.v1.Document_Type" json:"type,omitempty"` + // The source of the document: a string containing the content or a + // Google Cloud Storage URI. + // + // Types that are valid to be assigned to Source: + // *Document_Content + // *Document_GcsContentUri + Source isDocument_Source `protobuf_oneof:"source"` + // The language of the document (if not specified, the language is + // automatically detected). Both ISO and BCP-47 language codes are + // accepted.<br> + // **Current Language Restrictions:** + // + // * Only English, Spanish, and Japanese textual content + // are supported, with the following additional restriction: + // * `analyzeSentiment` only supports English text. + // If the language (either specified by the caller or automatically detected) + // is not supported by the called API method, an `INVALID_ARGUMENT` error + // is returned. + Language string `protobuf:"bytes,4,opt,name=language" json:"language,omitempty"` +} + +func (m *Document) Reset() { *m = Document{} } +func (m *Document) String() string { return proto.CompactTextString(m) } +func (*Document) ProtoMessage() {} +func (*Document) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isDocument_Source interface { + isDocument_Source() +} + +type Document_Content struct { + Content string `protobuf:"bytes,2,opt,name=content,oneof"` +} +type Document_GcsContentUri struct { + GcsContentUri string `protobuf:"bytes,3,opt,name=gcs_content_uri,json=gcsContentUri,oneof"` +} + +func (*Document_Content) isDocument_Source() {} +func (*Document_GcsContentUri) isDocument_Source() {} + +func (m *Document) GetSource() isDocument_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *Document) GetType() Document_Type { + if m != nil { + return m.Type + } + return Document_TYPE_UNSPECIFIED +} + +func (m *Document) GetContent() string { + if x, ok := m.GetSource().(*Document_Content); ok { + return x.Content + } + return "" +} + +func (m *Document) GetGcsContentUri() string { + if x, ok := m.GetSource().(*Document_GcsContentUri); ok { + return x.GcsContentUri + } + return "" +} + +func (m *Document) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Document) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Document_OneofMarshaler, _Document_OneofUnmarshaler, _Document_OneofSizer, []interface{}{ + (*Document_Content)(nil), + (*Document_GcsContentUri)(nil), + } +} + +func _Document_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Document) + // source + switch x := m.Source.(type) { + case *Document_Content: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Content) + case *Document_GcsContentUri: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.GcsContentUri) + case nil: + default: + return fmt.Errorf("Document.Source has unexpected type %T", x) + } + return nil +} + +func _Document_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Document) + switch tag { + case 2: // source.content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Source = &Document_Content{x} + return true, err + case 3: // source.gcs_content_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Source = &Document_GcsContentUri{x} + return true, err + default: + return false, nil + } +} + +func _Document_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Document) + // source + switch x := m.Source.(type) { + case *Document_Content: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Content))) + n += len(x.Content) + case *Document_GcsContentUri: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.GcsContentUri))) + n += len(x.GcsContentUri) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents a sentence in the input document. +type Sentence struct { + // The sentence text. + Text *TextSpan `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // For calls to [AnalyzeSentiment][] or if + // [AnnotateTextRequest.Features.extract_document_sentiment][google.cloud.language.v1.AnnotateTextRequest.Features.extract_document_sentiment] is set to + // true, this field will contain the sentiment for the sentence. + Sentiment *Sentiment `protobuf:"bytes,2,opt,name=sentiment" json:"sentiment,omitempty"` +} + +func (m *Sentence) Reset() { *m = Sentence{} } +func (m *Sentence) String() string { return proto.CompactTextString(m) } +func (*Sentence) ProtoMessage() {} +func (*Sentence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Sentence) GetText() *TextSpan { + if m != nil { + return m.Text + } + return nil +} + +func (m *Sentence) GetSentiment() *Sentiment { + if m != nil { + return m.Sentiment + } + return nil +} + +// Represents a phrase in the text that is a known entity, such as +// a person, an organization, or location. The API associates information, such +// as salience and mentions, with entities. +type Entity struct { + // The representative name for the entity. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The entity type. + Type Entity_Type `protobuf:"varint,2,opt,name=type,enum=google.cloud.language.v1.Entity_Type" json:"type,omitempty"` + // Metadata associated with the entity. + // + // Currently, Wikipedia URLs and Knowledge Graph MIDs are provided, if + // available. The associated keys are "wikipedia_url" and "mid", respectively. + Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The salience score associated with the entity in the [0, 1.0] range. + // + // The salience score for an entity provides information about the + // importance or centrality of that entity to the entire document text. + // Scores closer to 0 are less salient, while scores closer to 1.0 are highly + // salient. + Salience float32 `protobuf:"fixed32,4,opt,name=salience" json:"salience,omitempty"` + // The mentions of this entity in the input document. The API currently + // supports proper noun mentions. + Mentions []*EntityMention `protobuf:"bytes,5,rep,name=mentions" json:"mentions,omitempty"` +} + +func (m *Entity) Reset() { *m = Entity{} } +func (m *Entity) String() string { return proto.CompactTextString(m) } +func (*Entity) ProtoMessage() {} +func (*Entity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Entity) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Entity) GetType() Entity_Type { + if m != nil { + return m.Type + } + return Entity_UNKNOWN +} + +func (m *Entity) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Entity) GetSalience() float32 { + if m != nil { + return m.Salience + } + return 0 +} + +func (m *Entity) GetMentions() []*EntityMention { + if m != nil { + return m.Mentions + } + return nil +} + +// Represents the smallest syntactic building block of the text. +type Token struct { + // The token text. + Text *TextSpan `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // Parts of speech tag for this token. + PartOfSpeech *PartOfSpeech `protobuf:"bytes,2,opt,name=part_of_speech,json=partOfSpeech" json:"part_of_speech,omitempty"` + // Dependency tree parse for this token. + DependencyEdge *DependencyEdge `protobuf:"bytes,3,opt,name=dependency_edge,json=dependencyEdge" json:"dependency_edge,omitempty"` + // [Lemma](https://en.wikipedia.org/wiki/Lemma_%28morphology%29) of the token. + Lemma string `protobuf:"bytes,4,opt,name=lemma" json:"lemma,omitempty"` +} + +func (m *Token) Reset() { *m = Token{} } +func (m *Token) String() string { return proto.CompactTextString(m) } +func (*Token) ProtoMessage() {} +func (*Token) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Token) GetText() *TextSpan { + if m != nil { + return m.Text + } + return nil +} + +func (m *Token) GetPartOfSpeech() *PartOfSpeech { + if m != nil { + return m.PartOfSpeech + } + return nil +} + +func (m *Token) GetDependencyEdge() *DependencyEdge { + if m != nil { + return m.DependencyEdge + } + return nil +} + +func (m *Token) GetLemma() string { + if m != nil { + return m.Lemma + } + return "" +} + +// Represents the feeling associated with the entire text or entities in +// the text. +type Sentiment struct { + // A non-negative number in the [0, +inf) range, which represents + // the absolute magnitude of sentiment regardless of score (positive or + // negative). + Magnitude float32 `protobuf:"fixed32,2,opt,name=magnitude" json:"magnitude,omitempty"` + // Sentiment score between -1.0 (negative sentiment) and 1.0 + // (positive sentiment.) + Score float32 `protobuf:"fixed32,3,opt,name=score" json:"score,omitempty"` +} + +func (m *Sentiment) Reset() { *m = Sentiment{} } +func (m *Sentiment) String() string { return proto.CompactTextString(m) } +func (*Sentiment) ProtoMessage() {} +func (*Sentiment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *Sentiment) GetMagnitude() float32 { + if m != nil { + return m.Magnitude + } + return 0 +} + +func (m *Sentiment) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +// Represents part of speech information for a token. Parts of speech +// are as defined in +// http://www.lrec-conf.org/proceedings/lrec2012/pdf/274_Paper.pdf +type PartOfSpeech struct { + // The part of speech tag. + Tag PartOfSpeech_Tag `protobuf:"varint,1,opt,name=tag,enum=google.cloud.language.v1.PartOfSpeech_Tag" json:"tag,omitempty"` + // The grammatical aspect. + Aspect PartOfSpeech_Aspect `protobuf:"varint,2,opt,name=aspect,enum=google.cloud.language.v1.PartOfSpeech_Aspect" json:"aspect,omitempty"` + // The grammatical case. + Case PartOfSpeech_Case `protobuf:"varint,3,opt,name=case,enum=google.cloud.language.v1.PartOfSpeech_Case" json:"case,omitempty"` + // The grammatical form. + Form PartOfSpeech_Form `protobuf:"varint,4,opt,name=form,enum=google.cloud.language.v1.PartOfSpeech_Form" json:"form,omitempty"` + // The grammatical gender. + Gender PartOfSpeech_Gender `protobuf:"varint,5,opt,name=gender,enum=google.cloud.language.v1.PartOfSpeech_Gender" json:"gender,omitempty"` + // The grammatical mood. + Mood PartOfSpeech_Mood `protobuf:"varint,6,opt,name=mood,enum=google.cloud.language.v1.PartOfSpeech_Mood" json:"mood,omitempty"` + // The grammatical number. + Number PartOfSpeech_Number `protobuf:"varint,7,opt,name=number,enum=google.cloud.language.v1.PartOfSpeech_Number" json:"number,omitempty"` + // The grammatical person. + Person PartOfSpeech_Person `protobuf:"varint,8,opt,name=person,enum=google.cloud.language.v1.PartOfSpeech_Person" json:"person,omitempty"` + // The grammatical properness. + Proper PartOfSpeech_Proper `protobuf:"varint,9,opt,name=proper,enum=google.cloud.language.v1.PartOfSpeech_Proper" json:"proper,omitempty"` + // The grammatical reciprocity. + Reciprocity PartOfSpeech_Reciprocity `protobuf:"varint,10,opt,name=reciprocity,enum=google.cloud.language.v1.PartOfSpeech_Reciprocity" json:"reciprocity,omitempty"` + // The grammatical tense. + Tense PartOfSpeech_Tense `protobuf:"varint,11,opt,name=tense,enum=google.cloud.language.v1.PartOfSpeech_Tense" json:"tense,omitempty"` + // The grammatical voice. + Voice PartOfSpeech_Voice `protobuf:"varint,12,opt,name=voice,enum=google.cloud.language.v1.PartOfSpeech_Voice" json:"voice,omitempty"` +} + +func (m *PartOfSpeech) Reset() { *m = PartOfSpeech{} } +func (m *PartOfSpeech) String() string { return proto.CompactTextString(m) } +func (*PartOfSpeech) ProtoMessage() {} +func (*PartOfSpeech) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *PartOfSpeech) GetTag() PartOfSpeech_Tag { + if m != nil { + return m.Tag + } + return PartOfSpeech_UNKNOWN +} + +func (m *PartOfSpeech) GetAspect() PartOfSpeech_Aspect { + if m != nil { + return m.Aspect + } + return PartOfSpeech_ASPECT_UNKNOWN +} + +func (m *PartOfSpeech) GetCase() PartOfSpeech_Case { + if m != nil { + return m.Case + } + return PartOfSpeech_CASE_UNKNOWN +} + +func (m *PartOfSpeech) GetForm() PartOfSpeech_Form { + if m != nil { + return m.Form + } + return PartOfSpeech_FORM_UNKNOWN +} + +func (m *PartOfSpeech) GetGender() PartOfSpeech_Gender { + if m != nil { + return m.Gender + } + return PartOfSpeech_GENDER_UNKNOWN +} + +func (m *PartOfSpeech) GetMood() PartOfSpeech_Mood { + if m != nil { + return m.Mood + } + return PartOfSpeech_MOOD_UNKNOWN +} + +func (m *PartOfSpeech) GetNumber() PartOfSpeech_Number { + if m != nil { + return m.Number + } + return PartOfSpeech_NUMBER_UNKNOWN +} + +func (m *PartOfSpeech) GetPerson() PartOfSpeech_Person { + if m != nil { + return m.Person + } + return PartOfSpeech_PERSON_UNKNOWN +} + +func (m *PartOfSpeech) GetProper() PartOfSpeech_Proper { + if m != nil { + return m.Proper + } + return PartOfSpeech_PROPER_UNKNOWN +} + +func (m *PartOfSpeech) GetReciprocity() PartOfSpeech_Reciprocity { + if m != nil { + return m.Reciprocity + } + return PartOfSpeech_RECIPROCITY_UNKNOWN +} + +func (m *PartOfSpeech) GetTense() PartOfSpeech_Tense { + if m != nil { + return m.Tense + } + return PartOfSpeech_TENSE_UNKNOWN +} + +func (m *PartOfSpeech) GetVoice() PartOfSpeech_Voice { + if m != nil { + return m.Voice + } + return PartOfSpeech_VOICE_UNKNOWN +} + +// Represents dependency parse tree information for a token. (For more +// information on dependency labels, see +// http://www.aclweb.org/anthology/P13-2017 +type DependencyEdge struct { + // Represents the head of this token in the dependency tree. + // This is the index of the token which has an arc going to this token. + // The index is the position of the token in the array of tokens returned + // by the API method. If this token is a root token, then the + // `head_token_index` is its own index. + HeadTokenIndex int32 `protobuf:"varint,1,opt,name=head_token_index,json=headTokenIndex" json:"head_token_index,omitempty"` + // The parse label for the token. + Label DependencyEdge_Label `protobuf:"varint,2,opt,name=label,enum=google.cloud.language.v1.DependencyEdge_Label" json:"label,omitempty"` +} + +func (m *DependencyEdge) Reset() { *m = DependencyEdge{} } +func (m *DependencyEdge) String() string { return proto.CompactTextString(m) } +func (*DependencyEdge) ProtoMessage() {} +func (*DependencyEdge) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *DependencyEdge) GetHeadTokenIndex() int32 { + if m != nil { + return m.HeadTokenIndex + } + return 0 +} + +func (m *DependencyEdge) GetLabel() DependencyEdge_Label { + if m != nil { + return m.Label + } + return DependencyEdge_UNKNOWN +} + +// Represents a mention for an entity in the text. Currently, proper noun +// mentions are supported. +type EntityMention struct { + // The mention text. + Text *TextSpan `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // The type of the entity mention. + Type EntityMention_Type `protobuf:"varint,2,opt,name=type,enum=google.cloud.language.v1.EntityMention_Type" json:"type,omitempty"` +} + +func (m *EntityMention) Reset() { *m = EntityMention{} } +func (m *EntityMention) String() string { return proto.CompactTextString(m) } +func (*EntityMention) ProtoMessage() {} +func (*EntityMention) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *EntityMention) GetText() *TextSpan { + if m != nil { + return m.Text + } + return nil +} + +func (m *EntityMention) GetType() EntityMention_Type { + if m != nil { + return m.Type + } + return EntityMention_TYPE_UNKNOWN +} + +// Represents an output piece of text. +type TextSpan struct { + // The content of the output text. + Content string `protobuf:"bytes,1,opt,name=content" json:"content,omitempty"` + // The API calculates the beginning offset of the content in the original + // document according to the [EncodingType][google.cloud.language.v1.EncodingType] specified in the API request. + BeginOffset int32 `protobuf:"varint,2,opt,name=begin_offset,json=beginOffset" json:"begin_offset,omitempty"` +} + +func (m *TextSpan) Reset() { *m = TextSpan{} } +func (m *TextSpan) String() string { return proto.CompactTextString(m) } +func (*TextSpan) ProtoMessage() {} +func (*TextSpan) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *TextSpan) GetContent() string { + if m != nil { + return m.Content + } + return "" +} + +func (m *TextSpan) GetBeginOffset() int32 { + if m != nil { + return m.BeginOffset + } + return 0 +} + +// The sentiment analysis request message. +type AnalyzeSentimentRequest struct { + // Input document. Currently, `analyzeSentiment` only supports English text + // ([Document.language][google.cloud.language.v1.Document.language]="EN"). + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The encoding type used by the API to calculate sentence offsets. + EncodingType EncodingType `protobuf:"varint,2,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnalyzeSentimentRequest) Reset() { *m = AnalyzeSentimentRequest{} } +func (m *AnalyzeSentimentRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeSentimentRequest) ProtoMessage() {} +func (*AnalyzeSentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *AnalyzeSentimentRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnalyzeSentimentRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// The sentiment analysis response message. +type AnalyzeSentimentResponse struct { + // The overall sentiment of the input document. + DocumentSentiment *Sentiment `protobuf:"bytes,1,opt,name=document_sentiment,json=documentSentiment" json:"document_sentiment,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + // See `Document.language` field for more details. + Language string `protobuf:"bytes,2,opt,name=language" json:"language,omitempty"` + // The sentiment for all the sentences in the document. + Sentences []*Sentence `protobuf:"bytes,3,rep,name=sentences" json:"sentences,omitempty"` +} + +func (m *AnalyzeSentimentResponse) Reset() { *m = AnalyzeSentimentResponse{} } +func (m *AnalyzeSentimentResponse) String() string { return proto.CompactTextString(m) } +func (*AnalyzeSentimentResponse) ProtoMessage() {} +func (*AnalyzeSentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *AnalyzeSentimentResponse) GetDocumentSentiment() *Sentiment { + if m != nil { + return m.DocumentSentiment + } + return nil +} + +func (m *AnalyzeSentimentResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +func (m *AnalyzeSentimentResponse) GetSentences() []*Sentence { + if m != nil { + return m.Sentences + } + return nil +} + +// The entity analysis request message. +type AnalyzeEntitiesRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The encoding type used by the API to calculate offsets. + EncodingType EncodingType `protobuf:"varint,2,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnalyzeEntitiesRequest) Reset() { *m = AnalyzeEntitiesRequest{} } +func (m *AnalyzeEntitiesRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeEntitiesRequest) ProtoMessage() {} +func (*AnalyzeEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *AnalyzeEntitiesRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnalyzeEntitiesRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// The entity analysis response message. +type AnalyzeEntitiesResponse struct { + // The recognized entities in the input document. + Entities []*Entity `protobuf:"bytes,1,rep,name=entities" json:"entities,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + // See `Document.language` field for more details. + Language string `protobuf:"bytes,2,opt,name=language" json:"language,omitempty"` +} + +func (m *AnalyzeEntitiesResponse) Reset() { *m = AnalyzeEntitiesResponse{} } +func (m *AnalyzeEntitiesResponse) String() string { return proto.CompactTextString(m) } +func (*AnalyzeEntitiesResponse) ProtoMessage() {} +func (*AnalyzeEntitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *AnalyzeEntitiesResponse) GetEntities() []*Entity { + if m != nil { + return m.Entities + } + return nil +} + +func (m *AnalyzeEntitiesResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +// The syntax analysis request message. +type AnalyzeSyntaxRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The encoding type used by the API to calculate offsets. + EncodingType EncodingType `protobuf:"varint,2,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnalyzeSyntaxRequest) Reset() { *m = AnalyzeSyntaxRequest{} } +func (m *AnalyzeSyntaxRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeSyntaxRequest) ProtoMessage() {} +func (*AnalyzeSyntaxRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *AnalyzeSyntaxRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnalyzeSyntaxRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// The syntax analysis response message. +type AnalyzeSyntaxResponse struct { + // Sentences in the input document. + Sentences []*Sentence `protobuf:"bytes,1,rep,name=sentences" json:"sentences,omitempty"` + // Tokens, along with their syntactic information, in the input document. + Tokens []*Token `protobuf:"bytes,2,rep,name=tokens" json:"tokens,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + // See `Document.language` field for more details. + Language string `protobuf:"bytes,3,opt,name=language" json:"language,omitempty"` +} + +func (m *AnalyzeSyntaxResponse) Reset() { *m = AnalyzeSyntaxResponse{} } +func (m *AnalyzeSyntaxResponse) String() string { return proto.CompactTextString(m) } +func (*AnalyzeSyntaxResponse) ProtoMessage() {} +func (*AnalyzeSyntaxResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *AnalyzeSyntaxResponse) GetSentences() []*Sentence { + if m != nil { + return m.Sentences + } + return nil +} + +func (m *AnalyzeSyntaxResponse) GetTokens() []*Token { + if m != nil { + return m.Tokens + } + return nil +} + +func (m *AnalyzeSyntaxResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +// The request message for the text annotation API, which can perform multiple +// analysis types (sentiment, entities, and syntax) in one call. +type AnnotateTextRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The enabled features. + Features *AnnotateTextRequest_Features `protobuf:"bytes,2,opt,name=features" json:"features,omitempty"` + // The encoding type used by the API to calculate offsets. + EncodingType EncodingType `protobuf:"varint,3,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnnotateTextRequest) Reset() { *m = AnnotateTextRequest{} } +func (m *AnnotateTextRequest) String() string { return proto.CompactTextString(m) } +func (*AnnotateTextRequest) ProtoMessage() {} +func (*AnnotateTextRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *AnnotateTextRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnnotateTextRequest) GetFeatures() *AnnotateTextRequest_Features { + if m != nil { + return m.Features + } + return nil +} + +func (m *AnnotateTextRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// All available features for sentiment, syntax, and semantic analysis. +// Setting each one to true will enable that specific analysis for the input. +type AnnotateTextRequest_Features struct { + // Extract syntax information. + ExtractSyntax bool `protobuf:"varint,1,opt,name=extract_syntax,json=extractSyntax" json:"extract_syntax,omitempty"` + // Extract entities. + ExtractEntities bool `protobuf:"varint,2,opt,name=extract_entities,json=extractEntities" json:"extract_entities,omitempty"` + // Extract document-level sentiment. + ExtractDocumentSentiment bool `protobuf:"varint,3,opt,name=extract_document_sentiment,json=extractDocumentSentiment" json:"extract_document_sentiment,omitempty"` +} + +func (m *AnnotateTextRequest_Features) Reset() { *m = AnnotateTextRequest_Features{} } +func (m *AnnotateTextRequest_Features) String() string { return proto.CompactTextString(m) } +func (*AnnotateTextRequest_Features) ProtoMessage() {} +func (*AnnotateTextRequest_Features) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{15, 0} +} + +func (m *AnnotateTextRequest_Features) GetExtractSyntax() bool { + if m != nil { + return m.ExtractSyntax + } + return false +} + +func (m *AnnotateTextRequest_Features) GetExtractEntities() bool { + if m != nil { + return m.ExtractEntities + } + return false +} + +func (m *AnnotateTextRequest_Features) GetExtractDocumentSentiment() bool { + if m != nil { + return m.ExtractDocumentSentiment + } + return false +} + +// The text annotations response message. +type AnnotateTextResponse struct { + // Sentences in the input document. Populated if the user enables + // [AnnotateTextRequest.Features.extract_syntax][google.cloud.language.v1.AnnotateTextRequest.Features.extract_syntax]. + Sentences []*Sentence `protobuf:"bytes,1,rep,name=sentences" json:"sentences,omitempty"` + // Tokens, along with their syntactic information, in the input document. + // Populated if the user enables + // [AnnotateTextRequest.Features.extract_syntax][google.cloud.language.v1.AnnotateTextRequest.Features.extract_syntax]. + Tokens []*Token `protobuf:"bytes,2,rep,name=tokens" json:"tokens,omitempty"` + // Entities, along with their semantic information, in the input document. + // Populated if the user enables + // [AnnotateTextRequest.Features.extract_entities][google.cloud.language.v1.AnnotateTextRequest.Features.extract_entities]. + Entities []*Entity `protobuf:"bytes,3,rep,name=entities" json:"entities,omitempty"` + // The overall sentiment for the document. Populated if the user enables + // [AnnotateTextRequest.Features.extract_document_sentiment][google.cloud.language.v1.AnnotateTextRequest.Features.extract_document_sentiment]. + DocumentSentiment *Sentiment `protobuf:"bytes,4,opt,name=document_sentiment,json=documentSentiment" json:"document_sentiment,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + // See `Document.language` field for more details. + Language string `protobuf:"bytes,5,opt,name=language" json:"language,omitempty"` +} + +func (m *AnnotateTextResponse) Reset() { *m = AnnotateTextResponse{} } +func (m *AnnotateTextResponse) String() string { return proto.CompactTextString(m) } +func (*AnnotateTextResponse) ProtoMessage() {} +func (*AnnotateTextResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *AnnotateTextResponse) GetSentences() []*Sentence { + if m != nil { + return m.Sentences + } + return nil +} + +func (m *AnnotateTextResponse) GetTokens() []*Token { + if m != nil { + return m.Tokens + } + return nil +} + +func (m *AnnotateTextResponse) GetEntities() []*Entity { + if m != nil { + return m.Entities + } + return nil +} + +func (m *AnnotateTextResponse) GetDocumentSentiment() *Sentiment { + if m != nil { + return m.DocumentSentiment + } + return nil +} + +func (m *AnnotateTextResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +func init() { + proto.RegisterType((*Document)(nil), "google.cloud.language.v1.Document") + proto.RegisterType((*Sentence)(nil), "google.cloud.language.v1.Sentence") + proto.RegisterType((*Entity)(nil), "google.cloud.language.v1.Entity") + proto.RegisterType((*Token)(nil), "google.cloud.language.v1.Token") + proto.RegisterType((*Sentiment)(nil), "google.cloud.language.v1.Sentiment") + proto.RegisterType((*PartOfSpeech)(nil), "google.cloud.language.v1.PartOfSpeech") + proto.RegisterType((*DependencyEdge)(nil), "google.cloud.language.v1.DependencyEdge") + proto.RegisterType((*EntityMention)(nil), "google.cloud.language.v1.EntityMention") + proto.RegisterType((*TextSpan)(nil), "google.cloud.language.v1.TextSpan") + proto.RegisterType((*AnalyzeSentimentRequest)(nil), "google.cloud.language.v1.AnalyzeSentimentRequest") + proto.RegisterType((*AnalyzeSentimentResponse)(nil), "google.cloud.language.v1.AnalyzeSentimentResponse") + proto.RegisterType((*AnalyzeEntitiesRequest)(nil), "google.cloud.language.v1.AnalyzeEntitiesRequest") + proto.RegisterType((*AnalyzeEntitiesResponse)(nil), "google.cloud.language.v1.AnalyzeEntitiesResponse") + proto.RegisterType((*AnalyzeSyntaxRequest)(nil), "google.cloud.language.v1.AnalyzeSyntaxRequest") + proto.RegisterType((*AnalyzeSyntaxResponse)(nil), "google.cloud.language.v1.AnalyzeSyntaxResponse") + proto.RegisterType((*AnnotateTextRequest)(nil), "google.cloud.language.v1.AnnotateTextRequest") + proto.RegisterType((*AnnotateTextRequest_Features)(nil), "google.cloud.language.v1.AnnotateTextRequest.Features") + proto.RegisterType((*AnnotateTextResponse)(nil), "google.cloud.language.v1.AnnotateTextResponse") + proto.RegisterEnum("google.cloud.language.v1.EncodingType", EncodingType_name, EncodingType_value) + proto.RegisterEnum("google.cloud.language.v1.Document_Type", Document_Type_name, Document_Type_value) + proto.RegisterEnum("google.cloud.language.v1.Entity_Type", Entity_Type_name, Entity_Type_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Tag", PartOfSpeech_Tag_name, PartOfSpeech_Tag_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Aspect", PartOfSpeech_Aspect_name, PartOfSpeech_Aspect_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Case", PartOfSpeech_Case_name, PartOfSpeech_Case_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Form", PartOfSpeech_Form_name, PartOfSpeech_Form_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Gender", PartOfSpeech_Gender_name, PartOfSpeech_Gender_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Mood", PartOfSpeech_Mood_name, PartOfSpeech_Mood_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Number", PartOfSpeech_Number_name, PartOfSpeech_Number_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Person", PartOfSpeech_Person_name, PartOfSpeech_Person_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Proper", PartOfSpeech_Proper_name, PartOfSpeech_Proper_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Reciprocity", PartOfSpeech_Reciprocity_name, PartOfSpeech_Reciprocity_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Tense", PartOfSpeech_Tense_name, PartOfSpeech_Tense_value) + proto.RegisterEnum("google.cloud.language.v1.PartOfSpeech_Voice", PartOfSpeech_Voice_name, PartOfSpeech_Voice_value) + proto.RegisterEnum("google.cloud.language.v1.DependencyEdge_Label", DependencyEdge_Label_name, DependencyEdge_Label_value) + proto.RegisterEnum("google.cloud.language.v1.EntityMention_Type", EntityMention_Type_name, EntityMention_Type_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for LanguageService service + +type LanguageServiceClient interface { + // Analyzes the sentiment of the provided text. + AnalyzeSentiment(ctx context.Context, in *AnalyzeSentimentRequest, opts ...grpc.CallOption) (*AnalyzeSentimentResponse, error) + // Finds named entities (currently finds proper names) in the text, + // entity types, salience, mentions for each entity, and other properties. + AnalyzeEntities(ctx context.Context, in *AnalyzeEntitiesRequest, opts ...grpc.CallOption) (*AnalyzeEntitiesResponse, error) + // Analyzes the syntax of the text and provides sentence boundaries and + // tokenization along with part of speech tags, dependency trees, and other + // properties. + AnalyzeSyntax(ctx context.Context, in *AnalyzeSyntaxRequest, opts ...grpc.CallOption) (*AnalyzeSyntaxResponse, error) + // A convenience method that provides all the features that analyzeSentiment, + // analyzeEntities, and analyzeSyntax provide in one call. + AnnotateText(ctx context.Context, in *AnnotateTextRequest, opts ...grpc.CallOption) (*AnnotateTextResponse, error) +} + +type languageServiceClient struct { + cc *grpc.ClientConn +} + +func NewLanguageServiceClient(cc *grpc.ClientConn) LanguageServiceClient { + return &languageServiceClient{cc} +} + +func (c *languageServiceClient) AnalyzeSentiment(ctx context.Context, in *AnalyzeSentimentRequest, opts ...grpc.CallOption) (*AnalyzeSentimentResponse, error) { + out := new(AnalyzeSentimentResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1.LanguageService/AnalyzeSentiment", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *languageServiceClient) AnalyzeEntities(ctx context.Context, in *AnalyzeEntitiesRequest, opts ...grpc.CallOption) (*AnalyzeEntitiesResponse, error) { + out := new(AnalyzeEntitiesResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1.LanguageService/AnalyzeEntities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *languageServiceClient) AnalyzeSyntax(ctx context.Context, in *AnalyzeSyntaxRequest, opts ...grpc.CallOption) (*AnalyzeSyntaxResponse, error) { + out := new(AnalyzeSyntaxResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1.LanguageService/AnalyzeSyntax", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *languageServiceClient) AnnotateText(ctx context.Context, in *AnnotateTextRequest, opts ...grpc.CallOption) (*AnnotateTextResponse, error) { + out := new(AnnotateTextResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1.LanguageService/AnnotateText", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for LanguageService service + +type LanguageServiceServer interface { + // Analyzes the sentiment of the provided text. + AnalyzeSentiment(context.Context, *AnalyzeSentimentRequest) (*AnalyzeSentimentResponse, error) + // Finds named entities (currently finds proper names) in the text, + // entity types, salience, mentions for each entity, and other properties. + AnalyzeEntities(context.Context, *AnalyzeEntitiesRequest) (*AnalyzeEntitiesResponse, error) + // Analyzes the syntax of the text and provides sentence boundaries and + // tokenization along with part of speech tags, dependency trees, and other + // properties. + AnalyzeSyntax(context.Context, *AnalyzeSyntaxRequest) (*AnalyzeSyntaxResponse, error) + // A convenience method that provides all the features that analyzeSentiment, + // analyzeEntities, and analyzeSyntax provide in one call. + AnnotateText(context.Context, *AnnotateTextRequest) (*AnnotateTextResponse, error) +} + +func RegisterLanguageServiceServer(s *grpc.Server, srv LanguageServiceServer) { + s.RegisterService(&_LanguageService_serviceDesc, srv) +} + +func _LanguageService_AnalyzeSentiment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeSentimentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnalyzeSentiment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1.LanguageService/AnalyzeSentiment", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnalyzeSentiment(ctx, req.(*AnalyzeSentimentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LanguageService_AnalyzeEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnalyzeEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1.LanguageService/AnalyzeEntities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnalyzeEntities(ctx, req.(*AnalyzeEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LanguageService_AnalyzeSyntax_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeSyntaxRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnalyzeSyntax(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1.LanguageService/AnalyzeSyntax", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnalyzeSyntax(ctx, req.(*AnalyzeSyntaxRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LanguageService_AnnotateText_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnnotateTextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnnotateText(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1.LanguageService/AnnotateText", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnnotateText(ctx, req.(*AnnotateTextRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _LanguageService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.language.v1.LanguageService", + HandlerType: (*LanguageServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AnalyzeSentiment", + Handler: _LanguageService_AnalyzeSentiment_Handler, + }, + { + MethodName: "AnalyzeEntities", + Handler: _LanguageService_AnalyzeEntities_Handler, + }, + { + MethodName: "AnalyzeSyntax", + Handler: _LanguageService_AnalyzeSyntax_Handler, + }, + { + MethodName: "AnnotateText", + Handler: _LanguageService_AnnotateText_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/language/v1/language_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/language/v1/language_service.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2732 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x8f, 0xdb, 0xc6, + 0x15, 0x37, 0xf5, 0xb5, 0xd2, 0x68, 0x3f, 0xc6, 0x8c, 0x93, 0xa8, 0x1b, 0x27, 0x71, 0x98, 0xda, + 0xd9, 0x38, 0x89, 0x36, 0xbb, 0x69, 0x1d, 0xc7, 0x76, 0x13, 0x53, 0xe4, 0x48, 0xcb, 0x35, 0x45, + 0x32, 0x43, 0x52, 0xde, 0xf8, 0x22, 0xd0, 0xd2, 0x58, 0x11, 0xb2, 0x4b, 0xaa, 0x12, 0xd7, 0xf0, + 0xf6, 0x52, 0xa0, 0x40, 0x8f, 0x39, 0xa5, 0x87, 0xa2, 0xa7, 0x02, 0xfd, 0x38, 0xb6, 0x7f, 0x40, + 0x0b, 0xf4, 0x1f, 0xe8, 0xad, 0xff, 0x42, 0x6f, 0x2d, 0xd0, 0x5b, 0xd1, 0x4b, 0x81, 0xe2, 0xcd, + 0x0c, 0xf5, 0xb1, 0xde, 0xb5, 0x77, 0x8d, 0x00, 0xcd, 0x6d, 0xe6, 0xe9, 0xfd, 0xde, 0xf7, 0xbc, + 0x37, 0x1c, 0xa1, 0xcd, 0x41, 0x92, 0x0c, 0xf6, 0xd9, 0x66, 0x6f, 0x3f, 0x39, 0xec, 0x6f, 0xee, + 0x47, 0xf1, 0xe0, 0x30, 0x1a, 0xb0, 0xcd, 0xc7, 0x5b, 0xd3, 0x75, 0x77, 0xc2, 0xc6, 0x8f, 0x87, + 0x3d, 0x56, 0x1f, 0x8d, 0x93, 0x34, 0x51, 0x6b, 0x02, 0x50, 0xe7, 0x80, 0x7a, 0xc6, 0x54, 0x7f, + 0xbc, 0xb5, 0x7e, 0x59, 0x8a, 0x8a, 0x46, 0xc3, 0xcd, 0x28, 0x8e, 0x93, 0x34, 0x4a, 0x87, 0x49, + 0x3c, 0x11, 0x38, 0xed, 0x1f, 0x0a, 0x2a, 0x9b, 0x49, 0xef, 0xf0, 0x80, 0xc5, 0xa9, 0x7a, 0x1b, + 0x15, 0xd2, 0xa3, 0x11, 0xab, 0x29, 0x57, 0x94, 0x8d, 0xd5, 0xed, 0x77, 0xea, 0xa7, 0xc9, 0xac, + 0x67, 0x88, 0x7a, 0x70, 0x34, 0x62, 0x94, 0x83, 0xd4, 0x75, 0xb4, 0xd4, 0x4b, 0xe2, 0x94, 0xc5, + 0x69, 0x2d, 0x77, 0x45, 0xd9, 0xa8, 0xec, 0x5c, 0xa0, 0x19, 0x41, 0xdd, 0x40, 0x6b, 0x83, 0xde, + 0xa4, 0x2b, 0xb7, 0xdd, 0xc3, 0xf1, 0xb0, 0x96, 0x97, 0x3c, 0x2b, 0x83, 0xde, 0xc4, 0x10, 0xf4, + 0x70, 0x3c, 0x54, 0xd7, 0x51, 0x39, 0x53, 0x54, 0x2b, 0x00, 0x0b, 0x9d, 0xee, 0xb5, 0x1b, 0xa8, + 0x00, 0xfa, 0xd4, 0x4b, 0x08, 0x07, 0x5f, 0x78, 0xa4, 0x1b, 0x3a, 0xbe, 0x47, 0x0c, 0xab, 0x69, + 0x11, 0x13, 0x5f, 0x50, 0x57, 0x11, 0xf2, 0x6c, 0xdd, 0x72, 0xba, 0x01, 0xd9, 0x0b, 0xb0, 0xa2, + 0x96, 0x51, 0x61, 0x27, 0x68, 0xdb, 0x38, 0xd7, 0x28, 0xa3, 0xd2, 0x24, 0x39, 0x1c, 0xf7, 0x98, + 0xf6, 0x73, 0x05, 0x95, 0x7d, 0x06, 0xca, 0x7a, 0x4c, 0xbd, 0x81, 0x0a, 0x29, 0x7b, 0x92, 0x72, + 0x6f, 0xab, 0xdb, 0xda, 0xe9, 0xde, 0x06, 0xec, 0x49, 0xea, 0x8f, 0xa2, 0x98, 0x72, 0x7e, 0x55, + 0x47, 0x95, 0x09, 0x8b, 0xd3, 0xe1, 0x41, 0xe6, 0x6a, 0x75, 0xfb, 0xed, 0xd3, 0xc1, 0x7e, 0xc6, + 0x4a, 0x67, 0x28, 0xed, 0xcf, 0x79, 0x54, 0x22, 0x71, 0x3a, 0x4c, 0x8f, 0x54, 0x15, 0x15, 0xe2, + 0xe8, 0x40, 0xc4, 0xbc, 0x42, 0xf9, 0x5a, 0xfd, 0x44, 0xe6, 0x21, 0xc7, 0xf3, 0x70, 0xf5, 0x74, + 0xe1, 0x42, 0xc6, 0x7c, 0x16, 0x76, 0x51, 0xf9, 0x80, 0xa5, 0x51, 0x3f, 0x4a, 0xa3, 0x5a, 0xfe, + 0x4a, 0x7e, 0xa3, 0xba, 0x5d, 0x7f, 0x2e, 0xbc, 0x2d, 0x01, 0x24, 0x4e, 0xc7, 0x47, 0x74, 0x8a, + 0x87, 0x5c, 0x4c, 0xa2, 0xfd, 0x21, 0x04, 0x8b, 0xe7, 0x22, 0x47, 0xa7, 0x7b, 0xd5, 0x00, 0x3d, + 0x31, 0xaf, 0xa4, 0x5a, 0x91, 0xeb, 0x79, 0xe7, 0x79, 0x7a, 0xda, 0x82, 0x9f, 0x4e, 0x81, 0xeb, + 0xb7, 0xd1, 0xca, 0x82, 0x6e, 0x15, 0xa3, 0xfc, 0x57, 0xec, 0x48, 0xc6, 0x02, 0x96, 0xea, 0x25, + 0x54, 0x7c, 0x1c, 0xed, 0x1f, 0x8a, 0x58, 0x54, 0xa8, 0xd8, 0xdc, 0xca, 0xdd, 0x54, 0xb4, 0x23, + 0x59, 0x0d, 0x55, 0xb4, 0x14, 0x3a, 0xf7, 0x1c, 0xf7, 0xbe, 0x83, 0x2f, 0xa8, 0x08, 0x95, 0x3c, + 0x42, 0x7d, 0xd7, 0xc1, 0x8a, 0xba, 0x8c, 0xca, 0xb6, 0x6b, 0xe8, 0x81, 0xe5, 0x3a, 0x38, 0xa7, + 0x62, 0xb4, 0xec, 0xd2, 0x96, 0xee, 0x58, 0x0f, 0x04, 0x25, 0xaf, 0x56, 0x50, 0x91, 0x74, 0x88, + 0x13, 0xe0, 0x82, 0xba, 0x86, 0xaa, 0xf7, 0x5d, 0x7a, 0xaf, 0xeb, 0x36, 0xbb, 0x3a, 0x0d, 0x70, + 0x51, 0xbd, 0x88, 0x56, 0x0c, 0xd7, 0xf1, 0xc3, 0x36, 0xa1, 0xdd, 0x96, 0xeb, 0x9a, 0xb8, 0x04, + 0xec, 0x6e, 0xb0, 0x43, 0x28, 0x5e, 0xd2, 0xfe, 0xad, 0xa0, 0x62, 0x90, 0x7c, 0xc5, 0xe2, 0x17, + 0xae, 0x21, 0x1b, 0xad, 0x8e, 0xa2, 0x71, 0xda, 0x4d, 0x1e, 0x75, 0x27, 0x23, 0xc6, 0x7a, 0x5f, + 0xca, 0x42, 0xba, 0x76, 0xba, 0x04, 0x2f, 0x1a, 0xa7, 0xee, 0x23, 0x9f, 0x73, 0xd3, 0xe5, 0xd1, + 0xdc, 0x4e, 0xfd, 0x1c, 0xad, 0xf5, 0xd9, 0x88, 0xc5, 0x7d, 0x16, 0xf7, 0x8e, 0xba, 0xac, 0x3f, + 0x60, 0xfc, 0x78, 0x55, 0xb7, 0x37, 0x9e, 0x71, 0x84, 0xa7, 0x00, 0xd2, 0x1f, 0x30, 0xba, 0xda, + 0x5f, 0xd8, 0x43, 0xdc, 0xf7, 0xd9, 0xc1, 0x41, 0x24, 0x0f, 0xa1, 0xd8, 0x68, 0x9f, 0xa1, 0xca, + 0xb4, 0x9e, 0xd5, 0xcb, 0xa8, 0x72, 0x10, 0x0d, 0xe2, 0x61, 0x7a, 0xd8, 0x17, 0xe9, 0xc9, 0xd1, + 0x19, 0x01, 0x04, 0x4c, 0x7a, 0xc9, 0x58, 0x58, 0x92, 0xa3, 0x62, 0xa3, 0xfd, 0x17, 0xa3, 0xe5, + 0x79, 0x47, 0xd4, 0x3b, 0x28, 0x9f, 0x46, 0x03, 0xd9, 0x71, 0xae, 0x9f, 0xcd, 0xfb, 0x7a, 0x10, + 0x0d, 0x28, 0xc0, 0x54, 0x82, 0x4a, 0xd1, 0x64, 0xc4, 0x7a, 0xa9, 0x3c, 0x2a, 0x1f, 0x9c, 0x51, + 0x80, 0xce, 0x41, 0x54, 0x82, 0xd5, 0xcf, 0x50, 0xa1, 0x17, 0x4d, 0x84, 0xa9, 0xab, 0xdb, 0xef, + 0x9d, 0x51, 0x88, 0x11, 0x4d, 0x18, 0xe5, 0x40, 0x10, 0xf0, 0x28, 0x19, 0x1f, 0xf0, 0x60, 0x9d, + 0x5d, 0x40, 0x33, 0x19, 0x1f, 0x50, 0x0e, 0x04, 0x47, 0x06, 0x10, 0xfe, 0x71, 0xad, 0x78, 0x2e, + 0x47, 0x5a, 0x1c, 0x44, 0x25, 0x18, 0xec, 0x38, 0x48, 0x92, 0x7e, 0xad, 0x74, 0x2e, 0x3b, 0xda, + 0x49, 0xd2, 0xa7, 0x1c, 0x08, 0x76, 0xc4, 0x87, 0x07, 0x0f, 0xd9, 0xb8, 0xb6, 0x74, 0x2e, 0x3b, + 0x1c, 0x0e, 0xa2, 0x12, 0x0c, 0x62, 0x46, 0x6c, 0x3c, 0x49, 0xe2, 0x5a, 0xf9, 0x5c, 0x62, 0x3c, + 0x0e, 0xa2, 0x12, 0xcc, 0xc5, 0x8c, 0x93, 0x11, 0x1b, 0xd7, 0x2a, 0xe7, 0x13, 0xc3, 0x41, 0x54, + 0x82, 0xd5, 0x00, 0x55, 0xc7, 0xac, 0x37, 0x1c, 0x8d, 0x93, 0xde, 0x30, 0x3d, 0xaa, 0x21, 0x2e, + 0x6b, 0xfb, 0x8c, 0xb2, 0xe8, 0x0c, 0x49, 0xe7, 0xc5, 0xa8, 0x0d, 0x54, 0x4c, 0x59, 0x3c, 0x61, + 0xb5, 0x2a, 0x97, 0xf7, 0xfe, 0x59, 0x6b, 0x17, 0x30, 0x54, 0x40, 0x41, 0xc6, 0xe3, 0x64, 0xd8, + 0x63, 0xb5, 0xe5, 0x73, 0xc9, 0xe8, 0x00, 0x86, 0x0a, 0xa8, 0xf6, 0xb5, 0x82, 0xf2, 0x41, 0x34, + 0x58, 0xec, 0x83, 0x4b, 0x28, 0xaf, 0x9b, 0xbb, 0x58, 0x11, 0x0b, 0x0f, 0xe7, 0xc4, 0xa2, 0x83, + 0xf3, 0x30, 0x17, 0x0d, 0xd7, 0xd9, 0xc5, 0x05, 0x20, 0x99, 0x04, 0xba, 0x5d, 0x19, 0x15, 0x1c, + 0x37, 0x74, 0x70, 0x09, 0x48, 0x4e, 0xd8, 0xc6, 0x4b, 0x40, 0xf2, 0xa8, 0xeb, 0xe0, 0x32, 0x90, + 0x3c, 0x1a, 0xe0, 0x0a, 0x34, 0x40, 0x2f, 0x74, 0x8c, 0x00, 0x23, 0xf8, 0xb5, 0x43, 0x68, 0x03, + 0x57, 0xd5, 0x22, 0x52, 0xf6, 0xf0, 0x32, 0xfc, 0xa6, 0x37, 0x9b, 0xd6, 0x1e, 0x5e, 0xd1, 0x5c, + 0x54, 0x12, 0xc7, 0x4b, 0x55, 0xd1, 0xaa, 0x0e, 0x13, 0x3a, 0xe8, 0xce, 0x0c, 0x83, 0x29, 0x4d, + 0x68, 0x93, 0x18, 0x81, 0xd5, 0x21, 0x58, 0x81, 0xb6, 0x6c, 0xb5, 0xe7, 0x28, 0x39, 0xe8, 0xc5, + 0x1e, 0x75, 0x5b, 0x94, 0xf8, 0x3e, 0x10, 0xf2, 0xda, 0x7f, 0x14, 0x54, 0x80, 0xb3, 0x06, 0xbc, + 0x86, 0xee, 0x93, 0x45, 0x69, 0xba, 0x61, 0x84, 0xbe, 0x2e, 0xa5, 0xad, 0xa0, 0x8a, 0x6e, 0x82, + 0x65, 0x96, 0x6e, 0xe3, 0x9c, 0xe8, 0xe2, 0x6d, 0xcf, 0x26, 0x6d, 0xe2, 0x70, 0x8e, 0x3c, 0x0c, + 0x08, 0x53, 0x70, 0x17, 0x60, 0x40, 0xb4, 0x88, 0x63, 0xf1, 0x5d, 0x91, 0x5b, 0xe2, 0xf8, 0x01, + 0x0d, 0x81, 0x59, 0xb7, 0x71, 0x69, 0x36, 0x40, 0x3a, 0x04, 0x2f, 0x81, 0x2e, 0xc7, 0x6d, 0x5b, + 0x8e, 0xd8, 0x97, 0x21, 0xde, 0x6e, 0xc3, 0xb6, 0x3e, 0x0f, 0x09, 0xae, 0x80, 0x62, 0x4f, 0xa7, + 0x81, 0x90, 0x85, 0x40, 0xb1, 0x47, 0x89, 0xe7, 0xfa, 0x16, 0xcc, 0x1a, 0xdd, 0xc6, 0x55, 0x08, + 0x06, 0x25, 0x4d, 0x9b, 0xec, 0x59, 0x1d, 0xd2, 0x05, 0x37, 0xf0, 0x32, 0xb0, 0x51, 0x62, 0x73, + 0x81, 0x82, 0xb4, 0x02, 0x3a, 0x3b, 0x99, 0xce, 0x55, 0xed, 0x8f, 0x0a, 0x2a, 0x40, 0x97, 0x00, + 0xe3, 0x9a, 0x2e, 0x6d, 0xcf, 0xb9, 0xbe, 0x8c, 0xca, 0xba, 0x09, 0x06, 0xe9, 0xb6, 0x74, 0x3c, + 0xdc, 0xb3, 0x6c, 0x4b, 0xa7, 0x5f, 0xe0, 0x1c, 0x28, 0x9b, 0x73, 0xfc, 0x01, 0xa1, 0x38, 0xcf, + 0x45, 0x58, 0x8e, 0x6e, 0x77, 0x89, 0x63, 0x5a, 0x4e, 0x0b, 0x17, 0x20, 0x16, 0x2d, 0x42, 0x43, + 0xc7, 0xc4, 0x45, 0x58, 0x53, 0xa2, 0xdb, 0x96, 0x2f, 0xfc, 0xb6, 0xa8, 0xdc, 0x2d, 0x41, 0x6a, + 0xfd, 0x1d, 0x97, 0x06, 0xb8, 0x0c, 0x69, 0xb7, 0x5d, 0xa7, 0x25, 0x6a, 0xc1, 0xa5, 0x26, 0xa1, + 0x18, 0x01, 0xb7, 0xbc, 0x86, 0x19, 0xb8, 0xaa, 0x11, 0x54, 0x12, 0x3d, 0x09, 0x6c, 0x68, 0x11, + 0xc7, 0x24, 0x74, 0xd1, 0xe8, 0x26, 0x69, 0x5b, 0x8e, 0xe5, 0xc8, 0x6c, 0xb5, 0x75, 0xdf, 0x08, + 0x6d, 0xd8, 0xe6, 0xc0, 0x04, 0x87, 0x84, 0x01, 0x18, 0xab, 0xfd, 0x14, 0x15, 0xa0, 0x2b, 0x81, + 0xd1, 0x6d, 0xd7, 0x35, 0xe7, 0x44, 0x5c, 0x42, 0xd8, 0x70, 0x1d, 0x53, 0x06, 0xb6, 0x0b, 0xbf, + 0x62, 0x05, 0x92, 0xc3, 0xcb, 0x48, 0x97, 0x45, 0x04, 0x7b, 0xc7, 0xb4, 0x64, 0x20, 0xf3, 0x10, + 0x69, 0xcb, 0x09, 0x08, 0xa5, 0x6e, 0x2b, 0xcb, 0x7e, 0x15, 0x2d, 0xed, 0x86, 0xa2, 0xc6, 0x8a, + 0x50, 0x74, 0x7e, 0xd8, 0xd8, 0x85, 0xf2, 0x06, 0x42, 0x49, 0xbb, 0x8b, 0x4a, 0xa2, 0xa7, 0x81, + 0x1f, 0x4e, 0xd8, 0x6e, 0x1c, 0xf7, 0xc3, 0xb7, 0x9c, 0x56, 0x68, 0xeb, 0x14, 0x2b, 0xfc, 0xd2, + 0x61, 0x87, 0x94, 0x97, 0x5c, 0x19, 0x15, 0xcc, 0x50, 0xb7, 0x71, 0x5e, 0x0b, 0x50, 0x49, 0xb4, + 0x33, 0x90, 0x20, 0x2e, 0x25, 0x73, 0x12, 0x2a, 0xa8, 0xd8, 0xb4, 0xa8, 0x1f, 0x08, 0xb8, 0x4f, + 0xc0, 0x27, 0x9c, 0x03, 0x72, 0xb0, 0x63, 0x51, 0x13, 0xe7, 0xc1, 0xd1, 0x59, 0xc1, 0xc8, 0x4b, + 0x4d, 0x41, 0xbb, 0x89, 0x4a, 0xa2, 0xbb, 0x71, 0xa9, 0xd4, 0xf5, 0x16, 0xec, 0x02, 0x4b, 0x38, + 0x4d, 0x84, 0xc4, 0x71, 0x83, 0xae, 0xdc, 0xe7, 0xb4, 0x5d, 0x54, 0x9d, 0xeb, 0x65, 0xea, 0xab, + 0xe8, 0x25, 0x4a, 0x0c, 0xcb, 0xa3, 0xae, 0x61, 0x05, 0x5f, 0x2c, 0x9e, 0xa9, 0xec, 0x07, 0x5e, + 0x5a, 0xe0, 0xbf, 0xeb, 0x74, 0xe7, 0x68, 0x39, 0x6d, 0x82, 0x8a, 0xbc, 0x8f, 0x41, 0x5c, 0x03, + 0xe2, 0x2c, 0x9c, 0xc9, 0x97, 0xd1, 0xc5, 0xf9, 0x04, 0xf1, 0x9f, 0x85, 0x97, 0xcd, 0x30, 0x08, + 0x29, 0x11, 0x41, 0xf2, 0x74, 0x3f, 0xc0, 0x79, 0x48, 0x82, 0x47, 0x89, 0x2f, 0x6e, 0x61, 0x2b, + 0xa8, 0x32, 0xed, 0x05, 0xb8, 0x28, 0x2e, 0xf4, 0x61, 0xb6, 0x2f, 0x69, 0x0d, 0x54, 0xe4, 0x8d, + 0x0f, 0x94, 0x76, 0x5c, 0xcb, 0x20, 0x8b, 0x8e, 0xeb, 0xc6, 0xac, 0x09, 0x18, 0x7a, 0xd6, 0x13, + 0x72, 0x5c, 0x85, 0x9e, 0xf5, 0x92, 0x7f, 0x2d, 0xa1, 0xd5, 0xc5, 0x9b, 0x8f, 0xba, 0x81, 0xf0, + 0x97, 0x2c, 0xea, 0x77, 0x53, 0xb8, 0xd0, 0x75, 0x87, 0x71, 0x9f, 0x3d, 0xe1, 0xd7, 0x91, 0x22, + 0x5d, 0x05, 0x3a, 0xbf, 0xe7, 0x59, 0x40, 0x55, 0x4d, 0x54, 0xdc, 0x8f, 0x1e, 0xb2, 0x7d, 0x79, + 0xd9, 0xa8, 0x9f, 0xf5, 0x72, 0x55, 0xb7, 0x01, 0x45, 0x05, 0x58, 0xfb, 0x67, 0x09, 0x15, 0x39, + 0xe1, 0xa9, 0x9b, 0xab, 0xde, 0x68, 0x50, 0xd2, 0xc1, 0x0a, 0xef, 0xa6, 0x70, 0x7e, 0x45, 0x41, + 0xe8, 0x66, 0xc7, 0xb0, 0x45, 0xeb, 0xd2, 0xcd, 0x4e, 0xdb, 0x35, 0x71, 0x01, 0x22, 0xa8, 0xc3, + 0xaa, 0xc8, 0x19, 0x3c, 0xcf, 0x85, 0x73, 0x0b, 0xc4, 0x20, 0xa0, 0x78, 0x89, 0x37, 0xfb, 0x70, + 0x4f, 0x34, 0x29, 0x3d, 0xdc, 0x03, 0xff, 0x71, 0x45, 0x2d, 0xa1, 0x9c, 0x61, 0x60, 0x04, 0x10, + 0x83, 0x8b, 0xaf, 0x4e, 0x87, 0x01, 0xef, 0xe0, 0x06, 0x1c, 0x01, 0xbc, 0xc2, 0x03, 0x08, 0x4b, + 0x0e, 0x5b, 0x15, 0x63, 0xc2, 0xc3, 0x6b, 0xd9, 0xbc, 0xc0, 0xc0, 0x60, 0x5a, 0xbe, 0xe1, 0x86, + 0xd4, 0x27, 0xf8, 0x22, 0xaf, 0x79, 0xb7, 0xb1, 0x8b, 0x55, 0x58, 0x91, 0x3d, 0xcf, 0xc6, 0x2f, + 0xf1, 0xde, 0xea, 0x12, 0xff, 0xbe, 0x15, 0xec, 0xe0, 0x4b, 0x40, 0xb7, 0x80, 0xe3, 0x65, 0x58, + 0xb5, 0x75, 0x7a, 0x0f, 0xbf, 0x02, 0xd2, 0xda, 0xf7, 0x09, 0x7e, 0x55, 0x2c, 0x3a, 0xb8, 0xc6, + 0x87, 0x0f, 0x69, 0xe1, 0xef, 0x81, 0xa1, 0x8e, 0x83, 0xd7, 0x41, 0x88, 0xe3, 0x49, 0x9f, 0x5f, + 0x03, 0x0b, 0x1d, 0x6e, 0xe1, 0x65, 0x30, 0xc0, 0x99, 0x5a, 0xf8, 0x7a, 0x36, 0xb5, 0xde, 0xe0, + 0x2d, 0x84, 0x9f, 0x55, 0xfc, 0x26, 0x4c, 0x26, 0x0f, 0x5f, 0x91, 0x9d, 0x59, 0x0f, 0xf4, 0x3d, + 0xcb, 0xc7, 0x6f, 0x89, 0x6a, 0xa0, 0x01, 0x48, 0xd4, 0xf8, 0x44, 0xe3, 0x81, 0x78, 0x9b, 0x97, + 0x24, 0x58, 0xf8, 0x7d, 0xb1, 0xf2, 0x7d, 0x7c, 0x95, 0xf3, 0xba, 0x7e, 0x00, 0x36, 0x5d, 0x93, + 0x95, 0xca, 0xb9, 0xdf, 0x99, 0x6e, 0x9c, 0x5d, 0xbc, 0x21, 0x0e, 0x1d, 0x81, 0xc8, 0xbc, 0x2b, + 0xc6, 0x26, 0x69, 0xe2, 0xeb, 0x72, 0xe5, 0xe1, 0xf7, 0xb8, 0x16, 0xea, 0x3a, 0x36, 0x7e, 0x3f, + 0x9b, 0xa5, 0x1f, 0x80, 0x87, 0x9e, 0x8f, 0xeb, 0xe0, 0xe1, 0xe7, 0xa1, 0xee, 0x70, 0x7b, 0x36, + 0x81, 0x93, 0x1a, 0xb0, 0xfc, 0x10, 0x7e, 0xe0, 0x4b, 0x4a, 0x6c, 0xbc, 0xc5, 0x7f, 0x30, 0xa9, + 0xeb, 0xe1, 0x6d, 0x10, 0x01, 0x0a, 0x3e, 0x02, 0x1b, 0x28, 0x69, 0x3b, 0xba, 0x13, 0xe0, 0x1f, + 0x88, 0x43, 0x0b, 0x7e, 0x3a, 0x66, 0xd8, 0xc6, 0x3f, 0x04, 0xed, 0xd4, 0x75, 0x03, 0x7c, 0x03, + 0x56, 0x3e, 0x04, 0xe7, 0x63, 0xbe, 0x0a, 0x9b, 0x4d, 0x7c, 0x13, 0x56, 0x5c, 0xe3, 0x27, 0xbc, + 0xdf, 0xb8, 0x9e, 0x65, 0xe0, 0x5b, 0x7c, 0xa6, 0x03, 0xf1, 0xf6, 0xc2, 0x0c, 0xba, 0x03, 0x2c, + 0x7b, 0xdc, 0xed, 0x1f, 0xf1, 0x4e, 0x15, 0xf2, 0x31, 0xff, 0x29, 0x47, 0x5a, 0x81, 0x4d, 0xf0, + 0x67, 0x62, 0x14, 0x75, 0xbc, 0x1d, 0x40, 0xdf, 0x95, 0x25, 0x07, 0x27, 0x10, 0xeb, 0xbc, 0x3a, + 0xc3, 0xbd, 0x4e, 0x07, 0x37, 0x60, 0x69, 0x72, 0xad, 0x06, 0xb0, 0x34, 0x5d, 0x4a, 0xac, 0x96, + 0x83, 0x4d, 0x08, 0xc5, 0xbd, 0xfb, 0x98, 0xf0, 0xe1, 0x62, 0xf9, 0x01, 0x6e, 0x8a, 0xeb, 0x48, + 0xdb, 0xc0, 0x2d, 0x5e, 0x00, 0x6e, 0x5b, 0xd4, 0xe5, 0x0e, 0x0c, 0x83, 0x6c, 0xc7, 0x13, 0x6f, + 0x71, 0xce, 0xb0, 0x6d, 0xe0, 0x5d, 0x08, 0x8b, 0xe1, 0x7a, 0xf8, 0x1e, 0x44, 0xc2, 0xb4, 0x7c, + 0x3e, 0xb7, 0x89, 0x89, 0x6d, 0xed, 0x4f, 0x0a, 0x5a, 0x59, 0xf8, 0xfe, 0x7c, 0xe1, 0x6f, 0xb6, + 0xbb, 0x0b, 0x5f, 0xe5, 0xef, 0x9f, 0xf1, 0x73, 0x77, 0xee, 0xe3, 0x5c, 0xfb, 0x50, 0x7e, 0xb2, + 0x62, 0xb4, 0x2c, 0x1f, 0x30, 0x4e, 0x6a, 0xdc, 0x08, 0x95, 0x0c, 0xb7, 0xdd, 0x86, 0xaf, 0x56, + 0xad, 0x85, 0xca, 0x99, 0x15, 0x6a, 0x6d, 0xf6, 0xc0, 0x22, 0x3e, 0x90, 0xa7, 0xcf, 0x2b, 0x6f, + 0xa1, 0xe5, 0x87, 0x6c, 0x30, 0x8c, 0xbb, 0xc9, 0xa3, 0x47, 0x13, 0x26, 0x3e, 0x86, 0x8a, 0xb4, + 0xca, 0x69, 0x2e, 0x27, 0x69, 0xbf, 0x57, 0xd0, 0xab, 0x7a, 0x1c, 0xed, 0x1f, 0xfd, 0x84, 0xcd, + 0x5e, 0x24, 0xd8, 0x8f, 0x0f, 0xd9, 0x24, 0x55, 0x3f, 0x45, 0xe5, 0xbe, 0x7c, 0xd0, 0x79, 0x7e, + 0x50, 0xb2, 0xa7, 0x1f, 0x3a, 0xc5, 0xa8, 0xf7, 0xd0, 0x0a, 0x8b, 0x7b, 0x49, 0x7f, 0x18, 0x0f, + 0xba, 0x73, 0x11, 0xba, 0xf6, 0xac, 0x08, 0x09, 0x76, 0x1e, 0x9b, 0x65, 0x36, 0xb7, 0xd3, 0xfe, + 0xaa, 0xa0, 0xda, 0xd3, 0x86, 0x4e, 0x46, 0x09, 0x8c, 0x1b, 0x8a, 0xd4, 0x4c, 0x6b, 0x77, 0xf6, + 0x06, 0xa3, 0x9c, 0xfd, 0x0d, 0xe6, 0x62, 0x06, 0x9f, 0x7d, 0xc6, 0xce, 0xbf, 0x38, 0xe5, 0x16, + 0x5f, 0x9c, 0xd4, 0xbb, 0xe2, 0xa9, 0x87, 0xc5, 0x3d, 0x36, 0x91, 0xcf, 0x29, 0xda, 0xb3, 0xd5, + 0x00, 0x2b, 0x9d, 0x81, 0xb4, 0xdf, 0x29, 0xe8, 0x15, 0xe9, 0x0e, 0x2f, 0x8b, 0x21, 0x9b, 0x7c, + 0x27, 0xc3, 0x3e, 0x99, 0x96, 0xc7, 0xcc, 0x4c, 0x19, 0xf4, 0x3b, 0xa8, 0xcc, 0x24, 0xad, 0xa6, + 0xf0, 0x18, 0x5c, 0x79, 0x5e, 0xed, 0xd3, 0x29, 0xe2, 0x59, 0xe1, 0xd5, 0x7e, 0xa3, 0xa0, 0x4b, + 0x59, 0xae, 0x8f, 0xe2, 0x34, 0x7a, 0xf2, 0x9d, 0x0c, 0xcd, 0x1f, 0x14, 0xf4, 0xf2, 0x31, 0x2b, + 0x65, 0x64, 0x16, 0xca, 0x43, 0x79, 0x81, 0xf2, 0x50, 0x3f, 0x46, 0x25, 0x7e, 0xef, 0x98, 0xd4, + 0x72, 0x1c, 0xfe, 0xe6, 0x33, 0xba, 0x11, 0xf0, 0x51, 0xc9, 0xbe, 0x10, 0xd6, 0xfc, 0xb1, 0xb0, + 0x7e, 0x93, 0x47, 0x2f, 0xe9, 0xe2, 0xa5, 0x97, 0x41, 0xf7, 0xf8, 0xb6, 0xa2, 0x4a, 0x51, 0xf9, + 0x11, 0x8b, 0xd2, 0xc3, 0x31, 0x9b, 0xc8, 0xe7, 0xaa, 0x1b, 0xa7, 0xe3, 0x4f, 0x30, 0xa0, 0xde, + 0x94, 0x68, 0x3a, 0x95, 0xf3, 0x74, 0xa6, 0xf2, 0x2f, 0x9e, 0xa9, 0xf5, 0x5f, 0x29, 0xa8, 0x9c, + 0xe9, 0x50, 0xaf, 0xa2, 0x55, 0xf6, 0x24, 0x1d, 0x47, 0xbd, 0xb4, 0x3b, 0xe1, 0x69, 0xe3, 0x3e, + 0x97, 0xe9, 0x8a, 0xa4, 0x8a, 0x5c, 0xaa, 0xef, 0x22, 0x9c, 0xb1, 0x4d, 0xab, 0x3c, 0xc7, 0x19, + 0xd7, 0x24, 0x3d, 0x3b, 0x10, 0xea, 0x1d, 0xb4, 0x9e, 0xb1, 0x9e, 0xd0, 0x85, 0xf2, 0x1c, 0x54, + 0x93, 0x1c, 0xe6, 0xf1, 0x3e, 0xa3, 0xfd, 0x25, 0x07, 0xc5, 0x3e, 0x1f, 0x94, 0xff, 0x7f, 0x15, + 0xcd, 0x1f, 0xed, 0xfc, 0xb9, 0x8f, 0xf6, 0xc9, 0xdd, 0xb8, 0xf0, 0xad, 0x75, 0xe3, 0xe2, 0x62, + 0x5d, 0x5f, 0xbf, 0x89, 0x96, 0xe7, 0x93, 0x2f, 0xee, 0x09, 0x0e, 0xc1, 0x17, 0x60, 0x15, 0x06, + 0xcd, 0x9b, 0xe2, 0xea, 0x1c, 0x06, 0xcd, 0xad, 0x1b, 0xe2, 0xea, 0x1c, 0x06, 0xcd, 0x8f, 0xb6, + 0x71, 0x7e, 0xfb, 0xeb, 0x22, 0x5a, 0xb3, 0xa5, 0x18, 0x5f, 0xfc, 0x6f, 0xa2, 0xfe, 0x56, 0x41, + 0xf8, 0xf8, 0xa0, 0x51, 0xb7, 0x9e, 0x55, 0xd0, 0x27, 0x4e, 0xcf, 0xf5, 0xed, 0xf3, 0x40, 0x44, + 0xca, 0xb5, 0x77, 0x7f, 0xf6, 0xb7, 0xbf, 0x7f, 0x93, 0x7b, 0x5b, 0x7b, 0x63, 0xf3, 0xf1, 0xd6, + 0x66, 0x16, 0x84, 0xc9, 0xad, 0xe8, 0x18, 0xff, 0x2d, 0xe5, 0xba, 0xfa, 0x6b, 0x05, 0xad, 0x1d, + 0xeb, 0xcc, 0xea, 0x87, 0xcf, 0x55, 0x79, 0x6c, 0xd6, 0xac, 0x6f, 0x9d, 0x03, 0x21, 0x6d, 0xdc, + 0xe0, 0x36, 0x6a, 0xda, 0xeb, 0x27, 0xda, 0x98, 0xb1, 0x83, 0x89, 0xbf, 0x54, 0xd0, 0xca, 0x42, + 0x83, 0x54, 0xeb, 0xcf, 0x8f, 0xc9, 0x7c, 0xbf, 0x5f, 0xdf, 0x3c, 0x33, 0xbf, 0x34, 0xee, 0x1a, + 0x37, 0xee, 0x8a, 0xf6, 0xda, 0xc9, 0x01, 0xe4, 0xcc, 0x60, 0xda, 0x2f, 0x14, 0xb4, 0x3c, 0x7f, + 0xe8, 0xd4, 0x0f, 0xce, 0xd5, 0xb1, 0xd6, 0xeb, 0x67, 0x65, 0x97, 0x76, 0x5d, 0xe5, 0x76, 0xbd, + 0xa9, 0xad, 0x1f, 0xb7, 0x6b, 0xc6, 0x7b, 0x4b, 0xb9, 0xde, 0x78, 0x82, 0x2e, 0xf7, 0x92, 0x83, + 0x53, 0x65, 0x37, 0x2e, 0x1d, 0x2b, 0x56, 0x6f, 0x9c, 0xa4, 0x89, 0xa7, 0x3c, 0xb8, 0x2b, 0x11, + 0x83, 0x04, 0xb8, 0xeb, 0xc9, 0x78, 0xb0, 0x39, 0x60, 0x31, 0xff, 0x27, 0x4f, 0xfe, 0x63, 0x18, + 0x8d, 0x86, 0x93, 0xa7, 0xff, 0x35, 0xbc, 0x9d, 0xad, 0x1f, 0x96, 0x38, 0xf3, 0x47, 0xff, 0x0b, + 0x00, 0x00, 0xff, 0xff, 0x3c, 0x3f, 0xd7, 0x9e, 0x61, 0x1c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta1/language_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta1/language_service.pb.go new file mode 100644 index 0000000..7ae6078 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta1/language_service.pb.go @@ -0,0 +1,2313 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/language/v1beta1/language_service.proto +// DO NOT EDIT! + +/* +Package language is a generated protocol buffer package. + +It is generated from these files: + google/cloud/language/v1beta1/language_service.proto + +It has these top-level messages: + Document + Sentence + Entity + Token + Sentiment + PartOfSpeech + DependencyEdge + EntityMention + TextSpan + AnalyzeSentimentRequest + AnalyzeSentimentResponse + AnalyzeEntitiesRequest + AnalyzeEntitiesResponse + AnalyzeSyntaxRequest + AnalyzeSyntaxResponse + AnnotateTextRequest + AnnotateTextResponse +*/ +package language + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Represents the text encoding that the caller uses to process the output. +// Providing an `EncodingType` is recommended because the API provides the +// beginning offsets for various outputs, such as tokens and mentions, and +// languages that natively use different text encodings may access offsets +// differently. +type EncodingType int32 + +const ( + // If `EncodingType` is not specified, encoding-dependent information (such as + // `begin_offset`) will be set at `-1`. + EncodingType_NONE EncodingType = 0 + // Encoding-dependent information (such as `begin_offset`) is calculated based + // on the UTF-8 encoding of the input. C++ and Go are examples of languages + // that use this encoding natively. + EncodingType_UTF8 EncodingType = 1 + // Encoding-dependent information (such as `begin_offset`) is calculated based + // on the UTF-16 encoding of the input. Java and Javascript are examples of + // languages that use this encoding natively. + EncodingType_UTF16 EncodingType = 2 + // Encoding-dependent information (such as `begin_offset`) is calculated based + // on the UTF-32 encoding of the input. Python is an example of a language + // that uses this encoding natively. + EncodingType_UTF32 EncodingType = 3 +) + +var EncodingType_name = map[int32]string{ + 0: "NONE", + 1: "UTF8", + 2: "UTF16", + 3: "UTF32", +} +var EncodingType_value = map[string]int32{ + "NONE": 0, + "UTF8": 1, + "UTF16": 2, + "UTF32": 3, +} + +func (x EncodingType) String() string { + return proto.EnumName(EncodingType_name, int32(x)) +} +func (EncodingType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// The document types enum. +type Document_Type int32 + +const ( + // The content type is not specified. + Document_TYPE_UNSPECIFIED Document_Type = 0 + // Plain text + Document_PLAIN_TEXT Document_Type = 1 + // HTML + Document_HTML Document_Type = 2 +) + +var Document_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "PLAIN_TEXT", + 2: "HTML", +} +var Document_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "PLAIN_TEXT": 1, + "HTML": 2, +} + +func (x Document_Type) String() string { + return proto.EnumName(Document_Type_name, int32(x)) +} +func (Document_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// The type of the entity. +type Entity_Type int32 + +const ( + // Unknown + Entity_UNKNOWN Entity_Type = 0 + // Person + Entity_PERSON Entity_Type = 1 + // Location + Entity_LOCATION Entity_Type = 2 + // Organization + Entity_ORGANIZATION Entity_Type = 3 + // Event + Entity_EVENT Entity_Type = 4 + // Work of art + Entity_WORK_OF_ART Entity_Type = 5 + // Consumer goods + Entity_CONSUMER_GOOD Entity_Type = 6 + // Other types + Entity_OTHER Entity_Type = 7 +) + +var Entity_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PERSON", + 2: "LOCATION", + 3: "ORGANIZATION", + 4: "EVENT", + 5: "WORK_OF_ART", + 6: "CONSUMER_GOOD", + 7: "OTHER", +} +var Entity_Type_value = map[string]int32{ + "UNKNOWN": 0, + "PERSON": 1, + "LOCATION": 2, + "ORGANIZATION": 3, + "EVENT": 4, + "WORK_OF_ART": 5, + "CONSUMER_GOOD": 6, + "OTHER": 7, +} + +func (x Entity_Type) String() string { + return proto.EnumName(Entity_Type_name, int32(x)) +} +func (Entity_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +// The part of speech tags enum. +type PartOfSpeech_Tag int32 + +const ( + // Unknown + PartOfSpeech_UNKNOWN PartOfSpeech_Tag = 0 + // Adjective + PartOfSpeech_ADJ PartOfSpeech_Tag = 1 + // Adposition (preposition and postposition) + PartOfSpeech_ADP PartOfSpeech_Tag = 2 + // Adverb + PartOfSpeech_ADV PartOfSpeech_Tag = 3 + // Conjunction + PartOfSpeech_CONJ PartOfSpeech_Tag = 4 + // Determiner + PartOfSpeech_DET PartOfSpeech_Tag = 5 + // Noun (common and proper) + PartOfSpeech_NOUN PartOfSpeech_Tag = 6 + // Cardinal number + PartOfSpeech_NUM PartOfSpeech_Tag = 7 + // Pronoun + PartOfSpeech_PRON PartOfSpeech_Tag = 8 + // Particle or other function word + PartOfSpeech_PRT PartOfSpeech_Tag = 9 + // Punctuation + PartOfSpeech_PUNCT PartOfSpeech_Tag = 10 + // Verb (all tenses and modes) + PartOfSpeech_VERB PartOfSpeech_Tag = 11 + // Other: foreign words, typos, abbreviations + PartOfSpeech_X PartOfSpeech_Tag = 12 + // Affix + PartOfSpeech_AFFIX PartOfSpeech_Tag = 13 +) + +var PartOfSpeech_Tag_name = map[int32]string{ + 0: "UNKNOWN", + 1: "ADJ", + 2: "ADP", + 3: "ADV", + 4: "CONJ", + 5: "DET", + 6: "NOUN", + 7: "NUM", + 8: "PRON", + 9: "PRT", + 10: "PUNCT", + 11: "VERB", + 12: "X", + 13: "AFFIX", +} +var PartOfSpeech_Tag_value = map[string]int32{ + "UNKNOWN": 0, + "ADJ": 1, + "ADP": 2, + "ADV": 3, + "CONJ": 4, + "DET": 5, + "NOUN": 6, + "NUM": 7, + "PRON": 8, + "PRT": 9, + "PUNCT": 10, + "VERB": 11, + "X": 12, + "AFFIX": 13, +} + +func (x PartOfSpeech_Tag) String() string { + return proto.EnumName(PartOfSpeech_Tag_name, int32(x)) +} +func (PartOfSpeech_Tag) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 0} } + +// The characteristic of a verb that expresses time flow during an event. +type PartOfSpeech_Aspect int32 + +const ( + // Aspect is not applicable in the analyzed language or is not predicted. + PartOfSpeech_ASPECT_UNKNOWN PartOfSpeech_Aspect = 0 + // Perfective + PartOfSpeech_PERFECTIVE PartOfSpeech_Aspect = 1 + // Imperfective + PartOfSpeech_IMPERFECTIVE PartOfSpeech_Aspect = 2 + // Progressive + PartOfSpeech_PROGRESSIVE PartOfSpeech_Aspect = 3 +) + +var PartOfSpeech_Aspect_name = map[int32]string{ + 0: "ASPECT_UNKNOWN", + 1: "PERFECTIVE", + 2: "IMPERFECTIVE", + 3: "PROGRESSIVE", +} +var PartOfSpeech_Aspect_value = map[string]int32{ + "ASPECT_UNKNOWN": 0, + "PERFECTIVE": 1, + "IMPERFECTIVE": 2, + "PROGRESSIVE": 3, +} + +func (x PartOfSpeech_Aspect) String() string { + return proto.EnumName(PartOfSpeech_Aspect_name, int32(x)) +} +func (PartOfSpeech_Aspect) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 1} } + +// The grammatical function performed by a noun or pronoun in a phrase, +// clause, or sentence. In some languages, other parts of speech, such as +// adjective and determiner, take case inflection in agreement with the noun. +type PartOfSpeech_Case int32 + +const ( + // Case is not applicable in the analyzed language or is not predicted. + PartOfSpeech_CASE_UNKNOWN PartOfSpeech_Case = 0 + // Accusative + PartOfSpeech_ACCUSATIVE PartOfSpeech_Case = 1 + // Adverbial + PartOfSpeech_ADVERBIAL PartOfSpeech_Case = 2 + // Complementive + PartOfSpeech_COMPLEMENTIVE PartOfSpeech_Case = 3 + // Dative + PartOfSpeech_DATIVE PartOfSpeech_Case = 4 + // Genitive + PartOfSpeech_GENITIVE PartOfSpeech_Case = 5 + // Instrumental + PartOfSpeech_INSTRUMENTAL PartOfSpeech_Case = 6 + // Locative + PartOfSpeech_LOCATIVE PartOfSpeech_Case = 7 + // Nominative + PartOfSpeech_NOMINATIVE PartOfSpeech_Case = 8 + // Oblique + PartOfSpeech_OBLIQUE PartOfSpeech_Case = 9 + // Partitive + PartOfSpeech_PARTITIVE PartOfSpeech_Case = 10 + // Prepositional + PartOfSpeech_PREPOSITIONAL PartOfSpeech_Case = 11 + // Reflexive + PartOfSpeech_REFLEXIVE_CASE PartOfSpeech_Case = 12 + // Relative + PartOfSpeech_RELATIVE_CASE PartOfSpeech_Case = 13 + // Vocative + PartOfSpeech_VOCATIVE PartOfSpeech_Case = 14 +) + +var PartOfSpeech_Case_name = map[int32]string{ + 0: "CASE_UNKNOWN", + 1: "ACCUSATIVE", + 2: "ADVERBIAL", + 3: "COMPLEMENTIVE", + 4: "DATIVE", + 5: "GENITIVE", + 6: "INSTRUMENTAL", + 7: "LOCATIVE", + 8: "NOMINATIVE", + 9: "OBLIQUE", + 10: "PARTITIVE", + 11: "PREPOSITIONAL", + 12: "REFLEXIVE_CASE", + 13: "RELATIVE_CASE", + 14: "VOCATIVE", +} +var PartOfSpeech_Case_value = map[string]int32{ + "CASE_UNKNOWN": 0, + "ACCUSATIVE": 1, + "ADVERBIAL": 2, + "COMPLEMENTIVE": 3, + "DATIVE": 4, + "GENITIVE": 5, + "INSTRUMENTAL": 6, + "LOCATIVE": 7, + "NOMINATIVE": 8, + "OBLIQUE": 9, + "PARTITIVE": 10, + "PREPOSITIONAL": 11, + "REFLEXIVE_CASE": 12, + "RELATIVE_CASE": 13, + "VOCATIVE": 14, +} + +func (x PartOfSpeech_Case) String() string { + return proto.EnumName(PartOfSpeech_Case_name, int32(x)) +} +func (PartOfSpeech_Case) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 2} } + +// Depending on the language, Form can be categorizing different forms of +// verbs, adjectives, adverbs, etc. For example, categorizing inflected +// endings of verbs and adjectives or distinguishing between short and long +// forms of adjectives and participles +type PartOfSpeech_Form int32 + +const ( + // Form is not applicable in the analyzed language or is not predicted. + PartOfSpeech_FORM_UNKNOWN PartOfSpeech_Form = 0 + // Adnomial + PartOfSpeech_ADNOMIAL PartOfSpeech_Form = 1 + // Auxiliary + PartOfSpeech_AUXILIARY PartOfSpeech_Form = 2 + // Complementizer + PartOfSpeech_COMPLEMENTIZER PartOfSpeech_Form = 3 + // Final ending + PartOfSpeech_FINAL_ENDING PartOfSpeech_Form = 4 + // Gerund + PartOfSpeech_GERUND PartOfSpeech_Form = 5 + // Realis + PartOfSpeech_REALIS PartOfSpeech_Form = 6 + // Irrealis + PartOfSpeech_IRREALIS PartOfSpeech_Form = 7 + // Short form + PartOfSpeech_SHORT PartOfSpeech_Form = 8 + // Long form + PartOfSpeech_LONG PartOfSpeech_Form = 9 + // Order form + PartOfSpeech_ORDER PartOfSpeech_Form = 10 + // Specific form + PartOfSpeech_SPECIFIC PartOfSpeech_Form = 11 +) + +var PartOfSpeech_Form_name = map[int32]string{ + 0: "FORM_UNKNOWN", + 1: "ADNOMIAL", + 2: "AUXILIARY", + 3: "COMPLEMENTIZER", + 4: "FINAL_ENDING", + 5: "GERUND", + 6: "REALIS", + 7: "IRREALIS", + 8: "SHORT", + 9: "LONG", + 10: "ORDER", + 11: "SPECIFIC", +} +var PartOfSpeech_Form_value = map[string]int32{ + "FORM_UNKNOWN": 0, + "ADNOMIAL": 1, + "AUXILIARY": 2, + "COMPLEMENTIZER": 3, + "FINAL_ENDING": 4, + "GERUND": 5, + "REALIS": 6, + "IRREALIS": 7, + "SHORT": 8, + "LONG": 9, + "ORDER": 10, + "SPECIFIC": 11, +} + +func (x PartOfSpeech_Form) String() string { + return proto.EnumName(PartOfSpeech_Form_name, int32(x)) +} +func (PartOfSpeech_Form) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 3} } + +// Gender classes of nouns reflected in the behaviour of associated words. +type PartOfSpeech_Gender int32 + +const ( + // Gender is not applicable in the analyzed language or is not predicted. + PartOfSpeech_GENDER_UNKNOWN PartOfSpeech_Gender = 0 + // Feminine + PartOfSpeech_FEMININE PartOfSpeech_Gender = 1 + // Masculine + PartOfSpeech_MASCULINE PartOfSpeech_Gender = 2 + // Neuter + PartOfSpeech_NEUTER PartOfSpeech_Gender = 3 +) + +var PartOfSpeech_Gender_name = map[int32]string{ + 0: "GENDER_UNKNOWN", + 1: "FEMININE", + 2: "MASCULINE", + 3: "NEUTER", +} +var PartOfSpeech_Gender_value = map[string]int32{ + "GENDER_UNKNOWN": 0, + "FEMININE": 1, + "MASCULINE": 2, + "NEUTER": 3, +} + +func (x PartOfSpeech_Gender) String() string { + return proto.EnumName(PartOfSpeech_Gender_name, int32(x)) +} +func (PartOfSpeech_Gender) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 4} } + +// The grammatical feature of verbs, used for showing modality and attitude. +type PartOfSpeech_Mood int32 + +const ( + // Mood is not applicable in the analyzed language or is not predicted. + PartOfSpeech_MOOD_UNKNOWN PartOfSpeech_Mood = 0 + // Conditional + PartOfSpeech_CONDITIONAL_MOOD PartOfSpeech_Mood = 1 + // Imperative + PartOfSpeech_IMPERATIVE PartOfSpeech_Mood = 2 + // Indicative + PartOfSpeech_INDICATIVE PartOfSpeech_Mood = 3 + // Interrogative + PartOfSpeech_INTERROGATIVE PartOfSpeech_Mood = 4 + // Jussive + PartOfSpeech_JUSSIVE PartOfSpeech_Mood = 5 + // Subjunctive + PartOfSpeech_SUBJUNCTIVE PartOfSpeech_Mood = 6 +) + +var PartOfSpeech_Mood_name = map[int32]string{ + 0: "MOOD_UNKNOWN", + 1: "CONDITIONAL_MOOD", + 2: "IMPERATIVE", + 3: "INDICATIVE", + 4: "INTERROGATIVE", + 5: "JUSSIVE", + 6: "SUBJUNCTIVE", +} +var PartOfSpeech_Mood_value = map[string]int32{ + "MOOD_UNKNOWN": 0, + "CONDITIONAL_MOOD": 1, + "IMPERATIVE": 2, + "INDICATIVE": 3, + "INTERROGATIVE": 4, + "JUSSIVE": 5, + "SUBJUNCTIVE": 6, +} + +func (x PartOfSpeech_Mood) String() string { + return proto.EnumName(PartOfSpeech_Mood_name, int32(x)) +} +func (PartOfSpeech_Mood) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 5} } + +// Count distinctions. +type PartOfSpeech_Number int32 + +const ( + // Number is not applicable in the analyzed language or is not predicted. + PartOfSpeech_NUMBER_UNKNOWN PartOfSpeech_Number = 0 + // Singular + PartOfSpeech_SINGULAR PartOfSpeech_Number = 1 + // Plural + PartOfSpeech_PLURAL PartOfSpeech_Number = 2 + // Dual + PartOfSpeech_DUAL PartOfSpeech_Number = 3 +) + +var PartOfSpeech_Number_name = map[int32]string{ + 0: "NUMBER_UNKNOWN", + 1: "SINGULAR", + 2: "PLURAL", + 3: "DUAL", +} +var PartOfSpeech_Number_value = map[string]int32{ + "NUMBER_UNKNOWN": 0, + "SINGULAR": 1, + "PLURAL": 2, + "DUAL": 3, +} + +func (x PartOfSpeech_Number) String() string { + return proto.EnumName(PartOfSpeech_Number_name, int32(x)) +} +func (PartOfSpeech_Number) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 6} } + +// The distinction between the speaker, second person, third person, etc. +type PartOfSpeech_Person int32 + +const ( + // Person is not applicable in the analyzed language or is not predicted. + PartOfSpeech_PERSON_UNKNOWN PartOfSpeech_Person = 0 + // First + PartOfSpeech_FIRST PartOfSpeech_Person = 1 + // Second + PartOfSpeech_SECOND PartOfSpeech_Person = 2 + // Third + PartOfSpeech_THIRD PartOfSpeech_Person = 3 + // Reflexive + PartOfSpeech_REFLEXIVE_PERSON PartOfSpeech_Person = 4 +) + +var PartOfSpeech_Person_name = map[int32]string{ + 0: "PERSON_UNKNOWN", + 1: "FIRST", + 2: "SECOND", + 3: "THIRD", + 4: "REFLEXIVE_PERSON", +} +var PartOfSpeech_Person_value = map[string]int32{ + "PERSON_UNKNOWN": 0, + "FIRST": 1, + "SECOND": 2, + "THIRD": 3, + "REFLEXIVE_PERSON": 4, +} + +func (x PartOfSpeech_Person) String() string { + return proto.EnumName(PartOfSpeech_Person_name, int32(x)) +} +func (PartOfSpeech_Person) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 7} } + +// This category shows if the token is part of a proper name. +type PartOfSpeech_Proper int32 + +const ( + // Proper is not applicable in the analyzed language or is not predicted. + PartOfSpeech_PROPER_UNKNOWN PartOfSpeech_Proper = 0 + // Proper + PartOfSpeech_PROPER PartOfSpeech_Proper = 1 + // Not proper + PartOfSpeech_NOT_PROPER PartOfSpeech_Proper = 2 +) + +var PartOfSpeech_Proper_name = map[int32]string{ + 0: "PROPER_UNKNOWN", + 1: "PROPER", + 2: "NOT_PROPER", +} +var PartOfSpeech_Proper_value = map[string]int32{ + "PROPER_UNKNOWN": 0, + "PROPER": 1, + "NOT_PROPER": 2, +} + +func (x PartOfSpeech_Proper) String() string { + return proto.EnumName(PartOfSpeech_Proper_name, int32(x)) +} +func (PartOfSpeech_Proper) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 8} } + +// Reciprocal features of a pronoun. +type PartOfSpeech_Reciprocity int32 + +const ( + // Reciprocity is not applicable in the analyzed language or is not + // predicted. + PartOfSpeech_RECIPROCITY_UNKNOWN PartOfSpeech_Reciprocity = 0 + // Reciprocal + PartOfSpeech_RECIPROCAL PartOfSpeech_Reciprocity = 1 + // Non-reciprocal + PartOfSpeech_NON_RECIPROCAL PartOfSpeech_Reciprocity = 2 +) + +var PartOfSpeech_Reciprocity_name = map[int32]string{ + 0: "RECIPROCITY_UNKNOWN", + 1: "RECIPROCAL", + 2: "NON_RECIPROCAL", +} +var PartOfSpeech_Reciprocity_value = map[string]int32{ + "RECIPROCITY_UNKNOWN": 0, + "RECIPROCAL": 1, + "NON_RECIPROCAL": 2, +} + +func (x PartOfSpeech_Reciprocity) String() string { + return proto.EnumName(PartOfSpeech_Reciprocity_name, int32(x)) +} +func (PartOfSpeech_Reciprocity) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 9} } + +// Time reference. +type PartOfSpeech_Tense int32 + +const ( + // Tense is not applicable in the analyzed language or is not predicted. + PartOfSpeech_TENSE_UNKNOWN PartOfSpeech_Tense = 0 + // Conditional + PartOfSpeech_CONDITIONAL_TENSE PartOfSpeech_Tense = 1 + // Future + PartOfSpeech_FUTURE PartOfSpeech_Tense = 2 + // Past + PartOfSpeech_PAST PartOfSpeech_Tense = 3 + // Present + PartOfSpeech_PRESENT PartOfSpeech_Tense = 4 + // Imperfect + PartOfSpeech_IMPERFECT PartOfSpeech_Tense = 5 + // Pluperfect + PartOfSpeech_PLUPERFECT PartOfSpeech_Tense = 6 +) + +var PartOfSpeech_Tense_name = map[int32]string{ + 0: "TENSE_UNKNOWN", + 1: "CONDITIONAL_TENSE", + 2: "FUTURE", + 3: "PAST", + 4: "PRESENT", + 5: "IMPERFECT", + 6: "PLUPERFECT", +} +var PartOfSpeech_Tense_value = map[string]int32{ + "TENSE_UNKNOWN": 0, + "CONDITIONAL_TENSE": 1, + "FUTURE": 2, + "PAST": 3, + "PRESENT": 4, + "IMPERFECT": 5, + "PLUPERFECT": 6, +} + +func (x PartOfSpeech_Tense) String() string { + return proto.EnumName(PartOfSpeech_Tense_name, int32(x)) +} +func (PartOfSpeech_Tense) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 10} } + +// The relationship between the action that a verb expresses and the +// participants identified by its arguments. +type PartOfSpeech_Voice int32 + +const ( + // Voice is not applicable in the analyzed language or is not predicted. + PartOfSpeech_VOICE_UNKNOWN PartOfSpeech_Voice = 0 + // Active + PartOfSpeech_ACTIVE PartOfSpeech_Voice = 1 + // Causative + PartOfSpeech_CAUSATIVE PartOfSpeech_Voice = 2 + // Passive + PartOfSpeech_PASSIVE PartOfSpeech_Voice = 3 +) + +var PartOfSpeech_Voice_name = map[int32]string{ + 0: "VOICE_UNKNOWN", + 1: "ACTIVE", + 2: "CAUSATIVE", + 3: "PASSIVE", +} +var PartOfSpeech_Voice_value = map[string]int32{ + "VOICE_UNKNOWN": 0, + "ACTIVE": 1, + "CAUSATIVE": 2, + "PASSIVE": 3, +} + +func (x PartOfSpeech_Voice) String() string { + return proto.EnumName(PartOfSpeech_Voice_name, int32(x)) +} +func (PartOfSpeech_Voice) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 11} } + +// The parse label enum for the token. +type DependencyEdge_Label int32 + +const ( + // Unknown + DependencyEdge_UNKNOWN DependencyEdge_Label = 0 + // Abbreviation modifier + DependencyEdge_ABBREV DependencyEdge_Label = 1 + // Adjectival complement + DependencyEdge_ACOMP DependencyEdge_Label = 2 + // Adverbial clause modifier + DependencyEdge_ADVCL DependencyEdge_Label = 3 + // Adverbial modifier + DependencyEdge_ADVMOD DependencyEdge_Label = 4 + // Adjectival modifier of an NP + DependencyEdge_AMOD DependencyEdge_Label = 5 + // Appositional modifier of an NP + DependencyEdge_APPOS DependencyEdge_Label = 6 + // Attribute dependent of a copular verb + DependencyEdge_ATTR DependencyEdge_Label = 7 + // Auxiliary (non-main) verb + DependencyEdge_AUX DependencyEdge_Label = 8 + // Passive auxiliary + DependencyEdge_AUXPASS DependencyEdge_Label = 9 + // Coordinating conjunction + DependencyEdge_CC DependencyEdge_Label = 10 + // Clausal complement of a verb or adjective + DependencyEdge_CCOMP DependencyEdge_Label = 11 + // Conjunct + DependencyEdge_CONJ DependencyEdge_Label = 12 + // Clausal subject + DependencyEdge_CSUBJ DependencyEdge_Label = 13 + // Clausal passive subject + DependencyEdge_CSUBJPASS DependencyEdge_Label = 14 + // Dependency (unable to determine) + DependencyEdge_DEP DependencyEdge_Label = 15 + // Determiner + DependencyEdge_DET DependencyEdge_Label = 16 + // Discourse + DependencyEdge_DISCOURSE DependencyEdge_Label = 17 + // Direct object + DependencyEdge_DOBJ DependencyEdge_Label = 18 + // Expletive + DependencyEdge_EXPL DependencyEdge_Label = 19 + // Goes with (part of a word in a text not well edited) + DependencyEdge_GOESWITH DependencyEdge_Label = 20 + // Indirect object + DependencyEdge_IOBJ DependencyEdge_Label = 21 + // Marker (word introducing a subordinate clause) + DependencyEdge_MARK DependencyEdge_Label = 22 + // Multi-word expression + DependencyEdge_MWE DependencyEdge_Label = 23 + // Multi-word verbal expression + DependencyEdge_MWV DependencyEdge_Label = 24 + // Negation modifier + DependencyEdge_NEG DependencyEdge_Label = 25 + // Noun compound modifier + DependencyEdge_NN DependencyEdge_Label = 26 + // Noun phrase used as an adverbial modifier + DependencyEdge_NPADVMOD DependencyEdge_Label = 27 + // Nominal subject + DependencyEdge_NSUBJ DependencyEdge_Label = 28 + // Passive nominal subject + DependencyEdge_NSUBJPASS DependencyEdge_Label = 29 + // Numeric modifier of a noun + DependencyEdge_NUM DependencyEdge_Label = 30 + // Element of compound number + DependencyEdge_NUMBER DependencyEdge_Label = 31 + // Punctuation mark + DependencyEdge_P DependencyEdge_Label = 32 + // Parataxis relation + DependencyEdge_PARATAXIS DependencyEdge_Label = 33 + // Participial modifier + DependencyEdge_PARTMOD DependencyEdge_Label = 34 + // The complement of a preposition is a clause + DependencyEdge_PCOMP DependencyEdge_Label = 35 + // Object of a preposition + DependencyEdge_POBJ DependencyEdge_Label = 36 + // Possession modifier + DependencyEdge_POSS DependencyEdge_Label = 37 + // Postverbal negative particle + DependencyEdge_POSTNEG DependencyEdge_Label = 38 + // Predicate complement + DependencyEdge_PRECOMP DependencyEdge_Label = 39 + // Preconjunt + DependencyEdge_PRECONJ DependencyEdge_Label = 40 + // Predeterminer + DependencyEdge_PREDET DependencyEdge_Label = 41 + // Prefix + DependencyEdge_PREF DependencyEdge_Label = 42 + // Prepositional modifier + DependencyEdge_PREP DependencyEdge_Label = 43 + // The relationship between a verb and verbal morpheme + DependencyEdge_PRONL DependencyEdge_Label = 44 + // Particle + DependencyEdge_PRT DependencyEdge_Label = 45 + // Associative or possessive marker + DependencyEdge_PS DependencyEdge_Label = 46 + // Quantifier phrase modifier + DependencyEdge_QUANTMOD DependencyEdge_Label = 47 + // Relative clause modifier + DependencyEdge_RCMOD DependencyEdge_Label = 48 + // Complementizer in relative clause + DependencyEdge_RCMODREL DependencyEdge_Label = 49 + // Ellipsis without a preceding predicate + DependencyEdge_RDROP DependencyEdge_Label = 50 + // Referent + DependencyEdge_REF DependencyEdge_Label = 51 + // Remnant + DependencyEdge_REMNANT DependencyEdge_Label = 52 + // Reparandum + DependencyEdge_REPARANDUM DependencyEdge_Label = 53 + // Root + DependencyEdge_ROOT DependencyEdge_Label = 54 + // Suffix specifying a unit of number + DependencyEdge_SNUM DependencyEdge_Label = 55 + // Suffix + DependencyEdge_SUFF DependencyEdge_Label = 56 + // Temporal modifier + DependencyEdge_TMOD DependencyEdge_Label = 57 + // Topic marker + DependencyEdge_TOPIC DependencyEdge_Label = 58 + // Clause headed by an infinite form of the verb that modifies a noun + DependencyEdge_VMOD DependencyEdge_Label = 59 + // Vocative + DependencyEdge_VOCATIVE DependencyEdge_Label = 60 + // Open clausal complement + DependencyEdge_XCOMP DependencyEdge_Label = 61 + // Name suffix + DependencyEdge_SUFFIX DependencyEdge_Label = 62 + // Name title + DependencyEdge_TITLE DependencyEdge_Label = 63 + // Adverbial phrase modifier + DependencyEdge_ADVPHMOD DependencyEdge_Label = 64 + // Causative auxiliary + DependencyEdge_AUXCAUS DependencyEdge_Label = 65 + // Helper auxiliary + DependencyEdge_AUXVV DependencyEdge_Label = 66 + // Rentaishi (Prenominal modifier) + DependencyEdge_DTMOD DependencyEdge_Label = 67 + // Foreign words + DependencyEdge_FOREIGN DependencyEdge_Label = 68 + // Keyword + DependencyEdge_KW DependencyEdge_Label = 69 + // List for chains of comparable items + DependencyEdge_LIST DependencyEdge_Label = 70 + // Nominalized clause + DependencyEdge_NOMC DependencyEdge_Label = 71 + // Nominalized clausal subject + DependencyEdge_NOMCSUBJ DependencyEdge_Label = 72 + // Nominalized clausal passive + DependencyEdge_NOMCSUBJPASS DependencyEdge_Label = 73 + // Compound of numeric modifier + DependencyEdge_NUMC DependencyEdge_Label = 74 + // Copula + DependencyEdge_COP DependencyEdge_Label = 75 + // Dislocated relation (for fronted/topicalized elements) + DependencyEdge_DISLOCATED DependencyEdge_Label = 76 +) + +var DependencyEdge_Label_name = map[int32]string{ + 0: "UNKNOWN", + 1: "ABBREV", + 2: "ACOMP", + 3: "ADVCL", + 4: "ADVMOD", + 5: "AMOD", + 6: "APPOS", + 7: "ATTR", + 8: "AUX", + 9: "AUXPASS", + 10: "CC", + 11: "CCOMP", + 12: "CONJ", + 13: "CSUBJ", + 14: "CSUBJPASS", + 15: "DEP", + 16: "DET", + 17: "DISCOURSE", + 18: "DOBJ", + 19: "EXPL", + 20: "GOESWITH", + 21: "IOBJ", + 22: "MARK", + 23: "MWE", + 24: "MWV", + 25: "NEG", + 26: "NN", + 27: "NPADVMOD", + 28: "NSUBJ", + 29: "NSUBJPASS", + 30: "NUM", + 31: "NUMBER", + 32: "P", + 33: "PARATAXIS", + 34: "PARTMOD", + 35: "PCOMP", + 36: "POBJ", + 37: "POSS", + 38: "POSTNEG", + 39: "PRECOMP", + 40: "PRECONJ", + 41: "PREDET", + 42: "PREF", + 43: "PREP", + 44: "PRONL", + 45: "PRT", + 46: "PS", + 47: "QUANTMOD", + 48: "RCMOD", + 49: "RCMODREL", + 50: "RDROP", + 51: "REF", + 52: "REMNANT", + 53: "REPARANDUM", + 54: "ROOT", + 55: "SNUM", + 56: "SUFF", + 57: "TMOD", + 58: "TOPIC", + 59: "VMOD", + 60: "VOCATIVE", + 61: "XCOMP", + 62: "SUFFIX", + 63: "TITLE", + 64: "ADVPHMOD", + 65: "AUXCAUS", + 66: "AUXVV", + 67: "DTMOD", + 68: "FOREIGN", + 69: "KW", + 70: "LIST", + 71: "NOMC", + 72: "NOMCSUBJ", + 73: "NOMCSUBJPASS", + 74: "NUMC", + 75: "COP", + 76: "DISLOCATED", +} +var DependencyEdge_Label_value = map[string]int32{ + "UNKNOWN": 0, + "ABBREV": 1, + "ACOMP": 2, + "ADVCL": 3, + "ADVMOD": 4, + "AMOD": 5, + "APPOS": 6, + "ATTR": 7, + "AUX": 8, + "AUXPASS": 9, + "CC": 10, + "CCOMP": 11, + "CONJ": 12, + "CSUBJ": 13, + "CSUBJPASS": 14, + "DEP": 15, + "DET": 16, + "DISCOURSE": 17, + "DOBJ": 18, + "EXPL": 19, + "GOESWITH": 20, + "IOBJ": 21, + "MARK": 22, + "MWE": 23, + "MWV": 24, + "NEG": 25, + "NN": 26, + "NPADVMOD": 27, + "NSUBJ": 28, + "NSUBJPASS": 29, + "NUM": 30, + "NUMBER": 31, + "P": 32, + "PARATAXIS": 33, + "PARTMOD": 34, + "PCOMP": 35, + "POBJ": 36, + "POSS": 37, + "POSTNEG": 38, + "PRECOMP": 39, + "PRECONJ": 40, + "PREDET": 41, + "PREF": 42, + "PREP": 43, + "PRONL": 44, + "PRT": 45, + "PS": 46, + "QUANTMOD": 47, + "RCMOD": 48, + "RCMODREL": 49, + "RDROP": 50, + "REF": 51, + "REMNANT": 52, + "REPARANDUM": 53, + "ROOT": 54, + "SNUM": 55, + "SUFF": 56, + "TMOD": 57, + "TOPIC": 58, + "VMOD": 59, + "VOCATIVE": 60, + "XCOMP": 61, + "SUFFIX": 62, + "TITLE": 63, + "ADVPHMOD": 64, + "AUXCAUS": 65, + "AUXVV": 66, + "DTMOD": 67, + "FOREIGN": 68, + "KW": 69, + "LIST": 70, + "NOMC": 71, + "NOMCSUBJ": 72, + "NOMCSUBJPASS": 73, + "NUMC": 74, + "COP": 75, + "DISLOCATED": 76, +} + +func (x DependencyEdge_Label) String() string { + return proto.EnumName(DependencyEdge_Label_name, int32(x)) +} +func (DependencyEdge_Label) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } + +// The supported types of mentions. +type EntityMention_Type int32 + +const ( + // Unknown + EntityMention_TYPE_UNKNOWN EntityMention_Type = 0 + // Proper name + EntityMention_PROPER EntityMention_Type = 1 + // Common noun (or noun compound) + EntityMention_COMMON EntityMention_Type = 2 +) + +var EntityMention_Type_name = map[int32]string{ + 0: "TYPE_UNKNOWN", + 1: "PROPER", + 2: "COMMON", +} +var EntityMention_Type_value = map[string]int32{ + "TYPE_UNKNOWN": 0, + "PROPER": 1, + "COMMON": 2, +} + +func (x EntityMention_Type) String() string { + return proto.EnumName(EntityMention_Type_name, int32(x)) +} +func (EntityMention_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +// ################################################################ # +// +// Represents the input to API methods. +type Document struct { + // Required. If the type is not set or is `TYPE_UNSPECIFIED`, + // returns an `INVALID_ARGUMENT` error. + Type Document_Type `protobuf:"varint,1,opt,name=type,enum=google.cloud.language.v1beta1.Document_Type" json:"type,omitempty"` + // The source of the document: a string containing the content or a + // Google Cloud Storage URI. + // + // Types that are valid to be assigned to Source: + // *Document_Content + // *Document_GcsContentUri + Source isDocument_Source `protobuf_oneof:"source"` + // The language of the document (if not specified, the language is + // automatically detected). Both ISO and BCP-47 language codes are + // accepted.<br> + // **Current Language Restrictions:** + // + // * Only English, Spanish, and Japanese textual content + // are supported, with the following additional restriction: + // * `analyzeSentiment` only supports English text. + // If the language (either specified by the caller or automatically detected) + // is not supported by the called API method, an `INVALID_ARGUMENT` error + // is returned. + Language string `protobuf:"bytes,4,opt,name=language" json:"language,omitempty"` +} + +func (m *Document) Reset() { *m = Document{} } +func (m *Document) String() string { return proto.CompactTextString(m) } +func (*Document) ProtoMessage() {} +func (*Document) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isDocument_Source interface { + isDocument_Source() +} + +type Document_Content struct { + Content string `protobuf:"bytes,2,opt,name=content,oneof"` +} +type Document_GcsContentUri struct { + GcsContentUri string `protobuf:"bytes,3,opt,name=gcs_content_uri,json=gcsContentUri,oneof"` +} + +func (*Document_Content) isDocument_Source() {} +func (*Document_GcsContentUri) isDocument_Source() {} + +func (m *Document) GetSource() isDocument_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *Document) GetType() Document_Type { + if m != nil { + return m.Type + } + return Document_TYPE_UNSPECIFIED +} + +func (m *Document) GetContent() string { + if x, ok := m.GetSource().(*Document_Content); ok { + return x.Content + } + return "" +} + +func (m *Document) GetGcsContentUri() string { + if x, ok := m.GetSource().(*Document_GcsContentUri); ok { + return x.GcsContentUri + } + return "" +} + +func (m *Document) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Document) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Document_OneofMarshaler, _Document_OneofUnmarshaler, _Document_OneofSizer, []interface{}{ + (*Document_Content)(nil), + (*Document_GcsContentUri)(nil), + } +} + +func _Document_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Document) + // source + switch x := m.Source.(type) { + case *Document_Content: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Content) + case *Document_GcsContentUri: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.GcsContentUri) + case nil: + default: + return fmt.Errorf("Document.Source has unexpected type %T", x) + } + return nil +} + +func _Document_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Document) + switch tag { + case 2: // source.content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Source = &Document_Content{x} + return true, err + case 3: // source.gcs_content_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Source = &Document_GcsContentUri{x} + return true, err + default: + return false, nil + } +} + +func _Document_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Document) + // source + switch x := m.Source.(type) { + case *Document_Content: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Content))) + n += len(x.Content) + case *Document_GcsContentUri: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.GcsContentUri))) + n += len(x.GcsContentUri) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents a sentence in the input document. +type Sentence struct { + // The sentence text. + Text *TextSpan `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // For calls to [AnalyzeSentiment][] or if + // [AnnotateTextRequest.Features.extract_document_sentiment][google.cloud.language.v1beta1.AnnotateTextRequest.Features.extract_document_sentiment] is set to + // true, this field will contain the sentiment for the sentence. + Sentiment *Sentiment `protobuf:"bytes,2,opt,name=sentiment" json:"sentiment,omitempty"` +} + +func (m *Sentence) Reset() { *m = Sentence{} } +func (m *Sentence) String() string { return proto.CompactTextString(m) } +func (*Sentence) ProtoMessage() {} +func (*Sentence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Sentence) GetText() *TextSpan { + if m != nil { + return m.Text + } + return nil +} + +func (m *Sentence) GetSentiment() *Sentiment { + if m != nil { + return m.Sentiment + } + return nil +} + +// Represents a phrase in the text that is a known entity, such as +// a person, an organization, or location. The API associates information, such +// as salience and mentions, with entities. +type Entity struct { + // The representative name for the entity. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The entity type. + Type Entity_Type `protobuf:"varint,2,opt,name=type,enum=google.cloud.language.v1beta1.Entity_Type" json:"type,omitempty"` + // Metadata associated with the entity. + // + // Currently, Wikipedia URLs and Knowledge Graph MIDs are provided, if + // available. The associated keys are "wikipedia_url" and "mid", respectively. + Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The salience score associated with the entity in the [0, 1.0] range. + // + // The salience score for an entity provides information about the + // importance or centrality of that entity to the entire document text. + // Scores closer to 0 are less salient, while scores closer to 1.0 are highly + // salient. + Salience float32 `protobuf:"fixed32,4,opt,name=salience" json:"salience,omitempty"` + // The mentions of this entity in the input document. The API currently + // supports proper noun mentions. + Mentions []*EntityMention `protobuf:"bytes,5,rep,name=mentions" json:"mentions,omitempty"` +} + +func (m *Entity) Reset() { *m = Entity{} } +func (m *Entity) String() string { return proto.CompactTextString(m) } +func (*Entity) ProtoMessage() {} +func (*Entity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Entity) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Entity) GetType() Entity_Type { + if m != nil { + return m.Type + } + return Entity_UNKNOWN +} + +func (m *Entity) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Entity) GetSalience() float32 { + if m != nil { + return m.Salience + } + return 0 +} + +func (m *Entity) GetMentions() []*EntityMention { + if m != nil { + return m.Mentions + } + return nil +} + +// Represents the smallest syntactic building block of the text. +type Token struct { + // The token text. + Text *TextSpan `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // Parts of speech tag for this token. + PartOfSpeech *PartOfSpeech `protobuf:"bytes,2,opt,name=part_of_speech,json=partOfSpeech" json:"part_of_speech,omitempty"` + // Dependency tree parse for this token. + DependencyEdge *DependencyEdge `protobuf:"bytes,3,opt,name=dependency_edge,json=dependencyEdge" json:"dependency_edge,omitempty"` + // [Lemma](https://en.wikipedia.org/wiki/Lemma_%28morphology%29) of the token. + Lemma string `protobuf:"bytes,4,opt,name=lemma" json:"lemma,omitempty"` +} + +func (m *Token) Reset() { *m = Token{} } +func (m *Token) String() string { return proto.CompactTextString(m) } +func (*Token) ProtoMessage() {} +func (*Token) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Token) GetText() *TextSpan { + if m != nil { + return m.Text + } + return nil +} + +func (m *Token) GetPartOfSpeech() *PartOfSpeech { + if m != nil { + return m.PartOfSpeech + } + return nil +} + +func (m *Token) GetDependencyEdge() *DependencyEdge { + if m != nil { + return m.DependencyEdge + } + return nil +} + +func (m *Token) GetLemma() string { + if m != nil { + return m.Lemma + } + return "" +} + +// Represents the feeling associated with the entire text or entities in +// the text. +type Sentiment struct { + // DEPRECATED FIELD - This field is being deprecated in + // favor of score. Please refer to our documentation at + // https://cloud.google.com/natural-language/docs for more information. + Polarity float32 `protobuf:"fixed32,1,opt,name=polarity" json:"polarity,omitempty"` + // A non-negative number in the [0, +inf) range, which represents + // the absolute magnitude of sentiment regardless of score (positive or + // negative). + Magnitude float32 `protobuf:"fixed32,2,opt,name=magnitude" json:"magnitude,omitempty"` + // Sentiment score between -1.0 (negative sentiment) and 1.0 + // (positive sentiment.) + Score float32 `protobuf:"fixed32,3,opt,name=score" json:"score,omitempty"` +} + +func (m *Sentiment) Reset() { *m = Sentiment{} } +func (m *Sentiment) String() string { return proto.CompactTextString(m) } +func (*Sentiment) ProtoMessage() {} +func (*Sentiment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *Sentiment) GetPolarity() float32 { + if m != nil { + return m.Polarity + } + return 0 +} + +func (m *Sentiment) GetMagnitude() float32 { + if m != nil { + return m.Magnitude + } + return 0 +} + +func (m *Sentiment) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +// Represents part of speech information for a token. +type PartOfSpeech struct { + // The part of speech tag. + Tag PartOfSpeech_Tag `protobuf:"varint,1,opt,name=tag,enum=google.cloud.language.v1beta1.PartOfSpeech_Tag" json:"tag,omitempty"` + // The grammatical aspect. + Aspect PartOfSpeech_Aspect `protobuf:"varint,2,opt,name=aspect,enum=google.cloud.language.v1beta1.PartOfSpeech_Aspect" json:"aspect,omitempty"` + // The grammatical case. + Case PartOfSpeech_Case `protobuf:"varint,3,opt,name=case,enum=google.cloud.language.v1beta1.PartOfSpeech_Case" json:"case,omitempty"` + // The grammatical form. + Form PartOfSpeech_Form `protobuf:"varint,4,opt,name=form,enum=google.cloud.language.v1beta1.PartOfSpeech_Form" json:"form,omitempty"` + // The grammatical gender. + Gender PartOfSpeech_Gender `protobuf:"varint,5,opt,name=gender,enum=google.cloud.language.v1beta1.PartOfSpeech_Gender" json:"gender,omitempty"` + // The grammatical mood. + Mood PartOfSpeech_Mood `protobuf:"varint,6,opt,name=mood,enum=google.cloud.language.v1beta1.PartOfSpeech_Mood" json:"mood,omitempty"` + // The grammatical number. + Number PartOfSpeech_Number `protobuf:"varint,7,opt,name=number,enum=google.cloud.language.v1beta1.PartOfSpeech_Number" json:"number,omitempty"` + // The grammatical person. + Person PartOfSpeech_Person `protobuf:"varint,8,opt,name=person,enum=google.cloud.language.v1beta1.PartOfSpeech_Person" json:"person,omitempty"` + // The grammatical properness. + Proper PartOfSpeech_Proper `protobuf:"varint,9,opt,name=proper,enum=google.cloud.language.v1beta1.PartOfSpeech_Proper" json:"proper,omitempty"` + // The grammatical reciprocity. + Reciprocity PartOfSpeech_Reciprocity `protobuf:"varint,10,opt,name=reciprocity,enum=google.cloud.language.v1beta1.PartOfSpeech_Reciprocity" json:"reciprocity,omitempty"` + // The grammatical tense. + Tense PartOfSpeech_Tense `protobuf:"varint,11,opt,name=tense,enum=google.cloud.language.v1beta1.PartOfSpeech_Tense" json:"tense,omitempty"` + // The grammatical voice. + Voice PartOfSpeech_Voice `protobuf:"varint,12,opt,name=voice,enum=google.cloud.language.v1beta1.PartOfSpeech_Voice" json:"voice,omitempty"` +} + +func (m *PartOfSpeech) Reset() { *m = PartOfSpeech{} } +func (m *PartOfSpeech) String() string { return proto.CompactTextString(m) } +func (*PartOfSpeech) ProtoMessage() {} +func (*PartOfSpeech) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *PartOfSpeech) GetTag() PartOfSpeech_Tag { + if m != nil { + return m.Tag + } + return PartOfSpeech_UNKNOWN +} + +func (m *PartOfSpeech) GetAspect() PartOfSpeech_Aspect { + if m != nil { + return m.Aspect + } + return PartOfSpeech_ASPECT_UNKNOWN +} + +func (m *PartOfSpeech) GetCase() PartOfSpeech_Case { + if m != nil { + return m.Case + } + return PartOfSpeech_CASE_UNKNOWN +} + +func (m *PartOfSpeech) GetForm() PartOfSpeech_Form { + if m != nil { + return m.Form + } + return PartOfSpeech_FORM_UNKNOWN +} + +func (m *PartOfSpeech) GetGender() PartOfSpeech_Gender { + if m != nil { + return m.Gender + } + return PartOfSpeech_GENDER_UNKNOWN +} + +func (m *PartOfSpeech) GetMood() PartOfSpeech_Mood { + if m != nil { + return m.Mood + } + return PartOfSpeech_MOOD_UNKNOWN +} + +func (m *PartOfSpeech) GetNumber() PartOfSpeech_Number { + if m != nil { + return m.Number + } + return PartOfSpeech_NUMBER_UNKNOWN +} + +func (m *PartOfSpeech) GetPerson() PartOfSpeech_Person { + if m != nil { + return m.Person + } + return PartOfSpeech_PERSON_UNKNOWN +} + +func (m *PartOfSpeech) GetProper() PartOfSpeech_Proper { + if m != nil { + return m.Proper + } + return PartOfSpeech_PROPER_UNKNOWN +} + +func (m *PartOfSpeech) GetReciprocity() PartOfSpeech_Reciprocity { + if m != nil { + return m.Reciprocity + } + return PartOfSpeech_RECIPROCITY_UNKNOWN +} + +func (m *PartOfSpeech) GetTense() PartOfSpeech_Tense { + if m != nil { + return m.Tense + } + return PartOfSpeech_TENSE_UNKNOWN +} + +func (m *PartOfSpeech) GetVoice() PartOfSpeech_Voice { + if m != nil { + return m.Voice + } + return PartOfSpeech_VOICE_UNKNOWN +} + +// Represents dependency parse tree information for a token. +type DependencyEdge struct { + // Represents the head of this token in the dependency tree. + // This is the index of the token which has an arc going to this token. + // The index is the position of the token in the array of tokens returned + // by the API method. If this token is a root token, then the + // `head_token_index` is its own index. + HeadTokenIndex int32 `protobuf:"varint,1,opt,name=head_token_index,json=headTokenIndex" json:"head_token_index,omitempty"` + // The parse label for the token. + Label DependencyEdge_Label `protobuf:"varint,2,opt,name=label,enum=google.cloud.language.v1beta1.DependencyEdge_Label" json:"label,omitempty"` +} + +func (m *DependencyEdge) Reset() { *m = DependencyEdge{} } +func (m *DependencyEdge) String() string { return proto.CompactTextString(m) } +func (*DependencyEdge) ProtoMessage() {} +func (*DependencyEdge) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *DependencyEdge) GetHeadTokenIndex() int32 { + if m != nil { + return m.HeadTokenIndex + } + return 0 +} + +func (m *DependencyEdge) GetLabel() DependencyEdge_Label { + if m != nil { + return m.Label + } + return DependencyEdge_UNKNOWN +} + +// Represents a mention for an entity in the text. Currently, proper noun +// mentions are supported. +type EntityMention struct { + // The mention text. + Text *TextSpan `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // The type of the entity mention. + Type EntityMention_Type `protobuf:"varint,2,opt,name=type,enum=google.cloud.language.v1beta1.EntityMention_Type" json:"type,omitempty"` +} + +func (m *EntityMention) Reset() { *m = EntityMention{} } +func (m *EntityMention) String() string { return proto.CompactTextString(m) } +func (*EntityMention) ProtoMessage() {} +func (*EntityMention) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *EntityMention) GetText() *TextSpan { + if m != nil { + return m.Text + } + return nil +} + +func (m *EntityMention) GetType() EntityMention_Type { + if m != nil { + return m.Type + } + return EntityMention_TYPE_UNKNOWN +} + +// Represents an output piece of text. +type TextSpan struct { + // The content of the output text. + Content string `protobuf:"bytes,1,opt,name=content" json:"content,omitempty"` + // The API calculates the beginning offset of the content in the original + // document according to the [EncodingType][google.cloud.language.v1beta1.EncodingType] specified in the API request. + BeginOffset int32 `protobuf:"varint,2,opt,name=begin_offset,json=beginOffset" json:"begin_offset,omitempty"` +} + +func (m *TextSpan) Reset() { *m = TextSpan{} } +func (m *TextSpan) String() string { return proto.CompactTextString(m) } +func (*TextSpan) ProtoMessage() {} +func (*TextSpan) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *TextSpan) GetContent() string { + if m != nil { + return m.Content + } + return "" +} + +func (m *TextSpan) GetBeginOffset() int32 { + if m != nil { + return m.BeginOffset + } + return 0 +} + +// The sentiment analysis request message. +type AnalyzeSentimentRequest struct { + // Input document. Currently, `analyzeSentiment` only supports English text + // ([Document.language][google.cloud.language.v1beta1.Document.language]="EN"). + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The encoding type used by the API to calculate sentence offsets for the + // sentence sentiment. + EncodingType EncodingType `protobuf:"varint,2,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1beta1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnalyzeSentimentRequest) Reset() { *m = AnalyzeSentimentRequest{} } +func (m *AnalyzeSentimentRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeSentimentRequest) ProtoMessage() {} +func (*AnalyzeSentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *AnalyzeSentimentRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnalyzeSentimentRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// The sentiment analysis response message. +type AnalyzeSentimentResponse struct { + // The overall sentiment of the input document. + DocumentSentiment *Sentiment `protobuf:"bytes,1,opt,name=document_sentiment,json=documentSentiment" json:"document_sentiment,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + Language string `protobuf:"bytes,2,opt,name=language" json:"language,omitempty"` + // The sentiment for all the sentences in the document. + Sentences []*Sentence `protobuf:"bytes,3,rep,name=sentences" json:"sentences,omitempty"` +} + +func (m *AnalyzeSentimentResponse) Reset() { *m = AnalyzeSentimentResponse{} } +func (m *AnalyzeSentimentResponse) String() string { return proto.CompactTextString(m) } +func (*AnalyzeSentimentResponse) ProtoMessage() {} +func (*AnalyzeSentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *AnalyzeSentimentResponse) GetDocumentSentiment() *Sentiment { + if m != nil { + return m.DocumentSentiment + } + return nil +} + +func (m *AnalyzeSentimentResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +func (m *AnalyzeSentimentResponse) GetSentences() []*Sentence { + if m != nil { + return m.Sentences + } + return nil +} + +// The entity analysis request message. +type AnalyzeEntitiesRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The encoding type used by the API to calculate offsets. + EncodingType EncodingType `protobuf:"varint,2,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1beta1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnalyzeEntitiesRequest) Reset() { *m = AnalyzeEntitiesRequest{} } +func (m *AnalyzeEntitiesRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeEntitiesRequest) ProtoMessage() {} +func (*AnalyzeEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *AnalyzeEntitiesRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnalyzeEntitiesRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// The entity analysis response message. +type AnalyzeEntitiesResponse struct { + // The recognized entities in the input document. + Entities []*Entity `protobuf:"bytes,1,rep,name=entities" json:"entities,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + // See [Document.language][google.cloud.language.v1beta1.Document.language] field for more details. + Language string `protobuf:"bytes,2,opt,name=language" json:"language,omitempty"` +} + +func (m *AnalyzeEntitiesResponse) Reset() { *m = AnalyzeEntitiesResponse{} } +func (m *AnalyzeEntitiesResponse) String() string { return proto.CompactTextString(m) } +func (*AnalyzeEntitiesResponse) ProtoMessage() {} +func (*AnalyzeEntitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *AnalyzeEntitiesResponse) GetEntities() []*Entity { + if m != nil { + return m.Entities + } + return nil +} + +func (m *AnalyzeEntitiesResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +// The syntax analysis request message. +type AnalyzeSyntaxRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The encoding type used by the API to calculate offsets. + EncodingType EncodingType `protobuf:"varint,2,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1beta1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnalyzeSyntaxRequest) Reset() { *m = AnalyzeSyntaxRequest{} } +func (m *AnalyzeSyntaxRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeSyntaxRequest) ProtoMessage() {} +func (*AnalyzeSyntaxRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *AnalyzeSyntaxRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnalyzeSyntaxRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// The syntax analysis response message. +type AnalyzeSyntaxResponse struct { + // Sentences in the input document. + Sentences []*Sentence `protobuf:"bytes,1,rep,name=sentences" json:"sentences,omitempty"` + // Tokens, along with their syntactic information, in the input document. + Tokens []*Token `protobuf:"bytes,2,rep,name=tokens" json:"tokens,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + // See [Document.language][google.cloud.language.v1beta1.Document.language] field for more details. + Language string `protobuf:"bytes,3,opt,name=language" json:"language,omitempty"` +} + +func (m *AnalyzeSyntaxResponse) Reset() { *m = AnalyzeSyntaxResponse{} } +func (m *AnalyzeSyntaxResponse) String() string { return proto.CompactTextString(m) } +func (*AnalyzeSyntaxResponse) ProtoMessage() {} +func (*AnalyzeSyntaxResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *AnalyzeSyntaxResponse) GetSentences() []*Sentence { + if m != nil { + return m.Sentences + } + return nil +} + +func (m *AnalyzeSyntaxResponse) GetTokens() []*Token { + if m != nil { + return m.Tokens + } + return nil +} + +func (m *AnalyzeSyntaxResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +// The request message for the text annotation API, which can perform multiple +// analysis types (sentiment, entities, and syntax) in one call. +type AnnotateTextRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The enabled features. + Features *AnnotateTextRequest_Features `protobuf:"bytes,2,opt,name=features" json:"features,omitempty"` + // The encoding type used by the API to calculate offsets. + EncodingType EncodingType `protobuf:"varint,3,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1beta1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnnotateTextRequest) Reset() { *m = AnnotateTextRequest{} } +func (m *AnnotateTextRequest) String() string { return proto.CompactTextString(m) } +func (*AnnotateTextRequest) ProtoMessage() {} +func (*AnnotateTextRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *AnnotateTextRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnnotateTextRequest) GetFeatures() *AnnotateTextRequest_Features { + if m != nil { + return m.Features + } + return nil +} + +func (m *AnnotateTextRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// All available features for sentiment, syntax, and semantic analysis. +// Setting each one to true will enable that specific analysis for the input. +type AnnotateTextRequest_Features struct { + // Extract syntax information. + ExtractSyntax bool `protobuf:"varint,1,opt,name=extract_syntax,json=extractSyntax" json:"extract_syntax,omitempty"` + // Extract entities. + ExtractEntities bool `protobuf:"varint,2,opt,name=extract_entities,json=extractEntities" json:"extract_entities,omitempty"` + // Extract document-level sentiment. + ExtractDocumentSentiment bool `protobuf:"varint,3,opt,name=extract_document_sentiment,json=extractDocumentSentiment" json:"extract_document_sentiment,omitempty"` +} + +func (m *AnnotateTextRequest_Features) Reset() { *m = AnnotateTextRequest_Features{} } +func (m *AnnotateTextRequest_Features) String() string { return proto.CompactTextString(m) } +func (*AnnotateTextRequest_Features) ProtoMessage() {} +func (*AnnotateTextRequest_Features) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{15, 0} +} + +func (m *AnnotateTextRequest_Features) GetExtractSyntax() bool { + if m != nil { + return m.ExtractSyntax + } + return false +} + +func (m *AnnotateTextRequest_Features) GetExtractEntities() bool { + if m != nil { + return m.ExtractEntities + } + return false +} + +func (m *AnnotateTextRequest_Features) GetExtractDocumentSentiment() bool { + if m != nil { + return m.ExtractDocumentSentiment + } + return false +} + +// The text annotations response message. +type AnnotateTextResponse struct { + // Sentences in the input document. Populated if the user enables + // [AnnotateTextRequest.Features.extract_syntax][google.cloud.language.v1beta1.AnnotateTextRequest.Features.extract_syntax]. + Sentences []*Sentence `protobuf:"bytes,1,rep,name=sentences" json:"sentences,omitempty"` + // Tokens, along with their syntactic information, in the input document. + // Populated if the user enables + // [AnnotateTextRequest.Features.extract_syntax][google.cloud.language.v1beta1.AnnotateTextRequest.Features.extract_syntax]. + Tokens []*Token `protobuf:"bytes,2,rep,name=tokens" json:"tokens,omitempty"` + // Entities, along with their semantic information, in the input document. + // Populated if the user enables + // [AnnotateTextRequest.Features.extract_entities][google.cloud.language.v1beta1.AnnotateTextRequest.Features.extract_entities]. + Entities []*Entity `protobuf:"bytes,3,rep,name=entities" json:"entities,omitempty"` + // The overall sentiment for the document. Populated if the user enables + // [AnnotateTextRequest.Features.extract_document_sentiment][google.cloud.language.v1beta1.AnnotateTextRequest.Features.extract_document_sentiment]. + DocumentSentiment *Sentiment `protobuf:"bytes,4,opt,name=document_sentiment,json=documentSentiment" json:"document_sentiment,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + // See [Document.language][google.cloud.language.v1beta1.Document.language] field for more details. + Language string `protobuf:"bytes,5,opt,name=language" json:"language,omitempty"` +} + +func (m *AnnotateTextResponse) Reset() { *m = AnnotateTextResponse{} } +func (m *AnnotateTextResponse) String() string { return proto.CompactTextString(m) } +func (*AnnotateTextResponse) ProtoMessage() {} +func (*AnnotateTextResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *AnnotateTextResponse) GetSentences() []*Sentence { + if m != nil { + return m.Sentences + } + return nil +} + +func (m *AnnotateTextResponse) GetTokens() []*Token { + if m != nil { + return m.Tokens + } + return nil +} + +func (m *AnnotateTextResponse) GetEntities() []*Entity { + if m != nil { + return m.Entities + } + return nil +} + +func (m *AnnotateTextResponse) GetDocumentSentiment() *Sentiment { + if m != nil { + return m.DocumentSentiment + } + return nil +} + +func (m *AnnotateTextResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + +func init() { + proto.RegisterType((*Document)(nil), "google.cloud.language.v1beta1.Document") + proto.RegisterType((*Sentence)(nil), "google.cloud.language.v1beta1.Sentence") + proto.RegisterType((*Entity)(nil), "google.cloud.language.v1beta1.Entity") + proto.RegisterType((*Token)(nil), "google.cloud.language.v1beta1.Token") + proto.RegisterType((*Sentiment)(nil), "google.cloud.language.v1beta1.Sentiment") + proto.RegisterType((*PartOfSpeech)(nil), "google.cloud.language.v1beta1.PartOfSpeech") + proto.RegisterType((*DependencyEdge)(nil), "google.cloud.language.v1beta1.DependencyEdge") + proto.RegisterType((*EntityMention)(nil), "google.cloud.language.v1beta1.EntityMention") + proto.RegisterType((*TextSpan)(nil), "google.cloud.language.v1beta1.TextSpan") + proto.RegisterType((*AnalyzeSentimentRequest)(nil), "google.cloud.language.v1beta1.AnalyzeSentimentRequest") + proto.RegisterType((*AnalyzeSentimentResponse)(nil), "google.cloud.language.v1beta1.AnalyzeSentimentResponse") + proto.RegisterType((*AnalyzeEntitiesRequest)(nil), "google.cloud.language.v1beta1.AnalyzeEntitiesRequest") + proto.RegisterType((*AnalyzeEntitiesResponse)(nil), "google.cloud.language.v1beta1.AnalyzeEntitiesResponse") + proto.RegisterType((*AnalyzeSyntaxRequest)(nil), "google.cloud.language.v1beta1.AnalyzeSyntaxRequest") + proto.RegisterType((*AnalyzeSyntaxResponse)(nil), "google.cloud.language.v1beta1.AnalyzeSyntaxResponse") + proto.RegisterType((*AnnotateTextRequest)(nil), "google.cloud.language.v1beta1.AnnotateTextRequest") + proto.RegisterType((*AnnotateTextRequest_Features)(nil), "google.cloud.language.v1beta1.AnnotateTextRequest.Features") + proto.RegisterType((*AnnotateTextResponse)(nil), "google.cloud.language.v1beta1.AnnotateTextResponse") + proto.RegisterEnum("google.cloud.language.v1beta1.EncodingType", EncodingType_name, EncodingType_value) + proto.RegisterEnum("google.cloud.language.v1beta1.Document_Type", Document_Type_name, Document_Type_value) + proto.RegisterEnum("google.cloud.language.v1beta1.Entity_Type", Entity_Type_name, Entity_Type_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Tag", PartOfSpeech_Tag_name, PartOfSpeech_Tag_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Aspect", PartOfSpeech_Aspect_name, PartOfSpeech_Aspect_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Case", PartOfSpeech_Case_name, PartOfSpeech_Case_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Form", PartOfSpeech_Form_name, PartOfSpeech_Form_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Gender", PartOfSpeech_Gender_name, PartOfSpeech_Gender_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Mood", PartOfSpeech_Mood_name, PartOfSpeech_Mood_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Number", PartOfSpeech_Number_name, PartOfSpeech_Number_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Person", PartOfSpeech_Person_name, PartOfSpeech_Person_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Proper", PartOfSpeech_Proper_name, PartOfSpeech_Proper_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Reciprocity", PartOfSpeech_Reciprocity_name, PartOfSpeech_Reciprocity_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Tense", PartOfSpeech_Tense_name, PartOfSpeech_Tense_value) + proto.RegisterEnum("google.cloud.language.v1beta1.PartOfSpeech_Voice", PartOfSpeech_Voice_name, PartOfSpeech_Voice_value) + proto.RegisterEnum("google.cloud.language.v1beta1.DependencyEdge_Label", DependencyEdge_Label_name, DependencyEdge_Label_value) + proto.RegisterEnum("google.cloud.language.v1beta1.EntityMention_Type", EntityMention_Type_name, EntityMention_Type_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for LanguageService service + +type LanguageServiceClient interface { + // Analyzes the sentiment of the provided text. + AnalyzeSentiment(ctx context.Context, in *AnalyzeSentimentRequest, opts ...grpc.CallOption) (*AnalyzeSentimentResponse, error) + // Finds named entities (currently finds proper names) in the text, + // entity types, salience, mentions for each entity, and other properties. + AnalyzeEntities(ctx context.Context, in *AnalyzeEntitiesRequest, opts ...grpc.CallOption) (*AnalyzeEntitiesResponse, error) + // Analyzes the syntax of the text and provides sentence boundaries and + // tokenization along with part of speech tags, dependency trees, and other + // properties. + AnalyzeSyntax(ctx context.Context, in *AnalyzeSyntaxRequest, opts ...grpc.CallOption) (*AnalyzeSyntaxResponse, error) + // A convenience method that provides all the features that analyzeSentiment, + // analyzeEntities, and analyzeSyntax provide in one call. + AnnotateText(ctx context.Context, in *AnnotateTextRequest, opts ...grpc.CallOption) (*AnnotateTextResponse, error) +} + +type languageServiceClient struct { + cc *grpc.ClientConn +} + +func NewLanguageServiceClient(cc *grpc.ClientConn) LanguageServiceClient { + return &languageServiceClient{cc} +} + +func (c *languageServiceClient) AnalyzeSentiment(ctx context.Context, in *AnalyzeSentimentRequest, opts ...grpc.CallOption) (*AnalyzeSentimentResponse, error) { + out := new(AnalyzeSentimentResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1beta1.LanguageService/AnalyzeSentiment", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *languageServiceClient) AnalyzeEntities(ctx context.Context, in *AnalyzeEntitiesRequest, opts ...grpc.CallOption) (*AnalyzeEntitiesResponse, error) { + out := new(AnalyzeEntitiesResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1beta1.LanguageService/AnalyzeEntities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *languageServiceClient) AnalyzeSyntax(ctx context.Context, in *AnalyzeSyntaxRequest, opts ...grpc.CallOption) (*AnalyzeSyntaxResponse, error) { + out := new(AnalyzeSyntaxResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1beta1.LanguageService/AnalyzeSyntax", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *languageServiceClient) AnnotateText(ctx context.Context, in *AnnotateTextRequest, opts ...grpc.CallOption) (*AnnotateTextResponse, error) { + out := new(AnnotateTextResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1beta1.LanguageService/AnnotateText", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for LanguageService service + +type LanguageServiceServer interface { + // Analyzes the sentiment of the provided text. + AnalyzeSentiment(context.Context, *AnalyzeSentimentRequest) (*AnalyzeSentimentResponse, error) + // Finds named entities (currently finds proper names) in the text, + // entity types, salience, mentions for each entity, and other properties. + AnalyzeEntities(context.Context, *AnalyzeEntitiesRequest) (*AnalyzeEntitiesResponse, error) + // Analyzes the syntax of the text and provides sentence boundaries and + // tokenization along with part of speech tags, dependency trees, and other + // properties. + AnalyzeSyntax(context.Context, *AnalyzeSyntaxRequest) (*AnalyzeSyntaxResponse, error) + // A convenience method that provides all the features that analyzeSentiment, + // analyzeEntities, and analyzeSyntax provide in one call. + AnnotateText(context.Context, *AnnotateTextRequest) (*AnnotateTextResponse, error) +} + +func RegisterLanguageServiceServer(s *grpc.Server, srv LanguageServiceServer) { + s.RegisterService(&_LanguageService_serviceDesc, srv) +} + +func _LanguageService_AnalyzeSentiment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeSentimentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnalyzeSentiment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1beta1.LanguageService/AnalyzeSentiment", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnalyzeSentiment(ctx, req.(*AnalyzeSentimentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LanguageService_AnalyzeEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnalyzeEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1beta1.LanguageService/AnalyzeEntities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnalyzeEntities(ctx, req.(*AnalyzeEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LanguageService_AnalyzeSyntax_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeSyntaxRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnalyzeSyntax(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1beta1.LanguageService/AnalyzeSyntax", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnalyzeSyntax(ctx, req.(*AnalyzeSyntaxRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LanguageService_AnnotateText_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnnotateTextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnnotateText(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1beta1.LanguageService/AnnotateText", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnnotateText(ctx, req.(*AnnotateTextRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _LanguageService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.language.v1beta1.LanguageService", + HandlerType: (*LanguageServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AnalyzeSentiment", + Handler: _LanguageService_AnalyzeSentiment_Handler, + }, + { + MethodName: "AnalyzeEntities", + Handler: _LanguageService_AnalyzeEntities_Handler, + }, + { + MethodName: "AnalyzeSyntax", + Handler: _LanguageService_AnalyzeSyntax_Handler, + }, + { + MethodName: "AnnotateText", + Handler: _LanguageService_AnnotateText_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/language/v1beta1/language_service.proto", +} + +func init() { + proto.RegisterFile("google/cloud/language/v1beta1/language_service.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 2755 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x4f, 0x73, 0xdb, 0xc6, + 0x15, 0x37, 0xf8, 0x4f, 0xe4, 0x92, 0x92, 0xd6, 0x88, 0x93, 0xb0, 0x6a, 0xd2, 0x38, 0x48, 0x5c, + 0x2b, 0x76, 0x42, 0xc5, 0x52, 0xe2, 0xb8, 0x76, 0x9a, 0x06, 0x02, 0x96, 0x14, 0x64, 0x10, 0x40, + 0x16, 0x00, 0x25, 0xa7, 0x07, 0x0e, 0x4c, 0xae, 0x19, 0x4e, 0x24, 0x80, 0x25, 0x21, 0x8f, 0xd5, + 0x4b, 0x67, 0x32, 0xd3, 0x63, 0xa7, 0x87, 0xde, 0x7a, 0x6c, 0x0f, 0x3d, 0x75, 0xd2, 0x99, 0x5e, + 0xda, 0x0f, 0xd0, 0x43, 0xa7, 0xc7, 0xcc, 0xf4, 0x13, 0xf4, 0xd8, 0x43, 0x0f, 0x3d, 0xf4, 0xd8, + 0x79, 0xbb, 0x0b, 0xfe, 0x51, 0x1c, 0x4b, 0x4c, 0x72, 0xc8, 0x6d, 0xf7, 0xf1, 0xfd, 0x7e, 0xef, + 0xed, 0xdb, 0xb7, 0xef, 0x2d, 0x96, 0xe8, 0x9d, 0x41, 0x92, 0x0c, 0x8e, 0xd8, 0x56, 0xef, 0x28, + 0x39, 0xe9, 0x6f, 0x1d, 0x45, 0xf1, 0xe0, 0x24, 0x1a, 0xb0, 0xad, 0xc7, 0xb7, 0x1e, 0xb2, 0x34, + 0xba, 0x35, 0x15, 0x74, 0x27, 0x6c, 0xfc, 0x78, 0xd8, 0x63, 0x8d, 0xd1, 0x38, 0x49, 0x13, 0xf5, + 0x65, 0x81, 0x6a, 0x70, 0x54, 0x23, 0x53, 0x6a, 0x48, 0xd4, 0xc6, 0x4b, 0x92, 0x34, 0x1a, 0x0d, + 0xb7, 0xa2, 0x38, 0x4e, 0xd2, 0x28, 0x1d, 0x26, 0xf1, 0x44, 0x80, 0xb5, 0xff, 0x28, 0xa8, 0x6c, + 0x26, 0xbd, 0x93, 0x63, 0x16, 0xa7, 0xea, 0x87, 0xa8, 0x90, 0x9e, 0x8e, 0x58, 0x5d, 0xb9, 0xaa, + 0x6c, 0xae, 0x6d, 0xbf, 0xd9, 0x78, 0x26, 0x71, 0x23, 0x83, 0x35, 0x82, 0xd3, 0x11, 0xa3, 0x1c, + 0xa9, 0x6e, 0xa0, 0x95, 0x5e, 0x12, 0xa7, 0x2c, 0x4e, 0xeb, 0xb9, 0xab, 0xca, 0x66, 0x65, 0xef, + 0x12, 0xcd, 0x04, 0xea, 0x26, 0x5a, 0x1f, 0xf4, 0x26, 0x5d, 0x39, 0xed, 0x9e, 0x8c, 0x87, 0xf5, + 0xbc, 0xd4, 0x59, 0x1d, 0xf4, 0x26, 0x86, 0x90, 0x87, 0xe3, 0xa1, 0xba, 0x81, 0xca, 0x99, 0xb5, + 0x7a, 0x01, 0x54, 0xe8, 0x74, 0xae, 0xdd, 0x46, 0x05, 0xb0, 0xa7, 0x5e, 0x41, 0x38, 0x78, 0xe0, + 0x91, 0x6e, 0xe8, 0xf8, 0x1e, 0x31, 0xac, 0xa6, 0x45, 0x4c, 0x7c, 0x49, 0x5d, 0x43, 0xc8, 0xb3, + 0x75, 0xcb, 0xe9, 0x06, 0xe4, 0x30, 0xc0, 0x8a, 0x5a, 0x46, 0x85, 0xbd, 0xa0, 0x6d, 0xe3, 0xdc, + 0x6e, 0x19, 0x95, 0x26, 0xc9, 0xc9, 0xb8, 0xc7, 0xb4, 0x5f, 0x2b, 0xa8, 0xec, 0x33, 0x30, 0xd6, + 0x63, 0xea, 0x3d, 0x54, 0x48, 0xd9, 0x93, 0x94, 0x2f, 0xb9, 0xba, 0x7d, 0xfd, 0x9c, 0x25, 0x07, + 0xec, 0x49, 0xea, 0x8f, 0xa2, 0x98, 0x72, 0x90, 0xda, 0x44, 0x95, 0x09, 0x8b, 0xd3, 0xe1, 0x71, + 0xb6, 0xde, 0xea, 0xf6, 0xe6, 0x39, 0x0c, 0x7e, 0xa6, 0x4f, 0x67, 0x50, 0xed, 0x1f, 0x79, 0x54, + 0x22, 0x71, 0x3a, 0x4c, 0x4f, 0x55, 0x15, 0x15, 0xe2, 0xe8, 0x58, 0x6c, 0x41, 0x85, 0xf2, 0xb1, + 0xfa, 0x81, 0xdc, 0x96, 0x1c, 0xdf, 0x96, 0x1b, 0xe7, 0x58, 0x10, 0x44, 0xf3, 0x9b, 0xe2, 0xa2, + 0xf2, 0x31, 0x4b, 0xa3, 0x7e, 0x94, 0x46, 0xf5, 0xfc, 0xd5, 0xfc, 0x66, 0x75, 0x7b, 0xe7, 0x62, + 0x1c, 0x6d, 0x89, 0x22, 0x71, 0x3a, 0x3e, 0xa5, 0x53, 0x12, 0xd8, 0x9f, 0x49, 0x74, 0x34, 0x84, + 0x00, 0xf2, 0xfd, 0xc9, 0xd1, 0xe9, 0x5c, 0xdd, 0x03, 0x63, 0x31, 0x4f, 0xb1, 0x7a, 0x91, 0x1b, + 0x7b, 0xf3, 0x42, 0xc6, 0xda, 0x02, 0x44, 0xa7, 0xe8, 0x8d, 0x7b, 0x68, 0x75, 0xc1, 0x01, 0x15, + 0xa3, 0xfc, 0xa7, 0xec, 0x54, 0x86, 0x06, 0x86, 0xea, 0x15, 0x54, 0x7c, 0x1c, 0x1d, 0x9d, 0x88, + 0xd0, 0x54, 0xa8, 0x98, 0xdc, 0xcd, 0xdd, 0x51, 0xb4, 0x53, 0x99, 0x26, 0x55, 0xb4, 0x12, 0x3a, + 0xf7, 0x1d, 0xf7, 0xc0, 0xc1, 0x97, 0x54, 0x84, 0x4a, 0x1e, 0xa1, 0xbe, 0xeb, 0x60, 0x45, 0xad, + 0xa1, 0xb2, 0xed, 0x1a, 0x7a, 0x60, 0xb9, 0x0e, 0xce, 0xa9, 0x18, 0xd5, 0x5c, 0xda, 0xd2, 0x1d, + 0xeb, 0x63, 0x21, 0xc9, 0xab, 0x15, 0x54, 0x24, 0x1d, 0xe2, 0x04, 0xb8, 0xa0, 0xae, 0xa3, 0xea, + 0x81, 0x4b, 0xef, 0x77, 0xdd, 0x66, 0x57, 0xa7, 0x01, 0x2e, 0xaa, 0x97, 0xd1, 0xaa, 0xe1, 0x3a, + 0x7e, 0xd8, 0x26, 0xb4, 0xdb, 0x72, 0x5d, 0x13, 0x97, 0x40, 0xdd, 0x0d, 0xf6, 0x08, 0xc5, 0x2b, + 0xda, 0x2f, 0x73, 0xa8, 0x18, 0x24, 0x9f, 0xb2, 0xf8, 0x9b, 0x25, 0xd7, 0x47, 0x68, 0x6d, 0x14, + 0x8d, 0xd3, 0x6e, 0xf2, 0xa8, 0x3b, 0x19, 0x31, 0xd6, 0xfb, 0x44, 0x66, 0xd8, 0xcd, 0x73, 0x68, + 0xbc, 0x68, 0x9c, 0xba, 0x8f, 0x7c, 0x0e, 0xa1, 0xb5, 0xd1, 0xdc, 0x4c, 0xed, 0xa0, 0xf5, 0x3e, + 0x1b, 0xb1, 0xb8, 0xcf, 0xe2, 0xde, 0x69, 0x97, 0xf5, 0x07, 0x8c, 0x9f, 0xc0, 0xea, 0xf6, 0x5b, + 0xe7, 0x1d, 0xf5, 0x29, 0x8a, 0xf4, 0x07, 0x8c, 0xae, 0xf5, 0x17, 0xe6, 0xb0, 0x0d, 0x47, 0xec, + 0xf8, 0x38, 0x92, 0x87, 0x55, 0x4c, 0xb4, 0x9f, 0xa2, 0xca, 0x34, 0xdb, 0x21, 0x65, 0x46, 0xc9, + 0x51, 0x34, 0x1e, 0xa6, 0x62, 0x03, 0x73, 0x74, 0x3a, 0x57, 0x5f, 0x42, 0x95, 0xe3, 0x68, 0x10, + 0x0f, 0xd3, 0x93, 0xbe, 0xd8, 0xc9, 0x1c, 0x9d, 0x09, 0x80, 0x7c, 0xd2, 0x4b, 0xc6, 0xc2, 0xd5, + 0x1c, 0x15, 0x13, 0xed, 0xaf, 0x97, 0x51, 0x6d, 0x7e, 0xa5, 0xaa, 0x8e, 0xf2, 0x69, 0x34, 0x90, + 0xa5, 0x6b, 0x6b, 0x89, 0x18, 0x35, 0x82, 0x68, 0x40, 0x01, 0xab, 0xee, 0xa3, 0x52, 0x34, 0x19, + 0xb1, 0x5e, 0x2a, 0x4f, 0xda, 0xf6, 0x32, 0x2c, 0x3a, 0x47, 0x52, 0xc9, 0xa0, 0x9a, 0xa8, 0xd0, + 0x8b, 0x26, 0xc2, 0xe9, 0xb5, 0xed, 0xb7, 0x97, 0x61, 0x32, 0xa2, 0x09, 0xa3, 0x1c, 0x0d, 0x2c, + 0x8f, 0x92, 0xf1, 0x31, 0x8f, 0xeb, 0x92, 0x2c, 0xcd, 0x64, 0x7c, 0x4c, 0x39, 0x1a, 0xd6, 0x35, + 0x80, 0xed, 0x1a, 0xd7, 0x8b, 0xcb, 0xaf, 0xab, 0xc5, 0x91, 0x54, 0x32, 0x80, 0x47, 0xc7, 0x49, + 0xd2, 0xaf, 0x97, 0x96, 0xf7, 0xa8, 0x9d, 0x24, 0x7d, 0xca, 0xd1, 0xe0, 0x51, 0x7c, 0x72, 0xfc, + 0x90, 0x8d, 0xeb, 0x2b, 0xcb, 0x7b, 0xe4, 0x70, 0x24, 0x95, 0x0c, 0xc0, 0x35, 0x62, 0xe3, 0x49, + 0x12, 0xd7, 0xcb, 0xcb, 0x73, 0x79, 0x1c, 0x49, 0x25, 0x03, 0xe7, 0x1a, 0x27, 0x23, 0x36, 0xae, + 0x57, 0xbe, 0x06, 0x17, 0x47, 0x52, 0xc9, 0xa0, 0x3e, 0x40, 0xd5, 0x31, 0xeb, 0x0d, 0x47, 0xe3, + 0xa4, 0x07, 0x49, 0x8f, 0x38, 0xe1, 0x7b, 0xcb, 0x10, 0xd2, 0x19, 0x9c, 0xce, 0x73, 0xa9, 0x2d, + 0x54, 0x4c, 0x59, 0x3c, 0x61, 0xf5, 0x2a, 0x27, 0xbd, 0xb5, 0x54, 0xb6, 0x03, 0x90, 0x0a, 0x3c, + 0x10, 0x3d, 0x4e, 0x86, 0x3d, 0x56, 0xaf, 0x2d, 0x4f, 0xd4, 0x01, 0x20, 0x15, 0x78, 0xed, 0x57, + 0x0a, 0xca, 0x07, 0xd1, 0x60, 0xb1, 0xdc, 0xae, 0xa0, 0xbc, 0x6e, 0xee, 0x63, 0x45, 0x0c, 0x3c, + 0x9c, 0x13, 0x83, 0x0e, 0xce, 0x43, 0x5f, 0x36, 0x5c, 0x67, 0x1f, 0x17, 0x40, 0x64, 0x12, 0x28, + 0xaa, 0x65, 0x54, 0x70, 0xdc, 0xd0, 0xc1, 0x25, 0x10, 0x39, 0x61, 0x1b, 0xaf, 0x80, 0xc8, 0xa3, + 0xae, 0x83, 0xcb, 0x20, 0xf2, 0x68, 0x80, 0x2b, 0x50, 0x67, 0xbd, 0xd0, 0x31, 0x02, 0x8c, 0xe0, + 0xd7, 0x0e, 0xa1, 0xbb, 0xb8, 0xaa, 0x16, 0x91, 0x72, 0x88, 0x6b, 0xf0, 0x9b, 0xde, 0x6c, 0x5a, + 0x87, 0x78, 0x55, 0x73, 0x51, 0x49, 0x1c, 0x48, 0x55, 0x45, 0x6b, 0x3a, 0xdc, 0x10, 0x82, 0xee, + 0xcc, 0x31, 0xb8, 0x25, 0x10, 0xda, 0x24, 0x46, 0x60, 0x75, 0x08, 0x56, 0xa0, 0xfa, 0x5b, 0xed, + 0x39, 0x49, 0x0e, 0x4a, 0xbe, 0x47, 0xdd, 0x16, 0x25, 0xbe, 0x0f, 0x82, 0xbc, 0xf6, 0x3f, 0x05, + 0x15, 0xe0, 0x60, 0x82, 0xae, 0xa1, 0xfb, 0x64, 0x91, 0x4d, 0x37, 0x8c, 0xd0, 0xd7, 0x25, 0xdb, + 0x2a, 0xaa, 0xe8, 0x26, 0x78, 0x66, 0xe9, 0x36, 0xce, 0x89, 0x66, 0xd1, 0xf6, 0x6c, 0xd2, 0x26, + 0x0e, 0xd7, 0xc8, 0x43, 0x1f, 0x32, 0x85, 0x76, 0x01, 0xfa, 0x50, 0x8b, 0x38, 0x16, 0x9f, 0x15, + 0xb9, 0x27, 0x8e, 0x1f, 0xd0, 0x10, 0x94, 0x75, 0x1b, 0x97, 0x66, 0x7d, 0xaa, 0x43, 0xf0, 0x0a, + 0xd8, 0x72, 0xdc, 0xb6, 0xe5, 0x88, 0x79, 0x19, 0xe2, 0xed, 0xee, 0xda, 0xd6, 0x47, 0x21, 0xc1, + 0x15, 0x30, 0xec, 0xe9, 0x34, 0x10, 0x5c, 0x08, 0x0c, 0x7b, 0x94, 0x78, 0xae, 0x6f, 0x41, 0x4b, + 0xd3, 0x6d, 0x5c, 0x85, 0x60, 0x50, 0xd2, 0xb4, 0xc9, 0xa1, 0xd5, 0x21, 0x5d, 0x58, 0x06, 0xae, + 0x81, 0x1a, 0x25, 0x36, 0x27, 0x14, 0xa2, 0x55, 0xb0, 0xd9, 0xc9, 0x6c, 0xae, 0x69, 0x9f, 0x2b, + 0xa8, 0x00, 0xd5, 0x04, 0x9c, 0x6b, 0xba, 0xb4, 0x3d, 0xb7, 0xf4, 0x1a, 0x2a, 0xeb, 0x26, 0x38, + 0xa4, 0xdb, 0x72, 0xe1, 0xe1, 0xa1, 0x65, 0x5b, 0x3a, 0x7d, 0x80, 0x73, 0x60, 0x6c, 0x6e, 0xe1, + 0x1f, 0x13, 0x8a, 0xf3, 0x9c, 0xc2, 0x72, 0x74, 0xbb, 0x4b, 0x1c, 0xd3, 0x72, 0x5a, 0xb8, 0x00, + 0xb1, 0x68, 0x11, 0x1a, 0x3a, 0x26, 0x2e, 0xc2, 0x98, 0x12, 0xdd, 0xb6, 0x7c, 0xb1, 0x6e, 0x8b, + 0xca, 0xd9, 0x0a, 0x6c, 0xad, 0xbf, 0xe7, 0xd2, 0x00, 0x97, 0x61, 0xdb, 0x6d, 0xd7, 0x69, 0x89, + 0x5c, 0x70, 0xa9, 0x49, 0x28, 0x46, 0xa0, 0x2d, 0xaf, 0x81, 0x06, 0xae, 0x6a, 0x04, 0x95, 0x44, + 0xd9, 0x02, 0x1f, 0x5a, 0xc4, 0x31, 0x09, 0x5d, 0x74, 0xba, 0x49, 0xda, 0x96, 0x63, 0x39, 0x72, + 0xb7, 0xda, 0xba, 0x6f, 0x84, 0x36, 0x4c, 0x73, 0xe0, 0x82, 0x43, 0xc2, 0x00, 0x9c, 0xd5, 0x7e, + 0x81, 0x0a, 0x50, 0xb3, 0xc0, 0xe9, 0xb6, 0xeb, 0x9a, 0x73, 0x14, 0x57, 0x10, 0x36, 0x5c, 0xc7, + 0x94, 0x81, 0xed, 0xc2, 0xaf, 0x58, 0x81, 0xcd, 0xe1, 0x69, 0xa4, 0xcb, 0x24, 0x82, 0xb9, 0x63, + 0x5a, 0x32, 0x90, 0x79, 0x88, 0xb4, 0xe5, 0x04, 0x84, 0x52, 0xb7, 0x95, 0xed, 0x7e, 0x15, 0xad, + 0xec, 0x87, 0x22, 0xc7, 0x8a, 0x90, 0x74, 0x7e, 0xb8, 0xbb, 0x0f, 0xe9, 0x0d, 0x82, 0x92, 0xf6, + 0x21, 0x2a, 0x89, 0x62, 0x07, 0xeb, 0x70, 0xc2, 0xf6, 0xee, 0xd9, 0x75, 0xf8, 0x96, 0xd3, 0x0a, + 0x6d, 0x9d, 0x62, 0x85, 0xdf, 0x6d, 0xec, 0x90, 0xf2, 0x94, 0x2b, 0xa3, 0x82, 0x19, 0xea, 0x36, + 0xce, 0x6b, 0x01, 0x2a, 0x89, 0x12, 0x07, 0x0c, 0xe2, 0xee, 0x33, 0xc7, 0x50, 0x41, 0xc5, 0xa6, + 0x45, 0xfd, 0x40, 0xc0, 0x7d, 0x02, 0x6b, 0xc2, 0x39, 0x10, 0x07, 0x7b, 0x16, 0x35, 0x71, 0x1e, + 0x16, 0x3a, 0x4b, 0x18, 0x79, 0x77, 0x2a, 0x68, 0x77, 0x50, 0x49, 0x14, 0x3b, 0xce, 0x4a, 0x5d, + 0x6f, 0xc1, 0x2f, 0xf0, 0x84, 0xcb, 0x44, 0x48, 0x1c, 0x37, 0xe8, 0xca, 0x79, 0x4e, 0xdb, 0x47, + 0xd5, 0xb9, 0xaa, 0xa6, 0xbe, 0x88, 0x9e, 0xa3, 0xc4, 0xb0, 0x3c, 0xea, 0x1a, 0x56, 0xf0, 0x60, + 0xf1, 0x4c, 0x65, 0x3f, 0xf0, 0xd4, 0x82, 0xf5, 0xbb, 0x4e, 0x77, 0x4e, 0x96, 0xd3, 0x26, 0xa8, + 0xc8, 0x8b, 0x19, 0xc4, 0x35, 0x20, 0xce, 0xc2, 0x99, 0x7c, 0x1e, 0x5d, 0x9e, 0xdf, 0x20, 0xfe, + 0xb3, 0x58, 0x65, 0x33, 0x0c, 0x42, 0x4a, 0x44, 0x90, 0x3c, 0xdd, 0x0f, 0x70, 0x1e, 0x36, 0xc1, + 0xa3, 0xc4, 0x17, 0x97, 0xbd, 0x55, 0x54, 0x99, 0xd6, 0x02, 0x5c, 0x14, 0x1f, 0x14, 0x61, 0x36, + 0x2f, 0x69, 0xbb, 0xa8, 0xc8, 0x0b, 0x1f, 0x18, 0xed, 0xb8, 0x96, 0x41, 0x16, 0x17, 0xae, 0x1b, + 0xb3, 0x22, 0x60, 0xe8, 0x59, 0x4d, 0xc8, 0x71, 0x13, 0x7a, 0x56, 0x4b, 0xfe, 0xbb, 0x82, 0xd6, + 0x16, 0x6f, 0x54, 0xea, 0x26, 0xc2, 0x9f, 0xb0, 0xa8, 0xdf, 0x4d, 0xe1, 0xde, 0xd8, 0x1d, 0xc6, + 0x7d, 0xf6, 0x84, 0x5f, 0x65, 0x8a, 0x74, 0x0d, 0xe4, 0xfc, 0x3a, 0x69, 0x81, 0x54, 0xb5, 0x50, + 0xf1, 0x28, 0x7a, 0xc8, 0x8e, 0xe4, 0x1d, 0x65, 0x67, 0xa9, 0x9b, 0x5b, 0xc3, 0x06, 0x28, 0x15, + 0x0c, 0xda, 0xbf, 0x4b, 0xa8, 0xc8, 0x05, 0x5f, 0xba, 0x25, 0xeb, 0xbb, 0xbb, 0x94, 0x74, 0xb0, + 0xc2, 0x4b, 0x2a, 0x1c, 0x62, 0x91, 0x15, 0xba, 0xd9, 0x31, 0x6c, 0x51, 0xbf, 0x74, 0xb3, 0xd3, + 0x76, 0x4d, 0x5c, 0x80, 0x30, 0xea, 0x30, 0x2a, 0x72, 0x05, 0xcf, 0x73, 0xe1, 0xf0, 0x82, 0x30, + 0x08, 0x28, 0x5e, 0xe1, 0x15, 0x3f, 0x3c, 0x14, 0x95, 0x4a, 0x0f, 0x0f, 0x21, 0x08, 0xb8, 0xa2, + 0x96, 0x50, 0xce, 0x30, 0x30, 0x02, 0x88, 0xc1, 0xe9, 0xab, 0xd3, 0x8e, 0xc0, 0xcb, 0xb8, 0x01, + 0xe7, 0x00, 0xaf, 0xf2, 0x28, 0xc2, 0x90, 0xc3, 0xd6, 0x44, 0xaf, 0xf0, 0xf0, 0x7a, 0xd6, 0x34, + 0x30, 0x28, 0x98, 0x96, 0x6f, 0xb8, 0x21, 0xf5, 0x09, 0xbe, 0xcc, 0x13, 0xdf, 0xdd, 0xdd, 0xc7, + 0x2a, 0x8c, 0xc8, 0xa1, 0x67, 0xe3, 0xe7, 0x78, 0x81, 0x75, 0x89, 0x7f, 0x60, 0x05, 0x7b, 0xf8, + 0x0a, 0xc8, 0x2d, 0xd0, 0x78, 0x1e, 0x46, 0x6d, 0x9d, 0xde, 0xc7, 0x2f, 0x00, 0x5b, 0xfb, 0x80, + 0xe0, 0x17, 0xc5, 0xa0, 0x83, 0xeb, 0xbc, 0x03, 0x91, 0x16, 0xfe, 0x1e, 0x38, 0xea, 0x38, 0x78, + 0x03, 0x48, 0x1c, 0x4f, 0xae, 0xf9, 0xfb, 0xe0, 0xa1, 0xc3, 0x3d, 0x7c, 0x09, 0x1c, 0x70, 0xa6, + 0x1e, 0xbe, 0x9c, 0xb5, 0xae, 0x1f, 0xf0, 0x3a, 0xc2, 0x0f, 0x2c, 0x7e, 0x05, 0xda, 0x93, 0x87, + 0xaf, 0xca, 0xf2, 0xac, 0x07, 0xfa, 0xa1, 0xe5, 0xe3, 0x57, 0x45, 0x4a, 0xd0, 0x00, 0x18, 0x35, + 0xde, 0xd6, 0x78, 0x20, 0x5e, 0xe3, 0x79, 0x09, 0x1e, 0xbe, 0x2e, 0x46, 0xbe, 0x8f, 0xaf, 0x71, + 0x5d, 0xd7, 0x0f, 0xc0, 0xa7, 0x1f, 0xca, 0x74, 0xe5, 0xda, 0xd7, 0xa7, 0x13, 0x67, 0x1f, 0x6f, + 0x8a, 0x93, 0x47, 0x20, 0x32, 0x6f, 0x88, 0xde, 0x49, 0x9a, 0xf8, 0x86, 0x1c, 0x79, 0xf8, 0x26, + 0xb7, 0x42, 0x5d, 0xc7, 0xc6, 0x6f, 0x66, 0x0d, 0xf5, 0x2d, 0x58, 0xa1, 0xe7, 0xe3, 0x06, 0xac, + 0xf0, 0xa3, 0x50, 0x77, 0xb8, 0x3f, 0x5b, 0xa0, 0x49, 0x0d, 0x18, 0xbe, 0x0d, 0x3f, 0xf0, 0x21, + 0x25, 0x36, 0xbe, 0xc5, 0x7f, 0x30, 0xa9, 0xeb, 0xe1, 0x6d, 0xa0, 0x00, 0x03, 0x3b, 0xe0, 0x03, + 0x25, 0x6d, 0x47, 0x77, 0x02, 0xfc, 0x8e, 0x38, 0xb9, 0xb0, 0x4e, 0xc7, 0x0c, 0xdb, 0xf8, 0x5d, + 0xb0, 0x4e, 0x5d, 0x37, 0xc0, 0xb7, 0x61, 0xe4, 0x43, 0x70, 0xde, 0xe3, 0xa3, 0xb0, 0xd9, 0xc4, + 0x77, 0x60, 0xc4, 0x2d, 0xfe, 0x88, 0x17, 0x1d, 0xd7, 0xb3, 0x0c, 0x7c, 0x97, 0x37, 0x76, 0x10, + 0xde, 0x5b, 0x68, 0x44, 0xef, 0x83, 0xca, 0x21, 0x5f, 0xf6, 0x8f, 0x79, 0xb9, 0x0a, 0x79, 0xaf, + 0xff, 0x80, 0x23, 0xad, 0xc0, 0x26, 0xf8, 0x27, 0xa2, 0x1f, 0x75, 0xbc, 0x3d, 0x40, 0x7f, 0x28, + 0x53, 0x0e, 0x8e, 0x21, 0xd6, 0x79, 0x76, 0x86, 0x87, 0x9d, 0x0e, 0xde, 0x85, 0xa1, 0xc9, 0xad, + 0x1a, 0xa0, 0xd2, 0x74, 0x29, 0xb1, 0x5a, 0x0e, 0x36, 0x21, 0x14, 0xf7, 0x0f, 0x30, 0xe1, 0x1d, + 0xc6, 0xf2, 0x03, 0xdc, 0x14, 0x77, 0x92, 0xb6, 0x81, 0x5b, 0x3c, 0x01, 0xdc, 0xb6, 0xc8, 0xcb, + 0x3d, 0xe8, 0x08, 0xd9, 0x8c, 0x6f, 0xbc, 0xc5, 0x35, 0xc3, 0xb6, 0x81, 0xf7, 0x21, 0x2c, 0x86, + 0xeb, 0xe1, 0xfb, 0x10, 0x09, 0xd3, 0xf2, 0x79, 0xf3, 0x26, 0x26, 0xb6, 0xb5, 0xbf, 0x29, 0x68, + 0x75, 0xe1, 0x5b, 0xf7, 0x9b, 0x7d, 0x1f, 0x92, 0x85, 0x57, 0x81, 0x5b, 0xcb, 0x7c, 0x64, 0xcf, + 0x3d, 0x0e, 0x68, 0x6f, 0xcb, 0x0f, 0x65, 0x8c, 0x6a, 0xf2, 0x3d, 0xe5, 0x69, 0x75, 0x1c, 0xa1, + 0x92, 0xe1, 0xb6, 0xdb, 0xf0, 0xad, 0xac, 0xb5, 0x50, 0x39, 0x73, 0x45, 0xad, 0xcf, 0xde, 0x7b, + 0xc4, 0x67, 0xf9, 0xf4, 0xb5, 0xe7, 0x55, 0x54, 0x7b, 0xc8, 0x06, 0xc3, 0xb8, 0x9b, 0x3c, 0x7a, + 0x34, 0x61, 0xe2, 0x93, 0xaa, 0x48, 0xab, 0x5c, 0xe6, 0x72, 0x91, 0xf6, 0x27, 0x05, 0xbd, 0xa8, + 0xc7, 0xd1, 0xd1, 0xe9, 0xcf, 0xd9, 0xec, 0x59, 0x84, 0xfd, 0xec, 0x84, 0x4d, 0x52, 0xd5, 0x40, + 0xe5, 0xbe, 0x7c, 0x5f, 0xba, 0x60, 0x78, 0xb2, 0xe7, 0x28, 0x3a, 0x05, 0xaa, 0x1e, 0x5a, 0x65, + 0x71, 0x2f, 0xe9, 0x0f, 0xe3, 0x41, 0x77, 0x2e, 0x56, 0x37, 0xcf, 0x8d, 0x95, 0xc0, 0xf0, 0x28, + 0xd5, 0xd8, 0xdc, 0x4c, 0xfb, 0xa7, 0x82, 0xea, 0x5f, 0x76, 0x79, 0x32, 0x4a, 0xa0, 0x0f, 0x1d, + 0x20, 0x35, 0x33, 0xdd, 0x9d, 0xbd, 0x0b, 0x29, 0x4b, 0xbe, 0x0b, 0x5d, 0xce, 0x38, 0x16, 0x3e, + 0x9e, 0xa7, 0xef, 0x61, 0xb9, 0xc5, 0xf7, 0x30, 0x95, 0x88, 0x37, 0x28, 0x16, 0xf7, 0xd8, 0x44, + 0xbe, 0xee, 0x5c, 0xbf, 0x80, 0x2d, 0xd0, 0xa7, 0x33, 0x24, 0x5c, 0xf2, 0x5e, 0x90, 0x0b, 0xe3, + 0xa9, 0x32, 0x64, 0x93, 0xef, 0xf8, 0x56, 0x3c, 0x99, 0x26, 0xcf, 0xcc, 0x61, 0xb9, 0x11, 0x3a, + 0x2a, 0x33, 0x29, 0xab, 0x2b, 0x3c, 0x24, 0xd7, 0x2e, 0x74, 0x3c, 0xe8, 0x14, 0xf6, 0xac, 0x90, + 0x6b, 0x7f, 0x54, 0xd0, 0x95, 0x2c, 0x09, 0x4e, 0xe3, 0x34, 0x7a, 0xf2, 0x1d, 0x8f, 0xd4, 0x5f, + 0x14, 0xf4, 0xfc, 0x19, 0x7f, 0x65, 0xa0, 0x16, 0x92, 0x47, 0xf9, 0xba, 0xc9, 0xa3, 0xbe, 0x8f, + 0x4a, 0xfc, 0xe2, 0x32, 0xa9, 0xe7, 0x38, 0xc7, 0xeb, 0xe7, 0x55, 0x32, 0x50, 0xa6, 0x12, 0xb3, + 0x10, 0xea, 0xfc, 0x99, 0x50, 0xff, 0x2e, 0x8f, 0x9e, 0xd3, 0xc5, 0xa3, 0x35, 0x83, 0xa2, 0xf3, + 0xad, 0x46, 0xfa, 0x00, 0x95, 0x1f, 0xb1, 0x28, 0x3d, 0x19, 0xb3, 0x89, 0x7c, 0x5b, 0xbb, 0x77, + 0x0e, 0xc9, 0x53, 0x5c, 0x69, 0x34, 0x25, 0x05, 0x9d, 0x92, 0x7d, 0x79, 0x0b, 0xf3, 0xdf, 0x70, + 0x0b, 0x37, 0x7e, 0xab, 0xa0, 0x72, 0x66, 0x48, 0xbd, 0x86, 0xd6, 0xd8, 0x93, 0x74, 0x1c, 0xf5, + 0xd2, 0xee, 0x84, 0xef, 0x27, 0x0f, 0x41, 0x99, 0xae, 0x4a, 0xa9, 0xd8, 0x64, 0xf5, 0x0d, 0x84, + 0x33, 0xb5, 0xe9, 0x69, 0xc8, 0x71, 0xc5, 0x75, 0x29, 0xcf, 0x0e, 0x8e, 0xfa, 0x3e, 0xda, 0xc8, + 0x54, 0x9f, 0x52, 0xc1, 0xf2, 0x1c, 0x54, 0x97, 0x1a, 0xe6, 0xd9, 0xf2, 0xa4, 0x7d, 0x91, 0x83, + 0xf3, 0x30, 0x1f, 0x99, 0xef, 0x52, 0x7a, 0xcd, 0x17, 0x83, 0xfc, 0xd7, 0x2b, 0x06, 0x4f, 0x2f, + 0xec, 0x85, 0x6f, 0xb7, 0xb0, 0x17, 0x17, 0x53, 0xff, 0xc6, 0x1d, 0x54, 0x9b, 0x4f, 0x08, 0x71, + 0x17, 0x71, 0x08, 0xbe, 0x04, 0xa3, 0x30, 0x68, 0xde, 0x11, 0xd7, 0xf3, 0x30, 0x68, 0xde, 0xba, + 0x2d, 0xae, 0xe7, 0x61, 0xd0, 0xdc, 0xd9, 0xc6, 0xf9, 0xed, 0xbf, 0x17, 0xd1, 0xba, 0x2d, 0x69, + 0x7c, 0xf1, 0x57, 0x91, 0xfa, 0x67, 0x05, 0xe1, 0xb3, 0x8d, 0x4b, 0xbd, 0x7d, 0x6e, 0xba, 0x3f, + 0xb5, 0x39, 0x6f, 0xbc, 0xb7, 0x34, 0x4e, 0x24, 0x84, 0xd6, 0xf8, 0xec, 0x8b, 0x7f, 0xfd, 0x26, + 0xb7, 0xa9, 0xbd, 0x36, 0xfd, 0x4f, 0x2b, 0x8b, 0xc9, 0xe4, 0x6e, 0x74, 0x06, 0x74, 0x57, 0xb9, + 0xa1, 0x7e, 0xae, 0xa0, 0xf5, 0x33, 0x45, 0x5e, 0x7d, 0xf7, 0x62, 0xc6, 0xcf, 0x74, 0xb1, 0x8d, + 0xdb, 0xcb, 0xc2, 0xa4, 0xcb, 0x6f, 0x71, 0x97, 0xaf, 0x6b, 0xda, 0x57, 0xbb, 0x9c, 0x61, 0xc0, + 0xe3, 0x3f, 0x28, 0x68, 0x75, 0xa1, 0xd6, 0xaa, 0x3b, 0x17, 0x0c, 0xd6, 0x7c, 0x27, 0xd9, 0x78, + 0x67, 0x39, 0x90, 0xf4, 0xf5, 0x26, 0xf7, 0xf5, 0x9a, 0x76, 0xf5, 0x19, 0xe1, 0xe5, 0x08, 0xf0, + 0xf4, 0xf7, 0x0a, 0xaa, 0xcd, 0x9f, 0x5a, 0x75, 0x7b, 0xf9, 0xe2, 0xb7, 0xb1, 0xb3, 0x14, 0x46, + 0xba, 0x79, 0x83, 0xbb, 0xf9, 0xba, 0xf6, 0xca, 0x53, 0xdd, 0x9c, 0x01, 0xee, 0x2a, 0x37, 0x76, + 0x3f, 0x53, 0xd0, 0xab, 0xbd, 0xe4, 0xf8, 0xd9, 0x66, 0x76, 0xaf, 0x9c, 0x49, 0x77, 0x6f, 0x9c, + 0xa4, 0x89, 0xa7, 0x7c, 0x4c, 0x24, 0x6c, 0x90, 0x00, 0xa4, 0x91, 0x8c, 0x07, 0x5b, 0x03, 0x16, + 0xf3, 0x7f, 0x3e, 0xb7, 0xc4, 0x4f, 0xd1, 0x68, 0x38, 0xf9, 0x8a, 0xff, 0x5b, 0xef, 0x65, 0x82, + 0x87, 0x25, 0x8e, 0xd8, 0xf9, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe6, 0xf6, 0xe5, 0xb1, 0xa0, + 0x1d, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/job_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/job_service.pb.go new file mode 100644 index 0000000..f88feba --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/job_service.pb.go @@ -0,0 +1,1823 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1/job_service.proto +// DO NOT EDIT! + +/* +Package ml is a generated protocol buffer package. + +It is generated from these files: + google/cloud/ml/v1/job_service.proto + google/cloud/ml/v1/model_service.proto + google/cloud/ml/v1/operation_metadata.proto + google/cloud/ml/v1/prediction_service.proto + google/cloud/ml/v1/project_service.proto + +It has these top-level messages: + TrainingInput + HyperparameterSpec + ParameterSpec + HyperparameterOutput + TrainingOutput + PredictionInput + PredictionOutput + Job + CreateJobRequest + ListJobsRequest + ListJobsResponse + GetJobRequest + CancelJobRequest + Model + Version + ManualScaling + CreateModelRequest + ListModelsRequest + ListModelsResponse + GetModelRequest + DeleteModelRequest + CreateVersionRequest + ListVersionsRequest + ListVersionsResponse + GetVersionRequest + DeleteVersionRequest + SetDefaultVersionRequest + OperationMetadata + PredictRequest + GetConfigRequest + GetConfigResponse +*/ +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A scale tier is an abstract representation of the resources Cloud ML +// will allocate to a training job. When selecting a scale tier for your +// training job, you should consider the size of your training dataset and +// the complexity of your model. As the tiers increase, virtual machines are +// added to handle your job, and the individual machines in the cluster +// generally have more memory and greater processing power than they do at +// lower tiers. The number of training units charged per hour of processing +// increases as tiers get more advanced. Refer to the +// [pricing guide](/ml/pricing) for more details. Note that in addition to +// incurring costs, your use of training resources is constrained by the +// [quota policy](/ml/quota). +type TrainingInput_ScaleTier int32 + +const ( + // A single worker instance. This tier is suitable for learning how to use + // Cloud ML, and for experimenting with new models using small datasets. + TrainingInput_BASIC TrainingInput_ScaleTier = 0 + // Many workers and a few parameter servers. + TrainingInput_STANDARD_1 TrainingInput_ScaleTier = 1 + // A large number of workers with many parameter servers. + TrainingInput_PREMIUM_1 TrainingInput_ScaleTier = 3 + // A single worker instance [with a GPU](ml/docs/how-tos/using-gpus). + TrainingInput_BASIC_GPU TrainingInput_ScaleTier = 6 + // The CUSTOM tier is not a set tier, but rather enables you to use your + // own cluster specification. When you use this tier, set values to + // configure your processing cluster according to these guidelines: + // + // * You _must_ set `TrainingInput.masterType` to specify the type + // of machine to use for your master node. This is the only required + // setting. + // + // * You _may_ set `TrainingInput.workerCount` to specify the number of + // workers to use. If you specify one or more workers, you _must_ also + // set `TrainingInput.workerType` to specify the type of machine to use + // for your worker nodes. + // + // * You _may_ set `TrainingInput.parameterServerCount` to specify the + // number of parameter servers to use. If you specify one or more + // parameter servers, you _must_ also set + // `TrainingInput.parameterServerType` to specify the type of machine to + // use for your parameter servers. + // + // Note that all of your workers must use the same machine type, which can + // be different from your parameter server type and master type. Your + // parameter servers must likewise use the same machine type, which can be + // different from your worker type and master type. + TrainingInput_CUSTOM TrainingInput_ScaleTier = 5 +) + +var TrainingInput_ScaleTier_name = map[int32]string{ + 0: "BASIC", + 1: "STANDARD_1", + 3: "PREMIUM_1", + 6: "BASIC_GPU", + 5: "CUSTOM", +} +var TrainingInput_ScaleTier_value = map[string]int32{ + "BASIC": 0, + "STANDARD_1": 1, + "PREMIUM_1": 3, + "BASIC_GPU": 6, + "CUSTOM": 5, +} + +func (x TrainingInput_ScaleTier) String() string { + return proto.EnumName(TrainingInput_ScaleTier_name, int32(x)) +} +func (TrainingInput_ScaleTier) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// The available types of optimization goals. +type HyperparameterSpec_GoalType int32 + +const ( + // Goal Type will default to maximize. + HyperparameterSpec_GOAL_TYPE_UNSPECIFIED HyperparameterSpec_GoalType = 0 + // Maximize the goal metric. + HyperparameterSpec_MAXIMIZE HyperparameterSpec_GoalType = 1 + // Minimize the goal metric. + HyperparameterSpec_MINIMIZE HyperparameterSpec_GoalType = 2 +) + +var HyperparameterSpec_GoalType_name = map[int32]string{ + 0: "GOAL_TYPE_UNSPECIFIED", + 1: "MAXIMIZE", + 2: "MINIMIZE", +} +var HyperparameterSpec_GoalType_value = map[string]int32{ + "GOAL_TYPE_UNSPECIFIED": 0, + "MAXIMIZE": 1, + "MINIMIZE": 2, +} + +func (x HyperparameterSpec_GoalType) String() string { + return proto.EnumName(HyperparameterSpec_GoalType_name, int32(x)) +} +func (HyperparameterSpec_GoalType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{1, 0} +} + +// The type of the parameter. +type ParameterSpec_ParameterType int32 + +const ( + // You must specify a valid type. Using this unspecified type will result in + // an error. + ParameterSpec_PARAMETER_TYPE_UNSPECIFIED ParameterSpec_ParameterType = 0 + // Type for real-valued parameters. + ParameterSpec_DOUBLE ParameterSpec_ParameterType = 1 + // Type for integral parameters. + ParameterSpec_INTEGER ParameterSpec_ParameterType = 2 + // The parameter is categorical, with a value chosen from the categories + // field. + ParameterSpec_CATEGORICAL ParameterSpec_ParameterType = 3 + // The parameter is real valued, with a fixed set of feasible points. If + // `type==DISCRETE`, feasible_points must be provided, and + // {`min_value`, `max_value`} will be ignored. + ParameterSpec_DISCRETE ParameterSpec_ParameterType = 4 +) + +var ParameterSpec_ParameterType_name = map[int32]string{ + 0: "PARAMETER_TYPE_UNSPECIFIED", + 1: "DOUBLE", + 2: "INTEGER", + 3: "CATEGORICAL", + 4: "DISCRETE", +} +var ParameterSpec_ParameterType_value = map[string]int32{ + "PARAMETER_TYPE_UNSPECIFIED": 0, + "DOUBLE": 1, + "INTEGER": 2, + "CATEGORICAL": 3, + "DISCRETE": 4, +} + +func (x ParameterSpec_ParameterType) String() string { + return proto.EnumName(ParameterSpec_ParameterType_name, int32(x)) +} +func (ParameterSpec_ParameterType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{2, 0} +} + +// The type of scaling that should be applied to this parameter. +type ParameterSpec_ScaleType int32 + +const ( + // By default, no scaling is applied. + ParameterSpec_NONE ParameterSpec_ScaleType = 0 + // Scales the feasible space to (0, 1) linearly. + ParameterSpec_UNIT_LINEAR_SCALE ParameterSpec_ScaleType = 1 + // Scales the feasible space logarithmically to (0, 1). The entire feasible + // space must be strictly positive. + ParameterSpec_UNIT_LOG_SCALE ParameterSpec_ScaleType = 2 + // Scales the feasible space "reverse" logarithmically to (0, 1). The result + // is that values close to the top of the feasible space are spread out more + // than points near the bottom. The entire feasible space must be strictly + // positive. + ParameterSpec_UNIT_REVERSE_LOG_SCALE ParameterSpec_ScaleType = 3 +) + +var ParameterSpec_ScaleType_name = map[int32]string{ + 0: "NONE", + 1: "UNIT_LINEAR_SCALE", + 2: "UNIT_LOG_SCALE", + 3: "UNIT_REVERSE_LOG_SCALE", +} +var ParameterSpec_ScaleType_value = map[string]int32{ + "NONE": 0, + "UNIT_LINEAR_SCALE": 1, + "UNIT_LOG_SCALE": 2, + "UNIT_REVERSE_LOG_SCALE": 3, +} + +func (x ParameterSpec_ScaleType) String() string { + return proto.EnumName(ParameterSpec_ScaleType_name, int32(x)) +} +func (ParameterSpec_ScaleType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } + +// The format used to separate data instances in the source files. +type PredictionInput_DataFormat int32 + +const ( + // Unspecified format. + PredictionInput_DATA_FORMAT_UNSPECIFIED PredictionInput_DataFormat = 0 + // The source file is a text file with instances separated by the + // new-line character. + PredictionInput_TEXT PredictionInput_DataFormat = 1 + // The source file is a TFRecord file. + PredictionInput_TF_RECORD PredictionInput_DataFormat = 2 + // The source file is a GZIP-compressed TFRecord file. + PredictionInput_TF_RECORD_GZIP PredictionInput_DataFormat = 3 +) + +var PredictionInput_DataFormat_name = map[int32]string{ + 0: "DATA_FORMAT_UNSPECIFIED", + 1: "TEXT", + 2: "TF_RECORD", + 3: "TF_RECORD_GZIP", +} +var PredictionInput_DataFormat_value = map[string]int32{ + "DATA_FORMAT_UNSPECIFIED": 0, + "TEXT": 1, + "TF_RECORD": 2, + "TF_RECORD_GZIP": 3, +} + +func (x PredictionInput_DataFormat) String() string { + return proto.EnumName(PredictionInput_DataFormat_name, int32(x)) +} +func (PredictionInput_DataFormat) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{5, 0} +} + +// Describes the job state. +type Job_State int32 + +const ( + // The job state is unspecified. + Job_STATE_UNSPECIFIED Job_State = 0 + // The job has been just created and processing has not yet begun. + Job_QUEUED Job_State = 1 + // The service is preparing to run the job. + Job_PREPARING Job_State = 2 + // The job is in progress. + Job_RUNNING Job_State = 3 + // The job completed successfully. + Job_SUCCEEDED Job_State = 4 + // The job failed. + // `error_message` should contain the details of the failure. + Job_FAILED Job_State = 5 + // The job is being cancelled. + // `error_message` should describe the reason for the cancellation. + Job_CANCELLING Job_State = 6 + // The job has been cancelled. + // `error_message` should describe the reason for the cancellation. + Job_CANCELLED Job_State = 7 +) + +var Job_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "QUEUED", + 2: "PREPARING", + 3: "RUNNING", + 4: "SUCCEEDED", + 5: "FAILED", + 6: "CANCELLING", + 7: "CANCELLED", +} +var Job_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "QUEUED": 1, + "PREPARING": 2, + "RUNNING": 3, + "SUCCEEDED": 4, + "FAILED": 5, + "CANCELLING": 6, + "CANCELLED": 7, +} + +func (x Job_State) String() string { + return proto.EnumName(Job_State_name, int32(x)) +} +func (Job_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +// Represents input parameters for a training job. +type TrainingInput struct { + // Required. Specifies the machine types, the number of replicas for workers + // and parameter servers. + ScaleTier TrainingInput_ScaleTier `protobuf:"varint,1,opt,name=scale_tier,json=scaleTier,enum=google.cloud.ml.v1.TrainingInput_ScaleTier" json:"scale_tier,omitempty"` + // Optional. Specifies the type of virtual machine to use for your training + // job's master worker. + // + // The following types are supported: + // + // <dl> + // <dt>standard</dt> + // <dd> + // A basic machine configuration suitable for training simple models with + // small to moderate datasets. + // </dd> + // <dt>large_model</dt> + // <dd> + // A machine with a lot of memory, specially suited for parameter servers + // when your model is large (having many hidden layers or layers with very + // large numbers of nodes). + // </dd> + // <dt>complex_model_s</dt> + // <dd> + // A machine suitable for the master and workers of the cluster when your + // model requires more computation than the standard machine can handle + // satisfactorily. + // </dd> + // <dt>complex_model_m</dt> + // <dd> + // A machine with roughly twice the number of cores and roughly double the + // memory of <code suppresswarning="true">complex_model_s</code>. + // </dd> + // <dt>complex_model_l</dt> + // <dd> + // A machine with roughly twice the number of cores and roughly double the + // memory of <code suppresswarning="true">complex_model_m</code>. + // </dd> + // <dt>standard_gpu</dt> + // <dd> + // A machine equivalent to <code suppresswarning="true">standard</code> that + // also includes a + // <a href="ml/docs/how-tos/using-gpus"> + // GPU that you can use in your trainer</a>. + // </dd> + // <dt>complex_model_m_gpu</dt> + // <dd> + // A machine equivalent to + // <code suppresswarning="true">coplex_model_m</code> that also includes + // four GPUs. + // </dd> + // </dl> + // + // You must set this value when `scaleTier` is set to `CUSTOM`. + MasterType string `protobuf:"bytes,2,opt,name=master_type,json=masterType" json:"master_type,omitempty"` + // Optional. Specifies the type of virtual machine to use for your training + // job's worker nodes. + // + // The supported values are the same as those described in the entry for + // `masterType`. + // + // This value must be present when `scaleTier` is set to `CUSTOM` and + // `workerCount` is greater than zero. + WorkerType string `protobuf:"bytes,3,opt,name=worker_type,json=workerType" json:"worker_type,omitempty"` + // Optional. Specifies the type of virtual machine to use for your training + // job's parameter server. + // + // The supported values are the same as those described in the entry for + // `master_type`. + // + // This value must be present when `scaleTier` is set to `CUSTOM` and + // `parameter_server_count` is greater than zero. + ParameterServerType string `protobuf:"bytes,4,opt,name=parameter_server_type,json=parameterServerType" json:"parameter_server_type,omitempty"` + // Optional. The number of worker replicas to use for the training job. Each + // replica in the cluster will be of the type specified in `worker_type`. + // + // This value can only be used when `scale_tier` is set to `CUSTOM`. If you + // set this value, you must also set `worker_type`. + WorkerCount int64 `protobuf:"varint,5,opt,name=worker_count,json=workerCount" json:"worker_count,omitempty"` + // Optional. The number of parameter server replicas to use for the training + // job. Each replica in the cluster will be of the type specified in + // `parameter_server_type`. + // + // This value can only be used when `scale_tier` is set to `CUSTOM`.If you + // set this value, you must also set `parameter_server_type`. + ParameterServerCount int64 `protobuf:"varint,6,opt,name=parameter_server_count,json=parameterServerCount" json:"parameter_server_count,omitempty"` + // Required. The Google Cloud Storage location of the packages with + // the training program and any additional dependencies. + PackageUris []string `protobuf:"bytes,7,rep,name=package_uris,json=packageUris" json:"package_uris,omitempty"` + // Required. The Python module name to run after installing the packages. + PythonModule string `protobuf:"bytes,8,opt,name=python_module,json=pythonModule" json:"python_module,omitempty"` + // Optional. Command line arguments to pass to the program. + Args []string `protobuf:"bytes,10,rep,name=args" json:"args,omitempty"` + // Optional. The set of Hyperparameters to tune. + Hyperparameters *HyperparameterSpec `protobuf:"bytes,12,opt,name=hyperparameters" json:"hyperparameters,omitempty"` + // Required. The Google Compute Engine region to run the training job in. + Region string `protobuf:"bytes,14,opt,name=region" json:"region,omitempty"` + // Optional. A Google Cloud Storage path in which to store training outputs + // and other data needed for training. This path is passed to your TensorFlow + // program as the 'job_dir' command-line argument. The benefit of specifying + // this field is that Cloud ML validates the path for use in training. + JobDir string `protobuf:"bytes,16,opt,name=job_dir,json=jobDir" json:"job_dir,omitempty"` + // Optional. The Google Cloud ML runtime version to use for training. If not + // set, Google Cloud ML will choose the latest stable version. + RuntimeVersion string `protobuf:"bytes,15,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` +} + +func (m *TrainingInput) Reset() { *m = TrainingInput{} } +func (m *TrainingInput) String() string { return proto.CompactTextString(m) } +func (*TrainingInput) ProtoMessage() {} +func (*TrainingInput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *TrainingInput) GetScaleTier() TrainingInput_ScaleTier { + if m != nil { + return m.ScaleTier + } + return TrainingInput_BASIC +} + +func (m *TrainingInput) GetMasterType() string { + if m != nil { + return m.MasterType + } + return "" +} + +func (m *TrainingInput) GetWorkerType() string { + if m != nil { + return m.WorkerType + } + return "" +} + +func (m *TrainingInput) GetParameterServerType() string { + if m != nil { + return m.ParameterServerType + } + return "" +} + +func (m *TrainingInput) GetWorkerCount() int64 { + if m != nil { + return m.WorkerCount + } + return 0 +} + +func (m *TrainingInput) GetParameterServerCount() int64 { + if m != nil { + return m.ParameterServerCount + } + return 0 +} + +func (m *TrainingInput) GetPackageUris() []string { + if m != nil { + return m.PackageUris + } + return nil +} + +func (m *TrainingInput) GetPythonModule() string { + if m != nil { + return m.PythonModule + } + return "" +} + +func (m *TrainingInput) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *TrainingInput) GetHyperparameters() *HyperparameterSpec { + if m != nil { + return m.Hyperparameters + } + return nil +} + +func (m *TrainingInput) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *TrainingInput) GetJobDir() string { + if m != nil { + return m.JobDir + } + return "" +} + +func (m *TrainingInput) GetRuntimeVersion() string { + if m != nil { + return m.RuntimeVersion + } + return "" +} + +// Represents a set of hyperparameters to optimize. +type HyperparameterSpec struct { + // Required. The type of goal to use for tuning. Available types are + // `MAXIMIZE` and `MINIMIZE`. + // + // Defaults to `MAXIMIZE`. + Goal HyperparameterSpec_GoalType `protobuf:"varint,1,opt,name=goal,enum=google.cloud.ml.v1.HyperparameterSpec_GoalType" json:"goal,omitempty"` + // Required. The set of parameters to tune. + Params []*ParameterSpec `protobuf:"bytes,2,rep,name=params" json:"params,omitempty"` + // Optional. How many training trials should be attempted to optimize + // the specified hyperparameters. + // + // Defaults to one. + MaxTrials int32 `protobuf:"varint,3,opt,name=max_trials,json=maxTrials" json:"max_trials,omitempty"` + // Optional. The number of training trials to run concurrently. + // You can reduce the time it takes to perform hyperparameter tuning by adding + // trials in parallel. However, each trail only benefits from the information + // gained in completed trials. That means that a trial does not get access to + // the results of trials running at the same time, which could reduce the + // quality of the overall optimization. + // + // Each trial will use the same scale tier and machine types. + // + // Defaults to one. + MaxParallelTrials int32 `protobuf:"varint,4,opt,name=max_parallel_trials,json=maxParallelTrials" json:"max_parallel_trials,omitempty"` + // Optional. The Tensorflow summary tag name to use for optimizing trials. For + // current versions of Tensorflow, this tag name should exactly match what is + // shown in Tensorboard, including all scopes. For versions of Tensorflow + // prior to 0.12, this should be only the tag passed to tf.Summary. + // By default, "training/hptuning/metric" will be used. + HyperparameterMetricTag string `protobuf:"bytes,5,opt,name=hyperparameter_metric_tag,json=hyperparameterMetricTag" json:"hyperparameter_metric_tag,omitempty"` +} + +func (m *HyperparameterSpec) Reset() { *m = HyperparameterSpec{} } +func (m *HyperparameterSpec) String() string { return proto.CompactTextString(m) } +func (*HyperparameterSpec) ProtoMessage() {} +func (*HyperparameterSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *HyperparameterSpec) GetGoal() HyperparameterSpec_GoalType { + if m != nil { + return m.Goal + } + return HyperparameterSpec_GOAL_TYPE_UNSPECIFIED +} + +func (m *HyperparameterSpec) GetParams() []*ParameterSpec { + if m != nil { + return m.Params + } + return nil +} + +func (m *HyperparameterSpec) GetMaxTrials() int32 { + if m != nil { + return m.MaxTrials + } + return 0 +} + +func (m *HyperparameterSpec) GetMaxParallelTrials() int32 { + if m != nil { + return m.MaxParallelTrials + } + return 0 +} + +func (m *HyperparameterSpec) GetHyperparameterMetricTag() string { + if m != nil { + return m.HyperparameterMetricTag + } + return "" +} + +// Represents a single hyperparameter to optimize. +type ParameterSpec struct { + // Required. The parameter name must be unique amongst all ParameterConfigs in + // a HyperparameterSpec message. E.g., "learning_rate". + ParameterName string `protobuf:"bytes,1,opt,name=parameter_name,json=parameterName" json:"parameter_name,omitempty"` + // Required. The type of the parameter. + Type ParameterSpec_ParameterType `protobuf:"varint,4,opt,name=type,enum=google.cloud.ml.v1.ParameterSpec_ParameterType" json:"type,omitempty"` + // Required if type is `DOUBLE` or `INTEGER`. This field + // should be unset if type is `CATEGORICAL`. This value should be integers if + // type is INTEGER. + MinValue float64 `protobuf:"fixed64,2,opt,name=min_value,json=minValue" json:"min_value,omitempty"` + // Required if typeis `DOUBLE` or `INTEGER`. This field + // should be unset if type is `CATEGORICAL`. This value should be integers if + // type is `INTEGER`. + MaxValue float64 `protobuf:"fixed64,3,opt,name=max_value,json=maxValue" json:"max_value,omitempty"` + // Required if type is `CATEGORICAL`. The list of possible categories. + CategoricalValues []string `protobuf:"bytes,5,rep,name=categorical_values,json=categoricalValues" json:"categorical_values,omitempty"` + // Required if type is `DISCRETE`. + // A list of feasible points. + // The list should be in strictly increasing order. For instance, this + // parameter might have possible settings of 1.5, 2.5, and 4.0. This list + // should not contain more than 1,000 values. + DiscreteValues []float64 `protobuf:"fixed64,6,rep,packed,name=discrete_values,json=discreteValues" json:"discrete_values,omitempty"` + // Optional. How the parameter should be scaled to the hypercube. + // Leave unset for categorical parameters. + // Some kind of scaling is strongly recommended for real or integral + // parameters (e.g., `UNIT_LINEAR_SCALE`). + ScaleType ParameterSpec_ScaleType `protobuf:"varint,7,opt,name=scale_type,json=scaleType,enum=google.cloud.ml.v1.ParameterSpec_ScaleType" json:"scale_type,omitempty"` +} + +func (m *ParameterSpec) Reset() { *m = ParameterSpec{} } +func (m *ParameterSpec) String() string { return proto.CompactTextString(m) } +func (*ParameterSpec) ProtoMessage() {} +func (*ParameterSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ParameterSpec) GetParameterName() string { + if m != nil { + return m.ParameterName + } + return "" +} + +func (m *ParameterSpec) GetType() ParameterSpec_ParameterType { + if m != nil { + return m.Type + } + return ParameterSpec_PARAMETER_TYPE_UNSPECIFIED +} + +func (m *ParameterSpec) GetMinValue() float64 { + if m != nil { + return m.MinValue + } + return 0 +} + +func (m *ParameterSpec) GetMaxValue() float64 { + if m != nil { + return m.MaxValue + } + return 0 +} + +func (m *ParameterSpec) GetCategoricalValues() []string { + if m != nil { + return m.CategoricalValues + } + return nil +} + +func (m *ParameterSpec) GetDiscreteValues() []float64 { + if m != nil { + return m.DiscreteValues + } + return nil +} + +func (m *ParameterSpec) GetScaleType() ParameterSpec_ScaleType { + if m != nil { + return m.ScaleType + } + return ParameterSpec_NONE +} + +// Represents the result of a single hyperparameter tuning trial from a +// training job. The TrainingOutput object that is returned on successful +// completion of a training job with hyperparameter tuning includes a list +// of HyperparameterOutput objects, one for each successful trial. +type HyperparameterOutput struct { + // The trial id for these results. + TrialId string `protobuf:"bytes,1,opt,name=trial_id,json=trialId" json:"trial_id,omitempty"` + // The hyperparameters given to this trial. + Hyperparameters map[string]string `protobuf:"bytes,2,rep,name=hyperparameters" json:"hyperparameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The final objective metric seen for this trial. + FinalMetric *HyperparameterOutput_HyperparameterMetric `protobuf:"bytes,3,opt,name=final_metric,json=finalMetric" json:"final_metric,omitempty"` + // All recorded object metrics for this trial. + AllMetrics []*HyperparameterOutput_HyperparameterMetric `protobuf:"bytes,4,rep,name=all_metrics,json=allMetrics" json:"all_metrics,omitempty"` +} + +func (m *HyperparameterOutput) Reset() { *m = HyperparameterOutput{} } +func (m *HyperparameterOutput) String() string { return proto.CompactTextString(m) } +func (*HyperparameterOutput) ProtoMessage() {} +func (*HyperparameterOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *HyperparameterOutput) GetTrialId() string { + if m != nil { + return m.TrialId + } + return "" +} + +func (m *HyperparameterOutput) GetHyperparameters() map[string]string { + if m != nil { + return m.Hyperparameters + } + return nil +} + +func (m *HyperparameterOutput) GetFinalMetric() *HyperparameterOutput_HyperparameterMetric { + if m != nil { + return m.FinalMetric + } + return nil +} + +func (m *HyperparameterOutput) GetAllMetrics() []*HyperparameterOutput_HyperparameterMetric { + if m != nil { + return m.AllMetrics + } + return nil +} + +// An observed value of a metric. +type HyperparameterOutput_HyperparameterMetric struct { + // The global training step for this metric. + TrainingStep int64 `protobuf:"varint,1,opt,name=training_step,json=trainingStep" json:"training_step,omitempty"` + // The objective value at this training step. + ObjectiveValue float64 `protobuf:"fixed64,2,opt,name=objective_value,json=objectiveValue" json:"objective_value,omitempty"` +} + +func (m *HyperparameterOutput_HyperparameterMetric) Reset() { + *m = HyperparameterOutput_HyperparameterMetric{} +} +func (m *HyperparameterOutput_HyperparameterMetric) String() string { return proto.CompactTextString(m) } +func (*HyperparameterOutput_HyperparameterMetric) ProtoMessage() {} +func (*HyperparameterOutput_HyperparameterMetric) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{3, 0} +} + +func (m *HyperparameterOutput_HyperparameterMetric) GetTrainingStep() int64 { + if m != nil { + return m.TrainingStep + } + return 0 +} + +func (m *HyperparameterOutput_HyperparameterMetric) GetObjectiveValue() float64 { + if m != nil { + return m.ObjectiveValue + } + return 0 +} + +// Represents results of a training job. Output only. +type TrainingOutput struct { + // The number of hyperparameter tuning trials that completed successfully. + // Only set for hyperparameter tuning jobs. + CompletedTrialCount int64 `protobuf:"varint,1,opt,name=completed_trial_count,json=completedTrialCount" json:"completed_trial_count,omitempty"` + // Results for individual Hyperparameter trials. + // Only set for hyperparameter tuning jobs. + Trials []*HyperparameterOutput `protobuf:"bytes,2,rep,name=trials" json:"trials,omitempty"` + // The amount of ML units consumed by the job. + ConsumedMlUnits float64 `protobuf:"fixed64,3,opt,name=consumed_ml_units,json=consumedMlUnits" json:"consumed_ml_units,omitempty"` + // Whether this job is a hyperparameter tuning job. + IsHyperparameterTuningJob bool `protobuf:"varint,4,opt,name=is_hyperparameter_tuning_job,json=isHyperparameterTuningJob" json:"is_hyperparameter_tuning_job,omitempty"` +} + +func (m *TrainingOutput) Reset() { *m = TrainingOutput{} } +func (m *TrainingOutput) String() string { return proto.CompactTextString(m) } +func (*TrainingOutput) ProtoMessage() {} +func (*TrainingOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *TrainingOutput) GetCompletedTrialCount() int64 { + if m != nil { + return m.CompletedTrialCount + } + return 0 +} + +func (m *TrainingOutput) GetTrials() []*HyperparameterOutput { + if m != nil { + return m.Trials + } + return nil +} + +func (m *TrainingOutput) GetConsumedMlUnits() float64 { + if m != nil { + return m.ConsumedMlUnits + } + return 0 +} + +func (m *TrainingOutput) GetIsHyperparameterTuningJob() bool { + if m != nil { + return m.IsHyperparameterTuningJob + } + return false +} + +// Represents input parameters for a prediction job. +type PredictionInput struct { + // Required. The model or the version to use for prediction. + // + // Types that are valid to be assigned to ModelVersion: + // *PredictionInput_ModelName + // *PredictionInput_VersionName + // *PredictionInput_Uri + ModelVersion isPredictionInput_ModelVersion `protobuf_oneof:"model_version"` + // Required. The format of the input data files. + DataFormat PredictionInput_DataFormat `protobuf:"varint,3,opt,name=data_format,json=dataFormat,enum=google.cloud.ml.v1.PredictionInput_DataFormat" json:"data_format,omitempty"` + // Required. The Google Cloud Storage location of the input data files. + // May contain wildcards. + InputPaths []string `protobuf:"bytes,4,rep,name=input_paths,json=inputPaths" json:"input_paths,omitempty"` + // Required. The output Google Cloud Storage location. + OutputPath string `protobuf:"bytes,5,opt,name=output_path,json=outputPath" json:"output_path,omitempty"` + // Optional. The maximum number of workers to be used for parallel processing. + // Defaults to 10 if not specified. + MaxWorkerCount int64 `protobuf:"varint,6,opt,name=max_worker_count,json=maxWorkerCount" json:"max_worker_count,omitempty"` + // Required. The Google Compute Engine region to run the prediction job in. + Region string `protobuf:"bytes,7,opt,name=region" json:"region,omitempty"` + // Optional. The Google Cloud ML runtime version to use for this batch + // prediction. If not set, Google Cloud ML will pick the runtime version used + // during the CreateVersion request for this model version, or choose the + // latest stable version when model version information is not available + // such as when the model is specified by uri. + RuntimeVersion string `protobuf:"bytes,8,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` +} + +func (m *PredictionInput) Reset() { *m = PredictionInput{} } +func (m *PredictionInput) String() string { return proto.CompactTextString(m) } +func (*PredictionInput) ProtoMessage() {} +func (*PredictionInput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +type isPredictionInput_ModelVersion interface { + isPredictionInput_ModelVersion() +} + +type PredictionInput_ModelName struct { + ModelName string `protobuf:"bytes,1,opt,name=model_name,json=modelName,oneof"` +} +type PredictionInput_VersionName struct { + VersionName string `protobuf:"bytes,2,opt,name=version_name,json=versionName,oneof"` +} +type PredictionInput_Uri struct { + Uri string `protobuf:"bytes,9,opt,name=uri,oneof"` +} + +func (*PredictionInput_ModelName) isPredictionInput_ModelVersion() {} +func (*PredictionInput_VersionName) isPredictionInput_ModelVersion() {} +func (*PredictionInput_Uri) isPredictionInput_ModelVersion() {} + +func (m *PredictionInput) GetModelVersion() isPredictionInput_ModelVersion { + if m != nil { + return m.ModelVersion + } + return nil +} + +func (m *PredictionInput) GetModelName() string { + if x, ok := m.GetModelVersion().(*PredictionInput_ModelName); ok { + return x.ModelName + } + return "" +} + +func (m *PredictionInput) GetVersionName() string { + if x, ok := m.GetModelVersion().(*PredictionInput_VersionName); ok { + return x.VersionName + } + return "" +} + +func (m *PredictionInput) GetUri() string { + if x, ok := m.GetModelVersion().(*PredictionInput_Uri); ok { + return x.Uri + } + return "" +} + +func (m *PredictionInput) GetDataFormat() PredictionInput_DataFormat { + if m != nil { + return m.DataFormat + } + return PredictionInput_DATA_FORMAT_UNSPECIFIED +} + +func (m *PredictionInput) GetInputPaths() []string { + if m != nil { + return m.InputPaths + } + return nil +} + +func (m *PredictionInput) GetOutputPath() string { + if m != nil { + return m.OutputPath + } + return "" +} + +func (m *PredictionInput) GetMaxWorkerCount() int64 { + if m != nil { + return m.MaxWorkerCount + } + return 0 +} + +func (m *PredictionInput) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *PredictionInput) GetRuntimeVersion() string { + if m != nil { + return m.RuntimeVersion + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PredictionInput) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PredictionInput_OneofMarshaler, _PredictionInput_OneofUnmarshaler, _PredictionInput_OneofSizer, []interface{}{ + (*PredictionInput_ModelName)(nil), + (*PredictionInput_VersionName)(nil), + (*PredictionInput_Uri)(nil), + } +} + +func _PredictionInput_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PredictionInput) + // model_version + switch x := m.ModelVersion.(type) { + case *PredictionInput_ModelName: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ModelName) + case *PredictionInput_VersionName: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.VersionName) + case *PredictionInput_Uri: + b.EncodeVarint(9<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Uri) + case nil: + default: + return fmt.Errorf("PredictionInput.ModelVersion has unexpected type %T", x) + } + return nil +} + +func _PredictionInput_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PredictionInput) + switch tag { + case 1: // model_version.model_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ModelVersion = &PredictionInput_ModelName{x} + return true, err + case 2: // model_version.version_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ModelVersion = &PredictionInput_VersionName{x} + return true, err + case 9: // model_version.uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ModelVersion = &PredictionInput_Uri{x} + return true, err + default: + return false, nil + } +} + +func _PredictionInput_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PredictionInput) + // model_version + switch x := m.ModelVersion.(type) { + case *PredictionInput_ModelName: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ModelName))) + n += len(x.ModelName) + case *PredictionInput_VersionName: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.VersionName))) + n += len(x.VersionName) + case *PredictionInput_Uri: + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Uri))) + n += len(x.Uri) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents results of a prediction job. +type PredictionOutput struct { + // The output Google Cloud Storage location provided at the job creation time. + OutputPath string `protobuf:"bytes,1,opt,name=output_path,json=outputPath" json:"output_path,omitempty"` + // The number of generated predictions. + PredictionCount int64 `protobuf:"varint,2,opt,name=prediction_count,json=predictionCount" json:"prediction_count,omitempty"` + // The number of data instances which resulted in errors. + ErrorCount int64 `protobuf:"varint,3,opt,name=error_count,json=errorCount" json:"error_count,omitempty"` + // Node hours used by the batch prediction job. + NodeHours float64 `protobuf:"fixed64,4,opt,name=node_hours,json=nodeHours" json:"node_hours,omitempty"` +} + +func (m *PredictionOutput) Reset() { *m = PredictionOutput{} } +func (m *PredictionOutput) String() string { return proto.CompactTextString(m) } +func (*PredictionOutput) ProtoMessage() {} +func (*PredictionOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *PredictionOutput) GetOutputPath() string { + if m != nil { + return m.OutputPath + } + return "" +} + +func (m *PredictionOutput) GetPredictionCount() int64 { + if m != nil { + return m.PredictionCount + } + return 0 +} + +func (m *PredictionOutput) GetErrorCount() int64 { + if m != nil { + return m.ErrorCount + } + return 0 +} + +func (m *PredictionOutput) GetNodeHours() float64 { + if m != nil { + return m.NodeHours + } + return 0 +} + +// Represents a training or prediction job. +type Job struct { + // Required. The user-specified id of the job. + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId" json:"job_id,omitempty"` + // Required. Parameters to create a job. + // + // Types that are valid to be assigned to Input: + // *Job_TrainingInput + // *Job_PredictionInput + Input isJob_Input `protobuf_oneof:"input"` + // Output only. When the job was created. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. When the job processing was started. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Output only. When the job processing was completed. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Output only. The detailed state of a job. + State Job_State `protobuf:"varint,7,opt,name=state,enum=google.cloud.ml.v1.Job_State" json:"state,omitempty"` + // Output only. The details of a failure or a cancellation. + ErrorMessage string `protobuf:"bytes,8,opt,name=error_message,json=errorMessage" json:"error_message,omitempty"` + // Output only. The current result of the job. + // + // Types that are valid to be assigned to Output: + // *Job_TrainingOutput + // *Job_PredictionOutput + Output isJob_Output `protobuf_oneof:"output"` +} + +func (m *Job) Reset() { *m = Job{} } +func (m *Job) String() string { return proto.CompactTextString(m) } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type isJob_Input interface { + isJob_Input() +} +type isJob_Output interface { + isJob_Output() +} + +type Job_TrainingInput struct { + TrainingInput *TrainingInput `protobuf:"bytes,2,opt,name=training_input,json=trainingInput,oneof"` +} +type Job_PredictionInput struct { + PredictionInput *PredictionInput `protobuf:"bytes,3,opt,name=prediction_input,json=predictionInput,oneof"` +} +type Job_TrainingOutput struct { + TrainingOutput *TrainingOutput `protobuf:"bytes,9,opt,name=training_output,json=trainingOutput,oneof"` +} +type Job_PredictionOutput struct { + PredictionOutput *PredictionOutput `protobuf:"bytes,10,opt,name=prediction_output,json=predictionOutput,oneof"` +} + +func (*Job_TrainingInput) isJob_Input() {} +func (*Job_PredictionInput) isJob_Input() {} +func (*Job_TrainingOutput) isJob_Output() {} +func (*Job_PredictionOutput) isJob_Output() {} + +func (m *Job) GetInput() isJob_Input { + if m != nil { + return m.Input + } + return nil +} +func (m *Job) GetOutput() isJob_Output { + if m != nil { + return m.Output + } + return nil +} + +func (m *Job) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +func (m *Job) GetTrainingInput() *TrainingInput { + if x, ok := m.GetInput().(*Job_TrainingInput); ok { + return x.TrainingInput + } + return nil +} + +func (m *Job) GetPredictionInput() *PredictionInput { + if x, ok := m.GetInput().(*Job_PredictionInput); ok { + return x.PredictionInput + } + return nil +} + +func (m *Job) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Job) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *Job) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *Job) GetState() Job_State { + if m != nil { + return m.State + } + return Job_STATE_UNSPECIFIED +} + +func (m *Job) GetErrorMessage() string { + if m != nil { + return m.ErrorMessage + } + return "" +} + +func (m *Job) GetTrainingOutput() *TrainingOutput { + if x, ok := m.GetOutput().(*Job_TrainingOutput); ok { + return x.TrainingOutput + } + return nil +} + +func (m *Job) GetPredictionOutput() *PredictionOutput { + if x, ok := m.GetOutput().(*Job_PredictionOutput); ok { + return x.PredictionOutput + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Job) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Job_OneofMarshaler, _Job_OneofUnmarshaler, _Job_OneofSizer, []interface{}{ + (*Job_TrainingInput)(nil), + (*Job_PredictionInput)(nil), + (*Job_TrainingOutput)(nil), + (*Job_PredictionOutput)(nil), + } +} + +func _Job_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Job) + // input + switch x := m.Input.(type) { + case *Job_TrainingInput: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TrainingInput); err != nil { + return err + } + case *Job_PredictionInput: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PredictionInput); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Job.Input has unexpected type %T", x) + } + // output + switch x := m.Output.(type) { + case *Job_TrainingOutput: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TrainingOutput); err != nil { + return err + } + case *Job_PredictionOutput: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PredictionOutput); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Job.Output has unexpected type %T", x) + } + return nil +} + +func _Job_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Job) + switch tag { + case 2: // input.training_input + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TrainingInput) + err := b.DecodeMessage(msg) + m.Input = &Job_TrainingInput{msg} + return true, err + case 3: // input.prediction_input + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PredictionInput) + err := b.DecodeMessage(msg) + m.Input = &Job_PredictionInput{msg} + return true, err + case 9: // output.training_output + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TrainingOutput) + err := b.DecodeMessage(msg) + m.Output = &Job_TrainingOutput{msg} + return true, err + case 10: // output.prediction_output + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PredictionOutput) + err := b.DecodeMessage(msg) + m.Output = &Job_PredictionOutput{msg} + return true, err + default: + return false, nil + } +} + +func _Job_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Job) + // input + switch x := m.Input.(type) { + case *Job_TrainingInput: + s := proto.Size(x.TrainingInput) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_PredictionInput: + s := proto.Size(x.PredictionInput) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // output + switch x := m.Output.(type) { + case *Job_TrainingOutput: + s := proto.Size(x.TrainingOutput) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_PredictionOutput: + s := proto.Size(x.PredictionOutput) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request message for the CreateJob method. +type CreateJobRequest struct { + // Required. The project name. + // + // Authorization: requires `Editor` role on the specified project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The job to create. + Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` +} + +func (m *CreateJobRequest) Reset() { *m = CreateJobRequest{} } +func (m *CreateJobRequest) String() string { return proto.CompactTextString(m) } +func (*CreateJobRequest) ProtoMessage() {} +func (*CreateJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *CreateJobRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateJobRequest) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +// Request message for the ListJobs method. +type ListJobsRequest struct { + // Required. The name of the project for which to list jobs. + // + // Authorization: requires `Viewer` role on the specified project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. Specifies the subset of jobs to retrieve. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // Optional. A page token to request the next page of results. + // + // You get the token from the `next_page_token` field of the response from + // the previous call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. The number of jobs to retrieve per "page" of results. If there + // are more remaining results than this number, the response message will + // contain a valid value in the `next_page_token` field. + // + // The default value is 20, and the maximum page size is 100. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListJobsRequest) Reset() { *m = ListJobsRequest{} } +func (m *ListJobsRequest) String() string { return proto.CompactTextString(m) } +func (*ListJobsRequest) ProtoMessage() {} +func (*ListJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *ListJobsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListJobsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListJobsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListJobsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for the ListJobs method. +type ListJobsResponse struct { + // The list of jobs. + Jobs []*Job `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"` + // Optional. Pass this token as the `page_token` field of the request for a + // subsequent call. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListJobsResponse) Reset() { *m = ListJobsResponse{} } +func (m *ListJobsResponse) String() string { return proto.CompactTextString(m) } +func (*ListJobsResponse) ProtoMessage() {} +func (*ListJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *ListJobsResponse) GetJobs() []*Job { + if m != nil { + return m.Jobs + } + return nil +} + +func (m *ListJobsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for the GetJob method. +type GetJobRequest struct { + // Required. The name of the job to get the description of. + // + // Authorization: requires `Viewer` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetJobRequest) Reset() { *m = GetJobRequest{} } +func (m *GetJobRequest) String() string { return proto.CompactTextString(m) } +func (*GetJobRequest) ProtoMessage() {} +func (*GetJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *GetJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for the CancelJob method. +type CancelJobRequest struct { + // Required. The name of the job to cancel. + // + // Authorization: requires `Editor` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *CancelJobRequest) Reset() { *m = CancelJobRequest{} } +func (m *CancelJobRequest) String() string { return proto.CompactTextString(m) } +func (*CancelJobRequest) ProtoMessage() {} +func (*CancelJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *CancelJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*TrainingInput)(nil), "google.cloud.ml.v1.TrainingInput") + proto.RegisterType((*HyperparameterSpec)(nil), "google.cloud.ml.v1.HyperparameterSpec") + proto.RegisterType((*ParameterSpec)(nil), "google.cloud.ml.v1.ParameterSpec") + proto.RegisterType((*HyperparameterOutput)(nil), "google.cloud.ml.v1.HyperparameterOutput") + proto.RegisterType((*HyperparameterOutput_HyperparameterMetric)(nil), "google.cloud.ml.v1.HyperparameterOutput.HyperparameterMetric") + proto.RegisterType((*TrainingOutput)(nil), "google.cloud.ml.v1.TrainingOutput") + proto.RegisterType((*PredictionInput)(nil), "google.cloud.ml.v1.PredictionInput") + proto.RegisterType((*PredictionOutput)(nil), "google.cloud.ml.v1.PredictionOutput") + proto.RegisterType((*Job)(nil), "google.cloud.ml.v1.Job") + proto.RegisterType((*CreateJobRequest)(nil), "google.cloud.ml.v1.CreateJobRequest") + proto.RegisterType((*ListJobsRequest)(nil), "google.cloud.ml.v1.ListJobsRequest") + proto.RegisterType((*ListJobsResponse)(nil), "google.cloud.ml.v1.ListJobsResponse") + proto.RegisterType((*GetJobRequest)(nil), "google.cloud.ml.v1.GetJobRequest") + proto.RegisterType((*CancelJobRequest)(nil), "google.cloud.ml.v1.CancelJobRequest") + proto.RegisterEnum("google.cloud.ml.v1.TrainingInput_ScaleTier", TrainingInput_ScaleTier_name, TrainingInput_ScaleTier_value) + proto.RegisterEnum("google.cloud.ml.v1.HyperparameterSpec_GoalType", HyperparameterSpec_GoalType_name, HyperparameterSpec_GoalType_value) + proto.RegisterEnum("google.cloud.ml.v1.ParameterSpec_ParameterType", ParameterSpec_ParameterType_name, ParameterSpec_ParameterType_value) + proto.RegisterEnum("google.cloud.ml.v1.ParameterSpec_ScaleType", ParameterSpec_ScaleType_name, ParameterSpec_ScaleType_value) + proto.RegisterEnum("google.cloud.ml.v1.PredictionInput_DataFormat", PredictionInput_DataFormat_name, PredictionInput_DataFormat_value) + proto.RegisterEnum("google.cloud.ml.v1.Job_State", Job_State_name, Job_State_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for JobService service + +type JobServiceClient interface { + // Creates a training or a batch prediction job. + CreateJob(ctx context.Context, in *CreateJobRequest, opts ...grpc.CallOption) (*Job, error) + // Lists the jobs in the project. + ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) + // Describes a job. + GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) + // Cancels a running job. + CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) +} + +type jobServiceClient struct { + cc *grpc.ClientConn +} + +func NewJobServiceClient(cc *grpc.ClientConn) JobServiceClient { + return &jobServiceClient{cc} +} + +func (c *jobServiceClient) CreateJob(ctx context.Context, in *CreateJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.JobService/CreateJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobServiceClient) ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) { + out := new(ListJobsResponse) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.JobService/ListJobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobServiceClient) GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.JobService/GetJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobServiceClient) CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.JobService/CancelJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for JobService service + +type JobServiceServer interface { + // Creates a training or a batch prediction job. + CreateJob(context.Context, *CreateJobRequest) (*Job, error) + // Lists the jobs in the project. + ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) + // Describes a job. + GetJob(context.Context, *GetJobRequest) (*Job, error) + // Cancels a running job. + CancelJob(context.Context, *CancelJobRequest) (*google_protobuf1.Empty, error) +} + +func RegisterJobServiceServer(s *grpc.Server, srv JobServiceServer) { + s.RegisterService(&_JobService_serviceDesc, srv) +} + +func _JobService_CreateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).CreateJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.JobService/CreateJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).CreateJob(ctx, req.(*CreateJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobService_ListJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListJobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).ListJobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.JobService/ListJobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).ListJobs(ctx, req.(*ListJobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobService_GetJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).GetJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.JobService/GetJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).GetJob(ctx, req.(*GetJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobService_CancelJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).CancelJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.JobService/CancelJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).CancelJob(ctx, req.(*CancelJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _JobService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.ml.v1.JobService", + HandlerType: (*JobServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateJob", + Handler: _JobService_CreateJob_Handler, + }, + { + MethodName: "ListJobs", + Handler: _JobService_ListJobs_Handler, + }, + { + MethodName: "GetJob", + Handler: _JobService_GetJob_Handler, + }, + { + MethodName: "CancelJob", + Handler: _JobService_CancelJob_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/ml/v1/job_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/ml/v1/job_service.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2070 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdb, 0x6e, 0x1b, 0xc9, + 0x11, 0x15, 0xaf, 0x22, 0x8b, 0x12, 0x39, 0x6e, 0x5b, 0x36, 0x4d, 0xdb, 0x6b, 0x79, 0xe4, 0x38, + 0xb2, 0x17, 0x21, 0x21, 0xed, 0x06, 0xc8, 0x7a, 0xb1, 0x48, 0x28, 0x72, 0x2c, 0x51, 0x10, 0x29, + 0xa6, 0x39, 0x74, 0x36, 0x46, 0x90, 0x49, 0x93, 0x6c, 0xd3, 0x23, 0xcf, 0x2d, 0x33, 0x4d, 0x45, + 0xda, 0x85, 0x81, 0x20, 0x08, 0xf2, 0x03, 0x79, 0x0f, 0xf2, 0x4d, 0xc9, 0x1f, 0x04, 0x01, 0xf2, + 0x01, 0x79, 0x0e, 0x10, 0xf4, 0x85, 0xc3, 0x8b, 0x28, 0xd9, 0x48, 0xde, 0xd8, 0xa7, 0x4e, 0x55, + 0x75, 0x57, 0x55, 0x57, 0xd7, 0x10, 0x9e, 0x8e, 0x7d, 0x7f, 0xec, 0xd0, 0xda, 0xd0, 0xf1, 0x27, + 0xa3, 0x9a, 0xeb, 0xd4, 0xce, 0xf7, 0x6a, 0x67, 0xfe, 0xc0, 0x8a, 0x68, 0x78, 0x6e, 0x0f, 0x69, + 0x35, 0x08, 0x7d, 0xe6, 0x23, 0x24, 0x59, 0x55, 0xc1, 0xaa, 0xba, 0x4e, 0xf5, 0x7c, 0xaf, 0xf2, + 0x50, 0x69, 0x92, 0xc0, 0xae, 0x11, 0xcf, 0xf3, 0x19, 0x61, 0xb6, 0xef, 0x45, 0x52, 0xa3, 0xb2, + 0x35, 0x2f, 0x9d, 0xb0, 0x77, 0x0a, 0x7e, 0xa0, 0x60, 0xb1, 0x1a, 0x4c, 0xde, 0xd6, 0xa8, 0x1b, + 0xb0, 0x4b, 0x25, 0x7c, 0xbc, 0x2c, 0x64, 0xb6, 0x4b, 0x23, 0x46, 0xdc, 0x40, 0x12, 0xf4, 0x3f, + 0x66, 0x60, 0xd3, 0x0c, 0x89, 0xed, 0xd9, 0xde, 0xb8, 0xe5, 0x05, 0x13, 0x86, 0x8e, 0x01, 0xa2, + 0x21, 0x71, 0xa8, 0xc5, 0x6c, 0x1a, 0x96, 0x13, 0xdb, 0x89, 0xdd, 0xe2, 0xfe, 0xe7, 0xd5, 0xab, + 0xbb, 0xad, 0x2e, 0xa8, 0x55, 0x7b, 0x5c, 0xc7, 0xb4, 0x69, 0x88, 0xf3, 0xd1, 0xf4, 0x27, 0x7a, + 0x0c, 0x05, 0x97, 0x44, 0x8c, 0x86, 0x16, 0xbb, 0x0c, 0x68, 0x39, 0xb9, 0x9d, 0xd8, 0xcd, 0x63, + 0x90, 0x90, 0x79, 0x19, 0x50, 0x4e, 0xf8, 0x9d, 0x1f, 0xbe, 0x9f, 0x12, 0x52, 0x92, 0x20, 0x21, + 0x41, 0xd8, 0x87, 0xad, 0x80, 0x84, 0xc4, 0xa5, 0xdc, 0x08, 0x8f, 0xe0, 0x94, 0x9a, 0x16, 0xd4, + 0xdb, 0xb1, 0xb0, 0x27, 0x64, 0x42, 0xe7, 0x09, 0x6c, 0x28, 0xa3, 0x43, 0x7f, 0xe2, 0xb1, 0x72, + 0x66, 0x3b, 0xb1, 0x9b, 0xc2, 0xca, 0x51, 0x83, 0x43, 0xe8, 0x4b, 0xb8, 0x7b, 0xc5, 0xac, 0x24, + 0x67, 0x05, 0xf9, 0xce, 0x92, 0x5d, 0xa9, 0xf5, 0x04, 0x36, 0x02, 0x32, 0x7c, 0x4f, 0xc6, 0xd4, + 0x9a, 0x84, 0x76, 0x54, 0x5e, 0xdf, 0x4e, 0xed, 0xe6, 0x71, 0x41, 0x61, 0xfd, 0xd0, 0x8e, 0xd0, + 0x0e, 0x6c, 0x06, 0x97, 0xec, 0x9d, 0xef, 0x59, 0xae, 0x3f, 0x9a, 0x38, 0xb4, 0x9c, 0x13, 0xfb, + 0xdc, 0x90, 0x60, 0x5b, 0x60, 0x08, 0x41, 0x9a, 0x84, 0xe3, 0xa8, 0x0c, 0x42, 0x5f, 0xfc, 0x46, + 0x5d, 0x28, 0xbd, 0xbb, 0x0c, 0x68, 0x18, 0x3b, 0x8e, 0xca, 0x1b, 0xdb, 0x89, 0xdd, 0xc2, 0xfe, + 0xb3, 0x55, 0xb1, 0x3f, 0x5a, 0xa0, 0xf6, 0x02, 0x3a, 0xc4, 0xcb, 0xea, 0xe8, 0x2e, 0x64, 0x43, + 0x3a, 0xb6, 0x7d, 0xaf, 0x5c, 0x14, 0x7b, 0x50, 0x2b, 0x74, 0x0f, 0xd6, 0x79, 0x39, 0x8e, 0xec, + 0xb0, 0xac, 0x49, 0xc1, 0x99, 0x3f, 0x68, 0xda, 0x21, 0xfa, 0x21, 0x94, 0xc2, 0x89, 0xc7, 0x2b, + 0xc4, 0x3a, 0xa7, 0x61, 0xc4, 0x35, 0x4b, 0x82, 0x50, 0x54, 0xf0, 0x6b, 0x89, 0xea, 0x5d, 0xc8, + 0xc7, 0xe9, 0x46, 0x79, 0xc8, 0x1c, 0xd4, 0x7b, 0xad, 0x86, 0xb6, 0x86, 0x8a, 0x00, 0x3d, 0xb3, + 0xde, 0x69, 0xd6, 0x71, 0xd3, 0xda, 0xd3, 0x12, 0x68, 0x13, 0xf2, 0x5d, 0x6c, 0xb4, 0x5b, 0xfd, + 0xb6, 0xb5, 0xa7, 0xa5, 0xf8, 0x52, 0x30, 0xad, 0xc3, 0x6e, 0x5f, 0xcb, 0x22, 0x80, 0x6c, 0xa3, + 0xdf, 0x33, 0x4f, 0xdb, 0x5a, 0x46, 0xff, 0x47, 0x12, 0xd0, 0xd5, 0x33, 0xa1, 0x06, 0xa4, 0xc7, + 0x3e, 0x71, 0x54, 0x15, 0xd6, 0x3e, 0x2d, 0x12, 0xd5, 0x43, 0x9f, 0x38, 0xbc, 0x10, 0xb0, 0x50, + 0x46, 0x5f, 0x41, 0x56, 0xc8, 0xa3, 0x72, 0x72, 0x3b, 0xb5, 0x5b, 0xd8, 0x7f, 0xb2, 0xca, 0x4c, + 0x77, 0x21, 0x96, 0x4a, 0x01, 0x3d, 0x02, 0x70, 0xc9, 0x85, 0xc5, 0x42, 0x9b, 0x38, 0x91, 0xa8, + 0xce, 0x0c, 0xce, 0xbb, 0xe4, 0xc2, 0x14, 0x00, 0xaa, 0xc2, 0x6d, 0x2e, 0xe6, 0x64, 0xc7, 0xa1, + 0xce, 0x94, 0x97, 0x16, 0xbc, 0x5b, 0x2e, 0xb9, 0xe8, 0x2a, 0x89, 0xe2, 0xbf, 0x84, 0xfb, 0x8b, + 0x49, 0xb2, 0x5c, 0xca, 0x42, 0x7b, 0x68, 0x31, 0x32, 0x16, 0x55, 0x9a, 0xc7, 0xf7, 0x16, 0x09, + 0x6d, 0x21, 0x37, 0xc9, 0x58, 0xaf, 0x43, 0x6e, 0x7a, 0x2e, 0x74, 0x1f, 0xb6, 0x0e, 0x4f, 0xeb, + 0x27, 0x96, 0xf9, 0xcb, 0xae, 0x61, 0xf5, 0x3b, 0xbd, 0xae, 0xd1, 0x68, 0xbd, 0x6a, 0x19, 0x4d, + 0x6d, 0x0d, 0x6d, 0x40, 0xae, 0x5d, 0xff, 0xb6, 0xd5, 0x6e, 0xbd, 0x31, 0xb4, 0x84, 0x58, 0xb5, + 0x3a, 0x72, 0x95, 0xd4, 0xff, 0x9a, 0x86, 0xcd, 0x85, 0x73, 0xa2, 0x1f, 0x40, 0x71, 0xb6, 0x17, + 0x8f, 0xb8, 0x54, 0x44, 0x3a, 0x8f, 0x37, 0x63, 0xb4, 0x43, 0x5c, 0xca, 0xd3, 0x10, 0xdf, 0xb9, + 0x6b, 0xd2, 0xb0, 0x60, 0x77, 0xb6, 0x92, 0x69, 0xe0, 0xca, 0xe8, 0x01, 0xe4, 0x5d, 0xdb, 0xb3, + 0xce, 0x89, 0x33, 0x91, 0x9d, 0x20, 0x81, 0x73, 0xae, 0xed, 0xbd, 0xe6, 0x6b, 0x21, 0x24, 0x17, + 0x4a, 0x98, 0x52, 0x42, 0x72, 0x21, 0x85, 0x3f, 0x02, 0x34, 0x24, 0x8c, 0x8e, 0xfd, 0xd0, 0x1e, + 0x12, 0x47, 0x92, 0xa2, 0x72, 0x46, 0x5c, 0x9e, 0x5b, 0x73, 0x12, 0xc1, 0x8e, 0x78, 0x19, 0x8f, + 0xec, 0x68, 0x18, 0x52, 0x46, 0xa7, 0xdc, 0xec, 0x76, 0x6a, 0x37, 0x81, 0x8b, 0x53, 0x58, 0x11, + 0x67, 0x9d, 0x8e, 0x1f, 0x6e, 0xfd, 0xfa, 0x4e, 0xb7, 0x78, 0x38, 0x59, 0xfa, 0xfc, 0x60, 0xaa, + 0xd3, 0x5d, 0x06, 0x54, 0x1f, 0xcf, 0x85, 0x56, 0xe4, 0xe8, 0x33, 0xa8, 0x74, 0xeb, 0xb8, 0xde, + 0x36, 0x4c, 0x03, 0xaf, 0x4a, 0x14, 0x40, 0xb6, 0x79, 0xda, 0x3f, 0x38, 0xe1, 0x69, 0x2a, 0xc0, + 0x7a, 0xab, 0x63, 0x1a, 0x87, 0x06, 0xd6, 0x92, 0xa8, 0x04, 0x85, 0x46, 0xdd, 0x34, 0x0e, 0x4f, + 0x71, 0xab, 0x51, 0x3f, 0xd1, 0x52, 0x3c, 0x89, 0xcd, 0x56, 0xaf, 0x81, 0x0d, 0xd3, 0xd0, 0xd2, + 0xfa, 0xaf, 0xa6, 0x77, 0x8f, 0x3b, 0xc9, 0x41, 0xba, 0x73, 0xda, 0x31, 0xb4, 0x35, 0xb4, 0x05, + 0xb7, 0xfa, 0x9d, 0x96, 0x69, 0x9d, 0xb4, 0x3a, 0x46, 0x1d, 0x5b, 0xbd, 0x46, 0x5d, 0x58, 0x46, + 0x50, 0x94, 0xf0, 0xe9, 0xa1, 0xc2, 0x92, 0xa8, 0x02, 0x77, 0x05, 0x86, 0x8d, 0xd7, 0x06, 0xee, + 0x19, 0x73, 0xb2, 0x94, 0xfe, 0xa7, 0x34, 0xdc, 0x59, 0xbc, 0x51, 0xa7, 0x13, 0xc6, 0x5f, 0x85, + 0xfb, 0x90, 0x13, 0xd5, 0x6d, 0xd9, 0x23, 0x55, 0x23, 0xeb, 0x62, 0xdd, 0x1a, 0xa1, 0xf1, 0xd5, + 0xce, 0x25, 0x2f, 0xda, 0x37, 0x1f, 0xbf, 0xaf, 0xd2, 0xfa, 0x12, 0x18, 0x19, 0x1e, 0x0b, 0x2f, + 0xaf, 0x36, 0xb4, 0xdf, 0xc0, 0xc6, 0x5b, 0xdb, 0x23, 0x8e, 0xba, 0x35, 0xa2, 0x4e, 0xfe, 0x77, + 0x2f, 0xf2, 0x6a, 0xe1, 0x82, 0x30, 0x29, 0x17, 0xe8, 0xd7, 0x50, 0x20, 0xce, 0xd4, 0x3e, 0xbf, + 0xc8, 0xa9, 0xff, 0xdf, 0x01, 0x10, 0x47, 0x99, 0x8f, 0x2a, 0xa3, 0xe5, 0xe8, 0x2a, 0xbf, 0x3b, + 0xb0, 0xc9, 0xd4, 0x6b, 0x6a, 0x45, 0x8c, 0x06, 0x22, 0xc4, 0x29, 0xbc, 0x31, 0x05, 0x7b, 0x8c, + 0x06, 0xbc, 0xae, 0xfd, 0xc1, 0x19, 0x1d, 0x32, 0xfb, 0x9c, 0x2e, 0x5c, 0xa3, 0x62, 0x0c, 0x8b, + 0xc2, 0xae, 0x1c, 0x2c, 0x7b, 0x91, 0x01, 0x45, 0x1a, 0xa4, 0xde, 0xd3, 0x4b, 0x95, 0x3e, 0xfe, + 0x13, 0xdd, 0x81, 0xcc, 0xcc, 0x50, 0x1e, 0xcb, 0xc5, 0xcb, 0xe4, 0x4f, 0x12, 0xfa, 0xbf, 0x13, + 0x50, 0x9c, 0x3e, 0xf0, 0xaa, 0x04, 0xf6, 0x61, 0x6b, 0xe8, 0xbb, 0x81, 0x43, 0x19, 0x1d, 0xc9, + 0x56, 0xa7, 0x9e, 0x4c, 0xb9, 0xd9, 0xdb, 0xb1, 0x50, 0x74, 0x3b, 0xf9, 0x62, 0xfe, 0x0c, 0xb2, + 0xaa, 0x29, 0xca, 0x92, 0xd8, 0xfd, 0xd4, 0x58, 0x62, 0xa5, 0x87, 0x5e, 0xc0, 0xad, 0xa1, 0xef, + 0x45, 0x13, 0x97, 0x8e, 0x2c, 0xd7, 0xb1, 0x26, 0x9e, 0xcd, 0x22, 0xd5, 0x21, 0x4a, 0x53, 0x41, + 0xdb, 0xe9, 0x73, 0x18, 0xfd, 0x14, 0x1e, 0xda, 0x91, 0xb5, 0xd4, 0x62, 0xd9, 0x44, 0x84, 0xf5, + 0xcc, 0x1f, 0x88, 0xfe, 0x95, 0xc3, 0xf7, 0xed, 0x68, 0xd1, 0xa3, 0x29, 0x18, 0xc7, 0xfe, 0x40, + 0xff, 0x5b, 0x0a, 0x4a, 0xdd, 0x90, 0x8e, 0xec, 0x21, 0x1f, 0xbc, 0xe4, 0x3c, 0xf4, 0x18, 0xc0, + 0xf5, 0x47, 0xd4, 0x99, 0xeb, 0x8f, 0x47, 0x6b, 0x38, 0x2f, 0x30, 0xd1, 0x1d, 0x77, 0x60, 0x43, + 0x3d, 0x97, 0x92, 0x92, 0x54, 0x94, 0x82, 0x42, 0x05, 0x09, 0x41, 0x6a, 0x12, 0xda, 0xe5, 0xbc, + 0x92, 0xf1, 0x05, 0x3a, 0x85, 0xc2, 0x88, 0x30, 0x62, 0xbd, 0xf5, 0x43, 0x97, 0x30, 0x71, 0xa8, + 0xe2, 0x7e, 0x75, 0x65, 0x03, 0x5a, 0xdc, 0x53, 0xb5, 0x49, 0x18, 0x79, 0x25, 0xb4, 0x30, 0x8c, + 0xe2, 0xdf, 0x7c, 0x9a, 0xb2, 0xb9, 0xdc, 0x0a, 0x08, 0x7b, 0x27, 0xcb, 0x37, 0x8f, 0x41, 0x40, + 0x5d, 0x8e, 0x70, 0x82, 0x2f, 0xc2, 0x2b, 0x18, 0xea, 0xc9, 0x01, 0x09, 0x71, 0x06, 0xda, 0x05, + 0x8d, 0xf7, 0xe1, 0x85, 0xf1, 0x49, 0x4e, 0x44, 0x45, 0x97, 0x5c, 0xfc, 0x62, 0x6e, 0x82, 0x9a, + 0x4d, 0x17, 0xeb, 0x0b, 0xd3, 0xc5, 0x8a, 0x21, 0x22, 0xb7, 0x72, 0x88, 0x78, 0x0d, 0x30, 0x3b, + 0x06, 0x7a, 0x00, 0xf7, 0x9a, 0x75, 0xb3, 0x6e, 0xbd, 0x3a, 0xc5, 0xed, 0xba, 0xb9, 0xd4, 0x2b, + 0x73, 0x90, 0x36, 0x8d, 0x6f, 0x4d, 0x39, 0x51, 0x98, 0xaf, 0x2c, 0x6c, 0x34, 0x4e, 0x71, 0x53, + 0x4b, 0xf2, 0xf6, 0x16, 0x2f, 0xad, 0xc3, 0x37, 0xad, 0xae, 0x96, 0x3a, 0x28, 0xc1, 0xa6, 0xcc, + 0x97, 0x72, 0xaf, 0xff, 0x25, 0x01, 0xda, 0x2c, 0x80, 0xaa, 0x98, 0x97, 0x22, 0x91, 0xb8, 0x12, + 0x89, 0xe7, 0xa0, 0x05, 0xb1, 0x92, 0x8a, 0x44, 0x52, 0x44, 0xa2, 0x34, 0xc3, 0x65, 0x28, 0x1e, + 0x43, 0x81, 0x86, 0xa1, 0x3f, 0x8d, 0x57, 0x4a, 0xb0, 0x40, 0x40, 0x92, 0xf0, 0x08, 0xc0, 0xf3, + 0x47, 0xd4, 0x7a, 0xe7, 0x4f, 0x42, 0x39, 0x1e, 0x24, 0x70, 0x9e, 0x23, 0x47, 0x1c, 0xd0, 0xff, + 0x93, 0x81, 0xd4, 0xb1, 0x3f, 0x40, 0x5b, 0xc0, 0x27, 0xb1, 0x59, 0x87, 0xcd, 0x9c, 0xf9, 0x83, + 0xd6, 0x08, 0x1d, 0x43, 0x31, 0x6e, 0x0e, 0x22, 0x97, 0x62, 0x1f, 0xd7, 0xcc, 0x31, 0x0b, 0x43, + 0xf9, 0xd1, 0x1a, 0x8e, 0xfb, 0x8a, 0x2c, 0xe6, 0xee, 0xc2, 0xa9, 0xa4, 0x35, 0xd9, 0x46, 0x77, + 0x3e, 0xa1, 0xee, 0x8e, 0xd6, 0xe6, 0x0f, 0x2f, 0x2d, 0x7e, 0x0d, 0x85, 0x61, 0x48, 0x09, 0xe3, + 0xdf, 0x0b, 0xae, 0x1c, 0x11, 0x0a, 0xfb, 0x95, 0xa9, 0xb1, 0xe9, 0x77, 0x47, 0xd5, 0x9c, 0x7e, + 0x77, 0x60, 0x90, 0x74, 0x0e, 0xa0, 0xaf, 0x00, 0x22, 0x46, 0x42, 0x26, 0x75, 0x33, 0x1f, 0xd5, + 0xcd, 0x0b, 0xb6, 0x50, 0xfd, 0x31, 0xe4, 0xa8, 0x37, 0x92, 0x8a, 0xd9, 0x8f, 0x2a, 0xae, 0x53, + 0x6f, 0x24, 0xd4, 0xbe, 0x80, 0x4c, 0xc4, 0x08, 0x9b, 0x3e, 0xf7, 0x8f, 0x56, 0x9d, 0xfa, 0xd8, + 0x1f, 0x54, 0x7b, 0x9c, 0x84, 0x25, 0x97, 0xb7, 0x67, 0x99, 0x60, 0x97, 0x46, 0x11, 0x19, 0xc7, + 0x43, 0xbd, 0x00, 0xdb, 0x12, 0x43, 0x6d, 0x28, 0xc5, 0x69, 0x92, 0x75, 0x24, 0x6e, 0x7b, 0x61, + 0x5f, 0xbf, 0x29, 0x4f, 0xb2, 0x1c, 0x8f, 0x12, 0x38, 0xce, 0xb1, 0x2a, 0xd0, 0x1e, 0xdc, 0x9a, + 0xcb, 0x94, 0x32, 0x08, 0xc2, 0xe0, 0xd3, 0x9b, 0x53, 0x15, 0x9b, 0x9c, 0x4b, 0xb5, 0xc4, 0xf4, + 0xdf, 0x27, 0x20, 0x23, 0x4e, 0xc6, 0xe7, 0x85, 0x9e, 0x59, 0x37, 0x57, 0x4c, 0x25, 0x3f, 0xef, + 0x1b, 0x7d, 0xa3, 0x19, 0x4f, 0xef, 0xdd, 0x3a, 0x6e, 0x75, 0x0e, 0xb5, 0x24, 0x1f, 0x52, 0x70, + 0xbf, 0xd3, 0xe1, 0x0b, 0x31, 0xca, 0xf7, 0xfa, 0x8d, 0x86, 0x61, 0x34, 0x8d, 0xa6, 0x96, 0xe6, + 0x6a, 0xaf, 0xea, 0xad, 0x13, 0xa3, 0xa9, 0x65, 0xf8, 0x47, 0x40, 0xa3, 0xde, 0x69, 0x18, 0x27, + 0x27, 0x9c, 0x9a, 0xe5, 0x54, 0xb5, 0x36, 0x9a, 0xda, 0xfa, 0xc1, 0x3a, 0x64, 0x44, 0xd9, 0x1d, + 0xe4, 0x20, 0x2b, 0x4f, 0xa5, 0xf7, 0x41, 0x6b, 0x88, 0x9a, 0x38, 0xf6, 0x07, 0x98, 0xfe, 0x76, + 0x42, 0x23, 0xd1, 0x5e, 0x02, 0x12, 0x52, 0xf5, 0xba, 0xe4, 0xb1, 0x5a, 0xa1, 0xe7, 0x90, 0xe2, + 0x9d, 0x5c, 0xde, 0x80, 0x7b, 0xd7, 0x64, 0x0f, 0x73, 0x8e, 0xfe, 0x01, 0x4a, 0x27, 0x76, 0xc4, + 0x8e, 0xfd, 0x41, 0xf4, 0x31, 0xab, 0x77, 0x21, 0xfb, 0xd6, 0x76, 0x18, 0x0d, 0xd5, 0x43, 0xa8, + 0x56, 0xfc, 0xe2, 0x06, 0xfc, 0x6b, 0x8f, 0xf9, 0xef, 0xa9, 0xa7, 0x3e, 0x39, 0xf3, 0x1c, 0x31, + 0x39, 0xc0, 0xa7, 0x56, 0x21, 0x8e, 0xec, 0xef, 0x64, 0xf5, 0x66, 0x70, 0x8e, 0x03, 0x3d, 0xfb, + 0x3b, 0x3e, 0x11, 0x6a, 0x33, 0xf7, 0x51, 0xe0, 0x7b, 0x11, 0x45, 0x9f, 0x43, 0xfa, 0xcc, 0x1f, + 0x44, 0xe5, 0x84, 0x78, 0x0c, 0xaf, 0xdd, 0xbe, 0x20, 0xa1, 0x67, 0x50, 0xf2, 0xe8, 0x05, 0x6f, + 0x50, 0xf1, 0x0e, 0xe4, 0xee, 0x36, 0x39, 0xdc, 0x9d, 0xee, 0x42, 0xdf, 0x81, 0xcd, 0x43, 0xca, + 0xe6, 0x62, 0x87, 0x20, 0x3d, 0x37, 0xcb, 0x8b, 0xdf, 0xfa, 0x33, 0xd0, 0x1a, 0xc4, 0x1b, 0x52, + 0xe7, 0x66, 0xde, 0xfe, 0xbf, 0x52, 0x00, 0xc7, 0xfe, 0xa0, 0x27, 0xff, 0xab, 0x40, 0x13, 0xc8, + 0xc7, 0xa9, 0x41, 0x2b, 0xeb, 0x6e, 0x39, 0x73, 0x95, 0xeb, 0x4e, 0xa5, 0x3f, 0xff, 0xc3, 0xdf, + 0xff, 0xf9, 0xe7, 0xe4, 0x8e, 0xfe, 0xb0, 0x76, 0xbe, 0x57, 0xfb, 0x5e, 0x46, 0xfe, 0x9b, 0x20, + 0xf4, 0xf9, 0xec, 0x12, 0xd5, 0x5e, 0x7c, 0xa8, 0xf1, 0x53, 0xbf, 0xe4, 0xa9, 0x43, 0xdf, 0x43, + 0x6e, 0x1a, 0x3b, 0xb4, 0xb2, 0x31, 0x2d, 0x25, 0xb6, 0xf2, 0xf4, 0x66, 0x92, 0x0c, 0xbf, 0xfe, + 0x54, 0xec, 0xe0, 0x33, 0x74, 0xe3, 0x0e, 0xd0, 0x19, 0x64, 0x65, 0x3c, 0xd1, 0xca, 0x0e, 0xbb, + 0x10, 0xeb, 0xeb, 0x4f, 0xbb, 0xe8, 0x8b, 0xc7, 0x76, 0xce, 0x93, 0x70, 0x54, 0x7b, 0xf1, 0x01, + 0x5d, 0x42, 0x3e, 0x4e, 0xcb, 0x35, 0xf1, 0x5d, 0xca, 0x5a, 0xe5, 0xee, 0x95, 0x36, 0x67, 0xb8, + 0x01, 0xbb, 0xd4, 0xab, 0xc2, 0xe1, 0xae, 0xbe, 0x73, 0x93, 0xc3, 0x97, 0x43, 0x61, 0xee, 0x65, + 0xe2, 0xc5, 0x01, 0x85, 0xca, 0xd0, 0x77, 0xaf, 0xb8, 0x24, 0x81, 0x5d, 0x3d, 0xdf, 0x3b, 0x28, + 0xcd, 0x8a, 0xa0, 0xcb, 0xfd, 0x74, 0x13, 0x6f, 0xbe, 0x54, 0xd4, 0xb1, 0xef, 0x10, 0x6f, 0x5c, + 0xf5, 0xc3, 0x71, 0x6d, 0x4c, 0x3d, 0xb1, 0x8b, 0x9a, 0x14, 0x91, 0xc0, 0x8e, 0xe6, 0xff, 0xf6, + 0xfa, 0xda, 0x75, 0x06, 0x59, 0x41, 0xf8, 0xe2, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x7b, + 0x72, 0xd5, 0x16, 0x13, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/model_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/model_service.pb.go new file mode 100644 index 0000000..7caaf42 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/model_service.pb.go @@ -0,0 +1,1050 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1/model_service.proto +// DO NOT EDIT! + +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Represents a machine learning solution. +// +// A model can have multiple versions, each of which is a deployed, trained +// model ready to receive prediction requests. The model itself is just a +// container. +type Model struct { + // Required. The name specified for the model when it was created. + // + // The model name must be unique within the project it is created in. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The description specified for the model when it was created. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Output only. The default version of the model. This version will be used to + // handle prediction requests that do not specify a version. + // + // You can change the default version by calling + // [projects.methods.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault). + DefaultVersion *Version `protobuf:"bytes,3,opt,name=default_version,json=defaultVersion" json:"default_version,omitempty"` + // Optional. The list of regions where the model is going to be deployed. + // Currently only one region per model is supported. + // Defaults to 'us-central1' if nothing is set. + Regions []string `protobuf:"bytes,4,rep,name=regions" json:"regions,omitempty"` + // Optional. If true, enables StackDriver Logging for online prediction. + // Default is false. + OnlinePredictionLogging bool `protobuf:"varint,5,opt,name=online_prediction_logging,json=onlinePredictionLogging" json:"online_prediction_logging,omitempty"` +} + +func (m *Model) Reset() { *m = Model{} } +func (m *Model) String() string { return proto.CompactTextString(m) } +func (*Model) ProtoMessage() {} +func (*Model) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Model) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Model) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Model) GetDefaultVersion() *Version { + if m != nil { + return m.DefaultVersion + } + return nil +} + +func (m *Model) GetRegions() []string { + if m != nil { + return m.Regions + } + return nil +} + +func (m *Model) GetOnlinePredictionLogging() bool { + if m != nil { + return m.OnlinePredictionLogging + } + return false +} + +// Represents a version of the model. +// +// Each version is a trained model deployed in the cloud, ready to handle +// prediction requests. A model can have multiple versions. You can get +// information about all of the versions of a given model by calling +// [projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list). +type Version struct { + // Required.The name specified for the version when it was created. + // + // The version name must be unique within the model it is created in. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The description specified for the version when it was created. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Output only. If true, this version will be used to handle prediction + // requests that do not specify a version. + // + // You can change the default version by calling + // [projects.methods.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault). + IsDefault bool `protobuf:"varint,3,opt,name=is_default,json=isDefault" json:"is_default,omitempty"` + // Required. The Google Cloud Storage location of the trained model used to + // create the version. See the + // [overview of model deployment](/ml/docs/concepts/deployment-overview) for + // more informaiton. + // + // When passing Version to + // [projects.models.versions.create](/ml/reference/rest/v1/projects.models.versions/create) + // the model service uses the specified location as the source of the model. + // Once deployed, the model version is hosted by the prediction service, so + // this location is useful only as a historical record. + DeploymentUri string `protobuf:"bytes,4,opt,name=deployment_uri,json=deploymentUri" json:"deployment_uri,omitempty"` + // Output only. The time the version was created. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. The time the version was last used for prediction. + LastUseTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=last_use_time,json=lastUseTime" json:"last_use_time,omitempty"` + // Optional. The Google Cloud ML runtime version to use for this deployment. + // If not set, Google Cloud ML will choose a version. + RuntimeVersion string `protobuf:"bytes,8,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` + // Optional. Manually select the number of nodes to use for serving the + // model. If unset (i.e., by default), the number of nodes used to serve + // the model automatically scales with traffic. However, care should be + // taken to ramp up traffic according to the model's ability to scale. If + // your model needs to handle bursts of traffic beyond it's ability to + // scale, it is recommended you set this field appropriately. + ManualScaling *ManualScaling `protobuf:"bytes,9,opt,name=manual_scaling,json=manualScaling" json:"manual_scaling,omitempty"` +} + +func (m *Version) Reset() { *m = Version{} } +func (m *Version) String() string { return proto.CompactTextString(m) } +func (*Version) ProtoMessage() {} +func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *Version) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Version) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Version) GetIsDefault() bool { + if m != nil { + return m.IsDefault + } + return false +} + +func (m *Version) GetDeploymentUri() string { + if m != nil { + return m.DeploymentUri + } + return "" +} + +func (m *Version) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Version) GetLastUseTime() *google_protobuf2.Timestamp { + if m != nil { + return m.LastUseTime + } + return nil +} + +func (m *Version) GetRuntimeVersion() string { + if m != nil { + return m.RuntimeVersion + } + return "" +} + +func (m *Version) GetManualScaling() *ManualScaling { + if m != nil { + return m.ManualScaling + } + return nil +} + +// Options for manually scaling a model. +type ManualScaling struct { + // The number of nodes to allocate for this model. These nodes are always up, + // starting from the time the model is deployed, so the cost of operating + // this model will be proportional to nodes * number of hours since + // deployment. + Nodes int32 `protobuf:"varint,1,opt,name=nodes" json:"nodes,omitempty"` +} + +func (m *ManualScaling) Reset() { *m = ManualScaling{} } +func (m *ManualScaling) String() string { return proto.CompactTextString(m) } +func (*ManualScaling) ProtoMessage() {} +func (*ManualScaling) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ManualScaling) GetNodes() int32 { + if m != nil { + return m.Nodes + } + return 0 +} + +// Request message for the CreateModel method. +type CreateModelRequest struct { + // Required. The project name. + // + // Authorization: requires `Editor` role on the specified project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The model to create. + Model *Model `protobuf:"bytes,2,opt,name=model" json:"model,omitempty"` +} + +func (m *CreateModelRequest) Reset() { *m = CreateModelRequest{} } +func (m *CreateModelRequest) String() string { return proto.CompactTextString(m) } +func (*CreateModelRequest) ProtoMessage() {} +func (*CreateModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *CreateModelRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateModelRequest) GetModel() *Model { + if m != nil { + return m.Model + } + return nil +} + +// Request message for the ListModels method. +type ListModelsRequest struct { + // Required. The name of the project whose models are to be listed. + // + // Authorization: requires `Viewer` role on the specified project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. A page token to request the next page of results. + // + // You get the token from the `next_page_token` field of the response from + // the previous call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. The number of models to retrieve per "page" of results. If there + // are more remaining results than this number, the response message will + // contain a valid value in the `next_page_token` field. + // + // The default value is 20, and the maximum page size is 100. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListModelsRequest) Reset() { *m = ListModelsRequest{} } +func (m *ListModelsRequest) String() string { return proto.CompactTextString(m) } +func (*ListModelsRequest) ProtoMessage() {} +func (*ListModelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *ListModelsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListModelsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListModelsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for the ListModels method. +type ListModelsResponse struct { + // The list of models. + Models []*Model `protobuf:"bytes,1,rep,name=models" json:"models,omitempty"` + // Optional. Pass this token as the `page_token` field of the request for a + // subsequent call. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListModelsResponse) Reset() { *m = ListModelsResponse{} } +func (m *ListModelsResponse) String() string { return proto.CompactTextString(m) } +func (*ListModelsResponse) ProtoMessage() {} +func (*ListModelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *ListModelsResponse) GetModels() []*Model { + if m != nil { + return m.Models + } + return nil +} + +func (m *ListModelsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for the GetModel method. +type GetModelRequest struct { + // Required. The name of the model. + // + // Authorization: requires `Viewer` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetModelRequest) Reset() { *m = GetModelRequest{} } +func (m *GetModelRequest) String() string { return proto.CompactTextString(m) } +func (*GetModelRequest) ProtoMessage() {} +func (*GetModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *GetModelRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for the DeleteModel method. +type DeleteModelRequest struct { + // Required. The name of the model. + // + // Authorization: requires `Editor` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteModelRequest) Reset() { *m = DeleteModelRequest{} } +func (m *DeleteModelRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteModelRequest) ProtoMessage() {} +func (*DeleteModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *DeleteModelRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Uploads the provided trained model version to Cloud Machine Learning. +type CreateVersionRequest struct { + // Required. The name of the model. + // + // Authorization: requires `Editor` role on the parent project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The version details. + Version *Version `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` +} + +func (m *CreateVersionRequest) Reset() { *m = CreateVersionRequest{} } +func (m *CreateVersionRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVersionRequest) ProtoMessage() {} +func (*CreateVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *CreateVersionRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateVersionRequest) GetVersion() *Version { + if m != nil { + return m.Version + } + return nil +} + +// Request message for the ListVersions method. +type ListVersionsRequest struct { + // Required. The name of the model for which to list the version. + // + // Authorization: requires `Viewer` role on the parent project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. A page token to request the next page of results. + // + // You get the token from the `next_page_token` field of the response from + // the previous call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. The number of versions to retrieve per "page" of results. If + // there are more remaining results than this number, the response message + // will contain a valid value in the `next_page_token` field. + // + // The default value is 20, and the maximum page size is 100. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListVersionsRequest) Reset() { *m = ListVersionsRequest{} } +func (m *ListVersionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListVersionsRequest) ProtoMessage() {} +func (*ListVersionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *ListVersionsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListVersionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListVersionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for the ListVersions method. +type ListVersionsResponse struct { + // The list of versions. + Versions []*Version `protobuf:"bytes,1,rep,name=versions" json:"versions,omitempty"` + // Optional. Pass this token as the `page_token` field of the request for a + // subsequent call. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListVersionsResponse) Reset() { *m = ListVersionsResponse{} } +func (m *ListVersionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListVersionsResponse) ProtoMessage() {} +func (*ListVersionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *ListVersionsResponse) GetVersions() []*Version { + if m != nil { + return m.Versions + } + return nil +} + +func (m *ListVersionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for the GetVersion method. +type GetVersionRequest struct { + // Required. The name of the version. + // + // Authorization: requires `Viewer` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetVersionRequest) Reset() { *m = GetVersionRequest{} } +func (m *GetVersionRequest) String() string { return proto.CompactTextString(m) } +func (*GetVersionRequest) ProtoMessage() {} +func (*GetVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *GetVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for the DeleteVerionRequest method. +type DeleteVersionRequest struct { + // Required. The name of the version. You can get the names of all the + // versions of a model by calling + // [projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list). + // + // Authorization: requires `Editor` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteVersionRequest) Reset() { *m = DeleteVersionRequest{} } +func (m *DeleteVersionRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVersionRequest) ProtoMessage() {} +func (*DeleteVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *DeleteVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for the SetDefaultVersion request. +type SetDefaultVersionRequest struct { + // Required. The name of the version to make the default for the model. You + // can get the names of all the versions of a model by calling + // [projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list). + // + // Authorization: requires `Editor` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *SetDefaultVersionRequest) Reset() { *m = SetDefaultVersionRequest{} } +func (m *SetDefaultVersionRequest) String() string { return proto.CompactTextString(m) } +func (*SetDefaultVersionRequest) ProtoMessage() {} +func (*SetDefaultVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *SetDefaultVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*Model)(nil), "google.cloud.ml.v1.Model") + proto.RegisterType((*Version)(nil), "google.cloud.ml.v1.Version") + proto.RegisterType((*ManualScaling)(nil), "google.cloud.ml.v1.ManualScaling") + proto.RegisterType((*CreateModelRequest)(nil), "google.cloud.ml.v1.CreateModelRequest") + proto.RegisterType((*ListModelsRequest)(nil), "google.cloud.ml.v1.ListModelsRequest") + proto.RegisterType((*ListModelsResponse)(nil), "google.cloud.ml.v1.ListModelsResponse") + proto.RegisterType((*GetModelRequest)(nil), "google.cloud.ml.v1.GetModelRequest") + proto.RegisterType((*DeleteModelRequest)(nil), "google.cloud.ml.v1.DeleteModelRequest") + proto.RegisterType((*CreateVersionRequest)(nil), "google.cloud.ml.v1.CreateVersionRequest") + proto.RegisterType((*ListVersionsRequest)(nil), "google.cloud.ml.v1.ListVersionsRequest") + proto.RegisterType((*ListVersionsResponse)(nil), "google.cloud.ml.v1.ListVersionsResponse") + proto.RegisterType((*GetVersionRequest)(nil), "google.cloud.ml.v1.GetVersionRequest") + proto.RegisterType((*DeleteVersionRequest)(nil), "google.cloud.ml.v1.DeleteVersionRequest") + proto.RegisterType((*SetDefaultVersionRequest)(nil), "google.cloud.ml.v1.SetDefaultVersionRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ModelService service + +type ModelServiceClient interface { + // Creates a model which will later contain one or more versions. + // + // You must add at least one version before you can request predictions from + // the model. Add versions by calling + // [projects.models.versions.create](/ml/reference/rest/v1/projects.models.versions/create). + CreateModel(ctx context.Context, in *CreateModelRequest, opts ...grpc.CallOption) (*Model, error) + // Lists the models in a project. + // + // Each project can contain multiple models, and each model can have multiple + // versions. + ListModels(ctx context.Context, in *ListModelsRequest, opts ...grpc.CallOption) (*ListModelsResponse, error) + // Gets information about a model, including its name, the description (if + // set), and the default version (if at least one version of the model has + // been deployed). + GetModel(ctx context.Context, in *GetModelRequest, opts ...grpc.CallOption) (*Model, error) + // Deletes a model. + // + // You can only delete a model if there are no versions in it. You can delete + // versions by calling + // [projects.models.versions.delete](/ml/reference/rest/v1/projects.models.versions/delete). + DeleteModel(ctx context.Context, in *DeleteModelRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Creates a new version of a model from a trained TensorFlow model. + // + // If the version created in the cloud by this call is the first deployed + // version of the specified model, it will be made the default version of the + // model. When you add a version to a model that already has one or more + // versions, the default version does not automatically change. If you want a + // new version to be the default, you must call + // [projects.models.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault). + CreateVersion(ctx context.Context, in *CreateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Gets basic information about all the versions of a model. + // + // If you expect that a model has a lot of versions, or if you need to handle + // only a limited number of results at a time, you can request that the list + // be retrieved in batches (called pages): + ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*ListVersionsResponse, error) + // Gets information about a model version. + // + // Models can have multiple versions. You can call + // [projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list) + // to get the same information that this method returns for all of the + // versions of a model. + GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*Version, error) + // Deletes a model version. + // + // Each model can have multiple versions deployed and in use at any given + // time. Use this method to remove a single version. + // + // Note: You cannot delete the version that is set as the default version + // of the model unless it is the only remaining version. + DeleteVersion(ctx context.Context, in *DeleteVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Designates a version to be the default for the model. + // + // The default version is used for prediction requests made against the model + // that don't specify a version. + // + // The first version to be created for a model is automatically set as the + // default. You must make any subsequent changes to the default version + // setting manually using this method. + SetDefaultVersion(ctx context.Context, in *SetDefaultVersionRequest, opts ...grpc.CallOption) (*Version, error) +} + +type modelServiceClient struct { + cc *grpc.ClientConn +} + +func NewModelServiceClient(cc *grpc.ClientConn) ModelServiceClient { + return &modelServiceClient{cc} +} + +func (c *modelServiceClient) CreateModel(ctx context.Context, in *CreateModelRequest, opts ...grpc.CallOption) (*Model, error) { + out := new(Model) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/CreateModel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) ListModels(ctx context.Context, in *ListModelsRequest, opts ...grpc.CallOption) (*ListModelsResponse, error) { + out := new(ListModelsResponse) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/ListModels", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) GetModel(ctx context.Context, in *GetModelRequest, opts ...grpc.CallOption) (*Model, error) { + out := new(Model) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/GetModel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) DeleteModel(ctx context.Context, in *DeleteModelRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/DeleteModel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) CreateVersion(ctx context.Context, in *CreateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/CreateVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*ListVersionsResponse, error) { + out := new(ListVersionsResponse) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/ListVersions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*Version, error) { + out := new(Version) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/GetVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) DeleteVersion(ctx context.Context, in *DeleteVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/DeleteVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) SetDefaultVersion(ctx context.Context, in *SetDefaultVersionRequest, opts ...grpc.CallOption) (*Version, error) { + out := new(Version) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ModelService/SetDefaultVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ModelService service + +type ModelServiceServer interface { + // Creates a model which will later contain one or more versions. + // + // You must add at least one version before you can request predictions from + // the model. Add versions by calling + // [projects.models.versions.create](/ml/reference/rest/v1/projects.models.versions/create). + CreateModel(context.Context, *CreateModelRequest) (*Model, error) + // Lists the models in a project. + // + // Each project can contain multiple models, and each model can have multiple + // versions. + ListModels(context.Context, *ListModelsRequest) (*ListModelsResponse, error) + // Gets information about a model, including its name, the description (if + // set), and the default version (if at least one version of the model has + // been deployed). + GetModel(context.Context, *GetModelRequest) (*Model, error) + // Deletes a model. + // + // You can only delete a model if there are no versions in it. You can delete + // versions by calling + // [projects.models.versions.delete](/ml/reference/rest/v1/projects.models.versions/delete). + DeleteModel(context.Context, *DeleteModelRequest) (*google_longrunning.Operation, error) + // Creates a new version of a model from a trained TensorFlow model. + // + // If the version created in the cloud by this call is the first deployed + // version of the specified model, it will be made the default version of the + // model. When you add a version to a model that already has one or more + // versions, the default version does not automatically change. If you want a + // new version to be the default, you must call + // [projects.models.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault). + CreateVersion(context.Context, *CreateVersionRequest) (*google_longrunning.Operation, error) + // Gets basic information about all the versions of a model. + // + // If you expect that a model has a lot of versions, or if you need to handle + // only a limited number of results at a time, you can request that the list + // be retrieved in batches (called pages): + ListVersions(context.Context, *ListVersionsRequest) (*ListVersionsResponse, error) + // Gets information about a model version. + // + // Models can have multiple versions. You can call + // [projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list) + // to get the same information that this method returns for all of the + // versions of a model. + GetVersion(context.Context, *GetVersionRequest) (*Version, error) + // Deletes a model version. + // + // Each model can have multiple versions deployed and in use at any given + // time. Use this method to remove a single version. + // + // Note: You cannot delete the version that is set as the default version + // of the model unless it is the only remaining version. + DeleteVersion(context.Context, *DeleteVersionRequest) (*google_longrunning.Operation, error) + // Designates a version to be the default for the model. + // + // The default version is used for prediction requests made against the model + // that don't specify a version. + // + // The first version to be created for a model is automatically set as the + // default. You must make any subsequent changes to the default version + // setting manually using this method. + SetDefaultVersion(context.Context, *SetDefaultVersionRequest) (*Version, error) +} + +func RegisterModelServiceServer(s *grpc.Server, srv ModelServiceServer) { + s.RegisterService(&_ModelService_serviceDesc, srv) +} + +func _ModelService_CreateModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateModelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).CreateModel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/CreateModel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).CreateModel(ctx, req.(*CreateModelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_ListModels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListModelsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).ListModels(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/ListModels", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).ListModels(ctx, req.(*ListModelsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_GetModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetModelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).GetModel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/GetModel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).GetModel(ctx, req.(*GetModelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_DeleteModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteModelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).DeleteModel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/DeleteModel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).DeleteModel(ctx, req.(*DeleteModelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_CreateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).CreateVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/CreateVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).CreateVersion(ctx, req.(*CreateVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_ListVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVersionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).ListVersions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/ListVersions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).ListVersions(ctx, req.(*ListVersionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_GetVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).GetVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/GetVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).GetVersion(ctx, req.(*GetVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_DeleteVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).DeleteVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/DeleteVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).DeleteVersion(ctx, req.(*DeleteVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_SetDefaultVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetDefaultVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).SetDefaultVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ModelService/SetDefaultVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).SetDefaultVersion(ctx, req.(*SetDefaultVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ModelService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.ml.v1.ModelService", + HandlerType: (*ModelServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateModel", + Handler: _ModelService_CreateModel_Handler, + }, + { + MethodName: "ListModels", + Handler: _ModelService_ListModels_Handler, + }, + { + MethodName: "GetModel", + Handler: _ModelService_GetModel_Handler, + }, + { + MethodName: "DeleteModel", + Handler: _ModelService_DeleteModel_Handler, + }, + { + MethodName: "CreateVersion", + Handler: _ModelService_CreateVersion_Handler, + }, + { + MethodName: "ListVersions", + Handler: _ModelService_ListVersions_Handler, + }, + { + MethodName: "GetVersion", + Handler: _ModelService_GetVersion_Handler, + }, + { + MethodName: "DeleteVersion", + Handler: _ModelService_DeleteVersion_Handler, + }, + { + MethodName: "SetDefaultVersion", + Handler: _ModelService_SetDefaultVersion_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/ml/v1/model_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/ml/v1/model_service.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 996 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0x96, 0xdb, 0xa6, 0x4d, 0x5e, 0x36, 0xad, 0x3a, 0x14, 0xc8, 0x66, 0x29, 0x04, 0xaf, 0xda, + 0x86, 0x00, 0xb6, 0x52, 0x8a, 0x10, 0x59, 0x01, 0xd2, 0x52, 0x69, 0x39, 0xec, 0x8a, 0xca, 0xdd, + 0xe5, 0x80, 0x84, 0x2c, 0x6f, 0x32, 0x6b, 0x06, 0xec, 0x19, 0xe3, 0x19, 0x07, 0x58, 0x58, 0x21, + 0xc1, 0x91, 0x23, 0xdc, 0xf9, 0xa3, 0x38, 0x71, 0xe7, 0xc6, 0x99, 0x3b, 0x9a, 0x1f, 0x4e, 0xed, + 0xc4, 0x89, 0x0b, 0x12, 0x37, 0xcf, 0x9b, 0xef, 0xcd, 0xfb, 0xe6, 0x7d, 0xef, 0xbd, 0x31, 0x1c, + 0x87, 0x8c, 0x85, 0x11, 0x76, 0x27, 0x11, 0xcb, 0xa6, 0x6e, 0x1c, 0xb9, 0xb3, 0x91, 0x1b, 0xb3, + 0x29, 0x8e, 0x7c, 0x8e, 0xd3, 0x19, 0x99, 0x60, 0x27, 0x49, 0x99, 0x60, 0x08, 0x69, 0x9c, 0xa3, + 0x70, 0x4e, 0x1c, 0x39, 0xb3, 0x51, 0xef, 0x25, 0xe3, 0x1b, 0x24, 0xc4, 0x0d, 0x28, 0x65, 0x22, + 0x10, 0x84, 0x51, 0xae, 0x3d, 0x7a, 0xcf, 0x17, 0x77, 0x33, 0xf1, 0xb9, 0x31, 0xdf, 0x36, 0xe6, + 0x88, 0xd1, 0x30, 0xcd, 0x28, 0x25, 0x34, 0x74, 0x59, 0x82, 0xd3, 0x92, 0xef, 0x2b, 0x06, 0xa4, + 0x56, 0x8f, 0xb3, 0x27, 0xae, 0x20, 0x31, 0xe6, 0x22, 0x88, 0x13, 0x0d, 0xb0, 0xff, 0xb0, 0xa0, + 0xf1, 0x40, 0xd2, 0x44, 0x08, 0xb6, 0x68, 0x10, 0xe3, 0xae, 0xd5, 0xb7, 0x06, 0x2d, 0x4f, 0x7d, + 0xa3, 0x3e, 0xb4, 0xa7, 0x98, 0x4f, 0x52, 0x92, 0xc8, 0x43, 0xbb, 0x1b, 0x6a, 0xab, 0x68, 0x42, + 0xe7, 0xb0, 0x37, 0xc5, 0x4f, 0x82, 0x2c, 0x12, 0xfe, 0x0c, 0xa7, 0x5c, 0xa2, 0x36, 0xfb, 0xd6, + 0xa0, 0x7d, 0x7a, 0xcb, 0x59, 0xbe, 0xa8, 0xf3, 0x89, 0x86, 0x78, 0xbb, 0xc6, 0xc7, 0xac, 0x51, + 0x17, 0x76, 0x52, 0x1c, 0x4a, 0xde, 0xdd, 0xad, 0xfe, 0xe6, 0xa0, 0xe5, 0xe5, 0x4b, 0x34, 0x86, + 0x9b, 0x8c, 0x46, 0x84, 0x62, 0x3f, 0x49, 0xf1, 0x94, 0x4c, 0x64, 0x50, 0x3f, 0x62, 0x61, 0x48, + 0x68, 0xd8, 0x6d, 0xf4, 0xad, 0x41, 0xd3, 0x7b, 0x51, 0x03, 0x2e, 0xe6, 0xfb, 0xf7, 0xf5, 0xb6, + 0xfd, 0xf7, 0x06, 0xec, 0xe4, 0x11, 0xfe, 0xdb, 0xed, 0x0e, 0x01, 0x08, 0xf7, 0x0d, 0x59, 0x75, + 0xb1, 0xa6, 0xd7, 0x22, 0xfc, 0x5c, 0x1b, 0xd0, 0x11, 0xec, 0x4e, 0x71, 0x12, 0xb1, 0x6f, 0x63, + 0x4c, 0x85, 0x9f, 0xa5, 0xa4, 0xbb, 0xa5, 0xce, 0xe8, 0x5c, 0x59, 0x1f, 0xa5, 0x04, 0xdd, 0x81, + 0xf6, 0x24, 0xc5, 0x81, 0xc0, 0xbe, 0xcc, 0xbe, 0x62, 0xdd, 0x3e, 0xed, 0xe5, 0xf9, 0xc9, 0xa5, + 0x71, 0x1e, 0xe6, 0xd2, 0x78, 0xa0, 0xe1, 0xd2, 0x80, 0xde, 0x87, 0x4e, 0x14, 0x70, 0xe1, 0x67, + 0xdc, 0xb8, 0x6f, 0xd7, 0xba, 0xb7, 0xa5, 0xc3, 0x23, 0xae, 0xfd, 0x4f, 0x60, 0x2f, 0xcd, 0xa8, + 0xf4, 0x9c, 0x0b, 0xd4, 0x54, 0x24, 0x77, 0x8d, 0x39, 0xcf, 0xd0, 0x47, 0xb0, 0x1b, 0x07, 0x34, + 0x0b, 0x22, 0x9f, 0x4f, 0x82, 0x48, 0xa6, 0xb7, 0xa5, 0x22, 0xbd, 0x5a, 0x25, 0xe4, 0x03, 0x85, + 0xbc, 0xd4, 0x40, 0xaf, 0x13, 0x17, 0x97, 0xf6, 0x11, 0x74, 0x4a, 0xfb, 0xe8, 0x00, 0x1a, 0x94, + 0x4d, 0x31, 0x57, 0xd9, 0x6f, 0x78, 0x7a, 0x61, 0x7f, 0x06, 0xe8, 0x43, 0x75, 0x4f, 0x55, 0x7f, + 0x1e, 0xfe, 0x2a, 0xc3, 0x5c, 0xa0, 0x17, 0x60, 0x3b, 0x09, 0x52, 0x4c, 0x85, 0x91, 0xca, 0xac, + 0x90, 0x0b, 0x0d, 0xd5, 0x4e, 0x4a, 0xa6, 0xf6, 0xe9, 0xcd, 0x4a, 0x56, 0xea, 0x20, 0x8d, 0xb3, + 0x43, 0xd8, 0xbf, 0x4f, 0xb8, 0x50, 0x36, 0x5e, 0x77, 0xfa, 0x21, 0x40, 0x12, 0x84, 0xd8, 0x17, + 0xec, 0x4b, 0x4c, 0x8d, 0x8a, 0x2d, 0x69, 0x79, 0x28, 0x0d, 0xe8, 0x16, 0xa8, 0x85, 0xcf, 0xc9, + 0x53, 0xad, 0x5f, 0xc3, 0x6b, 0x4a, 0xc3, 0x25, 0x79, 0x8a, 0x6d, 0x06, 0xa8, 0x18, 0x88, 0x27, + 0x8c, 0x72, 0x8c, 0x46, 0xb0, 0xad, 0x78, 0xc8, 0x4b, 0x6f, 0xae, 0x27, 0x6c, 0x80, 0xe8, 0x18, + 0xf6, 0x28, 0xfe, 0x46, 0xf8, 0x05, 0x26, 0xba, 0x26, 0x3b, 0xd2, 0x7c, 0x91, 0xb3, 0xb1, 0x8f, + 0x60, 0xef, 0x1e, 0x16, 0xa5, 0xac, 0x55, 0x94, 0xb7, 0x3d, 0x00, 0x74, 0x8e, 0x23, 0xbc, 0x90, + 0xdf, 0x2a, 0x24, 0x86, 0x03, 0xad, 0x44, 0xde, 0x9f, 0x35, 0xd9, 0x7a, 0x1b, 0x76, 0xf2, 0x5a, + 0xda, 0xa8, 0x6f, 0xf6, 0x1c, 0x6b, 0x13, 0x78, 0x4e, 0x26, 0xca, 0xd8, 0xff, 0x57, 0x4d, 0xbe, + 0x86, 0x83, 0x72, 0x28, 0xa3, 0xca, 0x3b, 0xd0, 0x34, 0x6c, 0x72, 0x5d, 0xd6, 0x52, 0x9f, 0x83, + 0xaf, 0xad, 0xcd, 0x09, 0xec, 0xdf, 0xc3, 0x62, 0x21, 0x8f, 0x55, 0x39, 0x1f, 0xc2, 0x81, 0x56, + 0xe7, 0x1a, 0x58, 0x07, 0xba, 0x97, 0x58, 0x9c, 0x97, 0x66, 0xe6, 0x1a, 0xfc, 0xe9, 0x5f, 0x2d, + 0xb8, 0xa1, 0x44, 0xbf, 0xd4, 0x4f, 0x0f, 0xfa, 0x01, 0xda, 0x85, 0x56, 0x43, 0xc7, 0x55, 0x77, + 0x5e, 0xee, 0xc5, 0xde, 0xea, 0x9a, 0xb5, 0xdf, 0xfc, 0xf1, 0xf7, 0x3f, 0x7f, 0xd9, 0x38, 0xb1, + 0x5f, 0x96, 0xef, 0xdc, 0x77, 0x5a, 0xb1, 0xf7, 0x92, 0x94, 0x7d, 0x81, 0x27, 0x82, 0xbb, 0xc3, + 0x67, 0xfa, 0xed, 0xe3, 0x63, 0xdd, 0x8c, 0xe8, 0x27, 0x0b, 0xe0, 0xaa, 0x49, 0xd0, 0x51, 0xd5, + 0xc1, 0x4b, 0xdd, 0xda, 0x3b, 0xae, 0x83, 0x69, 0x55, 0xed, 0x63, 0x45, 0xa6, 0x8f, 0x6a, 0xc8, + 0xa0, 0x14, 0x9a, 0x79, 0xe3, 0xa0, 0xdb, 0x55, 0x67, 0x2f, 0xb4, 0xd5, 0xba, 0x04, 0x94, 0x63, + 0xca, 0xb4, 0x17, 0x22, 0x9a, 0x80, 0xee, 0xf0, 0x19, 0xfa, 0x1e, 0xda, 0x85, 0x2e, 0xac, 0x4e, + 0xfd, 0x72, 0x9b, 0xf6, 0x0e, 0x73, 0x5c, 0xe1, 0x79, 0x77, 0x3e, 0xce, 0x9f, 0xf7, 0x3c, 0xfa, + 0xb0, 0x2e, 0xfa, 0xaf, 0x16, 0x74, 0x4a, 0xad, 0x8d, 0x06, 0xab, 0xb5, 0x2f, 0x57, 0x56, 0x1d, + 0x85, 0xb1, 0xa2, 0x70, 0x66, 0xbf, 0x56, 0x9d, 0xf4, 0x2b, 0x12, 0x6e, 0xde, 0x44, 0xe3, 0x7c, + 0x12, 0x48, 0x5a, 0x37, 0x8a, 0xfd, 0x89, 0x4e, 0x56, 0x29, 0xbd, 0x30, 0x2c, 0x7a, 0x83, 0x7a, + 0xa0, 0x29, 0x8a, 0x91, 0xe2, 0xf7, 0x3a, 0xba, 0x3e, 0x3f, 0x55, 0xa5, 0x57, 0xdd, 0x5b, 0x5d, + 0xa5, 0x4b, 0xdd, 0xdd, 0x5b, 0x37, 0x41, 0x16, 0x58, 0xac, 0x12, 0x6a, 0x4e, 0x41, 0x6a, 0xf6, + 0xb3, 0x05, 0x9d, 0xd2, 0x68, 0xa8, 0xd6, 0xac, 0x6a, 0x7a, 0xd4, 0x69, 0x66, 0xd8, 0x0c, 0xff, + 0x05, 0x9b, 0xdf, 0x2c, 0xd8, 0x5f, 0x1a, 0x3e, 0xe8, 0x8d, 0x2a, 0x46, 0xab, 0x66, 0xd4, 0xfa, + 0x0c, 0x7d, 0xa0, 0x38, 0xbd, 0x6b, 0x9f, 0x5d, 0x9b, 0xd3, 0x98, 0xcf, 0x03, 0x8d, 0xad, 0xe1, + 0xdd, 0x10, 0x7a, 0x13, 0x16, 0x2f, 0x85, 0x08, 0x12, 0xe2, 0xcc, 0x46, 0x77, 0xf7, 0x8b, 0x83, + 0xf0, 0x42, 0xfe, 0x2c, 0x5d, 0x58, 0x9f, 0x9e, 0x19, 0x70, 0xc8, 0xa2, 0x80, 0x86, 0x0e, 0x4b, + 0x43, 0x37, 0xc4, 0x54, 0xfd, 0x4a, 0xb9, 0x7a, 0x2b, 0x48, 0x08, 0x2f, 0xfe, 0xcb, 0xdf, 0x89, + 0xa3, 0xc7, 0xdb, 0x0a, 0xf0, 0xd6, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x07, 0x42, 0xf7, + 0xeb, 0x0b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/operation_metadata.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/operation_metadata.pb.go new file mode 100644 index 0000000..aad0e67 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/operation_metadata.pb.go @@ -0,0 +1,162 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1/operation_metadata.proto +// DO NOT EDIT! + +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The operation type. +type OperationMetadata_OperationType int32 + +const ( + // Unspecified operation type. + OperationMetadata_OPERATION_TYPE_UNSPECIFIED OperationMetadata_OperationType = 0 + // An operation to create a new version. + OperationMetadata_CREATE_VERSION OperationMetadata_OperationType = 1 + // An operation to delete an existing version. + OperationMetadata_DELETE_VERSION OperationMetadata_OperationType = 2 + // An operation to delete an existing model. + OperationMetadata_DELETE_MODEL OperationMetadata_OperationType = 3 +) + +var OperationMetadata_OperationType_name = map[int32]string{ + 0: "OPERATION_TYPE_UNSPECIFIED", + 1: "CREATE_VERSION", + 2: "DELETE_VERSION", + 3: "DELETE_MODEL", +} +var OperationMetadata_OperationType_value = map[string]int32{ + "OPERATION_TYPE_UNSPECIFIED": 0, + "CREATE_VERSION": 1, + "DELETE_VERSION": 2, + "DELETE_MODEL": 3, +} + +func (x OperationMetadata_OperationType) String() string { + return proto.EnumName(OperationMetadata_OperationType_name, int32(x)) +} +func (OperationMetadata_OperationType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 0} +} + +// Represents the metadata of the long-running operation. +type OperationMetadata struct { + // The time the operation was submitted. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The time operation processing started. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The time operation processing completed. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Indicates whether a request to cancel this operation has been made. + IsCancellationRequested bool `protobuf:"varint,4,opt,name=is_cancellation_requested,json=isCancellationRequested" json:"is_cancellation_requested,omitempty"` + // The operation type. + OperationType OperationMetadata_OperationType `protobuf:"varint,5,opt,name=operation_type,json=operationType,enum=google.cloud.ml.v1.OperationMetadata_OperationType" json:"operation_type,omitempty"` + // Contains the name of the model associated with the operation. + ModelName string `protobuf:"bytes,6,opt,name=model_name,json=modelName" json:"model_name,omitempty"` + // Contains the version associated with the operation. + Version *Version `protobuf:"bytes,7,opt,name=version" json:"version,omitempty"` +} + +func (m *OperationMetadata) Reset() { *m = OperationMetadata{} } +func (m *OperationMetadata) String() string { return proto.CompactTextString(m) } +func (*OperationMetadata) ProtoMessage() {} +func (*OperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *OperationMetadata) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *OperationMetadata) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *OperationMetadata) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *OperationMetadata) GetIsCancellationRequested() bool { + if m != nil { + return m.IsCancellationRequested + } + return false +} + +func (m *OperationMetadata) GetOperationType() OperationMetadata_OperationType { + if m != nil { + return m.OperationType + } + return OperationMetadata_OPERATION_TYPE_UNSPECIFIED +} + +func (m *OperationMetadata) GetModelName() string { + if m != nil { + return m.ModelName + } + return "" +} + +func (m *OperationMetadata) GetVersion() *Version { + if m != nil { + return m.Version + } + return nil +} + +func init() { + proto.RegisterType((*OperationMetadata)(nil), "google.cloud.ml.v1.OperationMetadata") + proto.RegisterEnum("google.cloud.ml.v1.OperationMetadata_OperationType", OperationMetadata_OperationType_name, OperationMetadata_OperationType_value) +} + +func init() { proto.RegisterFile("google/cloud/ml/v1/operation_metadata.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 454 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x5f, 0x6b, 0xdb, 0x30, + 0x14, 0xc5, 0xe7, 0xb6, 0x6b, 0x1a, 0x75, 0x0d, 0x99, 0x1e, 0xb6, 0xcc, 0xfb, 0x17, 0xfa, 0x30, + 0x02, 0x03, 0x99, 0xb4, 0xdb, 0xc3, 0xd6, 0xa7, 0x36, 0xd1, 0x20, 0xd0, 0xc6, 0xc6, 0xf5, 0x0a, + 0xeb, 0x8b, 0x51, 0xed, 0x3b, 0x23, 0x90, 0x25, 0xcf, 0x52, 0x0c, 0xfd, 0x2c, 0xfb, 0xb2, 0x23, + 0x92, 0x4d, 0x33, 0x52, 0xe8, 0xa3, 0xce, 0xfd, 0x9d, 0xab, 0xab, 0x7b, 0x84, 0x3e, 0x17, 0x4a, + 0x15, 0x02, 0x82, 0x4c, 0xa8, 0x55, 0x1e, 0x94, 0x22, 0x68, 0xa6, 0x81, 0xaa, 0xa0, 0x66, 0x86, + 0x2b, 0x99, 0x96, 0x60, 0x58, 0xce, 0x0c, 0x23, 0x55, 0xad, 0x8c, 0xc2, 0xd8, 0xc1, 0xc4, 0xc2, + 0xa4, 0x14, 0xa4, 0x99, 0xfa, 0xef, 0xda, 0x06, 0xac, 0xe2, 0x01, 0x93, 0x52, 0x19, 0xeb, 0xd4, + 0xce, 0xe1, 0x7f, 0x7a, 0xa4, 0x7d, 0xa9, 0x72, 0x10, 0xa9, 0x86, 0xba, 0xe1, 0x19, 0xb4, 0xdc, + 0xc7, 0x96, 0xb3, 0xa7, 0xbb, 0xd5, 0xef, 0xc0, 0xf0, 0x12, 0xb4, 0x61, 0x65, 0xe5, 0x80, 0xe3, + 0xbf, 0x7b, 0xe8, 0x65, 0xd8, 0xcd, 0x75, 0xd5, 0x8e, 0x85, 0xcf, 0xd0, 0x61, 0x56, 0x03, 0x33, + 0x90, 0xae, 0xf9, 0x91, 0x37, 0xf6, 0x26, 0x87, 0x27, 0x3e, 0x69, 0xc7, 0xec, 0x9a, 0x91, 0xa4, + 0x6b, 0x16, 0x23, 0x87, 0xaf, 0x05, 0xfc, 0x0d, 0x21, 0x6d, 0x58, 0x6d, 0x9c, 0x77, 0xe7, 0x49, + 0x6f, 0xdf, 0xd2, 0xd6, 0xfa, 0x15, 0x1d, 0x80, 0xcc, 0x9d, 0x71, 0xf7, 0x49, 0x63, 0x0f, 0x64, + 0x6e, 0x6d, 0xdf, 0xd1, 0x1b, 0xae, 0xd3, 0x8c, 0xc9, 0x0c, 0x84, 0x70, 0x1b, 0xae, 0xe1, 0xcf, + 0x0a, 0xb4, 0x81, 0x7c, 0xb4, 0x37, 0xf6, 0x26, 0x07, 0xf1, 0x6b, 0xae, 0x67, 0x1b, 0xf5, 0xb8, + 0x2b, 0xe3, 0x5b, 0x34, 0x78, 0xc8, 0xc5, 0xdc, 0x57, 0x30, 0x7a, 0x3e, 0xf6, 0x26, 0x83, 0x93, + 0x53, 0xb2, 0x1d, 0x0a, 0xd9, 0xda, 0xd4, 0x83, 0x92, 0xdc, 0x57, 0x10, 0x1f, 0xa9, 0xcd, 0x23, + 0x7e, 0x8f, 0x90, 0x0b, 0x45, 0xb2, 0x12, 0x46, 0xfb, 0x63, 0x6f, 0xd2, 0x8f, 0xfb, 0x56, 0x59, + 0x32, 0xfb, 0xda, 0x5e, 0x03, 0xb5, 0xe6, 0x4a, 0x8e, 0x7a, 0xf6, 0xb1, 0x6f, 0x1f, 0xbb, 0xf3, + 0xc6, 0x21, 0x71, 0xc7, 0x1e, 0x73, 0x74, 0xf4, 0xdf, 0xad, 0xf8, 0x03, 0xf2, 0xc3, 0x88, 0xc6, + 0xe7, 0xc9, 0x22, 0x5c, 0xa6, 0xc9, 0xaf, 0x88, 0xa6, 0x3f, 0x97, 0xd7, 0x11, 0x9d, 0x2d, 0x7e, + 0x2c, 0xe8, 0x7c, 0xf8, 0x0c, 0x63, 0x34, 0x98, 0xc5, 0xf4, 0x3c, 0xa1, 0xe9, 0x0d, 0x8d, 0xaf, + 0x17, 0xe1, 0x72, 0xe8, 0xad, 0xb5, 0x39, 0xbd, 0xa4, 0x1b, 0xda, 0x0e, 0x1e, 0xa2, 0x17, 0xad, + 0x76, 0x15, 0xce, 0xe9, 0xe5, 0x70, 0xf7, 0x42, 0x20, 0x3f, 0x53, 0xe5, 0xd6, 0x54, 0xac, 0xe2, + 0xa4, 0x99, 0x5e, 0xbc, 0xda, 0x5a, 0x47, 0xb4, 0x0e, 0x29, 0xf2, 0x6e, 0xbf, 0xb4, 0x8e, 0x42, + 0x09, 0x26, 0x0b, 0xa2, 0xea, 0x22, 0x28, 0x40, 0xda, 0x08, 0x03, 0x57, 0x62, 0x15, 0xd7, 0x9b, + 0xbf, 0xf7, 0xac, 0x14, 0x77, 0xfb, 0x16, 0x38, 0xfd, 0x17, 0x00, 0x00, 0xff, 0xff, 0x03, 0xf9, + 0xcc, 0xf1, 0x3c, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/prediction_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/prediction_service.pb.go new file mode 100644 index 0000000..724f90f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/prediction_service.pb.go @@ -0,0 +1,344 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1/prediction_service.proto +// DO NOT EDIT! + +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api3 "google.golang.org/genproto/googleapis/api/httpbody" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request for predictions to be issued against a trained model. +// +// The body of the request is a single JSON object with a single top-level +// field: +// +// <dl> +// <dt>instances</dt> +// <dd>A JSON array containing values representing the instances to use for +// prediction.</dd> +// </dl> +// +// The structure of each element of the instances list is determined by your +// model's input definition. Instances can include named inputs or can contain +// only unlabeled values. +// +// Not all data includes named inputs. Some instances will be simple +// JSON values (boolean, number, or string). However, instances are often lists +// of simple values, or complex nested lists. Here are some examples of request +// bodies: +// +// CSV data with each row encoded as a string value: +// <pre> +// {"instances": ["1.0,true,\\"x\\"", "-2.0,false,\\"y\\""]} +// </pre> +// Plain text: +// <pre> +// {"instances": ["the quick brown fox", "la bruja le dio"]} +// </pre> +// Sentences encoded as lists of words (vectors of strings): +// <pre> +// { +// "instances": [ +// ["the","quick","brown"], +// ["la","bruja","le"], +// ... +// ] +// } +// </pre> +// Floating point scalar values: +// <pre> +// {"instances": [0.0, 1.1, 2.2]} +// </pre> +// Vectors of integers: +// <pre> +// { +// "instances": [ +// [0, 1, 2], +// [3, 4, 5], +// ... +// ] +// } +// </pre> +// Tensors (in this case, two-dimensional tensors): +// <pre> +// { +// "instances": [ +// [ +// [0, 1, 2], +// [3, 4, 5] +// ], +// ... +// ] +// } +// </pre> +// Images can be represented different ways. In this encoding scheme the first +// two dimensions represent the rows and columns of the image, and the third +// contains lists (vectors) of the R, G, and B values for each pixel. +// <pre> +// { +// "instances": [ +// [ +// [ +// [138, 30, 66], +// [130, 20, 56], +// ... +// ], +// [ +// [126, 38, 61], +// [122, 24, 57], +// ... +// ], +// ... +// ], +// ... +// ] +// } +// </pre> +// JSON strings must be encoded as UTF-8. To send binary data, you must +// base64-encode the data and mark it as binary. To mark a JSON string +// as binary, replace it with a JSON object with a single attribute named `b64`: +// <pre>{"b64": "..."} </pre> +// For example: +// +// Two Serialized tf.Examples (fake data, for illustrative purposes only): +// <pre> +// {"instances": [{"b64": "X5ad6u"}, {"b64": "IA9j4nx"}]} +// </pre> +// Two JPEG image byte strings (fake data, for illustrative purposes only): +// <pre> +// {"instances": [{"b64": "ASa8asdf"}, {"b64": "JLK7ljk3"}]} +// </pre> +// If your data includes named references, format each instance as a JSON object +// with the named references as the keys: +// +// JSON input data to be preprocessed: +// <pre> +// { +// "instances": [ +// { +// "a": 1.0, +// "b": true, +// "c": "x" +// }, +// { +// "a": -2.0, +// "b": false, +// "c": "y" +// } +// ] +// } +// </pre> +// Some models have an underlying TensorFlow graph that accepts multiple input +// tensors. In this case, you should use the names of JSON name/value pairs to +// identify the input tensors, as shown in the following exmaples: +// +// For a graph with input tensor aliases "tag" (string) and "image" +// (base64-encoded string): +// <pre> +// { +// "instances": [ +// { +// "tag": "beach", +// "image": {"b64": "ASa8asdf"} +// }, +// { +// "tag": "car", +// "image": {"b64": "JLK7ljk3"} +// } +// ] +// } +// </pre> +// For a graph with input tensor aliases "tag" (string) and "image" +// (3-dimensional array of 8-bit ints): +// <pre> +// { +// "instances": [ +// { +// "tag": "beach", +// "image": [ +// [ +// [138, 30, 66], +// [130, 20, 56], +// ... +// ], +// [ +// [126, 38, 61], +// [122, 24, 57], +// ... +// ], +// ... +// ] +// }, +// { +// "tag": "car", +// "image": [ +// [ +// [255, 0, 102], +// [255, 0, 97], +// ... +// ], +// [ +// [254, 1, 101], +// [254, 2, 93], +// ... +// ], +// ... +// ] +// }, +// ... +// ] +// } +// </pre> +// If the call is successful, the response body will contain one prediction +// entry per instance in the request body. If prediction fails for any +// instance, the response body will contain no predictions and will contian +// a single error entry instead. +type PredictRequest struct { + // Required. The resource name of a model or a version. + // + // Authorization: requires `Viewer` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // + // Required. The prediction request body. + HttpBody *google_api3.HttpBody `protobuf:"bytes,2,opt,name=http_body,json=httpBody" json:"http_body,omitempty"` +} + +func (m *PredictRequest) Reset() { *m = PredictRequest{} } +func (m *PredictRequest) String() string { return proto.CompactTextString(m) } +func (*PredictRequest) ProtoMessage() {} +func (*PredictRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *PredictRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *PredictRequest) GetHttpBody() *google_api3.HttpBody { + if m != nil { + return m.HttpBody + } + return nil +} + +func init() { + proto.RegisterType((*PredictRequest)(nil), "google.cloud.ml.v1.PredictRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for OnlinePredictionService service + +type OnlinePredictionServiceClient interface { + // Performs prediction on the data in the request. + // + // **** REMOVE FROM GENERATED DOCUMENTATION + Predict(ctx context.Context, in *PredictRequest, opts ...grpc.CallOption) (*google_api3.HttpBody, error) +} + +type onlinePredictionServiceClient struct { + cc *grpc.ClientConn +} + +func NewOnlinePredictionServiceClient(cc *grpc.ClientConn) OnlinePredictionServiceClient { + return &onlinePredictionServiceClient{cc} +} + +func (c *onlinePredictionServiceClient) Predict(ctx context.Context, in *PredictRequest, opts ...grpc.CallOption) (*google_api3.HttpBody, error) { + out := new(google_api3.HttpBody) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.OnlinePredictionService/Predict", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for OnlinePredictionService service + +type OnlinePredictionServiceServer interface { + // Performs prediction on the data in the request. + // + // **** REMOVE FROM GENERATED DOCUMENTATION + Predict(context.Context, *PredictRequest) (*google_api3.HttpBody, error) +} + +func RegisterOnlinePredictionServiceServer(s *grpc.Server, srv OnlinePredictionServiceServer) { + s.RegisterService(&_OnlinePredictionService_serviceDesc, srv) +} + +func _OnlinePredictionService_Predict_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PredictRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OnlinePredictionServiceServer).Predict(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.OnlinePredictionService/Predict", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OnlinePredictionServiceServer).Predict(ctx, req.(*PredictRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _OnlinePredictionService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.ml.v1.OnlinePredictionService", + HandlerType: (*OnlinePredictionServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Predict", + Handler: _OnlinePredictionService_Predict_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/ml/v1/prediction_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/ml/v1/prediction_service.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 308 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x51, 0x4f, 0x4b, 0xfb, 0x30, + 0x18, 0xa6, 0xe3, 0xc7, 0x4f, 0x17, 0xc1, 0x43, 0x10, 0x9d, 0x45, 0x64, 0xd4, 0xcb, 0x9c, 0x90, + 0xd0, 0xe9, 0x69, 0xe2, 0x65, 0x27, 0x6f, 0x96, 0x79, 0x10, 0xbc, 0x8c, 0xac, 0x0d, 0x59, 0x24, + 0xcd, 0x1b, 0xdb, 0xac, 0x30, 0xc4, 0x8b, 0x37, 0xcf, 0x7e, 0x34, 0xbf, 0x82, 0x1f, 0x44, 0xd2, + 0x04, 0x99, 0xd4, 0xdb, 0x4b, 0xde, 0xe7, 0x79, 0x9f, 0x3f, 0x41, 0x17, 0x02, 0x40, 0x28, 0x4e, + 0x73, 0x05, 0xeb, 0x82, 0x96, 0x8a, 0x36, 0x29, 0x35, 0x15, 0x2f, 0x64, 0x6e, 0x25, 0xe8, 0x45, + 0xcd, 0xab, 0x46, 0xe6, 0x9c, 0x98, 0x0a, 0x2c, 0x60, 0xec, 0xc1, 0xa4, 0x05, 0x93, 0x52, 0x91, + 0x26, 0x8d, 0x4f, 0xc2, 0x01, 0x66, 0x24, 0x65, 0x5a, 0x83, 0x65, 0x8e, 0x58, 0x7b, 0x46, 0x7c, + 0xbc, 0xb5, 0x5d, 0x59, 0x6b, 0x96, 0x50, 0x6c, 0xfc, 0x2a, 0x79, 0x40, 0xfb, 0x99, 0x17, 0x9a, + 0xf3, 0xe7, 0x35, 0xaf, 0x2d, 0xc6, 0xe8, 0x9f, 0x66, 0x25, 0x1f, 0x44, 0xc3, 0x68, 0xd4, 0x9f, + 0xb7, 0x33, 0x4e, 0x51, 0xdf, 0xf1, 0x16, 0x8e, 0x38, 0xe8, 0x0d, 0xa3, 0xd1, 0xde, 0xe4, 0x80, + 0x04, 0x1b, 0xcc, 0x48, 0x72, 0x6b, 0xad, 0x99, 0x41, 0xb1, 0x99, 0xef, 0xae, 0xc2, 0x34, 0x79, + 0x8f, 0xd0, 0xd1, 0x9d, 0x56, 0x52, 0xf3, 0xec, 0x27, 0xc8, 0xbd, 0xcf, 0x81, 0x35, 0xda, 0x09, + 0x8f, 0x38, 0x21, 0xdd, 0x34, 0xe4, 0xb7, 0xa3, 0xf8, 0x4f, 0xa9, 0xe4, 0xfc, 0xed, 0xf3, 0xeb, + 0xa3, 0x77, 0x96, 0x9c, 0xba, 0xb2, 0x5e, 0x9c, 0xcd, 0x1b, 0x53, 0xc1, 0x13, 0xcf, 0x6d, 0x4d, + 0xc7, 0xe3, 0xd7, 0x69, 0xe8, 0x6f, 0x1a, 0x8d, 0x67, 0x0a, 0xc5, 0x39, 0x94, 0x1d, 0x25, 0x77, + 0xae, 0x49, 0x67, 0x87, 0x1d, 0x83, 0x99, 0xab, 0x26, 0x8b, 0x1e, 0xaf, 0x02, 0x43, 0x80, 0x62, + 0x5a, 0x10, 0xa8, 0x04, 0x15, 0x5c, 0xb7, 0xc5, 0x51, 0xbf, 0x62, 0x46, 0xd6, 0xdb, 0xbf, 0x76, + 0x5d, 0xaa, 0xe5, 0xff, 0x16, 0x70, 0xf9, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x81, 0x8e, 0x25, 0xca, + 0xd5, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/project_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/project_service.pb.go new file mode 100644 index 0000000..e4be4e1 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/project_service.pb.go @@ -0,0 +1,178 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1/project_service.proto +// DO NOT EDIT! + +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Requests service account information associated with a project. +type GetConfigRequest struct { + // Required. The project name. + // + // Authorization: requires `Viewer` role on the specified project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} } +func (m *GetConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetConfigRequest) ProtoMessage() {} +func (*GetConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *GetConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Returns service account information associated with a project. +type GetConfigResponse struct { + // The service account Cloud ML uses to access resources in the project. + ServiceAccount string `protobuf:"bytes,1,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // The project number for `service_account`. + ServiceAccountProject int64 `protobuf:"varint,2,opt,name=service_account_project,json=serviceAccountProject" json:"service_account_project,omitempty"` +} + +func (m *GetConfigResponse) Reset() { *m = GetConfigResponse{} } +func (m *GetConfigResponse) String() string { return proto.CompactTextString(m) } +func (*GetConfigResponse) ProtoMessage() {} +func (*GetConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +func (m *GetConfigResponse) GetServiceAccount() string { + if m != nil { + return m.ServiceAccount + } + return "" +} + +func (m *GetConfigResponse) GetServiceAccountProject() int64 { + if m != nil { + return m.ServiceAccountProject + } + return 0 +} + +func init() { + proto.RegisterType((*GetConfigRequest)(nil), "google.cloud.ml.v1.GetConfigRequest") + proto.RegisterType((*GetConfigResponse)(nil), "google.cloud.ml.v1.GetConfigResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ProjectManagementService service + +type ProjectManagementServiceClient interface { + // Get the service account information associated with your project. You need + // this information in order to grant the service account persmissions for + // the Google Cloud Storage location where you put your model training code + // for training the model with Google Cloud Machine Learning. + GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) +} + +type projectManagementServiceClient struct { + cc *grpc.ClientConn +} + +func NewProjectManagementServiceClient(cc *grpc.ClientConn) ProjectManagementServiceClient { + return &projectManagementServiceClient{cc} +} + +func (c *projectManagementServiceClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) { + out := new(GetConfigResponse) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1.ProjectManagementService/GetConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ProjectManagementService service + +type ProjectManagementServiceServer interface { + // Get the service account information associated with your project. You need + // this information in order to grant the service account persmissions for + // the Google Cloud Storage location where you put your model training code + // for training the model with Google Cloud Machine Learning. + GetConfig(context.Context, *GetConfigRequest) (*GetConfigResponse, error) +} + +func RegisterProjectManagementServiceServer(s *grpc.Server, srv ProjectManagementServiceServer) { + s.RegisterService(&_ProjectManagementService_serviceDesc, srv) +} + +func _ProjectManagementService_GetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProjectManagementServiceServer).GetConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1.ProjectManagementService/GetConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProjectManagementServiceServer).GetConfig(ctx, req.(*GetConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ProjectManagementService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.ml.v1.ProjectManagementService", + HandlerType: (*ProjectManagementServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetConfig", + Handler: _ProjectManagementService_GetConfig_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/ml/v1/project_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/ml/v1/project_service.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 319 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xbf, 0x4a, 0x43, 0x31, + 0x14, 0xc6, 0xb9, 0x55, 0x84, 0x66, 0xf0, 0x4f, 0x44, 0x2c, 0x45, 0xb0, 0x16, 0xb5, 0xc5, 0x21, + 0xa1, 0x2a, 0x0e, 0x8a, 0x83, 0x75, 0x70, 0x12, 0x4a, 0xdd, 0x5c, 0x4a, 0xbc, 0x1e, 0x43, 0x24, + 0xc9, 0x89, 0x37, 0xe9, 0x5d, 0xc4, 0x41, 0x5f, 0xc1, 0xdd, 0x97, 0xf2, 0x15, 0x7c, 0x10, 0xe9, + 0x4d, 0x94, 0xda, 0x0e, 0x6e, 0x87, 0x73, 0x7e, 0x5f, 0xf2, 0x7d, 0xe7, 0x90, 0xae, 0x44, 0x94, + 0x1a, 0x78, 0xae, 0x71, 0x7c, 0xcf, 0x8d, 0xe6, 0x65, 0x8f, 0xbb, 0x02, 0x1f, 0x21, 0x0f, 0x23, + 0x0f, 0x45, 0xa9, 0x72, 0x60, 0xae, 0xc0, 0x80, 0x94, 0x46, 0x92, 0x55, 0x24, 0x33, 0x9a, 0x95, + 0xbd, 0xe6, 0x56, 0x52, 0x0b, 0xa7, 0xb8, 0xb0, 0x16, 0x83, 0x08, 0x0a, 0xad, 0x8f, 0x8a, 0xf6, + 0x3e, 0x59, 0xbd, 0x82, 0x70, 0x89, 0xf6, 0x41, 0xc9, 0x21, 0x3c, 0x8d, 0xc1, 0x07, 0x4a, 0xc9, + 0xa2, 0x15, 0x06, 0x1a, 0x59, 0x2b, 0xeb, 0xd6, 0x87, 0x55, 0xdd, 0x0e, 0x64, 0x6d, 0x8a, 0xf3, + 0x0e, 0xad, 0x07, 0xda, 0x21, 0x2b, 0xe9, 0xff, 0x91, 0xc8, 0x73, 0x1c, 0xdb, 0x90, 0x34, 0xcb, + 0xa9, 0x7d, 0x11, 0xbb, 0xf4, 0x84, 0x6c, 0xce, 0x80, 0xa3, 0x14, 0xa0, 0x51, 0x6b, 0x65, 0xdd, + 0x85, 0xe1, 0xc6, 0x5f, 0xc1, 0x20, 0x0e, 0x0f, 0x3f, 0x32, 0xd2, 0x48, 0xf5, 0xb5, 0xb0, 0x42, + 0x82, 0x01, 0x1b, 0x6e, 0x22, 0x4a, 0x5f, 0x33, 0x52, 0xff, 0xf5, 0x44, 0x77, 0xd9, 0x7c, 0x76, + 0x36, 0x1b, 0xad, 0xb9, 0xf7, 0x0f, 0x15, 0x83, 0xb5, 0x3b, 0x6f, 0x9f, 0x5f, 0xef, 0xb5, 0x1d, + 0xba, 0x3d, 0x59, 0xf5, 0xf3, 0x64, 0x01, 0xe7, 0xc9, 0xaf, 0xe7, 0x07, 0x2f, 0xa7, 0xf2, 0x47, + 0xd0, 0x57, 0xa4, 0x99, 0xa3, 0x99, 0x7b, 0x54, 0x38, 0xc5, 0xca, 0x5e, 0x7f, 0x3d, 0x79, 0x4f, + 0x8e, 0x07, 0x93, 0x8d, 0x0f, 0xb2, 0xdb, 0xe3, 0x84, 0x4b, 0xd4, 0xc2, 0x4a, 0x86, 0x85, 0xe4, + 0x12, 0x6c, 0x75, 0x0f, 0x1e, 0x47, 0xc2, 0x29, 0x3f, 0x7d, 0xee, 0x33, 0xa3, 0xef, 0x96, 0x2a, + 0xe0, 0xe8, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xd0, 0xa5, 0x43, 0x33, 0x0e, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/job_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/job_service.pb.go new file mode 100644 index 0000000..9aff1c7 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/job_service.pb.go @@ -0,0 +1,1824 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1beta1/job_service.proto +// DO NOT EDIT! + +/* +Package ml is a generated protocol buffer package. + +It is generated from these files: + google/cloud/ml/v1beta1/job_service.proto + google/cloud/ml/v1beta1/model_service.proto + google/cloud/ml/v1beta1/operation_metadata.proto + google/cloud/ml/v1beta1/prediction_service.proto + google/cloud/ml/v1beta1/project_service.proto + +It has these top-level messages: + TrainingInput + HyperparameterSpec + ParameterSpec + HyperparameterOutput + TrainingOutput + PredictionInput + PredictionOutput + Job + CreateJobRequest + ListJobsRequest + ListJobsResponse + GetJobRequest + CancelJobRequest + Model + Version + ManualScaling + CreateModelRequest + ListModelsRequest + ListModelsResponse + GetModelRequest + DeleteModelRequest + CreateVersionRequest + ListVersionsRequest + ListVersionsResponse + GetVersionRequest + DeleteVersionRequest + SetDefaultVersionRequest + OperationMetadata + PredictRequest + GetConfigRequest + GetConfigResponse +*/ +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A scale tier is an abstract representation of the resources Cloud ML +// will allocate to a training job. When selecting a scale tier for your +// training job, you should consider the size of your training dataset and +// the complexity of your model. As the tiers increase, virtual machines are +// added to handle your job, and the individual machines in the cluster +// generally have more memory and greater processing power than they do at +// lower tiers. The number of training units charged per hour of processing +// increases as tiers get more advanced. Refer to the +// [pricing guide](/ml/pricing) for more details. Note that in addition to +// incurring costs, your use of training resources is constrained by the +// [quota policy](/ml/quota). +type TrainingInput_ScaleTier int32 + +const ( + // A single worker instance. This tier is suitable for learning how to use + // Cloud ML, and for experimenting with new models using small datasets. + TrainingInput_BASIC TrainingInput_ScaleTier = 0 + // Many workers and a few parameter servers. + TrainingInput_STANDARD_1 TrainingInput_ScaleTier = 1 + // A large number of workers with many parameter servers. + TrainingInput_PREMIUM_1 TrainingInput_ScaleTier = 3 + // A single worker instance [with a GPU](ml/docs/how-tos/using-gpus). + TrainingInput_BASIC_GPU TrainingInput_ScaleTier = 6 + // The CUSTOM tier is not a set tier, but rather enables you to use your + // own cluster specification. When you use this tier, set values to + // configure your processing cluster according to these guidelines: + // + // * You _must_ set `TrainingInput.masterType` to specify the type + // of machine to use for your master node. This is the only required + // setting. + // + // * You _may_ set `TrainingInput.workerCount` to specify the number of + // workers to use. If you specify one or more workers, you _must_ also + // set `TrainingInput.workerType` to specify the type of machine to use + // for your worker nodes. + // + // * You _may_ set `TrainingInput.parameterServerCount` to specify the + // number of parameter servers to use. If you specify one or more + // parameter servers, you _must_ also set + // `TrainingInput.parameterServerType` to specify the type of machine to + // use for your parameter servers. + // + // Note that all of your workers must use the same machine type, which can + // be different from your parameter server type and master type. Your + // parameter servers must likewise use the same machine type, which can be + // different from your worker type and master type. + TrainingInput_CUSTOM TrainingInput_ScaleTier = 5 +) + +var TrainingInput_ScaleTier_name = map[int32]string{ + 0: "BASIC", + 1: "STANDARD_1", + 3: "PREMIUM_1", + 6: "BASIC_GPU", + 5: "CUSTOM", +} +var TrainingInput_ScaleTier_value = map[string]int32{ + "BASIC": 0, + "STANDARD_1": 1, + "PREMIUM_1": 3, + "BASIC_GPU": 6, + "CUSTOM": 5, +} + +func (x TrainingInput_ScaleTier) String() string { + return proto.EnumName(TrainingInput_ScaleTier_name, int32(x)) +} +func (TrainingInput_ScaleTier) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// The available types of optimization goals. +type HyperparameterSpec_GoalType int32 + +const ( + // Goal Type will default to maximize. + HyperparameterSpec_GOAL_TYPE_UNSPECIFIED HyperparameterSpec_GoalType = 0 + // Maximize the goal metric. + HyperparameterSpec_MAXIMIZE HyperparameterSpec_GoalType = 1 + // Minimize the goal metric. + HyperparameterSpec_MINIMIZE HyperparameterSpec_GoalType = 2 +) + +var HyperparameterSpec_GoalType_name = map[int32]string{ + 0: "GOAL_TYPE_UNSPECIFIED", + 1: "MAXIMIZE", + 2: "MINIMIZE", +} +var HyperparameterSpec_GoalType_value = map[string]int32{ + "GOAL_TYPE_UNSPECIFIED": 0, + "MAXIMIZE": 1, + "MINIMIZE": 2, +} + +func (x HyperparameterSpec_GoalType) String() string { + return proto.EnumName(HyperparameterSpec_GoalType_name, int32(x)) +} +func (HyperparameterSpec_GoalType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{1, 0} +} + +// The type of the parameter. +type ParameterSpec_ParameterType int32 + +const ( + // You must specify a valid type. Using this unspecified type will result in + // an error. + ParameterSpec_PARAMETER_TYPE_UNSPECIFIED ParameterSpec_ParameterType = 0 + // Type for real-valued parameters. + ParameterSpec_DOUBLE ParameterSpec_ParameterType = 1 + // Type for integral parameters. + ParameterSpec_INTEGER ParameterSpec_ParameterType = 2 + // The parameter is categorical, with a value chosen from the categories + // field. + ParameterSpec_CATEGORICAL ParameterSpec_ParameterType = 3 + // The parameter is real valued, with a fixed set of feasible points. If + // `type==DISCRETE`, feasible_points must be provided, and + // {`min_value`, `max_value`} will be ignored. + ParameterSpec_DISCRETE ParameterSpec_ParameterType = 4 +) + +var ParameterSpec_ParameterType_name = map[int32]string{ + 0: "PARAMETER_TYPE_UNSPECIFIED", + 1: "DOUBLE", + 2: "INTEGER", + 3: "CATEGORICAL", + 4: "DISCRETE", +} +var ParameterSpec_ParameterType_value = map[string]int32{ + "PARAMETER_TYPE_UNSPECIFIED": 0, + "DOUBLE": 1, + "INTEGER": 2, + "CATEGORICAL": 3, + "DISCRETE": 4, +} + +func (x ParameterSpec_ParameterType) String() string { + return proto.EnumName(ParameterSpec_ParameterType_name, int32(x)) +} +func (ParameterSpec_ParameterType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{2, 0} +} + +// The type of scaling that should be applied to this parameter. +type ParameterSpec_ScaleType int32 + +const ( + // By default, no scaling is applied. + ParameterSpec_NONE ParameterSpec_ScaleType = 0 + // Scales the feasible space to (0, 1) linearly. + ParameterSpec_UNIT_LINEAR_SCALE ParameterSpec_ScaleType = 1 + // Scales the feasible space logarithmically to (0, 1). The entire feasible + // space must be strictly positive. + ParameterSpec_UNIT_LOG_SCALE ParameterSpec_ScaleType = 2 + // Scales the feasible space "reverse" logarithmically to (0, 1). The result + // is that values close to the top of the feasible space are spread out more + // than points near the bottom. The entire feasible space must be strictly + // positive. + ParameterSpec_UNIT_REVERSE_LOG_SCALE ParameterSpec_ScaleType = 3 +) + +var ParameterSpec_ScaleType_name = map[int32]string{ + 0: "NONE", + 1: "UNIT_LINEAR_SCALE", + 2: "UNIT_LOG_SCALE", + 3: "UNIT_REVERSE_LOG_SCALE", +} +var ParameterSpec_ScaleType_value = map[string]int32{ + "NONE": 0, + "UNIT_LINEAR_SCALE": 1, + "UNIT_LOG_SCALE": 2, + "UNIT_REVERSE_LOG_SCALE": 3, +} + +func (x ParameterSpec_ScaleType) String() string { + return proto.EnumName(ParameterSpec_ScaleType_name, int32(x)) +} +func (ParameterSpec_ScaleType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } + +// The format used to separate data instances in the source files. +type PredictionInput_DataFormat int32 + +const ( + // Unspecified format. + PredictionInput_DATA_FORMAT_UNSPECIFIED PredictionInput_DataFormat = 0 + // The source file is a text file with instances separated by the + // new-line character. + PredictionInput_TEXT PredictionInput_DataFormat = 1 + // The source file is a TFRecord file. + PredictionInput_TF_RECORD PredictionInput_DataFormat = 2 + // The source file is a GZIP-compressed TFRecord file. + PredictionInput_TF_RECORD_GZIP PredictionInput_DataFormat = 3 +) + +var PredictionInput_DataFormat_name = map[int32]string{ + 0: "DATA_FORMAT_UNSPECIFIED", + 1: "TEXT", + 2: "TF_RECORD", + 3: "TF_RECORD_GZIP", +} +var PredictionInput_DataFormat_value = map[string]int32{ + "DATA_FORMAT_UNSPECIFIED": 0, + "TEXT": 1, + "TF_RECORD": 2, + "TF_RECORD_GZIP": 3, +} + +func (x PredictionInput_DataFormat) String() string { + return proto.EnumName(PredictionInput_DataFormat_name, int32(x)) +} +func (PredictionInput_DataFormat) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{5, 0} +} + +// Describes the job state. +type Job_State int32 + +const ( + // The job state is unspecified. + Job_STATE_UNSPECIFIED Job_State = 0 + // The job has been just created and processing has not yet begun. + Job_QUEUED Job_State = 1 + // The service is preparing to run the job. + Job_PREPARING Job_State = 2 + // The job is in progress. + Job_RUNNING Job_State = 3 + // The job completed successfully. + Job_SUCCEEDED Job_State = 4 + // The job failed. + // `error_message` should contain the details of the failure. + Job_FAILED Job_State = 5 + // The job is being cancelled. + // `error_message` should describe the reason for the cancellation. + Job_CANCELLING Job_State = 6 + // The job has been cancelled. + // `error_message` should describe the reason for the cancellation. + Job_CANCELLED Job_State = 7 +) + +var Job_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "QUEUED", + 2: "PREPARING", + 3: "RUNNING", + 4: "SUCCEEDED", + 5: "FAILED", + 6: "CANCELLING", + 7: "CANCELLED", +} +var Job_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "QUEUED": 1, + "PREPARING": 2, + "RUNNING": 3, + "SUCCEEDED": 4, + "FAILED": 5, + "CANCELLING": 6, + "CANCELLED": 7, +} + +func (x Job_State) String() string { + return proto.EnumName(Job_State_name, int32(x)) +} +func (Job_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +// Represents input parameters for a training job. +type TrainingInput struct { + // Required. Specifies the machine types, the number of replicas for workers + // and parameter servers. + ScaleTier TrainingInput_ScaleTier `protobuf:"varint,1,opt,name=scale_tier,json=scaleTier,enum=google.cloud.ml.v1beta1.TrainingInput_ScaleTier" json:"scale_tier,omitempty"` + // Optional. Specifies the type of virtual machine to use for your training + // job's master worker. + // + // The following types are supported: + // + // <dl> + // <dt>standard</dt> + // <dd> + // A basic machine configuration suitable for training simple models with + // small to moderate datasets. + // </dd> + // <dt>large_model</dt> + // <dd> + // A machine with a lot of memory, specially suited for parameter servers + // when your model is large (having many hidden layers or layers with very + // large numbers of nodes). + // </dd> + // <dt>complex_model_s</dt> + // <dd> + // A machine suitable for the master and workers of the cluster when your + // model requires more computation than the standard machine can handle + // satisfactorily. + // </dd> + // <dt>complex_model_m</dt> + // <dd> + // A machine with roughly twice the number of cores and roughly double the + // memory of <code suppresswarning="true">complex_model_s</code>. + // </dd> + // <dt>complex_model_l</dt> + // <dd> + // A machine with roughly twice the number of cores and roughly double the + // memory of <code suppresswarning="true">complex_model_m</code>. + // </dd> + // <dt>standard_gpu</dt> + // <dd> + // A machine equivalent to <code suppresswarning="true">standard</code> that + // also includes a + // <a href="ml/docs/how-tos/using-gpus"> + // GPU that you can use in your trainer</a>. + // </dd> + // <dt>complex_model_m_gpu</dt> + // <dd> + // A machine equivalent to + // <code suppresswarning="true">coplex_model_m</code> that also includes + // four GPUs. + // </dd> + // </dl> + // + // You must set this value when `scaleTier` is set to `CUSTOM`. + MasterType string `protobuf:"bytes,2,opt,name=master_type,json=masterType" json:"master_type,omitempty"` + // Optional. Specifies the type of virtual machine to use for your training + // job's worker nodes. + // + // The supported values are the same as those described in the entry for + // `masterType`. + // + // This value must be present when `scaleTier` is set to `CUSTOM` and + // `workerCount` is greater than zero. + WorkerType string `protobuf:"bytes,3,opt,name=worker_type,json=workerType" json:"worker_type,omitempty"` + // Optional. Specifies the type of virtual machine to use for your training + // job's parameter server. + // + // The supported values are the same as those described in the entry for + // `master_type`. + // + // This value must be present when `scaleTier` is set to `CUSTOM` and + // `parameter_server_count` is greater than zero. + ParameterServerType string `protobuf:"bytes,4,opt,name=parameter_server_type,json=parameterServerType" json:"parameter_server_type,omitempty"` + // Optional. The number of worker replicas to use for the training job. Each + // replica in the cluster will be of the type specified in `worker_type`. + // + // This value can only be used when `scale_tier` is set to `CUSTOM`. If you + // set this value, you must also set `worker_type`. + WorkerCount int64 `protobuf:"varint,5,opt,name=worker_count,json=workerCount" json:"worker_count,omitempty"` + // Optional. The number of parameter server replicas to use for the training + // job. Each replica in the cluster will be of the type specified in + // `parameter_server_type`. + // + // This value can only be used when `scale_tier` is set to `CUSTOM`.If you + // set this value, you must also set `parameter_server_type`. + ParameterServerCount int64 `protobuf:"varint,6,opt,name=parameter_server_count,json=parameterServerCount" json:"parameter_server_count,omitempty"` + // Required. The Google Cloud Storage location of the packages with + // the training program and any additional dependencies. + PackageUris []string `protobuf:"bytes,7,rep,name=package_uris,json=packageUris" json:"package_uris,omitempty"` + // Required. The Python module name to run after installing the packages. + PythonModule string `protobuf:"bytes,8,opt,name=python_module,json=pythonModule" json:"python_module,omitempty"` + // Optional. Command line arguments to pass to the program. + Args []string `protobuf:"bytes,10,rep,name=args" json:"args,omitempty"` + // Optional. The set of Hyperparameters to tune. + Hyperparameters *HyperparameterSpec `protobuf:"bytes,12,opt,name=hyperparameters" json:"hyperparameters,omitempty"` + // Required. The Google Compute Engine region to run the training job in. + Region string `protobuf:"bytes,14,opt,name=region" json:"region,omitempty"` + // Optional. A Google Cloud Storage path in which to store training outputs + // and other data needed for training. This path is passed to your TensorFlow + // program as the 'job_dir' command-line argument. The benefit of specifying + // this field is that Cloud ML validates the path for use in training. + JobDir string `protobuf:"bytes,16,opt,name=job_dir,json=jobDir" json:"job_dir,omitempty"` + // Optional. The Google Cloud ML runtime version to use for training. If not + // set, Google Cloud ML will choose the latest stable version. + RuntimeVersion string `protobuf:"bytes,15,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` +} + +func (m *TrainingInput) Reset() { *m = TrainingInput{} } +func (m *TrainingInput) String() string { return proto.CompactTextString(m) } +func (*TrainingInput) ProtoMessage() {} +func (*TrainingInput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *TrainingInput) GetScaleTier() TrainingInput_ScaleTier { + if m != nil { + return m.ScaleTier + } + return TrainingInput_BASIC +} + +func (m *TrainingInput) GetMasterType() string { + if m != nil { + return m.MasterType + } + return "" +} + +func (m *TrainingInput) GetWorkerType() string { + if m != nil { + return m.WorkerType + } + return "" +} + +func (m *TrainingInput) GetParameterServerType() string { + if m != nil { + return m.ParameterServerType + } + return "" +} + +func (m *TrainingInput) GetWorkerCount() int64 { + if m != nil { + return m.WorkerCount + } + return 0 +} + +func (m *TrainingInput) GetParameterServerCount() int64 { + if m != nil { + return m.ParameterServerCount + } + return 0 +} + +func (m *TrainingInput) GetPackageUris() []string { + if m != nil { + return m.PackageUris + } + return nil +} + +func (m *TrainingInput) GetPythonModule() string { + if m != nil { + return m.PythonModule + } + return "" +} + +func (m *TrainingInput) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *TrainingInput) GetHyperparameters() *HyperparameterSpec { + if m != nil { + return m.Hyperparameters + } + return nil +} + +func (m *TrainingInput) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *TrainingInput) GetJobDir() string { + if m != nil { + return m.JobDir + } + return "" +} + +func (m *TrainingInput) GetRuntimeVersion() string { + if m != nil { + return m.RuntimeVersion + } + return "" +} + +// Represents a set of hyperparameters to optimize. +type HyperparameterSpec struct { + // Required. The type of goal to use for tuning. Available types are + // `MAXIMIZE` and `MINIMIZE`. + // + // Defaults to `MAXIMIZE`. + Goal HyperparameterSpec_GoalType `protobuf:"varint,1,opt,name=goal,enum=google.cloud.ml.v1beta1.HyperparameterSpec_GoalType" json:"goal,omitempty"` + // Required. The set of parameters to tune. + Params []*ParameterSpec `protobuf:"bytes,2,rep,name=params" json:"params,omitempty"` + // Optional. How many training trials should be attempted to optimize + // the specified hyperparameters. + // + // Defaults to one. + MaxTrials int32 `protobuf:"varint,3,opt,name=max_trials,json=maxTrials" json:"max_trials,omitempty"` + // Optional. The number of training trials to run concurrently. + // You can reduce the time it takes to perform hyperparameter tuning by adding + // trials in parallel. However, each trail only benefits from the information + // gained in completed trials. That means that a trial does not get access to + // the results of trials running at the same time, which could reduce the + // quality of the overall optimization. + // + // Each trial will use the same scale tier and machine types. + // + // Defaults to one. + MaxParallelTrials int32 `protobuf:"varint,4,opt,name=max_parallel_trials,json=maxParallelTrials" json:"max_parallel_trials,omitempty"` + // Optional. The Tensorflow summary tag name to use for optimizing trials. For + // current versions of Tensorflow, this tag name should exactly match what is + // shown in Tensorboard, including all scopes. For versions of Tensorflow + // prior to 0.12, this should be only the tag passed to tf.Summary. + // By default, "training/hptuning/metric" will be used. + HyperparameterMetricTag string `protobuf:"bytes,5,opt,name=hyperparameter_metric_tag,json=hyperparameterMetricTag" json:"hyperparameter_metric_tag,omitempty"` +} + +func (m *HyperparameterSpec) Reset() { *m = HyperparameterSpec{} } +func (m *HyperparameterSpec) String() string { return proto.CompactTextString(m) } +func (*HyperparameterSpec) ProtoMessage() {} +func (*HyperparameterSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *HyperparameterSpec) GetGoal() HyperparameterSpec_GoalType { + if m != nil { + return m.Goal + } + return HyperparameterSpec_GOAL_TYPE_UNSPECIFIED +} + +func (m *HyperparameterSpec) GetParams() []*ParameterSpec { + if m != nil { + return m.Params + } + return nil +} + +func (m *HyperparameterSpec) GetMaxTrials() int32 { + if m != nil { + return m.MaxTrials + } + return 0 +} + +func (m *HyperparameterSpec) GetMaxParallelTrials() int32 { + if m != nil { + return m.MaxParallelTrials + } + return 0 +} + +func (m *HyperparameterSpec) GetHyperparameterMetricTag() string { + if m != nil { + return m.HyperparameterMetricTag + } + return "" +} + +// Represents a single hyperparameter to optimize. +type ParameterSpec struct { + // Required. The parameter name must be unique amongst all ParameterConfigs in + // a HyperparameterSpec message. E.g., "learning_rate". + ParameterName string `protobuf:"bytes,1,opt,name=parameter_name,json=parameterName" json:"parameter_name,omitempty"` + // Required. The type of the parameter. + Type ParameterSpec_ParameterType `protobuf:"varint,4,opt,name=type,enum=google.cloud.ml.v1beta1.ParameterSpec_ParameterType" json:"type,omitempty"` + // Required if type is `DOUBLE` or `INTEGER`. This field + // should be unset if type is `CATEGORICAL`. This value should be integers if + // type is INTEGER. + MinValue float64 `protobuf:"fixed64,2,opt,name=min_value,json=minValue" json:"min_value,omitempty"` + // Required if typeis `DOUBLE` or `INTEGER`. This field + // should be unset if type is `CATEGORICAL`. This value should be integers if + // type is `INTEGER`. + MaxValue float64 `protobuf:"fixed64,3,opt,name=max_value,json=maxValue" json:"max_value,omitempty"` + // Required if type is `CATEGORICAL`. The list of possible categories. + CategoricalValues []string `protobuf:"bytes,5,rep,name=categorical_values,json=categoricalValues" json:"categorical_values,omitempty"` + // Required if type is `DISCRETE`. + // A list of feasible points. + // The list should be in strictly increasing order. For instance, this + // parameter might have possible settings of 1.5, 2.5, and 4.0. This list + // should not contain more than 1,000 values. + DiscreteValues []float64 `protobuf:"fixed64,6,rep,packed,name=discrete_values,json=discreteValues" json:"discrete_values,omitempty"` + // Optional. How the parameter should be scaled to the hypercube. + // Leave unset for categorical parameters. + // Some kind of scaling is strongly recommended for real or integral + // parameters (e.g., `UNIT_LINEAR_SCALE`). + ScaleType ParameterSpec_ScaleType `protobuf:"varint,7,opt,name=scale_type,json=scaleType,enum=google.cloud.ml.v1beta1.ParameterSpec_ScaleType" json:"scale_type,omitempty"` +} + +func (m *ParameterSpec) Reset() { *m = ParameterSpec{} } +func (m *ParameterSpec) String() string { return proto.CompactTextString(m) } +func (*ParameterSpec) ProtoMessage() {} +func (*ParameterSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ParameterSpec) GetParameterName() string { + if m != nil { + return m.ParameterName + } + return "" +} + +func (m *ParameterSpec) GetType() ParameterSpec_ParameterType { + if m != nil { + return m.Type + } + return ParameterSpec_PARAMETER_TYPE_UNSPECIFIED +} + +func (m *ParameterSpec) GetMinValue() float64 { + if m != nil { + return m.MinValue + } + return 0 +} + +func (m *ParameterSpec) GetMaxValue() float64 { + if m != nil { + return m.MaxValue + } + return 0 +} + +func (m *ParameterSpec) GetCategoricalValues() []string { + if m != nil { + return m.CategoricalValues + } + return nil +} + +func (m *ParameterSpec) GetDiscreteValues() []float64 { + if m != nil { + return m.DiscreteValues + } + return nil +} + +func (m *ParameterSpec) GetScaleType() ParameterSpec_ScaleType { + if m != nil { + return m.ScaleType + } + return ParameterSpec_NONE +} + +// Represents the result of a single hyperparameter tuning trial from a +// training job. The TrainingOutput object that is returned on successful +// completion of a training job with hyperparameter tuning includes a list +// of HyperparameterOutput objects, one for each successful trial. +type HyperparameterOutput struct { + // The trial id for these results. + TrialId string `protobuf:"bytes,1,opt,name=trial_id,json=trialId" json:"trial_id,omitempty"` + // The hyperparameters given to this trial. + Hyperparameters map[string]string `protobuf:"bytes,2,rep,name=hyperparameters" json:"hyperparameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The final objective metric seen for this trial. + FinalMetric *HyperparameterOutput_HyperparameterMetric `protobuf:"bytes,3,opt,name=final_metric,json=finalMetric" json:"final_metric,omitempty"` + // All recorded object metrics for this trial. + AllMetrics []*HyperparameterOutput_HyperparameterMetric `protobuf:"bytes,4,rep,name=all_metrics,json=allMetrics" json:"all_metrics,omitempty"` +} + +func (m *HyperparameterOutput) Reset() { *m = HyperparameterOutput{} } +func (m *HyperparameterOutput) String() string { return proto.CompactTextString(m) } +func (*HyperparameterOutput) ProtoMessage() {} +func (*HyperparameterOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *HyperparameterOutput) GetTrialId() string { + if m != nil { + return m.TrialId + } + return "" +} + +func (m *HyperparameterOutput) GetHyperparameters() map[string]string { + if m != nil { + return m.Hyperparameters + } + return nil +} + +func (m *HyperparameterOutput) GetFinalMetric() *HyperparameterOutput_HyperparameterMetric { + if m != nil { + return m.FinalMetric + } + return nil +} + +func (m *HyperparameterOutput) GetAllMetrics() []*HyperparameterOutput_HyperparameterMetric { + if m != nil { + return m.AllMetrics + } + return nil +} + +// An observed value of a metric. +type HyperparameterOutput_HyperparameterMetric struct { + // The global training step for this metric. + TrainingStep int64 `protobuf:"varint,1,opt,name=training_step,json=trainingStep" json:"training_step,omitempty"` + // The objective value at this training step. + ObjectiveValue float64 `protobuf:"fixed64,2,opt,name=objective_value,json=objectiveValue" json:"objective_value,omitempty"` +} + +func (m *HyperparameterOutput_HyperparameterMetric) Reset() { + *m = HyperparameterOutput_HyperparameterMetric{} +} +func (m *HyperparameterOutput_HyperparameterMetric) String() string { return proto.CompactTextString(m) } +func (*HyperparameterOutput_HyperparameterMetric) ProtoMessage() {} +func (*HyperparameterOutput_HyperparameterMetric) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{3, 0} +} + +func (m *HyperparameterOutput_HyperparameterMetric) GetTrainingStep() int64 { + if m != nil { + return m.TrainingStep + } + return 0 +} + +func (m *HyperparameterOutput_HyperparameterMetric) GetObjectiveValue() float64 { + if m != nil { + return m.ObjectiveValue + } + return 0 +} + +// Represents results of a training job. Output only. +type TrainingOutput struct { + // The number of hyperparameter tuning trials that completed successfully. + // Only set for hyperparameter tuning jobs. + CompletedTrialCount int64 `protobuf:"varint,1,opt,name=completed_trial_count,json=completedTrialCount" json:"completed_trial_count,omitempty"` + // Results for individual Hyperparameter trials. + // Only set for hyperparameter tuning jobs. + Trials []*HyperparameterOutput `protobuf:"bytes,2,rep,name=trials" json:"trials,omitempty"` + // The amount of ML units consumed by the job. + ConsumedMlUnits float64 `protobuf:"fixed64,3,opt,name=consumed_ml_units,json=consumedMlUnits" json:"consumed_ml_units,omitempty"` + // Whether this job is a hyperparameter tuning job. + IsHyperparameterTuningJob bool `protobuf:"varint,4,opt,name=is_hyperparameter_tuning_job,json=isHyperparameterTuningJob" json:"is_hyperparameter_tuning_job,omitempty"` +} + +func (m *TrainingOutput) Reset() { *m = TrainingOutput{} } +func (m *TrainingOutput) String() string { return proto.CompactTextString(m) } +func (*TrainingOutput) ProtoMessage() {} +func (*TrainingOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *TrainingOutput) GetCompletedTrialCount() int64 { + if m != nil { + return m.CompletedTrialCount + } + return 0 +} + +func (m *TrainingOutput) GetTrials() []*HyperparameterOutput { + if m != nil { + return m.Trials + } + return nil +} + +func (m *TrainingOutput) GetConsumedMlUnits() float64 { + if m != nil { + return m.ConsumedMlUnits + } + return 0 +} + +func (m *TrainingOutput) GetIsHyperparameterTuningJob() bool { + if m != nil { + return m.IsHyperparameterTuningJob + } + return false +} + +// Represents input parameters for a prediction job. +type PredictionInput struct { + // Required. The model or the version to use for prediction. + // + // Types that are valid to be assigned to ModelVersion: + // *PredictionInput_ModelName + // *PredictionInput_VersionName + // *PredictionInput_Uri + ModelVersion isPredictionInput_ModelVersion `protobuf_oneof:"model_version"` + // Required. The format of the input data files. + DataFormat PredictionInput_DataFormat `protobuf:"varint,3,opt,name=data_format,json=dataFormat,enum=google.cloud.ml.v1beta1.PredictionInput_DataFormat" json:"data_format,omitempty"` + // Required. The Google Cloud Storage location of the input data files. + // May contain wildcards. + InputPaths []string `protobuf:"bytes,4,rep,name=input_paths,json=inputPaths" json:"input_paths,omitempty"` + // Required. The output Google Cloud Storage location. + OutputPath string `protobuf:"bytes,5,opt,name=output_path,json=outputPath" json:"output_path,omitempty"` + // Optional. The maximum number of workers to be used for parallel processing. + // Defaults to 10 if not specified. + MaxWorkerCount int64 `protobuf:"varint,6,opt,name=max_worker_count,json=maxWorkerCount" json:"max_worker_count,omitempty"` + // Required. The Google Compute Engine region to run the prediction job in. + Region string `protobuf:"bytes,7,opt,name=region" json:"region,omitempty"` + // Optional. The Google Cloud ML runtime version to use for this batch + // prediction. If not set, Google Cloud ML will pick the runtime version used + // during the CreateVersion request for this model version, or choose the + // latest stable version when model version information is not available + // such as when the model is specified by uri. + RuntimeVersion string `protobuf:"bytes,8,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` +} + +func (m *PredictionInput) Reset() { *m = PredictionInput{} } +func (m *PredictionInput) String() string { return proto.CompactTextString(m) } +func (*PredictionInput) ProtoMessage() {} +func (*PredictionInput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +type isPredictionInput_ModelVersion interface { + isPredictionInput_ModelVersion() +} + +type PredictionInput_ModelName struct { + ModelName string `protobuf:"bytes,1,opt,name=model_name,json=modelName,oneof"` +} +type PredictionInput_VersionName struct { + VersionName string `protobuf:"bytes,2,opt,name=version_name,json=versionName,oneof"` +} +type PredictionInput_Uri struct { + Uri string `protobuf:"bytes,9,opt,name=uri,oneof"` +} + +func (*PredictionInput_ModelName) isPredictionInput_ModelVersion() {} +func (*PredictionInput_VersionName) isPredictionInput_ModelVersion() {} +func (*PredictionInput_Uri) isPredictionInput_ModelVersion() {} + +func (m *PredictionInput) GetModelVersion() isPredictionInput_ModelVersion { + if m != nil { + return m.ModelVersion + } + return nil +} + +func (m *PredictionInput) GetModelName() string { + if x, ok := m.GetModelVersion().(*PredictionInput_ModelName); ok { + return x.ModelName + } + return "" +} + +func (m *PredictionInput) GetVersionName() string { + if x, ok := m.GetModelVersion().(*PredictionInput_VersionName); ok { + return x.VersionName + } + return "" +} + +func (m *PredictionInput) GetUri() string { + if x, ok := m.GetModelVersion().(*PredictionInput_Uri); ok { + return x.Uri + } + return "" +} + +func (m *PredictionInput) GetDataFormat() PredictionInput_DataFormat { + if m != nil { + return m.DataFormat + } + return PredictionInput_DATA_FORMAT_UNSPECIFIED +} + +func (m *PredictionInput) GetInputPaths() []string { + if m != nil { + return m.InputPaths + } + return nil +} + +func (m *PredictionInput) GetOutputPath() string { + if m != nil { + return m.OutputPath + } + return "" +} + +func (m *PredictionInput) GetMaxWorkerCount() int64 { + if m != nil { + return m.MaxWorkerCount + } + return 0 +} + +func (m *PredictionInput) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *PredictionInput) GetRuntimeVersion() string { + if m != nil { + return m.RuntimeVersion + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PredictionInput) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PredictionInput_OneofMarshaler, _PredictionInput_OneofUnmarshaler, _PredictionInput_OneofSizer, []interface{}{ + (*PredictionInput_ModelName)(nil), + (*PredictionInput_VersionName)(nil), + (*PredictionInput_Uri)(nil), + } +} + +func _PredictionInput_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PredictionInput) + // model_version + switch x := m.ModelVersion.(type) { + case *PredictionInput_ModelName: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ModelName) + case *PredictionInput_VersionName: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.VersionName) + case *PredictionInput_Uri: + b.EncodeVarint(9<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Uri) + case nil: + default: + return fmt.Errorf("PredictionInput.ModelVersion has unexpected type %T", x) + } + return nil +} + +func _PredictionInput_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PredictionInput) + switch tag { + case 1: // model_version.model_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ModelVersion = &PredictionInput_ModelName{x} + return true, err + case 2: // model_version.version_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ModelVersion = &PredictionInput_VersionName{x} + return true, err + case 9: // model_version.uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ModelVersion = &PredictionInput_Uri{x} + return true, err + default: + return false, nil + } +} + +func _PredictionInput_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PredictionInput) + // model_version + switch x := m.ModelVersion.(type) { + case *PredictionInput_ModelName: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ModelName))) + n += len(x.ModelName) + case *PredictionInput_VersionName: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.VersionName))) + n += len(x.VersionName) + case *PredictionInput_Uri: + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Uri))) + n += len(x.Uri) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents results of a prediction job. +type PredictionOutput struct { + // The output Google Cloud Storage location provided at the job creation time. + OutputPath string `protobuf:"bytes,1,opt,name=output_path,json=outputPath" json:"output_path,omitempty"` + // The number of generated predictions. + PredictionCount int64 `protobuf:"varint,2,opt,name=prediction_count,json=predictionCount" json:"prediction_count,omitempty"` + // The number of data instances which resulted in errors. + ErrorCount int64 `protobuf:"varint,3,opt,name=error_count,json=errorCount" json:"error_count,omitempty"` + // Node hours used by the batch prediction job. + NodeHours float64 `protobuf:"fixed64,4,opt,name=node_hours,json=nodeHours" json:"node_hours,omitempty"` +} + +func (m *PredictionOutput) Reset() { *m = PredictionOutput{} } +func (m *PredictionOutput) String() string { return proto.CompactTextString(m) } +func (*PredictionOutput) ProtoMessage() {} +func (*PredictionOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *PredictionOutput) GetOutputPath() string { + if m != nil { + return m.OutputPath + } + return "" +} + +func (m *PredictionOutput) GetPredictionCount() int64 { + if m != nil { + return m.PredictionCount + } + return 0 +} + +func (m *PredictionOutput) GetErrorCount() int64 { + if m != nil { + return m.ErrorCount + } + return 0 +} + +func (m *PredictionOutput) GetNodeHours() float64 { + if m != nil { + return m.NodeHours + } + return 0 +} + +// Represents a training or prediction job. +type Job struct { + // Required. The user-specified id of the job. + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId" json:"job_id,omitempty"` + // Required. Parameters to create a job. + // + // Types that are valid to be assigned to Input: + // *Job_TrainingInput + // *Job_PredictionInput + Input isJob_Input `protobuf_oneof:"input"` + // Output only. When the job was created. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. When the job processing was started. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Output only. When the job processing was completed. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Output only. The detailed state of a job. + State Job_State `protobuf:"varint,7,opt,name=state,enum=google.cloud.ml.v1beta1.Job_State" json:"state,omitempty"` + // Output only. The details of a failure or a cancellation. + ErrorMessage string `protobuf:"bytes,8,opt,name=error_message,json=errorMessage" json:"error_message,omitempty"` + // Output only. The current result of the job. + // + // Types that are valid to be assigned to Output: + // *Job_TrainingOutput + // *Job_PredictionOutput + Output isJob_Output `protobuf_oneof:"output"` +} + +func (m *Job) Reset() { *m = Job{} } +func (m *Job) String() string { return proto.CompactTextString(m) } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type isJob_Input interface { + isJob_Input() +} +type isJob_Output interface { + isJob_Output() +} + +type Job_TrainingInput struct { + TrainingInput *TrainingInput `protobuf:"bytes,2,opt,name=training_input,json=trainingInput,oneof"` +} +type Job_PredictionInput struct { + PredictionInput *PredictionInput `protobuf:"bytes,3,opt,name=prediction_input,json=predictionInput,oneof"` +} +type Job_TrainingOutput struct { + TrainingOutput *TrainingOutput `protobuf:"bytes,9,opt,name=training_output,json=trainingOutput,oneof"` +} +type Job_PredictionOutput struct { + PredictionOutput *PredictionOutput `protobuf:"bytes,10,opt,name=prediction_output,json=predictionOutput,oneof"` +} + +func (*Job_TrainingInput) isJob_Input() {} +func (*Job_PredictionInput) isJob_Input() {} +func (*Job_TrainingOutput) isJob_Output() {} +func (*Job_PredictionOutput) isJob_Output() {} + +func (m *Job) GetInput() isJob_Input { + if m != nil { + return m.Input + } + return nil +} +func (m *Job) GetOutput() isJob_Output { + if m != nil { + return m.Output + } + return nil +} + +func (m *Job) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +func (m *Job) GetTrainingInput() *TrainingInput { + if x, ok := m.GetInput().(*Job_TrainingInput); ok { + return x.TrainingInput + } + return nil +} + +func (m *Job) GetPredictionInput() *PredictionInput { + if x, ok := m.GetInput().(*Job_PredictionInput); ok { + return x.PredictionInput + } + return nil +} + +func (m *Job) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Job) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *Job) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *Job) GetState() Job_State { + if m != nil { + return m.State + } + return Job_STATE_UNSPECIFIED +} + +func (m *Job) GetErrorMessage() string { + if m != nil { + return m.ErrorMessage + } + return "" +} + +func (m *Job) GetTrainingOutput() *TrainingOutput { + if x, ok := m.GetOutput().(*Job_TrainingOutput); ok { + return x.TrainingOutput + } + return nil +} + +func (m *Job) GetPredictionOutput() *PredictionOutput { + if x, ok := m.GetOutput().(*Job_PredictionOutput); ok { + return x.PredictionOutput + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Job) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Job_OneofMarshaler, _Job_OneofUnmarshaler, _Job_OneofSizer, []interface{}{ + (*Job_TrainingInput)(nil), + (*Job_PredictionInput)(nil), + (*Job_TrainingOutput)(nil), + (*Job_PredictionOutput)(nil), + } +} + +func _Job_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Job) + // input + switch x := m.Input.(type) { + case *Job_TrainingInput: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TrainingInput); err != nil { + return err + } + case *Job_PredictionInput: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PredictionInput); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Job.Input has unexpected type %T", x) + } + // output + switch x := m.Output.(type) { + case *Job_TrainingOutput: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TrainingOutput); err != nil { + return err + } + case *Job_PredictionOutput: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PredictionOutput); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Job.Output has unexpected type %T", x) + } + return nil +} + +func _Job_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Job) + switch tag { + case 2: // input.training_input + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TrainingInput) + err := b.DecodeMessage(msg) + m.Input = &Job_TrainingInput{msg} + return true, err + case 3: // input.prediction_input + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PredictionInput) + err := b.DecodeMessage(msg) + m.Input = &Job_PredictionInput{msg} + return true, err + case 9: // output.training_output + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TrainingOutput) + err := b.DecodeMessage(msg) + m.Output = &Job_TrainingOutput{msg} + return true, err + case 10: // output.prediction_output + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PredictionOutput) + err := b.DecodeMessage(msg) + m.Output = &Job_PredictionOutput{msg} + return true, err + default: + return false, nil + } +} + +func _Job_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Job) + // input + switch x := m.Input.(type) { + case *Job_TrainingInput: + s := proto.Size(x.TrainingInput) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_PredictionInput: + s := proto.Size(x.PredictionInput) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // output + switch x := m.Output.(type) { + case *Job_TrainingOutput: + s := proto.Size(x.TrainingOutput) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_PredictionOutput: + s := proto.Size(x.PredictionOutput) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request message for the CreateJob method. +type CreateJobRequest struct { + // Required. The project name. + // + // Authorization: requires `Editor` role on the specified project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The job to create. + Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` +} + +func (m *CreateJobRequest) Reset() { *m = CreateJobRequest{} } +func (m *CreateJobRequest) String() string { return proto.CompactTextString(m) } +func (*CreateJobRequest) ProtoMessage() {} +func (*CreateJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *CreateJobRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateJobRequest) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +// Request message for the ListJobs method. +type ListJobsRequest struct { + // Required. The name of the project for which to list jobs. + // + // Authorization: requires `Viewer` role on the specified project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. Specifies the subset of jobs to retrieve. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // Optional. A page token to request the next page of results. + // + // You get the token from the `next_page_token` field of the response from + // the previous call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. The number of jobs to retrieve per "page" of results. If there + // are more remaining results than this number, the response message will + // contain a valid value in the `next_page_token` field. + // + // The default value is 20, and the maximum page size is 100. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListJobsRequest) Reset() { *m = ListJobsRequest{} } +func (m *ListJobsRequest) String() string { return proto.CompactTextString(m) } +func (*ListJobsRequest) ProtoMessage() {} +func (*ListJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *ListJobsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListJobsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListJobsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListJobsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for the ListJobs method. +type ListJobsResponse struct { + // The list of jobs. + Jobs []*Job `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"` + // Optional. Pass this token as the `page_token` field of the request for a + // subsequent call. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListJobsResponse) Reset() { *m = ListJobsResponse{} } +func (m *ListJobsResponse) String() string { return proto.CompactTextString(m) } +func (*ListJobsResponse) ProtoMessage() {} +func (*ListJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *ListJobsResponse) GetJobs() []*Job { + if m != nil { + return m.Jobs + } + return nil +} + +func (m *ListJobsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for the GetJob method. +type GetJobRequest struct { + // Required. The name of the job to get the description of. + // + // Authorization: requires `Viewer` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetJobRequest) Reset() { *m = GetJobRequest{} } +func (m *GetJobRequest) String() string { return proto.CompactTextString(m) } +func (*GetJobRequest) ProtoMessage() {} +func (*GetJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *GetJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for the CancelJob method. +type CancelJobRequest struct { + // Required. The name of the job to cancel. + // + // Authorization: requires `Editor` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *CancelJobRequest) Reset() { *m = CancelJobRequest{} } +func (m *CancelJobRequest) String() string { return proto.CompactTextString(m) } +func (*CancelJobRequest) ProtoMessage() {} +func (*CancelJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *CancelJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*TrainingInput)(nil), "google.cloud.ml.v1beta1.TrainingInput") + proto.RegisterType((*HyperparameterSpec)(nil), "google.cloud.ml.v1beta1.HyperparameterSpec") + proto.RegisterType((*ParameterSpec)(nil), "google.cloud.ml.v1beta1.ParameterSpec") + proto.RegisterType((*HyperparameterOutput)(nil), "google.cloud.ml.v1beta1.HyperparameterOutput") + proto.RegisterType((*HyperparameterOutput_HyperparameterMetric)(nil), "google.cloud.ml.v1beta1.HyperparameterOutput.HyperparameterMetric") + proto.RegisterType((*TrainingOutput)(nil), "google.cloud.ml.v1beta1.TrainingOutput") + proto.RegisterType((*PredictionInput)(nil), "google.cloud.ml.v1beta1.PredictionInput") + proto.RegisterType((*PredictionOutput)(nil), "google.cloud.ml.v1beta1.PredictionOutput") + proto.RegisterType((*Job)(nil), "google.cloud.ml.v1beta1.Job") + proto.RegisterType((*CreateJobRequest)(nil), "google.cloud.ml.v1beta1.CreateJobRequest") + proto.RegisterType((*ListJobsRequest)(nil), "google.cloud.ml.v1beta1.ListJobsRequest") + proto.RegisterType((*ListJobsResponse)(nil), "google.cloud.ml.v1beta1.ListJobsResponse") + proto.RegisterType((*GetJobRequest)(nil), "google.cloud.ml.v1beta1.GetJobRequest") + proto.RegisterType((*CancelJobRequest)(nil), "google.cloud.ml.v1beta1.CancelJobRequest") + proto.RegisterEnum("google.cloud.ml.v1beta1.TrainingInput_ScaleTier", TrainingInput_ScaleTier_name, TrainingInput_ScaleTier_value) + proto.RegisterEnum("google.cloud.ml.v1beta1.HyperparameterSpec_GoalType", HyperparameterSpec_GoalType_name, HyperparameterSpec_GoalType_value) + proto.RegisterEnum("google.cloud.ml.v1beta1.ParameterSpec_ParameterType", ParameterSpec_ParameterType_name, ParameterSpec_ParameterType_value) + proto.RegisterEnum("google.cloud.ml.v1beta1.ParameterSpec_ScaleType", ParameterSpec_ScaleType_name, ParameterSpec_ScaleType_value) + proto.RegisterEnum("google.cloud.ml.v1beta1.PredictionInput_DataFormat", PredictionInput_DataFormat_name, PredictionInput_DataFormat_value) + proto.RegisterEnum("google.cloud.ml.v1beta1.Job_State", Job_State_name, Job_State_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for JobService service + +type JobServiceClient interface { + // Creates a training or a batch prediction job. + CreateJob(ctx context.Context, in *CreateJobRequest, opts ...grpc.CallOption) (*Job, error) + // Lists the jobs in the project. + ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) + // Describes a job. + GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) + // Cancels a running job. + CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) +} + +type jobServiceClient struct { + cc *grpc.ClientConn +} + +func NewJobServiceClient(cc *grpc.ClientConn) JobServiceClient { + return &jobServiceClient{cc} +} + +func (c *jobServiceClient) CreateJob(ctx context.Context, in *CreateJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.JobService/CreateJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobServiceClient) ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) { + out := new(ListJobsResponse) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.JobService/ListJobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobServiceClient) GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.JobService/GetJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobServiceClient) CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.JobService/CancelJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for JobService service + +type JobServiceServer interface { + // Creates a training or a batch prediction job. + CreateJob(context.Context, *CreateJobRequest) (*Job, error) + // Lists the jobs in the project. + ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) + // Describes a job. + GetJob(context.Context, *GetJobRequest) (*Job, error) + // Cancels a running job. + CancelJob(context.Context, *CancelJobRequest) (*google_protobuf1.Empty, error) +} + +func RegisterJobServiceServer(s *grpc.Server, srv JobServiceServer) { + s.RegisterService(&_JobService_serviceDesc, srv) +} + +func _JobService_CreateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).CreateJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.JobService/CreateJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).CreateJob(ctx, req.(*CreateJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobService_ListJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListJobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).ListJobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.JobService/ListJobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).ListJobs(ctx, req.(*ListJobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobService_GetJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).GetJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.JobService/GetJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).GetJob(ctx, req.(*GetJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobService_CancelJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).CancelJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.JobService/CancelJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).CancelJob(ctx, req.(*CancelJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _JobService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.ml.v1beta1.JobService", + HandlerType: (*JobServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateJob", + Handler: _JobService_CreateJob_Handler, + }, + { + MethodName: "ListJobs", + Handler: _JobService_ListJobs_Handler, + }, + { + MethodName: "GetJob", + Handler: _JobService_GetJob_Handler, + }, + { + MethodName: "CancelJob", + Handler: _JobService_CancelJob_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/ml/v1beta1/job_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/ml/v1beta1/job_service.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2082 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, + 0x11, 0x16, 0x9f, 0x22, 0x8b, 0x12, 0x39, 0x6e, 0x5b, 0x36, 0x2d, 0x7b, 0x63, 0x79, 0x8c, 0x78, + 0x65, 0x07, 0x26, 0xd7, 0xf2, 0x06, 0xd8, 0xf5, 0x22, 0x09, 0x28, 0x72, 0x2c, 0x51, 0x10, 0x1f, + 0x69, 0x0e, 0x1d, 0xc7, 0x08, 0x30, 0x68, 0x92, 0x6d, 0x7a, 0xe4, 0x99, 0xe9, 0xc9, 0x4c, 0xd3, + 0x91, 0x36, 0x30, 0x10, 0x24, 0x39, 0xe5, 0x90, 0x4b, 0x90, 0x1c, 0x03, 0xe4, 0x9a, 0xbf, 0x93, + 0x43, 0xfe, 0x40, 0x8e, 0xf9, 0x01, 0x39, 0x06, 0xfd, 0xe0, 0x53, 0x96, 0xe4, 0x45, 0x72, 0x63, + 0x7f, 0xf5, 0x55, 0x55, 0x77, 0x55, 0x75, 0x4d, 0x35, 0xe1, 0xd1, 0x98, 0xb1, 0xb1, 0x47, 0xab, + 0x43, 0x8f, 0x4d, 0x46, 0x55, 0xdf, 0xab, 0xbe, 0x7f, 0x3a, 0xa0, 0x9c, 0x3c, 0xad, 0x9e, 0xb0, + 0x81, 0x13, 0xd3, 0xe8, 0xbd, 0x3b, 0xa4, 0x95, 0x30, 0x62, 0x9c, 0xa1, 0x5b, 0x8a, 0x5a, 0x91, + 0xd4, 0x8a, 0xef, 0x55, 0x34, 0x75, 0xfb, 0xae, 0xb6, 0x41, 0x42, 0xb7, 0x4a, 0x82, 0x80, 0x71, + 0xc2, 0x5d, 0x16, 0xc4, 0x4a, 0x6d, 0x7b, 0x6b, 0x51, 0x3a, 0xe1, 0x6f, 0x35, 0x7c, 0x47, 0xc3, + 0x72, 0x35, 0x98, 0xbc, 0xa9, 0x52, 0x3f, 0xe4, 0x67, 0x5a, 0x78, 0x6f, 0x55, 0xc8, 0x5d, 0x9f, + 0xc6, 0x9c, 0xf8, 0xa1, 0x22, 0x98, 0x7f, 0xcc, 0xc0, 0xa6, 0x1d, 0x11, 0x37, 0x70, 0x83, 0x71, + 0x33, 0x08, 0x27, 0x1c, 0x75, 0x00, 0xe2, 0x21, 0xf1, 0xa8, 0xc3, 0x5d, 0x1a, 0x95, 0x13, 0x3b, + 0x89, 0xdd, 0xe2, 0xde, 0x17, 0x95, 0x0b, 0xb6, 0x5c, 0x59, 0xd2, 0xad, 0xf4, 0x84, 0xa2, 0xed, + 0xd2, 0x08, 0xe7, 0xe3, 0xe9, 0x4f, 0x74, 0x0f, 0x0a, 0x3e, 0x89, 0x39, 0x8d, 0x1c, 0x7e, 0x16, + 0xd2, 0x72, 0x72, 0x27, 0xb1, 0x9b, 0xc7, 0xa0, 0x20, 0xfb, 0x2c, 0xa4, 0x82, 0xf0, 0x2b, 0x16, + 0xbd, 0x9b, 0x12, 0x52, 0x8a, 0xa0, 0x20, 0x49, 0xd8, 0x83, 0xad, 0x90, 0x44, 0xc4, 0xa7, 0xc2, + 0x88, 0x88, 0xe5, 0x94, 0x9a, 0x96, 0xd4, 0xeb, 0x33, 0x61, 0x4f, 0xca, 0xa4, 0xce, 0x7d, 0xd8, + 0xd0, 0x46, 0x87, 0x6c, 0x12, 0xf0, 0x72, 0x66, 0x27, 0xb1, 0x9b, 0xc2, 0xda, 0x51, 0x5d, 0x40, + 0xe8, 0x4b, 0xb8, 0x79, 0xce, 0xac, 0x22, 0x67, 0x25, 0xf9, 0xc6, 0x8a, 0x5d, 0xa5, 0x75, 0x1f, + 0x36, 0x42, 0x32, 0x7c, 0x47, 0xc6, 0xd4, 0x99, 0x44, 0x6e, 0x5c, 0x5e, 0xdf, 0x49, 0xed, 0xe6, + 0x71, 0x41, 0x63, 0xfd, 0xc8, 0x8d, 0xd1, 0x03, 0xd8, 0x0c, 0xcf, 0xf8, 0x5b, 0x16, 0x38, 0x3e, + 0x1b, 0x4d, 0x3c, 0x5a, 0xce, 0xc9, 0x7d, 0x6e, 0x28, 0xb0, 0x25, 0x31, 0x84, 0x20, 0x4d, 0xa2, + 0x71, 0x5c, 0x06, 0xa9, 0x2f, 0x7f, 0xa3, 0x3e, 0x94, 0xde, 0x9e, 0x85, 0x34, 0x9a, 0x39, 0x8e, + 0xcb, 0x1b, 0x3b, 0x89, 0xdd, 0xc2, 0xde, 0x0f, 0x2e, 0x4c, 0xc0, 0xe1, 0x12, 0xbf, 0x17, 0xd2, + 0x21, 0x5e, 0xb5, 0x81, 0x6e, 0x42, 0x36, 0xa2, 0x63, 0x97, 0x05, 0xe5, 0xa2, 0xdc, 0x88, 0x5e, + 0xa1, 0x5b, 0xb0, 0x2e, 0xaa, 0x73, 0xe4, 0x46, 0x65, 0x43, 0x09, 0x4e, 0xd8, 0xa0, 0xe1, 0x46, + 0xe8, 0x73, 0x28, 0x45, 0x93, 0x40, 0xd4, 0x8a, 0xf3, 0x9e, 0x46, 0xb1, 0xd0, 0x2c, 0x49, 0x42, + 0x51, 0xc3, 0x2f, 0x15, 0x6a, 0x76, 0x21, 0x3f, 0xcb, 0x39, 0xca, 0x43, 0x66, 0xbf, 0xd6, 0x6b, + 0xd6, 0x8d, 0x35, 0x54, 0x04, 0xe8, 0xd9, 0xb5, 0x76, 0xa3, 0x86, 0x1b, 0xce, 0x53, 0x23, 0x81, + 0x36, 0x21, 0xdf, 0xc5, 0x56, 0xab, 0xd9, 0x6f, 0x39, 0x4f, 0x8d, 0x94, 0x58, 0x4a, 0xa6, 0x73, + 0xd0, 0xed, 0x1b, 0x59, 0x04, 0x90, 0xad, 0xf7, 0x7b, 0x76, 0xa7, 0x65, 0x64, 0xcc, 0x7f, 0x27, + 0x01, 0x9d, 0x3f, 0x13, 0x3a, 0x84, 0xf4, 0x98, 0x11, 0x4f, 0xd7, 0xe3, 0x97, 0xdf, 0x21, 0x1c, + 0x95, 0x03, 0x46, 0x3c, 0x51, 0x12, 0x58, 0x5a, 0x40, 0x3f, 0x86, 0xac, 0x94, 0xc7, 0xe5, 0xe4, + 0x4e, 0x6a, 0xb7, 0xb0, 0xf7, 0xf0, 0x42, 0x5b, 0xdd, 0xa5, 0xa8, 0x6a, 0x2d, 0xf4, 0x19, 0x80, + 0x4f, 0x4e, 0x1d, 0x1e, 0xb9, 0xc4, 0x8b, 0x65, 0xb1, 0x66, 0x70, 0xde, 0x27, 0xa7, 0xb6, 0x04, + 0x50, 0x05, 0xae, 0x0b, 0xb1, 0x20, 0x7b, 0x1e, 0xf5, 0xa6, 0xbc, 0xb4, 0xe4, 0x5d, 0xf3, 0xc9, + 0x69, 0x57, 0x4b, 0x34, 0xff, 0x39, 0xdc, 0x5e, 0x4e, 0x97, 0xe3, 0x53, 0x1e, 0xb9, 0x43, 0x87, + 0x93, 0xb1, 0x2c, 0xda, 0x3c, 0xbe, 0xb5, 0x4c, 0x68, 0x49, 0xb9, 0x4d, 0xc6, 0x66, 0x0d, 0x72, + 0xd3, 0xc3, 0xa1, 0xdb, 0xb0, 0x75, 0xd0, 0xa9, 0x1d, 0x3b, 0xf6, 0xcf, 0xbb, 0x96, 0xd3, 0x6f, + 0xf7, 0xba, 0x56, 0xbd, 0xf9, 0xa2, 0x69, 0x35, 0x8c, 0x35, 0xb4, 0x01, 0xb9, 0x56, 0xed, 0x55, + 0xb3, 0xd5, 0x7c, 0x6d, 0x19, 0x09, 0xb9, 0x6a, 0xb6, 0xd5, 0x2a, 0x69, 0xfe, 0x3d, 0x0d, 0x9b, + 0x4b, 0xe7, 0x44, 0xdf, 0x87, 0xe2, 0x7c, 0x2f, 0x01, 0xf1, 0xa9, 0x8c, 0x79, 0x1e, 0x6f, 0xce, + 0xd0, 0x36, 0xf1, 0xa9, 0x48, 0xc8, 0xec, 0x0a, 0x5e, 0x96, 0x90, 0x25, 0xe3, 0xf3, 0x95, 0x4a, + 0x88, 0xb0, 0x80, 0xee, 0x40, 0xde, 0x77, 0x03, 0xe7, 0x3d, 0xf1, 0x26, 0xaa, 0x3b, 0x24, 0x70, + 0xce, 0x77, 0x83, 0x97, 0x62, 0x2d, 0x85, 0xe4, 0x54, 0x0b, 0x53, 0x5a, 0x48, 0x4e, 0x95, 0xf0, + 0x09, 0xa0, 0x21, 0xe1, 0x74, 0xcc, 0x22, 0x77, 0x48, 0x3c, 0x45, 0x8a, 0xcb, 0x19, 0x79, 0xa1, + 0xae, 0x2d, 0x48, 0x24, 0x3b, 0x16, 0x55, 0x3d, 0x72, 0xe3, 0x61, 0x44, 0x39, 0x9d, 0x72, 0xb3, + 0x3b, 0xa9, 0xdd, 0x04, 0x2e, 0x4e, 0x61, 0x4d, 0x9c, 0xb7, 0x40, 0x71, 0xc2, 0xf5, 0x2b, 0x5a, + 0xe0, 0xf2, 0x09, 0xd5, 0x75, 0x10, 0xa7, 0xd3, 0x2d, 0xf0, 0x2c, 0xa4, 0xe6, 0x78, 0x21, 0xc8, + 0x32, 0x5b, 0xdf, 0x83, 0xed, 0x6e, 0x0d, 0xd7, 0x5a, 0x96, 0x6d, 0xe1, 0x8f, 0xa5, 0x0c, 0x20, + 0xdb, 0xe8, 0xf4, 0xf7, 0x8f, 0x45, 0xc2, 0x0a, 0xb0, 0xde, 0x6c, 0xdb, 0xd6, 0x81, 0x85, 0x8d, + 0x24, 0x2a, 0x41, 0xa1, 0x5e, 0xb3, 0xad, 0x83, 0x0e, 0x6e, 0xd6, 0x6b, 0xc7, 0x46, 0x4a, 0xa4, + 0xb3, 0xd1, 0xec, 0xd5, 0xb1, 0x65, 0x5b, 0x46, 0xda, 0xfc, 0xc5, 0xf4, 0x3e, 0x0a, 0x27, 0x39, + 0x48, 0xb7, 0x3b, 0x6d, 0xcb, 0x58, 0x43, 0x5b, 0x70, 0xad, 0xdf, 0x6e, 0xda, 0xce, 0x71, 0xb3, + 0x6d, 0xd5, 0xb0, 0xd3, 0xab, 0xd7, 0xa4, 0x65, 0x04, 0x45, 0x05, 0x77, 0x0e, 0x34, 0x96, 0x44, + 0xdb, 0x70, 0x53, 0x62, 0xd8, 0x7a, 0x69, 0xe1, 0x9e, 0xb5, 0x20, 0x4b, 0x99, 0x7f, 0x4e, 0xc3, + 0x8d, 0xe5, 0x0b, 0xd6, 0x99, 0x70, 0xf1, 0xcd, 0xb8, 0x0d, 0x39, 0x59, 0xe7, 0x8e, 0x3b, 0xd2, + 0xd5, 0xb2, 0x2e, 0xd7, 0xcd, 0x11, 0xf2, 0xce, 0xb7, 0x34, 0x75, 0xef, 0xf6, 0x3f, 0xf1, 0x0e, + 0x2b, 0x17, 0x2b, 0x60, 0x6c, 0x05, 0x3c, 0x3a, 0x3b, 0xdf, 0xe9, 0x28, 0x6c, 0xbc, 0x71, 0x03, + 0xe2, 0xe9, 0x4b, 0x24, 0x2b, 0xe6, 0x7f, 0x74, 0xa5, 0xae, 0x1b, 0x2e, 0x48, 0xbb, 0x6a, 0x81, + 0x86, 0x50, 0x20, 0xde, 0xd4, 0x89, 0xb8, 0xdc, 0xa9, 0xff, 0x93, 0x17, 0x20, 0x9e, 0xf6, 0x11, + 0x6f, 0x8f, 0x56, 0x83, 0xad, 0x9d, 0x3f, 0x80, 0x4d, 0xae, 0xbf, 0xba, 0x4e, 0xcc, 0x69, 0x28, + 0x23, 0x9e, 0xc2, 0x1b, 0x53, 0xb0, 0xc7, 0x69, 0x28, 0x6a, 0x9d, 0x0d, 0x4e, 0xe8, 0x90, 0xbb, + 0xef, 0xe9, 0xd2, 0xd5, 0x2a, 0xce, 0x60, 0x59, 0xec, 0xdb, 0xfb, 0xab, 0x5e, 0x54, 0x68, 0x91, + 0x01, 0xa9, 0x77, 0xf4, 0x4c, 0x67, 0x53, 0xfc, 0x44, 0x37, 0x20, 0x33, 0x37, 0x94, 0xc7, 0x6a, + 0xf1, 0x3c, 0xf9, 0x55, 0xc2, 0xfc, 0x4f, 0x02, 0x8a, 0xd3, 0x41, 0x40, 0x57, 0xc4, 0x1e, 0x6c, + 0x0d, 0x99, 0x1f, 0x7a, 0x94, 0xd3, 0x91, 0xea, 0x81, 0xfa, 0xd3, 0xaa, 0x36, 0x7b, 0x7d, 0x26, + 0x94, 0x6d, 0x50, 0x7d, 0x59, 0x2d, 0xc8, 0xea, 0x6e, 0xa9, 0x2a, 0xe4, 0xc9, 0x77, 0x0a, 0x28, + 0xd6, 0xca, 0xe8, 0x31, 0x5c, 0x1b, 0xb2, 0x20, 0x9e, 0xf8, 0x74, 0xe4, 0xf8, 0x9e, 0x33, 0x09, + 0x5c, 0x1e, 0xeb, 0xd6, 0x51, 0x9a, 0x0a, 0x5a, 0x5e, 0x5f, 0xc0, 0xe8, 0x27, 0x70, 0xd7, 0x8d, + 0x9d, 0x95, 0x06, 0xcc, 0x27, 0x32, 0xb6, 0x27, 0x6c, 0x20, 0xbb, 0x5b, 0x0e, 0xdf, 0x76, 0xe3, + 0x65, 0x8f, 0xb6, 0x64, 0x1c, 0xb1, 0x81, 0xf9, 0xcf, 0x14, 0x94, 0xba, 0x11, 0x1d, 0xb9, 0x43, + 0x31, 0xaa, 0xa9, 0x09, 0xea, 0x1e, 0x80, 0xcf, 0x46, 0xd4, 0x5b, 0xe8, 0x9e, 0x87, 0x6b, 0x38, + 0x2f, 0x31, 0xd9, 0x3b, 0x1f, 0xc0, 0x86, 0xfe, 0xac, 0x2a, 0x4a, 0x52, 0x53, 0x0a, 0x1a, 0x95, + 0x24, 0x04, 0xa9, 0x49, 0xe4, 0x96, 0xf3, 0x5a, 0x26, 0x16, 0xc8, 0x86, 0xc2, 0x88, 0x70, 0xe2, + 0xbc, 0x61, 0x91, 0x4f, 0xb8, 0x3c, 0x54, 0x71, 0xef, 0xd9, 0xc5, 0x9d, 0x69, 0x79, 0x63, 0x95, + 0x06, 0xe1, 0xe4, 0x85, 0x54, 0xc5, 0x30, 0x9a, 0xfd, 0x16, 0xf3, 0x97, 0x2b, 0xe4, 0x4e, 0x48, + 0xf8, 0x5b, 0x55, 0xcd, 0x79, 0x0c, 0x12, 0xea, 0x0a, 0x44, 0x10, 0x98, 0x8c, 0xb1, 0x64, 0xe8, + 0xaf, 0x12, 0x28, 0x48, 0x30, 0xd0, 0x2e, 0x18, 0xa2, 0x4b, 0x2f, 0x0d, 0x5c, 0x6a, 0x86, 0x2a, + 0xfa, 0xe4, 0xf4, 0x67, 0x0b, 0x33, 0xd7, 0x7c, 0x14, 0x59, 0x5f, 0x1a, 0x45, 0x3e, 0x32, 0x71, + 0xe4, 0x3e, 0x3a, 0x71, 0xbc, 0x04, 0x98, 0x1f, 0x03, 0xdd, 0x81, 0x5b, 0x8d, 0x9a, 0x5d, 0x73, + 0x5e, 0x74, 0x70, 0xab, 0x66, 0xaf, 0x34, 0xd1, 0x1c, 0xa4, 0x6d, 0xeb, 0x95, 0xad, 0xc6, 0x0f, + 0xfb, 0x85, 0x83, 0xad, 0x7a, 0x07, 0x37, 0x8c, 0xa4, 0xe8, 0x7b, 0xb3, 0xa5, 0x73, 0xf0, 0xba, + 0xd9, 0x35, 0x52, 0xfb, 0x25, 0xd8, 0x54, 0x49, 0xd3, 0xee, 0xcd, 0xbf, 0x26, 0xc0, 0x98, 0x07, + 0x50, 0x97, 0xf5, 0x4a, 0x24, 0x12, 0xe7, 0x22, 0xf1, 0x08, 0x8c, 0x70, 0xa6, 0xa4, 0x23, 0x91, + 0x94, 0x91, 0x28, 0xcd, 0x71, 0x15, 0x8a, 0x7b, 0x50, 0xa0, 0x51, 0xc4, 0xa6, 0xf1, 0x4a, 0x49, + 0x16, 0x48, 0x48, 0x11, 0x3e, 0x03, 0x08, 0xd8, 0x88, 0x3a, 0x6f, 0xd9, 0x24, 0x52, 0x13, 0x44, + 0x02, 0xe7, 0x05, 0x72, 0x28, 0x00, 0xf3, 0x2f, 0x59, 0x48, 0x1d, 0xb1, 0x01, 0xda, 0x02, 0x31, + 0xb6, 0xcd, 0x5b, 0x6f, 0xe6, 0x84, 0x0d, 0x9a, 0x23, 0xd4, 0x81, 0xe2, 0xac, 0x4d, 0xc8, 0x5c, + 0xca, 0x7d, 0x5c, 0x36, 0xef, 0x2c, 0xcd, 0xf2, 0x87, 0x6b, 0x78, 0xd6, 0x66, 0x54, 0x59, 0xf7, + 0x97, 0x8e, 0xa6, 0x4c, 0xaa, 0xfe, 0xba, 0xfb, 0xa9, 0x15, 0x78, 0xb8, 0xb6, 0x18, 0x06, 0x65, + 0xf6, 0x1b, 0x28, 0x0c, 0x23, 0x4a, 0xb8, 0x78, 0x70, 0xf8, 0x6a, 0x9e, 0x28, 0xec, 0x6d, 0x4f, + 0x2d, 0x4e, 0x1f, 0x2e, 0x15, 0x7b, 0xfa, 0x70, 0xc1, 0xa0, 0xe8, 0x02, 0x40, 0x5f, 0x03, 0xc4, + 0x9c, 0x44, 0x5c, 0xe9, 0x66, 0xae, 0xd4, 0xcd, 0x4b, 0xb6, 0x54, 0xfd, 0x21, 0xe4, 0x68, 0x30, + 0x52, 0x8a, 0xd9, 0x2b, 0x15, 0xd7, 0x69, 0x30, 0x92, 0x6a, 0x5f, 0x41, 0x26, 0xe6, 0x84, 0x4f, + 0xc7, 0x02, 0xf3, 0xc2, 0xa3, 0x1f, 0xb1, 0x41, 0xa5, 0x27, 0x98, 0x58, 0x29, 0x88, 0xbe, 0xad, + 0xf2, 0xed, 0xd3, 0x38, 0x26, 0xe3, 0xd9, 0xab, 0x40, 0x82, 0x2d, 0x85, 0x21, 0x0c, 0xa5, 0x59, + 0xd6, 0x54, 0x59, 0xc9, 0x0e, 0x50, 0xd8, 0xfb, 0xfc, 0xca, 0xb4, 0xa9, 0x12, 0x3d, 0x4c, 0xe0, + 0x59, 0xde, 0x75, 0xd1, 0xbe, 0x82, 0x6b, 0x0b, 0x89, 0xd3, 0x56, 0x41, 0x5a, 0x7d, 0xf4, 0x09, + 0x99, 0x9b, 0xd9, 0x5d, 0x48, 0xbf, 0xc2, 0xcc, 0xdf, 0x24, 0x20, 0x23, 0xcf, 0x28, 0x26, 0x8c, + 0x9e, 0x5d, 0xb3, 0x3f, 0x32, 0xc7, 0xfc, 0xb4, 0x6f, 0xf5, 0xad, 0xc6, 0xec, 0x0d, 0xd0, 0xad, + 0xe1, 0x66, 0xfb, 0xc0, 0x48, 0x8a, 0xb1, 0x06, 0xf7, 0xdb, 0x6d, 0xb1, 0x90, 0x0f, 0x82, 0x5e, + 0xbf, 0x5e, 0xb7, 0xac, 0x86, 0xd5, 0x30, 0xd2, 0x42, 0xed, 0x45, 0xad, 0x79, 0x6c, 0x35, 0x8c, + 0x8c, 0x78, 0x4a, 0xd4, 0x6b, 0xed, 0xba, 0x75, 0x7c, 0x2c, 0xa8, 0x59, 0x41, 0xd5, 0x6b, 0xab, + 0x61, 0xac, 0xef, 0xaf, 0x43, 0x46, 0x96, 0xe2, 0x7e, 0x0e, 0xb2, 0xea, 0x68, 0xe6, 0x6b, 0x30, + 0xea, 0xb2, 0x44, 0x8e, 0xd8, 0x00, 0xd3, 0x5f, 0x4e, 0x68, 0x2c, 0xfb, 0x4e, 0x48, 0x22, 0xaa, + 0x3f, 0x40, 0x79, 0xac, 0x57, 0xa8, 0x02, 0x29, 0xd1, 0xe7, 0xd5, 0xd5, 0xb8, 0x7b, 0x59, 0x32, + 0xb1, 0x20, 0x9a, 0x1f, 0xa0, 0x74, 0xec, 0xc6, 0xfc, 0x88, 0x0d, 0xe2, 0xab, 0x4c, 0xdf, 0x84, + 0xec, 0x1b, 0xd7, 0xe3, 0x34, 0xd2, 0x1f, 0x4c, 0xbd, 0x12, 0xd7, 0x3a, 0x14, 0xaf, 0x47, 0xce, + 0xde, 0xd1, 0x40, 0x3f, 0x61, 0xf3, 0x02, 0xb1, 0x05, 0x20, 0x26, 0x5e, 0x29, 0x8e, 0xdd, 0x6f, + 0x55, 0x45, 0x67, 0x70, 0x4e, 0x00, 0x3d, 0xf7, 0x5b, 0x6a, 0x7a, 0x60, 0xcc, 0xdd, 0xc7, 0x21, + 0x0b, 0x62, 0x8a, 0xbe, 0x80, 0xf4, 0x09, 0x1b, 0xc4, 0xe5, 0x84, 0xfc, 0x68, 0x5e, 0x7e, 0x06, + 0xc9, 0x44, 0x0f, 0xa1, 0x14, 0xd0, 0x53, 0xd1, 0xc3, 0x66, 0xdb, 0x50, 0x5b, 0xdc, 0x14, 0x70, + 0x77, 0xba, 0x15, 0xf3, 0x01, 0x6c, 0x1e, 0x50, 0xbe, 0x10, 0x45, 0x04, 0xe9, 0x85, 0x17, 0x81, + 0xfc, 0x6d, 0x3e, 0x04, 0xa3, 0x4e, 0x82, 0x21, 0xf5, 0x2e, 0xe7, 0xed, 0xfd, 0x2d, 0x0d, 0x70, + 0xc4, 0x06, 0x3d, 0xf5, 0x57, 0x08, 0xfa, 0x7d, 0x02, 0xf2, 0xb3, 0x2c, 0xa1, 0x8b, 0xeb, 0x70, + 0x35, 0x93, 0xdb, 0x97, 0x1e, 0xd0, 0xac, 0xfc, 0xf6, 0x1f, 0xff, 0xfa, 0x53, 0x72, 0xd7, 0xbc, + 0x3f, 0xfb, 0xff, 0xe5, 0xd7, 0x2a, 0x1d, 0x3f, 0x0a, 0x23, 0x26, 0x06, 0x9f, 0xb8, 0xfa, 0xf8, + 0x43, 0x55, 0x44, 0xe1, 0xb9, 0xc8, 0x27, 0xfa, 0x43, 0x02, 0x72, 0xd3, 0x88, 0xa2, 0x8b, 0xfb, + 0xd8, 0x4a, 0xce, 0xb7, 0x1f, 0x7d, 0x02, 0x53, 0xa5, 0xc7, 0x7c, 0x24, 0x77, 0xf4, 0x00, 0x5d, + 0xbd, 0x23, 0x74, 0x06, 0x59, 0x15, 0x6f, 0x74, 0x71, 0x93, 0x5e, 0x4a, 0xc8, 0x15, 0xc1, 0xf8, + 0x88, 0x6b, 0x91, 0x8a, 0x05, 0xc7, 0xd2, 0x6f, 0xf5, 0xf1, 0x07, 0xf4, 0x3b, 0x91, 0x8e, 0x69, + 0x1a, 0x2f, 0x4b, 0xc7, 0x4a, 0xaa, 0xb7, 0x6f, 0x9e, 0x6b, 0x9a, 0x96, 0x1f, 0xf2, 0x33, 0xf3, + 0x99, 0xf4, 0xfd, 0xc4, 0xdc, 0xbd, 0xd2, 0xf7, 0xf3, 0xa1, 0xb4, 0xf9, 0x3c, 0xf1, 0x78, 0x9f, + 0xc1, 0xbd, 0x21, 0xf3, 0xcf, 0x39, 0x27, 0xa1, 0x3b, 0xdd, 0xc0, 0x7e, 0x69, 0x5e, 0x43, 0x5d, + 0xe1, 0xb1, 0x9b, 0x78, 0xfd, 0xb5, 0xe6, 0x8f, 0x99, 0x47, 0x82, 0x71, 0x85, 0x45, 0xe3, 0xea, + 0x98, 0x06, 0x72, 0x3f, 0x55, 0x25, 0x22, 0xa1, 0x1b, 0x9f, 0xfb, 0x67, 0xee, 0x1b, 0xdf, 0x1b, + 0x64, 0x25, 0xeb, 0xd9, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x10, 0x62, 0xa8, 0xbe, 0x13, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/model_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/model_service.pb.go new file mode 100644 index 0000000..4b44357 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/model_service.pb.go @@ -0,0 +1,1051 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1beta1/model_service.proto +// DO NOT EDIT! + +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Represents a machine learning solution. +// +// A model can have multiple versions, each of which is a deployed, trained +// model ready to receive prediction requests. The model itself is just a +// container. +type Model struct { + // Required. The name specified for the model when it was created. + // + // The model name must be unique within the project it is created in. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The description specified for the model when it was created. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Output only. The default version of the model. This version will be used to + // handle prediction requests that do not specify a version. + // + // You can change the default version by calling + // [projects.methods.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault). + DefaultVersion *Version `protobuf:"bytes,3,opt,name=default_version,json=defaultVersion" json:"default_version,omitempty"` + // Optional. The list of regions where the model is going to be deployed. + // Currently only one region per model is supported. + // Defaults to 'us-central1' if nothing is set. + Regions []string `protobuf:"bytes,4,rep,name=regions" json:"regions,omitempty"` + // Optional. If true, enables StackDriver Logging for online prediction. + // Default is false. + OnlinePredictionLogging bool `protobuf:"varint,5,opt,name=online_prediction_logging,json=onlinePredictionLogging" json:"online_prediction_logging,omitempty"` +} + +func (m *Model) Reset() { *m = Model{} } +func (m *Model) String() string { return proto.CompactTextString(m) } +func (*Model) ProtoMessage() {} +func (*Model) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Model) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Model) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Model) GetDefaultVersion() *Version { + if m != nil { + return m.DefaultVersion + } + return nil +} + +func (m *Model) GetRegions() []string { + if m != nil { + return m.Regions + } + return nil +} + +func (m *Model) GetOnlinePredictionLogging() bool { + if m != nil { + return m.OnlinePredictionLogging + } + return false +} + +// Represents a version of the model. +// +// Each version is a trained model deployed in the cloud, ready to handle +// prediction requests. A model can have multiple versions. You can get +// information about all of the versions of a given model by calling +// [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list). +type Version struct { + // Required.The name specified for the version when it was created. + // + // The version name must be unique within the model it is created in. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The description specified for the version when it was created. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Output only. If true, this version will be used to handle prediction + // requests that do not specify a version. + // + // You can change the default version by calling + // [projects.methods.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault). + IsDefault bool `protobuf:"varint,3,opt,name=is_default,json=isDefault" json:"is_default,omitempty"` + // Required. The Google Cloud Storage location of the trained model used to + // create the version. See the + // [overview of model deployment](/ml/docs/concepts/deployment-overview) for + // more informaiton. + // + // When passing Version to + // [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create) + // the model service uses the specified location as the source of the model. + // Once deployed, the model version is hosted by the prediction service, so + // this location is useful only as a historical record. + DeploymentUri string `protobuf:"bytes,4,opt,name=deployment_uri,json=deploymentUri" json:"deployment_uri,omitempty"` + // Output only. The time the version was created. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. The time the version was last used for prediction. + LastUseTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=last_use_time,json=lastUseTime" json:"last_use_time,omitempty"` + // Optional. The Google Cloud ML runtime version to use for this deployment. + // If not set, Google Cloud ML will choose a version. + RuntimeVersion string `protobuf:"bytes,8,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` + // Optional. Manually select the number of nodes to use for serving the + // model. If unset (i.e., by default), the number of nodes used to serve + // the model automatically scales with traffic. However, care should be + // taken to ramp up traffic according to the model's ability to scale. If + // your model needs to handle bursts of traffic beyond it's ability to + // scale, it is recommended you set this field appropriately. + ManualScaling *ManualScaling `protobuf:"bytes,9,opt,name=manual_scaling,json=manualScaling" json:"manual_scaling,omitempty"` +} + +func (m *Version) Reset() { *m = Version{} } +func (m *Version) String() string { return proto.CompactTextString(m) } +func (*Version) ProtoMessage() {} +func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *Version) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Version) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Version) GetIsDefault() bool { + if m != nil { + return m.IsDefault + } + return false +} + +func (m *Version) GetDeploymentUri() string { + if m != nil { + return m.DeploymentUri + } + return "" +} + +func (m *Version) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Version) GetLastUseTime() *google_protobuf2.Timestamp { + if m != nil { + return m.LastUseTime + } + return nil +} + +func (m *Version) GetRuntimeVersion() string { + if m != nil { + return m.RuntimeVersion + } + return "" +} + +func (m *Version) GetManualScaling() *ManualScaling { + if m != nil { + return m.ManualScaling + } + return nil +} + +// Options for manually scaling a model. +type ManualScaling struct { + // The number of nodes to allocate for this model. These nodes are always up, + // starting from the time the model is deployed, so the cost of operating + // this model will be proportional to nodes * number of hours since + // deployment. + Nodes int32 `protobuf:"varint,1,opt,name=nodes" json:"nodes,omitempty"` +} + +func (m *ManualScaling) Reset() { *m = ManualScaling{} } +func (m *ManualScaling) String() string { return proto.CompactTextString(m) } +func (*ManualScaling) ProtoMessage() {} +func (*ManualScaling) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ManualScaling) GetNodes() int32 { + if m != nil { + return m.Nodes + } + return 0 +} + +// Request message for the CreateModel method. +type CreateModelRequest struct { + // Required. The project name. + // + // Authorization: requires `Editor` role on the specified project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The model to create. + Model *Model `protobuf:"bytes,2,opt,name=model" json:"model,omitempty"` +} + +func (m *CreateModelRequest) Reset() { *m = CreateModelRequest{} } +func (m *CreateModelRequest) String() string { return proto.CompactTextString(m) } +func (*CreateModelRequest) ProtoMessage() {} +func (*CreateModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *CreateModelRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateModelRequest) GetModel() *Model { + if m != nil { + return m.Model + } + return nil +} + +// Request message for the ListModels method. +type ListModelsRequest struct { + // Required. The name of the project whose models are to be listed. + // + // Authorization: requires `Viewer` role on the specified project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. A page token to request the next page of results. + // + // You get the token from the `next_page_token` field of the response from + // the previous call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. The number of models to retrieve per "page" of results. If there + // are more remaining results than this number, the response message will + // contain a valid value in the `next_page_token` field. + // + // The default value is 20, and the maximum page size is 100. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListModelsRequest) Reset() { *m = ListModelsRequest{} } +func (m *ListModelsRequest) String() string { return proto.CompactTextString(m) } +func (*ListModelsRequest) ProtoMessage() {} +func (*ListModelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *ListModelsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListModelsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListModelsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for the ListModels method. +type ListModelsResponse struct { + // The list of models. + Models []*Model `protobuf:"bytes,1,rep,name=models" json:"models,omitempty"` + // Optional. Pass this token as the `page_token` field of the request for a + // subsequent call. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListModelsResponse) Reset() { *m = ListModelsResponse{} } +func (m *ListModelsResponse) String() string { return proto.CompactTextString(m) } +func (*ListModelsResponse) ProtoMessage() {} +func (*ListModelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *ListModelsResponse) GetModels() []*Model { + if m != nil { + return m.Models + } + return nil +} + +func (m *ListModelsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for the GetModel method. +type GetModelRequest struct { + // Required. The name of the model. + // + // Authorization: requires `Viewer` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetModelRequest) Reset() { *m = GetModelRequest{} } +func (m *GetModelRequest) String() string { return proto.CompactTextString(m) } +func (*GetModelRequest) ProtoMessage() {} +func (*GetModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *GetModelRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for the DeleteModel method. +type DeleteModelRequest struct { + // Required. The name of the model. + // + // Authorization: requires `Editor` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteModelRequest) Reset() { *m = DeleteModelRequest{} } +func (m *DeleteModelRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteModelRequest) ProtoMessage() {} +func (*DeleteModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *DeleteModelRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Uploads the provided trained model version to Cloud Machine Learning. +type CreateVersionRequest struct { + // Required. The name of the model. + // + // Authorization: requires `Editor` role on the parent project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The version details. + Version *Version `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` +} + +func (m *CreateVersionRequest) Reset() { *m = CreateVersionRequest{} } +func (m *CreateVersionRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVersionRequest) ProtoMessage() {} +func (*CreateVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *CreateVersionRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateVersionRequest) GetVersion() *Version { + if m != nil { + return m.Version + } + return nil +} + +// Request message for the ListVersions method. +type ListVersionsRequest struct { + // Required. The name of the model for which to list the version. + // + // Authorization: requires `Viewer` role on the parent project. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. A page token to request the next page of results. + // + // You get the token from the `next_page_token` field of the response from + // the previous call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. The number of versions to retrieve per "page" of results. If + // there are more remaining results than this number, the response message + // will contain a valid value in the `next_page_token` field. + // + // The default value is 20, and the maximum page size is 100. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListVersionsRequest) Reset() { *m = ListVersionsRequest{} } +func (m *ListVersionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListVersionsRequest) ProtoMessage() {} +func (*ListVersionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *ListVersionsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListVersionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListVersionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for the ListVersions method. +type ListVersionsResponse struct { + // The list of versions. + Versions []*Version `protobuf:"bytes,1,rep,name=versions" json:"versions,omitempty"` + // Optional. Pass this token as the `page_token` field of the request for a + // subsequent call. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListVersionsResponse) Reset() { *m = ListVersionsResponse{} } +func (m *ListVersionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListVersionsResponse) ProtoMessage() {} +func (*ListVersionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *ListVersionsResponse) GetVersions() []*Version { + if m != nil { + return m.Versions + } + return nil +} + +func (m *ListVersionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for the GetVersion method. +type GetVersionRequest struct { + // Required. The name of the version. + // + // Authorization: requires `Viewer` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetVersionRequest) Reset() { *m = GetVersionRequest{} } +func (m *GetVersionRequest) String() string { return proto.CompactTextString(m) } +func (*GetVersionRequest) ProtoMessage() {} +func (*GetVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *GetVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for the DeleteVerionRequest method. +type DeleteVersionRequest struct { + // Required. The name of the version. You can get the names of all the + // versions of a model by calling + // [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list). + // + // Authorization: requires `Editor` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteVersionRequest) Reset() { *m = DeleteVersionRequest{} } +func (m *DeleteVersionRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVersionRequest) ProtoMessage() {} +func (*DeleteVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *DeleteVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for the SetDefaultVersion request. +type SetDefaultVersionRequest struct { + // Required. The name of the version to make the default for the model. You + // can get the names of all the versions of a model by calling + // [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list). + // + // Authorization: requires `Editor` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *SetDefaultVersionRequest) Reset() { *m = SetDefaultVersionRequest{} } +func (m *SetDefaultVersionRequest) String() string { return proto.CompactTextString(m) } +func (*SetDefaultVersionRequest) ProtoMessage() {} +func (*SetDefaultVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *SetDefaultVersionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*Model)(nil), "google.cloud.ml.v1beta1.Model") + proto.RegisterType((*Version)(nil), "google.cloud.ml.v1beta1.Version") + proto.RegisterType((*ManualScaling)(nil), "google.cloud.ml.v1beta1.ManualScaling") + proto.RegisterType((*CreateModelRequest)(nil), "google.cloud.ml.v1beta1.CreateModelRequest") + proto.RegisterType((*ListModelsRequest)(nil), "google.cloud.ml.v1beta1.ListModelsRequest") + proto.RegisterType((*ListModelsResponse)(nil), "google.cloud.ml.v1beta1.ListModelsResponse") + proto.RegisterType((*GetModelRequest)(nil), "google.cloud.ml.v1beta1.GetModelRequest") + proto.RegisterType((*DeleteModelRequest)(nil), "google.cloud.ml.v1beta1.DeleteModelRequest") + proto.RegisterType((*CreateVersionRequest)(nil), "google.cloud.ml.v1beta1.CreateVersionRequest") + proto.RegisterType((*ListVersionsRequest)(nil), "google.cloud.ml.v1beta1.ListVersionsRequest") + proto.RegisterType((*ListVersionsResponse)(nil), "google.cloud.ml.v1beta1.ListVersionsResponse") + proto.RegisterType((*GetVersionRequest)(nil), "google.cloud.ml.v1beta1.GetVersionRequest") + proto.RegisterType((*DeleteVersionRequest)(nil), "google.cloud.ml.v1beta1.DeleteVersionRequest") + proto.RegisterType((*SetDefaultVersionRequest)(nil), "google.cloud.ml.v1beta1.SetDefaultVersionRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ModelService service + +type ModelServiceClient interface { + // Creates a model which will later contain one or more versions. + // + // You must add at least one version before you can request predictions from + // the model. Add versions by calling + // [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create). + CreateModel(ctx context.Context, in *CreateModelRequest, opts ...grpc.CallOption) (*Model, error) + // Lists the models in a project. + // + // Each project can contain multiple models, and each model can have multiple + // versions. + ListModels(ctx context.Context, in *ListModelsRequest, opts ...grpc.CallOption) (*ListModelsResponse, error) + // Gets information about a model, including its name, the description (if + // set), and the default version (if at least one version of the model has + // been deployed). + GetModel(ctx context.Context, in *GetModelRequest, opts ...grpc.CallOption) (*Model, error) + // Deletes a model. + // + // You can only delete a model if there are no versions in it. You can delete + // versions by calling + // [projects.models.versions.delete](/ml/reference/rest/v1beta1/projects.models.versions/delete). + DeleteModel(ctx context.Context, in *DeleteModelRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Creates a new version of a model from a trained TensorFlow model. + // + // If the version created in the cloud by this call is the first deployed + // version of the specified model, it will be made the default version of the + // model. When you add a version to a model that already has one or more + // versions, the default version does not automatically change. If you want a + // new version to be the default, you must call + // [projects.models.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault). + CreateVersion(ctx context.Context, in *CreateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Gets basic information about all the versions of a model. + // + // If you expect that a model has a lot of versions, or if you need to handle + // only a limited number of results at a time, you can request that the list + // be retrieved in batches (called pages): + ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*ListVersionsResponse, error) + // Gets information about a model version. + // + // Models can have multiple versions. You can call + // [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list) + // to get the same information that this method returns for all of the + // versions of a model. + GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*Version, error) + // Deletes a model version. + // + // Each model can have multiple versions deployed and in use at any given + // time. Use this method to remove a single version. + // + // Note: You cannot delete the version that is set as the default version + // of the model unless it is the only remaining version. + DeleteVersion(ctx context.Context, in *DeleteVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Designates a version to be the default for the model. + // + // The default version is used for prediction requests made against the model + // that don't specify a version. + // + // The first version to be created for a model is automatically set as the + // default. You must make any subsequent changes to the default version + // setting manually using this method. + SetDefaultVersion(ctx context.Context, in *SetDefaultVersionRequest, opts ...grpc.CallOption) (*Version, error) +} + +type modelServiceClient struct { + cc *grpc.ClientConn +} + +func NewModelServiceClient(cc *grpc.ClientConn) ModelServiceClient { + return &modelServiceClient{cc} +} + +func (c *modelServiceClient) CreateModel(ctx context.Context, in *CreateModelRequest, opts ...grpc.CallOption) (*Model, error) { + out := new(Model) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/CreateModel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) ListModels(ctx context.Context, in *ListModelsRequest, opts ...grpc.CallOption) (*ListModelsResponse, error) { + out := new(ListModelsResponse) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/ListModels", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) GetModel(ctx context.Context, in *GetModelRequest, opts ...grpc.CallOption) (*Model, error) { + out := new(Model) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/GetModel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) DeleteModel(ctx context.Context, in *DeleteModelRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/DeleteModel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) CreateVersion(ctx context.Context, in *CreateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/CreateVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*ListVersionsResponse, error) { + out := new(ListVersionsResponse) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/ListVersions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*Version, error) { + out := new(Version) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/GetVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) DeleteVersion(ctx context.Context, in *DeleteVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/DeleteVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *modelServiceClient) SetDefaultVersion(ctx context.Context, in *SetDefaultVersionRequest, opts ...grpc.CallOption) (*Version, error) { + out := new(Version) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/SetDefaultVersion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ModelService service + +type ModelServiceServer interface { + // Creates a model which will later contain one or more versions. + // + // You must add at least one version before you can request predictions from + // the model. Add versions by calling + // [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create). + CreateModel(context.Context, *CreateModelRequest) (*Model, error) + // Lists the models in a project. + // + // Each project can contain multiple models, and each model can have multiple + // versions. + ListModels(context.Context, *ListModelsRequest) (*ListModelsResponse, error) + // Gets information about a model, including its name, the description (if + // set), and the default version (if at least one version of the model has + // been deployed). + GetModel(context.Context, *GetModelRequest) (*Model, error) + // Deletes a model. + // + // You can only delete a model if there are no versions in it. You can delete + // versions by calling + // [projects.models.versions.delete](/ml/reference/rest/v1beta1/projects.models.versions/delete). + DeleteModel(context.Context, *DeleteModelRequest) (*google_longrunning.Operation, error) + // Creates a new version of a model from a trained TensorFlow model. + // + // If the version created in the cloud by this call is the first deployed + // version of the specified model, it will be made the default version of the + // model. When you add a version to a model that already has one or more + // versions, the default version does not automatically change. If you want a + // new version to be the default, you must call + // [projects.models.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault). + CreateVersion(context.Context, *CreateVersionRequest) (*google_longrunning.Operation, error) + // Gets basic information about all the versions of a model. + // + // If you expect that a model has a lot of versions, or if you need to handle + // only a limited number of results at a time, you can request that the list + // be retrieved in batches (called pages): + ListVersions(context.Context, *ListVersionsRequest) (*ListVersionsResponse, error) + // Gets information about a model version. + // + // Models can have multiple versions. You can call + // [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list) + // to get the same information that this method returns for all of the + // versions of a model. + GetVersion(context.Context, *GetVersionRequest) (*Version, error) + // Deletes a model version. + // + // Each model can have multiple versions deployed and in use at any given + // time. Use this method to remove a single version. + // + // Note: You cannot delete the version that is set as the default version + // of the model unless it is the only remaining version. + DeleteVersion(context.Context, *DeleteVersionRequest) (*google_longrunning.Operation, error) + // Designates a version to be the default for the model. + // + // The default version is used for prediction requests made against the model + // that don't specify a version. + // + // The first version to be created for a model is automatically set as the + // default. You must make any subsequent changes to the default version + // setting manually using this method. + SetDefaultVersion(context.Context, *SetDefaultVersionRequest) (*Version, error) +} + +func RegisterModelServiceServer(s *grpc.Server, srv ModelServiceServer) { + s.RegisterService(&_ModelService_serviceDesc, srv) +} + +func _ModelService_CreateModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateModelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).CreateModel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/CreateModel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).CreateModel(ctx, req.(*CreateModelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_ListModels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListModelsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).ListModels(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/ListModels", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).ListModels(ctx, req.(*ListModelsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_GetModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetModelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).GetModel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/GetModel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).GetModel(ctx, req.(*GetModelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_DeleteModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteModelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).DeleteModel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/DeleteModel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).DeleteModel(ctx, req.(*DeleteModelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_CreateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).CreateVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/CreateVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).CreateVersion(ctx, req.(*CreateVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_ListVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVersionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).ListVersions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/ListVersions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).ListVersions(ctx, req.(*ListVersionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_GetVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).GetVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/GetVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).GetVersion(ctx, req.(*GetVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_DeleteVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).DeleteVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/DeleteVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).DeleteVersion(ctx, req.(*DeleteVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ModelService_SetDefaultVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetDefaultVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ModelServiceServer).SetDefaultVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ModelService/SetDefaultVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ModelServiceServer).SetDefaultVersion(ctx, req.(*SetDefaultVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ModelService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.ml.v1beta1.ModelService", + HandlerType: (*ModelServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateModel", + Handler: _ModelService_CreateModel_Handler, + }, + { + MethodName: "ListModels", + Handler: _ModelService_ListModels_Handler, + }, + { + MethodName: "GetModel", + Handler: _ModelService_GetModel_Handler, + }, + { + MethodName: "DeleteModel", + Handler: _ModelService_DeleteModel_Handler, + }, + { + MethodName: "CreateVersion", + Handler: _ModelService_CreateVersion_Handler, + }, + { + MethodName: "ListVersions", + Handler: _ModelService_ListVersions_Handler, + }, + { + MethodName: "GetVersion", + Handler: _ModelService_GetVersion_Handler, + }, + { + MethodName: "DeleteVersion", + Handler: _ModelService_DeleteVersion_Handler, + }, + { + MethodName: "SetDefaultVersion", + Handler: _ModelService_SetDefaultVersion_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/ml/v1beta1/model_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/ml/v1beta1/model_service.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1013 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcf, 0x6f, 0x1b, 0x45, + 0x14, 0xd6, 0x26, 0x71, 0x62, 0x3f, 0xd7, 0x89, 0x32, 0x04, 0x6a, 0x0c, 0xa1, 0xd6, 0x56, 0x69, + 0x2d, 0xa7, 0xdd, 0x25, 0x06, 0x55, 0x8a, 0x0b, 0x45, 0x2a, 0x91, 0x2a, 0xa4, 0x46, 0x44, 0x9b, + 0x96, 0x03, 0x97, 0xd5, 0xc6, 0x9e, 0x2e, 0x53, 0x76, 0x67, 0xb6, 0x3b, 0xb3, 0x11, 0x14, 0x7a, + 0x80, 0x03, 0x47, 0x0e, 0x20, 0xae, 0x5c, 0xb8, 0xf3, 0xcf, 0x70, 0xe7, 0x84, 0xf8, 0x23, 0x38, + 0xa1, 0xf9, 0xb1, 0xce, 0x3a, 0xfe, 0xb1, 0x1b, 0x24, 0x6e, 0x9e, 0x37, 0xdf, 0x9b, 0xf7, 0xcd, + 0xfb, 0xde, 0x7b, 0x3b, 0x86, 0xfd, 0x90, 0xb1, 0x30, 0xc2, 0xee, 0x28, 0x62, 0xd9, 0xd8, 0x8d, + 0x23, 0xf7, 0xfc, 0xe0, 0x0c, 0x8b, 0xe0, 0xc0, 0x8d, 0xd9, 0x18, 0x47, 0x3e, 0xc7, 0xe9, 0x39, + 0x19, 0x61, 0x27, 0x49, 0x99, 0x60, 0xe8, 0xba, 0x06, 0x3b, 0x0a, 0xec, 0xc4, 0x91, 0x63, 0xc0, + 0x9d, 0xb7, 0xcd, 0x29, 0x41, 0x42, 0xdc, 0x80, 0x52, 0x26, 0x02, 0x41, 0x18, 0xe5, 0xda, 0xad, + 0xf3, 0x7a, 0x71, 0x37, 0x13, 0x5f, 0x18, 0xf3, 0x4d, 0x63, 0x8e, 0x18, 0x0d, 0xd3, 0x8c, 0x52, + 0x42, 0x43, 0x97, 0x25, 0x38, 0x9d, 0xf2, 0xbd, 0x61, 0x40, 0x6a, 0x75, 0x96, 0x3d, 0x73, 0x05, + 0x89, 0x31, 0x17, 0x41, 0x9c, 0x68, 0x80, 0xfd, 0xa7, 0x05, 0xb5, 0x63, 0xc9, 0x15, 0x21, 0x58, + 0xa3, 0x41, 0x8c, 0xdb, 0x56, 0xd7, 0xea, 0x35, 0x3c, 0xf5, 0x1b, 0x75, 0xa1, 0x39, 0xc6, 0x7c, + 0x94, 0x92, 0x44, 0x1e, 0xda, 0x5e, 0x51, 0x5b, 0x45, 0x13, 0xfa, 0x04, 0xb6, 0xc6, 0xf8, 0x59, + 0x90, 0x45, 0xc2, 0x3f, 0xc7, 0x29, 0x97, 0xa8, 0xd5, 0xae, 0xd5, 0x6b, 0x0e, 0xba, 0xce, 0x82, + 0xdb, 0x3a, 0x9f, 0x69, 0x9c, 0xb7, 0x69, 0x1c, 0xcd, 0x1a, 0xb5, 0x61, 0x23, 0xc5, 0xa1, 0x24, + 0xdf, 0x5e, 0xeb, 0xae, 0xf6, 0x1a, 0x5e, 0xbe, 0x44, 0x43, 0x78, 0x93, 0xd1, 0x88, 0x50, 0xec, + 0x27, 0x29, 0x1e, 0x93, 0x91, 0x8c, 0xec, 0x47, 0x2c, 0x0c, 0x09, 0x0d, 0xdb, 0xb5, 0xae, 0xd5, + 0xab, 0x7b, 0xd7, 0x35, 0xe0, 0x64, 0xb2, 0xff, 0x58, 0x6f, 0xdb, 0xff, 0xac, 0xc0, 0x46, 0x1e, + 0xe1, 0xbf, 0x5d, 0x71, 0x17, 0x80, 0x70, 0xdf, 0x90, 0x55, 0xb7, 0xab, 0x7b, 0x0d, 0xc2, 0x8f, + 0xb4, 0x01, 0xed, 0xc1, 0xe6, 0x18, 0x27, 0x11, 0xfb, 0x3a, 0xc6, 0x54, 0xf8, 0x59, 0x4a, 0xda, + 0x6b, 0xea, 0x8c, 0xd6, 0x85, 0xf5, 0x69, 0x4a, 0xd0, 0x7d, 0x68, 0x8e, 0x52, 0x1c, 0x08, 0xec, + 0x4b, 0x09, 0x14, 0xeb, 0xe6, 0xa0, 0x93, 0x27, 0x29, 0xd7, 0xc7, 0x79, 0x92, 0xeb, 0xe3, 0x81, + 0x86, 0x4b, 0x03, 0x7a, 0x00, 0xad, 0x28, 0xe0, 0xc2, 0xcf, 0xb8, 0x71, 0x5f, 0x2f, 0x75, 0x6f, + 0x4a, 0x87, 0xa7, 0x5c, 0xfb, 0xdf, 0x86, 0xad, 0x34, 0xa3, 0xd2, 0x73, 0xa2, 0x52, 0x5d, 0x91, + 0xdc, 0x34, 0xe6, 0x3c, 0x43, 0xc7, 0xb0, 0x19, 0x07, 0x34, 0x0b, 0x22, 0x9f, 0x8f, 0x82, 0x48, + 0xa6, 0xb7, 0xa1, 0x22, 0xdd, 0x5a, 0xa8, 0xe6, 0xb1, 0x82, 0x9f, 0x6a, 0xb4, 0xd7, 0x8a, 0x8b, + 0x4b, 0x7b, 0x0f, 0x5a, 0x53, 0xfb, 0x68, 0x07, 0x6a, 0x94, 0x8d, 0x31, 0x57, 0x12, 0xd4, 0x3c, + 0xbd, 0xb0, 0xcf, 0x00, 0x7d, 0xac, 0x2e, 0xab, 0x2a, 0xd1, 0xc3, 0x2f, 0x32, 0xcc, 0x05, 0x7a, + 0x03, 0xd6, 0x93, 0x20, 0xc5, 0x54, 0x18, 0xbd, 0xcc, 0x0a, 0xbd, 0x0f, 0x35, 0xd5, 0x5d, 0x4a, + 0xab, 0xe6, 0xe0, 0x9d, 0xc5, 0xd4, 0xd4, 0x69, 0x1a, 0x6c, 0x87, 0xb0, 0xfd, 0x98, 0x70, 0xa1, + 0x6c, 0xbc, 0x2c, 0xc4, 0x2e, 0x40, 0x12, 0x84, 0xd8, 0x17, 0xec, 0x4b, 0x4c, 0x8d, 0x9e, 0x0d, + 0x69, 0x79, 0x22, 0x0d, 0xe8, 0x2d, 0x50, 0x0b, 0x9f, 0x93, 0x97, 0x5a, 0xc9, 0x9a, 0x57, 0x97, + 0x86, 0x53, 0xf2, 0x12, 0xdb, 0x02, 0x50, 0x31, 0x10, 0x4f, 0x18, 0xe5, 0x18, 0xdd, 0x83, 0x75, + 0xc5, 0x43, 0xde, 0x7c, 0xb5, 0x02, 0x6b, 0x83, 0x46, 0xb7, 0x60, 0x8b, 0xe2, 0xaf, 0x84, 0x5f, + 0xa0, 0xa3, 0x4b, 0xb4, 0x25, 0xcd, 0x27, 0x39, 0x25, 0x7b, 0x0f, 0xb6, 0x1e, 0x61, 0x31, 0x95, + 0xbf, 0x39, 0xd5, 0x6e, 0xf7, 0x00, 0x1d, 0xe1, 0x08, 0x5f, 0xca, 0xf4, 0x3c, 0xe4, 0x73, 0xd8, + 0xd1, 0x9a, 0xe4, 0xed, 0x5a, 0x92, 0xb2, 0x21, 0x6c, 0xe4, 0xa5, 0xb5, 0x52, 0x71, 0x00, 0xe4, + 0x0e, 0x36, 0x81, 0xd7, 0x64, 0xca, 0x8c, 0xfd, 0x7f, 0x55, 0xe7, 0x5b, 0xd8, 0x99, 0x0e, 0x65, + 0xf4, 0xf9, 0x00, 0xea, 0x86, 0x4d, 0xae, 0x50, 0x39, 0xff, 0x89, 0x47, 0x65, 0x95, 0x6e, 0xc3, + 0xf6, 0x23, 0x2c, 0x2e, 0x65, 0x74, 0x5e, 0xf6, 0xfb, 0xb0, 0xa3, 0x75, 0xaa, 0x80, 0x75, 0xa0, + 0x7d, 0x8a, 0xc5, 0xd1, 0xd4, 0x30, 0x5d, 0x82, 0x1f, 0xfc, 0x0d, 0x70, 0x4d, 0xc9, 0x7f, 0xaa, + 0xbf, 0x4e, 0xe8, 0x47, 0x0b, 0x9a, 0x85, 0xfe, 0x43, 0xfb, 0x0b, 0x6f, 0x3e, 0xdb, 0xa5, 0x9d, + 0x92, 0x42, 0xb6, 0x07, 0xdf, 0xff, 0xf1, 0xd7, 0xcf, 0x2b, 0x77, 0xec, 0x9b, 0x93, 0x4f, 0xe3, + 0x37, 0x5a, 0xc6, 0x0f, 0x93, 0x94, 0x3d, 0xc7, 0x23, 0xc1, 0xdd, 0xfe, 0x2b, 0xfd, 0xb9, 0xe4, + 0x43, 0xdd, 0xab, 0xe8, 0x27, 0x0b, 0xe0, 0xa2, 0x87, 0x50, 0x7f, 0x61, 0x88, 0x99, 0x8e, 0xee, + 0xec, 0x57, 0xc2, 0x6a, 0xd1, 0xed, 0x7d, 0xc5, 0x6d, 0x0f, 0x55, 0xe1, 0x86, 0xbe, 0xb3, 0xa0, + 0x9e, 0xb7, 0x18, 0xea, 0x2d, 0x0c, 0x73, 0xa9, 0x0b, 0x4b, 0xf3, 0x33, 0x87, 0x83, 0x54, 0xa9, + 0xc0, 0xc0, 0x10, 0x70, 0xfb, 0xaf, 0xd0, 0x0f, 0x16, 0x34, 0x0b, 0xfd, 0xbb, 0x44, 0xa9, 0xd9, + 0x2e, 0xef, 0xec, 0xe6, 0xe0, 0xc2, 0x8b, 0xc1, 0xf9, 0x34, 0x7f, 0x31, 0xe4, 0x44, 0xfa, 0x95, + 0x88, 0xfc, 0x6a, 0x41, 0x6b, 0x6a, 0x3c, 0xa0, 0xbb, 0x25, 0x45, 0x33, 0x5d, 0x98, 0x65, 0x64, + 0x3e, 0x52, 0x64, 0x0e, 0x6d, 0x67, 0x89, 0x32, 0x17, 0x74, 0xdc, 0xbc, 0x11, 0x87, 0xf9, 0x48, + 0x41, 0xbf, 0x59, 0x70, 0xad, 0xd8, 0xe8, 0xe8, 0xce, 0xd2, 0xc2, 0xb8, 0x34, 0x7a, 0x3a, 0x77, + 0x2b, 0xa2, 0x4d, 0x21, 0xdd, 0x53, 0x74, 0xdf, 0x45, 0x57, 0xa4, 0xab, 0x0a, 0xfd, 0x62, 0x20, + 0x2c, 0x29, 0xf4, 0x99, 0xa9, 0xd1, 0x29, 0x1d, 0x4f, 0xf3, 0x48, 0x2d, 0x12, 0x74, 0xc2, 0x48, + 0x6a, 0xfb, 0x8b, 0x05, 0xad, 0xa9, 0xe1, 0xb3, 0x44, 0xdb, 0x79, 0x43, 0xaa, 0x4c, 0x5b, 0xc3, + 0xab, 0x7f, 0x55, 0x5e, 0xbf, 0x5b, 0xb0, 0x3d, 0x33, 0xe8, 0xd0, 0xc1, 0x42, 0x6e, 0x8b, 0x86, + 0x62, 0x85, 0xd4, 0x1d, 0x29, 0x8a, 0x0f, 0xec, 0xc3, 0xab, 0x51, 0x1c, 0xf2, 0x49, 0xc8, 0xa1, + 0xd5, 0x7f, 0xf8, 0x02, 0x6e, 0x8c, 0x58, 0x3c, 0x13, 0x2c, 0x48, 0x48, 0x1e, 0xf0, 0xe1, 0x76, + 0x71, 0x10, 0x9f, 0xc8, 0x57, 0xdc, 0x89, 0xf5, 0xf9, 0xa1, 0xf1, 0x08, 0x59, 0x14, 0xd0, 0xd0, + 0x61, 0x69, 0xe8, 0x86, 0x98, 0xaa, 0x37, 0x9e, 0xab, 0xb7, 0x82, 0x84, 0xf0, 0x99, 0xff, 0x1c, + 0xf7, 0xe3, 0xe8, 0x6c, 0x5d, 0xa1, 0xde, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0x04, 0x39, 0xff, + 0x08, 0x98, 0x0c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/operation_metadata.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/operation_metadata.pb.go new file mode 100644 index 0000000..4987c67 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/operation_metadata.pb.go @@ -0,0 +1,162 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1beta1/operation_metadata.proto +// DO NOT EDIT! + +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The operation type. +type OperationMetadata_OperationType int32 + +const ( + // Unspecified operation type. + OperationMetadata_OPERATION_TYPE_UNSPECIFIED OperationMetadata_OperationType = 0 + // An operation to create a new version. + OperationMetadata_CREATE_VERSION OperationMetadata_OperationType = 1 + // An operation to delete an existing version. + OperationMetadata_DELETE_VERSION OperationMetadata_OperationType = 2 + // An operation to delete an existing model. + OperationMetadata_DELETE_MODEL OperationMetadata_OperationType = 3 +) + +var OperationMetadata_OperationType_name = map[int32]string{ + 0: "OPERATION_TYPE_UNSPECIFIED", + 1: "CREATE_VERSION", + 2: "DELETE_VERSION", + 3: "DELETE_MODEL", +} +var OperationMetadata_OperationType_value = map[string]int32{ + "OPERATION_TYPE_UNSPECIFIED": 0, + "CREATE_VERSION": 1, + "DELETE_VERSION": 2, + "DELETE_MODEL": 3, +} + +func (x OperationMetadata_OperationType) String() string { + return proto.EnumName(OperationMetadata_OperationType_name, int32(x)) +} +func (OperationMetadata_OperationType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 0} +} + +// Represents the metadata of the long-running operation. +type OperationMetadata struct { + // The time the operation was submitted. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The time operation processing started. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The time operation processing completed. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Indicates whether a request to cancel this operation has been made. + IsCancellationRequested bool `protobuf:"varint,4,opt,name=is_cancellation_requested,json=isCancellationRequested" json:"is_cancellation_requested,omitempty"` + // The operation type. + OperationType OperationMetadata_OperationType `protobuf:"varint,5,opt,name=operation_type,json=operationType,enum=google.cloud.ml.v1beta1.OperationMetadata_OperationType" json:"operation_type,omitempty"` + // Contains the name of the model associated with the operation. + ModelName string `protobuf:"bytes,6,opt,name=model_name,json=modelName" json:"model_name,omitempty"` + // Contains the version associated with the operation. + Version *Version `protobuf:"bytes,7,opt,name=version" json:"version,omitempty"` +} + +func (m *OperationMetadata) Reset() { *m = OperationMetadata{} } +func (m *OperationMetadata) String() string { return proto.CompactTextString(m) } +func (*OperationMetadata) ProtoMessage() {} +func (*OperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *OperationMetadata) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *OperationMetadata) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *OperationMetadata) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *OperationMetadata) GetIsCancellationRequested() bool { + if m != nil { + return m.IsCancellationRequested + } + return false +} + +func (m *OperationMetadata) GetOperationType() OperationMetadata_OperationType { + if m != nil { + return m.OperationType + } + return OperationMetadata_OPERATION_TYPE_UNSPECIFIED +} + +func (m *OperationMetadata) GetModelName() string { + if m != nil { + return m.ModelName + } + return "" +} + +func (m *OperationMetadata) GetVersion() *Version { + if m != nil { + return m.Version + } + return nil +} + +func init() { + proto.RegisterType((*OperationMetadata)(nil), "google.cloud.ml.v1beta1.OperationMetadata") + proto.RegisterEnum("google.cloud.ml.v1beta1.OperationMetadata_OperationType", OperationMetadata_OperationType_name, OperationMetadata_OperationType_value) +} + +func init() { proto.RegisterFile("google/cloud/ml/v1beta1/operation_metadata.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 457 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x5f, 0x6b, 0xdb, 0x30, + 0x14, 0xc5, 0xe7, 0xb6, 0x6b, 0x1b, 0x75, 0x0d, 0x99, 0x1f, 0x56, 0x2f, 0x6c, 0xab, 0xe9, 0x53, + 0x60, 0x60, 0xaf, 0x1d, 0x83, 0x75, 0x7d, 0x6a, 0x13, 0x0d, 0x02, 0x6d, 0x6c, 0x54, 0xaf, 0xb0, + 0xbd, 0x18, 0xc5, 0xbe, 0x33, 0x02, 0xfd, 0xf1, 0x2c, 0x25, 0xd0, 0x0f, 0xb4, 0xef, 0x39, 0x22, + 0xd9, 0x34, 0x23, 0x84, 0x3e, 0xea, 0xdc, 0xf3, 0xbb, 0xf7, 0xf8, 0x5e, 0xa3, 0x4f, 0x95, 0x52, + 0x15, 0x87, 0xb8, 0xe0, 0x6a, 0x51, 0xc6, 0x82, 0xc7, 0xcb, 0xf3, 0x39, 0x18, 0x7a, 0x1e, 0xab, + 0x1a, 0x1a, 0x6a, 0x98, 0x92, 0xb9, 0x00, 0x43, 0x4b, 0x6a, 0x68, 0x54, 0x37, 0xca, 0x28, 0xff, + 0xc4, 0x11, 0x91, 0x25, 0x22, 0xc1, 0xa3, 0x96, 0x18, 0xbe, 0x6b, 0x5b, 0xd1, 0x9a, 0xc5, 0x54, + 0x4a, 0x65, 0x2c, 0xae, 0x1d, 0x36, 0xfc, 0xb8, 0x6d, 0x90, 0x50, 0x25, 0xf0, 0x5c, 0x43, 0xb3, + 0x64, 0x05, 0xb4, 0xe6, 0xd3, 0xd6, 0x6c, 0x5f, 0xf3, 0xc5, 0xef, 0xd8, 0x30, 0x01, 0xda, 0x50, + 0x51, 0x3b, 0xc3, 0xd9, 0xdf, 0x3d, 0xf4, 0x3a, 0xe9, 0x12, 0xde, 0xb5, 0x01, 0xfd, 0x2b, 0x74, + 0x54, 0x34, 0x40, 0x0d, 0xe4, 0x2b, 0x7f, 0xe0, 0x85, 0xde, 0xe8, 0xe8, 0x62, 0x18, 0xb5, 0x81, + 0xbb, 0x66, 0x51, 0xd6, 0x35, 0x23, 0xc8, 0xd9, 0x57, 0x82, 0x7f, 0x89, 0x90, 0x36, 0xb4, 0x31, + 0x8e, 0xdd, 0x79, 0x96, 0xed, 0x59, 0xb7, 0x45, 0xbf, 0xa0, 0x43, 0x90, 0xa5, 0x03, 0x77, 0x9f, + 0x05, 0x0f, 0x40, 0x96, 0x16, 0xfb, 0x86, 0xde, 0x32, 0x9d, 0x17, 0x54, 0x16, 0xc0, 0xb9, 0xdb, + 0x75, 0x03, 0x7f, 0x16, 0xa0, 0x0d, 0x94, 0xc1, 0x5e, 0xe8, 0x8d, 0x0e, 0xc9, 0x09, 0xd3, 0xe3, + 0xb5, 0x3a, 0xe9, 0xca, 0x7e, 0x8e, 0xfa, 0x4f, 0x17, 0x32, 0x8f, 0x35, 0x04, 0x2f, 0x43, 0x6f, + 0xd4, 0xbf, 0xf8, 0x1a, 0x6d, 0x39, 0x4f, 0xb4, 0xb1, 0xae, 0x27, 0x25, 0x7b, 0xac, 0x81, 0x1c, + 0xab, 0xf5, 0xa7, 0xff, 0x1e, 0x21, 0x77, 0x19, 0x49, 0x05, 0x04, 0xfb, 0xa1, 0x37, 0xea, 0x91, + 0x9e, 0x55, 0x66, 0xd4, 0x66, 0x3f, 0x58, 0x42, 0xa3, 0x99, 0x92, 0xc1, 0x81, 0xfd, 0xe2, 0x70, + 0xeb, 0xe0, 0x07, 0xe7, 0x23, 0x1d, 0x70, 0xc6, 0xd0, 0xf1, 0x7f, 0xa3, 0xfd, 0x0f, 0x68, 0x98, + 0xa4, 0x98, 0x5c, 0x67, 0xd3, 0x64, 0x96, 0x67, 0x3f, 0x53, 0x9c, 0xff, 0x98, 0xdd, 0xa7, 0x78, + 0x3c, 0xfd, 0x3e, 0xc5, 0x93, 0xc1, 0x0b, 0xdf, 0x47, 0xfd, 0x31, 0xc1, 0xd7, 0x19, 0xce, 0x1f, + 0x30, 0xb9, 0x9f, 0x26, 0xb3, 0x81, 0xb7, 0xd2, 0x26, 0xf8, 0x16, 0xaf, 0x69, 0x3b, 0xfe, 0x00, + 0xbd, 0x6a, 0xb5, 0xbb, 0x64, 0x82, 0x6f, 0x07, 0xbb, 0x37, 0x4b, 0x74, 0x5a, 0x28, 0xb1, 0x11, + 0x8d, 0xd6, 0xac, 0x8b, 0x77, 0xf3, 0x66, 0x63, 0x31, 0xe9, 0xea, 0x66, 0xa9, 0xf7, 0xeb, 0xb2, + 0xc5, 0x2a, 0xc5, 0xa9, 0xac, 0x22, 0xd5, 0x54, 0x71, 0x05, 0xd2, 0x5e, 0x34, 0x76, 0x25, 0x5a, + 0x33, 0xbd, 0xf1, 0x47, 0x5f, 0x09, 0x3e, 0xdf, 0xb7, 0xae, 0xcf, 0xff, 0x02, 0x00, 0x00, 0xff, + 0xff, 0x89, 0xf8, 0x21, 0xa7, 0x5f, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/prediction_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/prediction_service.pb.go new file mode 100644 index 0000000..2e96b2b --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/prediction_service.pb.go @@ -0,0 +1,344 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1beta1/prediction_service.proto +// DO NOT EDIT! + +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api3 "google.golang.org/genproto/googleapis/api/httpbody" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request for predictions to be issued against a trained model. +// +// The body of the request is a single JSON object with a single top-level +// field: +// +// <dl> +// <dt>instances</dt> +// <dd>A JSON array containing values representing the instances to use for +// prediction.</dd> +// </dl> +// +// The structure of each element of the instances list is determined by your +// model's input definition. Instances can include named inputs or can contain +// only unlabeled values. +// +// Not all data includes named inputs. Some instances will be simple +// JSON values (boolean, number, or string). However, instances are often lists +// of simple values, or complex nested lists. Here are some examples of request +// bodies: +// +// CSV data with each row encoded as a string value: +// <pre> +// {"instances": ["1.0,true,\\"x\\"", "-2.0,false,\\"y\\""]} +// </pre> +// Plain text: +// <pre> +// {"instances": ["the quick brown fox", "la bruja le dio"]} +// </pre> +// Sentences encoded as lists of words (vectors of strings): +// <pre> +// { +// "instances": [ +// ["the","quick","brown"], +// ["la","bruja","le"], +// ... +// ] +// } +// </pre> +// Floating point scalar values: +// <pre> +// {"instances": [0.0, 1.1, 2.2]} +// </pre> +// Vectors of integers: +// <pre> +// { +// "instances": [ +// [0, 1, 2], +// [3, 4, 5], +// ... +// ] +// } +// </pre> +// Tensors (in this case, two-dimensional tensors): +// <pre> +// { +// "instances": [ +// [ +// [0, 1, 2], +// [3, 4, 5] +// ], +// ... +// ] +// } +// </pre> +// Images can be represented different ways. In this encoding scheme the first +// two dimensions represent the rows and columns of the image, and the third +// contains lists (vectors) of the R, G, and B values for each pixel. +// <pre> +// { +// "instances": [ +// [ +// [ +// [138, 30, 66], +// [130, 20, 56], +// ... +// ], +// [ +// [126, 38, 61], +// [122, 24, 57], +// ... +// ], +// ... +// ], +// ... +// ] +// } +// </pre> +// JSON strings must be encoded as UTF-8. To send binary data, you must +// base64-encode the data and mark it as binary. To mark a JSON string +// as binary, replace it with a JSON object with a single attribute named `b64`: +// <pre>{"b64": "..."} </pre> +// For example: +// +// Two Serialized tf.Examples (fake data, for illustrative purposes only): +// <pre> +// {"instances": [{"b64": "X5ad6u"}, {"b64": "IA9j4nx"}]} +// </pre> +// Two JPEG image byte strings (fake data, for illustrative purposes only): +// <pre> +// {"instances": [{"b64": "ASa8asdf"}, {"b64": "JLK7ljk3"}]} +// </pre> +// If your data includes named references, format each instance as a JSON object +// with the named references as the keys: +// +// JSON input data to be preprocessed: +// <pre> +// { +// "instances": [ +// { +// "a": 1.0, +// "b": true, +// "c": "x" +// }, +// { +// "a": -2.0, +// "b": false, +// "c": "y" +// } +// ] +// } +// </pre> +// Some models have an underlying TensorFlow graph that accepts multiple input +// tensors. In this case, you should use the names of JSON name/value pairs to +// identify the input tensors, as shown in the following exmaples: +// +// For a graph with input tensor aliases "tag" (string) and "image" +// (base64-encoded string): +// <pre> +// { +// "instances": [ +// { +// "tag": "beach", +// "image": {"b64": "ASa8asdf"} +// }, +// { +// "tag": "car", +// "image": {"b64": "JLK7ljk3"} +// } +// ] +// } +// </pre> +// For a graph with input tensor aliases "tag" (string) and "image" +// (3-dimensional array of 8-bit ints): +// <pre> +// { +// "instances": [ +// { +// "tag": "beach", +// "image": [ +// [ +// [138, 30, 66], +// [130, 20, 56], +// ... +// ], +// [ +// [126, 38, 61], +// [122, 24, 57], +// ... +// ], +// ... +// ] +// }, +// { +// "tag": "car", +// "image": [ +// [ +// [255, 0, 102], +// [255, 0, 97], +// ... +// ], +// [ +// [254, 1, 101], +// [254, 2, 93], +// ... +// ], +// ... +// ] +// }, +// ... +// ] +// } +// </pre> +// If the call is successful, the response body will contain one prediction +// entry per instance in the request body. If prediction fails for any +// instance, the response body will contain no predictions and will contian +// a single error entry instead. +type PredictRequest struct { + // Required. The resource name of a model or a version. + // + // Authorization: requires `Viewer` role on the parent project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // + // Required. The prediction request body. + HttpBody *google_api3.HttpBody `protobuf:"bytes,2,opt,name=http_body,json=httpBody" json:"http_body,omitempty"` +} + +func (m *PredictRequest) Reset() { *m = PredictRequest{} } +func (m *PredictRequest) String() string { return proto.CompactTextString(m) } +func (*PredictRequest) ProtoMessage() {} +func (*PredictRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *PredictRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *PredictRequest) GetHttpBody() *google_api3.HttpBody { + if m != nil { + return m.HttpBody + } + return nil +} + +func init() { + proto.RegisterType((*PredictRequest)(nil), "google.cloud.ml.v1beta1.PredictRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for OnlinePredictionService service + +type OnlinePredictionServiceClient interface { + // Performs prediction on the data in the request. + // + // **** REMOVE FROM GENERATED DOCUMENTATION + Predict(ctx context.Context, in *PredictRequest, opts ...grpc.CallOption) (*google_api3.HttpBody, error) +} + +type onlinePredictionServiceClient struct { + cc *grpc.ClientConn +} + +func NewOnlinePredictionServiceClient(cc *grpc.ClientConn) OnlinePredictionServiceClient { + return &onlinePredictionServiceClient{cc} +} + +func (c *onlinePredictionServiceClient) Predict(ctx context.Context, in *PredictRequest, opts ...grpc.CallOption) (*google_api3.HttpBody, error) { + out := new(google_api3.HttpBody) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.OnlinePredictionService/Predict", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for OnlinePredictionService service + +type OnlinePredictionServiceServer interface { + // Performs prediction on the data in the request. + // + // **** REMOVE FROM GENERATED DOCUMENTATION + Predict(context.Context, *PredictRequest) (*google_api3.HttpBody, error) +} + +func RegisterOnlinePredictionServiceServer(s *grpc.Server, srv OnlinePredictionServiceServer) { + s.RegisterService(&_OnlinePredictionService_serviceDesc, srv) +} + +func _OnlinePredictionService_Predict_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PredictRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OnlinePredictionServiceServer).Predict(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.OnlinePredictionService/Predict", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OnlinePredictionServiceServer).Predict(ctx, req.(*PredictRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _OnlinePredictionService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.ml.v1beta1.OnlinePredictionService", + HandlerType: (*OnlinePredictionServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Predict", + Handler: _OnlinePredictionService_Predict_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/ml/v1beta1/prediction_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/ml/v1beta1/prediction_service.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 312 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0x4d, 0x4a, 0x03, 0x31, + 0x14, 0xc7, 0x49, 0x11, 0xb5, 0x11, 0x5c, 0x04, 0xb1, 0xb5, 0x08, 0x96, 0xba, 0xb0, 0x74, 0x91, + 0xd8, 0xba, 0xb2, 0xe2, 0xa6, 0x2b, 0x77, 0x0e, 0x75, 0x21, 0xb8, 0x29, 0xe9, 0x4c, 0x48, 0x23, + 0x99, 0xbc, 0x38, 0x93, 0x16, 0x8b, 0xb8, 0xf1, 0x0a, 0x3d, 0x9a, 0x57, 0xf0, 0x20, 0x92, 0x49, + 0x28, 0xca, 0xe8, 0xee, 0x31, 0x6f, 0x7e, 0xef, 0xff, 0x11, 0x7c, 0x29, 0x01, 0xa4, 0x16, 0x2c, + 0xd5, 0xb0, 0xcc, 0x58, 0xae, 0xd9, 0x6a, 0x38, 0x17, 0x8e, 0x0f, 0x99, 0x2d, 0x44, 0xa6, 0x52, + 0xa7, 0xc0, 0xcc, 0x4a, 0x51, 0xac, 0x54, 0x2a, 0xa8, 0x2d, 0xc0, 0x01, 0x69, 0x05, 0x82, 0x56, + 0x04, 0xcd, 0x35, 0x8d, 0x44, 0xe7, 0x34, 0x9e, 0xe2, 0x56, 0x31, 0x6e, 0x0c, 0x38, 0xee, 0xe9, + 0x32, 0x60, 0x9d, 0x93, 0x1f, 0xdb, 0x85, 0x73, 0x76, 0x0e, 0xd9, 0x3a, 0xac, 0x7a, 0x8f, 0xf8, + 0x30, 0x09, 0x6a, 0x53, 0xf1, 0xb2, 0x14, 0xa5, 0x23, 0x04, 0xef, 0x18, 0x9e, 0x8b, 0x36, 0xea, + 0xa2, 0x7e, 0x73, 0x5a, 0xcd, 0x64, 0x88, 0x9b, 0x9e, 0x9b, 0x79, 0xb0, 0xdd, 0xe8, 0xa2, 0xfe, + 0xc1, 0xe8, 0x88, 0x46, 0x2f, 0xdc, 0x2a, 0x7a, 0xe7, 0x9c, 0x9d, 0x40, 0xb6, 0x9e, 0xee, 0x2f, + 0xe2, 0x34, 0xda, 0x20, 0xdc, 0xba, 0x37, 0x5a, 0x19, 0x91, 0x6c, 0xd3, 0x3c, 0x84, 0x30, 0xe4, + 0x15, 0xef, 0xc5, 0x8f, 0xe4, 0x82, 0xfe, 0x13, 0x89, 0xfe, 0xb6, 0xd5, 0xf9, 0x53, 0xaf, 0x47, + 0x3f, 0x3e, 0xbf, 0x36, 0x8d, 0x7e, 0xef, 0x7c, 0xdb, 0xdd, 0x9b, 0x37, 0x7c, 0x6b, 0x0b, 0x78, + 0x16, 0xa9, 0x2b, 0xd9, 0x60, 0xf0, 0x3e, 0x8e, 0x75, 0x8e, 0xd1, 0x60, 0xb2, 0xc2, 0x67, 0x29, + 0xe4, 0x35, 0x4d, 0x7f, 0x33, 0x1e, 0x98, 0x1c, 0xd7, 0xfc, 0x26, 0xbe, 0xa9, 0x04, 0x3d, 0x5d, + 0x47, 0x4c, 0x82, 0xe6, 0x46, 0x52, 0x28, 0x24, 0x93, 0xc2, 0x54, 0x3d, 0xb2, 0xb0, 0xe2, 0x56, + 0x95, 0xb5, 0xe7, 0xbc, 0xc9, 0xf5, 0x7c, 0xb7, 0xfa, 0xeb, 0xea, 0x3b, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x26, 0x25, 0x67, 0xf3, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/project_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/project_service.pb.go new file mode 100644 index 0000000..adfda7e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/project_service.pb.go @@ -0,0 +1,179 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/ml/v1beta1/project_service.proto +// DO NOT EDIT! + +package ml + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Requests service account information associated with a project. +type GetConfigRequest struct { + // Required. The project name. + // + // Authorization: requires `Viewer` role on the specified project. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} } +func (m *GetConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetConfigRequest) ProtoMessage() {} +func (*GetConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *GetConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Returns service account information associated with a project. +type GetConfigResponse struct { + // The service account Cloud ML uses to access resources in the project. + ServiceAccount string `protobuf:"bytes,1,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // The project number for `service_account`. + ServiceAccountProject int64 `protobuf:"varint,2,opt,name=service_account_project,json=serviceAccountProject" json:"service_account_project,omitempty"` +} + +func (m *GetConfigResponse) Reset() { *m = GetConfigResponse{} } +func (m *GetConfigResponse) String() string { return proto.CompactTextString(m) } +func (*GetConfigResponse) ProtoMessage() {} +func (*GetConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +func (m *GetConfigResponse) GetServiceAccount() string { + if m != nil { + return m.ServiceAccount + } + return "" +} + +func (m *GetConfigResponse) GetServiceAccountProject() int64 { + if m != nil { + return m.ServiceAccountProject + } + return 0 +} + +func init() { + proto.RegisterType((*GetConfigRequest)(nil), "google.cloud.ml.v1beta1.GetConfigRequest") + proto.RegisterType((*GetConfigResponse)(nil), "google.cloud.ml.v1beta1.GetConfigResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ProjectManagementService service + +type ProjectManagementServiceClient interface { + // Get the service account information associated with your project. You need + // this information in order to grant the service account persmissions for + // the Google Cloud Storage location where you put your model training code + // for training the model with Google Cloud Machine Learning. + GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) +} + +type projectManagementServiceClient struct { + cc *grpc.ClientConn +} + +func NewProjectManagementServiceClient(cc *grpc.ClientConn) ProjectManagementServiceClient { + return &projectManagementServiceClient{cc} +} + +func (c *projectManagementServiceClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) { + out := new(GetConfigResponse) + err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ProjectManagementService/GetConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ProjectManagementService service + +type ProjectManagementServiceServer interface { + // Get the service account information associated with your project. You need + // this information in order to grant the service account persmissions for + // the Google Cloud Storage location where you put your model training code + // for training the model with Google Cloud Machine Learning. + GetConfig(context.Context, *GetConfigRequest) (*GetConfigResponse, error) +} + +func RegisterProjectManagementServiceServer(s *grpc.Server, srv ProjectManagementServiceServer) { + s.RegisterService(&_ProjectManagementService_serviceDesc, srv) +} + +func _ProjectManagementService_GetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProjectManagementServiceServer).GetConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.ml.v1beta1.ProjectManagementService/GetConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProjectManagementServiceServer).GetConfig(ctx, req.(*GetConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ProjectManagementService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.ml.v1beta1.ProjectManagementService", + HandlerType: (*ProjectManagementServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetConfig", + Handler: _ProjectManagementService_GetConfig_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/ml/v1beta1/project_service.proto", +} + +func init() { proto.RegisterFile("google/cloud/ml/v1beta1/project_service.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 327 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4a, 0x43, 0x31, + 0x10, 0xc6, 0x79, 0x55, 0x84, 0x66, 0xe1, 0x9f, 0x88, 0xb4, 0x14, 0xc1, 0x52, 0xa4, 0xd6, 0xa2, + 0x09, 0x55, 0x10, 0x54, 0x5c, 0x58, 0x17, 0xae, 0x84, 0x52, 0x77, 0x6e, 0x4a, 0xfa, 0x1c, 0xc3, + 0x93, 0x24, 0x13, 0x5f, 0xd2, 0x6e, 0xc4, 0x8d, 0x27, 0x10, 0x3c, 0x87, 0xa7, 0xf1, 0x0a, 0x1e, + 0x44, 0xfa, 0x92, 0x16, 0x6d, 0x11, 0xdc, 0x0d, 0x33, 0xbf, 0x6f, 0x32, 0xdf, 0x4c, 0xc8, 0xa1, + 0x44, 0x94, 0x0a, 0x78, 0xaa, 0x70, 0x74, 0xcf, 0xb5, 0xe2, 0xe3, 0xce, 0x10, 0xbc, 0xe8, 0x70, + 0x9b, 0xe3, 0x23, 0xa4, 0x7e, 0xe0, 0x20, 0x1f, 0x67, 0x29, 0x30, 0x9b, 0xa3, 0x47, 0x5a, 0x09, + 0x38, 0x2b, 0x70, 0xa6, 0x15, 0x8b, 0x78, 0x6d, 0x3b, 0xf6, 0x11, 0x36, 0xe3, 0xc2, 0x18, 0xf4, + 0xc2, 0x67, 0x68, 0x5c, 0x90, 0x35, 0x9a, 0x64, 0xfd, 0x1a, 0xfc, 0x15, 0x9a, 0x87, 0x4c, 0xf6, + 0xe1, 0x69, 0x04, 0xce, 0x53, 0x4a, 0x96, 0x8d, 0xd0, 0x50, 0x4d, 0xea, 0x49, 0xab, 0xdc, 0x2f, + 0xe2, 0x86, 0x27, 0x1b, 0x3f, 0x38, 0x67, 0xd1, 0x38, 0xa0, 0x7b, 0x64, 0x2d, 0x0e, 0x31, 0x10, + 0x69, 0x8a, 0x23, 0xe3, 0xa3, 0x66, 0x35, 0xa6, 0x2f, 0x43, 0x96, 0x9e, 0x90, 0xca, 0x1c, 0x38, + 0x88, 0x2e, 0xaa, 0xa5, 0x7a, 0xd2, 0x5a, 0xea, 0x6f, 0xfd, 0x16, 0xf4, 0x42, 0xf1, 0xe8, 0x23, + 0x21, 0xd5, 0x18, 0xdf, 0x08, 0x23, 0x24, 0x68, 0x30, 0xfe, 0x36, 0xa0, 0xf4, 0x2d, 0x21, 0xe5, + 0xd9, 0x4c, 0x74, 0x9f, 0xfd, 0xb1, 0x00, 0x36, 0xef, 0xaf, 0xd6, 0xfe, 0x0f, 0x1a, 0x2c, 0x36, + 0x0e, 0x5e, 0x3f, 0xbf, 0xde, 0x4b, 0x4d, 0xba, 0x3b, 0x5b, 0xff, 0xf3, 0x64, 0x1f, 0x17, 0x71, + 0x7c, 0xc7, 0xdb, 0x2f, 0x67, 0x72, 0xaa, 0xea, 0x3a, 0xb2, 0x93, 0xa2, 0x5e, 0x68, 0x2f, 0x6c, + 0x36, 0x7d, 0xa2, 0xbb, 0x19, 0xfd, 0x44, 0x17, 0xbd, 0xc9, 0x15, 0x7a, 0xc9, 0xdd, 0x69, 0xd4, + 0x48, 0x54, 0xc2, 0x48, 0x86, 0xb9, 0xe4, 0x12, 0x4c, 0x71, 0x23, 0x1e, 0x4a, 0xc2, 0x66, 0x6e, + 0xe1, 0x33, 0x9c, 0x6b, 0x35, 0x5c, 0x29, 0xa8, 0xe3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, + 0x59, 0xc4, 0x91, 0x31, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/resources.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/resources.pb.go new file mode 100644 index 0000000..b907c97 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/resources.pb.go @@ -0,0 +1,591 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/runtimeconfig/v1beta1/resources.proto +// DO NOT EDIT! + +/* +Package runtimeconfig is a generated protocol buffer package. + +It is generated from these files: + google/cloud/runtimeconfig/v1beta1/resources.proto + google/cloud/runtimeconfig/v1beta1/runtimeconfig.proto + +It has these top-level messages: + RuntimeConfig + Variable + EndCondition + Waiter + ListConfigsRequest + ListConfigsResponse + GetConfigRequest + CreateConfigRequest + UpdateConfigRequest + DeleteConfigRequest + ListVariablesRequest + ListVariablesResponse + WatchVariableRequest + GetVariableRequest + CreateVariableRequest + UpdateVariableRequest + DeleteVariableRequest + ListWaitersRequest + ListWaitersResponse + GetWaiterRequest + CreateWaiterRequest + DeleteWaiterRequest +*/ +package runtimeconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The `VariableState` describes the last known state of the variable and is +// used during a `variables().watch` call to distinguish the state of the +// variable. +type VariableState int32 + +const ( + // Default variable state. + VariableState_VARIABLE_STATE_UNSPECIFIED VariableState = 0 + // The variable was updated, while `variables().watch` was executing. + VariableState_UPDATED VariableState = 1 + // The variable was deleted, while `variables().watch` was executing. + VariableState_DELETED VariableState = 2 +) + +var VariableState_name = map[int32]string{ + 0: "VARIABLE_STATE_UNSPECIFIED", + 1: "UPDATED", + 2: "DELETED", +} +var VariableState_value = map[string]int32{ + "VARIABLE_STATE_UNSPECIFIED": 0, + "UPDATED": 1, + "DELETED": 2, +} + +func (x VariableState) String() string { + return proto.EnumName(VariableState_name, int32(x)) +} +func (VariableState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// A RuntimeConfig resource is the primary resource in the Cloud RuntimeConfig +// service. A RuntimeConfig resource consists of metadata and a hierarchy of +// variables. +type RuntimeConfig struct { + // The resource name of a runtime config. The name must have the format: + // + // projects/[PROJECT_ID]/configs/[CONFIG_NAME] + // + // The `[PROJECT_ID]` must be a valid project ID, and `[CONFIG_NAME]` is an + // arbitrary name that matches RFC 1035 segment specification. The length of + // `[CONFIG_NAME]` must be less than 64 bytes. + // + // You pick the RuntimeConfig resource name, but the server will validate that + // the name adheres to this format. After you create the resource, you cannot + // change the resource's name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // An optional description of the RuntimeConfig object. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *RuntimeConfig) Reset() { *m = RuntimeConfig{} } +func (m *RuntimeConfig) String() string { return proto.CompactTextString(m) } +func (*RuntimeConfig) ProtoMessage() {} +func (*RuntimeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *RuntimeConfig) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *RuntimeConfig) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// Describes a single variable within a RuntimeConfig resource. +// The name denotes the hierarchical variable name. For example, +// `ports/serving_port` is a valid variable name. The variable value is an +// opaque string and only leaf variables can have values (that is, variables +// that do not have any child variables). +type Variable struct { + // The name of the variable resource, in the format: + // + // projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME] + // + // The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a + // valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system + // file path naming. + // + // The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and + // dashes. Slashes are used as path element separators and are not part of the + // `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one + // non-slash character. Multiple slashes are coalesced into single slash + // character. Each path segment should follow RFC 1035 segment specification. + // The length of a `[VARIABLE_NAME]` must be less than 256 bytes. + // + // Once you create a variable, you cannot change the variable name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The the value of the variable. It can be either a binary or a string + // value. You must specify one of either `value` or `text`. Specifying both + // will cause the server to return an error. + // + // Types that are valid to be assigned to Contents: + // *Variable_Value + // *Variable_Text + Contents isVariable_Contents `protobuf_oneof:"contents"` + // [Output Only] The time of the last variable update. + UpdateTime *google_protobuf2.Timestamp `protobuf:"bytes,3,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // [Ouput only] The current state of the variable. The variable state indicates + // the outcome of the `variables().watch` call and is visible through the + // `get` and `list` calls. + State VariableState `protobuf:"varint,4,opt,name=state,enum=google.cloud.runtimeconfig.v1beta1.VariableState" json:"state,omitempty"` +} + +func (m *Variable) Reset() { *m = Variable{} } +func (m *Variable) String() string { return proto.CompactTextString(m) } +func (*Variable) ProtoMessage() {} +func (*Variable) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isVariable_Contents interface { + isVariable_Contents() +} + +type Variable_Value struct { + Value []byte `protobuf:"bytes,2,opt,name=value,proto3,oneof"` +} +type Variable_Text struct { + Text string `protobuf:"bytes,5,opt,name=text,oneof"` +} + +func (*Variable_Value) isVariable_Contents() {} +func (*Variable_Text) isVariable_Contents() {} + +func (m *Variable) GetContents() isVariable_Contents { + if m != nil { + return m.Contents + } + return nil +} + +func (m *Variable) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Variable) GetValue() []byte { + if x, ok := m.GetContents().(*Variable_Value); ok { + return x.Value + } + return nil +} + +func (m *Variable) GetText() string { + if x, ok := m.GetContents().(*Variable_Text); ok { + return x.Text + } + return "" +} + +func (m *Variable) GetUpdateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *Variable) GetState() VariableState { + if m != nil { + return m.State + } + return VariableState_VARIABLE_STATE_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Variable) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Variable_OneofMarshaler, _Variable_OneofUnmarshaler, _Variable_OneofSizer, []interface{}{ + (*Variable_Value)(nil), + (*Variable_Text)(nil), + } +} + +func _Variable_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Variable) + // contents + switch x := m.Contents.(type) { + case *Variable_Value: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Value) + case *Variable_Text: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Text) + case nil: + default: + return fmt.Errorf("Variable.Contents has unexpected type %T", x) + } + return nil +} + +func _Variable_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Variable) + switch tag { + case 2: // contents.value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Contents = &Variable_Value{x} + return true, err + case 5: // contents.text + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Contents = &Variable_Text{x} + return true, err + default: + return false, nil + } +} + +func _Variable_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Variable) + // contents + switch x := m.Contents.(type) { + case *Variable_Value: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Value))) + n += len(x.Value) + case *Variable_Text: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Text))) + n += len(x.Text) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The condition that a Waiter resource is waiting for. +type EndCondition struct { + // The condition oneof holds the available condition types for this + // EndCondition. Currently, the only available type is Cardinality. + // + // Types that are valid to be assigned to Condition: + // *EndCondition_Cardinality_ + Condition isEndCondition_Condition `protobuf_oneof:"condition"` +} + +func (m *EndCondition) Reset() { *m = EndCondition{} } +func (m *EndCondition) String() string { return proto.CompactTextString(m) } +func (*EndCondition) ProtoMessage() {} +func (*EndCondition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isEndCondition_Condition interface { + isEndCondition_Condition() +} + +type EndCondition_Cardinality_ struct { + Cardinality *EndCondition_Cardinality `protobuf:"bytes,1,opt,name=cardinality,oneof"` +} + +func (*EndCondition_Cardinality_) isEndCondition_Condition() {} + +func (m *EndCondition) GetCondition() isEndCondition_Condition { + if m != nil { + return m.Condition + } + return nil +} + +func (m *EndCondition) GetCardinality() *EndCondition_Cardinality { + if x, ok := m.GetCondition().(*EndCondition_Cardinality_); ok { + return x.Cardinality + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*EndCondition) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _EndCondition_OneofMarshaler, _EndCondition_OneofUnmarshaler, _EndCondition_OneofSizer, []interface{}{ + (*EndCondition_Cardinality_)(nil), + } +} + +func _EndCondition_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*EndCondition) + // condition + switch x := m.Condition.(type) { + case *EndCondition_Cardinality_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Cardinality); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("EndCondition.Condition has unexpected type %T", x) + } + return nil +} + +func _EndCondition_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*EndCondition) + switch tag { + case 1: // condition.cardinality + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(EndCondition_Cardinality) + err := b.DecodeMessage(msg) + m.Condition = &EndCondition_Cardinality_{msg} + return true, err + default: + return false, nil + } +} + +func _EndCondition_OneofSizer(msg proto.Message) (n int) { + m := msg.(*EndCondition) + // condition + switch x := m.Condition.(type) { + case *EndCondition_Cardinality_: + s := proto.Size(x.Cardinality) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cardinality condition for the Waiter resource. A cardinality condition is +// met when the number of variables under a specified path prefix reaches a +// predefined number. For example, if you set a Cardinality condition where +// the `path` is set to `/foo` and the number of paths is set to 2, the +// following variables would meet the condition in a RuntimeConfig resource: +// +// + `/foo/variable1 = "value1"` +// + `/foo/variable2 = "value2"` +// + `/bar/variable3 = "value3"` +// +// It would not would not satisify the same condition with the `number` set to +// 3, however, because there is only 2 paths that start with `/foo`. +// Cardinality conditions are recursive; all subtrees under the specific +// path prefix are counted. +type EndCondition_Cardinality struct { + // The root of the variable subtree to monitor. For example, `/foo`. + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + // The number variables under the `path` that must exist to meet this + // condition. Defaults to 1 if not specified. + Number int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` +} + +func (m *EndCondition_Cardinality) Reset() { *m = EndCondition_Cardinality{} } +func (m *EndCondition_Cardinality) String() string { return proto.CompactTextString(m) } +func (*EndCondition_Cardinality) ProtoMessage() {} +func (*EndCondition_Cardinality) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *EndCondition_Cardinality) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *EndCondition_Cardinality) GetNumber() int32 { + if m != nil { + return m.Number + } + return 0 +} + +// A Waiter resource waits for some end condition within a RuntimeConfig resource +// to be met before it returns. For example, assume you have a distributed +// system where each node writes to a Variable resource indidicating the node's +// readiness as part of the startup process. +// +// You then configure a Waiter resource with the success condition set to wait +// until some number of nodes have checked in. Afterwards, your application +// runs some arbitrary code after the condition has been met and the waiter +// returns successfully. +// +// Once created, a Waiter resource is immutable. +// +// To learn more about using waiters, read the +// [Creating a Waiter](/deployment-manager/runtime-configurator/creating-a-waiter) +// documentation. +type Waiter struct { + // The name of the Waiter resource, in the format: + // + // projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME] + // + // The `[PROJECT_ID]` must be a valid Google Cloud project ID, + // the `[CONFIG_NAME]` must be a valid RuntimeConfig resource, the + // `[WAITER_NAME]` must match RFC 1035 segment specification, and the length + // of `[WAITER_NAME]` must be less than 64 bytes. + // + // After you create a Waiter resource, you cannot change the resource name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // [Required] Specifies the timeout of the waiter in seconds, beginning from + // the instant that `waiters().create` method is called. If this time elapses + // before the success or failure conditions are met, the waiter fails and sets + // the `error` code to `DEADLINE_EXCEEDED`. + Timeout *google_protobuf1.Duration `protobuf:"bytes,2,opt,name=timeout" json:"timeout,omitempty"` + // [Optional] The failure condition of this waiter. If this condition is met, + // `done` will be set to `true` and the `error` code will be set to `ABORTED`. + // The failure condition takes precedence over the success condition. If both + // conditions are met, a failure will be indicated. This value is optional; if + // no failure condition is set, the only failure scenario will be a timeout. + Failure *EndCondition `protobuf:"bytes,3,opt,name=failure" json:"failure,omitempty"` + // [Required] The success condition. If this condition is met, `done` will be + // set to `true` and the `error` value will remain unset. The failure condition + // takes precedence over the success condition. If both conditions are met, a + // failure will be indicated. + Success *EndCondition `protobuf:"bytes,4,opt,name=success" json:"success,omitempty"` + // [Output Only] The instant at which this Waiter resource was created. Adding + // the value of `timeout` to this instant yields the timeout deadline for the + // waiter. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // [Output Only] If the value is `false`, it means the waiter is still waiting + // for one of its conditions to be met. + // + // If true, the waiter has finished. If the waiter finished due to a timeout + // or failure, `error` will be set. + Done bool `protobuf:"varint,6,opt,name=done" json:"done,omitempty"` + // [Output Only] If the waiter ended due to a failure or timeout, this value + // will be set. + Error *google_rpc.Status `protobuf:"bytes,7,opt,name=error" json:"error,omitempty"` +} + +func (m *Waiter) Reset() { *m = Waiter{} } +func (m *Waiter) String() string { return proto.CompactTextString(m) } +func (*Waiter) ProtoMessage() {} +func (*Waiter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Waiter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Waiter) GetTimeout() *google_protobuf1.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +func (m *Waiter) GetFailure() *EndCondition { + if m != nil { + return m.Failure + } + return nil +} + +func (m *Waiter) GetSuccess() *EndCondition { + if m != nil { + return m.Success + } + return nil +} + +func (m *Waiter) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Waiter) GetDone() bool { + if m != nil { + return m.Done + } + return false +} + +func (m *Waiter) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +func init() { + proto.RegisterType((*RuntimeConfig)(nil), "google.cloud.runtimeconfig.v1beta1.RuntimeConfig") + proto.RegisterType((*Variable)(nil), "google.cloud.runtimeconfig.v1beta1.Variable") + proto.RegisterType((*EndCondition)(nil), "google.cloud.runtimeconfig.v1beta1.EndCondition") + proto.RegisterType((*EndCondition_Cardinality)(nil), "google.cloud.runtimeconfig.v1beta1.EndCondition.Cardinality") + proto.RegisterType((*Waiter)(nil), "google.cloud.runtimeconfig.v1beta1.Waiter") + proto.RegisterEnum("google.cloud.runtimeconfig.v1beta1.VariableState", VariableState_name, VariableState_value) +} + +func init() { proto.RegisterFile("google/cloud/runtimeconfig/v1beta1/resources.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 615 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x5d, 0x6f, 0xd3, 0x3c, + 0x14, 0xc7, 0x9b, 0x3e, 0x7d, 0xd9, 0x4e, 0xb6, 0x47, 0x93, 0x85, 0x46, 0xa8, 0xd0, 0xa8, 0x7a, + 0x81, 0x2a, 0x2e, 0x12, 0xda, 0x5d, 0xa1, 0x71, 0xd3, 0x97, 0xb0, 0x15, 0x4d, 0x30, 0xb9, 0xdd, + 0x90, 0xb8, 0x19, 0xae, 0xe3, 0x85, 0x48, 0xa9, 0x1d, 0x39, 0xce, 0x04, 0xdf, 0x86, 0x6b, 0x3e, + 0x01, 0x9f, 0x86, 0x2b, 0x3e, 0x08, 0xb2, 0xe3, 0x40, 0x0b, 0x13, 0x1b, 0xdc, 0xf9, 0xf8, 0xfc, + 0xcf, 0xef, 0xbc, 0xf8, 0x24, 0x30, 0x8c, 0x85, 0x88, 0x53, 0x16, 0xd0, 0x54, 0x14, 0x51, 0x20, + 0x0b, 0xae, 0x92, 0x15, 0xa3, 0x82, 0x5f, 0x25, 0x71, 0x70, 0x3d, 0x58, 0x32, 0x45, 0x06, 0x81, + 0x64, 0xb9, 0x28, 0x24, 0x65, 0xb9, 0x9f, 0x49, 0xa1, 0x04, 0xea, 0x95, 0x31, 0xbe, 0x89, 0xf1, + 0x37, 0x62, 0x7c, 0x1b, 0xd3, 0x79, 0x68, 0xb9, 0x24, 0x4b, 0x02, 0xc2, 0xb9, 0x50, 0x44, 0x25, + 0x82, 0x5b, 0x42, 0xe7, 0xc0, 0x7a, 0x8d, 0xb5, 0x2c, 0xae, 0x82, 0xa8, 0x90, 0x46, 0x60, 0xfd, + 0x8f, 0x7e, 0xf5, 0xeb, 0x0c, 0xb9, 0x22, 0xab, 0xcc, 0x0a, 0xee, 0x5b, 0x81, 0xcc, 0x68, 0x90, + 0x2b, 0xa2, 0x0a, 0x4b, 0xee, 0x85, 0xb0, 0x8b, 0xcb, 0x82, 0x26, 0xa6, 0x20, 0x84, 0xa0, 0xc1, + 0xc9, 0x8a, 0x79, 0x4e, 0xd7, 0xe9, 0x6f, 0x63, 0x73, 0x46, 0x5d, 0x70, 0x23, 0x96, 0x53, 0x99, + 0x64, 0x3a, 0xa7, 0x57, 0x37, 0xae, 0xf5, 0xab, 0xde, 0x57, 0x07, 0xb6, 0x2e, 0x88, 0x4c, 0xc8, + 0x32, 0x65, 0x37, 0x22, 0xf6, 0xa1, 0x79, 0x4d, 0xd2, 0x82, 0x99, 0xe0, 0x9d, 0x93, 0x1a, 0x2e, + 0x4d, 0x74, 0x0f, 0x1a, 0x8a, 0x7d, 0x50, 0x5e, 0x53, 0x6b, 0x4f, 0x6a, 0xd8, 0x58, 0xe8, 0x08, + 0xdc, 0x22, 0x8b, 0x88, 0x62, 0x97, 0xba, 0x32, 0xef, 0xbf, 0xae, 0xd3, 0x77, 0x87, 0x1d, 0xdf, + 0xce, 0xb1, 0xea, 0xd2, 0x5f, 0x54, 0x5d, 0x62, 0x28, 0xe5, 0xfa, 0x02, 0x1d, 0x43, 0x53, 0xb7, + 0xc8, 0xbc, 0x46, 0xd7, 0xe9, 0xff, 0x3f, 0x1c, 0xf8, 0xb7, 0x8f, 0xdf, 0xaf, 0x6a, 0x9f, 0xeb, + 0x40, 0x5c, 0xc6, 0x8f, 0x01, 0xb6, 0xa8, 0xe0, 0x8a, 0x71, 0x95, 0xf7, 0xbe, 0x38, 0xb0, 0x13, + 0xf2, 0x68, 0x22, 0x78, 0x94, 0xe8, 0x8e, 0xd1, 0x3b, 0x70, 0x29, 0x91, 0x51, 0xc2, 0x49, 0x9a, + 0xa8, 0x8f, 0xa6, 0x57, 0x77, 0xf8, 0xfc, 0x2e, 0xb9, 0xd6, 0x31, 0xfe, 0xe4, 0x27, 0xe3, 0xa4, + 0x86, 0xd7, 0x91, 0x9d, 0x67, 0xe0, 0xae, 0x79, 0xf5, 0x54, 0x33, 0xa2, 0xde, 0x57, 0x53, 0xd5, + 0x67, 0xb4, 0x0f, 0x2d, 0x5e, 0xac, 0x96, 0x4c, 0x9a, 0xb1, 0x36, 0xb1, 0xb5, 0xc6, 0x2e, 0x6c, + 0xd3, 0x2a, 0x45, 0xef, 0x5b, 0x1d, 0x5a, 0x6f, 0x48, 0xa2, 0x98, 0xbc, 0xf1, 0x65, 0x0e, 0xa1, + 0xad, 0x8b, 0x14, 0x85, 0x32, 0x10, 0x77, 0xf8, 0xe0, 0xb7, 0x39, 0x4f, 0xed, 0xb6, 0xe1, 0x4a, + 0x89, 0x5e, 0x42, 0xfb, 0x8a, 0x24, 0x69, 0x21, 0xab, 0xc7, 0x79, 0xfa, 0xb7, 0x9d, 0xe3, 0x0a, + 0xa0, 0x59, 0x79, 0x41, 0x29, 0xcb, 0x73, 0xf3, 0x62, 0xff, 0xc4, 0xb2, 0x00, 0xbd, 0x38, 0x54, + 0xb2, 0x1f, 0x8b, 0xd3, 0xbc, 0x7d, 0x71, 0x4a, 0xb9, 0x59, 0x1c, 0x04, 0x8d, 0x48, 0x70, 0xe6, + 0xb5, 0xba, 0x4e, 0x7f, 0x0b, 0x9b, 0x33, 0xea, 0x43, 0x93, 0x49, 0x29, 0xa4, 0xd7, 0x36, 0x28, + 0x54, 0xa1, 0x64, 0x46, 0xfd, 0xb9, 0xf9, 0x90, 0x70, 0x29, 0x78, 0x32, 0x83, 0xdd, 0x8d, 0x2d, + 0x42, 0x07, 0xd0, 0xb9, 0x18, 0xe1, 0xd9, 0x68, 0x7c, 0x1a, 0x5e, 0xce, 0x17, 0xa3, 0x45, 0x78, + 0x79, 0xfe, 0x6a, 0x7e, 0x16, 0x4e, 0x66, 0x2f, 0x66, 0xe1, 0x74, 0xaf, 0x86, 0x5c, 0x68, 0x9f, + 0x9f, 0x4d, 0x47, 0x8b, 0x70, 0xba, 0xe7, 0x68, 0x63, 0x1a, 0x9e, 0x86, 0xda, 0xa8, 0x8f, 0x3f, + 0x39, 0xf0, 0x98, 0x8a, 0xd5, 0x1d, 0xc6, 0x70, 0xe6, 0xbc, 0x7d, 0x6d, 0x55, 0xb1, 0x48, 0x09, + 0x8f, 0x7d, 0x21, 0xe3, 0x20, 0x66, 0xdc, 0xb4, 0x1a, 0x94, 0x2e, 0x92, 0x25, 0xf9, 0x9f, 0x7e, + 0x58, 0x47, 0x1b, 0xb7, 0x9f, 0xeb, 0xbd, 0xe3, 0x92, 0x38, 0x31, 0x79, 0x37, 0x7e, 0x0f, 0xfe, + 0xc5, 0x60, 0xac, 0x43, 0x96, 0x2d, 0x93, 0xe0, 0xf0, 0x7b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, + 0xe4, 0x09, 0x63, 0x10, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/runtimeconfig.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/runtimeconfig.pb.go new file mode 100644 index 0000000..dbdb674 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/runtimeconfig.pb.go @@ -0,0 +1,1355 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/runtimeconfig/v1beta1/runtimeconfig.proto +// DO NOT EDIT! + +package runtimeconfig + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request for the `ListConfigs()` method. +type ListConfigsRequest struct { + // The [project ID](https://support.google.com/cloud/answer/6158840?hl=en&ref_topic=6158848) + // for this request, in the format `projects/[PROJECT_ID]`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Specifies the number of results to return per page. If there are fewer + // elements than the specified number, returns all elements. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Specifies a page token to use. Set `pageToken` to a `nextPageToken` + // returned by a previous list request to get the next page of results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListConfigsRequest) Reset() { *m = ListConfigsRequest{} } +func (m *ListConfigsRequest) String() string { return proto.CompactTextString(m) } +func (*ListConfigsRequest) ProtoMessage() {} +func (*ListConfigsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *ListConfigsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListConfigsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListConfigsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// `ListConfigs()` returns the following response. The order of returned +// objects is arbitrary; that is, it is not ordered in any particular way. +type ListConfigsResponse struct { + // A list of the configurations in the project. The order of returned + // objects is arbitrary; that is, it is not ordered in any particular way. + Configs []*RuntimeConfig `protobuf:"bytes,1,rep,name=configs" json:"configs,omitempty"` + // This token allows you to get the next page of results for list requests. + // If the number of results is larger than `pageSize`, use the `nextPageToken` + // as a value for the query parameter `pageToken` in the next list request. + // Subsequent list requests will have their own `nextPageToken` to continue + // paging through the results + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListConfigsResponse) Reset() { *m = ListConfigsResponse{} } +func (m *ListConfigsResponse) String() string { return proto.CompactTextString(m) } +func (*ListConfigsResponse) ProtoMessage() {} +func (*ListConfigsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *ListConfigsResponse) GetConfigs() []*RuntimeConfig { + if m != nil { + return m.Configs + } + return nil +} + +func (m *ListConfigsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Gets a RuntimeConfig resource. +type GetConfigRequest struct { + // The name of the RuntimeConfig resource to retrieve, in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]` + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` +} + +func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} } +func (m *GetConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetConfigRequest) ProtoMessage() {} +func (*GetConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *GetConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Creates a RuntimeConfig resource. +type CreateConfigRequest struct { + // The [project ID](https://support.google.com/cloud/answer/6158840?hl=en&ref_topic=6158848) + // for this request, in the format `projects/[PROJECT_ID]`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The RuntimeConfig to create. + Config *RuntimeConfig `protobuf:"bytes,2,opt,name=config" json:"config,omitempty"` + // An optional but recommended unique `request_id`. If the server + // receives two `create()` requests with the same + // `request_id`, then the second request will be ignored and the + // first resource created and stored in the backend is returned. + // Empty `request_id` fields are ignored. + // + // It is responsibility of the client to ensure uniqueness of the + // `request_id` strings. + // + // `request_id` strings are limited to 64 characters. + RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId" json:"request_id,omitempty"` +} + +func (m *CreateConfigRequest) Reset() { *m = CreateConfigRequest{} } +func (m *CreateConfigRequest) String() string { return proto.CompactTextString(m) } +func (*CreateConfigRequest) ProtoMessage() {} +func (*CreateConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *CreateConfigRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateConfigRequest) GetConfig() *RuntimeConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *CreateConfigRequest) GetRequestId() string { + if m != nil { + return m.RequestId + } + return "" +} + +// Request message for `UpdateConfig()` method. +type UpdateConfigRequest struct { + // The name of the RuntimeConfig resource to update, in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The config resource to update. + Config *RuntimeConfig `protobuf:"bytes,2,opt,name=config" json:"config,omitempty"` +} + +func (m *UpdateConfigRequest) Reset() { *m = UpdateConfigRequest{} } +func (m *UpdateConfigRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateConfigRequest) ProtoMessage() {} +func (*UpdateConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *UpdateConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateConfigRequest) GetConfig() *RuntimeConfig { + if m != nil { + return m.Config + } + return nil +} + +// Request for the `DeleteConfig()` method. +type DeleteConfigRequest struct { + // The RuntimeConfig resource to delete, in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteConfigRequest) Reset() { *m = DeleteConfigRequest{} } +func (m *DeleteConfigRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteConfigRequest) ProtoMessage() {} +func (*DeleteConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *DeleteConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request for the `ListVariables()` method. +type ListVariablesRequest struct { + // The path to the RuntimeConfig resource for which you want to list variables. + // The configuration must exist beforehand; the path must by in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Filters variables by matching the specified filter. For example: + // + // `projects/example-project/config/[CONFIG_NAME]/variables/example-variable`. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // Specifies the number of results to return per page. If there are fewer + // elements than the specified number, returns all elements. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Specifies a page token to use. Set `pageToken` to a `nextPageToken` + // returned by a previous list request to get the next page of results. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The flag indicates whether the user wants to return values of variables. + // If true, then only those variables that user has IAM GetVariable permission + // will be returned along with their values. + ReturnValues bool `protobuf:"varint,5,opt,name=return_values,json=returnValues" json:"return_values,omitempty"` +} + +func (m *ListVariablesRequest) Reset() { *m = ListVariablesRequest{} } +func (m *ListVariablesRequest) String() string { return proto.CompactTextString(m) } +func (*ListVariablesRequest) ProtoMessage() {} +func (*ListVariablesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *ListVariablesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListVariablesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListVariablesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListVariablesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListVariablesRequest) GetReturnValues() bool { + if m != nil { + return m.ReturnValues + } + return false +} + +// Response for the `ListVariables()` method. +type ListVariablesResponse struct { + // A list of variables and their values. The order of returned variable + // objects is arbitrary. + Variables []*Variable `protobuf:"bytes,1,rep,name=variables" json:"variables,omitempty"` + // This token allows you to get the next page of results for list requests. + // If the number of results is larger than `pageSize`, use the `nextPageToken` + // as a value for the query parameter `pageToken` in the next list request. + // Subsequent list requests will have their own `nextPageToken` to continue + // paging through the results + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListVariablesResponse) Reset() { *m = ListVariablesResponse{} } +func (m *ListVariablesResponse) String() string { return proto.CompactTextString(m) } +func (*ListVariablesResponse) ProtoMessage() {} +func (*ListVariablesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *ListVariablesResponse) GetVariables() []*Variable { + if m != nil { + return m.Variables + } + return nil +} + +func (m *ListVariablesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the `WatchVariable()` method. +type WatchVariableRequest struct { + // The name of the variable to watch, in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // If specified, checks the current timestamp of the variable and if the + // current timestamp is newer than `newerThan` timestamp, the method returns + // immediately. + // + // If not specified or the variable has an older timestamp, the watcher waits + // for a the value to change before returning. + NewerThan *google_protobuf2.Timestamp `protobuf:"bytes,4,opt,name=newer_than,json=newerThan" json:"newer_than,omitempty"` +} + +func (m *WatchVariableRequest) Reset() { *m = WatchVariableRequest{} } +func (m *WatchVariableRequest) String() string { return proto.CompactTextString(m) } +func (*WatchVariableRequest) ProtoMessage() {} +func (*WatchVariableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *WatchVariableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *WatchVariableRequest) GetNewerThan() *google_protobuf2.Timestamp { + if m != nil { + return m.NewerThan + } + return nil +} + +// Request for the `GetVariable()` method. +type GetVariableRequest struct { + // The name of the variable to return, in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIBLE_NAME]` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetVariableRequest) Reset() { *m = GetVariableRequest{} } +func (m *GetVariableRequest) String() string { return proto.CompactTextString(m) } +func (*GetVariableRequest) ProtoMessage() {} +func (*GetVariableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *GetVariableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request for the `CreateVariable()` method. +type CreateVariableRequest struct { + // The path to the RutimeConfig resource that this variable should belong to. + // The configuration must exist beforehand; the path must by in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The variable to create. + Variable *Variable `protobuf:"bytes,2,opt,name=variable" json:"variable,omitempty"` + // An optional but recommended unique `request_id`. If the server + // receives two `create()` requests with the same + // `request_id`, then the second request will be ignored and the + // first resource created and stored in the backend is returned. + // Empty `request_id` fields are ignored. + // + // It is responsibility of the client to ensure uniqueness of the + // `request_id` strings. + // + // `request_id` strings are limited to 64 characters. + RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId" json:"request_id,omitempty"` +} + +func (m *CreateVariableRequest) Reset() { *m = CreateVariableRequest{} } +func (m *CreateVariableRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVariableRequest) ProtoMessage() {} +func (*CreateVariableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *CreateVariableRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateVariableRequest) GetVariable() *Variable { + if m != nil { + return m.Variable + } + return nil +} + +func (m *CreateVariableRequest) GetRequestId() string { + if m != nil { + return m.RequestId + } + return "" +} + +// Request for the `UpdateVariable()` method. +type UpdateVariableRequest struct { + // The name of the variable to update, in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The variable to update. + Variable *Variable `protobuf:"bytes,2,opt,name=variable" json:"variable,omitempty"` +} + +func (m *UpdateVariableRequest) Reset() { *m = UpdateVariableRequest{} } +func (m *UpdateVariableRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateVariableRequest) ProtoMessage() {} +func (*UpdateVariableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *UpdateVariableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateVariableRequest) GetVariable() *Variable { + if m != nil { + return m.Variable + } + return nil +} + +// Request for the `DeleteVariable()` method. +type DeleteVariableRequest struct { + // The name of the variable to delete, in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Set to `true` to recursively delete multiple variables with the same + // prefix. + Recursive bool `protobuf:"varint,2,opt,name=recursive" json:"recursive,omitempty"` +} + +func (m *DeleteVariableRequest) Reset() { *m = DeleteVariableRequest{} } +func (m *DeleteVariableRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVariableRequest) ProtoMessage() {} +func (*DeleteVariableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *DeleteVariableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeleteVariableRequest) GetRecursive() bool { + if m != nil { + return m.Recursive + } + return false +} + +// Request for the `ListWaiters()` method. +type ListWaitersRequest struct { + // The path to the configuration for which you want to get a list of waiters. + // The configuration must exist beforehand; the path must by in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Specifies the number of results to return per page. If there are fewer + // elements than the specified number, returns all elements. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Specifies a page token to use. Set `pageToken` to a `nextPageToken` + // returned by a previous list request to get the next page of results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListWaitersRequest) Reset() { *m = ListWaitersRequest{} } +func (m *ListWaitersRequest) String() string { return proto.CompactTextString(m) } +func (*ListWaitersRequest) ProtoMessage() {} +func (*ListWaitersRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *ListWaitersRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListWaitersRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListWaitersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the `ListWaiters()` method. +// Order of returned waiter objects is arbitrary. +type ListWaitersResponse struct { + // Found waiters in the project. + Waiters []*Waiter `protobuf:"bytes,1,rep,name=waiters" json:"waiters,omitempty"` + // This token allows you to get the next page of results for list requests. + // If the number of results is larger than `pageSize`, use the `nextPageToken` + // as a value for the query parameter `pageToken` in the next list request. + // Subsequent list requests will have their own `nextPageToken` to continue + // paging through the results + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListWaitersResponse) Reset() { *m = ListWaitersResponse{} } +func (m *ListWaitersResponse) String() string { return proto.CompactTextString(m) } +func (*ListWaitersResponse) ProtoMessage() {} +func (*ListWaitersResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *ListWaitersResponse) GetWaiters() []*Waiter { + if m != nil { + return m.Waiters + } + return nil +} + +func (m *ListWaitersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the `GetWaiter()` method. +type GetWaiterRequest struct { + // The fully-qualified name of the Waiter resource object to retrieve, in the + // format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetWaiterRequest) Reset() { *m = GetWaiterRequest{} } +func (m *GetWaiterRequest) String() string { return proto.CompactTextString(m) } +func (*GetWaiterRequest) ProtoMessage() {} +func (*GetWaiterRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *GetWaiterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `CreateWaiter()` method. +type CreateWaiterRequest struct { + // The path to the configuration that will own the waiter. + // The configuration must exist beforehand; the path must by in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The Waiter resource to create. + Waiter *Waiter `protobuf:"bytes,2,opt,name=waiter" json:"waiter,omitempty"` + // An optional but recommended unique `request_id`. If the server + // receives two `create()` requests with the same + // `request_id`, then the second request will be ignored and the + // first resource created and stored in the backend is returned. + // Empty `request_id` fields are ignored. + // + // It is responsibility of the client to ensure uniqueness of the + // `request_id` strings. + // + // `request_id` strings are limited to 64 characters. + RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId" json:"request_id,omitempty"` +} + +func (m *CreateWaiterRequest) Reset() { *m = CreateWaiterRequest{} } +func (m *CreateWaiterRequest) String() string { return proto.CompactTextString(m) } +func (*CreateWaiterRequest) ProtoMessage() {} +func (*CreateWaiterRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *CreateWaiterRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateWaiterRequest) GetWaiter() *Waiter { + if m != nil { + return m.Waiter + } + return nil +} + +func (m *CreateWaiterRequest) GetRequestId() string { + if m != nil { + return m.RequestId + } + return "" +} + +// Request for the `DeleteWaiter()` method. +type DeleteWaiterRequest struct { + // The Waiter resource to delete, in the format: + // + // `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteWaiterRequest) Reset() { *m = DeleteWaiterRequest{} } +func (m *DeleteWaiterRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteWaiterRequest) ProtoMessage() {} +func (*DeleteWaiterRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *DeleteWaiterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*ListConfigsRequest)(nil), "google.cloud.runtimeconfig.v1beta1.ListConfigsRequest") + proto.RegisterType((*ListConfigsResponse)(nil), "google.cloud.runtimeconfig.v1beta1.ListConfigsResponse") + proto.RegisterType((*GetConfigRequest)(nil), "google.cloud.runtimeconfig.v1beta1.GetConfigRequest") + proto.RegisterType((*CreateConfigRequest)(nil), "google.cloud.runtimeconfig.v1beta1.CreateConfigRequest") + proto.RegisterType((*UpdateConfigRequest)(nil), "google.cloud.runtimeconfig.v1beta1.UpdateConfigRequest") + proto.RegisterType((*DeleteConfigRequest)(nil), "google.cloud.runtimeconfig.v1beta1.DeleteConfigRequest") + proto.RegisterType((*ListVariablesRequest)(nil), "google.cloud.runtimeconfig.v1beta1.ListVariablesRequest") + proto.RegisterType((*ListVariablesResponse)(nil), "google.cloud.runtimeconfig.v1beta1.ListVariablesResponse") + proto.RegisterType((*WatchVariableRequest)(nil), "google.cloud.runtimeconfig.v1beta1.WatchVariableRequest") + proto.RegisterType((*GetVariableRequest)(nil), "google.cloud.runtimeconfig.v1beta1.GetVariableRequest") + proto.RegisterType((*CreateVariableRequest)(nil), "google.cloud.runtimeconfig.v1beta1.CreateVariableRequest") + proto.RegisterType((*UpdateVariableRequest)(nil), "google.cloud.runtimeconfig.v1beta1.UpdateVariableRequest") + proto.RegisterType((*DeleteVariableRequest)(nil), "google.cloud.runtimeconfig.v1beta1.DeleteVariableRequest") + proto.RegisterType((*ListWaitersRequest)(nil), "google.cloud.runtimeconfig.v1beta1.ListWaitersRequest") + proto.RegisterType((*ListWaitersResponse)(nil), "google.cloud.runtimeconfig.v1beta1.ListWaitersResponse") + proto.RegisterType((*GetWaiterRequest)(nil), "google.cloud.runtimeconfig.v1beta1.GetWaiterRequest") + proto.RegisterType((*CreateWaiterRequest)(nil), "google.cloud.runtimeconfig.v1beta1.CreateWaiterRequest") + proto.RegisterType((*DeleteWaiterRequest)(nil), "google.cloud.runtimeconfig.v1beta1.DeleteWaiterRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for RuntimeConfigManager service + +type RuntimeConfigManagerClient interface { + // Lists all the RuntimeConfig resources within project. + ListConfigs(ctx context.Context, in *ListConfigsRequest, opts ...grpc.CallOption) (*ListConfigsResponse, error) + // Gets information about a RuntimeConfig resource. + GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*RuntimeConfig, error) + // Creates a new RuntimeConfig resource. The configuration name must be + // unique within project. + CreateConfig(ctx context.Context, in *CreateConfigRequest, opts ...grpc.CallOption) (*RuntimeConfig, error) + // Updates a RuntimeConfig resource. The configuration must exist beforehand. + UpdateConfig(ctx context.Context, in *UpdateConfigRequest, opts ...grpc.CallOption) (*RuntimeConfig, error) + // Deletes a RuntimeConfig resource. + DeleteConfig(ctx context.Context, in *DeleteConfigRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Lists variables within given a configuration, matching any provided filters. + // This only lists variable names, not the values, unless `return_values` is + // true, in which case only variables that user has IAM permission to + // GetVariable will be returned. + ListVariables(ctx context.Context, in *ListVariablesRequest, opts ...grpc.CallOption) (*ListVariablesResponse, error) + // Gets information about a single variable. + GetVariable(ctx context.Context, in *GetVariableRequest, opts ...grpc.CallOption) (*Variable, error) + // Watches a specific variable and waits for a change in the variable's value. + // When there is a change, this method returns the new value or times out. + // + // If a variable is deleted while being watched, the `variableState` state is + // set to `DELETED` and the method returns the last known variable `value`. + // + // If you set the deadline for watching to a larger value than internal timeout + // (60 seconds), the current variable value is returned and the `variableState` + // will be `VARIABLE_STATE_UNSPECIFIED`. + // + // To learn more about creating a watcher, read the + // [Watching a Variable for Changes](/deployment-manager/runtime-configurator/watching-a-variable) + // documentation. + WatchVariable(ctx context.Context, in *WatchVariableRequest, opts ...grpc.CallOption) (*Variable, error) + // Creates a variable within the given configuration. You cannot create + // a variable with a name that is a prefix of an existing variable name, or a + // name that has an existing variable name as a prefix. + // + // To learn more about creating a variable, read the + // [Setting and Getting Data](/deployment-manager/runtime-configurator/set-and-get-variables) + // documentation. + CreateVariable(ctx context.Context, in *CreateVariableRequest, opts ...grpc.CallOption) (*Variable, error) + // Updates an existing variable with a new value. + UpdateVariable(ctx context.Context, in *UpdateVariableRequest, opts ...grpc.CallOption) (*Variable, error) + // Deletes a variable or multiple variables. + // + // If you specify a variable name, then that variable is deleted. If you + // specify a prefix and `recursive` is true, then all variables with that + // prefix are deleted. You must set a `recursive` to true if you delete + // variables by prefix. + DeleteVariable(ctx context.Context, in *DeleteVariableRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // List waiters within the given configuration. + ListWaiters(ctx context.Context, in *ListWaitersRequest, opts ...grpc.CallOption) (*ListWaitersResponse, error) + // Gets information about a single waiter. + GetWaiter(ctx context.Context, in *GetWaiterRequest, opts ...grpc.CallOption) (*Waiter, error) + // Creates a Waiter resource. This operation returns a long-running Operation + // resource which can be polled for completion. However, a waiter with the + // given name will exist (and can be retrieved) prior to the operation + // completing. If the operation fails, the failed Waiter resource will + // still exist and must be deleted prior to subsequent creation attempts. + CreateWaiter(ctx context.Context, in *CreateWaiterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes the waiter with the specified name. + DeleteWaiter(ctx context.Context, in *DeleteWaiterRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) +} + +type runtimeConfigManagerClient struct { + cc *grpc.ClientConn +} + +func NewRuntimeConfigManagerClient(cc *grpc.ClientConn) RuntimeConfigManagerClient { + return &runtimeConfigManagerClient{cc} +} + +func (c *runtimeConfigManagerClient) ListConfigs(ctx context.Context, in *ListConfigsRequest, opts ...grpc.CallOption) (*ListConfigsResponse, error) { + out := new(ListConfigsResponse) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/ListConfigs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*RuntimeConfig, error) { + out := new(RuntimeConfig) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) CreateConfig(ctx context.Context, in *CreateConfigRequest, opts ...grpc.CallOption) (*RuntimeConfig, error) { + out := new(RuntimeConfig) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) UpdateConfig(ctx context.Context, in *UpdateConfigRequest, opts ...grpc.CallOption) (*RuntimeConfig, error) { + out := new(RuntimeConfig) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/UpdateConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) DeleteConfig(ctx context.Context, in *DeleteConfigRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) ListVariables(ctx context.Context, in *ListVariablesRequest, opts ...grpc.CallOption) (*ListVariablesResponse, error) { + out := new(ListVariablesResponse) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/ListVariables", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) GetVariable(ctx context.Context, in *GetVariableRequest, opts ...grpc.CallOption) (*Variable, error) { + out := new(Variable) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) WatchVariable(ctx context.Context, in *WatchVariableRequest, opts ...grpc.CallOption) (*Variable, error) { + out := new(Variable) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/WatchVariable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) CreateVariable(ctx context.Context, in *CreateVariableRequest, opts ...grpc.CallOption) (*Variable, error) { + out := new(Variable) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) UpdateVariable(ctx context.Context, in *UpdateVariableRequest, opts ...grpc.CallOption) (*Variable, error) { + out := new(Variable) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/UpdateVariable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) DeleteVariable(ctx context.Context, in *DeleteVariableRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) ListWaiters(ctx context.Context, in *ListWaitersRequest, opts ...grpc.CallOption) (*ListWaitersResponse, error) { + out := new(ListWaitersResponse) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/ListWaiters", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) GetWaiter(ctx context.Context, in *GetWaiterRequest, opts ...grpc.CallOption) (*Waiter, error) { + out := new(Waiter) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetWaiter", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) CreateWaiter(ctx context.Context, in *CreateWaiterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateWaiter", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeConfigManagerClient) DeleteWaiter(ctx context.Context, in *DeleteWaiterRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteWaiter", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for RuntimeConfigManager service + +type RuntimeConfigManagerServer interface { + // Lists all the RuntimeConfig resources within project. + ListConfigs(context.Context, *ListConfigsRequest) (*ListConfigsResponse, error) + // Gets information about a RuntimeConfig resource. + GetConfig(context.Context, *GetConfigRequest) (*RuntimeConfig, error) + // Creates a new RuntimeConfig resource. The configuration name must be + // unique within project. + CreateConfig(context.Context, *CreateConfigRequest) (*RuntimeConfig, error) + // Updates a RuntimeConfig resource. The configuration must exist beforehand. + UpdateConfig(context.Context, *UpdateConfigRequest) (*RuntimeConfig, error) + // Deletes a RuntimeConfig resource. + DeleteConfig(context.Context, *DeleteConfigRequest) (*google_protobuf4.Empty, error) + // Lists variables within given a configuration, matching any provided filters. + // This only lists variable names, not the values, unless `return_values` is + // true, in which case only variables that user has IAM permission to + // GetVariable will be returned. + ListVariables(context.Context, *ListVariablesRequest) (*ListVariablesResponse, error) + // Gets information about a single variable. + GetVariable(context.Context, *GetVariableRequest) (*Variable, error) + // Watches a specific variable and waits for a change in the variable's value. + // When there is a change, this method returns the new value or times out. + // + // If a variable is deleted while being watched, the `variableState` state is + // set to `DELETED` and the method returns the last known variable `value`. + // + // If you set the deadline for watching to a larger value than internal timeout + // (60 seconds), the current variable value is returned and the `variableState` + // will be `VARIABLE_STATE_UNSPECIFIED`. + // + // To learn more about creating a watcher, read the + // [Watching a Variable for Changes](/deployment-manager/runtime-configurator/watching-a-variable) + // documentation. + WatchVariable(context.Context, *WatchVariableRequest) (*Variable, error) + // Creates a variable within the given configuration. You cannot create + // a variable with a name that is a prefix of an existing variable name, or a + // name that has an existing variable name as a prefix. + // + // To learn more about creating a variable, read the + // [Setting and Getting Data](/deployment-manager/runtime-configurator/set-and-get-variables) + // documentation. + CreateVariable(context.Context, *CreateVariableRequest) (*Variable, error) + // Updates an existing variable with a new value. + UpdateVariable(context.Context, *UpdateVariableRequest) (*Variable, error) + // Deletes a variable or multiple variables. + // + // If you specify a variable name, then that variable is deleted. If you + // specify a prefix and `recursive` is true, then all variables with that + // prefix are deleted. You must set a `recursive` to true if you delete + // variables by prefix. + DeleteVariable(context.Context, *DeleteVariableRequest) (*google_protobuf4.Empty, error) + // List waiters within the given configuration. + ListWaiters(context.Context, *ListWaitersRequest) (*ListWaitersResponse, error) + // Gets information about a single waiter. + GetWaiter(context.Context, *GetWaiterRequest) (*Waiter, error) + // Creates a Waiter resource. This operation returns a long-running Operation + // resource which can be polled for completion. However, a waiter with the + // given name will exist (and can be retrieved) prior to the operation + // completing. If the operation fails, the failed Waiter resource will + // still exist and must be deleted prior to subsequent creation attempts. + CreateWaiter(context.Context, *CreateWaiterRequest) (*google_longrunning.Operation, error) + // Deletes the waiter with the specified name. + DeleteWaiter(context.Context, *DeleteWaiterRequest) (*google_protobuf4.Empty, error) +} + +func RegisterRuntimeConfigManagerServer(s *grpc.Server, srv RuntimeConfigManagerServer) { + s.RegisterService(&_RuntimeConfigManager_serviceDesc, srv) +} + +func _RuntimeConfigManager_ListConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListConfigsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).ListConfigs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/ListConfigs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).ListConfigs(ctx, req.(*ListConfigsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_GetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).GetConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).GetConfig(ctx, req.(*GetConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_CreateConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).CreateConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).CreateConfig(ctx, req.(*CreateConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_UpdateConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).UpdateConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/UpdateConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).UpdateConfig(ctx, req.(*UpdateConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_DeleteConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).DeleteConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).DeleteConfig(ctx, req.(*DeleteConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_ListVariables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVariablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).ListVariables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/ListVariables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).ListVariables(ctx, req.(*ListVariablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_GetVariable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVariableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).GetVariable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).GetVariable(ctx, req.(*GetVariableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_WatchVariable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WatchVariableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).WatchVariable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/WatchVariable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).WatchVariable(ctx, req.(*WatchVariableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_CreateVariable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVariableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).CreateVariable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).CreateVariable(ctx, req.(*CreateVariableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_UpdateVariable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateVariableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).UpdateVariable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/UpdateVariable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).UpdateVariable(ctx, req.(*UpdateVariableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_DeleteVariable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVariableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).DeleteVariable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).DeleteVariable(ctx, req.(*DeleteVariableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_ListWaiters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListWaitersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).ListWaiters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/ListWaiters", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).ListWaiters(ctx, req.(*ListWaitersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_GetWaiter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetWaiterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).GetWaiter(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetWaiter", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).GetWaiter(ctx, req.(*GetWaiterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_CreateWaiter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateWaiterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).CreateWaiter(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateWaiter", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).CreateWaiter(ctx, req.(*CreateWaiterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeConfigManager_DeleteWaiter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteWaiterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeConfigManagerServer).DeleteWaiter(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteWaiter", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeConfigManagerServer).DeleteWaiter(ctx, req.(*DeleteWaiterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _RuntimeConfigManager_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager", + HandlerType: (*RuntimeConfigManagerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListConfigs", + Handler: _RuntimeConfigManager_ListConfigs_Handler, + }, + { + MethodName: "GetConfig", + Handler: _RuntimeConfigManager_GetConfig_Handler, + }, + { + MethodName: "CreateConfig", + Handler: _RuntimeConfigManager_CreateConfig_Handler, + }, + { + MethodName: "UpdateConfig", + Handler: _RuntimeConfigManager_UpdateConfig_Handler, + }, + { + MethodName: "DeleteConfig", + Handler: _RuntimeConfigManager_DeleteConfig_Handler, + }, + { + MethodName: "ListVariables", + Handler: _RuntimeConfigManager_ListVariables_Handler, + }, + { + MethodName: "GetVariable", + Handler: _RuntimeConfigManager_GetVariable_Handler, + }, + { + MethodName: "WatchVariable", + Handler: _RuntimeConfigManager_WatchVariable_Handler, + }, + { + MethodName: "CreateVariable", + Handler: _RuntimeConfigManager_CreateVariable_Handler, + }, + { + MethodName: "UpdateVariable", + Handler: _RuntimeConfigManager_UpdateVariable_Handler, + }, + { + MethodName: "DeleteVariable", + Handler: _RuntimeConfigManager_DeleteVariable_Handler, + }, + { + MethodName: "ListWaiters", + Handler: _RuntimeConfigManager_ListWaiters_Handler, + }, + { + MethodName: "GetWaiter", + Handler: _RuntimeConfigManager_GetWaiter_Handler, + }, + { + MethodName: "CreateWaiter", + Handler: _RuntimeConfigManager_CreateWaiter_Handler, + }, + { + MethodName: "DeleteWaiter", + Handler: _RuntimeConfigManager_DeleteWaiter_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/runtimeconfig/v1beta1/runtimeconfig.proto", +} + +func init() { + proto.RegisterFile("google/cloud/runtimeconfig/v1beta1/runtimeconfig.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 1144 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x98, 0x5b, 0x6f, 0xdc, 0x44, + 0x14, 0xc7, 0x35, 0x69, 0x9b, 0x66, 0x4f, 0x2e, 0xa0, 0xc9, 0x45, 0x91, 0xdb, 0x8a, 0xc8, 0x45, + 0x51, 0x58, 0x55, 0x76, 0x93, 0x56, 0x69, 0x12, 0x28, 0x0f, 0x49, 0x51, 0x08, 0x17, 0xb5, 0x32, + 0x21, 0x95, 0x78, 0x59, 0x4d, 0x36, 0x13, 0xc7, 0xb0, 0x3b, 0x36, 0xf6, 0x38, 0x81, 0xa2, 0xbc, + 0xc0, 0x1b, 0x08, 0x09, 0x89, 0x87, 0xf2, 0x84, 0x10, 0x12, 0x20, 0x21, 0x84, 0x78, 0xe2, 0x05, + 0xd1, 0x2f, 0x81, 0xc4, 0x27, 0xe0, 0x83, 0x20, 0xcf, 0xc5, 0x6b, 0x6f, 0xf6, 0x32, 0x0e, 0xe1, + 0x2d, 0x39, 0x9e, 0x73, 0xce, 0x6f, 0xce, 0x9c, 0x99, 0xff, 0xd1, 0xc2, 0xaa, 0x1f, 0x86, 0x7e, + 0x8b, 0xba, 0xcd, 0x56, 0x98, 0x1e, 0xb8, 0x71, 0xca, 0x78, 0xd0, 0xa6, 0xcd, 0x90, 0x1d, 0x06, + 0xbe, 0x7b, 0xbc, 0xbc, 0x4f, 0x39, 0x59, 0x2e, 0x5b, 0x9d, 0x28, 0x0e, 0x79, 0x88, 0x6d, 0xe9, + 0xe7, 0x08, 0x3f, 0xa7, 0xbc, 0x42, 0xf9, 0x59, 0xd7, 0x55, 0x6c, 0x12, 0x05, 0x2e, 0x61, 0x2c, + 0xe4, 0x84, 0x07, 0x21, 0x4b, 0x64, 0x04, 0x6b, 0xc5, 0x24, 0x33, 0x4d, 0xc2, 0x34, 0x6e, 0x52, + 0xed, 0x73, 0x53, 0xf9, 0xb4, 0x42, 0xe6, 0xc7, 0x29, 0x63, 0x01, 0xf3, 0xdd, 0x30, 0xa2, 0x71, + 0x29, 0xf0, 0x35, 0xb5, 0x48, 0xfc, 0xb7, 0x9f, 0x1e, 0xba, 0xb4, 0x1d, 0xf1, 0x8f, 0xd5, 0xc7, + 0x17, 0xba, 0x3f, 0x66, 0x59, 0x13, 0x4e, 0xda, 0x91, 0x5c, 0x60, 0x1f, 0x01, 0x7e, 0x2b, 0x48, + 0xf8, 0x96, 0x00, 0x49, 0x3c, 0xfa, 0x61, 0x4a, 0x13, 0x8e, 0xe7, 0x60, 0x34, 0x22, 0x31, 0x65, + 0x7c, 0x1e, 0x2d, 0xa0, 0xa5, 0x9a, 0xa7, 0xfe, 0xc3, 0xd7, 0xa0, 0x16, 0x11, 0x9f, 0x36, 0x92, + 0xe0, 0x09, 0x9d, 0x1f, 0x59, 0x40, 0x4b, 0x57, 0xbc, 0xb1, 0xcc, 0xf0, 0x4e, 0xf0, 0x84, 0xe2, + 0x1b, 0x00, 0xe2, 0x23, 0x0f, 0x3f, 0xa0, 0x6c, 0xfe, 0x92, 0x70, 0x14, 0xcb, 0x77, 0x33, 0x83, + 0xfd, 0x39, 0x82, 0xe9, 0x52, 0xaa, 0x24, 0x0a, 0x59, 0x42, 0xf1, 0x9b, 0x70, 0x55, 0x96, 0x21, + 0x99, 0x47, 0x0b, 0x97, 0x96, 0xc6, 0x57, 0x96, 0x9d, 0xe1, 0xc5, 0x76, 0x3c, 0x69, 0x95, 0xc1, + 0x3c, 0x1d, 0x01, 0x2f, 0xc2, 0x73, 0x8c, 0x7e, 0xc4, 0x1b, 0x05, 0x90, 0x11, 0x01, 0x32, 0x99, + 0x99, 0x1f, 0xe5, 0x30, 0x8b, 0xf0, 0xfc, 0x36, 0x55, 0x28, 0x7a, 0xd3, 0x18, 0x2e, 0x33, 0xd2, + 0xa6, 0xca, 0x41, 0xfc, 0x6d, 0x3f, 0x45, 0x30, 0xbd, 0x15, 0x53, 0xc2, 0x69, 0x79, 0x6d, 0xbf, + 0x02, 0xed, 0xc0, 0xa8, 0x44, 0x11, 0x51, 0xce, 0xb5, 0x17, 0x15, 0x20, 0x2b, 0x67, 0x2c, 0xb3, + 0x35, 0x82, 0x03, 0x5d, 0x4e, 0x65, 0xd9, 0x39, 0xb0, 0x39, 0x4c, 0xbf, 0x1b, 0x1d, 0x9c, 0x01, + 0xd3, 0x9b, 0x40, 0x9d, 0x4d, 0x5c, 0x20, 0x94, 0xfd, 0x12, 0x4c, 0x3f, 0xa0, 0x2d, 0x6a, 0x90, + 0xd5, 0xfe, 0x09, 0xc1, 0x4c, 0x76, 0xde, 0x7b, 0x24, 0x0e, 0xc8, 0x7e, 0x8b, 0x0e, 0x6d, 0xae, + 0x39, 0x18, 0x3d, 0x0c, 0x5a, 0x9c, 0xc6, 0xea, 0x04, 0xd4, 0x7f, 0xe5, 0xa6, 0xbb, 0x34, 0xb0, + 0xe9, 0x2e, 0x77, 0x35, 0x1d, 0xbe, 0x09, 0x93, 0x31, 0xe5, 0x69, 0xcc, 0x1a, 0xc7, 0xa4, 0x95, + 0xd2, 0x64, 0xfe, 0xca, 0x02, 0x5a, 0x1a, 0xf3, 0x26, 0xa4, 0x71, 0x4f, 0xd8, 0xec, 0x2f, 0x10, + 0xcc, 0x76, 0x91, 0xaa, 0xde, 0x7c, 0x03, 0x6a, 0xc7, 0xda, 0xa8, 0xba, 0xf3, 0x96, 0x49, 0xf1, + 0x74, 0x24, 0xaf, 0xe3, 0x6e, 0xdc, 0x9a, 0x14, 0x66, 0x1e, 0x13, 0xde, 0x3c, 0xca, 0x63, 0x0c, + 0x38, 0xd9, 0x75, 0x00, 0x46, 0x4f, 0x68, 0xdc, 0xe0, 0x47, 0x44, 0xee, 0x7e, 0x7c, 0xc5, 0xd2, + 0x80, 0xfa, 0xce, 0x3b, 0xbb, 0xfa, 0xce, 0x7b, 0x35, 0xb1, 0x7a, 0xf7, 0x88, 0x30, 0x7b, 0x09, + 0xf0, 0x36, 0xe5, 0x06, 0x49, 0xec, 0x6f, 0x10, 0xcc, 0xca, 0x3b, 0xd0, 0xbd, 0xba, 0xdf, 0x49, + 0xbe, 0x0e, 0x63, 0x7a, 0xdf, 0xaa, 0xe5, 0xaa, 0x55, 0x2d, 0xf7, 0x1e, 0x76, 0x09, 0x52, 0x98, + 0x95, 0x97, 0xc0, 0xa4, 0x58, 0x17, 0x46, 0x65, 0xef, 0xc0, 0xac, 0xbc, 0x05, 0x26, 0x69, 0xaf, + 0x43, 0x2d, 0xa6, 0xcd, 0x34, 0x4e, 0x82, 0x63, 0x99, 0x77, 0xcc, 0xeb, 0x18, 0xf4, 0xfb, 0xfb, + 0x98, 0x04, 0x9c, 0xc6, 0xff, 0xeb, 0xfb, 0xfb, 0x99, 0x7a, 0x7f, 0xf3, 0x54, 0xaa, 0xc7, 0x1f, + 0xc0, 0xd5, 0x13, 0x69, 0x52, 0x1d, 0x5e, 0x37, 0xa9, 0x8a, 0x8c, 0xe2, 0x69, 0xd7, 0x8a, 0x0f, + 0xaf, 0xf2, 0x1e, 0xd0, 0x74, 0x5f, 0xe5, 0x0f, 0x6f, 0x79, 0x6d, 0xbf, 0xca, 0x6c, 0xc2, 0xa8, + 0x44, 0x51, 0x47, 0x5b, 0x65, 0x13, 0xca, 0x73, 0x58, 0xb3, 0xe5, 0x6f, 0xdf, 0x50, 0xfa, 0x95, + 0xbf, 0x67, 0x60, 0xa6, 0xf4, 0x80, 0xbe, 0x4d, 0x18, 0xf1, 0x69, 0x8c, 0x7f, 0x41, 0x30, 0x5e, + 0x10, 0x41, 0xbc, 0x6a, 0x82, 0x79, 0x56, 0xa0, 0xad, 0x7b, 0x95, 0xfd, 0xe4, 0x69, 0xdb, 0xb7, + 0x3e, 0xfd, 0xeb, 0x9f, 0xaf, 0x47, 0x16, 0xf1, 0x8b, 0xf9, 0xd0, 0xf1, 0x89, 0xac, 0xe0, 0xfd, + 0x28, 0x0e, 0xdf, 0xa7, 0x4d, 0x9e, 0xb8, 0xf5, 0x53, 0x57, 0xcb, 0xe9, 0xf7, 0x08, 0x6a, 0xb9, + 0x4e, 0xe2, 0xbb, 0x26, 0x49, 0xbb, 0x65, 0xd5, 0xaa, 0xae, 0x36, 0xbd, 0x20, 0xb3, 0xb2, 0x16, + 0x10, 0x35, 0xa1, 0x5b, 0x3f, 0xc5, 0xbf, 0x21, 0x98, 0x28, 0x6a, 0x34, 0x36, 0x2a, 0x4e, 0x0f, + 0x55, 0x3f, 0x0f, 0xea, 0x5d, 0x81, 0xea, 0xd8, 0x46, 0xf5, 0xdc, 0xd0, 0xda, 0x9e, 0x21, 0x17, + 0xd5, 0xdb, 0x0c, 0xb9, 0x87, 0xde, 0xff, 0x07, 0x64, 0xcb, 0xa8, 0xba, 0x39, 0xf2, 0x97, 0x08, + 0x26, 0x8a, 0xd2, 0x6f, 0x86, 0xdc, 0x63, 0x58, 0xb0, 0xe6, 0xce, 0x08, 0xd4, 0x6b, 0xd9, 0xc4, + 0xaa, 0x4f, 0xbd, 0x6e, 0x76, 0xea, 0xcf, 0x10, 0x4c, 0x96, 0x44, 0x1b, 0xaf, 0x99, 0xde, 0x89, + 0xee, 0x89, 0xc4, 0x5a, 0x3f, 0x87, 0xa7, 0xba, 0x4f, 0x6b, 0x02, 0x7a, 0x05, 0xdf, 0x1e, 0x70, + 0xfe, 0x05, 0x6c, 0xb7, 0x33, 0x0f, 0xfc, 0x8a, 0x60, 0xbc, 0xa0, 0xc0, 0x66, 0x4f, 0xc1, 0x59, + 0xc9, 0xb6, 0x2a, 0x89, 0x98, 0xbd, 0x2e, 0x78, 0xef, 0xe0, 0x65, 0x83, 0x22, 0x77, 0x60, 0xdd, + 0x7a, 0xfd, 0x14, 0xff, 0x81, 0x60, 0xb2, 0x34, 0x99, 0x98, 0x55, 0xbc, 0xd7, 0x30, 0x53, 0x11, + 0x7a, 0x53, 0x40, 0xbf, 0x62, 0xdf, 0xab, 0x0c, 0xbd, 0x71, 0x92, 0x65, 0xdf, 0x40, 0x75, 0xfc, + 0x27, 0x82, 0xa9, 0xf2, 0x14, 0x83, 0xd7, 0xcd, 0xdf, 0x89, 0x8b, 0xe1, 0xaf, 0xdc, 0x24, 0x1b, + 0x9d, 0x49, 0xe8, 0x19, 0x82, 0xa9, 0xf2, 0xac, 0x63, 0xc6, 0xdf, 0x73, 0x3e, 0xaa, 0xc8, 0xbf, + 0x25, 0xf8, 0xef, 0x5b, 0xd5, 0x9b, 0xa6, 0xb0, 0x81, 0x6f, 0x11, 0x4c, 0x95, 0xa7, 0x26, 0xb3, + 0x0d, 0xf4, 0x9c, 0xb4, 0xfa, 0x3e, 0x22, 0xaa, 0xbf, 0xeb, 0xe7, 0xe8, 0xef, 0xdf, 0x95, 0x36, + 0xab, 0x01, 0xc9, 0x5c, 0x9b, 0xcb, 0xc3, 0x9b, 0xb9, 0x36, 0x77, 0x4d, 0x62, 0xf6, 0xaa, 0x60, + 0xbf, 0x8d, 0x1d, 0xc3, 0x36, 0xd1, 0xb3, 0xd7, 0x0f, 0x52, 0xa5, 0x65, 0x38, 0x63, 0x95, 0x2e, + 0x4d, 0x31, 0x56, 0x85, 0x79, 0xa9, 0x17, 0x67, 0xff, 0x1a, 0x2b, 0xc8, 0xec, 0xc9, 0xfe, 0x31, + 0x17, 0x6a, 0x85, 0x5a, 0x41, 0xa8, 0xcb, 0xb4, 0x37, 0xb4, 0x63, 0xe1, 0x97, 0x11, 0xe7, 0xa1, + 0xfe, 0x65, 0xc4, 0x7e, 0x55, 0x00, 0xae, 0xd9, 0x15, 0x0b, 0xb9, 0xa1, 0x07, 0xc1, 0xa7, 0xb9, + 0xd6, 0x55, 0x01, 0xed, 0x31, 0x1c, 0xf6, 0x6d, 0x53, 0x55, 0xc2, 0x7a, 0xc5, 0x12, 0x6e, 0x7e, + 0x87, 0x60, 0xb1, 0x19, 0xb6, 0x0d, 0x70, 0x1e, 0xa1, 0xf7, 0x1e, 0xaa, 0x55, 0x7e, 0xd8, 0x22, + 0xcc, 0x77, 0xc2, 0xd8, 0x77, 0x7d, 0xca, 0x04, 0x89, 0x2b, 0x3f, 0x91, 0x28, 0x48, 0x06, 0xfd, + 0x22, 0xf5, 0x72, 0xc9, 0xfa, 0xf3, 0x88, 0xbd, 0x2d, 0x23, 0x6e, 0x89, 0xbc, 0xa5, 0xb1, 0xc2, + 0xd9, 0x5b, 0xde, 0xcc, 0x5c, 0xf6, 0x47, 0x45, 0x82, 0x3b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, + 0xdb, 0xa7, 0xdc, 0xe8, 0x6b, 0x13, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1beta1/cloud_speech.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1beta1/cloud_speech.pb.go new file mode 100644 index 0000000..cd932d9 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1beta1/cloud_speech.pb.go @@ -0,0 +1,1178 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/speech/v1beta1/cloud_speech.proto +// DO NOT EDIT! + +/* +Package speech is a generated protocol buffer package. + +It is generated from these files: + google/cloud/speech/v1beta1/cloud_speech.proto + +It has these top-level messages: + SyncRecognizeRequest + AsyncRecognizeRequest + StreamingRecognizeRequest + StreamingRecognitionConfig + RecognitionConfig + SpeechContext + RecognitionAudio + SyncRecognizeResponse + AsyncRecognizeResponse + AsyncRecognizeMetadata + StreamingRecognizeResponse + StreamingRecognitionResult + SpeechRecognitionResult + SpeechRecognitionAlternative +*/ +package speech + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Audio encoding of the data sent in the audio message. All encodings support +// only 1 channel (mono) audio. Only `FLAC` includes a header that describes +// the bytes of audio that follow the header. The other encodings are raw +// audio bytes with no header. +// +// For best results, the audio source should be captured and transmitted using +// a lossless encoding (`FLAC` or `LINEAR16`). Recognition accuracy may be +// reduced if lossy codecs (such as AMR, AMR_WB and MULAW) are used to capture +// or transmit the audio, particularly if background noise is present. +type RecognitionConfig_AudioEncoding int32 + +const ( + // Not specified. Will return result [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]. + RecognitionConfig_ENCODING_UNSPECIFIED RecognitionConfig_AudioEncoding = 0 + // Uncompressed 16-bit signed little-endian samples (Linear PCM). + // This is the only encoding that may be used by `AsyncRecognize`. + RecognitionConfig_LINEAR16 RecognitionConfig_AudioEncoding = 1 + // This is the recommended encoding for `SyncRecognize` and + // `StreamingRecognize` because it uses lossless compression; therefore + // recognition accuracy is not compromised by a lossy codec. + // + // The stream FLAC (Free Lossless Audio Codec) encoding is specified at: + // http://flac.sourceforge.net/documentation.html. + // 16-bit and 24-bit samples are supported. + // Not all fields in STREAMINFO are supported. + RecognitionConfig_FLAC RecognitionConfig_AudioEncoding = 2 + // 8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law. + RecognitionConfig_MULAW RecognitionConfig_AudioEncoding = 3 + // Adaptive Multi-Rate Narrowband codec. `sample_rate` must be 8000 Hz. + RecognitionConfig_AMR RecognitionConfig_AudioEncoding = 4 + // Adaptive Multi-Rate Wideband codec. `sample_rate` must be 16000 Hz. + RecognitionConfig_AMR_WB RecognitionConfig_AudioEncoding = 5 +) + +var RecognitionConfig_AudioEncoding_name = map[int32]string{ + 0: "ENCODING_UNSPECIFIED", + 1: "LINEAR16", + 2: "FLAC", + 3: "MULAW", + 4: "AMR", + 5: "AMR_WB", +} +var RecognitionConfig_AudioEncoding_value = map[string]int32{ + "ENCODING_UNSPECIFIED": 0, + "LINEAR16": 1, + "FLAC": 2, + "MULAW": 3, + "AMR": 4, + "AMR_WB": 5, +} + +func (x RecognitionConfig_AudioEncoding) String() string { + return proto.EnumName(RecognitionConfig_AudioEncoding_name, int32(x)) +} +func (RecognitionConfig_AudioEncoding) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{4, 0} +} + +// Indicates the type of endpointer event. +type StreamingRecognizeResponse_EndpointerType int32 + +const ( + // No endpointer event specified. + StreamingRecognizeResponse_ENDPOINTER_EVENT_UNSPECIFIED StreamingRecognizeResponse_EndpointerType = 0 + // Speech has been detected in the audio stream. + StreamingRecognizeResponse_START_OF_SPEECH StreamingRecognizeResponse_EndpointerType = 1 + // Speech has ceased to be detected in the audio stream. + StreamingRecognizeResponse_END_OF_SPEECH StreamingRecognizeResponse_EndpointerType = 2 + // The end of the audio stream has been reached. and it is being processed. + StreamingRecognizeResponse_END_OF_AUDIO StreamingRecognizeResponse_EndpointerType = 3 + // This event is only sent when `single_utterance` is `true`. It indicates + // that the server has detected the end of the user's speech utterance and + // expects no additional speech. Therefore, the server will not process + // additional audio. The client should stop sending additional audio data. + StreamingRecognizeResponse_END_OF_UTTERANCE StreamingRecognizeResponse_EndpointerType = 4 +) + +var StreamingRecognizeResponse_EndpointerType_name = map[int32]string{ + 0: "ENDPOINTER_EVENT_UNSPECIFIED", + 1: "START_OF_SPEECH", + 2: "END_OF_SPEECH", + 3: "END_OF_AUDIO", + 4: "END_OF_UTTERANCE", +} +var StreamingRecognizeResponse_EndpointerType_value = map[string]int32{ + "ENDPOINTER_EVENT_UNSPECIFIED": 0, + "START_OF_SPEECH": 1, + "END_OF_SPEECH": 2, + "END_OF_AUDIO": 3, + "END_OF_UTTERANCE": 4, +} + +func (x StreamingRecognizeResponse_EndpointerType) String() string { + return proto.EnumName(StreamingRecognizeResponse_EndpointerType_name, int32(x)) +} +func (StreamingRecognizeResponse_EndpointerType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{10, 0} +} + +// `SyncRecognizeRequest` is the top-level message sent by the client for +// the `SyncRecognize` method. +type SyncRecognizeRequest struct { + // [Required] The `config` message provides information to the recognizer + // that specifies how to process the request. + Config *RecognitionConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + // [Required] The audio data to be recognized. + Audio *RecognitionAudio `protobuf:"bytes,2,opt,name=audio" json:"audio,omitempty"` +} + +func (m *SyncRecognizeRequest) Reset() { *m = SyncRecognizeRequest{} } +func (m *SyncRecognizeRequest) String() string { return proto.CompactTextString(m) } +func (*SyncRecognizeRequest) ProtoMessage() {} +func (*SyncRecognizeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *SyncRecognizeRequest) GetConfig() *RecognitionConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *SyncRecognizeRequest) GetAudio() *RecognitionAudio { + if m != nil { + return m.Audio + } + return nil +} + +// `AsyncRecognizeRequest` is the top-level message sent by the client for +// the `AsyncRecognize` method. +type AsyncRecognizeRequest struct { + // [Required] The `config` message provides information to the recognizer + // that specifies how to process the request. + Config *RecognitionConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + // [Required] The audio data to be recognized. + Audio *RecognitionAudio `protobuf:"bytes,2,opt,name=audio" json:"audio,omitempty"` +} + +func (m *AsyncRecognizeRequest) Reset() { *m = AsyncRecognizeRequest{} } +func (m *AsyncRecognizeRequest) String() string { return proto.CompactTextString(m) } +func (*AsyncRecognizeRequest) ProtoMessage() {} +func (*AsyncRecognizeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *AsyncRecognizeRequest) GetConfig() *RecognitionConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *AsyncRecognizeRequest) GetAudio() *RecognitionAudio { + if m != nil { + return m.Audio + } + return nil +} + +// `StreamingRecognizeRequest` is the top-level message sent by the client for +// the `StreamingRecognize`. Multiple `StreamingRecognizeRequest` messages are +// sent. The first message must contain a `streaming_config` message and must +// not contain `audio` data. All subsequent messages must contain `audio` data +// and must not contain a `streaming_config` message. +type StreamingRecognizeRequest struct { + // Types that are valid to be assigned to StreamingRequest: + // *StreamingRecognizeRequest_StreamingConfig + // *StreamingRecognizeRequest_AudioContent + StreamingRequest isStreamingRecognizeRequest_StreamingRequest `protobuf_oneof:"streaming_request"` +} + +func (m *StreamingRecognizeRequest) Reset() { *m = StreamingRecognizeRequest{} } +func (m *StreamingRecognizeRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognizeRequest) ProtoMessage() {} +func (*StreamingRecognizeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isStreamingRecognizeRequest_StreamingRequest interface { + isStreamingRecognizeRequest_StreamingRequest() +} + +type StreamingRecognizeRequest_StreamingConfig struct { + StreamingConfig *StreamingRecognitionConfig `protobuf:"bytes,1,opt,name=streaming_config,json=streamingConfig,oneof"` +} +type StreamingRecognizeRequest_AudioContent struct { + AudioContent []byte `protobuf:"bytes,2,opt,name=audio_content,json=audioContent,proto3,oneof"` +} + +func (*StreamingRecognizeRequest_StreamingConfig) isStreamingRecognizeRequest_StreamingRequest() {} +func (*StreamingRecognizeRequest_AudioContent) isStreamingRecognizeRequest_StreamingRequest() {} + +func (m *StreamingRecognizeRequest) GetStreamingRequest() isStreamingRecognizeRequest_StreamingRequest { + if m != nil { + return m.StreamingRequest + } + return nil +} + +func (m *StreamingRecognizeRequest) GetStreamingConfig() *StreamingRecognitionConfig { + if x, ok := m.GetStreamingRequest().(*StreamingRecognizeRequest_StreamingConfig); ok { + return x.StreamingConfig + } + return nil +} + +func (m *StreamingRecognizeRequest) GetAudioContent() []byte { + if x, ok := m.GetStreamingRequest().(*StreamingRecognizeRequest_AudioContent); ok { + return x.AudioContent + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*StreamingRecognizeRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _StreamingRecognizeRequest_OneofMarshaler, _StreamingRecognizeRequest_OneofUnmarshaler, _StreamingRecognizeRequest_OneofSizer, []interface{}{ + (*StreamingRecognizeRequest_StreamingConfig)(nil), + (*StreamingRecognizeRequest_AudioContent)(nil), + } +} + +func _StreamingRecognizeRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*StreamingRecognizeRequest) + // streaming_request + switch x := m.StreamingRequest.(type) { + case *StreamingRecognizeRequest_StreamingConfig: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StreamingConfig); err != nil { + return err + } + case *StreamingRecognizeRequest_AudioContent: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.AudioContent) + case nil: + default: + return fmt.Errorf("StreamingRecognizeRequest.StreamingRequest has unexpected type %T", x) + } + return nil +} + +func _StreamingRecognizeRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*StreamingRecognizeRequest) + switch tag { + case 1: // streaming_request.streaming_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StreamingRecognitionConfig) + err := b.DecodeMessage(msg) + m.StreamingRequest = &StreamingRecognizeRequest_StreamingConfig{msg} + return true, err + case 2: // streaming_request.audio_content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StreamingRequest = &StreamingRecognizeRequest_AudioContent{x} + return true, err + default: + return false, nil + } +} + +func _StreamingRecognizeRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*StreamingRecognizeRequest) + // streaming_request + switch x := m.StreamingRequest.(type) { + case *StreamingRecognizeRequest_StreamingConfig: + s := proto.Size(x.StreamingConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StreamingRecognizeRequest_AudioContent: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AudioContent))) + n += len(x.AudioContent) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The `StreamingRecognitionConfig` message provides information to the +// recognizer that specifies how to process the request. +type StreamingRecognitionConfig struct { + // [Required] The `config` message provides information to the recognizer + // that specifies how to process the request. + Config *RecognitionConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + // [Optional] If `false` or omitted, the recognizer will perform continuous + // recognition (continuing to process audio even if the user pauses speaking) + // until the client closes the output stream (gRPC API) or when the maximum + // time limit has been reached. Multiple `StreamingRecognitionResult`s with + // the `is_final` flag set to `true` may be returned. + // + // If `true`, the recognizer will detect a single spoken utterance. When it + // detects that the user has paused or stopped speaking, it will return an + // `END_OF_UTTERANCE` event and cease recognition. It will return no more than + // one `StreamingRecognitionResult` with the `is_final` flag set to `true`. + SingleUtterance bool `protobuf:"varint,2,opt,name=single_utterance,json=singleUtterance" json:"single_utterance,omitempty"` + // [Optional] If `true`, interim results (tentative hypotheses) may be + // returned as they become available (these interim results are indicated with + // the `is_final=false` flag). + // If `false` or omitted, only `is_final=true` result(s) are returned. + InterimResults bool `protobuf:"varint,3,opt,name=interim_results,json=interimResults" json:"interim_results,omitempty"` +} + +func (m *StreamingRecognitionConfig) Reset() { *m = StreamingRecognitionConfig{} } +func (m *StreamingRecognitionConfig) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognitionConfig) ProtoMessage() {} +func (*StreamingRecognitionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *StreamingRecognitionConfig) GetConfig() *RecognitionConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *StreamingRecognitionConfig) GetSingleUtterance() bool { + if m != nil { + return m.SingleUtterance + } + return false +} + +func (m *StreamingRecognitionConfig) GetInterimResults() bool { + if m != nil { + return m.InterimResults + } + return false +} + +// The `RecognitionConfig` message provides information to the recognizer +// that specifies how to process the request. +type RecognitionConfig struct { + // [Required] Encoding of audio data sent in all `RecognitionAudio` messages. + Encoding RecognitionConfig_AudioEncoding `protobuf:"varint,1,opt,name=encoding,enum=google.cloud.speech.v1beta1.RecognitionConfig_AudioEncoding" json:"encoding,omitempty"` + // [Required] Sample rate in Hertz of the audio data sent in all + // `RecognitionAudio` messages. Valid values are: 8000-48000. + // 16000 is optimal. For best results, set the sampling rate of the audio + // source to 16000 Hz. If that's not possible, use the native sample rate of + // the audio source (instead of re-sampling). + SampleRate int32 `protobuf:"varint,2,opt,name=sample_rate,json=sampleRate" json:"sample_rate,omitempty"` + // [Optional] The language of the supplied audio as a BCP-47 language tag. + // Example: "en-GB" https://www.rfc-editor.org/rfc/bcp/bcp47.txt + // If omitted, defaults to "en-US". See + // [Language Support](https://cloud.google.com/speech/docs/best-practices#language_support) + // for a list of the currently supported language codes. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // [Optional] Maximum number of recognition hypotheses to be returned. + // Specifically, the maximum number of `SpeechRecognitionAlternative` messages + // within each `SpeechRecognitionResult`. + // The server may return fewer than `max_alternatives`. + // Valid values are `0`-`30`. A value of `0` or `1` will return a maximum of + // `1`. If omitted, defaults to `1`. + MaxAlternatives int32 `protobuf:"varint,4,opt,name=max_alternatives,json=maxAlternatives" json:"max_alternatives,omitempty"` + // [Optional] If set to `true`, the server will attempt to filter out + // profanities, replacing all but the initial character in each filtered word + // with asterisks, e.g. "f***". If set to `false` or omitted, profanities + // won't be filtered out. + ProfanityFilter bool `protobuf:"varint,5,opt,name=profanity_filter,json=profanityFilter" json:"profanity_filter,omitempty"` + // [Optional] A means to provide context to assist the speech recognition. + SpeechContext *SpeechContext `protobuf:"bytes,6,opt,name=speech_context,json=speechContext" json:"speech_context,omitempty"` +} + +func (m *RecognitionConfig) Reset() { *m = RecognitionConfig{} } +func (m *RecognitionConfig) String() string { return proto.CompactTextString(m) } +func (*RecognitionConfig) ProtoMessage() {} +func (*RecognitionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *RecognitionConfig) GetEncoding() RecognitionConfig_AudioEncoding { + if m != nil { + return m.Encoding + } + return RecognitionConfig_ENCODING_UNSPECIFIED +} + +func (m *RecognitionConfig) GetSampleRate() int32 { + if m != nil { + return m.SampleRate + } + return 0 +} + +func (m *RecognitionConfig) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *RecognitionConfig) GetMaxAlternatives() int32 { + if m != nil { + return m.MaxAlternatives + } + return 0 +} + +func (m *RecognitionConfig) GetProfanityFilter() bool { + if m != nil { + return m.ProfanityFilter + } + return false +} + +func (m *RecognitionConfig) GetSpeechContext() *SpeechContext { + if m != nil { + return m.SpeechContext + } + return nil +} + +// Provides "hints" to the speech recognizer to favor specific words and phrases +// in the results. +type SpeechContext struct { + // [Optional] A list of strings containing words and phrases "hints" so that + // the speech recognition is more likely to recognize them. This can be used + // to improve the accuracy for specific words and phrases, for example, if + // specific commands are typically spoken by the user. This can also be used + // to add additional words to the vocabulary of the recognizer. See + // [usage limits](https://cloud.google.com/speech/limits#content). + Phrases []string `protobuf:"bytes,1,rep,name=phrases" json:"phrases,omitempty"` +} + +func (m *SpeechContext) Reset() { *m = SpeechContext{} } +func (m *SpeechContext) String() string { return proto.CompactTextString(m) } +func (*SpeechContext) ProtoMessage() {} +func (*SpeechContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *SpeechContext) GetPhrases() []string { + if m != nil { + return m.Phrases + } + return nil +} + +// Contains audio data in the encoding specified in the `RecognitionConfig`. +// Either `content` or `uri` must be supplied. Supplying both or neither +// returns [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]. See +// [audio limits](https://cloud.google.com/speech/limits#content). +type RecognitionAudio struct { + // Types that are valid to be assigned to AudioSource: + // *RecognitionAudio_Content + // *RecognitionAudio_Uri + AudioSource isRecognitionAudio_AudioSource `protobuf_oneof:"audio_source"` +} + +func (m *RecognitionAudio) Reset() { *m = RecognitionAudio{} } +func (m *RecognitionAudio) String() string { return proto.CompactTextString(m) } +func (*RecognitionAudio) ProtoMessage() {} +func (*RecognitionAudio) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +type isRecognitionAudio_AudioSource interface { + isRecognitionAudio_AudioSource() +} + +type RecognitionAudio_Content struct { + Content []byte `protobuf:"bytes,1,opt,name=content,proto3,oneof"` +} +type RecognitionAudio_Uri struct { + Uri string `protobuf:"bytes,2,opt,name=uri,oneof"` +} + +func (*RecognitionAudio_Content) isRecognitionAudio_AudioSource() {} +func (*RecognitionAudio_Uri) isRecognitionAudio_AudioSource() {} + +func (m *RecognitionAudio) GetAudioSource() isRecognitionAudio_AudioSource { + if m != nil { + return m.AudioSource + } + return nil +} + +func (m *RecognitionAudio) GetContent() []byte { + if x, ok := m.GetAudioSource().(*RecognitionAudio_Content); ok { + return x.Content + } + return nil +} + +func (m *RecognitionAudio) GetUri() string { + if x, ok := m.GetAudioSource().(*RecognitionAudio_Uri); ok { + return x.Uri + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RecognitionAudio) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RecognitionAudio_OneofMarshaler, _RecognitionAudio_OneofUnmarshaler, _RecognitionAudio_OneofSizer, []interface{}{ + (*RecognitionAudio_Content)(nil), + (*RecognitionAudio_Uri)(nil), + } +} + +func _RecognitionAudio_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RecognitionAudio) + // audio_source + switch x := m.AudioSource.(type) { + case *RecognitionAudio_Content: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Content) + case *RecognitionAudio_Uri: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Uri) + case nil: + default: + return fmt.Errorf("RecognitionAudio.AudioSource has unexpected type %T", x) + } + return nil +} + +func _RecognitionAudio_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RecognitionAudio) + switch tag { + case 1: // audio_source.content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.AudioSource = &RecognitionAudio_Content{x} + return true, err + case 2: // audio_source.uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.AudioSource = &RecognitionAudio_Uri{x} + return true, err + default: + return false, nil + } +} + +func _RecognitionAudio_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RecognitionAudio) + // audio_source + switch x := m.AudioSource.(type) { + case *RecognitionAudio_Content: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Content))) + n += len(x.Content) + case *RecognitionAudio_Uri: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Uri))) + n += len(x.Uri) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// `SyncRecognizeResponse` is the only message returned to the client by +// `SyncRecognize`. It contains the result as zero or more sequential +// `SpeechRecognitionResult` messages. +type SyncRecognizeResponse struct { + // [Output-only] Sequential list of transcription results corresponding to + // sequential portions of audio. + Results []*SpeechRecognitionResult `protobuf:"bytes,2,rep,name=results" json:"results,omitempty"` +} + +func (m *SyncRecognizeResponse) Reset() { *m = SyncRecognizeResponse{} } +func (m *SyncRecognizeResponse) String() string { return proto.CompactTextString(m) } +func (*SyncRecognizeResponse) ProtoMessage() {} +func (*SyncRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *SyncRecognizeResponse) GetResults() []*SpeechRecognitionResult { + if m != nil { + return m.Results + } + return nil +} + +// `AsyncRecognizeResponse` is the only message returned to the client by +// `AsyncRecognize`. It contains the result as zero or more sequential +// `SpeechRecognitionResult` messages. It is included in the `result.response` +// field of the `Operation` returned by the `GetOperation` call of the +// `google::longrunning::Operations` service. +type AsyncRecognizeResponse struct { + // [Output-only] Sequential list of transcription results corresponding to + // sequential portions of audio. + Results []*SpeechRecognitionResult `protobuf:"bytes,2,rep,name=results" json:"results,omitempty"` +} + +func (m *AsyncRecognizeResponse) Reset() { *m = AsyncRecognizeResponse{} } +func (m *AsyncRecognizeResponse) String() string { return proto.CompactTextString(m) } +func (*AsyncRecognizeResponse) ProtoMessage() {} +func (*AsyncRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *AsyncRecognizeResponse) GetResults() []*SpeechRecognitionResult { + if m != nil { + return m.Results + } + return nil +} + +// `AsyncRecognizeMetadata` describes the progress of a long-running +// `AsyncRecognize` call. It is included in the `metadata` field of the +// `Operation` returned by the `GetOperation` call of the +// `google::longrunning::Operations` service. +type AsyncRecognizeMetadata struct { + // Approximate percentage of audio processed thus far. Guaranteed to be 100 + // when the audio is fully processed and the results are available. + ProgressPercent int32 `protobuf:"varint,1,opt,name=progress_percent,json=progressPercent" json:"progress_percent,omitempty"` + // Time when the request was received. + StartTime *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time of the most recent processing update. + LastUpdateTime *google_protobuf3.Timestamp `protobuf:"bytes,3,opt,name=last_update_time,json=lastUpdateTime" json:"last_update_time,omitempty"` +} + +func (m *AsyncRecognizeMetadata) Reset() { *m = AsyncRecognizeMetadata{} } +func (m *AsyncRecognizeMetadata) String() string { return proto.CompactTextString(m) } +func (*AsyncRecognizeMetadata) ProtoMessage() {} +func (*AsyncRecognizeMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *AsyncRecognizeMetadata) GetProgressPercent() int32 { + if m != nil { + return m.ProgressPercent + } + return 0 +} + +func (m *AsyncRecognizeMetadata) GetStartTime() *google_protobuf3.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *AsyncRecognizeMetadata) GetLastUpdateTime() *google_protobuf3.Timestamp { + if m != nil { + return m.LastUpdateTime + } + return nil +} + +// `StreamingRecognizeResponse` is the only message returned to the client by +// `StreamingRecognize`. A series of one or more `StreamingRecognizeResponse` +// messages are streamed back to the client. +// +// Here's an example of a series of ten `StreamingRecognizeResponse`s that might +// be returned while processing audio: +// +// 1. endpointer_type: START_OF_SPEECH +// +// 2. results { alternatives { transcript: "tube" } stability: 0.01 } +// result_index: 0 +// +// 3. results { alternatives { transcript: "to be a" } stability: 0.01 } +// result_index: 0 +// +// 4. results { alternatives { transcript: "to be" } stability: 0.9 } +// results { alternatives { transcript: " or not to be" } stability: 0.01 } +// result_index: 0 +// +// 5. results { alternatives { transcript: "to be or not to be" +// confidence: 0.92 } +// alternatives { transcript: "to bee or not to bee" } +// is_final: true } +// result_index: 0 +// +// 6. results { alternatives { transcript: " that's" } stability: 0.01 } +// result_index: 1 +// +// 7. results { alternatives { transcript: " that is" } stability: 0.9 } +// results { alternatives { transcript: " the question" } stability: 0.01 } +// result_index: 1 +// +// 8. endpointer_type: END_OF_SPEECH +// +// 9. results { alternatives { transcript: " that is the question" +// confidence: 0.98 } +// alternatives { transcript: " that was the question" } +// is_final: true } +// result_index: 1 +// +// 10. endpointer_type: END_OF_AUDIO +// +// Notes: +// +// - Only two of the above responses #5 and #9 contain final results, they are +// indicated by `is_final: true`. Concatenating these together generates the +// full transcript: "to be or not to be that is the question". +// +// - The others contain interim `results`. #4 and #7 contain two interim +// `results`, the first portion has a high stability and is less likely to +// change, the second portion has a low stability and is very likely to +// change. A UI designer might choose to show only high stability `results`. +// +// - The `result_index` indicates the portion of audio that has had final +// results returned, and is no longer being processed. For example, the +// `results` in #6 and later correspond to the portion of audio after +// "to be or not to be". +type StreamingRecognizeResponse struct { + // [Output-only] If set, returns a [google.rpc.Status][] message that + // specifies the error for the operation. + Error *google_rpc.Status `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` + // [Output-only] This repeated list contains zero or more results that + // correspond to consecutive portions of the audio currently being processed. + // It contains zero or one `is_final=true` result (the newly settled portion), + // followed by zero or more `is_final=false` results. + Results []*StreamingRecognitionResult `protobuf:"bytes,2,rep,name=results" json:"results,omitempty"` + // [Output-only] Indicates the lowest index in the `results` array that has + // changed. The repeated `StreamingRecognitionResult` results overwrite past + // results at this index and higher. + ResultIndex int32 `protobuf:"varint,3,opt,name=result_index,json=resultIndex" json:"result_index,omitempty"` + // [Output-only] Indicates the type of endpointer event. + EndpointerType StreamingRecognizeResponse_EndpointerType `protobuf:"varint,4,opt,name=endpointer_type,json=endpointerType,enum=google.cloud.speech.v1beta1.StreamingRecognizeResponse_EndpointerType" json:"endpointer_type,omitempty"` +} + +func (m *StreamingRecognizeResponse) Reset() { *m = StreamingRecognizeResponse{} } +func (m *StreamingRecognizeResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognizeResponse) ProtoMessage() {} +func (*StreamingRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *StreamingRecognizeResponse) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +func (m *StreamingRecognizeResponse) GetResults() []*StreamingRecognitionResult { + if m != nil { + return m.Results + } + return nil +} + +func (m *StreamingRecognizeResponse) GetResultIndex() int32 { + if m != nil { + return m.ResultIndex + } + return 0 +} + +func (m *StreamingRecognizeResponse) GetEndpointerType() StreamingRecognizeResponse_EndpointerType { + if m != nil { + return m.EndpointerType + } + return StreamingRecognizeResponse_ENDPOINTER_EVENT_UNSPECIFIED +} + +// A streaming speech recognition result corresponding to a portion of the audio +// that is currently being processed. +type StreamingRecognitionResult struct { + // [Output-only] May contain one or more recognition hypotheses (up to the + // maximum specified in `max_alternatives`). + Alternatives []*SpeechRecognitionAlternative `protobuf:"bytes,1,rep,name=alternatives" json:"alternatives,omitempty"` + // [Output-only] If `false`, this `StreamingRecognitionResult` represents an + // interim result that may change. If `true`, this is the final time the + // speech service will return this particular `StreamingRecognitionResult`, + // the recognizer will not return any further hypotheses for this portion of + // the transcript and corresponding audio. + IsFinal bool `protobuf:"varint,2,opt,name=is_final,json=isFinal" json:"is_final,omitempty"` + // [Output-only] An estimate of the probability that the recognizer will not + // change its guess about this interim result. Values range from 0.0 + // (completely unstable) to 1.0 (completely stable). Note that this is not the + // same as `confidence`, which estimates the probability that a recognition + // result is correct. + // This field is only provided for interim results (`is_final=false`). + // The default of 0.0 is a sentinel value indicating stability was not set. + Stability float32 `protobuf:"fixed32,3,opt,name=stability" json:"stability,omitempty"` +} + +func (m *StreamingRecognitionResult) Reset() { *m = StreamingRecognitionResult{} } +func (m *StreamingRecognitionResult) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognitionResult) ProtoMessage() {} +func (*StreamingRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *StreamingRecognitionResult) GetAlternatives() []*SpeechRecognitionAlternative { + if m != nil { + return m.Alternatives + } + return nil +} + +func (m *StreamingRecognitionResult) GetIsFinal() bool { + if m != nil { + return m.IsFinal + } + return false +} + +func (m *StreamingRecognitionResult) GetStability() float32 { + if m != nil { + return m.Stability + } + return 0 +} + +// A speech recognition result corresponding to a portion of the audio. +type SpeechRecognitionResult struct { + // [Output-only] May contain one or more recognition hypotheses (up to the + // maximum specified in `max_alternatives`). + Alternatives []*SpeechRecognitionAlternative `protobuf:"bytes,1,rep,name=alternatives" json:"alternatives,omitempty"` +} + +func (m *SpeechRecognitionResult) Reset() { *m = SpeechRecognitionResult{} } +func (m *SpeechRecognitionResult) String() string { return proto.CompactTextString(m) } +func (*SpeechRecognitionResult) ProtoMessage() {} +func (*SpeechRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *SpeechRecognitionResult) GetAlternatives() []*SpeechRecognitionAlternative { + if m != nil { + return m.Alternatives + } + return nil +} + +// Alternative hypotheses (a.k.a. n-best list). +type SpeechRecognitionAlternative struct { + // [Output-only] Transcript text representing the words that the user spoke. + Transcript string `protobuf:"bytes,1,opt,name=transcript" json:"transcript,omitempty"` + // [Output-only] The confidence estimate between 0.0 and 1.0. A higher number + // means the system is more confident that the recognition is correct. + // This field is typically provided only for the top hypothesis, and only for + // `is_final=true` results. + // The default of 0.0 is a sentinel value indicating confidence was not set. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *SpeechRecognitionAlternative) Reset() { *m = SpeechRecognitionAlternative{} } +func (m *SpeechRecognitionAlternative) String() string { return proto.CompactTextString(m) } +func (*SpeechRecognitionAlternative) ProtoMessage() {} +func (*SpeechRecognitionAlternative) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *SpeechRecognitionAlternative) GetTranscript() string { + if m != nil { + return m.Transcript + } + return "" +} + +func (m *SpeechRecognitionAlternative) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func init() { + proto.RegisterType((*SyncRecognizeRequest)(nil), "google.cloud.speech.v1beta1.SyncRecognizeRequest") + proto.RegisterType((*AsyncRecognizeRequest)(nil), "google.cloud.speech.v1beta1.AsyncRecognizeRequest") + proto.RegisterType((*StreamingRecognizeRequest)(nil), "google.cloud.speech.v1beta1.StreamingRecognizeRequest") + proto.RegisterType((*StreamingRecognitionConfig)(nil), "google.cloud.speech.v1beta1.StreamingRecognitionConfig") + proto.RegisterType((*RecognitionConfig)(nil), "google.cloud.speech.v1beta1.RecognitionConfig") + proto.RegisterType((*SpeechContext)(nil), "google.cloud.speech.v1beta1.SpeechContext") + proto.RegisterType((*RecognitionAudio)(nil), "google.cloud.speech.v1beta1.RecognitionAudio") + proto.RegisterType((*SyncRecognizeResponse)(nil), "google.cloud.speech.v1beta1.SyncRecognizeResponse") + proto.RegisterType((*AsyncRecognizeResponse)(nil), "google.cloud.speech.v1beta1.AsyncRecognizeResponse") + proto.RegisterType((*AsyncRecognizeMetadata)(nil), "google.cloud.speech.v1beta1.AsyncRecognizeMetadata") + proto.RegisterType((*StreamingRecognizeResponse)(nil), "google.cloud.speech.v1beta1.StreamingRecognizeResponse") + proto.RegisterType((*StreamingRecognitionResult)(nil), "google.cloud.speech.v1beta1.StreamingRecognitionResult") + proto.RegisterType((*SpeechRecognitionResult)(nil), "google.cloud.speech.v1beta1.SpeechRecognitionResult") + proto.RegisterType((*SpeechRecognitionAlternative)(nil), "google.cloud.speech.v1beta1.SpeechRecognitionAlternative") + proto.RegisterEnum("google.cloud.speech.v1beta1.RecognitionConfig_AudioEncoding", RecognitionConfig_AudioEncoding_name, RecognitionConfig_AudioEncoding_value) + proto.RegisterEnum("google.cloud.speech.v1beta1.StreamingRecognizeResponse_EndpointerType", StreamingRecognizeResponse_EndpointerType_name, StreamingRecognizeResponse_EndpointerType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Speech service + +type SpeechClient interface { + // Perform synchronous speech-recognition: receive results after all audio + // has been sent and processed. + SyncRecognize(ctx context.Context, in *SyncRecognizeRequest, opts ...grpc.CallOption) (*SyncRecognizeResponse, error) + // Perform asynchronous speech-recognition: receive results via the + // google.longrunning.Operations interface. Returns either an + // `Operation.error` or an `Operation.response` which contains + // an `AsyncRecognizeResponse` message. + AsyncRecognize(ctx context.Context, in *AsyncRecognizeRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Perform bidirectional streaming speech-recognition: receive results while + // sending audio. This method is only available via the gRPC API (not REST). + StreamingRecognize(ctx context.Context, opts ...grpc.CallOption) (Speech_StreamingRecognizeClient, error) +} + +type speechClient struct { + cc *grpc.ClientConn +} + +func NewSpeechClient(cc *grpc.ClientConn) SpeechClient { + return &speechClient{cc} +} + +func (c *speechClient) SyncRecognize(ctx context.Context, in *SyncRecognizeRequest, opts ...grpc.CallOption) (*SyncRecognizeResponse, error) { + out := new(SyncRecognizeResponse) + err := grpc.Invoke(ctx, "/google.cloud.speech.v1beta1.Speech/SyncRecognize", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *speechClient) AsyncRecognize(ctx context.Context, in *AsyncRecognizeRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.speech.v1beta1.Speech/AsyncRecognize", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *speechClient) StreamingRecognize(ctx context.Context, opts ...grpc.CallOption) (Speech_StreamingRecognizeClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Speech_serviceDesc.Streams[0], c.cc, "/google.cloud.speech.v1beta1.Speech/StreamingRecognize", opts...) + if err != nil { + return nil, err + } + x := &speechStreamingRecognizeClient{stream} + return x, nil +} + +type Speech_StreamingRecognizeClient interface { + Send(*StreamingRecognizeRequest) error + Recv() (*StreamingRecognizeResponse, error) + grpc.ClientStream +} + +type speechStreamingRecognizeClient struct { + grpc.ClientStream +} + +func (x *speechStreamingRecognizeClient) Send(m *StreamingRecognizeRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *speechStreamingRecognizeClient) Recv() (*StreamingRecognizeResponse, error) { + m := new(StreamingRecognizeResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for Speech service + +type SpeechServer interface { + // Perform synchronous speech-recognition: receive results after all audio + // has been sent and processed. + SyncRecognize(context.Context, *SyncRecognizeRequest) (*SyncRecognizeResponse, error) + // Perform asynchronous speech-recognition: receive results via the + // google.longrunning.Operations interface. Returns either an + // `Operation.error` or an `Operation.response` which contains + // an `AsyncRecognizeResponse` message. + AsyncRecognize(context.Context, *AsyncRecognizeRequest) (*google_longrunning.Operation, error) + // Perform bidirectional streaming speech-recognition: receive results while + // sending audio. This method is only available via the gRPC API (not REST). + StreamingRecognize(Speech_StreamingRecognizeServer) error +} + +func RegisterSpeechServer(s *grpc.Server, srv SpeechServer) { + s.RegisterService(&_Speech_serviceDesc, srv) +} + +func _Speech_SyncRecognize_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SyncRecognizeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpeechServer).SyncRecognize(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.speech.v1beta1.Speech/SyncRecognize", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpeechServer).SyncRecognize(ctx, req.(*SyncRecognizeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Speech_AsyncRecognize_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AsyncRecognizeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpeechServer).AsyncRecognize(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.speech.v1beta1.Speech/AsyncRecognize", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpeechServer).AsyncRecognize(ctx, req.(*AsyncRecognizeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Speech_StreamingRecognize_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SpeechServer).StreamingRecognize(&speechStreamingRecognizeServer{stream}) +} + +type Speech_StreamingRecognizeServer interface { + Send(*StreamingRecognizeResponse) error + Recv() (*StreamingRecognizeRequest, error) + grpc.ServerStream +} + +type speechStreamingRecognizeServer struct { + grpc.ServerStream +} + +func (x *speechStreamingRecognizeServer) Send(m *StreamingRecognizeResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *speechStreamingRecognizeServer) Recv() (*StreamingRecognizeRequest, error) { + m := new(StreamingRecognizeRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _Speech_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.speech.v1beta1.Speech", + HandlerType: (*SpeechServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SyncRecognize", + Handler: _Speech_SyncRecognize_Handler, + }, + { + MethodName: "AsyncRecognize", + Handler: _Speech_AsyncRecognize_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingRecognize", + Handler: _Speech_StreamingRecognize_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "google/cloud/speech/v1beta1/cloud_speech.proto", +} + +func init() { proto.RegisterFile("google/cloud/speech/v1beta1/cloud_speech.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1206 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4d, 0x6f, 0x1b, 0xc5, + 0x1b, 0xcf, 0xda, 0x71, 0x5e, 0x9e, 0xd8, 0xce, 0x76, 0xda, 0xfe, 0xeb, 0xfa, 0x9f, 0xb6, 0x61, + 0x2b, 0x44, 0x5a, 0x89, 0x35, 0x09, 0xa8, 0x55, 0x0b, 0x17, 0xc7, 0x59, 0x13, 0x4b, 0x8d, 0x93, + 0x4e, 0x1c, 0x8a, 0x90, 0x60, 0x35, 0x59, 0x4f, 0xb6, 0x2b, 0xd9, 0x33, 0xcb, 0xcc, 0x6c, 0x95, + 0x70, 0xec, 0x8d, 0x0b, 0x17, 0xbe, 0x00, 0x12, 0x7c, 0x02, 0xc4, 0x81, 0x0b, 0xe2, 0xc2, 0x81, + 0x3b, 0x5f, 0x81, 0x0f, 0x82, 0x76, 0x66, 0x37, 0xb1, 0x9d, 0xc6, 0x34, 0x88, 0x4a, 0xdc, 0xfc, + 0xfc, 0xe6, 0x79, 0xf9, 0xed, 0x33, 0xcf, 0xcb, 0x18, 0xdc, 0x90, 0xf3, 0x70, 0x40, 0x1b, 0xc1, + 0x80, 0x27, 0xfd, 0x86, 0x8c, 0x29, 0x0d, 0x9e, 0x37, 0x5e, 0xac, 0x1f, 0x52, 0x45, 0xd6, 0x0d, + 0xe8, 0x1b, 0xd0, 0x8d, 0x05, 0x57, 0x1c, 0xfd, 0xdf, 0xe8, 0xbb, 0xfa, 0xc8, 0xcd, 0x8e, 0x32, + 0xfd, 0xfa, 0x4a, 0xe6, 0x8c, 0xc4, 0x51, 0x83, 0x30, 0xc6, 0x15, 0x51, 0x11, 0x67, 0xd2, 0x98, + 0xd6, 0xef, 0x66, 0xa7, 0x03, 0xce, 0x42, 0x91, 0x30, 0x16, 0xb1, 0xb0, 0xc1, 0x63, 0x2a, 0xc6, + 0x94, 0xee, 0x64, 0x4a, 0x5a, 0x3a, 0x4c, 0x8e, 0x1a, 0x2a, 0x1a, 0x52, 0xa9, 0xc8, 0x30, 0xce, + 0x14, 0x6e, 0x64, 0x0a, 0x22, 0x0e, 0x1a, 0x52, 0x11, 0x95, 0x64, 0x96, 0xce, 0xf7, 0x16, 0x5c, + 0xdb, 0x3f, 0x61, 0x01, 0xa6, 0x01, 0x0f, 0x59, 0xf4, 0x15, 0xc5, 0xf4, 0xcb, 0x84, 0x4a, 0x85, + 0xda, 0x30, 0x17, 0x70, 0x76, 0x14, 0x85, 0x35, 0x6b, 0xd5, 0x5a, 0x5b, 0xda, 0x70, 0xdd, 0x29, + 0xdf, 0xe0, 0x66, 0xe6, 0x29, 0xa7, 0x96, 0xb6, 0xc2, 0x99, 0x35, 0x6a, 0x41, 0x89, 0x24, 0xfd, + 0x88, 0xd7, 0x0a, 0xda, 0xcd, 0xbb, 0xaf, 0xeb, 0xa6, 0x99, 0x1a, 0x61, 0x63, 0xeb, 0xfc, 0x60, + 0xc1, 0xf5, 0xa6, 0xfc, 0xcf, 0xd3, 0xfc, 0xc5, 0x82, 0x9b, 0xfb, 0x4a, 0x50, 0x32, 0x8c, 0x58, + 0x78, 0x8e, 0x6a, 0x1f, 0x6c, 0x99, 0x1f, 0xfa, 0x63, 0xa4, 0x1f, 0x4e, 0x8d, 0x36, 0xe9, 0xf1, + 0x8c, 0xfd, 0xf6, 0x0c, 0x5e, 0x3e, 0x75, 0x69, 0x20, 0xf4, 0x36, 0x54, 0x34, 0x99, 0x34, 0x82, + 0xa2, 0x4c, 0xe9, 0x0f, 0x2a, 0x6f, 0xcf, 0xe0, 0xb2, 0x86, 0x5b, 0x06, 0xdd, 0xbc, 0x0a, 0x57, + 0xce, 0xc8, 0x08, 0xc3, 0xd0, 0xf9, 0xd9, 0x82, 0xfa, 0xc5, 0xd1, 0xfe, 0xb5, 0x5c, 0xdf, 0x03, + 0x5b, 0x46, 0x2c, 0x1c, 0x50, 0x3f, 0x51, 0x8a, 0x0a, 0xc2, 0x02, 0xaa, 0x59, 0x2e, 0xe0, 0x65, + 0x83, 0x1f, 0xe4, 0x30, 0x7a, 0x07, 0x96, 0x23, 0xa6, 0xa8, 0x88, 0x86, 0xbe, 0xa0, 0x32, 0x19, + 0x28, 0x59, 0x2b, 0x6a, 0xcd, 0x6a, 0x06, 0x63, 0x83, 0x3a, 0xbf, 0x16, 0xe1, 0xca, 0x79, 0xc6, + 0x9f, 0xc2, 0x02, 0x65, 0x01, 0xef, 0x47, 0xcc, 0x70, 0xae, 0x6e, 0x7c, 0x74, 0x39, 0xce, 0xae, + 0xbe, 0x5f, 0x2f, 0xf3, 0x81, 0x4f, 0xbd, 0xa1, 0x3b, 0xb0, 0x24, 0xc9, 0x30, 0x1e, 0x50, 0x5f, + 0x10, 0x65, 0xe8, 0x97, 0x30, 0x18, 0x08, 0x13, 0x45, 0xd1, 0x5d, 0xa8, 0x0c, 0x08, 0x0b, 0x13, + 0x12, 0x52, 0x3f, 0xe0, 0x7d, 0xaa, 0x79, 0x2f, 0xe2, 0x72, 0x0e, 0xb6, 0x78, 0x9f, 0xa6, 0x99, + 0x18, 0x92, 0x63, 0x9f, 0x0c, 0x14, 0x15, 0x8c, 0xa8, 0xe8, 0x05, 0x95, 0xb5, 0x59, 0xed, 0x6a, + 0x79, 0x48, 0x8e, 0x9b, 0x23, 0x70, 0xaa, 0x1a, 0x0b, 0x7e, 0x44, 0x58, 0xa4, 0x4e, 0xfc, 0xa3, + 0x28, 0x3d, 0xaa, 0x95, 0x4c, 0xd2, 0x4e, 0xf1, 0xb6, 0x86, 0xd1, 0x53, 0xa8, 0x9a, 0xef, 0x32, + 0x35, 0x70, 0xac, 0x6a, 0x73, 0xfa, 0xbe, 0xee, 0x4f, 0x2f, 0x33, 0x2d, 0xb6, 0x8c, 0x05, 0xae, + 0xc8, 0x51, 0xd1, 0x21, 0x50, 0x19, 0xcb, 0x04, 0xaa, 0xc1, 0x35, 0xaf, 0xdb, 0xda, 0xdd, 0xea, + 0x74, 0x3f, 0xf6, 0x0f, 0xba, 0xfb, 0x7b, 0x5e, 0xab, 0xd3, 0xee, 0x78, 0x5b, 0xf6, 0x0c, 0x2a, + 0xc3, 0xc2, 0x93, 0x4e, 0xd7, 0x6b, 0xe2, 0xf5, 0x07, 0xb6, 0x85, 0x16, 0x60, 0xb6, 0xfd, 0xa4, + 0xd9, 0xb2, 0x0b, 0x68, 0x11, 0x4a, 0x3b, 0x07, 0x4f, 0x9a, 0xcf, 0xec, 0x22, 0x9a, 0x87, 0x62, + 0x73, 0x07, 0xdb, 0xb3, 0x08, 0x60, 0xae, 0xb9, 0x83, 0xfd, 0x67, 0x9b, 0x76, 0xc9, 0xb9, 0x07, + 0x95, 0x31, 0x0a, 0xa8, 0x06, 0xf3, 0xf1, 0x73, 0x41, 0x24, 0x95, 0x35, 0x6b, 0xb5, 0xb8, 0xb6, + 0x88, 0x73, 0xd1, 0xc1, 0x60, 0x4f, 0xb6, 0x20, 0xaa, 0xc3, 0x7c, 0x5e, 0xf1, 0x56, 0x56, 0xf1, + 0x39, 0x80, 0x10, 0x14, 0x13, 0x11, 0xe9, 0x4b, 0x5a, 0xdc, 0x9e, 0xc1, 0xa9, 0xb0, 0x59, 0x05, + 0xd3, 0x10, 0xbe, 0xe4, 0x89, 0x08, 0xa8, 0x13, 0xc2, 0xf5, 0x89, 0x39, 0x28, 0x63, 0xce, 0x24, + 0x45, 0x5d, 0x98, 0xcf, 0x4b, 0xaf, 0xb0, 0x5a, 0x5c, 0x5b, 0xda, 0xf8, 0xe0, 0x35, 0xd2, 0x38, + 0x42, 0xcf, 0x54, 0x28, 0xce, 0x9d, 0x38, 0xcf, 0xe1, 0x7f, 0x93, 0xa3, 0xec, 0x0d, 0x45, 0xfa, + 0xcd, 0x9a, 0x0c, 0xb5, 0x43, 0x15, 0xe9, 0x13, 0x45, 0xb2, 0x6a, 0x0a, 0x05, 0x95, 0xd2, 0x8f, + 0xa9, 0x08, 0xf2, 0xb4, 0x95, 0x74, 0x35, 0x69, 0x7c, 0xcf, 0xc0, 0xe8, 0x11, 0x80, 0x54, 0x44, + 0x28, 0x3f, 0xdd, 0x29, 0xd9, 0x78, 0xac, 0xe7, 0xc4, 0xf2, 0x85, 0xe3, 0xf6, 0xf2, 0x85, 0x83, + 0x17, 0xb5, 0x76, 0x2a, 0xa3, 0x2d, 0xb0, 0x07, 0x44, 0x2a, 0x3f, 0x89, 0xfb, 0x44, 0x51, 0xe3, + 0xa0, 0xf8, 0xb7, 0x0e, 0xaa, 0xa9, 0xcd, 0x81, 0x36, 0x49, 0x41, 0xe7, 0xc7, 0xe2, 0xf9, 0xa9, + 0x34, 0x92, 0xb5, 0x35, 0x28, 0x51, 0x21, 0xb8, 0xc8, 0x86, 0x12, 0xca, 0x3d, 0x8b, 0x38, 0x70, + 0xf7, 0xf5, 0xaa, 0xc3, 0x46, 0x01, 0x3d, 0x9d, 0xcc, 0xef, 0xe5, 0xe7, 0xee, 0x44, 0x8a, 0xd1, + 0x5b, 0x50, 0x36, 0x3f, 0xfd, 0x88, 0xf5, 0xe9, 0xb1, 0xfe, 0xba, 0x12, 0x5e, 0x32, 0x58, 0x27, + 0x85, 0x10, 0x87, 0x65, 0xca, 0xfa, 0x31, 0xd7, 0x03, 0xcb, 0x57, 0x27, 0x31, 0xd5, 0x2d, 0x5e, + 0xdd, 0x68, 0x5f, 0x2a, 0xfa, 0xd9, 0x17, 0xbb, 0xde, 0xa9, 0xbb, 0xde, 0x49, 0x4c, 0x71, 0x95, + 0x8e, 0xc9, 0xce, 0x4b, 0x0b, 0xaa, 0xe3, 0x2a, 0x68, 0x15, 0x56, 0xbc, 0xee, 0xd6, 0xde, 0x6e, + 0xa7, 0xdb, 0xf3, 0xb0, 0xef, 0x7d, 0xe2, 0x75, 0x7b, 0x13, 0x5d, 0x7b, 0x15, 0x96, 0xf7, 0x7b, + 0x4d, 0xdc, 0xf3, 0x77, 0xdb, 0xfe, 0xfe, 0x9e, 0xe7, 0xb5, 0xb6, 0x6d, 0x0b, 0x5d, 0x81, 0x8a, + 0xd7, 0xdd, 0x1a, 0x81, 0x0a, 0xc8, 0x86, 0x72, 0x06, 0x35, 0x0f, 0xb6, 0x3a, 0xbb, 0x76, 0x11, + 0x5d, 0x03, 0x3b, 0x43, 0x0e, 0x7a, 0x3d, 0x0f, 0x37, 0xbb, 0x2d, 0xcf, 0x9e, 0x75, 0x7e, 0xba, + 0x60, 0x95, 0x98, 0x04, 0xa2, 0xcf, 0xa1, 0x3c, 0x36, 0xf4, 0x2c, 0x7d, 0x1f, 0x8f, 0x2e, 0x57, + 0xef, 0x23, 0xf3, 0x11, 0x8f, 0xb9, 0x43, 0x37, 0x61, 0x21, 0x92, 0xfe, 0x51, 0xc4, 0xc8, 0x20, + 0xdb, 0x2c, 0xf3, 0x91, 0x6c, 0xa7, 0x22, 0x5a, 0x81, 0xb4, 0x40, 0x0f, 0xa3, 0x41, 0xa4, 0x4e, + 0xf4, 0x75, 0x15, 0xf0, 0x19, 0xe0, 0x1c, 0xc3, 0x8d, 0x0b, 0xda, 0xea, 0x0d, 0x53, 0x76, 0xbe, + 0x80, 0x95, 0x69, 0xda, 0xe8, 0x36, 0x80, 0x12, 0x84, 0xc9, 0x40, 0x44, 0xb1, 0xe9, 0xd5, 0x45, + 0x3c, 0x82, 0xa4, 0xe7, 0x7a, 0xbd, 0xf6, 0x69, 0xbe, 0x4e, 0x0b, 0x78, 0x04, 0xd9, 0xf8, 0xbd, + 0x08, 0x73, 0x26, 0x00, 0xfa, 0xce, 0x82, 0xca, 0xd8, 0xac, 0x43, 0xeb, 0xd3, 0xbf, 0xe2, 0x15, + 0x0f, 0xaf, 0xfa, 0xc6, 0x65, 0x4c, 0x4c, 0xe1, 0x3a, 0x6b, 0x2f, 0xff, 0xf8, 0xf3, 0xdb, 0x82, + 0xe3, 0xdc, 0x3a, 0x7d, 0x2b, 0x1b, 0xb3, 0xc7, 0xe9, 0x90, 0x12, 0xb9, 0xfa, 0x63, 0xeb, 0x3e, + 0xfa, 0xc6, 0x82, 0xea, 0xf8, 0xe8, 0x42, 0xd3, 0x03, 0xbe, 0xf2, 0x75, 0x58, 0xbf, 0x95, 0xdb, + 0x8c, 0xbc, 0x9e, 0xdd, 0xdd, 0xfc, 0xf5, 0xec, 0xdc, 0xd3, 0x7c, 0xee, 0x3a, 0xb7, 0x27, 0xf9, + 0x90, 0x73, 0x84, 0xbe, 0xb6, 0x00, 0x9d, 0x6f, 0x49, 0xf4, 0xe0, 0xd2, 0x3d, 0x6c, 0x88, 0x3d, + 0xfc, 0x87, 0xbd, 0xbf, 0x66, 0xbd, 0x67, 0x6d, 0x4a, 0xb8, 0x13, 0xf0, 0xe1, 0x34, 0x0f, 0x9b, + 0x4b, 0xe6, 0xaa, 0xf7, 0xd2, 0xe9, 0xba, 0x67, 0x7d, 0xd6, 0xcc, 0x74, 0x43, 0x9e, 0x3e, 0x3f, + 0x5c, 0x2e, 0xc2, 0x46, 0x48, 0x99, 0x9e, 0xbd, 0x0d, 0x73, 0x44, 0xe2, 0x48, 0xbe, 0xf2, 0xef, + 0xcc, 0x87, 0x46, 0x3c, 0x9c, 0xd3, 0xda, 0xef, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf5, 0xe0, + 0xdc, 0xd0, 0xfb, 0x0c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/geometry.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/geometry.pb.go new file mode 100644 index 0000000..c7387bf --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/geometry.pb.go @@ -0,0 +1,172 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/vision/v1/geometry.proto +// DO NOT EDIT! + +/* +Package vision is a generated protocol buffer package. + +It is generated from these files: + google/cloud/vision/v1/geometry.proto + google/cloud/vision/v1/image_annotator.proto + google/cloud/vision/v1/text_annotation.proto + google/cloud/vision/v1/web_detection.proto + +It has these top-level messages: + Vertex + BoundingPoly + Position + Feature + ImageSource + Image + FaceAnnotation + LocationInfo + Property + EntityAnnotation + SafeSearchAnnotation + LatLongRect + ColorInfo + DominantColorsAnnotation + ImageProperties + CropHint + CropHintsAnnotation + CropHintsParams + ImageContext + AnnotateImageRequest + AnnotateImageResponse + BatchAnnotateImagesRequest + BatchAnnotateImagesResponse + TextAnnotation + Page + Block + Paragraph + Word + Symbol + WebDetection +*/ +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A vertex represents a 2D point in the image. +// NOTE: the vertex coordinates are in the same scale as the original image. +type Vertex struct { + // X coordinate. + X int32 `protobuf:"varint,1,opt,name=x" json:"x,omitempty"` + // Y coordinate. + Y int32 `protobuf:"varint,2,opt,name=y" json:"y,omitempty"` +} + +func (m *Vertex) Reset() { *m = Vertex{} } +func (m *Vertex) String() string { return proto.CompactTextString(m) } +func (*Vertex) ProtoMessage() {} +func (*Vertex) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Vertex) GetX() int32 { + if m != nil { + return m.X + } + return 0 +} + +func (m *Vertex) GetY() int32 { + if m != nil { + return m.Y + } + return 0 +} + +// A bounding polygon for the detected image annotation. +type BoundingPoly struct { + // The bounding polygon vertices. + Vertices []*Vertex `protobuf:"bytes,1,rep,name=vertices" json:"vertices,omitempty"` +} + +func (m *BoundingPoly) Reset() { *m = BoundingPoly{} } +func (m *BoundingPoly) String() string { return proto.CompactTextString(m) } +func (*BoundingPoly) ProtoMessage() {} +func (*BoundingPoly) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *BoundingPoly) GetVertices() []*Vertex { + if m != nil { + return m.Vertices + } + return nil +} + +// A 3D position in the image, used primarily for Face detection landmarks. +// A valid Position must have both x and y coordinates. +// The position coordinates are in the same scale as the original image. +type Position struct { + // X coordinate. + X float32 `protobuf:"fixed32,1,opt,name=x" json:"x,omitempty"` + // Y coordinate. + Y float32 `protobuf:"fixed32,2,opt,name=y" json:"y,omitempty"` + // Z coordinate (or depth). + Z float32 `protobuf:"fixed32,3,opt,name=z" json:"z,omitempty"` +} + +func (m *Position) Reset() { *m = Position{} } +func (m *Position) String() string { return proto.CompactTextString(m) } +func (*Position) ProtoMessage() {} +func (*Position) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Position) GetX() float32 { + if m != nil { + return m.X + } + return 0 +} + +func (m *Position) GetY() float32 { + if m != nil { + return m.Y + } + return 0 +} + +func (m *Position) GetZ() float32 { + if m != nil { + return m.Z + } + return 0 +} + +func init() { + proto.RegisterType((*Vertex)(nil), "google.cloud.vision.v1.Vertex") + proto.RegisterType((*BoundingPoly)(nil), "google.cloud.vision.v1.BoundingPoly") + proto.RegisterType((*Position)(nil), "google.cloud.vision.v1.Position") +} + +func init() { proto.RegisterFile("google/cloud/vision/v1/geometry.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 237 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0x31, 0x4b, 0x03, 0x31, + 0x14, 0x80, 0x79, 0x57, 0x2c, 0x25, 0xd6, 0xe5, 0x06, 0x39, 0x1c, 0xa4, 0x1c, 0x0a, 0x9d, 0x12, + 0xaa, 0x4e, 0xea, 0x74, 0x8b, 0xe0, 0x74, 0xdc, 0xe0, 0xe0, 0x56, 0xaf, 0x8f, 0x47, 0xe0, 0x9a, + 0x57, 0x92, 0x34, 0x34, 0xfd, 0xe5, 0x8e, 0xd2, 0xa4, 0x28, 0x8a, 0xdd, 0xf2, 0x91, 0x8f, 0xf7, + 0xf1, 0x9e, 0xb8, 0x25, 0x66, 0x1a, 0x50, 0xf5, 0x03, 0x6f, 0x57, 0x2a, 0x68, 0xa7, 0xd9, 0xa8, + 0xb0, 0x50, 0x84, 0xbc, 0x46, 0x6f, 0xa3, 0xdc, 0x58, 0xf6, 0x5c, 0x5e, 0x66, 0x4d, 0x26, 0x4d, + 0x66, 0x4d, 0x86, 0x45, 0x7d, 0x23, 0xc6, 0x6f, 0x68, 0x3d, 0xee, 0xca, 0xa9, 0x80, 0x5d, 0x05, + 0x33, 0x98, 0x9f, 0x75, 0x90, 0x28, 0x56, 0x45, 0xa6, 0x58, 0xbf, 0x8a, 0x69, 0xc3, 0x5b, 0xb3, + 0xd2, 0x86, 0x5a, 0x1e, 0x62, 0xf9, 0x28, 0x26, 0x01, 0xad, 0xd7, 0x3d, 0xba, 0x0a, 0x66, 0xa3, + 0xf9, 0xf9, 0xdd, 0xb5, 0xfc, 0x3f, 0x20, 0xf3, 0xf4, 0xee, 0xdb, 0xaf, 0x1f, 0xc4, 0xa4, 0x65, + 0xa7, 0xbd, 0x66, 0xf3, 0xd3, 0x2c, 0x7e, 0x35, 0x8b, 0x0e, 0xe2, 0x81, 0xf6, 0xd5, 0x28, 0xd3, + 0xbe, 0x31, 0xe2, 0xaa, 0xe7, 0xf5, 0x89, 0x48, 0x73, 0xf1, 0x72, 0xdc, 0xb6, 0x3d, 0x2c, 0xdb, + 0xc2, 0xfb, 0xf3, 0x51, 0x24, 0x1e, 0x96, 0x86, 0x24, 0x5b, 0x52, 0x84, 0x26, 0x9d, 0x42, 0xe5, + 0xaf, 0xe5, 0x46, 0xbb, 0xbf, 0x47, 0x7b, 0xca, 0xaf, 0x4f, 0x80, 0x8f, 0x71, 0x72, 0xef, 0xbf, + 0x02, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x04, 0x38, 0x95, 0x5f, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/image_annotator.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/image_annotator.pb.go new file mode 100644 index 0000000..a398c38 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/image_annotator.pb.go @@ -0,0 +1,1439 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/vision/v1/image_annotator.proto +// DO NOT EDIT! + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" +import google_type "google.golang.org/genproto/googleapis/type/color" +import google_type1 "google.golang.org/genproto/googleapis/type/latlng" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A bucketized representation of likelihood, which is intended to give clients +// highly stable results across model upgrades. +type Likelihood int32 + +const ( + // Unknown likelihood. + Likelihood_UNKNOWN Likelihood = 0 + // It is very unlikely that the image belongs to the specified vertical. + Likelihood_VERY_UNLIKELY Likelihood = 1 + // It is unlikely that the image belongs to the specified vertical. + Likelihood_UNLIKELY Likelihood = 2 + // It is possible that the image belongs to the specified vertical. + Likelihood_POSSIBLE Likelihood = 3 + // It is likely that the image belongs to the specified vertical. + Likelihood_LIKELY Likelihood = 4 + // It is very likely that the image belongs to the specified vertical. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "UNKNOWN", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "UNKNOWN": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Type of image feature. +type Feature_Type int32 + +const ( + // Unspecified feature type. + Feature_TYPE_UNSPECIFIED Feature_Type = 0 + // Run face detection. + Feature_FACE_DETECTION Feature_Type = 1 + // Run landmark detection. + Feature_LANDMARK_DETECTION Feature_Type = 2 + // Run logo detection. + Feature_LOGO_DETECTION Feature_Type = 3 + // Run label detection. + Feature_LABEL_DETECTION Feature_Type = 4 + // Run OCR. + Feature_TEXT_DETECTION Feature_Type = 5 + // Run dense text document OCR. Takes precedence when both + // DOCUMENT_TEXT_DETECTION and TEXT_DETECTION are present. + Feature_DOCUMENT_TEXT_DETECTION Feature_Type = 11 + // Run computer vision models to compute image safe-search properties. + Feature_SAFE_SEARCH_DETECTION Feature_Type = 6 + // Compute a set of image properties, such as the image's dominant colors. + Feature_IMAGE_PROPERTIES Feature_Type = 7 + // Run crop hints. + Feature_CROP_HINTS Feature_Type = 9 + // Run web detection. + Feature_WEB_DETECTION Feature_Type = 10 +) + +var Feature_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "FACE_DETECTION", + 2: "LANDMARK_DETECTION", + 3: "LOGO_DETECTION", + 4: "LABEL_DETECTION", + 5: "TEXT_DETECTION", + 11: "DOCUMENT_TEXT_DETECTION", + 6: "SAFE_SEARCH_DETECTION", + 7: "IMAGE_PROPERTIES", + 9: "CROP_HINTS", + 10: "WEB_DETECTION", +} +var Feature_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "FACE_DETECTION": 1, + "LANDMARK_DETECTION": 2, + "LOGO_DETECTION": 3, + "LABEL_DETECTION": 4, + "TEXT_DETECTION": 5, + "DOCUMENT_TEXT_DETECTION": 11, + "SAFE_SEARCH_DETECTION": 6, + "IMAGE_PROPERTIES": 7, + "CROP_HINTS": 9, + "WEB_DETECTION": 10, +} + +func (x Feature_Type) String() string { + return proto.EnumName(Feature_Type_name, int32(x)) +} +func (Feature_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +// Face landmark (feature) type. +// Left and right are defined from the vantage of the viewer of the image +// without considering mirror projections typical of photos. So, `LEFT_EYE`, +// typically, is the person's right eye. +type FaceAnnotation_Landmark_Type int32 + +const ( + // Unknown face landmark detected. Should not be filled. + FaceAnnotation_Landmark_UNKNOWN_LANDMARK FaceAnnotation_Landmark_Type = 0 + // Left eye. + FaceAnnotation_Landmark_LEFT_EYE FaceAnnotation_Landmark_Type = 1 + // Right eye. + FaceAnnotation_Landmark_RIGHT_EYE FaceAnnotation_Landmark_Type = 2 + // Left of left eyebrow. + FaceAnnotation_Landmark_LEFT_OF_LEFT_EYEBROW FaceAnnotation_Landmark_Type = 3 + // Right of left eyebrow. + FaceAnnotation_Landmark_RIGHT_OF_LEFT_EYEBROW FaceAnnotation_Landmark_Type = 4 + // Left of right eyebrow. + FaceAnnotation_Landmark_LEFT_OF_RIGHT_EYEBROW FaceAnnotation_Landmark_Type = 5 + // Right of right eyebrow. + FaceAnnotation_Landmark_RIGHT_OF_RIGHT_EYEBROW FaceAnnotation_Landmark_Type = 6 + // Midpoint between eyes. + FaceAnnotation_Landmark_MIDPOINT_BETWEEN_EYES FaceAnnotation_Landmark_Type = 7 + // Nose tip. + FaceAnnotation_Landmark_NOSE_TIP FaceAnnotation_Landmark_Type = 8 + // Upper lip. + FaceAnnotation_Landmark_UPPER_LIP FaceAnnotation_Landmark_Type = 9 + // Lower lip. + FaceAnnotation_Landmark_LOWER_LIP FaceAnnotation_Landmark_Type = 10 + // Mouth left. + FaceAnnotation_Landmark_MOUTH_LEFT FaceAnnotation_Landmark_Type = 11 + // Mouth right. + FaceAnnotation_Landmark_MOUTH_RIGHT FaceAnnotation_Landmark_Type = 12 + // Mouth center. + FaceAnnotation_Landmark_MOUTH_CENTER FaceAnnotation_Landmark_Type = 13 + // Nose, bottom right. + FaceAnnotation_Landmark_NOSE_BOTTOM_RIGHT FaceAnnotation_Landmark_Type = 14 + // Nose, bottom left. + FaceAnnotation_Landmark_NOSE_BOTTOM_LEFT FaceAnnotation_Landmark_Type = 15 + // Nose, bottom center. + FaceAnnotation_Landmark_NOSE_BOTTOM_CENTER FaceAnnotation_Landmark_Type = 16 + // Left eye, top boundary. + FaceAnnotation_Landmark_LEFT_EYE_TOP_BOUNDARY FaceAnnotation_Landmark_Type = 17 + // Left eye, right corner. + FaceAnnotation_Landmark_LEFT_EYE_RIGHT_CORNER FaceAnnotation_Landmark_Type = 18 + // Left eye, bottom boundary. + FaceAnnotation_Landmark_LEFT_EYE_BOTTOM_BOUNDARY FaceAnnotation_Landmark_Type = 19 + // Left eye, left corner. + FaceAnnotation_Landmark_LEFT_EYE_LEFT_CORNER FaceAnnotation_Landmark_Type = 20 + // Right eye, top boundary. + FaceAnnotation_Landmark_RIGHT_EYE_TOP_BOUNDARY FaceAnnotation_Landmark_Type = 21 + // Right eye, right corner. + FaceAnnotation_Landmark_RIGHT_EYE_RIGHT_CORNER FaceAnnotation_Landmark_Type = 22 + // Right eye, bottom boundary. + FaceAnnotation_Landmark_RIGHT_EYE_BOTTOM_BOUNDARY FaceAnnotation_Landmark_Type = 23 + // Right eye, left corner. + FaceAnnotation_Landmark_RIGHT_EYE_LEFT_CORNER FaceAnnotation_Landmark_Type = 24 + // Left eyebrow, upper midpoint. + FaceAnnotation_Landmark_LEFT_EYEBROW_UPPER_MIDPOINT FaceAnnotation_Landmark_Type = 25 + // Right eyebrow, upper midpoint. + FaceAnnotation_Landmark_RIGHT_EYEBROW_UPPER_MIDPOINT FaceAnnotation_Landmark_Type = 26 + // Left ear tragion. + FaceAnnotation_Landmark_LEFT_EAR_TRAGION FaceAnnotation_Landmark_Type = 27 + // Right ear tragion. + FaceAnnotation_Landmark_RIGHT_EAR_TRAGION FaceAnnotation_Landmark_Type = 28 + // Left eye pupil. + FaceAnnotation_Landmark_LEFT_EYE_PUPIL FaceAnnotation_Landmark_Type = 29 + // Right eye pupil. + FaceAnnotation_Landmark_RIGHT_EYE_PUPIL FaceAnnotation_Landmark_Type = 30 + // Forehead glabella. + FaceAnnotation_Landmark_FOREHEAD_GLABELLA FaceAnnotation_Landmark_Type = 31 + // Chin gnathion. + FaceAnnotation_Landmark_CHIN_GNATHION FaceAnnotation_Landmark_Type = 32 + // Chin left gonion. + FaceAnnotation_Landmark_CHIN_LEFT_GONION FaceAnnotation_Landmark_Type = 33 + // Chin right gonion. + FaceAnnotation_Landmark_CHIN_RIGHT_GONION FaceAnnotation_Landmark_Type = 34 +) + +var FaceAnnotation_Landmark_Type_name = map[int32]string{ + 0: "UNKNOWN_LANDMARK", + 1: "LEFT_EYE", + 2: "RIGHT_EYE", + 3: "LEFT_OF_LEFT_EYEBROW", + 4: "RIGHT_OF_LEFT_EYEBROW", + 5: "LEFT_OF_RIGHT_EYEBROW", + 6: "RIGHT_OF_RIGHT_EYEBROW", + 7: "MIDPOINT_BETWEEN_EYES", + 8: "NOSE_TIP", + 9: "UPPER_LIP", + 10: "LOWER_LIP", + 11: "MOUTH_LEFT", + 12: "MOUTH_RIGHT", + 13: "MOUTH_CENTER", + 14: "NOSE_BOTTOM_RIGHT", + 15: "NOSE_BOTTOM_LEFT", + 16: "NOSE_BOTTOM_CENTER", + 17: "LEFT_EYE_TOP_BOUNDARY", + 18: "LEFT_EYE_RIGHT_CORNER", + 19: "LEFT_EYE_BOTTOM_BOUNDARY", + 20: "LEFT_EYE_LEFT_CORNER", + 21: "RIGHT_EYE_TOP_BOUNDARY", + 22: "RIGHT_EYE_RIGHT_CORNER", + 23: "RIGHT_EYE_BOTTOM_BOUNDARY", + 24: "RIGHT_EYE_LEFT_CORNER", + 25: "LEFT_EYEBROW_UPPER_MIDPOINT", + 26: "RIGHT_EYEBROW_UPPER_MIDPOINT", + 27: "LEFT_EAR_TRAGION", + 28: "RIGHT_EAR_TRAGION", + 29: "LEFT_EYE_PUPIL", + 30: "RIGHT_EYE_PUPIL", + 31: "FOREHEAD_GLABELLA", + 32: "CHIN_GNATHION", + 33: "CHIN_LEFT_GONION", + 34: "CHIN_RIGHT_GONION", +} +var FaceAnnotation_Landmark_Type_value = map[string]int32{ + "UNKNOWN_LANDMARK": 0, + "LEFT_EYE": 1, + "RIGHT_EYE": 2, + "LEFT_OF_LEFT_EYEBROW": 3, + "RIGHT_OF_LEFT_EYEBROW": 4, + "LEFT_OF_RIGHT_EYEBROW": 5, + "RIGHT_OF_RIGHT_EYEBROW": 6, + "MIDPOINT_BETWEEN_EYES": 7, + "NOSE_TIP": 8, + "UPPER_LIP": 9, + "LOWER_LIP": 10, + "MOUTH_LEFT": 11, + "MOUTH_RIGHT": 12, + "MOUTH_CENTER": 13, + "NOSE_BOTTOM_RIGHT": 14, + "NOSE_BOTTOM_LEFT": 15, + "NOSE_BOTTOM_CENTER": 16, + "LEFT_EYE_TOP_BOUNDARY": 17, + "LEFT_EYE_RIGHT_CORNER": 18, + "LEFT_EYE_BOTTOM_BOUNDARY": 19, + "LEFT_EYE_LEFT_CORNER": 20, + "RIGHT_EYE_TOP_BOUNDARY": 21, + "RIGHT_EYE_RIGHT_CORNER": 22, + "RIGHT_EYE_BOTTOM_BOUNDARY": 23, + "RIGHT_EYE_LEFT_CORNER": 24, + "LEFT_EYEBROW_UPPER_MIDPOINT": 25, + "RIGHT_EYEBROW_UPPER_MIDPOINT": 26, + "LEFT_EAR_TRAGION": 27, + "RIGHT_EAR_TRAGION": 28, + "LEFT_EYE_PUPIL": 29, + "RIGHT_EYE_PUPIL": 30, + "FOREHEAD_GLABELLA": 31, + "CHIN_GNATHION": 32, + "CHIN_LEFT_GONION": 33, + "CHIN_RIGHT_GONION": 34, +} + +func (x FaceAnnotation_Landmark_Type) String() string { + return proto.EnumName(FaceAnnotation_Landmark_Type_name, int32(x)) +} +func (FaceAnnotation_Landmark_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor1, []int{3, 0, 0} +} + +// Users describe the type of Google Cloud Vision API tasks to perform over +// images by using *Feature*s. Each Feature indicates a type of image +// detection task to perform. Features encode the Cloud Vision API +// vertical to operate on and the number of top-scoring results to return. +type Feature struct { + // The feature type. + Type Feature_Type `protobuf:"varint,1,opt,name=type,enum=google.cloud.vision.v1.Feature_Type" json:"type,omitempty"` + // Maximum number of results of this type. + MaxResults int32 `protobuf:"varint,2,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` +} + +func (m *Feature) Reset() { *m = Feature{} } +func (m *Feature) String() string { return proto.CompactTextString(m) } +func (*Feature) ProtoMessage() {} +func (*Feature) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Feature) GetType() Feature_Type { + if m != nil { + return m.Type + } + return Feature_TYPE_UNSPECIFIED +} + +func (m *Feature) GetMaxResults() int32 { + if m != nil { + return m.MaxResults + } + return 0 +} + +// External image source (Google Cloud Storage image location). +type ImageSource struct { + // NOTE: For new code `image_uri` below is preferred. + // Google Cloud Storage image URI, which must be in the following form: + // `gs://bucket_name/object_name` (for details, see + // [Google Cloud Storage Request + // URIs](https://cloud.google.com/storage/docs/reference-uris)). + // NOTE: Cloud Storage object versioning is not supported. + GcsImageUri string `protobuf:"bytes,1,opt,name=gcs_image_uri,json=gcsImageUri" json:"gcs_image_uri,omitempty"` + // Image URI which supports: + // 1) Google Cloud Storage image URI, which must be in the following form: + // `gs://bucket_name/object_name` (for details, see + // [Google Cloud Storage Request + // URIs](https://cloud.google.com/storage/docs/reference-uris)). + // NOTE: Cloud Storage object versioning is not supported. + // 2) Publicly accessible image HTTP/HTTPS URL. + // This is preferred over the legacy `gcs_image_uri` above. When both + // `gcs_image_uri` and `image_uri` are specified, `image_uri` takes + // precedence. + ImageUri string `protobuf:"bytes,2,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` +} + +func (m *ImageSource) Reset() { *m = ImageSource{} } +func (m *ImageSource) String() string { return proto.CompactTextString(m) } +func (*ImageSource) ProtoMessage() {} +func (*ImageSource) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *ImageSource) GetGcsImageUri() string { + if m != nil { + return m.GcsImageUri + } + return "" +} + +func (m *ImageSource) GetImageUri() string { + if m != nil { + return m.ImageUri + } + return "" +} + +// Client image to perform Google Cloud Vision API tasks over. +type Image struct { + // Image content, represented as a stream of bytes. + // Note: as with all `bytes` fields, protobuffers use a pure binary + // representation, whereas JSON representations use base64. + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + // Google Cloud Storage image location. If both `content` and `source` + // are provided for an image, `content` takes precedence and is + // used to perform the image annotation request. + Source *ImageSource `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"` +} + +func (m *Image) Reset() { *m = Image{} } +func (m *Image) String() string { return proto.CompactTextString(m) } +func (*Image) ProtoMessage() {} +func (*Image) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *Image) GetContent() []byte { + if m != nil { + return m.Content + } + return nil +} + +func (m *Image) GetSource() *ImageSource { + if m != nil { + return m.Source + } + return nil +} + +// A face annotation object contains the results of face detection. +type FaceAnnotation struct { + // The bounding polygon around the face. The coordinates of the bounding box + // are in the original image's scale, as returned in `ImageParams`. + // The bounding box is computed to "frame" the face in accordance with human + // expectations. It is based on the landmarker results. + // Note that one or more x and/or y coordinates may not be generated in the + // `BoundingPoly` (the polygon will be unbounded) if only a partial face + // appears in the image to be annotated. + BoundingPoly *BoundingPoly `protobuf:"bytes,1,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // The `fd_bounding_poly` bounding polygon is tighter than the + // `boundingPoly`, and encloses only the skin part of the face. Typically, it + // is used to eliminate the face from any image analysis that detects the + // "amount of skin" visible in an image. It is not based on the + // landmarker results, only on the initial face detection, hence + // the <code>fd</code> (face detection) prefix. + FdBoundingPoly *BoundingPoly `protobuf:"bytes,2,opt,name=fd_bounding_poly,json=fdBoundingPoly" json:"fd_bounding_poly,omitempty"` + // Detected face landmarks. + Landmarks []*FaceAnnotation_Landmark `protobuf:"bytes,3,rep,name=landmarks" json:"landmarks,omitempty"` + // Roll angle, which indicates the amount of clockwise/anti-clockwise rotation + // of the face relative to the image vertical about the axis perpendicular to + // the face. Range [-180,180]. + RollAngle float32 `protobuf:"fixed32,4,opt,name=roll_angle,json=rollAngle" json:"roll_angle,omitempty"` + // Yaw angle, which indicates the leftward/rightward angle that the face is + // pointing relative to the vertical plane perpendicular to the image. Range + // [-180,180]. + PanAngle float32 `protobuf:"fixed32,5,opt,name=pan_angle,json=panAngle" json:"pan_angle,omitempty"` + // Pitch angle, which indicates the upwards/downwards angle that the face is + // pointing relative to the image's horizontal plane. Range [-180,180]. + TiltAngle float32 `protobuf:"fixed32,6,opt,name=tilt_angle,json=tiltAngle" json:"tilt_angle,omitempty"` + // Detection confidence. Range [0, 1]. + DetectionConfidence float32 `protobuf:"fixed32,7,opt,name=detection_confidence,json=detectionConfidence" json:"detection_confidence,omitempty"` + // Face landmarking confidence. Range [0, 1]. + LandmarkingConfidence float32 `protobuf:"fixed32,8,opt,name=landmarking_confidence,json=landmarkingConfidence" json:"landmarking_confidence,omitempty"` + // Joy likelihood. + JoyLikelihood Likelihood `protobuf:"varint,9,opt,name=joy_likelihood,json=joyLikelihood,enum=google.cloud.vision.v1.Likelihood" json:"joy_likelihood,omitempty"` + // Sorrow likelihood. + SorrowLikelihood Likelihood `protobuf:"varint,10,opt,name=sorrow_likelihood,json=sorrowLikelihood,enum=google.cloud.vision.v1.Likelihood" json:"sorrow_likelihood,omitempty"` + // Anger likelihood. + AngerLikelihood Likelihood `protobuf:"varint,11,opt,name=anger_likelihood,json=angerLikelihood,enum=google.cloud.vision.v1.Likelihood" json:"anger_likelihood,omitempty"` + // Surprise likelihood. + SurpriseLikelihood Likelihood `protobuf:"varint,12,opt,name=surprise_likelihood,json=surpriseLikelihood,enum=google.cloud.vision.v1.Likelihood" json:"surprise_likelihood,omitempty"` + // Under-exposed likelihood. + UnderExposedLikelihood Likelihood `protobuf:"varint,13,opt,name=under_exposed_likelihood,json=underExposedLikelihood,enum=google.cloud.vision.v1.Likelihood" json:"under_exposed_likelihood,omitempty"` + // Blurred likelihood. + BlurredLikelihood Likelihood `protobuf:"varint,14,opt,name=blurred_likelihood,json=blurredLikelihood,enum=google.cloud.vision.v1.Likelihood" json:"blurred_likelihood,omitempty"` + // Headwear likelihood. + HeadwearLikelihood Likelihood `protobuf:"varint,15,opt,name=headwear_likelihood,json=headwearLikelihood,enum=google.cloud.vision.v1.Likelihood" json:"headwear_likelihood,omitempty"` +} + +func (m *FaceAnnotation) Reset() { *m = FaceAnnotation{} } +func (m *FaceAnnotation) String() string { return proto.CompactTextString(m) } +func (*FaceAnnotation) ProtoMessage() {} +func (*FaceAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *FaceAnnotation) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *FaceAnnotation) GetFdBoundingPoly() *BoundingPoly { + if m != nil { + return m.FdBoundingPoly + } + return nil +} + +func (m *FaceAnnotation) GetLandmarks() []*FaceAnnotation_Landmark { + if m != nil { + return m.Landmarks + } + return nil +} + +func (m *FaceAnnotation) GetRollAngle() float32 { + if m != nil { + return m.RollAngle + } + return 0 +} + +func (m *FaceAnnotation) GetPanAngle() float32 { + if m != nil { + return m.PanAngle + } + return 0 +} + +func (m *FaceAnnotation) GetTiltAngle() float32 { + if m != nil { + return m.TiltAngle + } + return 0 +} + +func (m *FaceAnnotation) GetDetectionConfidence() float32 { + if m != nil { + return m.DetectionConfidence + } + return 0 +} + +func (m *FaceAnnotation) GetLandmarkingConfidence() float32 { + if m != nil { + return m.LandmarkingConfidence + } + return 0 +} + +func (m *FaceAnnotation) GetJoyLikelihood() Likelihood { + if m != nil { + return m.JoyLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetSorrowLikelihood() Likelihood { + if m != nil { + return m.SorrowLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetAngerLikelihood() Likelihood { + if m != nil { + return m.AngerLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetSurpriseLikelihood() Likelihood { + if m != nil { + return m.SurpriseLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetUnderExposedLikelihood() Likelihood { + if m != nil { + return m.UnderExposedLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetBlurredLikelihood() Likelihood { + if m != nil { + return m.BlurredLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetHeadwearLikelihood() Likelihood { + if m != nil { + return m.HeadwearLikelihood + } + return Likelihood_UNKNOWN +} + +// A face-specific landmark (for example, a face feature). +// Landmark positions may fall outside the bounds of the image +// if the face is near one or more edges of the image. +// Therefore it is NOT guaranteed that `0 <= x < width` or +// `0 <= y < height`. +type FaceAnnotation_Landmark struct { + // Face landmark type. + Type FaceAnnotation_Landmark_Type `protobuf:"varint,3,opt,name=type,enum=google.cloud.vision.v1.FaceAnnotation_Landmark_Type" json:"type,omitempty"` + // Face landmark position. + Position *Position `protobuf:"bytes,4,opt,name=position" json:"position,omitempty"` +} + +func (m *FaceAnnotation_Landmark) Reset() { *m = FaceAnnotation_Landmark{} } +func (m *FaceAnnotation_Landmark) String() string { return proto.CompactTextString(m) } +func (*FaceAnnotation_Landmark) ProtoMessage() {} +func (*FaceAnnotation_Landmark) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0} } + +func (m *FaceAnnotation_Landmark) GetType() FaceAnnotation_Landmark_Type { + if m != nil { + return m.Type + } + return FaceAnnotation_Landmark_UNKNOWN_LANDMARK +} + +func (m *FaceAnnotation_Landmark) GetPosition() *Position { + if m != nil { + return m.Position + } + return nil +} + +// Detected entity location information. +type LocationInfo struct { + // lat/long location coordinates. + LatLng *google_type1.LatLng `protobuf:"bytes,1,opt,name=lat_lng,json=latLng" json:"lat_lng,omitempty"` +} + +func (m *LocationInfo) Reset() { *m = LocationInfo{} } +func (m *LocationInfo) String() string { return proto.CompactTextString(m) } +func (*LocationInfo) ProtoMessage() {} +func (*LocationInfo) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *LocationInfo) GetLatLng() *google_type1.LatLng { + if m != nil { + return m.LatLng + } + return nil +} + +// A `Property` consists of a user-supplied name/value pair. +type Property struct { + // Name of the property. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Value of the property. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *Property) Reset() { *m = Property{} } +func (m *Property) String() string { return proto.CompactTextString(m) } +func (*Property) ProtoMessage() {} +func (*Property) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *Property) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Property) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +// Set of detected entity features. +type EntityAnnotation struct { + // Opaque entity ID. Some IDs may be available in + // [Google Knowledge Graph Search API](https://developers.google.com/knowledge-graph/). + Mid string `protobuf:"bytes,1,opt,name=mid" json:"mid,omitempty"` + // The language code for the locale in which the entity textual + // `description` is expressed. + Locale string `protobuf:"bytes,2,opt,name=locale" json:"locale,omitempty"` + // Entity textual description, expressed in its `locale` language. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // Overall score of the result. Range [0, 1]. + Score float32 `protobuf:"fixed32,4,opt,name=score" json:"score,omitempty"` + // The accuracy of the entity detection in an image. + // For example, for an image in which the "Eiffel Tower" entity is detected, + // this field represents the confidence that there is a tower in the query + // image. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` + // The relevancy of the ICA (Image Content Annotation) label to the + // image. For example, the relevancy of "tower" is likely higher to an image + // containing the detected "Eiffel Tower" than to an image containing a + // detected distant towering building, even though the confidence that + // there is a tower in each image may be the same. Range [0, 1]. + Topicality float32 `protobuf:"fixed32,6,opt,name=topicality" json:"topicality,omitempty"` + // Image region to which this entity belongs. Currently not produced + // for `LABEL_DETECTION` features. For `TEXT_DETECTION` (OCR), `boundingPoly`s + // are produced for the entire text detected in an image region, followed by + // `boundingPoly`s for each word within the detected text. + BoundingPoly *BoundingPoly `protobuf:"bytes,7,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // The location information for the detected entity. Multiple + // `LocationInfo` elements can be present because one location may + // indicate the location of the scene in the image, and another location + // may indicate the location of the place where the image was taken. + // Location information is usually present for landmarks. + Locations []*LocationInfo `protobuf:"bytes,8,rep,name=locations" json:"locations,omitempty"` + // Some entities may have optional user-supplied `Property` (name/value) + // fields, such a score or string that qualifies the entity. + Properties []*Property `protobuf:"bytes,9,rep,name=properties" json:"properties,omitempty"` +} + +func (m *EntityAnnotation) Reset() { *m = EntityAnnotation{} } +func (m *EntityAnnotation) String() string { return proto.CompactTextString(m) } +func (*EntityAnnotation) ProtoMessage() {} +func (*EntityAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *EntityAnnotation) GetMid() string { + if m != nil { + return m.Mid + } + return "" +} + +func (m *EntityAnnotation) GetLocale() string { + if m != nil { + return m.Locale + } + return "" +} + +func (m *EntityAnnotation) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *EntityAnnotation) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *EntityAnnotation) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func (m *EntityAnnotation) GetTopicality() float32 { + if m != nil { + return m.Topicality + } + return 0 +} + +func (m *EntityAnnotation) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *EntityAnnotation) GetLocations() []*LocationInfo { + if m != nil { + return m.Locations + } + return nil +} + +func (m *EntityAnnotation) GetProperties() []*Property { + if m != nil { + return m.Properties + } + return nil +} + +// Set of features pertaining to the image, computed by computer vision +// methods over safe-search verticals (for example, adult, spoof, medical, +// violence). +type SafeSearchAnnotation struct { + // Represents the adult content likelihood for the image. + Adult Likelihood `protobuf:"varint,1,opt,name=adult,enum=google.cloud.vision.v1.Likelihood" json:"adult,omitempty"` + // Spoof likelihood. The likelihood that an modification + // was made to the image's canonical version to make it appear + // funny or offensive. + Spoof Likelihood `protobuf:"varint,2,opt,name=spoof,enum=google.cloud.vision.v1.Likelihood" json:"spoof,omitempty"` + // Likelihood that this is a medical image. + Medical Likelihood `protobuf:"varint,3,opt,name=medical,enum=google.cloud.vision.v1.Likelihood" json:"medical,omitempty"` + // Violence likelihood. + Violence Likelihood `protobuf:"varint,4,opt,name=violence,enum=google.cloud.vision.v1.Likelihood" json:"violence,omitempty"` +} + +func (m *SafeSearchAnnotation) Reset() { *m = SafeSearchAnnotation{} } +func (m *SafeSearchAnnotation) String() string { return proto.CompactTextString(m) } +func (*SafeSearchAnnotation) ProtoMessage() {} +func (*SafeSearchAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *SafeSearchAnnotation) GetAdult() Likelihood { + if m != nil { + return m.Adult + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetSpoof() Likelihood { + if m != nil { + return m.Spoof + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetMedical() Likelihood { + if m != nil { + return m.Medical + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetViolence() Likelihood { + if m != nil { + return m.Violence + } + return Likelihood_UNKNOWN +} + +// Rectangle determined by min and max `LatLng` pairs. +type LatLongRect struct { + // Min lat/long pair. + MinLatLng *google_type1.LatLng `protobuf:"bytes,1,opt,name=min_lat_lng,json=minLatLng" json:"min_lat_lng,omitempty"` + // Max lat/long pair. + MaxLatLng *google_type1.LatLng `protobuf:"bytes,2,opt,name=max_lat_lng,json=maxLatLng" json:"max_lat_lng,omitempty"` +} + +func (m *LatLongRect) Reset() { *m = LatLongRect{} } +func (m *LatLongRect) String() string { return proto.CompactTextString(m) } +func (*LatLongRect) ProtoMessage() {} +func (*LatLongRect) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *LatLongRect) GetMinLatLng() *google_type1.LatLng { + if m != nil { + return m.MinLatLng + } + return nil +} + +func (m *LatLongRect) GetMaxLatLng() *google_type1.LatLng { + if m != nil { + return m.MaxLatLng + } + return nil +} + +// Color information consists of RGB channels, score, and the fraction of +// the image that the color occupies in the image. +type ColorInfo struct { + // RGB components of the color. + Color *google_type.Color `protobuf:"bytes,1,opt,name=color" json:"color,omitempty"` + // Image-specific score for this color. Value in range [0, 1]. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // The fraction of pixels the color occupies in the image. + // Value in range [0, 1]. + PixelFraction float32 `protobuf:"fixed32,3,opt,name=pixel_fraction,json=pixelFraction" json:"pixel_fraction,omitempty"` +} + +func (m *ColorInfo) Reset() { *m = ColorInfo{} } +func (m *ColorInfo) String() string { return proto.CompactTextString(m) } +func (*ColorInfo) ProtoMessage() {} +func (*ColorInfo) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *ColorInfo) GetColor() *google_type.Color { + if m != nil { + return m.Color + } + return nil +} + +func (m *ColorInfo) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *ColorInfo) GetPixelFraction() float32 { + if m != nil { + return m.PixelFraction + } + return 0 +} + +// Set of dominant colors and their corresponding scores. +type DominantColorsAnnotation struct { + // RGB color values with their score and pixel fraction. + Colors []*ColorInfo `protobuf:"bytes,1,rep,name=colors" json:"colors,omitempty"` +} + +func (m *DominantColorsAnnotation) Reset() { *m = DominantColorsAnnotation{} } +func (m *DominantColorsAnnotation) String() string { return proto.CompactTextString(m) } +func (*DominantColorsAnnotation) ProtoMessage() {} +func (*DominantColorsAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *DominantColorsAnnotation) GetColors() []*ColorInfo { + if m != nil { + return m.Colors + } + return nil +} + +// Stores image properties, such as dominant colors. +type ImageProperties struct { + // If present, dominant colors completed successfully. + DominantColors *DominantColorsAnnotation `protobuf:"bytes,1,opt,name=dominant_colors,json=dominantColors" json:"dominant_colors,omitempty"` +} + +func (m *ImageProperties) Reset() { *m = ImageProperties{} } +func (m *ImageProperties) String() string { return proto.CompactTextString(m) } +func (*ImageProperties) ProtoMessage() {} +func (*ImageProperties) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *ImageProperties) GetDominantColors() *DominantColorsAnnotation { + if m != nil { + return m.DominantColors + } + return nil +} + +// Single crop hint that is used to generate a new crop when serving an image. +type CropHint struct { + // The bounding polygon for the crop region. The coordinates of the bounding + // box are in the original image's scale, as returned in `ImageParams`. + BoundingPoly *BoundingPoly `protobuf:"bytes,1,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // Confidence of this being a salient region. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` + // Fraction of importance of this salient region with respect to the original + // image. + ImportanceFraction float32 `protobuf:"fixed32,3,opt,name=importance_fraction,json=importanceFraction" json:"importance_fraction,omitempty"` +} + +func (m *CropHint) Reset() { *m = CropHint{} } +func (m *CropHint) String() string { return proto.CompactTextString(m) } +func (*CropHint) ProtoMessage() {} +func (*CropHint) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *CropHint) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *CropHint) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func (m *CropHint) GetImportanceFraction() float32 { + if m != nil { + return m.ImportanceFraction + } + return 0 +} + +// Set of crop hints that are used to generate new crops when serving images. +type CropHintsAnnotation struct { + CropHints []*CropHint `protobuf:"bytes,1,rep,name=crop_hints,json=cropHints" json:"crop_hints,omitempty"` +} + +func (m *CropHintsAnnotation) Reset() { *m = CropHintsAnnotation{} } +func (m *CropHintsAnnotation) String() string { return proto.CompactTextString(m) } +func (*CropHintsAnnotation) ProtoMessage() {} +func (*CropHintsAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *CropHintsAnnotation) GetCropHints() []*CropHint { + if m != nil { + return m.CropHints + } + return nil +} + +// Parameters for crop hints annotation request. +type CropHintsParams struct { + // Aspect ratios in floats, representing the ratio of the width to the height + // of the image. For example, if the desired aspect ratio is 4/3, the + // corresponding float value should be 1.33333. If not specified, the + // best possible crop is returned. The number of provided aspect ratios is + // limited to a maximum of 16; any aspect ratios provided after the 16th are + // ignored. + AspectRatios []float32 `protobuf:"fixed32,1,rep,packed,name=aspect_ratios,json=aspectRatios" json:"aspect_ratios,omitempty"` +} + +func (m *CropHintsParams) Reset() { *m = CropHintsParams{} } +func (m *CropHintsParams) String() string { return proto.CompactTextString(m) } +func (*CropHintsParams) ProtoMessage() {} +func (*CropHintsParams) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *CropHintsParams) GetAspectRatios() []float32 { + if m != nil { + return m.AspectRatios + } + return nil +} + +// Image context and/or feature-specific parameters. +type ImageContext struct { + // lat/long rectangle that specifies the location of the image. + LatLongRect *LatLongRect `protobuf:"bytes,1,opt,name=lat_long_rect,json=latLongRect" json:"lat_long_rect,omitempty"` + // List of languages to use for TEXT_DETECTION. In most cases, an empty value + // yields the best results since it enables automatic language detection. For + // languages based on the Latin alphabet, setting `language_hints` is not + // needed. In rare cases, when the language of the text in the image is known, + // setting a hint will help get better results (although it will be a + // significant hindrance if the hint is wrong). Text detection returns an + // error if one or more of the specified languages is not one of the + // [supported languages](/vision/docs/languages). + LanguageHints []string `protobuf:"bytes,2,rep,name=language_hints,json=languageHints" json:"language_hints,omitempty"` + // Parameters for crop hints annotation request. + CropHintsParams *CropHintsParams `protobuf:"bytes,4,opt,name=crop_hints_params,json=cropHintsParams" json:"crop_hints_params,omitempty"` +} + +func (m *ImageContext) Reset() { *m = ImageContext{} } +func (m *ImageContext) String() string { return proto.CompactTextString(m) } +func (*ImageContext) ProtoMessage() {} +func (*ImageContext) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *ImageContext) GetLatLongRect() *LatLongRect { + if m != nil { + return m.LatLongRect + } + return nil +} + +func (m *ImageContext) GetLanguageHints() []string { + if m != nil { + return m.LanguageHints + } + return nil +} + +func (m *ImageContext) GetCropHintsParams() *CropHintsParams { + if m != nil { + return m.CropHintsParams + } + return nil +} + +// Request for performing Google Cloud Vision API tasks over a user-provided +// image, with user-requested features. +type AnnotateImageRequest struct { + // The image to be processed. + Image *Image `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` + // Requested features. + Features []*Feature `protobuf:"bytes,2,rep,name=features" json:"features,omitempty"` + // Additional context that may accompany the image. + ImageContext *ImageContext `protobuf:"bytes,3,opt,name=image_context,json=imageContext" json:"image_context,omitempty"` +} + +func (m *AnnotateImageRequest) Reset() { *m = AnnotateImageRequest{} } +func (m *AnnotateImageRequest) String() string { return proto.CompactTextString(m) } +func (*AnnotateImageRequest) ProtoMessage() {} +func (*AnnotateImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *AnnotateImageRequest) GetImage() *Image { + if m != nil { + return m.Image + } + return nil +} + +func (m *AnnotateImageRequest) GetFeatures() []*Feature { + if m != nil { + return m.Features + } + return nil +} + +func (m *AnnotateImageRequest) GetImageContext() *ImageContext { + if m != nil { + return m.ImageContext + } + return nil +} + +// Response to an image annotation request. +type AnnotateImageResponse struct { + // If present, face detection has completed successfully. + FaceAnnotations []*FaceAnnotation `protobuf:"bytes,1,rep,name=face_annotations,json=faceAnnotations" json:"face_annotations,omitempty"` + // If present, landmark detection has completed successfully. + LandmarkAnnotations []*EntityAnnotation `protobuf:"bytes,2,rep,name=landmark_annotations,json=landmarkAnnotations" json:"landmark_annotations,omitempty"` + // If present, logo detection has completed successfully. + LogoAnnotations []*EntityAnnotation `protobuf:"bytes,3,rep,name=logo_annotations,json=logoAnnotations" json:"logo_annotations,omitempty"` + // If present, label detection has completed successfully. + LabelAnnotations []*EntityAnnotation `protobuf:"bytes,4,rep,name=label_annotations,json=labelAnnotations" json:"label_annotations,omitempty"` + // If present, text (OCR) detection or document (OCR) text detection has + // completed successfully. + TextAnnotations []*EntityAnnotation `protobuf:"bytes,5,rep,name=text_annotations,json=textAnnotations" json:"text_annotations,omitempty"` + // If present, text (OCR) detection or document (OCR) text detection has + // completed successfully. + // This annotation provides the structural hierarchy for the OCR detected + // text. + FullTextAnnotation *TextAnnotation `protobuf:"bytes,12,opt,name=full_text_annotation,json=fullTextAnnotation" json:"full_text_annotation,omitempty"` + // If present, safe-search annotation has completed successfully. + SafeSearchAnnotation *SafeSearchAnnotation `protobuf:"bytes,6,opt,name=safe_search_annotation,json=safeSearchAnnotation" json:"safe_search_annotation,omitempty"` + // If present, image properties were extracted successfully. + ImagePropertiesAnnotation *ImageProperties `protobuf:"bytes,8,opt,name=image_properties_annotation,json=imagePropertiesAnnotation" json:"image_properties_annotation,omitempty"` + // If present, crop hints have completed successfully. + CropHintsAnnotation *CropHintsAnnotation `protobuf:"bytes,11,opt,name=crop_hints_annotation,json=cropHintsAnnotation" json:"crop_hints_annotation,omitempty"` + // If present, web detection has completed successfully. + WebDetection *WebDetection `protobuf:"bytes,13,opt,name=web_detection,json=webDetection" json:"web_detection,omitempty"` + // If set, represents the error message for the operation. + // Note that filled-in image annotations are guaranteed to be + // correct, even when `error` is set. + Error *google_rpc.Status `protobuf:"bytes,9,opt,name=error" json:"error,omitempty"` +} + +func (m *AnnotateImageResponse) Reset() { *m = AnnotateImageResponse{} } +func (m *AnnotateImageResponse) String() string { return proto.CompactTextString(m) } +func (*AnnotateImageResponse) ProtoMessage() {} +func (*AnnotateImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *AnnotateImageResponse) GetFaceAnnotations() []*FaceAnnotation { + if m != nil { + return m.FaceAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLandmarkAnnotations() []*EntityAnnotation { + if m != nil { + return m.LandmarkAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLogoAnnotations() []*EntityAnnotation { + if m != nil { + return m.LogoAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLabelAnnotations() []*EntityAnnotation { + if m != nil { + return m.LabelAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetTextAnnotations() []*EntityAnnotation { + if m != nil { + return m.TextAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetFullTextAnnotation() *TextAnnotation { + if m != nil { + return m.FullTextAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetSafeSearchAnnotation() *SafeSearchAnnotation { + if m != nil { + return m.SafeSearchAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetImagePropertiesAnnotation() *ImageProperties { + if m != nil { + return m.ImagePropertiesAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetCropHintsAnnotation() *CropHintsAnnotation { + if m != nil { + return m.CropHintsAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetWebDetection() *WebDetection { + if m != nil { + return m.WebDetection + } + return nil +} + +func (m *AnnotateImageResponse) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +// Multiple image annotation requests are batched into a single service call. +type BatchAnnotateImagesRequest struct { + // Individual image annotation requests for this batch. + Requests []*AnnotateImageRequest `protobuf:"bytes,1,rep,name=requests" json:"requests,omitempty"` +} + +func (m *BatchAnnotateImagesRequest) Reset() { *m = BatchAnnotateImagesRequest{} } +func (m *BatchAnnotateImagesRequest) String() string { return proto.CompactTextString(m) } +func (*BatchAnnotateImagesRequest) ProtoMessage() {} +func (*BatchAnnotateImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } + +func (m *BatchAnnotateImagesRequest) GetRequests() []*AnnotateImageRequest { + if m != nil { + return m.Requests + } + return nil +} + +// Response to a batch image annotation request. +type BatchAnnotateImagesResponse struct { + // Individual responses to image annotation requests within the batch. + Responses []*AnnotateImageResponse `protobuf:"bytes,1,rep,name=responses" json:"responses,omitempty"` +} + +func (m *BatchAnnotateImagesResponse) Reset() { *m = BatchAnnotateImagesResponse{} } +func (m *BatchAnnotateImagesResponse) String() string { return proto.CompactTextString(m) } +func (*BatchAnnotateImagesResponse) ProtoMessage() {} +func (*BatchAnnotateImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } + +func (m *BatchAnnotateImagesResponse) GetResponses() []*AnnotateImageResponse { + if m != nil { + return m.Responses + } + return nil +} + +func init() { + proto.RegisterType((*Feature)(nil), "google.cloud.vision.v1.Feature") + proto.RegisterType((*ImageSource)(nil), "google.cloud.vision.v1.ImageSource") + proto.RegisterType((*Image)(nil), "google.cloud.vision.v1.Image") + proto.RegisterType((*FaceAnnotation)(nil), "google.cloud.vision.v1.FaceAnnotation") + proto.RegisterType((*FaceAnnotation_Landmark)(nil), "google.cloud.vision.v1.FaceAnnotation.Landmark") + proto.RegisterType((*LocationInfo)(nil), "google.cloud.vision.v1.LocationInfo") + proto.RegisterType((*Property)(nil), "google.cloud.vision.v1.Property") + proto.RegisterType((*EntityAnnotation)(nil), "google.cloud.vision.v1.EntityAnnotation") + proto.RegisterType((*SafeSearchAnnotation)(nil), "google.cloud.vision.v1.SafeSearchAnnotation") + proto.RegisterType((*LatLongRect)(nil), "google.cloud.vision.v1.LatLongRect") + proto.RegisterType((*ColorInfo)(nil), "google.cloud.vision.v1.ColorInfo") + proto.RegisterType((*DominantColorsAnnotation)(nil), "google.cloud.vision.v1.DominantColorsAnnotation") + proto.RegisterType((*ImageProperties)(nil), "google.cloud.vision.v1.ImageProperties") + proto.RegisterType((*CropHint)(nil), "google.cloud.vision.v1.CropHint") + proto.RegisterType((*CropHintsAnnotation)(nil), "google.cloud.vision.v1.CropHintsAnnotation") + proto.RegisterType((*CropHintsParams)(nil), "google.cloud.vision.v1.CropHintsParams") + proto.RegisterType((*ImageContext)(nil), "google.cloud.vision.v1.ImageContext") + proto.RegisterType((*AnnotateImageRequest)(nil), "google.cloud.vision.v1.AnnotateImageRequest") + proto.RegisterType((*AnnotateImageResponse)(nil), "google.cloud.vision.v1.AnnotateImageResponse") + proto.RegisterType((*BatchAnnotateImagesRequest)(nil), "google.cloud.vision.v1.BatchAnnotateImagesRequest") + proto.RegisterType((*BatchAnnotateImagesResponse)(nil), "google.cloud.vision.v1.BatchAnnotateImagesResponse") + proto.RegisterEnum("google.cloud.vision.v1.Likelihood", Likelihood_name, Likelihood_value) + proto.RegisterEnum("google.cloud.vision.v1.Feature_Type", Feature_Type_name, Feature_Type_value) + proto.RegisterEnum("google.cloud.vision.v1.FaceAnnotation_Landmark_Type", FaceAnnotation_Landmark_Type_name, FaceAnnotation_Landmark_Type_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ImageAnnotator service + +type ImageAnnotatorClient interface { + // Run image detection and annotation for a batch of images. + BatchAnnotateImages(ctx context.Context, in *BatchAnnotateImagesRequest, opts ...grpc.CallOption) (*BatchAnnotateImagesResponse, error) +} + +type imageAnnotatorClient struct { + cc *grpc.ClientConn +} + +func NewImageAnnotatorClient(cc *grpc.ClientConn) ImageAnnotatorClient { + return &imageAnnotatorClient{cc} +} + +func (c *imageAnnotatorClient) BatchAnnotateImages(ctx context.Context, in *BatchAnnotateImagesRequest, opts ...grpc.CallOption) (*BatchAnnotateImagesResponse, error) { + out := new(BatchAnnotateImagesResponse) + err := grpc.Invoke(ctx, "/google.cloud.vision.v1.ImageAnnotator/BatchAnnotateImages", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ImageAnnotator service + +type ImageAnnotatorServer interface { + // Run image detection and annotation for a batch of images. + BatchAnnotateImages(context.Context, *BatchAnnotateImagesRequest) (*BatchAnnotateImagesResponse, error) +} + +func RegisterImageAnnotatorServer(s *grpc.Server, srv ImageAnnotatorServer) { + s.RegisterService(&_ImageAnnotator_serviceDesc, srv) +} + +func _ImageAnnotator_BatchAnnotateImages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchAnnotateImagesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ImageAnnotatorServer).BatchAnnotateImages(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.vision.v1.ImageAnnotator/BatchAnnotateImages", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ImageAnnotatorServer).BatchAnnotateImages(ctx, req.(*BatchAnnotateImagesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ImageAnnotator_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.vision.v1.ImageAnnotator", + HandlerType: (*ImageAnnotatorServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "BatchAnnotateImages", + Handler: _ImageAnnotator_BatchAnnotateImages_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/vision/v1/image_annotator.proto", +} + +func init() { proto.RegisterFile("google/cloud/vision/v1/image_annotator.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 2281 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4b, 0x73, 0x23, 0x49, + 0xf1, 0x5f, 0xc9, 0x2f, 0x29, 0xf5, 0x6a, 0x97, 0x1f, 0xa3, 0xb1, 0xe7, 0xe1, 0xed, 0xfd, 0xcf, + 0x1f, 0xc7, 0x30, 0xd8, 0x8c, 0x67, 0x21, 0x96, 0x9d, 0x09, 0x40, 0x92, 0xdb, 0xb6, 0x62, 0x64, + 0x49, 0x5b, 0x92, 0xd7, 0x6b, 0x20, 0xe8, 0x68, 0xb7, 0x4a, 0x9a, 0x9e, 0x6d, 0x75, 0x35, 0xdd, + 0xad, 0x19, 0xfb, 0x4a, 0x04, 0x11, 0xdc, 0xb9, 0x73, 0xe4, 0x4e, 0x04, 0x5f, 0x81, 0x03, 0x47, + 0x62, 0xcf, 0xdc, 0xf8, 0x0c, 0x04, 0x47, 0xa2, 0x1e, 0xdd, 0x2a, 0x69, 0x2c, 0x8f, 0x4c, 0x70, + 0x52, 0x57, 0x66, 0xfe, 0x7e, 0x59, 0x95, 0x55, 0x59, 0x59, 0x55, 0x82, 0x67, 0x03, 0x4a, 0x07, + 0x2e, 0xd9, 0xb7, 0x5d, 0x3a, 0xea, 0xed, 0xbf, 0x73, 0x42, 0x87, 0x7a, 0xfb, 0xef, 0x9e, 0xef, + 0x3b, 0x43, 0x6b, 0x40, 0x4c, 0xcb, 0xf3, 0x68, 0x64, 0x45, 0x34, 0xd8, 0xf3, 0x03, 0x1a, 0x51, + 0xb4, 0x29, 0xac, 0xf7, 0xb8, 0xf5, 0x9e, 0xb0, 0xde, 0x7b, 0xf7, 0x7c, 0xeb, 0x81, 0x64, 0xb1, + 0x7c, 0x67, 0x5f, 0x62, 0x1c, 0xea, 0x85, 0x02, 0xb5, 0xf5, 0x64, 0x86, 0x8f, 0x01, 0xa1, 0x43, + 0x12, 0x05, 0xd7, 0xd2, 0x6c, 0x56, 0x57, 0x22, 0x72, 0x15, 0x99, 0x63, 0x56, 0x69, 0xfd, 0x74, + 0x86, 0xf5, 0x7b, 0x72, 0x69, 0xf6, 0x48, 0x44, 0x6c, 0xc5, 0xf6, 0x9e, 0xb4, 0x0d, 0x7c, 0x7b, + 0x3f, 0x8c, 0xac, 0x68, 0x14, 0x4e, 0x29, 0xa2, 0x6b, 0x9f, 0xec, 0xdb, 0xd4, 0x8d, 0x07, 0xba, + 0x55, 0x56, 0x15, 0xae, 0x15, 0xb9, 0xde, 0x40, 0x68, 0xf4, 0x7f, 0xa4, 0x61, 0xe5, 0x88, 0x58, + 0xd1, 0x28, 0x20, 0xe8, 0x0b, 0x58, 0x64, 0x06, 0xe5, 0xd4, 0x4e, 0x6a, 0xb7, 0x78, 0xf0, 0x7f, + 0x7b, 0x37, 0x47, 0x67, 0x4f, 0x9a, 0xef, 0x75, 0xaf, 0x7d, 0x82, 0x39, 0x02, 0x3d, 0x86, 0xdc, + 0xd0, 0xba, 0x32, 0x03, 0x12, 0x8e, 0xdc, 0x28, 0x2c, 0xa7, 0x77, 0x52, 0xbb, 0x4b, 0x18, 0x86, + 0xd6, 0x15, 0x16, 0x12, 0xfd, 0x5f, 0x29, 0x58, 0x64, 0xf6, 0x68, 0x1d, 0xb4, 0xee, 0x45, 0xdb, + 0x30, 0xcf, 0x9a, 0x9d, 0xb6, 0x51, 0xab, 0x1f, 0xd5, 0x8d, 0x43, 0xed, 0x13, 0x84, 0xa0, 0x78, + 0x54, 0xa9, 0x19, 0xe6, 0xa1, 0xd1, 0x35, 0x6a, 0xdd, 0x7a, 0xab, 0xa9, 0xa5, 0xd0, 0x26, 0xa0, + 0x46, 0xa5, 0x79, 0x78, 0x5a, 0xc1, 0xaf, 0x15, 0x79, 0x9a, 0xd9, 0x36, 0x5a, 0xc7, 0x2d, 0x45, + 0xb6, 0x80, 0xd6, 0xa0, 0xd4, 0xa8, 0x54, 0x8d, 0x86, 0x22, 0x5c, 0x64, 0x86, 0x5d, 0xe3, 0x9b, + 0xae, 0x22, 0x5b, 0x42, 0xdb, 0x70, 0xef, 0xb0, 0x55, 0x3b, 0x3b, 0x35, 0x9a, 0x5d, 0x73, 0x4a, + 0x99, 0x43, 0xf7, 0x61, 0xa3, 0x53, 0x39, 0x32, 0xcc, 0x8e, 0x51, 0xc1, 0xb5, 0x13, 0x45, 0xb5, + 0xcc, 0xba, 0x5d, 0x3f, 0xad, 0x1c, 0x1b, 0x66, 0x1b, 0xb7, 0xda, 0x06, 0xee, 0xd6, 0x8d, 0x8e, + 0xb6, 0x82, 0x8a, 0x00, 0x35, 0xdc, 0x6a, 0x9b, 0x27, 0xf5, 0x66, 0xb7, 0xa3, 0x65, 0xd1, 0x2a, + 0x14, 0xce, 0x8d, 0xaa, 0x02, 0x04, 0xbd, 0x09, 0xb9, 0x3a, 0x5b, 0x7b, 0x1d, 0x3a, 0x0a, 0x6c, + 0x82, 0x74, 0x28, 0x0c, 0xec, 0xd0, 0x14, 0xcb, 0x71, 0x14, 0x38, 0x3c, 0xd6, 0x59, 0x9c, 0x1b, + 0xd8, 0x21, 0x37, 0x3b, 0x0b, 0x1c, 0xb4, 0x0d, 0xd9, 0xb1, 0x3e, 0xcd, 0xf5, 0x19, 0x47, 0x2a, + 0xf5, 0x5f, 0xc3, 0x12, 0x37, 0x44, 0x65, 0x58, 0xb1, 0xa9, 0x17, 0x11, 0x2f, 0xe2, 0x1c, 0x79, + 0x1c, 0x37, 0xd1, 0x4b, 0x58, 0x0e, 0xb9, 0x37, 0x0e, 0xce, 0x1d, 0x7c, 0x36, 0x6b, 0x22, 0x95, + 0x8e, 0x61, 0x09, 0xd1, 0xff, 0x5e, 0x82, 0xe2, 0x91, 0x65, 0x93, 0x4a, 0xb2, 0x40, 0x51, 0x1d, + 0x0a, 0x97, 0x74, 0xe4, 0xf5, 0x1c, 0x6f, 0x60, 0xfa, 0xd4, 0xbd, 0xe6, 0xfe, 0x72, 0xb3, 0xd7, + 0x47, 0x55, 0x1a, 0xb7, 0xa9, 0x7b, 0x8d, 0xf3, 0x97, 0x4a, 0x0b, 0x35, 0x41, 0xeb, 0xf7, 0xcc, + 0x49, 0xb6, 0xf4, 0x1d, 0xd8, 0x8a, 0xfd, 0x9e, 0xda, 0x46, 0xa7, 0x90, 0x75, 0x2d, 0xaf, 0x37, + 0xb4, 0x82, 0x6f, 0xc3, 0xf2, 0xc2, 0xce, 0xc2, 0x6e, 0xee, 0x60, 0x7f, 0xe6, 0xb2, 0x9d, 0x18, + 0xd5, 0x5e, 0x43, 0xe2, 0xf0, 0x98, 0x01, 0x3d, 0x04, 0x08, 0xa8, 0xeb, 0x9a, 0x96, 0x37, 0x70, + 0x49, 0x79, 0x71, 0x27, 0xb5, 0x9b, 0xc6, 0x59, 0x26, 0xa9, 0x30, 0x01, 0x9b, 0x18, 0xdf, 0xf2, + 0xa4, 0x76, 0x89, 0x6b, 0x33, 0xbe, 0xe5, 0x09, 0xe5, 0x43, 0x80, 0xc8, 0x71, 0x23, 0xa9, 0x5d, + 0x16, 0x58, 0x26, 0x11, 0xea, 0xe7, 0xb0, 0x9e, 0xa4, 0xb1, 0x69, 0x53, 0xaf, 0xef, 0xf4, 0x88, + 0x67, 0x93, 0xf2, 0x0a, 0x37, 0x5c, 0x4b, 0x74, 0xb5, 0x44, 0x85, 0x7e, 0x04, 0x9b, 0x71, 0xd7, + 0x58, 0xb0, 0x14, 0x50, 0x86, 0x83, 0x36, 0x14, 0xad, 0x02, 0xab, 0x43, 0xf1, 0x2d, 0xbd, 0x36, + 0x5d, 0xe7, 0x5b, 0xe2, 0x3a, 0x6f, 0x28, 0xed, 0x95, 0xb3, 0x3c, 0x9f, 0xf5, 0x59, 0x81, 0x69, + 0x24, 0x96, 0xb8, 0xf0, 0x96, 0x5e, 0x8f, 0x9b, 0xa8, 0x05, 0xab, 0x21, 0x0d, 0x02, 0xfa, 0x5e, + 0x65, 0x83, 0xb9, 0xd9, 0x34, 0x01, 0x56, 0x08, 0x4f, 0x41, 0xb3, 0xbc, 0x01, 0x09, 0x54, 0xbe, + 0xdc, 0xdc, 0x7c, 0x25, 0x8e, 0x55, 0xe8, 0x3a, 0xb0, 0x16, 0x8e, 0x02, 0x3f, 0x70, 0x42, 0xa2, + 0x32, 0xe6, 0xe7, 0x66, 0x44, 0x31, 0x5c, 0x21, 0xfd, 0x15, 0x94, 0x47, 0x5e, 0x8f, 0x04, 0x26, + 0xb9, 0xf2, 0x69, 0x48, 0x7a, 0x2a, 0x73, 0x61, 0x6e, 0xe6, 0x4d, 0xce, 0x61, 0x08, 0x0a, 0x85, + 0xfd, 0x2b, 0x40, 0x97, 0xee, 0x28, 0x08, 0x26, 0x79, 0x8b, 0x73, 0xf3, 0xae, 0x4a, 0xf4, 0x64, + 0x14, 0xde, 0x10, 0xab, 0xf7, 0x9e, 0x58, 0x13, 0x71, 0x2d, 0xcd, 0x1f, 0x85, 0x18, 0x3e, 0x96, + 0x6d, 0xfd, 0x6d, 0x05, 0x32, 0x71, 0x8a, 0xa0, 0x13, 0x59, 0x18, 0x16, 0x38, 0xe5, 0xe7, 0x77, + 0xcc, 0x30, 0xb5, 0x50, 0xbc, 0x82, 0x8c, 0x4f, 0x43, 0x87, 0xe9, 0x79, 0x7e, 0xe5, 0x0e, 0x76, + 0x66, 0xb1, 0xb5, 0xa5, 0x1d, 0x4e, 0x10, 0xfa, 0x5f, 0x96, 0xc7, 0x55, 0xe4, 0xac, 0xf9, 0xba, + 0xd9, 0x3a, 0x6f, 0x9a, 0x71, 0x8d, 0xd0, 0x3e, 0x41, 0x79, 0xc8, 0x34, 0x8c, 0xa3, 0xae, 0x69, + 0x5c, 0x18, 0x5a, 0x0a, 0x15, 0x20, 0x8b, 0xeb, 0xc7, 0x27, 0xa2, 0x99, 0x46, 0x65, 0x58, 0xe7, + 0xca, 0xd6, 0x91, 0x19, 0x1b, 0x55, 0x71, 0xeb, 0x5c, 0x5b, 0x60, 0xdb, 0xbe, 0x30, 0x9c, 0x56, + 0x2d, 0x32, 0x55, 0x0c, 0x4a, 0xb8, 0xb8, 0x6a, 0x09, 0x6d, 0xc1, 0x66, 0x82, 0x9a, 0xd4, 0x2d, + 0x33, 0xd8, 0x69, 0xfd, 0xb0, 0xdd, 0xaa, 0x37, 0xbb, 0x66, 0xd5, 0xe8, 0x9e, 0x1b, 0x46, 0x93, + 0x69, 0x59, 0xc9, 0xc8, 0x43, 0xa6, 0xd9, 0xea, 0x18, 0x66, 0xb7, 0xde, 0xd6, 0x32, 0xac, 0x8f, + 0x67, 0xed, 0xb6, 0x81, 0xcd, 0x46, 0xbd, 0xad, 0x65, 0x59, 0xb3, 0xd1, 0x3a, 0x97, 0x4d, 0x60, + 0xe5, 0xe5, 0xb4, 0x75, 0xd6, 0x3d, 0xe1, 0xbd, 0xd2, 0x72, 0xa8, 0x04, 0x39, 0xd1, 0xe6, 0xfe, + 0xb4, 0x3c, 0xd2, 0x20, 0x2f, 0x04, 0x35, 0xa3, 0xd9, 0x35, 0xb0, 0x56, 0x40, 0x1b, 0xb0, 0xca, + 0xe9, 0xab, 0xad, 0x6e, 0xb7, 0x75, 0x2a, 0x0d, 0x8b, 0x2c, 0x5e, 0xaa, 0x98, 0xf3, 0x95, 0x58, + 0x85, 0x55, 0xa5, 0x92, 0x44, 0x4b, 0x46, 0x6d, 0x5c, 0x18, 0x66, 0xb7, 0xd5, 0x36, 0xab, 0xad, + 0xb3, 0xe6, 0x61, 0x05, 0x5f, 0x68, 0xab, 0x13, 0x2a, 0x31, 0xea, 0x5a, 0x0b, 0x37, 0x0d, 0xac, + 0x21, 0xf4, 0x00, 0xca, 0x89, 0x4a, 0x32, 0x26, 0xc0, 0xb5, 0x24, 0xfc, 0x4c, 0xcb, 0x3f, 0x24, + 0x6e, 0x7d, 0x1c, 0xc8, 0x0f, 0xdc, 0x6d, 0x4c, 0xea, 0x26, 0xfc, 0x6d, 0xa2, 0x87, 0x70, 0x7f, + 0xac, 0x9b, 0x76, 0x78, 0x6f, 0x3c, 0xab, 0xd3, 0x1e, 0xcb, 0xe8, 0x31, 0x6c, 0xab, 0xf3, 0x6c, + 0x8a, 0x29, 0x88, 0x67, 0x4c, 0xbb, 0x8f, 0x76, 0xe0, 0xc1, 0xc4, 0x94, 0x4e, 0x5b, 0x6c, 0xb1, + 0x80, 0x0a, 0x8a, 0x0a, 0x36, 0xbb, 0xb8, 0x72, 0xcc, 0x8a, 0xfd, 0x36, 0x8b, 0xbe, 0xc4, 0x29, + 0xe2, 0x07, 0xfc, 0xc4, 0x12, 0x8f, 0xbd, 0x7d, 0xd6, 0xae, 0x37, 0xb4, 0x87, 0xec, 0xc4, 0x32, + 0xee, 0x9e, 0x10, 0x3e, 0x62, 0xf8, 0xa3, 0x16, 0x36, 0x4e, 0x8c, 0xca, 0xa1, 0x79, 0xcc, 0x0f, + 0x34, 0x8d, 0x8a, 0xf6, 0x98, 0x1d, 0x2b, 0x6a, 0x27, 0xf5, 0xa6, 0x79, 0xdc, 0xac, 0x74, 0x4f, + 0x18, 0xe5, 0x0e, 0xf3, 0xcf, 0x45, 0x9c, 0xf7, 0xb8, 0xd5, 0x64, 0xd2, 0x4f, 0x19, 0x9e, 0x4b, + 0x05, 0xb3, 0x14, 0xeb, 0xfa, 0x2b, 0xc8, 0x37, 0xa8, 0xcd, 0x93, 0xb2, 0xee, 0xf5, 0x29, 0x7a, + 0x06, 0x2b, 0xae, 0x15, 0x99, 0xae, 0x37, 0x90, 0xa5, 0x7c, 0x2d, 0xce, 0x41, 0x96, 0xa3, 0x7b, + 0x0d, 0x2b, 0x6a, 0x78, 0x03, 0xbc, 0xec, 0xf2, 0x5f, 0xfd, 0x73, 0xc8, 0xb4, 0x03, 0xea, 0x93, + 0x20, 0xba, 0x46, 0x08, 0x16, 0x3d, 0x6b, 0x48, 0xe4, 0xa9, 0x85, 0x7f, 0xa3, 0x75, 0x58, 0x7a, + 0x67, 0xb9, 0x23, 0x22, 0x8f, 0x2a, 0xa2, 0xa1, 0xff, 0x6e, 0x01, 0x34, 0xc3, 0x8b, 0x9c, 0xe8, + 0x5a, 0x39, 0x49, 0x68, 0xb0, 0x30, 0x74, 0x7a, 0x12, 0xcd, 0x3e, 0xd1, 0x26, 0x2c, 0xbb, 0xd4, + 0xb6, 0xdc, 0x18, 0x2d, 0x5b, 0x68, 0x07, 0x72, 0x3d, 0x12, 0xda, 0x81, 0xe3, 0xf3, 0xad, 0x62, + 0x41, 0x9c, 0x92, 0x14, 0x11, 0x73, 0x1b, 0xda, 0x34, 0x88, 0xcb, 0xb4, 0x68, 0xa0, 0x47, 0x00, + 0x4a, 0x9d, 0x14, 0x35, 0x5a, 0x91, 0x30, 0x7d, 0x44, 0x7d, 0xc7, 0xb6, 0x5c, 0x27, 0xba, 0x96, + 0x55, 0x5a, 0x91, 0x7c, 0x78, 0xd6, 0x59, 0xf9, 0xaf, 0xcf, 0x3a, 0x55, 0xc8, 0xba, 0x32, 0xea, + 0x61, 0x39, 0xc3, 0xcf, 0x26, 0x33, 0x69, 0xd4, 0xe9, 0xc1, 0x63, 0x18, 0xfa, 0x39, 0x80, 0x2f, + 0x62, 0xef, 0x90, 0xb0, 0x9c, 0xe5, 0x24, 0xb3, 0x37, 0x4c, 0x39, 0x4b, 0x58, 0xc1, 0xe8, 0xbf, + 0x4f, 0xc3, 0x7a, 0xc7, 0xea, 0x93, 0x0e, 0xb1, 0x02, 0xfb, 0x8d, 0x32, 0x17, 0x5f, 0xc0, 0x92, + 0xd5, 0x1b, 0xb9, 0x91, 0x3c, 0xed, 0xcf, 0x53, 0x27, 0x04, 0x80, 0x21, 0x43, 0x9f, 0xd2, 0x3e, + 0x9f, 0xb2, 0x39, 0x91, 0x1c, 0x80, 0x5e, 0xc1, 0xca, 0x90, 0xf4, 0x58, 0xac, 0x65, 0x29, 0x99, + 0x07, 0x1b, 0x43, 0xd0, 0x4f, 0x21, 0xf3, 0xce, 0xa1, 0x2e, 0x9f, 0xd9, 0xc5, 0xb9, 0xe1, 0x09, + 0x46, 0x7f, 0x0f, 0x39, 0xb6, 0xb4, 0xa9, 0x37, 0xc0, 0xc4, 0x8e, 0xd0, 0x0b, 0xc8, 0x0d, 0x1d, + 0xcf, 0x9c, 0x23, 0x13, 0xb2, 0x43, 0xc7, 0x13, 0x9f, 0x1c, 0x64, 0x5d, 0x25, 0xa0, 0xf4, 0x6d, + 0x20, 0xeb, 0x4a, 0x7c, 0xea, 0x01, 0x64, 0x6b, 0xec, 0x32, 0xc6, 0x93, 0x6f, 0x17, 0x96, 0xf8, + 0xcd, 0x4c, 0x3a, 0x44, 0x13, 0x58, 0x6e, 0x86, 0x85, 0xc1, 0x78, 0x85, 0xa7, 0xd5, 0x15, 0xfe, + 0x04, 0x8a, 0xbe, 0x73, 0x45, 0x5c, 0xb3, 0x1f, 0x58, 0x76, 0x92, 0x1c, 0x69, 0x5c, 0xe0, 0xd2, + 0x23, 0x29, 0xd4, 0xcf, 0xa0, 0x7c, 0x48, 0x87, 0x8e, 0x67, 0x79, 0x11, 0x27, 0x0d, 0x95, 0xa9, + 0xff, 0x09, 0x2c, 0x73, 0x0f, 0x61, 0x39, 0xc5, 0x57, 0xd4, 0xa7, 0xb3, 0xc2, 0x98, 0xf4, 0x1a, + 0x4b, 0x80, 0xee, 0x42, 0x89, 0xdf, 0x1a, 0xda, 0xc9, 0x0a, 0x43, 0x17, 0x50, 0xea, 0x49, 0x4f, + 0x66, 0x42, 0xcb, 0x86, 0xf6, 0xc3, 0x59, 0xb4, 0xb3, 0x3a, 0x86, 0x8b, 0xbd, 0x09, 0x8d, 0xfe, + 0xa7, 0x14, 0x64, 0x6a, 0x01, 0xf5, 0x4f, 0x1c, 0x2f, 0xfa, 0x5f, 0x5e, 0x43, 0x26, 0x77, 0x89, + 0xf4, 0x07, 0xbb, 0xc4, 0x3e, 0xac, 0x39, 0x43, 0x9f, 0x06, 0x91, 0xe5, 0xd9, 0x64, 0x3a, 0xd0, + 0x68, 0xac, 0x4a, 0xa2, 0xfd, 0x35, 0xac, 0xc5, 0xfd, 0x54, 0x03, 0xfd, 0x33, 0x00, 0x3b, 0xa0, + 0xbe, 0xf9, 0x86, 0xc9, 0x65, 0xb0, 0x67, 0xa6, 0x6f, 0x4c, 0x80, 0xb3, 0x76, 0x4c, 0xa5, 0xff, + 0x18, 0x4a, 0x09, 0x6f, 0xdb, 0x0a, 0xac, 0x61, 0x88, 0x3e, 0x83, 0x82, 0x15, 0xfa, 0xc4, 0x8e, + 0xcc, 0x80, 0x39, 0x11, 0xb4, 0x69, 0x9c, 0x17, 0x42, 0xcc, 0x65, 0xfa, 0x77, 0x29, 0xc8, 0xf3, + 0x79, 0xaa, 0xb1, 0x3b, 0xe1, 0x55, 0x84, 0x8e, 0xa1, 0xc0, 0xd7, 0x2c, 0xf5, 0x06, 0x66, 0x40, + 0xec, 0x48, 0x06, 0x6f, 0xe6, 0xd5, 0x50, 0x49, 0x14, 0x9c, 0x73, 0x95, 0xac, 0x79, 0x02, 0x45, + 0xd7, 0xf2, 0x06, 0x23, 0x76, 0x3f, 0x15, 0xc3, 0x4a, 0xef, 0x2c, 0xec, 0x66, 0x71, 0x21, 0x96, + 0xf2, 0xbe, 0xa2, 0x0e, 0xac, 0x8e, 0x47, 0x6e, 0xfa, 0xbc, 0xeb, 0xf2, 0xc0, 0xf7, 0xbd, 0x8f, + 0x05, 0x40, 0x8e, 0x14, 0x97, 0xec, 0x49, 0x01, 0x1b, 0xd5, 0xba, 0x8c, 0x2e, 0xe1, 0xa3, 0xc3, + 0xe4, 0x37, 0x23, 0x12, 0xb2, 0x54, 0x5e, 0xe2, 0x17, 0x64, 0x39, 0xaa, 0x87, 0xb7, 0x5e, 0x78, + 0xb1, 0xb0, 0x45, 0x2f, 0x21, 0xd3, 0x17, 0x2f, 0x19, 0x62, 0x0c, 0xb9, 0x83, 0xc7, 0x1f, 0x79, + 0xf1, 0xc0, 0x09, 0x80, 0x2d, 0x46, 0x71, 0x47, 0xb7, 0x45, 0x80, 0xf9, 0xda, 0xb8, 0x65, 0x31, + 0xaa, 0x93, 0x81, 0xf3, 0x8e, 0xd2, 0xd2, 0xff, 0xba, 0x02, 0x1b, 0x53, 0xa3, 0x0a, 0x7d, 0xea, + 0x85, 0x04, 0x7d, 0x05, 0x5a, 0xdf, 0xb2, 0x89, 0xf2, 0x58, 0x14, 0x2f, 0xa2, 0xff, 0x9f, 0xef, + 0x08, 0x8e, 0x4b, 0xfd, 0x89, 0x76, 0x88, 0x7e, 0x09, 0xeb, 0xf1, 0xad, 0x71, 0x82, 0x56, 0x04, + 0x60, 0x77, 0x16, 0xed, 0x74, 0x25, 0xc7, 0x6b, 0x31, 0x8b, 0x4a, 0xde, 0x01, 0xcd, 0xa5, 0x03, + 0x3a, 0x41, 0xbc, 0x70, 0x47, 0xe2, 0x12, 0x63, 0x50, 0x49, 0xcf, 0x60, 0xd5, 0xb5, 0x2e, 0x89, + 0x3b, 0xc1, 0xba, 0x78, 0x47, 0x56, 0x8d, 0x53, 0x4c, 0xf5, 0x75, 0xea, 0x21, 0x2e, 0x2c, 0x2f, + 0xdd, 0xb5, 0xaf, 0x8c, 0x41, 0x25, 0xfd, 0x06, 0xd6, 0xfb, 0x23, 0xd7, 0x35, 0xa7, 0x98, 0xf9, + 0x85, 0xf4, 0x96, 0x49, 0xeb, 0x4e, 0xd0, 0x60, 0xc4, 0x38, 0x26, 0x65, 0xe8, 0x12, 0x36, 0x43, + 0xab, 0x4f, 0xcc, 0x90, 0x97, 0x71, 0x95, 0x7b, 0x99, 0x73, 0x3f, 0x9b, 0xc5, 0x7d, 0x53, 0xed, + 0xc7, 0xeb, 0xe1, 0x4d, 0x27, 0x82, 0x01, 0x6c, 0x8b, 0x35, 0x3d, 0x3e, 0x3e, 0xa8, 0x8e, 0x32, + 0xb7, 0x67, 0xef, 0x54, 0x59, 0xc0, 0xf7, 0x9d, 0x49, 0x81, 0xe2, 0xc8, 0x84, 0x0d, 0x65, 0x73, + 0x50, 0x5c, 0xe4, 0xb8, 0x8b, 0xef, 0x7f, 0x74, 0x83, 0x50, 0x17, 0xa2, 0x7d, 0xc3, 0xbe, 0x5b, + 0x87, 0xc2, 0xc4, 0xbb, 0x29, 0xbf, 0xb7, 0xdf, 0x92, 0x9d, 0xe7, 0xe4, 0xf2, 0x30, 0xb6, 0xc5, + 0xf9, 0xf7, 0x4a, 0x8b, 0x95, 0x6b, 0x12, 0x04, 0x34, 0xe0, 0x8f, 0x28, 0x4a, 0xb9, 0x0e, 0x7c, + 0x7b, 0xaf, 0xc3, 0xdf, 0x5e, 0xb1, 0x30, 0xd0, 0xfb, 0xb0, 0x55, 0xb5, 0xa2, 0x24, 0xa2, 0x22, + 0x97, 0xc3, 0x78, 0x8b, 0x3a, 0x81, 0x4c, 0x20, 0x3e, 0xe3, 0x1c, 0x9e, 0x39, 0x65, 0x37, 0x6d, + 0x71, 0x38, 0x41, 0xeb, 0x6f, 0x61, 0xfb, 0x46, 0x3f, 0x72, 0xd3, 0x78, 0x0d, 0xd9, 0x40, 0x7e, + 0xc7, 0x9e, 0x7e, 0x30, 0xa7, 0x27, 0x81, 0xc2, 0x63, 0xfc, 0x53, 0x02, 0xa0, 0x3c, 0x34, 0xe4, + 0x60, 0x45, 0xde, 0xba, 0xb5, 0x4f, 0xd8, 0xa5, 0xe4, 0x6b, 0x03, 0x5f, 0x98, 0x67, 0xcd, 0x46, + 0xfd, 0xb5, 0xd1, 0xb8, 0xd0, 0x52, 0xec, 0x6e, 0x9b, 0xb4, 0xd2, 0xac, 0xd5, 0x6e, 0x75, 0x3a, + 0xf5, 0x6a, 0xc3, 0xd0, 0x16, 0x10, 0xc0, 0xb2, 0xd4, 0x2c, 0xb2, 0x7b, 0x2c, 0x87, 0x4a, 0xc1, + 0xd2, 0xc1, 0x9f, 0x53, 0x50, 0xe4, 0x7d, 0xa8, 0xc4, 0x0f, 0xf4, 0xe8, 0x8f, 0x29, 0x58, 0xbb, + 0x61, 0x98, 0xe8, 0x60, 0x66, 0xb9, 0x9f, 0x19, 0xfb, 0xad, 0x17, 0x77, 0xc2, 0x88, 0xb1, 0xeb, + 0x8f, 0x7e, 0xfb, 0xdd, 0x3f, 0xff, 0x90, 0x2e, 0xeb, 0x6b, 0xc9, 0xdf, 0x07, 0xe1, 0x97, 0x72, + 0xa9, 0x92, 0x2f, 0x53, 0x4f, 0xab, 0x11, 0x6c, 0xd9, 0x74, 0x38, 0x83, 0xb9, 0xba, 0x36, 0x39, + 0x9c, 0x76, 0x40, 0x23, 0xda, 0x4e, 0xfd, 0xe2, 0x95, 0x34, 0x1f, 0x50, 0x56, 0x2e, 0xf7, 0x68, + 0x30, 0xd8, 0x1f, 0x10, 0x8f, 0xbf, 0xc4, 0xef, 0x0b, 0x95, 0xe5, 0x3b, 0xe1, 0xf4, 0x9f, 0x00, + 0x2f, 0xc5, 0xd7, 0xbf, 0x53, 0xa9, 0xcb, 0x65, 0x6e, 0xfb, 0xe2, 0x3f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xe5, 0x59, 0xbe, 0xb0, 0xe8, 0x18, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/text_annotation.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/text_annotation.pb.go new file mode 100644 index 0000000..7262706 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/text_annotation.pb.go @@ -0,0 +1,538 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/vision/v1/text_annotation.proto +// DO NOT EDIT! + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Enum to denote the type of break found. New line, space etc. +type TextAnnotation_DetectedBreak_BreakType int32 + +const ( + // Unknown break label type. + TextAnnotation_DetectedBreak_UNKNOWN TextAnnotation_DetectedBreak_BreakType = 0 + // Regular space. + TextAnnotation_DetectedBreak_SPACE TextAnnotation_DetectedBreak_BreakType = 1 + // Sure space (very wide). + TextAnnotation_DetectedBreak_SURE_SPACE TextAnnotation_DetectedBreak_BreakType = 2 + // Line-wrapping break. + TextAnnotation_DetectedBreak_EOL_SURE_SPACE TextAnnotation_DetectedBreak_BreakType = 3 + // End-line hyphen that is not present in text; does + TextAnnotation_DetectedBreak_HYPHEN TextAnnotation_DetectedBreak_BreakType = 4 + // not co-occur with SPACE, LEADER_SPACE, or + // LINE_BREAK. + // Line break that ends a paragraph. + TextAnnotation_DetectedBreak_LINE_BREAK TextAnnotation_DetectedBreak_BreakType = 5 +) + +var TextAnnotation_DetectedBreak_BreakType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SPACE", + 2: "SURE_SPACE", + 3: "EOL_SURE_SPACE", + 4: "HYPHEN", + 5: "LINE_BREAK", +} +var TextAnnotation_DetectedBreak_BreakType_value = map[string]int32{ + "UNKNOWN": 0, + "SPACE": 1, + "SURE_SPACE": 2, + "EOL_SURE_SPACE": 3, + "HYPHEN": 4, + "LINE_BREAK": 5, +} + +func (x TextAnnotation_DetectedBreak_BreakType) String() string { + return proto.EnumName(TextAnnotation_DetectedBreak_BreakType_name, int32(x)) +} +func (TextAnnotation_DetectedBreak_BreakType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 1, 0} +} + +// Type of a block (text, image etc) as identified by OCR. +type Block_BlockType int32 + +const ( + // Unknown block type. + Block_UNKNOWN Block_BlockType = 0 + // Regular text block. + Block_TEXT Block_BlockType = 1 + // Table block. + Block_TABLE Block_BlockType = 2 + // Image block. + Block_PICTURE Block_BlockType = 3 + // Horizontal/vertical line box. + Block_RULER Block_BlockType = 4 + // Barcode block. + Block_BARCODE Block_BlockType = 5 +) + +var Block_BlockType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "TEXT", + 2: "TABLE", + 3: "PICTURE", + 4: "RULER", + 5: "BARCODE", +} +var Block_BlockType_value = map[string]int32{ + "UNKNOWN": 0, + "TEXT": 1, + "TABLE": 2, + "PICTURE": 3, + "RULER": 4, + "BARCODE": 5, +} + +func (x Block_BlockType) String() string { + return proto.EnumName(Block_BlockType_name, int32(x)) +} +func (Block_BlockType) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{2, 0} } + +// TextAnnotation contains a structured representation of OCR extracted text. +// The hierarchy of an OCR extracted text structure is like this: +// TextAnnotation -> Page -> Block -> Paragraph -> Word -> Symbol +// Each structural component, starting from Page, may further have their own +// properties. Properties describe detected languages, breaks etc.. Please +// refer to the [google.cloud.vision.v1.TextAnnotation.TextProperty][google.cloud.vision.v1.TextAnnotation.TextProperty] message +// definition below for more detail. +type TextAnnotation struct { + // List of pages detected by OCR. + Pages []*Page `protobuf:"bytes,1,rep,name=pages" json:"pages,omitempty"` + // UTF-8 text detected on the pages. + Text string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` +} + +func (m *TextAnnotation) Reset() { *m = TextAnnotation{} } +func (m *TextAnnotation) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation) ProtoMessage() {} +func (*TextAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *TextAnnotation) GetPages() []*Page { + if m != nil { + return m.Pages + } + return nil +} + +func (m *TextAnnotation) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +// Detected language for a structural component. +type TextAnnotation_DetectedLanguage struct { + // The BCP-47 language code, such as "en-US" or "sr-Latn". For more + // information, see + // http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Confidence of detected language. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *TextAnnotation_DetectedLanguage) Reset() { *m = TextAnnotation_DetectedLanguage{} } +func (m *TextAnnotation_DetectedLanguage) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_DetectedLanguage) ProtoMessage() {} +func (*TextAnnotation_DetectedLanguage) Descriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 0} +} + +func (m *TextAnnotation_DetectedLanguage) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *TextAnnotation_DetectedLanguage) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Detected start or end of a structural component. +type TextAnnotation_DetectedBreak struct { + Type TextAnnotation_DetectedBreak_BreakType `protobuf:"varint,1,opt,name=type,enum=google.cloud.vision.v1.TextAnnotation_DetectedBreak_BreakType" json:"type,omitempty"` + // True if break prepends the element. + IsPrefix bool `protobuf:"varint,2,opt,name=is_prefix,json=isPrefix" json:"is_prefix,omitempty"` +} + +func (m *TextAnnotation_DetectedBreak) Reset() { *m = TextAnnotation_DetectedBreak{} } +func (m *TextAnnotation_DetectedBreak) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_DetectedBreak) ProtoMessage() {} +func (*TextAnnotation_DetectedBreak) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 1} } + +func (m *TextAnnotation_DetectedBreak) GetType() TextAnnotation_DetectedBreak_BreakType { + if m != nil { + return m.Type + } + return TextAnnotation_DetectedBreak_UNKNOWN +} + +func (m *TextAnnotation_DetectedBreak) GetIsPrefix() bool { + if m != nil { + return m.IsPrefix + } + return false +} + +// Additional information detected on the structural component. +type TextAnnotation_TextProperty struct { + // A list of detected languages together with confidence. + DetectedLanguages []*TextAnnotation_DetectedLanguage `protobuf:"bytes,1,rep,name=detected_languages,json=detectedLanguages" json:"detected_languages,omitempty"` + // Detected start or end of a text segment. + DetectedBreak *TextAnnotation_DetectedBreak `protobuf:"bytes,2,opt,name=detected_break,json=detectedBreak" json:"detected_break,omitempty"` +} + +func (m *TextAnnotation_TextProperty) Reset() { *m = TextAnnotation_TextProperty{} } +func (m *TextAnnotation_TextProperty) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_TextProperty) ProtoMessage() {} +func (*TextAnnotation_TextProperty) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 2} } + +func (m *TextAnnotation_TextProperty) GetDetectedLanguages() []*TextAnnotation_DetectedLanguage { + if m != nil { + return m.DetectedLanguages + } + return nil +} + +func (m *TextAnnotation_TextProperty) GetDetectedBreak() *TextAnnotation_DetectedBreak { + if m != nil { + return m.DetectedBreak + } + return nil +} + +// Detected page from OCR. +type Page struct { + // Additional information detected on the page. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // Page width in pixels. + Width int32 `protobuf:"varint,2,opt,name=width" json:"width,omitempty"` + // Page height in pixels. + Height int32 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` + // List of blocks of text, images etc on this page. + Blocks []*Block `protobuf:"bytes,4,rep,name=blocks" json:"blocks,omitempty"` +} + +func (m *Page) Reset() { *m = Page{} } +func (m *Page) String() string { return proto.CompactTextString(m) } +func (*Page) ProtoMessage() {} +func (*Page) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *Page) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Page) GetWidth() int32 { + if m != nil { + return m.Width + } + return 0 +} + +func (m *Page) GetHeight() int32 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *Page) GetBlocks() []*Block { + if m != nil { + return m.Blocks + } + return nil +} + +// Logical element on the page. +type Block struct { + // Additional information detected for the block. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the block. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of paragraphs in this block (if this blocks is of type text). + Paragraphs []*Paragraph `protobuf:"bytes,3,rep,name=paragraphs" json:"paragraphs,omitempty"` + // Detected block type (text, image etc) for this block. + BlockType Block_BlockType `protobuf:"varint,4,opt,name=block_type,json=blockType,enum=google.cloud.vision.v1.Block_BlockType" json:"block_type,omitempty"` +} + +func (m *Block) Reset() { *m = Block{} } +func (m *Block) String() string { return proto.CompactTextString(m) } +func (*Block) ProtoMessage() {} +func (*Block) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *Block) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Block) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Block) GetParagraphs() []*Paragraph { + if m != nil { + return m.Paragraphs + } + return nil +} + +func (m *Block) GetBlockType() Block_BlockType { + if m != nil { + return m.BlockType + } + return Block_UNKNOWN +} + +// Structural unit of text representing a number of words in certain order. +type Paragraph struct { + // Additional information detected for the paragraph. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the paragraph. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of words in this paragraph. + Words []*Word `protobuf:"bytes,3,rep,name=words" json:"words,omitempty"` +} + +func (m *Paragraph) Reset() { *m = Paragraph{} } +func (m *Paragraph) String() string { return proto.CompactTextString(m) } +func (*Paragraph) ProtoMessage() {} +func (*Paragraph) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *Paragraph) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Paragraph) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Paragraph) GetWords() []*Word { + if m != nil { + return m.Words + } + return nil +} + +// A word representation. +type Word struct { + // Additional information detected for the word. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the word. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of symbols in the word. + // The order of the symbols follows the natural reading order. + Symbols []*Symbol `protobuf:"bytes,3,rep,name=symbols" json:"symbols,omitempty"` +} + +func (m *Word) Reset() { *m = Word{} } +func (m *Word) String() string { return proto.CompactTextString(m) } +func (*Word) ProtoMessage() {} +func (*Word) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *Word) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Word) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Word) GetSymbols() []*Symbol { + if m != nil { + return m.Symbols + } + return nil +} + +// A single symbol representation. +type Symbol struct { + // Additional information detected for the symbol. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the symbol. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // The actual UTF-8 representation of the symbol. + Text string `protobuf:"bytes,3,opt,name=text" json:"text,omitempty"` +} + +func (m *Symbol) Reset() { *m = Symbol{} } +func (m *Symbol) String() string { return proto.CompactTextString(m) } +func (*Symbol) ProtoMessage() {} +func (*Symbol) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *Symbol) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Symbol) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Symbol) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +func init() { + proto.RegisterType((*TextAnnotation)(nil), "google.cloud.vision.v1.TextAnnotation") + proto.RegisterType((*TextAnnotation_DetectedLanguage)(nil), "google.cloud.vision.v1.TextAnnotation.DetectedLanguage") + proto.RegisterType((*TextAnnotation_DetectedBreak)(nil), "google.cloud.vision.v1.TextAnnotation.DetectedBreak") + proto.RegisterType((*TextAnnotation_TextProperty)(nil), "google.cloud.vision.v1.TextAnnotation.TextProperty") + proto.RegisterType((*Page)(nil), "google.cloud.vision.v1.Page") + proto.RegisterType((*Block)(nil), "google.cloud.vision.v1.Block") + proto.RegisterType((*Paragraph)(nil), "google.cloud.vision.v1.Paragraph") + proto.RegisterType((*Word)(nil), "google.cloud.vision.v1.Word") + proto.RegisterType((*Symbol)(nil), "google.cloud.vision.v1.Symbol") + proto.RegisterEnum("google.cloud.vision.v1.TextAnnotation_DetectedBreak_BreakType", TextAnnotation_DetectedBreak_BreakType_name, TextAnnotation_DetectedBreak_BreakType_value) + proto.RegisterEnum("google.cloud.vision.v1.Block_BlockType", Block_BlockType_name, Block_BlockType_value) +} + +func init() { proto.RegisterFile("google/cloud/vision/v1/text_annotation.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 744 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0x4f, 0x6f, 0xd3, 0x4e, + 0x10, 0xfd, 0xb9, 0xb1, 0xd3, 0x78, 0xd2, 0x46, 0xfe, 0x2d, 0xa8, 0x8a, 0x42, 0xa9, 0x8a, 0x01, + 0xd1, 0x03, 0x72, 0xd4, 0x14, 0x04, 0x12, 0x08, 0x29, 0x4e, 0x0d, 0xad, 0x1a, 0x25, 0xd6, 0x36, + 0x51, 0xf9, 0x73, 0xb0, 0xfc, 0x67, 0xeb, 0x58, 0x4d, 0xbd, 0x96, 0xed, 0xb6, 0xc9, 0x8d, 0x4f, + 0xc5, 0x89, 0x6f, 0xc1, 0x09, 0xee, 0x9c, 0xb9, 0x72, 0x44, 0x5e, 0xdb, 0x69, 0x52, 0x61, 0x04, + 0x88, 0x43, 0x2f, 0xd6, 0xce, 0xe4, 0xed, 0xdb, 0xf7, 0x66, 0x33, 0x3b, 0xf0, 0xd0, 0xa5, 0xd4, + 0x1d, 0x93, 0xa6, 0x3d, 0xa6, 0x67, 0x4e, 0xf3, 0xdc, 0x8b, 0x3c, 0xea, 0x37, 0xcf, 0xb7, 0x9b, + 0x31, 0x99, 0xc4, 0x86, 0xe9, 0xfb, 0x34, 0x36, 0x63, 0x8f, 0xfa, 0x4a, 0x10, 0xd2, 0x98, 0xa2, + 0xb5, 0x14, 0xad, 0x30, 0xb4, 0x92, 0xa2, 0x95, 0xf3, 0xed, 0xc6, 0x7a, 0xc6, 0x62, 0x06, 0x5e, + 0xf3, 0x72, 0x53, 0x94, 0xee, 0x6a, 0xdc, 0x2f, 0x38, 0xc3, 0x25, 0xf4, 0x94, 0xc4, 0xe1, 0x34, + 0x85, 0xc9, 0xdf, 0x78, 0xa8, 0x0d, 0xc8, 0x24, 0x6e, 0xcf, 0x08, 0x50, 0x0b, 0x84, 0xc0, 0x74, + 0x49, 0x54, 0xe7, 0x36, 0x4b, 0x5b, 0xd5, 0xd6, 0xba, 0xf2, 0xf3, 0xf3, 0x15, 0xdd, 0x74, 0x09, + 0x4e, 0xa1, 0x08, 0x01, 0x9f, 0x88, 0xaf, 0x2f, 0x6d, 0x72, 0x5b, 0x22, 0x66, 0xeb, 0xc6, 0x11, + 0x48, 0xbb, 0x24, 0x26, 0x76, 0x4c, 0x9c, 0xae, 0xe9, 0xbb, 0x67, 0xa6, 0x4b, 0xd0, 0x5d, 0x58, + 0x1d, 0x67, 0x6b, 0xc3, 0xa6, 0x0e, 0xa9, 0x73, 0x6c, 0xc3, 0x4a, 0x9e, 0xec, 0x50, 0x87, 0xa0, + 0x0d, 0x00, 0x9b, 0xfa, 0xc7, 0x9e, 0x43, 0x7c, 0x9b, 0x30, 0xca, 0x25, 0x3c, 0x97, 0x69, 0x7c, + 0xe5, 0x60, 0x35, 0x67, 0x56, 0x43, 0x62, 0x9e, 0x20, 0x0c, 0x7c, 0x3c, 0x0d, 0x52, 0xb6, 0x5a, + 0xeb, 0x45, 0x91, 0xe2, 0x45, 0xa3, 0xca, 0x02, 0x87, 0xc2, 0xbe, 0x83, 0x69, 0x40, 0x30, 0xe3, + 0x42, 0xb7, 0x40, 0xf4, 0x22, 0x23, 0x08, 0xc9, 0xb1, 0x37, 0x61, 0x22, 0x2a, 0xb8, 0xe2, 0x45, + 0x3a, 0x8b, 0x65, 0x1b, 0xc4, 0x19, 0x1e, 0x55, 0x61, 0x79, 0xd8, 0x3b, 0xe8, 0xf5, 0x8f, 0x7a, + 0xd2, 0x7f, 0x48, 0x04, 0xe1, 0x50, 0x6f, 0x77, 0x34, 0x89, 0x43, 0x35, 0x80, 0xc3, 0x21, 0xd6, + 0x8c, 0x34, 0x5e, 0x42, 0x08, 0x6a, 0x5a, 0xbf, 0x6b, 0xcc, 0xe5, 0x4a, 0x08, 0xa0, 0xbc, 0xf7, + 0x46, 0xdf, 0xd3, 0x7a, 0x12, 0x9f, 0xe0, 0xbb, 0xfb, 0x3d, 0xcd, 0x50, 0xb1, 0xd6, 0x3e, 0x90, + 0x84, 0xc6, 0x27, 0x0e, 0x56, 0x12, 0xc9, 0x7a, 0x48, 0x03, 0x12, 0xc6, 0x53, 0x74, 0x0c, 0xc8, + 0xc9, 0x34, 0x1b, 0x79, 0xc5, 0xf2, 0x6b, 0x7a, 0xf2, 0x87, 0xa6, 0xf3, 0x2b, 0xc1, 0xff, 0x3b, + 0x57, 0x32, 0x11, 0x7a, 0x07, 0xb5, 0xd9, 0x39, 0x56, 0x62, 0x93, 0xf9, 0xaf, 0xb6, 0x1e, 0xfd, + 0x4d, 0x61, 0xf1, 0xaa, 0x33, 0x1f, 0xca, 0x1f, 0x39, 0xe0, 0x93, 0xbf, 0x0e, 0xea, 0x43, 0x25, + 0xc8, 0x9c, 0xb1, 0x8b, 0xab, 0xb6, 0x76, 0x7e, 0x93, 0x7f, 0xbe, 0x28, 0x78, 0x46, 0x82, 0x6e, + 0x82, 0x70, 0xe1, 0x39, 0xf1, 0x88, 0xa9, 0x15, 0x70, 0x1a, 0xa0, 0x35, 0x28, 0x8f, 0x88, 0xe7, + 0x8e, 0xe2, 0x7a, 0x89, 0xa5, 0xb3, 0x08, 0x3d, 0x86, 0xb2, 0x35, 0xa6, 0xf6, 0x49, 0x54, 0xe7, + 0x59, 0x01, 0x6f, 0x17, 0x1d, 0xae, 0x26, 0x28, 0x9c, 0x81, 0xe5, 0xf7, 0x25, 0x10, 0x58, 0xe6, + 0xdf, 0xeb, 0x7f, 0x05, 0x2b, 0x16, 0x3d, 0xf3, 0x1d, 0xcf, 0x77, 0x0d, 0x8b, 0x4e, 0xb2, 0xa2, + 0xdf, 0x2b, 0xd4, 0x95, 0x61, 0x75, 0x3a, 0x9e, 0xe2, 0x6a, 0xbe, 0x53, 0xa5, 0x13, 0xd4, 0x06, + 0x08, 0xcc, 0xd0, 0x74, 0x43, 0x33, 0x18, 0x45, 0xf5, 0x12, 0xb3, 0x77, 0xa7, 0xb8, 0x8d, 0x33, + 0x24, 0x9e, 0xdb, 0x84, 0x5e, 0x02, 0x30, 0xc3, 0x06, 0xeb, 0x2b, 0x9e, 0xf5, 0xd5, 0x83, 0x5f, + 0x56, 0x28, 0xfd, 0xb2, 0x06, 0x12, 0xad, 0x7c, 0x29, 0x63, 0x10, 0x67, 0xf9, 0xc5, 0x46, 0xa9, + 0x00, 0x3f, 0xd0, 0x5e, 0x0f, 0x24, 0x2e, 0x69, 0x99, 0x41, 0x5b, 0xed, 0x26, 0x2d, 0x52, 0x85, + 0x65, 0x7d, 0xbf, 0x33, 0x18, 0xe2, 0xa4, 0x37, 0x44, 0x10, 0xf0, 0xb0, 0xab, 0x61, 0x89, 0x4f, + 0xf2, 0x6a, 0x1b, 0x77, 0xfa, 0xbb, 0x9a, 0x24, 0xc8, 0x9f, 0x39, 0x10, 0x67, 0xaa, 0xaf, 0xf1, + 0x35, 0xb4, 0x40, 0xb8, 0xa0, 0xa1, 0x93, 0xdf, 0x40, 0xe1, 0x43, 0x7a, 0x44, 0x43, 0x07, 0xa7, + 0x50, 0xf9, 0x0b, 0x07, 0x7c, 0x12, 0x5f, 0x63, 0x5b, 0x4f, 0x61, 0x39, 0x9a, 0x9e, 0x5a, 0x74, + 0x9c, 0x1b, 0xdb, 0x28, 0xe2, 0x38, 0x64, 0x30, 0x9c, 0xc3, 0xe5, 0x0f, 0x1c, 0x94, 0xd3, 0xdc, + 0x35, 0xb6, 0x97, 0x8f, 0xb2, 0xd2, 0xe5, 0x28, 0x53, 0x63, 0x68, 0xd8, 0xf4, 0xb4, 0x80, 0x4b, + 0xbd, 0xb1, 0xa8, 0x50, 0x4f, 0x06, 0xab, 0xce, 0xbd, 0x7d, 0x9e, 0xc1, 0x5d, 0x9a, 0xbc, 0xd5, + 0x0a, 0x0d, 0xdd, 0xa6, 0x4b, 0x7c, 0x36, 0x76, 0x9b, 0xe9, 0x4f, 0x66, 0xe0, 0x45, 0x57, 0x07, + 0xf4, 0xb3, 0x74, 0xf5, 0x9d, 0xe3, 0xac, 0x32, 0xc3, 0xee, 0xfc, 0x08, 0x00, 0x00, 0xff, 0xff, + 0x80, 0x29, 0x2a, 0x3b, 0x2f, 0x08, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/web_detection.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/web_detection.pb.go new file mode 100644 index 0000000..1ee738c --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/web_detection.pb.go @@ -0,0 +1,194 @@ +// Code generated by protoc-gen-go. +// source: google/cloud/vision/v1/web_detection.proto +// DO NOT EDIT! + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Relevant information for the image from the Internet. +type WebDetection struct { + // Deduced entities from similar images on the Internet. + WebEntities []*WebDetection_WebEntity `protobuf:"bytes,1,rep,name=web_entities,json=webEntities" json:"web_entities,omitempty"` + // Fully matching images from the Internet. + // They're definite neardups and most often a copy of the query image with + // merely a size change. + FullMatchingImages []*WebDetection_WebImage `protobuf:"bytes,2,rep,name=full_matching_images,json=fullMatchingImages" json:"full_matching_images,omitempty"` + // Partial matching images from the Internet. + // Those images are similar enough to share some key-point features. For + // example an original image will likely have partial matching for its crops. + PartialMatchingImages []*WebDetection_WebImage `protobuf:"bytes,3,rep,name=partial_matching_images,json=partialMatchingImages" json:"partial_matching_images,omitempty"` + // Web pages containing the matching images from the Internet. + PagesWithMatchingImages []*WebDetection_WebPage `protobuf:"bytes,4,rep,name=pages_with_matching_images,json=pagesWithMatchingImages" json:"pages_with_matching_images,omitempty"` +} + +func (m *WebDetection) Reset() { *m = WebDetection{} } +func (m *WebDetection) String() string { return proto.CompactTextString(m) } +func (*WebDetection) ProtoMessage() {} +func (*WebDetection) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *WebDetection) GetWebEntities() []*WebDetection_WebEntity { + if m != nil { + return m.WebEntities + } + return nil +} + +func (m *WebDetection) GetFullMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.FullMatchingImages + } + return nil +} + +func (m *WebDetection) GetPartialMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.PartialMatchingImages + } + return nil +} + +func (m *WebDetection) GetPagesWithMatchingImages() []*WebDetection_WebPage { + if m != nil { + return m.PagesWithMatchingImages + } + return nil +} + +// Entity deduced from similar images on the Internet. +type WebDetection_WebEntity struct { + // Opaque entity ID. + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"` + // Overall relevancy score for the entity. + // Not normalized and not comparable across different image queries. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // Canonical description of the entity, in English. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *WebDetection_WebEntity) Reset() { *m = WebDetection_WebEntity{} } +func (m *WebDetection_WebEntity) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebEntity) ProtoMessage() {} +func (*WebDetection_WebEntity) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +func (m *WebDetection_WebEntity) GetEntityId() string { + if m != nil { + return m.EntityId + } + return "" +} + +func (m *WebDetection_WebEntity) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *WebDetection_WebEntity) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// Metadata for online images. +type WebDetection_WebImage struct { + // The result image URL. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // Overall relevancy score for the image. + // Not normalized and not comparable across different image queries. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` +} + +func (m *WebDetection_WebImage) Reset() { *m = WebDetection_WebImage{} } +func (m *WebDetection_WebImage) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebImage) ProtoMessage() {} +func (*WebDetection_WebImage) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 1} } + +func (m *WebDetection_WebImage) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *WebDetection_WebImage) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +// Metadata for web pages. +type WebDetection_WebPage struct { + // The result web page URL. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // Overall relevancy score for the web page. + // Not normalized and not comparable across different image queries. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` +} + +func (m *WebDetection_WebPage) Reset() { *m = WebDetection_WebPage{} } +func (m *WebDetection_WebPage) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebPage) ProtoMessage() {} +func (*WebDetection_WebPage) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2} } + +func (m *WebDetection_WebPage) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *WebDetection_WebPage) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func init() { + proto.RegisterType((*WebDetection)(nil), "google.cloud.vision.v1.WebDetection") + proto.RegisterType((*WebDetection_WebEntity)(nil), "google.cloud.vision.v1.WebDetection.WebEntity") + proto.RegisterType((*WebDetection_WebImage)(nil), "google.cloud.vision.v1.WebDetection.WebImage") + proto.RegisterType((*WebDetection_WebPage)(nil), "google.cloud.vision.v1.WebDetection.WebPage") +} + +func init() { proto.RegisterFile("google/cloud/vision/v1/web_detection.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 383 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x41, 0x4f, 0xea, 0x40, + 0x14, 0x85, 0x53, 0xca, 0x7b, 0x0f, 0x06, 0x16, 0xcf, 0x09, 0x4a, 0x53, 0x5d, 0x34, 0xae, 0x88, + 0xd1, 0x69, 0xc0, 0xa5, 0xae, 0x88, 0x2e, 0x58, 0x98, 0x60, 0x37, 0x24, 0x6e, 0xea, 0xd0, 0x8e, + 0xc3, 0x4d, 0xca, 0x4c, 0xd3, 0x19, 0x20, 0xfc, 0x58, 0xff, 0x87, 0x4b, 0x33, 0xd3, 0x62, 0x10, + 0x30, 0x21, 0xee, 0xee, 0xdc, 0x9e, 0xf3, 0x9d, 0xf6, 0xf6, 0x0e, 0xba, 0xe2, 0x52, 0xf2, 0x8c, + 0x85, 0x49, 0x26, 0x17, 0x69, 0xb8, 0x04, 0x05, 0x52, 0x84, 0xcb, 0x7e, 0xb8, 0x62, 0xd3, 0x38, + 0x65, 0x9a, 0x25, 0x1a, 0xa4, 0x20, 0x79, 0x21, 0xb5, 0xc4, 0x67, 0xa5, 0x96, 0x58, 0x2d, 0x29, + 0xb5, 0x64, 0xd9, 0xf7, 0x2f, 0x2a, 0x06, 0xcd, 0x21, 0xa4, 0x42, 0x48, 0x4d, 0x8d, 0x49, 0x95, + 0xae, 0xcb, 0xf7, 0x3a, 0x6a, 0x4f, 0xd8, 0xf4, 0x61, 0x03, 0xc3, 0xcf, 0xa8, 0x6d, 0xe8, 0x4c, + 0x68, 0xd0, 0xc0, 0x94, 0xe7, 0x04, 0x6e, 0xaf, 0x35, 0x20, 0xe4, 0x30, 0x9d, 0x6c, 0x7b, 0xcd, + 0xe1, 0xd1, 0xf8, 0xd6, 0x51, 0x6b, 0x55, 0x95, 0xc0, 0x14, 0x8e, 0x51, 0xe7, 0x6d, 0x91, 0x65, + 0xf1, 0x9c, 0xea, 0x64, 0x06, 0x82, 0xc7, 0x30, 0xa7, 0x9c, 0x29, 0xaf, 0x66, 0xd1, 0x37, 0xc7, + 0xa2, 0x47, 0xc6, 0x15, 0x61, 0x83, 0x7a, 0xaa, 0x48, 0xb6, 0xa5, 0x30, 0x43, 0xdd, 0x9c, 0x16, + 0x1a, 0xe8, 0x7e, 0x86, 0xfb, 0x9b, 0x8c, 0xd3, 0x8a, 0xb6, 0x13, 0x03, 0xc8, 0xcf, 0x4d, 0x11, + 0xaf, 0x40, 0xcf, 0xf6, 0x92, 0xea, 0x36, 0xe9, 0xfa, 0xd8, 0xa4, 0xb1, 0x09, 0xea, 0x5a, 0xde, + 0x04, 0xf4, 0xec, 0x7b, 0x94, 0xff, 0x8a, 0x9a, 0x5f, 0xc3, 0xc4, 0xe7, 0xa8, 0x69, 0x7f, 0xc7, + 0x3a, 0x86, 0xd4, 0x73, 0x02, 0xa7, 0xd7, 0x8c, 0x1a, 0x65, 0x63, 0x94, 0xe2, 0x0e, 0xfa, 0xa3, + 0x12, 0x59, 0x30, 0xaf, 0x16, 0x38, 0xbd, 0x5a, 0x54, 0x1e, 0x70, 0x80, 0x5a, 0x29, 0x53, 0x49, + 0x01, 0xb9, 0xc9, 0xf3, 0x5c, 0x6b, 0xda, 0x6e, 0xf9, 0x03, 0xd4, 0xd8, 0x7c, 0x2f, 0xfe, 0x8f, + 0xdc, 0x45, 0x91, 0x55, 0x68, 0x53, 0x1e, 0xa6, 0xfa, 0x7d, 0xf4, 0xaf, 0x7a, 0xf3, 0x63, 0x2d, + 0xc3, 0x02, 0xf9, 0x89, 0x9c, 0xff, 0x30, 0x94, 0xe1, 0xc9, 0xf6, 0x54, 0xc6, 0x66, 0x21, 0xc7, + 0xce, 0xcb, 0x7d, 0x25, 0xe6, 0x32, 0xa3, 0x82, 0x13, 0x59, 0xf0, 0x90, 0x33, 0x61, 0xd7, 0x35, + 0x2c, 0x1f, 0xd1, 0x1c, 0xd4, 0xee, 0x9d, 0xb8, 0x2b, 0xab, 0x0f, 0xc7, 0x99, 0xfe, 0xb5, 0xda, + 0xdb, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x66, 0xd9, 0xde, 0x3f, 0x3e, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/container/v1/cluster_service.pb.go b/vendor/google.golang.org/genproto/googleapis/container/v1/cluster_service.pb.go new file mode 100644 index 0000000..7b63f6a --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/container/v1/cluster_service.pb.go @@ -0,0 +1,2848 @@ +// Code generated by protoc-gen-go. +// source: google/container/v1/cluster_service.proto +// DO NOT EDIT! + +/* +Package container is a generated protocol buffer package. + +It is generated from these files: + google/container/v1/cluster_service.proto + +It has these top-level messages: + NodeConfig + MasterAuth + AddonsConfig + HttpLoadBalancing + HorizontalPodAutoscaling + Cluster + ClusterUpdate + Operation + CreateClusterRequest + GetClusterRequest + UpdateClusterRequest + DeleteClusterRequest + ListClustersRequest + ListClustersResponse + GetOperationRequest + ListOperationsRequest + CancelOperationRequest + ListOperationsResponse + GetServerConfigRequest + ServerConfig + CreateNodePoolRequest + DeleteNodePoolRequest + ListNodePoolsRequest + GetNodePoolRequest + NodePool + NodeManagement + AutoUpgradeOptions + SetNodePoolManagementRequest + RollbackNodePoolUpgradeRequest + ListNodePoolsResponse + NodePoolAutoscaling +*/ +package container + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The current status of the cluster. +type Cluster_Status int32 + +const ( + // Not set. + Cluster_STATUS_UNSPECIFIED Cluster_Status = 0 + // The PROVISIONING state indicates the cluster is being created. + Cluster_PROVISIONING Cluster_Status = 1 + // The RUNNING state indicates the cluster has been created and is fully + // usable. + Cluster_RUNNING Cluster_Status = 2 + // The RECONCILING state indicates that some work is actively being done on + // the cluster, such as upgrading the master or node software. Details can + // be found in the `statusMessage` field. + Cluster_RECONCILING Cluster_Status = 3 + // The STOPPING state indicates the cluster is being deleted. + Cluster_STOPPING Cluster_Status = 4 + // The ERROR state indicates the cluster may be unusable. Details + // can be found in the `statusMessage` field. + Cluster_ERROR Cluster_Status = 5 +) + +var Cluster_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PROVISIONING", + 2: "RUNNING", + 3: "RECONCILING", + 4: "STOPPING", + 5: "ERROR", +} +var Cluster_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PROVISIONING": 1, + "RUNNING": 2, + "RECONCILING": 3, + "STOPPING": 4, + "ERROR": 5, +} + +func (x Cluster_Status) String() string { + return proto.EnumName(Cluster_Status_name, int32(x)) +} +func (Cluster_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 0} } + +// Current status of the operation. +type Operation_Status int32 + +const ( + // Not set. + Operation_STATUS_UNSPECIFIED Operation_Status = 0 + // The operation has been created. + Operation_PENDING Operation_Status = 1 + // The operation is currently running. + Operation_RUNNING Operation_Status = 2 + // The operation is done, either cancelled or completed. + Operation_DONE Operation_Status = 3 + // The operation is aborting. + Operation_ABORTING Operation_Status = 4 +) + +var Operation_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PENDING", + 2: "RUNNING", + 3: "DONE", + 4: "ABORTING", +} +var Operation_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PENDING": 1, + "RUNNING": 2, + "DONE": 3, + "ABORTING": 4, +} + +func (x Operation_Status) String() string { + return proto.EnumName(Operation_Status_name, int32(x)) +} +func (Operation_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +// Operation type. +type Operation_Type int32 + +const ( + // Not set. + Operation_TYPE_UNSPECIFIED Operation_Type = 0 + // Cluster create. + Operation_CREATE_CLUSTER Operation_Type = 1 + // Cluster delete. + Operation_DELETE_CLUSTER Operation_Type = 2 + // A master upgrade. + Operation_UPGRADE_MASTER Operation_Type = 3 + // A node upgrade. + Operation_UPGRADE_NODES Operation_Type = 4 + // Cluster repair. + Operation_REPAIR_CLUSTER Operation_Type = 5 + // Cluster update. + Operation_UPDATE_CLUSTER Operation_Type = 6 + // Node pool create. + Operation_CREATE_NODE_POOL Operation_Type = 7 + // Node pool delete. + Operation_DELETE_NODE_POOL Operation_Type = 8 + // Set node pool management. + Operation_SET_NODE_POOL_MANAGEMENT Operation_Type = 9 +) + +var Operation_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "CREATE_CLUSTER", + 2: "DELETE_CLUSTER", + 3: "UPGRADE_MASTER", + 4: "UPGRADE_NODES", + 5: "REPAIR_CLUSTER", + 6: "UPDATE_CLUSTER", + 7: "CREATE_NODE_POOL", + 8: "DELETE_NODE_POOL", + 9: "SET_NODE_POOL_MANAGEMENT", +} +var Operation_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "CREATE_CLUSTER": 1, + "DELETE_CLUSTER": 2, + "UPGRADE_MASTER": 3, + "UPGRADE_NODES": 4, + "REPAIR_CLUSTER": 5, + "UPDATE_CLUSTER": 6, + "CREATE_NODE_POOL": 7, + "DELETE_NODE_POOL": 8, + "SET_NODE_POOL_MANAGEMENT": 9, +} + +func (x Operation_Type) String() string { + return proto.EnumName(Operation_Type_name, int32(x)) +} +func (Operation_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 1} } + +// The current status of the node pool instance. +type NodePool_Status int32 + +const ( + // Not set. + NodePool_STATUS_UNSPECIFIED NodePool_Status = 0 + // The PROVISIONING state indicates the node pool is being created. + NodePool_PROVISIONING NodePool_Status = 1 + // The RUNNING state indicates the node pool has been created + // and is fully usable. + NodePool_RUNNING NodePool_Status = 2 + // The RUNNING_WITH_ERROR state indicates the node pool has been created + // and is partially usable. Some error state has occurred and some + // functionality may be impaired. Customer may need to reissue a request + // or trigger a new update. + NodePool_RUNNING_WITH_ERROR NodePool_Status = 3 + // The RECONCILING state indicates that some work is actively being done on + // the node pool, such as upgrading node software. Details can + // be found in the `statusMessage` field. + NodePool_RECONCILING NodePool_Status = 4 + // The STOPPING state indicates the node pool is being deleted. + NodePool_STOPPING NodePool_Status = 5 + // The ERROR state indicates the node pool may be unusable. Details + // can be found in the `statusMessage` field. + NodePool_ERROR NodePool_Status = 6 +) + +var NodePool_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PROVISIONING", + 2: "RUNNING", + 3: "RUNNING_WITH_ERROR", + 4: "RECONCILING", + 5: "STOPPING", + 6: "ERROR", +} +var NodePool_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PROVISIONING": 1, + "RUNNING": 2, + "RUNNING_WITH_ERROR": 3, + "RECONCILING": 4, + "STOPPING": 5, + "ERROR": 6, +} + +func (x NodePool_Status) String() string { + return proto.EnumName(NodePool_Status_name, int32(x)) +} +func (NodePool_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{24, 0} } + +// Parameters that describe the nodes in a cluster. +type NodeConfig struct { + // The name of a Google Compute Engine [machine + // type](/compute/docs/machine-types) (e.g. + // `n1-standard-1`). + // + // If unspecified, the default machine type is + // `n1-standard-1`. + MachineType string `protobuf:"bytes,1,opt,name=machine_type,json=machineType" json:"machine_type,omitempty"` + // Size of the disk attached to each node, specified in GB. + // The smallest allowed disk size is 10GB. + // + // If unspecified, the default disk size is 100GB. + DiskSizeGb int32 `protobuf:"varint,2,opt,name=disk_size_gb,json=diskSizeGb" json:"disk_size_gb,omitempty"` + // The set of Google API scopes to be made available on all of the + // node VMs under the "default" service account. + // + // The following scopes are recommended, but not required, and by default are + // not included: + // + // * `https://www.googleapis.com/auth/compute` is required for mounting + // persistent storage on your nodes. + // * `https://www.googleapis.com/auth/devstorage.read_only` is required for + // communicating with **gcr.io** + // (the [Google Container Registry](/container-registry/)). + // + // If unspecified, no scopes are added, unless Cloud Logging or Cloud + // Monitoring are enabled, in which case their required scopes will be added. + OauthScopes []string `protobuf:"bytes,3,rep,name=oauth_scopes,json=oauthScopes" json:"oauth_scopes,omitempty"` + // The Google Cloud Platform Service Account to be used by the node VMs. If + // no Service Account is specified, the "default" service account is used. + ServiceAccount string `protobuf:"bytes,9,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // The metadata key/value pairs assigned to instances in the cluster. + // + // Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes + // in length. These are reflected as part of a URL in the metadata server. + // Additionally, to avoid ambiguity, keys must not conflict with any other + // metadata keys for the project or be one of the four reserved keys: + // "instance-template", "kube-env", "startup-script", and "user-data" + // + // Values are free-form strings, and only have meaning as interpreted by + // the image running in the instance. The only restriction placed on them is + // that each value's size must be less than or equal to 32 KB. + // + // The total size of all keys and values must be less than 512 KB. + Metadata map[string]string `protobuf:"bytes,4,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The image type to use for this node. Note that for a given image type, + // the latest version of it will be used. + ImageType string `protobuf:"bytes,5,opt,name=image_type,json=imageType" json:"image_type,omitempty"` + // The map of Kubernetes labels (key/value pairs) to be applied to each node. + // These will added in addition to any default label(s) that + // Kubernetes may apply to the node. + // In case of conflict in label keys, the applied set may differ depending on + // the Kubernetes version -- it's best to assume the behavior is undefined + // and conflicts should be avoided. + // For more information, including usage and the valid values, see: + // http://kubernetes.io/v1.1/docs/user-guide/labels.html + Labels map[string]string `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The number of local SSD disks to be attached to the node. + // + // The limit for this value is dependant upon the maximum number of + // disks available on a machine per zone. See: + // https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits + // for more information. + LocalSsdCount int32 `protobuf:"varint,7,opt,name=local_ssd_count,json=localSsdCount" json:"local_ssd_count,omitempty"` + // The list of instance tags applied to all nodes. Tags are used to identify + // valid sources or targets for network firewalls and are specified by + // the client during cluster or node pool creation. Each tag within the list + // must comply with RFC1035. + Tags []string `protobuf:"bytes,8,rep,name=tags" json:"tags,omitempty"` + // Whether the nodes are created as preemptible VM instances. See: + // https://cloud.google.com/compute/docs/instances/preemptible for more + // inforamtion about preemptible VM instances. + Preemptible bool `protobuf:"varint,10,opt,name=preemptible" json:"preemptible,omitempty"` +} + +func (m *NodeConfig) Reset() { *m = NodeConfig{} } +func (m *NodeConfig) String() string { return proto.CompactTextString(m) } +func (*NodeConfig) ProtoMessage() {} +func (*NodeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *NodeConfig) GetMachineType() string { + if m != nil { + return m.MachineType + } + return "" +} + +func (m *NodeConfig) GetDiskSizeGb() int32 { + if m != nil { + return m.DiskSizeGb + } + return 0 +} + +func (m *NodeConfig) GetOauthScopes() []string { + if m != nil { + return m.OauthScopes + } + return nil +} + +func (m *NodeConfig) GetServiceAccount() string { + if m != nil { + return m.ServiceAccount + } + return "" +} + +func (m *NodeConfig) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *NodeConfig) GetImageType() string { + if m != nil { + return m.ImageType + } + return "" +} + +func (m *NodeConfig) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *NodeConfig) GetLocalSsdCount() int32 { + if m != nil { + return m.LocalSsdCount + } + return 0 +} + +func (m *NodeConfig) GetTags() []string { + if m != nil { + return m.Tags + } + return nil +} + +func (m *NodeConfig) GetPreemptible() bool { + if m != nil { + return m.Preemptible + } + return false +} + +// The authentication information for accessing the master endpoint. +// Authentication can be done using HTTP basic auth or using client +// certificates. +type MasterAuth struct { + // The username to use for HTTP basic authentication to the master endpoint. + Username string `protobuf:"bytes,1,opt,name=username" json:"username,omitempty"` + // The password to use for HTTP basic authentication to the master endpoint. + // Because the master endpoint is open to the Internet, you should create a + // strong password. + Password string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"` + // [Output only] Base64-encoded public certificate that is the root of + // trust for the cluster. + ClusterCaCertificate string `protobuf:"bytes,100,opt,name=cluster_ca_certificate,json=clusterCaCertificate" json:"cluster_ca_certificate,omitempty"` + // [Output only] Base64-encoded public certificate used by clients to + // authenticate to the cluster endpoint. + ClientCertificate string `protobuf:"bytes,101,opt,name=client_certificate,json=clientCertificate" json:"client_certificate,omitempty"` + // [Output only] Base64-encoded private key used by clients to authenticate + // to the cluster endpoint. + ClientKey string `protobuf:"bytes,102,opt,name=client_key,json=clientKey" json:"client_key,omitempty"` +} + +func (m *MasterAuth) Reset() { *m = MasterAuth{} } +func (m *MasterAuth) String() string { return proto.CompactTextString(m) } +func (*MasterAuth) ProtoMessage() {} +func (*MasterAuth) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *MasterAuth) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *MasterAuth) GetPassword() string { + if m != nil { + return m.Password + } + return "" +} + +func (m *MasterAuth) GetClusterCaCertificate() string { + if m != nil { + return m.ClusterCaCertificate + } + return "" +} + +func (m *MasterAuth) GetClientCertificate() string { + if m != nil { + return m.ClientCertificate + } + return "" +} + +func (m *MasterAuth) GetClientKey() string { + if m != nil { + return m.ClientKey + } + return "" +} + +// Configuration for the addons that can be automatically spun up in the +// cluster, enabling additional functionality. +type AddonsConfig struct { + // Configuration for the HTTP (L7) load balancing controller addon, which + // makes it easy to set up HTTP load balancers for services in a cluster. + HttpLoadBalancing *HttpLoadBalancing `protobuf:"bytes,1,opt,name=http_load_balancing,json=httpLoadBalancing" json:"http_load_balancing,omitempty"` + // Configuration for the horizontal pod autoscaling feature, which + // increases or decreases the number of replica pods a replication controller + // has based on the resource usage of the existing pods. + HorizontalPodAutoscaling *HorizontalPodAutoscaling `protobuf:"bytes,2,opt,name=horizontal_pod_autoscaling,json=horizontalPodAutoscaling" json:"horizontal_pod_autoscaling,omitempty"` +} + +func (m *AddonsConfig) Reset() { *m = AddonsConfig{} } +func (m *AddonsConfig) String() string { return proto.CompactTextString(m) } +func (*AddonsConfig) ProtoMessage() {} +func (*AddonsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *AddonsConfig) GetHttpLoadBalancing() *HttpLoadBalancing { + if m != nil { + return m.HttpLoadBalancing + } + return nil +} + +func (m *AddonsConfig) GetHorizontalPodAutoscaling() *HorizontalPodAutoscaling { + if m != nil { + return m.HorizontalPodAutoscaling + } + return nil +} + +// Configuration options for the HTTP (L7) load balancing controller addon, +// which makes it easy to set up HTTP load balancers for services in a cluster. +type HttpLoadBalancing struct { + // Whether the HTTP Load Balancing controller is enabled in the cluster. + // When enabled, it runs a small pod in the cluster that manages the load + // balancers. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *HttpLoadBalancing) Reset() { *m = HttpLoadBalancing{} } +func (m *HttpLoadBalancing) String() string { return proto.CompactTextString(m) } +func (*HttpLoadBalancing) ProtoMessage() {} +func (*HttpLoadBalancing) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *HttpLoadBalancing) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration options for the horizontal pod autoscaling feature, which +// increases or decreases the number of replica pods a replication controller +// has based on the resource usage of the existing pods. +type HorizontalPodAutoscaling struct { + // Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. + // When enabled, it ensures that a Heapster pod is running in the cluster, + // which is also used by the Cloud Monitoring service. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *HorizontalPodAutoscaling) Reset() { *m = HorizontalPodAutoscaling{} } +func (m *HorizontalPodAutoscaling) String() string { return proto.CompactTextString(m) } +func (*HorizontalPodAutoscaling) ProtoMessage() {} +func (*HorizontalPodAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *HorizontalPodAutoscaling) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// A Google Container Engine cluster. +type Cluster struct { + // The name of this cluster. The name must be unique within this project + // and zone, and can be up to 40 characters with the following restrictions: + // + // * Lowercase letters, numbers, and hyphens only. + // * Must start with a letter. + // * Must end with a number or a letter. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // An optional description of this cluster. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // The number of nodes to create in this cluster. You must ensure that your + // Compute Engine <a href="/compute/docs/resource-quotas">resource quota</a> + // is sufficient for this number of instances. You must also have available + // firewall and routes quota. + // For requests, this field should only be used in lieu of a + // "node_pool" object, since this configuration (along with the + // "node_config") will be used to create a "NodePool" object with an + // auto-generated name. Do not use this and a node_pool at the same time. + InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount" json:"initial_node_count,omitempty"` + // Parameters used in creating the cluster's nodes. + // See `nodeConfig` for the description of its properties. + // For requests, this field should only be used in lieu of a + // "node_pool" object, since this configuration (along with the + // "initial_node_count") will be used to create a "NodePool" object with an + // auto-generated name. Do not use this and a node_pool at the same time. + // For responses, this field will be populated with the node configuration of + // the first node pool. + // + // If unspecified, the defaults are used. + NodeConfig *NodeConfig `protobuf:"bytes,4,opt,name=node_config,json=nodeConfig" json:"node_config,omitempty"` + // The authentication information for accessing the master endpoint. + MasterAuth *MasterAuth `protobuf:"bytes,5,opt,name=master_auth,json=masterAuth" json:"master_auth,omitempty"` + // The logging service the cluster should use to write logs. + // Currently available options: + // + // * `logging.googleapis.com` - the Google Cloud Logging service. + // * `none` - no logs will be exported from the cluster. + // * if left as an empty string,`logging.googleapis.com` will be used. + LoggingService string `protobuf:"bytes,6,opt,name=logging_service,json=loggingService" json:"logging_service,omitempty"` + // The monitoring service the cluster should use to write metrics. + // Currently available options: + // + // * `monitoring.googleapis.com` - the Google Cloud Monitoring service. + // * `none` - no metrics will be exported from the cluster. + // * if left as an empty string, `monitoring.googleapis.com` will be used. + MonitoringService string `protobuf:"bytes,7,opt,name=monitoring_service,json=monitoringService" json:"monitoring_service,omitempty"` + // The name of the Google Compute Engine + // [network](/compute/docs/networks-and-firewalls#networks) to which the + // cluster is connected. If left unspecified, the `default` network + // will be used. + Network string `protobuf:"bytes,8,opt,name=network" json:"network,omitempty"` + // The IP address range of the container pods in this cluster, in + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`). Leave blank to have + // one automatically chosen or specify a `/14` block in `10.0.0.0/8`. + ClusterIpv4Cidr string `protobuf:"bytes,9,opt,name=cluster_ipv4_cidr,json=clusterIpv4Cidr" json:"cluster_ipv4_cidr,omitempty"` + // Configurations for the various addons available to run in the cluster. + AddonsConfig *AddonsConfig `protobuf:"bytes,10,opt,name=addons_config,json=addonsConfig" json:"addons_config,omitempty"` + // The name of the Google Compute Engine + // [subnetwork](/compute/docs/subnetworks) to which the + // cluster is connected. + Subnetwork string `protobuf:"bytes,11,opt,name=subnetwork" json:"subnetwork,omitempty"` + // The node pools associated with this cluster. + // This field should not be set if "node_config" or "initial_node_count" are + // specified. + NodePools []*NodePool `protobuf:"bytes,12,rep,name=node_pools,json=nodePools" json:"node_pools,omitempty"` + // The list of Google Compute Engine + // [locations](/compute/docs/zones#available) in which the cluster's nodes + // should be located. + Locations []string `protobuf:"bytes,13,rep,name=locations" json:"locations,omitempty"` + // Kubernetes alpha features are enabled on this cluster. This includes alpha + // API groups (e.g. v1alpha1) and features that may not be production ready in + // the kubernetes version of the master and nodes. + // The cluster has no SLA for uptime and master/node upgrades are disabled. + // Alpha enabled clusters are automatically deleted thirty days after + // creation. + EnableKubernetesAlpha bool `protobuf:"varint,14,opt,name=enable_kubernetes_alpha,json=enableKubernetesAlpha" json:"enable_kubernetes_alpha,omitempty"` + // [Output only] Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // [Output only] The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,101,opt,name=zone" json:"zone,omitempty"` + // [Output only] The IP address of this cluster's master endpoint. + // The endpoint can be accessed from the internet at + // `https://username:password@endpoint/`. + // + // See the `masterAuth` property of this resource for username and + // password information. + Endpoint string `protobuf:"bytes,102,opt,name=endpoint" json:"endpoint,omitempty"` + // [Output only] The software version of the master endpoint and kubelets used + // in the cluster when it was first created. The version can be upgraded over + // time. + InitialClusterVersion string `protobuf:"bytes,103,opt,name=initial_cluster_version,json=initialClusterVersion" json:"initial_cluster_version,omitempty"` + // [Output only] The current software version of the master endpoint. + CurrentMasterVersion string `protobuf:"bytes,104,opt,name=current_master_version,json=currentMasterVersion" json:"current_master_version,omitempty"` + // [Output only] The current version of the node software components. + // If they are currently at multiple versions because they're in the process + // of being upgraded, this reflects the minimum version of all nodes. + CurrentNodeVersion string `protobuf:"bytes,105,opt,name=current_node_version,json=currentNodeVersion" json:"current_node_version,omitempty"` + // [Output only] The time the cluster was created, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + CreateTime string `protobuf:"bytes,106,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // [Output only] The current status of this cluster. + Status Cluster_Status `protobuf:"varint,107,opt,name=status,enum=google.container.v1.Cluster_Status" json:"status,omitempty"` + // [Output only] Additional information about the current status of this + // cluster, if available. + StatusMessage string `protobuf:"bytes,108,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` + // [Output only] The size of the address space on each node for hosting + // containers. This is provisioned from within the `container_ipv4_cidr` + // range. + NodeIpv4CidrSize int32 `protobuf:"varint,109,opt,name=node_ipv4_cidr_size,json=nodeIpv4CidrSize" json:"node_ipv4_cidr_size,omitempty"` + // [Output only] The IP address range of the Kubernetes services in + // this cluster, in + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `1.2.3.4/29`). Service addresses are + // typically put in the last `/16` from the container CIDR. + ServicesIpv4Cidr string `protobuf:"bytes,110,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr" json:"services_ipv4_cidr,omitempty"` + // [Output only] The resource URLs of [instance + // groups](/compute/docs/instance-groups/) associated with this + // cluster. + InstanceGroupUrls []string `protobuf:"bytes,111,rep,name=instance_group_urls,json=instanceGroupUrls" json:"instance_group_urls,omitempty"` + // [Output only] The number of nodes currently in the cluster. + CurrentNodeCount int32 `protobuf:"varint,112,opt,name=current_node_count,json=currentNodeCount" json:"current_node_count,omitempty"` + // [Output only] The time the cluster will be automatically + // deleted in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + ExpireTime string `protobuf:"bytes,113,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` +} + +func (m *Cluster) Reset() { *m = Cluster{} } +func (m *Cluster) String() string { return proto.CompactTextString(m) } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *Cluster) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Cluster) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Cluster) GetInitialNodeCount() int32 { + if m != nil { + return m.InitialNodeCount + } + return 0 +} + +func (m *Cluster) GetNodeConfig() *NodeConfig { + if m != nil { + return m.NodeConfig + } + return nil +} + +func (m *Cluster) GetMasterAuth() *MasterAuth { + if m != nil { + return m.MasterAuth + } + return nil +} + +func (m *Cluster) GetLoggingService() string { + if m != nil { + return m.LoggingService + } + return "" +} + +func (m *Cluster) GetMonitoringService() string { + if m != nil { + return m.MonitoringService + } + return "" +} + +func (m *Cluster) GetNetwork() string { + if m != nil { + return m.Network + } + return "" +} + +func (m *Cluster) GetClusterIpv4Cidr() string { + if m != nil { + return m.ClusterIpv4Cidr + } + return "" +} + +func (m *Cluster) GetAddonsConfig() *AddonsConfig { + if m != nil { + return m.AddonsConfig + } + return nil +} + +func (m *Cluster) GetSubnetwork() string { + if m != nil { + return m.Subnetwork + } + return "" +} + +func (m *Cluster) GetNodePools() []*NodePool { + if m != nil { + return m.NodePools + } + return nil +} + +func (m *Cluster) GetLocations() []string { + if m != nil { + return m.Locations + } + return nil +} + +func (m *Cluster) GetEnableKubernetesAlpha() bool { + if m != nil { + return m.EnableKubernetesAlpha + } + return false +} + +func (m *Cluster) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *Cluster) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *Cluster) GetEndpoint() string { + if m != nil { + return m.Endpoint + } + return "" +} + +func (m *Cluster) GetInitialClusterVersion() string { + if m != nil { + return m.InitialClusterVersion + } + return "" +} + +func (m *Cluster) GetCurrentMasterVersion() string { + if m != nil { + return m.CurrentMasterVersion + } + return "" +} + +func (m *Cluster) GetCurrentNodeVersion() string { + if m != nil { + return m.CurrentNodeVersion + } + return "" +} + +func (m *Cluster) GetCreateTime() string { + if m != nil { + return m.CreateTime + } + return "" +} + +func (m *Cluster) GetStatus() Cluster_Status { + if m != nil { + return m.Status + } + return Cluster_STATUS_UNSPECIFIED +} + +func (m *Cluster) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +func (m *Cluster) GetNodeIpv4CidrSize() int32 { + if m != nil { + return m.NodeIpv4CidrSize + } + return 0 +} + +func (m *Cluster) GetServicesIpv4Cidr() string { + if m != nil { + return m.ServicesIpv4Cidr + } + return "" +} + +func (m *Cluster) GetInstanceGroupUrls() []string { + if m != nil { + return m.InstanceGroupUrls + } + return nil +} + +func (m *Cluster) GetCurrentNodeCount() int32 { + if m != nil { + return m.CurrentNodeCount + } + return 0 +} + +func (m *Cluster) GetExpireTime() string { + if m != nil { + return m.ExpireTime + } + return "" +} + +// ClusterUpdate describes an update to the cluster. Exactly one update can +// be applied to a cluster with each request, so at most one field can be +// provided. +type ClusterUpdate struct { + // The Kubernetes version to change the nodes to (typically an + // upgrade). Use `-` to upgrade to the latest version supported by + // the server. + DesiredNodeVersion string `protobuf:"bytes,4,opt,name=desired_node_version,json=desiredNodeVersion" json:"desired_node_version,omitempty"` + // The monitoring service the cluster should use to write metrics. + // Currently available options: + // + // * "monitoring.googleapis.com" - the Google Cloud Monitoring service + // * "none" - no metrics will be exported from the cluster + DesiredMonitoringService string `protobuf:"bytes,5,opt,name=desired_monitoring_service,json=desiredMonitoringService" json:"desired_monitoring_service,omitempty"` + // Configurations for the various addons available to run in the cluster. + DesiredAddonsConfig *AddonsConfig `protobuf:"bytes,6,opt,name=desired_addons_config,json=desiredAddonsConfig" json:"desired_addons_config,omitempty"` + // The node pool to be upgraded. This field is mandatory if + // "desired_node_version", "desired_image_family" or + // "desired_node_pool_autoscaling" is specified and there is more than one + // node pool on the cluster. + DesiredNodePoolId string `protobuf:"bytes,7,opt,name=desired_node_pool_id,json=desiredNodePoolId" json:"desired_node_pool_id,omitempty"` + // The desired image type for the node pool. + // NOTE: Set the "desired_node_pool" field as well. + DesiredImageType string `protobuf:"bytes,8,opt,name=desired_image_type,json=desiredImageType" json:"desired_image_type,omitempty"` + // Autoscaler configuration for the node pool specified in + // desired_node_pool_id. If there is only one pool in the + // cluster and desired_node_pool_id is not provided then + // the change applies to that single node pool. + DesiredNodePoolAutoscaling *NodePoolAutoscaling `protobuf:"bytes,9,opt,name=desired_node_pool_autoscaling,json=desiredNodePoolAutoscaling" json:"desired_node_pool_autoscaling,omitempty"` + // The desired list of Google Compute Engine + // [locations](/compute/docs/zones#available) in which the cluster's nodes + // should be located. Changing the locations a cluster is in will result + // in nodes being either created or removed from the cluster, depending on + // whether locations are being added or removed. + // + // This list must always include the cluster's primary zone. + DesiredLocations []string `protobuf:"bytes,10,rep,name=desired_locations,json=desiredLocations" json:"desired_locations,omitempty"` + // The Kubernetes version to change the master to. The only valid value is the + // latest supported version. Use "-" to have the server automatically select + // the latest version. + DesiredMasterVersion string `protobuf:"bytes,100,opt,name=desired_master_version,json=desiredMasterVersion" json:"desired_master_version,omitempty"` +} + +func (m *ClusterUpdate) Reset() { *m = ClusterUpdate{} } +func (m *ClusterUpdate) String() string { return proto.CompactTextString(m) } +func (*ClusterUpdate) ProtoMessage() {} +func (*ClusterUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ClusterUpdate) GetDesiredNodeVersion() string { + if m != nil { + return m.DesiredNodeVersion + } + return "" +} + +func (m *ClusterUpdate) GetDesiredMonitoringService() string { + if m != nil { + return m.DesiredMonitoringService + } + return "" +} + +func (m *ClusterUpdate) GetDesiredAddonsConfig() *AddonsConfig { + if m != nil { + return m.DesiredAddonsConfig + } + return nil +} + +func (m *ClusterUpdate) GetDesiredNodePoolId() string { + if m != nil { + return m.DesiredNodePoolId + } + return "" +} + +func (m *ClusterUpdate) GetDesiredImageType() string { + if m != nil { + return m.DesiredImageType + } + return "" +} + +func (m *ClusterUpdate) GetDesiredNodePoolAutoscaling() *NodePoolAutoscaling { + if m != nil { + return m.DesiredNodePoolAutoscaling + } + return nil +} + +func (m *ClusterUpdate) GetDesiredLocations() []string { + if m != nil { + return m.DesiredLocations + } + return nil +} + +func (m *ClusterUpdate) GetDesiredMasterVersion() string { + if m != nil { + return m.DesiredMasterVersion + } + return "" +} + +// This operation resource represents operations that may have happened or are +// happening on the cluster. All fields are output only. +type Operation struct { + // The server-assigned ID for the operation. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the operation + // is taking place. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The operation type. + OperationType Operation_Type `protobuf:"varint,3,opt,name=operation_type,json=operationType,enum=google.container.v1.Operation_Type" json:"operation_type,omitempty"` + // The current status of the operation. + Status Operation_Status `protobuf:"varint,4,opt,name=status,enum=google.container.v1.Operation_Status" json:"status,omitempty"` + // Detailed operation progress, if available. + Detail string `protobuf:"bytes,8,opt,name=detail" json:"detail,omitempty"` + // If an error has occurred, a textual description of the error. + StatusMessage string `protobuf:"bytes,5,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` + // Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,6,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // Server-defined URL for the target of the operation. + TargetLink string `protobuf:"bytes,7,opt,name=target_link,json=targetLink" json:"target_link,omitempty"` +} + +func (m *Operation) Reset() { *m = Operation{} } +func (m *Operation) String() string { return proto.CompactTextString(m) } +func (*Operation) ProtoMessage() {} +func (*Operation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *Operation) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Operation) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *Operation) GetOperationType() Operation_Type { + if m != nil { + return m.OperationType + } + return Operation_TYPE_UNSPECIFIED +} + +func (m *Operation) GetStatus() Operation_Status { + if m != nil { + return m.Status + } + return Operation_STATUS_UNSPECIFIED +} + +func (m *Operation) GetDetail() string { + if m != nil { + return m.Detail + } + return "" +} + +func (m *Operation) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +func (m *Operation) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *Operation) GetTargetLink() string { + if m != nil { + return m.TargetLink + } + return "" +} + +// CreateClusterRequest creates a cluster. +type CreateClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // A [cluster + // resource](/container-engine/reference/rest/v1/projects.zones.clusters) + Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"` +} + +func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } +func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*CreateClusterRequest) ProtoMessage() {} +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *CreateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CreateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +// GetClusterRequest gets the settings of a cluster. +type GetClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to retrieve. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` +} + +func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } +func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } +func (*GetClusterRequest) ProtoMessage() {} +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *GetClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +// UpdateClusterRequest updates the settings of a cluster. +type UpdateClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // A description of the update. + Update *ClusterUpdate `protobuf:"bytes,4,opt,name=update" json:"update,omitempty"` +} + +func (m *UpdateClusterRequest) Reset() { *m = UpdateClusterRequest{} } +func (m *UpdateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateClusterRequest) ProtoMessage() {} +func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *UpdateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *UpdateClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *UpdateClusterRequest) GetUpdate() *ClusterUpdate { + if m != nil { + return m.Update + } + return nil +} + +// DeleteClusterRequest deletes a cluster. +type DeleteClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to delete. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` +} + +func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } +func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteClusterRequest) ProtoMessage() {} +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *DeleteClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *DeleteClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +// ListClustersRequest lists clusters. +type ListClustersRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides, or "-" for all zones. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` +} + +func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } +func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } +func (*ListClustersRequest) ProtoMessage() {} +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ListClustersRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListClustersRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +// ListClustersResponse is the result of ListClustersRequest. +type ListClustersResponse struct { + // A list of clusters in the project in the specified zone, or + // across all ones. + Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"` + // If any zones are listed here, the list of clusters returned + // may be missing those zones. + MissingZones []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones" json:"missing_zones,omitempty"` +} + +func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } +func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } +func (*ListClustersResponse) ProtoMessage() {} +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *ListClustersResponse) GetClusters() []*Cluster { + if m != nil { + return m.Clusters + } + return nil +} + +func (m *ListClustersResponse) GetMissingZones() []string { + if m != nil { + return m.MissingZones + } + return nil +} + +// GetOperationRequest gets a single operation. +type GetOperationRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The server-assigned `name` of the operation. + OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` +} + +func (m *GetOperationRequest) Reset() { *m = GetOperationRequest{} } +func (m *GetOperationRequest) String() string { return proto.CompactTextString(m) } +func (*GetOperationRequest) ProtoMessage() {} +func (*GetOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *GetOperationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetOperationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetOperationRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +// ListOperationsRequest lists operations. +type ListOperationsRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine [zone](/compute/docs/zones#available) + // to return operations for, or `-` for all zones. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` +} + +func (m *ListOperationsRequest) Reset() { *m = ListOperationsRequest{} } +func (m *ListOperationsRequest) String() string { return proto.CompactTextString(m) } +func (*ListOperationsRequest) ProtoMessage() {} +func (*ListOperationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *ListOperationsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListOperationsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +// CancelOperationRequest cancels a single operation. +type CancelOperationRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the operation resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The server-assigned `name` of the operation. + OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` +} + +func (m *CancelOperationRequest) Reset() { *m = CancelOperationRequest{} } +func (m *CancelOperationRequest) String() string { return proto.CompactTextString(m) } +func (*CancelOperationRequest) ProtoMessage() {} +func (*CancelOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *CancelOperationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CancelOperationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CancelOperationRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +// ListOperationsResponse is the result of ListOperationsRequest. +type ListOperationsResponse struct { + // A list of operations in the project in the specified zone. + Operations []*Operation `protobuf:"bytes,1,rep,name=operations" json:"operations,omitempty"` + // If any zones are listed here, the list of operations returned + // may be missing the operations from those zones. + MissingZones []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones" json:"missing_zones,omitempty"` +} + +func (m *ListOperationsResponse) Reset() { *m = ListOperationsResponse{} } +func (m *ListOperationsResponse) String() string { return proto.CompactTextString(m) } +func (*ListOperationsResponse) ProtoMessage() {} +func (*ListOperationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *ListOperationsResponse) GetOperations() []*Operation { + if m != nil { + return m.Operations + } + return nil +} + +func (m *ListOperationsResponse) GetMissingZones() []string { + if m != nil { + return m.MissingZones + } + return nil +} + +// Gets the current Container Engine service configuration. +type GetServerConfigRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine [zone](/compute/docs/zones#available) + // to return operations for. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` +} + +func (m *GetServerConfigRequest) Reset() { *m = GetServerConfigRequest{} } +func (m *GetServerConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetServerConfigRequest) ProtoMessage() {} +func (*GetServerConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *GetServerConfigRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetServerConfigRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +// Container Engine service configuration. +type ServerConfig struct { + // Version of Kubernetes the service deploys by default. + DefaultClusterVersion string `protobuf:"bytes,1,opt,name=default_cluster_version,json=defaultClusterVersion" json:"default_cluster_version,omitempty"` + // List of valid node upgrade target versions. + ValidNodeVersions []string `protobuf:"bytes,3,rep,name=valid_node_versions,json=validNodeVersions" json:"valid_node_versions,omitempty"` + // Default image type. + DefaultImageType string `protobuf:"bytes,4,opt,name=default_image_type,json=defaultImageType" json:"default_image_type,omitempty"` + // List of valid image types. + ValidImageTypes []string `protobuf:"bytes,5,rep,name=valid_image_types,json=validImageTypes" json:"valid_image_types,omitempty"` + // List of valid master versions. + ValidMasterVersions []string `protobuf:"bytes,6,rep,name=valid_master_versions,json=validMasterVersions" json:"valid_master_versions,omitempty"` +} + +func (m *ServerConfig) Reset() { *m = ServerConfig{} } +func (m *ServerConfig) String() string { return proto.CompactTextString(m) } +func (*ServerConfig) ProtoMessage() {} +func (*ServerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *ServerConfig) GetDefaultClusterVersion() string { + if m != nil { + return m.DefaultClusterVersion + } + return "" +} + +func (m *ServerConfig) GetValidNodeVersions() []string { + if m != nil { + return m.ValidNodeVersions + } + return nil +} + +func (m *ServerConfig) GetDefaultImageType() string { + if m != nil { + return m.DefaultImageType + } + return "" +} + +func (m *ServerConfig) GetValidImageTypes() []string { + if m != nil { + return m.ValidImageTypes + } + return nil +} + +func (m *ServerConfig) GetValidMasterVersions() []string { + if m != nil { + return m.ValidMasterVersions + } + return nil +} + +// CreateNodePoolRequest creates a node pool for a cluster. +type CreateNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The node pool to create. + NodePool *NodePool `protobuf:"bytes,4,opt,name=node_pool,json=nodePool" json:"node_pool,omitempty"` +} + +func (m *CreateNodePoolRequest) Reset() { *m = CreateNodePoolRequest{} } +func (m *CreateNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*CreateNodePoolRequest) ProtoMessage() {} +func (*CreateNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *CreateNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CreateNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *CreateNodePoolRequest) GetNodePool() *NodePool { + if m != nil { + return m.NodePool + } + return nil +} + +// DeleteNodePoolRequest deletes a node pool for a cluster. +type DeleteNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to delete. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` +} + +func (m *DeleteNodePoolRequest) Reset() { *m = DeleteNodePoolRequest{} } +func (m *DeleteNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteNodePoolRequest) ProtoMessage() {} +func (*DeleteNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *DeleteNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *DeleteNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *DeleteNodePoolRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +// ListNodePoolsRequest lists the node pool(s) for a cluster. +type ListNodePoolsRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` +} + +func (m *ListNodePoolsRequest) Reset() { *m = ListNodePoolsRequest{} } +func (m *ListNodePoolsRequest) String() string { return proto.CompactTextString(m) } +func (*ListNodePoolsRequest) ProtoMessage() {} +func (*ListNodePoolsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *ListNodePoolsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListNodePoolsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ListNodePoolsRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +// GetNodePoolRequest retrieves a node pool for a cluster. +type GetNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` +} + +func (m *GetNodePoolRequest) Reset() { *m = GetNodePoolRequest{} } +func (m *GetNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*GetNodePoolRequest) ProtoMessage() {} +func (*GetNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *GetNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *GetNodePoolRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +// NodePool contains the name and configuration for a cluster's node pool. +// Node pools are a set of nodes (i.e. VM's), with a common configuration and +// specification, under the control of the cluster master. They may have a set +// of Kubernetes labels applied to them, which may be used to reference them +// during pod scheduling. They may also be resized up or down, to accommodate +// the workload. +type NodePool struct { + // The name of the node pool. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The node configuration of the pool. + Config *NodeConfig `protobuf:"bytes,2,opt,name=config" json:"config,omitempty"` + // The initial node count for the pool. You must ensure that your + // Compute Engine <a href="/compute/docs/resource-quotas">resource quota</a> + // is sufficient for this number of instances. You must also have available + // firewall and routes quota. + InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount" json:"initial_node_count,omitempty"` + // [Output only] Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // [Output only] The version of the Kubernetes of this node. + Version string `protobuf:"bytes,101,opt,name=version" json:"version,omitempty"` + // [Output only] The resource URLs of [instance + // groups](/compute/docs/instance-groups/) associated with this + // node pool. + InstanceGroupUrls []string `protobuf:"bytes,102,rep,name=instance_group_urls,json=instanceGroupUrls" json:"instance_group_urls,omitempty"` + // [Output only] The status of the nodes in this pool instance. + Status NodePool_Status `protobuf:"varint,103,opt,name=status,enum=google.container.v1.NodePool_Status" json:"status,omitempty"` + // [Output only] Additional information about the current status of this + // node pool instance, if available. + StatusMessage string `protobuf:"bytes,104,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` + // Autoscaler configuration for this NodePool. Autoscaler is enabled + // only if a valid configuration is present. + Autoscaling *NodePoolAutoscaling `protobuf:"bytes,4,opt,name=autoscaling" json:"autoscaling,omitempty"` + // NodeManagement configuration for this NodePool. + Management *NodeManagement `protobuf:"bytes,5,opt,name=management" json:"management,omitempty"` +} + +func (m *NodePool) Reset() { *m = NodePool{} } +func (m *NodePool) String() string { return proto.CompactTextString(m) } +func (*NodePool) ProtoMessage() {} +func (*NodePool) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *NodePool) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *NodePool) GetConfig() *NodeConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *NodePool) GetInitialNodeCount() int32 { + if m != nil { + return m.InitialNodeCount + } + return 0 +} + +func (m *NodePool) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *NodePool) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *NodePool) GetInstanceGroupUrls() []string { + if m != nil { + return m.InstanceGroupUrls + } + return nil +} + +func (m *NodePool) GetStatus() NodePool_Status { + if m != nil { + return m.Status + } + return NodePool_STATUS_UNSPECIFIED +} + +func (m *NodePool) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +func (m *NodePool) GetAutoscaling() *NodePoolAutoscaling { + if m != nil { + return m.Autoscaling + } + return nil +} + +func (m *NodePool) GetManagement() *NodeManagement { + if m != nil { + return m.Management + } + return nil +} + +// NodeManagement defines the set of node management services turned on for the +// node pool. +type NodeManagement struct { + // Whether the nodes will be automatically upgraded. + AutoUpgrade bool `protobuf:"varint,1,opt,name=auto_upgrade,json=autoUpgrade" json:"auto_upgrade,omitempty"` + // Specifies the Auto Upgrade knobs for the node pool. + UpgradeOptions *AutoUpgradeOptions `protobuf:"bytes,10,opt,name=upgrade_options,json=upgradeOptions" json:"upgrade_options,omitempty"` +} + +func (m *NodeManagement) Reset() { *m = NodeManagement{} } +func (m *NodeManagement) String() string { return proto.CompactTextString(m) } +func (*NodeManagement) ProtoMessage() {} +func (*NodeManagement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *NodeManagement) GetAutoUpgrade() bool { + if m != nil { + return m.AutoUpgrade + } + return false +} + +func (m *NodeManagement) GetUpgradeOptions() *AutoUpgradeOptions { + if m != nil { + return m.UpgradeOptions + } + return nil +} + +// AutoUpgradeOptions defines the set of options for the user to control how +// the Auto Upgrades will proceed. +type AutoUpgradeOptions struct { + // [Output only] This field is set when upgrades are about to commence + // with the approximate start time for the upgrades, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + AutoUpgradeStartTime string `protobuf:"bytes,1,opt,name=auto_upgrade_start_time,json=autoUpgradeStartTime" json:"auto_upgrade_start_time,omitempty"` + // [Output only] This field is set when upgrades are about to commence + // with the description of the upgrade. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *AutoUpgradeOptions) Reset() { *m = AutoUpgradeOptions{} } +func (m *AutoUpgradeOptions) String() string { return proto.CompactTextString(m) } +func (*AutoUpgradeOptions) ProtoMessage() {} +func (*AutoUpgradeOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *AutoUpgradeOptions) GetAutoUpgradeStartTime() string { + if m != nil { + return m.AutoUpgradeStartTime + } + return "" +} + +func (m *AutoUpgradeOptions) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// SetNodePoolManagementRequest sets the node management properties of a node +// pool. +type SetNodePoolManagementRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to update. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // NodeManagement configuration for the node pool. + Management *NodeManagement `protobuf:"bytes,5,opt,name=management" json:"management,omitempty"` +} + +func (m *SetNodePoolManagementRequest) Reset() { *m = SetNodePoolManagementRequest{} } +func (m *SetNodePoolManagementRequest) String() string { return proto.CompactTextString(m) } +func (*SetNodePoolManagementRequest) ProtoMessage() {} +func (*SetNodePoolManagementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *SetNodePoolManagementRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetManagement() *NodeManagement { + if m != nil { + return m.Management + } + return nil +} + +// RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed +// NodePool upgrade. This will be an no-op if the last upgrade successfully +// completed. +type RollbackNodePoolUpgradeRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to rollback. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to rollback. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` +} + +func (m *RollbackNodePoolUpgradeRequest) Reset() { *m = RollbackNodePoolUpgradeRequest{} } +func (m *RollbackNodePoolUpgradeRequest) String() string { return proto.CompactTextString(m) } +func (*RollbackNodePoolUpgradeRequest) ProtoMessage() {} +func (*RollbackNodePoolUpgradeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +func (m *RollbackNodePoolUpgradeRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +// ListNodePoolsResponse is the result of ListNodePoolsRequest. +type ListNodePoolsResponse struct { + // A list of node pools for a cluster. + NodePools []*NodePool `protobuf:"bytes,1,rep,name=node_pools,json=nodePools" json:"node_pools,omitempty"` +} + +func (m *ListNodePoolsResponse) Reset() { *m = ListNodePoolsResponse{} } +func (m *ListNodePoolsResponse) String() string { return proto.CompactTextString(m) } +func (*ListNodePoolsResponse) ProtoMessage() {} +func (*ListNodePoolsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +func (m *ListNodePoolsResponse) GetNodePools() []*NodePool { + if m != nil { + return m.NodePools + } + return nil +} + +// NodePoolAutoscaling contains information required by cluster autoscaler to +// adjust the size of the node pool to the current cluster usage. +type NodePoolAutoscaling struct { + // Is autoscaling enabled for this node pool. + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + // Minimum number of nodes in the NodePool. Must be >= 1 and <= + // max_node_count. + MinNodeCount int32 `protobuf:"varint,2,opt,name=min_node_count,json=minNodeCount" json:"min_node_count,omitempty"` + // Maximum number of nodes in the NodePool. Must be >= min_node_count. There + // has to enough quota to scale up the cluster. + MaxNodeCount int32 `protobuf:"varint,3,opt,name=max_node_count,json=maxNodeCount" json:"max_node_count,omitempty"` +} + +func (m *NodePoolAutoscaling) Reset() { *m = NodePoolAutoscaling{} } +func (m *NodePoolAutoscaling) String() string { return proto.CompactTextString(m) } +func (*NodePoolAutoscaling) ProtoMessage() {} +func (*NodePoolAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +func (m *NodePoolAutoscaling) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *NodePoolAutoscaling) GetMinNodeCount() int32 { + if m != nil { + return m.MinNodeCount + } + return 0 +} + +func (m *NodePoolAutoscaling) GetMaxNodeCount() int32 { + if m != nil { + return m.MaxNodeCount + } + return 0 +} + +func init() { + proto.RegisterType((*NodeConfig)(nil), "google.container.v1.NodeConfig") + proto.RegisterType((*MasterAuth)(nil), "google.container.v1.MasterAuth") + proto.RegisterType((*AddonsConfig)(nil), "google.container.v1.AddonsConfig") + proto.RegisterType((*HttpLoadBalancing)(nil), "google.container.v1.HttpLoadBalancing") + proto.RegisterType((*HorizontalPodAutoscaling)(nil), "google.container.v1.HorizontalPodAutoscaling") + proto.RegisterType((*Cluster)(nil), "google.container.v1.Cluster") + proto.RegisterType((*ClusterUpdate)(nil), "google.container.v1.ClusterUpdate") + proto.RegisterType((*Operation)(nil), "google.container.v1.Operation") + proto.RegisterType((*CreateClusterRequest)(nil), "google.container.v1.CreateClusterRequest") + proto.RegisterType((*GetClusterRequest)(nil), "google.container.v1.GetClusterRequest") + proto.RegisterType((*UpdateClusterRequest)(nil), "google.container.v1.UpdateClusterRequest") + proto.RegisterType((*DeleteClusterRequest)(nil), "google.container.v1.DeleteClusterRequest") + proto.RegisterType((*ListClustersRequest)(nil), "google.container.v1.ListClustersRequest") + proto.RegisterType((*ListClustersResponse)(nil), "google.container.v1.ListClustersResponse") + proto.RegisterType((*GetOperationRequest)(nil), "google.container.v1.GetOperationRequest") + proto.RegisterType((*ListOperationsRequest)(nil), "google.container.v1.ListOperationsRequest") + proto.RegisterType((*CancelOperationRequest)(nil), "google.container.v1.CancelOperationRequest") + proto.RegisterType((*ListOperationsResponse)(nil), "google.container.v1.ListOperationsResponse") + proto.RegisterType((*GetServerConfigRequest)(nil), "google.container.v1.GetServerConfigRequest") + proto.RegisterType((*ServerConfig)(nil), "google.container.v1.ServerConfig") + proto.RegisterType((*CreateNodePoolRequest)(nil), "google.container.v1.CreateNodePoolRequest") + proto.RegisterType((*DeleteNodePoolRequest)(nil), "google.container.v1.DeleteNodePoolRequest") + proto.RegisterType((*ListNodePoolsRequest)(nil), "google.container.v1.ListNodePoolsRequest") + proto.RegisterType((*GetNodePoolRequest)(nil), "google.container.v1.GetNodePoolRequest") + proto.RegisterType((*NodePool)(nil), "google.container.v1.NodePool") + proto.RegisterType((*NodeManagement)(nil), "google.container.v1.NodeManagement") + proto.RegisterType((*AutoUpgradeOptions)(nil), "google.container.v1.AutoUpgradeOptions") + proto.RegisterType((*SetNodePoolManagementRequest)(nil), "google.container.v1.SetNodePoolManagementRequest") + proto.RegisterType((*RollbackNodePoolUpgradeRequest)(nil), "google.container.v1.RollbackNodePoolUpgradeRequest") + proto.RegisterType((*ListNodePoolsResponse)(nil), "google.container.v1.ListNodePoolsResponse") + proto.RegisterType((*NodePoolAutoscaling)(nil), "google.container.v1.NodePoolAutoscaling") + proto.RegisterEnum("google.container.v1.Cluster_Status", Cluster_Status_name, Cluster_Status_value) + proto.RegisterEnum("google.container.v1.Operation_Status", Operation_Status_name, Operation_Status_value) + proto.RegisterEnum("google.container.v1.Operation_Type", Operation_Type_name, Operation_Type_value) + proto.RegisterEnum("google.container.v1.NodePool_Status", NodePool_Status_name, NodePool_Status_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ClusterManager service + +type ClusterManagerClient interface { + // Lists all clusters owned by a project in either the specified zone or all + // zones. + ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) + // Gets the details of a specific cluster. + GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + // Creates a cluster, consisting of the specified number and type of Google + // Compute Engine instances. + // + // By default, the cluster is created in the project's + // [default network](/compute/docs/networks-and-firewalls#networks). + // + // One firewall is added for the cluster. After cluster creation, + // the cluster creates routes for each node to allow the containers + // on that node to communicate with all other instances in the + // cluster. + // + // Finally, an entry is added to the project's global metadata indicating + // which CIDR range is being used by the cluster. + CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Updates the settings of a specific cluster. + UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Deletes the cluster, including the Kubernetes endpoint and all worker + // nodes. + // + // Firewalls and routes that were configured during cluster creation + // are also deleted. + // + // Other Google Compute Engine resources that might be in use by the cluster + // (e.g. load balancer resources) will not be deleted if they weren't present + // at the initial create time. + DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Lists all operations in a project in a specific zone or all zones. + ListOperations(ctx context.Context, in *ListOperationsRequest, opts ...grpc.CallOption) (*ListOperationsResponse, error) + // Gets the specified operation. + GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error) + // Cancels the specified operation. + CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Returns configuration info about the Container Engine service. + GetServerConfig(ctx context.Context, in *GetServerConfigRequest, opts ...grpc.CallOption) (*ServerConfig, error) + // Lists the node pools for a cluster. + ListNodePools(ctx context.Context, in *ListNodePoolsRequest, opts ...grpc.CallOption) (*ListNodePoolsResponse, error) + // Retrieves the node pool requested. + GetNodePool(ctx context.Context, in *GetNodePoolRequest, opts ...grpc.CallOption) (*NodePool, error) + // Creates a node pool for a cluster. + CreateNodePool(ctx context.Context, in *CreateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) + // Deletes a node pool from a cluster. + DeleteNodePool(ctx context.Context, in *DeleteNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) + // Roll back the previously Aborted or Failed NodePool upgrade. + // This will be an no-op if the last upgrade successfully completed. + RollbackNodePoolUpgrade(ctx context.Context, in *RollbackNodePoolUpgradeRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the NodeManagement options for a node pool. + SetNodePoolManagement(ctx context.Context, in *SetNodePoolManagementRequest, opts ...grpc.CallOption) (*Operation, error) +} + +type clusterManagerClient struct { + cc *grpc.ClientConn +} + +func NewClusterManagerClient(cc *grpc.ClientConn) ClusterManagerClient { + return &clusterManagerClient{cc} +} + +func (c *clusterManagerClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { + out := new(ListClustersResponse) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/ListClusters", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/GetCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/CreateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/UpdateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/DeleteCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) ListOperations(ctx context.Context, in *ListOperationsRequest, opts ...grpc.CallOption) (*ListOperationsResponse, error) { + out := new(ListOperationsResponse) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/ListOperations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/GetOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/CancelOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetServerConfig(ctx context.Context, in *GetServerConfigRequest, opts ...grpc.CallOption) (*ServerConfig, error) { + out := new(ServerConfig) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/GetServerConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) ListNodePools(ctx context.Context, in *ListNodePoolsRequest, opts ...grpc.CallOption) (*ListNodePoolsResponse, error) { + out := new(ListNodePoolsResponse) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/ListNodePools", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetNodePool(ctx context.Context, in *GetNodePoolRequest, opts ...grpc.CallOption) (*NodePool, error) { + out := new(NodePool) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/GetNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CreateNodePool(ctx context.Context, in *CreateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/CreateNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) DeleteNodePool(ctx context.Context, in *DeleteNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/DeleteNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) RollbackNodePoolUpgrade(ctx context.Context, in *RollbackNodePoolUpgradeRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/RollbackNodePoolUpgrade", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNodePoolManagement(ctx context.Context, in *SetNodePoolManagementRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetNodePoolManagement", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ClusterManager service + +type ClusterManagerServer interface { + // Lists all clusters owned by a project in either the specified zone or all + // zones. + ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) + // Gets the details of a specific cluster. + GetCluster(context.Context, *GetClusterRequest) (*Cluster, error) + // Creates a cluster, consisting of the specified number and type of Google + // Compute Engine instances. + // + // By default, the cluster is created in the project's + // [default network](/compute/docs/networks-and-firewalls#networks). + // + // One firewall is added for the cluster. After cluster creation, + // the cluster creates routes for each node to allow the containers + // on that node to communicate with all other instances in the + // cluster. + // + // Finally, an entry is added to the project's global metadata indicating + // which CIDR range is being used by the cluster. + CreateCluster(context.Context, *CreateClusterRequest) (*Operation, error) + // Updates the settings of a specific cluster. + UpdateCluster(context.Context, *UpdateClusterRequest) (*Operation, error) + // Deletes the cluster, including the Kubernetes endpoint and all worker + // nodes. + // + // Firewalls and routes that were configured during cluster creation + // are also deleted. + // + // Other Google Compute Engine resources that might be in use by the cluster + // (e.g. load balancer resources) will not be deleted if they weren't present + // at the initial create time. + DeleteCluster(context.Context, *DeleteClusterRequest) (*Operation, error) + // Lists all operations in a project in a specific zone or all zones. + ListOperations(context.Context, *ListOperationsRequest) (*ListOperationsResponse, error) + // Gets the specified operation. + GetOperation(context.Context, *GetOperationRequest) (*Operation, error) + // Cancels the specified operation. + CancelOperation(context.Context, *CancelOperationRequest) (*google_protobuf1.Empty, error) + // Returns configuration info about the Container Engine service. + GetServerConfig(context.Context, *GetServerConfigRequest) (*ServerConfig, error) + // Lists the node pools for a cluster. + ListNodePools(context.Context, *ListNodePoolsRequest) (*ListNodePoolsResponse, error) + // Retrieves the node pool requested. + GetNodePool(context.Context, *GetNodePoolRequest) (*NodePool, error) + // Creates a node pool for a cluster. + CreateNodePool(context.Context, *CreateNodePoolRequest) (*Operation, error) + // Deletes a node pool from a cluster. + DeleteNodePool(context.Context, *DeleteNodePoolRequest) (*Operation, error) + // Roll back the previously Aborted or Failed NodePool upgrade. + // This will be an no-op if the last upgrade successfully completed. + RollbackNodePoolUpgrade(context.Context, *RollbackNodePoolUpgradeRequest) (*Operation, error) + // Sets the NodeManagement options for a node pool. + SetNodePoolManagement(context.Context, *SetNodePoolManagementRequest) (*Operation, error) +} + +func RegisterClusterManagerServer(s *grpc.Server, srv ClusterManagerServer) { + s.RegisterService(&_ClusterManager_serviceDesc, srv) +} + +func _ClusterManager_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListClustersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListClusters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/ListClusters", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListClusters(ctx, req.(*ListClustersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/GetCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetCluster(ctx, req.(*GetClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CreateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CreateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/CreateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CreateCluster(ctx, req.(*CreateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).UpdateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/UpdateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).UpdateCluster(ctx, req.(*UpdateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_DeleteCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).DeleteCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/DeleteCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).DeleteCluster(ctx, req.(*DeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_ListOperations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListOperationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListOperations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/ListOperations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListOperations(ctx, req.(*ListOperationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/GetOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetOperation(ctx, req.(*GetOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CancelOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CancelOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/CancelOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CancelOperation(ctx, req.(*CancelOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetServerConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServerConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetServerConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/GetServerConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetServerConfig(ctx, req.(*GetServerConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_ListNodePools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNodePoolsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListNodePools(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/ListNodePools", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListNodePools(ctx, req.(*ListNodePoolsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/GetNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetNodePool(ctx, req.(*GetNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CreateNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CreateNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/CreateNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CreateNodePool(ctx, req.(*CreateNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_DeleteNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).DeleteNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/DeleteNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).DeleteNodePool(ctx, req.(*DeleteNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_RollbackNodePoolUpgrade_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RollbackNodePoolUpgradeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).RollbackNodePoolUpgrade(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/RollbackNodePoolUpgrade", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).RollbackNodePoolUpgrade(ctx, req.(*RollbackNodePoolUpgradeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNodePoolManagement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNodePoolManagementRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNodePoolManagement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetNodePoolManagement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNodePoolManagement(ctx, req.(*SetNodePoolManagementRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ClusterManager_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.container.v1.ClusterManager", + HandlerType: (*ClusterManagerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListClusters", + Handler: _ClusterManager_ListClusters_Handler, + }, + { + MethodName: "GetCluster", + Handler: _ClusterManager_GetCluster_Handler, + }, + { + MethodName: "CreateCluster", + Handler: _ClusterManager_CreateCluster_Handler, + }, + { + MethodName: "UpdateCluster", + Handler: _ClusterManager_UpdateCluster_Handler, + }, + { + MethodName: "DeleteCluster", + Handler: _ClusterManager_DeleteCluster_Handler, + }, + { + MethodName: "ListOperations", + Handler: _ClusterManager_ListOperations_Handler, + }, + { + MethodName: "GetOperation", + Handler: _ClusterManager_GetOperation_Handler, + }, + { + MethodName: "CancelOperation", + Handler: _ClusterManager_CancelOperation_Handler, + }, + { + MethodName: "GetServerConfig", + Handler: _ClusterManager_GetServerConfig_Handler, + }, + { + MethodName: "ListNodePools", + Handler: _ClusterManager_ListNodePools_Handler, + }, + { + MethodName: "GetNodePool", + Handler: _ClusterManager_GetNodePool_Handler, + }, + { + MethodName: "CreateNodePool", + Handler: _ClusterManager_CreateNodePool_Handler, + }, + { + MethodName: "DeleteNodePool", + Handler: _ClusterManager_DeleteNodePool_Handler, + }, + { + MethodName: "RollbackNodePoolUpgrade", + Handler: _ClusterManager_RollbackNodePoolUpgrade_Handler, + }, + { + MethodName: "SetNodePoolManagement", + Handler: _ClusterManager_SetNodePoolManagement_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/container/v1/cluster_service.proto", +} + +func init() { proto.RegisterFile("google/container/v1/cluster_service.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2838 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcb, 0x6f, 0xe3, 0xd6, + 0xd5, 0xff, 0x68, 0xcb, 0xb2, 0x74, 0xf4, 0xb0, 0x7c, 0xfd, 0x18, 0x42, 0x99, 0xc9, 0x38, 0xcc, + 0x63, 0x26, 0xce, 0x17, 0x2b, 0xf3, 0xc8, 0xcb, 0x33, 0x0d, 0xa2, 0x91, 0x15, 0x8f, 0x32, 0x7e, + 0xa8, 0x94, 0x9d, 0xa0, 0x01, 0x5a, 0x82, 0x16, 0xaf, 0x25, 0xc6, 0x14, 0xc9, 0xf0, 0x52, 0x4e, + 0x3c, 0x03, 0x2f, 0x5a, 0x34, 0x40, 0x81, 0x2e, 0x5b, 0x14, 0x5d, 0x14, 0x45, 0x91, 0xa6, 0x9b, + 0x6e, 0xba, 0x29, 0xba, 0xe9, 0xb6, 0x8b, 0xee, 0xb3, 0x28, 0x5a, 0xa0, 0xe8, 0xa6, 0xe8, 0xb6, + 0xff, 0x42, 0x71, 0x1f, 0xa4, 0x48, 0x99, 0xb2, 0xec, 0x78, 0xdc, 0x74, 0x35, 0xba, 0xe7, 0x71, + 0xef, 0xb9, 0xe7, 0xf1, 0xbb, 0xe7, 0xd0, 0x03, 0x2f, 0x77, 0x1c, 0xa7, 0x63, 0xe1, 0x4a, 0xdb, + 0xb1, 0x7d, 0xdd, 0xb4, 0xb1, 0x57, 0x39, 0xbc, 0x55, 0x69, 0x5b, 0x7d, 0xe2, 0x63, 0x4f, 0x23, + 0xd8, 0x3b, 0x34, 0xdb, 0x78, 0xc5, 0xf5, 0x1c, 0xdf, 0x41, 0x73, 0x5c, 0x74, 0x25, 0x14, 0x5d, + 0x39, 0xbc, 0x55, 0xbe, 0x2a, 0xf4, 0x75, 0xd7, 0xac, 0xe8, 0xb6, 0xed, 0xf8, 0xba, 0x6f, 0x3a, + 0x36, 0xe1, 0x2a, 0xe5, 0x67, 0x04, 0x97, 0xad, 0xf6, 0xfa, 0xfb, 0x15, 0xdc, 0x73, 0xfd, 0x23, + 0xce, 0x54, 0xbe, 0x48, 0x01, 0x6c, 0x39, 0x06, 0xae, 0x39, 0xf6, 0xbe, 0xd9, 0x41, 0xcf, 0x41, + 0xbe, 0xa7, 0xb7, 0xbb, 0xa6, 0x8d, 0x35, 0xff, 0xc8, 0xc5, 0xb2, 0xb4, 0x24, 0xdd, 0xcc, 0xaa, + 0x39, 0x41, 0xdb, 0x39, 0x72, 0x31, 0x5a, 0x82, 0xbc, 0x61, 0x92, 0x03, 0x8d, 0x98, 0x8f, 0xb1, + 0xd6, 0xd9, 0x93, 0x27, 0x96, 0xa4, 0x9b, 0x53, 0x2a, 0x50, 0x5a, 0xcb, 0x7c, 0x8c, 0xd7, 0xf7, + 0xe8, 0x26, 0x8e, 0xde, 0xf7, 0xbb, 0x1a, 0x69, 0x3b, 0x2e, 0x26, 0xf2, 0xe4, 0xd2, 0x24, 0xdd, + 0x84, 0xd1, 0x5a, 0x8c, 0x84, 0x6e, 0xc0, 0x8c, 0xb8, 0x97, 0xa6, 0xb7, 0xdb, 0x4e, 0xdf, 0xf6, + 0xe5, 0x2c, 0x3b, 0xaa, 0x28, 0xc8, 0x55, 0x4e, 0x45, 0x0d, 0xc8, 0xf4, 0xb0, 0xaf, 0x1b, 0xba, + 0xaf, 0xcb, 0xa9, 0xa5, 0xc9, 0x9b, 0xb9, 0xdb, 0xaf, 0xae, 0x24, 0xb8, 0x60, 0x65, 0x70, 0x87, + 0x95, 0x4d, 0x21, 0x5f, 0xb7, 0x7d, 0xef, 0x48, 0x0d, 0xd5, 0xd1, 0x35, 0x00, 0xb3, 0xa7, 0x77, + 0xc4, 0xcd, 0xa6, 0xd8, 0x71, 0x59, 0x46, 0x61, 0xf7, 0xaa, 0x41, 0xda, 0xd2, 0xf7, 0xb0, 0x45, + 0xe4, 0x34, 0x3b, 0xe7, 0x95, 0x71, 0xe7, 0x6c, 0x30, 0x69, 0x7e, 0x8a, 0x50, 0x45, 0x2f, 0xc1, + 0x8c, 0xe5, 0xb4, 0x75, 0x4b, 0x23, 0xc4, 0xd0, 0xf8, 0xbd, 0xa6, 0x99, 0x7f, 0x0a, 0x8c, 0xdc, + 0x22, 0x46, 0x8d, 0x5d, 0x0b, 0x41, 0xca, 0xd7, 0x3b, 0x44, 0xce, 0x30, 0xd7, 0xb0, 0xdf, 0x68, + 0x09, 0x72, 0xae, 0x87, 0x69, 0x70, 0xcc, 0x3d, 0x0b, 0xcb, 0xb0, 0x24, 0xdd, 0xcc, 0xa8, 0x51, + 0x52, 0xf9, 0x1e, 0x14, 0x62, 0x97, 0x43, 0x25, 0x98, 0x3c, 0xc0, 0x47, 0x22, 0x4a, 0xf4, 0x27, + 0x9a, 0x87, 0xa9, 0x43, 0xdd, 0xea, 0x63, 0x16, 0x96, 0xac, 0xca, 0x17, 0xab, 0x13, 0x6f, 0x49, + 0xe5, 0xb7, 0x21, 0x17, 0xb1, 0xf8, 0x3c, 0xaa, 0xca, 0x9f, 0x25, 0x80, 0x4d, 0x9d, 0x66, 0x63, + 0xb5, 0xef, 0x77, 0x51, 0x19, 0x32, 0x7d, 0x82, 0x3d, 0x5b, 0xef, 0x05, 0x09, 0x12, 0xae, 0x29, + 0xcf, 0xd5, 0x09, 0xf9, 0xd4, 0xf1, 0x0c, 0xb1, 0x4f, 0xb8, 0x46, 0x77, 0x61, 0x31, 0x48, 0xea, + 0xb6, 0xae, 0xb5, 0xb1, 0xe7, 0x9b, 0xfb, 0x66, 0x5b, 0xf7, 0xb1, 0x6c, 0x30, 0xc9, 0x79, 0xc1, + 0xad, 0xe9, 0xb5, 0x01, 0x0f, 0xbd, 0x0a, 0xa8, 0x6d, 0x99, 0xd8, 0xf6, 0x63, 0x1a, 0x98, 0x69, + 0xcc, 0x72, 0x4e, 0x54, 0xfc, 0x1a, 0x80, 0x10, 0xa7, 0xd7, 0xdb, 0xe7, 0x51, 0xe6, 0x94, 0x47, + 0xf8, 0x48, 0xf9, 0x4a, 0x82, 0x7c, 0xd5, 0x30, 0x1c, 0x9b, 0x88, 0x8c, 0xff, 0x00, 0xe6, 0xba, + 0xbe, 0xef, 0x6a, 0x96, 0xa3, 0x1b, 0xda, 0x9e, 0x6e, 0xe9, 0x76, 0xdb, 0xb4, 0x3b, 0xec, 0x5e, + 0xb9, 0xdb, 0x2f, 0x25, 0xe6, 0xc0, 0x43, 0xdf, 0x77, 0x37, 0x1c, 0xdd, 0x78, 0x10, 0x48, 0xab, + 0xb3, 0xdd, 0x61, 0x12, 0x3a, 0x80, 0x72, 0xd7, 0xf1, 0xcc, 0xc7, 0x54, 0xd1, 0xd2, 0x5c, 0xc7, + 0xd0, 0xf4, 0xbe, 0xef, 0x90, 0xb6, 0x6e, 0xd1, 0xed, 0x27, 0xd8, 0xf6, 0xc9, 0xa9, 0xfc, 0x30, + 0x54, 0x6b, 0x3a, 0x46, 0x75, 0xa0, 0xa4, 0xca, 0xdd, 0x11, 0x1c, 0xa5, 0x02, 0xb3, 0x27, 0x8c, + 0xa2, 0xa1, 0x30, 0x4c, 0xa2, 0xef, 0x59, 0xd8, 0x60, 0xd7, 0xc9, 0xa8, 0xe1, 0x5a, 0x79, 0x03, + 0xe4, 0x51, 0xc7, 0x9c, 0xaa, 0xf7, 0x27, 0x80, 0xe9, 0x1a, 0x8f, 0x12, 0xcd, 0xe1, 0x48, 0x0a, + 0xb0, 0xdf, 0x34, 0x87, 0x0d, 0x4c, 0xda, 0x9e, 0xe9, 0x52, 0x04, 0x12, 0x19, 0x10, 0x25, 0xa1, + 0xff, 0x07, 0x64, 0xda, 0xa6, 0x6f, 0xea, 0x96, 0x66, 0x3b, 0x06, 0x16, 0x45, 0x32, 0xc9, 0x8a, + 0xa4, 0x24, 0x38, 0xbc, 0xc8, 0x68, 0x9d, 0xbc, 0x0b, 0x39, 0x21, 0x45, 0x83, 0x25, 0xa7, 0x98, + 0xdb, 0xae, 0x8f, 0xa9, 0x4c, 0x15, 0xec, 0x01, 0xa2, 0xbd, 0x0b, 0xb9, 0x1e, 0x4b, 0x5d, 0xea, + 0xff, 0x2e, 0x2b, 0xfb, 0x51, 0x3b, 0x0c, 0x52, 0x5c, 0x85, 0xde, 0x20, 0xdd, 0x6f, 0xd0, 0x9a, + 0xee, 0x74, 0x4c, 0xbb, 0x13, 0x60, 0xb1, 0x9c, 0xe6, 0x58, 0x25, 0xc8, 0x2d, 0x4e, 0xa5, 0x99, + 0xda, 0x73, 0x6c, 0xd3, 0x77, 0xbc, 0xa8, 0xec, 0x34, 0xcf, 0xd4, 0x01, 0x27, 0x10, 0x97, 0x61, + 0xda, 0xc6, 0xfe, 0xa7, 0x8e, 0x77, 0x20, 0x67, 0x98, 0x4c, 0xb0, 0x44, 0xcb, 0x30, 0x1b, 0x14, + 0x8a, 0xe9, 0x1e, 0xde, 0xd5, 0xda, 0xa6, 0xe1, 0x09, 0x7c, 0x9c, 0x11, 0x8c, 0x86, 0x7b, 0x78, + 0xb7, 0x66, 0x1a, 0x1e, 0x7a, 0x0f, 0x0a, 0x3a, 0xcb, 0xe7, 0xc0, 0x47, 0xc0, 0x6e, 0xf8, 0x5c, + 0xe2, 0x0d, 0xa3, 0x99, 0xaf, 0xe6, 0xf5, 0x68, 0x1d, 0x3c, 0x0b, 0x40, 0xfa, 0x7b, 0x81, 0x41, + 0x39, 0x76, 0x58, 0x84, 0x82, 0xee, 0x03, 0xf3, 0xaa, 0xe6, 0x3a, 0x8e, 0x45, 0xe4, 0x3c, 0x83, + 0xc8, 0x6b, 0x23, 0x03, 0xd1, 0x74, 0x1c, 0x4b, 0xcd, 0xda, 0xe2, 0x17, 0x41, 0x57, 0x21, 0x4b, + 0x01, 0x90, 0x3d, 0x4b, 0x72, 0x81, 0x81, 0xde, 0x80, 0x80, 0xde, 0x80, 0x2b, 0xd8, 0xa6, 0x09, + 0xa6, 0x1d, 0xf4, 0xf7, 0xb0, 0x67, 0x63, 0x1f, 0x13, 0x4d, 0xb7, 0xdc, 0xae, 0x2e, 0x17, 0x59, + 0x02, 0x2e, 0x70, 0xf6, 0xa3, 0x90, 0x5b, 0xa5, 0x4c, 0xf4, 0x0c, 0x64, 0x09, 0xb6, 0xf6, 0x35, + 0xcb, 0xb4, 0x0f, 0x04, 0x86, 0x64, 0x28, 0x61, 0xc3, 0xb4, 0x0f, 0x68, 0x7a, 0x3e, 0x76, 0xec, + 0x00, 0x29, 0xd8, 0x6f, 0x9a, 0xda, 0xd8, 0x36, 0x5c, 0xc7, 0xb4, 0x7d, 0x01, 0x0d, 0xe1, 0x9a, + 0x1a, 0x11, 0x24, 0x66, 0xe0, 0xfc, 0x43, 0xec, 0x11, 0x9a, 0xc6, 0x1d, 0x26, 0xba, 0x20, 0xd8, + 0x22, 0xff, 0x3f, 0xe0, 0x4c, 0x86, 0x6a, 0x7d, 0xcf, 0xa3, 0x88, 0x23, 0x12, 0x2d, 0x50, 0xeb, + 0x0a, 0x54, 0xe3, 0x5c, 0x9e, 0x5d, 0x81, 0xd6, 0x6b, 0x10, 0xd0, 0x79, 0x19, 0x04, 0x3a, 0x26, + 0xd3, 0x41, 0x82, 0x47, 0x5d, 0x19, 0x68, 0x5c, 0x87, 0x5c, 0xdb, 0xc3, 0xba, 0x8f, 0x35, 0xdf, + 0xec, 0x61, 0xf9, 0x63, 0x1e, 0x21, 0x4e, 0xda, 0x31, 0x7b, 0x18, 0xdd, 0x83, 0x34, 0xf1, 0x75, + 0xbf, 0x4f, 0xe4, 0x83, 0x25, 0xe9, 0x66, 0xf1, 0xf6, 0xf3, 0x89, 0xd1, 0x11, 0xd6, 0xaf, 0xb4, + 0x98, 0xa8, 0x2a, 0x54, 0xd0, 0x8b, 0x50, 0xe4, 0xbf, 0xb4, 0x1e, 0x26, 0x44, 0xef, 0x60, 0xd9, + 0x62, 0x07, 0x14, 0x38, 0x75, 0x93, 0x13, 0xd1, 0xab, 0x30, 0xc7, 0xcc, 0x0d, 0xd3, 0x92, 0xb5, + 0x01, 0x72, 0x8f, 0x97, 0x2f, 0x65, 0x05, 0x89, 0x49, 0x7b, 0x01, 0x5a, 0xec, 0xa2, 0x0c, 0x48, + 0x24, 0x93, 0x6d, 0xb6, 0x73, 0x29, 0xe0, 0x84, 0xa9, 0xbc, 0x02, 0x73, 0xa6, 0x4d, 0x7c, 0xdd, + 0x6e, 0x63, 0xad, 0xe3, 0x39, 0x7d, 0x57, 0xeb, 0x7b, 0x16, 0x91, 0x1d, 0x96, 0x2e, 0xb3, 0x01, + 0x6b, 0x9d, 0x72, 0x76, 0x3d, 0x8b, 0xd0, 0xdd, 0x63, 0x3e, 0xe4, 0x50, 0xe2, 0x72, 0x5b, 0x22, + 0x1e, 0xe4, 0x50, 0x72, 0x1d, 0x72, 0xf8, 0x33, 0xd7, 0xf4, 0x84, 0xff, 0x3e, 0xe1, 0xfe, 0xe3, + 0x24, 0xea, 0x3f, 0xc5, 0x84, 0x34, 0x77, 0x0a, 0x5a, 0x04, 0xd4, 0xda, 0xa9, 0xee, 0xec, 0xb6, + 0xb4, 0xdd, 0xad, 0x56, 0xb3, 0x5e, 0x6b, 0xbc, 0xd7, 0xa8, 0xaf, 0x95, 0xfe, 0x0f, 0x95, 0x20, + 0xdf, 0x54, 0xb7, 0x3f, 0x68, 0xb4, 0x1a, 0xdb, 0x5b, 0x8d, 0xad, 0xf5, 0x92, 0x84, 0x72, 0x30, + 0xad, 0xee, 0x6e, 0xb1, 0xc5, 0x04, 0x9a, 0x81, 0x9c, 0x5a, 0xaf, 0x6d, 0x6f, 0xd5, 0x1a, 0x1b, + 0x94, 0x30, 0x89, 0xf2, 0x90, 0x69, 0xed, 0x6c, 0x37, 0x9b, 0x74, 0x95, 0x42, 0x59, 0x98, 0xaa, + 0xab, 0xea, 0xb6, 0x5a, 0x9a, 0x52, 0x3e, 0x4f, 0x41, 0x41, 0x04, 0x62, 0xd7, 0x35, 0xe8, 0xb3, + 0xf5, 0x1a, 0xcc, 0x1b, 0x98, 0x98, 0x1e, 0x36, 0xe2, 0xf9, 0x90, 0xe2, 0xf9, 0x20, 0x78, 0xd1, + 0x7c, 0xb8, 0x0f, 0xe5, 0x40, 0x23, 0x01, 0x75, 0x78, 0x7b, 0x23, 0x0b, 0x89, 0xcd, 0x13, 0xe0, + 0xb3, 0x0b, 0x0b, 0x81, 0x76, 0x1c, 0x3e, 0xd2, 0x67, 0x85, 0x8f, 0x39, 0xa1, 0x1f, 0x7b, 0x4d, + 0x2b, 0x43, 0xd7, 0xa0, 0x68, 0xa1, 0x99, 0x46, 0x00, 0x82, 0x91, 0x6b, 0x50, 0x5c, 0x68, 0x18, + 0x34, 0x86, 0x81, 0x42, 0xa4, 0x39, 0xe3, 0x78, 0x58, 0x12, 0x9c, 0x46, 0xd8, 0xa3, 0x1d, 0xc0, + 0xb5, 0x93, 0xdb, 0x47, 0xdf, 0xd5, 0x2c, 0xb3, 0xfe, 0xe6, 0xa9, 0xb8, 0x14, 0x7d, 0x52, 0xcb, + 0x43, 0x16, 0x45, 0xdf, 0xc1, 0x57, 0x20, 0xb0, 0x57, 0x1b, 0x60, 0x17, 0xb0, 0x64, 0x0c, 0x2c, + 0xdb, 0x08, 0x21, 0xec, 0x2e, 0x2c, 0x86, 0xd1, 0x88, 0xa3, 0x80, 0xe8, 0x6d, 0x82, 0x48, 0x44, + 0x51, 0x40, 0xf9, 0x77, 0x0a, 0xb2, 0xdb, 0x2e, 0xf6, 0xd8, 0x26, 0x89, 0x0f, 0x6a, 0x80, 0x62, + 0x13, 0x11, 0x14, 0x7b, 0x1f, 0x8a, 0x4e, 0xa0, 0xc4, 0xfd, 0x35, 0x79, 0x4a, 0xc1, 0x87, 0xfb, + 0xaf, 0x50, 0x17, 0xaa, 0x85, 0x50, 0x95, 0x79, 0xf4, 0x5b, 0x21, 0x68, 0xa4, 0xd8, 0x1e, 0x2f, + 0x8e, 0xd9, 0x63, 0x08, 0x36, 0x16, 0x21, 0x6d, 0x60, 0x5f, 0x37, 0x2d, 0x11, 0x32, 0xb1, 0x4a, + 0x80, 0x93, 0xa9, 0x24, 0x38, 0x89, 0x01, 0x78, 0x7a, 0x08, 0xc0, 0xaf, 0x43, 0xce, 0xd7, 0xbd, + 0x0e, 0xf6, 0x39, 0x9b, 0xa7, 0x10, 0x70, 0x12, 0x15, 0x50, 0xd4, 0xb1, 0x05, 0x9b, 0x83, 0xe9, + 0x66, 0x7d, 0x6b, 0x2d, 0xa1, 0x56, 0x33, 0x90, 0x5a, 0xdb, 0xde, 0xaa, 0xf3, 0x22, 0xad, 0x3e, + 0xd8, 0x56, 0x77, 0x58, 0x91, 0x2a, 0x7f, 0x97, 0x20, 0xc5, 0x1c, 0x33, 0x0f, 0xa5, 0x9d, 0xef, + 0x34, 0xeb, 0x43, 0x1b, 0x22, 0x28, 0xd6, 0xd4, 0x7a, 0x75, 0xa7, 0xae, 0xd5, 0x36, 0x76, 0x5b, + 0x3b, 0x75, 0xb5, 0x24, 0x51, 0xda, 0x5a, 0x7d, 0xa3, 0x1e, 0xa1, 0x4d, 0x50, 0xda, 0x6e, 0x73, + 0x5d, 0xad, 0xae, 0xd5, 0xb5, 0xcd, 0x2a, 0xa3, 0x4d, 0xa2, 0x59, 0x28, 0x04, 0xb4, 0xad, 0xed, + 0xb5, 0x7a, 0xab, 0x94, 0xa2, 0x62, 0x6a, 0xbd, 0x59, 0x6d, 0xa8, 0xa1, 0xea, 0x14, 0x57, 0x5d, + 0x8b, 0x1e, 0x91, 0xa6, 0xc6, 0x88, 0x63, 0xa9, 0xa6, 0xd6, 0xdc, 0xde, 0xde, 0x28, 0x4d, 0x53, + 0xaa, 0x38, 0x78, 0x40, 0xcd, 0xa0, 0xab, 0x20, 0xb7, 0xea, 0x3b, 0x03, 0x92, 0xb6, 0x59, 0xdd, + 0xaa, 0xae, 0xd7, 0x37, 0xeb, 0x5b, 0x3b, 0xa5, 0xac, 0xf2, 0x7d, 0x09, 0xe6, 0x6b, 0xec, 0xcd, + 0x10, 0xf8, 0xa3, 0xe2, 0x4f, 0xfa, 0x98, 0xf8, 0xb4, 0x6f, 0x76, 0x3d, 0xe7, 0x63, 0xdc, 0xf6, + 0x69, 0xbd, 0xf2, 0x14, 0xcc, 0x0a, 0x4a, 0xc3, 0x48, 0xcc, 0xc3, 0x37, 0x60, 0x5a, 0xbc, 0x94, + 0x2c, 0x01, 0x73, 0xb7, 0xaf, 0x9e, 0xf6, 0xe2, 0xa8, 0x81, 0xb0, 0x82, 0x61, 0x76, 0x1d, 0xfb, + 0x17, 0x3f, 0x9f, 0xb5, 0xfa, 0xa2, 0x4d, 0x32, 0x98, 0x09, 0xac, 0xd5, 0xe7, 0xfd, 0x91, 0xa1, + 0x7c, 0x29, 0xc1, 0x3c, 0x47, 0xd7, 0xcb, 0x3e, 0x0a, 0xad, 0x42, 0xba, 0xcf, 0x4e, 0x12, 0x1d, + 0xaa, 0x72, 0x9a, 0x23, 0xb8, 0x4d, 0xaa, 0xd0, 0x50, 0xba, 0x30, 0xbf, 0x86, 0x2d, 0x7c, 0xf9, + 0x56, 0x2a, 0x0f, 0x61, 0x6e, 0xc3, 0x24, 0x81, 0xe3, 0xc9, 0xd7, 0x3f, 0x48, 0xe9, 0xc3, 0x7c, + 0x7c, 0x27, 0xe2, 0x3a, 0x36, 0xc1, 0xe8, 0x2d, 0xc8, 0x88, 0xe3, 0x88, 0x2c, 0xb1, 0x16, 0xf1, + 0xf4, 0x94, 0x08, 0xa5, 0xd1, 0xf3, 0x50, 0xe8, 0x99, 0x84, 0xd0, 0x27, 0x8c, 0x9e, 0x40, 0xe4, + 0x09, 0x06, 0xb4, 0x79, 0x41, 0xfc, 0x88, 0xd2, 0x94, 0x03, 0x98, 0x5b, 0xc7, 0x7e, 0x08, 0x46, + 0x17, 0xf0, 0xd4, 0x73, 0x90, 0x1f, 0x40, 0x68, 0xe8, 0xab, 0x5c, 0x48, 0x6b, 0x18, 0xca, 0xfb, + 0xb0, 0x40, 0xef, 0x18, 0x9e, 0x76, 0x11, 0x7f, 0xd9, 0xb0, 0x58, 0xa3, 0xbd, 0x8b, 0xf5, 0x5f, + 0xb2, 0xfd, 0x18, 0x16, 0x87, 0x6d, 0x17, 0x11, 0x7a, 0x07, 0x20, 0x14, 0x0c, 0x62, 0xf4, 0xec, + 0xe9, 0x98, 0xaf, 0x46, 0x34, 0xce, 0x16, 0xa7, 0x47, 0xb0, 0xb8, 0x8e, 0x7d, 0xda, 0x6a, 0x60, + 0x4f, 0x74, 0x0b, 0x5f, 0xdf, 0x77, 0x3f, 0x9c, 0x80, 0x7c, 0x74, 0x2b, 0xda, 0xa8, 0x1b, 0x78, + 0x5f, 0xef, 0x5b, 0xfe, 0x89, 0x46, 0x9d, 0x6f, 0xb8, 0x20, 0xd8, 0x43, 0x8d, 0xfa, 0x0a, 0xcc, + 0x1d, 0xea, 0x96, 0x19, 0x6f, 0xb0, 0x82, 0xaf, 0x53, 0xb3, 0x8c, 0x15, 0xe9, 0xaf, 0x08, 0x6f, + 0x4d, 0xf8, 0x39, 0x91, 0xd6, 0x24, 0x15, 0xb4, 0x26, 0x8c, 0x33, 0x68, 0x4d, 0x96, 0x81, 0x6f, + 0x11, 0x91, 0x25, 0xf2, 0x14, 0xdb, 0x7b, 0x86, 0x31, 0x42, 0x51, 0x82, 0x6e, 0xc3, 0x02, 0x97, + 0x8d, 0xb7, 0x0a, 0xfc, 0xcb, 0x53, 0x56, 0xe5, 0x66, 0xc6, 0x3a, 0x05, 0xa2, 0xfc, 0x46, 0x82, + 0x05, 0x0e, 0xdc, 0xe1, 0x7c, 0x75, 0x89, 0x70, 0x96, 0x0d, 0xdb, 0x2b, 0x81, 0x68, 0x63, 0x46, + 0xbd, 0x4c, 0x30, 0xea, 0x29, 0x3f, 0x96, 0x60, 0x81, 0xe3, 0xd9, 0xe5, 0xdb, 0xb9, 0x04, 0xf9, + 0x58, 0x97, 0xc9, 0x63, 0x03, 0x76, 0xd8, 0x5e, 0x52, 0x70, 0xa5, 0x85, 0x10, 0x98, 0x42, 0x2e, + 0x0f, 0x5c, 0x7f, 0x24, 0x01, 0x5a, 0xc7, 0xfe, 0xff, 0xc2, 0xa5, 0xff, 0x95, 0x82, 0x4c, 0x60, + 0x47, 0x62, 0x53, 0xf9, 0x26, 0xa4, 0x45, 0xb7, 0x3f, 0x71, 0xb6, 0x0f, 0x2a, 0x42, 0xfc, 0x9c, + 0x1f, 0x6f, 0x4e, 0x1d, 0xcf, 0x65, 0x98, 0x0e, 0xaa, 0x96, 0x4f, 0xe8, 0xc1, 0x72, 0xd4, 0x18, + 0xb8, 0x3f, 0x6a, 0x0c, 0xbc, 0x1f, 0xb6, 0xb0, 0x1d, 0xd6, 0xc2, 0xbe, 0x70, 0x6a, 0xaa, 0x8e, + 0x1f, 0x7c, 0xbb, 0x49, 0x9d, 0xea, 0xfb, 0x90, 0x8b, 0xce, 0x19, 0xa9, 0x73, 0xce, 0x19, 0x51, + 0x65, 0x54, 0x03, 0xe8, 0xe9, 0xb6, 0xde, 0xc1, 0x3d, 0x6c, 0xfb, 0xe2, 0x8b, 0xd4, 0xf3, 0x23, + 0xb7, 0xda, 0x0c, 0x45, 0xd5, 0x88, 0x1a, 0x6d, 0xe4, 0x2e, 0x38, 0xae, 0x2e, 0x02, 0x12, 0x0b, + 0xed, 0xc3, 0xc6, 0xce, 0x43, 0x8d, 0x0f, 0xa7, 0x93, 0xc3, 0x63, 0x6c, 0x2a, 0x36, 0xc6, 0x4e, + 0x0d, 0xc6, 0xd8, 0xb4, 0xf2, 0xb9, 0x04, 0xc5, 0xb8, 0x89, 0xf4, 0x71, 0xa2, 0x57, 0xd5, 0xfa, + 0x6e, 0xc7, 0xd3, 0x0d, 0x2c, 0x3e, 0x20, 0xb2, 0xeb, 0xef, 0x72, 0x12, 0x6a, 0xc2, 0x8c, 0xe0, + 0x6a, 0x8e, 0x1b, 0x4c, 0x55, 0xd4, 0x07, 0x37, 0x92, 0x87, 0xce, 0x81, 0xea, 0x36, 0x17, 0x57, + 0x8b, 0xfd, 0xd8, 0x5a, 0xe9, 0x01, 0x3a, 0x29, 0x85, 0x5e, 0x87, 0x2b, 0x51, 0x53, 0x34, 0xe2, + 0xeb, 0x9e, 0xcf, 0x87, 0x7f, 0x5e, 0x0c, 0xf3, 0x11, 0xab, 0x5a, 0x94, 0xc9, 0x3e, 0xa3, 0x8c, + 0xfd, 0x84, 0xa9, 0xfc, 0x45, 0x82, 0xab, 0xad, 0x41, 0xa9, 0x47, 0x02, 0xf4, 0xcd, 0x15, 0xfd, + 0xd3, 0x49, 0xaa, 0x9f, 0x4a, 0xf0, 0xac, 0xea, 0x58, 0xd6, 0x9e, 0xde, 0x3e, 0x08, 0xae, 0x27, + 0x1c, 0xf4, 0x4d, 0x02, 0xda, 0x2e, 0x6f, 0xc5, 0x22, 0x28, 0x2e, 0xba, 0x99, 0xf8, 0x47, 0x49, + 0xe9, 0x7c, 0x1f, 0x25, 0x95, 0x27, 0x30, 0x97, 0x34, 0xf7, 0xcb, 0x30, 0xcd, 0x3f, 0x37, 0x06, + 0x9f, 0xbf, 0x83, 0x25, 0x7a, 0x01, 0x8a, 0x3d, 0xd3, 0x8e, 0x42, 0x1f, 0xff, 0xe3, 0x57, 0xbe, + 0x67, 0xda, 0x03, 0xd8, 0xa3, 0x52, 0xfa, 0x67, 0x27, 0x01, 0x32, 0xdf, 0xd3, 0x3f, 0x0b, 0xa5, + 0x6e, 0xff, 0x63, 0x1e, 0x8a, 0xa2, 0x41, 0xe1, 0xc1, 0xf0, 0xd0, 0x2f, 0x24, 0xc8, 0x47, 0xdb, + 0x6a, 0x94, 0x8c, 0x2f, 0x09, 0x3d, 0x7c, 0xf9, 0xe5, 0x33, 0x48, 0x72, 0x9f, 0x29, 0x6f, 0xfe, + 0xe0, 0xab, 0x7f, 0xfe, 0x64, 0xe2, 0x16, 0xaa, 0x54, 0x0e, 0x6f, 0x55, 0x44, 0xe0, 0x48, 0xe5, + 0xc9, 0x20, 0xa8, 0xc7, 0x15, 0xd6, 0xd9, 0x55, 0x9e, 0xd0, 0x7f, 0x8e, 0x2b, 0x61, 0x8b, 0xfe, + 0x73, 0x09, 0x60, 0x30, 0xb7, 0xa1, 0xe4, 0xbf, 0x8d, 0x9c, 0x18, 0xec, 0xca, 0xa7, 0x4e, 0x00, + 0xca, 0x1a, 0xb3, 0xe6, 0x1d, 0x74, 0xff, 0x9c, 0xd6, 0x54, 0x9e, 0x0c, 0x52, 0xea, 0x18, 0xfd, + 0x4c, 0x82, 0x42, 0x6c, 0xaa, 0x45, 0xc9, 0x0e, 0x49, 0x9a, 0x7c, 0xcb, 0x63, 0xda, 0x5f, 0x65, + 0x95, 0x99, 0x78, 0x57, 0x39, 0xaf, 0xc3, 0x56, 0xa5, 0x65, 0xf4, 0x6b, 0x09, 0x0a, 0xb1, 0x19, + 0x74, 0x84, 0x61, 0x49, 0x73, 0xea, 0x58, 0xc3, 0xd6, 0x99, 0x61, 0xd5, 0xf2, 0x85, 0x7c, 0x47, + 0xad, 0xfc, 0x95, 0x04, 0x85, 0xd8, 0x0c, 0x3a, 0xc2, 0xca, 0xa4, 0x39, 0x75, 0xac, 0x95, 0x22, + 0xc2, 0xcb, 0x17, 0x8b, 0xf0, 0x97, 0x12, 0x14, 0xe3, 0x23, 0x0d, 0x5a, 0x1e, 0x99, 0xf3, 0x27, + 0x66, 0xb6, 0xf2, 0x2b, 0x67, 0x92, 0x15, 0x15, 0xf2, 0x36, 0xb3, 0xf8, 0x0e, 0xba, 0x75, 0x46, + 0x8b, 0x23, 0xe3, 0xd1, 0x17, 0x12, 0xe4, 0xa3, 0x23, 0xea, 0x88, 0x12, 0x4e, 0x98, 0x62, 0xc7, + 0xfa, 0xf1, 0x21, 0xb3, 0xea, 0x01, 0x7a, 0xf7, 0xdc, 0x56, 0x55, 0x9e, 0x44, 0xe7, 0xc5, 0x63, + 0xf4, 0x5b, 0x09, 0x66, 0x86, 0xc6, 0x51, 0x94, 0xec, 0xa0, 0xe4, 0xa1, 0xb5, 0xbc, 0x18, 0x08, + 0x07, 0xff, 0xa5, 0x60, 0xa5, 0xde, 0x73, 0xfd, 0x23, 0x45, 0x65, 0x26, 0x6e, 0x28, 0xeb, 0x17, + 0x35, 0x71, 0xb5, 0xcd, 0x0e, 0xa6, 0xb9, 0xf9, 0x4b, 0x09, 0x66, 0x86, 0x86, 0xc9, 0x11, 0xc6, + 0x26, 0x8f, 0x9c, 0xe5, 0xe4, 0x4f, 0xd9, 0x51, 0x49, 0xe5, 0x1e, 0xb3, 0xfb, 0x75, 0x74, 0xe7, + 0x8c, 0x76, 0x13, 0xa6, 0x2c, 0x7a, 0xe2, 0x3f, 0x48, 0x50, 0x88, 0xbd, 0x4e, 0x68, 0x34, 0x18, + 0x0f, 0xcf, 0x21, 0xe5, 0xe5, 0xb3, 0x88, 0x8a, 0xb4, 0xdc, 0x62, 0x56, 0x3e, 0x44, 0xef, 0x5d, + 0xa4, 0x90, 0x2a, 0x83, 0xbf, 0xc9, 0xfd, 0x5e, 0x82, 0x5c, 0x64, 0x62, 0x41, 0x37, 0x46, 0x79, + 0x75, 0x68, 0xa6, 0x29, 0x9f, 0xfe, 0xc2, 0x2a, 0xdf, 0x65, 0x76, 0x7e, 0x88, 0x76, 0x9f, 0x8e, + 0x9d, 0x95, 0x27, 0xd1, 0xee, 0xe0, 0x18, 0xfd, 0x4e, 0x82, 0x62, 0x7c, 0x10, 0x1e, 0x81, 0x04, + 0x89, 0xd3, 0xf2, 0xd8, 0x32, 0xfb, 0x36, 0xb3, 0xfe, 0x91, 0xf2, 0x94, 0xbc, 0x4c, 0x53, 0xf8, + 0x8f, 0x12, 0x14, 0xe3, 0x23, 0xf1, 0x08, 0x8b, 0x13, 0xe7, 0xe6, 0xb1, 0x16, 0x0b, 0x7f, 0x2f, + 0x5f, 0x92, 0xbf, 0xff, 0x2a, 0xc1, 0x95, 0x11, 0x3d, 0x21, 0xba, 0x93, 0x68, 0xda, 0xe9, 0x1d, + 0xe4, 0xd8, 0xfb, 0x98, 0xec, 0x3e, 0x6d, 0xe5, 0x7b, 0x97, 0x72, 0x9f, 0x55, 0x4f, 0x58, 0x47, + 0x23, 0xf3, 0x37, 0x09, 0x16, 0x12, 0x3b, 0x79, 0x74, 0x6b, 0x04, 0x6a, 0x8c, 0xee, 0xfa, 0xc7, + 0xde, 0xcb, 0x66, 0xf7, 0xea, 0x2a, 0xed, 0x4b, 0xb9, 0x57, 0x85, 0x60, 0x7f, 0x60, 0xd3, 0xaa, + 0xb4, 0xfc, 0xc0, 0x86, 0x2b, 0x6d, 0xa7, 0x97, 0x64, 0xd4, 0x83, 0x39, 0xf1, 0x86, 0x8b, 0xbf, + 0x06, 0x36, 0x29, 0x8c, 0x37, 0xa5, 0x8f, 0xee, 0x0b, 0xd9, 0x8e, 0x63, 0xe9, 0x76, 0x67, 0xc5, + 0xf1, 0x3a, 0x95, 0x0e, 0xb6, 0x19, 0xc8, 0x57, 0x38, 0x4b, 0x77, 0x4d, 0x12, 0xfb, 0x6f, 0x6a, + 0xf7, 0xc2, 0xc5, 0x5e, 0x9a, 0x09, 0xde, 0xf9, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x59, + 0xbc, 0xdf, 0xce, 0x26, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1/datastore.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1/datastore.pb.go new file mode 100644 index 0000000..9a9adc6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1/datastore.pb.go @@ -0,0 +1,1424 @@ +// Code generated by protoc-gen-go. +// source: google/datastore/v1/datastore.proto +// DO NOT EDIT! + +/* +Package datastore is a generated protocol buffer package. + +It is generated from these files: + google/datastore/v1/datastore.proto + google/datastore/v1/entity.proto + google/datastore/v1/query.proto + +It has these top-level messages: + LookupRequest + LookupResponse + RunQueryRequest + RunQueryResponse + BeginTransactionRequest + BeginTransactionResponse + RollbackRequest + RollbackResponse + CommitRequest + CommitResponse + AllocateIdsRequest + AllocateIdsResponse + Mutation + MutationResult + ReadOptions + PartitionId + Key + ArrayValue + Value + Entity + EntityResult + Query + KindExpression + PropertyReference + Projection + PropertyOrder + Filter + CompositeFilter + PropertyFilter + GqlQuery + GqlQueryParameter + QueryResultBatch +*/ +package datastore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The modes available for commits. +type CommitRequest_Mode int32 + +const ( + // Unspecified. This value must not be used. + CommitRequest_MODE_UNSPECIFIED CommitRequest_Mode = 0 + // Transactional: The mutations are either all applied, or none are applied. + // Learn about transactions [here](https://cloud.google.com/datastore/docs/concepts/transactions). + CommitRequest_TRANSACTIONAL CommitRequest_Mode = 1 + // Non-transactional: The mutations may not apply as all or none. + CommitRequest_NON_TRANSACTIONAL CommitRequest_Mode = 2 +) + +var CommitRequest_Mode_name = map[int32]string{ + 0: "MODE_UNSPECIFIED", + 1: "TRANSACTIONAL", + 2: "NON_TRANSACTIONAL", +} +var CommitRequest_Mode_value = map[string]int32{ + "MODE_UNSPECIFIED": 0, + "TRANSACTIONAL": 1, + "NON_TRANSACTIONAL": 2, +} + +func (x CommitRequest_Mode) String() string { + return proto.EnumName(CommitRequest_Mode_name, int32(x)) +} +func (CommitRequest_Mode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 0} } + +// The possible values for read consistencies. +type ReadOptions_ReadConsistency int32 + +const ( + // Unspecified. This value must not be used. + ReadOptions_READ_CONSISTENCY_UNSPECIFIED ReadOptions_ReadConsistency = 0 + // Strong consistency. + ReadOptions_STRONG ReadOptions_ReadConsistency = 1 + // Eventual consistency. + ReadOptions_EVENTUAL ReadOptions_ReadConsistency = 2 +) + +var ReadOptions_ReadConsistency_name = map[int32]string{ + 0: "READ_CONSISTENCY_UNSPECIFIED", + 1: "STRONG", + 2: "EVENTUAL", +} +var ReadOptions_ReadConsistency_value = map[string]int32{ + "READ_CONSISTENCY_UNSPECIFIED": 0, + "STRONG": 1, + "EVENTUAL": 2, +} + +func (x ReadOptions_ReadConsistency) String() string { + return proto.EnumName(ReadOptions_ReadConsistency_name, int32(x)) +} +func (ReadOptions_ReadConsistency) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{14, 0} +} + +// The request for [Datastore.Lookup][google.datastore.v1.Datastore.Lookup]. +type LookupRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The options for this lookup request. + ReadOptions *ReadOptions `protobuf:"bytes,1,opt,name=read_options,json=readOptions" json:"read_options,omitempty"` + // Keys of entities to look up. + Keys []*Key `protobuf:"bytes,3,rep,name=keys" json:"keys,omitempty"` +} + +func (m *LookupRequest) Reset() { *m = LookupRequest{} } +func (m *LookupRequest) String() string { return proto.CompactTextString(m) } +func (*LookupRequest) ProtoMessage() {} +func (*LookupRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *LookupRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *LookupRequest) GetReadOptions() *ReadOptions { + if m != nil { + return m.ReadOptions + } + return nil +} + +func (m *LookupRequest) GetKeys() []*Key { + if m != nil { + return m.Keys + } + return nil +} + +// The response for [Datastore.Lookup][google.datastore.v1.Datastore.Lookup]. +type LookupResponse struct { + // Entities found as `ResultType.FULL` entities. The order of results in this + // field is undefined and has no relation to the order of the keys in the + // input. + Found []*EntityResult `protobuf:"bytes,1,rep,name=found" json:"found,omitempty"` + // Entities not found as `ResultType.KEY_ONLY` entities. The order of results + // in this field is undefined and has no relation to the order of the keys + // in the input. + Missing []*EntityResult `protobuf:"bytes,2,rep,name=missing" json:"missing,omitempty"` + // A list of keys that were not looked up due to resource constraints. The + // order of results in this field is undefined and has no relation to the + // order of the keys in the input. + Deferred []*Key `protobuf:"bytes,3,rep,name=deferred" json:"deferred,omitempty"` +} + +func (m *LookupResponse) Reset() { *m = LookupResponse{} } +func (m *LookupResponse) String() string { return proto.CompactTextString(m) } +func (*LookupResponse) ProtoMessage() {} +func (*LookupResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *LookupResponse) GetFound() []*EntityResult { + if m != nil { + return m.Found + } + return nil +} + +func (m *LookupResponse) GetMissing() []*EntityResult { + if m != nil { + return m.Missing + } + return nil +} + +func (m *LookupResponse) GetDeferred() []*Key { + if m != nil { + return m.Deferred + } + return nil +} + +// The request for [Datastore.RunQuery][google.datastore.v1.Datastore.RunQuery]. +type RunQueryRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Entities are partitioned into subsets, identified by a partition ID. + // Queries are scoped to a single partition. + // This partition ID is normalized with the standard default context + // partition ID. + PartitionId *PartitionId `protobuf:"bytes,2,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The options for this query. + ReadOptions *ReadOptions `protobuf:"bytes,1,opt,name=read_options,json=readOptions" json:"read_options,omitempty"` + // The type of query. + // + // Types that are valid to be assigned to QueryType: + // *RunQueryRequest_Query + // *RunQueryRequest_GqlQuery + QueryType isRunQueryRequest_QueryType `protobuf_oneof:"query_type"` +} + +func (m *RunQueryRequest) Reset() { *m = RunQueryRequest{} } +func (m *RunQueryRequest) String() string { return proto.CompactTextString(m) } +func (*RunQueryRequest) ProtoMessage() {} +func (*RunQueryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isRunQueryRequest_QueryType interface { + isRunQueryRequest_QueryType() +} + +type RunQueryRequest_Query struct { + Query *Query `protobuf:"bytes,3,opt,name=query,oneof"` +} +type RunQueryRequest_GqlQuery struct { + GqlQuery *GqlQuery `protobuf:"bytes,7,opt,name=gql_query,json=gqlQuery,oneof"` +} + +func (*RunQueryRequest_Query) isRunQueryRequest_QueryType() {} +func (*RunQueryRequest_GqlQuery) isRunQueryRequest_QueryType() {} + +func (m *RunQueryRequest) GetQueryType() isRunQueryRequest_QueryType { + if m != nil { + return m.QueryType + } + return nil +} + +func (m *RunQueryRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RunQueryRequest) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *RunQueryRequest) GetReadOptions() *ReadOptions { + if m != nil { + return m.ReadOptions + } + return nil +} + +func (m *RunQueryRequest) GetQuery() *Query { + if x, ok := m.GetQueryType().(*RunQueryRequest_Query); ok { + return x.Query + } + return nil +} + +func (m *RunQueryRequest) GetGqlQuery() *GqlQuery { + if x, ok := m.GetQueryType().(*RunQueryRequest_GqlQuery); ok { + return x.GqlQuery + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RunQueryRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RunQueryRequest_OneofMarshaler, _RunQueryRequest_OneofUnmarshaler, _RunQueryRequest_OneofSizer, []interface{}{ + (*RunQueryRequest_Query)(nil), + (*RunQueryRequest_GqlQuery)(nil), + } +} + +func _RunQueryRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RunQueryRequest) + // query_type + switch x := m.QueryType.(type) { + case *RunQueryRequest_Query: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Query); err != nil { + return err + } + case *RunQueryRequest_GqlQuery: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.GqlQuery); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RunQueryRequest.QueryType has unexpected type %T", x) + } + return nil +} + +func _RunQueryRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RunQueryRequest) + switch tag { + case 3: // query_type.query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Query) + err := b.DecodeMessage(msg) + m.QueryType = &RunQueryRequest_Query{msg} + return true, err + case 7: // query_type.gql_query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GqlQuery) + err := b.DecodeMessage(msg) + m.QueryType = &RunQueryRequest_GqlQuery{msg} + return true, err + default: + return false, nil + } +} + +func _RunQueryRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RunQueryRequest) + // query_type + switch x := m.QueryType.(type) { + case *RunQueryRequest_Query: + s := proto.Size(x.Query) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RunQueryRequest_GqlQuery: + s := proto.Size(x.GqlQuery) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response for [Datastore.RunQuery][google.datastore.v1.Datastore.RunQuery]. +type RunQueryResponse struct { + // A batch of query results (always present). + Batch *QueryResultBatch `protobuf:"bytes,1,opt,name=batch" json:"batch,omitempty"` + // The parsed form of the `GqlQuery` from the request, if it was set. + Query *Query `protobuf:"bytes,2,opt,name=query" json:"query,omitempty"` +} + +func (m *RunQueryResponse) Reset() { *m = RunQueryResponse{} } +func (m *RunQueryResponse) String() string { return proto.CompactTextString(m) } +func (*RunQueryResponse) ProtoMessage() {} +func (*RunQueryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *RunQueryResponse) GetBatch() *QueryResultBatch { + if m != nil { + return m.Batch + } + return nil +} + +func (m *RunQueryResponse) GetQuery() *Query { + if m != nil { + return m.Query + } + return nil +} + +// The request for [Datastore.BeginTransaction][google.datastore.v1.Datastore.BeginTransaction]. +type BeginTransactionRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` +} + +func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } +func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } +func (*BeginTransactionRequest) ProtoMessage() {} +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *BeginTransactionRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +// The response for [Datastore.BeginTransaction][google.datastore.v1.Datastore.BeginTransaction]. +type BeginTransactionResponse struct { + // The transaction identifier (always present). + Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` +} + +func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionResponse{} } +func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) } +func (*BeginTransactionResponse) ProtoMessage() {} +func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *BeginTransactionResponse) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +// The request for [Datastore.Rollback][google.datastore.v1.Datastore.Rollback]. +type RollbackRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The transaction identifier, returned by a call to + // [Datastore.BeginTransaction][google.datastore.v1.Datastore.BeginTransaction]. + Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` +} + +func (m *RollbackRequest) Reset() { *m = RollbackRequest{} } +func (m *RollbackRequest) String() string { return proto.CompactTextString(m) } +func (*RollbackRequest) ProtoMessage() {} +func (*RollbackRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *RollbackRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RollbackRequest) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +// The response for [Datastore.Rollback][google.datastore.v1.Datastore.Rollback]. +// (an empty message). +type RollbackResponse struct { +} + +func (m *RollbackResponse) Reset() { *m = RollbackResponse{} } +func (m *RollbackResponse) String() string { return proto.CompactTextString(m) } +func (*RollbackResponse) ProtoMessage() {} +func (*RollbackResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +// The request for [Datastore.Commit][google.datastore.v1.Datastore.Commit]. +type CommitRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The type of commit to perform. Defaults to `TRANSACTIONAL`. + Mode CommitRequest_Mode `protobuf:"varint,5,opt,name=mode,enum=google.datastore.v1.CommitRequest_Mode" json:"mode,omitempty"` + // Must be set when mode is `TRANSACTIONAL`. + // + // Types that are valid to be assigned to TransactionSelector: + // *CommitRequest_Transaction + TransactionSelector isCommitRequest_TransactionSelector `protobuf_oneof:"transaction_selector"` + // The mutations to perform. + // + // When mode is `TRANSACTIONAL`, mutations affecting a single entity are + // applied in order. The following sequences of mutations affecting a single + // entity are not permitted in a single `Commit` request: + // + // - `insert` followed by `insert` + // - `update` followed by `insert` + // - `upsert` followed by `insert` + // - `delete` followed by `update` + // + // When mode is `NON_TRANSACTIONAL`, no two mutations may affect a single + // entity. + Mutations []*Mutation `protobuf:"bytes,6,rep,name=mutations" json:"mutations,omitempty"` +} + +func (m *CommitRequest) Reset() { *m = CommitRequest{} } +func (m *CommitRequest) String() string { return proto.CompactTextString(m) } +func (*CommitRequest) ProtoMessage() {} +func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +type isCommitRequest_TransactionSelector interface { + isCommitRequest_TransactionSelector() +} + +type CommitRequest_Transaction struct { + Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3,oneof"` +} + +func (*CommitRequest_Transaction) isCommitRequest_TransactionSelector() {} + +func (m *CommitRequest) GetTransactionSelector() isCommitRequest_TransactionSelector { + if m != nil { + return m.TransactionSelector + } + return nil +} + +func (m *CommitRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CommitRequest) GetMode() CommitRequest_Mode { + if m != nil { + return m.Mode + } + return CommitRequest_MODE_UNSPECIFIED +} + +func (m *CommitRequest) GetTransaction() []byte { + if x, ok := m.GetTransactionSelector().(*CommitRequest_Transaction); ok { + return x.Transaction + } + return nil +} + +func (m *CommitRequest) GetMutations() []*Mutation { + if m != nil { + return m.Mutations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CommitRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CommitRequest_OneofMarshaler, _CommitRequest_OneofUnmarshaler, _CommitRequest_OneofSizer, []interface{}{ + (*CommitRequest_Transaction)(nil), + } +} + +func _CommitRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CommitRequest) + // transaction_selector + switch x := m.TransactionSelector.(type) { + case *CommitRequest_Transaction: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Transaction) + case nil: + default: + return fmt.Errorf("CommitRequest.TransactionSelector has unexpected type %T", x) + } + return nil +} + +func _CommitRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CommitRequest) + switch tag { + case 1: // transaction_selector.transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.TransactionSelector = &CommitRequest_Transaction{x} + return true, err + default: + return false, nil + } +} + +func _CommitRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CommitRequest) + // transaction_selector + switch x := m.TransactionSelector.(type) { + case *CommitRequest_Transaction: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Transaction))) + n += len(x.Transaction) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response for [Datastore.Commit][google.datastore.v1.Datastore.Commit]. +type CommitResponse struct { + // The result of performing the mutations. + // The i-th mutation result corresponds to the i-th mutation in the request. + MutationResults []*MutationResult `protobuf:"bytes,3,rep,name=mutation_results,json=mutationResults" json:"mutation_results,omitempty"` + // The number of index entries updated during the commit, or zero if none were + // updated. + IndexUpdates int32 `protobuf:"varint,4,opt,name=index_updates,json=indexUpdates" json:"index_updates,omitempty"` +} + +func (m *CommitResponse) Reset() { *m = CommitResponse{} } +func (m *CommitResponse) String() string { return proto.CompactTextString(m) } +func (*CommitResponse) ProtoMessage() {} +func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *CommitResponse) GetMutationResults() []*MutationResult { + if m != nil { + return m.MutationResults + } + return nil +} + +func (m *CommitResponse) GetIndexUpdates() int32 { + if m != nil { + return m.IndexUpdates + } + return 0 +} + +// The request for [Datastore.AllocateIds][google.datastore.v1.Datastore.AllocateIds]. +type AllocateIdsRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // A list of keys with incomplete key paths for which to allocate IDs. + // No key may be reserved/read-only. + Keys []*Key `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` +} + +func (m *AllocateIdsRequest) Reset() { *m = AllocateIdsRequest{} } +func (m *AllocateIdsRequest) String() string { return proto.CompactTextString(m) } +func (*AllocateIdsRequest) ProtoMessage() {} +func (*AllocateIdsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *AllocateIdsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *AllocateIdsRequest) GetKeys() []*Key { + if m != nil { + return m.Keys + } + return nil +} + +// The response for [Datastore.AllocateIds][google.datastore.v1.Datastore.AllocateIds]. +type AllocateIdsResponse struct { + // The keys specified in the request (in the same order), each with + // its key path completed with a newly allocated ID. + Keys []*Key `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` +} + +func (m *AllocateIdsResponse) Reset() { *m = AllocateIdsResponse{} } +func (m *AllocateIdsResponse) String() string { return proto.CompactTextString(m) } +func (*AllocateIdsResponse) ProtoMessage() {} +func (*AllocateIdsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *AllocateIdsResponse) GetKeys() []*Key { + if m != nil { + return m.Keys + } + return nil +} + +// A mutation to apply to an entity. +type Mutation struct { + // The mutation operation. + // + // For `insert`, `update`, and `upsert`: + // - The entity's key must not be reserved/read-only. + // - No property in the entity may have a reserved name, + // not even a property in an entity in a value. + // - No value in the entity may have meaning 18, + // not even a value in an entity in another value. + // + // Types that are valid to be assigned to Operation: + // *Mutation_Insert + // *Mutation_Update + // *Mutation_Upsert + // *Mutation_Delete + Operation isMutation_Operation `protobuf_oneof:"operation"` + // When set, the server will detect whether or not this mutation conflicts + // with the current version of the entity on the server. Conflicting mutations + // are not applied, and are marked as such in MutationResult. + // + // Types that are valid to be assigned to ConflictDetectionStrategy: + // *Mutation_BaseVersion + ConflictDetectionStrategy isMutation_ConflictDetectionStrategy `protobuf_oneof:"conflict_detection_strategy"` +} + +func (m *Mutation) Reset() { *m = Mutation{} } +func (m *Mutation) String() string { return proto.CompactTextString(m) } +func (*Mutation) ProtoMessage() {} +func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +type isMutation_Operation interface { + isMutation_Operation() +} +type isMutation_ConflictDetectionStrategy interface { + isMutation_ConflictDetectionStrategy() +} + +type Mutation_Insert struct { + Insert *Entity `protobuf:"bytes,4,opt,name=insert,oneof"` +} +type Mutation_Update struct { + Update *Entity `protobuf:"bytes,5,opt,name=update,oneof"` +} +type Mutation_Upsert struct { + Upsert *Entity `protobuf:"bytes,6,opt,name=upsert,oneof"` +} +type Mutation_Delete struct { + Delete *Key `protobuf:"bytes,7,opt,name=delete,oneof"` +} +type Mutation_BaseVersion struct { + BaseVersion int64 `protobuf:"varint,8,opt,name=base_version,json=baseVersion,oneof"` +} + +func (*Mutation_Insert) isMutation_Operation() {} +func (*Mutation_Update) isMutation_Operation() {} +func (*Mutation_Upsert) isMutation_Operation() {} +func (*Mutation_Delete) isMutation_Operation() {} +func (*Mutation_BaseVersion) isMutation_ConflictDetectionStrategy() {} + +func (m *Mutation) GetOperation() isMutation_Operation { + if m != nil { + return m.Operation + } + return nil +} +func (m *Mutation) GetConflictDetectionStrategy() isMutation_ConflictDetectionStrategy { + if m != nil { + return m.ConflictDetectionStrategy + } + return nil +} + +func (m *Mutation) GetInsert() *Entity { + if x, ok := m.GetOperation().(*Mutation_Insert); ok { + return x.Insert + } + return nil +} + +func (m *Mutation) GetUpdate() *Entity { + if x, ok := m.GetOperation().(*Mutation_Update); ok { + return x.Update + } + return nil +} + +func (m *Mutation) GetUpsert() *Entity { + if x, ok := m.GetOperation().(*Mutation_Upsert); ok { + return x.Upsert + } + return nil +} + +func (m *Mutation) GetDelete() *Key { + if x, ok := m.GetOperation().(*Mutation_Delete); ok { + return x.Delete + } + return nil +} + +func (m *Mutation) GetBaseVersion() int64 { + if x, ok := m.GetConflictDetectionStrategy().(*Mutation_BaseVersion); ok { + return x.BaseVersion + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Mutation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Mutation_OneofMarshaler, _Mutation_OneofUnmarshaler, _Mutation_OneofSizer, []interface{}{ + (*Mutation_Insert)(nil), + (*Mutation_Update)(nil), + (*Mutation_Upsert)(nil), + (*Mutation_Delete)(nil), + (*Mutation_BaseVersion)(nil), + } +} + +func _Mutation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Mutation) + // operation + switch x := m.Operation.(type) { + case *Mutation_Insert: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Insert); err != nil { + return err + } + case *Mutation_Update: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Update); err != nil { + return err + } + case *Mutation_Upsert: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Upsert); err != nil { + return err + } + case *Mutation_Delete: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Delete); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Mutation.Operation has unexpected type %T", x) + } + // conflict_detection_strategy + switch x := m.ConflictDetectionStrategy.(type) { + case *Mutation_BaseVersion: + b.EncodeVarint(8<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.BaseVersion)) + case nil: + default: + return fmt.Errorf("Mutation.ConflictDetectionStrategy has unexpected type %T", x) + } + return nil +} + +func _Mutation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Mutation) + switch tag { + case 4: // operation.insert + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Entity) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Insert{msg} + return true, err + case 5: // operation.update + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Entity) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Update{msg} + return true, err + case 6: // operation.upsert + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Entity) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Upsert{msg} + return true, err + case 7: // operation.delete + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Key) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Delete{msg} + return true, err + case 8: // conflict_detection_strategy.base_version + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ConflictDetectionStrategy = &Mutation_BaseVersion{int64(x)} + return true, err + default: + return false, nil + } +} + +func _Mutation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Mutation) + // operation + switch x := m.Operation.(type) { + case *Mutation_Insert: + s := proto.Size(x.Insert) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Update: + s := proto.Size(x.Update) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Upsert: + s := proto.Size(x.Upsert) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Delete: + s := proto.Size(x.Delete) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // conflict_detection_strategy + switch x := m.ConflictDetectionStrategy.(type) { + case *Mutation_BaseVersion: + n += proto.SizeVarint(8<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.BaseVersion)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The result of applying a mutation. +type MutationResult struct { + // The automatically allocated key. + // Set only when the mutation allocated a key. + Key *Key `protobuf:"bytes,3,opt,name=key" json:"key,omitempty"` + // The version of the entity on the server after processing the mutation. If + // the mutation doesn't change anything on the server, then the version will + // be the version of the current entity or, if no entity is present, a version + // that is strictly greater than the version of any previous entity and less + // than the version of any possible future entity. + Version int64 `protobuf:"varint,4,opt,name=version" json:"version,omitempty"` + // Whether a conflict was detected for this mutation. Always false when a + // conflict detection strategy field is not set in the mutation. + ConflictDetected bool `protobuf:"varint,5,opt,name=conflict_detected,json=conflictDetected" json:"conflict_detected,omitempty"` +} + +func (m *MutationResult) Reset() { *m = MutationResult{} } +func (m *MutationResult) String() string { return proto.CompactTextString(m) } +func (*MutationResult) ProtoMessage() {} +func (*MutationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *MutationResult) GetKey() *Key { + if m != nil { + return m.Key + } + return nil +} + +func (m *MutationResult) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *MutationResult) GetConflictDetected() bool { + if m != nil { + return m.ConflictDetected + } + return false +} + +// The options shared by read requests. +type ReadOptions struct { + // If not specified, lookups and ancestor queries default to + // `read_consistency`=`STRONG`, global queries default to + // `read_consistency`=`EVENTUAL`. + // + // Types that are valid to be assigned to ConsistencyType: + // *ReadOptions_ReadConsistency_ + // *ReadOptions_Transaction + ConsistencyType isReadOptions_ConsistencyType `protobuf_oneof:"consistency_type"` +} + +func (m *ReadOptions) Reset() { *m = ReadOptions{} } +func (m *ReadOptions) String() string { return proto.CompactTextString(m) } +func (*ReadOptions) ProtoMessage() {} +func (*ReadOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +type isReadOptions_ConsistencyType interface { + isReadOptions_ConsistencyType() +} + +type ReadOptions_ReadConsistency_ struct { + ReadConsistency ReadOptions_ReadConsistency `protobuf:"varint,1,opt,name=read_consistency,json=readConsistency,enum=google.datastore.v1.ReadOptions_ReadConsistency,oneof"` +} +type ReadOptions_Transaction struct { + Transaction []byte `protobuf:"bytes,2,opt,name=transaction,proto3,oneof"` +} + +func (*ReadOptions_ReadConsistency_) isReadOptions_ConsistencyType() {} +func (*ReadOptions_Transaction) isReadOptions_ConsistencyType() {} + +func (m *ReadOptions) GetConsistencyType() isReadOptions_ConsistencyType { + if m != nil { + return m.ConsistencyType + } + return nil +} + +func (m *ReadOptions) GetReadConsistency() ReadOptions_ReadConsistency { + if x, ok := m.GetConsistencyType().(*ReadOptions_ReadConsistency_); ok { + return x.ReadConsistency + } + return ReadOptions_READ_CONSISTENCY_UNSPECIFIED +} + +func (m *ReadOptions) GetTransaction() []byte { + if x, ok := m.GetConsistencyType().(*ReadOptions_Transaction); ok { + return x.Transaction + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ReadOptions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ReadOptions_OneofMarshaler, _ReadOptions_OneofUnmarshaler, _ReadOptions_OneofSizer, []interface{}{ + (*ReadOptions_ReadConsistency_)(nil), + (*ReadOptions_Transaction)(nil), + } +} + +func _ReadOptions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ReadOptions) + // consistency_type + switch x := m.ConsistencyType.(type) { + case *ReadOptions_ReadConsistency_: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.ReadConsistency)) + case *ReadOptions_Transaction: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Transaction) + case nil: + default: + return fmt.Errorf("ReadOptions.ConsistencyType has unexpected type %T", x) + } + return nil +} + +func _ReadOptions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ReadOptions) + switch tag { + case 1: // consistency_type.read_consistency + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ConsistencyType = &ReadOptions_ReadConsistency_{ReadOptions_ReadConsistency(x)} + return true, err + case 2: // consistency_type.transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ConsistencyType = &ReadOptions_Transaction{x} + return true, err + default: + return false, nil + } +} + +func _ReadOptions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ReadOptions) + // consistency_type + switch x := m.ConsistencyType.(type) { + case *ReadOptions_ReadConsistency_: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.ReadConsistency)) + case *ReadOptions_Transaction: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Transaction))) + n += len(x.Transaction) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*LookupRequest)(nil), "google.datastore.v1.LookupRequest") + proto.RegisterType((*LookupResponse)(nil), "google.datastore.v1.LookupResponse") + proto.RegisterType((*RunQueryRequest)(nil), "google.datastore.v1.RunQueryRequest") + proto.RegisterType((*RunQueryResponse)(nil), "google.datastore.v1.RunQueryResponse") + proto.RegisterType((*BeginTransactionRequest)(nil), "google.datastore.v1.BeginTransactionRequest") + proto.RegisterType((*BeginTransactionResponse)(nil), "google.datastore.v1.BeginTransactionResponse") + proto.RegisterType((*RollbackRequest)(nil), "google.datastore.v1.RollbackRequest") + proto.RegisterType((*RollbackResponse)(nil), "google.datastore.v1.RollbackResponse") + proto.RegisterType((*CommitRequest)(nil), "google.datastore.v1.CommitRequest") + proto.RegisterType((*CommitResponse)(nil), "google.datastore.v1.CommitResponse") + proto.RegisterType((*AllocateIdsRequest)(nil), "google.datastore.v1.AllocateIdsRequest") + proto.RegisterType((*AllocateIdsResponse)(nil), "google.datastore.v1.AllocateIdsResponse") + proto.RegisterType((*Mutation)(nil), "google.datastore.v1.Mutation") + proto.RegisterType((*MutationResult)(nil), "google.datastore.v1.MutationResult") + proto.RegisterType((*ReadOptions)(nil), "google.datastore.v1.ReadOptions") + proto.RegisterEnum("google.datastore.v1.CommitRequest_Mode", CommitRequest_Mode_name, CommitRequest_Mode_value) + proto.RegisterEnum("google.datastore.v1.ReadOptions_ReadConsistency", ReadOptions_ReadConsistency_name, ReadOptions_ReadConsistency_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Datastore service + +type DatastoreClient interface { + // Looks up entities by key. + Lookup(ctx context.Context, in *LookupRequest, opts ...grpc.CallOption) (*LookupResponse, error) + // Queries for entities. + RunQuery(ctx context.Context, in *RunQueryRequest, opts ...grpc.CallOption) (*RunQueryResponse, error) + // Begins a new transaction. + BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*BeginTransactionResponse, error) + // Commits a transaction, optionally creating, deleting or modifying some + // entities. + Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) + // Rolls back a transaction. + Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*RollbackResponse, error) + // Allocates IDs for the given keys, which is useful for referencing an entity + // before it is inserted. + AllocateIds(ctx context.Context, in *AllocateIdsRequest, opts ...grpc.CallOption) (*AllocateIdsResponse, error) +} + +type datastoreClient struct { + cc *grpc.ClientConn +} + +func NewDatastoreClient(cc *grpc.ClientConn) DatastoreClient { + return &datastoreClient{cc} +} + +func (c *datastoreClient) Lookup(ctx context.Context, in *LookupRequest, opts ...grpc.CallOption) (*LookupResponse, error) { + out := new(LookupResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1.Datastore/Lookup", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) RunQuery(ctx context.Context, in *RunQueryRequest, opts ...grpc.CallOption) (*RunQueryResponse, error) { + out := new(RunQueryResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1.Datastore/RunQuery", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*BeginTransactionResponse, error) { + out := new(BeginTransactionResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1.Datastore/BeginTransaction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) { + out := new(CommitResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1.Datastore/Commit", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*RollbackResponse, error) { + out := new(RollbackResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1.Datastore/Rollback", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) AllocateIds(ctx context.Context, in *AllocateIdsRequest, opts ...grpc.CallOption) (*AllocateIdsResponse, error) { + out := new(AllocateIdsResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1.Datastore/AllocateIds", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Datastore service + +type DatastoreServer interface { + // Looks up entities by key. + Lookup(context.Context, *LookupRequest) (*LookupResponse, error) + // Queries for entities. + RunQuery(context.Context, *RunQueryRequest) (*RunQueryResponse, error) + // Begins a new transaction. + BeginTransaction(context.Context, *BeginTransactionRequest) (*BeginTransactionResponse, error) + // Commits a transaction, optionally creating, deleting or modifying some + // entities. + Commit(context.Context, *CommitRequest) (*CommitResponse, error) + // Rolls back a transaction. + Rollback(context.Context, *RollbackRequest) (*RollbackResponse, error) + // Allocates IDs for the given keys, which is useful for referencing an entity + // before it is inserted. + AllocateIds(context.Context, *AllocateIdsRequest) (*AllocateIdsResponse, error) +} + +func RegisterDatastoreServer(s *grpc.Server, srv DatastoreServer) { + s.RegisterService(&_Datastore_serviceDesc, srv) +} + +func _Datastore_Lookup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LookupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).Lookup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1.Datastore/Lookup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).Lookup(ctx, req.(*LookupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_RunQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RunQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).RunQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1.Datastore/RunQuery", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).RunQuery(ctx, req.(*RunQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_BeginTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BeginTransactionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).BeginTransaction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1.Datastore/BeginTransaction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).BeginTransaction(ctx, req.(*BeginTransactionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CommitRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).Commit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1.Datastore/Commit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).Commit(ctx, req.(*CommitRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_Rollback_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RollbackRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).Rollback(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1.Datastore/Rollback", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).Rollback(ctx, req.(*RollbackRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_AllocateIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AllocateIdsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).AllocateIds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1.Datastore/AllocateIds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).AllocateIds(ctx, req.(*AllocateIdsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Datastore_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.datastore.v1.Datastore", + HandlerType: (*DatastoreServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Lookup", + Handler: _Datastore_Lookup_Handler, + }, + { + MethodName: "RunQuery", + Handler: _Datastore_RunQuery_Handler, + }, + { + MethodName: "BeginTransaction", + Handler: _Datastore_BeginTransaction_Handler, + }, + { + MethodName: "Commit", + Handler: _Datastore_Commit_Handler, + }, + { + MethodName: "Rollback", + Handler: _Datastore_Rollback_Handler, + }, + { + MethodName: "AllocateIds", + Handler: _Datastore_AllocateIds_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/datastore/v1/datastore.proto", +} + +func init() { proto.RegisterFile("google/datastore/v1/datastore.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1205 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x41, 0x6f, 0xe3, 0x44, + 0x14, 0xae, 0x93, 0x36, 0x9b, 0xbc, 0xa4, 0x69, 0x3a, 0xbb, 0xb0, 0x26, 0xbb, 0x15, 0xc1, 0xa5, + 0xda, 0xa8, 0xbb, 0x9b, 0xb4, 0x81, 0x15, 0xa8, 0xed, 0xa5, 0x49, 0xb3, 0x6d, 0xc4, 0x36, 0x29, + 0xd3, 0xb4, 0x12, 0x48, 0xc8, 0x72, 0xed, 0x69, 0x30, 0x75, 0x3c, 0xae, 0x3d, 0xa9, 0x88, 0x10, + 0x2b, 0x01, 0x5a, 0x7e, 0x00, 0xfc, 0x02, 0x2e, 0x1c, 0x10, 0x47, 0x4e, 0x88, 0x7f, 0xc1, 0x91, + 0x2b, 0xff, 0x80, 0x3f, 0x80, 0x3c, 0x1e, 0x37, 0x75, 0xd6, 0x69, 0x82, 0xc4, 0x2d, 0xf3, 0xf2, + 0x7d, 0x6f, 0xbe, 0xf7, 0xde, 0xcc, 0x7b, 0x63, 0x58, 0xed, 0x51, 0xda, 0xb3, 0x48, 0xd5, 0xd0, + 0x98, 0xe6, 0x31, 0xea, 0x92, 0xea, 0xd5, 0xe6, 0x68, 0x51, 0x71, 0x5c, 0xca, 0x28, 0xba, 0x1b, + 0x80, 0x2a, 0x23, 0xfb, 0xd5, 0x66, 0xf1, 0xa1, 0x60, 0x6a, 0x8e, 0x59, 0xd5, 0x6c, 0x9b, 0x32, + 0x8d, 0x99, 0xd4, 0xf6, 0x02, 0x4a, 0xb1, 0x14, 0xe7, 0x97, 0xd8, 0xcc, 0x64, 0x43, 0x81, 0x78, + 0x3b, 0x0e, 0x71, 0x39, 0x20, 0xae, 0x00, 0x28, 0x3f, 0x49, 0xb0, 0xf8, 0x82, 0xd2, 0x8b, 0x81, + 0x83, 0xc9, 0xe5, 0x80, 0x78, 0x0c, 0xad, 0x00, 0x38, 0x2e, 0xfd, 0x82, 0xe8, 0x4c, 0x35, 0x0d, + 0x39, 0x5d, 0x92, 0xca, 0x19, 0x9c, 0x11, 0x96, 0x96, 0x81, 0x1a, 0x90, 0x73, 0x89, 0x66, 0xa8, + 0xd4, 0xe1, 0x4a, 0x64, 0xa9, 0x24, 0x95, 0xb3, 0xb5, 0x52, 0x25, 0x46, 0x7d, 0x05, 0x13, 0xcd, + 0xe8, 0x04, 0x38, 0x9c, 0x75, 0x47, 0x0b, 0xf4, 0x04, 0xe6, 0x2f, 0xc8, 0xd0, 0x93, 0x93, 0xa5, + 0x64, 0x39, 0x5b, 0x93, 0x63, 0xc9, 0x1f, 0x91, 0x21, 0xe6, 0x28, 0xe5, 0x0f, 0x09, 0xf2, 0xa1, + 0x46, 0xcf, 0xa1, 0xb6, 0x47, 0xd0, 0x07, 0xb0, 0x70, 0x4e, 0x07, 0xb6, 0x21, 0x4b, 0xdc, 0xc3, + 0x3b, 0xb1, 0x1e, 0x9a, 0x3c, 0x13, 0x98, 0x78, 0x03, 0x8b, 0xe1, 0x00, 0x8f, 0xb6, 0xe1, 0x4e, + 0xdf, 0xf4, 0x3c, 0xd3, 0xee, 0xc9, 0x89, 0x59, 0xa9, 0x21, 0x03, 0xbd, 0x0f, 0x69, 0x83, 0x9c, + 0x13, 0xd7, 0x25, 0xc6, 0x54, 0xe9, 0xd7, 0x48, 0xe5, 0xf7, 0x04, 0x2c, 0xe1, 0x81, 0xfd, 0xb1, + 0x9f, 0xf5, 0xd9, 0x93, 0xec, 0x68, 0x2e, 0x33, 0xfd, 0x6c, 0xf9, 0x80, 0xc4, 0x2d, 0x49, 0x3e, + 0x0a, 0x81, 0x2d, 0x03, 0x67, 0x9d, 0xd1, 0xe2, 0xff, 0xa9, 0x54, 0x0d, 0x16, 0xf8, 0x71, 0x91, + 0x93, 0x9c, 0x5d, 0x8c, 0x65, 0xf3, 0xd0, 0x0e, 0xe6, 0x70, 0x00, 0x45, 0x3b, 0x90, 0xe9, 0x5d, + 0x5a, 0x6a, 0xc0, 0xbb, 0xc3, 0x79, 0x2b, 0xb1, 0xbc, 0xfd, 0x4b, 0x2b, 0xa4, 0xa6, 0x7b, 0xe2, + 0x77, 0x3d, 0x07, 0xc0, 0x99, 0x2a, 0x1b, 0x3a, 0x44, 0xf9, 0x46, 0x82, 0xc2, 0x28, 0x79, 0xa2, + 0xfa, 0xdb, 0xb0, 0x70, 0xa6, 0x31, 0xfd, 0x73, 0x11, 0xd2, 0xda, 0x64, 0x51, 0x41, 0x05, 0xeb, + 0x3e, 0x18, 0x07, 0x1c, 0xb4, 0x11, 0x46, 0x94, 0x98, 0x16, 0x91, 0x88, 0x47, 0xf9, 0x10, 0xee, + 0xd7, 0x49, 0xcf, 0xb4, 0xbb, 0xae, 0x66, 0x7b, 0x9a, 0xee, 0x27, 0x66, 0xb6, 0x3a, 0x2a, 0x3b, + 0x20, 0xbf, 0xce, 0x14, 0x41, 0x94, 0x20, 0xcb, 0x46, 0x66, 0x1e, 0x4a, 0x0e, 0xdf, 0x34, 0x29, + 0x18, 0x96, 0x30, 0xb5, 0xac, 0x33, 0x4d, 0xbf, 0x98, 0xf1, 0xdc, 0x4c, 0xf7, 0x89, 0xa0, 0x30, + 0xf2, 0x19, 0x28, 0x51, 0x7e, 0x4d, 0xc0, 0x62, 0x83, 0xf6, 0xfb, 0x26, 0x9b, 0x71, 0x9b, 0x6d, + 0x98, 0xef, 0x53, 0x83, 0xc8, 0x0b, 0x25, 0xa9, 0x9c, 0xaf, 0x3d, 0x8a, 0xcd, 0x60, 0xc4, 0x61, + 0xe5, 0x90, 0x1a, 0x04, 0x73, 0x12, 0x52, 0x62, 0x34, 0x1e, 0xcc, 0x45, 0x54, 0xa2, 0x6d, 0xc8, + 0xf4, 0x07, 0xa2, 0xd7, 0xc9, 0x29, 0x7e, 0xd3, 0xe2, 0x4f, 0xd0, 0xa1, 0x40, 0xe1, 0x11, 0x5e, + 0x79, 0x0e, 0xf3, 0xfe, 0x76, 0xe8, 0x1e, 0x14, 0x0e, 0x3b, 0x7b, 0x4d, 0xf5, 0xa4, 0x7d, 0x7c, + 0xd4, 0x6c, 0xb4, 0x9e, 0xb7, 0x9a, 0x7b, 0x85, 0x39, 0xb4, 0x0c, 0x8b, 0x5d, 0xbc, 0xdb, 0x3e, + 0xde, 0x6d, 0x74, 0x5b, 0x9d, 0xf6, 0xee, 0x8b, 0x82, 0x84, 0xde, 0x80, 0xe5, 0x76, 0xa7, 0xad, + 0x46, 0xcd, 0x89, 0xfa, 0x9b, 0x70, 0xef, 0x86, 0x26, 0xd5, 0x23, 0x16, 0xd1, 0x19, 0x75, 0x95, + 0x57, 0x12, 0xe4, 0xc3, 0xe8, 0x44, 0x2d, 0xdb, 0x50, 0x08, 0xf7, 0x57, 0x5d, 0x7e, 0xe4, 0xc2, + 0xde, 0xb6, 0x7a, 0xbb, 0xec, 0xa0, 0xc1, 0x2c, 0xf5, 0x23, 0x6b, 0x0f, 0xad, 0xc2, 0xa2, 0x69, + 0x1b, 0xe4, 0x4b, 0x75, 0xe0, 0x18, 0x1a, 0x23, 0x9e, 0x3c, 0x5f, 0x92, 0xca, 0x0b, 0x38, 0xc7, + 0x8d, 0x27, 0x81, 0x4d, 0xd1, 0x00, 0xed, 0x5a, 0x16, 0xd5, 0x35, 0x46, 0x5a, 0x86, 0x37, 0x63, + 0xe9, 0xc2, 0xce, 0x2b, 0xcd, 0xd4, 0x79, 0x1b, 0x70, 0x37, 0xb2, 0x85, 0x08, 0xf7, 0xbf, 0x39, + 0xf9, 0x2d, 0x01, 0xe9, 0x30, 0x60, 0xf4, 0x0c, 0x52, 0xa6, 0xed, 0x11, 0x97, 0xf1, 0x90, 0xb2, + 0xb5, 0x07, 0xb7, 0xb4, 0xdf, 0x83, 0x39, 0x2c, 0xc0, 0x3e, 0x2d, 0x48, 0x05, 0x3f, 0x73, 0xd3, + 0x69, 0x01, 0x38, 0xa0, 0xf1, 0xdd, 0x52, 0x33, 0xd2, 0xf8, 0x6e, 0x35, 0x48, 0x19, 0xc4, 0x22, + 0x8c, 0x88, 0xee, 0x35, 0x31, 0x42, 0x9f, 0x13, 0x20, 0xd1, 0x2a, 0xe4, 0xce, 0x34, 0x8f, 0xa8, + 0x57, 0xc4, 0xf5, 0xfc, 0x73, 0xed, 0x67, 0x3e, 0x79, 0x20, 0xe1, 0xac, 0x6f, 0x3d, 0x0d, 0x8c, + 0xf5, 0x2c, 0x64, 0xa8, 0x43, 0x5c, 0x9e, 0x8a, 0xfa, 0x0a, 0x3c, 0xd0, 0xa9, 0x7d, 0x6e, 0x99, + 0x3a, 0x53, 0x0d, 0xc2, 0x88, 0x38, 0x66, 0xcc, 0xd5, 0x18, 0xe9, 0x0d, 0x95, 0xef, 0x24, 0xc8, + 0x47, 0xcf, 0x09, 0x5a, 0x87, 0xe4, 0x05, 0x09, 0x5b, 0xf1, 0xe4, 0xb4, 0xfb, 0x20, 0x24, 0xc3, + 0x9d, 0x50, 0x8a, 0x9f, 0xe9, 0x24, 0x0e, 0x97, 0xe8, 0x31, 0x2c, 0x8f, 0xed, 0x4b, 0x0c, 0x9e, + 0xd6, 0x34, 0x2e, 0x84, 0x7f, 0xec, 0x09, 0xbb, 0xf2, 0x8f, 0x04, 0xd9, 0x1b, 0xc3, 0x01, 0x7d, + 0x06, 0x05, 0x3e, 0x54, 0x74, 0x6a, 0x7b, 0xa6, 0xc7, 0x88, 0xad, 0x0f, 0xf9, 0x15, 0xce, 0xd7, + 0x36, 0xa6, 0x0d, 0x16, 0xfe, 0xbb, 0x31, 0xe2, 0x1d, 0xcc, 0xe1, 0x25, 0x37, 0x6a, 0x1a, 0x6f, + 0x0e, 0x89, 0x98, 0xe6, 0xa0, 0x1c, 0xc2, 0xd2, 0x98, 0x27, 0x54, 0x82, 0x87, 0xb8, 0xb9, 0xbb, + 0xa7, 0x36, 0x3a, 0xed, 0xe3, 0xd6, 0x71, 0xb7, 0xd9, 0x6e, 0x7c, 0x32, 0x76, 0xed, 0x01, 0x52, + 0xc7, 0x5d, 0xdc, 0x69, 0xef, 0x17, 0x24, 0x94, 0x83, 0x74, 0xf3, 0xb4, 0xd9, 0xee, 0x9e, 0xf0, + 0x6b, 0x8e, 0xa0, 0x70, 0x23, 0x18, 0x3e, 0x75, 0x6a, 0x7f, 0xa5, 0x20, 0xb3, 0x17, 0x86, 0x81, + 0x5e, 0x42, 0x2a, 0x78, 0x7e, 0x20, 0x25, 0x36, 0xc6, 0xc8, 0xfb, 0xa9, 0xb8, 0x7a, 0x2b, 0x46, + 0xb4, 0xdc, 0xc7, 0xdf, 0xfe, 0xf9, 0xf7, 0x8f, 0x89, 0x35, 0xa5, 0xe4, 0xbf, 0xc7, 0xc4, 0xed, + 0xf4, 0xaa, 0x5f, 0x8d, 0x6e, 0xee, 0xd7, 0x5b, 0x16, 0x67, 0x6c, 0x49, 0xeb, 0xe8, 0x7b, 0x09, + 0xd2, 0xe1, 0x0c, 0x44, 0xef, 0xc6, 0xa7, 0x39, 0xfa, 0xbe, 0x28, 0xae, 0x4d, 0x41, 0x09, 0x19, + 0x4f, 0xb9, 0x8c, 0x47, 0x8a, 0x32, 0x59, 0x86, 0x2b, 0x38, 0xbe, 0x90, 0x9f, 0x25, 0x28, 0x8c, + 0xcf, 0x33, 0xf4, 0x24, 0x76, 0xab, 0x09, 0x03, 0xb3, 0xf8, 0x74, 0x46, 0xb4, 0x10, 0xf8, 0x8c, + 0x0b, 0xac, 0x2a, 0xeb, 0x93, 0x05, 0x9e, 0x8d, 0x71, 0x7d, 0xa1, 0x2f, 0x21, 0x15, 0x74, 0xe8, + 0x09, 0x15, 0x8b, 0x0c, 0xa7, 0x09, 0x15, 0x8b, 0xb6, 0xf8, 0x59, 0x2a, 0xa6, 0x73, 0xc6, 0x75, + 0xc5, 0xc4, 0x98, 0x9d, 0x54, 0xb1, 0xe8, 0x64, 0x9f, 0x54, 0xb1, 0xf1, 0x59, 0x3d, 0x4b, 0xc5, + 0x04, 0xc7, 0x17, 0xf2, 0x83, 0x04, 0xd9, 0x1b, 0x1d, 0x1c, 0xc5, 0xcf, 0xea, 0xd7, 0xc7, 0x48, + 0xb1, 0x3c, 0x1d, 0x28, 0x14, 0x6d, 0x70, 0x45, 0xeb, 0xca, 0xda, 0x64, 0x45, 0xda, 0x88, 0xb6, + 0x25, 0xad, 0xd7, 0x5f, 0x49, 0x70, 0x5f, 0xa7, 0xfd, 0xb8, 0x1d, 0xea, 0xf9, 0xeb, 0x6b, 0x77, + 0xe4, 0x7f, 0x9f, 0x1c, 0x49, 0x9f, 0xee, 0x08, 0x58, 0x8f, 0x5a, 0x9a, 0xdd, 0xab, 0x50, 0xb7, + 0x57, 0xed, 0x11, 0x9b, 0x7f, 0xbd, 0x54, 0x83, 0xbf, 0x34, 0xc7, 0xf4, 0x22, 0x5f, 0x38, 0xdb, + 0xd7, 0x8b, 0x5f, 0x12, 0x6f, 0xed, 0x07, 0xf4, 0x86, 0x45, 0x07, 0x46, 0xe5, 0xda, 0x7b, 0xe5, + 0x74, 0xf3, 0x2c, 0xc5, 0x9d, 0xbc, 0xf7, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6b, 0xa3, 0xc8, + 0x39, 0x9f, 0x0d, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1/entity.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1/entity.pb.go new file mode 100644 index 0000000..75f58ca --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1/entity.pb.go @@ -0,0 +1,763 @@ +// Code generated by protoc-gen-go. +// source: google/datastore/v1/entity.proto +// DO NOT EDIT! + +package datastore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" +import google_type "google.golang.org/genproto/googleapis/type/latlng" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A partition ID identifies a grouping of entities. The grouping is always +// by project and namespace, however the namespace ID may be empty. +// +// A partition ID contains several dimensions: +// project ID and namespace ID. +// +// Partition dimensions: +// +// - May be `""`. +// - Must be valid UTF-8 bytes. +// - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}` +// If the value of any dimension matches regex `__.*__`, the partition is +// reserved/read-only. +// A reserved/read-only partition ID is forbidden in certain documented +// contexts. +// +// Foreign partition IDs (in which the project ID does +// not match the context project ID ) are discouraged. +// Reads and writes of foreign partition IDs may fail if the project is not in an active state. +type PartitionId struct { + // The ID of the project to which the entities belong. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // If not empty, the ID of the namespace to which the entities belong. + NamespaceId string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceId" json:"namespace_id,omitempty"` +} + +func (m *PartitionId) Reset() { *m = PartitionId{} } +func (m *PartitionId) String() string { return proto.CompactTextString(m) } +func (*PartitionId) ProtoMessage() {} +func (*PartitionId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *PartitionId) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *PartitionId) GetNamespaceId() string { + if m != nil { + return m.NamespaceId + } + return "" +} + +// A unique identifier for an entity. +// If a key's partition ID or any of its path kinds or names are +// reserved/read-only, the key is reserved/read-only. +// A reserved/read-only key is forbidden in certain documented contexts. +type Key struct { + // Entities are partitioned into subsets, currently identified by a project + // ID and namespace ID. + // Queries are scoped to a single partition. + PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The entity path. + // An entity path consists of one or more elements composed of a kind and a + // string or numerical identifier, which identify entities. The first + // element identifies a _root entity_, the second element identifies + // a _child_ of the root entity, the third element identifies a child of the + // second entity, and so forth. The entities identified by all prefixes of + // the path are called the element's _ancestors_. + // + // An entity path is always fully complete: *all* of the entity's ancestors + // are required to be in the path along with the entity identifier itself. + // The only exception is that in some documented cases, the identifier in the + // last path element (for the entity) itself may be omitted. For example, + // the last path element of the key of `Mutation.insert` may have no + // identifier. + // + // A path can never be empty, and a path can have at most 100 elements. + Path []*Key_PathElement `protobuf:"bytes,2,rep,name=path" json:"path,omitempty"` +} + +func (m *Key) Reset() { *m = Key{} } +func (m *Key) String() string { return proto.CompactTextString(m) } +func (*Key) ProtoMessage() {} +func (*Key) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *Key) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *Key) GetPath() []*Key_PathElement { + if m != nil { + return m.Path + } + return nil +} + +// A (kind, ID/name) pair used to construct a key path. +// +// If either name or ID is set, the element is complete. +// If neither is set, the element is incomplete. +type Key_PathElement struct { + // The kind of the entity. + // A kind matching regex `__.*__` is reserved/read-only. + // A kind must not contain more than 1500 bytes when UTF-8 encoded. + // Cannot be `""`. + Kind string `protobuf:"bytes,1,opt,name=kind" json:"kind,omitempty"` + // The type of ID. + // + // Types that are valid to be assigned to IdType: + // *Key_PathElement_Id + // *Key_PathElement_Name + IdType isKey_PathElement_IdType `protobuf_oneof:"id_type"` +} + +func (m *Key_PathElement) Reset() { *m = Key_PathElement{} } +func (m *Key_PathElement) String() string { return proto.CompactTextString(m) } +func (*Key_PathElement) ProtoMessage() {} +func (*Key_PathElement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +type isKey_PathElement_IdType interface { + isKey_PathElement_IdType() +} + +type Key_PathElement_Id struct { + Id int64 `protobuf:"varint,2,opt,name=id,oneof"` +} +type Key_PathElement_Name struct { + Name string `protobuf:"bytes,3,opt,name=name,oneof"` +} + +func (*Key_PathElement_Id) isKey_PathElement_IdType() {} +func (*Key_PathElement_Name) isKey_PathElement_IdType() {} + +func (m *Key_PathElement) GetIdType() isKey_PathElement_IdType { + if m != nil { + return m.IdType + } + return nil +} + +func (m *Key_PathElement) GetKind() string { + if m != nil { + return m.Kind + } + return "" +} + +func (m *Key_PathElement) GetId() int64 { + if x, ok := m.GetIdType().(*Key_PathElement_Id); ok { + return x.Id + } + return 0 +} + +func (m *Key_PathElement) GetName() string { + if x, ok := m.GetIdType().(*Key_PathElement_Name); ok { + return x.Name + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Key_PathElement) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Key_PathElement_OneofMarshaler, _Key_PathElement_OneofUnmarshaler, _Key_PathElement_OneofSizer, []interface{}{ + (*Key_PathElement_Id)(nil), + (*Key_PathElement_Name)(nil), + } +} + +func _Key_PathElement_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Name) + case nil: + default: + return fmt.Errorf("Key_PathElement.IdType has unexpected type %T", x) + } + return nil +} + +func _Key_PathElement_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Key_PathElement) + switch tag { + case 2: // id_type.id + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.IdType = &Key_PathElement_Id{int64(x)} + return true, err + case 3: // id_type.name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.IdType = &Key_PathElement_Name{x} + return true, err + default: + return false, nil + } +} + +func _Key_PathElement_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Name))) + n += len(x.Name) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// An array value. +type ArrayValue struct { + // Values in the array. + // The order of this array may not be preserved if it contains a mix of + // indexed and unindexed values. + Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` +} + +func (m *ArrayValue) Reset() { *m = ArrayValue{} } +func (m *ArrayValue) String() string { return proto.CompactTextString(m) } +func (*ArrayValue) ProtoMessage() {} +func (*ArrayValue) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ArrayValue) GetValues() []*Value { + if m != nil { + return m.Values + } + return nil +} + +// A message that can hold any of the supported value types and associated +// metadata. +type Value struct { + // Must have a value set. + // + // Types that are valid to be assigned to ValueType: + // *Value_NullValue + // *Value_BooleanValue + // *Value_IntegerValue + // *Value_DoubleValue + // *Value_TimestampValue + // *Value_KeyValue + // *Value_StringValue + // *Value_BlobValue + // *Value_GeoPointValue + // *Value_EntityValue + // *Value_ArrayValue + ValueType isValue_ValueType `protobuf_oneof:"value_type"` + // The `meaning` field should only be populated for backwards compatibility. + Meaning int32 `protobuf:"varint,14,opt,name=meaning" json:"meaning,omitempty"` + // If the value should be excluded from all indexes including those defined + // explicitly. + ExcludeFromIndexes bool `protobuf:"varint,19,opt,name=exclude_from_indexes,json=excludeFromIndexes" json:"exclude_from_indexes,omitempty"` +} + +func (m *Value) Reset() { *m = Value{} } +func (m *Value) String() string { return proto.CompactTextString(m) } +func (*Value) ProtoMessage() {} +func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +type isValue_ValueType interface { + isValue_ValueType() +} + +type Value_NullValue struct { + NullValue google_protobuf1.NullValue `protobuf:"varint,11,opt,name=null_value,json=nullValue,enum=google.protobuf.NullValue,oneof"` +} +type Value_BooleanValue struct { + BooleanValue bool `protobuf:"varint,1,opt,name=boolean_value,json=booleanValue,oneof"` +} +type Value_IntegerValue struct { + IntegerValue int64 `protobuf:"varint,2,opt,name=integer_value,json=integerValue,oneof"` +} +type Value_DoubleValue struct { + DoubleValue float64 `protobuf:"fixed64,3,opt,name=double_value,json=doubleValue,oneof"` +} +type Value_TimestampValue struct { + TimestampValue *google_protobuf2.Timestamp `protobuf:"bytes,10,opt,name=timestamp_value,json=timestampValue,oneof"` +} +type Value_KeyValue struct { + KeyValue *Key `protobuf:"bytes,5,opt,name=key_value,json=keyValue,oneof"` +} +type Value_StringValue struct { + StringValue string `protobuf:"bytes,17,opt,name=string_value,json=stringValue,oneof"` +} +type Value_BlobValue struct { + BlobValue []byte `protobuf:"bytes,18,opt,name=blob_value,json=blobValue,proto3,oneof"` +} +type Value_GeoPointValue struct { + GeoPointValue *google_type.LatLng `protobuf:"bytes,8,opt,name=geo_point_value,json=geoPointValue,oneof"` +} +type Value_EntityValue struct { + EntityValue *Entity `protobuf:"bytes,6,opt,name=entity_value,json=entityValue,oneof"` +} +type Value_ArrayValue struct { + ArrayValue *ArrayValue `protobuf:"bytes,9,opt,name=array_value,json=arrayValue,oneof"` +} + +func (*Value_NullValue) isValue_ValueType() {} +func (*Value_BooleanValue) isValue_ValueType() {} +func (*Value_IntegerValue) isValue_ValueType() {} +func (*Value_DoubleValue) isValue_ValueType() {} +func (*Value_TimestampValue) isValue_ValueType() {} +func (*Value_KeyValue) isValue_ValueType() {} +func (*Value_StringValue) isValue_ValueType() {} +func (*Value_BlobValue) isValue_ValueType() {} +func (*Value_GeoPointValue) isValue_ValueType() {} +func (*Value_EntityValue) isValue_ValueType() {} +func (*Value_ArrayValue) isValue_ValueType() {} + +func (m *Value) GetValueType() isValue_ValueType { + if m != nil { + return m.ValueType + } + return nil +} + +func (m *Value) GetNullValue() google_protobuf1.NullValue { + if x, ok := m.GetValueType().(*Value_NullValue); ok { + return x.NullValue + } + return google_protobuf1.NullValue_NULL_VALUE +} + +func (m *Value) GetBooleanValue() bool { + if x, ok := m.GetValueType().(*Value_BooleanValue); ok { + return x.BooleanValue + } + return false +} + +func (m *Value) GetIntegerValue() int64 { + if x, ok := m.GetValueType().(*Value_IntegerValue); ok { + return x.IntegerValue + } + return 0 +} + +func (m *Value) GetDoubleValue() float64 { + if x, ok := m.GetValueType().(*Value_DoubleValue); ok { + return x.DoubleValue + } + return 0 +} + +func (m *Value) GetTimestampValue() *google_protobuf2.Timestamp { + if x, ok := m.GetValueType().(*Value_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (m *Value) GetKeyValue() *Key { + if x, ok := m.GetValueType().(*Value_KeyValue); ok { + return x.KeyValue + } + return nil +} + +func (m *Value) GetStringValue() string { + if x, ok := m.GetValueType().(*Value_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *Value) GetBlobValue() []byte { + if x, ok := m.GetValueType().(*Value_BlobValue); ok { + return x.BlobValue + } + return nil +} + +func (m *Value) GetGeoPointValue() *google_type.LatLng { + if x, ok := m.GetValueType().(*Value_GeoPointValue); ok { + return x.GeoPointValue + } + return nil +} + +func (m *Value) GetEntityValue() *Entity { + if x, ok := m.GetValueType().(*Value_EntityValue); ok { + return x.EntityValue + } + return nil +} + +func (m *Value) GetArrayValue() *ArrayValue { + if x, ok := m.GetValueType().(*Value_ArrayValue); ok { + return x.ArrayValue + } + return nil +} + +func (m *Value) GetMeaning() int32 { + if m != nil { + return m.Meaning + } + return 0 +} + +func (m *Value) GetExcludeFromIndexes() bool { + if m != nil { + return m.ExcludeFromIndexes + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{ + (*Value_NullValue)(nil), + (*Value_BooleanValue)(nil), + (*Value_IntegerValue)(nil), + (*Value_DoubleValue)(nil), + (*Value_TimestampValue)(nil), + (*Value_KeyValue)(nil), + (*Value_StringValue)(nil), + (*Value_BlobValue)(nil), + (*Value_GeoPointValue)(nil), + (*Value_EntityValue)(nil), + (*Value_ArrayValue)(nil), + } +} + +func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Value) + // value_type + switch x := m.ValueType.(type) { + case *Value_NullValue: + b.EncodeVarint(11<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.NullValue)) + case *Value_BooleanValue: + t := uint64(0) + if x.BooleanValue { + t = 1 + } + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Value_IntegerValue: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IntegerValue)) + case *Value_DoubleValue: + b.EncodeVarint(3<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.DoubleValue)) + case *Value_TimestampValue: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimestampValue); err != nil { + return err + } + case *Value_KeyValue: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KeyValue); err != nil { + return err + } + case *Value_StringValue: + b.EncodeVarint(17<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *Value_BlobValue: + b.EncodeVarint(18<<3 | proto.WireBytes) + b.EncodeRawBytes(x.BlobValue) + case *Value_GeoPointValue: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.GeoPointValue); err != nil { + return err + } + case *Value_EntityValue: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.EntityValue); err != nil { + return err + } + case *Value_ArrayValue: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ArrayValue); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Value.ValueType has unexpected type %T", x) + } + return nil +} + +func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Value) + switch tag { + case 11: // value_type.null_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_NullValue{google_protobuf1.NullValue(x)} + return true, err + case 1: // value_type.boolean_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_BooleanValue{x != 0} + return true, err + case 2: // value_type.integer_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_IntegerValue{int64(x)} + return true, err + case 3: // value_type.double_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.ValueType = &Value_DoubleValue{math.Float64frombits(x)} + return true, err + case 10: // value_type.timestamp_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf2.Timestamp) + err := b.DecodeMessage(msg) + m.ValueType = &Value_TimestampValue{msg} + return true, err + case 5: // value_type.key_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Key) + err := b.DecodeMessage(msg) + m.ValueType = &Value_KeyValue{msg} + return true, err + case 17: // value_type.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ValueType = &Value_StringValue{x} + return true, err + case 18: // value_type.blob_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ValueType = &Value_BlobValue{x} + return true, err + case 8: // value_type.geo_point_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type.LatLng) + err := b.DecodeMessage(msg) + m.ValueType = &Value_GeoPointValue{msg} + return true, err + case 6: // value_type.entity_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Entity) + err := b.DecodeMessage(msg) + m.ValueType = &Value_EntityValue{msg} + return true, err + case 9: // value_type.array_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ArrayValue) + err := b.DecodeMessage(msg) + m.ValueType = &Value_ArrayValue{msg} + return true, err + default: + return false, nil + } +} + +func _Value_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Value) + // value_type + switch x := m.ValueType.(type) { + case *Value_NullValue: + n += proto.SizeVarint(11<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.NullValue)) + case *Value_BooleanValue: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += 1 + case *Value_IntegerValue: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IntegerValue)) + case *Value_DoubleValue: + n += proto.SizeVarint(3<<3 | proto.WireFixed64) + n += 8 + case *Value_TimestampValue: + s := proto.Size(x.TimestampValue) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_KeyValue: + s := proto.Size(x.KeyValue) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_StringValue: + n += proto.SizeVarint(17<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *Value_BlobValue: + n += proto.SizeVarint(18<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.BlobValue))) + n += len(x.BlobValue) + case *Value_GeoPointValue: + s := proto.Size(x.GeoPointValue) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_EntityValue: + s := proto.Size(x.EntityValue) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_ArrayValue: + s := proto.Size(x.ArrayValue) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Datastore data object. +// +// An entity is limited to 1 megabyte when stored. That _roughly_ +// corresponds to a limit of 1 megabyte for the serialized form of this +// message. +type Entity struct { + // The entity's key. + // + // An entity must have a key, unless otherwise documented (for example, + // an entity in `Value.entity_value` may have no key). + // An entity's kind is its key path's last element's kind, + // or null if it has no key. + Key *Key `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // The entity's properties. + // The map's keys are property names. + // A property name matching regex `__.*__` is reserved. + // A reserved property name is forbidden in certain documented contexts. + // The name must not contain more than 500 characters. + // The name cannot be `""`. + Properties map[string]*Value `protobuf:"bytes,3,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Entity) Reset() { *m = Entity{} } +func (m *Entity) String() string { return proto.CompactTextString(m) } +func (*Entity) ProtoMessage() {} +func (*Entity) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *Entity) GetKey() *Key { + if m != nil { + return m.Key + } + return nil +} + +func (m *Entity) GetProperties() map[string]*Value { + if m != nil { + return m.Properties + } + return nil +} + +func init() { + proto.RegisterType((*PartitionId)(nil), "google.datastore.v1.PartitionId") + proto.RegisterType((*Key)(nil), "google.datastore.v1.Key") + proto.RegisterType((*Key_PathElement)(nil), "google.datastore.v1.Key.PathElement") + proto.RegisterType((*ArrayValue)(nil), "google.datastore.v1.ArrayValue") + proto.RegisterType((*Value)(nil), "google.datastore.v1.Value") + proto.RegisterType((*Entity)(nil), "google.datastore.v1.Entity") +} + +func init() { proto.RegisterFile("google/datastore/v1/entity.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 767 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xdf, 0x8e, 0xdb, 0x44, + 0x14, 0xc6, 0xed, 0x64, 0xb3, 0x5d, 0x1f, 0xbb, 0xbb, 0x65, 0xb6, 0x12, 0x26, 0x80, 0xd6, 0x04, + 0x90, 0x22, 0x90, 0xec, 0xee, 0x72, 0x41, 0x45, 0x41, 0x2a, 0x29, 0x01, 0x47, 0x5b, 0x41, 0x34, + 0xaa, 0x2a, 0xc1, 0x4d, 0x34, 0x89, 0xa7, 0xee, 0x10, 0x7b, 0xc6, 0xb2, 0xc7, 0xab, 0xfa, 0x96, + 0xe7, 0xe0, 0x09, 0x78, 0x24, 0xc4, 0xc3, 0xa0, 0xf9, 0x13, 0x67, 0x29, 0xe9, 0xde, 0x79, 0xce, + 0xf9, 0x7d, 0xc7, 0xdf, 0xf1, 0x39, 0x63, 0x88, 0x72, 0x21, 0xf2, 0x82, 0x26, 0x19, 0x91, 0xa4, + 0x91, 0xa2, 0xa6, 0xc9, 0xcd, 0x65, 0x42, 0xb9, 0x64, 0xb2, 0x8b, 0xab, 0x5a, 0x48, 0x81, 0xce, + 0x0d, 0x11, 0xf7, 0x44, 0x7c, 0x73, 0x39, 0xfe, 0xc8, 0xca, 0x48, 0xc5, 0x12, 0xc2, 0xb9, 0x90, + 0x44, 0x32, 0xc1, 0x1b, 0x23, 0xe9, 0xb3, 0xfa, 0xb4, 0x6e, 0x5f, 0x25, 0x8d, 0xac, 0xdb, 0x8d, + 0xb4, 0xd9, 0x8b, 0xb7, 0xb3, 0x92, 0x95, 0xb4, 0x91, 0xa4, 0xac, 0x2c, 0x10, 0x5a, 0x40, 0x76, + 0x15, 0x4d, 0x0a, 0x22, 0x0b, 0x9e, 0x9b, 0xcc, 0xe4, 0x17, 0xf0, 0x97, 0xa4, 0x96, 0x4c, 0xbd, + 0x6c, 0x91, 0xa1, 0x8f, 0x01, 0xaa, 0x5a, 0xfc, 0x4e, 0x37, 0x72, 0xc5, 0xb2, 0x70, 0x10, 0xb9, + 0x53, 0x0f, 0x7b, 0x36, 0xb2, 0xc8, 0xd0, 0x27, 0x10, 0x70, 0x52, 0xd2, 0xa6, 0x22, 0x1b, 0xaa, + 0x80, 0x23, 0x0d, 0xf8, 0x7d, 0x6c, 0x91, 0x4d, 0xfe, 0x76, 0x61, 0x78, 0x4d, 0x3b, 0xf4, 0x0c, + 0x82, 0x6a, 0x57, 0x58, 0xa1, 0x6e, 0xe4, 0x4e, 0xfd, 0xab, 0x28, 0x3e, 0xd0, 0x7b, 0x7c, 0xcb, + 0x01, 0xf6, 0xab, 0x5b, 0x76, 0x1e, 0xc3, 0x51, 0x45, 0xe4, 0xeb, 0x70, 0x10, 0x0d, 0xa7, 0xfe, + 0xd5, 0x67, 0x07, 0xc5, 0xd7, 0xb4, 0x8b, 0x97, 0x44, 0xbe, 0x9e, 0x17, 0xb4, 0xa4, 0x5c, 0x62, + 0xad, 0x18, 0xbf, 0x50, 0x7d, 0xf5, 0x41, 0x84, 0xe0, 0x68, 0xcb, 0xb8, 0x71, 0xe1, 0x61, 0xfd, + 0x8c, 0x1e, 0xc0, 0xc0, 0xf6, 0x38, 0x4c, 0x1d, 0x3c, 0x60, 0x19, 0x7a, 0x08, 0x47, 0xaa, 0x95, + 0x70, 0xa8, 0xa8, 0xd4, 0xc1, 0xfa, 0x34, 0xf3, 0xe0, 0x1e, 0xcb, 0x56, 0xea, 0xd3, 0x4d, 0x9e, + 0x02, 0x7c, 0x5f, 0xd7, 0xa4, 0x7b, 0x49, 0x8a, 0x96, 0xa2, 0x2b, 0x38, 0xbe, 0x51, 0x0f, 0x4d, + 0xe8, 0x6a, 0x7f, 0xe3, 0x83, 0xfe, 0x34, 0x8b, 0x2d, 0x39, 0xf9, 0x73, 0x04, 0x23, 0xa3, 0x7e, + 0x02, 0xc0, 0xdb, 0xa2, 0x58, 0xe9, 0x44, 0xe8, 0x47, 0xee, 0xf4, 0x74, 0x5f, 0x61, 0x37, 0xc9, + 0xf8, 0xe7, 0xb6, 0x28, 0x34, 0x9f, 0x3a, 0xd8, 0xe3, 0xbb, 0x03, 0xfa, 0x1c, 0xee, 0xaf, 0x85, + 0x28, 0x28, 0xe1, 0x56, 0xaf, 0x1a, 0x3b, 0x49, 0x1d, 0x1c, 0xd8, 0x70, 0x8f, 0x31, 0x2e, 0x69, + 0x4e, 0x6b, 0x8b, 0xed, 0xba, 0x0d, 0x6c, 0xd8, 0x60, 0x9f, 0x42, 0x90, 0x89, 0x76, 0x5d, 0x50, + 0x4b, 0xa9, 0xfe, 0xdd, 0xd4, 0xc1, 0xbe, 0x89, 0x1a, 0x68, 0x0e, 0x67, 0xfd, 0x5a, 0x59, 0x0e, + 0xf4, 0x4c, 0xff, 0x6f, 0xfa, 0xc5, 0x8e, 0x4b, 0x1d, 0x7c, 0xda, 0x8b, 0x4c, 0x99, 0xaf, 0xc1, + 0xdb, 0xd2, 0xce, 0x16, 0x18, 0xe9, 0x02, 0xe1, 0xbb, 0xe6, 0x9a, 0x3a, 0xf8, 0x64, 0x4b, 0xbb, + 0xde, 0x64, 0x23, 0x6b, 0xc6, 0x73, 0xab, 0x7d, 0xcf, 0x0e, 0xc9, 0x37, 0x51, 0x03, 0x5d, 0x00, + 0xac, 0x0b, 0xb1, 0xb6, 0x08, 0x8a, 0xdc, 0x69, 0xa0, 0x3e, 0x9c, 0x8a, 0x19, 0xe0, 0x3b, 0x38, + 0xcb, 0xa9, 0x58, 0x55, 0x82, 0x71, 0x69, 0xa9, 0x13, 0x6d, 0xe2, 0x7c, 0x67, 0x42, 0x0d, 0x3a, + 0x7e, 0x4e, 0xe4, 0x73, 0x9e, 0xa7, 0x0e, 0xbe, 0x9f, 0x53, 0xb1, 0x54, 0xb0, 0x91, 0x3f, 0x85, + 0xc0, 0x5c, 0x65, 0xab, 0x3d, 0xd6, 0xda, 0x0f, 0x0f, 0x36, 0x30, 0xd7, 0xa0, 0x72, 0x68, 0x24, + 0xa6, 0xc2, 0x0c, 0x7c, 0xa2, 0x56, 0xc8, 0x16, 0xf0, 0x74, 0x81, 0x8b, 0x83, 0x05, 0xf6, 0xab, + 0x96, 0x3a, 0x18, 0xc8, 0x7e, 0xf1, 0x42, 0xb8, 0x57, 0x52, 0xc2, 0x19, 0xcf, 0xc3, 0xd3, 0xc8, + 0x9d, 0x8e, 0xf0, 0xee, 0x88, 0x1e, 0xc1, 0x43, 0xfa, 0x66, 0x53, 0xb4, 0x19, 0x5d, 0xbd, 0xaa, + 0x45, 0xb9, 0x62, 0x3c, 0xa3, 0x6f, 0x68, 0x13, 0x9e, 0xab, 0xf5, 0xc0, 0xc8, 0xe6, 0x7e, 0xac, + 0x45, 0xb9, 0x30, 0x99, 0x59, 0x00, 0xa0, 0x9d, 0x98, 0x05, 0xff, 0xc7, 0x85, 0x63, 0xe3, 0x1b, + 0x7d, 0x01, 0xc3, 0x2d, 0xed, 0xec, 0xbd, 0x7d, 0xe7, 0x88, 0xb0, 0x82, 0xd0, 0xb5, 0xfe, 0x6d, + 0x54, 0xb4, 0x96, 0x8c, 0x36, 0xe1, 0x50, 0xdf, 0x86, 0x2f, 0xef, 0xf8, 0x28, 0xf1, 0xb2, 0xa7, + 0xe7, 0x5c, 0xd6, 0x1d, 0xbe, 0x25, 0x1f, 0xff, 0x0a, 0x67, 0x6f, 0xa5, 0xd1, 0x83, 0xbd, 0x17, + 0xcf, 0xbc, 0xf1, 0x11, 0x8c, 0xf6, 0x1b, 0x7d, 0xf7, 0xd5, 0x33, 0xe0, 0x37, 0x83, 0xc7, 0xee, + 0xec, 0x0f, 0x17, 0xde, 0xdf, 0x88, 0xf2, 0x10, 0x3c, 0xf3, 0x8d, 0xb5, 0xa5, 0x5a, 0xe2, 0xa5, + 0xfb, 0xdb, 0xb7, 0x96, 0xc9, 0x45, 0x41, 0x78, 0x1e, 0x8b, 0x3a, 0x4f, 0x72, 0xca, 0xf5, 0x8a, + 0x27, 0x26, 0x45, 0x2a, 0xd6, 0xfc, 0xe7, 0x2f, 0xff, 0xa4, 0x3f, 0xfc, 0x35, 0xf8, 0xe0, 0x27, + 0x23, 0x7f, 0x56, 0x88, 0x36, 0x8b, 0x7f, 0xe8, 0x5f, 0xf4, 0xf2, 0x72, 0x7d, 0xac, 0x8b, 0x7c, + 0xf5, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x89, 0x5b, 0xc5, 0xcd, 0x29, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1/query.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1/query.pb.go new file mode 100644 index 0000000..dcfbb67 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1/query.pb.go @@ -0,0 +1,970 @@ +// Code generated by protoc-gen-go. +// source: google/datastore/v1/query.proto +// DO NOT EDIT! + +package datastore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/wrappers" +import _ "google.golang.org/genproto/googleapis/type/latlng" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Specifies what data the 'entity' field contains. +// A `ResultType` is either implied (for example, in `LookupResponse.missing` +// from `datastore.proto`, it is always `KEY_ONLY`) or specified by context +// (for example, in message `QueryResultBatch`, field `entity_result_type` +// specifies a `ResultType` for all the values in field `entity_results`). +type EntityResult_ResultType int32 + +const ( + // Unspecified. This value is never used. + EntityResult_RESULT_TYPE_UNSPECIFIED EntityResult_ResultType = 0 + // The key and properties. + EntityResult_FULL EntityResult_ResultType = 1 + // A projected subset of properties. The entity may have no key. + EntityResult_PROJECTION EntityResult_ResultType = 2 + // Only the key. + EntityResult_KEY_ONLY EntityResult_ResultType = 3 +) + +var EntityResult_ResultType_name = map[int32]string{ + 0: "RESULT_TYPE_UNSPECIFIED", + 1: "FULL", + 2: "PROJECTION", + 3: "KEY_ONLY", +} +var EntityResult_ResultType_value = map[string]int32{ + "RESULT_TYPE_UNSPECIFIED": 0, + "FULL": 1, + "PROJECTION": 2, + "KEY_ONLY": 3, +} + +func (x EntityResult_ResultType) String() string { + return proto.EnumName(EntityResult_ResultType_name, int32(x)) +} +func (EntityResult_ResultType) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +// The sort direction. +type PropertyOrder_Direction int32 + +const ( + // Unspecified. This value must not be used. + PropertyOrder_DIRECTION_UNSPECIFIED PropertyOrder_Direction = 0 + // Ascending. + PropertyOrder_ASCENDING PropertyOrder_Direction = 1 + // Descending. + PropertyOrder_DESCENDING PropertyOrder_Direction = 2 +) + +var PropertyOrder_Direction_name = map[int32]string{ + 0: "DIRECTION_UNSPECIFIED", + 1: "ASCENDING", + 2: "DESCENDING", +} +var PropertyOrder_Direction_value = map[string]int32{ + "DIRECTION_UNSPECIFIED": 0, + "ASCENDING": 1, + "DESCENDING": 2, +} + +func (x PropertyOrder_Direction) String() string { + return proto.EnumName(PropertyOrder_Direction_name, int32(x)) +} +func (PropertyOrder_Direction) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{5, 0} } + +// A composite filter operator. +type CompositeFilter_Operator int32 + +const ( + // Unspecified. This value must not be used. + CompositeFilter_OPERATOR_UNSPECIFIED CompositeFilter_Operator = 0 + // The results are required to satisfy each of the combined filters. + CompositeFilter_AND CompositeFilter_Operator = 1 +) + +var CompositeFilter_Operator_name = map[int32]string{ + 0: "OPERATOR_UNSPECIFIED", + 1: "AND", +} +var CompositeFilter_Operator_value = map[string]int32{ + "OPERATOR_UNSPECIFIED": 0, + "AND": 1, +} + +func (x CompositeFilter_Operator) String() string { + return proto.EnumName(CompositeFilter_Operator_name, int32(x)) +} +func (CompositeFilter_Operator) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{7, 0} } + +// A property filter operator. +type PropertyFilter_Operator int32 + +const ( + // Unspecified. This value must not be used. + PropertyFilter_OPERATOR_UNSPECIFIED PropertyFilter_Operator = 0 + // Less than. + PropertyFilter_LESS_THAN PropertyFilter_Operator = 1 + // Less than or equal. + PropertyFilter_LESS_THAN_OR_EQUAL PropertyFilter_Operator = 2 + // Greater than. + PropertyFilter_GREATER_THAN PropertyFilter_Operator = 3 + // Greater than or equal. + PropertyFilter_GREATER_THAN_OR_EQUAL PropertyFilter_Operator = 4 + // Equal. + PropertyFilter_EQUAL PropertyFilter_Operator = 5 + // Has ancestor. + PropertyFilter_HAS_ANCESTOR PropertyFilter_Operator = 11 +) + +var PropertyFilter_Operator_name = map[int32]string{ + 0: "OPERATOR_UNSPECIFIED", + 1: "LESS_THAN", + 2: "LESS_THAN_OR_EQUAL", + 3: "GREATER_THAN", + 4: "GREATER_THAN_OR_EQUAL", + 5: "EQUAL", + 11: "HAS_ANCESTOR", +} +var PropertyFilter_Operator_value = map[string]int32{ + "OPERATOR_UNSPECIFIED": 0, + "LESS_THAN": 1, + "LESS_THAN_OR_EQUAL": 2, + "GREATER_THAN": 3, + "GREATER_THAN_OR_EQUAL": 4, + "EQUAL": 5, + "HAS_ANCESTOR": 11, +} + +func (x PropertyFilter_Operator) String() string { + return proto.EnumName(PropertyFilter_Operator_name, int32(x)) +} +func (PropertyFilter_Operator) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{8, 0} } + +// The possible values for the `more_results` field. +type QueryResultBatch_MoreResultsType int32 + +const ( + // Unspecified. This value is never used. + QueryResultBatch_MORE_RESULTS_TYPE_UNSPECIFIED QueryResultBatch_MoreResultsType = 0 + // There may be additional batches to fetch from this query. + QueryResultBatch_NOT_FINISHED QueryResultBatch_MoreResultsType = 1 + // The query is finished, but there may be more results after the limit. + QueryResultBatch_MORE_RESULTS_AFTER_LIMIT QueryResultBatch_MoreResultsType = 2 + // The query is finished, but there may be more results after the end + // cursor. + QueryResultBatch_MORE_RESULTS_AFTER_CURSOR QueryResultBatch_MoreResultsType = 4 + // The query has been exhausted. + QueryResultBatch_NO_MORE_RESULTS QueryResultBatch_MoreResultsType = 3 +) + +var QueryResultBatch_MoreResultsType_name = map[int32]string{ + 0: "MORE_RESULTS_TYPE_UNSPECIFIED", + 1: "NOT_FINISHED", + 2: "MORE_RESULTS_AFTER_LIMIT", + 4: "MORE_RESULTS_AFTER_CURSOR", + 3: "NO_MORE_RESULTS", +} +var QueryResultBatch_MoreResultsType_value = map[string]int32{ + "MORE_RESULTS_TYPE_UNSPECIFIED": 0, + "NOT_FINISHED": 1, + "MORE_RESULTS_AFTER_LIMIT": 2, + "MORE_RESULTS_AFTER_CURSOR": 4, + "NO_MORE_RESULTS": 3, +} + +func (x QueryResultBatch_MoreResultsType) String() string { + return proto.EnumName(QueryResultBatch_MoreResultsType_name, int32(x)) +} +func (QueryResultBatch_MoreResultsType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{11, 0} +} + +// The result of fetching an entity from Datastore. +type EntityResult struct { + // The resulting entity. + Entity *Entity `protobuf:"bytes,1,opt,name=entity" json:"entity,omitempty"` + // The version of the entity, a strictly positive number that monotonically + // increases with changes to the entity. + // + // This field is set for [`FULL`][google.datastore.v1.EntityResult.ResultType.FULL] entity + // results. + // + // For [missing][google.datastore.v1.LookupResponse.missing] entities in `LookupResponse`, this + // is the version of the snapshot that was used to look up the entity, and it + // is always set except for eventually consistent reads. + Version int64 `protobuf:"varint,4,opt,name=version" json:"version,omitempty"` + // A cursor that points to the position after the result entity. + // Set only when the `EntityResult` is part of a `QueryResultBatch` message. + Cursor []byte `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (m *EntityResult) Reset() { *m = EntityResult{} } +func (m *EntityResult) String() string { return proto.CompactTextString(m) } +func (*EntityResult) ProtoMessage() {} +func (*EntityResult) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *EntityResult) GetEntity() *Entity { + if m != nil { + return m.Entity + } + return nil +} + +func (m *EntityResult) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *EntityResult) GetCursor() []byte { + if m != nil { + return m.Cursor + } + return nil +} + +// A query for entities. +type Query struct { + // The projection to return. Defaults to returning all properties. + Projection []*Projection `protobuf:"bytes,2,rep,name=projection" json:"projection,omitempty"` + // The kinds to query (if empty, returns entities of all kinds). + // Currently at most 1 kind may be specified. + Kind []*KindExpression `protobuf:"bytes,3,rep,name=kind" json:"kind,omitempty"` + // The filter to apply. + Filter *Filter `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"` + // The order to apply to the query results (if empty, order is unspecified). + Order []*PropertyOrder `protobuf:"bytes,5,rep,name=order" json:"order,omitempty"` + // The properties to make distinct. The query results will contain the first + // result for each distinct combination of values for the given properties + // (if empty, all results are returned). + DistinctOn []*PropertyReference `protobuf:"bytes,6,rep,name=distinct_on,json=distinctOn" json:"distinct_on,omitempty"` + // A starting point for the query results. Query cursors are + // returned in query result batches and + // [can only be used to continue the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets). + StartCursor []byte `protobuf:"bytes,7,opt,name=start_cursor,json=startCursor,proto3" json:"start_cursor,omitempty"` + // An ending point for the query results. Query cursors are + // returned in query result batches and + // [can only be used to limit the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets). + EndCursor []byte `protobuf:"bytes,8,opt,name=end_cursor,json=endCursor,proto3" json:"end_cursor,omitempty"` + // The number of results to skip. Applies before limit, but after all other + // constraints. Optional. Must be >= 0 if specified. + Offset int32 `protobuf:"varint,10,opt,name=offset" json:"offset,omitempty"` + // The maximum number of results to return. Applies after all other + // constraints. Optional. + // Unspecified is interpreted as no limit. + // Must be >= 0 if specified. + Limit *google_protobuf3.Int32Value `protobuf:"bytes,12,opt,name=limit" json:"limit,omitempty"` +} + +func (m *Query) Reset() { *m = Query{} } +func (m *Query) String() string { return proto.CompactTextString(m) } +func (*Query) ProtoMessage() {} +func (*Query) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *Query) GetProjection() []*Projection { + if m != nil { + return m.Projection + } + return nil +} + +func (m *Query) GetKind() []*KindExpression { + if m != nil { + return m.Kind + } + return nil +} + +func (m *Query) GetFilter() *Filter { + if m != nil { + return m.Filter + } + return nil +} + +func (m *Query) GetOrder() []*PropertyOrder { + if m != nil { + return m.Order + } + return nil +} + +func (m *Query) GetDistinctOn() []*PropertyReference { + if m != nil { + return m.DistinctOn + } + return nil +} + +func (m *Query) GetStartCursor() []byte { + if m != nil { + return m.StartCursor + } + return nil +} + +func (m *Query) GetEndCursor() []byte { + if m != nil { + return m.EndCursor + } + return nil +} + +func (m *Query) GetOffset() int32 { + if m != nil { + return m.Offset + } + return 0 +} + +func (m *Query) GetLimit() *google_protobuf3.Int32Value { + if m != nil { + return m.Limit + } + return nil +} + +// A representation of a kind. +type KindExpression struct { + // The name of the kind. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *KindExpression) Reset() { *m = KindExpression{} } +func (m *KindExpression) String() string { return proto.CompactTextString(m) } +func (*KindExpression) ProtoMessage() {} +func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *KindExpression) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A reference to a property relative to the kind expressions. +type PropertyReference struct { + // The name of the property. + // If name includes "."s, it may be interpreted as a property name path. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` +} + +func (m *PropertyReference) Reset() { *m = PropertyReference{} } +func (m *PropertyReference) String() string { return proto.CompactTextString(m) } +func (*PropertyReference) ProtoMessage() {} +func (*PropertyReference) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *PropertyReference) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A representation of a property in a projection. +type Projection struct { + // The property to project. + Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` +} + +func (m *Projection) Reset() { *m = Projection{} } +func (m *Projection) String() string { return proto.CompactTextString(m) } +func (*Projection) ProtoMessage() {} +func (*Projection) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *Projection) GetProperty() *PropertyReference { + if m != nil { + return m.Property + } + return nil +} + +// The desired order for a specific property. +type PropertyOrder struct { + // The property to order by. + Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The direction to order by. Defaults to `ASCENDING`. + Direction PropertyOrder_Direction `protobuf:"varint,2,opt,name=direction,enum=google.datastore.v1.PropertyOrder_Direction" json:"direction,omitempty"` +} + +func (m *PropertyOrder) Reset() { *m = PropertyOrder{} } +func (m *PropertyOrder) String() string { return proto.CompactTextString(m) } +func (*PropertyOrder) ProtoMessage() {} +func (*PropertyOrder) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *PropertyOrder) GetProperty() *PropertyReference { + if m != nil { + return m.Property + } + return nil +} + +func (m *PropertyOrder) GetDirection() PropertyOrder_Direction { + if m != nil { + return m.Direction + } + return PropertyOrder_DIRECTION_UNSPECIFIED +} + +// A holder for any type of filter. +type Filter struct { + // The type of filter. + // + // Types that are valid to be assigned to FilterType: + // *Filter_CompositeFilter + // *Filter_PropertyFilter + FilterType isFilter_FilterType `protobuf_oneof:"filter_type"` +} + +func (m *Filter) Reset() { *m = Filter{} } +func (m *Filter) String() string { return proto.CompactTextString(m) } +func (*Filter) ProtoMessage() {} +func (*Filter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +type isFilter_FilterType interface { + isFilter_FilterType() +} + +type Filter_CompositeFilter struct { + CompositeFilter *CompositeFilter `protobuf:"bytes,1,opt,name=composite_filter,json=compositeFilter,oneof"` +} +type Filter_PropertyFilter struct { + PropertyFilter *PropertyFilter `protobuf:"bytes,2,opt,name=property_filter,json=propertyFilter,oneof"` +} + +func (*Filter_CompositeFilter) isFilter_FilterType() {} +func (*Filter_PropertyFilter) isFilter_FilterType() {} + +func (m *Filter) GetFilterType() isFilter_FilterType { + if m != nil { + return m.FilterType + } + return nil +} + +func (m *Filter) GetCompositeFilter() *CompositeFilter { + if x, ok := m.GetFilterType().(*Filter_CompositeFilter); ok { + return x.CompositeFilter + } + return nil +} + +func (m *Filter) GetPropertyFilter() *PropertyFilter { + if x, ok := m.GetFilterType().(*Filter_PropertyFilter); ok { + return x.PropertyFilter + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Filter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Filter_OneofMarshaler, _Filter_OneofUnmarshaler, _Filter_OneofSizer, []interface{}{ + (*Filter_CompositeFilter)(nil), + (*Filter_PropertyFilter)(nil), + } +} + +func _Filter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Filter) + // filter_type + switch x := m.FilterType.(type) { + case *Filter_CompositeFilter: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CompositeFilter); err != nil { + return err + } + case *Filter_PropertyFilter: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PropertyFilter); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Filter.FilterType has unexpected type %T", x) + } + return nil +} + +func _Filter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Filter) + switch tag { + case 1: // filter_type.composite_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CompositeFilter) + err := b.DecodeMessage(msg) + m.FilterType = &Filter_CompositeFilter{msg} + return true, err + case 2: // filter_type.property_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PropertyFilter) + err := b.DecodeMessage(msg) + m.FilterType = &Filter_PropertyFilter{msg} + return true, err + default: + return false, nil + } +} + +func _Filter_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Filter) + // filter_type + switch x := m.FilterType.(type) { + case *Filter_CompositeFilter: + s := proto.Size(x.CompositeFilter) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Filter_PropertyFilter: + s := proto.Size(x.PropertyFilter) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A filter that merges multiple other filters using the given operator. +type CompositeFilter struct { + // The operator for combining multiple filters. + Op CompositeFilter_Operator `protobuf:"varint,1,opt,name=op,enum=google.datastore.v1.CompositeFilter_Operator" json:"op,omitempty"` + // The list of filters to combine. + // Must contain at least one filter. + Filters []*Filter `protobuf:"bytes,2,rep,name=filters" json:"filters,omitempty"` +} + +func (m *CompositeFilter) Reset() { *m = CompositeFilter{} } +func (m *CompositeFilter) String() string { return proto.CompactTextString(m) } +func (*CompositeFilter) ProtoMessage() {} +func (*CompositeFilter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *CompositeFilter) GetOp() CompositeFilter_Operator { + if m != nil { + return m.Op + } + return CompositeFilter_OPERATOR_UNSPECIFIED +} + +func (m *CompositeFilter) GetFilters() []*Filter { + if m != nil { + return m.Filters + } + return nil +} + +// A filter on a specific property. +type PropertyFilter struct { + // The property to filter by. + Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The operator to filter by. + Op PropertyFilter_Operator `protobuf:"varint,2,opt,name=op,enum=google.datastore.v1.PropertyFilter_Operator" json:"op,omitempty"` + // The value to compare the property to. + Value *Value `protobuf:"bytes,3,opt,name=value" json:"value,omitempty"` +} + +func (m *PropertyFilter) Reset() { *m = PropertyFilter{} } +func (m *PropertyFilter) String() string { return proto.CompactTextString(m) } +func (*PropertyFilter) ProtoMessage() {} +func (*PropertyFilter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +func (m *PropertyFilter) GetProperty() *PropertyReference { + if m != nil { + return m.Property + } + return nil +} + +func (m *PropertyFilter) GetOp() PropertyFilter_Operator { + if m != nil { + return m.Op + } + return PropertyFilter_OPERATOR_UNSPECIFIED +} + +func (m *PropertyFilter) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +// A [GQL query](https://cloud.google.com/datastore/docs/apis/gql/gql_reference). +type GqlQuery struct { + // A string of the format described + // [here](https://cloud.google.com/datastore/docs/apis/gql/gql_reference). + QueryString string `protobuf:"bytes,1,opt,name=query_string,json=queryString" json:"query_string,omitempty"` + // When false, the query string must not contain any literals and instead must + // bind all values. For example, + // `SELECT * FROM Kind WHERE a = 'string literal'` is not allowed, while + // `SELECT * FROM Kind WHERE a = @value` is. + AllowLiterals bool `protobuf:"varint,2,opt,name=allow_literals,json=allowLiterals" json:"allow_literals,omitempty"` + // For each non-reserved named binding site in the query string, there must be + // a named parameter with that name, but not necessarily the inverse. + // + // Key must match regex `[A-Za-z_$][A-Za-z_$0-9]*`, must not match regex + // `__.*__`, and must not be `""`. + NamedBindings map[string]*GqlQueryParameter `protobuf:"bytes,5,rep,name=named_bindings,json=namedBindings" json:"named_bindings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Numbered binding site @1 references the first numbered parameter, + // effectively using 1-based indexing, rather than the usual 0. + // + // For each binding site numbered i in `query_string`, there must be an i-th + // numbered parameter. The inverse must also be true. + PositionalBindings []*GqlQueryParameter `protobuf:"bytes,4,rep,name=positional_bindings,json=positionalBindings" json:"positional_bindings,omitempty"` +} + +func (m *GqlQuery) Reset() { *m = GqlQuery{} } +func (m *GqlQuery) String() string { return proto.CompactTextString(m) } +func (*GqlQuery) ProtoMessage() {} +func (*GqlQuery) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{9} } + +func (m *GqlQuery) GetQueryString() string { + if m != nil { + return m.QueryString + } + return "" +} + +func (m *GqlQuery) GetAllowLiterals() bool { + if m != nil { + return m.AllowLiterals + } + return false +} + +func (m *GqlQuery) GetNamedBindings() map[string]*GqlQueryParameter { + if m != nil { + return m.NamedBindings + } + return nil +} + +func (m *GqlQuery) GetPositionalBindings() []*GqlQueryParameter { + if m != nil { + return m.PositionalBindings + } + return nil +} + +// A binding parameter for a GQL query. +type GqlQueryParameter struct { + // The type of parameter. + // + // Types that are valid to be assigned to ParameterType: + // *GqlQueryParameter_Value + // *GqlQueryParameter_Cursor + ParameterType isGqlQueryParameter_ParameterType `protobuf_oneof:"parameter_type"` +} + +func (m *GqlQueryParameter) Reset() { *m = GqlQueryParameter{} } +func (m *GqlQueryParameter) String() string { return proto.CompactTextString(m) } +func (*GqlQueryParameter) ProtoMessage() {} +func (*GqlQueryParameter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{10} } + +type isGqlQueryParameter_ParameterType interface { + isGqlQueryParameter_ParameterType() +} + +type GqlQueryParameter_Value struct { + Value *Value `protobuf:"bytes,2,opt,name=value,oneof"` +} +type GqlQueryParameter_Cursor struct { + Cursor []byte `protobuf:"bytes,3,opt,name=cursor,proto3,oneof"` +} + +func (*GqlQueryParameter_Value) isGqlQueryParameter_ParameterType() {} +func (*GqlQueryParameter_Cursor) isGqlQueryParameter_ParameterType() {} + +func (m *GqlQueryParameter) GetParameterType() isGqlQueryParameter_ParameterType { + if m != nil { + return m.ParameterType + } + return nil +} + +func (m *GqlQueryParameter) GetValue() *Value { + if x, ok := m.GetParameterType().(*GqlQueryParameter_Value); ok { + return x.Value + } + return nil +} + +func (m *GqlQueryParameter) GetCursor() []byte { + if x, ok := m.GetParameterType().(*GqlQueryParameter_Cursor); ok { + return x.Cursor + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*GqlQueryParameter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _GqlQueryParameter_OneofMarshaler, _GqlQueryParameter_OneofUnmarshaler, _GqlQueryParameter_OneofSizer, []interface{}{ + (*GqlQueryParameter_Value)(nil), + (*GqlQueryParameter_Cursor)(nil), + } +} + +func _GqlQueryParameter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*GqlQueryParameter) + // parameter_type + switch x := m.ParameterType.(type) { + case *GqlQueryParameter_Value: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Value); err != nil { + return err + } + case *GqlQueryParameter_Cursor: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Cursor) + case nil: + default: + return fmt.Errorf("GqlQueryParameter.ParameterType has unexpected type %T", x) + } + return nil +} + +func _GqlQueryParameter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*GqlQueryParameter) + switch tag { + case 2: // parameter_type.value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Value) + err := b.DecodeMessage(msg) + m.ParameterType = &GqlQueryParameter_Value{msg} + return true, err + case 3: // parameter_type.cursor + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ParameterType = &GqlQueryParameter_Cursor{x} + return true, err + default: + return false, nil + } +} + +func _GqlQueryParameter_OneofSizer(msg proto.Message) (n int) { + m := msg.(*GqlQueryParameter) + // parameter_type + switch x := m.ParameterType.(type) { + case *GqlQueryParameter_Value: + s := proto.Size(x.Value) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *GqlQueryParameter_Cursor: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Cursor))) + n += len(x.Cursor) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A batch of results produced by a query. +type QueryResultBatch struct { + // The number of results skipped, typically because of an offset. + SkippedResults int32 `protobuf:"varint,6,opt,name=skipped_results,json=skippedResults" json:"skipped_results,omitempty"` + // A cursor that points to the position after the last skipped result. + // Will be set when `skipped_results` != 0. + SkippedCursor []byte `protobuf:"bytes,3,opt,name=skipped_cursor,json=skippedCursor,proto3" json:"skipped_cursor,omitempty"` + // The result type for every entity in `entity_results`. + EntityResultType EntityResult_ResultType `protobuf:"varint,1,opt,name=entity_result_type,json=entityResultType,enum=google.datastore.v1.EntityResult_ResultType" json:"entity_result_type,omitempty"` + // The results for this batch. + EntityResults []*EntityResult `protobuf:"bytes,2,rep,name=entity_results,json=entityResults" json:"entity_results,omitempty"` + // A cursor that points to the position after the last result in the batch. + EndCursor []byte `protobuf:"bytes,4,opt,name=end_cursor,json=endCursor,proto3" json:"end_cursor,omitempty"` + // The state of the query after the current batch. + MoreResults QueryResultBatch_MoreResultsType `protobuf:"varint,5,opt,name=more_results,json=moreResults,enum=google.datastore.v1.QueryResultBatch_MoreResultsType" json:"more_results,omitempty"` + // The version number of the snapshot this batch was returned from. + // This applies to the range of results from the query's `start_cursor` (or + // the beginning of the query if no cursor was given) to this batch's + // `end_cursor` (not the query's `end_cursor`). + // + // In a single transaction, subsequent query result batches for the same query + // can have a greater snapshot version number. Each batch's snapshot version + // is valid for all preceding batches. + // The value will be zero for eventually consistent queries. + SnapshotVersion int64 `protobuf:"varint,7,opt,name=snapshot_version,json=snapshotVersion" json:"snapshot_version,omitempty"` +} + +func (m *QueryResultBatch) Reset() { *m = QueryResultBatch{} } +func (m *QueryResultBatch) String() string { return proto.CompactTextString(m) } +func (*QueryResultBatch) ProtoMessage() {} +func (*QueryResultBatch) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{11} } + +func (m *QueryResultBatch) GetSkippedResults() int32 { + if m != nil { + return m.SkippedResults + } + return 0 +} + +func (m *QueryResultBatch) GetSkippedCursor() []byte { + if m != nil { + return m.SkippedCursor + } + return nil +} + +func (m *QueryResultBatch) GetEntityResultType() EntityResult_ResultType { + if m != nil { + return m.EntityResultType + } + return EntityResult_RESULT_TYPE_UNSPECIFIED +} + +func (m *QueryResultBatch) GetEntityResults() []*EntityResult { + if m != nil { + return m.EntityResults + } + return nil +} + +func (m *QueryResultBatch) GetEndCursor() []byte { + if m != nil { + return m.EndCursor + } + return nil +} + +func (m *QueryResultBatch) GetMoreResults() QueryResultBatch_MoreResultsType { + if m != nil { + return m.MoreResults + } + return QueryResultBatch_MORE_RESULTS_TYPE_UNSPECIFIED +} + +func (m *QueryResultBatch) GetSnapshotVersion() int64 { + if m != nil { + return m.SnapshotVersion + } + return 0 +} + +func init() { + proto.RegisterType((*EntityResult)(nil), "google.datastore.v1.EntityResult") + proto.RegisterType((*Query)(nil), "google.datastore.v1.Query") + proto.RegisterType((*KindExpression)(nil), "google.datastore.v1.KindExpression") + proto.RegisterType((*PropertyReference)(nil), "google.datastore.v1.PropertyReference") + proto.RegisterType((*Projection)(nil), "google.datastore.v1.Projection") + proto.RegisterType((*PropertyOrder)(nil), "google.datastore.v1.PropertyOrder") + proto.RegisterType((*Filter)(nil), "google.datastore.v1.Filter") + proto.RegisterType((*CompositeFilter)(nil), "google.datastore.v1.CompositeFilter") + proto.RegisterType((*PropertyFilter)(nil), "google.datastore.v1.PropertyFilter") + proto.RegisterType((*GqlQuery)(nil), "google.datastore.v1.GqlQuery") + proto.RegisterType((*GqlQueryParameter)(nil), "google.datastore.v1.GqlQueryParameter") + proto.RegisterType((*QueryResultBatch)(nil), "google.datastore.v1.QueryResultBatch") + proto.RegisterEnum("google.datastore.v1.EntityResult_ResultType", EntityResult_ResultType_name, EntityResult_ResultType_value) + proto.RegisterEnum("google.datastore.v1.PropertyOrder_Direction", PropertyOrder_Direction_name, PropertyOrder_Direction_value) + proto.RegisterEnum("google.datastore.v1.CompositeFilter_Operator", CompositeFilter_Operator_name, CompositeFilter_Operator_value) + proto.RegisterEnum("google.datastore.v1.PropertyFilter_Operator", PropertyFilter_Operator_name, PropertyFilter_Operator_value) + proto.RegisterEnum("google.datastore.v1.QueryResultBatch_MoreResultsType", QueryResultBatch_MoreResultsType_name, QueryResultBatch_MoreResultsType_value) +} + +func init() { proto.RegisterFile("google/datastore/v1/query.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 1301 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x92, 0xd3, 0xc6, + 0x12, 0x5e, 0xc9, 0x3f, 0x6b, 0xb7, 0xff, 0xc4, 0x70, 0x0e, 0x88, 0x05, 0x0e, 0xbb, 0x82, 0x73, + 0xd8, 0x53, 0x05, 0x36, 0x6b, 0x8a, 0x0a, 0x95, 0x90, 0x4a, 0xf9, 0x47, 0xbb, 0x36, 0x18, 0xcb, + 0x3b, 0xf6, 0x42, 0xe0, 0x46, 0x25, 0xec, 0x59, 0xa3, 0x20, 0x4b, 0x62, 0xa4, 0x5d, 0xb2, 0x97, + 0x79, 0x88, 0x54, 0xe5, 0x19, 0xf2, 0x00, 0xb9, 0xc8, 0x03, 0x24, 0x79, 0x88, 0x5c, 0xe7, 0x3a, + 0x8f, 0x90, 0xd2, 0xcc, 0xc8, 0x7f, 0x6b, 0xcc, 0x5e, 0x70, 0xa7, 0xe9, 0xf9, 0xbe, 0xaf, 0xa7, + 0x7b, 0x7a, 0x5a, 0x0d, 0xb7, 0xc6, 0x9e, 0x37, 0x76, 0x48, 0x65, 0x64, 0x85, 0x56, 0x10, 0x7a, + 0x94, 0x54, 0x4e, 0xf7, 0x2a, 0xef, 0x4f, 0x08, 0x3d, 0x2b, 0xfb, 0xd4, 0x0b, 0x3d, 0x74, 0x99, + 0x03, 0xca, 0x53, 0x40, 0xf9, 0x74, 0x6f, 0xeb, 0x86, 0x60, 0x59, 0xbe, 0x5d, 0xb1, 0x5c, 0xd7, + 0x0b, 0xad, 0xd0, 0xf6, 0xdc, 0x80, 0x53, 0xb6, 0xb6, 0x57, 0x69, 0x12, 0x37, 0xb4, 0x43, 0x21, + 0xba, 0xf5, 0x1f, 0x81, 0x60, 0xab, 0x37, 0x27, 0xc7, 0x95, 0x0f, 0xd4, 0xf2, 0x7d, 0x42, 0x63, + 0x05, 0x55, 0xec, 0x87, 0x67, 0x3e, 0xa9, 0x38, 0x56, 0xe8, 0xb8, 0x63, 0xbe, 0xa3, 0xfd, 0x21, + 0x41, 0x5e, 0x67, 0x52, 0x98, 0x04, 0x27, 0x4e, 0x88, 0x1e, 0x42, 0x9a, 0x4b, 0xab, 0xd2, 0xb6, + 0xb4, 0x9b, 0xab, 0x5e, 0x2f, 0xaf, 0x38, 0x70, 0x59, 0x50, 0x04, 0x14, 0xa9, 0xb0, 0x79, 0x4a, + 0x68, 0x60, 0x7b, 0xae, 0x9a, 0xdc, 0x96, 0x76, 0x13, 0x38, 0x5e, 0xa2, 0x2b, 0x90, 0x1e, 0x9e, + 0xd0, 0xc0, 0xa3, 0x6a, 0x62, 0x5b, 0xda, 0xcd, 0x63, 0xb1, 0xd2, 0x0e, 0x01, 0xb8, 0xc3, 0xc1, + 0x99, 0x4f, 0xd0, 0x75, 0xb8, 0x8a, 0xf5, 0xfe, 0x51, 0x67, 0x60, 0x0e, 0x5e, 0xf5, 0x74, 0xf3, + 0xa8, 0xdb, 0xef, 0xe9, 0x8d, 0xf6, 0x7e, 0x5b, 0x6f, 0x2a, 0x1b, 0x28, 0x03, 0xc9, 0xfd, 0xa3, + 0x4e, 0x47, 0x91, 0x50, 0x11, 0xa0, 0x87, 0x8d, 0xa7, 0x7a, 0x63, 0xd0, 0x36, 0xba, 0x8a, 0x8c, + 0xf2, 0x90, 0x79, 0xa6, 0xbf, 0x32, 0x8d, 0x6e, 0xe7, 0x95, 0x92, 0xd0, 0x7e, 0x4b, 0x40, 0xea, + 0x30, 0xca, 0x34, 0xfa, 0x06, 0xc0, 0xa7, 0xde, 0x77, 0x64, 0x18, 0x65, 0x51, 0x95, 0xb7, 0x13, + 0xbb, 0xb9, 0xea, 0xad, 0x95, 0x71, 0xf4, 0xa6, 0x30, 0x3c, 0x47, 0x41, 0x5f, 0x40, 0xf2, 0x9d, + 0xed, 0x8e, 0xd4, 0x04, 0xa3, 0xde, 0x5e, 0x49, 0x7d, 0x66, 0xbb, 0x23, 0xfd, 0x7b, 0x9f, 0x92, + 0x20, 0x0a, 0x14, 0x33, 0x42, 0x94, 0xbd, 0x63, 0xdb, 0x09, 0x09, 0x65, 0x79, 0xf8, 0x58, 0xf6, + 0xf6, 0x19, 0x04, 0x0b, 0x28, 0x7a, 0x0c, 0x29, 0x8f, 0x8e, 0x08, 0x55, 0x53, 0xcc, 0x9d, 0xf6, + 0xb1, 0x93, 0xfa, 0x84, 0x86, 0x67, 0x46, 0x84, 0xc4, 0x9c, 0x80, 0x0e, 0x20, 0x37, 0xb2, 0x83, + 0xd0, 0x76, 0x87, 0xa1, 0xe9, 0xb9, 0x6a, 0x9a, 0xf1, 0xff, 0xb7, 0x96, 0x8f, 0xc9, 0x31, 0xa1, + 0xc4, 0x1d, 0x12, 0x0c, 0x31, 0xd5, 0x70, 0xd1, 0x0e, 0xe4, 0x83, 0xd0, 0xa2, 0xa1, 0x29, 0x2e, + 0x6b, 0x93, 0x5d, 0x56, 0x8e, 0xd9, 0x1a, 0xcc, 0x84, 0x6e, 0x02, 0x10, 0x77, 0x14, 0x03, 0x32, + 0x0c, 0x90, 0x25, 0xee, 0x48, 0x6c, 0x5f, 0x81, 0xb4, 0x77, 0x7c, 0x1c, 0x90, 0x50, 0x85, 0x6d, + 0x69, 0x37, 0x85, 0xc5, 0x0a, 0xed, 0x41, 0xca, 0xb1, 0x27, 0x76, 0xa8, 0xe6, 0x17, 0x13, 0x12, + 0x97, 0x6a, 0xb9, 0xed, 0x86, 0x0f, 0xab, 0x2f, 0x2c, 0xe7, 0x84, 0x60, 0x8e, 0xd4, 0xee, 0x40, + 0x71, 0x31, 0xb9, 0x08, 0x41, 0xd2, 0xb5, 0x26, 0x84, 0x95, 0x64, 0x16, 0xb3, 0x6f, 0xed, 0x2e, + 0x5c, 0x3a, 0x17, 0xd3, 0x14, 0x28, 0xcf, 0x01, 0x7b, 0x00, 0xb3, 0x6b, 0x46, 0x75, 0xc8, 0xf8, + 0x82, 0x26, 0x2a, 0xfc, 0xa2, 0xf9, 0x9a, 0xf2, 0xb4, 0xbf, 0x24, 0x28, 0x2c, 0xdc, 0xc7, 0xe7, + 0x50, 0x45, 0x4f, 0x21, 0x3b, 0xb2, 0xe9, 0xb4, 0x68, 0xa5, 0xdd, 0x62, 0xf5, 0xde, 0xa7, 0x4b, + 0xa1, 0xdc, 0x8c, 0x39, 0x78, 0x46, 0xd7, 0x74, 0xc8, 0x4e, 0xed, 0xe8, 0x1a, 0xfc, 0xbb, 0xd9, + 0xc6, 0xfc, 0xd5, 0x2c, 0xbd, 0xad, 0x02, 0x64, 0x6b, 0xfd, 0x86, 0xde, 0x6d, 0xb6, 0xbb, 0x07, + 0xfc, 0x81, 0x35, 0xf5, 0xe9, 0x5a, 0xd6, 0x7e, 0x95, 0x20, 0xcd, 0x8b, 0x15, 0x1d, 0x82, 0x32, + 0xf4, 0x26, 0xbe, 0x17, 0xd8, 0x21, 0x31, 0x45, 0x8d, 0xf3, 0x48, 0xef, 0xac, 0x3c, 0x64, 0x23, + 0x06, 0x73, 0x7e, 0x6b, 0x03, 0x97, 0x86, 0x8b, 0x26, 0xd4, 0x85, 0x52, 0x1c, 0x7c, 0xac, 0x28, + 0x33, 0xc5, 0xdb, 0x6b, 0xc3, 0x9e, 0x0a, 0x16, 0xfd, 0x05, 0x4b, 0xbd, 0x00, 0x39, 0x2e, 0x63, + 0x46, 0x7d, 0x4e, 0xfb, 0x45, 0x82, 0xd2, 0xd2, 0x29, 0xd0, 0xd7, 0x20, 0x7b, 0x3e, 0x3b, 0x77, + 0xb1, 0x7a, 0xff, 0x22, 0xe7, 0x2e, 0x1b, 0x3e, 0xa1, 0x56, 0xe8, 0x51, 0x2c, 0x7b, 0x3e, 0x7a, + 0x04, 0x9b, 0xdc, 0x43, 0x20, 0xba, 0xca, 0xda, 0xf7, 0x1d, 0x63, 0xb5, 0xfb, 0x90, 0x89, 0x65, + 0x90, 0x0a, 0xff, 0x32, 0x7a, 0x3a, 0xae, 0x0d, 0x0c, 0xbc, 0x74, 0x17, 0x9b, 0x90, 0xa8, 0x75, + 0x9b, 0x8a, 0xa4, 0xfd, 0x29, 0x43, 0x71, 0x31, 0xd8, 0xcf, 0x52, 0x5f, 0x4f, 0x58, 0xec, 0x17, + 0x29, 0xac, 0x55, 0xa1, 0x3f, 0x80, 0xd4, 0x69, 0xf4, 0x48, 0x59, 0x1f, 0xcf, 0x55, 0xb7, 0x56, + 0x0a, 0x88, 0x67, 0xcc, 0x80, 0xda, 0x8f, 0xd2, 0x85, 0xc2, 0x2e, 0x40, 0xb6, 0xa3, 0xf7, 0xfb, + 0xe6, 0xa0, 0x55, 0xeb, 0x2a, 0x12, 0xba, 0x02, 0x68, 0xba, 0x34, 0x0d, 0x6c, 0xea, 0x87, 0x47, + 0xb5, 0x8e, 0x22, 0x23, 0x05, 0xf2, 0x07, 0x58, 0xaf, 0x0d, 0x74, 0xcc, 0x91, 0x89, 0xa8, 0xac, + 0xe7, 0x2d, 0x33, 0x70, 0x12, 0x65, 0x21, 0xc5, 0x3f, 0x53, 0x11, 0xaf, 0x55, 0xeb, 0x9b, 0xb5, + 0x6e, 0x43, 0xef, 0x0f, 0x0c, 0xac, 0xe4, 0xb4, 0xbf, 0x65, 0xc8, 0x1c, 0xbc, 0x77, 0xf8, 0xaf, + 0x62, 0x07, 0xf2, 0xec, 0xef, 0x6c, 0x06, 0x21, 0xb5, 0xdd, 0xb1, 0xe8, 0x30, 0x39, 0x66, 0xeb, + 0x33, 0x13, 0xfa, 0x2f, 0x14, 0x2d, 0xc7, 0xf1, 0x3e, 0x98, 0x8e, 0x1d, 0x12, 0x6a, 0x39, 0x01, + 0xcb, 0x61, 0x06, 0x17, 0x98, 0xb5, 0x23, 0x8c, 0xe8, 0x25, 0x14, 0xa3, 0x76, 0x33, 0x32, 0xdf, + 0xd8, 0xee, 0xc8, 0x76, 0xc7, 0x81, 0x68, 0xe7, 0x0f, 0x56, 0x66, 0x2a, 0x3e, 0x40, 0xb9, 0x1b, + 0x71, 0xea, 0x82, 0xa2, 0xbb, 0x21, 0x3d, 0xc3, 0x05, 0x77, 0xde, 0x86, 0x5e, 0xc2, 0x65, 0x56, + 0x91, 0xb6, 0xe7, 0x5a, 0xce, 0x4c, 0x3d, 0xb9, 0xa6, 0xd9, 0xc7, 0xea, 0x3d, 0x8b, 0x5a, 0x13, + 0x12, 0xd5, 0x22, 0x9a, 0x49, 0xc4, 0xc2, 0x5b, 0x6f, 0x01, 0x9d, 0xf7, 0x8e, 0x14, 0x48, 0xbc, + 0x23, 0x67, 0x22, 0x11, 0xd1, 0x27, 0x7a, 0x12, 0x5f, 0xbd, 0xbc, 0xa6, 0xf2, 0xce, 0xbb, 0xe4, + 0xa4, 0x2f, 0xe5, 0xc7, 0x92, 0x16, 0xc0, 0xa5, 0x73, 0xfb, 0xa8, 0xba, 0x28, 0xbb, 0xa6, 0xa2, + 0x5a, 0x1b, 0x42, 0x0c, 0xa9, 0x8b, 0xe3, 0x44, 0x6b, 0x23, 0x1e, 0x28, 0xea, 0x0a, 0x14, 0xfd, + 0x58, 0x9a, 0xbf, 0xff, 0xdf, 0x93, 0xa0, 0x30, 0x97, 0x7c, 0xd0, 0xa8, 0x5b, 0xe1, 0xf0, 0x2d, + 0xba, 0x0b, 0xa5, 0xe0, 0x9d, 0xed, 0xfb, 0x64, 0x64, 0x52, 0x66, 0x0e, 0xd4, 0x34, 0xfb, 0x5f, + 0x15, 0x85, 0x99, 0x83, 0x83, 0xe8, 0xd6, 0x63, 0xe0, 0xc2, 0x00, 0x53, 0x10, 0x56, 0xf1, 0xdb, + 0x7b, 0x0d, 0x88, 0xcf, 0x40, 0x42, 0x8e, 0xb9, 0x16, 0x0d, 0xe6, 0xde, 0xba, 0xd1, 0x89, 0xa1, + 0xcb, 0xb3, 0x19, 0x08, 0x2b, 0x64, 0x6e, 0x83, 0x4d, 0x45, 0x2d, 0x28, 0x2e, 0x68, 0xc7, 0x4d, + 0x67, 0xe7, 0x93, 0xba, 0xb8, 0x30, 0x2f, 0x16, 0x2c, 0xfd, 0xbb, 0x93, 0xcb, 0xff, 0xee, 0x6f, + 0x21, 0x3f, 0xf1, 0x28, 0x99, 0xba, 0x49, 0xb1, 0xe3, 0x3f, 0x5a, 0xe9, 0x66, 0x39, 0xa3, 0xe5, + 0xe7, 0x1e, 0x25, 0xc2, 0x0f, 0x8b, 0x23, 0x37, 0x99, 0x19, 0xd0, 0xff, 0x41, 0x09, 0x5c, 0xcb, + 0x0f, 0xde, 0x7a, 0xa1, 0x19, 0x4f, 0x88, 0x9b, 0x6c, 0x42, 0x2c, 0xc5, 0xf6, 0x17, 0xdc, 0xac, + 0xfd, 0x24, 0x41, 0x69, 0x49, 0x0b, 0xed, 0xc0, 0xcd, 0xe7, 0x06, 0xd6, 0x4d, 0x3e, 0x1c, 0xf6, + 0x57, 0x4d, 0x87, 0x0a, 0xe4, 0xbb, 0xc6, 0xc0, 0xdc, 0x6f, 0x77, 0xdb, 0xfd, 0x96, 0xde, 0x54, + 0x24, 0x74, 0x03, 0xd4, 0x05, 0x52, 0x6d, 0x3f, 0x6a, 0x11, 0x9d, 0xf6, 0xf3, 0xf6, 0x40, 0x91, + 0xd1, 0x4d, 0xb8, 0xb6, 0x62, 0xb7, 0x71, 0x84, 0xfb, 0x06, 0x56, 0x92, 0xe8, 0x32, 0x94, 0xba, + 0x86, 0x39, 0x8f, 0x50, 0x12, 0xf5, 0x1f, 0x24, 0xb8, 0x3a, 0xf4, 0x26, 0xab, 0xf2, 0x51, 0x07, + 0x5e, 0xd5, 0xd1, 0x34, 0xd3, 0x93, 0x5e, 0x3f, 0x11, 0x90, 0xb1, 0xe7, 0x58, 0xee, 0xb8, 0xec, + 0xd1, 0x71, 0x65, 0x4c, 0x5c, 0x36, 0xeb, 0x54, 0xf8, 0x96, 0xe5, 0xdb, 0xc1, 0xc2, 0x24, 0xff, + 0xd5, 0x74, 0xf1, 0xb3, 0x7c, 0xed, 0x80, 0xd3, 0x1b, 0x8e, 0x77, 0x32, 0x2a, 0x37, 0xa7, 0x7e, + 0x5e, 0xec, 0xbd, 0x49, 0x33, 0x91, 0x87, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x2f, 0x61, + 0x5a, 0x61, 0x0c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/datastore.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/datastore.pb.go new file mode 100644 index 0000000..2230f74 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/datastore.pb.go @@ -0,0 +1,1425 @@ +// Code generated by protoc-gen-go. +// source: google/datastore/v1beta3/datastore.proto +// DO NOT EDIT! + +/* +Package datastore is a generated protocol buffer package. + +It is generated from these files: + google/datastore/v1beta3/datastore.proto + google/datastore/v1beta3/entity.proto + google/datastore/v1beta3/query.proto + +It has these top-level messages: + LookupRequest + LookupResponse + RunQueryRequest + RunQueryResponse + BeginTransactionRequest + BeginTransactionResponse + RollbackRequest + RollbackResponse + CommitRequest + CommitResponse + AllocateIdsRequest + AllocateIdsResponse + Mutation + MutationResult + ReadOptions + PartitionId + Key + ArrayValue + Value + Entity + EntityResult + Query + KindExpression + PropertyReference + Projection + PropertyOrder + Filter + CompositeFilter + PropertyFilter + GqlQuery + GqlQueryParameter + QueryResultBatch +*/ +package datastore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The modes available for commits. +type CommitRequest_Mode int32 + +const ( + // Unspecified. This value must not be used. + CommitRequest_MODE_UNSPECIFIED CommitRequest_Mode = 0 + // Transactional: The mutations are either all applied, or none are applied. + // Learn about transactions [here](https://cloud.google.com/datastore/docs/concepts/transactions). + CommitRequest_TRANSACTIONAL CommitRequest_Mode = 1 + // Non-transactional: The mutations may not apply as all or none. + CommitRequest_NON_TRANSACTIONAL CommitRequest_Mode = 2 +) + +var CommitRequest_Mode_name = map[int32]string{ + 0: "MODE_UNSPECIFIED", + 1: "TRANSACTIONAL", + 2: "NON_TRANSACTIONAL", +} +var CommitRequest_Mode_value = map[string]int32{ + "MODE_UNSPECIFIED": 0, + "TRANSACTIONAL": 1, + "NON_TRANSACTIONAL": 2, +} + +func (x CommitRequest_Mode) String() string { + return proto.EnumName(CommitRequest_Mode_name, int32(x)) +} +func (CommitRequest_Mode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 0} } + +// The possible values for read consistencies. +type ReadOptions_ReadConsistency int32 + +const ( + // Unspecified. This value must not be used. + ReadOptions_READ_CONSISTENCY_UNSPECIFIED ReadOptions_ReadConsistency = 0 + // Strong consistency. + ReadOptions_STRONG ReadOptions_ReadConsistency = 1 + // Eventual consistency. + ReadOptions_EVENTUAL ReadOptions_ReadConsistency = 2 +) + +var ReadOptions_ReadConsistency_name = map[int32]string{ + 0: "READ_CONSISTENCY_UNSPECIFIED", + 1: "STRONG", + 2: "EVENTUAL", +} +var ReadOptions_ReadConsistency_value = map[string]int32{ + "READ_CONSISTENCY_UNSPECIFIED": 0, + "STRONG": 1, + "EVENTUAL": 2, +} + +func (x ReadOptions_ReadConsistency) String() string { + return proto.EnumName(ReadOptions_ReadConsistency_name, int32(x)) +} +func (ReadOptions_ReadConsistency) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{14, 0} +} + +// The request for [Datastore.Lookup][google.datastore.v1beta3.Datastore.Lookup]. +type LookupRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The options for this lookup request. + ReadOptions *ReadOptions `protobuf:"bytes,1,opt,name=read_options,json=readOptions" json:"read_options,omitempty"` + // Keys of entities to look up. + Keys []*Key `protobuf:"bytes,3,rep,name=keys" json:"keys,omitempty"` +} + +func (m *LookupRequest) Reset() { *m = LookupRequest{} } +func (m *LookupRequest) String() string { return proto.CompactTextString(m) } +func (*LookupRequest) ProtoMessage() {} +func (*LookupRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *LookupRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *LookupRequest) GetReadOptions() *ReadOptions { + if m != nil { + return m.ReadOptions + } + return nil +} + +func (m *LookupRequest) GetKeys() []*Key { + if m != nil { + return m.Keys + } + return nil +} + +// The response for [Datastore.Lookup][google.datastore.v1beta3.Datastore.Lookup]. +type LookupResponse struct { + // Entities found as `ResultType.FULL` entities. The order of results in this + // field is undefined and has no relation to the order of the keys in the + // input. + Found []*EntityResult `protobuf:"bytes,1,rep,name=found" json:"found,omitempty"` + // Entities not found as `ResultType.KEY_ONLY` entities. The order of results + // in this field is undefined and has no relation to the order of the keys + // in the input. + Missing []*EntityResult `protobuf:"bytes,2,rep,name=missing" json:"missing,omitempty"` + // A list of keys that were not looked up due to resource constraints. The + // order of results in this field is undefined and has no relation to the + // order of the keys in the input. + Deferred []*Key `protobuf:"bytes,3,rep,name=deferred" json:"deferred,omitempty"` +} + +func (m *LookupResponse) Reset() { *m = LookupResponse{} } +func (m *LookupResponse) String() string { return proto.CompactTextString(m) } +func (*LookupResponse) ProtoMessage() {} +func (*LookupResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *LookupResponse) GetFound() []*EntityResult { + if m != nil { + return m.Found + } + return nil +} + +func (m *LookupResponse) GetMissing() []*EntityResult { + if m != nil { + return m.Missing + } + return nil +} + +func (m *LookupResponse) GetDeferred() []*Key { + if m != nil { + return m.Deferred + } + return nil +} + +// The request for [Datastore.RunQuery][google.datastore.v1beta3.Datastore.RunQuery]. +type RunQueryRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Entities are partitioned into subsets, identified by a partition ID. + // Queries are scoped to a single partition. + // This partition ID is normalized with the standard default context + // partition ID. + PartitionId *PartitionId `protobuf:"bytes,2,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The options for this query. + ReadOptions *ReadOptions `protobuf:"bytes,1,opt,name=read_options,json=readOptions" json:"read_options,omitempty"` + // The type of query. + // + // Types that are valid to be assigned to QueryType: + // *RunQueryRequest_Query + // *RunQueryRequest_GqlQuery + QueryType isRunQueryRequest_QueryType `protobuf_oneof:"query_type"` +} + +func (m *RunQueryRequest) Reset() { *m = RunQueryRequest{} } +func (m *RunQueryRequest) String() string { return proto.CompactTextString(m) } +func (*RunQueryRequest) ProtoMessage() {} +func (*RunQueryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isRunQueryRequest_QueryType interface { + isRunQueryRequest_QueryType() +} + +type RunQueryRequest_Query struct { + Query *Query `protobuf:"bytes,3,opt,name=query,oneof"` +} +type RunQueryRequest_GqlQuery struct { + GqlQuery *GqlQuery `protobuf:"bytes,7,opt,name=gql_query,json=gqlQuery,oneof"` +} + +func (*RunQueryRequest_Query) isRunQueryRequest_QueryType() {} +func (*RunQueryRequest_GqlQuery) isRunQueryRequest_QueryType() {} + +func (m *RunQueryRequest) GetQueryType() isRunQueryRequest_QueryType { + if m != nil { + return m.QueryType + } + return nil +} + +func (m *RunQueryRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RunQueryRequest) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *RunQueryRequest) GetReadOptions() *ReadOptions { + if m != nil { + return m.ReadOptions + } + return nil +} + +func (m *RunQueryRequest) GetQuery() *Query { + if x, ok := m.GetQueryType().(*RunQueryRequest_Query); ok { + return x.Query + } + return nil +} + +func (m *RunQueryRequest) GetGqlQuery() *GqlQuery { + if x, ok := m.GetQueryType().(*RunQueryRequest_GqlQuery); ok { + return x.GqlQuery + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RunQueryRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RunQueryRequest_OneofMarshaler, _RunQueryRequest_OneofUnmarshaler, _RunQueryRequest_OneofSizer, []interface{}{ + (*RunQueryRequest_Query)(nil), + (*RunQueryRequest_GqlQuery)(nil), + } +} + +func _RunQueryRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RunQueryRequest) + // query_type + switch x := m.QueryType.(type) { + case *RunQueryRequest_Query: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Query); err != nil { + return err + } + case *RunQueryRequest_GqlQuery: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.GqlQuery); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RunQueryRequest.QueryType has unexpected type %T", x) + } + return nil +} + +func _RunQueryRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RunQueryRequest) + switch tag { + case 3: // query_type.query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Query) + err := b.DecodeMessage(msg) + m.QueryType = &RunQueryRequest_Query{msg} + return true, err + case 7: // query_type.gql_query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GqlQuery) + err := b.DecodeMessage(msg) + m.QueryType = &RunQueryRequest_GqlQuery{msg} + return true, err + default: + return false, nil + } +} + +func _RunQueryRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RunQueryRequest) + // query_type + switch x := m.QueryType.(type) { + case *RunQueryRequest_Query: + s := proto.Size(x.Query) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RunQueryRequest_GqlQuery: + s := proto.Size(x.GqlQuery) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response for [Datastore.RunQuery][google.datastore.v1beta3.Datastore.RunQuery]. +type RunQueryResponse struct { + // A batch of query results (always present). + Batch *QueryResultBatch `protobuf:"bytes,1,opt,name=batch" json:"batch,omitempty"` + // The parsed form of the `GqlQuery` from the request, if it was set. + Query *Query `protobuf:"bytes,2,opt,name=query" json:"query,omitempty"` +} + +func (m *RunQueryResponse) Reset() { *m = RunQueryResponse{} } +func (m *RunQueryResponse) String() string { return proto.CompactTextString(m) } +func (*RunQueryResponse) ProtoMessage() {} +func (*RunQueryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *RunQueryResponse) GetBatch() *QueryResultBatch { + if m != nil { + return m.Batch + } + return nil +} + +func (m *RunQueryResponse) GetQuery() *Query { + if m != nil { + return m.Query + } + return nil +} + +// The request for [Datastore.BeginTransaction][google.datastore.v1beta3.Datastore.BeginTransaction]. +type BeginTransactionRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` +} + +func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } +func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } +func (*BeginTransactionRequest) ProtoMessage() {} +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *BeginTransactionRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +// The response for [Datastore.BeginTransaction][google.datastore.v1beta3.Datastore.BeginTransaction]. +type BeginTransactionResponse struct { + // The transaction identifier (always present). + Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` +} + +func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionResponse{} } +func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) } +func (*BeginTransactionResponse) ProtoMessage() {} +func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *BeginTransactionResponse) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +// The request for [Datastore.Rollback][google.datastore.v1beta3.Datastore.Rollback]. +type RollbackRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The transaction identifier, returned by a call to + // [Datastore.BeginTransaction][google.datastore.v1beta3.Datastore.BeginTransaction]. + Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` +} + +func (m *RollbackRequest) Reset() { *m = RollbackRequest{} } +func (m *RollbackRequest) String() string { return proto.CompactTextString(m) } +func (*RollbackRequest) ProtoMessage() {} +func (*RollbackRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *RollbackRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RollbackRequest) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +// The response for [Datastore.Rollback][google.datastore.v1beta3.Datastore.Rollback]. +// (an empty message). +type RollbackResponse struct { +} + +func (m *RollbackResponse) Reset() { *m = RollbackResponse{} } +func (m *RollbackResponse) String() string { return proto.CompactTextString(m) } +func (*RollbackResponse) ProtoMessage() {} +func (*RollbackResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +// The request for [Datastore.Commit][google.datastore.v1beta3.Datastore.Commit]. +type CommitRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The type of commit to perform. Defaults to `TRANSACTIONAL`. + Mode CommitRequest_Mode `protobuf:"varint,5,opt,name=mode,enum=google.datastore.v1beta3.CommitRequest_Mode" json:"mode,omitempty"` + // Must be set when mode is `TRANSACTIONAL`. + // + // Types that are valid to be assigned to TransactionSelector: + // *CommitRequest_Transaction + TransactionSelector isCommitRequest_TransactionSelector `protobuf_oneof:"transaction_selector"` + // The mutations to perform. + // + // When mode is `TRANSACTIONAL`, mutations affecting a single entity are + // applied in order. The following sequences of mutations affecting a single + // entity are not permitted in a single `Commit` request: + // + // - `insert` followed by `insert` + // - `update` followed by `insert` + // - `upsert` followed by `insert` + // - `delete` followed by `update` + // + // When mode is `NON_TRANSACTIONAL`, no two mutations may affect a single + // entity. + Mutations []*Mutation `protobuf:"bytes,6,rep,name=mutations" json:"mutations,omitempty"` +} + +func (m *CommitRequest) Reset() { *m = CommitRequest{} } +func (m *CommitRequest) String() string { return proto.CompactTextString(m) } +func (*CommitRequest) ProtoMessage() {} +func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +type isCommitRequest_TransactionSelector interface { + isCommitRequest_TransactionSelector() +} + +type CommitRequest_Transaction struct { + Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3,oneof"` +} + +func (*CommitRequest_Transaction) isCommitRequest_TransactionSelector() {} + +func (m *CommitRequest) GetTransactionSelector() isCommitRequest_TransactionSelector { + if m != nil { + return m.TransactionSelector + } + return nil +} + +func (m *CommitRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CommitRequest) GetMode() CommitRequest_Mode { + if m != nil { + return m.Mode + } + return CommitRequest_MODE_UNSPECIFIED +} + +func (m *CommitRequest) GetTransaction() []byte { + if x, ok := m.GetTransactionSelector().(*CommitRequest_Transaction); ok { + return x.Transaction + } + return nil +} + +func (m *CommitRequest) GetMutations() []*Mutation { + if m != nil { + return m.Mutations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CommitRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CommitRequest_OneofMarshaler, _CommitRequest_OneofUnmarshaler, _CommitRequest_OneofSizer, []interface{}{ + (*CommitRequest_Transaction)(nil), + } +} + +func _CommitRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CommitRequest) + // transaction_selector + switch x := m.TransactionSelector.(type) { + case *CommitRequest_Transaction: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Transaction) + case nil: + default: + return fmt.Errorf("CommitRequest.TransactionSelector has unexpected type %T", x) + } + return nil +} + +func _CommitRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CommitRequest) + switch tag { + case 1: // transaction_selector.transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.TransactionSelector = &CommitRequest_Transaction{x} + return true, err + default: + return false, nil + } +} + +func _CommitRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CommitRequest) + // transaction_selector + switch x := m.TransactionSelector.(type) { + case *CommitRequest_Transaction: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Transaction))) + n += len(x.Transaction) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response for [Datastore.Commit][google.datastore.v1beta3.Datastore.Commit]. +type CommitResponse struct { + // The result of performing the mutations. + // The i-th mutation result corresponds to the i-th mutation in the request. + MutationResults []*MutationResult `protobuf:"bytes,3,rep,name=mutation_results,json=mutationResults" json:"mutation_results,omitempty"` + // The number of index entries updated during the commit, or zero if none were + // updated. + IndexUpdates int32 `protobuf:"varint,4,opt,name=index_updates,json=indexUpdates" json:"index_updates,omitempty"` +} + +func (m *CommitResponse) Reset() { *m = CommitResponse{} } +func (m *CommitResponse) String() string { return proto.CompactTextString(m) } +func (*CommitResponse) ProtoMessage() {} +func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *CommitResponse) GetMutationResults() []*MutationResult { + if m != nil { + return m.MutationResults + } + return nil +} + +func (m *CommitResponse) GetIndexUpdates() int32 { + if m != nil { + return m.IndexUpdates + } + return 0 +} + +// The request for [Datastore.AllocateIds][google.datastore.v1beta3.Datastore.AllocateIds]. +type AllocateIdsRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // A list of keys with incomplete key paths for which to allocate IDs. + // No key may be reserved/read-only. + Keys []*Key `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` +} + +func (m *AllocateIdsRequest) Reset() { *m = AllocateIdsRequest{} } +func (m *AllocateIdsRequest) String() string { return proto.CompactTextString(m) } +func (*AllocateIdsRequest) ProtoMessage() {} +func (*AllocateIdsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *AllocateIdsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *AllocateIdsRequest) GetKeys() []*Key { + if m != nil { + return m.Keys + } + return nil +} + +// The response for [Datastore.AllocateIds][google.datastore.v1beta3.Datastore.AllocateIds]. +type AllocateIdsResponse struct { + // The keys specified in the request (in the same order), each with + // its key path completed with a newly allocated ID. + Keys []*Key `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` +} + +func (m *AllocateIdsResponse) Reset() { *m = AllocateIdsResponse{} } +func (m *AllocateIdsResponse) String() string { return proto.CompactTextString(m) } +func (*AllocateIdsResponse) ProtoMessage() {} +func (*AllocateIdsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *AllocateIdsResponse) GetKeys() []*Key { + if m != nil { + return m.Keys + } + return nil +} + +// A mutation to apply to an entity. +type Mutation struct { + // The mutation operation. + // + // For `insert`, `update`, and `upsert`: + // - The entity's key must not be reserved/read-only. + // - No property in the entity may have a reserved name, + // not even a property in an entity in a value. + // - No value in the entity may have meaning 18, + // not even a value in an entity in another value. + // + // Types that are valid to be assigned to Operation: + // *Mutation_Insert + // *Mutation_Update + // *Mutation_Upsert + // *Mutation_Delete + Operation isMutation_Operation `protobuf_oneof:"operation"` + // When set, the server will detect whether or not this mutation conflicts + // with the current version of the entity on the server. Conflicting mutations + // are not applied, and are marked as such in MutationResult. + // + // Types that are valid to be assigned to ConflictDetectionStrategy: + // *Mutation_BaseVersion + ConflictDetectionStrategy isMutation_ConflictDetectionStrategy `protobuf_oneof:"conflict_detection_strategy"` +} + +func (m *Mutation) Reset() { *m = Mutation{} } +func (m *Mutation) String() string { return proto.CompactTextString(m) } +func (*Mutation) ProtoMessage() {} +func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +type isMutation_Operation interface { + isMutation_Operation() +} +type isMutation_ConflictDetectionStrategy interface { + isMutation_ConflictDetectionStrategy() +} + +type Mutation_Insert struct { + Insert *Entity `protobuf:"bytes,4,opt,name=insert,oneof"` +} +type Mutation_Update struct { + Update *Entity `protobuf:"bytes,5,opt,name=update,oneof"` +} +type Mutation_Upsert struct { + Upsert *Entity `protobuf:"bytes,6,opt,name=upsert,oneof"` +} +type Mutation_Delete struct { + Delete *Key `protobuf:"bytes,7,opt,name=delete,oneof"` +} +type Mutation_BaseVersion struct { + BaseVersion int64 `protobuf:"varint,8,opt,name=base_version,json=baseVersion,oneof"` +} + +func (*Mutation_Insert) isMutation_Operation() {} +func (*Mutation_Update) isMutation_Operation() {} +func (*Mutation_Upsert) isMutation_Operation() {} +func (*Mutation_Delete) isMutation_Operation() {} +func (*Mutation_BaseVersion) isMutation_ConflictDetectionStrategy() {} + +func (m *Mutation) GetOperation() isMutation_Operation { + if m != nil { + return m.Operation + } + return nil +} +func (m *Mutation) GetConflictDetectionStrategy() isMutation_ConflictDetectionStrategy { + if m != nil { + return m.ConflictDetectionStrategy + } + return nil +} + +func (m *Mutation) GetInsert() *Entity { + if x, ok := m.GetOperation().(*Mutation_Insert); ok { + return x.Insert + } + return nil +} + +func (m *Mutation) GetUpdate() *Entity { + if x, ok := m.GetOperation().(*Mutation_Update); ok { + return x.Update + } + return nil +} + +func (m *Mutation) GetUpsert() *Entity { + if x, ok := m.GetOperation().(*Mutation_Upsert); ok { + return x.Upsert + } + return nil +} + +func (m *Mutation) GetDelete() *Key { + if x, ok := m.GetOperation().(*Mutation_Delete); ok { + return x.Delete + } + return nil +} + +func (m *Mutation) GetBaseVersion() int64 { + if x, ok := m.GetConflictDetectionStrategy().(*Mutation_BaseVersion); ok { + return x.BaseVersion + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Mutation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Mutation_OneofMarshaler, _Mutation_OneofUnmarshaler, _Mutation_OneofSizer, []interface{}{ + (*Mutation_Insert)(nil), + (*Mutation_Update)(nil), + (*Mutation_Upsert)(nil), + (*Mutation_Delete)(nil), + (*Mutation_BaseVersion)(nil), + } +} + +func _Mutation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Mutation) + // operation + switch x := m.Operation.(type) { + case *Mutation_Insert: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Insert); err != nil { + return err + } + case *Mutation_Update: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Update); err != nil { + return err + } + case *Mutation_Upsert: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Upsert); err != nil { + return err + } + case *Mutation_Delete: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Delete); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Mutation.Operation has unexpected type %T", x) + } + // conflict_detection_strategy + switch x := m.ConflictDetectionStrategy.(type) { + case *Mutation_BaseVersion: + b.EncodeVarint(8<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.BaseVersion)) + case nil: + default: + return fmt.Errorf("Mutation.ConflictDetectionStrategy has unexpected type %T", x) + } + return nil +} + +func _Mutation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Mutation) + switch tag { + case 4: // operation.insert + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Entity) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Insert{msg} + return true, err + case 5: // operation.update + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Entity) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Update{msg} + return true, err + case 6: // operation.upsert + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Entity) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Upsert{msg} + return true, err + case 7: // operation.delete + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Key) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Delete{msg} + return true, err + case 8: // conflict_detection_strategy.base_version + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ConflictDetectionStrategy = &Mutation_BaseVersion{int64(x)} + return true, err + default: + return false, nil + } +} + +func _Mutation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Mutation) + // operation + switch x := m.Operation.(type) { + case *Mutation_Insert: + s := proto.Size(x.Insert) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Update: + s := proto.Size(x.Update) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Upsert: + s := proto.Size(x.Upsert) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Delete: + s := proto.Size(x.Delete) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // conflict_detection_strategy + switch x := m.ConflictDetectionStrategy.(type) { + case *Mutation_BaseVersion: + n += proto.SizeVarint(8<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.BaseVersion)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The result of applying a mutation. +type MutationResult struct { + // The automatically allocated key. + // Set only when the mutation allocated a key. + Key *Key `protobuf:"bytes,3,opt,name=key" json:"key,omitempty"` + // The version of the entity on the server after processing the mutation. If + // the mutation doesn't change anything on the server, then the version will + // be the version of the current entity or, if no entity is present, a version + // that is strictly greater than the version of any previous entity and less + // than the version of any possible future entity. + Version int64 `protobuf:"varint,4,opt,name=version" json:"version,omitempty"` + // Whether a conflict was detected for this mutation. Always false when a + // conflict detection strategy field is not set in the mutation. + ConflictDetected bool `protobuf:"varint,5,opt,name=conflict_detected,json=conflictDetected" json:"conflict_detected,omitempty"` +} + +func (m *MutationResult) Reset() { *m = MutationResult{} } +func (m *MutationResult) String() string { return proto.CompactTextString(m) } +func (*MutationResult) ProtoMessage() {} +func (*MutationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *MutationResult) GetKey() *Key { + if m != nil { + return m.Key + } + return nil +} + +func (m *MutationResult) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *MutationResult) GetConflictDetected() bool { + if m != nil { + return m.ConflictDetected + } + return false +} + +// The options shared by read requests. +type ReadOptions struct { + // If not specified, lookups and ancestor queries default to + // `read_consistency`=`STRONG`, global queries default to + // `read_consistency`=`EVENTUAL`. + // + // Types that are valid to be assigned to ConsistencyType: + // *ReadOptions_ReadConsistency_ + // *ReadOptions_Transaction + ConsistencyType isReadOptions_ConsistencyType `protobuf_oneof:"consistency_type"` +} + +func (m *ReadOptions) Reset() { *m = ReadOptions{} } +func (m *ReadOptions) String() string { return proto.CompactTextString(m) } +func (*ReadOptions) ProtoMessage() {} +func (*ReadOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +type isReadOptions_ConsistencyType interface { + isReadOptions_ConsistencyType() +} + +type ReadOptions_ReadConsistency_ struct { + ReadConsistency ReadOptions_ReadConsistency `protobuf:"varint,1,opt,name=read_consistency,json=readConsistency,enum=google.datastore.v1beta3.ReadOptions_ReadConsistency,oneof"` +} +type ReadOptions_Transaction struct { + Transaction []byte `protobuf:"bytes,2,opt,name=transaction,proto3,oneof"` +} + +func (*ReadOptions_ReadConsistency_) isReadOptions_ConsistencyType() {} +func (*ReadOptions_Transaction) isReadOptions_ConsistencyType() {} + +func (m *ReadOptions) GetConsistencyType() isReadOptions_ConsistencyType { + if m != nil { + return m.ConsistencyType + } + return nil +} + +func (m *ReadOptions) GetReadConsistency() ReadOptions_ReadConsistency { + if x, ok := m.GetConsistencyType().(*ReadOptions_ReadConsistency_); ok { + return x.ReadConsistency + } + return ReadOptions_READ_CONSISTENCY_UNSPECIFIED +} + +func (m *ReadOptions) GetTransaction() []byte { + if x, ok := m.GetConsistencyType().(*ReadOptions_Transaction); ok { + return x.Transaction + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ReadOptions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ReadOptions_OneofMarshaler, _ReadOptions_OneofUnmarshaler, _ReadOptions_OneofSizer, []interface{}{ + (*ReadOptions_ReadConsistency_)(nil), + (*ReadOptions_Transaction)(nil), + } +} + +func _ReadOptions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ReadOptions) + // consistency_type + switch x := m.ConsistencyType.(type) { + case *ReadOptions_ReadConsistency_: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.ReadConsistency)) + case *ReadOptions_Transaction: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Transaction) + case nil: + default: + return fmt.Errorf("ReadOptions.ConsistencyType has unexpected type %T", x) + } + return nil +} + +func _ReadOptions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ReadOptions) + switch tag { + case 1: // consistency_type.read_consistency + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ConsistencyType = &ReadOptions_ReadConsistency_{ReadOptions_ReadConsistency(x)} + return true, err + case 2: // consistency_type.transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ConsistencyType = &ReadOptions_Transaction{x} + return true, err + default: + return false, nil + } +} + +func _ReadOptions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ReadOptions) + // consistency_type + switch x := m.ConsistencyType.(type) { + case *ReadOptions_ReadConsistency_: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.ReadConsistency)) + case *ReadOptions_Transaction: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Transaction))) + n += len(x.Transaction) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*LookupRequest)(nil), "google.datastore.v1beta3.LookupRequest") + proto.RegisterType((*LookupResponse)(nil), "google.datastore.v1beta3.LookupResponse") + proto.RegisterType((*RunQueryRequest)(nil), "google.datastore.v1beta3.RunQueryRequest") + proto.RegisterType((*RunQueryResponse)(nil), "google.datastore.v1beta3.RunQueryResponse") + proto.RegisterType((*BeginTransactionRequest)(nil), "google.datastore.v1beta3.BeginTransactionRequest") + proto.RegisterType((*BeginTransactionResponse)(nil), "google.datastore.v1beta3.BeginTransactionResponse") + proto.RegisterType((*RollbackRequest)(nil), "google.datastore.v1beta3.RollbackRequest") + proto.RegisterType((*RollbackResponse)(nil), "google.datastore.v1beta3.RollbackResponse") + proto.RegisterType((*CommitRequest)(nil), "google.datastore.v1beta3.CommitRequest") + proto.RegisterType((*CommitResponse)(nil), "google.datastore.v1beta3.CommitResponse") + proto.RegisterType((*AllocateIdsRequest)(nil), "google.datastore.v1beta3.AllocateIdsRequest") + proto.RegisterType((*AllocateIdsResponse)(nil), "google.datastore.v1beta3.AllocateIdsResponse") + proto.RegisterType((*Mutation)(nil), "google.datastore.v1beta3.Mutation") + proto.RegisterType((*MutationResult)(nil), "google.datastore.v1beta3.MutationResult") + proto.RegisterType((*ReadOptions)(nil), "google.datastore.v1beta3.ReadOptions") + proto.RegisterEnum("google.datastore.v1beta3.CommitRequest_Mode", CommitRequest_Mode_name, CommitRequest_Mode_value) + proto.RegisterEnum("google.datastore.v1beta3.ReadOptions_ReadConsistency", ReadOptions_ReadConsistency_name, ReadOptions_ReadConsistency_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Datastore service + +type DatastoreClient interface { + // Looks up entities by key. + Lookup(ctx context.Context, in *LookupRequest, opts ...grpc.CallOption) (*LookupResponse, error) + // Queries for entities. + RunQuery(ctx context.Context, in *RunQueryRequest, opts ...grpc.CallOption) (*RunQueryResponse, error) + // Begins a new transaction. + BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*BeginTransactionResponse, error) + // Commits a transaction, optionally creating, deleting or modifying some + // entities. + Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) + // Rolls back a transaction. + Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*RollbackResponse, error) + // Allocates IDs for the given keys, which is useful for referencing an entity + // before it is inserted. + AllocateIds(ctx context.Context, in *AllocateIdsRequest, opts ...grpc.CallOption) (*AllocateIdsResponse, error) +} + +type datastoreClient struct { + cc *grpc.ClientConn +} + +func NewDatastoreClient(cc *grpc.ClientConn) DatastoreClient { + return &datastoreClient{cc} +} + +func (c *datastoreClient) Lookup(ctx context.Context, in *LookupRequest, opts ...grpc.CallOption) (*LookupResponse, error) { + out := new(LookupResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1beta3.Datastore/Lookup", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) RunQuery(ctx context.Context, in *RunQueryRequest, opts ...grpc.CallOption) (*RunQueryResponse, error) { + out := new(RunQueryResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1beta3.Datastore/RunQuery", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*BeginTransactionResponse, error) { + out := new(BeginTransactionResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1beta3.Datastore/BeginTransaction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) { + out := new(CommitResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1beta3.Datastore/Commit", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*RollbackResponse, error) { + out := new(RollbackResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1beta3.Datastore/Rollback", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreClient) AllocateIds(ctx context.Context, in *AllocateIdsRequest, opts ...grpc.CallOption) (*AllocateIdsResponse, error) { + out := new(AllocateIdsResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1beta3.Datastore/AllocateIds", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Datastore service + +type DatastoreServer interface { + // Looks up entities by key. + Lookup(context.Context, *LookupRequest) (*LookupResponse, error) + // Queries for entities. + RunQuery(context.Context, *RunQueryRequest) (*RunQueryResponse, error) + // Begins a new transaction. + BeginTransaction(context.Context, *BeginTransactionRequest) (*BeginTransactionResponse, error) + // Commits a transaction, optionally creating, deleting or modifying some + // entities. + Commit(context.Context, *CommitRequest) (*CommitResponse, error) + // Rolls back a transaction. + Rollback(context.Context, *RollbackRequest) (*RollbackResponse, error) + // Allocates IDs for the given keys, which is useful for referencing an entity + // before it is inserted. + AllocateIds(context.Context, *AllocateIdsRequest) (*AllocateIdsResponse, error) +} + +func RegisterDatastoreServer(s *grpc.Server, srv DatastoreServer) { + s.RegisterService(&_Datastore_serviceDesc, srv) +} + +func _Datastore_Lookup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LookupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).Lookup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1beta3.Datastore/Lookup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).Lookup(ctx, req.(*LookupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_RunQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RunQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).RunQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1beta3.Datastore/RunQuery", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).RunQuery(ctx, req.(*RunQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_BeginTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BeginTransactionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).BeginTransaction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1beta3.Datastore/BeginTransaction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).BeginTransaction(ctx, req.(*BeginTransactionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CommitRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).Commit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1beta3.Datastore/Commit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).Commit(ctx, req.(*CommitRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_Rollback_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RollbackRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).Rollback(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1beta3.Datastore/Rollback", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).Rollback(ctx, req.(*RollbackRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datastore_AllocateIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AllocateIdsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).AllocateIds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1beta3.Datastore/AllocateIds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).AllocateIds(ctx, req.(*AllocateIdsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Datastore_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.datastore.v1beta3.Datastore", + HandlerType: (*DatastoreServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Lookup", + Handler: _Datastore_Lookup_Handler, + }, + { + MethodName: "RunQuery", + Handler: _Datastore_RunQuery_Handler, + }, + { + MethodName: "BeginTransaction", + Handler: _Datastore_BeginTransaction_Handler, + }, + { + MethodName: "Commit", + Handler: _Datastore_Commit_Handler, + }, + { + MethodName: "Rollback", + Handler: _Datastore_Rollback_Handler, + }, + { + MethodName: "AllocateIds", + Handler: _Datastore_AllocateIds_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/datastore/v1beta3/datastore.proto", +} + +func init() { proto.RegisterFile("google/datastore/v1beta3/datastore.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1218 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x72, 0xdb, 0xd4, + 0x17, 0xce, 0x75, 0x12, 0xc7, 0x39, 0xce, 0x1f, 0xf7, 0xfe, 0xfa, 0x03, 0x4d, 0x68, 0xc1, 0xa3, + 0x52, 0x6a, 0x42, 0xb1, 0x89, 0x4b, 0xa7, 0x10, 0xba, 0x88, 0xed, 0xb8, 0xb5, 0x87, 0xc6, 0x09, + 0xd7, 0x6e, 0x67, 0x60, 0xa3, 0x91, 0xa5, 0x1b, 0x23, 0x22, 0xeb, 0x2a, 0xd2, 0x75, 0x07, 0x0f, + 0xc3, 0x86, 0x15, 0x03, 0xc3, 0x0a, 0x78, 0x00, 0xb6, 0xb0, 0x06, 0x5e, 0x81, 0x19, 0x66, 0xd8, + 0xf0, 0x0a, 0x3c, 0x04, 0x4b, 0x46, 0x57, 0x57, 0x76, 0xe4, 0x56, 0xb6, 0xc2, 0xb0, 0xb3, 0x8e, + 0xbf, 0xef, 0x9c, 0xef, 0x9c, 0x73, 0x75, 0xce, 0x15, 0x94, 0x06, 0x8c, 0x0d, 0x6c, 0x5a, 0x31, + 0x75, 0xae, 0xfb, 0x9c, 0x79, 0xb4, 0xf2, 0x74, 0xaf, 0x4f, 0xb9, 0x7e, 0x67, 0x6a, 0x29, 0xbb, + 0x1e, 0xe3, 0x0c, 0x2b, 0x21, 0xb2, 0x3c, 0xb5, 0x4b, 0xe4, 0xce, 0x35, 0xe9, 0x43, 0x77, 0xad, + 0x8a, 0xee, 0x38, 0x8c, 0xeb, 0xdc, 0x62, 0x8e, 0x1f, 0xf2, 0x76, 0x6e, 0x26, 0x46, 0xa0, 0x0e, + 0xb7, 0xf8, 0x58, 0xc2, 0x5e, 0x4d, 0x84, 0x9d, 0x8f, 0xa8, 0x27, 0x51, 0xea, 0x4f, 0x08, 0x36, + 0x1f, 0x31, 0x76, 0x36, 0x72, 0x09, 0x3d, 0x1f, 0x51, 0x9f, 0xe3, 0xeb, 0x00, 0xae, 0xc7, 0x3e, + 0xa1, 0x06, 0xd7, 0x2c, 0x53, 0xc9, 0x15, 0x51, 0x69, 0x9d, 0xac, 0x4b, 0x4b, 0xdb, 0xc4, 0x2d, + 0xd8, 0xf0, 0xa8, 0x6e, 0x6a, 0xcc, 0x15, 0x9a, 0x14, 0x54, 0x44, 0xa5, 0x7c, 0xf5, 0x66, 0x39, + 0x29, 0x99, 0x32, 0xa1, 0xba, 0x79, 0x1c, 0x82, 0x49, 0xde, 0x9b, 0x3e, 0xe0, 0x3d, 0x58, 0x39, + 0xa3, 0x63, 0x5f, 0x59, 0x2e, 0x2e, 0x97, 0xf2, 0xd5, 0xeb, 0xc9, 0x1e, 0xde, 0xa7, 0x63, 0x22, + 0xa0, 0xea, 0xef, 0x08, 0xb6, 0x22, 0xb5, 0xbe, 0xcb, 0x1c, 0x9f, 0xe2, 0xfb, 0xb0, 0x7a, 0xca, + 0x46, 0x8e, 0xa9, 0x20, 0xe1, 0xe6, 0xb5, 0x64, 0x37, 0x4d, 0x51, 0x1d, 0x42, 0xfd, 0x91, 0xcd, + 0x49, 0x48, 0xc2, 0x07, 0xb0, 0x36, 0xb4, 0x7c, 0xdf, 0x72, 0x06, 0x4a, 0xe6, 0x52, 0xfc, 0x88, + 0x86, 0xdf, 0x85, 0x9c, 0x49, 0x4f, 0xa9, 0xe7, 0x51, 0x33, 0x5d, 0x26, 0x13, 0xb8, 0xfa, 0x47, + 0x06, 0xb6, 0xc9, 0xc8, 0xf9, 0x20, 0x68, 0x47, 0xfa, 0xea, 0xbb, 0xba, 0xc7, 0xad, 0xa0, 0x82, + 0x01, 0x20, 0xb3, 0xa8, 0xfa, 0x27, 0x11, 0xba, 0x6d, 0x92, 0xbc, 0x3b, 0x7d, 0xf8, 0x0f, 0xfb, + 0x78, 0x0f, 0x56, 0xc5, 0x89, 0x52, 0x96, 0x85, 0x8b, 0x57, 0x92, 0x5d, 0x88, 0x4c, 0x5b, 0x4b, + 0x24, 0xc4, 0xe3, 0x1a, 0xac, 0x0f, 0xce, 0x6d, 0x2d, 0x24, 0xaf, 0x09, 0xb2, 0x9a, 0x4c, 0x7e, + 0x78, 0x6e, 0x47, 0xfc, 0xdc, 0x40, 0xfe, 0xae, 0x6f, 0x00, 0x08, 0xba, 0xc6, 0xc7, 0x2e, 0x55, + 0xbf, 0x46, 0x50, 0x98, 0x16, 0x54, 0x1e, 0x90, 0x03, 0x58, 0xed, 0xeb, 0xdc, 0xf8, 0x58, 0x66, + 0xb8, 0xbb, 0x40, 0x5e, 0xd8, 0xdf, 0x7a, 0xc0, 0x20, 0x21, 0x11, 0xdf, 0x8d, 0x12, 0xcc, 0xa4, + 0x4a, 0x50, 0xa6, 0xa7, 0xbe, 0x03, 0x2f, 0xd6, 0xe9, 0xc0, 0x72, 0x7a, 0x9e, 0xee, 0xf8, 0xba, + 0x11, 0x14, 0x2b, 0x5d, 0x97, 0xd5, 0xfb, 0xa0, 0x3c, 0xcb, 0x94, 0xe9, 0x14, 0x21, 0xcf, 0xa7, + 0x66, 0x91, 0xd4, 0x06, 0xb9, 0x68, 0x52, 0x09, 0x6c, 0x13, 0x66, 0xdb, 0x7d, 0xdd, 0x38, 0x4b, + 0x79, 0xaa, 0x16, 0xfb, 0xc4, 0x50, 0x98, 0xfa, 0x0c, 0x95, 0xa8, 0xbf, 0x64, 0x60, 0xb3, 0xc1, + 0x86, 0x43, 0x8b, 0xa7, 0x0c, 0x73, 0x00, 0x2b, 0x43, 0x66, 0x52, 0x65, 0xb5, 0x88, 0x4a, 0x5b, + 0xd5, 0xdb, 0xc9, 0x65, 0x8c, 0x79, 0x2d, 0x1f, 0x31, 0x93, 0x12, 0xc1, 0xc4, 0xea, 0x73, 0x84, + 0xb6, 0x96, 0x62, 0x52, 0xf1, 0x01, 0xac, 0x0f, 0x47, 0x72, 0x62, 0x2a, 0x59, 0xf1, 0x46, 0xce, + 0x39, 0x55, 0x47, 0x12, 0x4a, 0xa6, 0x24, 0xf5, 0x01, 0xac, 0x04, 0x31, 0xf1, 0x55, 0x28, 0x1c, + 0x1d, 0x1f, 0x36, 0xb5, 0xc7, 0x9d, 0xee, 0x49, 0xb3, 0xd1, 0x7e, 0xd0, 0x6e, 0x1e, 0x16, 0x96, + 0xf0, 0x15, 0xd8, 0xec, 0x91, 0x5a, 0xa7, 0x5b, 0x6b, 0xf4, 0xda, 0xc7, 0x9d, 0xda, 0xa3, 0x02, + 0xc2, 0xff, 0x87, 0x2b, 0x9d, 0xe3, 0x8e, 0x16, 0x37, 0x67, 0xea, 0x2f, 0xc0, 0xd5, 0x0b, 0xc2, + 0x34, 0x9f, 0xda, 0xd4, 0xe0, 0xcc, 0x53, 0xbf, 0x42, 0xb0, 0x15, 0xa5, 0x28, 0xbb, 0xda, 0x85, + 0x42, 0x14, 0x5f, 0xf3, 0xc4, 0x09, 0x8c, 0xe6, 0x62, 0x29, 0x85, 0xf6, 0x70, 0x24, 0x6d, 0x0f, + 0x63, 0xcf, 0x3e, 0xbe, 0x01, 0x9b, 0x96, 0x63, 0xd2, 0x4f, 0xb5, 0x91, 0x6b, 0xea, 0x9c, 0xfa, + 0xca, 0x4a, 0x11, 0x95, 0x56, 0xc9, 0x86, 0x30, 0x3e, 0x0e, 0x6d, 0xea, 0x29, 0xe0, 0x9a, 0x6d, + 0x33, 0x43, 0xe7, 0xb4, 0x6d, 0xfa, 0x29, 0x3b, 0x19, 0x8d, 0x6e, 0x94, 0x7e, 0x74, 0xb7, 0xe0, + 0x7f, 0xb1, 0x38, 0x32, 0xf1, 0x7f, 0xe1, 0xe9, 0xb7, 0x0c, 0xe4, 0xa2, 0xd4, 0xf1, 0x3e, 0x64, + 0x2d, 0xc7, 0xa7, 0x1e, 0x17, 0xc9, 0xe5, 0xab, 0xc5, 0x45, 0xf3, 0xbb, 0xb5, 0x44, 0x24, 0x23, + 0xe0, 0x86, 0x95, 0x11, 0x27, 0x32, 0x25, 0x37, 0x64, 0x84, 0x5c, 0x11, 0x37, 0x7b, 0x19, 0xae, + 0x88, 0x7b, 0x0f, 0xb2, 0x26, 0xb5, 0x29, 0xa7, 0x72, 0xe8, 0xcd, 0xcf, 0x3a, 0x20, 0x86, 0x70, + 0x7c, 0x03, 0x36, 0xfa, 0xba, 0x4f, 0xb5, 0xa7, 0xd4, 0xf3, 0x83, 0xf3, 0x1f, 0xf4, 0x65, 0xb9, + 0x85, 0x48, 0x3e, 0xb0, 0x3e, 0x09, 0x8d, 0xf5, 0x3c, 0xac, 0x33, 0x97, 0x7a, 0xa2, 0x3c, 0xf5, + 0xeb, 0xf0, 0x92, 0xc1, 0x9c, 0x53, 0xdb, 0x32, 0xb8, 0x66, 0x52, 0x4e, 0xe5, 0x49, 0xe4, 0x9e, + 0xce, 0xe9, 0x60, 0xac, 0x7e, 0x89, 0x60, 0x2b, 0x7e, 0x8a, 0x70, 0x05, 0x96, 0xcf, 0x68, 0x34, + 0xcb, 0x17, 0xf4, 0x23, 0x40, 0x62, 0x05, 0xd6, 0x22, 0x3d, 0x41, 0x0b, 0x96, 0x49, 0xf4, 0x88, + 0xdf, 0x80, 0x2b, 0x33, 0xc1, 0xa9, 0x29, 0x4a, 0x9d, 0x23, 0x85, 0xe8, 0x8f, 0x43, 0x69, 0x57, + 0xff, 0x46, 0x90, 0xbf, 0xb0, 0x62, 0x70, 0x1f, 0x0a, 0x62, 0x3f, 0x19, 0xcc, 0xf1, 0x2d, 0x9f, + 0x53, 0xc7, 0x18, 0x8b, 0xf7, 0x7d, 0xab, 0x7a, 0x37, 0xd5, 0x8e, 0x12, 0xbf, 0x1b, 0x53, 0x72, + 0x6b, 0x89, 0x6c, 0x7b, 0x71, 0xd3, 0xec, 0x38, 0xc9, 0x3c, 0x67, 0x9c, 0xa8, 0x47, 0xb0, 0x3d, + 0xe3, 0x09, 0x17, 0xe1, 0x1a, 0x69, 0xd6, 0x0e, 0xb5, 0xc6, 0x71, 0xa7, 0xdb, 0xee, 0xf6, 0x9a, + 0x9d, 0xc6, 0x87, 0x33, 0x33, 0x02, 0x20, 0xdb, 0xed, 0x91, 0xe3, 0xce, 0xc3, 0x02, 0xc2, 0x1b, + 0x90, 0x6b, 0x3e, 0x69, 0x76, 0x7a, 0x8f, 0xc5, 0x4c, 0xc0, 0x50, 0xb8, 0x90, 0x91, 0x58, 0x5b, + 0xd5, 0x5f, 0xd7, 0x60, 0xfd, 0x30, 0xca, 0x05, 0x7f, 0x83, 0x20, 0x1b, 0xde, 0x71, 0xf0, 0xad, + 0xe4, 0x4c, 0x63, 0x77, 0xb6, 0x9d, 0xd2, 0x62, 0xa0, 0x1c, 0xda, 0x6f, 0x7d, 0xf1, 0xe7, 0x5f, + 0xdf, 0x66, 0x76, 0xd5, 0x9b, 0x93, 0xdb, 0xa0, 0x7c, 0xab, 0xfd, 0xca, 0x67, 0xd3, 0x37, 0xfe, + 0xf3, 0x7d, 0x5b, 0xd0, 0xf6, 0xd1, 0x2e, 0xfe, 0x1e, 0x41, 0x2e, 0x5a, 0xaa, 0xf8, 0xf5, 0x39, + 0xb5, 0x8f, 0xdf, 0x64, 0x76, 0x76, 0xd3, 0x40, 0xa5, 0xaa, 0xaa, 0x50, 0x75, 0x5b, 0xbd, 0xb5, + 0x40, 0x95, 0x27, 0x89, 0x81, 0xae, 0x9f, 0x11, 0x14, 0x66, 0xb7, 0x24, 0xde, 0x4b, 0x0e, 0x9a, + 0xb0, 0x8b, 0x77, 0xaa, 0x97, 0xa1, 0x48, 0xbd, 0xfb, 0x42, 0xef, 0xdb, 0x6a, 0x65, 0x81, 0xde, + 0xfe, 0x8c, 0x83, 0x40, 0x77, 0xd0, 0xdf, 0x70, 0xfa, 0xcf, 0xeb, 0x6f, 0x6c, 0x05, 0xce, 0xeb, + 0x6f, 0x7c, 0x91, 0xa4, 0xee, 0xaf, 0x21, 0x68, 0x93, 0xfe, 0xca, 0xdd, 0x3e, 0xb7, 0xbf, 0xf1, + 0x3b, 0xc5, 0xdc, 0xfe, 0xce, 0x5e, 0x15, 0x52, 0xf7, 0x57, 0x12, 0x03, 0x5d, 0x3f, 0x20, 0xc8, + 0x5f, 0xd8, 0x18, 0x78, 0xce, 0x7d, 0xe1, 0xd9, 0x05, 0xb6, 0xf3, 0x66, 0x4a, 0xb4, 0x14, 0x78, + 0x57, 0x08, 0xac, 0xa8, 0xbb, 0x0b, 0x04, 0xea, 0x53, 0xee, 0x3e, 0xda, 0xad, 0x7f, 0x87, 0xe0, + 0x9a, 0xc1, 0x86, 0x89, 0xb1, 0xea, 0x5b, 0x93, 0xf7, 0xfa, 0x24, 0xf8, 0xdc, 0x3a, 0x41, 0x1f, + 0xd5, 0x24, 0x76, 0xc0, 0x6c, 0xdd, 0x19, 0x94, 0x99, 0x37, 0xa8, 0x0c, 0xa8, 0x23, 0x3e, 0xc6, + 0x2a, 0xe1, 0x5f, 0xba, 0x6b, 0xf9, 0xcf, 0x7e, 0xb5, 0xbd, 0x37, 0xb1, 0xfc, 0x98, 0x79, 0xf9, + 0x61, 0xe8, 0xa3, 0x61, 0xb3, 0x91, 0x59, 0x9e, 0x84, 0x28, 0x3f, 0xd9, 0xab, 0x07, 0xd0, 0x7e, + 0x56, 0xb8, 0xbb, 0xf3, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x31, 0x6a, 0x10, 0x8c, 0x0e, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/entity.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/entity.pb.go new file mode 100644 index 0000000..005156b --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/entity.pb.go @@ -0,0 +1,764 @@ +// Code generated by protoc-gen-go. +// source: google/datastore/v1beta3/entity.proto +// DO NOT EDIT! + +package datastore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" +import google_type "google.golang.org/genproto/googleapis/type/latlng" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A partition ID identifies a grouping of entities. The grouping is always +// by project and namespace, however the namespace ID may be empty. +// +// A partition ID contains several dimensions: +// project ID and namespace ID. +// +// Partition dimensions: +// +// - May be `""`. +// - Must be valid UTF-8 bytes. +// - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}` +// If the value of any dimension matches regex `__.*__`, the partition is +// reserved/read-only. +// A reserved/read-only partition ID is forbidden in certain documented +// contexts. +// +// Foreign partition IDs (in which the project ID does +// not match the context project ID ) are discouraged. +// Reads and writes of foreign partition IDs may fail if the project is not in an active state. +type PartitionId struct { + // The ID of the project to which the entities belong. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // If not empty, the ID of the namespace to which the entities belong. + NamespaceId string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceId" json:"namespace_id,omitempty"` +} + +func (m *PartitionId) Reset() { *m = PartitionId{} } +func (m *PartitionId) String() string { return proto.CompactTextString(m) } +func (*PartitionId) ProtoMessage() {} +func (*PartitionId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *PartitionId) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *PartitionId) GetNamespaceId() string { + if m != nil { + return m.NamespaceId + } + return "" +} + +// A unique identifier for an entity. +// If a key's partition ID or any of its path kinds or names are +// reserved/read-only, the key is reserved/read-only. +// A reserved/read-only key is forbidden in certain documented contexts. +type Key struct { + // Entities are partitioned into subsets, currently identified by a project + // ID and namespace ID. + // Queries are scoped to a single partition. + PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The entity path. + // An entity path consists of one or more elements composed of a kind and a + // string or numerical identifier, which identify entities. The first + // element identifies a _root entity_, the second element identifies + // a _child_ of the root entity, the third element identifies a child of the + // second entity, and so forth. The entities identified by all prefixes of + // the path are called the element's _ancestors_. + // + // An entity path is always fully complete: *all* of the entity's ancestors + // are required to be in the path along with the entity identifier itself. + // The only exception is that in some documented cases, the identifier in the + // last path element (for the entity) itself may be omitted. For example, + // the last path element of the key of `Mutation.insert` may have no + // identifier. + // + // A path can never be empty, and a path can have at most 100 elements. + Path []*Key_PathElement `protobuf:"bytes,2,rep,name=path" json:"path,omitempty"` +} + +func (m *Key) Reset() { *m = Key{} } +func (m *Key) String() string { return proto.CompactTextString(m) } +func (*Key) ProtoMessage() {} +func (*Key) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *Key) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *Key) GetPath() []*Key_PathElement { + if m != nil { + return m.Path + } + return nil +} + +// A (kind, ID/name) pair used to construct a key path. +// +// If either name or ID is set, the element is complete. +// If neither is set, the element is incomplete. +type Key_PathElement struct { + // The kind of the entity. + // A kind matching regex `__.*__` is reserved/read-only. + // A kind must not contain more than 1500 bytes when UTF-8 encoded. + // Cannot be `""`. + Kind string `protobuf:"bytes,1,opt,name=kind" json:"kind,omitempty"` + // The type of ID. + // + // Types that are valid to be assigned to IdType: + // *Key_PathElement_Id + // *Key_PathElement_Name + IdType isKey_PathElement_IdType `protobuf_oneof:"id_type"` +} + +func (m *Key_PathElement) Reset() { *m = Key_PathElement{} } +func (m *Key_PathElement) String() string { return proto.CompactTextString(m) } +func (*Key_PathElement) ProtoMessage() {} +func (*Key_PathElement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +type isKey_PathElement_IdType interface { + isKey_PathElement_IdType() +} + +type Key_PathElement_Id struct { + Id int64 `protobuf:"varint,2,opt,name=id,oneof"` +} +type Key_PathElement_Name struct { + Name string `protobuf:"bytes,3,opt,name=name,oneof"` +} + +func (*Key_PathElement_Id) isKey_PathElement_IdType() {} +func (*Key_PathElement_Name) isKey_PathElement_IdType() {} + +func (m *Key_PathElement) GetIdType() isKey_PathElement_IdType { + if m != nil { + return m.IdType + } + return nil +} + +func (m *Key_PathElement) GetKind() string { + if m != nil { + return m.Kind + } + return "" +} + +func (m *Key_PathElement) GetId() int64 { + if x, ok := m.GetIdType().(*Key_PathElement_Id); ok { + return x.Id + } + return 0 +} + +func (m *Key_PathElement) GetName() string { + if x, ok := m.GetIdType().(*Key_PathElement_Name); ok { + return x.Name + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Key_PathElement) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Key_PathElement_OneofMarshaler, _Key_PathElement_OneofUnmarshaler, _Key_PathElement_OneofSizer, []interface{}{ + (*Key_PathElement_Id)(nil), + (*Key_PathElement_Name)(nil), + } +} + +func _Key_PathElement_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Name) + case nil: + default: + return fmt.Errorf("Key_PathElement.IdType has unexpected type %T", x) + } + return nil +} + +func _Key_PathElement_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Key_PathElement) + switch tag { + case 2: // id_type.id + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.IdType = &Key_PathElement_Id{int64(x)} + return true, err + case 3: // id_type.name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.IdType = &Key_PathElement_Name{x} + return true, err + default: + return false, nil + } +} + +func _Key_PathElement_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Name))) + n += len(x.Name) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// An array value. +type ArrayValue struct { + // Values in the array. + // The order of this array may not be preserved if it contains a mix of + // indexed and unindexed values. + Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` +} + +func (m *ArrayValue) Reset() { *m = ArrayValue{} } +func (m *ArrayValue) String() string { return proto.CompactTextString(m) } +func (*ArrayValue) ProtoMessage() {} +func (*ArrayValue) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ArrayValue) GetValues() []*Value { + if m != nil { + return m.Values + } + return nil +} + +// A message that can hold any of the supported value types and associated +// metadata. +type Value struct { + // Must have a value set. + // + // Types that are valid to be assigned to ValueType: + // *Value_NullValue + // *Value_BooleanValue + // *Value_IntegerValue + // *Value_DoubleValue + // *Value_TimestampValue + // *Value_KeyValue + // *Value_StringValue + // *Value_BlobValue + // *Value_GeoPointValue + // *Value_EntityValue + // *Value_ArrayValue + ValueType isValue_ValueType `protobuf_oneof:"value_type"` + // The `meaning` field should only be populated for backwards compatibility. + Meaning int32 `protobuf:"varint,14,opt,name=meaning" json:"meaning,omitempty"` + // If the value should be excluded from all indexes including those defined + // explicitly. + ExcludeFromIndexes bool `protobuf:"varint,19,opt,name=exclude_from_indexes,json=excludeFromIndexes" json:"exclude_from_indexes,omitempty"` +} + +func (m *Value) Reset() { *m = Value{} } +func (m *Value) String() string { return proto.CompactTextString(m) } +func (*Value) ProtoMessage() {} +func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +type isValue_ValueType interface { + isValue_ValueType() +} + +type Value_NullValue struct { + NullValue google_protobuf1.NullValue `protobuf:"varint,11,opt,name=null_value,json=nullValue,enum=google.protobuf.NullValue,oneof"` +} +type Value_BooleanValue struct { + BooleanValue bool `protobuf:"varint,1,opt,name=boolean_value,json=booleanValue,oneof"` +} +type Value_IntegerValue struct { + IntegerValue int64 `protobuf:"varint,2,opt,name=integer_value,json=integerValue,oneof"` +} +type Value_DoubleValue struct { + DoubleValue float64 `protobuf:"fixed64,3,opt,name=double_value,json=doubleValue,oneof"` +} +type Value_TimestampValue struct { + TimestampValue *google_protobuf2.Timestamp `protobuf:"bytes,10,opt,name=timestamp_value,json=timestampValue,oneof"` +} +type Value_KeyValue struct { + KeyValue *Key `protobuf:"bytes,5,opt,name=key_value,json=keyValue,oneof"` +} +type Value_StringValue struct { + StringValue string `protobuf:"bytes,17,opt,name=string_value,json=stringValue,oneof"` +} +type Value_BlobValue struct { + BlobValue []byte `protobuf:"bytes,18,opt,name=blob_value,json=blobValue,proto3,oneof"` +} +type Value_GeoPointValue struct { + GeoPointValue *google_type.LatLng `protobuf:"bytes,8,opt,name=geo_point_value,json=geoPointValue,oneof"` +} +type Value_EntityValue struct { + EntityValue *Entity `protobuf:"bytes,6,opt,name=entity_value,json=entityValue,oneof"` +} +type Value_ArrayValue struct { + ArrayValue *ArrayValue `protobuf:"bytes,9,opt,name=array_value,json=arrayValue,oneof"` +} + +func (*Value_NullValue) isValue_ValueType() {} +func (*Value_BooleanValue) isValue_ValueType() {} +func (*Value_IntegerValue) isValue_ValueType() {} +func (*Value_DoubleValue) isValue_ValueType() {} +func (*Value_TimestampValue) isValue_ValueType() {} +func (*Value_KeyValue) isValue_ValueType() {} +func (*Value_StringValue) isValue_ValueType() {} +func (*Value_BlobValue) isValue_ValueType() {} +func (*Value_GeoPointValue) isValue_ValueType() {} +func (*Value_EntityValue) isValue_ValueType() {} +func (*Value_ArrayValue) isValue_ValueType() {} + +func (m *Value) GetValueType() isValue_ValueType { + if m != nil { + return m.ValueType + } + return nil +} + +func (m *Value) GetNullValue() google_protobuf1.NullValue { + if x, ok := m.GetValueType().(*Value_NullValue); ok { + return x.NullValue + } + return google_protobuf1.NullValue_NULL_VALUE +} + +func (m *Value) GetBooleanValue() bool { + if x, ok := m.GetValueType().(*Value_BooleanValue); ok { + return x.BooleanValue + } + return false +} + +func (m *Value) GetIntegerValue() int64 { + if x, ok := m.GetValueType().(*Value_IntegerValue); ok { + return x.IntegerValue + } + return 0 +} + +func (m *Value) GetDoubleValue() float64 { + if x, ok := m.GetValueType().(*Value_DoubleValue); ok { + return x.DoubleValue + } + return 0 +} + +func (m *Value) GetTimestampValue() *google_protobuf2.Timestamp { + if x, ok := m.GetValueType().(*Value_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (m *Value) GetKeyValue() *Key { + if x, ok := m.GetValueType().(*Value_KeyValue); ok { + return x.KeyValue + } + return nil +} + +func (m *Value) GetStringValue() string { + if x, ok := m.GetValueType().(*Value_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *Value) GetBlobValue() []byte { + if x, ok := m.GetValueType().(*Value_BlobValue); ok { + return x.BlobValue + } + return nil +} + +func (m *Value) GetGeoPointValue() *google_type.LatLng { + if x, ok := m.GetValueType().(*Value_GeoPointValue); ok { + return x.GeoPointValue + } + return nil +} + +func (m *Value) GetEntityValue() *Entity { + if x, ok := m.GetValueType().(*Value_EntityValue); ok { + return x.EntityValue + } + return nil +} + +func (m *Value) GetArrayValue() *ArrayValue { + if x, ok := m.GetValueType().(*Value_ArrayValue); ok { + return x.ArrayValue + } + return nil +} + +func (m *Value) GetMeaning() int32 { + if m != nil { + return m.Meaning + } + return 0 +} + +func (m *Value) GetExcludeFromIndexes() bool { + if m != nil { + return m.ExcludeFromIndexes + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{ + (*Value_NullValue)(nil), + (*Value_BooleanValue)(nil), + (*Value_IntegerValue)(nil), + (*Value_DoubleValue)(nil), + (*Value_TimestampValue)(nil), + (*Value_KeyValue)(nil), + (*Value_StringValue)(nil), + (*Value_BlobValue)(nil), + (*Value_GeoPointValue)(nil), + (*Value_EntityValue)(nil), + (*Value_ArrayValue)(nil), + } +} + +func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Value) + // value_type + switch x := m.ValueType.(type) { + case *Value_NullValue: + b.EncodeVarint(11<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.NullValue)) + case *Value_BooleanValue: + t := uint64(0) + if x.BooleanValue { + t = 1 + } + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Value_IntegerValue: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IntegerValue)) + case *Value_DoubleValue: + b.EncodeVarint(3<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.DoubleValue)) + case *Value_TimestampValue: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimestampValue); err != nil { + return err + } + case *Value_KeyValue: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KeyValue); err != nil { + return err + } + case *Value_StringValue: + b.EncodeVarint(17<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *Value_BlobValue: + b.EncodeVarint(18<<3 | proto.WireBytes) + b.EncodeRawBytes(x.BlobValue) + case *Value_GeoPointValue: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.GeoPointValue); err != nil { + return err + } + case *Value_EntityValue: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.EntityValue); err != nil { + return err + } + case *Value_ArrayValue: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ArrayValue); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Value.ValueType has unexpected type %T", x) + } + return nil +} + +func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Value) + switch tag { + case 11: // value_type.null_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_NullValue{google_protobuf1.NullValue(x)} + return true, err + case 1: // value_type.boolean_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_BooleanValue{x != 0} + return true, err + case 2: // value_type.integer_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_IntegerValue{int64(x)} + return true, err + case 3: // value_type.double_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.ValueType = &Value_DoubleValue{math.Float64frombits(x)} + return true, err + case 10: // value_type.timestamp_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf2.Timestamp) + err := b.DecodeMessage(msg) + m.ValueType = &Value_TimestampValue{msg} + return true, err + case 5: // value_type.key_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Key) + err := b.DecodeMessage(msg) + m.ValueType = &Value_KeyValue{msg} + return true, err + case 17: // value_type.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ValueType = &Value_StringValue{x} + return true, err + case 18: // value_type.blob_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ValueType = &Value_BlobValue{x} + return true, err + case 8: // value_type.geo_point_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type.LatLng) + err := b.DecodeMessage(msg) + m.ValueType = &Value_GeoPointValue{msg} + return true, err + case 6: // value_type.entity_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Entity) + err := b.DecodeMessage(msg) + m.ValueType = &Value_EntityValue{msg} + return true, err + case 9: // value_type.array_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ArrayValue) + err := b.DecodeMessage(msg) + m.ValueType = &Value_ArrayValue{msg} + return true, err + default: + return false, nil + } +} + +func _Value_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Value) + // value_type + switch x := m.ValueType.(type) { + case *Value_NullValue: + n += proto.SizeVarint(11<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.NullValue)) + case *Value_BooleanValue: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += 1 + case *Value_IntegerValue: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IntegerValue)) + case *Value_DoubleValue: + n += proto.SizeVarint(3<<3 | proto.WireFixed64) + n += 8 + case *Value_TimestampValue: + s := proto.Size(x.TimestampValue) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_KeyValue: + s := proto.Size(x.KeyValue) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_StringValue: + n += proto.SizeVarint(17<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *Value_BlobValue: + n += proto.SizeVarint(18<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.BlobValue))) + n += len(x.BlobValue) + case *Value_GeoPointValue: + s := proto.Size(x.GeoPointValue) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_EntityValue: + s := proto.Size(x.EntityValue) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_ArrayValue: + s := proto.Size(x.ArrayValue) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Datastore data object. +// +// An entity is limited to 1 megabyte when stored. That _roughly_ +// corresponds to a limit of 1 megabyte for the serialized form of this +// message. +type Entity struct { + // The entity's key. + // + // An entity must have a key, unless otherwise documented (for example, + // an entity in `Value.entity_value` may have no key). + // An entity's kind is its key path's last element's kind, + // or null if it has no key. + Key *Key `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // The entity's properties. + // The map's keys are property names. + // A property name matching regex `__.*__` is reserved. + // A reserved property name is forbidden in certain documented contexts. + // The name must not contain more than 500 characters. + // The name cannot be `""`. + Properties map[string]*Value `protobuf:"bytes,3,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Entity) Reset() { *m = Entity{} } +func (m *Entity) String() string { return proto.CompactTextString(m) } +func (*Entity) ProtoMessage() {} +func (*Entity) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *Entity) GetKey() *Key { + if m != nil { + return m.Key + } + return nil +} + +func (m *Entity) GetProperties() map[string]*Value { + if m != nil { + return m.Properties + } + return nil +} + +func init() { + proto.RegisterType((*PartitionId)(nil), "google.datastore.v1beta3.PartitionId") + proto.RegisterType((*Key)(nil), "google.datastore.v1beta3.Key") + proto.RegisterType((*Key_PathElement)(nil), "google.datastore.v1beta3.Key.PathElement") + proto.RegisterType((*ArrayValue)(nil), "google.datastore.v1beta3.ArrayValue") + proto.RegisterType((*Value)(nil), "google.datastore.v1beta3.Value") + proto.RegisterType((*Entity)(nil), "google.datastore.v1beta3.Entity") +} + +func init() { proto.RegisterFile("google/datastore/v1beta3/entity.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 776 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xcf, 0x8e, 0xdb, 0x36, + 0x10, 0xc6, 0x25, 0x7b, 0xed, 0xac, 0x46, 0xca, 0x6e, 0xca, 0xe4, 0x20, 0x18, 0x49, 0xd7, 0x75, + 0xbb, 0x80, 0x7b, 0x91, 0x92, 0x0d, 0x8a, 0x16, 0x4d, 0x73, 0x88, 0x5b, 0x37, 0x32, 0x12, 0xb4, + 0x06, 0x11, 0xe4, 0xd0, 0x43, 0x0d, 0xda, 0x62, 0x14, 0xd6, 0x12, 0x29, 0x48, 0x54, 0x10, 0x3d, + 0x46, 0x5f, 0xa3, 0x7d, 0xad, 0xde, 0xfa, 0x12, 0x05, 0xff, 0x48, 0x5e, 0x24, 0xf0, 0x36, 0x37, + 0x71, 0xe6, 0x37, 0x1f, 0x3f, 0x72, 0x86, 0x36, 0x5c, 0x66, 0x42, 0x64, 0x39, 0x8d, 0x53, 0x22, + 0x49, 0x2d, 0x45, 0x45, 0xe3, 0x77, 0x8f, 0xb6, 0x54, 0x92, 0xc7, 0x31, 0xe5, 0x92, 0xc9, 0x36, + 0x2a, 0x2b, 0x21, 0x05, 0x0a, 0x0d, 0x16, 0xf5, 0x58, 0x64, 0xb1, 0xc9, 0x7d, 0x2b, 0x40, 0x4a, + 0x16, 0x13, 0xce, 0x85, 0x24, 0x92, 0x09, 0x5e, 0x9b, 0xba, 0x3e, 0xab, 0x57, 0xdb, 0xe6, 0x4d, + 0x5c, 0xcb, 0xaa, 0xd9, 0x49, 0x9b, 0xbd, 0xf8, 0x30, 0x2b, 0x59, 0x41, 0x6b, 0x49, 0x8a, 0xd2, + 0x02, 0x76, 0xdb, 0x58, 0xb6, 0x25, 0x8d, 0x73, 0x22, 0x73, 0x9e, 0x99, 0xcc, 0xec, 0x57, 0xf0, + 0xd7, 0xa4, 0x92, 0x4c, 0x6d, 0xb6, 0x4a, 0xd1, 0x03, 0x80, 0xb2, 0x12, 0x7f, 0xd0, 0x9d, 0xdc, + 0xb0, 0x34, 0x1c, 0x4c, 0xdd, 0xb9, 0x87, 0x3d, 0x1b, 0x59, 0xa5, 0xe8, 0x0b, 0x08, 0x38, 0x29, + 0x68, 0x5d, 0x92, 0x1d, 0x55, 0xc0, 0x89, 0x06, 0xfc, 0x3e, 0xb6, 0x4a, 0x67, 0xff, 0xb8, 0x30, + 0x7c, 0x41, 0x5b, 0x94, 0x40, 0x50, 0x76, 0xc2, 0x0a, 0x75, 0xa7, 0xee, 0xdc, 0xbf, 0xba, 0x8c, + 0x8e, 0x5d, 0x40, 0x74, 0xcd, 0x06, 0xf6, 0xcb, 0x6b, 0x9e, 0x9e, 0xc2, 0x49, 0x49, 0xe4, 0xdb, + 0x70, 0x30, 0x1d, 0xce, 0xfd, 0xab, 0xaf, 0x8f, 0x2b, 0xbc, 0xa0, 0x6d, 0xb4, 0x26, 0xf2, 0xed, + 0x32, 0xa7, 0x05, 0xe5, 0x12, 0xeb, 0xb2, 0xc9, 0x2b, 0x75, 0xc2, 0x3e, 0x88, 0x10, 0x9c, 0xec, + 0x19, 0x37, 0x7e, 0x3c, 0xac, 0xbf, 0xd1, 0x1d, 0x18, 0xd8, 0xd3, 0x0e, 0x13, 0x07, 0x0f, 0x58, + 0x8a, 0xee, 0xc1, 0x89, 0x3a, 0x54, 0x38, 0x54, 0x54, 0xe2, 0x60, 0xbd, 0x5a, 0x78, 0x70, 0x8b, + 0xa5, 0x1b, 0x75, 0x89, 0xb3, 0x25, 0xc0, 0xb3, 0xaa, 0x22, 0xed, 0x6b, 0x92, 0x37, 0x14, 0x7d, + 0x0b, 0xe3, 0x77, 0xea, 0xa3, 0x0e, 0x5d, 0x6d, 0xf2, 0xe2, 0xb8, 0x49, 0x5d, 0x80, 0x2d, 0x3e, + 0xfb, 0x7b, 0x04, 0x23, 0x23, 0xf1, 0x04, 0x80, 0x37, 0x79, 0xbe, 0xd1, 0x89, 0xd0, 0x9f, 0xba, + 0xf3, 0xb3, 0xab, 0x49, 0x27, 0xd3, 0x35, 0x36, 0xfa, 0xa5, 0xc9, 0x73, 0xcd, 0x27, 0x0e, 0xf6, + 0x78, 0xb7, 0x40, 0x97, 0x70, 0x7b, 0x2b, 0x44, 0x4e, 0x09, 0xb7, 0xf5, 0xea, 0x74, 0xa7, 0x89, + 0x83, 0x03, 0x1b, 0xee, 0x31, 0xc6, 0x25, 0xcd, 0x68, 0x65, 0xb1, 0xee, 0xc8, 0x81, 0x0d, 0x1b, + 0xec, 0x4b, 0x08, 0x52, 0xd1, 0x6c, 0x73, 0x6a, 0x29, 0x75, 0x09, 0x6e, 0xe2, 0x60, 0xdf, 0x44, + 0x0d, 0xb4, 0x84, 0xf3, 0x7e, 0xca, 0x2c, 0x07, 0xba, 0xc5, 0x1f, 0x9b, 0x7e, 0xd5, 0x71, 0x89, + 0x83, 0xcf, 0xfa, 0x22, 0x23, 0xf3, 0x03, 0x78, 0x7b, 0xda, 0x5a, 0x81, 0x91, 0x16, 0x78, 0x70, + 0x63, 0x87, 0x13, 0x07, 0x9f, 0xee, 0x69, 0xdb, 0x3b, 0xad, 0x65, 0xc5, 0x78, 0x66, 0x05, 0x3e, + 0xb3, 0xed, 0xf2, 0x4d, 0xd4, 0x40, 0x17, 0x00, 0xdb, 0x5c, 0x6c, 0x2d, 0x82, 0xa6, 0xee, 0x3c, + 0x50, 0xb7, 0xa7, 0x62, 0x06, 0x78, 0x0a, 0xe7, 0x19, 0x15, 0x9b, 0x52, 0x30, 0x2e, 0x2d, 0x75, + 0xaa, 0x9d, 0xdc, 0xed, 0x9c, 0xa8, 0x96, 0x47, 0x2f, 0x89, 0x7c, 0xc9, 0xb3, 0xc4, 0xc1, 0xb7, + 0x33, 0x2a, 0xd6, 0x0a, 0xee, 0x6e, 0x22, 0x30, 0x6f, 0xdc, 0xd6, 0x8e, 0x75, 0xed, 0xf4, 0xf8, + 0x29, 0x96, 0x9a, 0x56, 0x36, 0x4d, 0x9d, 0x91, 0x79, 0x0e, 0x3e, 0x51, 0x13, 0x65, 0x55, 0x3c, + 0xad, 0xf2, 0xd5, 0x71, 0x95, 0xc3, 0xf8, 0x25, 0x0e, 0x06, 0x72, 0x18, 0xc6, 0x10, 0x6e, 0x15, + 0x94, 0x70, 0xc6, 0xb3, 0xf0, 0x6c, 0xea, 0xce, 0x47, 0xb8, 0x5b, 0xa2, 0x87, 0x70, 0x8f, 0xbe, + 0xdf, 0xe5, 0x4d, 0x4a, 0x37, 0x6f, 0x2a, 0x51, 0x6c, 0x18, 0x4f, 0xe9, 0x7b, 0x5a, 0x87, 0x77, + 0xd5, 0xb4, 0x60, 0x64, 0x73, 0x3f, 0x57, 0xa2, 0x58, 0x99, 0xcc, 0x22, 0x00, 0xd0, 0x76, 0xcc, + 0xd0, 0xff, 0xeb, 0xc2, 0xd8, 0x98, 0x47, 0x31, 0x0c, 0xf7, 0xb4, 0xb5, 0xaf, 0xfa, 0xe6, 0x8e, + 0x61, 0x45, 0xa2, 0xb5, 0xfe, 0x65, 0x29, 0x69, 0x25, 0x19, 0xad, 0xc3, 0xa1, 0x7e, 0x26, 0x0f, + 0xff, 0xef, 0x8e, 0xa2, 0x75, 0x5f, 0xb2, 0xe4, 0xb2, 0x6a, 0xf1, 0x35, 0x8d, 0xc9, 0xef, 0x70, + 0xfe, 0x41, 0x1a, 0xdd, 0x39, 0xb8, 0xf2, 0xcc, 0xb6, 0xdf, 0xc0, 0xe8, 0x30, 0xea, 0x9f, 0xf0, + 0x30, 0x0d, 0xfd, 0xfd, 0xe0, 0x3b, 0x77, 0xf1, 0xa7, 0x0b, 0xf7, 0x77, 0xa2, 0x38, 0x5a, 0xb1, + 0xf0, 0x8d, 0xc9, 0xb5, 0x9a, 0xf3, 0xb5, 0xfb, 0xdb, 0x33, 0x0b, 0x66, 0x22, 0x27, 0x3c, 0x8b, + 0x44, 0x95, 0xc5, 0x19, 0xe5, 0xfa, 0x15, 0xc4, 0x26, 0x45, 0x4a, 0x56, 0x7f, 0xfc, 0x0f, 0xf1, + 0xa4, 0x8f, 0xfc, 0x35, 0xf8, 0xfc, 0xb9, 0xd1, 0xf8, 0x31, 0x17, 0x4d, 0x1a, 0xfd, 0xd4, 0x6f, + 0xf9, 0xfa, 0xd1, 0x42, 0xa1, 0xdb, 0xb1, 0x96, 0x7b, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x7e, 0x53, 0x2d, 0x57, 0x6f, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/query.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/query.pb.go new file mode 100644 index 0000000..7c606ca --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/query.pb.go @@ -0,0 +1,970 @@ +// Code generated by protoc-gen-go. +// source: google/datastore/v1beta3/query.proto +// DO NOT EDIT! + +package datastore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/wrappers" +import _ "google.golang.org/genproto/googleapis/type/latlng" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Specifies what data the 'entity' field contains. +// A `ResultType` is either implied (for example, in `LookupResponse.missing` +// from `datastore.proto`, it is always `KEY_ONLY`) or specified by context +// (for example, in message `QueryResultBatch`, field `entity_result_type` +// specifies a `ResultType` for all the values in field `entity_results`). +type EntityResult_ResultType int32 + +const ( + // Unspecified. This value is never used. + EntityResult_RESULT_TYPE_UNSPECIFIED EntityResult_ResultType = 0 + // The key and properties. + EntityResult_FULL EntityResult_ResultType = 1 + // A projected subset of properties. The entity may have no key. + EntityResult_PROJECTION EntityResult_ResultType = 2 + // Only the key. + EntityResult_KEY_ONLY EntityResult_ResultType = 3 +) + +var EntityResult_ResultType_name = map[int32]string{ + 0: "RESULT_TYPE_UNSPECIFIED", + 1: "FULL", + 2: "PROJECTION", + 3: "KEY_ONLY", +} +var EntityResult_ResultType_value = map[string]int32{ + "RESULT_TYPE_UNSPECIFIED": 0, + "FULL": 1, + "PROJECTION": 2, + "KEY_ONLY": 3, +} + +func (x EntityResult_ResultType) String() string { + return proto.EnumName(EntityResult_ResultType_name, int32(x)) +} +func (EntityResult_ResultType) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +// The sort direction. +type PropertyOrder_Direction int32 + +const ( + // Unspecified. This value must not be used. + PropertyOrder_DIRECTION_UNSPECIFIED PropertyOrder_Direction = 0 + // Ascending. + PropertyOrder_ASCENDING PropertyOrder_Direction = 1 + // Descending. + PropertyOrder_DESCENDING PropertyOrder_Direction = 2 +) + +var PropertyOrder_Direction_name = map[int32]string{ + 0: "DIRECTION_UNSPECIFIED", + 1: "ASCENDING", + 2: "DESCENDING", +} +var PropertyOrder_Direction_value = map[string]int32{ + "DIRECTION_UNSPECIFIED": 0, + "ASCENDING": 1, + "DESCENDING": 2, +} + +func (x PropertyOrder_Direction) String() string { + return proto.EnumName(PropertyOrder_Direction_name, int32(x)) +} +func (PropertyOrder_Direction) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{5, 0} } + +// A composite filter operator. +type CompositeFilter_Operator int32 + +const ( + // Unspecified. This value must not be used. + CompositeFilter_OPERATOR_UNSPECIFIED CompositeFilter_Operator = 0 + // The results are required to satisfy each of the combined filters. + CompositeFilter_AND CompositeFilter_Operator = 1 +) + +var CompositeFilter_Operator_name = map[int32]string{ + 0: "OPERATOR_UNSPECIFIED", + 1: "AND", +} +var CompositeFilter_Operator_value = map[string]int32{ + "OPERATOR_UNSPECIFIED": 0, + "AND": 1, +} + +func (x CompositeFilter_Operator) String() string { + return proto.EnumName(CompositeFilter_Operator_name, int32(x)) +} +func (CompositeFilter_Operator) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{7, 0} } + +// A property filter operator. +type PropertyFilter_Operator int32 + +const ( + // Unspecified. This value must not be used. + PropertyFilter_OPERATOR_UNSPECIFIED PropertyFilter_Operator = 0 + // Less than. + PropertyFilter_LESS_THAN PropertyFilter_Operator = 1 + // Less than or equal. + PropertyFilter_LESS_THAN_OR_EQUAL PropertyFilter_Operator = 2 + // Greater than. + PropertyFilter_GREATER_THAN PropertyFilter_Operator = 3 + // Greater than or equal. + PropertyFilter_GREATER_THAN_OR_EQUAL PropertyFilter_Operator = 4 + // Equal. + PropertyFilter_EQUAL PropertyFilter_Operator = 5 + // Has ancestor. + PropertyFilter_HAS_ANCESTOR PropertyFilter_Operator = 11 +) + +var PropertyFilter_Operator_name = map[int32]string{ + 0: "OPERATOR_UNSPECIFIED", + 1: "LESS_THAN", + 2: "LESS_THAN_OR_EQUAL", + 3: "GREATER_THAN", + 4: "GREATER_THAN_OR_EQUAL", + 5: "EQUAL", + 11: "HAS_ANCESTOR", +} +var PropertyFilter_Operator_value = map[string]int32{ + "OPERATOR_UNSPECIFIED": 0, + "LESS_THAN": 1, + "LESS_THAN_OR_EQUAL": 2, + "GREATER_THAN": 3, + "GREATER_THAN_OR_EQUAL": 4, + "EQUAL": 5, + "HAS_ANCESTOR": 11, +} + +func (x PropertyFilter_Operator) String() string { + return proto.EnumName(PropertyFilter_Operator_name, int32(x)) +} +func (PropertyFilter_Operator) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{8, 0} } + +// The possible values for the `more_results` field. +type QueryResultBatch_MoreResultsType int32 + +const ( + // Unspecified. This value is never used. + QueryResultBatch_MORE_RESULTS_TYPE_UNSPECIFIED QueryResultBatch_MoreResultsType = 0 + // There may be additional batches to fetch from this query. + QueryResultBatch_NOT_FINISHED QueryResultBatch_MoreResultsType = 1 + // The query is finished, but there may be more results after the limit. + QueryResultBatch_MORE_RESULTS_AFTER_LIMIT QueryResultBatch_MoreResultsType = 2 + // The query is finished, but there may be more results after the end + // cursor. + QueryResultBatch_MORE_RESULTS_AFTER_CURSOR QueryResultBatch_MoreResultsType = 4 + // The query has been exhausted. + QueryResultBatch_NO_MORE_RESULTS QueryResultBatch_MoreResultsType = 3 +) + +var QueryResultBatch_MoreResultsType_name = map[int32]string{ + 0: "MORE_RESULTS_TYPE_UNSPECIFIED", + 1: "NOT_FINISHED", + 2: "MORE_RESULTS_AFTER_LIMIT", + 4: "MORE_RESULTS_AFTER_CURSOR", + 3: "NO_MORE_RESULTS", +} +var QueryResultBatch_MoreResultsType_value = map[string]int32{ + "MORE_RESULTS_TYPE_UNSPECIFIED": 0, + "NOT_FINISHED": 1, + "MORE_RESULTS_AFTER_LIMIT": 2, + "MORE_RESULTS_AFTER_CURSOR": 4, + "NO_MORE_RESULTS": 3, +} + +func (x QueryResultBatch_MoreResultsType) String() string { + return proto.EnumName(QueryResultBatch_MoreResultsType_name, int32(x)) +} +func (QueryResultBatch_MoreResultsType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{11, 0} +} + +// The result of fetching an entity from Datastore. +type EntityResult struct { + // The resulting entity. + Entity *Entity `protobuf:"bytes,1,opt,name=entity" json:"entity,omitempty"` + // The version of the entity, a strictly positive number that monotonically + // increases with changes to the entity. + // + // This field is set for [`FULL`][google.datastore.v1beta3.EntityResult.ResultType.FULL] entity + // results. + // + // For [missing][google.datastore.v1beta3.LookupResponse.missing] entities in `LookupResponse`, this + // is the version of the snapshot that was used to look up the entity, and it + // is always set except for eventually consistent reads. + Version int64 `protobuf:"varint,4,opt,name=version" json:"version,omitempty"` + // A cursor that points to the position after the result entity. + // Set only when the `EntityResult` is part of a `QueryResultBatch` message. + Cursor []byte `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (m *EntityResult) Reset() { *m = EntityResult{} } +func (m *EntityResult) String() string { return proto.CompactTextString(m) } +func (*EntityResult) ProtoMessage() {} +func (*EntityResult) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *EntityResult) GetEntity() *Entity { + if m != nil { + return m.Entity + } + return nil +} + +func (m *EntityResult) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *EntityResult) GetCursor() []byte { + if m != nil { + return m.Cursor + } + return nil +} + +// A query for entities. +type Query struct { + // The projection to return. Defaults to returning all properties. + Projection []*Projection `protobuf:"bytes,2,rep,name=projection" json:"projection,omitempty"` + // The kinds to query (if empty, returns entities of all kinds). + // Currently at most 1 kind may be specified. + Kind []*KindExpression `protobuf:"bytes,3,rep,name=kind" json:"kind,omitempty"` + // The filter to apply. + Filter *Filter `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"` + // The order to apply to the query results (if empty, order is unspecified). + Order []*PropertyOrder `protobuf:"bytes,5,rep,name=order" json:"order,omitempty"` + // The properties to make distinct. The query results will contain the first + // result for each distinct combination of values for the given properties + // (if empty, all results are returned). + DistinctOn []*PropertyReference `protobuf:"bytes,6,rep,name=distinct_on,json=distinctOn" json:"distinct_on,omitempty"` + // A starting point for the query results. Query cursors are + // returned in query result batches and + // [can only be used to continue the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets). + StartCursor []byte `protobuf:"bytes,7,opt,name=start_cursor,json=startCursor,proto3" json:"start_cursor,omitempty"` + // An ending point for the query results. Query cursors are + // returned in query result batches and + // [can only be used to limit the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets). + EndCursor []byte `protobuf:"bytes,8,opt,name=end_cursor,json=endCursor,proto3" json:"end_cursor,omitempty"` + // The number of results to skip. Applies before limit, but after all other + // constraints. Optional. Must be >= 0 if specified. + Offset int32 `protobuf:"varint,10,opt,name=offset" json:"offset,omitempty"` + // The maximum number of results to return. Applies after all other + // constraints. Optional. + // Unspecified is interpreted as no limit. + // Must be >= 0 if specified. + Limit *google_protobuf3.Int32Value `protobuf:"bytes,12,opt,name=limit" json:"limit,omitempty"` +} + +func (m *Query) Reset() { *m = Query{} } +func (m *Query) String() string { return proto.CompactTextString(m) } +func (*Query) ProtoMessage() {} +func (*Query) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *Query) GetProjection() []*Projection { + if m != nil { + return m.Projection + } + return nil +} + +func (m *Query) GetKind() []*KindExpression { + if m != nil { + return m.Kind + } + return nil +} + +func (m *Query) GetFilter() *Filter { + if m != nil { + return m.Filter + } + return nil +} + +func (m *Query) GetOrder() []*PropertyOrder { + if m != nil { + return m.Order + } + return nil +} + +func (m *Query) GetDistinctOn() []*PropertyReference { + if m != nil { + return m.DistinctOn + } + return nil +} + +func (m *Query) GetStartCursor() []byte { + if m != nil { + return m.StartCursor + } + return nil +} + +func (m *Query) GetEndCursor() []byte { + if m != nil { + return m.EndCursor + } + return nil +} + +func (m *Query) GetOffset() int32 { + if m != nil { + return m.Offset + } + return 0 +} + +func (m *Query) GetLimit() *google_protobuf3.Int32Value { + if m != nil { + return m.Limit + } + return nil +} + +// A representation of a kind. +type KindExpression struct { + // The name of the kind. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *KindExpression) Reset() { *m = KindExpression{} } +func (m *KindExpression) String() string { return proto.CompactTextString(m) } +func (*KindExpression) ProtoMessage() {} +func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *KindExpression) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A reference to a property relative to the kind expressions. +type PropertyReference struct { + // The name of the property. + // If name includes "."s, it may be interpreted as a property name path. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` +} + +func (m *PropertyReference) Reset() { *m = PropertyReference{} } +func (m *PropertyReference) String() string { return proto.CompactTextString(m) } +func (*PropertyReference) ProtoMessage() {} +func (*PropertyReference) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *PropertyReference) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A representation of a property in a projection. +type Projection struct { + // The property to project. + Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` +} + +func (m *Projection) Reset() { *m = Projection{} } +func (m *Projection) String() string { return proto.CompactTextString(m) } +func (*Projection) ProtoMessage() {} +func (*Projection) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *Projection) GetProperty() *PropertyReference { + if m != nil { + return m.Property + } + return nil +} + +// The desired order for a specific property. +type PropertyOrder struct { + // The property to order by. + Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The direction to order by. Defaults to `ASCENDING`. + Direction PropertyOrder_Direction `protobuf:"varint,2,opt,name=direction,enum=google.datastore.v1beta3.PropertyOrder_Direction" json:"direction,omitempty"` +} + +func (m *PropertyOrder) Reset() { *m = PropertyOrder{} } +func (m *PropertyOrder) String() string { return proto.CompactTextString(m) } +func (*PropertyOrder) ProtoMessage() {} +func (*PropertyOrder) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *PropertyOrder) GetProperty() *PropertyReference { + if m != nil { + return m.Property + } + return nil +} + +func (m *PropertyOrder) GetDirection() PropertyOrder_Direction { + if m != nil { + return m.Direction + } + return PropertyOrder_DIRECTION_UNSPECIFIED +} + +// A holder for any type of filter. +type Filter struct { + // The type of filter. + // + // Types that are valid to be assigned to FilterType: + // *Filter_CompositeFilter + // *Filter_PropertyFilter + FilterType isFilter_FilterType `protobuf_oneof:"filter_type"` +} + +func (m *Filter) Reset() { *m = Filter{} } +func (m *Filter) String() string { return proto.CompactTextString(m) } +func (*Filter) ProtoMessage() {} +func (*Filter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +type isFilter_FilterType interface { + isFilter_FilterType() +} + +type Filter_CompositeFilter struct { + CompositeFilter *CompositeFilter `protobuf:"bytes,1,opt,name=composite_filter,json=compositeFilter,oneof"` +} +type Filter_PropertyFilter struct { + PropertyFilter *PropertyFilter `protobuf:"bytes,2,opt,name=property_filter,json=propertyFilter,oneof"` +} + +func (*Filter_CompositeFilter) isFilter_FilterType() {} +func (*Filter_PropertyFilter) isFilter_FilterType() {} + +func (m *Filter) GetFilterType() isFilter_FilterType { + if m != nil { + return m.FilterType + } + return nil +} + +func (m *Filter) GetCompositeFilter() *CompositeFilter { + if x, ok := m.GetFilterType().(*Filter_CompositeFilter); ok { + return x.CompositeFilter + } + return nil +} + +func (m *Filter) GetPropertyFilter() *PropertyFilter { + if x, ok := m.GetFilterType().(*Filter_PropertyFilter); ok { + return x.PropertyFilter + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Filter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Filter_OneofMarshaler, _Filter_OneofUnmarshaler, _Filter_OneofSizer, []interface{}{ + (*Filter_CompositeFilter)(nil), + (*Filter_PropertyFilter)(nil), + } +} + +func _Filter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Filter) + // filter_type + switch x := m.FilterType.(type) { + case *Filter_CompositeFilter: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CompositeFilter); err != nil { + return err + } + case *Filter_PropertyFilter: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PropertyFilter); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Filter.FilterType has unexpected type %T", x) + } + return nil +} + +func _Filter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Filter) + switch tag { + case 1: // filter_type.composite_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CompositeFilter) + err := b.DecodeMessage(msg) + m.FilterType = &Filter_CompositeFilter{msg} + return true, err + case 2: // filter_type.property_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PropertyFilter) + err := b.DecodeMessage(msg) + m.FilterType = &Filter_PropertyFilter{msg} + return true, err + default: + return false, nil + } +} + +func _Filter_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Filter) + // filter_type + switch x := m.FilterType.(type) { + case *Filter_CompositeFilter: + s := proto.Size(x.CompositeFilter) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Filter_PropertyFilter: + s := proto.Size(x.PropertyFilter) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A filter that merges multiple other filters using the given operator. +type CompositeFilter struct { + // The operator for combining multiple filters. + Op CompositeFilter_Operator `protobuf:"varint,1,opt,name=op,enum=google.datastore.v1beta3.CompositeFilter_Operator" json:"op,omitempty"` + // The list of filters to combine. + // Must contain at least one filter. + Filters []*Filter `protobuf:"bytes,2,rep,name=filters" json:"filters,omitempty"` +} + +func (m *CompositeFilter) Reset() { *m = CompositeFilter{} } +func (m *CompositeFilter) String() string { return proto.CompactTextString(m) } +func (*CompositeFilter) ProtoMessage() {} +func (*CompositeFilter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *CompositeFilter) GetOp() CompositeFilter_Operator { + if m != nil { + return m.Op + } + return CompositeFilter_OPERATOR_UNSPECIFIED +} + +func (m *CompositeFilter) GetFilters() []*Filter { + if m != nil { + return m.Filters + } + return nil +} + +// A filter on a specific property. +type PropertyFilter struct { + // The property to filter by. + Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The operator to filter by. + Op PropertyFilter_Operator `protobuf:"varint,2,opt,name=op,enum=google.datastore.v1beta3.PropertyFilter_Operator" json:"op,omitempty"` + // The value to compare the property to. + Value *Value `protobuf:"bytes,3,opt,name=value" json:"value,omitempty"` +} + +func (m *PropertyFilter) Reset() { *m = PropertyFilter{} } +func (m *PropertyFilter) String() string { return proto.CompactTextString(m) } +func (*PropertyFilter) ProtoMessage() {} +func (*PropertyFilter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +func (m *PropertyFilter) GetProperty() *PropertyReference { + if m != nil { + return m.Property + } + return nil +} + +func (m *PropertyFilter) GetOp() PropertyFilter_Operator { + if m != nil { + return m.Op + } + return PropertyFilter_OPERATOR_UNSPECIFIED +} + +func (m *PropertyFilter) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +// A [GQL query](https://cloud.google.com/datastore/docs/apis/gql/gql_reference). +type GqlQuery struct { + // A string of the format described + // [here](https://cloud.google.com/datastore/docs/apis/gql/gql_reference). + QueryString string `protobuf:"bytes,1,opt,name=query_string,json=queryString" json:"query_string,omitempty"` + // When false, the query string must not contain any literals and instead must + // bind all values. For example, + // `SELECT * FROM Kind WHERE a = 'string literal'` is not allowed, while + // `SELECT * FROM Kind WHERE a = @value` is. + AllowLiterals bool `protobuf:"varint,2,opt,name=allow_literals,json=allowLiterals" json:"allow_literals,omitempty"` + // For each non-reserved named binding site in the query string, there must be + // a named parameter with that name, but not necessarily the inverse. + // + // Key must match regex `[A-Za-z_$][A-Za-z_$0-9]*`, must not match regex + // `__.*__`, and must not be `""`. + NamedBindings map[string]*GqlQueryParameter `protobuf:"bytes,5,rep,name=named_bindings,json=namedBindings" json:"named_bindings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Numbered binding site @1 references the first numbered parameter, + // effectively using 1-based indexing, rather than the usual 0. + // + // For each binding site numbered i in `query_string`, there must be an i-th + // numbered parameter. The inverse must also be true. + PositionalBindings []*GqlQueryParameter `protobuf:"bytes,4,rep,name=positional_bindings,json=positionalBindings" json:"positional_bindings,omitempty"` +} + +func (m *GqlQuery) Reset() { *m = GqlQuery{} } +func (m *GqlQuery) String() string { return proto.CompactTextString(m) } +func (*GqlQuery) ProtoMessage() {} +func (*GqlQuery) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{9} } + +func (m *GqlQuery) GetQueryString() string { + if m != nil { + return m.QueryString + } + return "" +} + +func (m *GqlQuery) GetAllowLiterals() bool { + if m != nil { + return m.AllowLiterals + } + return false +} + +func (m *GqlQuery) GetNamedBindings() map[string]*GqlQueryParameter { + if m != nil { + return m.NamedBindings + } + return nil +} + +func (m *GqlQuery) GetPositionalBindings() []*GqlQueryParameter { + if m != nil { + return m.PositionalBindings + } + return nil +} + +// A binding parameter for a GQL query. +type GqlQueryParameter struct { + // The type of parameter. + // + // Types that are valid to be assigned to ParameterType: + // *GqlQueryParameter_Value + // *GqlQueryParameter_Cursor + ParameterType isGqlQueryParameter_ParameterType `protobuf_oneof:"parameter_type"` +} + +func (m *GqlQueryParameter) Reset() { *m = GqlQueryParameter{} } +func (m *GqlQueryParameter) String() string { return proto.CompactTextString(m) } +func (*GqlQueryParameter) ProtoMessage() {} +func (*GqlQueryParameter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{10} } + +type isGqlQueryParameter_ParameterType interface { + isGqlQueryParameter_ParameterType() +} + +type GqlQueryParameter_Value struct { + Value *Value `protobuf:"bytes,2,opt,name=value,oneof"` +} +type GqlQueryParameter_Cursor struct { + Cursor []byte `protobuf:"bytes,3,opt,name=cursor,proto3,oneof"` +} + +func (*GqlQueryParameter_Value) isGqlQueryParameter_ParameterType() {} +func (*GqlQueryParameter_Cursor) isGqlQueryParameter_ParameterType() {} + +func (m *GqlQueryParameter) GetParameterType() isGqlQueryParameter_ParameterType { + if m != nil { + return m.ParameterType + } + return nil +} + +func (m *GqlQueryParameter) GetValue() *Value { + if x, ok := m.GetParameterType().(*GqlQueryParameter_Value); ok { + return x.Value + } + return nil +} + +func (m *GqlQueryParameter) GetCursor() []byte { + if x, ok := m.GetParameterType().(*GqlQueryParameter_Cursor); ok { + return x.Cursor + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*GqlQueryParameter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _GqlQueryParameter_OneofMarshaler, _GqlQueryParameter_OneofUnmarshaler, _GqlQueryParameter_OneofSizer, []interface{}{ + (*GqlQueryParameter_Value)(nil), + (*GqlQueryParameter_Cursor)(nil), + } +} + +func _GqlQueryParameter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*GqlQueryParameter) + // parameter_type + switch x := m.ParameterType.(type) { + case *GqlQueryParameter_Value: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Value); err != nil { + return err + } + case *GqlQueryParameter_Cursor: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Cursor) + case nil: + default: + return fmt.Errorf("GqlQueryParameter.ParameterType has unexpected type %T", x) + } + return nil +} + +func _GqlQueryParameter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*GqlQueryParameter) + switch tag { + case 2: // parameter_type.value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Value) + err := b.DecodeMessage(msg) + m.ParameterType = &GqlQueryParameter_Value{msg} + return true, err + case 3: // parameter_type.cursor + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ParameterType = &GqlQueryParameter_Cursor{x} + return true, err + default: + return false, nil + } +} + +func _GqlQueryParameter_OneofSizer(msg proto.Message) (n int) { + m := msg.(*GqlQueryParameter) + // parameter_type + switch x := m.ParameterType.(type) { + case *GqlQueryParameter_Value: + s := proto.Size(x.Value) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *GqlQueryParameter_Cursor: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Cursor))) + n += len(x.Cursor) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A batch of results produced by a query. +type QueryResultBatch struct { + // The number of results skipped, typically because of an offset. + SkippedResults int32 `protobuf:"varint,6,opt,name=skipped_results,json=skippedResults" json:"skipped_results,omitempty"` + // A cursor that points to the position after the last skipped result. + // Will be set when `skipped_results` != 0. + SkippedCursor []byte `protobuf:"bytes,3,opt,name=skipped_cursor,json=skippedCursor,proto3" json:"skipped_cursor,omitempty"` + // The result type for every entity in `entity_results`. + EntityResultType EntityResult_ResultType `protobuf:"varint,1,opt,name=entity_result_type,json=entityResultType,enum=google.datastore.v1beta3.EntityResult_ResultType" json:"entity_result_type,omitempty"` + // The results for this batch. + EntityResults []*EntityResult `protobuf:"bytes,2,rep,name=entity_results,json=entityResults" json:"entity_results,omitempty"` + // A cursor that points to the position after the last result in the batch. + EndCursor []byte `protobuf:"bytes,4,opt,name=end_cursor,json=endCursor,proto3" json:"end_cursor,omitempty"` + // The state of the query after the current batch. + MoreResults QueryResultBatch_MoreResultsType `protobuf:"varint,5,opt,name=more_results,json=moreResults,enum=google.datastore.v1beta3.QueryResultBatch_MoreResultsType" json:"more_results,omitempty"` + // The version number of the snapshot this batch was returned from. + // This applies to the range of results from the query's `start_cursor` (or + // the beginning of the query if no cursor was given) to this batch's + // `end_cursor` (not the query's `end_cursor`). + // + // In a single transaction, subsequent query result batches for the same query + // can have a greater snapshot version number. Each batch's snapshot version + // is valid for all preceding batches. + // The value will be zero for eventually consistent queries. + SnapshotVersion int64 `protobuf:"varint,7,opt,name=snapshot_version,json=snapshotVersion" json:"snapshot_version,omitempty"` +} + +func (m *QueryResultBatch) Reset() { *m = QueryResultBatch{} } +func (m *QueryResultBatch) String() string { return proto.CompactTextString(m) } +func (*QueryResultBatch) ProtoMessage() {} +func (*QueryResultBatch) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{11} } + +func (m *QueryResultBatch) GetSkippedResults() int32 { + if m != nil { + return m.SkippedResults + } + return 0 +} + +func (m *QueryResultBatch) GetSkippedCursor() []byte { + if m != nil { + return m.SkippedCursor + } + return nil +} + +func (m *QueryResultBatch) GetEntityResultType() EntityResult_ResultType { + if m != nil { + return m.EntityResultType + } + return EntityResult_RESULT_TYPE_UNSPECIFIED +} + +func (m *QueryResultBatch) GetEntityResults() []*EntityResult { + if m != nil { + return m.EntityResults + } + return nil +} + +func (m *QueryResultBatch) GetEndCursor() []byte { + if m != nil { + return m.EndCursor + } + return nil +} + +func (m *QueryResultBatch) GetMoreResults() QueryResultBatch_MoreResultsType { + if m != nil { + return m.MoreResults + } + return QueryResultBatch_MORE_RESULTS_TYPE_UNSPECIFIED +} + +func (m *QueryResultBatch) GetSnapshotVersion() int64 { + if m != nil { + return m.SnapshotVersion + } + return 0 +} + +func init() { + proto.RegisterType((*EntityResult)(nil), "google.datastore.v1beta3.EntityResult") + proto.RegisterType((*Query)(nil), "google.datastore.v1beta3.Query") + proto.RegisterType((*KindExpression)(nil), "google.datastore.v1beta3.KindExpression") + proto.RegisterType((*PropertyReference)(nil), "google.datastore.v1beta3.PropertyReference") + proto.RegisterType((*Projection)(nil), "google.datastore.v1beta3.Projection") + proto.RegisterType((*PropertyOrder)(nil), "google.datastore.v1beta3.PropertyOrder") + proto.RegisterType((*Filter)(nil), "google.datastore.v1beta3.Filter") + proto.RegisterType((*CompositeFilter)(nil), "google.datastore.v1beta3.CompositeFilter") + proto.RegisterType((*PropertyFilter)(nil), "google.datastore.v1beta3.PropertyFilter") + proto.RegisterType((*GqlQuery)(nil), "google.datastore.v1beta3.GqlQuery") + proto.RegisterType((*GqlQueryParameter)(nil), "google.datastore.v1beta3.GqlQueryParameter") + proto.RegisterType((*QueryResultBatch)(nil), "google.datastore.v1beta3.QueryResultBatch") + proto.RegisterEnum("google.datastore.v1beta3.EntityResult_ResultType", EntityResult_ResultType_name, EntityResult_ResultType_value) + proto.RegisterEnum("google.datastore.v1beta3.PropertyOrder_Direction", PropertyOrder_Direction_name, PropertyOrder_Direction_value) + proto.RegisterEnum("google.datastore.v1beta3.CompositeFilter_Operator", CompositeFilter_Operator_name, CompositeFilter_Operator_value) + proto.RegisterEnum("google.datastore.v1beta3.PropertyFilter_Operator", PropertyFilter_Operator_name, PropertyFilter_Operator_value) + proto.RegisterEnum("google.datastore.v1beta3.QueryResultBatch_MoreResultsType", QueryResultBatch_MoreResultsType_name, QueryResultBatch_MoreResultsType_value) +} + +func init() { proto.RegisterFile("google/datastore/v1beta3/query.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 1312 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcb, 0x6e, 0xdb, 0x46, + 0x17, 0x36, 0x29, 0xc9, 0x97, 0xa3, 0x1b, 0x33, 0xf9, 0xff, 0x94, 0x71, 0x2e, 0x75, 0x88, 0xa4, + 0x51, 0x50, 0x54, 0x82, 0x15, 0x04, 0x0d, 0xd2, 0x76, 0xa1, 0x0b, 0x6d, 0xab, 0x91, 0x45, 0x65, + 0x24, 0x1b, 0x48, 0x91, 0x82, 0xa0, 0xa5, 0xb1, 0xc2, 0x86, 0x22, 0x99, 0xe1, 0x38, 0x89, 0xdf, + 0xa2, 0x9b, 0x02, 0x7d, 0x86, 0x3e, 0x45, 0x17, 0xdd, 0x76, 0xdb, 0x6d, 0x1f, 0xa0, 0x9b, 0xbe, + 0x41, 0x0b, 0xce, 0x0c, 0x75, 0x73, 0x14, 0xb9, 0x40, 0x76, 0x9a, 0x33, 0xdf, 0xf7, 0x9d, 0x99, + 0x8f, 0x67, 0x66, 0x8e, 0xe0, 0xee, 0x28, 0x08, 0x46, 0x1e, 0xa9, 0x0c, 0x1d, 0xe6, 0x44, 0x2c, + 0xa0, 0xa4, 0xf2, 0x66, 0xf7, 0x84, 0x30, 0xe7, 0x61, 0xe5, 0xf5, 0x19, 0xa1, 0xe7, 0xe5, 0x90, + 0x06, 0x2c, 0x40, 0xba, 0x40, 0x95, 0x27, 0xa8, 0xb2, 0x44, 0x6d, 0xdf, 0x94, 0x7c, 0x27, 0x74, + 0x2b, 0x8e, 0xef, 0x07, 0xcc, 0x61, 0x6e, 0xe0, 0x47, 0x82, 0xb7, 0x7d, 0x6f, 0xa9, 0x3a, 0xf1, + 0x99, 0xcb, 0xa4, 0xfc, 0xf6, 0x6d, 0x09, 0xe3, 0xa3, 0x93, 0xb3, 0xd3, 0xca, 0x5b, 0xea, 0x84, + 0x21, 0xa1, 0x89, 0x8c, 0x4c, 0x5f, 0x61, 0xe7, 0x21, 0xa9, 0x78, 0x0e, 0xf3, 0xfc, 0x91, 0x98, + 0x31, 0x7e, 0x57, 0x20, 0x67, 0x72, 0x29, 0x4c, 0xa2, 0x33, 0x8f, 0xa1, 0xc7, 0xb0, 0x2e, 0xa4, + 0x75, 0x65, 0x47, 0x29, 0x65, 0xab, 0x3b, 0xe5, 0x65, 0x4b, 0x2f, 0x4b, 0x9e, 0xc4, 0x23, 0x1d, + 0x36, 0xde, 0x10, 0x1a, 0xb9, 0x81, 0xaf, 0xa7, 0x77, 0x94, 0x52, 0x0a, 0x27, 0x43, 0x74, 0x0d, + 0xd6, 0x07, 0x67, 0x34, 0x0a, 0xa8, 0x9e, 0xda, 0x51, 0x4a, 0x39, 0x2c, 0x47, 0xc6, 0x33, 0x00, + 0x91, 0xb5, 0x7f, 0x1e, 0x12, 0x74, 0x03, 0x3e, 0xc1, 0x66, 0xef, 0xa8, 0xdd, 0xb7, 0xfb, 0xcf, + 0xbb, 0xa6, 0x7d, 0xd4, 0xe9, 0x75, 0xcd, 0x46, 0x6b, 0xaf, 0x65, 0x36, 0xb5, 0x35, 0xb4, 0x09, + 0xe9, 0xbd, 0xa3, 0x76, 0x5b, 0x53, 0x50, 0x01, 0xa0, 0x8b, 0xad, 0x6f, 0xcd, 0x46, 0xbf, 0x65, + 0x75, 0x34, 0x15, 0xe5, 0x60, 0xf3, 0xa9, 0xf9, 0xdc, 0xb6, 0x3a, 0xed, 0xe7, 0x5a, 0xca, 0xf8, + 0x33, 0x05, 0x99, 0x67, 0xb1, 0xf1, 0xa8, 0x09, 0x10, 0xd2, 0xe0, 0x07, 0x32, 0x88, 0xfd, 0xd4, + 0xd5, 0x9d, 0x54, 0x29, 0x5b, 0xbd, 0xbb, 0x7c, 0x33, 0xdd, 0x09, 0x16, 0xcf, 0xf0, 0xd0, 0xd7, + 0x90, 0x7e, 0xe5, 0xfa, 0x43, 0x3d, 0xc5, 0xf9, 0xa5, 0xe5, 0xfc, 0xa7, 0xae, 0x3f, 0x34, 0xdf, + 0x85, 0x94, 0x44, 0xf1, 0x96, 0x31, 0x67, 0xc5, 0x66, 0x9e, 0xba, 0x1e, 0x23, 0x94, 0x3b, 0xf2, + 0x41, 0x33, 0xf7, 0x38, 0x0e, 0x4b, 0x3c, 0xfa, 0x06, 0x32, 0x01, 0x1d, 0x12, 0xaa, 0x67, 0x78, + 0xe2, 0xfb, 0x1f, 0x5c, 0x78, 0x48, 0x28, 0x3b, 0xb7, 0x62, 0x38, 0x16, 0x2c, 0xd4, 0x86, 0xec, + 0xd0, 0x8d, 0x98, 0xeb, 0x0f, 0x98, 0x1d, 0xf8, 0xfa, 0x3a, 0x17, 0xf9, 0x7c, 0xb5, 0x08, 0x26, + 0xa7, 0x84, 0x12, 0x7f, 0x40, 0x30, 0x24, 0x7c, 0xcb, 0x47, 0x77, 0x20, 0x17, 0x31, 0x87, 0x32, + 0x5b, 0x7e, 0xc5, 0x0d, 0xfe, 0x15, 0xb3, 0x3c, 0xd6, 0xe0, 0x21, 0x74, 0x0b, 0x80, 0xf8, 0xc3, + 0x04, 0xb0, 0xc9, 0x01, 0x5b, 0xc4, 0x1f, 0xca, 0xe9, 0x6b, 0xb0, 0x1e, 0x9c, 0x9e, 0x46, 0x84, + 0xe9, 0xb0, 0xa3, 0x94, 0x32, 0x58, 0x8e, 0xd0, 0x2e, 0x64, 0x3c, 0x77, 0xec, 0x32, 0x3d, 0xc7, + 0xfd, 0xb9, 0x91, 0xac, 0x30, 0x29, 0xe4, 0x72, 0xcb, 0x67, 0x0f, 0xab, 0xc7, 0x8e, 0x77, 0x46, + 0xb0, 0x40, 0x1a, 0x77, 0xa1, 0x30, 0xef, 0x35, 0x42, 0x90, 0xf6, 0x9d, 0x31, 0xe1, 0x05, 0xbb, + 0x85, 0xf9, 0x6f, 0xe3, 0x3e, 0x5c, 0xb9, 0xb0, 0xa7, 0x09, 0x50, 0x9d, 0x01, 0x1e, 0x01, 0x4c, + 0x3f, 0x3d, 0xda, 0x87, 0xcd, 0x50, 0xd2, 0x64, 0xfd, 0xff, 0x27, 0xd3, 0x26, 0x64, 0xe3, 0x6f, + 0x05, 0xf2, 0x73, 0x5f, 0xe6, 0xa3, 0x49, 0x23, 0x0b, 0xb6, 0x86, 0x2e, 0x9d, 0xd4, 0xb5, 0x52, + 0x2a, 0x54, 0x77, 0x2f, 0x59, 0x1e, 0xe5, 0x66, 0x42, 0xc4, 0x53, 0x0d, 0xc3, 0x84, 0xad, 0x49, + 0x1c, 0x5d, 0x87, 0xff, 0x37, 0x5b, 0x58, 0x9c, 0xae, 0x85, 0x33, 0x98, 0x87, 0xad, 0x5a, 0xaf, + 0x61, 0x76, 0x9a, 0xad, 0xce, 0xbe, 0x38, 0x88, 0x4d, 0x73, 0x32, 0x56, 0x8d, 0xdf, 0x14, 0x58, + 0x17, 0x55, 0x8c, 0x8e, 0x41, 0x1b, 0x04, 0xe3, 0x30, 0x88, 0x5c, 0x46, 0x6c, 0x79, 0x02, 0xc4, + 0x9e, 0x1f, 0x2c, 0x5f, 0x69, 0x23, 0x61, 0x08, 0x91, 0x83, 0x35, 0x5c, 0x1c, 0xcc, 0x87, 0x50, + 0x0f, 0x8a, 0x89, 0x0d, 0x89, 0xac, 0xca, 0x65, 0x4b, 0xab, 0x0d, 0x98, 0xa8, 0x16, 0xc2, 0xb9, + 0x48, 0x3d, 0x0f, 0x59, 0xa1, 0x65, 0xc7, 0xd7, 0xa3, 0xf1, 0xab, 0x02, 0xc5, 0x85, 0xa5, 0xa0, + 0x3a, 0xa8, 0x41, 0xc8, 0x77, 0x50, 0xa8, 0x56, 0x2f, 0xbd, 0x83, 0xb2, 0x15, 0x12, 0xea, 0xb0, + 0x80, 0x62, 0x35, 0x08, 0xd1, 0x13, 0xd8, 0x10, 0x69, 0x22, 0x79, 0x19, 0xad, 0xbe, 0x0c, 0x12, + 0x82, 0xf1, 0x05, 0x6c, 0x26, 0x5a, 0x48, 0x87, 0xff, 0x59, 0x5d, 0x13, 0xd7, 0xfa, 0x16, 0x5e, + 0xf8, 0x3e, 0x1b, 0x90, 0xaa, 0x75, 0x9a, 0x9a, 0x62, 0xfc, 0xa5, 0x42, 0x61, 0x7e, 0xdb, 0x1f, + 0xaf, 0xfa, 0x6a, 0xdc, 0x8a, 0x4b, 0x97, 0xdd, 0xfb, 0x9c, 0x78, 0x04, 0x99, 0x37, 0xf1, 0x89, + 0xe6, 0xaf, 0x41, 0xb6, 0xfa, 0xe9, 0x72, 0x15, 0x79, 0xf0, 0x39, 0xda, 0xf8, 0x49, 0xb9, 0x94, + 0x0b, 0x79, 0xd8, 0x6a, 0x9b, 0xbd, 0x9e, 0xdd, 0x3f, 0xa8, 0x75, 0x34, 0x05, 0x5d, 0x03, 0x34, + 0x19, 0xda, 0x16, 0xb6, 0xcd, 0x67, 0x47, 0xb5, 0xb6, 0xa6, 0x22, 0x0d, 0x72, 0xfb, 0xd8, 0xac, + 0xf5, 0x4d, 0x2c, 0x90, 0xa9, 0xb8, 0xf2, 0x67, 0x23, 0x53, 0x70, 0x1a, 0x6d, 0x41, 0x46, 0xfc, + 0xcc, 0xc4, 0xbc, 0x83, 0x5a, 0xcf, 0xae, 0x75, 0x1a, 0x66, 0xaf, 0x6f, 0x61, 0x2d, 0x6b, 0xfc, + 0xa3, 0xc2, 0xe6, 0xfe, 0x6b, 0x4f, 0xbc, 0x3a, 0x77, 0x20, 0xc7, 0xdf, 0x7d, 0x3b, 0x62, 0xd4, + 0xf5, 0x47, 0xf2, 0x4e, 0xca, 0xf2, 0x58, 0x8f, 0x87, 0xd0, 0x3d, 0x28, 0x38, 0x9e, 0x17, 0xbc, + 0xb5, 0x3d, 0x97, 0x11, 0xea, 0x78, 0x11, 0x77, 0x73, 0x13, 0xe7, 0x79, 0xb4, 0x2d, 0x83, 0xe8, + 0x05, 0x14, 0xe2, 0x0b, 0x6a, 0x68, 0x9f, 0xb8, 0xfe, 0xd0, 0xf5, 0x47, 0x91, 0x7c, 0x0a, 0x1e, + 0x2d, 0xb7, 0x2b, 0x59, 0x45, 0xb9, 0x13, 0x13, 0xeb, 0x92, 0x67, 0xfa, 0x8c, 0x9e, 0xe3, 0xbc, + 0x3f, 0x1b, 0x43, 0x2f, 0xe0, 0x2a, 0x2f, 0x55, 0x37, 0xf0, 0x1d, 0x6f, 0x9a, 0x22, 0xbd, 0xea, + 0xa1, 0x48, 0x52, 0x74, 0x1d, 0xea, 0x8c, 0x49, 0x5c, 0xa4, 0x68, 0xaa, 0x93, 0xa8, 0x6f, 0x8f, + 0x01, 0x5d, 0x5c, 0x02, 0xd2, 0x20, 0xf5, 0x8a, 0x9c, 0x4b, 0x4b, 0xe2, 0x9f, 0xa8, 0x96, 0x54, + 0x82, 0xba, 0xaa, 0x24, 0x2f, 0xe6, 0x15, 0xcc, 0x27, 0xea, 0x63, 0xc5, 0x78, 0x07, 0x57, 0x2e, + 0xcc, 0xa3, 0x2f, 0xe7, 0xb5, 0x57, 0x55, 0xd9, 0xc1, 0x9a, 0x54, 0x44, 0xfa, 0x7c, 0xb7, 0x72, + 0xb0, 0x96, 0xf4, 0x2b, 0x75, 0x0d, 0x0a, 0x61, 0xa2, 0x2f, 0x2e, 0x8b, 0x3f, 0xd2, 0xa0, 0xf1, + 0xbc, 0xa2, 0x8f, 0xa9, 0x3b, 0x6c, 0xf0, 0x12, 0xdd, 0x87, 0x62, 0xf4, 0xca, 0x0d, 0x43, 0x32, + 0xb4, 0x29, 0x0f, 0x47, 0xfa, 0x3a, 0x7f, 0xf5, 0x0a, 0x32, 0x2c, 0xc0, 0x51, 0x5c, 0x09, 0x09, + 0x70, 0xae, 0x3f, 0xca, 0xcb, 0xa8, 0x7c, 0x3c, 0x6d, 0x40, 0xa2, 0xc5, 0x92, 0x72, 0x3c, 0xb5, + 0xbc, 0x8d, 0x76, 0x57, 0xb6, 0x67, 0x9c, 0x52, 0x9e, 0xf6, 0x59, 0x58, 0x23, 0x33, 0x13, 0xbc, + 0xf3, 0x3a, 0x84, 0xc2, 0x5c, 0x82, 0xe4, 0x86, 0xfa, 0xec, 0x72, 0xe2, 0x38, 0x3f, 0xab, 0x18, + 0x2d, 0xf4, 0x02, 0xe9, 0xc5, 0x5e, 0xe0, 0x7b, 0xc8, 0x8d, 0x03, 0x4a, 0x26, 0xb9, 0x32, 0x7c, + 0x23, 0x4f, 0x96, 0xe7, 0x5a, 0x34, 0xb8, 0x7c, 0x18, 0x50, 0x22, 0x93, 0xf1, 0x1d, 0x65, 0xc7, + 0xd3, 0x00, 0x7a, 0x00, 0x5a, 0xe4, 0x3b, 0x61, 0xf4, 0x32, 0x60, 0x76, 0xd2, 0x8f, 0x6e, 0xf0, + 0x7e, 0xb4, 0x98, 0xc4, 0x8f, 0x45, 0xd8, 0xf8, 0x59, 0x81, 0xe2, 0x82, 0x16, 0xba, 0x03, 0xb7, + 0x0e, 0x2d, 0x6c, 0xda, 0xa2, 0x15, 0xed, 0xbd, 0xaf, 0x17, 0xd5, 0x20, 0xd7, 0xb1, 0xfa, 0xf6, + 0x5e, 0xab, 0xd3, 0xea, 0x1d, 0x98, 0x4d, 0x4d, 0x41, 0x37, 0x41, 0x9f, 0x23, 0xd5, 0xf6, 0xe2, + 0x5b, 0xa4, 0xdd, 0x3a, 0x6c, 0xf5, 0x35, 0x15, 0xdd, 0x82, 0xeb, 0xef, 0x99, 0x6d, 0x1c, 0xe1, + 0x9e, 0x85, 0xb5, 0x34, 0xba, 0x0a, 0xc5, 0x8e, 0x65, 0xcf, 0x22, 0xb4, 0x54, 0xfd, 0x47, 0x05, + 0x6e, 0x0e, 0x82, 0xf1, 0x52, 0x53, 0xea, 0x20, 0xca, 0x3d, 0xee, 0x93, 0xba, 0xca, 0x77, 0x35, + 0x89, 0x1b, 0x05, 0x9e, 0xe3, 0x8f, 0xca, 0x01, 0x1d, 0x55, 0x46, 0xc4, 0xe7, 0x5d, 0x54, 0x45, + 0x4c, 0x39, 0xa1, 0x1b, 0x5d, 0xfc, 0x1b, 0xf1, 0xd5, 0x24, 0xf2, 0x8b, 0x7a, 0x7b, 0x5f, 0x68, + 0x34, 0xbc, 0xe0, 0x6c, 0x58, 0x6e, 0x4e, 0x32, 0x1e, 0xef, 0xd6, 0x63, 0xe8, 0xc9, 0x3a, 0x97, + 0x7b, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xc8, 0xc3, 0x34, 0xf2, 0x0c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/cloudbuild/v1/cloudbuild.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/cloudbuild/v1/cloudbuild.pb.go new file mode 100644 index 0000000..9721b6c --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/cloudbuild/v1/cloudbuild.pb.go @@ -0,0 +1,2049 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/cloudbuild/v1/cloudbuild.proto +// DO NOT EDIT! + +/* +Package cloudbuild is a generated protocol buffer package. + +It is generated from these files: + google/devtools/cloudbuild/v1/cloudbuild.proto + +It has these top-level messages: + StorageSource + RepoSource + Source + BuiltImage + BuildStep + Results + Build + BuildOperationMetadata + SourceProvenance + FileHashes + Hash + CreateBuildRequest + GetBuildRequest + ListBuildsRequest + ListBuildsResponse + CancelBuildRequest + BuildTrigger + CreateBuildTriggerRequest + GetBuildTriggerRequest + ListBuildTriggersRequest + ListBuildTriggersResponse + DeleteBuildTriggerRequest + UpdateBuildTriggerRequest + BuildOptions +*/ +package cloudbuild + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Possible status of a build. +type Build_Status int32 + +const ( + // Status of the build is unknown. + Build_STATUS_UNKNOWN Build_Status = 0 + // Build is queued; work has not yet begun. + Build_QUEUED Build_Status = 1 + // Build is being executed. + Build_WORKING Build_Status = 2 + // Build finished successfully. + Build_SUCCESS Build_Status = 3 + // Build failed to complete successfully. + Build_FAILURE Build_Status = 4 + // Build failed due to an internal cause. + Build_INTERNAL_ERROR Build_Status = 5 + // Build took longer than was allowed. + Build_TIMEOUT Build_Status = 6 + // Build was canceled by a user. + Build_CANCELLED Build_Status = 7 +) + +var Build_Status_name = map[int32]string{ + 0: "STATUS_UNKNOWN", + 1: "QUEUED", + 2: "WORKING", + 3: "SUCCESS", + 4: "FAILURE", + 5: "INTERNAL_ERROR", + 6: "TIMEOUT", + 7: "CANCELLED", +} +var Build_Status_value = map[string]int32{ + "STATUS_UNKNOWN": 0, + "QUEUED": 1, + "WORKING": 2, + "SUCCESS": 3, + "FAILURE": 4, + "INTERNAL_ERROR": 5, + "TIMEOUT": 6, + "CANCELLED": 7, +} + +func (x Build_Status) String() string { + return proto.EnumName(Build_Status_name, int32(x)) +} +func (Build_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } + +// Specifies the hash algorithm, if any. +type Hash_HashType int32 + +const ( + // No hash requested. + Hash_NONE Hash_HashType = 0 + // Use a sha256 hash. + Hash_SHA256 Hash_HashType = 1 +) + +var Hash_HashType_name = map[int32]string{ + 0: "NONE", + 1: "SHA256", +} +var Hash_HashType_value = map[string]int32{ + "NONE": 0, + "SHA256": 1, +} + +func (x Hash_HashType) String() string { + return proto.EnumName(Hash_HashType_name, int32(x)) +} +func (Hash_HashType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} } + +// Specifies the manner in which the build should be verified, if at all. +type BuildOptions_VerifyOption int32 + +const ( + // Not a verifiable build. (default) + BuildOptions_NOT_VERIFIED BuildOptions_VerifyOption = 0 + // Verified build. + BuildOptions_VERIFIED BuildOptions_VerifyOption = 1 +) + +var BuildOptions_VerifyOption_name = map[int32]string{ + 0: "NOT_VERIFIED", + 1: "VERIFIED", +} +var BuildOptions_VerifyOption_value = map[string]int32{ + "NOT_VERIFIED": 0, + "VERIFIED": 1, +} + +func (x BuildOptions_VerifyOption) String() string { + return proto.EnumName(BuildOptions_VerifyOption_name, int32(x)) +} +func (BuildOptions_VerifyOption) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{23, 0} +} + +// StorageSource describes the location of the source in an archive file in +// Google Cloud Storage. +type StorageSource struct { + // Google Cloud Storage bucket containing source (see + // [Bucket Name + // Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)). + Bucket string `protobuf:"bytes,1,opt,name=bucket" json:"bucket,omitempty"` + // Google Cloud Storage object containing source. + // + // This object must be a gzipped archive file (.tar.gz) containing source to + // build. + Object string `protobuf:"bytes,2,opt,name=object" json:"object,omitempty"` + // Google Cloud Storage generation for the object. If the generation is + // omitted, the latest generation will be used. + Generation int64 `protobuf:"varint,3,opt,name=generation" json:"generation,omitempty"` +} + +func (m *StorageSource) Reset() { *m = StorageSource{} } +func (m *StorageSource) String() string { return proto.CompactTextString(m) } +func (*StorageSource) ProtoMessage() {} +func (*StorageSource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *StorageSource) GetBucket() string { + if m != nil { + return m.Bucket + } + return "" +} + +func (m *StorageSource) GetObject() string { + if m != nil { + return m.Object + } + return "" +} + +func (m *StorageSource) GetGeneration() int64 { + if m != nil { + return m.Generation + } + return 0 +} + +// RepoSource describes the location of the source in a Google Cloud Source +// Repository. +type RepoSource struct { + // ID of the project that owns the repo. If omitted, the project ID requesting + // the build is assumed. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Name of the repo. If omitted, the name "default" is assumed. + RepoName string `protobuf:"bytes,2,opt,name=repo_name,json=repoName" json:"repo_name,omitempty"` + // A revision within the source repository must be specified in + // one of these ways. + // + // Types that are valid to be assigned to Revision: + // *RepoSource_BranchName + // *RepoSource_TagName + // *RepoSource_CommitSha + Revision isRepoSource_Revision `protobuf_oneof:"revision"` +} + +func (m *RepoSource) Reset() { *m = RepoSource{} } +func (m *RepoSource) String() string { return proto.CompactTextString(m) } +func (*RepoSource) ProtoMessage() {} +func (*RepoSource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isRepoSource_Revision interface { + isRepoSource_Revision() +} + +type RepoSource_BranchName struct { + BranchName string `protobuf:"bytes,3,opt,name=branch_name,json=branchName,oneof"` +} +type RepoSource_TagName struct { + TagName string `protobuf:"bytes,4,opt,name=tag_name,json=tagName,oneof"` +} +type RepoSource_CommitSha struct { + CommitSha string `protobuf:"bytes,5,opt,name=commit_sha,json=commitSha,oneof"` +} + +func (*RepoSource_BranchName) isRepoSource_Revision() {} +func (*RepoSource_TagName) isRepoSource_Revision() {} +func (*RepoSource_CommitSha) isRepoSource_Revision() {} + +func (m *RepoSource) GetRevision() isRepoSource_Revision { + if m != nil { + return m.Revision + } + return nil +} + +func (m *RepoSource) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RepoSource) GetRepoName() string { + if m != nil { + return m.RepoName + } + return "" +} + +func (m *RepoSource) GetBranchName() string { + if x, ok := m.GetRevision().(*RepoSource_BranchName); ok { + return x.BranchName + } + return "" +} + +func (m *RepoSource) GetTagName() string { + if x, ok := m.GetRevision().(*RepoSource_TagName); ok { + return x.TagName + } + return "" +} + +func (m *RepoSource) GetCommitSha() string { + if x, ok := m.GetRevision().(*RepoSource_CommitSha); ok { + return x.CommitSha + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RepoSource) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RepoSource_OneofMarshaler, _RepoSource_OneofUnmarshaler, _RepoSource_OneofSizer, []interface{}{ + (*RepoSource_BranchName)(nil), + (*RepoSource_TagName)(nil), + (*RepoSource_CommitSha)(nil), + } +} + +func _RepoSource_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RepoSource) + // revision + switch x := m.Revision.(type) { + case *RepoSource_BranchName: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.BranchName) + case *RepoSource_TagName: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.TagName) + case *RepoSource_CommitSha: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CommitSha) + case nil: + default: + return fmt.Errorf("RepoSource.Revision has unexpected type %T", x) + } + return nil +} + +func _RepoSource_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RepoSource) + switch tag { + case 3: // revision.branch_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &RepoSource_BranchName{x} + return true, err + case 4: // revision.tag_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &RepoSource_TagName{x} + return true, err + case 5: // revision.commit_sha + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &RepoSource_CommitSha{x} + return true, err + default: + return false, nil + } +} + +func _RepoSource_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RepoSource) + // revision + switch x := m.Revision.(type) { + case *RepoSource_BranchName: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.BranchName))) + n += len(x.BranchName) + case *RepoSource_TagName: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.TagName))) + n += len(x.TagName) + case *RepoSource_CommitSha: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CommitSha))) + n += len(x.CommitSha) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Source describes the location of the source in a supported storage +// service. +type Source struct { + // Describes location of source. + // + // Types that are valid to be assigned to Source: + // *Source_StorageSource + // *Source_RepoSource + Source isSource_Source `protobuf_oneof:"source"` +} + +func (m *Source) Reset() { *m = Source{} } +func (m *Source) String() string { return proto.CompactTextString(m) } +func (*Source) ProtoMessage() {} +func (*Source) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isSource_Source interface { + isSource_Source() +} + +type Source_StorageSource struct { + StorageSource *StorageSource `protobuf:"bytes,2,opt,name=storage_source,json=storageSource,oneof"` +} +type Source_RepoSource struct { + RepoSource *RepoSource `protobuf:"bytes,3,opt,name=repo_source,json=repoSource,oneof"` +} + +func (*Source_StorageSource) isSource_Source() {} +func (*Source_RepoSource) isSource_Source() {} + +func (m *Source) GetSource() isSource_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *Source) GetStorageSource() *StorageSource { + if x, ok := m.GetSource().(*Source_StorageSource); ok { + return x.StorageSource + } + return nil +} + +func (m *Source) GetRepoSource() *RepoSource { + if x, ok := m.GetSource().(*Source_RepoSource); ok { + return x.RepoSource + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Source) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Source_OneofMarshaler, _Source_OneofUnmarshaler, _Source_OneofSizer, []interface{}{ + (*Source_StorageSource)(nil), + (*Source_RepoSource)(nil), + } +} + +func _Source_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Source) + // source + switch x := m.Source.(type) { + case *Source_StorageSource: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StorageSource); err != nil { + return err + } + case *Source_RepoSource: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepoSource); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Source.Source has unexpected type %T", x) + } + return nil +} + +func _Source_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Source) + switch tag { + case 2: // source.storage_source + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StorageSource) + err := b.DecodeMessage(msg) + m.Source = &Source_StorageSource{msg} + return true, err + case 3: // source.repo_source + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RepoSource) + err := b.DecodeMessage(msg) + m.Source = &Source_RepoSource{msg} + return true, err + default: + return false, nil + } +} + +func _Source_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Source) + // source + switch x := m.Source.(type) { + case *Source_StorageSource: + s := proto.Size(x.StorageSource) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Source_RepoSource: + s := proto.Size(x.RepoSource) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// BuiltImage describes an image built by the pipeline. +type BuiltImage struct { + // Name used to push the container image to Google Container Registry, as + // presented to `docker push`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Docker Registry 2.0 digest. + Digest string `protobuf:"bytes,3,opt,name=digest" json:"digest,omitempty"` +} + +func (m *BuiltImage) Reset() { *m = BuiltImage{} } +func (m *BuiltImage) String() string { return proto.CompactTextString(m) } +func (*BuiltImage) ProtoMessage() {} +func (*BuiltImage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *BuiltImage) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *BuiltImage) GetDigest() string { + if m != nil { + return m.Digest + } + return "" +} + +// BuildStep describes a step to perform in the build pipeline. +type BuildStep struct { + // The name of the container image that will run this particular build step. + // + // If the image is already available in the host's Docker daemon's cache, it + // will be run directly. If not, the host will attempt to pull the image + // first, using the builder service account's credentials if necessary. + // + // The Docker daemon's cache will already have the latest versions of all of + // the officially supported build steps + // (https://github.com/GoogleCloudPlatform/cloud-builders). The Docker daemon + // will also have cached many of the layers for some popular images, like + // "ubuntu", "debian", but they will be refreshed at the time you attempt to + // use them. + // + // If you built an image in a previous build step, it will be stored in the + // host's Docker daemon's cache and is available to use as the name for a + // later build step. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A list of environment variable definitions to be used when running a step. + // + // The elements are of the form "KEY=VALUE" for the environment variable "KEY" + // being given the value "VALUE". + Env []string `protobuf:"bytes,2,rep,name=env" json:"env,omitempty"` + // A list of arguments that will be presented to the step when it is started. + // + // If the image used to run the step's container has an entrypoint, these args + // will be used as arguments to that entrypoint. If the image does not define + // an entrypoint, the first element in args will be used as the entrypoint, + // and the remainder will be used as arguments. + Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` + // Working directory (relative to project source root) to use when running + // this operation's container. + Dir string `protobuf:"bytes,4,opt,name=dir" json:"dir,omitempty"` + // Optional unique identifier for this build step, used in wait_for to + // reference this build step as a dependency. + Id string `protobuf:"bytes,5,opt,name=id" json:"id,omitempty"` + // The ID(s) of the step(s) that this build step depends on. + // This build step will not start until all the build steps in wait_for + // have completed successfully. If wait_for is empty, this build step will + // start when all previous build steps in the Build.Steps list have completed + // successfully. + WaitFor []string `protobuf:"bytes,6,rep,name=wait_for,json=waitFor" json:"wait_for,omitempty"` + // Optional entrypoint to be used instead of the build step image's default + // If unset, the image's default will be used. + Entrypoint string `protobuf:"bytes,7,opt,name=entrypoint" json:"entrypoint,omitempty"` +} + +func (m *BuildStep) Reset() { *m = BuildStep{} } +func (m *BuildStep) String() string { return proto.CompactTextString(m) } +func (*BuildStep) ProtoMessage() {} +func (*BuildStep) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *BuildStep) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *BuildStep) GetEnv() []string { + if m != nil { + return m.Env + } + return nil +} + +func (m *BuildStep) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *BuildStep) GetDir() string { + if m != nil { + return m.Dir + } + return "" +} + +func (m *BuildStep) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *BuildStep) GetWaitFor() []string { + if m != nil { + return m.WaitFor + } + return nil +} + +func (m *BuildStep) GetEntrypoint() string { + if m != nil { + return m.Entrypoint + } + return "" +} + +// Results describes the artifacts created by the build pipeline. +type Results struct { + // Images that were built as a part of the build. + Images []*BuiltImage `protobuf:"bytes,2,rep,name=images" json:"images,omitempty"` + // List of build step digests, in order corresponding to build step indices. + BuildStepImages []string `protobuf:"bytes,3,rep,name=build_step_images,json=buildStepImages" json:"build_step_images,omitempty"` +} + +func (m *Results) Reset() { *m = Results{} } +func (m *Results) String() string { return proto.CompactTextString(m) } +func (*Results) ProtoMessage() {} +func (*Results) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *Results) GetImages() []*BuiltImage { + if m != nil { + return m.Images + } + return nil +} + +func (m *Results) GetBuildStepImages() []string { + if m != nil { + return m.BuildStepImages + } + return nil +} + +// A build resource in the Container Builder API. +// +// At a high level, a Build describes where to find source code, how to build +// it (for example, the builder image to run on the source), and what tag to +// apply to the built image when it is pushed to Google Container Registry. +// +// Fields can include the following variables which will be expanded when the +// build is created: +// +// - $PROJECT_ID: the project ID of the build. +// - $BUILD_ID: the autogenerated ID of the build. +// - $REPO_NAME: the source repository name specified by RepoSource. +// - $BRANCH_NAME: the branch name specified by RepoSource. +// - $TAG_NAME: the tag name specified by RepoSource. +// - $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or +// resolved from the specified branch or tag. +type Build struct { + // Unique identifier of the build. + // @OutputOnly + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // ID of the project. + // @OutputOnly. + ProjectId string `protobuf:"bytes,16,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Status of the build. + // @OutputOnly + Status Build_Status `protobuf:"varint,2,opt,name=status,enum=google.devtools.cloudbuild.v1.Build_Status" json:"status,omitempty"` + // Customer-readable message about the current status. + // @OutputOnly + StatusDetail string `protobuf:"bytes,24,opt,name=status_detail,json=statusDetail" json:"status_detail,omitempty"` + // Describes where to find the source files to build. + Source *Source `protobuf:"bytes,3,opt,name=source" json:"source,omitempty"` + // Describes the operations to be performed on the workspace. + Steps []*BuildStep `protobuf:"bytes,11,rep,name=steps" json:"steps,omitempty"` + // Results of the build. + // @OutputOnly + Results *Results `protobuf:"bytes,10,opt,name=results" json:"results,omitempty"` + // Time at which the request to create the build was received. + // @OutputOnly + CreateTime *google_protobuf4.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Time at which execution of the build was started. + // @OutputOnly + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time at which execution of the build was finished. + // + // The difference between finish_time and start_time is the duration of the + // build's execution. + // @OutputOnly + FinishTime *google_protobuf4.Timestamp `protobuf:"bytes,8,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` + // Amount of time that this build should be allowed to run, to second + // granularity. If this amount of time elapses, work on the build will cease + // and the build status will be TIMEOUT. + // + // Default time is ten minutes. + Timeout *google_protobuf3.Duration `protobuf:"bytes,12,opt,name=timeout" json:"timeout,omitempty"` + // A list of images to be pushed upon the successful completion of all build + // steps. + // + // The images will be pushed using the builder service account's credentials. + // + // The digests of the pushed images will be stored in the Build resource's + // results field. + // + // If any of the images fail to be pushed, the build is marked FAILURE. + Images []string `protobuf:"bytes,13,rep,name=images" json:"images,omitempty"` + // Google Cloud Storage bucket where logs should be written (see + // [Bucket Name + // Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)). + // Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`. + LogsBucket string `protobuf:"bytes,19,opt,name=logs_bucket,json=logsBucket" json:"logs_bucket,omitempty"` + // A permanent fixed identifier for source. + // @OutputOnly + SourceProvenance *SourceProvenance `protobuf:"bytes,21,opt,name=source_provenance,json=sourceProvenance" json:"source_provenance,omitempty"` + // The ID of the BuildTrigger that triggered this build, if it was + // triggered automatically. + // @OutputOnly + BuildTriggerId string `protobuf:"bytes,22,opt,name=build_trigger_id,json=buildTriggerId" json:"build_trigger_id,omitempty"` + // Special options for this build. + Options *BuildOptions `protobuf:"bytes,23,opt,name=options" json:"options,omitempty"` + // URL to logs for this build in Google Cloud Logging. + // @OutputOnly + LogUrl string `protobuf:"bytes,25,opt,name=log_url,json=logUrl" json:"log_url,omitempty"` + // Substitutions data for Build resource. + Substitutions map[string]string `protobuf:"bytes,29,rep,name=substitutions" json:"substitutions,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Build) Reset() { *m = Build{} } +func (m *Build) String() string { return proto.CompactTextString(m) } +func (*Build) ProtoMessage() {} +func (*Build) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *Build) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Build) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *Build) GetStatus() Build_Status { + if m != nil { + return m.Status + } + return Build_STATUS_UNKNOWN +} + +func (m *Build) GetStatusDetail() string { + if m != nil { + return m.StatusDetail + } + return "" +} + +func (m *Build) GetSource() *Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *Build) GetSteps() []*BuildStep { + if m != nil { + return m.Steps + } + return nil +} + +func (m *Build) GetResults() *Results { + if m != nil { + return m.Results + } + return nil +} + +func (m *Build) GetCreateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Build) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *Build) GetFinishTime() *google_protobuf4.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +func (m *Build) GetTimeout() *google_protobuf3.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +func (m *Build) GetImages() []string { + if m != nil { + return m.Images + } + return nil +} + +func (m *Build) GetLogsBucket() string { + if m != nil { + return m.LogsBucket + } + return "" +} + +func (m *Build) GetSourceProvenance() *SourceProvenance { + if m != nil { + return m.SourceProvenance + } + return nil +} + +func (m *Build) GetBuildTriggerId() string { + if m != nil { + return m.BuildTriggerId + } + return "" +} + +func (m *Build) GetOptions() *BuildOptions { + if m != nil { + return m.Options + } + return nil +} + +func (m *Build) GetLogUrl() string { + if m != nil { + return m.LogUrl + } + return "" +} + +func (m *Build) GetSubstitutions() map[string]string { + if m != nil { + return m.Substitutions + } + return nil +} + +// Metadata for build operations. +type BuildOperationMetadata struct { + // The build that the operation is tracking. + Build *Build `protobuf:"bytes,1,opt,name=build" json:"build,omitempty"` +} + +func (m *BuildOperationMetadata) Reset() { *m = BuildOperationMetadata{} } +func (m *BuildOperationMetadata) String() string { return proto.CompactTextString(m) } +func (*BuildOperationMetadata) ProtoMessage() {} +func (*BuildOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *BuildOperationMetadata) GetBuild() *Build { + if m != nil { + return m.Build + } + return nil +} + +// Provenance of the source. Ways to find the original source, or verify that +// some source was used for this build. +type SourceProvenance struct { + // A copy of the build's source.storage_source, if exists, with any + // generations resolved. + ResolvedStorageSource *StorageSource `protobuf:"bytes,3,opt,name=resolved_storage_source,json=resolvedStorageSource" json:"resolved_storage_source,omitempty"` + // A copy of the build's source.repo_source, if exists, with any + // revisions resolved. + ResolvedRepoSource *RepoSource `protobuf:"bytes,6,opt,name=resolved_repo_source,json=resolvedRepoSource" json:"resolved_repo_source,omitempty"` + // Hash(es) of the build source, which can be used to verify that the original + // source integrity was maintained in the build. Note that FileHashes will + // only be populated if BuildOptions has requested a SourceProvenanceHash. + // + // The keys to this map are file paths used as build source and the values + // contain the hash values for those files. + // + // If the build source came in a single package such as a gzipped tarfile + // (.tar.gz), the FileHash will be for the single path to that file. + // @OutputOnly + FileHashes map[string]*FileHashes `protobuf:"bytes,4,rep,name=file_hashes,json=fileHashes" json:"file_hashes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *SourceProvenance) Reset() { *m = SourceProvenance{} } +func (m *SourceProvenance) String() string { return proto.CompactTextString(m) } +func (*SourceProvenance) ProtoMessage() {} +func (*SourceProvenance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *SourceProvenance) GetResolvedStorageSource() *StorageSource { + if m != nil { + return m.ResolvedStorageSource + } + return nil +} + +func (m *SourceProvenance) GetResolvedRepoSource() *RepoSource { + if m != nil { + return m.ResolvedRepoSource + } + return nil +} + +func (m *SourceProvenance) GetFileHashes() map[string]*FileHashes { + if m != nil { + return m.FileHashes + } + return nil +} + +// Container message for hashes of byte content of files, used in +// SourceProvenance messages to verify integrity of source input to the build. +type FileHashes struct { + // Collection of file hashes. + FileHash []*Hash `protobuf:"bytes,1,rep,name=file_hash,json=fileHash" json:"file_hash,omitempty"` +} + +func (m *FileHashes) Reset() { *m = FileHashes{} } +func (m *FileHashes) String() string { return proto.CompactTextString(m) } +func (*FileHashes) ProtoMessage() {} +func (*FileHashes) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *FileHashes) GetFileHash() []*Hash { + if m != nil { + return m.FileHash + } + return nil +} + +// Container message for hash values. +type Hash struct { + // The type of hash that was performed. + Type Hash_HashType `protobuf:"varint,1,opt,name=type,enum=google.devtools.cloudbuild.v1.Hash_HashType" json:"type,omitempty"` + // The hash value. + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *Hash) Reset() { *m = Hash{} } +func (m *Hash) String() string { return proto.CompactTextString(m) } +func (*Hash) ProtoMessage() {} +func (*Hash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *Hash) GetType() Hash_HashType { + if m != nil { + return m.Type + } + return Hash_NONE +} + +func (m *Hash) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +// Request to create a new build. +type CreateBuildRequest struct { + // ID of the project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Build resource to create. + Build *Build `protobuf:"bytes,2,opt,name=build" json:"build,omitempty"` +} + +func (m *CreateBuildRequest) Reset() { *m = CreateBuildRequest{} } +func (m *CreateBuildRequest) String() string { return proto.CompactTextString(m) } +func (*CreateBuildRequest) ProtoMessage() {} +func (*CreateBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *CreateBuildRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateBuildRequest) GetBuild() *Build { + if m != nil { + return m.Build + } + return nil +} + +// Request to get a build. +type GetBuildRequest struct { + // ID of the project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // ID of the build. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` +} + +func (m *GetBuildRequest) Reset() { *m = GetBuildRequest{} } +func (m *GetBuildRequest) String() string { return proto.CompactTextString(m) } +func (*GetBuildRequest) ProtoMessage() {} +func (*GetBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *GetBuildRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetBuildRequest) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +// Request to list builds. +type ListBuildsRequest struct { + // ID of the project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Number of results to return in the list. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Token to provide to skip to a particular spot in the list. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The raw filter text to constrain the results. + Filter string `protobuf:"bytes,8,opt,name=filter" json:"filter,omitempty"` +} + +func (m *ListBuildsRequest) Reset() { *m = ListBuildsRequest{} } +func (m *ListBuildsRequest) String() string { return proto.CompactTextString(m) } +func (*ListBuildsRequest) ProtoMessage() {} +func (*ListBuildsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *ListBuildsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListBuildsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListBuildsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListBuildsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// Response including listed builds. +type ListBuildsResponse struct { + // Builds will be sorted by create_time, descending. + Builds []*Build `protobuf:"bytes,1,rep,name=builds" json:"builds,omitempty"` + // Token to receive the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListBuildsResponse) Reset() { *m = ListBuildsResponse{} } +func (m *ListBuildsResponse) String() string { return proto.CompactTextString(m) } +func (*ListBuildsResponse) ProtoMessage() {} +func (*ListBuildsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ListBuildsResponse) GetBuilds() []*Build { + if m != nil { + return m.Builds + } + return nil +} + +func (m *ListBuildsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request to cancel an ongoing build. +type CancelBuildRequest struct { + // ID of the project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // ID of the build. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` +} + +func (m *CancelBuildRequest) Reset() { *m = CancelBuildRequest{} } +func (m *CancelBuildRequest) String() string { return proto.CompactTextString(m) } +func (*CancelBuildRequest) ProtoMessage() {} +func (*CancelBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *CancelBuildRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CancelBuildRequest) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +// Configuration for an automated build in response to source repository +// changes. +type BuildTrigger struct { + // Unique identifier of the trigger. + // + // @OutputOnly + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // Human-readable description of this trigger. + Description string `protobuf:"bytes,10,opt,name=description" json:"description,omitempty"` + // Template describing the types of source changes to trigger a build. + // + // Branch and tag names in trigger templates are interpreted as regular + // expressions. Any branch or tag change that matches that regular expression + // will trigger a build. + TriggerTemplate *RepoSource `protobuf:"bytes,7,opt,name=trigger_template,json=triggerTemplate" json:"trigger_template,omitempty"` + // Template describing the Build request to make when the trigger is matched. + // + // Types that are valid to be assigned to BuildTemplate: + // *BuildTrigger_Build + // *BuildTrigger_Filename + BuildTemplate isBuildTrigger_BuildTemplate `protobuf_oneof:"build_template"` + // Time when the trigger was created. + // + // @OutputOnly + CreateTime *google_protobuf4.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // If true, the trigger will never result in a build. + Disabled bool `protobuf:"varint,9,opt,name=disabled" json:"disabled,omitempty"` + // Substitutions data for Build resource. + Substitutions map[string]string `protobuf:"bytes,11,rep,name=substitutions" json:"substitutions,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *BuildTrigger) Reset() { *m = BuildTrigger{} } +func (m *BuildTrigger) String() string { return proto.CompactTextString(m) } +func (*BuildTrigger) ProtoMessage() {} +func (*BuildTrigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +type isBuildTrigger_BuildTemplate interface { + isBuildTrigger_BuildTemplate() +} + +type BuildTrigger_Build struct { + Build *Build `protobuf:"bytes,4,opt,name=build,oneof"` +} +type BuildTrigger_Filename struct { + Filename string `protobuf:"bytes,8,opt,name=filename,oneof"` +} + +func (*BuildTrigger_Build) isBuildTrigger_BuildTemplate() {} +func (*BuildTrigger_Filename) isBuildTrigger_BuildTemplate() {} + +func (m *BuildTrigger) GetBuildTemplate() isBuildTrigger_BuildTemplate { + if m != nil { + return m.BuildTemplate + } + return nil +} + +func (m *BuildTrigger) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *BuildTrigger) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *BuildTrigger) GetTriggerTemplate() *RepoSource { + if m != nil { + return m.TriggerTemplate + } + return nil +} + +func (m *BuildTrigger) GetBuild() *Build { + if x, ok := m.GetBuildTemplate().(*BuildTrigger_Build); ok { + return x.Build + } + return nil +} + +func (m *BuildTrigger) GetFilename() string { + if x, ok := m.GetBuildTemplate().(*BuildTrigger_Filename); ok { + return x.Filename + } + return "" +} + +func (m *BuildTrigger) GetCreateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *BuildTrigger) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +func (m *BuildTrigger) GetSubstitutions() map[string]string { + if m != nil { + return m.Substitutions + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*BuildTrigger) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _BuildTrigger_OneofMarshaler, _BuildTrigger_OneofUnmarshaler, _BuildTrigger_OneofSizer, []interface{}{ + (*BuildTrigger_Build)(nil), + (*BuildTrigger_Filename)(nil), + } +} + +func _BuildTrigger_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*BuildTrigger) + // build_template + switch x := m.BuildTemplate.(type) { + case *BuildTrigger_Build: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Build); err != nil { + return err + } + case *BuildTrigger_Filename: + b.EncodeVarint(8<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Filename) + case nil: + default: + return fmt.Errorf("BuildTrigger.BuildTemplate has unexpected type %T", x) + } + return nil +} + +func _BuildTrigger_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*BuildTrigger) + switch tag { + case 4: // build_template.build + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Build) + err := b.DecodeMessage(msg) + m.BuildTemplate = &BuildTrigger_Build{msg} + return true, err + case 8: // build_template.filename + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.BuildTemplate = &BuildTrigger_Filename{x} + return true, err + default: + return false, nil + } +} + +func _BuildTrigger_OneofSizer(msg proto.Message) (n int) { + m := msg.(*BuildTrigger) + // build_template + switch x := m.BuildTemplate.(type) { + case *BuildTrigger_Build: + s := proto.Size(x.Build) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *BuildTrigger_Filename: + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Filename))) + n += len(x.Filename) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request to create a new BuildTrigger. +type CreateBuildTriggerRequest struct { + // ID of the project for which to configure automatic builds. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // BuildTrigger to create. + Trigger *BuildTrigger `protobuf:"bytes,2,opt,name=trigger" json:"trigger,omitempty"` +} + +func (m *CreateBuildTriggerRequest) Reset() { *m = CreateBuildTriggerRequest{} } +func (m *CreateBuildTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*CreateBuildTriggerRequest) ProtoMessage() {} +func (*CreateBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *CreateBuildTriggerRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateBuildTriggerRequest) GetTrigger() *BuildTrigger { + if m != nil { + return m.Trigger + } + return nil +} + +// Returns the BuildTrigger with the specified ID. +type GetBuildTriggerRequest struct { + // ID of the project that owns the trigger. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // ID of the BuildTrigger to get. + TriggerId string `protobuf:"bytes,2,opt,name=trigger_id,json=triggerId" json:"trigger_id,omitempty"` +} + +func (m *GetBuildTriggerRequest) Reset() { *m = GetBuildTriggerRequest{} } +func (m *GetBuildTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*GetBuildTriggerRequest) ProtoMessage() {} +func (*GetBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *GetBuildTriggerRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetBuildTriggerRequest) GetTriggerId() string { + if m != nil { + return m.TriggerId + } + return "" +} + +// Request to list existing BuildTriggers. +type ListBuildTriggersRequest struct { + // ID of the project for which to list BuildTriggers. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` +} + +func (m *ListBuildTriggersRequest) Reset() { *m = ListBuildTriggersRequest{} } +func (m *ListBuildTriggersRequest) String() string { return proto.CompactTextString(m) } +func (*ListBuildTriggersRequest) ProtoMessage() {} +func (*ListBuildTriggersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *ListBuildTriggersRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +// Response containing existing BuildTriggers. +type ListBuildTriggersResponse struct { + // BuildTriggers for the project, sorted by create_time descending. + Triggers []*BuildTrigger `protobuf:"bytes,1,rep,name=triggers" json:"triggers,omitempty"` +} + +func (m *ListBuildTriggersResponse) Reset() { *m = ListBuildTriggersResponse{} } +func (m *ListBuildTriggersResponse) String() string { return proto.CompactTextString(m) } +func (*ListBuildTriggersResponse) ProtoMessage() {} +func (*ListBuildTriggersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *ListBuildTriggersResponse) GetTriggers() []*BuildTrigger { + if m != nil { + return m.Triggers + } + return nil +} + +// Request to delete a BuildTrigger. +type DeleteBuildTriggerRequest struct { + // ID of the project that owns the trigger. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // ID of the BuildTrigger to delete. + TriggerId string `protobuf:"bytes,2,opt,name=trigger_id,json=triggerId" json:"trigger_id,omitempty"` +} + +func (m *DeleteBuildTriggerRequest) Reset() { *m = DeleteBuildTriggerRequest{} } +func (m *DeleteBuildTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteBuildTriggerRequest) ProtoMessage() {} +func (*DeleteBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *DeleteBuildTriggerRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteBuildTriggerRequest) GetTriggerId() string { + if m != nil { + return m.TriggerId + } + return "" +} + +// Request to update an existing BuildTrigger. +type UpdateBuildTriggerRequest struct { + // ID of the project that owns the trigger. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // ID of the BuildTrigger to update. + TriggerId string `protobuf:"bytes,2,opt,name=trigger_id,json=triggerId" json:"trigger_id,omitempty"` + // BuildTrigger to update. + Trigger *BuildTrigger `protobuf:"bytes,3,opt,name=trigger" json:"trigger,omitempty"` +} + +func (m *UpdateBuildTriggerRequest) Reset() { *m = UpdateBuildTriggerRequest{} } +func (m *UpdateBuildTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateBuildTriggerRequest) ProtoMessage() {} +func (*UpdateBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *UpdateBuildTriggerRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateBuildTriggerRequest) GetTriggerId() string { + if m != nil { + return m.TriggerId + } + return "" +} + +func (m *UpdateBuildTriggerRequest) GetTrigger() *BuildTrigger { + if m != nil { + return m.Trigger + } + return nil +} + +// Optional arguments to enable specific features of builds. +type BuildOptions struct { + // Requested hash for SourceProvenance. + SourceProvenanceHash []Hash_HashType `protobuf:"varint,1,rep,packed,name=source_provenance_hash,json=sourceProvenanceHash,enum=google.devtools.cloudbuild.v1.Hash_HashType" json:"source_provenance_hash,omitempty"` + // Requested verifiability options. + RequestedVerifyOption BuildOptions_VerifyOption `protobuf:"varint,2,opt,name=requested_verify_option,json=requestedVerifyOption,enum=google.devtools.cloudbuild.v1.BuildOptions_VerifyOption" json:"requested_verify_option,omitempty"` +} + +func (m *BuildOptions) Reset() { *m = BuildOptions{} } +func (m *BuildOptions) String() string { return proto.CompactTextString(m) } +func (*BuildOptions) ProtoMessage() {} +func (*BuildOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *BuildOptions) GetSourceProvenanceHash() []Hash_HashType { + if m != nil { + return m.SourceProvenanceHash + } + return nil +} + +func (m *BuildOptions) GetRequestedVerifyOption() BuildOptions_VerifyOption { + if m != nil { + return m.RequestedVerifyOption + } + return BuildOptions_NOT_VERIFIED +} + +func init() { + proto.RegisterType((*StorageSource)(nil), "google.devtools.cloudbuild.v1.StorageSource") + proto.RegisterType((*RepoSource)(nil), "google.devtools.cloudbuild.v1.RepoSource") + proto.RegisterType((*Source)(nil), "google.devtools.cloudbuild.v1.Source") + proto.RegisterType((*BuiltImage)(nil), "google.devtools.cloudbuild.v1.BuiltImage") + proto.RegisterType((*BuildStep)(nil), "google.devtools.cloudbuild.v1.BuildStep") + proto.RegisterType((*Results)(nil), "google.devtools.cloudbuild.v1.Results") + proto.RegisterType((*Build)(nil), "google.devtools.cloudbuild.v1.Build") + proto.RegisterType((*BuildOperationMetadata)(nil), "google.devtools.cloudbuild.v1.BuildOperationMetadata") + proto.RegisterType((*SourceProvenance)(nil), "google.devtools.cloudbuild.v1.SourceProvenance") + proto.RegisterType((*FileHashes)(nil), "google.devtools.cloudbuild.v1.FileHashes") + proto.RegisterType((*Hash)(nil), "google.devtools.cloudbuild.v1.Hash") + proto.RegisterType((*CreateBuildRequest)(nil), "google.devtools.cloudbuild.v1.CreateBuildRequest") + proto.RegisterType((*GetBuildRequest)(nil), "google.devtools.cloudbuild.v1.GetBuildRequest") + proto.RegisterType((*ListBuildsRequest)(nil), "google.devtools.cloudbuild.v1.ListBuildsRequest") + proto.RegisterType((*ListBuildsResponse)(nil), "google.devtools.cloudbuild.v1.ListBuildsResponse") + proto.RegisterType((*CancelBuildRequest)(nil), "google.devtools.cloudbuild.v1.CancelBuildRequest") + proto.RegisterType((*BuildTrigger)(nil), "google.devtools.cloudbuild.v1.BuildTrigger") + proto.RegisterType((*CreateBuildTriggerRequest)(nil), "google.devtools.cloudbuild.v1.CreateBuildTriggerRequest") + proto.RegisterType((*GetBuildTriggerRequest)(nil), "google.devtools.cloudbuild.v1.GetBuildTriggerRequest") + proto.RegisterType((*ListBuildTriggersRequest)(nil), "google.devtools.cloudbuild.v1.ListBuildTriggersRequest") + proto.RegisterType((*ListBuildTriggersResponse)(nil), "google.devtools.cloudbuild.v1.ListBuildTriggersResponse") + proto.RegisterType((*DeleteBuildTriggerRequest)(nil), "google.devtools.cloudbuild.v1.DeleteBuildTriggerRequest") + proto.RegisterType((*UpdateBuildTriggerRequest)(nil), "google.devtools.cloudbuild.v1.UpdateBuildTriggerRequest") + proto.RegisterType((*BuildOptions)(nil), "google.devtools.cloudbuild.v1.BuildOptions") + proto.RegisterEnum("google.devtools.cloudbuild.v1.Build_Status", Build_Status_name, Build_Status_value) + proto.RegisterEnum("google.devtools.cloudbuild.v1.Hash_HashType", Hash_HashType_name, Hash_HashType_value) + proto.RegisterEnum("google.devtools.cloudbuild.v1.BuildOptions_VerifyOption", BuildOptions_VerifyOption_name, BuildOptions_VerifyOption_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for CloudBuild service + +type CloudBuildClient interface { + // Starts a build with the specified configuration. + // + // The long-running Operation returned by this method will include the ID of + // the build, which can be passed to GetBuild to determine its status (e.g., + // success or failure). + CreateBuild(ctx context.Context, in *CreateBuildRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Returns information about a previously requested build. + // + // The Build that is returned includes its status (e.g., success or failure, + // or in-progress), and timing information. + GetBuild(ctx context.Context, in *GetBuildRequest, opts ...grpc.CallOption) (*Build, error) + // Lists previously requested builds. + // + // Previously requested builds may still be in-progress, or may have finished + // successfully or unsuccessfully. + ListBuilds(ctx context.Context, in *ListBuildsRequest, opts ...grpc.CallOption) (*ListBuildsResponse, error) + // Cancels a requested build in progress. + CancelBuild(ctx context.Context, in *CancelBuildRequest, opts ...grpc.CallOption) (*Build, error) + // Creates a new BuildTrigger. + // + // This API is experimental. + CreateBuildTrigger(ctx context.Context, in *CreateBuildTriggerRequest, opts ...grpc.CallOption) (*BuildTrigger, error) + // Gets information about a BuildTrigger. + // + // This API is experimental. + GetBuildTrigger(ctx context.Context, in *GetBuildTriggerRequest, opts ...grpc.CallOption) (*BuildTrigger, error) + // Lists existing BuildTrigger. + // + // This API is experimental. + ListBuildTriggers(ctx context.Context, in *ListBuildTriggersRequest, opts ...grpc.CallOption) (*ListBuildTriggersResponse, error) + // Deletes an BuildTrigger by its project ID and trigger ID. + // + // This API is experimental. + DeleteBuildTrigger(ctx context.Context, in *DeleteBuildTriggerRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Updates an BuildTrigger by its project ID and trigger ID. + // + // This API is experimental. + UpdateBuildTrigger(ctx context.Context, in *UpdateBuildTriggerRequest, opts ...grpc.CallOption) (*BuildTrigger, error) +} + +type cloudBuildClient struct { + cc *grpc.ClientConn +} + +func NewCloudBuildClient(cc *grpc.ClientConn) CloudBuildClient { + return &cloudBuildClient{cc} +} + +func (c *cloudBuildClient) CreateBuild(ctx context.Context, in *CreateBuildRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/CreateBuild", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBuildClient) GetBuild(ctx context.Context, in *GetBuildRequest, opts ...grpc.CallOption) (*Build, error) { + out := new(Build) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/GetBuild", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBuildClient) ListBuilds(ctx context.Context, in *ListBuildsRequest, opts ...grpc.CallOption) (*ListBuildsResponse, error) { + out := new(ListBuildsResponse) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/ListBuilds", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBuildClient) CancelBuild(ctx context.Context, in *CancelBuildRequest, opts ...grpc.CallOption) (*Build, error) { + out := new(Build) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/CancelBuild", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBuildClient) CreateBuildTrigger(ctx context.Context, in *CreateBuildTriggerRequest, opts ...grpc.CallOption) (*BuildTrigger, error) { + out := new(BuildTrigger) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/CreateBuildTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBuildClient) GetBuildTrigger(ctx context.Context, in *GetBuildTriggerRequest, opts ...grpc.CallOption) (*BuildTrigger, error) { + out := new(BuildTrigger) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/GetBuildTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBuildClient) ListBuildTriggers(ctx context.Context, in *ListBuildTriggersRequest, opts ...grpc.CallOption) (*ListBuildTriggersResponse, error) { + out := new(ListBuildTriggersResponse) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/ListBuildTriggers", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBuildClient) DeleteBuildTrigger(ctx context.Context, in *DeleteBuildTriggerRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/DeleteBuildTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cloudBuildClient) UpdateBuildTrigger(ctx context.Context, in *UpdateBuildTriggerRequest, opts ...grpc.CallOption) (*BuildTrigger, error) { + out := new(BuildTrigger) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/UpdateBuildTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for CloudBuild service + +type CloudBuildServer interface { + // Starts a build with the specified configuration. + // + // The long-running Operation returned by this method will include the ID of + // the build, which can be passed to GetBuild to determine its status (e.g., + // success or failure). + CreateBuild(context.Context, *CreateBuildRequest) (*google_longrunning.Operation, error) + // Returns information about a previously requested build. + // + // The Build that is returned includes its status (e.g., success or failure, + // or in-progress), and timing information. + GetBuild(context.Context, *GetBuildRequest) (*Build, error) + // Lists previously requested builds. + // + // Previously requested builds may still be in-progress, or may have finished + // successfully or unsuccessfully. + ListBuilds(context.Context, *ListBuildsRequest) (*ListBuildsResponse, error) + // Cancels a requested build in progress. + CancelBuild(context.Context, *CancelBuildRequest) (*Build, error) + // Creates a new BuildTrigger. + // + // This API is experimental. + CreateBuildTrigger(context.Context, *CreateBuildTriggerRequest) (*BuildTrigger, error) + // Gets information about a BuildTrigger. + // + // This API is experimental. + GetBuildTrigger(context.Context, *GetBuildTriggerRequest) (*BuildTrigger, error) + // Lists existing BuildTrigger. + // + // This API is experimental. + ListBuildTriggers(context.Context, *ListBuildTriggersRequest) (*ListBuildTriggersResponse, error) + // Deletes an BuildTrigger by its project ID and trigger ID. + // + // This API is experimental. + DeleteBuildTrigger(context.Context, *DeleteBuildTriggerRequest) (*google_protobuf2.Empty, error) + // Updates an BuildTrigger by its project ID and trigger ID. + // + // This API is experimental. + UpdateBuildTrigger(context.Context, *UpdateBuildTriggerRequest) (*BuildTrigger, error) +} + +func RegisterCloudBuildServer(s *grpc.Server, srv CloudBuildServer) { + s.RegisterService(&_CloudBuild_serviceDesc, srv) +} + +func _CloudBuild_CreateBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateBuildRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).CreateBuild(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/CreateBuild", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).CreateBuild(ctx, req.(*CreateBuildRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBuild_GetBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBuildRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).GetBuild(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/GetBuild", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).GetBuild(ctx, req.(*GetBuildRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBuild_ListBuilds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListBuildsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).ListBuilds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/ListBuilds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).ListBuilds(ctx, req.(*ListBuildsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBuild_CancelBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelBuildRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).CancelBuild(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/CancelBuild", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).CancelBuild(ctx, req.(*CancelBuildRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBuild_CreateBuildTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateBuildTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).CreateBuildTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/CreateBuildTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).CreateBuildTrigger(ctx, req.(*CreateBuildTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBuild_GetBuildTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBuildTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).GetBuildTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/GetBuildTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).GetBuildTrigger(ctx, req.(*GetBuildTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBuild_ListBuildTriggers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListBuildTriggersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).ListBuildTriggers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/ListBuildTriggers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).ListBuildTriggers(ctx, req.(*ListBuildTriggersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBuild_DeleteBuildTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteBuildTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).DeleteBuildTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/DeleteBuildTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).DeleteBuildTrigger(ctx, req.(*DeleteBuildTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CloudBuild_UpdateBuildTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateBuildTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).UpdateBuildTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/UpdateBuildTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).UpdateBuildTrigger(ctx, req.(*UpdateBuildTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _CloudBuild_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.cloudbuild.v1.CloudBuild", + HandlerType: (*CloudBuildServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateBuild", + Handler: _CloudBuild_CreateBuild_Handler, + }, + { + MethodName: "GetBuild", + Handler: _CloudBuild_GetBuild_Handler, + }, + { + MethodName: "ListBuilds", + Handler: _CloudBuild_ListBuilds_Handler, + }, + { + MethodName: "CancelBuild", + Handler: _CloudBuild_CancelBuild_Handler, + }, + { + MethodName: "CreateBuildTrigger", + Handler: _CloudBuild_CreateBuildTrigger_Handler, + }, + { + MethodName: "GetBuildTrigger", + Handler: _CloudBuild_GetBuildTrigger_Handler, + }, + { + MethodName: "ListBuildTriggers", + Handler: _CloudBuild_ListBuildTriggers_Handler, + }, + { + MethodName: "DeleteBuildTrigger", + Handler: _CloudBuild_DeleteBuildTrigger_Handler, + }, + { + MethodName: "UpdateBuildTrigger", + Handler: _CloudBuild_UpdateBuildTrigger_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/cloudbuild/v1/cloudbuild.proto", +} + +func init() { proto.RegisterFile("google/devtools/cloudbuild/v1/cloudbuild.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2010 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5b, 0x73, 0xdb, 0xc6, + 0xf5, 0x37, 0x48, 0x89, 0x97, 0x43, 0x5d, 0xe8, 0xfd, 0x3b, 0x32, 0x44, 0x47, 0xb1, 0xfe, 0x70, + 0x92, 0x2a, 0x4e, 0x42, 0x56, 0xf2, 0xa4, 0x56, 0xe4, 0x34, 0x91, 0x44, 0xd1, 0x92, 0x26, 0x0a, + 0xe5, 0x2e, 0x49, 0x67, 0x7a, 0x1b, 0x14, 0x24, 0x56, 0x10, 0x6a, 0x10, 0x40, 0x81, 0x25, 0x1b, + 0xd9, 0xe3, 0xe9, 0x65, 0xa6, 0x7d, 0x6c, 0x3b, 0xd3, 0xbe, 0xf5, 0xa1, 0x6d, 0x3e, 0x40, 0xa7, + 0xd3, 0x99, 0x4e, 0x9f, 0xfa, 0x29, 0xfa, 0x15, 0xfa, 0xd8, 0x0f, 0xd1, 0xd9, 0x0b, 0x48, 0x90, + 0xb4, 0x0b, 0xb0, 0x9e, 0xf6, 0xc5, 0x83, 0x3d, 0x7b, 0x7e, 0x67, 0xcf, 0x9e, 0xfd, 0x9d, 0x0b, + 0x2d, 0xa8, 0x5a, 0x9e, 0x67, 0x39, 0xa4, 0x66, 0x92, 0x21, 0xf5, 0x3c, 0x27, 0xac, 0xf5, 0x1c, + 0x6f, 0x60, 0x76, 0x07, 0xb6, 0x63, 0xd6, 0x86, 0xdb, 0xb1, 0x55, 0xd5, 0x0f, 0x3c, 0xea, 0xa1, + 0x0d, 0xa1, 0x5f, 0x8d, 0xf4, 0xab, 0x31, 0x8d, 0xe1, 0x76, 0xe5, 0x75, 0x69, 0xce, 0xf0, 0xed, + 0x9a, 0xe1, 0xba, 0x1e, 0x35, 0xa8, 0xed, 0xb9, 0xa1, 0x00, 0x57, 0xee, 0xc8, 0x5d, 0xc7, 0x73, + 0xad, 0x60, 0xe0, 0xba, 0xb6, 0x6b, 0xd5, 0x3c, 0x9f, 0x04, 0x13, 0x4a, 0x6f, 0x48, 0x25, 0xbe, + 0xea, 0x0e, 0x2e, 0x6a, 0xe6, 0x40, 0x28, 0xc8, 0xfd, 0x5b, 0xd3, 0xfb, 0xa4, 0xef, 0xd3, 0x2b, + 0xb9, 0x79, 0x7b, 0x7a, 0x93, 0xda, 0x7d, 0x12, 0x52, 0xa3, 0xef, 0x0b, 0x05, 0x4d, 0x87, 0xe5, + 0x16, 0xf5, 0x02, 0xc3, 0x22, 0x2d, 0x6f, 0x10, 0xf4, 0x08, 0x5a, 0x83, 0x5c, 0x77, 0xd0, 0x7b, + 0x42, 0xa8, 0xaa, 0x6c, 0x2a, 0x5b, 0x45, 0x2c, 0x57, 0x4c, 0xee, 0x75, 0xbf, 0x4f, 0x7a, 0x54, + 0xcd, 0x08, 0xb9, 0x58, 0xa1, 0x37, 0x00, 0x2c, 0xe2, 0x4a, 0x9f, 0xd5, 0xec, 0xa6, 0xb2, 0x95, + 0xc5, 0x31, 0x89, 0xf6, 0x17, 0x05, 0x00, 0x13, 0xdf, 0x93, 0xe6, 0x37, 0x00, 0xfc, 0xc0, 0x63, + 0x48, 0xdd, 0x36, 0xe5, 0x11, 0x45, 0x29, 0x39, 0x35, 0xd1, 0x2d, 0x28, 0x06, 0xc4, 0xf7, 0x74, + 0xd7, 0xe8, 0x13, 0x79, 0x50, 0x81, 0x09, 0x9a, 0x46, 0x9f, 0xa0, 0xff, 0x87, 0x52, 0x37, 0x30, + 0xdc, 0xde, 0xa5, 0xd8, 0x66, 0x67, 0x15, 0x4f, 0xae, 0x61, 0x10, 0x42, 0xae, 0x72, 0x0b, 0x0a, + 0xd4, 0xb0, 0xc4, 0xfe, 0x82, 0xdc, 0xcf, 0x53, 0xc3, 0xe2, 0x9b, 0xb7, 0x01, 0x7a, 0x5e, 0xbf, + 0x6f, 0x53, 0x3d, 0xbc, 0x34, 0xd4, 0x45, 0xb9, 0x5d, 0x14, 0xb2, 0xd6, 0xa5, 0x71, 0x08, 0x50, + 0x08, 0xc8, 0xd0, 0x0e, 0x99, 0xdf, 0x7f, 0x55, 0x20, 0x27, 0x7d, 0xee, 0xc0, 0x4a, 0x28, 0x62, + 0xa4, 0x87, 0x5c, 0xc2, 0x3d, 0x2b, 0xed, 0xbc, 0x57, 0xfd, 0xb7, 0x8f, 0x5f, 0x9d, 0x08, 0xec, + 0xc9, 0x35, 0xbc, 0x1c, 0x4e, 0x44, 0xfa, 0x0c, 0x4a, 0xfc, 0xae, 0xd2, 0x66, 0x96, 0xdb, 0x7c, + 0x27, 0xc1, 0xe6, 0x38, 0x94, 0xec, 0xe6, 0xc1, 0x68, 0x75, 0x58, 0x80, 0x9c, 0x30, 0xa4, 0xed, + 0x02, 0x1c, 0x0e, 0x6c, 0x87, 0x9e, 0xf6, 0x0d, 0x8b, 0x20, 0x04, 0x0b, 0x3c, 0x1a, 0x22, 0xd4, + 0xfc, 0x9b, 0xbd, 0xa5, 0x69, 0x5b, 0x24, 0xa4, 0x22, 0x86, 0x58, 0xae, 0xb4, 0x2f, 0x15, 0x28, + 0x32, 0xa8, 0xd9, 0xa2, 0xc4, 0x7f, 0x21, 0xb2, 0x0c, 0x59, 0xe2, 0x0e, 0xd5, 0xcc, 0x66, 0x76, + 0xab, 0x88, 0xd9, 0x27, 0xd3, 0x32, 0x02, 0x2b, 0x54, 0xb3, 0x5c, 0xc4, 0xbf, 0x99, 0x96, 0x69, + 0x07, 0xe2, 0x01, 0x30, 0xfb, 0x44, 0x2b, 0x90, 0xb1, 0x4d, 0x11, 0x72, 0x9c, 0xb1, 0x4d, 0xb4, + 0x0e, 0x85, 0x1f, 0x1a, 0x36, 0xd5, 0x2f, 0xbc, 0x40, 0xcd, 0x71, 0x64, 0x9e, 0xad, 0x1f, 0x7a, + 0x01, 0x23, 0x14, 0x71, 0x69, 0x70, 0xe5, 0x7b, 0xb6, 0x4b, 0xd5, 0x3c, 0x87, 0xc4, 0x24, 0xda, + 0x17, 0x90, 0xc7, 0x24, 0x1c, 0x38, 0x34, 0x44, 0x07, 0x90, 0xb3, 0xd9, 0x25, 0x43, 0xee, 0x50, + 0x72, 0xf0, 0xc6, 0x61, 0xc1, 0x12, 0x88, 0xee, 0xc2, 0x75, 0xbe, 0xad, 0x87, 0x94, 0xf8, 0xba, + 0xb4, 0x26, 0xee, 0xb2, 0xda, 0x8d, 0x42, 0xc1, 0x21, 0xa1, 0xf6, 0x8b, 0x22, 0x2c, 0xf2, 0xf0, + 0xc8, 0xeb, 0x28, 0xa3, 0xeb, 0x4c, 0xb2, 0xba, 0x3c, 0xcd, 0xea, 0x3a, 0xe4, 0x42, 0x6a, 0xd0, + 0x41, 0xc8, 0x89, 0xb3, 0xb2, 0xf3, 0x6e, 0x0a, 0x3f, 0xcd, 0x6a, 0x8b, 0x43, 0xb0, 0x84, 0xa2, + 0x3b, 0xb0, 0x2c, 0xbe, 0x74, 0x93, 0x50, 0xc3, 0x76, 0x54, 0x95, 0x1f, 0xb3, 0x24, 0x84, 0x47, + 0x5c, 0x86, 0xbe, 0x1e, 0xb1, 0x40, 0xd2, 0xe9, 0xad, 0x24, 0x8a, 0x72, 0x65, 0x2c, 0x41, 0xe8, + 0x63, 0x58, 0x64, 0x71, 0x08, 0xd5, 0x12, 0x8f, 0xe7, 0x56, 0x1a, 0x3f, 0x59, 0x80, 0xb0, 0x80, + 0xa1, 0x7d, 0xc8, 0x07, 0xe2, 0x6d, 0x54, 0xe0, 0xe7, 0xbf, 0x9d, 0x48, 0x67, 0xae, 0x8d, 0x23, + 0x18, 0x7a, 0x00, 0xa5, 0x5e, 0x40, 0x0c, 0x4a, 0x74, 0x56, 0xa9, 0xd4, 0x1c, 0xb7, 0x52, 0x89, + 0xac, 0x44, 0x65, 0xac, 0xda, 0x8e, 0xca, 0x18, 0x06, 0xa1, 0xce, 0x04, 0xe8, 0x43, 0x80, 0x90, + 0x1a, 0x01, 0x15, 0xd8, 0x7c, 0x22, 0xb6, 0xc8, 0xb5, 0x39, 0xf4, 0x01, 0x94, 0x2e, 0x6c, 0xd7, + 0x0e, 0x2f, 0x05, 0xb6, 0x90, 0x7c, 0xae, 0x50, 0xe7, 0xe0, 0x7b, 0x90, 0x67, 0x28, 0x6f, 0x40, + 0xd5, 0x25, 0x0e, 0x5c, 0x9f, 0x01, 0x1e, 0xc9, 0xa2, 0x8d, 0x23, 0x4d, 0x96, 0x84, 0x92, 0x6e, + 0xcb, 0x9c, 0x6e, 0x11, 0x23, 0x6f, 0x43, 0xc9, 0xf1, 0xac, 0x50, 0x97, 0x55, 0xf8, 0xff, 0x44, + 0x02, 0x30, 0xd1, 0xa1, 0xa8, 0xc4, 0xdf, 0x81, 0xeb, 0xe2, 0xb9, 0x74, 0x3f, 0xf0, 0x86, 0xc4, + 0x35, 0xdc, 0x1e, 0x51, 0x5f, 0xe3, 0xe7, 0xd6, 0x52, 0x3d, 0xf7, 0xa3, 0x11, 0x0c, 0x97, 0xc3, + 0x29, 0x09, 0xda, 0x82, 0xb2, 0x48, 0x08, 0x1a, 0xd8, 0x96, 0x45, 0x02, 0x46, 0xe8, 0x35, 0xee, + 0xc3, 0x0a, 0x97, 0xb7, 0x85, 0xf8, 0xd4, 0x44, 0x0d, 0xc8, 0x7b, 0x3e, 0xef, 0x54, 0xea, 0x4d, + 0x7e, 0x7a, 0x2a, 0x5a, 0x9f, 0x0b, 0x08, 0x8e, 0xb0, 0xe8, 0x26, 0xe4, 0x1d, 0xcf, 0xd2, 0x07, + 0x81, 0xa3, 0xae, 0x8b, 0x6a, 0xe4, 0x78, 0x56, 0x27, 0x70, 0xd0, 0x77, 0x61, 0x39, 0x1c, 0x74, + 0x43, 0x6a, 0xd3, 0x81, 0x38, 0x65, 0x83, 0x93, 0xf2, 0x7e, 0xba, 0xe4, 0x89, 0x23, 0x1b, 0xac, + 0x7a, 0xe0, 0x49, 0x6b, 0x95, 0x7d, 0x40, 0xb3, 0x4a, 0xac, 0x74, 0x3d, 0x21, 0x57, 0x32, 0xb5, + 0xd9, 0x27, 0xba, 0x01, 0x8b, 0x43, 0xc3, 0x19, 0x44, 0xed, 0x48, 0x2c, 0xf6, 0x32, 0xbb, 0x8a, + 0xf6, 0x23, 0xc8, 0x89, 0x1c, 0x45, 0x08, 0x56, 0x5a, 0xed, 0x83, 0x76, 0xa7, 0xa5, 0x77, 0x9a, + 0x9f, 0x36, 0xcf, 0x3f, 0x6f, 0x96, 0xaf, 0x21, 0x80, 0xdc, 0x37, 0x3a, 0x8d, 0x4e, 0xe3, 0xa8, + 0xac, 0xa0, 0x12, 0xe4, 0x3f, 0x3f, 0xc7, 0x9f, 0x9e, 0x36, 0x8f, 0xcb, 0x19, 0xb6, 0x68, 0x75, + 0xea, 0xf5, 0x46, 0xab, 0x55, 0xce, 0xb2, 0xc5, 0xc3, 0x83, 0xd3, 0xb3, 0x0e, 0x6e, 0x94, 0x17, + 0x98, 0x99, 0xd3, 0x66, 0xbb, 0x81, 0x9b, 0x07, 0x67, 0x7a, 0x03, 0xe3, 0x73, 0x5c, 0x5e, 0x64, + 0x0a, 0xed, 0xd3, 0xcf, 0x1a, 0xe7, 0x9d, 0x76, 0x39, 0x87, 0x96, 0xa1, 0x58, 0x3f, 0x68, 0xd6, + 0x1b, 0x67, 0x67, 0x8d, 0xa3, 0x72, 0x5e, 0x6b, 0xc3, 0x9a, 0x8c, 0xa9, 0xec, 0xb6, 0x9f, 0x11, + 0x6a, 0x98, 0x06, 0x35, 0xd0, 0x1e, 0x2c, 0xf2, 0x80, 0xf0, 0x8b, 0x94, 0x76, 0xde, 0x4c, 0x13, + 0x33, 0x2c, 0x20, 0xda, 0x1f, 0xb2, 0x50, 0x9e, 0x26, 0x0a, 0x32, 0xe1, 0x66, 0x40, 0x42, 0xcf, + 0x19, 0x12, 0x56, 0x2a, 0x27, 0x9a, 0x61, 0x76, 0xfe, 0x66, 0x88, 0x5f, 0x8b, 0x8c, 0x4d, 0x0e, + 0x1f, 0xdf, 0x86, 0x1b, 0xa3, 0x53, 0xe2, 0xbd, 0x31, 0x37, 0x67, 0x6f, 0xc4, 0x28, 0x32, 0x13, + 0x1b, 0x3d, 0xbe, 0xc7, 0x52, 0xdc, 0x21, 0xfa, 0xa5, 0x11, 0x5e, 0x92, 0x50, 0x5d, 0xe0, 0x6c, + 0xfa, 0x64, 0xce, 0x8c, 0xa9, 0x3e, 0xb4, 0x1d, 0x72, 0xc2, 0x2d, 0x08, 0x56, 0xc1, 0xc5, 0x48, + 0x50, 0xb9, 0x84, 0xd5, 0xa9, 0xed, 0x17, 0xf0, 0xe9, 0x93, 0x38, 0x9f, 0x92, 0x2f, 0x35, 0x36, + 0x18, 0xa7, 0x5e, 0x13, 0x60, 0xbc, 0x81, 0xf6, 0xa1, 0x38, 0xba, 0x99, 0xaa, 0xf0, 0x7b, 0xdd, + 0x49, 0x30, 0xcb, 0x90, 0xb8, 0x10, 0xf9, 0xae, 0xfd, 0x58, 0x81, 0x05, 0xf6, 0x81, 0xf6, 0x61, + 0x81, 0x5e, 0xf9, 0xa2, 0xe9, 0xaf, 0x24, 0x3e, 0x2a, 0x83, 0xf0, 0x7f, 0xda, 0x57, 0x3e, 0xc1, + 0x1c, 0x39, 0x99, 0x2f, 0x4b, 0xd2, 0x69, 0x6d, 0x13, 0x0a, 0x91, 0x1e, 0x2a, 0xc0, 0x42, 0xf3, + 0xbc, 0xd9, 0x10, 0x39, 0xd2, 0x3a, 0x39, 0xd8, 0xf9, 0xe0, 0x6b, 0x65, 0x45, 0xf3, 0x00, 0xd5, + 0x79, 0x29, 0x17, 0x64, 0x24, 0x3f, 0x18, 0x90, 0x90, 0x26, 0xcd, 0x8b, 0x23, 0x9e, 0x67, 0xe6, + 0xe7, 0xf9, 0x3e, 0xac, 0x1e, 0x13, 0x3a, 0xcf, 0x69, 0xa2, 0xed, 0x67, 0xa2, 0xb6, 0xaf, 0xfd, + 0x5c, 0x81, 0xeb, 0x67, 0x76, 0x28, 0x6c, 0x84, 0x29, 0x8d, 0xdc, 0x82, 0xa2, 0xcf, 0xb3, 0xc7, + 0x7e, 0x2a, 0x62, 0xb4, 0x88, 0x0b, 0x4c, 0xd0, 0xb2, 0x9f, 0x8a, 0xf1, 0x98, 0x6d, 0x52, 0xef, + 0x09, 0x71, 0xe5, 0x74, 0xc6, 0xd5, 0xdb, 0x4c, 0xc0, 0x7a, 0xc6, 0x85, 0xed, 0x50, 0x12, 0xf0, + 0x06, 0x55, 0xc4, 0x72, 0xa5, 0x3d, 0x05, 0x14, 0xf7, 0x23, 0xf4, 0x3d, 0x37, 0x24, 0xe8, 0x23, + 0x36, 0xca, 0x33, 0x89, 0xe4, 0x44, 0xba, 0xe8, 0x48, 0x0c, 0x7a, 0x1b, 0x56, 0x5d, 0xf2, 0x05, + 0xd5, 0x63, 0xfe, 0x88, 0x9b, 0x2f, 0x33, 0xf1, 0xa3, 0xc8, 0x27, 0xad, 0x0e, 0xa8, 0xce, 0x32, + 0xc3, 0x79, 0x95, 0x48, 0xfe, 0x6c, 0x01, 0x96, 0x0e, 0x63, 0xed, 0x65, 0x66, 0xc2, 0xda, 0x84, + 0x92, 0x49, 0xc2, 0x5e, 0x60, 0xf3, 0xae, 0xc1, 0xa7, 0x8b, 0x22, 0x8e, 0x8b, 0x50, 0x1b, 0xca, + 0x51, 0xcb, 0xa2, 0xa4, 0xef, 0x3b, 0x06, 0x8d, 0x46, 0x80, 0x39, 0xea, 0xc6, 0xaa, 0x34, 0xd1, + 0x96, 0x16, 0xd0, 0x47, 0x11, 0xc1, 0x16, 0xd2, 0x13, 0xec, 0xe4, 0x9a, 0xa4, 0x18, 0x7a, 0x1d, + 0x78, 0x8a, 0xf1, 0x31, 0xba, 0x20, 0x7f, 0x6f, 0x8c, 0x24, 0xd3, 0xb3, 0xce, 0xe2, 0x5c, 0xb3, + 0x4e, 0x05, 0x0a, 0xa6, 0x1d, 0x1a, 0x5d, 0x87, 0x98, 0x6a, 0x71, 0x53, 0xd9, 0x2a, 0xe0, 0xd1, + 0x1a, 0x99, 0xd3, 0x9d, 0x53, 0x8c, 0x73, 0x1f, 0xa7, 0x71, 0x5e, 0x3e, 0xc0, 0xff, 0xa2, 0x81, + 0x1e, 0x96, 0x61, 0x45, 0xce, 0x1a, 0x32, 0xdc, 0xda, 0x4f, 0x14, 0x58, 0x8f, 0x55, 0x01, 0xe9, + 0x4c, 0x4a, 0x52, 0x35, 0x20, 0x2f, 0x9f, 0x4f, 0x96, 0x83, 0x77, 0xe7, 0xb8, 0x30, 0x8e, 0xb0, + 0xda, 0x63, 0x58, 0x8b, 0xea, 0xc2, 0x7c, 0xe7, 0x6f, 0x00, 0xc4, 0x86, 0x26, 0x71, 0xdb, 0x22, + 0x8d, 0xe6, 0x25, 0xed, 0x43, 0x50, 0x47, 0x49, 0x2a, 0x0d, 0xa7, 0xac, 0x19, 0x9a, 0x09, 0xeb, + 0x2f, 0x80, 0xca, 0x34, 0x3f, 0x86, 0x82, 0x3c, 0x24, 0x4a, 0xf4, 0xb9, 0xee, 0x3d, 0x02, 0x6b, + 0xdf, 0x84, 0xf5, 0x23, 0xe2, 0x90, 0xff, 0x28, 0xf6, 0x09, 0x77, 0xff, 0xbd, 0x02, 0xeb, 0x1d, + 0xdf, 0x34, 0xfe, 0x0b, 0xb6, 0xe3, 0xcf, 0x9e, 0x7d, 0x85, 0x67, 0xff, 0x4d, 0x46, 0x96, 0x20, + 0x39, 0xa1, 0xa2, 0x2e, 0xac, 0xcd, 0xcc, 0xd9, 0xe3, 0x16, 0x3b, 0x6f, 0x73, 0xbc, 0x31, 0x3d, + 0x69, 0xf3, 0x76, 0xeb, 0xb3, 0xb1, 0x8a, 0x07, 0x81, 0x98, 0xfa, 0x90, 0x04, 0xf6, 0xc5, 0x95, + 0x2e, 0x06, 0x63, 0xf9, 0x53, 0x71, 0x77, 0x8e, 0x99, 0xba, 0xfa, 0x98, 0x1b, 0x10, 0x2b, 0x36, + 0x62, 0x49, 0xc3, 0x71, 0xb1, 0x56, 0x85, 0xa5, 0xf8, 0x1a, 0x95, 0x61, 0xa9, 0x79, 0xde, 0xd6, + 0x1f, 0x37, 0xf0, 0xe9, 0xc3, 0xd3, 0xc6, 0x51, 0xf9, 0x1a, 0x5a, 0x82, 0xc2, 0x68, 0xa5, 0xec, + 0xfc, 0xb3, 0x04, 0x50, 0x67, 0x47, 0x8a, 0x5f, 0xbe, 0xbf, 0x52, 0xa0, 0x14, 0x4b, 0x50, 0xb4, + 0x9d, 0xe0, 0xdf, 0x6c, 0x4b, 0xaf, 0x6c, 0x44, 0x90, 0xd8, 0x7f, 0x7b, 0x55, 0x47, 0x23, 0xac, + 0x56, 0xfb, 0xe9, 0xdf, 0xff, 0xf1, 0xeb, 0xcc, 0x3b, 0xda, 0x66, 0x6d, 0xb8, 0x5d, 0x93, 0x24, + 0x08, 0x6b, 0xcf, 0xc6, 0x04, 0x79, 0x5e, 0x13, 0x1d, 0x6a, 0x4f, 0x16, 0xd9, 0x5f, 0x2a, 0x50, + 0x88, 0x12, 0x16, 0x55, 0x13, 0xfc, 0x99, 0xea, 0xf8, 0x95, 0x54, 0x05, 0x5d, 0x7b, 0x9f, 0xfb, + 0xf4, 0x15, 0xf4, 0x56, 0x92, 0x4f, 0xb5, 0x67, 0xb6, 0xf9, 0x1c, 0xfd, 0x56, 0x01, 0x18, 0xf7, + 0x63, 0xf4, 0xd5, 0x84, 0x33, 0x66, 0x46, 0x88, 0xca, 0xf6, 0x1c, 0x08, 0x51, 0x05, 0xb4, 0x2d, + 0xee, 0xa2, 0x86, 0x12, 0xc3, 0x86, 0x7e, 0xc7, 0x9e, 0x70, 0xdc, 0xb1, 0x93, 0x9f, 0x70, 0xa6, + 0xbb, 0xa7, 0x8c, 0xda, 0x7d, 0xee, 0xd2, 0xb6, 0xf6, 0x5e, 0xaa, 0xa8, 0xed, 0xf5, 0xf8, 0x39, + 0x7b, 0xca, 0x5d, 0xf4, 0x27, 0x65, 0x62, 0x16, 0x8c, 0x66, 0x82, 0xdd, 0xf4, 0x5c, 0x9b, 0x2c, + 0x30, 0x95, 0x79, 0x2a, 0x82, 0x76, 0x8f, 0xbb, 0xfd, 0xbe, 0xa6, 0xbd, 0xdc, 0xed, 0xa8, 0x64, + 0xee, 0x45, 0xd5, 0x03, 0xfd, 0x51, 0x19, 0x4f, 0x93, 0x91, 0xbf, 0x1f, 0xa4, 0xe4, 0xe2, 0xab, + 0x38, 0x2b, 0x63, 0x8c, 0x6a, 0xc9, 0xce, 0xd6, 0x9e, 0x8d, 0xab, 0xe8, 0x73, 0xf4, 0xe7, 0xf8, + 0xec, 0x1a, 0xf5, 0x14, 0x74, 0x3f, 0x2d, 0xf1, 0xa6, 0x1a, 0x58, 0x65, 0x77, 0x7e, 0xa0, 0x24, + 0xee, 0x5d, 0x7e, 0x83, 0x37, 0x51, 0x8a, 0x70, 0x33, 0xea, 0xa2, 0xd9, 0x16, 0x95, 0x48, 0x8c, + 0x97, 0x76, 0xb5, 0xca, 0xda, 0xcc, 0xb4, 0xd5, 0xe8, 0xfb, 0xf4, 0x2a, 0x0a, 0xeb, 0xdd, 0xb9, + 0xc3, 0xfa, 0x37, 0x05, 0xd0, 0x6c, 0xa3, 0x4b, 0xf4, 0xf0, 0xa5, 0xbd, 0x71, 0x3e, 0x36, 0xec, + 0x73, 0xb7, 0xf7, 0x76, 0xe6, 0x75, 0x7b, 0xc4, 0xe3, 0xc3, 0x27, 0xa0, 0xf6, 0xbc, 0x7e, 0x74, + 0xe6, 0xc4, 0x51, 0x8f, 0x94, 0x6f, 0x1d, 0x4b, 0xb9, 0xe5, 0x39, 0x86, 0x6b, 0x55, 0xbd, 0xc0, + 0xaa, 0x59, 0xc4, 0xe5, 0xb1, 0xab, 0x89, 0x2d, 0xc3, 0xb7, 0xc3, 0x97, 0xfc, 0xf1, 0xe4, 0xc1, + 0x78, 0xf5, 0x65, 0x26, 0x7b, 0x5c, 0x3f, 0xec, 0xe6, 0x38, 0xf2, 0xde, 0xbf, 0x02, 0x00, 0x00, + 0xff, 0xff, 0xc6, 0xf0, 0xf0, 0x91, 0x75, 0x19, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/controller.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/controller.pb.go new file mode 100644 index 0000000..7773d6e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/controller.pb.go @@ -0,0 +1,471 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/clouddebugger/v2/controller.proto +// DO NOT EDIT! + +/* +Package clouddebugger is a generated protocol buffer package. + +It is generated from these files: + google/devtools/clouddebugger/v2/controller.proto + google/devtools/clouddebugger/v2/data.proto + google/devtools/clouddebugger/v2/debugger.proto + +It has these top-level messages: + RegisterDebuggeeRequest + RegisterDebuggeeResponse + ListActiveBreakpointsRequest + ListActiveBreakpointsResponse + UpdateActiveBreakpointRequest + UpdateActiveBreakpointResponse + FormatMessage + StatusMessage + SourceLocation + Variable + StackFrame + Breakpoint + Debuggee + SetBreakpointRequest + SetBreakpointResponse + GetBreakpointRequest + GetBreakpointResponse + DeleteBreakpointRequest + ListBreakpointsRequest + ListBreakpointsResponse + ListDebuggeesRequest + ListDebuggeesResponse +*/ +package clouddebugger + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Request to register a debuggee. +type RegisterDebuggeeRequest struct { + // Debuggee information to register. + // The fields `project`, `uniquifier`, `description` and `agent_version` + // of the debuggee must be set. + Debuggee *Debuggee `protobuf:"bytes,1,opt,name=debuggee" json:"debuggee,omitempty"` +} + +func (m *RegisterDebuggeeRequest) Reset() { *m = RegisterDebuggeeRequest{} } +func (m *RegisterDebuggeeRequest) String() string { return proto.CompactTextString(m) } +func (*RegisterDebuggeeRequest) ProtoMessage() {} +func (*RegisterDebuggeeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *RegisterDebuggeeRequest) GetDebuggee() *Debuggee { + if m != nil { + return m.Debuggee + } + return nil +} + +// Response for registering a debuggee. +type RegisterDebuggeeResponse struct { + // Debuggee resource. + // The field `id` is guranteed to be set (in addition to the echoed fields). + Debuggee *Debuggee `protobuf:"bytes,1,opt,name=debuggee" json:"debuggee,omitempty"` +} + +func (m *RegisterDebuggeeResponse) Reset() { *m = RegisterDebuggeeResponse{} } +func (m *RegisterDebuggeeResponse) String() string { return proto.CompactTextString(m) } +func (*RegisterDebuggeeResponse) ProtoMessage() {} +func (*RegisterDebuggeeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *RegisterDebuggeeResponse) GetDebuggee() *Debuggee { + if m != nil { + return m.Debuggee + } + return nil +} + +// Request to list active breakpoints. +type ListActiveBreakpointsRequest struct { + // Identifies the debuggee. + DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` + // A wait token that, if specified, blocks the method call until the list + // of active breakpoints has changed, or a server selected timeout has + // expired. The value should be set from the last returned response. + WaitToken string `protobuf:"bytes,2,opt,name=wait_token,json=waitToken" json:"wait_token,omitempty"` + // If set to `true`, returns `google.rpc.Code.OK` status and sets the + // `wait_expired` response field to `true` when the server-selected timeout + // has expired (recommended). + // + // If set to `false`, returns `google.rpc.Code.ABORTED` status when the + // server-selected timeout has expired (deprecated). + SuccessOnTimeout bool `protobuf:"varint,3,opt,name=success_on_timeout,json=successOnTimeout" json:"success_on_timeout,omitempty"` +} + +func (m *ListActiveBreakpointsRequest) Reset() { *m = ListActiveBreakpointsRequest{} } +func (m *ListActiveBreakpointsRequest) String() string { return proto.CompactTextString(m) } +func (*ListActiveBreakpointsRequest) ProtoMessage() {} +func (*ListActiveBreakpointsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ListActiveBreakpointsRequest) GetDebuggeeId() string { + if m != nil { + return m.DebuggeeId + } + return "" +} + +func (m *ListActiveBreakpointsRequest) GetWaitToken() string { + if m != nil { + return m.WaitToken + } + return "" +} + +func (m *ListActiveBreakpointsRequest) GetSuccessOnTimeout() bool { + if m != nil { + return m.SuccessOnTimeout + } + return false +} + +// Response for listing active breakpoints. +type ListActiveBreakpointsResponse struct { + // List of all active breakpoints. + // The fields `id` and `location` are guaranteed to be set on each breakpoint. + Breakpoints []*Breakpoint `protobuf:"bytes,1,rep,name=breakpoints" json:"breakpoints,omitempty"` + // A wait token that can be used in the next method call to block until + // the list of breakpoints changes. + NextWaitToken string `protobuf:"bytes,2,opt,name=next_wait_token,json=nextWaitToken" json:"next_wait_token,omitempty"` + // The `wait_expired` field is set to true by the server when the + // request times out and the field `success_on_timeout` is set to true. + WaitExpired bool `protobuf:"varint,3,opt,name=wait_expired,json=waitExpired" json:"wait_expired,omitempty"` +} + +func (m *ListActiveBreakpointsResponse) Reset() { *m = ListActiveBreakpointsResponse{} } +func (m *ListActiveBreakpointsResponse) String() string { return proto.CompactTextString(m) } +func (*ListActiveBreakpointsResponse) ProtoMessage() {} +func (*ListActiveBreakpointsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ListActiveBreakpointsResponse) GetBreakpoints() []*Breakpoint { + if m != nil { + return m.Breakpoints + } + return nil +} + +func (m *ListActiveBreakpointsResponse) GetNextWaitToken() string { + if m != nil { + return m.NextWaitToken + } + return "" +} + +func (m *ListActiveBreakpointsResponse) GetWaitExpired() bool { + if m != nil { + return m.WaitExpired + } + return false +} + +// Request to update an active breakpoint. +type UpdateActiveBreakpointRequest struct { + // Identifies the debuggee being debugged. + DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` + // Updated breakpoint information. + // The field 'id' must be set. + Breakpoint *Breakpoint `protobuf:"bytes,2,opt,name=breakpoint" json:"breakpoint,omitempty"` +} + +func (m *UpdateActiveBreakpointRequest) Reset() { *m = UpdateActiveBreakpointRequest{} } +func (m *UpdateActiveBreakpointRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateActiveBreakpointRequest) ProtoMessage() {} +func (*UpdateActiveBreakpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *UpdateActiveBreakpointRequest) GetDebuggeeId() string { + if m != nil { + return m.DebuggeeId + } + return "" +} + +func (m *UpdateActiveBreakpointRequest) GetBreakpoint() *Breakpoint { + if m != nil { + return m.Breakpoint + } + return nil +} + +// Response for updating an active breakpoint. +// The message is defined to allow future extensions. +type UpdateActiveBreakpointResponse struct { +} + +func (m *UpdateActiveBreakpointResponse) Reset() { *m = UpdateActiveBreakpointResponse{} } +func (m *UpdateActiveBreakpointResponse) String() string { return proto.CompactTextString(m) } +func (*UpdateActiveBreakpointResponse) ProtoMessage() {} +func (*UpdateActiveBreakpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func init() { + proto.RegisterType((*RegisterDebuggeeRequest)(nil), "google.devtools.clouddebugger.v2.RegisterDebuggeeRequest") + proto.RegisterType((*RegisterDebuggeeResponse)(nil), "google.devtools.clouddebugger.v2.RegisterDebuggeeResponse") + proto.RegisterType((*ListActiveBreakpointsRequest)(nil), "google.devtools.clouddebugger.v2.ListActiveBreakpointsRequest") + proto.RegisterType((*ListActiveBreakpointsResponse)(nil), "google.devtools.clouddebugger.v2.ListActiveBreakpointsResponse") + proto.RegisterType((*UpdateActiveBreakpointRequest)(nil), "google.devtools.clouddebugger.v2.UpdateActiveBreakpointRequest") + proto.RegisterType((*UpdateActiveBreakpointResponse)(nil), "google.devtools.clouddebugger.v2.UpdateActiveBreakpointResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Controller2 service + +type Controller2Client interface { + // Registers the debuggee with the controller service. + // + // All agents attached to the same application should call this method with + // the same request content to get back the same stable `debuggee_id`. Agents + // should call this method again whenever `google.rpc.Code.NOT_FOUND` is + // returned from any controller method. + // + // This allows the controller service to disable the agent or recover from any + // data loss. If the debuggee is disabled by the server, the response will + // have `is_disabled` set to `true`. + RegisterDebuggee(ctx context.Context, in *RegisterDebuggeeRequest, opts ...grpc.CallOption) (*RegisterDebuggeeResponse, error) + // Returns the list of all active breakpoints for the debuggee. + // + // The breakpoint specification (location, condition, and expression + // fields) is semantically immutable, although the field values may + // change. For example, an agent may update the location line number + // to reflect the actual line where the breakpoint was set, but this + // doesn't change the breakpoint semantics. + // + // This means that an agent does not need to check if a breakpoint has changed + // when it encounters the same breakpoint on a successive call. + // Moreover, an agent should remember the breakpoints that are completed + // until the controller removes them from the active list to avoid + // setting those breakpoints again. + ListActiveBreakpoints(ctx context.Context, in *ListActiveBreakpointsRequest, opts ...grpc.CallOption) (*ListActiveBreakpointsResponse, error) + // Updates the breakpoint state or mutable fields. + // The entire Breakpoint message must be sent back to the controller + // service. + // + // Updates to active breakpoint fields are only allowed if the new value + // does not change the breakpoint specification. Updates to the `location`, + // `condition` and `expression` fields should not alter the breakpoint + // semantics. These may only make changes such as canonicalizing a value + // or snapping the location to the correct line of code. + UpdateActiveBreakpoint(ctx context.Context, in *UpdateActiveBreakpointRequest, opts ...grpc.CallOption) (*UpdateActiveBreakpointResponse, error) +} + +type controller2Client struct { + cc *grpc.ClientConn +} + +func NewController2Client(cc *grpc.ClientConn) Controller2Client { + return &controller2Client{cc} +} + +func (c *controller2Client) RegisterDebuggee(ctx context.Context, in *RegisterDebuggeeRequest, opts ...grpc.CallOption) (*RegisterDebuggeeResponse, error) { + out := new(RegisterDebuggeeResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouddebugger.v2.Controller2/RegisterDebuggee", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controller2Client) ListActiveBreakpoints(ctx context.Context, in *ListActiveBreakpointsRequest, opts ...grpc.CallOption) (*ListActiveBreakpointsResponse, error) { + out := new(ListActiveBreakpointsResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouddebugger.v2.Controller2/ListActiveBreakpoints", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controller2Client) UpdateActiveBreakpoint(ctx context.Context, in *UpdateActiveBreakpointRequest, opts ...grpc.CallOption) (*UpdateActiveBreakpointResponse, error) { + out := new(UpdateActiveBreakpointResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouddebugger.v2.Controller2/UpdateActiveBreakpoint", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Controller2 service + +type Controller2Server interface { + // Registers the debuggee with the controller service. + // + // All agents attached to the same application should call this method with + // the same request content to get back the same stable `debuggee_id`. Agents + // should call this method again whenever `google.rpc.Code.NOT_FOUND` is + // returned from any controller method. + // + // This allows the controller service to disable the agent or recover from any + // data loss. If the debuggee is disabled by the server, the response will + // have `is_disabled` set to `true`. + RegisterDebuggee(context.Context, *RegisterDebuggeeRequest) (*RegisterDebuggeeResponse, error) + // Returns the list of all active breakpoints for the debuggee. + // + // The breakpoint specification (location, condition, and expression + // fields) is semantically immutable, although the field values may + // change. For example, an agent may update the location line number + // to reflect the actual line where the breakpoint was set, but this + // doesn't change the breakpoint semantics. + // + // This means that an agent does not need to check if a breakpoint has changed + // when it encounters the same breakpoint on a successive call. + // Moreover, an agent should remember the breakpoints that are completed + // until the controller removes them from the active list to avoid + // setting those breakpoints again. + ListActiveBreakpoints(context.Context, *ListActiveBreakpointsRequest) (*ListActiveBreakpointsResponse, error) + // Updates the breakpoint state or mutable fields. + // The entire Breakpoint message must be sent back to the controller + // service. + // + // Updates to active breakpoint fields are only allowed if the new value + // does not change the breakpoint specification. Updates to the `location`, + // `condition` and `expression` fields should not alter the breakpoint + // semantics. These may only make changes such as canonicalizing a value + // or snapping the location to the correct line of code. + UpdateActiveBreakpoint(context.Context, *UpdateActiveBreakpointRequest) (*UpdateActiveBreakpointResponse, error) +} + +func RegisterController2Server(s *grpc.Server, srv Controller2Server) { + s.RegisterService(&_Controller2_serviceDesc, srv) +} + +func _Controller2_RegisterDebuggee_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RegisterDebuggeeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(Controller2Server).RegisterDebuggee(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouddebugger.v2.Controller2/RegisterDebuggee", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(Controller2Server).RegisterDebuggee(ctx, req.(*RegisterDebuggeeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller2_ListActiveBreakpoints_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActiveBreakpointsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(Controller2Server).ListActiveBreakpoints(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouddebugger.v2.Controller2/ListActiveBreakpoints", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(Controller2Server).ListActiveBreakpoints(ctx, req.(*ListActiveBreakpointsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller2_UpdateActiveBreakpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateActiveBreakpointRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(Controller2Server).UpdateActiveBreakpoint(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouddebugger.v2.Controller2/UpdateActiveBreakpoint", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(Controller2Server).UpdateActiveBreakpoint(ctx, req.(*UpdateActiveBreakpointRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Controller2_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.clouddebugger.v2.Controller2", + HandlerType: (*Controller2Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "RegisterDebuggee", + Handler: _Controller2_RegisterDebuggee_Handler, + }, + { + MethodName: "ListActiveBreakpoints", + Handler: _Controller2_ListActiveBreakpoints_Handler, + }, + { + MethodName: "UpdateActiveBreakpoint", + Handler: _Controller2_UpdateActiveBreakpoint_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/clouddebugger/v2/controller.proto", +} + +func init() { proto.RegisterFile("google/devtools/clouddebugger/v2/controller.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 572 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xdd, 0x6a, 0xd4, 0x40, + 0x14, 0x66, 0x5a, 0x94, 0xf6, 0x44, 0x69, 0x19, 0x50, 0x97, 0xd8, 0xea, 0x36, 0x48, 0x29, 0xeb, + 0x92, 0xc1, 0xe8, 0x8d, 0x2b, 0xf8, 0xb3, 0xfe, 0x21, 0xb4, 0x5a, 0x96, 0x8a, 0xe0, 0xcd, 0x92, + 0x4d, 0x8e, 0x61, 0x68, 0x76, 0x26, 0x66, 0x26, 0x6b, 0xa5, 0xf4, 0xc6, 0x2b, 0x41, 0xf1, 0xc6, + 0x87, 0x11, 0x7c, 0x0d, 0x7d, 0x04, 0xaf, 0x7c, 0x0a, 0xd9, 0x64, 0xf6, 0xaf, 0xed, 0x36, 0xed, + 0xe2, 0x65, 0xbe, 0x73, 0xbe, 0x73, 0xbe, 0x6f, 0x72, 0xce, 0x81, 0x5b, 0x91, 0x94, 0x51, 0x8c, + 0x2c, 0xc4, 0x9e, 0x96, 0x32, 0x56, 0x2c, 0x88, 0x65, 0x16, 0x86, 0xd8, 0xc9, 0xa2, 0x08, 0x53, + 0xd6, 0xf3, 0x58, 0x20, 0x85, 0x4e, 0x65, 0x1c, 0x63, 0xea, 0x26, 0xa9, 0xd4, 0x92, 0x56, 0x0b, + 0x8a, 0x3b, 0xa0, 0xb8, 0x13, 0x14, 0xb7, 0xe7, 0xd9, 0x2b, 0xa6, 0xa8, 0x9f, 0x70, 0xe6, 0x0b, + 0x21, 0xb5, 0xaf, 0xb9, 0x14, 0xaa, 0xe0, 0xdb, 0x37, 0x4b, 0x5b, 0x86, 0xbe, 0xf6, 0x4d, 0xf2, + 0x55, 0x93, 0x9c, 0x7f, 0x75, 0xb2, 0x77, 0x0c, 0xbb, 0x89, 0xfe, 0x58, 0x04, 0x1d, 0x1f, 0xae, + 0xb4, 0x30, 0xe2, 0x4a, 0x63, 0xfa, 0xa4, 0xa0, 0x63, 0x0b, 0xdf, 0x67, 0xa8, 0x34, 0x7d, 0x06, + 0x0b, 0xa6, 0x22, 0x56, 0x48, 0x95, 0x6c, 0x58, 0x5e, 0xcd, 0x2d, 0xd3, 0xed, 0x0e, 0x8b, 0x0c, + 0xb9, 0x4e, 0x07, 0x2a, 0x47, 0x5b, 0xa8, 0x44, 0x0a, 0x85, 0xff, 0xad, 0xc7, 0x57, 0x02, 0x2b, + 0x9b, 0x5c, 0xe9, 0x47, 0x81, 0xe6, 0x3d, 0x6c, 0xa6, 0xe8, 0xef, 0x26, 0x92, 0x0b, 0xad, 0x06, + 0x66, 0xae, 0x83, 0x35, 0x48, 0x6e, 0xf3, 0x30, 0xef, 0xb5, 0xd8, 0x82, 0x01, 0xf4, 0x22, 0xa4, + 0xab, 0x00, 0x1f, 0x7c, 0xae, 0xdb, 0x5a, 0xee, 0xa2, 0xa8, 0xcc, 0xe5, 0xf1, 0xc5, 0x3e, 0xb2, + 0xd3, 0x07, 0x68, 0x1d, 0xa8, 0xca, 0x82, 0x00, 0x95, 0x6a, 0x4b, 0xd1, 0xd6, 0xbc, 0x8b, 0x32, + 0xd3, 0x95, 0xf9, 0x2a, 0xd9, 0x58, 0x68, 0x2d, 0x9b, 0xc8, 0x2b, 0xb1, 0x53, 0xe0, 0xce, 0x4f, + 0x02, 0xab, 0x53, 0xe4, 0x18, 0xe3, 0x2f, 0xc1, 0xea, 0x8c, 0xe0, 0x0a, 0xa9, 0xce, 0x6f, 0x58, + 0x5e, 0xbd, 0xdc, 0xfb, 0xa8, 0x56, 0x6b, 0xbc, 0x00, 0x5d, 0x87, 0x25, 0x81, 0x7b, 0xba, 0x7d, + 0xc4, 0xc3, 0xc5, 0x3e, 0xfc, 0x66, 0xe8, 0x63, 0x0d, 0x2e, 0xe4, 0x29, 0xb8, 0x97, 0xf0, 0x14, + 0x43, 0xe3, 0xc0, 0xea, 0x63, 0x4f, 0x0b, 0xc8, 0xf9, 0x46, 0x60, 0xf5, 0x75, 0x12, 0xfa, 0x1a, + 0x0f, 0xcb, 0x3f, 0xf5, 0x63, 0x6e, 0x02, 0x8c, 0xc4, 0xe5, 0x42, 0xce, 0x6a, 0x6e, 0x8c, 0xef, + 0x54, 0xe1, 0xda, 0x34, 0x3d, 0xc5, 0x6b, 0x7a, 0x5f, 0xce, 0x81, 0xf5, 0x78, 0xb8, 0x64, 0x1e, + 0xfd, 0x41, 0x60, 0xf9, 0xf0, 0xcc, 0xd1, 0xbb, 0xe5, 0x02, 0xa6, 0xac, 0x82, 0xdd, 0x98, 0x85, + 0x5a, 0x68, 0x73, 0xea, 0x9f, 0x7e, 0xfd, 0xf9, 0x3e, 0xb7, 0xee, 0xac, 0x4d, 0x5e, 0x02, 0x36, + 0x78, 0x2e, 0xc5, 0x52, 0x43, 0x6d, 0x90, 0x1a, 0xfd, 0x4d, 0xe0, 0xd2, 0xb1, 0x93, 0x43, 0xef, + 0x97, 0x6b, 0x38, 0x69, 0x03, 0xec, 0x07, 0x33, 0xf3, 0x8d, 0x91, 0x46, 0x6e, 0xe4, 0x0e, 0xf5, + 0xa6, 0x1a, 0xd9, 0x1f, 0x9b, 0x8a, 0x03, 0x36, 0x3e, 0x9e, 0x7f, 0x09, 0x5c, 0x3e, 0xfe, 0x1f, + 0xd2, 0x53, 0xe8, 0x3a, 0x71, 0x1a, 0xed, 0x87, 0xb3, 0x17, 0x30, 0xce, 0xb6, 0x72, 0x67, 0xcf, + 0xed, 0xe6, 0xd9, 0x9d, 0xb1, 0xfd, 0xd1, 0x87, 0xcb, 0xc3, 0x83, 0x06, 0xa9, 0x35, 0x3f, 0x13, + 0xb8, 0x11, 0xc8, 0x6e, 0xa9, 0xac, 0xe6, 0xd2, 0x68, 0x66, 0xb7, 0xfb, 0xd7, 0x78, 0x9b, 0xbc, + 0xdd, 0x32, 0xa4, 0x48, 0xc6, 0xbe, 0x88, 0x5c, 0x99, 0x46, 0x2c, 0x42, 0x91, 0xdf, 0x6a, 0x56, + 0x84, 0xfc, 0x84, 0xab, 0xe9, 0x87, 0xff, 0xde, 0x04, 0xd0, 0x39, 0x9f, 0x33, 0x6f, 0xff, 0x0b, + 0x00, 0x00, 0xff, 0xff, 0xe1, 0x6e, 0xc8, 0x51, 0xa4, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/data.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/data.pb.go new file mode 100644 index 0000000..fbad60c --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/data.pb.go @@ -0,0 +1,892 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/clouddebugger/v2/data.proto +// DO NOT EDIT! + +package clouddebugger + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_devtools_source_v1 "google.golang.org/genproto/googleapis/devtools/source/v1" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_protobuf2 "github.com/golang/protobuf/ptypes/wrappers" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Enumerates references to which the message applies. +type StatusMessage_Reference int32 + +const ( + // Status doesn't refer to any particular input. + StatusMessage_UNSPECIFIED StatusMessage_Reference = 0 + // Status applies to the breakpoint and is related to its location. + StatusMessage_BREAKPOINT_SOURCE_LOCATION StatusMessage_Reference = 3 + // Status applies to the breakpoint and is related to its condition. + StatusMessage_BREAKPOINT_CONDITION StatusMessage_Reference = 4 + // Status applies to the breakpoint and is related to its expressions. + StatusMessage_BREAKPOINT_EXPRESSION StatusMessage_Reference = 7 + // Status applies to the breakpoint and is related to its age. + StatusMessage_BREAKPOINT_AGE StatusMessage_Reference = 8 + // Status applies to the entire variable. + StatusMessage_VARIABLE_NAME StatusMessage_Reference = 5 + // Status applies to variable value (variable name is valid). + StatusMessage_VARIABLE_VALUE StatusMessage_Reference = 6 +) + +var StatusMessage_Reference_name = map[int32]string{ + 0: "UNSPECIFIED", + 3: "BREAKPOINT_SOURCE_LOCATION", + 4: "BREAKPOINT_CONDITION", + 7: "BREAKPOINT_EXPRESSION", + 8: "BREAKPOINT_AGE", + 5: "VARIABLE_NAME", + 6: "VARIABLE_VALUE", +} +var StatusMessage_Reference_value = map[string]int32{ + "UNSPECIFIED": 0, + "BREAKPOINT_SOURCE_LOCATION": 3, + "BREAKPOINT_CONDITION": 4, + "BREAKPOINT_EXPRESSION": 7, + "BREAKPOINT_AGE": 8, + "VARIABLE_NAME": 5, + "VARIABLE_VALUE": 6, +} + +func (x StatusMessage_Reference) String() string { + return proto.EnumName(StatusMessage_Reference_name, int32(x)) +} +func (StatusMessage_Reference) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +// Actions that can be taken when a breakpoint hits. +// Agents should reject breakpoints with unsupported or unknown action values. +type Breakpoint_Action int32 + +const ( + // Capture stack frame and variables and update the breakpoint. + // The data is only captured once. After that the breakpoint is set + // in a final state. + Breakpoint_CAPTURE Breakpoint_Action = 0 + // Log each breakpoint hit. The breakpoint remains active until + // deleted or expired. + Breakpoint_LOG Breakpoint_Action = 1 +) + +var Breakpoint_Action_name = map[int32]string{ + 0: "CAPTURE", + 1: "LOG", +} +var Breakpoint_Action_value = map[string]int32{ + "CAPTURE": 0, + "LOG": 1, +} + +func (x Breakpoint_Action) String() string { + return proto.EnumName(Breakpoint_Action_name, int32(x)) +} +func (Breakpoint_Action) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{5, 0} } + +// Log severity levels. +type Breakpoint_LogLevel int32 + +const ( + // Information log message. + Breakpoint_INFO Breakpoint_LogLevel = 0 + // Warning log message. + Breakpoint_WARNING Breakpoint_LogLevel = 1 + // Error log message. + Breakpoint_ERROR Breakpoint_LogLevel = 2 +) + +var Breakpoint_LogLevel_name = map[int32]string{ + 0: "INFO", + 1: "WARNING", + 2: "ERROR", +} +var Breakpoint_LogLevel_value = map[string]int32{ + "INFO": 0, + "WARNING": 1, + "ERROR": 2, +} + +func (x Breakpoint_LogLevel) String() string { + return proto.EnumName(Breakpoint_LogLevel_name, int32(x)) +} +func (Breakpoint_LogLevel) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{5, 1} } + +// Represents a message with parameters. +type FormatMessage struct { + // Format template for the message. The `format` uses placeholders `$0`, + // `$1`, etc. to reference parameters. `$$` can be used to denote the `$` + // character. + // + // Examples: + // + // * `Failed to load '$0' which helps debug $1 the first time it + // is loaded. Again, $0 is very important.` + // * `Please pay $$10 to use $0 instead of $1.` + Format string `protobuf:"bytes,1,opt,name=format" json:"format,omitempty"` + // Optional parameters to be embedded into the message. + Parameters []string `protobuf:"bytes,2,rep,name=parameters" json:"parameters,omitempty"` +} + +func (m *FormatMessage) Reset() { *m = FormatMessage{} } +func (m *FormatMessage) String() string { return proto.CompactTextString(m) } +func (*FormatMessage) ProtoMessage() {} +func (*FormatMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *FormatMessage) GetFormat() string { + if m != nil { + return m.Format + } + return "" +} + +func (m *FormatMessage) GetParameters() []string { + if m != nil { + return m.Parameters + } + return nil +} + +// Represents a contextual status message. +// The message can indicate an error or informational status, and refer to +// specific parts of the containing object. +// For example, the `Breakpoint.status` field can indicate an error referring +// to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`. +type StatusMessage struct { + // Distinguishes errors from informational messages. + IsError bool `protobuf:"varint,1,opt,name=is_error,json=isError" json:"is_error,omitempty"` + // Reference to which the message applies. + RefersTo StatusMessage_Reference `protobuf:"varint,2,opt,name=refers_to,json=refersTo,enum=google.devtools.clouddebugger.v2.StatusMessage_Reference" json:"refers_to,omitempty"` + // Status message text. + Description *FormatMessage `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *StatusMessage) Reset() { *m = StatusMessage{} } +func (m *StatusMessage) String() string { return proto.CompactTextString(m) } +func (*StatusMessage) ProtoMessage() {} +func (*StatusMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *StatusMessage) GetIsError() bool { + if m != nil { + return m.IsError + } + return false +} + +func (m *StatusMessage) GetRefersTo() StatusMessage_Reference { + if m != nil { + return m.RefersTo + } + return StatusMessage_UNSPECIFIED +} + +func (m *StatusMessage) GetDescription() *FormatMessage { + if m != nil { + return m.Description + } + return nil +} + +// Represents a location in the source code. +type SourceLocation struct { + // Path to the source file within the source context of the target binary. + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + // Line inside the file. The first line in the file has the value `1`. + Line int32 `protobuf:"varint,2,opt,name=line" json:"line,omitempty"` +} + +func (m *SourceLocation) Reset() { *m = SourceLocation{} } +func (m *SourceLocation) String() string { return proto.CompactTextString(m) } +func (*SourceLocation) ProtoMessage() {} +func (*SourceLocation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *SourceLocation) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *SourceLocation) GetLine() int32 { + if m != nil { + return m.Line + } + return 0 +} + +// Represents a variable or an argument possibly of a compound object type. +// Note how the following variables are represented: +// +// 1) A simple variable: +// +// int x = 5 +// +// { name: "x", value: "5", type: "int" } // Captured variable +// +// 2) A compound object: +// +// struct T { +// int m1; +// int m2; +// }; +// T x = { 3, 7 }; +// +// { // Captured variable +// name: "x", +// type: "T", +// members { name: "m1", value: "3", type: "int" }, +// members { name: "m2", value: "7", type: "int" } +// } +// +// 3) A pointer where the pointee was captured: +// +// T x = { 3, 7 }; +// T* p = &x; +// +// { // Captured variable +// name: "p", +// type: "T*", +// value: "0x00500500", +// members { name: "m1", value: "3", type: "int" }, +// members { name: "m2", value: "7", type: "int" } +// } +// +// 4) A pointer where the pointee was not captured: +// +// T* p = new T; +// +// { // Captured variable +// name: "p", +// type: "T*", +// value: "0x00400400" +// status { is_error: true, description { format: "unavailable" } } +// } +// +// The status should describe the reason for the missing value, +// such as `<optimized out>`, `<inaccessible>`, `<pointers limit reached>`. +// +// Note that a null pointer should not have members. +// +// 5) An unnamed value: +// +// int* p = new int(7); +// +// { // Captured variable +// name: "p", +// value: "0x00500500", +// type: "int*", +// members { value: "7", type: "int" } } +// +// 6) An unnamed pointer where the pointee was not captured: +// +// int* p = new int(7); +// int** pp = &p; +// +// { // Captured variable +// name: "pp", +// value: "0x00500500", +// type: "int**", +// members { +// value: "0x00400400", +// type: "int*" +// status { +// is_error: true, +// description: { format: "unavailable" } } +// } +// } +// } +// +// To optimize computation, memory and network traffic, variables that +// repeat in the output multiple times can be stored once in a shared +// variable table and be referenced using the `var_table_index` field. The +// variables stored in the shared table are nameless and are essentially +// a partition of the complete variable. To reconstruct the complete +// variable, merge the referencing variable with the referenced variable. +// +// When using the shared variable table, the following variables: +// +// T x = { 3, 7 }; +// T* p = &x; +// T& r = x; +// +// { name: "x", var_table_index: 3, type: "T" } // Captured variables +// { name: "p", value "0x00500500", type="T*", var_table_index: 3 } +// { name: "r", type="T&", var_table_index: 3 } +// +// { // Shared variable table entry #3: +// members { name: "m1", value: "3", type: "int" }, +// members { name: "m2", value: "7", type: "int" } +// } +// +// Note that the pointer address is stored with the referencing variable +// and not with the referenced variable. This allows the referenced variable +// to be shared between pointers and references. +// +// The type field is optional. The debugger agent may or may not support it. +type Variable struct { + // Name of the variable, if any. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Simple value of the variable. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + // Variable type (e.g. `MyClass`). If the variable is split with + // `var_table_index`, `type` goes next to `value`. The interpretation of + // a type is agent specific. It is recommended to include the dynamic type + // rather than a static type of an object. + Type string `protobuf:"bytes,6,opt,name=type" json:"type,omitempty"` + // Members contained or pointed to by the variable. + Members []*Variable `protobuf:"bytes,3,rep,name=members" json:"members,omitempty"` + // Reference to a variable in the shared variable table. More than + // one variable can reference the same variable in the table. The + // `var_table_index` field is an index into `variable_table` in Breakpoint. + VarTableIndex *google_protobuf2.Int32Value `protobuf:"bytes,4,opt,name=var_table_index,json=varTableIndex" json:"var_table_index,omitempty"` + // Status associated with the variable. This field will usually stay + // unset. A status of a single variable only applies to that variable or + // expression. The rest of breakpoint data still remains valid. Variables + // might be reported in error state even when breakpoint is not in final + // state. + // + // The message may refer to variable name with `refers_to` set to + // `VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`. + // In either case variable value and members will be unset. + // + // Example of error message applied to name: `Invalid expression syntax`. + // + // Example of information message applied to value: `Not captured`. + // + // Examples of error message applied to value: + // + // * `Malformed string`, + // * `Field f not found in class C` + // * `Null pointer dereference` + Status *StatusMessage `protobuf:"bytes,5,opt,name=status" json:"status,omitempty"` +} + +func (m *Variable) Reset() { *m = Variable{} } +func (m *Variable) String() string { return proto.CompactTextString(m) } +func (*Variable) ProtoMessage() {} +func (*Variable) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *Variable) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Variable) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *Variable) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *Variable) GetMembers() []*Variable { + if m != nil { + return m.Members + } + return nil +} + +func (m *Variable) GetVarTableIndex() *google_protobuf2.Int32Value { + if m != nil { + return m.VarTableIndex + } + return nil +} + +func (m *Variable) GetStatus() *StatusMessage { + if m != nil { + return m.Status + } + return nil +} + +// Represents a stack frame context. +type StackFrame struct { + // Demangled function name at the call site. + Function string `protobuf:"bytes,1,opt,name=function" json:"function,omitempty"` + // Source location of the call site. + Location *SourceLocation `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"` + // Set of arguments passed to this function. + // Note that this might not be populated for all stack frames. + Arguments []*Variable `protobuf:"bytes,3,rep,name=arguments" json:"arguments,omitempty"` + // Set of local variables at the stack frame location. + // Note that this might not be populated for all stack frames. + Locals []*Variable `protobuf:"bytes,4,rep,name=locals" json:"locals,omitempty"` +} + +func (m *StackFrame) Reset() { *m = StackFrame{} } +func (m *StackFrame) String() string { return proto.CompactTextString(m) } +func (*StackFrame) ProtoMessage() {} +func (*StackFrame) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *StackFrame) GetFunction() string { + if m != nil { + return m.Function + } + return "" +} + +func (m *StackFrame) GetLocation() *SourceLocation { + if m != nil { + return m.Location + } + return nil +} + +func (m *StackFrame) GetArguments() []*Variable { + if m != nil { + return m.Arguments + } + return nil +} + +func (m *StackFrame) GetLocals() []*Variable { + if m != nil { + return m.Locals + } + return nil +} + +// Represents the breakpoint specification, status and results. +type Breakpoint struct { + // Breakpoint identifier, unique in the scope of the debuggee. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // Action that the agent should perform when the code at the + // breakpoint location is hit. + Action Breakpoint_Action `protobuf:"varint,13,opt,name=action,enum=google.devtools.clouddebugger.v2.Breakpoint_Action" json:"action,omitempty"` + // Breakpoint source location. + Location *SourceLocation `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"` + // Condition that triggers the breakpoint. + // The condition is a compound boolean expression composed using expressions + // in a programming language at the source location. + Condition string `protobuf:"bytes,3,opt,name=condition" json:"condition,omitempty"` + // List of read-only expressions to evaluate at the breakpoint location. + // The expressions are composed using expressions in the programming language + // at the source location. If the breakpoint action is `LOG`, the evaluated + // expressions are included in log statements. + Expressions []string `protobuf:"bytes,4,rep,name=expressions" json:"expressions,omitempty"` + // Only relevant when action is `LOG`. Defines the message to log when + // the breakpoint hits. The message may include parameter placeholders `$0`, + // `$1`, etc. These placeholders are replaced with the evaluated value + // of the appropriate expression. Expressions not referenced in + // `log_message_format` are not logged. + // + // Example: `Message received, id = $0, count = $1` with + // `expressions` = `[ message.id, message.count ]`. + LogMessageFormat string `protobuf:"bytes,14,opt,name=log_message_format,json=logMessageFormat" json:"log_message_format,omitempty"` + // Indicates the severity of the log. Only relevant when action is `LOG`. + LogLevel Breakpoint_LogLevel `protobuf:"varint,15,opt,name=log_level,json=logLevel,enum=google.devtools.clouddebugger.v2.Breakpoint_LogLevel" json:"log_level,omitempty"` + // When true, indicates that this is a final result and the + // breakpoint state will not change from here on. + IsFinalState bool `protobuf:"varint,5,opt,name=is_final_state,json=isFinalState" json:"is_final_state,omitempty"` + // Time this breakpoint was created by the server in seconds resolution. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,11,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Time this breakpoint was finalized as seen by the server in seconds + // resolution. + FinalTime *google_protobuf1.Timestamp `protobuf:"bytes,12,opt,name=final_time,json=finalTime" json:"final_time,omitempty"` + // E-mail address of the user that created this breakpoint + UserEmail string `protobuf:"bytes,16,opt,name=user_email,json=userEmail" json:"user_email,omitempty"` + // Breakpoint status. + // + // The status includes an error flag and a human readable message. + // This field is usually unset. The message can be either + // informational or an error message. Regardless, clients should always + // display the text message back to the user. + // + // Error status indicates complete failure of the breakpoint. + // + // Example (non-final state): `Still loading symbols...` + // + // Examples (final state): + // + // * `Invalid line number` referring to location + // * `Field f not found in class C` referring to condition + Status *StatusMessage `protobuf:"bytes,10,opt,name=status" json:"status,omitempty"` + // The stack at breakpoint time. + StackFrames []*StackFrame `protobuf:"bytes,7,rep,name=stack_frames,json=stackFrames" json:"stack_frames,omitempty"` + // Values of evaluated expressions at breakpoint time. + // The evaluated expressions appear in exactly the same order they + // are listed in the `expressions` field. + // The `name` field holds the original expression text, the `value` or + // `members` field holds the result of the evaluated expression. + // If the expression cannot be evaluated, the `status` inside the `Variable` + // will indicate an error and contain the error text. + EvaluatedExpressions []*Variable `protobuf:"bytes,8,rep,name=evaluated_expressions,json=evaluatedExpressions" json:"evaluated_expressions,omitempty"` + // The `variable_table` exists to aid with computation, memory and network + // traffic optimization. It enables storing a variable once and reference + // it from multiple variables, including variables stored in the + // `variable_table` itself. + // For example, the same `this` object, which may appear at many levels of + // the stack, can have all of its data stored once in this table. The + // stack frame variables then would hold only a reference to it. + // + // The variable `var_table_index` field is an index into this repeated field. + // The stored objects are nameless and get their name from the referencing + // variable. The effective variable is a merge of the referencing variable + // and the referenced variable. + VariableTable []*Variable `protobuf:"bytes,9,rep,name=variable_table,json=variableTable" json:"variable_table,omitempty"` + // A set of custom breakpoint properties, populated by the agent, to be + // displayed to the user. + Labels map[string]string `protobuf:"bytes,17,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Breakpoint) Reset() { *m = Breakpoint{} } +func (m *Breakpoint) String() string { return proto.CompactTextString(m) } +func (*Breakpoint) ProtoMessage() {} +func (*Breakpoint) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *Breakpoint) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Breakpoint) GetAction() Breakpoint_Action { + if m != nil { + return m.Action + } + return Breakpoint_CAPTURE +} + +func (m *Breakpoint) GetLocation() *SourceLocation { + if m != nil { + return m.Location + } + return nil +} + +func (m *Breakpoint) GetCondition() string { + if m != nil { + return m.Condition + } + return "" +} + +func (m *Breakpoint) GetExpressions() []string { + if m != nil { + return m.Expressions + } + return nil +} + +func (m *Breakpoint) GetLogMessageFormat() string { + if m != nil { + return m.LogMessageFormat + } + return "" +} + +func (m *Breakpoint) GetLogLevel() Breakpoint_LogLevel { + if m != nil { + return m.LogLevel + } + return Breakpoint_INFO +} + +func (m *Breakpoint) GetIsFinalState() bool { + if m != nil { + return m.IsFinalState + } + return false +} + +func (m *Breakpoint) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Breakpoint) GetFinalTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FinalTime + } + return nil +} + +func (m *Breakpoint) GetUserEmail() string { + if m != nil { + return m.UserEmail + } + return "" +} + +func (m *Breakpoint) GetStatus() *StatusMessage { + if m != nil { + return m.Status + } + return nil +} + +func (m *Breakpoint) GetStackFrames() []*StackFrame { + if m != nil { + return m.StackFrames + } + return nil +} + +func (m *Breakpoint) GetEvaluatedExpressions() []*Variable { + if m != nil { + return m.EvaluatedExpressions + } + return nil +} + +func (m *Breakpoint) GetVariableTable() []*Variable { + if m != nil { + return m.VariableTable + } + return nil +} + +func (m *Breakpoint) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// Represents the application to debug. The application may include one or more +// replicated processes executing the same code. Each of these processes is +// attached with a debugger agent, carrying out the debugging commands. +// The agents attached to the same debuggee are identified by using exactly the +// same field values when registering. +type Debuggee struct { + // Unique identifier for the debuggee generated by the controller service. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // Project the debuggee is associated with. + // Use the project number when registering a Google Cloud Platform project. + Project string `protobuf:"bytes,2,opt,name=project" json:"project,omitempty"` + // Debuggee uniquifier within the project. + // Any string that identifies the application within the project can be used. + // Including environment and version or build IDs is recommended. + Uniquifier string `protobuf:"bytes,3,opt,name=uniquifier" json:"uniquifier,omitempty"` + // Human readable description of the debuggee. + // Including a human-readable project name, environment name and version + // information is recommended. + Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` + // If set to `true`, indicates that the debuggee is considered as inactive by + // the Controller service. + IsInactive bool `protobuf:"varint,5,opt,name=is_inactive,json=isInactive" json:"is_inactive,omitempty"` + // Version ID of the agent release. The version ID is structured as + // following: `domain/type/vmajor.minor` (for example + // `google.com/gcp-java/v1.1`). + AgentVersion string `protobuf:"bytes,6,opt,name=agent_version,json=agentVersion" json:"agent_version,omitempty"` + // If set to `true`, indicates that the agent should disable itself and + // detach from the debuggee. + IsDisabled bool `protobuf:"varint,7,opt,name=is_disabled,json=isDisabled" json:"is_disabled,omitempty"` + // Human readable message to be displayed to the user about this debuggee. + // Absence of this field indicates no status. The message can be either + // informational or an error status. + Status *StatusMessage `protobuf:"bytes,8,opt,name=status" json:"status,omitempty"` + // References to the locations and revisions of the source code used in the + // deployed application. + // + // NOTE: This field is deprecated. Consumers should use + // `ext_source_contexts` if it is not empty. Debug agents should populate + // both this field and `ext_source_contexts`. + SourceContexts []*google_devtools_source_v1.SourceContext `protobuf:"bytes,9,rep,name=source_contexts,json=sourceContexts" json:"source_contexts,omitempty"` + // References to the locations and revisions of the source code used in the + // deployed application. + // + // Contexts describing a remote repo related to the source code + // have a `category` label of `remote_repo`. Source snapshot source + // contexts have a `category` of `snapshot`. + ExtSourceContexts []*google_devtools_source_v1.ExtendedSourceContext `protobuf:"bytes,13,rep,name=ext_source_contexts,json=extSourceContexts" json:"ext_source_contexts,omitempty"` + // A set of custom debuggee properties, populated by the agent, to be + // displayed to the user. + Labels map[string]string `protobuf:"bytes,11,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Debuggee) Reset() { *m = Debuggee{} } +func (m *Debuggee) String() string { return proto.CompactTextString(m) } +func (*Debuggee) ProtoMessage() {} +func (*Debuggee) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *Debuggee) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Debuggee) GetProject() string { + if m != nil { + return m.Project + } + return "" +} + +func (m *Debuggee) GetUniquifier() string { + if m != nil { + return m.Uniquifier + } + return "" +} + +func (m *Debuggee) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Debuggee) GetIsInactive() bool { + if m != nil { + return m.IsInactive + } + return false +} + +func (m *Debuggee) GetAgentVersion() string { + if m != nil { + return m.AgentVersion + } + return "" +} + +func (m *Debuggee) GetIsDisabled() bool { + if m != nil { + return m.IsDisabled + } + return false +} + +func (m *Debuggee) GetStatus() *StatusMessage { + if m != nil { + return m.Status + } + return nil +} + +func (m *Debuggee) GetSourceContexts() []*google_devtools_source_v1.SourceContext { + if m != nil { + return m.SourceContexts + } + return nil +} + +func (m *Debuggee) GetExtSourceContexts() []*google_devtools_source_v1.ExtendedSourceContext { + if m != nil { + return m.ExtSourceContexts + } + return nil +} + +func (m *Debuggee) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func init() { + proto.RegisterType((*FormatMessage)(nil), "google.devtools.clouddebugger.v2.FormatMessage") + proto.RegisterType((*StatusMessage)(nil), "google.devtools.clouddebugger.v2.StatusMessage") + proto.RegisterType((*SourceLocation)(nil), "google.devtools.clouddebugger.v2.SourceLocation") + proto.RegisterType((*Variable)(nil), "google.devtools.clouddebugger.v2.Variable") + proto.RegisterType((*StackFrame)(nil), "google.devtools.clouddebugger.v2.StackFrame") + proto.RegisterType((*Breakpoint)(nil), "google.devtools.clouddebugger.v2.Breakpoint") + proto.RegisterType((*Debuggee)(nil), "google.devtools.clouddebugger.v2.Debuggee") + proto.RegisterEnum("google.devtools.clouddebugger.v2.StatusMessage_Reference", StatusMessage_Reference_name, StatusMessage_Reference_value) + proto.RegisterEnum("google.devtools.clouddebugger.v2.Breakpoint_Action", Breakpoint_Action_name, Breakpoint_Action_value) + proto.RegisterEnum("google.devtools.clouddebugger.v2.Breakpoint_LogLevel", Breakpoint_LogLevel_name, Breakpoint_LogLevel_value) +} + +func init() { proto.RegisterFile("google/devtools/clouddebugger/v2/data.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1239 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x5f, 0x73, 0xda, 0xc6, + 0x16, 0x0f, 0x7f, 0x0c, 0xd2, 0xc1, 0x60, 0x65, 0x6f, 0x72, 0x47, 0xf1, 0xcd, 0x75, 0x18, 0x6e, + 0x1e, 0x3c, 0xb7, 0x19, 0x48, 0xc8, 0xb4, 0x93, 0x34, 0x4f, 0x18, 0xcb, 0x2e, 0x13, 0x02, 0x64, + 0xb1, 0xdd, 0x4e, 0x5f, 0xd4, 0x35, 0x5a, 0x54, 0x35, 0x42, 0x52, 0x77, 0x17, 0xea, 0xbc, 0x76, + 0xf2, 0x31, 0xfa, 0x11, 0xfa, 0x9d, 0xfa, 0xd6, 0xcf, 0xd1, 0xd9, 0xd5, 0x8a, 0x88, 0xa4, 0x2d, + 0x71, 0x93, 0xb7, 0xb3, 0xbf, 0xfd, 0x9d, 0xdf, 0x8a, 0xb3, 0xbf, 0x73, 0x24, 0xe0, 0x33, 0x3f, + 0x8e, 0xfd, 0x90, 0x76, 0x3c, 0xba, 0x12, 0x71, 0x1c, 0xf2, 0xce, 0x2c, 0x8c, 0x97, 0x9e, 0x47, + 0x2f, 0x97, 0xbe, 0x4f, 0x59, 0x67, 0xd5, 0xed, 0x78, 0x44, 0x90, 0x76, 0xc2, 0x62, 0x11, 0xa3, + 0x66, 0x4a, 0x6e, 0x67, 0xe4, 0xf6, 0x06, 0xb9, 0xbd, 0xea, 0xee, 0xdf, 0xd5, 0x72, 0x24, 0x09, + 0x3a, 0x24, 0x8a, 0x62, 0x41, 0x44, 0x10, 0x47, 0x3c, 0xcd, 0xdf, 0x6f, 0xbf, 0x7b, 0x18, 0x8f, + 0x97, 0x6c, 0x46, 0x3b, 0xab, 0x47, 0x3a, 0x72, 0x67, 0x71, 0x24, 0xe8, 0x95, 0xd0, 0xfc, 0x7b, + 0x9a, 0xaf, 0x56, 0x97, 0xcb, 0x79, 0x47, 0x04, 0x0b, 0xca, 0x05, 0x59, 0x24, 0x9a, 0x70, 0xf0, + 0x2e, 0xe1, 0x27, 0x46, 0x92, 0x84, 0x32, 0x7d, 0x60, 0xeb, 0x14, 0xea, 0x27, 0x31, 0x5b, 0x10, + 0xf1, 0x82, 0x72, 0x4e, 0x7c, 0x8a, 0xfe, 0x0d, 0x95, 0xb9, 0x02, 0xec, 0x42, 0xb3, 0x70, 0x68, + 0x62, 0xbd, 0x42, 0x07, 0x00, 0x09, 0x61, 0x64, 0x41, 0x05, 0x65, 0xdc, 0x2e, 0x36, 0x4b, 0x87, + 0x26, 0xce, 0x21, 0xad, 0x37, 0x25, 0xa8, 0x4f, 0x05, 0x11, 0x4b, 0x9e, 0x29, 0xdd, 0x01, 0x23, + 0xe0, 0x2e, 0x65, 0x2c, 0x66, 0x4a, 0xcb, 0xc0, 0xd5, 0x80, 0x3b, 0x72, 0x89, 0x2e, 0xc0, 0x64, + 0x74, 0x4e, 0x19, 0x77, 0x45, 0x6c, 0x17, 0x9b, 0x85, 0xc3, 0x46, 0xf7, 0x69, 0x7b, 0x5b, 0xe9, + 0xda, 0x1b, 0xf2, 0x6d, 0x2c, 0x05, 0x68, 0x34, 0xa3, 0xd8, 0x48, 0xb5, 0xce, 0x62, 0xf4, 0x12, + 0x6a, 0x1e, 0xe5, 0x33, 0x16, 0x24, 0xb2, 0xa8, 0x76, 0xa9, 0x59, 0x38, 0xac, 0x75, 0x3b, 0xdb, + 0x95, 0x37, 0x4a, 0x80, 0xf3, 0x1a, 0xad, 0x5f, 0x0b, 0x60, 0xae, 0x8f, 0x42, 0x7b, 0x50, 0x3b, + 0x1f, 0x4d, 0x27, 0x4e, 0x7f, 0x70, 0x32, 0x70, 0x8e, 0xad, 0x1b, 0xe8, 0x00, 0xf6, 0x8f, 0xb0, + 0xd3, 0x7b, 0x3e, 0x19, 0x0f, 0x46, 0x67, 0xee, 0x74, 0x7c, 0x8e, 0xfb, 0x8e, 0x3b, 0x1c, 0xf7, + 0x7b, 0x67, 0x83, 0xf1, 0xc8, 0x2a, 0x21, 0x1b, 0x6e, 0xe5, 0xf6, 0xfb, 0xe3, 0xd1, 0xf1, 0x40, + 0xed, 0x94, 0xd1, 0x1d, 0xb8, 0x9d, 0xdb, 0x71, 0xbe, 0x99, 0x60, 0x67, 0x3a, 0x95, 0x5b, 0x55, + 0x84, 0xa0, 0x91, 0xdb, 0xea, 0x9d, 0x3a, 0x96, 0x81, 0x6e, 0x42, 0xfd, 0xa2, 0x87, 0x07, 0xbd, + 0xa3, 0xa1, 0xe3, 0x8e, 0x7a, 0x2f, 0x1c, 0x6b, 0x47, 0xd2, 0xd6, 0xd0, 0x45, 0x6f, 0x78, 0xee, + 0x58, 0x95, 0xd6, 0x13, 0x68, 0x4c, 0x95, 0x51, 0x86, 0xf1, 0x4c, 0x39, 0x0b, 0x21, 0x28, 0x27, + 0x44, 0x7c, 0xaf, 0xaf, 0x53, 0xc5, 0x12, 0x0b, 0x83, 0x88, 0xaa, 0xd2, 0xef, 0x60, 0x15, 0xb7, + 0x7e, 0x29, 0x82, 0x71, 0x41, 0x58, 0x40, 0x2e, 0x43, 0x2a, 0x09, 0x11, 0x59, 0xd0, 0x2c, 0x49, + 0xc6, 0xe8, 0x16, 0xec, 0xac, 0x48, 0xb8, 0x4c, 0xb3, 0x4c, 0x9c, 0x2e, 0x24, 0x53, 0xbc, 0x4e, + 0xa8, 0x5d, 0x49, 0x99, 0x32, 0x46, 0xc7, 0x50, 0x5d, 0xd0, 0xc5, 0xa5, 0x34, 0x4a, 0xa9, 0x59, + 0x3a, 0xac, 0x75, 0xff, 0xbf, 0xfd, 0x0a, 0xb2, 0xa3, 0x71, 0x96, 0x8a, 0xfa, 0xb0, 0xb7, 0x22, + 0xcc, 0x15, 0x12, 0x75, 0x83, 0xc8, 0xa3, 0x57, 0x76, 0x59, 0x5d, 0xe8, 0x7f, 0x32, 0xb5, 0xcc, + 0xd4, 0xed, 0x41, 0x24, 0x1e, 0x77, 0x2f, 0xe4, 0xf3, 0xe0, 0xfa, 0x8a, 0xb0, 0x33, 0x99, 0x32, + 0x90, 0x19, 0xe8, 0x14, 0x2a, 0x5c, 0xd9, 0xc6, 0xde, 0xf9, 0x50, 0x33, 0x6c, 0xd8, 0x0c, 0xeb, + 0xf4, 0xd6, 0x9b, 0x22, 0xc0, 0x54, 0x90, 0xd9, 0xab, 0x13, 0x69, 0x79, 0xb4, 0x0f, 0xc6, 0x7c, + 0x19, 0xcd, 0x94, 0xcd, 0xd2, 0x22, 0xad, 0xd7, 0x68, 0x08, 0x46, 0xa8, 0xab, 0xaf, 0x6a, 0x55, + 0xeb, 0x3e, 0xfc, 0x80, 0x53, 0x37, 0x6e, 0x0d, 0xaf, 0x15, 0xd0, 0x57, 0x60, 0x12, 0xe6, 0x2f, + 0x17, 0x34, 0x12, 0xff, 0xa4, 0x9c, 0x6f, 0x93, 0xd1, 0x11, 0x54, 0xa4, 0x6a, 0xc8, 0xed, 0xf2, + 0xb5, 0x65, 0x74, 0x66, 0xeb, 0x37, 0x03, 0xe0, 0x88, 0x51, 0xf2, 0x2a, 0x89, 0x83, 0x48, 0xa0, + 0x06, 0x14, 0x03, 0x4f, 0x17, 0xa0, 0x18, 0x78, 0xe8, 0x39, 0x54, 0x48, 0x5a, 0x94, 0xba, 0xea, + 0xea, 0xc7, 0xdb, 0x8f, 0x78, 0xab, 0xd6, 0xee, 0xa9, 0x54, 0xac, 0x25, 0x3e, 0x71, 0x1d, 0xef, + 0x82, 0x39, 0x8b, 0x23, 0x2f, 0x58, 0x4f, 0x06, 0x13, 0xbf, 0x05, 0x50, 0x13, 0x6a, 0xf4, 0x2a, + 0x61, 0x94, 0x73, 0x39, 0x8d, 0x55, 0x81, 0x4c, 0x9c, 0x87, 0xd0, 0x03, 0x40, 0x61, 0xec, 0xbb, + 0x8b, 0xd4, 0x17, 0xae, 0x1e, 0x92, 0x0d, 0x25, 0x64, 0x85, 0xb1, 0xaf, 0x0d, 0x93, 0x8e, 0x12, + 0x84, 0xc1, 0x94, 0xec, 0x90, 0xae, 0x68, 0x68, 0xef, 0xa9, 0x5a, 0x7c, 0x7e, 0xad, 0x5a, 0x0c, + 0x63, 0x7f, 0x28, 0x93, 0xe5, 0x2f, 0x48, 0x23, 0x74, 0x1f, 0x1a, 0x01, 0x77, 0xe7, 0x41, 0x44, + 0x42, 0x57, 0xba, 0x92, 0x2a, 0x4f, 0x1b, 0x78, 0x37, 0xe0, 0x27, 0x12, 0x94, 0xc6, 0xa5, 0xe8, + 0x19, 0xd4, 0x66, 0x8c, 0x12, 0x41, 0x5d, 0xf9, 0x2e, 0xb0, 0x6b, 0xaa, 0x70, 0xfb, 0xef, 0xb5, + 0xcc, 0x59, 0xf6, 0xa2, 0xc0, 0x90, 0xd2, 0x25, 0x80, 0x9e, 0x02, 0xa4, 0xfa, 0x2a, 0x77, 0x77, + 0x6b, 0xae, 0xa9, 0xd8, 0x2a, 0xf5, 0xbf, 0x00, 0x4b, 0x4e, 0x99, 0x4b, 0x17, 0x24, 0x08, 0x6d, + 0x2b, 0x2d, 0xb0, 0x44, 0x1c, 0x09, 0xe4, 0x1a, 0x11, 0x3e, 0xaa, 0x11, 0xd1, 0x18, 0x76, 0xb9, + 0xec, 0x43, 0x77, 0x2e, 0x1b, 0x91, 0xdb, 0x55, 0xe5, 0xe5, 0x07, 0x1f, 0x24, 0xa7, 0xbb, 0x17, + 0xd7, 0xf8, 0x3a, 0xe6, 0xc8, 0x85, 0xdb, 0x54, 0xce, 0x32, 0x22, 0xa8, 0xe7, 0xe6, 0x4d, 0x60, + 0x5c, 0xbb, 0x4b, 0x6e, 0xad, 0x85, 0x9c, 0x9c, 0x73, 0x5e, 0x42, 0x63, 0xa5, 0x19, 0xe9, 0x34, + 0xb3, 0xcd, 0x6b, 0x2b, 0xd7, 0x33, 0x05, 0x35, 0xdb, 0xd0, 0x04, 0x2a, 0x21, 0xb9, 0xa4, 0x21, + 0xb7, 0x6f, 0x2a, 0xa9, 0x27, 0xd7, 0xf3, 0x96, 0x4a, 0x75, 0x22, 0xc1, 0x5e, 0x63, 0xad, 0xb3, + 0xff, 0x14, 0x6a, 0x39, 0x18, 0x59, 0x50, 0x7a, 0x45, 0x5f, 0xeb, 0xce, 0x96, 0xe1, 0x9f, 0x8f, + 0xff, 0x2f, 0x8b, 0x4f, 0x0a, 0xad, 0x03, 0xa8, 0xa4, 0x9d, 0x8b, 0x6a, 0x50, 0xed, 0xf7, 0x26, + 0x67, 0xe7, 0xd8, 0xb1, 0x6e, 0xa0, 0x2a, 0x94, 0x86, 0xe3, 0x53, 0xab, 0xd0, 0x7a, 0x00, 0x46, + 0xe6, 0x66, 0x64, 0x40, 0x79, 0x30, 0x3a, 0x19, 0x5b, 0x37, 0x24, 0xf7, 0xeb, 0x1e, 0x1e, 0x0d, + 0x46, 0xa7, 0x56, 0x01, 0x99, 0xb0, 0xe3, 0x60, 0x3c, 0xc6, 0x56, 0xb1, 0xf5, 0x7b, 0x19, 0x8c, + 0xe3, 0xf4, 0xb9, 0xe9, 0x7b, 0xf3, 0xc5, 0x86, 0x6a, 0xc2, 0xe2, 0x1f, 0xe8, 0x4c, 0xe8, 0xc7, + 0xc8, 0x96, 0xf2, 0xfb, 0x64, 0x19, 0x05, 0x3f, 0x2e, 0x83, 0x79, 0x40, 0x99, 0xee, 0xef, 0x1c, + 0x22, 0x1b, 0x3c, 0xff, 0x69, 0x50, 0x56, 0x84, 0x3c, 0x84, 0xee, 0x41, 0x2d, 0xe0, 0x6e, 0x10, + 0xc9, 0xe9, 0xb3, 0xca, 0x7a, 0x0b, 0x02, 0x3e, 0xd0, 0x08, 0xfa, 0x1f, 0xd4, 0x89, 0x4f, 0x23, + 0xe1, 0xae, 0x28, 0x93, 0x37, 0xab, 0xdf, 0x79, 0xbb, 0x0a, 0xbc, 0x48, 0x31, 0xad, 0xe2, 0x05, + 0x5c, 0xde, 0x93, 0x67, 0x57, 0x33, 0x95, 0x63, 0x8d, 0xe4, 0x1a, 0xc1, 0xf8, 0xb8, 0x46, 0x78, + 0x09, 0x7b, 0x9b, 0xdf, 0x84, 0x5c, 0xfb, 0xea, 0xf0, 0x3d, 0xc5, 0x94, 0xd7, 0x5e, 0x3d, 0xd2, + 0xe3, 0xb1, 0x9f, 0x26, 0xe0, 0x06, 0xcf, 0x2f, 0x39, 0xfa, 0x0e, 0xfe, 0x45, 0xaf, 0x84, 0xfb, + 0xae, 0x6c, 0x5d, 0xc9, 0x3e, 0xfc, 0x1b, 0x59, 0xe7, 0x4a, 0xd0, 0xc8, 0xa3, 0xde, 0xa6, 0xfc, + 0x4d, 0x7a, 0x25, 0xa6, 0x9b, 0x27, 0x8c, 0xd6, 0xc6, 0xad, 0x29, 0xd1, 0x2f, 0xb6, 0xff, 0xfa, + 0xcc, 0x0c, 0x9f, 0xd8, 0xb6, 0x47, 0x3f, 0x17, 0xe0, 0xfe, 0x2c, 0x5e, 0x6c, 0x7d, 0x80, 0x23, + 0xf3, 0x98, 0x08, 0x32, 0x91, 0xc3, 0x6f, 0x52, 0xf8, 0xf6, 0x85, 0xa6, 0xfb, 0x71, 0x48, 0x22, + 0xbf, 0x1d, 0x33, 0xbf, 0xe3, 0xd3, 0x48, 0x8d, 0xc6, 0x4e, 0xba, 0x45, 0x92, 0x80, 0xff, 0xf5, + 0xbf, 0x85, 0x67, 0x1b, 0xc0, 0x65, 0x45, 0x65, 0x3e, 0xfe, 0x23, 0x00, 0x00, 0xff, 0xff, 0x00, + 0xbf, 0x9b, 0x7e, 0x66, 0x0c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/debugger.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/debugger.pb.go new file mode 100644 index 0000000..fdfbfc4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/debugger.pb.go @@ -0,0 +1,648 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/clouddebugger/v2/debugger.proto +// DO NOT EDIT! + +package clouddebugger + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request to set a breakpoint +type SetBreakpointRequest struct { + // ID of the debuggee where the breakpoint is to be set. + DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` + // Breakpoint specification to set. + // The field 'location' of the breakpoint must be set. + Breakpoint *Breakpoint `protobuf:"bytes,2,opt,name=breakpoint" json:"breakpoint,omitempty"` + // The client version making the call. + // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + ClientVersion string `protobuf:"bytes,4,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` +} + +func (m *SetBreakpointRequest) Reset() { *m = SetBreakpointRequest{} } +func (m *SetBreakpointRequest) String() string { return proto.CompactTextString(m) } +func (*SetBreakpointRequest) ProtoMessage() {} +func (*SetBreakpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *SetBreakpointRequest) GetDebuggeeId() string { + if m != nil { + return m.DebuggeeId + } + return "" +} + +func (m *SetBreakpointRequest) GetBreakpoint() *Breakpoint { + if m != nil { + return m.Breakpoint + } + return nil +} + +func (m *SetBreakpointRequest) GetClientVersion() string { + if m != nil { + return m.ClientVersion + } + return "" +} + +// Response for setting a breakpoint. +type SetBreakpointResponse struct { + // Breakpoint resource. + // The field `id` is guaranteed to be set (in addition to the echoed fileds). + Breakpoint *Breakpoint `protobuf:"bytes,1,opt,name=breakpoint" json:"breakpoint,omitempty"` +} + +func (m *SetBreakpointResponse) Reset() { *m = SetBreakpointResponse{} } +func (m *SetBreakpointResponse) String() string { return proto.CompactTextString(m) } +func (*SetBreakpointResponse) ProtoMessage() {} +func (*SetBreakpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *SetBreakpointResponse) GetBreakpoint() *Breakpoint { + if m != nil { + return m.Breakpoint + } + return nil +} + +// Request to get breakpoint information. +type GetBreakpointRequest struct { + // ID of the debuggee whose breakpoint to get. + DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` + // ID of the breakpoint to get. + BreakpointId string `protobuf:"bytes,2,opt,name=breakpoint_id,json=breakpointId" json:"breakpoint_id,omitempty"` + // The client version making the call. + // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + ClientVersion string `protobuf:"bytes,4,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` +} + +func (m *GetBreakpointRequest) Reset() { *m = GetBreakpointRequest{} } +func (m *GetBreakpointRequest) String() string { return proto.CompactTextString(m) } +func (*GetBreakpointRequest) ProtoMessage() {} +func (*GetBreakpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *GetBreakpointRequest) GetDebuggeeId() string { + if m != nil { + return m.DebuggeeId + } + return "" +} + +func (m *GetBreakpointRequest) GetBreakpointId() string { + if m != nil { + return m.BreakpointId + } + return "" +} + +func (m *GetBreakpointRequest) GetClientVersion() string { + if m != nil { + return m.ClientVersion + } + return "" +} + +// Response for getting breakpoint information. +type GetBreakpointResponse struct { + // Complete breakpoint state. + // The fields `id` and `location` are guaranteed to be set. + Breakpoint *Breakpoint `protobuf:"bytes,1,opt,name=breakpoint" json:"breakpoint,omitempty"` +} + +func (m *GetBreakpointResponse) Reset() { *m = GetBreakpointResponse{} } +func (m *GetBreakpointResponse) String() string { return proto.CompactTextString(m) } +func (*GetBreakpointResponse) ProtoMessage() {} +func (*GetBreakpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *GetBreakpointResponse) GetBreakpoint() *Breakpoint { + if m != nil { + return m.Breakpoint + } + return nil +} + +// Request to delete a breakpoint. +type DeleteBreakpointRequest struct { + // ID of the debuggee whose breakpoint to delete. + DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` + // ID of the breakpoint to delete. + BreakpointId string `protobuf:"bytes,2,opt,name=breakpoint_id,json=breakpointId" json:"breakpoint_id,omitempty"` + // The client version making the call. + // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + ClientVersion string `protobuf:"bytes,3,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` +} + +func (m *DeleteBreakpointRequest) Reset() { *m = DeleteBreakpointRequest{} } +func (m *DeleteBreakpointRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteBreakpointRequest) ProtoMessage() {} +func (*DeleteBreakpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *DeleteBreakpointRequest) GetDebuggeeId() string { + if m != nil { + return m.DebuggeeId + } + return "" +} + +func (m *DeleteBreakpointRequest) GetBreakpointId() string { + if m != nil { + return m.BreakpointId + } + return "" +} + +func (m *DeleteBreakpointRequest) GetClientVersion() string { + if m != nil { + return m.ClientVersion + } + return "" +} + +// Request to list breakpoints. +type ListBreakpointsRequest struct { + // ID of the debuggee whose breakpoints to list. + DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` + // When set to `true`, the response includes the list of breakpoints set by + // any user. Otherwise, it includes only breakpoints set by the caller. + IncludeAllUsers bool `protobuf:"varint,2,opt,name=include_all_users,json=includeAllUsers" json:"include_all_users,omitempty"` + // When set to `true`, the response includes active and inactive + // breakpoints. Otherwise, it includes only active breakpoints. + IncludeInactive bool `protobuf:"varint,3,opt,name=include_inactive,json=includeInactive" json:"include_inactive,omitempty"` + // When set, the response includes only breakpoints with the specified action. + Action *ListBreakpointsRequest_BreakpointActionValue `protobuf:"bytes,4,opt,name=action" json:"action,omitempty"` + // This field is deprecated. The following fields are always stripped out of + // the result: `stack_frames`, `evaluated_expressions` and `variable_table`. + StripResults bool `protobuf:"varint,5,opt,name=strip_results,json=stripResults" json:"strip_results,omitempty"` + // A wait token that, if specified, blocks the call until the breakpoints + // list has changed, or a server selected timeout has expired. The value + // should be set from the last response. The error code + // `google.rpc.Code.ABORTED` (RPC) is returned on wait timeout, which + // should be called again with the same `wait_token`. + WaitToken string `protobuf:"bytes,6,opt,name=wait_token,json=waitToken" json:"wait_token,omitempty"` + // The client version making the call. + // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + ClientVersion string `protobuf:"bytes,8,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` +} + +func (m *ListBreakpointsRequest) Reset() { *m = ListBreakpointsRequest{} } +func (m *ListBreakpointsRequest) String() string { return proto.CompactTextString(m) } +func (*ListBreakpointsRequest) ProtoMessage() {} +func (*ListBreakpointsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *ListBreakpointsRequest) GetDebuggeeId() string { + if m != nil { + return m.DebuggeeId + } + return "" +} + +func (m *ListBreakpointsRequest) GetIncludeAllUsers() bool { + if m != nil { + return m.IncludeAllUsers + } + return false +} + +func (m *ListBreakpointsRequest) GetIncludeInactive() bool { + if m != nil { + return m.IncludeInactive + } + return false +} + +func (m *ListBreakpointsRequest) GetAction() *ListBreakpointsRequest_BreakpointActionValue { + if m != nil { + return m.Action + } + return nil +} + +func (m *ListBreakpointsRequest) GetStripResults() bool { + if m != nil { + return m.StripResults + } + return false +} + +func (m *ListBreakpointsRequest) GetWaitToken() string { + if m != nil { + return m.WaitToken + } + return "" +} + +func (m *ListBreakpointsRequest) GetClientVersion() string { + if m != nil { + return m.ClientVersion + } + return "" +} + +// Wrapper message for `Breakpoint.Action`. Defines a filter on the action +// field of breakpoints. +type ListBreakpointsRequest_BreakpointActionValue struct { + // Only breakpoints with the specified action will pass the filter. + Value Breakpoint_Action `protobuf:"varint,1,opt,name=value,enum=google.devtools.clouddebugger.v2.Breakpoint_Action" json:"value,omitempty"` +} + +func (m *ListBreakpointsRequest_BreakpointActionValue) Reset() { + *m = ListBreakpointsRequest_BreakpointActionValue{} +} +func (m *ListBreakpointsRequest_BreakpointActionValue) String() string { + return proto.CompactTextString(m) +} +func (*ListBreakpointsRequest_BreakpointActionValue) ProtoMessage() {} +func (*ListBreakpointsRequest_BreakpointActionValue) Descriptor() ([]byte, []int) { + return fileDescriptor2, []int{5, 0} +} + +func (m *ListBreakpointsRequest_BreakpointActionValue) GetValue() Breakpoint_Action { + if m != nil { + return m.Value + } + return Breakpoint_CAPTURE +} + +// Response for listing breakpoints. +type ListBreakpointsResponse struct { + // List of breakpoints matching the request. + // The fields `id` and `location` are guaranteed to be set on each breakpoint. + // The fields: `stack_frames`, `evaluated_expressions` and `variable_table` + // are cleared on each breakpoint regardless of it's status. + Breakpoints []*Breakpoint `protobuf:"bytes,1,rep,name=breakpoints" json:"breakpoints,omitempty"` + // A wait token that can be used in the next call to `list` (REST) or + // `ListBreakpoints` (RPC) to block until the list of breakpoints has changes. + NextWaitToken string `protobuf:"bytes,2,opt,name=next_wait_token,json=nextWaitToken" json:"next_wait_token,omitempty"` +} + +func (m *ListBreakpointsResponse) Reset() { *m = ListBreakpointsResponse{} } +func (m *ListBreakpointsResponse) String() string { return proto.CompactTextString(m) } +func (*ListBreakpointsResponse) ProtoMessage() {} +func (*ListBreakpointsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *ListBreakpointsResponse) GetBreakpoints() []*Breakpoint { + if m != nil { + return m.Breakpoints + } + return nil +} + +func (m *ListBreakpointsResponse) GetNextWaitToken() string { + if m != nil { + return m.NextWaitToken + } + return "" +} + +// Request to list debuggees. +type ListDebuggeesRequest struct { + // Project number of a Google Cloud project whose debuggees to list. + Project string `protobuf:"bytes,2,opt,name=project" json:"project,omitempty"` + // When set to `true`, the result includes all debuggees. Otherwise, the + // result includes only debuggees that are active. + IncludeInactive bool `protobuf:"varint,3,opt,name=include_inactive,json=includeInactive" json:"include_inactive,omitempty"` + // The client version making the call. + // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + ClientVersion string `protobuf:"bytes,4,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` +} + +func (m *ListDebuggeesRequest) Reset() { *m = ListDebuggeesRequest{} } +func (m *ListDebuggeesRequest) String() string { return proto.CompactTextString(m) } +func (*ListDebuggeesRequest) ProtoMessage() {} +func (*ListDebuggeesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *ListDebuggeesRequest) GetProject() string { + if m != nil { + return m.Project + } + return "" +} + +func (m *ListDebuggeesRequest) GetIncludeInactive() bool { + if m != nil { + return m.IncludeInactive + } + return false +} + +func (m *ListDebuggeesRequest) GetClientVersion() string { + if m != nil { + return m.ClientVersion + } + return "" +} + +// Response for listing debuggees. +type ListDebuggeesResponse struct { + // List of debuggees accessible to the calling user. + // Note that the `description` field is the only human readable field + // that should be displayed to the user. + // The fields `debuggee.id` and `description` fields are guaranteed to be + // set on each debuggee. + Debuggees []*Debuggee `protobuf:"bytes,1,rep,name=debuggees" json:"debuggees,omitempty"` +} + +func (m *ListDebuggeesResponse) Reset() { *m = ListDebuggeesResponse{} } +func (m *ListDebuggeesResponse) String() string { return proto.CompactTextString(m) } +func (*ListDebuggeesResponse) ProtoMessage() {} +func (*ListDebuggeesResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +func (m *ListDebuggeesResponse) GetDebuggees() []*Debuggee { + if m != nil { + return m.Debuggees + } + return nil +} + +func init() { + proto.RegisterType((*SetBreakpointRequest)(nil), "google.devtools.clouddebugger.v2.SetBreakpointRequest") + proto.RegisterType((*SetBreakpointResponse)(nil), "google.devtools.clouddebugger.v2.SetBreakpointResponse") + proto.RegisterType((*GetBreakpointRequest)(nil), "google.devtools.clouddebugger.v2.GetBreakpointRequest") + proto.RegisterType((*GetBreakpointResponse)(nil), "google.devtools.clouddebugger.v2.GetBreakpointResponse") + proto.RegisterType((*DeleteBreakpointRequest)(nil), "google.devtools.clouddebugger.v2.DeleteBreakpointRequest") + proto.RegisterType((*ListBreakpointsRequest)(nil), "google.devtools.clouddebugger.v2.ListBreakpointsRequest") + proto.RegisterType((*ListBreakpointsRequest_BreakpointActionValue)(nil), "google.devtools.clouddebugger.v2.ListBreakpointsRequest.BreakpointActionValue") + proto.RegisterType((*ListBreakpointsResponse)(nil), "google.devtools.clouddebugger.v2.ListBreakpointsResponse") + proto.RegisterType((*ListDebuggeesRequest)(nil), "google.devtools.clouddebugger.v2.ListDebuggeesRequest") + proto.RegisterType((*ListDebuggeesResponse)(nil), "google.devtools.clouddebugger.v2.ListDebuggeesResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Debugger2 service + +type Debugger2Client interface { + // Sets the breakpoint to the debuggee. + SetBreakpoint(ctx context.Context, in *SetBreakpointRequest, opts ...grpc.CallOption) (*SetBreakpointResponse, error) + // Gets breakpoint information. + GetBreakpoint(ctx context.Context, in *GetBreakpointRequest, opts ...grpc.CallOption) (*GetBreakpointResponse, error) + // Deletes the breakpoint from the debuggee. + DeleteBreakpoint(ctx context.Context, in *DeleteBreakpointRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Lists all breakpoints for the debuggee. + ListBreakpoints(ctx context.Context, in *ListBreakpointsRequest, opts ...grpc.CallOption) (*ListBreakpointsResponse, error) + // Lists all the debuggees that the user can set breakpoints to. + ListDebuggees(ctx context.Context, in *ListDebuggeesRequest, opts ...grpc.CallOption) (*ListDebuggeesResponse, error) +} + +type debugger2Client struct { + cc *grpc.ClientConn +} + +func NewDebugger2Client(cc *grpc.ClientConn) Debugger2Client { + return &debugger2Client{cc} +} + +func (c *debugger2Client) SetBreakpoint(ctx context.Context, in *SetBreakpointRequest, opts ...grpc.CallOption) (*SetBreakpointResponse, error) { + out := new(SetBreakpointResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouddebugger.v2.Debugger2/SetBreakpoint", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *debugger2Client) GetBreakpoint(ctx context.Context, in *GetBreakpointRequest, opts ...grpc.CallOption) (*GetBreakpointResponse, error) { + out := new(GetBreakpointResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouddebugger.v2.Debugger2/GetBreakpoint", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *debugger2Client) DeleteBreakpoint(ctx context.Context, in *DeleteBreakpointRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.devtools.clouddebugger.v2.Debugger2/DeleteBreakpoint", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *debugger2Client) ListBreakpoints(ctx context.Context, in *ListBreakpointsRequest, opts ...grpc.CallOption) (*ListBreakpointsResponse, error) { + out := new(ListBreakpointsResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouddebugger.v2.Debugger2/ListBreakpoints", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *debugger2Client) ListDebuggees(ctx context.Context, in *ListDebuggeesRequest, opts ...grpc.CallOption) (*ListDebuggeesResponse, error) { + out := new(ListDebuggeesResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouddebugger.v2.Debugger2/ListDebuggees", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Debugger2 service + +type Debugger2Server interface { + // Sets the breakpoint to the debuggee. + SetBreakpoint(context.Context, *SetBreakpointRequest) (*SetBreakpointResponse, error) + // Gets breakpoint information. + GetBreakpoint(context.Context, *GetBreakpointRequest) (*GetBreakpointResponse, error) + // Deletes the breakpoint from the debuggee. + DeleteBreakpoint(context.Context, *DeleteBreakpointRequest) (*google_protobuf3.Empty, error) + // Lists all breakpoints for the debuggee. + ListBreakpoints(context.Context, *ListBreakpointsRequest) (*ListBreakpointsResponse, error) + // Lists all the debuggees that the user can set breakpoints to. + ListDebuggees(context.Context, *ListDebuggeesRequest) (*ListDebuggeesResponse, error) +} + +func RegisterDebugger2Server(s *grpc.Server, srv Debugger2Server) { + s.RegisterService(&_Debugger2_serviceDesc, srv) +} + +func _Debugger2_SetBreakpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetBreakpointRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(Debugger2Server).SetBreakpoint(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouddebugger.v2.Debugger2/SetBreakpoint", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(Debugger2Server).SetBreakpoint(ctx, req.(*SetBreakpointRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Debugger2_GetBreakpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBreakpointRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(Debugger2Server).GetBreakpoint(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouddebugger.v2.Debugger2/GetBreakpoint", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(Debugger2Server).GetBreakpoint(ctx, req.(*GetBreakpointRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Debugger2_DeleteBreakpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteBreakpointRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(Debugger2Server).DeleteBreakpoint(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouddebugger.v2.Debugger2/DeleteBreakpoint", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(Debugger2Server).DeleteBreakpoint(ctx, req.(*DeleteBreakpointRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Debugger2_ListBreakpoints_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListBreakpointsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(Debugger2Server).ListBreakpoints(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouddebugger.v2.Debugger2/ListBreakpoints", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(Debugger2Server).ListBreakpoints(ctx, req.(*ListBreakpointsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Debugger2_ListDebuggees_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDebuggeesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(Debugger2Server).ListDebuggees(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouddebugger.v2.Debugger2/ListDebuggees", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(Debugger2Server).ListDebuggees(ctx, req.(*ListDebuggeesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Debugger2_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.clouddebugger.v2.Debugger2", + HandlerType: (*Debugger2Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SetBreakpoint", + Handler: _Debugger2_SetBreakpoint_Handler, + }, + { + MethodName: "GetBreakpoint", + Handler: _Debugger2_GetBreakpoint_Handler, + }, + { + MethodName: "DeleteBreakpoint", + Handler: _Debugger2_DeleteBreakpoint_Handler, + }, + { + MethodName: "ListBreakpoints", + Handler: _Debugger2_ListBreakpoints_Handler, + }, + { + MethodName: "ListDebuggees", + Handler: _Debugger2_ListDebuggees_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/clouddebugger/v2/debugger.proto", +} + +func init() { proto.RegisterFile("google/devtools/clouddebugger/v2/debugger.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 766 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xcb, 0x6e, 0xd3, 0x4c, + 0x18, 0xd5, 0xb4, 0x7f, 0x2f, 0xf9, 0xd2, 0xb4, 0xfd, 0x47, 0xbd, 0x58, 0xe1, 0x16, 0x99, 0x8b, + 0x4a, 0x41, 0x36, 0x72, 0x11, 0xb4, 0xb0, 0xa1, 0x51, 0x51, 0x1a, 0xa9, 0x54, 0x55, 0x80, 0x22, + 0xb1, 0x89, 0x9c, 0x64, 0x6a, 0x99, 0xba, 0x1e, 0xe3, 0x19, 0x07, 0x50, 0xd5, 0x4d, 0x91, 0xba, + 0x47, 0xbc, 0x00, 0x0f, 0x80, 0xc4, 0x13, 0x20, 0xb1, 0x43, 0x62, 0xcb, 0x2b, 0xf0, 0x20, 0xc8, + 0xe3, 0x71, 0xe3, 0x04, 0x43, 0xe2, 0x54, 0xea, 0xce, 0x3e, 0x9e, 0xf3, 0xcd, 0x39, 0x67, 0xbe, + 0x99, 0x31, 0xe8, 0x16, 0xa5, 0x96, 0x43, 0xf4, 0x16, 0x69, 0x73, 0x4a, 0x1d, 0xa6, 0x37, 0x1d, + 0x1a, 0xb4, 0x5a, 0xa4, 0x11, 0x58, 0x16, 0xf1, 0xf5, 0xb6, 0xa1, 0xc7, 0xcf, 0x9a, 0xe7, 0x53, + 0x4e, 0x71, 0x29, 0x22, 0x68, 0x31, 0x41, 0xeb, 0x22, 0x68, 0x6d, 0xa3, 0x78, 0x51, 0x96, 0x34, + 0x3d, 0x5b, 0x37, 0x5d, 0x97, 0x72, 0x93, 0xdb, 0xd4, 0x65, 0x11, 0xbf, 0x78, 0xab, 0xff, 0x84, + 0x26, 0x37, 0xe5, 0xe0, 0x0b, 0x72, 0xb0, 0x78, 0x6b, 0x04, 0x7b, 0x3a, 0x39, 0xf0, 0xf8, 0xbb, + 0xe8, 0xa3, 0xfa, 0x19, 0xc1, 0xdc, 0x53, 0xc2, 0xcb, 0x3e, 0x31, 0xf7, 0x3d, 0x6a, 0xbb, 0xbc, + 0x46, 0x5e, 0x07, 0x84, 0x71, 0x7c, 0x05, 0xf2, 0xb2, 0x1e, 0xa9, 0xdb, 0x2d, 0x05, 0x95, 0xd0, + 0x52, 0xae, 0x06, 0x31, 0x54, 0x6d, 0xe1, 0x2d, 0x80, 0xc6, 0x29, 0x4b, 0x19, 0x29, 0xa1, 0xa5, + 0xbc, 0x71, 0x5b, 0xeb, 0x67, 0x4c, 0x4b, 0xcc, 0x94, 0xe0, 0xe3, 0xeb, 0x30, 0xdd, 0x74, 0x6c, + 0xe2, 0xf2, 0x7a, 0x9b, 0xf8, 0xcc, 0xa6, 0xae, 0xf2, 0x9f, 0x98, 0xb1, 0x10, 0xa1, 0xbb, 0x11, + 0xa8, 0x12, 0x98, 0xef, 0x51, 0xcb, 0x3c, 0xea, 0x32, 0xd2, 0xa3, 0x06, 0x9d, 0x4d, 0x8d, 0xfa, + 0x1e, 0xc1, 0x5c, 0x65, 0xa8, 0x54, 0xae, 0x42, 0xa1, 0x53, 0x27, 0x1c, 0x32, 0x22, 0x86, 0x4c, + 0x75, 0xc0, 0x6a, 0x2b, 0x83, 0xd9, 0xca, 0x39, 0x98, 0x3d, 0x41, 0xb0, 0xb8, 0x41, 0x1c, 0xc2, + 0xc9, 0xf9, 0xf9, 0x1d, 0x4d, 0xf3, 0xfb, 0x7d, 0x14, 0x16, 0xb6, 0x6c, 0x96, 0x70, 0xcc, 0x06, + 0xd6, 0xb1, 0x0c, 0xff, 0xdb, 0x6e, 0xd3, 0x09, 0x5a, 0xa4, 0x6e, 0x3a, 0x4e, 0x3d, 0x60, 0xc4, + 0x67, 0x42, 0xcb, 0x64, 0x6d, 0x46, 0x7e, 0x58, 0x77, 0x9c, 0xe7, 0x21, 0x8c, 0x6f, 0xc2, 0x6c, + 0x3c, 0xd6, 0x76, 0xcd, 0x26, 0xb7, 0xdb, 0x44, 0x08, 0xea, 0x0c, 0xad, 0x4a, 0x18, 0xef, 0xc1, + 0x78, 0xf8, 0x24, 0x57, 0x28, 0x6f, 0x6c, 0xf7, 0x4f, 0x39, 0xdd, 0x41, 0x22, 0xfc, 0x75, 0x51, + 0x70, 0xd7, 0x74, 0x02, 0x52, 0x93, 0xd5, 0xc3, 0x18, 0x19, 0xf7, 0x6d, 0xaf, 0xee, 0x13, 0x16, + 0x38, 0x9c, 0x29, 0x63, 0x42, 0xcf, 0x94, 0x00, 0x6b, 0x11, 0x86, 0x2f, 0x01, 0xbc, 0x31, 0x6d, + 0x5e, 0xe7, 0x74, 0x9f, 0xb8, 0xca, 0xb8, 0xc8, 0x20, 0x17, 0x22, 0xcf, 0x42, 0x20, 0x25, 0xe5, + 0xc9, 0x94, 0x94, 0x8b, 0x0d, 0x98, 0x4f, 0xd5, 0x82, 0xab, 0x30, 0xd6, 0x0e, 0x1f, 0x44, 0xba, + 0xd3, 0xc6, 0x4a, 0x96, 0x86, 0xd2, 0xa2, 0x42, 0xb5, 0xa8, 0x82, 0xfa, 0x01, 0xc1, 0xe2, 0x1f, + 0x39, 0xc8, 0xe6, 0xdd, 0x86, 0x7c, 0xa7, 0x39, 0x98, 0x82, 0x4a, 0xa3, 0x99, 0xbb, 0x37, 0x59, + 0x00, 0xdf, 0x80, 0x19, 0x97, 0xbc, 0xe5, 0xf5, 0x44, 0x34, 0x51, 0x0f, 0x16, 0x42, 0xf8, 0x45, + 0x1c, 0x8f, 0x7a, 0x8c, 0x60, 0x2e, 0xd4, 0xb4, 0x21, 0x9b, 0xe6, 0xb4, 0xb7, 0x14, 0x98, 0xf0, + 0x7c, 0xfa, 0x8a, 0x34, 0xb9, 0x24, 0xc6, 0xaf, 0x59, 0x1a, 0x65, 0xc0, 0x2d, 0x6d, 0xc2, 0x7c, + 0x8f, 0x06, 0x99, 0xca, 0x26, 0xe4, 0xe2, 0x6e, 0x8e, 0x33, 0x59, 0xee, 0x9f, 0x49, 0x5c, 0xa7, + 0xd6, 0x21, 0x1b, 0x5f, 0x27, 0x20, 0x27, 0x71, 0xdf, 0xc0, 0x3f, 0x10, 0x14, 0xba, 0x4e, 0x4c, + 0x7c, 0xaf, 0x7f, 0xd9, 0xb4, 0x0b, 0xa1, 0x78, 0x3f, 0x33, 0x2f, 0xb2, 0xa6, 0x6e, 0x1e, 0xff, + 0xfc, 0xf5, 0x71, 0xa4, 0xac, 0xde, 0x4d, 0x5e, 0x84, 0xfa, 0xa9, 0x60, 0xfd, 0x30, 0xb1, 0xb3, + 0x8f, 0xf4, 0xc4, 0xd2, 0xea, 0x8c, 0xf0, 0x07, 0xc9, 0x4b, 0x22, 0x34, 0x53, 0xc9, 0x6a, 0xa6, + 0x32, 0xa4, 0x99, 0xca, 0xbf, 0xcc, 0xe0, 0x47, 0x99, 0xcd, 0x1c, 0x76, 0x9d, 0x93, 0x47, 0xf8, + 0x0b, 0x82, 0xd9, 0xde, 0x63, 0x17, 0xaf, 0x0d, 0xb2, 0xe6, 0xa9, 0x47, 0x75, 0x71, 0x21, 0xa6, + 0xc6, 0xf7, 0xbc, 0xf6, 0x38, 0xbc, 0xe7, 0x63, 0xc5, 0xcb, 0x67, 0x57, 0xfc, 0x0d, 0xc1, 0x4c, + 0xcf, 0xae, 0xc6, 0xab, 0xc3, 0x1e, 0x88, 0xc5, 0xb5, 0x21, 0x98, 0x72, 0x11, 0x56, 0x85, 0x25, + 0x03, 0xdf, 0xc9, 0x6a, 0x09, 0x7f, 0x42, 0x50, 0xe8, 0xda, 0x80, 0x83, 0x74, 0x50, 0xda, 0xa9, + 0x31, 0x48, 0x07, 0xa5, 0xee, 0x74, 0xf5, 0xb2, 0x10, 0xaf, 0xe0, 0x85, 0x74, 0xf1, 0xe5, 0x13, + 0x04, 0xd7, 0x9a, 0xf4, 0xa0, 0x6f, 0xf9, 0x72, 0x21, 0xde, 0xe5, 0x3b, 0xe1, 0x82, 0xef, 0xa0, + 0x97, 0x4f, 0x24, 0xc5, 0xa2, 0x8e, 0xe9, 0x5a, 0x1a, 0xf5, 0x2d, 0xdd, 0x22, 0xae, 0x68, 0x07, + 0xf9, 0x87, 0x6a, 0x7a, 0x36, 0xfb, 0xfb, 0x4f, 0xe3, 0xc3, 0x2e, 0xa0, 0x31, 0x2e, 0x98, 0x2b, + 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x55, 0x66, 0x54, 0xde, 0x0a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/common.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/common.pb.go new file mode 100644 index 0000000..2d1d9df --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/common.pb.go @@ -0,0 +1,434 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/clouderrorreporting/v1beta1/common.proto +// DO NOT EDIT! + +/* +Package clouderrorreporting is a generated protocol buffer package. + +It is generated from these files: + google/devtools/clouderrorreporting/v1beta1/common.proto + google/devtools/clouderrorreporting/v1beta1/error_group_service.proto + google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto + google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto + +It has these top-level messages: + ErrorGroup + TrackingIssue + ErrorEvent + ServiceContext + ErrorContext + HttpRequestContext + SourceLocation + GetGroupRequest + UpdateGroupRequest + ListGroupStatsRequest + ListGroupStatsResponse + ErrorGroupStats + TimedCount + ListEventsRequest + ListEventsResponse + QueryTimeRange + ServiceContextFilter + DeleteEventsRequest + DeleteEventsResponse + ReportErrorEventRequest + ReportErrorEventResponse + ReportedErrorEvent +*/ +package clouderrorreporting + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/monitoredres" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Description of a group of similar error events. +type ErrorGroup struct { + // The group resource name. + // Example: <code>projects/my-project-123/groups/my-groupid</code> + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Group IDs are unique for a given project. If the same kind of error + // occurs in different service contexts, it will receive the same group ID. + GroupId string `protobuf:"bytes,2,opt,name=group_id,json=groupId" json:"group_id,omitempty"` + // Associated tracking issues. + TrackingIssues []*TrackingIssue `protobuf:"bytes,3,rep,name=tracking_issues,json=trackingIssues" json:"tracking_issues,omitempty"` +} + +func (m *ErrorGroup) Reset() { *m = ErrorGroup{} } +func (m *ErrorGroup) String() string { return proto.CompactTextString(m) } +func (*ErrorGroup) ProtoMessage() {} +func (*ErrorGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ErrorGroup) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ErrorGroup) GetGroupId() string { + if m != nil { + return m.GroupId + } + return "" +} + +func (m *ErrorGroup) GetTrackingIssues() []*TrackingIssue { + if m != nil { + return m.TrackingIssues + } + return nil +} + +// Information related to tracking the progress on resolving the error. +type TrackingIssue struct { + // A URL pointing to a related entry in an issue tracking system. + // Example: https://github.com/user/project/issues/4 + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` +} + +func (m *TrackingIssue) Reset() { *m = TrackingIssue{} } +func (m *TrackingIssue) String() string { return proto.CompactTextString(m) } +func (*TrackingIssue) ProtoMessage() {} +func (*TrackingIssue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *TrackingIssue) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +// An error event which is returned by the Error Reporting system. +type ErrorEvent struct { + // Time when the event occurred as provided in the error report. + // If the report did not contain a timestamp, the time the error was received + // by the Error Reporting system is used. + EventTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=event_time,json=eventTime" json:"event_time,omitempty"` + // The `ServiceContext` for which this error was reported. + ServiceContext *ServiceContext `protobuf:"bytes,2,opt,name=service_context,json=serviceContext" json:"service_context,omitempty"` + // The stack trace that was reported or logged by the service. + Message string `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` + // Data about the context in which the error occurred. + Context *ErrorContext `protobuf:"bytes,5,opt,name=context" json:"context,omitempty"` +} + +func (m *ErrorEvent) Reset() { *m = ErrorEvent{} } +func (m *ErrorEvent) String() string { return proto.CompactTextString(m) } +func (*ErrorEvent) ProtoMessage() {} +func (*ErrorEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ErrorEvent) GetEventTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EventTime + } + return nil +} + +func (m *ErrorEvent) GetServiceContext() *ServiceContext { + if m != nil { + return m.ServiceContext + } + return nil +} + +func (m *ErrorEvent) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *ErrorEvent) GetContext() *ErrorContext { + if m != nil { + return m.Context + } + return nil +} + +// Describes a running service that sends errors. +// Its version changes over time and multiple versions can run in parallel. +type ServiceContext struct { + // An identifier of the service, such as the name of the + // executable, job, or Google App Engine service name. This field is expected + // to have a low number of values that are relatively stable over time, as + // opposed to `version`, which can be changed whenever new code is deployed. + // + // Contains the service name for error reports extracted from Google + // App Engine logs or `default` if the App Engine default service is used. + Service string `protobuf:"bytes,2,opt,name=service" json:"service,omitempty"` + // Represents the source code version that the developer provided, + // which could represent a version label or a Git SHA-1 hash, for example. + Version string `protobuf:"bytes,3,opt,name=version" json:"version,omitempty"` + // Type of the MonitoredResource. List of possible values: + // https://cloud.google.com/monitoring/api/resources + // + // Value is set automatically for incoming errors and must not be set when + // reporting errors. + ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType" json:"resource_type,omitempty"` +} + +func (m *ServiceContext) Reset() { *m = ServiceContext{} } +func (m *ServiceContext) String() string { return proto.CompactTextString(m) } +func (*ServiceContext) ProtoMessage() {} +func (*ServiceContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ServiceContext) GetService() string { + if m != nil { + return m.Service + } + return "" +} + +func (m *ServiceContext) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *ServiceContext) GetResourceType() string { + if m != nil { + return m.ResourceType + } + return "" +} + +// A description of the context in which an error occurred. +// This data should be provided by the application when reporting an error, +// unless the +// error report has been generated automatically from Google App Engine logs. +type ErrorContext struct { + // The HTTP request which was processed when the error was + // triggered. + HttpRequest *HttpRequestContext `protobuf:"bytes,1,opt,name=http_request,json=httpRequest" json:"http_request,omitempty"` + // The user who caused or was affected by the crash. + // This can be a user ID, an email address, or an arbitrary token that + // uniquely identifies the user. + // When sending an error report, leave this field empty if the user was not + // logged in. In this case the + // Error Reporting system will use other data, such as remote IP address, to + // distinguish affected users. See `affected_users_count` in + // `ErrorGroupStats`. + User string `protobuf:"bytes,2,opt,name=user" json:"user,omitempty"` + // The location in the source code where the decision was made to + // report the error, usually the place where it was logged. + // For a logged exception this would be the source line where the + // exception is logged, usually close to the place where it was + // caught. This value is in contrast to `Exception.cause_location`, + // which describes the source line where the exception was thrown. + ReportLocation *SourceLocation `protobuf:"bytes,3,opt,name=report_location,json=reportLocation" json:"report_location,omitempty"` +} + +func (m *ErrorContext) Reset() { *m = ErrorContext{} } +func (m *ErrorContext) String() string { return proto.CompactTextString(m) } +func (*ErrorContext) ProtoMessage() {} +func (*ErrorContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ErrorContext) GetHttpRequest() *HttpRequestContext { + if m != nil { + return m.HttpRequest + } + return nil +} + +func (m *ErrorContext) GetUser() string { + if m != nil { + return m.User + } + return "" +} + +func (m *ErrorContext) GetReportLocation() *SourceLocation { + if m != nil { + return m.ReportLocation + } + return nil +} + +// HTTP request data that is related to a reported error. +// This data should be provided by the application when reporting an error, +// unless the +// error report has been generated automatically from Google App Engine logs. +type HttpRequestContext struct { + // The type of HTTP request, such as `GET`, `POST`, etc. + Method string `protobuf:"bytes,1,opt,name=method" json:"method,omitempty"` + // The URL of the request. + Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` + // The user agent information that is provided with the request. + UserAgent string `protobuf:"bytes,3,opt,name=user_agent,json=userAgent" json:"user_agent,omitempty"` + // The referrer information that is provided with the request. + Referrer string `protobuf:"bytes,4,opt,name=referrer" json:"referrer,omitempty"` + // The HTTP response status code for the request. + ResponseStatusCode int32 `protobuf:"varint,5,opt,name=response_status_code,json=responseStatusCode" json:"response_status_code,omitempty"` + // The IP address from which the request originated. + // This can be IPv4, IPv6, or a token which is derived from the + // IP address, depending on the data that has been provided + // in the error report. + RemoteIp string `protobuf:"bytes,6,opt,name=remote_ip,json=remoteIp" json:"remote_ip,omitempty"` +} + +func (m *HttpRequestContext) Reset() { *m = HttpRequestContext{} } +func (m *HttpRequestContext) String() string { return proto.CompactTextString(m) } +func (*HttpRequestContext) ProtoMessage() {} +func (*HttpRequestContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *HttpRequestContext) GetMethod() string { + if m != nil { + return m.Method + } + return "" +} + +func (m *HttpRequestContext) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *HttpRequestContext) GetUserAgent() string { + if m != nil { + return m.UserAgent + } + return "" +} + +func (m *HttpRequestContext) GetReferrer() string { + if m != nil { + return m.Referrer + } + return "" +} + +func (m *HttpRequestContext) GetResponseStatusCode() int32 { + if m != nil { + return m.ResponseStatusCode + } + return 0 +} + +func (m *HttpRequestContext) GetRemoteIp() string { + if m != nil { + return m.RemoteIp + } + return "" +} + +// Indicates a location in the source code of the service for which +// errors are reported. +// This data should be provided by the application when reporting an error, +// unless the error report has been generated automatically from Google App +// Engine logs. All fields are optional. +type SourceLocation struct { + // The source code filename, which can include a truncated relative + // path, or a full path from a production machine. + FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath" json:"file_path,omitempty"` + // 1-based. 0 indicates that the line number is unknown. + LineNumber int32 `protobuf:"varint,2,opt,name=line_number,json=lineNumber" json:"line_number,omitempty"` + // Human-readable name of a function or method. + // The value can include optional context like the class or package name. + // For example, `my.package.MyClass.method` in case of Java. + FunctionName string `protobuf:"bytes,4,opt,name=function_name,json=functionName" json:"function_name,omitempty"` +} + +func (m *SourceLocation) Reset() { *m = SourceLocation{} } +func (m *SourceLocation) String() string { return proto.CompactTextString(m) } +func (*SourceLocation) ProtoMessage() {} +func (*SourceLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *SourceLocation) GetFilePath() string { + if m != nil { + return m.FilePath + } + return "" +} + +func (m *SourceLocation) GetLineNumber() int32 { + if m != nil { + return m.LineNumber + } + return 0 +} + +func (m *SourceLocation) GetFunctionName() string { + if m != nil { + return m.FunctionName + } + return "" +} + +func init() { + proto.RegisterType((*ErrorGroup)(nil), "google.devtools.clouderrorreporting.v1beta1.ErrorGroup") + proto.RegisterType((*TrackingIssue)(nil), "google.devtools.clouderrorreporting.v1beta1.TrackingIssue") + proto.RegisterType((*ErrorEvent)(nil), "google.devtools.clouderrorreporting.v1beta1.ErrorEvent") + proto.RegisterType((*ServiceContext)(nil), "google.devtools.clouderrorreporting.v1beta1.ServiceContext") + proto.RegisterType((*ErrorContext)(nil), "google.devtools.clouderrorreporting.v1beta1.ErrorContext") + proto.RegisterType((*HttpRequestContext)(nil), "google.devtools.clouderrorreporting.v1beta1.HttpRequestContext") + proto.RegisterType((*SourceLocation)(nil), "google.devtools.clouderrorreporting.v1beta1.SourceLocation") +} + +func init() { + proto.RegisterFile("google/devtools/clouderrorreporting/v1beta1/common.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 693 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xcd, 0x6e, 0x13, 0x3b, + 0x14, 0x56, 0x92, 0xfe, 0xe5, 0xa4, 0x4d, 0xaf, 0xac, 0xab, 0xab, 0xdc, 0x00, 0x6a, 0x49, 0x37, + 0x95, 0x90, 0x66, 0x68, 0xd9, 0x50, 0xba, 0x40, 0x34, 0xaa, 0x4a, 0x25, 0x54, 0x55, 0x93, 0x8a, + 0x05, 0x0b, 0x2c, 0x67, 0xe6, 0x64, 0x62, 0x31, 0x63, 0x0f, 0xb6, 0x27, 0xa2, 0xef, 0xc2, 0x82, + 0x35, 0x0f, 0x82, 0x78, 0x18, 0x1e, 0x02, 0xd9, 0x63, 0x97, 0x56, 0xed, 0x82, 0xec, 0xfc, 0x9d, + 0x9f, 0xef, 0x9c, 0xef, 0xf8, 0xd8, 0xf0, 0x32, 0x97, 0x32, 0x2f, 0x30, 0xce, 0x70, 0x61, 0xa4, + 0x2c, 0x74, 0x9c, 0x16, 0xb2, 0xce, 0x50, 0x29, 0xa9, 0x14, 0x56, 0x52, 0x19, 0x2e, 0xf2, 0x78, + 0x71, 0x30, 0x45, 0xc3, 0x0e, 0xe2, 0x54, 0x96, 0xa5, 0x14, 0x51, 0xa5, 0xa4, 0x91, 0xe4, 0x59, + 0x93, 0x19, 0x85, 0xcc, 0xe8, 0x81, 0xcc, 0xc8, 0x67, 0x0e, 0x1f, 0xfb, 0x32, 0xac, 0xe2, 0x31, + 0x13, 0x42, 0x1a, 0x66, 0xb8, 0x14, 0xba, 0xa1, 0x1a, 0xee, 0xdd, 0xf2, 0x96, 0x52, 0x70, 0x23, + 0x15, 0x66, 0x54, 0xa1, 0x96, 0xb5, 0x4a, 0xd1, 0x07, 0xed, 0xf8, 0x20, 0x87, 0xa6, 0xf5, 0x2c, + 0x36, 0xbc, 0x44, 0x6d, 0x58, 0x59, 0x35, 0x01, 0xa3, 0x6f, 0x2d, 0x80, 0x53, 0x5b, 0xfe, 0x4c, + 0xc9, 0xba, 0x22, 0x04, 0x56, 0x04, 0x2b, 0x71, 0xd0, 0xda, 0x6d, 0xed, 0x77, 0x13, 0x77, 0x26, + 0xff, 0xc3, 0x46, 0x6e, 0x9d, 0x94, 0x67, 0x83, 0xb6, 0xb3, 0xaf, 0x3b, 0x7c, 0x9e, 0x91, 0x14, + 0xb6, 0x8d, 0x62, 0xe9, 0x27, 0x2e, 0x72, 0xca, 0xb5, 0xae, 0x51, 0x0f, 0x3a, 0xbb, 0x9d, 0xfd, + 0xde, 0xe1, 0xab, 0x68, 0x09, 0xa1, 0xd1, 0x95, 0xe7, 0x38, 0xb7, 0x14, 0x49, 0xdf, 0xdc, 0x86, + 0x7a, 0xf4, 0x14, 0xb6, 0xee, 0x04, 0x90, 0x7f, 0xa0, 0x53, 0xab, 0xc2, 0xf7, 0x68, 0x8f, 0xa3, + 0xaf, 0x6d, 0xaf, 0xe2, 0x74, 0x81, 0xc2, 0x90, 0x23, 0x00, 0xb4, 0x07, 0x6a, 0xd5, 0xba, 0xb8, + 0xde, 0xe1, 0x30, 0x74, 0x14, 0x46, 0x11, 0x5d, 0x85, 0x51, 0x24, 0x5d, 0x17, 0x6d, 0x31, 0xc9, + 0x60, 0x5b, 0xa3, 0x5a, 0xf0, 0x14, 0x69, 0x2a, 0x85, 0xc1, 0x2f, 0xc6, 0x69, 0xee, 0x1d, 0x1e, + 0x2f, 0xa5, 0x68, 0xd2, 0x70, 0x8c, 0x1b, 0x8a, 0xa4, 0xaf, 0xef, 0x60, 0x32, 0x80, 0xf5, 0x12, + 0xb5, 0x66, 0x39, 0x0e, 0x3a, 0xcd, 0x44, 0x3d, 0x24, 0x13, 0x58, 0x0f, 0x75, 0x57, 0x5d, 0xdd, + 0xa3, 0xa5, 0xea, 0xba, 0x21, 0x84, 0xaa, 0x81, 0x69, 0xc4, 0xa1, 0x3f, 0xb9, 0xd7, 0x80, 0x6f, + 0x29, 0x5c, 0xa9, 0x87, 0xd6, 0xb3, 0x40, 0xa5, 0xb9, 0x14, 0xa1, 0x35, 0x0f, 0xc9, 0x1e, 0x6c, + 0x85, 0xed, 0xa2, 0xe6, 0xba, 0xc2, 0xc1, 0x8a, 0xf3, 0x6f, 0x06, 0xe3, 0xd5, 0x75, 0x85, 0xa3, + 0x5f, 0x2d, 0xd8, 0xbc, 0xdd, 0x04, 0x99, 0xc2, 0xe6, 0xdc, 0x98, 0x8a, 0x2a, 0xfc, 0x5c, 0xa3, + 0x36, 0xfe, 0x36, 0x5e, 0x2f, 0xa5, 0xea, 0xad, 0x31, 0x55, 0xd2, 0xe4, 0x07, 0x6d, 0xbd, 0xf9, + 0x1f, 0x9b, 0xdd, 0xda, 0x5a, 0xa3, 0xf2, 0x52, 0xdc, 0xd9, 0x5e, 0x64, 0x43, 0x44, 0x0b, 0x99, + 0xba, 0x87, 0xe3, 0xf4, 0x2c, 0x7d, 0x91, 0x4e, 0xda, 0x3b, 0x4f, 0x91, 0xf4, 0x9b, 0x88, 0x80, + 0x47, 0x3f, 0x5b, 0x40, 0xee, 0x77, 0x47, 0xfe, 0x83, 0xb5, 0x12, 0xcd, 0x5c, 0x66, 0x7e, 0x49, + 0x3d, 0x0a, 0x9b, 0xdb, 0xbe, 0xd9, 0x5c, 0xf2, 0x04, 0xc0, 0xb6, 0x4b, 0x59, 0x8e, 0xc2, 0xf8, + 0x89, 0x77, 0xad, 0xe5, 0x8d, 0x35, 0x90, 0x21, 0x6c, 0x28, 0x9c, 0xa1, 0x52, 0xa8, 0xfc, 0xb8, + 0x6f, 0x30, 0x79, 0x0e, 0xff, 0x2a, 0xd4, 0x95, 0x14, 0x1a, 0xa9, 0x36, 0xcc, 0xd4, 0x9a, 0xa6, + 0x32, 0x43, 0xb7, 0x37, 0xab, 0x09, 0x09, 0xbe, 0x89, 0x73, 0x8d, 0x65, 0x86, 0xe4, 0x11, 0x74, + 0x15, 0x96, 0xd2, 0x20, 0xe5, 0xd5, 0x60, 0x2d, 0xd0, 0x59, 0xc3, 0x79, 0x35, 0xd2, 0xd0, 0xbf, + 0x2b, 0xd6, 0x86, 0xcf, 0x78, 0x81, 0xb4, 0x62, 0x66, 0xee, 0x85, 0x6c, 0x58, 0xc3, 0x25, 0x33, + 0x73, 0xb2, 0x03, 0xbd, 0x82, 0x0b, 0xa4, 0xa2, 0x2e, 0xa7, 0x7e, 0xf4, 0xab, 0x09, 0x58, 0xd3, + 0x85, 0xb3, 0xd8, 0x75, 0x99, 0xd5, 0x22, 0xb5, 0x4c, 0xd4, 0xfd, 0x29, 0x7e, 0x5d, 0x82, 0xf1, + 0x82, 0x95, 0x78, 0xf2, 0xa3, 0x05, 0xf6, 0x83, 0x5c, 0xe6, 0x4a, 0x4e, 0x7a, 0x63, 0xf7, 0xa3, + 0x5e, 0xda, 0x77, 0x7c, 0xd9, 0xfa, 0xf0, 0xd1, 0xe7, 0xe6, 0xb2, 0x60, 0x22, 0x8f, 0xa4, 0xca, + 0xe3, 0x1c, 0x85, 0x7b, 0xe5, 0x71, 0xe3, 0x62, 0x15, 0xd7, 0x7f, 0xf5, 0x57, 0x1f, 0x3f, 0xe0, + 0xfb, 0xde, 0xde, 0x3b, 0x6b, 0x0a, 0x8c, 0xad, 0xb3, 0x79, 0x61, 0xc9, 0x4d, 0x53, 0xef, 0x0f, + 0x4e, 0x6c, 0xe6, 0x74, 0xcd, 0x15, 0x7c, 0xf1, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x6b, 0x08, + 0x8d, 0x1b, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_group_service.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_group_service.pb.go new file mode 100644 index 0000000..61f6b77 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_group_service.pb.go @@ -0,0 +1,211 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/clouderrorreporting/v1beta1/error_group_service.proto +// DO NOT EDIT! + +package clouderrorreporting + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A request to return an individual group. +type GetGroupRequest struct { + // [Required] The group resource name. Written as + // <code>projects/<var>projectID</var>/groups/<var>group_name</var></code>. + // Call + // <a href="/error-reporting/reference/rest/v1beta1/projects.groupStats/list"> + // <code>groupStats.list</code></a> to return a list of groups belonging to + // this project. + // + // Example: <code>projects/my-project-123/groups/my-group</code> + GroupName string `protobuf:"bytes,1,opt,name=group_name,json=groupName" json:"group_name,omitempty"` +} + +func (m *GetGroupRequest) Reset() { *m = GetGroupRequest{} } +func (m *GetGroupRequest) String() string { return proto.CompactTextString(m) } +func (*GetGroupRequest) ProtoMessage() {} +func (*GetGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *GetGroupRequest) GetGroupName() string { + if m != nil { + return m.GroupName + } + return "" +} + +// A request to replace the existing data for the given group. +type UpdateGroupRequest struct { + // [Required] The group which replaces the resource on the server. + Group *ErrorGroup `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` +} + +func (m *UpdateGroupRequest) Reset() { *m = UpdateGroupRequest{} } +func (m *UpdateGroupRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateGroupRequest) ProtoMessage() {} +func (*UpdateGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *UpdateGroupRequest) GetGroup() *ErrorGroup { + if m != nil { + return m.Group + } + return nil +} + +func init() { + proto.RegisterType((*GetGroupRequest)(nil), "google.devtools.clouderrorreporting.v1beta1.GetGroupRequest") + proto.RegisterType((*UpdateGroupRequest)(nil), "google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ErrorGroupService service + +type ErrorGroupServiceClient interface { + // Get the specified group. + GetGroup(ctx context.Context, in *GetGroupRequest, opts ...grpc.CallOption) (*ErrorGroup, error) + // Replace the data for the specified group. + // Fails if the group does not exist. + UpdateGroup(ctx context.Context, in *UpdateGroupRequest, opts ...grpc.CallOption) (*ErrorGroup, error) +} + +type errorGroupServiceClient struct { + cc *grpc.ClientConn +} + +func NewErrorGroupServiceClient(cc *grpc.ClientConn) ErrorGroupServiceClient { + return &errorGroupServiceClient{cc} +} + +func (c *errorGroupServiceClient) GetGroup(ctx context.Context, in *GetGroupRequest, opts ...grpc.CallOption) (*ErrorGroup, error) { + out := new(ErrorGroup) + err := grpc.Invoke(ctx, "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *errorGroupServiceClient) UpdateGroup(ctx context.Context, in *UpdateGroupRequest, opts ...grpc.CallOption) (*ErrorGroup, error) { + out := new(ErrorGroup) + err := grpc.Invoke(ctx, "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ErrorGroupService service + +type ErrorGroupServiceServer interface { + // Get the specified group. + GetGroup(context.Context, *GetGroupRequest) (*ErrorGroup, error) + // Replace the data for the specified group. + // Fails if the group does not exist. + UpdateGroup(context.Context, *UpdateGroupRequest) (*ErrorGroup, error) +} + +func RegisterErrorGroupServiceServer(s *grpc.Server, srv ErrorGroupServiceServer) { + s.RegisterService(&_ErrorGroupService_serviceDesc, srv) +} + +func _ErrorGroupService_GetGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ErrorGroupServiceServer).GetGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ErrorGroupServiceServer).GetGroup(ctx, req.(*GetGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ErrorGroupService_UpdateGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ErrorGroupServiceServer).UpdateGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ErrorGroupServiceServer).UpdateGroup(ctx, req.(*UpdateGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ErrorGroupService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + HandlerType: (*ErrorGroupServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetGroup", + Handler: _ErrorGroupService_GetGroup_Handler, + }, + { + MethodName: "UpdateGroup", + Handler: _ErrorGroupService_UpdateGroup_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/clouderrorreporting/v1beta1/error_group_service.proto", +} + +func init() { + proto.RegisterFile("google/devtools/clouderrorreporting/v1beta1/error_group_service.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 381 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0x4f, 0x4a, 0x03, 0x31, + 0x18, 0xc5, 0x99, 0x8a, 0x62, 0xd3, 0x85, 0x98, 0x85, 0xc8, 0xa0, 0x20, 0x75, 0xa3, 0x2d, 0x24, + 0x4e, 0x5d, 0x58, 0xfc, 0x83, 0x50, 0x29, 0x5d, 0x29, 0xa5, 0xa2, 0x0b, 0x17, 0x96, 0x74, 0x1a, + 0xc2, 0xc8, 0x4c, 0xbe, 0x31, 0x93, 0x76, 0x23, 0x6e, 0x3c, 0x80, 0x1b, 0x6f, 0xe1, 0xda, 0x0b, + 0x78, 0x04, 0xf1, 0x0a, 0x1e, 0x44, 0x26, 0xe9, 0x1f, 0x6d, 0x2b, 0x38, 0xdd, 0xbe, 0xe4, 0x7b, + 0xef, 0x97, 0x97, 0x0f, 0xd5, 0x05, 0x80, 0x08, 0x39, 0xed, 0xf2, 0xbe, 0x06, 0x08, 0x13, 0xea, + 0x87, 0xd0, 0xeb, 0x72, 0xa5, 0x40, 0x29, 0x1e, 0x83, 0xd2, 0x81, 0x14, 0xb4, 0xef, 0x75, 0xb8, + 0x66, 0x1e, 0x35, 0x72, 0x5b, 0x28, 0xe8, 0xc5, 0xed, 0x84, 0xab, 0x7e, 0xe0, 0x73, 0x12, 0x2b, + 0xd0, 0x80, 0xcb, 0xd6, 0x86, 0x0c, 0x6d, 0xc8, 0x0c, 0x1b, 0x32, 0xb0, 0x71, 0x37, 0x06, 0x99, + 0x2c, 0x0e, 0x28, 0x93, 0x12, 0x34, 0xd3, 0x01, 0xc8, 0xc4, 0x5a, 0xb9, 0xd5, 0x2c, 0x44, 0x3e, + 0x44, 0x11, 0x48, 0x3b, 0x59, 0xdc, 0x43, 0x2b, 0x0d, 0xae, 0x1b, 0x29, 0x5e, 0x8b, 0xdf, 0xf7, + 0x78, 0xa2, 0xf1, 0x26, 0x42, 0x16, 0x57, 0xb2, 0x88, 0xaf, 0x3b, 0x5b, 0xce, 0x4e, 0xbe, 0x95, + 0x37, 0xca, 0x05, 0x8b, 0x78, 0xd1, 0x47, 0xf8, 0x2a, 0xee, 0x32, 0xcd, 0x7f, 0x0d, 0x9d, 0xa3, + 0x45, 0x73, 0xc5, 0xdc, 0x2f, 0x54, 0x0e, 0x48, 0x86, 0xc7, 0x91, 0x7a, 0x2a, 0x5b, 0x3b, 0xeb, + 0x52, 0x79, 0x5e, 0x40, 0xab, 0x63, 0xf5, 0xd2, 0xf6, 0x86, 0xdf, 0x1c, 0xb4, 0x3c, 0xa4, 0xc5, + 0xc7, 0x99, 0x22, 0x26, 0x1e, 0xe9, 0xce, 0x0b, 0x58, 0xf4, 0x9e, 0x3e, 0xbf, 0x5e, 0x72, 0x65, + 0xbc, 0x3b, 0xea, 0xf3, 0x61, 0xdc, 0xd6, 0x49, 0xac, 0xe0, 0x8e, 0xfb, 0x3a, 0xa1, 0x25, 0x6a, + 0xd4, 0x84, 0x96, 0x1e, 0xf1, 0xbb, 0x83, 0x0a, 0x3f, 0x2a, 0xc3, 0xa7, 0x99, 0xb2, 0xa7, 0xcb, + 0x9e, 0x1f, 0xbe, 0x6a, 0xe0, 0x2b, 0xee, 0x24, 0x3c, 0xf9, 0x13, 0xfe, 0xd0, 0x7e, 0x48, 0xed, + 0xc3, 0x41, 0xe9, 0xe2, 0x64, 0x09, 0xae, 0xad, 0x4d, 0xfd, 0x60, 0x33, 0xdd, 0xb9, 0xa6, 0x73, + 0x73, 0x3b, 0xb0, 0x11, 0x10, 0x32, 0x29, 0x08, 0x28, 0x41, 0x05, 0x97, 0x66, 0x23, 0xa9, 0x3d, + 0x62, 0x71, 0x90, 0xfc, 0x6b, 0x9d, 0x8f, 0x66, 0x9c, 0xbd, 0xe6, 0xb6, 0x1b, 0x36, 0xe0, 0x2c, + 0x3d, 0xb4, 0x0d, 0xb4, 0x46, 0x7c, 0xd7, 0x5e, 0x2d, 0x9d, 0xec, 0x2c, 0x99, 0xc0, 0xfd, 0xef, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xb7, 0x37, 0x79, 0xd0, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_stats_service.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_stats_service.pb.go new file mode 100644 index 0000000..f110026 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_stats_service.pb.go @@ -0,0 +1,910 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto +// DO NOT EDIT! + +package clouderrorreporting + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Specifies how the time periods of error group counts are aligned. +type TimedCountAlignment int32 + +const ( + // No alignment specified. + TimedCountAlignment_ERROR_COUNT_ALIGNMENT_UNSPECIFIED TimedCountAlignment = 0 + // The time periods shall be consecutive, have width equal to the + // requested duration, and be aligned at the `alignment_time` provided in + // the request. + // The `alignment_time` does not have to be inside the query period but + // even if it is outside, only time periods are returned which overlap + // with the query period. + // A rounded alignment will typically result in a + // different size of the first or the last time period. + TimedCountAlignment_ALIGNMENT_EQUAL_ROUNDED TimedCountAlignment = 1 + // The time periods shall be consecutive, have width equal to the + // requested duration, and be aligned at the end of the requested time + // period. This can result in a different size of the + // first time period. + TimedCountAlignment_ALIGNMENT_EQUAL_AT_END TimedCountAlignment = 2 +) + +var TimedCountAlignment_name = map[int32]string{ + 0: "ERROR_COUNT_ALIGNMENT_UNSPECIFIED", + 1: "ALIGNMENT_EQUAL_ROUNDED", + 2: "ALIGNMENT_EQUAL_AT_END", +} +var TimedCountAlignment_value = map[string]int32{ + "ERROR_COUNT_ALIGNMENT_UNSPECIFIED": 0, + "ALIGNMENT_EQUAL_ROUNDED": 1, + "ALIGNMENT_EQUAL_AT_END": 2, +} + +func (x TimedCountAlignment) String() string { + return proto.EnumName(TimedCountAlignment_name, int32(x)) +} +func (TimedCountAlignment) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +// A sorting order of error groups. +type ErrorGroupOrder int32 + +const ( + // No group order specified. + ErrorGroupOrder_GROUP_ORDER_UNSPECIFIED ErrorGroupOrder = 0 + // Total count of errors in the given time window in descending order. + ErrorGroupOrder_COUNT_DESC ErrorGroupOrder = 1 + // Timestamp when the group was last seen in the given time window + // in descending order. + ErrorGroupOrder_LAST_SEEN_DESC ErrorGroupOrder = 2 + // Timestamp when the group was created in descending order. + ErrorGroupOrder_CREATED_DESC ErrorGroupOrder = 3 + // Number of affected users in the given time window in descending order. + ErrorGroupOrder_AFFECTED_USERS_DESC ErrorGroupOrder = 4 +) + +var ErrorGroupOrder_name = map[int32]string{ + 0: "GROUP_ORDER_UNSPECIFIED", + 1: "COUNT_DESC", + 2: "LAST_SEEN_DESC", + 3: "CREATED_DESC", + 4: "AFFECTED_USERS_DESC", +} +var ErrorGroupOrder_value = map[string]int32{ + "GROUP_ORDER_UNSPECIFIED": 0, + "COUNT_DESC": 1, + "LAST_SEEN_DESC": 2, + "CREATED_DESC": 3, + "AFFECTED_USERS_DESC": 4, +} + +func (x ErrorGroupOrder) String() string { + return proto.EnumName(ErrorGroupOrder_name, int32(x)) +} +func (ErrorGroupOrder) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +// The supported time ranges. +type QueryTimeRange_Period int32 + +const ( + // Do not use. + QueryTimeRange_PERIOD_UNSPECIFIED QueryTimeRange_Period = 0 + // Retrieve data for the last hour. + // Recommended minimum timed count duration: 1 min. + QueryTimeRange_PERIOD_1_HOUR QueryTimeRange_Period = 1 + // Retrieve data for the last 6 hours. + // Recommended minimum timed count duration: 10 min. + QueryTimeRange_PERIOD_6_HOURS QueryTimeRange_Period = 2 + // Retrieve data for the last day. + // Recommended minimum timed count duration: 1 hour. + QueryTimeRange_PERIOD_1_DAY QueryTimeRange_Period = 3 + // Retrieve data for the last week. + // Recommended minimum timed count duration: 6 hours. + QueryTimeRange_PERIOD_1_WEEK QueryTimeRange_Period = 4 + // Retrieve data for the last 30 days. + // Recommended minimum timed count duration: 1 day. + QueryTimeRange_PERIOD_30_DAYS QueryTimeRange_Period = 5 +) + +var QueryTimeRange_Period_name = map[int32]string{ + 0: "PERIOD_UNSPECIFIED", + 1: "PERIOD_1_HOUR", + 2: "PERIOD_6_HOURS", + 3: "PERIOD_1_DAY", + 4: "PERIOD_1_WEEK", + 5: "PERIOD_30_DAYS", +} +var QueryTimeRange_Period_value = map[string]int32{ + "PERIOD_UNSPECIFIED": 0, + "PERIOD_1_HOUR": 1, + "PERIOD_6_HOURS": 2, + "PERIOD_1_DAY": 3, + "PERIOD_1_WEEK": 4, + "PERIOD_30_DAYS": 5, +} + +func (x QueryTimeRange_Period) String() string { + return proto.EnumName(QueryTimeRange_Period_name, int32(x)) +} +func (QueryTimeRange_Period) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{6, 0} } + +// Specifies a set of `ErrorGroupStats` to return. +type ListGroupStatsRequest struct { + // [Required] The resource name of the Google Cloud Platform project. Written + // as <code>projects/</code> plus the + // <a href="https://support.google.com/cloud/answer/6158840">Google Cloud + // Platform project ID</a>. + // + // Example: <code>projects/my-project-123</code>. + ProjectName string `protobuf:"bytes,1,opt,name=project_name,json=projectName" json:"project_name,omitempty"` + // [Optional] List all <code>ErrorGroupStats</code> with these IDs. + GroupId []string `protobuf:"bytes,2,rep,name=group_id,json=groupId" json:"group_id,omitempty"` + // [Optional] List only <code>ErrorGroupStats</code> which belong to a service + // context that matches the filter. + // Data for all service contexts is returned if this field is not specified. + ServiceFilter *ServiceContextFilter `protobuf:"bytes,3,opt,name=service_filter,json=serviceFilter" json:"service_filter,omitempty"` + // [Optional] List data for the given time range. + // If not set a default time range is used. The field time_range_begin + // in the response will specify the beginning of this time range. + // Only <code>ErrorGroupStats</code> with a non-zero count in the given time + // range are returned, unless the request contains an explicit group_id list. + // If a group_id list is given, also <code>ErrorGroupStats</code> with zero + // occurrences are returned. + TimeRange *QueryTimeRange `protobuf:"bytes,5,opt,name=time_range,json=timeRange" json:"time_range,omitempty"` + // [Optional] The preferred duration for a single returned `TimedCount`. + // If not set, no timed counts are returned. + TimedCountDuration *google_protobuf2.Duration `protobuf:"bytes,6,opt,name=timed_count_duration,json=timedCountDuration" json:"timed_count_duration,omitempty"` + // [Optional] The alignment of the timed counts to be returned. + // Default is `ALIGNMENT_EQUAL_AT_END`. + Alignment TimedCountAlignment `protobuf:"varint,7,opt,name=alignment,enum=google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment" json:"alignment,omitempty"` + // [Optional] Time where the timed counts shall be aligned if rounded + // alignment is chosen. Default is 00:00 UTC. + AlignmentTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=alignment_time,json=alignmentTime" json:"alignment_time,omitempty"` + // [Optional] The sort order in which the results are returned. + // Default is `COUNT_DESC`. + Order ErrorGroupOrder `protobuf:"varint,9,opt,name=order,enum=google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder" json:"order,omitempty"` + // [Optional] The maximum number of results to return per response. + // Default is 20. + PageSize int32 `protobuf:"varint,11,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // [Optional] A `next_page_token` provided by a previous response. To view + // additional results, pass this token along with the identical query + // parameters as the first request. + PageToken string `protobuf:"bytes,12,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListGroupStatsRequest) Reset() { *m = ListGroupStatsRequest{} } +func (m *ListGroupStatsRequest) String() string { return proto.CompactTextString(m) } +func (*ListGroupStatsRequest) ProtoMessage() {} +func (*ListGroupStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *ListGroupStatsRequest) GetProjectName() string { + if m != nil { + return m.ProjectName + } + return "" +} + +func (m *ListGroupStatsRequest) GetGroupId() []string { + if m != nil { + return m.GroupId + } + return nil +} + +func (m *ListGroupStatsRequest) GetServiceFilter() *ServiceContextFilter { + if m != nil { + return m.ServiceFilter + } + return nil +} + +func (m *ListGroupStatsRequest) GetTimeRange() *QueryTimeRange { + if m != nil { + return m.TimeRange + } + return nil +} + +func (m *ListGroupStatsRequest) GetTimedCountDuration() *google_protobuf2.Duration { + if m != nil { + return m.TimedCountDuration + } + return nil +} + +func (m *ListGroupStatsRequest) GetAlignment() TimedCountAlignment { + if m != nil { + return m.Alignment + } + return TimedCountAlignment_ERROR_COUNT_ALIGNMENT_UNSPECIFIED +} + +func (m *ListGroupStatsRequest) GetAlignmentTime() *google_protobuf1.Timestamp { + if m != nil { + return m.AlignmentTime + } + return nil +} + +func (m *ListGroupStatsRequest) GetOrder() ErrorGroupOrder { + if m != nil { + return m.Order + } + return ErrorGroupOrder_GROUP_ORDER_UNSPECIFIED +} + +func (m *ListGroupStatsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListGroupStatsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Contains a set of requested error group stats. +type ListGroupStatsResponse struct { + // The error group stats which match the given request. + ErrorGroupStats []*ErrorGroupStats `protobuf:"bytes,1,rep,name=error_group_stats,json=errorGroupStats" json:"error_group_stats,omitempty"` + // If non-empty, more results are available. + // Pass this token, along with the same query parameters as the first + // request, to view the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` + // The timestamp specifies the start time to which the request was restricted. + // The start time is set based on the requested time range. It may be adjusted + // to a later time if a project has exceeded the storage quota and older data + // has been deleted. + TimeRangeBegin *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=time_range_begin,json=timeRangeBegin" json:"time_range_begin,omitempty"` +} + +func (m *ListGroupStatsResponse) Reset() { *m = ListGroupStatsResponse{} } +func (m *ListGroupStatsResponse) String() string { return proto.CompactTextString(m) } +func (*ListGroupStatsResponse) ProtoMessage() {} +func (*ListGroupStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ListGroupStatsResponse) GetErrorGroupStats() []*ErrorGroupStats { + if m != nil { + return m.ErrorGroupStats + } + return nil +} + +func (m *ListGroupStatsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func (m *ListGroupStatsResponse) GetTimeRangeBegin() *google_protobuf1.Timestamp { + if m != nil { + return m.TimeRangeBegin + } + return nil +} + +// Data extracted for a specific group based on certain filter criteria, +// such as a given time period and/or service filter. +type ErrorGroupStats struct { + // Group data that is independent of the filter criteria. + Group *ErrorGroup `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` + // Approximate total number of events in the given group that match + // the filter criteria. + Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` + // Approximate number of affected users in the given group that + // match the filter criteria. + // Users are distinguished by data in the `ErrorContext` of the + // individual error events, such as their login name or their remote + // IP address in case of HTTP requests. + // The number of affected users can be zero even if the number of + // errors is non-zero if no data was provided from which the + // affected user could be deduced. + // Users are counted based on data in the request + // context that was provided in the error report. If more users are + // implicitly affected, such as due to a crash of the whole service, + // this is not reflected here. + AffectedUsersCount int64 `protobuf:"varint,3,opt,name=affected_users_count,json=affectedUsersCount" json:"affected_users_count,omitempty"` + // Approximate number of occurrences over time. + // Timed counts returned by ListGroups are guaranteed to be: + // + // - Inside the requested time interval + // - Non-overlapping, and + // - Ordered by ascending time. + TimedCounts []*TimedCount `protobuf:"bytes,4,rep,name=timed_counts,json=timedCounts" json:"timed_counts,omitempty"` + // Approximate first occurrence that was ever seen for this group + // and which matches the given filter criteria, ignoring the + // time_range that was specified in the request. + FirstSeenTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=first_seen_time,json=firstSeenTime" json:"first_seen_time,omitempty"` + // Approximate last occurrence that was ever seen for this group and + // which matches the given filter criteria, ignoring the time_range + // that was specified in the request. + LastSeenTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=last_seen_time,json=lastSeenTime" json:"last_seen_time,omitempty"` + // Service contexts with a non-zero error count for the given filter + // criteria. This list can be truncated if multiple services are affected. + // Refer to `num_affected_services` for the total count. + AffectedServices []*ServiceContext `protobuf:"bytes,7,rep,name=affected_services,json=affectedServices" json:"affected_services,omitempty"` + // The total number of services with a non-zero error count for the given + // filter criteria. + NumAffectedServices int32 `protobuf:"varint,8,opt,name=num_affected_services,json=numAffectedServices" json:"num_affected_services,omitempty"` + // An arbitrary event that is chosen as representative for the whole group. + // The representative event is intended to be used as a quick preview for + // the whole group. Events in the group are usually sufficiently similar + // to each other such that showing an arbitrary representative provides + // insight into the characteristics of the group as a whole. + Representative *ErrorEvent `protobuf:"bytes,9,opt,name=representative" json:"representative,omitempty"` +} + +func (m *ErrorGroupStats) Reset() { *m = ErrorGroupStats{} } +func (m *ErrorGroupStats) String() string { return proto.CompactTextString(m) } +func (*ErrorGroupStats) ProtoMessage() {} +func (*ErrorGroupStats) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *ErrorGroupStats) GetGroup() *ErrorGroup { + if m != nil { + return m.Group + } + return nil +} + +func (m *ErrorGroupStats) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +func (m *ErrorGroupStats) GetAffectedUsersCount() int64 { + if m != nil { + return m.AffectedUsersCount + } + return 0 +} + +func (m *ErrorGroupStats) GetTimedCounts() []*TimedCount { + if m != nil { + return m.TimedCounts + } + return nil +} + +func (m *ErrorGroupStats) GetFirstSeenTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FirstSeenTime + } + return nil +} + +func (m *ErrorGroupStats) GetLastSeenTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastSeenTime + } + return nil +} + +func (m *ErrorGroupStats) GetAffectedServices() []*ServiceContext { + if m != nil { + return m.AffectedServices + } + return nil +} + +func (m *ErrorGroupStats) GetNumAffectedServices() int32 { + if m != nil { + return m.NumAffectedServices + } + return 0 +} + +func (m *ErrorGroupStats) GetRepresentative() *ErrorEvent { + if m != nil { + return m.Representative + } + return nil +} + +// The number of errors in a given time period. +// All numbers are approximate since the error events are sampled +// before counting them. +type TimedCount struct { + // Approximate number of occurrences in the given time period. + Count int64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"` + // Start of the time period to which `count` refers (included). + StartTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // End of the time period to which `count` refers (excluded). + EndTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *TimedCount) Reset() { *m = TimedCount{} } +func (m *TimedCount) String() string { return proto.CompactTextString(m) } +func (*TimedCount) ProtoMessage() {} +func (*TimedCount) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *TimedCount) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +func (m *TimedCount) GetStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *TimedCount) GetEndTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +// Specifies a set of error events to return. +type ListEventsRequest struct { + // [Required] The resource name of the Google Cloud Platform project. Written + // as `projects/` plus the + // [Google Cloud Platform project + // ID](https://support.google.com/cloud/answer/6158840). + // Example: `projects/my-project-123`. + ProjectName string `protobuf:"bytes,1,opt,name=project_name,json=projectName" json:"project_name,omitempty"` + // [Required] The group for which events shall be returned. + GroupId string `protobuf:"bytes,2,opt,name=group_id,json=groupId" json:"group_id,omitempty"` + // [Optional] List only ErrorGroups which belong to a service context that + // matches the filter. + // Data for all service contexts is returned if this field is not specified. + ServiceFilter *ServiceContextFilter `protobuf:"bytes,3,opt,name=service_filter,json=serviceFilter" json:"service_filter,omitempty"` + // [Optional] List only data for the given time range. + // If not set a default time range is used. The field time_range_begin + // in the response will specify the beginning of this time range. + TimeRange *QueryTimeRange `protobuf:"bytes,4,opt,name=time_range,json=timeRange" json:"time_range,omitempty"` + // [Optional] The maximum number of results to return per response. + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // [Optional] A `next_page_token` provided by a previous response. + PageToken string `protobuf:"bytes,7,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListEventsRequest) Reset() { *m = ListEventsRequest{} } +func (m *ListEventsRequest) String() string { return proto.CompactTextString(m) } +func (*ListEventsRequest) ProtoMessage() {} +func (*ListEventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *ListEventsRequest) GetProjectName() string { + if m != nil { + return m.ProjectName + } + return "" +} + +func (m *ListEventsRequest) GetGroupId() string { + if m != nil { + return m.GroupId + } + return "" +} + +func (m *ListEventsRequest) GetServiceFilter() *ServiceContextFilter { + if m != nil { + return m.ServiceFilter + } + return nil +} + +func (m *ListEventsRequest) GetTimeRange() *QueryTimeRange { + if m != nil { + return m.TimeRange + } + return nil +} + +func (m *ListEventsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListEventsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Contains a set of requested error events. +type ListEventsResponse struct { + // The error events which match the given request. + ErrorEvents []*ErrorEvent `protobuf:"bytes,1,rep,name=error_events,json=errorEvents" json:"error_events,omitempty"` + // If non-empty, more results are available. + // Pass this token, along with the same query parameters as the first + // request, to view the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` + // The timestamp specifies the start time to which the request was restricted. + TimeRangeBegin *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=time_range_begin,json=timeRangeBegin" json:"time_range_begin,omitempty"` +} + +func (m *ListEventsResponse) Reset() { *m = ListEventsResponse{} } +func (m *ListEventsResponse) String() string { return proto.CompactTextString(m) } +func (*ListEventsResponse) ProtoMessage() {} +func (*ListEventsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *ListEventsResponse) GetErrorEvents() []*ErrorEvent { + if m != nil { + return m.ErrorEvents + } + return nil +} + +func (m *ListEventsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func (m *ListEventsResponse) GetTimeRangeBegin() *google_protobuf1.Timestamp { + if m != nil { + return m.TimeRangeBegin + } + return nil +} + +// Requests might be rejected or the resulting timed count durations might be +// adjusted for lower durations. +type QueryTimeRange struct { + // Restricts the query to the specified time range. + Period QueryTimeRange_Period `protobuf:"varint,1,opt,name=period,enum=google.devtools.clouderrorreporting.v1beta1.QueryTimeRange_Period" json:"period,omitempty"` +} + +func (m *QueryTimeRange) Reset() { *m = QueryTimeRange{} } +func (m *QueryTimeRange) String() string { return proto.CompactTextString(m) } +func (*QueryTimeRange) ProtoMessage() {} +func (*QueryTimeRange) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *QueryTimeRange) GetPeriod() QueryTimeRange_Period { + if m != nil { + return m.Period + } + return QueryTimeRange_PERIOD_UNSPECIFIED +} + +// Specifies criteria for filtering a subset of service contexts. +// The fields in the filter correspond to the fields in `ServiceContext`. +// Only exact, case-sensitive matches are supported. +// If a field is unset or empty, it matches arbitrary values. +type ServiceContextFilter struct { + // [Optional] The exact value to match against + // [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service). + Service string `protobuf:"bytes,2,opt,name=service" json:"service,omitempty"` + // [Optional] The exact value to match against + // [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version). + Version string `protobuf:"bytes,3,opt,name=version" json:"version,omitempty"` + // [Optional] The exact value to match against + // [`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type). + ResourceType string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType" json:"resource_type,omitempty"` +} + +func (m *ServiceContextFilter) Reset() { *m = ServiceContextFilter{} } +func (m *ServiceContextFilter) String() string { return proto.CompactTextString(m) } +func (*ServiceContextFilter) ProtoMessage() {} +func (*ServiceContextFilter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *ServiceContextFilter) GetService() string { + if m != nil { + return m.Service + } + return "" +} + +func (m *ServiceContextFilter) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *ServiceContextFilter) GetResourceType() string { + if m != nil { + return m.ResourceType + } + return "" +} + +// Deletes all events in the project. +type DeleteEventsRequest struct { + // [Required] The resource name of the Google Cloud Platform project. Written + // as `projects/` plus the + // [Google Cloud Platform project + // ID](https://support.google.com/cloud/answer/6158840). + // Example: `projects/my-project-123`. + ProjectName string `protobuf:"bytes,1,opt,name=project_name,json=projectName" json:"project_name,omitempty"` +} + +func (m *DeleteEventsRequest) Reset() { *m = DeleteEventsRequest{} } +func (m *DeleteEventsRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteEventsRequest) ProtoMessage() {} +func (*DeleteEventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +func (m *DeleteEventsRequest) GetProjectName() string { + if m != nil { + return m.ProjectName + } + return "" +} + +// Response message for deleting error events. +type DeleteEventsResponse struct { +} + +func (m *DeleteEventsResponse) Reset() { *m = DeleteEventsResponse{} } +func (m *DeleteEventsResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteEventsResponse) ProtoMessage() {} +func (*DeleteEventsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{9} } + +func init() { + proto.RegisterType((*ListGroupStatsRequest)(nil), "google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest") + proto.RegisterType((*ListGroupStatsResponse)(nil), "google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse") + proto.RegisterType((*ErrorGroupStats)(nil), "google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats") + proto.RegisterType((*TimedCount)(nil), "google.devtools.clouderrorreporting.v1beta1.TimedCount") + proto.RegisterType((*ListEventsRequest)(nil), "google.devtools.clouderrorreporting.v1beta1.ListEventsRequest") + proto.RegisterType((*ListEventsResponse)(nil), "google.devtools.clouderrorreporting.v1beta1.ListEventsResponse") + proto.RegisterType((*QueryTimeRange)(nil), "google.devtools.clouderrorreporting.v1beta1.QueryTimeRange") + proto.RegisterType((*ServiceContextFilter)(nil), "google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter") + proto.RegisterType((*DeleteEventsRequest)(nil), "google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest") + proto.RegisterType((*DeleteEventsResponse)(nil), "google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse") + proto.RegisterEnum("google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment", TimedCountAlignment_name, TimedCountAlignment_value) + proto.RegisterEnum("google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder", ErrorGroupOrder_name, ErrorGroupOrder_value) + proto.RegisterEnum("google.devtools.clouderrorreporting.v1beta1.QueryTimeRange_Period", QueryTimeRange_Period_name, QueryTimeRange_Period_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ErrorStatsService service + +type ErrorStatsServiceClient interface { + // Lists the specified groups. + ListGroupStats(ctx context.Context, in *ListGroupStatsRequest, opts ...grpc.CallOption) (*ListGroupStatsResponse, error) + // Lists the specified events. + ListEvents(ctx context.Context, in *ListEventsRequest, opts ...grpc.CallOption) (*ListEventsResponse, error) + // Deletes all error events of a given project. + DeleteEvents(ctx context.Context, in *DeleteEventsRequest, opts ...grpc.CallOption) (*DeleteEventsResponse, error) +} + +type errorStatsServiceClient struct { + cc *grpc.ClientConn +} + +func NewErrorStatsServiceClient(cc *grpc.ClientConn) ErrorStatsServiceClient { + return &errorStatsServiceClient{cc} +} + +func (c *errorStatsServiceClient) ListGroupStats(ctx context.Context, in *ListGroupStatsRequest, opts ...grpc.CallOption) (*ListGroupStatsResponse, error) { + out := new(ListGroupStatsResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *errorStatsServiceClient) ListEvents(ctx context.Context, in *ListEventsRequest, opts ...grpc.CallOption) (*ListEventsResponse, error) { + out := new(ListEventsResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *errorStatsServiceClient) DeleteEvents(ctx context.Context, in *DeleteEventsRequest, opts ...grpc.CallOption) (*DeleteEventsResponse, error) { + out := new(DeleteEventsResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ErrorStatsService service + +type ErrorStatsServiceServer interface { + // Lists the specified groups. + ListGroupStats(context.Context, *ListGroupStatsRequest) (*ListGroupStatsResponse, error) + // Lists the specified events. + ListEvents(context.Context, *ListEventsRequest) (*ListEventsResponse, error) + // Deletes all error events of a given project. + DeleteEvents(context.Context, *DeleteEventsRequest) (*DeleteEventsResponse, error) +} + +func RegisterErrorStatsServiceServer(s *grpc.Server, srv ErrorStatsServiceServer) { + s.RegisterService(&_ErrorStatsService_serviceDesc, srv) +} + +func _ErrorStatsService_ListGroupStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListGroupStatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ErrorStatsServiceServer).ListGroupStats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ErrorStatsServiceServer).ListGroupStats(ctx, req.(*ListGroupStatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ErrorStatsService_ListEvents_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListEventsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ErrorStatsServiceServer).ListEvents(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ErrorStatsServiceServer).ListEvents(ctx, req.(*ListEventsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ErrorStatsService_DeleteEvents_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteEventsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ErrorStatsServiceServer).DeleteEvents(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ErrorStatsServiceServer).DeleteEvents(ctx, req.(*DeleteEventsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ErrorStatsService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + HandlerType: (*ErrorStatsServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListGroupStats", + Handler: _ErrorStatsService_ListGroupStats_Handler, + }, + { + MethodName: "ListEvents", + Handler: _ErrorStatsService_ListEvents_Handler, + }, + { + MethodName: "DeleteEvents", + Handler: _ErrorStatsService_DeleteEvents_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto", +} + +func init() { + proto.RegisterFile("google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto", fileDescriptor2) +} + +var fileDescriptor2 = []byte{ + // 1312 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4b, 0x6f, 0x1b, 0x55, + 0x14, 0x66, 0xec, 0x38, 0x89, 0x4f, 0x1c, 0xc7, 0xb9, 0x49, 0xd3, 0xa9, 0xcb, 0x23, 0x75, 0x05, + 0x0a, 0xa9, 0xb0, 0x9b, 0x54, 0xa5, 0x45, 0xe5, 0x51, 0xc7, 0x9e, 0x84, 0xa8, 0xa9, 0xed, 0x5e, + 0xdb, 0x20, 0xb2, 0xe8, 0x68, 0x62, 0x9f, 0x4c, 0x07, 0xec, 0x99, 0x61, 0xe6, 0x3a, 0x6a, 0x8b, + 0x2a, 0x21, 0x76, 0xac, 0x61, 0xc7, 0x3f, 0xe0, 0x57, 0xb0, 0x62, 0x0d, 0xea, 0x9e, 0x15, 0x7b, + 0x10, 0xbf, 0x00, 0xdd, 0xc7, 0xf8, 0xd5, 0x88, 0xd4, 0x0e, 0x42, 0xec, 0xe6, 0x9e, 0x73, 0xcf, + 0x77, 0x1e, 0xf7, 0x3b, 0xe7, 0xde, 0x01, 0xc3, 0xf6, 0x3c, 0xbb, 0x83, 0x85, 0x36, 0x9e, 0x30, + 0xcf, 0xeb, 0x84, 0x85, 0x56, 0xc7, 0xeb, 0xb5, 0x31, 0x08, 0xbc, 0x20, 0x40, 0xdf, 0x0b, 0x98, + 0xe3, 0xda, 0x85, 0x93, 0xad, 0x23, 0x64, 0xd6, 0x56, 0x41, 0x88, 0xcd, 0x90, 0x59, 0x2c, 0x34, + 0x43, 0x0c, 0x4e, 0x9c, 0x16, 0xe6, 0xfd, 0xc0, 0x63, 0x1e, 0xb9, 0x26, 0x61, 0xf2, 0x11, 0x4c, + 0xfe, 0x14, 0x98, 0xbc, 0x82, 0xc9, 0xbe, 0xaa, 0x7c, 0x5a, 0xbe, 0x53, 0xb0, 0x5c, 0xd7, 0x63, + 0x16, 0x73, 0x3c, 0x37, 0x94, 0x50, 0xd9, 0xdb, 0x93, 0x44, 0xd4, 0xf2, 0xba, 0x5d, 0xcf, 0x55, + 0x96, 0xaf, 0x2b, 0x4b, 0xb1, 0x3a, 0xea, 0x1d, 0x17, 0xda, 0xbd, 0x40, 0x40, 0x2b, 0xfd, 0x1b, + 0xe3, 0x7a, 0xe6, 0x74, 0x31, 0x64, 0x56, 0xd7, 0x97, 0x1b, 0x72, 0x3f, 0x24, 0xe0, 0xc2, 0x81, + 0x13, 0xb2, 0xbd, 0xc0, 0xeb, 0xf9, 0x75, 0x9e, 0x26, 0xc5, 0x2f, 0x7b, 0x18, 0x32, 0x72, 0x05, + 0x52, 0x7e, 0xe0, 0x7d, 0x8e, 0x2d, 0x66, 0xba, 0x56, 0x17, 0x75, 0x6d, 0x5d, 0xdb, 0x48, 0xd2, + 0x05, 0x25, 0xab, 0x58, 0x5d, 0x24, 0x97, 0x60, 0xde, 0xe6, 0x76, 0xa6, 0xd3, 0xd6, 0x63, 0xeb, + 0xf1, 0x8d, 0x24, 0x9d, 0x13, 0xeb, 0xfd, 0x36, 0x79, 0x04, 0x69, 0x55, 0x2e, 0xf3, 0xd8, 0xe9, + 0x30, 0x0c, 0xf4, 0xf8, 0xba, 0xb6, 0xb1, 0xb0, 0x5d, 0xcc, 0x4f, 0x50, 0xb6, 0x7c, 0x5d, 0x42, + 0x94, 0x3c, 0x97, 0xe1, 0x63, 0xb6, 0x2b, 0x80, 0xe8, 0xa2, 0x02, 0x96, 0x4b, 0x72, 0x08, 0xc0, + 0x93, 0x32, 0x03, 0xcb, 0xb5, 0x51, 0x4f, 0x08, 0x2f, 0x77, 0x26, 0xf2, 0xf2, 0xa0, 0x87, 0xc1, + 0x93, 0x86, 0xd3, 0x45, 0xca, 0x21, 0x68, 0x92, 0x45, 0x9f, 0xe4, 0x1e, 0xac, 0xf2, 0x45, 0xdb, + 0x6c, 0x79, 0x3d, 0x97, 0x99, 0x51, 0x71, 0xf5, 0x59, 0xe1, 0xe5, 0x52, 0xe4, 0x25, 0xaa, 0x6e, + 0xbe, 0xac, 0x36, 0x50, 0x22, 0xcc, 0x4a, 0xdc, 0x2a, 0x92, 0x91, 0x87, 0x90, 0xb4, 0x3a, 0x8e, + 0xed, 0x76, 0xd1, 0x65, 0xfa, 0xdc, 0xba, 0xb6, 0x91, 0xde, 0xbe, 0x3b, 0x51, 0x9c, 0x8d, 0x3e, + 0x66, 0x31, 0xc2, 0xa1, 0x03, 0x48, 0x52, 0x84, 0x74, 0x7f, 0x61, 0x72, 0xff, 0xfa, 0xbc, 0x08, + 0x33, 0xfb, 0x42, 0x98, 0x8d, 0x88, 0x04, 0x74, 0xb1, 0x6f, 0xc1, 0x65, 0x84, 0x42, 0xc2, 0x0b, + 0xda, 0x18, 0xe8, 0x49, 0x11, 0xde, 0xfb, 0x13, 0x85, 0x67, 0x70, 0xb1, 0xe0, 0x51, 0x95, 0x63, + 0x50, 0x09, 0x45, 0x2e, 0x43, 0xd2, 0xb7, 0x6c, 0x34, 0x43, 0xe7, 0x29, 0xea, 0x0b, 0xeb, 0xda, + 0x46, 0x82, 0xce, 0x73, 0x41, 0xdd, 0x79, 0x8a, 0xe4, 0x35, 0x00, 0xa1, 0x64, 0xde, 0x17, 0xe8, + 0xea, 0x29, 0x41, 0x31, 0xb1, 0xbd, 0xc1, 0x05, 0xb9, 0x3f, 0x35, 0x58, 0x1b, 0x67, 0x67, 0xe8, + 0x7b, 0x6e, 0x88, 0xe4, 0x11, 0x2c, 0xcb, 0xde, 0x94, 0x0c, 0x14, 0x1d, 0xaa, 0x6b, 0xeb, 0xf1, + 0x8d, 0x85, 0xa9, 0xc3, 0x96, 0x0e, 0x96, 0x70, 0x54, 0x40, 0xde, 0x82, 0x25, 0x17, 0x1f, 0x33, + 0x73, 0x28, 0xd0, 0x98, 0x08, 0x74, 0x91, 0x8b, 0x6b, 0x51, 0xb0, 0xa4, 0x0c, 0x99, 0x01, 0x11, + 0xcd, 0x23, 0xb4, 0x1d, 0x57, 0x9f, 0x39, 0xf3, 0x04, 0xd2, 0x7d, 0xb6, 0xed, 0x70, 0x8b, 0xdc, + 0xb7, 0x09, 0x58, 0x1a, 0x0b, 0x89, 0xdc, 0x87, 0x84, 0xc8, 0x52, 0xf4, 0xe0, 0xc2, 0xf6, 0xad, + 0x29, 0xf3, 0xa3, 0x12, 0x85, 0xac, 0x42, 0x42, 0xf0, 0x59, 0xa4, 0x11, 0xa7, 0x72, 0x41, 0xae, + 0xc3, 0xaa, 0x75, 0x7c, 0x8c, 0x2d, 0x86, 0x6d, 0xb3, 0x17, 0x62, 0x10, 0x4a, 0xd2, 0x8b, 0xbe, + 0x8d, 0x53, 0x12, 0xe9, 0x9a, 0x5c, 0x25, 0x48, 0x48, 0x0e, 0x21, 0x35, 0xd4, 0x1d, 0xa1, 0x3e, + 0x23, 0xaa, 0x7f, 0x6b, 0x4a, 0x4e, 0xd3, 0x85, 0x41, 0xcf, 0x84, 0x64, 0x07, 0x96, 0x8e, 0x9d, + 0x20, 0x64, 0x66, 0x88, 0xe8, 0x4a, 0x36, 0x27, 0xce, 0x66, 0xb3, 0x30, 0xa9, 0x23, 0xba, 0x82, + 0xcd, 0x77, 0x21, 0xdd, 0xb1, 0x46, 0x20, 0x66, 0xcf, 0x84, 0x48, 0x71, 0x8b, 0x3e, 0xc2, 0x23, + 0x58, 0xee, 0xd7, 0x44, 0x4d, 0x9d, 0x50, 0x9f, 0x13, 0x69, 0xde, 0x39, 0xc7, 0x20, 0xa3, 0x99, + 0x08, 0x55, 0xc9, 0x43, 0xb2, 0x0d, 0x17, 0xdc, 0x5e, 0xd7, 0x7c, 0xd1, 0xdb, 0xbc, 0xe8, 0x98, + 0x15, 0xb7, 0xd7, 0x2d, 0x8e, 0xdb, 0x98, 0x90, 0x0e, 0xd0, 0x0f, 0x30, 0x44, 0x97, 0xdf, 0x27, + 0x27, 0x28, 0xda, 0x76, 0x2a, 0x7e, 0x18, 0x27, 0x7c, 0x98, 0x8c, 0xc1, 0xe5, 0xbe, 0xd7, 0x00, + 0x06, 0x07, 0x34, 0xe0, 0x8d, 0x36, 0xcc, 0x9b, 0xf7, 0x00, 0x42, 0x66, 0x05, 0x6a, 0xe4, 0xc4, + 0xce, 0xac, 0x70, 0x52, 0xec, 0x16, 0xe5, 0xbd, 0x09, 0xf3, 0xe8, 0xb6, 0xa5, 0x61, 0xfc, 0x4c, + 0xc3, 0x39, 0x74, 0xdb, 0x7c, 0x95, 0x7b, 0x1e, 0x83, 0x65, 0x3e, 0x15, 0x44, 0xd0, 0xd3, 0xdf, + 0x57, 0xda, 0xff, 0xe1, 0xbe, 0x9a, 0xf9, 0x57, 0xef, 0xab, 0x91, 0x59, 0x3b, 0xfb, 0x8f, 0xb3, + 0x76, 0x6e, 0x7c, 0xd6, 0xfe, 0xa6, 0x01, 0x19, 0xae, 0xaa, 0x9a, 0xb3, 0x87, 0x90, 0x92, 0x73, + 0x16, 0x85, 0x5c, 0x8d, 0xd8, 0xa9, 0x29, 0xb6, 0x80, 0xfd, 0xef, 0xff, 0x7a, 0xb2, 0xfe, 0xa1, + 0x41, 0x7a, 0xb4, 0x74, 0xe4, 0x10, 0x66, 0x7d, 0x0c, 0x1c, 0xaf, 0x2d, 0xd8, 0x92, 0xde, 0xde, + 0x39, 0xc7, 0x39, 0xe4, 0x6b, 0x02, 0x89, 0x2a, 0xc4, 0xdc, 0xd7, 0x1a, 0xcc, 0x4a, 0x11, 0x59, + 0x03, 0x52, 0x33, 0xe8, 0x7e, 0xb5, 0x6c, 0x36, 0x2b, 0xf5, 0x9a, 0x51, 0xda, 0xdf, 0xdd, 0x37, + 0xca, 0x99, 0x57, 0xc8, 0x32, 0x2c, 0x2a, 0xf9, 0x96, 0xf9, 0x71, 0xb5, 0x49, 0x33, 0x1a, 0x21, + 0x90, 0x56, 0xa2, 0x77, 0x85, 0xa8, 0x9e, 0x89, 0x91, 0x0c, 0xa4, 0xfa, 0xdb, 0xca, 0xc5, 0xcf, + 0x32, 0xf1, 0x11, 0xc3, 0x4f, 0x0d, 0xe3, 0x5e, 0x66, 0x66, 0xc8, 0xf0, 0xc6, 0x75, 0xbe, 0xab, + 0x9e, 0x49, 0xe4, 0x3c, 0x58, 0x3d, 0x8d, 0x91, 0x44, 0x87, 0x39, 0xc5, 0xc9, 0xa8, 0x0d, 0xd4, + 0x92, 0x6b, 0x4e, 0x30, 0x08, 0xf9, 0x1b, 0x27, 0x2e, 0x35, 0x6a, 0x49, 0xae, 0xc2, 0x62, 0x80, + 0xa1, 0xd7, 0x0b, 0x5a, 0x68, 0xb2, 0x27, 0xbe, 0x64, 0x6e, 0x92, 0xa6, 0x22, 0x61, 0xe3, 0x89, + 0x8f, 0xb9, 0xdb, 0xb0, 0x52, 0xc6, 0x0e, 0x32, 0x9c, 0xb4, 0x35, 0x73, 0x6b, 0xb0, 0x3a, 0x6a, + 0x29, 0xe9, 0xb7, 0xd9, 0x83, 0x95, 0x53, 0x9e, 0x3d, 0xe4, 0x4d, 0xb8, 0x62, 0x50, 0x5a, 0xa5, + 0x66, 0xa9, 0xda, 0xac, 0x34, 0xcc, 0xe2, 0xc1, 0xfe, 0x5e, 0xe5, 0xbe, 0x51, 0x69, 0x8c, 0x15, + 0xf8, 0x32, 0x5c, 0x1c, 0xa8, 0x8c, 0x07, 0xcd, 0xe2, 0x81, 0x49, 0xab, 0xcd, 0x4a, 0xd9, 0x28, + 0x67, 0x34, 0x92, 0x85, 0xb5, 0x71, 0x65, 0xb1, 0x61, 0x1a, 0x95, 0x72, 0x26, 0xb6, 0xf9, 0x6c, + 0xf8, 0x12, 0xae, 0xaa, 0x77, 0xcc, 0xc5, 0x3d, 0x5a, 0x6d, 0xd6, 0xcc, 0x2a, 0x2d, 0x1b, 0x74, + 0xcc, 0x51, 0x1a, 0x40, 0x46, 0x52, 0x36, 0xea, 0x25, 0x79, 0x8c, 0x07, 0xc5, 0x7a, 0xc3, 0xac, + 0x1b, 0x46, 0x45, 0xca, 0xc4, 0x31, 0x96, 0xa8, 0x51, 0x6c, 0x18, 0x65, 0x29, 0x89, 0x93, 0x8b, + 0xb0, 0x52, 0xdc, 0xdd, 0x35, 0x4a, 0x5c, 0xd4, 0xac, 0x1b, 0xb4, 0x2e, 0x15, 0x33, 0xdb, 0x7f, + 0xcd, 0xc0, 0xb2, 0xf0, 0x2f, 0xee, 0x7f, 0x75, 0x86, 0xe4, 0x17, 0x0d, 0xd2, 0xa3, 0xaf, 0x21, + 0x32, 0x19, 0x61, 0x4f, 0x7d, 0xe8, 0x67, 0x4b, 0xe7, 0xc2, 0x90, 0xe7, 0x94, 0xbb, 0xf9, 0xcd, + 0xf3, 0xdf, 0xbf, 0x8b, 0x15, 0xc8, 0x3b, 0xfd, 0xff, 0x94, 0xaf, 0x86, 0x8f, 0xfc, 0x03, 0xb5, + 0x08, 0x0b, 0x9b, 0xcf, 0x0a, 0xf6, 0x20, 0xfe, 0x9f, 0x34, 0x80, 0xc1, 0xd0, 0x21, 0x1f, 0x4e, + 0x1c, 0xca, 0x08, 0xd1, 0xb2, 0x1f, 0x4d, 0x6d, 0xaf, 0xd2, 0xd8, 0x12, 0x69, 0x5c, 0x23, 0x6f, + 0xbf, 0x44, 0x1a, 0x72, 0x20, 0x92, 0x9f, 0x35, 0x48, 0x0d, 0x53, 0x97, 0x4c, 0xf6, 0xa8, 0x3f, + 0xa5, 0x5f, 0xb2, 0xc5, 0x73, 0x20, 0x8c, 0x26, 0xb2, 0xf9, 0xf2, 0x89, 0xec, 0xfc, 0xaa, 0x01, + 0xff, 0xb9, 0x9c, 0xc4, 0xf7, 0xce, 0xda, 0x0b, 0x2c, 0xad, 0xf1, 0x41, 0x5c, 0xd3, 0x0e, 0x1f, + 0x2a, 0x18, 0xdb, 0xeb, 0x58, 0xae, 0x9d, 0xf7, 0x02, 0xbb, 0x60, 0xa3, 0x2b, 0xc6, 0x74, 0x41, + 0xaa, 0x2c, 0xdf, 0x09, 0x5f, 0xea, 0x97, 0xf7, 0xce, 0x29, 0xba, 0x1f, 0x63, 0x57, 0xf7, 0xa4, + 0x83, 0x12, 0x57, 0xca, 0x2b, 0x86, 0xf6, 0xe3, 0xfb, 0x64, 0x6b, 0x87, 0x5b, 0x1e, 0xcd, 0x0a, + 0x87, 0x37, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x2a, 0x59, 0xfa, 0xf4, 0x0f, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/report_errors_service.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/report_errors_service.pb.go new file mode 100644 index 0000000..e7039c0 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/report_errors_service.pb.go @@ -0,0 +1,243 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto +// DO NOT EDIT! + +package clouderrorreporting + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A request for reporting an individual error event. +type ReportErrorEventRequest struct { + // [Required] The resource name of the Google Cloud Platform project. Written + // as `projects/` plus the + // [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). + // Example: `projects/my-project-123`. + ProjectName string `protobuf:"bytes,1,opt,name=project_name,json=projectName" json:"project_name,omitempty"` + // [Required] The error event to be reported. + Event *ReportedErrorEvent `protobuf:"bytes,2,opt,name=event" json:"event,omitempty"` +} + +func (m *ReportErrorEventRequest) Reset() { *m = ReportErrorEventRequest{} } +func (m *ReportErrorEventRequest) String() string { return proto.CompactTextString(m) } +func (*ReportErrorEventRequest) ProtoMessage() {} +func (*ReportErrorEventRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *ReportErrorEventRequest) GetProjectName() string { + if m != nil { + return m.ProjectName + } + return "" +} + +func (m *ReportErrorEventRequest) GetEvent() *ReportedErrorEvent { + if m != nil { + return m.Event + } + return nil +} + +// Response for reporting an individual error event. +// Data may be added to this message in the future. +type ReportErrorEventResponse struct { +} + +func (m *ReportErrorEventResponse) Reset() { *m = ReportErrorEventResponse{} } +func (m *ReportErrorEventResponse) String() string { return proto.CompactTextString(m) } +func (*ReportErrorEventResponse) ProtoMessage() {} +func (*ReportErrorEventResponse) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +// An error event which is reported to the Error Reporting system. +type ReportedErrorEvent struct { + // [Optional] Time when the event occurred. + // If not provided, the time when the event was received by the + // Error Reporting system will be used. + EventTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=event_time,json=eventTime" json:"event_time,omitempty"` + // [Required] The service context in which this error has occurred. + ServiceContext *ServiceContext `protobuf:"bytes,2,opt,name=service_context,json=serviceContext" json:"service_context,omitempty"` + // [Required] A message describing the error. The message can contain an + // exception stack in one of the supported programming languages and formats. + // In that case, the message is parsed and detailed exception information + // is returned when retrieving the error event again. + Message string `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` + // [Optional] A description of the context in which the error occurred. + Context *ErrorContext `protobuf:"bytes,4,opt,name=context" json:"context,omitempty"` +} + +func (m *ReportedErrorEvent) Reset() { *m = ReportedErrorEvent{} } +func (m *ReportedErrorEvent) String() string { return proto.CompactTextString(m) } +func (*ReportedErrorEvent) ProtoMessage() {} +func (*ReportedErrorEvent) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } + +func (m *ReportedErrorEvent) GetEventTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EventTime + } + return nil +} + +func (m *ReportedErrorEvent) GetServiceContext() *ServiceContext { + if m != nil { + return m.ServiceContext + } + return nil +} + +func (m *ReportedErrorEvent) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *ReportedErrorEvent) GetContext() *ErrorContext { + if m != nil { + return m.Context + } + return nil +} + +func init() { + proto.RegisterType((*ReportErrorEventRequest)(nil), "google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest") + proto.RegisterType((*ReportErrorEventResponse)(nil), "google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse") + proto.RegisterType((*ReportedErrorEvent)(nil), "google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ReportErrorsService service + +type ReportErrorsServiceClient interface { + // Report an individual error event. + // + // This endpoint accepts <strong>either</strong> an OAuth token, + // <strong>or</strong> an + // <a href="https://support.google.com/cloud/answer/6158862">API key</a> + // for authentication. To use an API key, append it to the URL as the value of + // a `key` parameter. For example: + // <pre>POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456</pre> + ReportErrorEvent(ctx context.Context, in *ReportErrorEventRequest, opts ...grpc.CallOption) (*ReportErrorEventResponse, error) +} + +type reportErrorsServiceClient struct { + cc *grpc.ClientConn +} + +func NewReportErrorsServiceClient(cc *grpc.ClientConn) ReportErrorsServiceClient { + return &reportErrorsServiceClient{cc} +} + +func (c *reportErrorsServiceClient) ReportErrorEvent(ctx context.Context, in *ReportErrorEventRequest, opts ...grpc.CallOption) (*ReportErrorEventResponse, error) { + out := new(ReportErrorEventResponse) + err := grpc.Invoke(ctx, "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ReportErrorsService service + +type ReportErrorsServiceServer interface { + // Report an individual error event. + // + // This endpoint accepts <strong>either</strong> an OAuth token, + // <strong>or</strong> an + // <a href="https://support.google.com/cloud/answer/6158862">API key</a> + // for authentication. To use an API key, append it to the URL as the value of + // a `key` parameter. For example: + // <pre>POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456</pre> + ReportErrorEvent(context.Context, *ReportErrorEventRequest) (*ReportErrorEventResponse, error) +} + +func RegisterReportErrorsServiceServer(s *grpc.Server, srv ReportErrorsServiceServer) { + s.RegisterService(&_ReportErrorsService_serviceDesc, srv) +} + +func _ReportErrorsService_ReportErrorEvent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReportErrorEventRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReportErrorsServiceServer).ReportErrorEvent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReportErrorsServiceServer).ReportErrorEvent(ctx, req.(*ReportErrorEventRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ReportErrorsService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + HandlerType: (*ReportErrorsServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ReportErrorEvent", + Handler: _ReportErrorsService_ReportErrorEvent_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto", +} + +func init() { + proto.RegisterFile("google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto", fileDescriptor3) +} + +var fileDescriptor3 = []byte{ + // 475 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xc7, 0xe5, 0xf0, 0x51, 0x75, 0x83, 0x00, 0x2d, 0x07, 0x2c, 0x0b, 0x89, 0x12, 0x2e, 0x15, + 0x48, 0x5e, 0x12, 0x2e, 0xa4, 0x15, 0xaa, 0x94, 0x12, 0xf5, 0x86, 0x2a, 0x17, 0x38, 0x70, 0xc0, + 0xda, 0x38, 0x83, 0x65, 0x14, 0xef, 0x98, 0xdd, 0x8d, 0x85, 0x84, 0xb8, 0xf0, 0x0a, 0x7d, 0x05, + 0x4e, 0xbc, 0x4e, 0x5f, 0x80, 0x03, 0x0f, 0xc1, 0x11, 0xed, 0x57, 0x14, 0x48, 0x0e, 0x98, 0x1e, + 0xc7, 0xe3, 0xf9, 0xfd, 0xff, 0xf3, 0xb1, 0xe4, 0xa4, 0x44, 0x2c, 0x17, 0xc0, 0xe6, 0xd0, 0x6a, + 0xc4, 0x85, 0x62, 0xc5, 0x02, 0x97, 0x73, 0x90, 0x12, 0xa5, 0x84, 0x06, 0xa5, 0xae, 0x44, 0xc9, + 0xda, 0xe1, 0x0c, 0x34, 0x1f, 0x32, 0xf7, 0x25, 0xb7, 0x59, 0x95, 0x2b, 0x90, 0x6d, 0x55, 0x40, + 0xda, 0x48, 0xd4, 0x48, 0x1f, 0x3b, 0x50, 0x1a, 0x40, 0xe9, 0x16, 0x50, 0xea, 0x41, 0xc9, 0x3d, + 0xaf, 0xca, 0x9b, 0x8a, 0x71, 0x21, 0x50, 0x73, 0x5d, 0xa1, 0x50, 0x0e, 0x95, 0x3c, 0xeb, 0xe2, + 0xa9, 0xc0, 0xba, 0x46, 0xe1, 0x2b, 0xef, 0xfb, 0x4a, 0x1b, 0xcd, 0x96, 0xef, 0x99, 0xae, 0x6a, + 0x50, 0x9a, 0xd7, 0x8d, 0xfb, 0x61, 0x70, 0x1e, 0x91, 0xbb, 0x99, 0x65, 0x4c, 0x0d, 0x6e, 0xda, + 0x82, 0xd0, 0x19, 0x7c, 0x5c, 0x82, 0xd2, 0xf4, 0x01, 0xb9, 0xd1, 0x48, 0xfc, 0x00, 0x85, 0xce, + 0x05, 0xaf, 0x21, 0x8e, 0xf6, 0xa2, 0xfd, 0xdd, 0xac, 0xef, 0xbf, 0xbd, 0xe4, 0x35, 0xd0, 0xd7, + 0xe4, 0x1a, 0x98, 0x92, 0xb8, 0xb7, 0x17, 0xed, 0xf7, 0x47, 0x47, 0x69, 0x87, 0xa6, 0x53, 0xa7, + 0x0b, 0xf3, 0x35, 0x65, 0x47, 0x1b, 0x24, 0x24, 0xde, 0x34, 0xa5, 0x1a, 0x14, 0x0a, 0x06, 0xdf, + 0x7a, 0x84, 0x6e, 0x56, 0xd2, 0x31, 0x21, 0xb6, 0x36, 0x37, 0x1d, 0x5a, 0xab, 0xfd, 0x51, 0x12, + 0xec, 0x84, 0xf6, 0xd3, 0x57, 0xa1, 0xfd, 0x6c, 0xd7, 0xfe, 0x6d, 0x62, 0x3a, 0x27, 0xb7, 0xfc, + 0xea, 0xf2, 0x02, 0x85, 0x86, 0x4f, 0xa1, 0x9d, 0xc3, 0x4e, 0xed, 0x9c, 0x39, 0xc6, 0xb1, 0x43, + 0x64, 0x37, 0xd5, 0x1f, 0x31, 0x8d, 0xc9, 0x4e, 0x0d, 0x4a, 0xf1, 0x12, 0xe2, 0x2b, 0x76, 0x90, + 0x21, 0xa4, 0x67, 0x64, 0x27, 0xe8, 0x5e, 0xb5, 0xba, 0xe3, 0x4e, 0xba, 0x76, 0x08, 0x41, 0x35, + 0x90, 0x46, 0xbf, 0x22, 0x72, 0x67, 0x6d, 0x86, 0xca, 0xbb, 0xa3, 0x3f, 0x22, 0x72, 0xfb, 0xef, + 0xd9, 0xd2, 0x17, 0xff, 0xb1, 0xb7, 0x8d, 0x7b, 0x49, 0xa6, 0x97, 0xa4, 0xf8, 0x05, 0x1f, 0x7d, + 0xbd, 0xf8, 0x79, 0xde, 0x1b, 0x0f, 0x9e, 0xac, 0x4e, 0xfa, 0xf3, 0xfa, 0x19, 0x3e, 0xf7, 0x81, + 0x62, 0x8f, 0xbe, 0x30, 0xbb, 0x44, 0x75, 0xe0, 0xe8, 0x07, 0xee, 0x7a, 0x26, 0x17, 0x11, 0x31, + 0xaf, 0xa0, 0x8b, 0x9b, 0x49, 0xbc, 0x65, 0x56, 0xa7, 0xe6, 0x6a, 0x4e, 0xa3, 0xb7, 0xef, 0x3c, + 0xa8, 0xc4, 0x05, 0x17, 0x65, 0x8a, 0xb2, 0x64, 0x25, 0x08, 0x7b, 0x53, 0xcc, 0xa5, 0x78, 0x53, + 0xa9, 0x7f, 0x7a, 0x9d, 0x87, 0x5b, 0x72, 0xdf, 0x7b, 0x0f, 0x4f, 0x9c, 0xc0, 0xb1, 0x49, 0xba, + 0x7d, 0x66, 0x2b, 0x87, 0x6f, 0x86, 0x13, 0x53, 0x39, 0xbb, 0x6e, 0x05, 0x9f, 0xfe, 0x0e, 0x00, + 0x00, 0xff, 0xff, 0x9d, 0xe5, 0xc6, 0x91, 0xa1, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v1/trace.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v1/trace.pb.go new file mode 100644 index 0000000..9e5a80e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v1/trace.pb.go @@ -0,0 +1,662 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/cloudtrace/v1/trace.proto +// DO NOT EDIT! + +/* +Package cloudtrace is a generated protocol buffer package. + +It is generated from these files: + google/devtools/cloudtrace/v1/trace.proto + +It has these top-level messages: + Trace + Traces + TraceSpan + ListTracesRequest + ListTracesResponse + GetTraceRequest + PatchTracesRequest +*/ +package cloudtrace + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Type of span. Can be used to specify additional relationships between spans +// in addition to a parent/child relationship. +type TraceSpan_SpanKind int32 + +const ( + // Unspecified. + TraceSpan_SPAN_KIND_UNSPECIFIED TraceSpan_SpanKind = 0 + // Indicates that the span covers server-side handling of an RPC or other + // remote network request. + TraceSpan_RPC_SERVER TraceSpan_SpanKind = 1 + // Indicates that the span covers the client-side wrapper around an RPC or + // other remote request. + TraceSpan_RPC_CLIENT TraceSpan_SpanKind = 2 +) + +var TraceSpan_SpanKind_name = map[int32]string{ + 0: "SPAN_KIND_UNSPECIFIED", + 1: "RPC_SERVER", + 2: "RPC_CLIENT", +} +var TraceSpan_SpanKind_value = map[string]int32{ + "SPAN_KIND_UNSPECIFIED": 0, + "RPC_SERVER": 1, + "RPC_CLIENT": 2, +} + +func (x TraceSpan_SpanKind) String() string { + return proto.EnumName(TraceSpan_SpanKind_name, int32(x)) +} +func (TraceSpan_SpanKind) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +// Type of data returned for traces in the list. +type ListTracesRequest_ViewType int32 + +const ( + // Default is `MINIMAL` if unspecified. + ListTracesRequest_VIEW_TYPE_UNSPECIFIED ListTracesRequest_ViewType = 0 + // Minimal view of the trace record that contains only the project + // and trace IDs. + ListTracesRequest_MINIMAL ListTracesRequest_ViewType = 1 + // Root span view of the trace record that returns the root spans along + // with the minimal trace data. + ListTracesRequest_ROOTSPAN ListTracesRequest_ViewType = 2 + // Complete view of the trace record that contains the actual trace data. + // This is equivalent to calling the REST `get` or RPC `GetTrace` method + // using the ID of each listed trace. + ListTracesRequest_COMPLETE ListTracesRequest_ViewType = 3 +) + +var ListTracesRequest_ViewType_name = map[int32]string{ + 0: "VIEW_TYPE_UNSPECIFIED", + 1: "MINIMAL", + 2: "ROOTSPAN", + 3: "COMPLETE", +} +var ListTracesRequest_ViewType_value = map[string]int32{ + "VIEW_TYPE_UNSPECIFIED": 0, + "MINIMAL": 1, + "ROOTSPAN": 2, + "COMPLETE": 3, +} + +func (x ListTracesRequest_ViewType) String() string { + return proto.EnumName(ListTracesRequest_ViewType_name, int32(x)) +} +func (ListTracesRequest_ViewType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{3, 0} +} + +// A trace describes how long it takes for an application to perform an +// operation. It consists of a set of spans, each of which represent a single +// timed event within the operation. +type Trace struct { + // Project ID of the Cloud project where the trace data is stored. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Globally unique identifier for the trace. This identifier is a 128-bit + // numeric value formatted as a 32-byte hex string. + TraceId string `protobuf:"bytes,2,opt,name=trace_id,json=traceId" json:"trace_id,omitempty"` + // Collection of spans in the trace. + Spans []*TraceSpan `protobuf:"bytes,3,rep,name=spans" json:"spans,omitempty"` +} + +func (m *Trace) Reset() { *m = Trace{} } +func (m *Trace) String() string { return proto.CompactTextString(m) } +func (*Trace) ProtoMessage() {} +func (*Trace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Trace) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *Trace) GetTraceId() string { + if m != nil { + return m.TraceId + } + return "" +} + +func (m *Trace) GetSpans() []*TraceSpan { + if m != nil { + return m.Spans + } + return nil +} + +// List of new or updated traces. +type Traces struct { + // List of traces. + Traces []*Trace `protobuf:"bytes,1,rep,name=traces" json:"traces,omitempty"` +} + +func (m *Traces) Reset() { *m = Traces{} } +func (m *Traces) String() string { return proto.CompactTextString(m) } +func (*Traces) ProtoMessage() {} +func (*Traces) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Traces) GetTraces() []*Trace { + if m != nil { + return m.Traces + } + return nil +} + +// A span represents a single timed event within a trace. Spans can be nested +// and form a trace tree. Often, a trace contains a root span that describes the +// end-to-end latency of an operation and, optionally, one or more subspans for +// its suboperations. Spans do not need to be contiguous. There may be gaps +// between spans in a trace. +type TraceSpan struct { + // Identifier for the span. Must be a 64-bit integer other than 0 and + // unique within a trace. + SpanId uint64 `protobuf:"fixed64,1,opt,name=span_id,json=spanId" json:"span_id,omitempty"` + // Distinguishes between spans generated in a particular context. For example, + // two spans with the same name may be distinguished using `RPC_CLIENT` + // and `RPC_SERVER` to identify queueing latency associated with the span. + Kind TraceSpan_SpanKind `protobuf:"varint,2,opt,name=kind,enum=google.devtools.cloudtrace.v1.TraceSpan_SpanKind" json:"kind,omitempty"` + // Name of the trace. The trace name is sanitized and displayed in the + // Stackdriver Trace tool in the Google Developers Console. + // The name may be a method name or some other per-call site name. + // For the same executable and the same call point, a best practice is + // to use a consistent name, which makes it easier to correlate + // cross-trace spans. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // Start time of the span in nanoseconds from the UNIX epoch. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // End time of the span in nanoseconds from the UNIX epoch. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // ID of the parent span, if any. Optional. + ParentSpanId uint64 `protobuf:"fixed64,6,opt,name=parent_span_id,json=parentSpanId" json:"parent_span_id,omitempty"` + // Collection of labels associated with the span. + Labels map[string]string `protobuf:"bytes,7,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *TraceSpan) Reset() { *m = TraceSpan{} } +func (m *TraceSpan) String() string { return proto.CompactTextString(m) } +func (*TraceSpan) ProtoMessage() {} +func (*TraceSpan) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *TraceSpan) GetSpanId() uint64 { + if m != nil { + return m.SpanId + } + return 0 +} + +func (m *TraceSpan) GetKind() TraceSpan_SpanKind { + if m != nil { + return m.Kind + } + return TraceSpan_SPAN_KIND_UNSPECIFIED +} + +func (m *TraceSpan) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *TraceSpan) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *TraceSpan) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *TraceSpan) GetParentSpanId() uint64 { + if m != nil { + return m.ParentSpanId + } + return 0 +} + +func (m *TraceSpan) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// The request message for the `ListTraces` method. All fields are required +// unless specified. +type ListTracesRequest struct { + // ID of the Cloud project where the trace data is stored. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Type of data returned for traces in the list. Optional. Default is + // `MINIMAL`. + View ListTracesRequest_ViewType `protobuf:"varint,2,opt,name=view,enum=google.devtools.cloudtrace.v1.ListTracesRequest_ViewType" json:"view,omitempty"` + // Maximum number of traces to return. If not specified or <= 0, the + // implementation selects a reasonable value. The implementation may + // return fewer traces than the requested page size. Optional. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Token identifying the page of results to return. If provided, use the + // value of the `next_page_token` field from a previous request. Optional. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // End of the time interval (inclusive) during which the trace data was + // collected from the application. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Start of the time interval (inclusive) during which the trace data was + // collected from the application. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // An optional filter for the request. + Filter string `protobuf:"bytes,7,opt,name=filter" json:"filter,omitempty"` + // Field used to sort the returned traces. Optional. + // Can be one of the following: + // + // * `trace_id` + // * `name` (`name` field of root span in the trace) + // * `duration` (difference between `end_time` and `start_time` fields of + // the root span) + // * `start` (`start_time` field of the root span) + // + // Descending order can be specified by appending `desc` to the sort field + // (for example, `name desc`). + // + // Only one sort field is permitted. + OrderBy string `protobuf:"bytes,8,opt,name=order_by,json=orderBy" json:"order_by,omitempty"` +} + +func (m *ListTracesRequest) Reset() { *m = ListTracesRequest{} } +func (m *ListTracesRequest) String() string { return proto.CompactTextString(m) } +func (*ListTracesRequest) ProtoMessage() {} +func (*ListTracesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ListTracesRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListTracesRequest) GetView() ListTracesRequest_ViewType { + if m != nil { + return m.View + } + return ListTracesRequest_VIEW_TYPE_UNSPECIFIED +} + +func (m *ListTracesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTracesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListTracesRequest) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *ListTracesRequest) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *ListTracesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListTracesRequest) GetOrderBy() string { + if m != nil { + return m.OrderBy + } + return "" +} + +// The response message for the `ListTraces` method. +type ListTracesResponse struct { + // List of trace records returned. + Traces []*Trace `protobuf:"bytes,1,rep,name=traces" json:"traces,omitempty"` + // If defined, indicates that there are more traces that match the request + // and that this value should be passed to the next request to continue + // retrieving additional traces. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTracesResponse) Reset() { *m = ListTracesResponse{} } +func (m *ListTracesResponse) String() string { return proto.CompactTextString(m) } +func (*ListTracesResponse) ProtoMessage() {} +func (*ListTracesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ListTracesResponse) GetTraces() []*Trace { + if m != nil { + return m.Traces + } + return nil +} + +func (m *ListTracesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for the `GetTrace` method. +type GetTraceRequest struct { + // ID of the Cloud project where the trace data is stored. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // ID of the trace to return. + TraceId string `protobuf:"bytes,2,opt,name=trace_id,json=traceId" json:"trace_id,omitempty"` +} + +func (m *GetTraceRequest) Reset() { *m = GetTraceRequest{} } +func (m *GetTraceRequest) String() string { return proto.CompactTextString(m) } +func (*GetTraceRequest) ProtoMessage() {} +func (*GetTraceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *GetTraceRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetTraceRequest) GetTraceId() string { + if m != nil { + return m.TraceId + } + return "" +} + +// The request message for the `PatchTraces` method. +type PatchTracesRequest struct { + // ID of the Cloud project where the trace data is stored. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The body of the message. + Traces *Traces `protobuf:"bytes,2,opt,name=traces" json:"traces,omitempty"` +} + +func (m *PatchTracesRequest) Reset() { *m = PatchTracesRequest{} } +func (m *PatchTracesRequest) String() string { return proto.CompactTextString(m) } +func (*PatchTracesRequest) ProtoMessage() {} +func (*PatchTracesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *PatchTracesRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *PatchTracesRequest) GetTraces() *Traces { + if m != nil { + return m.Traces + } + return nil +} + +func init() { + proto.RegisterType((*Trace)(nil), "google.devtools.cloudtrace.v1.Trace") + proto.RegisterType((*Traces)(nil), "google.devtools.cloudtrace.v1.Traces") + proto.RegisterType((*TraceSpan)(nil), "google.devtools.cloudtrace.v1.TraceSpan") + proto.RegisterType((*ListTracesRequest)(nil), "google.devtools.cloudtrace.v1.ListTracesRequest") + proto.RegisterType((*ListTracesResponse)(nil), "google.devtools.cloudtrace.v1.ListTracesResponse") + proto.RegisterType((*GetTraceRequest)(nil), "google.devtools.cloudtrace.v1.GetTraceRequest") + proto.RegisterType((*PatchTracesRequest)(nil), "google.devtools.cloudtrace.v1.PatchTracesRequest") + proto.RegisterEnum("google.devtools.cloudtrace.v1.TraceSpan_SpanKind", TraceSpan_SpanKind_name, TraceSpan_SpanKind_value) + proto.RegisterEnum("google.devtools.cloudtrace.v1.ListTracesRequest_ViewType", ListTracesRequest_ViewType_name, ListTracesRequest_ViewType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for TraceService service + +type TraceServiceClient interface { + // Returns of a list of traces that match the specified filter conditions. + ListTraces(ctx context.Context, in *ListTracesRequest, opts ...grpc.CallOption) (*ListTracesResponse, error) + // Gets a single trace by its ID. + GetTrace(ctx context.Context, in *GetTraceRequest, opts ...grpc.CallOption) (*Trace, error) + // Sends new traces to Stackdriver Trace or updates existing traces. If the ID + // of a trace that you send matches that of an existing trace, any fields + // in the existing trace and its spans are overwritten by the provided values, + // and any new fields provided are merged with the existing trace data. If the + // ID does not match, a new trace is created. + PatchTraces(ctx context.Context, in *PatchTracesRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) +} + +type traceServiceClient struct { + cc *grpc.ClientConn +} + +func NewTraceServiceClient(cc *grpc.ClientConn) TraceServiceClient { + return &traceServiceClient{cc} +} + +func (c *traceServiceClient) ListTraces(ctx context.Context, in *ListTracesRequest, opts ...grpc.CallOption) (*ListTracesResponse, error) { + out := new(ListTracesResponse) + err := grpc.Invoke(ctx, "/google.devtools.cloudtrace.v1.TraceService/ListTraces", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *traceServiceClient) GetTrace(ctx context.Context, in *GetTraceRequest, opts ...grpc.CallOption) (*Trace, error) { + out := new(Trace) + err := grpc.Invoke(ctx, "/google.devtools.cloudtrace.v1.TraceService/GetTrace", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *traceServiceClient) PatchTraces(ctx context.Context, in *PatchTracesRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.devtools.cloudtrace.v1.TraceService/PatchTraces", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for TraceService service + +type TraceServiceServer interface { + // Returns of a list of traces that match the specified filter conditions. + ListTraces(context.Context, *ListTracesRequest) (*ListTracesResponse, error) + // Gets a single trace by its ID. + GetTrace(context.Context, *GetTraceRequest) (*Trace, error) + // Sends new traces to Stackdriver Trace or updates existing traces. If the ID + // of a trace that you send matches that of an existing trace, any fields + // in the existing trace and its spans are overwritten by the provided values, + // and any new fields provided are merged with the existing trace data. If the + // ID does not match, a new trace is created. + PatchTraces(context.Context, *PatchTracesRequest) (*google_protobuf1.Empty, error) +} + +func RegisterTraceServiceServer(s *grpc.Server, srv TraceServiceServer) { + s.RegisterService(&_TraceService_serviceDesc, srv) +} + +func _TraceService_ListTraces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTracesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TraceServiceServer).ListTraces(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudtrace.v1.TraceService/ListTraces", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TraceServiceServer).ListTraces(ctx, req.(*ListTracesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TraceService_GetTrace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTraceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TraceServiceServer).GetTrace(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudtrace.v1.TraceService/GetTrace", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TraceServiceServer).GetTrace(ctx, req.(*GetTraceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TraceService_PatchTraces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PatchTracesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TraceServiceServer).PatchTraces(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudtrace.v1.TraceService/PatchTraces", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TraceServiceServer).PatchTraces(ctx, req.(*PatchTracesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _TraceService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.cloudtrace.v1.TraceService", + HandlerType: (*TraceServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListTraces", + Handler: _TraceService_ListTraces_Handler, + }, + { + MethodName: "GetTrace", + Handler: _TraceService_GetTrace_Handler, + }, + { + MethodName: "PatchTraces", + Handler: _TraceService_PatchTraces_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/cloudtrace/v1/trace.proto", +} + +func init() { proto.RegisterFile("google/devtools/cloudtrace/v1/trace.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 886 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x6e, 0x1b, 0x45, + 0x14, 0x66, 0xed, 0x78, 0x6d, 0x1f, 0x87, 0xd4, 0x8c, 0x68, 0x71, 0x5d, 0x2a, 0xc2, 0xaa, 0x20, + 0x03, 0x62, 0xb7, 0x76, 0x41, 0x22, 0xe5, 0x47, 0x6a, 0xdc, 0x6d, 0xb4, 0x8a, 0xe3, 0xac, 0xd6, + 0x26, 0x08, 0x6e, 0x56, 0x13, 0xef, 0xd4, 0x2c, 0x59, 0xcf, 0x2c, 0x3b, 0x13, 0x17, 0xa7, 0xea, + 0x05, 0x5c, 0x72, 0x09, 0xe2, 0x8a, 0x37, 0xe0, 0x92, 0x37, 0x41, 0xbc, 0x02, 0x12, 0xaf, 0x81, + 0x66, 0x66, 0xb7, 0x89, 0x12, 0x35, 0x76, 0xe8, 0x4d, 0x34, 0xe7, 0xcc, 0xf9, 0xfd, 0xbe, 0x6f, + 0xb2, 0x86, 0xf7, 0xa6, 0x8c, 0x4d, 0x13, 0xe2, 0x44, 0x64, 0x2e, 0x18, 0x4b, 0xb8, 0x33, 0x49, + 0xd8, 0x71, 0x24, 0x32, 0x3c, 0x21, 0xce, 0xbc, 0xeb, 0xa8, 0x83, 0x9d, 0x66, 0x4c, 0x30, 0x74, + 0x5b, 0x87, 0xda, 0x45, 0xa8, 0x7d, 0x1a, 0x6a, 0xcf, 0xbb, 0xed, 0x37, 0xf3, 0x4a, 0x38, 0x8d, + 0x1d, 0x4c, 0x29, 0x13, 0x58, 0xc4, 0x8c, 0x72, 0x9d, 0xdc, 0xbe, 0x95, 0xdf, 0x2a, 0xeb, 0xf0, + 0xf8, 0xb1, 0x43, 0x66, 0xa9, 0x58, 0xe4, 0x97, 0x6f, 0x9d, 0xbf, 0x14, 0xf1, 0x8c, 0x70, 0x81, + 0x67, 0xa9, 0x0e, 0xb0, 0x7e, 0x34, 0xa0, 0x32, 0x96, 0x8d, 0xd0, 0x6d, 0x80, 0x34, 0x63, 0xdf, + 0x91, 0x89, 0x08, 0xe3, 0xa8, 0x65, 0x6c, 0x1a, 0x9d, 0x7a, 0x50, 0xcf, 0x3d, 0x5e, 0x84, 0x6e, + 0x42, 0x4d, 0x0d, 0x24, 0x2f, 0x4b, 0xea, 0xb2, 0xaa, 0x6c, 0x2f, 0x42, 0x5f, 0x40, 0x85, 0xa7, + 0x98, 0xf2, 0x56, 0x79, 0xb3, 0xdc, 0x69, 0xf4, 0x3a, 0xf6, 0xa5, 0xeb, 0xd8, 0xaa, 0xdd, 0x28, + 0xc5, 0x34, 0xd0, 0x69, 0xd6, 0x23, 0x30, 0x95, 0x8f, 0xa3, 0xcf, 0xc0, 0x54, 0x61, 0xbc, 0x65, + 0xa8, 0x52, 0x77, 0x56, 0x29, 0x15, 0xe4, 0x39, 0xd6, 0xbf, 0x65, 0xa8, 0x3f, 0x2f, 0x8e, 0xde, + 0x80, 0xaa, 0x2c, 0x5f, 0x2c, 0x63, 0x06, 0xa6, 0x34, 0xbd, 0x08, 0xb9, 0xb0, 0x76, 0x14, 0x53, + 0xbd, 0xc5, 0x46, 0xaf, 0xbb, 0xea, 0xb4, 0xb6, 0xfc, 0xb3, 0x1b, 0xd3, 0x28, 0x50, 0xe9, 0x08, + 0xc1, 0x1a, 0xc5, 0x33, 0xd2, 0x2a, 0x2b, 0x30, 0xd4, 0x19, 0x6d, 0x01, 0x70, 0x81, 0x33, 0x11, + 0x4a, 0x98, 0x5b, 0x6b, 0x9b, 0x46, 0xa7, 0xd1, 0x6b, 0x17, 0x0d, 0x0a, 0x0e, 0xec, 0x71, 0xc1, + 0x41, 0x50, 0x57, 0xd1, 0xd2, 0x46, 0x1f, 0x43, 0x8d, 0xd0, 0x48, 0x27, 0x56, 0x96, 0x26, 0x56, + 0x09, 0x8d, 0x54, 0xda, 0x1d, 0xd8, 0x48, 0x71, 0x46, 0xa8, 0x08, 0x8b, 0x65, 0x4d, 0xb5, 0xec, + 0xba, 0xf6, 0x8e, 0xf4, 0xca, 0x03, 0x30, 0x13, 0x7c, 0x48, 0x12, 0xde, 0xaa, 0x2a, 0x5c, 0x3f, + 0x5a, 0x79, 0xe9, 0x81, 0x4a, 0x73, 0xa9, 0xc8, 0x16, 0x41, 0x5e, 0xa3, 0xbd, 0x05, 0x8d, 0x33, + 0x6e, 0xd4, 0x84, 0xf2, 0x11, 0x59, 0xe4, 0x8a, 0x91, 0x47, 0xf4, 0x3a, 0x54, 0xe6, 0x38, 0x39, + 0x26, 0xb9, 0x50, 0xb4, 0x71, 0xbf, 0xf4, 0x89, 0x61, 0xb9, 0x50, 0x2b, 0x60, 0x44, 0x37, 0xe1, + 0xfa, 0xc8, 0x7f, 0x30, 0x0c, 0x77, 0xbd, 0xe1, 0xc3, 0xf0, 0xcb, 0xe1, 0xc8, 0x77, 0xfb, 0xde, + 0x23, 0xcf, 0x7d, 0xd8, 0x7c, 0x05, 0x6d, 0x00, 0x04, 0x7e, 0x3f, 0x1c, 0xb9, 0xc1, 0x81, 0x1b, + 0x34, 0x8d, 0xc2, 0xee, 0x0f, 0x3c, 0x77, 0x38, 0x6e, 0x96, 0xac, 0x3f, 0xcb, 0xf0, 0xda, 0x20, + 0xe6, 0x42, 0xcb, 0x26, 0x20, 0xdf, 0x1f, 0x13, 0x2e, 0x96, 0x29, 0x78, 0x0f, 0xd6, 0xe6, 0x31, + 0x79, 0x92, 0xf3, 0xbe, 0xb5, 0x04, 0x82, 0x0b, 0xe5, 0xed, 0x83, 0x98, 0x3c, 0x19, 0x2f, 0x52, + 0x12, 0xa8, 0x32, 0xe8, 0x16, 0xd4, 0x53, 0x3c, 0x25, 0x21, 0x8f, 0x4f, 0xb4, 0x08, 0x2a, 0x41, + 0x4d, 0x3a, 0x46, 0xf1, 0x89, 0x7e, 0x4c, 0xf2, 0x52, 0xb0, 0x23, 0x42, 0x95, 0x10, 0xe4, 0x28, + 0x78, 0x4a, 0xc6, 0xd2, 0x71, 0x4e, 0x27, 0x95, 0xff, 0xab, 0x13, 0x73, 0x75, 0x9d, 0xdc, 0x00, + 0xf3, 0x71, 0x9c, 0x08, 0x92, 0xb5, 0xaa, 0x6a, 0x98, 0xdc, 0x92, 0xcf, 0x9a, 0x65, 0x11, 0xc9, + 0xc2, 0xc3, 0x45, 0xab, 0xa6, 0x9f, 0xb5, 0xb2, 0xb7, 0x17, 0xd6, 0x10, 0x6a, 0xc5, 0xca, 0x92, + 0xab, 0x03, 0xcf, 0xfd, 0x2a, 0x1c, 0x7f, 0xed, 0xbb, 0xe7, 0xb8, 0x6a, 0x40, 0x75, 0xcf, 0x1b, + 0x7a, 0x7b, 0x0f, 0x06, 0x4d, 0x03, 0xad, 0x43, 0x2d, 0xd8, 0xdf, 0x1f, 0x4b, 0x5e, 0x9b, 0x25, + 0x69, 0xf5, 0xf7, 0xf7, 0xfc, 0x81, 0x3b, 0x76, 0x9b, 0x65, 0xeb, 0x04, 0xd0, 0x59, 0x50, 0x79, + 0xca, 0x28, 0x27, 0x2f, 0xf7, 0xe4, 0xd1, 0xbb, 0x70, 0x8d, 0x92, 0x1f, 0x44, 0x78, 0x06, 0x6c, + 0xad, 0xb9, 0x57, 0xa5, 0xdb, 0x2f, 0x00, 0xb7, 0x76, 0xe1, 0xda, 0x0e, 0xd1, 0xad, 0x57, 0x54, + 0xcb, 0x8b, 0xff, 0xdf, 0x59, 0x19, 0x20, 0x1f, 0x8b, 0xc9, 0xb7, 0x57, 0x52, 0xdf, 0xe7, 0xcf, + 0xf7, 0x2c, 0x29, 0xd6, 0xde, 0x59, 0x65, 0x4f, 0x5e, 0x2c, 0xda, 0xfb, 0xab, 0x0c, 0xeb, 0xfa, + 0x55, 0x92, 0x6c, 0x1e, 0x4f, 0x08, 0xfa, 0xdd, 0x00, 0x38, 0x85, 0x13, 0xdd, 0xbd, 0xaa, 0x9c, + 0xdb, 0xdd, 0x2b, 0x64, 0x68, 0xae, 0xac, 0xce, 0x4f, 0x7f, 0xff, 0xf3, 0x6b, 0xc9, 0x42, 0x9b, + 0xf2, 0x03, 0x96, 0xaf, 0xc6, 0x9d, 0xa7, 0xa7, 0x6b, 0x3f, 0x73, 0x72, 0x5e, 0x7e, 0x33, 0xa0, + 0x56, 0x00, 0x8e, 0xec, 0x25, 0x9d, 0xce, 0x31, 0xd3, 0x5e, 0x49, 0x02, 0xd6, 0x3d, 0x35, 0xcc, + 0x87, 0xe8, 0x83, 0x65, 0xc3, 0x38, 0x4f, 0x0b, 0x22, 0x9f, 0xa1, 0x9f, 0x0d, 0x68, 0x9c, 0xe1, + 0x0e, 0x2d, 0x03, 0xe1, 0x22, 0xcf, 0xed, 0x1b, 0x17, 0x9e, 0x9b, 0x2b, 0x3f, 0xb8, 0xd6, 0x5d, + 0x35, 0xcf, 0xfb, 0xbd, 0xa5, 0xe0, 0xdc, 0xcf, 0x39, 0xdd, 0xfe, 0xc5, 0x80, 0xb7, 0x27, 0x6c, + 0x76, 0xf9, 0x08, 0xdb, 0xa0, 0xda, 0xfb, 0xb2, 0x99, 0x6f, 0x7c, 0xb3, 0x93, 0x07, 0x4f, 0x59, + 0x82, 0xe9, 0xd4, 0x66, 0xd9, 0xd4, 0x99, 0x12, 0xaa, 0x46, 0x71, 0xf4, 0x15, 0x4e, 0x63, 0xfe, + 0x82, 0x1f, 0x1d, 0x9f, 0x9e, 0x5a, 0x7f, 0x94, 0xae, 0xef, 0xe8, 0x4a, 0x7d, 0xe9, 0xd3, 0x98, + 0xda, 0x07, 0xdd, 0x43, 0x53, 0xd5, 0xba, 0xf7, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0c, 0xd5, + 0x26, 0xa6, 0xbf, 0x08, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/source/v1/source_context.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/source/v1/source_context.pb.go new file mode 100644 index 0000000..38b77d4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/source/v1/source_context.pb.go @@ -0,0 +1,945 @@ +// Code generated by protoc-gen-go. +// source: google/devtools/source/v1/source_context.proto +// DO NOT EDIT! + +/* +Package source is a generated protocol buffer package. + +It is generated from these files: + google/devtools/source/v1/source_context.proto + +It has these top-level messages: + SourceContext + ExtendedSourceContext + AliasContext + CloudRepoSourceContext + CloudWorkspaceSourceContext + GerritSourceContext + GitSourceContext + RepoId + ProjectRepoId + CloudWorkspaceId +*/ +package source + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The type of an Alias. +type AliasContext_Kind int32 + +const ( + // Do not use. + AliasContext_ANY AliasContext_Kind = 0 + // Git tag + AliasContext_FIXED AliasContext_Kind = 1 + // Git branch + AliasContext_MOVABLE AliasContext_Kind = 2 + // OTHER is used to specify non-standard aliases, those not of the kinds + // above. For example, if a Git repo has a ref named "refs/foo/bar", it + // is considered to be of kind OTHER. + AliasContext_OTHER AliasContext_Kind = 4 +) + +var AliasContext_Kind_name = map[int32]string{ + 0: "ANY", + 1: "FIXED", + 2: "MOVABLE", + 4: "OTHER", +} +var AliasContext_Kind_value = map[string]int32{ + "ANY": 0, + "FIXED": 1, + "MOVABLE": 2, + "OTHER": 4, +} + +func (x AliasContext_Kind) String() string { + return proto.EnumName(AliasContext_Kind_name, int32(x)) +} +func (AliasContext_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +// A SourceContext is a reference to a tree of files. A SourceContext together +// with a path point to a unique revision of a single file or directory. +type SourceContext struct { + // A SourceContext can refer any one of the following types of repositories. + // + // Types that are valid to be assigned to Context: + // *SourceContext_CloudRepo + // *SourceContext_CloudWorkspace + // *SourceContext_Gerrit + // *SourceContext_Git + Context isSourceContext_Context `protobuf_oneof:"context"` +} + +func (m *SourceContext) Reset() { *m = SourceContext{} } +func (m *SourceContext) String() string { return proto.CompactTextString(m) } +func (*SourceContext) ProtoMessage() {} +func (*SourceContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isSourceContext_Context interface { + isSourceContext_Context() +} + +type SourceContext_CloudRepo struct { + CloudRepo *CloudRepoSourceContext `protobuf:"bytes,1,opt,name=cloud_repo,json=cloudRepo,oneof"` +} +type SourceContext_CloudWorkspace struct { + CloudWorkspace *CloudWorkspaceSourceContext `protobuf:"bytes,2,opt,name=cloud_workspace,json=cloudWorkspace,oneof"` +} +type SourceContext_Gerrit struct { + Gerrit *GerritSourceContext `protobuf:"bytes,3,opt,name=gerrit,oneof"` +} +type SourceContext_Git struct { + Git *GitSourceContext `protobuf:"bytes,6,opt,name=git,oneof"` +} + +func (*SourceContext_CloudRepo) isSourceContext_Context() {} +func (*SourceContext_CloudWorkspace) isSourceContext_Context() {} +func (*SourceContext_Gerrit) isSourceContext_Context() {} +func (*SourceContext_Git) isSourceContext_Context() {} + +func (m *SourceContext) GetContext() isSourceContext_Context { + if m != nil { + return m.Context + } + return nil +} + +func (m *SourceContext) GetCloudRepo() *CloudRepoSourceContext { + if x, ok := m.GetContext().(*SourceContext_CloudRepo); ok { + return x.CloudRepo + } + return nil +} + +func (m *SourceContext) GetCloudWorkspace() *CloudWorkspaceSourceContext { + if x, ok := m.GetContext().(*SourceContext_CloudWorkspace); ok { + return x.CloudWorkspace + } + return nil +} + +func (m *SourceContext) GetGerrit() *GerritSourceContext { + if x, ok := m.GetContext().(*SourceContext_Gerrit); ok { + return x.Gerrit + } + return nil +} + +func (m *SourceContext) GetGit() *GitSourceContext { + if x, ok := m.GetContext().(*SourceContext_Git); ok { + return x.Git + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SourceContext) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SourceContext_OneofMarshaler, _SourceContext_OneofUnmarshaler, _SourceContext_OneofSizer, []interface{}{ + (*SourceContext_CloudRepo)(nil), + (*SourceContext_CloudWorkspace)(nil), + (*SourceContext_Gerrit)(nil), + (*SourceContext_Git)(nil), + } +} + +func _SourceContext_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SourceContext) + // context + switch x := m.Context.(type) { + case *SourceContext_CloudRepo: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CloudRepo); err != nil { + return err + } + case *SourceContext_CloudWorkspace: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CloudWorkspace); err != nil { + return err + } + case *SourceContext_Gerrit: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Gerrit); err != nil { + return err + } + case *SourceContext_Git: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Git); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("SourceContext.Context has unexpected type %T", x) + } + return nil +} + +func _SourceContext_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SourceContext) + switch tag { + case 1: // context.cloud_repo + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CloudRepoSourceContext) + err := b.DecodeMessage(msg) + m.Context = &SourceContext_CloudRepo{msg} + return true, err + case 2: // context.cloud_workspace + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CloudWorkspaceSourceContext) + err := b.DecodeMessage(msg) + m.Context = &SourceContext_CloudWorkspace{msg} + return true, err + case 3: // context.gerrit + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GerritSourceContext) + err := b.DecodeMessage(msg) + m.Context = &SourceContext_Gerrit{msg} + return true, err + case 6: // context.git + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GitSourceContext) + err := b.DecodeMessage(msg) + m.Context = &SourceContext_Git{msg} + return true, err + default: + return false, nil + } +} + +func _SourceContext_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SourceContext) + // context + switch x := m.Context.(type) { + case *SourceContext_CloudRepo: + s := proto.Size(x.CloudRepo) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *SourceContext_CloudWorkspace: + s := proto.Size(x.CloudWorkspace) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *SourceContext_Gerrit: + s := proto.Size(x.Gerrit) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *SourceContext_Git: + s := proto.Size(x.Git) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// An ExtendedSourceContext is a SourceContext combined with additional +// details describing the context. +type ExtendedSourceContext struct { + // Any source context. + Context *SourceContext `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` + // Labels with user defined metadata. + Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ExtendedSourceContext) Reset() { *m = ExtendedSourceContext{} } +func (m *ExtendedSourceContext) String() string { return proto.CompactTextString(m) } +func (*ExtendedSourceContext) ProtoMessage() {} +func (*ExtendedSourceContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ExtendedSourceContext) GetContext() *SourceContext { + if m != nil { + return m.Context + } + return nil +} + +func (m *ExtendedSourceContext) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// An alias to a repo revision. +type AliasContext struct { + // The alias kind. + Kind AliasContext_Kind `protobuf:"varint,1,opt,name=kind,enum=google.devtools.source.v1.AliasContext_Kind" json:"kind,omitempty"` + // The alias name. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` +} + +func (m *AliasContext) Reset() { *m = AliasContext{} } +func (m *AliasContext) String() string { return proto.CompactTextString(m) } +func (*AliasContext) ProtoMessage() {} +func (*AliasContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *AliasContext) GetKind() AliasContext_Kind { + if m != nil { + return m.Kind + } + return AliasContext_ANY +} + +func (m *AliasContext) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A CloudRepoSourceContext denotes a particular revision in a cloud +// repo (a repo hosted by the Google Cloud Platform). +type CloudRepoSourceContext struct { + // The ID of the repo. + RepoId *RepoId `protobuf:"bytes,1,opt,name=repo_id,json=repoId" json:"repo_id,omitempty"` + // A revision in a cloud repository can be identified by either its revision + // ID or its Alias. + // + // Types that are valid to be assigned to Revision: + // *CloudRepoSourceContext_RevisionId + // *CloudRepoSourceContext_AliasName + // *CloudRepoSourceContext_AliasContext + Revision isCloudRepoSourceContext_Revision `protobuf_oneof:"revision"` +} + +func (m *CloudRepoSourceContext) Reset() { *m = CloudRepoSourceContext{} } +func (m *CloudRepoSourceContext) String() string { return proto.CompactTextString(m) } +func (*CloudRepoSourceContext) ProtoMessage() {} +func (*CloudRepoSourceContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +type isCloudRepoSourceContext_Revision interface { + isCloudRepoSourceContext_Revision() +} + +type CloudRepoSourceContext_RevisionId struct { + RevisionId string `protobuf:"bytes,2,opt,name=revision_id,json=revisionId,oneof"` +} +type CloudRepoSourceContext_AliasName struct { + AliasName string `protobuf:"bytes,3,opt,name=alias_name,json=aliasName,oneof"` +} +type CloudRepoSourceContext_AliasContext struct { + AliasContext *AliasContext `protobuf:"bytes,4,opt,name=alias_context,json=aliasContext,oneof"` +} + +func (*CloudRepoSourceContext_RevisionId) isCloudRepoSourceContext_Revision() {} +func (*CloudRepoSourceContext_AliasName) isCloudRepoSourceContext_Revision() {} +func (*CloudRepoSourceContext_AliasContext) isCloudRepoSourceContext_Revision() {} + +func (m *CloudRepoSourceContext) GetRevision() isCloudRepoSourceContext_Revision { + if m != nil { + return m.Revision + } + return nil +} + +func (m *CloudRepoSourceContext) GetRepoId() *RepoId { + if m != nil { + return m.RepoId + } + return nil +} + +func (m *CloudRepoSourceContext) GetRevisionId() string { + if x, ok := m.GetRevision().(*CloudRepoSourceContext_RevisionId); ok { + return x.RevisionId + } + return "" +} + +func (m *CloudRepoSourceContext) GetAliasName() string { + if x, ok := m.GetRevision().(*CloudRepoSourceContext_AliasName); ok { + return x.AliasName + } + return "" +} + +func (m *CloudRepoSourceContext) GetAliasContext() *AliasContext { + if x, ok := m.GetRevision().(*CloudRepoSourceContext_AliasContext); ok { + return x.AliasContext + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CloudRepoSourceContext) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CloudRepoSourceContext_OneofMarshaler, _CloudRepoSourceContext_OneofUnmarshaler, _CloudRepoSourceContext_OneofSizer, []interface{}{ + (*CloudRepoSourceContext_RevisionId)(nil), + (*CloudRepoSourceContext_AliasName)(nil), + (*CloudRepoSourceContext_AliasContext)(nil), + } +} + +func _CloudRepoSourceContext_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CloudRepoSourceContext) + // revision + switch x := m.Revision.(type) { + case *CloudRepoSourceContext_RevisionId: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.RevisionId) + case *CloudRepoSourceContext_AliasName: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.AliasName) + case *CloudRepoSourceContext_AliasContext: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AliasContext); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CloudRepoSourceContext.Revision has unexpected type %T", x) + } + return nil +} + +func _CloudRepoSourceContext_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CloudRepoSourceContext) + switch tag { + case 2: // revision.revision_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &CloudRepoSourceContext_RevisionId{x} + return true, err + case 3: // revision.alias_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &CloudRepoSourceContext_AliasName{x} + return true, err + case 4: // revision.alias_context + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AliasContext) + err := b.DecodeMessage(msg) + m.Revision = &CloudRepoSourceContext_AliasContext{msg} + return true, err + default: + return false, nil + } +} + +func _CloudRepoSourceContext_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CloudRepoSourceContext) + // revision + switch x := m.Revision.(type) { + case *CloudRepoSourceContext_RevisionId: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RevisionId))) + n += len(x.RevisionId) + case *CloudRepoSourceContext_AliasName: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AliasName))) + n += len(x.AliasName) + case *CloudRepoSourceContext_AliasContext: + s := proto.Size(x.AliasContext) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A CloudWorkspaceSourceContext denotes a workspace at a particular snapshot. +type CloudWorkspaceSourceContext struct { + // The ID of the workspace. + WorkspaceId *CloudWorkspaceId `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId" json:"workspace_id,omitempty"` + // The ID of the snapshot. + // An empty snapshot_id refers to the most recent snapshot. + SnapshotId string `protobuf:"bytes,2,opt,name=snapshot_id,json=snapshotId" json:"snapshot_id,omitempty"` +} + +func (m *CloudWorkspaceSourceContext) Reset() { *m = CloudWorkspaceSourceContext{} } +func (m *CloudWorkspaceSourceContext) String() string { return proto.CompactTextString(m) } +func (*CloudWorkspaceSourceContext) ProtoMessage() {} +func (*CloudWorkspaceSourceContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *CloudWorkspaceSourceContext) GetWorkspaceId() *CloudWorkspaceId { + if m != nil { + return m.WorkspaceId + } + return nil +} + +func (m *CloudWorkspaceSourceContext) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +// A SourceContext referring to a Gerrit project. +type GerritSourceContext struct { + // The URI of a running Gerrit instance. + HostUri string `protobuf:"bytes,1,opt,name=host_uri,json=hostUri" json:"host_uri,omitempty"` + // The full project name within the host. Projects may be nested, so + // "project/subproject" is a valid project name. + // The "repo name" is hostURI/project. + GerritProject string `protobuf:"bytes,2,opt,name=gerrit_project,json=gerritProject" json:"gerrit_project,omitempty"` + // A revision in a Gerrit project can be identified by either its revision ID + // or its alias. + // + // Types that are valid to be assigned to Revision: + // *GerritSourceContext_RevisionId + // *GerritSourceContext_AliasName + // *GerritSourceContext_AliasContext + Revision isGerritSourceContext_Revision `protobuf_oneof:"revision"` +} + +func (m *GerritSourceContext) Reset() { *m = GerritSourceContext{} } +func (m *GerritSourceContext) String() string { return proto.CompactTextString(m) } +func (*GerritSourceContext) ProtoMessage() {} +func (*GerritSourceContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +type isGerritSourceContext_Revision interface { + isGerritSourceContext_Revision() +} + +type GerritSourceContext_RevisionId struct { + RevisionId string `protobuf:"bytes,3,opt,name=revision_id,json=revisionId,oneof"` +} +type GerritSourceContext_AliasName struct { + AliasName string `protobuf:"bytes,4,opt,name=alias_name,json=aliasName,oneof"` +} +type GerritSourceContext_AliasContext struct { + AliasContext *AliasContext `protobuf:"bytes,5,opt,name=alias_context,json=aliasContext,oneof"` +} + +func (*GerritSourceContext_RevisionId) isGerritSourceContext_Revision() {} +func (*GerritSourceContext_AliasName) isGerritSourceContext_Revision() {} +func (*GerritSourceContext_AliasContext) isGerritSourceContext_Revision() {} + +func (m *GerritSourceContext) GetRevision() isGerritSourceContext_Revision { + if m != nil { + return m.Revision + } + return nil +} + +func (m *GerritSourceContext) GetHostUri() string { + if m != nil { + return m.HostUri + } + return "" +} + +func (m *GerritSourceContext) GetGerritProject() string { + if m != nil { + return m.GerritProject + } + return "" +} + +func (m *GerritSourceContext) GetRevisionId() string { + if x, ok := m.GetRevision().(*GerritSourceContext_RevisionId); ok { + return x.RevisionId + } + return "" +} + +func (m *GerritSourceContext) GetAliasName() string { + if x, ok := m.GetRevision().(*GerritSourceContext_AliasName); ok { + return x.AliasName + } + return "" +} + +func (m *GerritSourceContext) GetAliasContext() *AliasContext { + if x, ok := m.GetRevision().(*GerritSourceContext_AliasContext); ok { + return x.AliasContext + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*GerritSourceContext) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _GerritSourceContext_OneofMarshaler, _GerritSourceContext_OneofUnmarshaler, _GerritSourceContext_OneofSizer, []interface{}{ + (*GerritSourceContext_RevisionId)(nil), + (*GerritSourceContext_AliasName)(nil), + (*GerritSourceContext_AliasContext)(nil), + } +} + +func _GerritSourceContext_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*GerritSourceContext) + // revision + switch x := m.Revision.(type) { + case *GerritSourceContext_RevisionId: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.RevisionId) + case *GerritSourceContext_AliasName: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.AliasName) + case *GerritSourceContext_AliasContext: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AliasContext); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("GerritSourceContext.Revision has unexpected type %T", x) + } + return nil +} + +func _GerritSourceContext_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*GerritSourceContext) + switch tag { + case 3: // revision.revision_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &GerritSourceContext_RevisionId{x} + return true, err + case 4: // revision.alias_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &GerritSourceContext_AliasName{x} + return true, err + case 5: // revision.alias_context + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AliasContext) + err := b.DecodeMessage(msg) + m.Revision = &GerritSourceContext_AliasContext{msg} + return true, err + default: + return false, nil + } +} + +func _GerritSourceContext_OneofSizer(msg proto.Message) (n int) { + m := msg.(*GerritSourceContext) + // revision + switch x := m.Revision.(type) { + case *GerritSourceContext_RevisionId: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RevisionId))) + n += len(x.RevisionId) + case *GerritSourceContext_AliasName: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AliasName))) + n += len(x.AliasName) + case *GerritSourceContext_AliasContext: + s := proto.Size(x.AliasContext) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A GitSourceContext denotes a particular revision in a third party Git +// repository (e.g. GitHub). +type GitSourceContext struct { + // Git repository URL. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // Git commit hash. + // required. + RevisionId string `protobuf:"bytes,2,opt,name=revision_id,json=revisionId" json:"revision_id,omitempty"` +} + +func (m *GitSourceContext) Reset() { *m = GitSourceContext{} } +func (m *GitSourceContext) String() string { return proto.CompactTextString(m) } +func (*GitSourceContext) ProtoMessage() {} +func (*GitSourceContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *GitSourceContext) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *GitSourceContext) GetRevisionId() string { + if m != nil { + return m.RevisionId + } + return "" +} + +// A unique identifier for a cloud repo. +type RepoId struct { + // A cloud repository can be identified by either its project ID and + // repository name combination, or its globally unique identifier. + // + // Types that are valid to be assigned to Id: + // *RepoId_ProjectRepoId + // *RepoId_Uid + Id isRepoId_Id `protobuf_oneof:"id"` +} + +func (m *RepoId) Reset() { *m = RepoId{} } +func (m *RepoId) String() string { return proto.CompactTextString(m) } +func (*RepoId) ProtoMessage() {} +func (*RepoId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type isRepoId_Id interface { + isRepoId_Id() +} + +type RepoId_ProjectRepoId struct { + ProjectRepoId *ProjectRepoId `protobuf:"bytes,1,opt,name=project_repo_id,json=projectRepoId,oneof"` +} +type RepoId_Uid struct { + Uid string `protobuf:"bytes,2,opt,name=uid,oneof"` +} + +func (*RepoId_ProjectRepoId) isRepoId_Id() {} +func (*RepoId_Uid) isRepoId_Id() {} + +func (m *RepoId) GetId() isRepoId_Id { + if m != nil { + return m.Id + } + return nil +} + +func (m *RepoId) GetProjectRepoId() *ProjectRepoId { + if x, ok := m.GetId().(*RepoId_ProjectRepoId); ok { + return x.ProjectRepoId + } + return nil +} + +func (m *RepoId) GetUid() string { + if x, ok := m.GetId().(*RepoId_Uid); ok { + return x.Uid + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RepoId) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RepoId_OneofMarshaler, _RepoId_OneofUnmarshaler, _RepoId_OneofSizer, []interface{}{ + (*RepoId_ProjectRepoId)(nil), + (*RepoId_Uid)(nil), + } +} + +func _RepoId_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RepoId) + // id + switch x := m.Id.(type) { + case *RepoId_ProjectRepoId: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ProjectRepoId); err != nil { + return err + } + case *RepoId_Uid: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Uid) + case nil: + default: + return fmt.Errorf("RepoId.Id has unexpected type %T", x) + } + return nil +} + +func _RepoId_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RepoId) + switch tag { + case 1: // id.project_repo_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ProjectRepoId) + err := b.DecodeMessage(msg) + m.Id = &RepoId_ProjectRepoId{msg} + return true, err + case 2: // id.uid + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Id = &RepoId_Uid{x} + return true, err + default: + return false, nil + } +} + +func _RepoId_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RepoId) + // id + switch x := m.Id.(type) { + case *RepoId_ProjectRepoId: + s := proto.Size(x.ProjectRepoId) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RepoId_Uid: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Uid))) + n += len(x.Uid) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Selects a repo using a Google Cloud Platform project ID +// (e.g. winged-cargo-31) and a repo name within that project. +type ProjectRepoId struct { + // The ID of the project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the repo. Leave empty for the default repo. + RepoName string `protobuf:"bytes,2,opt,name=repo_name,json=repoName" json:"repo_name,omitempty"` +} + +func (m *ProjectRepoId) Reset() { *m = ProjectRepoId{} } +func (m *ProjectRepoId) String() string { return proto.CompactTextString(m) } +func (*ProjectRepoId) ProtoMessage() {} +func (*ProjectRepoId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ProjectRepoId) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ProjectRepoId) GetRepoName() string { + if m != nil { + return m.RepoName + } + return "" +} + +// A CloudWorkspaceId is a unique identifier for a cloud workspace. +// A cloud workspace is a place associated with a repo where modified files +// can be stored before they are committed. +type CloudWorkspaceId struct { + // The ID of the repo containing the workspace. + RepoId *RepoId `protobuf:"bytes,1,opt,name=repo_id,json=repoId" json:"repo_id,omitempty"` + // The unique name of the workspace within the repo. This is the name + // chosen by the client in the Source API's CreateWorkspace method. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` +} + +func (m *CloudWorkspaceId) Reset() { *m = CloudWorkspaceId{} } +func (m *CloudWorkspaceId) String() string { return proto.CompactTextString(m) } +func (*CloudWorkspaceId) ProtoMessage() {} +func (*CloudWorkspaceId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *CloudWorkspaceId) GetRepoId() *RepoId { + if m != nil { + return m.RepoId + } + return nil +} + +func (m *CloudWorkspaceId) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*SourceContext)(nil), "google.devtools.source.v1.SourceContext") + proto.RegisterType((*ExtendedSourceContext)(nil), "google.devtools.source.v1.ExtendedSourceContext") + proto.RegisterType((*AliasContext)(nil), "google.devtools.source.v1.AliasContext") + proto.RegisterType((*CloudRepoSourceContext)(nil), "google.devtools.source.v1.CloudRepoSourceContext") + proto.RegisterType((*CloudWorkspaceSourceContext)(nil), "google.devtools.source.v1.CloudWorkspaceSourceContext") + proto.RegisterType((*GerritSourceContext)(nil), "google.devtools.source.v1.GerritSourceContext") + proto.RegisterType((*GitSourceContext)(nil), "google.devtools.source.v1.GitSourceContext") + proto.RegisterType((*RepoId)(nil), "google.devtools.source.v1.RepoId") + proto.RegisterType((*ProjectRepoId)(nil), "google.devtools.source.v1.ProjectRepoId") + proto.RegisterType((*CloudWorkspaceId)(nil), "google.devtools.source.v1.CloudWorkspaceId") + proto.RegisterEnum("google.devtools.source.v1.AliasContext_Kind", AliasContext_Kind_name, AliasContext_Kind_value) +} + +func init() { proto.RegisterFile("google/devtools/source/v1/source_context.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 758 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcb, 0x4e, 0xdb, 0x4c, + 0x14, 0x8e, 0xe3, 0x90, 0xe0, 0x13, 0x02, 0xd1, 0xfc, 0x17, 0x05, 0x28, 0x02, 0x2c, 0x55, 0x45, + 0xa2, 0x72, 0x44, 0x2a, 0x55, 0x2d, 0xad, 0x44, 0x09, 0x4d, 0x9b, 0x08, 0x1a, 0xd0, 0x94, 0x5e, + 0x37, 0x91, 0xb1, 0x47, 0xc6, 0xc5, 0x78, 0xac, 0xb1, 0x13, 0xe0, 0x25, 0xba, 0xee, 0xc3, 0xf5, + 0x11, 0xba, 0xac, 0xd4, 0x6d, 0x35, 0x17, 0x43, 0x12, 0x82, 0x41, 0x6a, 0x57, 0x9e, 0x39, 0xfe, + 0xbe, 0xef, 0x9c, 0x39, 0x97, 0x19, 0xb0, 0x3c, 0x4a, 0xbd, 0x80, 0xd4, 0x5d, 0x32, 0x48, 0x28, + 0x0d, 0xe2, 0x7a, 0x4c, 0xfb, 0xcc, 0x21, 0xf5, 0xc1, 0x86, 0x5a, 0xf5, 0x1c, 0x1a, 0x26, 0xe4, + 0x3c, 0xb1, 0x22, 0x46, 0x13, 0x8a, 0xe6, 0x25, 0xde, 0x4a, 0xf1, 0x96, 0x44, 0x59, 0x83, 0x8d, + 0x85, 0x7b, 0x4a, 0xca, 0x8e, 0xfc, 0xba, 0x1d, 0x86, 0x34, 0xb1, 0x13, 0x9f, 0x86, 0xb1, 0x24, + 0x9a, 0xdf, 0xf3, 0x50, 0x79, 0x2b, 0xb0, 0x3b, 0x52, 0x10, 0x61, 0x00, 0x27, 0xa0, 0x7d, 0xb7, + 0xc7, 0x48, 0x44, 0x6b, 0xda, 0x8a, 0xb6, 0x56, 0x6e, 0x6c, 0x58, 0x37, 0xea, 0x5b, 0x3b, 0x1c, + 0x8c, 0x49, 0x44, 0x47, 0x64, 0xda, 0x39, 0x6c, 0x38, 0xe9, 0x1f, 0x64, 0xc3, 0x9c, 0xd4, 0x3c, + 0xa3, 0xec, 0x24, 0x8e, 0x6c, 0x87, 0xd4, 0xf2, 0x42, 0xf8, 0xf1, 0x6d, 0xc2, 0x1f, 0x52, 0xc2, + 0xb8, 0xfa, 0xac, 0x33, 0xf2, 0x1b, 0xb5, 0xa1, 0xe8, 0x11, 0xc6, 0xfc, 0xa4, 0xa6, 0x0b, 0x65, + 0x2b, 0x43, 0xf9, 0xb5, 0x00, 0x8e, 0x2b, 0x2a, 0x3e, 0xda, 0x02, 0xdd, 0xf3, 0x93, 0x5a, 0x51, + 0xc8, 0xac, 0x67, 0xc9, 0x5c, 0xd7, 0xe0, 0xcc, 0xa6, 0x01, 0x25, 0x55, 0x1d, 0xf3, 0x87, 0x06, + 0xff, 0xb5, 0xce, 0x13, 0x12, 0xba, 0xc4, 0x1d, 0x4d, 0x73, 0xf3, 0x12, 0xa4, 0x72, 0xbc, 0x96, + 0xe1, 0x69, 0x84, 0x8a, 0x53, 0x22, 0x3a, 0x84, 0x62, 0x60, 0x1f, 0x91, 0x20, 0xae, 0xe5, 0x57, + 0xf4, 0xb5, 0x72, 0xe3, 0x79, 0x86, 0xc4, 0xc4, 0x28, 0xac, 0x3d, 0x41, 0x6f, 0x85, 0x09, 0xbb, + 0xc0, 0x4a, 0x6b, 0xe1, 0x29, 0x94, 0x87, 0xcc, 0xa8, 0x0a, 0xfa, 0x09, 0xb9, 0x10, 0x41, 0x1a, + 0x98, 0x2f, 0xd1, 0xbf, 0x30, 0x35, 0xb0, 0x83, 0xbe, 0xac, 0xa1, 0x81, 0xe5, 0x66, 0x33, 0xff, + 0x44, 0x33, 0xbf, 0x69, 0x30, 0xb3, 0x1d, 0xf8, 0x76, 0x9c, 0x9e, 0xf2, 0x05, 0x14, 0x4e, 0xfc, + 0xd0, 0x15, 0xec, 0xd9, 0xc6, 0xc3, 0x8c, 0xf8, 0x86, 0x69, 0xd6, 0xae, 0x1f, 0xba, 0x58, 0x30, + 0x11, 0x82, 0x42, 0x68, 0x9f, 0xa6, 0xbe, 0xc4, 0xda, 0x6c, 0x40, 0x81, 0x23, 0x50, 0x09, 0xf4, + 0xed, 0xee, 0xa7, 0x6a, 0x0e, 0x19, 0x30, 0xf5, 0xaa, 0xf3, 0xb1, 0xf5, 0xb2, 0xaa, 0xa1, 0x32, + 0x94, 0xde, 0xec, 0xbf, 0xdf, 0x6e, 0xee, 0xb5, 0xaa, 0x79, 0x6e, 0xdf, 0x3f, 0x6c, 0xb7, 0x70, + 0xb5, 0x60, 0xfe, 0xd4, 0xe0, 0xff, 0xc9, 0xad, 0x8a, 0x36, 0xa1, 0xc4, 0x7b, 0xbd, 0xe7, 0xbb, + 0xaa, 0x14, 0xab, 0x19, 0x71, 0x72, 0x7a, 0xc7, 0xc5, 0x45, 0x26, 0xbe, 0x68, 0x15, 0xca, 0x8c, + 0x0c, 0xfc, 0xd8, 0xa7, 0x21, 0xe7, 0x8b, 0x28, 0xdb, 0x39, 0x0c, 0xa9, 0xb1, 0xe3, 0xa2, 0x65, + 0x00, 0x9b, 0x1f, 0xae, 0x27, 0xce, 0xa1, 0x2b, 0x84, 0x21, 0x6c, 0x5d, 0xfb, 0x94, 0xa0, 0x2e, + 0x54, 0x24, 0x20, 0x6d, 0x88, 0x82, 0x88, 0xe2, 0xc1, 0x1d, 0xb3, 0xd5, 0xce, 0xe1, 0x19, 0x7b, + 0x68, 0xdf, 0x04, 0x98, 0x4e, 0xdd, 0x9b, 0x5f, 0x35, 0x58, 0xcc, 0x18, 0x24, 0xd4, 0x85, 0x99, + 0xcb, 0x99, 0xbc, 0x4a, 0xc0, 0xfa, 0x9d, 0xc7, 0xb2, 0xe3, 0xe2, 0xf2, 0xd9, 0xd5, 0x06, 0x2d, + 0x43, 0x39, 0x0e, 0xed, 0x28, 0x3e, 0xa6, 0xc9, 0x65, 0x3e, 0x30, 0xa4, 0xa6, 0x8e, 0x6b, 0xfe, + 0xd2, 0xe0, 0x9f, 0x09, 0xf3, 0x87, 0xe6, 0x61, 0xfa, 0x98, 0xc6, 0x49, 0xaf, 0xcf, 0x7c, 0xd5, + 0x6b, 0x25, 0xbe, 0x7f, 0xc7, 0x7c, 0x74, 0x1f, 0x66, 0xe5, 0x68, 0xf6, 0x22, 0x46, 0xbf, 0x10, + 0x27, 0x51, 0xb2, 0x15, 0x69, 0x3d, 0x90, 0xc6, 0xf1, 0x52, 0xe8, 0xb7, 0x96, 0xa2, 0x70, 0x87, + 0x52, 0x4c, 0xfd, 0xbd, 0x52, 0xb4, 0xa0, 0x3a, 0x7e, 0x63, 0xf0, 0xe1, 0xea, 0xb3, 0x20, 0x1d, + 0xae, 0x3e, 0x0b, 0x78, 0x02, 0xaf, 0x35, 0xd4, 0xf0, 0x19, 0xcc, 0x01, 0x14, 0x65, 0x0f, 0x22, + 0x0c, 0x73, 0x2a, 0x21, 0xbd, 0xd1, 0xfe, 0xcd, 0xba, 0x4a, 0x54, 0xb6, 0xa4, 0x44, 0x3b, 0x87, + 0x2b, 0xd1, 0xb0, 0x01, 0x21, 0xd0, 0xfb, 0x43, 0x7d, 0xcc, 0x37, 0xcd, 0x02, 0xe4, 0x7d, 0xd7, + 0xdc, 0x85, 0xca, 0x08, 0x17, 0x2d, 0x01, 0xa4, 0xee, 0x95, 0x67, 0x03, 0x1b, 0xca, 0xd2, 0x71, + 0xd1, 0x22, 0x18, 0x22, 0xaa, 0xa1, 0xe9, 0x9d, 0xe6, 0x06, 0x9e, 0x67, 0xf3, 0x08, 0xaa, 0xe3, + 0x7d, 0xf4, 0x47, 0x63, 0x38, 0xe1, 0x96, 0x68, 0x0e, 0x60, 0xc9, 0xa1, 0xa7, 0x37, 0x6b, 0x34, + 0xd1, 0x48, 0x2d, 0x0e, 0xf8, 0x7b, 0x78, 0xa0, 0x7d, 0xde, 0x52, 0x04, 0x8f, 0x06, 0x76, 0xe8, + 0x59, 0x94, 0x79, 0x75, 0x8f, 0x84, 0xe2, 0xb5, 0xac, 0xcb, 0x5f, 0x76, 0xe4, 0xc7, 0x13, 0x5e, + 0xe6, 0x67, 0x72, 0x75, 0x54, 0x14, 0xd8, 0x47, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xd7, 0xee, + 0x6b, 0xa8, 0xc4, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/example/library/v1/library.pb.go b/vendor/google.golang.org/genproto/googleapis/example/library/v1/library.pb.go new file mode 100644 index 0000000..5cb297b --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/example/library/v1/library.pb.go @@ -0,0 +1,982 @@ +// Code generated by protoc-gen-go. +// source: google/example/library/v1/library.proto +// DO NOT EDIT! + +/* +Package library is a generated protocol buffer package. + +It is generated from these files: + google/example/library/v1/library.proto + +It has these top-level messages: + Book + Shelf + CreateShelfRequest + GetShelfRequest + ListShelvesRequest + ListShelvesResponse + DeleteShelfRequest + MergeShelvesRequest + CreateBookRequest + GetBookRequest + ListBooksRequest + ListBooksResponse + UpdateBookRequest + DeleteBookRequest + MoveBookRequest +*/ +package library + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A single book in the library. +type Book struct { + // The resource name of the book. + // Book names have the form `shelves/{shelf_id}/books/{book_id}`. + // The name is ignored when creating a book. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the book author. + Author string `protobuf:"bytes,2,opt,name=author" json:"author,omitempty"` + // The title of the book. + Title string `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` + // Value indicating whether the book has been read. + Read bool `protobuf:"varint,4,opt,name=read" json:"read,omitempty"` +} + +func (m *Book) Reset() { *m = Book{} } +func (m *Book) String() string { return proto.CompactTextString(m) } +func (*Book) ProtoMessage() {} +func (*Book) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Book) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Book) GetAuthor() string { + if m != nil { + return m.Author + } + return "" +} + +func (m *Book) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Book) GetRead() bool { + if m != nil { + return m.Read + } + return false +} + +// A Shelf contains a collection of books with a theme. +type Shelf struct { + // The resource name of the shelf. + // Shelf names have the form `shelves/{shelf_id}`. + // The name is ignored when creating a shelf. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The theme of the shelf + Theme string `protobuf:"bytes,2,opt,name=theme" json:"theme,omitempty"` +} + +func (m *Shelf) Reset() { *m = Shelf{} } +func (m *Shelf) String() string { return proto.CompactTextString(m) } +func (*Shelf) ProtoMessage() {} +func (*Shelf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Shelf) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Shelf) GetTheme() string { + if m != nil { + return m.Theme + } + return "" +} + +// Request message for LibraryService.CreateShelf. +type CreateShelfRequest struct { + // The shelf to create. + Shelf *Shelf `protobuf:"bytes,1,opt,name=shelf" json:"shelf,omitempty"` +} + +func (m *CreateShelfRequest) Reset() { *m = CreateShelfRequest{} } +func (m *CreateShelfRequest) String() string { return proto.CompactTextString(m) } +func (*CreateShelfRequest) ProtoMessage() {} +func (*CreateShelfRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *CreateShelfRequest) GetShelf() *Shelf { + if m != nil { + return m.Shelf + } + return nil +} + +// Request message for LibraryService.GetShelf. +type GetShelfRequest struct { + // The name of the shelf to retrieve. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetShelfRequest) Reset() { *m = GetShelfRequest{} } +func (m *GetShelfRequest) String() string { return proto.CompactTextString(m) } +func (*GetShelfRequest) ProtoMessage() {} +func (*GetShelfRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *GetShelfRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for LibraryService.ListShelves. +type ListShelvesRequest struct { + // Requested page size. Server may return fewer shelves than requested. + // If unspecified, server will pick an appropriate default. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // A token identifying a page of results the server should return. + // Typically, this is the value of + // [ListShelvesResponse.next_page_token][google.example.library.v1.ListShelvesResponse.next_page_token] + // returned from the previous call to `ListShelves` method. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListShelvesRequest) Reset() { *m = ListShelvesRequest{} } +func (m *ListShelvesRequest) String() string { return proto.CompactTextString(m) } +func (*ListShelvesRequest) ProtoMessage() {} +func (*ListShelvesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ListShelvesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListShelvesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for LibraryService.ListShelves. +type ListShelvesResponse struct { + // The list of shelves. + Shelves []*Shelf `protobuf:"bytes,1,rep,name=shelves" json:"shelves,omitempty"` + // A token to retrieve next page of results. + // Pass this value in the + // [ListShelvesRequest.page_token][google.example.library.v1.ListShelvesRequest.page_token] + // field in the subsequent call to `ListShelves` method to retrieve the next + // page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListShelvesResponse) Reset() { *m = ListShelvesResponse{} } +func (m *ListShelvesResponse) String() string { return proto.CompactTextString(m) } +func (*ListShelvesResponse) ProtoMessage() {} +func (*ListShelvesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ListShelvesResponse) GetShelves() []*Shelf { + if m != nil { + return m.Shelves + } + return nil +} + +func (m *ListShelvesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for LibraryService.DeleteShelf. +type DeleteShelfRequest struct { + // The name of the shelf to delete. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteShelfRequest) Reset() { *m = DeleteShelfRequest{} } +func (m *DeleteShelfRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteShelfRequest) ProtoMessage() {} +func (*DeleteShelfRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *DeleteShelfRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Describes the shelf being removed (other_shelf_name) and updated +// (name) in this merge. +type MergeShelvesRequest struct { + // The name of the shelf we're adding books to. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the shelf we're removing books from and deleting. + OtherShelfName string `protobuf:"bytes,2,opt,name=other_shelf_name,json=otherShelfName" json:"other_shelf_name,omitempty"` +} + +func (m *MergeShelvesRequest) Reset() { *m = MergeShelvesRequest{} } +func (m *MergeShelvesRequest) String() string { return proto.CompactTextString(m) } +func (*MergeShelvesRequest) ProtoMessage() {} +func (*MergeShelvesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *MergeShelvesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *MergeShelvesRequest) GetOtherShelfName() string { + if m != nil { + return m.OtherShelfName + } + return "" +} + +// Request message for LibraryService.CreateBook. +type CreateBookRequest struct { + // The name of the shelf in which the book is created. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The book to create. + Book *Book `protobuf:"bytes,2,opt,name=book" json:"book,omitempty"` +} + +func (m *CreateBookRequest) Reset() { *m = CreateBookRequest{} } +func (m *CreateBookRequest) String() string { return proto.CompactTextString(m) } +func (*CreateBookRequest) ProtoMessage() {} +func (*CreateBookRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *CreateBookRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateBookRequest) GetBook() *Book { + if m != nil { + return m.Book + } + return nil +} + +// Request message for LibraryService.GetBook. +type GetBookRequest struct { + // The name of the book to retrieve. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetBookRequest) Reset() { *m = GetBookRequest{} } +func (m *GetBookRequest) String() string { return proto.CompactTextString(m) } +func (*GetBookRequest) ProtoMessage() {} +func (*GetBookRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *GetBookRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for LibraryService.ListBooks. +type ListBooksRequest struct { + // The name of the shelf whose books we'd like to list. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Requested page size. Server may return fewer books than requested. + // If unspecified, server will pick an appropriate default. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // A token identifying a page of results the server should return. + // Typically, this is the value of + // [ListBooksResponse.next_page_token][google.example.library.v1.ListBooksResponse.next_page_token]. + // returned from the previous call to `ListBooks` method. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListBooksRequest) Reset() { *m = ListBooksRequest{} } +func (m *ListBooksRequest) String() string { return proto.CompactTextString(m) } +func (*ListBooksRequest) ProtoMessage() {} +func (*ListBooksRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *ListBooksRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListBooksRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListBooksRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response message for LibraryService.ListBooks. +type ListBooksResponse struct { + // The list of books. + Books []*Book `protobuf:"bytes,1,rep,name=books" json:"books,omitempty"` + // A token to retrieve next page of results. + // Pass this value in the + // [ListBooksRequest.page_token][google.example.library.v1.ListBooksRequest.page_token] + // field in the subsequent call to `ListBooks` method to retrieve the next + // page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListBooksResponse) Reset() { *m = ListBooksResponse{} } +func (m *ListBooksResponse) String() string { return proto.CompactTextString(m) } +func (*ListBooksResponse) ProtoMessage() {} +func (*ListBooksResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ListBooksResponse) GetBooks() []*Book { + if m != nil { + return m.Books + } + return nil +} + +func (m *ListBooksResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for LibraryService.UpdateBook. +type UpdateBookRequest struct { + // The name of the book to update. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The book to update with. The name must match or be empty. + Book *Book `protobuf:"bytes,2,opt,name=book" json:"book,omitempty"` +} + +func (m *UpdateBookRequest) Reset() { *m = UpdateBookRequest{} } +func (m *UpdateBookRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateBookRequest) ProtoMessage() {} +func (*UpdateBookRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *UpdateBookRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateBookRequest) GetBook() *Book { + if m != nil { + return m.Book + } + return nil +} + +// Request message for LibraryService.DeleteBook. +type DeleteBookRequest struct { + // The name of the book to delete. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteBookRequest) Reset() { *m = DeleteBookRequest{} } +func (m *DeleteBookRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteBookRequest) ProtoMessage() {} +func (*DeleteBookRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *DeleteBookRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Describes what book to move (name) and what shelf we're moving it +// to (other_shelf_name). +type MoveBookRequest struct { + // The name of the book to move. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the destination shelf. + OtherShelfName string `protobuf:"bytes,2,opt,name=other_shelf_name,json=otherShelfName" json:"other_shelf_name,omitempty"` +} + +func (m *MoveBookRequest) Reset() { *m = MoveBookRequest{} } +func (m *MoveBookRequest) String() string { return proto.CompactTextString(m) } +func (*MoveBookRequest) ProtoMessage() {} +func (*MoveBookRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *MoveBookRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *MoveBookRequest) GetOtherShelfName() string { + if m != nil { + return m.OtherShelfName + } + return "" +} + +func init() { + proto.RegisterType((*Book)(nil), "google.example.library.v1.Book") + proto.RegisterType((*Shelf)(nil), "google.example.library.v1.Shelf") + proto.RegisterType((*CreateShelfRequest)(nil), "google.example.library.v1.CreateShelfRequest") + proto.RegisterType((*GetShelfRequest)(nil), "google.example.library.v1.GetShelfRequest") + proto.RegisterType((*ListShelvesRequest)(nil), "google.example.library.v1.ListShelvesRequest") + proto.RegisterType((*ListShelvesResponse)(nil), "google.example.library.v1.ListShelvesResponse") + proto.RegisterType((*DeleteShelfRequest)(nil), "google.example.library.v1.DeleteShelfRequest") + proto.RegisterType((*MergeShelvesRequest)(nil), "google.example.library.v1.MergeShelvesRequest") + proto.RegisterType((*CreateBookRequest)(nil), "google.example.library.v1.CreateBookRequest") + proto.RegisterType((*GetBookRequest)(nil), "google.example.library.v1.GetBookRequest") + proto.RegisterType((*ListBooksRequest)(nil), "google.example.library.v1.ListBooksRequest") + proto.RegisterType((*ListBooksResponse)(nil), "google.example.library.v1.ListBooksResponse") + proto.RegisterType((*UpdateBookRequest)(nil), "google.example.library.v1.UpdateBookRequest") + proto.RegisterType((*DeleteBookRequest)(nil), "google.example.library.v1.DeleteBookRequest") + proto.RegisterType((*MoveBookRequest)(nil), "google.example.library.v1.MoveBookRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for LibraryService service + +type LibraryServiceClient interface { + // Creates a shelf, and returns the new Shelf. + CreateShelf(ctx context.Context, in *CreateShelfRequest, opts ...grpc.CallOption) (*Shelf, error) + // Gets a shelf. Returns NOT_FOUND if the shelf does not exist. + GetShelf(ctx context.Context, in *GetShelfRequest, opts ...grpc.CallOption) (*Shelf, error) + // Lists shelves. The order is unspecified but deterministic. Newly created + // shelves will not necessarily be added to the end of this list. + ListShelves(ctx context.Context, in *ListShelvesRequest, opts ...grpc.CallOption) (*ListShelvesResponse, error) + // Deletes a shelf. Returns NOT_FOUND if the shelf does not exist. + DeleteShelf(ctx context.Context, in *DeleteShelfRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Merges two shelves by adding all books from the shelf named + // `other_shelf_name` to shelf `name`, and deletes + // `other_shelf_name`. Returns the updated shelf. + // The book ids of the moved books may not be the same as the original books. + // + // Returns NOT_FOUND if either shelf does not exist. + // This call is a no-op if the specified shelves are the same. + MergeShelves(ctx context.Context, in *MergeShelvesRequest, opts ...grpc.CallOption) (*Shelf, error) + // Creates a book, and returns the new Book. + CreateBook(ctx context.Context, in *CreateBookRequest, opts ...grpc.CallOption) (*Book, error) + // Gets a book. Returns NOT_FOUND if the book does not exist. + GetBook(ctx context.Context, in *GetBookRequest, opts ...grpc.CallOption) (*Book, error) + // Lists books in a shelf. The order is unspecified but deterministic. Newly + // created books will not necessarily be added to the end of this list. + // Returns NOT_FOUND if the shelf does not exist. + ListBooks(ctx context.Context, in *ListBooksRequest, opts ...grpc.CallOption) (*ListBooksResponse, error) + // Deletes a book. Returns NOT_FOUND if the book does not exist. + DeleteBook(ctx context.Context, in *DeleteBookRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Updates a book. Returns INVALID_ARGUMENT if the name of the book + // is non-empty and does equal the previous name. + UpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error) + // Moves a book to another shelf, and returns the new book. The book + // id of the new book may not be the same as the original book. + MoveBook(ctx context.Context, in *MoveBookRequest, opts ...grpc.CallOption) (*Book, error) +} + +type libraryServiceClient struct { + cc *grpc.ClientConn +} + +func NewLibraryServiceClient(cc *grpc.ClientConn) LibraryServiceClient { + return &libraryServiceClient{cc} +} + +func (c *libraryServiceClient) CreateShelf(ctx context.Context, in *CreateShelfRequest, opts ...grpc.CallOption) (*Shelf, error) { + out := new(Shelf) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/CreateShelf", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) GetShelf(ctx context.Context, in *GetShelfRequest, opts ...grpc.CallOption) (*Shelf, error) { + out := new(Shelf) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/GetShelf", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) ListShelves(ctx context.Context, in *ListShelvesRequest, opts ...grpc.CallOption) (*ListShelvesResponse, error) { + out := new(ListShelvesResponse) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/ListShelves", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) DeleteShelf(ctx context.Context, in *DeleteShelfRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/DeleteShelf", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) MergeShelves(ctx context.Context, in *MergeShelvesRequest, opts ...grpc.CallOption) (*Shelf, error) { + out := new(Shelf) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/MergeShelves", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) CreateBook(ctx context.Context, in *CreateBookRequest, opts ...grpc.CallOption) (*Book, error) { + out := new(Book) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/CreateBook", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) GetBook(ctx context.Context, in *GetBookRequest, opts ...grpc.CallOption) (*Book, error) { + out := new(Book) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/GetBook", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) ListBooks(ctx context.Context, in *ListBooksRequest, opts ...grpc.CallOption) (*ListBooksResponse, error) { + out := new(ListBooksResponse) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/ListBooks", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) DeleteBook(ctx context.Context, in *DeleteBookRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/DeleteBook", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) UpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error) { + out := new(Book) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/UpdateBook", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *libraryServiceClient) MoveBook(ctx context.Context, in *MoveBookRequest, opts ...grpc.CallOption) (*Book, error) { + out := new(Book) + err := grpc.Invoke(ctx, "/google.example.library.v1.LibraryService/MoveBook", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for LibraryService service + +type LibraryServiceServer interface { + // Creates a shelf, and returns the new Shelf. + CreateShelf(context.Context, *CreateShelfRequest) (*Shelf, error) + // Gets a shelf. Returns NOT_FOUND if the shelf does not exist. + GetShelf(context.Context, *GetShelfRequest) (*Shelf, error) + // Lists shelves. The order is unspecified but deterministic. Newly created + // shelves will not necessarily be added to the end of this list. + ListShelves(context.Context, *ListShelvesRequest) (*ListShelvesResponse, error) + // Deletes a shelf. Returns NOT_FOUND if the shelf does not exist. + DeleteShelf(context.Context, *DeleteShelfRequest) (*google_protobuf1.Empty, error) + // Merges two shelves by adding all books from the shelf named + // `other_shelf_name` to shelf `name`, and deletes + // `other_shelf_name`. Returns the updated shelf. + // The book ids of the moved books may not be the same as the original books. + // + // Returns NOT_FOUND if either shelf does not exist. + // This call is a no-op if the specified shelves are the same. + MergeShelves(context.Context, *MergeShelvesRequest) (*Shelf, error) + // Creates a book, and returns the new Book. + CreateBook(context.Context, *CreateBookRequest) (*Book, error) + // Gets a book. Returns NOT_FOUND if the book does not exist. + GetBook(context.Context, *GetBookRequest) (*Book, error) + // Lists books in a shelf. The order is unspecified but deterministic. Newly + // created books will not necessarily be added to the end of this list. + // Returns NOT_FOUND if the shelf does not exist. + ListBooks(context.Context, *ListBooksRequest) (*ListBooksResponse, error) + // Deletes a book. Returns NOT_FOUND if the book does not exist. + DeleteBook(context.Context, *DeleteBookRequest) (*google_protobuf1.Empty, error) + // Updates a book. Returns INVALID_ARGUMENT if the name of the book + // is non-empty and does equal the previous name. + UpdateBook(context.Context, *UpdateBookRequest) (*Book, error) + // Moves a book to another shelf, and returns the new book. The book + // id of the new book may not be the same as the original book. + MoveBook(context.Context, *MoveBookRequest) (*Book, error) +} + +func RegisterLibraryServiceServer(s *grpc.Server, srv LibraryServiceServer) { + s.RegisterService(&_LibraryService_serviceDesc, srv) +} + +func _LibraryService_CreateShelf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateShelfRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).CreateShelf(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/CreateShelf", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).CreateShelf(ctx, req.(*CreateShelfRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_GetShelf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetShelfRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).GetShelf(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/GetShelf", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).GetShelf(ctx, req.(*GetShelfRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_ListShelves_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListShelvesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).ListShelves(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/ListShelves", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).ListShelves(ctx, req.(*ListShelvesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_DeleteShelf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteShelfRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).DeleteShelf(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/DeleteShelf", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).DeleteShelf(ctx, req.(*DeleteShelfRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_MergeShelves_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MergeShelvesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).MergeShelves(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/MergeShelves", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).MergeShelves(ctx, req.(*MergeShelvesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_CreateBook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateBookRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).CreateBook(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/CreateBook", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).CreateBook(ctx, req.(*CreateBookRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_GetBook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBookRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).GetBook(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/GetBook", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).GetBook(ctx, req.(*GetBookRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_ListBooks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListBooksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).ListBooks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/ListBooks", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).ListBooks(ctx, req.(*ListBooksRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_DeleteBook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteBookRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).DeleteBook(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/DeleteBook", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).DeleteBook(ctx, req.(*DeleteBookRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_UpdateBook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateBookRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).UpdateBook(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/UpdateBook", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).UpdateBook(ctx, req.(*UpdateBookRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LibraryService_MoveBook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MoveBookRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LibraryServiceServer).MoveBook(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.example.library.v1.LibraryService/MoveBook", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LibraryServiceServer).MoveBook(ctx, req.(*MoveBookRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _LibraryService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.example.library.v1.LibraryService", + HandlerType: (*LibraryServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateShelf", + Handler: _LibraryService_CreateShelf_Handler, + }, + { + MethodName: "GetShelf", + Handler: _LibraryService_GetShelf_Handler, + }, + { + MethodName: "ListShelves", + Handler: _LibraryService_ListShelves_Handler, + }, + { + MethodName: "DeleteShelf", + Handler: _LibraryService_DeleteShelf_Handler, + }, + { + MethodName: "MergeShelves", + Handler: _LibraryService_MergeShelves_Handler, + }, + { + MethodName: "CreateBook", + Handler: _LibraryService_CreateBook_Handler, + }, + { + MethodName: "GetBook", + Handler: _LibraryService_GetBook_Handler, + }, + { + MethodName: "ListBooks", + Handler: _LibraryService_ListBooks_Handler, + }, + { + MethodName: "DeleteBook", + Handler: _LibraryService_DeleteBook_Handler, + }, + { + MethodName: "UpdateBook", + Handler: _LibraryService_UpdateBook_Handler, + }, + { + MethodName: "MoveBook", + Handler: _LibraryService_MoveBook_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/example/library/v1/library.proto", +} + +func init() { proto.RegisterFile("google/example/library/v1/library.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 838 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdb, 0x4e, 0xdb, 0x48, + 0x18, 0x96, 0x21, 0x81, 0xf0, 0x87, 0x53, 0x06, 0x84, 0xb2, 0x26, 0x2c, 0xd9, 0x11, 0x87, 0x6c, + 0x96, 0xb5, 0x05, 0x68, 0xf7, 0x22, 0x55, 0xa5, 0x8a, 0xb6, 0xe2, 0x06, 0xda, 0x28, 0x69, 0x6f, + 0x2a, 0xa4, 0xc8, 0x81, 0xc1, 0xb1, 0x48, 0x3c, 0xc6, 0x36, 0x11, 0x07, 0xf5, 0xa2, 0x95, 0x10, + 0x52, 0x6f, 0xfb, 0x0a, 0x7d, 0xa3, 0xbe, 0x42, 0x1f, 0xa4, 0x9a, 0x83, 0xc1, 0x24, 0x66, 0x9c, + 0x5e, 0xf4, 0xce, 0x33, 0xf3, 0xcd, 0xf7, 0x7f, 0xff, 0x61, 0xbe, 0x04, 0x36, 0x6d, 0x4a, 0xed, + 0x2e, 0x31, 0xc9, 0xa5, 0xd5, 0xf3, 0xba, 0xc4, 0xec, 0x3a, 0x6d, 0xdf, 0xf2, 0xaf, 0xcc, 0xfe, + 0x76, 0xf4, 0x69, 0x78, 0x3e, 0x0d, 0x29, 0xfa, 0x43, 0x00, 0x0d, 0x09, 0x34, 0xa2, 0xd3, 0xfe, + 0xb6, 0x5e, 0x92, 0x1c, 0x96, 0xe7, 0x98, 0x96, 0xeb, 0xd2, 0xd0, 0x0a, 0x1d, 0xea, 0x06, 0xe2, + 0xa2, 0xbe, 0x2c, 0x4f, 0xf9, 0xaa, 0x7d, 0x71, 0x6a, 0x92, 0x9e, 0x17, 0x4a, 0x56, 0x7c, 0x04, + 0x99, 0x3d, 0x4a, 0xcf, 0x10, 0x82, 0x8c, 0x6b, 0xf5, 0x48, 0x51, 0x2b, 0x6b, 0x95, 0xa9, 0x06, + 0xff, 0x46, 0x4b, 0x30, 0x61, 0x5d, 0x84, 0x1d, 0xea, 0x17, 0xc7, 0xf8, 0xae, 0x5c, 0xa1, 0x45, + 0xc8, 0x86, 0x4e, 0xd8, 0x25, 0xc5, 0x71, 0xbe, 0x2d, 0x16, 0x8c, 0xc1, 0x27, 0xd6, 0x49, 0x31, + 0x53, 0xd6, 0x2a, 0xb9, 0x06, 0xff, 0xc6, 0xdb, 0x90, 0x6d, 0x76, 0x48, 0xf7, 0x34, 0x91, 0x9e, + 0xd1, 0x74, 0x48, 0x8f, 0x48, 0x76, 0xb1, 0xc0, 0x07, 0x80, 0x5e, 0xfa, 0xc4, 0x0a, 0x09, 0xbf, + 0xd8, 0x20, 0xe7, 0x17, 0x24, 0x08, 0xd1, 0xff, 0x90, 0x0d, 0xd8, 0x9a, 0x13, 0xe4, 0x77, 0xca, + 0xc6, 0x93, 0xc5, 0x30, 0xc4, 0x3d, 0x01, 0xc7, 0xeb, 0x30, 0xb7, 0x4f, 0xc2, 0x47, 0x54, 0x09, + 0x52, 0x70, 0x1d, 0xd0, 0x81, 0x13, 0x70, 0x5c, 0x9f, 0x04, 0x11, 0x72, 0x19, 0xa6, 0x3c, 0xcb, + 0x26, 0xad, 0xc0, 0xb9, 0x16, 0xf0, 0x6c, 0x23, 0xc7, 0x36, 0x9a, 0xce, 0x35, 0x41, 0x2b, 0x00, + 0xfc, 0x30, 0xa4, 0x67, 0xc4, 0x95, 0x29, 0x70, 0xf8, 0x3b, 0xb6, 0x81, 0xaf, 0x60, 0xe1, 0x11, + 0x63, 0xe0, 0x51, 0x37, 0x20, 0xa8, 0x06, 0x93, 0x81, 0xd8, 0x2a, 0x6a, 0xe5, 0xf1, 0x91, 0x32, + 0x89, 0x2e, 0xa0, 0x0d, 0x98, 0x73, 0xc9, 0x65, 0xd8, 0x1a, 0x0a, 0x3b, 0xc3, 0xb6, 0xeb, 0xf7, + 0xa1, 0x2b, 0x80, 0x5e, 0x91, 0x2e, 0x19, 0xa8, 0x60, 0x52, 0xda, 0x4d, 0x58, 0x38, 0x24, 0xbe, + 0x4d, 0x06, 0xf2, 0x4e, 0x6a, 0x56, 0x05, 0xe6, 0x69, 0xd8, 0x21, 0x7e, 0x8b, 0xd7, 0xb5, 0xc5, + 0xcf, 0x45, 0xf4, 0x59, 0xbe, 0xcf, 0x63, 0xbd, 0x61, 0xa4, 0x47, 0x50, 0x10, 0x0d, 0x64, 0x73, + 0xa5, 0xa2, 0xdc, 0x85, 0x4c, 0x9b, 0xd2, 0x33, 0x4e, 0x93, 0xdf, 0x59, 0x55, 0x14, 0x82, 0x33, + 0x71, 0x30, 0x5e, 0x83, 0xd9, 0x7d, 0x12, 0xa6, 0x50, 0xe3, 0x36, 0xcc, 0xb3, 0xea, 0x33, 0x98, + 0x32, 0xab, 0x47, 0x1d, 0x1e, 0x53, 0x76, 0x78, 0x7c, 0xb0, 0xc3, 0x3e, 0x14, 0x62, 0x31, 0x64, + 0x7f, 0xff, 0x83, 0x2c, 0x93, 0x19, 0x75, 0x37, 0x35, 0x29, 0x81, 0x1e, 0xb9, 0xb5, 0x47, 0x50, + 0x78, 0xef, 0x9d, 0xfc, 0xae, 0xda, 0x6e, 0x42, 0x41, 0x0c, 0x4e, 0x5a, 0x79, 0xdf, 0xc2, 0xdc, + 0x21, 0xed, 0xa7, 0x8a, 0x18, 0x79, 0x66, 0x76, 0xbe, 0xe5, 0x61, 0xf6, 0x40, 0x68, 0x6a, 0x12, + 0xbf, 0xef, 0x1c, 0x13, 0x74, 0x0d, 0xf9, 0x98, 0x0f, 0xa0, 0x7f, 0x15, 0x29, 0x0c, 0xfb, 0x85, + 0x9e, 0xfa, 0xac, 0xb0, 0xfe, 0xf9, 0xfb, 0x8f, 0xaf, 0x63, 0x8b, 0x38, 0xcf, 0x9c, 0x56, 0x3e, + 0xb1, 0x9a, 0x70, 0x0d, 0xd4, 0x87, 0x5c, 0xe4, 0x1a, 0xa8, 0xaa, 0x60, 0x1a, 0xb0, 0x96, 0x11, + 0xa2, 0x96, 0x78, 0xd4, 0x25, 0xb4, 0xc8, 0xa2, 0xde, 0xb0, 0x8a, 0x3c, 0x97, 0xb1, 0xcd, 0xea, + 0x47, 0xf4, 0x49, 0x83, 0x7c, 0xcc, 0x35, 0x94, 0x49, 0x0f, 0xfb, 0x95, 0x6e, 0x8c, 0x0a, 0x17, + 0xc3, 0x8a, 0x17, 0xb8, 0x98, 0x19, 0x14, 0x2f, 0x01, 0xf2, 0x21, 0x1f, 0x73, 0x0f, 0xa5, 0x84, + 0x61, 0x97, 0xd1, 0x97, 0x22, 0x78, 0xf4, 0x63, 0x63, 0xbc, 0x66, 0x3f, 0x36, 0x51, 0xde, 0xd5, + 0xe4, 0xbc, 0xef, 0x34, 0x98, 0x8e, 0x1b, 0x11, 0x52, 0x65, 0x92, 0xe0, 0x58, 0x23, 0x14, 0x7e, + 0x9d, 0x0b, 0x58, 0xc5, 0x7a, 0x92, 0x80, 0x5a, 0x8f, 0x71, 0xd6, 0xb4, 0x2a, 0xba, 0xd5, 0x00, + 0x1e, 0xdc, 0x0b, 0x6d, 0xa5, 0x4e, 0x5d, 0xec, 0x0d, 0xe8, 0x69, 0xcf, 0x0c, 0x57, 0xb8, 0x08, + 0x9c, 0x2c, 0xc2, 0xe4, 0x56, 0x50, 0xe3, 0x4f, 0x11, 0xdd, 0xc0, 0xa4, 0xb4, 0x39, 0xf4, 0xb7, + 0x7a, 0x00, 0x7f, 0x49, 0xc0, 0x1a, 0x17, 0xf0, 0x27, 0x2a, 0x25, 0x08, 0x10, 0xf1, 0x59, 0x3b, + 0xbe, 0x68, 0x30, 0x75, 0x6f, 0x6d, 0xe8, 0x9f, 0x94, 0xa9, 0x8a, 0x9b, 0xac, 0xbe, 0x35, 0x1a, + 0x58, 0x0e, 0x20, 0xe6, 0x72, 0x4a, 0x48, 0x51, 0x0f, 0x74, 0x09, 0xf0, 0x60, 0x4a, 0xca, 0x86, + 0x0c, 0x79, 0xd7, 0x93, 0xd3, 0x28, 0xcb, 0x50, 0x55, 0x97, 0xe1, 0x4e, 0x03, 0x78, 0x70, 0x5b, + 0x65, 0xe8, 0x21, 0x53, 0x4e, 0x6f, 0x45, 0x95, 0x6b, 0x58, 0xd3, 0x95, 0x1a, 0xe4, 0x34, 0xdc, + 0x6a, 0x90, 0x8b, 0x0c, 0x57, 0x69, 0x48, 0x03, 0xae, 0x9c, 0xae, 0x62, 0x8b, 0xab, 0xd8, 0xc0, + 0x7f, 0x29, 0x55, 0xf4, 0x68, 0x9f, 0xbd, 0x8e, 0xbd, 0x73, 0x58, 0x39, 0xa6, 0xbd, 0xa7, 0x39, + 0xf7, 0xa6, 0xa5, 0x89, 0xd7, 0x59, 0xbd, 0xeb, 0xda, 0x87, 0x17, 0x12, 0x6a, 0xd3, 0xae, 0xe5, + 0xda, 0x06, 0xf5, 0x6d, 0xd3, 0x26, 0x2e, 0xef, 0x86, 0x29, 0x8e, 0x2c, 0xcf, 0x09, 0x12, 0xfe, + 0xfb, 0x3e, 0x93, 0x9f, 0xed, 0x09, 0x0e, 0xde, 0xfd, 0x19, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x13, + 0xc5, 0x7e, 0x27, 0x0b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/annotations.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/annotations.pb.go new file mode 100644 index 0000000..eeee219 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/annotations.pb.go @@ -0,0 +1,2228 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/annotations.proto +// DO NOT EDIT! + +/* +Package genomics is a generated protocol buffer package. + +It is generated from these files: + google/genomics/v1/annotations.proto + google/genomics/v1/cigar.proto + google/genomics/v1/datasets.proto + google/genomics/v1/operations.proto + google/genomics/v1/position.proto + google/genomics/v1/range.proto + google/genomics/v1/readalignment.proto + google/genomics/v1/readgroup.proto + google/genomics/v1/readgroupset.proto + google/genomics/v1/reads.proto + google/genomics/v1/references.proto + google/genomics/v1/variants.proto + +It has these top-level messages: + AnnotationSet + Annotation + VariantAnnotation + Transcript + ExternalId + CreateAnnotationSetRequest + GetAnnotationSetRequest + UpdateAnnotationSetRequest + DeleteAnnotationSetRequest + SearchAnnotationSetsRequest + SearchAnnotationSetsResponse + CreateAnnotationRequest + BatchCreateAnnotationsRequest + BatchCreateAnnotationsResponse + GetAnnotationRequest + UpdateAnnotationRequest + DeleteAnnotationRequest + SearchAnnotationsRequest + SearchAnnotationsResponse + CigarUnit + Dataset + ListDatasetsRequest + ListDatasetsResponse + CreateDatasetRequest + UpdateDatasetRequest + DeleteDatasetRequest + UndeleteDatasetRequest + GetDatasetRequest + OperationMetadata + OperationEvent + Position + Range + LinearAlignment + Read + ReadGroup + ReadGroupSet + SearchReadGroupSetsRequest + SearchReadGroupSetsResponse + ImportReadGroupSetsRequest + ImportReadGroupSetsResponse + ExportReadGroupSetRequest + UpdateReadGroupSetRequest + DeleteReadGroupSetRequest + GetReadGroupSetRequest + ListCoverageBucketsRequest + CoverageBucket + ListCoverageBucketsResponse + SearchReadsRequest + SearchReadsResponse + StreamReadsRequest + StreamReadsResponse + Reference + ReferenceSet + SearchReferenceSetsRequest + SearchReferenceSetsResponse + GetReferenceSetRequest + SearchReferencesRequest + SearchReferencesResponse + GetReferenceRequest + ListBasesRequest + ListBasesResponse + VariantSetMetadata + VariantSet + Variant + VariantCall + CallSet + ReferenceBound + ImportVariantsRequest + ImportVariantsResponse + CreateVariantSetRequest + ExportVariantSetRequest + GetVariantSetRequest + SearchVariantSetsRequest + SearchVariantSetsResponse + DeleteVariantSetRequest + UpdateVariantSetRequest + SearchVariantsRequest + SearchVariantsResponse + CreateVariantRequest + UpdateVariantRequest + DeleteVariantRequest + GetVariantRequest + MergeVariantsRequest + SearchCallSetsRequest + SearchCallSetsResponse + CreateCallSetRequest + UpdateCallSetRequest + DeleteCallSetRequest + GetCallSetRequest + StreamVariantsRequest + StreamVariantsResponse +*/ +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf3 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf4 "github.com/golang/protobuf/ptypes/wrappers" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// When an [Annotation][google.genomics.v1.Annotation] or +// [AnnotationSet][google.genomics.v1.AnnotationSet] is created, if `type` is +// not specified it will be set to `GENERIC`. +type AnnotationType int32 + +const ( + AnnotationType_ANNOTATION_TYPE_UNSPECIFIED AnnotationType = 0 + // A `GENERIC` annotation type should be used when no other annotation + // type will suffice. This represents an untyped annotation of the reference + // genome. + AnnotationType_GENERIC AnnotationType = 1 + // A `VARIANT` annotation type. + AnnotationType_VARIANT AnnotationType = 2 + // A `GENE` annotation type represents the existence of a gene at the + // associated reference coordinates. The start coordinate is typically the + // gene's transcription start site and the end is typically the end of the + // gene's last exon. + AnnotationType_GENE AnnotationType = 3 + // A `TRANSCRIPT` annotation type represents the assertion that a + // particular region of the reference genome may be transcribed as RNA. + AnnotationType_TRANSCRIPT AnnotationType = 4 +) + +var AnnotationType_name = map[int32]string{ + 0: "ANNOTATION_TYPE_UNSPECIFIED", + 1: "GENERIC", + 2: "VARIANT", + 3: "GENE", + 4: "TRANSCRIPT", +} +var AnnotationType_value = map[string]int32{ + "ANNOTATION_TYPE_UNSPECIFIED": 0, + "GENERIC": 1, + "VARIANT": 2, + "GENE": 3, + "TRANSCRIPT": 4, +} + +func (x AnnotationType) String() string { + return proto.EnumName(AnnotationType_name, int32(x)) +} +func (AnnotationType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type VariantAnnotation_Type int32 + +const ( + VariantAnnotation_TYPE_UNSPECIFIED VariantAnnotation_Type = 0 + // `TYPE_OTHER` should be used when no other Type will suffice. + // Further explanation of the variant type may be included in the + // [info][google.genomics.v1.Annotation.info] field. + VariantAnnotation_TYPE_OTHER VariantAnnotation_Type = 1 + // `INSERTION` indicates an insertion. + VariantAnnotation_INSERTION VariantAnnotation_Type = 2 + // `DELETION` indicates a deletion. + VariantAnnotation_DELETION VariantAnnotation_Type = 3 + // `SUBSTITUTION` indicates a block substitution of + // two or more nucleotides. + VariantAnnotation_SUBSTITUTION VariantAnnotation_Type = 4 + // `SNP` indicates a single nucleotide polymorphism. + VariantAnnotation_SNP VariantAnnotation_Type = 5 + // `STRUCTURAL` indicates a large structural variant, + // including chromosomal fusions, inversions, etc. + VariantAnnotation_STRUCTURAL VariantAnnotation_Type = 6 + // `CNV` indicates a variation in copy number. + VariantAnnotation_CNV VariantAnnotation_Type = 7 +) + +var VariantAnnotation_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "TYPE_OTHER", + 2: "INSERTION", + 3: "DELETION", + 4: "SUBSTITUTION", + 5: "SNP", + 6: "STRUCTURAL", + 7: "CNV", +} +var VariantAnnotation_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "TYPE_OTHER": 1, + "INSERTION": 2, + "DELETION": 3, + "SUBSTITUTION": 4, + "SNP": 5, + "STRUCTURAL": 6, + "CNV": 7, +} + +func (x VariantAnnotation_Type) String() string { + return proto.EnumName(VariantAnnotation_Type_name, int32(x)) +} +func (VariantAnnotation_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +type VariantAnnotation_Effect int32 + +const ( + VariantAnnotation_EFFECT_UNSPECIFIED VariantAnnotation_Effect = 0 + // `EFFECT_OTHER` should be used when no other Effect + // will suffice. + VariantAnnotation_EFFECT_OTHER VariantAnnotation_Effect = 1 + // `FRAMESHIFT` indicates a mutation in which the insertion or + // deletion of nucleotides resulted in a frameshift change. + VariantAnnotation_FRAMESHIFT VariantAnnotation_Effect = 2 + // `FRAME_PRESERVING_INDEL` indicates a mutation in which a + // multiple of three nucleotides has been inserted or deleted, resulting + // in no change to the reading frame of the coding sequence. + VariantAnnotation_FRAME_PRESERVING_INDEL VariantAnnotation_Effect = 3 + // `SYNONYMOUS_SNP` indicates a single nucleotide polymorphism + // mutation that results in no amino acid change. + VariantAnnotation_SYNONYMOUS_SNP VariantAnnotation_Effect = 4 + // `NONSYNONYMOUS_SNP` indicates a single nucleotide + // polymorphism mutation that results in an amino acid change. + VariantAnnotation_NONSYNONYMOUS_SNP VariantAnnotation_Effect = 5 + // `STOP_GAIN` indicates a mutation that leads to the creation + // of a stop codon at the variant site. Frameshift mutations creating + // downstream stop codons do not count as `STOP_GAIN`. + VariantAnnotation_STOP_GAIN VariantAnnotation_Effect = 6 + // `STOP_LOSS` indicates a mutation that eliminates a + // stop codon at the variant site. + VariantAnnotation_STOP_LOSS VariantAnnotation_Effect = 7 + // `SPLICE_SITE_DISRUPTION` indicates that this variant is + // found in a splice site for the associated transcript, and alters the + // normal splicing pattern. + VariantAnnotation_SPLICE_SITE_DISRUPTION VariantAnnotation_Effect = 8 +) + +var VariantAnnotation_Effect_name = map[int32]string{ + 0: "EFFECT_UNSPECIFIED", + 1: "EFFECT_OTHER", + 2: "FRAMESHIFT", + 3: "FRAME_PRESERVING_INDEL", + 4: "SYNONYMOUS_SNP", + 5: "NONSYNONYMOUS_SNP", + 6: "STOP_GAIN", + 7: "STOP_LOSS", + 8: "SPLICE_SITE_DISRUPTION", +} +var VariantAnnotation_Effect_value = map[string]int32{ + "EFFECT_UNSPECIFIED": 0, + "EFFECT_OTHER": 1, + "FRAMESHIFT": 2, + "FRAME_PRESERVING_INDEL": 3, + "SYNONYMOUS_SNP": 4, + "NONSYNONYMOUS_SNP": 5, + "STOP_GAIN": 6, + "STOP_LOSS": 7, + "SPLICE_SITE_DISRUPTION": 8, +} + +func (x VariantAnnotation_Effect) String() string { + return proto.EnumName(VariantAnnotation_Effect_name, int32(x)) +} +func (VariantAnnotation_Effect) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } + +type VariantAnnotation_ClinicalSignificance int32 + +const ( + VariantAnnotation_CLINICAL_SIGNIFICANCE_UNSPECIFIED VariantAnnotation_ClinicalSignificance = 0 + // `OTHER` should be used when no other clinical significance + // value will suffice. + VariantAnnotation_CLINICAL_SIGNIFICANCE_OTHER VariantAnnotation_ClinicalSignificance = 1 + VariantAnnotation_UNCERTAIN VariantAnnotation_ClinicalSignificance = 2 + VariantAnnotation_BENIGN VariantAnnotation_ClinicalSignificance = 3 + VariantAnnotation_LIKELY_BENIGN VariantAnnotation_ClinicalSignificance = 4 + VariantAnnotation_LIKELY_PATHOGENIC VariantAnnotation_ClinicalSignificance = 5 + VariantAnnotation_PATHOGENIC VariantAnnotation_ClinicalSignificance = 6 + VariantAnnotation_DRUG_RESPONSE VariantAnnotation_ClinicalSignificance = 7 + VariantAnnotation_HISTOCOMPATIBILITY VariantAnnotation_ClinicalSignificance = 8 + VariantAnnotation_CONFERS_SENSITIVITY VariantAnnotation_ClinicalSignificance = 9 + VariantAnnotation_RISK_FACTOR VariantAnnotation_ClinicalSignificance = 10 + VariantAnnotation_ASSOCIATION VariantAnnotation_ClinicalSignificance = 11 + VariantAnnotation_PROTECTIVE VariantAnnotation_ClinicalSignificance = 12 + // `MULTIPLE_REPORTED` should be used when multiple clinical + // signficances are reported for a variant. The original clinical + // significance values may be provided in the `info` field. + VariantAnnotation_MULTIPLE_REPORTED VariantAnnotation_ClinicalSignificance = 13 +) + +var VariantAnnotation_ClinicalSignificance_name = map[int32]string{ + 0: "CLINICAL_SIGNIFICANCE_UNSPECIFIED", + 1: "CLINICAL_SIGNIFICANCE_OTHER", + 2: "UNCERTAIN", + 3: "BENIGN", + 4: "LIKELY_BENIGN", + 5: "LIKELY_PATHOGENIC", + 6: "PATHOGENIC", + 7: "DRUG_RESPONSE", + 8: "HISTOCOMPATIBILITY", + 9: "CONFERS_SENSITIVITY", + 10: "RISK_FACTOR", + 11: "ASSOCIATION", + 12: "PROTECTIVE", + 13: "MULTIPLE_REPORTED", +} +var VariantAnnotation_ClinicalSignificance_value = map[string]int32{ + "CLINICAL_SIGNIFICANCE_UNSPECIFIED": 0, + "CLINICAL_SIGNIFICANCE_OTHER": 1, + "UNCERTAIN": 2, + "BENIGN": 3, + "LIKELY_BENIGN": 4, + "LIKELY_PATHOGENIC": 5, + "PATHOGENIC": 6, + "DRUG_RESPONSE": 7, + "HISTOCOMPATIBILITY": 8, + "CONFERS_SENSITIVITY": 9, + "RISK_FACTOR": 10, + "ASSOCIATION": 11, + "PROTECTIVE": 12, + "MULTIPLE_REPORTED": 13, +} + +func (x VariantAnnotation_ClinicalSignificance) String() string { + return proto.EnumName(VariantAnnotation_ClinicalSignificance_name, int32(x)) +} +func (VariantAnnotation_ClinicalSignificance) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{2, 2} +} + +// An annotation set is a logical grouping of annotations that share consistent +// type information and provenance. Examples of annotation sets include 'all +// genes from refseq', and 'all variant annotations from ClinVar'. +type AnnotationSet struct { + // The server-generated annotation set ID, unique across all annotation sets. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The dataset to which this annotation set belongs. + DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // The ID of the reference set that defines the coordinate space for this + // set's annotations. + ReferenceSetId string `protobuf:"bytes,3,opt,name=reference_set_id,json=referenceSetId" json:"reference_set_id,omitempty"` + // The display name for this annotation set. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + // The source URI describing the file from which this annotation set was + // generated, if any. + SourceUri string `protobuf:"bytes,5,opt,name=source_uri,json=sourceUri" json:"source_uri,omitempty"` + // The type of annotations contained within this set. + Type AnnotationType `protobuf:"varint,6,opt,name=type,enum=google.genomics.v1.AnnotationType" json:"type,omitempty"` + // A map of additional read alignment information. This must be of the form + // map<string, string[]> (string key mapping to a list of string values). + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,17,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *AnnotationSet) Reset() { *m = AnnotationSet{} } +func (m *AnnotationSet) String() string { return proto.CompactTextString(m) } +func (*AnnotationSet) ProtoMessage() {} +func (*AnnotationSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AnnotationSet) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *AnnotationSet) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *AnnotationSet) GetReferenceSetId() string { + if m != nil { + return m.ReferenceSetId + } + return "" +} + +func (m *AnnotationSet) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *AnnotationSet) GetSourceUri() string { + if m != nil { + return m.SourceUri + } + return "" +} + +func (m *AnnotationSet) GetType() AnnotationType { + if m != nil { + return m.Type + } + return AnnotationType_ANNOTATION_TYPE_UNSPECIFIED +} + +func (m *AnnotationSet) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +// An annotation describes a region of reference genome. The value of an +// annotation may be one of several canonical types, supplemented by arbitrary +// info tags. An annotation is not inherently associated with a specific +// sample or individual (though a client could choose to use annotations in +// this way). Example canonical annotation types are `GENE` and +// `VARIANT`. +type Annotation struct { + // The server-generated annotation ID, unique across all annotations. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The annotation set to which this annotation belongs. + AnnotationSetId string `protobuf:"bytes,2,opt,name=annotation_set_id,json=annotationSetId" json:"annotation_set_id,omitempty"` + // The display name of this annotation. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // The ID of the Google Genomics reference associated with this range. + ReferenceId string `protobuf:"bytes,4,opt,name=reference_id,json=referenceId" json:"reference_id,omitempty"` + // The display name corresponding to the reference specified by + // `referenceId`, for example `chr1`, `1`, or `chrX`. + ReferenceName string `protobuf:"bytes,5,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The start position of the range on the reference, 0-based inclusive. + Start int64 `protobuf:"varint,6,opt,name=start" json:"start,omitempty"` + // The end position of the range on the reference, 0-based exclusive. + End int64 `protobuf:"varint,7,opt,name=end" json:"end,omitempty"` + // Whether this range refers to the reverse strand, as opposed to the forward + // strand. Note that regardless of this field, the start/end position of the + // range always refer to the forward strand. + ReverseStrand bool `protobuf:"varint,8,opt,name=reverse_strand,json=reverseStrand" json:"reverse_strand,omitempty"` + // The data type for this annotation. Must match the containing annotation + // set's type. + Type AnnotationType `protobuf:"varint,9,opt,name=type,enum=google.genomics.v1.AnnotationType" json:"type,omitempty"` + // Types that are valid to be assigned to Value: + // *Annotation_Variant + // *Annotation_Transcript + Value isAnnotation_Value `protobuf_oneof:"value"` + // A map of additional read alignment information. This must be of the form + // map<string, string[]> (string key mapping to a list of string values). + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,12,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Annotation) Reset() { *m = Annotation{} } +func (m *Annotation) String() string { return proto.CompactTextString(m) } +func (*Annotation) ProtoMessage() {} +func (*Annotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isAnnotation_Value interface { + isAnnotation_Value() +} + +type Annotation_Variant struct { + Variant *VariantAnnotation `protobuf:"bytes,10,opt,name=variant,oneof"` +} +type Annotation_Transcript struct { + Transcript *Transcript `protobuf:"bytes,11,opt,name=transcript,oneof"` +} + +func (*Annotation_Variant) isAnnotation_Value() {} +func (*Annotation_Transcript) isAnnotation_Value() {} + +func (m *Annotation) GetValue() isAnnotation_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *Annotation) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Annotation) GetAnnotationSetId() string { + if m != nil { + return m.AnnotationSetId + } + return "" +} + +func (m *Annotation) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Annotation) GetReferenceId() string { + if m != nil { + return m.ReferenceId + } + return "" +} + +func (m *Annotation) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *Annotation) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Annotation) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *Annotation) GetReverseStrand() bool { + if m != nil { + return m.ReverseStrand + } + return false +} + +func (m *Annotation) GetType() AnnotationType { + if m != nil { + return m.Type + } + return AnnotationType_ANNOTATION_TYPE_UNSPECIFIED +} + +func (m *Annotation) GetVariant() *VariantAnnotation { + if x, ok := m.GetValue().(*Annotation_Variant); ok { + return x.Variant + } + return nil +} + +func (m *Annotation) GetTranscript() *Transcript { + if x, ok := m.GetValue().(*Annotation_Transcript); ok { + return x.Transcript + } + return nil +} + +func (m *Annotation) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Annotation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Annotation_OneofMarshaler, _Annotation_OneofUnmarshaler, _Annotation_OneofSizer, []interface{}{ + (*Annotation_Variant)(nil), + (*Annotation_Transcript)(nil), + } +} + +func _Annotation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Annotation) + // value + switch x := m.Value.(type) { + case *Annotation_Variant: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Variant); err != nil { + return err + } + case *Annotation_Transcript: + b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Transcript); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Annotation.Value has unexpected type %T", x) + } + return nil +} + +func _Annotation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Annotation) + switch tag { + case 10: // value.variant + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VariantAnnotation) + err := b.DecodeMessage(msg) + m.Value = &Annotation_Variant{msg} + return true, err + case 11: // value.transcript + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Transcript) + err := b.DecodeMessage(msg) + m.Value = &Annotation_Transcript{msg} + return true, err + default: + return false, nil + } +} + +func _Annotation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Annotation) + // value + switch x := m.Value.(type) { + case *Annotation_Variant: + s := proto.Size(x.Variant) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Annotation_Transcript: + s := proto.Size(x.Transcript) + n += proto.SizeVarint(11<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type VariantAnnotation struct { + // Type has been adapted from ClinVar's list of variant types. + Type VariantAnnotation_Type `protobuf:"varint,1,opt,name=type,enum=google.genomics.v1.VariantAnnotation_Type" json:"type,omitempty"` + // Effect of the variant on the coding sequence. + Effect VariantAnnotation_Effect `protobuf:"varint,2,opt,name=effect,enum=google.genomics.v1.VariantAnnotation_Effect" json:"effect,omitempty"` + // The alternate allele for this variant. If multiple alternate alleles + // exist at this location, create a separate variant for each one, as they + // may represent distinct conditions. + AlternateBases string `protobuf:"bytes,3,opt,name=alternate_bases,json=alternateBases" json:"alternate_bases,omitempty"` + // Google annotation ID of the gene affected by this variant. This should + // be provided when the variant is created. + GeneId string `protobuf:"bytes,4,opt,name=gene_id,json=geneId" json:"gene_id,omitempty"` + // Google annotation IDs of the transcripts affected by this variant. These + // should be provided when the variant is created. + TranscriptIds []string `protobuf:"bytes,5,rep,name=transcript_ids,json=transcriptIds" json:"transcript_ids,omitempty"` + // The set of conditions associated with this variant. + // A condition describes the way a variant influences human health. + Conditions []*VariantAnnotation_ClinicalCondition `protobuf:"bytes,6,rep,name=conditions" json:"conditions,omitempty"` + // Describes the clinical significance of a variant. + // It is adapted from the ClinVar controlled vocabulary for clinical + // significance described at: + // http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/ + ClinicalSignificance VariantAnnotation_ClinicalSignificance `protobuf:"varint,7,opt,name=clinical_significance,json=clinicalSignificance,enum=google.genomics.v1.VariantAnnotation_ClinicalSignificance" json:"clinical_significance,omitempty"` +} + +func (m *VariantAnnotation) Reset() { *m = VariantAnnotation{} } +func (m *VariantAnnotation) String() string { return proto.CompactTextString(m) } +func (*VariantAnnotation) ProtoMessage() {} +func (*VariantAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *VariantAnnotation) GetType() VariantAnnotation_Type { + if m != nil { + return m.Type + } + return VariantAnnotation_TYPE_UNSPECIFIED +} + +func (m *VariantAnnotation) GetEffect() VariantAnnotation_Effect { + if m != nil { + return m.Effect + } + return VariantAnnotation_EFFECT_UNSPECIFIED +} + +func (m *VariantAnnotation) GetAlternateBases() string { + if m != nil { + return m.AlternateBases + } + return "" +} + +func (m *VariantAnnotation) GetGeneId() string { + if m != nil { + return m.GeneId + } + return "" +} + +func (m *VariantAnnotation) GetTranscriptIds() []string { + if m != nil { + return m.TranscriptIds + } + return nil +} + +func (m *VariantAnnotation) GetConditions() []*VariantAnnotation_ClinicalCondition { + if m != nil { + return m.Conditions + } + return nil +} + +func (m *VariantAnnotation) GetClinicalSignificance() VariantAnnotation_ClinicalSignificance { + if m != nil { + return m.ClinicalSignificance + } + return VariantAnnotation_CLINICAL_SIGNIFICANCE_UNSPECIFIED +} + +type VariantAnnotation_ClinicalCondition struct { + // A set of names for the condition. + Names []string `protobuf:"bytes,1,rep,name=names" json:"names,omitempty"` + // The set of external IDs for this condition. + ExternalIds []*ExternalId `protobuf:"bytes,2,rep,name=external_ids,json=externalIds" json:"external_ids,omitempty"` + // The MedGen concept id associated with this gene. + // Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/ + ConceptId string `protobuf:"bytes,3,opt,name=concept_id,json=conceptId" json:"concept_id,omitempty"` + // The OMIM id for this condition. + // Search for these IDs at http://omim.org/ + OmimId string `protobuf:"bytes,4,opt,name=omim_id,json=omimId" json:"omim_id,omitempty"` +} + +func (m *VariantAnnotation_ClinicalCondition) Reset() { *m = VariantAnnotation_ClinicalCondition{} } +func (m *VariantAnnotation_ClinicalCondition) String() string { return proto.CompactTextString(m) } +func (*VariantAnnotation_ClinicalCondition) ProtoMessage() {} +func (*VariantAnnotation_ClinicalCondition) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{2, 0} +} + +func (m *VariantAnnotation_ClinicalCondition) GetNames() []string { + if m != nil { + return m.Names + } + return nil +} + +func (m *VariantAnnotation_ClinicalCondition) GetExternalIds() []*ExternalId { + if m != nil { + return m.ExternalIds + } + return nil +} + +func (m *VariantAnnotation_ClinicalCondition) GetConceptId() string { + if m != nil { + return m.ConceptId + } + return "" +} + +func (m *VariantAnnotation_ClinicalCondition) GetOmimId() string { + if m != nil { + return m.OmimId + } + return "" +} + +// A transcript represents the assertion that a particular region of the +// reference genome may be transcribed as RNA. +type Transcript struct { + // The annotation ID of the gene from which this transcript is transcribed. + GeneId string `protobuf:"bytes,1,opt,name=gene_id,json=geneId" json:"gene_id,omitempty"` + // The <a href="http://en.wikipedia.org/wiki/Exon">exons</a> that compose + // this transcript. This field should be unset for genomes where transcript + // splicing does not occur, for example prokaryotes. + // + // Introns are regions of the transcript that are not included in the + // spliced RNA product. Though not explicitly modeled here, intron ranges can + // be deduced; all regions of this transcript that are not exons are introns. + // + // Exonic sequences do not necessarily code for a translational product + // (amino acids). Only the regions of exons bounded by the + // [codingSequence][google.genomics.v1.Transcript.coding_sequence] correspond + // to coding DNA sequence. + // + // Exons are ordered by start position and may not overlap. + Exons []*Transcript_Exon `protobuf:"bytes,2,rep,name=exons" json:"exons,omitempty"` + // The range of the coding sequence for this transcript, if any. To determine + // the exact ranges of coding sequence, intersect this range with those of the + // [exons][google.genomics.v1.Transcript.exons], if any. If there are any + // [exons][google.genomics.v1.Transcript.exons], the + // [codingSequence][google.genomics.v1.Transcript.coding_sequence] must start + // and end within them. + // + // Note that in some cases, the reference genome will not exactly match the + // observed mRNA transcript e.g. due to variance in the source genome from + // reference. In these cases, + // [exon.frame][google.genomics.v1.Transcript.Exon.frame] will not necessarily + // match the expected reference reading frame and coding exon reference bases + // cannot necessarily be concatenated to produce the original transcript mRNA. + CodingSequence *Transcript_CodingSequence `protobuf:"bytes,3,opt,name=coding_sequence,json=codingSequence" json:"coding_sequence,omitempty"` +} + +func (m *Transcript) Reset() { *m = Transcript{} } +func (m *Transcript) String() string { return proto.CompactTextString(m) } +func (*Transcript) ProtoMessage() {} +func (*Transcript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Transcript) GetGeneId() string { + if m != nil { + return m.GeneId + } + return "" +} + +func (m *Transcript) GetExons() []*Transcript_Exon { + if m != nil { + return m.Exons + } + return nil +} + +func (m *Transcript) GetCodingSequence() *Transcript_CodingSequence { + if m != nil { + return m.CodingSequence + } + return nil +} + +type Transcript_Exon struct { + // The start position of the exon on this annotation's reference sequence, + // 0-based inclusive. Note that this is relative to the reference start, and + // **not** the containing annotation start. + Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + // The end position of the exon on this annotation's reference sequence, + // 0-based exclusive. Note that this is relative to the reference start, and + // *not* the containing annotation start. + End int64 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + // The frame of this exon. Contains a value of 0, 1, or 2, which indicates + // the offset of the first coding base of the exon within the reading frame + // of the coding DNA sequence, if any. This field is dependent on the + // strandedness of this annotation (see + // [Annotation.reverse_strand][google.genomics.v1.Annotation.reverse_strand]). + // For forward stranded annotations, this offset is relative to the + // [exon.start][google.genomics.v1.Transcript.Exon.start]. For reverse + // strand annotations, this offset is relative to the + // [exon.end][google.genomics.v1.Transcript.Exon.end] `- 1`. + // + // Unset if this exon does not intersect the coding sequence. Upon creation + // of a transcript, the frame must be populated for all or none of the + // coding exons. + Frame *google_protobuf4.Int32Value `protobuf:"bytes,3,opt,name=frame" json:"frame,omitempty"` +} + +func (m *Transcript_Exon) Reset() { *m = Transcript_Exon{} } +func (m *Transcript_Exon) String() string { return proto.CompactTextString(m) } +func (*Transcript_Exon) ProtoMessage() {} +func (*Transcript_Exon) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } + +func (m *Transcript_Exon) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Transcript_Exon) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *Transcript_Exon) GetFrame() *google_protobuf4.Int32Value { + if m != nil { + return m.Frame + } + return nil +} + +type Transcript_CodingSequence struct { + // The start of the coding sequence on this annotation's reference sequence, + // 0-based inclusive. Note that this position is relative to the reference + // start, and *not* the containing annotation start. + Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + // The end of the coding sequence on this annotation's reference sequence, + // 0-based exclusive. Note that this position is relative to the reference + // start, and *not* the containing annotation start. + End int64 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` +} + +func (m *Transcript_CodingSequence) Reset() { *m = Transcript_CodingSequence{} } +func (m *Transcript_CodingSequence) String() string { return proto.CompactTextString(m) } +func (*Transcript_CodingSequence) ProtoMessage() {} +func (*Transcript_CodingSequence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 1} } + +func (m *Transcript_CodingSequence) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Transcript_CodingSequence) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +type ExternalId struct { + // The name of the source of this data. + SourceName string `protobuf:"bytes,1,opt,name=source_name,json=sourceName" json:"source_name,omitempty"` + // The id used by the source of this data. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` +} + +func (m *ExternalId) Reset() { *m = ExternalId{} } +func (m *ExternalId) String() string { return proto.CompactTextString(m) } +func (*ExternalId) ProtoMessage() {} +func (*ExternalId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ExternalId) GetSourceName() string { + if m != nil { + return m.SourceName + } + return "" +} + +func (m *ExternalId) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +type CreateAnnotationSetRequest struct { + // The annotation set to create. + AnnotationSet *AnnotationSet `protobuf:"bytes,1,opt,name=annotation_set,json=annotationSet" json:"annotation_set,omitempty"` +} + +func (m *CreateAnnotationSetRequest) Reset() { *m = CreateAnnotationSetRequest{} } +func (m *CreateAnnotationSetRequest) String() string { return proto.CompactTextString(m) } +func (*CreateAnnotationSetRequest) ProtoMessage() {} +func (*CreateAnnotationSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *CreateAnnotationSetRequest) GetAnnotationSet() *AnnotationSet { + if m != nil { + return m.AnnotationSet + } + return nil +} + +type GetAnnotationSetRequest struct { + // The ID of the annotation set to be retrieved. + AnnotationSetId string `protobuf:"bytes,1,opt,name=annotation_set_id,json=annotationSetId" json:"annotation_set_id,omitempty"` +} + +func (m *GetAnnotationSetRequest) Reset() { *m = GetAnnotationSetRequest{} } +func (m *GetAnnotationSetRequest) String() string { return proto.CompactTextString(m) } +func (*GetAnnotationSetRequest) ProtoMessage() {} +func (*GetAnnotationSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *GetAnnotationSetRequest) GetAnnotationSetId() string { + if m != nil { + return m.AnnotationSetId + } + return "" +} + +type UpdateAnnotationSetRequest struct { + // The ID of the annotation set to be updated. + AnnotationSetId string `protobuf:"bytes,1,opt,name=annotation_set_id,json=annotationSetId" json:"annotation_set_id,omitempty"` + // The new annotation set. + AnnotationSet *AnnotationSet `protobuf:"bytes,2,opt,name=annotation_set,json=annotationSet" json:"annotation_set,omitempty"` + // An optional mask specifying which fields to update. Mutable fields are + // [name][google.genomics.v1.AnnotationSet.name], + // [source_uri][google.genomics.v1.AnnotationSet.source_uri], and + // [info][google.genomics.v1.AnnotationSet.info]. If unspecified, all + // mutable fields will be updated. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateAnnotationSetRequest) Reset() { *m = UpdateAnnotationSetRequest{} } +func (m *UpdateAnnotationSetRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateAnnotationSetRequest) ProtoMessage() {} +func (*UpdateAnnotationSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *UpdateAnnotationSetRequest) GetAnnotationSetId() string { + if m != nil { + return m.AnnotationSetId + } + return "" +} + +func (m *UpdateAnnotationSetRequest) GetAnnotationSet() *AnnotationSet { + if m != nil { + return m.AnnotationSet + } + return nil +} + +func (m *UpdateAnnotationSetRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +type DeleteAnnotationSetRequest struct { + // The ID of the annotation set to be deleted. + AnnotationSetId string `protobuf:"bytes,1,opt,name=annotation_set_id,json=annotationSetId" json:"annotation_set_id,omitempty"` +} + +func (m *DeleteAnnotationSetRequest) Reset() { *m = DeleteAnnotationSetRequest{} } +func (m *DeleteAnnotationSetRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteAnnotationSetRequest) ProtoMessage() {} +func (*DeleteAnnotationSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *DeleteAnnotationSetRequest) GetAnnotationSetId() string { + if m != nil { + return m.AnnotationSetId + } + return "" +} + +type SearchAnnotationSetsRequest struct { + // Required. The dataset IDs to search within. Caller must have `READ` access + // to these datasets. + DatasetIds []string `protobuf:"bytes,1,rep,name=dataset_ids,json=datasetIds" json:"dataset_ids,omitempty"` + // If specified, only annotation sets associated with the given reference set + // are returned. + ReferenceSetId string `protobuf:"bytes,2,opt,name=reference_set_id,json=referenceSetId" json:"reference_set_id,omitempty"` + // Only return annotations sets for which a substring of the name matches this + // string (case insensitive). + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // If specified, only annotation sets that have any of these types are + // returned. + Types []AnnotationType `protobuf:"varint,4,rep,packed,name=types,enum=google.genomics.v1.AnnotationType" json:"types,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 128. The maximum value is 1024. + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *SearchAnnotationSetsRequest) Reset() { *m = SearchAnnotationSetsRequest{} } +func (m *SearchAnnotationSetsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchAnnotationSetsRequest) ProtoMessage() {} +func (*SearchAnnotationSetsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *SearchAnnotationSetsRequest) GetDatasetIds() []string { + if m != nil { + return m.DatasetIds + } + return nil +} + +func (m *SearchAnnotationSetsRequest) GetReferenceSetId() string { + if m != nil { + return m.ReferenceSetId + } + return "" +} + +func (m *SearchAnnotationSetsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *SearchAnnotationSetsRequest) GetTypes() []AnnotationType { + if m != nil { + return m.Types + } + return nil +} + +func (m *SearchAnnotationSetsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchAnnotationSetsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +type SearchAnnotationSetsResponse struct { + // The matching annotation sets. + AnnotationSets []*AnnotationSet `protobuf:"bytes,1,rep,name=annotation_sets,json=annotationSets" json:"annotation_sets,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchAnnotationSetsResponse) Reset() { *m = SearchAnnotationSetsResponse{} } +func (m *SearchAnnotationSetsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchAnnotationSetsResponse) ProtoMessage() {} +func (*SearchAnnotationSetsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *SearchAnnotationSetsResponse) GetAnnotationSets() []*AnnotationSet { + if m != nil { + return m.AnnotationSets + } + return nil +} + +func (m *SearchAnnotationSetsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +type CreateAnnotationRequest struct { + // The annotation to be created. + Annotation *Annotation `protobuf:"bytes,1,opt,name=annotation" json:"annotation,omitempty"` +} + +func (m *CreateAnnotationRequest) Reset() { *m = CreateAnnotationRequest{} } +func (m *CreateAnnotationRequest) String() string { return proto.CompactTextString(m) } +func (*CreateAnnotationRequest) ProtoMessage() {} +func (*CreateAnnotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *CreateAnnotationRequest) GetAnnotation() *Annotation { + if m != nil { + return m.Annotation + } + return nil +} + +type BatchCreateAnnotationsRequest struct { + // The annotations to be created. At most 4096 can be specified in a single + // request. + Annotations []*Annotation `protobuf:"bytes,1,rep,name=annotations" json:"annotations,omitempty"` + // A unique request ID which enables the server to detect duplicated requests. + // If provided, duplicated requests will result in the same response; if not + // provided, duplicated requests may result in duplicated data. For a given + // annotation set, callers should not reuse `request_id`s when writing + // different batches of annotations - behavior in this case is undefined. + // A common approach is to use a UUID. For batch jobs where worker crashes are + // a possibility, consider using some unique variant of a worker or run ID. + RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId" json:"request_id,omitempty"` +} + +func (m *BatchCreateAnnotationsRequest) Reset() { *m = BatchCreateAnnotationsRequest{} } +func (m *BatchCreateAnnotationsRequest) String() string { return proto.CompactTextString(m) } +func (*BatchCreateAnnotationsRequest) ProtoMessage() {} +func (*BatchCreateAnnotationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *BatchCreateAnnotationsRequest) GetAnnotations() []*Annotation { + if m != nil { + return m.Annotations + } + return nil +} + +func (m *BatchCreateAnnotationsRequest) GetRequestId() string { + if m != nil { + return m.RequestId + } + return "" +} + +type BatchCreateAnnotationsResponse struct { + // The resulting per-annotation entries, ordered consistently with the + // original request. + Entries []*BatchCreateAnnotationsResponse_Entry `protobuf:"bytes,1,rep,name=entries" json:"entries,omitempty"` +} + +func (m *BatchCreateAnnotationsResponse) Reset() { *m = BatchCreateAnnotationsResponse{} } +func (m *BatchCreateAnnotationsResponse) String() string { return proto.CompactTextString(m) } +func (*BatchCreateAnnotationsResponse) ProtoMessage() {} +func (*BatchCreateAnnotationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *BatchCreateAnnotationsResponse) GetEntries() []*BatchCreateAnnotationsResponse_Entry { + if m != nil { + return m.Entries + } + return nil +} + +type BatchCreateAnnotationsResponse_Entry struct { + // The creation status. + Status *google_rpc.Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` + // The created annotation, if creation was successful. + Annotation *Annotation `protobuf:"bytes,2,opt,name=annotation" json:"annotation,omitempty"` +} + +func (m *BatchCreateAnnotationsResponse_Entry) Reset() { *m = BatchCreateAnnotationsResponse_Entry{} } +func (m *BatchCreateAnnotationsResponse_Entry) String() string { return proto.CompactTextString(m) } +func (*BatchCreateAnnotationsResponse_Entry) ProtoMessage() {} +func (*BatchCreateAnnotationsResponse_Entry) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{13, 0} +} + +func (m *BatchCreateAnnotationsResponse_Entry) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func (m *BatchCreateAnnotationsResponse_Entry) GetAnnotation() *Annotation { + if m != nil { + return m.Annotation + } + return nil +} + +type GetAnnotationRequest struct { + // The ID of the annotation to be retrieved. + AnnotationId string `protobuf:"bytes,1,opt,name=annotation_id,json=annotationId" json:"annotation_id,omitempty"` +} + +func (m *GetAnnotationRequest) Reset() { *m = GetAnnotationRequest{} } +func (m *GetAnnotationRequest) String() string { return proto.CompactTextString(m) } +func (*GetAnnotationRequest) ProtoMessage() {} +func (*GetAnnotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *GetAnnotationRequest) GetAnnotationId() string { + if m != nil { + return m.AnnotationId + } + return "" +} + +type UpdateAnnotationRequest struct { + // The ID of the annotation to be updated. + AnnotationId string `protobuf:"bytes,1,opt,name=annotation_id,json=annotationId" json:"annotation_id,omitempty"` + // The new annotation. + Annotation *Annotation `protobuf:"bytes,2,opt,name=annotation" json:"annotation,omitempty"` + // An optional mask specifying which fields to update. Mutable fields are + // [name][google.genomics.v1.Annotation.name], + // [variant][google.genomics.v1.Annotation.variant], + // [transcript][google.genomics.v1.Annotation.transcript], and + // [info][google.genomics.v1.Annotation.info]. If unspecified, all mutable + // fields will be updated. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateAnnotationRequest) Reset() { *m = UpdateAnnotationRequest{} } +func (m *UpdateAnnotationRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateAnnotationRequest) ProtoMessage() {} +func (*UpdateAnnotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *UpdateAnnotationRequest) GetAnnotationId() string { + if m != nil { + return m.AnnotationId + } + return "" +} + +func (m *UpdateAnnotationRequest) GetAnnotation() *Annotation { + if m != nil { + return m.Annotation + } + return nil +} + +func (m *UpdateAnnotationRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +type DeleteAnnotationRequest struct { + // The ID of the annotation to be deleted. + AnnotationId string `protobuf:"bytes,1,opt,name=annotation_id,json=annotationId" json:"annotation_id,omitempty"` +} + +func (m *DeleteAnnotationRequest) Reset() { *m = DeleteAnnotationRequest{} } +func (m *DeleteAnnotationRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteAnnotationRequest) ProtoMessage() {} +func (*DeleteAnnotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *DeleteAnnotationRequest) GetAnnotationId() string { + if m != nil { + return m.AnnotationId + } + return "" +} + +type SearchAnnotationsRequest struct { + // Required. The annotation sets to search within. The caller must have + // `READ` access to these annotation sets. + // All queried annotation sets must have the same type. + AnnotationSetIds []string `protobuf:"bytes,1,rep,name=annotation_set_ids,json=annotationSetIds" json:"annotation_set_ids,omitempty"` + // Required. `reference_id` or `reference_name` must be set. + // + // Types that are valid to be assigned to Reference: + // *SearchAnnotationsRequest_ReferenceId + // *SearchAnnotationsRequest_ReferenceName + Reference isSearchAnnotationsRequest_Reference `protobuf_oneof:"reference"` + // The start position of the range on the reference, 0-based inclusive. If + // specified, + // [referenceId][google.genomics.v1.SearchAnnotationsRequest.reference_id] or + // [referenceName][google.genomics.v1.SearchAnnotationsRequest.reference_name] + // must be specified. Defaults to 0. + Start int64 `protobuf:"varint,4,opt,name=start" json:"start,omitempty"` + // The end position of the range on the reference, 0-based exclusive. If + // [referenceId][google.genomics.v1.SearchAnnotationsRequest.reference_id] or + // [referenceName][google.genomics.v1.SearchAnnotationsRequest.reference_name] + // must be specified, Defaults to the length of the reference. + End int64 `protobuf:"varint,5,opt,name=end" json:"end,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,6,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 256. The maximum value is 2048. + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *SearchAnnotationsRequest) Reset() { *m = SearchAnnotationsRequest{} } +func (m *SearchAnnotationsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchAnnotationsRequest) ProtoMessage() {} +func (*SearchAnnotationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +type isSearchAnnotationsRequest_Reference interface { + isSearchAnnotationsRequest_Reference() +} + +type SearchAnnotationsRequest_ReferenceId struct { + ReferenceId string `protobuf:"bytes,2,opt,name=reference_id,json=referenceId,oneof"` +} +type SearchAnnotationsRequest_ReferenceName struct { + ReferenceName string `protobuf:"bytes,3,opt,name=reference_name,json=referenceName,oneof"` +} + +func (*SearchAnnotationsRequest_ReferenceId) isSearchAnnotationsRequest_Reference() {} +func (*SearchAnnotationsRequest_ReferenceName) isSearchAnnotationsRequest_Reference() {} + +func (m *SearchAnnotationsRequest) GetReference() isSearchAnnotationsRequest_Reference { + if m != nil { + return m.Reference + } + return nil +} + +func (m *SearchAnnotationsRequest) GetAnnotationSetIds() []string { + if m != nil { + return m.AnnotationSetIds + } + return nil +} + +func (m *SearchAnnotationsRequest) GetReferenceId() string { + if x, ok := m.GetReference().(*SearchAnnotationsRequest_ReferenceId); ok { + return x.ReferenceId + } + return "" +} + +func (m *SearchAnnotationsRequest) GetReferenceName() string { + if x, ok := m.GetReference().(*SearchAnnotationsRequest_ReferenceName); ok { + return x.ReferenceName + } + return "" +} + +func (m *SearchAnnotationsRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *SearchAnnotationsRequest) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *SearchAnnotationsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchAnnotationsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SearchAnnotationsRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SearchAnnotationsRequest_OneofMarshaler, _SearchAnnotationsRequest_OneofUnmarshaler, _SearchAnnotationsRequest_OneofSizer, []interface{}{ + (*SearchAnnotationsRequest_ReferenceId)(nil), + (*SearchAnnotationsRequest_ReferenceName)(nil), + } +} + +func _SearchAnnotationsRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SearchAnnotationsRequest) + // reference + switch x := m.Reference.(type) { + case *SearchAnnotationsRequest_ReferenceId: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ReferenceId) + case *SearchAnnotationsRequest_ReferenceName: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ReferenceName) + case nil: + default: + return fmt.Errorf("SearchAnnotationsRequest.Reference has unexpected type %T", x) + } + return nil +} + +func _SearchAnnotationsRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SearchAnnotationsRequest) + switch tag { + case 2: // reference.reference_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Reference = &SearchAnnotationsRequest_ReferenceId{x} + return true, err + case 3: // reference.reference_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Reference = &SearchAnnotationsRequest_ReferenceName{x} + return true, err + default: + return false, nil + } +} + +func _SearchAnnotationsRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SearchAnnotationsRequest) + // reference + switch x := m.Reference.(type) { + case *SearchAnnotationsRequest_ReferenceId: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ReferenceId))) + n += len(x.ReferenceId) + case *SearchAnnotationsRequest_ReferenceName: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ReferenceName))) + n += len(x.ReferenceName) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type SearchAnnotationsResponse struct { + // The matching annotations. + Annotations []*Annotation `protobuf:"bytes,1,rep,name=annotations" json:"annotations,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchAnnotationsResponse) Reset() { *m = SearchAnnotationsResponse{} } +func (m *SearchAnnotationsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchAnnotationsResponse) ProtoMessage() {} +func (*SearchAnnotationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *SearchAnnotationsResponse) GetAnnotations() []*Annotation { + if m != nil { + return m.Annotations + } + return nil +} + +func (m *SearchAnnotationsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func init() { + proto.RegisterType((*AnnotationSet)(nil), "google.genomics.v1.AnnotationSet") + proto.RegisterType((*Annotation)(nil), "google.genomics.v1.Annotation") + proto.RegisterType((*VariantAnnotation)(nil), "google.genomics.v1.VariantAnnotation") + proto.RegisterType((*VariantAnnotation_ClinicalCondition)(nil), "google.genomics.v1.VariantAnnotation.ClinicalCondition") + proto.RegisterType((*Transcript)(nil), "google.genomics.v1.Transcript") + proto.RegisterType((*Transcript_Exon)(nil), "google.genomics.v1.Transcript.Exon") + proto.RegisterType((*Transcript_CodingSequence)(nil), "google.genomics.v1.Transcript.CodingSequence") + proto.RegisterType((*ExternalId)(nil), "google.genomics.v1.ExternalId") + proto.RegisterType((*CreateAnnotationSetRequest)(nil), "google.genomics.v1.CreateAnnotationSetRequest") + proto.RegisterType((*GetAnnotationSetRequest)(nil), "google.genomics.v1.GetAnnotationSetRequest") + proto.RegisterType((*UpdateAnnotationSetRequest)(nil), "google.genomics.v1.UpdateAnnotationSetRequest") + proto.RegisterType((*DeleteAnnotationSetRequest)(nil), "google.genomics.v1.DeleteAnnotationSetRequest") + proto.RegisterType((*SearchAnnotationSetsRequest)(nil), "google.genomics.v1.SearchAnnotationSetsRequest") + proto.RegisterType((*SearchAnnotationSetsResponse)(nil), "google.genomics.v1.SearchAnnotationSetsResponse") + proto.RegisterType((*CreateAnnotationRequest)(nil), "google.genomics.v1.CreateAnnotationRequest") + proto.RegisterType((*BatchCreateAnnotationsRequest)(nil), "google.genomics.v1.BatchCreateAnnotationsRequest") + proto.RegisterType((*BatchCreateAnnotationsResponse)(nil), "google.genomics.v1.BatchCreateAnnotationsResponse") + proto.RegisterType((*BatchCreateAnnotationsResponse_Entry)(nil), "google.genomics.v1.BatchCreateAnnotationsResponse.Entry") + proto.RegisterType((*GetAnnotationRequest)(nil), "google.genomics.v1.GetAnnotationRequest") + proto.RegisterType((*UpdateAnnotationRequest)(nil), "google.genomics.v1.UpdateAnnotationRequest") + proto.RegisterType((*DeleteAnnotationRequest)(nil), "google.genomics.v1.DeleteAnnotationRequest") + proto.RegisterType((*SearchAnnotationsRequest)(nil), "google.genomics.v1.SearchAnnotationsRequest") + proto.RegisterType((*SearchAnnotationsResponse)(nil), "google.genomics.v1.SearchAnnotationsResponse") + proto.RegisterEnum("google.genomics.v1.AnnotationType", AnnotationType_name, AnnotationType_value) + proto.RegisterEnum("google.genomics.v1.VariantAnnotation_Type", VariantAnnotation_Type_name, VariantAnnotation_Type_value) + proto.RegisterEnum("google.genomics.v1.VariantAnnotation_Effect", VariantAnnotation_Effect_name, VariantAnnotation_Effect_value) + proto.RegisterEnum("google.genomics.v1.VariantAnnotation_ClinicalSignificance", VariantAnnotation_ClinicalSignificance_name, VariantAnnotation_ClinicalSignificance_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for AnnotationServiceV1 service + +type AnnotationServiceV1Client interface { + // Creates a new annotation set. Caller must have WRITE permission for the + // associated dataset. + // + // The following fields are required: + // + // * [datasetId][google.genomics.v1.AnnotationSet.dataset_id] + // * [referenceSetId][google.genomics.v1.AnnotationSet.reference_set_id] + // + // All other fields may be optionally specified, unless documented as being + // server-generated (for example, the `id` field). + CreateAnnotationSet(ctx context.Context, in *CreateAnnotationSetRequest, opts ...grpc.CallOption) (*AnnotationSet, error) + // Gets an annotation set. Caller must have READ permission for + // the associated dataset. + GetAnnotationSet(ctx context.Context, in *GetAnnotationSetRequest, opts ...grpc.CallOption) (*AnnotationSet, error) + // Updates an annotation set. The update must respect all mutability + // restrictions and other invariants described on the annotation set resource. + // Caller must have WRITE permission for the associated dataset. + UpdateAnnotationSet(ctx context.Context, in *UpdateAnnotationSetRequest, opts ...grpc.CallOption) (*AnnotationSet, error) + // Deletes an annotation set. Caller must have WRITE permission + // for the associated annotation set. + DeleteAnnotationSet(ctx context.Context, in *DeleteAnnotationSetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Searches for annotation sets that match the given criteria. Annotation sets + // are returned in an unspecified order. This order is consistent, such that + // two queries for the same content (regardless of page size) yield annotation + // sets in the same order across their respective streams of paginated + // responses. Caller must have READ permission for the queried datasets. + SearchAnnotationSets(ctx context.Context, in *SearchAnnotationSetsRequest, opts ...grpc.CallOption) (*SearchAnnotationSetsResponse, error) + // Creates a new annotation. Caller must have WRITE permission + // for the associated annotation set. + // + // The following fields are required: + // + // * [annotationSetId][google.genomics.v1.Annotation.annotation_set_id] + // * [referenceName][google.genomics.v1.Annotation.reference_name] or + // [referenceId][google.genomics.v1.Annotation.reference_id] + // + // ### Transcripts + // + // For annotations of type TRANSCRIPT, the following fields of + // [transcript][google.genomics.v1.Annotation.transcript] must be provided: + // + // * [exons.start][google.genomics.v1.Transcript.Exon.start] + // * [exons.end][google.genomics.v1.Transcript.Exon.end] + // + // All other fields may be optionally specified, unless documented as being + // server-generated (for example, the `id` field). The annotated + // range must be no longer than 100Mbp (mega base pairs). See the + // [Annotation resource][google.genomics.v1.Annotation] + // for additional restrictions on each field. + CreateAnnotation(ctx context.Context, in *CreateAnnotationRequest, opts ...grpc.CallOption) (*Annotation, error) + // Creates one or more new annotations atomically. All annotations must + // belong to the same annotation set. Caller must have WRITE + // permission for this annotation set. For optimal performance, batch + // positionally adjacent annotations together. + // + // If the request has a systemic issue, such as an attempt to write to + // an inaccessible annotation set, the entire RPC will fail accordingly. For + // lesser data issues, when possible an error will be isolated to the + // corresponding batch entry in the response; the remaining well formed + // annotations will be created normally. + // + // For details on the requirements for each individual annotation resource, + // see + // [CreateAnnotation][google.genomics.v1.AnnotationServiceV1.CreateAnnotation]. + BatchCreateAnnotations(ctx context.Context, in *BatchCreateAnnotationsRequest, opts ...grpc.CallOption) (*BatchCreateAnnotationsResponse, error) + // Gets an annotation. Caller must have READ permission + // for the associated annotation set. + GetAnnotation(ctx context.Context, in *GetAnnotationRequest, opts ...grpc.CallOption) (*Annotation, error) + // Updates an annotation. Caller must have + // WRITE permission for the associated dataset. + UpdateAnnotation(ctx context.Context, in *UpdateAnnotationRequest, opts ...grpc.CallOption) (*Annotation, error) + // Deletes an annotation. Caller must have WRITE permission for + // the associated annotation set. + DeleteAnnotation(ctx context.Context, in *DeleteAnnotationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Searches for annotations that match the given criteria. Results are + // ordered by genomic coordinate (by reference sequence, then position). + // Annotations with equivalent genomic coordinates are returned in an + // unspecified order. This order is consistent, such that two queries for the + // same content (regardless of page size) yield annotations in the same order + // across their respective streams of paginated responses. Caller must have + // READ permission for the queried annotation sets. + SearchAnnotations(ctx context.Context, in *SearchAnnotationsRequest, opts ...grpc.CallOption) (*SearchAnnotationsResponse, error) +} + +type annotationServiceV1Client struct { + cc *grpc.ClientConn +} + +func NewAnnotationServiceV1Client(cc *grpc.ClientConn) AnnotationServiceV1Client { + return &annotationServiceV1Client{cc} +} + +func (c *annotationServiceV1Client) CreateAnnotationSet(ctx context.Context, in *CreateAnnotationSetRequest, opts ...grpc.CallOption) (*AnnotationSet, error) { + out := new(AnnotationSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/CreateAnnotationSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) GetAnnotationSet(ctx context.Context, in *GetAnnotationSetRequest, opts ...grpc.CallOption) (*AnnotationSet, error) { + out := new(AnnotationSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/GetAnnotationSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) UpdateAnnotationSet(ctx context.Context, in *UpdateAnnotationSetRequest, opts ...grpc.CallOption) (*AnnotationSet, error) { + out := new(AnnotationSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/UpdateAnnotationSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) DeleteAnnotationSet(ctx context.Context, in *DeleteAnnotationSetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/DeleteAnnotationSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) SearchAnnotationSets(ctx context.Context, in *SearchAnnotationSetsRequest, opts ...grpc.CallOption) (*SearchAnnotationSetsResponse, error) { + out := new(SearchAnnotationSetsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/SearchAnnotationSets", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) CreateAnnotation(ctx context.Context, in *CreateAnnotationRequest, opts ...grpc.CallOption) (*Annotation, error) { + out := new(Annotation) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/CreateAnnotation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) BatchCreateAnnotations(ctx context.Context, in *BatchCreateAnnotationsRequest, opts ...grpc.CallOption) (*BatchCreateAnnotationsResponse, error) { + out := new(BatchCreateAnnotationsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/BatchCreateAnnotations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) GetAnnotation(ctx context.Context, in *GetAnnotationRequest, opts ...grpc.CallOption) (*Annotation, error) { + out := new(Annotation) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/GetAnnotation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) UpdateAnnotation(ctx context.Context, in *UpdateAnnotationRequest, opts ...grpc.CallOption) (*Annotation, error) { + out := new(Annotation) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/UpdateAnnotation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) DeleteAnnotation(ctx context.Context, in *DeleteAnnotationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/DeleteAnnotation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *annotationServiceV1Client) SearchAnnotations(ctx context.Context, in *SearchAnnotationsRequest, opts ...grpc.CallOption) (*SearchAnnotationsResponse, error) { + out := new(SearchAnnotationsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.AnnotationServiceV1/SearchAnnotations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for AnnotationServiceV1 service + +type AnnotationServiceV1Server interface { + // Creates a new annotation set. Caller must have WRITE permission for the + // associated dataset. + // + // The following fields are required: + // + // * [datasetId][google.genomics.v1.AnnotationSet.dataset_id] + // * [referenceSetId][google.genomics.v1.AnnotationSet.reference_set_id] + // + // All other fields may be optionally specified, unless documented as being + // server-generated (for example, the `id` field). + CreateAnnotationSet(context.Context, *CreateAnnotationSetRequest) (*AnnotationSet, error) + // Gets an annotation set. Caller must have READ permission for + // the associated dataset. + GetAnnotationSet(context.Context, *GetAnnotationSetRequest) (*AnnotationSet, error) + // Updates an annotation set. The update must respect all mutability + // restrictions and other invariants described on the annotation set resource. + // Caller must have WRITE permission for the associated dataset. + UpdateAnnotationSet(context.Context, *UpdateAnnotationSetRequest) (*AnnotationSet, error) + // Deletes an annotation set. Caller must have WRITE permission + // for the associated annotation set. + DeleteAnnotationSet(context.Context, *DeleteAnnotationSetRequest) (*google_protobuf1.Empty, error) + // Searches for annotation sets that match the given criteria. Annotation sets + // are returned in an unspecified order. This order is consistent, such that + // two queries for the same content (regardless of page size) yield annotation + // sets in the same order across their respective streams of paginated + // responses. Caller must have READ permission for the queried datasets. + SearchAnnotationSets(context.Context, *SearchAnnotationSetsRequest) (*SearchAnnotationSetsResponse, error) + // Creates a new annotation. Caller must have WRITE permission + // for the associated annotation set. + // + // The following fields are required: + // + // * [annotationSetId][google.genomics.v1.Annotation.annotation_set_id] + // * [referenceName][google.genomics.v1.Annotation.reference_name] or + // [referenceId][google.genomics.v1.Annotation.reference_id] + // + // ### Transcripts + // + // For annotations of type TRANSCRIPT, the following fields of + // [transcript][google.genomics.v1.Annotation.transcript] must be provided: + // + // * [exons.start][google.genomics.v1.Transcript.Exon.start] + // * [exons.end][google.genomics.v1.Transcript.Exon.end] + // + // All other fields may be optionally specified, unless documented as being + // server-generated (for example, the `id` field). The annotated + // range must be no longer than 100Mbp (mega base pairs). See the + // [Annotation resource][google.genomics.v1.Annotation] + // for additional restrictions on each field. + CreateAnnotation(context.Context, *CreateAnnotationRequest) (*Annotation, error) + // Creates one or more new annotations atomically. All annotations must + // belong to the same annotation set. Caller must have WRITE + // permission for this annotation set. For optimal performance, batch + // positionally adjacent annotations together. + // + // If the request has a systemic issue, such as an attempt to write to + // an inaccessible annotation set, the entire RPC will fail accordingly. For + // lesser data issues, when possible an error will be isolated to the + // corresponding batch entry in the response; the remaining well formed + // annotations will be created normally. + // + // For details on the requirements for each individual annotation resource, + // see + // [CreateAnnotation][google.genomics.v1.AnnotationServiceV1.CreateAnnotation]. + BatchCreateAnnotations(context.Context, *BatchCreateAnnotationsRequest) (*BatchCreateAnnotationsResponse, error) + // Gets an annotation. Caller must have READ permission + // for the associated annotation set. + GetAnnotation(context.Context, *GetAnnotationRequest) (*Annotation, error) + // Updates an annotation. Caller must have + // WRITE permission for the associated dataset. + UpdateAnnotation(context.Context, *UpdateAnnotationRequest) (*Annotation, error) + // Deletes an annotation. Caller must have WRITE permission for + // the associated annotation set. + DeleteAnnotation(context.Context, *DeleteAnnotationRequest) (*google_protobuf1.Empty, error) + // Searches for annotations that match the given criteria. Results are + // ordered by genomic coordinate (by reference sequence, then position). + // Annotations with equivalent genomic coordinates are returned in an + // unspecified order. This order is consistent, such that two queries for the + // same content (regardless of page size) yield annotations in the same order + // across their respective streams of paginated responses. Caller must have + // READ permission for the queried annotation sets. + SearchAnnotations(context.Context, *SearchAnnotationsRequest) (*SearchAnnotationsResponse, error) +} + +func RegisterAnnotationServiceV1Server(s *grpc.Server, srv AnnotationServiceV1Server) { + s.RegisterService(&_AnnotationServiceV1_serviceDesc, srv) +} + +func _AnnotationServiceV1_CreateAnnotationSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateAnnotationSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).CreateAnnotationSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/CreateAnnotationSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).CreateAnnotationSet(ctx, req.(*CreateAnnotationSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_GetAnnotationSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAnnotationSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).GetAnnotationSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/GetAnnotationSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).GetAnnotationSet(ctx, req.(*GetAnnotationSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_UpdateAnnotationSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateAnnotationSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).UpdateAnnotationSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/UpdateAnnotationSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).UpdateAnnotationSet(ctx, req.(*UpdateAnnotationSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_DeleteAnnotationSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteAnnotationSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).DeleteAnnotationSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/DeleteAnnotationSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).DeleteAnnotationSet(ctx, req.(*DeleteAnnotationSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_SearchAnnotationSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchAnnotationSetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).SearchAnnotationSets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/SearchAnnotationSets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).SearchAnnotationSets(ctx, req.(*SearchAnnotationSetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_CreateAnnotation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateAnnotationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).CreateAnnotation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/CreateAnnotation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).CreateAnnotation(ctx, req.(*CreateAnnotationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_BatchCreateAnnotations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchCreateAnnotationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).BatchCreateAnnotations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/BatchCreateAnnotations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).BatchCreateAnnotations(ctx, req.(*BatchCreateAnnotationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_GetAnnotation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAnnotationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).GetAnnotation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/GetAnnotation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).GetAnnotation(ctx, req.(*GetAnnotationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_UpdateAnnotation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateAnnotationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).UpdateAnnotation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/UpdateAnnotation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).UpdateAnnotation(ctx, req.(*UpdateAnnotationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_DeleteAnnotation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteAnnotationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).DeleteAnnotation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/DeleteAnnotation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).DeleteAnnotation(ctx, req.(*DeleteAnnotationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AnnotationServiceV1_SearchAnnotations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchAnnotationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AnnotationServiceV1Server).SearchAnnotations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.AnnotationServiceV1/SearchAnnotations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AnnotationServiceV1Server).SearchAnnotations(ctx, req.(*SearchAnnotationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _AnnotationServiceV1_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.genomics.v1.AnnotationServiceV1", + HandlerType: (*AnnotationServiceV1Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateAnnotationSet", + Handler: _AnnotationServiceV1_CreateAnnotationSet_Handler, + }, + { + MethodName: "GetAnnotationSet", + Handler: _AnnotationServiceV1_GetAnnotationSet_Handler, + }, + { + MethodName: "UpdateAnnotationSet", + Handler: _AnnotationServiceV1_UpdateAnnotationSet_Handler, + }, + { + MethodName: "DeleteAnnotationSet", + Handler: _AnnotationServiceV1_DeleteAnnotationSet_Handler, + }, + { + MethodName: "SearchAnnotationSets", + Handler: _AnnotationServiceV1_SearchAnnotationSets_Handler, + }, + { + MethodName: "CreateAnnotation", + Handler: _AnnotationServiceV1_CreateAnnotation_Handler, + }, + { + MethodName: "BatchCreateAnnotations", + Handler: _AnnotationServiceV1_BatchCreateAnnotations_Handler, + }, + { + MethodName: "GetAnnotation", + Handler: _AnnotationServiceV1_GetAnnotation_Handler, + }, + { + MethodName: "UpdateAnnotation", + Handler: _AnnotationServiceV1_UpdateAnnotation_Handler, + }, + { + MethodName: "DeleteAnnotation", + Handler: _AnnotationServiceV1_DeleteAnnotation_Handler, + }, + { + MethodName: "SearchAnnotations", + Handler: _AnnotationServiceV1_SearchAnnotations_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/genomics/v1/annotations.proto", +} + +func init() { proto.RegisterFile("google/genomics/v1/annotations.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2188 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0xdb, 0xc8, + 0x15, 0x0f, 0xf5, 0x69, 0x3f, 0xd9, 0x32, 0x3d, 0xf1, 0xda, 0x5a, 0x39, 0x1f, 0x0e, 0xf3, 0x65, + 0xb8, 0x89, 0xbc, 0x51, 0x80, 0x36, 0x75, 0xda, 0x74, 0x65, 0x9a, 0xb6, 0xa7, 0xab, 0x50, 0xc2, + 0x90, 0x72, 0xe1, 0x5e, 0x08, 0x86, 0x1a, 0x7b, 0x89, 0xd8, 0x94, 0x4a, 0xd2, 0x6e, 0xbc, 0xc5, + 0x02, 0x8b, 0xc5, 0x16, 0x3d, 0xf5, 0xb2, 0xbb, 0xf7, 0x5e, 0x0a, 0xb4, 0xff, 0x43, 0x2f, 0x05, + 0x7a, 0x6f, 0x0f, 0x45, 0xff, 0x83, 0x5e, 0xf6, 0xda, 0x53, 0x81, 0x5e, 0x8a, 0x19, 0x92, 0x12, + 0x45, 0x51, 0xb6, 0xdc, 0x00, 0xbd, 0x71, 0xde, 0xbc, 0xf7, 0xe6, 0x37, 0xbf, 0x99, 0xf7, 0x31, + 0x12, 0x3c, 0x38, 0xee, 0xf5, 0x8e, 0x4f, 0xe8, 0xe6, 0x31, 0x75, 0x7a, 0xa7, 0xb6, 0xe5, 0x6d, + 0x9e, 0x3f, 0xdb, 0x34, 0x1d, 0xa7, 0xe7, 0x9b, 0xbe, 0xdd, 0x73, 0xbc, 0x5a, 0xdf, 0xed, 0xf9, + 0x3d, 0x84, 0x02, 0xad, 0x5a, 0xa4, 0x55, 0x3b, 0x7f, 0x56, 0xbd, 0x15, 0x5a, 0x9a, 0x7d, 0x7b, + 0xdc, 0xa2, 0xba, 0x1a, 0xce, 0xf2, 0xd1, 0x9b, 0xb3, 0xa3, 0x4d, 0x7a, 0xda, 0xf7, 0x2f, 0xc2, + 0xc9, 0xb5, 0xe4, 0xe4, 0x91, 0x4d, 0x4f, 0xba, 0xc6, 0xa9, 0xe9, 0xbd, 0x0d, 0x35, 0x6e, 0x25, + 0x35, 0x3c, 0xdf, 0x3d, 0xb3, 0xfc, 0x70, 0xf6, 0x4e, 0x72, 0xf6, 0x97, 0xae, 0xd9, 0xef, 0x53, + 0x37, 0x5a, 0x7c, 0x25, 0x9c, 0x77, 0xfb, 0xd6, 0xa6, 0xe7, 0x9b, 0xfe, 0x59, 0x38, 0x21, 0x7d, + 0x97, 0x81, 0xf9, 0xc6, 0x00, 0xab, 0x46, 0x7d, 0x54, 0x86, 0x8c, 0xdd, 0xad, 0x08, 0x6b, 0xc2, + 0xfa, 0x2c, 0xc9, 0xd8, 0x5d, 0x74, 0x1b, 0xa0, 0x6b, 0xfa, 0xa6, 0x47, 0x7d, 0xc3, 0xee, 0x56, + 0x32, 0x5c, 0x3e, 0x1b, 0x4a, 0x70, 0x17, 0xad, 0x83, 0xe8, 0xd2, 0x23, 0xea, 0x52, 0xc7, 0xa2, + 0x46, 0xa8, 0x94, 0xe5, 0x4a, 0xe5, 0x81, 0x5c, 0xe3, 0x9a, 0x08, 0x72, 0x8e, 0x79, 0x4a, 0x2b, + 0x39, 0x3e, 0xcb, 0xbf, 0x99, 0x73, 0xaf, 0x77, 0xe6, 0x5a, 0xd4, 0x38, 0x73, 0xed, 0x4a, 0x3e, + 0x70, 0x1e, 0x48, 0x3a, 0xae, 0x8d, 0xbe, 0x0f, 0x39, 0xff, 0xa2, 0x4f, 0x2b, 0x85, 0x35, 0x61, + 0xbd, 0x5c, 0x97, 0x6a, 0xe3, 0xa4, 0xd7, 0x86, 0xe0, 0xf5, 0x8b, 0x3e, 0x25, 0x5c, 0x1f, 0xfd, + 0x04, 0x72, 0xb6, 0x73, 0xd4, 0xab, 0x2c, 0xae, 0x65, 0xd7, 0x4b, 0xf5, 0xef, 0x5d, 0x6e, 0xa7, + 0x51, 0xbf, 0x86, 0x9d, 0xa3, 0x9e, 0xe2, 0xf8, 0xee, 0x05, 0xe1, 0x86, 0x55, 0x0d, 0x66, 0x07, + 0x22, 0x24, 0x42, 0xf6, 0x2d, 0xbd, 0x08, 0x29, 0x61, 0x9f, 0xe8, 0x23, 0xc8, 0x9f, 0x9b, 0x27, + 0x67, 0x94, 0xd3, 0x51, 0xaa, 0x57, 0xa3, 0x05, 0x22, 0xfa, 0x6b, 0x4d, 0xdb, 0xf3, 0x0f, 0x98, + 0x06, 0x09, 0x14, 0xb7, 0x32, 0x2f, 0x04, 0xe9, 0xaf, 0x39, 0x80, 0xe1, 0xb2, 0x63, 0x44, 0x6f, + 0xc0, 0xe2, 0xf0, 0xd6, 0x18, 0x23, 0x7c, 0x2f, 0x98, 0x71, 0xb4, 0x31, 0x2e, 0xb3, 0x31, 0x2e, + 0xef, 0xc1, 0xdc, 0xf0, 0x24, 0xec, 0x6e, 0xc8, 0x73, 0x69, 0x20, 0xc3, 0x5d, 0xf4, 0x10, 0x86, + 0x87, 0x62, 0x70, 0x07, 0x01, 0xe5, 0xf3, 0x03, 0xa9, 0xca, 0x3c, 0x2d, 0x41, 0xde, 0xf3, 0x4d, + 0xd7, 0xe7, 0xbc, 0x67, 0x49, 0x30, 0x60, 0x34, 0x50, 0xa7, 0x5b, 0x29, 0x72, 0x19, 0xfb, 0x0c, + 0xdc, 0x9d, 0x53, 0xd7, 0xa3, 0x86, 0xe7, 0xbb, 0xa6, 0xd3, 0xad, 0xcc, 0xac, 0x09, 0xeb, 0x33, + 0xcc, 0x1d, 0x97, 0x6a, 0x5c, 0x38, 0x38, 0xc5, 0xd9, 0x6b, 0x9e, 0x62, 0x03, 0x8a, 0xe7, 0xa6, + 0x6b, 0x9b, 0x8e, 0x5f, 0x01, 0xce, 0xf3, 0xc3, 0x34, 0xd3, 0x83, 0x40, 0x65, 0xe8, 0x61, 0xff, + 0x06, 0x89, 0xec, 0xd0, 0xc7, 0x00, 0x0c, 0x83, 0x67, 0xb9, 0x76, 0xdf, 0xaf, 0x94, 0xb8, 0x97, + 0x3b, 0x69, 0x5e, 0xf4, 0x81, 0xd6, 0xfe, 0x0d, 0x12, 0xb3, 0x41, 0x3f, 0x0a, 0xaf, 0xd2, 0x1c, + 0xbf, 0x4a, 0xeb, 0x97, 0x83, 0xff, 0xbf, 0xdc, 0xa3, 0xed, 0x62, 0x68, 0x25, 0xfd, 0x67, 0x16, + 0x16, 0xc7, 0xb6, 0x8f, 0x5e, 0x85, 0x74, 0x0b, 0x9c, 0xee, 0x8d, 0xa9, 0x38, 0xab, 0xc5, 0x68, + 0xdf, 0x81, 0x02, 0x3d, 0x3a, 0xa2, 0x96, 0xcf, 0x51, 0x95, 0xeb, 0x4f, 0xa6, 0xf3, 0xa0, 0x70, + 0x1b, 0x12, 0xda, 0xa2, 0xc7, 0xb0, 0x60, 0x9e, 0xf8, 0xd4, 0x75, 0x4c, 0x9f, 0x1a, 0x6f, 0x4c, + 0x8f, 0x7a, 0x51, 0x5a, 0x18, 0x88, 0xb7, 0x99, 0x14, 0xad, 0x40, 0xf1, 0x98, 0x3a, 0xb1, 0x1b, + 0x5b, 0x60, 0xc3, 0xe0, 0xb2, 0x0e, 0xcf, 0xc1, 0xb0, 0xbb, 0x5e, 0x25, 0xbf, 0x96, 0x65, 0x97, + 0x75, 0x28, 0xc5, 0x5d, 0x0f, 0xfd, 0x0c, 0xc0, 0xea, 0x39, 0x5d, 0x9b, 0xe7, 0xda, 0x4a, 0x81, + 0x1f, 0xd3, 0x0f, 0xa6, 0x83, 0x2c, 0x9f, 0xd8, 0x8e, 0x6d, 0x99, 0x27, 0x72, 0x64, 0x4f, 0x62, + 0xae, 0x50, 0x0f, 0x3e, 0xb0, 0x42, 0x05, 0xc3, 0xb3, 0x8f, 0x1d, 0xfb, 0xc8, 0xb6, 0x4c, 0xc7, + 0xa2, 0x3c, 0x02, 0xca, 0xf5, 0xad, 0xeb, 0xad, 0xa1, 0xc5, 0x3c, 0x90, 0x25, 0x2b, 0x45, 0x5a, + 0xfd, 0xbd, 0x00, 0x8b, 0x63, 0x90, 0x58, 0x30, 0xb2, 0x48, 0xf5, 0x2a, 0x02, 0xdf, 0x7d, 0x30, + 0x40, 0x0d, 0x98, 0xa3, 0xef, 0x38, 0x8f, 0x27, 0x9c, 0x9a, 0x0c, 0xdf, 0x77, 0xea, 0xd5, 0x56, + 0x42, 0x3d, 0xdc, 0x25, 0x25, 0x3a, 0xf8, 0xf6, 0x58, 0xee, 0xb5, 0x7a, 0x8e, 0x45, 0xfb, 0xb1, + 0x9c, 0x3d, 0x1b, 0x4a, 0x70, 0x97, 0x9d, 0x4b, 0xef, 0xd4, 0x3e, 0x8d, 0x9d, 0x0b, 0x1b, 0xe2, + 0xae, 0xf4, 0x39, 0xe4, 0xd8, 0x6d, 0x41, 0x4b, 0x20, 0xea, 0x87, 0x6d, 0xc5, 0xe8, 0xa8, 0x5a, + 0x5b, 0x91, 0xf1, 0x2e, 0x56, 0x76, 0xc4, 0x1b, 0xa8, 0x0c, 0xc0, 0xa5, 0x2d, 0x7d, 0x5f, 0x21, + 0xa2, 0x80, 0xe6, 0x61, 0x16, 0xab, 0x9a, 0x42, 0x74, 0xdc, 0x52, 0xc5, 0x0c, 0x9a, 0x83, 0x99, + 0x1d, 0xa5, 0xa9, 0xf0, 0x51, 0x16, 0x89, 0x30, 0xa7, 0x75, 0xb6, 0x35, 0x1d, 0xeb, 0x1d, 0x2e, + 0xc9, 0xa1, 0x22, 0x64, 0x35, 0xb5, 0x2d, 0xe6, 0x99, 0x1f, 0x4d, 0x27, 0x1d, 0x59, 0xef, 0x90, + 0x46, 0x53, 0x2c, 0xb0, 0x09, 0x59, 0x3d, 0x10, 0x8b, 0xd2, 0x5f, 0x04, 0x28, 0x04, 0x77, 0x0d, + 0x2d, 0x03, 0x52, 0x76, 0x77, 0x15, 0x59, 0x4f, 0x60, 0x10, 0x61, 0x2e, 0x94, 0x47, 0x28, 0xca, + 0x00, 0xbb, 0xa4, 0xf1, 0x5a, 0xd1, 0xf6, 0xf1, 0xae, 0x2e, 0x66, 0x50, 0x15, 0x96, 0xf9, 0xd8, + 0x68, 0x13, 0x45, 0x53, 0xc8, 0x01, 0x56, 0xf7, 0x0c, 0xac, 0xee, 0x28, 0x4d, 0x31, 0x8b, 0x10, + 0x94, 0xb5, 0x43, 0xb5, 0xa5, 0x1e, 0xbe, 0x6e, 0x75, 0x34, 0x83, 0xa1, 0xc9, 0xa1, 0x0f, 0x60, + 0x51, 0x6d, 0xa9, 0x09, 0x71, 0x9e, 0x6d, 0x4e, 0xd3, 0x5b, 0x6d, 0x63, 0xaf, 0x81, 0x55, 0xb1, + 0x30, 0x18, 0x36, 0x5b, 0x9a, 0x26, 0x16, 0xd9, 0x22, 0x5a, 0xbb, 0x89, 0x65, 0xc5, 0xd0, 0xb0, + 0xae, 0x18, 0x3b, 0x58, 0x23, 0x9d, 0x36, 0xdf, 0xe7, 0x8c, 0xf4, 0xe7, 0x0c, 0x2c, 0xa5, 0x5d, + 0x0d, 0xf4, 0x10, 0xee, 0xc9, 0x4d, 0xac, 0x62, 0xb9, 0xd1, 0x34, 0x34, 0xbc, 0xa7, 0xe2, 0x5d, + 0x2c, 0x37, 0x54, 0x39, 0x49, 0xf3, 0x5d, 0x58, 0x4d, 0x57, 0x8b, 0xf1, 0xde, 0x51, 0x65, 0x85, + 0xe8, 0x0c, 0x5a, 0x06, 0x01, 0x14, 0xb6, 0x15, 0x15, 0xef, 0x31, 0xd6, 0x17, 0x61, 0xbe, 0x89, + 0x3f, 0x51, 0x9a, 0x87, 0x46, 0x28, 0xe2, 0xfb, 0x0b, 0x45, 0xed, 0x86, 0xbe, 0xdf, 0xda, 0x53, + 0x54, 0x2c, 0x07, 0x87, 0x10, 0x1b, 0x17, 0x98, 0xe5, 0x0e, 0xe9, 0xec, 0x19, 0x44, 0xd1, 0xda, + 0x2d, 0x55, 0x53, 0xc4, 0x22, 0x3b, 0x83, 0x7d, 0xac, 0xe9, 0x2d, 0xb9, 0xf5, 0xba, 0xdd, 0xd0, + 0xf1, 0x36, 0x6e, 0x62, 0xfd, 0x50, 0x9c, 0x41, 0x2b, 0x70, 0x53, 0x6e, 0xa9, 0xbb, 0x0a, 0xd1, + 0x0c, 0x4d, 0x51, 0x35, 0xac, 0xe3, 0x03, 0x36, 0x31, 0x8b, 0x16, 0xa0, 0x44, 0xb0, 0xf6, 0x89, + 0xb1, 0xdb, 0x90, 0xf5, 0x16, 0x11, 0x81, 0x09, 0x1a, 0x9a, 0xd6, 0x92, 0x71, 0x83, 0x73, 0x53, + 0xe2, 0xab, 0x92, 0x96, 0xae, 0xc8, 0x3a, 0x3e, 0x50, 0xc4, 0x39, 0x06, 0xee, 0x75, 0xa7, 0xa9, + 0xe3, 0x76, 0x53, 0x31, 0x88, 0xd2, 0x6e, 0x11, 0x5d, 0xd9, 0x11, 0xe7, 0xa5, 0x7f, 0x64, 0x00, + 0x86, 0x69, 0x3b, 0x9e, 0x47, 0x84, 0x91, 0x3c, 0xf2, 0x43, 0xc8, 0xd3, 0x77, 0x2c, 0x37, 0x04, + 0x31, 0x72, 0xff, 0xf2, 0xf4, 0x5f, 0x53, 0xde, 0xf5, 0x1c, 0x12, 0x58, 0xa0, 0x03, 0x58, 0xb0, + 0x7a, 0x5d, 0xdb, 0x39, 0x36, 0x3c, 0xfa, 0x8b, 0x33, 0x56, 0x1f, 0x79, 0x9c, 0x94, 0xea, 0x4f, + 0xaf, 0x70, 0x22, 0x73, 0x2b, 0x2d, 0x34, 0x22, 0x65, 0x6b, 0x64, 0x5c, 0x35, 0x21, 0xc7, 0x96, + 0x19, 0x16, 0x5a, 0x21, 0xa5, 0xd0, 0x66, 0x86, 0x85, 0xf6, 0x19, 0xe4, 0x8f, 0xdc, 0xa8, 0xde, + 0x97, 0xea, 0xab, 0x63, 0x75, 0x02, 0x3b, 0xfe, 0xf3, 0x7a, 0x58, 0x28, 0xb8, 0x66, 0xf5, 0x05, + 0x94, 0x47, 0x41, 0x4c, 0xbb, 0x98, 0xf4, 0x63, 0x80, 0x61, 0xca, 0x40, 0x77, 0xa1, 0x14, 0x76, + 0x68, 0xbc, 0x5f, 0x08, 0xa8, 0x0d, 0x9b, 0x36, 0xde, 0x2c, 0x04, 0x6d, 0x4c, 0x26, 0x6a, 0x63, + 0xa4, 0x23, 0xa8, 0xca, 0x2e, 0x35, 0x7d, 0x3a, 0xd2, 0x61, 0x11, 0x86, 0xc2, 0xf3, 0xd1, 0x3e, + 0x94, 0x47, 0x9b, 0x1c, 0xee, 0xb1, 0x54, 0xbf, 0x77, 0x65, 0x8f, 0x46, 0xe6, 0x47, 0x9a, 0x20, + 0x49, 0x81, 0x95, 0x3d, 0xea, 0xa7, 0x2e, 0x92, 0xda, 0x49, 0x09, 0xa9, 0x9d, 0x94, 0xf4, 0x37, + 0x01, 0xaa, 0x9d, 0x7e, 0x77, 0x12, 0xde, 0x6b, 0xb8, 0x4a, 0xd9, 0x5b, 0xe6, 0x7f, 0xdb, 0x1b, + 0x7a, 0x09, 0xa5, 0x33, 0x8e, 0x89, 0xbf, 0x00, 0xc2, 0x53, 0x1f, 0xef, 0x0e, 0x76, 0xd9, 0x23, + 0xe1, 0xb5, 0xe9, 0xbd, 0x25, 0x10, 0xa8, 0xb3, 0x6f, 0x69, 0x1f, 0xaa, 0x3b, 0xf4, 0x84, 0xbe, + 0xff, 0x86, 0xa4, 0x7f, 0x09, 0xb0, 0xaa, 0x51, 0xd3, 0xb5, 0x3e, 0x1d, 0x71, 0xe5, 0x45, 0xbe, + 0xee, 0x42, 0x69, 0xf8, 0x34, 0x88, 0x0a, 0x14, 0x0c, 0xde, 0x06, 0x5e, 0xea, 0xe3, 0x20, 0x73, + 0xe9, 0xe3, 0x20, 0xde, 0xd0, 0xbe, 0x80, 0x3c, 0x6b, 0x48, 0xbc, 0x4a, 0x6e, 0x2d, 0x3b, 0x65, + 0xe3, 0x18, 0x18, 0xb0, 0xd2, 0xd6, 0x37, 0x8f, 0xa9, 0xe1, 0xf7, 0xde, 0x52, 0x27, 0x7a, 0x56, + 0x30, 0x89, 0xce, 0x04, 0x68, 0x15, 0xf8, 0xc0, 0xf0, 0xec, 0xcf, 0x82, 0xb7, 0x45, 0x9e, 0xcc, + 0x30, 0x81, 0x66, 0x7f, 0x46, 0xa5, 0xaf, 0x05, 0xb8, 0x95, 0xbe, 0x69, 0xaf, 0xdf, 0x73, 0x3c, + 0x8a, 0x7e, 0x0a, 0x0b, 0xa3, 0x0c, 0x06, 0x3b, 0x9f, 0xea, 0x9c, 0xcb, 0x23, 0x14, 0x7b, 0xe8, + 0x11, 0x2c, 0x38, 0xf4, 0x9d, 0x6f, 0xc4, 0xd0, 0x06, 0xfc, 0xcc, 0x33, 0x71, 0x3b, 0x42, 0x2c, + 0x1d, 0xc2, 0x4a, 0x32, 0xa8, 0xa2, 0x43, 0x78, 0x05, 0x30, 0x74, 0x1a, 0x46, 0xd3, 0x9d, 0xcb, + 0x91, 0x90, 0x98, 0x85, 0xf4, 0x85, 0x00, 0xb7, 0xb7, 0x4d, 0xdf, 0xfa, 0x34, 0xb9, 0xc0, 0xe0, + 0x98, 0x3f, 0x86, 0x52, 0xec, 0x39, 0x1b, 0x6e, 0xf6, 0xaa, 0x25, 0xe2, 0x26, 0xec, 0x3c, 0xdc, + 0xc0, 0x59, 0xec, 0x0d, 0x19, 0x4a, 0x70, 0x57, 0xfa, 0x4e, 0x80, 0x3b, 0x93, 0x20, 0x84, 0xa4, + 0x13, 0x28, 0x52, 0xc7, 0x77, 0x6d, 0x1a, 0xad, 0xff, 0x22, 0x6d, 0xfd, 0xcb, 0x9d, 0xd4, 0x82, + 0xce, 0x3c, 0x72, 0x54, 0xf5, 0x20, 0x1f, 0x34, 0xe6, 0x1b, 0x50, 0x08, 0x1e, 0xc5, 0x21, 0x7d, + 0x28, 0xf2, 0xed, 0xf6, 0xad, 0x9a, 0xc6, 0x67, 0x48, 0xa8, 0x91, 0xa0, 0x3b, 0x73, 0x6d, 0xba, + 0x5f, 0xc2, 0xd2, 0x48, 0xda, 0x8a, 0x48, 0xbe, 0x0f, 0xb1, 0x1c, 0x30, 0x8c, 0xc9, 0xb9, 0xa1, + 0x10, 0x77, 0xa5, 0x3f, 0x09, 0xb0, 0x92, 0x4c, 0x56, 0xd7, 0x71, 0xf0, 0xbe, 0xe8, 0xdf, 0x2f, + 0x31, 0xbd, 0x82, 0x95, 0x64, 0x62, 0xba, 0xd6, 0xee, 0x7f, 0x93, 0x81, 0x4a, 0x32, 0x32, 0x07, + 0x97, 0xf4, 0x09, 0xa0, 0xb1, 0xbc, 0x16, 0xa5, 0x24, 0x31, 0x91, 0xd8, 0x3c, 0x74, 0x3f, 0xf1, + 0x56, 0xe6, 0x57, 0x72, 0xff, 0xc6, 0xe8, 0x6b, 0xf9, 0xf1, 0xd8, 0x6b, 0x39, 0x1b, 0xaa, 0x4d, + 0x7a, 0x2f, 0xe7, 0x52, 0x2a, 0x6b, 0x7e, 0x58, 0xc6, 0x47, 0xd3, 0x52, 0xe1, 0xd2, 0xb4, 0x54, + 0x1c, 0x4d, 0x4b, 0xdb, 0x25, 0x98, 0x1d, 0x2c, 0x2a, 0xfd, 0x5a, 0x80, 0x0f, 0x53, 0x98, 0x08, + 0x63, 0xe5, 0xfd, 0xe3, 0x75, 0xca, 0xb4, 0xb4, 0x41, 0xa1, 0x3c, 0x9a, 0x80, 0x59, 0x5f, 0xda, + 0x50, 0xd5, 0x96, 0xce, 0x7b, 0x39, 0x23, 0xe5, 0x7d, 0x50, 0x82, 0xe2, 0x9e, 0xa2, 0x2a, 0x04, + 0xcb, 0xa2, 0xc0, 0x06, 0x07, 0x0d, 0x82, 0x1b, 0x2a, 0xeb, 0xc9, 0x67, 0x20, 0xc7, 0x66, 0xc4, + 0x2c, 0x7f, 0x43, 0x90, 0x86, 0xaa, 0xc9, 0x04, 0xb7, 0x75, 0x31, 0x57, 0xff, 0x6a, 0x1e, 0x6e, + 0xc6, 0xf3, 0xa8, 0x7b, 0x6e, 0x5b, 0xf4, 0xe0, 0x19, 0xfa, 0x56, 0x80, 0x9b, 0x29, 0xbd, 0x06, + 0xaa, 0xa5, 0xed, 0x75, 0x72, 0x53, 0x52, 0xbd, 0x3a, 0x71, 0x4b, 0x1b, 0x5f, 0xfe, 0xfd, 0x9f, + 0xdf, 0x64, 0x1e, 0x48, 0x28, 0xf1, 0x73, 0x20, 0xf5, 0xbd, 0xad, 0x44, 0xd5, 0x47, 0x5f, 0x0b, + 0x20, 0x26, 0x5b, 0x13, 0x94, 0xfa, 0x23, 0xd4, 0x84, 0x06, 0x66, 0x1a, 0x40, 0x35, 0x0e, 0x68, + 0x1d, 0x3d, 0x1a, 0x07, 0xb4, 0xf9, 0xab, 0xb1, 0x48, 0xf8, 0x1c, 0xfd, 0x51, 0x80, 0x9b, 0x29, + 0x7d, 0x4e, 0x3a, 0x57, 0x93, 0x1b, 0xa2, 0x69, 0xa0, 0xbd, 0xe2, 0xd0, 0x5e, 0x54, 0xa7, 0x84, + 0x36, 0xc6, 0xdf, 0x6f, 0x05, 0xb8, 0x99, 0xd2, 0xc1, 0xa4, 0x43, 0x9d, 0xdc, 0xea, 0x54, 0x97, + 0xc7, 0xf2, 0x92, 0x72, 0xda, 0xf7, 0x2f, 0x22, 0xea, 0x36, 0xa6, 0xa5, 0xee, 0x77, 0x02, 0x2c, + 0xa5, 0x75, 0x04, 0x68, 0x33, 0x0d, 0xd0, 0x25, 0x0d, 0x53, 0xf5, 0xa3, 0xe9, 0x0d, 0x82, 0x58, + 0x96, 0x1e, 0x70, 0xac, 0x77, 0xa4, 0x0f, 0x53, 0xb0, 0x7a, 0xdc, 0x70, 0x4b, 0xd8, 0x40, 0x5f, + 0x09, 0x20, 0x26, 0xef, 0x77, 0xfa, 0x8d, 0x9b, 0xd0, 0x45, 0x54, 0xaf, 0x48, 0x0f, 0xd2, 0x7d, + 0x8e, 0xe3, 0xb6, 0xb4, 0x90, 0xc0, 0xb1, 0x15, 0xaf, 0x0e, 0x7f, 0x10, 0x60, 0x39, 0xbd, 0x04, + 0xa3, 0x67, 0xd7, 0x29, 0xd7, 0x01, 0xa4, 0xfa, 0xf5, 0x2b, 0xbc, 0xf4, 0x88, 0xc3, 0x5c, 0x93, + 0x56, 0x93, 0x30, 0xdf, 0x0c, 0xed, 0x18, 0x61, 0x5f, 0x0a, 0x30, 0x3f, 0x12, 0x7c, 0x68, 0xfd, + 0xca, 0xf8, 0x9c, 0x96, 0xaa, 0xc7, 0x1c, 0xc3, 0x3d, 0x74, 0x37, 0x81, 0x61, 0xe4, 0x6e, 0xb1, + 0x7b, 0xf5, 0xad, 0x00, 0x62, 0x32, 0xd2, 0xd2, 0x4f, 0x6d, 0x42, 0xcd, 0xbf, 0x12, 0xca, 0x73, + 0x0e, 0xe5, 0x69, 0xf5, 0x2a, 0x28, 0x23, 0xa7, 0xf8, 0x85, 0x00, 0x62, 0x32, 0xaa, 0xd2, 0x61, + 0x4d, 0xa8, 0xe6, 0x13, 0x03, 0x2f, 0x64, 0x66, 0xe3, 0x4a, 0x66, 0xbe, 0x11, 0x60, 0x71, 0xac, + 0xbe, 0xa1, 0x27, 0xd3, 0x44, 0xcf, 0xe0, 0xfa, 0x3c, 0x9d, 0x52, 0x3b, 0xbc, 0x39, 0xf7, 0x38, + 0xb6, 0x55, 0x69, 0x39, 0x89, 0x6d, 0x10, 0x65, 0xdb, 0x6f, 0x61, 0xd9, 0xea, 0x9d, 0xa6, 0xb8, + 0xdd, 0x16, 0x63, 0x1e, 0xdb, 0x6c, 0xcf, 0x6d, 0xe1, 0xe7, 0x5b, 0x91, 0x5e, 0xef, 0xc4, 0x74, + 0x8e, 0x6b, 0x3d, 0xf7, 0x78, 0xf3, 0x98, 0x3a, 0x9c, 0x91, 0xcd, 0x60, 0xca, 0xec, 0xdb, 0x5e, + 0xfc, 0x6f, 0xa6, 0x97, 0xd1, 0xf7, 0xbf, 0x05, 0xe1, 0x4d, 0x81, 0x6b, 0x3e, 0xff, 0x6f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xf4, 0x94, 0x75, 0x44, 0x8f, 0x1a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/cigar.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/cigar.pb.go new file mode 100644 index 0000000..2824a05 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/cigar.pb.go @@ -0,0 +1,169 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/cigar.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Describes the different types of CIGAR alignment operations that exist. +// Used wherever CIGAR alignments are used. +type CigarUnit_Operation int32 + +const ( + CigarUnit_OPERATION_UNSPECIFIED CigarUnit_Operation = 0 + // An alignment match indicates that a sequence can be aligned to the + // reference without evidence of an INDEL. Unlike the + // `SEQUENCE_MATCH` and `SEQUENCE_MISMATCH` operators, + // the `ALIGNMENT_MATCH` operator does not indicate whether the + // reference and read sequences are an exact match. This operator is + // equivalent to SAM's `M`. + CigarUnit_ALIGNMENT_MATCH CigarUnit_Operation = 1 + // The insert operator indicates that the read contains evidence of bases + // being inserted into the reference. This operator is equivalent to SAM's + // `I`. + CigarUnit_INSERT CigarUnit_Operation = 2 + // The delete operator indicates that the read contains evidence of bases + // being deleted from the reference. This operator is equivalent to SAM's + // `D`. + CigarUnit_DELETE CigarUnit_Operation = 3 + // The skip operator indicates that this read skips a long segment of the + // reference, but the bases have not been deleted. This operator is commonly + // used when working with RNA-seq data, where reads may skip long segments + // of the reference between exons. This operator is equivalent to SAM's + // `N`. + CigarUnit_SKIP CigarUnit_Operation = 4 + // The soft clip operator indicates that bases at the start/end of a read + // have not been considered during alignment. This may occur if the majority + // of a read maps, except for low quality bases at the start/end of a read. + // This operator is equivalent to SAM's `S`. Bases that are soft + // clipped will still be stored in the read. + CigarUnit_CLIP_SOFT CigarUnit_Operation = 5 + // The hard clip operator indicates that bases at the start/end of a read + // have been omitted from this alignment. This may occur if this linear + // alignment is part of a chimeric alignment, or if the read has been + // trimmed (for example, during error correction or to trim poly-A tails for + // RNA-seq). This operator is equivalent to SAM's `H`. + CigarUnit_CLIP_HARD CigarUnit_Operation = 6 + // The pad operator indicates that there is padding in an alignment. This + // operator is equivalent to SAM's `P`. + CigarUnit_PAD CigarUnit_Operation = 7 + // This operator indicates that this portion of the aligned sequence exactly + // matches the reference. This operator is equivalent to SAM's `=`. + CigarUnit_SEQUENCE_MATCH CigarUnit_Operation = 8 + // This operator indicates that this portion of the aligned sequence is an + // alignment match to the reference, but a sequence mismatch. This can + // indicate a SNP or a read error. This operator is equivalent to SAM's + // `X`. + CigarUnit_SEQUENCE_MISMATCH CigarUnit_Operation = 9 +) + +var CigarUnit_Operation_name = map[int32]string{ + 0: "OPERATION_UNSPECIFIED", + 1: "ALIGNMENT_MATCH", + 2: "INSERT", + 3: "DELETE", + 4: "SKIP", + 5: "CLIP_SOFT", + 6: "CLIP_HARD", + 7: "PAD", + 8: "SEQUENCE_MATCH", + 9: "SEQUENCE_MISMATCH", +} +var CigarUnit_Operation_value = map[string]int32{ + "OPERATION_UNSPECIFIED": 0, + "ALIGNMENT_MATCH": 1, + "INSERT": 2, + "DELETE": 3, + "SKIP": 4, + "CLIP_SOFT": 5, + "CLIP_HARD": 6, + "PAD": 7, + "SEQUENCE_MATCH": 8, + "SEQUENCE_MISMATCH": 9, +} + +func (x CigarUnit_Operation) String() string { + return proto.EnumName(CigarUnit_Operation_name, int32(x)) +} +func (CigarUnit_Operation) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +// A single CIGAR operation. +type CigarUnit struct { + Operation CigarUnit_Operation `protobuf:"varint,1,opt,name=operation,enum=google.genomics.v1.CigarUnit_Operation" json:"operation,omitempty"` + // The number of genomic bases that the operation runs for. Required. + OperationLength int64 `protobuf:"varint,2,opt,name=operation_length,json=operationLength" json:"operation_length,omitempty"` + // `referenceSequence` is only used at mismatches + // (`SEQUENCE_MISMATCH`) and deletions (`DELETE`). + // Filling this field replaces SAM's MD tag. If the relevant information is + // not available, this field is unset. + ReferenceSequence string `protobuf:"bytes,3,opt,name=reference_sequence,json=referenceSequence" json:"reference_sequence,omitempty"` +} + +func (m *CigarUnit) Reset() { *m = CigarUnit{} } +func (m *CigarUnit) String() string { return proto.CompactTextString(m) } +func (*CigarUnit) ProtoMessage() {} +func (*CigarUnit) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *CigarUnit) GetOperation() CigarUnit_Operation { + if m != nil { + return m.Operation + } + return CigarUnit_OPERATION_UNSPECIFIED +} + +func (m *CigarUnit) GetOperationLength() int64 { + if m != nil { + return m.OperationLength + } + return 0 +} + +func (m *CigarUnit) GetReferenceSequence() string { + if m != nil { + return m.ReferenceSequence + } + return "" +} + +func init() { + proto.RegisterType((*CigarUnit)(nil), "google.genomics.v1.CigarUnit") + proto.RegisterEnum("google.genomics.v1.CigarUnit_Operation", CigarUnit_Operation_name, CigarUnit_Operation_value) +} + +func init() { proto.RegisterFile("google/genomics/v1/cigar.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 367 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x51, 0xcf, 0x0e, 0x93, 0x30, + 0x1c, 0xb6, 0x63, 0x6e, 0xe3, 0x97, 0xb8, 0x75, 0x35, 0x33, 0xd3, 0x18, 0xb3, 0xec, 0xe2, 0x3c, + 0x08, 0x99, 0xde, 0xf4, 0xc4, 0xa0, 0x73, 0x8d, 0x0c, 0x10, 0xd8, 0xc5, 0x0b, 0x41, 0x52, 0x91, + 0x64, 0x6b, 0x11, 0x70, 0xaf, 0xe5, 0x1b, 0xf9, 0x1c, 0x1e, 0x0d, 0x30, 0x98, 0x89, 0xde, 0xbe, + 0x7e, 0xff, 0x9a, 0xfc, 0x3e, 0x78, 0x91, 0x4a, 0x99, 0x9e, 0xb9, 0x9e, 0x72, 0x21, 0x2f, 0x59, + 0x52, 0xea, 0xd7, 0xad, 0x9e, 0x64, 0x69, 0x5c, 0x68, 0x79, 0x21, 0x2b, 0x49, 0x48, 0xab, 0x6b, + 0x9d, 0xae, 0x5d, 0xb7, 0xcf, 0x9e, 0xdf, 0x32, 0x71, 0x9e, 0xe9, 0xb1, 0x10, 0xb2, 0x8a, 0xab, + 0x4c, 0x8a, 0xb2, 0x4d, 0xac, 0x7f, 0x0d, 0x40, 0x35, 0xeb, 0x86, 0x93, 0xc8, 0x2a, 0x42, 0x41, + 0x95, 0x39, 0x2f, 0x1a, 0xc7, 0x12, 0xad, 0xd0, 0x66, 0xfa, 0xe6, 0xa5, 0xf6, 0x6f, 0xa7, 0xd6, + 0x27, 0x34, 0xb7, 0xb3, 0xfb, 0xf7, 0x24, 0x79, 0x05, 0xb8, 0x7f, 0x44, 0x67, 0x2e, 0xd2, 0xea, + 0xdb, 0x72, 0xb0, 0x42, 0x1b, 0xc5, 0x9f, 0xf5, 0xbc, 0xdd, 0xd0, 0xe4, 0x35, 0x90, 0x82, 0x7f, + 0xe5, 0x05, 0x17, 0x09, 0x8f, 0x4a, 0xfe, 0xfd, 0x47, 0x0d, 0x96, 0xca, 0x0a, 0x6d, 0x54, 0x7f, + 0xde, 0x2b, 0xc1, 0x4d, 0x58, 0xff, 0x44, 0xa0, 0xf6, 0x5f, 0x92, 0xa7, 0xb0, 0x70, 0x3d, 0xea, + 0x1b, 0x21, 0x73, 0x9d, 0xe8, 0xe4, 0x04, 0x1e, 0x35, 0xd9, 0x9e, 0x51, 0x0b, 0x3f, 0x20, 0x8f, + 0x61, 0x66, 0xd8, 0xec, 0x83, 0x73, 0xa4, 0x4e, 0x18, 0x1d, 0x8d, 0xd0, 0x3c, 0x60, 0x44, 0x00, + 0x46, 0xcc, 0x09, 0xa8, 0x1f, 0xe2, 0x41, 0x8d, 0x2d, 0x6a, 0xd3, 0x90, 0x62, 0x85, 0x4c, 0x60, + 0x18, 0x7c, 0x64, 0x1e, 0x1e, 0x92, 0x47, 0xa0, 0x9a, 0x36, 0xf3, 0xa2, 0xc0, 0xdd, 0x87, 0xf8, + 0x61, 0xff, 0x3c, 0x18, 0xbe, 0x85, 0x47, 0x64, 0x0c, 0x8a, 0x67, 0x58, 0x78, 0x4c, 0x08, 0x4c, + 0x03, 0xfa, 0xe9, 0x44, 0x1d, 0x93, 0xde, 0xca, 0x27, 0x64, 0x01, 0xf3, 0x3b, 0xc7, 0x82, 0x96, + 0x56, 0x77, 0x1c, 0x9e, 0x24, 0xf2, 0xf2, 0x9f, 0x23, 0xee, 0xa0, 0xb9, 0xa2, 0x57, 0xcf, 0xe0, + 0xa1, 0xcf, 0xef, 0x3a, 0x87, 0x3c, 0xc7, 0x22, 0xd5, 0x64, 0x91, 0xd6, 0x2b, 0x37, 0x23, 0xe9, + 0xad, 0x14, 0xe7, 0x59, 0xf9, 0xf7, 0xf2, 0xef, 0x3b, 0xfc, 0x1b, 0xa1, 0x2f, 0xa3, 0xc6, 0xf9, + 0xf6, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xcc, 0xce, 0xde, 0x22, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/datasets.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/datasets.pb.go new file mode 100644 index 0000000..09a6c12 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/datasets.pb.go @@ -0,0 +1,778 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/datasets.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf6 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A Dataset is a collection of genomic data. +// +// For more genomics resource definitions, see [Fundamentals of Google +// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) +type Dataset struct { + // The server-generated dataset ID, unique across all datasets. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The Google Cloud project ID that this dataset belongs to. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The dataset name. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // The time this dataset was created, in seconds from the epoch. + CreateTime *google_protobuf6.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` +} + +func (m *Dataset) Reset() { *m = Dataset{} } +func (m *Dataset) String() string { return proto.CompactTextString(m) } +func (*Dataset) ProtoMessage() {} +func (*Dataset) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *Dataset) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Dataset) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *Dataset) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Dataset) GetCreateTime() *google_protobuf6.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +// The dataset list request. +type ListDatasetsRequest struct { + // Required. The Google Cloud project ID to list datasets for. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 50. The maximum value is 1024. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListDatasetsRequest) Reset() { *m = ListDatasetsRequest{} } +func (m *ListDatasetsRequest) String() string { return proto.CompactTextString(m) } +func (*ListDatasetsRequest) ProtoMessage() {} +func (*ListDatasetsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ListDatasetsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListDatasetsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListDatasetsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The dataset list response. +type ListDatasetsResponse struct { + // The list of matching Datasets. + Datasets []*Dataset `protobuf:"bytes,1,rep,name=datasets" json:"datasets,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDatasetsResponse) Reset() { *m = ListDatasetsResponse{} } +func (m *ListDatasetsResponse) String() string { return proto.CompactTextString(m) } +func (*ListDatasetsResponse) ProtoMessage() {} +func (*ListDatasetsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *ListDatasetsResponse) GetDatasets() []*Dataset { + if m != nil { + return m.Datasets + } + return nil +} + +func (m *ListDatasetsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +type CreateDatasetRequest struct { + // The dataset to be created. Must contain projectId and name. + Dataset *Dataset `protobuf:"bytes,1,opt,name=dataset" json:"dataset,omitempty"` +} + +func (m *CreateDatasetRequest) Reset() { *m = CreateDatasetRequest{} } +func (m *CreateDatasetRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDatasetRequest) ProtoMessage() {} +func (*CreateDatasetRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *CreateDatasetRequest) GetDataset() *Dataset { + if m != nil { + return m.Dataset + } + return nil +} + +type UpdateDatasetRequest struct { + // The ID of the dataset to be updated. + DatasetId string `protobuf:"bytes,1,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // The new dataset data. + Dataset *Dataset `protobuf:"bytes,2,opt,name=dataset" json:"dataset,omitempty"` + // An optional mask specifying which fields to update. At this time, the only + // mutable field is [name][google.genomics.v1.Dataset.name]. The only + // acceptable value is "name". If unspecified, all mutable fields will be + // updated. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateDatasetRequest) Reset() { *m = UpdateDatasetRequest{} } +func (m *UpdateDatasetRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateDatasetRequest) ProtoMessage() {} +func (*UpdateDatasetRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *UpdateDatasetRequest) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *UpdateDatasetRequest) GetDataset() *Dataset { + if m != nil { + return m.Dataset + } + return nil +} + +func (m *UpdateDatasetRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +type DeleteDatasetRequest struct { + // The ID of the dataset to be deleted. + DatasetId string `protobuf:"bytes,1,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` +} + +func (m *DeleteDatasetRequest) Reset() { *m = DeleteDatasetRequest{} } +func (m *DeleteDatasetRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDatasetRequest) ProtoMessage() {} +func (*DeleteDatasetRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *DeleteDatasetRequest) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +type UndeleteDatasetRequest struct { + // The ID of the dataset to be undeleted. + DatasetId string `protobuf:"bytes,1,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` +} + +func (m *UndeleteDatasetRequest) Reset() { *m = UndeleteDatasetRequest{} } +func (m *UndeleteDatasetRequest) String() string { return proto.CompactTextString(m) } +func (*UndeleteDatasetRequest) ProtoMessage() {} +func (*UndeleteDatasetRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *UndeleteDatasetRequest) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +type GetDatasetRequest struct { + // The ID of the dataset. + DatasetId string `protobuf:"bytes,1,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` +} + +func (m *GetDatasetRequest) Reset() { *m = GetDatasetRequest{} } +func (m *GetDatasetRequest) String() string { return proto.CompactTextString(m) } +func (*GetDatasetRequest) ProtoMessage() {} +func (*GetDatasetRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *GetDatasetRequest) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func init() { + proto.RegisterType((*Dataset)(nil), "google.genomics.v1.Dataset") + proto.RegisterType((*ListDatasetsRequest)(nil), "google.genomics.v1.ListDatasetsRequest") + proto.RegisterType((*ListDatasetsResponse)(nil), "google.genomics.v1.ListDatasetsResponse") + proto.RegisterType((*CreateDatasetRequest)(nil), "google.genomics.v1.CreateDatasetRequest") + proto.RegisterType((*UpdateDatasetRequest)(nil), "google.genomics.v1.UpdateDatasetRequest") + proto.RegisterType((*DeleteDatasetRequest)(nil), "google.genomics.v1.DeleteDatasetRequest") + proto.RegisterType((*UndeleteDatasetRequest)(nil), "google.genomics.v1.UndeleteDatasetRequest") + proto.RegisterType((*GetDatasetRequest)(nil), "google.genomics.v1.GetDatasetRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DatasetServiceV1 service + +type DatasetServiceV1Client interface { + // Lists datasets within a project. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + ListDatasets(ctx context.Context, in *ListDatasetsRequest, opts ...grpc.CallOption) (*ListDatasetsResponse, error) + // Creates a new dataset. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + CreateDataset(ctx context.Context, in *CreateDatasetRequest, opts ...grpc.CallOption) (*Dataset, error) + // Gets a dataset by ID. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetDataset(ctx context.Context, in *GetDatasetRequest, opts ...grpc.CallOption) (*Dataset, error) + // Updates a dataset. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This method supports patch semantics. + UpdateDataset(ctx context.Context, in *UpdateDatasetRequest, opts ...grpc.CallOption) (*Dataset, error) + // Deletes a dataset and all of its contents (all read group sets, + // reference sets, variant sets, call sets, annotation sets, etc.) + // This is reversible (up to one week after the deletion) via + // the + // [datasets.undelete][google.genomics.v1.DatasetServiceV1.UndeleteDataset] + // operation. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteDataset(ctx context.Context, in *DeleteDatasetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Undeletes a dataset by restoring a dataset which was deleted via this API. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This operation is only possible for a week after the deletion occurred. + UndeleteDataset(ctx context.Context, in *UndeleteDatasetRequest, opts ...grpc.CallOption) (*Dataset, error) + // Sets the access control policy on the specified dataset. Replaces any + // existing policy. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // See <a href="/iam/docs/managing-policies#setting_a_policy">Setting a + // Policy</a> for more information. + SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Gets the access control policy for the dataset. This is empty if the + // policy or resource does not exist. + // + // See <a href="/iam/docs/managing-policies#getting_a_policy">Getting a + // Policy</a> for more information. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Returns permissions that a caller has on the specified resource. + // See <a href="/iam/docs/managing-policies#testing_permissions">Testing + // Permissions</a> for more information. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +type datasetServiceV1Client struct { + cc *grpc.ClientConn +} + +func NewDatasetServiceV1Client(cc *grpc.ClientConn) DatasetServiceV1Client { + return &datasetServiceV1Client{cc} +} + +func (c *datasetServiceV1Client) ListDatasets(ctx context.Context, in *ListDatasetsRequest, opts ...grpc.CallOption) (*ListDatasetsResponse, error) { + out := new(ListDatasetsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/ListDatasets", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasetServiceV1Client) CreateDataset(ctx context.Context, in *CreateDatasetRequest, opts ...grpc.CallOption) (*Dataset, error) { + out := new(Dataset) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/CreateDataset", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasetServiceV1Client) GetDataset(ctx context.Context, in *GetDatasetRequest, opts ...grpc.CallOption) (*Dataset, error) { + out := new(Dataset) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/GetDataset", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasetServiceV1Client) UpdateDataset(ctx context.Context, in *UpdateDatasetRequest, opts ...grpc.CallOption) (*Dataset, error) { + out := new(Dataset) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/UpdateDataset", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasetServiceV1Client) DeleteDataset(ctx context.Context, in *DeleteDatasetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/DeleteDataset", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasetServiceV1Client) UndeleteDataset(ctx context.Context, in *UndeleteDatasetRequest, opts ...grpc.CallOption) (*Dataset, error) { + out := new(Dataset) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/UndeleteDataset", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasetServiceV1Client) SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasetServiceV1Client) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasetServiceV1Client) TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) { + out := new(google_iam_v11.TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.DatasetServiceV1/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for DatasetServiceV1 service + +type DatasetServiceV1Server interface { + // Lists datasets within a project. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + ListDatasets(context.Context, *ListDatasetsRequest) (*ListDatasetsResponse, error) + // Creates a new dataset. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + CreateDataset(context.Context, *CreateDatasetRequest) (*Dataset, error) + // Gets a dataset by ID. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetDataset(context.Context, *GetDatasetRequest) (*Dataset, error) + // Updates a dataset. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This method supports patch semantics. + UpdateDataset(context.Context, *UpdateDatasetRequest) (*Dataset, error) + // Deletes a dataset and all of its contents (all read group sets, + // reference sets, variant sets, call sets, annotation sets, etc.) + // This is reversible (up to one week after the deletion) via + // the + // [datasets.undelete][google.genomics.v1.DatasetServiceV1.UndeleteDataset] + // operation. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteDataset(context.Context, *DeleteDatasetRequest) (*google_protobuf1.Empty, error) + // Undeletes a dataset by restoring a dataset which was deleted via this API. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This operation is only possible for a week after the deletion occurred. + UndeleteDataset(context.Context, *UndeleteDatasetRequest) (*Dataset, error) + // Sets the access control policy on the specified dataset. Replaces any + // existing policy. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // See <a href="/iam/docs/managing-policies#setting_a_policy">Setting a + // Policy</a> for more information. + SetIamPolicy(context.Context, *google_iam_v11.SetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Gets the access control policy for the dataset. This is empty if the + // policy or resource does not exist. + // + // See <a href="/iam/docs/managing-policies#getting_a_policy">Getting a + // Policy</a> for more information. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Returns permissions that a caller has on the specified resource. + // See <a href="/iam/docs/managing-policies#testing_permissions">Testing + // Permissions</a> for more information. + // + // For the definitions of datasets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + TestIamPermissions(context.Context, *google_iam_v11.TestIamPermissionsRequest) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +func RegisterDatasetServiceV1Server(s *grpc.Server, srv DatasetServiceV1Server) { + s.RegisterService(&_DatasetServiceV1_serviceDesc, srv) +} + +func _DatasetServiceV1_ListDatasets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDatasetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).ListDatasets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/ListDatasets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).ListDatasets(ctx, req.(*ListDatasetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatasetServiceV1_CreateDataset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDatasetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).CreateDataset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/CreateDataset", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).CreateDataset(ctx, req.(*CreateDatasetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatasetServiceV1_GetDataset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDatasetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).GetDataset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/GetDataset", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).GetDataset(ctx, req.(*GetDatasetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatasetServiceV1_UpdateDataset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateDatasetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).UpdateDataset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/UpdateDataset", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).UpdateDataset(ctx, req.(*UpdateDatasetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatasetServiceV1_DeleteDataset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDatasetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).DeleteDataset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/DeleteDataset", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).DeleteDataset(ctx, req.(*DeleteDatasetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatasetServiceV1_UndeleteDataset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UndeleteDatasetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).UndeleteDataset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/UndeleteDataset", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).UndeleteDataset(ctx, req.(*UndeleteDatasetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatasetServiceV1_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).SetIamPolicy(ctx, req.(*google_iam_v11.SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatasetServiceV1_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).GetIamPolicy(ctx, req.(*google_iam_v11.GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatasetServiceV1_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasetServiceV1Server).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.DatasetServiceV1/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasetServiceV1Server).TestIamPermissions(ctx, req.(*google_iam_v11.TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _DatasetServiceV1_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.genomics.v1.DatasetServiceV1", + HandlerType: (*DatasetServiceV1Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListDatasets", + Handler: _DatasetServiceV1_ListDatasets_Handler, + }, + { + MethodName: "CreateDataset", + Handler: _DatasetServiceV1_CreateDataset_Handler, + }, + { + MethodName: "GetDataset", + Handler: _DatasetServiceV1_GetDataset_Handler, + }, + { + MethodName: "UpdateDataset", + Handler: _DatasetServiceV1_UpdateDataset_Handler, + }, + { + MethodName: "DeleteDataset", + Handler: _DatasetServiceV1_DeleteDataset_Handler, + }, + { + MethodName: "UndeleteDataset", + Handler: _DatasetServiceV1_UndeleteDataset_Handler, + }, + { + MethodName: "SetIamPolicy", + Handler: _DatasetServiceV1_SetIamPolicy_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _DatasetServiceV1_GetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _DatasetServiceV1_TestIamPermissions_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/genomics/v1/datasets.proto", +} + +func init() { proto.RegisterFile("google/genomics/v1/datasets.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 786 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xd1, 0x4e, 0x13, 0x4d, + 0x14, 0xce, 0x16, 0xfe, 0x1f, 0x7a, 0xa0, 0xa0, 0x63, 0xc5, 0xda, 0x8a, 0x96, 0x8d, 0x42, 0xad, + 0xba, 0x4d, 0x6b, 0x08, 0x49, 0x89, 0x37, 0x88, 0x12, 0x12, 0x49, 0x9a, 0x02, 0x5e, 0x78, 0xd3, + 0x0c, 0xdd, 0xa1, 0x8e, 0x74, 0x77, 0xd6, 0x9d, 0x29, 0x28, 0xc8, 0x0d, 0x77, 0x5c, 0xfb, 0x00, + 0x26, 0xde, 0xf9, 0x3c, 0xbe, 0x82, 0x0f, 0xe1, 0xa5, 0x99, 0xd9, 0xd9, 0x76, 0xdb, 0x2e, 0x05, + 0x8c, 0x77, 0xdb, 0x73, 0xbe, 0x73, 0xbe, 0xef, 0xcc, 0xf9, 0x76, 0xba, 0xb0, 0xd0, 0x62, 0xac, + 0xd5, 0x26, 0xa5, 0x16, 0x71, 0x99, 0x43, 0x9b, 0xbc, 0x74, 0x58, 0x2e, 0xd9, 0x58, 0x60, 0x4e, + 0x04, 0xb7, 0x3c, 0x9f, 0x09, 0x86, 0x50, 0x00, 0xb1, 0x42, 0x88, 0x75, 0x58, 0xce, 0xde, 0xd3, + 0x65, 0xd8, 0xa3, 0x25, 0xec, 0xba, 0x4c, 0x60, 0x41, 0x99, 0xab, 0x2b, 0xb2, 0xf7, 0x75, 0x96, + 0x62, 0x47, 0xf6, 0xa3, 0xd8, 0x69, 0x78, 0xac, 0x4d, 0x9b, 0x9f, 0x75, 0x3e, 0xdb, 0x9f, 0xef, + 0xcb, 0xe5, 0x74, 0x4e, 0xfd, 0xda, 0xeb, 0xec, 0x97, 0x88, 0xe3, 0x89, 0x30, 0x99, 0x1f, 0x4c, + 0xee, 0x53, 0xd2, 0xb6, 0x1b, 0x0e, 0xe6, 0x07, 0x1a, 0xf1, 0x60, 0x10, 0x21, 0xa8, 0x43, 0xb8, + 0xc0, 0x8e, 0x17, 0x00, 0xcc, 0x73, 0x03, 0x26, 0xd6, 0x83, 0x01, 0xd1, 0x0c, 0x24, 0xa8, 0x9d, + 0x31, 0xf2, 0x46, 0x21, 0x59, 0x4f, 0x50, 0x1b, 0xcd, 0x03, 0x78, 0x3e, 0xfb, 0x40, 0x9a, 0xa2, + 0x41, 0xed, 0x4c, 0x42, 0xc5, 0x93, 0x3a, 0xb2, 0x69, 0x23, 0x04, 0xe3, 0x2e, 0x76, 0x48, 0x66, + 0x4c, 0x25, 0xd4, 0x33, 0x5a, 0x85, 0xa9, 0xa6, 0x4f, 0xb0, 0x20, 0x0d, 0x49, 0x94, 0x19, 0xcf, + 0x1b, 0x85, 0xa9, 0x4a, 0xd6, 0xd2, 0x47, 0x16, 0xaa, 0xb0, 0x76, 0x42, 0x15, 0x75, 0x08, 0xe0, + 0x32, 0x60, 0x7a, 0x70, 0xeb, 0x0d, 0xe5, 0x42, 0xcb, 0xe1, 0x75, 0xf2, 0xb1, 0x43, 0xb8, 0x18, + 0x90, 0x61, 0x0c, 0xca, 0xc8, 0x41, 0xd2, 0xc3, 0x2d, 0xd2, 0xe0, 0xf4, 0x98, 0x28, 0x91, 0xff, + 0xd5, 0x27, 0x65, 0x60, 0x9b, 0x1e, 0x13, 0x55, 0x2b, 0x93, 0x82, 0x1d, 0x10, 0x57, 0x2b, 0x55, + 0xf0, 0x1d, 0x19, 0x30, 0x8f, 0x20, 0xdd, 0xcf, 0xc8, 0x3d, 0xe6, 0x72, 0x82, 0x56, 0x60, 0x32, + 0xdc, 0x7a, 0xc6, 0xc8, 0x8f, 0x15, 0xa6, 0x2a, 0x39, 0x6b, 0x78, 0xed, 0x96, 0xae, 0xab, 0x77, + 0xc1, 0x68, 0x11, 0x66, 0x5d, 0xf2, 0x49, 0x34, 0x22, 0xa4, 0xc1, 0xb9, 0xa5, 0x64, 0xb8, 0xd6, + 0x25, 0xde, 0x82, 0xf4, 0x4b, 0x35, 0x78, 0xd8, 0x42, 0xcf, 0xba, 0x0c, 0x13, 0xba, 0x97, 0x1a, + 0xf4, 0x12, 0xde, 0x10, 0x6b, 0xfe, 0x30, 0x20, 0xbd, 0xeb, 0xd9, 0xc3, 0xfd, 0xe6, 0x01, 0x34, + 0x26, 0x72, 0x76, 0x3a, 0xb2, 0x69, 0x47, 0xe9, 0x12, 0x57, 0xa7, 0x93, 0x5b, 0xee, 0x28, 0x36, + 0x65, 0x35, 0x75, 0xac, 0x71, 0x5b, 0x7e, 0x2d, 0xdd, 0xb8, 0x85, 0xf9, 0x41, 0x1d, 0x02, 0xb8, + 0x7c, 0x36, 0x97, 0x21, 0xbd, 0x4e, 0xda, 0xe4, 0x9a, 0x52, 0xcd, 0x15, 0x98, 0xdb, 0x75, 0xed, + 0xbf, 0x28, 0xac, 0xc0, 0xcd, 0x0d, 0x22, 0xae, 0x55, 0x53, 0xf9, 0x96, 0x84, 0x1b, 0xba, 0x62, + 0x9b, 0xf8, 0x87, 0xb4, 0x49, 0xde, 0x96, 0xd1, 0x11, 0x4c, 0x47, 0xcd, 0x82, 0x96, 0xe2, 0xce, + 0x2a, 0xc6, 0xc0, 0xd9, 0xc2, 0xe5, 0xc0, 0xc0, 0x77, 0x66, 0xfa, 0xec, 0xe7, 0xaf, 0xaf, 0x89, + 0x19, 0x34, 0x1d, 0xbd, 0x77, 0x50, 0x07, 0x52, 0x7d, 0x66, 0x41, 0xb1, 0x0d, 0xe3, 0xfc, 0x94, + 0x1d, 0xb5, 0x4f, 0x73, 0x5e, 0xb1, 0xdd, 0x31, 0xfb, 0xd8, 0xaa, 0xdd, 0x2d, 0x73, 0x80, 0xde, + 0xc1, 0xa1, 0x47, 0x71, 0x9d, 0x86, 0x0e, 0x76, 0x34, 0xe1, 0x82, 0x22, 0xcc, 0xa1, 0xbb, 0x51, + 0xc2, 0xd2, 0x49, 0x6f, 0x13, 0xa7, 0xe8, 0xcc, 0x80, 0x54, 0x9f, 0x93, 0xe3, 0x87, 0x8d, 0x33, + 0xfb, 0x68, 0xee, 0xa2, 0xe2, 0x7e, 0x58, 0xb9, 0x98, 0xbb, 0x37, 0xb9, 0x80, 0x54, 0x9f, 0x45, + 0xe3, 0x35, 0xc4, 0xb9, 0x38, 0x3b, 0x37, 0xf4, 0x16, 0xbc, 0x92, 0x17, 0x76, 0x38, 0x7a, 0x71, + 0xc4, 0xe8, 0xe7, 0x06, 0xcc, 0x0e, 0x58, 0x1c, 0x15, 0x63, 0x87, 0x8f, 0x7d, 0x0f, 0x46, 0x8f, + 0xff, 0x4c, 0xf1, 0x2f, 0x99, 0xe6, 0xc5, 0xe3, 0x77, 0x74, 0xdb, 0xaa, 0x51, 0x44, 0x5f, 0x60, + 0x7a, 0x9b, 0x88, 0x4d, 0xec, 0xd4, 0xd4, 0x9f, 0x11, 0x32, 0xc3, 0xde, 0x14, 0x3b, 0xb2, 0x6d, + 0x34, 0x19, 0xf2, 0xdf, 0x1e, 0xc0, 0x04, 0x59, 0xb3, 0xac, 0x98, 0x9f, 0x98, 0x8b, 0x92, 0xf9, + 0xc4, 0x27, 0x9c, 0x75, 0xfc, 0x26, 0x79, 0xd1, 0xd5, 0x50, 0x3c, 0xad, 0xf2, 0x48, 0x37, 0xcd, + 0xbe, 0x31, 0x8a, 0x7d, 0xe3, 0x9f, 0xb2, 0xb7, 0x06, 0xd8, 0xbf, 0x1b, 0x80, 0x76, 0x08, 0x57, + 0x41, 0xe2, 0x3b, 0x94, 0x73, 0xf9, 0x5f, 0xde, 0xf3, 0x80, 0x26, 0x18, 0x86, 0x84, 0x52, 0x1e, + 0x5f, 0x01, 0xa9, 0x5f, 0xf8, 0x15, 0x25, 0xaf, 0x6c, 0x3e, 0xbd, 0x58, 0x9e, 0x18, 0xaa, 0xae, + 0x1a, 0xc5, 0xb5, 0xf7, 0x30, 0xd7, 0x64, 0x4e, 0xcc, 0xc6, 0xd7, 0x52, 0xe1, 0xad, 0x52, 0x93, + 0x0e, 0xac, 0x19, 0xef, 0xaa, 0x21, 0x88, 0xb5, 0xb1, 0xdb, 0xb2, 0x98, 0xdf, 0x92, 0x9f, 0x37, + 0xca, 0x9f, 0xa5, 0x20, 0x85, 0x3d, 0xca, 0xa3, 0x9f, 0x3c, 0xab, 0xe1, 0xf3, 0x6f, 0xc3, 0xd8, + 0xfb, 0x5f, 0x21, 0x9f, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x87, 0x48, 0x07, 0xbb, 0x1b, 0x09, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/operations.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/operations.pb.go new file mode 100644 index 0000000..f0015f5 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/operations.pb.go @@ -0,0 +1,190 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/operations.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf5 "github.com/golang/protobuf/ptypes/any" +import google_protobuf6 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Metadata describing an [Operation][google.longrunning.Operation]. +type OperationMetadata struct { + // The Google Cloud Project in which the job is scoped. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The time at which the job was submitted to the Genomics service. + CreateTime *google_protobuf6.Timestamp `protobuf:"bytes,2,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The time at which the job began to run. + StartTime *google_protobuf6.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The time at which the job stopped running. + EndTime *google_protobuf6.Timestamp `protobuf:"bytes,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // The original request that started the operation. Note that this will be in + // current version of the API. If the operation was started with v1beta2 API + // and a GetOperation is performed on v1 API, a v1 request will be returned. + Request *google_protobuf5.Any `protobuf:"bytes,5,opt,name=request" json:"request,omitempty"` + // Optional event messages that were generated during the job's execution. + // This also contains any warnings that were generated during import + // or export. + Events []*OperationEvent `protobuf:"bytes,6,rep,name=events" json:"events,omitempty"` + // This field is deprecated. Use `labels` instead. Optionally provided by the + // caller when submitting the request that creates the operation. + ClientId string `protobuf:"bytes,7,opt,name=client_id,json=clientId" json:"client_id,omitempty"` + // Runtime metadata on this Operation. + RuntimeMetadata *google_protobuf5.Any `protobuf:"bytes,8,opt,name=runtime_metadata,json=runtimeMetadata" json:"runtime_metadata,omitempty"` + // Optionally provided by the caller when submitting the request that creates + // the operation. + Labels map[string]string `protobuf:"bytes,9,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *OperationMetadata) Reset() { *m = OperationMetadata{} } +func (m *OperationMetadata) String() string { return proto.CompactTextString(m) } +func (*OperationMetadata) ProtoMessage() {} +func (*OperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *OperationMetadata) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *OperationMetadata) GetCreateTime() *google_protobuf6.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *OperationMetadata) GetStartTime() *google_protobuf6.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *OperationMetadata) GetEndTime() *google_protobuf6.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *OperationMetadata) GetRequest() *google_protobuf5.Any { + if m != nil { + return m.Request + } + return nil +} + +func (m *OperationMetadata) GetEvents() []*OperationEvent { + if m != nil { + return m.Events + } + return nil +} + +func (m *OperationMetadata) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +func (m *OperationMetadata) GetRuntimeMetadata() *google_protobuf5.Any { + if m != nil { + return m.RuntimeMetadata + } + return nil +} + +func (m *OperationMetadata) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// An event that occurred during an [Operation][google.longrunning.Operation]. +type OperationEvent struct { + // Optional time of when event started. + StartTime *google_protobuf6.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Optional time of when event finished. An event can have a start time and no + // finish time. If an event has a finish time, there must be a start time. + EndTime *google_protobuf6.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Required description of event. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *OperationEvent) Reset() { *m = OperationEvent{} } +func (m *OperationEvent) String() string { return proto.CompactTextString(m) } +func (*OperationEvent) ProtoMessage() {} +func (*OperationEvent) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *OperationEvent) GetStartTime() *google_protobuf6.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *OperationEvent) GetEndTime() *google_protobuf6.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *OperationEvent) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func init() { + proto.RegisterType((*OperationMetadata)(nil), "google.genomics.v1.OperationMetadata") + proto.RegisterType((*OperationEvent)(nil), "google.genomics.v1.OperationEvent") +} + +func init() { proto.RegisterFile("google/genomics/v1/operations.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 456 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0xc7, 0xe5, 0x76, 0x6b, 0x9b, 0x17, 0x89, 0x0d, 0x6b, 0x42, 0xa1, 0x80, 0xa8, 0xca, 0xa5, + 0x27, 0x47, 0x1d, 0x42, 0x62, 0xdd, 0x01, 0x31, 0x69, 0x87, 0x4a, 0x20, 0xa6, 0x88, 0x13, 0x97, + 0xca, 0x4d, 0x1e, 0x51, 0x46, 0x62, 0x07, 0xdb, 0xad, 0xd4, 0xef, 0xc3, 0x17, 0xe0, 0xdb, 0x71, + 0x44, 0xb1, 0x9d, 0x2a, 0x6c, 0x68, 0x45, 0xdc, 0xec, 0xf7, 0xfe, 0x3f, 0xfb, 0x9f, 0xf7, 0x8f, + 0xe1, 0x55, 0x2e, 0x65, 0x5e, 0x62, 0x9c, 0xa3, 0x90, 0x55, 0x91, 0xea, 0x78, 0x3b, 0x8f, 0x65, + 0x8d, 0x8a, 0x9b, 0x42, 0x0a, 0xcd, 0x6a, 0x25, 0x8d, 0xa4, 0xd4, 0x89, 0x58, 0x2b, 0x62, 0xdb, + 0xf9, 0xf8, 0xb9, 0x07, 0x79, 0x5d, 0xc4, 0x5c, 0x08, 0x69, 0xba, 0xc4, 0xf8, 0xa9, 0xef, 0xda, + 0xdd, 0x7a, 0xf3, 0x35, 0xe6, 0x62, 0xe7, 0x5b, 0x2f, 0xef, 0xb6, 0x4c, 0x51, 0xa1, 0x36, 0xbc, + 0xaa, 0x9d, 0x60, 0xfa, 0xf3, 0x08, 0x1e, 0x7f, 0x6a, 0x2d, 0x7c, 0x44, 0xc3, 0x33, 0x6e, 0x38, + 0x7d, 0x01, 0x50, 0x2b, 0x79, 0x8b, 0xa9, 0x59, 0x15, 0x59, 0x44, 0x26, 0x64, 0x16, 0x24, 0x81, + 0xaf, 0x2c, 0x33, 0x7a, 0x09, 0x61, 0xaa, 0x90, 0x1b, 0x5c, 0x35, 0xc7, 0x45, 0xbd, 0x09, 0x99, + 0x85, 0xe7, 0x63, 0xe6, 0x8d, 0xb7, 0x77, 0xb1, 0xcf, 0xed, 0x5d, 0x09, 0x38, 0x79, 0x53, 0xa0, + 0x17, 0x00, 0xda, 0x70, 0x65, 0x1c, 0xdb, 0x3f, 0xc8, 0x06, 0x56, 0x6d, 0xd1, 0x37, 0x30, 0x42, + 0x91, 0x39, 0xf0, 0xe8, 0x20, 0x38, 0x44, 0x91, 0x59, 0x8c, 0xc1, 0x50, 0xe1, 0xf7, 0x0d, 0x6a, + 0x13, 0x1d, 0x5b, 0xea, 0xec, 0x1e, 0xf5, 0x5e, 0xec, 0x92, 0x56, 0x44, 0x17, 0x30, 0xc0, 0x2d, + 0x0a, 0xa3, 0xa3, 0xc1, 0xa4, 0x3f, 0x0b, 0xcf, 0xa7, 0xec, 0x7e, 0x24, 0x6c, 0x3f, 0xb4, 0xeb, + 0x46, 0x9a, 0x78, 0x82, 0x3e, 0x83, 0x20, 0x2d, 0x0b, 0x14, 0x76, 0x70, 0x43, 0x3b, 0xb8, 0x91, + 0x2b, 0x2c, 0x33, 0xfa, 0x0e, 0x4e, 0xd5, 0x46, 0x34, 0xf6, 0x57, 0x95, 0x1f, 0x75, 0x34, 0x7a, + 0xc0, 0xd1, 0x89, 0x57, 0xef, 0x73, 0x59, 0xc2, 0xa0, 0xe4, 0x6b, 0x2c, 0x75, 0x14, 0x58, 0x67, + 0xf3, 0x07, 0x9d, 0xb5, 0x18, 0xfb, 0x60, 0x99, 0x6b, 0x61, 0xd4, 0x2e, 0xf1, 0x07, 0x8c, 0x2f, + 0x20, 0xec, 0x94, 0xe9, 0x29, 0xf4, 0xbf, 0xe1, 0xce, 0x47, 0xdd, 0x2c, 0xe9, 0x19, 0x1c, 0x6f, + 0x79, 0xb9, 0x71, 0xf1, 0x06, 0x89, 0xdb, 0x2c, 0x7a, 0x6f, 0xc9, 0xf4, 0x07, 0x81, 0x47, 0x7f, + 0x7e, 0xfe, 0x9d, 0x50, 0xc9, 0xff, 0x86, 0xda, 0xfb, 0xf7, 0x50, 0x27, 0x10, 0x66, 0xa8, 0x53, + 0x55, 0xd4, 0x8d, 0x0b, 0xfb, 0x1f, 0x05, 0x49, 0xb7, 0x74, 0x75, 0x0b, 0x4f, 0x52, 0x59, 0xfd, + 0x65, 0x42, 0x57, 0x27, 0x7b, 0xf7, 0xfa, 0xa6, 0xb9, 0xe2, 0x86, 0x7c, 0x59, 0xb4, 0x32, 0x59, + 0x72, 0x91, 0x33, 0xa9, 0xf2, 0xe6, 0x95, 0x5a, 0x03, 0xb1, 0x6b, 0xf1, 0xba, 0xd0, 0xdd, 0x97, + 0x7b, 0xd9, 0xae, 0x7f, 0x11, 0xb2, 0x1e, 0x58, 0xe5, 0xeb, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x6a, 0xf6, 0xa8, 0x9a, 0xe2, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/position.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/position.pb.go new file mode 100644 index 0000000..928185c --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/position.pb.go @@ -0,0 +1,79 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/position.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// An abstraction for referring to a genomic position, in relation to some +// already known reference. For now, represents a genomic position as a +// reference name, a base number on that reference (0-based), and a +// determination of forward or reverse strand. +type Position struct { + // The name of the reference in whatever reference set is being used. + ReferenceName string `protobuf:"bytes,1,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The 0-based offset from the start of the forward strand for that reference. + Position int64 `protobuf:"varint,2,opt,name=position" json:"position,omitempty"` + // Whether this position is on the reverse strand, as opposed to the forward + // strand. + ReverseStrand bool `protobuf:"varint,3,opt,name=reverse_strand,json=reverseStrand" json:"reverse_strand,omitempty"` +} + +func (m *Position) Reset() { *m = Position{} } +func (m *Position) String() string { return proto.CompactTextString(m) } +func (*Position) ProtoMessage() {} +func (*Position) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *Position) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *Position) GetPosition() int64 { + if m != nil { + return m.Position + } + return 0 +} + +func (m *Position) GetReverseStrand() bool { + if m != nil { + return m.ReverseStrand + } + return false +} + +func init() { + proto.RegisterType((*Position)(nil), "google.genomics.v1.Position") +} + +func init() { proto.RegisterFile("google/genomics/v1/position.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 223 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0x41, 0x4b, 0x03, 0x31, + 0x14, 0x84, 0x89, 0x05, 0x59, 0x03, 0xf5, 0xb0, 0x07, 0x59, 0x8a, 0x87, 0x55, 0x10, 0xf6, 0x94, + 0x50, 0xbc, 0xe9, 0xad, 0x3f, 0x40, 0x96, 0x7a, 0xf3, 0x52, 0x9e, 0xeb, 0x33, 0x06, 0xba, 0xef, + 0x85, 0x24, 0xec, 0x6f, 0xf7, 0x28, 0x49, 0x9a, 0x22, 0xf4, 0x96, 0x4c, 0x66, 0x26, 0x1f, 0x23, + 0x1f, 0x0c, 0xb3, 0x39, 0xa2, 0x36, 0x48, 0x3c, 0xdb, 0x29, 0xe8, 0x65, 0xab, 0x1d, 0x07, 0x1b, + 0x2d, 0x93, 0x72, 0x9e, 0x23, 0xb7, 0x6d, 0xb1, 0xa8, 0x6a, 0x51, 0xcb, 0x76, 0x73, 0x7f, 0x8a, + 0x81, 0xb3, 0x1a, 0x88, 0x38, 0x42, 0x0a, 0x84, 0x92, 0x78, 0x8c, 0xb2, 0x19, 0x4f, 0x1d, 0xed, + 0x93, 0xbc, 0xf5, 0xf8, 0x8d, 0x1e, 0x69, 0xc2, 0x03, 0xc1, 0x8c, 0x9d, 0xe8, 0xc5, 0x70, 0xb3, + 0x5f, 0x9f, 0xd5, 0x37, 0x98, 0xb1, 0xdd, 0xc8, 0xa6, 0x7e, 0xdb, 0x5d, 0xf5, 0x62, 0x58, 0xed, + 0xcf, 0xf7, 0x52, 0xb1, 0xa0, 0x0f, 0x78, 0x08, 0xd1, 0x03, 0x7d, 0x75, 0xab, 0x5e, 0x0c, 0x4d, + 0xaa, 0xc8, 0xea, 0x7b, 0x16, 0x77, 0x3f, 0xf2, 0x6e, 0xe2, 0x59, 0x5d, 0xd2, 0xee, 0xd6, 0x95, + 0x66, 0x4c, 0x78, 0xa3, 0xf8, 0x78, 0xa9, 0x26, 0x3e, 0x02, 0x19, 0xc5, 0xde, 0xa4, 0x01, 0x32, + 0xbc, 0x2e, 0x4f, 0xe0, 0x6c, 0xf8, 0x3f, 0xca, 0x6b, 0x3d, 0xff, 0x0a, 0xf1, 0x79, 0x9d, 0x9d, + 0xcf, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xc6, 0x22, 0xea, 0x3d, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/range.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/range.pb.go new file mode 100644 index 0000000..196bcec --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/range.pb.go @@ -0,0 +1,76 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/range.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A 0-based half-open genomic coordinate range for search requests. +type Range struct { + // The reference sequence name, for example `chr1`, + // `1`, or `chrX`. + ReferenceName string `protobuf:"bytes,1,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The start position of the range on the reference, 0-based inclusive. + Start int64 `protobuf:"varint,2,opt,name=start" json:"start,omitempty"` + // The end position of the range on the reference, 0-based exclusive. + End int64 `protobuf:"varint,3,opt,name=end" json:"end,omitempty"` +} + +func (m *Range) Reset() { *m = Range{} } +func (m *Range) String() string { return proto.CompactTextString(m) } +func (*Range) ProtoMessage() {} +func (*Range) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +func (m *Range) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *Range) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Range) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func init() { + proto.RegisterType((*Range)(nil), "google.genomics.v1.Range") +} + +func init() { proto.RegisterFile("google/genomics/v1/range.proto", fileDescriptor5) } + +var fileDescriptor5 = []byte{ + // 209 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x4f, 0x4d, 0x4b, 0xc4, 0x30, + 0x10, 0x25, 0x96, 0x15, 0x0c, 0x28, 0x12, 0x44, 0x8a, 0x88, 0x2c, 0x82, 0xb0, 0xa7, 0x84, 0xe2, + 0x4d, 0x6f, 0xfd, 0x01, 0x52, 0x7a, 0xf0, 0xe0, 0x45, 0xc6, 0x3a, 0x86, 0x40, 0x33, 0x53, 0x92, + 0xd0, 0xdf, 0xee, 0x51, 0x92, 0x58, 0x11, 0xf6, 0x36, 0x79, 0x1f, 0x79, 0xef, 0xc9, 0x3b, 0xcb, + 0x6c, 0x67, 0x34, 0x16, 0x89, 0xbd, 0x9b, 0xa2, 0x59, 0x3b, 0x13, 0x80, 0x2c, 0xea, 0x25, 0x70, + 0x62, 0xa5, 0x2a, 0xaf, 0x37, 0x5e, 0xaf, 0xdd, 0xcd, 0xed, 0xaf, 0x07, 0x16, 0x67, 0x80, 0x88, + 0x13, 0x24, 0xc7, 0x14, 0xab, 0xe3, 0xfe, 0x55, 0xee, 0xc6, 0xfc, 0x81, 0x7a, 0x90, 0x17, 0x01, + 0xbf, 0x30, 0x20, 0x4d, 0xf8, 0x4e, 0xe0, 0xb1, 0x15, 0x7b, 0x71, 0x38, 0x1b, 0xcf, 0xff, 0xd0, + 0x17, 0xf0, 0xa8, 0xae, 0xe4, 0x2e, 0x26, 0x08, 0xa9, 0x3d, 0xd9, 0x8b, 0x43, 0x33, 0xd6, 0x87, + 0xba, 0x94, 0x0d, 0xd2, 0x67, 0xdb, 0x14, 0x2c, 0x9f, 0x3d, 0xca, 0xeb, 0x89, 0xbd, 0x3e, 0xee, + 0xd3, 0xcb, 0x92, 0x37, 0xe4, 0xf4, 0x41, 0xbc, 0x3d, 0x6d, 0x0a, 0x9e, 0x81, 0xac, 0xe6, 0x60, + 0xf3, 0xb8, 0xd2, 0xcd, 0x54, 0x0a, 0x16, 0x17, 0xff, 0x0f, 0x7e, 0xde, 0xee, 0x6f, 0x21, 0x3e, + 0x4e, 0x8b, 0xf2, 0xf1, 0x27, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x3e, 0xf1, 0x62, 0x19, 0x01, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readalignment.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readalignment.pb.go new file mode 100644 index 0000000..15b2fc5 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readalignment.pb.go @@ -0,0 +1,394 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/readalignment.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/struct" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A linear alignment can be represented by one CIGAR string. Describes the +// mapped position and local alignment of the read to the reference. +type LinearAlignment struct { + // The position of this alignment. + Position *Position `protobuf:"bytes,1,opt,name=position" json:"position,omitempty"` + // The mapping quality of this alignment. Represents how likely + // the read maps to this position as opposed to other locations. + // + // Specifically, this is -10 log10 Pr(mapping position is wrong), rounded to + // the nearest integer. + MappingQuality int32 `protobuf:"varint,2,opt,name=mapping_quality,json=mappingQuality" json:"mapping_quality,omitempty"` + // Represents the local alignment of this sequence (alignment matches, indels, + // etc) against the reference. + Cigar []*CigarUnit `protobuf:"bytes,3,rep,name=cigar" json:"cigar,omitempty"` +} + +func (m *LinearAlignment) Reset() { *m = LinearAlignment{} } +func (m *LinearAlignment) String() string { return proto.CompactTextString(m) } +func (*LinearAlignment) ProtoMessage() {} +func (*LinearAlignment) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } + +func (m *LinearAlignment) GetPosition() *Position { + if m != nil { + return m.Position + } + return nil +} + +func (m *LinearAlignment) GetMappingQuality() int32 { + if m != nil { + return m.MappingQuality + } + return 0 +} + +func (m *LinearAlignment) GetCigar() []*CigarUnit { + if m != nil { + return m.Cigar + } + return nil +} + +// A read alignment describes a linear alignment of a string of DNA to a +// [reference sequence][google.genomics.v1.Reference], in addition to metadata +// about the fragment (the molecule of DNA sequenced) and the read (the bases +// which were read by the sequencer). A read is equivalent to a line in a SAM +// file. A read belongs to exactly one read group and exactly one +// [read group set][google.genomics.v1.ReadGroupSet]. +// +// For more genomics resource definitions, see [Fundamentals of Google +// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) +// +// ### Reverse-stranded reads +// +// Mapped reads (reads having a non-null `alignment`) can be aligned to either +// the forward or the reverse strand of their associated reference. Strandedness +// of a mapped read is encoded by `alignment.position.reverseStrand`. +// +// If we consider the reference to be a forward-stranded coordinate space of +// `[0, reference.length)` with `0` as the left-most position and +// `reference.length` as the right-most position, reads are always aligned left +// to right. That is, `alignment.position.position` always refers to the +// left-most reference coordinate and `alignment.cigar` describes the alignment +// of this read to the reference from left to right. All per-base fields such as +// `alignedSequence` and `alignedQuality` share this same left-to-right +// orientation; this is true of reads which are aligned to either strand. For +// reverse-stranded reads, this means that `alignedSequence` is the reverse +// complement of the bases that were originally reported by the sequencing +// machine. +// +// ### Generating a reference-aligned sequence string +// +// When interacting with mapped reads, it's often useful to produce a string +// representing the local alignment of the read to reference. The following +// pseudocode demonstrates one way of doing this: +// +// out = "" +// offset = 0 +// for c in read.alignment.cigar { +// switch c.operation { +// case "ALIGNMENT_MATCH", "SEQUENCE_MATCH", "SEQUENCE_MISMATCH": +// out += read.alignedSequence[offset:offset+c.operationLength] +// offset += c.operationLength +// break +// case "CLIP_SOFT", "INSERT": +// offset += c.operationLength +// break +// case "PAD": +// out += repeat("*", c.operationLength) +// break +// case "DELETE": +// out += repeat("-", c.operationLength) +// break +// case "SKIP": +// out += repeat(" ", c.operationLength) +// break +// case "CLIP_HARD": +// break +// } +// } +// return out +// +// ### Converting to SAM's CIGAR string +// +// The following pseudocode generates a SAM CIGAR string from the +// `cigar` field. Note that this is a lossy conversion +// (`cigar.referenceSequence` is lost). +// +// cigarMap = { +// "ALIGNMENT_MATCH": "M", +// "INSERT": "I", +// "DELETE": "D", +// "SKIP": "N", +// "CLIP_SOFT": "S", +// "CLIP_HARD": "H", +// "PAD": "P", +// "SEQUENCE_MATCH": "=", +// "SEQUENCE_MISMATCH": "X", +// } +// cigarStr = "" +// for c in read.alignment.cigar { +// cigarStr += c.operationLength + cigarMap[c.operation] +// } +// return cigarStr +type Read struct { + // The server-generated read ID, unique across all reads. This is different + // from the `fragmentName`. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The ID of the read group this read belongs to. A read belongs to exactly + // one read group. This is a server-generated ID which is distinct from SAM's + // RG tag (for that value, see + // [ReadGroup.name][google.genomics.v1.ReadGroup.name]). + ReadGroupId string `protobuf:"bytes,2,opt,name=read_group_id,json=readGroupId" json:"read_group_id,omitempty"` + // The ID of the read group set this read belongs to. A read belongs to + // exactly one read group set. + ReadGroupSetId string `protobuf:"bytes,3,opt,name=read_group_set_id,json=readGroupSetId" json:"read_group_set_id,omitempty"` + // The fragment name. Equivalent to QNAME (query template name) in SAM. + FragmentName string `protobuf:"bytes,4,opt,name=fragment_name,json=fragmentName" json:"fragment_name,omitempty"` + // The orientation and the distance between reads from the fragment are + // consistent with the sequencing protocol (SAM flag 0x2). + ProperPlacement bool `protobuf:"varint,5,opt,name=proper_placement,json=properPlacement" json:"proper_placement,omitempty"` + // The fragment is a PCR or optical duplicate (SAM flag 0x400). + DuplicateFragment bool `protobuf:"varint,6,opt,name=duplicate_fragment,json=duplicateFragment" json:"duplicate_fragment,omitempty"` + // The observed length of the fragment, equivalent to TLEN in SAM. + FragmentLength int32 `protobuf:"varint,7,opt,name=fragment_length,json=fragmentLength" json:"fragment_length,omitempty"` + // The read number in sequencing. 0-based and less than numberReads. This + // field replaces SAM flag 0x40 and 0x80. + ReadNumber int32 `protobuf:"varint,8,opt,name=read_number,json=readNumber" json:"read_number,omitempty"` + // The number of reads in the fragment (extension to SAM flag 0x1). + NumberReads int32 `protobuf:"varint,9,opt,name=number_reads,json=numberReads" json:"number_reads,omitempty"` + // Whether this read did not pass filters, such as platform or vendor quality + // controls (SAM flag 0x200). + FailedVendorQualityChecks bool `protobuf:"varint,10,opt,name=failed_vendor_quality_checks,json=failedVendorQualityChecks" json:"failed_vendor_quality_checks,omitempty"` + // The linear alignment for this alignment record. This field is null for + // unmapped reads. + Alignment *LinearAlignment `protobuf:"bytes,11,opt,name=alignment" json:"alignment,omitempty"` + // Whether this alignment is secondary. Equivalent to SAM flag 0x100. + // A secondary alignment represents an alternative to the primary alignment + // for this read. Aligners may return secondary alignments if a read can map + // ambiguously to multiple coordinates in the genome. By convention, each read + // has one and only one alignment where both `secondaryAlignment` + // and `supplementaryAlignment` are false. + SecondaryAlignment bool `protobuf:"varint,12,opt,name=secondary_alignment,json=secondaryAlignment" json:"secondary_alignment,omitempty"` + // Whether this alignment is supplementary. Equivalent to SAM flag 0x800. + // Supplementary alignments are used in the representation of a chimeric + // alignment. In a chimeric alignment, a read is split into multiple + // linear alignments that map to different reference contigs. The first + // linear alignment in the read will be designated as the representative + // alignment; the remaining linear alignments will be designated as + // supplementary alignments. These alignments may have different mapping + // quality scores. In each linear alignment in a chimeric alignment, the read + // will be hard clipped. The `alignedSequence` and + // `alignedQuality` fields in the alignment record will only + // represent the bases for its respective linear alignment. + SupplementaryAlignment bool `protobuf:"varint,13,opt,name=supplementary_alignment,json=supplementaryAlignment" json:"supplementary_alignment,omitempty"` + // The bases of the read sequence contained in this alignment record, + // **without CIGAR operations applied** (equivalent to SEQ in SAM). + // `alignedSequence` and `alignedQuality` may be + // shorter than the full read sequence and quality. This will occur if the + // alignment is part of a chimeric alignment, or if the read was trimmed. When + // this occurs, the CIGAR for this read will begin/end with a hard clip + // operator that will indicate the length of the excised sequence. + AlignedSequence string `protobuf:"bytes,14,opt,name=aligned_sequence,json=alignedSequence" json:"aligned_sequence,omitempty"` + // The quality of the read sequence contained in this alignment record + // (equivalent to QUAL in SAM). + // `alignedSequence` and `alignedQuality` may be shorter than the full read + // sequence and quality. This will occur if the alignment is part of a + // chimeric alignment, or if the read was trimmed. When this occurs, the CIGAR + // for this read will begin/end with a hard clip operator that will indicate + // the length of the excised sequence. + AlignedQuality []int32 `protobuf:"varint,15,rep,packed,name=aligned_quality,json=alignedQuality" json:"aligned_quality,omitempty"` + // The mapping of the primary alignment of the + // `(readNumber+1)%numberReads` read in the fragment. It replaces + // mate position and mate strand in SAM. + NextMatePosition *Position `protobuf:"bytes,16,opt,name=next_mate_position,json=nextMatePosition" json:"next_mate_position,omitempty"` + // A map of additional read alignment information. This must be of the form + // map<string, string[]> (string key mapping to a list of string values). + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,17,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Read) Reset() { *m = Read{} } +func (m *Read) String() string { return proto.CompactTextString(m) } +func (*Read) ProtoMessage() {} +func (*Read) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1} } + +func (m *Read) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Read) GetReadGroupId() string { + if m != nil { + return m.ReadGroupId + } + return "" +} + +func (m *Read) GetReadGroupSetId() string { + if m != nil { + return m.ReadGroupSetId + } + return "" +} + +func (m *Read) GetFragmentName() string { + if m != nil { + return m.FragmentName + } + return "" +} + +func (m *Read) GetProperPlacement() bool { + if m != nil { + return m.ProperPlacement + } + return false +} + +func (m *Read) GetDuplicateFragment() bool { + if m != nil { + return m.DuplicateFragment + } + return false +} + +func (m *Read) GetFragmentLength() int32 { + if m != nil { + return m.FragmentLength + } + return 0 +} + +func (m *Read) GetReadNumber() int32 { + if m != nil { + return m.ReadNumber + } + return 0 +} + +func (m *Read) GetNumberReads() int32 { + if m != nil { + return m.NumberReads + } + return 0 +} + +func (m *Read) GetFailedVendorQualityChecks() bool { + if m != nil { + return m.FailedVendorQualityChecks + } + return false +} + +func (m *Read) GetAlignment() *LinearAlignment { + if m != nil { + return m.Alignment + } + return nil +} + +func (m *Read) GetSecondaryAlignment() bool { + if m != nil { + return m.SecondaryAlignment + } + return false +} + +func (m *Read) GetSupplementaryAlignment() bool { + if m != nil { + return m.SupplementaryAlignment + } + return false +} + +func (m *Read) GetAlignedSequence() string { + if m != nil { + return m.AlignedSequence + } + return "" +} + +func (m *Read) GetAlignedQuality() []int32 { + if m != nil { + return m.AlignedQuality + } + return nil +} + +func (m *Read) GetNextMatePosition() *Position { + if m != nil { + return m.NextMatePosition + } + return nil +} + +func (m *Read) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +func init() { + proto.RegisterType((*LinearAlignment)(nil), "google.genomics.v1.LinearAlignment") + proto.RegisterType((*Read)(nil), "google.genomics.v1.Read") +} + +func init() { proto.RegisterFile("google/genomics/v1/readalignment.proto", fileDescriptor6) } + +var fileDescriptor6 = []byte{ + // 683 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xcd, 0x4e, 0xdb, 0x4a, + 0x14, 0xc7, 0xe5, 0x84, 0x70, 0xc9, 0x09, 0x24, 0x61, 0xae, 0xc4, 0xf5, 0x8d, 0xb8, 0xb7, 0x21, + 0x48, 0x6d, 0x58, 0xd4, 0x2e, 0x20, 0xb5, 0x88, 0x2e, 0x2a, 0x40, 0x6d, 0x45, 0x45, 0x51, 0x6a, + 0x54, 0x16, 0xdd, 0x58, 0x83, 0x7d, 0x62, 0x46, 0xd8, 0x33, 0xc6, 0x1e, 0x47, 0xcd, 0x23, 0xf5, + 0xdd, 0xfa, 0x00, 0x5d, 0x56, 0x33, 0xf6, 0x38, 0xd0, 0x66, 0xd1, 0x5d, 0xf2, 0x3f, 0xbf, 0xf3, + 0xe1, 0xf3, 0x31, 0xf0, 0x34, 0x12, 0x22, 0x8a, 0xd1, 0x8d, 0x90, 0x8b, 0x84, 0x05, 0xb9, 0x3b, + 0xdb, 0x77, 0x33, 0xa4, 0x21, 0x8d, 0x59, 0xc4, 0x13, 0xe4, 0xd2, 0x49, 0x33, 0x21, 0x05, 0x21, + 0x25, 0xe7, 0x18, 0xce, 0x99, 0xed, 0x0f, 0xb6, 0x2b, 0x5f, 0x9a, 0x32, 0x97, 0x72, 0x2e, 0x24, + 0x95, 0x4c, 0xf0, 0xbc, 0xf4, 0x18, 0xfc, 0xbf, 0x24, 0x72, 0xc0, 0x22, 0x9a, 0x55, 0xf6, 0x9d, + 0x25, 0xf6, 0x54, 0xe4, 0x4c, 0xc5, 0xa8, 0x10, 0x93, 0x40, 0xff, 0xbb, 0x29, 0xa6, 0x6e, 0x2e, + 0xb3, 0x22, 0xa8, 0x4a, 0x1a, 0x7d, 0xb3, 0xa0, 0x77, 0xc1, 0x38, 0xd2, 0xec, 0xc4, 0x14, 0x4b, + 0x8e, 0x60, 0xcd, 0xc4, 0xb0, 0xad, 0xa1, 0x35, 0xee, 0x1c, 0x6c, 0x3b, 0xbf, 0x57, 0xee, 0x4c, + 0x2a, 0xc6, 0xab, 0x69, 0xf2, 0x0c, 0x7a, 0x09, 0x4d, 0x53, 0xc6, 0x23, 0xff, 0xbe, 0xa0, 0x31, + 0x93, 0x73, 0xbb, 0x31, 0xb4, 0xc6, 0x2d, 0xaf, 0x5b, 0xc9, 0x9f, 0x4a, 0x95, 0x1c, 0x42, 0x4b, + 0x7f, 0x86, 0xdd, 0x1c, 0x36, 0xc7, 0x9d, 0x83, 0xff, 0x96, 0xc5, 0x3f, 0x53, 0xc0, 0x67, 0xce, + 0xa4, 0x57, 0xb2, 0xa3, 0xef, 0xab, 0xb0, 0xe2, 0x21, 0x0d, 0x49, 0x17, 0x1a, 0x2c, 0xd4, 0xa5, + 0xb5, 0xbd, 0x06, 0x0b, 0xc9, 0x08, 0x36, 0x54, 0xbb, 0xfd, 0x28, 0x13, 0x45, 0xea, 0xb3, 0x50, + 0x27, 0x6d, 0x7b, 0x1d, 0x25, 0xbe, 0x57, 0xda, 0x79, 0x48, 0xf6, 0x60, 0xf3, 0x01, 0x93, 0xa3, + 0x54, 0x5c, 0x53, 0x73, 0xdd, 0x9a, 0xbb, 0x42, 0x79, 0x1e, 0x92, 0x5d, 0xd8, 0x98, 0x66, 0x34, + 0x52, 0xbd, 0xf0, 0x39, 0x4d, 0xd0, 0x5e, 0xd1, 0xd8, 0xba, 0x11, 0x2f, 0x69, 0x82, 0x64, 0x0f, + 0xfa, 0x69, 0x26, 0x52, 0xcc, 0xfc, 0x34, 0xa6, 0x01, 0x2a, 0xdd, 0x6e, 0x0d, 0xad, 0xf1, 0x9a, + 0xd7, 0x2b, 0xf5, 0x89, 0x91, 0xc9, 0x73, 0x20, 0x61, 0x91, 0xc6, 0x2c, 0xa0, 0x12, 0x7d, 0x13, + 0xc4, 0x5e, 0xd5, 0xf0, 0x66, 0x6d, 0x79, 0x57, 0x19, 0x54, 0x13, 0xeb, 0xf4, 0x31, 0xf2, 0x48, + 0xde, 0xda, 0x7f, 0x95, 0x4d, 0x34, 0xf2, 0x85, 0x56, 0xc9, 0x13, 0xd0, 0x5f, 0xe8, 0xf3, 0x22, + 0xb9, 0xc1, 0xcc, 0x5e, 0xd3, 0x10, 0x28, 0xe9, 0x52, 0x2b, 0x64, 0x07, 0xd6, 0x4b, 0x9b, 0xaf, + 0xc4, 0xdc, 0x6e, 0x6b, 0xa2, 0x53, 0x6a, 0xaa, 0x93, 0x39, 0x79, 0x03, 0xdb, 0x53, 0xca, 0x62, + 0x0c, 0xfd, 0x19, 0xf2, 0x50, 0x64, 0x66, 0x6e, 0x7e, 0x70, 0x8b, 0xc1, 0x5d, 0x6e, 0x83, 0xae, + 0xf2, 0xdf, 0x92, 0xb9, 0xd6, 0x48, 0x35, 0xc3, 0x33, 0x0d, 0x90, 0x13, 0x68, 0xd7, 0x6b, 0x6e, + 0x77, 0xf4, 0xb6, 0xec, 0x2e, 0x9b, 0xe6, 0x2f, 0x4b, 0xe6, 0x2d, 0xbc, 0x88, 0x0b, 0x7f, 0xe7, + 0x18, 0x08, 0x1e, 0xd2, 0x6c, 0xee, 0x2f, 0x82, 0xad, 0xeb, 0xd4, 0xa4, 0x36, 0x2d, 0x16, 0xf4, + 0x15, 0xfc, 0x93, 0x17, 0x69, 0x1a, 0xeb, 0xf6, 0x3e, 0x76, 0xda, 0xd0, 0x4e, 0x5b, 0x8f, 0xcc, + 0x0b, 0xc7, 0x3d, 0xe8, 0x6b, 0x14, 0x43, 0x3f, 0xc7, 0xfb, 0x02, 0x79, 0x80, 0x76, 0x57, 0x0f, + 0xb7, 0x57, 0xe9, 0x57, 0x95, 0xac, 0xa6, 0x60, 0x50, 0xb3, 0xca, 0xbd, 0x61, 0x53, 0x4d, 0xa1, + 0x92, 0xcd, 0x2a, 0x7f, 0x00, 0xc2, 0xf1, 0xab, 0xf4, 0x13, 0x35, 0xdd, 0xfa, 0x6e, 0xfa, 0x7f, + 0x70, 0x37, 0x7d, 0xe5, 0xf7, 0x91, 0x4a, 0x34, 0x0a, 0x79, 0x09, 0x2b, 0x8c, 0x4f, 0x85, 0xbd, + 0xa9, 0xaf, 0x62, 0xb4, 0xcc, 0x5b, 0x8d, 0xcd, 0x39, 0xe7, 0x53, 0xf1, 0x96, 0xcb, 0x6c, 0xee, + 0x69, 0x7e, 0x70, 0x05, 0xed, 0x5a, 0x22, 0x7d, 0x68, 0xde, 0xe1, 0xbc, 0x3a, 0x0f, 0xf5, 0x93, + 0xbc, 0x80, 0xd6, 0x8c, 0xc6, 0x05, 0xea, 0xbb, 0xe8, 0x1c, 0x0c, 0x4c, 0x5c, 0xf3, 0x24, 0x38, + 0x17, 0x2c, 0x97, 0xd7, 0x8a, 0xf0, 0x4a, 0xf0, 0xb8, 0x71, 0x64, 0x9d, 0x26, 0xb0, 0x15, 0x88, + 0x64, 0x49, 0x0d, 0xa7, 0x44, 0x15, 0x51, 0x77, 0x75, 0xa2, 0xa2, 0x4c, 0xac, 0x2f, 0xc7, 0x86, + 0x14, 0x31, 0xe5, 0x91, 0x23, 0xb2, 0x48, 0x3d, 0x4b, 0x3a, 0x87, 0x5b, 0x9a, 0x68, 0xca, 0xf2, + 0x87, 0x4f, 0xd5, 0x6b, 0xf3, 0xfb, 0x87, 0x65, 0xdd, 0xac, 0x6a, 0xf2, 0xf0, 0x67, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xd0, 0xe1, 0xf6, 0x57, 0x4d, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroup.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroup.pb.go new file mode 100644 index 0000000..21e4920 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroup.pb.go @@ -0,0 +1,276 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/readgroup.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/struct" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A read group is all the data that's processed the same way by the sequencer. +type ReadGroup struct { + // The server-generated read group ID, unique for all read groups. + // Note: This is different than the @RG ID field in the SAM spec. For that + // value, see [name][google.genomics.v1.ReadGroup.name]. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The dataset to which this read group belongs. + DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // The read group name. This corresponds to the @RG ID field in the SAM spec. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // A free-form text description of this read group. + Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` + // A client-supplied sample identifier for the reads in this read group. + SampleId string `protobuf:"bytes,5,opt,name=sample_id,json=sampleId" json:"sample_id,omitempty"` + // The experiment used to generate this read group. + Experiment *ReadGroup_Experiment `protobuf:"bytes,6,opt,name=experiment" json:"experiment,omitempty"` + // The predicted insert size of this read group. The insert size is the length + // the sequenced DNA fragment from end-to-end, not including the adapters. + PredictedInsertSize int32 `protobuf:"varint,7,opt,name=predicted_insert_size,json=predictedInsertSize" json:"predicted_insert_size,omitempty"` + // The programs used to generate this read group. Programs are always + // identical for all read groups within a read group set. For this reason, + // only the first read group in a returned set will have this field + // populated. + Programs []*ReadGroup_Program `protobuf:"bytes,10,rep,name=programs" json:"programs,omitempty"` + // The reference set the reads in this read group are aligned to. + ReferenceSetId string `protobuf:"bytes,11,opt,name=reference_set_id,json=referenceSetId" json:"reference_set_id,omitempty"` + // A map of additional read group information. This must be of the form + // map<string, string[]> (string key mapping to a list of string values). + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,12,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ReadGroup) Reset() { *m = ReadGroup{} } +func (m *ReadGroup) String() string { return proto.CompactTextString(m) } +func (*ReadGroup) ProtoMessage() {} +func (*ReadGroup) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0} } + +func (m *ReadGroup) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *ReadGroup) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *ReadGroup) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ReadGroup) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *ReadGroup) GetSampleId() string { + if m != nil { + return m.SampleId + } + return "" +} + +func (m *ReadGroup) GetExperiment() *ReadGroup_Experiment { + if m != nil { + return m.Experiment + } + return nil +} + +func (m *ReadGroup) GetPredictedInsertSize() int32 { + if m != nil { + return m.PredictedInsertSize + } + return 0 +} + +func (m *ReadGroup) GetPrograms() []*ReadGroup_Program { + if m != nil { + return m.Programs + } + return nil +} + +func (m *ReadGroup) GetReferenceSetId() string { + if m != nil { + return m.ReferenceSetId + } + return "" +} + +func (m *ReadGroup) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +type ReadGroup_Experiment struct { + // A client-supplied library identifier; a library is a collection of DNA + // fragments which have been prepared for sequencing from a sample. This + // field is important for quality control as error or bias can be introduced + // during sample preparation. + LibraryId string `protobuf:"bytes,1,opt,name=library_id,json=libraryId" json:"library_id,omitempty"` + // The platform unit used as part of this experiment, for example + // flowcell-barcode.lane for Illumina or slide for SOLiD. Corresponds to the + // @RG PU field in the SAM spec. + PlatformUnit string `protobuf:"bytes,2,opt,name=platform_unit,json=platformUnit" json:"platform_unit,omitempty"` + // The sequencing center used as part of this experiment. + SequencingCenter string `protobuf:"bytes,3,opt,name=sequencing_center,json=sequencingCenter" json:"sequencing_center,omitempty"` + // The instrument model used as part of this experiment. This maps to + // sequencing technology in the SAM spec. + InstrumentModel string `protobuf:"bytes,4,opt,name=instrument_model,json=instrumentModel" json:"instrument_model,omitempty"` +} + +func (m *ReadGroup_Experiment) Reset() { *m = ReadGroup_Experiment{} } +func (m *ReadGroup_Experiment) String() string { return proto.CompactTextString(m) } +func (*ReadGroup_Experiment) ProtoMessage() {} +func (*ReadGroup_Experiment) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0, 0} } + +func (m *ReadGroup_Experiment) GetLibraryId() string { + if m != nil { + return m.LibraryId + } + return "" +} + +func (m *ReadGroup_Experiment) GetPlatformUnit() string { + if m != nil { + return m.PlatformUnit + } + return "" +} + +func (m *ReadGroup_Experiment) GetSequencingCenter() string { + if m != nil { + return m.SequencingCenter + } + return "" +} + +func (m *ReadGroup_Experiment) GetInstrumentModel() string { + if m != nil { + return m.InstrumentModel + } + return "" +} + +type ReadGroup_Program struct { + // The command line used to run this program. + CommandLine string `protobuf:"bytes,1,opt,name=command_line,json=commandLine" json:"command_line,omitempty"` + // The user specified locally unique ID of the program. Used along with + // `prevProgramId` to define an ordering between programs. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // The display name of the program. This is typically the colloquial name of + // the tool used, for example 'bwa' or 'picard'. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // The ID of the program run before this one. + PrevProgramId string `protobuf:"bytes,4,opt,name=prev_program_id,json=prevProgramId" json:"prev_program_id,omitempty"` + // The version of the program run. + Version string `protobuf:"bytes,5,opt,name=version" json:"version,omitempty"` +} + +func (m *ReadGroup_Program) Reset() { *m = ReadGroup_Program{} } +func (m *ReadGroup_Program) String() string { return proto.CompactTextString(m) } +func (*ReadGroup_Program) ProtoMessage() {} +func (*ReadGroup_Program) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0, 1} } + +func (m *ReadGroup_Program) GetCommandLine() string { + if m != nil { + return m.CommandLine + } + return "" +} + +func (m *ReadGroup_Program) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *ReadGroup_Program) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ReadGroup_Program) GetPrevProgramId() string { + if m != nil { + return m.PrevProgramId + } + return "" +} + +func (m *ReadGroup_Program) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func init() { + proto.RegisterType((*ReadGroup)(nil), "google.genomics.v1.ReadGroup") + proto.RegisterType((*ReadGroup_Experiment)(nil), "google.genomics.v1.ReadGroup.Experiment") + proto.RegisterType((*ReadGroup_Program)(nil), "google.genomics.v1.ReadGroup.Program") +} + +func init() { proto.RegisterFile("google/genomics/v1/readgroup.proto", fileDescriptor7) } + +var fileDescriptor7 = []byte{ + // 585 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xcb, 0x6e, 0xd4, 0x30, + 0x14, 0x55, 0xa6, 0xcf, 0xb9, 0xd3, 0xc7, 0x60, 0x04, 0x8a, 0x06, 0x90, 0x86, 0x22, 0x60, 0x10, + 0x52, 0x42, 0x87, 0x0d, 0x6a, 0x57, 0x14, 0x55, 0x10, 0xa9, 0x48, 0x55, 0x2a, 0x58, 0xb0, 0x89, + 0xdc, 0xf8, 0x4e, 0x64, 0x91, 0xd8, 0xc1, 0x76, 0x46, 0xb4, 0x9f, 0xc1, 0x57, 0xf0, 0x2d, 0x7c, + 0x11, 0x4b, 0x64, 0xc7, 0x49, 0x47, 0xa2, 0xea, 0xce, 0x39, 0xe7, 0x5c, 0xdf, 0xc7, 0xb9, 0x0e, + 0x1c, 0x14, 0x52, 0x16, 0x25, 0xc6, 0x05, 0x0a, 0x59, 0xf1, 0x5c, 0xc7, 0xcb, 0xc3, 0x58, 0x21, + 0x65, 0x85, 0x92, 0x4d, 0x1d, 0xd5, 0x4a, 0x1a, 0x49, 0x48, 0xab, 0x89, 0x3a, 0x4d, 0xb4, 0x3c, + 0x9c, 0x3c, 0xf6, 0x71, 0xb4, 0xe6, 0x31, 0x15, 0x42, 0x1a, 0x6a, 0xb8, 0x14, 0xba, 0x8d, 0xe8, + 0x59, 0xf7, 0x75, 0xd9, 0x2c, 0x62, 0x6d, 0x54, 0x93, 0x9b, 0x96, 0x3d, 0xf8, 0xb3, 0x09, 0xc3, + 0x14, 0x29, 0xfb, 0x68, 0x73, 0x90, 0x3d, 0x18, 0x70, 0x16, 0x06, 0xd3, 0x60, 0x36, 0x4c, 0x07, + 0x9c, 0x91, 0x27, 0x00, 0x8c, 0x1a, 0xaa, 0xd1, 0x64, 0x9c, 0x85, 0x03, 0x87, 0x0f, 0x3d, 0x92, + 0x30, 0x42, 0x60, 0x5d, 0xd0, 0x0a, 0xc3, 0x35, 0x47, 0xb8, 0x33, 0x99, 0xc2, 0x88, 0xa1, 0xce, + 0x15, 0xaf, 0x6d, 0x11, 0xe1, 0xba, 0xa3, 0x56, 0x21, 0xf2, 0x08, 0x86, 0x9a, 0x56, 0x75, 0x89, + 0xf6, 0xce, 0x0d, 0xc7, 0x6f, 0xb7, 0x40, 0xc2, 0xc8, 0x27, 0x00, 0xfc, 0x59, 0xa3, 0xe2, 0x15, + 0x0a, 0x13, 0x6e, 0x4e, 0x83, 0xd9, 0x68, 0x3e, 0x8b, 0xfe, 0x6f, 0x3a, 0xea, 0x8b, 0x8e, 0x4e, + 0x7b, 0x7d, 0xba, 0x12, 0x4b, 0xe6, 0xf0, 0xa0, 0x56, 0xc8, 0x78, 0x6e, 0x90, 0x65, 0x5c, 0x68, + 0x54, 0x26, 0xd3, 0xfc, 0x1a, 0xc3, 0xad, 0x69, 0x30, 0xdb, 0x48, 0xef, 0xf7, 0x64, 0xe2, 0xb8, + 0x0b, 0x7e, 0x8d, 0xe4, 0x3d, 0x6c, 0xd7, 0x4a, 0x16, 0x8a, 0x56, 0x3a, 0x84, 0xe9, 0xda, 0x6c, + 0x34, 0x7f, 0x7e, 0x77, 0xee, 0xf3, 0x56, 0x9d, 0xf6, 0x61, 0x64, 0x06, 0x63, 0x85, 0x0b, 0x54, + 0x28, 0x72, 0xcc, 0xfc, 0xe0, 0x46, 0xae, 0xc9, 0xbd, 0x1e, 0xbf, 0x70, 0xd3, 0x3b, 0x86, 0x75, + 0x2e, 0x16, 0x32, 0xdc, 0x71, 0x89, 0x5e, 0xde, 0x9d, 0x28, 0x11, 0x0b, 0x79, 0x2a, 0x8c, 0xba, + 0x4a, 0x5d, 0xd0, 0xe4, 0x77, 0x00, 0x70, 0xd3, 0xb8, 0x35, 0xaa, 0xe4, 0x97, 0x8a, 0xaa, 0xab, + 0xac, 0x37, 0x70, 0xe8, 0x91, 0x84, 0x91, 0x67, 0xb0, 0x5b, 0x97, 0xd4, 0x2c, 0xa4, 0xaa, 0xb2, + 0x46, 0x70, 0xe3, 0xad, 0xdc, 0xe9, 0xc0, 0x2f, 0x82, 0x1b, 0xf2, 0x1a, 0xee, 0x69, 0xfc, 0xd1, + 0xa0, 0xc8, 0xb9, 0x28, 0xb2, 0x1c, 0x85, 0x41, 0xe5, 0xad, 0x1d, 0xdf, 0x10, 0x1f, 0x1c, 0x4e, + 0x5e, 0xc1, 0x98, 0x0b, 0xbb, 0x49, 0x36, 0x7d, 0x56, 0x49, 0x86, 0xa5, 0xf7, 0x7a, 0xff, 0x06, + 0xff, 0x6c, 0xe1, 0xc9, 0xaf, 0x00, 0xb6, 0xfc, 0x9c, 0xc8, 0x53, 0xd8, 0xc9, 0x65, 0x55, 0x51, + 0xc1, 0xb2, 0x92, 0x0b, 0xf4, 0x95, 0x8e, 0x3c, 0x76, 0xc6, 0x05, 0xfa, 0x1d, 0x1c, 0xf4, 0x3b, + 0x78, 0xdb, 0x92, 0xbd, 0x80, 0xfd, 0x5a, 0xe1, 0x32, 0xf3, 0x53, 0xb7, 0x3d, 0xb7, 0xc9, 0x77, + 0x2d, 0xec, 0x93, 0x25, 0x8c, 0x84, 0xb0, 0xb5, 0x44, 0xa5, 0xed, 0x22, 0xb6, 0x8b, 0xd6, 0x7d, + 0x4e, 0x2e, 0x60, 0xd8, 0x8f, 0x94, 0x8c, 0x61, 0xed, 0x3b, 0x5e, 0xf9, 0x62, 0xec, 0x91, 0xbc, + 0x81, 0x8d, 0x25, 0x2d, 0x1b, 0x74, 0x75, 0x8c, 0xe6, 0x93, 0xce, 0x9c, 0xee, 0x11, 0x45, 0x67, + 0x5c, 0x9b, 0xaf, 0x56, 0x91, 0xb6, 0xc2, 0xa3, 0xc1, 0xbb, 0xe0, 0x84, 0xc3, 0xc3, 0x5c, 0x56, + 0xb7, 0x18, 0x79, 0xb2, 0xd7, 0x3b, 0x79, 0x6e, 0x6f, 0x38, 0x0f, 0xbe, 0x1d, 0x75, 0x2a, 0x59, + 0x52, 0x51, 0x44, 0x52, 0x15, 0xf6, 0xdd, 0xbb, 0xfb, 0xe3, 0x96, 0xa2, 0x35, 0xd7, 0xab, 0xff, + 0x82, 0xe3, 0xee, 0xfc, 0x37, 0x08, 0x2e, 0x37, 0x9d, 0xf2, 0xed, 0xbf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x37, 0xed, 0xaa, 0xaa, 0x34, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroupset.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroupset.pb.go new file mode 100644 index 0000000..3fff0e5 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroupset.pb.go @@ -0,0 +1,133 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/readgroupset.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/struct" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A read group set is a logical collection of read groups, which are +// collections of reads produced by a sequencer. A read group set typically +// models reads corresponding to one sample, sequenced one way, and aligned one +// way. +// +// * A read group set belongs to one dataset. +// * A read group belongs to one read group set. +// * A read belongs to one read group. +// +// For more genomics resource definitions, see [Fundamentals of Google +// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) +type ReadGroupSet struct { + // The server-generated read group set ID, unique for all read group sets. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The dataset to which this read group set belongs. + DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // The reference set to which the reads in this read group set are aligned. + ReferenceSetId string `protobuf:"bytes,3,opt,name=reference_set_id,json=referenceSetId" json:"reference_set_id,omitempty"` + // The read group set name. By default this will be initialized to the sample + // name of the sequenced data contained in this set. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + // The filename of the original source file for this read group set, if any. + Filename string `protobuf:"bytes,5,opt,name=filename" json:"filename,omitempty"` + // The read groups in this set. There are typically 1-10 read groups in a read + // group set. + ReadGroups []*ReadGroup `protobuf:"bytes,6,rep,name=read_groups,json=readGroups" json:"read_groups,omitempty"` + // A map of additional read group set information. + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,7,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ReadGroupSet) Reset() { *m = ReadGroupSet{} } +func (m *ReadGroupSet) String() string { return proto.CompactTextString(m) } +func (*ReadGroupSet) ProtoMessage() {} +func (*ReadGroupSet) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } + +func (m *ReadGroupSet) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *ReadGroupSet) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *ReadGroupSet) GetReferenceSetId() string { + if m != nil { + return m.ReferenceSetId + } + return "" +} + +func (m *ReadGroupSet) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ReadGroupSet) GetFilename() string { + if m != nil { + return m.Filename + } + return "" +} + +func (m *ReadGroupSet) GetReadGroups() []*ReadGroup { + if m != nil { + return m.ReadGroups + } + return nil +} + +func (m *ReadGroupSet) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +func init() { + proto.RegisterType((*ReadGroupSet)(nil), "google.genomics.v1.ReadGroupSet") +} + +func init() { proto.RegisterFile("google/genomics/v1/readgroupset.proto", fileDescriptor8) } + +var fileDescriptor8 = []byte{ + // 367 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x8b, 0xdb, 0x30, + 0x10, 0xc5, 0xb1, 0xf3, 0xa7, 0xcd, 0xa4, 0x84, 0x54, 0x87, 0x62, 0x4c, 0x03, 0x21, 0x50, 0x08, + 0x3d, 0xc8, 0x4d, 0x7a, 0x29, 0x29, 0xe4, 0x10, 0x28, 0x25, 0xb0, 0x87, 0x60, 0xc3, 0x1e, 0xf6, + 0x12, 0x14, 0x7b, 0x6c, 0xc4, 0x3a, 0x92, 0x91, 0xe4, 0x40, 0xbe, 0xf3, 0x7e, 0x80, 0x3d, 0x2e, + 0x96, 0xff, 0x10, 0xd8, 0x25, 0xb7, 0xd1, 0xd3, 0xef, 0x8d, 0x46, 0x6f, 0xe0, 0x47, 0x26, 0x65, + 0x96, 0x63, 0x90, 0xa1, 0x90, 0x67, 0x1e, 0xeb, 0xe0, 0xb2, 0x0a, 0x14, 0xb2, 0x24, 0x53, 0xb2, + 0x2c, 0x34, 0x1a, 0x5a, 0x28, 0x69, 0x24, 0x21, 0x35, 0x46, 0x5b, 0x8c, 0x5e, 0x56, 0xfe, 0xf7, + 0xc6, 0xca, 0x0a, 0x1e, 0x30, 0x21, 0xa4, 0x61, 0x86, 0x4b, 0xa1, 0x6b, 0x87, 0xbf, 0xb8, 0xd7, + 0xb8, 0x61, 0xda, 0x0e, 0xf6, 0x74, 0x2a, 0xd3, 0x40, 0x1b, 0x55, 0xc6, 0xcd, 0x9b, 0x8b, 0x17, + 0x17, 0xbe, 0x84, 0xc8, 0x92, 0xff, 0x95, 0x23, 0x42, 0x43, 0x26, 0xe0, 0xf2, 0xc4, 0x73, 0xe6, + 0xce, 0x72, 0x14, 0xba, 0x3c, 0x21, 0x33, 0x80, 0x84, 0x19, 0xa6, 0xd1, 0x1c, 0x79, 0xe2, 0xb9, + 0x56, 0x1f, 0x35, 0xca, 0x3e, 0x21, 0x4b, 0x98, 0x2a, 0x4c, 0x51, 0xa1, 0x88, 0xf1, 0xd8, 0x40, + 0x3d, 0x0b, 0x4d, 0x3a, 0x3d, 0xb2, 0x24, 0x81, 0xbe, 0x60, 0x67, 0xf4, 0xfa, 0xf6, 0xd6, 0xd6, + 0xc4, 0x87, 0xcf, 0x29, 0xcf, 0xd1, 0xea, 0x03, 0xab, 0x77, 0x67, 0xb2, 0x85, 0x71, 0xf5, 0x95, + 0x63, 0x1d, 0x92, 0x37, 0x9c, 0xf7, 0x96, 0xe3, 0xf5, 0x8c, 0xbe, 0xcf, 0x88, 0x76, 0xf3, 0x87, + 0xa0, 0xda, 0x52, 0x93, 0x2d, 0xf4, 0xb9, 0x48, 0xa5, 0xf7, 0xc9, 0x1a, 0x7f, 0xde, 0x35, 0x46, + 0x68, 0xe8, 0x5e, 0xa4, 0xf2, 0x9f, 0x30, 0xea, 0x1a, 0x5a, 0x9f, 0x1f, 0xc1, 0xa8, 0x93, 0xc8, + 0x14, 0x7a, 0xcf, 0x78, 0x6d, 0x62, 0xa9, 0x4a, 0xf2, 0x0b, 0x06, 0x17, 0x96, 0x97, 0x68, 0x23, + 0x19, 0xaf, 0xfd, 0xb6, 0x7f, 0x1b, 0x33, 0x7d, 0xe0, 0xda, 0x3c, 0x56, 0x44, 0x58, 0x83, 0x1b, + 0xf7, 0x8f, 0xb3, 0xcb, 0xe1, 0x5b, 0x2c, 0xcf, 0x1f, 0xcc, 0xb2, 0xfb, 0x7a, 0x3b, 0xcc, 0xa1, + 0x6a, 0x72, 0x70, 0x9e, 0x36, 0x2d, 0x28, 0x73, 0x26, 0x32, 0x2a, 0x55, 0x56, 0xad, 0xda, 0x3e, + 0x11, 0xd4, 0x57, 0xac, 0xe0, 0xfa, 0x76, 0xfd, 0x7f, 0xdb, 0xfa, 0xd5, 0x71, 0x4e, 0x43, 0x4b, + 0xfe, 0x7e, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x1f, 0xa9, 0x2f, 0xa5, 0x80, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/reads.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/reads.pb.go new file mode 100644 index 0000000..225e0c9 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/reads.pb.go @@ -0,0 +1,1415 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/reads.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type ImportReadGroupSetsRequest_PartitionStrategy int32 + +const ( + ImportReadGroupSetsRequest_PARTITION_STRATEGY_UNSPECIFIED ImportReadGroupSetsRequest_PartitionStrategy = 0 + // In most cases, this strategy yields one read group set per file. This is + // the default behavior. + // + // Allocate one read group set per file per sample. For BAM files, read + // groups are considered to share a sample if they have identical sample + // names. Furthermore, all reads for each file which do not belong to a read + // group, if any, will be grouped into a single read group set per-file. + ImportReadGroupSetsRequest_PER_FILE_PER_SAMPLE ImportReadGroupSetsRequest_PartitionStrategy = 1 + // Includes all read groups in all imported files into a single read group + // set. Requires that the headers for all imported files are equivalent. All + // reads which do not belong to a read group, if any, will be grouped into a + // separate read group set. + ImportReadGroupSetsRequest_MERGE_ALL ImportReadGroupSetsRequest_PartitionStrategy = 2 +) + +var ImportReadGroupSetsRequest_PartitionStrategy_name = map[int32]string{ + 0: "PARTITION_STRATEGY_UNSPECIFIED", + 1: "PER_FILE_PER_SAMPLE", + 2: "MERGE_ALL", +} +var ImportReadGroupSetsRequest_PartitionStrategy_value = map[string]int32{ + "PARTITION_STRATEGY_UNSPECIFIED": 0, + "PER_FILE_PER_SAMPLE": 1, + "MERGE_ALL": 2, +} + +func (x ImportReadGroupSetsRequest_PartitionStrategy) String() string { + return proto.EnumName(ImportReadGroupSetsRequest_PartitionStrategy_name, int32(x)) +} +func (ImportReadGroupSetsRequest_PartitionStrategy) EnumDescriptor() ([]byte, []int) { + return fileDescriptor9, []int{2, 0} +} + +// The read group set search request. +type SearchReadGroupSetsRequest struct { + // Restricts this query to read group sets within the given datasets. At least + // one ID must be provided. + DatasetIds []string `protobuf:"bytes,1,rep,name=dataset_ids,json=datasetIds" json:"dataset_ids,omitempty"` + // Only return read group sets for which a substring of the name matches this + // string. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 256. The maximum value is 1024. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *SearchReadGroupSetsRequest) Reset() { *m = SearchReadGroupSetsRequest{} } +func (m *SearchReadGroupSetsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchReadGroupSetsRequest) ProtoMessage() {} +func (*SearchReadGroupSetsRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{0} } + +func (m *SearchReadGroupSetsRequest) GetDatasetIds() []string { + if m != nil { + return m.DatasetIds + } + return nil +} + +func (m *SearchReadGroupSetsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *SearchReadGroupSetsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchReadGroupSetsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// The read group set search response. +type SearchReadGroupSetsResponse struct { + // The list of matching read group sets. + ReadGroupSets []*ReadGroupSet `protobuf:"bytes,1,rep,name=read_group_sets,json=readGroupSets" json:"read_group_sets,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchReadGroupSetsResponse) Reset() { *m = SearchReadGroupSetsResponse{} } +func (m *SearchReadGroupSetsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchReadGroupSetsResponse) ProtoMessage() {} +func (*SearchReadGroupSetsResponse) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{1} } + +func (m *SearchReadGroupSetsResponse) GetReadGroupSets() []*ReadGroupSet { + if m != nil { + return m.ReadGroupSets + } + return nil +} + +func (m *SearchReadGroupSetsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The read group set import request. +type ImportReadGroupSetsRequest struct { + // Required. The ID of the dataset these read group sets will belong to. The + // caller must have WRITE permissions to this dataset. + DatasetId string `protobuf:"bytes,1,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // The reference set to which the imported read group sets are aligned to, if + // any. The reference names of this reference set must be a superset of those + // found in the imported file headers. If no reference set id is provided, a + // best effort is made to associate with a matching reference set. + ReferenceSetId string `protobuf:"bytes,4,opt,name=reference_set_id,json=referenceSetId" json:"reference_set_id,omitempty"` + // A list of URIs pointing at [BAM + // files](https://samtools.github.io/hts-specs/SAMv1.pdf) + // in Google Cloud Storage. + // Those URIs can include wildcards (*), but do not add or remove + // matching files before import has completed. + // + // Note that Google Cloud Storage object listing is only eventually + // consistent: files added may be not be immediately visible to + // everyone. Thus, if using a wildcard it is preferable not to start + // the import immediately after the files are created. + SourceUris []string `protobuf:"bytes,2,rep,name=source_uris,json=sourceUris" json:"source_uris,omitempty"` + // The partition strategy describes how read groups are partitioned into read + // group sets. + PartitionStrategy ImportReadGroupSetsRequest_PartitionStrategy `protobuf:"varint,5,opt,name=partition_strategy,json=partitionStrategy,enum=google.genomics.v1.ImportReadGroupSetsRequest_PartitionStrategy" json:"partition_strategy,omitempty"` +} + +func (m *ImportReadGroupSetsRequest) Reset() { *m = ImportReadGroupSetsRequest{} } +func (m *ImportReadGroupSetsRequest) String() string { return proto.CompactTextString(m) } +func (*ImportReadGroupSetsRequest) ProtoMessage() {} +func (*ImportReadGroupSetsRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{2} } + +func (m *ImportReadGroupSetsRequest) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *ImportReadGroupSetsRequest) GetReferenceSetId() string { + if m != nil { + return m.ReferenceSetId + } + return "" +} + +func (m *ImportReadGroupSetsRequest) GetSourceUris() []string { + if m != nil { + return m.SourceUris + } + return nil +} + +func (m *ImportReadGroupSetsRequest) GetPartitionStrategy() ImportReadGroupSetsRequest_PartitionStrategy { + if m != nil { + return m.PartitionStrategy + } + return ImportReadGroupSetsRequest_PARTITION_STRATEGY_UNSPECIFIED +} + +// The read group set import response. +type ImportReadGroupSetsResponse struct { + // IDs of the read group sets that were created. + ReadGroupSetIds []string `protobuf:"bytes,1,rep,name=read_group_set_ids,json=readGroupSetIds" json:"read_group_set_ids,omitempty"` +} + +func (m *ImportReadGroupSetsResponse) Reset() { *m = ImportReadGroupSetsResponse{} } +func (m *ImportReadGroupSetsResponse) String() string { return proto.CompactTextString(m) } +func (*ImportReadGroupSetsResponse) ProtoMessage() {} +func (*ImportReadGroupSetsResponse) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{3} } + +func (m *ImportReadGroupSetsResponse) GetReadGroupSetIds() []string { + if m != nil { + return m.ReadGroupSetIds + } + return nil +} + +// The read group set export request. +type ExportReadGroupSetRequest struct { + // Required. The Google Cloud project ID that owns this + // export. The caller must have WRITE access to this project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. A Google Cloud Storage URI for the exported BAM file. + // The currently authenticated user must have write access to the new file. + // An error will be returned if the URI already contains data. + ExportUri string `protobuf:"bytes,2,opt,name=export_uri,json=exportUri" json:"export_uri,omitempty"` + // Required. The ID of the read group set to export. The caller must have + // READ access to this read group set. + ReadGroupSetId string `protobuf:"bytes,3,opt,name=read_group_set_id,json=readGroupSetId" json:"read_group_set_id,omitempty"` + // The reference names to export. If this is not specified, all reference + // sequences, including unmapped reads, are exported. + // Use `*` to export only unmapped reads. + ReferenceNames []string `protobuf:"bytes,4,rep,name=reference_names,json=referenceNames" json:"reference_names,omitempty"` +} + +func (m *ExportReadGroupSetRequest) Reset() { *m = ExportReadGroupSetRequest{} } +func (m *ExportReadGroupSetRequest) String() string { return proto.CompactTextString(m) } +func (*ExportReadGroupSetRequest) ProtoMessage() {} +func (*ExportReadGroupSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{4} } + +func (m *ExportReadGroupSetRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ExportReadGroupSetRequest) GetExportUri() string { + if m != nil { + return m.ExportUri + } + return "" +} + +func (m *ExportReadGroupSetRequest) GetReadGroupSetId() string { + if m != nil { + return m.ReadGroupSetId + } + return "" +} + +func (m *ExportReadGroupSetRequest) GetReferenceNames() []string { + if m != nil { + return m.ReferenceNames + } + return nil +} + +type UpdateReadGroupSetRequest struct { + // The ID of the read group set to be updated. The caller must have WRITE + // permissions to the dataset associated with this read group set. + ReadGroupSetId string `protobuf:"bytes,1,opt,name=read_group_set_id,json=readGroupSetId" json:"read_group_set_id,omitempty"` + // The new read group set data. See `updateMask` for details on mutability of + // fields. + ReadGroupSet *ReadGroupSet `protobuf:"bytes,2,opt,name=read_group_set,json=readGroupSet" json:"read_group_set,omitempty"` + // An optional mask specifying which fields to update. Supported fields: + // + // * [name][google.genomics.v1.ReadGroupSet.name]. + // * [referenceSetId][google.genomics.v1.ReadGroupSet.reference_set_id]. + // + // Leaving `updateMask` unset is equivalent to specifying all mutable + // fields. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateReadGroupSetRequest) Reset() { *m = UpdateReadGroupSetRequest{} } +func (m *UpdateReadGroupSetRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateReadGroupSetRequest) ProtoMessage() {} +func (*UpdateReadGroupSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{5} } + +func (m *UpdateReadGroupSetRequest) GetReadGroupSetId() string { + if m != nil { + return m.ReadGroupSetId + } + return "" +} + +func (m *UpdateReadGroupSetRequest) GetReadGroupSet() *ReadGroupSet { + if m != nil { + return m.ReadGroupSet + } + return nil +} + +func (m *UpdateReadGroupSetRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +type DeleteReadGroupSetRequest struct { + // The ID of the read group set to be deleted. The caller must have WRITE + // permissions to the dataset associated with this read group set. + ReadGroupSetId string `protobuf:"bytes,1,opt,name=read_group_set_id,json=readGroupSetId" json:"read_group_set_id,omitempty"` +} + +func (m *DeleteReadGroupSetRequest) Reset() { *m = DeleteReadGroupSetRequest{} } +func (m *DeleteReadGroupSetRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteReadGroupSetRequest) ProtoMessage() {} +func (*DeleteReadGroupSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{6} } + +func (m *DeleteReadGroupSetRequest) GetReadGroupSetId() string { + if m != nil { + return m.ReadGroupSetId + } + return "" +} + +type GetReadGroupSetRequest struct { + // The ID of the read group set. + ReadGroupSetId string `protobuf:"bytes,1,opt,name=read_group_set_id,json=readGroupSetId" json:"read_group_set_id,omitempty"` +} + +func (m *GetReadGroupSetRequest) Reset() { *m = GetReadGroupSetRequest{} } +func (m *GetReadGroupSetRequest) String() string { return proto.CompactTextString(m) } +func (*GetReadGroupSetRequest) ProtoMessage() {} +func (*GetReadGroupSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{7} } + +func (m *GetReadGroupSetRequest) GetReadGroupSetId() string { + if m != nil { + return m.ReadGroupSetId + } + return "" +} + +type ListCoverageBucketsRequest struct { + // Required. The ID of the read group set over which coverage is requested. + ReadGroupSetId string `protobuf:"bytes,1,opt,name=read_group_set_id,json=readGroupSetId" json:"read_group_set_id,omitempty"` + // The name of the reference to query, within the reference set associated + // with this query. Optional. + ReferenceName string `protobuf:"bytes,3,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The start position of the range on the reference, 0-based inclusive. If + // specified, `referenceName` must also be specified. Defaults to 0. + Start int64 `protobuf:"varint,4,opt,name=start" json:"start,omitempty"` + // The end position of the range on the reference, 0-based exclusive. If + // specified, `referenceName` must also be specified. If unset or 0, defaults + // to the length of the reference. + End int64 `protobuf:"varint,5,opt,name=end" json:"end,omitempty"` + // The desired width of each reported coverage bucket in base pairs. This + // will be rounded down to the nearest precomputed bucket width; the value + // of which is returned as `bucketWidth` in the response. Defaults + // to infinity (each bucket spans an entire reference sequence) or the length + // of the target range, if specified. The smallest precomputed + // `bucketWidth` is currently 2048 base pairs; this is subject to + // change. + TargetBucketWidth int64 `protobuf:"varint,6,opt,name=target_bucket_width,json=targetBucketWidth" json:"target_bucket_width,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,7,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 1024. The maximum value is 2048. + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListCoverageBucketsRequest) Reset() { *m = ListCoverageBucketsRequest{} } +func (m *ListCoverageBucketsRequest) String() string { return proto.CompactTextString(m) } +func (*ListCoverageBucketsRequest) ProtoMessage() {} +func (*ListCoverageBucketsRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{8} } + +func (m *ListCoverageBucketsRequest) GetReadGroupSetId() string { + if m != nil { + return m.ReadGroupSetId + } + return "" +} + +func (m *ListCoverageBucketsRequest) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *ListCoverageBucketsRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *ListCoverageBucketsRequest) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *ListCoverageBucketsRequest) GetTargetBucketWidth() int64 { + if m != nil { + return m.TargetBucketWidth + } + return 0 +} + +func (m *ListCoverageBucketsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListCoverageBucketsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// A bucket over which read coverage has been precomputed. A bucket corresponds +// to a specific range of the reference sequence. +type CoverageBucket struct { + // The genomic coordinate range spanned by this bucket. + Range *Range `protobuf:"bytes,1,opt,name=range" json:"range,omitempty"` + // The average number of reads which are aligned to each individual + // reference base in this bucket. + MeanCoverage float32 `protobuf:"fixed32,2,opt,name=mean_coverage,json=meanCoverage" json:"mean_coverage,omitempty"` +} + +func (m *CoverageBucket) Reset() { *m = CoverageBucket{} } +func (m *CoverageBucket) String() string { return proto.CompactTextString(m) } +func (*CoverageBucket) ProtoMessage() {} +func (*CoverageBucket) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{9} } + +func (m *CoverageBucket) GetRange() *Range { + if m != nil { + return m.Range + } + return nil +} + +func (m *CoverageBucket) GetMeanCoverage() float32 { + if m != nil { + return m.MeanCoverage + } + return 0 +} + +type ListCoverageBucketsResponse struct { + // The length of each coverage bucket in base pairs. Note that buckets at the + // end of a reference sequence may be shorter. This value is omitted if the + // bucket width is infinity (the default behaviour, with no range or + // `targetBucketWidth`). + BucketWidth int64 `protobuf:"varint,1,opt,name=bucket_width,json=bucketWidth" json:"bucket_width,omitempty"` + // The coverage buckets. The list of buckets is sparse; a bucket with 0 + // overlapping reads is not returned. A bucket never crosses more than one + // reference sequence. Each bucket has width `bucketWidth`, unless + // its end is the end of the reference sequence. + CoverageBuckets []*CoverageBucket `protobuf:"bytes,2,rep,name=coverage_buckets,json=coverageBuckets" json:"coverage_buckets,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListCoverageBucketsResponse) Reset() { *m = ListCoverageBucketsResponse{} } +func (m *ListCoverageBucketsResponse) String() string { return proto.CompactTextString(m) } +func (*ListCoverageBucketsResponse) ProtoMessage() {} +func (*ListCoverageBucketsResponse) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{10} } + +func (m *ListCoverageBucketsResponse) GetBucketWidth() int64 { + if m != nil { + return m.BucketWidth + } + return 0 +} + +func (m *ListCoverageBucketsResponse) GetCoverageBuckets() []*CoverageBucket { + if m != nil { + return m.CoverageBuckets + } + return nil +} + +func (m *ListCoverageBucketsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The read search request. +type SearchReadsRequest struct { + // The IDs of the read groups sets within which to search for reads. All + // specified read group sets must be aligned against a common set of reference + // sequences; this defines the genomic coordinates for the query. Must specify + // one of `readGroupSetIds` or `readGroupIds`. + ReadGroupSetIds []string `protobuf:"bytes,1,rep,name=read_group_set_ids,json=readGroupSetIds" json:"read_group_set_ids,omitempty"` + // The IDs of the read groups within which to search for reads. All specified + // read groups must belong to the same read group sets. Must specify one of + // `readGroupSetIds` or `readGroupIds`. + ReadGroupIds []string `protobuf:"bytes,5,rep,name=read_group_ids,json=readGroupIds" json:"read_group_ids,omitempty"` + // The reference sequence name, for example `chr1`, `1`, or `chrX`. If set to + // `*`, only unmapped reads are returned. If unspecified, all reads (mapped + // and unmapped) are returned. + ReferenceName string `protobuf:"bytes,7,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The start position of the range on the reference, 0-based inclusive. If + // specified, `referenceName` must also be specified. + Start int64 `protobuf:"varint,8,opt,name=start" json:"start,omitempty"` + // The end position of the range on the reference, 0-based exclusive. If + // specified, `referenceName` must also be specified. + End int64 `protobuf:"varint,9,opt,name=end" json:"end,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 256. The maximum value is 2048. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *SearchReadsRequest) Reset() { *m = SearchReadsRequest{} } +func (m *SearchReadsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchReadsRequest) ProtoMessage() {} +func (*SearchReadsRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{11} } + +func (m *SearchReadsRequest) GetReadGroupSetIds() []string { + if m != nil { + return m.ReadGroupSetIds + } + return nil +} + +func (m *SearchReadsRequest) GetReadGroupIds() []string { + if m != nil { + return m.ReadGroupIds + } + return nil +} + +func (m *SearchReadsRequest) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *SearchReadsRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *SearchReadsRequest) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *SearchReadsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchReadsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// The read search response. +type SearchReadsResponse struct { + // The list of matching alignments sorted by mapped genomic coordinate, + // if any, ascending in position within the same reference. Unmapped reads, + // which have no position, are returned contiguously and are sorted in + // ascending lexicographic order by fragment name. + Alignments []*Read `protobuf:"bytes,1,rep,name=alignments" json:"alignments,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchReadsResponse) Reset() { *m = SearchReadsResponse{} } +func (m *SearchReadsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchReadsResponse) ProtoMessage() {} +func (*SearchReadsResponse) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{12} } + +func (m *SearchReadsResponse) GetAlignments() []*Read { + if m != nil { + return m.Alignments + } + return nil +} + +func (m *SearchReadsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The stream reads request. +type StreamReadsRequest struct { + // The Google Cloud project ID which will be billed + // for this access. The caller must have WRITE access to this project. + // Required. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The ID of the read group set from which to stream reads. + ReadGroupSetId string `protobuf:"bytes,2,opt,name=read_group_set_id,json=readGroupSetId" json:"read_group_set_id,omitempty"` + // The reference sequence name, for example `chr1`, + // `1`, or `chrX`. If set to *, only unmapped reads are + // returned. + ReferenceName string `protobuf:"bytes,3,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The start position of the range on the reference, 0-based inclusive. If + // specified, `referenceName` must also be specified. + Start int64 `protobuf:"varint,4,opt,name=start" json:"start,omitempty"` + // The end position of the range on the reference, 0-based exclusive. If + // specified, `referenceName` must also be specified. + End int64 `protobuf:"varint,5,opt,name=end" json:"end,omitempty"` + // Restricts results to a shard containing approximately `1/totalShards` + // of the normal response payload for this query. Results from a sharded + // request are disjoint from those returned by all queries which differ only + // in their shard parameter. A shard may yield 0 results; this is especially + // likely for large values of `totalShards`. + // + // Valid values are `[0, totalShards)`. + Shard int32 `protobuf:"varint,6,opt,name=shard" json:"shard,omitempty"` + // Specifying `totalShards` causes a disjoint subset of the normal response + // payload to be returned for each query with a unique `shard` parameter + // specified. A best effort is made to yield equally sized shards. Sharding + // can be used to distribute processing amongst workers, where each worker is + // assigned a unique `shard` number and all workers specify the same + // `totalShards` number. The union of reads returned for all sharded queries + // `[0, totalShards)` is equal to those returned by a single unsharded query. + // + // Queries for different values of `totalShards` with common divisors will + // share shard boundaries. For example, streaming `shard` 2 of 5 + // `totalShards` yields the same results as streaming `shard`s 4 and 5 of 10 + // `totalShards`. This property can be leveraged for adaptive retries. + TotalShards int32 `protobuf:"varint,7,opt,name=total_shards,json=totalShards" json:"total_shards,omitempty"` +} + +func (m *StreamReadsRequest) Reset() { *m = StreamReadsRequest{} } +func (m *StreamReadsRequest) String() string { return proto.CompactTextString(m) } +func (*StreamReadsRequest) ProtoMessage() {} +func (*StreamReadsRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{13} } + +func (m *StreamReadsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *StreamReadsRequest) GetReadGroupSetId() string { + if m != nil { + return m.ReadGroupSetId + } + return "" +} + +func (m *StreamReadsRequest) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *StreamReadsRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *StreamReadsRequest) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *StreamReadsRequest) GetShard() int32 { + if m != nil { + return m.Shard + } + return 0 +} + +func (m *StreamReadsRequest) GetTotalShards() int32 { + if m != nil { + return m.TotalShards + } + return 0 +} + +type StreamReadsResponse struct { + Alignments []*Read `protobuf:"bytes,1,rep,name=alignments" json:"alignments,omitempty"` +} + +func (m *StreamReadsResponse) Reset() { *m = StreamReadsResponse{} } +func (m *StreamReadsResponse) String() string { return proto.CompactTextString(m) } +func (*StreamReadsResponse) ProtoMessage() {} +func (*StreamReadsResponse) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{14} } + +func (m *StreamReadsResponse) GetAlignments() []*Read { + if m != nil { + return m.Alignments + } + return nil +} + +func init() { + proto.RegisterType((*SearchReadGroupSetsRequest)(nil), "google.genomics.v1.SearchReadGroupSetsRequest") + proto.RegisterType((*SearchReadGroupSetsResponse)(nil), "google.genomics.v1.SearchReadGroupSetsResponse") + proto.RegisterType((*ImportReadGroupSetsRequest)(nil), "google.genomics.v1.ImportReadGroupSetsRequest") + proto.RegisterType((*ImportReadGroupSetsResponse)(nil), "google.genomics.v1.ImportReadGroupSetsResponse") + proto.RegisterType((*ExportReadGroupSetRequest)(nil), "google.genomics.v1.ExportReadGroupSetRequest") + proto.RegisterType((*UpdateReadGroupSetRequest)(nil), "google.genomics.v1.UpdateReadGroupSetRequest") + proto.RegisterType((*DeleteReadGroupSetRequest)(nil), "google.genomics.v1.DeleteReadGroupSetRequest") + proto.RegisterType((*GetReadGroupSetRequest)(nil), "google.genomics.v1.GetReadGroupSetRequest") + proto.RegisterType((*ListCoverageBucketsRequest)(nil), "google.genomics.v1.ListCoverageBucketsRequest") + proto.RegisterType((*CoverageBucket)(nil), "google.genomics.v1.CoverageBucket") + proto.RegisterType((*ListCoverageBucketsResponse)(nil), "google.genomics.v1.ListCoverageBucketsResponse") + proto.RegisterType((*SearchReadsRequest)(nil), "google.genomics.v1.SearchReadsRequest") + proto.RegisterType((*SearchReadsResponse)(nil), "google.genomics.v1.SearchReadsResponse") + proto.RegisterType((*StreamReadsRequest)(nil), "google.genomics.v1.StreamReadsRequest") + proto.RegisterType((*StreamReadsResponse)(nil), "google.genomics.v1.StreamReadsResponse") + proto.RegisterEnum("google.genomics.v1.ImportReadGroupSetsRequest_PartitionStrategy", ImportReadGroupSetsRequest_PartitionStrategy_name, ImportReadGroupSetsRequest_PartitionStrategy_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for StreamingReadService service + +type StreamingReadServiceClient interface { + // Returns a stream of all the reads matching the search request, ordered + // by reference name, position, and ID. + StreamReads(ctx context.Context, in *StreamReadsRequest, opts ...grpc.CallOption) (StreamingReadService_StreamReadsClient, error) +} + +type streamingReadServiceClient struct { + cc *grpc.ClientConn +} + +func NewStreamingReadServiceClient(cc *grpc.ClientConn) StreamingReadServiceClient { + return &streamingReadServiceClient{cc} +} + +func (c *streamingReadServiceClient) StreamReads(ctx context.Context, in *StreamReadsRequest, opts ...grpc.CallOption) (StreamingReadService_StreamReadsClient, error) { + stream, err := grpc.NewClientStream(ctx, &_StreamingReadService_serviceDesc.Streams[0], c.cc, "/google.genomics.v1.StreamingReadService/StreamReads", opts...) + if err != nil { + return nil, err + } + x := &streamingReadServiceStreamReadsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type StreamingReadService_StreamReadsClient interface { + Recv() (*StreamReadsResponse, error) + grpc.ClientStream +} + +type streamingReadServiceStreamReadsClient struct { + grpc.ClientStream +} + +func (x *streamingReadServiceStreamReadsClient) Recv() (*StreamReadsResponse, error) { + m := new(StreamReadsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for StreamingReadService service + +type StreamingReadServiceServer interface { + // Returns a stream of all the reads matching the search request, ordered + // by reference name, position, and ID. + StreamReads(*StreamReadsRequest, StreamingReadService_StreamReadsServer) error +} + +func RegisterStreamingReadServiceServer(s *grpc.Server, srv StreamingReadServiceServer) { + s.RegisterService(&_StreamingReadService_serviceDesc, srv) +} + +func _StreamingReadService_StreamReads_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(StreamReadsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(StreamingReadServiceServer).StreamReads(m, &streamingReadServiceStreamReadsServer{stream}) +} + +type StreamingReadService_StreamReadsServer interface { + Send(*StreamReadsResponse) error + grpc.ServerStream +} + +type streamingReadServiceStreamReadsServer struct { + grpc.ServerStream +} + +func (x *streamingReadServiceStreamReadsServer) Send(m *StreamReadsResponse) error { + return x.ServerStream.SendMsg(m) +} + +var _StreamingReadService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.genomics.v1.StreamingReadService", + HandlerType: (*StreamingReadServiceServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamReads", + Handler: _StreamingReadService_StreamReads_Handler, + ServerStreams: true, + }, + }, + Metadata: "google/genomics/v1/reads.proto", +} + +// Client API for ReadServiceV1 service + +type ReadServiceV1Client interface { + // Creates read group sets by asynchronously importing the provided + // information. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // The caller must have WRITE permissions to the dataset. + // + // ## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import + // + // - Tags will be converted to strings - tag types are not preserved + // - Comments (`@CO`) in the input file header will not be preserved + // - Original header order of references (`@SQ`) will not be preserved + // - Any reverse stranded unmapped reads will be reverse complemented, and + // their qualities (also the "BQ" and "OQ" tags, if any) will be reversed + // - Unmapped reads will be stripped of positional information (reference name + // and position) + ImportReadGroupSets(ctx context.Context, in *ImportReadGroupSetsRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Exports a read group set to a BAM file in Google Cloud Storage. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Note that currently there may be some differences between exported BAM + // files and the original BAM file at the time of import. See + // [ImportReadGroupSets][google.genomics.v1.ReadServiceV1.ImportReadGroupSets] + // for caveats. + ExportReadGroupSet(ctx context.Context, in *ExportReadGroupSetRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Searches for read group sets matching the criteria. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L135). + SearchReadGroupSets(ctx context.Context, in *SearchReadGroupSetsRequest, opts ...grpc.CallOption) (*SearchReadGroupSetsResponse, error) + // Updates a read group set. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This method supports patch semantics. + UpdateReadGroupSet(ctx context.Context, in *UpdateReadGroupSetRequest, opts ...grpc.CallOption) (*ReadGroupSet, error) + // Deletes a read group set. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteReadGroupSet(ctx context.Context, in *DeleteReadGroupSetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Gets a read group set by ID. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetReadGroupSet(ctx context.Context, in *GetReadGroupSetRequest, opts ...grpc.CallOption) (*ReadGroupSet, error) + // Lists fixed width coverage buckets for a read group set, each of which + // correspond to a range of a reference sequence. Each bucket summarizes + // coverage information across its corresponding genomic range. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Coverage is defined as the number of reads which are aligned to a given + // base in the reference sequence. Coverage buckets are available at several + // precomputed bucket widths, enabling retrieval of various coverage 'zoom + // levels'. The caller must have READ permissions for the target read group + // set. + ListCoverageBuckets(ctx context.Context, in *ListCoverageBucketsRequest, opts ...grpc.CallOption) (*ListCoverageBucketsResponse, error) + // Gets a list of reads for one or more read group sets. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Reads search operates over a genomic coordinate space of reference sequence + // & position defined over the reference sequences to which the requested + // read group sets are aligned. + // + // If a target positional range is specified, search returns all reads whose + // alignment to the reference genome overlap the range. A query which + // specifies only read group set IDs yields all reads in those read group + // sets, including unmapped reads. + // + // All reads returned (including reads on subsequent pages) are ordered by + // genomic coordinate (by reference sequence, then position). Reads with + // equivalent genomic coordinates are returned in an unspecified order. This + // order is consistent, such that two queries for the same content (regardless + // of page size) yield reads in the same order across their respective streams + // of paginated responses. + // + // Implements + // [GlobalAllianceApi.searchReads](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L85). + SearchReads(ctx context.Context, in *SearchReadsRequest, opts ...grpc.CallOption) (*SearchReadsResponse, error) +} + +type readServiceV1Client struct { + cc *grpc.ClientConn +} + +func NewReadServiceV1Client(cc *grpc.ClientConn) ReadServiceV1Client { + return &readServiceV1Client{cc} +} + +func (c *readServiceV1Client) ImportReadGroupSets(ctx context.Context, in *ImportReadGroupSetsRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReadServiceV1/ImportReadGroupSets", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *readServiceV1Client) ExportReadGroupSet(ctx context.Context, in *ExportReadGroupSetRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReadServiceV1/ExportReadGroupSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *readServiceV1Client) SearchReadGroupSets(ctx context.Context, in *SearchReadGroupSetsRequest, opts ...grpc.CallOption) (*SearchReadGroupSetsResponse, error) { + out := new(SearchReadGroupSetsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReadServiceV1/SearchReadGroupSets", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *readServiceV1Client) UpdateReadGroupSet(ctx context.Context, in *UpdateReadGroupSetRequest, opts ...grpc.CallOption) (*ReadGroupSet, error) { + out := new(ReadGroupSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReadServiceV1/UpdateReadGroupSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *readServiceV1Client) DeleteReadGroupSet(ctx context.Context, in *DeleteReadGroupSetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReadServiceV1/DeleteReadGroupSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *readServiceV1Client) GetReadGroupSet(ctx context.Context, in *GetReadGroupSetRequest, opts ...grpc.CallOption) (*ReadGroupSet, error) { + out := new(ReadGroupSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReadServiceV1/GetReadGroupSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *readServiceV1Client) ListCoverageBuckets(ctx context.Context, in *ListCoverageBucketsRequest, opts ...grpc.CallOption) (*ListCoverageBucketsResponse, error) { + out := new(ListCoverageBucketsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReadServiceV1/ListCoverageBuckets", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *readServiceV1Client) SearchReads(ctx context.Context, in *SearchReadsRequest, opts ...grpc.CallOption) (*SearchReadsResponse, error) { + out := new(SearchReadsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReadServiceV1/SearchReads", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ReadServiceV1 service + +type ReadServiceV1Server interface { + // Creates read group sets by asynchronously importing the provided + // information. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // The caller must have WRITE permissions to the dataset. + // + // ## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import + // + // - Tags will be converted to strings - tag types are not preserved + // - Comments (`@CO`) in the input file header will not be preserved + // - Original header order of references (`@SQ`) will not be preserved + // - Any reverse stranded unmapped reads will be reverse complemented, and + // their qualities (also the "BQ" and "OQ" tags, if any) will be reversed + // - Unmapped reads will be stripped of positional information (reference name + // and position) + ImportReadGroupSets(context.Context, *ImportReadGroupSetsRequest) (*google_longrunning.Operation, error) + // Exports a read group set to a BAM file in Google Cloud Storage. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Note that currently there may be some differences between exported BAM + // files and the original BAM file at the time of import. See + // [ImportReadGroupSets][google.genomics.v1.ReadServiceV1.ImportReadGroupSets] + // for caveats. + ExportReadGroupSet(context.Context, *ExportReadGroupSetRequest) (*google_longrunning.Operation, error) + // Searches for read group sets matching the criteria. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L135). + SearchReadGroupSets(context.Context, *SearchReadGroupSetsRequest) (*SearchReadGroupSetsResponse, error) + // Updates a read group set. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This method supports patch semantics. + UpdateReadGroupSet(context.Context, *UpdateReadGroupSetRequest) (*ReadGroupSet, error) + // Deletes a read group set. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteReadGroupSet(context.Context, *DeleteReadGroupSetRequest) (*google_protobuf1.Empty, error) + // Gets a read group set by ID. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetReadGroupSet(context.Context, *GetReadGroupSetRequest) (*ReadGroupSet, error) + // Lists fixed width coverage buckets for a read group set, each of which + // correspond to a range of a reference sequence. Each bucket summarizes + // coverage information across its corresponding genomic range. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Coverage is defined as the number of reads which are aligned to a given + // base in the reference sequence. Coverage buckets are available at several + // precomputed bucket widths, enabling retrieval of various coverage 'zoom + // levels'. The caller must have READ permissions for the target read group + // set. + ListCoverageBuckets(context.Context, *ListCoverageBucketsRequest) (*ListCoverageBucketsResponse, error) + // Gets a list of reads for one or more read group sets. + // + // For the definitions of read group sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Reads search operates over a genomic coordinate space of reference sequence + // & position defined over the reference sequences to which the requested + // read group sets are aligned. + // + // If a target positional range is specified, search returns all reads whose + // alignment to the reference genome overlap the range. A query which + // specifies only read group set IDs yields all reads in those read group + // sets, including unmapped reads. + // + // All reads returned (including reads on subsequent pages) are ordered by + // genomic coordinate (by reference sequence, then position). Reads with + // equivalent genomic coordinates are returned in an unspecified order. This + // order is consistent, such that two queries for the same content (regardless + // of page size) yield reads in the same order across their respective streams + // of paginated responses. + // + // Implements + // [GlobalAllianceApi.searchReads](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L85). + SearchReads(context.Context, *SearchReadsRequest) (*SearchReadsResponse, error) +} + +func RegisterReadServiceV1Server(s *grpc.Server, srv ReadServiceV1Server) { + s.RegisterService(&_ReadServiceV1_serviceDesc, srv) +} + +func _ReadServiceV1_ImportReadGroupSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImportReadGroupSetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReadServiceV1Server).ImportReadGroupSets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReadServiceV1/ImportReadGroupSets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReadServiceV1Server).ImportReadGroupSets(ctx, req.(*ImportReadGroupSetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReadServiceV1_ExportReadGroupSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExportReadGroupSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReadServiceV1Server).ExportReadGroupSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReadServiceV1/ExportReadGroupSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReadServiceV1Server).ExportReadGroupSet(ctx, req.(*ExportReadGroupSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReadServiceV1_SearchReadGroupSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchReadGroupSetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReadServiceV1Server).SearchReadGroupSets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReadServiceV1/SearchReadGroupSets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReadServiceV1Server).SearchReadGroupSets(ctx, req.(*SearchReadGroupSetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReadServiceV1_UpdateReadGroupSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateReadGroupSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReadServiceV1Server).UpdateReadGroupSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReadServiceV1/UpdateReadGroupSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReadServiceV1Server).UpdateReadGroupSet(ctx, req.(*UpdateReadGroupSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReadServiceV1_DeleteReadGroupSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteReadGroupSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReadServiceV1Server).DeleteReadGroupSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReadServiceV1/DeleteReadGroupSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReadServiceV1Server).DeleteReadGroupSet(ctx, req.(*DeleteReadGroupSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReadServiceV1_GetReadGroupSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetReadGroupSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReadServiceV1Server).GetReadGroupSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReadServiceV1/GetReadGroupSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReadServiceV1Server).GetReadGroupSet(ctx, req.(*GetReadGroupSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReadServiceV1_ListCoverageBuckets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListCoverageBucketsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReadServiceV1Server).ListCoverageBuckets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReadServiceV1/ListCoverageBuckets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReadServiceV1Server).ListCoverageBuckets(ctx, req.(*ListCoverageBucketsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReadServiceV1_SearchReads_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchReadsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReadServiceV1Server).SearchReads(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReadServiceV1/SearchReads", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReadServiceV1Server).SearchReads(ctx, req.(*SearchReadsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ReadServiceV1_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.genomics.v1.ReadServiceV1", + HandlerType: (*ReadServiceV1Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ImportReadGroupSets", + Handler: _ReadServiceV1_ImportReadGroupSets_Handler, + }, + { + MethodName: "ExportReadGroupSet", + Handler: _ReadServiceV1_ExportReadGroupSet_Handler, + }, + { + MethodName: "SearchReadGroupSets", + Handler: _ReadServiceV1_SearchReadGroupSets_Handler, + }, + { + MethodName: "UpdateReadGroupSet", + Handler: _ReadServiceV1_UpdateReadGroupSet_Handler, + }, + { + MethodName: "DeleteReadGroupSet", + Handler: _ReadServiceV1_DeleteReadGroupSet_Handler, + }, + { + MethodName: "GetReadGroupSet", + Handler: _ReadServiceV1_GetReadGroupSet_Handler, + }, + { + MethodName: "ListCoverageBuckets", + Handler: _ReadServiceV1_ListCoverageBuckets_Handler, + }, + { + MethodName: "SearchReads", + Handler: _ReadServiceV1_SearchReads_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/genomics/v1/reads.proto", +} + +func init() { proto.RegisterFile("google/genomics/v1/reads.proto", fileDescriptor9) } + +var fileDescriptor9 = []byte{ + // 1333 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcf, 0x6f, 0x1b, 0xc5, + 0x17, 0xff, 0x8e, 0x1d, 0xb7, 0xcd, 0x73, 0x93, 0x38, 0xe3, 0x7e, 0x8b, 0xe3, 0x90, 0x36, 0x6c, + 0x69, 0x1b, 0x02, 0xb5, 0x89, 0x11, 0x2a, 0x4a, 0x85, 0x44, 0xda, 0x3a, 0xc1, 0x28, 0x69, 0xad, + 0x75, 0x02, 0x82, 0xcb, 0x6a, 0x62, 0x4f, 0xb6, 0x4b, 0xec, 0xdd, 0x65, 0x66, 0x9c, 0xfe, 0x52, + 0x2f, 0xbd, 0x81, 0x04, 0x1c, 0x10, 0x27, 0xae, 0x5c, 0x39, 0x22, 0xfe, 0x08, 0x4e, 0x88, 0x0b, + 0x7f, 0x00, 0xe2, 0x0f, 0xe0, 0xc4, 0x11, 0xcd, 0xec, 0x6e, 0xbc, 0xeb, 0x9d, 0x6d, 0x1c, 0x55, + 0xe2, 0xb6, 0xfb, 0xe6, 0xb3, 0x6f, 0x3e, 0xef, 0xf7, 0x5b, 0xb8, 0x64, 0x7b, 0x9e, 0xdd, 0xa7, + 0x75, 0x9b, 0xba, 0xde, 0xc0, 0xe9, 0xf2, 0xfa, 0xd1, 0x5a, 0x9d, 0x51, 0xd2, 0xe3, 0x35, 0x9f, + 0x79, 0xc2, 0xc3, 0x38, 0x38, 0xaf, 0x45, 0xe7, 0xb5, 0xa3, 0xb5, 0xea, 0xab, 0xe1, 0x37, 0xc4, + 0x77, 0xea, 0xc4, 0x75, 0x3d, 0x41, 0x84, 0xe3, 0xb9, 0xe1, 0x17, 0x55, 0xad, 0x46, 0xe2, 0xda, + 0x34, 0x3c, 0xbf, 0x96, 0x71, 0x23, 0xe9, 0x3b, 0xb6, 0x3b, 0xa0, 0xae, 0x08, 0x71, 0x57, 0x33, + 0x70, 0x36, 0xf3, 0x86, 0x3e, 0xa7, 0x11, 0xec, 0x4a, 0x08, 0xeb, 0x7b, 0xae, 0xcd, 0x86, 0xae, + 0xeb, 0xb8, 0x76, 0xdd, 0xf3, 0x29, 0x4b, 0x70, 0x5a, 0x0c, 0x41, 0xea, 0x6d, 0x7f, 0x78, 0x50, + 0xa7, 0x03, 0x5f, 0x3c, 0x0e, 0x0f, 0x97, 0xc7, 0x0f, 0x0f, 0x1c, 0xda, 0xef, 0x59, 0x03, 0xc2, + 0x0f, 0x03, 0x84, 0xf1, 0x35, 0x82, 0x6a, 0x87, 0x12, 0xd6, 0x7d, 0x60, 0x52, 0xd2, 0xdb, 0x92, + 0x04, 0x3a, 0x54, 0x70, 0x93, 0x7e, 0x31, 0xa4, 0x5c, 0xe0, 0xcb, 0x50, 0xec, 0x11, 0x41, 0x38, + 0x15, 0x96, 0xd3, 0xe3, 0x15, 0xb4, 0x9c, 0x5f, 0x99, 0x36, 0x21, 0x14, 0xb5, 0x7a, 0x1c, 0x63, + 0x98, 0x72, 0xc9, 0x80, 0x56, 0xf2, 0xcb, 0x68, 0x65, 0xda, 0x54, 0xcf, 0x78, 0x09, 0xc0, 0x27, + 0x36, 0xb5, 0x84, 0x77, 0x48, 0xdd, 0x4a, 0x4e, 0x9d, 0x4c, 0x4b, 0xc9, 0xae, 0x14, 0xe0, 0x45, + 0x50, 0x2f, 0x16, 0x77, 0x9e, 0xd0, 0xca, 0xd4, 0x32, 0x5a, 0x29, 0x98, 0xe7, 0xa4, 0xa0, 0xe3, + 0x3c, 0xa1, 0xc6, 0xb7, 0x08, 0x16, 0xb5, 0x7c, 0xb8, 0xef, 0xb9, 0x9c, 0xe2, 0x0f, 0x61, 0x4e, + 0x7a, 0xca, 0x52, 0xae, 0xb2, 0x38, 0x15, 0x01, 0xa9, 0x62, 0x63, 0xb9, 0x96, 0x0e, 0x67, 0x2d, + 0xae, 0xc3, 0x9c, 0x61, 0x71, 0x8d, 0xf8, 0x1a, 0xcc, 0xb9, 0xf4, 0x91, 0xb0, 0x52, 0x54, 0x67, + 0xa4, 0xb8, 0x1d, 0xd1, 0x35, 0xfe, 0xc8, 0x41, 0xb5, 0x35, 0xf0, 0x3d, 0x26, 0xb4, 0x1e, 0x5a, + 0x02, 0x18, 0x79, 0xa8, 0x82, 0x02, 0x63, 0x8f, 0x1d, 0x84, 0x57, 0xa0, 0xc4, 0xe8, 0x01, 0x65, + 0xd4, 0xed, 0x52, 0x2b, 0x04, 0x4d, 0x29, 0xd0, 0xec, 0xb1, 0xbc, 0xa3, 0x90, 0x97, 0xa1, 0xc8, + 0xbd, 0x21, 0xeb, 0x52, 0x6b, 0xc8, 0x1c, 0x5e, 0xc9, 0x05, 0xae, 0x0e, 0x44, 0x7b, 0xcc, 0xe1, + 0xd8, 0x03, 0xec, 0x13, 0x26, 0x1c, 0x19, 0x7d, 0x8b, 0x0b, 0x46, 0x04, 0xb5, 0x1f, 0x57, 0x0a, + 0xcb, 0x68, 0x65, 0xb6, 0xf1, 0x81, 0xce, 0xfa, 0x6c, 0xd6, 0xb5, 0x76, 0xa4, 0xa8, 0x13, 0xea, + 0x31, 0xe7, 0xfd, 0x71, 0x91, 0x61, 0xc1, 0x7c, 0x0a, 0x87, 0x0d, 0xb8, 0xd4, 0xde, 0x30, 0x77, + 0x5b, 0xbb, 0xad, 0xfb, 0xf7, 0xac, 0xce, 0xae, 0xb9, 0xb1, 0xdb, 0xdc, 0xfa, 0xd4, 0xda, 0xbb, + 0xd7, 0x69, 0x37, 0xef, 0xb4, 0x36, 0x5b, 0xcd, 0xbb, 0xa5, 0xff, 0xe1, 0x57, 0xa0, 0xdc, 0x6e, + 0x9a, 0xd6, 0x66, 0x6b, 0xbb, 0x69, 0xc9, 0x87, 0xce, 0xc6, 0x4e, 0x7b, 0xbb, 0x59, 0x42, 0x78, + 0x06, 0xa6, 0x77, 0x9a, 0xe6, 0x56, 0xd3, 0xda, 0xd8, 0xde, 0x2e, 0xe5, 0x8c, 0x8f, 0x60, 0x51, + 0xcb, 0x31, 0x8c, 0xf5, 0x9b, 0x80, 0x93, 0xb1, 0x8e, 0xe5, 0xe0, 0x5c, 0x3c, 0x98, 0xad, 0x1e, + 0x37, 0x7e, 0x42, 0xb0, 0xd0, 0x7c, 0x34, 0xae, 0x2c, 0x16, 0x25, 0x9f, 0x79, 0x9f, 0xd3, 0x6e, + 0x3c, 0x4a, 0xa1, 0xa4, 0xd5, 0x93, 0xc7, 0x54, 0x7d, 0x2b, 0x7d, 0x1f, 0x65, 0x6c, 0x20, 0xd9, + 0x63, 0x0e, 0x7e, 0x03, 0xe6, 0x53, 0x44, 0xc2, 0x8c, 0x9f, 0x4d, 0xf2, 0xc0, 0xd7, 0x65, 0x7e, + 0x46, 0xf1, 0x96, 0xd5, 0xc0, 0x2b, 0x53, 0x8a, 0xf0, 0x28, 0xdc, 0xf7, 0xa4, 0xd4, 0xf8, 0x15, + 0xc1, 0xc2, 0x9e, 0xdf, 0x23, 0x82, 0xea, 0xf8, 0x6a, 0x6f, 0x44, 0xda, 0x1b, 0x37, 0x61, 0x36, + 0x09, 0x55, 0xfc, 0x27, 0x29, 0x88, 0xf3, 0x71, 0x4d, 0xf8, 0x16, 0x14, 0x87, 0x8a, 0x8f, 0x6a, + 0x0f, 0xca, 0xbc, 0x62, 0xa3, 0x1a, 0x29, 0x89, 0x3a, 0x48, 0x6d, 0x53, 0x76, 0x90, 0x1d, 0xc2, + 0x0f, 0x4d, 0x08, 0xe0, 0xf2, 0xd9, 0xd8, 0x84, 0x85, 0xbb, 0xb4, 0x4f, 0x5f, 0xd6, 0x18, 0xe3, + 0x0e, 0x5c, 0xdc, 0xa2, 0xe2, 0x25, 0x95, 0x3c, 0xcf, 0x41, 0x75, 0xdb, 0xe1, 0xe2, 0x8e, 0x77, + 0x44, 0x19, 0xb1, 0xe9, 0xed, 0x61, 0xf7, 0x30, 0x56, 0xb1, 0xa7, 0xf0, 0xed, 0x55, 0x98, 0x4d, + 0x46, 0x33, 0x8c, 0xfa, 0x4c, 0x22, 0x98, 0xf8, 0x02, 0x14, 0xb8, 0x20, 0x4c, 0xa8, 0xca, 0xce, + 0x9b, 0xc1, 0x0b, 0x2e, 0x41, 0x9e, 0xba, 0x3d, 0x55, 0xa0, 0x79, 0x53, 0x3e, 0xe2, 0x1a, 0x94, + 0x05, 0x61, 0x36, 0x15, 0xd6, 0xbe, 0xa2, 0x64, 0x3d, 0x74, 0x7a, 0xe2, 0x41, 0xe5, 0x8c, 0x42, + 0xcc, 0x07, 0x47, 0x01, 0xd9, 0x4f, 0xe4, 0xc1, 0x58, 0x23, 0x3d, 0xfb, 0xc2, 0x46, 0x7a, 0x6e, + 0xac, 0x91, 0x1e, 0xc0, 0x6c, 0xd2, 0x7e, 0x5c, 0x87, 0x82, 0x1a, 0x56, 0xca, 0xd6, 0x62, 0x63, + 0x41, 0x9b, 0x1f, 0x12, 0x60, 0x06, 0x38, 0x7c, 0x05, 0x66, 0x06, 0x94, 0xb8, 0x56, 0x37, 0xd4, + 0xa3, 0x12, 0x2b, 0x67, 0x9e, 0x97, 0xc2, 0x48, 0xb7, 0xf1, 0x0b, 0x82, 0x45, 0xad, 0xb3, 0xc3, + 0x22, 0x7e, 0x0d, 0xce, 0x27, 0x8c, 0x45, 0xca, 0xd8, 0xe2, 0x7e, 0xcc, 0xcc, 0x1d, 0x28, 0x45, + 0x57, 0x84, 0x8e, 0x09, 0xda, 0x5f, 0xb1, 0x61, 0xe8, 0x38, 0x26, 0x6f, 0x32, 0xe7, 0xba, 0xc9, + 0x9b, 0x75, 0x8d, 0x3d, 0xaf, 0x6b, 0xec, 0x7f, 0x23, 0xc0, 0xa3, 0x51, 0x73, 0x9c, 0x1e, 0xa7, + 0xe9, 0x3a, 0xf8, 0xf5, 0x44, 0xf1, 0x49, 0x60, 0x41, 0x01, 0x47, 0xa5, 0x25, 0x51, 0xe9, 0x34, + 0x3a, 0xfb, 0xc2, 0x34, 0x3a, 0xa7, 0x49, 0xa3, 0xe9, 0x51, 0x1a, 0x25, 0xd3, 0x22, 0x7f, 0xaa, + 0xf9, 0xfa, 0x10, 0xca, 0x09, 0x9b, 0xc3, 0x28, 0xbd, 0x07, 0x70, 0xbc, 0xa4, 0x44, 0x13, 0xb5, + 0x92, 0xd5, 0x40, 0xcc, 0x18, 0x76, 0xe2, 0x31, 0xfa, 0x97, 0xf4, 0xb6, 0x60, 0x94, 0x0c, 0x12, + 0xde, 0x3e, 0xa1, 0x31, 0x6b, 0x6b, 0x35, 0xf7, 0x5f, 0xd4, 0xaa, 0xc4, 0x3d, 0x20, 0xac, 0xa7, + 0xaa, 0xb3, 0x60, 0x06, 0x2f, 0x32, 0x9b, 0x85, 0x27, 0x48, 0xdf, 0x52, 0xaf, 0x5c, 0xc5, 0xb1, + 0x60, 0x16, 0x95, 0xac, 0xa3, 0x44, 0xc6, 0x7d, 0x28, 0x27, 0xec, 0x7c, 0x59, 0x0f, 0x37, 0xbe, + 0x47, 0x70, 0x21, 0xd0, 0xe8, 0xb8, 0xb6, 0x3c, 0xed, 0x50, 0x76, 0xe4, 0x74, 0x29, 0x7e, 0x06, + 0xc5, 0xd8, 0x4d, 0xf8, 0x9a, 0x4e, 0x5b, 0xda, 0xe5, 0xd5, 0xeb, 0x27, 0xe2, 0x02, 0xca, 0xc6, + 0xe2, 0xf3, 0xdf, 0xff, 0xfc, 0x2e, 0xf7, 0x7f, 0xa3, 0x74, 0xbc, 0x39, 0xaf, 0x73, 0x05, 0x5b, + 0x47, 0xab, 0x6f, 0xa3, 0xc6, 0x6f, 0xd3, 0x30, 0x13, 0xa3, 0xf3, 0xf1, 0x1a, 0xfe, 0x12, 0x41, + 0x59, 0x33, 0xd0, 0x71, 0xed, 0x74, 0xdb, 0x49, 0x75, 0x29, 0xc2, 0xc7, 0x36, 0xdf, 0xda, 0xfd, + 0x68, 0xf3, 0x35, 0xae, 0x28, 0x5e, 0x4b, 0x46, 0x65, 0x7c, 0x6f, 0xe6, 0xeb, 0x8e, 0x52, 0xba, + 0x8e, 0x56, 0xf1, 0x0f, 0x08, 0x70, 0x7a, 0x1f, 0xc0, 0x37, 0x74, 0x54, 0x32, 0xf7, 0x86, 0x93, + 0x98, 0xdc, 0x54, 0x4c, 0xd6, 0x8c, 0xb7, 0x52, 0x4c, 0xea, 0x4f, 0x53, 0x79, 0xfb, 0x6c, 0x3d, + 0xd8, 0x28, 0x42, 0x76, 0x65, 0xcd, 0x9a, 0xab, 0xf7, 0x54, 0xf6, 0x7e, 0x5e, 0xad, 0x4f, 0x8c, + 0x0f, 0x63, 0x9a, 0xed, 0xbb, 0x3a, 0x57, 0x9f, 0x49, 0x76, 0x3f, 0x22, 0xc0, 0xe9, 0xdd, 0x44, + 0xef, 0xbb, 0xcc, 0x1d, 0xa6, 0x7a, 0xe2, 0x02, 0x62, 0xbc, 0xaf, 0xc8, 0xdc, 0x6c, 0x5c, 0x9d, + 0xcc, 0x7d, 0x63, 0x7b, 0x0e, 0xfe, 0x0a, 0x01, 0x4e, 0x6f, 0x1d, 0x7a, 0x9a, 0x99, 0xdb, 0x49, + 0xf5, 0x62, 0x6a, 0xc5, 0x69, 0xca, 0x3f, 0x28, 0xe3, 0x86, 0x22, 0x77, 0x7d, 0x75, 0x32, 0x72, + 0xf8, 0x1b, 0x04, 0x73, 0x63, 0xab, 0x0b, 0x5e, 0xd5, 0x31, 0xd1, 0xef, 0x37, 0x13, 0x78, 0x2b, + 0x24, 0x84, 0x27, 0x24, 0xf4, 0x33, 0x82, 0xb2, 0x66, 0x30, 0xeb, 0x53, 0x2c, 0x7b, 0x5d, 0xd2, + 0xa7, 0xd8, 0x0b, 0x26, 0x7e, 0x14, 0x55, 0xfc, 0xee, 0x44, 0x3c, 0xeb, 0xd1, 0xf8, 0x0e, 0x27, + 0x3f, 0x7e, 0x0a, 0xc5, 0xd8, 0x84, 0xca, 0xe8, 0x6a, 0xa9, 0xb1, 0x9d, 0xd1, 0xd5, 0xd2, 0xa3, + 0x4e, 0xd3, 0xd5, 0x46, 0x99, 0x7f, 0x9b, 0xc2, 0xc5, 0xae, 0x37, 0xd0, 0xa8, 0xba, 0x0d, 0x4a, + 0x4b, 0x5b, 0xe6, 0x48, 0x1b, 0x7d, 0xb6, 0x1e, 0x21, 0xbc, 0x3e, 0x71, 0xed, 0x9a, 0xc7, 0x6c, + 0xf9, 0x33, 0xaf, 0x32, 0xa8, 0x1e, 0x1c, 0x11, 0xdf, 0xe1, 0xf1, 0x1f, 0xfc, 0x5b, 0xd1, 0xf3, + 0x3f, 0x08, 0xed, 0x9f, 0x51, 0xc8, 0x77, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x9b, 0xce, + 0x6e, 0xa3, 0x10, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/references.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/references.pb.go new file mode 100644 index 0000000..1570575 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/references.pb.go @@ -0,0 +1,865 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/references.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A reference is a canonical assembled DNA sequence, intended to act as a +// reference coordinate space for other genomic annotations. A single reference +// might represent the human chromosome 1 or mitochandrial DNA, for instance. A +// reference belongs to one or more reference sets. +// +// For more genomics resource definitions, see [Fundamentals of Google +// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) +type Reference struct { + // The server-generated reference ID, unique across all references. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The length of this reference's sequence. + Length int64 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` + // MD5 of the upper-case sequence excluding all whitespace characters (this + // is equivalent to SQ:M5 in SAM). This value is represented in lower case + // hexadecimal format. + Md5Checksum string `protobuf:"bytes,3,opt,name=md5checksum" json:"md5checksum,omitempty"` + // The name of this reference, for example `22`. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + // The URI from which the sequence was obtained. Typically specifies a FASTA + // format file. + SourceUri string `protobuf:"bytes,5,opt,name=source_uri,json=sourceUri" json:"source_uri,omitempty"` + // All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally + // with a version number, for example `GCF_000001405.26`. + SourceAccessions []string `protobuf:"bytes,6,rep,name=source_accessions,json=sourceAccessions" json:"source_accessions,omitempty"` + // ID from http://www.ncbi.nlm.nih.gov/taxonomy. For example, 9606 for human. + NcbiTaxonId int32 `protobuf:"varint,7,opt,name=ncbi_taxon_id,json=ncbiTaxonId" json:"ncbi_taxon_id,omitempty"` +} + +func (m *Reference) Reset() { *m = Reference{} } +func (m *Reference) String() string { return proto.CompactTextString(m) } +func (*Reference) ProtoMessage() {} +func (*Reference) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{0} } + +func (m *Reference) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Reference) GetLength() int64 { + if m != nil { + return m.Length + } + return 0 +} + +func (m *Reference) GetMd5Checksum() string { + if m != nil { + return m.Md5Checksum + } + return "" +} + +func (m *Reference) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Reference) GetSourceUri() string { + if m != nil { + return m.SourceUri + } + return "" +} + +func (m *Reference) GetSourceAccessions() []string { + if m != nil { + return m.SourceAccessions + } + return nil +} + +func (m *Reference) GetNcbiTaxonId() int32 { + if m != nil { + return m.NcbiTaxonId + } + return 0 +} + +// A reference set is a set of references which typically comprise a reference +// assembly for a species, such as `GRCh38` which is representative +// of the human genome. A reference set defines a common coordinate space for +// comparing reference-aligned experimental data. A reference set contains 1 or +// more references. +// +// For more genomics resource definitions, see [Fundamentals of Google +// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) +type ReferenceSet struct { + // The server-generated reference set ID, unique across all reference sets. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The IDs of the reference objects that are part of this set. + // `Reference.md5checksum` must be unique within this set. + ReferenceIds []string `protobuf:"bytes,2,rep,name=reference_ids,json=referenceIds" json:"reference_ids,omitempty"` + // Order-independent MD5 checksum which identifies this reference set. The + // checksum is computed by sorting all lower case hexidecimal string + // `reference.md5checksum` (for all reference in this set) in + // ascending lexicographic order, concatenating, and taking the MD5 of that + // value. The resulting value is represented in lower case hexadecimal format. + Md5Checksum string `protobuf:"bytes,3,opt,name=md5checksum" json:"md5checksum,omitempty"` + // ID from http://www.ncbi.nlm.nih.gov/taxonomy (for example, 9606 for human) + // indicating the species which this reference set is intended to model. Note + // that contained references may specify a different `ncbiTaxonId`, as + // assemblies may contain reference sequences which do not belong to the + // modeled species, for example EBV in a human reference genome. + NcbiTaxonId int32 `protobuf:"varint,4,opt,name=ncbi_taxon_id,json=ncbiTaxonId" json:"ncbi_taxon_id,omitempty"` + // Free text description of this reference set. + Description string `protobuf:"bytes,5,opt,name=description" json:"description,omitempty"` + // Public id of this reference set, such as `GRCh37`. + AssemblyId string `protobuf:"bytes,6,opt,name=assembly_id,json=assemblyId" json:"assembly_id,omitempty"` + // The URI from which the references were obtained. + SourceUri string `protobuf:"bytes,7,opt,name=source_uri,json=sourceUri" json:"source_uri,omitempty"` + // All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally + // with a version number, for example `NC_000001.11`. + SourceAccessions []string `protobuf:"bytes,8,rep,name=source_accessions,json=sourceAccessions" json:"source_accessions,omitempty"` +} + +func (m *ReferenceSet) Reset() { *m = ReferenceSet{} } +func (m *ReferenceSet) String() string { return proto.CompactTextString(m) } +func (*ReferenceSet) ProtoMessage() {} +func (*ReferenceSet) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{1} } + +func (m *ReferenceSet) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *ReferenceSet) GetReferenceIds() []string { + if m != nil { + return m.ReferenceIds + } + return nil +} + +func (m *ReferenceSet) GetMd5Checksum() string { + if m != nil { + return m.Md5Checksum + } + return "" +} + +func (m *ReferenceSet) GetNcbiTaxonId() int32 { + if m != nil { + return m.NcbiTaxonId + } + return 0 +} + +func (m *ReferenceSet) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *ReferenceSet) GetAssemblyId() string { + if m != nil { + return m.AssemblyId + } + return "" +} + +func (m *ReferenceSet) GetSourceUri() string { + if m != nil { + return m.SourceUri + } + return "" +} + +func (m *ReferenceSet) GetSourceAccessions() []string { + if m != nil { + return m.SourceAccessions + } + return nil +} + +type SearchReferenceSetsRequest struct { + // If present, return reference sets for which the + // [md5checksum][google.genomics.v1.ReferenceSet.md5checksum] matches exactly. + Md5Checksums []string `protobuf:"bytes,1,rep,name=md5checksums" json:"md5checksums,omitempty"` + // If present, return reference sets for which a prefix of any of + // [sourceAccessions][google.genomics.v1.ReferenceSet.source_accessions] + // match any of these strings. Accession numbers typically have a main number + // and a version, for example `NC_000001.11`. + Accessions []string `protobuf:"bytes,2,rep,name=accessions" json:"accessions,omitempty"` + // If present, return reference sets for which a substring of their + // `assemblyId` matches this string (case insensitive). + AssemblyId string `protobuf:"bytes,3,opt,name=assembly_id,json=assemblyId" json:"assembly_id,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 1024. The maximum value is 4096. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *SearchReferenceSetsRequest) Reset() { *m = SearchReferenceSetsRequest{} } +func (m *SearchReferenceSetsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchReferenceSetsRequest) ProtoMessage() {} +func (*SearchReferenceSetsRequest) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{2} } + +func (m *SearchReferenceSetsRequest) GetMd5Checksums() []string { + if m != nil { + return m.Md5Checksums + } + return nil +} + +func (m *SearchReferenceSetsRequest) GetAccessions() []string { + if m != nil { + return m.Accessions + } + return nil +} + +func (m *SearchReferenceSetsRequest) GetAssemblyId() string { + if m != nil { + return m.AssemblyId + } + return "" +} + +func (m *SearchReferenceSetsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchReferenceSetsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +type SearchReferenceSetsResponse struct { + // The matching references sets. + ReferenceSets []*ReferenceSet `protobuf:"bytes,1,rep,name=reference_sets,json=referenceSets" json:"reference_sets,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchReferenceSetsResponse) Reset() { *m = SearchReferenceSetsResponse{} } +func (m *SearchReferenceSetsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchReferenceSetsResponse) ProtoMessage() {} +func (*SearchReferenceSetsResponse) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{3} } + +func (m *SearchReferenceSetsResponse) GetReferenceSets() []*ReferenceSet { + if m != nil { + return m.ReferenceSets + } + return nil +} + +func (m *SearchReferenceSetsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +type GetReferenceSetRequest struct { + // The ID of the reference set. + ReferenceSetId string `protobuf:"bytes,1,opt,name=reference_set_id,json=referenceSetId" json:"reference_set_id,omitempty"` +} + +func (m *GetReferenceSetRequest) Reset() { *m = GetReferenceSetRequest{} } +func (m *GetReferenceSetRequest) String() string { return proto.CompactTextString(m) } +func (*GetReferenceSetRequest) ProtoMessage() {} +func (*GetReferenceSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{4} } + +func (m *GetReferenceSetRequest) GetReferenceSetId() string { + if m != nil { + return m.ReferenceSetId + } + return "" +} + +type SearchReferencesRequest struct { + // If present, return references for which the + // [md5checksum][google.genomics.v1.Reference.md5checksum] matches exactly. + Md5Checksums []string `protobuf:"bytes,1,rep,name=md5checksums" json:"md5checksums,omitempty"` + // If present, return references for which a prefix of any of + // [sourceAccessions][google.genomics.v1.Reference.source_accessions] match + // any of these strings. Accession numbers typically have a main number and a + // version, for example `GCF_000001405.26`. + Accessions []string `protobuf:"bytes,2,rep,name=accessions" json:"accessions,omitempty"` + // If present, return only references which belong to this reference set. + ReferenceSetId string `protobuf:"bytes,3,opt,name=reference_set_id,json=referenceSetId" json:"reference_set_id,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 1024. The maximum value is 4096. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *SearchReferencesRequest) Reset() { *m = SearchReferencesRequest{} } +func (m *SearchReferencesRequest) String() string { return proto.CompactTextString(m) } +func (*SearchReferencesRequest) ProtoMessage() {} +func (*SearchReferencesRequest) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{5} } + +func (m *SearchReferencesRequest) GetMd5Checksums() []string { + if m != nil { + return m.Md5Checksums + } + return nil +} + +func (m *SearchReferencesRequest) GetAccessions() []string { + if m != nil { + return m.Accessions + } + return nil +} + +func (m *SearchReferencesRequest) GetReferenceSetId() string { + if m != nil { + return m.ReferenceSetId + } + return "" +} + +func (m *SearchReferencesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchReferencesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +type SearchReferencesResponse struct { + // The matching references. + References []*Reference `protobuf:"bytes,1,rep,name=references" json:"references,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchReferencesResponse) Reset() { *m = SearchReferencesResponse{} } +func (m *SearchReferencesResponse) String() string { return proto.CompactTextString(m) } +func (*SearchReferencesResponse) ProtoMessage() {} +func (*SearchReferencesResponse) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{6} } + +func (m *SearchReferencesResponse) GetReferences() []*Reference { + if m != nil { + return m.References + } + return nil +} + +func (m *SearchReferencesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +type GetReferenceRequest struct { + // The ID of the reference. + ReferenceId string `protobuf:"bytes,1,opt,name=reference_id,json=referenceId" json:"reference_id,omitempty"` +} + +func (m *GetReferenceRequest) Reset() { *m = GetReferenceRequest{} } +func (m *GetReferenceRequest) String() string { return proto.CompactTextString(m) } +func (*GetReferenceRequest) ProtoMessage() {} +func (*GetReferenceRequest) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{7} } + +func (m *GetReferenceRequest) GetReferenceId() string { + if m != nil { + return m.ReferenceId + } + return "" +} + +type ListBasesRequest struct { + // The ID of the reference. + ReferenceId string `protobuf:"bytes,1,opt,name=reference_id,json=referenceId" json:"reference_id,omitempty"` + // The start position (0-based) of this query. Defaults to 0. + Start int64 `protobuf:"varint,2,opt,name=start" json:"start,omitempty"` + // The end position (0-based, exclusive) of this query. Defaults to the length + // of this reference. + End int64 `protobuf:"varint,3,opt,name=end" json:"end,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of bases to return in a single page. If unspecified, + // defaults to 200Kbp (kilo base pairs). The maximum value is 10Mbp (mega base + // pairs). + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListBasesRequest) Reset() { *m = ListBasesRequest{} } +func (m *ListBasesRequest) String() string { return proto.CompactTextString(m) } +func (*ListBasesRequest) ProtoMessage() {} +func (*ListBasesRequest) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{8} } + +func (m *ListBasesRequest) GetReferenceId() string { + if m != nil { + return m.ReferenceId + } + return "" +} + +func (m *ListBasesRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *ListBasesRequest) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *ListBasesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListBasesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +type ListBasesResponse struct { + // The offset position (0-based) of the given `sequence` from the + // start of this `Reference`. This value will differ for each page + // in a paginated request. + Offset int64 `protobuf:"varint,1,opt,name=offset" json:"offset,omitempty"` + // A substring of the bases that make up this reference. + Sequence string `protobuf:"bytes,2,opt,name=sequence" json:"sequence,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListBasesResponse) Reset() { *m = ListBasesResponse{} } +func (m *ListBasesResponse) String() string { return proto.CompactTextString(m) } +func (*ListBasesResponse) ProtoMessage() {} +func (*ListBasesResponse) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{9} } + +func (m *ListBasesResponse) GetOffset() int64 { + if m != nil { + return m.Offset + } + return 0 +} + +func (m *ListBasesResponse) GetSequence() string { + if m != nil { + return m.Sequence + } + return "" +} + +func (m *ListBasesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func init() { + proto.RegisterType((*Reference)(nil), "google.genomics.v1.Reference") + proto.RegisterType((*ReferenceSet)(nil), "google.genomics.v1.ReferenceSet") + proto.RegisterType((*SearchReferenceSetsRequest)(nil), "google.genomics.v1.SearchReferenceSetsRequest") + proto.RegisterType((*SearchReferenceSetsResponse)(nil), "google.genomics.v1.SearchReferenceSetsResponse") + proto.RegisterType((*GetReferenceSetRequest)(nil), "google.genomics.v1.GetReferenceSetRequest") + proto.RegisterType((*SearchReferencesRequest)(nil), "google.genomics.v1.SearchReferencesRequest") + proto.RegisterType((*SearchReferencesResponse)(nil), "google.genomics.v1.SearchReferencesResponse") + proto.RegisterType((*GetReferenceRequest)(nil), "google.genomics.v1.GetReferenceRequest") + proto.RegisterType((*ListBasesRequest)(nil), "google.genomics.v1.ListBasesRequest") + proto.RegisterType((*ListBasesResponse)(nil), "google.genomics.v1.ListBasesResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ReferenceServiceV1 service + +type ReferenceServiceV1Client interface { + // Searches for reference sets which match the given criteria. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchReferenceSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L71) + SearchReferenceSets(ctx context.Context, in *SearchReferenceSetsRequest, opts ...grpc.CallOption) (*SearchReferenceSetsResponse, error) + // Gets a reference set. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L83). + GetReferenceSet(ctx context.Context, in *GetReferenceSetRequest, opts ...grpc.CallOption) (*ReferenceSet, error) + // Searches for references which match the given criteria. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L146). + SearchReferences(ctx context.Context, in *SearchReferencesRequest, opts ...grpc.CallOption) (*SearchReferencesResponse, error) + // Gets a reference. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L158). + GetReference(ctx context.Context, in *GetReferenceRequest, opts ...grpc.CallOption) (*Reference, error) + // Lists the bases in a reference, optionally restricted to a range. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.getReferenceBases](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L221). + ListBases(ctx context.Context, in *ListBasesRequest, opts ...grpc.CallOption) (*ListBasesResponse, error) +} + +type referenceServiceV1Client struct { + cc *grpc.ClientConn +} + +func NewReferenceServiceV1Client(cc *grpc.ClientConn) ReferenceServiceV1Client { + return &referenceServiceV1Client{cc} +} + +func (c *referenceServiceV1Client) SearchReferenceSets(ctx context.Context, in *SearchReferenceSetsRequest, opts ...grpc.CallOption) (*SearchReferenceSetsResponse, error) { + out := new(SearchReferenceSetsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReferenceServiceV1/SearchReferenceSets", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *referenceServiceV1Client) GetReferenceSet(ctx context.Context, in *GetReferenceSetRequest, opts ...grpc.CallOption) (*ReferenceSet, error) { + out := new(ReferenceSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReferenceServiceV1/GetReferenceSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *referenceServiceV1Client) SearchReferences(ctx context.Context, in *SearchReferencesRequest, opts ...grpc.CallOption) (*SearchReferencesResponse, error) { + out := new(SearchReferencesResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReferenceServiceV1/SearchReferences", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *referenceServiceV1Client) GetReference(ctx context.Context, in *GetReferenceRequest, opts ...grpc.CallOption) (*Reference, error) { + out := new(Reference) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReferenceServiceV1/GetReference", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *referenceServiceV1Client) ListBases(ctx context.Context, in *ListBasesRequest, opts ...grpc.CallOption) (*ListBasesResponse, error) { + out := new(ListBasesResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.ReferenceServiceV1/ListBases", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ReferenceServiceV1 service + +type ReferenceServiceV1Server interface { + // Searches for reference sets which match the given criteria. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchReferenceSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L71) + SearchReferenceSets(context.Context, *SearchReferenceSetsRequest) (*SearchReferenceSetsResponse, error) + // Gets a reference set. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L83). + GetReferenceSet(context.Context, *GetReferenceSetRequest) (*ReferenceSet, error) + // Searches for references which match the given criteria. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L146). + SearchReferences(context.Context, *SearchReferencesRequest) (*SearchReferencesResponse, error) + // Gets a reference. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L158). + GetReference(context.Context, *GetReferenceRequest) (*Reference, error) + // Lists the bases in a reference, optionally restricted to a range. + // + // For the definitions of references and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.getReferenceBases](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L221). + ListBases(context.Context, *ListBasesRequest) (*ListBasesResponse, error) +} + +func RegisterReferenceServiceV1Server(s *grpc.Server, srv ReferenceServiceV1Server) { + s.RegisterService(&_ReferenceServiceV1_serviceDesc, srv) +} + +func _ReferenceServiceV1_SearchReferenceSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchReferenceSetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReferenceServiceV1Server).SearchReferenceSets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReferenceServiceV1/SearchReferenceSets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReferenceServiceV1Server).SearchReferenceSets(ctx, req.(*SearchReferenceSetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReferenceServiceV1_GetReferenceSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetReferenceSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReferenceServiceV1Server).GetReferenceSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReferenceServiceV1/GetReferenceSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReferenceServiceV1Server).GetReferenceSet(ctx, req.(*GetReferenceSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReferenceServiceV1_SearchReferences_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchReferencesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReferenceServiceV1Server).SearchReferences(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReferenceServiceV1/SearchReferences", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReferenceServiceV1Server).SearchReferences(ctx, req.(*SearchReferencesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReferenceServiceV1_GetReference_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetReferenceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReferenceServiceV1Server).GetReference(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReferenceServiceV1/GetReference", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReferenceServiceV1Server).GetReference(ctx, req.(*GetReferenceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ReferenceServiceV1_ListBases_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListBasesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReferenceServiceV1Server).ListBases(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.ReferenceServiceV1/ListBases", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReferenceServiceV1Server).ListBases(ctx, req.(*ListBasesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ReferenceServiceV1_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.genomics.v1.ReferenceServiceV1", + HandlerType: (*ReferenceServiceV1Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SearchReferenceSets", + Handler: _ReferenceServiceV1_SearchReferenceSets_Handler, + }, + { + MethodName: "GetReferenceSet", + Handler: _ReferenceServiceV1_GetReferenceSet_Handler, + }, + { + MethodName: "SearchReferences", + Handler: _ReferenceServiceV1_SearchReferences_Handler, + }, + { + MethodName: "GetReference", + Handler: _ReferenceServiceV1_GetReference_Handler, + }, + { + MethodName: "ListBases", + Handler: _ReferenceServiceV1_ListBases_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/genomics/v1/references.proto", +} + +func init() { proto.RegisterFile("google/genomics/v1/references.proto", fileDescriptor10) } + +var fileDescriptor10 = []byte{ + // 851 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0xd6, 0x78, 0x63, 0x37, 0x7e, 0x76, 0x12, 0xf7, 0x15, 0xc2, 0xca, 0x25, 0xd4, 0x6c, 0x9a, + 0x62, 0x35, 0x95, 0x57, 0x29, 0x42, 0x42, 0x45, 0x1c, 0xc8, 0xa5, 0x8a, 0xc4, 0x21, 0xda, 0x14, + 0x0e, 0x5c, 0x56, 0x9b, 0xdd, 0x89, 0x33, 0x34, 0xde, 0x31, 0x3b, 0x93, 0xa8, 0xb4, 0xca, 0x01, + 0x24, 0x8e, 0xc0, 0x81, 0x0b, 0x88, 0xdf, 0xc2, 0x89, 0x9f, 0xc0, 0x09, 0x71, 0xe5, 0x47, 0x70, + 0x44, 0x33, 0x3b, 0xbb, 0x1e, 0xaf, 0x97, 0xd8, 0x52, 0xb9, 0xed, 0x7c, 0xf3, 0xe6, 0xcd, 0xf7, + 0x7d, 0x6f, 0xde, 0xec, 0xc0, 0xee, 0x98, 0xf3, 0xf1, 0x05, 0xf5, 0xc7, 0x34, 0xe5, 0x13, 0x16, + 0x0b, 0xff, 0xea, 0xc0, 0xcf, 0xe8, 0x19, 0xcd, 0x68, 0x1a, 0x53, 0x31, 0x9a, 0x66, 0x5c, 0x72, + 0xc4, 0x3c, 0x68, 0x54, 0x04, 0x8d, 0xae, 0x0e, 0xfa, 0x6f, 0x9b, 0x85, 0xd1, 0x94, 0xf9, 0x51, + 0x9a, 0x72, 0x19, 0x49, 0xc6, 0x53, 0xb3, 0xc2, 0xfb, 0x93, 0x40, 0x3b, 0x28, 0xd2, 0xe0, 0x26, + 0x34, 0x58, 0xe2, 0x92, 0x01, 0x19, 0xb6, 0x83, 0x06, 0x4b, 0x70, 0x1b, 0x5a, 0x17, 0x34, 0x1d, + 0xcb, 0x73, 0xb7, 0x31, 0x20, 0x43, 0x27, 0x30, 0x23, 0x1c, 0x40, 0x67, 0x92, 0x7c, 0x10, 0x9f, + 0xd3, 0xf8, 0xb9, 0xb8, 0x9c, 0xb8, 0x8e, 0x5e, 0x60, 0x43, 0x88, 0xb0, 0x96, 0x46, 0x13, 0xea, + 0xae, 0xe9, 0x29, 0xfd, 0x8d, 0x3b, 0x00, 0x82, 0x5f, 0x66, 0x31, 0x0d, 0x2f, 0x33, 0xe6, 0x36, + 0xf5, 0x4c, 0x3b, 0x47, 0x3e, 0xcb, 0x18, 0xee, 0xc3, 0x6d, 0x33, 0x1d, 0xc5, 0x31, 0x15, 0x42, + 0xb1, 0x74, 0x5b, 0x03, 0x67, 0xd8, 0x0e, 0x7a, 0xf9, 0xc4, 0x27, 0x25, 0x8e, 0x1e, 0x6c, 0xa4, + 0xf1, 0x29, 0x0b, 0x65, 0xf4, 0x82, 0xa7, 0x21, 0x4b, 0xdc, 0x5b, 0x03, 0x32, 0x6c, 0x06, 0x1d, + 0x05, 0x3e, 0x53, 0xd8, 0x51, 0xe2, 0xfd, 0xdc, 0x80, 0x6e, 0xa9, 0xed, 0x84, 0xca, 0x05, 0x79, + 0xbb, 0xb0, 0x51, 0x5a, 0x18, 0xb2, 0x44, 0xb8, 0x0d, 0xbd, 0x5b, 0xb7, 0x04, 0x8f, 0x12, 0xb1, + 0x82, 0xd6, 0x05, 0x2e, 0x6b, 0x0b, 0x5c, 0x54, 0x96, 0x84, 0x8a, 0x38, 0x63, 0x53, 0xe5, 0xbe, + 0x11, 0x6f, 0x43, 0x78, 0x0f, 0x3a, 0x91, 0x10, 0x74, 0x72, 0x7a, 0xf1, 0xb5, 0xca, 0xd1, 0xd2, + 0x11, 0x50, 0x40, 0x47, 0x49, 0xc5, 0xbe, 0x5b, 0x2b, 0xd9, 0xb7, 0x5e, 0x6f, 0x9f, 0xf7, 0x1b, + 0x81, 0xfe, 0x09, 0x8d, 0xb2, 0xf8, 0xdc, 0x36, 0x48, 0x04, 0xf4, 0xab, 0x4b, 0x2a, 0x24, 0x7a, + 0xd0, 0xb5, 0x04, 0x0a, 0x97, 0xe4, 0xbe, 0xd8, 0x18, 0xbe, 0x03, 0x60, 0x6d, 0x94, 0x3b, 0x67, + 0x21, 0x55, 0x3d, 0x4e, 0x9d, 0x9e, 0x69, 0x34, 0xa6, 0xa1, 0xe4, 0xcf, 0x69, 0x6a, 0x0e, 0x4a, + 0x5b, 0x21, 0xcf, 0x14, 0x80, 0x77, 0x41, 0x0f, 0x42, 0xc1, 0x5e, 0x52, 0xed, 0x57, 0x33, 0x58, + 0x57, 0xc0, 0x09, 0x7b, 0x49, 0xbd, 0x1f, 0x08, 0xdc, 0xad, 0xe5, 0x2f, 0xa6, 0x3c, 0x15, 0x14, + 0x9f, 0xc2, 0xe6, 0xac, 0xb2, 0x82, 0xca, 0x5c, 0x42, 0xe7, 0xf1, 0x60, 0xb4, 0xd8, 0x21, 0x23, + 0x3b, 0x45, 0x30, 0x3b, 0x11, 0x2a, 0x21, 0x3e, 0x80, 0xad, 0x94, 0xbe, 0x90, 0xa1, 0xc5, 0xb4, + 0xa1, 0x99, 0x6e, 0x28, 0xf8, 0xb8, 0x60, 0xeb, 0x1d, 0xc2, 0xf6, 0x53, 0x2a, 0xe7, 0x32, 0x19, + 0x2f, 0x87, 0xd0, 0x9b, 0xa3, 0x12, 0x96, 0x47, 0x70, 0xd3, 0xde, 0xea, 0x28, 0xf1, 0x7e, 0x27, + 0xf0, 0x56, 0x45, 0xd4, 0xff, 0x5a, 0x91, 0x3a, 0x26, 0x4e, 0x1d, 0x93, 0xd7, 0x2a, 0xcd, 0x37, + 0x04, 0xdc, 0x45, 0x15, 0xa6, 0x2e, 0x1f, 0x03, 0xcc, 0x2e, 0x2d, 0x53, 0x93, 0x9d, 0x1b, 0x6b, + 0x12, 0x58, 0x0b, 0x56, 0xae, 0xc6, 0x87, 0x70, 0xc7, 0xae, 0x46, 0x61, 0xe2, 0xbb, 0xd0, 0xb5, + 0xfb, 0xdd, 0x94, 0xa1, 0x63, 0xb5, 0xbb, 0xf7, 0x0b, 0x81, 0xde, 0xa7, 0x4c, 0xc8, 0xc3, 0x48, + 0xcc, 0xcc, 0x5f, 0xbe, 0x0e, 0xdf, 0x80, 0xa6, 0x90, 0x51, 0x26, 0xcd, 0x45, 0x99, 0x0f, 0xb0, + 0x07, 0x0e, 0x4d, 0x73, 0x93, 0x9d, 0x40, 0x7d, 0xbe, 0x96, 0xb3, 0x1c, 0x6e, 0x5b, 0xd4, 0x8c, + 0xa3, 0xdb, 0xd0, 0xe2, 0x67, 0x67, 0x82, 0x4a, 0xcd, 0xca, 0x09, 0xcc, 0x08, 0xfb, 0xb0, 0x2e, + 0x14, 0xfd, 0x34, 0xa6, 0xc6, 0xa3, 0x72, 0x5c, 0x67, 0xa3, 0x53, 0x63, 0xe3, 0xe3, 0xbf, 0x9a, + 0x80, 0xd6, 0x91, 0xce, 0xae, 0x58, 0x4c, 0x3f, 0x3f, 0xc0, 0x5f, 0x09, 0xdc, 0xa9, 0x69, 0x3e, + 0x1c, 0xd5, 0x15, 0xf2, 0xbf, 0x6f, 0x99, 0xbe, 0xbf, 0x72, 0x7c, 0xae, 0xd5, 0xdb, 0xfd, 0xf6, + 0x8f, 0xbf, 0x7f, 0x6a, 0xec, 0x78, 0xee, 0xfc, 0xcf, 0x8f, 0x4a, 0xe1, 0x0b, 0xbd, 0xec, 0x09, + 0x79, 0x88, 0xdf, 0x13, 0xd8, 0xaa, 0xb4, 0x22, 0x3e, 0xac, 0xdb, 0xa9, 0xbe, 0x5f, 0xfb, 0x4b, + 0xaf, 0x08, 0xef, 0x91, 0xa6, 0xf1, 0x00, 0xef, 0x2f, 0xd2, 0x78, 0x55, 0x6d, 0xb0, 0x6b, 0xfc, + 0x91, 0x40, 0xaf, 0xda, 0x0f, 0xb8, 0xbf, 0x82, 0xf4, 0xd2, 0xa7, 0x47, 0xab, 0x05, 0x1b, 0x93, + 0x06, 0x9a, 0x5d, 0xdf, 0x7b, 0x73, 0x9e, 0x9d, 0xe5, 0xd0, 0x35, 0x74, 0x6d, 0xed, 0xf8, 0xde, + 0x32, 0x77, 0x0a, 0x22, 0x37, 0x77, 0xaa, 0xb7, 0xa7, 0x77, 0xbe, 0x87, 0x3b, 0x95, 0x9d, 0x5f, + 0xd9, 0xcd, 0x73, 0x8d, 0xdf, 0x11, 0x68, 0x97, 0xe7, 0x18, 0xef, 0xd7, 0xe5, 0xac, 0x76, 0x60, + 0x7f, 0x6f, 0x49, 0x94, 0xd1, 0xbe, 0xaf, 0x19, 0xec, 0xe1, 0xee, 0x8d, 0x0c, 0xfc, 0x53, 0xb5, + 0xe8, 0xf0, 0x4b, 0xd8, 0x8e, 0xf9, 0xa4, 0x26, 0xf1, 0xe1, 0xd6, 0xcc, 0xd6, 0x63, 0xf5, 0x4a, + 0x3a, 0x26, 0x5f, 0x3c, 0x29, 0xc2, 0xf8, 0x45, 0x94, 0x8e, 0x47, 0x3c, 0x1b, 0xab, 0x97, 0x98, + 0x7e, 0x43, 0xf9, 0xf9, 0x54, 0x34, 0x65, 0xc2, 0x7e, 0x9d, 0x7d, 0x54, 0x7c, 0xff, 0x43, 0xc8, + 0x69, 0x4b, 0x47, 0xbe, 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x9f, 0xb6, 0x11, 0xc6, + 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/variants.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/variants.pb.go new file mode 100644 index 0000000..f6c1850 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/variants.pb.go @@ -0,0 +1,2809 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1/variants.proto +// DO NOT EDIT! + +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf3 "github.com/golang/protobuf/ptypes/struct" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Operations to be performed during import on Variant info fields. +// These operations are set for each info field in the info_merge_config +// map of ImportVariantsRequest, which is plumbed down to the +// MergeVariantRequests generated by the import job. +type InfoMergeOperation int32 + +const ( + InfoMergeOperation_INFO_MERGE_OPERATION_UNSPECIFIED InfoMergeOperation = 0 + // By default, Variant info fields are persisted if the Variant doesn't + // already exist in the variantset. If the Variant is equivalent to a + // Variant already in the variantset, the incoming Variant's info field + // is ignored in favor of that of the already persisted Variant. + InfoMergeOperation_IGNORE_NEW InfoMergeOperation = 1 + // This operation removes an info field from the incoming Variant + // and persists this info field in each of the incoming Variant's Calls. + InfoMergeOperation_MOVE_TO_CALLS InfoMergeOperation = 2 +) + +var InfoMergeOperation_name = map[int32]string{ + 0: "INFO_MERGE_OPERATION_UNSPECIFIED", + 1: "IGNORE_NEW", + 2: "MOVE_TO_CALLS", +} +var InfoMergeOperation_value = map[string]int32{ + "INFO_MERGE_OPERATION_UNSPECIFIED": 0, + "IGNORE_NEW": 1, + "MOVE_TO_CALLS": 2, +} + +func (x InfoMergeOperation) String() string { + return proto.EnumName(InfoMergeOperation_name, int32(x)) +} +func (InfoMergeOperation) EnumDescriptor() ([]byte, []int) { return fileDescriptor11, []int{0} } + +type VariantSetMetadata_Type int32 + +const ( + VariantSetMetadata_TYPE_UNSPECIFIED VariantSetMetadata_Type = 0 + VariantSetMetadata_INTEGER VariantSetMetadata_Type = 1 + VariantSetMetadata_FLOAT VariantSetMetadata_Type = 2 + VariantSetMetadata_FLAG VariantSetMetadata_Type = 3 + VariantSetMetadata_CHARACTER VariantSetMetadata_Type = 4 + VariantSetMetadata_STRING VariantSetMetadata_Type = 5 +) + +var VariantSetMetadata_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "INTEGER", + 2: "FLOAT", + 3: "FLAG", + 4: "CHARACTER", + 5: "STRING", +} +var VariantSetMetadata_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "INTEGER": 1, + "FLOAT": 2, + "FLAG": 3, + "CHARACTER": 4, + "STRING": 5, +} + +func (x VariantSetMetadata_Type) String() string { + return proto.EnumName(VariantSetMetadata_Type_name, int32(x)) +} +func (VariantSetMetadata_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor11, []int{0, 0} } + +type ImportVariantsRequest_Format int32 + +const ( + ImportVariantsRequest_FORMAT_UNSPECIFIED ImportVariantsRequest_Format = 0 + // VCF (Variant Call Format). The VCF files may be gzip compressed. gVCF is + // also supported. + ImportVariantsRequest_FORMAT_VCF ImportVariantsRequest_Format = 1 + // Complete Genomics masterVarBeta format. The masterVarBeta files may + // be bzip2 compressed. + ImportVariantsRequest_FORMAT_COMPLETE_GENOMICS ImportVariantsRequest_Format = 2 +) + +var ImportVariantsRequest_Format_name = map[int32]string{ + 0: "FORMAT_UNSPECIFIED", + 1: "FORMAT_VCF", + 2: "FORMAT_COMPLETE_GENOMICS", +} +var ImportVariantsRequest_Format_value = map[string]int32{ + "FORMAT_UNSPECIFIED": 0, + "FORMAT_VCF": 1, + "FORMAT_COMPLETE_GENOMICS": 2, +} + +func (x ImportVariantsRequest_Format) String() string { + return proto.EnumName(ImportVariantsRequest_Format_name, int32(x)) +} +func (ImportVariantsRequest_Format) EnumDescriptor() ([]byte, []int) { + return fileDescriptor11, []int{6, 0} +} + +type ExportVariantSetRequest_Format int32 + +const ( + ExportVariantSetRequest_FORMAT_UNSPECIFIED ExportVariantSetRequest_Format = 0 + // Export the data to Google BigQuery. + ExportVariantSetRequest_FORMAT_BIGQUERY ExportVariantSetRequest_Format = 1 +) + +var ExportVariantSetRequest_Format_name = map[int32]string{ + 0: "FORMAT_UNSPECIFIED", + 1: "FORMAT_BIGQUERY", +} +var ExportVariantSetRequest_Format_value = map[string]int32{ + "FORMAT_UNSPECIFIED": 0, + "FORMAT_BIGQUERY": 1, +} + +func (x ExportVariantSetRequest_Format) String() string { + return proto.EnumName(ExportVariantSetRequest_Format_name, int32(x)) +} +func (ExportVariantSetRequest_Format) EnumDescriptor() ([]byte, []int) { + return fileDescriptor11, []int{9, 0} +} + +// Metadata describes a single piece of variant call metadata. +// These data include a top level key and either a single value string (value) +// or a list of key-value pairs (info.) +// Value and info are mutually exclusive. +type VariantSetMetadata struct { + // The top-level key. + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // The value field for simple metadata + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + // User-provided ID field, not enforced by this API. + // Two or more pieces of structured metadata with identical + // id and key fields are considered equivalent. + Id string `protobuf:"bytes,4,opt,name=id" json:"id,omitempty"` + // The type of data. Possible types include: Integer, Float, + // Flag, Character, and String. + Type VariantSetMetadata_Type `protobuf:"varint,5,opt,name=type,enum=google.genomics.v1.VariantSetMetadata_Type" json:"type,omitempty"` + // The number of values that can be included in a field described by this + // metadata. + Number string `protobuf:"bytes,8,opt,name=number" json:"number,omitempty"` + // A textual description of this metadata. + Description string `protobuf:"bytes,7,opt,name=description" json:"description,omitempty"` + // Remaining structured metadata key-value pairs. This must be of the form + // map<string, string[]> (string key mapping to a list of string values). + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,3,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *VariantSetMetadata) Reset() { *m = VariantSetMetadata{} } +func (m *VariantSetMetadata) String() string { return proto.CompactTextString(m) } +func (*VariantSetMetadata) ProtoMessage() {} +func (*VariantSetMetadata) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{0} } + +func (m *VariantSetMetadata) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *VariantSetMetadata) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *VariantSetMetadata) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *VariantSetMetadata) GetType() VariantSetMetadata_Type { + if m != nil { + return m.Type + } + return VariantSetMetadata_TYPE_UNSPECIFIED +} + +func (m *VariantSetMetadata) GetNumber() string { + if m != nil { + return m.Number + } + return "" +} + +func (m *VariantSetMetadata) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *VariantSetMetadata) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +// A variant set is a collection of call sets and variants. It contains summary +// statistics of those contents. A variant set belongs to a dataset. +// +// For more genomics resource definitions, see [Fundamentals of Google +// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) +type VariantSet struct { + // The dataset to which this variant set belongs. + DatasetId string `protobuf:"bytes,1,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // The server-generated variant set ID, unique across all variant sets. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // The reference set to which the variant set is mapped. The reference set + // describes the alignment provenance of the variant set, while the + // `referenceBounds` describe the shape of the actual variant data. The + // reference set's reference names are a superset of those found in the + // `referenceBounds`. + // + // For example, given a variant set that is mapped to the GRCh38 reference set + // and contains a single variant on reference 'X', `referenceBounds` would + // contain only an entry for 'X', while the associated reference set + // enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc. + ReferenceSetId string `protobuf:"bytes,6,opt,name=reference_set_id,json=referenceSetId" json:"reference_set_id,omitempty"` + // A list of all references used by the variants in a variant set + // with associated coordinate upper bounds for each one. + ReferenceBounds []*ReferenceBound `protobuf:"bytes,5,rep,name=reference_bounds,json=referenceBounds" json:"reference_bounds,omitempty"` + // The metadata associated with this variant set. + Metadata []*VariantSetMetadata `protobuf:"bytes,4,rep,name=metadata" json:"metadata,omitempty"` + // User-specified, mutable name. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` + // A textual description of this variant set. + Description string `protobuf:"bytes,8,opt,name=description" json:"description,omitempty"` +} + +func (m *VariantSet) Reset() { *m = VariantSet{} } +func (m *VariantSet) String() string { return proto.CompactTextString(m) } +func (*VariantSet) ProtoMessage() {} +func (*VariantSet) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{1} } + +func (m *VariantSet) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *VariantSet) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *VariantSet) GetReferenceSetId() string { + if m != nil { + return m.ReferenceSetId + } + return "" +} + +func (m *VariantSet) GetReferenceBounds() []*ReferenceBound { + if m != nil { + return m.ReferenceBounds + } + return nil +} + +func (m *VariantSet) GetMetadata() []*VariantSetMetadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *VariantSet) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *VariantSet) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// A variant represents a change in DNA sequence relative to a reference +// sequence. For example, a variant could represent a SNP or an insertion. +// Variants belong to a variant set. +// +// For more genomics resource definitions, see [Fundamentals of Google +// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) +// +// Each of the calls on a variant represent a determination of genotype with +// respect to that variant. For example, a call might assign probability of 0.32 +// to the occurrence of a SNP named rs1234 in a sample named NA12345. A call +// belongs to a call set, which contains related calls typically from one +// sample. +type Variant struct { + // The ID of the variant set this variant belongs to. + VariantSetId string `protobuf:"bytes,15,opt,name=variant_set_id,json=variantSetId" json:"variant_set_id,omitempty"` + // The server-generated variant ID, unique across all variants. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // Names for the variant, for example a RefSNP ID. + Names []string `protobuf:"bytes,3,rep,name=names" json:"names,omitempty"` + // The date this variant was created, in milliseconds from the epoch. + Created int64 `protobuf:"varint,12,opt,name=created" json:"created,omitempty"` + // The reference on which this variant occurs. + // (such as `chr20` or `X`) + ReferenceName string `protobuf:"bytes,14,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The position at which this variant occurs (0-based). + // This corresponds to the first base of the string of reference bases. + Start int64 `protobuf:"varint,16,opt,name=start" json:"start,omitempty"` + // The end position (0-based) of this variant. This corresponds to the first + // base after the last base in the reference allele. So, the length of + // the reference allele is (end - start). This is useful for variants + // that don't explicitly give alternate bases, for example large deletions. + End int64 `protobuf:"varint,13,opt,name=end" json:"end,omitempty"` + // The reference bases for this variant. They start at the given + // position. + ReferenceBases string `protobuf:"bytes,6,opt,name=reference_bases,json=referenceBases" json:"reference_bases,omitempty"` + // The bases that appear instead of the reference bases. + AlternateBases []string `protobuf:"bytes,7,rep,name=alternate_bases,json=alternateBases" json:"alternate_bases,omitempty"` + // A measure of how likely this variant is to be real. + // A higher value is better. + Quality float64 `protobuf:"fixed64,8,opt,name=quality" json:"quality,omitempty"` + // A list of filters (normally quality filters) this variant has failed. + // `PASS` indicates this variant has passed all filters. + Filter []string `protobuf:"bytes,9,rep,name=filter" json:"filter,omitempty"` + // A map of additional variant information. This must be of the form + // map<string, string[]> (string key mapping to a list of string values). + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,10,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The variant calls for this particular variant. Each one represents the + // determination of genotype with respect to this variant. + Calls []*VariantCall `protobuf:"bytes,11,rep,name=calls" json:"calls,omitempty"` +} + +func (m *Variant) Reset() { *m = Variant{} } +func (m *Variant) String() string { return proto.CompactTextString(m) } +func (*Variant) ProtoMessage() {} +func (*Variant) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{2} } + +func (m *Variant) GetVariantSetId() string { + if m != nil { + return m.VariantSetId + } + return "" +} + +func (m *Variant) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Variant) GetNames() []string { + if m != nil { + return m.Names + } + return nil +} + +func (m *Variant) GetCreated() int64 { + if m != nil { + return m.Created + } + return 0 +} + +func (m *Variant) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *Variant) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Variant) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *Variant) GetReferenceBases() string { + if m != nil { + return m.ReferenceBases + } + return "" +} + +func (m *Variant) GetAlternateBases() []string { + if m != nil { + return m.AlternateBases + } + return nil +} + +func (m *Variant) GetQuality() float64 { + if m != nil { + return m.Quality + } + return 0 +} + +func (m *Variant) GetFilter() []string { + if m != nil { + return m.Filter + } + return nil +} + +func (m *Variant) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +func (m *Variant) GetCalls() []*VariantCall { + if m != nil { + return m.Calls + } + return nil +} + +// A call represents the determination of genotype with respect to a particular +// variant. It may include associated information such as quality and phasing. +// For example, a call might assign a probability of 0.32 to the occurrence of +// a SNP named rs1234 in a call set with the name NA12345. +type VariantCall struct { + // The ID of the call set this variant call belongs to. + CallSetId string `protobuf:"bytes,8,opt,name=call_set_id,json=callSetId" json:"call_set_id,omitempty"` + // The name of the call set this variant call belongs to. + CallSetName string `protobuf:"bytes,9,opt,name=call_set_name,json=callSetName" json:"call_set_name,omitempty"` + // The genotype of this variant call. Each value represents either the value + // of the `referenceBases` field or a 1-based index into + // `alternateBases`. If a variant had a `referenceBases` + // value of `T` and an `alternateBases` + // value of `["A", "C"]`, and the `genotype` was + // `[2, 1]`, that would mean the call + // represented the heterozygous value `CA` for this variant. + // If the `genotype` was instead `[0, 1]`, the + // represented value would be `TA`. Ordering of the + // genotype values is important if the `phaseset` is present. + // If a genotype is not called (that is, a `.` is present in the + // GT string) -1 is returned. + Genotype []int32 `protobuf:"varint,7,rep,packed,name=genotype" json:"genotype,omitempty"` + // If this field is present, this variant call's genotype ordering implies + // the phase of the bases and is consistent with any other variant calls in + // the same reference sequence which have the same phaseset value. + // When importing data from VCF, if the genotype data was phased but no + // phase set was specified this field will be set to `*`. + Phaseset string `protobuf:"bytes,5,opt,name=phaseset" json:"phaseset,omitempty"` + // The genotype likelihoods for this variant call. Each array entry + // represents how likely a specific genotype is for this call. The value + // ordering is defined by the GL tag in the VCF spec. + // If Phred-scaled genotype likelihood scores (PL) are available and + // log10(P) genotype likelihood scores (GL) are not, PL scores are converted + // to GL scores. If both are available, PL scores are stored in `info`. + GenotypeLikelihood []float64 `protobuf:"fixed64,6,rep,packed,name=genotype_likelihood,json=genotypeLikelihood" json:"genotype_likelihood,omitempty"` + // A map of additional variant call information. This must be of the form + // map<string, string[]> (string key mapping to a list of string values). + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,2,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *VariantCall) Reset() { *m = VariantCall{} } +func (m *VariantCall) String() string { return proto.CompactTextString(m) } +func (*VariantCall) ProtoMessage() {} +func (*VariantCall) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{3} } + +func (m *VariantCall) GetCallSetId() string { + if m != nil { + return m.CallSetId + } + return "" +} + +func (m *VariantCall) GetCallSetName() string { + if m != nil { + return m.CallSetName + } + return "" +} + +func (m *VariantCall) GetGenotype() []int32 { + if m != nil { + return m.Genotype + } + return nil +} + +func (m *VariantCall) GetPhaseset() string { + if m != nil { + return m.Phaseset + } + return "" +} + +func (m *VariantCall) GetGenotypeLikelihood() []float64 { + if m != nil { + return m.GenotypeLikelihood + } + return nil +} + +func (m *VariantCall) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +// A call set is a collection of variant calls, typically for one sample. It +// belongs to a variant set. +// +// For more genomics resource definitions, see [Fundamentals of Google +// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) +type CallSet struct { + // The server-generated call set ID, unique across all call sets. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The call set name. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // The sample ID this call set corresponds to. + SampleId string `protobuf:"bytes,7,opt,name=sample_id,json=sampleId" json:"sample_id,omitempty"` + // The IDs of the variant sets this call set belongs to. This field must + // have exactly length one, as a call set belongs to a single variant set. + // This field is repeated for compatibility with the + // [GA4GH 0.5.1 + // API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76). + VariantSetIds []string `protobuf:"bytes,6,rep,name=variant_set_ids,json=variantSetIds" json:"variant_set_ids,omitempty"` + // The date this call set was created in milliseconds from the epoch. + Created int64 `protobuf:"varint,5,opt,name=created" json:"created,omitempty"` + // A map of additional call set information. This must be of the form + // map<string, string[]> (string key mapping to a list of string values). + Info map[string]*google_protobuf3.ListValue `protobuf:"bytes,4,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *CallSet) Reset() { *m = CallSet{} } +func (m *CallSet) String() string { return proto.CompactTextString(m) } +func (*CallSet) ProtoMessage() {} +func (*CallSet) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{4} } + +func (m *CallSet) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *CallSet) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CallSet) GetSampleId() string { + if m != nil { + return m.SampleId + } + return "" +} + +func (m *CallSet) GetVariantSetIds() []string { + if m != nil { + return m.VariantSetIds + } + return nil +} + +func (m *CallSet) GetCreated() int64 { + if m != nil { + return m.Created + } + return 0 +} + +func (m *CallSet) GetInfo() map[string]*google_protobuf3.ListValue { + if m != nil { + return m.Info + } + return nil +} + +// ReferenceBound records an upper bound for the starting coordinate of +// variants in a particular reference. +type ReferenceBound struct { + // The name of the reference associated with this reference bound. + ReferenceName string `protobuf:"bytes,1,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // An upper bound (inclusive) on the starting coordinate of any + // variant in the reference sequence. + UpperBound int64 `protobuf:"varint,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"` +} + +func (m *ReferenceBound) Reset() { *m = ReferenceBound{} } +func (m *ReferenceBound) String() string { return proto.CompactTextString(m) } +func (*ReferenceBound) ProtoMessage() {} +func (*ReferenceBound) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{5} } + +func (m *ReferenceBound) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *ReferenceBound) GetUpperBound() int64 { + if m != nil { + return m.UpperBound + } + return 0 +} + +// The variant data import request. +type ImportVariantsRequest struct { + // Required. The variant set to which variant data should be imported. + VariantSetId string `protobuf:"bytes,1,opt,name=variant_set_id,json=variantSetId" json:"variant_set_id,omitempty"` + // A list of URIs referencing variant files in Google Cloud Storage. URIs can + // include wildcards [as described + // here](https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames). + // Note that recursive wildcards ('**') are not supported. + SourceUris []string `protobuf:"bytes,2,rep,name=source_uris,json=sourceUris" json:"source_uris,omitempty"` + // The format of the variant data being imported. If unspecified, defaults to + // to `VCF`. + Format ImportVariantsRequest_Format `protobuf:"varint,3,opt,name=format,enum=google.genomics.v1.ImportVariantsRequest_Format" json:"format,omitempty"` + // Convert reference names to the canonical representation. + // hg19 haploytypes (those reference names containing "_hap") + // are not modified in any way. + // All other reference names are modified according to the following rules: + // The reference name is capitalized. + // The "chr" prefix is dropped for all autosomes and sex chromsomes. + // For example "chr17" becomes "17" and "chrX" becomes "X". + // All mitochondrial chromosomes ("chrM", "chrMT", etc) become "MT". + NormalizeReferenceNames bool `protobuf:"varint,5,opt,name=normalize_reference_names,json=normalizeReferenceNames" json:"normalize_reference_names,omitempty"` + // A mapping between info field keys and the InfoMergeOperations to + // be performed on them. This is plumbed down to the MergeVariantRequests + // generated by the resulting import job. + InfoMergeConfig map[string]InfoMergeOperation `protobuf:"bytes,6,rep,name=info_merge_config,json=infoMergeConfig" json:"info_merge_config,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.genomics.v1.InfoMergeOperation"` +} + +func (m *ImportVariantsRequest) Reset() { *m = ImportVariantsRequest{} } +func (m *ImportVariantsRequest) String() string { return proto.CompactTextString(m) } +func (*ImportVariantsRequest) ProtoMessage() {} +func (*ImportVariantsRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{6} } + +func (m *ImportVariantsRequest) GetVariantSetId() string { + if m != nil { + return m.VariantSetId + } + return "" +} + +func (m *ImportVariantsRequest) GetSourceUris() []string { + if m != nil { + return m.SourceUris + } + return nil +} + +func (m *ImportVariantsRequest) GetFormat() ImportVariantsRequest_Format { + if m != nil { + return m.Format + } + return ImportVariantsRequest_FORMAT_UNSPECIFIED +} + +func (m *ImportVariantsRequest) GetNormalizeReferenceNames() bool { + if m != nil { + return m.NormalizeReferenceNames + } + return false +} + +func (m *ImportVariantsRequest) GetInfoMergeConfig() map[string]InfoMergeOperation { + if m != nil { + return m.InfoMergeConfig + } + return nil +} + +// The variant data import response. +type ImportVariantsResponse struct { + // IDs of the call sets created during the import. + CallSetIds []string `protobuf:"bytes,1,rep,name=call_set_ids,json=callSetIds" json:"call_set_ids,omitempty"` +} + +func (m *ImportVariantsResponse) Reset() { *m = ImportVariantsResponse{} } +func (m *ImportVariantsResponse) String() string { return proto.CompactTextString(m) } +func (*ImportVariantsResponse) ProtoMessage() {} +func (*ImportVariantsResponse) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{7} } + +func (m *ImportVariantsResponse) GetCallSetIds() []string { + if m != nil { + return m.CallSetIds + } + return nil +} + +// The CreateVariantSet request +type CreateVariantSetRequest struct { + // Required. The variant set to be created. Must have a valid `datasetId`. + VariantSet *VariantSet `protobuf:"bytes,1,opt,name=variant_set,json=variantSet" json:"variant_set,omitempty"` +} + +func (m *CreateVariantSetRequest) Reset() { *m = CreateVariantSetRequest{} } +func (m *CreateVariantSetRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVariantSetRequest) ProtoMessage() {} +func (*CreateVariantSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{8} } + +func (m *CreateVariantSetRequest) GetVariantSet() *VariantSet { + if m != nil { + return m.VariantSet + } + return nil +} + +// The variant data export request. +type ExportVariantSetRequest struct { + // Required. The ID of the variant set that contains variant data which + // should be exported. The caller must have READ access to this variant set. + VariantSetId string `protobuf:"bytes,1,opt,name=variant_set_id,json=variantSetId" json:"variant_set_id,omitempty"` + // If provided, only variant call information from the specified call sets + // will be exported. By default all variant calls are exported. + CallSetIds []string `protobuf:"bytes,2,rep,name=call_set_ids,json=callSetIds" json:"call_set_ids,omitempty"` + // Required. The Google Cloud project ID that owns the destination + // BigQuery dataset. The caller must have WRITE access to this project. This + // project will also own the resulting export job. + ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The format for the exported data. + Format ExportVariantSetRequest_Format `protobuf:"varint,4,opt,name=format,enum=google.genomics.v1.ExportVariantSetRequest_Format" json:"format,omitempty"` + // Required. The BigQuery dataset to export data to. This dataset must already + // exist. Note that this is distinct from the Genomics concept of "dataset". + BigqueryDataset string `protobuf:"bytes,5,opt,name=bigquery_dataset,json=bigqueryDataset" json:"bigquery_dataset,omitempty"` + // Required. The BigQuery table to export data to. + // If the table doesn't exist, it will be created. If it already exists, it + // will be overwritten. + BigqueryTable string `protobuf:"bytes,6,opt,name=bigquery_table,json=bigqueryTable" json:"bigquery_table,omitempty"` +} + +func (m *ExportVariantSetRequest) Reset() { *m = ExportVariantSetRequest{} } +func (m *ExportVariantSetRequest) String() string { return proto.CompactTextString(m) } +func (*ExportVariantSetRequest) ProtoMessage() {} +func (*ExportVariantSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{9} } + +func (m *ExportVariantSetRequest) GetVariantSetId() string { + if m != nil { + return m.VariantSetId + } + return "" +} + +func (m *ExportVariantSetRequest) GetCallSetIds() []string { + if m != nil { + return m.CallSetIds + } + return nil +} + +func (m *ExportVariantSetRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ExportVariantSetRequest) GetFormat() ExportVariantSetRequest_Format { + if m != nil { + return m.Format + } + return ExportVariantSetRequest_FORMAT_UNSPECIFIED +} + +func (m *ExportVariantSetRequest) GetBigqueryDataset() string { + if m != nil { + return m.BigqueryDataset + } + return "" +} + +func (m *ExportVariantSetRequest) GetBigqueryTable() string { + if m != nil { + return m.BigqueryTable + } + return "" +} + +// The variant set request. +type GetVariantSetRequest struct { + // Required. The ID of the variant set. + VariantSetId string `protobuf:"bytes,1,opt,name=variant_set_id,json=variantSetId" json:"variant_set_id,omitempty"` +} + +func (m *GetVariantSetRequest) Reset() { *m = GetVariantSetRequest{} } +func (m *GetVariantSetRequest) String() string { return proto.CompactTextString(m) } +func (*GetVariantSetRequest) ProtoMessage() {} +func (*GetVariantSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{10} } + +func (m *GetVariantSetRequest) GetVariantSetId() string { + if m != nil { + return m.VariantSetId + } + return "" +} + +// The search variant sets request. +type SearchVariantSetsRequest struct { + // Exactly one dataset ID must be provided here. Only variant sets which + // belong to this dataset will be returned. + DatasetIds []string `protobuf:"bytes,1,rep,name=dataset_ids,json=datasetIds" json:"dataset_ids,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 1024. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *SearchVariantSetsRequest) Reset() { *m = SearchVariantSetsRequest{} } +func (m *SearchVariantSetsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchVariantSetsRequest) ProtoMessage() {} +func (*SearchVariantSetsRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{11} } + +func (m *SearchVariantSetsRequest) GetDatasetIds() []string { + if m != nil { + return m.DatasetIds + } + return nil +} + +func (m *SearchVariantSetsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchVariantSetsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// The search variant sets response. +type SearchVariantSetsResponse struct { + // The variant sets belonging to the requested dataset. + VariantSets []*VariantSet `protobuf:"bytes,1,rep,name=variant_sets,json=variantSets" json:"variant_sets,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchVariantSetsResponse) Reset() { *m = SearchVariantSetsResponse{} } +func (m *SearchVariantSetsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchVariantSetsResponse) ProtoMessage() {} +func (*SearchVariantSetsResponse) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{12} } + +func (m *SearchVariantSetsResponse) GetVariantSets() []*VariantSet { + if m != nil { + return m.VariantSets + } + return nil +} + +func (m *SearchVariantSetsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The delete variant set request. +type DeleteVariantSetRequest struct { + // The ID of the variant set to be deleted. + VariantSetId string `protobuf:"bytes,1,opt,name=variant_set_id,json=variantSetId" json:"variant_set_id,omitempty"` +} + +func (m *DeleteVariantSetRequest) Reset() { *m = DeleteVariantSetRequest{} } +func (m *DeleteVariantSetRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVariantSetRequest) ProtoMessage() {} +func (*DeleteVariantSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{13} } + +func (m *DeleteVariantSetRequest) GetVariantSetId() string { + if m != nil { + return m.VariantSetId + } + return "" +} + +type UpdateVariantSetRequest struct { + // The ID of the variant to be updated (must already exist). + VariantSetId string `protobuf:"bytes,1,opt,name=variant_set_id,json=variantSetId" json:"variant_set_id,omitempty"` + // The new variant data. Only the variant_set.metadata will be considered + // for update. + VariantSet *VariantSet `protobuf:"bytes,2,opt,name=variant_set,json=variantSet" json:"variant_set,omitempty"` + // An optional mask specifying which fields to update. Supported fields: + // + // * [metadata][google.genomics.v1.VariantSet.metadata]. + // * [name][google.genomics.v1.VariantSet.name]. + // * [description][google.genomics.v1.VariantSet.description]. + // + // Leaving `updateMask` unset is equivalent to specifying all mutable + // fields. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,5,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateVariantSetRequest) Reset() { *m = UpdateVariantSetRequest{} } +func (m *UpdateVariantSetRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateVariantSetRequest) ProtoMessage() {} +func (*UpdateVariantSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{14} } + +func (m *UpdateVariantSetRequest) GetVariantSetId() string { + if m != nil { + return m.VariantSetId + } + return "" +} + +func (m *UpdateVariantSetRequest) GetVariantSet() *VariantSet { + if m != nil { + return m.VariantSet + } + return nil +} + +func (m *UpdateVariantSetRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// The variant search request. +type SearchVariantsRequest struct { + // At most one variant set ID must be provided. Only variants from this + // variant set will be returned. If omitted, a call set id must be included in + // the request. + VariantSetIds []string `protobuf:"bytes,1,rep,name=variant_set_ids,json=variantSetIds" json:"variant_set_ids,omitempty"` + // Only return variants which have exactly this name. + VariantName string `protobuf:"bytes,2,opt,name=variant_name,json=variantName" json:"variant_name,omitempty"` + // Only return variant calls which belong to call sets with these ids. + // Leaving this blank returns all variant calls. If a variant has no + // calls belonging to any of these call sets, it won't be returned at all. + CallSetIds []string `protobuf:"bytes,3,rep,name=call_set_ids,json=callSetIds" json:"call_set_ids,omitempty"` + // Required. Only return variants in this reference sequence. + ReferenceName string `protobuf:"bytes,4,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The beginning of the window (0-based, inclusive) for which + // overlapping variants should be returned. If unspecified, defaults to 0. + Start int64 `protobuf:"varint,5,opt,name=start" json:"start,omitempty"` + // The end of the window, 0-based exclusive. If unspecified or 0, defaults to + // the length of the reference. + End int64 `protobuf:"varint,6,opt,name=end" json:"end,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,7,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of variants to return in a single page. If unspecified, + // defaults to 5000. The maximum value is 10000. + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The maximum number of calls to return in a single page. Note that this + // limit may be exceeded in the event that a matching variant contains more + // calls than the requested maximum. If unspecified, defaults to 5000. The + // maximum value is 10000. + MaxCalls int32 `protobuf:"varint,9,opt,name=max_calls,json=maxCalls" json:"max_calls,omitempty"` +} + +func (m *SearchVariantsRequest) Reset() { *m = SearchVariantsRequest{} } +func (m *SearchVariantsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchVariantsRequest) ProtoMessage() {} +func (*SearchVariantsRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{15} } + +func (m *SearchVariantsRequest) GetVariantSetIds() []string { + if m != nil { + return m.VariantSetIds + } + return nil +} + +func (m *SearchVariantsRequest) GetVariantName() string { + if m != nil { + return m.VariantName + } + return "" +} + +func (m *SearchVariantsRequest) GetCallSetIds() []string { + if m != nil { + return m.CallSetIds + } + return nil +} + +func (m *SearchVariantsRequest) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *SearchVariantsRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *SearchVariantsRequest) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +func (m *SearchVariantsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchVariantsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *SearchVariantsRequest) GetMaxCalls() int32 { + if m != nil { + return m.MaxCalls + } + return 0 +} + +// The variant search response. +type SearchVariantsResponse struct { + // The list of matching Variants. + Variants []*Variant `protobuf:"bytes,1,rep,name=variants" json:"variants,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchVariantsResponse) Reset() { *m = SearchVariantsResponse{} } +func (m *SearchVariantsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchVariantsResponse) ProtoMessage() {} +func (*SearchVariantsResponse) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{16} } + +func (m *SearchVariantsResponse) GetVariants() []*Variant { + if m != nil { + return m.Variants + } + return nil +} + +func (m *SearchVariantsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +type CreateVariantRequest struct { + // The variant to be created. + Variant *Variant `protobuf:"bytes,1,opt,name=variant" json:"variant,omitempty"` +} + +func (m *CreateVariantRequest) Reset() { *m = CreateVariantRequest{} } +func (m *CreateVariantRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVariantRequest) ProtoMessage() {} +func (*CreateVariantRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{17} } + +func (m *CreateVariantRequest) GetVariant() *Variant { + if m != nil { + return m.Variant + } + return nil +} + +type UpdateVariantRequest struct { + // The ID of the variant to be updated. + VariantId string `protobuf:"bytes,1,opt,name=variant_id,json=variantId" json:"variant_id,omitempty"` + // The new variant data. + Variant *Variant `protobuf:"bytes,2,opt,name=variant" json:"variant,omitempty"` + // An optional mask specifying which fields to update. At this time, mutable + // fields are [names][google.genomics.v1.Variant.names] and + // [info][google.genomics.v1.Variant.info]. Acceptable values are "names" and + // "info". If unspecified, all mutable fields will be updated. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateVariantRequest) Reset() { *m = UpdateVariantRequest{} } +func (m *UpdateVariantRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateVariantRequest) ProtoMessage() {} +func (*UpdateVariantRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{18} } + +func (m *UpdateVariantRequest) GetVariantId() string { + if m != nil { + return m.VariantId + } + return "" +} + +func (m *UpdateVariantRequest) GetVariant() *Variant { + if m != nil { + return m.Variant + } + return nil +} + +func (m *UpdateVariantRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +type DeleteVariantRequest struct { + // The ID of the variant to be deleted. + VariantId string `protobuf:"bytes,1,opt,name=variant_id,json=variantId" json:"variant_id,omitempty"` +} + +func (m *DeleteVariantRequest) Reset() { *m = DeleteVariantRequest{} } +func (m *DeleteVariantRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVariantRequest) ProtoMessage() {} +func (*DeleteVariantRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{19} } + +func (m *DeleteVariantRequest) GetVariantId() string { + if m != nil { + return m.VariantId + } + return "" +} + +type GetVariantRequest struct { + // The ID of the variant. + VariantId string `protobuf:"bytes,1,opt,name=variant_id,json=variantId" json:"variant_id,omitempty"` +} + +func (m *GetVariantRequest) Reset() { *m = GetVariantRequest{} } +func (m *GetVariantRequest) String() string { return proto.CompactTextString(m) } +func (*GetVariantRequest) ProtoMessage() {} +func (*GetVariantRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{20} } + +func (m *GetVariantRequest) GetVariantId() string { + if m != nil { + return m.VariantId + } + return "" +} + +type MergeVariantsRequest struct { + // The destination variant set. + VariantSetId string `protobuf:"bytes,1,opt,name=variant_set_id,json=variantSetId" json:"variant_set_id,omitempty"` + // The variants to be merged with existing variants. + Variants []*Variant `protobuf:"bytes,2,rep,name=variants" json:"variants,omitempty"` + // A mapping between info field keys and the InfoMergeOperations to + // be performed on them. + InfoMergeConfig map[string]InfoMergeOperation `protobuf:"bytes,3,rep,name=info_merge_config,json=infoMergeConfig" json:"info_merge_config,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.genomics.v1.InfoMergeOperation"` +} + +func (m *MergeVariantsRequest) Reset() { *m = MergeVariantsRequest{} } +func (m *MergeVariantsRequest) String() string { return proto.CompactTextString(m) } +func (*MergeVariantsRequest) ProtoMessage() {} +func (*MergeVariantsRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{21} } + +func (m *MergeVariantsRequest) GetVariantSetId() string { + if m != nil { + return m.VariantSetId + } + return "" +} + +func (m *MergeVariantsRequest) GetVariants() []*Variant { + if m != nil { + return m.Variants + } + return nil +} + +func (m *MergeVariantsRequest) GetInfoMergeConfig() map[string]InfoMergeOperation { + if m != nil { + return m.InfoMergeConfig + } + return nil +} + +// The call set search request. +type SearchCallSetsRequest struct { + // Restrict the query to call sets within the given variant sets. At least one + // ID must be provided. + VariantSetIds []string `protobuf:"bytes,1,rep,name=variant_set_ids,json=variantSetIds" json:"variant_set_ids,omitempty"` + // Only return call sets for which a substring of the name matches this + // string. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // The continuation token, which is used to page through large result sets. + // To get the next page of results, set this parameter to the value of + // `nextPageToken` from the previous response. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The maximum number of results to return in a single page. If unspecified, + // defaults to 1024. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *SearchCallSetsRequest) Reset() { *m = SearchCallSetsRequest{} } +func (m *SearchCallSetsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchCallSetsRequest) ProtoMessage() {} +func (*SearchCallSetsRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{22} } + +func (m *SearchCallSetsRequest) GetVariantSetIds() []string { + if m != nil { + return m.VariantSetIds + } + return nil +} + +func (m *SearchCallSetsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *SearchCallSetsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchCallSetsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// The call set search response. +type SearchCallSetsResponse struct { + // The list of matching call sets. + CallSets []*CallSet `protobuf:"bytes,1,rep,name=call_sets,json=callSets" json:"call_sets,omitempty"` + // The continuation token, which is used to page through large result sets. + // Provide this value in a subsequent request to return the next page of + // results. This field will be empty if there aren't any additional results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchCallSetsResponse) Reset() { *m = SearchCallSetsResponse{} } +func (m *SearchCallSetsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchCallSetsResponse) ProtoMessage() {} +func (*SearchCallSetsResponse) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{23} } + +func (m *SearchCallSetsResponse) GetCallSets() []*CallSet { + if m != nil { + return m.CallSets + } + return nil +} + +func (m *SearchCallSetsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +type CreateCallSetRequest struct { + // The call set to be created. + CallSet *CallSet `protobuf:"bytes,1,opt,name=call_set,json=callSet" json:"call_set,omitempty"` +} + +func (m *CreateCallSetRequest) Reset() { *m = CreateCallSetRequest{} } +func (m *CreateCallSetRequest) String() string { return proto.CompactTextString(m) } +func (*CreateCallSetRequest) ProtoMessage() {} +func (*CreateCallSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{24} } + +func (m *CreateCallSetRequest) GetCallSet() *CallSet { + if m != nil { + return m.CallSet + } + return nil +} + +type UpdateCallSetRequest struct { + // The ID of the call set to be updated. + CallSetId string `protobuf:"bytes,1,opt,name=call_set_id,json=callSetId" json:"call_set_id,omitempty"` + // The new call set data. + CallSet *CallSet `protobuf:"bytes,2,opt,name=call_set,json=callSet" json:"call_set,omitempty"` + // An optional mask specifying which fields to update. At this time, the only + // mutable field is [name][google.genomics.v1.CallSet.name]. The only + // acceptable value is "name". If unspecified, all mutable fields will be + // updated. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateCallSetRequest) Reset() { *m = UpdateCallSetRequest{} } +func (m *UpdateCallSetRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateCallSetRequest) ProtoMessage() {} +func (*UpdateCallSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{25} } + +func (m *UpdateCallSetRequest) GetCallSetId() string { + if m != nil { + return m.CallSetId + } + return "" +} + +func (m *UpdateCallSetRequest) GetCallSet() *CallSet { + if m != nil { + return m.CallSet + } + return nil +} + +func (m *UpdateCallSetRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +type DeleteCallSetRequest struct { + // The ID of the call set to be deleted. + CallSetId string `protobuf:"bytes,1,opt,name=call_set_id,json=callSetId" json:"call_set_id,omitempty"` +} + +func (m *DeleteCallSetRequest) Reset() { *m = DeleteCallSetRequest{} } +func (m *DeleteCallSetRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteCallSetRequest) ProtoMessage() {} +func (*DeleteCallSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{26} } + +func (m *DeleteCallSetRequest) GetCallSetId() string { + if m != nil { + return m.CallSetId + } + return "" +} + +type GetCallSetRequest struct { + // The ID of the call set. + CallSetId string `protobuf:"bytes,1,opt,name=call_set_id,json=callSetId" json:"call_set_id,omitempty"` +} + +func (m *GetCallSetRequest) Reset() { *m = GetCallSetRequest{} } +func (m *GetCallSetRequest) String() string { return proto.CompactTextString(m) } +func (*GetCallSetRequest) ProtoMessage() {} +func (*GetCallSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{27} } + +func (m *GetCallSetRequest) GetCallSetId() string { + if m != nil { + return m.CallSetId + } + return "" +} + +// The stream variants request. +type StreamVariantsRequest struct { + // The Google Cloud project ID which will be billed + // for this access. The caller must have WRITE access to this project. + // Required. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The variant set ID from which to stream variants. + VariantSetId string `protobuf:"bytes,2,opt,name=variant_set_id,json=variantSetId" json:"variant_set_id,omitempty"` + // Only return variant calls which belong to call sets with these IDs. + // Leaving this blank returns all variant calls. + CallSetIds []string `protobuf:"bytes,3,rep,name=call_set_ids,json=callSetIds" json:"call_set_ids,omitempty"` + // Required. Only return variants in this reference sequence. + ReferenceName string `protobuf:"bytes,4,opt,name=reference_name,json=referenceName" json:"reference_name,omitempty"` + // The beginning of the window (0-based, inclusive) for which + // overlapping variants should be returned. + Start int64 `protobuf:"varint,5,opt,name=start" json:"start,omitempty"` + // The end of the window (0-based, exclusive) for which overlapping + // variants should be returned. + End int64 `protobuf:"varint,6,opt,name=end" json:"end,omitempty"` +} + +func (m *StreamVariantsRequest) Reset() { *m = StreamVariantsRequest{} } +func (m *StreamVariantsRequest) String() string { return proto.CompactTextString(m) } +func (*StreamVariantsRequest) ProtoMessage() {} +func (*StreamVariantsRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{28} } + +func (m *StreamVariantsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *StreamVariantsRequest) GetVariantSetId() string { + if m != nil { + return m.VariantSetId + } + return "" +} + +func (m *StreamVariantsRequest) GetCallSetIds() []string { + if m != nil { + return m.CallSetIds + } + return nil +} + +func (m *StreamVariantsRequest) GetReferenceName() string { + if m != nil { + return m.ReferenceName + } + return "" +} + +func (m *StreamVariantsRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *StreamVariantsRequest) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +type StreamVariantsResponse struct { + Variants []*Variant `protobuf:"bytes,1,rep,name=variants" json:"variants,omitempty"` +} + +func (m *StreamVariantsResponse) Reset() { *m = StreamVariantsResponse{} } +func (m *StreamVariantsResponse) String() string { return proto.CompactTextString(m) } +func (*StreamVariantsResponse) ProtoMessage() {} +func (*StreamVariantsResponse) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{29} } + +func (m *StreamVariantsResponse) GetVariants() []*Variant { + if m != nil { + return m.Variants + } + return nil +} + +func init() { + proto.RegisterType((*VariantSetMetadata)(nil), "google.genomics.v1.VariantSetMetadata") + proto.RegisterType((*VariantSet)(nil), "google.genomics.v1.VariantSet") + proto.RegisterType((*Variant)(nil), "google.genomics.v1.Variant") + proto.RegisterType((*VariantCall)(nil), "google.genomics.v1.VariantCall") + proto.RegisterType((*CallSet)(nil), "google.genomics.v1.CallSet") + proto.RegisterType((*ReferenceBound)(nil), "google.genomics.v1.ReferenceBound") + proto.RegisterType((*ImportVariantsRequest)(nil), "google.genomics.v1.ImportVariantsRequest") + proto.RegisterType((*ImportVariantsResponse)(nil), "google.genomics.v1.ImportVariantsResponse") + proto.RegisterType((*CreateVariantSetRequest)(nil), "google.genomics.v1.CreateVariantSetRequest") + proto.RegisterType((*ExportVariantSetRequest)(nil), "google.genomics.v1.ExportVariantSetRequest") + proto.RegisterType((*GetVariantSetRequest)(nil), "google.genomics.v1.GetVariantSetRequest") + proto.RegisterType((*SearchVariantSetsRequest)(nil), "google.genomics.v1.SearchVariantSetsRequest") + proto.RegisterType((*SearchVariantSetsResponse)(nil), "google.genomics.v1.SearchVariantSetsResponse") + proto.RegisterType((*DeleteVariantSetRequest)(nil), "google.genomics.v1.DeleteVariantSetRequest") + proto.RegisterType((*UpdateVariantSetRequest)(nil), "google.genomics.v1.UpdateVariantSetRequest") + proto.RegisterType((*SearchVariantsRequest)(nil), "google.genomics.v1.SearchVariantsRequest") + proto.RegisterType((*SearchVariantsResponse)(nil), "google.genomics.v1.SearchVariantsResponse") + proto.RegisterType((*CreateVariantRequest)(nil), "google.genomics.v1.CreateVariantRequest") + proto.RegisterType((*UpdateVariantRequest)(nil), "google.genomics.v1.UpdateVariantRequest") + proto.RegisterType((*DeleteVariantRequest)(nil), "google.genomics.v1.DeleteVariantRequest") + proto.RegisterType((*GetVariantRequest)(nil), "google.genomics.v1.GetVariantRequest") + proto.RegisterType((*MergeVariantsRequest)(nil), "google.genomics.v1.MergeVariantsRequest") + proto.RegisterType((*SearchCallSetsRequest)(nil), "google.genomics.v1.SearchCallSetsRequest") + proto.RegisterType((*SearchCallSetsResponse)(nil), "google.genomics.v1.SearchCallSetsResponse") + proto.RegisterType((*CreateCallSetRequest)(nil), "google.genomics.v1.CreateCallSetRequest") + proto.RegisterType((*UpdateCallSetRequest)(nil), "google.genomics.v1.UpdateCallSetRequest") + proto.RegisterType((*DeleteCallSetRequest)(nil), "google.genomics.v1.DeleteCallSetRequest") + proto.RegisterType((*GetCallSetRequest)(nil), "google.genomics.v1.GetCallSetRequest") + proto.RegisterType((*StreamVariantsRequest)(nil), "google.genomics.v1.StreamVariantsRequest") + proto.RegisterType((*StreamVariantsResponse)(nil), "google.genomics.v1.StreamVariantsResponse") + proto.RegisterEnum("google.genomics.v1.InfoMergeOperation", InfoMergeOperation_name, InfoMergeOperation_value) + proto.RegisterEnum("google.genomics.v1.VariantSetMetadata_Type", VariantSetMetadata_Type_name, VariantSetMetadata_Type_value) + proto.RegisterEnum("google.genomics.v1.ImportVariantsRequest_Format", ImportVariantsRequest_Format_name, ImportVariantsRequest_Format_value) + proto.RegisterEnum("google.genomics.v1.ExportVariantSetRequest_Format", ExportVariantSetRequest_Format_name, ExportVariantSetRequest_Format_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for StreamingVariantService service + +type StreamingVariantServiceClient interface { + // Returns a stream of all the variants matching the search request, ordered + // by reference name, position, and ID. + StreamVariants(ctx context.Context, in *StreamVariantsRequest, opts ...grpc.CallOption) (StreamingVariantService_StreamVariantsClient, error) +} + +type streamingVariantServiceClient struct { + cc *grpc.ClientConn +} + +func NewStreamingVariantServiceClient(cc *grpc.ClientConn) StreamingVariantServiceClient { + return &streamingVariantServiceClient{cc} +} + +func (c *streamingVariantServiceClient) StreamVariants(ctx context.Context, in *StreamVariantsRequest, opts ...grpc.CallOption) (StreamingVariantService_StreamVariantsClient, error) { + stream, err := grpc.NewClientStream(ctx, &_StreamingVariantService_serviceDesc.Streams[0], c.cc, "/google.genomics.v1.StreamingVariantService/StreamVariants", opts...) + if err != nil { + return nil, err + } + x := &streamingVariantServiceStreamVariantsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type StreamingVariantService_StreamVariantsClient interface { + Recv() (*StreamVariantsResponse, error) + grpc.ClientStream +} + +type streamingVariantServiceStreamVariantsClient struct { + grpc.ClientStream +} + +func (x *streamingVariantServiceStreamVariantsClient) Recv() (*StreamVariantsResponse, error) { + m := new(StreamVariantsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for StreamingVariantService service + +type StreamingVariantServiceServer interface { + // Returns a stream of all the variants matching the search request, ordered + // by reference name, position, and ID. + StreamVariants(*StreamVariantsRequest, StreamingVariantService_StreamVariantsServer) error +} + +func RegisterStreamingVariantServiceServer(s *grpc.Server, srv StreamingVariantServiceServer) { + s.RegisterService(&_StreamingVariantService_serviceDesc, srv) +} + +func _StreamingVariantService_StreamVariants_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(StreamVariantsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(StreamingVariantServiceServer).StreamVariants(m, &streamingVariantServiceStreamVariantsServer{stream}) +} + +type StreamingVariantService_StreamVariantsServer interface { + Send(*StreamVariantsResponse) error + grpc.ServerStream +} + +type streamingVariantServiceStreamVariantsServer struct { + grpc.ServerStream +} + +func (x *streamingVariantServiceStreamVariantsServer) Send(m *StreamVariantsResponse) error { + return x.ServerStream.SendMsg(m) +} + +var _StreamingVariantService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.genomics.v1.StreamingVariantService", + HandlerType: (*StreamingVariantServiceServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamVariants", + Handler: _StreamingVariantService_StreamVariants_Handler, + ServerStreams: true, + }, + }, + Metadata: "google/genomics/v1/variants.proto", +} + +// Client API for VariantServiceV1 service + +type VariantServiceV1Client interface { + // Creates variant data by asynchronously importing the provided information. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // The variants for import will be merged with any existing variant that + // matches its reference sequence, start, end, reference bases, and + // alternative bases. If no such variant exists, a new one will be created. + // + // When variants are merged, the call information from the new variant + // is added to the existing variant, and Variant info fields are merged + // as specified in + // [infoMergeConfig][google.genomics.v1.ImportVariantsRequest.info_merge_config]. + // As a special case, for single-sample VCF files, QUAL and FILTER fields will + // be moved to the call level; these are sometimes interpreted in a + // call-specific context. + // Imported VCF headers are appended to the metadata already in a variant set. + ImportVariants(ctx context.Context, in *ImportVariantsRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Creates a new variant set. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // The provided variant set must have a valid `datasetId` set - all other + // fields are optional. Note that the `id` field will be ignored, as this is + // assigned by the server. + CreateVariantSet(ctx context.Context, in *CreateVariantSetRequest, opts ...grpc.CallOption) (*VariantSet, error) + // Exports variant set data to an external destination. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + ExportVariantSet(ctx context.Context, in *ExportVariantSetRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Gets a variant set by ID. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetVariantSet(ctx context.Context, in *GetVariantSetRequest, opts ...grpc.CallOption) (*VariantSet, error) + // Returns a list of all variant sets matching search criteria. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchVariantSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L49). + SearchVariantSets(ctx context.Context, in *SearchVariantSetsRequest, opts ...grpc.CallOption) (*SearchVariantSetsResponse, error) + // Deletes a variant set including all variants, call sets, and calls within. + // This is not reversible. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteVariantSet(ctx context.Context, in *DeleteVariantSetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Updates a variant set using patch semantics. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + UpdateVariantSet(ctx context.Context, in *UpdateVariantSetRequest, opts ...grpc.CallOption) (*VariantSet, error) + // Gets a list of variants matching the criteria. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchVariants](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L126). + SearchVariants(ctx context.Context, in *SearchVariantsRequest, opts ...grpc.CallOption) (*SearchVariantsResponse, error) + // Creates a new variant. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + CreateVariant(ctx context.Context, in *CreateVariantRequest, opts ...grpc.CallOption) (*Variant, error) + // Updates a variant. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This method supports patch semantics. Returns the modified variant without + // its calls. + UpdateVariant(ctx context.Context, in *UpdateVariantRequest, opts ...grpc.CallOption) (*Variant, error) + // Deletes a variant. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteVariant(ctx context.Context, in *DeleteVariantRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Gets a variant by ID. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetVariant(ctx context.Context, in *GetVariantRequest, opts ...grpc.CallOption) (*Variant, error) + // Merges the given variants with existing variants. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Each variant will be + // merged with an existing variant that matches its reference sequence, + // start, end, reference bases, and alternative bases. If no such variant + // exists, a new one will be created. + // + // When variants are merged, the call information from the new variant + // is added to the existing variant. Variant info fields are merged as + // specified in the + // [infoMergeConfig][google.genomics.v1.MergeVariantsRequest.info_merge_config] + // field of the MergeVariantsRequest. + // + // Please exercise caution when using this method! It is easy to introduce + // mistakes in existing variants and difficult to back out of them. For + // example, + // suppose you were trying to merge a new variant with an existing one and + // both + // variants contain calls that belong to callsets with the same callset ID. + // + // // Existing variant - irrelevant fields trimmed for clarity + // { + // "variantSetId": "10473108253681171589", + // "referenceName": "1", + // "start": "10582", + // "referenceBases": "G", + // "alternateBases": [ + // "A" + // ], + // "calls": [ + // { + // "callSetId": "10473108253681171589-0", + // "callSetName": "CALLSET0", + // "genotype": [ + // 0, + // 1 + // ], + // } + // ] + // } + // + // // New variant with conflicting call information + // { + // "variantSetId": "10473108253681171589", + // "referenceName": "1", + // "start": "10582", + // "referenceBases": "G", + // "alternateBases": [ + // "A" + // ], + // "calls": [ + // { + // "callSetId": "10473108253681171589-0", + // "callSetName": "CALLSET0", + // "genotype": [ + // 1, + // 1 + // ], + // } + // ] + // } + // + // The resulting merged variant would overwrite the existing calls with those + // from the new variant: + // + // { + // "variantSetId": "10473108253681171589", + // "referenceName": "1", + // "start": "10582", + // "referenceBases": "G", + // "alternateBases": [ + // "A" + // ], + // "calls": [ + // { + // "callSetId": "10473108253681171589-0", + // "callSetName": "CALLSET0", + // "genotype": [ + // 1, + // 1 + // ], + // } + // ] + // } + // + // This may be the desired outcome, but it is up to the user to determine if + // if that is indeed the case. + MergeVariants(ctx context.Context, in *MergeVariantsRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Gets a list of call sets matching the criteria. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L178). + SearchCallSets(ctx context.Context, in *SearchCallSetsRequest, opts ...grpc.CallOption) (*SearchCallSetsResponse, error) + // Creates a new call set. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + CreateCallSet(ctx context.Context, in *CreateCallSetRequest, opts ...grpc.CallOption) (*CallSet, error) + // Updates a call set. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This method supports patch semantics. + UpdateCallSet(ctx context.Context, in *UpdateCallSetRequest, opts ...grpc.CallOption) (*CallSet, error) + // Deletes a call set. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteCallSet(ctx context.Context, in *DeleteCallSetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Gets a call set by ID. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetCallSet(ctx context.Context, in *GetCallSetRequest, opts ...grpc.CallOption) (*CallSet, error) +} + +type variantServiceV1Client struct { + cc *grpc.ClientConn +} + +func NewVariantServiceV1Client(cc *grpc.ClientConn) VariantServiceV1Client { + return &variantServiceV1Client{cc} +} + +func (c *variantServiceV1Client) ImportVariants(ctx context.Context, in *ImportVariantsRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/ImportVariants", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) CreateVariantSet(ctx context.Context, in *CreateVariantSetRequest, opts ...grpc.CallOption) (*VariantSet, error) { + out := new(VariantSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/CreateVariantSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) ExportVariantSet(ctx context.Context, in *ExportVariantSetRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/ExportVariantSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) GetVariantSet(ctx context.Context, in *GetVariantSetRequest, opts ...grpc.CallOption) (*VariantSet, error) { + out := new(VariantSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/GetVariantSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) SearchVariantSets(ctx context.Context, in *SearchVariantSetsRequest, opts ...grpc.CallOption) (*SearchVariantSetsResponse, error) { + out := new(SearchVariantSetsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/SearchVariantSets", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) DeleteVariantSet(ctx context.Context, in *DeleteVariantSetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/DeleteVariantSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) UpdateVariantSet(ctx context.Context, in *UpdateVariantSetRequest, opts ...grpc.CallOption) (*VariantSet, error) { + out := new(VariantSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/UpdateVariantSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) SearchVariants(ctx context.Context, in *SearchVariantsRequest, opts ...grpc.CallOption) (*SearchVariantsResponse, error) { + out := new(SearchVariantsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/SearchVariants", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) CreateVariant(ctx context.Context, in *CreateVariantRequest, opts ...grpc.CallOption) (*Variant, error) { + out := new(Variant) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/CreateVariant", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) UpdateVariant(ctx context.Context, in *UpdateVariantRequest, opts ...grpc.CallOption) (*Variant, error) { + out := new(Variant) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/UpdateVariant", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) DeleteVariant(ctx context.Context, in *DeleteVariantRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/DeleteVariant", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) GetVariant(ctx context.Context, in *GetVariantRequest, opts ...grpc.CallOption) (*Variant, error) { + out := new(Variant) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/GetVariant", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) MergeVariants(ctx context.Context, in *MergeVariantsRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/MergeVariants", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) SearchCallSets(ctx context.Context, in *SearchCallSetsRequest, opts ...grpc.CallOption) (*SearchCallSetsResponse, error) { + out := new(SearchCallSetsResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/SearchCallSets", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) CreateCallSet(ctx context.Context, in *CreateCallSetRequest, opts ...grpc.CallOption) (*CallSet, error) { + out := new(CallSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/CreateCallSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) UpdateCallSet(ctx context.Context, in *UpdateCallSetRequest, opts ...grpc.CallOption) (*CallSet, error) { + out := new(CallSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/UpdateCallSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) DeleteCallSet(ctx context.Context, in *DeleteCallSetRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/DeleteCallSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *variantServiceV1Client) GetCallSet(ctx context.Context, in *GetCallSetRequest, opts ...grpc.CallOption) (*CallSet, error) { + out := new(CallSet) + err := grpc.Invoke(ctx, "/google.genomics.v1.VariantServiceV1/GetCallSet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for VariantServiceV1 service + +type VariantServiceV1Server interface { + // Creates variant data by asynchronously importing the provided information. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // The variants for import will be merged with any existing variant that + // matches its reference sequence, start, end, reference bases, and + // alternative bases. If no such variant exists, a new one will be created. + // + // When variants are merged, the call information from the new variant + // is added to the existing variant, and Variant info fields are merged + // as specified in + // [infoMergeConfig][google.genomics.v1.ImportVariantsRequest.info_merge_config]. + // As a special case, for single-sample VCF files, QUAL and FILTER fields will + // be moved to the call level; these are sometimes interpreted in a + // call-specific context. + // Imported VCF headers are appended to the metadata already in a variant set. + ImportVariants(context.Context, *ImportVariantsRequest) (*google_longrunning.Operation, error) + // Creates a new variant set. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // The provided variant set must have a valid `datasetId` set - all other + // fields are optional. Note that the `id` field will be ignored, as this is + // assigned by the server. + CreateVariantSet(context.Context, *CreateVariantSetRequest) (*VariantSet, error) + // Exports variant set data to an external destination. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + ExportVariantSet(context.Context, *ExportVariantSetRequest) (*google_longrunning.Operation, error) + // Gets a variant set by ID. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetVariantSet(context.Context, *GetVariantSetRequest) (*VariantSet, error) + // Returns a list of all variant sets matching search criteria. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchVariantSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L49). + SearchVariantSets(context.Context, *SearchVariantSetsRequest) (*SearchVariantSetsResponse, error) + // Deletes a variant set including all variants, call sets, and calls within. + // This is not reversible. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteVariantSet(context.Context, *DeleteVariantSetRequest) (*google_protobuf1.Empty, error) + // Updates a variant set using patch semantics. + // + // For the definitions of variant sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + UpdateVariantSet(context.Context, *UpdateVariantSetRequest) (*VariantSet, error) + // Gets a list of variants matching the criteria. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchVariants](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L126). + SearchVariants(context.Context, *SearchVariantsRequest) (*SearchVariantsResponse, error) + // Creates a new variant. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + CreateVariant(context.Context, *CreateVariantRequest) (*Variant, error) + // Updates a variant. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This method supports patch semantics. Returns the modified variant without + // its calls. + UpdateVariant(context.Context, *UpdateVariantRequest) (*Variant, error) + // Deletes a variant. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteVariant(context.Context, *DeleteVariantRequest) (*google_protobuf1.Empty, error) + // Gets a variant by ID. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetVariant(context.Context, *GetVariantRequest) (*Variant, error) + // Merges the given variants with existing variants. + // + // For the definitions of variants and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Each variant will be + // merged with an existing variant that matches its reference sequence, + // start, end, reference bases, and alternative bases. If no such variant + // exists, a new one will be created. + // + // When variants are merged, the call information from the new variant + // is added to the existing variant. Variant info fields are merged as + // specified in the + // [infoMergeConfig][google.genomics.v1.MergeVariantsRequest.info_merge_config] + // field of the MergeVariantsRequest. + // + // Please exercise caution when using this method! It is easy to introduce + // mistakes in existing variants and difficult to back out of them. For + // example, + // suppose you were trying to merge a new variant with an existing one and + // both + // variants contain calls that belong to callsets with the same callset ID. + // + // // Existing variant - irrelevant fields trimmed for clarity + // { + // "variantSetId": "10473108253681171589", + // "referenceName": "1", + // "start": "10582", + // "referenceBases": "G", + // "alternateBases": [ + // "A" + // ], + // "calls": [ + // { + // "callSetId": "10473108253681171589-0", + // "callSetName": "CALLSET0", + // "genotype": [ + // 0, + // 1 + // ], + // } + // ] + // } + // + // // New variant with conflicting call information + // { + // "variantSetId": "10473108253681171589", + // "referenceName": "1", + // "start": "10582", + // "referenceBases": "G", + // "alternateBases": [ + // "A" + // ], + // "calls": [ + // { + // "callSetId": "10473108253681171589-0", + // "callSetName": "CALLSET0", + // "genotype": [ + // 1, + // 1 + // ], + // } + // ] + // } + // + // The resulting merged variant would overwrite the existing calls with those + // from the new variant: + // + // { + // "variantSetId": "10473108253681171589", + // "referenceName": "1", + // "start": "10582", + // "referenceBases": "G", + // "alternateBases": [ + // "A" + // ], + // "calls": [ + // { + // "callSetId": "10473108253681171589-0", + // "callSetName": "CALLSET0", + // "genotype": [ + // 1, + // 1 + // ], + // } + // ] + // } + // + // This may be the desired outcome, but it is up to the user to determine if + // if that is indeed the case. + MergeVariants(context.Context, *MergeVariantsRequest) (*google_protobuf1.Empty, error) + // Gets a list of call sets matching the criteria. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // Implements + // [GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L178). + SearchCallSets(context.Context, *SearchCallSetsRequest) (*SearchCallSetsResponse, error) + // Creates a new call set. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + CreateCallSet(context.Context, *CreateCallSetRequest) (*CallSet, error) + // Updates a call set. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + // + // This method supports patch semantics. + UpdateCallSet(context.Context, *UpdateCallSetRequest) (*CallSet, error) + // Deletes a call set. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + DeleteCallSet(context.Context, *DeleteCallSetRequest) (*google_protobuf1.Empty, error) + // Gets a call set by ID. + // + // For the definitions of call sets and other genomics resources, see + // [Fundamentals of Google + // Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) + GetCallSet(context.Context, *GetCallSetRequest) (*CallSet, error) +} + +func RegisterVariantServiceV1Server(s *grpc.Server, srv VariantServiceV1Server) { + s.RegisterService(&_VariantServiceV1_serviceDesc, srv) +} + +func _VariantServiceV1_ImportVariants_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImportVariantsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).ImportVariants(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/ImportVariants", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).ImportVariants(ctx, req.(*ImportVariantsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_CreateVariantSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVariantSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).CreateVariantSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/CreateVariantSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).CreateVariantSet(ctx, req.(*CreateVariantSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_ExportVariantSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExportVariantSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).ExportVariantSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/ExportVariantSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).ExportVariantSet(ctx, req.(*ExportVariantSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_GetVariantSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVariantSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).GetVariantSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/GetVariantSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).GetVariantSet(ctx, req.(*GetVariantSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_SearchVariantSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchVariantSetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).SearchVariantSets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/SearchVariantSets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).SearchVariantSets(ctx, req.(*SearchVariantSetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_DeleteVariantSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVariantSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).DeleteVariantSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/DeleteVariantSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).DeleteVariantSet(ctx, req.(*DeleteVariantSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_UpdateVariantSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateVariantSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).UpdateVariantSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/UpdateVariantSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).UpdateVariantSet(ctx, req.(*UpdateVariantSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_SearchVariants_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchVariantsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).SearchVariants(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/SearchVariants", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).SearchVariants(ctx, req.(*SearchVariantsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_CreateVariant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVariantRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).CreateVariant(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/CreateVariant", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).CreateVariant(ctx, req.(*CreateVariantRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_UpdateVariant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateVariantRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).UpdateVariant(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/UpdateVariant", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).UpdateVariant(ctx, req.(*UpdateVariantRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_DeleteVariant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVariantRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).DeleteVariant(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/DeleteVariant", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).DeleteVariant(ctx, req.(*DeleteVariantRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_GetVariant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVariantRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).GetVariant(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/GetVariant", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).GetVariant(ctx, req.(*GetVariantRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_MergeVariants_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MergeVariantsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).MergeVariants(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/MergeVariants", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).MergeVariants(ctx, req.(*MergeVariantsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_SearchCallSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchCallSetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).SearchCallSets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/SearchCallSets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).SearchCallSets(ctx, req.(*SearchCallSetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_CreateCallSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateCallSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).CreateCallSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/CreateCallSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).CreateCallSet(ctx, req.(*CreateCallSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_UpdateCallSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateCallSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).UpdateCallSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/UpdateCallSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).UpdateCallSet(ctx, req.(*UpdateCallSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_DeleteCallSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteCallSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).DeleteCallSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/DeleteCallSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).DeleteCallSet(ctx, req.(*DeleteCallSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _VariantServiceV1_GetCallSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetCallSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VariantServiceV1Server).GetCallSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1.VariantServiceV1/GetCallSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VariantServiceV1Server).GetCallSet(ctx, req.(*GetCallSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _VariantServiceV1_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.genomics.v1.VariantServiceV1", + HandlerType: (*VariantServiceV1Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ImportVariants", + Handler: _VariantServiceV1_ImportVariants_Handler, + }, + { + MethodName: "CreateVariantSet", + Handler: _VariantServiceV1_CreateVariantSet_Handler, + }, + { + MethodName: "ExportVariantSet", + Handler: _VariantServiceV1_ExportVariantSet_Handler, + }, + { + MethodName: "GetVariantSet", + Handler: _VariantServiceV1_GetVariantSet_Handler, + }, + { + MethodName: "SearchVariantSets", + Handler: _VariantServiceV1_SearchVariantSets_Handler, + }, + { + MethodName: "DeleteVariantSet", + Handler: _VariantServiceV1_DeleteVariantSet_Handler, + }, + { + MethodName: "UpdateVariantSet", + Handler: _VariantServiceV1_UpdateVariantSet_Handler, + }, + { + MethodName: "SearchVariants", + Handler: _VariantServiceV1_SearchVariants_Handler, + }, + { + MethodName: "CreateVariant", + Handler: _VariantServiceV1_CreateVariant_Handler, + }, + { + MethodName: "UpdateVariant", + Handler: _VariantServiceV1_UpdateVariant_Handler, + }, + { + MethodName: "DeleteVariant", + Handler: _VariantServiceV1_DeleteVariant_Handler, + }, + { + MethodName: "GetVariant", + Handler: _VariantServiceV1_GetVariant_Handler, + }, + { + MethodName: "MergeVariants", + Handler: _VariantServiceV1_MergeVariants_Handler, + }, + { + MethodName: "SearchCallSets", + Handler: _VariantServiceV1_SearchCallSets_Handler, + }, + { + MethodName: "CreateCallSet", + Handler: _VariantServiceV1_CreateCallSet_Handler, + }, + { + MethodName: "UpdateCallSet", + Handler: _VariantServiceV1_UpdateCallSet_Handler, + }, + { + MethodName: "DeleteCallSet", + Handler: _VariantServiceV1_DeleteCallSet_Handler, + }, + { + MethodName: "GetCallSet", + Handler: _VariantServiceV1_GetCallSet_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/genomics/v1/variants.proto", +} + +func init() { proto.RegisterFile("google/genomics/v1/variants.proto", fileDescriptor11) } + +var fileDescriptor11 = []byte{ + // 2348 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xdd, 0x6e, 0x1b, 0xc7, + 0xf5, 0xff, 0xef, 0x92, 0x94, 0xc8, 0x43, 0x91, 0x5a, 0x4f, 0x14, 0x69, 0x43, 0x7f, 0xc9, 0xfb, + 0xb7, 0x1d, 0x45, 0x75, 0x45, 0x9b, 0x81, 0xd3, 0x54, 0x49, 0x6a, 0x48, 0x34, 0xa5, 0xb0, 0x90, + 0x48, 0x65, 0x45, 0xbb, 0x75, 0x80, 0x82, 0x58, 0x91, 0x23, 0x7a, 0x6d, 0x72, 0x97, 0xde, 0x5d, + 0xaa, 0x96, 0x0d, 0x5f, 0x34, 0xfd, 0x42, 0x80, 0x02, 0x05, 0x1a, 0xa0, 0x57, 0xbd, 0xed, 0x45, + 0xd1, 0xa2, 0x6f, 0xe0, 0x37, 0x68, 0x7b, 0x53, 0xf4, 0x0d, 0xfa, 0x10, 0xbd, 0x2c, 0x66, 0x76, + 0x66, 0xb9, 0xbb, 0x1c, 0xae, 0x28, 0x07, 0x09, 0x7a, 0xc7, 0x39, 0x73, 0x66, 0xce, 0xd7, 0xef, + 0x9c, 0x39, 0x67, 0x25, 0xb8, 0xd6, 0xb3, 0xed, 0x5e, 0x1f, 0x97, 0x7b, 0xd8, 0xb2, 0x07, 0x66, + 0xc7, 0x2d, 0x9f, 0xdc, 0x29, 0x9f, 0x18, 0x8e, 0x69, 0x58, 0x9e, 0xbb, 0x31, 0x74, 0x6c, 0xcf, + 0x46, 0xc8, 0x67, 0xd9, 0xe0, 0x2c, 0x1b, 0x27, 0x77, 0x4a, 0x97, 0xd8, 0x31, 0x63, 0x68, 0x96, + 0x0d, 0xcb, 0xb2, 0x3d, 0xc3, 0x33, 0x6d, 0x8b, 0x9d, 0x28, 0xfd, 0x3f, 0xdb, 0xed, 0xdb, 0x56, + 0xcf, 0x19, 0x59, 0x96, 0x69, 0xf5, 0xca, 0xf6, 0x10, 0x3b, 0x11, 0xa6, 0x8b, 0x8c, 0x89, 0xae, + 0x8e, 0x46, 0xc7, 0x65, 0x3c, 0x18, 0x7a, 0xa7, 0x6c, 0x73, 0x35, 0xbe, 0x79, 0x6c, 0xe2, 0x7e, + 0xb7, 0x3d, 0x30, 0xdc, 0xa7, 0x8c, 0xe3, 0x52, 0x9c, 0xc3, 0xf5, 0x9c, 0x51, 0xc7, 0xf3, 0x77, + 0xb5, 0xd7, 0x29, 0x40, 0x0f, 0x7d, 0x33, 0x0e, 0xb1, 0xb7, 0x8f, 0x3d, 0xa3, 0x6b, 0x78, 0x06, + 0x52, 0x20, 0xf5, 0x14, 0x9f, 0xaa, 0xd2, 0xaa, 0xb4, 0x96, 0xd3, 0xc9, 0x4f, 0xb4, 0x04, 0x99, + 0x13, 0xa3, 0x3f, 0xc2, 0xaa, 0x4c, 0x69, 0xfe, 0x02, 0x15, 0x41, 0x36, 0xbb, 0x6a, 0x9a, 0x92, + 0x64, 0xb3, 0x8b, 0xee, 0x41, 0xda, 0x3b, 0x1d, 0x62, 0x35, 0xb3, 0x2a, 0xad, 0x15, 0x2b, 0xdf, + 0xd9, 0x98, 0xf4, 0xc8, 0xc6, 0xa4, 0xb4, 0x8d, 0xd6, 0xe9, 0x10, 0xeb, 0xf4, 0x20, 0x5a, 0x86, + 0x39, 0x6b, 0x34, 0x38, 0xc2, 0x8e, 0x9a, 0xa5, 0x97, 0xb2, 0x15, 0x5a, 0x85, 0x7c, 0x17, 0xbb, + 0x1d, 0xc7, 0x1c, 0x12, 0xd7, 0xa8, 0xf3, 0x74, 0x33, 0x4c, 0x42, 0xf7, 0x21, 0x6d, 0x5a, 0xc7, + 0xb6, 0x9a, 0x5a, 0x4d, 0xad, 0xe5, 0x2b, 0xb7, 0x67, 0x14, 0x5d, 0xb7, 0x8e, 0xed, 0x9a, 0xe5, + 0x39, 0xa7, 0x3a, 0x3d, 0x5d, 0x3a, 0x84, 0x5c, 0x40, 0x12, 0x78, 0xe1, 0x76, 0xd8, 0x0b, 0xf9, + 0x4a, 0x89, 0x4b, 0xe1, 0xce, 0xdd, 0xd8, 0x33, 0x5d, 0xef, 0x21, 0xe1, 0x60, 0x1e, 0xda, 0x94, + 0x3f, 0x94, 0xb4, 0x47, 0x90, 0x26, 0x26, 0xa2, 0x25, 0x50, 0x5a, 0x8f, 0x0e, 0x6a, 0xed, 0x07, + 0x8d, 0xc3, 0x83, 0x5a, 0xb5, 0xbe, 0x53, 0xaf, 0xdd, 0x57, 0xfe, 0x0f, 0xe5, 0x61, 0xbe, 0xde, + 0x68, 0xd5, 0x76, 0x6b, 0xba, 0x22, 0xa1, 0x1c, 0x64, 0x76, 0xf6, 0x9a, 0x5b, 0x2d, 0x45, 0x46, + 0x59, 0x48, 0xef, 0xec, 0x6d, 0xed, 0x2a, 0x29, 0x54, 0x80, 0x5c, 0xf5, 0xd3, 0x2d, 0x7d, 0xab, + 0xda, 0xaa, 0xe9, 0x4a, 0x1a, 0x01, 0xcc, 0x1d, 0xb6, 0xf4, 0x7a, 0x63, 0x57, 0xc9, 0x68, 0x7f, + 0x95, 0x01, 0xc6, 0x66, 0xa1, 0xcb, 0x00, 0xc4, 0x2c, 0x17, 0x7b, 0x6d, 0xb3, 0xcb, 0x14, 0xcf, + 0x31, 0x4a, 0xbd, 0xcb, 0xc2, 0x25, 0x07, 0xe1, 0x5a, 0x03, 0xc5, 0xc1, 0xc7, 0xd8, 0xc1, 0x56, + 0x07, 0xb7, 0xd9, 0xa1, 0x39, 0xba, 0x5b, 0x0c, 0xe8, 0x87, 0xf4, 0xe4, 0x7e, 0x98, 0xf3, 0xc8, + 0x1e, 0x59, 0x5d, 0x57, 0xcd, 0x50, 0x4f, 0x6b, 0x22, 0x4f, 0xeb, 0x9c, 0x77, 0x9b, 0xb0, 0xea, + 0x8b, 0x4e, 0x64, 0xed, 0xa2, 0x6d, 0xc8, 0x0e, 0x58, 0x08, 0xd4, 0x34, 0xbd, 0xe6, 0xe6, 0x6c, + 0x01, 0xd3, 0x83, 0x73, 0x08, 0x41, 0xda, 0x32, 0x06, 0x98, 0x61, 0x81, 0xfe, 0x8e, 0xc3, 0x24, + 0x3b, 0x01, 0x13, 0xed, 0xcb, 0x34, 0xcc, 0xb3, 0x6b, 0xd1, 0x75, 0x28, 0xb2, 0x14, 0xe6, 0xc6, + 0x2f, 0xd2, 0x03, 0x0b, 0x27, 0x81, 0x5c, 0x81, 0xd3, 0x96, 0x20, 0x43, 0x64, 0xb9, 0x14, 0x69, + 0x39, 0xdd, 0x5f, 0x20, 0x15, 0xe6, 0x3b, 0x0e, 0x36, 0x3c, 0xdc, 0x55, 0x17, 0x56, 0xa5, 0xb5, + 0x94, 0xce, 0x97, 0xe8, 0x06, 0x8c, 0x9d, 0xd9, 0xa6, 0x1a, 0x17, 0xe9, 0x5d, 0x85, 0x80, 0xda, + 0x20, 0xaa, 0x2f, 0x41, 0xc6, 0xf5, 0x0c, 0xc7, 0x53, 0x15, 0x7a, 0xdc, 0x5f, 0x10, 0x08, 0x62, + 0xab, 0xab, 0x16, 0x28, 0x8d, 0xfc, 0x44, 0xef, 0xc2, 0x62, 0x28, 0x12, 0x86, 0x8b, 0xdd, 0x89, + 0x90, 0x6d, 0x13, 0x2a, 0x61, 0x34, 0xfa, 0x1e, 0x76, 0x2c, 0xc3, 0xe3, 0x8c, 0xf3, 0x54, 0xe3, + 0x62, 0x40, 0xf6, 0x19, 0x55, 0x98, 0x7f, 0x36, 0x32, 0xfa, 0xa6, 0x77, 0x4a, 0x1d, 0x26, 0xe9, + 0x7c, 0x49, 0xb2, 0xf1, 0xd8, 0x24, 0xcc, 0x6a, 0x8e, 0x9e, 0x64, 0x2b, 0xf4, 0x7d, 0x96, 0x6b, + 0x40, 0x43, 0x77, 0x23, 0x21, 0x74, 0xf1, 0x04, 0x43, 0x77, 0x21, 0xd3, 0x31, 0xfa, 0x7d, 0x57, + 0xcd, 0xd3, 0xb3, 0x57, 0x13, 0xce, 0x56, 0x8d, 0x7e, 0x5f, 0xf7, 0xb9, 0xbf, 0x99, 0xbc, 0xfc, + 0x87, 0x0c, 0xf9, 0x90, 0x2c, 0x74, 0x05, 0xf2, 0x44, 0x1a, 0x07, 0x83, 0x8f, 0x9e, 0x1c, 0x21, + 0xf9, 0x48, 0xd0, 0xa0, 0x10, 0xec, 0xd3, 0x40, 0xe6, 0x7c, 0x7c, 0x31, 0x0e, 0x1a, 0xc6, 0x12, + 0x64, 0x89, 0x29, 0xb4, 0x0a, 0x12, 0x77, 0x67, 0xf4, 0x60, 0x4d, 0xf6, 0x86, 0x8f, 0x89, 0xcb, + 0xb1, 0x47, 0x2b, 0x64, 0x4e, 0x0f, 0xd6, 0xa8, 0x0c, 0x6f, 0x71, 0xbe, 0x76, 0xdf, 0x7c, 0x8a, + 0xfb, 0xe6, 0x63, 0xdb, 0x26, 0xd9, 0x98, 0x5a, 0x93, 0x74, 0xc4, 0xb7, 0xf6, 0x82, 0x1d, 0xf4, + 0x09, 0x8b, 0x81, 0x4c, 0xfd, 0xf8, 0xde, 0x19, 0x7e, 0xfc, 0x76, 0x0a, 0xdd, 0x1f, 0x64, 0x98, + 0xaf, 0xfa, 0xce, 0x60, 0x69, 0x23, 0x05, 0x69, 0xc3, 0xd3, 0x55, 0x0e, 0xa5, 0xeb, 0x45, 0xc8, + 0xb9, 0xc6, 0x60, 0xd8, 0xc7, 0xc4, 0xdd, 0x7e, 0x1e, 0x67, 0x7d, 0x42, 0xbd, 0x8b, 0x6e, 0xc2, + 0x62, 0x34, 0x3b, 0x5d, 0xea, 0x8d, 0x9c, 0x5e, 0x08, 0xa7, 0x67, 0x24, 0xf3, 0x32, 0xd1, 0xcc, + 0xe3, 0x30, 0x4d, 0x4f, 0x87, 0x29, 0xd3, 0xf6, 0xdb, 0x71, 0xcf, 0x8f, 0xa1, 0x18, 0x2d, 0x8c, + 0x82, 0xda, 0x20, 0x89, 0x6a, 0xc3, 0x55, 0xc8, 0x8f, 0x86, 0x43, 0xec, 0xf8, 0x95, 0x97, 0x0a, + 0x4d, 0xe9, 0x40, 0x49, 0xf4, 0x1e, 0xed, 0x37, 0x69, 0x78, 0xbb, 0x3e, 0x18, 0xda, 0x8e, 0xc7, + 0x62, 0xee, 0xea, 0xf8, 0xd9, 0x08, 0xbb, 0xa2, 0x1a, 0x27, 0x09, 0x6a, 0xdc, 0x55, 0xc8, 0xbb, + 0xf6, 0xc8, 0xe9, 0xe0, 0xf6, 0xc8, 0x31, 0x5d, 0x8a, 0xa9, 0x9c, 0x0e, 0x3e, 0xe9, 0x81, 0x63, + 0xba, 0xe8, 0x53, 0x98, 0x3b, 0xb6, 0x9d, 0x81, 0xe1, 0xa9, 0x29, 0xfa, 0xb4, 0x0b, 0xdf, 0x57, + 0xa1, 0x06, 0x1b, 0x3b, 0xf4, 0x9c, 0xce, 0xce, 0xa3, 0x4d, 0x78, 0xc7, 0x22, 0xbf, 0xfa, 0xe6, + 0x0b, 0xdc, 0x8e, 0x1a, 0xef, 0xd2, 0x00, 0x66, 0xf5, 0x95, 0x80, 0x41, 0x0f, 0xbb, 0xc1, 0x45, + 0x4f, 0xe0, 0x02, 0x89, 0x4e, 0x7b, 0x80, 0x9d, 0x1e, 0x6e, 0x77, 0x6c, 0xeb, 0xd8, 0xec, 0x51, + 0x50, 0xe4, 0x2b, 0x3f, 0x98, 0x5d, 0x21, 0x12, 0xd8, 0x7d, 0x72, 0x43, 0x95, 0x5e, 0xe0, 0x87, + 0x7d, 0xd1, 0x8c, 0x52, 0x4b, 0x4f, 0x60, 0x49, 0xc4, 0x28, 0x00, 0xc3, 0xc7, 0x61, 0x30, 0x14, + 0xc5, 0x2f, 0x59, 0x70, 0x55, 0x93, 0xb7, 0x77, 0x61, 0x60, 0x34, 0x60, 0xce, 0xf7, 0x12, 0x5a, + 0x06, 0xb4, 0xd3, 0xd4, 0xf7, 0xb7, 0x5a, 0xb1, 0x26, 0xa1, 0x08, 0xc0, 0xe8, 0x0f, 0xab, 0x3b, + 0x8a, 0x84, 0x2e, 0x81, 0xca, 0xd6, 0xd5, 0xe6, 0xfe, 0xc1, 0x5e, 0xad, 0x55, 0x6b, 0xef, 0xd6, + 0x1a, 0xcd, 0xfd, 0x7a, 0xf5, 0x50, 0x91, 0xb5, 0x4d, 0x58, 0x8e, 0x9b, 0xee, 0x0e, 0x6d, 0xcb, + 0x25, 0x0f, 0xe4, 0x42, 0xa8, 0xc4, 0xb9, 0xaa, 0xe4, 0x47, 0x3a, 0xa8, 0x71, 0xae, 0xf6, 0x39, + 0xac, 0x54, 0x69, 0xfe, 0x8c, 0x1f, 0x5f, 0x8e, 0xa5, 0x7b, 0x90, 0x0f, 0x61, 0x89, 0xba, 0x20, + 0x5f, 0xb9, 0x92, 0xfc, 0x70, 0xeb, 0x30, 0x06, 0x9a, 0xf6, 0x2f, 0x19, 0x56, 0x6a, 0xcf, 0x43, + 0x8a, 0x85, 0x2e, 0x9f, 0x0d, 0xa8, 0x71, 0xfd, 0xe5, 0xb8, 0xfe, 0xa4, 0x05, 0x1a, 0x3a, 0xf6, + 0x13, 0xdc, 0xa1, 0x77, 0xa4, 0xfc, 0x1a, 0xce, 0x28, 0xf5, 0x2e, 0xfa, 0x61, 0x00, 0xe4, 0x34, + 0x8d, 0x56, 0x45, 0xa4, 0xfe, 0x14, 0x1d, 0xe3, 0x50, 0x7e, 0x0f, 0x94, 0x23, 0xb3, 0xf7, 0x6c, + 0x84, 0x9d, 0xd3, 0x36, 0x6b, 0xb2, 0x58, 0x5d, 0x5f, 0xe4, 0xf4, 0xfb, 0x3e, 0x99, 0x24, 0x7a, + 0xc0, 0xea, 0x19, 0x47, 0x7d, 0xcc, 0x1e, 0xed, 0x02, 0xa7, 0xb6, 0x08, 0x51, 0xbb, 0x7b, 0x26, + 0x10, 0xde, 0x82, 0x45, 0x46, 0xdf, 0xae, 0xef, 0x7e, 0xf6, 0xa0, 0xa6, 0x3f, 0x52, 0x24, 0xed, + 0x63, 0x58, 0xda, 0xc5, 0x6f, 0xea, 0x53, 0xed, 0xa7, 0xa0, 0x1e, 0x62, 0xc3, 0xe9, 0x3c, 0x1e, + 0x5f, 0x10, 0x94, 0x8f, 0xab, 0x90, 0x1f, 0x37, 0x94, 0x01, 0x5c, 0x82, 0x8e, 0xd2, 0x77, 0xb7, + 0xd1, 0xc3, 0x6d, 0xcf, 0x7e, 0x8a, 0x2d, 0x56, 0xdc, 0x73, 0x84, 0xd2, 0x22, 0x04, 0x52, 0xe1, + 0xe9, 0xb6, 0x6b, 0xbe, 0xc0, 0x34, 0x18, 0x19, 0x3d, 0x4b, 0x08, 0x87, 0xe6, 0x0b, 0xac, 0xfd, + 0x4a, 0x82, 0x77, 0x04, 0x92, 0x19, 0x54, 0xb7, 0x60, 0x21, 0xa4, 0xbc, 0x2f, 0xfb, 0x6c, 0xb8, + 0xe5, 0xc7, 0xa6, 0xb9, 0xe4, 0x09, 0xb1, 0xf0, 0x73, 0xaf, 0x3d, 0xa1, 0x61, 0x81, 0x90, 0x0f, + 0xb8, 0x96, 0xda, 0x3d, 0x58, 0xb9, 0x8f, 0xfb, 0x58, 0x84, 0xf9, 0xd9, 0x5c, 0xf8, 0x5a, 0x82, + 0x95, 0x07, 0xc3, 0xae, 0xf1, 0xc6, 0x37, 0xc4, 0x73, 0x4b, 0x3e, 0x6f, 0x6e, 0xa1, 0x8f, 0xc8, + 0x1b, 0x41, 0x34, 0xa0, 0xc3, 0x1f, 0xc5, 0xa1, 0xe8, 0x61, 0xda, 0x21, 0xf3, 0xe1, 0xbe, 0xe1, + 0x3e, 0x25, 0xef, 0x07, 0x61, 0x27, 0xbf, 0xb5, 0xbf, 0xc8, 0xf0, 0x76, 0x24, 0x12, 0x01, 0x00, + 0x04, 0xaf, 0xb0, 0x24, 0x7a, 0x85, 0xaf, 0x8d, 0xa3, 0x15, 0x7a, 0xe6, 0xb9, 0x4d, 0x0d, 0xbf, + 0x39, 0x8f, 0xe6, 0x6e, 0x6a, 0x22, 0x77, 0x27, 0x9f, 0xc3, 0x74, 0x62, 0xab, 0x9c, 0x11, 0xb4, + 0xca, 0x73, 0xe3, 0x56, 0x39, 0x8a, 0xcd, 0xf9, 0x44, 0x6c, 0x66, 0xa3, 0xd8, 0x24, 0x9b, 0x03, + 0xe3, 0x79, 0xdb, 0xef, 0x55, 0x73, 0xfe, 0xe6, 0xc0, 0x78, 0x4e, 0xfa, 0x05, 0x57, 0x3b, 0x85, + 0xe5, 0xb8, 0xb7, 0x18, 0x68, 0xbf, 0x07, 0x59, 0xfe, 0x55, 0x80, 0x01, 0xf6, 0x62, 0x42, 0x0c, + 0xf5, 0x80, 0x79, 0x66, 0xa8, 0xee, 0xc3, 0x52, 0xa4, 0x3c, 0xf3, 0x38, 0xdd, 0x85, 0x79, 0x76, + 0x17, 0xab, 0xcb, 0x89, 0x72, 0x39, 0xaf, 0xf6, 0x27, 0x09, 0x96, 0x22, 0xc0, 0xe5, 0xf7, 0x5d, + 0x06, 0x0e, 0xae, 0xd0, 0x24, 0xc9, 0x28, 0xf5, 0x6e, 0x58, 0x9c, 0x3c, 0xbb, 0xb8, 0x38, 0x48, + 0x53, 0xe7, 0x02, 0xe9, 0x5d, 0x58, 0x8a, 0x64, 0xe9, 0x6c, 0xaa, 0x6a, 0x15, 0xb8, 0x30, 0x2e, + 0x8e, 0x33, 0x9e, 0xf9, 0x9b, 0x0c, 0x4b, 0xf4, 0xb9, 0x7e, 0xb3, 0x76, 0x2a, 0x8c, 0x02, 0xf9, + 0x3c, 0x28, 0x30, 0x45, 0x0d, 0x8e, 0xff, 0x45, 0xe3, 0x13, 0xd1, 0x0d, 0x22, 0x1d, 0xff, 0x07, + 0xfb, 0x9b, 0xdf, 0x4a, 0xbc, 0xbc, 0xb0, 0x7e, 0xfb, 0xdc, 0xe5, 0x45, 0x34, 0x3d, 0x44, 0xd3, + 0x3b, 0x95, 0x98, 0xde, 0xe9, 0xd8, 0xd3, 0xf3, 0x82, 0x67, 0xf0, 0x58, 0x21, 0x96, 0xc1, 0x1f, + 0x42, 0x8e, 0x57, 0xa9, 0xc4, 0x14, 0x66, 0x07, 0xf5, 0x2c, 0xab, 0x5f, 0xb3, 0xa7, 0x70, 0x83, + 0xa7, 0x30, 0xbf, 0x82, 0xf9, 0xe2, 0x03, 0xc8, 0x72, 0xc9, 0x49, 0x39, 0xcc, 0x4f, 0xcd, 0x33, + 0xc1, 0xda, 0x9f, 0x83, 0x1c, 0x8e, 0x5d, 0x18, 0x9b, 0x67, 0xa5, 0xf8, 0x3c, 0x1b, 0x16, 0x28, + 0xcf, 0x2e, 0xf0, 0xeb, 0x65, 0xf1, 0x07, 0x3c, 0x8b, 0xcf, 0xa7, 0xac, 0xf6, 0x3e, 0x4d, 0xe3, + 0x73, 0x1e, 0xfa, 0x3b, 0x01, 0x9e, 0xe7, 0x60, 0x63, 0x10, 0x4f, 0xe4, 0x68, 0x9b, 0x28, 0xc5, + 0xdb, 0xc4, 0xc9, 0x3c, 0x97, 0x67, 0xe8, 0x46, 0xbf, 0xe9, 0x17, 0x4d, 0xfb, 0x0c, 0x96, 0xe3, + 0xe6, 0x7c, 0xcd, 0x87, 0x67, 0xfd, 0x27, 0x80, 0x26, 0x93, 0x17, 0x5d, 0x87, 0xd5, 0x7a, 0x63, + 0xa7, 0xd9, 0xde, 0xaf, 0xe9, 0xbb, 0xb5, 0x76, 0xf3, 0xa0, 0xa6, 0x6f, 0xb5, 0xea, 0xcd, 0xc6, + 0xe4, 0x54, 0x52, 0xdf, 0x6d, 0x34, 0xf5, 0x5a, 0xbb, 0x51, 0xfb, 0x91, 0x22, 0xa1, 0x0b, 0x50, + 0xd8, 0x6f, 0x3e, 0xac, 0xb5, 0x5b, 0xcd, 0x76, 0x75, 0x6b, 0x6f, 0xef, 0x50, 0x91, 0x2b, 0x7f, + 0x94, 0x60, 0xc5, 0x57, 0xd9, 0xb4, 0x7a, 0x41, 0xeb, 0xe2, 0x9c, 0x98, 0x1d, 0x8c, 0xbe, 0x94, + 0xa0, 0x18, 0x35, 0x07, 0x09, 0xbf, 0x63, 0x08, 0x23, 0x58, 0x5a, 0x9f, 0x85, 0xd5, 0xf7, 0x8e, + 0x76, 0xe5, 0x8b, 0x7f, 0xfe, 0xfb, 0x2b, 0x59, 0xd5, 0xde, 0x0a, 0x7f, 0xb6, 0xdf, 0x74, 0x29, + 0xf3, 0xa6, 0xb4, 0x7e, 0x5b, 0xaa, 0xbc, 0x46, 0xa0, 0x44, 0xd5, 0x7b, 0x78, 0x07, 0xbd, 0x80, + 0x62, 0x74, 0x8e, 0x12, 0xeb, 0x27, 0x1c, 0x33, 0x4b, 0x97, 0x39, 0x6b, 0xe8, 0xeb, 0xfe, 0x46, + 0xe0, 0xe1, 0x29, 0x2a, 0x99, 0xf4, 0xaa, 0x4d, 0x69, 0x1d, 0xfd, 0x52, 0x02, 0x25, 0x3e, 0x88, + 0x21, 0xe1, 0x17, 0xf5, 0x29, 0xe3, 0x5a, 0xe9, 0x8c, 0xee, 0x51, 0xbb, 0x4e, 0x35, 0xb8, 0xa2, + 0x2d, 0x86, 0x35, 0xc0, 0x9e, 0xbb, 0x19, 0xee, 0x44, 0xd1, 0xef, 0x24, 0x50, 0xe2, 0xf3, 0x90, + 0x58, 0x8f, 0x29, 0x53, 0xd3, 0x59, 0x8e, 0xa8, 0x50, 0x35, 0x6e, 0x69, 0xef, 0xc6, 0xd4, 0x28, + 0xbf, 0x8c, 0x66, 0xe0, 0xab, 0x4d, 0xfc, 0x9c, 0x3b, 0xe7, 0xe7, 0x12, 0x14, 0x22, 0x13, 0x0f, + 0x5a, 0x13, 0x69, 0x24, 0x1a, 0x8a, 0xce, 0x74, 0xcb, 0x1a, 0xd5, 0x47, 0x43, 0xab, 0x67, 0xe9, + 0x83, 0xbe, 0x92, 0xe0, 0xc2, 0xc4, 0xfc, 0x82, 0x6e, 0x09, 0x71, 0x39, 0x65, 0xc0, 0x2a, 0x7d, + 0x77, 0x46, 0x6e, 0x06, 0xe4, 0x6b, 0x54, 0xb9, 0x8b, 0xda, 0x72, 0x5c, 0x39, 0x97, 0x1e, 0x21, + 0xbe, 0xf9, 0x99, 0x04, 0x4a, 0x7c, 0x9a, 0x11, 0x07, 0x6c, 0xca, 0xcc, 0x53, 0x5a, 0x9e, 0x28, + 0xe5, 0xb5, 0xc1, 0xd0, 0x3b, 0xe5, 0x9e, 0x59, 0x3f, 0xdb, 0x33, 0xbf, 0x97, 0x40, 0x89, 0xcf, + 0x43, 0x62, 0x1d, 0xa6, 0x4c, 0x4d, 0x67, 0x46, 0xe9, 0x2e, 0xd5, 0xa5, 0x5c, 0x39, 0x53, 0x97, + 0x28, 0x9a, 0x7f, 0x4d, 0x4a, 0x4e, 0xa4, 0x75, 0x9f, 0x52, 0x72, 0x44, 0xc3, 0xd0, 0x94, 0x92, + 0x23, 0x9c, 0x04, 0xc4, 0xf9, 0x1d, 0x0a, 0xd3, 0x08, 0x0a, 0x91, 0xc4, 0x15, 0x23, 0x58, 0xd4, + 0xeb, 0x97, 0x92, 0x2a, 0xbb, 0x76, 0x99, 0xca, 0x5d, 0xd1, 0x16, 0x22, 0x75, 0x25, 0xe8, 0xc0, + 0xbf, 0x90, 0xa0, 0x10, 0xf1, 0xb9, 0x58, 0xae, 0x68, 0x26, 0x48, 0x96, 0xbb, 0x4e, 0xe5, 0x5e, + 0xaf, 0xbc, 0x13, 0xb1, 0xf7, 0xe5, 0xb8, 0xcb, 0x7e, 0x35, 0x56, 0xc2, 0x83, 0x42, 0x04, 0x7b, + 0x62, 0x1d, 0x44, 0xcd, 0xfe, 0x54, 0x6c, 0xb2, 0xc4, 0x58, 0x9f, 0x2e, 0x1e, 0xb9, 0x00, 0xe3, + 0x82, 0x80, 0x6e, 0x24, 0x17, 0x8c, 0x99, 0x6c, 0x66, 0x42, 0x51, 0x82, 0xd0, 0x21, 0x14, 0x22, + 0x4d, 0xba, 0xd8, 0x54, 0x51, 0x1f, 0x3f, 0xd5, 0x54, 0x1e, 0x61, 0x14, 0x89, 0x30, 0x1d, 0x19, + 0x08, 0xb0, 0xc6, 0x10, 0xe7, 0xbd, 0x6d, 0x12, 0xc4, 0x63, 0x0d, 0x79, 0x12, 0xc4, 0xe3, 0xad, + 0x72, 0x14, 0xe2, 0x74, 0x52, 0x8e, 0x56, 0xa2, 0x13, 0x0e, 0x71, 0xfe, 0x37, 0x81, 0x04, 0x88, + 0x47, 0x1b, 0xbb, 0x52, 0x52, 0x23, 0x1a, 0xc8, 0x5d, 0x08, 0xcb, 0xdd, 0x0c, 0x7a, 0x59, 0xf4, + 0x8b, 0x00, 0xe3, 0x89, 0x82, 0x45, 0x3d, 0x73, 0xb2, 0xe0, 0x5b, 0x54, 0xf0, 0xcd, 0x4a, 0x29, + 0x62, 0xf0, 0xcb, 0x50, 0x0f, 0xf8, 0x2a, 0xa4, 0xc6, 0x88, 0xa3, 0x3c, 0x51, 0x0b, 0x51, 0x33, + 0x3c, 0x35, 0xf4, 0x1a, 0x55, 0xe0, 0xd2, 0x7a, 0x82, 0x02, 0xc8, 0xa3, 0x30, 0xe7, 0x32, 0xa7, + 0xc1, 0xfc, 0x3c, 0x66, 0x33, 0xa9, 0x28, 0x41, 0xea, 0xf6, 0x63, 0x58, 0xee, 0xd8, 0x03, 0xc1, + 0x2d, 0xdb, 0x05, 0x8e, 0xeb, 0x03, 0x62, 0xcb, 0x81, 0xf4, 0xf9, 0x26, 0x67, 0xb2, 0xfb, 0x86, + 0xd5, 0xdb, 0xb0, 0x9d, 0x5e, 0xb9, 0x87, 0x2d, 0x6a, 0x69, 0xd9, 0xdf, 0x32, 0x86, 0xa6, 0x1b, + 0xfe, 0x4f, 0x8b, 0x8f, 0xf8, 0xef, 0xff, 0x48, 0xd2, 0xd1, 0x1c, 0xe5, 0x7c, 0xff, 0xbf, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x7e, 0x5e, 0x37, 0xc0, 0x92, 0x21, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1alpha2/pipelines.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1alpha2/pipelines.pb.go new file mode 100644 index 0000000..5c67255 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1alpha2/pipelines.pb.go @@ -0,0 +1,1839 @@ +// Code generated by protoc-gen-go. +// source: google/genomics/v1alpha2/pipelines.proto +// DO NOT EDIT! + +/* +Package genomics is a generated protocol buffer package. + +It is generated from these files: + google/genomics/v1alpha2/pipelines.proto + +It has these top-level messages: + ComputeEngine + RuntimeMetadata + Pipeline + CreatePipelineRequest + RunPipelineArgs + RunPipelineRequest + GetPipelineRequest + ListPipelinesRequest + ListPipelinesResponse + DeletePipelineRequest + GetControllerConfigRequest + ControllerConfig + TimestampEvent + SetOperationStatusRequest + ServiceAccount + LoggingOptions + PipelineResources + PipelineParameter + DockerExecutor +*/ +package genomics + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc1 "google.golang.org/genproto/googleapis/rpc/code" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The types of disks that may be attached to VMs. +type PipelineResources_Disk_Type int32 + +const ( + // Default disk type. Use one of the other options below. + PipelineResources_Disk_TYPE_UNSPECIFIED PipelineResources_Disk_Type = 0 + // Specifies a Google Compute Engine persistent hard disk. See + // https://cloud.google.com/compute/docs/disks/#pdspecs for details. + PipelineResources_Disk_PERSISTENT_HDD PipelineResources_Disk_Type = 1 + // Specifies a Google Compute Engine persistent solid-state disk. See + // https://cloud.google.com/compute/docs/disks/#pdspecs for details. + PipelineResources_Disk_PERSISTENT_SSD PipelineResources_Disk_Type = 2 + // Specifies a Google Compute Engine local SSD. + // See https://cloud.google.com/compute/docs/disks/local-ssd for details. + PipelineResources_Disk_LOCAL_SSD PipelineResources_Disk_Type = 3 +) + +var PipelineResources_Disk_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "PERSISTENT_HDD", + 2: "PERSISTENT_SSD", + 3: "LOCAL_SSD", +} +var PipelineResources_Disk_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "PERSISTENT_HDD": 1, + "PERSISTENT_SSD": 2, + "LOCAL_SSD": 3, +} + +func (x PipelineResources_Disk_Type) String() string { + return proto.EnumName(PipelineResources_Disk_Type_name, int32(x)) +} +func (PipelineResources_Disk_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{16, 0, 0} +} + +// Describes a Compute Engine resource that is being managed by a running +// [pipeline][google.genomics.v1alpha2.Pipeline]. +type ComputeEngine struct { + // The instance on which the operation is running. + InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` + // The availability zone in which the instance resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The machine type of the instance. + MachineType string `protobuf:"bytes,3,opt,name=machine_type,json=machineType" json:"machine_type,omitempty"` + // The names of the disks that were created for this pipeline. + DiskNames []string `protobuf:"bytes,4,rep,name=disk_names,json=diskNames" json:"disk_names,omitempty"` +} + +func (m *ComputeEngine) Reset() { *m = ComputeEngine{} } +func (m *ComputeEngine) String() string { return proto.CompactTextString(m) } +func (*ComputeEngine) ProtoMessage() {} +func (*ComputeEngine) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ComputeEngine) GetInstanceName() string { + if m != nil { + return m.InstanceName + } + return "" +} + +func (m *ComputeEngine) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ComputeEngine) GetMachineType() string { + if m != nil { + return m.MachineType + } + return "" +} + +func (m *ComputeEngine) GetDiskNames() []string { + if m != nil { + return m.DiskNames + } + return nil +} + +// Runtime metadata that will be populated in the +// [runtimeMetadata][google.genomics.v1.OperationMetadata.runtime_metadata] +// field of the Operation associated with a RunPipeline execution. +type RuntimeMetadata struct { + // Execution information specific to Google Compute Engine. + ComputeEngine *ComputeEngine `protobuf:"bytes,1,opt,name=compute_engine,json=computeEngine" json:"compute_engine,omitempty"` +} + +func (m *RuntimeMetadata) Reset() { *m = RuntimeMetadata{} } +func (m *RuntimeMetadata) String() string { return proto.CompactTextString(m) } +func (*RuntimeMetadata) ProtoMessage() {} +func (*RuntimeMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *RuntimeMetadata) GetComputeEngine() *ComputeEngine { + if m != nil { + return m.ComputeEngine + } + return nil +} + +// The pipeline object. Represents a transformation from a set of input +// parameters to a set of output parameters. The transformation is defined +// as a docker image and command to run within that image. Each pipeline +// is run on a Google Compute Engine VM. A pipeline can be created with the +// `create` method and then later run with the `run` method, or a pipeline can +// be defined and run all at once with the `run` method. +type Pipeline struct { + // Required. The project in which to create the pipeline. The caller must have + // WRITE access. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. A user specified pipeline name that does not have to be unique. + // This name can be used for filtering Pipelines in ListPipelines. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // User-specified description. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // Input parameters of the pipeline. + InputParameters []*PipelineParameter `protobuf:"bytes,8,rep,name=input_parameters,json=inputParameters" json:"input_parameters,omitempty"` + // Output parameters of the pipeline. + OutputParameters []*PipelineParameter `protobuf:"bytes,9,rep,name=output_parameters,json=outputParameters" json:"output_parameters,omitempty"` + // Required. The executor indicates in which environment the pipeline runs. + // + // Types that are valid to be assigned to Executor: + // *Pipeline_Docker + Executor isPipeline_Executor `protobuf_oneof:"executor"` + // Required. Specifies resource requirements for the pipeline run. + // Required fields: + // + // * + // [minimumCpuCores][google.genomics.v1alpha2.PipelineResources.minimum_cpu_cores] + // + // * + // [minimumRamGb][google.genomics.v1alpha2.PipelineResources.minimum_ram_gb] + Resources *PipelineResources `protobuf:"bytes,6,opt,name=resources" json:"resources,omitempty"` + // Unique pipeline id that is generated by the service when CreatePipeline + // is called. Cannot be specified in the Pipeline used in the + // CreatePipelineRequest, and will be populated in the response to + // CreatePipeline and all subsequent Get and List calls. Indicates that the + // service has registered this pipeline. + PipelineId string `protobuf:"bytes,7,opt,name=pipeline_id,json=pipelineId" json:"pipeline_id,omitempty"` +} + +func (m *Pipeline) Reset() { *m = Pipeline{} } +func (m *Pipeline) String() string { return proto.CompactTextString(m) } +func (*Pipeline) ProtoMessage() {} +func (*Pipeline) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isPipeline_Executor interface { + isPipeline_Executor() +} + +type Pipeline_Docker struct { + Docker *DockerExecutor `protobuf:"bytes,5,opt,name=docker,oneof"` +} + +func (*Pipeline_Docker) isPipeline_Executor() {} + +func (m *Pipeline) GetExecutor() isPipeline_Executor { + if m != nil { + return m.Executor + } + return nil +} + +func (m *Pipeline) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *Pipeline) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Pipeline) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Pipeline) GetInputParameters() []*PipelineParameter { + if m != nil { + return m.InputParameters + } + return nil +} + +func (m *Pipeline) GetOutputParameters() []*PipelineParameter { + if m != nil { + return m.OutputParameters + } + return nil +} + +func (m *Pipeline) GetDocker() *DockerExecutor { + if x, ok := m.GetExecutor().(*Pipeline_Docker); ok { + return x.Docker + } + return nil +} + +func (m *Pipeline) GetResources() *PipelineResources { + if m != nil { + return m.Resources + } + return nil +} + +func (m *Pipeline) GetPipelineId() string { + if m != nil { + return m.PipelineId + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Pipeline) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Pipeline_OneofMarshaler, _Pipeline_OneofUnmarshaler, _Pipeline_OneofSizer, []interface{}{ + (*Pipeline_Docker)(nil), + } +} + +func _Pipeline_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Pipeline) + // executor + switch x := m.Executor.(type) { + case *Pipeline_Docker: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Docker); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Pipeline.Executor has unexpected type %T", x) + } + return nil +} + +func _Pipeline_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Pipeline) + switch tag { + case 5: // executor.docker + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DockerExecutor) + err := b.DecodeMessage(msg) + m.Executor = &Pipeline_Docker{msg} + return true, err + default: + return false, nil + } +} + +func _Pipeline_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Pipeline) + // executor + switch x := m.Executor.(type) { + case *Pipeline_Docker: + s := proto.Size(x.Docker) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The request to create a pipeline. The pipeline field here should not have +// `pipelineId` populated, as that will be populated by the server. +type CreatePipelineRequest struct { + // The pipeline to create. Should not have `pipelineId` populated. + Pipeline *Pipeline `protobuf:"bytes,1,opt,name=pipeline" json:"pipeline,omitempty"` +} + +func (m *CreatePipelineRequest) Reset() { *m = CreatePipelineRequest{} } +func (m *CreatePipelineRequest) String() string { return proto.CompactTextString(m) } +func (*CreatePipelineRequest) ProtoMessage() {} +func (*CreatePipelineRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *CreatePipelineRequest) GetPipeline() *Pipeline { + if m != nil { + return m.Pipeline + } + return nil +} + +// The pipeline run arguments. +type RunPipelineArgs struct { + // Required. The project in which to run the pipeline. The caller must have + // WRITER access to all Google Cloud services and resources (e.g. Google + // Compute Engine) will be used. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Pipeline input arguments; keys are defined in the pipeline documentation. + // All input parameters that do not have default values must be specified. + // If parameters with defaults are specified here, the defaults will be + // overridden. + Inputs map[string]string `protobuf:"bytes,2,rep,name=inputs" json:"inputs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Pipeline output arguments; keys are defined in the pipeline + // documentation. All output parameters of without default values + // must be specified. If parameters with defaults are specified + // here, the defaults will be overridden. + Outputs map[string]string `protobuf:"bytes,3,rep,name=outputs" json:"outputs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The Google Cloud Service Account that will be used to access data and + // services. By default, the compute service account associated with + // `projectId` is used. + ServiceAccount *ServiceAccount `protobuf:"bytes,4,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // This field is deprecated. Use `labels` instead. Client-specified pipeline + // operation identifier. + ClientId string `protobuf:"bytes,5,opt,name=client_id,json=clientId" json:"client_id,omitempty"` + // Specifies resource requirements/overrides for the pipeline run. + Resources *PipelineResources `protobuf:"bytes,6,opt,name=resources" json:"resources,omitempty"` + // Required. Logging options. Used by the service to communicate results + // to the user. + Logging *LoggingOptions `protobuf:"bytes,7,opt,name=logging" json:"logging,omitempty"` + // How long to keep the VM up after a failure (for example docker command + // failed, copying input or output files failed, etc). While the VM is up, one + // can ssh into the VM to debug. Default is 0; maximum allowed value is 1 day. + KeepVmAliveOnFailureDuration *google_protobuf3.Duration `protobuf:"bytes,8,opt,name=keep_vm_alive_on_failure_duration,json=keepVmAliveOnFailureDuration" json:"keep_vm_alive_on_failure_duration,omitempty"` + // Labels to apply to this pipeline run. Labels will also be applied to + // compute resources (VM, disks) created by this pipeline run. When listing + // operations, operations can [filtered by labels] + // [google.longrunning.ListOperationsRequest.filter]. + // Label keys may not be empty; label values may be empty. Non-empty labels + // must be 1-63 characters long, and comply with [RFC1035] + // (https://www.ietf.org/rfc/rfc1035.txt). + // Specifically, the name must be 1-63 characters long and match the regular + // expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first + // character must be a lowercase letter, and all following characters must be + // a dash, lowercase letter, or digit, except the last character, which cannot + // be a dash. + Labels map[string]string `protobuf:"bytes,9,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *RunPipelineArgs) Reset() { *m = RunPipelineArgs{} } +func (m *RunPipelineArgs) String() string { return proto.CompactTextString(m) } +func (*RunPipelineArgs) ProtoMessage() {} +func (*RunPipelineArgs) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *RunPipelineArgs) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RunPipelineArgs) GetInputs() map[string]string { + if m != nil { + return m.Inputs + } + return nil +} + +func (m *RunPipelineArgs) GetOutputs() map[string]string { + if m != nil { + return m.Outputs + } + return nil +} + +func (m *RunPipelineArgs) GetServiceAccount() *ServiceAccount { + if m != nil { + return m.ServiceAccount + } + return nil +} + +func (m *RunPipelineArgs) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +func (m *RunPipelineArgs) GetResources() *PipelineResources { + if m != nil { + return m.Resources + } + return nil +} + +func (m *RunPipelineArgs) GetLogging() *LoggingOptions { + if m != nil { + return m.Logging + } + return nil +} + +func (m *RunPipelineArgs) GetKeepVmAliveOnFailureDuration() *google_protobuf3.Duration { + if m != nil { + return m.KeepVmAliveOnFailureDuration + } + return nil +} + +func (m *RunPipelineArgs) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// The request to run a pipeline. If `pipelineId` is specified, it +// refers to a saved pipeline created with CreatePipeline and set as +// the `pipelineId` of the returned Pipeline object. If +// `ephemeralPipeline` is specified, that pipeline is run once +// with the given args and not saved. It is an error to specify both +// `pipelineId` and `ephemeralPipeline`. `pipelineArgs` +// must be specified. +type RunPipelineRequest struct { + // Types that are valid to be assigned to Pipeline: + // *RunPipelineRequest_PipelineId + // *RunPipelineRequest_EphemeralPipeline + Pipeline isRunPipelineRequest_Pipeline `protobuf_oneof:"pipeline"` + // The arguments to use when running this pipeline. + PipelineArgs *RunPipelineArgs `protobuf:"bytes,3,opt,name=pipeline_args,json=pipelineArgs" json:"pipeline_args,omitempty"` +} + +func (m *RunPipelineRequest) Reset() { *m = RunPipelineRequest{} } +func (m *RunPipelineRequest) String() string { return proto.CompactTextString(m) } +func (*RunPipelineRequest) ProtoMessage() {} +func (*RunPipelineRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +type isRunPipelineRequest_Pipeline interface { + isRunPipelineRequest_Pipeline() +} + +type RunPipelineRequest_PipelineId struct { + PipelineId string `protobuf:"bytes,1,opt,name=pipeline_id,json=pipelineId,oneof"` +} +type RunPipelineRequest_EphemeralPipeline struct { + EphemeralPipeline *Pipeline `protobuf:"bytes,2,opt,name=ephemeral_pipeline,json=ephemeralPipeline,oneof"` +} + +func (*RunPipelineRequest_PipelineId) isRunPipelineRequest_Pipeline() {} +func (*RunPipelineRequest_EphemeralPipeline) isRunPipelineRequest_Pipeline() {} + +func (m *RunPipelineRequest) GetPipeline() isRunPipelineRequest_Pipeline { + if m != nil { + return m.Pipeline + } + return nil +} + +func (m *RunPipelineRequest) GetPipelineId() string { + if x, ok := m.GetPipeline().(*RunPipelineRequest_PipelineId); ok { + return x.PipelineId + } + return "" +} + +func (m *RunPipelineRequest) GetEphemeralPipeline() *Pipeline { + if x, ok := m.GetPipeline().(*RunPipelineRequest_EphemeralPipeline); ok { + return x.EphemeralPipeline + } + return nil +} + +func (m *RunPipelineRequest) GetPipelineArgs() *RunPipelineArgs { + if m != nil { + return m.PipelineArgs + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RunPipelineRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RunPipelineRequest_OneofMarshaler, _RunPipelineRequest_OneofUnmarshaler, _RunPipelineRequest_OneofSizer, []interface{}{ + (*RunPipelineRequest_PipelineId)(nil), + (*RunPipelineRequest_EphemeralPipeline)(nil), + } +} + +func _RunPipelineRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RunPipelineRequest) + // pipeline + switch x := m.Pipeline.(type) { + case *RunPipelineRequest_PipelineId: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.PipelineId) + case *RunPipelineRequest_EphemeralPipeline: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.EphemeralPipeline); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RunPipelineRequest.Pipeline has unexpected type %T", x) + } + return nil +} + +func _RunPipelineRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RunPipelineRequest) + switch tag { + case 1: // pipeline.pipeline_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Pipeline = &RunPipelineRequest_PipelineId{x} + return true, err + case 2: // pipeline.ephemeral_pipeline + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Pipeline) + err := b.DecodeMessage(msg) + m.Pipeline = &RunPipelineRequest_EphemeralPipeline{msg} + return true, err + default: + return false, nil + } +} + +func _RunPipelineRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RunPipelineRequest) + // pipeline + switch x := m.Pipeline.(type) { + case *RunPipelineRequest_PipelineId: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.PipelineId))) + n += len(x.PipelineId) + case *RunPipelineRequest_EphemeralPipeline: + s := proto.Size(x.EphemeralPipeline) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A request to get a saved pipeline by id. +type GetPipelineRequest struct { + // Caller must have READ access to the project in which this pipeline + // is defined. + PipelineId string `protobuf:"bytes,1,opt,name=pipeline_id,json=pipelineId" json:"pipeline_id,omitempty"` +} + +func (m *GetPipelineRequest) Reset() { *m = GetPipelineRequest{} } +func (m *GetPipelineRequest) String() string { return proto.CompactTextString(m) } +func (*GetPipelineRequest) ProtoMessage() {} +func (*GetPipelineRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *GetPipelineRequest) GetPipelineId() string { + if m != nil { + return m.PipelineId + } + return "" +} + +// A request to list pipelines in a given project. Pipelines can be +// filtered by name using `namePrefix`: all pipelines with names that +// begin with `namePrefix` will be returned. Uses standard pagination: +// `pageSize` indicates how many pipelines to return, and +// `pageToken` comes from a previous ListPipelinesResponse to +// indicate offset. +type ListPipelinesRequest struct { + // Required. The name of the project to search for pipelines. Caller + // must have READ access to this project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Pipelines with names that match this prefix should be + // returned. If unspecified, all pipelines in the project, up to + // `pageSize`, will be returned. + NamePrefix string `protobuf:"bytes,2,opt,name=name_prefix,json=namePrefix" json:"name_prefix,omitempty"` + // Number of pipelines to return at once. Defaults to 256, and max + // is 2048. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Token to use to indicate where to start getting results. + // If unspecified, returns the first page of results. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListPipelinesRequest) Reset() { *m = ListPipelinesRequest{} } +func (m *ListPipelinesRequest) String() string { return proto.CompactTextString(m) } +func (*ListPipelinesRequest) ProtoMessage() {} +func (*ListPipelinesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ListPipelinesRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListPipelinesRequest) GetNamePrefix() string { + if m != nil { + return m.NamePrefix + } + return "" +} + +func (m *ListPipelinesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListPipelinesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response of ListPipelines. Contains at most `pageSize` +// pipelines. If it contains `pageSize` pipelines, and more pipelines +// exist, then `nextPageToken` will be populated and should be +// used as the `pageToken` argument to a subsequent ListPipelines +// request. +type ListPipelinesResponse struct { + // The matched pipelines. + Pipelines []*Pipeline `protobuf:"bytes,1,rep,name=pipelines" json:"pipelines,omitempty"` + // The token to use to get the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListPipelinesResponse) Reset() { *m = ListPipelinesResponse{} } +func (m *ListPipelinesResponse) String() string { return proto.CompactTextString(m) } +func (*ListPipelinesResponse) ProtoMessage() {} +func (*ListPipelinesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ListPipelinesResponse) GetPipelines() []*Pipeline { + if m != nil { + return m.Pipelines + } + return nil +} + +func (m *ListPipelinesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request to delete a saved pipeline by ID. +type DeletePipelineRequest struct { + // Caller must have WRITE access to the project in which this pipeline + // is defined. + PipelineId string `protobuf:"bytes,1,opt,name=pipeline_id,json=pipelineId" json:"pipeline_id,omitempty"` +} + +func (m *DeletePipelineRequest) Reset() { *m = DeletePipelineRequest{} } +func (m *DeletePipelineRequest) String() string { return proto.CompactTextString(m) } +func (*DeletePipelineRequest) ProtoMessage() {} +func (*DeletePipelineRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeletePipelineRequest) GetPipelineId() string { + if m != nil { + return m.PipelineId + } + return "" +} + +// Request to get controller configuation. Should only be used +// by VMs created by the Pipelines Service and not by end users. +type GetControllerConfigRequest struct { + // The operation to retrieve controller configuration for. + OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + ValidationToken uint64 `protobuf:"varint,2,opt,name=validation_token,json=validationToken" json:"validation_token,omitempty"` +} + +func (m *GetControllerConfigRequest) Reset() { *m = GetControllerConfigRequest{} } +func (m *GetControllerConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetControllerConfigRequest) ProtoMessage() {} +func (*GetControllerConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *GetControllerConfigRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *GetControllerConfigRequest) GetValidationToken() uint64 { + if m != nil { + return m.ValidationToken + } + return 0 +} + +// Stores the information that the controller will fetch from the +// server in order to run. Should only be used by VMs created by the +// Pipelines Service and not by end users. +type ControllerConfig struct { + Image string `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` + Cmd string `protobuf:"bytes,2,opt,name=cmd" json:"cmd,omitempty"` + GcsLogPath string `protobuf:"bytes,3,opt,name=gcs_log_path,json=gcsLogPath" json:"gcs_log_path,omitempty"` + MachineType string `protobuf:"bytes,4,opt,name=machine_type,json=machineType" json:"machine_type,omitempty"` + Vars map[string]string `protobuf:"bytes,5,rep,name=vars" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Disks map[string]string `protobuf:"bytes,6,rep,name=disks" json:"disks,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + GcsSources map[string]*ControllerConfig_RepeatedString `protobuf:"bytes,7,rep,name=gcs_sources,json=gcsSources" json:"gcs_sources,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + GcsSinks map[string]*ControllerConfig_RepeatedString `protobuf:"bytes,8,rep,name=gcs_sinks,json=gcsSinks" json:"gcs_sinks,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ControllerConfig) Reset() { *m = ControllerConfig{} } +func (m *ControllerConfig) String() string { return proto.CompactTextString(m) } +func (*ControllerConfig) ProtoMessage() {} +func (*ControllerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ControllerConfig) GetImage() string { + if m != nil { + return m.Image + } + return "" +} + +func (m *ControllerConfig) GetCmd() string { + if m != nil { + return m.Cmd + } + return "" +} + +func (m *ControllerConfig) GetGcsLogPath() string { + if m != nil { + return m.GcsLogPath + } + return "" +} + +func (m *ControllerConfig) GetMachineType() string { + if m != nil { + return m.MachineType + } + return "" +} + +func (m *ControllerConfig) GetVars() map[string]string { + if m != nil { + return m.Vars + } + return nil +} + +func (m *ControllerConfig) GetDisks() map[string]string { + if m != nil { + return m.Disks + } + return nil +} + +func (m *ControllerConfig) GetGcsSources() map[string]*ControllerConfig_RepeatedString { + if m != nil { + return m.GcsSources + } + return nil +} + +func (m *ControllerConfig) GetGcsSinks() map[string]*ControllerConfig_RepeatedString { + if m != nil { + return m.GcsSinks + } + return nil +} + +type ControllerConfig_RepeatedString struct { + Values []string `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` +} + +func (m *ControllerConfig_RepeatedString) Reset() { *m = ControllerConfig_RepeatedString{} } +func (m *ControllerConfig_RepeatedString) String() string { return proto.CompactTextString(m) } +func (*ControllerConfig_RepeatedString) ProtoMessage() {} +func (*ControllerConfig_RepeatedString) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{11, 0} +} + +func (m *ControllerConfig_RepeatedString) GetValues() []string { + if m != nil { + return m.Values + } + return nil +} + +// Stores the list of events and times they occured for major events in job +// execution. +type TimestampEvent struct { + // String indicating the type of event + Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` + // The time this event occured. + Timestamp *google_protobuf4.Timestamp `protobuf:"bytes,2,opt,name=timestamp" json:"timestamp,omitempty"` +} + +func (m *TimestampEvent) Reset() { *m = TimestampEvent{} } +func (m *TimestampEvent) String() string { return proto.CompactTextString(m) } +func (*TimestampEvent) ProtoMessage() {} +func (*TimestampEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *TimestampEvent) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *TimestampEvent) GetTimestamp() *google_protobuf4.Timestamp { + if m != nil { + return m.Timestamp + } + return nil +} + +// Request to set operation status. Should only be used by VMs +// created by the Pipelines Service and not by end users. +type SetOperationStatusRequest struct { + OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + TimestampEvents []*TimestampEvent `protobuf:"bytes,2,rep,name=timestamp_events,json=timestampEvents" json:"timestamp_events,omitempty"` + ErrorCode google_rpc1.Code `protobuf:"varint,3,opt,name=error_code,json=errorCode,enum=google.rpc.Code" json:"error_code,omitempty"` + ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage" json:"error_message,omitempty"` + ValidationToken uint64 `protobuf:"varint,5,opt,name=validation_token,json=validationToken" json:"validation_token,omitempty"` +} + +func (m *SetOperationStatusRequest) Reset() { *m = SetOperationStatusRequest{} } +func (m *SetOperationStatusRequest) String() string { return proto.CompactTextString(m) } +func (*SetOperationStatusRequest) ProtoMessage() {} +func (*SetOperationStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *SetOperationStatusRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *SetOperationStatusRequest) GetTimestampEvents() []*TimestampEvent { + if m != nil { + return m.TimestampEvents + } + return nil +} + +func (m *SetOperationStatusRequest) GetErrorCode() google_rpc1.Code { + if m != nil { + return m.ErrorCode + } + return google_rpc1.Code_OK +} + +func (m *SetOperationStatusRequest) GetErrorMessage() string { + if m != nil { + return m.ErrorMessage + } + return "" +} + +func (m *SetOperationStatusRequest) GetValidationToken() uint64 { + if m != nil { + return m.ValidationToken + } + return 0 +} + +// A Google Cloud Service Account. +type ServiceAccount struct { + // Email address of the service account. Defaults to `default`, + // which uses the compute service account associated with the project. + Email string `protobuf:"bytes,1,opt,name=email" json:"email,omitempty"` + // List of scopes to be enabled for this service account on the VM. + // The following scopes are automatically included: + // + // * https://www.googleapis.com/auth/compute + // * https://www.googleapis.com/auth/devstorage.full_control + // * https://www.googleapis.com/auth/genomics + // * https://www.googleapis.com/auth/logging.write + // * https://www.googleapis.com/auth/monitoring.write + Scopes []string `protobuf:"bytes,2,rep,name=scopes" json:"scopes,omitempty"` +} + +func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } +func (m *ServiceAccount) String() string { return proto.CompactTextString(m) } +func (*ServiceAccount) ProtoMessage() {} +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ServiceAccount) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +func (m *ServiceAccount) GetScopes() []string { + if m != nil { + return m.Scopes + } + return nil +} + +// The logging options for the pipeline run. +type LoggingOptions struct { + // The location in Google Cloud Storage to which the pipeline logs + // will be copied. Can be specified as a fully qualified directory + // path, in which case logs will be output with a unique identifier + // as the filename in that directory, or as a fully specified path, + // which must end in `.log`, in which case that path will be + // used, and the user must ensure that logs are not + // overwritten. Stdout and stderr logs from the run are also + // generated and output as `-stdout.log` and `-stderr.log`. + GcsPath string `protobuf:"bytes,1,opt,name=gcs_path,json=gcsPath" json:"gcs_path,omitempty"` +} + +func (m *LoggingOptions) Reset() { *m = LoggingOptions{} } +func (m *LoggingOptions) String() string { return proto.CompactTextString(m) } +func (*LoggingOptions) ProtoMessage() {} +func (*LoggingOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *LoggingOptions) GetGcsPath() string { + if m != nil { + return m.GcsPath + } + return "" +} + +// The system resources for the pipeline run. +type PipelineResources struct { + // The minimum number of cores to use. Defaults to 1. + MinimumCpuCores int32 `protobuf:"varint,1,opt,name=minimum_cpu_cores,json=minimumCpuCores" json:"minimum_cpu_cores,omitempty"` + // Whether to use preemptible VMs. Defaults to `false`. In order to use this, + // must be true for both create time and run time. Cannot be true at run time + // if false at create time. + Preemptible bool `protobuf:"varint,2,opt,name=preemptible" json:"preemptible,omitempty"` + // The minimum amount of RAM to use. Defaults to 3.75 (GB) + MinimumRamGb float64 `protobuf:"fixed64,3,opt,name=minimum_ram_gb,json=minimumRamGb" json:"minimum_ram_gb,omitempty"` + // Disks to attach. + Disks []*PipelineResources_Disk `protobuf:"bytes,4,rep,name=disks" json:"disks,omitempty"` + // List of Google Compute Engine availability zones to which resource + // creation will restricted. If empty, any zone may be chosen. + Zones []string `protobuf:"bytes,5,rep,name=zones" json:"zones,omitempty"` + // The size of the boot disk. Defaults to 10 (GB). + BootDiskSizeGb int32 `protobuf:"varint,6,opt,name=boot_disk_size_gb,json=bootDiskSizeGb" json:"boot_disk_size_gb,omitempty"` + // Whether to assign an external IP to the instance. This is an experimental + // feature that may go away. Defaults to false. + // Corresponds to `--no_address` flag for [gcloud compute instances create] + // (https://cloud.google.com/sdk/gcloud/reference/compute/instances/create). + // In order to use this, must be true for both create time and run time. + // Cannot be true at run time if false at create time. If you need to ssh into + // a private IP VM for debugging, you can ssh to a public VM and then ssh into + // the private VM's Internal IP. If noAddress is set, this pipeline run may + // only load docker images from Google Container Registry and not Docker Hub. + // ** Note: To use this option, your project must be in Google Access for + // Private IPs Early Access Program.** + NoAddress bool `protobuf:"varint,7,opt,name=no_address,json=noAddress" json:"no_address,omitempty"` +} + +func (m *PipelineResources) Reset() { *m = PipelineResources{} } +func (m *PipelineResources) String() string { return proto.CompactTextString(m) } +func (*PipelineResources) ProtoMessage() {} +func (*PipelineResources) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *PipelineResources) GetMinimumCpuCores() int32 { + if m != nil { + return m.MinimumCpuCores + } + return 0 +} + +func (m *PipelineResources) GetPreemptible() bool { + if m != nil { + return m.Preemptible + } + return false +} + +func (m *PipelineResources) GetMinimumRamGb() float64 { + if m != nil { + return m.MinimumRamGb + } + return 0 +} + +func (m *PipelineResources) GetDisks() []*PipelineResources_Disk { + if m != nil { + return m.Disks + } + return nil +} + +func (m *PipelineResources) GetZones() []string { + if m != nil { + return m.Zones + } + return nil +} + +func (m *PipelineResources) GetBootDiskSizeGb() int32 { + if m != nil { + return m.BootDiskSizeGb + } + return 0 +} + +func (m *PipelineResources) GetNoAddress() bool { + if m != nil { + return m.NoAddress + } + return false +} + +// A Google Compute Engine disk resource specification. +type PipelineResources_Disk struct { + // Required. The name of the disk that can be used in the pipeline + // parameters. Must be 1 - 63 characters. + // The name "boot" is reserved for system use. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The type of the disk to create. + Type PipelineResources_Disk_Type `protobuf:"varint,2,opt,name=type,enum=google.genomics.v1alpha2.PipelineResources_Disk_Type" json:"type,omitempty"` + // The size of the disk. Defaults to 500 (GB). + // This field is not applicable for local SSD. + SizeGb int32 `protobuf:"varint,3,opt,name=size_gb,json=sizeGb" json:"size_gb,omitempty"` + // The full or partial URL of the persistent disk to attach. See + // https://cloud.google.com/compute/docs/reference/latest/instances#resource + // and + // https://cloud.google.com/compute/docs/disks/persistent-disks#snapshots + // for more details. + Source string `protobuf:"bytes,4,opt,name=source" json:"source,omitempty"` + // Deprecated. Disks created by the Pipelines API will be deleted at the end + // of the pipeline run, regardless of what this field is set to. + AutoDelete bool `protobuf:"varint,6,opt,name=auto_delete,json=autoDelete" json:"auto_delete,omitempty"` + // Required at create time and cannot be overridden at run time. + // Specifies the path in the docker container where files on + // this disk should be located. For example, if `mountPoint` + // is `/mnt/disk`, and the parameter has `localPath` + // `inputs/file.txt`, the docker container can access the data at + // `/mnt/disk/inputs/file.txt`. + MountPoint string `protobuf:"bytes,8,opt,name=mount_point,json=mountPoint" json:"mount_point,omitempty"` +} + +func (m *PipelineResources_Disk) Reset() { *m = PipelineResources_Disk{} } +func (m *PipelineResources_Disk) String() string { return proto.CompactTextString(m) } +func (*PipelineResources_Disk) ProtoMessage() {} +func (*PipelineResources_Disk) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16, 0} } + +func (m *PipelineResources_Disk) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *PipelineResources_Disk) GetType() PipelineResources_Disk_Type { + if m != nil { + return m.Type + } + return PipelineResources_Disk_TYPE_UNSPECIFIED +} + +func (m *PipelineResources_Disk) GetSizeGb() int32 { + if m != nil { + return m.SizeGb + } + return 0 +} + +func (m *PipelineResources_Disk) GetSource() string { + if m != nil { + return m.Source + } + return "" +} + +func (m *PipelineResources_Disk) GetAutoDelete() bool { + if m != nil { + return m.AutoDelete + } + return false +} + +func (m *PipelineResources_Disk) GetMountPoint() string { + if m != nil { + return m.MountPoint + } + return "" +} + +// Parameters facilitate setting and delivering data into the +// pipeline's execution environment. They are defined at create time, +// with optional defaults, and can be overridden at run time. +// +// If `localCopy` is unset, then the parameter specifies a string that +// is passed as-is into the pipeline, as the value of the environment +// variable with the given name. A default value can be optionally +// specified at create time. The default can be overridden at run time +// using the inputs map. If no default is given, a value must be +// supplied at runtime. +// +// If `localCopy` is defined, then the parameter specifies a data +// source or sink, both in Google Cloud Storage and on the Docker container +// where the pipeline computation is run. The [service account associated with +// the Pipeline][google.genomics.v1alpha2.RunPipelineArgs.service_account] (by +// default the project's Compute Engine service account) must have access to the +// Google Cloud Storage paths. +// +// At run time, the Google Cloud Storage paths can be overridden if a default +// was provided at create time, or must be set otherwise. The pipeline runner +// should add a key/value pair to either the inputs or outputs map. The +// indicated data copies will be carried out before/after pipeline execution, +// just as if the corresponding arguments were provided to `gsutil cp`. +// +// For example: Given the following `PipelineParameter`, specified +// in the `inputParameters` list: +// +// ``` +// {name: "input_file", localCopy: {path: "file.txt", disk: "pd1"}} +// ``` +// +// where `disk` is defined in the `PipelineResources` object as: +// +// ``` +// {name: "pd1", mountPoint: "/mnt/disk/"} +// ``` +// +// We create a disk named `pd1`, mount it on the host VM, and map +// `/mnt/pd1` to `/mnt/disk` in the docker container. At +// runtime, an entry for `input_file` would be required in the inputs +// map, such as: +// +// ``` +// inputs["input_file"] = "gs://my-bucket/bar.txt" +// ``` +// +// This would generate the following gsutil call: +// +// ``` +// gsutil cp gs://my-bucket/bar.txt /mnt/pd1/file.txt +// ``` +// +// The file `/mnt/pd1/file.txt` maps to `/mnt/disk/file.txt` in the +// Docker container. Acceptable paths are: +// +// <table> +// <thead> +// <tr><th>Google Cloud storage path</th><th>Local path</th></tr> +// </thead> +// <tbody> +// <tr><td>file</td><td>file</td></tr> +// <tr><td>glob</td><td>directory</td></tr> +// </tbody> +// </table> +// +// For outputs, the direction of the copy is reversed: +// +// ``` +// gsutil cp /mnt/disk/file.txt gs://my-bucket/bar.txt +// ``` +// +// Acceptable paths are: +// +// <table> +// <thead> +// <tr><th>Local path</th><th>Google Cloud Storage path</th></tr> +// </thead> +// <tbody> +// <tr><td>file</td><td>file</td></tr> +// <tr> +// <td>file</td> +// <td>directory - directory must already exist</td> +// </tr> +// <tr> +// <td>glob</td> +// <td>directory - directory will be created if it doesn't exist</td></tr> +// </tbody> +// </table> +// +// One restriction due to docker limitations, is that for outputs that are found +// on the boot disk, the local path cannot be a glob and must be a file. +type PipelineParameter struct { + // Required. Name of the parameter - the pipeline runner uses this string + // as the key to the input and output maps in RunPipeline. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Human-readable description. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // The default value for this parameter. Can be overridden at runtime. + // If `localCopy` is present, then this must be a Google Cloud Storage path + // beginning with `gs://`. + DefaultValue string `protobuf:"bytes,5,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` + // If present, this parameter is marked for copying to and from the VM. + // `LocalCopy` indicates where on the VM the file should be. The value + // given to this parameter (either at runtime or using `defaultValue`) + // must be the remote path where the file should be. + LocalCopy *PipelineParameter_LocalCopy `protobuf:"bytes,6,opt,name=local_copy,json=localCopy" json:"local_copy,omitempty"` +} + +func (m *PipelineParameter) Reset() { *m = PipelineParameter{} } +func (m *PipelineParameter) String() string { return proto.CompactTextString(m) } +func (*PipelineParameter) ProtoMessage() {} +func (*PipelineParameter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *PipelineParameter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *PipelineParameter) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *PipelineParameter) GetDefaultValue() string { + if m != nil { + return m.DefaultValue + } + return "" +} + +func (m *PipelineParameter) GetLocalCopy() *PipelineParameter_LocalCopy { + if m != nil { + return m.LocalCopy + } + return nil +} + +// LocalCopy defines how a remote file should be copied to and from the VM. +type PipelineParameter_LocalCopy struct { + // Required. The path within the user's docker container where + // this input should be localized to and from, relative to the specified + // disk's mount point. For example: file.txt, + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + // Required. The name of the disk where this parameter is + // located. Can be the name of one of the disks specified in the + // Resources field, or "boot", which represents the Docker + // instance's boot disk and has a mount point of `/`. + Disk string `protobuf:"bytes,2,opt,name=disk" json:"disk,omitempty"` +} + +func (m *PipelineParameter_LocalCopy) Reset() { *m = PipelineParameter_LocalCopy{} } +func (m *PipelineParameter_LocalCopy) String() string { return proto.CompactTextString(m) } +func (*PipelineParameter_LocalCopy) ProtoMessage() {} +func (*PipelineParameter_LocalCopy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17, 0} } + +func (m *PipelineParameter_LocalCopy) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *PipelineParameter_LocalCopy) GetDisk() string { + if m != nil { + return m.Disk + } + return "" +} + +// The Docker execuctor specification. +type DockerExecutor struct { + // Required. Image name from either Docker Hub or Google Container Registry. + // Users that run pipelines must have READ access to the image. + ImageName string `protobuf:"bytes,1,opt,name=image_name,json=imageName" json:"image_name,omitempty"` + // Required. The command or newline delimited script to run. The command + // string will be executed within a bash shell. + // + // If the command exits with a non-zero exit code, output parameter + // de-localization will be skipped and the pipeline operation's + // [`error`][google.longrunning.Operation.error] field will be populated. + // + // Maximum command string length is 16384. + Cmd string `protobuf:"bytes,2,opt,name=cmd" json:"cmd,omitempty"` +} + +func (m *DockerExecutor) Reset() { *m = DockerExecutor{} } +func (m *DockerExecutor) String() string { return proto.CompactTextString(m) } +func (*DockerExecutor) ProtoMessage() {} +func (*DockerExecutor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *DockerExecutor) GetImageName() string { + if m != nil { + return m.ImageName + } + return "" +} + +func (m *DockerExecutor) GetCmd() string { + if m != nil { + return m.Cmd + } + return "" +} + +func init() { + proto.RegisterType((*ComputeEngine)(nil), "google.genomics.v1alpha2.ComputeEngine") + proto.RegisterType((*RuntimeMetadata)(nil), "google.genomics.v1alpha2.RuntimeMetadata") + proto.RegisterType((*Pipeline)(nil), "google.genomics.v1alpha2.Pipeline") + proto.RegisterType((*CreatePipelineRequest)(nil), "google.genomics.v1alpha2.CreatePipelineRequest") + proto.RegisterType((*RunPipelineArgs)(nil), "google.genomics.v1alpha2.RunPipelineArgs") + proto.RegisterType((*RunPipelineRequest)(nil), "google.genomics.v1alpha2.RunPipelineRequest") + proto.RegisterType((*GetPipelineRequest)(nil), "google.genomics.v1alpha2.GetPipelineRequest") + proto.RegisterType((*ListPipelinesRequest)(nil), "google.genomics.v1alpha2.ListPipelinesRequest") + proto.RegisterType((*ListPipelinesResponse)(nil), "google.genomics.v1alpha2.ListPipelinesResponse") + proto.RegisterType((*DeletePipelineRequest)(nil), "google.genomics.v1alpha2.DeletePipelineRequest") + proto.RegisterType((*GetControllerConfigRequest)(nil), "google.genomics.v1alpha2.GetControllerConfigRequest") + proto.RegisterType((*ControllerConfig)(nil), "google.genomics.v1alpha2.ControllerConfig") + proto.RegisterType((*ControllerConfig_RepeatedString)(nil), "google.genomics.v1alpha2.ControllerConfig.RepeatedString") + proto.RegisterType((*TimestampEvent)(nil), "google.genomics.v1alpha2.TimestampEvent") + proto.RegisterType((*SetOperationStatusRequest)(nil), "google.genomics.v1alpha2.SetOperationStatusRequest") + proto.RegisterType((*ServiceAccount)(nil), "google.genomics.v1alpha2.ServiceAccount") + proto.RegisterType((*LoggingOptions)(nil), "google.genomics.v1alpha2.LoggingOptions") + proto.RegisterType((*PipelineResources)(nil), "google.genomics.v1alpha2.PipelineResources") + proto.RegisterType((*PipelineResources_Disk)(nil), "google.genomics.v1alpha2.PipelineResources.Disk") + proto.RegisterType((*PipelineParameter)(nil), "google.genomics.v1alpha2.PipelineParameter") + proto.RegisterType((*PipelineParameter_LocalCopy)(nil), "google.genomics.v1alpha2.PipelineParameter.LocalCopy") + proto.RegisterType((*DockerExecutor)(nil), "google.genomics.v1alpha2.DockerExecutor") + proto.RegisterEnum("google.genomics.v1alpha2.PipelineResources_Disk_Type", PipelineResources_Disk_Type_name, PipelineResources_Disk_Type_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for PipelinesV1Alpha2 service + +type PipelinesV1Alpha2Client interface { + // Creates a pipeline that can be run later. Create takes a Pipeline that + // has all fields other than `pipelineId` populated, and then returns + // the same pipeline with `pipelineId` populated. This id can be used + // to run the pipeline. + // + // Caller must have WRITE permission to the project. + CreatePipeline(ctx context.Context, in *CreatePipelineRequest, opts ...grpc.CallOption) (*Pipeline, error) + // Runs a pipeline. If `pipelineId` is specified in the request, then + // run a saved pipeline. If `ephemeralPipeline` is specified, then run + // that pipeline once without saving a copy. + // + // The caller must have READ permission to the project where the pipeline + // is stored and WRITE permission to the project where the pipeline will be + // run, as VMs will be created and storage will be used. + RunPipeline(ctx context.Context, in *RunPipelineRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Retrieves a pipeline based on ID. + // + // Caller must have READ permission to the project. + GetPipeline(ctx context.Context, in *GetPipelineRequest, opts ...grpc.CallOption) (*Pipeline, error) + // Lists pipelines. + // + // Caller must have READ permission to the project. + ListPipelines(ctx context.Context, in *ListPipelinesRequest, opts ...grpc.CallOption) (*ListPipelinesResponse, error) + // Deletes a pipeline based on ID. + // + // Caller must have WRITE permission to the project. + DeletePipeline(ctx context.Context, in *DeletePipelineRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Gets controller configuration information. Should only be called + // by VMs created by the Pipelines Service and not by end users. + GetControllerConfig(ctx context.Context, in *GetControllerConfigRequest, opts ...grpc.CallOption) (*ControllerConfig, error) + // Sets status of a given operation. Any new timestamps (as determined by + // description) are appended to TimestampEvents. Should only be called by VMs + // created by the Pipelines Service and not by end users. + SetOperationStatus(ctx context.Context, in *SetOperationStatusRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type pipelinesV1Alpha2Client struct { + cc *grpc.ClientConn +} + +func NewPipelinesV1Alpha2Client(cc *grpc.ClientConn) PipelinesV1Alpha2Client { + return &pipelinesV1Alpha2Client{cc} +} + +func (c *pipelinesV1Alpha2Client) CreatePipeline(ctx context.Context, in *CreatePipelineRequest, opts ...grpc.CallOption) (*Pipeline, error) { + out := new(Pipeline) + err := grpc.Invoke(ctx, "/google.genomics.v1alpha2.PipelinesV1Alpha2/CreatePipeline", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *pipelinesV1Alpha2Client) RunPipeline(ctx context.Context, in *RunPipelineRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.genomics.v1alpha2.PipelinesV1Alpha2/RunPipeline", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *pipelinesV1Alpha2Client) GetPipeline(ctx context.Context, in *GetPipelineRequest, opts ...grpc.CallOption) (*Pipeline, error) { + out := new(Pipeline) + err := grpc.Invoke(ctx, "/google.genomics.v1alpha2.PipelinesV1Alpha2/GetPipeline", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *pipelinesV1Alpha2Client) ListPipelines(ctx context.Context, in *ListPipelinesRequest, opts ...grpc.CallOption) (*ListPipelinesResponse, error) { + out := new(ListPipelinesResponse) + err := grpc.Invoke(ctx, "/google.genomics.v1alpha2.PipelinesV1Alpha2/ListPipelines", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *pipelinesV1Alpha2Client) DeletePipeline(ctx context.Context, in *DeletePipelineRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1alpha2.PipelinesV1Alpha2/DeletePipeline", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *pipelinesV1Alpha2Client) GetControllerConfig(ctx context.Context, in *GetControllerConfigRequest, opts ...grpc.CallOption) (*ControllerConfig, error) { + out := new(ControllerConfig) + err := grpc.Invoke(ctx, "/google.genomics.v1alpha2.PipelinesV1Alpha2/GetControllerConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *pipelinesV1Alpha2Client) SetOperationStatus(ctx context.Context, in *SetOperationStatusRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.genomics.v1alpha2.PipelinesV1Alpha2/SetOperationStatus", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for PipelinesV1Alpha2 service + +type PipelinesV1Alpha2Server interface { + // Creates a pipeline that can be run later. Create takes a Pipeline that + // has all fields other than `pipelineId` populated, and then returns + // the same pipeline with `pipelineId` populated. This id can be used + // to run the pipeline. + // + // Caller must have WRITE permission to the project. + CreatePipeline(context.Context, *CreatePipelineRequest) (*Pipeline, error) + // Runs a pipeline. If `pipelineId` is specified in the request, then + // run a saved pipeline. If `ephemeralPipeline` is specified, then run + // that pipeline once without saving a copy. + // + // The caller must have READ permission to the project where the pipeline + // is stored and WRITE permission to the project where the pipeline will be + // run, as VMs will be created and storage will be used. + RunPipeline(context.Context, *RunPipelineRequest) (*google_longrunning.Operation, error) + // Retrieves a pipeline based on ID. + // + // Caller must have READ permission to the project. + GetPipeline(context.Context, *GetPipelineRequest) (*Pipeline, error) + // Lists pipelines. + // + // Caller must have READ permission to the project. + ListPipelines(context.Context, *ListPipelinesRequest) (*ListPipelinesResponse, error) + // Deletes a pipeline based on ID. + // + // Caller must have WRITE permission to the project. + DeletePipeline(context.Context, *DeletePipelineRequest) (*google_protobuf2.Empty, error) + // Gets controller configuration information. Should only be called + // by VMs created by the Pipelines Service and not by end users. + GetControllerConfig(context.Context, *GetControllerConfigRequest) (*ControllerConfig, error) + // Sets status of a given operation. Any new timestamps (as determined by + // description) are appended to TimestampEvents. Should only be called by VMs + // created by the Pipelines Service and not by end users. + SetOperationStatus(context.Context, *SetOperationStatusRequest) (*google_protobuf2.Empty, error) +} + +func RegisterPipelinesV1Alpha2Server(s *grpc.Server, srv PipelinesV1Alpha2Server) { + s.RegisterService(&_PipelinesV1Alpha2_serviceDesc, srv) +} + +func _PipelinesV1Alpha2_CreatePipeline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreatePipelineRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PipelinesV1Alpha2Server).CreatePipeline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1alpha2.PipelinesV1Alpha2/CreatePipeline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PipelinesV1Alpha2Server).CreatePipeline(ctx, req.(*CreatePipelineRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _PipelinesV1Alpha2_RunPipeline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RunPipelineRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PipelinesV1Alpha2Server).RunPipeline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1alpha2.PipelinesV1Alpha2/RunPipeline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PipelinesV1Alpha2Server).RunPipeline(ctx, req.(*RunPipelineRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _PipelinesV1Alpha2_GetPipeline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPipelineRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PipelinesV1Alpha2Server).GetPipeline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1alpha2.PipelinesV1Alpha2/GetPipeline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PipelinesV1Alpha2Server).GetPipeline(ctx, req.(*GetPipelineRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _PipelinesV1Alpha2_ListPipelines_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListPipelinesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PipelinesV1Alpha2Server).ListPipelines(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1alpha2.PipelinesV1Alpha2/ListPipelines", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PipelinesV1Alpha2Server).ListPipelines(ctx, req.(*ListPipelinesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _PipelinesV1Alpha2_DeletePipeline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePipelineRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PipelinesV1Alpha2Server).DeletePipeline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1alpha2.PipelinesV1Alpha2/DeletePipeline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PipelinesV1Alpha2Server).DeletePipeline(ctx, req.(*DeletePipelineRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _PipelinesV1Alpha2_GetControllerConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetControllerConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PipelinesV1Alpha2Server).GetControllerConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1alpha2.PipelinesV1Alpha2/GetControllerConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PipelinesV1Alpha2Server).GetControllerConfig(ctx, req.(*GetControllerConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _PipelinesV1Alpha2_SetOperationStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetOperationStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PipelinesV1Alpha2Server).SetOperationStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.genomics.v1alpha2.PipelinesV1Alpha2/SetOperationStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PipelinesV1Alpha2Server).SetOperationStatus(ctx, req.(*SetOperationStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _PipelinesV1Alpha2_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.genomics.v1alpha2.PipelinesV1Alpha2", + HandlerType: (*PipelinesV1Alpha2Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreatePipeline", + Handler: _PipelinesV1Alpha2_CreatePipeline_Handler, + }, + { + MethodName: "RunPipeline", + Handler: _PipelinesV1Alpha2_RunPipeline_Handler, + }, + { + MethodName: "GetPipeline", + Handler: _PipelinesV1Alpha2_GetPipeline_Handler, + }, + { + MethodName: "ListPipelines", + Handler: _PipelinesV1Alpha2_ListPipelines_Handler, + }, + { + MethodName: "DeletePipeline", + Handler: _PipelinesV1Alpha2_DeletePipeline_Handler, + }, + { + MethodName: "GetControllerConfig", + Handler: _PipelinesV1Alpha2_GetControllerConfig_Handler, + }, + { + MethodName: "SetOperationStatus", + Handler: _PipelinesV1Alpha2_SetOperationStatus_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/genomics/v1alpha2/pipelines.proto", +} + +func init() { proto.RegisterFile("google/genomics/v1alpha2/pipelines.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2065 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4d, 0x73, 0xdb, 0xc8, + 0xd1, 0x36, 0x28, 0x4a, 0x22, 0x9a, 0x12, 0x45, 0xcf, 0xda, 0x6b, 0x9a, 0xf6, 0xbe, 0xb6, 0xe1, + 0x37, 0xbb, 0xb2, 0x9c, 0x22, 0x63, 0x79, 0x9d, 0xc8, 0x4a, 0xd5, 0xd6, 0x4a, 0x14, 0x2d, 0xb1, + 0x22, 0x4b, 0x0c, 0xa8, 0x55, 0xbe, 0x0e, 0xa8, 0x11, 0x38, 0x82, 0xb0, 0x02, 0x30, 0x08, 0x06, + 0x50, 0x59, 0x4e, 0x25, 0x55, 0x49, 0xe5, 0x90, 0xda, 0x4a, 0x2e, 0xc9, 0xfe, 0x88, 0x5c, 0x72, + 0xcc, 0xcf, 0xc8, 0x29, 0xa7, 0x9c, 0x72, 0xc9, 0x21, 0x3f, 0x21, 0xb9, 0xa5, 0x66, 0x06, 0x03, + 0x82, 0x1f, 0x92, 0xc8, 0xaa, 0x54, 0x6e, 0x33, 0x3d, 0xdd, 0x0f, 0x9e, 0xe9, 0xe9, 0xe9, 0xe9, + 0x06, 0xac, 0x3a, 0x94, 0x3a, 0x1e, 0x69, 0x3a, 0x24, 0xa0, 0xbe, 0x6b, 0xb3, 0xe6, 0xc5, 0x0b, + 0xec, 0x85, 0x67, 0x78, 0xbd, 0x19, 0xba, 0x21, 0xf1, 0xdc, 0x80, 0xb0, 0x46, 0x18, 0xd1, 0x98, + 0xa2, 0x9a, 0xd4, 0x6c, 0x28, 0xcd, 0x86, 0xd2, 0xac, 0x3f, 0x4c, 0x31, 0x70, 0xe8, 0x36, 0x71, + 0x10, 0xd0, 0x18, 0xc7, 0x2e, 0x0d, 0x52, 0xbb, 0xfa, 0xd3, 0x74, 0xd5, 0xa3, 0x81, 0x13, 0x25, + 0x41, 0xe0, 0x06, 0x4e, 0x93, 0x86, 0x24, 0x1a, 0x52, 0xfa, 0xbf, 0x54, 0x49, 0xcc, 0x4e, 0x92, + 0xd3, 0x66, 0x3f, 0x91, 0x0a, 0xe9, 0xfa, 0x83, 0xd1, 0x75, 0xe2, 0x87, 0xf1, 0x65, 0xba, 0xf8, + 0x68, 0x74, 0x31, 0x76, 0x7d, 0xc2, 0x62, 0xec, 0x87, 0xa9, 0xc2, 0xdd, 0x54, 0x21, 0x0a, 0xed, + 0xa6, 0x4d, 0xfb, 0x44, 0x8a, 0x8d, 0xaf, 0x34, 0x58, 0x6e, 0x51, 0x3f, 0x4c, 0x62, 0xd2, 0x0e, + 0x1c, 0x37, 0x20, 0xe8, 0x29, 0x2c, 0xbb, 0x01, 0x8b, 0x71, 0x60, 0x13, 0x2b, 0xc0, 0x3e, 0xa9, + 0x69, 0x8f, 0xb5, 0x55, 0xdd, 0x5c, 0x52, 0xc2, 0x03, 0xec, 0x13, 0x84, 0xa0, 0xf8, 0x9e, 0x06, + 0xa4, 0x56, 0x10, 0x6b, 0x62, 0x8c, 0x9e, 0xc0, 0x92, 0x8f, 0xed, 0x33, 0x37, 0x20, 0x56, 0x7c, + 0x19, 0x92, 0xda, 0x9c, 0x58, 0x2b, 0xa7, 0xb2, 0xa3, 0xcb, 0x90, 0xa0, 0x8f, 0x00, 0xfa, 0x2e, + 0x3b, 0x17, 0xb8, 0xac, 0x56, 0x7c, 0x3c, 0xb7, 0xaa, 0x9b, 0x3a, 0x97, 0x70, 0x50, 0x66, 0x60, + 0x58, 0x31, 0x93, 0x80, 0x33, 0x7f, 0x4b, 0x62, 0xdc, 0xc7, 0x31, 0x46, 0x07, 0x50, 0xb1, 0x25, + 0x3d, 0x8b, 0x08, 0x7e, 0x82, 0x4e, 0x79, 0xfd, 0x93, 0xc6, 0x55, 0x47, 0xd1, 0x18, 0xda, 0x8e, + 0xb9, 0x6c, 0xe7, 0xa7, 0xc6, 0x5f, 0xe6, 0xa0, 0xd4, 0x4d, 0x4f, 0x95, 0xd3, 0x09, 0x23, 0xfa, + 0x25, 0xb1, 0x63, 0xcb, 0xed, 0xa7, 0xfb, 0xd4, 0x53, 0x49, 0xa7, 0xcf, 0x37, 0x29, 0x1c, 0x90, + 0x6e, 0x92, 0x8f, 0xd1, 0x63, 0x28, 0xf7, 0x09, 0xb3, 0x23, 0x37, 0xe4, 0x27, 0xa3, 0xf6, 0x98, + 0x13, 0xa1, 0x63, 0xa8, 0xba, 0x41, 0x98, 0xc4, 0x56, 0x88, 0x23, 0xec, 0x93, 0x98, 0x44, 0xac, + 0x56, 0x7a, 0x3c, 0xb7, 0x5a, 0x5e, 0x7f, 0x7e, 0x35, 0x67, 0x45, 0xa9, 0xab, 0x6c, 0xcc, 0x15, + 0x01, 0x92, 0xcd, 0x19, 0xfa, 0x21, 0xdc, 0xa6, 0x49, 0x3c, 0x02, 0xac, 0xcf, 0x0e, 0x5c, 0x95, + 0x28, 0x39, 0xe4, 0x6d, 0x58, 0xe8, 0x53, 0xfb, 0x9c, 0x44, 0xb5, 0x79, 0xe1, 0xdb, 0xd5, 0xab, + 0xe1, 0x76, 0x84, 0x5e, 0xfb, 0x1d, 0xb1, 0x93, 0x98, 0x46, 0x7b, 0xb7, 0xcc, 0xd4, 0x12, 0x75, + 0x40, 0x8f, 0x08, 0xa3, 0x49, 0x64, 0x13, 0x56, 0x5b, 0x10, 0x30, 0x53, 0xb0, 0x32, 0x95, 0x89, + 0x39, 0xb0, 0x46, 0x8f, 0xa0, 0xac, 0xee, 0x1d, 0x3f, 0x96, 0x45, 0xe1, 0x62, 0x50, 0xa2, 0x4e, + 0x7f, 0x1b, 0xa0, 0x44, 0x52, 0x06, 0xc6, 0x0f, 0xe0, 0x6e, 0x2b, 0x22, 0x38, 0x26, 0x03, 0xc8, + 0x9f, 0x26, 0x84, 0xc5, 0xe8, 0x33, 0x28, 0x29, 0x93, 0x34, 0x64, 0x8c, 0x29, 0xf8, 0x64, 0x36, + 0xc6, 0x9f, 0x17, 0x44, 0x30, 0xaa, 0x95, 0xad, 0xc8, 0x61, 0x37, 0xc5, 0xcb, 0x5b, 0x58, 0x10, + 0x87, 0xc6, 0x6a, 0x05, 0x71, 0x2c, 0xaf, 0xae, 0xfe, 0xe0, 0x08, 0x72, 0xa3, 0x23, 0xec, 0xda, + 0x41, 0x1c, 0x5d, 0x9a, 0x29, 0x08, 0xea, 0xc2, 0xa2, 0x3c, 0x2a, 0x56, 0x9b, 0x13, 0x78, 0xdf, + 0x9e, 0x1e, 0xef, 0x50, 0x1a, 0x4a, 0x40, 0x05, 0x83, 0xbe, 0x0f, 0x2b, 0x8c, 0x44, 0x17, 0xae, + 0x4d, 0x2c, 0x6c, 0xdb, 0x34, 0x09, 0xe2, 0x5a, 0xf1, 0xa6, 0x13, 0xef, 0x49, 0x83, 0x2d, 0xa9, + 0x6f, 0x56, 0xd8, 0xd0, 0x1c, 0x3d, 0x00, 0xdd, 0xf6, 0x5c, 0x12, 0x08, 0x8f, 0xcc, 0x0b, 0x8f, + 0x94, 0xa4, 0xa0, 0xd3, 0xff, 0x6f, 0x06, 0xc5, 0x36, 0x2c, 0x7a, 0xd4, 0x71, 0xdc, 0xc0, 0x11, + 0x01, 0x71, 0x2d, 0xe5, 0x7d, 0xa9, 0x78, 0x28, 0xee, 0x23, 0x33, 0x95, 0x21, 0x3a, 0x81, 0x27, + 0xe7, 0x84, 0x84, 0xd6, 0x85, 0x6f, 0x61, 0xcf, 0xbd, 0x20, 0x16, 0x0d, 0xac, 0x53, 0xec, 0x7a, + 0x49, 0x44, 0x2c, 0x95, 0x6b, 0x6b, 0x25, 0x81, 0x7e, 0x5f, 0xa1, 0xab, 0x7c, 0xda, 0xd8, 0x49, + 0x15, 0xcc, 0x87, 0x1c, 0xe3, 0xd8, 0xdf, 0xe2, 0x08, 0x87, 0xc1, 0x1b, 0x69, 0xaf, 0x56, 0x79, + 0x0c, 0x78, 0xf8, 0x84, 0x78, 0xea, 0x6a, 0xce, 0x10, 0x03, 0xfb, 0xc2, 0x2e, 0x8d, 0x01, 0x09, + 0x52, 0x7f, 0x0d, 0xe5, 0x5c, 0x68, 0xa0, 0x2a, 0xcc, 0x9d, 0x93, 0xcb, 0x34, 0xf2, 0xf8, 0x10, + 0xdd, 0x81, 0xf9, 0x0b, 0xec, 0x25, 0x2a, 0x49, 0xc9, 0xc9, 0x66, 0x61, 0x43, 0xab, 0x6f, 0xc2, + 0x52, 0x3e, 0x0a, 0x66, 0xb2, 0x7d, 0x0d, 0xe5, 0x1c, 0x9b, 0x59, 0x4c, 0x8d, 0x7f, 0x6a, 0x80, + 0x72, 0x3b, 0x53, 0xd7, 0xf1, 0xc9, 0xf0, 0xa5, 0x16, 0x50, 0x7b, 0xb7, 0xf2, 0xd7, 0x1a, 0xf5, + 0x00, 0x91, 0xf0, 0x8c, 0xf8, 0x24, 0xc2, 0x9e, 0x95, 0xdd, 0xdd, 0xc2, 0xb4, 0x77, 0x77, 0xef, + 0x96, 0x79, 0x3b, 0xb3, 0xcf, 0x52, 0xfc, 0x01, 0x2c, 0x67, 0xdf, 0xc5, 0x91, 0xc3, 0x44, 0xc6, + 0x2e, 0xaf, 0x3f, 0x9b, 0xfa, 0x58, 0xcc, 0xa5, 0x30, 0x37, 0xe3, 0xb9, 0x27, 0x4b, 0x11, 0xaf, + 0x00, 0xed, 0x92, 0x78, 0x74, 0xa7, 0x8f, 0x26, 0xec, 0x34, 0xbf, 0x4f, 0xe3, 0xf7, 0x1a, 0xdc, + 0xd9, 0x77, 0x59, 0x66, 0xc8, 0x94, 0xe5, 0x0d, 0xe9, 0xe5, 0x11, 0x94, 0xf9, 0x13, 0x64, 0x85, + 0x11, 0x39, 0x75, 0xdf, 0xa5, 0x9e, 0x07, 0x2e, 0xea, 0x0a, 0x09, 0xbf, 0x8b, 0x21, 0x76, 0x88, + 0xc5, 0xdc, 0xf7, 0xf2, 0xf5, 0x9d, 0x37, 0x4b, 0x5c, 0xd0, 0x73, 0xdf, 0xcb, 0xb7, 0x8e, 0x2f, + 0xc6, 0xf4, 0x9c, 0x04, 0xe2, 0xda, 0x73, 0x70, 0xec, 0x90, 0x23, 0x2e, 0x30, 0x7e, 0xa9, 0xc1, + 0xdd, 0x11, 0x52, 0x2c, 0xa4, 0x01, 0x23, 0xe8, 0x73, 0xd0, 0xb3, 0x32, 0xa8, 0xa6, 0x89, 0xa0, + 0x9e, 0x26, 0x93, 0x0e, 0x8c, 0xd0, 0xc7, 0xb0, 0x12, 0x90, 0x77, 0xfc, 0xdd, 0xca, 0xbe, 0x2f, + 0xc9, 0x2f, 0x73, 0x71, 0x37, 0xe3, 0xb0, 0x01, 0x77, 0x77, 0x88, 0x47, 0xc6, 0x73, 0xf9, 0x8d, + 0x2e, 0xfd, 0x12, 0xea, 0xbb, 0x24, 0x6e, 0xd1, 0x20, 0x8e, 0xa8, 0xe7, 0x91, 0xa8, 0x45, 0x83, + 0x53, 0xd7, 0x19, 0xc4, 0xde, 0x52, 0x56, 0x6c, 0x0d, 0xec, 0xcb, 0x99, 0xac, 0xd3, 0x47, 0xcf, + 0xa0, 0x7a, 0x81, 0x3d, 0xb7, 0x2f, 0x75, 0x06, 0x1c, 0x8b, 0xe6, 0xca, 0x40, 0x2e, 0x59, 0xfe, + 0x6d, 0x01, 0xaa, 0xa3, 0x5f, 0xe2, 0xf7, 0xc1, 0xf5, 0xb1, 0xa3, 0x8a, 0x25, 0x39, 0xe1, 0xf7, + 0xc6, 0xf6, 0xfb, 0xe9, 0x66, 0xf9, 0x10, 0x3d, 0x86, 0x25, 0xc7, 0x66, 0x96, 0x47, 0x1d, 0x2b, + 0xc4, 0xf1, 0x59, 0x5a, 0x3f, 0x80, 0x63, 0xb3, 0x7d, 0xea, 0x74, 0x71, 0x7c, 0x36, 0x56, 0x45, + 0x15, 0xc7, 0xab, 0xa8, 0x3d, 0x28, 0x5e, 0xe0, 0x88, 0xd5, 0xe6, 0xc5, 0x61, 0x7c, 0x7a, 0x5d, + 0x25, 0x34, 0x4c, 0xb3, 0x71, 0x8c, 0xa3, 0x34, 0xc1, 0x08, 0x04, 0xf4, 0x3d, 0x98, 0xe7, 0xd5, + 0x17, 0x4f, 0xce, 0x37, 0x24, 0xab, 0x31, 0xa8, 0x1d, 0x6e, 0x27, 0xb1, 0x24, 0x06, 0xfa, 0x09, + 0x94, 0xf9, 0xde, 0x54, 0xbe, 0x5f, 0x14, 0x90, 0x9b, 0x33, 0x40, 0xee, 0xda, 0xac, 0x27, 0x8d, + 0x25, 0x2e, 0x77, 0x4b, 0x2a, 0x40, 0x5f, 0x80, 0x2e, 0xc0, 0xdd, 0xe0, 0x5c, 0x95, 0x53, 0x1b, + 0x33, 0x42, 0x73, 0x53, 0x09, 0x5c, 0x72, 0xd2, 0x69, 0x7d, 0x15, 0x2a, 0x26, 0x09, 0x79, 0xfd, + 0xd0, 0xef, 0xc5, 0x11, 0x7f, 0x24, 0x3e, 0x84, 0x05, 0x91, 0xcc, 0x64, 0xac, 0xeb, 0x66, 0x3a, + 0xab, 0x7f, 0x07, 0xf4, 0xcc, 0x7b, 0x33, 0xe5, 0xd2, 0x0d, 0x80, 0x81, 0xaf, 0x66, 0xb2, 0x7c, + 0x07, 0x2b, 0x23, 0x2e, 0x99, 0x60, 0x7e, 0x98, 0x37, 0x2f, 0xaf, 0xbf, 0x9e, 0xc1, 0x29, 0xc3, + 0x3b, 0xcf, 0x7f, 0xf9, 0x02, 0x96, 0x87, 0x3c, 0xf6, 0x3f, 0xfa, 0xae, 0xe1, 0x41, 0xe5, 0x48, + 0xf5, 0x2d, 0xed, 0x0b, 0x12, 0xc4, 0xa3, 0xf5, 0xb6, 0x36, 0x5e, 0x6f, 0x6f, 0x80, 0x9e, 0xf5, + 0x3a, 0x29, 0x99, 0xfa, 0xd8, 0xeb, 0x9d, 0xa1, 0x9a, 0x03, 0x65, 0xe3, 0xeb, 0x02, 0xdc, 0xef, + 0x91, 0xf8, 0x50, 0xe5, 0x81, 0x5e, 0x8c, 0xe3, 0x84, 0xcd, 0x90, 0x35, 0x7a, 0x50, 0xcd, 0xd0, + 0x2c, 0xc2, 0xf9, 0xaa, 0xd2, 0xef, 0x9a, 0xea, 0x64, 0x78, 0x83, 0xe6, 0x4a, 0x3c, 0x34, 0x67, + 0xa8, 0x09, 0x40, 0xa2, 0x88, 0x46, 0x16, 0xef, 0xd2, 0x44, 0x82, 0xa8, 0xac, 0x57, 0x15, 0x5c, + 0x14, 0xda, 0x8d, 0x16, 0xed, 0x13, 0x53, 0x17, 0x3a, 0x7c, 0xc8, 0x1b, 0x36, 0x69, 0xe0, 0x13, + 0xc6, 0x78, 0x0e, 0x92, 0x29, 0x63, 0x49, 0x08, 0xdf, 0x4a, 0xd9, 0xc4, 0x04, 0x37, 0x3f, 0x39, + 0xc1, 0x7d, 0x06, 0x95, 0xe1, 0xa2, 0x8f, 0x87, 0x28, 0xf1, 0xb1, 0xeb, 0xa9, 0xec, 0x26, 0x26, + 0xfc, 0xa6, 0x30, 0x9b, 0x86, 0x44, 0xee, 0x59, 0x37, 0xd3, 0x99, 0xf1, 0x1c, 0x2a, 0xc3, 0x15, + 0x18, 0xba, 0x0f, 0xfc, 0xc6, 0xc9, 0x8c, 0x27, 0x21, 0x16, 0x1d, 0x9b, 0xf1, 0x74, 0x67, 0xfc, + 0xbd, 0x08, 0xb7, 0xc7, 0x0a, 0x3f, 0xb4, 0x06, 0xb7, 0x7d, 0x37, 0x70, 0xfd, 0xc4, 0xb7, 0xec, + 0x30, 0xb1, 0x6c, 0x1a, 0x89, 0xfb, 0xc8, 0x5f, 0xb4, 0x95, 0x74, 0xa1, 0x15, 0x26, 0x2d, 0x2e, + 0xe6, 0x11, 0x12, 0x46, 0x84, 0xf7, 0xc2, 0xee, 0x89, 0x27, 0xc3, 0xb1, 0x64, 0xe6, 0x45, 0xe8, + 0xff, 0xa1, 0xa2, 0xd0, 0x22, 0xec, 0x5b, 0xce, 0x89, 0xf0, 0xaa, 0x66, 0x2e, 0xa5, 0x52, 0x13, + 0xfb, 0xbb, 0x27, 0xe8, 0x8d, 0xca, 0x85, 0x45, 0x71, 0x82, 0xdf, 0x9a, 0xa1, 0x50, 0x15, 0xc9, + 0x50, 0xa5, 0xc1, 0x3b, 0x30, 0xcf, 0xdb, 0x61, 0x99, 0x9e, 0x75, 0x53, 0x4e, 0xd0, 0x33, 0xb8, + 0x7d, 0x42, 0x69, 0x6c, 0x89, 0xf6, 0x97, 0x3f, 0xd0, 0x9c, 0xc6, 0x82, 0xd8, 0x51, 0x85, 0x2f, + 0x70, 0x04, 0xfe, 0x4e, 0xef, 0x9e, 0xf0, 0x97, 0x3a, 0xa0, 0x16, 0xee, 0xf7, 0x23, 0xc2, 0x98, + 0xa8, 0x76, 0x4b, 0xa6, 0x1e, 0xd0, 0x2d, 0x29, 0xa8, 0xff, 0xa9, 0x00, 0x45, 0xae, 0x9d, 0xb5, + 0xa7, 0x5a, 0xae, 0x3d, 0xed, 0x40, 0x51, 0xbc, 0x1a, 0x05, 0x11, 0x36, 0xaf, 0x66, 0xdd, 0x43, + 0x83, 0xbf, 0x2f, 0xa6, 0x80, 0x40, 0xf7, 0x60, 0x51, 0xf1, 0x94, 0xb5, 0xc4, 0x02, 0x93, 0xfc, + 0xf8, 0xb9, 0x0b, 0x9b, 0x34, 0xd0, 0xd2, 0x19, 0x7f, 0xa5, 0x71, 0x12, 0x53, 0xab, 0x2f, 0xde, + 0x70, 0xb1, 0xb9, 0x92, 0x09, 0x5c, 0x24, 0x5f, 0x75, 0xae, 0xe0, 0xf3, 0x78, 0xb2, 0x42, 0xea, + 0x06, 0xb1, 0xa8, 0xb4, 0x75, 0x13, 0x84, 0xa8, 0xcb, 0x25, 0x46, 0x0f, 0x8a, 0xe2, 0x81, 0xbb, + 0x03, 0xd5, 0xa3, 0x1f, 0x75, 0xdb, 0xd6, 0x17, 0x07, 0xbd, 0x6e, 0xbb, 0xd5, 0x79, 0xd3, 0x69, + 0xef, 0x54, 0x6f, 0x21, 0x04, 0x95, 0x6e, 0xdb, 0xec, 0x75, 0x7a, 0x47, 0xed, 0x83, 0x23, 0x6b, + 0x6f, 0x67, 0xa7, 0xaa, 0x8d, 0xc8, 0x7a, 0xbd, 0x9d, 0x6a, 0x01, 0x2d, 0x83, 0xbe, 0x7f, 0xd8, + 0xda, 0xda, 0x17, 0xd3, 0x39, 0xe3, 0xdf, 0xda, 0x20, 0xc2, 0xb2, 0xa6, 0x77, 0xa2, 0xf3, 0x46, + 0x72, 0x4d, 0x61, 0x3c, 0xd7, 0x3c, 0x85, 0xe5, 0x3e, 0x39, 0xc5, 0x89, 0x17, 0x5b, 0x32, 0xf9, + 0xc9, 0x8e, 0x67, 0x29, 0x15, 0x1e, 0x73, 0x19, 0x3a, 0x02, 0xf0, 0xa8, 0x8d, 0x3d, 0xcb, 0xa6, + 0xe1, 0x65, 0xda, 0xf6, 0xbc, 0x9a, 0xa1, 0x43, 0x6f, 0xec, 0x73, 0xeb, 0x16, 0x0d, 0x2f, 0x4d, + 0xdd, 0x53, 0xc3, 0xfa, 0x4b, 0xd0, 0x33, 0x39, 0x67, 0x9f, 0xbb, 0x4c, 0x62, 0xcc, 0x65, 0x3c, + 0xb8, 0xd4, 0xdf, 0x0a, 0x3e, 0x36, 0xb6, 0xa0, 0x32, 0xdc, 0xb1, 0xf3, 0xe0, 0x12, 0xb5, 0x49, + 0xfe, 0xd7, 0x8e, 0x2e, 0x24, 0xe2, 0xbf, 0xce, 0x58, 0xc5, 0xb2, 0xfe, 0x9b, 0xd2, 0xc0, 0x7d, + 0xec, 0xf8, 0xc5, 0x96, 0x20, 0x8d, 0x7e, 0xab, 0x41, 0x65, 0xb8, 0xef, 0x46, 0xcd, 0x6b, 0x5e, + 0x80, 0x49, 0x1d, 0x7a, 0x7d, 0x8a, 0x2a, 0xd2, 0xf8, 0xc6, 0xaf, 0xfe, 0xfa, 0x8f, 0x3f, 0x14, + 0x1e, 0x19, 0x1f, 0x4c, 0xf8, 0x27, 0xb7, 0x99, 0x55, 0xe2, 0xe8, 0x17, 0x50, 0xce, 0x95, 0xed, + 0xe8, 0x9b, 0x53, 0x55, 0xf7, 0x8a, 0xc7, 0x47, 0x4a, 0x3b, 0xf7, 0x77, 0xae, 0x91, 0x3d, 0x0a, + 0x86, 0x21, 0x28, 0x3c, 0x34, 0xee, 0x4d, 0xa2, 0x10, 0x25, 0xc1, 0xa6, 0xb6, 0x86, 0xbe, 0xd2, + 0xa0, 0x9c, 0x6b, 0x05, 0xae, 0x23, 0x30, 0xde, 0x31, 0x4c, 0xe5, 0x88, 0x67, 0x82, 0xc5, 0x53, + 0xf4, 0x64, 0x02, 0x8b, 0xe6, 0xcf, 0x72, 0xd5, 0xf1, 0xcf, 0xd1, 0xef, 0x34, 0x58, 0x1e, 0x2a, + 0xe5, 0x51, 0xe3, 0x9a, 0x5e, 0x79, 0x42, 0x23, 0x52, 0x6f, 0x4e, 0xad, 0x2f, 0x7b, 0x04, 0xe3, + 0x81, 0x60, 0x77, 0x17, 0x4d, 0x3a, 0x26, 0xf4, 0x6b, 0x0d, 0x2a, 0xc3, 0x75, 0xfd, 0x75, 0xb1, + 0x32, 0xb1, 0x03, 0xa8, 0x7f, 0x38, 0xf6, 0xa2, 0xb7, 0xfd, 0x30, 0xbe, 0x54, 0x6e, 0x59, 0x9b, + 0xc2, 0x2d, 0x7f, 0xd4, 0xe0, 0x83, 0x09, 0x4d, 0x02, 0xfa, 0xf4, 0xda, 0xb3, 0xba, 0xa2, 0xa7, + 0xa8, 0xaf, 0x4d, 0x5f, 0xef, 0x18, 0x4d, 0x41, 0xf2, 0x19, 0xfa, 0x64, 0x52, 0x04, 0x39, 0x13, + 0x28, 0x7d, 0xad, 0x01, 0x1a, 0x2f, 0x4c, 0xd0, 0xcb, 0xeb, 0xfe, 0xd2, 0x5c, 0x51, 0xc6, 0x5c, + 0xe9, 0xb9, 0x17, 0x82, 0xd4, 0xf3, 0xfa, 0xc7, 0x93, 0x48, 0xb1, 0x31, 0xb8, 0x4d, 0x6d, 0x6d, + 0x3b, 0x84, 0x7b, 0x36, 0xf5, 0x27, 0x91, 0xd8, 0xae, 0x64, 0x31, 0xd1, 0xe5, 0x9f, 0xe9, 0x6a, + 0x3f, 0xfe, 0x5c, 0xa9, 0x51, 0x0f, 0x07, 0x4e, 0x83, 0x46, 0x4e, 0xd3, 0x21, 0x81, 0x20, 0xd1, + 0x94, 0x4b, 0x38, 0x74, 0xd9, 0xf8, 0x3f, 0xf7, 0xef, 0x2a, 0xc9, 0xbf, 0x34, 0xed, 0x64, 0x41, + 0xe8, 0xbf, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x13, 0x10, 0x96, 0x1d, 0xa2, 0x17, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/iam/admin/v1/iam.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/admin/v1/iam.pb.go new file mode 100644 index 0000000..48de662 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/iam/admin/v1/iam.pb.go @@ -0,0 +1,1498 @@ +// Code generated by protoc-gen-go. +// source: google/iam/admin/v1/iam.proto +// DO NOT EDIT! + +/* +Package admin is a generated protocol buffer package. + +It is generated from these files: + google/iam/admin/v1/iam.proto + +It has these top-level messages: + ServiceAccount + CreateServiceAccountRequest + ListServiceAccountsRequest + ListServiceAccountsResponse + GetServiceAccountRequest + DeleteServiceAccountRequest + ListServiceAccountKeysRequest + ListServiceAccountKeysResponse + GetServiceAccountKeyRequest + ServiceAccountKey + CreateServiceAccountKeyRequest + DeleteServiceAccountKeyRequest + SignBlobRequest + SignBlobResponse + Role + QueryGrantableRolesRequest + QueryGrantableRolesResponse +*/ +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import _ "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Supported key algorithms. +type ServiceAccountKeyAlgorithm int32 + +const ( + // An unspecified key algorithm. + ServiceAccountKeyAlgorithm_KEY_ALG_UNSPECIFIED ServiceAccountKeyAlgorithm = 0 + // 1k RSA Key. + ServiceAccountKeyAlgorithm_KEY_ALG_RSA_1024 ServiceAccountKeyAlgorithm = 1 + // 2k RSA Key. + ServiceAccountKeyAlgorithm_KEY_ALG_RSA_2048 ServiceAccountKeyAlgorithm = 2 +) + +var ServiceAccountKeyAlgorithm_name = map[int32]string{ + 0: "KEY_ALG_UNSPECIFIED", + 1: "KEY_ALG_RSA_1024", + 2: "KEY_ALG_RSA_2048", +} +var ServiceAccountKeyAlgorithm_value = map[string]int32{ + "KEY_ALG_UNSPECIFIED": 0, + "KEY_ALG_RSA_1024": 1, + "KEY_ALG_RSA_2048": 2, +} + +func (x ServiceAccountKeyAlgorithm) String() string { + return proto.EnumName(ServiceAccountKeyAlgorithm_name, int32(x)) +} +func (ServiceAccountKeyAlgorithm) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Supported private key output formats. +type ServiceAccountPrivateKeyType int32 + +const ( + // Unspecified. Equivalent to `TYPE_GOOGLE_CREDENTIALS_FILE`. + ServiceAccountPrivateKeyType_TYPE_UNSPECIFIED ServiceAccountPrivateKeyType = 0 + // PKCS12 format. + // The password for the PKCS12 file is `notasecret`. + // For more information, see https://tools.ietf.org/html/rfc7292. + ServiceAccountPrivateKeyType_TYPE_PKCS12_FILE ServiceAccountPrivateKeyType = 1 + // Google Credentials File format. + ServiceAccountPrivateKeyType_TYPE_GOOGLE_CREDENTIALS_FILE ServiceAccountPrivateKeyType = 2 +) + +var ServiceAccountPrivateKeyType_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "TYPE_PKCS12_FILE", + 2: "TYPE_GOOGLE_CREDENTIALS_FILE", +} +var ServiceAccountPrivateKeyType_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "TYPE_PKCS12_FILE": 1, + "TYPE_GOOGLE_CREDENTIALS_FILE": 2, +} + +func (x ServiceAccountPrivateKeyType) String() string { + return proto.EnumName(ServiceAccountPrivateKeyType_name, int32(x)) +} +func (ServiceAccountPrivateKeyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// Supported public key output formats. +type ServiceAccountPublicKeyType int32 + +const ( + // Unspecified. Returns nothing here. + ServiceAccountPublicKeyType_TYPE_NONE ServiceAccountPublicKeyType = 0 + // X509 PEM format. + ServiceAccountPublicKeyType_TYPE_X509_PEM_FILE ServiceAccountPublicKeyType = 1 + // Raw public key. + ServiceAccountPublicKeyType_TYPE_RAW_PUBLIC_KEY ServiceAccountPublicKeyType = 2 +) + +var ServiceAccountPublicKeyType_name = map[int32]string{ + 0: "TYPE_NONE", + 1: "TYPE_X509_PEM_FILE", + 2: "TYPE_RAW_PUBLIC_KEY", +} +var ServiceAccountPublicKeyType_value = map[string]int32{ + "TYPE_NONE": 0, + "TYPE_X509_PEM_FILE": 1, + "TYPE_RAW_PUBLIC_KEY": 2, +} + +func (x ServiceAccountPublicKeyType) String() string { + return proto.EnumName(ServiceAccountPublicKeyType_name, int32(x)) +} +func (ServiceAccountPublicKeyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// `KeyType` filters to selectively retrieve certain varieties +// of keys. +type ListServiceAccountKeysRequest_KeyType int32 + +const ( + // Unspecified key type. The presence of this in the + // message will immediately result in an error. + ListServiceAccountKeysRequest_KEY_TYPE_UNSPECIFIED ListServiceAccountKeysRequest_KeyType = 0 + // User-managed keys (managed and rotated by the user). + ListServiceAccountKeysRequest_USER_MANAGED ListServiceAccountKeysRequest_KeyType = 1 + // System-managed keys (managed and rotated by Google). + ListServiceAccountKeysRequest_SYSTEM_MANAGED ListServiceAccountKeysRequest_KeyType = 2 +) + +var ListServiceAccountKeysRequest_KeyType_name = map[int32]string{ + 0: "KEY_TYPE_UNSPECIFIED", + 1: "USER_MANAGED", + 2: "SYSTEM_MANAGED", +} +var ListServiceAccountKeysRequest_KeyType_value = map[string]int32{ + "KEY_TYPE_UNSPECIFIED": 0, + "USER_MANAGED": 1, + "SYSTEM_MANAGED": 2, +} + +func (x ListServiceAccountKeysRequest_KeyType) String() string { + return proto.EnumName(ListServiceAccountKeysRequest_KeyType_name, int32(x)) +} +func (ListServiceAccountKeysRequest_KeyType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{6, 0} +} + +// A service account in the Identity and Access Management API. +// +// To create a service account, specify the `project_id` and the `account_id` +// for the account. The `account_id` is unique within the project, and is used +// to generate the service account email address and a stable +// `unique_id`. +// +// If the account already exists, the account's resource name is returned +// in util::Status's ResourceInfo.resource_name in the format of +// projects/{project}/serviceAccounts/{email}. The caller can use the name in +// other methods to access the account. +// +// All other methods can identify the service account using the format +// `projects/{project}/serviceAccounts/{account}`. +// Using `-` as a wildcard for the project will infer the project from +// the account. The `account` value can be the `email` address or the +// `unique_id` of the service account. +type ServiceAccount struct { + // The resource name of the service account in the following format: + // `projects/{project}/serviceAccounts/{account}`. + // + // Requests using `-` as a wildcard for the project will infer the project + // from the `account` and the `account` value can be the `email` address or + // the `unique_id` of the service account. + // + // In responses the resource name will always be in the format + // `projects/{project}/serviceAccounts/{email}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // @OutputOnly The id of the project that owns the service account. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // @OutputOnly The unique and stable id of the service account. + UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId" json:"unique_id,omitempty"` + // @OutputOnly The email address of the service account. + Email string `protobuf:"bytes,5,opt,name=email" json:"email,omitempty"` + // Optional. A user-specified description of the service account. Must be + // fewer than 100 UTF-8 bytes. + DisplayName string `protobuf:"bytes,6,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Used to perform a consistent read-modify-write. + Etag []byte `protobuf:"bytes,7,opt,name=etag,proto3" json:"etag,omitempty"` + // @OutputOnly. The OAuth2 client id for the service account. + // This is used in conjunction with the OAuth2 clientconfig API to make + // three legged OAuth2 (3LO) flows to access the data of Google users. + Oauth2ClientId string `protobuf:"bytes,9,opt,name=oauth2_client_id,json=oauth2ClientId" json:"oauth2_client_id,omitempty"` +} + +func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } +func (m *ServiceAccount) String() string { return proto.CompactTextString(m) } +func (*ServiceAccount) ProtoMessage() {} +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ServiceAccount) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ServiceAccount) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ServiceAccount) GetUniqueId() string { + if m != nil { + return m.UniqueId + } + return "" +} + +func (m *ServiceAccount) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +func (m *ServiceAccount) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *ServiceAccount) GetEtag() []byte { + if m != nil { + return m.Etag + } + return nil +} + +func (m *ServiceAccount) GetOauth2ClientId() string { + if m != nil { + return m.Oauth2ClientId + } + return "" +} + +// The service account create request. +type CreateServiceAccountRequest struct { + // Required. The resource name of the project associated with the service + // accounts, such as `projects/my-project-123`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The account id that is used to generate the service account + // email address and a stable unique id. It is unique within a project, + // must be 6-30 characters long, and match the regular expression + // `[a-z]([-a-z0-9]*[a-z0-9])` to comply with RFC1035. + AccountId string `protobuf:"bytes,2,opt,name=account_id,json=accountId" json:"account_id,omitempty"` + // The [ServiceAccount][google.iam.admin.v1.ServiceAccount] resource to create. + // Currently, only the following values are user assignable: + // `display_name` . + ServiceAccount *ServiceAccount `protobuf:"bytes,3,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` +} + +func (m *CreateServiceAccountRequest) Reset() { *m = CreateServiceAccountRequest{} } +func (m *CreateServiceAccountRequest) String() string { return proto.CompactTextString(m) } +func (*CreateServiceAccountRequest) ProtoMessage() {} +func (*CreateServiceAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *CreateServiceAccountRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateServiceAccountRequest) GetAccountId() string { + if m != nil { + return m.AccountId + } + return "" +} + +func (m *CreateServiceAccountRequest) GetServiceAccount() *ServiceAccount { + if m != nil { + return m.ServiceAccount + } + return nil +} + +// The service account list request. +type ListServiceAccountsRequest struct { + // Required. The resource name of the project associated with the service + // accounts, such as `projects/my-project-123`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional limit on the number of service accounts to include in the + // response. Further accounts can subsequently be obtained by including the + // [ListServiceAccountsResponse.next_page_token][google.iam.admin.v1.ListServiceAccountsResponse.next_page_token] + // in a subsequent request. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional pagination token returned in an earlier + // [ListServiceAccountsResponse.next_page_token][google.iam.admin.v1.ListServiceAccountsResponse.next_page_token]. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListServiceAccountsRequest) Reset() { *m = ListServiceAccountsRequest{} } +func (m *ListServiceAccountsRequest) String() string { return proto.CompactTextString(m) } +func (*ListServiceAccountsRequest) ProtoMessage() {} +func (*ListServiceAccountsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ListServiceAccountsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListServiceAccountsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListServiceAccountsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The service account list response. +type ListServiceAccountsResponse struct { + // The list of matching service accounts. + Accounts []*ServiceAccount `protobuf:"bytes,1,rep,name=accounts" json:"accounts,omitempty"` + // To retrieve the next page of results, set + // [ListServiceAccountsRequest.page_token][google.iam.admin.v1.ListServiceAccountsRequest.page_token] + // to this value. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListServiceAccountsResponse) Reset() { *m = ListServiceAccountsResponse{} } +func (m *ListServiceAccountsResponse) String() string { return proto.CompactTextString(m) } +func (*ListServiceAccountsResponse) ProtoMessage() {} +func (*ListServiceAccountsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ListServiceAccountsResponse) GetAccounts() []*ServiceAccount { + if m != nil { + return m.Accounts + } + return nil +} + +func (m *ListServiceAccountsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The service account get request. +type GetServiceAccountRequest struct { + // The resource name of the service account in the following format: + // `projects/{project}/serviceAccounts/{account}`. + // Using `-` as a wildcard for the project will infer the project from + // the account. The `account` value can be the `email` address or the + // `unique_id` of the service account. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetServiceAccountRequest) Reset() { *m = GetServiceAccountRequest{} } +func (m *GetServiceAccountRequest) String() string { return proto.CompactTextString(m) } +func (*GetServiceAccountRequest) ProtoMessage() {} +func (*GetServiceAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *GetServiceAccountRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The service account delete request. +type DeleteServiceAccountRequest struct { + // The resource name of the service account in the following format: + // `projects/{project}/serviceAccounts/{account}`. + // Using `-` as a wildcard for the project will infer the project from + // the account. The `account` value can be the `email` address or the + // `unique_id` of the service account. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteServiceAccountRequest) Reset() { *m = DeleteServiceAccountRequest{} } +func (m *DeleteServiceAccountRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteServiceAccountRequest) ProtoMessage() {} +func (*DeleteServiceAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *DeleteServiceAccountRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The service account keys list request. +type ListServiceAccountKeysRequest struct { + // The resource name of the service account in the following format: + // `projects/{project}/serviceAccounts/{account}`. + // + // Using `-` as a wildcard for the project, will infer the project from + // the account. The `account` value can be the `email` address or the + // `unique_id` of the service account. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Filters the types of keys the user wants to include in the list + // response. Duplicate key types are not allowed. If no key type + // is provided, all keys are returned. + KeyTypes []ListServiceAccountKeysRequest_KeyType `protobuf:"varint,2,rep,packed,name=key_types,json=keyTypes,enum=google.iam.admin.v1.ListServiceAccountKeysRequest_KeyType" json:"key_types,omitempty"` +} + +func (m *ListServiceAccountKeysRequest) Reset() { *m = ListServiceAccountKeysRequest{} } +func (m *ListServiceAccountKeysRequest) String() string { return proto.CompactTextString(m) } +func (*ListServiceAccountKeysRequest) ProtoMessage() {} +func (*ListServiceAccountKeysRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ListServiceAccountKeysRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListServiceAccountKeysRequest) GetKeyTypes() []ListServiceAccountKeysRequest_KeyType { + if m != nil { + return m.KeyTypes + } + return nil +} + +// The service account keys list response. +type ListServiceAccountKeysResponse struct { + // The public keys for the service account. + Keys []*ServiceAccountKey `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` +} + +func (m *ListServiceAccountKeysResponse) Reset() { *m = ListServiceAccountKeysResponse{} } +func (m *ListServiceAccountKeysResponse) String() string { return proto.CompactTextString(m) } +func (*ListServiceAccountKeysResponse) ProtoMessage() {} +func (*ListServiceAccountKeysResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ListServiceAccountKeysResponse) GetKeys() []*ServiceAccountKey { + if m != nil { + return m.Keys + } + return nil +} + +// The service account key get by id request. +type GetServiceAccountKeyRequest struct { + // The resource name of the service account key in the following format: + // `projects/{project}/serviceAccounts/{account}/keys/{key}`. + // + // Using `-` as a wildcard for the project will infer the project from + // the account. The `account` value can be the `email` address or the + // `unique_id` of the service account. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The output format of the public key requested. + // X509_PEM is the default output format. + PublicKeyType ServiceAccountPublicKeyType `protobuf:"varint,2,opt,name=public_key_type,json=publicKeyType,enum=google.iam.admin.v1.ServiceAccountPublicKeyType" json:"public_key_type,omitempty"` +} + +func (m *GetServiceAccountKeyRequest) Reset() { *m = GetServiceAccountKeyRequest{} } +func (m *GetServiceAccountKeyRequest) String() string { return proto.CompactTextString(m) } +func (*GetServiceAccountKeyRequest) ProtoMessage() {} +func (*GetServiceAccountKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *GetServiceAccountKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetServiceAccountKeyRequest) GetPublicKeyType() ServiceAccountPublicKeyType { + if m != nil { + return m.PublicKeyType + } + return ServiceAccountPublicKeyType_TYPE_NONE +} + +// Represents a service account key. +// +// A service account has two sets of key-pairs: user-managed, and +// system-managed. +// +// User-managed key-pairs can be created and deleted by users. Users are +// responsible for rotating these keys periodically to ensure security of +// their service accounts. Users retain the private key of these key-pairs, +// and Google retains ONLY the public key. +// +// System-managed key-pairs are managed automatically by Google, and rotated +// daily without user intervention. The private key never leaves Google's +// servers to maximize security. +// +// Public keys for all service accounts are also published at the OAuth2 +// Service Account API. +type ServiceAccountKey struct { + // The resource name of the service account key in the following format + // `projects/{project}/serviceAccounts/{account}/keys/{key}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The output format for the private key. + // Only provided in `CreateServiceAccountKey` responses, not + // in `GetServiceAccountKey` or `ListServiceAccountKey` responses. + // + // Google never exposes system-managed private keys, and never retains + // user-managed private keys. + PrivateKeyType ServiceAccountPrivateKeyType `protobuf:"varint,2,opt,name=private_key_type,json=privateKeyType,enum=google.iam.admin.v1.ServiceAccountPrivateKeyType" json:"private_key_type,omitempty"` + // Specifies the algorithm (and possibly key size) for the key. + KeyAlgorithm ServiceAccountKeyAlgorithm `protobuf:"varint,8,opt,name=key_algorithm,json=keyAlgorithm,enum=google.iam.admin.v1.ServiceAccountKeyAlgorithm" json:"key_algorithm,omitempty"` + // The private key data. Only provided in `CreateServiceAccountKey` + // responses. + PrivateKeyData []byte `protobuf:"bytes,3,opt,name=private_key_data,json=privateKeyData,proto3" json:"private_key_data,omitempty"` + // The public key data. Only provided in `GetServiceAccountKey` responses. + PublicKeyData []byte `protobuf:"bytes,7,opt,name=public_key_data,json=publicKeyData,proto3" json:"public_key_data,omitempty"` + // The key can be used after this timestamp. + ValidAfterTime *google_protobuf3.Timestamp `protobuf:"bytes,4,opt,name=valid_after_time,json=validAfterTime" json:"valid_after_time,omitempty"` + // The key can be used before this timestamp. + ValidBeforeTime *google_protobuf3.Timestamp `protobuf:"bytes,5,opt,name=valid_before_time,json=validBeforeTime" json:"valid_before_time,omitempty"` +} + +func (m *ServiceAccountKey) Reset() { *m = ServiceAccountKey{} } +func (m *ServiceAccountKey) String() string { return proto.CompactTextString(m) } +func (*ServiceAccountKey) ProtoMessage() {} +func (*ServiceAccountKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *ServiceAccountKey) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ServiceAccountKey) GetPrivateKeyType() ServiceAccountPrivateKeyType { + if m != nil { + return m.PrivateKeyType + } + return ServiceAccountPrivateKeyType_TYPE_UNSPECIFIED +} + +func (m *ServiceAccountKey) GetKeyAlgorithm() ServiceAccountKeyAlgorithm { + if m != nil { + return m.KeyAlgorithm + } + return ServiceAccountKeyAlgorithm_KEY_ALG_UNSPECIFIED +} + +func (m *ServiceAccountKey) GetPrivateKeyData() []byte { + if m != nil { + return m.PrivateKeyData + } + return nil +} + +func (m *ServiceAccountKey) GetPublicKeyData() []byte { + if m != nil { + return m.PublicKeyData + } + return nil +} + +func (m *ServiceAccountKey) GetValidAfterTime() *google_protobuf3.Timestamp { + if m != nil { + return m.ValidAfterTime + } + return nil +} + +func (m *ServiceAccountKey) GetValidBeforeTime() *google_protobuf3.Timestamp { + if m != nil { + return m.ValidBeforeTime + } + return nil +} + +// The service account key create request. +type CreateServiceAccountKeyRequest struct { + // The resource name of the service account in the following format: + // `projects/{project}/serviceAccounts/{account}`. + // Using `-` as a wildcard for the project will infer the project from + // the account. The `account` value can be the `email` address or the + // `unique_id` of the service account. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The output format of the private key. `GOOGLE_CREDENTIALS_FILE` is the + // default output format. + PrivateKeyType ServiceAccountPrivateKeyType `protobuf:"varint,2,opt,name=private_key_type,json=privateKeyType,enum=google.iam.admin.v1.ServiceAccountPrivateKeyType" json:"private_key_type,omitempty"` + // Which type of key and algorithm to use for the key. + // The default is currently a 4K RSA key. However this may change in the + // future. + KeyAlgorithm ServiceAccountKeyAlgorithm `protobuf:"varint,3,opt,name=key_algorithm,json=keyAlgorithm,enum=google.iam.admin.v1.ServiceAccountKeyAlgorithm" json:"key_algorithm,omitempty"` +} + +func (m *CreateServiceAccountKeyRequest) Reset() { *m = CreateServiceAccountKeyRequest{} } +func (m *CreateServiceAccountKeyRequest) String() string { return proto.CompactTextString(m) } +func (*CreateServiceAccountKeyRequest) ProtoMessage() {} +func (*CreateServiceAccountKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *CreateServiceAccountKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateServiceAccountKeyRequest) GetPrivateKeyType() ServiceAccountPrivateKeyType { + if m != nil { + return m.PrivateKeyType + } + return ServiceAccountPrivateKeyType_TYPE_UNSPECIFIED +} + +func (m *CreateServiceAccountKeyRequest) GetKeyAlgorithm() ServiceAccountKeyAlgorithm { + if m != nil { + return m.KeyAlgorithm + } + return ServiceAccountKeyAlgorithm_KEY_ALG_UNSPECIFIED +} + +// The service account key delete request. +type DeleteServiceAccountKeyRequest struct { + // The resource name of the service account key in the following format: + // `projects/{project}/serviceAccounts/{account}/keys/{key}`. + // Using `-` as a wildcard for the project will infer the project from + // the account. The `account` value can be the `email` address or the + // `unique_id` of the service account. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteServiceAccountKeyRequest) Reset() { *m = DeleteServiceAccountKeyRequest{} } +func (m *DeleteServiceAccountKeyRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteServiceAccountKeyRequest) ProtoMessage() {} +func (*DeleteServiceAccountKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *DeleteServiceAccountKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The service account sign blob request. +type SignBlobRequest struct { + // The resource name of the service account in the following format: + // `projects/{project}/serviceAccounts/{account}`. + // Using `-` as a wildcard for the project will infer the project from + // the account. The `account` value can be the `email` address or the + // `unique_id` of the service account. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The bytes to sign. + BytesToSign []byte `protobuf:"bytes,2,opt,name=bytes_to_sign,json=bytesToSign,proto3" json:"bytes_to_sign,omitempty"` +} + +func (m *SignBlobRequest) Reset() { *m = SignBlobRequest{} } +func (m *SignBlobRequest) String() string { return proto.CompactTextString(m) } +func (*SignBlobRequest) ProtoMessage() {} +func (*SignBlobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *SignBlobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *SignBlobRequest) GetBytesToSign() []byte { + if m != nil { + return m.BytesToSign + } + return nil +} + +// The service account sign blob response. +type SignBlobResponse struct { + // The id of the key used to sign the blob. + KeyId string `protobuf:"bytes,1,opt,name=key_id,json=keyId" json:"key_id,omitempty"` + // The signed blob. + Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (m *SignBlobResponse) Reset() { *m = SignBlobResponse{} } +func (m *SignBlobResponse) String() string { return proto.CompactTextString(m) } +func (*SignBlobResponse) ProtoMessage() {} +func (*SignBlobResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *SignBlobResponse) GetKeyId() string { + if m != nil { + return m.KeyId + } + return "" +} + +func (m *SignBlobResponse) GetSignature() []byte { + if m != nil { + return m.Signature + } + return nil +} + +// A role in the Identity and Access Management API. +type Role struct { + // The name of the role. + // + // When Role is used in CreateRole, the role name must not be set. + // + // When Role is used in output and other input such as UpdateRole, the role + // name is the complete path, e.g., roles/logging.viewer for curated roles + // and organizations/{organization-id}/roles/logging.viewer for custom roles. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. A human-readable title for the role. Typically this + // is limited to 100 UTF-8 bytes. + Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + // Optional. A human-readable description for the role. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *Role) Reset() { *m = Role{} } +func (m *Role) String() string { return proto.CompactTextString(m) } +func (*Role) ProtoMessage() {} +func (*Role) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *Role) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Role) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Role) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// The grantable role query request. +type QueryGrantableRolesRequest struct { + // Required. The full resource name to query from the list of grantable roles. + // + // The name follows the Google Cloud Platform resource format. + // For example, a Cloud Platform project with id `my-project` will be named + // `//cloudresourcemanager.googleapis.com/projects/my-project`. + FullResourceName string `protobuf:"bytes,1,opt,name=full_resource_name,json=fullResourceName" json:"full_resource_name,omitempty"` +} + +func (m *QueryGrantableRolesRequest) Reset() { *m = QueryGrantableRolesRequest{} } +func (m *QueryGrantableRolesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGrantableRolesRequest) ProtoMessage() {} +func (*QueryGrantableRolesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *QueryGrantableRolesRequest) GetFullResourceName() string { + if m != nil { + return m.FullResourceName + } + return "" +} + +// The grantable role query response. +type QueryGrantableRolesResponse struct { + // The list of matching roles. + Roles []*Role `protobuf:"bytes,1,rep,name=roles" json:"roles,omitempty"` +} + +func (m *QueryGrantableRolesResponse) Reset() { *m = QueryGrantableRolesResponse{} } +func (m *QueryGrantableRolesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGrantableRolesResponse) ProtoMessage() {} +func (*QueryGrantableRolesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *QueryGrantableRolesResponse) GetRoles() []*Role { + if m != nil { + return m.Roles + } + return nil +} + +func init() { + proto.RegisterType((*ServiceAccount)(nil), "google.iam.admin.v1.ServiceAccount") + proto.RegisterType((*CreateServiceAccountRequest)(nil), "google.iam.admin.v1.CreateServiceAccountRequest") + proto.RegisterType((*ListServiceAccountsRequest)(nil), "google.iam.admin.v1.ListServiceAccountsRequest") + proto.RegisterType((*ListServiceAccountsResponse)(nil), "google.iam.admin.v1.ListServiceAccountsResponse") + proto.RegisterType((*GetServiceAccountRequest)(nil), "google.iam.admin.v1.GetServiceAccountRequest") + proto.RegisterType((*DeleteServiceAccountRequest)(nil), "google.iam.admin.v1.DeleteServiceAccountRequest") + proto.RegisterType((*ListServiceAccountKeysRequest)(nil), "google.iam.admin.v1.ListServiceAccountKeysRequest") + proto.RegisterType((*ListServiceAccountKeysResponse)(nil), "google.iam.admin.v1.ListServiceAccountKeysResponse") + proto.RegisterType((*GetServiceAccountKeyRequest)(nil), "google.iam.admin.v1.GetServiceAccountKeyRequest") + proto.RegisterType((*ServiceAccountKey)(nil), "google.iam.admin.v1.ServiceAccountKey") + proto.RegisterType((*CreateServiceAccountKeyRequest)(nil), "google.iam.admin.v1.CreateServiceAccountKeyRequest") + proto.RegisterType((*DeleteServiceAccountKeyRequest)(nil), "google.iam.admin.v1.DeleteServiceAccountKeyRequest") + proto.RegisterType((*SignBlobRequest)(nil), "google.iam.admin.v1.SignBlobRequest") + proto.RegisterType((*SignBlobResponse)(nil), "google.iam.admin.v1.SignBlobResponse") + proto.RegisterType((*Role)(nil), "google.iam.admin.v1.Role") + proto.RegisterType((*QueryGrantableRolesRequest)(nil), "google.iam.admin.v1.QueryGrantableRolesRequest") + proto.RegisterType((*QueryGrantableRolesResponse)(nil), "google.iam.admin.v1.QueryGrantableRolesResponse") + proto.RegisterEnum("google.iam.admin.v1.ServiceAccountKeyAlgorithm", ServiceAccountKeyAlgorithm_name, ServiceAccountKeyAlgorithm_value) + proto.RegisterEnum("google.iam.admin.v1.ServiceAccountPrivateKeyType", ServiceAccountPrivateKeyType_name, ServiceAccountPrivateKeyType_value) + proto.RegisterEnum("google.iam.admin.v1.ServiceAccountPublicKeyType", ServiceAccountPublicKeyType_name, ServiceAccountPublicKeyType_value) + proto.RegisterEnum("google.iam.admin.v1.ListServiceAccountKeysRequest_KeyType", ListServiceAccountKeysRequest_KeyType_name, ListServiceAccountKeysRequest_KeyType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for IAM service + +type IAMClient interface { + // Lists [ServiceAccounts][google.iam.admin.v1.ServiceAccount] for a project. + ListServiceAccounts(ctx context.Context, in *ListServiceAccountsRequest, opts ...grpc.CallOption) (*ListServiceAccountsResponse, error) + // Gets a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + GetServiceAccount(ctx context.Context, in *GetServiceAccountRequest, opts ...grpc.CallOption) (*ServiceAccount, error) + // Creates a [ServiceAccount][google.iam.admin.v1.ServiceAccount] + // and returns it. + CreateServiceAccount(ctx context.Context, in *CreateServiceAccountRequest, opts ...grpc.CallOption) (*ServiceAccount, error) + // Updates a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + // + // Currently, only the following fields are updatable: + // `display_name` . + // The `etag` is mandatory. + UpdateServiceAccount(ctx context.Context, in *ServiceAccount, opts ...grpc.CallOption) (*ServiceAccount, error) + // Deletes a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + DeleteServiceAccount(ctx context.Context, in *DeleteServiceAccountRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Lists [ServiceAccountKeys][google.iam.admin.v1.ServiceAccountKey]. + ListServiceAccountKeys(ctx context.Context, in *ListServiceAccountKeysRequest, opts ...grpc.CallOption) (*ListServiceAccountKeysResponse, error) + // Gets the [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey] + // by key id. + GetServiceAccountKey(ctx context.Context, in *GetServiceAccountKeyRequest, opts ...grpc.CallOption) (*ServiceAccountKey, error) + // Creates a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey] + // and returns it. + CreateServiceAccountKey(ctx context.Context, in *CreateServiceAccountKeyRequest, opts ...grpc.CallOption) (*ServiceAccountKey, error) + // Deletes a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey]. + DeleteServiceAccountKey(ctx context.Context, in *DeleteServiceAccountKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Signs a blob using a service account's system-managed private key. + SignBlob(ctx context.Context, in *SignBlobRequest, opts ...grpc.CallOption) (*SignBlobResponse, error) + // Returns the IAM access control policy for a + // [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Sets the IAM access control policy for a + // [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Tests the specified permissions against the IAM access control policy + // for a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) + // Queries roles that can be granted on a particular resource. + // A role is grantable if it can be used as the role in a binding for a policy + // for that resource. + QueryGrantableRoles(ctx context.Context, in *QueryGrantableRolesRequest, opts ...grpc.CallOption) (*QueryGrantableRolesResponse, error) +} + +type iAMClient struct { + cc *grpc.ClientConn +} + +func NewIAMClient(cc *grpc.ClientConn) IAMClient { + return &iAMClient{cc} +} + +func (c *iAMClient) ListServiceAccounts(ctx context.Context, in *ListServiceAccountsRequest, opts ...grpc.CallOption) (*ListServiceAccountsResponse, error) { + out := new(ListServiceAccountsResponse) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/ListServiceAccounts", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) GetServiceAccount(ctx context.Context, in *GetServiceAccountRequest, opts ...grpc.CallOption) (*ServiceAccount, error) { + out := new(ServiceAccount) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/GetServiceAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) CreateServiceAccount(ctx context.Context, in *CreateServiceAccountRequest, opts ...grpc.CallOption) (*ServiceAccount, error) { + out := new(ServiceAccount) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/CreateServiceAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) UpdateServiceAccount(ctx context.Context, in *ServiceAccount, opts ...grpc.CallOption) (*ServiceAccount, error) { + out := new(ServiceAccount) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/UpdateServiceAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) DeleteServiceAccount(ctx context.Context, in *DeleteServiceAccountRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/DeleteServiceAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) ListServiceAccountKeys(ctx context.Context, in *ListServiceAccountKeysRequest, opts ...grpc.CallOption) (*ListServiceAccountKeysResponse, error) { + out := new(ListServiceAccountKeysResponse) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/ListServiceAccountKeys", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) GetServiceAccountKey(ctx context.Context, in *GetServiceAccountKeyRequest, opts ...grpc.CallOption) (*ServiceAccountKey, error) { + out := new(ServiceAccountKey) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/GetServiceAccountKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) CreateServiceAccountKey(ctx context.Context, in *CreateServiceAccountKeyRequest, opts ...grpc.CallOption) (*ServiceAccountKey, error) { + out := new(ServiceAccountKey) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/CreateServiceAccountKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) DeleteServiceAccountKey(ctx context.Context, in *DeleteServiceAccountKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/DeleteServiceAccountKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) SignBlob(ctx context.Context, in *SignBlobRequest, opts ...grpc.CallOption) (*SignBlobResponse, error) { + out := new(SignBlobResponse) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/SignBlob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) { + out := new(google_iam_v11.TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) QueryGrantableRoles(ctx context.Context, in *QueryGrantableRolesRequest, opts ...grpc.CallOption) (*QueryGrantableRolesResponse, error) { + out := new(QueryGrantableRolesResponse) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/QueryGrantableRoles", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for IAM service + +type IAMServer interface { + // Lists [ServiceAccounts][google.iam.admin.v1.ServiceAccount] for a project. + ListServiceAccounts(context.Context, *ListServiceAccountsRequest) (*ListServiceAccountsResponse, error) + // Gets a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + GetServiceAccount(context.Context, *GetServiceAccountRequest) (*ServiceAccount, error) + // Creates a [ServiceAccount][google.iam.admin.v1.ServiceAccount] + // and returns it. + CreateServiceAccount(context.Context, *CreateServiceAccountRequest) (*ServiceAccount, error) + // Updates a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + // + // Currently, only the following fields are updatable: + // `display_name` . + // The `etag` is mandatory. + UpdateServiceAccount(context.Context, *ServiceAccount) (*ServiceAccount, error) + // Deletes a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + DeleteServiceAccount(context.Context, *DeleteServiceAccountRequest) (*google_protobuf1.Empty, error) + // Lists [ServiceAccountKeys][google.iam.admin.v1.ServiceAccountKey]. + ListServiceAccountKeys(context.Context, *ListServiceAccountKeysRequest) (*ListServiceAccountKeysResponse, error) + // Gets the [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey] + // by key id. + GetServiceAccountKey(context.Context, *GetServiceAccountKeyRequest) (*ServiceAccountKey, error) + // Creates a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey] + // and returns it. + CreateServiceAccountKey(context.Context, *CreateServiceAccountKeyRequest) (*ServiceAccountKey, error) + // Deletes a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey]. + DeleteServiceAccountKey(context.Context, *DeleteServiceAccountKeyRequest) (*google_protobuf1.Empty, error) + // Signs a blob using a service account's system-managed private key. + SignBlob(context.Context, *SignBlobRequest) (*SignBlobResponse, error) + // Returns the IAM access control policy for a + // [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Sets the IAM access control policy for a + // [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + SetIamPolicy(context.Context, *google_iam_v11.SetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Tests the specified permissions against the IAM access control policy + // for a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. + TestIamPermissions(context.Context, *google_iam_v11.TestIamPermissionsRequest) (*google_iam_v11.TestIamPermissionsResponse, error) + // Queries roles that can be granted on a particular resource. + // A role is grantable if it can be used as the role in a binding for a policy + // for that resource. + QueryGrantableRoles(context.Context, *QueryGrantableRolesRequest) (*QueryGrantableRolesResponse, error) +} + +func RegisterIAMServer(s *grpc.Server, srv IAMServer) { + s.RegisterService(&_IAM_serviceDesc, srv) +} + +func _IAM_ListServiceAccounts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServiceAccountsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).ListServiceAccounts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/ListServiceAccounts", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).ListServiceAccounts(ctx, req.(*ListServiceAccountsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_GetServiceAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServiceAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).GetServiceAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/GetServiceAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).GetServiceAccount(ctx, req.(*GetServiceAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_CreateServiceAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateServiceAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).CreateServiceAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/CreateServiceAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).CreateServiceAccount(ctx, req.(*CreateServiceAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_UpdateServiceAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ServiceAccount) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).UpdateServiceAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/UpdateServiceAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).UpdateServiceAccount(ctx, req.(*ServiceAccount)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_DeleteServiceAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteServiceAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).DeleteServiceAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/DeleteServiceAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).DeleteServiceAccount(ctx, req.(*DeleteServiceAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_ListServiceAccountKeys_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServiceAccountKeysRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).ListServiceAccountKeys(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/ListServiceAccountKeys", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).ListServiceAccountKeys(ctx, req.(*ListServiceAccountKeysRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_GetServiceAccountKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServiceAccountKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).GetServiceAccountKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/GetServiceAccountKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).GetServiceAccountKey(ctx, req.(*GetServiceAccountKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_CreateServiceAccountKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateServiceAccountKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).CreateServiceAccountKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/CreateServiceAccountKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).CreateServiceAccountKey(ctx, req.(*CreateServiceAccountKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_DeleteServiceAccountKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteServiceAccountKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).DeleteServiceAccountKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/DeleteServiceAccountKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).DeleteServiceAccountKey(ctx, req.(*DeleteServiceAccountKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_SignBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SignBlobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).SignBlob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/SignBlob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).SignBlob(ctx, req.(*SignBlobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).GetIamPolicy(ctx, req.(*google_iam_v11.GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).SetIamPolicy(ctx, req.(*google_iam_v11.SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).TestIamPermissions(ctx, req.(*google_iam_v11.TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_QueryGrantableRoles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGrantableRolesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).QueryGrantableRoles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/QueryGrantableRoles", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).QueryGrantableRoles(ctx, req.(*QueryGrantableRolesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _IAM_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.iam.admin.v1.IAM", + HandlerType: (*IAMServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListServiceAccounts", + Handler: _IAM_ListServiceAccounts_Handler, + }, + { + MethodName: "GetServiceAccount", + Handler: _IAM_GetServiceAccount_Handler, + }, + { + MethodName: "CreateServiceAccount", + Handler: _IAM_CreateServiceAccount_Handler, + }, + { + MethodName: "UpdateServiceAccount", + Handler: _IAM_UpdateServiceAccount_Handler, + }, + { + MethodName: "DeleteServiceAccount", + Handler: _IAM_DeleteServiceAccount_Handler, + }, + { + MethodName: "ListServiceAccountKeys", + Handler: _IAM_ListServiceAccountKeys_Handler, + }, + { + MethodName: "GetServiceAccountKey", + Handler: _IAM_GetServiceAccountKey_Handler, + }, + { + MethodName: "CreateServiceAccountKey", + Handler: _IAM_CreateServiceAccountKey_Handler, + }, + { + MethodName: "DeleteServiceAccountKey", + Handler: _IAM_DeleteServiceAccountKey_Handler, + }, + { + MethodName: "SignBlob", + Handler: _IAM_SignBlob_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _IAM_GetIamPolicy_Handler, + }, + { + MethodName: "SetIamPolicy", + Handler: _IAM_SetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _IAM_TestIamPermissions_Handler, + }, + { + MethodName: "QueryGrantableRoles", + Handler: _IAM_QueryGrantableRoles_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/iam/admin/v1/iam.proto", +} + +func init() { proto.RegisterFile("google/iam/admin/v1/iam.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1604 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4b, 0x6f, 0xdb, 0xc6, + 0x16, 0xce, 0xf8, 0x91, 0x58, 0xc7, 0xb2, 0x2c, 0x8f, 0x95, 0x58, 0x57, 0xb2, 0x7d, 0x75, 0x79, + 0x6f, 0x12, 0x47, 0x48, 0x24, 0x59, 0x71, 0xee, 0xcd, 0x75, 0x90, 0xb6, 0xb2, 0xac, 0x08, 0xac, + 0x1f, 0x51, 0x29, 0x19, 0x89, 0xfb, 0x00, 0x31, 0x92, 0xc6, 0x0a, 0x6b, 0x8a, 0x64, 0x48, 0xca, + 0xa8, 0x52, 0x64, 0xd3, 0x45, 0x37, 0x01, 0x0a, 0x14, 0xcd, 0xa2, 0xab, 0x14, 0xe8, 0xa6, 0xdd, + 0x75, 0x53, 0xa0, 0x40, 0xff, 0x46, 0x17, 0x5d, 0x17, 0x28, 0xd0, 0xbf, 0xd0, 0x65, 0x31, 0x43, + 0xd2, 0xd1, 0x83, 0x92, 0xe9, 0xa2, 0xe8, 0x8e, 0x73, 0x9e, 0xdf, 0x9c, 0x33, 0x73, 0xe6, 0x93, + 0x60, 0xa5, 0xa5, 0xeb, 0x2d, 0x95, 0x66, 0x15, 0xd2, 0xce, 0x92, 0x66, 0x5b, 0xd1, 0xb2, 0x27, + 0xeb, 0x6c, 0x91, 0x31, 0x4c, 0xdd, 0xd6, 0xf1, 0xa2, 0xa3, 0xce, 0x30, 0x09, 0x57, 0x67, 0x4e, + 0xd6, 0x13, 0xcb, 0xae, 0x0f, 0x31, 0x94, 0x2c, 0xd1, 0x34, 0xdd, 0x26, 0xb6, 0xa2, 0x6b, 0x96, + 0xe3, 0x92, 0x58, 0xed, 0x89, 0xe8, 0xc4, 0x92, 0x0d, 0x5d, 0x55, 0x1a, 0x5d, 0x57, 0x9f, 0xe8, + 0xd7, 0xf7, 0xe9, 0x92, 0xae, 0x8e, 0xaf, 0xea, 0x9d, 0xa3, 0x2c, 0x6d, 0x1b, 0xb6, 0xa7, 0x4c, + 0x0d, 0x2a, 0x8f, 0x14, 0xaa, 0x36, 0xe5, 0x36, 0xb1, 0x8e, 0x5d, 0x8b, 0x7f, 0x0e, 0x5a, 0xd8, + 0x4a, 0x9b, 0x5a, 0x36, 0x69, 0x1b, 0x8e, 0x81, 0xf0, 0x33, 0x82, 0x48, 0x95, 0x9a, 0x27, 0x4a, + 0x83, 0x16, 0x1a, 0x0d, 0xbd, 0xa3, 0xd9, 0x18, 0xc3, 0x94, 0x46, 0xda, 0x34, 0x8e, 0x52, 0x68, + 0x2d, 0x24, 0xf1, 0x6f, 0xbc, 0x02, 0x60, 0x98, 0xfa, 0x87, 0xb4, 0x61, 0xcb, 0x4a, 0x33, 0x3e, + 0xc1, 0x35, 0x21, 0x57, 0x22, 0x36, 0x71, 0x12, 0x42, 0x1d, 0x4d, 0x79, 0xda, 0xa1, 0x4c, 0x3b, + 0xc5, 0xb5, 0x33, 0x8e, 0x40, 0x6c, 0xe2, 0x18, 0x4c, 0xd3, 0x36, 0x51, 0xd4, 0xf8, 0x34, 0x57, + 0x38, 0x0b, 0xfc, 0x2f, 0x08, 0x37, 0x15, 0xcb, 0x50, 0x49, 0x57, 0xe6, 0xd9, 0x2e, 0x72, 0xe5, + 0xac, 0x2b, 0xdb, 0x67, 0x49, 0x31, 0x4c, 0x51, 0x9b, 0xb4, 0xe2, 0x97, 0x52, 0x68, 0x2d, 0x2c, + 0xf1, 0x6f, 0xbc, 0x06, 0x51, 0x9d, 0x74, 0xec, 0x27, 0x79, 0xb9, 0xa1, 0x2a, 0x54, 0xe3, 0x70, + 0x42, 0xdc, 0x35, 0xe2, 0xc8, 0x8b, 0x5c, 0x2c, 0x36, 0x85, 0x57, 0x08, 0x92, 0x45, 0x93, 0x12, + 0x9b, 0xf6, 0xef, 0x4f, 0xa2, 0x4f, 0x3b, 0xd4, 0x1a, 0xb9, 0x4d, 0xe2, 0x58, 0xf5, 0x6c, 0xd3, + 0x95, 0x88, 0x4d, 0xbc, 0x0b, 0xf3, 0x96, 0x13, 0x4b, 0x76, 0x85, 0xf1, 0xc9, 0x14, 0x5a, 0x9b, + 0xcd, 0xff, 0x3b, 0xe3, 0x73, 0x2a, 0x32, 0x03, 0x79, 0x23, 0x56, 0xdf, 0x5a, 0x50, 0x21, 0xb1, + 0xab, 0x58, 0x76, 0xbf, 0x95, 0x35, 0x0e, 0x5e, 0x12, 0x42, 0x06, 0x69, 0x51, 0xd9, 0x52, 0x9e, + 0x51, 0x8e, 0x6e, 0x5a, 0x9a, 0x61, 0x82, 0xaa, 0xf2, 0xcc, 0x69, 0x11, 0x53, 0xda, 0xfa, 0x31, + 0xd5, 0x38, 0x2e, 0xd6, 0x22, 0xd2, 0xa2, 0x35, 0x26, 0x10, 0x3e, 0x45, 0x90, 0xf4, 0x4d, 0x67, + 0x19, 0xba, 0x66, 0x51, 0xfc, 0x26, 0xcc, 0xb8, 0x7b, 0xb2, 0xe2, 0x28, 0x35, 0x19, 0x74, 0x53, + 0xa7, 0x4e, 0xf8, 0x1a, 0xcc, 0x6b, 0xf4, 0x23, 0x5b, 0xee, 0x01, 0xe1, 0x14, 0x70, 0x8e, 0x89, + 0x2b, 0xa7, 0x40, 0x32, 0x10, 0x2f, 0x53, 0x3b, 0x70, 0x4f, 0x84, 0x75, 0x48, 0x6e, 0x53, 0x95, + 0x9e, 0xa3, 0x8d, 0xec, 0x50, 0xaf, 0x0c, 0xef, 0x75, 0x87, 0x76, 0xc7, 0x56, 0xf7, 0x11, 0x84, + 0x8e, 0x69, 0x57, 0xb6, 0xbb, 0x06, 0xb5, 0xe2, 0x13, 0xa9, 0xc9, 0xb5, 0x48, 0x7e, 0xd3, 0xb7, + 0x04, 0x63, 0x43, 0x67, 0x76, 0x68, 0xb7, 0xd6, 0x35, 0xa8, 0x34, 0x73, 0xec, 0x7c, 0x58, 0x82, + 0x08, 0x97, 0x5c, 0x21, 0x8e, 0x43, 0x6c, 0xa7, 0x74, 0x28, 0xd7, 0x0e, 0x2b, 0x25, 0xf9, 0x60, + 0xbf, 0x5a, 0x29, 0x15, 0xc5, 0x07, 0x62, 0x69, 0x3b, 0x7a, 0x01, 0x47, 0x21, 0x7c, 0x50, 0x2d, + 0x49, 0xf2, 0x5e, 0x61, 0xbf, 0x50, 0x2e, 0x6d, 0x47, 0x11, 0xc6, 0x10, 0xa9, 0x1e, 0x56, 0x6b, + 0xa5, 0xbd, 0x53, 0xd9, 0x84, 0xf0, 0x3e, 0xac, 0x8e, 0xca, 0xee, 0xf6, 0x71, 0x13, 0xa6, 0x8e, + 0x69, 0xd7, 0xeb, 0xe1, 0xb5, 0x00, 0x3d, 0xdc, 0xa1, 0x5d, 0x89, 0xfb, 0x08, 0x2f, 0x10, 0x24, + 0x87, 0x7a, 0xc3, 0xd4, 0x63, 0xaa, 0xf6, 0x18, 0xe6, 0x8d, 0x4e, 0x5d, 0x55, 0x1a, 0xb2, 0x57, + 0x3c, 0xde, 0xf6, 0x48, 0x3e, 0x17, 0x20, 0x75, 0x85, 0x7b, 0x7a, 0x15, 0x9b, 0x33, 0x7a, 0x97, + 0xc2, 0x8f, 0x93, 0xb0, 0x30, 0x04, 0xc5, 0x17, 0xc3, 0x7b, 0x10, 0x35, 0x4c, 0xe5, 0x84, 0xd8, + 0x74, 0x10, 0xc4, 0x7a, 0x10, 0x10, 0x8e, 0xab, 0x87, 0x22, 0x62, 0xf4, 0xad, 0x71, 0x0d, 0xe6, + 0x58, 0x50, 0xa2, 0xb6, 0x74, 0x53, 0xb1, 0x9f, 0xb4, 0xe3, 0x33, 0x3c, 0x72, 0x36, 0x58, 0x65, + 0x0b, 0x9e, 0x9b, 0x14, 0x3e, 0xee, 0x59, 0xb1, 0x39, 0xd6, 0x0b, 0xb9, 0x49, 0x6c, 0xc2, 0xef, + 0x6c, 0xb8, 0x37, 0xff, 0x36, 0xb1, 0x09, 0xbb, 0x57, 0x3d, 0x05, 0xe6, 0x86, 0xce, 0x40, 0x7c, + 0x5d, 0x2e, 0x6e, 0xb7, 0x0d, 0xd1, 0x13, 0xa2, 0x2a, 0x4d, 0x99, 0x1c, 0xd9, 0xd4, 0x94, 0xd9, + 0xa0, 0xe7, 0xa3, 0x78, 0x36, 0x9f, 0xf0, 0xa0, 0x7a, 0xaf, 0x40, 0xa6, 0xe6, 0xbd, 0x02, 0x52, + 0x84, 0xfb, 0x14, 0x98, 0x0b, 0x13, 0xe2, 0x07, 0xb0, 0xe0, 0x44, 0xa9, 0xd3, 0x23, 0xdd, 0xa4, + 0x4e, 0x98, 0xe9, 0x33, 0xc3, 0xcc, 0x73, 0xa7, 0x2d, 0xee, 0xc3, 0xa4, 0xc2, 0x6f, 0x08, 0x56, + 0xfd, 0xa6, 0xef, 0x19, 0xa7, 0xe9, 0xef, 0xed, 0xe4, 0xe4, 0x5f, 0xd0, 0x49, 0x61, 0x03, 0x56, + 0xfd, 0xe6, 0xd3, 0xf8, 0x8d, 0x0a, 0x22, 0xcc, 0x57, 0x95, 0x96, 0xb6, 0xa5, 0xea, 0xf5, 0x71, + 0xf5, 0x10, 0x60, 0xae, 0xde, 0xb5, 0xa9, 0x25, 0xdb, 0xba, 0x6c, 0x29, 0x2d, 0x67, 0xa4, 0x86, + 0xa5, 0x59, 0x2e, 0xac, 0xe9, 0x2c, 0x84, 0x50, 0x86, 0xe8, 0xeb, 0x50, 0xee, 0x14, 0xb8, 0x0c, + 0x17, 0xd9, 0x56, 0x95, 0xa6, 0x1b, 0x6d, 0xfa, 0x98, 0x76, 0xc5, 0x26, 0x5e, 0x86, 0x10, 0x8b, + 0x42, 0xec, 0x8e, 0x49, 0xdd, 0x50, 0xaf, 0x05, 0x82, 0x04, 0x53, 0x92, 0xae, 0x52, 0x5f, 0x20, + 0x31, 0x98, 0xb6, 0x15, 0x5b, 0xa5, 0xee, 0x4c, 0x77, 0x16, 0x38, 0x05, 0xb3, 0x4d, 0x6a, 0x35, + 0x4c, 0xc5, 0x60, 0x7c, 0xc7, 0x7d, 0x74, 0x7a, 0x45, 0xc2, 0xdb, 0x90, 0x78, 0xa7, 0x43, 0xcd, + 0x6e, 0xd9, 0x24, 0x9a, 0x4d, 0xea, 0x2a, 0x65, 0x19, 0x4e, 0xc7, 0xf0, 0x4d, 0xc0, 0x47, 0x1d, + 0x55, 0x95, 0x4d, 0x6a, 0xe9, 0x1d, 0xb3, 0x41, 0xe5, 0x9e, 0xbc, 0x51, 0xa6, 0x91, 0x5c, 0x05, + 0xe3, 0x03, 0xc2, 0x3e, 0x24, 0x7d, 0x63, 0xb9, 0x7b, 0xce, 0xc2, 0xb4, 0xc9, 0x04, 0xee, 0xe8, + 0xfb, 0x87, 0x6f, 0x5b, 0x99, 0x8b, 0xe4, 0xd8, 0xa5, 0x09, 0x24, 0x46, 0x77, 0x19, 0x2f, 0xc1, + 0x22, 0x1b, 0xd5, 0x85, 0xdd, 0xf2, 0xc0, 0xa4, 0x8e, 0x41, 0xd4, 0x53, 0x48, 0xd5, 0x82, 0xbc, + 0x9e, 0xcb, 0x6f, 0x44, 0xd1, 0xa0, 0x34, 0x9f, 0xdb, 0xb8, 0x1b, 0x9d, 0x48, 0xab, 0xb0, 0x3c, + 0xee, 0x88, 0x32, 0x2f, 0x9f, 0xb7, 0xc0, 0x93, 0x56, 0x76, 0x8a, 0xd5, 0xf5, 0xbc, 0xfc, 0x40, + 0xdc, 0x2d, 0x45, 0x11, 0x4e, 0xc1, 0x32, 0x97, 0x96, 0x1f, 0x3e, 0x2c, 0xef, 0x96, 0xe4, 0xa2, + 0x54, 0xda, 0x2e, 0xed, 0xd7, 0xc4, 0xc2, 0x6e, 0xd5, 0xb1, 0x98, 0x48, 0x7f, 0x00, 0xc9, 0x31, + 0xf3, 0x15, 0xcf, 0x41, 0x88, 0x07, 0xd8, 0x7f, 0xb8, 0x5f, 0x8a, 0x5e, 0xc0, 0x57, 0x00, 0xf3, + 0xe5, 0xe3, 0x3b, 0xb9, 0xff, 0xcb, 0x95, 0xd2, 0x9e, 0x97, 0x67, 0x09, 0x16, 0xb9, 0x5c, 0x2a, + 0x3c, 0x92, 0x2b, 0x07, 0x5b, 0xbb, 0x62, 0x51, 0xde, 0x29, 0x1d, 0x46, 0x27, 0xf2, 0xbf, 0x2c, + 0xc0, 0xa4, 0x58, 0xd8, 0xc3, 0xdf, 0x20, 0x58, 0xf4, 0xa1, 0x12, 0x38, 0x1b, 0xf0, 0xb5, 0xf4, + 0xda, 0x9f, 0xc8, 0x05, 0x77, 0x70, 0x7a, 0x2c, 0xdc, 0xfa, 0xe4, 0xa7, 0x5f, 0xbf, 0x98, 0xb8, + 0x8e, 0xaf, 0x32, 0xa2, 0xfc, 0x31, 0x3b, 0x2d, 0xf7, 0x5d, 0x16, 0x6a, 0x65, 0xd3, 0xcf, 0xb3, + 0xd6, 0x00, 0xa2, 0x2f, 0x11, 0x2c, 0x0c, 0x3d, 0x68, 0xf8, 0x96, 0x6f, 0xda, 0x51, 0xa4, 0x24, + 0x11, 0x84, 0x07, 0x09, 0x59, 0x0e, 0xec, 0x06, 0xbe, 0xee, 0x07, 0x6c, 0x10, 0x57, 0x36, 0xfd, + 0x1c, 0x7f, 0x85, 0x20, 0xe6, 0x37, 0x20, 0xb1, 0x7f, 0x51, 0xc6, 0x30, 0xd9, 0x60, 0x00, 0x73, + 0x1c, 0x60, 0x5a, 0x08, 0x56, 0xb9, 0x4d, 0x94, 0xc6, 0x2f, 0x11, 0xc4, 0x0e, 0x8c, 0xe6, 0x30, + 0xc2, 0x20, 0xf9, 0x82, 0x81, 0xca, 0x73, 0x50, 0x37, 0x13, 0x41, 0xab, 0xc6, 0x60, 0x7d, 0x8e, + 0x20, 0xe6, 0x37, 0x70, 0x47, 0x14, 0x6e, 0x0c, 0x77, 0x4c, 0x5c, 0x19, 0x7a, 0xd1, 0x4a, 0xec, + 0xd7, 0x95, 0xd7, 0xcc, 0x74, 0xe0, 0x66, 0xfe, 0x80, 0xe0, 0x8a, 0x3f, 0x2f, 0xc3, 0xf9, 0xf3, + 0x53, 0xc8, 0xc4, 0xed, 0x73, 0xf9, 0xb8, 0x57, 0x63, 0x83, 0x83, 0xce, 0xe0, 0x9b, 0x01, 0x41, + 0x67, 0x19, 0xe5, 0xc3, 0xdf, 0x22, 0x88, 0xf9, 0x51, 0xbe, 0x11, 0xd5, 0x1c, 0xc3, 0x0e, 0x13, + 0x01, 0xb9, 0xa6, 0xf0, 0x5f, 0x0e, 0x34, 0x87, 0x33, 0xc1, 0x80, 0x72, 0x9c, 0xac, 0xc8, 0xdf, + 0x21, 0x58, 0x1a, 0x41, 0x29, 0xf0, 0xed, 0xc0, 0x97, 0xe6, 0x4f, 0x00, 0xfe, 0x1f, 0x07, 0xbc, + 0x2e, 0x9c, 0xab, 0xb2, 0xec, 0xa8, 0xbe, 0x42, 0xb0, 0x34, 0x82, 0x1b, 0x8c, 0x40, 0x3c, 0x9e, + 0x49, 0x8c, 0x3c, 0xb0, 0x6e, 0x49, 0xd3, 0xe7, 0x2d, 0xe9, 0x4b, 0x04, 0x33, 0x1e, 0x77, 0xc0, + 0xff, 0xf1, 0x2f, 0x47, 0x3f, 0x4b, 0x49, 0x5c, 0x3d, 0xc3, 0xca, 0x3d, 0x8d, 0xf7, 0x38, 0xa2, + 0x3b, 0x42, 0x2e, 0xe8, 0xcd, 0xb6, 0xdc, 0x08, 0xac, 0x6e, 0x2f, 0x10, 0x84, 0xcb, 0xd4, 0x16, + 0x49, 0xbb, 0xc2, 0xff, 0x0b, 0xc1, 0x42, 0x6f, 0x52, 0xe7, 0x18, 0x9e, 0x2a, 0x3d, 0x60, 0x97, + 0x07, 0x6c, 0x1c, 0xad, 0xf0, 0x16, 0x07, 0xb2, 0x29, 0xdc, 0xe5, 0x40, 0x3c, 0xa2, 0x71, 0x06, + 0x98, 0x56, 0x6f, 0xf2, 0xcf, 0x10, 0x84, 0xab, 0xe3, 0xd0, 0x54, 0x83, 0xa3, 0x29, 0x72, 0x34, + 0xf7, 0xcf, 0x87, 0xc6, 0xea, 0x89, 0xcf, 0xca, 0xf3, 0x3d, 0x02, 0x5c, 0xa3, 0x16, 0x17, 0x52, + 0xb3, 0xad, 0x58, 0x96, 0xa2, 0x6b, 0x16, 0x5e, 0x1b, 0x48, 0x39, 0x6c, 0xe2, 0x81, 0xbb, 0x11, + 0xc0, 0xd2, 0xed, 0xa3, 0xc8, 0x01, 0x17, 0x85, 0x37, 0xce, 0x03, 0xd8, 0x1e, 0x8a, 0xc7, 0x60, + 0x7f, 0x8d, 0x60, 0xd1, 0x87, 0xbf, 0x8d, 0xa0, 0x0d, 0xa3, 0x59, 0xe3, 0x08, 0xda, 0x30, 0x86, + 0x1a, 0x0a, 0x6b, 0x7c, 0x17, 0x82, 0xb0, 0xc2, 0x76, 0xc1, 0xc9, 0xdf, 0xe6, 0xd3, 0x61, 0xf3, + 0x4d, 0x94, 0xde, 0xaa, 0xc3, 0x52, 0x43, 0x6f, 0xfb, 0x25, 0xd8, 0x9a, 0x61, 0x5b, 0x62, 0xf7, + 0xae, 0x82, 0xde, 0xbd, 0xeb, 0x1a, 0xb4, 0x74, 0x95, 0x68, 0xad, 0x8c, 0x6e, 0xb6, 0xb2, 0x2d, + 0xaa, 0xf1, 0x5b, 0x99, 0x75, 0x54, 0xc4, 0x50, 0xac, 0xbe, 0xff, 0x10, 0xef, 0xf1, 0x8f, 0xdf, + 0x11, 0xaa, 0x5f, 0xe4, 0x76, 0xb7, 0xff, 0x08, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xae, 0xd0, 0x13, + 0x6a, 0x14, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go new file mode 100644 index 0000000..55f84e3 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go @@ -0,0 +1,338 @@ +// Code generated by protoc-gen-go. +// source: google/iam/v1/iam_policy.proto +// DO NOT EDIT! + +/* +Package iam is a generated protocol buffer package. + +It is generated from these files: + google/iam/v1/iam_policy.proto + google/iam/v1/policy.proto + +It has these top-level messages: + SetIamPolicyRequest + GetIamPolicyRequest + TestIamPermissionsRequest + TestIamPermissionsResponse + Policy + Binding + PolicyDelta + BindingDelta +*/ +package iam + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Request message for `SetIamPolicy` method. +type SetIamPolicyRequest struct { + // REQUIRED: The resource for which the policy is being specified. + // `resource` is usually specified as a path. For example, a Project + // resource is specified as `projects/{project}`. + Resource string `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` + // REQUIRED: The complete policy to be applied to the `resource`. The size of + // the policy is limited to a few 10s of KB. An empty policy is a + // valid policy but certain Cloud Platform services (such as Projects) + // might reject them. + Policy *Policy `protobuf:"bytes,2,opt,name=policy" json:"policy,omitempty"` +} + +func (m *SetIamPolicyRequest) Reset() { *m = SetIamPolicyRequest{} } +func (m *SetIamPolicyRequest) String() string { return proto.CompactTextString(m) } +func (*SetIamPolicyRequest) ProtoMessage() {} +func (*SetIamPolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *SetIamPolicyRequest) GetResource() string { + if m != nil { + return m.Resource + } + return "" +} + +func (m *SetIamPolicyRequest) GetPolicy() *Policy { + if m != nil { + return m.Policy + } + return nil +} + +// Request message for `GetIamPolicy` method. +type GetIamPolicyRequest struct { + // REQUIRED: The resource for which the policy is being requested. + // `resource` is usually specified as a path. For example, a Project + // resource is specified as `projects/{project}`. + Resource string `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *GetIamPolicyRequest) Reset() { *m = GetIamPolicyRequest{} } +func (m *GetIamPolicyRequest) String() string { return proto.CompactTextString(m) } +func (*GetIamPolicyRequest) ProtoMessage() {} +func (*GetIamPolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *GetIamPolicyRequest) GetResource() string { + if m != nil { + return m.Resource + } + return "" +} + +// Request message for `TestIamPermissions` method. +type TestIamPermissionsRequest struct { + // REQUIRED: The resource for which the policy detail is being requested. + // `resource` is usually specified as a path. For example, a Project + // resource is specified as `projects/{project}`. + Resource string `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` + // The set of permissions to check for the `resource`. Permissions with + // wildcards (such as '*' or 'storage.*') are not allowed. For more + // information see + // [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions). + Permissions []string `protobuf:"bytes,2,rep,name=permissions" json:"permissions,omitempty"` +} + +func (m *TestIamPermissionsRequest) Reset() { *m = TestIamPermissionsRequest{} } +func (m *TestIamPermissionsRequest) String() string { return proto.CompactTextString(m) } +func (*TestIamPermissionsRequest) ProtoMessage() {} +func (*TestIamPermissionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *TestIamPermissionsRequest) GetResource() string { + if m != nil { + return m.Resource + } + return "" +} + +func (m *TestIamPermissionsRequest) GetPermissions() []string { + if m != nil { + return m.Permissions + } + return nil +} + +// Response message for `TestIamPermissions` method. +type TestIamPermissionsResponse struct { + // A subset of `TestPermissionsRequest.permissions` that the caller is + // allowed. + Permissions []string `protobuf:"bytes,1,rep,name=permissions" json:"permissions,omitempty"` +} + +func (m *TestIamPermissionsResponse) Reset() { *m = TestIamPermissionsResponse{} } +func (m *TestIamPermissionsResponse) String() string { return proto.CompactTextString(m) } +func (*TestIamPermissionsResponse) ProtoMessage() {} +func (*TestIamPermissionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *TestIamPermissionsResponse) GetPermissions() []string { + if m != nil { + return m.Permissions + } + return nil +} + +func init() { + proto.RegisterType((*SetIamPolicyRequest)(nil), "google.iam.v1.SetIamPolicyRequest") + proto.RegisterType((*GetIamPolicyRequest)(nil), "google.iam.v1.GetIamPolicyRequest") + proto.RegisterType((*TestIamPermissionsRequest)(nil), "google.iam.v1.TestIamPermissionsRequest") + proto.RegisterType((*TestIamPermissionsResponse)(nil), "google.iam.v1.TestIamPermissionsResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for IAMPolicy service + +type IAMPolicyClient interface { + // Sets the access control policy on the specified resource. Replaces any + // existing policy. + SetIamPolicy(ctx context.Context, in *SetIamPolicyRequest, opts ...grpc.CallOption) (*Policy, error) + // Gets the access control policy for a resource. + // Returns an empty policy if the resource exists and does not have a policy + // set. + GetIamPolicy(ctx context.Context, in *GetIamPolicyRequest, opts ...grpc.CallOption) (*Policy, error) + // Returns permissions that a caller has on the specified resource. + // If the resource does not exist, this will return an empty set of + // permissions, not a NOT_FOUND error. + TestIamPermissions(ctx context.Context, in *TestIamPermissionsRequest, opts ...grpc.CallOption) (*TestIamPermissionsResponse, error) +} + +type iAMPolicyClient struct { + cc *grpc.ClientConn +} + +func NewIAMPolicyClient(cc *grpc.ClientConn) IAMPolicyClient { + return &iAMPolicyClient{cc} +} + +func (c *iAMPolicyClient) SetIamPolicy(ctx context.Context, in *SetIamPolicyRequest, opts ...grpc.CallOption) (*Policy, error) { + out := new(Policy) + err := grpc.Invoke(ctx, "/google.iam.v1.IAMPolicy/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMPolicyClient) GetIamPolicy(ctx context.Context, in *GetIamPolicyRequest, opts ...grpc.CallOption) (*Policy, error) { + out := new(Policy) + err := grpc.Invoke(ctx, "/google.iam.v1.IAMPolicy/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMPolicyClient) TestIamPermissions(ctx context.Context, in *TestIamPermissionsRequest, opts ...grpc.CallOption) (*TestIamPermissionsResponse, error) { + out := new(TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.iam.v1.IAMPolicy/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for IAMPolicy service + +type IAMPolicyServer interface { + // Sets the access control policy on the specified resource. Replaces any + // existing policy. + SetIamPolicy(context.Context, *SetIamPolicyRequest) (*Policy, error) + // Gets the access control policy for a resource. + // Returns an empty policy if the resource exists and does not have a policy + // set. + GetIamPolicy(context.Context, *GetIamPolicyRequest) (*Policy, error) + // Returns permissions that a caller has on the specified resource. + // If the resource does not exist, this will return an empty set of + // permissions, not a NOT_FOUND error. + TestIamPermissions(context.Context, *TestIamPermissionsRequest) (*TestIamPermissionsResponse, error) +} + +func RegisterIAMPolicyServer(s *grpc.Server, srv IAMPolicyServer) { + s.RegisterService(&_IAMPolicy_serviceDesc, srv) +} + +func _IAMPolicy_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMPolicyServer).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.v1.IAMPolicy/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMPolicyServer).SetIamPolicy(ctx, req.(*SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAMPolicy_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMPolicyServer).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.v1.IAMPolicy/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMPolicyServer).GetIamPolicy(ctx, req.(*GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAMPolicy_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMPolicyServer).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.v1.IAMPolicy/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMPolicyServer).TestIamPermissions(ctx, req.(*TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _IAMPolicy_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.iam.v1.IAMPolicy", + HandlerType: (*IAMPolicyServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SetIamPolicy", + Handler: _IAMPolicy_SetIamPolicy_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _IAMPolicy_GetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _IAMPolicy_TestIamPermissions_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/iam/v1/iam_policy.proto", +} + +func init() { proto.RegisterFile("google/iam/v1/iam_policy.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 396 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0xcf, 0x4a, 0xe3, 0x40, + 0x18, 0x67, 0x52, 0x28, 0xdb, 0xe9, 0xee, 0xc2, 0xa6, 0x2c, 0xd4, 0x20, 0x25, 0x8c, 0x1e, 0xd2, + 0x80, 0x13, 0x53, 0x6f, 0x15, 0x05, 0xeb, 0x21, 0xf4, 0x20, 0x94, 0x2a, 0x82, 0x5e, 0x74, 0xac, + 0x43, 0x18, 0x48, 0x32, 0x31, 0x33, 0x2d, 0x88, 0x78, 0xf1, 0x15, 0xf4, 0xe4, 0x23, 0xf8, 0x3a, + 0xbe, 0x82, 0x0f, 0xe1, 0x51, 0x92, 0x89, 0x35, 0x6d, 0xaa, 0x54, 0xf0, 0x54, 0x3a, 0xf3, 0xfb, + 0xf7, 0xfd, 0xbe, 0x0c, 0x6c, 0xf9, 0x9c, 0xfb, 0x01, 0x75, 0x18, 0x09, 0x9d, 0x89, 0x9b, 0xfe, + 0x9c, 0xc5, 0x3c, 0x60, 0xa3, 0x6b, 0x1c, 0x27, 0x5c, 0x72, 0xfd, 0x8f, 0xba, 0xc7, 0x8c, 0x84, + 0x78, 0xe2, 0x1a, 0xab, 0x39, 0x9c, 0xc4, 0xcc, 0x21, 0x51, 0xc4, 0x25, 0x91, 0x8c, 0x47, 0x42, + 0x81, 0x0d, 0x63, 0x56, 0xac, 0x28, 0x84, 0xce, 0x61, 0xe3, 0x90, 0xca, 0x3e, 0x09, 0x07, 0xd9, + 0xe9, 0x90, 0x5e, 0x8d, 0xa9, 0x90, 0xba, 0x01, 0x7f, 0x25, 0x54, 0xf0, 0x71, 0x32, 0xa2, 0x4d, + 0x60, 0x02, 0xab, 0x36, 0x9c, 0xfe, 0xd7, 0x37, 0x60, 0x55, 0x49, 0x34, 0x35, 0x13, 0x58, 0xf5, + 0xce, 0x7f, 0x3c, 0x13, 0x06, 0xe7, 0x4a, 0x39, 0x08, 0xb9, 0xb0, 0xe1, 0x7d, 0xcf, 0x01, 0x9d, + 0xc0, 0x95, 0x23, 0x2a, 0x32, 0x0e, 0x4d, 0x42, 0x26, 0x44, 0x3a, 0xcc, 0x32, 0xd1, 0x4c, 0x58, + 0x8f, 0x3f, 0x18, 0x4d, 0xcd, 0xac, 0x58, 0xb5, 0x61, 0xf1, 0x08, 0xed, 0x42, 0x63, 0x91, 0xb4, + 0x88, 0x79, 0x24, 0x4a, 0x7c, 0x50, 0xe2, 0x77, 0x1e, 0x2a, 0xb0, 0xd6, 0xdf, 0x3b, 0x50, 0xb3, + 0xe8, 0x12, 0xfe, 0x2e, 0xb6, 0xa7, 0xa3, 0xb9, 0x2a, 0x16, 0x54, 0x6b, 0x2c, 0xae, 0x0b, 0xb5, + 0xef, 0x9e, 0x5f, 0xee, 0xb5, 0x35, 0xd4, 0x4a, 0x57, 0x74, 0xf3, 0x3e, 0xd1, 0x8e, 0x6d, 0xdf, + 0x76, 0x45, 0x41, 0xa5, 0x0b, 0xec, 0xd4, 0xd5, 0xfb, 0xca, 0xd5, 0xfb, 0x11, 0x57, 0x7f, 0xce, + 0xf5, 0x11, 0x40, 0xbd, 0x5c, 0x9d, 0x6e, 0xcd, 0x09, 0x7f, 0xba, 0x38, 0xa3, 0xbd, 0x04, 0x52, + 0xed, 0x01, 0x39, 0x59, 0xac, 0x36, 0x5a, 0x2f, 0xc7, 0x92, 0x25, 0x56, 0x17, 0xd8, 0xbd, 0x18, + 0xfe, 0x1b, 0xf1, 0x70, 0xd6, 0xa0, 0xf7, 0x77, 0x9a, 0x7f, 0x90, 0x7e, 0xeb, 0x03, 0x70, 0xba, + 0x99, 0x03, 0x7c, 0x1e, 0x90, 0xc8, 0xc7, 0x3c, 0xf1, 0x1d, 0x9f, 0x46, 0xd9, 0x4b, 0x70, 0xd4, + 0x15, 0x89, 0x99, 0xc8, 0x1f, 0xca, 0x36, 0x23, 0xe1, 0x2b, 0x00, 0x4f, 0x5a, 0xc3, 0x53, 0xac, + 0xfd, 0x80, 0x8f, 0x2f, 0x71, 0x9f, 0x84, 0xf8, 0xd8, 0xbd, 0xa8, 0x66, 0xac, 0xad, 0xb7, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x6c, 0x3a, 0x2b, 0x4d, 0xaa, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go new file mode 100644 index 0000000..36f3b53 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go @@ -0,0 +1,270 @@ +// Code generated by protoc-gen-go. +// source: google/iam/v1/policy.proto +// DO NOT EDIT! + +package iam + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The type of action performed on a Binding in a policy. +type BindingDelta_Action int32 + +const ( + // Unspecified. + BindingDelta_ACTION_UNSPECIFIED BindingDelta_Action = 0 + // Addition of a Binding. + BindingDelta_ADD BindingDelta_Action = 1 + // Removal of a Binding. + BindingDelta_REMOVE BindingDelta_Action = 2 +) + +var BindingDelta_Action_name = map[int32]string{ + 0: "ACTION_UNSPECIFIED", + 1: "ADD", + 2: "REMOVE", +} +var BindingDelta_Action_value = map[string]int32{ + "ACTION_UNSPECIFIED": 0, + "ADD": 1, + "REMOVE": 2, +} + +func (x BindingDelta_Action) String() string { + return proto.EnumName(BindingDelta_Action_name, int32(x)) +} +func (BindingDelta_Action) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0} } + +// Defines an Identity and Access Management (IAM) policy. It is used to +// specify access control policies for Cloud Platform resources. +// +// +// A `Policy` consists of a list of `bindings`. A `Binding` binds a list of +// `members` to a `role`, where the members can be user accounts, Google groups, +// Google domains, and service accounts. A `role` is a named list of permissions +// defined by IAM. +// +// **Example** +// +// { +// "bindings": [ +// { +// "role": "roles/owner", +// "members": [ +// "user:mike@example.com", +// "group:admins@example.com", +// "domain:google.com", +// "serviceAccount:my-other-app@appspot.gserviceaccount.com", +// ] +// }, +// { +// "role": "roles/viewer", +// "members": ["user:sean@example.com"] +// } +// ] +// } +// +// For a description of IAM and its features, see the +// [IAM developer's guide](https://cloud.google.com/iam). +type Policy struct { + // Version of the `Policy`. The default version is 0. + Version int32 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` + // Associates a list of `members` to a `role`. + // Multiple `bindings` must not be specified for the same `role`. + // `bindings` with no members will result in an error. + Bindings []*Binding `protobuf:"bytes,4,rep,name=bindings" json:"bindings,omitempty"` + // `etag` is used for optimistic concurrency control as a way to help + // prevent simultaneous updates of a policy from overwriting each other. + // It is strongly suggested that systems make use of the `etag` in the + // read-modify-write cycle to perform policy updates in order to avoid race + // conditions: An `etag` is returned in the response to `getIamPolicy`, and + // systems are expected to put that etag in the request to `setIamPolicy` to + // ensure that their change will be applied to the same version of the policy. + // + // If no `etag` is provided in the call to `setIamPolicy`, then the existing + // policy is overwritten blindly. + Etag []byte `protobuf:"bytes,3,opt,name=etag,proto3" json:"etag,omitempty"` +} + +func (m *Policy) Reset() { *m = Policy{} } +func (m *Policy) String() string { return proto.CompactTextString(m) } +func (*Policy) ProtoMessage() {} +func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Policy) GetVersion() int32 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *Policy) GetBindings() []*Binding { + if m != nil { + return m.Bindings + } + return nil +} + +func (m *Policy) GetEtag() []byte { + if m != nil { + return m.Etag + } + return nil +} + +// Associates `members` with a `role`. +type Binding struct { + // Role that is assigned to `members`. + // For example, `roles/viewer`, `roles/editor`, or `roles/owner`. + // Required + Role string `protobuf:"bytes,1,opt,name=role" json:"role,omitempty"` + // Specifies the identities requesting access for a Cloud Platform resource. + // `members` can have the following values: + // + // * `allUsers`: A special identifier that represents anyone who is + // on the internet; with or without a Google account. + // + // * `allAuthenticatedUsers`: A special identifier that represents anyone + // who is authenticated with a Google account or a service account. + // + // * `user:{emailid}`: An email address that represents a specific Google + // account. For example, `alice@gmail.com` or `joe@example.com`. + // + // + // * `serviceAccount:{emailid}`: An email address that represents a service + // account. For example, `my-other-app@appspot.gserviceaccount.com`. + // + // * `group:{emailid}`: An email address that represents a Google group. + // For example, `admins@example.com`. + // + // * `domain:{domain}`: A Google Apps domain name that represents all the + // users of that domain. For example, `google.com` or `example.com`. + // + // + Members []string `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"` +} + +func (m *Binding) Reset() { *m = Binding{} } +func (m *Binding) String() string { return proto.CompactTextString(m) } +func (*Binding) ProtoMessage() {} +func (*Binding) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *Binding) GetRole() string { + if m != nil { + return m.Role + } + return "" +} + +func (m *Binding) GetMembers() []string { + if m != nil { + return m.Members + } + return nil +} + +// The difference delta between two policies. +type PolicyDelta struct { + // The delta for Bindings between two policies. + BindingDeltas []*BindingDelta `protobuf:"bytes,1,rep,name=binding_deltas,json=bindingDeltas" json:"binding_deltas,omitempty"` +} + +func (m *PolicyDelta) Reset() { *m = PolicyDelta{} } +func (m *PolicyDelta) String() string { return proto.CompactTextString(m) } +func (*PolicyDelta) ProtoMessage() {} +func (*PolicyDelta) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *PolicyDelta) GetBindingDeltas() []*BindingDelta { + if m != nil { + return m.BindingDeltas + } + return nil +} + +// One delta entry for Binding. Each individual change (only one member in each +// entry) to a binding will be a separate entry. +type BindingDelta struct { + // The action that was performed on a Binding. + // Required + Action BindingDelta_Action `protobuf:"varint,1,opt,name=action,enum=google.iam.v1.BindingDelta_Action" json:"action,omitempty"` + // Role that is assigned to `members`. + // For example, `roles/viewer`, `roles/editor`, or `roles/owner`. + // Required + Role string `protobuf:"bytes,2,opt,name=role" json:"role,omitempty"` + // A single identity requesting access for a Cloud Platform resource. + // Follows the same format of Binding.members. + // Required + Member string `protobuf:"bytes,3,opt,name=member" json:"member,omitempty"` +} + +func (m *BindingDelta) Reset() { *m = BindingDelta{} } +func (m *BindingDelta) String() string { return proto.CompactTextString(m) } +func (*BindingDelta) ProtoMessage() {} +func (*BindingDelta) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *BindingDelta) GetAction() BindingDelta_Action { + if m != nil { + return m.Action + } + return BindingDelta_ACTION_UNSPECIFIED +} + +func (m *BindingDelta) GetRole() string { + if m != nil { + return m.Role + } + return "" +} + +func (m *BindingDelta) GetMember() string { + if m != nil { + return m.Member + } + return "" +} + +func init() { + proto.RegisterType((*Policy)(nil), "google.iam.v1.Policy") + proto.RegisterType((*Binding)(nil), "google.iam.v1.Binding") + proto.RegisterType((*PolicyDelta)(nil), "google.iam.v1.PolicyDelta") + proto.RegisterType((*BindingDelta)(nil), "google.iam.v1.BindingDelta") + proto.RegisterEnum("google.iam.v1.BindingDelta_Action", BindingDelta_Action_name, BindingDelta_Action_value) +} + +func init() { proto.RegisterFile("google/iam/v1/policy.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 387 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0x8f, 0xd3, 0x30, + 0x10, 0xc5, 0xed, 0x92, 0xd2, 0xd9, 0x0f, 0x15, 0x23, 0x55, 0xd1, 0xc2, 0xa1, 0xca, 0x29, 0x27, + 0x87, 0x16, 0x21, 0x24, 0x38, 0x35, 0x4d, 0x40, 0x39, 0xb0, 0x1b, 0x0c, 0xec, 0x81, 0xcb, 0xca, + 0x69, 0x2d, 0xcb, 0x28, 0xb6, 0xa3, 0x24, 0x54, 0xe2, 0x2f, 0x21, 0xf1, 0xff, 0x38, 0xa2, 0xd8, + 0xee, 0xaa, 0x95, 0x10, 0xb7, 0x79, 0x79, 0xef, 0x65, 0xde, 0xcc, 0x18, 0xae, 0x85, 0x31, 0xa2, + 0xe6, 0x89, 0x64, 0x2a, 0xd9, 0x2f, 0x93, 0xc6, 0xd4, 0x72, 0xfb, 0x93, 0x34, 0xad, 0xe9, 0x0d, + 0xbe, 0x74, 0x1c, 0x91, 0x4c, 0x91, 0xfd, 0xf2, 0xfa, 0x85, 0x97, 0xb2, 0x46, 0x26, 0x4c, 0x6b, + 0xd3, 0xb3, 0x5e, 0x1a, 0xdd, 0x39, 0x71, 0xf4, 0x1d, 0x82, 0xd2, 0x9a, 0x71, 0x08, 0x93, 0x3d, + 0x6f, 0x3b, 0x69, 0x74, 0x88, 0x16, 0x28, 0x7e, 0x4c, 0x0f, 0x10, 0xaf, 0xe0, 0x49, 0x25, 0xf5, + 0x4e, 0x6a, 0xd1, 0x85, 0x67, 0x8b, 0x71, 0x7c, 0xbe, 0x9a, 0x93, 0x93, 0x1e, 0x24, 0x75, 0x34, + 0x7d, 0xd0, 0x61, 0x0c, 0x67, 0xbc, 0x67, 0x22, 0x1c, 0x2f, 0x50, 0x7c, 0x41, 0x6d, 0x1d, 0xbd, + 0x81, 0x89, 0x17, 0x0e, 0x74, 0x6b, 0x6a, 0x6e, 0x3b, 0x4d, 0xa9, 0xad, 0x87, 0x00, 0x8a, 0xab, + 0x8a, 0xb7, 0x5d, 0x38, 0x5a, 0x8c, 0xe3, 0x29, 0x3d, 0xc0, 0xe8, 0x13, 0x9c, 0xbb, 0x90, 0x19, + 0xaf, 0x7b, 0x86, 0x53, 0xb8, 0xf2, 0x7d, 0xee, 0x77, 0xc3, 0x87, 0x2e, 0x44, 0x36, 0xd5, 0xf3, + 0x7f, 0xa7, 0xb2, 0x26, 0x7a, 0x59, 0x1d, 0xa1, 0x2e, 0xfa, 0x8d, 0xe0, 0xe2, 0x98, 0xc7, 0x6f, + 0x21, 0x60, 0xdb, 0xfe, 0x30, 0xfd, 0xd5, 0x2a, 0xfa, 0xcf, 0xcf, 0xc8, 0xda, 0x2a, 0xa9, 0x77, + 0x3c, 0x4c, 0x33, 0x3a, 0x9a, 0x66, 0x0e, 0x81, 0x8b, 0x6f, 0x57, 0x30, 0xa5, 0x1e, 0x45, 0xaf, + 0x21, 0x70, 0x6e, 0x3c, 0x07, 0xbc, 0xde, 0x7c, 0x29, 0x6e, 0x6f, 0xee, 0xbf, 0xde, 0x7c, 0x2e, + 0xf3, 0x4d, 0xf1, 0xbe, 0xc8, 0xb3, 0xd9, 0x23, 0x3c, 0x81, 0xf1, 0x3a, 0xcb, 0x66, 0x08, 0x03, + 0x04, 0x34, 0xff, 0x78, 0x7b, 0x97, 0xcf, 0x46, 0xa9, 0x82, 0xa7, 0x5b, 0xa3, 0x4e, 0x33, 0xa5, + 0x7e, 0x2b, 0xe5, 0x70, 0xc9, 0x12, 0x7d, 0x7b, 0xe9, 0x59, 0x61, 0x6a, 0xa6, 0x05, 0x31, 0xad, + 0x48, 0x04, 0xd7, 0xf6, 0xce, 0x89, 0xa3, 0x58, 0x23, 0x3b, 0xff, 0x66, 0xde, 0x49, 0xa6, 0xfe, + 0x20, 0xf4, 0x6b, 0xf4, 0xec, 0x83, 0x73, 0x6d, 0x6a, 0xf3, 0x63, 0x47, 0x0a, 0xa6, 0xc8, 0xdd, + 0xb2, 0x0a, 0xac, 0xeb, 0xd5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x4a, 0x85, 0x10, 0x68, + 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/logging/type/http_request.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/type/http_request.pb.go new file mode 100644 index 0000000..f0aa78d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/logging/type/http_request.pb.go @@ -0,0 +1,224 @@ +// Code generated by protoc-gen-go. +// source: google/logging/type/http_request.proto +// DO NOT EDIT! + +/* +Package ltype is a generated protocol buffer package. + +It is generated from these files: + google/logging/type/http_request.proto + google/logging/type/log_severity.proto + +It has these top-level messages: + HttpRequest +*/ +package ltype + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A common proto for logging HTTP requests. Only contains semantics +// defined by the HTTP specification. Product-specific logging +// information MUST be defined in a separate message. +type HttpRequest struct { + // The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`, `"POST"`. + RequestMethod string `protobuf:"bytes,1,opt,name=request_method,json=requestMethod" json:"request_method,omitempty"` + // The scheme (http, https), the host name, the path and the query + // portion of the URL that was requested. + // Example: `"http://example.com/some/info?color=red"`. + RequestUrl string `protobuf:"bytes,2,opt,name=request_url,json=requestUrl" json:"request_url,omitempty"` + // The size of the HTTP request message in bytes, including the request + // headers and the request body. + RequestSize int64 `protobuf:"varint,3,opt,name=request_size,json=requestSize" json:"request_size,omitempty"` + // The response code indicating the status of response. + // Examples: 200, 404. + Status int32 `protobuf:"varint,4,opt,name=status" json:"status,omitempty"` + // The size of the HTTP response message sent back to the client, in bytes, + // including the response headers and the response body. + ResponseSize int64 `protobuf:"varint,5,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` + // The user agent sent by the client. Example: + // `"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)"`. + UserAgent string `protobuf:"bytes,6,opt,name=user_agent,json=userAgent" json:"user_agent,omitempty"` + // The IP address (IPv4 or IPv6) of the client that issued the HTTP + // request. Examples: `"192.168.1.1"`, `"FE80::0202:B3FF:FE1E:8329"`. + RemoteIp string `protobuf:"bytes,7,opt,name=remote_ip,json=remoteIp" json:"remote_ip,omitempty"` + // The IP address (IPv4 or IPv6) of the origin server that the request was + // sent to. + ServerIp string `protobuf:"bytes,13,opt,name=server_ip,json=serverIp" json:"server_ip,omitempty"` + // The referer URL of the request, as defined in + // [HTTP/1.1 Header Field Definitions](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). + Referer string `protobuf:"bytes,8,opt,name=referer" json:"referer,omitempty"` + // The request processing latency on the server, from the time the request was + // received until the response was sent. + Latency *google_protobuf1.Duration `protobuf:"bytes,14,opt,name=latency" json:"latency,omitempty"` + // Whether or not a cache lookup was attempted. + CacheLookup bool `protobuf:"varint,11,opt,name=cache_lookup,json=cacheLookup" json:"cache_lookup,omitempty"` + // Whether or not an entity was served from cache + // (with or without validation). + CacheHit bool `protobuf:"varint,9,opt,name=cache_hit,json=cacheHit" json:"cache_hit,omitempty"` + // Whether or not the response was validated with the origin server before + // being served from cache. This field is only meaningful if `cache_hit` is + // True. + CacheValidatedWithOriginServer bool `protobuf:"varint,10,opt,name=cache_validated_with_origin_server,json=cacheValidatedWithOriginServer" json:"cache_validated_with_origin_server,omitempty"` + // The number of HTTP response bytes inserted into cache. Set only when a + // cache fill was attempted. + CacheFillBytes int64 `protobuf:"varint,12,opt,name=cache_fill_bytes,json=cacheFillBytes" json:"cache_fill_bytes,omitempty"` +} + +func (m *HttpRequest) Reset() { *m = HttpRequest{} } +func (m *HttpRequest) String() string { return proto.CompactTextString(m) } +func (*HttpRequest) ProtoMessage() {} +func (*HttpRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *HttpRequest) GetRequestMethod() string { + if m != nil { + return m.RequestMethod + } + return "" +} + +func (m *HttpRequest) GetRequestUrl() string { + if m != nil { + return m.RequestUrl + } + return "" +} + +func (m *HttpRequest) GetRequestSize() int64 { + if m != nil { + return m.RequestSize + } + return 0 +} + +func (m *HttpRequest) GetStatus() int32 { + if m != nil { + return m.Status + } + return 0 +} + +func (m *HttpRequest) GetResponseSize() int64 { + if m != nil { + return m.ResponseSize + } + return 0 +} + +func (m *HttpRequest) GetUserAgent() string { + if m != nil { + return m.UserAgent + } + return "" +} + +func (m *HttpRequest) GetRemoteIp() string { + if m != nil { + return m.RemoteIp + } + return "" +} + +func (m *HttpRequest) GetServerIp() string { + if m != nil { + return m.ServerIp + } + return "" +} + +func (m *HttpRequest) GetReferer() string { + if m != nil { + return m.Referer + } + return "" +} + +func (m *HttpRequest) GetLatency() *google_protobuf1.Duration { + if m != nil { + return m.Latency + } + return nil +} + +func (m *HttpRequest) GetCacheLookup() bool { + if m != nil { + return m.CacheLookup + } + return false +} + +func (m *HttpRequest) GetCacheHit() bool { + if m != nil { + return m.CacheHit + } + return false +} + +func (m *HttpRequest) GetCacheValidatedWithOriginServer() bool { + if m != nil { + return m.CacheValidatedWithOriginServer + } + return false +} + +func (m *HttpRequest) GetCacheFillBytes() int64 { + if m != nil { + return m.CacheFillBytes + } + return 0 +} + +func init() { + proto.RegisterType((*HttpRequest)(nil), "google.logging.type.HttpRequest") +} + +func init() { proto.RegisterFile("google/logging/type/http_request.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 488 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x5b, 0x6b, 0x14, 0x31, + 0x14, 0xc7, 0x99, 0x5e, 0xf6, 0x92, 0xbd, 0x50, 0x22, 0x68, 0x5a, 0xb5, 0xae, 0x15, 0x65, 0x9e, + 0x66, 0xc0, 0xbe, 0x08, 0x3e, 0xb9, 0x8a, 0xb6, 0x52, 0xb1, 0x4c, 0xbd, 0x80, 0x2f, 0x43, 0x76, + 0xf7, 0x6c, 0x26, 0x98, 0x9d, 0xc4, 0x24, 0x53, 0xd9, 0xbe, 0xfa, 0x11, 0xfc, 0x16, 0x7e, 0x4a, + 0x99, 0x93, 0x0c, 0x28, 0xf4, 0x65, 0x21, 0xbf, 0xff, 0xef, 0x3f, 0x67, 0xf6, 0x4c, 0xc8, 0x33, + 0xa1, 0xb5, 0x50, 0x90, 0x2b, 0x2d, 0x84, 0xac, 0x45, 0xee, 0xb7, 0x06, 0xf2, 0xca, 0x7b, 0x53, + 0x5a, 0xf8, 0xd1, 0x80, 0xf3, 0x99, 0xb1, 0xda, 0x6b, 0x7a, 0x27, 0x78, 0x59, 0xf4, 0xb2, 0xd6, + 0x3b, 0x7a, 0x10, 0xcb, 0xdc, 0xc8, 0x9c, 0xd7, 0xb5, 0xf6, 0xdc, 0x4b, 0x5d, 0xbb, 0x50, 0x39, + 0x3a, 0x8e, 0x29, 0x9e, 0x16, 0xcd, 0x3a, 0x5f, 0x35, 0x16, 0x85, 0x90, 0x9f, 0xfc, 0xde, 0x23, + 0xa3, 0x33, 0xef, 0x4d, 0x11, 0x06, 0xd1, 0xa7, 0x64, 0x1a, 0x67, 0x96, 0x1b, 0xf0, 0x95, 0x5e, + 0xb1, 0x64, 0x96, 0xa4, 0xc3, 0x62, 0x12, 0xe9, 0x07, 0x84, 0xf4, 0x11, 0x19, 0x75, 0x5a, 0x63, + 0x15, 0xdb, 0x41, 0x87, 0x44, 0xf4, 0xd9, 0x2a, 0xfa, 0x98, 0x8c, 0x3b, 0xc1, 0xc9, 0x1b, 0x60, + 0xbb, 0xb3, 0x24, 0xdd, 0x2d, 0xba, 0xd2, 0x95, 0xbc, 0x01, 0x7a, 0x97, 0xf4, 0x9c, 0xe7, 0xbe, + 0x71, 0x6c, 0x6f, 0x96, 0xa4, 0xfb, 0x45, 0x3c, 0xd1, 0x27, 0x64, 0x62, 0xc1, 0x19, 0x5d, 0x3b, + 0x08, 0xdd, 0x7d, 0xec, 0x8e, 0x3b, 0x88, 0xe5, 0x87, 0x84, 0x34, 0x0e, 0x6c, 0xc9, 0x05, 0xd4, + 0x9e, 0xf5, 0x70, 0xfe, 0xb0, 0x25, 0xaf, 0x5a, 0x40, 0xef, 0x93, 0xa1, 0x85, 0x8d, 0xf6, 0x50, + 0x4a, 0xc3, 0xfa, 0x98, 0x0e, 0x02, 0x38, 0x37, 0x6d, 0xe8, 0xc0, 0x5e, 0x83, 0x6d, 0xc3, 0x49, + 0x08, 0x03, 0x38, 0x37, 0x94, 0x91, 0xbe, 0x85, 0x35, 0x58, 0xb0, 0x6c, 0x80, 0x51, 0x77, 0xa4, + 0xa7, 0xa4, 0xaf, 0xb8, 0x87, 0x7a, 0xb9, 0x65, 0xd3, 0x59, 0x92, 0x8e, 0x9e, 0x1f, 0x66, 0xf1, + 0x7b, 0x74, 0xcb, 0xcd, 0xde, 0xc4, 0xe5, 0x16, 0x9d, 0xd9, 0xee, 0x61, 0xc9, 0x97, 0x15, 0x94, + 0x4a, 0xeb, 0xef, 0x8d, 0x61, 0xa3, 0x59, 0x92, 0x0e, 0x8a, 0x11, 0xb2, 0x0b, 0x44, 0xed, 0xeb, + 0x04, 0xa5, 0x92, 0x9e, 0x0d, 0x31, 0x1f, 0x20, 0x38, 0x93, 0x9e, 0xbe, 0x27, 0x27, 0x21, 0xbc, + 0xe6, 0x4a, 0xae, 0xb8, 0x87, 0x55, 0xf9, 0x53, 0xfa, 0xaa, 0xd4, 0x56, 0x0a, 0x59, 0x97, 0xe1, + 0xb5, 0x19, 0xc1, 0xd6, 0x31, 0x9a, 0x5f, 0x3a, 0xf1, 0xab, 0xf4, 0xd5, 0x47, 0xd4, 0xae, 0xd0, + 0xa2, 0x29, 0x39, 0x08, 0xcf, 0x5a, 0x4b, 0xa5, 0xca, 0xc5, 0xd6, 0x83, 0x63, 0x63, 0xdc, 0xed, + 0x14, 0xf9, 0x5b, 0xa9, 0xd4, 0xbc, 0xa5, 0xf3, 0x5f, 0x09, 0xb9, 0xb7, 0xd4, 0x9b, 0xec, 0x96, + 0xfb, 0x36, 0x3f, 0xf8, 0xe7, 0xba, 0x5c, 0xb6, 0x7f, 0xfc, 0x32, 0xf9, 0xf6, 0x22, 0x8a, 0x42, + 0x2b, 0x5e, 0x8b, 0x4c, 0x5b, 0x91, 0x0b, 0xa8, 0x71, 0x2d, 0x79, 0x88, 0xb8, 0x91, 0xee, 0xbf, + 0xfb, 0xfd, 0x52, 0xb5, 0xbf, 0x7f, 0x76, 0x0e, 0xdf, 0x85, 0xea, 0x6b, 0xa5, 0x9b, 0x55, 0x76, + 0x11, 0x27, 0x7d, 0xda, 0x1a, 0x58, 0xf4, 0xf0, 0x01, 0xa7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, + 0x6f, 0xb5, 0x28, 0xee, 0x1f, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/logging/type/log_severity.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/type/log_severity.pb.go new file mode 100644 index 0000000..36cbe95 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/logging/type/log_severity.pb.go @@ -0,0 +1,111 @@ +// Code generated by protoc-gen-go. +// source: google/logging/type/log_severity.proto +// DO NOT EDIT! + +package ltype + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The severity of the event described in a log entry, expressed as one of the +// standard severity levels listed below. For your reference, the levels are +// assigned the listed numeric values. The effect of using numeric values other +// than those listed is undefined. +// +// You can filter for log entries by severity. For example, the following +// filter expression will match log entries with severities `INFO`, `NOTICE`, +// and `WARNING`: +// +// severity > DEBUG AND severity <= WARNING +// +// If you are writing log entries, you should map other severity encodings to +// one of these standard levels. For example, you might map all of Java's FINE, +// FINER, and FINEST levels to `LogSeverity.DEBUG`. You can preserve the +// original severity level in the log entry payload if you wish. +type LogSeverity int32 + +const ( + // (0) The log entry has no assigned severity level. + LogSeverity_DEFAULT LogSeverity = 0 + // (100) Debug or trace information. + LogSeverity_DEBUG LogSeverity = 100 + // (200) Routine information, such as ongoing status or performance. + LogSeverity_INFO LogSeverity = 200 + // (300) Normal but significant events, such as start up, shut down, or + // a configuration change. + LogSeverity_NOTICE LogSeverity = 300 + // (400) Warning events might cause problems. + LogSeverity_WARNING LogSeverity = 400 + // (500) Error events are likely to cause problems. + LogSeverity_ERROR LogSeverity = 500 + // (600) Critical events cause more severe problems or outages. + LogSeverity_CRITICAL LogSeverity = 600 + // (700) A person must take an action immediately. + LogSeverity_ALERT LogSeverity = 700 + // (800) One or more systems are unusable. + LogSeverity_EMERGENCY LogSeverity = 800 +) + +var LogSeverity_name = map[int32]string{ + 0: "DEFAULT", + 100: "DEBUG", + 200: "INFO", + 300: "NOTICE", + 400: "WARNING", + 500: "ERROR", + 600: "CRITICAL", + 700: "ALERT", + 800: "EMERGENCY", +} +var LogSeverity_value = map[string]int32{ + "DEFAULT": 0, + "DEBUG": 100, + "INFO": 200, + "NOTICE": 300, + "WARNING": 400, + "ERROR": 500, + "CRITICAL": 600, + "ALERT": 700, + "EMERGENCY": 800, +} + +func (x LogSeverity) String() string { + return proto.EnumName(LogSeverity_name, int32(x)) +} +func (LogSeverity) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func init() { + proto.RegisterEnum("google.logging.type.LogSeverity", LogSeverity_name, LogSeverity_value) +} + +func init() { proto.RegisterFile("google/logging/type/log_severity.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 297 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4b, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0xcf, 0xc9, 0x4f, 0x4f, 0xcf, 0xcc, 0x4b, 0xd7, 0x2f, 0xa9, 0x2c, 0x00, 0x73, + 0xe2, 0x8b, 0x53, 0xcb, 0x52, 0x8b, 0x32, 0x4b, 0x2a, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, + 0x84, 0x21, 0xea, 0xf4, 0xa0, 0xea, 0xf4, 0x40, 0xea, 0xa4, 0x64, 0xa0, 0x9a, 0x13, 0x0b, 0x32, + 0xf5, 0x13, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, 0xf3, 0xf3, 0x8a, 0x21, 0x5a, 0xb4, 0x9a, + 0x18, 0xb9, 0xb8, 0x7d, 0xf2, 0xd3, 0x83, 0xa1, 0x06, 0x09, 0x71, 0x73, 0xb1, 0xbb, 0xb8, 0xba, + 0x39, 0x86, 0xfa, 0x84, 0x08, 0x30, 0x08, 0x71, 0x72, 0xb1, 0xba, 0xb8, 0x3a, 0x85, 0xba, 0x0b, + 0xa4, 0x08, 0x71, 0x72, 0xb1, 0x78, 0xfa, 0xb9, 0xf9, 0x0b, 0x9c, 0x60, 0x14, 0xe2, 0xe6, 0x62, + 0xf3, 0xf3, 0x0f, 0xf1, 0x74, 0x76, 0x15, 0x58, 0xc3, 0x24, 0xc4, 0xc3, 0xc5, 0x1e, 0xee, 0x18, + 0xe4, 0xe7, 0xe9, 0xe7, 0x2e, 0x30, 0x81, 0x59, 0x88, 0x8b, 0x8b, 0xd5, 0x35, 0x28, 0xc8, 0x3f, + 0x48, 0xe0, 0x0b, 0xb3, 0x10, 0x2f, 0x17, 0x87, 0x73, 0x90, 0x67, 0x88, 0xa7, 0xb3, 0xa3, 0x8f, + 0xc0, 0x0d, 0x16, 0x90, 0x94, 0xa3, 0x8f, 0x6b, 0x50, 0x88, 0xc0, 0x1e, 0x56, 0x21, 0x3e, 0x2e, + 0x4e, 0x57, 0x5f, 0xd7, 0x20, 0x77, 0x57, 0x3f, 0xe7, 0x48, 0x81, 0x05, 0x6c, 0x4e, 0xcd, 0x8c, + 0x5c, 0xe2, 0xc9, 0xf9, 0xb9, 0x7a, 0x58, 0x9c, 0xef, 0x24, 0x80, 0xe4, 0xba, 0x00, 0x90, 0x93, + 0x03, 0x18, 0xa3, 0x2c, 0xa0, 0x0a, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, + 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x1e, 0xd2, 0x87, 0x48, 0x25, 0x16, 0x64, 0x16, 0xa3, 0x04, 0x97, + 0x75, 0x0e, 0x88, 0x5c, 0xc5, 0x24, 0xe9, 0x0e, 0xd1, 0xea, 0x9c, 0x93, 0x5f, 0x9a, 0xa2, 0xe7, + 0x03, 0xb5, 0x29, 0xa4, 0xb2, 0x20, 0x35, 0x89, 0x0d, 0x6c, 0x80, 0x31, 0x20, 0x00, 0x00, 0xff, + 0xff, 0x1b, 0x91, 0x99, 0x37, 0x6e, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/logging/v2/log_entry.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/v2/log_entry.pb.go new file mode 100644 index 0000000..0a16bd2 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/logging/v2/log_entry.pb.go @@ -0,0 +1,490 @@ +// Code generated by protoc-gen-go. +// source: google/logging/v2/log_entry.proto +// DO NOT EDIT! + +/* +Package logging is a generated protocol buffer package. + +It is generated from these files: + google/logging/v2/log_entry.proto + google/logging/v2/logging.proto + google/logging/v2/logging_config.proto + google/logging/v2/logging_metrics.proto + +It has these top-level messages: + LogEntry + LogEntryOperation + LogEntrySourceLocation + DeleteLogRequest + WriteLogEntriesRequest + WriteLogEntriesResponse + ListLogEntriesRequest + ListLogEntriesResponse + ListMonitoredResourceDescriptorsRequest + ListMonitoredResourceDescriptorsResponse + ListLogsRequest + ListLogsResponse + LogSink + ListSinksRequest + ListSinksResponse + GetSinkRequest + CreateSinkRequest + UpdateSinkRequest + DeleteSinkRequest + LogMetric + ListLogMetricsRequest + ListLogMetricsResponse + GetLogMetricRequest + CreateLogMetricRequest + UpdateLogMetricRequest + DeleteLogMetricRequest +*/ +package logging + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api3 "google.golang.org/genproto/googleapis/api/monitoredres" +import google_logging_type "google.golang.org/genproto/googleapis/logging/type" +import google_logging_type1 "google.golang.org/genproto/googleapis/logging/type" +import google_protobuf2 "github.com/golang/protobuf/ptypes/any" +import google_protobuf3 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// An individual entry in a log. +type LogEntry struct { + // Required. The resource name of the log to which this log entry belongs: + // + // "projects/[PROJECT_ID]/logs/[LOG_ID]" + // "organizations/[ORGANIZATION_ID]/logs/[LOG_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]" + // "folders/[FOLDER_ID]/logs/[LOG_ID]" + // + // `[LOG_ID]` must be URL-encoded within `log_name`. Example: + // `"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity"`. + // `[LOG_ID]` must be less than 512 characters long and can only include the + // following characters: upper and lower case alphanumeric characters, + // forward-slash, underscore, hyphen, and period. + // + // For backward compatibility, if `log_name` begins with a forward-slash, such + // as `/projects/...`, then the log entry is ingested as usual but the + // forward-slash is removed. Listing the log entry will not show the leading + // slash and filtering for a log name with a leading slash will never return + // any results. + LogName string `protobuf:"bytes,12,opt,name=log_name,json=logName" json:"log_name,omitempty"` + // Required. The monitored resource associated with this log entry. + // Example: a log entry that reports a database error would be + // associated with the monitored resource designating the particular + // database that reported the error. + Resource *google_api3.MonitoredResource `protobuf:"bytes,8,opt,name=resource" json:"resource,omitempty"` + // Optional. The log entry payload, which can be one of multiple types. + // + // Types that are valid to be assigned to Payload: + // *LogEntry_ProtoPayload + // *LogEntry_TextPayload + // *LogEntry_JsonPayload + Payload isLogEntry_Payload `protobuf_oneof:"payload"` + // Optional. The time the event described by the log entry occurred. If + // omitted in a new log entry, Stackdriver Logging will insert the time the + // log entry is received. Stackdriver Logging might reject log entries whose + // time stamps are more than a couple of hours in the future. Log entries + // with time stamps in the past are accepted. + Timestamp *google_protobuf4.Timestamp `protobuf:"bytes,9,opt,name=timestamp" json:"timestamp,omitempty"` + // Optional. The severity of the log entry. The default value is + // `LogSeverity.DEFAULT`. + Severity google_logging_type1.LogSeverity `protobuf:"varint,10,opt,name=severity,enum=google.logging.type.LogSeverity" json:"severity,omitempty"` + // Optional. A unique identifier for the log entry. If you provide a value, + // then Stackdriver Logging considers other log entries in the same project, + // with the same `timestamp`, and with the same `insert_id` to be duplicates + // which can be removed. If omitted in new log entries, then Stackdriver + // Logging will insert its own unique identifier. The `insert_id` is used + // to order log entries that have the same `timestamp` value. + InsertId string `protobuf:"bytes,4,opt,name=insert_id,json=insertId" json:"insert_id,omitempty"` + // Optional. Information about the HTTP request associated with this + // log entry, if applicable. + HttpRequest *google_logging_type.HttpRequest `protobuf:"bytes,7,opt,name=http_request,json=httpRequest" json:"http_request,omitempty"` + // Optional. A set of user-defined (key, value) data that provides additional + // information about the log entry. + Labels map[string]string `protobuf:"bytes,11,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. Information about an operation associated with the log entry, if + // applicable. + Operation *LogEntryOperation `protobuf:"bytes,15,opt,name=operation" json:"operation,omitempty"` + // Optional. Resource name of the trace associated with the log entry, if any. + // If it contains a relative resource name, the name is assumed to be relative + // to `//tracing.googleapis.com`. Example: + // `projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824` + Trace string `protobuf:"bytes,22,opt,name=trace" json:"trace,omitempty"` + // Optional. Source code location information associated with the log entry, + // if any. + SourceLocation *LogEntrySourceLocation `protobuf:"bytes,23,opt,name=source_location,json=sourceLocation" json:"source_location,omitempty"` +} + +func (m *LogEntry) Reset() { *m = LogEntry{} } +func (m *LogEntry) String() string { return proto.CompactTextString(m) } +func (*LogEntry) ProtoMessage() {} +func (*LogEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isLogEntry_Payload interface { + isLogEntry_Payload() +} + +type LogEntry_ProtoPayload struct { + ProtoPayload *google_protobuf2.Any `protobuf:"bytes,2,opt,name=proto_payload,json=protoPayload,oneof"` +} +type LogEntry_TextPayload struct { + TextPayload string `protobuf:"bytes,3,opt,name=text_payload,json=textPayload,oneof"` +} +type LogEntry_JsonPayload struct { + JsonPayload *google_protobuf3.Struct `protobuf:"bytes,6,opt,name=json_payload,json=jsonPayload,oneof"` +} + +func (*LogEntry_ProtoPayload) isLogEntry_Payload() {} +func (*LogEntry_TextPayload) isLogEntry_Payload() {} +func (*LogEntry_JsonPayload) isLogEntry_Payload() {} + +func (m *LogEntry) GetPayload() isLogEntry_Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *LogEntry) GetLogName() string { + if m != nil { + return m.LogName + } + return "" +} + +func (m *LogEntry) GetResource() *google_api3.MonitoredResource { + if m != nil { + return m.Resource + } + return nil +} + +func (m *LogEntry) GetProtoPayload() *google_protobuf2.Any { + if x, ok := m.GetPayload().(*LogEntry_ProtoPayload); ok { + return x.ProtoPayload + } + return nil +} + +func (m *LogEntry) GetTextPayload() string { + if x, ok := m.GetPayload().(*LogEntry_TextPayload); ok { + return x.TextPayload + } + return "" +} + +func (m *LogEntry) GetJsonPayload() *google_protobuf3.Struct { + if x, ok := m.GetPayload().(*LogEntry_JsonPayload); ok { + return x.JsonPayload + } + return nil +} + +func (m *LogEntry) GetTimestamp() *google_protobuf4.Timestamp { + if m != nil { + return m.Timestamp + } + return nil +} + +func (m *LogEntry) GetSeverity() google_logging_type1.LogSeverity { + if m != nil { + return m.Severity + } + return google_logging_type1.LogSeverity_DEFAULT +} + +func (m *LogEntry) GetInsertId() string { + if m != nil { + return m.InsertId + } + return "" +} + +func (m *LogEntry) GetHttpRequest() *google_logging_type.HttpRequest { + if m != nil { + return m.HttpRequest + } + return nil +} + +func (m *LogEntry) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *LogEntry) GetOperation() *LogEntryOperation { + if m != nil { + return m.Operation + } + return nil +} + +func (m *LogEntry) GetTrace() string { + if m != nil { + return m.Trace + } + return "" +} + +func (m *LogEntry) GetSourceLocation() *LogEntrySourceLocation { + if m != nil { + return m.SourceLocation + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LogEntry) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LogEntry_OneofMarshaler, _LogEntry_OneofUnmarshaler, _LogEntry_OneofSizer, []interface{}{ + (*LogEntry_ProtoPayload)(nil), + (*LogEntry_TextPayload)(nil), + (*LogEntry_JsonPayload)(nil), + } +} + +func _LogEntry_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LogEntry) + // payload + switch x := m.Payload.(type) { + case *LogEntry_ProtoPayload: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ProtoPayload); err != nil { + return err + } + case *LogEntry_TextPayload: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.TextPayload) + case *LogEntry_JsonPayload: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.JsonPayload); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("LogEntry.Payload has unexpected type %T", x) + } + return nil +} + +func _LogEntry_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LogEntry) + switch tag { + case 2: // payload.proto_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf2.Any) + err := b.DecodeMessage(msg) + m.Payload = &LogEntry_ProtoPayload{msg} + return true, err + case 3: // payload.text_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Payload = &LogEntry_TextPayload{x} + return true, err + case 6: // payload.json_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf3.Struct) + err := b.DecodeMessage(msg) + m.Payload = &LogEntry_JsonPayload{msg} + return true, err + default: + return false, nil + } +} + +func _LogEntry_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LogEntry) + // payload + switch x := m.Payload.(type) { + case *LogEntry_ProtoPayload: + s := proto.Size(x.ProtoPayload) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LogEntry_TextPayload: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.TextPayload))) + n += len(x.TextPayload) + case *LogEntry_JsonPayload: + s := proto.Size(x.JsonPayload) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Additional information about a potentially long-running operation with which +// a log entry is associated. +type LogEntryOperation struct { + // Optional. An arbitrary operation identifier. Log entries with the + // same identifier are assumed to be part of the same operation. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // Optional. An arbitrary producer identifier. The combination of + // `id` and `producer` must be globally unique. Examples for `producer`: + // `"MyDivision.MyBigCompany.com"`, `"github.com/MyProject/MyApplication"`. + Producer string `protobuf:"bytes,2,opt,name=producer" json:"producer,omitempty"` + // Optional. Set this to True if this is the first log entry in the operation. + First bool `protobuf:"varint,3,opt,name=first" json:"first,omitempty"` + // Optional. Set this to True if this is the last log entry in the operation. + Last bool `protobuf:"varint,4,opt,name=last" json:"last,omitempty"` +} + +func (m *LogEntryOperation) Reset() { *m = LogEntryOperation{} } +func (m *LogEntryOperation) String() string { return proto.CompactTextString(m) } +func (*LogEntryOperation) ProtoMessage() {} +func (*LogEntryOperation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *LogEntryOperation) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *LogEntryOperation) GetProducer() string { + if m != nil { + return m.Producer + } + return "" +} + +func (m *LogEntryOperation) GetFirst() bool { + if m != nil { + return m.First + } + return false +} + +func (m *LogEntryOperation) GetLast() bool { + if m != nil { + return m.Last + } + return false +} + +// Additional information about the source code location that produced the log +// entry. +type LogEntrySourceLocation struct { + // Optional. Source file name. Depending on the runtime environment, this + // might be a simple name or a fully-qualified name. + File string `protobuf:"bytes,1,opt,name=file" json:"file,omitempty"` + // Optional. Line within the source file. 1-based; 0 indicates no line number + // available. + Line int64 `protobuf:"varint,2,opt,name=line" json:"line,omitempty"` + // Optional. Human-readable name of the function or method being invoked, with + // optional context such as the class or package name. This information may be + // used in contexts such as the logs viewer, where a file and line number are + // less meaningful. The format can vary by language. For example: + // `qual.if.ied.Class.method` (Java), `dir/package.func` (Go), `function` + // (Python). + Function string `protobuf:"bytes,3,opt,name=function" json:"function,omitempty"` +} + +func (m *LogEntrySourceLocation) Reset() { *m = LogEntrySourceLocation{} } +func (m *LogEntrySourceLocation) String() string { return proto.CompactTextString(m) } +func (*LogEntrySourceLocation) ProtoMessage() {} +func (*LogEntrySourceLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *LogEntrySourceLocation) GetFile() string { + if m != nil { + return m.File + } + return "" +} + +func (m *LogEntrySourceLocation) GetLine() int64 { + if m != nil { + return m.Line + } + return 0 +} + +func (m *LogEntrySourceLocation) GetFunction() string { + if m != nil { + return m.Function + } + return "" +} + +func init() { + proto.RegisterType((*LogEntry)(nil), "google.logging.v2.LogEntry") + proto.RegisterType((*LogEntryOperation)(nil), "google.logging.v2.LogEntryOperation") + proto.RegisterType((*LogEntrySourceLocation)(nil), "google.logging.v2.LogEntrySourceLocation") +} + +func init() { proto.RegisterFile("google/logging/v2/log_entry.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 679 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xd1, 0x6e, 0xd3, 0x3c, + 0x14, 0xc7, 0x97, 0x76, 0x5f, 0x97, 0xba, 0xdd, 0xf6, 0xcd, 0x1a, 0x5b, 0x56, 0x86, 0x28, 0x1b, + 0x82, 0x72, 0x93, 0x4a, 0xe5, 0x66, 0x63, 0x93, 0x10, 0x9d, 0x10, 0x43, 0x2a, 0x30, 0x79, 0x88, + 0x0b, 0x84, 0x54, 0x79, 0x89, 0x9b, 0x19, 0x52, 0x3b, 0x38, 0x4e, 0x45, 0xaf, 0x78, 0x04, 0xde, + 0x83, 0x27, 0xe4, 0x12, 0xf9, 0xd8, 0xe9, 0x4a, 0x3b, 0xed, 0xee, 0x9c, 0xfa, 0xf7, 0x3f, 0xff, + 0xe3, 0xe3, 0x93, 0xa2, 0x47, 0x89, 0x94, 0x49, 0xca, 0xba, 0xa9, 0x4c, 0x12, 0x2e, 0x92, 0xee, + 0xa4, 0x67, 0xc2, 0x21, 0x13, 0x5a, 0x4d, 0xc3, 0x4c, 0x49, 0x2d, 0xf1, 0x96, 0x45, 0x42, 0x87, + 0x84, 0x93, 0x5e, 0x6b, 0xdf, 0xa9, 0x68, 0xc6, 0xbb, 0x54, 0x08, 0xa9, 0xa9, 0xe6, 0x52, 0xe4, + 0x56, 0xd0, 0x3a, 0x9c, 0x3b, 0x1d, 0x4b, 0xc1, 0xb5, 0x54, 0x2c, 0x1e, 0x2a, 0x96, 0xcb, 0x42, + 0x45, 0xcc, 0x41, 0x4f, 0x16, 0x8c, 0xf5, 0x34, 0x63, 0xdd, 0x6b, 0xad, 0xb3, 0xa1, 0x62, 0xdf, + 0x0b, 0x96, 0xeb, 0xbb, 0x38, 0xd3, 0x62, 0xce, 0x26, 0x4c, 0x71, 0xed, 0xba, 0x6c, 0xed, 0x39, + 0x0e, 0xb2, 0xab, 0x62, 0xd4, 0xa5, 0xa2, 0x3c, 0xda, 0x5f, 0x3c, 0xca, 0xb5, 0x2a, 0xa2, 0xd2, + 0xe0, 0xe1, 0xe2, 0xa9, 0xe6, 0x63, 0x96, 0x6b, 0x3a, 0xce, 0x2c, 0x70, 0xf0, 0xab, 0x86, 0xfc, + 0x81, 0x4c, 0x5e, 0x9b, 0x91, 0xe0, 0x3d, 0xe4, 0x1b, 0x73, 0x41, 0xc7, 0x2c, 0x68, 0xb6, 0xbd, + 0x4e, 0x9d, 0xac, 0xa5, 0x32, 0x79, 0x4f, 0xc7, 0x0c, 0x1f, 0x23, 0xbf, 0xbc, 0x63, 0xe0, 0xb7, + 0xbd, 0x4e, 0xa3, 0xf7, 0x20, 0x74, 0xa3, 0xa3, 0x19, 0x0f, 0xdf, 0x95, 0x93, 0x20, 0x0e, 0x22, + 0x33, 0x1c, 0x9f, 0xa0, 0x75, 0xf0, 0x1a, 0x66, 0x74, 0x9a, 0x4a, 0x1a, 0x07, 0x15, 0xd0, 0x6f, + 0x97, 0xfa, 0xb2, 0xb7, 0xf0, 0x95, 0x98, 0x9e, 0xaf, 0x90, 0x26, 0xe4, 0x17, 0x96, 0xc5, 0x87, + 0xa8, 0xa9, 0xd9, 0x0f, 0x3d, 0xd3, 0x56, 0x4d, 0x5b, 0xe7, 0x2b, 0xa4, 0x61, 0x7e, 0x2d, 0xa1, + 0x53, 0xd4, 0xfc, 0x9a, 0x4b, 0x31, 0x83, 0x6a, 0x60, 0xb0, 0xbb, 0x64, 0x70, 0x09, 0xa3, 0x31, + 0x6a, 0x83, 0x97, 0xea, 0x23, 0x54, 0x9f, 0x4d, 0x25, 0xa8, 0x83, 0xb4, 0xb5, 0x24, 0xfd, 0x58, + 0x12, 0xe4, 0x06, 0xc6, 0xa7, 0xc8, 0x2f, 0x1f, 0x2a, 0x40, 0x6d, 0xaf, 0xb3, 0xd1, 0x6b, 0x87, + 0x0b, 0xfb, 0x64, 0x5e, 0x34, 0x1c, 0xc8, 0xe4, 0xd2, 0x71, 0x64, 0xa6, 0xc0, 0xf7, 0x51, 0x9d, + 0x8b, 0x9c, 0x29, 0x3d, 0xe4, 0x71, 0xb0, 0x0a, 0xe3, 0xf6, 0xed, 0x0f, 0x6f, 0x63, 0x7c, 0x86, + 0x9a, 0xf3, 0xfb, 0x12, 0xac, 0x41, 0x5f, 0xb7, 0x97, 0x3f, 0xd7, 0x3a, 0x23, 0x96, 0x23, 0x8d, + 0xeb, 0x9b, 0x04, 0xbf, 0x44, 0xb5, 0x94, 0x5e, 0xb1, 0x34, 0x0f, 0x1a, 0xed, 0x6a, 0xa7, 0xd1, + 0x7b, 0x1a, 0x2e, 0x6d, 0x7b, 0x58, 0x3e, 0x7e, 0x38, 0x00, 0x12, 0x62, 0xe2, 0x64, 0xb8, 0x8f, + 0xea, 0x32, 0x63, 0x0a, 0x3e, 0x80, 0x60, 0x13, 0x5a, 0x78, 0x7c, 0x47, 0x8d, 0x0f, 0x25, 0x4b, + 0x6e, 0x64, 0x78, 0x1b, 0xfd, 0xa7, 0x15, 0x8d, 0x58, 0xb0, 0x03, 0x57, 0xb4, 0x09, 0x26, 0x68, + 0xd3, 0xae, 0xc7, 0x30, 0x95, 0x91, 0xad, 0xbf, 0x0b, 0xf5, 0x9f, 0xdd, 0x51, 0xff, 0x12, 0x14, + 0x03, 0x27, 0x20, 0x1b, 0xf9, 0x3f, 0x79, 0xeb, 0x18, 0x35, 0xe6, 0x2e, 0x81, 0xff, 0x47, 0xd5, + 0x6f, 0x6c, 0x1a, 0x78, 0x60, 0x6b, 0x42, 0xd3, 0xca, 0x84, 0xa6, 0x05, 0x83, 0x0d, 0xac, 0x13, + 0x9b, 0xbc, 0xa8, 0x1c, 0x79, 0xfd, 0x3a, 0x5a, 0x73, 0xcb, 0x73, 0xc0, 0xd1, 0xd6, 0xd2, 0x7d, + 0xf0, 0x06, 0xaa, 0xf0, 0xd8, 0x95, 0xaa, 0xf0, 0x18, 0xb7, 0x90, 0x9f, 0x29, 0x19, 0x17, 0x11, + 0x53, 0xae, 0xd8, 0x2c, 0x37, 0x2e, 0x23, 0xae, 0x72, 0x0d, 0xbb, 0xea, 0x13, 0x9b, 0x60, 0x8c, + 0x56, 0x53, 0x9a, 0x6b, 0x78, 0x68, 0x9f, 0x40, 0x7c, 0xf0, 0x05, 0xed, 0xdc, 0x7e, 0x35, 0x43, + 0x8f, 0x78, 0xca, 0x9c, 0x23, 0xc4, 0x50, 0x81, 0x0b, 0xdb, 0x7c, 0x95, 0x40, 0x6c, 0xfa, 0x18, + 0x15, 0x22, 0x82, 0xf9, 0x55, 0x6d, 0x1f, 0x65, 0xde, 0xff, 0x89, 0xee, 0x45, 0x72, 0xbc, 0x3c, + 0xce, 0xfe, 0x7a, 0x69, 0x7a, 0x01, 0x5f, 0x9a, 0xf7, 0xf9, 0xc8, 0x31, 0x89, 0x4c, 0xa9, 0x48, + 0x42, 0xa9, 0x92, 0x6e, 0xc2, 0x04, 0xec, 0x7e, 0xd7, 0x1e, 0xd1, 0x8c, 0xe7, 0x73, 0x7f, 0xa3, + 0x27, 0x2e, 0xfc, 0xe3, 0x79, 0xbf, 0x2b, 0xbb, 0x6f, 0xac, 0xfa, 0x2c, 0x95, 0x45, 0x6c, 0xde, + 0x0a, 0x7c, 0x3e, 0xf5, 0xae, 0x6a, 0x50, 0xe1, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x34, + 0x32, 0x8a, 0x87, 0x87, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/logging/v2/logging.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging.pb.go new file mode 100644 index 0000000..9859c5b --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging.pb.go @@ -0,0 +1,734 @@ +// Code generated by protoc-gen-go. +// source: google/logging/v2/logging.proto +// DO NOT EDIT! + +package logging + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api3 "google.golang.org/genproto/googleapis/api/monitoredres" +import _ "github.com/golang/protobuf/ptypes/duration" +import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" +import _ "github.com/golang/protobuf/ptypes/timestamp" +import _ "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The parameters to DeleteLog. +type DeleteLogRequest struct { + // Required. The resource name of the log to delete: + // + // "projects/[PROJECT_ID]/logs/[LOG_ID]" + // "organizations/[ORGANIZATION_ID]/logs/[LOG_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]" + // "folders/[FOLDER_ID]/logs/[LOG_ID]" + // + // `[LOG_ID]` must be URL-encoded. For example, + // `"projects/my-project-id/logs/syslog"`, + // `"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity"`. + // For more information about log names, see + // [LogEntry][google.logging.v2.LogEntry]. + LogName string `protobuf:"bytes,1,opt,name=log_name,json=logName" json:"log_name,omitempty"` +} + +func (m *DeleteLogRequest) Reset() { *m = DeleteLogRequest{} } +func (m *DeleteLogRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteLogRequest) ProtoMessage() {} +func (*DeleteLogRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *DeleteLogRequest) GetLogName() string { + if m != nil { + return m.LogName + } + return "" +} + +// The parameters to WriteLogEntries. +type WriteLogEntriesRequest struct { + // Optional. A default log resource name that is assigned to all log entries + // in `entries` that do not specify a value for `log_name`: + // + // "projects/[PROJECT_ID]/logs/[LOG_ID]" + // "organizations/[ORGANIZATION_ID]/logs/[LOG_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]" + // "folders/[FOLDER_ID]/logs/[LOG_ID]" + // + // `[LOG_ID]` must be URL-encoded. For example, + // `"projects/my-project-id/logs/syslog"` or + // `"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity"`. + // For more information about log names, see + // [LogEntry][google.logging.v2.LogEntry]. + LogName string `protobuf:"bytes,1,opt,name=log_name,json=logName" json:"log_name,omitempty"` + // Optional. A default monitored resource object that is assigned to all log + // entries in `entries` that do not specify a value for `resource`. Example: + // + // { "type": "gce_instance", + // "labels": { + // "zone": "us-central1-a", "instance_id": "00000000000000000000" }} + // + // See [LogEntry][google.logging.v2.LogEntry]. + Resource *google_api3.MonitoredResource `protobuf:"bytes,2,opt,name=resource" json:"resource,omitempty"` + // Optional. Default labels that are added to the `labels` field of all log + // entries in `entries`. If a log entry already has a label with the same key + // as a label in this parameter, then the log entry's label is not changed. + // See [LogEntry][google.logging.v2.LogEntry]. + Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Required. The log entries to write. Values supplied for the fields + // `log_name`, `resource`, and `labels` in this `entries.write` request are + // inserted into those log entries in this list that do not provide their own + // values. + // + // Stackdriver Logging also creates and inserts values for `timestamp` and + // `insert_id` if the entries do not provide them. The created `insert_id` for + // the N'th entry in this list will be greater than earlier entries and less + // than later entries. Otherwise, the order of log entries in this list does + // not matter. + // + // To improve throughput and to avoid exceeding the + // [quota limit](/logging/quota-policy) for calls to `entries.write`, + // you should write multiple log entries at once rather than + // calling this method for each individual log entry. + Entries []*LogEntry `protobuf:"bytes,4,rep,name=entries" json:"entries,omitempty"` + // Optional. Whether valid entries should be written even if some other + // entries fail due to INVALID_ARGUMENT or PERMISSION_DENIED errors. If any + // entry is not written, then the response status is the error associated + // with one of the failed entries and the response includes error details + // keyed by the entries' zero-based index in the `entries.write` method. + PartialSuccess bool `protobuf:"varint,5,opt,name=partial_success,json=partialSuccess" json:"partial_success,omitempty"` +} + +func (m *WriteLogEntriesRequest) Reset() { *m = WriteLogEntriesRequest{} } +func (m *WriteLogEntriesRequest) String() string { return proto.CompactTextString(m) } +func (*WriteLogEntriesRequest) ProtoMessage() {} +func (*WriteLogEntriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *WriteLogEntriesRequest) GetLogName() string { + if m != nil { + return m.LogName + } + return "" +} + +func (m *WriteLogEntriesRequest) GetResource() *google_api3.MonitoredResource { + if m != nil { + return m.Resource + } + return nil +} + +func (m *WriteLogEntriesRequest) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *WriteLogEntriesRequest) GetEntries() []*LogEntry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *WriteLogEntriesRequest) GetPartialSuccess() bool { + if m != nil { + return m.PartialSuccess + } + return false +} + +// Result returned from WriteLogEntries. +// empty +type WriteLogEntriesResponse struct { +} + +func (m *WriteLogEntriesResponse) Reset() { *m = WriteLogEntriesResponse{} } +func (m *WriteLogEntriesResponse) String() string { return proto.CompactTextString(m) } +func (*WriteLogEntriesResponse) ProtoMessage() {} +func (*WriteLogEntriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +// The parameters to `ListLogEntries`. +type ListLogEntriesRequest struct { + // Deprecated. Use `resource_names` instead. One or more project identifiers + // or project numbers from which to retrieve log entries. Example: + // `"my-project-1A"`. If present, these project identifiers are converted to + // resource name format and added to the list of resources in + // `resource_names`. + ProjectIds []string `protobuf:"bytes,1,rep,name=project_ids,json=projectIds" json:"project_ids,omitempty"` + // Required. Names of one or more parent resources from which to + // retrieve log entries: + // + // "projects/[PROJECT_ID]" + // "organizations/[ORGANIZATION_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]" + // "folders/[FOLDER_ID]" + // + // Projects listed in the `project_ids` field are added to this list. + ResourceNames []string `protobuf:"bytes,8,rep,name=resource_names,json=resourceNames" json:"resource_names,omitempty"` + // Optional. A filter that chooses which log entries to return. See [Advanced + // Logs Filters](/logging/docs/view/advanced_filters). Only log entries that + // match the filter are returned. An empty filter matches all log entries in + // the resources listed in `resource_names`. Referencing a parent resource + // that is not listed in `resource_names` will cause the filter to return no + // results. + // The maximum length of the filter is 20000 characters. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // Optional. How the results should be sorted. Presently, the only permitted + // values are `"timestamp asc"` (default) and `"timestamp desc"`. The first + // option returns entries in order of increasing values of + // `LogEntry.timestamp` (oldest first), and the second option returns entries + // in order of decreasing timestamps (newest first). Entries with equal + // timestamps are returned in order of their `insert_id` values. + OrderBy string `protobuf:"bytes,3,opt,name=order_by,json=orderBy" json:"order_by,omitempty"` + // Optional. The maximum number of results to return from this request. + // Non-positive values are ignored. The presence of `next_page_token` in the + // response indicates that more results might be available. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. If present, then retrieve the next batch of results from the + // preceding call to this method. `page_token` must be the value of + // `next_page_token` from the previous response. The values of other method + // parameters should be identical to those in the previous call. + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListLogEntriesRequest) Reset() { *m = ListLogEntriesRequest{} } +func (m *ListLogEntriesRequest) String() string { return proto.CompactTextString(m) } +func (*ListLogEntriesRequest) ProtoMessage() {} +func (*ListLogEntriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *ListLogEntriesRequest) GetProjectIds() []string { + if m != nil { + return m.ProjectIds + } + return nil +} + +func (m *ListLogEntriesRequest) GetResourceNames() []string { + if m != nil { + return m.ResourceNames + } + return nil +} + +func (m *ListLogEntriesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListLogEntriesRequest) GetOrderBy() string { + if m != nil { + return m.OrderBy + } + return "" +} + +func (m *ListLogEntriesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListLogEntriesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Result returned from `ListLogEntries`. +type ListLogEntriesResponse struct { + // A list of log entries. + Entries []*LogEntry `protobuf:"bytes,1,rep,name=entries" json:"entries,omitempty"` + // If there might be more results than those appearing in this response, then + // `nextPageToken` is included. To get the next set of results, call this + // method again using the value of `nextPageToken` as `pageToken`. + // + // If a value for `next_page_token` appears and the `entries` field is empty, + // it means that the search found no log entries so far but it did not have + // time to search all the possible log entries. Retry the method with this + // value for `page_token` to continue the search. Alternatively, consider + // speeding up the search by changing your filter to specify a single log name + // or resource type, or to narrow the time range of the search. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListLogEntriesResponse) Reset() { *m = ListLogEntriesResponse{} } +func (m *ListLogEntriesResponse) String() string { return proto.CompactTextString(m) } +func (*ListLogEntriesResponse) ProtoMessage() {} +func (*ListLogEntriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *ListLogEntriesResponse) GetEntries() []*LogEntry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *ListLogEntriesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The parameters to ListMonitoredResourceDescriptors +type ListMonitoredResourceDescriptorsRequest struct { + // Optional. The maximum number of results to return from this request. + // Non-positive values are ignored. The presence of `nextPageToken` in the + // response indicates that more results might be available. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. If present, then retrieve the next batch of results from the + // preceding call to this method. `pageToken` must be the value of + // `nextPageToken` from the previous response. The values of other method + // parameters should be identical to those in the previous call. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListMonitoredResourceDescriptorsRequest) Reset() { + *m = ListMonitoredResourceDescriptorsRequest{} +} +func (m *ListMonitoredResourceDescriptorsRequest) String() string { return proto.CompactTextString(m) } +func (*ListMonitoredResourceDescriptorsRequest) ProtoMessage() {} +func (*ListMonitoredResourceDescriptorsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{5} +} + +func (m *ListMonitoredResourceDescriptorsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListMonitoredResourceDescriptorsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Result returned from ListMonitoredResourceDescriptors. +type ListMonitoredResourceDescriptorsResponse struct { + // A list of resource descriptors. + ResourceDescriptors []*google_api3.MonitoredResourceDescriptor `protobuf:"bytes,1,rep,name=resource_descriptors,json=resourceDescriptors" json:"resource_descriptors,omitempty"` + // If there might be more results than those appearing in this response, then + // `nextPageToken` is included. To get the next set of results, call this + // method again using the value of `nextPageToken` as `pageToken`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListMonitoredResourceDescriptorsResponse) Reset() { + *m = ListMonitoredResourceDescriptorsResponse{} +} +func (m *ListMonitoredResourceDescriptorsResponse) String() string { return proto.CompactTextString(m) } +func (*ListMonitoredResourceDescriptorsResponse) ProtoMessage() {} +func (*ListMonitoredResourceDescriptorsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{6} +} + +func (m *ListMonitoredResourceDescriptorsResponse) GetResourceDescriptors() []*google_api3.MonitoredResourceDescriptor { + if m != nil { + return m.ResourceDescriptors + } + return nil +} + +func (m *ListMonitoredResourceDescriptorsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The parameters to ListLogs. +type ListLogsRequest struct { + // Required. The resource name that owns the logs: + // + // "projects/[PROJECT_ID]" + // "organizations/[ORGANIZATION_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]" + // "folders/[FOLDER_ID]" + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. The maximum number of results to return from this request. + // Non-positive values are ignored. The presence of `nextPageToken` in the + // response indicates that more results might be available. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. If present, then retrieve the next batch of results from the + // preceding call to this method. `pageToken` must be the value of + // `nextPageToken` from the previous response. The values of other method + // parameters should be identical to those in the previous call. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListLogsRequest) Reset() { *m = ListLogsRequest{} } +func (m *ListLogsRequest) String() string { return proto.CompactTextString(m) } +func (*ListLogsRequest) ProtoMessage() {} +func (*ListLogsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *ListLogsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListLogsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListLogsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Result returned from ListLogs. +type ListLogsResponse struct { + // A list of log names. For example, + // `"projects/my-project/syslog"` or + // `"organizations/123/cloudresourcemanager.googleapis.com%2Factivity"`. + LogNames []string `protobuf:"bytes,3,rep,name=log_names,json=logNames" json:"log_names,omitempty"` + // If there might be more results than those appearing in this response, then + // `nextPageToken` is included. To get the next set of results, call this + // method again using the value of `nextPageToken` as `pageToken`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListLogsResponse) Reset() { *m = ListLogsResponse{} } +func (m *ListLogsResponse) String() string { return proto.CompactTextString(m) } +func (*ListLogsResponse) ProtoMessage() {} +func (*ListLogsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *ListLogsResponse) GetLogNames() []string { + if m != nil { + return m.LogNames + } + return nil +} + +func (m *ListLogsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func init() { + proto.RegisterType((*DeleteLogRequest)(nil), "google.logging.v2.DeleteLogRequest") + proto.RegisterType((*WriteLogEntriesRequest)(nil), "google.logging.v2.WriteLogEntriesRequest") + proto.RegisterType((*WriteLogEntriesResponse)(nil), "google.logging.v2.WriteLogEntriesResponse") + proto.RegisterType((*ListLogEntriesRequest)(nil), "google.logging.v2.ListLogEntriesRequest") + proto.RegisterType((*ListLogEntriesResponse)(nil), "google.logging.v2.ListLogEntriesResponse") + proto.RegisterType((*ListMonitoredResourceDescriptorsRequest)(nil), "google.logging.v2.ListMonitoredResourceDescriptorsRequest") + proto.RegisterType((*ListMonitoredResourceDescriptorsResponse)(nil), "google.logging.v2.ListMonitoredResourceDescriptorsResponse") + proto.RegisterType((*ListLogsRequest)(nil), "google.logging.v2.ListLogsRequest") + proto.RegisterType((*ListLogsResponse)(nil), "google.logging.v2.ListLogsResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for LoggingServiceV2 service + +type LoggingServiceV2Client interface { + // Deletes all the log entries in a log. + // The log reappears if it receives new entries. + // Log entries written shortly before the delete operation might not be + // deleted. + DeleteLog(ctx context.Context, in *DeleteLogRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) + // Writes log entries to Stackdriver Logging. + WriteLogEntries(ctx context.Context, in *WriteLogEntriesRequest, opts ...grpc.CallOption) (*WriteLogEntriesResponse, error) + // Lists log entries. Use this method to retrieve log entries from + // Stackdriver Logging. For ways to export log entries, see + // [Exporting Logs](/logging/docs/export). + ListLogEntries(ctx context.Context, in *ListLogEntriesRequest, opts ...grpc.CallOption) (*ListLogEntriesResponse, error) + // Lists the descriptors for monitored resource types used by Stackdriver + // Logging. + ListMonitoredResourceDescriptors(ctx context.Context, in *ListMonitoredResourceDescriptorsRequest, opts ...grpc.CallOption) (*ListMonitoredResourceDescriptorsResponse, error) + // Lists the logs in projects, organizations, folders, or billing accounts. + // Only logs that have entries are listed. + ListLogs(ctx context.Context, in *ListLogsRequest, opts ...grpc.CallOption) (*ListLogsResponse, error) +} + +type loggingServiceV2Client struct { + cc *grpc.ClientConn +} + +func NewLoggingServiceV2Client(cc *grpc.ClientConn) LoggingServiceV2Client { + return &loggingServiceV2Client{cc} +} + +func (c *loggingServiceV2Client) DeleteLog(ctx context.Context, in *DeleteLogRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) + err := grpc.Invoke(ctx, "/google.logging.v2.LoggingServiceV2/DeleteLog", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *loggingServiceV2Client) WriteLogEntries(ctx context.Context, in *WriteLogEntriesRequest, opts ...grpc.CallOption) (*WriteLogEntriesResponse, error) { + out := new(WriteLogEntriesResponse) + err := grpc.Invoke(ctx, "/google.logging.v2.LoggingServiceV2/WriteLogEntries", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *loggingServiceV2Client) ListLogEntries(ctx context.Context, in *ListLogEntriesRequest, opts ...grpc.CallOption) (*ListLogEntriesResponse, error) { + out := new(ListLogEntriesResponse) + err := grpc.Invoke(ctx, "/google.logging.v2.LoggingServiceV2/ListLogEntries", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *loggingServiceV2Client) ListMonitoredResourceDescriptors(ctx context.Context, in *ListMonitoredResourceDescriptorsRequest, opts ...grpc.CallOption) (*ListMonitoredResourceDescriptorsResponse, error) { + out := new(ListMonitoredResourceDescriptorsResponse) + err := grpc.Invoke(ctx, "/google.logging.v2.LoggingServiceV2/ListMonitoredResourceDescriptors", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *loggingServiceV2Client) ListLogs(ctx context.Context, in *ListLogsRequest, opts ...grpc.CallOption) (*ListLogsResponse, error) { + out := new(ListLogsResponse) + err := grpc.Invoke(ctx, "/google.logging.v2.LoggingServiceV2/ListLogs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for LoggingServiceV2 service + +type LoggingServiceV2Server interface { + // Deletes all the log entries in a log. + // The log reappears if it receives new entries. + // Log entries written shortly before the delete operation might not be + // deleted. + DeleteLog(context.Context, *DeleteLogRequest) (*google_protobuf5.Empty, error) + // Writes log entries to Stackdriver Logging. + WriteLogEntries(context.Context, *WriteLogEntriesRequest) (*WriteLogEntriesResponse, error) + // Lists log entries. Use this method to retrieve log entries from + // Stackdriver Logging. For ways to export log entries, see + // [Exporting Logs](/logging/docs/export). + ListLogEntries(context.Context, *ListLogEntriesRequest) (*ListLogEntriesResponse, error) + // Lists the descriptors for monitored resource types used by Stackdriver + // Logging. + ListMonitoredResourceDescriptors(context.Context, *ListMonitoredResourceDescriptorsRequest) (*ListMonitoredResourceDescriptorsResponse, error) + // Lists the logs in projects, organizations, folders, or billing accounts. + // Only logs that have entries are listed. + ListLogs(context.Context, *ListLogsRequest) (*ListLogsResponse, error) +} + +func RegisterLoggingServiceV2Server(s *grpc.Server, srv LoggingServiceV2Server) { + s.RegisterService(&_LoggingServiceV2_serviceDesc, srv) +} + +func _LoggingServiceV2_DeleteLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteLogRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoggingServiceV2Server).DeleteLog(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.LoggingServiceV2/DeleteLog", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoggingServiceV2Server).DeleteLog(ctx, req.(*DeleteLogRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LoggingServiceV2_WriteLogEntries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WriteLogEntriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoggingServiceV2Server).WriteLogEntries(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.LoggingServiceV2/WriteLogEntries", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoggingServiceV2Server).WriteLogEntries(ctx, req.(*WriteLogEntriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LoggingServiceV2_ListLogEntries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListLogEntriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoggingServiceV2Server).ListLogEntries(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.LoggingServiceV2/ListLogEntries", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoggingServiceV2Server).ListLogEntries(ctx, req.(*ListLogEntriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LoggingServiceV2_ListMonitoredResourceDescriptors_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListMonitoredResourceDescriptorsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoggingServiceV2Server).ListMonitoredResourceDescriptors(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.LoggingServiceV2/ListMonitoredResourceDescriptors", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoggingServiceV2Server).ListMonitoredResourceDescriptors(ctx, req.(*ListMonitoredResourceDescriptorsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LoggingServiceV2_ListLogs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListLogsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoggingServiceV2Server).ListLogs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.LoggingServiceV2/ListLogs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoggingServiceV2Server).ListLogs(ctx, req.(*ListLogsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _LoggingServiceV2_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.logging.v2.LoggingServiceV2", + HandlerType: (*LoggingServiceV2Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "DeleteLog", + Handler: _LoggingServiceV2_DeleteLog_Handler, + }, + { + MethodName: "WriteLogEntries", + Handler: _LoggingServiceV2_WriteLogEntries_Handler, + }, + { + MethodName: "ListLogEntries", + Handler: _LoggingServiceV2_ListLogEntries_Handler, + }, + { + MethodName: "ListMonitoredResourceDescriptors", + Handler: _LoggingServiceV2_ListMonitoredResourceDescriptors_Handler, + }, + { + MethodName: "ListLogs", + Handler: _LoggingServiceV2_ListLogs_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/logging/v2/logging.proto", +} + +func init() { proto.RegisterFile("google/logging/v2/logging.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 912 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xd7, 0xd8, 0x4d, 0x6a, 0xbf, 0xd0, 0xc4, 0x1d, 0x1a, 0xc7, 0xb5, 0xd3, 0xc6, 0x6c, 0x28, + 0xd9, 0x5a, 0xea, 0xae, 0x30, 0xaa, 0xd4, 0xa6, 0xe2, 0x12, 0x5a, 0x21, 0xa4, 0x14, 0x45, 0x1b, + 0xd4, 0x4a, 0xbd, 0x58, 0x6b, 0xfb, 0x75, 0x35, 0x74, 0xbd, 0xb3, 0xcc, 0x8c, 0x1d, 0xdc, 0xaa, + 0x1c, 0x7a, 0xe0, 0x0b, 0xf0, 0x2d, 0x38, 0xf0, 0x2d, 0xb8, 0x72, 0xe1, 0xc2, 0x81, 0x23, 0x1f, + 0x82, 0x23, 0x9a, 0xd9, 0x59, 0xc7, 0xb1, 0x5d, 0xc7, 0xe5, 0xb6, 0xf3, 0xe6, 0x37, 0xef, 0xfd, + 0xde, 0xef, 0xfd, 0xb1, 0x61, 0x2f, 0xe2, 0x3c, 0x8a, 0xd1, 0x8f, 0x79, 0x14, 0xb1, 0x24, 0xf2, + 0x47, 0xed, 0xfc, 0xd3, 0x4b, 0x05, 0x57, 0x9c, 0x5e, 0xcf, 0x00, 0x5e, 0x6e, 0x1d, 0xb5, 0xeb, + 0xbb, 0xf6, 0x4d, 0x98, 0x32, 0x3f, 0x4c, 0x12, 0xae, 0x42, 0xc5, 0x78, 0x22, 0xb3, 0x07, 0xf5, + 0xfd, 0xa9, 0xdb, 0x01, 0x4f, 0x98, 0xe2, 0x02, 0xfb, 0x1d, 0x81, 0x92, 0x0f, 0x45, 0x0f, 0x2d, + 0xe8, 0x93, 0x85, 0x61, 0x3b, 0x98, 0x28, 0x31, 0xb6, 0x90, 0xdb, 0x16, 0x62, 0x4e, 0xdd, 0xe1, + 0x4b, 0xbf, 0x3f, 0x14, 0x26, 0x90, 0xbd, 0x6f, 0xcc, 0xde, 0xe3, 0x20, 0x55, 0xf9, 0xe3, 0xbd, + 0xd9, 0x4b, 0xc5, 0x06, 0x28, 0x55, 0x38, 0x48, 0x2d, 0x60, 0xc7, 0x02, 0x44, 0xda, 0xf3, 0xa5, + 0x0a, 0xd5, 0xd0, 0xd2, 0x77, 0xee, 0x41, 0xe5, 0x31, 0xc6, 0xa8, 0xf0, 0x98, 0x47, 0x01, 0xfe, + 0x30, 0x44, 0xa9, 0xe8, 0x4d, 0x28, 0x69, 0x76, 0x49, 0x38, 0xc0, 0x1a, 0x69, 0x12, 0xb7, 0x1c, + 0x5c, 0x8d, 0x79, 0xf4, 0x6d, 0x38, 0x40, 0xe7, 0xaf, 0x02, 0x54, 0x9f, 0x0b, 0x66, 0xe0, 0x4f, + 0x12, 0x25, 0x18, 0xca, 0xcb, 0x5f, 0xd1, 0x87, 0x50, 0xca, 0x05, 0xa9, 0x15, 0x9a, 0xc4, 0xdd, + 0x68, 0xdf, 0xf2, 0xac, 0xce, 0x61, 0xca, 0xbc, 0xa7, 0xb9, 0x6c, 0x81, 0x05, 0x05, 0x13, 0x38, + 0x7d, 0x0a, 0xeb, 0x71, 0xd8, 0xc5, 0x58, 0xd6, 0x8a, 0xcd, 0xa2, 0xbb, 0xd1, 0xbe, 0xef, 0xcd, + 0x15, 0xc8, 0x5b, 0x4c, 0xc8, 0x3b, 0x36, 0xef, 0xb4, 0x71, 0x1c, 0x58, 0x27, 0xf4, 0x3e, 0x5c, + 0xc5, 0x0c, 0x55, 0xbb, 0x62, 0xfc, 0x35, 0x16, 0xf8, 0xb3, 0xae, 0xc6, 0x41, 0x8e, 0xa5, 0x07, + 0xb0, 0x95, 0x86, 0x42, 0xb1, 0x30, 0xee, 0xc8, 0x61, 0xaf, 0x87, 0x52, 0xd6, 0xd6, 0x9a, 0xc4, + 0x2d, 0x05, 0x9b, 0xd6, 0x7c, 0x9a, 0x59, 0xeb, 0x0f, 0x61, 0x63, 0x2a, 0x2c, 0xad, 0x40, 0xf1, + 0x15, 0x8e, 0xad, 0x1c, 0xfa, 0x93, 0xde, 0x80, 0xb5, 0x51, 0x18, 0x0f, 0x33, 0x1d, 0xca, 0x41, + 0x76, 0x38, 0x2c, 0x3c, 0x20, 0xce, 0x4d, 0xd8, 0x99, 0x4b, 0x44, 0xa6, 0x3c, 0x91, 0xe8, 0xfc, + 0x41, 0x60, 0xfb, 0x98, 0x49, 0x35, 0x2f, 0xfa, 0x1e, 0x6c, 0xa4, 0x82, 0x7f, 0x8f, 0x3d, 0xd5, + 0x61, 0x7d, 0x59, 0x23, 0xcd, 0xa2, 0x5b, 0x0e, 0xc0, 0x9a, 0xbe, 0xe9, 0x4b, 0x7a, 0x07, 0x36, + 0x73, 0x2d, 0x4d, 0x69, 0x64, 0xad, 0x64, 0x30, 0xd7, 0x72, 0xab, 0x2e, 0x90, 0xa4, 0x55, 0x58, + 0x7f, 0xc9, 0x62, 0x85, 0xc2, 0xf2, 0xb2, 0x27, 0x5d, 0x54, 0x2e, 0xfa, 0x28, 0x3a, 0xdd, 0x71, + 0xad, 0x98, 0x15, 0xd5, 0x9c, 0x8f, 0xc6, 0xb4, 0x01, 0xe5, 0x34, 0x8c, 0xb0, 0x23, 0xd9, 0x6b, + 0xac, 0x5d, 0x69, 0x12, 0x77, 0x2d, 0x28, 0x69, 0xc3, 0x29, 0x7b, 0x8d, 0xf4, 0x16, 0x80, 0xb9, + 0x54, 0xfc, 0x15, 0x26, 0x46, 0xab, 0x72, 0x60, 0xe0, 0xdf, 0x69, 0x83, 0x73, 0x06, 0xd5, 0xd9, + 0x7c, 0xb2, 0x54, 0xa7, 0x0b, 0x44, 0x3e, 0xa0, 0x40, 0x9f, 0xc1, 0x56, 0x82, 0x3f, 0xaa, 0xce, + 0x54, 0xd0, 0x2c, 0x91, 0x6b, 0xda, 0x7c, 0x32, 0x09, 0x8c, 0x70, 0xa0, 0x03, 0xcf, 0x75, 0xdc, + 0x63, 0x94, 0x3d, 0xc1, 0x52, 0xc5, 0xc5, 0x44, 0xda, 0x0b, 0xf9, 0x91, 0xa5, 0xf9, 0x15, 0x66, + 0xf3, 0xfb, 0x8d, 0x80, 0x7b, 0x79, 0x1c, 0x9b, 0xf2, 0x0b, 0xb8, 0x31, 0x29, 0x51, 0xff, 0xfc, + 0xde, 0xe6, 0x7f, 0xb0, 0x74, 0x52, 0xce, 0xfd, 0x05, 0x1f, 0x8b, 0xf9, 0x18, 0x1f, 0xa0, 0xcb, + 0x96, 0x2d, 0xc8, 0x24, 0xff, 0x2a, 0xac, 0xa7, 0xa1, 0xc0, 0x44, 0xd9, 0xf6, 0xb5, 0xa7, 0x8b, + 0xba, 0x14, 0x96, 0xea, 0x52, 0x9c, 0xd5, 0xe5, 0x39, 0x54, 0xce, 0xc3, 0xd8, 0xf4, 0x1b, 0x50, + 0xce, 0xf7, 0x46, 0x36, 0xe4, 0xe5, 0xa0, 0x64, 0x17, 0xc7, 0xca, 0xfc, 0xdb, 0x7f, 0xaf, 0x41, + 0xe5, 0x38, 0x6b, 0x90, 0x53, 0x14, 0x23, 0xd6, 0xc3, 0x67, 0x6d, 0x7a, 0x06, 0xe5, 0xc9, 0x6e, + 0xa3, 0xfb, 0x0b, 0xfa, 0x68, 0x76, 0xf3, 0xd5, 0xab, 0x39, 0x28, 0x5f, 0xa4, 0xde, 0x13, 0xbd, + 0x65, 0x9d, 0x7b, 0xef, 0xfe, 0xfc, 0xe7, 0x97, 0xc2, 0x41, 0xeb, 0x8e, 0x3f, 0x6a, 0x77, 0x51, + 0x85, 0x9f, 0xfb, 0x6f, 0x72, 0xce, 0x5f, 0xda, 0x61, 0x93, 0x7e, 0x4b, 0xef, 0x74, 0xe9, 0xb7, + 0xde, 0xd2, 0x9f, 0x09, 0x6c, 0xcd, 0xcc, 0x32, 0xbd, 0xbb, 0xf2, 0xe2, 0xaa, 0xb7, 0x56, 0x81, + 0xda, 0xd5, 0xb0, 0x6b, 0x98, 0x55, 0x9d, 0xeb, 0xfa, 0x37, 0xc5, 0x4e, 0xc3, 0xe1, 0x99, 0x06, + 0x1f, 0x92, 0x16, 0x7d, 0x47, 0x60, 0xf3, 0xe2, 0xa0, 0x51, 0x77, 0xd1, 0x3c, 0x2d, 0xda, 0x2d, + 0xf5, 0xbb, 0x2b, 0x20, 0x2d, 0x8b, 0x86, 0x61, 0xb1, 0xed, 0x54, 0xa6, 0x59, 0xc4, 0x4c, 0x2a, + 0x4d, 0xe2, 0x77, 0x02, 0xcd, 0xcb, 0x86, 0x81, 0x1e, 0xbe, 0x27, 0xd8, 0x0a, 0x93, 0x5a, 0x7f, + 0xf4, 0xbf, 0xde, 0x5a, 0xea, 0xae, 0xa1, 0xee, 0xd0, 0xa6, 0xa6, 0x3e, 0x58, 0x46, 0x71, 0x0c, + 0xa5, 0xbc, 0x79, 0xa9, 0xf3, 0x7e, 0x6d, 0x26, 0xb4, 0xf6, 0x97, 0x62, 0x6c, 0xf8, 0x4f, 0x4d, + 0xf8, 0xdb, 0x74, 0x57, 0x87, 0x7f, 0x93, 0x8d, 0xd8, 0x54, 0x4b, 0xbd, 0x35, 0x3d, 0x75, 0xf4, + 0x13, 0x6c, 0xf7, 0xf8, 0x60, 0xde, 0xdf, 0xd1, 0x47, 0xb6, 0xe9, 0x4f, 0x74, 0xbf, 0x9e, 0x90, + 0x17, 0x0f, 0x2c, 0x24, 0xe2, 0x71, 0x98, 0x44, 0x1e, 0x17, 0x91, 0x1f, 0x61, 0x62, 0xba, 0xd9, + 0xcf, 0xae, 0xc2, 0x94, 0xc9, 0xa9, 0xff, 0x21, 0x8f, 0xec, 0xe7, 0xbf, 0x84, 0xfc, 0x5a, 0xd8, + 0xf9, 0x3a, 0x7b, 0xfd, 0x55, 0xcc, 0x87, 0x7d, 0xcf, 0xba, 0xf6, 0x9e, 0xb5, 0xbb, 0xeb, 0xc6, + 0xc3, 0x17, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x9a, 0x9f, 0x7c, 0xe8, 0x3f, 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_config.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_config.pb.go new file mode 100644 index 0000000..3c1b1d6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_config.pb.go @@ -0,0 +1,712 @@ +// Code generated by protoc-gen-go. +// source: google/logging/v2/logging_config.proto +// DO NOT EDIT! + +package logging + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Available log entry formats. Log entries can be written to Stackdriver +// Logging in either format and can be exported in either format. +// Version 2 is the preferred format. +type LogSink_VersionFormat int32 + +const ( + // An unspecified format version that will default to V2. + LogSink_VERSION_FORMAT_UNSPECIFIED LogSink_VersionFormat = 0 + // `LogEntry` version 2 format. + LogSink_V2 LogSink_VersionFormat = 1 + // `LogEntry` version 1 format. + LogSink_V1 LogSink_VersionFormat = 2 +) + +var LogSink_VersionFormat_name = map[int32]string{ + 0: "VERSION_FORMAT_UNSPECIFIED", + 1: "V2", + 2: "V1", +} +var LogSink_VersionFormat_value = map[string]int32{ + "VERSION_FORMAT_UNSPECIFIED": 0, + "V2": 1, + "V1": 2, +} + +func (x LogSink_VersionFormat) String() string { + return proto.EnumName(LogSink_VersionFormat_name, int32(x)) +} +func (LogSink_VersionFormat) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +// Describes a sink used to export log entries to one of the following +// destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a +// Cloud Pub/Sub topic. A logs filter controls which log entries are +// exported. The sink must be created within a project, organization, billing +// account, or folder. +type LogSink struct { + // Required. The client-assigned sink identifier, unique within the + // project. Example: `"my-syslog-errors-to-pubsub"`. Sink identifiers are + // limited to 100 characters and can include only the following characters: + // upper and lower-case alphanumeric characters, underscores, hyphens, and + // periods. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The export destination: + // + // "storage.googleapis.com/[GCS_BUCKET]" + // "bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]" + // "pubsub.googleapis.com/projects/[PROJECT_ID]/topics/[TOPIC_ID]" + // + // The sink's `writer_identity`, set when the sink is created, must + // have permission to write to the destination or else the log + // entries are not exported. For more information, see + // [Exporting Logs With Sinks](/logging/docs/api/tasks/exporting-logs). + Destination string `protobuf:"bytes,3,opt,name=destination" json:"destination,omitempty"` + // Optional. + // An [advanced logs filter](/logging/docs/view/advanced_filters). The only + // exported log entries are those that are in the resource owning the sink and + // that match the filter. The filter must use the log entry format specified + // by the `output_version_format` parameter. For example, in the v2 format: + // + // logName="projects/[PROJECT_ID]/logs/[LOG_ID]" AND severity>=ERROR + Filter string `protobuf:"bytes,5,opt,name=filter" json:"filter,omitempty"` + // Optional. The log entry format to use for this sink's exported log + // entries. The v2 format is used by default. + // **The v1 format is deprecated** and should be used only as part of a + // migration effort to v2. + // See [Migration to the v2 API](/logging/docs/api/v2/migration-to-v2). + OutputVersionFormat LogSink_VersionFormat `protobuf:"varint,6,opt,name=output_version_format,json=outputVersionFormat,enum=google.logging.v2.LogSink_VersionFormat" json:"output_version_format,omitempty"` + // Output only. An IAM identity—a service account or group—under + // which Stackdriver Logging writes the exported log entries to the sink's + // destination. This field is set by + // [sinks.create](/logging/docs/api/reference/rest/v2/projects.sinks/create) + // and + // [sinks.update](/logging/docs/api/reference/rest/v2/projects.sinks/update), + // based on the setting of `unique_writer_identity` in those methods. + // + // Until you grant this identity write-access to the destination, log entry + // exports from this sink will fail. For more information, + // see [Granting access for a + // resource](/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). + // Consult the destination service's documentation to determine the + // appropriate IAM roles to assign to the identity. + WriterIdentity string `protobuf:"bytes,8,opt,name=writer_identity,json=writerIdentity" json:"writer_identity,omitempty"` + // Optional. The time at which this sink will begin exporting log entries. + // Log entries are exported only if their timestamp is not earlier than the + // start time. The default value of this field is the time the sink is + // created or updated. + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,10,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Optional. The time at which this sink will stop exporting log entries. Log + // entries are exported only if their timestamp is earlier than the end time. + // If this field is not supplied, there is no end time. If both a start time + // and an end time are provided, then the end time must be later than the + // start time. + EndTime *google_protobuf4.Timestamp `protobuf:"bytes,11,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *LogSink) Reset() { *m = LogSink{} } +func (m *LogSink) String() string { return proto.CompactTextString(m) } +func (*LogSink) ProtoMessage() {} +func (*LogSink) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *LogSink) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *LogSink) GetDestination() string { + if m != nil { + return m.Destination + } + return "" +} + +func (m *LogSink) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *LogSink) GetOutputVersionFormat() LogSink_VersionFormat { + if m != nil { + return m.OutputVersionFormat + } + return LogSink_VERSION_FORMAT_UNSPECIFIED +} + +func (m *LogSink) GetWriterIdentity() string { + if m != nil { + return m.WriterIdentity + } + return "" +} + +func (m *LogSink) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *LogSink) GetEndTime() *google_protobuf4.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +// The parameters to `ListSinks`. +type ListSinksRequest struct { + // Required. The parent resource whose sinks are to be listed: + // + // "projects/[PROJECT_ID]" + // "organizations/[ORGANIZATION_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]" + // "folders/[FOLDER_ID]" + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. If present, then retrieve the next batch of results from the + // preceding call to this method. `pageToken` must be the value of + // `nextPageToken` from the previous response. The values of other method + // parameters should be identical to those in the previous call. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. The maximum number of results to return from this request. + // Non-positive values are ignored. The presence of `nextPageToken` in the + // response indicates that more results might be available. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListSinksRequest) Reset() { *m = ListSinksRequest{} } +func (m *ListSinksRequest) String() string { return proto.CompactTextString(m) } +func (*ListSinksRequest) ProtoMessage() {} +func (*ListSinksRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ListSinksRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListSinksRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListSinksRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Result returned from `ListSinks`. +type ListSinksResponse struct { + // A list of sinks. + Sinks []*LogSink `protobuf:"bytes,1,rep,name=sinks" json:"sinks,omitempty"` + // If there might be more results than appear in this response, then + // `nextPageToken` is included. To get the next set of results, call the same + // method again using the value of `nextPageToken` as `pageToken`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListSinksResponse) Reset() { *m = ListSinksResponse{} } +func (m *ListSinksResponse) String() string { return proto.CompactTextString(m) } +func (*ListSinksResponse) ProtoMessage() {} +func (*ListSinksResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *ListSinksResponse) GetSinks() []*LogSink { + if m != nil { + return m.Sinks + } + return nil +} + +func (m *ListSinksResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The parameters to `GetSink`. +type GetSinkRequest struct { + // Required. The resource name of the sink: + // + // "projects/[PROJECT_ID]/sinks/[SINK_ID]" + // "organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]" + // "folders/[FOLDER_ID]/sinks/[SINK_ID]" + // + // Example: `"projects/my-project-id/sinks/my-sink-id"`. + SinkName string `protobuf:"bytes,1,opt,name=sink_name,json=sinkName" json:"sink_name,omitempty"` +} + +func (m *GetSinkRequest) Reset() { *m = GetSinkRequest{} } +func (m *GetSinkRequest) String() string { return proto.CompactTextString(m) } +func (*GetSinkRequest) ProtoMessage() {} +func (*GetSinkRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *GetSinkRequest) GetSinkName() string { + if m != nil { + return m.SinkName + } + return "" +} + +// The parameters to `CreateSink`. +type CreateSinkRequest struct { + // Required. The resource in which to create the sink: + // + // "projects/[PROJECT_ID]" + // "organizations/[ORGANIZATION_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]" + // "folders/[FOLDER_ID]" + // + // Examples: `"projects/my-logging-project"`, `"organizations/123456789"`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The new sink, whose `name` parameter is a sink identifier that + // is not already in use. + Sink *LogSink `protobuf:"bytes,2,opt,name=sink" json:"sink,omitempty"` + // Optional. Determines the kind of IAM identity returned as `writer_identity` + // in the new sink. If this value is omitted or set to false, and if the + // sink's parent is a project, then the value returned as `writer_identity` is + // the same group or service account used by Stackdriver Logging before the + // addition of writer identities to this API. The sink's destination must be + // in the same project as the sink itself. + // + // If this field is set to true, or if the sink is owned by a non-project + // resource such as an organization, then the value of `writer_identity` will + // be a unique service account used only for exports from the new sink. For + // more information, see `writer_identity` in [LogSink][google.logging.v2.LogSink]. + UniqueWriterIdentity bool `protobuf:"varint,3,opt,name=unique_writer_identity,json=uniqueWriterIdentity" json:"unique_writer_identity,omitempty"` +} + +func (m *CreateSinkRequest) Reset() { *m = CreateSinkRequest{} } +func (m *CreateSinkRequest) String() string { return proto.CompactTextString(m) } +func (*CreateSinkRequest) ProtoMessage() {} +func (*CreateSinkRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *CreateSinkRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateSinkRequest) GetSink() *LogSink { + if m != nil { + return m.Sink + } + return nil +} + +func (m *CreateSinkRequest) GetUniqueWriterIdentity() bool { + if m != nil { + return m.UniqueWriterIdentity + } + return false +} + +// The parameters to `UpdateSink`. +type UpdateSinkRequest struct { + // Required. The full resource name of the sink to update, including the + // parent resource and the sink identifier: + // + // "projects/[PROJECT_ID]/sinks/[SINK_ID]" + // "organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]" + // "folders/[FOLDER_ID]/sinks/[SINK_ID]" + // + // Example: `"projects/my-project-id/sinks/my-sink-id"`. + SinkName string `protobuf:"bytes,1,opt,name=sink_name,json=sinkName" json:"sink_name,omitempty"` + // Required. The updated sink, whose name is the same identifier that appears + // as part of `sink_name`. If `sink_name` does not exist, then + // this method creates a new sink. + Sink *LogSink `protobuf:"bytes,2,opt,name=sink" json:"sink,omitempty"` + // Optional. See + // [sinks.create](/logging/docs/api/reference/rest/v2/projects.sinks/create) + // for a description of this field. When updating a sink, the effect of this + // field on the value of `writer_identity` in the updated sink depends on both + // the old and new values of this field: + // + // + If the old and new values of this field are both false or both true, + // then there is no change to the sink's `writer_identity`. + // + If the old value is false and the new value is true, then + // `writer_identity` is changed to a unique service account. + // + It is an error if the old value is true and the new value is false. + UniqueWriterIdentity bool `protobuf:"varint,3,opt,name=unique_writer_identity,json=uniqueWriterIdentity" json:"unique_writer_identity,omitempty"` +} + +func (m *UpdateSinkRequest) Reset() { *m = UpdateSinkRequest{} } +func (m *UpdateSinkRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateSinkRequest) ProtoMessage() {} +func (*UpdateSinkRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *UpdateSinkRequest) GetSinkName() string { + if m != nil { + return m.SinkName + } + return "" +} + +func (m *UpdateSinkRequest) GetSink() *LogSink { + if m != nil { + return m.Sink + } + return nil +} + +func (m *UpdateSinkRequest) GetUniqueWriterIdentity() bool { + if m != nil { + return m.UniqueWriterIdentity + } + return false +} + +// The parameters to `DeleteSink`. +type DeleteSinkRequest struct { + // Required. The full resource name of the sink to delete, including the + // parent resource and the sink identifier: + // + // "projects/[PROJECT_ID]/sinks/[SINK_ID]" + // "organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]" + // "billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]" + // "folders/[FOLDER_ID]/sinks/[SINK_ID]" + // + // Example: `"projects/my-project-id/sinks/my-sink-id"`. + SinkName string `protobuf:"bytes,1,opt,name=sink_name,json=sinkName" json:"sink_name,omitempty"` +} + +func (m *DeleteSinkRequest) Reset() { *m = DeleteSinkRequest{} } +func (m *DeleteSinkRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSinkRequest) ProtoMessage() {} +func (*DeleteSinkRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *DeleteSinkRequest) GetSinkName() string { + if m != nil { + return m.SinkName + } + return "" +} + +func init() { + proto.RegisterType((*LogSink)(nil), "google.logging.v2.LogSink") + proto.RegisterType((*ListSinksRequest)(nil), "google.logging.v2.ListSinksRequest") + proto.RegisterType((*ListSinksResponse)(nil), "google.logging.v2.ListSinksResponse") + proto.RegisterType((*GetSinkRequest)(nil), "google.logging.v2.GetSinkRequest") + proto.RegisterType((*CreateSinkRequest)(nil), "google.logging.v2.CreateSinkRequest") + proto.RegisterType((*UpdateSinkRequest)(nil), "google.logging.v2.UpdateSinkRequest") + proto.RegisterType((*DeleteSinkRequest)(nil), "google.logging.v2.DeleteSinkRequest") + proto.RegisterEnum("google.logging.v2.LogSink_VersionFormat", LogSink_VersionFormat_name, LogSink_VersionFormat_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ConfigServiceV2 service + +type ConfigServiceV2Client interface { + // Lists sinks. + ListSinks(ctx context.Context, in *ListSinksRequest, opts ...grpc.CallOption) (*ListSinksResponse, error) + // Gets a sink. + GetSink(ctx context.Context, in *GetSinkRequest, opts ...grpc.CallOption) (*LogSink, error) + // Creates a sink that exports specified log entries to a destination. The + // export of newly-ingested log entries begins immediately, unless the current + // time is outside the sink's start and end times or the sink's + // `writer_identity` is not permitted to write to the destination. A sink can + // export log entries only from the resource owning the sink. + CreateSink(ctx context.Context, in *CreateSinkRequest, opts ...grpc.CallOption) (*LogSink, error) + // Updates a sink. If the named sink doesn't exist, then this method is + // identical to + // [sinks.create](/logging/docs/api/reference/rest/v2/projects.sinks/create). + // If the named sink does exist, then this method replaces the following + // fields in the existing sink with values from the new sink: `destination`, + // `filter`, `output_version_format`, `start_time`, and `end_time`. + // The updated filter might also have a new `writer_identity`; see the + // `unique_writer_identity` field. + UpdateSink(ctx context.Context, in *UpdateSinkRequest, opts ...grpc.CallOption) (*LogSink, error) + // Deletes a sink. If the sink has a unique `writer_identity`, then that + // service account is also deleted. + DeleteSink(ctx context.Context, in *DeleteSinkRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) +} + +type configServiceV2Client struct { + cc *grpc.ClientConn +} + +func NewConfigServiceV2Client(cc *grpc.ClientConn) ConfigServiceV2Client { + return &configServiceV2Client{cc} +} + +func (c *configServiceV2Client) ListSinks(ctx context.Context, in *ListSinksRequest, opts ...grpc.CallOption) (*ListSinksResponse, error) { + out := new(ListSinksResponse) + err := grpc.Invoke(ctx, "/google.logging.v2.ConfigServiceV2/ListSinks", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *configServiceV2Client) GetSink(ctx context.Context, in *GetSinkRequest, opts ...grpc.CallOption) (*LogSink, error) { + out := new(LogSink) + err := grpc.Invoke(ctx, "/google.logging.v2.ConfigServiceV2/GetSink", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *configServiceV2Client) CreateSink(ctx context.Context, in *CreateSinkRequest, opts ...grpc.CallOption) (*LogSink, error) { + out := new(LogSink) + err := grpc.Invoke(ctx, "/google.logging.v2.ConfigServiceV2/CreateSink", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *configServiceV2Client) UpdateSink(ctx context.Context, in *UpdateSinkRequest, opts ...grpc.CallOption) (*LogSink, error) { + out := new(LogSink) + err := grpc.Invoke(ctx, "/google.logging.v2.ConfigServiceV2/UpdateSink", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *configServiceV2Client) DeleteSink(ctx context.Context, in *DeleteSinkRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) + err := grpc.Invoke(ctx, "/google.logging.v2.ConfigServiceV2/DeleteSink", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ConfigServiceV2 service + +type ConfigServiceV2Server interface { + // Lists sinks. + ListSinks(context.Context, *ListSinksRequest) (*ListSinksResponse, error) + // Gets a sink. + GetSink(context.Context, *GetSinkRequest) (*LogSink, error) + // Creates a sink that exports specified log entries to a destination. The + // export of newly-ingested log entries begins immediately, unless the current + // time is outside the sink's start and end times or the sink's + // `writer_identity` is not permitted to write to the destination. A sink can + // export log entries only from the resource owning the sink. + CreateSink(context.Context, *CreateSinkRequest) (*LogSink, error) + // Updates a sink. If the named sink doesn't exist, then this method is + // identical to + // [sinks.create](/logging/docs/api/reference/rest/v2/projects.sinks/create). + // If the named sink does exist, then this method replaces the following + // fields in the existing sink with values from the new sink: `destination`, + // `filter`, `output_version_format`, `start_time`, and `end_time`. + // The updated filter might also have a new `writer_identity`; see the + // `unique_writer_identity` field. + UpdateSink(context.Context, *UpdateSinkRequest) (*LogSink, error) + // Deletes a sink. If the sink has a unique `writer_identity`, then that + // service account is also deleted. + DeleteSink(context.Context, *DeleteSinkRequest) (*google_protobuf5.Empty, error) +} + +func RegisterConfigServiceV2Server(s *grpc.Server, srv ConfigServiceV2Server) { + s.RegisterService(&_ConfigServiceV2_serviceDesc, srv) +} + +func _ConfigServiceV2_ListSinks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSinksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServiceV2Server).ListSinks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.ConfigServiceV2/ListSinks", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServiceV2Server).ListSinks(ctx, req.(*ListSinksRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ConfigServiceV2_GetSink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSinkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServiceV2Server).GetSink(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.ConfigServiceV2/GetSink", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServiceV2Server).GetSink(ctx, req.(*GetSinkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ConfigServiceV2_CreateSink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSinkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServiceV2Server).CreateSink(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.ConfigServiceV2/CreateSink", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServiceV2Server).CreateSink(ctx, req.(*CreateSinkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ConfigServiceV2_UpdateSink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateSinkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServiceV2Server).UpdateSink(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.ConfigServiceV2/UpdateSink", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServiceV2Server).UpdateSink(ctx, req.(*UpdateSinkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ConfigServiceV2_DeleteSink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSinkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServiceV2Server).DeleteSink(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.ConfigServiceV2/DeleteSink", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServiceV2Server).DeleteSink(ctx, req.(*DeleteSinkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ConfigServiceV2_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.logging.v2.ConfigServiceV2", + HandlerType: (*ConfigServiceV2Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListSinks", + Handler: _ConfigServiceV2_ListSinks_Handler, + }, + { + MethodName: "GetSink", + Handler: _ConfigServiceV2_GetSink_Handler, + }, + { + MethodName: "CreateSink", + Handler: _ConfigServiceV2_CreateSink_Handler, + }, + { + MethodName: "UpdateSink", + Handler: _ConfigServiceV2_UpdateSink_Handler, + }, + { + MethodName: "DeleteSink", + Handler: _ConfigServiceV2_DeleteSink_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/logging/v2/logging_config.proto", +} + +func init() { proto.RegisterFile("google/logging/v2/logging_config.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 787 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xed, 0x4e, 0x33, 0x45, + 0x14, 0x76, 0x0b, 0x94, 0xf6, 0x90, 0x17, 0xda, 0xd1, 0x17, 0x37, 0x8b, 0xaf, 0xd4, 0x15, 0xb0, + 0xa9, 0x71, 0x17, 0x57, 0x4d, 0xfc, 0x88, 0x31, 0x52, 0x0a, 0x69, 0x82, 0xd0, 0x6c, 0xa1, 0x26, + 0xc6, 0x64, 0xb3, 0xb4, 0xd3, 0xcd, 0x48, 0x77, 0x66, 0xd9, 0x9d, 0x56, 0x81, 0x90, 0xa8, 0x77, + 0x40, 0x4c, 0xbc, 0x08, 0x6f, 0xc7, 0x5b, 0xf0, 0x3a, 0x8c, 0x99, 0x99, 0x2d, 0xb4, 0xdd, 0x5a, + 0xf9, 0xe5, 0xaf, 0x9d, 0xf3, 0x35, 0xcf, 0x73, 0xce, 0x79, 0x32, 0x0b, 0x7b, 0x01, 0x63, 0xc1, + 0x00, 0xdb, 0x03, 0x16, 0x04, 0x84, 0x06, 0xf6, 0xc8, 0x19, 0x1f, 0xbd, 0x2e, 0xa3, 0x7d, 0x12, + 0x58, 0x51, 0xcc, 0x38, 0x43, 0x65, 0x95, 0x67, 0xa5, 0x41, 0x6b, 0xe4, 0x18, 0x6f, 0xa5, 0xa5, + 0x7e, 0x44, 0x6c, 0x9f, 0x52, 0xc6, 0x7d, 0x4e, 0x18, 0x4d, 0x54, 0x81, 0xb1, 0x95, 0x46, 0xa5, + 0x75, 0x39, 0xec, 0xdb, 0x38, 0x8c, 0xf8, 0x4d, 0x1a, 0xdc, 0x9e, 0x0d, 0x72, 0x12, 0xe2, 0x84, + 0xfb, 0x61, 0xa4, 0x12, 0xcc, 0x87, 0x25, 0x58, 0x3d, 0x61, 0x41, 0x9b, 0xd0, 0x2b, 0x84, 0x60, + 0x99, 0xfa, 0x21, 0xd6, 0xb5, 0x8a, 0x56, 0x2d, 0xba, 0xf2, 0x8c, 0x2a, 0xb0, 0xd6, 0xc3, 0x09, + 0x27, 0x54, 0x62, 0xea, 0x4b, 0x32, 0x34, 0xe9, 0x42, 0x9b, 0x90, 0xef, 0x93, 0x01, 0xc7, 0xb1, + 0xbe, 0x22, 0x83, 0xa9, 0x85, 0xbe, 0x87, 0x97, 0x6c, 0xc8, 0xa3, 0x21, 0xf7, 0x46, 0x38, 0x4e, + 0x08, 0xa3, 0x5e, 0x9f, 0xc5, 0xa1, 0xcf, 0xf5, 0x7c, 0x45, 0xab, 0xae, 0x3b, 0x55, 0x2b, 0xd3, + 0xa8, 0x95, 0x12, 0xb1, 0x3a, 0xaa, 0xe0, 0x48, 0xe6, 0xbb, 0xaf, 0xab, 0x6b, 0xa6, 0x9c, 0xe8, + 0x3d, 0xd8, 0xf8, 0x31, 0x26, 0x1c, 0xc7, 0x1e, 0xe9, 0x61, 0xca, 0x09, 0xbf, 0xd1, 0x0b, 0x12, + 0x7e, 0x5d, 0xb9, 0x9b, 0xa9, 0x17, 0x7d, 0x06, 0x90, 0x70, 0x3f, 0xe6, 0x9e, 0xe8, 0x5c, 0x87, + 0x8a, 0x56, 0x5d, 0x73, 0x8c, 0x31, 0xf6, 0x78, 0x2c, 0xd6, 0xf9, 0x78, 0x2c, 0x6e, 0x51, 0x66, + 0x0b, 0x1b, 0x7d, 0x02, 0x05, 0x4c, 0x7b, 0xaa, 0x70, 0xed, 0x3f, 0x0b, 0x57, 0x31, 0xed, 0x09, + 0xcb, 0xfc, 0x0a, 0x5e, 0x4c, 0x73, 0x7d, 0x1b, 0x8c, 0x4e, 0xc3, 0x6d, 0x37, 0xcf, 0x4e, 0xbd, + 0xa3, 0x33, 0xf7, 0x9b, 0xaf, 0xcf, 0xbd, 0x8b, 0xd3, 0x76, 0xab, 0x51, 0x6f, 0x1e, 0x35, 0x1b, + 0x87, 0xa5, 0xd7, 0x50, 0x1e, 0x72, 0x1d, 0xa7, 0xa4, 0xc9, 0xef, 0x87, 0xa5, 0x9c, 0xd9, 0x87, + 0xd2, 0x09, 0x49, 0xb8, 0x18, 0x45, 0xe2, 0xe2, 0xeb, 0x21, 0x4e, 0xb8, 0x98, 0x72, 0xe4, 0xc7, + 0x98, 0xf2, 0x74, 0x3b, 0xa9, 0x85, 0x5e, 0x01, 0x44, 0x7e, 0x80, 0x3d, 0xce, 0xae, 0x30, 0xd5, + 0x73, 0x32, 0x56, 0x14, 0x9e, 0x73, 0xe1, 0x40, 0x5b, 0x20, 0x0d, 0x2f, 0x21, 0xb7, 0x58, 0x2e, + 0x6f, 0xc5, 0x2d, 0x08, 0x47, 0x9b, 0xdc, 0x62, 0x33, 0x84, 0xf2, 0x04, 0x4e, 0x12, 0x31, 0x9a, + 0x60, 0xb4, 0x0f, 0x2b, 0x89, 0x70, 0xe8, 0x5a, 0x65, 0x69, 0xb2, 0xe3, 0xec, 0x9a, 0x5c, 0x95, + 0x88, 0xf6, 0x60, 0x83, 0xe2, 0x9f, 0xb8, 0x97, 0xe1, 0xf1, 0x42, 0xb8, 0x5b, 0x63, 0x2e, 0xe6, + 0x07, 0xb0, 0x7e, 0x8c, 0x25, 0xda, 0xb8, 0xa9, 0x2d, 0x28, 0x8a, 0x2b, 0xbc, 0x09, 0xd5, 0x15, + 0x84, 0xe3, 0xd4, 0x0f, 0xb1, 0xf9, 0xa0, 0x41, 0xb9, 0x1e, 0x63, 0x9f, 0xe3, 0xc9, 0x92, 0x7f, + 0x9b, 0x83, 0x05, 0xcb, 0xa2, 0x52, 0x22, 0x2f, 0x66, 0x2d, 0xf3, 0xd0, 0xc7, 0xb0, 0x39, 0xa4, + 0xe4, 0x7a, 0x88, 0xbd, 0x59, 0x19, 0x89, 0x29, 0x15, 0xdc, 0x37, 0x54, 0xf4, 0xdb, 0x29, 0x31, + 0x99, 0xbf, 0x6b, 0x50, 0xbe, 0x88, 0x7a, 0x33, 0x9c, 0x16, 0xb5, 0xf1, 0x3f, 0x11, 0xdb, 0x87, + 0xf2, 0x21, 0x1e, 0xe0, 0xe7, 0xf3, 0x72, 0xfe, 0x5e, 0x86, 0x8d, 0xba, 0x7c, 0x78, 0xda, 0x38, + 0x1e, 0x91, 0x2e, 0xee, 0x38, 0xe8, 0x1e, 0x8a, 0x8f, 0x82, 0x40, 0xef, 0xce, 0xa3, 0x3a, 0x23, + 0x4b, 0x63, 0x67, 0x71, 0x92, 0xd2, 0x94, 0xb9, 0xfb, 0xeb, 0x9f, 0x7f, 0xfd, 0x96, 0xdb, 0x46, + 0xaf, 0xc4, 0xab, 0x77, 0xa7, 0x36, 0xf6, 0x65, 0x14, 0xb3, 0x1f, 0x70, 0x97, 0x27, 0x76, 0xed, + 0xde, 0x56, 0x42, 0xe2, 0xb0, 0x9a, 0x0a, 0x04, 0xbd, 0x33, 0xe7, 0xde, 0x69, 0xf1, 0x18, 0x0b, + 0x46, 0x69, 0xd6, 0x24, 0xe0, 0x0e, 0x32, 0x25, 0xe0, 0xe3, 0x10, 0x26, 0x30, 0x15, 0xa4, 0x5d, + 0xbb, 0x47, 0x77, 0x00, 0x4f, 0x32, 0x43, 0xf3, 0x1a, 0xca, 0xa8, 0x70, 0x21, 0xf6, 0xfb, 0x12, + 0x7b, 0xd7, 0x5c, 0xdc, 0xec, 0xe7, 0x6a, 0xdb, 0x3f, 0x6b, 0x00, 0x4f, 0x82, 0x9a, 0x8b, 0x9e, + 0xd1, 0xdb, 0x42, 0xf4, 0x7d, 0x89, 0x5e, 0x33, 0x9e, 0xd1, 0x79, 0x4a, 0x61, 0x04, 0xf0, 0x24, + 0x9d, 0xb9, 0x0c, 0x32, 0xca, 0x32, 0x36, 0x33, 0xef, 0x60, 0x43, 0xfc, 0x74, 0xc6, 0x73, 0xaf, + 0x3d, 0x03, 0xfd, 0xe0, 0x17, 0x0d, 0x5e, 0x76, 0x59, 0x98, 0xc5, 0x3b, 0x40, 0x27, 0xea, 0xac, + 0xe4, 0xd9, 0x12, 0x10, 0x2d, 0xed, 0xbb, 0x4f, 0xd3, 0xc4, 0x80, 0x0d, 0x7c, 0x1a, 0x58, 0x2c, + 0x0e, 0xec, 0x00, 0x53, 0x49, 0xc0, 0x56, 0x21, 0x3f, 0x22, 0xc9, 0xc4, 0xff, 0xf5, 0x8b, 0xf4, + 0xf8, 0x47, 0xee, 0xcd, 0x63, 0x55, 0x5a, 0x1f, 0xb0, 0x61, 0xcf, 0x4a, 0x6f, 0xb7, 0x3a, 0xce, + 0x65, 0x5e, 0x96, 0x7f, 0xf4, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x9e, 0xa5, 0xee, 0x9d, + 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_metrics.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_metrics.pb.go new file mode 100644 index 0000000..2478264 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_metrics.pb.go @@ -0,0 +1,565 @@ +// Code generated by protoc-gen-go. +// source: google/logging/v2/logging_metrics.proto +// DO NOT EDIT! + +package logging + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/distribution" +import _ "google.golang.org/genproto/googleapis/api/metric" +import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Stackdriver Logging API version. +type LogMetric_ApiVersion int32 + +const ( + // Stackdriver Logging API v2. + LogMetric_V2 LogMetric_ApiVersion = 0 + // Stackdriver Logging API v1. + LogMetric_V1 LogMetric_ApiVersion = 1 +) + +var LogMetric_ApiVersion_name = map[int32]string{ + 0: "V2", + 1: "V1", +} +var LogMetric_ApiVersion_value = map[string]int32{ + "V2": 0, + "V1": 1, +} + +func (x LogMetric_ApiVersion) String() string { + return proto.EnumName(LogMetric_ApiVersion_name, int32(x)) +} +func (LogMetric_ApiVersion) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +// Describes a logs-based metric. The value of the metric is the +// number of log entries that match a logs filter in a given time interval. +type LogMetric struct { + // Required. The client-assigned metric identifier. + // Examples: `"error_count"`, `"nginx/requests"`. + // + // Metric identifiers are limited to 100 characters and can include + // only the following characters: `A-Z`, `a-z`, `0-9`, and the + // special characters `_-.,+!*',()%/`. The forward-slash character + // (`/`) denotes a hierarchy of name pieces, and it cannot be the + // first character of the name. + // + // The metric identifier in this field must not be + // [URL-encoded](https://en.wikipedia.org/wiki/Percent-encoding). + // However, when the metric identifier appears as the `[METRIC_ID]` + // part of a `metric_name` API parameter, then the metric identifier + // must be URL-encoded. Example: + // `"projects/my-project/metrics/nginx%2Frequests"`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. A description of this metric, which is used in documentation. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Required. An [advanced logs filter](/logging/docs/view/advanced_filters) + // which is used to match log entries. + // Example: + // + // "resource.type=gae_app AND severity>=ERROR" + // + // The maximum length of the filter is 20000 characters. + Filter string `protobuf:"bytes,3,opt,name=filter" json:"filter,omitempty"` + // Output only. The API version that created or updated this metric. + // The version also dictates the syntax of the filter expression. When a value + // for this field is missing, the default value of V2 should be assumed. + Version LogMetric_ApiVersion `protobuf:"varint,4,opt,name=version,enum=google.logging.v2.LogMetric_ApiVersion" json:"version,omitempty"` +} + +func (m *LogMetric) Reset() { *m = LogMetric{} } +func (m *LogMetric) String() string { return proto.CompactTextString(m) } +func (*LogMetric) ProtoMessage() {} +func (*LogMetric) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *LogMetric) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *LogMetric) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *LogMetric) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *LogMetric) GetVersion() LogMetric_ApiVersion { + if m != nil { + return m.Version + } + return LogMetric_V2 +} + +// The parameters to ListLogMetrics. +type ListLogMetricsRequest struct { + // Required. The name of the project containing the metrics: + // + // "projects/[PROJECT_ID]" + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. If present, then retrieve the next batch of results from the + // preceding call to this method. `pageToken` must be the value of + // `nextPageToken` from the previous response. The values of other method + // parameters should be identical to those in the previous call. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. The maximum number of results to return from this request. + // Non-positive values are ignored. The presence of `nextPageToken` in the + // response indicates that more results might be available. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListLogMetricsRequest) Reset() { *m = ListLogMetricsRequest{} } +func (m *ListLogMetricsRequest) String() string { return proto.CompactTextString(m) } +func (*ListLogMetricsRequest) ProtoMessage() {} +func (*ListLogMetricsRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *ListLogMetricsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListLogMetricsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListLogMetricsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Result returned from ListLogMetrics. +type ListLogMetricsResponse struct { + // A list of logs-based metrics. + Metrics []*LogMetric `protobuf:"bytes,1,rep,name=metrics" json:"metrics,omitempty"` + // If there might be more results than appear in this response, then + // `nextPageToken` is included. To get the next set of results, call this + // method again using the value of `nextPageToken` as `pageToken`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListLogMetricsResponse) Reset() { *m = ListLogMetricsResponse{} } +func (m *ListLogMetricsResponse) String() string { return proto.CompactTextString(m) } +func (*ListLogMetricsResponse) ProtoMessage() {} +func (*ListLogMetricsResponse) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } + +func (m *ListLogMetricsResponse) GetMetrics() []*LogMetric { + if m != nil { + return m.Metrics + } + return nil +} + +func (m *ListLogMetricsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The parameters to GetLogMetric. +type GetLogMetricRequest struct { + // The resource name of the desired metric: + // + // "projects/[PROJECT_ID]/metrics/[METRIC_ID]" + MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName" json:"metric_name,omitempty"` +} + +func (m *GetLogMetricRequest) Reset() { *m = GetLogMetricRequest{} } +func (m *GetLogMetricRequest) String() string { return proto.CompactTextString(m) } +func (*GetLogMetricRequest) ProtoMessage() {} +func (*GetLogMetricRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{3} } + +func (m *GetLogMetricRequest) GetMetricName() string { + if m != nil { + return m.MetricName + } + return "" +} + +// The parameters to CreateLogMetric. +type CreateLogMetricRequest struct { + // The resource name of the project in which to create the metric: + // + // "projects/[PROJECT_ID]" + // + // The new metric must be provided in the request. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The new logs-based metric, which must not have an identifier that + // already exists. + Metric *LogMetric `protobuf:"bytes,2,opt,name=metric" json:"metric,omitempty"` +} + +func (m *CreateLogMetricRequest) Reset() { *m = CreateLogMetricRequest{} } +func (m *CreateLogMetricRequest) String() string { return proto.CompactTextString(m) } +func (*CreateLogMetricRequest) ProtoMessage() {} +func (*CreateLogMetricRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{4} } + +func (m *CreateLogMetricRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateLogMetricRequest) GetMetric() *LogMetric { + if m != nil { + return m.Metric + } + return nil +} + +// The parameters to UpdateLogMetric. +type UpdateLogMetricRequest struct { + // The resource name of the metric to update: + // + // "projects/[PROJECT_ID]/metrics/[METRIC_ID]" + // + // The updated metric must be provided in the request and it's + // `name` field must be the same as `[METRIC_ID]` If the metric + // does not exist in `[PROJECT_ID]`, then a new metric is created. + MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName" json:"metric_name,omitempty"` + // The updated metric. + Metric *LogMetric `protobuf:"bytes,2,opt,name=metric" json:"metric,omitempty"` +} + +func (m *UpdateLogMetricRequest) Reset() { *m = UpdateLogMetricRequest{} } +func (m *UpdateLogMetricRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateLogMetricRequest) ProtoMessage() {} +func (*UpdateLogMetricRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{5} } + +func (m *UpdateLogMetricRequest) GetMetricName() string { + if m != nil { + return m.MetricName + } + return "" +} + +func (m *UpdateLogMetricRequest) GetMetric() *LogMetric { + if m != nil { + return m.Metric + } + return nil +} + +// The parameters to DeleteLogMetric. +type DeleteLogMetricRequest struct { + // The resource name of the metric to delete: + // + // "projects/[PROJECT_ID]/metrics/[METRIC_ID]" + MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName" json:"metric_name,omitempty"` +} + +func (m *DeleteLogMetricRequest) Reset() { *m = DeleteLogMetricRequest{} } +func (m *DeleteLogMetricRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteLogMetricRequest) ProtoMessage() {} +func (*DeleteLogMetricRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{6} } + +func (m *DeleteLogMetricRequest) GetMetricName() string { + if m != nil { + return m.MetricName + } + return "" +} + +func init() { + proto.RegisterType((*LogMetric)(nil), "google.logging.v2.LogMetric") + proto.RegisterType((*ListLogMetricsRequest)(nil), "google.logging.v2.ListLogMetricsRequest") + proto.RegisterType((*ListLogMetricsResponse)(nil), "google.logging.v2.ListLogMetricsResponse") + proto.RegisterType((*GetLogMetricRequest)(nil), "google.logging.v2.GetLogMetricRequest") + proto.RegisterType((*CreateLogMetricRequest)(nil), "google.logging.v2.CreateLogMetricRequest") + proto.RegisterType((*UpdateLogMetricRequest)(nil), "google.logging.v2.UpdateLogMetricRequest") + proto.RegisterType((*DeleteLogMetricRequest)(nil), "google.logging.v2.DeleteLogMetricRequest") + proto.RegisterEnum("google.logging.v2.LogMetric_ApiVersion", LogMetric_ApiVersion_name, LogMetric_ApiVersion_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for MetricsServiceV2 service + +type MetricsServiceV2Client interface { + // Lists logs-based metrics. + ListLogMetrics(ctx context.Context, in *ListLogMetricsRequest, opts ...grpc.CallOption) (*ListLogMetricsResponse, error) + // Gets a logs-based metric. + GetLogMetric(ctx context.Context, in *GetLogMetricRequest, opts ...grpc.CallOption) (*LogMetric, error) + // Creates a logs-based metric. + CreateLogMetric(ctx context.Context, in *CreateLogMetricRequest, opts ...grpc.CallOption) (*LogMetric, error) + // Creates or updates a logs-based metric. + UpdateLogMetric(ctx context.Context, in *UpdateLogMetricRequest, opts ...grpc.CallOption) (*LogMetric, error) + // Deletes a logs-based metric. + DeleteLogMetric(ctx context.Context, in *DeleteLogMetricRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) +} + +type metricsServiceV2Client struct { + cc *grpc.ClientConn +} + +func NewMetricsServiceV2Client(cc *grpc.ClientConn) MetricsServiceV2Client { + return &metricsServiceV2Client{cc} +} + +func (c *metricsServiceV2Client) ListLogMetrics(ctx context.Context, in *ListLogMetricsRequest, opts ...grpc.CallOption) (*ListLogMetricsResponse, error) { + out := new(ListLogMetricsResponse) + err := grpc.Invoke(ctx, "/google.logging.v2.MetricsServiceV2/ListLogMetrics", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricsServiceV2Client) GetLogMetric(ctx context.Context, in *GetLogMetricRequest, opts ...grpc.CallOption) (*LogMetric, error) { + out := new(LogMetric) + err := grpc.Invoke(ctx, "/google.logging.v2.MetricsServiceV2/GetLogMetric", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricsServiceV2Client) CreateLogMetric(ctx context.Context, in *CreateLogMetricRequest, opts ...grpc.CallOption) (*LogMetric, error) { + out := new(LogMetric) + err := grpc.Invoke(ctx, "/google.logging.v2.MetricsServiceV2/CreateLogMetric", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricsServiceV2Client) UpdateLogMetric(ctx context.Context, in *UpdateLogMetricRequest, opts ...grpc.CallOption) (*LogMetric, error) { + out := new(LogMetric) + err := grpc.Invoke(ctx, "/google.logging.v2.MetricsServiceV2/UpdateLogMetric", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricsServiceV2Client) DeleteLogMetric(ctx context.Context, in *DeleteLogMetricRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) + err := grpc.Invoke(ctx, "/google.logging.v2.MetricsServiceV2/DeleteLogMetric", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for MetricsServiceV2 service + +type MetricsServiceV2Server interface { + // Lists logs-based metrics. + ListLogMetrics(context.Context, *ListLogMetricsRequest) (*ListLogMetricsResponse, error) + // Gets a logs-based metric. + GetLogMetric(context.Context, *GetLogMetricRequest) (*LogMetric, error) + // Creates a logs-based metric. + CreateLogMetric(context.Context, *CreateLogMetricRequest) (*LogMetric, error) + // Creates or updates a logs-based metric. + UpdateLogMetric(context.Context, *UpdateLogMetricRequest) (*LogMetric, error) + // Deletes a logs-based metric. + DeleteLogMetric(context.Context, *DeleteLogMetricRequest) (*google_protobuf5.Empty, error) +} + +func RegisterMetricsServiceV2Server(s *grpc.Server, srv MetricsServiceV2Server) { + s.RegisterService(&_MetricsServiceV2_serviceDesc, srv) +} + +func _MetricsServiceV2_ListLogMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListLogMetricsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricsServiceV2Server).ListLogMetrics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.MetricsServiceV2/ListLogMetrics", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricsServiceV2Server).ListLogMetrics(ctx, req.(*ListLogMetricsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricsServiceV2_GetLogMetric_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLogMetricRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricsServiceV2Server).GetLogMetric(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.MetricsServiceV2/GetLogMetric", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricsServiceV2Server).GetLogMetric(ctx, req.(*GetLogMetricRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricsServiceV2_CreateLogMetric_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateLogMetricRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricsServiceV2Server).CreateLogMetric(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.MetricsServiceV2/CreateLogMetric", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricsServiceV2Server).CreateLogMetric(ctx, req.(*CreateLogMetricRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricsServiceV2_UpdateLogMetric_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateLogMetricRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricsServiceV2Server).UpdateLogMetric(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.MetricsServiceV2/UpdateLogMetric", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricsServiceV2Server).UpdateLogMetric(ctx, req.(*UpdateLogMetricRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricsServiceV2_DeleteLogMetric_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteLogMetricRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricsServiceV2Server).DeleteLogMetric(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.logging.v2.MetricsServiceV2/DeleteLogMetric", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricsServiceV2Server).DeleteLogMetric(ctx, req.(*DeleteLogMetricRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _MetricsServiceV2_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.logging.v2.MetricsServiceV2", + HandlerType: (*MetricsServiceV2Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListLogMetrics", + Handler: _MetricsServiceV2_ListLogMetrics_Handler, + }, + { + MethodName: "GetLogMetric", + Handler: _MetricsServiceV2_GetLogMetric_Handler, + }, + { + MethodName: "CreateLogMetric", + Handler: _MetricsServiceV2_CreateLogMetric_Handler, + }, + { + MethodName: "UpdateLogMetric", + Handler: _MetricsServiceV2_UpdateLogMetric_Handler, + }, + { + MethodName: "DeleteLogMetric", + Handler: _MetricsServiceV2_DeleteLogMetric_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/logging/v2/logging_metrics.proto", +} + +func init() { proto.RegisterFile("google/logging/v2/logging_metrics.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 665 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x4f, 0x13, 0x41, + 0x14, 0x77, 0x0a, 0x14, 0x79, 0x28, 0xc5, 0x21, 0x94, 0xa6, 0x40, 0xa8, 0x7b, 0x80, 0xc2, 0x61, + 0x57, 0x57, 0x43, 0xfc, 0x13, 0x0f, 0x80, 0x86, 0x0b, 0x1a, 0x52, 0xb4, 0x07, 0x2f, 0xcd, 0xd2, + 0x3e, 0x36, 0x23, 0xed, 0xce, 0xba, 0x33, 0x6d, 0x10, 0xc3, 0x85, 0x70, 0x33, 0xf1, 0xa0, 0xdf, + 0xc2, 0x8f, 0xe0, 0xd7, 0xd0, 0x8f, 0xe0, 0x07, 0x31, 0x3b, 0x33, 0x0b, 0x6b, 0xbb, 0xd2, 0x86, + 0x53, 0x67, 0xde, 0xef, 0xbd, 0xfd, 0xfd, 0xde, 0x7b, 0xbf, 0x4c, 0x61, 0xcd, 0xe7, 0xdc, 0x6f, + 0xa3, 0xd3, 0xe6, 0xbe, 0xcf, 0x02, 0xdf, 0xe9, 0xb9, 0xc9, 0xb1, 0xd1, 0x41, 0x19, 0xb1, 0xa6, + 0xb0, 0xc3, 0x88, 0x4b, 0x4e, 0xef, 0xe9, 0x44, 0xdb, 0xa0, 0x76, 0xcf, 0x2d, 0x2f, 0x99, 0x5a, + 0x2f, 0x64, 0x8e, 0x17, 0x04, 0x5c, 0x7a, 0x92, 0xf1, 0xc0, 0x14, 0x94, 0x97, 0x53, 0x68, 0x8b, + 0x09, 0x19, 0xb1, 0xc3, 0x6e, 0x8c, 0x1b, 0x78, 0x21, 0x05, 0x6b, 0x26, 0x03, 0x2c, 0x1a, 0x40, + 0xdd, 0x0e, 0xbb, 0x47, 0x0e, 0x76, 0x42, 0xf9, 0x49, 0x83, 0xd6, 0x4f, 0x02, 0x53, 0x7b, 0xdc, + 0x7f, 0xad, 0x0a, 0x28, 0x85, 0xf1, 0xc0, 0xeb, 0x60, 0x89, 0x54, 0x48, 0x75, 0xaa, 0xa6, 0xce, + 0xb4, 0x02, 0xd3, 0x2d, 0x14, 0xcd, 0x88, 0x85, 0x31, 0x59, 0x29, 0xa7, 0xa0, 0x74, 0x88, 0x16, + 0x21, 0x7f, 0xc4, 0xda, 0x12, 0xa3, 0xd2, 0x98, 0x02, 0xcd, 0x8d, 0x6e, 0xc1, 0x64, 0x0f, 0x23, + 0x11, 0x57, 0x8d, 0x57, 0x48, 0x75, 0xc6, 0x5d, 0xb3, 0x07, 0x7a, 0xb6, 0x2f, 0xc9, 0xed, 0xad, + 0x90, 0xd5, 0x75, 0x7a, 0x2d, 0xa9, 0xb3, 0x96, 0x00, 0xae, 0xc2, 0x34, 0x0f, 0xb9, 0xba, 0x3b, + 0x7b, 0x4b, 0xfd, 0x3e, 0x9c, 0x25, 0xd6, 0x31, 0xcc, 0xef, 0x31, 0x21, 0x2f, 0x3f, 0x21, 0x6a, + 0xf8, 0xb1, 0x8b, 0x42, 0xc6, 0x8a, 0x42, 0x2f, 0xc2, 0x40, 0x9a, 0x4e, 0xcc, 0x8d, 0x2e, 0x03, + 0x84, 0x9e, 0x8f, 0x0d, 0xc9, 0x8f, 0x31, 0x69, 0x65, 0x2a, 0x8e, 0xbc, 0x8d, 0x03, 0x74, 0x11, + 0xd4, 0xa5, 0x21, 0xd8, 0x29, 0xaa, 0x5e, 0x26, 0x6a, 0xb7, 0xe3, 0xc0, 0x01, 0x3b, 0x45, 0xeb, + 0x04, 0x8a, 0xfd, 0x64, 0x22, 0xe4, 0x81, 0x40, 0xba, 0x09, 0x93, 0x66, 0xb5, 0x25, 0x52, 0x19, + 0xab, 0x4e, 0xbb, 0x4b, 0xd7, 0xf5, 0x59, 0x4b, 0x92, 0xe9, 0x2a, 0x14, 0x02, 0x3c, 0x91, 0x8d, + 0x01, 0x49, 0x77, 0xe3, 0xf0, 0x7e, 0x22, 0xcb, 0xda, 0x84, 0xb9, 0x5d, 0xbc, 0x22, 0x4e, 0x9a, + 0x5c, 0x81, 0x69, 0xfd, 0xa5, 0x46, 0x6a, 0x67, 0xa0, 0x43, 0x6f, 0xbc, 0x0e, 0x5a, 0x47, 0x50, + 0xdc, 0x89, 0xd0, 0x93, 0x38, 0x50, 0xfa, 0xbf, 0xf9, 0x3c, 0x86, 0xbc, 0xae, 0x57, 0x42, 0x86, + 0x35, 0x62, 0x72, 0x2d, 0x0e, 0xc5, 0x77, 0x61, 0x2b, 0x8b, 0x67, 0x98, 0xc4, 0x1b, 0x12, 0x3e, + 0x85, 0xe2, 0x4b, 0x6c, 0xe3, 0x0d, 0x08, 0xdd, 0xdf, 0x13, 0x30, 0x6b, 0xf6, 0x77, 0x80, 0x51, + 0x8f, 0x35, 0xb1, 0xee, 0xd2, 0xaf, 0x04, 0x66, 0xfe, 0xdd, 0x2d, 0xad, 0x66, 0x09, 0xc9, 0xf2, + 0x5a, 0x79, 0x7d, 0x84, 0x4c, 0x6d, 0x14, 0x6b, 0xed, 0xfc, 0xd7, 0x9f, 0xef, 0xb9, 0xfb, 0x74, + 0x25, 0x7e, 0x15, 0x3e, 0xeb, 0x99, 0xbf, 0x08, 0x23, 0xfe, 0x01, 0x9b, 0x52, 0x38, 0x1b, 0x67, + 0x4e, 0xe2, 0x8c, 0x0b, 0x02, 0x77, 0xd2, 0x2b, 0xa7, 0xab, 0x19, 0x24, 0x19, 0x9e, 0x28, 0x5f, + 0x3b, 0x3f, 0xcb, 0x56, 0xfc, 0x55, 0xba, 0xaa, 0xf8, 0x53, 0x83, 0x4a, 0x89, 0x48, 0x34, 0x38, + 0x1b, 0x67, 0xf4, 0x0b, 0x81, 0x42, 0x9f, 0x83, 0x68, 0x56, 0xbb, 0xd9, 0x2e, 0x1b, 0x22, 0xc6, + 0x51, 0x62, 0xd6, 0xad, 0x61, 0xc3, 0x78, 0x66, 0xb6, 0x4e, 0xbf, 0x11, 0x28, 0xf4, 0xf9, 0x2c, + 0x53, 0x4d, 0xb6, 0x17, 0x87, 0xa8, 0xd9, 0x54, 0x6a, 0x1e, 0x94, 0x47, 0x1c, 0xcd, 0xa5, 0xa8, + 0x0b, 0x02, 0x85, 0x3e, 0x2f, 0x66, 0x8a, 0xca, 0xf6, 0x6b, 0xb9, 0x98, 0xa4, 0x26, 0x8f, 0xb3, + 0xfd, 0x2a, 0x7e, 0x9c, 0x93, 0x4d, 0x6d, 0x8c, 0x28, 0x67, 0xfb, 0x9c, 0xc0, 0x7c, 0x93, 0x77, + 0x06, 0x89, 0xb7, 0xe7, 0xf6, 0xf4, 0xd9, 0x78, 0x71, 0x3f, 0xe6, 0xd9, 0x27, 0xef, 0x9f, 0x98, + 0x4c, 0x9f, 0xb7, 0xbd, 0xc0, 0xb7, 0x79, 0xe4, 0x3b, 0x3e, 0x06, 0x4a, 0x85, 0xa3, 0x21, 0x2f, + 0x64, 0x22, 0xf5, 0x2f, 0xf6, 0xdc, 0x1c, 0x7f, 0xe4, 0x16, 0x76, 0x75, 0xe9, 0x4e, 0x9b, 0x77, + 0x5b, 0xb6, 0xf9, 0xbc, 0x5d, 0x77, 0x0f, 0xf3, 0xaa, 0xfc, 0xd1, 0xdf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x22, 0xd3, 0x7f, 0x20, 0x03, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/longrunning/operations.pb.go b/vendor/google.golang.org/genproto/googleapis/longrunning/operations.pb.go new file mode 100644 index 0000000..4044da4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/longrunning/operations.pb.go @@ -0,0 +1,597 @@ +// Code generated by protoc-gen-go. +// source: google/longrunning/operations.proto +// DO NOT EDIT! + +/* +Package longrunning is a generated protocol buffer package. + +It is generated from these files: + google/longrunning/operations.proto + +It has these top-level messages: + Operation + GetOperationRequest + ListOperationsRequest + ListOperationsResponse + CancelOperationRequest + DeleteOperationRequest +*/ +package longrunning + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// This resource represents a long-running operation that is the result of a +// network API call. +type Operation struct { + // The server-assigned name, which is only unique within the same service that + // originally returns it. If you use the default HTTP mapping, the + // `name` should have the format of `operations/some/unique/name`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Service-specific metadata associated with the operation. It typically + // contains progress information and common metadata such as create time. + // Some services might not provide such metadata. Any method that returns a + // long-running operation should document the metadata type, if any. + Metadata *google_protobuf1.Any `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` + // If the value is `false`, it means the operation is still in progress. + // If true, the operation is completed, and either `error` or `response` is + // available. + Done bool `protobuf:"varint,3,opt,name=done" json:"done,omitempty"` + // The operation result, which can be either an `error` or a valid `response`. + // If `done` == `false`, neither `error` nor `response` is set. + // If `done` == `true`, exactly one of `error` or `response` is set. + // + // Types that are valid to be assigned to Result: + // *Operation_Error + // *Operation_Response + Result isOperation_Result `protobuf_oneof:"result"` +} + +func (m *Operation) Reset() { *m = Operation{} } +func (m *Operation) String() string { return proto.CompactTextString(m) } +func (*Operation) ProtoMessage() {} +func (*Operation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isOperation_Result interface { + isOperation_Result() +} + +type Operation_Error struct { + Error *google_rpc.Status `protobuf:"bytes,4,opt,name=error,oneof"` +} +type Operation_Response struct { + Response *google_protobuf1.Any `protobuf:"bytes,5,opt,name=response,oneof"` +} + +func (*Operation_Error) isOperation_Result() {} +func (*Operation_Response) isOperation_Result() {} + +func (m *Operation) GetResult() isOperation_Result { + if m != nil { + return m.Result + } + return nil +} + +func (m *Operation) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Operation) GetMetadata() *google_protobuf1.Any { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Operation) GetDone() bool { + if m != nil { + return m.Done + } + return false +} + +func (m *Operation) GetError() *google_rpc.Status { + if x, ok := m.GetResult().(*Operation_Error); ok { + return x.Error + } + return nil +} + +func (m *Operation) GetResponse() *google_protobuf1.Any { + if x, ok := m.GetResult().(*Operation_Response); ok { + return x.Response + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Operation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Operation_OneofMarshaler, _Operation_OneofUnmarshaler, _Operation_OneofSizer, []interface{}{ + (*Operation_Error)(nil), + (*Operation_Response)(nil), + } +} + +func _Operation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Operation) + // result + switch x := m.Result.(type) { + case *Operation_Error: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Error); err != nil { + return err + } + case *Operation_Response: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Response); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Operation.Result has unexpected type %T", x) + } + return nil +} + +func _Operation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Operation) + switch tag { + case 4: // result.error + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_rpc.Status) + err := b.DecodeMessage(msg) + m.Result = &Operation_Error{msg} + return true, err + case 5: // result.response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Any) + err := b.DecodeMessage(msg) + m.Result = &Operation_Response{msg} + return true, err + default: + return false, nil + } +} + +func _Operation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Operation) + // result + switch x := m.Result.(type) { + case *Operation_Error: + s := proto.Size(x.Error) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Operation_Response: + s := proto.Size(x.Response) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The request message for [Operations.GetOperation][google.longrunning.Operations.GetOperation]. +type GetOperationRequest struct { + // The name of the operation resource. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetOperationRequest) Reset() { *m = GetOperationRequest{} } +func (m *GetOperationRequest) String() string { return proto.CompactTextString(m) } +func (*GetOperationRequest) ProtoMessage() {} +func (*GetOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *GetOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for [Operations.ListOperations][google.longrunning.Operations.ListOperations]. +type ListOperationsRequest struct { + // The name of the operation collection. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + // The standard list filter. + Filter string `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"` + // The standard list page size. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The standard list page token. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListOperationsRequest) Reset() { *m = ListOperationsRequest{} } +func (m *ListOperationsRequest) String() string { return proto.CompactTextString(m) } +func (*ListOperationsRequest) ProtoMessage() {} +func (*ListOperationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ListOperationsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListOperationsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListOperationsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListOperationsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response message for [Operations.ListOperations][google.longrunning.Operations.ListOperations]. +type ListOperationsResponse struct { + // A list of operations that matches the specified filter in the request. + Operations []*Operation `protobuf:"bytes,1,rep,name=operations" json:"operations,omitempty"` + // The standard List next-page token. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListOperationsResponse) Reset() { *m = ListOperationsResponse{} } +func (m *ListOperationsResponse) String() string { return proto.CompactTextString(m) } +func (*ListOperationsResponse) ProtoMessage() {} +func (*ListOperationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ListOperationsResponse) GetOperations() []*Operation { + if m != nil { + return m.Operations + } + return nil +} + +func (m *ListOperationsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]. +type CancelOperationRequest struct { + // The name of the operation resource to be cancelled. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *CancelOperationRequest) Reset() { *m = CancelOperationRequest{} } +func (m *CancelOperationRequest) String() string { return proto.CompactTextString(m) } +func (*CancelOperationRequest) ProtoMessage() {} +func (*CancelOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *CancelOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for [Operations.DeleteOperation][google.longrunning.Operations.DeleteOperation]. +type DeleteOperationRequest struct { + // The name of the operation resource to be deleted. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteOperationRequest) Reset() { *m = DeleteOperationRequest{} } +func (m *DeleteOperationRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteOperationRequest) ProtoMessage() {} +func (*DeleteOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *DeleteOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*Operation)(nil), "google.longrunning.Operation") + proto.RegisterType((*GetOperationRequest)(nil), "google.longrunning.GetOperationRequest") + proto.RegisterType((*ListOperationsRequest)(nil), "google.longrunning.ListOperationsRequest") + proto.RegisterType((*ListOperationsResponse)(nil), "google.longrunning.ListOperationsResponse") + proto.RegisterType((*CancelOperationRequest)(nil), "google.longrunning.CancelOperationRequest") + proto.RegisterType((*DeleteOperationRequest)(nil), "google.longrunning.DeleteOperationRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Operations service + +type OperationsClient interface { + // Lists operations that match the specified filter in the request. If the + // server doesn't support this method, it returns `UNIMPLEMENTED`. + // + // NOTE: the `name` binding below allows API services to override the binding + // to use different resource name schemes, such as `users/*/operations`. + ListOperations(ctx context.Context, in *ListOperationsRequest, opts ...grpc.CallOption) (*ListOperationsResponse, error) + // Gets the latest state of a long-running operation. Clients can use this + // method to poll the operation result at intervals as recommended by the API + // service. + GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error) + // Deletes a long-running operation. This method indicates that the client is + // no longer interested in the operation result. It does not cancel the + // operation. If the server doesn't support this method, it returns + // `google.rpc.Code.UNIMPLEMENTED`. + DeleteOperation(ctx context.Context, in *DeleteOperationRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Starts asynchronous cancellation on a long-running operation. The server + // makes a best effort to cancel the operation, but success is not + // guaranteed. If the server doesn't support this method, it returns + // `google.rpc.Code.UNIMPLEMENTED`. Clients can use + // [Operations.GetOperation][google.longrunning.Operations.GetOperation] or + // other methods to check whether the cancellation succeeded or whether the + // operation completed despite cancellation. On successful cancellation, + // the operation is not deleted; instead, it becomes an operation with + // an [Operation.error][google.longrunning.Operation.error] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1, + // corresponding to `Code.CANCELLED`. + CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type operationsClient struct { + cc *grpc.ClientConn +} + +func NewOperationsClient(cc *grpc.ClientConn) OperationsClient { + return &operationsClient{cc} +} + +func (c *operationsClient) ListOperations(ctx context.Context, in *ListOperationsRequest, opts ...grpc.CallOption) (*ListOperationsResponse, error) { + out := new(ListOperationsResponse) + err := grpc.Invoke(ctx, "/google.longrunning.Operations/ListOperations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *operationsClient) GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.longrunning.Operations/GetOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *operationsClient) DeleteOperation(ctx context.Context, in *DeleteOperationRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.longrunning.Operations/DeleteOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *operationsClient) CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.longrunning.Operations/CancelOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Operations service + +type OperationsServer interface { + // Lists operations that match the specified filter in the request. If the + // server doesn't support this method, it returns `UNIMPLEMENTED`. + // + // NOTE: the `name` binding below allows API services to override the binding + // to use different resource name schemes, such as `users/*/operations`. + ListOperations(context.Context, *ListOperationsRequest) (*ListOperationsResponse, error) + // Gets the latest state of a long-running operation. Clients can use this + // method to poll the operation result at intervals as recommended by the API + // service. + GetOperation(context.Context, *GetOperationRequest) (*Operation, error) + // Deletes a long-running operation. This method indicates that the client is + // no longer interested in the operation result. It does not cancel the + // operation. If the server doesn't support this method, it returns + // `google.rpc.Code.UNIMPLEMENTED`. + DeleteOperation(context.Context, *DeleteOperationRequest) (*google_protobuf2.Empty, error) + // Starts asynchronous cancellation on a long-running operation. The server + // makes a best effort to cancel the operation, but success is not + // guaranteed. If the server doesn't support this method, it returns + // `google.rpc.Code.UNIMPLEMENTED`. Clients can use + // [Operations.GetOperation][google.longrunning.Operations.GetOperation] or + // other methods to check whether the cancellation succeeded or whether the + // operation completed despite cancellation. On successful cancellation, + // the operation is not deleted; instead, it becomes an operation with + // an [Operation.error][google.longrunning.Operation.error] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1, + // corresponding to `Code.CANCELLED`. + CancelOperation(context.Context, *CancelOperationRequest) (*google_protobuf2.Empty, error) +} + +func RegisterOperationsServer(s *grpc.Server, srv OperationsServer) { + s.RegisterService(&_Operations_serviceDesc, srv) +} + +func _Operations_ListOperations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListOperationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OperationsServer).ListOperations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.longrunning.Operations/ListOperations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OperationsServer).ListOperations(ctx, req.(*ListOperationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Operations_GetOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OperationsServer).GetOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.longrunning.Operations/GetOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OperationsServer).GetOperation(ctx, req.(*GetOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Operations_DeleteOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OperationsServer).DeleteOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.longrunning.Operations/DeleteOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OperationsServer).DeleteOperation(ctx, req.(*DeleteOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Operations_CancelOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OperationsServer).CancelOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.longrunning.Operations/CancelOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OperationsServer).CancelOperation(ctx, req.(*CancelOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Operations_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.longrunning.Operations", + HandlerType: (*OperationsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListOperations", + Handler: _Operations_ListOperations_Handler, + }, + { + MethodName: "GetOperation", + Handler: _Operations_GetOperation_Handler, + }, + { + MethodName: "DeleteOperation", + Handler: _Operations_DeleteOperation_Handler, + }, + { + MethodName: "CancelOperation", + Handler: _Operations_CancelOperation_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/longrunning/operations.proto", +} + +func init() { proto.RegisterFile("google/longrunning/operations.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 586 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0xad, 0xd3, 0x24, 0x4a, 0xa6, 0x40, 0xa4, 0x85, 0xba, 0xc6, 0x25, 0x22, 0x32, 0x08, 0x52, + 0xab, 0xb2, 0x21, 0xdc, 0x8a, 0x72, 0x20, 0x80, 0xda, 0x43, 0x25, 0x22, 0x97, 0x13, 0x97, 0x6a, + 0x9b, 0x4e, 0x2d, 0x0b, 0x67, 0xd7, 0xac, 0x37, 0xd0, 0x16, 0x55, 0x11, 0x1c, 0x38, 0x71, 0xe3, + 0x2f, 0xf8, 0x19, 0x0e, 0xfc, 0x02, 0x1f, 0x82, 0xbc, 0x76, 0x62, 0x93, 0x3a, 0x28, 0xb7, 0xf5, + 0xcc, 0x9b, 0x79, 0xf3, 0xde, 0xce, 0x1a, 0x1e, 0xf8, 0x9c, 0xfb, 0x21, 0xba, 0x21, 0x67, 0xbe, + 0x98, 0x30, 0x16, 0x30, 0xdf, 0xe5, 0x11, 0x0a, 0x2a, 0x03, 0xce, 0x62, 0x27, 0x12, 0x5c, 0x72, + 0x42, 0x52, 0x90, 0x53, 0x00, 0x99, 0xf7, 0xb2, 0x42, 0x1a, 0x05, 0x2e, 0x65, 0x8c, 0xcb, 0x62, + 0x85, 0x79, 0x37, 0xcb, 0xaa, 0xaf, 0x93, 0xc9, 0x99, 0x4b, 0xd9, 0x45, 0x96, 0xda, 0x5e, 0x4c, + 0xe1, 0x38, 0x92, 0xb3, 0xe4, 0x56, 0x96, 0x14, 0xd1, 0xc8, 0x8d, 0x25, 0x95, 0x93, 0xac, 0xa1, + 0xf5, 0x4b, 0x83, 0xe6, 0x9b, 0xd9, 0x5c, 0x84, 0x40, 0x95, 0xd1, 0x31, 0x1a, 0x5a, 0x47, 0xeb, + 0x36, 0x3d, 0x75, 0x26, 0x4f, 0xa0, 0x31, 0x46, 0x49, 0x4f, 0xa9, 0xa4, 0x46, 0xa5, 0xa3, 0x75, + 0x37, 0x7a, 0x77, 0x9c, 0x6c, 0xee, 0x19, 0x95, 0xf3, 0x82, 0x5d, 0x78, 0x73, 0x54, 0xd2, 0xe5, + 0x94, 0x33, 0x34, 0xd6, 0x3b, 0x5a, 0xb7, 0xe1, 0xa9, 0x33, 0xb1, 0xa1, 0x86, 0x42, 0x70, 0x61, + 0x54, 0x55, 0x0b, 0x32, 0x6b, 0x21, 0xa2, 0x91, 0x73, 0xa4, 0x06, 0x3a, 0x58, 0xf3, 0x52, 0x08, + 0xe9, 0x41, 0x43, 0x60, 0x1c, 0x71, 0x16, 0xa3, 0x51, 0x5b, 0xce, 0x78, 0xb0, 0xe6, 0xcd, 0x71, + 0x83, 0x06, 0xd4, 0x05, 0xc6, 0x93, 0x50, 0x5a, 0x3b, 0x70, 0x7b, 0x1f, 0xe5, 0x5c, 0x93, 0x87, + 0x1f, 0x26, 0x18, 0xcb, 0x32, 0x69, 0xd6, 0x14, 0x36, 0x0f, 0x83, 0x38, 0xc7, 0xc6, 0x8b, 0xe0, + 0x6a, 0xc1, 0x07, 0x1d, 0xea, 0x67, 0x41, 0x28, 0x51, 0x64, 0x2d, 0xb2, 0x2f, 0xb2, 0x0d, 0xcd, + 0x88, 0xfa, 0x78, 0x1c, 0x07, 0x97, 0xa8, 0x0c, 0xaa, 0x79, 0x8d, 0x24, 0x70, 0x14, 0x5c, 0x22, + 0x69, 0x03, 0xa8, 0xa4, 0xe4, 0xef, 0x91, 0x29, 0x43, 0x9a, 0x9e, 0x82, 0xbf, 0x4d, 0x02, 0xd6, + 0x14, 0xf4, 0xc5, 0x01, 0x52, 0x3d, 0xa4, 0x0f, 0x90, 0xaf, 0x8b, 0xa1, 0x75, 0xd6, 0xbb, 0x1b, + 0xbd, 0xb6, 0x73, 0x7d, 0x5f, 0x9c, 0x5c, 0x68, 0xa1, 0x80, 0x3c, 0x82, 0x16, 0xc3, 0x73, 0x79, + 0x5c, 0x20, 0xaf, 0x28, 0xf2, 0x9b, 0x49, 0x78, 0x38, 0x1f, 0x60, 0x17, 0xf4, 0x97, 0x94, 0x8d, + 0x30, 0x5c, 0xc9, 0xaf, 0x5d, 0xd0, 0x5f, 0x61, 0x88, 0x12, 0x57, 0x41, 0xf7, 0xbe, 0x57, 0x01, + 0x72, 0x65, 0xe4, 0x9b, 0x06, 0xb7, 0xfe, 0x15, 0x4b, 0x76, 0xca, 0x04, 0x95, 0xde, 0x88, 0x69, + 0xaf, 0x02, 0x4d, 0xbd, 0xb3, 0xda, 0x5f, 0x7f, 0xff, 0xf9, 0x51, 0xd9, 0x22, 0x9b, 0xee, 0xc7, + 0xa7, 0xee, 0xe7, 0x64, 0x96, 0x7e, 0x6e, 0xcd, 0x15, 0x39, 0x87, 0x1b, 0xc5, 0x05, 0x21, 0x8f, + 0xcb, 0x5a, 0x97, 0xac, 0x90, 0xf9, 0x7f, 0xff, 0xad, 0x8e, 0xa2, 0x35, 0x89, 0x51, 0x46, 0xeb, + 0xda, 0xf6, 0x15, 0xf9, 0x04, 0xad, 0x05, 0xff, 0x48, 0xa9, 0xae, 0x72, 0x93, 0x4d, 0xfd, 0xda, + 0x2b, 0x78, 0x9d, 0x3c, 0xf1, 0x19, 0xb1, 0xbd, 0x9c, 0xf8, 0x8b, 0x06, 0xad, 0x85, 0x7b, 0x2e, + 0x67, 0x2e, 0x5f, 0x86, 0xa5, 0xcc, 0xb6, 0x62, 0x7e, 0x68, 0xdd, 0x5f, 0xc6, 0xbc, 0x37, 0x52, + 0x0d, 0xf7, 0x34, 0x7b, 0x30, 0x05, 0x7d, 0xc4, 0xc7, 0x25, 0xa4, 0x83, 0x56, 0x7e, 0x87, 0xc3, + 0xa4, 0xff, 0x50, 0x7b, 0xd7, 0xcf, 0x60, 0x3e, 0x0f, 0x29, 0xf3, 0x1d, 0x2e, 0x7c, 0xd7, 0x47, + 0xa6, 0xd8, 0xdd, 0x34, 0x45, 0xa3, 0x20, 0x2e, 0xfe, 0x5d, 0x9f, 0x17, 0xce, 0x3f, 0x2b, 0x64, + 0x3f, 0xad, 0x3f, 0xe4, 0xcc, 0xf7, 0xd2, 0xe0, 0x49, 0x5d, 0x95, 0x3f, 0xfb, 0x1b, 0x00, 0x00, + 0xff, 0xff, 0x69, 0x4c, 0xa6, 0x3e, 0x9b, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/common.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/common.pb.go new file mode 100644 index 0000000..9fc6859 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/common.pb.go @@ -0,0 +1,702 @@ +// Code generated by protoc-gen-go. +// source: google/monitoring/v3/common.proto +// DO NOT EDIT! + +/* +Package monitoring is a generated protocol buffer package. + +It is generated from these files: + google/monitoring/v3/common.proto + google/monitoring/v3/group.proto + google/monitoring/v3/group_service.proto + google/monitoring/v3/metric.proto + google/monitoring/v3/metric_service.proto + +It has these top-level messages: + TypedValue + TimeInterval + Aggregation + Group + ListGroupsRequest + ListGroupsResponse + GetGroupRequest + CreateGroupRequest + UpdateGroupRequest + DeleteGroupRequest + ListGroupMembersRequest + ListGroupMembersResponse + Point + TimeSeries + ListMonitoredResourceDescriptorsRequest + ListMonitoredResourceDescriptorsResponse + GetMonitoredResourceDescriptorRequest + ListMetricDescriptorsRequest + ListMetricDescriptorsResponse + GetMetricDescriptorRequest + CreateMetricDescriptorRequest + DeleteMetricDescriptorRequest + ListTimeSeriesRequest + ListTimeSeriesResponse + CreateTimeSeriesRequest + CreateTimeSeriesError +*/ +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_api2 "google.golang.org/genproto/googleapis/api/distribution" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The Aligner describes how to bring the data points in a single +// time series into temporal alignment. +type Aggregation_Aligner int32 + +const ( + // No alignment. Raw data is returned. Not valid if cross-time + // series reduction is requested. The value type of the result is + // the same as the value type of the input. + Aggregation_ALIGN_NONE Aggregation_Aligner = 0 + // Align and convert to delta metric type. This alignment is valid + // for cumulative metrics and delta metrics. Aligning an existing + // delta metric to a delta metric requires that the alignment + // period be increased. The value type of the result is the same + // as the value type of the input. + Aggregation_ALIGN_DELTA Aggregation_Aligner = 1 + // Align and convert to a rate. This alignment is valid for + // cumulative metrics and delta metrics with numeric values. The output is a + // gauge metric with value type + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_RATE Aggregation_Aligner = 2 + // Align by interpolating between adjacent points around the + // period boundary. This alignment is valid for gauge + // metrics with numeric values. The value type of the result is the same + // as the value type of the input. + Aggregation_ALIGN_INTERPOLATE Aggregation_Aligner = 3 + // Align by shifting the oldest data point before the period + // boundary to the boundary. This alignment is valid for gauge + // metrics. The value type of the result is the same as the + // value type of the input. + Aggregation_ALIGN_NEXT_OLDER Aggregation_Aligner = 4 + // Align time series via aggregation. The resulting data point in + // the alignment period is the minimum of all data points in the + // period. This alignment is valid for gauge and delta metrics with numeric + // values. The value type of the result is the same as the value + // type of the input. + Aggregation_ALIGN_MIN Aggregation_Aligner = 10 + // Align time series via aggregation. The resulting data point in + // the alignment period is the maximum of all data points in the + // period. This alignment is valid for gauge and delta metrics with numeric + // values. The value type of the result is the same as the value + // type of the input. + Aggregation_ALIGN_MAX Aggregation_Aligner = 11 + // Align time series via aggregation. The resulting data point in + // the alignment period is the average or arithmetic mean of all + // data points in the period. This alignment is valid for gauge and delta + // metrics with numeric values. The value type of the output is + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_MEAN Aggregation_Aligner = 12 + // Align time series via aggregation. The resulting data point in + // the alignment period is the count of all data points in the + // period. This alignment is valid for gauge and delta metrics with numeric + // or Boolean values. The value type of the output is + // [INT64][google.api.MetricDescriptor.ValueType.INT64]. + Aggregation_ALIGN_COUNT Aggregation_Aligner = 13 + // Align time series via aggregation. The resulting data point in + // the alignment period is the sum of all data points in the + // period. This alignment is valid for gauge and delta metrics with numeric + // and distribution values. The value type of the output is the + // same as the value type of the input. + Aggregation_ALIGN_SUM Aggregation_Aligner = 14 + // Align time series via aggregation. The resulting data point in + // the alignment period is the standard deviation of all data + // points in the period. This alignment is valid for gauge and delta metrics + // with numeric values. The value type of the output is + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_STDDEV Aggregation_Aligner = 15 + // Align time series via aggregation. The resulting data point in + // the alignment period is the count of True-valued data points in the + // period. This alignment is valid for gauge metrics with + // Boolean values. The value type of the output is + // [INT64][google.api.MetricDescriptor.ValueType.INT64]. + Aggregation_ALIGN_COUNT_TRUE Aggregation_Aligner = 16 + // Align time series via aggregation. The resulting data point in + // the alignment period is the fraction of True-valued data points in the + // period. This alignment is valid for gauge metrics with Boolean values. + // The output value is in the range [0, 1] and has value type + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_FRACTION_TRUE Aggregation_Aligner = 17 + // Align time series via aggregation. The resulting data point in + // the alignment period is the 99th percentile of all data + // points in the period. This alignment is valid for gauge and delta metrics + // with distribution values. The output is a gauge metric with value type + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_PERCENTILE_99 Aggregation_Aligner = 18 + // Align time series via aggregation. The resulting data point in + // the alignment period is the 95th percentile of all data + // points in the period. This alignment is valid for gauge and delta metrics + // with distribution values. The output is a gauge metric with value type + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_PERCENTILE_95 Aggregation_Aligner = 19 + // Align time series via aggregation. The resulting data point in + // the alignment period is the 50th percentile of all data + // points in the period. This alignment is valid for gauge and delta metrics + // with distribution values. The output is a gauge metric with value type + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_PERCENTILE_50 Aggregation_Aligner = 20 + // Align time series via aggregation. The resulting data point in + // the alignment period is the 5th percentile of all data + // points in the period. This alignment is valid for gauge and delta metrics + // with distribution values. The output is a gauge metric with value type + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_PERCENTILE_05 Aggregation_Aligner = 21 +) + +var Aggregation_Aligner_name = map[int32]string{ + 0: "ALIGN_NONE", + 1: "ALIGN_DELTA", + 2: "ALIGN_RATE", + 3: "ALIGN_INTERPOLATE", + 4: "ALIGN_NEXT_OLDER", + 10: "ALIGN_MIN", + 11: "ALIGN_MAX", + 12: "ALIGN_MEAN", + 13: "ALIGN_COUNT", + 14: "ALIGN_SUM", + 15: "ALIGN_STDDEV", + 16: "ALIGN_COUNT_TRUE", + 17: "ALIGN_FRACTION_TRUE", + 18: "ALIGN_PERCENTILE_99", + 19: "ALIGN_PERCENTILE_95", + 20: "ALIGN_PERCENTILE_50", + 21: "ALIGN_PERCENTILE_05", +} +var Aggregation_Aligner_value = map[string]int32{ + "ALIGN_NONE": 0, + "ALIGN_DELTA": 1, + "ALIGN_RATE": 2, + "ALIGN_INTERPOLATE": 3, + "ALIGN_NEXT_OLDER": 4, + "ALIGN_MIN": 10, + "ALIGN_MAX": 11, + "ALIGN_MEAN": 12, + "ALIGN_COUNT": 13, + "ALIGN_SUM": 14, + "ALIGN_STDDEV": 15, + "ALIGN_COUNT_TRUE": 16, + "ALIGN_FRACTION_TRUE": 17, + "ALIGN_PERCENTILE_99": 18, + "ALIGN_PERCENTILE_95": 19, + "ALIGN_PERCENTILE_50": 20, + "ALIGN_PERCENTILE_05": 21, +} + +func (x Aggregation_Aligner) String() string { + return proto.EnumName(Aggregation_Aligner_name, int32(x)) +} +func (Aggregation_Aligner) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +// A Reducer describes how to aggregate data points from multiple +// time series into a single time series. +type Aggregation_Reducer int32 + +const ( + // No cross-time series reduction. The output of the aligner is + // returned. + Aggregation_REDUCE_NONE Aggregation_Reducer = 0 + // Reduce by computing the mean across time series for each + // alignment period. This reducer is valid for delta and + // gauge metrics with numeric or distribution values. The value type of the + // output is [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_REDUCE_MEAN Aggregation_Reducer = 1 + // Reduce by computing the minimum across time series for each + // alignment period. This reducer is valid for delta and + // gauge metrics with numeric values. The value type of the output + // is the same as the value type of the input. + Aggregation_REDUCE_MIN Aggregation_Reducer = 2 + // Reduce by computing the maximum across time series for each + // alignment period. This reducer is valid for delta and + // gauge metrics with numeric values. The value type of the output + // is the same as the value type of the input. + Aggregation_REDUCE_MAX Aggregation_Reducer = 3 + // Reduce by computing the sum across time series for each + // alignment period. This reducer is valid for delta and + // gauge metrics with numeric and distribution values. The value type of + // the output is the same as the value type of the input. + Aggregation_REDUCE_SUM Aggregation_Reducer = 4 + // Reduce by computing the standard deviation across time series + // for each alignment period. This reducer is valid for delta + // and gauge metrics with numeric or distribution values. The value type of + // the output is [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_REDUCE_STDDEV Aggregation_Reducer = 5 + // Reduce by computing the count of data points across time series + // for each alignment period. This reducer is valid for delta + // and gauge metrics of numeric, Boolean, distribution, and string value + // type. The value type of the output is + // [INT64][google.api.MetricDescriptor.ValueType.INT64]. + Aggregation_REDUCE_COUNT Aggregation_Reducer = 6 + // Reduce by computing the count of True-valued data points across time + // series for each alignment period. This reducer is valid for delta + // and gauge metrics of Boolean value type. The value type of + // the output is [INT64][google.api.MetricDescriptor.ValueType.INT64]. + Aggregation_REDUCE_COUNT_TRUE Aggregation_Reducer = 7 + // Reduce by computing the fraction of True-valued data points across time + // series for each alignment period. This reducer is valid for delta + // and gauge metrics of Boolean value type. The output value is in the + // range [0, 1] and has value type + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_REDUCE_FRACTION_TRUE Aggregation_Reducer = 8 + // Reduce by computing 99th percentile of data points across time series + // for each alignment period. This reducer is valid for gauge and delta + // metrics of numeric and distribution type. The value of the output is + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE] + Aggregation_REDUCE_PERCENTILE_99 Aggregation_Reducer = 9 + // Reduce by computing 95th percentile of data points across time series + // for each alignment period. This reducer is valid for gauge and delta + // metrics of numeric and distribution type. The value of the output is + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE] + Aggregation_REDUCE_PERCENTILE_95 Aggregation_Reducer = 10 + // Reduce by computing 50th percentile of data points across time series + // for each alignment period. This reducer is valid for gauge and delta + // metrics of numeric and distribution type. The value of the output is + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE] + Aggregation_REDUCE_PERCENTILE_50 Aggregation_Reducer = 11 + // Reduce by computing 5th percentile of data points across time series + // for each alignment period. This reducer is valid for gauge and delta + // metrics of numeric and distribution type. The value of the output is + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE] + Aggregation_REDUCE_PERCENTILE_05 Aggregation_Reducer = 12 +) + +var Aggregation_Reducer_name = map[int32]string{ + 0: "REDUCE_NONE", + 1: "REDUCE_MEAN", + 2: "REDUCE_MIN", + 3: "REDUCE_MAX", + 4: "REDUCE_SUM", + 5: "REDUCE_STDDEV", + 6: "REDUCE_COUNT", + 7: "REDUCE_COUNT_TRUE", + 8: "REDUCE_FRACTION_TRUE", + 9: "REDUCE_PERCENTILE_99", + 10: "REDUCE_PERCENTILE_95", + 11: "REDUCE_PERCENTILE_50", + 12: "REDUCE_PERCENTILE_05", +} +var Aggregation_Reducer_value = map[string]int32{ + "REDUCE_NONE": 0, + "REDUCE_MEAN": 1, + "REDUCE_MIN": 2, + "REDUCE_MAX": 3, + "REDUCE_SUM": 4, + "REDUCE_STDDEV": 5, + "REDUCE_COUNT": 6, + "REDUCE_COUNT_TRUE": 7, + "REDUCE_FRACTION_TRUE": 8, + "REDUCE_PERCENTILE_99": 9, + "REDUCE_PERCENTILE_95": 10, + "REDUCE_PERCENTILE_50": 11, + "REDUCE_PERCENTILE_05": 12, +} + +func (x Aggregation_Reducer) String() string { + return proto.EnumName(Aggregation_Reducer_name, int32(x)) +} +func (Aggregation_Reducer) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } + +// A single strongly-typed value. +type TypedValue struct { + // The typed value field. + // + // Types that are valid to be assigned to Value: + // *TypedValue_BoolValue + // *TypedValue_Int64Value + // *TypedValue_DoubleValue + // *TypedValue_StringValue + // *TypedValue_DistributionValue + Value isTypedValue_Value `protobuf_oneof:"value"` +} + +func (m *TypedValue) Reset() { *m = TypedValue{} } +func (m *TypedValue) String() string { return proto.CompactTextString(m) } +func (*TypedValue) ProtoMessage() {} +func (*TypedValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isTypedValue_Value interface { + isTypedValue_Value() +} + +type TypedValue_BoolValue struct { + BoolValue bool `protobuf:"varint,1,opt,name=bool_value,json=boolValue,oneof"` +} +type TypedValue_Int64Value struct { + Int64Value int64 `protobuf:"varint,2,opt,name=int64_value,json=int64Value,oneof"` +} +type TypedValue_DoubleValue struct { + DoubleValue float64 `protobuf:"fixed64,3,opt,name=double_value,json=doubleValue,oneof"` +} +type TypedValue_StringValue struct { + StringValue string `protobuf:"bytes,4,opt,name=string_value,json=stringValue,oneof"` +} +type TypedValue_DistributionValue struct { + DistributionValue *google_api2.Distribution `protobuf:"bytes,5,opt,name=distribution_value,json=distributionValue,oneof"` +} + +func (*TypedValue_BoolValue) isTypedValue_Value() {} +func (*TypedValue_Int64Value) isTypedValue_Value() {} +func (*TypedValue_DoubleValue) isTypedValue_Value() {} +func (*TypedValue_StringValue) isTypedValue_Value() {} +func (*TypedValue_DistributionValue) isTypedValue_Value() {} + +func (m *TypedValue) GetValue() isTypedValue_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *TypedValue) GetBoolValue() bool { + if x, ok := m.GetValue().(*TypedValue_BoolValue); ok { + return x.BoolValue + } + return false +} + +func (m *TypedValue) GetInt64Value() int64 { + if x, ok := m.GetValue().(*TypedValue_Int64Value); ok { + return x.Int64Value + } + return 0 +} + +func (m *TypedValue) GetDoubleValue() float64 { + if x, ok := m.GetValue().(*TypedValue_DoubleValue); ok { + return x.DoubleValue + } + return 0 +} + +func (m *TypedValue) GetStringValue() string { + if x, ok := m.GetValue().(*TypedValue_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *TypedValue) GetDistributionValue() *google_api2.Distribution { + if x, ok := m.GetValue().(*TypedValue_DistributionValue); ok { + return x.DistributionValue + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TypedValue) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TypedValue_OneofMarshaler, _TypedValue_OneofUnmarshaler, _TypedValue_OneofSizer, []interface{}{ + (*TypedValue_BoolValue)(nil), + (*TypedValue_Int64Value)(nil), + (*TypedValue_DoubleValue)(nil), + (*TypedValue_StringValue)(nil), + (*TypedValue_DistributionValue)(nil), + } +} + +func _TypedValue_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TypedValue) + // value + switch x := m.Value.(type) { + case *TypedValue_BoolValue: + t := uint64(0) + if x.BoolValue { + t = 1 + } + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *TypedValue_Int64Value: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Int64Value)) + case *TypedValue_DoubleValue: + b.EncodeVarint(3<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.DoubleValue)) + case *TypedValue_StringValue: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *TypedValue_DistributionValue: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DistributionValue); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TypedValue.Value has unexpected type %T", x) + } + return nil +} + +func _TypedValue_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TypedValue) + switch tag { + case 1: // value.bool_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &TypedValue_BoolValue{x != 0} + return true, err + case 2: // value.int64_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &TypedValue_Int64Value{int64(x)} + return true, err + case 3: // value.double_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Value = &TypedValue_DoubleValue{math.Float64frombits(x)} + return true, err + case 4: // value.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Value = &TypedValue_StringValue{x} + return true, err + case 5: // value.distribution_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_api2.Distribution) + err := b.DecodeMessage(msg) + m.Value = &TypedValue_DistributionValue{msg} + return true, err + default: + return false, nil + } +} + +func _TypedValue_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TypedValue) + // value + switch x := m.Value.(type) { + case *TypedValue_BoolValue: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += 1 + case *TypedValue_Int64Value: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Int64Value)) + case *TypedValue_DoubleValue: + n += proto.SizeVarint(3<<3 | proto.WireFixed64) + n += 8 + case *TypedValue_StringValue: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *TypedValue_DistributionValue: + s := proto.Size(x.DistributionValue) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A time interval extending just after a start time through an end time. +// If the start time is the same as the end time, then the interval +// represents a single point in time. +type TimeInterval struct { + // Required. The end of the time interval. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Optional. The beginning of the time interval. The default value + // for the start time is the end time. The start time must not be + // later than the end time. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` +} + +func (m *TimeInterval) Reset() { *m = TimeInterval{} } +func (m *TimeInterval) String() string { return proto.CompactTextString(m) } +func (*TimeInterval) ProtoMessage() {} +func (*TimeInterval) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *TimeInterval) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *TimeInterval) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +// Describes how to combine multiple time series to provide different views of +// the data. Aggregation consists of an alignment step on individual time +// series (`per_series_aligner`) followed by an optional reduction of the data +// across different time series (`cross_series_reducer`). For more details, see +// [Aggregation](/monitoring/api/learn_more#aggregation). +type Aggregation struct { + // The alignment period for per-[time series][google.monitoring.v3.TimeSeries] + // alignment. If present, `alignmentPeriod` must be at least 60 + // seconds. After per-time series alignment, each time series will + // contain data points only on the period boundaries. If + // `perSeriesAligner` is not specified or equals `ALIGN_NONE`, then + // this field is ignored. If `perSeriesAligner` is specified and + // does not equal `ALIGN_NONE`, then this field must be defined; + // otherwise an error is returned. + AlignmentPeriod *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=alignment_period,json=alignmentPeriod" json:"alignment_period,omitempty"` + // The approach to be used to align individual time series. Not all + // alignment functions may be applied to all time series, depending + // on the metric type and value type of the original time + // series. Alignment may change the metric type or the value type of + // the time series. + // + // Time series data must be aligned in order to perform cross-time + // series reduction. If `crossSeriesReducer` is specified, then + // `perSeriesAligner` must be specified and not equal `ALIGN_NONE` + // and `alignmentPeriod` must be specified; otherwise, an error is + // returned. + PerSeriesAligner Aggregation_Aligner `protobuf:"varint,2,opt,name=per_series_aligner,json=perSeriesAligner,enum=google.monitoring.v3.Aggregation_Aligner" json:"per_series_aligner,omitempty"` + // The approach to be used to combine time series. Not all reducer + // functions may be applied to all time series, depending on the + // metric type and the value type of the original time + // series. Reduction may change the metric type of value type of the + // time series. + // + // Time series data must be aligned in order to perform cross-time + // series reduction. If `crossSeriesReducer` is specified, then + // `perSeriesAligner` must be specified and not equal `ALIGN_NONE` + // and `alignmentPeriod` must be specified; otherwise, an error is + // returned. + CrossSeriesReducer Aggregation_Reducer `protobuf:"varint,4,opt,name=cross_series_reducer,json=crossSeriesReducer,enum=google.monitoring.v3.Aggregation_Reducer" json:"cross_series_reducer,omitempty"` + // The set of fields to preserve when `crossSeriesReducer` is + // specified. The `groupByFields` determine how the time series are + // partitioned into subsets prior to applying the aggregation + // function. Each subset contains time series that have the same + // value for each of the grouping fields. Each individual time + // series is a member of exactly one subset. The + // `crossSeriesReducer` is applied to each subset of time series. + // It is not possible to reduce across different resource types, so + // this field implicitly contains `resource.type`. Fields not + // specified in `groupByFields` are aggregated away. If + // `groupByFields` is not specified and all the time series have + // the same resource type, then the time series are aggregated into + // a single output time series. If `crossSeriesReducer` is not + // defined, this field is ignored. + GroupByFields []string `protobuf:"bytes,5,rep,name=group_by_fields,json=groupByFields" json:"group_by_fields,omitempty"` +} + +func (m *Aggregation) Reset() { *m = Aggregation{} } +func (m *Aggregation) String() string { return proto.CompactTextString(m) } +func (*Aggregation) ProtoMessage() {} +func (*Aggregation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Aggregation) GetAlignmentPeriod() *google_protobuf3.Duration { + if m != nil { + return m.AlignmentPeriod + } + return nil +} + +func (m *Aggregation) GetPerSeriesAligner() Aggregation_Aligner { + if m != nil { + return m.PerSeriesAligner + } + return Aggregation_ALIGN_NONE +} + +func (m *Aggregation) GetCrossSeriesReducer() Aggregation_Reducer { + if m != nil { + return m.CrossSeriesReducer + } + return Aggregation_REDUCE_NONE +} + +func (m *Aggregation) GetGroupByFields() []string { + if m != nil { + return m.GroupByFields + } + return nil +} + +func init() { + proto.RegisterType((*TypedValue)(nil), "google.monitoring.v3.TypedValue") + proto.RegisterType((*TimeInterval)(nil), "google.monitoring.v3.TimeInterval") + proto.RegisterType((*Aggregation)(nil), "google.monitoring.v3.Aggregation") + proto.RegisterEnum("google.monitoring.v3.Aggregation_Aligner", Aggregation_Aligner_name, Aggregation_Aligner_value) + proto.RegisterEnum("google.monitoring.v3.Aggregation_Reducer", Aggregation_Reducer_name, Aggregation_Reducer_value) +} + +func init() { proto.RegisterFile("google/monitoring/v3/common.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 780 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdd, 0x6a, 0xe3, 0x46, + 0x14, 0xb6, 0xec, 0x64, 0x1d, 0x1f, 0x39, 0xf1, 0x64, 0xd6, 0x4b, 0xdd, 0x40, 0xbb, 0x5e, 0x17, + 0x8a, 0x7b, 0x23, 0x87, 0xa4, 0x2e, 0x84, 0x42, 0x41, 0xb1, 0xb5, 0x1b, 0x83, 0x23, 0x9b, 0x59, + 0x25, 0x0d, 0xed, 0x85, 0x90, 0xa3, 0x59, 0x21, 0x90, 0x35, 0x62, 0x24, 0x19, 0x72, 0xd7, 0xab, + 0xbe, 0x43, 0x5f, 0x61, 0x1f, 0xa9, 0x0f, 0xd1, 0x67, 0x28, 0x9a, 0x19, 0xad, 0x94, 0xd6, 0xa5, + 0x7b, 0xf9, 0xfd, 0x9c, 0x6f, 0x74, 0xbe, 0x91, 0x6c, 0x78, 0x13, 0x30, 0x16, 0x44, 0x74, 0xb2, + 0x65, 0x71, 0x98, 0x31, 0x1e, 0xc6, 0xc1, 0x64, 0x77, 0x39, 0x79, 0x64, 0xdb, 0x2d, 0x8b, 0x8d, + 0x84, 0xb3, 0x8c, 0xe1, 0xbe, 0xb4, 0x18, 0x95, 0xc5, 0xd8, 0x5d, 0x9e, 0x7d, 0xa5, 0x06, 0xbd, + 0x24, 0x9c, 0xf8, 0x61, 0x9a, 0xf1, 0x70, 0x93, 0x67, 0x61, 0x39, 0x74, 0xf6, 0xb5, 0x92, 0x05, + 0xda, 0xe4, 0x1f, 0x26, 0x7e, 0xce, 0xbd, 0x9a, 0xfe, 0xfa, 0x9f, 0x7a, 0x16, 0x6e, 0x69, 0x9a, + 0x79, 0xdb, 0x44, 0x1a, 0x46, 0x7f, 0x69, 0x00, 0xce, 0x53, 0x42, 0xfd, 0x7b, 0x2f, 0xca, 0x29, + 0x7e, 0x0d, 0xb0, 0x61, 0x2c, 0x72, 0x77, 0x05, 0x1a, 0x68, 0x43, 0x6d, 0x7c, 0x74, 0xd3, 0x20, + 0x9d, 0x82, 0x93, 0x86, 0x37, 0xa0, 0x87, 0x71, 0xf6, 0xc3, 0xf7, 0xca, 0xd1, 0x1c, 0x6a, 0xe3, + 0xd6, 0x4d, 0x83, 0x80, 0x20, 0xa5, 0xe5, 0x1b, 0xe8, 0xfa, 0x2c, 0xdf, 0x44, 0x54, 0x79, 0x5a, + 0x43, 0x6d, 0xac, 0xdd, 0x34, 0x88, 0x2e, 0xd9, 0x4f, 0xa6, 0x62, 0x99, 0x38, 0x50, 0xa6, 0x83, + 0xa1, 0x36, 0xee, 0x14, 0x26, 0xc9, 0x4a, 0xd3, 0x02, 0x70, 0x7d, 0x67, 0x65, 0x3d, 0x1c, 0x6a, + 0x63, 0xfd, 0x62, 0x60, 0xa8, 0xbe, 0xbc, 0x24, 0x34, 0xe6, 0x35, 0xd7, 0x4d, 0x83, 0x9c, 0xd6, + 0xa7, 0x44, 0xd4, 0x75, 0x1b, 0x0e, 0xc5, 0xf4, 0xe8, 0x37, 0x0d, 0xba, 0x4e, 0xb8, 0xa5, 0x8b, + 0x38, 0xa3, 0x7c, 0xe7, 0x45, 0x78, 0x0a, 0x47, 0x34, 0xf6, 0xdd, 0xa2, 0x18, 0xb1, 0x8e, 0x7e, + 0x71, 0x56, 0x46, 0x97, 0xad, 0x19, 0x4e, 0xd9, 0x1a, 0x69, 0xd3, 0xd8, 0x2f, 0x10, 0xbe, 0x02, + 0x48, 0x33, 0x8f, 0x67, 0x72, 0x50, 0xfb, 0xdf, 0xc1, 0x8e, 0x70, 0x17, 0x78, 0xf4, 0xb1, 0x0d, + 0xba, 0x19, 0x04, 0x9c, 0x06, 0xe2, 0xaa, 0xf0, 0x1c, 0x90, 0x17, 0x85, 0x41, 0xbc, 0xa5, 0x71, + 0xe6, 0x26, 0x94, 0x87, 0xcc, 0x57, 0x81, 0x5f, 0xfe, 0x2b, 0x70, 0xae, 0xee, 0x97, 0xf4, 0x3e, + 0x8d, 0xac, 0xc5, 0x04, 0xfe, 0x19, 0x70, 0x42, 0xb9, 0x9b, 0x52, 0x1e, 0xd2, 0xd4, 0x15, 0x2a, + 0xe5, 0x62, 0xa3, 0x93, 0x8b, 0xef, 0x8c, 0x7d, 0x2f, 0x97, 0x51, 0x7b, 0x08, 0xc3, 0x94, 0x03, + 0x04, 0x25, 0x94, 0xbf, 0x17, 0x19, 0x8a, 0xc1, 0xbf, 0x42, 0xff, 0x91, 0xb3, 0x34, 0x2d, 0xa3, + 0x39, 0xf5, 0xf3, 0x47, 0xca, 0xc5, 0x95, 0x7d, 0x56, 0x34, 0x91, 0x03, 0x04, 0x8b, 0x18, 0x19, + 0xae, 0x38, 0xfc, 0x2d, 0xf4, 0x02, 0xce, 0xf2, 0xc4, 0xdd, 0x3c, 0xb9, 0x1f, 0x42, 0x1a, 0xf9, + 0xe9, 0xe0, 0x70, 0xd8, 0x1a, 0x77, 0xc8, 0xb1, 0xa0, 0xaf, 0x9f, 0xde, 0x0a, 0x72, 0xf4, 0x67, + 0x13, 0xda, 0xe5, 0x03, 0x9d, 0x00, 0x98, 0xcb, 0xc5, 0x3b, 0xdb, 0xb5, 0x57, 0xb6, 0x85, 0x1a, + 0xb8, 0x07, 0xba, 0xc4, 0x73, 0x6b, 0xe9, 0x98, 0x48, 0xab, 0x0c, 0xc4, 0x74, 0x2c, 0xd4, 0xc4, + 0xaf, 0xe0, 0x54, 0xe2, 0x85, 0xed, 0x58, 0x64, 0xbd, 0x5a, 0x16, 0x74, 0x0b, 0xf7, 0x01, 0xa9, + 0x1c, 0xeb, 0xc1, 0x71, 0x57, 0xcb, 0xb9, 0x45, 0xd0, 0x01, 0x3e, 0x86, 0x8e, 0x64, 0x6f, 0x17, + 0x36, 0x82, 0x1a, 0x34, 0x1f, 0x90, 0x5e, 0x45, 0xdf, 0x5a, 0xa6, 0x8d, 0xba, 0xd5, 0xd9, 0xb3, + 0xd5, 0x9d, 0xed, 0xa0, 0xe3, 0xca, 0xff, 0xfe, 0xee, 0x16, 0x9d, 0x60, 0x04, 0x5d, 0x05, 0x9d, + 0xf9, 0xdc, 0xba, 0x47, 0xbd, 0xea, 0x54, 0x31, 0xe1, 0x3a, 0xe4, 0xce, 0x42, 0x08, 0x7f, 0x01, + 0x2f, 0x25, 0xfb, 0x96, 0x98, 0x33, 0x67, 0xb1, 0xb2, 0xa5, 0x70, 0x5a, 0x09, 0x6b, 0x8b, 0xcc, + 0x2c, 0xdb, 0x59, 0x2c, 0x2d, 0xf7, 0xea, 0x0a, 0xe1, 0xfd, 0xc2, 0x14, 0xbd, 0xdc, 0x2b, 0x4c, + 0xcf, 0x51, 0x7f, 0xaf, 0x70, 0x3e, 0x45, 0xaf, 0x46, 0x7f, 0x34, 0xa1, 0x5d, 0x5e, 0x48, 0x0f, + 0x74, 0x62, 0xcd, 0xef, 0x66, 0x56, 0xad, 0x5d, 0x45, 0x88, 0x95, 0x45, 0xbb, 0x25, 0xb1, 0xb0, + 0x51, 0xb3, 0x8e, 0xcd, 0x07, 0xd4, 0xaa, 0xe1, 0xa2, 0x82, 0x03, 0x7c, 0x0a, 0xc7, 0x25, 0x96, + 0x1d, 0x1c, 0x16, 0xad, 0x28, 0x4a, 0xd6, 0xf6, 0xa2, 0xb8, 0xa2, 0x3a, 0x23, 0xb7, 0x6f, 0xe3, + 0x01, 0xf4, 0x15, 0xfd, 0xbc, 0x97, 0xa3, 0x9a, 0xf2, 0xbc, 0x98, 0xce, 0x7f, 0x28, 0x53, 0x04, + 0xfb, 0x95, 0xe9, 0x39, 0xd2, 0xf7, 0x2b, 0xe7, 0x53, 0xd4, 0xbd, 0xfe, 0x5d, 0x83, 0xc1, 0x23, + 0xdb, 0xee, 0x7d, 0xcb, 0xaf, 0xf5, 0x99, 0xf8, 0x05, 0x5f, 0x17, 0x5f, 0xe7, 0x5a, 0xfb, 0xe5, + 0x27, 0x65, 0x0a, 0x58, 0xe4, 0xc5, 0x81, 0xc1, 0x78, 0x30, 0x09, 0x68, 0x2c, 0xbe, 0xdd, 0x89, + 0x94, 0xbc, 0x24, 0x4c, 0x9f, 0xff, 0x09, 0xfc, 0x58, 0xa1, 0x8f, 0xcd, 0xb3, 0x77, 0x32, 0x60, + 0x16, 0xb1, 0xdc, 0x37, 0x6e, 0xab, 0xb3, 0xee, 0x2f, 0x37, 0x2f, 0x44, 0xce, 0xe5, 0xdf, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x53, 0x47, 0x59, 0x88, 0x4b, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group.pb.go new file mode 100644 index 0000000..f1cad54 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group.pb.go @@ -0,0 +1,126 @@ +// Code generated by protoc-gen-go. +// source: google/monitoring/v3/group.proto +// DO NOT EDIT! + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The description of a dynamic collection of monitored resources. Each group +// has a filter that is matched against monitored resources and their associated +// metadata. If a group's filter matches an available monitored resource, then +// that resource is a member of that group. Groups can contain any number of +// monitored resources, and each monitored resource can be a member of any +// number of groups. +// +// Groups can be nested in parent-child hierarchies. The `parentName` field +// identifies an optional parent for each group. If a group has a parent, then +// the only monitored resources available to be matched by the group's filter +// are the resources contained in the parent group. In other words, a group +// contains the monitored resources that match its filter and the filters of all +// the group's ancestors. A group without a parent can contain any monitored +// resource. +// +// For example, consider an infrastructure running a set of instances with two +// user-defined tags: `"environment"` and `"role"`. A parent group has a filter, +// `environment="production"`. A child of that parent group has a filter, +// `role="transcoder"`. The parent group contains all instances in the +// production environment, regardless of their roles. The child group contains +// instances that have the transcoder role *and* are in the production +// environment. +// +// The monitored resources contained in a group can change at any moment, +// depending on what resources exist and what filters are associated with the +// group and its ancestors. +type Group struct { + // Output only. The name of this group. The format is + // `"projects/{project_id_or_number}/groups/{group_id}"`. + // When creating a group, this field is ignored and a new name is created + // consisting of the project specified in the call to `CreateGroup` + // and a unique `{group_id}` that is generated automatically. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A user-assigned name for this group, used only for display purposes. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // The name of the group's parent, if it has one. + // The format is `"projects/{project_id_or_number}/groups/{group_id}"`. + // For groups with no parent, `parentName` is the empty string, `""`. + ParentName string `protobuf:"bytes,3,opt,name=parent_name,json=parentName" json:"parent_name,omitempty"` + // The filter used to determine which monitored resources belong to this group. + Filter string `protobuf:"bytes,5,opt,name=filter" json:"filter,omitempty"` + // If true, the members of this group are considered to be a cluster. + // The system can perform additional analysis on groups that are clusters. + IsCluster bool `protobuf:"varint,6,opt,name=is_cluster,json=isCluster" json:"is_cluster,omitempty"` +} + +func (m *Group) Reset() { *m = Group{} } +func (m *Group) String() string { return proto.CompactTextString(m) } +func (*Group) ProtoMessage() {} +func (*Group) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Group) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Group) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Group) GetParentName() string { + if m != nil { + return m.ParentName + } + return "" +} + +func (m *Group) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *Group) GetIsCluster() bool { + if m != nil { + return m.IsCluster + } + return false +} + +func init() { + proto.RegisterType((*Group)(nil), "google.monitoring.v3.Group") +} + +func init() { proto.RegisterFile("google/monitoring/v3/group.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 248 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xc1, 0x4a, 0x03, 0x31, + 0x10, 0x86, 0x49, 0xb5, 0x8b, 0x9d, 0x7a, 0x0a, 0x22, 0x8b, 0x20, 0xae, 0x9e, 0x7a, 0x4a, 0x0e, + 0x7b, 0x14, 0x3c, 0xb4, 0x87, 0x9e, 0x94, 0xd2, 0x83, 0x07, 0x2f, 0x25, 0xb6, 0x31, 0x04, 0xb2, + 0x99, 0x90, 0xec, 0x2e, 0xf8, 0x00, 0xbe, 0x82, 0x0f, 0xe1, 0x53, 0xca, 0x4e, 0x16, 0x16, 0xc1, + 0x5b, 0xe6, 0xff, 0x3e, 0x26, 0x33, 0x03, 0x95, 0x41, 0x34, 0x4e, 0xcb, 0x06, 0xbd, 0x6d, 0x31, + 0x5a, 0x6f, 0x64, 0x5f, 0x4b, 0x13, 0xb1, 0x0b, 0x22, 0x44, 0x6c, 0x91, 0x5f, 0x65, 0x43, 0x4c, + 0x86, 0xe8, 0xeb, 0x87, 0x6f, 0x06, 0xf3, 0xed, 0x60, 0x71, 0x0e, 0xe7, 0x5e, 0x35, 0xba, 0x64, + 0x15, 0x5b, 0x2d, 0xf6, 0xf4, 0xe6, 0xf7, 0x70, 0x79, 0xb2, 0x29, 0x38, 0xf5, 0x79, 0x20, 0x36, + 0x23, 0xb6, 0x1c, 0xb3, 0x97, 0x41, 0xb9, 0x83, 0x65, 0x50, 0x51, 0xfb, 0x36, 0x1b, 0x67, 0x64, + 0x40, 0x8e, 0x48, 0xb8, 0x86, 0xe2, 0xc3, 0xba, 0x56, 0xc7, 0x72, 0x4e, 0x6c, 0xac, 0xf8, 0x2d, + 0x80, 0x4d, 0x87, 0xa3, 0xeb, 0xd2, 0xc0, 0x8a, 0x8a, 0xad, 0x2e, 0xf6, 0x0b, 0x9b, 0x36, 0x39, + 0x58, 0x7f, 0x31, 0x28, 0x8f, 0xd8, 0x88, 0xff, 0xa6, 0x5e, 0x03, 0x8d, 0xbc, 0x1b, 0xf6, 0xda, + 0xb1, 0xb7, 0xa7, 0xd1, 0x31, 0xe8, 0x94, 0x37, 0x02, 0xa3, 0x91, 0x46, 0x7b, 0xda, 0x5a, 0x66, + 0xa4, 0x82, 0x4d, 0x7f, 0x4f, 0xf3, 0x38, 0x55, 0x3f, 0xb3, 0x9b, 0x6d, 0x6e, 0xb0, 0x71, 0xd8, + 0x9d, 0xc4, 0xf3, 0xf4, 0xd5, 0x6b, 0xfd, 0x5e, 0x50, 0x9f, 0xfa, 0x37, 0x00, 0x00, 0xff, 0xff, + 0x0c, 0x22, 0x2a, 0x57, 0x61, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group_service.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group_service.pb.go new file mode 100644 index 0000000..0ffc3b6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group_service.pb.go @@ -0,0 +1,754 @@ +// Code generated by protoc-gen-go. +// source: google/monitoring/v3/group_service.proto +// DO NOT EDIT! + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api4 "google.golang.org/genproto/googleapis/api/monitoredres" +import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The `ListGroup` request. +type ListGroupsRequest struct { + // The project whose groups are to be listed. The format is + // `"projects/{project_id_or_number}"`. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` + // An optional filter consisting of a single group name. The filters limit the + // groups returned based on their parent-child relationship with the specified + // group. If no filter is specified, all groups are returned. + // + // Types that are valid to be assigned to Filter: + // *ListGroupsRequest_ChildrenOfGroup + // *ListGroupsRequest_AncestorsOfGroup + // *ListGroupsRequest_DescendantsOfGroup + Filter isListGroupsRequest_Filter `protobuf_oneof:"filter"` + // A positive number that is the maximum number of results to return. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If this field is not empty then it must contain the `nextPageToken` value + // returned by a previous call to this method. Using this field causes the + // method to return additional results from the previous method call. + PageToken string `protobuf:"bytes,6,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListGroupsRequest) Reset() { *m = ListGroupsRequest{} } +func (m *ListGroupsRequest) String() string { return proto.CompactTextString(m) } +func (*ListGroupsRequest) ProtoMessage() {} +func (*ListGroupsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +type isListGroupsRequest_Filter interface { + isListGroupsRequest_Filter() +} + +type ListGroupsRequest_ChildrenOfGroup struct { + ChildrenOfGroup string `protobuf:"bytes,2,opt,name=children_of_group,json=childrenOfGroup,oneof"` +} +type ListGroupsRequest_AncestorsOfGroup struct { + AncestorsOfGroup string `protobuf:"bytes,3,opt,name=ancestors_of_group,json=ancestorsOfGroup,oneof"` +} +type ListGroupsRequest_DescendantsOfGroup struct { + DescendantsOfGroup string `protobuf:"bytes,4,opt,name=descendants_of_group,json=descendantsOfGroup,oneof"` +} + +func (*ListGroupsRequest_ChildrenOfGroup) isListGroupsRequest_Filter() {} +func (*ListGroupsRequest_AncestorsOfGroup) isListGroupsRequest_Filter() {} +func (*ListGroupsRequest_DescendantsOfGroup) isListGroupsRequest_Filter() {} + +func (m *ListGroupsRequest) GetFilter() isListGroupsRequest_Filter { + if m != nil { + return m.Filter + } + return nil +} + +func (m *ListGroupsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListGroupsRequest) GetChildrenOfGroup() string { + if x, ok := m.GetFilter().(*ListGroupsRequest_ChildrenOfGroup); ok { + return x.ChildrenOfGroup + } + return "" +} + +func (m *ListGroupsRequest) GetAncestorsOfGroup() string { + if x, ok := m.GetFilter().(*ListGroupsRequest_AncestorsOfGroup); ok { + return x.AncestorsOfGroup + } + return "" +} + +func (m *ListGroupsRequest) GetDescendantsOfGroup() string { + if x, ok := m.GetFilter().(*ListGroupsRequest_DescendantsOfGroup); ok { + return x.DescendantsOfGroup + } + return "" +} + +func (m *ListGroupsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListGroupsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ListGroupsRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ListGroupsRequest_OneofMarshaler, _ListGroupsRequest_OneofUnmarshaler, _ListGroupsRequest_OneofSizer, []interface{}{ + (*ListGroupsRequest_ChildrenOfGroup)(nil), + (*ListGroupsRequest_AncestorsOfGroup)(nil), + (*ListGroupsRequest_DescendantsOfGroup)(nil), + } +} + +func _ListGroupsRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ListGroupsRequest) + // filter + switch x := m.Filter.(type) { + case *ListGroupsRequest_ChildrenOfGroup: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ChildrenOfGroup) + case *ListGroupsRequest_AncestorsOfGroup: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.AncestorsOfGroup) + case *ListGroupsRequest_DescendantsOfGroup: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.DescendantsOfGroup) + case nil: + default: + return fmt.Errorf("ListGroupsRequest.Filter has unexpected type %T", x) + } + return nil +} + +func _ListGroupsRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ListGroupsRequest) + switch tag { + case 2: // filter.children_of_group + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Filter = &ListGroupsRequest_ChildrenOfGroup{x} + return true, err + case 3: // filter.ancestors_of_group + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Filter = &ListGroupsRequest_AncestorsOfGroup{x} + return true, err + case 4: // filter.descendants_of_group + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Filter = &ListGroupsRequest_DescendantsOfGroup{x} + return true, err + default: + return false, nil + } +} + +func _ListGroupsRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ListGroupsRequest) + // filter + switch x := m.Filter.(type) { + case *ListGroupsRequest_ChildrenOfGroup: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ChildrenOfGroup))) + n += len(x.ChildrenOfGroup) + case *ListGroupsRequest_AncestorsOfGroup: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AncestorsOfGroup))) + n += len(x.AncestorsOfGroup) + case *ListGroupsRequest_DescendantsOfGroup: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.DescendantsOfGroup))) + n += len(x.DescendantsOfGroup) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The `ListGroups` response. +type ListGroupsResponse struct { + // The groups that match the specified filters. + Group []*Group `protobuf:"bytes,1,rep,name=group" json:"group,omitempty"` + // If there are more results than have been returned, then this field is set + // to a non-empty value. To see the additional results, + // use that value as `pageToken` in the next call to this method. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListGroupsResponse) Reset() { *m = ListGroupsResponse{} } +func (m *ListGroupsResponse) String() string { return proto.CompactTextString(m) } +func (*ListGroupsResponse) ProtoMessage() {} +func (*ListGroupsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ListGroupsResponse) GetGroup() []*Group { + if m != nil { + return m.Group + } + return nil +} + +func (m *ListGroupsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The `GetGroup` request. +type GetGroupRequest struct { + // The group to retrieve. The format is + // `"projects/{project_id_or_number}/groups/{group_id}"`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +} + +func (m *GetGroupRequest) Reset() { *m = GetGroupRequest{} } +func (m *GetGroupRequest) String() string { return proto.CompactTextString(m) } +func (*GetGroupRequest) ProtoMessage() {} +func (*GetGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *GetGroupRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The `CreateGroup` request. +type CreateGroupRequest struct { + // The project in which to create the group. The format is + // `"projects/{project_id_or_number}"`. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + // A group definition. It is an error to define the `name` field because + // the system assigns the name. + Group *Group `protobuf:"bytes,2,opt,name=group" json:"group,omitempty"` + // If true, validate this request but do not create the group. + ValidateOnly bool `protobuf:"varint,3,opt,name=validate_only,json=validateOnly" json:"validate_only,omitempty"` +} + +func (m *CreateGroupRequest) Reset() { *m = CreateGroupRequest{} } +func (m *CreateGroupRequest) String() string { return proto.CompactTextString(m) } +func (*CreateGroupRequest) ProtoMessage() {} +func (*CreateGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *CreateGroupRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateGroupRequest) GetGroup() *Group { + if m != nil { + return m.Group + } + return nil +} + +func (m *CreateGroupRequest) GetValidateOnly() bool { + if m != nil { + return m.ValidateOnly + } + return false +} + +// The `UpdateGroup` request. +type UpdateGroupRequest struct { + // The new definition of the group. All fields of the existing group, + // excepting `name`, are replaced with the corresponding fields of this group. + Group *Group `protobuf:"bytes,2,opt,name=group" json:"group,omitempty"` + // If true, validate this request but do not update the existing group. + ValidateOnly bool `protobuf:"varint,3,opt,name=validate_only,json=validateOnly" json:"validate_only,omitempty"` +} + +func (m *UpdateGroupRequest) Reset() { *m = UpdateGroupRequest{} } +func (m *UpdateGroupRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateGroupRequest) ProtoMessage() {} +func (*UpdateGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *UpdateGroupRequest) GetGroup() *Group { + if m != nil { + return m.Group + } + return nil +} + +func (m *UpdateGroupRequest) GetValidateOnly() bool { + if m != nil { + return m.ValidateOnly + } + return false +} + +// The `DeleteGroup` request. You can only delete a group if it has no children. +type DeleteGroupRequest struct { + // The group to delete. The format is + // `"projects/{project_id_or_number}/groups/{group_id}"`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteGroupRequest) Reset() { *m = DeleteGroupRequest{} } +func (m *DeleteGroupRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteGroupRequest) ProtoMessage() {} +func (*DeleteGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *DeleteGroupRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The `ListGroupMembers` request. +type ListGroupMembersRequest struct { + // The group whose members are listed. The format is + // `"projects/{project_id_or_number}/groups/{group_id}"`. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` + // A positive number that is the maximum number of results to return. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If this field is not empty then it must contain the `nextPageToken` value + // returned by a previous call to this method. Using this field causes the + // method to return additional results from the previous method call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // An optional [list filter](/monitoring/api/learn_more#filtering) describing + // the members to be returned. The filter may reference the type, labels, and + // metadata of monitored resources that comprise the group. + // For example, to return only resources representing Compute Engine VM + // instances, use this filter: + // + // resource.type = "gce_instance" + Filter string `protobuf:"bytes,5,opt,name=filter" json:"filter,omitempty"` + // An optional time interval for which results should be returned. Only + // members that were part of the group during the specified interval are + // included in the response. If no interval is provided then the group + // membership over the last minute is returned. + Interval *TimeInterval `protobuf:"bytes,6,opt,name=interval" json:"interval,omitempty"` +} + +func (m *ListGroupMembersRequest) Reset() { *m = ListGroupMembersRequest{} } +func (m *ListGroupMembersRequest) String() string { return proto.CompactTextString(m) } +func (*ListGroupMembersRequest) ProtoMessage() {} +func (*ListGroupMembersRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *ListGroupMembersRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListGroupMembersRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListGroupMembersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListGroupMembersRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListGroupMembersRequest) GetInterval() *TimeInterval { + if m != nil { + return m.Interval + } + return nil +} + +// The `ListGroupMembers` response. +type ListGroupMembersResponse struct { + // A set of monitored resources in the group. + Members []*google_api4.MonitoredResource `protobuf:"bytes,1,rep,name=members" json:"members,omitempty"` + // If there are more results than have been returned, then this field is + // set to a non-empty value. To see the additional results, use that value as + // `pageToken` in the next call to this method. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` + // The total number of elements matching this request. + TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize" json:"total_size,omitempty"` +} + +func (m *ListGroupMembersResponse) Reset() { *m = ListGroupMembersResponse{} } +func (m *ListGroupMembersResponse) String() string { return proto.CompactTextString(m) } +func (*ListGroupMembersResponse) ProtoMessage() {} +func (*ListGroupMembersResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *ListGroupMembersResponse) GetMembers() []*google_api4.MonitoredResource { + if m != nil { + return m.Members + } + return nil +} + +func (m *ListGroupMembersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func (m *ListGroupMembersResponse) GetTotalSize() int32 { + if m != nil { + return m.TotalSize + } + return 0 +} + +func init() { + proto.RegisterType((*ListGroupsRequest)(nil), "google.monitoring.v3.ListGroupsRequest") + proto.RegisterType((*ListGroupsResponse)(nil), "google.monitoring.v3.ListGroupsResponse") + proto.RegisterType((*GetGroupRequest)(nil), "google.monitoring.v3.GetGroupRequest") + proto.RegisterType((*CreateGroupRequest)(nil), "google.monitoring.v3.CreateGroupRequest") + proto.RegisterType((*UpdateGroupRequest)(nil), "google.monitoring.v3.UpdateGroupRequest") + proto.RegisterType((*DeleteGroupRequest)(nil), "google.monitoring.v3.DeleteGroupRequest") + proto.RegisterType((*ListGroupMembersRequest)(nil), "google.monitoring.v3.ListGroupMembersRequest") + proto.RegisterType((*ListGroupMembersResponse)(nil), "google.monitoring.v3.ListGroupMembersResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for GroupService service + +type GroupServiceClient interface { + // Lists the existing groups. + ListGroups(ctx context.Context, in *ListGroupsRequest, opts ...grpc.CallOption) (*ListGroupsResponse, error) + // Gets a single group. + GetGroup(ctx context.Context, in *GetGroupRequest, opts ...grpc.CallOption) (*Group, error) + // Creates a new group. + CreateGroup(ctx context.Context, in *CreateGroupRequest, opts ...grpc.CallOption) (*Group, error) + // Updates an existing group. + // You can change any group attributes except `name`. + UpdateGroup(ctx context.Context, in *UpdateGroupRequest, opts ...grpc.CallOption) (*Group, error) + // Deletes an existing group. + DeleteGroup(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Lists the monitored resources that are members of a group. + ListGroupMembers(ctx context.Context, in *ListGroupMembersRequest, opts ...grpc.CallOption) (*ListGroupMembersResponse, error) +} + +type groupServiceClient struct { + cc *grpc.ClientConn +} + +func NewGroupServiceClient(cc *grpc.ClientConn) GroupServiceClient { + return &groupServiceClient{cc} +} + +func (c *groupServiceClient) ListGroups(ctx context.Context, in *ListGroupsRequest, opts ...grpc.CallOption) (*ListGroupsResponse, error) { + out := new(ListGroupsResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.GroupService/ListGroups", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupServiceClient) GetGroup(ctx context.Context, in *GetGroupRequest, opts ...grpc.CallOption) (*Group, error) { + out := new(Group) + err := grpc.Invoke(ctx, "/google.monitoring.v3.GroupService/GetGroup", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupServiceClient) CreateGroup(ctx context.Context, in *CreateGroupRequest, opts ...grpc.CallOption) (*Group, error) { + out := new(Group) + err := grpc.Invoke(ctx, "/google.monitoring.v3.GroupService/CreateGroup", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupServiceClient) UpdateGroup(ctx context.Context, in *UpdateGroupRequest, opts ...grpc.CallOption) (*Group, error) { + out := new(Group) + err := grpc.Invoke(ctx, "/google.monitoring.v3.GroupService/UpdateGroup", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupServiceClient) DeleteGroup(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.monitoring.v3.GroupService/DeleteGroup", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupServiceClient) ListGroupMembers(ctx context.Context, in *ListGroupMembersRequest, opts ...grpc.CallOption) (*ListGroupMembersResponse, error) { + out := new(ListGroupMembersResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.GroupService/ListGroupMembers", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for GroupService service + +type GroupServiceServer interface { + // Lists the existing groups. + ListGroups(context.Context, *ListGroupsRequest) (*ListGroupsResponse, error) + // Gets a single group. + GetGroup(context.Context, *GetGroupRequest) (*Group, error) + // Creates a new group. + CreateGroup(context.Context, *CreateGroupRequest) (*Group, error) + // Updates an existing group. + // You can change any group attributes except `name`. + UpdateGroup(context.Context, *UpdateGroupRequest) (*Group, error) + // Deletes an existing group. + DeleteGroup(context.Context, *DeleteGroupRequest) (*google_protobuf4.Empty, error) + // Lists the monitored resources that are members of a group. + ListGroupMembers(context.Context, *ListGroupMembersRequest) (*ListGroupMembersResponse, error) +} + +func RegisterGroupServiceServer(s *grpc.Server, srv GroupServiceServer) { + s.RegisterService(&_GroupService_serviceDesc, srv) +} + +func _GroupService_ListGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListGroupsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServiceServer).ListGroups(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.GroupService/ListGroups", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServiceServer).ListGroups(ctx, req.(*ListGroupsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupService_GetGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServiceServer).GetGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.GroupService/GetGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServiceServer).GetGroup(ctx, req.(*GetGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupService_CreateGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServiceServer).CreateGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.GroupService/CreateGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServiceServer).CreateGroup(ctx, req.(*CreateGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupService_UpdateGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServiceServer).UpdateGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.GroupService/UpdateGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServiceServer).UpdateGroup(ctx, req.(*UpdateGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupService_DeleteGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServiceServer).DeleteGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.GroupService/DeleteGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServiceServer).DeleteGroup(ctx, req.(*DeleteGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupService_ListGroupMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListGroupMembersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServiceServer).ListGroupMembers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.GroupService/ListGroupMembers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServiceServer).ListGroupMembers(ctx, req.(*ListGroupMembersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _GroupService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.monitoring.v3.GroupService", + HandlerType: (*GroupServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListGroups", + Handler: _GroupService_ListGroups_Handler, + }, + { + MethodName: "GetGroup", + Handler: _GroupService_GetGroup_Handler, + }, + { + MethodName: "CreateGroup", + Handler: _GroupService_CreateGroup_Handler, + }, + { + MethodName: "UpdateGroup", + Handler: _GroupService_UpdateGroup_Handler, + }, + { + MethodName: "DeleteGroup", + Handler: _GroupService_DeleteGroup_Handler, + }, + { + MethodName: "ListGroupMembers", + Handler: _GroupService_ListGroupMembers_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/monitoring/v3/group_service.proto", +} + +func init() { proto.RegisterFile("google/monitoring/v3/group_service.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 818 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x2e, 0x2d, 0x59, 0x96, 0x46, 0x36, 0x6c, 0x2f, 0x0c, 0x57, 0xa0, 0x7f, 0xa0, 0xd2, 0x3f, + 0x15, 0xdc, 0x9a, 0x44, 0xa5, 0x43, 0x81, 0x16, 0xf5, 0xc1, 0x6e, 0xe1, 0x16, 0xa8, 0x61, 0x83, + 0x76, 0x7b, 0xe8, 0x45, 0xa0, 0xa5, 0x11, 0xcb, 0x96, 0xdc, 0x65, 0xc9, 0x95, 0x5a, 0xbb, 0x30, + 0x90, 0x04, 0xc8, 0x21, 0x40, 0x6e, 0xb9, 0xe5, 0x96, 0x6b, 0x5e, 0x21, 0xa7, 0x3c, 0x43, 0x5e, + 0x21, 0xef, 0x91, 0x80, 0xcb, 0x5d, 0x89, 0xfa, 0xb5, 0x2f, 0xb9, 0x91, 0xbb, 0xdf, 0xec, 0xf7, + 0xcd, 0xec, 0x37, 0xb3, 0x50, 0x73, 0x19, 0x73, 0x7d, 0xb4, 0x02, 0x46, 0x3d, 0xce, 0x22, 0x8f, + 0xba, 0x56, 0xaf, 0x61, 0xb9, 0x11, 0xeb, 0x86, 0xcd, 0x18, 0xa3, 0x9e, 0xd7, 0x42, 0x33, 0x8c, + 0x18, 0x67, 0x64, 0x2d, 0x45, 0x9a, 0x03, 0xa4, 0xd9, 0x6b, 0xe8, 0x9b, 0x32, 0xde, 0x09, 0x3d, + 0xcb, 0xa1, 0x94, 0x71, 0x87, 0x7b, 0x8c, 0xc6, 0x69, 0x8c, 0xbe, 0x93, 0xd9, 0x95, 0x71, 0xd8, + 0x6e, 0x46, 0x18, 0xb3, 0x6e, 0xa4, 0x0e, 0xd6, 0xbf, 0x98, 0x28, 0xa1, 0xc5, 0x82, 0x80, 0x51, + 0x09, 0xa9, 0x4e, 0x57, 0x29, 0x11, 0x1b, 0x12, 0x21, 0xfe, 0xae, 0xbb, 0x1d, 0x0b, 0x83, 0x90, + 0xdf, 0xa4, 0x9b, 0xc6, 0x07, 0x0d, 0x56, 0x7f, 0xf5, 0x62, 0x7e, 0x9a, 0x04, 0xc4, 0x36, 0xfe, + 0xd3, 0xc5, 0x98, 0x13, 0x02, 0x79, 0xea, 0x04, 0x58, 0x59, 0xa8, 0x6a, 0xb5, 0x92, 0x2d, 0xbe, + 0xc9, 0xd7, 0xb0, 0xda, 0xfa, 0xd3, 0xf3, 0xdb, 0x11, 0xd2, 0x26, 0xeb, 0x34, 0x05, 0x43, 0x65, + 0x2e, 0x01, 0xfc, 0xfc, 0x99, 0xbd, 0xac, 0xb6, 0xce, 0x3b, 0xe2, 0x24, 0x62, 0x02, 0x71, 0x68, + 0x0b, 0x63, 0xce, 0xa2, 0x78, 0x00, 0xcf, 0x49, 0xf8, 0x4a, 0x7f, 0x4f, 0xe1, 0xeb, 0xb0, 0xd6, + 0xc6, 0xb8, 0x85, 0xb4, 0xed, 0x50, 0x9e, 0x89, 0xc8, 0xcb, 0x08, 0x92, 0xd9, 0x55, 0x31, 0x1b, + 0x50, 0x0a, 0x1d, 0x17, 0x9b, 0xb1, 0x77, 0x8b, 0x95, 0xf9, 0xaa, 0x56, 0x9b, 0xb7, 0x8b, 0xc9, + 0xc2, 0xa5, 0x77, 0x8b, 0x64, 0x0b, 0x40, 0x6c, 0x72, 0xf6, 0x37, 0xd2, 0x4a, 0x41, 0x24, 0x22, + 0xe0, 0x57, 0xc9, 0xc2, 0x71, 0x11, 0x0a, 0x1d, 0xcf, 0xe7, 0x18, 0x19, 0x0c, 0x48, 0xb6, 0x00, + 0x71, 0xc8, 0x68, 0x8c, 0xe4, 0x1b, 0x98, 0x4f, 0x05, 0x68, 0xd5, 0x5c, 0xad, 0x5c, 0xdf, 0x30, + 0x27, 0x5d, 0xb1, 0x29, 0x82, 0xec, 0x14, 0x49, 0xf6, 0x61, 0x99, 0xe2, 0x7f, 0xbc, 0x99, 0xa1, + 0x15, 0xe5, 0xb1, 0x97, 0x92, 0xe5, 0x0b, 0x45, 0x6d, 0xec, 0xc1, 0xf2, 0x29, 0xa6, 0x7c, 0xa3, + 0xf5, 0xce, 0x0d, 0xea, 0x6d, 0x3c, 0xd2, 0x80, 0x9c, 0x44, 0xe8, 0x70, 0x9c, 0x08, 0xcd, 0x67, + 0xae, 0xa6, 0x2f, 0x36, 0xe1, 0x7b, 0x98, 0xd8, 0x1d, 0x58, 0xea, 0x39, 0xbe, 0xd7, 0x76, 0x38, + 0x36, 0x19, 0xf5, 0x6f, 0x04, 0x75, 0xd1, 0x5e, 0x54, 0x8b, 0xe7, 0xd4, 0xbf, 0x31, 0x7c, 0x20, + 0xbf, 0x85, 0xed, 0x51, 0x05, 0x9f, 0x8a, 0xad, 0x06, 0xe4, 0x47, 0xf4, 0x71, 0x4a, 0xbe, 0xd9, + 0xd2, 0xbc, 0xd5, 0xe0, 0xf3, 0xfe, 0x9d, 0x9d, 0x61, 0x70, 0x8d, 0xd1, 0x4c, 0xeb, 0x0e, 0x19, + 0x25, 0x37, 0xd3, 0x28, 0xf9, 0x11, 0xa3, 0x90, 0x75, 0x65, 0x14, 0xe1, 0xb0, 0x92, 0x2d, 0xff, + 0xc8, 0x11, 0x14, 0x3d, 0xca, 0x31, 0xea, 0x39, 0xbe, 0x70, 0x57, 0xb9, 0x6e, 0x4c, 0x2e, 0xc4, + 0x95, 0x17, 0xe0, 0x2f, 0x12, 0x69, 0xf7, 0x63, 0x8c, 0x97, 0x1a, 0x54, 0xc6, 0x73, 0x90, 0xee, + 0xfb, 0x16, 0x16, 0x82, 0x74, 0x49, 0xfa, 0x6f, 0x4b, 0x9d, 0xed, 0x84, 0x9e, 0x79, 0xa6, 0xc6, + 0x85, 0x2d, 0xa7, 0x85, 0xad, 0xd0, 0x0f, 0xf5, 0x60, 0x92, 0x34, 0x67, 0xdc, 0xf1, 0xb3, 0x25, + 0x29, 0x89, 0x95, 0xa4, 0x26, 0xf5, 0x37, 0x05, 0x58, 0x14, 0xc2, 0x2e, 0xd3, 0x39, 0x47, 0x9e, + 0x6a, 0x00, 0x83, 0x2e, 0x21, 0x5f, 0x4e, 0x4e, 0x75, 0x6c, 0x90, 0xe8, 0xb5, 0xfb, 0x81, 0x69, + 0xca, 0xc6, 0xee, 0x93, 0x77, 0xef, 0x5f, 0xcc, 0x6d, 0x93, 0xcd, 0x64, 0x7c, 0xfd, 0x9f, 0x5c, + 0xdb, 0x0f, 0x61, 0xc4, 0xfe, 0xc2, 0x16, 0x8f, 0xad, 0x83, 0xbb, 0x74, 0xa0, 0xc5, 0xa4, 0x07, + 0x45, 0xd5, 0x3b, 0x64, 0x6f, 0x8a, 0xf1, 0x86, 0x7b, 0x4b, 0x9f, 0xe5, 0x4f, 0x63, 0x5f, 0xb0, + 0x56, 0xc9, 0xf6, 0x24, 0x56, 0x49, 0x6a, 0x1d, 0xdc, 0x91, 0xc7, 0x1a, 0x94, 0x33, 0xcd, 0x48, + 0xa6, 0xe4, 0x35, 0xde, 0xaf, 0xb3, 0xe9, 0xbf, 0x12, 0xf4, 0x7b, 0xc6, 0xcc, 0xa4, 0xbf, 0x93, + 0x4d, 0xf4, 0x4c, 0x83, 0x72, 0xa6, 0x1d, 0xa7, 0x69, 0x18, 0xef, 0xd8, 0xd9, 0x1a, 0x1a, 0x42, + 0xc3, 0xa1, 0xbe, 0x2b, 0x34, 0xa4, 0x0f, 0xc7, 0xd4, 0x42, 0x28, 0x2d, 0xff, 0x42, 0x39, 0xd3, + 0xab, 0xd3, 0xa4, 0x8c, 0xb7, 0xb3, 0xbe, 0xae, 0x90, 0xea, 0x35, 0x32, 0x7f, 0x4a, 0x5e, 0x23, + 0x75, 0x11, 0x07, 0xf7, 0x5d, 0xc4, 0x2b, 0x0d, 0x56, 0x46, 0xdb, 0x86, 0x1c, 0xde, 0xe3, 0xb2, + 0xe1, 0x11, 0xa1, 0x9b, 0x0f, 0x85, 0x4b, 0x6b, 0x9a, 0x42, 0x5b, 0x8d, 0xec, 0xcf, 0xd6, 0x66, + 0xc9, 0x26, 0x3c, 0x7e, 0xae, 0x41, 0xa5, 0xc5, 0x82, 0x89, 0x2c, 0xc7, 0xab, 0xd9, 0xbe, 0xba, + 0x48, 0x8a, 0x70, 0xa1, 0xfd, 0x71, 0x24, 0xa1, 0x2e, 0xf3, 0x1d, 0xea, 0x9a, 0x2c, 0x72, 0x2d, + 0x17, 0xa9, 0x28, 0x91, 0x95, 0x6e, 0x39, 0xa1, 0x17, 0x0f, 0xbf, 0xf1, 0xdf, 0x0f, 0xfe, 0x5e, + 0xcf, 0xe9, 0xa7, 0xe9, 0x01, 0x27, 0x3e, 0xeb, 0xb6, 0xd5, 0x80, 0x48, 0x18, 0x7f, 0x6f, 0x5c, + 0x17, 0xc4, 0x39, 0x8d, 0x8f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xec, 0x77, 0x3f, 0xd0, 0x08, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric.pb.go new file mode 100644 index 0000000..83aca74 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric.pb.go @@ -0,0 +1,164 @@ +// Code generated by protoc-gen-go. +// source: google/monitoring/v3/metric.proto +// DO NOT EDIT! + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_api5 "google.golang.org/genproto/googleapis/api/metric" +import google_api4 "google.golang.org/genproto/googleapis/api/monitoredres" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A single data point in a time series. +type Point struct { + // The time interval to which the data point applies. For GAUGE metrics, only + // the end time of the interval is used. For DELTA metrics, the start and end + // time should specify a non-zero interval, with subsequent points specifying + // contiguous and non-overlapping intervals. For CUMULATIVE metrics, the + // start and end time should specify a non-zero interval, with subsequent + // points specifying the same start time and increasing end times, until an + // event resets the cumulative value to zero and sets a new start time for the + // following points. + Interval *TimeInterval `protobuf:"bytes,1,opt,name=interval" json:"interval,omitempty"` + // The value of the data point. + Value *TypedValue `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *Point) Reset() { *m = Point{} } +func (m *Point) String() string { return proto.CompactTextString(m) } +func (*Point) ProtoMessage() {} +func (*Point) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *Point) GetInterval() *TimeInterval { + if m != nil { + return m.Interval + } + return nil +} + +func (m *Point) GetValue() *TypedValue { + if m != nil { + return m.Value + } + return nil +} + +// A collection of data points that describes the time-varying values +// of a metric. A time series is identified by a combination of a +// fully-specified monitored resource and a fully-specified metric. +// This type is used for both listing and creating time series. +type TimeSeries struct { + // The associated metric. A fully-specified metric used to identify the time + // series. + Metric *google_api5.Metric `protobuf:"bytes,1,opt,name=metric" json:"metric,omitempty"` + // The associated resource. A fully-specified monitored resource used to + // identify the time series. + Resource *google_api4.MonitoredResource `protobuf:"bytes,2,opt,name=resource" json:"resource,omitempty"` + // The metric kind of the time series. When listing time series, this metric + // kind might be different from the metric kind of the associated metric if + // this time series is an alignment or reduction of other time series. + // + // When creating a time series, this field is optional. If present, it must be + // the same as the metric kind of the associated metric. If the associated + // metric's descriptor must be auto-created, then this field specifies the + // metric kind of the new descriptor and must be either `GAUGE` (the default) + // or `CUMULATIVE`. + MetricKind google_api5.MetricDescriptor_MetricKind `protobuf:"varint,3,opt,name=metric_kind,json=metricKind,enum=google.api.MetricDescriptor_MetricKind" json:"metric_kind,omitempty"` + // The value type of the time series. When listing time series, this value + // type might be different from the value type of the associated metric if + // this time series is an alignment or reduction of other time series. + // + // When creating a time series, this field is optional. If present, it must be + // the same as the type of the data in the `points` field. + ValueType google_api5.MetricDescriptor_ValueType `protobuf:"varint,4,opt,name=value_type,json=valueType,enum=google.api.MetricDescriptor_ValueType" json:"value_type,omitempty"` + // The data points of this time series. When listing time series, the order of + // the points is specified by the list method. + // + // When creating a time series, this field must contain exactly one point and + // the point's type must be the same as the value type of the associated + // metric. If the associated metric's descriptor must be auto-created, then + // the value type of the descriptor is determined by the point's type, which + // must be `BOOL`, `INT64`, `DOUBLE`, or `DISTRIBUTION`. + Points []*Point `protobuf:"bytes,5,rep,name=points" json:"points,omitempty"` +} + +func (m *TimeSeries) Reset() { *m = TimeSeries{} } +func (m *TimeSeries) String() string { return proto.CompactTextString(m) } +func (*TimeSeries) ProtoMessage() {} +func (*TimeSeries) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *TimeSeries) GetMetric() *google_api5.Metric { + if m != nil { + return m.Metric + } + return nil +} + +func (m *TimeSeries) GetResource() *google_api4.MonitoredResource { + if m != nil { + return m.Resource + } + return nil +} + +func (m *TimeSeries) GetMetricKind() google_api5.MetricDescriptor_MetricKind { + if m != nil { + return m.MetricKind + } + return google_api5.MetricDescriptor_METRIC_KIND_UNSPECIFIED +} + +func (m *TimeSeries) GetValueType() google_api5.MetricDescriptor_ValueType { + if m != nil { + return m.ValueType + } + return google_api5.MetricDescriptor_VALUE_TYPE_UNSPECIFIED +} + +func (m *TimeSeries) GetPoints() []*Point { + if m != nil { + return m.Points + } + return nil +} + +func init() { + proto.RegisterType((*Point)(nil), "google.monitoring.v3.Point") + proto.RegisterType((*TimeSeries)(nil), "google.monitoring.v3.TimeSeries") +} + +func init() { proto.RegisterFile("google/monitoring/v3/metric.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 384 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x51, 0x4b, 0xeb, 0x30, + 0x14, 0xc7, 0xe9, 0x76, 0x37, 0x76, 0x53, 0xb8, 0x0f, 0xe1, 0xc2, 0x2d, 0xbb, 0x08, 0x75, 0x82, + 0x0e, 0x1f, 0x5a, 0x58, 0x41, 0x10, 0x61, 0x0f, 0x53, 0x51, 0x11, 0x61, 0x44, 0xd9, 0x83, 0x2f, + 0xa3, 0xb6, 0xa1, 0x04, 0xdb, 0x9c, 0x90, 0x66, 0x85, 0x3d, 0xf9, 0xe6, 0x87, 0xf1, 0x1b, 0xf8, + 0xed, 0xa4, 0x49, 0xba, 0x39, 0xac, 0xbe, 0xa5, 0x3d, 0xbf, 0xff, 0xff, 0x9f, 0x73, 0x4e, 0xd0, + 0x7e, 0x06, 0x90, 0xe5, 0x34, 0x2c, 0x80, 0x33, 0x05, 0x92, 0xf1, 0x2c, 0xac, 0xa2, 0xb0, 0xa0, + 0x4a, 0xb2, 0x24, 0x10, 0x12, 0x14, 0xe0, 0xbf, 0x06, 0x09, 0xb6, 0x48, 0x50, 0x45, 0xc3, 0x7f, + 0x56, 0x18, 0x0b, 0xb6, 0x83, 0x0f, 0x0f, 0x3e, 0x17, 0x8c, 0x84, 0xa6, 0x4b, 0x49, 0x4b, 0x58, + 0xc9, 0x84, 0x5a, 0xa8, 0x3d, 0x36, 0x81, 0xa2, 0x00, 0x6e, 0x90, 0xd1, 0x0b, 0xea, 0xcd, 0x81, + 0x71, 0x85, 0xa7, 0x68, 0xc0, 0xb8, 0xa2, 0xb2, 0x8a, 0x73, 0xcf, 0xf1, 0x9d, 0xb1, 0x3b, 0x19, + 0x05, 0x6d, 0x57, 0x0a, 0x1e, 0x58, 0x41, 0x6f, 0x2c, 0x49, 0x36, 0x1a, 0x7c, 0x82, 0x7a, 0x55, + 0x9c, 0xaf, 0xa8, 0xd7, 0xd1, 0x62, 0xff, 0x1b, 0xf1, 0x5a, 0xd0, 0x74, 0x51, 0x73, 0xc4, 0xe0, + 0xa3, 0xf7, 0x0e, 0x42, 0xb5, 0xe5, 0x3d, 0x95, 0x8c, 0x96, 0xf8, 0x18, 0xf5, 0x4d, 0x9f, 0xf6, + 0x12, 0xb8, 0xf1, 0x89, 0x05, 0x0b, 0xee, 0x74, 0x85, 0x58, 0x02, 0x9f, 0xa2, 0x41, 0xd3, 0xb0, + 0x4d, 0xdd, 0xdb, 0xa1, 0x9b, 0xb1, 0x10, 0x0b, 0x91, 0x0d, 0x8e, 0xaf, 0x91, 0x6b, 0x4c, 0x96, + 0xcf, 0x8c, 0xa7, 0x5e, 0xd7, 0x77, 0xc6, 0x7f, 0x26, 0x47, 0x5f, 0xb3, 0x2e, 0x68, 0x99, 0x48, + 0x26, 0x14, 0x48, 0xfb, 0xe3, 0x96, 0xf1, 0x94, 0xa0, 0x62, 0x73, 0xc6, 0x97, 0x08, 0xe9, 0x46, + 0x96, 0x6a, 0x2d, 0xa8, 0xf7, 0x4b, 0x1b, 0x1d, 0xfe, 0x68, 0xa4, 0xdb, 0xaf, 0x07, 0x41, 0x7e, + 0x57, 0xcd, 0x11, 0x47, 0xa8, 0x2f, 0xea, 0x3d, 0x94, 0x5e, 0xcf, 0xef, 0x8e, 0xdd, 0xc9, 0xff, + 0xf6, 0xf9, 0xe9, 0x5d, 0x11, 0x8b, 0xce, 0x5e, 0x1d, 0xe4, 0x25, 0x50, 0xb4, 0xa2, 0x33, 0xd7, + 0x04, 0xcf, 0xeb, 0x35, 0xcf, 0x9d, 0xc7, 0xa9, 0x85, 0x32, 0xc8, 0x63, 0x9e, 0x05, 0x20, 0xb3, + 0x30, 0xa3, 0x5c, 0x3f, 0x82, 0xd0, 0x94, 0x62, 0xc1, 0xca, 0xdd, 0xa7, 0x72, 0xb6, 0xfd, 0x7a, + 0xeb, 0x0c, 0xaf, 0x8c, 0xc1, 0x79, 0x0e, 0xab, 0xb4, 0x19, 0x6e, 0x9d, 0xb5, 0x88, 0x9e, 0xfa, + 0xda, 0x27, 0xfa, 0x08, 0x00, 0x00, 0xff, 0xff, 0xd5, 0xab, 0x3f, 0xd9, 0xe8, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric_service.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric_service.pb.go new file mode 100644 index 0000000..41ffeb0 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric_service.pb.go @@ -0,0 +1,929 @@ +// Code generated by protoc-gen-go. +// source: google/monitoring/v3/metric_service.proto +// DO NOT EDIT! + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api5 "google.golang.org/genproto/googleapis/api/metric" +import google_api4 "google.golang.org/genproto/googleapis/api/monitoredres" +import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Controls which fields are returned by `ListTimeSeries`. +type ListTimeSeriesRequest_TimeSeriesView int32 + +const ( + // Returns the identity of the metric(s), the time series, + // and the time series data. + ListTimeSeriesRequest_FULL ListTimeSeriesRequest_TimeSeriesView = 0 + // Returns the identity of the metric and the time series resource, + // but not the time series data. + ListTimeSeriesRequest_HEADERS ListTimeSeriesRequest_TimeSeriesView = 1 +) + +var ListTimeSeriesRequest_TimeSeriesView_name = map[int32]string{ + 0: "FULL", + 1: "HEADERS", +} +var ListTimeSeriesRequest_TimeSeriesView_value = map[string]int32{ + "FULL": 0, + "HEADERS": 1, +} + +func (x ListTimeSeriesRequest_TimeSeriesView) String() string { + return proto.EnumName(ListTimeSeriesRequest_TimeSeriesView_name, int32(x)) +} +func (ListTimeSeriesRequest_TimeSeriesView) EnumDescriptor() ([]byte, []int) { + return fileDescriptor4, []int{8, 0} +} + +// The `ListMonitoredResourceDescriptors` request. +type ListMonitoredResourceDescriptorsRequest struct { + // The project on which to execute the request. The format is + // `"projects/{project_id_or_number}"`. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` + // An optional [filter](/monitoring/api/v3/filters) describing + // the descriptors to be returned. The filter can reference + // the descriptor's type and labels. For example, the + // following filter returns only Google Compute Engine descriptors + // that have an `id` label: + // + // resource.type = starts_with("gce_") AND resource.label:id + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // A positive number that is the maximum number of results to return. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If this field is not empty then it must contain the `nextPageToken` value + // returned by a previous call to this method. Using this field causes the + // method to return additional results from the previous method call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListMonitoredResourceDescriptorsRequest) Reset() { + *m = ListMonitoredResourceDescriptorsRequest{} +} +func (m *ListMonitoredResourceDescriptorsRequest) String() string { return proto.CompactTextString(m) } +func (*ListMonitoredResourceDescriptorsRequest) ProtoMessage() {} +func (*ListMonitoredResourceDescriptorsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor4, []int{0} +} + +func (m *ListMonitoredResourceDescriptorsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListMonitoredResourceDescriptorsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListMonitoredResourceDescriptorsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListMonitoredResourceDescriptorsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The `ListMonitoredResourcDescriptors` response. +type ListMonitoredResourceDescriptorsResponse struct { + // The monitored resource descriptors that are available to this project + // and that match `filter`, if present. + ResourceDescriptors []*google_api4.MonitoredResourceDescriptor `protobuf:"bytes,1,rep,name=resource_descriptors,json=resourceDescriptors" json:"resource_descriptors,omitempty"` + // If there are more results than have been returned, then this field is set + // to a non-empty value. To see the additional results, + // use that value as `pageToken` in the next call to this method. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListMonitoredResourceDescriptorsResponse) Reset() { + *m = ListMonitoredResourceDescriptorsResponse{} +} +func (m *ListMonitoredResourceDescriptorsResponse) String() string { return proto.CompactTextString(m) } +func (*ListMonitoredResourceDescriptorsResponse) ProtoMessage() {} +func (*ListMonitoredResourceDescriptorsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor4, []int{1} +} + +func (m *ListMonitoredResourceDescriptorsResponse) GetResourceDescriptors() []*google_api4.MonitoredResourceDescriptor { + if m != nil { + return m.ResourceDescriptors + } + return nil +} + +func (m *ListMonitoredResourceDescriptorsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The `GetMonitoredResourceDescriptor` request. +type GetMonitoredResourceDescriptorRequest struct { + // The monitored resource descriptor to get. The format is + // `"projects/{project_id_or_number}/monitoredResourceDescriptors/{resource_type}"`. + // The `{resource_type}` is a predefined type, such as + // `cloudsql_database`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +} + +func (m *GetMonitoredResourceDescriptorRequest) Reset() { *m = GetMonitoredResourceDescriptorRequest{} } +func (m *GetMonitoredResourceDescriptorRequest) String() string { return proto.CompactTextString(m) } +func (*GetMonitoredResourceDescriptorRequest) ProtoMessage() {} +func (*GetMonitoredResourceDescriptorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor4, []int{2} +} + +func (m *GetMonitoredResourceDescriptorRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The `ListMetricDescriptors` request. +type ListMetricDescriptorsRequest struct { + // The project on which to execute the request. The format is + // `"projects/{project_id_or_number}"`. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` + // If this field is empty, all custom and + // system-defined metric descriptors are returned. + // Otherwise, the [filter](/monitoring/api/v3/filters) + // specifies which metric descriptors are to be + // returned. For example, the following filter matches all + // [custom metrics](/monitoring/custom-metrics): + // + // metric.type = starts_with("custom.googleapis.com/") + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // A positive number that is the maximum number of results to return. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If this field is not empty then it must contain the `nextPageToken` value + // returned by a previous call to this method. Using this field causes the + // method to return additional results from the previous method call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListMetricDescriptorsRequest) Reset() { *m = ListMetricDescriptorsRequest{} } +func (m *ListMetricDescriptorsRequest) String() string { return proto.CompactTextString(m) } +func (*ListMetricDescriptorsRequest) ProtoMessage() {} +func (*ListMetricDescriptorsRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } + +func (m *ListMetricDescriptorsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListMetricDescriptorsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListMetricDescriptorsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListMetricDescriptorsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The `ListMetricDescriptors` response. +type ListMetricDescriptorsResponse struct { + // The metric descriptors that are available to the project + // and that match the value of `filter`, if present. + MetricDescriptors []*google_api5.MetricDescriptor `protobuf:"bytes,1,rep,name=metric_descriptors,json=metricDescriptors" json:"metric_descriptors,omitempty"` + // If there are more results than have been returned, then this field is set + // to a non-empty value. To see the additional results, + // use that value as `pageToken` in the next call to this method. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListMetricDescriptorsResponse) Reset() { *m = ListMetricDescriptorsResponse{} } +func (m *ListMetricDescriptorsResponse) String() string { return proto.CompactTextString(m) } +func (*ListMetricDescriptorsResponse) ProtoMessage() {} +func (*ListMetricDescriptorsResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } + +func (m *ListMetricDescriptorsResponse) GetMetricDescriptors() []*google_api5.MetricDescriptor { + if m != nil { + return m.MetricDescriptors + } + return nil +} + +func (m *ListMetricDescriptorsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The `GetMetricDescriptor` request. +type GetMetricDescriptorRequest struct { + // The metric descriptor on which to execute the request. The format is + // `"projects/{project_id_or_number}/metricDescriptors/{metric_id}"`. + // An example value of `{metric_id}` is + // `"compute.googleapis.com/instance/disk/read_bytes_count"`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +} + +func (m *GetMetricDescriptorRequest) Reset() { *m = GetMetricDescriptorRequest{} } +func (m *GetMetricDescriptorRequest) String() string { return proto.CompactTextString(m) } +func (*GetMetricDescriptorRequest) ProtoMessage() {} +func (*GetMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } + +func (m *GetMetricDescriptorRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The `CreateMetricDescriptor` request. +type CreateMetricDescriptorRequest struct { + // The project on which to execute the request. The format is + // `"projects/{project_id_or_number}"`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // The new [custom metric](/monitoring/custom-metrics) + // descriptor. + MetricDescriptor *google_api5.MetricDescriptor `protobuf:"bytes,2,opt,name=metric_descriptor,json=metricDescriptor" json:"metric_descriptor,omitempty"` +} + +func (m *CreateMetricDescriptorRequest) Reset() { *m = CreateMetricDescriptorRequest{} } +func (m *CreateMetricDescriptorRequest) String() string { return proto.CompactTextString(m) } +func (*CreateMetricDescriptorRequest) ProtoMessage() {} +func (*CreateMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } + +func (m *CreateMetricDescriptorRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateMetricDescriptorRequest) GetMetricDescriptor() *google_api5.MetricDescriptor { + if m != nil { + return m.MetricDescriptor + } + return nil +} + +// The `DeleteMetricDescriptor` request. +type DeleteMetricDescriptorRequest struct { + // The metric descriptor on which to execute the request. The format is + // `"projects/{project_id_or_number}/metricDescriptors/{metric_id}"`. + // An example of `{metric_id}` is: + // `"custom.googleapis.com/my_test_metric"`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteMetricDescriptorRequest) Reset() { *m = DeleteMetricDescriptorRequest{} } +func (m *DeleteMetricDescriptorRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteMetricDescriptorRequest) ProtoMessage() {} +func (*DeleteMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} } + +func (m *DeleteMetricDescriptorRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The `ListTimeSeries` request. +type ListTimeSeriesRequest struct { + // The project on which to execute the request. The format is + // "projects/{project_id_or_number}". + Name string `protobuf:"bytes,10,opt,name=name" json:"name,omitempty"` + // A [monitoring filter](/monitoring/api/v3/filters) that specifies which time + // series should be returned. The filter must specify a single metric type, + // and can additionally specify metric labels and other information. For + // example: + // + // metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND + // metric.label.instance_name = "my-instance-name" + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // The time interval for which results should be returned. Only time series + // that contain data points in the specified interval are included + // in the response. + Interval *TimeInterval `protobuf:"bytes,4,opt,name=interval" json:"interval,omitempty"` + // By default, the raw time series data is returned. + // Use this field to combine multiple time series for different + // views of the data. + Aggregation *Aggregation `protobuf:"bytes,5,opt,name=aggregation" json:"aggregation,omitempty"` + // Specifies the order in which the points of the time series should + // be returned. By default, results are not ordered. Currently, + // this field must be left blank. + OrderBy string `protobuf:"bytes,6,opt,name=order_by,json=orderBy" json:"order_by,omitempty"` + // Specifies which information is returned about the time series. + View ListTimeSeriesRequest_TimeSeriesView `protobuf:"varint,7,opt,name=view,enum=google.monitoring.v3.ListTimeSeriesRequest_TimeSeriesView" json:"view,omitempty"` + // A positive number that is the maximum number of results to return. + // When `view` field sets to `FULL`, it limits the number of `Points` server + // will return; if `view` field is `HEADERS`, it limits the number of + // `TimeSeries` server will return. + PageSize int32 `protobuf:"varint,8,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If this field is not empty then it must contain the `nextPageToken` value + // returned by a previous call to this method. Using this field causes the + // method to return additional results from the previous method call. + PageToken string `protobuf:"bytes,9,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListTimeSeriesRequest) Reset() { *m = ListTimeSeriesRequest{} } +func (m *ListTimeSeriesRequest) String() string { return proto.CompactTextString(m) } +func (*ListTimeSeriesRequest) ProtoMessage() {} +func (*ListTimeSeriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{8} } + +func (m *ListTimeSeriesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListTimeSeriesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListTimeSeriesRequest) GetInterval() *TimeInterval { + if m != nil { + return m.Interval + } + return nil +} + +func (m *ListTimeSeriesRequest) GetAggregation() *Aggregation { + if m != nil { + return m.Aggregation + } + return nil +} + +func (m *ListTimeSeriesRequest) GetOrderBy() string { + if m != nil { + return m.OrderBy + } + return "" +} + +func (m *ListTimeSeriesRequest) GetView() ListTimeSeriesRequest_TimeSeriesView { + if m != nil { + return m.View + } + return ListTimeSeriesRequest_FULL +} + +func (m *ListTimeSeriesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTimeSeriesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The `ListTimeSeries` response. +type ListTimeSeriesResponse struct { + // One or more time series that match the filter included in the request. + TimeSeries []*TimeSeries `protobuf:"bytes,1,rep,name=time_series,json=timeSeries" json:"time_series,omitempty"` + // If there are more results than have been returned, then this field is set + // to a non-empty value. To see the additional results, + // use that value as `pageToken` in the next call to this method. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTimeSeriesResponse) Reset() { *m = ListTimeSeriesResponse{} } +func (m *ListTimeSeriesResponse) String() string { return proto.CompactTextString(m) } +func (*ListTimeSeriesResponse) ProtoMessage() {} +func (*ListTimeSeriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{9} } + +func (m *ListTimeSeriesResponse) GetTimeSeries() []*TimeSeries { + if m != nil { + return m.TimeSeries + } + return nil +} + +func (m *ListTimeSeriesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The `CreateTimeSeries` request. +type CreateTimeSeriesRequest struct { + // The project on which to execute the request. The format is + // `"projects/{project_id_or_number}"`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // The new data to be added to a list of time series. + // Adds at most one data point to each of several time series. The new data + // point must be more recent than any other point in its time series. Each + // `TimeSeries` value must fully specify a unique time series by supplying + // all label values for the metric and the monitored resource. + TimeSeries []*TimeSeries `protobuf:"bytes,2,rep,name=time_series,json=timeSeries" json:"time_series,omitempty"` +} + +func (m *CreateTimeSeriesRequest) Reset() { *m = CreateTimeSeriesRequest{} } +func (m *CreateTimeSeriesRequest) String() string { return proto.CompactTextString(m) } +func (*CreateTimeSeriesRequest) ProtoMessage() {} +func (*CreateTimeSeriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{10} } + +func (m *CreateTimeSeriesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateTimeSeriesRequest) GetTimeSeries() []*TimeSeries { + if m != nil { + return m.TimeSeries + } + return nil +} + +// Describes the result of a failed request to write data to a time series. +type CreateTimeSeriesError struct { + // The time series, including the `Metric`, `MonitoredResource`, + // and `Point`s (including timestamp and value) that resulted + // in the error. This field provides all of the context that + // would be needed to retry the operation. + TimeSeries *TimeSeries `protobuf:"bytes,1,opt,name=time_series,json=timeSeries" json:"time_series,omitempty"` + // The status of the requested write operation. + Status *google_rpc.Status `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"` +} + +func (m *CreateTimeSeriesError) Reset() { *m = CreateTimeSeriesError{} } +func (m *CreateTimeSeriesError) String() string { return proto.CompactTextString(m) } +func (*CreateTimeSeriesError) ProtoMessage() {} +func (*CreateTimeSeriesError) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{11} } + +func (m *CreateTimeSeriesError) GetTimeSeries() *TimeSeries { + if m != nil { + return m.TimeSeries + } + return nil +} + +func (m *CreateTimeSeriesError) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func init() { + proto.RegisterType((*ListMonitoredResourceDescriptorsRequest)(nil), "google.monitoring.v3.ListMonitoredResourceDescriptorsRequest") + proto.RegisterType((*ListMonitoredResourceDescriptorsResponse)(nil), "google.monitoring.v3.ListMonitoredResourceDescriptorsResponse") + proto.RegisterType((*GetMonitoredResourceDescriptorRequest)(nil), "google.monitoring.v3.GetMonitoredResourceDescriptorRequest") + proto.RegisterType((*ListMetricDescriptorsRequest)(nil), "google.monitoring.v3.ListMetricDescriptorsRequest") + proto.RegisterType((*ListMetricDescriptorsResponse)(nil), "google.monitoring.v3.ListMetricDescriptorsResponse") + proto.RegisterType((*GetMetricDescriptorRequest)(nil), "google.monitoring.v3.GetMetricDescriptorRequest") + proto.RegisterType((*CreateMetricDescriptorRequest)(nil), "google.monitoring.v3.CreateMetricDescriptorRequest") + proto.RegisterType((*DeleteMetricDescriptorRequest)(nil), "google.monitoring.v3.DeleteMetricDescriptorRequest") + proto.RegisterType((*ListTimeSeriesRequest)(nil), "google.monitoring.v3.ListTimeSeriesRequest") + proto.RegisterType((*ListTimeSeriesResponse)(nil), "google.monitoring.v3.ListTimeSeriesResponse") + proto.RegisterType((*CreateTimeSeriesRequest)(nil), "google.monitoring.v3.CreateTimeSeriesRequest") + proto.RegisterType((*CreateTimeSeriesError)(nil), "google.monitoring.v3.CreateTimeSeriesError") + proto.RegisterEnum("google.monitoring.v3.ListTimeSeriesRequest_TimeSeriesView", ListTimeSeriesRequest_TimeSeriesView_name, ListTimeSeriesRequest_TimeSeriesView_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for MetricService service + +type MetricServiceClient interface { + // Lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account. + ListMonitoredResourceDescriptors(ctx context.Context, in *ListMonitoredResourceDescriptorsRequest, opts ...grpc.CallOption) (*ListMonitoredResourceDescriptorsResponse, error) + // Gets a single monitored resource descriptor. This method does not require a Stackdriver account. + GetMonitoredResourceDescriptor(ctx context.Context, in *GetMonitoredResourceDescriptorRequest, opts ...grpc.CallOption) (*google_api4.MonitoredResourceDescriptor, error) + // Lists metric descriptors that match a filter. This method does not require a Stackdriver account. + ListMetricDescriptors(ctx context.Context, in *ListMetricDescriptorsRequest, opts ...grpc.CallOption) (*ListMetricDescriptorsResponse, error) + // Gets a single metric descriptor. This method does not require a Stackdriver account. + GetMetricDescriptor(ctx context.Context, in *GetMetricDescriptorRequest, opts ...grpc.CallOption) (*google_api5.MetricDescriptor, error) + // Creates a new metric descriptor. + // User-created metric descriptors define + // [custom metrics](/monitoring/custom-metrics). + CreateMetricDescriptor(ctx context.Context, in *CreateMetricDescriptorRequest, opts ...grpc.CallOption) (*google_api5.MetricDescriptor, error) + // Deletes a metric descriptor. Only user-created + // [custom metrics](/monitoring/custom-metrics) can be deleted. + DeleteMetricDescriptor(ctx context.Context, in *DeleteMetricDescriptorRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Lists time series that match a filter. This method does not require a Stackdriver account. + ListTimeSeries(ctx context.Context, in *ListTimeSeriesRequest, opts ...grpc.CallOption) (*ListTimeSeriesResponse, error) + // Creates or adds data to one or more time series. + // The response is empty if all time series in the request were written. + // If any time series could not be written, a corresponding failure message is + // included in the error response. + CreateTimeSeries(ctx context.Context, in *CreateTimeSeriesRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) +} + +type metricServiceClient struct { + cc *grpc.ClientConn +} + +func NewMetricServiceClient(cc *grpc.ClientConn) MetricServiceClient { + return &metricServiceClient{cc} +} + +func (c *metricServiceClient) ListMonitoredResourceDescriptors(ctx context.Context, in *ListMonitoredResourceDescriptorsRequest, opts ...grpc.CallOption) (*ListMonitoredResourceDescriptorsResponse, error) { + out := new(ListMonitoredResourceDescriptorsResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/ListMonitoredResourceDescriptors", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricServiceClient) GetMonitoredResourceDescriptor(ctx context.Context, in *GetMonitoredResourceDescriptorRequest, opts ...grpc.CallOption) (*google_api4.MonitoredResourceDescriptor, error) { + out := new(google_api4.MonitoredResourceDescriptor) + err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/GetMonitoredResourceDescriptor", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricServiceClient) ListMetricDescriptors(ctx context.Context, in *ListMetricDescriptorsRequest, opts ...grpc.CallOption) (*ListMetricDescriptorsResponse, error) { + out := new(ListMetricDescriptorsResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/ListMetricDescriptors", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricServiceClient) GetMetricDescriptor(ctx context.Context, in *GetMetricDescriptorRequest, opts ...grpc.CallOption) (*google_api5.MetricDescriptor, error) { + out := new(google_api5.MetricDescriptor) + err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/GetMetricDescriptor", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricServiceClient) CreateMetricDescriptor(ctx context.Context, in *CreateMetricDescriptorRequest, opts ...grpc.CallOption) (*google_api5.MetricDescriptor, error) { + out := new(google_api5.MetricDescriptor) + err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/CreateMetricDescriptor", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricServiceClient) DeleteMetricDescriptor(ctx context.Context, in *DeleteMetricDescriptorRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/DeleteMetricDescriptor", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricServiceClient) ListTimeSeries(ctx context.Context, in *ListTimeSeriesRequest, opts ...grpc.CallOption) (*ListTimeSeriesResponse, error) { + out := new(ListTimeSeriesResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/ListTimeSeries", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metricServiceClient) CreateTimeSeries(ctx context.Context, in *CreateTimeSeriesRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/CreateTimeSeries", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for MetricService service + +type MetricServiceServer interface { + // Lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account. + ListMonitoredResourceDescriptors(context.Context, *ListMonitoredResourceDescriptorsRequest) (*ListMonitoredResourceDescriptorsResponse, error) + // Gets a single monitored resource descriptor. This method does not require a Stackdriver account. + GetMonitoredResourceDescriptor(context.Context, *GetMonitoredResourceDescriptorRequest) (*google_api4.MonitoredResourceDescriptor, error) + // Lists metric descriptors that match a filter. This method does not require a Stackdriver account. + ListMetricDescriptors(context.Context, *ListMetricDescriptorsRequest) (*ListMetricDescriptorsResponse, error) + // Gets a single metric descriptor. This method does not require a Stackdriver account. + GetMetricDescriptor(context.Context, *GetMetricDescriptorRequest) (*google_api5.MetricDescriptor, error) + // Creates a new metric descriptor. + // User-created metric descriptors define + // [custom metrics](/monitoring/custom-metrics). + CreateMetricDescriptor(context.Context, *CreateMetricDescriptorRequest) (*google_api5.MetricDescriptor, error) + // Deletes a metric descriptor. Only user-created + // [custom metrics](/monitoring/custom-metrics) can be deleted. + DeleteMetricDescriptor(context.Context, *DeleteMetricDescriptorRequest) (*google_protobuf4.Empty, error) + // Lists time series that match a filter. This method does not require a Stackdriver account. + ListTimeSeries(context.Context, *ListTimeSeriesRequest) (*ListTimeSeriesResponse, error) + // Creates or adds data to one or more time series. + // The response is empty if all time series in the request were written. + // If any time series could not be written, a corresponding failure message is + // included in the error response. + CreateTimeSeries(context.Context, *CreateTimeSeriesRequest) (*google_protobuf4.Empty, error) +} + +func RegisterMetricServiceServer(s *grpc.Server, srv MetricServiceServer) { + s.RegisterService(&_MetricService_serviceDesc, srv) +} + +func _MetricService_ListMonitoredResourceDescriptors_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListMonitoredResourceDescriptorsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricServiceServer).ListMonitoredResourceDescriptors(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.MetricService/ListMonitoredResourceDescriptors", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricServiceServer).ListMonitoredResourceDescriptors(ctx, req.(*ListMonitoredResourceDescriptorsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricService_GetMonitoredResourceDescriptor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMonitoredResourceDescriptorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricServiceServer).GetMonitoredResourceDescriptor(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.MetricService/GetMonitoredResourceDescriptor", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricServiceServer).GetMonitoredResourceDescriptor(ctx, req.(*GetMonitoredResourceDescriptorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricService_ListMetricDescriptors_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListMetricDescriptorsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricServiceServer).ListMetricDescriptors(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.MetricService/ListMetricDescriptors", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricServiceServer).ListMetricDescriptors(ctx, req.(*ListMetricDescriptorsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricService_GetMetricDescriptor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMetricDescriptorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricServiceServer).GetMetricDescriptor(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.MetricService/GetMetricDescriptor", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricServiceServer).GetMetricDescriptor(ctx, req.(*GetMetricDescriptorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricService_CreateMetricDescriptor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateMetricDescriptorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricServiceServer).CreateMetricDescriptor(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.MetricService/CreateMetricDescriptor", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricServiceServer).CreateMetricDescriptor(ctx, req.(*CreateMetricDescriptorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricService_DeleteMetricDescriptor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteMetricDescriptorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricServiceServer).DeleteMetricDescriptor(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.MetricService/DeleteMetricDescriptor", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricServiceServer).DeleteMetricDescriptor(ctx, req.(*DeleteMetricDescriptorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricService_ListTimeSeries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTimeSeriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricServiceServer).ListTimeSeries(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.MetricService/ListTimeSeries", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricServiceServer).ListTimeSeries(ctx, req.(*ListTimeSeriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MetricService_CreateTimeSeries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTimeSeriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricServiceServer).CreateTimeSeries(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.MetricService/CreateTimeSeries", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricServiceServer).CreateTimeSeries(ctx, req.(*CreateTimeSeriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _MetricService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.monitoring.v3.MetricService", + HandlerType: (*MetricServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListMonitoredResourceDescriptors", + Handler: _MetricService_ListMonitoredResourceDescriptors_Handler, + }, + { + MethodName: "GetMonitoredResourceDescriptor", + Handler: _MetricService_GetMonitoredResourceDescriptor_Handler, + }, + { + MethodName: "ListMetricDescriptors", + Handler: _MetricService_ListMetricDescriptors_Handler, + }, + { + MethodName: "GetMetricDescriptor", + Handler: _MetricService_GetMetricDescriptor_Handler, + }, + { + MethodName: "CreateMetricDescriptor", + Handler: _MetricService_CreateMetricDescriptor_Handler, + }, + { + MethodName: "DeleteMetricDescriptor", + Handler: _MetricService_DeleteMetricDescriptor_Handler, + }, + { + MethodName: "ListTimeSeries", + Handler: _MetricService_ListTimeSeries_Handler, + }, + { + MethodName: "CreateTimeSeries", + Handler: _MetricService_CreateTimeSeries_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/monitoring/v3/metric_service.proto", +} + +func init() { proto.RegisterFile("google/monitoring/v3/metric_service.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 1001 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x4f, 0x73, 0xdb, 0x44, + 0x14, 0x67, 0x93, 0x34, 0x71, 0x9e, 0xa7, 0x21, 0xdd, 0xb6, 0xae, 0x51, 0x13, 0xc6, 0x15, 0x53, + 0xe2, 0xba, 0x45, 0xea, 0xd8, 0x1d, 0x0e, 0x49, 0x9b, 0x99, 0xfc, 0xa3, 0x74, 0x08, 0x4c, 0x46, + 0x2e, 0x3d, 0xf4, 0xe2, 0x51, 0x9c, 0x57, 0xcd, 0x82, 0xa5, 0x15, 0xab, 0xb5, 0x4b, 0xca, 0x84, + 0x03, 0xcc, 0xe4, 0xc6, 0x81, 0x01, 0x66, 0xe0, 0x2b, 0x70, 0x80, 0xe1, 0x3b, 0xf0, 0x0d, 0x38, + 0x73, 0xe3, 0x2b, 0x70, 0x67, 0xb4, 0x92, 0x63, 0x5b, 0x96, 0x64, 0x9b, 0x4b, 0x6f, 0x96, 0xf6, + 0xfd, 0xf9, 0xbd, 0xdf, 0x7b, 0xfb, 0x7e, 0x32, 0xdc, 0x71, 0x38, 0x77, 0x3a, 0x68, 0xba, 0xdc, + 0x63, 0x92, 0x0b, 0xe6, 0x39, 0x66, 0xaf, 0x61, 0xba, 0x28, 0x05, 0x6b, 0xb7, 0x02, 0x14, 0x3d, + 0xd6, 0x46, 0xc3, 0x17, 0x5c, 0x72, 0x7a, 0x2d, 0x32, 0x35, 0x06, 0xa6, 0x46, 0xaf, 0xa1, 0xad, + 0xc5, 0x01, 0x6c, 0x9f, 0x99, 0xb6, 0xe7, 0x71, 0x69, 0x4b, 0xc6, 0xbd, 0x20, 0xf2, 0xd1, 0x6e, + 0x0c, 0x9d, 0x46, 0x41, 0xe3, 0x83, 0x77, 0x86, 0x0f, 0xa2, 0x80, 0x78, 0xd2, 0x12, 0x18, 0xf0, + 0xae, 0xe8, 0x67, 0xd4, 0x6e, 0xa5, 0x82, 0x6b, 0x73, 0xd7, 0xe5, 0x5e, 0xae, 0xc9, 0x48, 0xaa, + 0x9b, 0xb1, 0x89, 0x7a, 0x3a, 0xee, 0xbe, 0x30, 0xd1, 0xf5, 0xe5, 0x69, 0x02, 0xa0, 0xf0, 0xdb, + 0x66, 0x20, 0x6d, 0xd9, 0x8d, 0x91, 0xeb, 0xdf, 0x13, 0xd8, 0x38, 0x64, 0x81, 0xfc, 0xb8, 0x0f, + 0xce, 0x8a, 0xb1, 0xed, 0x63, 0xd0, 0x16, 0xcc, 0x97, 0x5c, 0x04, 0x16, 0x7e, 0xd1, 0xc5, 0x40, + 0x52, 0x0a, 0x0b, 0x9e, 0xed, 0x62, 0xf9, 0x52, 0x85, 0x54, 0x97, 0x2d, 0xf5, 0x9b, 0x96, 0x60, + 0xf1, 0x05, 0xeb, 0x48, 0x14, 0xe5, 0x39, 0xf5, 0x36, 0x7e, 0xa2, 0x37, 0x61, 0xd9, 0xb7, 0x1d, + 0x6c, 0x05, 0xec, 0x15, 0x96, 0xe7, 0x2b, 0xa4, 0x7a, 0xc9, 0x2a, 0x84, 0x2f, 0x9a, 0xec, 0x15, + 0xd2, 0x75, 0x00, 0x75, 0x28, 0xf9, 0xe7, 0xe8, 0x95, 0x17, 0x94, 0xa3, 0x32, 0x7f, 0x1a, 0xbe, + 0xd0, 0x7f, 0x23, 0x50, 0x9d, 0x8c, 0x29, 0xf0, 0xb9, 0x17, 0x20, 0x7d, 0x0e, 0xd7, 0xfa, 0x74, + 0xb6, 0x4e, 0x06, 0xe7, 0x65, 0x52, 0x99, 0xaf, 0x16, 0xeb, 0x1b, 0x46, 0xdc, 0x4d, 0xdb, 0x67, + 0x46, 0x4e, 0x3c, 0xeb, 0xaa, 0x18, 0xcf, 0x41, 0xdf, 0x85, 0x37, 0x3d, 0xfc, 0x52, 0xb6, 0x86, + 0xc0, 0x46, 0x55, 0x5e, 0x0e, 0x5f, 0x1f, 0x5d, 0x00, 0xde, 0x82, 0xdb, 0x8f, 0x31, 0x0f, 0x6e, + 0x92, 0xc1, 0xf9, 0x01, 0x83, 0xfa, 0x39, 0x81, 0x35, 0x55, 0xad, 0x6a, 0xe6, 0x6b, 0xa4, 0xfd, + 0x47, 0x02, 0xeb, 0x19, 0x40, 0x62, 0xae, 0x3f, 0x02, 0x1a, 0x5f, 0x99, 0x71, 0xa6, 0xd7, 0x46, + 0x98, 0x4e, 0x84, 0xb0, 0xae, 0xb8, 0xc9, 0xa0, 0x53, 0x93, 0x7b, 0x1f, 0xb4, 0x90, 0xdc, 0x64, + 0xc4, 0x1c, 0x46, 0xbf, 0x86, 0xf5, 0x3d, 0x81, 0xb6, 0xc4, 0x19, 0x9c, 0xe8, 0x13, 0xb8, 0x32, + 0x56, 0x9b, 0x02, 0x34, 0xa9, 0xb4, 0xd5, 0x64, 0x69, 0x7a, 0x03, 0xd6, 0xf7, 0xb1, 0x83, 0x33, + 0xe5, 0xd7, 0x7f, 0x9e, 0x87, 0xeb, 0x21, 0xfb, 0x4f, 0x99, 0x8b, 0x4d, 0x14, 0x0c, 0xc7, 0xfa, + 0x0f, 0x53, 0xf4, 0x7f, 0x1b, 0x0a, 0xcc, 0x93, 0x28, 0x7a, 0x76, 0x47, 0x35, 0xb8, 0x58, 0xd7, + 0x8d, 0xb4, 0x7d, 0x66, 0x84, 0x69, 0x9e, 0xc4, 0x96, 0xd6, 0x85, 0x0f, 0xdd, 0x83, 0xa2, 0xed, + 0x38, 0x02, 0x1d, 0xb5, 0xde, 0xd4, 0xc8, 0x15, 0xeb, 0xb7, 0xd2, 0x43, 0xec, 0x0c, 0x0c, 0xad, + 0x61, 0x2f, 0xfa, 0x16, 0x14, 0xb8, 0x38, 0x41, 0xd1, 0x3a, 0x3e, 0x2d, 0x2f, 0x2a, 0x78, 0x4b, + 0xea, 0x79, 0xf7, 0x94, 0x7e, 0x02, 0x0b, 0x3d, 0x86, 0x2f, 0xcb, 0x4b, 0x15, 0x52, 0x5d, 0xa9, + 0x6f, 0xa6, 0x07, 0x4e, 0xa5, 0xc1, 0x18, 0xbc, 0x79, 0xc6, 0xf0, 0xa5, 0xa5, 0xe2, 0x8c, 0xce, + 0x7b, 0x21, 0x77, 0xde, 0x97, 0x93, 0xf3, 0xbe, 0x01, 0x2b, 0xa3, 0x31, 0x69, 0x01, 0x16, 0x3e, + 0xf8, 0xf4, 0xf0, 0x70, 0xf5, 0x0d, 0x5a, 0x84, 0xa5, 0x0f, 0x0f, 0x76, 0xf6, 0x0f, 0xac, 0xe6, + 0x2a, 0xd1, 0xbf, 0x25, 0x50, 0x4a, 0x62, 0x8a, 0x6f, 0xc4, 0x0e, 0x14, 0x25, 0x73, 0x31, 0x94, + 0x10, 0x86, 0xfd, 0xab, 0x50, 0xc9, 0xa6, 0x3c, 0x76, 0x07, 0x79, 0xf1, 0x7b, 0xea, 0x7b, 0xe0, + 0xc3, 0x8d, 0x68, 0xaa, 0xb3, 0x27, 0x64, 0x78, 0x9e, 0x13, 0xc8, 0xe6, 0x66, 0x47, 0x16, 0x6e, + 0xa6, 0xeb, 0xc9, 0x94, 0x07, 0x42, 0x70, 0x31, 0x5e, 0x36, 0x99, 0xb9, 0xec, 0x1a, 0x2c, 0x46, + 0x42, 0x14, 0x5f, 0x32, 0xda, 0xf7, 0x16, 0x7e, 0xdb, 0x68, 0xaa, 0x13, 0x2b, 0xb6, 0xa8, 0xff, + 0x0b, 0x70, 0x39, 0xba, 0x4b, 0xcd, 0x48, 0xaa, 0xe9, 0xdf, 0x04, 0x2a, 0x93, 0x24, 0x82, 0x3e, + 0xca, 0x1e, 0xaf, 0x29, 0xe4, 0x4e, 0xdb, 0xfe, 0xbf, 0xee, 0xd1, 0x6c, 0xe8, 0x9b, 0xdf, 0xfc, + 0xf5, 0xcf, 0x0f, 0x73, 0x0f, 0x68, 0x3d, 0x94, 0xea, 0xaf, 0xc2, 0xa6, 0x3c, 0xf2, 0x05, 0xff, + 0x0c, 0xdb, 0x32, 0x30, 0x6b, 0x67, 0x83, 0xcf, 0x81, 0x34, 0xe8, 0x7f, 0x12, 0x78, 0x3b, 0x5f, + 0x52, 0xe8, 0x56, 0x3a, 0xbc, 0xa9, 0x84, 0x48, 0x9b, 0x56, 0x17, 0xf5, 0x87, 0xaa, 0x88, 0xf7, + 0xe9, 0x83, 0xb4, 0x22, 0x72, 0x6b, 0x30, 0x6b, 0x67, 0xf4, 0x0f, 0x12, 0x2d, 0xb5, 0x31, 0x49, + 0xa1, 0xf5, 0x1c, 0x72, 0x33, 0x84, 0x50, 0x6b, 0xcc, 0xe4, 0x13, 0x77, 0xc1, 0x54, 0x05, 0xdc, + 0xa1, 0x1b, 0x19, 0x5d, 0x18, 0x43, 0xf6, 0x0b, 0x81, 0xab, 0x29, 0x82, 0x43, 0xef, 0x67, 0xf3, + 0x9d, 0xbe, 0xe6, 0xb5, 0x5c, 0xdd, 0xd0, 0xeb, 0x0a, 0xd8, 0x3d, 0x5a, 0x4b, 0x67, 0x36, 0x89, + 0xcb, 0xac, 0xd5, 0xce, 0xe8, 0xef, 0x04, 0x4a, 0xe9, 0xd2, 0x46, 0x33, 0xc8, 0xc9, 0x15, 0xc2, + 0x09, 0x08, 0x77, 0x15, 0xc2, 0x87, 0xfa, 0xb4, 0xd4, 0x6d, 0x8e, 0x2b, 0x68, 0xc8, 0x66, 0x29, + 0x5d, 0x0c, 0xb3, 0x10, 0xe7, 0x4a, 0xa7, 0x56, 0xea, 0x3b, 0xf5, 0x3f, 0x73, 0x8d, 0x83, 0xf0, + 0x33, 0xb7, 0xcf, 0x66, 0x6d, 0x16, 0x36, 0x7f, 0x22, 0xb0, 0x32, 0xba, 0xd7, 0xe9, 0xdd, 0x19, + 0x14, 0x49, 0xbb, 0x37, 0x9d, 0x71, 0x3c, 0x88, 0x55, 0x85, 0x50, 0xa7, 0x95, 0x74, 0x36, 0x87, + 0x56, 0xe3, 0x39, 0x81, 0xd5, 0xe4, 0xde, 0xa5, 0xef, 0xe5, 0xf5, 0x77, 0x1c, 0x5b, 0x16, 0x4f, + 0x77, 0x15, 0x8a, 0xdb, 0xfa, 0x44, 0x14, 0x9b, 0xa4, 0xb6, 0xfb, 0x1d, 0x81, 0x72, 0x9b, 0xbb, + 0xa9, 0x99, 0x77, 0xe9, 0xc8, 0x46, 0x3e, 0x0a, 0xd3, 0x1c, 0x91, 0xe7, 0xdb, 0xb1, 0xad, 0xc3, + 0x3b, 0xb6, 0xe7, 0x18, 0x5c, 0x38, 0xa6, 0x83, 0x9e, 0x02, 0x61, 0x46, 0x47, 0xb6, 0xcf, 0x82, + 0xd1, 0xff, 0x31, 0x5b, 0x83, 0xa7, 0x5f, 0xe7, 0xb4, 0xc7, 0x51, 0x80, 0xbd, 0x0e, 0xef, 0x9e, + 0xf4, 0x57, 0x53, 0x98, 0xf2, 0x59, 0xe3, 0x78, 0x51, 0xc5, 0x69, 0xfc, 0x17, 0x00, 0x00, 0xff, + 0xff, 0x3c, 0x75, 0xce, 0xa1, 0xce, 0x0d, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/dlp.pb.go b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/dlp.pb.go new file mode 100644 index 0000000..23f8ca0 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/dlp.pb.go @@ -0,0 +1,1374 @@ +// Code generated by protoc-gen-go. +// source: google/privacy/dlp/v2beta1/dlp.proto +// DO NOT EDIT! + +/* +Package dlp is a generated protocol buffer package. + +It is generated from these files: + google/privacy/dlp/v2beta1/dlp.proto + google/privacy/dlp/v2beta1/storage.proto + +It has these top-level messages: + InspectConfig + ContentItem + InspectResult + Finding + Location + Range + ImageLocation + RedactContentRequest + RedactContentResponse + InspectContentRequest + InspectContentResponse + CreateInspectOperationRequest + InfoTypeStatistics + InspectOperationMetadata + InspectOperationResult + ListInspectFindingsRequest + ListInspectFindingsResponse + InfoTypeDescription + ListInfoTypesRequest + ListInfoTypesResponse + CategoryDescription + ListRootCategoriesRequest + ListRootCategoriesResponse + InfoType + FieldId + PartitionId + KindExpression + PropertyReference + Projection + DatastoreOptions + CloudStorageOptions + StorageConfig + CloudStorageKey + DatastoreKey + Key + RecordKey +*/ +package dlp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Categorization of results based on how likely they are to represent a match, +// based on the number of elements they contain which imply a match. +type Likelihood int32 + +const ( + // Default value; information with all likelihoods will be included. + Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0 + // Few matching elements. + Likelihood_VERY_UNLIKELY Likelihood = 1 + Likelihood_UNLIKELY Likelihood = 2 + // Some matching elements. + Likelihood_POSSIBLE Likelihood = 3 + Likelihood_LIKELY Likelihood = 4 + // Many matching elements. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "LIKELIHOOD_UNSPECIFIED", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "LIKELIHOOD_UNSPECIFIED": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Configuration description of the scanning process. +// When used with redactContent only info_types and min_likelihood are currently +// used. +type InspectConfig struct { + // Restrict what info_types to look for. The values must correspond to + // InfoType values returned by ListInfoTypes or found in documentation. + // Empty info_types runs all enabled detectors. + InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` + // Only return findings equal or above this threshold. + MinLikelihood Likelihood `protobuf:"varint,2,opt,name=min_likelihood,json=minLikelihood,enum=google.privacy.dlp.v2beta1.Likelihood" json:"min_likelihood,omitempty"` + // Limit the number of findings per content item. + MaxFindings int32 `protobuf:"varint,3,opt,name=max_findings,json=maxFindings" json:"max_findings,omitempty"` + // When true, a contextual quote from the data that triggered a finding will + // be included in the response; see Finding.quote. + IncludeQuote bool `protobuf:"varint,4,opt,name=include_quote,json=includeQuote" json:"include_quote,omitempty"` + // When true, exclude type information of the findings. + ExcludeTypes bool `protobuf:"varint,6,opt,name=exclude_types,json=excludeTypes" json:"exclude_types,omitempty"` +} + +func (m *InspectConfig) Reset() { *m = InspectConfig{} } +func (m *InspectConfig) String() string { return proto.CompactTextString(m) } +func (*InspectConfig) ProtoMessage() {} +func (*InspectConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *InspectConfig) GetInfoTypes() []*InfoType { + if m != nil { + return m.InfoTypes + } + return nil +} + +func (m *InspectConfig) GetMinLikelihood() Likelihood { + if m != nil { + return m.MinLikelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *InspectConfig) GetMaxFindings() int32 { + if m != nil { + return m.MaxFindings + } + return 0 +} + +func (m *InspectConfig) GetIncludeQuote() bool { + if m != nil { + return m.IncludeQuote + } + return false +} + +func (m *InspectConfig) GetExcludeTypes() bool { + if m != nil { + return m.ExcludeTypes + } + return false +} + +// Container structure for the content to inspect. +type ContentItem struct { + // Type of the content, as defined in Content-Type HTTP header. + // Supported types are: all "text" types, octet streams, PNG images, + // JPEG images. + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + // Data of the item either in the byte array or UTF-8 string form. + // + // Types that are valid to be assigned to DataItem: + // *ContentItem_Data + // *ContentItem_Value + DataItem isContentItem_DataItem `protobuf_oneof:"data_item"` +} + +func (m *ContentItem) Reset() { *m = ContentItem{} } +func (m *ContentItem) String() string { return proto.CompactTextString(m) } +func (*ContentItem) ProtoMessage() {} +func (*ContentItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isContentItem_DataItem interface { + isContentItem_DataItem() +} + +type ContentItem_Data struct { + Data []byte `protobuf:"bytes,2,opt,name=data,proto3,oneof"` +} +type ContentItem_Value struct { + Value string `protobuf:"bytes,3,opt,name=value,oneof"` +} + +func (*ContentItem_Data) isContentItem_DataItem() {} +func (*ContentItem_Value) isContentItem_DataItem() {} + +func (m *ContentItem) GetDataItem() isContentItem_DataItem { + if m != nil { + return m.DataItem + } + return nil +} + +func (m *ContentItem) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *ContentItem) GetData() []byte { + if x, ok := m.GetDataItem().(*ContentItem_Data); ok { + return x.Data + } + return nil +} + +func (m *ContentItem) GetValue() string { + if x, ok := m.GetDataItem().(*ContentItem_Value); ok { + return x.Value + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ContentItem) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ContentItem_OneofMarshaler, _ContentItem_OneofUnmarshaler, _ContentItem_OneofSizer, []interface{}{ + (*ContentItem_Data)(nil), + (*ContentItem_Value)(nil), + } +} + +func _ContentItem_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ContentItem) + // data_item + switch x := m.DataItem.(type) { + case *ContentItem_Data: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Data) + case *ContentItem_Value: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Value) + case nil: + default: + return fmt.Errorf("ContentItem.DataItem has unexpected type %T", x) + } + return nil +} + +func _ContentItem_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ContentItem) + switch tag { + case 2: // data_item.data + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.DataItem = &ContentItem_Data{x} + return true, err + case 3: // data_item.value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.DataItem = &ContentItem_Value{x} + return true, err + default: + return false, nil + } +} + +func _ContentItem_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ContentItem) + // data_item + switch x := m.DataItem.(type) { + case *ContentItem_Data: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Data))) + n += len(x.Data) + case *ContentItem_Value: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Value))) + n += len(x.Value) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// All the findings for a single scanned item. +type InspectResult struct { + // List of findings for an item. + Findings []*Finding `protobuf:"bytes,1,rep,name=findings" json:"findings,omitempty"` + // If true, then this item might have more findings than were returned, + // and the findings returned are an arbitrary subset of all findings. + // The findings list might be truncated because the input items were too + // large, or because the server reached the maximum amount of resources + // allowed for a single API call. For best results, divide the input into + // smaller batches. + FindingsTruncated bool `protobuf:"varint,2,opt,name=findings_truncated,json=findingsTruncated" json:"findings_truncated,omitempty"` +} + +func (m *InspectResult) Reset() { *m = InspectResult{} } +func (m *InspectResult) String() string { return proto.CompactTextString(m) } +func (*InspectResult) ProtoMessage() {} +func (*InspectResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *InspectResult) GetFindings() []*Finding { + if m != nil { + return m.Findings + } + return nil +} + +func (m *InspectResult) GetFindingsTruncated() bool { + if m != nil { + return m.FindingsTruncated + } + return false +} + +// Container structure describing a single finding within a string or image. +type Finding struct { + // The specific string that may be potentially sensitive info. + Quote string `protobuf:"bytes,1,opt,name=quote" json:"quote,omitempty"` + // The specific type of info the string might be. + InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Estimate of how likely it is that the info_type is correct. + Likelihood Likelihood `protobuf:"varint,3,opt,name=likelihood,enum=google.privacy.dlp.v2beta1.Likelihood" json:"likelihood,omitempty"` + // Location of the info found. + Location *Location `protobuf:"bytes,4,opt,name=location" json:"location,omitempty"` + // Timestamp when finding was detected. + CreateTime *google_protobuf3.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` +} + +func (m *Finding) Reset() { *m = Finding{} } +func (m *Finding) String() string { return proto.CompactTextString(m) } +func (*Finding) ProtoMessage() {} +func (*Finding) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Finding) GetQuote() string { + if m != nil { + return m.Quote + } + return "" +} + +func (m *Finding) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *Finding) GetLikelihood() Likelihood { + if m != nil { + return m.Likelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *Finding) GetLocation() *Location { + if m != nil { + return m.Location + } + return nil +} + +func (m *Finding) GetCreateTime() *google_protobuf3.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +// Specifies the location of a finding within its source item. +type Location struct { + // Zero-based byte offsets within a content item. + ByteRange *Range `protobuf:"bytes,1,opt,name=byte_range,json=byteRange" json:"byte_range,omitempty"` + // Character offsets within a content item, included when content type + // is a text. Default charset assumed to be UTF-8. + CodepointRange *Range `protobuf:"bytes,2,opt,name=codepoint_range,json=codepointRange" json:"codepoint_range,omitempty"` + // Location within an image's pixels. + ImageBoxes []*ImageLocation `protobuf:"bytes,3,rep,name=image_boxes,json=imageBoxes" json:"image_boxes,omitempty"` + // Key of the finding. + RecordKey *RecordKey `protobuf:"bytes,4,opt,name=record_key,json=recordKey" json:"record_key,omitempty"` + // Field id of the field containing the finding. + FieldId *FieldId `protobuf:"bytes,5,opt,name=field_id,json=fieldId" json:"field_id,omitempty"` +} + +func (m *Location) Reset() { *m = Location{} } +func (m *Location) String() string { return proto.CompactTextString(m) } +func (*Location) ProtoMessage() {} +func (*Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *Location) GetByteRange() *Range { + if m != nil { + return m.ByteRange + } + return nil +} + +func (m *Location) GetCodepointRange() *Range { + if m != nil { + return m.CodepointRange + } + return nil +} + +func (m *Location) GetImageBoxes() []*ImageLocation { + if m != nil { + return m.ImageBoxes + } + return nil +} + +func (m *Location) GetRecordKey() *RecordKey { + if m != nil { + return m.RecordKey + } + return nil +} + +func (m *Location) GetFieldId() *FieldId { + if m != nil { + return m.FieldId + } + return nil +} + +// Generic half-open interval [start, end) +type Range struct { + // Index of the first character of the range (inclusive). + Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + // Index of the last character of the range (exclusive). + End int64 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` +} + +func (m *Range) Reset() { *m = Range{} } +func (m *Range) String() string { return proto.CompactTextString(m) } +func (*Range) ProtoMessage() {} +func (*Range) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *Range) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Range) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +// Bounding box encompassing detected text within an image. +type ImageLocation struct { + // Top coordinate of the bounding box. (0,0) is upper left. + Top int32 `protobuf:"varint,1,opt,name=top" json:"top,omitempty"` + // Left coordinate of the bounding box. (0,0) is upper left. + Left int32 `protobuf:"varint,2,opt,name=left" json:"left,omitempty"` + // Width of the bounding box in pixels. + Width int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + // Height of the bounding box in pixels. + Height int32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"` +} + +func (m *ImageLocation) Reset() { *m = ImageLocation{} } +func (m *ImageLocation) String() string { return proto.CompactTextString(m) } +func (*ImageLocation) ProtoMessage() {} +func (*ImageLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ImageLocation) GetTop() int32 { + if m != nil { + return m.Top + } + return 0 +} + +func (m *ImageLocation) GetLeft() int32 { + if m != nil { + return m.Left + } + return 0 +} + +func (m *ImageLocation) GetWidth() int32 { + if m != nil { + return m.Width + } + return 0 +} + +func (m *ImageLocation) GetHeight() int32 { + if m != nil { + return m.Height + } + return 0 +} + +// Request to search for potentially sensitive info in a list of items +// and replace it with a default or provided content. +type RedactContentRequest struct { + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,1,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The list of items to inspect. Up to 100 are allowed per request. + Items []*ContentItem `protobuf:"bytes,2,rep,name=items" json:"items,omitempty"` + // The strings to replace findings with. Must specify at least one. + ReplaceConfigs []*RedactContentRequest_ReplaceConfig `protobuf:"bytes,3,rep,name=replace_configs,json=replaceConfigs" json:"replace_configs,omitempty"` +} + +func (m *RedactContentRequest) Reset() { *m = RedactContentRequest{} } +func (m *RedactContentRequest) String() string { return proto.CompactTextString(m) } +func (*RedactContentRequest) ProtoMessage() {} +func (*RedactContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *RedactContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *RedactContentRequest) GetItems() []*ContentItem { + if m != nil { + return m.Items + } + return nil +} + +func (m *RedactContentRequest) GetReplaceConfigs() []*RedactContentRequest_ReplaceConfig { + if m != nil { + return m.ReplaceConfigs + } + return nil +} + +type RedactContentRequest_ReplaceConfig struct { + // Type of information to replace. Only one ReplaceConfig per info_type + // should be provided. If ReplaceConfig does not have an info_type, we'll + // match it against all info_types that are found but not specified in + // another ReplaceConfig. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Content replacing sensitive information of given type. Max 256 chars. + ReplaceWith string `protobuf:"bytes,2,opt,name=replace_with,json=replaceWith" json:"replace_with,omitempty"` +} + +func (m *RedactContentRequest_ReplaceConfig) Reset() { *m = RedactContentRequest_ReplaceConfig{} } +func (m *RedactContentRequest_ReplaceConfig) String() string { return proto.CompactTextString(m) } +func (*RedactContentRequest_ReplaceConfig) ProtoMessage() {} +func (*RedactContentRequest_ReplaceConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{7, 0} +} + +func (m *RedactContentRequest_ReplaceConfig) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *RedactContentRequest_ReplaceConfig) GetReplaceWith() string { + if m != nil { + return m.ReplaceWith + } + return "" +} + +// Results of deidentifying a list of items. +type RedactContentResponse struct { + // The redacted content. + Items []*ContentItem `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` +} + +func (m *RedactContentResponse) Reset() { *m = RedactContentResponse{} } +func (m *RedactContentResponse) String() string { return proto.CompactTextString(m) } +func (*RedactContentResponse) ProtoMessage() {} +func (*RedactContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *RedactContentResponse) GetItems() []*ContentItem { + if m != nil { + return m.Items + } + return nil +} + +// Request to search for potentially sensitive info in a list of items. +type InspectContentRequest struct { + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,1,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The list of items to inspect. Items in a single request are + // considered "related" unless inspect_config.independent_inputs is true. + // Up to 100 are allowed per request. + Items []*ContentItem `protobuf:"bytes,2,rep,name=items" json:"items,omitempty"` +} + +func (m *InspectContentRequest) Reset() { *m = InspectContentRequest{} } +func (m *InspectContentRequest) String() string { return proto.CompactTextString(m) } +func (*InspectContentRequest) ProtoMessage() {} +func (*InspectContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *InspectContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *InspectContentRequest) GetItems() []*ContentItem { + if m != nil { + return m.Items + } + return nil +} + +// Results of inspecting a list of items. +type InspectContentResponse struct { + // Each content_item from the request will have a result in this list, in the + // same order as the request. + Results []*InspectResult `protobuf:"bytes,1,rep,name=results" json:"results,omitempty"` +} + +func (m *InspectContentResponse) Reset() { *m = InspectContentResponse{} } +func (m *InspectContentResponse) String() string { return proto.CompactTextString(m) } +func (*InspectContentResponse) ProtoMessage() {} +func (*InspectContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *InspectContentResponse) GetResults() []*InspectResult { + if m != nil { + return m.Results + } + return nil +} + +// Request for scheduling a scan of a data subset from a Google Platform data +// repository. +type CreateInspectOperationRequest struct { + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,1,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // Specification of the data set to process. + StorageConfig *StorageConfig `protobuf:"bytes,2,opt,name=storage_config,json=storageConfig" json:"storage_config,omitempty"` +} + +func (m *CreateInspectOperationRequest) Reset() { *m = CreateInspectOperationRequest{} } +func (m *CreateInspectOperationRequest) String() string { return proto.CompactTextString(m) } +func (*CreateInspectOperationRequest) ProtoMessage() {} +func (*CreateInspectOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *CreateInspectOperationRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *CreateInspectOperationRequest) GetStorageConfig() *StorageConfig { + if m != nil { + return m.StorageConfig + } + return nil +} + +// Stats regarding a specific InfoType. +type InfoTypeStatistics struct { + // The type of finding this stat is for. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Number of findings for this info type. + Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` +} + +func (m *InfoTypeStatistics) Reset() { *m = InfoTypeStatistics{} } +func (m *InfoTypeStatistics) String() string { return proto.CompactTextString(m) } +func (*InfoTypeStatistics) ProtoMessage() {} +func (*InfoTypeStatistics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *InfoTypeStatistics) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *InfoTypeStatistics) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +// Metadata returned within GetOperation for an inspect request. +type InspectOperationMetadata struct { + // Total size in bytes that were processed. + ProcessedBytes int64 `protobuf:"varint,1,opt,name=processed_bytes,json=processedBytes" json:"processed_bytes,omitempty"` + // Estimate of the number of bytes to process. + TotalEstimatedBytes int64 `protobuf:"varint,4,opt,name=total_estimated_bytes,json=totalEstimatedBytes" json:"total_estimated_bytes,omitempty"` + InfoTypeStats []*InfoTypeStatistics `protobuf:"bytes,2,rep,name=info_type_stats,json=infoTypeStats" json:"info_type_stats,omitempty"` + // The time which this request was started. + CreateTime *google_protobuf3.Timestamp `protobuf:"bytes,3,opt,name=create_time,json=createTime" json:"create_time,omitempty"` +} + +func (m *InspectOperationMetadata) Reset() { *m = InspectOperationMetadata{} } +func (m *InspectOperationMetadata) String() string { return proto.CompactTextString(m) } +func (*InspectOperationMetadata) ProtoMessage() {} +func (*InspectOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *InspectOperationMetadata) GetProcessedBytes() int64 { + if m != nil { + return m.ProcessedBytes + } + return 0 +} + +func (m *InspectOperationMetadata) GetTotalEstimatedBytes() int64 { + if m != nil { + return m.TotalEstimatedBytes + } + return 0 +} + +func (m *InspectOperationMetadata) GetInfoTypeStats() []*InfoTypeStatistics { + if m != nil { + return m.InfoTypeStats + } + return nil +} + +func (m *InspectOperationMetadata) GetCreateTime() *google_protobuf3.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +// The operational data. +type InspectOperationResult struct { + // The server-assigned name, which is only unique within the same service that + // originally returns it. If you use the default HTTP mapping, the + // `name` should have the format of `inspect/results/{id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *InspectOperationResult) Reset() { *m = InspectOperationResult{} } +func (m *InspectOperationResult) String() string { return proto.CompactTextString(m) } +func (*InspectOperationResult) ProtoMessage() {} +func (*InspectOperationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *InspectOperationResult) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request for the list of results in a given inspect operation. +type ListInspectFindingsRequest struct { + // Identifier of the results set returned as metadata of + // the longrunning operation created by a call to CreateInspectOperation. + // Should be in the format of `inspect/results/{id}. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Maximum number of results to return. + // If 0, the implementation will select a reasonable value. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last `ListInspectFindingsResponse`; indicates + // that this is a continuation of a prior `ListInspectFindings` call, and that + // the system should return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListInspectFindingsRequest) Reset() { *m = ListInspectFindingsRequest{} } +func (m *ListInspectFindingsRequest) String() string { return proto.CompactTextString(m) } +func (*ListInspectFindingsRequest) ProtoMessage() {} +func (*ListInspectFindingsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *ListInspectFindingsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListInspectFindingsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListInspectFindingsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response to the ListInspectFindings request. +type ListInspectFindingsResponse struct { + // The results. + Result *InspectResult `protobuf:"bytes,1,opt,name=result" json:"result,omitempty"` + // If not empty, indicates that there may be more results that match the + // request; this value should be passed in a new `ListInspectFindingsRequest`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListInspectFindingsResponse) Reset() { *m = ListInspectFindingsResponse{} } +func (m *ListInspectFindingsResponse) String() string { return proto.CompactTextString(m) } +func (*ListInspectFindingsResponse) ProtoMessage() {} +func (*ListInspectFindingsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *ListInspectFindingsResponse) GetResult() *InspectResult { + if m != nil { + return m.Result + } + return nil +} + +func (m *ListInspectFindingsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Info type description. +type InfoTypeDescription struct { + // Internal name of the info type. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Human readable form of the info type name. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // List of categories this info type belongs to. + Categories []*CategoryDescription `protobuf:"bytes,3,rep,name=categories" json:"categories,omitempty"` +} + +func (m *InfoTypeDescription) Reset() { *m = InfoTypeDescription{} } +func (m *InfoTypeDescription) String() string { return proto.CompactTextString(m) } +func (*InfoTypeDescription) ProtoMessage() {} +func (*InfoTypeDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *InfoTypeDescription) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *InfoTypeDescription) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *InfoTypeDescription) GetCategories() []*CategoryDescription { + if m != nil { + return m.Categories + } + return nil +} + +// Request for the list of info types belonging to a given category, +// or all supported info types if no category is specified. +type ListInfoTypesRequest struct { + // Category name as returned by ListRootCategories. + Category string `protobuf:"bytes,1,opt,name=category" json:"category,omitempty"` + // Optional BCP-47 language code for localized info type friendly + // names. If omitted, or if localized strings are not available, + // en-US strings will be returned. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *ListInfoTypesRequest) Reset() { *m = ListInfoTypesRequest{} } +func (m *ListInfoTypesRequest) String() string { return proto.CompactTextString(m) } +func (*ListInfoTypesRequest) ProtoMessage() {} +func (*ListInfoTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *ListInfoTypesRequest) GetCategory() string { + if m != nil { + return m.Category + } + return "" +} + +func (m *ListInfoTypesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// Response to the ListInfoTypes request. +type ListInfoTypesResponse struct { + // Set of sensitive info types belonging to a category. + InfoTypes []*InfoTypeDescription `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` +} + +func (m *ListInfoTypesResponse) Reset() { *m = ListInfoTypesResponse{} } +func (m *ListInfoTypesResponse) String() string { return proto.CompactTextString(m) } +func (*ListInfoTypesResponse) ProtoMessage() {} +func (*ListInfoTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *ListInfoTypesResponse) GetInfoTypes() []*InfoTypeDescription { + if m != nil { + return m.InfoTypes + } + return nil +} + +// Info Type Category description. +type CategoryDescription struct { + // Internal name of the category. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Human readable form of the category name. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` +} + +func (m *CategoryDescription) Reset() { *m = CategoryDescription{} } +func (m *CategoryDescription) String() string { return proto.CompactTextString(m) } +func (*CategoryDescription) ProtoMessage() {} +func (*CategoryDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *CategoryDescription) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CategoryDescription) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +// Request for root categories of Info Types supported by the API. +// Example values might include "FINANCE", "HEALTH", "FAST", "DEFAULT". +type ListRootCategoriesRequest struct { + // Optional language code for localized friendly category names. + // If omitted or if localized strings are not available, + // en-US strings will be returned. + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *ListRootCategoriesRequest) Reset() { *m = ListRootCategoriesRequest{} } +func (m *ListRootCategoriesRequest) String() string { return proto.CompactTextString(m) } +func (*ListRootCategoriesRequest) ProtoMessage() {} +func (*ListRootCategoriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *ListRootCategoriesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// Response for ListRootCategories request. +type ListRootCategoriesResponse struct { + // List of all into type categories supported by the API. + Categories []*CategoryDescription `protobuf:"bytes,1,rep,name=categories" json:"categories,omitempty"` +} + +func (m *ListRootCategoriesResponse) Reset() { *m = ListRootCategoriesResponse{} } +func (m *ListRootCategoriesResponse) String() string { return proto.CompactTextString(m) } +func (*ListRootCategoriesResponse) ProtoMessage() {} +func (*ListRootCategoriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *ListRootCategoriesResponse) GetCategories() []*CategoryDescription { + if m != nil { + return m.Categories + } + return nil +} + +func init() { + proto.RegisterType((*InspectConfig)(nil), "google.privacy.dlp.v2beta1.InspectConfig") + proto.RegisterType((*ContentItem)(nil), "google.privacy.dlp.v2beta1.ContentItem") + proto.RegisterType((*InspectResult)(nil), "google.privacy.dlp.v2beta1.InspectResult") + proto.RegisterType((*Finding)(nil), "google.privacy.dlp.v2beta1.Finding") + proto.RegisterType((*Location)(nil), "google.privacy.dlp.v2beta1.Location") + proto.RegisterType((*Range)(nil), "google.privacy.dlp.v2beta1.Range") + proto.RegisterType((*ImageLocation)(nil), "google.privacy.dlp.v2beta1.ImageLocation") + proto.RegisterType((*RedactContentRequest)(nil), "google.privacy.dlp.v2beta1.RedactContentRequest") + proto.RegisterType((*RedactContentRequest_ReplaceConfig)(nil), "google.privacy.dlp.v2beta1.RedactContentRequest.ReplaceConfig") + proto.RegisterType((*RedactContentResponse)(nil), "google.privacy.dlp.v2beta1.RedactContentResponse") + proto.RegisterType((*InspectContentRequest)(nil), "google.privacy.dlp.v2beta1.InspectContentRequest") + proto.RegisterType((*InspectContentResponse)(nil), "google.privacy.dlp.v2beta1.InspectContentResponse") + proto.RegisterType((*CreateInspectOperationRequest)(nil), "google.privacy.dlp.v2beta1.CreateInspectOperationRequest") + proto.RegisterType((*InfoTypeStatistics)(nil), "google.privacy.dlp.v2beta1.InfoTypeStatistics") + proto.RegisterType((*InspectOperationMetadata)(nil), "google.privacy.dlp.v2beta1.InspectOperationMetadata") + proto.RegisterType((*InspectOperationResult)(nil), "google.privacy.dlp.v2beta1.InspectOperationResult") + proto.RegisterType((*ListInspectFindingsRequest)(nil), "google.privacy.dlp.v2beta1.ListInspectFindingsRequest") + proto.RegisterType((*ListInspectFindingsResponse)(nil), "google.privacy.dlp.v2beta1.ListInspectFindingsResponse") + proto.RegisterType((*InfoTypeDescription)(nil), "google.privacy.dlp.v2beta1.InfoTypeDescription") + proto.RegisterType((*ListInfoTypesRequest)(nil), "google.privacy.dlp.v2beta1.ListInfoTypesRequest") + proto.RegisterType((*ListInfoTypesResponse)(nil), "google.privacy.dlp.v2beta1.ListInfoTypesResponse") + proto.RegisterType((*CategoryDescription)(nil), "google.privacy.dlp.v2beta1.CategoryDescription") + proto.RegisterType((*ListRootCategoriesRequest)(nil), "google.privacy.dlp.v2beta1.ListRootCategoriesRequest") + proto.RegisterType((*ListRootCategoriesResponse)(nil), "google.privacy.dlp.v2beta1.ListRootCategoriesResponse") + proto.RegisterEnum("google.privacy.dlp.v2beta1.Likelihood", Likelihood_name, Likelihood_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DlpService service + +type DlpServiceClient interface { + // Find potentially sensitive info in a list of strings. + // This method has limits on input size, processing time, and output size. + InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) + // Redact potentially sensitive info from a list of strings. + // This method has limits on input size, processing time, and output size. + RedactContent(ctx context.Context, in *RedactContentRequest, opts ...grpc.CallOption) (*RedactContentResponse, error) + // Schedule a job scanning content in a Google Cloud Platform data repository. + CreateInspectOperation(ctx context.Context, in *CreateInspectOperationRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Returns list of results for given inspect operation result set id. + ListInspectFindings(ctx context.Context, in *ListInspectFindingsRequest, opts ...grpc.CallOption) (*ListInspectFindingsResponse, error) + // Returns sensitive information types for given category. + ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) + // Returns the list of root categories of sensitive information. + ListRootCategories(ctx context.Context, in *ListRootCategoriesRequest, opts ...grpc.CallOption) (*ListRootCategoriesResponse, error) +} + +type dlpServiceClient struct { + cc *grpc.ClientConn +} + +func NewDlpServiceClient(cc *grpc.ClientConn) DlpServiceClient { + return &dlpServiceClient{cc} +} + +func (c *dlpServiceClient) InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) { + out := new(InspectContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/InspectContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) RedactContent(ctx context.Context, in *RedactContentRequest, opts ...grpc.CallOption) (*RedactContentResponse, error) { + out := new(RedactContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/RedactContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CreateInspectOperation(ctx context.Context, in *CreateInspectOperationRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/CreateInspectOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListInspectFindings(ctx context.Context, in *ListInspectFindingsRequest, opts ...grpc.CallOption) (*ListInspectFindingsResponse, error) { + out := new(ListInspectFindingsResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/ListInspectFindings", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) { + out := new(ListInfoTypesResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/ListInfoTypes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListRootCategories(ctx context.Context, in *ListRootCategoriesRequest, opts ...grpc.CallOption) (*ListRootCategoriesResponse, error) { + out := new(ListRootCategoriesResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/ListRootCategories", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for DlpService service + +type DlpServiceServer interface { + // Find potentially sensitive info in a list of strings. + // This method has limits on input size, processing time, and output size. + InspectContent(context.Context, *InspectContentRequest) (*InspectContentResponse, error) + // Redact potentially sensitive info from a list of strings. + // This method has limits on input size, processing time, and output size. + RedactContent(context.Context, *RedactContentRequest) (*RedactContentResponse, error) + // Schedule a job scanning content in a Google Cloud Platform data repository. + CreateInspectOperation(context.Context, *CreateInspectOperationRequest) (*google_longrunning.Operation, error) + // Returns list of results for given inspect operation result set id. + ListInspectFindings(context.Context, *ListInspectFindingsRequest) (*ListInspectFindingsResponse, error) + // Returns sensitive information types for given category. + ListInfoTypes(context.Context, *ListInfoTypesRequest) (*ListInfoTypesResponse, error) + // Returns the list of root categories of sensitive information. + ListRootCategories(context.Context, *ListRootCategoriesRequest) (*ListRootCategoriesResponse, error) +} + +func RegisterDlpServiceServer(s *grpc.Server, srv DlpServiceServer) { + s.RegisterService(&_DlpService_serviceDesc, srv) +} + +func _DlpService_InspectContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InspectContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).InspectContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta1.DlpService/InspectContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).InspectContent(ctx, req.(*InspectContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_RedactContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RedactContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).RedactContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta1.DlpService/RedactContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).RedactContent(ctx, req.(*RedactContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CreateInspectOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateInspectOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CreateInspectOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta1.DlpService/CreateInspectOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CreateInspectOperation(ctx, req.(*CreateInspectOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListInspectFindings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInspectFindingsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListInspectFindings(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta1.DlpService/ListInspectFindings", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListInspectFindings(ctx, req.(*ListInspectFindingsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListInfoTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInfoTypesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListInfoTypes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta1.DlpService/ListInfoTypes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListInfoTypes(ctx, req.(*ListInfoTypesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListRootCategories_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListRootCategoriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListRootCategories(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta1.DlpService/ListRootCategories", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListRootCategories(ctx, req.(*ListRootCategoriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _DlpService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.privacy.dlp.v2beta1.DlpService", + HandlerType: (*DlpServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "InspectContent", + Handler: _DlpService_InspectContent_Handler, + }, + { + MethodName: "RedactContent", + Handler: _DlpService_RedactContent_Handler, + }, + { + MethodName: "CreateInspectOperation", + Handler: _DlpService_CreateInspectOperation_Handler, + }, + { + MethodName: "ListInspectFindings", + Handler: _DlpService_ListInspectFindings_Handler, + }, + { + MethodName: "ListInfoTypes", + Handler: _DlpService_ListInfoTypes_Handler, + }, + { + MethodName: "ListRootCategories", + Handler: _DlpService_ListRootCategories_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/privacy/dlp/v2beta1/dlp.proto", +} + +func init() { proto.RegisterFile("google/privacy/dlp/v2beta1/dlp.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1651 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x5f, 0x6f, 0x23, 0x57, + 0x15, 0xdf, 0xb1, 0xe3, 0xac, 0x7d, 0x1c, 0x3b, 0xe9, 0xcd, 0x9f, 0xba, 0xde, 0x86, 0x26, 0x93, + 0xb2, 0x0d, 0x51, 0xb1, 0xbb, 0x46, 0x2c, 0xa2, 0x55, 0xca, 0x36, 0x4e, 0x56, 0x6b, 0x9a, 0x26, + 0xe1, 0x26, 0xdd, 0xaa, 0x08, 0x34, 0x9a, 0xcc, 0xdc, 0x4c, 0xae, 0x32, 0x9e, 0x3b, 0x9d, 0xb9, + 0x4e, 0xe3, 0x56, 0x2b, 0x24, 0x5e, 0xe0, 0x81, 0x07, 0x24, 0x5e, 0x10, 0x82, 0x37, 0x1e, 0x40, + 0xe2, 0x13, 0xf0, 0xca, 0x47, 0xe0, 0x2b, 0xf0, 0xc4, 0x07, 0xe0, 0x19, 0xdd, 0x3f, 0x33, 0x1e, + 0x27, 0xde, 0x49, 0xbc, 0x80, 0xc4, 0xdb, 0xbd, 0xe7, 0xfe, 0xce, 0xf1, 0xef, 0xfc, 0xb9, 0xe7, + 0x9e, 0x31, 0xbc, 0xed, 0x31, 0xe6, 0xf9, 0xa4, 0x1d, 0x46, 0xf4, 0xd2, 0x76, 0x86, 0x6d, 0xd7, + 0x0f, 0xdb, 0x97, 0x9d, 0x53, 0xc2, 0xed, 0x47, 0x62, 0xdd, 0x0a, 0x23, 0xc6, 0x19, 0x6a, 0x2a, + 0x54, 0x4b, 0xa3, 0x5a, 0xe2, 0x44, 0xa3, 0x9a, 0x6f, 0x6a, 0x0b, 0x76, 0x48, 0xdb, 0x76, 0x10, + 0x30, 0x6e, 0x73, 0xca, 0x82, 0x58, 0x69, 0x36, 0x37, 0xf4, 0xa9, 0xcf, 0x02, 0x2f, 0x1a, 0x04, + 0x01, 0x0d, 0xbc, 0x36, 0x0b, 0x49, 0x34, 0x06, 0xda, 0xcc, 0x21, 0x11, 0x73, 0x16, 0xd9, 0x1e, + 0xd1, 0xc8, 0xb7, 0x52, 0x24, 0xe3, 0xec, 0x74, 0x70, 0xd6, 0xe6, 0xb4, 0x4f, 0x62, 0x6e, 0xf7, + 0x35, 0x53, 0xf3, 0xd7, 0x05, 0xa8, 0xf5, 0x82, 0x38, 0x24, 0x0e, 0xef, 0xb2, 0xe0, 0x8c, 0x7a, + 0xa8, 0x0b, 0x40, 0x83, 0x33, 0x66, 0xf1, 0x61, 0x48, 0xe2, 0x86, 0xb1, 0x56, 0xdc, 0xac, 0x76, + 0xde, 0x6e, 0xbd, 0xdc, 0xa1, 0x56, 0x2f, 0x38, 0x63, 0x27, 0xc3, 0x90, 0xe0, 0x0a, 0xd5, 0xab, + 0x18, 0x7d, 0x02, 0xf5, 0x3e, 0x0d, 0x2c, 0x9f, 0x5e, 0x10, 0x9f, 0x9e, 0x33, 0xe6, 0x36, 0x0a, + 0x6b, 0xc6, 0x66, 0xbd, 0xf3, 0x30, 0xcf, 0xd0, 0x7e, 0x8a, 0xc6, 0xb5, 0x3e, 0x0d, 0x46, 0x5b, + 0xb4, 0x0e, 0x73, 0x7d, 0xfb, 0xca, 0x3a, 0xa3, 0x81, 0x4b, 0x03, 0x2f, 0x6e, 0x14, 0xd7, 0x8c, + 0xcd, 0x12, 0xae, 0xf6, 0xed, 0xab, 0xa7, 0x5a, 0x84, 0x36, 0xa0, 0x46, 0x03, 0xc7, 0x1f, 0xb8, + 0xc4, 0xfa, 0x62, 0xc0, 0x38, 0x69, 0xcc, 0xac, 0x19, 0x9b, 0x65, 0x3c, 0xa7, 0x85, 0x3f, 0x12, + 0x32, 0x01, 0x22, 0x57, 0x0a, 0xa4, 0xdc, 0x9b, 0x55, 0x20, 0x2d, 0x94, 0xdc, 0xcd, 0x9f, 0x40, + 0xb5, 0xcb, 0x02, 0x4e, 0x02, 0xde, 0xe3, 0xa4, 0x8f, 0x10, 0xcc, 0x08, 0x6c, 0xc3, 0x58, 0x33, + 0x36, 0x2b, 0x58, 0xae, 0xd1, 0x12, 0xcc, 0xb8, 0x36, 0xb7, 0xa5, 0x53, 0x73, 0xcf, 0xee, 0x61, + 0xb9, 0x43, 0x2b, 0x50, 0xba, 0xb4, 0xfd, 0x01, 0x91, 0xf4, 0x2a, 0xcf, 0xee, 0x61, 0xb5, 0xdd, + 0xa9, 0x42, 0x45, 0x9c, 0x5b, 0x94, 0x93, 0xbe, 0xf9, 0xb3, 0x34, 0xde, 0x98, 0xc4, 0x03, 0x9f, + 0xa3, 0x1f, 0x40, 0x39, 0xf5, 0x4b, 0x45, 0x7b, 0x23, 0x2f, 0x48, 0xda, 0x61, 0x9c, 0x2a, 0xa1, + 0x6f, 0x03, 0x4a, 0xd6, 0x16, 0x8f, 0x06, 0x81, 0x63, 0x73, 0xa2, 0xe2, 0x5d, 0xc6, 0xaf, 0x25, + 0x27, 0x27, 0xc9, 0x81, 0xf9, 0xe7, 0x02, 0xdc, 0xd7, 0x46, 0xd0, 0x12, 0x94, 0x54, 0xb0, 0x94, + 0x73, 0x6a, 0x83, 0x3e, 0x82, 0x4a, 0x5a, 0x01, 0xd2, 0xce, 0x5d, 0x0b, 0xa0, 0x9c, 0x14, 0x00, + 0x7a, 0x0a, 0x90, 0xc9, 0x7d, 0x71, 0xaa, 0xdc, 0x67, 0x34, 0xd1, 0x13, 0x28, 0xfb, 0xcc, 0x91, + 0xc5, 0x2f, 0x13, 0x7a, 0x0b, 0x93, 0x7d, 0x8d, 0xc5, 0xa9, 0x16, 0xfa, 0x00, 0xaa, 0x4e, 0x44, + 0x6c, 0x4e, 0x2c, 0x51, 0xfa, 0x32, 0xe1, 0xd5, 0x4e, 0x73, 0x64, 0x44, 0xdd, 0x8b, 0xd6, 0x49, + 0x72, 0x2f, 0x30, 0x28, 0xb8, 0x10, 0x98, 0xff, 0x2c, 0x40, 0x39, 0xb1, 0x89, 0x9e, 0x00, 0x9c, + 0x0e, 0x39, 0xb1, 0x22, 0x3b, 0xf0, 0x54, 0xc4, 0xaa, 0x9d, 0xf5, 0x3c, 0x36, 0x58, 0x00, 0x71, + 0x45, 0x28, 0xc9, 0x25, 0xfa, 0x21, 0xcc, 0x3b, 0xcc, 0x25, 0x21, 0xa3, 0x01, 0xd7, 0x66, 0x0a, + 0x77, 0x35, 0x53, 0x4f, 0x35, 0x13, 0x5b, 0x55, 0xda, 0xb7, 0x3d, 0x62, 0x9d, 0xb2, 0x2b, 0x22, + 0x6e, 0x84, 0xa8, 0x9c, 0x6f, 0xe5, 0xa6, 0x49, 0xc0, 0xd3, 0x08, 0x81, 0xd4, 0xde, 0x11, 0xca, + 0x68, 0x17, 0x20, 0x22, 0x0e, 0x8b, 0x5c, 0xeb, 0x82, 0x0c, 0x75, 0x9c, 0xbf, 0x99, 0x4b, 0x49, + 0xa2, 0x3f, 0x26, 0x43, 0x5c, 0x89, 0x92, 0x25, 0xfa, 0x50, 0x14, 0x32, 0xf1, 0x5d, 0x8b, 0xba, + 0x8d, 0x92, 0xb4, 0x71, 0x4b, 0x21, 0x13, 0xdf, 0xed, 0xb9, 0xf8, 0xfe, 0x99, 0x5a, 0x98, 0x6d, + 0x28, 0x29, 0xd7, 0x96, 0xa0, 0x14, 0x73, 0x3b, 0xe2, 0x32, 0xc6, 0x45, 0xac, 0x36, 0x68, 0x01, + 0x8a, 0x24, 0x50, 0x75, 0x5d, 0xc4, 0x62, 0x69, 0x3a, 0x50, 0x1b, 0xf3, 0x49, 0x40, 0x38, 0x0b, + 0xa5, 0x5a, 0x09, 0x8b, 0xa5, 0xb8, 0xbc, 0x3e, 0x39, 0xe3, 0x52, 0xab, 0x84, 0xe5, 0x5a, 0x98, + 0xff, 0x92, 0xba, 0xfc, 0x5c, 0x77, 0x11, 0xb5, 0x41, 0x2b, 0x30, 0x7b, 0x4e, 0xa8, 0x77, 0xce, + 0xa5, 0xff, 0x25, 0xac, 0x77, 0xe6, 0x2f, 0x8a, 0xb0, 0x84, 0x89, 0x6b, 0xcb, 0xfe, 0x28, 0x9a, + 0x02, 0x26, 0x5f, 0x0c, 0x48, 0xcc, 0xd1, 0x11, 0xd4, 0xa9, 0xba, 0xc8, 0x96, 0x23, 0x3b, 0xa7, + 0x2e, 0x89, 0xfc, 0x1c, 0x64, 0x5b, 0x2d, 0xae, 0xd1, 0xb1, 0xce, 0xbb, 0x0d, 0x25, 0xd1, 0x22, + 0xe2, 0x46, 0x41, 0x26, 0xf3, 0x9d, 0x3c, 0x43, 0x99, 0x0e, 0x85, 0x95, 0x16, 0xf2, 0x60, 0x3e, + 0x22, 0xa1, 0x6f, 0x3b, 0x44, 0x13, 0x4a, 0xaa, 0xe2, 0xc3, 0xfc, 0x54, 0xde, 0xf4, 0xad, 0x85, + 0x95, 0x1d, 0x4d, 0xb3, 0x1e, 0x65, 0xb7, 0x71, 0x73, 0x00, 0xb5, 0x31, 0xc0, 0x78, 0xc3, 0x30, + 0x5e, 0xa9, 0x61, 0xac, 0xc3, 0x5c, 0x42, 0xfe, 0x4b, 0xca, 0xcf, 0x65, 0xc2, 0x2a, 0xb8, 0xaa, + 0x65, 0x9f, 0x51, 0x7e, 0x6e, 0x3e, 0x87, 0xe5, 0x6b, 0x64, 0xe3, 0x90, 0x05, 0x31, 0x19, 0xc5, + 0xcd, 0x78, 0x95, 0xb8, 0x99, 0x7f, 0x32, 0x60, 0x79, 0x94, 0x97, 0xff, 0xe7, 0x14, 0x9b, 0x3f, + 0x85, 0x95, 0xeb, 0x4c, 0x75, 0x0c, 0xba, 0x70, 0x3f, 0x92, 0xef, 0x49, 0x12, 0x85, 0xbb, 0x70, + 0x54, 0x2f, 0x10, 0x4e, 0x34, 0xcd, 0xbf, 0x19, 0xb0, 0xda, 0x95, 0xdd, 0x4f, 0x03, 0x0e, 0x93, + 0xc9, 0xe3, 0x7f, 0x17, 0x91, 0x23, 0xa8, 0xeb, 0x91, 0x25, 0xb1, 0x58, 0xb8, 0xdd, 0xe2, 0xb1, + 0xd2, 0x48, 0x2c, 0xc6, 0xd9, 0xad, 0xd9, 0x07, 0x94, 0x14, 0xd8, 0xb1, 0x18, 0xae, 0x62, 0x4e, + 0x9d, 0xf8, 0xbf, 0x51, 0xa3, 0x4b, 0x50, 0x72, 0xd8, 0x20, 0xe0, 0xba, 0x07, 0xa9, 0x8d, 0xf9, + 0xab, 0x02, 0x34, 0xae, 0x87, 0xeb, 0x13, 0xc2, 0x6d, 0x39, 0x12, 0xbc, 0x03, 0xf3, 0x61, 0xc4, + 0x1c, 0x12, 0xc7, 0xc4, 0xb5, 0xc4, 0x43, 0x10, 0xeb, 0xa6, 0x56, 0x4f, 0xc5, 0x3b, 0x42, 0x8a, + 0x3a, 0xb0, 0xcc, 0x19, 0xb7, 0x7d, 0x8b, 0xc4, 0x9c, 0xf6, 0xc5, 0x43, 0xad, 0xe1, 0x33, 0x12, + 0xbe, 0x28, 0x0f, 0xf7, 0x92, 0x33, 0xa5, 0xf3, 0x1c, 0xe6, 0x53, 0x97, 0xac, 0x98, 0xdb, 0x3c, + 0x29, 0xab, 0xd6, 0x5d, 0x1c, 0x1b, 0xc5, 0x46, 0xa4, 0x64, 0x24, 0x8b, 0xaf, 0x3f, 0x99, 0xc5, + 0xa9, 0x9e, 0xcc, 0x77, 0xd3, 0x12, 0xcd, 0x14, 0x8f, 0x1c, 0x74, 0x10, 0xcc, 0x04, 0x76, 0x3f, + 0x1d, 0xa4, 0xc4, 0xda, 0xf4, 0xa1, 0xb9, 0x4f, 0x63, 0xae, 0x35, 0x92, 0x61, 0x2e, 0xa9, 0xb6, + 0x09, 0x1a, 0xe8, 0x01, 0x54, 0x42, 0x51, 0x2c, 0x31, 0xfd, 0x8a, 0xe8, 0xb6, 0x5e, 0x16, 0x82, + 0x63, 0xfa, 0x15, 0x41, 0xab, 0x00, 0xf2, 0x90, 0xb3, 0x0b, 0x12, 0xa8, 0x31, 0x0c, 0x4b, 0xf8, + 0x89, 0x10, 0x98, 0xbf, 0x34, 0xe0, 0xc1, 0xc4, 0x9f, 0xd3, 0x97, 0xe8, 0x23, 0x98, 0x55, 0x57, + 0x61, 0x8a, 0xaa, 0xd6, 0x77, 0x48, 0x2b, 0xa2, 0x87, 0x30, 0x1f, 0x90, 0x2b, 0x6e, 0x65, 0x68, + 0xa8, 0x56, 0x56, 0x13, 0xe2, 0xa3, 0x94, 0xca, 0x1f, 0x0c, 0x58, 0x4c, 0x32, 0xb1, 0x4b, 0x62, + 0x27, 0xa2, 0xa1, 0x7c, 0xc2, 0x26, 0xb9, 0xbc, 0x0e, 0x73, 0x2e, 0x8d, 0x43, 0xdf, 0x1e, 0x5a, + 0xf2, 0x4c, 0xf7, 0x46, 0x2d, 0x3b, 0x10, 0x90, 0x43, 0x00, 0x31, 0xdd, 0x79, 0x2c, 0xa2, 0xe9, + 0x30, 0xd0, 0xce, 0x6d, 0x2e, 0x0a, 0x3d, 0xcc, 0xfc, 0x36, 0xce, 0x98, 0x30, 0x3f, 0x83, 0x25, + 0x15, 0x29, 0x3d, 0xd1, 0x27, 0x29, 0x69, 0x42, 0x59, 0xa3, 0x86, 0x9a, 0x63, 0xba, 0x17, 0xd3, + 0xb5, 0x6f, 0x07, 0xde, 0x40, 0xdd, 0x65, 0x37, 0x21, 0x3a, 0x97, 0x08, 0xbb, 0xcc, 0x25, 0xa6, + 0x07, 0xcb, 0xd7, 0x0c, 0xeb, 0xe0, 0x1f, 0x4c, 0xf8, 0xee, 0x68, 0xdf, 0xa5, 0x90, 0xb3, 0x2e, + 0x8c, 0x3e, 0x41, 0xcc, 0x7d, 0x58, 0x9c, 0xe0, 0xe4, 0x2b, 0x06, 0xd8, 0x7c, 0x02, 0x6f, 0x08, + 0xda, 0x98, 0x31, 0xde, 0x4d, 0xa3, 0x94, 0x04, 0xe5, 0x86, 0xe3, 0xc6, 0x04, 0xc7, 0xfb, 0xaa, + 0xd4, 0xaf, 0x5b, 0xd0, 0xde, 0x8f, 0x27, 0xd0, 0xf8, 0x8f, 0x13, 0xb8, 0xc5, 0x01, 0x32, 0x1f, + 0x50, 0x4d, 0x58, 0xd9, 0xef, 0x7d, 0xbc, 0xb7, 0xdf, 0x7b, 0x76, 0x78, 0xb8, 0x6b, 0x7d, 0x7a, + 0x70, 0x7c, 0xb4, 0xd7, 0xed, 0x3d, 0xed, 0xed, 0xed, 0x2e, 0xdc, 0x43, 0xaf, 0x41, 0xed, 0xf9, + 0x1e, 0xfe, 0xdc, 0xfa, 0xf4, 0x40, 0x42, 0x3e, 0x5f, 0x30, 0xd0, 0x1c, 0x94, 0xd3, 0x5d, 0x41, + 0xec, 0x8e, 0x0e, 0x8f, 0x8f, 0x7b, 0x3b, 0xfb, 0x7b, 0x0b, 0x45, 0x04, 0x30, 0xab, 0x4f, 0x66, + 0xd0, 0x3c, 0x54, 0xa5, 0xaa, 0x16, 0x94, 0x3a, 0xff, 0xba, 0x0f, 0xb0, 0xeb, 0x87, 0xc7, 0x24, + 0xba, 0xa4, 0x0e, 0x41, 0xbf, 0x37, 0xa0, 0x3e, 0xfe, 0x60, 0xa1, 0x47, 0x77, 0x7b, 0x29, 0x32, + 0xcf, 0x70, 0xb3, 0x33, 0x8d, 0x8a, 0x8a, 0xa7, 0xb9, 0xf1, 0xf3, 0xbf, 0xff, 0xe3, 0x37, 0x85, + 0x55, 0xb3, 0x91, 0x7e, 0x18, 0x3b, 0x0a, 0xf1, 0xbe, 0x7e, 0x7e, 0xde, 0x37, 0xb6, 0xd0, 0x6f, + 0x0d, 0x31, 0xc9, 0x64, 0x46, 0x0a, 0xf4, 0xde, 0xb4, 0xa3, 0x52, 0xf3, 0xd1, 0x14, 0x1a, 0x9a, + 0x9b, 0x29, 0xb9, 0xbd, 0x69, 0xbe, 0x7e, 0x83, 0x5b, 0x24, 0xf1, 0x82, 0xda, 0xef, 0x0c, 0x58, + 0x99, 0xfc, 0x14, 0xa3, 0xef, 0xe7, 0x96, 0x45, 0xde, 0xf3, 0xdd, 0x5c, 0x4d, 0x54, 0x33, 0x7f, + 0x2f, 0xb4, 0x52, 0x94, 0xf9, 0x50, 0x12, 0x5b, 0x33, 0x1f, 0xa4, 0xc4, 0x74, 0xb0, 0x32, 0x7f, + 0x41, 0x08, 0x72, 0x7f, 0x35, 0x60, 0x71, 0x42, 0x1f, 0x45, 0x8f, 0xf3, 0xbf, 0xf0, 0x5e, 0xd6, + 0xe7, 0x9b, 0xdf, 0x9b, 0x5a, 0x4f, 0x47, 0xb2, 0x23, 0x09, 0xbf, 0x8b, 0xb6, 0x52, 0xc2, 0x5f, + 0x8b, 0x0b, 0xbc, 0x9d, 0xd0, 0xd6, 0x83, 0x4d, 0x7b, 0xeb, 0x45, 0x3b, 0xfd, 0x5c, 0xfe, 0x8b, + 0x01, 0xb5, 0xb1, 0x0e, 0x94, 0x9f, 0xf4, 0x49, 0x5d, 0x30, 0x3f, 0xe9, 0x13, 0xdb, 0x9b, 0xf9, + 0x58, 0x52, 0x7d, 0x0f, 0xb5, 0x52, 0xaa, 0xd1, 0x58, 0x27, 0x68, 0x7f, 0x9d, 0xf4, 0xd1, 0xed, + 0xad, 0x17, 0xed, 0xd1, 0x3f, 0x29, 0x7f, 0x34, 0x00, 0xdd, 0xec, 0x1b, 0xe8, 0xbb, 0xb7, 0x31, + 0x98, 0xd8, 0xa9, 0x9a, 0x8f, 0xa7, 0x55, 0xd3, 0xec, 0xdf, 0x92, 0xec, 0xdf, 0x40, 0xaf, 0xbf, + 0x84, 0xfd, 0xce, 0x05, 0x7c, 0xc3, 0x61, 0xfd, 0x1c, 0xeb, 0x3b, 0xe5, 0x5d, 0x3f, 0x3c, 0x12, + 0xb3, 0xc3, 0x91, 0xf1, 0xe3, 0x6d, 0x8d, 0xf3, 0x98, 0x68, 0x91, 0x2d, 0x16, 0x79, 0x6d, 0x8f, + 0x04, 0x72, 0xb2, 0x68, 0xab, 0x23, 0x3b, 0xa4, 0xf1, 0xa4, 0xff, 0xb7, 0x3e, 0x70, 0xfd, 0xf0, + 0x74, 0x56, 0x22, 0xbf, 0xf3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x68, 0x1e, 0x49, 0xda, 0x8d, + 0x13, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/storage.pb.go b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/storage.pb.go new file mode 100644 index 0000000..d73ffe0 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/storage.pb.go @@ -0,0 +1,742 @@ +// Code generated by protoc-gen-go. +// source: google/privacy/dlp/v2beta1/storage.proto +// DO NOT EDIT! + +package dlp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Type of information detected by the API. +type InfoType struct { + // Name of the information type, provided by the API call ListInfoTypes. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *InfoType) Reset() { *m = InfoType{} } +func (m *InfoType) String() string { return proto.CompactTextString(m) } +func (*InfoType) ProtoMessage() {} +func (*InfoType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *InfoType) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// General identifier of a data field in a storage service. +type FieldId struct { + // Column name describing the field. + ColumnName string `protobuf:"bytes,1,opt,name=column_name,json=columnName" json:"column_name,omitempty"` +} + +func (m *FieldId) Reset() { *m = FieldId{} } +func (m *FieldId) String() string { return proto.CompactTextString(m) } +func (*FieldId) ProtoMessage() {} +func (*FieldId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *FieldId) GetColumnName() string { + if m != nil { + return m.ColumnName + } + return "" +} + +// Datastore partition ID. +// A partition ID identifies a grouping of entities. The grouping is always +// by project and namespace, however the namespace ID may be empty. +// +// A partition ID contains several dimensions: +// project ID and namespace ID. +type PartitionId struct { + // The ID of the project to which the entities belong. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // If not empty, the ID of the namespace to which the entities belong. + NamespaceId string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceId" json:"namespace_id,omitempty"` +} + +func (m *PartitionId) Reset() { *m = PartitionId{} } +func (m *PartitionId) String() string { return proto.CompactTextString(m) } +func (*PartitionId) ProtoMessage() {} +func (*PartitionId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *PartitionId) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *PartitionId) GetNamespaceId() string { + if m != nil { + return m.NamespaceId + } + return "" +} + +// A representation of a Datastore kind. +type KindExpression struct { + // The name of the kind. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *KindExpression) Reset() { *m = KindExpression{} } +func (m *KindExpression) String() string { return proto.CompactTextString(m) } +func (*KindExpression) ProtoMessage() {} +func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *KindExpression) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A reference to a property relative to the Datastore kind expressions. +type PropertyReference struct { + // The name of the property. + // If name includes "."s, it may be interpreted as a property name path. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` +} + +func (m *PropertyReference) Reset() { *m = PropertyReference{} } +func (m *PropertyReference) String() string { return proto.CompactTextString(m) } +func (*PropertyReference) ProtoMessage() {} +func (*PropertyReference) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *PropertyReference) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A representation of a Datastore property in a projection. +type Projection struct { + // The property to project. + Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` +} + +func (m *Projection) Reset() { *m = Projection{} } +func (m *Projection) String() string { return proto.CompactTextString(m) } +func (*Projection) ProtoMessage() {} +func (*Projection) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *Projection) GetProperty() *PropertyReference { + if m != nil { + return m.Property + } + return nil +} + +// Options defining a data set within Google Cloud Datastore. +type DatastoreOptions struct { + // A partition ID identifies a grouping of entities. The grouping is always + // by project and namespace, however the namespace ID may be empty. + PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The kind to process. + Kind *KindExpression `protobuf:"bytes,2,opt,name=kind" json:"kind,omitempty"` + // Properties to scan. If none are specified, all properties will be scanned + // by default. + Projection []*Projection `protobuf:"bytes,3,rep,name=projection" json:"projection,omitempty"` +} + +func (m *DatastoreOptions) Reset() { *m = DatastoreOptions{} } +func (m *DatastoreOptions) String() string { return proto.CompactTextString(m) } +func (*DatastoreOptions) ProtoMessage() {} +func (*DatastoreOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *DatastoreOptions) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *DatastoreOptions) GetKind() *KindExpression { + if m != nil { + return m.Kind + } + return nil +} + +func (m *DatastoreOptions) GetProjection() []*Projection { + if m != nil { + return m.Projection + } + return nil +} + +// Options defining a file or a set of files (path ending with *) within +// a Google Cloud Storage bucket. +type CloudStorageOptions struct { + FileSet *CloudStorageOptions_FileSet `protobuf:"bytes,1,opt,name=file_set,json=fileSet" json:"file_set,omitempty"` +} + +func (m *CloudStorageOptions) Reset() { *m = CloudStorageOptions{} } +func (m *CloudStorageOptions) String() string { return proto.CompactTextString(m) } +func (*CloudStorageOptions) ProtoMessage() {} +func (*CloudStorageOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *CloudStorageOptions) GetFileSet() *CloudStorageOptions_FileSet { + if m != nil { + return m.FileSet + } + return nil +} + +// Set of files to scan. +type CloudStorageOptions_FileSet struct { + // The url, in the format gs://<bucket>/<path>. Trailing wildcard in the + // path is allowed. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` +} + +func (m *CloudStorageOptions_FileSet) Reset() { *m = CloudStorageOptions_FileSet{} } +func (m *CloudStorageOptions_FileSet) String() string { return proto.CompactTextString(m) } +func (*CloudStorageOptions_FileSet) ProtoMessage() {} +func (*CloudStorageOptions_FileSet) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7, 0} } + +func (m *CloudStorageOptions_FileSet) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +// Shared message indicating Cloud storage type. +type StorageConfig struct { + // Types that are valid to be assigned to Type: + // *StorageConfig_DatastoreOptions + // *StorageConfig_CloudStorageOptions + Type isStorageConfig_Type `protobuf_oneof:"type"` +} + +func (m *StorageConfig) Reset() { *m = StorageConfig{} } +func (m *StorageConfig) String() string { return proto.CompactTextString(m) } +func (*StorageConfig) ProtoMessage() {} +func (*StorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +type isStorageConfig_Type interface { + isStorageConfig_Type() +} + +type StorageConfig_DatastoreOptions struct { + DatastoreOptions *DatastoreOptions `protobuf:"bytes,2,opt,name=datastore_options,json=datastoreOptions,oneof"` +} +type StorageConfig_CloudStorageOptions struct { + CloudStorageOptions *CloudStorageOptions `protobuf:"bytes,3,opt,name=cloud_storage_options,json=cloudStorageOptions,oneof"` +} + +func (*StorageConfig_DatastoreOptions) isStorageConfig_Type() {} +func (*StorageConfig_CloudStorageOptions) isStorageConfig_Type() {} + +func (m *StorageConfig) GetType() isStorageConfig_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *StorageConfig) GetDatastoreOptions() *DatastoreOptions { + if x, ok := m.GetType().(*StorageConfig_DatastoreOptions); ok { + return x.DatastoreOptions + } + return nil +} + +func (m *StorageConfig) GetCloudStorageOptions() *CloudStorageOptions { + if x, ok := m.GetType().(*StorageConfig_CloudStorageOptions); ok { + return x.CloudStorageOptions + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*StorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _StorageConfig_OneofMarshaler, _StorageConfig_OneofUnmarshaler, _StorageConfig_OneofSizer, []interface{}{ + (*StorageConfig_DatastoreOptions)(nil), + (*StorageConfig_CloudStorageOptions)(nil), + } +} + +func _StorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*StorageConfig) + // type + switch x := m.Type.(type) { + case *StorageConfig_DatastoreOptions: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatastoreOptions); err != nil { + return err + } + case *StorageConfig_CloudStorageOptions: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CloudStorageOptions); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("StorageConfig.Type has unexpected type %T", x) + } + return nil +} + +func _StorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*StorageConfig) + switch tag { + case 2: // type.datastore_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatastoreOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_DatastoreOptions{msg} + return true, err + case 3: // type.cloud_storage_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CloudStorageOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_CloudStorageOptions{msg} + return true, err + default: + return false, nil + } +} + +func _StorageConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*StorageConfig) + // type + switch x := m.Type.(type) { + case *StorageConfig_DatastoreOptions: + s := proto.Size(x.DatastoreOptions) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StorageConfig_CloudStorageOptions: + s := proto.Size(x.CloudStorageOptions) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Record key for a finding in a Cloud Storage file. +type CloudStorageKey struct { + // Path to the file. + FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath" json:"file_path,omitempty"` + // Byte offset of the referenced data in the file. + StartOffset int64 `protobuf:"varint,2,opt,name=start_offset,json=startOffset" json:"start_offset,omitempty"` +} + +func (m *CloudStorageKey) Reset() { *m = CloudStorageKey{} } +func (m *CloudStorageKey) String() string { return proto.CompactTextString(m) } +func (*CloudStorageKey) ProtoMessage() {} +func (*CloudStorageKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *CloudStorageKey) GetFilePath() string { + if m != nil { + return m.FilePath + } + return "" +} + +func (m *CloudStorageKey) GetStartOffset() int64 { + if m != nil { + return m.StartOffset + } + return 0 +} + +// Record key for a finding in Cloud Datastore. +type DatastoreKey struct { + // Datastore entity key. + EntityKey *Key `protobuf:"bytes,1,opt,name=entity_key,json=entityKey" json:"entity_key,omitempty"` +} + +func (m *DatastoreKey) Reset() { *m = DatastoreKey{} } +func (m *DatastoreKey) String() string { return proto.CompactTextString(m) } +func (*DatastoreKey) ProtoMessage() {} +func (*DatastoreKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *DatastoreKey) GetEntityKey() *Key { + if m != nil { + return m.EntityKey + } + return nil +} + +// A unique identifier for a Datastore entity. +// If a key's partition ID or any of its path kinds or names are +// reserved/read-only, the key is reserved/read-only. +// A reserved/read-only key is forbidden in certain documented contexts. +type Key struct { + // Entities are partitioned into subsets, currently identified by a project + // ID and namespace ID. + // Queries are scoped to a single partition. + PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The entity path. + // An entity path consists of one or more elements composed of a kind and a + // string or numerical identifier, which identify entities. The first + // element identifies a _root entity_, the second element identifies + // a _child_ of the root entity, the third element identifies a child of the + // second entity, and so forth. The entities identified by all prefixes of + // the path are called the element's _ancestors_. + // + // A path can never be empty, and a path can have at most 100 elements. + Path []*Key_PathElement `protobuf:"bytes,2,rep,name=path" json:"path,omitempty"` +} + +func (m *Key) Reset() { *m = Key{} } +func (m *Key) String() string { return proto.CompactTextString(m) } +func (*Key) ProtoMessage() {} +func (*Key) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *Key) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *Key) GetPath() []*Key_PathElement { + if m != nil { + return m.Path + } + return nil +} + +// A (kind, ID/name) pair used to construct a key path. +// +// If either name or ID is set, the element is complete. +// If neither is set, the element is incomplete. +type Key_PathElement struct { + // The kind of the entity. + // A kind matching regex `__.*__` is reserved/read-only. + // A kind must not contain more than 1500 bytes when UTF-8 encoded. + // Cannot be `""`. + Kind string `protobuf:"bytes,1,opt,name=kind" json:"kind,omitempty"` + // The type of ID. + // + // Types that are valid to be assigned to IdType: + // *Key_PathElement_Id + // *Key_PathElement_Name + IdType isKey_PathElement_IdType `protobuf_oneof:"id_type"` +} + +func (m *Key_PathElement) Reset() { *m = Key_PathElement{} } +func (m *Key_PathElement) String() string { return proto.CompactTextString(m) } +func (*Key_PathElement) ProtoMessage() {} +func (*Key_PathElement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11, 0} } + +type isKey_PathElement_IdType interface { + isKey_PathElement_IdType() +} + +type Key_PathElement_Id struct { + Id int64 `protobuf:"varint,2,opt,name=id,oneof"` +} +type Key_PathElement_Name struct { + Name string `protobuf:"bytes,3,opt,name=name,oneof"` +} + +func (*Key_PathElement_Id) isKey_PathElement_IdType() {} +func (*Key_PathElement_Name) isKey_PathElement_IdType() {} + +func (m *Key_PathElement) GetIdType() isKey_PathElement_IdType { + if m != nil { + return m.IdType + } + return nil +} + +func (m *Key_PathElement) GetKind() string { + if m != nil { + return m.Kind + } + return "" +} + +func (m *Key_PathElement) GetId() int64 { + if x, ok := m.GetIdType().(*Key_PathElement_Id); ok { + return x.Id + } + return 0 +} + +func (m *Key_PathElement) GetName() string { + if x, ok := m.GetIdType().(*Key_PathElement_Name); ok { + return x.Name + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Key_PathElement) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Key_PathElement_OneofMarshaler, _Key_PathElement_OneofUnmarshaler, _Key_PathElement_OneofSizer, []interface{}{ + (*Key_PathElement_Id)(nil), + (*Key_PathElement_Name)(nil), + } +} + +func _Key_PathElement_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Name) + case nil: + default: + return fmt.Errorf("Key_PathElement.IdType has unexpected type %T", x) + } + return nil +} + +func _Key_PathElement_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Key_PathElement) + switch tag { + case 2: // id_type.id + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.IdType = &Key_PathElement_Id{int64(x)} + return true, err + case 3: // id_type.name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.IdType = &Key_PathElement_Name{x} + return true, err + default: + return false, nil + } +} + +func _Key_PathElement_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Name))) + n += len(x.Name) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for a unique key indicating a record that contains a finding. +type RecordKey struct { + // Types that are valid to be assigned to Type: + // *RecordKey_CloudStorageKey + // *RecordKey_DatastoreKey + Type isRecordKey_Type `protobuf_oneof:"type"` +} + +func (m *RecordKey) Reset() { *m = RecordKey{} } +func (m *RecordKey) String() string { return proto.CompactTextString(m) } +func (*RecordKey) ProtoMessage() {} +func (*RecordKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +type isRecordKey_Type interface { + isRecordKey_Type() +} + +type RecordKey_CloudStorageKey struct { + CloudStorageKey *CloudStorageKey `protobuf:"bytes,1,opt,name=cloud_storage_key,json=cloudStorageKey,oneof"` +} +type RecordKey_DatastoreKey struct { + DatastoreKey *DatastoreKey `protobuf:"bytes,2,opt,name=datastore_key,json=datastoreKey,oneof"` +} + +func (*RecordKey_CloudStorageKey) isRecordKey_Type() {} +func (*RecordKey_DatastoreKey) isRecordKey_Type() {} + +func (m *RecordKey) GetType() isRecordKey_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *RecordKey) GetCloudStorageKey() *CloudStorageKey { + if x, ok := m.GetType().(*RecordKey_CloudStorageKey); ok { + return x.CloudStorageKey + } + return nil +} + +func (m *RecordKey) GetDatastoreKey() *DatastoreKey { + if x, ok := m.GetType().(*RecordKey_DatastoreKey); ok { + return x.DatastoreKey + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RecordKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RecordKey_OneofMarshaler, _RecordKey_OneofUnmarshaler, _RecordKey_OneofSizer, []interface{}{ + (*RecordKey_CloudStorageKey)(nil), + (*RecordKey_DatastoreKey)(nil), + } +} + +func _RecordKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RecordKey) + // type + switch x := m.Type.(type) { + case *RecordKey_CloudStorageKey: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CloudStorageKey); err != nil { + return err + } + case *RecordKey_DatastoreKey: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatastoreKey); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RecordKey.Type has unexpected type %T", x) + } + return nil +} + +func _RecordKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RecordKey) + switch tag { + case 1: // type.cloud_storage_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CloudStorageKey) + err := b.DecodeMessage(msg) + m.Type = &RecordKey_CloudStorageKey{msg} + return true, err + case 2: // type.datastore_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatastoreKey) + err := b.DecodeMessage(msg) + m.Type = &RecordKey_DatastoreKey{msg} + return true, err + default: + return false, nil + } +} + +func _RecordKey_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RecordKey) + // type + switch x := m.Type.(type) { + case *RecordKey_CloudStorageKey: + s := proto.Size(x.CloudStorageKey) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RecordKey_DatastoreKey: + s := proto.Size(x.DatastoreKey) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*InfoType)(nil), "google.privacy.dlp.v2beta1.InfoType") + proto.RegisterType((*FieldId)(nil), "google.privacy.dlp.v2beta1.FieldId") + proto.RegisterType((*PartitionId)(nil), "google.privacy.dlp.v2beta1.PartitionId") + proto.RegisterType((*KindExpression)(nil), "google.privacy.dlp.v2beta1.KindExpression") + proto.RegisterType((*PropertyReference)(nil), "google.privacy.dlp.v2beta1.PropertyReference") + proto.RegisterType((*Projection)(nil), "google.privacy.dlp.v2beta1.Projection") + proto.RegisterType((*DatastoreOptions)(nil), "google.privacy.dlp.v2beta1.DatastoreOptions") + proto.RegisterType((*CloudStorageOptions)(nil), "google.privacy.dlp.v2beta1.CloudStorageOptions") + proto.RegisterType((*CloudStorageOptions_FileSet)(nil), "google.privacy.dlp.v2beta1.CloudStorageOptions.FileSet") + proto.RegisterType((*StorageConfig)(nil), "google.privacy.dlp.v2beta1.StorageConfig") + proto.RegisterType((*CloudStorageKey)(nil), "google.privacy.dlp.v2beta1.CloudStorageKey") + proto.RegisterType((*DatastoreKey)(nil), "google.privacy.dlp.v2beta1.DatastoreKey") + proto.RegisterType((*Key)(nil), "google.privacy.dlp.v2beta1.Key") + proto.RegisterType((*Key_PathElement)(nil), "google.privacy.dlp.v2beta1.Key.PathElement") + proto.RegisterType((*RecordKey)(nil), "google.privacy.dlp.v2beta1.RecordKey") +} + +func init() { proto.RegisterFile("google/privacy/dlp/v2beta1/storage.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 729 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x5d, 0x6f, 0xf3, 0x34, + 0x14, 0x6e, 0xda, 0xea, 0xdd, 0x7a, 0xd2, 0xb1, 0x2e, 0x03, 0x69, 0xea, 0x60, 0x1b, 0x11, 0x62, + 0xd5, 0x06, 0x89, 0x28, 0x17, 0x5c, 0x20, 0x86, 0xd4, 0x7d, 0xa8, 0xa5, 0xd2, 0x5a, 0xbc, 0x49, + 0x08, 0xb8, 0x88, 0xbc, 0xd8, 0xcd, 0xcc, 0x52, 0xdb, 0x4a, 0xbc, 0x89, 0xfc, 0x01, 0xfe, 0x16, + 0x3f, 0x84, 0x7b, 0xc4, 0xcf, 0x40, 0x76, 0xdc, 0x8f, 0x7d, 0xd0, 0x0d, 0xe9, 0xbd, 0x73, 0x4f, + 0x9f, 0xf3, 0x1c, 0x9f, 0xe7, 0x3c, 0x3e, 0x81, 0x4e, 0x22, 0x44, 0x92, 0xd2, 0x50, 0x66, 0xec, + 0x01, 0xc7, 0x45, 0x48, 0x52, 0x19, 0x3e, 0x74, 0x6f, 0xa8, 0xc2, 0x5f, 0x85, 0xb9, 0x12, 0x19, + 0x4e, 0x68, 0x20, 0x33, 0xa1, 0x84, 0xd7, 0x2e, 0x91, 0x81, 0x45, 0x06, 0x24, 0x95, 0x81, 0x45, + 0xb6, 0x3f, 0xb6, 0x2c, 0x58, 0xb2, 0x10, 0x73, 0x2e, 0x14, 0x56, 0x4c, 0xf0, 0xbc, 0xcc, 0xf4, + 0xf7, 0x60, 0x7d, 0xc0, 0x27, 0xe2, 0xba, 0x90, 0xd4, 0xf3, 0xa0, 0xce, 0xf1, 0x94, 0xee, 0x38, + 0x07, 0x4e, 0xa7, 0x81, 0xcc, 0xd9, 0x3f, 0x82, 0xb5, 0x0b, 0x46, 0x53, 0x32, 0x20, 0xde, 0x3e, + 0xb8, 0xb1, 0x48, 0xef, 0xa7, 0x3c, 0x5a, 0x42, 0x41, 0x19, 0xba, 0xd4, 0xd8, 0x11, 0xb8, 0x63, + 0x9c, 0x29, 0xa6, 0xf9, 0x07, 0xc4, 0xfb, 0x04, 0x40, 0x66, 0xe2, 0x37, 0x1a, 0xab, 0x88, 0x91, + 0x9d, 0xaa, 0x81, 0x37, 0x6c, 0x64, 0x40, 0xbc, 0x4f, 0xa1, 0xa9, 0x79, 0x72, 0x89, 0x63, 0xaa, + 0x01, 0x75, 0x03, 0x70, 0xe7, 0xb1, 0x01, 0xf1, 0x3f, 0x83, 0x0f, 0x86, 0x8c, 0x93, 0xf3, 0xdf, + 0x65, 0x46, 0xf3, 0x9c, 0x09, 0xfe, 0xe2, 0x15, 0x0f, 0x61, 0x6b, 0x9c, 0x09, 0x49, 0x33, 0x55, + 0x20, 0x3a, 0xa1, 0x19, 0xe5, 0xf1, 0xa2, 0x97, 0xea, 0x12, 0xf0, 0x27, 0x80, 0x71, 0x59, 0x5e, + 0x53, 0x0d, 0x60, 0x5d, 0xda, 0x34, 0x43, 0xe7, 0x76, 0xbf, 0x0c, 0xfe, 0x5b, 0xc6, 0xe0, 0x59, + 0x09, 0x34, 0x4f, 0xf7, 0xff, 0x76, 0xa0, 0x75, 0x86, 0x15, 0xd6, 0x43, 0xa1, 0x23, 0x69, 0xf4, + 0xf5, 0x7e, 0x80, 0xa6, 0x9c, 0xa9, 0xa1, 0xfb, 0x2b, 0x6b, 0x1c, 0xae, 0xac, 0xb1, 0x50, 0x0f, + 0xb9, 0x72, 0x49, 0xca, 0x13, 0xa8, 0xdf, 0x31, 0x5e, 0x8a, 0xe8, 0x76, 0x8f, 0x56, 0x71, 0x3c, + 0x16, 0x0c, 0x99, 0x3c, 0xef, 0x62, 0x3e, 0x0a, 0x26, 0xf8, 0x4e, 0xed, 0xa0, 0xd6, 0x71, 0xbb, + 0x9f, 0xbf, 0xd2, 0xad, 0x45, 0xa3, 0xa5, 0x4c, 0xff, 0x0f, 0x07, 0xb6, 0x4f, 0x53, 0x71, 0x4f, + 0xae, 0x4a, 0xfb, 0xcd, 0x7a, 0x45, 0xb0, 0x3e, 0x61, 0x29, 0x8d, 0x72, 0xaa, 0x6c, 0x9f, 0xdf, + 0xac, 0x62, 0x7f, 0x81, 0x22, 0xb8, 0x60, 0x29, 0xbd, 0xa2, 0x0a, 0xad, 0x4d, 0xca, 0x43, 0x7b, + 0x57, 0x3b, 0xcf, 0x1c, 0xbd, 0x16, 0xd4, 0xee, 0xb3, 0xd4, 0x0e, 0x5d, 0x1f, 0xfd, 0xbf, 0x1c, + 0xd8, 0xb0, 0x04, 0xa7, 0x82, 0x4f, 0x58, 0xe2, 0xfd, 0x0a, 0x5b, 0x64, 0x36, 0x82, 0x48, 0x94, + 0xa4, 0x56, 0xaf, 0x2f, 0x56, 0xdd, 0xe5, 0xe9, 0xdc, 0xfa, 0x15, 0xd4, 0x22, 0x4f, 0x67, 0x49, + 0xe1, 0xa3, 0x58, 0xdf, 0x39, 0xb2, 0xcf, 0x6e, 0x5e, 0xa0, 0x66, 0x0a, 0x84, 0xff, 0xb3, 0xd9, + 0x7e, 0x05, 0x6d, 0xc7, 0xcf, 0xc3, 0xbd, 0x77, 0x50, 0x57, 0x85, 0xa4, 0xfe, 0x8f, 0xb0, 0xb9, + 0x9c, 0x35, 0xa4, 0x85, 0xb7, 0x0b, 0x0d, 0xa3, 0xb0, 0xc4, 0xea, 0xd6, 0x0a, 0x61, 0x24, 0x1f, + 0x63, 0x75, 0xab, 0x9f, 0x52, 0xae, 0x70, 0xa6, 0x22, 0x31, 0x99, 0xe8, 0x11, 0xe8, 0xb6, 0x6b, + 0xc8, 0x35, 0xb1, 0x91, 0x09, 0xf9, 0x97, 0xd0, 0x9c, 0x77, 0xaa, 0xf9, 0x4e, 0x00, 0x28, 0x57, + 0x4c, 0x15, 0xd1, 0x1d, 0x9d, 0xf9, 0x7f, 0x7f, 0xa5, 0xaf, 0x68, 0x81, 0x1a, 0x65, 0xca, 0x90, + 0x16, 0xfe, 0x3f, 0x0e, 0xd4, 0x34, 0xcf, 0xfb, 0x74, 0xf9, 0xf7, 0x50, 0x37, 0xed, 0x55, 0x8d, + 0x3f, 0x8f, 0x5f, 0xb9, 0x4d, 0xa0, 0x5b, 0x3f, 0x4f, 0xe9, 0x94, 0x72, 0x85, 0x4c, 0x62, 0xfb, + 0x5a, 0x2f, 0xa0, 0x79, 0x50, 0xef, 0x00, 0xf3, 0x6a, 0xec, 0xb2, 0x30, 0x2f, 0xa1, 0x05, 0x55, + 0xbb, 0x8c, 0x6a, 0xfd, 0x0a, 0xaa, 0x32, 0xe2, 0x7d, 0x68, 0x37, 0x85, 0x1e, 0x65, 0xa3, 0x5f, + 0x29, 0x77, 0x45, 0xaf, 0x01, 0x6b, 0x8c, 0x44, 0x66, 0x1a, 0x7f, 0x3a, 0xd0, 0x40, 0x34, 0x16, + 0x19, 0xd1, 0x0d, 0xff, 0x0c, 0x5b, 0x8f, 0xad, 0xb0, 0xd0, 0xef, 0xf8, 0xad, 0x36, 0x18, 0xd2, + 0xa2, 0x5f, 0x41, 0x9b, 0xf1, 0x93, 0x19, 0x8f, 0x60, 0x63, 0x61, 0x61, 0x4d, 0x5b, 0xda, 0xb7, + 0xf3, 0x26, 0xfb, 0x96, 0x9c, 0x4d, 0xb2, 0xf4, 0x7b, 0xe6, 0xa7, 0xde, 0x14, 0xf6, 0x62, 0x31, + 0x5d, 0x41, 0xd3, 0x83, 0xb3, 0x54, 0xda, 0x9b, 0x8c, 0x9d, 0x5f, 0xbe, 0xb3, 0xc8, 0x44, 0xa4, + 0x98, 0x27, 0x81, 0xc8, 0x92, 0x30, 0xa1, 0xdc, 0x7c, 0x30, 0xc2, 0xf2, 0x2f, 0x2c, 0x59, 0xfe, + 0xd2, 0x77, 0xe9, 0x5b, 0x92, 0xca, 0x9b, 0x77, 0x06, 0xf9, 0xf5, 0xbf, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xc5, 0x05, 0xbf, 0x79, 0xc0, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/pubsub/v1/pubsub.pb.go b/vendor/google.golang.org/genproto/googleapis/pubsub/v1/pubsub.pb.go new file mode 100644 index 0000000..0d81dd1 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/pubsub/v1/pubsub.pb.go @@ -0,0 +1,2330 @@ +// Code generated by protoc-gen-go. +// source: google/pubsub/v1/pubsub.proto +// DO NOT EDIT! + +/* +Package pubsub is a generated protocol buffer package. + +It is generated from these files: + google/pubsub/v1/pubsub.proto + +It has these top-level messages: + Topic + PubsubMessage + GetTopicRequest + PublishRequest + PublishResponse + ListTopicsRequest + ListTopicsResponse + ListTopicSubscriptionsRequest + ListTopicSubscriptionsResponse + DeleteTopicRequest + Subscription + PushConfig + ReceivedMessage + GetSubscriptionRequest + UpdateSubscriptionRequest + ListSubscriptionsRequest + ListSubscriptionsResponse + DeleteSubscriptionRequest + ModifyPushConfigRequest + PullRequest + PullResponse + ModifyAckDeadlineRequest + AcknowledgeRequest + StreamingPullRequest + StreamingPullResponse + CreateSnapshotRequest + Snapshot + ListSnapshotsRequest + ListSnapshotsResponse + DeleteSnapshotRequest + SeekRequest + SeekResponse +*/ +package pubsub + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A topic resource. +type Topic struct { + // The name of the topic. It must have the format + // `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter, + // and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), + // underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent + // signs (`%`). It must be between 3 and 255 characters in length, and it + // must not start with `"goog"`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *Topic) Reset() { *m = Topic{} } +func (m *Topic) String() string { return proto.CompactTextString(m) } +func (*Topic) ProtoMessage() {} +func (*Topic) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Topic) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A message data and its attributes. The message payload must not be empty; +// it must contain either a non-empty data field, or at least one attribute. +type PubsubMessage struct { + // The message payload. + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + // Optional attributes for this message. + Attributes map[string]string `protobuf:"bytes,2,rep,name=attributes" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // ID of this message, assigned by the server when the message is published. + // Guaranteed to be unique within the topic. This value may be read by a + // subscriber that receives a `PubsubMessage` via a `Pull` call or a push + // delivery. It must not be populated by the publisher in a `Publish` call. + MessageId string `protobuf:"bytes,3,opt,name=message_id,json=messageId" json:"message_id,omitempty"` + // The time at which the message was published, populated by the server when + // it receives the `Publish` call. It must not be populated by the + // publisher in a `Publish` call. + PublishTime *google_protobuf4.Timestamp `protobuf:"bytes,4,opt,name=publish_time,json=publishTime" json:"publish_time,omitempty"` +} + +func (m *PubsubMessage) Reset() { *m = PubsubMessage{} } +func (m *PubsubMessage) String() string { return proto.CompactTextString(m) } +func (*PubsubMessage) ProtoMessage() {} +func (*PubsubMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *PubsubMessage) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +func (m *PubsubMessage) GetAttributes() map[string]string { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *PubsubMessage) GetMessageId() string { + if m != nil { + return m.MessageId + } + return "" +} + +func (m *PubsubMessage) GetPublishTime() *google_protobuf4.Timestamp { + if m != nil { + return m.PublishTime + } + return nil +} + +// Request for the GetTopic method. +type GetTopicRequest struct { + // The name of the topic to get. + // Format is `projects/{project}/topics/{topic}`. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` +} + +func (m *GetTopicRequest) Reset() { *m = GetTopicRequest{} } +func (m *GetTopicRequest) String() string { return proto.CompactTextString(m) } +func (*GetTopicRequest) ProtoMessage() {} +func (*GetTopicRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *GetTopicRequest) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +// Request for the Publish method. +type PublishRequest struct { + // The messages in the request will be published on this topic. + // Format is `projects/{project}/topics/{topic}`. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + // The messages to publish. + Messages []*PubsubMessage `protobuf:"bytes,2,rep,name=messages" json:"messages,omitempty"` +} + +func (m *PublishRequest) Reset() { *m = PublishRequest{} } +func (m *PublishRequest) String() string { return proto.CompactTextString(m) } +func (*PublishRequest) ProtoMessage() {} +func (*PublishRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *PublishRequest) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +func (m *PublishRequest) GetMessages() []*PubsubMessage { + if m != nil { + return m.Messages + } + return nil +} + +// Response for the `Publish` method. +type PublishResponse struct { + // The server-assigned ID of each published message, in the same order as + // the messages in the request. IDs are guaranteed to be unique within + // the topic. + MessageIds []string `protobuf:"bytes,1,rep,name=message_ids,json=messageIds" json:"message_ids,omitempty"` +} + +func (m *PublishResponse) Reset() { *m = PublishResponse{} } +func (m *PublishResponse) String() string { return proto.CompactTextString(m) } +func (*PublishResponse) ProtoMessage() {} +func (*PublishResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *PublishResponse) GetMessageIds() []string { + if m != nil { + return m.MessageIds + } + return nil +} + +// Request for the `ListTopics` method. +type ListTopicsRequest struct { + // The name of the cloud project that topics belong to. + // Format is `projects/{project}`. + Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` + // Maximum number of topics to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last `ListTopicsResponse`; indicates that this is + // a continuation of a prior `ListTopics` call, and that the system should + // return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListTopicsRequest) Reset() { *m = ListTopicsRequest{} } +func (m *ListTopicsRequest) String() string { return proto.CompactTextString(m) } +func (*ListTopicsRequest) ProtoMessage() {} +func (*ListTopicsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ListTopicsRequest) GetProject() string { + if m != nil { + return m.Project + } + return "" +} + +func (m *ListTopicsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTopicsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the `ListTopics` method. +type ListTopicsResponse struct { + // The resulting topics. + Topics []*Topic `protobuf:"bytes,1,rep,name=topics" json:"topics,omitempty"` + // If not empty, indicates that there may be more topics that match the + // request; this value should be passed in a new `ListTopicsRequest`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTopicsResponse) Reset() { *m = ListTopicsResponse{} } +func (m *ListTopicsResponse) String() string { return proto.CompactTextString(m) } +func (*ListTopicsResponse) ProtoMessage() {} +func (*ListTopicsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ListTopicsResponse) GetTopics() []*Topic { + if m != nil { + return m.Topics + } + return nil +} + +func (m *ListTopicsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the `ListTopicSubscriptions` method. +type ListTopicSubscriptionsRequest struct { + // The name of the topic that subscriptions are attached to. + // Format is `projects/{project}/topics/{topic}`. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + // Maximum number of subscription names to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last `ListTopicSubscriptionsResponse`; indicates + // that this is a continuation of a prior `ListTopicSubscriptions` call, and + // that the system should return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListTopicSubscriptionsRequest) Reset() { *m = ListTopicSubscriptionsRequest{} } +func (m *ListTopicSubscriptionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListTopicSubscriptionsRequest) ProtoMessage() {} +func (*ListTopicSubscriptionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ListTopicSubscriptionsRequest) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +func (m *ListTopicSubscriptionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTopicSubscriptionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the `ListTopicSubscriptions` method. +type ListTopicSubscriptionsResponse struct { + // The names of the subscriptions that match the request. + Subscriptions []string `protobuf:"bytes,1,rep,name=subscriptions" json:"subscriptions,omitempty"` + // If not empty, indicates that there may be more subscriptions that match + // the request; this value should be passed in a new + // `ListTopicSubscriptionsRequest` to get more subscriptions. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTopicSubscriptionsResponse) Reset() { *m = ListTopicSubscriptionsResponse{} } +func (m *ListTopicSubscriptionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListTopicSubscriptionsResponse) ProtoMessage() {} +func (*ListTopicSubscriptionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ListTopicSubscriptionsResponse) GetSubscriptions() []string { + if m != nil { + return m.Subscriptions + } + return nil +} + +func (m *ListTopicSubscriptionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the `DeleteTopic` method. +type DeleteTopicRequest struct { + // Name of the topic to delete. + // Format is `projects/{project}/topics/{topic}`. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` +} + +func (m *DeleteTopicRequest) Reset() { *m = DeleteTopicRequest{} } +func (m *DeleteTopicRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteTopicRequest) ProtoMessage() {} +func (*DeleteTopicRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeleteTopicRequest) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +// A subscription resource. +type Subscription struct { + // The name of the subscription. It must have the format + // `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must + // start with a letter, and contain only letters (`[A-Za-z]`), numbers + // (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`), + // plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters + // in length, and it must not start with `"goog"`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the topic from which this subscription is receiving messages. + // Format is `projects/{project}/topics/{topic}`. + // The value of this field will be `_deleted-topic_` if the topic has been + // deleted. + Topic string `protobuf:"bytes,2,opt,name=topic" json:"topic,omitempty"` + // If push delivery is used with this subscription, this field is + // used to configure it. An empty `pushConfig` signifies that the subscriber + // will pull and ack messages using API methods. + PushConfig *PushConfig `protobuf:"bytes,4,opt,name=push_config,json=pushConfig" json:"push_config,omitempty"` + // This value is the maximum time after a subscriber receives a message + // before the subscriber should acknowledge the message. After message + // delivery but before the ack deadline expires and before the message is + // acknowledged, it is an outstanding message and will not be delivered + // again during that time (on a best-effort basis). + // + // For pull subscriptions, this value is used as the initial value for the ack + // deadline. To override this value for a given message, call + // `ModifyAckDeadline` with the corresponding `ack_id` if using + // pull. + // The minimum custom deadline you can specify is 10 seconds. + // The maximum custom deadline you can specify is 600 seconds (10 minutes). + // If this parameter is 0, a default value of 10 seconds is used. + // + // For push delivery, this value is also used to set the request timeout for + // the call to the push endpoint. + // + // If the subscriber never acknowledges the message, the Pub/Sub + // system will eventually redeliver the message. + AckDeadlineSeconds int32 `protobuf:"varint,5,opt,name=ack_deadline_seconds,json=ackDeadlineSeconds" json:"ack_deadline_seconds,omitempty"` + // Indicates whether to retain acknowledged messages. If true, then + // messages are not expunged from the subscription's backlog, even if they are + // acknowledged, until they fall out of the `message_retention_duration` + // window. + RetainAckedMessages bool `protobuf:"varint,7,opt,name=retain_acked_messages,json=retainAckedMessages" json:"retain_acked_messages,omitempty"` + // How long to retain unacknowledged messages in the subscription's backlog, + // from the moment a message is published. + // If `retain_acked_messages` is true, then this also configures the retention + // of acknowledged messages, and thus configures how far back in time a `Seek` + // can be done. Defaults to 7 days. Cannot be more than 7 days or less than 10 + // minutes. + MessageRetentionDuration *google_protobuf1.Duration `protobuf:"bytes,8,opt,name=message_retention_duration,json=messageRetentionDuration" json:"message_retention_duration,omitempty"` +} + +func (m *Subscription) Reset() { *m = Subscription{} } +func (m *Subscription) String() string { return proto.CompactTextString(m) } +func (*Subscription) ProtoMessage() {} +func (*Subscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *Subscription) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Subscription) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +func (m *Subscription) GetPushConfig() *PushConfig { + if m != nil { + return m.PushConfig + } + return nil +} + +func (m *Subscription) GetAckDeadlineSeconds() int32 { + if m != nil { + return m.AckDeadlineSeconds + } + return 0 +} + +func (m *Subscription) GetRetainAckedMessages() bool { + if m != nil { + return m.RetainAckedMessages + } + return false +} + +func (m *Subscription) GetMessageRetentionDuration() *google_protobuf1.Duration { + if m != nil { + return m.MessageRetentionDuration + } + return nil +} + +// Configuration for a push delivery endpoint. +type PushConfig struct { + // A URL locating the endpoint to which messages should be pushed. + // For example, a Webhook endpoint might use "https://example.com/push". + PushEndpoint string `protobuf:"bytes,1,opt,name=push_endpoint,json=pushEndpoint" json:"push_endpoint,omitempty"` + // Endpoint configuration attributes. + // + // Every endpoint has a set of API supported attributes that can be used to + // control different aspects of the message delivery. + // + // The currently supported attribute is `x-goog-version`, which you can + // use to change the format of the pushed message. This attribute + // indicates the version of the data expected by the endpoint. This + // controls the shape of the pushed message (i.e., its fields and metadata). + // The endpoint version is based on the version of the Pub/Sub API. + // + // If not present during the `CreateSubscription` call, it will default to + // the version of the API used to make such call. If not present during a + // `ModifyPushConfig` call, its value will not be changed. `GetSubscription` + // calls will always return a valid version, even if the subscription was + // created without this attribute. + // + // The possible values for this attribute are: + // + // * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. + // * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API. + Attributes map[string]string `protobuf:"bytes,2,rep,name=attributes" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *PushConfig) Reset() { *m = PushConfig{} } +func (m *PushConfig) String() string { return proto.CompactTextString(m) } +func (*PushConfig) ProtoMessage() {} +func (*PushConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *PushConfig) GetPushEndpoint() string { + if m != nil { + return m.PushEndpoint + } + return "" +} + +func (m *PushConfig) GetAttributes() map[string]string { + if m != nil { + return m.Attributes + } + return nil +} + +// A message and its corresponding acknowledgment ID. +type ReceivedMessage struct { + // This ID can be used to acknowledge the received message. + AckId string `protobuf:"bytes,1,opt,name=ack_id,json=ackId" json:"ack_id,omitempty"` + // The message. + Message *PubsubMessage `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` +} + +func (m *ReceivedMessage) Reset() { *m = ReceivedMessage{} } +func (m *ReceivedMessage) String() string { return proto.CompactTextString(m) } +func (*ReceivedMessage) ProtoMessage() {} +func (*ReceivedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ReceivedMessage) GetAckId() string { + if m != nil { + return m.AckId + } + return "" +} + +func (m *ReceivedMessage) GetMessage() *PubsubMessage { + if m != nil { + return m.Message + } + return nil +} + +// Request for the GetSubscription method. +type GetSubscriptionRequest struct { + // The name of the subscription to get. + // Format is `projects/{project}/subscriptions/{sub}`. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` +} + +func (m *GetSubscriptionRequest) Reset() { *m = GetSubscriptionRequest{} } +func (m *GetSubscriptionRequest) String() string { return proto.CompactTextString(m) } +func (*GetSubscriptionRequest) ProtoMessage() {} +func (*GetSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *GetSubscriptionRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +// Request for the UpdateSubscription method. +type UpdateSubscriptionRequest struct { + // The updated subscription object. + Subscription *Subscription `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // Indicates which fields in the provided subscription to update. + // Must be specified and non-empty. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateSubscriptionRequest) Reset() { *m = UpdateSubscriptionRequest{} } +func (m *UpdateSubscriptionRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateSubscriptionRequest) ProtoMessage() {} +func (*UpdateSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *UpdateSubscriptionRequest) GetSubscription() *Subscription { + if m != nil { + return m.Subscription + } + return nil +} + +func (m *UpdateSubscriptionRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request for the `ListSubscriptions` method. +type ListSubscriptionsRequest struct { + // The name of the cloud project that subscriptions belong to. + // Format is `projects/{project}`. + Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` + // Maximum number of subscriptions to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last `ListSubscriptionsResponse`; indicates that + // this is a continuation of a prior `ListSubscriptions` call, and that the + // system should return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListSubscriptionsRequest) Reset() { *m = ListSubscriptionsRequest{} } +func (m *ListSubscriptionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSubscriptionsRequest) ProtoMessage() {} +func (*ListSubscriptionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *ListSubscriptionsRequest) GetProject() string { + if m != nil { + return m.Project + } + return "" +} + +func (m *ListSubscriptionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListSubscriptionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the `ListSubscriptions` method. +type ListSubscriptionsResponse struct { + // The subscriptions that match the request. + Subscriptions []*Subscription `protobuf:"bytes,1,rep,name=subscriptions" json:"subscriptions,omitempty"` + // If not empty, indicates that there may be more subscriptions that match + // the request; this value should be passed in a new + // `ListSubscriptionsRequest` to get more subscriptions. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListSubscriptionsResponse) Reset() { *m = ListSubscriptionsResponse{} } +func (m *ListSubscriptionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSubscriptionsResponse) ProtoMessage() {} +func (*ListSubscriptionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *ListSubscriptionsResponse) GetSubscriptions() []*Subscription { + if m != nil { + return m.Subscriptions + } + return nil +} + +func (m *ListSubscriptionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the DeleteSubscription method. +type DeleteSubscriptionRequest struct { + // The subscription to delete. + // Format is `projects/{project}/subscriptions/{sub}`. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` +} + +func (m *DeleteSubscriptionRequest) Reset() { *m = DeleteSubscriptionRequest{} } +func (m *DeleteSubscriptionRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSubscriptionRequest) ProtoMessage() {} +func (*DeleteSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *DeleteSubscriptionRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +// Request for the ModifyPushConfig method. +type ModifyPushConfigRequest struct { + // The name of the subscription. + // Format is `projects/{project}/subscriptions/{sub}`. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // The push configuration for future deliveries. + // + // An empty `pushConfig` indicates that the Pub/Sub system should + // stop pushing messages from the given subscription and allow + // messages to be pulled and acknowledged - effectively pausing + // the subscription if `Pull` is not called. + PushConfig *PushConfig `protobuf:"bytes,2,opt,name=push_config,json=pushConfig" json:"push_config,omitempty"` +} + +func (m *ModifyPushConfigRequest) Reset() { *m = ModifyPushConfigRequest{} } +func (m *ModifyPushConfigRequest) String() string { return proto.CompactTextString(m) } +func (*ModifyPushConfigRequest) ProtoMessage() {} +func (*ModifyPushConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *ModifyPushConfigRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *ModifyPushConfigRequest) GetPushConfig() *PushConfig { + if m != nil { + return m.PushConfig + } + return nil +} + +// Request for the `Pull` method. +type PullRequest struct { + // The subscription from which messages should be pulled. + // Format is `projects/{project}/subscriptions/{sub}`. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // If this field set to true, the system will respond immediately even if + // it there are no messages available to return in the `Pull` response. + // Otherwise, the system may wait (for a bounded amount of time) until at + // least one message is available, rather than returning no messages. The + // client may cancel the request if it does not wish to wait any longer for + // the response. + ReturnImmediately bool `protobuf:"varint,2,opt,name=return_immediately,json=returnImmediately" json:"return_immediately,omitempty"` + // The maximum number of messages returned for this request. The Pub/Sub + // system may return fewer than the number specified. + MaxMessages int32 `protobuf:"varint,3,opt,name=max_messages,json=maxMessages" json:"max_messages,omitempty"` +} + +func (m *PullRequest) Reset() { *m = PullRequest{} } +func (m *PullRequest) String() string { return proto.CompactTextString(m) } +func (*PullRequest) ProtoMessage() {} +func (*PullRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *PullRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *PullRequest) GetReturnImmediately() bool { + if m != nil { + return m.ReturnImmediately + } + return false +} + +func (m *PullRequest) GetMaxMessages() int32 { + if m != nil { + return m.MaxMessages + } + return 0 +} + +// Response for the `Pull` method. +type PullResponse struct { + // Received Pub/Sub messages. The Pub/Sub system will return zero messages if + // there are no more available in the backlog. The Pub/Sub system may return + // fewer than the `maxMessages` requested even if there are more messages + // available in the backlog. + ReceivedMessages []*ReceivedMessage `protobuf:"bytes,1,rep,name=received_messages,json=receivedMessages" json:"received_messages,omitempty"` +} + +func (m *PullResponse) Reset() { *m = PullResponse{} } +func (m *PullResponse) String() string { return proto.CompactTextString(m) } +func (*PullResponse) ProtoMessage() {} +func (*PullResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *PullResponse) GetReceivedMessages() []*ReceivedMessage { + if m != nil { + return m.ReceivedMessages + } + return nil +} + +// Request for the ModifyAckDeadline method. +type ModifyAckDeadlineRequest struct { + // The name of the subscription. + // Format is `projects/{project}/subscriptions/{sub}`. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // List of acknowledgment IDs. + AckIds []string `protobuf:"bytes,4,rep,name=ack_ids,json=ackIds" json:"ack_ids,omitempty"` + // The new ack deadline with respect to the time this request was sent to + // the Pub/Sub system. For example, if the value is 10, the new + // ack deadline will expire 10 seconds after the `ModifyAckDeadline` call + // was made. Specifying zero may immediately make the message available for + // another pull request. + // The minimum deadline you can specify is 0 seconds. + // The maximum deadline you can specify is 600 seconds (10 minutes). + AckDeadlineSeconds int32 `protobuf:"varint,3,opt,name=ack_deadline_seconds,json=ackDeadlineSeconds" json:"ack_deadline_seconds,omitempty"` +} + +func (m *ModifyAckDeadlineRequest) Reset() { *m = ModifyAckDeadlineRequest{} } +func (m *ModifyAckDeadlineRequest) String() string { return proto.CompactTextString(m) } +func (*ModifyAckDeadlineRequest) ProtoMessage() {} +func (*ModifyAckDeadlineRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *ModifyAckDeadlineRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *ModifyAckDeadlineRequest) GetAckIds() []string { + if m != nil { + return m.AckIds + } + return nil +} + +func (m *ModifyAckDeadlineRequest) GetAckDeadlineSeconds() int32 { + if m != nil { + return m.AckDeadlineSeconds + } + return 0 +} + +// Request for the Acknowledge method. +type AcknowledgeRequest struct { + // The subscription whose message is being acknowledged. + // Format is `projects/{project}/subscriptions/{sub}`. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // The acknowledgment ID for the messages being acknowledged that was returned + // by the Pub/Sub system in the `Pull` response. Must not be empty. + AckIds []string `protobuf:"bytes,2,rep,name=ack_ids,json=ackIds" json:"ack_ids,omitempty"` +} + +func (m *AcknowledgeRequest) Reset() { *m = AcknowledgeRequest{} } +func (m *AcknowledgeRequest) String() string { return proto.CompactTextString(m) } +func (*AcknowledgeRequest) ProtoMessage() {} +func (*AcknowledgeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *AcknowledgeRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *AcknowledgeRequest) GetAckIds() []string { + if m != nil { + return m.AckIds + } + return nil +} + +// Request for the `StreamingPull` streaming RPC method. This request is used to +// establish the initial stream as well as to stream acknowledgements and ack +// deadline modifications from the client to the server. +type StreamingPullRequest struct { + // The subscription for which to initialize the new stream. This must be + // provided in the first request on the stream, and must not be set in + // subsequent requests from client to server. + // Format is `projects/{project}/subscriptions/{sub}`. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // List of acknowledgement IDs for acknowledging previously received messages + // (received on this stream or a different stream). If an ack ID has expired, + // the corresponding message may be redelivered later. Acknowledging a message + // more than once will not result in an error. If the acknowledgement ID is + // malformed, the stream will be aborted with status `INVALID_ARGUMENT`. + AckIds []string `protobuf:"bytes,2,rep,name=ack_ids,json=ackIds" json:"ack_ids,omitempty"` + // The list of new ack deadlines for the IDs listed in + // `modify_deadline_ack_ids`. The size of this list must be the same as the + // size of `modify_deadline_ack_ids`. If it differs the stream will be aborted + // with `INVALID_ARGUMENT`. Each element in this list is applied to the + // element in the same position in `modify_deadline_ack_ids`. The new ack + // deadline is with respect to the time this request was sent to the Pub/Sub + // system. Must be >= 0. For example, if the value is 10, the new ack deadline + // will expire 10 seconds after this request is received. If the value is 0, + // the message is immediately made available for another streaming or + // non-streaming pull request. If the value is < 0 (an error), the stream will + // be aborted with status `INVALID_ARGUMENT`. + ModifyDeadlineSeconds []int32 `protobuf:"varint,3,rep,packed,name=modify_deadline_seconds,json=modifyDeadlineSeconds" json:"modify_deadline_seconds,omitempty"` + // List of acknowledgement IDs whose deadline will be modified based on the + // corresponding element in `modify_deadline_seconds`. This field can be used + // to indicate that more time is needed to process a message by the + // subscriber, or to make the message available for redelivery if the + // processing was interrupted. + ModifyDeadlineAckIds []string `protobuf:"bytes,4,rep,name=modify_deadline_ack_ids,json=modifyDeadlineAckIds" json:"modify_deadline_ack_ids,omitempty"` + // The ack deadline to use for the stream. This must be provided in the + // first request on the stream, but it can also be updated on subsequent + // requests from client to server. The minimum deadline you can specify is 10 + // seconds. The maximum deadline you can specify is 600 seconds (10 minutes). + StreamAckDeadlineSeconds int32 `protobuf:"varint,5,opt,name=stream_ack_deadline_seconds,json=streamAckDeadlineSeconds" json:"stream_ack_deadline_seconds,omitempty"` +} + +func (m *StreamingPullRequest) Reset() { *m = StreamingPullRequest{} } +func (m *StreamingPullRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingPullRequest) ProtoMessage() {} +func (*StreamingPullRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *StreamingPullRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *StreamingPullRequest) GetAckIds() []string { + if m != nil { + return m.AckIds + } + return nil +} + +func (m *StreamingPullRequest) GetModifyDeadlineSeconds() []int32 { + if m != nil { + return m.ModifyDeadlineSeconds + } + return nil +} + +func (m *StreamingPullRequest) GetModifyDeadlineAckIds() []string { + if m != nil { + return m.ModifyDeadlineAckIds + } + return nil +} + +func (m *StreamingPullRequest) GetStreamAckDeadlineSeconds() int32 { + if m != nil { + return m.StreamAckDeadlineSeconds + } + return 0 +} + +// Response for the `StreamingPull` method. This response is used to stream +// messages from the server to the client. +type StreamingPullResponse struct { + // Received Pub/Sub messages. This will not be empty. + ReceivedMessages []*ReceivedMessage `protobuf:"bytes,1,rep,name=received_messages,json=receivedMessages" json:"received_messages,omitempty"` +} + +func (m *StreamingPullResponse) Reset() { *m = StreamingPullResponse{} } +func (m *StreamingPullResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingPullResponse) ProtoMessage() {} +func (*StreamingPullResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *StreamingPullResponse) GetReceivedMessages() []*ReceivedMessage { + if m != nil { + return m.ReceivedMessages + } + return nil +} + +// Request for the `CreateSnapshot` method. +type CreateSnapshotRequest struct { + // Optional user-provided name for this snapshot. + // If the name is not provided in the request, the server will assign a random + // name for this snapshot on the same project as the subscription. + // Note that for REST API requests, you must specify a name. + // Format is `projects/{project}/snapshots/{snap}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The subscription whose backlog the snapshot retains. + // Specifically, the created snapshot is guaranteed to retain: + // (a) The existing backlog on the subscription. More precisely, this is + // defined as the messages in the subscription's backlog that are + // unacknowledged upon the successful completion of the + // `CreateSnapshot` request; as well as: + // (b) Any messages published to the subscription's topic following the + // successful completion of the CreateSnapshot request. + // Format is `projects/{project}/subscriptions/{sub}`. + Subscription string `protobuf:"bytes,2,opt,name=subscription" json:"subscription,omitempty"` +} + +func (m *CreateSnapshotRequest) Reset() { *m = CreateSnapshotRequest{} } +func (m *CreateSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*CreateSnapshotRequest) ProtoMessage() {} +func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *CreateSnapshotRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateSnapshotRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +// A snapshot resource. +type Snapshot struct { + // The name of the snapshot. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the topic from which this snapshot is retaining messages. + Topic string `protobuf:"bytes,2,opt,name=topic" json:"topic,omitempty"` + // The snapshot is guaranteed to exist up until this time. + // A newly-created snapshot expires no later than 7 days from the time of its + // creation. Its exact lifetime is determined at creation by the existing + // backlog in the source subscription. Specifically, the lifetime of the + // snapshot is `7 days - (age of oldest unacked message in the subscription)`. + // For example, consider a subscription whose oldest unacked message is 3 days + // old. If a snapshot is created from this subscription, the snapshot -- which + // will always capture this 3-day-old backlog as long as the snapshot + // exists -- will expire in 4 days. + ExpirationTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=expiration_time,json=expirationTime" json:"expiration_time,omitempty"` +} + +func (m *Snapshot) Reset() { *m = Snapshot{} } +func (m *Snapshot) String() string { return proto.CompactTextString(m) } +func (*Snapshot) ProtoMessage() {} +func (*Snapshot) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *Snapshot) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Snapshot) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +func (m *Snapshot) GetExpirationTime() *google_protobuf4.Timestamp { + if m != nil { + return m.ExpirationTime + } + return nil +} + +// Request for the `ListSnapshots` method. +type ListSnapshotsRequest struct { + // The name of the cloud project that snapshots belong to. + // Format is `projects/{project}`. + Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` + // Maximum number of snapshots to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last `ListSnapshotsResponse`; indicates that this + // is a continuation of a prior `ListSnapshots` call, and that the system + // should return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListSnapshotsRequest) Reset() { *m = ListSnapshotsRequest{} } +func (m *ListSnapshotsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsRequest) ProtoMessage() {} +func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *ListSnapshotsRequest) GetProject() string { + if m != nil { + return m.Project + } + return "" +} + +func (m *ListSnapshotsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListSnapshotsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the `ListSnapshots` method. +type ListSnapshotsResponse struct { + // The resulting snapshots. + Snapshots []*Snapshot `protobuf:"bytes,1,rep,name=snapshots" json:"snapshots,omitempty"` + // If not empty, indicates that there may be more snapshot that match the + // request; this value should be passed in a new `ListSnapshotsRequest`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListSnapshotsResponse) Reset() { *m = ListSnapshotsResponse{} } +func (m *ListSnapshotsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsResponse) ProtoMessage() {} +func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +func (m *ListSnapshotsResponse) GetSnapshots() []*Snapshot { + if m != nil { + return m.Snapshots + } + return nil +} + +func (m *ListSnapshotsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the `DeleteSnapshot` method. +type DeleteSnapshotRequest struct { + // The name of the snapshot to delete. + // Format is `projects/{project}/snapshots/{snap}`. + Snapshot string `protobuf:"bytes,1,opt,name=snapshot" json:"snapshot,omitempty"` +} + +func (m *DeleteSnapshotRequest) Reset() { *m = DeleteSnapshotRequest{} } +func (m *DeleteSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSnapshotRequest) ProtoMessage() {} +func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +func (m *DeleteSnapshotRequest) GetSnapshot() string { + if m != nil { + return m.Snapshot + } + return "" +} + +// Request for the `Seek` method. +type SeekRequest struct { + // The subscription to affect. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // Types that are valid to be assigned to Target: + // *SeekRequest_Time + // *SeekRequest_Snapshot + Target isSeekRequest_Target `protobuf_oneof:"target"` +} + +func (m *SeekRequest) Reset() { *m = SeekRequest{} } +func (m *SeekRequest) String() string { return proto.CompactTextString(m) } +func (*SeekRequest) ProtoMessage() {} +func (*SeekRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +type isSeekRequest_Target interface { + isSeekRequest_Target() +} + +type SeekRequest_Time struct { + Time *google_protobuf4.Timestamp `protobuf:"bytes,2,opt,name=time,oneof"` +} +type SeekRequest_Snapshot struct { + Snapshot string `protobuf:"bytes,3,opt,name=snapshot,oneof"` +} + +func (*SeekRequest_Time) isSeekRequest_Target() {} +func (*SeekRequest_Snapshot) isSeekRequest_Target() {} + +func (m *SeekRequest) GetTarget() isSeekRequest_Target { + if m != nil { + return m.Target + } + return nil +} + +func (m *SeekRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *SeekRequest) GetTime() *google_protobuf4.Timestamp { + if x, ok := m.GetTarget().(*SeekRequest_Time); ok { + return x.Time + } + return nil +} + +func (m *SeekRequest) GetSnapshot() string { + if x, ok := m.GetTarget().(*SeekRequest_Snapshot); ok { + return x.Snapshot + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SeekRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SeekRequest_OneofMarshaler, _SeekRequest_OneofUnmarshaler, _SeekRequest_OneofSizer, []interface{}{ + (*SeekRequest_Time)(nil), + (*SeekRequest_Snapshot)(nil), + } +} + +func _SeekRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SeekRequest) + // target + switch x := m.Target.(type) { + case *SeekRequest_Time: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Time); err != nil { + return err + } + case *SeekRequest_Snapshot: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Snapshot) + case nil: + default: + return fmt.Errorf("SeekRequest.Target has unexpected type %T", x) + } + return nil +} + +func _SeekRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SeekRequest) + switch tag { + case 2: // target.time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf4.Timestamp) + err := b.DecodeMessage(msg) + m.Target = &SeekRequest_Time{msg} + return true, err + case 3: // target.snapshot + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Target = &SeekRequest_Snapshot{x} + return true, err + default: + return false, nil + } +} + +func _SeekRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SeekRequest) + // target + switch x := m.Target.(type) { + case *SeekRequest_Time: + s := proto.Size(x.Time) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *SeekRequest_Snapshot: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Snapshot))) + n += len(x.Snapshot) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type SeekResponse struct { +} + +func (m *SeekResponse) Reset() { *m = SeekResponse{} } +func (m *SeekResponse) String() string { return proto.CompactTextString(m) } +func (*SeekResponse) ProtoMessage() {} +func (*SeekResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } + +func init() { + proto.RegisterType((*Topic)(nil), "google.pubsub.v1.Topic") + proto.RegisterType((*PubsubMessage)(nil), "google.pubsub.v1.PubsubMessage") + proto.RegisterType((*GetTopicRequest)(nil), "google.pubsub.v1.GetTopicRequest") + proto.RegisterType((*PublishRequest)(nil), "google.pubsub.v1.PublishRequest") + proto.RegisterType((*PublishResponse)(nil), "google.pubsub.v1.PublishResponse") + proto.RegisterType((*ListTopicsRequest)(nil), "google.pubsub.v1.ListTopicsRequest") + proto.RegisterType((*ListTopicsResponse)(nil), "google.pubsub.v1.ListTopicsResponse") + proto.RegisterType((*ListTopicSubscriptionsRequest)(nil), "google.pubsub.v1.ListTopicSubscriptionsRequest") + proto.RegisterType((*ListTopicSubscriptionsResponse)(nil), "google.pubsub.v1.ListTopicSubscriptionsResponse") + proto.RegisterType((*DeleteTopicRequest)(nil), "google.pubsub.v1.DeleteTopicRequest") + proto.RegisterType((*Subscription)(nil), "google.pubsub.v1.Subscription") + proto.RegisterType((*PushConfig)(nil), "google.pubsub.v1.PushConfig") + proto.RegisterType((*ReceivedMessage)(nil), "google.pubsub.v1.ReceivedMessage") + proto.RegisterType((*GetSubscriptionRequest)(nil), "google.pubsub.v1.GetSubscriptionRequest") + proto.RegisterType((*UpdateSubscriptionRequest)(nil), "google.pubsub.v1.UpdateSubscriptionRequest") + proto.RegisterType((*ListSubscriptionsRequest)(nil), "google.pubsub.v1.ListSubscriptionsRequest") + proto.RegisterType((*ListSubscriptionsResponse)(nil), "google.pubsub.v1.ListSubscriptionsResponse") + proto.RegisterType((*DeleteSubscriptionRequest)(nil), "google.pubsub.v1.DeleteSubscriptionRequest") + proto.RegisterType((*ModifyPushConfigRequest)(nil), "google.pubsub.v1.ModifyPushConfigRequest") + proto.RegisterType((*PullRequest)(nil), "google.pubsub.v1.PullRequest") + proto.RegisterType((*PullResponse)(nil), "google.pubsub.v1.PullResponse") + proto.RegisterType((*ModifyAckDeadlineRequest)(nil), "google.pubsub.v1.ModifyAckDeadlineRequest") + proto.RegisterType((*AcknowledgeRequest)(nil), "google.pubsub.v1.AcknowledgeRequest") + proto.RegisterType((*StreamingPullRequest)(nil), "google.pubsub.v1.StreamingPullRequest") + proto.RegisterType((*StreamingPullResponse)(nil), "google.pubsub.v1.StreamingPullResponse") + proto.RegisterType((*CreateSnapshotRequest)(nil), "google.pubsub.v1.CreateSnapshotRequest") + proto.RegisterType((*Snapshot)(nil), "google.pubsub.v1.Snapshot") + proto.RegisterType((*ListSnapshotsRequest)(nil), "google.pubsub.v1.ListSnapshotsRequest") + proto.RegisterType((*ListSnapshotsResponse)(nil), "google.pubsub.v1.ListSnapshotsResponse") + proto.RegisterType((*DeleteSnapshotRequest)(nil), "google.pubsub.v1.DeleteSnapshotRequest") + proto.RegisterType((*SeekRequest)(nil), "google.pubsub.v1.SeekRequest") + proto.RegisterType((*SeekResponse)(nil), "google.pubsub.v1.SeekResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Subscriber service + +type SubscriberClient interface { + // Creates a subscription to a given topic. + // If the subscription already exists, returns `ALREADY_EXISTS`. + // If the corresponding topic doesn't exist, returns `NOT_FOUND`. + // + // If the name is not provided in the request, the server will assign a random + // name for this subscription on the same project as the topic, conforming + // to the + // [resource name format](https://cloud.google.com/pubsub/docs/overview#names). + // The generated name is populated in the returned Subscription object. + // Note that for REST API requests, you must specify a name in the request. + CreateSubscription(ctx context.Context, in *Subscription, opts ...grpc.CallOption) (*Subscription, error) + // Gets the configuration details of a subscription. + GetSubscription(ctx context.Context, in *GetSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) + // Updates an existing subscription. Note that certain properties of a + // subscription, such as its topic, are not modifiable. + UpdateSubscription(ctx context.Context, in *UpdateSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) + // Lists matching subscriptions. + ListSubscriptions(ctx context.Context, in *ListSubscriptionsRequest, opts ...grpc.CallOption) (*ListSubscriptionsResponse, error) + // Deletes an existing subscription. All messages retained in the subscription + // are immediately dropped. Calls to `Pull` after deletion will return + // `NOT_FOUND`. After a subscription is deleted, a new one may be created with + // the same name, but the new one has no association with the old + // subscription or its topic unless the same topic is specified. + DeleteSubscription(ctx context.Context, in *DeleteSubscriptionRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Modifies the ack deadline for a specific message. This method is useful + // to indicate that more time is needed to process a message by the + // subscriber, or to make the message available for redelivery if the + // processing was interrupted. Note that this does not modify the + // subscription-level `ackDeadlineSeconds` used for subsequent messages. + ModifyAckDeadline(ctx context.Context, in *ModifyAckDeadlineRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Acknowledges the messages associated with the `ack_ids` in the + // `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages + // from the subscription. + // + // Acknowledging a message whose ack deadline has expired may succeed, + // but such a message may be redelivered later. Acknowledging a message more + // than once will not result in an error. + Acknowledge(ctx context.Context, in *AcknowledgeRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Pulls messages from the server. Returns an empty list if there are no + // messages available in the backlog. The server may return `UNAVAILABLE` if + // there are too many concurrent pull requests pending for the given + // subscription. + Pull(ctx context.Context, in *PullRequest, opts ...grpc.CallOption) (*PullResponse, error) + // (EXPERIMENTAL) StreamingPull is an experimental feature. This RPC will + // respond with UNIMPLEMENTED errors unless you have been invited to test + // this feature. Contact cloud-pubsub@google.com with any questions. + // + // Establishes a stream with the server, which sends messages down to the + // client. The client streams acknowledgements and ack deadline modifications + // back to the server. The server will close the stream and return the status + // on any error. The server may close the stream with status `OK` to reassign + // server-side resources, in which case, the client should re-establish the + // stream. `UNAVAILABLE` may also be returned in the case of a transient error + // (e.g., a server restart). These should also be retried by the client. Flow + // control can be achieved by configuring the underlying RPC channel. + StreamingPull(ctx context.Context, opts ...grpc.CallOption) (Subscriber_StreamingPullClient, error) + // Modifies the `PushConfig` for a specified subscription. + // + // This may be used to change a push subscription to a pull one (signified by + // an empty `PushConfig`) or vice versa, or change the endpoint URL and other + // attributes of a push subscription. Messages will accumulate for delivery + // continuously through the call regardless of changes to the `PushConfig`. + ModifyPushConfig(ctx context.Context, in *ModifyPushConfigRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Lists the existing snapshots. + ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) + // Creates a snapshot from the requested subscription. + // If the snapshot already exists, returns `ALREADY_EXISTS`. + // If the requested subscription doesn't exist, returns `NOT_FOUND`. + // + // If the name is not provided in the request, the server will assign a random + // name for this snapshot on the same project as the subscription, conforming + // to the + // [resource name format](https://cloud.google.com/pubsub/docs/overview#names). + // The generated name is populated in the returned Snapshot object. + // Note that for REST API requests, you must specify a name in the request. + CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*Snapshot, error) + // Removes an existing snapshot. All messages retained in the snapshot + // are immediately dropped. After a snapshot is deleted, a new one may be + // created with the same name, but the new one has no association with the old + // snapshot or its subscription, unless the same subscription is specified. + DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Seeks an existing subscription to a point in time or to a given snapshot, + // whichever is provided in the request. + Seek(ctx context.Context, in *SeekRequest, opts ...grpc.CallOption) (*SeekResponse, error) +} + +type subscriberClient struct { + cc *grpc.ClientConn +} + +func NewSubscriberClient(cc *grpc.ClientConn) SubscriberClient { + return &subscriberClient{cc} +} + +func (c *subscriberClient) CreateSubscription(ctx context.Context, in *Subscription, opts ...grpc.CallOption) (*Subscription, error) { + out := new(Subscription) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/CreateSubscription", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) GetSubscription(ctx context.Context, in *GetSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) { + out := new(Subscription) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/GetSubscription", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) UpdateSubscription(ctx context.Context, in *UpdateSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) { + out := new(Subscription) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/UpdateSubscription", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) ListSubscriptions(ctx context.Context, in *ListSubscriptionsRequest, opts ...grpc.CallOption) (*ListSubscriptionsResponse, error) { + out := new(ListSubscriptionsResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/ListSubscriptions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) DeleteSubscription(ctx context.Context, in *DeleteSubscriptionRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/DeleteSubscription", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) ModifyAckDeadline(ctx context.Context, in *ModifyAckDeadlineRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/ModifyAckDeadline", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) Acknowledge(ctx context.Context, in *AcknowledgeRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/Acknowledge", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) Pull(ctx context.Context, in *PullRequest, opts ...grpc.CallOption) (*PullResponse, error) { + out := new(PullResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/Pull", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) StreamingPull(ctx context.Context, opts ...grpc.CallOption) (Subscriber_StreamingPullClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Subscriber_serviceDesc.Streams[0], c.cc, "/google.pubsub.v1.Subscriber/StreamingPull", opts...) + if err != nil { + return nil, err + } + x := &subscriberStreamingPullClient{stream} + return x, nil +} + +type Subscriber_StreamingPullClient interface { + Send(*StreamingPullRequest) error + Recv() (*StreamingPullResponse, error) + grpc.ClientStream +} + +type subscriberStreamingPullClient struct { + grpc.ClientStream +} + +func (x *subscriberStreamingPullClient) Send(m *StreamingPullRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *subscriberStreamingPullClient) Recv() (*StreamingPullResponse, error) { + m := new(StreamingPullResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *subscriberClient) ModifyPushConfig(ctx context.Context, in *ModifyPushConfigRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/ModifyPushConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) { + out := new(ListSnapshotsResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/ListSnapshots", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*Snapshot, error) { + out := new(Snapshot) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/CreateSnapshot", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/DeleteSnapshot", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) Seek(ctx context.Context, in *SeekRequest, opts ...grpc.CallOption) (*SeekResponse, error) { + out := new(SeekResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/Seek", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Subscriber service + +type SubscriberServer interface { + // Creates a subscription to a given topic. + // If the subscription already exists, returns `ALREADY_EXISTS`. + // If the corresponding topic doesn't exist, returns `NOT_FOUND`. + // + // If the name is not provided in the request, the server will assign a random + // name for this subscription on the same project as the topic, conforming + // to the + // [resource name format](https://cloud.google.com/pubsub/docs/overview#names). + // The generated name is populated in the returned Subscription object. + // Note that for REST API requests, you must specify a name in the request. + CreateSubscription(context.Context, *Subscription) (*Subscription, error) + // Gets the configuration details of a subscription. + GetSubscription(context.Context, *GetSubscriptionRequest) (*Subscription, error) + // Updates an existing subscription. Note that certain properties of a + // subscription, such as its topic, are not modifiable. + UpdateSubscription(context.Context, *UpdateSubscriptionRequest) (*Subscription, error) + // Lists matching subscriptions. + ListSubscriptions(context.Context, *ListSubscriptionsRequest) (*ListSubscriptionsResponse, error) + // Deletes an existing subscription. All messages retained in the subscription + // are immediately dropped. Calls to `Pull` after deletion will return + // `NOT_FOUND`. After a subscription is deleted, a new one may be created with + // the same name, but the new one has no association with the old + // subscription or its topic unless the same topic is specified. + DeleteSubscription(context.Context, *DeleteSubscriptionRequest) (*google_protobuf2.Empty, error) + // Modifies the ack deadline for a specific message. This method is useful + // to indicate that more time is needed to process a message by the + // subscriber, or to make the message available for redelivery if the + // processing was interrupted. Note that this does not modify the + // subscription-level `ackDeadlineSeconds` used for subsequent messages. + ModifyAckDeadline(context.Context, *ModifyAckDeadlineRequest) (*google_protobuf2.Empty, error) + // Acknowledges the messages associated with the `ack_ids` in the + // `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages + // from the subscription. + // + // Acknowledging a message whose ack deadline has expired may succeed, + // but such a message may be redelivered later. Acknowledging a message more + // than once will not result in an error. + Acknowledge(context.Context, *AcknowledgeRequest) (*google_protobuf2.Empty, error) + // Pulls messages from the server. Returns an empty list if there are no + // messages available in the backlog. The server may return `UNAVAILABLE` if + // there are too many concurrent pull requests pending for the given + // subscription. + Pull(context.Context, *PullRequest) (*PullResponse, error) + // (EXPERIMENTAL) StreamingPull is an experimental feature. This RPC will + // respond with UNIMPLEMENTED errors unless you have been invited to test + // this feature. Contact cloud-pubsub@google.com with any questions. + // + // Establishes a stream with the server, which sends messages down to the + // client. The client streams acknowledgements and ack deadline modifications + // back to the server. The server will close the stream and return the status + // on any error. The server may close the stream with status `OK` to reassign + // server-side resources, in which case, the client should re-establish the + // stream. `UNAVAILABLE` may also be returned in the case of a transient error + // (e.g., a server restart). These should also be retried by the client. Flow + // control can be achieved by configuring the underlying RPC channel. + StreamingPull(Subscriber_StreamingPullServer) error + // Modifies the `PushConfig` for a specified subscription. + // + // This may be used to change a push subscription to a pull one (signified by + // an empty `PushConfig`) or vice versa, or change the endpoint URL and other + // attributes of a push subscription. Messages will accumulate for delivery + // continuously through the call regardless of changes to the `PushConfig`. + ModifyPushConfig(context.Context, *ModifyPushConfigRequest) (*google_protobuf2.Empty, error) + // Lists the existing snapshots. + ListSnapshots(context.Context, *ListSnapshotsRequest) (*ListSnapshotsResponse, error) + // Creates a snapshot from the requested subscription. + // If the snapshot already exists, returns `ALREADY_EXISTS`. + // If the requested subscription doesn't exist, returns `NOT_FOUND`. + // + // If the name is not provided in the request, the server will assign a random + // name for this snapshot on the same project as the subscription, conforming + // to the + // [resource name format](https://cloud.google.com/pubsub/docs/overview#names). + // The generated name is populated in the returned Snapshot object. + // Note that for REST API requests, you must specify a name in the request. + CreateSnapshot(context.Context, *CreateSnapshotRequest) (*Snapshot, error) + // Removes an existing snapshot. All messages retained in the snapshot + // are immediately dropped. After a snapshot is deleted, a new one may be + // created with the same name, but the new one has no association with the old + // snapshot or its subscription, unless the same subscription is specified. + DeleteSnapshot(context.Context, *DeleteSnapshotRequest) (*google_protobuf2.Empty, error) + // Seeks an existing subscription to a point in time or to a given snapshot, + // whichever is provided in the request. + Seek(context.Context, *SeekRequest) (*SeekResponse, error) +} + +func RegisterSubscriberServer(s *grpc.Server, srv SubscriberServer) { + s.RegisterService(&_Subscriber_serviceDesc, srv) +} + +func _Subscriber_CreateSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Subscription) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).CreateSubscription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/CreateSubscription", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).CreateSubscription(ctx, req.(*Subscription)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_GetSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSubscriptionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).GetSubscription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/GetSubscription", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).GetSubscription(ctx, req.(*GetSubscriptionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_UpdateSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateSubscriptionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).UpdateSubscription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/UpdateSubscription", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).UpdateSubscription(ctx, req.(*UpdateSubscriptionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_ListSubscriptions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSubscriptionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).ListSubscriptions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/ListSubscriptions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).ListSubscriptions(ctx, req.(*ListSubscriptionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_DeleteSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSubscriptionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).DeleteSubscription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/DeleteSubscription", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).DeleteSubscription(ctx, req.(*DeleteSubscriptionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_ModifyAckDeadline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ModifyAckDeadlineRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).ModifyAckDeadline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/ModifyAckDeadline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).ModifyAckDeadline(ctx, req.(*ModifyAckDeadlineRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_Acknowledge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AcknowledgeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).Acknowledge(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/Acknowledge", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).Acknowledge(ctx, req.(*AcknowledgeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_Pull_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PullRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).Pull(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/Pull", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).Pull(ctx, req.(*PullRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_StreamingPull_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SubscriberServer).StreamingPull(&subscriberStreamingPullServer{stream}) +} + +type Subscriber_StreamingPullServer interface { + Send(*StreamingPullResponse) error + Recv() (*StreamingPullRequest, error) + grpc.ServerStream +} + +type subscriberStreamingPullServer struct { + grpc.ServerStream +} + +func (x *subscriberStreamingPullServer) Send(m *StreamingPullResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *subscriberStreamingPullServer) Recv() (*StreamingPullRequest, error) { + m := new(StreamingPullRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Subscriber_ModifyPushConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ModifyPushConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).ModifyPushConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/ModifyPushConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).ModifyPushConfig(ctx, req.(*ModifyPushConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_ListSnapshots_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSnapshotsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).ListSnapshots(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/ListSnapshots", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).ListSnapshots(ctx, req.(*ListSnapshotsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_CreateSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).CreateSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/CreateSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).CreateSnapshot(ctx, req.(*CreateSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_DeleteSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).DeleteSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/DeleteSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).DeleteSnapshot(ctx, req.(*DeleteSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_Seek_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SeekRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).Seek(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/Seek", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).Seek(ctx, req.(*SeekRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Subscriber_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.pubsub.v1.Subscriber", + HandlerType: (*SubscriberServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateSubscription", + Handler: _Subscriber_CreateSubscription_Handler, + }, + { + MethodName: "GetSubscription", + Handler: _Subscriber_GetSubscription_Handler, + }, + { + MethodName: "UpdateSubscription", + Handler: _Subscriber_UpdateSubscription_Handler, + }, + { + MethodName: "ListSubscriptions", + Handler: _Subscriber_ListSubscriptions_Handler, + }, + { + MethodName: "DeleteSubscription", + Handler: _Subscriber_DeleteSubscription_Handler, + }, + { + MethodName: "ModifyAckDeadline", + Handler: _Subscriber_ModifyAckDeadline_Handler, + }, + { + MethodName: "Acknowledge", + Handler: _Subscriber_Acknowledge_Handler, + }, + { + MethodName: "Pull", + Handler: _Subscriber_Pull_Handler, + }, + { + MethodName: "ModifyPushConfig", + Handler: _Subscriber_ModifyPushConfig_Handler, + }, + { + MethodName: "ListSnapshots", + Handler: _Subscriber_ListSnapshots_Handler, + }, + { + MethodName: "CreateSnapshot", + Handler: _Subscriber_CreateSnapshot_Handler, + }, + { + MethodName: "DeleteSnapshot", + Handler: _Subscriber_DeleteSnapshot_Handler, + }, + { + MethodName: "Seek", + Handler: _Subscriber_Seek_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingPull", + Handler: _Subscriber_StreamingPull_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "google/pubsub/v1/pubsub.proto", +} + +// Client API for Publisher service + +type PublisherClient interface { + // Creates the given topic with the given name. + CreateTopic(ctx context.Context, in *Topic, opts ...grpc.CallOption) (*Topic, error) + // Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic + // does not exist. The message payload must not be empty; it must contain + // either a non-empty data field, or at least one attribute. + Publish(ctx context.Context, in *PublishRequest, opts ...grpc.CallOption) (*PublishResponse, error) + // Gets the configuration of a topic. + GetTopic(ctx context.Context, in *GetTopicRequest, opts ...grpc.CallOption) (*Topic, error) + // Lists matching topics. + ListTopics(ctx context.Context, in *ListTopicsRequest, opts ...grpc.CallOption) (*ListTopicsResponse, error) + // Lists the name of the subscriptions for this topic. + ListTopicSubscriptions(ctx context.Context, in *ListTopicSubscriptionsRequest, opts ...grpc.CallOption) (*ListTopicSubscriptionsResponse, error) + // Deletes the topic with the given name. Returns `NOT_FOUND` if the topic + // does not exist. After a topic is deleted, a new topic may be created with + // the same name; this is an entirely new topic with none of the old + // configuration or subscriptions. Existing subscriptions to this topic are + // not deleted, but their `topic` field is set to `_deleted-topic_`. + DeleteTopic(ctx context.Context, in *DeleteTopicRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type publisherClient struct { + cc *grpc.ClientConn +} + +func NewPublisherClient(cc *grpc.ClientConn) PublisherClient { + return &publisherClient{cc} +} + +func (c *publisherClient) CreateTopic(ctx context.Context, in *Topic, opts ...grpc.CallOption) (*Topic, error) { + out := new(Topic) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Publisher/CreateTopic", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) Publish(ctx context.Context, in *PublishRequest, opts ...grpc.CallOption) (*PublishResponse, error) { + out := new(PublishResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Publisher/Publish", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) GetTopic(ctx context.Context, in *GetTopicRequest, opts ...grpc.CallOption) (*Topic, error) { + out := new(Topic) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Publisher/GetTopic", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) ListTopics(ctx context.Context, in *ListTopicsRequest, opts ...grpc.CallOption) (*ListTopicsResponse, error) { + out := new(ListTopicsResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Publisher/ListTopics", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) ListTopicSubscriptions(ctx context.Context, in *ListTopicSubscriptionsRequest, opts ...grpc.CallOption) (*ListTopicSubscriptionsResponse, error) { + out := new(ListTopicSubscriptionsResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Publisher/ListTopicSubscriptions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) DeleteTopic(ctx context.Context, in *DeleteTopicRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Publisher/DeleteTopic", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Publisher service + +type PublisherServer interface { + // Creates the given topic with the given name. + CreateTopic(context.Context, *Topic) (*Topic, error) + // Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic + // does not exist. The message payload must not be empty; it must contain + // either a non-empty data field, or at least one attribute. + Publish(context.Context, *PublishRequest) (*PublishResponse, error) + // Gets the configuration of a topic. + GetTopic(context.Context, *GetTopicRequest) (*Topic, error) + // Lists matching topics. + ListTopics(context.Context, *ListTopicsRequest) (*ListTopicsResponse, error) + // Lists the name of the subscriptions for this topic. + ListTopicSubscriptions(context.Context, *ListTopicSubscriptionsRequest) (*ListTopicSubscriptionsResponse, error) + // Deletes the topic with the given name. Returns `NOT_FOUND` if the topic + // does not exist. After a topic is deleted, a new topic may be created with + // the same name; this is an entirely new topic with none of the old + // configuration or subscriptions. Existing subscriptions to this topic are + // not deleted, but their `topic` field is set to `_deleted-topic_`. + DeleteTopic(context.Context, *DeleteTopicRequest) (*google_protobuf2.Empty, error) +} + +func RegisterPublisherServer(s *grpc.Server, srv PublisherServer) { + s.RegisterService(&_Publisher_serviceDesc, srv) +} + +func _Publisher_CreateTopic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Topic) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).CreateTopic(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Publisher/CreateTopic", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).CreateTopic(ctx, req.(*Topic)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_Publish_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PublishRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).Publish(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Publisher/Publish", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).Publish(ctx, req.(*PublishRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_GetTopic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTopicRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).GetTopic(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Publisher/GetTopic", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).GetTopic(ctx, req.(*GetTopicRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_ListTopics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTopicsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).ListTopics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Publisher/ListTopics", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).ListTopics(ctx, req.(*ListTopicsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_ListTopicSubscriptions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTopicSubscriptionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).ListTopicSubscriptions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Publisher/ListTopicSubscriptions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).ListTopicSubscriptions(ctx, req.(*ListTopicSubscriptionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_DeleteTopic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTopicRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).DeleteTopic(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Publisher/DeleteTopic", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).DeleteTopic(ctx, req.(*DeleteTopicRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Publisher_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.pubsub.v1.Publisher", + HandlerType: (*PublisherServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateTopic", + Handler: _Publisher_CreateTopic_Handler, + }, + { + MethodName: "Publish", + Handler: _Publisher_Publish_Handler, + }, + { + MethodName: "GetTopic", + Handler: _Publisher_GetTopic_Handler, + }, + { + MethodName: "ListTopics", + Handler: _Publisher_ListTopics_Handler, + }, + { + MethodName: "ListTopicSubscriptions", + Handler: _Publisher_ListTopicSubscriptions_Handler, + }, + { + MethodName: "DeleteTopic", + Handler: _Publisher_DeleteTopic_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/pubsub/v1/pubsub.proto", +} + +func init() { proto.RegisterFile("google/pubsub/v1/pubsub.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1868 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xcb, 0x73, 0x23, 0x47, + 0x19, 0xcf, 0x48, 0x7e, 0xc8, 0x9f, 0x64, 0x7b, 0xb7, 0xb1, 0x77, 0xb5, 0xb3, 0x2f, 0x7b, 0x76, + 0xb1, 0x15, 0x65, 0x57, 0xf2, 0x2a, 0x95, 0x90, 0x78, 0x71, 0x52, 0x7e, 0x2c, 0x1b, 0x53, 0x59, + 0x62, 0xc6, 0x0b, 0x54, 0x71, 0x40, 0x35, 0xd2, 0xb4, 0xe5, 0x89, 0x34, 0x8f, 0x4c, 0xcf, 0x18, + 0x2b, 0x90, 0x2a, 0x48, 0x28, 0xaa, 0x28, 0x38, 0x10, 0x38, 0x92, 0x03, 0x55, 0xdc, 0x38, 0x72, + 0xe0, 0xc8, 0x3f, 0xc1, 0xbf, 0xc0, 0x81, 0x3f, 0x81, 0x23, 0xd5, 0x8f, 0x91, 0x66, 0x34, 0x3d, + 0x7a, 0x78, 0x6b, 0x6f, 0xa3, 0xee, 0xaf, 0xfb, 0xf7, 0xfb, 0xde, 0x9f, 0xdb, 0x70, 0xb7, 0xe3, + 0xba, 0x9d, 0x1e, 0xae, 0x7b, 0x61, 0x8b, 0x84, 0xad, 0xfa, 0xc5, 0x13, 0xf1, 0x55, 0xf3, 0x7c, + 0x37, 0x70, 0xd1, 0x35, 0xbe, 0x5d, 0x13, 0x8b, 0x17, 0x4f, 0xd4, 0x3b, 0xe2, 0x80, 0xe1, 0x59, + 0x75, 0xc3, 0x71, 0xdc, 0xc0, 0x08, 0x2c, 0xd7, 0x21, 0x5c, 0x5e, 0xbd, 0x17, 0x5d, 0x47, 0x7f, + 0xb5, 0xc2, 0xb3, 0xba, 0x19, 0xfa, 0x4c, 0x40, 0xec, 0xdf, 0x1e, 0xdd, 0xc7, 0xb6, 0x17, 0xf4, + 0xc5, 0xe6, 0xc6, 0xe8, 0xe6, 0x99, 0x85, 0x7b, 0x66, 0xd3, 0x36, 0x48, 0x57, 0x48, 0xdc, 0x1f, + 0x95, 0x08, 0x2c, 0x1b, 0x93, 0xc0, 0xb0, 0x3d, 0x2e, 0xa0, 0xdd, 0x86, 0xf9, 0x97, 0xae, 0x67, + 0xb5, 0x11, 0x82, 0x39, 0xc7, 0xb0, 0x71, 0x59, 0xd9, 0x50, 0x2a, 0x4b, 0x3a, 0xfb, 0xd6, 0xbe, + 0xce, 0xc1, 0xf2, 0x09, 0x53, 0xe4, 0x05, 0x26, 0xc4, 0xe8, 0x60, 0x2a, 0x65, 0x1a, 0x81, 0xc1, + 0xa4, 0x4a, 0x3a, 0xfb, 0x46, 0x9f, 0x00, 0x18, 0x41, 0xe0, 0x5b, 0xad, 0x30, 0xc0, 0xa4, 0x9c, + 0xdb, 0xc8, 0x57, 0x8a, 0x8d, 0x7a, 0x6d, 0xd4, 0x0e, 0xb5, 0xc4, 0x45, 0xb5, 0xfd, 0xc1, 0x89, + 0x67, 0x4e, 0xe0, 0xf7, 0xf5, 0xd8, 0x15, 0xe8, 0x2e, 0x80, 0xcd, 0xc5, 0x9a, 0x96, 0x59, 0xce, + 0x33, 0x42, 0x4b, 0x62, 0xe5, 0xd8, 0x44, 0x7b, 0x50, 0xf2, 0xc2, 0x56, 0xcf, 0x22, 0xe7, 0x4d, + 0xaa, 0x4d, 0x79, 0x6e, 0x43, 0xa9, 0x14, 0x1b, 0xea, 0x00, 0x51, 0xa8, 0x5a, 0x7b, 0x19, 0xa9, + 0xaa, 0x17, 0x85, 0x3c, 0x5d, 0x51, 0xf7, 0x60, 0x75, 0x04, 0x1c, 0x5d, 0x83, 0x7c, 0x17, 0xf7, + 0x85, 0xea, 0xf4, 0x13, 0xad, 0xc1, 0xfc, 0x85, 0xd1, 0x0b, 0x71, 0x39, 0xc7, 0xd6, 0xf8, 0x8f, + 0xdd, 0xdc, 0x7b, 0x8a, 0xb6, 0x0d, 0xab, 0xcf, 0x71, 0xc0, 0x6c, 0xa6, 0xe3, 0xcf, 0x42, 0x4c, + 0x02, 0x2a, 0x1c, 0xd0, 0xdf, 0xe2, 0x02, 0xfe, 0x43, 0x6b, 0xc3, 0xca, 0x09, 0x87, 0x1d, 0x2b, + 0x87, 0x9e, 0x42, 0x41, 0xe8, 0x16, 0x19, 0xef, 0xfe, 0x04, 0xe3, 0xe9, 0x83, 0x03, 0x5a, 0x03, + 0x56, 0x07, 0x20, 0xc4, 0x73, 0x1d, 0x82, 0xd1, 0x7d, 0x28, 0x0e, 0xad, 0x47, 0xca, 0xca, 0x46, + 0xbe, 0xb2, 0xa4, 0xc3, 0xc0, 0x7c, 0x44, 0xb3, 0xe0, 0xfa, 0xc7, 0x16, 0xe1, 0x2a, 0x90, 0x88, + 0x5b, 0x19, 0x16, 0x3d, 0xdf, 0xfd, 0x14, 0xb7, 0x03, 0xc1, 0x2e, 0xfa, 0x89, 0x6e, 0xc3, 0x92, + 0x47, 0x2f, 0x23, 0xd6, 0xe7, 0xdc, 0x1c, 0xf3, 0x7a, 0x81, 0x2e, 0x9c, 0x5a, 0x9f, 0x63, 0xea, + 0x2a, 0xb6, 0x19, 0xb8, 0x5d, 0xec, 0x44, 0xae, 0xa2, 0x2b, 0x2f, 0xe9, 0x82, 0x66, 0x03, 0x8a, + 0x43, 0x09, 0x86, 0x75, 0x58, 0x60, 0xaa, 0x73, 0x72, 0xc5, 0xc6, 0xcd, 0xb4, 0xbe, 0xdc, 0xbe, + 0x42, 0x0c, 0x6d, 0xc1, 0xaa, 0x83, 0x2f, 0x83, 0x66, 0x0c, 0x8a, 0xfb, 0x65, 0x99, 0x2e, 0x9f, + 0x0c, 0xe0, 0x3e, 0x83, 0xbb, 0x03, 0xb8, 0xd3, 0xb0, 0x45, 0xda, 0xbe, 0xe5, 0xb1, 0x64, 0x1b, + 0xef, 0x81, 0x57, 0xd1, 0xd0, 0x81, 0x7b, 0x59, 0x90, 0x42, 0xdb, 0x87, 0xb0, 0x4c, 0xe2, 0x1b, + 0xc2, 0x23, 0xc9, 0xc5, 0xa9, 0x55, 0xac, 0x02, 0x3a, 0xc2, 0x3d, 0x1c, 0xe0, 0x29, 0x22, 0xf0, + 0x9f, 0x39, 0x28, 0xc5, 0x39, 0xc9, 0x72, 0x7c, 0x78, 0x34, 0x17, 0x37, 0xc9, 0x1e, 0x14, 0xbd, + 0x90, 0x9c, 0x37, 0xdb, 0xae, 0x73, 0x66, 0x75, 0x44, 0x8a, 0xdd, 0x91, 0xc5, 0x25, 0x39, 0x3f, + 0x64, 0x32, 0x3a, 0x78, 0x83, 0x6f, 0xb4, 0x03, 0x6b, 0x46, 0xbb, 0xdb, 0x34, 0xb1, 0x61, 0xf6, + 0x2c, 0x07, 0x37, 0x09, 0x6e, 0xbb, 0x8e, 0x49, 0xca, 0xf3, 0xcc, 0xb8, 0xc8, 0x68, 0x77, 0x8f, + 0xc4, 0xd6, 0x29, 0xdf, 0x41, 0x0d, 0x58, 0xf7, 0x71, 0x60, 0x58, 0x4e, 0xd3, 0x68, 0x77, 0xb1, + 0xd9, 0x1c, 0xa4, 0xc4, 0xe2, 0x86, 0x52, 0x29, 0xe8, 0xdf, 0xe2, 0x9b, 0xfb, 0x74, 0x4f, 0x64, + 0x01, 0x41, 0x3f, 0x01, 0x35, 0x8a, 0x74, 0x1f, 0x07, 0xd8, 0xa1, 0x3a, 0x36, 0xa3, 0xfa, 0x59, + 0x2e, 0x30, 0xce, 0xb7, 0x52, 0x65, 0xe1, 0x48, 0x08, 0xe8, 0x65, 0x71, 0x58, 0x8f, 0xce, 0x46, + 0x3b, 0xda, 0xbf, 0x14, 0x80, 0xa1, 0x66, 0xe8, 0x01, 0x2c, 0x33, 0x63, 0x60, 0xc7, 0xf4, 0x5c, + 0xcb, 0x89, 0x32, 0xa4, 0x44, 0x17, 0x9f, 0x89, 0x35, 0xf4, 0xb1, 0xa4, 0x0a, 0x3e, 0x1a, 0x67, + 0xb0, 0x71, 0x25, 0xf0, 0x55, 0x8b, 0x54, 0x1b, 0x56, 0x75, 0xdc, 0xc6, 0xd6, 0xc5, 0xc0, 0x5a, + 0x68, 0x1d, 0x16, 0xa8, 0x4b, 0x2c, 0x33, 0x8a, 0x11, 0xa3, 0xdd, 0x3d, 0x36, 0xd1, 0xfb, 0xb0, + 0x28, 0xcc, 0xc0, 0x6e, 0x99, 0xa2, 0xf8, 0x44, 0xf2, 0xda, 0x77, 0xe1, 0xc6, 0x73, 0x1c, 0xc4, + 0x03, 0x2c, 0x0a, 0x47, 0x0d, 0x4a, 0xf1, 0xe8, 0x8e, 0xec, 0x15, 0x5f, 0xd3, 0xbe, 0x51, 0xe0, + 0xd6, 0x8f, 0x3c, 0xd3, 0x08, 0xb0, 0xec, 0x86, 0x03, 0xc9, 0x0d, 0xc5, 0xc6, 0xbd, 0x34, 0xb7, + 0xc4, 0xe1, 0xc4, 0x19, 0xf4, 0x14, 0x8a, 0x21, 0x03, 0x60, 0x0d, 0x51, 0xa8, 0x97, 0x6e, 0x13, + 0xdf, 0xa3, 0x3d, 0xf3, 0x85, 0x41, 0xba, 0x3a, 0x70, 0x71, 0xfa, 0xad, 0x79, 0x50, 0xa6, 0x79, + 0x2d, 0xad, 0x22, 0xaf, 0xa7, 0x56, 0xfe, 0x4e, 0x81, 0x5b, 0x12, 0x48, 0x51, 0x45, 0x8e, 0x64, + 0x55, 0x64, 0xb2, 0x45, 0xae, 0x58, 0x65, 0x3e, 0x84, 0x5b, 0xbc, 0xca, 0x5c, 0xd5, 0xbb, 0xbf, + 0x84, 0x9b, 0x2f, 0x5c, 0xd3, 0x3a, 0xeb, 0xc7, 0x0a, 0xc4, 0xf4, 0xc7, 0x47, 0xcb, 0x4f, 0x6e, + 0xb6, 0xf2, 0xa3, 0x7d, 0xa5, 0x40, 0xf1, 0x24, 0xec, 0xf5, 0x66, 0x81, 0x7c, 0x0c, 0xc8, 0xc7, + 0x41, 0xe8, 0x3b, 0x4d, 0xcb, 0xb6, 0xb1, 0x69, 0x19, 0x01, 0xee, 0xf5, 0x19, 0x72, 0x41, 0xbf, + 0xce, 0x77, 0x8e, 0x87, 0x1b, 0x68, 0x13, 0x4a, 0xb6, 0x71, 0x39, 0x2c, 0x53, 0x79, 0xe6, 0xec, + 0xa2, 0x6d, 0x5c, 0x46, 0xe5, 0x49, 0xfb, 0x19, 0x94, 0x38, 0x09, 0xe1, 0xc2, 0x1f, 0xc0, 0x75, + 0x5f, 0x24, 0xe5, 0xf0, 0x1c, 0x77, 0xe3, 0x66, 0x5a, 0xb5, 0x91, 0xfc, 0xd5, 0xaf, 0xf9, 0xc9, + 0x05, 0x42, 0x03, 0xa6, 0xcc, 0x8d, 0xbc, 0x3f, 0xac, 0xa7, 0xb3, 0xa8, 0x7c, 0x13, 0x16, 0x79, + 0x49, 0x20, 0xe5, 0x39, 0xd6, 0x93, 0x16, 0x58, 0x4d, 0x20, 0x99, 0xe5, 0x3b, 0x9f, 0x55, 0xbe, + 0xb5, 0x1f, 0x02, 0xda, 0x6f, 0x77, 0x1d, 0xf7, 0xe7, 0x3d, 0x6c, 0x76, 0xae, 0x4a, 0x22, 0x17, + 0x27, 0xa1, 0xfd, 0x3a, 0x07, 0x6b, 0xa7, 0x81, 0x8f, 0x0d, 0xdb, 0x72, 0x3a, 0xb3, 0x7a, 0x33, + 0xeb, 0x56, 0xf4, 0x2e, 0xdc, 0xb4, 0x99, 0xcd, 0x64, 0xda, 0xe5, 0x2b, 0xf3, 0xfa, 0x3a, 0xdf, + 0x1e, 0xed, 0x4f, 0xef, 0xa4, 0xcf, 0x25, 0x6d, 0xb7, 0x96, 0x3c, 0xb7, 0xcf, 0xe1, 0xf6, 0xe0, + 0x36, 0x61, 0x3a, 0x34, 0xc7, 0xf4, 0xc3, 0x32, 0x17, 0xd9, 0x4f, 0x9b, 0xb5, 0x03, 0xeb, 0x23, + 0x26, 0x78, 0x4d, 0xb1, 0xf4, 0x09, 0xac, 0x1f, 0xfa, 0x98, 0x16, 0x63, 0xc7, 0xf0, 0xc8, 0xb9, + 0x1b, 0x44, 0xc6, 0x96, 0x8d, 0x0c, 0xa3, 0x0e, 0xc8, 0x49, 0x0a, 0x40, 0x1f, 0x0a, 0xd1, 0x55, + 0x33, 0x8c, 0x1d, 0x87, 0xb0, 0x8a, 0x2f, 0x3d, 0x8b, 0xb7, 0x61, 0x3e, 0xdd, 0xe7, 0x27, 0x4e, + 0xf7, 0x2b, 0xc3, 0x23, 0x74, 0x51, 0xeb, 0xc1, 0x1a, 0xab, 0xa3, 0x02, 0xfe, 0x35, 0x97, 0xed, + 0x3e, 0xac, 0x8f, 0xa0, 0x09, 0x17, 0xbd, 0x07, 0x4b, 0x24, 0x5a, 0x14, 0xae, 0x51, 0x25, 0xd5, + 0x3a, 0xb2, 0xf7, 0x50, 0x78, 0xea, 0x2a, 0xfd, 0x36, 0xac, 0x8b, 0x2a, 0x3d, 0xe2, 0x34, 0x15, + 0x0a, 0xd1, 0x6d, 0x42, 0xd5, 0xc1, 0x6f, 0xed, 0xf7, 0x0a, 0x14, 0x4f, 0x31, 0xee, 0xce, 0x92, + 0x4d, 0x3b, 0x30, 0xc7, 0x7c, 0x91, 0x9b, 0xe4, 0x8b, 0x8f, 0xde, 0xd0, 0x99, 0x24, 0xba, 0x13, + 0x63, 0xc0, 0x4c, 0xf6, 0xd1, 0x1b, 0x43, 0x0e, 0x07, 0x05, 0x58, 0x08, 0x0c, 0xbf, 0x83, 0x03, + 0x6d, 0x05, 0x4a, 0x9c, 0x0c, 0x37, 0x5a, 0xe3, 0xbf, 0xab, 0x00, 0xa2, 0xe7, 0xb4, 0xb0, 0x8f, + 0x7e, 0xab, 0x00, 0x12, 0x71, 0x19, 0xe7, 0x33, 0xa1, 0xeb, 0xa9, 0x13, 0xf6, 0xb5, 0x9d, 0x2f, + 0xff, 0xfd, 0x9f, 0x3f, 0xe7, 0xaa, 0xea, 0xb7, 0xe9, 0x9f, 0xef, 0xbf, 0xa0, 0xf1, 0xb8, 0x27, + 0x42, 0x81, 0xd4, 0xab, 0xf5, 0x44, 0xcb, 0xac, 0x57, 0xbf, 0xd8, 0x55, 0xaa, 0xe8, 0x4f, 0x0a, + 0xfb, 0xb3, 0x2f, 0xc1, 0xa2, 0x92, 0x46, 0x91, 0xcf, 0x43, 0x13, 0xf9, 0xbc, 0xc3, 0xf8, 0xd4, + 0xd1, 0x63, 0xc6, 0x27, 0x8e, 0x3f, 0x8e, 0x17, 0xfa, 0xab, 0x02, 0x28, 0x3d, 0x42, 0xa1, 0xb7, + 0xd2, 0x68, 0x99, 0x83, 0xd6, 0x44, 0x6a, 0x7b, 0x8c, 0xda, 0x77, 0x1a, 0x8d, 0x14, 0xb5, 0xda, + 0x34, 0x76, 0xfb, 0x46, 0xe1, 0x7f, 0x6c, 0x26, 0x86, 0x1a, 0x54, 0x4d, 0x83, 0x66, 0x0d, 0x5b, + 0xea, 0x5b, 0x53, 0xc9, 0xf2, 0xf0, 0xd1, 0x6a, 0x8c, 0x6d, 0x05, 0x6d, 0x31, 0xb6, 0x82, 0x5b, + 0x8c, 0xe3, 0x17, 0x49, 0x92, 0xe8, 0x8f, 0x4a, 0xf4, 0xe7, 0xd4, 0x24, 0x0b, 0x66, 0x8e, 0x43, + 0xea, 0x8d, 0x54, 0x3a, 0x3c, 0xb3, 0xbd, 0xa0, 0x1f, 0x39, 0xb5, 0x3a, 0xa3, 0x53, 0xff, 0xa6, + 0xc0, 0xf5, 0x54, 0x57, 0x97, 0x59, 0x2c, 0xab, 0xf5, 0x67, 0x12, 0xfa, 0x3e, 0x23, 0x74, 0xa4, + 0x7d, 0x38, 0x13, 0xa1, 0x5d, 0x7b, 0x14, 0x87, 0xfa, 0xf5, 0x6b, 0x05, 0x8a, 0xb1, 0x86, 0x8f, + 0x1e, 0xa6, 0xf9, 0xa5, 0xe7, 0x81, 0x4c, 0x66, 0x47, 0x8c, 0xd9, 0x07, 0xda, 0xfb, 0xb3, 0x31, + 0x33, 0x86, 0x08, 0x94, 0xd3, 0x6f, 0x14, 0x98, 0xa3, 0x4d, 0x12, 0xdd, 0x95, 0x0d, 0x8a, 0x83, + 0xf9, 0x41, 0x16, 0xf2, 0xf1, 0xde, 0x1a, 0x85, 0xbc, 0xd6, 0x98, 0x8d, 0x8d, 0x17, 0xf6, 0x7a, + 0x94, 0x86, 0x09, 0xcb, 0x89, 0x9e, 0x8d, 0xb6, 0x24, 0x29, 0x26, 0x99, 0x6b, 0xd4, 0xed, 0x89, + 0x72, 0x9c, 0x60, 0x45, 0xd9, 0x51, 0x68, 0xee, 0x5f, 0x1b, 0x9d, 0xb0, 0xd1, 0x9b, 0x59, 0x51, + 0x92, 0x9a, 0xc2, 0x33, 0x5d, 0x71, 0xcc, 0x94, 0x3f, 0xd4, 0x3e, 0xb8, 0x4a, 0x90, 0x0c, 0x61, + 0xa8, 0x21, 0xfe, 0xa0, 0xc0, 0x72, 0xa2, 0x35, 0xca, 0x2c, 0x21, 0xeb, 0xd4, 0x32, 0x4b, 0x48, + 0x7b, 0xac, 0x56, 0x65, 0x6c, 0x1f, 0x22, 0x2d, 0x3b, 0xdf, 0x07, 0xe0, 0x5f, 0x29, 0xb0, 0x92, + 0x9c, 0x71, 0x90, 0x04, 0x47, 0x3a, 0x05, 0xa9, 0x63, 0x1a, 0xb7, 0xf6, 0x88, 0x71, 0xd8, 0x52, + 0x37, 0xe5, 0xcd, 0x24, 0xc2, 0x17, 0x05, 0xf1, 0x57, 0x0a, 0xac, 0x24, 0x9b, 0xb6, 0x8c, 0x85, + 0xb4, 0xad, 0x67, 0xfa, 0xec, 0x31, 0x63, 0xb0, 0x5d, 0xe5, 0xed, 0x2c, 0x42, 0xcc, 0x62, 0xc1, + 0xf2, 0x84, 0x36, 0x5d, 0x59, 0x9e, 0xc4, 0x26, 0x03, 0x69, 0x6b, 0x88, 0xf5, 0xea, 0xab, 0xe6, + 0x09, 0xc1, 0xb8, 0xbb, 0xab, 0x54, 0x1b, 0x7f, 0x59, 0x80, 0x25, 0xf1, 0x76, 0x89, 0x7d, 0xf4, + 0x29, 0x14, 0xb9, 0xe9, 0xf9, 0x6b, 0x74, 0xd6, 0x93, 0xa0, 0x9a, 0xb5, 0xa1, 0xbd, 0xc9, 0xd8, + 0x3c, 0x50, 0xef, 0x49, 0xdd, 0xc0, 0x1f, 0x12, 0x85, 0x0f, 0xbe, 0x54, 0x60, 0x51, 0x20, 0xa3, + 0x0d, 0xe9, 0x73, 0x47, 0xec, 0xd5, 0x56, 0xdd, 0x1c, 0x23, 0x21, 0x2c, 0xd1, 0x60, 0xd8, 0x8f, + 0xb4, 0x6d, 0x86, 0xcd, 0xb0, 0xe4, 0xe0, 0xe2, 0x1d, 0x9a, 0x92, 0x70, 0xa1, 0x10, 0xbd, 0x23, + 0xa3, 0x4d, 0xe9, 0x24, 0x11, 0x7f, 0xe1, 0xcb, 0xd6, 0x7b, 0x9b, 0x61, 0x6f, 0xa2, 0xfb, 0x13, + 0xb0, 0x69, 0xe4, 0xc1, 0xf0, 0x31, 0x16, 0x3d, 0x90, 0xe7, 0x58, 0xe2, 0x55, 0x58, 0x7d, 0x38, + 0x5e, 0x48, 0xa8, 0x9f, 0xa4, 0x20, 0xcb, 0x42, 0xf1, 0x8e, 0xfb, 0x0f, 0x05, 0x6e, 0xc8, 0x5f, + 0x4b, 0x51, 0x7d, 0x0c, 0x92, 0x74, 0x2e, 0xd8, 0x99, 0xfe, 0x80, 0xa0, 0x99, 0x9c, 0xb2, 0xb2, + 0x2d, 0x35, 0x32, 0x23, 0x04, 0x50, 0x8c, 0xbd, 0xb8, 0xca, 0x3a, 0x5d, 0xfa, 0x41, 0x36, 0x33, + 0x55, 0x85, 0xa9, 0xaa, 0x93, 0xbc, 0x75, 0xd0, 0x87, 0xb5, 0xb6, 0x6b, 0xa7, 0xb0, 0x0e, 0x8a, + 0xfc, 0x31, 0xee, 0x84, 0x5e, 0x7b, 0xa2, 0xfc, 0xf4, 0x5d, 0x21, 0xd0, 0x71, 0x7b, 0x86, 0xd3, + 0xa9, 0xb9, 0x7e, 0xa7, 0xde, 0xc1, 0x0e, 0x03, 0xad, 0xf3, 0x2d, 0xc3, 0xb3, 0xc8, 0xf0, 0x9f, + 0x55, 0x4f, 0xf9, 0xd7, 0xff, 0x14, 0xe5, 0xef, 0xb9, 0x1b, 0xcf, 0xf9, 0xd9, 0xc3, 0x9e, 0x1b, + 0x9a, 0x34, 0xa6, 0x4f, 0xc3, 0x56, 0xed, 0xc7, 0x4f, 0x5a, 0x0b, 0xec, 0xf8, 0xdb, 0xff, 0x0f, + 0x00, 0x00, 0xff, 0xff, 0x56, 0xc8, 0xa0, 0x10, 0xea, 0x1a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/pubsub/v1beta2/pubsub.pb.go b/vendor/google.golang.org/genproto/googleapis/pubsub/v1beta2/pubsub.pb.go new file mode 100644 index 0000000..21621f0 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/pubsub/v1beta2/pubsub.pb.go @@ -0,0 +1,1460 @@ +// Code generated by protoc-gen-go. +// source: google/pubsub/v1beta2/pubsub.proto +// DO NOT EDIT! + +/* +Package pubsub is a generated protocol buffer package. + +It is generated from these files: + google/pubsub/v1beta2/pubsub.proto + +It has these top-level messages: + Topic + PubsubMessage + GetTopicRequest + PublishRequest + PublishResponse + ListTopicsRequest + ListTopicsResponse + ListTopicSubscriptionsRequest + ListTopicSubscriptionsResponse + DeleteTopicRequest + Subscription + PushConfig + ReceivedMessage + GetSubscriptionRequest + ListSubscriptionsRequest + ListSubscriptionsResponse + DeleteSubscriptionRequest + ModifyPushConfigRequest + PullRequest + PullResponse + ModifyAckDeadlineRequest + AcknowledgeRequest +*/ +package pubsub + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A topic resource. +type Topic struct { + // Name of the topic. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *Topic) Reset() { *m = Topic{} } +func (m *Topic) String() string { return proto.CompactTextString(m) } +func (*Topic) ProtoMessage() {} +func (*Topic) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Topic) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A message data and its attributes. +type PubsubMessage struct { + // The message payload. For JSON requests, the value of this field must be + // base64-encoded. + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + // Optional attributes for this message. + Attributes map[string]string `protobuf:"bytes,2,rep,name=attributes" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // ID of this message assigned by the server at publication time. Guaranteed + // to be unique within the topic. This value may be read by a subscriber + // that receives a PubsubMessage via a Pull call or a push delivery. It must + // not be populated by a publisher in a Publish call. + MessageId string `protobuf:"bytes,3,opt,name=message_id,json=messageId" json:"message_id,omitempty"` +} + +func (m *PubsubMessage) Reset() { *m = PubsubMessage{} } +func (m *PubsubMessage) String() string { return proto.CompactTextString(m) } +func (*PubsubMessage) ProtoMessage() {} +func (*PubsubMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *PubsubMessage) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +func (m *PubsubMessage) GetAttributes() map[string]string { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *PubsubMessage) GetMessageId() string { + if m != nil { + return m.MessageId + } + return "" +} + +// Request for the GetTopic method. +type GetTopicRequest struct { + // The name of the topic to get. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` +} + +func (m *GetTopicRequest) Reset() { *m = GetTopicRequest{} } +func (m *GetTopicRequest) String() string { return proto.CompactTextString(m) } +func (*GetTopicRequest) ProtoMessage() {} +func (*GetTopicRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *GetTopicRequest) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +// Request for the Publish method. +type PublishRequest struct { + // The messages in the request will be published on this topic. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + // The messages to publish. + Messages []*PubsubMessage `protobuf:"bytes,2,rep,name=messages" json:"messages,omitempty"` +} + +func (m *PublishRequest) Reset() { *m = PublishRequest{} } +func (m *PublishRequest) String() string { return proto.CompactTextString(m) } +func (*PublishRequest) ProtoMessage() {} +func (*PublishRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *PublishRequest) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +func (m *PublishRequest) GetMessages() []*PubsubMessage { + if m != nil { + return m.Messages + } + return nil +} + +// Response for the Publish method. +type PublishResponse struct { + // The server-assigned ID of each published message, in the same order as + // the messages in the request. IDs are guaranteed to be unique within + // the topic. + MessageIds []string `protobuf:"bytes,1,rep,name=message_ids,json=messageIds" json:"message_ids,omitempty"` +} + +func (m *PublishResponse) Reset() { *m = PublishResponse{} } +func (m *PublishResponse) String() string { return proto.CompactTextString(m) } +func (*PublishResponse) ProtoMessage() {} +func (*PublishResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *PublishResponse) GetMessageIds() []string { + if m != nil { + return m.MessageIds + } + return nil +} + +// Request for the ListTopics method. +type ListTopicsRequest struct { + // The name of the cloud project that topics belong to. + Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` + // Maximum number of topics to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last ListTopicsResponse; indicates that this is + // a continuation of a prior ListTopics call, and that the system should + // return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListTopicsRequest) Reset() { *m = ListTopicsRequest{} } +func (m *ListTopicsRequest) String() string { return proto.CompactTextString(m) } +func (*ListTopicsRequest) ProtoMessage() {} +func (*ListTopicsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ListTopicsRequest) GetProject() string { + if m != nil { + return m.Project + } + return "" +} + +func (m *ListTopicsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTopicsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the ListTopics method. +type ListTopicsResponse struct { + // The resulting topics. + Topics []*Topic `protobuf:"bytes,1,rep,name=topics" json:"topics,omitempty"` + // If not empty, indicates that there may be more topics that match the + // request; this value should be passed in a new ListTopicsRequest. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTopicsResponse) Reset() { *m = ListTopicsResponse{} } +func (m *ListTopicsResponse) String() string { return proto.CompactTextString(m) } +func (*ListTopicsResponse) ProtoMessage() {} +func (*ListTopicsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ListTopicsResponse) GetTopics() []*Topic { + if m != nil { + return m.Topics + } + return nil +} + +func (m *ListTopicsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the ListTopicSubscriptions method. +type ListTopicSubscriptionsRequest struct { + // The name of the topic that subscriptions are attached to. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + // Maximum number of subscription names to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last ListTopicSubscriptionsResponse; indicates + // that this is a continuation of a prior ListTopicSubscriptions call, and + // that the system should return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListTopicSubscriptionsRequest) Reset() { *m = ListTopicSubscriptionsRequest{} } +func (m *ListTopicSubscriptionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListTopicSubscriptionsRequest) ProtoMessage() {} +func (*ListTopicSubscriptionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ListTopicSubscriptionsRequest) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +func (m *ListTopicSubscriptionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTopicSubscriptionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the ListTopicSubscriptions method. +type ListTopicSubscriptionsResponse struct { + // The names of the subscriptions that match the request. + Subscriptions []string `protobuf:"bytes,1,rep,name=subscriptions" json:"subscriptions,omitempty"` + // If not empty, indicates that there may be more subscriptions that match + // the request; this value should be passed in a new + // ListTopicSubscriptionsRequest to get more subscriptions. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTopicSubscriptionsResponse) Reset() { *m = ListTopicSubscriptionsResponse{} } +func (m *ListTopicSubscriptionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListTopicSubscriptionsResponse) ProtoMessage() {} +func (*ListTopicSubscriptionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ListTopicSubscriptionsResponse) GetSubscriptions() []string { + if m != nil { + return m.Subscriptions + } + return nil +} + +func (m *ListTopicSubscriptionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the DeleteTopic method. +type DeleteTopicRequest struct { + // Name of the topic to delete. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` +} + +func (m *DeleteTopicRequest) Reset() { *m = DeleteTopicRequest{} } +func (m *DeleteTopicRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteTopicRequest) ProtoMessage() {} +func (*DeleteTopicRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeleteTopicRequest) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +// A subscription resource. +type Subscription struct { + // Name of the subscription. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the topic from which this subscription is receiving messages. + // This will be present if and only if the subscription has not been detached + // from its topic. + Topic string `protobuf:"bytes,2,opt,name=topic" json:"topic,omitempty"` + // If push delivery is used with this subscription, this field is + // used to configure it. An empty pushConfig signifies that the subscriber + // will pull and ack messages using API methods. + PushConfig *PushConfig `protobuf:"bytes,4,opt,name=push_config,json=pushConfig" json:"push_config,omitempty"` + // This value is the maximum time after a subscriber receives a message + // before the subscriber should acknowledge the message. After message + // delivery but before the ack deadline expires and before the message is + // acknowledged, it is an outstanding message and will not be delivered + // again during that time (on a best-effort basis). + // + // For pull delivery this value + // is used as the initial value for the ack deadline. It may be overridden + // for a specific message by calling ModifyAckDeadline. + // + // For push delivery, this value is also used to set the request timeout for + // the call to the push endpoint. + // + // If the subscriber never acknowledges the message, the Pub/Sub + // system will eventually redeliver the message. + AckDeadlineSeconds int32 `protobuf:"varint,5,opt,name=ack_deadline_seconds,json=ackDeadlineSeconds" json:"ack_deadline_seconds,omitempty"` +} + +func (m *Subscription) Reset() { *m = Subscription{} } +func (m *Subscription) String() string { return proto.CompactTextString(m) } +func (*Subscription) ProtoMessage() {} +func (*Subscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *Subscription) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Subscription) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +func (m *Subscription) GetPushConfig() *PushConfig { + if m != nil { + return m.PushConfig + } + return nil +} + +func (m *Subscription) GetAckDeadlineSeconds() int32 { + if m != nil { + return m.AckDeadlineSeconds + } + return 0 +} + +// Configuration for a push delivery endpoint. +type PushConfig struct { + // A URL locating the endpoint to which messages should be pushed. + // For example, a Webhook endpoint might use "https://example.com/push". + PushEndpoint string `protobuf:"bytes,1,opt,name=push_endpoint,json=pushEndpoint" json:"push_endpoint,omitempty"` + // Endpoint configuration attributes. + // + // Every endpoint has a set of API supported attributes that can be used to + // control different aspects of the message delivery. + // + // The currently supported attribute is `x-goog-version`, which you can + // use to change the format of the push message. This attribute + // indicates the version of the data expected by the endpoint. This + // controls the shape of the envelope (i.e. its fields and metadata). + // The endpoint version is based on the version of the Pub/Sub + // API. + // + // If not present during the CreateSubscription call, it will default to + // the version of the API used to make such call. If not present during a + // ModifyPushConfig call, its value will not be changed. GetSubscription + // calls will always return a valid version, even if the subscription was + // created without this attribute. + // + // The possible values for this attribute are: + // + // * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. + // * `v1beta2`: uses the push format defined in the v1beta2 Pub/Sub API. + // + Attributes map[string]string `protobuf:"bytes,2,rep,name=attributes" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *PushConfig) Reset() { *m = PushConfig{} } +func (m *PushConfig) String() string { return proto.CompactTextString(m) } +func (*PushConfig) ProtoMessage() {} +func (*PushConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *PushConfig) GetPushEndpoint() string { + if m != nil { + return m.PushEndpoint + } + return "" +} + +func (m *PushConfig) GetAttributes() map[string]string { + if m != nil { + return m.Attributes + } + return nil +} + +// A message and its corresponding acknowledgment ID. +type ReceivedMessage struct { + // This ID can be used to acknowledge the received message. + AckId string `protobuf:"bytes,1,opt,name=ack_id,json=ackId" json:"ack_id,omitempty"` + // The message. + Message *PubsubMessage `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` +} + +func (m *ReceivedMessage) Reset() { *m = ReceivedMessage{} } +func (m *ReceivedMessage) String() string { return proto.CompactTextString(m) } +func (*ReceivedMessage) ProtoMessage() {} +func (*ReceivedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ReceivedMessage) GetAckId() string { + if m != nil { + return m.AckId + } + return "" +} + +func (m *ReceivedMessage) GetMessage() *PubsubMessage { + if m != nil { + return m.Message + } + return nil +} + +// Request for the GetSubscription method. +type GetSubscriptionRequest struct { + // The name of the subscription to get. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` +} + +func (m *GetSubscriptionRequest) Reset() { *m = GetSubscriptionRequest{} } +func (m *GetSubscriptionRequest) String() string { return proto.CompactTextString(m) } +func (*GetSubscriptionRequest) ProtoMessage() {} +func (*GetSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *GetSubscriptionRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +// Request for the ListSubscriptions method. +type ListSubscriptionsRequest struct { + // The name of the cloud project that subscriptions belong to. + Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` + // Maximum number of subscriptions to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last ListSubscriptionsResponse; indicates that + // this is a continuation of a prior ListSubscriptions call, and that the + // system should return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListSubscriptionsRequest) Reset() { *m = ListSubscriptionsRequest{} } +func (m *ListSubscriptionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSubscriptionsRequest) ProtoMessage() {} +func (*ListSubscriptionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ListSubscriptionsRequest) GetProject() string { + if m != nil { + return m.Project + } + return "" +} + +func (m *ListSubscriptionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListSubscriptionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for the ListSubscriptions method. +type ListSubscriptionsResponse struct { + // The subscriptions that match the request. + Subscriptions []*Subscription `protobuf:"bytes,1,rep,name=subscriptions" json:"subscriptions,omitempty"` + // If not empty, indicates that there may be more subscriptions that match + // the request; this value should be passed in a new ListSubscriptionsRequest + // to get more subscriptions. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListSubscriptionsResponse) Reset() { *m = ListSubscriptionsResponse{} } +func (m *ListSubscriptionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSubscriptionsResponse) ProtoMessage() {} +func (*ListSubscriptionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *ListSubscriptionsResponse) GetSubscriptions() []*Subscription { + if m != nil { + return m.Subscriptions + } + return nil +} + +func (m *ListSubscriptionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for the DeleteSubscription method. +type DeleteSubscriptionRequest struct { + // The subscription to delete. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` +} + +func (m *DeleteSubscriptionRequest) Reset() { *m = DeleteSubscriptionRequest{} } +func (m *DeleteSubscriptionRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSubscriptionRequest) ProtoMessage() {} +func (*DeleteSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *DeleteSubscriptionRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +// Request for the ModifyPushConfig method. +type ModifyPushConfigRequest struct { + // The name of the subscription. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // The push configuration for future deliveries. + // + // An empty pushConfig indicates that the Pub/Sub system should + // stop pushing messages from the given subscription and allow + // messages to be pulled and acknowledged - effectively pausing + // the subscription if Pull is not called. + PushConfig *PushConfig `protobuf:"bytes,2,opt,name=push_config,json=pushConfig" json:"push_config,omitempty"` +} + +func (m *ModifyPushConfigRequest) Reset() { *m = ModifyPushConfigRequest{} } +func (m *ModifyPushConfigRequest) String() string { return proto.CompactTextString(m) } +func (*ModifyPushConfigRequest) ProtoMessage() {} +func (*ModifyPushConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *ModifyPushConfigRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *ModifyPushConfigRequest) GetPushConfig() *PushConfig { + if m != nil { + return m.PushConfig + } + return nil +} + +// Request for the Pull method. +type PullRequest struct { + // The subscription from which messages should be pulled. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // If this is specified as true the system will respond immediately even if + // it is not able to return a message in the Pull response. Otherwise the + // system is allowed to wait until at least one message is available rather + // than returning no messages. The client may cancel the request if it does + // not wish to wait any longer for the response. + ReturnImmediately bool `protobuf:"varint,2,opt,name=return_immediately,json=returnImmediately" json:"return_immediately,omitempty"` + // The maximum number of messages returned for this request. The Pub/Sub + // system may return fewer than the number specified. + MaxMessages int32 `protobuf:"varint,3,opt,name=max_messages,json=maxMessages" json:"max_messages,omitempty"` +} + +func (m *PullRequest) Reset() { *m = PullRequest{} } +func (m *PullRequest) String() string { return proto.CompactTextString(m) } +func (*PullRequest) ProtoMessage() {} +func (*PullRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *PullRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *PullRequest) GetReturnImmediately() bool { + if m != nil { + return m.ReturnImmediately + } + return false +} + +func (m *PullRequest) GetMaxMessages() int32 { + if m != nil { + return m.MaxMessages + } + return 0 +} + +// Response for the Pull method. +type PullResponse struct { + // Received Pub/Sub messages. The Pub/Sub system will return zero messages if + // there are no more available in the backlog. The Pub/Sub system may return + // fewer than the maxMessages requested even if there are more messages + // available in the backlog. + ReceivedMessages []*ReceivedMessage `protobuf:"bytes,1,rep,name=received_messages,json=receivedMessages" json:"received_messages,omitempty"` +} + +func (m *PullResponse) Reset() { *m = PullResponse{} } +func (m *PullResponse) String() string { return proto.CompactTextString(m) } +func (*PullResponse) ProtoMessage() {} +func (*PullResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *PullResponse) GetReceivedMessages() []*ReceivedMessage { + if m != nil { + return m.ReceivedMessages + } + return nil +} + +// Request for the ModifyAckDeadline method. +type ModifyAckDeadlineRequest struct { + // The name of the subscription. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // The acknowledgment ID. + AckId string `protobuf:"bytes,2,opt,name=ack_id,json=ackId" json:"ack_id,omitempty"` + // The new ack deadline with respect to the time this request was sent to the + // Pub/Sub system. Must be >= 0. For example, if the value is 10, the new ack + // deadline will expire 10 seconds after the ModifyAckDeadline call was made. + // Specifying zero may immediately make the message available for another pull + // request. + AckDeadlineSeconds int32 `protobuf:"varint,3,opt,name=ack_deadline_seconds,json=ackDeadlineSeconds" json:"ack_deadline_seconds,omitempty"` +} + +func (m *ModifyAckDeadlineRequest) Reset() { *m = ModifyAckDeadlineRequest{} } +func (m *ModifyAckDeadlineRequest) String() string { return proto.CompactTextString(m) } +func (*ModifyAckDeadlineRequest) ProtoMessage() {} +func (*ModifyAckDeadlineRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *ModifyAckDeadlineRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *ModifyAckDeadlineRequest) GetAckId() string { + if m != nil { + return m.AckId + } + return "" +} + +func (m *ModifyAckDeadlineRequest) GetAckDeadlineSeconds() int32 { + if m != nil { + return m.AckDeadlineSeconds + } + return 0 +} + +// Request for the Acknowledge method. +type AcknowledgeRequest struct { + // The subscription whose message is being acknowledged. + Subscription string `protobuf:"bytes,1,opt,name=subscription" json:"subscription,omitempty"` + // The acknowledgment ID for the messages being acknowledged that was returned + // by the Pub/Sub system in the Pull response. Must not be empty. + AckIds []string `protobuf:"bytes,2,rep,name=ack_ids,json=ackIds" json:"ack_ids,omitempty"` +} + +func (m *AcknowledgeRequest) Reset() { *m = AcknowledgeRequest{} } +func (m *AcknowledgeRequest) String() string { return proto.CompactTextString(m) } +func (*AcknowledgeRequest) ProtoMessage() {} +func (*AcknowledgeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *AcknowledgeRequest) GetSubscription() string { + if m != nil { + return m.Subscription + } + return "" +} + +func (m *AcknowledgeRequest) GetAckIds() []string { + if m != nil { + return m.AckIds + } + return nil +} + +func init() { + proto.RegisterType((*Topic)(nil), "google.pubsub.v1beta2.Topic") + proto.RegisterType((*PubsubMessage)(nil), "google.pubsub.v1beta2.PubsubMessage") + proto.RegisterType((*GetTopicRequest)(nil), "google.pubsub.v1beta2.GetTopicRequest") + proto.RegisterType((*PublishRequest)(nil), "google.pubsub.v1beta2.PublishRequest") + proto.RegisterType((*PublishResponse)(nil), "google.pubsub.v1beta2.PublishResponse") + proto.RegisterType((*ListTopicsRequest)(nil), "google.pubsub.v1beta2.ListTopicsRequest") + proto.RegisterType((*ListTopicsResponse)(nil), "google.pubsub.v1beta2.ListTopicsResponse") + proto.RegisterType((*ListTopicSubscriptionsRequest)(nil), "google.pubsub.v1beta2.ListTopicSubscriptionsRequest") + proto.RegisterType((*ListTopicSubscriptionsResponse)(nil), "google.pubsub.v1beta2.ListTopicSubscriptionsResponse") + proto.RegisterType((*DeleteTopicRequest)(nil), "google.pubsub.v1beta2.DeleteTopicRequest") + proto.RegisterType((*Subscription)(nil), "google.pubsub.v1beta2.Subscription") + proto.RegisterType((*PushConfig)(nil), "google.pubsub.v1beta2.PushConfig") + proto.RegisterType((*ReceivedMessage)(nil), "google.pubsub.v1beta2.ReceivedMessage") + proto.RegisterType((*GetSubscriptionRequest)(nil), "google.pubsub.v1beta2.GetSubscriptionRequest") + proto.RegisterType((*ListSubscriptionsRequest)(nil), "google.pubsub.v1beta2.ListSubscriptionsRequest") + proto.RegisterType((*ListSubscriptionsResponse)(nil), "google.pubsub.v1beta2.ListSubscriptionsResponse") + proto.RegisterType((*DeleteSubscriptionRequest)(nil), "google.pubsub.v1beta2.DeleteSubscriptionRequest") + proto.RegisterType((*ModifyPushConfigRequest)(nil), "google.pubsub.v1beta2.ModifyPushConfigRequest") + proto.RegisterType((*PullRequest)(nil), "google.pubsub.v1beta2.PullRequest") + proto.RegisterType((*PullResponse)(nil), "google.pubsub.v1beta2.PullResponse") + proto.RegisterType((*ModifyAckDeadlineRequest)(nil), "google.pubsub.v1beta2.ModifyAckDeadlineRequest") + proto.RegisterType((*AcknowledgeRequest)(nil), "google.pubsub.v1beta2.AcknowledgeRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Subscriber service + +type SubscriberClient interface { + // Creates a subscription to a given topic for a given subscriber. + // If the subscription already exists, returns ALREADY_EXISTS. + // If the corresponding topic doesn't exist, returns NOT_FOUND. + // + // If the name is not provided in the request, the server will assign a random + // name for this subscription on the same project as the topic. + CreateSubscription(ctx context.Context, in *Subscription, opts ...grpc.CallOption) (*Subscription, error) + // Gets the configuration details of a subscription. + GetSubscription(ctx context.Context, in *GetSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) + // Lists matching subscriptions. + ListSubscriptions(ctx context.Context, in *ListSubscriptionsRequest, opts ...grpc.CallOption) (*ListSubscriptionsResponse, error) + // Deletes an existing subscription. All pending messages in the subscription + // are immediately dropped. Calls to Pull after deletion will return + // NOT_FOUND. After a subscription is deleted, a new one may be created with + // the same name, but the new one has no association with the old + // subscription, or its topic unless the same topic is specified. + DeleteSubscription(ctx context.Context, in *DeleteSubscriptionRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) + // Modifies the ack deadline for a specific message. This method is useful to + // indicate that more time is needed to process a message by the subscriber, + // or to make the message available for redelivery if the processing was + // interrupted. + ModifyAckDeadline(ctx context.Context, in *ModifyAckDeadlineRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) + // Acknowledges the messages associated with the ack tokens in the + // AcknowledgeRequest. The Pub/Sub system can remove the relevant messages + // from the subscription. + // + // Acknowledging a message whose ack deadline has expired may succeed, + // but such a message may be redelivered later. Acknowledging a message more + // than once will not result in an error. + Acknowledge(ctx context.Context, in *AcknowledgeRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) + // Pulls messages from the server. Returns an empty list if there are no + // messages available in the backlog. The server may return UNAVAILABLE if + // there are too many concurrent pull requests pending for the given + // subscription. + Pull(ctx context.Context, in *PullRequest, opts ...grpc.CallOption) (*PullResponse, error) + // Modifies the PushConfig for a specified subscription. + // + // This may be used to change a push subscription to a pull one (signified + // by an empty PushConfig) or vice versa, or change the endpoint URL and other + // attributes of a push subscription. Messages will accumulate for + // delivery continuously through the call regardless of changes to the + // PushConfig. + ModifyPushConfig(ctx context.Context, in *ModifyPushConfigRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) +} + +type subscriberClient struct { + cc *grpc.ClientConn +} + +func NewSubscriberClient(cc *grpc.ClientConn) SubscriberClient { + return &subscriberClient{cc} +} + +func (c *subscriberClient) CreateSubscription(ctx context.Context, in *Subscription, opts ...grpc.CallOption) (*Subscription, error) { + out := new(Subscription) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Subscriber/CreateSubscription", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) GetSubscription(ctx context.Context, in *GetSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) { + out := new(Subscription) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Subscriber/GetSubscription", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) ListSubscriptions(ctx context.Context, in *ListSubscriptionsRequest, opts ...grpc.CallOption) (*ListSubscriptionsResponse, error) { + out := new(ListSubscriptionsResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Subscriber/ListSubscriptions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) DeleteSubscription(ctx context.Context, in *DeleteSubscriptionRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) { + out := new(google_protobuf.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Subscriber/DeleteSubscription", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) ModifyAckDeadline(ctx context.Context, in *ModifyAckDeadlineRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) { + out := new(google_protobuf.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Subscriber/ModifyAckDeadline", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) Acknowledge(ctx context.Context, in *AcknowledgeRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) { + out := new(google_protobuf.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Subscriber/Acknowledge", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) Pull(ctx context.Context, in *PullRequest, opts ...grpc.CallOption) (*PullResponse, error) { + out := new(PullResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Subscriber/Pull", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriberClient) ModifyPushConfig(ctx context.Context, in *ModifyPushConfigRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) { + out := new(google_protobuf.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Subscriber/ModifyPushConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Subscriber service + +type SubscriberServer interface { + // Creates a subscription to a given topic for a given subscriber. + // If the subscription already exists, returns ALREADY_EXISTS. + // If the corresponding topic doesn't exist, returns NOT_FOUND. + // + // If the name is not provided in the request, the server will assign a random + // name for this subscription on the same project as the topic. + CreateSubscription(context.Context, *Subscription) (*Subscription, error) + // Gets the configuration details of a subscription. + GetSubscription(context.Context, *GetSubscriptionRequest) (*Subscription, error) + // Lists matching subscriptions. + ListSubscriptions(context.Context, *ListSubscriptionsRequest) (*ListSubscriptionsResponse, error) + // Deletes an existing subscription. All pending messages in the subscription + // are immediately dropped. Calls to Pull after deletion will return + // NOT_FOUND. After a subscription is deleted, a new one may be created with + // the same name, but the new one has no association with the old + // subscription, or its topic unless the same topic is specified. + DeleteSubscription(context.Context, *DeleteSubscriptionRequest) (*google_protobuf.Empty, error) + // Modifies the ack deadline for a specific message. This method is useful to + // indicate that more time is needed to process a message by the subscriber, + // or to make the message available for redelivery if the processing was + // interrupted. + ModifyAckDeadline(context.Context, *ModifyAckDeadlineRequest) (*google_protobuf.Empty, error) + // Acknowledges the messages associated with the ack tokens in the + // AcknowledgeRequest. The Pub/Sub system can remove the relevant messages + // from the subscription. + // + // Acknowledging a message whose ack deadline has expired may succeed, + // but such a message may be redelivered later. Acknowledging a message more + // than once will not result in an error. + Acknowledge(context.Context, *AcknowledgeRequest) (*google_protobuf.Empty, error) + // Pulls messages from the server. Returns an empty list if there are no + // messages available in the backlog. The server may return UNAVAILABLE if + // there are too many concurrent pull requests pending for the given + // subscription. + Pull(context.Context, *PullRequest) (*PullResponse, error) + // Modifies the PushConfig for a specified subscription. + // + // This may be used to change a push subscription to a pull one (signified + // by an empty PushConfig) or vice versa, or change the endpoint URL and other + // attributes of a push subscription. Messages will accumulate for + // delivery continuously through the call regardless of changes to the + // PushConfig. + ModifyPushConfig(context.Context, *ModifyPushConfigRequest) (*google_protobuf.Empty, error) +} + +func RegisterSubscriberServer(s *grpc.Server, srv SubscriberServer) { + s.RegisterService(&_Subscriber_serviceDesc, srv) +} + +func _Subscriber_CreateSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Subscription) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).CreateSubscription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Subscriber/CreateSubscription", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).CreateSubscription(ctx, req.(*Subscription)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_GetSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSubscriptionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).GetSubscription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Subscriber/GetSubscription", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).GetSubscription(ctx, req.(*GetSubscriptionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_ListSubscriptions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSubscriptionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).ListSubscriptions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Subscriber/ListSubscriptions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).ListSubscriptions(ctx, req.(*ListSubscriptionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_DeleteSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSubscriptionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).DeleteSubscription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Subscriber/DeleteSubscription", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).DeleteSubscription(ctx, req.(*DeleteSubscriptionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_ModifyAckDeadline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ModifyAckDeadlineRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).ModifyAckDeadline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Subscriber/ModifyAckDeadline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).ModifyAckDeadline(ctx, req.(*ModifyAckDeadlineRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_Acknowledge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AcknowledgeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).Acknowledge(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Subscriber/Acknowledge", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).Acknowledge(ctx, req.(*AcknowledgeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_Pull_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PullRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).Pull(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Subscriber/Pull", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).Pull(ctx, req.(*PullRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriber_ModifyPushConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ModifyPushConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).ModifyPushConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Subscriber/ModifyPushConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).ModifyPushConfig(ctx, req.(*ModifyPushConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Subscriber_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.pubsub.v1beta2.Subscriber", + HandlerType: (*SubscriberServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateSubscription", + Handler: _Subscriber_CreateSubscription_Handler, + }, + { + MethodName: "GetSubscription", + Handler: _Subscriber_GetSubscription_Handler, + }, + { + MethodName: "ListSubscriptions", + Handler: _Subscriber_ListSubscriptions_Handler, + }, + { + MethodName: "DeleteSubscription", + Handler: _Subscriber_DeleteSubscription_Handler, + }, + { + MethodName: "ModifyAckDeadline", + Handler: _Subscriber_ModifyAckDeadline_Handler, + }, + { + MethodName: "Acknowledge", + Handler: _Subscriber_Acknowledge_Handler, + }, + { + MethodName: "Pull", + Handler: _Subscriber_Pull_Handler, + }, + { + MethodName: "ModifyPushConfig", + Handler: _Subscriber_ModifyPushConfig_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/pubsub/v1beta2/pubsub.proto", +} + +// Client API for Publisher service + +type PublisherClient interface { + // Creates the given topic with the given name. + CreateTopic(ctx context.Context, in *Topic, opts ...grpc.CallOption) (*Topic, error) + // Adds one or more messages to the topic. Returns NOT_FOUND if the topic does + // not exist. + Publish(ctx context.Context, in *PublishRequest, opts ...grpc.CallOption) (*PublishResponse, error) + // Gets the configuration of a topic. + GetTopic(ctx context.Context, in *GetTopicRequest, opts ...grpc.CallOption) (*Topic, error) + // Lists matching topics. + ListTopics(ctx context.Context, in *ListTopicsRequest, opts ...grpc.CallOption) (*ListTopicsResponse, error) + // Lists the name of the subscriptions for this topic. + ListTopicSubscriptions(ctx context.Context, in *ListTopicSubscriptionsRequest, opts ...grpc.CallOption) (*ListTopicSubscriptionsResponse, error) + // Deletes the topic with the given name. Returns NOT_FOUND if the topic does + // not exist. After a topic is deleted, a new topic may be created with the + // same name; this is an entirely new topic with none of the old + // configuration or subscriptions. Existing subscriptions to this topic are + // not deleted. + DeleteTopic(ctx context.Context, in *DeleteTopicRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) +} + +type publisherClient struct { + cc *grpc.ClientConn +} + +func NewPublisherClient(cc *grpc.ClientConn) PublisherClient { + return &publisherClient{cc} +} + +func (c *publisherClient) CreateTopic(ctx context.Context, in *Topic, opts ...grpc.CallOption) (*Topic, error) { + out := new(Topic) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Publisher/CreateTopic", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) Publish(ctx context.Context, in *PublishRequest, opts ...grpc.CallOption) (*PublishResponse, error) { + out := new(PublishResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Publisher/Publish", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) GetTopic(ctx context.Context, in *GetTopicRequest, opts ...grpc.CallOption) (*Topic, error) { + out := new(Topic) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Publisher/GetTopic", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) ListTopics(ctx context.Context, in *ListTopicsRequest, opts ...grpc.CallOption) (*ListTopicsResponse, error) { + out := new(ListTopicsResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Publisher/ListTopics", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) ListTopicSubscriptions(ctx context.Context, in *ListTopicSubscriptionsRequest, opts ...grpc.CallOption) (*ListTopicSubscriptionsResponse, error) { + out := new(ListTopicSubscriptionsResponse) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Publisher/ListTopicSubscriptions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *publisherClient) DeleteTopic(ctx context.Context, in *DeleteTopicRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) { + out := new(google_protobuf.Empty) + err := grpc.Invoke(ctx, "/google.pubsub.v1beta2.Publisher/DeleteTopic", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Publisher service + +type PublisherServer interface { + // Creates the given topic with the given name. + CreateTopic(context.Context, *Topic) (*Topic, error) + // Adds one or more messages to the topic. Returns NOT_FOUND if the topic does + // not exist. + Publish(context.Context, *PublishRequest) (*PublishResponse, error) + // Gets the configuration of a topic. + GetTopic(context.Context, *GetTopicRequest) (*Topic, error) + // Lists matching topics. + ListTopics(context.Context, *ListTopicsRequest) (*ListTopicsResponse, error) + // Lists the name of the subscriptions for this topic. + ListTopicSubscriptions(context.Context, *ListTopicSubscriptionsRequest) (*ListTopicSubscriptionsResponse, error) + // Deletes the topic with the given name. Returns NOT_FOUND if the topic does + // not exist. After a topic is deleted, a new topic may be created with the + // same name; this is an entirely new topic with none of the old + // configuration or subscriptions. Existing subscriptions to this topic are + // not deleted. + DeleteTopic(context.Context, *DeleteTopicRequest) (*google_protobuf.Empty, error) +} + +func RegisterPublisherServer(s *grpc.Server, srv PublisherServer) { + s.RegisterService(&_Publisher_serviceDesc, srv) +} + +func _Publisher_CreateTopic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Topic) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).CreateTopic(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Publisher/CreateTopic", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).CreateTopic(ctx, req.(*Topic)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_Publish_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PublishRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).Publish(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Publisher/Publish", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).Publish(ctx, req.(*PublishRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_GetTopic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTopicRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).GetTopic(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Publisher/GetTopic", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).GetTopic(ctx, req.(*GetTopicRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_ListTopics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTopicsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).ListTopics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Publisher/ListTopics", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).ListTopics(ctx, req.(*ListTopicsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_ListTopicSubscriptions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTopicSubscriptionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).ListTopicSubscriptions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Publisher/ListTopicSubscriptions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).ListTopicSubscriptions(ctx, req.(*ListTopicSubscriptionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Publisher_DeleteTopic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTopicRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).DeleteTopic(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1beta2.Publisher/DeleteTopic", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).DeleteTopic(ctx, req.(*DeleteTopicRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Publisher_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.pubsub.v1beta2.Publisher", + HandlerType: (*PublisherServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateTopic", + Handler: _Publisher_CreateTopic_Handler, + }, + { + MethodName: "Publish", + Handler: _Publisher_Publish_Handler, + }, + { + MethodName: "GetTopic", + Handler: _Publisher_GetTopic_Handler, + }, + { + MethodName: "ListTopics", + Handler: _Publisher_ListTopics_Handler, + }, + { + MethodName: "ListTopicSubscriptions", + Handler: _Publisher_ListTopicSubscriptions_Handler, + }, + { + MethodName: "DeleteTopic", + Handler: _Publisher_DeleteTopic_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/pubsub/v1beta2/pubsub.proto", +} + +func init() { proto.RegisterFile("google/pubsub/v1beta2/pubsub.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1107 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0x5f, 0x6f, 0xdb, 0x54, + 0x14, 0x97, 0x93, 0xfe, 0xcb, 0x71, 0x4a, 0xda, 0xab, 0xad, 0x73, 0x53, 0x06, 0x9d, 0x37, 0x4a, + 0x86, 0xb4, 0x64, 0x0b, 0x45, 0x42, 0x8c, 0x7f, 0xed, 0x56, 0x4d, 0x91, 0xa8, 0xc8, 0xdc, 0x3e, + 0xa0, 0x09, 0x2d, 0x72, 0xec, 0x5b, 0xc7, 0xc4, 0xb1, 0x3d, 0x5f, 0xbb, 0x34, 0x7b, 0x43, 0x08, + 0xc1, 0x13, 0x1f, 0x85, 0xaf, 0xc0, 0x03, 0x1f, 0x82, 0xaf, 0x83, 0x7c, 0xef, 0xb5, 0x63, 0xa7, + 0xbe, 0xa9, 0xdb, 0x89, 0x37, 0xdf, 0x73, 0xcf, 0xff, 0x73, 0x7e, 0xe7, 0x1e, 0x83, 0x6a, 0x79, + 0x9e, 0xe5, 0xe0, 0x8e, 0x1f, 0x0d, 0x49, 0x34, 0xec, 0x9c, 0x3f, 0x19, 0xe2, 0x50, 0xef, 0xf2, + 0x63, 0xdb, 0x0f, 0xbc, 0xd0, 0x43, 0xb7, 0x19, 0x4f, 0x9b, 0x13, 0x39, 0x4f, 0x73, 0x27, 0x11, + 0x8d, 0x99, 0x86, 0xd1, 0x59, 0x07, 0x4f, 0xfc, 0x70, 0xca, 0x64, 0xd4, 0x1d, 0x58, 0x3e, 0xf5, + 0x7c, 0xdb, 0x40, 0x08, 0x96, 0x5c, 0x7d, 0x82, 0x15, 0x69, 0x57, 0x6a, 0xd5, 0x34, 0xfa, 0xad, + 0xfe, 0x2b, 0xc1, 0x7a, 0x9f, 0x2a, 0x3b, 0xc6, 0x84, 0xe8, 0x16, 0x8e, 0xb9, 0x4c, 0x3d, 0xd4, + 0x29, 0x57, 0x5d, 0xa3, 0xdf, 0xe8, 0x14, 0x40, 0x0f, 0xc3, 0xc0, 0x1e, 0x46, 0x21, 0x26, 0x4a, + 0x65, 0xb7, 0xda, 0x92, 0xbb, 0xfb, 0xed, 0x42, 0x5f, 0xda, 0x39, 0x6d, 0xed, 0x83, 0x54, 0xec, + 0xc8, 0x0d, 0x83, 0xa9, 0x96, 0xd1, 0x83, 0xee, 0x02, 0x4c, 0x18, 0xdb, 0xc0, 0x36, 0x95, 0x2a, + 0xf5, 0xaa, 0xc6, 0x29, 0x3d, 0xb3, 0xf9, 0x15, 0x34, 0xe6, 0xa4, 0xd1, 0x06, 0x54, 0xc7, 0x78, + 0xca, 0x03, 0x88, 0x3f, 0xd1, 0x2d, 0x58, 0x3e, 0xd7, 0x9d, 0x08, 0x2b, 0x15, 0x4a, 0x63, 0x87, + 0x2f, 0x2a, 0x9f, 0x4b, 0xea, 0xc7, 0xd0, 0x78, 0x81, 0x43, 0x1a, 0xb9, 0x86, 0xdf, 0x44, 0x98, + 0x84, 0x31, 0x73, 0x18, 0x9f, 0xb9, 0x02, 0x76, 0x50, 0x47, 0xf0, 0x5e, 0x3f, 0x1a, 0x3a, 0x36, + 0x19, 0x2d, 0xe4, 0x43, 0xdf, 0xc2, 0x1a, 0x77, 0x2e, 0x49, 0xc1, 0x83, 0x32, 0x29, 0xd0, 0x52, + 0x29, 0xb5, 0x0b, 0x8d, 0xd4, 0x12, 0xf1, 0x3d, 0x97, 0x60, 0xf4, 0x21, 0xc8, 0xb3, 0x1c, 0x10, + 0x45, 0xda, 0xad, 0xb6, 0x6a, 0x1a, 0xa4, 0x49, 0x20, 0xaa, 0x0d, 0x9b, 0xdf, 0xd9, 0x84, 0xc5, + 0x41, 0x12, 0x07, 0x15, 0x58, 0xf5, 0x03, 0xef, 0x27, 0x6c, 0x84, 0xdc, 0xc5, 0xe4, 0x88, 0x76, + 0xa0, 0xe6, 0xc7, 0xca, 0x88, 0xfd, 0x96, 0xe5, 0x64, 0x59, 0x5b, 0x8b, 0x09, 0x27, 0xf6, 0x5b, + 0x1c, 0x27, 0x9c, 0x5e, 0x86, 0xde, 0x18, 0xbb, 0x49, 0xc2, 0x63, 0xca, 0x69, 0x4c, 0x50, 0x03, + 0x40, 0x59, 0x53, 0xdc, 0xc3, 0x7d, 0x58, 0xa1, 0xf1, 0x33, 0xe7, 0xe4, 0xee, 0xfb, 0x82, 0xa0, + 0x59, 0xa6, 0x39, 0x2f, 0xda, 0x83, 0x86, 0x8b, 0x2f, 0xc2, 0x41, 0xc6, 0x1e, 0xab, 0xd0, 0x7a, + 0x4c, 0xee, 0xa7, 0x36, 0xdf, 0xc0, 0xdd, 0xd4, 0xe6, 0x49, 0x34, 0x24, 0x46, 0x60, 0xfb, 0xa1, + 0xed, 0xb9, 0x64, 0x71, 0x2d, 0xde, 0x25, 0x4c, 0x17, 0x3e, 0x10, 0x99, 0xe4, 0x21, 0x3f, 0x80, + 0x75, 0x92, 0xbd, 0xe0, 0x65, 0xc9, 0x13, 0x4b, 0x87, 0xf8, 0x09, 0xa0, 0xe7, 0xd8, 0xc1, 0x21, + 0x2e, 0xd1, 0x8b, 0x7f, 0x49, 0x50, 0xcf, 0xfa, 0x54, 0x84, 0xd9, 0x99, 0x68, 0x25, 0x9b, 0x92, + 0x43, 0x90, 0xfd, 0x88, 0x8c, 0x06, 0x86, 0xe7, 0x9e, 0xd9, 0x96, 0xb2, 0xb4, 0x2b, 0xb5, 0xe4, + 0xee, 0x3d, 0x61, 0x87, 0x92, 0xd1, 0x33, 0xca, 0xa8, 0x81, 0x9f, 0x7e, 0xa3, 0xc7, 0x70, 0x4b, + 0x37, 0xc6, 0x03, 0x13, 0xeb, 0xa6, 0x63, 0xbb, 0x78, 0x40, 0xb0, 0xe1, 0xb9, 0x26, 0x51, 0x96, + 0x69, 0x86, 0x91, 0x6e, 0x8c, 0x9f, 0xf3, 0xab, 0x13, 0x76, 0xa3, 0xfe, 0x23, 0x01, 0xcc, 0x94, + 0xa1, 0xfb, 0xb0, 0x4e, 0x9d, 0xc0, 0xae, 0xe9, 0x7b, 0xb6, 0x9b, 0xb4, 0x67, 0x3d, 0x26, 0x1e, + 0x71, 0x1a, 0x7a, 0x59, 0x30, 0x4d, 0x9e, 0x5c, 0xe9, 0xe8, 0xa2, 0x51, 0xf2, 0xae, 0xb3, 0x62, + 0x04, 0x0d, 0x0d, 0x1b, 0xd8, 0x3e, 0xc7, 0x66, 0x32, 0x06, 0x6f, 0xc3, 0x4a, 0x9c, 0x0a, 0xdb, + 0x4c, 0x0a, 0xa4, 0x1b, 0xe3, 0x9e, 0x89, 0xbe, 0x86, 0x55, 0x0e, 0x4e, 0xaa, 0xa5, 0xec, 0x0c, + 0x48, 0x84, 0xd4, 0x2f, 0x61, 0xeb, 0x05, 0x0e, 0xb3, 0x25, 0x4e, 0x1a, 0x42, 0x85, 0x7a, 0xb6, + 0xbf, 0x92, 0xcc, 0x65, 0x69, 0xaa, 0x0f, 0x4a, 0xdc, 0xba, 0x85, 0x40, 0xf9, 0x7f, 0x66, 0xc2, + 0x9f, 0x12, 0x6c, 0x17, 0x98, 0xe4, 0x40, 0xe9, 0x15, 0x01, 0x45, 0xee, 0xde, 0x17, 0xe4, 0x24, + 0x17, 0xf6, 0x0d, 0xd1, 0xf4, 0x0d, 0x6c, 0x33, 0x34, 0xdd, 0x34, 0x87, 0xbf, 0x48, 0x70, 0xe7, + 0xd8, 0x33, 0xed, 0xb3, 0x69, 0x06, 0x04, 0xe5, 0xe5, 0xe7, 0x71, 0x56, 0xb9, 0x01, 0xce, 0xd4, + 0x5f, 0x25, 0x90, 0xfb, 0x91, 0xe3, 0x5c, 0xc7, 0xee, 0x23, 0x40, 0x01, 0x0e, 0xa3, 0xc0, 0x1d, + 0xd8, 0x93, 0x09, 0x36, 0x6d, 0x3d, 0xc4, 0xce, 0x94, 0x9a, 0x5f, 0xd3, 0x36, 0xd9, 0x4d, 0x6f, + 0x76, 0x81, 0xee, 0x41, 0x7d, 0xa2, 0x5f, 0x0c, 0xd2, 0x17, 0xab, 0x4a, 0xeb, 0x2e, 0x4f, 0xf4, + 0x8b, 0xe3, 0xe4, 0x39, 0x32, 0xa0, 0xce, 0x9c, 0xe0, 0xd5, 0x3c, 0x81, 0xcd, 0x80, 0xa3, 0x60, + 0x26, 0xc7, 0x2a, 0xba, 0x27, 0x88, 0x6f, 0x0e, 0x35, 0xda, 0x46, 0x90, 0x27, 0x10, 0xf5, 0x77, + 0x09, 0x14, 0x96, 0xee, 0x83, 0xd9, 0xf4, 0xb8, 0x4e, 0xdc, 0x33, 0x20, 0x56, 0xb2, 0x40, 0x14, + 0x8d, 0xaa, 0xaa, 0x70, 0x54, 0xbd, 0x04, 0x74, 0x60, 0x8c, 0x5d, 0xef, 0x67, 0x07, 0x9b, 0xd6, + 0xb5, 0x5c, 0xb8, 0x03, 0xab, 0xcc, 0x05, 0x36, 0xad, 0x6a, 0xda, 0x0a, 0xf5, 0x81, 0x74, 0xff, + 0x58, 0x01, 0xe0, 0x7d, 0x38, 0xc4, 0x01, 0x7a, 0x0d, 0xe8, 0x59, 0x80, 0xf5, 0x7c, 0x6f, 0xa2, + 0x32, 0x68, 0x68, 0x96, 0x61, 0x42, 0x98, 0xae, 0x34, 0x39, 0xd2, 0x23, 0x81, 0x5c, 0xf1, 0x90, + 0x29, 0x67, 0xe6, 0x9c, 0xad, 0x1c, 0x39, 0xc8, 0xa3, 0x8e, 0x40, 0x52, 0x34, 0x8f, 0x9a, 0x8f, + 0xcb, 0x0b, 0xf0, 0xfe, 0x7b, 0x9d, 0x3c, 0x94, 0x39, 0x6f, 0x44, 0x7a, 0x84, 0x53, 0xa0, 0xb9, + 0x95, 0x4a, 0xf0, 0x75, 0xb8, 0x7d, 0x14, 0xaf, 0xc3, 0xe8, 0x47, 0xd8, 0xbc, 0xd4, 0x89, 0xc2, + 0xb8, 0x44, 0x3d, 0x2b, 0xd4, 0xde, 0x07, 0x39, 0xd3, 0x5e, 0xe8, 0xa1, 0x40, 0xef, 0xe5, 0x16, + 0x14, 0x6a, 0xfc, 0x1e, 0x96, 0x62, 0x7c, 0x22, 0x55, 0x38, 0x5c, 0xd2, 0x09, 0x22, 0x2c, 0x6c, + 0x0e, 0xe0, 0xaf, 0x60, 0x63, 0x7e, 0xf2, 0xa1, 0xf6, 0xc2, 0xf8, 0x2f, 0x8d, 0x48, 0x91, 0xb3, + 0xdd, 0xbf, 0x97, 0xa0, 0xc6, 0x97, 0x5b, 0x1c, 0xa0, 0x1e, 0xc8, 0x0c, 0x09, 0xec, 0xcf, 0x63, + 0xe1, 0xce, 0xd8, 0x5c, 0x78, 0x8b, 0x7e, 0x80, 0x55, 0xae, 0x17, 0x7d, 0x24, 0x7e, 0x6b, 0x33, + 0xeb, 0x7b, 0x73, 0xef, 0x2a, 0x36, 0x9e, 0x8e, 0x3e, 0xac, 0x25, 0x7f, 0x08, 0x68, 0x4f, 0x8c, + 0xa3, 0xec, 0xda, 0x76, 0x85, 0xaf, 0x3a, 0xc0, 0x6c, 0x83, 0x46, 0xad, 0x05, 0x08, 0xc8, 0xed, + 0xf3, 0xcd, 0x87, 0x25, 0x38, 0xb9, 0xd3, 0xbf, 0x49, 0xb0, 0x55, 0xbc, 0xbe, 0xa2, 0xfd, 0xab, + 0xb4, 0x14, 0xe2, 0xf4, 0xb3, 0x6b, 0x4a, 0xa5, 0xc9, 0x93, 0x33, 0x5b, 0xad, 0xb0, 0xdd, 0x2f, + 0x6f, 0xbe, 0xa2, 0x0e, 0x3a, 0xb4, 0x60, 0xdb, 0xf0, 0x26, 0xc5, 0x7a, 0x0e, 0x65, 0xb6, 0x4f, + 0xf5, 0x63, 0x91, 0xbe, 0xf4, 0xea, 0x29, 0xe7, 0xb2, 0x3c, 0x47, 0x77, 0xad, 0xb6, 0x17, 0x58, + 0x1d, 0x0b, 0xbb, 0x54, 0x61, 0x87, 0x5d, 0xe9, 0xbe, 0x4d, 0xe6, 0x7e, 0xa5, 0x9f, 0xb2, 0xe3, + 0x70, 0x85, 0xf2, 0x7d, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe2, 0x2d, 0xb0, 0x67, 0x71, + 0x0f, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go new file mode 100644 index 0000000..304006d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go @@ -0,0 +1,247 @@ +// Code generated by protoc-gen-go. +// source: google/rpc/code.proto +// DO NOT EDIT! + +/* +Package code is a generated protocol buffer package. + +It is generated from these files: + google/rpc/code.proto + +It has these top-level messages: +*/ +package code + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The canonical error codes for Google APIs. +// +// +// Sometimes multiple error codes may apply. Services should return +// the most specific error code that applies. For example, prefer +// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply. +// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`. +type Code int32 + +const ( + // Not an error; returned on success + // + // HTTP Mapping: 200 OK + Code_OK Code = 0 + // The operation was cancelled, typically by the caller. + // + // HTTP Mapping: 499 Client Closed Request + Code_CANCELLED Code = 1 + // Unknown error. For example, this error may be returned when + // a `Status` value received from another address space belongs to + // an error space that is not known in this address space. Also + // errors raised by APIs that do not return enough error information + // may be converted to this error. + // + // HTTP Mapping: 500 Internal Server Error + Code_UNKNOWN Code = 2 + // The client specified an invalid argument. Note that this differs + // from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments + // that are problematic regardless of the state of the system + // (e.g., a malformed file name). + // + // HTTP Mapping: 400 Bad Request + Code_INVALID_ARGUMENT Code = 3 + // The deadline expired before the operation could complete. For operations + // that change the state of the system, this error may be returned + // even if the operation has completed successfully. For example, a + // successful response from a server could have been delayed long + // enough for the deadline to expire. + // + // HTTP Mapping: 504 Gateway Timeout + Code_DEADLINE_EXCEEDED Code = 4 + // Some requested entity (e.g., file or directory) was not found. + // For privacy reasons, this code *may* be returned when the client + // does not have the access rights to the entity, though such usage is + // discouraged. + // + // HTTP Mapping: 404 Not Found + Code_NOT_FOUND Code = 5 + // The entity that a client attempted to create (e.g., file or directory) + // already exists. + // + // HTTP Mapping: 409 Conflict + Code_ALREADY_EXISTS Code = 6 + // The caller does not have permission to execute the specified + // operation. `PERMISSION_DENIED` must not be used for rejections + // caused by exhausting some resource (use `RESOURCE_EXHAUSTED` + // instead for those errors). `PERMISSION_DENIED` must not be + // used if the caller can not be identified (use `UNAUTHENTICATED` + // instead for those errors). + // + // HTTP Mapping: 403 Forbidden + Code_PERMISSION_DENIED Code = 7 + // The request does not have valid authentication credentials for the + // operation. + // + // HTTP Mapping: 401 Unauthorized + Code_UNAUTHENTICATED Code = 16 + // Some resource has been exhausted, perhaps a per-user quota, or + // perhaps the entire file system is out of space. + // + // HTTP Mapping: 429 Too Many Requests + Code_RESOURCE_EXHAUSTED Code = 8 + // The operation was rejected because the system is not in a state + // required for the operation's execution. For example, the directory + // to be deleted is non-empty, an rmdir operation is applied to + // a non-directory, etc. + // + // Service implementors can use the following guidelines to decide + // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: + // (a) Use `UNAVAILABLE` if the client can retry just the failing call. + // (b) Use `ABORTED` if the client should retry at a higher level + // (e.g., restarting a read-modify-write sequence). + // (c) Use `FAILED_PRECONDITION` if the client should not retry until + // the system state has been explicitly fixed. E.g., if an "rmdir" + // fails because the directory is non-empty, `FAILED_PRECONDITION` + // should be returned since the client should not retry unless + // the files are deleted from the directory. + // + // HTTP Mapping: 400 Bad Request + Code_FAILED_PRECONDITION Code = 9 + // The operation was aborted, typically due to a concurrency issue such as + // a sequencer check failure or transaction abort. + // + // See the guidelines above for deciding between `FAILED_PRECONDITION`, + // `ABORTED`, and `UNAVAILABLE`. + // + // HTTP Mapping: 409 Conflict + Code_ABORTED Code = 10 + // The operation was attempted past the valid range. E.g., seeking or + // reading past end-of-file. + // + // Unlike `INVALID_ARGUMENT`, this error indicates a problem that may + // be fixed if the system state changes. For example, a 32-bit file + // system will generate `INVALID_ARGUMENT` if asked to read at an + // offset that is not in the range [0,2^32-1], but it will generate + // `OUT_OF_RANGE` if asked to read from an offset past the current + // file size. + // + // There is a fair bit of overlap between `FAILED_PRECONDITION` and + // `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific + // error) when it applies so that callers who are iterating through + // a space can easily look for an `OUT_OF_RANGE` error to detect when + // they are done. + // + // HTTP Mapping: 400 Bad Request + Code_OUT_OF_RANGE Code = 11 + // The operation is not implemented or is not supported/enabled in this + // service. + // + // HTTP Mapping: 501 Not Implemented + Code_UNIMPLEMENTED Code = 12 + // Internal errors. This means that some invariants expected by the + // underlying system have been broken. This error code is reserved + // for serious errors. + // + // HTTP Mapping: 500 Internal Server Error + Code_INTERNAL Code = 13 + // The service is currently unavailable. This is most likely a + // transient condition, which can be corrected by retrying with + // a backoff. + // + // See the guidelines above for deciding between `FAILED_PRECONDITION`, + // `ABORTED`, and `UNAVAILABLE`. + // + // HTTP Mapping: 503 Service Unavailable + Code_UNAVAILABLE Code = 14 + // Unrecoverable data loss or corruption. + // + // HTTP Mapping: 500 Internal Server Error + Code_DATA_LOSS Code = 15 +) + +var Code_name = map[int32]string{ + 0: "OK", + 1: "CANCELLED", + 2: "UNKNOWN", + 3: "INVALID_ARGUMENT", + 4: "DEADLINE_EXCEEDED", + 5: "NOT_FOUND", + 6: "ALREADY_EXISTS", + 7: "PERMISSION_DENIED", + 16: "UNAUTHENTICATED", + 8: "RESOURCE_EXHAUSTED", + 9: "FAILED_PRECONDITION", + 10: "ABORTED", + 11: "OUT_OF_RANGE", + 12: "UNIMPLEMENTED", + 13: "INTERNAL", + 14: "UNAVAILABLE", + 15: "DATA_LOSS", +} +var Code_value = map[string]int32{ + "OK": 0, + "CANCELLED": 1, + "UNKNOWN": 2, + "INVALID_ARGUMENT": 3, + "DEADLINE_EXCEEDED": 4, + "NOT_FOUND": 5, + "ALREADY_EXISTS": 6, + "PERMISSION_DENIED": 7, + "UNAUTHENTICATED": 16, + "RESOURCE_EXHAUSTED": 8, + "FAILED_PRECONDITION": 9, + "ABORTED": 10, + "OUT_OF_RANGE": 11, + "UNIMPLEMENTED": 12, + "INTERNAL": 13, + "UNAVAILABLE": 14, + "DATA_LOSS": 15, +} + +func (x Code) String() string { + return proto.EnumName(Code_name, int32(x)) +} +func (Code) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func init() { + proto.RegisterEnum("google.rpc.Code", Code_name, Code_value) +} + +func init() { proto.RegisterFile("google/rpc/code.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 362 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0x51, 0xcd, 0x6e, 0x93, 0x31, + 0x10, 0xa4, 0x69, 0x49, 0x9b, 0xcd, 0xdf, 0xd6, 0xa5, 0xf0, 0x0e, 0x1c, 0x92, 0x43, 0x8f, 0x9c, + 0x36, 0x9f, 0x37, 0xad, 0x55, 0x67, 0xfd, 0xc9, 0x3f, 0x25, 0x70, 0xb1, 0x4a, 0x1a, 0x7d, 0x42, + 0x2a, 0x75, 0xf4, 0xc1, 0x13, 0xf1, 0x12, 0xbc, 0x1e, 0x72, 0x8b, 0xe8, 0xc5, 0x87, 0x99, 0xf1, + 0xee, 0xce, 0x0c, 0x5c, 0x76, 0xa5, 0x74, 0x8f, 0xfb, 0x65, 0x7f, 0xd8, 0x2d, 0x77, 0xe5, 0x61, + 0xbf, 0x38, 0xf4, 0xe5, 0x57, 0x51, 0xf0, 0x02, 0x2f, 0xfa, 0xc3, 0xee, 0xe3, 0x9f, 0x01, 0x9c, + 0x34, 0xe5, 0x61, 0xaf, 0x86, 0x30, 0x70, 0xb7, 0xf8, 0x46, 0x4d, 0x61, 0xd4, 0x90, 0x34, 0x6c, + 0x2d, 0x6b, 0x3c, 0x52, 0x63, 0x38, 0x4d, 0x72, 0x2b, 0xee, 0xb3, 0xe0, 0x40, 0xbd, 0x03, 0x34, + 0x72, 0x47, 0xd6, 0xe8, 0x4c, 0xfe, 0x3a, 0x6d, 0x58, 0x22, 0x1e, 0xab, 0x4b, 0x38, 0xd7, 0x4c, + 0xda, 0x1a, 0xe1, 0xcc, 0xdb, 0x86, 0x59, 0xb3, 0xc6, 0x93, 0x3a, 0x48, 0x5c, 0xcc, 0x6b, 0x97, + 0x44, 0xe3, 0x5b, 0xa5, 0x60, 0x46, 0xd6, 0x33, 0xe9, 0x2f, 0x99, 0xb7, 0x26, 0xc4, 0x80, 0xc3, + 0xfa, 0xb3, 0x65, 0xbf, 0x31, 0x21, 0x18, 0x27, 0x59, 0xb3, 0x18, 0xd6, 0x78, 0xaa, 0x2e, 0x60, + 0x9e, 0x84, 0x52, 0xbc, 0x61, 0x89, 0xa6, 0xa1, 0xc8, 0x1a, 0x51, 0xbd, 0x07, 0xe5, 0x39, 0xb8, + 0xe4, 0x9b, 0xba, 0xe5, 0x86, 0x52, 0xa8, 0xf8, 0x99, 0xfa, 0x00, 0x17, 0x6b, 0x32, 0x96, 0x75, + 0x6e, 0x3d, 0x37, 0x4e, 0xb4, 0x89, 0xc6, 0x09, 0x8e, 0xea, 0xe5, 0xb4, 0x72, 0xbe, 0xaa, 0x40, + 0x21, 0x4c, 0x5c, 0x8a, 0xd9, 0xad, 0xb3, 0x27, 0xb9, 0x66, 0x1c, 0xab, 0x73, 0x98, 0x26, 0x31, + 0x9b, 0xd6, 0x72, 0xb5, 0xc1, 0x1a, 0x27, 0x6a, 0x02, 0x67, 0x46, 0x22, 0x7b, 0x21, 0x8b, 0x53, + 0x35, 0x87, 0x71, 0x12, 0xba, 0x23, 0x63, 0x69, 0x65, 0x19, 0x67, 0xd5, 0x90, 0xa6, 0x48, 0xd9, + 0xba, 0x10, 0x70, 0xbe, 0xda, 0xc2, 0x6c, 0x57, 0x7e, 0x2c, 0x5e, 0xb3, 0x5c, 0x8d, 0x6a, 0x90, + 0x6d, 0x8d, 0xb8, 0x3d, 0xfa, 0x7a, 0xf5, 0x8f, 0xe8, 0xca, 0xe3, 0xfd, 0x53, 0xb7, 0x28, 0x7d, + 0xb7, 0xec, 0xf6, 0x4f, 0xcf, 0x05, 0x2c, 0x5f, 0xa8, 0xfb, 0xc3, 0xf7, 0x9f, 0xff, 0xab, 0xf9, + 0x54, 0x9f, 0xdf, 0x83, 0x63, 0xdf, 0x36, 0xdf, 0x86, 0xcf, 0xaa, 0xab, 0xbf, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x8e, 0x97, 0x77, 0xc2, 0xbf, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go new file mode 100644 index 0000000..8eda666 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go @@ -0,0 +1,423 @@ +// Code generated by protoc-gen-go. +// source: google/rpc/error_details.proto +// DO NOT EDIT! + +/* +Package errdetails is a generated protocol buffer package. + +It is generated from these files: + google/rpc/error_details.proto + +It has these top-level messages: + RetryInfo + DebugInfo + QuotaFailure + BadRequest + RequestInfo + ResourceInfo + Help + LocalizedMessage +*/ +package errdetails + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/duration" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Describes when the clients can retry a failed request. Clients could ignore +// the recommendation here or retry when this information is missing from error +// responses. +// +// It's always recommended that clients should use exponential backoff when +// retrying. +// +// Clients should wait until `retry_delay` amount of time has passed since +// receiving the error response before retrying. If retrying requests also +// fail, clients should use an exponential backoff scheme to gradually increase +// the delay between retries based on `retry_delay`, until either a maximum +// number of retires have been reached or a maximum retry delay cap has been +// reached. +type RetryInfo struct { + // Clients should wait at least this long between retrying the same request. + RetryDelay *google_protobuf.Duration `protobuf:"bytes,1,opt,name=retry_delay,json=retryDelay" json:"retry_delay,omitempty"` +} + +func (m *RetryInfo) Reset() { *m = RetryInfo{} } +func (m *RetryInfo) String() string { return proto.CompactTextString(m) } +func (*RetryInfo) ProtoMessage() {} +func (*RetryInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *RetryInfo) GetRetryDelay() *google_protobuf.Duration { + if m != nil { + return m.RetryDelay + } + return nil +} + +// Describes additional debugging info. +type DebugInfo struct { + // The stack trace entries indicating where the error occurred. + StackEntries []string `protobuf:"bytes,1,rep,name=stack_entries,json=stackEntries" json:"stack_entries,omitempty"` + // Additional debugging information provided by the server. + Detail string `protobuf:"bytes,2,opt,name=detail" json:"detail,omitempty"` +} + +func (m *DebugInfo) Reset() { *m = DebugInfo{} } +func (m *DebugInfo) String() string { return proto.CompactTextString(m) } +func (*DebugInfo) ProtoMessage() {} +func (*DebugInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *DebugInfo) GetStackEntries() []string { + if m != nil { + return m.StackEntries + } + return nil +} + +func (m *DebugInfo) GetDetail() string { + if m != nil { + return m.Detail + } + return "" +} + +// Describes how a quota check failed. +// +// For example if a daily limit was exceeded for the calling project, +// a service could respond with a QuotaFailure detail containing the project +// id and the description of the quota limit that was exceeded. If the +// calling project hasn't enabled the service in the developer console, then +// a service could respond with the project id and set `service_disabled` +// to true. +// +// Also see RetryDetail and Help types for other details about handling a +// quota failure. +type QuotaFailure struct { + // Describes all quota violations. + Violations []*QuotaFailure_Violation `protobuf:"bytes,1,rep,name=violations" json:"violations,omitempty"` +} + +func (m *QuotaFailure) Reset() { *m = QuotaFailure{} } +func (m *QuotaFailure) String() string { return proto.CompactTextString(m) } +func (*QuotaFailure) ProtoMessage() {} +func (*QuotaFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *QuotaFailure) GetViolations() []*QuotaFailure_Violation { + if m != nil { + return m.Violations + } + return nil +} + +// A message type used to describe a single quota violation. For example, a +// daily quota or a custom quota that was exceeded. +type QuotaFailure_Violation struct { + // The subject on which the quota check failed. + // For example, "clientip:<ip address of client>" or "project:<Google + // developer project id>". + Subject string `protobuf:"bytes,1,opt,name=subject" json:"subject,omitempty"` + // A description of how the quota check failed. Clients can use this + // description to find more about the quota configuration in the service's + // public documentation, or find the relevant quota limit to adjust through + // developer console. + // + // For example: "Service disabled" or "Daily Limit for read operations + // exceeded". + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *QuotaFailure_Violation) Reset() { *m = QuotaFailure_Violation{} } +func (m *QuotaFailure_Violation) String() string { return proto.CompactTextString(m) } +func (*QuotaFailure_Violation) ProtoMessage() {} +func (*QuotaFailure_Violation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *QuotaFailure_Violation) GetSubject() string { + if m != nil { + return m.Subject + } + return "" +} + +func (m *QuotaFailure_Violation) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// Describes violations in a client request. This error type focuses on the +// syntactic aspects of the request. +type BadRequest struct { + // Describes all violations in a client request. + FieldViolations []*BadRequest_FieldViolation `protobuf:"bytes,1,rep,name=field_violations,json=fieldViolations" json:"field_violations,omitempty"` +} + +func (m *BadRequest) Reset() { *m = BadRequest{} } +func (m *BadRequest) String() string { return proto.CompactTextString(m) } +func (*BadRequest) ProtoMessage() {} +func (*BadRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *BadRequest) GetFieldViolations() []*BadRequest_FieldViolation { + if m != nil { + return m.FieldViolations + } + return nil +} + +// A message type used to describe a single bad request field. +type BadRequest_FieldViolation struct { + // A path leading to a field in the request body. The value will be a + // sequence of dot-separated identifiers that identify a protocol buffer + // field. E.g., "field_violations.field" would identify this field. + Field string `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + // A description of why the request element is bad. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *BadRequest_FieldViolation) Reset() { *m = BadRequest_FieldViolation{} } +func (m *BadRequest_FieldViolation) String() string { return proto.CompactTextString(m) } +func (*BadRequest_FieldViolation) ProtoMessage() {} +func (*BadRequest_FieldViolation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } + +func (m *BadRequest_FieldViolation) GetField() string { + if m != nil { + return m.Field + } + return "" +} + +func (m *BadRequest_FieldViolation) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// Contains metadata about the request that clients can attach when filing a bug +// or providing other forms of feedback. +type RequestInfo struct { + // An opaque string that should only be interpreted by the service generating + // it. For example, it can be used to identify requests in the service's logs. + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId" json:"request_id,omitempty"` + // Any data that was used to serve this request. For example, an encrypted + // stack trace that can be sent back to the service provider for debugging. + ServingData string `protobuf:"bytes,2,opt,name=serving_data,json=servingData" json:"serving_data,omitempty"` +} + +func (m *RequestInfo) Reset() { *m = RequestInfo{} } +func (m *RequestInfo) String() string { return proto.CompactTextString(m) } +func (*RequestInfo) ProtoMessage() {} +func (*RequestInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *RequestInfo) GetRequestId() string { + if m != nil { + return m.RequestId + } + return "" +} + +func (m *RequestInfo) GetServingData() string { + if m != nil { + return m.ServingData + } + return "" +} + +// Describes the resource that is being accessed. +type ResourceInfo struct { + // A name for the type of resource being accessed, e.g. "sql table", + // "cloud storage bucket", "file", "Google calendar"; or the type URL + // of the resource: e.g. "type.googleapis.com/google.pubsub.v1.Topic". + ResourceType string `protobuf:"bytes,1,opt,name=resource_type,json=resourceType" json:"resource_type,omitempty"` + // The name of the resource being accessed. For example, a shared calendar + // name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current + // error is [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED]. + ResourceName string `protobuf:"bytes,2,opt,name=resource_name,json=resourceName" json:"resource_name,omitempty"` + // The owner of the resource (optional). + // For example, "user:<owner email>" or "project:<Google developer project + // id>". + Owner string `protobuf:"bytes,3,opt,name=owner" json:"owner,omitempty"` + // Describes what error is encountered when accessing this resource. + // For example, updating a cloud project may require the `writer` permission + // on the developer console project. + Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` +} + +func (m *ResourceInfo) Reset() { *m = ResourceInfo{} } +func (m *ResourceInfo) String() string { return proto.CompactTextString(m) } +func (*ResourceInfo) ProtoMessage() {} +func (*ResourceInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ResourceInfo) GetResourceType() string { + if m != nil { + return m.ResourceType + } + return "" +} + +func (m *ResourceInfo) GetResourceName() string { + if m != nil { + return m.ResourceName + } + return "" +} + +func (m *ResourceInfo) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *ResourceInfo) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// Provides links to documentation or for performing an out of band action. +// +// For example, if a quota check failed with an error indicating the calling +// project hasn't enabled the accessed service, this can contain a URL pointing +// directly to the right place in the developer console to flip the bit. +type Help struct { + // URL(s) pointing to additional information on handling the current error. + Links []*Help_Link `protobuf:"bytes,1,rep,name=links" json:"links,omitempty"` +} + +func (m *Help) Reset() { *m = Help{} } +func (m *Help) String() string { return proto.CompactTextString(m) } +func (*Help) ProtoMessage() {} +func (*Help) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *Help) GetLinks() []*Help_Link { + if m != nil { + return m.Links + } + return nil +} + +// Describes a URL link. +type Help_Link struct { + // Describes what the link offers. + Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` + // The URL of the link. + Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` +} + +func (m *Help_Link) Reset() { *m = Help_Link{} } +func (m *Help_Link) String() string { return proto.CompactTextString(m) } +func (*Help_Link) ProtoMessage() {} +func (*Help_Link) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } + +func (m *Help_Link) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Help_Link) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +// Provides a localized error message that is safe to return to the user +// which can be attached to an RPC error. +type LocalizedMessage struct { + // The locale used following the specification defined at + // http://www.rfc-editor.org/rfc/bcp/bcp47.txt. + // Examples are: "en-US", "fr-CH", "es-MX" + Locale string `protobuf:"bytes,1,opt,name=locale" json:"locale,omitempty"` + // The localized error message in the above locale. + Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` +} + +func (m *LocalizedMessage) Reset() { *m = LocalizedMessage{} } +func (m *LocalizedMessage) String() string { return proto.CompactTextString(m) } +func (*LocalizedMessage) ProtoMessage() {} +func (*LocalizedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *LocalizedMessage) GetLocale() string { + if m != nil { + return m.Locale + } + return "" +} + +func (m *LocalizedMessage) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func init() { + proto.RegisterType((*RetryInfo)(nil), "google.rpc.RetryInfo") + proto.RegisterType((*DebugInfo)(nil), "google.rpc.DebugInfo") + proto.RegisterType((*QuotaFailure)(nil), "google.rpc.QuotaFailure") + proto.RegisterType((*QuotaFailure_Violation)(nil), "google.rpc.QuotaFailure.Violation") + proto.RegisterType((*BadRequest)(nil), "google.rpc.BadRequest") + proto.RegisterType((*BadRequest_FieldViolation)(nil), "google.rpc.BadRequest.FieldViolation") + proto.RegisterType((*RequestInfo)(nil), "google.rpc.RequestInfo") + proto.RegisterType((*ResourceInfo)(nil), "google.rpc.ResourceInfo") + proto.RegisterType((*Help)(nil), "google.rpc.Help") + proto.RegisterType((*Help_Link)(nil), "google.rpc.Help.Link") + proto.RegisterType((*LocalizedMessage)(nil), "google.rpc.LocalizedMessage") +} + +func init() { proto.RegisterFile("google/rpc/error_details.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 551 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xc1, 0x6f, 0xd3, 0x3e, + 0x14, 0xc7, 0x95, 0x75, 0xdb, 0x4f, 0x79, 0xed, 0x6f, 0x94, 0x08, 0x50, 0xa9, 0x04, 0x2a, 0x41, + 0x48, 0x95, 0x90, 0x52, 0x69, 0xdc, 0xc6, 0x01, 0xa9, 0x64, 0x5b, 0x27, 0x0d, 0x28, 0x11, 0xe2, + 0xc0, 0x25, 0x72, 0x93, 0xd7, 0xc8, 0xd4, 0x8d, 0x83, 0xed, 0x0c, 0x95, 0xbf, 0x82, 0x3b, 0x37, + 0x4e, 0xfc, 0x99, 0xc8, 0xb1, 0xbd, 0xa6, 0xeb, 0x85, 0x5b, 0xbe, 0xcf, 0x1f, 0x7f, 0xf3, 0x7d, + 0x89, 0x9f, 0xe1, 0x69, 0xc1, 0x79, 0xc1, 0x70, 0x22, 0xaa, 0x6c, 0x82, 0x42, 0x70, 0x91, 0xe6, + 0xa8, 0x08, 0x65, 0x32, 0xaa, 0x04, 0x57, 0x3c, 0x00, 0xb3, 0x1e, 0x89, 0x2a, 0x1b, 0x3a, 0xb6, + 0x59, 0x59, 0xd4, 0xcb, 0x49, 0x5e, 0x0b, 0xa2, 0x28, 0x2f, 0x0d, 0x1b, 0x5e, 0x82, 0x9f, 0xa0, + 0x12, 0x9b, 0xab, 0x72, 0xc9, 0x83, 0x33, 0xe8, 0x0a, 0x2d, 0xd2, 0x1c, 0x19, 0xd9, 0x0c, 0xbc, + 0x91, 0x37, 0xee, 0x9e, 0x3e, 0x8e, 0xac, 0x9d, 0xb3, 0x88, 0x62, 0x6b, 0x91, 0x40, 0x43, 0xc7, + 0x1a, 0x0e, 0x67, 0xe0, 0xc7, 0xb8, 0xa8, 0x8b, 0xc6, 0xe8, 0x39, 0xfc, 0x2f, 0x15, 0xc9, 0x56, + 0x29, 0x96, 0x4a, 0x50, 0x94, 0x03, 0x6f, 0xd4, 0x19, 0xfb, 0x49, 0xaf, 0x29, 0x9e, 0x9b, 0x5a, + 0xf0, 0x08, 0x8e, 0x4d, 0xee, 0xc1, 0xc1, 0xc8, 0x1b, 0xfb, 0x89, 0x55, 0xe1, 0x2f, 0x0f, 0x7a, + 0x1f, 0x6b, 0xae, 0xc8, 0x05, 0xa1, 0xac, 0x16, 0x18, 0x4c, 0x01, 0x6e, 0x28, 0x67, 0xcd, 0x3b, + 0x8d, 0x55, 0xf7, 0x34, 0x8c, 0xb6, 0x4d, 0x46, 0x6d, 0x3a, 0xfa, 0xec, 0xd0, 0xa4, 0xb5, 0x6b, + 0x78, 0x09, 0xfe, 0xed, 0x42, 0x30, 0x80, 0xff, 0x64, 0xbd, 0xf8, 0x8a, 0x99, 0x6a, 0x7a, 0xf4, + 0x13, 0x27, 0x83, 0x11, 0x74, 0x73, 0x94, 0x99, 0xa0, 0x95, 0x06, 0x6d, 0xb0, 0x76, 0x29, 0xfc, + 0xe3, 0x01, 0x4c, 0x49, 0x9e, 0xe0, 0xb7, 0x1a, 0xa5, 0x0a, 0xe6, 0xd0, 0x5f, 0x52, 0x64, 0x79, + 0xba, 0x97, 0xf0, 0x45, 0x3b, 0xe1, 0x76, 0x47, 0x74, 0xa1, 0xf1, 0x6d, 0xc8, 0x7b, 0xcb, 0x1d, + 0x2d, 0x87, 0x33, 0x38, 0xd9, 0x45, 0x82, 0x07, 0x70, 0xd4, 0x40, 0x36, 0xac, 0x11, 0xff, 0x10, + 0xf5, 0x03, 0x74, 0xed, 0x4b, 0x9b, 0x9f, 0xf2, 0x04, 0x40, 0x18, 0x99, 0x52, 0xe7, 0xe5, 0xdb, + 0xca, 0x55, 0x1e, 0x3c, 0x83, 0x9e, 0x44, 0x71, 0x43, 0xcb, 0x22, 0xcd, 0x89, 0x22, 0xce, 0xd0, + 0xd6, 0x62, 0xa2, 0x48, 0xf8, 0xd3, 0x83, 0x5e, 0x82, 0x92, 0xd7, 0x22, 0x43, 0xf7, 0x9f, 0x85, + 0xd5, 0xa9, 0xda, 0x54, 0x68, 0x5d, 0x7b, 0xae, 0xf8, 0x69, 0x53, 0xe1, 0x0e, 0x54, 0x92, 0x35, + 0x5a, 0xe7, 0x5b, 0xe8, 0x3d, 0x59, 0xa3, 0xee, 0x91, 0x7f, 0x2f, 0x51, 0x0c, 0x3a, 0xa6, 0xc7, + 0x46, 0xdc, 0xed, 0xf1, 0x70, 0xbf, 0x47, 0x0e, 0x87, 0x33, 0x64, 0x55, 0xf0, 0x12, 0x8e, 0x18, + 0x2d, 0x57, 0xee, 0xe3, 0x3f, 0x6c, 0x7f, 0x7c, 0x0d, 0x44, 0xd7, 0xb4, 0x5c, 0x25, 0x86, 0x19, + 0x9e, 0xc1, 0xa1, 0x96, 0x77, 0xed, 0xbd, 0x3d, 0xfb, 0xa0, 0x0f, 0x9d, 0x5a, 0xb8, 0x03, 0xaa, + 0x1f, 0xc3, 0x18, 0xfa, 0xd7, 0x3c, 0x23, 0x8c, 0xfe, 0xc0, 0xfc, 0x1d, 0x4a, 0x49, 0x0a, 0xd4, + 0x27, 0x99, 0xe9, 0x9a, 0xeb, 0xdf, 0x2a, 0x7d, 0xce, 0xd6, 0x06, 0xb1, 0x0e, 0x4e, 0x4e, 0x19, + 0x9c, 0x64, 0x7c, 0xdd, 0x0a, 0x39, 0xbd, 0x7f, 0xae, 0x27, 0x39, 0x36, 0x83, 0x3c, 0xd7, 0xa3, + 0x36, 0xf7, 0xbe, 0xbc, 0xb1, 0x40, 0xc1, 0x19, 0x29, 0x8b, 0x88, 0x8b, 0x62, 0x52, 0x60, 0xd9, + 0x0c, 0xe2, 0xc4, 0x2c, 0x91, 0x8a, 0x4a, 0x77, 0x11, 0xd8, 0x5b, 0xe0, 0xf5, 0xf6, 0xf1, 0xf7, + 0x41, 0x27, 0x99, 0xbf, 0x5d, 0x1c, 0x37, 0x3b, 0x5e, 0xfd, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xc0, + 0x5e, 0xc6, 0x6f, 0x39, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go new file mode 100644 index 0000000..ec26060 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go @@ -0,0 +1,144 @@ +// Code generated by protoc-gen-go. +// source: google/rpc/status.proto +// DO NOT EDIT! + +/* +Package status is a generated protocol buffer package. + +It is generated from these files: + google/rpc/status.proto + +It has these top-level messages: + Status +*/ +package status + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/any" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The `Status` type defines a logical error model that is suitable for different +// programming environments, including REST APIs and RPC APIs. It is used by +// [gRPC](https://github.com/grpc). The error model is designed to be: +// +// - Simple to use and understand for most users +// - Flexible enough to meet unexpected needs +// +// # Overview +// +// The `Status` message contains three pieces of data: error code, error message, +// and error details. The error code should be an enum value of +// [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The +// error message should be a developer-facing English message that helps +// developers *understand* and *resolve* the error. If a localized user-facing +// error message is needed, put the localized message in the error details or +// localize it in the client. The optional error details may contain arbitrary +// information about the error. There is a predefined set of error detail types +// in the package `google.rpc` which can be used for common error conditions. +// +// # Language mapping +// +// The `Status` message is the logical representation of the error model, but it +// is not necessarily the actual wire format. When the `Status` message is +// exposed in different client libraries and different wire protocols, it can be +// mapped differently. For example, it will likely be mapped to some exceptions +// in Java, but more likely mapped to some error codes in C. +// +// # Other uses +// +// The error model and the `Status` message can be used in a variety of +// environments, either with or without APIs, to provide a +// consistent developer experience across different environments. +// +// Example uses of this error model include: +// +// - Partial errors. If a service needs to return partial errors to the client, +// it may embed the `Status` in the normal response to indicate the partial +// errors. +// +// - Workflow errors. A typical workflow has multiple steps. Each step may +// have a `Status` message for error reporting purpose. +// +// - Batch operations. If a client uses batch request and batch response, the +// `Status` message should be used directly inside batch response, one for +// each error sub-response. +// +// - Asynchronous operations. If an API call embeds asynchronous operation +// results in its response, the status of those operations should be +// represented directly using the `Status` message. +// +// - Logging. If some API errors are stored in logs, the message `Status` could +// be used directly after any stripping needed for security/privacy reasons. +type Status struct { + // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. + Code int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + // A developer-facing error message, which should be in English. Any + // user-facing error message should be localized and sent in the + // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. + Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + // A list of messages that carry the error details. There will be a + // common set of message types for APIs to use. + Details []*google_protobuf.Any `protobuf:"bytes,3,rep,name=details" json:"details,omitempty"` +} + +func (m *Status) Reset() { *m = Status{} } +func (m *Status) String() string { return proto.CompactTextString(m) } +func (*Status) ProtoMessage() {} +func (*Status) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Status) GetCode() int32 { + if m != nil { + return m.Code + } + return 0 +} + +func (m *Status) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *Status) GetDetails() []*google_protobuf.Any { + if m != nil { + return m.Details + } + return nil +} + +func init() { + proto.RegisterType((*Status)(nil), "google.rpc.Status") +} + +func init() { proto.RegisterFile("google/rpc/status.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 209 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4f, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x2a, 0x48, 0xd6, 0x2f, 0x2e, 0x49, 0x2c, 0x29, 0x2d, 0xd6, 0x2b, 0x28, + 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x82, 0x48, 0xe8, 0x15, 0x15, 0x24, 0x4b, 0x49, 0x42, 0x15, 0x81, + 0x65, 0x92, 0x4a, 0xd3, 0xf4, 0x13, 0xf3, 0x2a, 0x21, 0xca, 0x94, 0xd2, 0xb8, 0xd8, 0x82, 0xc1, + 0xda, 0x84, 0x84, 0xb8, 0x58, 0x92, 0xf3, 0x53, 0x52, 0x25, 0x18, 0x15, 0x18, 0x35, 0x58, 0x83, + 0xc0, 0x6c, 0x21, 0x09, 0x2e, 0xf6, 0xdc, 0xd4, 0xe2, 0xe2, 0xc4, 0xf4, 0x54, 0x09, 0x26, 0x05, + 0x46, 0x0d, 0xce, 0x20, 0x18, 0x57, 0x48, 0x8f, 0x8b, 0x3d, 0x25, 0xb5, 0x24, 0x31, 0x33, 0xa7, + 0x58, 0x82, 0x59, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x44, 0x0f, 0x6a, 0x21, 0xcc, 0x12, 0x3d, 0xc7, + 0xbc, 0xca, 0x20, 0x98, 0x22, 0xa7, 0x38, 0x2e, 0xbe, 0xe4, 0xfc, 0x5c, 0x3d, 0x84, 0xa3, 0x9c, + 0xb8, 0x21, 0xf6, 0x06, 0x80, 0x94, 0x07, 0x30, 0x46, 0x99, 0x43, 0xa5, 0xd2, 0xf3, 0x73, 0x12, + 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x86, 0xe9, 0x43, 0xa4, 0x12, + 0x0b, 0x32, 0x8b, 0x91, 0xfc, 0x69, 0x0d, 0xa1, 0x16, 0x31, 0x31, 0x07, 0x05, 0x38, 0x27, 0xb1, + 0x81, 0x55, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x53, 0xf0, 0x7c, 0x10, 0x01, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/admin/database/v1/spanner_database_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/admin/database/v1/spanner_database_admin.pb.go new file mode 100644 index 0000000..c9ef3bd --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/admin/database/v1/spanner_database_admin.pb.go @@ -0,0 +1,921 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/admin/database/v1/spanner_database_admin.proto +// DO NOT EDIT! + +/* +Package database is a generated protocol buffer package. + +It is generated from these files: + google/spanner/admin/database/v1/spanner_database_admin.proto + +It has these top-level messages: + Database + ListDatabasesRequest + ListDatabasesResponse + CreateDatabaseRequest + CreateDatabaseMetadata + GetDatabaseRequest + UpdateDatabaseDdlRequest + UpdateDatabaseDdlMetadata + DropDatabaseRequest + GetDatabaseDdlRequest + GetDatabaseDdlResponse +*/ +package database + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Indicates the current state of the database. +type Database_State int32 + +const ( + // Not specified. + Database_STATE_UNSPECIFIED Database_State = 0 + // The database is still being created. Operations on the database may fail + // with `FAILED_PRECONDITION` in this state. + Database_CREATING Database_State = 1 + // The database is fully created and ready for use. + Database_READY Database_State = 2 +) + +var Database_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "CREATING", + 2: "READY", +} +var Database_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "CREATING": 1, + "READY": 2, +} + +func (x Database_State) String() string { + return proto.EnumName(Database_State_name, int32(x)) +} +func (Database_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// A Cloud Spanner database. +type Database struct { + // Required. The name of the database. Values are of the form + // `projects/<project>/instances/<instance>/databases/<database>`, + // where `<database>` is as specified in the `CREATE DATABASE` + // statement. This name can be passed to other API methods to + // identify the database. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Output only. The current database state. + State Database_State `protobuf:"varint,2,opt,name=state,enum=google.spanner.admin.database.v1.Database_State" json:"state,omitempty"` +} + +func (m *Database) Reset() { *m = Database{} } +func (m *Database) String() string { return proto.CompactTextString(m) } +func (*Database) ProtoMessage() {} +func (*Database) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Database) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Database) GetState() Database_State { + if m != nil { + return m.State + } + return Database_STATE_UNSPECIFIED +} + +// The request for [ListDatabases][google.spanner.admin.database.v1.DatabaseAdmin.ListDatabases]. +type ListDatabasesRequest struct { + // Required. The instance whose databases should be listed. + // Values are of the form `projects/<project>/instances/<instance>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Number of databases to be returned in the response. If 0 or less, + // defaults to the server's maximum allowed page size. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If non-empty, `page_token` should contain a + // [next_page_token][google.spanner.admin.database.v1.ListDatabasesResponse.next_page_token] from a + // previous [ListDatabasesResponse][google.spanner.admin.database.v1.ListDatabasesResponse]. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListDatabasesRequest) Reset() { *m = ListDatabasesRequest{} } +func (m *ListDatabasesRequest) String() string { return proto.CompactTextString(m) } +func (*ListDatabasesRequest) ProtoMessage() {} +func (*ListDatabasesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ListDatabasesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDatabasesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListDatabasesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response for [ListDatabases][google.spanner.admin.database.v1.DatabaseAdmin.ListDatabases]. +type ListDatabasesResponse struct { + // Databases that matched the request. + Databases []*Database `protobuf:"bytes,1,rep,name=databases" json:"databases,omitempty"` + // `next_page_token` can be sent in a subsequent + // [ListDatabases][google.spanner.admin.database.v1.DatabaseAdmin.ListDatabases] call to fetch more + // of the matching databases. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDatabasesResponse) Reset() { *m = ListDatabasesResponse{} } +func (m *ListDatabasesResponse) String() string { return proto.CompactTextString(m) } +func (*ListDatabasesResponse) ProtoMessage() {} +func (*ListDatabasesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ListDatabasesResponse) GetDatabases() []*Database { + if m != nil { + return m.Databases + } + return nil +} + +func (m *ListDatabasesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request for [CreateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.CreateDatabase]. +type CreateDatabaseRequest struct { + // Required. The name of the instance that will serve the new database. + // Values are of the form `projects/<project>/instances/<instance>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. A `CREATE DATABASE` statement, which specifies the ID of the + // new database. The database ID must conform to the regular expression + // `[a-z][a-z0-9_\-]*[a-z0-9]` and be between 2 and 30 characters in length. + CreateStatement string `protobuf:"bytes,2,opt,name=create_statement,json=createStatement" json:"create_statement,omitempty"` + // An optional list of DDL statements to run inside the newly created + // database. Statements can create tables, indexes, etc. These + // statements execute atomically with the creation of the database: + // if there is an error in any statement, the database is not created. + ExtraStatements []string `protobuf:"bytes,3,rep,name=extra_statements,json=extraStatements" json:"extra_statements,omitempty"` +} + +func (m *CreateDatabaseRequest) Reset() { *m = CreateDatabaseRequest{} } +func (m *CreateDatabaseRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDatabaseRequest) ProtoMessage() {} +func (*CreateDatabaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *CreateDatabaseRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateDatabaseRequest) GetCreateStatement() string { + if m != nil { + return m.CreateStatement + } + return "" +} + +func (m *CreateDatabaseRequest) GetExtraStatements() []string { + if m != nil { + return m.ExtraStatements + } + return nil +} + +// Metadata type for the operation returned by +// [CreateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.CreateDatabase]. +type CreateDatabaseMetadata struct { + // The database being created. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` +} + +func (m *CreateDatabaseMetadata) Reset() { *m = CreateDatabaseMetadata{} } +func (m *CreateDatabaseMetadata) String() string { return proto.CompactTextString(m) } +func (*CreateDatabaseMetadata) ProtoMessage() {} +func (*CreateDatabaseMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *CreateDatabaseMetadata) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +// The request for [GetDatabase][google.spanner.admin.database.v1.DatabaseAdmin.GetDatabase]. +type GetDatabaseRequest struct { + // Required. The name of the requested database. Values are of the form + // `projects/<project>/instances/<instance>/databases/<database>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetDatabaseRequest) Reset() { *m = GetDatabaseRequest{} } +func (m *GetDatabaseRequest) String() string { return proto.CompactTextString(m) } +func (*GetDatabaseRequest) ProtoMessage() {} +func (*GetDatabaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *GetDatabaseRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Enqueues the given DDL statements to be applied, in order but not +// necessarily all at once, to the database schema at some point (or +// points) in the future. The server checks that the statements +// are executable (syntactically valid, name tables that exist, etc.) +// before enqueueing them, but they may still fail upon +// later execution (e.g., if a statement from another batch of +// statements is applied first and it conflicts in some way, or if +// there is some data-related problem like a `NULL` value in a column to +// which `NOT NULL` would be added). If a statement fails, all +// subsequent statements in the batch are automatically cancelled. +// +// Each batch of statements is assigned a name which can be used with +// the [Operations][google.longrunning.Operations] API to monitor +// progress. See the +// [operation_id][google.spanner.admin.database.v1.UpdateDatabaseDdlRequest.operation_id] field for more +// details. +type UpdateDatabaseDdlRequest struct { + // Required. The database to update. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // DDL statements to be applied to the database. + Statements []string `protobuf:"bytes,2,rep,name=statements" json:"statements,omitempty"` + // If empty, the new update request is assigned an + // automatically-generated operation ID. Otherwise, `operation_id` + // is used to construct the name of the resulting + // [Operation][google.longrunning.Operation]. + // + // Specifying an explicit operation ID simplifies determining + // whether the statements were executed in the event that the + // [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, + // or the return value is otherwise lost: the [database][google.spanner.admin.database.v1.UpdateDatabaseDdlRequest.database] and + // `operation_id` fields can be combined to form the + // [name][google.longrunning.Operation.name] of the resulting + // [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + // + // `operation_id` should be unique within the database, and must be + // a valid identifier: `[a-z][a-z0-9_]*`. Note that + // automatically-generated operation IDs always begin with an + // underscore. If the named operation already exists, + // [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] returns + // `ALREADY_EXISTS`. + OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` +} + +func (m *UpdateDatabaseDdlRequest) Reset() { *m = UpdateDatabaseDdlRequest{} } +func (m *UpdateDatabaseDdlRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateDatabaseDdlRequest) ProtoMessage() {} +func (*UpdateDatabaseDdlRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *UpdateDatabaseDdlRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *UpdateDatabaseDdlRequest) GetStatements() []string { + if m != nil { + return m.Statements + } + return nil +} + +func (m *UpdateDatabaseDdlRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +// Metadata type for the operation returned by +// [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]. +type UpdateDatabaseDdlMetadata struct { + // The database being modified. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // For an update this list contains all the statements. For an + // individual statement, this list contains only that statement. + Statements []string `protobuf:"bytes,2,rep,name=statements" json:"statements,omitempty"` + // Reports the commit timestamps of all statements that have + // succeeded so far, where `commit_timestamps[i]` is the commit + // timestamp for the statement `statements[i]`. + CommitTimestamps []*google_protobuf3.Timestamp `protobuf:"bytes,3,rep,name=commit_timestamps,json=commitTimestamps" json:"commit_timestamps,omitempty"` +} + +func (m *UpdateDatabaseDdlMetadata) Reset() { *m = UpdateDatabaseDdlMetadata{} } +func (m *UpdateDatabaseDdlMetadata) String() string { return proto.CompactTextString(m) } +func (*UpdateDatabaseDdlMetadata) ProtoMessage() {} +func (*UpdateDatabaseDdlMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *UpdateDatabaseDdlMetadata) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *UpdateDatabaseDdlMetadata) GetStatements() []string { + if m != nil { + return m.Statements + } + return nil +} + +func (m *UpdateDatabaseDdlMetadata) GetCommitTimestamps() []*google_protobuf3.Timestamp { + if m != nil { + return m.CommitTimestamps + } + return nil +} + +// The request for [DropDatabase][google.spanner.admin.database.v1.DatabaseAdmin.DropDatabase]. +type DropDatabaseRequest struct { + // Required. The database to be dropped. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` +} + +func (m *DropDatabaseRequest) Reset() { *m = DropDatabaseRequest{} } +func (m *DropDatabaseRequest) String() string { return proto.CompactTextString(m) } +func (*DropDatabaseRequest) ProtoMessage() {} +func (*DropDatabaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *DropDatabaseRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +// The request for [GetDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.GetDatabaseDdl]. +type GetDatabaseDdlRequest struct { + // Required. The database whose schema we wish to get. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` +} + +func (m *GetDatabaseDdlRequest) Reset() { *m = GetDatabaseDdlRequest{} } +func (m *GetDatabaseDdlRequest) String() string { return proto.CompactTextString(m) } +func (*GetDatabaseDdlRequest) ProtoMessage() {} +func (*GetDatabaseDdlRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *GetDatabaseDdlRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +// The response for [GetDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.GetDatabaseDdl]. +type GetDatabaseDdlResponse struct { + // A list of formatted DDL statements defining the schema of the database + // specified in the request. + Statements []string `protobuf:"bytes,1,rep,name=statements" json:"statements,omitempty"` +} + +func (m *GetDatabaseDdlResponse) Reset() { *m = GetDatabaseDdlResponse{} } +func (m *GetDatabaseDdlResponse) String() string { return proto.CompactTextString(m) } +func (*GetDatabaseDdlResponse) ProtoMessage() {} +func (*GetDatabaseDdlResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *GetDatabaseDdlResponse) GetStatements() []string { + if m != nil { + return m.Statements + } + return nil +} + +func init() { + proto.RegisterType((*Database)(nil), "google.spanner.admin.database.v1.Database") + proto.RegisterType((*ListDatabasesRequest)(nil), "google.spanner.admin.database.v1.ListDatabasesRequest") + proto.RegisterType((*ListDatabasesResponse)(nil), "google.spanner.admin.database.v1.ListDatabasesResponse") + proto.RegisterType((*CreateDatabaseRequest)(nil), "google.spanner.admin.database.v1.CreateDatabaseRequest") + proto.RegisterType((*CreateDatabaseMetadata)(nil), "google.spanner.admin.database.v1.CreateDatabaseMetadata") + proto.RegisterType((*GetDatabaseRequest)(nil), "google.spanner.admin.database.v1.GetDatabaseRequest") + proto.RegisterType((*UpdateDatabaseDdlRequest)(nil), "google.spanner.admin.database.v1.UpdateDatabaseDdlRequest") + proto.RegisterType((*UpdateDatabaseDdlMetadata)(nil), "google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata") + proto.RegisterType((*DropDatabaseRequest)(nil), "google.spanner.admin.database.v1.DropDatabaseRequest") + proto.RegisterType((*GetDatabaseDdlRequest)(nil), "google.spanner.admin.database.v1.GetDatabaseDdlRequest") + proto.RegisterType((*GetDatabaseDdlResponse)(nil), "google.spanner.admin.database.v1.GetDatabaseDdlResponse") + proto.RegisterEnum("google.spanner.admin.database.v1.Database_State", Database_State_name, Database_State_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DatabaseAdmin service + +type DatabaseAdminClient interface { + // Lists Cloud Spanner databases. + ListDatabases(ctx context.Context, in *ListDatabasesRequest, opts ...grpc.CallOption) (*ListDatabasesResponse, error) + // Creates a new Cloud Spanner database and starts to prepare it for serving. + // The returned [long-running operation][google.longrunning.Operation] will + // have a name of the format `<database_name>/operations/<operation_id>` and + // can be used to track preparation of the database. The + // [metadata][google.longrunning.Operation.metadata] field type is + // [CreateDatabaseMetadata][google.spanner.admin.database.v1.CreateDatabaseMetadata]. The + // [response][google.longrunning.Operation.response] field type is + // [Database][google.spanner.admin.database.v1.Database], if successful. + CreateDatabase(ctx context.Context, in *CreateDatabaseRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Gets the state of a Cloud Spanner database. + GetDatabase(ctx context.Context, in *GetDatabaseRequest, opts ...grpc.CallOption) (*Database, error) + // Updates the schema of a Cloud Spanner database by + // creating/altering/dropping tables, columns, indexes, etc. The returned + // [long-running operation][google.longrunning.Operation] will have a name of + // the format `<database_name>/operations/<operation_id>` and can be used to + // track execution of the schema change(s). The + // [metadata][google.longrunning.Operation.metadata] field type is + // [UpdateDatabaseDdlMetadata][google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata]. The operation has no response. + UpdateDatabaseDdl(ctx context.Context, in *UpdateDatabaseDdlRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Drops (aka deletes) a Cloud Spanner database. + DropDatabase(ctx context.Context, in *DropDatabaseRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Returns the schema of a Cloud Spanner database as a list of formatted + // DDL statements. This method does not show pending schema updates, those may + // be queried using the [Operations][google.longrunning.Operations] API. + GetDatabaseDdl(ctx context.Context, in *GetDatabaseDdlRequest, opts ...grpc.CallOption) (*GetDatabaseDdlResponse, error) + // Sets the access control policy on a database resource. Replaces any + // existing policy. + // + // Authorization requires `spanner.databases.setIamPolicy` permission on + // [resource][google.iam.v1.SetIamPolicyRequest.resource]. + SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Gets the access control policy for a database resource. Returns an empty + // policy if a database exists but does not have a policy set. + // + // Authorization requires `spanner.databases.getIamPolicy` permission on + // [resource][google.iam.v1.GetIamPolicyRequest.resource]. + GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Returns permissions that the caller has on the specified database resource. + // + // Attempting this RPC on a non-existent Cloud Spanner database will result in + // a NOT_FOUND error if the user has `spanner.databases.list` permission on + // the containing Cloud Spanner instance. Otherwise returns an empty set of + // permissions. + TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +type databaseAdminClient struct { + cc *grpc.ClientConn +} + +func NewDatabaseAdminClient(cc *grpc.ClientConn) DatabaseAdminClient { + return &databaseAdminClient{cc} +} + +func (c *databaseAdminClient) ListDatabases(ctx context.Context, in *ListDatabasesRequest, opts ...grpc.CallOption) (*ListDatabasesResponse, error) { + out := new(ListDatabasesResponse) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/ListDatabases", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *databaseAdminClient) CreateDatabase(ctx context.Context, in *CreateDatabaseRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/CreateDatabase", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *databaseAdminClient) GetDatabase(ctx context.Context, in *GetDatabaseRequest, opts ...grpc.CallOption) (*Database, error) { + out := new(Database) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/GetDatabase", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *databaseAdminClient) UpdateDatabaseDdl(ctx context.Context, in *UpdateDatabaseDdlRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/UpdateDatabaseDdl", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *databaseAdminClient) DropDatabase(ctx context.Context, in *DropDatabaseRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/DropDatabase", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *databaseAdminClient) GetDatabaseDdl(ctx context.Context, in *GetDatabaseDdlRequest, opts ...grpc.CallOption) (*GetDatabaseDdlResponse, error) { + out := new(GetDatabaseDdlResponse) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/GetDatabaseDdl", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *databaseAdminClient) SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *databaseAdminClient) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *databaseAdminClient) TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) { + out := new(google_iam_v11.TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.spanner.admin.database.v1.DatabaseAdmin/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for DatabaseAdmin service + +type DatabaseAdminServer interface { + // Lists Cloud Spanner databases. + ListDatabases(context.Context, *ListDatabasesRequest) (*ListDatabasesResponse, error) + // Creates a new Cloud Spanner database and starts to prepare it for serving. + // The returned [long-running operation][google.longrunning.Operation] will + // have a name of the format `<database_name>/operations/<operation_id>` and + // can be used to track preparation of the database. The + // [metadata][google.longrunning.Operation.metadata] field type is + // [CreateDatabaseMetadata][google.spanner.admin.database.v1.CreateDatabaseMetadata]. The + // [response][google.longrunning.Operation.response] field type is + // [Database][google.spanner.admin.database.v1.Database], if successful. + CreateDatabase(context.Context, *CreateDatabaseRequest) (*google_longrunning.Operation, error) + // Gets the state of a Cloud Spanner database. + GetDatabase(context.Context, *GetDatabaseRequest) (*Database, error) + // Updates the schema of a Cloud Spanner database by + // creating/altering/dropping tables, columns, indexes, etc. The returned + // [long-running operation][google.longrunning.Operation] will have a name of + // the format `<database_name>/operations/<operation_id>` and can be used to + // track execution of the schema change(s). The + // [metadata][google.longrunning.Operation.metadata] field type is + // [UpdateDatabaseDdlMetadata][google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata]. The operation has no response. + UpdateDatabaseDdl(context.Context, *UpdateDatabaseDdlRequest) (*google_longrunning.Operation, error) + // Drops (aka deletes) a Cloud Spanner database. + DropDatabase(context.Context, *DropDatabaseRequest) (*google_protobuf2.Empty, error) + // Returns the schema of a Cloud Spanner database as a list of formatted + // DDL statements. This method does not show pending schema updates, those may + // be queried using the [Operations][google.longrunning.Operations] API. + GetDatabaseDdl(context.Context, *GetDatabaseDdlRequest) (*GetDatabaseDdlResponse, error) + // Sets the access control policy on a database resource. Replaces any + // existing policy. + // + // Authorization requires `spanner.databases.setIamPolicy` permission on + // [resource][google.iam.v1.SetIamPolicyRequest.resource]. + SetIamPolicy(context.Context, *google_iam_v11.SetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Gets the access control policy for a database resource. Returns an empty + // policy if a database exists but does not have a policy set. + // + // Authorization requires `spanner.databases.getIamPolicy` permission on + // [resource][google.iam.v1.GetIamPolicyRequest.resource]. + GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Returns permissions that the caller has on the specified database resource. + // + // Attempting this RPC on a non-existent Cloud Spanner database will result in + // a NOT_FOUND error if the user has `spanner.databases.list` permission on + // the containing Cloud Spanner instance. Otherwise returns an empty set of + // permissions. + TestIamPermissions(context.Context, *google_iam_v11.TestIamPermissionsRequest) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +func RegisterDatabaseAdminServer(s *grpc.Server, srv DatabaseAdminServer) { + s.RegisterService(&_DatabaseAdmin_serviceDesc, srv) +} + +func _DatabaseAdmin_ListDatabases_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDatabasesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).ListDatabases(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/ListDatabases", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).ListDatabases(ctx, req.(*ListDatabasesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatabaseAdmin_CreateDatabase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDatabaseRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).CreateDatabase(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/CreateDatabase", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).CreateDatabase(ctx, req.(*CreateDatabaseRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatabaseAdmin_GetDatabase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDatabaseRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).GetDatabase(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/GetDatabase", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).GetDatabase(ctx, req.(*GetDatabaseRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatabaseAdmin_UpdateDatabaseDdl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateDatabaseDdlRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).UpdateDatabaseDdl(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/UpdateDatabaseDdl", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).UpdateDatabaseDdl(ctx, req.(*UpdateDatabaseDdlRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatabaseAdmin_DropDatabase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DropDatabaseRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).DropDatabase(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/DropDatabase", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).DropDatabase(ctx, req.(*DropDatabaseRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatabaseAdmin_GetDatabaseDdl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDatabaseDdlRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).GetDatabaseDdl(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/GetDatabaseDdl", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).GetDatabaseDdl(ctx, req.(*GetDatabaseDdlRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatabaseAdmin_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).SetIamPolicy(ctx, req.(*google_iam_v11.SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatabaseAdmin_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).GetIamPolicy(ctx, req.(*google_iam_v11.GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatabaseAdmin_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatabaseAdminServer).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.database.v1.DatabaseAdmin/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatabaseAdminServer).TestIamPermissions(ctx, req.(*google_iam_v11.TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _DatabaseAdmin_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.spanner.admin.database.v1.DatabaseAdmin", + HandlerType: (*DatabaseAdminServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListDatabases", + Handler: _DatabaseAdmin_ListDatabases_Handler, + }, + { + MethodName: "CreateDatabase", + Handler: _DatabaseAdmin_CreateDatabase_Handler, + }, + { + MethodName: "GetDatabase", + Handler: _DatabaseAdmin_GetDatabase_Handler, + }, + { + MethodName: "UpdateDatabaseDdl", + Handler: _DatabaseAdmin_UpdateDatabaseDdl_Handler, + }, + { + MethodName: "DropDatabase", + Handler: _DatabaseAdmin_DropDatabase_Handler, + }, + { + MethodName: "GetDatabaseDdl", + Handler: _DatabaseAdmin_GetDatabaseDdl_Handler, + }, + { + MethodName: "SetIamPolicy", + Handler: _DatabaseAdmin_SetIamPolicy_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _DatabaseAdmin_GetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _DatabaseAdmin_TestIamPermissions_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/spanner/admin/database/v1/spanner_database_admin.proto", +} + +func init() { + proto.RegisterFile("google/spanner/admin/database/v1/spanner_database_admin.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 1020 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0x4d, 0x6f, 0x1b, 0x45, + 0x18, 0xc7, 0x19, 0xa7, 0xa9, 0x92, 0x27, 0x2f, 0x4d, 0x06, 0x1c, 0xb9, 0x5b, 0x5a, 0xcc, 0x82, + 0x2a, 0xd7, 0x12, 0xbb, 0xd8, 0x69, 0x48, 0x30, 0x0a, 0x22, 0xb5, 0x5d, 0xd7, 0x12, 0xb4, 0x96, + 0xed, 0x22, 0xc1, 0xc5, 0x9a, 0xd8, 0xc3, 0xb2, 0xc5, 0xbb, 0xb3, 0xec, 0x8c, 0xab, 0xb6, 0xa8, + 0x17, 0x24, 0x0e, 0x9c, 0x01, 0x89, 0x1b, 0x88, 0x03, 0x07, 0x4e, 0x9c, 0x40, 0xe2, 0xc8, 0x57, + 0xe0, 0x2b, 0xf0, 0x41, 0xd0, 0xcc, 0xee, 0xd8, 0xeb, 0x75, 0x12, 0xdb, 0x1c, 0x7a, 0xf3, 0x3e, + 0xaf, 0xbf, 0xe7, 0xd9, 0xf9, 0x8f, 0x17, 0x8e, 0x1d, 0xc6, 0x9c, 0x21, 0xb5, 0x79, 0x40, 0x7c, + 0x9f, 0x86, 0x36, 0x19, 0x78, 0xae, 0x6f, 0x0f, 0x88, 0x20, 0xa7, 0x84, 0x53, 0xfb, 0x71, 0x49, + 0x7b, 0x7a, 0xda, 0xd6, 0x53, 0x21, 0x56, 0x10, 0x32, 0xc1, 0x70, 0x3e, 0x4a, 0xb7, 0xe2, 0x20, + 0x2b, 0xf2, 0xe9, 0x50, 0xeb, 0x71, 0xc9, 0x78, 0x35, 0x6e, 0x40, 0x02, 0xd7, 0x26, 0xbe, 0xcf, + 0x04, 0x11, 0x2e, 0xf3, 0x79, 0x94, 0x6f, 0x64, 0x93, 0xde, 0x91, 0xf8, 0x3c, 0x36, 0xdf, 0x88, + 0xcd, 0x2e, 0xf1, 0x24, 0x82, 0x4b, 0xbc, 0x5e, 0xc0, 0x86, 0x6e, 0xff, 0x69, 0xec, 0x37, 0xa6, + 0xfd, 0x53, 0xbe, 0x37, 0x62, 0xdf, 0x90, 0xf9, 0x4e, 0x38, 0xf2, 0x7d, 0xd7, 0x77, 0x6c, 0x16, + 0xd0, 0x70, 0xaa, 0xef, 0xb5, 0x38, 0x48, 0x3d, 0x9d, 0x8e, 0x3e, 0xb3, 0xa9, 0x17, 0x08, 0x5d, + 0xe1, 0xb5, 0xb4, 0x53, 0xb8, 0x1e, 0xe5, 0x82, 0x78, 0x41, 0x14, 0x60, 0xfe, 0x84, 0x60, 0xad, + 0x16, 0xcf, 0x88, 0x31, 0x5c, 0xf2, 0x89, 0x47, 0x73, 0x28, 0x8f, 0x0a, 0xeb, 0x6d, 0xf5, 0x1b, + 0xdf, 0x85, 0x55, 0x2e, 0x88, 0xa0, 0xb9, 0x4c, 0x1e, 0x15, 0xb6, 0xcb, 0x6f, 0x5b, 0xf3, 0xd6, + 0x64, 0xe9, 0x72, 0x56, 0x47, 0xe6, 0xb5, 0xa3, 0x74, 0xf3, 0x10, 0x56, 0xd5, 0x33, 0xce, 0xc2, + 0x6e, 0xa7, 0x7b, 0xd2, 0xad, 0xf7, 0x1e, 0xde, 0xef, 0xb4, 0xea, 0xd5, 0xe6, 0xdd, 0x66, 0xbd, + 0xb6, 0xf3, 0x12, 0xde, 0x84, 0xb5, 0x6a, 0xbb, 0x7e, 0xd2, 0x6d, 0xde, 0x6f, 0xec, 0x20, 0xbc, + 0x0e, 0xab, 0xed, 0xfa, 0x49, 0xed, 0x93, 0x9d, 0x8c, 0xf9, 0x08, 0x5e, 0xf9, 0xd0, 0xe5, 0x42, + 0x57, 0xe5, 0x6d, 0xfa, 0xe5, 0x88, 0x72, 0x81, 0xf7, 0xe0, 0x72, 0x40, 0x42, 0xea, 0x8b, 0x18, + 0x37, 0x7e, 0xc2, 0xd7, 0x60, 0x3d, 0x20, 0x0e, 0xed, 0x71, 0xf7, 0x19, 0xcd, 0xad, 0xe4, 0x51, + 0x61, 0xb5, 0xbd, 0x26, 0x0d, 0x1d, 0xf7, 0x19, 0xc5, 0xd7, 0x01, 0x94, 0x53, 0xb0, 0x2f, 0xa8, + 0x9f, 0xbb, 0xa4, 0x12, 0x55, 0x78, 0x57, 0x1a, 0xcc, 0x6f, 0x11, 0x64, 0x53, 0xcd, 0x78, 0xc0, + 0x7c, 0x4e, 0xf1, 0x3d, 0x58, 0xd7, 0x33, 0xf2, 0x1c, 0xca, 0xaf, 0x14, 0x36, 0xca, 0xc5, 0xc5, + 0x57, 0xd1, 0x9e, 0x24, 0xe3, 0x9b, 0x70, 0xc5, 0xa7, 0x4f, 0x44, 0x2f, 0xc1, 0x91, 0x51, 0x1c, + 0x5b, 0xd2, 0xdc, 0x1a, 0xb3, 0x7c, 0x83, 0x20, 0x5b, 0x0d, 0x29, 0x11, 0x74, 0x5c, 0x65, 0xce, + 0xe4, 0xb7, 0x60, 0xa7, 0xaf, 0x12, 0x7a, 0x6a, 0xe5, 0x9e, 0x8c, 0x88, 0x4a, 0x5f, 0x89, 0xec, + 0x1d, 0x6d, 0x96, 0xa1, 0xf4, 0x89, 0x08, 0xc9, 0x24, 0x92, 0xe7, 0x56, 0xf2, 0x2b, 0x32, 0x54, + 0xd9, 0xc7, 0x91, 0xdc, 0xbc, 0x0d, 0x7b, 0xd3, 0x18, 0x1f, 0x51, 0x41, 0xe4, 0x38, 0xd8, 0x80, + 0x35, 0x3d, 0x56, 0x4c, 0x32, 0x7e, 0x36, 0x0b, 0x80, 0x1b, 0x54, 0xa4, 0xc9, 0xcf, 0x38, 0x60, + 0xe6, 0x53, 0xc8, 0x3d, 0x0c, 0x06, 0x89, 0xfa, 0xb5, 0xc1, 0x50, 0xc7, 0x5f, 0xd0, 0x01, 0xdf, + 0x00, 0x48, 0xc0, 0x67, 0x14, 0x7c, 0xc2, 0x82, 0x5f, 0x87, 0xcd, 0xb1, 0x56, 0x7a, 0xee, 0x40, + 0x1d, 0x85, 0xf5, 0xf6, 0xc6, 0xd8, 0xd6, 0x1c, 0x98, 0x3f, 0x23, 0xb8, 0x3a, 0xd3, 0x7b, 0x91, + 0xf1, 0xe6, 0x36, 0x6f, 0xc0, 0x6e, 0x9f, 0x79, 0x9e, 0x2b, 0x7a, 0x63, 0xc1, 0x45, 0x0b, 0xde, + 0x28, 0x1b, 0xfa, 0xd8, 0x68, 0x4d, 0x5a, 0x5d, 0x1d, 0xd2, 0xde, 0x89, 0x92, 0xc6, 0x06, 0x6e, + 0x96, 0xe0, 0xe5, 0x5a, 0xc8, 0x82, 0xf4, 0x22, 0x2f, 0x5a, 0xfd, 0x3e, 0x64, 0x13, 0xab, 0x5f, + 0x6c, 0x9b, 0xe6, 0x11, 0xec, 0xa5, 0x93, 0xe2, 0x93, 0x3f, 0x3d, 0x2a, 0x4a, 0x8f, 0x5a, 0xfe, + 0x61, 0x13, 0xb6, 0x74, 0xde, 0x89, 0x54, 0x00, 0xfe, 0x13, 0xc1, 0xd6, 0x94, 0x8a, 0xf0, 0x3b, + 0xf3, 0xa5, 0x72, 0x96, 0xc6, 0x8d, 0xc3, 0xa5, 0xf3, 0x22, 0x68, 0xf3, 0xe0, 0xeb, 0x7f, 0xfe, + 0xfd, 0x2e, 0x63, 0xe3, 0xb7, 0xe4, 0x9d, 0xfa, 0x55, 0xa4, 0x8f, 0xe3, 0x20, 0x64, 0x8f, 0x68, + 0x5f, 0x70, 0xbb, 0x68, 0xbb, 0x3e, 0x17, 0xc4, 0xef, 0x53, 0x6e, 0x17, 0x9f, 0xdb, 0x13, 0x6d, + 0xfe, 0x82, 0x60, 0x7b, 0xfa, 0xb0, 0xe3, 0x05, 0x10, 0xce, 0x54, 0xa9, 0x71, 0x5d, 0x27, 0x26, + 0x6e, 0x6f, 0xeb, 0x81, 0x3e, 0x7d, 0xe6, 0x91, 0x22, 0x2c, 0x9b, 0xcb, 0x11, 0x56, 0x50, 0x11, + 0xff, 0x8a, 0x60, 0x23, 0xf1, 0xae, 0xf0, 0xed, 0xf9, 0x84, 0xb3, 0x52, 0x34, 0x96, 0xb8, 0xbd, + 0x52, 0xdb, 0x94, 0xaa, 0x3d, 0x87, 0x74, 0x02, 0x6a, 0x17, 0x9f, 0xe3, 0xdf, 0x11, 0xec, 0xce, + 0xc8, 0x0b, 0x57, 0xe6, 0x37, 0x3e, 0xef, 0x3e, 0x98, 0xb7, 0xd3, 0x0f, 0x14, 0x67, 0xa5, 0x7c, + 0xa0, 0x38, 0x75, 0xc5, 0x45, 0x58, 0xed, 0xc1, 0x60, 0x28, 0x77, 0xfb, 0x23, 0x82, 0xcd, 0xa4, + 0xde, 0xf0, 0xc1, 0x02, 0x6b, 0x9a, 0xd5, 0xa7, 0xb1, 0x37, 0x23, 0xf2, 0xba, 0xfc, 0x57, 0x36, + 0xdf, 0x55, 0x84, 0xfb, 0xc5, 0xd2, 0xd2, 0x84, 0xf8, 0x6f, 0x04, 0xdb, 0xd3, 0x12, 0x5d, 0xe4, + 0x6c, 0x9e, 0x79, 0x13, 0x18, 0x47, 0xcb, 0x27, 0xc6, 0xc2, 0x3a, 0x56, 0x03, 0x1c, 0xe2, 0xff, + 0xb7, 0x62, 0xfc, 0x3d, 0x82, 0xcd, 0x0e, 0x15, 0x4d, 0xe2, 0xb5, 0xd4, 0x87, 0x0e, 0x36, 0x35, + 0x89, 0x4b, 0x3c, 0xd9, 0x36, 0xe9, 0xd4, 0xb4, 0xd9, 0x54, 0x4c, 0xe4, 0x35, 0x9b, 0x0a, 0xa5, + 0x6a, 0xbe, 0xaf, 0x50, 0x42, 0xca, 0xd9, 0x28, 0xec, 0x2f, 0x84, 0x52, 0xe1, 0x89, 0x2e, 0xf2, + 0xb5, 0x4b, 0xac, 0xc6, 0x45, 0x58, 0x8d, 0x17, 0x82, 0xe5, 0xa4, 0xb0, 0xfe, 0x42, 0x80, 0xbb, + 0x94, 0x2b, 0x23, 0x0d, 0x3d, 0x97, 0x73, 0xf9, 0xdd, 0x87, 0x0b, 0xa9, 0xc6, 0xb3, 0x21, 0x1a, + 0xf1, 0xd6, 0x02, 0x91, 0xf1, 0x8b, 0x7d, 0xa0, 0xb0, 0x9b, 0x66, 0x6d, 0x79, 0x6c, 0x31, 0x53, + 0xb5, 0x82, 0x8a, 0x77, 0xfe, 0x40, 0xf0, 0x66, 0x9f, 0x79, 0x73, 0x4f, 0xda, 0x9d, 0xab, 0x9d, + 0xc8, 0x35, 0xf5, 0x27, 0xd2, 0x92, 0xba, 0x69, 0xa1, 0x4f, 0xef, 0xc5, 0xe9, 0x0e, 0x1b, 0x12, + 0xdf, 0xb1, 0x58, 0xe8, 0xd8, 0x0e, 0xf5, 0x95, 0xaa, 0xec, 0xc8, 0x45, 0x02, 0x97, 0x9f, 0xff, + 0xcd, 0xff, 0x9e, 0xfe, 0xfd, 0x5b, 0xe6, 0x66, 0x23, 0x2a, 0x55, 0x1d, 0xb2, 0xd1, 0xc0, 0x8a, + 0x9b, 0x5a, 0xaa, 0xdb, 0xe4, 0x9b, 0xf5, 0xe3, 0xd2, 0xe9, 0x65, 0x55, 0x7d, 0xff, 0xbf, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xdc, 0xc4, 0xc8, 0x83, 0x50, 0x0c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/admin/instance/v1/spanner_instance_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/admin/instance/v1/spanner_instance_admin.pb.go new file mode 100644 index 0000000..0bcb338 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/admin/instance/v1/spanner_instance_admin.pb.go @@ -0,0 +1,1282 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/admin/instance/v1/spanner_instance_admin.proto +// DO NOT EDIT! + +/* +Package instance is a generated protocol buffer package. + +It is generated from these files: + google/spanner/admin/instance/v1/spanner_instance_admin.proto + +It has these top-level messages: + InstanceConfig + Instance + ListInstanceConfigsRequest + ListInstanceConfigsResponse + GetInstanceConfigRequest + GetInstanceRequest + CreateInstanceRequest + ListInstancesRequest + ListInstancesResponse + UpdateInstanceRequest + DeleteInstanceRequest + CreateInstanceMetadata + UpdateInstanceMetadata +*/ +package instance + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Indicates the current state of the instance. +type Instance_State int32 + +const ( + // Not specified. + Instance_STATE_UNSPECIFIED Instance_State = 0 + // The instance is still being created. Resources may not be + // available yet, and operations such as database creation may not + // work. + Instance_CREATING Instance_State = 1 + // The instance is fully created and ready to do work such as + // creating databases. + Instance_READY Instance_State = 2 +) + +var Instance_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "CREATING", + 2: "READY", +} +var Instance_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "CREATING": 1, + "READY": 2, +} + +func (x Instance_State) String() string { + return proto.EnumName(Instance_State_name, int32(x)) +} +func (Instance_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +// A possible configuration for a Cloud Spanner instance. Configurations +// define the geographic placement of nodes and their replication. +type InstanceConfig struct { + // A unique identifier for the instance configuration. Values + // are of the form + // `projects/<project>/instanceConfigs/[a-z][-a-z0-9]*` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of this instance configuration as it appears in UIs. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` +} + +func (m *InstanceConfig) Reset() { *m = InstanceConfig{} } +func (m *InstanceConfig) String() string { return proto.CompactTextString(m) } +func (*InstanceConfig) ProtoMessage() {} +func (*InstanceConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *InstanceConfig) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *InstanceConfig) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +// An isolated set of Cloud Spanner resources on which databases can be hosted. +type Instance struct { + // Required. A unique identifier for the instance, which cannot be changed + // after the instance is created. Values are of the form + // `projects/<project>/instances/[a-z][-a-z0-9]*[a-z0-9]`. The final + // segment of the name must be between 6 and 30 characters in length. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The name of the instance's configuration. Values are of the form + // `projects/<project>/instanceConfigs/<configuration>`. See + // also [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig] and + // [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. + Config string `protobuf:"bytes,2,opt,name=config" json:"config,omitempty"` + // Required. The descriptive name for this instance as it appears in UIs. + // Must be unique per project and between 4 and 30 characters in length. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Required. The number of nodes allocated to this instance. + NodeCount int32 `protobuf:"varint,5,opt,name=node_count,json=nodeCount" json:"node_count,omitempty"` + // Output only. The current instance state. For + // [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance], the state must be + // either omitted or set to `CREATING`. For + // [UpdateInstance][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance], the state must be + // either omitted or set to `READY`. + State Instance_State `protobuf:"varint,6,opt,name=state,enum=google.spanner.admin.instance.v1.Instance_State" json:"state,omitempty"` + // Cloud Labels are a flexible and lightweight mechanism for organizing cloud + // resources into groups that reflect a customer's organizational needs and + // deployment strategies. Cloud Labels can be used to filter collections of + // resources. They can be used to control how resource metrics are aggregated. + // And they can be used as arguments to policy management rules (e.g. route, + // firewall, load balancing, etc.). + // + // * Label keys must be between 1 and 63 characters long and must conform to + // the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`. + // * Label values must be between 0 and 63 characters long and must conform + // to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`. + // * No more than 64 labels can be associated with a given resource. + // + // See https://goo.gl/xmQnxf for more information on and examples of labels. + // + // If you plan to use labels in your own code, please note that additional + // characters may be allowed in the future. And so you are advised to use an + // internal label representation, such as JSON, which doesn't rely upon + // specific characters being disallowed. For example, representing labels + // as the string: name + "_" + value would prove problematic if we were to + // allow "_" in a future release. + Labels map[string]string `protobuf:"bytes,7,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Instance) Reset() { *m = Instance{} } +func (m *Instance) String() string { return proto.CompactTextString(m) } +func (*Instance) ProtoMessage() {} +func (*Instance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Instance) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Instance) GetConfig() string { + if m != nil { + return m.Config + } + return "" +} + +func (m *Instance) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Instance) GetNodeCount() int32 { + if m != nil { + return m.NodeCount + } + return 0 +} + +func (m *Instance) GetState() Instance_State { + if m != nil { + return m.State + } + return Instance_STATE_UNSPECIFIED +} + +func (m *Instance) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// The request for [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. +type ListInstanceConfigsRequest struct { + // Required. The name of the project for which a list of supported instance + // configurations is requested. Values are of the form + // `projects/<project>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Number of instance configurations to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If non-empty, `page_token` should contain a + // [next_page_token][google.spanner.admin.instance.v1.ListInstanceConfigsResponse.next_page_token] + // from a previous [ListInstanceConfigsResponse][google.spanner.admin.instance.v1.ListInstanceConfigsResponse]. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListInstanceConfigsRequest) Reset() { *m = ListInstanceConfigsRequest{} } +func (m *ListInstanceConfigsRequest) String() string { return proto.CompactTextString(m) } +func (*ListInstanceConfigsRequest) ProtoMessage() {} +func (*ListInstanceConfigsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ListInstanceConfigsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListInstanceConfigsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListInstanceConfigsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response for [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. +type ListInstanceConfigsResponse struct { + // The list of requested instance configurations. + InstanceConfigs []*InstanceConfig `protobuf:"bytes,1,rep,name=instance_configs,json=instanceConfigs" json:"instance_configs,omitempty"` + // `next_page_token` can be sent in a subsequent + // [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs] call to + // fetch more of the matching instance configurations. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListInstanceConfigsResponse) Reset() { *m = ListInstanceConfigsResponse{} } +func (m *ListInstanceConfigsResponse) String() string { return proto.CompactTextString(m) } +func (*ListInstanceConfigsResponse) ProtoMessage() {} +func (*ListInstanceConfigsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ListInstanceConfigsResponse) GetInstanceConfigs() []*InstanceConfig { + if m != nil { + return m.InstanceConfigs + } + return nil +} + +func (m *ListInstanceConfigsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request for +// [GetInstanceConfigRequest][google.spanner.admin.instance.v1.InstanceAdmin.GetInstanceConfig]. +type GetInstanceConfigRequest struct { + // Required. The name of the requested instance configuration. Values are of + // the form `projects/<project>/instanceConfigs/<config>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetInstanceConfigRequest) Reset() { *m = GetInstanceConfigRequest{} } +func (m *GetInstanceConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetInstanceConfigRequest) ProtoMessage() {} +func (*GetInstanceConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *GetInstanceConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request for [GetInstance][google.spanner.admin.instance.v1.InstanceAdmin.GetInstance]. +type GetInstanceRequest struct { + // Required. The name of the requested instance. Values are of the form + // `projects/<project>/instances/<instance>`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetInstanceRequest) Reset() { *m = GetInstanceRequest{} } +func (m *GetInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*GetInstanceRequest) ProtoMessage() {} +func (*GetInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *GetInstanceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request for [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance]. +type CreateInstanceRequest struct { + // Required. The name of the project in which to create the instance. Values + // are of the form `projects/<project>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The ID of the instance to create. Valid identifiers are of the + // form `[a-z][-a-z0-9]*[a-z0-9]` and must be between 6 and 30 characters in + // length. + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId" json:"instance_id,omitempty"` + // Required. The instance to create. The name may be omitted, but if + // specified must be `<parent>/instances/<instance_id>`. + Instance *Instance `protobuf:"bytes,3,opt,name=instance" json:"instance,omitempty"` +} + +func (m *CreateInstanceRequest) Reset() { *m = CreateInstanceRequest{} } +func (m *CreateInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*CreateInstanceRequest) ProtoMessage() {} +func (*CreateInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *CreateInstanceRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateInstanceRequest) GetInstanceId() string { + if m != nil { + return m.InstanceId + } + return "" +} + +func (m *CreateInstanceRequest) GetInstance() *Instance { + if m != nil { + return m.Instance + } + return nil +} + +// The request for [ListInstances][google.spanner.admin.instance.v1.InstanceAdmin.ListInstances]. +type ListInstancesRequest struct { + // Required. The name of the project for which a list of instances is + // requested. Values are of the form `projects/<project>`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Number of instances to be returned in the response. If 0 or less, defaults + // to the server's maximum allowed page size. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If non-empty, `page_token` should contain a + // [next_page_token][google.spanner.admin.instance.v1.ListInstancesResponse.next_page_token] from a + // previous [ListInstancesResponse][google.spanner.admin.instance.v1.ListInstancesResponse]. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // An expression for filtering the results of the request. Filter rules are + // case insensitive. The fields eligible for filtering are: + // + // * name + // * display_name + // * labels.key where key is the name of a label + // + // Some examples of using filters are: + // + // * name:* --> The instance has a name. + // * name:Howl --> The instance's name contains the string "howl". + // * name:HOWL --> Equivalent to above. + // * NAME:howl --> Equivalent to above. + // * labels.env:* --> The instance has the label "env". + // * labels.env:dev --> The instance has the label "env" and the value of + // the label contains the string "dev". + // * name:howl labels.env:dev --> The instance's name contains "howl" and + // it has the label "env" with its value + // containing "dev". + Filter string `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"` +} + +func (m *ListInstancesRequest) Reset() { *m = ListInstancesRequest{} } +func (m *ListInstancesRequest) String() string { return proto.CompactTextString(m) } +func (*ListInstancesRequest) ProtoMessage() {} +func (*ListInstancesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ListInstancesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListInstancesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListInstancesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListInstancesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// The response for [ListInstances][google.spanner.admin.instance.v1.InstanceAdmin.ListInstances]. +type ListInstancesResponse struct { + // The list of requested instances. + Instances []*Instance `protobuf:"bytes,1,rep,name=instances" json:"instances,omitempty"` + // `next_page_token` can be sent in a subsequent + // [ListInstances][google.spanner.admin.instance.v1.InstanceAdmin.ListInstances] call to fetch more + // of the matching instances. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListInstancesResponse) Reset() { *m = ListInstancesResponse{} } +func (m *ListInstancesResponse) String() string { return proto.CompactTextString(m) } +func (*ListInstancesResponse) ProtoMessage() {} +func (*ListInstancesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ListInstancesResponse) GetInstances() []*Instance { + if m != nil { + return m.Instances + } + return nil +} + +func (m *ListInstancesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request for [UpdateInstance][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance]. +type UpdateInstanceRequest struct { + // Required. The instance to update, which must always include the instance + // name. Otherwise, only fields mentioned in [][google.spanner.admin.instance.v1.UpdateInstanceRequest.field_mask] need be included. + Instance *Instance `protobuf:"bytes,1,opt,name=instance" json:"instance,omitempty"` + // Required. A mask specifying which fields in [][google.spanner.admin.instance.v1.UpdateInstanceRequest.instance] should be updated. + // The field mask must always be specified; this prevents any future fields in + // [][google.spanner.admin.instance.v1.Instance] from being erased accidentally by clients that do not know + // about them. + FieldMask *google_protobuf3.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask" json:"field_mask,omitempty"` +} + +func (m *UpdateInstanceRequest) Reset() { *m = UpdateInstanceRequest{} } +func (m *UpdateInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateInstanceRequest) ProtoMessage() {} +func (*UpdateInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *UpdateInstanceRequest) GetInstance() *Instance { + if m != nil { + return m.Instance + } + return nil +} + +func (m *UpdateInstanceRequest) GetFieldMask() *google_protobuf3.FieldMask { + if m != nil { + return m.FieldMask + } + return nil +} + +// The request for [DeleteInstance][google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstance]. +type DeleteInstanceRequest struct { + // Required. The name of the instance to be deleted. Values are of the form + // `projects/<project>/instances/<instance>` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteInstanceRequest) Reset() { *m = DeleteInstanceRequest{} } +func (m *DeleteInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteInstanceRequest) ProtoMessage() {} +func (*DeleteInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *DeleteInstanceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Metadata type for the operation returned by +// [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance]. +type CreateInstanceMetadata struct { + // The instance being created. + Instance *Instance `protobuf:"bytes,1,opt,name=instance" json:"instance,omitempty"` + // The time at which the + // [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance] request was + // received. + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The time at which this operation was cancelled. If set, this operation is + // in the process of undoing itself (which is guaranteed to succeed) and + // cannot be cancelled again. + CancelTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=cancel_time,json=cancelTime" json:"cancel_time,omitempty"` + // The time at which this operation failed or was completed successfully. + EndTime *google_protobuf4.Timestamp `protobuf:"bytes,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *CreateInstanceMetadata) Reset() { *m = CreateInstanceMetadata{} } +func (m *CreateInstanceMetadata) String() string { return proto.CompactTextString(m) } +func (*CreateInstanceMetadata) ProtoMessage() {} +func (*CreateInstanceMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *CreateInstanceMetadata) GetInstance() *Instance { + if m != nil { + return m.Instance + } + return nil +} + +func (m *CreateInstanceMetadata) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *CreateInstanceMetadata) GetCancelTime() *google_protobuf4.Timestamp { + if m != nil { + return m.CancelTime + } + return nil +} + +func (m *CreateInstanceMetadata) GetEndTime() *google_protobuf4.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +// Metadata type for the operation returned by +// [UpdateInstance][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance]. +type UpdateInstanceMetadata struct { + // The desired end state of the update. + Instance *Instance `protobuf:"bytes,1,opt,name=instance" json:"instance,omitempty"` + // The time at which [UpdateInstance][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance] + // request was received. + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The time at which this operation was cancelled. If set, this operation is + // in the process of undoing itself (which is guaranteed to succeed) and + // cannot be cancelled again. + CancelTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=cancel_time,json=cancelTime" json:"cancel_time,omitempty"` + // The time at which this operation failed or was completed successfully. + EndTime *google_protobuf4.Timestamp `protobuf:"bytes,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *UpdateInstanceMetadata) Reset() { *m = UpdateInstanceMetadata{} } +func (m *UpdateInstanceMetadata) String() string { return proto.CompactTextString(m) } +func (*UpdateInstanceMetadata) ProtoMessage() {} +func (*UpdateInstanceMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *UpdateInstanceMetadata) GetInstance() *Instance { + if m != nil { + return m.Instance + } + return nil +} + +func (m *UpdateInstanceMetadata) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *UpdateInstanceMetadata) GetCancelTime() *google_protobuf4.Timestamp { + if m != nil { + return m.CancelTime + } + return nil +} + +func (m *UpdateInstanceMetadata) GetEndTime() *google_protobuf4.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func init() { + proto.RegisterType((*InstanceConfig)(nil), "google.spanner.admin.instance.v1.InstanceConfig") + proto.RegisterType((*Instance)(nil), "google.spanner.admin.instance.v1.Instance") + proto.RegisterType((*ListInstanceConfigsRequest)(nil), "google.spanner.admin.instance.v1.ListInstanceConfigsRequest") + proto.RegisterType((*ListInstanceConfigsResponse)(nil), "google.spanner.admin.instance.v1.ListInstanceConfigsResponse") + proto.RegisterType((*GetInstanceConfigRequest)(nil), "google.spanner.admin.instance.v1.GetInstanceConfigRequest") + proto.RegisterType((*GetInstanceRequest)(nil), "google.spanner.admin.instance.v1.GetInstanceRequest") + proto.RegisterType((*CreateInstanceRequest)(nil), "google.spanner.admin.instance.v1.CreateInstanceRequest") + proto.RegisterType((*ListInstancesRequest)(nil), "google.spanner.admin.instance.v1.ListInstancesRequest") + proto.RegisterType((*ListInstancesResponse)(nil), "google.spanner.admin.instance.v1.ListInstancesResponse") + proto.RegisterType((*UpdateInstanceRequest)(nil), "google.spanner.admin.instance.v1.UpdateInstanceRequest") + proto.RegisterType((*DeleteInstanceRequest)(nil), "google.spanner.admin.instance.v1.DeleteInstanceRequest") + proto.RegisterType((*CreateInstanceMetadata)(nil), "google.spanner.admin.instance.v1.CreateInstanceMetadata") + proto.RegisterType((*UpdateInstanceMetadata)(nil), "google.spanner.admin.instance.v1.UpdateInstanceMetadata") + proto.RegisterEnum("google.spanner.admin.instance.v1.Instance_State", Instance_State_name, Instance_State_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for InstanceAdmin service + +type InstanceAdminClient interface { + // Lists the supported instance configurations for a given project. + ListInstanceConfigs(ctx context.Context, in *ListInstanceConfigsRequest, opts ...grpc.CallOption) (*ListInstanceConfigsResponse, error) + // Gets information about a particular instance configuration. + GetInstanceConfig(ctx context.Context, in *GetInstanceConfigRequest, opts ...grpc.CallOption) (*InstanceConfig, error) + // Lists all instances in the given project. + ListInstances(ctx context.Context, in *ListInstancesRequest, opts ...grpc.CallOption) (*ListInstancesResponse, error) + // Gets information about a particular instance. + GetInstance(ctx context.Context, in *GetInstanceRequest, opts ...grpc.CallOption) (*Instance, error) + // Creates an instance and begins preparing it to begin serving. The + // returned [long-running operation][google.longrunning.Operation] + // can be used to track the progress of preparing the new + // instance. The instance name is assigned by the caller. If the + // named instance already exists, `CreateInstance` returns + // `ALREADY_EXISTS`. + // + // Immediately upon completion of this request: + // + // * The instance is readable via the API, with all requested attributes + // but no allocated resources. Its state is `CREATING`. + // + // Until completion of the returned operation: + // + // * Cancelling the operation renders the instance immediately unreadable + // via the API. + // * The instance can be deleted. + // * All other attempts to modify the instance are rejected. + // + // Upon completion of the returned operation: + // + // * Billing for all successfully-allocated resources begins (some types + // may have lower than the requested levels). + // * Databases can be created in the instance. + // * The instance's allocated resource levels are readable via the API. + // * The instance's state becomes `READY`. + // + // The returned [long-running operation][google.longrunning.Operation] will + // have a name of the format `<instance_name>/operations/<operation_id>` and + // can be used to track creation of the instance. The + // [metadata][google.longrunning.Operation.metadata] field type is + // [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. + // The [response][google.longrunning.Operation.response] field type is + // [Instance][google.spanner.admin.instance.v1.Instance], if successful. + CreateInstance(ctx context.Context, in *CreateInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Updates an instance, and begins allocating or releasing resources + // as requested. The returned [long-running + // operation][google.longrunning.Operation] can be used to track the + // progress of updating the instance. If the named instance does not + // exist, returns `NOT_FOUND`. + // + // Immediately upon completion of this request: + // + // * For resource types for which a decrease in the instance's allocation + // has been requested, billing is based on the newly-requested level. + // + // Until completion of the returned operation: + // + // * Cancelling the operation sets its metadata's + // [cancel_time][google.spanner.admin.instance.v1.UpdateInstanceMetadata.cancel_time], and begins + // restoring resources to their pre-request values. The operation + // is guaranteed to succeed at undoing all resource changes, + // after which point it terminates with a `CANCELLED` status. + // * All other attempts to modify the instance are rejected. + // * Reading the instance via the API continues to give the pre-request + // resource levels. + // + // Upon completion of the returned operation: + // + // * Billing begins for all successfully-allocated resources (some types + // may have lower than the requested levels). + // * All newly-reserved resources are available for serving the instance's + // tables. + // * The instance's new resource levels are readable via the API. + // + // The returned [long-running operation][google.longrunning.Operation] will + // have a name of the format `<instance_name>/operations/<operation_id>` and + // can be used to track the instance modification. The + // [metadata][google.longrunning.Operation.metadata] field type is + // [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. + // The [response][google.longrunning.Operation.response] field type is + // [Instance][google.spanner.admin.instance.v1.Instance], if successful. + // + // Authorization requires `spanner.instances.update` permission on + // resource [name][google.spanner.admin.instance.v1.Instance.name]. + UpdateInstance(ctx context.Context, in *UpdateInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes an instance. + // + // Immediately upon completion of the request: + // + // * Billing ceases for all of the instance's reserved resources. + // + // Soon afterward: + // + // * The instance and *all of its databases* immediately and + // irrevocably disappear from the API. All data in the databases + // is permanently deleted. + DeleteInstance(ctx context.Context, in *DeleteInstanceRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Sets the access control policy on an instance resource. Replaces any + // existing policy. + // + // Authorization requires `spanner.instances.setIamPolicy` on + // [resource][google.iam.v1.SetIamPolicyRequest.resource]. + SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Gets the access control policy for an instance resource. Returns an empty + // policy if an instance exists but does not have a policy set. + // + // Authorization requires `spanner.instances.getIamPolicy` on + // [resource][google.iam.v1.GetIamPolicyRequest.resource]. + GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Returns permissions that the caller has on the specified instance resource. + // + // Attempting this RPC on a non-existent Cloud Spanner instance resource will + // result in a NOT_FOUND error if the user has `spanner.instances.list` + // permission on the containing Google Cloud Project. Otherwise returns an + // empty set of permissions. + TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +type instanceAdminClient struct { + cc *grpc.ClientConn +} + +func NewInstanceAdminClient(cc *grpc.ClientConn) InstanceAdminClient { + return &instanceAdminClient{cc} +} + +func (c *instanceAdminClient) ListInstanceConfigs(ctx context.Context, in *ListInstanceConfigsRequest, opts ...grpc.CallOption) (*ListInstanceConfigsResponse, error) { + out := new(ListInstanceConfigsResponse) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/ListInstanceConfigs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) GetInstanceConfig(ctx context.Context, in *GetInstanceConfigRequest, opts ...grpc.CallOption) (*InstanceConfig, error) { + out := new(InstanceConfig) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/GetInstanceConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) ListInstances(ctx context.Context, in *ListInstancesRequest, opts ...grpc.CallOption) (*ListInstancesResponse, error) { + out := new(ListInstancesResponse) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/ListInstances", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) GetInstance(ctx context.Context, in *GetInstanceRequest, opts ...grpc.CallOption) (*Instance, error) { + out := new(Instance) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/GetInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) CreateInstance(ctx context.Context, in *CreateInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/CreateInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) UpdateInstance(ctx context.Context, in *UpdateInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/UpdateInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) DeleteInstance(ctx context.Context, in *DeleteInstanceRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/DeleteInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *instanceAdminClient) TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) { + out := new(google_iam_v11.TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.spanner.admin.instance.v1.InstanceAdmin/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for InstanceAdmin service + +type InstanceAdminServer interface { + // Lists the supported instance configurations for a given project. + ListInstanceConfigs(context.Context, *ListInstanceConfigsRequest) (*ListInstanceConfigsResponse, error) + // Gets information about a particular instance configuration. + GetInstanceConfig(context.Context, *GetInstanceConfigRequest) (*InstanceConfig, error) + // Lists all instances in the given project. + ListInstances(context.Context, *ListInstancesRequest) (*ListInstancesResponse, error) + // Gets information about a particular instance. + GetInstance(context.Context, *GetInstanceRequest) (*Instance, error) + // Creates an instance and begins preparing it to begin serving. The + // returned [long-running operation][google.longrunning.Operation] + // can be used to track the progress of preparing the new + // instance. The instance name is assigned by the caller. If the + // named instance already exists, `CreateInstance` returns + // `ALREADY_EXISTS`. + // + // Immediately upon completion of this request: + // + // * The instance is readable via the API, with all requested attributes + // but no allocated resources. Its state is `CREATING`. + // + // Until completion of the returned operation: + // + // * Cancelling the operation renders the instance immediately unreadable + // via the API. + // * The instance can be deleted. + // * All other attempts to modify the instance are rejected. + // + // Upon completion of the returned operation: + // + // * Billing for all successfully-allocated resources begins (some types + // may have lower than the requested levels). + // * Databases can be created in the instance. + // * The instance's allocated resource levels are readable via the API. + // * The instance's state becomes `READY`. + // + // The returned [long-running operation][google.longrunning.Operation] will + // have a name of the format `<instance_name>/operations/<operation_id>` and + // can be used to track creation of the instance. The + // [metadata][google.longrunning.Operation.metadata] field type is + // [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata]. + // The [response][google.longrunning.Operation.response] field type is + // [Instance][google.spanner.admin.instance.v1.Instance], if successful. + CreateInstance(context.Context, *CreateInstanceRequest) (*google_longrunning.Operation, error) + // Updates an instance, and begins allocating or releasing resources + // as requested. The returned [long-running + // operation][google.longrunning.Operation] can be used to track the + // progress of updating the instance. If the named instance does not + // exist, returns `NOT_FOUND`. + // + // Immediately upon completion of this request: + // + // * For resource types for which a decrease in the instance's allocation + // has been requested, billing is based on the newly-requested level. + // + // Until completion of the returned operation: + // + // * Cancelling the operation sets its metadata's + // [cancel_time][google.spanner.admin.instance.v1.UpdateInstanceMetadata.cancel_time], and begins + // restoring resources to their pre-request values. The operation + // is guaranteed to succeed at undoing all resource changes, + // after which point it terminates with a `CANCELLED` status. + // * All other attempts to modify the instance are rejected. + // * Reading the instance via the API continues to give the pre-request + // resource levels. + // + // Upon completion of the returned operation: + // + // * Billing begins for all successfully-allocated resources (some types + // may have lower than the requested levels). + // * All newly-reserved resources are available for serving the instance's + // tables. + // * The instance's new resource levels are readable via the API. + // + // The returned [long-running operation][google.longrunning.Operation] will + // have a name of the format `<instance_name>/operations/<operation_id>` and + // can be used to track the instance modification. The + // [metadata][google.longrunning.Operation.metadata] field type is + // [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata]. + // The [response][google.longrunning.Operation.response] field type is + // [Instance][google.spanner.admin.instance.v1.Instance], if successful. + // + // Authorization requires `spanner.instances.update` permission on + // resource [name][google.spanner.admin.instance.v1.Instance.name]. + UpdateInstance(context.Context, *UpdateInstanceRequest) (*google_longrunning.Operation, error) + // Deletes an instance. + // + // Immediately upon completion of the request: + // + // * Billing ceases for all of the instance's reserved resources. + // + // Soon afterward: + // + // * The instance and *all of its databases* immediately and + // irrevocably disappear from the API. All data in the databases + // is permanently deleted. + DeleteInstance(context.Context, *DeleteInstanceRequest) (*google_protobuf2.Empty, error) + // Sets the access control policy on an instance resource. Replaces any + // existing policy. + // + // Authorization requires `spanner.instances.setIamPolicy` on + // [resource][google.iam.v1.SetIamPolicyRequest.resource]. + SetIamPolicy(context.Context, *google_iam_v11.SetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Gets the access control policy for an instance resource. Returns an empty + // policy if an instance exists but does not have a policy set. + // + // Authorization requires `spanner.instances.getIamPolicy` on + // [resource][google.iam.v1.GetIamPolicyRequest.resource]. + GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Returns permissions that the caller has on the specified instance resource. + // + // Attempting this RPC on a non-existent Cloud Spanner instance resource will + // result in a NOT_FOUND error if the user has `spanner.instances.list` + // permission on the containing Google Cloud Project. Otherwise returns an + // empty set of permissions. + TestIamPermissions(context.Context, *google_iam_v11.TestIamPermissionsRequest) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +func RegisterInstanceAdminServer(s *grpc.Server, srv InstanceAdminServer) { + s.RegisterService(&_InstanceAdmin_serviceDesc, srv) +} + +func _InstanceAdmin_ListInstanceConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInstanceConfigsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).ListInstanceConfigs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/ListInstanceConfigs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).ListInstanceConfigs(ctx, req.(*ListInstanceConfigsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_GetInstanceConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetInstanceConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).GetInstanceConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/GetInstanceConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).GetInstanceConfig(ctx, req.(*GetInstanceConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_ListInstances_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInstancesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).ListInstances(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/ListInstances", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).ListInstances(ctx, req.(*ListInstancesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_GetInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).GetInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/GetInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).GetInstance(ctx, req.(*GetInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_CreateInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).CreateInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/CreateInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).CreateInstance(ctx, req.(*CreateInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_UpdateInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).UpdateInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/UpdateInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).UpdateInstance(ctx, req.(*UpdateInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_DeleteInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).DeleteInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/DeleteInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).DeleteInstance(ctx, req.(*DeleteInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).SetIamPolicy(ctx, req.(*google_iam_v11.SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).GetIamPolicy(ctx, req.(*google_iam_v11.GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _InstanceAdmin_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstanceAdminServer).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.admin.instance.v1.InstanceAdmin/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstanceAdminServer).TestIamPermissions(ctx, req.(*google_iam_v11.TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _InstanceAdmin_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.spanner.admin.instance.v1.InstanceAdmin", + HandlerType: (*InstanceAdminServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListInstanceConfigs", + Handler: _InstanceAdmin_ListInstanceConfigs_Handler, + }, + { + MethodName: "GetInstanceConfig", + Handler: _InstanceAdmin_GetInstanceConfig_Handler, + }, + { + MethodName: "ListInstances", + Handler: _InstanceAdmin_ListInstances_Handler, + }, + { + MethodName: "GetInstance", + Handler: _InstanceAdmin_GetInstance_Handler, + }, + { + MethodName: "CreateInstance", + Handler: _InstanceAdmin_CreateInstance_Handler, + }, + { + MethodName: "UpdateInstance", + Handler: _InstanceAdmin_UpdateInstance_Handler, + }, + { + MethodName: "DeleteInstance", + Handler: _InstanceAdmin_DeleteInstance_Handler, + }, + { + MethodName: "SetIamPolicy", + Handler: _InstanceAdmin_SetIamPolicy_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _InstanceAdmin_GetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _InstanceAdmin_TestIamPermissions_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/spanner/admin/instance/v1/spanner_instance_admin.proto", +} + +func init() { + proto.RegisterFile("google/spanner/admin/instance/v1/spanner_instance_admin.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 1198 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0xcf, 0x8f, 0xdb, 0xc4, + 0x17, 0xff, 0xce, 0x6e, 0xb3, 0xdd, 0xbc, 0x6c, 0xb7, 0xdb, 0xf9, 0x36, 0x55, 0x48, 0x29, 0x4d, + 0x5d, 0x54, 0xd2, 0x80, 0x6c, 0x1a, 0xe8, 0xaf, 0x2d, 0x7b, 0xd8, 0xa6, 0xd9, 0x34, 0x52, 0xbb, + 0xac, 0x9c, 0x14, 0x09, 0x38, 0x44, 0xd3, 0x64, 0x36, 0x98, 0xb5, 0xc7, 0xc6, 0x33, 0xa9, 0xd8, + 0xa2, 0x5e, 0x2a, 0x0e, 0x20, 0x21, 0x71, 0x40, 0x42, 0xa8, 0x17, 0x24, 0x8e, 0x20, 0x71, 0xe0, + 0xc0, 0x3f, 0xc0, 0x9f, 0xc0, 0xbf, 0x80, 0xf8, 0x3b, 0xd0, 0x8c, 0x3d, 0x69, 0xec, 0x24, 0x9b, + 0xa4, 0xa2, 0x27, 0x6e, 0x9e, 0xf7, 0xf3, 0xe3, 0xcf, 0x7b, 0x7e, 0xcf, 0x03, 0x5b, 0x7d, 0xdf, + 0xef, 0xbb, 0xd4, 0xe2, 0x01, 0x61, 0x8c, 0x86, 0x16, 0xe9, 0x79, 0x0e, 0xb3, 0x1c, 0xc6, 0x05, + 0x61, 0x5d, 0x6a, 0x3d, 0xba, 0xa2, 0x35, 0x1d, 0x2d, 0xeb, 0x28, 0x13, 0x33, 0x08, 0x7d, 0xe1, + 0xe3, 0x52, 0xe4, 0x6e, 0xc6, 0x46, 0x66, 0xa4, 0xd3, 0xa6, 0xe6, 0xa3, 0x2b, 0xc5, 0x57, 0xe3, + 0x04, 0x24, 0x70, 0x2c, 0xc2, 0x98, 0x2f, 0x88, 0x70, 0x7c, 0xc6, 0x23, 0xff, 0x62, 0x7e, 0x54, + 0x3b, 0x10, 0x9f, 0xc4, 0xe2, 0xd7, 0x62, 0xb1, 0x43, 0x3c, 0x09, 0xc1, 0x21, 0x5e, 0x27, 0xf0, + 0x5d, 0xa7, 0x7b, 0x18, 0xeb, 0x8b, 0x49, 0x7d, 0x42, 0x77, 0x31, 0xd6, 0xb9, 0x3e, 0xeb, 0x87, + 0x03, 0xc6, 0x1c, 0xd6, 0xb7, 0xfc, 0x80, 0x86, 0x89, 0xbc, 0x67, 0x63, 0x23, 0x75, 0x7a, 0x38, + 0xd8, 0xb7, 0xa8, 0x17, 0x08, 0x1d, 0xa1, 0x94, 0x56, 0xee, 0x3b, 0xd4, 0xed, 0x75, 0x3c, 0xc2, + 0x0f, 0x62, 0x8b, 0xf3, 0x69, 0x0b, 0xe1, 0x78, 0x94, 0x0b, 0xe2, 0x05, 0x91, 0x81, 0xd1, 0x80, + 0xf5, 0x66, 0x4c, 0x42, 0xcd, 0x67, 0xfb, 0x4e, 0x1f, 0x63, 0x38, 0xc6, 0x88, 0x47, 0x0b, 0xa8, + 0x84, 0xca, 0x59, 0x5b, 0x3d, 0xe3, 0x0b, 0xb0, 0xd6, 0x73, 0x78, 0xe0, 0x92, 0xc3, 0x8e, 0xd2, + 0x2d, 0x29, 0x5d, 0x2e, 0x96, 0xed, 0x12, 0x8f, 0x1a, 0x5f, 0x2e, 0xc3, 0xaa, 0x8e, 0x34, 0x31, + 0xc6, 0x19, 0x58, 0xe9, 0xaa, 0x0c, 0xb1, 0x77, 0x7c, 0x1a, 0x8b, 0xbd, 0x3c, 0x16, 0x1b, 0x9f, + 0x03, 0x60, 0x7e, 0x8f, 0x76, 0xba, 0xfe, 0x80, 0x89, 0x42, 0xa6, 0x84, 0xca, 0x19, 0x3b, 0x2b, + 0x25, 0x35, 0x29, 0xc0, 0x3b, 0x90, 0xe1, 0x82, 0x08, 0x5a, 0x58, 0x29, 0xa1, 0xf2, 0x7a, 0xf5, + 0x6d, 0x73, 0x56, 0xad, 0x4d, 0x0d, 0xd4, 0x6c, 0x49, 0x3f, 0x3b, 0x72, 0xc7, 0xbb, 0xb0, 0xe2, + 0x92, 0x87, 0xd4, 0xe5, 0x85, 0xe3, 0xa5, 0xe5, 0x72, 0xae, 0x7a, 0x6d, 0x81, 0x40, 0xf7, 0x94, + 0x63, 0x9d, 0x89, 0xf0, 0xd0, 0x8e, 0xa3, 0x14, 0x6f, 0x42, 0x6e, 0x44, 0x8c, 0x37, 0x60, 0xf9, + 0x80, 0x1e, 0xc6, 0x9c, 0xc8, 0x47, 0x7c, 0x1a, 0x32, 0x8f, 0x88, 0x3b, 0xd0, 0x7c, 0x46, 0x87, + 0xcd, 0xa5, 0x1b, 0xc8, 0xb8, 0x0e, 0x19, 0x05, 0x0d, 0xe7, 0xe1, 0x54, 0xab, 0xbd, 0xdd, 0xae, + 0x77, 0x1e, 0xec, 0xb6, 0xf6, 0xea, 0xb5, 0xe6, 0x4e, 0xb3, 0x7e, 0x67, 0xe3, 0x7f, 0x78, 0x0d, + 0x56, 0x6b, 0x76, 0x7d, 0xbb, 0xdd, 0xdc, 0x6d, 0x6c, 0x20, 0x9c, 0x85, 0x8c, 0x5d, 0xdf, 0xbe, + 0xf3, 0xe1, 0xc6, 0x92, 0x11, 0x40, 0xf1, 0x9e, 0xc3, 0x45, 0xb2, 0xa6, 0xdc, 0xa6, 0x9f, 0x0d, + 0x28, 0x17, 0xb2, 0x06, 0x01, 0x09, 0x29, 0x13, 0x31, 0x8a, 0xf8, 0x84, 0xcf, 0x42, 0x36, 0x20, + 0x7d, 0xda, 0xe1, 0xce, 0xe3, 0x08, 0x4c, 0xc6, 0x5e, 0x95, 0x82, 0x96, 0xf3, 0x58, 0xb1, 0xaf, + 0x94, 0xc2, 0x3f, 0xa0, 0x2c, 0x2e, 0x8f, 0x32, 0x6f, 0x4b, 0x81, 0xf1, 0x13, 0x82, 0xb3, 0x13, + 0x53, 0xf2, 0xc0, 0x67, 0x9c, 0xe2, 0x8f, 0x61, 0x63, 0xf8, 0x45, 0x46, 0x25, 0xe7, 0x05, 0xa4, + 0xf8, 0x5d, 0xa0, 0x50, 0x51, 0x50, 0xfb, 0xa4, 0x93, 0x4c, 0x82, 0x2f, 0xc1, 0x49, 0x46, 0x3f, + 0x17, 0x9d, 0x11, 0x80, 0x11, 0x97, 0x27, 0xa4, 0x78, 0x6f, 0x08, 0xd2, 0x84, 0x42, 0x83, 0xa6, + 0x20, 0x6a, 0x52, 0x26, 0x34, 0xab, 0x51, 0x06, 0x3c, 0x62, 0x7f, 0x94, 0xe5, 0x0f, 0x08, 0xf2, + 0xb5, 0x90, 0x12, 0x41, 0xd3, 0xd6, 0xd3, 0xc8, 0x3e, 0x0f, 0xb9, 0x21, 0x21, 0x4e, 0x2f, 0xc6, + 0x0b, 0x5a, 0xd4, 0xec, 0xe1, 0x1d, 0x58, 0xd5, 0x27, 0x45, 0x77, 0xae, 0x5a, 0x99, 0x9f, 0x29, + 0x7b, 0xe8, 0x6b, 0x3c, 0x45, 0x70, 0x7a, 0xb4, 0x32, 0x2f, 0xb3, 0x0d, 0x64, 0xcc, 0x7d, 0xc7, + 0x15, 0x34, 0x2c, 0x1c, 0x8b, 0x62, 0x46, 0x27, 0xe3, 0x6b, 0x04, 0xf9, 0x14, 0x88, 0xb8, 0x31, + 0xee, 0x42, 0x56, 0x43, 0xd5, 0x1d, 0xb1, 0xc8, 0x7b, 0x3e, 0x77, 0x9e, 0xbb, 0x0b, 0x9e, 0x21, + 0xc8, 0x3f, 0x08, 0x7a, 0x13, 0x6a, 0x35, 0x4a, 0x39, 0x7a, 0x71, 0xca, 0xf1, 0x4d, 0x80, 0xe7, + 0x33, 0x58, 0x81, 0xc8, 0x55, 0x8b, 0x3a, 0x92, 0x1e, 0xc2, 0xe6, 0x8e, 0x34, 0xb9, 0x4f, 0xf8, + 0x81, 0x9d, 0xdd, 0xd7, 0x8f, 0xc6, 0x9b, 0x90, 0xbf, 0x43, 0x5d, 0x3a, 0x8e, 0x6d, 0x52, 0xd7, + 0x7d, 0xbb, 0x04, 0x67, 0x92, 0x5d, 0x77, 0x9f, 0x0a, 0xd2, 0x23, 0x82, 0xfc, 0x9b, 0xaf, 0xc2, + 0x05, 0x09, 0x45, 0x47, 0xae, 0x8c, 0xa9, 0xaf, 0xd2, 0xd6, 0xfb, 0xc4, 0xce, 0x2a, 0x6b, 0x79, + 0xc6, 0xb7, 0x20, 0xd7, 0x95, 0x31, 0xdc, 0xc8, 0x77, 0x79, 0xa6, 0x2f, 0x44, 0xe6, 0xca, 0xf9, + 0x2a, 0xac, 0x52, 0xd6, 0x8b, 0x3c, 0x8f, 0xcd, 0xf4, 0x3c, 0x4e, 0x59, 0x4f, 0x9e, 0x14, 0x23, + 0xc9, 0xda, 0xfe, 0xc7, 0x19, 0xa9, 0xfe, 0xbd, 0x06, 0x27, 0xf4, 0x5b, 0x6c, 0xcb, 0xf7, 0xc3, + 0x7f, 0x20, 0xf8, 0xff, 0x84, 0x51, 0x8d, 0xdf, 0x9b, 0x4d, 0xc7, 0xf4, 0xa5, 0x52, 0xdc, 0x7a, + 0x41, 0xef, 0x68, 0x0c, 0x18, 0xd6, 0xd3, 0x3f, 0xff, 0xfa, 0x6e, 0xe9, 0x32, 0x7e, 0x43, 0xfe, + 0x20, 0x7d, 0x11, 0x4d, 0xa2, 0xad, 0x20, 0xf4, 0x3f, 0xa5, 0x5d, 0xc1, 0xad, 0xca, 0x13, 0x2b, + 0x3d, 0xf3, 0x7f, 0x43, 0x70, 0x6a, 0x6c, 0x98, 0xe3, 0xcd, 0xd9, 0x28, 0xa6, 0x6d, 0x80, 0xe2, + 0xc2, 0x8b, 0x28, 0x05, 0x5a, 0x7e, 0x92, 0x23, 0x90, 0xd3, 0x88, 0xad, 0xca, 0x13, 0xfc, 0x0b, + 0x82, 0x13, 0x89, 0x31, 0x88, 0xaf, 0x2d, 0x46, 0xdb, 0x90, 0xee, 0xeb, 0x0b, 0xfb, 0xc5, 0x44, + 0x5f, 0x56, 0x98, 0x2f, 0xe2, 0x0b, 0xb3, 0x88, 0xe6, 0xf8, 0x19, 0x82, 0xdc, 0x08, 0x5b, 0xf8, + 0xdd, 0x85, 0xc8, 0xd5, 0x48, 0x17, 0xf8, 0xca, 0x52, 0xe0, 0xa6, 0x11, 0xaa, 0xa8, 0xfc, 0x1e, + 0xc1, 0x7a, 0x72, 0xf6, 0xe1, 0x39, 0x38, 0x99, 0xb8, 0xa3, 0x8b, 0xe7, 0xb4, 0xe3, 0xc8, 0x4f, + 0xb8, 0xf9, 0xbe, 0xfe, 0x09, 0x37, 0xde, 0x52, 0xa8, 0x2e, 0x19, 0xb3, 0x29, 0xdb, 0x44, 0x15, + 0xfc, 0x23, 0x82, 0xf5, 0xe4, 0x08, 0x9a, 0x07, 0xd8, 0xc4, 0x85, 0x34, 0x0b, 0xd8, 0x55, 0x05, + 0xcc, 0xaa, 0x56, 0x14, 0xb0, 0x61, 0xb8, 0xa3, 0x78, 0x93, 0x08, 0xbf, 0x41, 0xb0, 0x9e, 0x5c, + 0x32, 0xf3, 0x20, 0x9c, 0xb8, 0x96, 0x8a, 0x67, 0xc6, 0x66, 0x50, 0x5d, 0x5e, 0x4d, 0x74, 0x25, + 0x2b, 0x73, 0x54, 0xf2, 0x2b, 0x04, 0x6b, 0x2d, 0x2a, 0x9a, 0xc4, 0xdb, 0x53, 0x17, 0x23, 0x6c, + 0xe8, 0x98, 0x0e, 0xf1, 0x64, 0xe6, 0x51, 0xa5, 0xce, 0x9b, 0x4f, 0xd9, 0x44, 0x5a, 0x63, 0x4b, + 0xa5, 0xbd, 0x6e, 0x54, 0x55, 0xda, 0x90, 0x72, 0x7f, 0x10, 0x76, 0xa7, 0x93, 0xc1, 0x47, 0x22, + 0x4b, 0x66, 0x24, 0x94, 0xc6, 0x51, 0x50, 0x1a, 0x2f, 0x0d, 0x4a, 0x3f, 0x05, 0xe5, 0x57, 0x04, + 0xb8, 0x4d, 0xb9, 0x12, 0xd2, 0xd0, 0x73, 0x38, 0x97, 0xf7, 0x41, 0x5c, 0x4e, 0x25, 0x1b, 0x37, + 0xd1, 0xb0, 0x2e, 0xcf, 0x61, 0x19, 0xcf, 0x84, 0x9a, 0x82, 0xba, 0x65, 0xdc, 0x98, 0x0f, 0xaa, + 0x18, 0x8b, 0xb4, 0x89, 0x2a, 0xb7, 0x7f, 0x47, 0xf0, 0x7a, 0xd7, 0xf7, 0x66, 0x36, 0xd2, 0xed, + 0x57, 0x5a, 0x91, 0x2a, 0xb1, 0x95, 0xf6, 0x64, 0xfb, 0xec, 0xa1, 0x8f, 0xee, 0xc6, 0xee, 0x7d, + 0xdf, 0x25, 0xac, 0x6f, 0xfa, 0x61, 0xdf, 0xea, 0x53, 0xa6, 0x9a, 0xcb, 0x8a, 0x54, 0x24, 0x70, + 0xf8, 0xf4, 0xfb, 0xff, 0x2d, 0xfd, 0xfc, 0xf3, 0xd2, 0xa5, 0x46, 0x14, 0xaa, 0xe6, 0xfa, 0x83, + 0x9e, 0x19, 0x27, 0x35, 0x55, 0xb6, 0xe7, 0x37, 0xb6, 0x0f, 0xae, 0x3c, 0x5c, 0x51, 0xd1, 0xdf, + 0xf9, 0x27, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x53, 0x3b, 0xf8, 0x5c, 0x10, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/keys.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/keys.pb.go new file mode 100644 index 0000000..e822f02 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/keys.pb.go @@ -0,0 +1,439 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/v1/keys.proto +// DO NOT EDIT! + +/* +Package spanner is a generated protocol buffer package. + +It is generated from these files: + google/spanner/v1/keys.proto + google/spanner/v1/mutation.proto + google/spanner/v1/query_plan.proto + google/spanner/v1/result_set.proto + google/spanner/v1/spanner.proto + google/spanner/v1/transaction.proto + google/spanner/v1/type.proto + +It has these top-level messages: + KeyRange + KeySet + Mutation + PlanNode + QueryPlan + ResultSet + PartialResultSet + ResultSetMetadata + ResultSetStats + CreateSessionRequest + Session + GetSessionRequest + DeleteSessionRequest + ExecuteSqlRequest + ReadRequest + BeginTransactionRequest + CommitRequest + CommitResponse + RollbackRequest + TransactionOptions + Transaction + TransactionSelector + Type + StructType +*/ +package spanner + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// KeyRange represents a range of rows in a table or index. +// +// A range has a start key and an end key. These keys can be open or +// closed, indicating if the range includes rows with that key. +// +// Keys are represented by lists, where the ith value in the list +// corresponds to the ith component of the table or index primary key. +// Individual values are encoded as described [here][google.spanner.v1.TypeCode]. +// +// For example, consider the following table definition: +// +// CREATE TABLE UserEvents ( +// UserName STRING(MAX), +// EventDate STRING(10) +// ) PRIMARY KEY(UserName, EventDate); +// +// The following keys name rows in this table: +// +// ["Bob", "2014-09-23"] +// ["Alfred", "2015-06-12"] +// +// Since the `UserEvents` table's `PRIMARY KEY` clause names two +// columns, each `UserEvents` key has two elements; the first is the +// `UserName`, and the second is the `EventDate`. +// +// Key ranges with multiple components are interpreted +// lexicographically by component using the table or index key's declared +// sort order. For example, the following range returns all events for +// user `"Bob"` that occurred in the year 2015: +// +// "start_closed": ["Bob", "2015-01-01"] +// "end_closed": ["Bob", "2015-12-31"] +// +// Start and end keys can omit trailing key components. This affects the +// inclusion and exclusion of rows that exactly match the provided key +// components: if the key is closed, then rows that exactly match the +// provided components are included; if the key is open, then rows +// that exactly match are not included. +// +// For example, the following range includes all events for `"Bob"` that +// occurred during and after the year 2000: +// +// "start_closed": ["Bob", "2000-01-01"] +// "end_closed": ["Bob"] +// +// The next example retrieves all events for `"Bob"`: +// +// "start_closed": ["Bob"] +// "end_closed": ["Bob"] +// +// To retrieve events before the year 2000: +// +// "start_closed": ["Bob"] +// "end_open": ["Bob", "2000-01-01"] +// +// The following range includes all rows in the table: +// +// "start_closed": [] +// "end_closed": [] +// +// This range returns all users whose `UserName` begins with any +// character from A to C: +// +// "start_closed": ["A"] +// "end_open": ["D"] +// +// This range returns all users whose `UserName` begins with B: +// +// "start_closed": ["B"] +// "end_open": ["C"] +// +// Key ranges honor column sort order. For example, suppose a table is +// defined as follows: +// +// CREATE TABLE DescendingSortedTable { +// Key INT64, +// ... +// ) PRIMARY KEY(Key DESC); +// +// The following range retrieves all rows with key values between 1 +// and 100 inclusive: +// +// "start_closed": ["100"] +// "end_closed": ["1"] +// +// Note that 100 is passed as the start, and 1 is passed as the end, +// because `Key` is a descending column in the schema. +type KeyRange struct { + // The start key must be provided. It can be either closed or open. + // + // Types that are valid to be assigned to StartKeyType: + // *KeyRange_StartClosed + // *KeyRange_StartOpen + StartKeyType isKeyRange_StartKeyType `protobuf_oneof:"start_key_type"` + // The end key must be provided. It can be either closed or open. + // + // Types that are valid to be assigned to EndKeyType: + // *KeyRange_EndClosed + // *KeyRange_EndOpen + EndKeyType isKeyRange_EndKeyType `protobuf_oneof:"end_key_type"` +} + +func (m *KeyRange) Reset() { *m = KeyRange{} } +func (m *KeyRange) String() string { return proto.CompactTextString(m) } +func (*KeyRange) ProtoMessage() {} +func (*KeyRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isKeyRange_StartKeyType interface { + isKeyRange_StartKeyType() +} +type isKeyRange_EndKeyType interface { + isKeyRange_EndKeyType() +} + +type KeyRange_StartClosed struct { + StartClosed *google_protobuf1.ListValue `protobuf:"bytes,1,opt,name=start_closed,json=startClosed,oneof"` +} +type KeyRange_StartOpen struct { + StartOpen *google_protobuf1.ListValue `protobuf:"bytes,2,opt,name=start_open,json=startOpen,oneof"` +} +type KeyRange_EndClosed struct { + EndClosed *google_protobuf1.ListValue `protobuf:"bytes,3,opt,name=end_closed,json=endClosed,oneof"` +} +type KeyRange_EndOpen struct { + EndOpen *google_protobuf1.ListValue `protobuf:"bytes,4,opt,name=end_open,json=endOpen,oneof"` +} + +func (*KeyRange_StartClosed) isKeyRange_StartKeyType() {} +func (*KeyRange_StartOpen) isKeyRange_StartKeyType() {} +func (*KeyRange_EndClosed) isKeyRange_EndKeyType() {} +func (*KeyRange_EndOpen) isKeyRange_EndKeyType() {} + +func (m *KeyRange) GetStartKeyType() isKeyRange_StartKeyType { + if m != nil { + return m.StartKeyType + } + return nil +} +func (m *KeyRange) GetEndKeyType() isKeyRange_EndKeyType { + if m != nil { + return m.EndKeyType + } + return nil +} + +func (m *KeyRange) GetStartClosed() *google_protobuf1.ListValue { + if x, ok := m.GetStartKeyType().(*KeyRange_StartClosed); ok { + return x.StartClosed + } + return nil +} + +func (m *KeyRange) GetStartOpen() *google_protobuf1.ListValue { + if x, ok := m.GetStartKeyType().(*KeyRange_StartOpen); ok { + return x.StartOpen + } + return nil +} + +func (m *KeyRange) GetEndClosed() *google_protobuf1.ListValue { + if x, ok := m.GetEndKeyType().(*KeyRange_EndClosed); ok { + return x.EndClosed + } + return nil +} + +func (m *KeyRange) GetEndOpen() *google_protobuf1.ListValue { + if x, ok := m.GetEndKeyType().(*KeyRange_EndOpen); ok { + return x.EndOpen + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*KeyRange) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _KeyRange_OneofMarshaler, _KeyRange_OneofUnmarshaler, _KeyRange_OneofSizer, []interface{}{ + (*KeyRange_StartClosed)(nil), + (*KeyRange_StartOpen)(nil), + (*KeyRange_EndClosed)(nil), + (*KeyRange_EndOpen)(nil), + } +} + +func _KeyRange_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*KeyRange) + // start_key_type + switch x := m.StartKeyType.(type) { + case *KeyRange_StartClosed: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StartClosed); err != nil { + return err + } + case *KeyRange_StartOpen: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StartOpen); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("KeyRange.StartKeyType has unexpected type %T", x) + } + // end_key_type + switch x := m.EndKeyType.(type) { + case *KeyRange_EndClosed: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.EndClosed); err != nil { + return err + } + case *KeyRange_EndOpen: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.EndOpen); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("KeyRange.EndKeyType has unexpected type %T", x) + } + return nil +} + +func _KeyRange_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*KeyRange) + switch tag { + case 1: // start_key_type.start_closed + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.ListValue) + err := b.DecodeMessage(msg) + m.StartKeyType = &KeyRange_StartClosed{msg} + return true, err + case 2: // start_key_type.start_open + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.ListValue) + err := b.DecodeMessage(msg) + m.StartKeyType = &KeyRange_StartOpen{msg} + return true, err + case 3: // end_key_type.end_closed + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.ListValue) + err := b.DecodeMessage(msg) + m.EndKeyType = &KeyRange_EndClosed{msg} + return true, err + case 4: // end_key_type.end_open + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.ListValue) + err := b.DecodeMessage(msg) + m.EndKeyType = &KeyRange_EndOpen{msg} + return true, err + default: + return false, nil + } +} + +func _KeyRange_OneofSizer(msg proto.Message) (n int) { + m := msg.(*KeyRange) + // start_key_type + switch x := m.StartKeyType.(type) { + case *KeyRange_StartClosed: + s := proto.Size(x.StartClosed) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *KeyRange_StartOpen: + s := proto.Size(x.StartOpen) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // end_key_type + switch x := m.EndKeyType.(type) { + case *KeyRange_EndClosed: + s := proto.Size(x.EndClosed) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *KeyRange_EndOpen: + s := proto.Size(x.EndOpen) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All +// the keys are expected to be in the same table or index. The keys need +// not be sorted in any particular way. +// +// If the same key is specified multiple times in the set (for example +// if two ranges, two keys, or a key and a range overlap), Cloud Spanner +// behaves as if the key were only specified once. +type KeySet struct { + // A list of specific keys. Entries in `keys` should have exactly as + // many elements as there are columns in the primary or index key + // with which this `KeySet` is used. Individual key values are + // encoded as described [here][google.spanner.v1.TypeCode]. + Keys []*google_protobuf1.ListValue `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` + // A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about + // key range specifications. + Ranges []*KeyRange `protobuf:"bytes,2,rep,name=ranges" json:"ranges,omitempty"` + // For convenience `all` can be set to `true` to indicate that this + // `KeySet` matches all keys in the table or index. Note that any keys + // specified in `keys` or `ranges` are only yielded once. + All bool `protobuf:"varint,3,opt,name=all" json:"all,omitempty"` +} + +func (m *KeySet) Reset() { *m = KeySet{} } +func (m *KeySet) String() string { return proto.CompactTextString(m) } +func (*KeySet) ProtoMessage() {} +func (*KeySet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *KeySet) GetKeys() []*google_protobuf1.ListValue { + if m != nil { + return m.Keys + } + return nil +} + +func (m *KeySet) GetRanges() []*KeyRange { + if m != nil { + return m.Ranges + } + return nil +} + +func (m *KeySet) GetAll() bool { + if m != nil { + return m.All + } + return false +} + +func init() { + proto.RegisterType((*KeyRange)(nil), "google.spanner.v1.KeyRange") + proto.RegisterType((*KeySet)(nil), "google.spanner.v1.KeySet") +} + +func init() { proto.RegisterFile("google/spanner/v1/keys.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 356 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x6b, 0xf2, 0x30, + 0x18, 0xc7, 0xdf, 0x56, 0xf1, 0xd5, 0x28, 0xe2, 0x5b, 0x78, 0x59, 0x71, 0x3b, 0x88, 0xa7, 0x9d, + 0x52, 0x9c, 0x87, 0x0d, 0x3c, 0x0c, 0xea, 0x61, 0x03, 0x07, 0x93, 0x0a, 0x1e, 0x76, 0x91, 0x68, + 0x9f, 0x85, 0x62, 0x96, 0x84, 0x26, 0x95, 0xf5, 0xb4, 0xaf, 0xb2, 0xf3, 0x3e, 0xe5, 0x48, 0x9a, + 0x8e, 0x81, 0xb0, 0x79, 0x4b, 0xf8, 0x3f, 0xbf, 0xe7, 0x97, 0x3e, 0x4f, 0xd1, 0x05, 0x15, 0x82, + 0x32, 0x88, 0x94, 0x24, 0x9c, 0x43, 0x1e, 0x1d, 0x26, 0xd1, 0x1e, 0x4a, 0x85, 0x65, 0x2e, 0xb4, + 0x08, 0xfe, 0x55, 0x29, 0x76, 0x29, 0x3e, 0x4c, 0x86, 0x35, 0x40, 0x64, 0x16, 0x11, 0xce, 0x85, + 0x26, 0x3a, 0x13, 0xdc, 0x01, 0x5f, 0xa9, 0xbd, 0x6d, 0x8b, 0xe7, 0x48, 0xe9, 0xbc, 0xd8, 0xe9, + 0x2a, 0x1d, 0xbf, 0xfb, 0xa8, 0xbd, 0x80, 0x32, 0x21, 0x9c, 0x42, 0x70, 0x8b, 0x7a, 0x4a, 0x93, + 0x5c, 0x6f, 0x76, 0x4c, 0x28, 0x48, 0x43, 0x6f, 0xe4, 0x5d, 0x76, 0xaf, 0x86, 0xd8, 0x29, 0xeb, + 0x0e, 0xf8, 0x21, 0x53, 0x7a, 0x4d, 0x58, 0x01, 0xf7, 0x7f, 0x92, 0xae, 0x25, 0xe6, 0x16, 0x08, + 0x66, 0x08, 0x55, 0x0d, 0x84, 0x04, 0x1e, 0xfa, 0x27, 0xe0, 0x1d, 0x5b, 0xff, 0x28, 0x81, 0x1b, + 0x18, 0x78, 0x5a, 0xbb, 0x1b, 0xbf, 0xc2, 0x5e, 0xd2, 0x01, 0x9e, 0x3a, 0xf3, 0x35, 0x6a, 0x1b, + 0xd8, 0x7a, 0x9b, 0x27, 0xa0, 0x7f, 0x81, 0xa7, 0xc6, 0x1a, 0x0f, 0x50, 0xbf, 0x7a, 0xf2, 0x1e, + 0xca, 0x8d, 0x2e, 0x25, 0xc4, 0x7d, 0xd4, 0x33, 0xad, 0xea, 0xfb, 0xf8, 0x0d, 0xb5, 0x16, 0x50, + 0xae, 0x40, 0x07, 0x18, 0x35, 0xcd, 0x26, 0x42, 0x6f, 0xd4, 0xf8, 0x59, 0x90, 0xd8, 0xba, 0x60, + 0x8a, 0x5a, 0xb9, 0x19, 0xac, 0x0a, 0x7d, 0x4b, 0x9c, 0xe3, 0xa3, 0xe5, 0xe1, 0x7a, 0xf8, 0x89, + 0x2b, 0x0d, 0x06, 0xa8, 0x41, 0x18, 0xb3, 0xdf, 0xdf, 0x4e, 0xcc, 0x31, 0x7e, 0x45, 0xff, 0x77, + 0xe2, 0xe5, 0x98, 0x8d, 0x3b, 0x0b, 0x28, 0xd5, 0xd2, 0xd8, 0x97, 0xde, 0xd3, 0x8d, 0xcb, 0xa9, + 0x60, 0x84, 0x53, 0x2c, 0x72, 0x1a, 0x51, 0xe0, 0xf6, 0x6d, 0x51, 0x15, 0x11, 0x99, 0xa9, 0x6f, + 0x7f, 0xd5, 0xcc, 0x1d, 0x3f, 0xfc, 0xb3, 0xbb, 0x0a, 0x9d, 0x33, 0x51, 0xa4, 0x78, 0xe5, 0x04, + 0xeb, 0xc9, 0xb6, 0x65, 0xf1, 0xe9, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x78, 0x80, 0x47, + 0x93, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/mutation.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/mutation.pb.go new file mode 100644 index 0000000..bda605f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/mutation.pb.go @@ -0,0 +1,348 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/v1/mutation.proto +// DO NOT EDIT! + +package spanner + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A modification to one or more Cloud Spanner rows. Mutations can be +// applied to a Cloud Spanner database by sending them in a +// [Commit][google.spanner.v1.Spanner.Commit] call. +type Mutation struct { + // Required. The operation to perform. + // + // Types that are valid to be assigned to Operation: + // *Mutation_Insert + // *Mutation_Update + // *Mutation_InsertOrUpdate + // *Mutation_Replace + // *Mutation_Delete_ + Operation isMutation_Operation `protobuf_oneof:"operation"` +} + +func (m *Mutation) Reset() { *m = Mutation{} } +func (m *Mutation) String() string { return proto.CompactTextString(m) } +func (*Mutation) ProtoMessage() {} +func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +type isMutation_Operation interface { + isMutation_Operation() +} + +type Mutation_Insert struct { + Insert *Mutation_Write `protobuf:"bytes,1,opt,name=insert,oneof"` +} +type Mutation_Update struct { + Update *Mutation_Write `protobuf:"bytes,2,opt,name=update,oneof"` +} +type Mutation_InsertOrUpdate struct { + InsertOrUpdate *Mutation_Write `protobuf:"bytes,3,opt,name=insert_or_update,json=insertOrUpdate,oneof"` +} +type Mutation_Replace struct { + Replace *Mutation_Write `protobuf:"bytes,4,opt,name=replace,oneof"` +} +type Mutation_Delete_ struct { + Delete *Mutation_Delete `protobuf:"bytes,5,opt,name=delete,oneof"` +} + +func (*Mutation_Insert) isMutation_Operation() {} +func (*Mutation_Update) isMutation_Operation() {} +func (*Mutation_InsertOrUpdate) isMutation_Operation() {} +func (*Mutation_Replace) isMutation_Operation() {} +func (*Mutation_Delete_) isMutation_Operation() {} + +func (m *Mutation) GetOperation() isMutation_Operation { + if m != nil { + return m.Operation + } + return nil +} + +func (m *Mutation) GetInsert() *Mutation_Write { + if x, ok := m.GetOperation().(*Mutation_Insert); ok { + return x.Insert + } + return nil +} + +func (m *Mutation) GetUpdate() *Mutation_Write { + if x, ok := m.GetOperation().(*Mutation_Update); ok { + return x.Update + } + return nil +} + +func (m *Mutation) GetInsertOrUpdate() *Mutation_Write { + if x, ok := m.GetOperation().(*Mutation_InsertOrUpdate); ok { + return x.InsertOrUpdate + } + return nil +} + +func (m *Mutation) GetReplace() *Mutation_Write { + if x, ok := m.GetOperation().(*Mutation_Replace); ok { + return x.Replace + } + return nil +} + +func (m *Mutation) GetDelete() *Mutation_Delete { + if x, ok := m.GetOperation().(*Mutation_Delete_); ok { + return x.Delete + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Mutation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Mutation_OneofMarshaler, _Mutation_OneofUnmarshaler, _Mutation_OneofSizer, []interface{}{ + (*Mutation_Insert)(nil), + (*Mutation_Update)(nil), + (*Mutation_InsertOrUpdate)(nil), + (*Mutation_Replace)(nil), + (*Mutation_Delete_)(nil), + } +} + +func _Mutation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Mutation) + // operation + switch x := m.Operation.(type) { + case *Mutation_Insert: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Insert); err != nil { + return err + } + case *Mutation_Update: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Update); err != nil { + return err + } + case *Mutation_InsertOrUpdate: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InsertOrUpdate); err != nil { + return err + } + case *Mutation_Replace: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Replace); err != nil { + return err + } + case *Mutation_Delete_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Delete); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Mutation.Operation has unexpected type %T", x) + } + return nil +} + +func _Mutation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Mutation) + switch tag { + case 1: // operation.insert + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_Write) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Insert{msg} + return true, err + case 2: // operation.update + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_Write) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Update{msg} + return true, err + case 3: // operation.insert_or_update + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_Write) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_InsertOrUpdate{msg} + return true, err + case 4: // operation.replace + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_Write) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Replace{msg} + return true, err + case 5: // operation.delete + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mutation_Delete) + err := b.DecodeMessage(msg) + m.Operation = &Mutation_Delete_{msg} + return true, err + default: + return false, nil + } +} + +func _Mutation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Mutation) + // operation + switch x := m.Operation.(type) { + case *Mutation_Insert: + s := proto.Size(x.Insert) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Update: + s := proto.Size(x.Update) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_InsertOrUpdate: + s := proto.Size(x.InsertOrUpdate) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Replace: + s := proto.Size(x.Replace) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Mutation_Delete_: + s := proto.Size(x.Delete) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Arguments to [insert][google.spanner.v1.Mutation.insert], [update][google.spanner.v1.Mutation.update], [insert_or_update][google.spanner.v1.Mutation.insert_or_update], and +// [replace][google.spanner.v1.Mutation.replace] operations. +type Mutation_Write struct { + // Required. The table whose rows will be written. + Table string `protobuf:"bytes,1,opt,name=table" json:"table,omitempty"` + // The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written. + // + // The list of columns must contain enough columns to allow + // Cloud Spanner to derive values for all primary key columns in the + // row(s) to be modified. + Columns []string `protobuf:"bytes,2,rep,name=columns" json:"columns,omitempty"` + // The values to be written. `values` can contain more than one + // list of values. If it does, then multiple rows are written, one + // for each entry in `values`. Each list in `values` must have + // exactly as many entries as there are entries in [columns][google.spanner.v1.Mutation.Write.columns] + // above. Sending multiple lists is equivalent to sending multiple + // `Mutation`s, each containing one `values` entry and repeating + // [table][google.spanner.v1.Mutation.Write.table] and [columns][google.spanner.v1.Mutation.Write.columns]. Individual values in each list are + // encoded as described [here][google.spanner.v1.TypeCode]. + Values []*google_protobuf1.ListValue `protobuf:"bytes,3,rep,name=values" json:"values,omitempty"` +} + +func (m *Mutation_Write) Reset() { *m = Mutation_Write{} } +func (m *Mutation_Write) String() string { return proto.CompactTextString(m) } +func (*Mutation_Write) ProtoMessage() {} +func (*Mutation_Write) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +func (m *Mutation_Write) GetTable() string { + if m != nil { + return m.Table + } + return "" +} + +func (m *Mutation_Write) GetColumns() []string { + if m != nil { + return m.Columns + } + return nil +} + +func (m *Mutation_Write) GetValues() []*google_protobuf1.ListValue { + if m != nil { + return m.Values + } + return nil +} + +// Arguments to [delete][google.spanner.v1.Mutation.delete] operations. +type Mutation_Delete struct { + // Required. The table whose rows will be deleted. + Table string `protobuf:"bytes,1,opt,name=table" json:"table,omitempty"` + // Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete. + KeySet *KeySet `protobuf:"bytes,2,opt,name=key_set,json=keySet" json:"key_set,omitempty"` +} + +func (m *Mutation_Delete) Reset() { *m = Mutation_Delete{} } +func (m *Mutation_Delete) String() string { return proto.CompactTextString(m) } +func (*Mutation_Delete) ProtoMessage() {} +func (*Mutation_Delete) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 1} } + +func (m *Mutation_Delete) GetTable() string { + if m != nil { + return m.Table + } + return "" +} + +func (m *Mutation_Delete) GetKeySet() *KeySet { + if m != nil { + return m.KeySet + } + return nil +} + +func init() { + proto.RegisterType((*Mutation)(nil), "google.spanner.v1.Mutation") + proto.RegisterType((*Mutation_Write)(nil), "google.spanner.v1.Mutation.Write") + proto.RegisterType((*Mutation_Delete)(nil), "google.spanner.v1.Mutation.Delete") +} + +func init() { proto.RegisterFile("google/spanner/v1/mutation.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 402 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x41, 0x6b, 0xdb, 0x30, + 0x14, 0xc7, 0x97, 0x38, 0x71, 0x16, 0x85, 0x8d, 0xcd, 0x6c, 0xcc, 0x33, 0x3b, 0x78, 0x39, 0xe5, + 0x24, 0x13, 0xef, 0x32, 0xc8, 0x76, 0xc9, 0x06, 0x1b, 0x6c, 0xa1, 0xc1, 0xa1, 0x29, 0xf4, 0x12, + 0x14, 0xe7, 0xd5, 0x18, 0x2b, 0x92, 0x91, 0xe4, 0x40, 0xa0, 0x9f, 0xa5, 0x1f, 0xa0, 0x9f, 0xb2, + 0x58, 0x92, 0x4b, 0x68, 0xda, 0x92, 0x9e, 0xec, 0xc7, 0xfb, 0xff, 0xfe, 0xff, 0xf7, 0x24, 0xa1, + 0x30, 0xe3, 0x3c, 0xa3, 0x10, 0xc9, 0x92, 0x30, 0x06, 0x22, 0xda, 0x8d, 0xa3, 0x6d, 0xa5, 0x88, + 0xca, 0x39, 0xc3, 0xa5, 0xe0, 0x8a, 0x7b, 0xef, 0x8d, 0x02, 0x5b, 0x05, 0xde, 0x8d, 0x83, 0x2f, + 0x16, 0x22, 0x65, 0x1e, 0x11, 0xc6, 0xb8, 0xd1, 0x4b, 0x03, 0xdc, 0x77, 0x75, 0xb5, 0xae, 0xae, + 0x22, 0xa9, 0x44, 0x95, 0xaa, 0x07, 0xdd, 0x83, 0xc0, 0x02, 0xf6, 0x96, 0x1d, 0xde, 0x74, 0xd0, + 0xeb, 0x99, 0xcd, 0xf7, 0x26, 0xc8, 0xcd, 0x99, 0x04, 0xa1, 0xfc, 0x56, 0xd8, 0x1a, 0x0d, 0xe2, + 0xaf, 0xf8, 0x68, 0x14, 0xdc, 0x88, 0xf1, 0x85, 0xc8, 0x15, 0xfc, 0x7d, 0x95, 0x58, 0xa4, 0x86, + 0xab, 0x72, 0x43, 0x14, 0xf8, 0xed, 0x17, 0xc0, 0x06, 0xf1, 0x66, 0xe8, 0x9d, 0xb1, 0x59, 0x71, + 0xb1, 0xb2, 0x36, 0xce, 0xe9, 0x36, 0x6f, 0x0d, 0x7c, 0x26, 0xce, 0x8d, 0xdd, 0x4f, 0xd4, 0x13, + 0x50, 0x52, 0x92, 0x82, 0xdf, 0x39, 0xdd, 0xa5, 0x61, 0xbc, 0x1f, 0xc8, 0xdd, 0x00, 0x05, 0x05, + 0x7e, 0x57, 0xd3, 0xc3, 0xe7, 0xe8, 0xdf, 0x5a, 0x59, 0xef, 0x62, 0x98, 0xa0, 0x40, 0x5d, 0xed, + 0xe8, 0x7d, 0x40, 0x5d, 0x45, 0xd6, 0x14, 0xf4, 0x69, 0xf6, 0x13, 0x53, 0x78, 0x3e, 0xea, 0xa5, + 0x9c, 0x56, 0x5b, 0x26, 0xfd, 0x76, 0xe8, 0x8c, 0xfa, 0x49, 0x53, 0x7a, 0x31, 0x72, 0x77, 0x84, + 0x56, 0x20, 0x7d, 0x27, 0x74, 0x46, 0x83, 0x38, 0x68, 0x62, 0x9b, 0x8b, 0xc5, 0xff, 0x73, 0xa9, + 0x96, 0xb5, 0x24, 0xb1, 0xca, 0x20, 0x41, 0xae, 0x19, 0xe0, 0x89, 0xb4, 0x18, 0xf5, 0x0a, 0xd8, + 0xaf, 0x24, 0x28, 0x7b, 0x2d, 0x9f, 0x1f, 0xd9, 0xe5, 0x1f, 0xec, 0x17, 0xa0, 0x12, 0xb7, 0xd0, + 0xdf, 0xe9, 0x00, 0xf5, 0x79, 0x09, 0x42, 0xaf, 0x37, 0xbd, 0x46, 0x1f, 0x53, 0xbe, 0x3d, 0x86, + 0xa6, 0x6f, 0x9a, 0x13, 0x98, 0xd7, 0xd3, 0xcd, 0x5b, 0x97, 0xdf, 0xad, 0x26, 0xe3, 0x94, 0xb0, + 0x0c, 0x73, 0x91, 0x45, 0x19, 0x30, 0x3d, 0x7b, 0x64, 0x5a, 0xa4, 0xcc, 0xe5, 0xc1, 0x3b, 0x9c, + 0xd8, 0xdf, 0xdb, 0xf6, 0xa7, 0x3f, 0x06, 0xfd, 0x45, 0x79, 0xb5, 0xc1, 0x0b, 0x1b, 0xb2, 0x1c, + 0xaf, 0x5d, 0x8d, 0x7f, 0xbb, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x94, 0x52, 0x99, 0xf3, 0x36, 0x03, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/query_plan.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/query_plan.pb.go new file mode 100644 index 0000000..18a7ea3 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/query_plan.pb.go @@ -0,0 +1,286 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/v1/query_plan.proto +// DO NOT EDIT! + +package spanner + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The kind of [PlanNode][google.spanner.v1.PlanNode]. Distinguishes between the two different kinds of +// nodes that can appear in a query plan. +type PlanNode_Kind int32 + +const ( + // Not specified. + PlanNode_KIND_UNSPECIFIED PlanNode_Kind = 0 + // Denotes a Relational operator node in the expression tree. Relational + // operators represent iterative processing of rows during query execution. + // For example, a `TableScan` operation that reads rows from a table. + PlanNode_RELATIONAL PlanNode_Kind = 1 + // Denotes a Scalar node in the expression tree. Scalar nodes represent + // non-iterable entities in the query plan. For example, constants or + // arithmetic operators appearing inside predicate expressions or references + // to column names. + PlanNode_SCALAR PlanNode_Kind = 2 +) + +var PlanNode_Kind_name = map[int32]string{ + 0: "KIND_UNSPECIFIED", + 1: "RELATIONAL", + 2: "SCALAR", +} +var PlanNode_Kind_value = map[string]int32{ + "KIND_UNSPECIFIED": 0, + "RELATIONAL": 1, + "SCALAR": 2, +} + +func (x PlanNode_Kind) String() string { + return proto.EnumName(PlanNode_Kind_name, int32(x)) +} +func (PlanNode_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +// Node information for nodes appearing in a [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes]. +type PlanNode struct { + // The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes]. + Index int32 `protobuf:"varint,1,opt,name=index" json:"index,omitempty"` + // Used to determine the type of node. May be needed for visualizing + // different kinds of nodes differently. For example, If the node is a + // [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation + // which can be used to directly embed a description of the node in its + // parent. + Kind PlanNode_Kind `protobuf:"varint,2,opt,name=kind,enum=google.spanner.v1.PlanNode_Kind" json:"kind,omitempty"` + // The display name for the node. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // List of child node `index`es and their relationship to this parent. + ChildLinks []*PlanNode_ChildLink `protobuf:"bytes,4,rep,name=child_links,json=childLinks" json:"child_links,omitempty"` + // Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes. + ShortRepresentation *PlanNode_ShortRepresentation `protobuf:"bytes,5,opt,name=short_representation,json=shortRepresentation" json:"short_representation,omitempty"` + // Attributes relevant to the node contained in a group of key-value pairs. + // For example, a Parameter Reference node could have the following + // information in its metadata: + // + // { + // "parameter_reference": "param1", + // "parameter_type": "array" + // } + Metadata *google_protobuf1.Struct `protobuf:"bytes,6,opt,name=metadata" json:"metadata,omitempty"` + // The execution statistics associated with the node, contained in a group of + // key-value pairs. Only present if the plan was returned as a result of a + // profile query. For example, number of executions, number of rows/time per + // execution etc. + ExecutionStats *google_protobuf1.Struct `protobuf:"bytes,7,opt,name=execution_stats,json=executionStats" json:"execution_stats,omitempty"` +} + +func (m *PlanNode) Reset() { *m = PlanNode{} } +func (m *PlanNode) String() string { return proto.CompactTextString(m) } +func (*PlanNode) ProtoMessage() {} +func (*PlanNode) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *PlanNode) GetIndex() int32 { + if m != nil { + return m.Index + } + return 0 +} + +func (m *PlanNode) GetKind() PlanNode_Kind { + if m != nil { + return m.Kind + } + return PlanNode_KIND_UNSPECIFIED +} + +func (m *PlanNode) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *PlanNode) GetChildLinks() []*PlanNode_ChildLink { + if m != nil { + return m.ChildLinks + } + return nil +} + +func (m *PlanNode) GetShortRepresentation() *PlanNode_ShortRepresentation { + if m != nil { + return m.ShortRepresentation + } + return nil +} + +func (m *PlanNode) GetMetadata() *google_protobuf1.Struct { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *PlanNode) GetExecutionStats() *google_protobuf1.Struct { + if m != nil { + return m.ExecutionStats + } + return nil +} + +// Metadata associated with a parent-child relationship appearing in a +// [PlanNode][google.spanner.v1.PlanNode]. +type PlanNode_ChildLink struct { + // The node to which the link points. + ChildIndex int32 `protobuf:"varint,1,opt,name=child_index,json=childIndex" json:"child_index,omitempty"` + // The type of the link. For example, in Hash Joins this could be used to + // distinguish between the build child and the probe child, or in the case + // of the child being an output variable, to represent the tag associated + // with the output variable. + Type string `protobuf:"bytes,2,opt,name=type" json:"type,omitempty"` + // Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds + // to an output variable of the parent node. The field carries the name of + // the output variable. + // For example, a `TableScan` operator that reads rows from a table will + // have child links to the `SCALAR` nodes representing the output variables + // created for each column that is read by the operator. The corresponding + // `variable` fields will be set to the variable names assigned to the + // columns. + Variable string `protobuf:"bytes,3,opt,name=variable" json:"variable,omitempty"` +} + +func (m *PlanNode_ChildLink) Reset() { *m = PlanNode_ChildLink{} } +func (m *PlanNode_ChildLink) String() string { return proto.CompactTextString(m) } +func (*PlanNode_ChildLink) ProtoMessage() {} +func (*PlanNode_ChildLink) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +func (m *PlanNode_ChildLink) GetChildIndex() int32 { + if m != nil { + return m.ChildIndex + } + return 0 +} + +func (m *PlanNode_ChildLink) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *PlanNode_ChildLink) GetVariable() string { + if m != nil { + return m.Variable + } + return "" +} + +// Condensed representation of a node and its subtree. Only present for +// `SCALAR` [PlanNode(s)][google.spanner.v1.PlanNode]. +type PlanNode_ShortRepresentation struct { + // A string representation of the expression subtree rooted at this node. + Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` + // A mapping of (subquery variable name) -> (subquery node id) for cases + // where the `description` string of this node references a `SCALAR` + // subquery contained in the expression subtree rooted at this node. The + // referenced `SCALAR` subquery may not necessarily be a direct child of + // this node. + Subqueries map[string]int32 `protobuf:"bytes,2,rep,name=subqueries" json:"subqueries,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` +} + +func (m *PlanNode_ShortRepresentation) Reset() { *m = PlanNode_ShortRepresentation{} } +func (m *PlanNode_ShortRepresentation) String() string { return proto.CompactTextString(m) } +func (*PlanNode_ShortRepresentation) ProtoMessage() {} +func (*PlanNode_ShortRepresentation) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 1} } + +func (m *PlanNode_ShortRepresentation) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *PlanNode_ShortRepresentation) GetSubqueries() map[string]int32 { + if m != nil { + return m.Subqueries + } + return nil +} + +// Contains an ordered list of nodes appearing in the query plan. +type QueryPlan struct { + // The nodes in the query plan. Plan nodes are returned in pre-order starting + // with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in + // `plan_nodes`. + PlanNodes []*PlanNode `protobuf:"bytes,1,rep,name=plan_nodes,json=planNodes" json:"plan_nodes,omitempty"` +} + +func (m *QueryPlan) Reset() { *m = QueryPlan{} } +func (m *QueryPlan) String() string { return proto.CompactTextString(m) } +func (*QueryPlan) ProtoMessage() {} +func (*QueryPlan) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *QueryPlan) GetPlanNodes() []*PlanNode { + if m != nil { + return m.PlanNodes + } + return nil +} + +func init() { + proto.RegisterType((*PlanNode)(nil), "google.spanner.v1.PlanNode") + proto.RegisterType((*PlanNode_ChildLink)(nil), "google.spanner.v1.PlanNode.ChildLink") + proto.RegisterType((*PlanNode_ShortRepresentation)(nil), "google.spanner.v1.PlanNode.ShortRepresentation") + proto.RegisterType((*QueryPlan)(nil), "google.spanner.v1.QueryPlan") + proto.RegisterEnum("google.spanner.v1.PlanNode_Kind", PlanNode_Kind_name, PlanNode_Kind_value) +} + +func init() { proto.RegisterFile("google/spanner/v1/query_plan.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 588 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xd1, 0x6e, 0xd3, 0x30, + 0x14, 0x25, 0x5d, 0x5b, 0xd6, 0x5b, 0xd4, 0x15, 0x6f, 0x68, 0x51, 0x41, 0x22, 0x54, 0x42, 0xea, + 0x53, 0xa2, 0x6d, 0x3c, 0x4c, 0x43, 0x08, 0xba, 0xae, 0x9b, 0xaa, 0x55, 0xa5, 0x38, 0xc0, 0x03, + 0x42, 0x8a, 0xdc, 0xc6, 0x74, 0x56, 0x53, 0x3b, 0xc4, 0x4e, 0xb5, 0x3e, 0xf0, 0x0b, 0x7c, 0x08, + 0x3f, 0xc4, 0xef, 0x20, 0x3b, 0x69, 0x18, 0x14, 0x55, 0xe2, 0xed, 0x5e, 0xdf, 0x73, 0x4f, 0x7c, + 0xcf, 0xb9, 0x0e, 0xb4, 0x67, 0x42, 0xcc, 0x22, 0xea, 0xc9, 0x98, 0x70, 0x4e, 0x13, 0x6f, 0x79, + 0xe4, 0x7d, 0x4d, 0x69, 0xb2, 0x0a, 0xe2, 0x88, 0x70, 0x37, 0x4e, 0x84, 0x12, 0xe8, 0x61, 0x86, + 0x71, 0x73, 0x8c, 0xbb, 0x3c, 0x6a, 0x3d, 0xc9, 0xdb, 0x48, 0xcc, 0x3c, 0xc2, 0xb9, 0x50, 0x44, + 0x31, 0xc1, 0x65, 0xd6, 0x50, 0x54, 0x4d, 0x36, 0x49, 0xbf, 0x78, 0x52, 0x25, 0xe9, 0x54, 0x65, + 0xd5, 0xf6, 0xf7, 0x2a, 0xec, 0x8e, 0x23, 0xc2, 0x47, 0x22, 0xa4, 0xe8, 0x00, 0x2a, 0x8c, 0x87, + 0xf4, 0xd6, 0xb6, 0x1c, 0xab, 0x53, 0xc1, 0x59, 0x82, 0x5e, 0x40, 0x79, 0xce, 0x78, 0x68, 0x97, + 0x1c, 0xab, 0xd3, 0x38, 0x76, 0xdc, 0x8d, 0x0b, 0xb8, 0x6b, 0x02, 0xf7, 0x9a, 0xf1, 0x10, 0x1b, + 0x34, 0x7a, 0x06, 0x0f, 0x42, 0x26, 0xe3, 0x88, 0xac, 0x02, 0x4e, 0x16, 0xd4, 0xde, 0x71, 0xac, + 0x4e, 0x0d, 0xd7, 0xf3, 0xb3, 0x11, 0x59, 0x50, 0x74, 0x09, 0xf5, 0xe9, 0x0d, 0x8b, 0xc2, 0x20, + 0x62, 0x7c, 0x2e, 0xed, 0xb2, 0xb3, 0xd3, 0xa9, 0x1f, 0x3f, 0xdf, 0xc6, 0xdf, 0xd3, 0xf0, 0x21, + 0xe3, 0x73, 0x0c, 0xd3, 0x75, 0x28, 0xd1, 0x04, 0x0e, 0xe4, 0x8d, 0x48, 0x54, 0x90, 0xd0, 0x38, + 0xa1, 0x92, 0xf2, 0x4c, 0x00, 0xbb, 0xe2, 0x58, 0x9d, 0xfa, 0xb1, 0xb7, 0x8d, 0xd0, 0xd7, 0x7d, + 0xf8, 0x8f, 0x36, 0xbc, 0x2f, 0x37, 0x0f, 0xd1, 0x09, 0xec, 0x2e, 0xa8, 0x22, 0x21, 0x51, 0xc4, + 0xae, 0x1a, 0xde, 0xc3, 0x35, 0xef, 0x5a, 0x58, 0xd7, 0x37, 0xc2, 0xe2, 0x02, 0x88, 0xde, 0xc0, + 0x1e, 0xbd, 0xa5, 0xd3, 0x54, 0x33, 0x04, 0x52, 0x11, 0x25, 0xed, 0xfb, 0xdb, 0x7b, 0x1b, 0x05, + 0xde, 0xd7, 0xf0, 0xd6, 0x67, 0xa8, 0x15, 0x33, 0xa3, 0xa7, 0x6b, 0xbd, 0xee, 0x9a, 0x94, 0x09, + 0x31, 0x30, 0x4e, 0x21, 0x28, 0xab, 0x55, 0x4c, 0x8d, 0x53, 0x35, 0x6c, 0x62, 0xd4, 0x82, 0xdd, + 0x25, 0x49, 0x18, 0x99, 0x44, 0x6b, 0x0f, 0x8a, 0xbc, 0xf5, 0xd3, 0x82, 0xfd, 0x7f, 0x28, 0x80, + 0x1c, 0xa8, 0x87, 0x54, 0x4e, 0x13, 0x16, 0x1b, 0x1d, 0xad, 0xdc, 0xba, 0xdf, 0x47, 0x28, 0x00, + 0x90, 0xe9, 0x44, 0x2f, 0x27, 0xa3, 0xd2, 0x2e, 0x19, 0xe7, 0x5e, 0xff, 0xa7, 0xd0, 0xae, 0x5f, + 0x30, 0xf4, 0xb9, 0x4a, 0x56, 0xf8, 0x0e, 0x65, 0xeb, 0x15, 0xec, 0xfd, 0x55, 0x46, 0x4d, 0xd8, + 0x99, 0xd3, 0x55, 0x7e, 0x1b, 0x1d, 0xea, 0x7d, 0x5d, 0x92, 0x28, 0xcd, 0x06, 0xae, 0xe0, 0x2c, + 0x39, 0x2b, 0x9d, 0x5a, 0xed, 0x53, 0x28, 0xeb, 0x5d, 0x44, 0x07, 0xd0, 0xbc, 0x1e, 0x8c, 0x2e, + 0x82, 0x0f, 0x23, 0x7f, 0xdc, 0xef, 0x0d, 0x2e, 0x07, 0xfd, 0x8b, 0xe6, 0x3d, 0xd4, 0x00, 0xc0, + 0xfd, 0x61, 0xf7, 0xfd, 0xe0, 0xed, 0xa8, 0x3b, 0x6c, 0x5a, 0x08, 0xa0, 0xea, 0xf7, 0xba, 0xc3, + 0x2e, 0x6e, 0x96, 0xda, 0x57, 0x50, 0x7b, 0xa7, 0xdf, 0x9c, 0xbe, 0x39, 0x3a, 0x03, 0xd0, 0x4f, + 0x2f, 0xe0, 0x22, 0xa4, 0xd2, 0xb6, 0xcc, 0x98, 0x8f, 0xb7, 0x8c, 0x89, 0x6b, 0x71, 0x1e, 0xc9, + 0xf3, 0x6f, 0xf0, 0x68, 0x2a, 0x16, 0x9b, 0xe0, 0xf3, 0x46, 0xc1, 0x3f, 0xd6, 0xee, 0x8f, 0xad, + 0x4f, 0xa7, 0x39, 0x68, 0x26, 0x22, 0xc2, 0x67, 0xae, 0x48, 0x66, 0xde, 0x8c, 0x72, 0xb3, 0x1b, + 0x5e, 0x56, 0x22, 0x31, 0x93, 0x77, 0x7e, 0x0b, 0x2f, 0xf3, 0xf0, 0x47, 0xe9, 0xf0, 0x2a, 0x6b, + 0xed, 0x45, 0x22, 0x0d, 0x5d, 0x3f, 0xff, 0xca, 0xc7, 0xa3, 0x49, 0xd5, 0xb4, 0x9f, 0xfc, 0x0a, + 0x00, 0x00, 0xff, 0xff, 0xcc, 0x06, 0x5f, 0x9c, 0x54, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/result_set.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/result_set.pb.go new file mode 100644 index 0000000..1ea9bcd --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/result_set.pb.go @@ -0,0 +1,312 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/v1/result_set.proto +// DO NOT EDIT! + +package spanner + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Results from [Read][google.spanner.v1.Spanner.Read] or +// [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. +type ResultSet struct { + // Metadata about the result set, such as row type information. + Metadata *ResultSetMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"` + // Each element in `rows` is a row whose format is defined by + // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element + // in each row matches the ith field in + // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are + // encoded based on type as described + // [here][google.spanner.v1.TypeCode]. + Rows []*google_protobuf1.ListValue `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"` + // Query plan and execution statistics for the query that produced this + // result set. These can be requested by setting + // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + Stats *ResultSetStats `protobuf:"bytes,3,opt,name=stats" json:"stats,omitempty"` +} + +func (m *ResultSet) Reset() { *m = ResultSet{} } +func (m *ResultSet) String() string { return proto.CompactTextString(m) } +func (*ResultSet) ProtoMessage() {} +func (*ResultSet) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *ResultSet) GetMetadata() *ResultSetMetadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *ResultSet) GetRows() []*google_protobuf1.ListValue { + if m != nil { + return m.Rows + } + return nil +} + +func (m *ResultSet) GetStats() *ResultSetStats { + if m != nil { + return m.Stats + } + return nil +} + +// Partial results from a streaming read or SQL query. Streaming reads and +// SQL queries better tolerate large result sets, large rows, and large +// values, but are a little trickier to consume. +type PartialResultSet struct { + // Metadata about the result set, such as row type information. + // Only present in the first response. + Metadata *ResultSetMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"` + // A streamed result set consists of a stream of values, which might + // be split into many `PartialResultSet` messages to accommodate + // large rows and/or large values. Every N complete values defines a + // row, where N is equal to the number of entries in + // [metadata.row_type.fields][google.spanner.v1.StructType.fields]. + // + // Most values are encoded based on type as described + // [here][google.spanner.v1.TypeCode]. + // + // It is possible that the last value in values is "chunked", + // meaning that the rest of the value is sent in subsequent + // `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] + // field. Two or more chunked values can be merged to form a + // complete value as follows: + // + // * `bool/number/null`: cannot be chunked + // * `string`: concatenate the strings + // * `list`: concatenate the lists. If the last element in a list is a + // `string`, `list`, or `object`, merge it with the first element in + // the next list by applying these rules recursively. + // * `object`: concatenate the (field name, field value) pairs. If a + // field name is duplicated, then apply these rules recursively + // to merge the field values. + // + // Some examples of merging: + // + // # Strings are concatenated. + // "foo", "bar" => "foobar" + // + // # Lists of non-strings are concatenated. + // [2, 3], [4] => [2, 3, 4] + // + // # Lists are concatenated, but the last and first elements are merged + // # because they are strings. + // ["a", "b"], ["c", "d"] => ["a", "bc", "d"] + // + // # Lists are concatenated, but the last and first elements are merged + // # because they are lists. Recursively, the last and first elements + // # of the inner lists are merged because they are strings. + // ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] + // + // # Non-overlapping object fields are combined. + // {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} + // + // # Overlapping object fields are merged. + // {"a": "1"}, {"a": "2"} => {"a": "12"} + // + // # Examples of merging objects containing lists of strings. + // {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} + // + // For a more complete example, suppose a streaming SQL query is + // yielding a result set whose rows contain a single string + // field. The following `PartialResultSet`s might be yielded: + // + // { + // "metadata": { ... } + // "values": ["Hello", "W"] + // "chunked_value": true + // "resume_token": "Af65..." + // } + // { + // "values": ["orl"] + // "chunked_value": true + // "resume_token": "Bqp2..." + // } + // { + // "values": ["d"] + // "resume_token": "Zx1B..." + // } + // + // This sequence of `PartialResultSet`s encodes two rows, one + // containing the field value `"Hello"`, and a second containing the + // field value `"World" = "W" + "orl" + "d"`. + Values []*google_protobuf1.Value `protobuf:"bytes,2,rep,name=values" json:"values,omitempty"` + // If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must + // be combined with more values from subsequent `PartialResultSet`s + // to obtain a complete field value. + ChunkedValue bool `protobuf:"varint,3,opt,name=chunked_value,json=chunkedValue" json:"chunked_value,omitempty"` + // Streaming calls might be interrupted for a variety of reasons, such + // as TCP connection loss. If this occurs, the stream of results can + // be resumed by re-sending the original request and including + // `resume_token`. Note that executing any other transaction in the + // same session invalidates the token. + ResumeToken []byte `protobuf:"bytes,4,opt,name=resume_token,json=resumeToken,proto3" json:"resume_token,omitempty"` + // Query plan and execution statistics for the query that produced this + // streaming result set. These can be requested by setting + // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent + // only once with the last response in the stream. + Stats *ResultSetStats `protobuf:"bytes,5,opt,name=stats" json:"stats,omitempty"` +} + +func (m *PartialResultSet) Reset() { *m = PartialResultSet{} } +func (m *PartialResultSet) String() string { return proto.CompactTextString(m) } +func (*PartialResultSet) ProtoMessage() {} +func (*PartialResultSet) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *PartialResultSet) GetMetadata() *ResultSetMetadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *PartialResultSet) GetValues() []*google_protobuf1.Value { + if m != nil { + return m.Values + } + return nil +} + +func (m *PartialResultSet) GetChunkedValue() bool { + if m != nil { + return m.ChunkedValue + } + return false +} + +func (m *PartialResultSet) GetResumeToken() []byte { + if m != nil { + return m.ResumeToken + } + return nil +} + +func (m *PartialResultSet) GetStats() *ResultSetStats { + if m != nil { + return m.Stats + } + return nil +} + +// Metadata about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet]. +type ResultSetMetadata struct { + // Indicates the field names and types for the rows in the result + // set. For example, a SQL query like `"SELECT UserId, UserName FROM + // Users"` could return a `row_type` value like: + // + // "fields": [ + // { "name": "UserId", "type": { "code": "INT64" } }, + // { "name": "UserName", "type": { "code": "STRING" } }, + // ] + RowType *StructType `protobuf:"bytes,1,opt,name=row_type,json=rowType" json:"row_type,omitempty"` + // If the read or SQL query began a transaction as a side-effect, the + // information about the new transaction is yielded here. + Transaction *Transaction `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` +} + +func (m *ResultSetMetadata) Reset() { *m = ResultSetMetadata{} } +func (m *ResultSetMetadata) String() string { return proto.CompactTextString(m) } +func (*ResultSetMetadata) ProtoMessage() {} +func (*ResultSetMetadata) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } + +func (m *ResultSetMetadata) GetRowType() *StructType { + if m != nil { + return m.RowType + } + return nil +} + +func (m *ResultSetMetadata) GetTransaction() *Transaction { + if m != nil { + return m.Transaction + } + return nil +} + +// Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet]. +type ResultSetStats struct { + // [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result. + QueryPlan *QueryPlan `protobuf:"bytes,1,opt,name=query_plan,json=queryPlan" json:"query_plan,omitempty"` + // Aggregated statistics from the execution of the query. Only present when + // the query is profiled. For example, a query could return the statistics as + // follows: + // + // { + // "rows_returned": "3", + // "elapsed_time": "1.22 secs", + // "cpu_time": "1.19 secs" + // } + QueryStats *google_protobuf1.Struct `protobuf:"bytes,2,opt,name=query_stats,json=queryStats" json:"query_stats,omitempty"` +} + +func (m *ResultSetStats) Reset() { *m = ResultSetStats{} } +func (m *ResultSetStats) String() string { return proto.CompactTextString(m) } +func (*ResultSetStats) ProtoMessage() {} +func (*ResultSetStats) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{3} } + +func (m *ResultSetStats) GetQueryPlan() *QueryPlan { + if m != nil { + return m.QueryPlan + } + return nil +} + +func (m *ResultSetStats) GetQueryStats() *google_protobuf1.Struct { + if m != nil { + return m.QueryStats + } + return nil +} + +func init() { + proto.RegisterType((*ResultSet)(nil), "google.spanner.v1.ResultSet") + proto.RegisterType((*PartialResultSet)(nil), "google.spanner.v1.PartialResultSet") + proto.RegisterType((*ResultSetMetadata)(nil), "google.spanner.v1.ResultSetMetadata") + proto.RegisterType((*ResultSetStats)(nil), "google.spanner.v1.ResultSetStats") +} + +func init() { proto.RegisterFile("google/spanner/v1/result_set.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 482 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xcb, 0x6e, 0x13, 0x31, + 0x14, 0x86, 0x35, 0xe9, 0x85, 0xd4, 0x13, 0x10, 0xb5, 0x04, 0x1d, 0x45, 0x05, 0xa5, 0x29, 0x8b, + 0xac, 0x3c, 0x4a, 0x59, 0x10, 0xa9, 0x9b, 0xaa, 0x2c, 0xd8, 0x80, 0x14, 0x9c, 0xa8, 0x0b, 0x36, + 0xa3, 0xd3, 0xc4, 0x0c, 0xa3, 0x3a, 0xf6, 0xd4, 0xf6, 0x24, 0xca, 0x82, 0x25, 0x62, 0xc9, 0x7b, + 0xf0, 0x00, 0x3c, 0x1f, 0xf2, 0x25, 0x17, 0x98, 0x08, 0x09, 0xa9, 0x3b, 0xc7, 0xfe, 0xfe, 0xf3, + 0x9f, 0xff, 0xcc, 0x09, 0xea, 0xe6, 0x52, 0xe6, 0x9c, 0xa5, 0xba, 0x04, 0x21, 0x98, 0x4a, 0xe7, + 0xfd, 0x54, 0x31, 0x5d, 0x71, 0x93, 0x69, 0x66, 0x48, 0xa9, 0xa4, 0x91, 0xf8, 0xd8, 0x33, 0x24, + 0x30, 0x64, 0xde, 0x6f, 0x9f, 0x06, 0x19, 0x94, 0x45, 0x0a, 0x42, 0x48, 0x03, 0xa6, 0x90, 0x42, + 0x7b, 0xc1, 0xfa, 0xd5, 0xfd, 0xba, 0xad, 0x3e, 0xa7, 0xda, 0xa8, 0x6a, 0x12, 0xca, 0xb5, 0x77, + 0x58, 0xde, 0x57, 0x4c, 0x2d, 0xb3, 0x92, 0x83, 0x08, 0xcc, 0x79, 0x9d, 0x31, 0x0a, 0x84, 0x86, + 0x89, 0xf5, 0xf9, 0xcb, 0x66, 0x1b, 0x5a, 0x96, 0xcc, 0xbf, 0x76, 0x7f, 0x45, 0xe8, 0x88, 0xba, + 0x28, 0x23, 0x66, 0xf0, 0x15, 0x6a, 0xce, 0x98, 0x81, 0x29, 0x18, 0x48, 0xa2, 0x4e, 0xd4, 0x8b, + 0x2f, 0x5e, 0x91, 0x5a, 0x2c, 0xb2, 0xe6, 0x3f, 0x04, 0x96, 0xae, 0x55, 0x98, 0xa0, 0x7d, 0x25, + 0x17, 0x3a, 0x69, 0x74, 0xf6, 0x7a, 0xf1, 0x45, 0x7b, 0xa5, 0x5e, 0x65, 0x24, 0xef, 0x0b, 0x6d, + 0x6e, 0x80, 0x57, 0x8c, 0x3a, 0x0e, 0xbf, 0x41, 0x07, 0xda, 0x80, 0xd1, 0xc9, 0x9e, 0xb3, 0x3b, + 0xfb, 0x97, 0xdd, 0xc8, 0x82, 0xd4, 0xf3, 0xdd, 0x6f, 0x0d, 0xf4, 0x74, 0x08, 0xca, 0x14, 0xc0, + 0x1f, 0xb6, 0xff, 0xc3, 0xb9, 0x6d, 0x6f, 0x95, 0xe0, 0x79, 0x2d, 0x81, 0xef, 0x3e, 0x50, 0xf8, + 0x1c, 0x3d, 0x9e, 0x7c, 0xa9, 0xc4, 0x1d, 0x9b, 0x66, 0xee, 0xc6, 0xe5, 0x68, 0xd2, 0x56, 0xb8, + 0x74, 0x30, 0x3e, 0x43, 0x2d, 0xbb, 0x2e, 0x33, 0x96, 0x19, 0x79, 0xc7, 0x44, 0xb2, 0xdf, 0x89, + 0x7a, 0x2d, 0x1a, 0xfb, 0xbb, 0xb1, 0xbd, 0xda, 0xcc, 0xe1, 0xe0, 0x3f, 0xe7, 0xf0, 0x23, 0x42, + 0xc7, 0xb5, 0x40, 0x78, 0x80, 0x9a, 0x4a, 0x2e, 0x32, 0xfb, 0xa1, 0xc3, 0x20, 0x5e, 0xec, 0xa8, + 0x38, 0x72, 0x0b, 0x37, 0x5e, 0x96, 0x8c, 0x3e, 0x52, 0x72, 0x61, 0x0f, 0xf8, 0x0a, 0xc5, 0x5b, + 0x3b, 0x94, 0x34, 0x9c, 0xf8, 0xe5, 0x0e, 0xf1, 0x78, 0x43, 0xd1, 0x6d, 0x49, 0xf7, 0x7b, 0x84, + 0x9e, 0xfc, 0xd9, 0x2b, 0xbe, 0x44, 0x68, 0xb3, 0xbc, 0xa1, 0xa1, 0xd3, 0x1d, 0x35, 0x3f, 0x5a, + 0x68, 0xc8, 0x41, 0xd0, 0xa3, 0xfb, 0xd5, 0x11, 0x0f, 0x50, 0xec, 0xc5, 0x7e, 0x40, 0xbe, 0xa3, + 0x93, 0xda, 0x77, 0xf1, 0x61, 0xa8, 0x37, 0x72, 0xb6, 0xd7, 0x5f, 0xd1, 0xb3, 0x89, 0x9c, 0xd5, + 0x7d, 0xae, 0x37, 0xfd, 0x0d, 0xad, 0x7c, 0x18, 0x7d, 0x1a, 0x04, 0x28, 0x97, 0x1c, 0x44, 0x4e, + 0xa4, 0xca, 0xd3, 0x9c, 0x09, 0x57, 0x3c, 0xf5, 0x4f, 0x50, 0x16, 0x7a, 0xeb, 0x4f, 0x74, 0x19, + 0x8e, 0x3f, 0x1b, 0x27, 0xef, 0xbc, 0xf4, 0x2d, 0x97, 0xd5, 0x94, 0x8c, 0x82, 0xcb, 0x4d, 0xff, + 0xf6, 0xd0, 0xc9, 0x5f, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x15, 0x1f, 0xa6, 0x3e, 0x04, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/spanner.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/spanner.pb.go new file mode 100644 index 0000000..d6e3bd6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/spanner.pb.go @@ -0,0 +1,1216 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/v1/spanner.proto +// DO NOT EDIT! + +package spanner + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Mode in which the query must be processed. +type ExecuteSqlRequest_QueryMode int32 + +const ( + // The default mode where only the query result, without any information + // about the query plan is returned. + ExecuteSqlRequest_NORMAL ExecuteSqlRequest_QueryMode = 0 + // This mode returns only the query plan, without any result rows or + // execution statistics information. + ExecuteSqlRequest_PLAN ExecuteSqlRequest_QueryMode = 1 + // This mode returns both the query plan and the execution statistics along + // with the result rows. + ExecuteSqlRequest_PROFILE ExecuteSqlRequest_QueryMode = 2 +) + +var ExecuteSqlRequest_QueryMode_name = map[int32]string{ + 0: "NORMAL", + 1: "PLAN", + 2: "PROFILE", +} +var ExecuteSqlRequest_QueryMode_value = map[string]int32{ + "NORMAL": 0, + "PLAN": 1, + "PROFILE": 2, +} + +func (x ExecuteSqlRequest_QueryMode) String() string { + return proto.EnumName(ExecuteSqlRequest_QueryMode_name, int32(x)) +} +func (ExecuteSqlRequest_QueryMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor4, []int{4, 0} +} + +// The request for [CreateSession][google.spanner.v1.Spanner.CreateSession]. +type CreateSessionRequest struct { + // Required. The database in which the new session is created. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` +} + +func (m *CreateSessionRequest) Reset() { *m = CreateSessionRequest{} } +func (m *CreateSessionRequest) String() string { return proto.CompactTextString(m) } +func (*CreateSessionRequest) ProtoMessage() {} +func (*CreateSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *CreateSessionRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +// A session in the Cloud Spanner API. +type Session struct { + // Required. The name of the session. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *Session) Reset() { *m = Session{} } +func (m *Session) String() string { return proto.CompactTextString(m) } +func (*Session) ProtoMessage() {} +func (*Session) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +func (m *Session) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request for [GetSession][google.spanner.v1.Spanner.GetSession]. +type GetSessionRequest struct { + // Required. The name of the session to retrieve. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetSessionRequest) Reset() { *m = GetSessionRequest{} } +func (m *GetSessionRequest) String() string { return proto.CompactTextString(m) } +func (*GetSessionRequest) ProtoMessage() {} +func (*GetSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } + +func (m *GetSessionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request for [DeleteSession][google.spanner.v1.Spanner.DeleteSession]. +type DeleteSessionRequest struct { + // Required. The name of the session to delete. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteSessionRequest) Reset() { *m = DeleteSessionRequest{} } +func (m *DeleteSessionRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSessionRequest) ProtoMessage() {} +func (*DeleteSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } + +func (m *DeleteSessionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request for [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and +// [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql]. +type ExecuteSqlRequest struct { + // Required. The session in which the SQL query should be performed. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // The transaction to use. If none is provided, the default is a + // temporary read-only transaction with strong concurrency. + Transaction *TransactionSelector `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` + // Required. The SQL query string. + Sql string `protobuf:"bytes,3,opt,name=sql" json:"sql,omitempty"` + // The SQL query string can contain parameter placeholders. A parameter + // placeholder consists of `'@'` followed by the parameter + // name. Parameter names consist of any combination of letters, + // numbers, and underscores. + // + // Parameters can appear anywhere that a literal value is expected. The same + // parameter name can be used more than once, for example: + // `"WHERE id > @msg_id AND id < @msg_id + 100"` + // + // It is an error to execute an SQL query with unbound parameters. + // + // Parameter values are specified using `params`, which is a JSON + // object whose keys are parameter names, and whose values are the + // corresponding parameter values. + Params *google_protobuf1.Struct `protobuf:"bytes,4,opt,name=params" json:"params,omitempty"` + // It is not always possible for Cloud Spanner to infer the right SQL type + // from a JSON value. For example, values of type `BYTES` and values + // of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + // + // In these cases, `param_types` can be used to specify the exact + // SQL type for some or all of the SQL query parameters. See the + // definition of [Type][google.spanner.v1.Type] for more information + // about SQL types. + ParamTypes map[string]*Type `protobuf:"bytes,5,rep,name=param_types,json=paramTypes" json:"param_types,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // If this request is resuming a previously interrupted SQL query + // execution, `resume_token` should be copied from the last + // [PartialResultSet][google.spanner.v1.PartialResultSet] yielded before the interruption. Doing this + // enables the new SQL query execution to resume where the last one left + // off. The rest of the request parameters must exactly match the + // request that yielded this token. + ResumeToken []byte `protobuf:"bytes,6,opt,name=resume_token,json=resumeToken,proto3" json:"resume_token,omitempty"` + // Used to control the amount of debugging information returned in + // [ResultSetStats][google.spanner.v1.ResultSetStats]. + QueryMode ExecuteSqlRequest_QueryMode `protobuf:"varint,7,opt,name=query_mode,json=queryMode,enum=google.spanner.v1.ExecuteSqlRequest_QueryMode" json:"query_mode,omitempty"` +} + +func (m *ExecuteSqlRequest) Reset() { *m = ExecuteSqlRequest{} } +func (m *ExecuteSqlRequest) String() string { return proto.CompactTextString(m) } +func (*ExecuteSqlRequest) ProtoMessage() {} +func (*ExecuteSqlRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } + +func (m *ExecuteSqlRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *ExecuteSqlRequest) GetTransaction() *TransactionSelector { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *ExecuteSqlRequest) GetSql() string { + if m != nil { + return m.Sql + } + return "" +} + +func (m *ExecuteSqlRequest) GetParams() *google_protobuf1.Struct { + if m != nil { + return m.Params + } + return nil +} + +func (m *ExecuteSqlRequest) GetParamTypes() map[string]*Type { + if m != nil { + return m.ParamTypes + } + return nil +} + +func (m *ExecuteSqlRequest) GetResumeToken() []byte { + if m != nil { + return m.ResumeToken + } + return nil +} + +func (m *ExecuteSqlRequest) GetQueryMode() ExecuteSqlRequest_QueryMode { + if m != nil { + return m.QueryMode + } + return ExecuteSqlRequest_NORMAL +} + +// The request for [Read][google.spanner.v1.Spanner.Read] and +// [StreamingRead][google.spanner.v1.Spanner.StreamingRead]. +type ReadRequest struct { + // Required. The session in which the read should be performed. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // The transaction to use. If none is provided, the default is a + // temporary read-only transaction with strong concurrency. + Transaction *TransactionSelector `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` + // Required. The name of the table in the database to be read. + Table string `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"` + // If non-empty, the name of an index on [table][google.spanner.v1.ReadRequest.table]. This index is + // used instead of the table primary key when interpreting [key_set][google.spanner.v1.ReadRequest.key_set] + // and sorting result rows. See [key_set][google.spanner.v1.ReadRequest.key_set] for further information. + Index string `protobuf:"bytes,4,opt,name=index" json:"index,omitempty"` + // The columns of [table][google.spanner.v1.ReadRequest.table] to be returned for each row matching + // this request. + Columns []string `protobuf:"bytes,5,rep,name=columns" json:"columns,omitempty"` + // Required. `key_set` identifies the rows to be yielded. `key_set` names the + // primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] + // is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names + // index keys in [index][google.spanner.v1.ReadRequest.index]. + // + // Rows are yielded in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) + // or index key order (if [index][google.spanner.v1.ReadRequest.index] is non-empty). + // + // It is not an error for the `key_set` to name rows that do not + // exist in the database. Read yields nothing for nonexistent rows. + KeySet *KeySet `protobuf:"bytes,6,opt,name=key_set,json=keySet" json:"key_set,omitempty"` + // If greater than zero, only the first `limit` rows are yielded. If `limit` + // is zero, the default is no limit. + Limit int64 `protobuf:"varint,8,opt,name=limit" json:"limit,omitempty"` + // If this request is resuming a previously interrupted read, + // `resume_token` should be copied from the last + // [PartialResultSet][google.spanner.v1.PartialResultSet] yielded before the interruption. Doing this + // enables the new read to resume where the last read left off. The + // rest of the request parameters must exactly match the request + // that yielded this token. + ResumeToken []byte `protobuf:"bytes,9,opt,name=resume_token,json=resumeToken,proto3" json:"resume_token,omitempty"` +} + +func (m *ReadRequest) Reset() { *m = ReadRequest{} } +func (m *ReadRequest) String() string { return proto.CompactTextString(m) } +func (*ReadRequest) ProtoMessage() {} +func (*ReadRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } + +func (m *ReadRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *ReadRequest) GetTransaction() *TransactionSelector { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *ReadRequest) GetTable() string { + if m != nil { + return m.Table + } + return "" +} + +func (m *ReadRequest) GetIndex() string { + if m != nil { + return m.Index + } + return "" +} + +func (m *ReadRequest) GetColumns() []string { + if m != nil { + return m.Columns + } + return nil +} + +func (m *ReadRequest) GetKeySet() *KeySet { + if m != nil { + return m.KeySet + } + return nil +} + +func (m *ReadRequest) GetLimit() int64 { + if m != nil { + return m.Limit + } + return 0 +} + +func (m *ReadRequest) GetResumeToken() []byte { + if m != nil { + return m.ResumeToken + } + return nil +} + +// The request for [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction]. +type BeginTransactionRequest struct { + // Required. The session in which the transaction runs. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // Required. Options for the new transaction. + Options *TransactionOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` +} + +func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } +func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } +func (*BeginTransactionRequest) ProtoMessage() {} +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } + +func (m *BeginTransactionRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *BeginTransactionRequest) GetOptions() *TransactionOptions { + if m != nil { + return m.Options + } + return nil +} + +// The request for [Commit][google.spanner.v1.Spanner.Commit]. +type CommitRequest struct { + // Required. The session in which the transaction to be committed is running. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // Required. The transaction in which to commit. + // + // Types that are valid to be assigned to Transaction: + // *CommitRequest_TransactionId + // *CommitRequest_SingleUseTransaction + Transaction isCommitRequest_Transaction `protobuf_oneof:"transaction"` + // The mutations to be executed when this transaction commits. All + // mutations are applied atomically, in the order they appear in + // this list. + Mutations []*Mutation `protobuf:"bytes,4,rep,name=mutations" json:"mutations,omitempty"` +} + +func (m *CommitRequest) Reset() { *m = CommitRequest{} } +func (m *CommitRequest) String() string { return proto.CompactTextString(m) } +func (*CommitRequest) ProtoMessage() {} +func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} } + +type isCommitRequest_Transaction interface { + isCommitRequest_Transaction() +} + +type CommitRequest_TransactionId struct { + TransactionId []byte `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3,oneof"` +} +type CommitRequest_SingleUseTransaction struct { + SingleUseTransaction *TransactionOptions `protobuf:"bytes,3,opt,name=single_use_transaction,json=singleUseTransaction,oneof"` +} + +func (*CommitRequest_TransactionId) isCommitRequest_Transaction() {} +func (*CommitRequest_SingleUseTransaction) isCommitRequest_Transaction() {} + +func (m *CommitRequest) GetTransaction() isCommitRequest_Transaction { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *CommitRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *CommitRequest) GetTransactionId() []byte { + if x, ok := m.GetTransaction().(*CommitRequest_TransactionId); ok { + return x.TransactionId + } + return nil +} + +func (m *CommitRequest) GetSingleUseTransaction() *TransactionOptions { + if x, ok := m.GetTransaction().(*CommitRequest_SingleUseTransaction); ok { + return x.SingleUseTransaction + } + return nil +} + +func (m *CommitRequest) GetMutations() []*Mutation { + if m != nil { + return m.Mutations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CommitRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CommitRequest_OneofMarshaler, _CommitRequest_OneofUnmarshaler, _CommitRequest_OneofSizer, []interface{}{ + (*CommitRequest_TransactionId)(nil), + (*CommitRequest_SingleUseTransaction)(nil), + } +} + +func _CommitRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CommitRequest) + // transaction + switch x := m.Transaction.(type) { + case *CommitRequest_TransactionId: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.TransactionId) + case *CommitRequest_SingleUseTransaction: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SingleUseTransaction); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CommitRequest.Transaction has unexpected type %T", x) + } + return nil +} + +func _CommitRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CommitRequest) + switch tag { + case 2: // transaction.transaction_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Transaction = &CommitRequest_TransactionId{x} + return true, err + case 3: // transaction.single_use_transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions) + err := b.DecodeMessage(msg) + m.Transaction = &CommitRequest_SingleUseTransaction{msg} + return true, err + default: + return false, nil + } +} + +func _CommitRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CommitRequest) + // transaction + switch x := m.Transaction.(type) { + case *CommitRequest_TransactionId: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.TransactionId))) + n += len(x.TransactionId) + case *CommitRequest_SingleUseTransaction: + s := proto.Size(x.SingleUseTransaction) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response for [Commit][google.spanner.v1.Spanner.Commit]. +type CommitResponse struct { + // The Cloud Spanner timestamp at which the transaction committed. + CommitTimestamp *google_protobuf3.Timestamp `protobuf:"bytes,1,opt,name=commit_timestamp,json=commitTimestamp" json:"commit_timestamp,omitempty"` +} + +func (m *CommitResponse) Reset() { *m = CommitResponse{} } +func (m *CommitResponse) String() string { return proto.CompactTextString(m) } +func (*CommitResponse) ProtoMessage() {} +func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{8} } + +func (m *CommitResponse) GetCommitTimestamp() *google_protobuf3.Timestamp { + if m != nil { + return m.CommitTimestamp + } + return nil +} + +// The request for [Rollback][google.spanner.v1.Spanner.Rollback]. +type RollbackRequest struct { + // Required. The session in which the transaction to roll back is running. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // Required. The transaction to roll back. + TransactionId []byte `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` +} + +func (m *RollbackRequest) Reset() { *m = RollbackRequest{} } +func (m *RollbackRequest) String() string { return proto.CompactTextString(m) } +func (*RollbackRequest) ProtoMessage() {} +func (*RollbackRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{9} } + +func (m *RollbackRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *RollbackRequest) GetTransactionId() []byte { + if m != nil { + return m.TransactionId + } + return nil +} + +func init() { + proto.RegisterType((*CreateSessionRequest)(nil), "google.spanner.v1.CreateSessionRequest") + proto.RegisterType((*Session)(nil), "google.spanner.v1.Session") + proto.RegisterType((*GetSessionRequest)(nil), "google.spanner.v1.GetSessionRequest") + proto.RegisterType((*DeleteSessionRequest)(nil), "google.spanner.v1.DeleteSessionRequest") + proto.RegisterType((*ExecuteSqlRequest)(nil), "google.spanner.v1.ExecuteSqlRequest") + proto.RegisterType((*ReadRequest)(nil), "google.spanner.v1.ReadRequest") + proto.RegisterType((*BeginTransactionRequest)(nil), "google.spanner.v1.BeginTransactionRequest") + proto.RegisterType((*CommitRequest)(nil), "google.spanner.v1.CommitRequest") + proto.RegisterType((*CommitResponse)(nil), "google.spanner.v1.CommitResponse") + proto.RegisterType((*RollbackRequest)(nil), "google.spanner.v1.RollbackRequest") + proto.RegisterEnum("google.spanner.v1.ExecuteSqlRequest_QueryMode", ExecuteSqlRequest_QueryMode_name, ExecuteSqlRequest_QueryMode_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Spanner service + +type SpannerClient interface { + // Creates a new session. A session can be used to perform + // transactions that read and/or modify data in a Cloud Spanner database. + // Sessions are meant to be reused for many consecutive + // transactions. + // + // Sessions can only execute one transaction at a time. To execute + // multiple concurrent read-write/write-only transactions, create + // multiple sessions. Note that standalone reads and queries use a + // transaction internally, and count toward the one transaction + // limit. + // + // Cloud Spanner limits the number of sessions that can exist at any given + // time; thus, it is a good idea to delete idle and/or unneeded sessions. + // Aside from explicit deletes, Cloud Spanner can delete sessions for which no + // operations are sent for more than an hour. If a session is deleted, + // requests to it return `NOT_FOUND`. + // + // Idle sessions can be kept alive by sending a trivial SQL query + // periodically, e.g., `"SELECT 1"`. + CreateSession(ctx context.Context, in *CreateSessionRequest, opts ...grpc.CallOption) (*Session, error) + // Gets a session. Returns `NOT_FOUND` if the session does not exist. + // This is mainly useful for determining whether a session is still + // alive. + GetSession(ctx context.Context, in *GetSessionRequest, opts ...grpc.CallOption) (*Session, error) + // Ends a session, releasing server resources associated with it. + DeleteSession(ctx context.Context, in *DeleteSessionRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Executes an SQL query, returning all rows in a single reply. This + // method cannot be used to return a result set larger than 10 MiB; + // if the query yields more data than that, the query fails with + // a `FAILED_PRECONDITION` error. + // + // Queries inside read-write transactions might return `ABORTED`. If + // this occurs, the application should restart the transaction from + // the beginning. See [Transaction][google.spanner.v1.Transaction] for more details. + // + // Larger result sets can be fetched in streaming fashion by calling + // [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead. + ExecuteSql(ctx context.Context, in *ExecuteSqlRequest, opts ...grpc.CallOption) (*ResultSet, error) + // Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result + // set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there + // is no limit on the size of the returned result set. However, no + // individual row in the result set can exceed 100 MiB, and no + // column value can exceed 10 MiB. + ExecuteStreamingSql(ctx context.Context, in *ExecuteSqlRequest, opts ...grpc.CallOption) (Spanner_ExecuteStreamingSqlClient, error) + // Reads rows from the database using key lookups and scans, as a + // simple key/value style alternative to + // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method cannot be used to + // return a result set larger than 10 MiB; if the read matches more + // data than that, the read fails with a `FAILED_PRECONDITION` + // error. + // + // Reads inside read-write transactions might return `ABORTED`. If + // this occurs, the application should restart the transaction from + // the beginning. See [Transaction][google.spanner.v1.Transaction] for more details. + // + // Larger result sets can be yielded in streaming fashion by calling + // [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead. + Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (*ResultSet, error) + // Like [Read][google.spanner.v1.Spanner.Read], except returns the result set as a + // stream. Unlike [Read][google.spanner.v1.Spanner.Read], there is no limit on the + // size of the returned result set. However, no individual row in + // the result set can exceed 100 MiB, and no column value can exceed + // 10 MiB. + StreamingRead(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (Spanner_StreamingReadClient, error) + // Begins a new transaction. This step can often be skipped: + // [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and + // [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a + // side-effect. + BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*Transaction, error) + // Commits a transaction. The request includes the mutations to be + // applied to rows in the database. + // + // `Commit` might return an `ABORTED` error. This can occur at any time; + // commonly, the cause is conflicts with concurrent + // transactions. However, it can also happen for a variety of other + // reasons. If `Commit` returns `ABORTED`, the caller should re-attempt + // the transaction from the beginning, re-using the same session. + Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) + // Rolls back a transaction, releasing any locks it holds. It is a good + // idea to call this for any transaction that includes one or more + // [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and + // ultimately decides not to commit. + // + // `Rollback` returns `OK` if it successfully aborts the transaction, the + // transaction was already aborted, or the transaction is not + // found. `Rollback` never returns `ABORTED`. + Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) +} + +type spannerClient struct { + cc *grpc.ClientConn +} + +func NewSpannerClient(cc *grpc.ClientConn) SpannerClient { + return &spannerClient{cc} +} + +func (c *spannerClient) CreateSession(ctx context.Context, in *CreateSessionRequest, opts ...grpc.CallOption) (*Session, error) { + out := new(Session) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/CreateSession", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerClient) GetSession(ctx context.Context, in *GetSessionRequest, opts ...grpc.CallOption) (*Session, error) { + out := new(Session) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/GetSession", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerClient) DeleteSession(ctx context.Context, in *DeleteSessionRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/DeleteSession", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerClient) ExecuteSql(ctx context.Context, in *ExecuteSqlRequest, opts ...grpc.CallOption) (*ResultSet, error) { + out := new(ResultSet) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/ExecuteSql", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerClient) ExecuteStreamingSql(ctx context.Context, in *ExecuteSqlRequest, opts ...grpc.CallOption) (Spanner_ExecuteStreamingSqlClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Spanner_serviceDesc.Streams[0], c.cc, "/google.spanner.v1.Spanner/ExecuteStreamingSql", opts...) + if err != nil { + return nil, err + } + x := &spannerExecuteStreamingSqlClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Spanner_ExecuteStreamingSqlClient interface { + Recv() (*PartialResultSet, error) + grpc.ClientStream +} + +type spannerExecuteStreamingSqlClient struct { + grpc.ClientStream +} + +func (x *spannerExecuteStreamingSqlClient) Recv() (*PartialResultSet, error) { + m := new(PartialResultSet) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *spannerClient) Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (*ResultSet, error) { + out := new(ResultSet) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/Read", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerClient) StreamingRead(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (Spanner_StreamingReadClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Spanner_serviceDesc.Streams[1], c.cc, "/google.spanner.v1.Spanner/StreamingRead", opts...) + if err != nil { + return nil, err + } + x := &spannerStreamingReadClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Spanner_StreamingReadClient interface { + Recv() (*PartialResultSet, error) + grpc.ClientStream +} + +type spannerStreamingReadClient struct { + grpc.ClientStream +} + +func (x *spannerStreamingReadClient) Recv() (*PartialResultSet, error) { + m := new(PartialResultSet) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *spannerClient) BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*Transaction, error) { + out := new(Transaction) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/BeginTransaction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerClient) Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) { + out := new(CommitResponse) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/Commit", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerClient) Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/Rollback", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Spanner service + +type SpannerServer interface { + // Creates a new session. A session can be used to perform + // transactions that read and/or modify data in a Cloud Spanner database. + // Sessions are meant to be reused for many consecutive + // transactions. + // + // Sessions can only execute one transaction at a time. To execute + // multiple concurrent read-write/write-only transactions, create + // multiple sessions. Note that standalone reads and queries use a + // transaction internally, and count toward the one transaction + // limit. + // + // Cloud Spanner limits the number of sessions that can exist at any given + // time; thus, it is a good idea to delete idle and/or unneeded sessions. + // Aside from explicit deletes, Cloud Spanner can delete sessions for which no + // operations are sent for more than an hour. If a session is deleted, + // requests to it return `NOT_FOUND`. + // + // Idle sessions can be kept alive by sending a trivial SQL query + // periodically, e.g., `"SELECT 1"`. + CreateSession(context.Context, *CreateSessionRequest) (*Session, error) + // Gets a session. Returns `NOT_FOUND` if the session does not exist. + // This is mainly useful for determining whether a session is still + // alive. + GetSession(context.Context, *GetSessionRequest) (*Session, error) + // Ends a session, releasing server resources associated with it. + DeleteSession(context.Context, *DeleteSessionRequest) (*google_protobuf4.Empty, error) + // Executes an SQL query, returning all rows in a single reply. This + // method cannot be used to return a result set larger than 10 MiB; + // if the query yields more data than that, the query fails with + // a `FAILED_PRECONDITION` error. + // + // Queries inside read-write transactions might return `ABORTED`. If + // this occurs, the application should restart the transaction from + // the beginning. See [Transaction][google.spanner.v1.Transaction] for more details. + // + // Larger result sets can be fetched in streaming fashion by calling + // [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead. + ExecuteSql(context.Context, *ExecuteSqlRequest) (*ResultSet, error) + // Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result + // set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there + // is no limit on the size of the returned result set. However, no + // individual row in the result set can exceed 100 MiB, and no + // column value can exceed 10 MiB. + ExecuteStreamingSql(*ExecuteSqlRequest, Spanner_ExecuteStreamingSqlServer) error + // Reads rows from the database using key lookups and scans, as a + // simple key/value style alternative to + // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method cannot be used to + // return a result set larger than 10 MiB; if the read matches more + // data than that, the read fails with a `FAILED_PRECONDITION` + // error. + // + // Reads inside read-write transactions might return `ABORTED`. If + // this occurs, the application should restart the transaction from + // the beginning. See [Transaction][google.spanner.v1.Transaction] for more details. + // + // Larger result sets can be yielded in streaming fashion by calling + // [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead. + Read(context.Context, *ReadRequest) (*ResultSet, error) + // Like [Read][google.spanner.v1.Spanner.Read], except returns the result set as a + // stream. Unlike [Read][google.spanner.v1.Spanner.Read], there is no limit on the + // size of the returned result set. However, no individual row in + // the result set can exceed 100 MiB, and no column value can exceed + // 10 MiB. + StreamingRead(*ReadRequest, Spanner_StreamingReadServer) error + // Begins a new transaction. This step can often be skipped: + // [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and + // [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a + // side-effect. + BeginTransaction(context.Context, *BeginTransactionRequest) (*Transaction, error) + // Commits a transaction. The request includes the mutations to be + // applied to rows in the database. + // + // `Commit` might return an `ABORTED` error. This can occur at any time; + // commonly, the cause is conflicts with concurrent + // transactions. However, it can also happen for a variety of other + // reasons. If `Commit` returns `ABORTED`, the caller should re-attempt + // the transaction from the beginning, re-using the same session. + Commit(context.Context, *CommitRequest) (*CommitResponse, error) + // Rolls back a transaction, releasing any locks it holds. It is a good + // idea to call this for any transaction that includes one or more + // [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and + // ultimately decides not to commit. + // + // `Rollback` returns `OK` if it successfully aborts the transaction, the + // transaction was already aborted, or the transaction is not + // found. `Rollback` never returns `ABORTED`. + Rollback(context.Context, *RollbackRequest) (*google_protobuf4.Empty, error) +} + +func RegisterSpannerServer(s *grpc.Server, srv SpannerServer) { + s.RegisterService(&_Spanner_serviceDesc, srv) +} + +func _Spanner_CreateSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).CreateSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/CreateSession", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).CreateSession(ctx, req.(*CreateSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Spanner_GetSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).GetSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/GetSession", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).GetSession(ctx, req.(*GetSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Spanner_DeleteSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).DeleteSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/DeleteSession", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).DeleteSession(ctx, req.(*DeleteSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Spanner_ExecuteSql_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExecuteSqlRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).ExecuteSql(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/ExecuteSql", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).ExecuteSql(ctx, req.(*ExecuteSqlRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Spanner_ExecuteStreamingSql_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ExecuteSqlRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(SpannerServer).ExecuteStreamingSql(m, &spannerExecuteStreamingSqlServer{stream}) +} + +type Spanner_ExecuteStreamingSqlServer interface { + Send(*PartialResultSet) error + grpc.ServerStream +} + +type spannerExecuteStreamingSqlServer struct { + grpc.ServerStream +} + +func (x *spannerExecuteStreamingSqlServer) Send(m *PartialResultSet) error { + return x.ServerStream.SendMsg(m) +} + +func _Spanner_Read_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReadRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).Read(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/Read", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).Read(ctx, req.(*ReadRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Spanner_StreamingRead_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ReadRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(SpannerServer).StreamingRead(m, &spannerStreamingReadServer{stream}) +} + +type Spanner_StreamingReadServer interface { + Send(*PartialResultSet) error + grpc.ServerStream +} + +type spannerStreamingReadServer struct { + grpc.ServerStream +} + +func (x *spannerStreamingReadServer) Send(m *PartialResultSet) error { + return x.ServerStream.SendMsg(m) +} + +func _Spanner_BeginTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BeginTransactionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).BeginTransaction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/BeginTransaction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).BeginTransaction(ctx, req.(*BeginTransactionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Spanner_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CommitRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).Commit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/Commit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).Commit(ctx, req.(*CommitRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Spanner_Rollback_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RollbackRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).Rollback(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/Rollback", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).Rollback(ctx, req.(*RollbackRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Spanner_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.spanner.v1.Spanner", + HandlerType: (*SpannerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateSession", + Handler: _Spanner_CreateSession_Handler, + }, + { + MethodName: "GetSession", + Handler: _Spanner_GetSession_Handler, + }, + { + MethodName: "DeleteSession", + Handler: _Spanner_DeleteSession_Handler, + }, + { + MethodName: "ExecuteSql", + Handler: _Spanner_ExecuteSql_Handler, + }, + { + MethodName: "Read", + Handler: _Spanner_Read_Handler, + }, + { + MethodName: "BeginTransaction", + Handler: _Spanner_BeginTransaction_Handler, + }, + { + MethodName: "Commit", + Handler: _Spanner_Commit_Handler, + }, + { + MethodName: "Rollback", + Handler: _Spanner_Rollback_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ExecuteStreamingSql", + Handler: _Spanner_ExecuteStreamingSql_Handler, + ServerStreams: true, + }, + { + StreamName: "StreamingRead", + Handler: _Spanner_StreamingRead_Handler, + ServerStreams: true, + }, + }, + Metadata: "google/spanner/v1/spanner.proto", +} + +func init() { proto.RegisterFile("google/spanner/v1/spanner.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 1202 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0xcd, 0x6f, 0x1b, 0xc5, + 0x1b, 0xc7, 0xbb, 0x4e, 0x6a, 0xc7, 0x8f, 0x93, 0xd6, 0x9d, 0x5f, 0xda, 0xf8, 0xe7, 0x96, 0xd6, + 0xdd, 0x52, 0x6a, 0x59, 0xc2, 0x4b, 0x0d, 0x87, 0x62, 0x40, 0xb4, 0x6e, 0xdd, 0x36, 0x6a, 0x5e, + 0x9c, 0xb5, 0xdb, 0x4a, 0x95, 0x90, 0x35, 0xb6, 0x1f, 0xcc, 0xe2, 0x7d, 0xcb, 0xce, 0x6c, 0x54, + 0xab, 0xea, 0x85, 0x2b, 0x17, 0x5e, 0x0e, 0x70, 0xe0, 0x06, 0x27, 0xc4, 0x9d, 0x1b, 0xff, 0x04, + 0xff, 0x02, 0x17, 0xfe, 0x06, 0x2e, 0x68, 0x66, 0x77, 0x9d, 0x8d, 0x77, 0x9b, 0xa4, 0x04, 0x71, + 0xca, 0xbc, 0x7c, 0x9f, 0x79, 0x3e, 0xf3, 0x9d, 0xd9, 0x79, 0x1c, 0xb8, 0x32, 0x76, 0x9c, 0xb1, + 0x89, 0x1a, 0x73, 0xa9, 0x6d, 0xa3, 0xa7, 0xed, 0xdd, 0x8c, 0x9a, 0x75, 0xd7, 0x73, 0xb8, 0x43, + 0xce, 0x05, 0x82, 0x7a, 0x34, 0xba, 0x77, 0xb3, 0x7c, 0x29, 0x8c, 0xa1, 0xae, 0xa1, 0x51, 0xdb, + 0x76, 0x38, 0xe5, 0x86, 0x63, 0xb3, 0x20, 0xa0, 0x7c, 0x3e, 0x3e, 0xeb, 0xf3, 0xcf, 0xc2, 0xe1, + 0x8b, 0xe1, 0xb0, 0xec, 0x0d, 0xfc, 0x4f, 0x35, 0xb4, 0x5c, 0x3e, 0x0d, 0x27, 0x2f, 0xcd, 0x4f, + 0x32, 0xee, 0xf9, 0x43, 0x1e, 0xce, 0x5e, 0x99, 0x9f, 0xe5, 0x86, 0x85, 0x8c, 0x53, 0xcb, 0x9d, + 0x0b, 0x8f, 0x6d, 0x62, 0x82, 0xd3, 0x08, 0xa8, 0x92, 0x9c, 0xb5, 0xfc, 0x80, 0x39, 0x54, 0xa8, + 0x49, 0x85, 0x87, 0xcc, 0x37, 0x79, 0x9f, 0x61, 0x04, 0x71, 0x2d, 0xa9, 0xe1, 0x1e, 0xb5, 0x19, + 0x1d, 0xc6, 0x16, 0x4a, 0x01, 0xe1, 0x53, 0x17, 0x83, 0x59, 0xb5, 0x01, 0xab, 0x77, 0x3d, 0xa4, + 0x1c, 0xbb, 0xc8, 0x98, 0xe1, 0xd8, 0x3a, 0xee, 0xfa, 0xc8, 0x38, 0x29, 0xc3, 0xd2, 0x88, 0x72, + 0x3a, 0xa0, 0x0c, 0x4b, 0x4a, 0x45, 0xa9, 0xe6, 0xf5, 0x59, 0x5f, 0x7d, 0x03, 0x72, 0xa1, 0x9a, + 0x10, 0x58, 0xb4, 0xa9, 0x15, 0x49, 0x64, 0x5b, 0xbd, 0x01, 0xe7, 0x1e, 0x20, 0x9f, 0x5b, 0x2f, + 0x4d, 0x58, 0x83, 0xd5, 0x7b, 0x68, 0x62, 0x22, 0x77, 0x9a, 0xf6, 0xcb, 0x45, 0x38, 0xd7, 0x7e, + 0x8e, 0x43, 0x9f, 0x63, 0x77, 0xd7, 0x8c, 0x94, 0x25, 0xc8, 0xb1, 0x20, 0x36, 0x14, 0x47, 0x5d, + 0xf2, 0x10, 0x0a, 0x31, 0x2b, 0x4a, 0x99, 0x8a, 0x52, 0x2d, 0x34, 0xde, 0xaa, 0x27, 0x2e, 0x4e, + 0xbd, 0xb7, 0xaf, 0xea, 0xa2, 0x89, 0x43, 0xee, 0x78, 0x7a, 0x3c, 0x94, 0x14, 0x61, 0x81, 0xed, + 0x9a, 0xa5, 0x05, 0xb9, 0xbe, 0x68, 0x12, 0x0d, 0xb2, 0x2e, 0xf5, 0xa8, 0xc5, 0x4a, 0x8b, 0x72, + 0xd9, 0xb5, 0x68, 0xd9, 0xe8, 0x32, 0xd4, 0xbb, 0xf2, 0xaa, 0xe8, 0xa1, 0x8c, 0x3c, 0x86, 0x82, + 0x6c, 0xf5, 0x85, 0xf1, 0xac, 0x74, 0xba, 0xb2, 0x50, 0x2d, 0x34, 0xde, 0x4b, 0x81, 0x49, 0xec, + 0xb0, 0xde, 0x11, 0x71, 0x3d, 0x11, 0xd6, 0xb6, 0xb9, 0x37, 0xd5, 0xc1, 0x9d, 0x0d, 0x90, 0xab, + 0xb0, 0x2c, 0xae, 0x84, 0x85, 0x7d, 0xee, 0x4c, 0xd0, 0x2e, 0x65, 0x2b, 0x4a, 0x75, 0x59, 0x2f, + 0x04, 0x63, 0x3d, 0x31, 0x44, 0x36, 0x01, 0x76, 0x7d, 0xf4, 0xa6, 0x7d, 0xcb, 0x19, 0x61, 0x29, + 0x57, 0x51, 0xaa, 0x67, 0x1a, 0xf5, 0x63, 0x25, 0xde, 0x11, 0x61, 0x9b, 0xce, 0x08, 0xf5, 0xfc, + 0x6e, 0xd4, 0x2c, 0x3f, 0x81, 0xb3, 0x73, 0x40, 0xc2, 0x9e, 0x09, 0x4e, 0x43, 0xfb, 0x45, 0x93, + 0xbc, 0x0d, 0xa7, 0xf7, 0xa8, 0xe9, 0x63, 0x68, 0xfa, 0x5a, 0x9a, 0xe9, 0x53, 0x17, 0xf5, 0x40, + 0xd5, 0xcc, 0xdc, 0x52, 0xd4, 0x3a, 0xe4, 0x67, 0xf9, 0x08, 0x40, 0x76, 0x6b, 0x5b, 0xdf, 0xbc, + 0xb3, 0x51, 0x3c, 0x45, 0x96, 0x60, 0xb1, 0xb3, 0x71, 0x67, 0xab, 0xa8, 0x90, 0x02, 0xe4, 0x3a, + 0xfa, 0xf6, 0xfd, 0xf5, 0x8d, 0x76, 0x31, 0xa3, 0xfe, 0x94, 0x81, 0x82, 0x8e, 0x74, 0xf4, 0x5f, + 0xde, 0x83, 0x55, 0x38, 0xcd, 0xe9, 0xc0, 0xc4, 0xf0, 0x26, 0x04, 0x1d, 0x31, 0x6a, 0xd8, 0x23, + 0x7c, 0x2e, 0xaf, 0x42, 0x5e, 0x0f, 0x3a, 0x82, 0x67, 0xe8, 0x98, 0xbe, 0x65, 0x07, 0x87, 0x9d, + 0xd7, 0xa3, 0x2e, 0x69, 0x40, 0x6e, 0x82, 0x53, 0xf1, 0x0d, 0xcb, 0xe3, 0x2a, 0x34, 0xfe, 0x9f, + 0xc2, 0xf2, 0x08, 0xa7, 0x5d, 0xe4, 0x7a, 0x76, 0x22, 0xff, 0x8a, 0x1c, 0xa6, 0x61, 0x19, 0xbc, + 0xb4, 0x54, 0x51, 0xaa, 0x0b, 0x7a, 0xd0, 0x49, 0x9c, 0x7e, 0x3e, 0x71, 0xfa, 0x2a, 0x87, 0xb5, + 0x16, 0x8e, 0x0d, 0x3b, 0xb6, 0xb7, 0xa3, 0x1d, 0xfb, 0x18, 0x72, 0x8e, 0x2b, 0x1f, 0xcf, 0xd0, + 0xad, 0xeb, 0x87, 0xbb, 0xb5, 0x1d, 0x88, 0xf5, 0x28, 0x4a, 0xfd, 0x4b, 0x81, 0x95, 0xbb, 0x8e, + 0x65, 0x19, 0xfc, 0xe8, 0x64, 0x37, 0xe0, 0x4c, 0xcc, 0xe3, 0xbe, 0x31, 0x92, 0x39, 0x97, 0x1f, + 0x9e, 0xd2, 0x57, 0x62, 0xe3, 0xeb, 0x23, 0xf2, 0x09, 0x5c, 0x60, 0x86, 0x3d, 0x36, 0xb1, 0xef, + 0x33, 0xec, 0xc7, 0x8f, 0x74, 0xe1, 0x35, 0x20, 0x1f, 0x9e, 0xd2, 0x57, 0x83, 0x65, 0x1e, 0x33, + 0x8c, 0x4d, 0x93, 0xf7, 0x21, 0x1f, 0xbd, 0xbf, 0xe2, 0xab, 0x16, 0xdf, 0xe7, 0xc5, 0x94, 0x15, + 0x37, 0x43, 0x8d, 0xbe, 0xaf, 0x6e, 0xad, 0x1c, 0xb8, 0x61, 0xea, 0x53, 0x38, 0x13, 0x6d, 0x9e, + 0xb9, 0x8e, 0xcd, 0x90, 0xb4, 0xa1, 0x38, 0x94, 0x23, 0xfd, 0x59, 0x8d, 0x90, 0x36, 0x14, 0x1a, + 0xe5, 0xc4, 0xc3, 0xd1, 0x8b, 0x14, 0xfa, 0xd9, 0x20, 0x66, 0x36, 0xa0, 0xea, 0x70, 0x56, 0x77, + 0x4c, 0x73, 0x40, 0x87, 0x93, 0xa3, 0x7d, 0xbd, 0x9e, 0xee, 0xeb, 0x9c, 0xab, 0x8d, 0x3f, 0x97, + 0x21, 0xd7, 0x0d, 0xb6, 0x47, 0xbe, 0x17, 0xc7, 0x16, 0x2f, 0x05, 0xe4, 0x46, 0x8a, 0x03, 0x69, + 0xc5, 0xa2, 0x5c, 0x4e, 0x11, 0x86, 0x12, 0xb5, 0xf5, 0xc5, 0xef, 0x7f, 0x7c, 0x9b, 0xf9, 0x50, + 0x6d, 0x8a, 0xc2, 0xf3, 0x22, 0xaa, 0x21, 0x1f, 0xb9, 0x9e, 0xf3, 0x39, 0x0e, 0x39, 0xd3, 0x6a, + 0x9a, 0x61, 0x33, 0x4e, 0xed, 0x21, 0x8a, 0x76, 0x34, 0xcf, 0xb4, 0xda, 0x4b, 0x2d, 0xdc, 0x0c, + 0x23, 0x5f, 0x29, 0x00, 0xfb, 0x25, 0x85, 0xbc, 0x99, 0x92, 0x2e, 0x51, 0x71, 0x0e, 0x85, 0xba, + 0x2d, 0xa1, 0x9a, 0xe4, 0x96, 0x84, 0x12, 0x05, 0xe6, 0x18, 0x40, 0x33, 0x1e, 0xad, 0xf6, 0x92, + 0x7c, 0xa3, 0xc0, 0xca, 0x81, 0xe2, 0x95, 0xea, 0x56, 0x5a, 0x79, 0x2b, 0x5f, 0x48, 0x9c, 0x7a, + 0x5b, 0xfc, 0xec, 0x88, 0xa0, 0x6a, 0xff, 0x1c, 0xea, 0x47, 0x05, 0x60, 0xff, 0x25, 0x4f, 0xf5, + 0x29, 0xf1, 0xd0, 0x97, 0x2f, 0xa5, 0xa8, 0x74, 0xf9, 0x4b, 0xa3, 0x8b, 0x5c, 0xdd, 0x91, 0x50, + 0x8f, 0xd4, 0xfb, 0x12, 0x2a, 0x4c, 0xf6, 0x9a, 0x5c, 0x4d, 0x9c, 0x25, 0x6d, 0x2a, 0x35, 0xf2, + 0x9b, 0x02, 0xff, 0x8b, 0x30, 0xb8, 0x87, 0xd4, 0x32, 0xec, 0xf1, 0xf1, 0x71, 0xaf, 0xa5, 0xa8, + 0x3a, 0xd4, 0xe3, 0x06, 0x35, 0xf7, 0xa9, 0x9f, 0x49, 0xea, 0x9e, 0xba, 0xfd, 0x6f, 0x50, 0xc7, + 0x18, 0x9b, 0x4a, 0xed, 0x1d, 0x85, 0x7c, 0xad, 0xc0, 0xa2, 0xa8, 0x3e, 0xe4, 0x72, 0xaa, 0x75, + 0xb3, 0xb2, 0x74, 0x84, 0xb5, 0x8f, 0x24, 0x64, 0x5b, 0xbd, 0x7d, 0x12, 0x48, 0x0f, 0xe9, 0x48, + 0x98, 0xfa, 0x8b, 0x02, 0x2b, 0x33, 0xd2, 0x63, 0xc1, 0x1d, 0xcb, 0xc8, 0x9e, 0x64, 0xdc, 0x52, + 0xd7, 0x4f, 0xc2, 0xc8, 0xe2, 0x5c, 0x81, 0x85, 0xbf, 0x2a, 0x50, 0x9c, 0x2f, 0x4d, 0xa4, 0x96, + 0x42, 0xf4, 0x8a, 0xfa, 0x55, 0xbe, 0x7c, 0xf8, 0x7b, 0xaf, 0x3e, 0x95, 0xe0, 0x3b, 0xea, 0xc6, + 0x49, 0xc0, 0x07, 0x73, 0xc9, 0x85, 0xd1, 0x3f, 0x28, 0x90, 0x0d, 0x1e, 0x78, 0x52, 0x49, 0x7b, + 0x1f, 0xe3, 0x85, 0xaf, 0x7c, 0xf5, 0x10, 0x45, 0x50, 0x1d, 0xd4, 0x4d, 0x09, 0xfa, 0x40, 0x6d, + 0x9d, 0x04, 0x34, 0xa8, 0x15, 0x02, 0xef, 0x3b, 0x05, 0x96, 0xa2, 0x32, 0x41, 0xd4, 0xb4, 0x2b, + 0x70, 0xb0, 0x86, 0xbc, 0xf2, 0x35, 0xda, 0x96, 0x5c, 0xeb, 0xea, 0xbd, 0x13, 0xdd, 0xce, 0x30, + 0x59, 0x53, 0xa9, 0xb5, 0x5e, 0xc0, 0xf9, 0xa1, 0x63, 0x25, 0x89, 0x5a, 0xcb, 0x61, 0x05, 0xea, + 0x08, 0x80, 0x8e, 0xf2, 0xec, 0x56, 0x28, 0x19, 0x3b, 0x26, 0xb5, 0xc7, 0x75, 0xc7, 0x1b, 0x6b, + 0x63, 0xb4, 0x25, 0x9e, 0x16, 0x4c, 0x51, 0xd7, 0x60, 0xb1, 0xff, 0x67, 0x3e, 0x08, 0x9b, 0x3f, + 0x67, 0xd6, 0x1e, 0x04, 0xa1, 0x77, 0x4d, 0xc7, 0x1f, 0xd5, 0xc3, 0x75, 0xeb, 0x4f, 0x6e, 0x0e, + 0xb2, 0x32, 0xfc, 0xdd, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x21, 0x25, 0x65, 0x5b, 0x0e, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/transaction.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/transaction.pb.go new file mode 100644 index 0000000..d29b1eb --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/transaction.pb.go @@ -0,0 +1,831 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/v1/transaction.proto +// DO NOT EDIT! + +package spanner + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// # Transactions +// +// +// Each session can have at most one active transaction at a time. After the +// active transaction is completed, the session can immediately be +// re-used for the next transaction. It is not necessary to create a +// new session for each transaction. +// +// # Transaction Modes +// +// Cloud Spanner supports two transaction modes: +// +// 1. Locking read-write. This type of transaction is the only way +// to write data into Cloud Spanner. These transactions rely on +// pessimistic locking and, if necessary, two-phase commit. +// Locking read-write transactions may abort, requiring the +// application to retry. +// +// 2. Snapshot read-only. This transaction type provides guaranteed +// consistency across several reads, but does not allow +// writes. Snapshot read-only transactions can be configured to +// read at timestamps in the past. Snapshot read-only +// transactions do not need to be committed. +// +// For transactions that only read, snapshot read-only transactions +// provide simpler semantics and are almost always faster. In +// particular, read-only transactions do not take locks, so they do +// not conflict with read-write transactions. As a consequence of not +// taking locks, they also do not abort, so retry loops are not needed. +// +// Transactions may only read/write data in a single database. They +// may, however, read/write data in different tables within that +// database. +// +// ## Locking Read-Write Transactions +// +// Locking transactions may be used to atomically read-modify-write +// data anywhere in a database. This type of transaction is externally +// consistent. +// +// Clients should attempt to minimize the amount of time a transaction +// is active. Faster transactions commit with higher probability +// and cause less contention. Cloud Spanner attempts to keep read locks +// active as long as the transaction continues to do reads, and the +// transaction has not been terminated by +// [Commit][google.spanner.v1.Spanner.Commit] or +// [Rollback][google.spanner.v1.Spanner.Rollback]. Long periods of +// inactivity at the client may cause Cloud Spanner to release a +// transaction's locks and abort it. +// +// Reads performed within a transaction acquire locks on the data +// being read. Writes can only be done at commit time, after all reads +// have been completed. +// Conceptually, a read-write transaction consists of zero or more +// reads or SQL queries followed by +// [Commit][google.spanner.v1.Spanner.Commit]. At any time before +// [Commit][google.spanner.v1.Spanner.Commit], the client can send a +// [Rollback][google.spanner.v1.Spanner.Rollback] request to abort the +// transaction. +// +// ### Semantics +// +// Cloud Spanner can commit the transaction if all read locks it acquired +// are still valid at commit time, and it is able to acquire write +// locks for all writes. Cloud Spanner can abort the transaction for any +// reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees +// that the transaction has not modified any user data in Cloud Spanner. +// +// Unless the transaction commits, Cloud Spanner makes no guarantees about +// how long the transaction's locks were held for. It is an error to +// use Cloud Spanner locks for any sort of mutual exclusion other than +// between Cloud Spanner transactions themselves. +// +// ### Retrying Aborted Transactions +// +// When a transaction aborts, the application can choose to retry the +// whole transaction again. To maximize the chances of successfully +// committing the retry, the client should execute the retry in the +// same session as the original attempt. The original session's lock +// priority increases with each consecutive abort, meaning that each +// attempt has a slightly better chance of success than the previous. +// +// Under some circumstances (e.g., many transactions attempting to +// modify the same row(s)), a transaction can abort many times in a +// short period before successfully committing. Thus, it is not a good +// idea to cap the number of retries a transaction can attempt; +// instead, it is better to limit the total amount of wall time spent +// retrying. +// +// ### Idle Transactions +// +// A transaction is considered idle if it has no outstanding reads or +// SQL queries and has not started a read or SQL query within the last 10 +// seconds. Idle transactions can be aborted by Cloud Spanner so that they +// don't hold on to locks indefinitely. In that case, the commit will +// fail with error `ABORTED`. +// +// If this behavior is undesirable, periodically executing a simple +// SQL query in the transaction (e.g., `SELECT 1`) prevents the +// transaction from becoming idle. +// +// ## Snapshot Read-Only Transactions +// +// Snapshot read-only transactions provides a simpler method than +// locking read-write transactions for doing several consistent +// reads. However, this type of transaction does not support writes. +// +// Snapshot transactions do not take locks. Instead, they work by +// choosing a Cloud Spanner timestamp, then executing all reads at that +// timestamp. Since they do not acquire locks, they do not block +// concurrent read-write transactions. +// +// Unlike locking read-write transactions, snapshot read-only +// transactions never abort. They can fail if the chosen read +// timestamp is garbage collected; however, the default garbage +// collection policy is generous enough that most applications do not +// need to worry about this in practice. +// +// Snapshot read-only transactions do not need to call +// [Commit][google.spanner.v1.Spanner.Commit] or +// [Rollback][google.spanner.v1.Spanner.Rollback] (and in fact are not +// permitted to do so). +// +// To execute a snapshot transaction, the client specifies a timestamp +// bound, which tells Cloud Spanner how to choose a read timestamp. +// +// The types of timestamp bound are: +// +// - Strong (the default). +// - Bounded staleness. +// - Exact staleness. +// +// If the Cloud Spanner database to be read is geographically distributed, +// stale read-only transactions can execute more quickly than strong +// or read-write transaction, because they are able to execute far +// from the leader replica. +// +// Each type of timestamp bound is discussed in detail below. +// +// ### Strong +// +// Strong reads are guaranteed to see the effects of all transactions +// that have committed before the start of the read. Furthermore, all +// rows yielded by a single read are consistent with each other -- if +// any part of the read observes a transaction, all parts of the read +// see the transaction. +// +// Strong reads are not repeatable: two consecutive strong read-only +// transactions might return inconsistent results if there are +// concurrent writes. If consistency across reads is required, the +// reads should be executed within a transaction or at an exact read +// timestamp. +// +// See [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong]. +// +// ### Exact Staleness +// +// These timestamp bounds execute reads at a user-specified +// timestamp. Reads at a timestamp are guaranteed to see a consistent +// prefix of the global transaction history: they observe +// modifications done by all transactions with a commit timestamp <= +// the read timestamp, and observe none of the modifications done by +// transactions with a larger commit timestamp. They will block until +// all conflicting transactions that may be assigned commit timestamps +// <= the read timestamp have finished. +// +// The timestamp can either be expressed as an absolute Cloud Spanner commit +// timestamp or a staleness relative to the current time. +// +// These modes do not require a "negotiation phase" to pick a +// timestamp. As a result, they execute slightly faster than the +// equivalent boundedly stale concurrency modes. On the other hand, +// boundedly stale reads usually return fresher results. +// +// See [TransactionOptions.ReadOnly.read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp] and +// [TransactionOptions.ReadOnly.exact_staleness][google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness]. +// +// ### Bounded Staleness +// +// Bounded staleness modes allow Cloud Spanner to pick the read timestamp, +// subject to a user-provided staleness bound. Cloud Spanner chooses the +// newest timestamp within the staleness bound that allows execution +// of the reads at the closest available replica without blocking. +// +// All rows yielded are consistent with each other -- if any part of +// the read observes a transaction, all parts of the read see the +// transaction. Boundedly stale reads are not repeatable: two stale +// reads, even if they use the same staleness bound, can execute at +// different timestamps and thus return inconsistent results. +// +// Boundedly stale reads execute in two phases: the first phase +// negotiates a timestamp among all replicas needed to serve the +// read. In the second phase, reads are executed at the negotiated +// timestamp. +// +// As a result of the two phase execution, bounded staleness reads are +// usually a little slower than comparable exact staleness +// reads. However, they are typically able to return fresher +// results, and are more likely to execute at the closest replica. +// +// Because the timestamp negotiation requires up-front knowledge of +// which rows will be read, it can only be used with single-use +// read-only transactions. +// +// See [TransactionOptions.ReadOnly.max_staleness][google.spanner.v1.TransactionOptions.ReadOnly.max_staleness] and +// [TransactionOptions.ReadOnly.min_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp]. +// +// ### Old Read Timestamps and Garbage Collection +// +// Cloud Spanner continuously garbage collects deleted and overwritten data +// in the background to reclaim storage space. This process is known +// as "version GC". By default, version GC reclaims versions after they +// are one hour old. Because of this, Cloud Spanner cannot perform reads +// at read timestamps more than one hour in the past. This +// restriction also applies to in-progress reads and/or SQL queries whose +// timestamp become too old while executing. Reads and SQL queries with +// too-old read timestamps fail with the error `FAILED_PRECONDITION`. +type TransactionOptions struct { + // Required. The type of transaction. + // + // Types that are valid to be assigned to Mode: + // *TransactionOptions_ReadWrite_ + // *TransactionOptions_ReadOnly_ + Mode isTransactionOptions_Mode `protobuf_oneof:"mode"` +} + +func (m *TransactionOptions) Reset() { *m = TransactionOptions{} } +func (m *TransactionOptions) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions) ProtoMessage() {} +func (*TransactionOptions) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +type isTransactionOptions_Mode interface { + isTransactionOptions_Mode() +} + +type TransactionOptions_ReadWrite_ struct { + ReadWrite *TransactionOptions_ReadWrite `protobuf:"bytes,1,opt,name=read_write,json=readWrite,oneof"` +} +type TransactionOptions_ReadOnly_ struct { + ReadOnly *TransactionOptions_ReadOnly `protobuf:"bytes,2,opt,name=read_only,json=readOnly,oneof"` +} + +func (*TransactionOptions_ReadWrite_) isTransactionOptions_Mode() {} +func (*TransactionOptions_ReadOnly_) isTransactionOptions_Mode() {} + +func (m *TransactionOptions) GetMode() isTransactionOptions_Mode { + if m != nil { + return m.Mode + } + return nil +} + +func (m *TransactionOptions) GetReadWrite() *TransactionOptions_ReadWrite { + if x, ok := m.GetMode().(*TransactionOptions_ReadWrite_); ok { + return x.ReadWrite + } + return nil +} + +func (m *TransactionOptions) GetReadOnly() *TransactionOptions_ReadOnly { + if x, ok := m.GetMode().(*TransactionOptions_ReadOnly_); ok { + return x.ReadOnly + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TransactionOptions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TransactionOptions_OneofMarshaler, _TransactionOptions_OneofUnmarshaler, _TransactionOptions_OneofSizer, []interface{}{ + (*TransactionOptions_ReadWrite_)(nil), + (*TransactionOptions_ReadOnly_)(nil), + } +} + +func _TransactionOptions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TransactionOptions) + // mode + switch x := m.Mode.(type) { + case *TransactionOptions_ReadWrite_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadWrite); err != nil { + return err + } + case *TransactionOptions_ReadOnly_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadOnly); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransactionOptions.Mode has unexpected type %T", x) + } + return nil +} + +func _TransactionOptions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TransactionOptions) + switch tag { + case 1: // mode.read_write + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions_ReadWrite) + err := b.DecodeMessage(msg) + m.Mode = &TransactionOptions_ReadWrite_{msg} + return true, err + case 2: // mode.read_only + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions_ReadOnly) + err := b.DecodeMessage(msg) + m.Mode = &TransactionOptions_ReadOnly_{msg} + return true, err + default: + return false, nil + } +} + +func _TransactionOptions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TransactionOptions) + // mode + switch x := m.Mode.(type) { + case *TransactionOptions_ReadWrite_: + s := proto.Size(x.ReadWrite) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransactionOptions_ReadOnly_: + s := proto.Size(x.ReadOnly) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Options for read-write transactions. +type TransactionOptions_ReadWrite struct { +} + +func (m *TransactionOptions_ReadWrite) Reset() { *m = TransactionOptions_ReadWrite{} } +func (m *TransactionOptions_ReadWrite) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions_ReadWrite) ProtoMessage() {} +func (*TransactionOptions_ReadWrite) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0, 0} } + +// Options for read-only transactions. +type TransactionOptions_ReadOnly struct { + // How to choose the timestamp for the read-only transaction. + // + // Types that are valid to be assigned to TimestampBound: + // *TransactionOptions_ReadOnly_Strong + // *TransactionOptions_ReadOnly_MinReadTimestamp + // *TransactionOptions_ReadOnly_MaxStaleness + // *TransactionOptions_ReadOnly_ReadTimestamp + // *TransactionOptions_ReadOnly_ExactStaleness + TimestampBound isTransactionOptions_ReadOnly_TimestampBound `protobuf_oneof:"timestamp_bound"` + // If true, the Cloud Spanner-selected read timestamp is included in + // the [Transaction][google.spanner.v1.Transaction] message that describes the transaction. + ReturnReadTimestamp bool `protobuf:"varint,6,opt,name=return_read_timestamp,json=returnReadTimestamp" json:"return_read_timestamp,omitempty"` +} + +func (m *TransactionOptions_ReadOnly) Reset() { *m = TransactionOptions_ReadOnly{} } +func (m *TransactionOptions_ReadOnly) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions_ReadOnly) ProtoMessage() {} +func (*TransactionOptions_ReadOnly) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0, 1} } + +type isTransactionOptions_ReadOnly_TimestampBound interface { + isTransactionOptions_ReadOnly_TimestampBound() +} + +type TransactionOptions_ReadOnly_Strong struct { + Strong bool `protobuf:"varint,1,opt,name=strong,oneof"` +} +type TransactionOptions_ReadOnly_MinReadTimestamp struct { + MinReadTimestamp *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=min_read_timestamp,json=minReadTimestamp,oneof"` +} +type TransactionOptions_ReadOnly_MaxStaleness struct { + MaxStaleness *google_protobuf2.Duration `protobuf:"bytes,3,opt,name=max_staleness,json=maxStaleness,oneof"` +} +type TransactionOptions_ReadOnly_ReadTimestamp struct { + ReadTimestamp *google_protobuf3.Timestamp `protobuf:"bytes,4,opt,name=read_timestamp,json=readTimestamp,oneof"` +} +type TransactionOptions_ReadOnly_ExactStaleness struct { + ExactStaleness *google_protobuf2.Duration `protobuf:"bytes,5,opt,name=exact_staleness,json=exactStaleness,oneof"` +} + +func (*TransactionOptions_ReadOnly_Strong) isTransactionOptions_ReadOnly_TimestampBound() {} +func (*TransactionOptions_ReadOnly_MinReadTimestamp) isTransactionOptions_ReadOnly_TimestampBound() {} +func (*TransactionOptions_ReadOnly_MaxStaleness) isTransactionOptions_ReadOnly_TimestampBound() {} +func (*TransactionOptions_ReadOnly_ReadTimestamp) isTransactionOptions_ReadOnly_TimestampBound() {} +func (*TransactionOptions_ReadOnly_ExactStaleness) isTransactionOptions_ReadOnly_TimestampBound() {} + +func (m *TransactionOptions_ReadOnly) GetTimestampBound() isTransactionOptions_ReadOnly_TimestampBound { + if m != nil { + return m.TimestampBound + } + return nil +} + +func (m *TransactionOptions_ReadOnly) GetStrong() bool { + if x, ok := m.GetTimestampBound().(*TransactionOptions_ReadOnly_Strong); ok { + return x.Strong + } + return false +} + +func (m *TransactionOptions_ReadOnly) GetMinReadTimestamp() *google_protobuf3.Timestamp { + if x, ok := m.GetTimestampBound().(*TransactionOptions_ReadOnly_MinReadTimestamp); ok { + return x.MinReadTimestamp + } + return nil +} + +func (m *TransactionOptions_ReadOnly) GetMaxStaleness() *google_protobuf2.Duration { + if x, ok := m.GetTimestampBound().(*TransactionOptions_ReadOnly_MaxStaleness); ok { + return x.MaxStaleness + } + return nil +} + +func (m *TransactionOptions_ReadOnly) GetReadTimestamp() *google_protobuf3.Timestamp { + if x, ok := m.GetTimestampBound().(*TransactionOptions_ReadOnly_ReadTimestamp); ok { + return x.ReadTimestamp + } + return nil +} + +func (m *TransactionOptions_ReadOnly) GetExactStaleness() *google_protobuf2.Duration { + if x, ok := m.GetTimestampBound().(*TransactionOptions_ReadOnly_ExactStaleness); ok { + return x.ExactStaleness + } + return nil +} + +func (m *TransactionOptions_ReadOnly) GetReturnReadTimestamp() bool { + if m != nil { + return m.ReturnReadTimestamp + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TransactionOptions_ReadOnly) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TransactionOptions_ReadOnly_OneofMarshaler, _TransactionOptions_ReadOnly_OneofUnmarshaler, _TransactionOptions_ReadOnly_OneofSizer, []interface{}{ + (*TransactionOptions_ReadOnly_Strong)(nil), + (*TransactionOptions_ReadOnly_MinReadTimestamp)(nil), + (*TransactionOptions_ReadOnly_MaxStaleness)(nil), + (*TransactionOptions_ReadOnly_ReadTimestamp)(nil), + (*TransactionOptions_ReadOnly_ExactStaleness)(nil), + } +} + +func _TransactionOptions_ReadOnly_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TransactionOptions_ReadOnly) + // timestamp_bound + switch x := m.TimestampBound.(type) { + case *TransactionOptions_ReadOnly_Strong: + t := uint64(0) + if x.Strong { + t = 1 + } + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *TransactionOptions_ReadOnly_MinReadTimestamp: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.MinReadTimestamp); err != nil { + return err + } + case *TransactionOptions_ReadOnly_MaxStaleness: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.MaxStaleness); err != nil { + return err + } + case *TransactionOptions_ReadOnly_ReadTimestamp: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadTimestamp); err != nil { + return err + } + case *TransactionOptions_ReadOnly_ExactStaleness: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ExactStaleness); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransactionOptions_ReadOnly.TimestampBound has unexpected type %T", x) + } + return nil +} + +func _TransactionOptions_ReadOnly_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TransactionOptions_ReadOnly) + switch tag { + case 1: // timestamp_bound.strong + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.TimestampBound = &TransactionOptions_ReadOnly_Strong{x != 0} + return true, err + case 2: // timestamp_bound.min_read_timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf3.Timestamp) + err := b.DecodeMessage(msg) + m.TimestampBound = &TransactionOptions_ReadOnly_MinReadTimestamp{msg} + return true, err + case 3: // timestamp_bound.max_staleness + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf2.Duration) + err := b.DecodeMessage(msg) + m.TimestampBound = &TransactionOptions_ReadOnly_MaxStaleness{msg} + return true, err + case 4: // timestamp_bound.read_timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf3.Timestamp) + err := b.DecodeMessage(msg) + m.TimestampBound = &TransactionOptions_ReadOnly_ReadTimestamp{msg} + return true, err + case 5: // timestamp_bound.exact_staleness + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf2.Duration) + err := b.DecodeMessage(msg) + m.TimestampBound = &TransactionOptions_ReadOnly_ExactStaleness{msg} + return true, err + default: + return false, nil + } +} + +func _TransactionOptions_ReadOnly_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TransactionOptions_ReadOnly) + // timestamp_bound + switch x := m.TimestampBound.(type) { + case *TransactionOptions_ReadOnly_Strong: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += 1 + case *TransactionOptions_ReadOnly_MinReadTimestamp: + s := proto.Size(x.MinReadTimestamp) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransactionOptions_ReadOnly_MaxStaleness: + s := proto.Size(x.MaxStaleness) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransactionOptions_ReadOnly_ReadTimestamp: + s := proto.Size(x.ReadTimestamp) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransactionOptions_ReadOnly_ExactStaleness: + s := proto.Size(x.ExactStaleness) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A transaction. +type Transaction struct { + // `id` may be used to identify the transaction in subsequent + // [Read][google.spanner.v1.Spanner.Read], + // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], + // [Commit][google.spanner.v1.Spanner.Commit], or + // [Rollback][google.spanner.v1.Spanner.Rollback] calls. + // + // Single-use read-only transactions do not have IDs, because + // single-use transactions do not support multiple requests. + Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // For snapshot read-only transactions, the read timestamp chosen + // for the transaction. Not returned by default: see + // [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + ReadTimestamp *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=read_timestamp,json=readTimestamp" json:"read_timestamp,omitempty"` +} + +func (m *Transaction) Reset() { *m = Transaction{} } +func (m *Transaction) String() string { return proto.CompactTextString(m) } +func (*Transaction) ProtoMessage() {} +func (*Transaction) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{1} } + +func (m *Transaction) GetId() []byte { + if m != nil { + return m.Id + } + return nil +} + +func (m *Transaction) GetReadTimestamp() *google_protobuf3.Timestamp { + if m != nil { + return m.ReadTimestamp + } + return nil +} + +// This message is used to select the transaction in which a +// [Read][google.spanner.v1.Spanner.Read] or +// [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] call runs. +// +// See [TransactionOptions][google.spanner.v1.TransactionOptions] for more information about transactions. +type TransactionSelector struct { + // If no fields are set, the default is a single use transaction + // with strong concurrency. + // + // Types that are valid to be assigned to Selector: + // *TransactionSelector_SingleUse + // *TransactionSelector_Id + // *TransactionSelector_Begin + Selector isTransactionSelector_Selector `protobuf_oneof:"selector"` +} + +func (m *TransactionSelector) Reset() { *m = TransactionSelector{} } +func (m *TransactionSelector) String() string { return proto.CompactTextString(m) } +func (*TransactionSelector) ProtoMessage() {} +func (*TransactionSelector) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2} } + +type isTransactionSelector_Selector interface { + isTransactionSelector_Selector() +} + +type TransactionSelector_SingleUse struct { + SingleUse *TransactionOptions `protobuf:"bytes,1,opt,name=single_use,json=singleUse,oneof"` +} +type TransactionSelector_Id struct { + Id []byte `protobuf:"bytes,2,opt,name=id,proto3,oneof"` +} +type TransactionSelector_Begin struct { + Begin *TransactionOptions `protobuf:"bytes,3,opt,name=begin,oneof"` +} + +func (*TransactionSelector_SingleUse) isTransactionSelector_Selector() {} +func (*TransactionSelector_Id) isTransactionSelector_Selector() {} +func (*TransactionSelector_Begin) isTransactionSelector_Selector() {} + +func (m *TransactionSelector) GetSelector() isTransactionSelector_Selector { + if m != nil { + return m.Selector + } + return nil +} + +func (m *TransactionSelector) GetSingleUse() *TransactionOptions { + if x, ok := m.GetSelector().(*TransactionSelector_SingleUse); ok { + return x.SingleUse + } + return nil +} + +func (m *TransactionSelector) GetId() []byte { + if x, ok := m.GetSelector().(*TransactionSelector_Id); ok { + return x.Id + } + return nil +} + +func (m *TransactionSelector) GetBegin() *TransactionOptions { + if x, ok := m.GetSelector().(*TransactionSelector_Begin); ok { + return x.Begin + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TransactionSelector) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TransactionSelector_OneofMarshaler, _TransactionSelector_OneofUnmarshaler, _TransactionSelector_OneofSizer, []interface{}{ + (*TransactionSelector_SingleUse)(nil), + (*TransactionSelector_Id)(nil), + (*TransactionSelector_Begin)(nil), + } +} + +func _TransactionSelector_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TransactionSelector) + // selector + switch x := m.Selector.(type) { + case *TransactionSelector_SingleUse: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SingleUse); err != nil { + return err + } + case *TransactionSelector_Id: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Id) + case *TransactionSelector_Begin: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Begin); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransactionSelector.Selector has unexpected type %T", x) + } + return nil +} + +func _TransactionSelector_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TransactionSelector) + switch tag { + case 1: // selector.single_use + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions) + err := b.DecodeMessage(msg) + m.Selector = &TransactionSelector_SingleUse{msg} + return true, err + case 2: // selector.id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Selector = &TransactionSelector_Id{x} + return true, err + case 3: // selector.begin + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions) + err := b.DecodeMessage(msg) + m.Selector = &TransactionSelector_Begin{msg} + return true, err + default: + return false, nil + } +} + +func _TransactionSelector_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TransactionSelector) + // selector + switch x := m.Selector.(type) { + case *TransactionSelector_SingleUse: + s := proto.Size(x.SingleUse) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransactionSelector_Id: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Id))) + n += len(x.Id) + case *TransactionSelector_Begin: + s := proto.Size(x.Begin) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*TransactionOptions)(nil), "google.spanner.v1.TransactionOptions") + proto.RegisterType((*TransactionOptions_ReadWrite)(nil), "google.spanner.v1.TransactionOptions.ReadWrite") + proto.RegisterType((*TransactionOptions_ReadOnly)(nil), "google.spanner.v1.TransactionOptions.ReadOnly") + proto.RegisterType((*Transaction)(nil), "google.spanner.v1.Transaction") + proto.RegisterType((*TransactionSelector)(nil), "google.spanner.v1.TransactionSelector") +} + +func init() { proto.RegisterFile("google/spanner/v1/transaction.proto", fileDescriptor5) } + +var fileDescriptor5 = []byte{ + // 522 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xd1, 0x6e, 0xd3, 0x30, + 0x14, 0x86, 0xd3, 0x6e, 0xab, 0xba, 0xd3, 0xae, 0xeb, 0x3c, 0x4d, 0x94, 0x08, 0x01, 0x2a, 0x42, + 0xe2, 0xca, 0x51, 0xc7, 0x0d, 0x12, 0x42, 0x82, 0x6e, 0x82, 0x08, 0x09, 0xad, 0x4a, 0x07, 0x48, + 0xdc, 0x04, 0xb7, 0x31, 0x91, 0xa5, 0xc4, 0x8e, 0x6c, 0x67, 0x74, 0x57, 0xdc, 0xf0, 0x34, 0x3c, + 0x02, 0x6f, 0xc1, 0x1b, 0xa1, 0x38, 0x4e, 0x9b, 0x35, 0x17, 0xeb, 0x5d, 0xdc, 0xf3, 0xff, 0xff, + 0xf9, 0x7c, 0x8e, 0x55, 0x78, 0x16, 0x0b, 0x11, 0x27, 0xd4, 0x53, 0x19, 0xe1, 0x9c, 0x4a, 0xef, + 0x66, 0xe2, 0x69, 0x49, 0xb8, 0x22, 0x4b, 0xcd, 0x04, 0xc7, 0x99, 0x14, 0x5a, 0xa0, 0x93, 0x52, + 0x84, 0xad, 0x08, 0xdf, 0x4c, 0xdc, 0x47, 0xd6, 0x47, 0x32, 0xe6, 0x11, 0xce, 0x85, 0x26, 0x85, + 0x5e, 0x95, 0x06, 0xf7, 0xb1, 0xad, 0x9a, 0xd3, 0x22, 0xff, 0xe1, 0x45, 0xb9, 0x24, 0x9b, 0x40, + 0xf7, 0xc9, 0x76, 0x5d, 0xb3, 0x94, 0x2a, 0x4d, 0xd2, 0xac, 0x14, 0x8c, 0xff, 0xed, 0x03, 0xba, + 0xde, 0x70, 0x5c, 0x65, 0x26, 0x1d, 0xcd, 0x00, 0x24, 0x25, 0x51, 0xf8, 0x53, 0x32, 0x4d, 0x47, + 0xad, 0xa7, 0xad, 0x17, 0xbd, 0x73, 0x0f, 0x37, 0xe8, 0x70, 0xd3, 0x8a, 0x03, 0x4a, 0xa2, 0xaf, + 0x85, 0xcd, 0x77, 0x82, 0x43, 0x59, 0x1d, 0xd0, 0x27, 0x30, 0x87, 0x50, 0xf0, 0xe4, 0x76, 0xd4, + 0x36, 0x81, 0x78, 0xf7, 0xc0, 0x2b, 0x9e, 0xdc, 0xfa, 0x4e, 0xd0, 0x95, 0xf6, 0xdb, 0xed, 0xc1, + 0xe1, 0xba, 0x91, 0xfb, 0x7b, 0x0f, 0xba, 0x95, 0x0a, 0x8d, 0xa0, 0xa3, 0xb4, 0x14, 0x3c, 0x36, + 0xd8, 0x5d, 0xdf, 0x09, 0xec, 0x19, 0x7d, 0x04, 0x94, 0x32, 0x1e, 0x1a, 0x8c, 0xf5, 0x1c, 0x2c, + 0x8b, 0x5b, 0xb1, 0x54, 0x93, 0xc2, 0xd7, 0x95, 0xc2, 0x77, 0x82, 0x61, 0xca, 0x78, 0xd1, 0x60, + 0xfd, 0x1b, 0x7a, 0x0b, 0x47, 0x29, 0x59, 0x85, 0x4a, 0x93, 0x84, 0x72, 0xaa, 0xd4, 0x68, 0xcf, + 0xc4, 0x3c, 0x6c, 0xc4, 0x5c, 0xda, 0x85, 0xf8, 0x4e, 0xd0, 0x4f, 0xc9, 0x6a, 0x5e, 0x19, 0xd0, + 0x05, 0x0c, 0xb6, 0x48, 0xf6, 0x77, 0x20, 0x39, 0x92, 0x77, 0x30, 0x2e, 0xe1, 0x98, 0xae, 0xc8, + 0x52, 0xd7, 0x40, 0x0e, 0xee, 0x07, 0x19, 0x18, 0xcf, 0x06, 0xe5, 0x1c, 0xce, 0x24, 0xd5, 0xb9, + 0x6c, 0xcc, 0xa6, 0x53, 0x4c, 0x30, 0x38, 0x2d, 0x8b, 0x77, 0x06, 0x30, 0x3d, 0x81, 0xe3, 0xb5, + 0x2e, 0x5c, 0x88, 0x9c, 0x47, 0xd3, 0x0e, 0xec, 0xa7, 0x22, 0xa2, 0xe3, 0xef, 0xd0, 0xab, 0xad, + 0x11, 0x0d, 0xa0, 0xcd, 0x22, 0xb3, 0x8c, 0x7e, 0xd0, 0x66, 0x11, 0x7a, 0xd7, 0xb8, 0xf8, 0xbd, + 0x2b, 0xd8, 0xba, 0xf6, 0xf8, 0x6f, 0x0b, 0x4e, 0x6b, 0x2d, 0xe6, 0x34, 0xa1, 0x4b, 0x2d, 0x24, + 0x7a, 0x0f, 0xa0, 0x18, 0x8f, 0x13, 0x1a, 0xe6, 0xaa, 0x7a, 0xb6, 0xcf, 0x77, 0x7a, 0x65, 0xc5, + 0x63, 0x2d, 0xad, 0x9f, 0x15, 0x45, 0x43, 0x83, 0x5c, 0x60, 0xf5, 0x7d, 0xc7, 0x40, 0xbf, 0x81, + 0x83, 0x05, 0x8d, 0x19, 0xb7, 0x7b, 0xde, 0x39, 0xb4, 0x74, 0x4d, 0x01, 0xba, 0xca, 0x42, 0x4e, + 0x7f, 0xc1, 0xd9, 0x52, 0xa4, 0xcd, 0x80, 0xe9, 0xb0, 0x96, 0x30, 0x2b, 0x66, 0x30, 0x6b, 0x7d, + 0x7b, 0x65, 0x65, 0xb1, 0x48, 0x08, 0x8f, 0xb1, 0x90, 0xb1, 0x17, 0x53, 0x6e, 0x26, 0xe4, 0x95, + 0x25, 0x92, 0x31, 0x55, 0xfb, 0x57, 0x79, 0x6d, 0x3f, 0xff, 0xb4, 0x1f, 0x7c, 0x28, 0xad, 0x17, + 0x89, 0xc8, 0x23, 0x3c, 0xb7, 0x7d, 0xbe, 0x4c, 0x16, 0x1d, 0x63, 0x7f, 0xf9, 0x3f, 0x00, 0x00, + 0xff, 0xff, 0xeb, 0x34, 0x76, 0xbe, 0x93, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/type.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/type.pb.go new file mode 100644 index 0000000..1df292f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/type.pb.go @@ -0,0 +1,217 @@ +// Code generated by protoc-gen-go. +// source: google/spanner/v1/type.proto +// DO NOT EDIT! + +package spanner + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `TypeCode` is used as part of [Type][google.spanner.v1.Type] to +// indicate the type of a Cloud Spanner value. +// +// Each legal value of a type can be encoded to or decoded from a JSON +// value, using the encodings described below. All Cloud Spanner values can +// be `null`, regardless of type; `null`s are always encoded as a JSON +// `null`. +type TypeCode int32 + +const ( + // Not specified. + TypeCode_TYPE_CODE_UNSPECIFIED TypeCode = 0 + // Encoded as JSON `true` or `false`. + TypeCode_BOOL TypeCode = 1 + // Encoded as `string`, in decimal format. + TypeCode_INT64 TypeCode = 2 + // Encoded as `number`, or the strings `"NaN"`, `"Infinity"`, or + // `"-Infinity"`. + TypeCode_FLOAT64 TypeCode = 3 + // Encoded as `string` in RFC 3339 timestamp format. The time zone + // must be present, and must be `"Z"`. + TypeCode_TIMESTAMP TypeCode = 4 + // Encoded as `string` in RFC 3339 date format. + TypeCode_DATE TypeCode = 5 + // Encoded as `string`. + TypeCode_STRING TypeCode = 6 + // Encoded as a base64-encoded `string`, as described in RFC 4648, + // section 4. + TypeCode_BYTES TypeCode = 7 + // Encoded as `list`, where the list elements are represented + // according to [array_element_type][google.spanner.v1.Type.array_element_type]. + TypeCode_ARRAY TypeCode = 8 + // Encoded as `list`, where list element `i` is represented according + // to [struct_type.fields[i]][google.spanner.v1.StructType.fields]. + TypeCode_STRUCT TypeCode = 9 +) + +var TypeCode_name = map[int32]string{ + 0: "TYPE_CODE_UNSPECIFIED", + 1: "BOOL", + 2: "INT64", + 3: "FLOAT64", + 4: "TIMESTAMP", + 5: "DATE", + 6: "STRING", + 7: "BYTES", + 8: "ARRAY", + 9: "STRUCT", +} +var TypeCode_value = map[string]int32{ + "TYPE_CODE_UNSPECIFIED": 0, + "BOOL": 1, + "INT64": 2, + "FLOAT64": 3, + "TIMESTAMP": 4, + "DATE": 5, + "STRING": 6, + "BYTES": 7, + "ARRAY": 8, + "STRUCT": 9, +} + +func (x TypeCode) String() string { + return proto.EnumName(TypeCode_name, int32(x)) +} +func (TypeCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } + +// `Type` indicates the type of a Cloud Spanner value, as might be stored in a +// table cell or returned from an SQL query. +type Type struct { + // Required. The [TypeCode][google.spanner.v1.TypeCode] for this type. + Code TypeCode `protobuf:"varint,1,opt,name=code,enum=google.spanner.v1.TypeCode" json:"code,omitempty"` + // If [code][google.spanner.v1.Type.code] == [ARRAY][google.spanner.v1.TypeCode.ARRAY], then `array_element_type` + // is the type of the array elements. + ArrayElementType *Type `protobuf:"bytes,2,opt,name=array_element_type,json=arrayElementType" json:"array_element_type,omitempty"` + // If [code][google.spanner.v1.Type.code] == [STRUCT][google.spanner.v1.TypeCode.STRUCT], then `struct_type` + // provides type information for the struct's fields. + StructType *StructType `protobuf:"bytes,3,opt,name=struct_type,json=structType" json:"struct_type,omitempty"` +} + +func (m *Type) Reset() { *m = Type{} } +func (m *Type) String() string { return proto.CompactTextString(m) } +func (*Type) ProtoMessage() {} +func (*Type) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } + +func (m *Type) GetCode() TypeCode { + if m != nil { + return m.Code + } + return TypeCode_TYPE_CODE_UNSPECIFIED +} + +func (m *Type) GetArrayElementType() *Type { + if m != nil { + return m.ArrayElementType + } + return nil +} + +func (m *Type) GetStructType() *StructType { + if m != nil { + return m.StructType + } + return nil +} + +// `StructType` defines the fields of a [STRUCT][google.spanner.v1.TypeCode.STRUCT] type. +type StructType struct { + // The list of fields that make up this struct. Order is + // significant, because values of this struct type are represented as + // lists, where the order of field values matches the order of + // fields in the [StructType][google.spanner.v1.StructType]. In turn, the order of fields + // matches the order of columns in a read request, or the order of + // fields in the `SELECT` clause of a query. + Fields []*StructType_Field `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty"` +} + +func (m *StructType) Reset() { *m = StructType{} } +func (m *StructType) String() string { return proto.CompactTextString(m) } +func (*StructType) ProtoMessage() {} +func (*StructType) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1} } + +func (m *StructType) GetFields() []*StructType_Field { + if m != nil { + return m.Fields + } + return nil +} + +// Message representing a single field of a struct. +type StructType_Field struct { + // The name of the field. For reads, this is the column name. For + // SQL queries, it is the column alias (e.g., `"Word"` in the + // query `"SELECT 'hello' AS Word"`), or the column name (e.g., + // `"ColName"` in the query `"SELECT ColName FROM Table"`). Some + // columns might have an empty name (e.g., !"SELECT + // UPPER(ColName)"`). Note that a query result can contain + // multiple fields with the same name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The type of the field. + Type *Type `protobuf:"bytes,2,opt,name=type" json:"type,omitempty"` +} + +func (m *StructType_Field) Reset() { *m = StructType_Field{} } +func (m *StructType_Field) String() string { return proto.CompactTextString(m) } +func (*StructType_Field) ProtoMessage() {} +func (*StructType_Field) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1, 0} } + +func (m *StructType_Field) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *StructType_Field) GetType() *Type { + if m != nil { + return m.Type + } + return nil +} + +func init() { + proto.RegisterType((*Type)(nil), "google.spanner.v1.Type") + proto.RegisterType((*StructType)(nil), "google.spanner.v1.StructType") + proto.RegisterType((*StructType_Field)(nil), "google.spanner.v1.StructType.Field") + proto.RegisterEnum("google.spanner.v1.TypeCode", TypeCode_name, TypeCode_value) +} + +func init() { proto.RegisterFile("google/spanner/v1/type.proto", fileDescriptor6) } + +var fileDescriptor6 = []byte{ + // 430 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xd1, 0x8a, 0xd3, 0x40, + 0x14, 0x86, 0x9d, 0x36, 0xed, 0x36, 0xa7, 0x28, 0xe3, 0xc0, 0xb2, 0x75, 0x55, 0x28, 0xeb, 0x4d, + 0x51, 0x48, 0x68, 0x15, 0x11, 0x16, 0x84, 0x34, 0x9d, 0xae, 0x81, 0xdd, 0x36, 0x24, 0xb3, 0x42, + 0xbd, 0x29, 0x63, 0x3b, 0x86, 0x40, 0x3a, 0x13, 0x92, 0xec, 0x62, 0x5f, 0xc2, 0x1b, 0xdf, 0xc2, + 0x87, 0xf0, 0xd9, 0x64, 0x26, 0x59, 0x15, 0xaa, 0xe2, 0xdd, 0x9f, 0xfc, 0xff, 0x77, 0xce, 0x99, + 0xc3, 0x81, 0x27, 0x89, 0x52, 0x49, 0x26, 0xdc, 0x32, 0xe7, 0x52, 0x8a, 0xc2, 0xbd, 0x1d, 0xbb, + 0xd5, 0x3e, 0x17, 0x4e, 0x5e, 0xa8, 0x4a, 0x91, 0x87, 0xb5, 0xeb, 0x34, 0xae, 0x73, 0x3b, 0x3e, + 0xbd, 0x03, 0x78, 0x9e, 0xba, 0x5c, 0x4a, 0x55, 0xf1, 0x2a, 0x55, 0xb2, 0xac, 0x81, 0xb3, 0xef, + 0x08, 0x2c, 0xb6, 0xcf, 0x05, 0x71, 0xc1, 0xda, 0xa8, 0xad, 0x18, 0xa0, 0x21, 0x1a, 0x3d, 0x98, + 0x3c, 0x76, 0x0e, 0x0a, 0x39, 0x3a, 0xe6, 0xab, 0xad, 0x88, 0x4c, 0x90, 0x50, 0x20, 0xbc, 0x28, + 0xf8, 0x7e, 0x2d, 0x32, 0xb1, 0x13, 0xb2, 0x5a, 0xeb, 0x31, 0x06, 0xad, 0x21, 0x1a, 0xf5, 0x27, + 0x27, 0x7f, 0xc1, 0x23, 0x6c, 0x10, 0x5a, 0x13, 0xa6, 0xef, 0x5b, 0xe8, 0x97, 0x55, 0x71, 0xb3, + 0x69, 0xf8, 0xb6, 0xe1, 0x9f, 0xfe, 0x81, 0x8f, 0x4d, 0xca, 0x54, 0x81, 0xf2, 0xa7, 0x3e, 0xfb, + 0x8a, 0x00, 0x7e, 0x59, 0xe4, 0x1c, 0xba, 0x9f, 0x52, 0x91, 0x6d, 0xcb, 0x01, 0x1a, 0xb6, 0x47, + 0xfd, 0xc9, 0xb3, 0x7f, 0x56, 0x72, 0xe6, 0x3a, 0x1b, 0x35, 0xc8, 0xe9, 0x3b, 0xe8, 0x98, 0x1f, + 0x84, 0x80, 0x25, 0xf9, 0xae, 0x5e, 0x86, 0x1d, 0x19, 0x4d, 0x5e, 0x80, 0xf5, 0x3f, 0x2f, 0x34, + 0xa1, 0xe7, 0x5f, 0x10, 0xf4, 0xee, 0xf6, 0x45, 0x1e, 0xc1, 0x31, 0x5b, 0x85, 0x74, 0xed, 0x2f, + 0x67, 0x74, 0x7d, 0xbd, 0x88, 0x43, 0xea, 0x07, 0xf3, 0x80, 0xce, 0xf0, 0x3d, 0xd2, 0x03, 0x6b, + 0xba, 0x5c, 0x5e, 0x62, 0x44, 0x6c, 0xe8, 0x04, 0x0b, 0xf6, 0xfa, 0x15, 0x6e, 0x91, 0x3e, 0x1c, + 0xcd, 0x2f, 0x97, 0x9e, 0xfe, 0x68, 0x93, 0xfb, 0x60, 0xb3, 0xe0, 0x8a, 0xc6, 0xcc, 0xbb, 0x0a, + 0xb1, 0xa5, 0x81, 0x99, 0xc7, 0x28, 0xee, 0x10, 0x80, 0x6e, 0xcc, 0xa2, 0x60, 0x71, 0x81, 0xbb, + 0x1a, 0x9e, 0xae, 0x18, 0x8d, 0xf1, 0x91, 0x96, 0x5e, 0x14, 0x79, 0x2b, 0xdc, 0x6b, 0x12, 0xd7, + 0x3e, 0xc3, 0xf6, 0xf4, 0x33, 0x1c, 0x6f, 0xd4, 0xee, 0x70, 0xe8, 0xa9, 0xad, 0xc7, 0x0c, 0xf5, + 0x2d, 0x84, 0xe8, 0xc3, 0x9b, 0xc6, 0x4f, 0x54, 0xc6, 0x65, 0xe2, 0xa8, 0x22, 0x71, 0x13, 0x21, + 0xcd, 0xa5, 0xb8, 0xb5, 0xc5, 0xf3, 0xb4, 0xfc, 0xed, 0xf6, 0xce, 0x1b, 0xf9, 0xad, 0x75, 0x72, + 0x51, 0xa3, 0x7e, 0xa6, 0x6e, 0xb6, 0x4e, 0xdc, 0x34, 0x78, 0x3f, 0xfe, 0xd8, 0x35, 0xf8, 0xcb, + 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf4, 0xaa, 0xcb, 0xef, 0xb9, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer.pb.go b/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer.pb.go new file mode 100644 index 0000000..d53abbe --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer.pb.go @@ -0,0 +1,656 @@ +// Code generated by protoc-gen-go. +// source: google/storagetransfer/v1/transfer.proto +// DO NOT EDIT! + +/* +Package storagetransfer is a generated protocol buffer package. + +It is generated from these files: + google/storagetransfer/v1/transfer.proto + google/storagetransfer/v1/transfer_types.proto + +It has these top-level messages: + GetGoogleServiceAccountRequest + CreateTransferJobRequest + UpdateTransferJobRequest + GetTransferJobRequest + ListTransferJobsRequest + ListTransferJobsResponse + PauseTransferOperationRequest + ResumeTransferOperationRequest + GoogleServiceAccount + AwsAccessKey + ObjectConditions + GcsData + AwsS3Data + HttpData + TransferOptions + TransferSpec + Schedule + TransferJob + ErrorLogEntry + ErrorSummary + TransferCounters + TransferOperation +*/ +package storagetransfer + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Request passed to GetGoogleServiceAccount. +type GetGoogleServiceAccountRequest struct { + // The ID of the Google Cloud Platform Console project that the Google service + // account is associated with. + // Required. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` +} + +func (m *GetGoogleServiceAccountRequest) Reset() { *m = GetGoogleServiceAccountRequest{} } +func (m *GetGoogleServiceAccountRequest) String() string { return proto.CompactTextString(m) } +func (*GetGoogleServiceAccountRequest) ProtoMessage() {} +func (*GetGoogleServiceAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *GetGoogleServiceAccountRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +// Request passed to CreateTransferJob. +type CreateTransferJobRequest struct { + // The job to create. + // Required. + TransferJob *TransferJob `protobuf:"bytes,1,opt,name=transfer_job,json=transferJob" json:"transfer_job,omitempty"` +} + +func (m *CreateTransferJobRequest) Reset() { *m = CreateTransferJobRequest{} } +func (m *CreateTransferJobRequest) String() string { return proto.CompactTextString(m) } +func (*CreateTransferJobRequest) ProtoMessage() {} +func (*CreateTransferJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *CreateTransferJobRequest) GetTransferJob() *TransferJob { + if m != nil { + return m.TransferJob + } + return nil +} + +// Request passed to UpdateTransferJob. +type UpdateTransferJobRequest struct { + // The name of job to update. + // Required. + JobName string `protobuf:"bytes,1,opt,name=job_name,json=jobName" json:"job_name,omitempty"` + // The ID of the Google Cloud Platform Console project that owns the job. + // Required. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The job to update. + // Required. + TransferJob *TransferJob `protobuf:"bytes,3,opt,name=transfer_job,json=transferJob" json:"transfer_job,omitempty"` + // The field mask of the fields in `transferJob` that are to be updated in + // this request. Fields in `transferJob` that can be updated are: + // `description`, `transferSpec`, and `status`. To update the `transferSpec` + // of the job, a complete transfer specification has to be provided. An + // incomplete specification which misses any required fields will be rejected + // with the error `INVALID_ARGUMENT`. + UpdateTransferJobFieldMask *google_protobuf2.FieldMask `protobuf:"bytes,4,opt,name=update_transfer_job_field_mask,json=updateTransferJobFieldMask" json:"update_transfer_job_field_mask,omitempty"` +} + +func (m *UpdateTransferJobRequest) Reset() { *m = UpdateTransferJobRequest{} } +func (m *UpdateTransferJobRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateTransferJobRequest) ProtoMessage() {} +func (*UpdateTransferJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *UpdateTransferJobRequest) GetJobName() string { + if m != nil { + return m.JobName + } + return "" +} + +func (m *UpdateTransferJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateTransferJobRequest) GetTransferJob() *TransferJob { + if m != nil { + return m.TransferJob + } + return nil +} + +func (m *UpdateTransferJobRequest) GetUpdateTransferJobFieldMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateTransferJobFieldMask + } + return nil +} + +// Request passed to GetTransferJob. +type GetTransferJobRequest struct { + // The job to get. + // Required. + JobName string `protobuf:"bytes,1,opt,name=job_name,json=jobName" json:"job_name,omitempty"` + // The ID of the Google Cloud Platform Console project that owns the job. + // Required. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` +} + +func (m *GetTransferJobRequest) Reset() { *m = GetTransferJobRequest{} } +func (m *GetTransferJobRequest) String() string { return proto.CompactTextString(m) } +func (*GetTransferJobRequest) ProtoMessage() {} +func (*GetTransferJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *GetTransferJobRequest) GetJobName() string { + if m != nil { + return m.JobName + } + return "" +} + +func (m *GetTransferJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +// `project_id`, `job_names`, and `job_statuses` are query parameters that can +// be specified when listing transfer jobs. +type ListTransferJobsRequest struct { + // A list of query parameters specified as JSON text in the form of + // {"project_id":"my_project_id", + // "job_names":["jobid1","jobid2",...], + // "job_statuses":["status1","status2",...]}. + // Since `job_names` and `job_statuses` support multiple values, their values + // must be specified with array notation. `project_id` is required. `job_names` + // and `job_statuses` are optional. The valid values for `job_statuses` are + // case-insensitive: `ENABLED`, `DISABLED`, and `DELETED`. + Filter string `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"` + // The list page size. The max allowed value is 256. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The list page token. + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListTransferJobsRequest) Reset() { *m = ListTransferJobsRequest{} } +func (m *ListTransferJobsRequest) String() string { return proto.CompactTextString(m) } +func (*ListTransferJobsRequest) ProtoMessage() {} +func (*ListTransferJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ListTransferJobsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListTransferJobsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTransferJobsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response from ListTransferJobs. +type ListTransferJobsResponse struct { + // A list of transfer jobs. + TransferJobs []*TransferJob `protobuf:"bytes,1,rep,name=transfer_jobs,json=transferJobs" json:"transfer_jobs,omitempty"` + // The list next page token. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTransferJobsResponse) Reset() { *m = ListTransferJobsResponse{} } +func (m *ListTransferJobsResponse) String() string { return proto.CompactTextString(m) } +func (*ListTransferJobsResponse) ProtoMessage() {} +func (*ListTransferJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ListTransferJobsResponse) GetTransferJobs() []*TransferJob { + if m != nil { + return m.TransferJobs + } + return nil +} + +func (m *ListTransferJobsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request passed to PauseTransferOperation. +type PauseTransferOperationRequest struct { + // The name of the transfer operation. + // Required. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *PauseTransferOperationRequest) Reset() { *m = PauseTransferOperationRequest{} } +func (m *PauseTransferOperationRequest) String() string { return proto.CompactTextString(m) } +func (*PauseTransferOperationRequest) ProtoMessage() {} +func (*PauseTransferOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *PauseTransferOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request passed to ResumeTransferOperation. +type ResumeTransferOperationRequest struct { + // The name of the transfer operation. + // Required. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *ResumeTransferOperationRequest) Reset() { *m = ResumeTransferOperationRequest{} } +func (m *ResumeTransferOperationRequest) String() string { return proto.CompactTextString(m) } +func (*ResumeTransferOperationRequest) ProtoMessage() {} +func (*ResumeTransferOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ResumeTransferOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*GetGoogleServiceAccountRequest)(nil), "google.storagetransfer.v1.GetGoogleServiceAccountRequest") + proto.RegisterType((*CreateTransferJobRequest)(nil), "google.storagetransfer.v1.CreateTransferJobRequest") + proto.RegisterType((*UpdateTransferJobRequest)(nil), "google.storagetransfer.v1.UpdateTransferJobRequest") + proto.RegisterType((*GetTransferJobRequest)(nil), "google.storagetransfer.v1.GetTransferJobRequest") + proto.RegisterType((*ListTransferJobsRequest)(nil), "google.storagetransfer.v1.ListTransferJobsRequest") + proto.RegisterType((*ListTransferJobsResponse)(nil), "google.storagetransfer.v1.ListTransferJobsResponse") + proto.RegisterType((*PauseTransferOperationRequest)(nil), "google.storagetransfer.v1.PauseTransferOperationRequest") + proto.RegisterType((*ResumeTransferOperationRequest)(nil), "google.storagetransfer.v1.ResumeTransferOperationRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for StorageTransferService service + +type StorageTransferServiceClient interface { + // Returns the Google service account that is used by Storage Transfer + // Service to access buckets in the project where transfers + // run or in other projects. Each Google service account is associated + // with one Google Cloud Platform Console project. Users + // should add this service account to the Google Cloud Storage bucket + // ACLs to grant access to Storage Transfer Service. This service + // account is created and owned by Storage Transfer Service and can + // only be used by Storage Transfer Service. + GetGoogleServiceAccount(ctx context.Context, in *GetGoogleServiceAccountRequest, opts ...grpc.CallOption) (*GoogleServiceAccount, error) + // Creates a transfer job that runs periodically. + CreateTransferJob(ctx context.Context, in *CreateTransferJobRequest, opts ...grpc.CallOption) (*TransferJob, error) + // Updates a transfer job. Updating a job's transfer spec does not affect + // transfer operations that are running already. Updating the scheduling + // of a job is not allowed. + UpdateTransferJob(ctx context.Context, in *UpdateTransferJobRequest, opts ...grpc.CallOption) (*TransferJob, error) + // Gets a transfer job. + GetTransferJob(ctx context.Context, in *GetTransferJobRequest, opts ...grpc.CallOption) (*TransferJob, error) + // Lists transfer jobs. + ListTransferJobs(ctx context.Context, in *ListTransferJobsRequest, opts ...grpc.CallOption) (*ListTransferJobsResponse, error) + // Pauses a transfer operation. + PauseTransferOperation(ctx context.Context, in *PauseTransferOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Resumes a transfer operation that is paused. + ResumeTransferOperation(ctx context.Context, in *ResumeTransferOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) +} + +type storageTransferServiceClient struct { + cc *grpc.ClientConn +} + +func NewStorageTransferServiceClient(cc *grpc.ClientConn) StorageTransferServiceClient { + return &storageTransferServiceClient{cc} +} + +func (c *storageTransferServiceClient) GetGoogleServiceAccount(ctx context.Context, in *GetGoogleServiceAccountRequest, opts ...grpc.CallOption) (*GoogleServiceAccount, error) { + out := new(GoogleServiceAccount) + err := grpc.Invoke(ctx, "/google.storagetransfer.v1.StorageTransferService/GetGoogleServiceAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageTransferServiceClient) CreateTransferJob(ctx context.Context, in *CreateTransferJobRequest, opts ...grpc.CallOption) (*TransferJob, error) { + out := new(TransferJob) + err := grpc.Invoke(ctx, "/google.storagetransfer.v1.StorageTransferService/CreateTransferJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageTransferServiceClient) UpdateTransferJob(ctx context.Context, in *UpdateTransferJobRequest, opts ...grpc.CallOption) (*TransferJob, error) { + out := new(TransferJob) + err := grpc.Invoke(ctx, "/google.storagetransfer.v1.StorageTransferService/UpdateTransferJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageTransferServiceClient) GetTransferJob(ctx context.Context, in *GetTransferJobRequest, opts ...grpc.CallOption) (*TransferJob, error) { + out := new(TransferJob) + err := grpc.Invoke(ctx, "/google.storagetransfer.v1.StorageTransferService/GetTransferJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageTransferServiceClient) ListTransferJobs(ctx context.Context, in *ListTransferJobsRequest, opts ...grpc.CallOption) (*ListTransferJobsResponse, error) { + out := new(ListTransferJobsResponse) + err := grpc.Invoke(ctx, "/google.storagetransfer.v1.StorageTransferService/ListTransferJobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageTransferServiceClient) PauseTransferOperation(ctx context.Context, in *PauseTransferOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.storagetransfer.v1.StorageTransferService/PauseTransferOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageTransferServiceClient) ResumeTransferOperation(ctx context.Context, in *ResumeTransferOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.storagetransfer.v1.StorageTransferService/ResumeTransferOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for StorageTransferService service + +type StorageTransferServiceServer interface { + // Returns the Google service account that is used by Storage Transfer + // Service to access buckets in the project where transfers + // run or in other projects. Each Google service account is associated + // with one Google Cloud Platform Console project. Users + // should add this service account to the Google Cloud Storage bucket + // ACLs to grant access to Storage Transfer Service. This service + // account is created and owned by Storage Transfer Service and can + // only be used by Storage Transfer Service. + GetGoogleServiceAccount(context.Context, *GetGoogleServiceAccountRequest) (*GoogleServiceAccount, error) + // Creates a transfer job that runs periodically. + CreateTransferJob(context.Context, *CreateTransferJobRequest) (*TransferJob, error) + // Updates a transfer job. Updating a job's transfer spec does not affect + // transfer operations that are running already. Updating the scheduling + // of a job is not allowed. + UpdateTransferJob(context.Context, *UpdateTransferJobRequest) (*TransferJob, error) + // Gets a transfer job. + GetTransferJob(context.Context, *GetTransferJobRequest) (*TransferJob, error) + // Lists transfer jobs. + ListTransferJobs(context.Context, *ListTransferJobsRequest) (*ListTransferJobsResponse, error) + // Pauses a transfer operation. + PauseTransferOperation(context.Context, *PauseTransferOperationRequest) (*google_protobuf1.Empty, error) + // Resumes a transfer operation that is paused. + ResumeTransferOperation(context.Context, *ResumeTransferOperationRequest) (*google_protobuf1.Empty, error) +} + +func RegisterStorageTransferServiceServer(s *grpc.Server, srv StorageTransferServiceServer) { + s.RegisterService(&_StorageTransferService_serviceDesc, srv) +} + +func _StorageTransferService_GetGoogleServiceAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGoogleServiceAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageTransferServiceServer).GetGoogleServiceAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storagetransfer.v1.StorageTransferService/GetGoogleServiceAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageTransferServiceServer).GetGoogleServiceAccount(ctx, req.(*GetGoogleServiceAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageTransferService_CreateTransferJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTransferJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageTransferServiceServer).CreateTransferJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storagetransfer.v1.StorageTransferService/CreateTransferJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageTransferServiceServer).CreateTransferJob(ctx, req.(*CreateTransferJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageTransferService_UpdateTransferJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTransferJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageTransferServiceServer).UpdateTransferJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storagetransfer.v1.StorageTransferService/UpdateTransferJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageTransferServiceServer).UpdateTransferJob(ctx, req.(*UpdateTransferJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageTransferService_GetTransferJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTransferJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageTransferServiceServer).GetTransferJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storagetransfer.v1.StorageTransferService/GetTransferJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageTransferServiceServer).GetTransferJob(ctx, req.(*GetTransferJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageTransferService_ListTransferJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTransferJobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageTransferServiceServer).ListTransferJobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storagetransfer.v1.StorageTransferService/ListTransferJobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageTransferServiceServer).ListTransferJobs(ctx, req.(*ListTransferJobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageTransferService_PauseTransferOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PauseTransferOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageTransferServiceServer).PauseTransferOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storagetransfer.v1.StorageTransferService/PauseTransferOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageTransferServiceServer).PauseTransferOperation(ctx, req.(*PauseTransferOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageTransferService_ResumeTransferOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResumeTransferOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageTransferServiceServer).ResumeTransferOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storagetransfer.v1.StorageTransferService/ResumeTransferOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageTransferServiceServer).ResumeTransferOperation(ctx, req.(*ResumeTransferOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _StorageTransferService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.storagetransfer.v1.StorageTransferService", + HandlerType: (*StorageTransferServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetGoogleServiceAccount", + Handler: _StorageTransferService_GetGoogleServiceAccount_Handler, + }, + { + MethodName: "CreateTransferJob", + Handler: _StorageTransferService_CreateTransferJob_Handler, + }, + { + MethodName: "UpdateTransferJob", + Handler: _StorageTransferService_UpdateTransferJob_Handler, + }, + { + MethodName: "GetTransferJob", + Handler: _StorageTransferService_GetTransferJob_Handler, + }, + { + MethodName: "ListTransferJobs", + Handler: _StorageTransferService_ListTransferJobs_Handler, + }, + { + MethodName: "PauseTransferOperation", + Handler: _StorageTransferService_PauseTransferOperation_Handler, + }, + { + MethodName: "ResumeTransferOperation", + Handler: _StorageTransferService_ResumeTransferOperation_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/storagetransfer/v1/transfer.proto", +} + +func init() { proto.RegisterFile("google/storagetransfer/v1/transfer.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 755 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdd, 0x4e, 0x13, 0x5b, + 0x14, 0xc7, 0xb3, 0xf9, 0x3a, 0xb0, 0x80, 0x73, 0x60, 0x27, 0xa7, 0x0c, 0xe5, 0xd0, 0x34, 0x43, + 0xd2, 0x83, 0xd5, 0xcc, 0x48, 0xeb, 0x85, 0x62, 0x8c, 0x11, 0xa3, 0x88, 0x9f, 0x58, 0xf0, 0xc6, + 0x0b, 0x27, 0xbb, 0xed, 0xea, 0x64, 0x4a, 0x3b, 0x7b, 0x9c, 0xbd, 0x4b, 0x04, 0xc2, 0x85, 0xbe, + 0x80, 0x89, 0xc6, 0xc4, 0xc4, 0x98, 0xf8, 0x12, 0x3e, 0x89, 0xaf, 0xe0, 0x43, 0xe8, 0x95, 0x66, + 0x76, 0x67, 0xca, 0xd0, 0x8f, 0x01, 0xd4, 0xbb, 0xd9, 0x7b, 0xaf, 0x8f, 0xdf, 0x5a, 0x8b, 0xff, + 0xa2, 0xb0, 0x6c, 0x73, 0x6e, 0x37, 0xd0, 0x14, 0x92, 0xfb, 0xcc, 0x46, 0xe9, 0x33, 0x57, 0xd4, + 0xd0, 0x37, 0x77, 0x57, 0xcc, 0xe8, 0xdb, 0xf0, 0x7c, 0x2e, 0x39, 0x9d, 0x6f, 0x5b, 0x1a, 0x5d, + 0x96, 0xc6, 0xee, 0x4a, 0xfa, 0xbf, 0x30, 0x08, 0xf3, 0x1c, 0x93, 0xb9, 0x2e, 0x97, 0x4c, 0x3a, + 0xdc, 0x15, 0x6d, 0xc7, 0xf4, 0x42, 0xf8, 0xaa, 0x4e, 0xe5, 0x56, 0xcd, 0xc4, 0xa6, 0x27, 0xf7, + 0xc2, 0xc7, 0x6c, 0xf7, 0x63, 0xcd, 0xc1, 0x46, 0xd5, 0x6a, 0x32, 0xb1, 0x13, 0x5a, 0x18, 0x27, + 0x13, 0x5a, 0x72, 0xcf, 0xc3, 0x30, 0x9d, 0x7e, 0x1d, 0x32, 0xeb, 0x28, 0xd7, 0x95, 0xd3, 0x16, + 0xfa, 0xbb, 0x4e, 0x05, 0x6f, 0x54, 0x2a, 0xbc, 0xe5, 0xca, 0x12, 0x3e, 0x6f, 0xa1, 0x90, 0x74, + 0x11, 0xc0, 0xf3, 0x79, 0x1d, 0x2b, 0xd2, 0x72, 0xaa, 0x1a, 0xc9, 0x92, 0xe5, 0x89, 0xd2, 0x44, + 0x78, 0xb3, 0x51, 0xd5, 0x11, 0xb4, 0x9b, 0x3e, 0x32, 0x89, 0xdb, 0x61, 0xf8, 0xbb, 0xbc, 0x1c, + 0xb9, 0x6e, 0xc0, 0x54, 0x27, 0x69, 0x9d, 0x97, 0x95, 0xf3, 0x64, 0x21, 0x67, 0x0c, 0xec, 0x8d, + 0x11, 0x0f, 0x32, 0x29, 0x8f, 0x0e, 0xfa, 0x0f, 0x02, 0xda, 0x13, 0xaf, 0xda, 0x3f, 0xcf, 0x3c, + 0x8c, 0xd7, 0x79, 0xd9, 0x72, 0x59, 0x13, 0x43, 0xc0, 0xbf, 0xea, 0xbc, 0xfc, 0x90, 0x35, 0xb1, + 0x8b, 0x7e, 0xa8, 0x8b, 0xbe, 0x87, 0x70, 0xf8, 0x97, 0x09, 0xe9, 0x33, 0xc8, 0xb4, 0x14, 0xa0, + 0x15, 0x8f, 0x68, 0x1d, 0x4d, 0x48, 0x1b, 0x51, 0xc1, 0xa3, 0x11, 0x19, 0xd1, 0x10, 0x8d, 0xdb, + 0x81, 0xc9, 0x03, 0x26, 0x76, 0x4a, 0xe9, 0x56, 0x77, 0x89, 0x9d, 0x37, 0xfd, 0x31, 0xfc, 0xbb, + 0x8e, 0xf2, 0x4f, 0x56, 0xaf, 0x37, 0x61, 0xee, 0xbe, 0x23, 0xe2, 0x31, 0x45, 0x14, 0x34, 0x05, + 0x63, 0x35, 0xa7, 0x21, 0xd1, 0x0f, 0x43, 0x86, 0x27, 0xba, 0x00, 0x13, 0x1e, 0xb3, 0xd1, 0x12, + 0xce, 0x3e, 0xaa, 0x82, 0x46, 0x4b, 0xe3, 0xc1, 0xc5, 0x96, 0xb3, 0xdf, 0x4e, 0x17, 0x3c, 0x4a, + 0xbe, 0x83, 0xae, 0x36, 0x1a, 0xa6, 0x63, 0x36, 0x6e, 0x07, 0x17, 0xfa, 0x6b, 0x02, 0x5a, 0x6f, + 0x3e, 0xe1, 0x71, 0x57, 0x20, 0xbd, 0x07, 0xd3, 0xf1, 0xbe, 0x09, 0x8d, 0x64, 0x87, 0xcf, 0x30, + 0x8a, 0xa9, 0xd8, 0x28, 0x04, 0xcd, 0xc1, 0x3f, 0x2e, 0xbe, 0x90, 0x56, 0x8c, 0xa6, 0x5d, 0xfc, + 0x74, 0x70, 0xbd, 0xd9, 0x21, 0x2a, 0xc2, 0xe2, 0x26, 0x6b, 0x89, 0x4e, 0xc3, 0x1f, 0x79, 0xe8, + 0x2b, 0x35, 0x46, 0x6d, 0xa0, 0x30, 0x12, 0xeb, 0xab, 0xfa, 0xd6, 0x2f, 0x41, 0xa6, 0x84, 0xa2, + 0xd5, 0x3c, 0x93, 0x57, 0xe1, 0xfb, 0x38, 0xa4, 0xb6, 0xda, 0x35, 0x44, 0x7e, 0xa1, 0xde, 0xe8, + 0x67, 0x02, 0x73, 0x03, 0x44, 0x48, 0xaf, 0x24, 0xd4, 0x9f, 0x2c, 0xdc, 0xb4, 0x99, 0xe4, 0xda, + 0xc7, 0x4f, 0x37, 0x5e, 0x7d, 0xf9, 0xfa, 0x76, 0x68, 0x99, 0xe6, 0x82, 0x6d, 0x61, 0xf7, 0xb1, + 0x10, 0xe6, 0xc1, 0xd1, 0x9f, 0xd3, 0x21, 0x7d, 0x4f, 0x60, 0xb6, 0x47, 0xfb, 0xb4, 0x98, 0x90, + 0x76, 0xd0, 0xa6, 0x48, 0x9f, 0x72, 0xcc, 0x7a, 0x4e, 0x21, 0x66, 0xf5, 0x99, 0xf8, 0x42, 0x0b, + 0x46, 0xbe, 0x7a, 0x4c, 0xc7, 0xf4, 0x03, 0x81, 0xd9, 0x9e, 0x75, 0x91, 0x88, 0x36, 0x68, 0xb9, + 0x9c, 0x1a, 0xed, 0x9c, 0x42, 0x5b, 0x2a, 0x64, 0x02, 0xb4, 0x83, 0x48, 0x91, 0xd7, 0xe2, 0x90, + 0x66, 0x3e, 0x7f, 0xb8, 0x4a, 0xf2, 0xf4, 0x0d, 0x81, 0xbf, 0x8f, 0x6b, 0x99, 0x5e, 0x4c, 0x9e, + 0xf3, 0xef, 0xb7, 0x8c, 0x9e, 0xc0, 0x45, 0xdf, 0x11, 0x98, 0xe9, 0x56, 0x27, 0x2d, 0x24, 0x24, + 0x19, 0xb0, 0x3a, 0xd2, 0xc5, 0x33, 0xf9, 0xb4, 0xe5, 0xaf, 0x6b, 0x8a, 0x92, 0xd2, 0x9e, 0xc1, + 0xd2, 0x8f, 0x04, 0x52, 0xfd, 0x45, 0x4a, 0x2f, 0x27, 0x64, 0x4a, 0xd4, 0x75, 0x3a, 0xd5, 0xb3, + 0x84, 0x6f, 0x05, 0xff, 0x66, 0xf5, 0x15, 0x85, 0x71, 0x5e, 0x57, 0x12, 0x38, 0x38, 0xd6, 0xa8, + 0x4e, 0x8c, 0xf6, 0x18, 0xbd, 0x20, 0x7e, 0x30, 0xcc, 0x4f, 0x04, 0xe6, 0x06, 0xec, 0x83, 0x44, + 0xf5, 0x26, 0xef, 0x90, 0x81, 0x84, 0x05, 0x45, 0x78, 0x41, 0xff, 0xff, 0x44, 0x42, 0x5f, 0x25, + 0x58, 0x25, 0xf9, 0xb5, 0x97, 0x04, 0x96, 0x2a, 0xbc, 0x99, 0x00, 0xa3, 0x92, 0xac, 0x4d, 0x47, + 0x34, 0x9b, 0xc1, 0xf1, 0xe9, 0x9d, 0xd0, 0xde, 0xe6, 0x0d, 0xe6, 0xda, 0x06, 0xf7, 0x6d, 0xd3, + 0x46, 0x57, 0x99, 0x86, 0xeb, 0x81, 0x79, 0x8e, 0xe8, 0xf3, 0x53, 0xe3, 0x6a, 0xd7, 0xd5, 0x37, + 0x42, 0xca, 0x63, 0xca, 0xaf, 0xf8, 0x33, 0x00, 0x00, 0xff, 0xff, 0x18, 0x96, 0x62, 0x38, 0x43, + 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer_types.pb.go b/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer_types.pb.go new file mode 100644 index 0000000..29f3a0e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer_types.pb.go @@ -0,0 +1,1219 @@ +// Code generated by protoc-gen-go. +// source: google/storagetransfer/v1/transfer_types.proto +// DO NOT EDIT! + +package storagetransfer + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/code" +import google_type "google.golang.org/genproto/googleapis/type/date" +import google_type1 "google.golang.org/genproto/googleapis/type/timeofday" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The status of the transfer job. +type TransferJob_Status int32 + +const ( + // Zero is an illegal value. + TransferJob_STATUS_UNSPECIFIED TransferJob_Status = 0 + // New transfers will be performed based on the schedule. + TransferJob_ENABLED TransferJob_Status = 1 + // New transfers will not be scheduled. + TransferJob_DISABLED TransferJob_Status = 2 + // This is a soft delete state. After a transfer job is set to this + // state, the job and all the transfer executions are subject to + // garbage collection. + TransferJob_DELETED TransferJob_Status = 3 +) + +var TransferJob_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "ENABLED", + 2: "DISABLED", + 3: "DELETED", +} +var TransferJob_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "ENABLED": 1, + "DISABLED": 2, + "DELETED": 3, +} + +func (x TransferJob_Status) String() string { + return proto.EnumName(TransferJob_Status_name, int32(x)) +} +func (TransferJob_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 0} } + +// The status of a TransferOperation. +type TransferOperation_Status int32 + +const ( + // Zero is an illegal value. + TransferOperation_STATUS_UNSPECIFIED TransferOperation_Status = 0 + // In progress. + TransferOperation_IN_PROGRESS TransferOperation_Status = 1 + // Paused. + TransferOperation_PAUSED TransferOperation_Status = 2 + // Completed successfully. + TransferOperation_SUCCESS TransferOperation_Status = 3 + // Terminated due to an unrecoverable failure. + TransferOperation_FAILED TransferOperation_Status = 4 + // Aborted by the user. + TransferOperation_ABORTED TransferOperation_Status = 5 +) + +var TransferOperation_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "IN_PROGRESS", + 2: "PAUSED", + 3: "SUCCESS", + 4: "FAILED", + 5: "ABORTED", +} +var TransferOperation_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "IN_PROGRESS": 1, + "PAUSED": 2, + "SUCCESS": 3, + "FAILED": 4, + "ABORTED": 5, +} + +func (x TransferOperation_Status) String() string { + return proto.EnumName(TransferOperation_Status_name, int32(x)) +} +func (TransferOperation_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{13, 0} } + +// Google service account +type GoogleServiceAccount struct { + // Required. + AccountEmail string `protobuf:"bytes,1,opt,name=account_email,json=accountEmail" json:"account_email,omitempty"` +} + +func (m *GoogleServiceAccount) Reset() { *m = GoogleServiceAccount{} } +func (m *GoogleServiceAccount) String() string { return proto.CompactTextString(m) } +func (*GoogleServiceAccount) ProtoMessage() {} +func (*GoogleServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *GoogleServiceAccount) GetAccountEmail() string { + if m != nil { + return m.AccountEmail + } + return "" +} + +// AWS access key (see +// [AWS Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html)). +type AwsAccessKey struct { + // AWS access key ID. + // Required. + AccessKeyId string `protobuf:"bytes,1,opt,name=access_key_id,json=accessKeyId" json:"access_key_id,omitempty"` + // AWS secret access key. This field is not returned in RPC responses. + // Required. + SecretAccessKey string `protobuf:"bytes,2,opt,name=secret_access_key,json=secretAccessKey" json:"secret_access_key,omitempty"` +} + +func (m *AwsAccessKey) Reset() { *m = AwsAccessKey{} } +func (m *AwsAccessKey) String() string { return proto.CompactTextString(m) } +func (*AwsAccessKey) ProtoMessage() {} +func (*AwsAccessKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *AwsAccessKey) GetAccessKeyId() string { + if m != nil { + return m.AccessKeyId + } + return "" +} + +func (m *AwsAccessKey) GetSecretAccessKey() string { + if m != nil { + return m.SecretAccessKey + } + return "" +} + +// Conditions that determine which objects will be transferred. +type ObjectConditions struct { + // If unspecified, `minTimeElapsedSinceLastModification` takes a zero value + // and `maxTimeElapsedSinceLastModification` takes the maximum possible + // value of Duration. Objects that satisfy the object conditions + // must either have a `lastModificationTime` greater or equal to + // `NOW` - `maxTimeElapsedSinceLastModification` and less than + // `NOW` - `minTimeElapsedSinceLastModification`, or not have a + // `lastModificationTime`. + MinTimeElapsedSinceLastModification *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=min_time_elapsed_since_last_modification,json=minTimeElapsedSinceLastModification" json:"min_time_elapsed_since_last_modification,omitempty"` + // `maxTimeElapsedSinceLastModification` is the complement to + // `minTimeElapsedSinceLastModification`. + MaxTimeElapsedSinceLastModification *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=max_time_elapsed_since_last_modification,json=maxTimeElapsedSinceLastModification" json:"max_time_elapsed_since_last_modification,omitempty"` + // If `includePrefixes` is specified, objects that satisfy the object + // conditions must have names that start with one of the `includePrefixes` + // and that do not start with any of the `excludePrefixes`. If `includePrefixes` + // is not specified, all objects except those that have names starting with + // one of the `excludePrefixes` must satisfy the object conditions. + // + // Requirements: + // + // * Each include-prefix and exclude-prefix can contain any sequence of + // Unicode characters, of max length 1024 bytes when UTF8-encoded, and + // must not contain Carriage Return or Line Feed characters. Wildcard + // matching and regular expression matching are not supported. + // + // * Each include-prefix and exclude-prefix must omit the leading slash. + // For example, to include the `requests.gz` object in a transfer from + // `s3://my-aws-bucket/logs/y=2015/requests.gz`, specify the include + // prefix as `logs/y=2015/requests.gz`. + // + // * None of the include-prefix or the exclude-prefix values can be empty, + // if specified. + // + // * Each include-prefix must include a distinct portion of the object + // namespace, i.e., no include-prefix may be a prefix of another + // include-prefix. + // + // * Each exclude-prefix must exclude a distinct portion of the object + // namespace, i.e., no exclude-prefix may be a prefix of another + // exclude-prefix. + // + // * If `includePrefixes` is specified, then each exclude-prefix must start + // with the value of a path explicitly included by `includePrefixes`. + // + // The max size of `includePrefixes` is 20. + IncludePrefixes []string `protobuf:"bytes,3,rep,name=include_prefixes,json=includePrefixes" json:"include_prefixes,omitempty"` + // `excludePrefixes` must follow the requirements described for + // `includePrefixes`. + // + // The max size of `excludePrefixes` is 20. + ExcludePrefixes []string `protobuf:"bytes,4,rep,name=exclude_prefixes,json=excludePrefixes" json:"exclude_prefixes,omitempty"` +} + +func (m *ObjectConditions) Reset() { *m = ObjectConditions{} } +func (m *ObjectConditions) String() string { return proto.CompactTextString(m) } +func (*ObjectConditions) ProtoMessage() {} +func (*ObjectConditions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ObjectConditions) GetMinTimeElapsedSinceLastModification() *google_protobuf3.Duration { + if m != nil { + return m.MinTimeElapsedSinceLastModification + } + return nil +} + +func (m *ObjectConditions) GetMaxTimeElapsedSinceLastModification() *google_protobuf3.Duration { + if m != nil { + return m.MaxTimeElapsedSinceLastModification + } + return nil +} + +func (m *ObjectConditions) GetIncludePrefixes() []string { + if m != nil { + return m.IncludePrefixes + } + return nil +} + +func (m *ObjectConditions) GetExcludePrefixes() []string { + if m != nil { + return m.ExcludePrefixes + } + return nil +} + +// In a GcsData, an object's name is the Google Cloud Storage object's name and +// its `lastModificationTime` refers to the object's updated time, which changes +// when the content or the metadata of the object is updated. +type GcsData struct { + // Google Cloud Storage bucket name (see + // [Bucket Name Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)). + // Required. + BucketName string `protobuf:"bytes,1,opt,name=bucket_name,json=bucketName" json:"bucket_name,omitempty"` +} + +func (m *GcsData) Reset() { *m = GcsData{} } +func (m *GcsData) String() string { return proto.CompactTextString(m) } +func (*GcsData) ProtoMessage() {} +func (*GcsData) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *GcsData) GetBucketName() string { + if m != nil { + return m.BucketName + } + return "" +} + +// An AwsS3Data can be a data source, but not a data sink. +// In an AwsS3Data, an object's name is the S3 object's key name. +type AwsS3Data struct { + // S3 Bucket name (see + // [Creating a bucket](http://docs.aws.amazon.com/AmazonS3/latest/dev/create-bucket-get-location-example.html)). + // Required. + BucketName string `protobuf:"bytes,1,opt,name=bucket_name,json=bucketName" json:"bucket_name,omitempty"` + // AWS access key used to sign the API requests to the AWS S3 bucket. + // Permissions on the bucket must be granted to the access ID of the + // AWS access key. + // Required. + AwsAccessKey *AwsAccessKey `protobuf:"bytes,2,opt,name=aws_access_key,json=awsAccessKey" json:"aws_access_key,omitempty"` +} + +func (m *AwsS3Data) Reset() { *m = AwsS3Data{} } +func (m *AwsS3Data) String() string { return proto.CompactTextString(m) } +func (*AwsS3Data) ProtoMessage() {} +func (*AwsS3Data) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *AwsS3Data) GetBucketName() string { + if m != nil { + return m.BucketName + } + return "" +} + +func (m *AwsS3Data) GetAwsAccessKey() *AwsAccessKey { + if m != nil { + return m.AwsAccessKey + } + return nil +} + +// An HttpData specifies a list of objects on the web to be transferred over +// HTTP. The information of the objects to be transferred is contained in a +// file referenced by a URL. The first line in the file must be +// "TsvHttpData-1.0", which specifies the format of the file. Subsequent lines +// specify the information of the list of objects, one object per list entry. +// Each entry has the following tab-delimited fields: +// +// * HTTP URL - The location of the object. +// +// * Length - The size of the object in bytes. +// +// * MD5 - The base64-encoded MD5 hash of the object. +// +// For an example of a valid TSV file, see +// [Transferring data from URLs](https://cloud.google.com/storage/transfer/#urls) +// +// When transferring data based on a URL list, keep the following in mind: +// +// * When an object located at `http(s)://hostname:port/<URL-path>` is transferred +// to a data sink, the name of the object at the data sink is +// `<hostname>/<URL-path>`. +// +// * If the specified size of an object does not match the actual size of the +// object fetched, the object will not be transferred. +// +// * If the specified MD5 does not match the MD5 computed from the transferred +// bytes, the object transfer will fail. For more information, see +// [Generating MD5 hashes](https://cloud.google.com/storage/transfer/#md5) +// +// * Ensure that each URL you specify is publicly accessible. For +// example, in Google Cloud Storage you can +// [share an object publicly] +// (https://cloud.google.com/storage/docs/cloud-console#_sharingdata) and get +// a link to it. +// +// * Storage Transfer Service obeys `robots.txt` rules and requires the source +// HTTP server to support `Range` requests and to return a `Content-Length` +// header in each response. +// +// * [ObjectConditions](#ObjectConditions) have no effect when filtering objects +// to transfer. +type HttpData struct { + // The URL that points to the file that stores the object list entries. + // This file must allow public access. Currently, only URLs with HTTP and + // HTTPS schemes are supported. + // Required. + ListUrl string `protobuf:"bytes,1,opt,name=list_url,json=listUrl" json:"list_url,omitempty"` +} + +func (m *HttpData) Reset() { *m = HttpData{} } +func (m *HttpData) String() string { return proto.CompactTextString(m) } +func (*HttpData) ProtoMessage() {} +func (*HttpData) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *HttpData) GetListUrl() string { + if m != nil { + return m.ListUrl + } + return "" +} + +// TransferOptions uses three boolean parameters to define the actions +// to be performed on objects in a transfer. +type TransferOptions struct { + // Whether overwriting objects that already exist in the sink is allowed. + OverwriteObjectsAlreadyExistingInSink bool `protobuf:"varint,1,opt,name=overwrite_objects_already_existing_in_sink,json=overwriteObjectsAlreadyExistingInSink" json:"overwrite_objects_already_existing_in_sink,omitempty"` + // Whether objects that exist only in the sink should be deleted. + DeleteObjectsUniqueInSink bool `protobuf:"varint,2,opt,name=delete_objects_unique_in_sink,json=deleteObjectsUniqueInSink" json:"delete_objects_unique_in_sink,omitempty"` + // Whether objects should be deleted from the source after they are + // transferred to the sink. + DeleteObjectsFromSourceAfterTransfer bool `protobuf:"varint,3,opt,name=delete_objects_from_source_after_transfer,json=deleteObjectsFromSourceAfterTransfer" json:"delete_objects_from_source_after_transfer,omitempty"` +} + +func (m *TransferOptions) Reset() { *m = TransferOptions{} } +func (m *TransferOptions) String() string { return proto.CompactTextString(m) } +func (*TransferOptions) ProtoMessage() {} +func (*TransferOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *TransferOptions) GetOverwriteObjectsAlreadyExistingInSink() bool { + if m != nil { + return m.OverwriteObjectsAlreadyExistingInSink + } + return false +} + +func (m *TransferOptions) GetDeleteObjectsUniqueInSink() bool { + if m != nil { + return m.DeleteObjectsUniqueInSink + } + return false +} + +func (m *TransferOptions) GetDeleteObjectsFromSourceAfterTransfer() bool { + if m != nil { + return m.DeleteObjectsFromSourceAfterTransfer + } + return false +} + +// Configuration for running a transfer. +type TransferSpec struct { + // The read source of the data. + // + // Types that are valid to be assigned to DataSource: + // *TransferSpec_GcsDataSource + // *TransferSpec_AwsS3DataSource + // *TransferSpec_HttpDataSource + DataSource isTransferSpec_DataSource `protobuf_oneof:"data_source"` + // The write sink for the data. + // + // Types that are valid to be assigned to DataSink: + // *TransferSpec_GcsDataSink + DataSink isTransferSpec_DataSink `protobuf_oneof:"data_sink"` + // Only objects that satisfy these object conditions are included in the set + // of data source and data sink objects. Object conditions based on + // objects' `lastModificationTime` do not exclude objects in a data sink. + ObjectConditions *ObjectConditions `protobuf:"bytes,5,opt,name=object_conditions,json=objectConditions" json:"object_conditions,omitempty"` + // If the option `deleteObjectsUniqueInSink` is `true`, object conditions + // based on objects' `lastModificationTime` are ignored and do not exclude + // objects in a data source or a data sink. + TransferOptions *TransferOptions `protobuf:"bytes,6,opt,name=transfer_options,json=transferOptions" json:"transfer_options,omitempty"` +} + +func (m *TransferSpec) Reset() { *m = TransferSpec{} } +func (m *TransferSpec) String() string { return proto.CompactTextString(m) } +func (*TransferSpec) ProtoMessage() {} +func (*TransferSpec) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +type isTransferSpec_DataSource interface { + isTransferSpec_DataSource() +} +type isTransferSpec_DataSink interface { + isTransferSpec_DataSink() +} + +type TransferSpec_GcsDataSource struct { + GcsDataSource *GcsData `protobuf:"bytes,1,opt,name=gcs_data_source,json=gcsDataSource,oneof"` +} +type TransferSpec_AwsS3DataSource struct { + AwsS3DataSource *AwsS3Data `protobuf:"bytes,2,opt,name=aws_s3_data_source,json=awsS3DataSource,oneof"` +} +type TransferSpec_HttpDataSource struct { + HttpDataSource *HttpData `protobuf:"bytes,3,opt,name=http_data_source,json=httpDataSource,oneof"` +} +type TransferSpec_GcsDataSink struct { + GcsDataSink *GcsData `protobuf:"bytes,4,opt,name=gcs_data_sink,json=gcsDataSink,oneof"` +} + +func (*TransferSpec_GcsDataSource) isTransferSpec_DataSource() {} +func (*TransferSpec_AwsS3DataSource) isTransferSpec_DataSource() {} +func (*TransferSpec_HttpDataSource) isTransferSpec_DataSource() {} +func (*TransferSpec_GcsDataSink) isTransferSpec_DataSink() {} + +func (m *TransferSpec) GetDataSource() isTransferSpec_DataSource { + if m != nil { + return m.DataSource + } + return nil +} +func (m *TransferSpec) GetDataSink() isTransferSpec_DataSink { + if m != nil { + return m.DataSink + } + return nil +} + +func (m *TransferSpec) GetGcsDataSource() *GcsData { + if x, ok := m.GetDataSource().(*TransferSpec_GcsDataSource); ok { + return x.GcsDataSource + } + return nil +} + +func (m *TransferSpec) GetAwsS3DataSource() *AwsS3Data { + if x, ok := m.GetDataSource().(*TransferSpec_AwsS3DataSource); ok { + return x.AwsS3DataSource + } + return nil +} + +func (m *TransferSpec) GetHttpDataSource() *HttpData { + if x, ok := m.GetDataSource().(*TransferSpec_HttpDataSource); ok { + return x.HttpDataSource + } + return nil +} + +func (m *TransferSpec) GetGcsDataSink() *GcsData { + if x, ok := m.GetDataSink().(*TransferSpec_GcsDataSink); ok { + return x.GcsDataSink + } + return nil +} + +func (m *TransferSpec) GetObjectConditions() *ObjectConditions { + if m != nil { + return m.ObjectConditions + } + return nil +} + +func (m *TransferSpec) GetTransferOptions() *TransferOptions { + if m != nil { + return m.TransferOptions + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TransferSpec) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TransferSpec_OneofMarshaler, _TransferSpec_OneofUnmarshaler, _TransferSpec_OneofSizer, []interface{}{ + (*TransferSpec_GcsDataSource)(nil), + (*TransferSpec_AwsS3DataSource)(nil), + (*TransferSpec_HttpDataSource)(nil), + (*TransferSpec_GcsDataSink)(nil), + } +} + +func _TransferSpec_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TransferSpec) + // data_source + switch x := m.DataSource.(type) { + case *TransferSpec_GcsDataSource: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.GcsDataSource); err != nil { + return err + } + case *TransferSpec_AwsS3DataSource: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AwsS3DataSource); err != nil { + return err + } + case *TransferSpec_HttpDataSource: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HttpDataSource); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransferSpec.DataSource has unexpected type %T", x) + } + // data_sink + switch x := m.DataSink.(type) { + case *TransferSpec_GcsDataSink: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.GcsDataSink); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransferSpec.DataSink has unexpected type %T", x) + } + return nil +} + +func _TransferSpec_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TransferSpec) + switch tag { + case 1: // data_source.gcs_data_source + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GcsData) + err := b.DecodeMessage(msg) + m.DataSource = &TransferSpec_GcsDataSource{msg} + return true, err + case 2: // data_source.aws_s3_data_source + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AwsS3Data) + err := b.DecodeMessage(msg) + m.DataSource = &TransferSpec_AwsS3DataSource{msg} + return true, err + case 3: // data_source.http_data_source + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(HttpData) + err := b.DecodeMessage(msg) + m.DataSource = &TransferSpec_HttpDataSource{msg} + return true, err + case 4: // data_sink.gcs_data_sink + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GcsData) + err := b.DecodeMessage(msg) + m.DataSink = &TransferSpec_GcsDataSink{msg} + return true, err + default: + return false, nil + } +} + +func _TransferSpec_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TransferSpec) + // data_source + switch x := m.DataSource.(type) { + case *TransferSpec_GcsDataSource: + s := proto.Size(x.GcsDataSource) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransferSpec_AwsS3DataSource: + s := proto.Size(x.AwsS3DataSource) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransferSpec_HttpDataSource: + s := proto.Size(x.HttpDataSource) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // data_sink + switch x := m.DataSink.(type) { + case *TransferSpec_GcsDataSink: + s := proto.Size(x.GcsDataSink) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Transfers can be scheduled to recur or to run just once. +type Schedule struct { + // The first day the recurring transfer is scheduled to run. If + // `scheduleStartDate` is in the past, the transfer will run for the first + // time on the following day. + // Required. + ScheduleStartDate *google_type.Date `protobuf:"bytes,1,opt,name=schedule_start_date,json=scheduleStartDate" json:"schedule_start_date,omitempty"` + // The last day the recurring transfer will be run. If `scheduleEndDate` + // is the same as `scheduleStartDate`, the transfer will be executed only + // once. + ScheduleEndDate *google_type.Date `protobuf:"bytes,2,opt,name=schedule_end_date,json=scheduleEndDate" json:"schedule_end_date,omitempty"` + // The time in UTC at which the transfer will be scheduled to start in a day. + // Transfers may start later than this time. If not specified, recurring and + // one-time transfers that are scheduled to run today will run immediately; + // recurring transfers that are scheduled to run on a future date will start + // at approximately midnight UTC on that date. Note that when configuring a + // transfer with the Cloud Platform Console, the transfer's start time in a + // day is specified in your local timezone. + StartTimeOfDay *google_type1.TimeOfDay `protobuf:"bytes,3,opt,name=start_time_of_day,json=startTimeOfDay" json:"start_time_of_day,omitempty"` +} + +func (m *Schedule) Reset() { *m = Schedule{} } +func (m *Schedule) String() string { return proto.CompactTextString(m) } +func (*Schedule) ProtoMessage() {} +func (*Schedule) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *Schedule) GetScheduleStartDate() *google_type.Date { + if m != nil { + return m.ScheduleStartDate + } + return nil +} + +func (m *Schedule) GetScheduleEndDate() *google_type.Date { + if m != nil { + return m.ScheduleEndDate + } + return nil +} + +func (m *Schedule) GetStartTimeOfDay() *google_type1.TimeOfDay { + if m != nil { + return m.StartTimeOfDay + } + return nil +} + +// This resource represents the configuration of a transfer job that runs +// periodically. +type TransferJob struct { + // A globally unique name assigned by Storage Transfer Service when the + // job is created. This field should be left empty in requests to create a new + // transfer job; otherwise, the requests result in an `INVALID_ARGUMENT` + // error. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A description provided by the user for the job. Its max length is 1024 + // bytes when Unicode-encoded. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // The ID of the Google Cloud Platform Console project that owns the job. + // Required. + ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Transfer specification. + // Required. + TransferSpec *TransferSpec `protobuf:"bytes,4,opt,name=transfer_spec,json=transferSpec" json:"transfer_spec,omitempty"` + // Schedule specification. + // Required. + Schedule *Schedule `protobuf:"bytes,5,opt,name=schedule" json:"schedule,omitempty"` + // Status of the job. This value MUST be specified for + // `CreateTransferJobRequests`. + // + // NOTE: The effect of the new job status takes place during a subsequent job + // run. For example, if you change the job status from `ENABLED` to + // `DISABLED`, and an operation spawned by the transfer is running, the status + // change would not affect the current operation. + Status TransferJob_Status `protobuf:"varint,6,opt,name=status,enum=google.storagetransfer.v1.TransferJob_Status" json:"status,omitempty"` + // This field cannot be changed by user requests. + CreationTime *google_protobuf4.Timestamp `protobuf:"bytes,7,opt,name=creation_time,json=creationTime" json:"creation_time,omitempty"` + // This field cannot be changed by user requests. + LastModificationTime *google_protobuf4.Timestamp `protobuf:"bytes,8,opt,name=last_modification_time,json=lastModificationTime" json:"last_modification_time,omitempty"` + // This field cannot be changed by user requests. + DeletionTime *google_protobuf4.Timestamp `protobuf:"bytes,9,opt,name=deletion_time,json=deletionTime" json:"deletion_time,omitempty"` +} + +func (m *TransferJob) Reset() { *m = TransferJob{} } +func (m *TransferJob) String() string { return proto.CompactTextString(m) } +func (*TransferJob) ProtoMessage() {} +func (*TransferJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *TransferJob) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *TransferJob) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *TransferJob) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *TransferJob) GetTransferSpec() *TransferSpec { + if m != nil { + return m.TransferSpec + } + return nil +} + +func (m *TransferJob) GetSchedule() *Schedule { + if m != nil { + return m.Schedule + } + return nil +} + +func (m *TransferJob) GetStatus() TransferJob_Status { + if m != nil { + return m.Status + } + return TransferJob_STATUS_UNSPECIFIED +} + +func (m *TransferJob) GetCreationTime() *google_protobuf4.Timestamp { + if m != nil { + return m.CreationTime + } + return nil +} + +func (m *TransferJob) GetLastModificationTime() *google_protobuf4.Timestamp { + if m != nil { + return m.LastModificationTime + } + return nil +} + +func (m *TransferJob) GetDeletionTime() *google_protobuf4.Timestamp { + if m != nil { + return m.DeletionTime + } + return nil +} + +// An entry describing an error that has occurred. +type ErrorLogEntry struct { + // A URL that refers to the target (a data source, a data sink, + // or an object) with which the error is associated. + // Required. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // A list of messages that carry the error details. + ErrorDetails []string `protobuf:"bytes,3,rep,name=error_details,json=errorDetails" json:"error_details,omitempty"` +} + +func (m *ErrorLogEntry) Reset() { *m = ErrorLogEntry{} } +func (m *ErrorLogEntry) String() string { return proto.CompactTextString(m) } +func (*ErrorLogEntry) ProtoMessage() {} +func (*ErrorLogEntry) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *ErrorLogEntry) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *ErrorLogEntry) GetErrorDetails() []string { + if m != nil { + return m.ErrorDetails + } + return nil +} + +// A summary of errors by error code, plus a count and sample error log +// entries. +type ErrorSummary struct { + // Required. + ErrorCode google_rpc.Code `protobuf:"varint,1,opt,name=error_code,json=errorCode,enum=google.rpc.Code" json:"error_code,omitempty"` + // Count of this type of error. + // Required. + ErrorCount int64 `protobuf:"varint,2,opt,name=error_count,json=errorCount" json:"error_count,omitempty"` + // Error samples. + ErrorLogEntries []*ErrorLogEntry `protobuf:"bytes,3,rep,name=error_log_entries,json=errorLogEntries" json:"error_log_entries,omitempty"` +} + +func (m *ErrorSummary) Reset() { *m = ErrorSummary{} } +func (m *ErrorSummary) String() string { return proto.CompactTextString(m) } +func (*ErrorSummary) ProtoMessage() {} +func (*ErrorSummary) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *ErrorSummary) GetErrorCode() google_rpc.Code { + if m != nil { + return m.ErrorCode + } + return google_rpc.Code_OK +} + +func (m *ErrorSummary) GetErrorCount() int64 { + if m != nil { + return m.ErrorCount + } + return 0 +} + +func (m *ErrorSummary) GetErrorLogEntries() []*ErrorLogEntry { + if m != nil { + return m.ErrorLogEntries + } + return nil +} + +// A collection of counters that report the progress of a transfer operation. +type TransferCounters struct { + // Objects found in the data source that are scheduled to be transferred, + // which will be copied, excluded based on conditions, or skipped due to + // failures. + ObjectsFoundFromSource int64 `protobuf:"varint,1,opt,name=objects_found_from_source,json=objectsFoundFromSource" json:"objects_found_from_source,omitempty"` + // Bytes found in the data source that are scheduled to be transferred, + // which will be copied, excluded based on conditions, or skipped due to + // failures. + BytesFoundFromSource int64 `protobuf:"varint,2,opt,name=bytes_found_from_source,json=bytesFoundFromSource" json:"bytes_found_from_source,omitempty"` + // Objects found only in the data sink that are scheduled to be deleted. + ObjectsFoundOnlyFromSink int64 `protobuf:"varint,3,opt,name=objects_found_only_from_sink,json=objectsFoundOnlyFromSink" json:"objects_found_only_from_sink,omitempty"` + // Bytes found only in the data sink that are scheduled to be deleted. + BytesFoundOnlyFromSink int64 `protobuf:"varint,4,opt,name=bytes_found_only_from_sink,json=bytesFoundOnlyFromSink" json:"bytes_found_only_from_sink,omitempty"` + // Objects in the data source that are not transferred because they already + // exist in the data sink. + ObjectsFromSourceSkippedBySync int64 `protobuf:"varint,5,opt,name=objects_from_source_skipped_by_sync,json=objectsFromSourceSkippedBySync" json:"objects_from_source_skipped_by_sync,omitempty"` + // Bytes in the data source that are not transferred because they already + // exist in the data sink. + BytesFromSourceSkippedBySync int64 `protobuf:"varint,6,opt,name=bytes_from_source_skipped_by_sync,json=bytesFromSourceSkippedBySync" json:"bytes_from_source_skipped_by_sync,omitempty"` + // Objects that are copied to the data sink. + ObjectsCopiedToSink int64 `protobuf:"varint,7,opt,name=objects_copied_to_sink,json=objectsCopiedToSink" json:"objects_copied_to_sink,omitempty"` + // Bytes that are copied to the data sink. + BytesCopiedToSink int64 `protobuf:"varint,8,opt,name=bytes_copied_to_sink,json=bytesCopiedToSink" json:"bytes_copied_to_sink,omitempty"` + // Objects that are deleted from the data source. + ObjectsDeletedFromSource int64 `protobuf:"varint,9,opt,name=objects_deleted_from_source,json=objectsDeletedFromSource" json:"objects_deleted_from_source,omitempty"` + // Bytes that are deleted from the data source. + BytesDeletedFromSource int64 `protobuf:"varint,10,opt,name=bytes_deleted_from_source,json=bytesDeletedFromSource" json:"bytes_deleted_from_source,omitempty"` + // Objects that are deleted from the data sink. + ObjectsDeletedFromSink int64 `protobuf:"varint,11,opt,name=objects_deleted_from_sink,json=objectsDeletedFromSink" json:"objects_deleted_from_sink,omitempty"` + // Bytes that are deleted from the data sink. + BytesDeletedFromSink int64 `protobuf:"varint,12,opt,name=bytes_deleted_from_sink,json=bytesDeletedFromSink" json:"bytes_deleted_from_sink,omitempty"` + // Objects in the data source that failed during the transfer. + ObjectsFromSourceFailed int64 `protobuf:"varint,13,opt,name=objects_from_source_failed,json=objectsFromSourceFailed" json:"objects_from_source_failed,omitempty"` + // Bytes in the data source that failed during the transfer. + BytesFromSourceFailed int64 `protobuf:"varint,14,opt,name=bytes_from_source_failed,json=bytesFromSourceFailed" json:"bytes_from_source_failed,omitempty"` + // Objects that failed to be deleted from the data sink. + ObjectsFailedToDeleteFromSink int64 `protobuf:"varint,15,opt,name=objects_failed_to_delete_from_sink,json=objectsFailedToDeleteFromSink" json:"objects_failed_to_delete_from_sink,omitempty"` + // Bytes that failed to be deleted from the data sink. + BytesFailedToDeleteFromSink int64 `protobuf:"varint,16,opt,name=bytes_failed_to_delete_from_sink,json=bytesFailedToDeleteFromSink" json:"bytes_failed_to_delete_from_sink,omitempty"` +} + +func (m *TransferCounters) Reset() { *m = TransferCounters{} } +func (m *TransferCounters) String() string { return proto.CompactTextString(m) } +func (*TransferCounters) ProtoMessage() {} +func (*TransferCounters) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *TransferCounters) GetObjectsFoundFromSource() int64 { + if m != nil { + return m.ObjectsFoundFromSource + } + return 0 +} + +func (m *TransferCounters) GetBytesFoundFromSource() int64 { + if m != nil { + return m.BytesFoundFromSource + } + return 0 +} + +func (m *TransferCounters) GetObjectsFoundOnlyFromSink() int64 { + if m != nil { + return m.ObjectsFoundOnlyFromSink + } + return 0 +} + +func (m *TransferCounters) GetBytesFoundOnlyFromSink() int64 { + if m != nil { + return m.BytesFoundOnlyFromSink + } + return 0 +} + +func (m *TransferCounters) GetObjectsFromSourceSkippedBySync() int64 { + if m != nil { + return m.ObjectsFromSourceSkippedBySync + } + return 0 +} + +func (m *TransferCounters) GetBytesFromSourceSkippedBySync() int64 { + if m != nil { + return m.BytesFromSourceSkippedBySync + } + return 0 +} + +func (m *TransferCounters) GetObjectsCopiedToSink() int64 { + if m != nil { + return m.ObjectsCopiedToSink + } + return 0 +} + +func (m *TransferCounters) GetBytesCopiedToSink() int64 { + if m != nil { + return m.BytesCopiedToSink + } + return 0 +} + +func (m *TransferCounters) GetObjectsDeletedFromSource() int64 { + if m != nil { + return m.ObjectsDeletedFromSource + } + return 0 +} + +func (m *TransferCounters) GetBytesDeletedFromSource() int64 { + if m != nil { + return m.BytesDeletedFromSource + } + return 0 +} + +func (m *TransferCounters) GetObjectsDeletedFromSink() int64 { + if m != nil { + return m.ObjectsDeletedFromSink + } + return 0 +} + +func (m *TransferCounters) GetBytesDeletedFromSink() int64 { + if m != nil { + return m.BytesDeletedFromSink + } + return 0 +} + +func (m *TransferCounters) GetObjectsFromSourceFailed() int64 { + if m != nil { + return m.ObjectsFromSourceFailed + } + return 0 +} + +func (m *TransferCounters) GetBytesFromSourceFailed() int64 { + if m != nil { + return m.BytesFromSourceFailed + } + return 0 +} + +func (m *TransferCounters) GetObjectsFailedToDeleteFromSink() int64 { + if m != nil { + return m.ObjectsFailedToDeleteFromSink + } + return 0 +} + +func (m *TransferCounters) GetBytesFailedToDeleteFromSink() int64 { + if m != nil { + return m.BytesFailedToDeleteFromSink + } + return 0 +} + +// A description of the execution of a transfer. +type TransferOperation struct { + // A globally unique ID assigned by the system. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The ID of the Google Cloud Platform Console project that owns the operation. + // Required. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Transfer specification. + // Required. + TransferSpec *TransferSpec `protobuf:"bytes,3,opt,name=transfer_spec,json=transferSpec" json:"transfer_spec,omitempty"` + // Start time of this transfer execution. + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // End time of this transfer execution. + EndTime *google_protobuf4.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Status of the transfer operation. + Status TransferOperation_Status `protobuf:"varint,6,opt,name=status,enum=google.storagetransfer.v1.TransferOperation_Status" json:"status,omitempty"` + // Information about the progress of the transfer operation. + Counters *TransferCounters `protobuf:"bytes,7,opt,name=counters" json:"counters,omitempty"` + // Summarizes errors encountered with sample error log entries. + ErrorBreakdowns []*ErrorSummary `protobuf:"bytes,8,rep,name=error_breakdowns,json=errorBreakdowns" json:"error_breakdowns,omitempty"` + // The name of the transfer job that triggers this transfer operation. + TransferJobName string `protobuf:"bytes,9,opt,name=transfer_job_name,json=transferJobName" json:"transfer_job_name,omitempty"` +} + +func (m *TransferOperation) Reset() { *m = TransferOperation{} } +func (m *TransferOperation) String() string { return proto.CompactTextString(m) } +func (*TransferOperation) ProtoMessage() {} +func (*TransferOperation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *TransferOperation) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *TransferOperation) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *TransferOperation) GetTransferSpec() *TransferSpec { + if m != nil { + return m.TransferSpec + } + return nil +} + +func (m *TransferOperation) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *TransferOperation) GetEndTime() *google_protobuf4.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *TransferOperation) GetStatus() TransferOperation_Status { + if m != nil { + return m.Status + } + return TransferOperation_STATUS_UNSPECIFIED +} + +func (m *TransferOperation) GetCounters() *TransferCounters { + if m != nil { + return m.Counters + } + return nil +} + +func (m *TransferOperation) GetErrorBreakdowns() []*ErrorSummary { + if m != nil { + return m.ErrorBreakdowns + } + return nil +} + +func (m *TransferOperation) GetTransferJobName() string { + if m != nil { + return m.TransferJobName + } + return "" +} + +func init() { + proto.RegisterType((*GoogleServiceAccount)(nil), "google.storagetransfer.v1.GoogleServiceAccount") + proto.RegisterType((*AwsAccessKey)(nil), "google.storagetransfer.v1.AwsAccessKey") + proto.RegisterType((*ObjectConditions)(nil), "google.storagetransfer.v1.ObjectConditions") + proto.RegisterType((*GcsData)(nil), "google.storagetransfer.v1.GcsData") + proto.RegisterType((*AwsS3Data)(nil), "google.storagetransfer.v1.AwsS3Data") + proto.RegisterType((*HttpData)(nil), "google.storagetransfer.v1.HttpData") + proto.RegisterType((*TransferOptions)(nil), "google.storagetransfer.v1.TransferOptions") + proto.RegisterType((*TransferSpec)(nil), "google.storagetransfer.v1.TransferSpec") + proto.RegisterType((*Schedule)(nil), "google.storagetransfer.v1.Schedule") + proto.RegisterType((*TransferJob)(nil), "google.storagetransfer.v1.TransferJob") + proto.RegisterType((*ErrorLogEntry)(nil), "google.storagetransfer.v1.ErrorLogEntry") + proto.RegisterType((*ErrorSummary)(nil), "google.storagetransfer.v1.ErrorSummary") + proto.RegisterType((*TransferCounters)(nil), "google.storagetransfer.v1.TransferCounters") + proto.RegisterType((*TransferOperation)(nil), "google.storagetransfer.v1.TransferOperation") + proto.RegisterEnum("google.storagetransfer.v1.TransferJob_Status", TransferJob_Status_name, TransferJob_Status_value) + proto.RegisterEnum("google.storagetransfer.v1.TransferOperation_Status", TransferOperation_Status_name, TransferOperation_Status_value) +} + +func init() { proto.RegisterFile("google/storagetransfer/v1/transfer_types.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1729 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x72, 0xdb, 0xc6, + 0x15, 0x36, 0x45, 0x59, 0x22, 0x0f, 0x49, 0x91, 0xda, 0x38, 0x0a, 0x25, 0xdb, 0x89, 0x0b, 0x25, + 0x63, 0xc7, 0x99, 0x92, 0x13, 0x69, 0x32, 0x1d, 0xd7, 0x93, 0xba, 0x94, 0x48, 0x49, 0x8c, 0x15, + 0x4b, 0x03, 0x50, 0xd3, 0x9f, 0x8b, 0x62, 0x96, 0xc0, 0x92, 0x46, 0x04, 0x62, 0x51, 0xec, 0xd2, + 0x12, 0xa6, 0x57, 0xb9, 0xea, 0x33, 0xf4, 0x45, 0xfa, 0x14, 0x9d, 0xe9, 0x5d, 0x9f, 0xa3, 0x97, + 0xbd, 0xec, 0xec, 0x0f, 0x40, 0x10, 0xa2, 0x49, 0xcd, 0xe4, 0x0e, 0x38, 0xe7, 0x7c, 0xdf, 0xd9, + 0xf3, 0xc3, 0x73, 0x16, 0x84, 0xd6, 0x98, 0xd2, 0xb1, 0x4f, 0xda, 0x8c, 0xd3, 0x08, 0x8f, 0x09, + 0x8f, 0x70, 0xc0, 0x46, 0x24, 0x6a, 0x7f, 0xf8, 0xb6, 0x9d, 0x3c, 0xdb, 0x3c, 0x0e, 0x09, 0x6b, + 0x85, 0x11, 0xe5, 0x14, 0xed, 0x2a, 0xfb, 0x56, 0xce, 0xbe, 0xf5, 0xe1, 0xdb, 0xbd, 0x27, 0x9a, + 0x0a, 0x87, 0x5e, 0x1b, 0x07, 0x01, 0xe5, 0x98, 0x7b, 0x34, 0xd0, 0xc0, 0xbd, 0xcf, 0xb5, 0x56, + 0xbe, 0x0d, 0xa7, 0xa3, 0xb6, 0x3b, 0x8d, 0xa4, 0x81, 0xd6, 0x7f, 0x91, 0xd7, 0x73, 0x6f, 0x42, + 0x18, 0xc7, 0x93, 0x50, 0x1b, 0x7c, 0xaa, 0x0d, 0xa2, 0xd0, 0x69, 0x3b, 0xd4, 0x25, 0x5a, 0xbc, + 0xa3, 0xc5, 0xe2, 0x90, 0x6d, 0x17, 0xf3, 0x44, 0xfe, 0x38, 0x2b, 0x17, 0x5c, 0x74, 0xe4, 0xe2, + 0x58, 0x29, 0x8d, 0xd7, 0xf0, 0xe8, 0x54, 0xaa, 0x2d, 0x12, 0x7d, 0xf0, 0x1c, 0xd2, 0x71, 0x1c, + 0x3a, 0x0d, 0x38, 0xda, 0x87, 0x1a, 0x56, 0x8f, 0x36, 0x99, 0x60, 0xcf, 0x6f, 0x16, 0x9e, 0x15, + 0x5e, 0x94, 0xcd, 0xaa, 0x16, 0xf6, 0x84, 0xcc, 0xf8, 0x0b, 0x54, 0x3b, 0x37, 0xac, 0xe3, 0x38, + 0x84, 0xb1, 0xb7, 0x24, 0x46, 0x86, 0x04, 0x11, 0xc6, 0xec, 0x6b, 0x12, 0xdb, 0x9e, 0xab, 0x41, + 0x15, 0x9c, 0x58, 0xf4, 0x5d, 0xf4, 0x12, 0xb6, 0x19, 0x71, 0x22, 0xc2, 0xed, 0x99, 0x69, 0x73, + 0x4d, 0xda, 0xd5, 0x95, 0x22, 0xe5, 0x33, 0xfe, 0xb5, 0x06, 0x8d, 0x8b, 0xe1, 0x4f, 0xc4, 0xe1, + 0xc7, 0x34, 0x70, 0x3d, 0x99, 0x44, 0x14, 0xc2, 0x8b, 0x89, 0x17, 0xd8, 0x22, 0x10, 0x9b, 0xf8, + 0x38, 0x64, 0xc4, 0xb5, 0x99, 0x17, 0x38, 0xc4, 0xf6, 0x31, 0xe3, 0xf6, 0x84, 0xba, 0xde, 0xc8, + 0x73, 0x64, 0x42, 0xa5, 0xff, 0xca, 0xc1, 0xae, 0x2e, 0x6d, 0x2b, 0xc9, 0x68, 0xab, 0xab, 0x33, + 0x6e, 0xee, 0x4f, 0xbc, 0x60, 0xe0, 0x4d, 0x48, 0x4f, 0x11, 0x59, 0x82, 0xe7, 0x1c, 0x33, 0xfe, + 0x63, 0x86, 0x45, 0x7a, 0xc4, 0xb7, 0xf7, 0xf3, 0xb8, 0xb6, 0xda, 0x23, 0xbe, 0x5d, 0xe9, 0xf1, + 0x6b, 0x68, 0x78, 0x81, 0xe3, 0x4f, 0x5d, 0x62, 0x87, 0x11, 0x19, 0x79, 0xb7, 0x84, 0x35, 0x8b, + 0xcf, 0x8a, 0x22, 0x47, 0x5a, 0x7e, 0xa9, 0xc5, 0xc2, 0x94, 0xdc, 0xe6, 0x4c, 0xd7, 0x95, 0xa9, + 0x96, 0x27, 0xa6, 0xc6, 0x4b, 0xd8, 0x3c, 0x75, 0x58, 0x17, 0x73, 0x8c, 0xbe, 0x80, 0xca, 0x70, + 0xea, 0x5c, 0x13, 0x6e, 0x07, 0x78, 0x42, 0x74, 0x9d, 0x40, 0x89, 0xde, 0xe1, 0x09, 0x31, 0xfe, + 0x06, 0xe5, 0xce, 0x0d, 0xb3, 0x0e, 0xef, 0x65, 0x8d, 0x7e, 0x84, 0x2d, 0x7c, 0xc3, 0xf2, 0x15, + 0xad, 0x1c, 0x3c, 0x6f, 0x7d, 0xf4, 0x47, 0xd2, 0xca, 0x76, 0x8e, 0x59, 0xc5, 0x99, 0x37, 0xe3, + 0x2b, 0x28, 0x9d, 0x71, 0x1e, 0x4a, 0xdf, 0xbb, 0x50, 0xf2, 0x3d, 0xc6, 0xed, 0x69, 0x94, 0xf4, + 0xe0, 0xa6, 0x78, 0xbf, 0x8a, 0x7c, 0xe3, 0xef, 0x6b, 0x50, 0x1f, 0x68, 0xc6, 0x8b, 0x50, 0x75, + 0xc7, 0x9f, 0xe0, 0x25, 0xfd, 0x40, 0xa2, 0x9b, 0xc8, 0xe3, 0xc4, 0xa6, 0xb2, 0x77, 0x98, 0x8d, + 0xfd, 0x88, 0x60, 0x37, 0xb6, 0xc9, 0xad, 0xc7, 0xb8, 0x17, 0x8c, 0x6d, 0x2f, 0x10, 0x05, 0xbc, + 0x96, 0x84, 0x25, 0xf3, 0xab, 0x14, 0xa1, 0x9a, 0x8d, 0x75, 0x94, 0x7d, 0x4f, 0x9b, 0xf7, 0x03, + 0xcb, 0x0b, 0xae, 0xd1, 0xef, 0xe1, 0xa9, 0x4b, 0x7c, 0x92, 0xe1, 0x9d, 0x06, 0xde, 0x5f, 0xa7, + 0x24, 0x65, 0x5b, 0x93, 0x6c, 0xbb, 0xca, 0x48, 0x53, 0x5d, 0x49, 0x13, 0xcd, 0xf0, 0x07, 0xf8, + 0x3a, 0xc7, 0x30, 0x8a, 0xe8, 0xc4, 0x66, 0x74, 0x1a, 0x39, 0xc4, 0xc6, 0x23, 0x2e, 0x46, 0x8c, + 0x0e, 0xa8, 0x59, 0x94, 0x6c, 0x5f, 0xce, 0xb1, 0x9d, 0x44, 0x74, 0x62, 0x49, 0xeb, 0x8e, 0x30, + 0x4e, 0x82, 0x37, 0xfe, 0xb1, 0x0e, 0xd5, 0xe4, 0xc5, 0x0a, 0x89, 0x83, 0xce, 0xa1, 0x3e, 0x76, + 0x98, 0xed, 0x62, 0x8e, 0x35, 0xbd, 0xfe, 0x2d, 0x18, 0x4b, 0x2a, 0xa2, 0x9b, 0xe3, 0xec, 0x81, + 0x59, 0x1b, 0xab, 0x47, 0xe5, 0x0b, 0x59, 0x80, 0x44, 0x79, 0xd9, 0xe1, 0x1c, 0xa1, 0x2a, 0xf1, + 0x97, 0xcb, 0x4b, 0xac, 0x3a, 0xe8, 0xec, 0x81, 0x59, 0xc7, 0xc9, 0x8b, 0x26, 0xbd, 0x80, 0xc6, + 0x7b, 0xce, 0xc3, 0x39, 0xca, 0xa2, 0xa4, 0xdc, 0x5f, 0x42, 0x99, 0xf4, 0xc5, 0xd9, 0x03, 0x73, + 0xeb, 0xbd, 0x7e, 0xd6, 0x84, 0x67, 0x50, 0x9b, 0xc5, 0x2c, 0xea, 0xb1, 0x7e, 0xef, 0x88, 0x0b, + 0x66, 0x25, 0x89, 0x58, 0xd4, 0xe9, 0x8f, 0xb0, 0xad, 0x0a, 0x64, 0x3b, 0xe9, 0xdc, 0x69, 0x3e, + 0x94, 0x6c, 0xdf, 0x2c, 0x61, 0xcb, 0x8f, 0x2a, 0xb3, 0x41, 0xf3, 0xc3, 0xeb, 0x0a, 0x1a, 0xe9, + 0x32, 0xa1, 0xaa, 0x65, 0x9b, 0x1b, 0x92, 0xf8, 0xe5, 0x12, 0xe2, 0x5c, 0x93, 0x9b, 0x75, 0x3e, + 0x2f, 0x38, 0xaa, 0x41, 0x25, 0x93, 0xc6, 0xa3, 0x0a, 0x94, 0xd3, 0x2c, 0x18, 0xff, 0x2e, 0x40, + 0xc9, 0x72, 0xde, 0x13, 0x77, 0xea, 0x13, 0xd4, 0x81, 0x4f, 0x98, 0x7e, 0xb6, 0x19, 0xc7, 0x11, + 0x17, 0xe9, 0x4a, 0x7a, 0x63, 0x3b, 0x39, 0x82, 0xd8, 0x14, 0xad, 0x2e, 0xe6, 0xc4, 0xdc, 0x4e, + 0xac, 0x2d, 0x61, 0x2c, 0x44, 0xe8, 0x7b, 0x48, 0x85, 0x36, 0x09, 0x5c, 0x45, 0xb0, 0xf6, 0x31, + 0x82, 0x7a, 0x62, 0xdb, 0x0b, 0x5c, 0x09, 0xef, 0xc0, 0xb6, 0x72, 0x2c, 0xc7, 0x29, 0x1d, 0xd9, + 0x2e, 0x8e, 0x75, 0xdd, 0x77, 0xe6, 0xe0, 0x62, 0x48, 0x5e, 0x8c, 0xba, 0x38, 0x36, 0xb7, 0x24, + 0x20, 0x7d, 0x37, 0xfe, 0xb3, 0x0e, 0x95, 0x24, 0x25, 0x3f, 0xd0, 0x21, 0x42, 0xb0, 0x9e, 0x99, + 0x4b, 0xf2, 0x19, 0x3d, 0x83, 0x8a, 0x4b, 0x98, 0x13, 0x79, 0x61, 0x3a, 0x96, 0xcb, 0x66, 0x56, + 0x84, 0x9e, 0x02, 0x84, 0x11, 0x95, 0x55, 0xf6, 0x5c, 0x79, 0x82, 0xb2, 0x59, 0xd6, 0x92, 0xbe, + 0x8b, 0xce, 0xa1, 0x96, 0x56, 0x8a, 0x85, 0xc4, 0xd1, 0xdd, 0xf4, 0xfc, 0x1e, 0x65, 0x12, 0xbf, + 0x40, 0xb3, 0xca, 0xb3, 0xbf, 0xc7, 0x37, 0x50, 0x4a, 0x12, 0xa1, 0x1b, 0x69, 0x59, 0x93, 0x27, + 0xe5, 0x32, 0x53, 0x10, 0xea, 0xc1, 0x06, 0xe3, 0x98, 0x4f, 0x55, 0xbb, 0x6c, 0x1d, 0xfc, 0xfa, + 0x1e, 0xe7, 0xf8, 0x81, 0x0e, 0x5b, 0x96, 0x04, 0x99, 0x1a, 0x8c, 0xde, 0x40, 0xcd, 0x89, 0x88, + 0x5c, 0x32, 0xb2, 0x00, 0xcd, 0x4d, 0x79, 0x98, 0xbd, 0x3b, 0xfb, 0x6a, 0x90, 0xdc, 0x39, 0xcc, + 0x6a, 0x02, 0x10, 0x22, 0x74, 0x09, 0x3b, 0x77, 0x96, 0x9e, 0x62, 0x2a, 0xad, 0x64, 0x7a, 0xe4, + 0xe7, 0xf6, 0x9c, 0x64, 0x7c, 0x03, 0x35, 0x39, 0xe3, 0x52, 0xa2, 0xf2, 0xea, 0x23, 0x25, 0x00, + 0x21, 0x32, 0xce, 0x60, 0x43, 0x45, 0x89, 0x76, 0x00, 0x59, 0x83, 0xce, 0xe0, 0xca, 0xb2, 0xaf, + 0xde, 0x59, 0x97, 0xbd, 0xe3, 0xfe, 0x49, 0xbf, 0xd7, 0x6d, 0x3c, 0x40, 0x15, 0xd8, 0xec, 0xbd, + 0xeb, 0x1c, 0x9d, 0xf7, 0xba, 0x8d, 0x02, 0xaa, 0x42, 0xa9, 0xdb, 0xb7, 0xd4, 0xdb, 0x9a, 0x50, + 0x75, 0x7b, 0xe7, 0xbd, 0x41, 0xaf, 0xdb, 0x28, 0x1a, 0x27, 0x50, 0xeb, 0x45, 0x11, 0x8d, 0xce, + 0xe9, 0xb8, 0x17, 0xf0, 0x28, 0x46, 0x0d, 0x28, 0xce, 0xf6, 0x8e, 0x78, 0x14, 0xf7, 0x22, 0x22, + 0x4c, 0x6c, 0x97, 0x70, 0xec, 0xf9, 0xc9, 0x5a, 0xae, 0x4a, 0x61, 0x57, 0xc9, 0x8c, 0x7f, 0x16, + 0xa0, 0x2a, 0x89, 0xac, 0xe9, 0x64, 0x82, 0xa3, 0x18, 0xb5, 0x01, 0x14, 0x4a, 0x5c, 0xd7, 0x24, + 0xdd, 0xd6, 0x41, 0x23, 0x09, 0x30, 0x0a, 0x9d, 0xd6, 0x31, 0x75, 0x89, 0x59, 0x96, 0x36, 0xe2, + 0x51, 0x6c, 0xdc, 0x04, 0x30, 0x0d, 0xb8, 0x6c, 0xdf, 0xa2, 0x09, 0x5a, 0x2f, 0xee, 0x67, 0x03, + 0xd8, 0x56, 0x06, 0x3e, 0x1d, 0xdb, 0x24, 0xe0, 0x91, 0xa7, 0xaf, 0x08, 0x95, 0x83, 0x17, 0x4b, + 0x5a, 0x63, 0x2e, 0x3c, 0xb3, 0x4e, 0x32, 0xaf, 0x1e, 0x61, 0xc6, 0x7f, 0x37, 0xa1, 0x91, 0x74, + 0x8f, 0xf4, 0x43, 0x22, 0x86, 0x5e, 0xc1, 0x6e, 0xba, 0xae, 0xe8, 0x34, 0x70, 0xb3, 0x4b, 0x4b, + 0xc6, 0x52, 0x34, 0x77, 0xb4, 0xc1, 0x89, 0xd0, 0xcf, 0x96, 0x14, 0xfa, 0x0e, 0x3e, 0x1b, 0xc6, + 0x9c, 0x2c, 0x02, 0xaa, 0x90, 0x1e, 0x49, 0x75, 0x1e, 0xf6, 0x3b, 0x78, 0x32, 0xef, 0x91, 0x06, + 0x7e, 0xac, 0xd1, 0x62, 0xb0, 0x17, 0x25, 0xb6, 0x99, 0x75, 0x7a, 0x11, 0xf8, 0xb1, 0x64, 0x10, + 0xf3, 0xfb, 0xb7, 0xb0, 0x97, 0x75, 0x9b, 0x43, 0xaf, 0xab, 0x23, 0xcf, 0x3c, 0xcf, 0x61, 0xdf, + 0xc2, 0xfe, 0xa2, 0xe5, 0xcc, 0xae, 0xbd, 0x30, 0x24, 0xae, 0x3d, 0x8c, 0x6d, 0x16, 0x07, 0x8e, + 0xfc, 0x11, 0x17, 0xcd, 0xcf, 0x69, 0x7e, 0x2f, 0x5b, 0xca, 0xee, 0x28, 0xb6, 0xe2, 0xc0, 0x41, + 0xa7, 0xf0, 0x2b, 0x7d, 0x90, 0x25, 0x54, 0x1b, 0x92, 0xea, 0x89, 0x3a, 0xcf, 0x47, 0x88, 0x0e, + 0x21, 0x49, 0xb1, 0xed, 0xd0, 0xd0, 0x23, 0xae, 0xcd, 0xa9, 0x8a, 0x66, 0x53, 0xa2, 0x3f, 0xd1, + 0xda, 0x63, 0xa9, 0x1c, 0x50, 0x19, 0x4a, 0x1b, 0x54, 0x7a, 0xf3, 0x90, 0x92, 0x84, 0x6c, 0x4b, + 0xdd, 0x1c, 0xe0, 0x7b, 0x78, 0x9c, 0x78, 0x51, 0xd7, 0x8e, 0xf9, 0x92, 0x95, 0xe7, 0xd2, 0xde, + 0x55, 0x16, 0x99, 0xb2, 0xbd, 0x82, 0x5d, 0xe5, 0x6f, 0x11, 0x18, 0x32, 0x59, 0x5f, 0x08, 0x5d, + 0xec, 0x59, 0x9c, 0xb7, 0x32, 0xd7, 0x63, 0x59, 0xb0, 0x38, 0x74, 0xda, 0x63, 0x77, 0x81, 0xd5, + 0x4c, 0x8f, 0xe5, 0x61, 0xaf, 0x61, 0x6f, 0x51, 0x9d, 0x47, 0xd8, 0xf3, 0x89, 0xdb, 0xac, 0x49, + 0xe4, 0x67, 0x77, 0xca, 0x7b, 0x22, 0xd5, 0xe8, 0x37, 0xd0, 0xbc, 0x5b, 0x57, 0x0d, 0xdd, 0x92, + 0xd0, 0x4f, 0x73, 0xe5, 0xd4, 0xc0, 0x3e, 0x18, 0xa9, 0x57, 0x29, 0x11, 0x45, 0xd1, 0x77, 0xc2, + 0xd9, 0xb9, 0xeb, 0x92, 0xe2, 0x69, 0xe2, 0x5d, 0x1a, 0x0e, 0xa8, 0x8a, 0x20, 0x0d, 0xa0, 0x07, + 0xcf, 0xf4, 0x19, 0x3e, 0x4e, 0xd4, 0x90, 0x44, 0x8f, 0xd5, 0x59, 0x16, 0xd2, 0x18, 0x3f, 0x3f, + 0x84, 0xed, 0xd9, 0xfd, 0x82, 0xa8, 0xaf, 0x94, 0x85, 0x2b, 0x75, 0x7e, 0x61, 0xae, 0xad, 0x5c, + 0x98, 0xc5, 0x5f, 0xb2, 0x30, 0x5f, 0x01, 0xcc, 0xae, 0x09, 0x7a, 0xf7, 0x2e, 0x5b, 0x09, 0xe5, + 0xf4, 0x8e, 0x80, 0xbe, 0x83, 0x92, 0xb8, 0x97, 0x48, 0xe0, 0xc3, 0x95, 0xc0, 0x4d, 0x12, 0xb8, + 0x12, 0xf6, 0x36, 0xb7, 0x61, 0x0f, 0xef, 0x75, 0x21, 0xd3, 0x09, 0xcb, 0xef, 0xd9, 0x53, 0x28, + 0x39, 0x7a, 0x7e, 0xea, 0x15, 0xfb, 0xcd, 0x3d, 0xe8, 0x92, 0x91, 0x6b, 0xa6, 0x60, 0x64, 0x42, + 0x43, 0xcd, 0xf9, 0x61, 0x44, 0xf0, 0xb5, 0x4b, 0x6f, 0x02, 0xd6, 0x2c, 0xc9, 0x31, 0xff, 0x7c, + 0xd5, 0x98, 0xd7, 0xcb, 0x47, 0x4f, 0xf9, 0xa3, 0x14, 0x2f, 0x3e, 0xc1, 0xd3, 0x4a, 0xfd, 0x44, + 0x87, 0xea, 0xa3, 0xae, 0xac, 0x3e, 0xc1, 0xf9, 0xec, 0xee, 0x20, 0xbf, 0x03, 0x9d, 0x95, 0xcb, + 0xb5, 0x0e, 0x95, 0xfe, 0x3b, 0xfb, 0xd2, 0xbc, 0x38, 0x35, 0x7b, 0x96, 0xd5, 0x28, 0x20, 0x80, + 0x8d, 0xcb, 0xce, 0x95, 0x95, 0xac, 0x57, 0xeb, 0xea, 0xf8, 0x58, 0x28, 0x8a, 0x42, 0x71, 0xd2, + 0xe9, 0x8b, 0xbd, 0xbb, 0x2e, 0x14, 0x9d, 0xa3, 0x0b, 0x53, 0xec, 0xdd, 0x87, 0x47, 0x3f, 0x17, + 0x60, 0xdf, 0xa1, 0x93, 0x25, 0x01, 0xc9, 0xc2, 0x1d, 0xd5, 0x92, 0x44, 0x0d, 0xe2, 0x90, 0xb0, + 0x3f, 0x9f, 0x69, 0xfb, 0x31, 0xf5, 0x71, 0x30, 0x6e, 0xd1, 0x68, 0xdc, 0x1e, 0x93, 0x40, 0x9a, + 0xb6, 0x95, 0x0a, 0x87, 0x1e, 0x5b, 0xf0, 0x87, 0xce, 0xeb, 0x9c, 0xe8, 0x7f, 0x85, 0xc2, 0x70, + 0x43, 0xe2, 0x0e, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xed, 0xb3, 0x1d, 0xf0, 0x07, 0x12, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/tracing/v1/trace.pb.go b/vendor/google.golang.org/genproto/googleapis/tracing/v1/trace.pb.go new file mode 100644 index 0000000..01f9722 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/tracing/v1/trace.pb.go @@ -0,0 +1,889 @@ +// Code generated by protoc-gen-go. +// source: google/tracing/trace.proto +// DO NOT EDIT! + +/* +Package tracing is a generated protocol buffer package. + +It is generated from these files: + google/tracing/trace.proto + +It has these top-level messages: + TraceId + Module + StackTrace + LabelValue + Span + Trace +*/ +package tracing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The type of the network event. SENT or RECV event. +type Span_TimeEvent_NetworkEvent_Type int32 + +const ( + Span_TimeEvent_NetworkEvent_UNSPECIFIED Span_TimeEvent_NetworkEvent_Type = 0 + Span_TimeEvent_NetworkEvent_SENT Span_TimeEvent_NetworkEvent_Type = 1 + Span_TimeEvent_NetworkEvent_RECV Span_TimeEvent_NetworkEvent_Type = 2 +) + +var Span_TimeEvent_NetworkEvent_Type_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "SENT", + 2: "RECV", +} +var Span_TimeEvent_NetworkEvent_Type_value = map[string]int32{ + "UNSPECIFIED": 0, + "SENT": 1, + "RECV": 2, +} + +func (x Span_TimeEvent_NetworkEvent_Type) String() string { + return proto.EnumName(Span_TimeEvent_NetworkEvent_Type_name, int32(x)) +} +func (Span_TimeEvent_NetworkEvent_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{4, 0, 1, 0} +} + +// The type of the link. +type Span_Link_Type int32 + +const ( + Span_Link_UNSPECIFIED Span_Link_Type = 0 + Span_Link_CHILD Span_Link_Type = 1 + Span_Link_PARENT Span_Link_Type = 2 +) + +var Span_Link_Type_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "CHILD", + 2: "PARENT", +} +var Span_Link_Type_value = map[string]int32{ + "UNSPECIFIED": 0, + "CHILD": 1, + "PARENT": 2, +} + +func (x Span_Link_Type) String() string { + return proto.EnumName(Span_Link_Type_name, int32(x)) +} +func (Span_Link_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 1, 0} } + +// A TraceId uniquely identifies a Trace. It is conceptually a 128-bit value, +// represented as a string, containing the hex-encoded value. +type TraceId struct { + // Trace ID specified as a hex-encoded string. *Must* be 32 bytes long. + HexEncoded string `protobuf:"bytes,1,opt,name=hex_encoded,json=hexEncoded" json:"hex_encoded,omitempty"` +} + +func (m *TraceId) Reset() { *m = TraceId{} } +func (m *TraceId) String() string { return proto.CompactTextString(m) } +func (*TraceId) ProtoMessage() {} +func (*TraceId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *TraceId) GetHexEncoded() string { + if m != nil { + return m.HexEncoded + } + return "" +} + +type Module struct { + // Binary module. + // E.g. main binary, kernel modules, and dynamic libraries + // such as libc.so, sharedlib.so + Module string `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"` + // Build_id is a unique identifier for the module, + // probably a hash of its contents + BuildId string `protobuf:"bytes,2,opt,name=build_id,json=buildId" json:"build_id,omitempty"` +} + +func (m *Module) Reset() { *m = Module{} } +func (m *Module) String() string { return proto.CompactTextString(m) } +func (*Module) ProtoMessage() {} +func (*Module) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Module) GetModule() string { + if m != nil { + return m.Module + } + return "" +} + +func (m *Module) GetBuildId() string { + if m != nil { + return m.BuildId + } + return "" +} + +type StackTrace struct { + // Stack frames of this stack trace. + StackFrame []*StackTrace_StackFrame `protobuf:"bytes,1,rep,name=stack_frame,json=stackFrame" json:"stack_frame,omitempty"` + // User can choose to use his own hash function to hash large labels to save + // network bandwidth and storage. + // Typical usage is to pass both initially to inform the storage of the + // mapping. And in subsequent calls, pass in stack_trace_hash_id only. + // User shall verify the hash value is successfully stored. + StackTraceHashId uint64 `protobuf:"varint,2,opt,name=stack_trace_hash_id,json=stackTraceHashId" json:"stack_trace_hash_id,omitempty"` +} + +func (m *StackTrace) Reset() { *m = StackTrace{} } +func (m *StackTrace) String() string { return proto.CompactTextString(m) } +func (*StackTrace) ProtoMessage() {} +func (*StackTrace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *StackTrace) GetStackFrame() []*StackTrace_StackFrame { + if m != nil { + return m.StackFrame + } + return nil +} + +func (m *StackTrace) GetStackTraceHashId() uint64 { + if m != nil { + return m.StackTraceHashId + } + return 0 +} + +// Presents a single stack frame in a stack trace. +type StackTrace_StackFrame struct { + // Fully qualified names which uniquely identify function/method/etc. + FunctionName string `protobuf:"bytes,1,opt,name=function_name,json=functionName" json:"function_name,omitempty"` + // Used when function name is ‘mangled’. Not guaranteed to be fully + // qualified but usually it is. + OrigFunctionName string `protobuf:"bytes,2,opt,name=orig_function_name,json=origFunctionName" json:"orig_function_name,omitempty"` + // File name of the frame. + FileName string `protobuf:"bytes,3,opt,name=file_name,json=fileName" json:"file_name,omitempty"` + // Line number of the frame. + LineNumber int64 `protobuf:"varint,4,opt,name=line_number,json=lineNumber" json:"line_number,omitempty"` + // Column number is important in JavaScript(anonymous functions), + // Might not be available in some languages. + ColumnNumber int64 `protobuf:"varint,5,opt,name=column_number,json=columnNumber" json:"column_number,omitempty"` + // Binary module the code is loaded from. + LoadModule *Module `protobuf:"bytes,6,opt,name=load_module,json=loadModule" json:"load_module,omitempty"` + // source_version is deployment specific. It might be + // better to be stored in deployment metadata. + // However, in distributed tracing, it’s hard to keep track of + // source/binary versions at one place for all spans. + SourceVersion string `protobuf:"bytes,7,opt,name=source_version,json=sourceVersion" json:"source_version,omitempty"` +} + +func (m *StackTrace_StackFrame) Reset() { *m = StackTrace_StackFrame{} } +func (m *StackTrace_StackFrame) String() string { return proto.CompactTextString(m) } +func (*StackTrace_StackFrame) ProtoMessage() {} +func (*StackTrace_StackFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *StackTrace_StackFrame) GetFunctionName() string { + if m != nil { + return m.FunctionName + } + return "" +} + +func (m *StackTrace_StackFrame) GetOrigFunctionName() string { + if m != nil { + return m.OrigFunctionName + } + return "" +} + +func (m *StackTrace_StackFrame) GetFileName() string { + if m != nil { + return m.FileName + } + return "" +} + +func (m *StackTrace_StackFrame) GetLineNumber() int64 { + if m != nil { + return m.LineNumber + } + return 0 +} + +func (m *StackTrace_StackFrame) GetColumnNumber() int64 { + if m != nil { + return m.ColumnNumber + } + return 0 +} + +func (m *StackTrace_StackFrame) GetLoadModule() *Module { + if m != nil { + return m.LoadModule + } + return nil +} + +func (m *StackTrace_StackFrame) GetSourceVersion() string { + if m != nil { + return m.SourceVersion + } + return "" +} + +// Allowed label values. +type LabelValue struct { + // The value of the label. + // + // Types that are valid to be assigned to Value: + // *LabelValue_StringValue + // *LabelValue_IntValue + // *LabelValue_BoolValue + Value isLabelValue_Value `protobuf_oneof:"value"` +} + +func (m *LabelValue) Reset() { *m = LabelValue{} } +func (m *LabelValue) String() string { return proto.CompactTextString(m) } +func (*LabelValue) ProtoMessage() {} +func (*LabelValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +type isLabelValue_Value interface { + isLabelValue_Value() +} + +type LabelValue_StringValue struct { + StringValue string `protobuf:"bytes,1,opt,name=string_value,json=stringValue,oneof"` +} +type LabelValue_IntValue struct { + IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,oneof"` +} +type LabelValue_BoolValue struct { + BoolValue bool `protobuf:"varint,3,opt,name=bool_value,json=boolValue,oneof"` +} + +func (*LabelValue_StringValue) isLabelValue_Value() {} +func (*LabelValue_IntValue) isLabelValue_Value() {} +func (*LabelValue_BoolValue) isLabelValue_Value() {} + +func (m *LabelValue) GetValue() isLabelValue_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *LabelValue) GetStringValue() string { + if x, ok := m.GetValue().(*LabelValue_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *LabelValue) GetIntValue() int64 { + if x, ok := m.GetValue().(*LabelValue_IntValue); ok { + return x.IntValue + } + return 0 +} + +func (m *LabelValue) GetBoolValue() bool { + if x, ok := m.GetValue().(*LabelValue_BoolValue); ok { + return x.BoolValue + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LabelValue) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LabelValue_OneofMarshaler, _LabelValue_OneofUnmarshaler, _LabelValue_OneofSizer, []interface{}{ + (*LabelValue_StringValue)(nil), + (*LabelValue_IntValue)(nil), + (*LabelValue_BoolValue)(nil), + } +} + +func _LabelValue_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LabelValue) + // value + switch x := m.Value.(type) { + case *LabelValue_StringValue: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *LabelValue_IntValue: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IntValue)) + case *LabelValue_BoolValue: + t := uint64(0) + if x.BoolValue { + t = 1 + } + b.EncodeVarint(3<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("LabelValue.Value has unexpected type %T", x) + } + return nil +} + +func _LabelValue_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LabelValue) + switch tag { + case 1: // value.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Value = &LabelValue_StringValue{x} + return true, err + case 2: // value.int_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &LabelValue_IntValue{int64(x)} + return true, err + case 3: // value.bool_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &LabelValue_BoolValue{x != 0} + return true, err + default: + return false, nil + } +} + +func _LabelValue_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LabelValue) + // value + switch x := m.Value.(type) { + case *LabelValue_StringValue: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *LabelValue_IntValue: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IntValue)) + case *LabelValue_BoolValue: + n += proto.SizeVarint(3<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A span represents a single operation within a trace. Spans can be nested +// and form a trace tree. Often, a trace contains a root span that describes the +// end-to-end latency and, optionally, one or more subspans for +// its sub-operations. Spans do not need to be contiguous. There may be gaps +// between spans in a trace. +type Span struct { + // Identifier for the span. Must be a 64-bit integer other than 0 and + // unique within a trace. + Id uint64 `protobuf:"fixed64,1,opt,name=id" json:"id,omitempty"` + // Name of the span. The span name is sanitized and displayed in the + // Stackdriver Trace tool in the {% dynamic print site_values.console_name %}. + // The name may be a method name or some other per-call site name. + // For the same executable and the same call point, a best practice is + // to use a consistent name, which makes it easier to correlate + // cross-trace spans. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // ID of parent span. 0 or missing if this is a root span. + ParentId uint64 `protobuf:"fixed64,3,opt,name=parent_id,json=parentId" json:"parent_id,omitempty"` + // Local machine clock in nanoseconds from the UNIX epoch, + // at which span execution started. + // On the server side these are the times when the server application + // handler starts running. + LocalStartTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=local_start_time,json=localStartTime" json:"local_start_time,omitempty"` + // Local machine clock in nanoseconds from the UNIX epoch, + // at which span execution ended. + // On the server side these are the times when the server application + // handler finishes running. + LocalEndTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=local_end_time,json=localEndTime" json:"local_end_time,omitempty"` + // Properties of a span. Labels at the span level. + // E.g. + // "/instance_id": "my-instance" + // "/zone": "us-central1-a" + // "/grpc/peer_address": "ip:port" (dns, etc.) + // "/grpc/deadline": "Duration" + // "/http/user_agent" + // "/http/request_bytes": 300 + // "/http/response_bytes": 1200 + // "/http/url": google.com/apis + // "/pid" + // "abc.com/mylabel": "my label value" + Labels map[string]*LabelValue `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Stack trace captured at the start of the span. This is optional. + StackTrace *StackTrace `protobuf:"bytes,7,opt,name=stack_trace,json=stackTrace" json:"stack_trace,omitempty"` + // A collection of time-stamped events. + TimeEvents []*Span_TimeEvent `protobuf:"bytes,8,rep,name=time_events,json=timeEvents" json:"time_events,omitempty"` + // A collection of links. + Links []*Span_Link `protobuf:"bytes,9,rep,name=links" json:"links,omitempty"` + // The final status of the Span. This is optional. + Status *google_rpc.Status `protobuf:"bytes,10,opt,name=status" json:"status,omitempty"` + // True if this Span has a remote parent (is an RPC server Span). + HasRemoteParent bool `protobuf:"varint,11,opt,name=has_remote_parent,json=hasRemoteParent" json:"has_remote_parent,omitempty"` +} + +func (m *Span) Reset() { *m = Span{} } +func (m *Span) String() string { return proto.CompactTextString(m) } +func (*Span) ProtoMessage() {} +func (*Span) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *Span) GetId() uint64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *Span) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Span) GetParentId() uint64 { + if m != nil { + return m.ParentId + } + return 0 +} + +func (m *Span) GetLocalStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LocalStartTime + } + return nil +} + +func (m *Span) GetLocalEndTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LocalEndTime + } + return nil +} + +func (m *Span) GetLabels() map[string]*LabelValue { + if m != nil { + return m.Labels + } + return nil +} + +func (m *Span) GetStackTrace() *StackTrace { + if m != nil { + return m.StackTrace + } + return nil +} + +func (m *Span) GetTimeEvents() []*Span_TimeEvent { + if m != nil { + return m.TimeEvents + } + return nil +} + +func (m *Span) GetLinks() []*Span_Link { + if m != nil { + return m.Links + } + return nil +} + +func (m *Span) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func (m *Span) GetHasRemoteParent() bool { + if m != nil { + return m.HasRemoteParent + } + return false +} + +// A time-stamped annotation in the Span. +type Span_TimeEvent struct { + // The local machine absolute timestamp when this event happened. + LocalTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=local_time,json=localTime" json:"local_time,omitempty"` + // Types that are valid to be assigned to Value: + // *Span_TimeEvent_Annotation_ + // *Span_TimeEvent_NetworkEvent_ + Value isSpan_TimeEvent_Value `protobuf_oneof:"value"` +} + +func (m *Span_TimeEvent) Reset() { *m = Span_TimeEvent{} } +func (m *Span_TimeEvent) String() string { return proto.CompactTextString(m) } +func (*Span_TimeEvent) ProtoMessage() {} +func (*Span_TimeEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } + +type isSpan_TimeEvent_Value interface { + isSpan_TimeEvent_Value() +} + +type Span_TimeEvent_Annotation_ struct { + Annotation *Span_TimeEvent_Annotation `protobuf:"bytes,2,opt,name=annotation,oneof"` +} +type Span_TimeEvent_NetworkEvent_ struct { + NetworkEvent *Span_TimeEvent_NetworkEvent `protobuf:"bytes,3,opt,name=network_event,json=networkEvent,oneof"` +} + +func (*Span_TimeEvent_Annotation_) isSpan_TimeEvent_Value() {} +func (*Span_TimeEvent_NetworkEvent_) isSpan_TimeEvent_Value() {} + +func (m *Span_TimeEvent) GetValue() isSpan_TimeEvent_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *Span_TimeEvent) GetLocalTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LocalTime + } + return nil +} + +func (m *Span_TimeEvent) GetAnnotation() *Span_TimeEvent_Annotation { + if x, ok := m.GetValue().(*Span_TimeEvent_Annotation_); ok { + return x.Annotation + } + return nil +} + +func (m *Span_TimeEvent) GetNetworkEvent() *Span_TimeEvent_NetworkEvent { + if x, ok := m.GetValue().(*Span_TimeEvent_NetworkEvent_); ok { + return x.NetworkEvent + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Span_TimeEvent) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Span_TimeEvent_OneofMarshaler, _Span_TimeEvent_OneofUnmarshaler, _Span_TimeEvent_OneofSizer, []interface{}{ + (*Span_TimeEvent_Annotation_)(nil), + (*Span_TimeEvent_NetworkEvent_)(nil), + } +} + +func _Span_TimeEvent_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Span_TimeEvent) + // value + switch x := m.Value.(type) { + case *Span_TimeEvent_Annotation_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Annotation); err != nil { + return err + } + case *Span_TimeEvent_NetworkEvent_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NetworkEvent); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Span_TimeEvent.Value has unexpected type %T", x) + } + return nil +} + +func _Span_TimeEvent_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Span_TimeEvent) + switch tag { + case 2: // value.annotation + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Span_TimeEvent_Annotation) + err := b.DecodeMessage(msg) + m.Value = &Span_TimeEvent_Annotation_{msg} + return true, err + case 3: // value.network_event + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Span_TimeEvent_NetworkEvent) + err := b.DecodeMessage(msg) + m.Value = &Span_TimeEvent_NetworkEvent_{msg} + return true, err + default: + return false, nil + } +} + +func _Span_TimeEvent_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Span_TimeEvent) + // value + switch x := m.Value.(type) { + case *Span_TimeEvent_Annotation_: + s := proto.Size(x.Annotation) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Span_TimeEvent_NetworkEvent_: + s := proto.Size(x.NetworkEvent) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Text annotation with a set of labels. +type Span_TimeEvent_Annotation struct { + // A user-supplied message describing the event. + Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` + // A set of labels on the annotation. + Labels map[string]*LabelValue `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Span_TimeEvent_Annotation) Reset() { *m = Span_TimeEvent_Annotation{} } +func (m *Span_TimeEvent_Annotation) String() string { return proto.CompactTextString(m) } +func (*Span_TimeEvent_Annotation) ProtoMessage() {} +func (*Span_TimeEvent_Annotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0, 0} } + +func (m *Span_TimeEvent_Annotation) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Span_TimeEvent_Annotation) GetLabels() map[string]*LabelValue { + if m != nil { + return m.Labels + } + return nil +} + +// An event describing an RPC message sent/received on the network. +type Span_TimeEvent_NetworkEvent struct { + // If available, this is the kernel time: + // For sent messages, this is the time at which the first bit was sent. + // For received messages, this is the time at which the last bit was + // received. + KernelTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=kernel_time,json=kernelTime" json:"kernel_time,omitempty"` + Type Span_TimeEvent_NetworkEvent_Type `protobuf:"varint,2,opt,name=type,enum=google.tracing.v1.Span_TimeEvent_NetworkEvent_Type" json:"type,omitempty"` + // Every message has an identifier, that must be different from all the + // network messages in this span. + // This is very important when the request/response are streamed. + MessageId uint64 `protobuf:"varint,3,opt,name=message_id,json=messageId" json:"message_id,omitempty"` + // Number of bytes send/receive. + MessageSize uint64 `protobuf:"varint,4,opt,name=message_size,json=messageSize" json:"message_size,omitempty"` +} + +func (m *Span_TimeEvent_NetworkEvent) Reset() { *m = Span_TimeEvent_NetworkEvent{} } +func (m *Span_TimeEvent_NetworkEvent) String() string { return proto.CompactTextString(m) } +func (*Span_TimeEvent_NetworkEvent) ProtoMessage() {} +func (*Span_TimeEvent_NetworkEvent) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{4, 0, 1} +} + +func (m *Span_TimeEvent_NetworkEvent) GetKernelTime() *google_protobuf1.Timestamp { + if m != nil { + return m.KernelTime + } + return nil +} + +func (m *Span_TimeEvent_NetworkEvent) GetType() Span_TimeEvent_NetworkEvent_Type { + if m != nil { + return m.Type + } + return Span_TimeEvent_NetworkEvent_UNSPECIFIED +} + +func (m *Span_TimeEvent_NetworkEvent) GetMessageId() uint64 { + if m != nil { + return m.MessageId + } + return 0 +} + +func (m *Span_TimeEvent_NetworkEvent) GetMessageSize() uint64 { + if m != nil { + return m.MessageSize + } + return 0 +} + +// Link one span with another which may be in a different Trace. Used (for +// example) in batching operations, where a single batch handler processes +// multiple requests from different traces. +type Span_Link struct { + // The trace and span identifier of the linked span. + TraceId *TraceId `protobuf:"bytes,1,opt,name=trace_id,json=traceId" json:"trace_id,omitempty"` + SpanId uint64 `protobuf:"fixed64,2,opt,name=span_id,json=spanId" json:"span_id,omitempty"` + Type Span_Link_Type `protobuf:"varint,3,opt,name=type,enum=google.tracing.v1.Span_Link_Type" json:"type,omitempty"` +} + +func (m *Span_Link) Reset() { *m = Span_Link{} } +func (m *Span_Link) String() string { return proto.CompactTextString(m) } +func (*Span_Link) ProtoMessage() {} +func (*Span_Link) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 1} } + +func (m *Span_Link) GetTraceId() *TraceId { + if m != nil { + return m.TraceId + } + return nil +} + +func (m *Span_Link) GetSpanId() uint64 { + if m != nil { + return m.SpanId + } + return 0 +} + +func (m *Span_Link) GetType() Span_Link_Type { + if m != nil { + return m.Type + } + return Span_Link_UNSPECIFIED +} + +// A trace describes how long it takes for an application to perform some +// operations. It consists of a tree of spans, each of which contains details +// about an operation with time information and operation details. +type Trace struct { + // Globally unique identifier for the trace. Common to all the spans. + TraceId *TraceId `protobuf:"bytes,1,opt,name=trace_id,json=traceId" json:"trace_id,omitempty"` + // Collection of spans in the trace. The root span has parent_id == 0. + Spans []*Span `protobuf:"bytes,2,rep,name=spans" json:"spans,omitempty"` +} + +func (m *Trace) Reset() { *m = Trace{} } +func (m *Trace) String() string { return proto.CompactTextString(m) } +func (*Trace) ProtoMessage() {} +func (*Trace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *Trace) GetTraceId() *TraceId { + if m != nil { + return m.TraceId + } + return nil +} + +func (m *Trace) GetSpans() []*Span { + if m != nil { + return m.Spans + } + return nil +} + +func init() { + proto.RegisterType((*TraceId)(nil), "google.tracing.v1.TraceId") + proto.RegisterType((*Module)(nil), "google.tracing.v1.Module") + proto.RegisterType((*StackTrace)(nil), "google.tracing.v1.StackTrace") + proto.RegisterType((*StackTrace_StackFrame)(nil), "google.tracing.v1.StackTrace.StackFrame") + proto.RegisterType((*LabelValue)(nil), "google.tracing.v1.LabelValue") + proto.RegisterType((*Span)(nil), "google.tracing.v1.Span") + proto.RegisterType((*Span_TimeEvent)(nil), "google.tracing.v1.Span.TimeEvent") + proto.RegisterType((*Span_TimeEvent_Annotation)(nil), "google.tracing.v1.Span.TimeEvent.Annotation") + proto.RegisterType((*Span_TimeEvent_NetworkEvent)(nil), "google.tracing.v1.Span.TimeEvent.NetworkEvent") + proto.RegisterType((*Span_Link)(nil), "google.tracing.v1.Span.Link") + proto.RegisterType((*Trace)(nil), "google.tracing.v1.Trace") + proto.RegisterEnum("google.tracing.v1.Span_TimeEvent_NetworkEvent_Type", Span_TimeEvent_NetworkEvent_Type_name, Span_TimeEvent_NetworkEvent_Type_value) + proto.RegisterEnum("google.tracing.v1.Span_Link_Type", Span_Link_Type_name, Span_Link_Type_value) +} + +func init() { proto.RegisterFile("google/tracing/trace.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1102 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x6e, 0x1a, 0x47, + 0x14, 0x66, 0xf9, 0x59, 0xe0, 0x2c, 0x76, 0xc8, 0x54, 0xad, 0x09, 0x8d, 0x65, 0x9b, 0xa8, 0x92, + 0xe5, 0x26, 0x8b, 0x82, 0x15, 0xc9, 0x8d, 0xa5, 0xaa, 0xb1, 0x8d, 0x0b, 0x52, 0x8a, 0xd0, 0xe0, + 0x58, 0x55, 0x6f, 0x56, 0xc3, 0xee, 0x18, 0x56, 0x2c, 0xb3, 0xab, 0x9d, 0x81, 0xc6, 0xbe, 0xed, + 0x1b, 0xf4, 0x1d, 0x7a, 0xdb, 0x37, 0xe8, 0x83, 0xb4, 0x4f, 0x53, 0xcd, 0xcf, 0x62, 0xaa, 0xd8, + 0x71, 0x53, 0xa9, 0x57, 0xcc, 0x7c, 0xe7, 0x3b, 0x67, 0xce, 0x7c, 0xe7, 0x9c, 0x59, 0xa0, 0x39, + 0x89, 0xe3, 0x49, 0x44, 0xdb, 0x22, 0x25, 0x7e, 0xc8, 0x26, 0xea, 0x97, 0xba, 0x49, 0x1a, 0x8b, + 0x18, 0x3d, 0xd6, 0x36, 0xd7, 0xd8, 0xdc, 0xe5, 0xcb, 0xe6, 0x53, 0x43, 0x27, 0x49, 0xd8, 0x26, + 0x8c, 0xc5, 0x82, 0x88, 0x30, 0x66, 0x5c, 0x3b, 0x34, 0x77, 0x8c, 0x55, 0xed, 0xc6, 0x8b, 0xab, + 0xb6, 0x08, 0xe7, 0x94, 0x0b, 0x32, 0x4f, 0x0c, 0x61, 0xcb, 0x10, 0xd2, 0xc4, 0x6f, 0x73, 0x41, + 0xc4, 0xc2, 0x78, 0xb6, 0x0e, 0xa0, 0x7c, 0x21, 0x4f, 0xee, 0x07, 0x68, 0x07, 0x9c, 0x29, 0x7d, + 0xef, 0x51, 0xe6, 0xc7, 0x01, 0x0d, 0x1a, 0xd6, 0xae, 0xb5, 0x5f, 0xc5, 0x30, 0xa5, 0xef, 0xbb, + 0x1a, 0x69, 0x1d, 0x83, 0xfd, 0x43, 0x1c, 0x2c, 0x22, 0x8a, 0xbe, 0x00, 0x7b, 0xae, 0x56, 0x86, + 0x65, 0x76, 0xe8, 0x09, 0x54, 0xc6, 0x8b, 0x30, 0x0a, 0xbc, 0x30, 0x68, 0xe4, 0x95, 0xa5, 0xac, + 0xf6, 0xfd, 0xa0, 0xf5, 0x7b, 0x01, 0x60, 0x24, 0x88, 0x3f, 0x53, 0xc7, 0xa1, 0x3e, 0x38, 0x5c, + 0xee, 0xbc, 0xab, 0x94, 0xcc, 0x65, 0x98, 0xc2, 0xbe, 0xd3, 0xd9, 0x77, 0x3f, 0xb8, 0xb8, 0x7b, + 0xeb, 0xa3, 0x97, 0xe7, 0x92, 0x8f, 0x81, 0xaf, 0xd6, 0xe8, 0x05, 0x7c, 0xa6, 0x43, 0x29, 0x09, + 0xbd, 0x29, 0xe1, 0xd3, 0xec, 0xfc, 0x22, 0xae, 0xf3, 0x95, 0x7f, 0x8f, 0xf0, 0x69, 0x3f, 0x68, + 0xfe, 0x96, 0x37, 0x89, 0x68, 0xef, 0x67, 0xb0, 0x71, 0xb5, 0x60, 0xbe, 0x54, 0xd3, 0x63, 0x3a, + 0x15, 0x99, 0x77, 0x2d, 0x03, 0x07, 0x92, 0xf4, 0x1c, 0x50, 0x9c, 0x86, 0x13, 0xef, 0x9f, 0x4c, + 0x7d, 0xc3, 0xba, 0xb4, 0x9c, 0xaf, 0xb3, 0xbf, 0x84, 0xea, 0x55, 0x18, 0x51, 0x4d, 0x2a, 0x28, + 0x52, 0x45, 0x02, 0xca, 0xb8, 0x03, 0x4e, 0x14, 0x32, 0xea, 0xb1, 0xc5, 0x7c, 0x4c, 0xd3, 0x46, + 0x71, 0xd7, 0xda, 0x2f, 0x60, 0x90, 0xd0, 0x40, 0x21, 0x32, 0x21, 0x3f, 0x8e, 0x16, 0x73, 0x96, + 0x51, 0x4a, 0x8a, 0x52, 0xd3, 0xa0, 0x21, 0xbd, 0x06, 0x27, 0x8a, 0x49, 0xe0, 0x99, 0x2a, 0xd8, + 0xbb, 0xd6, 0xbe, 0xd3, 0x79, 0x72, 0x87, 0x7c, 0xba, 0x60, 0x18, 0x24, 0xdb, 0x14, 0xef, 0x2b, + 0xd8, 0xe4, 0xf1, 0x22, 0xf5, 0xa9, 0xb7, 0xa4, 0x29, 0x0f, 0x63, 0xd6, 0x28, 0xab, 0x1c, 0x37, + 0x34, 0x7a, 0xa9, 0xc1, 0xd6, 0x0d, 0xc0, 0x5b, 0x32, 0xa6, 0xd1, 0x25, 0x89, 0x16, 0x52, 0xa6, + 0x1a, 0x17, 0x69, 0xc8, 0x26, 0xde, 0x52, 0xee, 0xb5, 0x4a, 0xbd, 0x1c, 0x76, 0x34, 0xaa, 0x49, + 0xdb, 0x50, 0x0d, 0x99, 0x30, 0x0c, 0xa9, 0x4e, 0xa1, 0x97, 0xc3, 0x95, 0x90, 0x09, 0x6d, 0xde, + 0x01, 0x18, 0xc7, 0x71, 0x64, 0xec, 0x52, 0x98, 0x4a, 0x2f, 0x87, 0xab, 0x12, 0x53, 0x84, 0x93, + 0x32, 0x94, 0x94, 0xad, 0xf5, 0x6b, 0x0d, 0x8a, 0xa3, 0x84, 0x30, 0xb4, 0x09, 0xf9, 0x50, 0xb7, + 0xa2, 0x8d, 0xf3, 0x61, 0x80, 0x10, 0x14, 0xd7, 0xa4, 0x57, 0x6b, 0x29, 0x77, 0x42, 0x52, 0xca, + 0x84, 0xac, 0x7a, 0x41, 0x51, 0x2b, 0x1a, 0xe8, 0x07, 0xe8, 0x0c, 0xea, 0x51, 0xec, 0x93, 0xc8, + 0xe3, 0x82, 0xa4, 0xc2, 0x93, 0x73, 0xa1, 0x34, 0x77, 0x3a, 0xcd, 0x4c, 0xad, 0x6c, 0x68, 0xdc, + 0x8b, 0x6c, 0x68, 0xf0, 0xa6, 0xf2, 0x19, 0x49, 0x17, 0x09, 0xa2, 0xef, 0x40, 0x23, 0x1e, 0x65, + 0x81, 0x8e, 0x51, 0x7a, 0x30, 0x46, 0x4d, 0x79, 0x74, 0x59, 0xa0, 0x22, 0x1c, 0x83, 0x1d, 0x49, + 0x35, 0x79, 0xc3, 0x56, 0xad, 0xfe, 0xec, 0xae, 0x56, 0x4f, 0x08, 0x73, 0x95, 0xe6, 0xbc, 0xcb, + 0x44, 0x7a, 0x8d, 0x8d, 0x0b, 0xfa, 0x36, 0x1b, 0x16, 0xd5, 0xe1, 0xaa, 0x5c, 0x4e, 0x67, 0xfb, + 0xa3, 0xc3, 0x62, 0x26, 0x44, 0x0f, 0xdb, 0x09, 0x38, 0x32, 0x69, 0x8f, 0x2e, 0x29, 0x13, 0xbc, + 0x51, 0x51, 0x19, 0xec, 0xdd, 0x97, 0x81, 0xcc, 0xb7, 0x2b, 0x99, 0x18, 0x44, 0xb6, 0xe4, 0xa8, + 0x03, 0xa5, 0x28, 0x64, 0x33, 0xde, 0xa8, 0x2a, 0xef, 0xa7, 0xf7, 0xe6, 0x1f, 0xb2, 0x19, 0xd6, + 0x54, 0x74, 0x00, 0xb6, 0x7e, 0x6c, 0x1a, 0xa0, 0x52, 0x46, 0x99, 0x53, 0x9a, 0xf8, 0x32, 0x57, + 0xb1, 0xe0, 0xd8, 0x30, 0xd0, 0x01, 0x3c, 0x9e, 0x12, 0xee, 0xa5, 0x74, 0x1e, 0x0b, 0xea, 0xe9, + 0xfa, 0x35, 0x1c, 0xd9, 0x23, 0xf8, 0xd1, 0x94, 0x70, 0xac, 0xf0, 0xa1, 0x82, 0x9b, 0x7f, 0x96, + 0xa0, 0xba, 0xca, 0x12, 0x7d, 0x03, 0xa0, 0x8b, 0xa3, 0x0a, 0x63, 0x3d, 0x58, 0x98, 0xaa, 0x62, + 0xab, 0xaa, 0x0c, 0x00, 0x6e, 0x1f, 0x53, 0xd5, 0x54, 0x4e, 0xe7, 0xf9, 0x83, 0xba, 0xb8, 0x6f, + 0x56, 0x3e, 0xbd, 0x1c, 0x5e, 0x8b, 0x80, 0xde, 0xc1, 0x06, 0xa3, 0xe2, 0xe7, 0x38, 0x9d, 0x69, + 0xad, 0x55, 0x3b, 0x3a, 0x1d, 0xf7, 0xe1, 0x90, 0x03, 0xed, 0xa6, 0x36, 0xbd, 0x1c, 0xae, 0xb1, + 0xb5, 0x7d, 0xf3, 0x2f, 0x0b, 0xe0, 0xf6, 0x4c, 0xb4, 0x0b, 0x4e, 0x40, 0xb9, 0x9f, 0x86, 0x89, + 0x4a, 0x5b, 0x3f, 0x58, 0xeb, 0x10, 0x1a, 0xae, 0xba, 0x2d, 0xaf, 0xaa, 0x75, 0xf4, 0x29, 0x77, + 0xba, 0xab, 0x05, 0x9b, 0x3f, 0x82, 0xb3, 0x06, 0xa3, 0x3a, 0x14, 0x66, 0xf4, 0xda, 0x1c, 0x2d, + 0x97, 0xe8, 0xd0, 0xcc, 0xae, 0x51, 0xf1, 0xae, 0xee, 0xbc, 0x7d, 0x4e, 0xb0, 0xe6, 0xbe, 0xce, + 0x1f, 0x59, 0xcd, 0x5f, 0xf2, 0x50, 0x5b, 0xbf, 0x3d, 0x3a, 0x06, 0x67, 0x46, 0x53, 0x46, 0xff, + 0x75, 0x41, 0x41, 0xd3, 0x55, 0x45, 0xbf, 0x87, 0xa2, 0xb8, 0x4e, 0x74, 0x16, 0x9b, 0x9d, 0xc3, + 0x4f, 0x13, 0xde, 0xbd, 0xb8, 0x4e, 0x28, 0x56, 0x01, 0xd0, 0x36, 0xc0, 0x9c, 0x72, 0x4e, 0x26, + 0x34, 0x7b, 0x56, 0x8a, 0xb8, 0x6a, 0x90, 0x7e, 0x80, 0xf6, 0xa0, 0x96, 0x99, 0x79, 0x78, 0xa3, + 0xdf, 0x94, 0x22, 0x76, 0x0c, 0x36, 0x0a, 0x6f, 0x68, 0xeb, 0x6b, 0x28, 0xca, 0x78, 0xe8, 0x11, + 0x38, 0xef, 0x06, 0xa3, 0x61, 0xf7, 0xb4, 0x7f, 0xde, 0xef, 0x9e, 0xd5, 0x73, 0xa8, 0x02, 0xc5, + 0x51, 0x77, 0x70, 0x51, 0xb7, 0xe4, 0x0a, 0x77, 0x4f, 0x2f, 0xeb, 0xf9, 0xd5, 0xd3, 0xd7, 0xfc, + 0xc3, 0x82, 0xa2, 0x9c, 0x21, 0xf4, 0x0a, 0x2a, 0xfa, 0x83, 0x66, 0x1e, 0xc0, 0x35, 0x0d, 0xd6, + 0x6e, 0x63, 0x3e, 0xde, 0xb8, 0x2c, 0xcc, 0x57, 0x7c, 0x0b, 0xca, 0x3c, 0x21, 0x2c, 0xfb, 0x02, + 0xda, 0xd8, 0x96, 0xdb, 0x7e, 0x80, 0x5e, 0x19, 0x65, 0x0a, 0x4a, 0x99, 0xbd, 0x8f, 0xcd, 0xef, + 0x9a, 0x0e, 0x2d, 0xf7, 0xbe, 0x5b, 0x54, 0xa1, 0x74, 0xda, 0xeb, 0xbf, 0x3d, 0xab, 0x5b, 0x08, + 0xc0, 0x1e, 0xbe, 0xc1, 0xf2, 0x4a, 0xf9, 0xff, 0xaf, 0x51, 0x5a, 0x73, 0x28, 0xe9, 0xe7, 0xec, + 0x3f, 0x2a, 0xf3, 0x02, 0x4a, 0x52, 0x8a, 0x6c, 0x26, 0xb6, 0xee, 0x51, 0x00, 0x6b, 0xd6, 0x89, + 0x07, 0x9f, 0xfb, 0xf1, 0xfc, 0x43, 0xd2, 0x09, 0xa8, 0xc8, 0x43, 0xd9, 0x87, 0x43, 0xeb, 0xa7, + 0x23, 0x43, 0x98, 0xc4, 0x11, 0x61, 0x13, 0x37, 0x4e, 0x27, 0xed, 0x09, 0x65, 0xaa, 0x4b, 0xdb, + 0xda, 0x44, 0x92, 0x90, 0xaf, 0xfe, 0xe6, 0x2d, 0x5f, 0x1e, 0x9b, 0xe5, 0xd8, 0x56, 0xa4, 0xc3, + 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x30, 0x5b, 0x04, 0x0a, 0x0a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/type/color/color.pb.go b/vendor/google.golang.org/genproto/googleapis/type/color/color.pb.go new file mode 100644 index 0000000..1f31b6d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/type/color/color.pb.go @@ -0,0 +1,222 @@ +// Code generated by protoc-gen-go. +// source: google/type/color.proto +// DO NOT EDIT! + +/* +Package color is a generated protocol buffer package. + +It is generated from these files: + google/type/color.proto + +It has these top-level messages: + Color +*/ +package color + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/wrappers" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Represents a color in the RGBA color space. This representation is designed +// for simplicity of conversion to/from color representations in various +// languages over compactness; for example, the fields of this representation +// can be trivially provided to the constructor of "java.awt.Color" in Java; it +// can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" +// method in iOS; and, with just a little work, it can be easily formatted into +// a CSS "rgba()" string in JavaScript, as well. Here are some examples: +// +// Example (Java): +// +// import com.google.type.Color; +// +// // ... +// public static java.awt.Color fromProto(Color protocolor) { +// float alpha = protocolor.hasAlpha() +// ? protocolor.getAlpha().getValue() +// : 1.0; +// +// return new java.awt.Color( +// protocolor.getRed(), +// protocolor.getGreen(), +// protocolor.getBlue(), +// alpha); +// } +// +// public static Color toProto(java.awt.Color color) { +// float red = (float) color.getRed(); +// float green = (float) color.getGreen(); +// float blue = (float) color.getBlue(); +// float denominator = 255.0; +// Color.Builder resultBuilder = +// Color +// .newBuilder() +// .setRed(red / denominator) +// .setGreen(green / denominator) +// .setBlue(blue / denominator); +// int alpha = color.getAlpha(); +// if (alpha != 255) { +// result.setAlpha( +// FloatValue +// .newBuilder() +// .setValue(((float) alpha) / denominator) +// .build()); +// } +// return resultBuilder.build(); +// } +// // ... +// +// Example (iOS / Obj-C): +// +// // ... +// static UIColor* fromProto(Color* protocolor) { +// float red = [protocolor red]; +// float green = [protocolor green]; +// float blue = [protocolor blue]; +// FloatValue* alpha_wrapper = [protocolor alpha]; +// float alpha = 1.0; +// if (alpha_wrapper != nil) { +// alpha = [alpha_wrapper value]; +// } +// return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; +// } +// +// static Color* toProto(UIColor* color) { +// CGFloat red, green, blue, alpha; +// if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { +// return nil; +// } +// Color* result = [Color alloc] init]; +// [result setRed:red]; +// [result setGreen:green]; +// [result setBlue:blue]; +// if (alpha <= 0.9999) { +// [result setAlpha:floatWrapperWithValue(alpha)]; +// } +// [result autorelease]; +// return result; +// } +// // ... +// +// Example (JavaScript): +// +// // ... +// +// var protoToCssColor = function(rgb_color) { +// var redFrac = rgb_color.red || 0.0; +// var greenFrac = rgb_color.green || 0.0; +// var blueFrac = rgb_color.blue || 0.0; +// var red = Math.floor(redFrac * 255); +// var green = Math.floor(greenFrac * 255); +// var blue = Math.floor(blueFrac * 255); +// +// if (!('alpha' in rgb_color)) { +// return rgbToCssColor_(red, green, blue); +// } +// +// var alphaFrac = rgb_color.alpha.value || 0.0; +// var rgbParams = [red, green, blue].join(','); +// return ['rgba(', rgbParams, ',', alphaFrac, ')'].join(''); +// }; +// +// var rgbToCssColor_ = function(red, green, blue) { +// var rgbNumber = new Number((red << 16) | (green << 8) | blue); +// var hexString = rgbNumber.toString(16); +// var missingZeros = 6 - hexString.length; +// var resultBuilder = ['#']; +// for (var i = 0; i < missingZeros; i++) { +// resultBuilder.push('0'); +// } +// resultBuilder.push(hexString); +// return resultBuilder.join(''); +// }; +// +// // ... +type Color struct { + // The amount of red in the color as a value in the interval [0, 1]. + Red float32 `protobuf:"fixed32,1,opt,name=red" json:"red,omitempty"` + // The amount of green in the color as a value in the interval [0, 1]. + Green float32 `protobuf:"fixed32,2,opt,name=green" json:"green,omitempty"` + // The amount of blue in the color as a value in the interval [0, 1]. + Blue float32 `protobuf:"fixed32,3,opt,name=blue" json:"blue,omitempty"` + // The fraction of this color that should be applied to the pixel. That is, + // the final pixel color is defined by the equation: + // + // pixel color = alpha * (this color) + (1.0 - alpha) * (background color) + // + // This means that a value of 1.0 corresponds to a solid color, whereas + // a value of 0.0 corresponds to a completely transparent color. This + // uses a wrapper message rather than a simple float scalar so that it is + // possible to distinguish between a default value and the value being unset. + // If omitted, this color object is to be rendered as a solid color + // (as if the alpha value had been explicitly given with a value of 1.0). + Alpha *google_protobuf.FloatValue `protobuf:"bytes,4,opt,name=alpha" json:"alpha,omitempty"` +} + +func (m *Color) Reset() { *m = Color{} } +func (m *Color) String() string { return proto.CompactTextString(m) } +func (*Color) ProtoMessage() {} +func (*Color) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Color) GetRed() float32 { + if m != nil { + return m.Red + } + return 0 +} + +func (m *Color) GetGreen() float32 { + if m != nil { + return m.Green + } + return 0 +} + +func (m *Color) GetBlue() float32 { + if m != nil { + return m.Blue + } + return 0 +} + +func (m *Color) GetAlpha() *google_protobuf.FloatValue { + if m != nil { + return m.Alpha + } + return nil +} + +func init() { + proto.RegisterType((*Color)(nil), "google.type.Color") +} + +func init() { proto.RegisterFile("google/type/color.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 224 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x8f, 0x31, 0x4b, 0xc5, 0x30, + 0x10, 0xc7, 0x49, 0xfb, 0xea, 0x70, 0x6f, 0x50, 0x82, 0x60, 0x50, 0x90, 0x87, 0xd3, 0x9b, 0x12, + 0x54, 0x70, 0x71, 0xab, 0xa0, 0x6b, 0x29, 0xe2, 0x20, 0x38, 0xa4, 0xf5, 0x8c, 0x42, 0xec, 0x85, + 0xb4, 0x55, 0xfc, 0x3a, 0x7e, 0x52, 0xc9, 0xa5, 0x42, 0x97, 0x70, 0xb9, 0xdf, 0xef, 0x92, 0xff, + 0xc1, 0x89, 0x23, 0x72, 0x1e, 0xcd, 0xf4, 0x13, 0xd0, 0xf4, 0xe4, 0x29, 0xea, 0x10, 0x69, 0x22, + 0xb9, 0xcd, 0x40, 0x27, 0x70, 0x7a, 0xbe, 0x58, 0x8c, 0xba, 0xf9, 0xcd, 0x7c, 0x47, 0x1b, 0x02, + 0xc6, 0x31, 0xcb, 0x17, 0x5f, 0x50, 0xdd, 0xa5, 0x59, 0x79, 0x04, 0x65, 0xc4, 0x57, 0x25, 0x76, + 0x62, 0x5f, 0xb4, 0xa9, 0x94, 0xc7, 0x50, 0xb9, 0x88, 0x38, 0xa8, 0x82, 0x7b, 0xf9, 0x22, 0x25, + 0x6c, 0x3a, 0x3f, 0xa3, 0x2a, 0xb9, 0xc9, 0xb5, 0xbc, 0x84, 0xca, 0xfa, 0xf0, 0x6e, 0xd5, 0x66, + 0x27, 0xf6, 0xdb, 0xab, 0x33, 0xbd, 0x24, 0xf8, 0xff, 0x54, 0xdf, 0x7b, 0xb2, 0xd3, 0x93, 0xf5, + 0x33, 0xb6, 0xd9, 0xac, 0x5f, 0xe0, 0xb0, 0xa7, 0x4f, 0xbd, 0x8a, 0x5a, 0x03, 0x07, 0x69, 0xd2, + 0x4c, 0x23, 0x9e, 0x6f, 0x16, 0xe4, 0xc8, 0xdb, 0xc1, 0x69, 0x8a, 0xce, 0x38, 0x1c, 0xf8, 0x45, + 0x93, 0x91, 0x0d, 0x1f, 0xe3, 0x6a, 0xfb, 0x5b, 0x3e, 0x7f, 0x8b, 0xf2, 0xe1, 0xb1, 0xe9, 0x0e, + 0x58, 0xbc, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x42, 0x23, 0x2a, 0xd0, 0x25, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/type/date/date.pb.go b/vendor/google.golang.org/genproto/googleapis/type/date/date.pb.go new file mode 100644 index 0000000..97ed47c --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/type/date/date.pb.go @@ -0,0 +1,94 @@ +// Code generated by protoc-gen-go. +// source: google/type/date.proto +// DO NOT EDIT! + +/* +Package date is a generated protocol buffer package. + +It is generated from these files: + google/type/date.proto + +It has these top-level messages: + Date +*/ +package date + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Represents a whole calendar date, e.g. date of birth. The time of day and +// time zone are either specified elsewhere or are not significant. The date +// is relative to the Proleptic Gregorian Calendar. The day may be 0 to +// represent a year and month where the day is not significant, e.g. credit card +// expiration date. The year may be 0 to represent a month and day independent +// of year, e.g. anniversary date. Related types are [google.type.TimeOfDay][google.type.TimeOfDay] +// and `google.protobuf.Timestamp`. +type Date struct { + // Year of date. Must be from 1 to 9999, or 0 if specifying a date without + // a year. + Year int32 `protobuf:"varint,1,opt,name=year" json:"year,omitempty"` + // Month of year. Must be from 1 to 12. + Month int32 `protobuf:"varint,2,opt,name=month" json:"month,omitempty"` + // Day of month. Must be from 1 to 31 and valid for the year and month, or 0 + // if specifying a year/month where the day is not significant. + Day int32 `protobuf:"varint,3,opt,name=day" json:"day,omitempty"` +} + +func (m *Date) Reset() { *m = Date{} } +func (m *Date) String() string { return proto.CompactTextString(m) } +func (*Date) ProtoMessage() {} +func (*Date) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Date) GetYear() int32 { + if m != nil { + return m.Year + } + return 0 +} + +func (m *Date) GetMonth() int32 { + if m != nil { + return m.Month + } + return 0 +} + +func (m *Date) GetDay() int32 { + if m != nil { + return m.Day + } + return 0 +} + +func init() { + proto.RegisterType((*Date)(nil), "google.type.Date") +} + +func init() { proto.RegisterFile("google/type/date.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 172 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x4f, 0x49, 0x2c, 0x49, 0xd5, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0xe2, 0x86, 0x88, 0xeb, 0x81, 0xc4, 0x95, 0x9c, 0xb8, 0x58, 0x5c, 0x12, 0x4b, + 0x52, 0x85, 0x84, 0xb8, 0x58, 0x2a, 0x53, 0x13, 0x8b, 0x24, 0x18, 0x15, 0x18, 0x35, 0x58, 0x83, + 0xc0, 0x6c, 0x21, 0x11, 0x2e, 0xd6, 0xdc, 0xfc, 0xbc, 0x92, 0x0c, 0x09, 0x26, 0xb0, 0x20, 0x84, + 0x23, 0x24, 0xc0, 0xc5, 0x9c, 0x92, 0x58, 0x29, 0xc1, 0x0c, 0x16, 0x03, 0x31, 0x9d, 0x62, 0xb9, + 0xf8, 0x93, 0xf3, 0x73, 0xf5, 0x90, 0x8c, 0x75, 0xe2, 0x04, 0x19, 0x1a, 0x00, 0xb2, 0x2e, 0x80, + 0x31, 0xca, 0x04, 0x2a, 0x93, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, + 0x9e, 0x9a, 0x07, 0x76, 0x8c, 0x3e, 0x44, 0x2a, 0xb1, 0x20, 0xb3, 0x18, 0xe1, 0x4e, 0x6b, 0x10, + 0xf1, 0x83, 0x91, 0x71, 0x11, 0x13, 0xb3, 0x7b, 0x48, 0x40, 0x12, 0x1b, 0x58, 0xa5, 0x31, 0x20, + 0x00, 0x00, 0xff, 0xff, 0x84, 0x95, 0xf3, 0x4c, 0xd0, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/type/dayofweek/dayofweek.pb.go b/vendor/google.golang.org/genproto/googleapis/type/dayofweek/dayofweek.pb.go new file mode 100644 index 0000000..77803c1 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/type/dayofweek/dayofweek.pb.go @@ -0,0 +1,101 @@ +// Code generated by protoc-gen-go. +// source: google/type/dayofweek.proto +// DO NOT EDIT! + +/* +Package dayofweek is a generated protocol buffer package. + +It is generated from these files: + google/type/dayofweek.proto + +It has these top-level messages: +*/ +package dayofweek + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Represents a day of week. +type DayOfWeek int32 + +const ( + // The unspecified day-of-week. + DayOfWeek_DAY_OF_WEEK_UNSPECIFIED DayOfWeek = 0 + // The day-of-week of Monday. + DayOfWeek_MONDAY DayOfWeek = 1 + // The day-of-week of Tuesday. + DayOfWeek_TUESDAY DayOfWeek = 2 + // The day-of-week of Wednesday. + DayOfWeek_WEDNESDAY DayOfWeek = 3 + // The day-of-week of Thursday. + DayOfWeek_THURSDAY DayOfWeek = 4 + // The day-of-week of Friday. + DayOfWeek_FRIDAY DayOfWeek = 5 + // The day-of-week of Saturday. + DayOfWeek_SATURDAY DayOfWeek = 6 + // The day-of-week of Sunday. + DayOfWeek_SUNDAY DayOfWeek = 7 +) + +var DayOfWeek_name = map[int32]string{ + 0: "DAY_OF_WEEK_UNSPECIFIED", + 1: "MONDAY", + 2: "TUESDAY", + 3: "WEDNESDAY", + 4: "THURSDAY", + 5: "FRIDAY", + 6: "SATURDAY", + 7: "SUNDAY", +} +var DayOfWeek_value = map[string]int32{ + "DAY_OF_WEEK_UNSPECIFIED": 0, + "MONDAY": 1, + "TUESDAY": 2, + "WEDNESDAY": 3, + "THURSDAY": 4, + "FRIDAY": 5, + "SATURDAY": 6, + "SUNDAY": 7, +} + +func (x DayOfWeek) String() string { + return proto.EnumName(DayOfWeek_name, int32(x)) +} +func (DayOfWeek) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func init() { + proto.RegisterEnum("google.type.DayOfWeek", DayOfWeek_name, DayOfWeek_value) +} + +func init() { proto.RegisterFile("google/type/dayofweek.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 235 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x4f, 0x49, 0xac, 0xcc, 0x4f, 0x2b, 0x4f, 0x4d, + 0xcd, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x86, 0x48, 0xea, 0x81, 0x24, 0xb5, 0x5a, + 0x18, 0xb9, 0x38, 0x5d, 0x12, 0x2b, 0xfd, 0xd3, 0xc2, 0x53, 0x53, 0xb3, 0x85, 0xa4, 0xb9, 0xc4, + 0x5d, 0x1c, 0x23, 0xe3, 0xfd, 0xdd, 0xe2, 0xc3, 0x5d, 0x5d, 0xbd, 0xe3, 0x43, 0xfd, 0x82, 0x03, + 0x5c, 0x9d, 0x3d, 0xdd, 0x3c, 0x5d, 0x5d, 0x04, 0x18, 0x84, 0xb8, 0xb8, 0xd8, 0x7c, 0xfd, 0xfd, + 0x5c, 0x1c, 0x23, 0x05, 0x18, 0x85, 0xb8, 0xb9, 0xd8, 0x43, 0x42, 0x5d, 0x83, 0x41, 0x1c, 0x26, + 0x21, 0x5e, 0x2e, 0xce, 0x70, 0x57, 0x17, 0x3f, 0x08, 0x97, 0x59, 0x88, 0x87, 0x8b, 0x23, 0xc4, + 0x23, 0x34, 0x08, 0xcc, 0x63, 0x01, 0xe9, 0x72, 0x0b, 0xf2, 0x04, 0xb1, 0x59, 0x41, 0x32, 0xc1, + 0x8e, 0x21, 0xa1, 0x41, 0x20, 0x1e, 0x1b, 0x48, 0x26, 0x38, 0x14, 0x6c, 0x1e, 0xbb, 0x53, 0x26, + 0x17, 0x7f, 0x72, 0x7e, 0xae, 0x1e, 0x92, 0xcb, 0x9c, 0xf8, 0xe0, 0xce, 0x0a, 0x00, 0x39, 0x3b, + 0x80, 0x31, 0xca, 0x0e, 0x2a, 0x9d, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, + 0x9f, 0x9e, 0x9a, 0x07, 0xf6, 0x94, 0x3e, 0x44, 0x2a, 0xb1, 0x20, 0xb3, 0x18, 0xcd, 0xd3, 0xd6, + 0x70, 0xd6, 0x22, 0x26, 0x66, 0xf7, 0x90, 0x80, 0x24, 0x36, 0xb0, 0x06, 0x63, 0x40, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x6e, 0x23, 0xb2, 0xb3, 0x24, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/type/latlng/latlng.pb.go b/vendor/google.golang.org/genproto/googleapis/type/latlng/latlng.pb.go new file mode 100644 index 0000000..82229f0 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/type/latlng/latlng.pb.go @@ -0,0 +1,115 @@ +// Code generated by protoc-gen-go. +// source: google/type/latlng.proto +// DO NOT EDIT! + +/* +Package latlng is a generated protocol buffer package. + +It is generated from these files: + google/type/latlng.proto + +It has these top-level messages: + LatLng +*/ +package latlng + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// An object representing a latitude/longitude pair. This is expressed as a pair +// of doubles representing degrees latitude and degrees longitude. Unless +// specified otherwise, this must conform to the +// <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84 +// standard</a>. Values must be within normalized ranges. +// +// Example of normalization code in Python: +// +// def NormalizeLongitude(longitude): +// """Wraps decimal degrees longitude to [-180.0, 180.0].""" +// q, r = divmod(longitude, 360.0) +// if r > 180.0 or (r == 180.0 and q <= -1.0): +// return r - 360.0 +// return r +// +// def NormalizeLatLng(latitude, longitude): +// """Wraps decimal degrees latitude and longitude to +// [-90.0, 90.0] and [-180.0, 180.0], respectively.""" +// r = latitude % 360.0 +// if r <= 90.0: +// return r, NormalizeLongitude(longitude) +// elif r >= 270.0: +// return r - 360, NormalizeLongitude(longitude) +// else: +// return 180 - r, NormalizeLongitude(longitude + 180.0) +// +// assert 180.0 == NormalizeLongitude(180.0) +// assert -180.0 == NormalizeLongitude(-180.0) +// assert -179.0 == NormalizeLongitude(181.0) +// assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) +// assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) +// assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) +// assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) +// assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) +// assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) +// assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) +// assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) +// assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) +// assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) +type LatLng struct { + // The latitude in degrees. It must be in the range [-90.0, +90.0]. + Latitude float64 `protobuf:"fixed64,1,opt,name=latitude" json:"latitude,omitempty"` + // The longitude in degrees. It must be in the range [-180.0, +180.0]. + Longitude float64 `protobuf:"fixed64,2,opt,name=longitude" json:"longitude,omitempty"` +} + +func (m *LatLng) Reset() { *m = LatLng{} } +func (m *LatLng) String() string { return proto.CompactTextString(m) } +func (*LatLng) ProtoMessage() {} +func (*LatLng) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *LatLng) GetLatitude() float64 { + if m != nil { + return m.Latitude + } + return 0 +} + +func (m *LatLng) GetLongitude() float64 { + if m != nil { + return m.Longitude + } + return 0 +} + +func init() { + proto.RegisterType((*LatLng)(nil), "google.type.LatLng") +} + +func init() { proto.RegisterFile("google/type/latlng.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 165 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x48, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x49, 0x2c, 0xc9, 0xc9, 0x4b, 0xd7, 0x2b, + 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x86, 0xc8, 0xe8, 0x81, 0x64, 0x94, 0x9c, 0xb8, 0xd8, 0x7c, + 0x12, 0x4b, 0x7c, 0xf2, 0xd2, 0x85, 0xa4, 0xb8, 0x38, 0x72, 0x12, 0x4b, 0x32, 0x4b, 0x4a, 0x53, + 0x52, 0x25, 0x18, 0x15, 0x18, 0x35, 0x18, 0x83, 0xe0, 0x7c, 0x21, 0x19, 0x2e, 0xce, 0x9c, 0xfc, + 0xbc, 0x74, 0x88, 0x24, 0x13, 0x58, 0x12, 0x21, 0xe0, 0x94, 0xc0, 0xc5, 0x9f, 0x9c, 0x9f, 0xab, + 0x87, 0x64, 0xac, 0x13, 0x37, 0xc4, 0xd0, 0x00, 0x90, 0x85, 0x01, 0x8c, 0x51, 0x16, 0x50, 0xb9, + 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0xb0, 0x73, + 0xf4, 0x21, 0x52, 0x89, 0x05, 0x99, 0xc5, 0xc8, 0x6e, 0xb5, 0x86, 0x50, 0x8b, 0x98, 0x98, 0xdd, + 0x43, 0x02, 0x92, 0xd8, 0xc0, 0x4a, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x69, 0x12, 0x54, + 0x1c, 0xd5, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/type/money/money.pb.go b/vendor/google.golang.org/genproto/googleapis/type/money/money.pb.go new file mode 100644 index 0000000..5013df6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/type/money/money.pb.go @@ -0,0 +1,93 @@ +// Code generated by protoc-gen-go. +// source: google/type/money.proto +// DO NOT EDIT! + +/* +Package money is a generated protocol buffer package. + +It is generated from these files: + google/type/money.proto + +It has these top-level messages: + Money +*/ +package money + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Represents an amount of money with its currency type. +type Money struct { + // The 3-letter currency code defined in ISO 4217. + CurrencyCode string `protobuf:"bytes,1,opt,name=currency_code,json=currencyCode" json:"currency_code,omitempty"` + // The whole units of the amount. + // For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar. + Units int64 `protobuf:"varint,2,opt,name=units" json:"units,omitempty"` + // Number of nano (10^-9) units of the amount. + // The value must be between -999,999,999 and +999,999,999 inclusive. + // If `units` is positive, `nanos` must be positive or zero. + // If `units` is zero, `nanos` can be positive, zero, or negative. + // If `units` is negative, `nanos` must be negative or zero. + // For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000. + Nanos int32 `protobuf:"varint,3,opt,name=nanos" json:"nanos,omitempty"` +} + +func (m *Money) Reset() { *m = Money{} } +func (m *Money) String() string { return proto.CompactTextString(m) } +func (*Money) ProtoMessage() {} +func (*Money) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Money) GetCurrencyCode() string { + if m != nil { + return m.CurrencyCode + } + return "" +} + +func (m *Money) GetUnits() int64 { + if m != nil { + return m.Units + } + return 0 +} + +func (m *Money) GetNanos() int32 { + if m != nil { + return m.Nanos + } + return 0 +} + +func init() { + proto.RegisterType((*Money)(nil), "google.type.Money") +} + +func init() { proto.RegisterFile("google/type/money.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4f, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0xcd, 0xcf, 0x4b, 0xad, 0xd4, 0x2b, 0x28, + 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x86, 0x48, 0xe8, 0x81, 0x24, 0x94, 0x22, 0xb8, 0x58, 0x7d, 0x41, + 0x72, 0x42, 0xca, 0x5c, 0xbc, 0xc9, 0xa5, 0x45, 0x45, 0xa9, 0x79, 0xc9, 0x95, 0xf1, 0xc9, 0xf9, + 0x29, 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x3c, 0x30, 0x41, 0xe7, 0xfc, 0x94, 0x54, + 0x21, 0x11, 0x2e, 0xd6, 0xd2, 0xbc, 0xcc, 0x92, 0x62, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xe6, 0x20, + 0x08, 0x07, 0x24, 0x9a, 0x97, 0x98, 0x97, 0x5f, 0x2c, 0xc1, 0xac, 0xc0, 0xa8, 0xc1, 0x1a, 0x04, + 0xe1, 0x38, 0xc5, 0x72, 0xf1, 0x27, 0xe7, 0xe7, 0xea, 0x21, 0x59, 0xe6, 0xc4, 0x05, 0xb6, 0x2a, + 0x00, 0xe4, 0x8a, 0x00, 0xc6, 0x28, 0x33, 0xa8, 0x54, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, + 0x7e, 0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e, 0xd8, 0x8d, 0xfa, 0x10, 0xa9, 0xc4, 0x82, 0xcc, 0x62, + 0x24, 0xf7, 0x5b, 0x83, 0xc9, 0x45, 0x4c, 0xcc, 0xee, 0x21, 0x01, 0x49, 0x6c, 0x60, 0x85, 0xc6, + 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xc2, 0x5b, 0xa5, 0xe7, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/type/postaladdress/postal_address.pb.go b/vendor/google.golang.org/genproto/googleapis/type/postaladdress/postal_address.pb.go new file mode 100644 index 0000000..747112f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/type/postaladdress/postal_address.pb.go @@ -0,0 +1,241 @@ +// Code generated by protoc-gen-go. +// source: google/type/postal_address.proto +// DO NOT EDIT! + +/* +Package postaladdress is a generated protocol buffer package. + +It is generated from these files: + google/type/postal_address.proto + +It has these top-level messages: + PostalAddress +*/ +package postaladdress + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Represents a postal address, e.g. for postal delivery or payments addresses. +// Given a postal address, a postal service can deliver items to a premise, P.O. +// Box or similar. +// It is not intended to model geographical locations (roads, towns, +// mountains). +// +// In typical usage an address would be created via user input or from importing +// existing data, depending on the type of process. +// +// Advice on address input / editing: +// - Use an i18n-ready address widget such as +// https://github.com/googlei18n/libaddressinput) +// - Users should not be presented with UI elements for input or editing of +// fields outside countries where that field is used. +// +// For more guidance on how to use this schema, please see: +// https://support.google.com/business/answer/6397478 +type PostalAddress struct { + // The schema revision of the `PostalAddress`. + // All new revisions **must** be backward compatible with old revisions. + Revision int32 `protobuf:"varint,1,opt,name=revision" json:"revision,omitempty"` + // Required. CLDR region code of the country/region of the address. This + // is never inferred and it is up to the user to ensure the value is + // correct. See http://cldr.unicode.org/ and + // http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html + // for details. Example: "CH" for Switzerland. + RegionCode string `protobuf:"bytes,2,opt,name=region_code,json=regionCode" json:"region_code,omitempty"` + // Optional. BCP-47 language code of the contents of this address (if + // known). This is often the UI language of the input form or is expected + // to match one of the languages used in the address' country/region, or their + // transliterated equivalents. + // This can affect formatting in certain countries, but is not critical + // to the correctness of the data and will never affect any validation or + // other non-formatting related operations. + // + // If this value is not known, it should be omitted (rather than specifying a + // possibly incorrect default). + // + // Examples: "zh-Hant", "ja", "ja-Latn", "en". + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. Postal code of the address. Not all countries use or require + // postal codes to be present, but where they are used, they may trigger + // additional validation with other parts of the address (e.g. state/zip + // validation in the U.S.A.). + PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode" json:"postal_code,omitempty"` + // Optional. Additional, country-specific, sorting code. This is not used + // in most regions. Where it is used, the value is either a string like + // "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number + // alone, representing the "sector code" (Jamaica), "delivery area indicator" + // (Malawi) or "post office indicator" (e.g. Côte d'Ivoire). + SortingCode string `protobuf:"bytes,5,opt,name=sorting_code,json=sortingCode" json:"sorting_code,omitempty"` + // Optional. Highest administrative subdivision which is used for postal + // addresses of a country or region. + // For example, this can be a state, a province, an oblast, or a prefecture. + // Specifically, for Spain this is the province and not the autonomous + // community (e.g. "Barcelona" and not "Catalonia"). + // Many countries don't use an administrative area in postal addresses. E.g. + // in Switzerland this should be left unpopulated. + AdministrativeArea string `protobuf:"bytes,6,opt,name=administrative_area,json=administrativeArea" json:"administrative_area,omitempty"` + // Optional. Generally refers to the city/town portion of the address. + // Examples: US city, IT comune, UK post town. + // In regions of the world where localities are not well defined or do not fit + // into this structure well, leave locality empty and use address_lines. + Locality string `protobuf:"bytes,7,opt,name=locality" json:"locality,omitempty"` + // Optional. Sublocality of the address. + // For example, this can be neighborhoods, boroughs, districts. + Sublocality string `protobuf:"bytes,8,opt,name=sublocality" json:"sublocality,omitempty"` + // Unstructured address lines describing the lower levels of an address. + // + // Because values in address_lines do not have type information and may + // sometimes contain multiple values in a single field (e.g. + // "Austin, TX"), it is important that the line order is clear. The order of + // address lines should be "envelope order" for the country/region of the + // address. In places where this can vary (e.g. Japan), address_language is + // used to make it explicit (e.g. "ja" for large-to-small ordering and + // "ja-Latn" or "en" for small-to-large). This way, the most specific line of + // an address can be selected based on the language. + // + // The minimum permitted structural representation of an address consists + // of a region_code with all remaining information placed in the + // address_lines. It would be possible to format such an address very + // approximately without geocoding, but no semantic reasoning could be + // made about any of the address components until it was at least + // partially resolved. + // + // Creating an address only containing a region_code and address_lines, and + // then geocoding is the recommended way to handle completely unstructured + // addresses (as opposed to guessing which parts of the address should be + // localities or administrative areas). + AddressLines []string `protobuf:"bytes,9,rep,name=address_lines,json=addressLines" json:"address_lines,omitempty"` + // Optional. The recipient at the address. + // This field may, under certain circumstances, contain multiline information. + // For example, it might contain "care of" information. + Recipients []string `protobuf:"bytes,10,rep,name=recipients" json:"recipients,omitempty"` + // Optional. The name of the organization at the address. + Organization string `protobuf:"bytes,11,opt,name=organization" json:"organization,omitempty"` +} + +func (m *PostalAddress) Reset() { *m = PostalAddress{} } +func (m *PostalAddress) String() string { return proto.CompactTextString(m) } +func (*PostalAddress) ProtoMessage() {} +func (*PostalAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *PostalAddress) GetRevision() int32 { + if m != nil { + return m.Revision + } + return 0 +} + +func (m *PostalAddress) GetRegionCode() string { + if m != nil { + return m.RegionCode + } + return "" +} + +func (m *PostalAddress) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *PostalAddress) GetPostalCode() string { + if m != nil { + return m.PostalCode + } + return "" +} + +func (m *PostalAddress) GetSortingCode() string { + if m != nil { + return m.SortingCode + } + return "" +} + +func (m *PostalAddress) GetAdministrativeArea() string { + if m != nil { + return m.AdministrativeArea + } + return "" +} + +func (m *PostalAddress) GetLocality() string { + if m != nil { + return m.Locality + } + return "" +} + +func (m *PostalAddress) GetSublocality() string { + if m != nil { + return m.Sublocality + } + return "" +} + +func (m *PostalAddress) GetAddressLines() []string { + if m != nil { + return m.AddressLines + } + return nil +} + +func (m *PostalAddress) GetRecipients() []string { + if m != nil { + return m.Recipients + } + return nil +} + +func (m *PostalAddress) GetOrganization() string { + if m != nil { + return m.Organization + } + return "" +} + +func init() { + proto.RegisterType((*PostalAddress)(nil), "google.type.PostalAddress") +} + +func init() { proto.RegisterFile("google/type/postal_address.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 338 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0x31, 0x6f, 0xea, 0x30, + 0x10, 0xc7, 0x15, 0xf2, 0xe0, 0xc1, 0x05, 0xf4, 0x24, 0xbf, 0x25, 0xea, 0x50, 0x52, 0xba, 0x30, + 0x25, 0x43, 0xc7, 0x4e, 0x50, 0xa9, 0x5d, 0x3a, 0x44, 0xa8, 0x53, 0x97, 0xc8, 0x24, 0x27, 0xcb, + 0x52, 0xf0, 0x45, 0xb6, 0x41, 0xa2, 0xdf, 0xa1, 0x5f, 0xa2, 0x9f, 0xb4, 0xb2, 0x9d, 0xd2, 0x30, + 0xde, 0xef, 0x7e, 0x49, 0xee, 0xee, 0x1f, 0xc8, 0x04, 0x91, 0x68, 0xb1, 0xb0, 0xe7, 0x0e, 0x8b, + 0x8e, 0x8c, 0xe5, 0x6d, 0xc5, 0x9b, 0x46, 0xa3, 0x31, 0x79, 0xa7, 0xc9, 0x12, 0x4b, 0x82, 0x91, + 0x3b, 0x63, 0xf5, 0x19, 0xc3, 0xa2, 0xf4, 0xd6, 0x26, 0x48, 0xec, 0x06, 0xa6, 0x1a, 0x4f, 0xd2, + 0x48, 0x52, 0x69, 0x94, 0x45, 0xeb, 0xf1, 0xee, 0x52, 0xb3, 0x25, 0x24, 0x1a, 0x85, 0x24, 0x55, + 0xd5, 0xd4, 0x60, 0x3a, 0xca, 0xa2, 0xf5, 0x6c, 0x07, 0x01, 0x3d, 0x51, 0x83, 0xec, 0x1e, 0x16, + 0x2d, 0x57, 0xe2, 0xc8, 0x05, 0x06, 0x25, 0xf6, 0xca, 0xfc, 0x07, 0x7a, 0x69, 0x09, 0x49, 0x3f, + 0x98, 0x57, 0xfe, 0x84, 0xb7, 0x04, 0xe4, 0x85, 0x3b, 0x98, 0x1b, 0xd2, 0x56, 0x2a, 0x11, 0x8c, + 0xb1, 0x37, 0x92, 0x9e, 0x79, 0xa5, 0x80, 0xff, 0xbc, 0x39, 0x48, 0x25, 0x8d, 0xd5, 0xdc, 0xca, + 0x13, 0x56, 0x5c, 0x23, 0x4f, 0x27, 0xde, 0x64, 0xd7, 0xad, 0x8d, 0x46, 0xee, 0xd6, 0x6a, 0xa9, + 0xe6, 0xad, 0xb4, 0xe7, 0xf4, 0xaf, 0xb7, 0x2e, 0x35, 0xcb, 0x20, 0x31, 0xc7, 0xfd, 0xa5, 0x3d, + 0xed, 0x3f, 0xf7, 0x8b, 0xdc, 0x5e, 0xfd, 0x11, 0xab, 0x56, 0x2a, 0x34, 0xe9, 0x2c, 0x8b, 0xdd, + 0x5e, 0x3d, 0x7c, 0x75, 0x8c, 0xdd, 0x02, 0x68, 0xac, 0x65, 0x27, 0x51, 0x59, 0x93, 0x82, 0x37, + 0x06, 0x84, 0xad, 0x60, 0x4e, 0x5a, 0x70, 0x25, 0x3f, 0xb8, 0x75, 0xd7, 0x4d, 0xc2, 0x6d, 0x86, + 0x6c, 0x7b, 0x84, 0x7f, 0x35, 0x1d, 0xf2, 0x41, 0x44, 0x5b, 0x76, 0x95, 0x4f, 0xe9, 0x32, 0x2c, + 0xa3, 0xf7, 0xe7, 0x5e, 0x11, 0xe4, 0x6e, 0x9b, 0x93, 0x16, 0x85, 0x40, 0xe5, 0x13, 0x2e, 0x42, + 0x8b, 0x77, 0xd2, 0x0c, 0x7f, 0x83, 0x7e, 0xd6, 0xc7, 0xab, 0xea, 0x6b, 0x14, 0xbf, 0xbc, 0x95, + 0xfb, 0x89, 0x7f, 0xf0, 0xe1, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xda, 0x86, 0xd3, 0x22, 0x3e, 0x02, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/type/timeofday/timeofday.pb.go b/vendor/google.golang.org/genproto/googleapis/type/timeofday/timeofday.pb.go new file mode 100644 index 0000000..7c1e743 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/type/timeofday/timeofday.pb.go @@ -0,0 +1,101 @@ +// Code generated by protoc-gen-go. +// source: google/type/timeofday.proto +// DO NOT EDIT! + +/* +Package timeofday is a generated protocol buffer package. + +It is generated from these files: + google/type/timeofday.proto + +It has these top-level messages: + TimeOfDay +*/ +package timeofday + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Represents a time of day. The date and time zone are either not significant +// or are specified elsewhere. An API may chose to allow leap seconds. Related +// types are [google.type.Date][google.type.Date] and `google.protobuf.Timestamp`. +type TimeOfDay struct { + // Hours of day in 24 hour format. Should be from 0 to 23. An API may choose + // to allow the value "24:00:00" for scenarios like business closing time. + Hours int32 `protobuf:"varint,1,opt,name=hours" json:"hours,omitempty"` + // Minutes of hour of day. Must be from 0 to 59. + Minutes int32 `protobuf:"varint,2,opt,name=minutes" json:"minutes,omitempty"` + // Seconds of minutes of the time. Must normally be from 0 to 59. An API may + // allow the value 60 if it allows leap-seconds. + Seconds int32 `protobuf:"varint,3,opt,name=seconds" json:"seconds,omitempty"` + // Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999. + Nanos int32 `protobuf:"varint,4,opt,name=nanos" json:"nanos,omitempty"` +} + +func (m *TimeOfDay) Reset() { *m = TimeOfDay{} } +func (m *TimeOfDay) String() string { return proto.CompactTextString(m) } +func (*TimeOfDay) ProtoMessage() {} +func (*TimeOfDay) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *TimeOfDay) GetHours() int32 { + if m != nil { + return m.Hours + } + return 0 +} + +func (m *TimeOfDay) GetMinutes() int32 { + if m != nil { + return m.Minutes + } + return 0 +} + +func (m *TimeOfDay) GetSeconds() int32 { + if m != nil { + return m.Seconds + } + return 0 +} + +func (m *TimeOfDay) GetNanos() int32 { + if m != nil { + return m.Nanos + } + return 0 +} + +func init() { + proto.RegisterType((*TimeOfDay)(nil), "google.type.TimeOfDay") +} + +func init() { proto.RegisterFile("google/type/timeofday.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 198 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2f, 0xc9, 0xcc, 0x4d, 0xcd, 0x4f, 0x4b, 0x49, + 0xac, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x86, 0x48, 0xea, 0x81, 0x24, 0x95, 0xb2, + 0xb9, 0x38, 0x43, 0x32, 0x73, 0x53, 0xfd, 0xd3, 0x5c, 0x12, 0x2b, 0x85, 0x44, 0xb8, 0x58, 0x33, + 0xf2, 0x4b, 0x8b, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x58, 0x83, 0x20, 0x1c, 0x21, 0x09, 0x2e, + 0xf6, 0xdc, 0xcc, 0xbc, 0xd2, 0x92, 0xd4, 0x62, 0x09, 0x26, 0xb0, 0x38, 0x8c, 0x0b, 0x92, 0x29, + 0x4e, 0x4d, 0xce, 0xcf, 0x4b, 0x29, 0x96, 0x60, 0x86, 0xc8, 0x40, 0xb9, 0x20, 0x93, 0xf2, 0x12, + 0xf3, 0xf2, 0x8b, 0x25, 0x58, 0x20, 0x26, 0x81, 0x39, 0x4e, 0x99, 0x5c, 0xfc, 0xc9, 0xf9, 0xb9, + 0x7a, 0x48, 0xf6, 0x3b, 0xf1, 0xc1, 0x6d, 0x0f, 0x00, 0x39, 0x2e, 0x80, 0x31, 0xca, 0x0e, 0x2a, + 0x9d, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0x76, + 0xba, 0x3e, 0x44, 0x2a, 0xb1, 0x20, 0xb3, 0x18, 0xcd, 0x6b, 0xd6, 0x70, 0xd6, 0x22, 0x26, 0x66, + 0xf7, 0x90, 0x80, 0x24, 0x36, 0xb0, 0x06, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x47, 0x79, + 0x6a, 0x06, 0x0a, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/protobuf/api/api.pb.go b/vendor/google.golang.org/genproto/protobuf/api/api.pb.go new file mode 100644 index 0000000..7cb3f38 --- /dev/null +++ b/vendor/google.golang.org/genproto/protobuf/api/api.pb.go @@ -0,0 +1,344 @@ +// Code generated by protoc-gen-go. +// source: src/google/protobuf/api.proto +// DO NOT EDIT! + +/* +Package api is a generated protocol buffer package. + +It is generated from these files: + src/google/protobuf/api.proto + +It has these top-level messages: + Api + Method + Mixin +*/ +package api + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "google.golang.org/genproto/protobuf/source_context" +import google_protobuf2 "google.golang.org/genproto/protobuf/ptype" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Api is a light-weight descriptor for a protocol buffer service. +type Api struct { + // The fully qualified name of this api, including package name + // followed by the api's simple name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The methods of this api, in unspecified order. + Methods []*Method `protobuf:"bytes,2,rep,name=methods" json:"methods,omitempty"` + // Any metadata attached to the API. + Options []*google_protobuf2.Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` + // A version string for this api. If specified, must have the form + // `major-version.minor-version`, as in `1.10`. If the minor version + // is omitted, it defaults to zero. If the entire version field is + // empty, the major version is derived from the package name, as + // outlined below. If the field is not empty, the version in the + // package name will be verified to be consistent with what is + // provided here. + // + // The versioning schema uses [semantic + // versioning](http://semver.org) where the major version number + // indicates a breaking change and the minor version an additive, + // non-breaking change. Both version numbers are signals to users + // what to expect from different versions, and should be carefully + // chosen based on the product plan. + // + // The major version is also reflected in the package name of the + // API, which must end in `v<major-version>`, as in + // `google.feature.v1`. For major versions 0 and 1, the suffix can + // be omitted. Zero major versions must only be used for + // experimental, none-GA apis. + // + // + Version string `protobuf:"bytes,4,opt,name=version" json:"version,omitempty"` + // Source context for the protocol buffer service represented by this + // message. + SourceContext *google_protobuf.SourceContext `protobuf:"bytes,5,opt,name=source_context,json=sourceContext" json:"source_context,omitempty"` + // Included APIs. See [Mixin][]. + Mixins []*Mixin `protobuf:"bytes,6,rep,name=mixins" json:"mixins,omitempty"` + // The source syntax of the service. + Syntax google_protobuf2.Syntax `protobuf:"varint,7,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` +} + +func (m *Api) Reset() { *m = Api{} } +func (m *Api) String() string { return proto.CompactTextString(m) } +func (*Api) ProtoMessage() {} +func (*Api) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Api) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Api) GetMethods() []*Method { + if m != nil { + return m.Methods + } + return nil +} + +func (m *Api) GetOptions() []*google_protobuf2.Option { + if m != nil { + return m.Options + } + return nil +} + +func (m *Api) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *Api) GetSourceContext() *google_protobuf.SourceContext { + if m != nil { + return m.SourceContext + } + return nil +} + +func (m *Api) GetMixins() []*Mixin { + if m != nil { + return m.Mixins + } + return nil +} + +func (m *Api) GetSyntax() google_protobuf2.Syntax { + if m != nil { + return m.Syntax + } + return google_protobuf2.Syntax_SYNTAX_PROTO2 +} + +// Method represents a method of an api. +type Method struct { + // The simple name of this method. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A URL of the input message type. + RequestTypeUrl string `protobuf:"bytes,2,opt,name=request_type_url,json=requestTypeUrl" json:"request_type_url,omitempty"` + // If true, the request is streamed. + RequestStreaming bool `protobuf:"varint,3,opt,name=request_streaming,json=requestStreaming" json:"request_streaming,omitempty"` + // The URL of the output message type. + ResponseTypeUrl string `protobuf:"bytes,4,opt,name=response_type_url,json=responseTypeUrl" json:"response_type_url,omitempty"` + // If true, the response is streamed. + ResponseStreaming bool `protobuf:"varint,5,opt,name=response_streaming,json=responseStreaming" json:"response_streaming,omitempty"` + // Any metadata attached to the method. + Options []*google_protobuf2.Option `protobuf:"bytes,6,rep,name=options" json:"options,omitempty"` + // The source syntax of this method. + Syntax google_protobuf2.Syntax `protobuf:"varint,7,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` +} + +func (m *Method) Reset() { *m = Method{} } +func (m *Method) String() string { return proto.CompactTextString(m) } +func (*Method) ProtoMessage() {} +func (*Method) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Method) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Method) GetRequestTypeUrl() string { + if m != nil { + return m.RequestTypeUrl + } + return "" +} + +func (m *Method) GetRequestStreaming() bool { + if m != nil { + return m.RequestStreaming + } + return false +} + +func (m *Method) GetResponseTypeUrl() string { + if m != nil { + return m.ResponseTypeUrl + } + return "" +} + +func (m *Method) GetResponseStreaming() bool { + if m != nil { + return m.ResponseStreaming + } + return false +} + +func (m *Method) GetOptions() []*google_protobuf2.Option { + if m != nil { + return m.Options + } + return nil +} + +func (m *Method) GetSyntax() google_protobuf2.Syntax { + if m != nil { + return m.Syntax + } + return google_protobuf2.Syntax_SYNTAX_PROTO2 +} + +// Declares an API to be included in this API. The including API must +// redeclare all the methods from the included API, but documentation +// and options are inherited as follows: +// +// - If after comment and whitespace stripping, the documentation +// string of the redeclared method is empty, it will be inherited +// from the original method. +// +// - Each annotation belonging to the service config (http, +// visibility) which is not set in the redeclared method will be +// inherited. +// +// - If an http annotation is inherited, the path pattern will be +// modified as follows. Any version prefix will be replaced by the +// version of the including API plus the [root][] path if specified. +// +// Example of a simple mixin: +// +// package google.acl.v1; +// service AccessControl { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v1/{resource=**}:getAcl"; +// } +// } +// +// package google.storage.v2; +// service Storage { +// rpc GetAcl(GetAclRequest) returns (Acl); +// +// // Get a data record. +// rpc GetData(GetDataRequest) returns (Data) { +// option (google.api.http).get = "/v2/{resource=**}"; +// } +// } +// +// Example of a mixin configuration: +// +// apis: +// - name: google.storage.v2.Storage +// mixins: +// - name: google.acl.v1.AccessControl +// +// The mixin construct implies that all methods in `AccessControl` are +// also declared with same name and request/response types in +// `Storage`. A documentation generator or annotation processor will +// see the effective `Storage.GetAcl` method after inherting +// documentation and annotations as follows: +// +// service Storage { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v2/{resource=**}:getAcl"; +// } +// ... +// } +// +// Note how the version in the path pattern changed from `v1` to `v2`. +// +// If the `root` field in the mixin is specified, it should be a +// relative path under which inherited HTTP paths are placed. Example: +// +// apis: +// - name: google.storage.v2.Storage +// mixins: +// - name: google.acl.v1.AccessControl +// root: acls +// +// This implies the following inherited HTTP annotation: +// +// service Storage { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v2/acls/{resource=**}:getAcl"; +// } +// ... +// } +type Mixin struct { + // The fully qualified name of the API which is included. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // If non-empty specifies a path under which inherited HTTP paths + // are rooted. + Root string `protobuf:"bytes,2,opt,name=root" json:"root,omitempty"` +} + +func (m *Mixin) Reset() { *m = Mixin{} } +func (m *Mixin) String() string { return proto.CompactTextString(m) } +func (*Mixin) ProtoMessage() {} +func (*Mixin) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Mixin) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Mixin) GetRoot() string { + if m != nil { + return m.Root + } + return "" +} + +func init() { + proto.RegisterType((*Api)(nil), "google.protobuf.Api") + proto.RegisterType((*Method)(nil), "google.protobuf.Method") + proto.RegisterType((*Mixin)(nil), "google.protobuf.Mixin") +} + +func init() { proto.RegisterFile("src/google/protobuf/api.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 435 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x4f, 0x8b, 0xd3, 0x40, + 0x18, 0xc6, 0x49, 0xd2, 0xa6, 0xeb, 0x2c, 0x76, 0x75, 0x04, 0x1d, 0x0a, 0x2e, 0x61, 0xf1, 0x10, + 0x5c, 0x4c, 0x70, 0x3d, 0x7a, 0x6a, 0x45, 0x7a, 0x10, 0x31, 0xa4, 0x8a, 0xe0, 0xa5, 0xa4, 0x71, + 0x8c, 0x03, 0xc9, 0xbc, 0xe3, 0xcc, 0x44, 0xdb, 0xaf, 0xe3, 0xd1, 0xa3, 0xdf, 0xc0, 0x6f, 0x26, + 0x99, 0x64, 0xfa, 0x27, 0xad, 0xe0, 0xde, 0xe6, 0x9d, 0xe7, 0xf7, 0x3e, 0x79, 0xdf, 0x67, 0x08, + 0x7a, 0xac, 0x64, 0x1e, 0x17, 0x00, 0x45, 0x49, 0x63, 0x21, 0x41, 0xc3, 0xaa, 0xfe, 0x12, 0x67, + 0x82, 0x45, 0xa6, 0xc0, 0x17, 0xad, 0x14, 0x59, 0x69, 0xf2, 0xa4, 0xcf, 0x2a, 0xa8, 0x65, 0x4e, + 0x97, 0x39, 0x70, 0x4d, 0xd7, 0xba, 0x05, 0x27, 0x93, 0x3e, 0xa5, 0x37, 0xa2, 0x33, 0xb9, 0xfa, + 0xe3, 0x22, 0x6f, 0x2a, 0x18, 0xc6, 0x68, 0xc0, 0xb3, 0x8a, 0x12, 0x27, 0x70, 0xc2, 0x3b, 0xa9, + 0x39, 0xe3, 0xe7, 0x68, 0x54, 0x51, 0xfd, 0x15, 0x3e, 0x2b, 0xe2, 0x06, 0x5e, 0x78, 0x7e, 0xf3, + 0x28, 0xea, 0x0d, 0x10, 0xbd, 0x35, 0x7a, 0x6a, 0xb9, 0xa6, 0x05, 0x84, 0x66, 0xc0, 0x15, 0xf1, + 0xfe, 0xd1, 0xf2, 0xce, 0xe8, 0xa9, 0xe5, 0x30, 0x41, 0xa3, 0xef, 0x54, 0x2a, 0x06, 0x9c, 0x0c, + 0xcc, 0xc7, 0x6d, 0x89, 0x5f, 0xa3, 0xf1, 0xe1, 0x3e, 0x64, 0x18, 0x38, 0xe1, 0xf9, 0xcd, 0xe5, + 0x91, 0xe7, 0xc2, 0x60, 0xaf, 0x5a, 0x2a, 0xbd, 0xab, 0xf6, 0x4b, 0x1c, 0x21, 0xbf, 0x62, 0x6b, + 0xc6, 0x15, 0xf1, 0xcd, 0x48, 0x0f, 0x8f, 0xb7, 0x68, 0xe4, 0xb4, 0xa3, 0x70, 0x8c, 0x7c, 0xb5, + 0xe1, 0x3a, 0x5b, 0x93, 0x51, 0xe0, 0x84, 0xe3, 0x13, 0x2b, 0x2c, 0x8c, 0x9c, 0x76, 0xd8, 0xd5, + 0x6f, 0x17, 0xf9, 0x6d, 0x10, 0x27, 0x63, 0x0c, 0xd1, 0x3d, 0x49, 0xbf, 0xd5, 0x54, 0xe9, 0x65, + 0x13, 0xfc, 0xb2, 0x96, 0x25, 0x71, 0x8d, 0x3e, 0xee, 0xee, 0xdf, 0x6f, 0x04, 0xfd, 0x20, 0x4b, + 0x7c, 0x8d, 0xee, 0x5b, 0x52, 0x69, 0x49, 0xb3, 0x8a, 0xf1, 0x82, 0x78, 0x81, 0x13, 0x9e, 0xa5, + 0xd6, 0x62, 0x61, 0xef, 0xf1, 0xd3, 0x06, 0x56, 0x02, 0xb8, 0xa2, 0x3b, 0xdf, 0x36, 0xc1, 0x0b, + 0x2b, 0x58, 0xe3, 0x67, 0x08, 0x6f, 0xd9, 0x9d, 0xf3, 0xd0, 0x38, 0x6f, 0x5d, 0x76, 0xd6, 0x7b, + 0xaf, 0xe8, 0xff, 0xe7, 0x2b, 0xde, 0x3a, 0xb4, 0x18, 0x0d, 0x4d, 0xec, 0x27, 0x23, 0xc3, 0x68, + 0x20, 0x01, 0x74, 0x17, 0x93, 0x39, 0xcf, 0x6a, 0xf4, 0x20, 0x87, 0xaa, 0x6f, 0x3b, 0x3b, 0x9b, + 0x0a, 0x96, 0x34, 0x45, 0xe2, 0x7c, 0xba, 0xee, 0xc4, 0x02, 0xca, 0x8c, 0x17, 0x11, 0xc8, 0x22, + 0x2e, 0x28, 0x37, 0xe8, 0xc1, 0xef, 0xf4, 0x32, 0x13, 0xec, 0xa7, 0xeb, 0xcd, 0x93, 0xd9, 0x2f, + 0xf7, 0x72, 0xde, 0xf6, 0x24, 0x76, 0xce, 0x8f, 0xb4, 0x2c, 0xdf, 0x70, 0xf8, 0xc1, 0x9b, 0xf0, + 0xd4, 0xca, 0x37, 0x8d, 0x2f, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x42, 0xe4, 0x4b, 0x9b, + 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go b/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go new file mode 100644 index 0000000..8330ee3 --- /dev/null +++ b/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go @@ -0,0 +1,268 @@ +// Code generated by protoc-gen-go. +// source: src/google/protobuf/field_mask.proto +// DO NOT EDIT! + +/* +Package field_mask is a generated protocol buffer package. + +It is generated from these files: + src/google/protobuf/field_mask.proto + +It has these top-level messages: + FieldMask +*/ +package field_mask + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// `FieldMask` represents a set of symbolic field paths, for example: +// +// paths: "f.a" +// paths: "f.b.d" +// +// Here `f` represents a field in some root message, `a` and `b` +// fields in the message found in `f`, and `d` a field found in the +// message in `f.b`. +// +// Field masks are used to specify a subset of fields that should be +// returned by a get operation or modified by an update operation. +// Field masks also have a custom JSON encoding (see below). +// +// # Field Masks in Projections +// +// When used in the context of a projection, a response message or +// sub-message is filtered by the API to only contain those fields as +// specified in the mask. For example, if the mask in the previous +// example is applied to a response message as follows: +// +// f { +// a : 22 +// b { +// d : 1 +// x : 2 +// } +// y : 13 +// } +// z: 8 +// +// The result will not contain specific values for fields x,y and z +// (their value will be set to the default, and omitted in proto text +// output): +// +// +// f { +// a : 22 +// b { +// d : 1 +// } +// } +// +// A repeated field is not allowed except at the last position of a +// paths string. +// +// If a FieldMask object is not present in a get operation, the +// operation applies to all fields (as if a FieldMask of all fields +// had been specified). +// +// Note that a field mask does not necessarily apply to the +// top-level response message. In case of a REST get operation, the +// field mask applies directly to the response, but in case of a REST +// list operation, the mask instead applies to each individual message +// in the returned resource list. In case of a REST custom method, +// other definitions may be used. Where the mask applies will be +// clearly documented together with its declaration in the API. In +// any case, the effect on the returned resource/resources is required +// behavior for APIs. +// +// # Field Masks in Update Operations +// +// A field mask in update operations specifies which fields of the +// targeted resource are going to be updated. The API is required +// to only change the values of the fields as specified in the mask +// and leave the others untouched. If a resource is passed in to +// describe the updated values, the API ignores the values of all +// fields not covered by the mask. +// +// If a repeated field is specified for an update operation, the existing +// repeated values in the target resource will be overwritten by the new values. +// Note that a repeated field is only allowed in the last position of a `paths` +// string. +// +// If a sub-message is specified in the last position of the field mask for an +// update operation, then the existing sub-message in the target resource is +// overwritten. Given the target message: +// +// f { +// b { +// d : 1 +// x : 2 +// } +// c : 1 +// } +// +// And an update message: +// +// f { +// b { +// d : 10 +// } +// } +// +// then if the field mask is: +// +// paths: "f.b" +// +// then the result will be: +// +// f { +// b { +// d : 10 +// } +// c : 1 +// } +// +// However, if the update mask was: +// +// paths: "f.b.d" +// +// then the result would be: +// +// f { +// b { +// d : 10 +// x : 2 +// } +// c : 1 +// } +// +// In order to reset a field's value to the default, the field must +// be in the mask and set to the default value in the provided resource. +// Hence, in order to reset all fields of a resource, provide a default +// instance of the resource and set all fields in the mask, or do +// not provide a mask as described below. +// +// If a field mask is not present on update, the operation applies to +// all fields (as if a field mask of all fields has been specified). +// Note that in the presence of schema evolution, this may mean that +// fields the client does not know and has therefore not filled into +// the request will be reset to their default. If this is unwanted +// behavior, a specific service may require a client to always specify +// a field mask, producing an error if not. +// +// As with get operations, the location of the resource which +// describes the updated values in the request message depends on the +// operation kind. In any case, the effect of the field mask is +// required to be honored by the API. +// +// ## Considerations for HTTP REST +// +// The HTTP kind of an update operation which uses a field mask must +// be set to PATCH instead of PUT in order to satisfy HTTP semantics +// (PUT must only be used for full updates). +// +// # JSON Encoding of Field Masks +// +// In JSON, a field mask is encoded as a single string where paths are +// separated by a comma. Fields name in each path are converted +// to/from lower-camel naming conventions. +// +// As an example, consider the following message declarations: +// +// message Profile { +// User user = 1; +// Photo photo = 2; +// } +// message User { +// string display_name = 1; +// string address = 2; +// } +// +// In proto a field mask for `Profile` may look as such: +// +// mask { +// paths: "user.display_name" +// paths: "photo" +// } +// +// In JSON, the same mask is represented as below: +// +// { +// mask: "user.displayName,photo" +// } +// +// # Field Masks and Oneof Fields +// +// Field masks treat fields in oneofs just as regular fields. Consider the +// following message: +// +// message SampleMessage { +// oneof test_oneof { +// string name = 4; +// SubMessage sub_message = 9; +// } +// } +// +// The field mask can be: +// +// mask { +// paths: "name" +// } +// +// Or: +// +// mask { +// paths: "sub_message" +// } +// +// Note that oneof type names ("test_oneof" in this case) cannot be used in +// paths. +type FieldMask struct { + // The set of field mask paths. + Paths []string `protobuf:"bytes,1,rep,name=paths" json:"paths,omitempty"` +} + +func (m *FieldMask) Reset() { *m = FieldMask{} } +func (m *FieldMask) String() string { return proto.CompactTextString(m) } +func (*FieldMask) ProtoMessage() {} +func (*FieldMask) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *FieldMask) GetPaths() []string { + if m != nil { + return m.Paths + } + return nil +} + +func init() { + proto.RegisterType((*FieldMask)(nil), "google.protobuf.FieldMask") +} + +func init() { proto.RegisterFile("src/google/protobuf/field_mask.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 175 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x29, 0x2e, 0x4a, 0xd6, + 0x4f, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, + 0x4f, 0xcb, 0x4c, 0xcd, 0x49, 0x89, 0xcf, 0x4d, 0x2c, 0xce, 0xd6, 0x03, 0x8b, 0x09, 0xf1, 0x43, + 0x54, 0xe8, 0xc1, 0x54, 0x28, 0x29, 0x72, 0x71, 0xba, 0x81, 0x14, 0xf9, 0x26, 0x16, 0x67, 0x0b, + 0x89, 0x70, 0xb1, 0x16, 0x24, 0x96, 0x64, 0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x06, 0x41, + 0x38, 0x4e, 0x9d, 0x8c, 0x5c, 0xc2, 0xc9, 0xf9, 0xb9, 0x7a, 0x68, 0x5a, 0x9d, 0xf8, 0xe0, 0x1a, + 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51, 0x96, 0x50, 0x25, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a, + 0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, 0x79, 0x60, 0x0d, 0xd8, 0xdc, 0x64, 0x8d, 0x60, 0x2e, 0x62, + 0x62, 0x76, 0x0f, 0x70, 0x5a, 0xc5, 0x24, 0xe7, 0x0e, 0x31, 0x21, 0x00, 0xaa, 0x5a, 0x2f, 0x3c, + 0x35, 0x27, 0xc7, 0x3b, 0x2f, 0xbf, 0x3c, 0x2f, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x6c, + 0x8c, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xdc, 0x73, 0xcf, 0xee, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go b/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go new file mode 100644 index 0000000..7f9033d --- /dev/null +++ b/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go @@ -0,0 +1,539 @@ +// Code generated by protoc-gen-go. +// source: src/google/protobuf/type.proto +// DO NOT EDIT! + +/* +Package ptype is a generated protocol buffer package. + +It is generated from these files: + src/google/protobuf/type.proto + +It has these top-level messages: + Type + Field + Enum + EnumValue + Option +*/ +package ptype + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/any" +import google_protobuf1 "google.golang.org/genproto/protobuf/source_context" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The syntax in which a protocol buffer element is defined. +type Syntax int32 + +const ( + // Syntax `proto2`. + Syntax_SYNTAX_PROTO2 Syntax = 0 + // Syntax `proto3`. + Syntax_SYNTAX_PROTO3 Syntax = 1 +) + +var Syntax_name = map[int32]string{ + 0: "SYNTAX_PROTO2", + 1: "SYNTAX_PROTO3", +} +var Syntax_value = map[string]int32{ + "SYNTAX_PROTO2": 0, + "SYNTAX_PROTO3": 1, +} + +func (x Syntax) String() string { + return proto.EnumName(Syntax_name, int32(x)) +} +func (Syntax) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Basic field types. +type Field_Kind int32 + +const ( + // Field type unknown. + Field_TYPE_UNKNOWN Field_Kind = 0 + // Field type double. + Field_TYPE_DOUBLE Field_Kind = 1 + // Field type float. + Field_TYPE_FLOAT Field_Kind = 2 + // Field type int64. + Field_TYPE_INT64 Field_Kind = 3 + // Field type uint64. + Field_TYPE_UINT64 Field_Kind = 4 + // Field type int32. + Field_TYPE_INT32 Field_Kind = 5 + // Field type fixed64. + Field_TYPE_FIXED64 Field_Kind = 6 + // Field type fixed32. + Field_TYPE_FIXED32 Field_Kind = 7 + // Field type bool. + Field_TYPE_BOOL Field_Kind = 8 + // Field type string. + Field_TYPE_STRING Field_Kind = 9 + // Field type group. Proto2 syntax only, and deprecated. + Field_TYPE_GROUP Field_Kind = 10 + // Field type message. + Field_TYPE_MESSAGE Field_Kind = 11 + // Field type bytes. + Field_TYPE_BYTES Field_Kind = 12 + // Field type uint32. + Field_TYPE_UINT32 Field_Kind = 13 + // Field type enum. + Field_TYPE_ENUM Field_Kind = 14 + // Field type sfixed32. + Field_TYPE_SFIXED32 Field_Kind = 15 + // Field type sfixed64. + Field_TYPE_SFIXED64 Field_Kind = 16 + // Field type sint32. + Field_TYPE_SINT32 Field_Kind = 17 + // Field type sint64. + Field_TYPE_SINT64 Field_Kind = 18 +) + +var Field_Kind_name = map[int32]string{ + 0: "TYPE_UNKNOWN", + 1: "TYPE_DOUBLE", + 2: "TYPE_FLOAT", + 3: "TYPE_INT64", + 4: "TYPE_UINT64", + 5: "TYPE_INT32", + 6: "TYPE_FIXED64", + 7: "TYPE_FIXED32", + 8: "TYPE_BOOL", + 9: "TYPE_STRING", + 10: "TYPE_GROUP", + 11: "TYPE_MESSAGE", + 12: "TYPE_BYTES", + 13: "TYPE_UINT32", + 14: "TYPE_ENUM", + 15: "TYPE_SFIXED32", + 16: "TYPE_SFIXED64", + 17: "TYPE_SINT32", + 18: "TYPE_SINT64", +} +var Field_Kind_value = map[string]int32{ + "TYPE_UNKNOWN": 0, + "TYPE_DOUBLE": 1, + "TYPE_FLOAT": 2, + "TYPE_INT64": 3, + "TYPE_UINT64": 4, + "TYPE_INT32": 5, + "TYPE_FIXED64": 6, + "TYPE_FIXED32": 7, + "TYPE_BOOL": 8, + "TYPE_STRING": 9, + "TYPE_GROUP": 10, + "TYPE_MESSAGE": 11, + "TYPE_BYTES": 12, + "TYPE_UINT32": 13, + "TYPE_ENUM": 14, + "TYPE_SFIXED32": 15, + "TYPE_SFIXED64": 16, + "TYPE_SINT32": 17, + "TYPE_SINT64": 18, +} + +func (x Field_Kind) String() string { + return proto.EnumName(Field_Kind_name, int32(x)) +} +func (Field_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +// Whether a field is optional, required, or repeated. +type Field_Cardinality int32 + +const ( + // For fields with unknown cardinality. + Field_CARDINALITY_UNKNOWN Field_Cardinality = 0 + // For optional fields. + Field_CARDINALITY_OPTIONAL Field_Cardinality = 1 + // For required fields. Proto2 syntax only. + Field_CARDINALITY_REQUIRED Field_Cardinality = 2 + // For repeated fields. + Field_CARDINALITY_REPEATED Field_Cardinality = 3 +) + +var Field_Cardinality_name = map[int32]string{ + 0: "CARDINALITY_UNKNOWN", + 1: "CARDINALITY_OPTIONAL", + 2: "CARDINALITY_REQUIRED", + 3: "CARDINALITY_REPEATED", +} +var Field_Cardinality_value = map[string]int32{ + "CARDINALITY_UNKNOWN": 0, + "CARDINALITY_OPTIONAL": 1, + "CARDINALITY_REQUIRED": 2, + "CARDINALITY_REPEATED": 3, +} + +func (x Field_Cardinality) String() string { + return proto.EnumName(Field_Cardinality_name, int32(x)) +} +func (Field_Cardinality) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 1} } + +// A protocol buffer message type. +type Type struct { + // The fully qualified message name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The list of fields. + Fields []*Field `protobuf:"bytes,2,rep,name=fields" json:"fields,omitempty"` + // The list of types appearing in `oneof` definitions in this type. + Oneofs []string `protobuf:"bytes,3,rep,name=oneofs" json:"oneofs,omitempty"` + // The protocol buffer options. + Options []*Option `protobuf:"bytes,4,rep,name=options" json:"options,omitempty"` + // The source context. + SourceContext *google_protobuf1.SourceContext `protobuf:"bytes,5,opt,name=source_context,json=sourceContext" json:"source_context,omitempty"` + // The source syntax. + Syntax Syntax `protobuf:"varint,6,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` +} + +func (m *Type) Reset() { *m = Type{} } +func (m *Type) String() string { return proto.CompactTextString(m) } +func (*Type) ProtoMessage() {} +func (*Type) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Type) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Type) GetFields() []*Field { + if m != nil { + return m.Fields + } + return nil +} + +func (m *Type) GetOneofs() []string { + if m != nil { + return m.Oneofs + } + return nil +} + +func (m *Type) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +func (m *Type) GetSourceContext() *google_protobuf1.SourceContext { + if m != nil { + return m.SourceContext + } + return nil +} + +func (m *Type) GetSyntax() Syntax { + if m != nil { + return m.Syntax + } + return Syntax_SYNTAX_PROTO2 +} + +// A single field of a message type. +type Field struct { + // The field type. + Kind Field_Kind `protobuf:"varint,1,opt,name=kind,enum=google.protobuf.Field_Kind" json:"kind,omitempty"` + // The field cardinality. + Cardinality Field_Cardinality `protobuf:"varint,2,opt,name=cardinality,enum=google.protobuf.Field_Cardinality" json:"cardinality,omitempty"` + // The field number. + Number int32 `protobuf:"varint,3,opt,name=number" json:"number,omitempty"` + // The field name. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + // The field type URL, without the scheme, for message or enumeration + // types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. + TypeUrl string `protobuf:"bytes,6,opt,name=type_url,json=typeUrl" json:"type_url,omitempty"` + // The index of the field type in `Type.oneofs`, for message or enumeration + // types. The first type has index 1; zero means the type is not in the list. + OneofIndex int32 `protobuf:"varint,7,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"` + // Whether to use alternative packed wire representation. + Packed bool `protobuf:"varint,8,opt,name=packed" json:"packed,omitempty"` + // The protocol buffer options. + Options []*Option `protobuf:"bytes,9,rep,name=options" json:"options,omitempty"` + // The field JSON name. + JsonName string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` + // The string value of the default value of this field. Proto2 syntax only. + DefaultValue string `protobuf:"bytes,11,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` +} + +func (m *Field) Reset() { *m = Field{} } +func (m *Field) String() string { return proto.CompactTextString(m) } +func (*Field) ProtoMessage() {} +func (*Field) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Field) GetKind() Field_Kind { + if m != nil { + return m.Kind + } + return Field_TYPE_UNKNOWN +} + +func (m *Field) GetCardinality() Field_Cardinality { + if m != nil { + return m.Cardinality + } + return Field_CARDINALITY_UNKNOWN +} + +func (m *Field) GetNumber() int32 { + if m != nil { + return m.Number + } + return 0 +} + +func (m *Field) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Field) GetTypeUrl() string { + if m != nil { + return m.TypeUrl + } + return "" +} + +func (m *Field) GetOneofIndex() int32 { + if m != nil { + return m.OneofIndex + } + return 0 +} + +func (m *Field) GetPacked() bool { + if m != nil { + return m.Packed + } + return false +} + +func (m *Field) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +func (m *Field) GetJsonName() string { + if m != nil { + return m.JsonName + } + return "" +} + +func (m *Field) GetDefaultValue() string { + if m != nil { + return m.DefaultValue + } + return "" +} + +// Enum type definition. +type Enum struct { + // Enum type name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Enum value definitions. + Enumvalue []*EnumValue `protobuf:"bytes,2,rep,name=enumvalue" json:"enumvalue,omitempty"` + // Protocol buffer options. + Options []*Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` + // The source context. + SourceContext *google_protobuf1.SourceContext `protobuf:"bytes,4,opt,name=source_context,json=sourceContext" json:"source_context,omitempty"` + // The source syntax. + Syntax Syntax `protobuf:"varint,5,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` +} + +func (m *Enum) Reset() { *m = Enum{} } +func (m *Enum) String() string { return proto.CompactTextString(m) } +func (*Enum) ProtoMessage() {} +func (*Enum) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Enum) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Enum) GetEnumvalue() []*EnumValue { + if m != nil { + return m.Enumvalue + } + return nil +} + +func (m *Enum) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +func (m *Enum) GetSourceContext() *google_protobuf1.SourceContext { + if m != nil { + return m.SourceContext + } + return nil +} + +func (m *Enum) GetSyntax() Syntax { + if m != nil { + return m.Syntax + } + return Syntax_SYNTAX_PROTO2 +} + +// Enum value definition. +type EnumValue struct { + // Enum value name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Enum value number. + Number int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` + // Protocol buffer options. + Options []*Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` +} + +func (m *EnumValue) Reset() { *m = EnumValue{} } +func (m *EnumValue) String() string { return proto.CompactTextString(m) } +func (*EnumValue) ProtoMessage() {} +func (*EnumValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *EnumValue) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *EnumValue) GetNumber() int32 { + if m != nil { + return m.Number + } + return 0 +} + +func (m *EnumValue) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +// A protocol buffer option, which can be attached to a message, field, +// enumeration, etc. +type Option struct { + // The option's name. For protobuf built-in options (options defined in + // descriptor.proto), this is the short name. For example, `"map_entry"`. + // For custom options, it should be the fully-qualified name. For example, + // `"google.api.http"`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The option's value packed in an Any message. If the value is a primitive, + // the corresponding wrapper type defined in google/protobuf/wrappers.proto + // should be used. If the value is an enum, it should be stored as an int32 + // value using the google.protobuf.Int32Value type. + Value *google_protobuf.Any `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *Option) Reset() { *m = Option{} } +func (m *Option) String() string { return proto.CompactTextString(m) } +func (*Option) ProtoMessage() {} +func (*Option) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *Option) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Option) GetValue() *google_protobuf.Any { + if m != nil { + return m.Value + } + return nil +} + +func init() { + proto.RegisterType((*Type)(nil), "google.protobuf.Type") + proto.RegisterType((*Field)(nil), "google.protobuf.Field") + proto.RegisterType((*Enum)(nil), "google.protobuf.Enum") + proto.RegisterType((*EnumValue)(nil), "google.protobuf.EnumValue") + proto.RegisterType((*Option)(nil), "google.protobuf.Option") + proto.RegisterEnum("google.protobuf.Syntax", Syntax_name, Syntax_value) + proto.RegisterEnum("google.protobuf.Field_Kind", Field_Kind_name, Field_Kind_value) + proto.RegisterEnum("google.protobuf.Field_Cardinality", Field_Cardinality_name, Field_Cardinality_value) +} + +func init() { proto.RegisterFile("src/google/protobuf/type.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 813 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x8f, 0xda, 0x46, + 0x14, 0x8f, 0x8d, 0xf1, 0xe2, 0xc7, 0xc2, 0x4e, 0x26, 0x51, 0xe2, 0x6c, 0xa4, 0x2d, 0xa2, 0x3d, + 0xa0, 0x1c, 0x8c, 0x0a, 0xab, 0x55, 0xa5, 0x9e, 0x60, 0xf1, 0x52, 0xb4, 0xc4, 0x76, 0x07, 0xd3, + 0x64, 0x7b, 0x41, 0x5e, 0x98, 0x45, 0x24, 0x66, 0x8c, 0xb0, 0xdd, 0x2e, 0x87, 0x7e, 0x84, 0x7e, + 0x89, 0x1e, 0x7b, 0xee, 0x87, 0xe8, 0x47, 0xea, 0xad, 0xd5, 0x8c, 0xc1, 0x98, 0x3f, 0x95, 0xd2, + 0xe6, 0x82, 0x78, 0xbf, 0xf7, 0x7b, 0xff, 0x9f, 0xdf, 0xc0, 0x45, 0xb8, 0x1c, 0xd7, 0xa7, 0x41, + 0x30, 0xf5, 0x69, 0x7d, 0xb1, 0x0c, 0xa2, 0xe0, 0x3e, 0x7e, 0xa8, 0x47, 0xab, 0x05, 0x35, 0x84, + 0x84, 0xcf, 0x12, 0x9d, 0xb1, 0xd1, 0x9d, 0xbf, 0xda, 0x27, 0x7b, 0x6c, 0x95, 0x68, 0xcf, 0xbf, + 0xda, 0x57, 0x85, 0x41, 0xbc, 0x1c, 0xd3, 0xd1, 0x38, 0x60, 0x11, 0x7d, 0x8c, 0x12, 0x56, 0xf5, + 0x57, 0x19, 0x14, 0x77, 0xb5, 0xa0, 0x18, 0x83, 0xc2, 0xbc, 0x39, 0xd5, 0xa5, 0x8a, 0x54, 0xd3, + 0x88, 0xf8, 0x8f, 0x0d, 0x50, 0x1f, 0x66, 0xd4, 0x9f, 0x84, 0xba, 0x5c, 0xc9, 0xd5, 0x8a, 0x8d, + 0x17, 0xc6, 0x5e, 0x7c, 0xe3, 0x86, 0xab, 0xc9, 0x9a, 0x85, 0x5f, 0x80, 0x1a, 0x30, 0x1a, 0x3c, + 0x84, 0x7a, 0xae, 0x92, 0xab, 0x69, 0x64, 0x2d, 0xe1, 0xaf, 0xe1, 0x24, 0x58, 0x44, 0xb3, 0x80, + 0x85, 0xba, 0x22, 0x1c, 0xbd, 0x3c, 0x70, 0x64, 0x0b, 0x3d, 0xd9, 0xf0, 0xb0, 0x09, 0xe5, 0xdd, + 0x7c, 0xf5, 0x7c, 0x45, 0xaa, 0x15, 0x1b, 0x17, 0x07, 0x96, 0x03, 0x41, 0xbb, 0x4e, 0x58, 0xa4, + 0x14, 0x66, 0x45, 0x5c, 0x07, 0x35, 0x5c, 0xb1, 0xc8, 0x7b, 0xd4, 0xd5, 0x8a, 0x54, 0x2b, 0x1f, + 0x09, 0x3c, 0x10, 0x6a, 0xb2, 0xa6, 0x55, 0xff, 0x50, 0x21, 0x2f, 0x8a, 0xc2, 0x75, 0x50, 0x3e, + 0xce, 0xd8, 0x44, 0x34, 0xa4, 0xdc, 0x78, 0x7d, 0xbc, 0x74, 0xe3, 0x76, 0xc6, 0x26, 0x44, 0x10, + 0x71, 0x07, 0x8a, 0x63, 0x6f, 0x39, 0x99, 0x31, 0xcf, 0x9f, 0x45, 0x2b, 0x5d, 0x16, 0x76, 0xd5, + 0x7f, 0xb1, 0xbb, 0xde, 0x32, 0x49, 0xd6, 0x8c, 0xf7, 0x90, 0xc5, 0xf3, 0x7b, 0xba, 0xd4, 0x73, + 0x15, 0xa9, 0x96, 0x27, 0x6b, 0x29, 0x9d, 0x8f, 0x92, 0x99, 0xcf, 0x2b, 0x28, 0xf0, 0xe5, 0x18, + 0xc5, 0x4b, 0x5f, 0xd4, 0xa7, 0x91, 0x13, 0x2e, 0x0f, 0x97, 0x3e, 0xfe, 0x02, 0x8a, 0xa2, 0xf9, + 0xa3, 0x19, 0x9b, 0xd0, 0x47, 0xfd, 0x44, 0xf8, 0x02, 0x01, 0xf5, 0x38, 0xc2, 0xe3, 0x2c, 0xbc, + 0xf1, 0x47, 0x3a, 0xd1, 0x0b, 0x15, 0xa9, 0x56, 0x20, 0x6b, 0x29, 0x3b, 0x2b, 0xed, 0x13, 0x67, + 0xf5, 0x1a, 0xb4, 0x0f, 0x61, 0xc0, 0x46, 0x22, 0x3f, 0x10, 0x79, 0x14, 0x38, 0x60, 0xf1, 0x1c, + 0xbf, 0x84, 0xd2, 0x84, 0x3e, 0x78, 0xb1, 0x1f, 0x8d, 0x7e, 0xf2, 0xfc, 0x98, 0xea, 0x45, 0x41, + 0x38, 0x5d, 0x83, 0x3f, 0x70, 0xac, 0xfa, 0xa7, 0x0c, 0x0a, 0xef, 0x24, 0x46, 0x70, 0xea, 0xde, + 0x39, 0xe6, 0x68, 0x68, 0xdd, 0x5a, 0xf6, 0x3b, 0x0b, 0x3d, 0xc1, 0x67, 0x50, 0x14, 0x48, 0xc7, + 0x1e, 0xb6, 0xfb, 0x26, 0x92, 0x70, 0x19, 0x40, 0x00, 0x37, 0x7d, 0xbb, 0xe5, 0x22, 0x39, 0x95, + 0x7b, 0x96, 0x7b, 0x75, 0x89, 0x72, 0xa9, 0xc1, 0x30, 0x01, 0x94, 0x2c, 0xa1, 0xd9, 0x40, 0xf9, + 0x34, 0xc6, 0x4d, 0xef, 0xbd, 0xd9, 0xb9, 0xba, 0x44, 0xea, 0x2e, 0xd2, 0x6c, 0xa0, 0x13, 0x5c, + 0x02, 0x4d, 0x20, 0x6d, 0xdb, 0xee, 0xa3, 0x42, 0xea, 0x73, 0xe0, 0x92, 0x9e, 0xd5, 0x45, 0x5a, + 0xea, 0xb3, 0x4b, 0xec, 0xa1, 0x83, 0x20, 0xf5, 0xf0, 0xd6, 0x1c, 0x0c, 0x5a, 0x5d, 0x13, 0x15, + 0x53, 0x46, 0xfb, 0xce, 0x35, 0x07, 0xe8, 0x74, 0x27, 0xad, 0x66, 0x03, 0x95, 0xd2, 0x10, 0xa6, + 0x35, 0x7c, 0x8b, 0xca, 0xf8, 0x29, 0x94, 0x92, 0x10, 0x9b, 0x24, 0xce, 0xf6, 0xa0, 0xab, 0x4b, + 0x84, 0xb6, 0x89, 0x24, 0x5e, 0x9e, 0xee, 0x00, 0x57, 0x97, 0x08, 0x57, 0x23, 0x28, 0x66, 0x76, + 0x0b, 0xbf, 0x84, 0x67, 0xd7, 0x2d, 0xd2, 0xe9, 0x59, 0xad, 0x7e, 0xcf, 0xbd, 0xcb, 0xf4, 0x55, + 0x87, 0xe7, 0x59, 0x85, 0xed, 0xb8, 0x3d, 0xdb, 0x6a, 0xf5, 0x91, 0xb4, 0xaf, 0x21, 0xe6, 0xf7, + 0xc3, 0x1e, 0x31, 0x3b, 0x48, 0x3e, 0xd4, 0x38, 0x66, 0xcb, 0x35, 0x3b, 0x28, 0x57, 0xfd, 0x5b, + 0x02, 0xc5, 0x64, 0xf1, 0xfc, 0xe8, 0x19, 0xf9, 0x06, 0x34, 0xca, 0xe2, 0x79, 0x32, 0xfe, 0xe4, + 0x92, 0x9c, 0x1f, 0x2c, 0x15, 0xb7, 0x16, 0xcb, 0x40, 0xb6, 0xe4, 0xec, 0x32, 0xe6, 0xfe, 0xf7, + 0xe1, 0x50, 0x3e, 0xef, 0x70, 0xe4, 0x3f, 0xed, 0x70, 0x7c, 0x00, 0x2d, 0x2d, 0xe1, 0x68, 0x17, + 0xb6, 0x1f, 0xb6, 0xbc, 0xf3, 0x61, 0xff, 0xf7, 0x1a, 0xab, 0xdf, 0x81, 0x9a, 0x40, 0x47, 0x03, + 0xbd, 0x81, 0xfc, 0xa6, 0xd5, 0xbc, 0xf0, 0xe7, 0x07, 0xee, 0x5a, 0x6c, 0x45, 0x12, 0xca, 0x1b, + 0x03, 0xd4, 0xa4, 0x0e, 0xbe, 0x6c, 0x83, 0x3b, 0xcb, 0x6d, 0xbd, 0x1f, 0x39, 0xc4, 0x76, 0xed, + 0x06, 0x7a, 0xb2, 0x0f, 0x35, 0x91, 0xd4, 0xfe, 0x05, 0x9e, 0x8d, 0x83, 0xf9, 0xbe, 0xc7, 0xb6, + 0xc6, 0x9f, 0x10, 0x87, 0x4b, 0x8e, 0xf4, 0xe3, 0xfa, 0x01, 0x33, 0xa6, 0x81, 0xef, 0xb1, 0xa9, + 0x11, 0x2c, 0xa7, 0xf5, 0x29, 0x65, 0x82, 0xbb, 0x7d, 0x8c, 0x16, 0xfc, 0x50, 0x7d, 0x2b, 0x7e, + 0xff, 0x92, 0xa4, 0xdf, 0xe4, 0x5c, 0xd7, 0x69, 0xff, 0x2e, 0x5f, 0x74, 0x13, 0x53, 0x67, 0x93, + 0xea, 0x3b, 0xea, 0xfb, 0xb7, 0x2c, 0xf8, 0x99, 0xf1, 0x00, 0xe1, 0xbd, 0x2a, 0xec, 0x9b, 0xff, + 0x04, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x0a, 0x14, 0x97, 0x28, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go b/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go new file mode 100644 index 0000000..49b7014 --- /dev/null +++ b/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go @@ -0,0 +1,71 @@ +// Code generated by protoc-gen-go. +// source: src/google/protobuf/source_context.proto +// DO NOT EDIT! + +/* +Package source_context is a generated protocol buffer package. + +It is generated from these files: + src/google/protobuf/source_context.proto + +It has these top-level messages: + SourceContext +*/ +package source_context + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// `SourceContext` represents information about the source of a +// protobuf element, like the file in which it is defined. +type SourceContext struct { + // The path-qualified name of the .proto file that contained the associated + // protobuf element. For example: `"google/protobuf/source_context.proto"`. + FileName string `protobuf:"bytes,1,opt,name=file_name,json=fileName" json:"file_name,omitempty"` +} + +func (m *SourceContext) Reset() { *m = SourceContext{} } +func (m *SourceContext) String() string { return proto.CompactTextString(m) } +func (*SourceContext) ProtoMessage() {} +func (*SourceContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *SourceContext) GetFileName() string { + if m != nil { + return m.FileName + } + return "" +} + +func init() { + proto.RegisterType((*SourceContext)(nil), "google.protobuf.SourceContext") +} + +func init() { proto.RegisterFile("src/google/protobuf/source_context.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 188 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x28, 0x2e, 0x4a, 0xd6, + 0x4f, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, + 0x2f, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0x8d, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xad, 0x28, 0xd1, 0x03, + 0x8b, 0x0b, 0xf1, 0x43, 0x54, 0xe9, 0xc1, 0x54, 0x29, 0xe9, 0x70, 0xf1, 0x06, 0x83, 0x15, 0x3a, + 0x43, 0xd4, 0x09, 0x49, 0x73, 0x71, 0xa6, 0x65, 0xe6, 0xa4, 0xc6, 0xe7, 0x25, 0xe6, 0xa6, 0x4a, + 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x71, 0x80, 0x04, 0xfc, 0x12, 0x73, 0x53, 0x9d, 0xa6, 0x32, + 0x72, 0x09, 0x27, 0xe7, 0xe7, 0xea, 0xa1, 0x99, 0xe2, 0x24, 0x84, 0x62, 0x46, 0x00, 0x48, 0x38, + 0x80, 0x31, 0xca, 0x11, 0xaa, 0x2c, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, + 0x3f, 0x3d, 0x35, 0x0f, 0xac, 0x09, 0x97, 0x33, 0xad, 0x51, 0xb9, 0x8b, 0x98, 0x98, 0xdd, 0x03, + 0x9c, 0x56, 0x31, 0xc9, 0xb9, 0x43, 0x4c, 0x0a, 0x80, 0xea, 0xd2, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, + 0xce, 0xcb, 0x2f, 0xcf, 0x0b, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x1b, 0x67, 0x0c, 0x08, + 0x00, 0x00, 0xff, 0xff, 0xc7, 0xbc, 0xab, 0x7f, 0x09, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/regen.go b/vendor/google.golang.org/genproto/regen.go new file mode 100644 index 0000000..9c906f2 --- /dev/null +++ b/vendor/google.golang.org/genproto/regen.go @@ -0,0 +1,123 @@ +// Copyright 2016 Google 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. + +// +build ignore + +// Regen.go regenerates the genproto repository. +// +// Regen.go recursively walks through each directory named by given arguments, +// looking for all .proto files. (Symlinks are not followed.) +// If the pkg_prefix flag is not an empty string, +// any proto file without `go_package` option +// or whose option does not begin with the prefix is ignored. +// Protoc is executed on remaining files, +// one invocation per set of files declaring the same Go package. +package main + +import ( + "flag" + "fmt" + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" + "regexp" + "strconv" + "strings" +) + +var goPkgOptRe = regexp.MustCompile(`(?m)^option go_package = (.*);`) + +func usage() { + fmt.Fprintln(os.Stderr, `usage: go run regen.go -go_out=path/to/output [-pkg_prefix=pkg/prefix] roots... + +Most users will not need to run this file directly. +To regenerate this repository, run regen.sh instead.`) + flag.PrintDefaults() +} + +func main() { + goOutDir := flag.String("go_out", "", "go_out argument to pass to protoc-gen-go") + pkgPrefix := flag.String("pkg_prefix", "", "only include proto files with go_package starting with this prefix") + flag.Usage = usage + flag.Parse() + + if *goOutDir == "" { + log.Fatal("need go_out flag") + } + + pkgFiles := make(map[string][]string) + walkFn := func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.Mode().IsRegular() || !strings.HasSuffix(path, ".proto") { + return nil + } + pkg, err := goPkg(path) + if err != nil { + return err + } + pkgFiles[pkg] = append(pkgFiles[pkg], path) + return nil + } + for _, root := range flag.Args() { + if err := filepath.Walk(root, walkFn); err != nil { + log.Fatal(err) + } + } + for pkg, fnames := range pkgFiles { + if !strings.HasPrefix(pkg, *pkgPrefix) { + continue + } + if out, err := protoc(*goOutDir, flag.Args(), fnames); err != nil { + log.Fatalf("error executing protoc: %s\n%s", err, out) + } + } +} + +// goPkg reports the import path declared in the given file's +// `go_package` option. If the option is missing, goPkg returns empty string. +func goPkg(fname string) (string, error) { + content, err := ioutil.ReadFile(fname) + if err != nil { + return "", err + } + + var pkgName string + if match := goPkgOptRe.FindSubmatch(content); len(match) > 0 { + pn, err := strconv.Unquote(string(match[1])) + if err != nil { + return "", err + } + pkgName = pn + } + if p := strings.IndexRune(pkgName, ';'); p > 0 { + pkgName = pkgName[:p] + } + return pkgName, nil +} + +// protoc executes the "protoc" command on files named in fnames, +// passing go_out and include flags specified in goOut and includes respectively. +// protoc returns combined output from stdout and stderr. +func protoc(goOut string, includes, fnames []string) ([]byte, error) { + args := []string{"--go_out=plugins=grpc:" + goOut} + for _, inc := range includes { + args = append(args, "-I", inc) + } + args = append(args, fnames...) + return exec.Command("protoc", args...).CombinedOutput() +} diff --git a/vendor/google.golang.org/genproto/regen.sh b/vendor/google.golang.org/genproto/regen.sh new file mode 100755 index 0000000..58c900c --- /dev/null +++ b/vendor/google.golang.org/genproto/regen.sh @@ -0,0 +1,78 @@ +#!/bin/bash +# +# Copyright 2016 Google 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. + +# This script rebuilds the generated code for the protocol buffers. +# To run this you will need protoc and goprotobuf installed; +# see https://github.com/golang/protobuf for instructions. +# You also need Go and Git installed. + +set -e + +PKG=google.golang.org/genproto +PROTO_REPO=https://github.com/google/protobuf +PROTO_SUBDIR=src/google/protobuf +API_REPO=https://github.com/googleapis/googleapis + +function die() { + echo 1>&2 $* + exit 1 +} + +# Sanity check that the right tools are accessible. +for tool in go git protoc protoc-gen-go; do + q=$(which $tool) || die "didn't find $tool" + echo 1>&2 "$tool: $q" +done + +root=$(go list -f '{{.Root}}' $PKG/... | head -n1) +if [ -z "$root" ]; then + die "cannot find root of $PKG" +fi + +remove_dirs= +trap 'rm -rf $remove_dirs' EXIT + +if [ -z "$PROTOBUF" ]; then + proto_repo_dir=$(mktemp -d -t regen-cds-proto.XXXXXX) + git clone -q $PROTO_REPO $proto_repo_dir & + remove_dirs="$proto_repo_dir" + # The protoc include directory is actually the "src" directory of the repo. + protodir="$proto_repo_dir/src" +else + protodir="$PROTOBUF" +fi + +if [ -z "$GOOGLEAPIS" ]; then + apidir=$(mktemp -d -t regen-cds-api.XXXXXX) + git clone -q $API_REPO $apidir & + remove_dirs="$remove_dirs $apidir" +else + apidir="$GOOGLEAPIS" +fi + +wait + +# Nuke everything, we'll generate them back +rm -r googleapis/ protobuf/ + +go run regen.go -go_out "$root/src" -pkg_prefix "$PKG" "$apidir" "$protodir" + +# Sanity check the build. +echo 1>&2 "Checking that the libraries build..." +go build -v ./... + +echo 1>&2 "All done!" + diff --git a/vendor/google.golang.org/grpc/.travis.yml b/vendor/google.golang.org/grpc/.travis.yml new file mode 100644 index 0000000..6ec5732 --- /dev/null +++ b/vendor/google.golang.org/grpc/.travis.yml @@ -0,0 +1,20 @@ +language: go + +go: + - 1.5.4 + - 1.6.3 + - 1.7 + - 1.8 + +go_import_path: google.golang.org/grpc + +before_install: + - if [[ $TRAVIS_GO_VERSION != 1.5* ]]; then go get github.com/golang/lint/golint; fi + - go get -u golang.org/x/tools/cmd/goimports github.com/axw/gocov/gocov github.com/mattn/goveralls golang.org/x/tools/cmd/cover + +script: + - '! gofmt -s -d -l . 2>&1 | read' + - '! goimports -l . | read' + - 'if [[ $TRAVIS_GO_VERSION != 1.5* ]]; then ! golint ./... | grep -vE "(_mock|_string|\.pb)\.go:"; fi' + - '! go tool vet -all . 2>&1 | grep -vE "constant [0-9]+ not a string in call to Errorf" | grep -vF .pb.go:' # https://github.com/golang/protobuf/issues/214 + - make test testrace diff --git a/vendor/google.golang.org/grpc/CONTRIBUTING.md b/vendor/google.golang.org/grpc/CONTRIBUTING.md new file mode 100644 index 0000000..36cd6f7 --- /dev/null +++ b/vendor/google.golang.org/grpc/CONTRIBUTING.md @@ -0,0 +1,46 @@ +# How to contribute + +We definitely welcome patches and contribution to grpc! Here are some guidelines +and information about how to do so. + +## Sending patches + +### Getting started + +1. Check out the code: + + $ go get google.golang.org/grpc + $ cd $GOPATH/src/google.golang.org/grpc + +1. Create a fork of the grpc-go repository. +1. Add your fork as a remote: + + $ git remote add fork git@github.com:$YOURGITHUBUSERNAME/grpc-go.git + +1. Make changes, commit them. +1. Run the test suite: + + $ make test + +1. Push your changes to your fork: + + $ git push fork ... + +1. Open a pull request. + +## Legal requirements + +In order to protect both you and ourselves, you will need to sign the +[Contributor License Agreement](https://cla.developers.google.com/clas). + +## Filing Issues +When filing an issue, make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +### Contributing code +Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. diff --git a/vendor/google.golang.org/grpc/Documentation/gomock-example.md b/vendor/google.golang.org/grpc/Documentation/gomock-example.md new file mode 100644 index 0000000..9f7e023 --- /dev/null +++ b/vendor/google.golang.org/grpc/Documentation/gomock-example.md @@ -0,0 +1,121 @@ +# Mocking Service for gRPC + +[Example code](https://github.com/grpc/grpc-go/tree/master/examples/helloworld/mock) + +## Why? + +To test client-side logic without the overhead of connecting to a real server. Mocking enables users to write light-weight unit tests to check functionalities on client-side without invoking RPC calls to a server. + +## Idea: Mock the client stub that connects to the server. + +We use Gomock to mock the client interface (in the generated code) and programmatically set its methods to expect and return pre-determined values. This enables users to write tests around the client logic and use this mocked stub while making RPC calls. + +## How to use Gomock? + +Documentation on Gomock can be found [here](https://github.com/golang/mock). +A quick reading of the documentation should enable users to follow the code below. + +Consider a gRPC service based on following proto file: + +```proto +//helloworld.proto + +package helloworld; + +message HelloRequest { + string name = 1; +} + +message HelloReply { + string name = 1; +} + +service Greeter { + rpc SayHello (HelloRequest) returns (HelloReply) {} +} +``` + +The generated file helloworld.pb.go will have a client interface for each service defined in the proto file. This interface will have methods corresponding to each rpc inside that service. + +```Go +type GreeterClient interface { + SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) +} +``` + +The generated code also contains a struct that implements this interface. + +```Go +type greeterClient struct { + cc *grpc.ClientConn +} +func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error){ + // ... + // gRPC specific code here + // ... +} +``` + +Along with this the generated code has a method to create an instance of this struct. +```Go +func NewGreeterClient(cc *grpc.ClientConn) GreeterClient +``` + +The user code uses this function to create an instance of the struct greeterClient which then can be used to make rpc calls to the server. +We will mock this interface GreeterClient and use an instance of that mock to make rpc calls. These calls instead of going to server will return pre-determined values. + +To create a mock we’ll use [mockgen](https://github.com/golang/mock#running-mockgen). +From the directory ``` examples/helloworld/mock/ ``` run ``` mockgen google.golang.org/grpc/examples/helloworld/helloworld GreeterClient > mock_helloworld/hw_mock.go ``` + +Notice that in the above command we specify GreeterClient as the interface to be mocked. + +The user test code can import the package generated by mockgen along with library package gomock to write unit tests around client-side logic. +```Go +import "github.com/golang/mock/gomock" +import hwmock "google.golang.org/grpc/examples/helloworld/mock/mock_helloworld" +``` + +An instance of the mocked interface can be created as: +```Go +mockGreeterClient := hwmock.NewMockGreeterClient(ctrl) +``` +This mocked object can be programmed to expect calls to its methods and return pre-determined values. For instance, we can program mockGreeterClient to expect a call to its method SayHello and return a HelloReply with message “Mocked RPC”. + +```Go +mockGreeterClient.EXPECT().SayHello( + gomock.Any(), // expect any value for first parameter + gomock.Any(), // expect any value for second parameter +).Return(&helloworld.HelloReply{Message: “Mocked RPC”}, nil) +``` + +gomock.Any() indicates that the parameter can have any value or type. We can indicate specific values for built-in types with gomock.Eq(). +However, if the test code needs to specify the parameter to have a proto message type, we can replace gomock.Any() with an instance of a struct that implements gomock.Matcher interface. + +```Go +type rpcMsg struct { + msg proto.Message +} + +func (r *rpcMsg) Matches(msg interface{}) bool { + m, ok := msg.(proto.Message) + if !ok { + return false + } + return proto.Equal(m, r.msg) +} + +func (r *rpcMsg) String() string { + return fmt.Sprintf("is %s", r.msg) +} + +... + +req := &helloworld.HelloRequest{Name: "unit_test"} +mockGreeterClient.EXPECT().SayHello( + gomock.Any(), + &rpcMsg{msg: req}, +).Return(&helloworld.HelloReply{Message: "Mocked Interface"}, nil) +``` + + + diff --git a/vendor/google.golang.org/grpc/Documentation/grpc-auth-support.md b/vendor/google.golang.org/grpc/Documentation/grpc-auth-support.md new file mode 100644 index 0000000..248d272 --- /dev/null +++ b/vendor/google.golang.org/grpc/Documentation/grpc-auth-support.md @@ -0,0 +1,41 @@ +# Authentication + +As outlined in the [gRPC authentication guide](http://www.grpc.io/docs/guides/auth.html) there are a number of different mechanisms for asserting identity between an client and server. We'll present some code-samples here demonstrating how to provide TLS support encryption and identity assertions as well as passing OAuth2 tokens to services that support it. + +# Enabling TLS on a gRPC client + +```Go +conn, err := grpc.Dial(serverAddr, grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, ""))) +``` + +# Enabling TLS on a gRPC server + +```Go +creds, err := credentials.NewServerTLSFromFile(certFile, keyFile) +if err != nil { + log.Fatalf("Failed to generate credentials %v", err) +} +lis, err := net.Listen("tcp", ":0") +server := grpc.NewServer(grpc.Creds(creds)) +... +server.Serve(lis) +``` + +# Authenticating with Google + +## Google Compute Engine (GCE) + +```Go +conn, err := grpc.Dial(serverAddr, grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")), grpc.WithPerRPCCredentials(oauth.NewComputeEngine())) +``` + +## JWT + +```Go +jwtCreds, err := oauth.NewServiceAccountFromFile(*serviceAccountKeyFile, *oauthScope) +if err != nil { + log.Fatalf("Failed to create JWT credentials: %v", err) +} +conn, err := grpc.Dial(serverAddr, grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")), grpc.WithPerRPCCredentials(jwtCreds)) +``` + diff --git a/vendor/google.golang.org/grpc/Documentation/grpc-metadata.md b/vendor/google.golang.org/grpc/Documentation/grpc-metadata.md new file mode 100644 index 0000000..f36ef72 --- /dev/null +++ b/vendor/google.golang.org/grpc/Documentation/grpc-metadata.md @@ -0,0 +1,201 @@ +# Metadata + +gRPC supports sending metadata between client and server. +This doc shows how to send and receive metadata in gRPC-go. + +## Background + +Four kinds of service method: + +- [Unary RPC](http://www.grpc.io/docs/guides/concepts.html#unary-rpc) +- [Server streaming RPC](http://www.grpc.io/docs/guides/concepts.html#server-streaming-rpc) +- [Client streaming RPC](http://www.grpc.io/docs/guides/concepts.html#client-streaming-rpc) +- [Bidirectional streaming RPC](http://www.grpc.io/docs/guides/concepts.html#bidirectional-streaming-rpc) + +And concept of [metadata](http://www.grpc.io/docs/guides/concepts.html#metadata). + +## Constructing metadata + +A metadata can be created using package [metadata](https://godoc.org/google.golang.org/grpc/metadata). +The type MD is actually a map from string to a list of strings: + +```go +type MD map[string][]string +``` + +Metadata can be read like a normal map. +Note that the value type of this map is `[]string`, +so that users can attach multiple values using a single key. + +### Creating a new metadata + +A metadata can be created from a `map[string]string` using function `New`: + +```go +md := metadata.New(map[string]string{"key1": "val1", "key2": "val2"}) +``` + +Another way is to use `Pairs`. +Values with the same key will be merged into a list: + +```go +md := metadata.Pairs( + "key1", "val1", + "key1", "val1-2", // "key1" will have map value []string{"val1", "val1-2"} + "key2", "val2", +) +``` + +__Note:__ all the keys will be automatically converted to lowercase, +so "key1" and "kEy1" will be the same key and their values will be merged into the same list. +This happens for both `New` and `Pairs`. + +### Storing binary data in metadata + +In metadata, keys are always strings. But values can be strings or binary data. +To store binary data value in metadata, simply add "-bin" suffix to the key. +The values with "-bin" suffixed keys will be encoded when creating the metadata: + +```go +md := metadata.Pairs( + "key", "string value", + "key-bin", string([]byte{96, 102}), // this binary data will be encoded (base64) before sending + // and will be decoded after being transferred. +) +``` + +## Retrieving metadata from context + +Metadata can be retrieved from context using `FromContext`: + +```go +func (s *server) SomeRPC(ctx context.Context, in *pb.SomeRequest) (*pb.SomeResponse, err) { + md, ok := metadata.FromContext(ctx) + // do something with metadata +} +``` + +## Sending and receiving metadata - client side + +[//]: # "TODO: uncomment next line after example source added" +[//]: # "Real metadata sending and receiving examples are available [here](TODO:example_dir)." + +### Sending metadata + +To send metadata to server, the client can wrap the metadata into a context using `NewContext`, and make the RPC with this context: + +```go +md := metadata.Pairs("key", "val") + +// create a new context with this metadata +ctx := metadata.NewContext(context.Background(), md) + +// make unary RPC +response, err := client.SomeRPC(ctx, someRequest) + +// or make streaming RPC +stream, err := client.SomeStreamingRPC(ctx) +``` +### Receiving metadata + +Metadata that a client can receive includes header and trailer. + +#### Unary call + +Header and trailer sent along with a unary call can be retrieved using function [Header](https://godoc.org/google.golang.org/grpc#Header) and [Trailer](https://godoc.org/google.golang.org/grpc#Trailer) in [CallOption](https://godoc.org/google.golang.org/grpc#CallOption): + +```go +var header, trailer metadata.MD // variable to store header and trailer +r, err := client.SomeRPC( + ctx, + someRequest, + grpc.Header(&header), // will retrieve header + grpc.Trailer(&trailer), // will retrieve trailer +) + +// do something with header and trailer +``` + +#### Streaming call + +For streaming calls including: + +- Server streaming RPC +- Client streaming RPC +- Bidirectional streaming RPC + +Header and trailer can be retrieved from the returned stream using function `Header` and `Trailer` in interface [ClientStream](https://godoc.org/google.golang.org/grpc#ClientStream): + +```go +stream, err := client.SomeStreamingRPC(ctx) + +// retrieve header +header, err := stream.Header() + +// retrieve trailer +trailer := stream.Trailer() + +``` + +## Sending and receiving metadata - server side + +[//]: # "TODO: uncomment next line after example source added" +[//]: # "Real metadata sending and receiving examples are available [here](TODO:example_dir)." + +### Receiving metadata + +To read metadata sent by the client, the server needs to retrieve it from RPC context. +If it is a unary call, the RPC handler's context can be used. +For streaming calls, the server needs to get context from the stream. + +#### Unary call + +```go +func (s *server) SomeRPC(ctx context.Context, in *pb.someRequest) (*pb.someResponse, error) { + md, ok := metadata.FromContext(ctx) + // do something with metadata +} +``` + +#### Streaming call + +```go +func (s *server) SomeStreamingRPC(stream pb.Service_SomeStreamingRPCServer) error { + md, ok := metadata.FromContext(stream.Context()) // get context from stream + // do something with metadata +} +``` + +### Sending metadata + +#### Unary call + +To send header and trailer to client in unary call, the server can call [SendHeader](https://godoc.org/google.golang.org/grpc#SendHeader) and [SetTrailer](https://godoc.org/google.golang.org/grpc#SetTrailer) functions in module [grpc](https://godoc.org/google.golang.org/grpc). +These two functions take a context as the first parameter. +It should be the RPC handler's context or one derived from it: + +```go +func (s *server) SomeRPC(ctx context.Context, in *pb.someRequest) (*pb.someResponse, error) { + // create and send header + header := metadata.Pairs("header-key", "val") + grpc.SendHeader(ctx, header) + // create and set trailer + trailer := metadata.Pairs("trailer-key", "val") + grpc.SetTrailer(ctx, trailer) +} +``` + +#### Streaming call + +For streaming calls, header and trailer can be sent using function `SendHeader` and `SetTrailer` in interface [ServerStream](https://godoc.org/google.golang.org/grpc#ServerStream): + +```go +func (s *server) SomeStreamingRPC(stream pb.Service_SomeStreamingRPCServer) error { + // create and send header + header := metadata.Pairs("header-key", "val") + stream.SendHeader(header) + // create and set trailer + trailer := metadata.Pairs("trailer-key", "val") + stream.SetTrailer(trailer) +} +``` diff --git a/vendor/google.golang.org/grpc/Documentation/server-reflection-tutorial.md b/vendor/google.golang.org/grpc/Documentation/server-reflection-tutorial.md new file mode 100644 index 0000000..ca8e30c --- /dev/null +++ b/vendor/google.golang.org/grpc/Documentation/server-reflection-tutorial.md @@ -0,0 +1,152 @@ +# gRPC Server Reflection Tutorial + +gRPC Server Reflection provides information about publicly-accessible gRPC +services on a server, and assists clients at runtime to construct RPC +requests and responses without precompiled service information. It is used by +gRPC CLI, which can be used to introspect server protos and send/receive test +RPCs. + +## Enable Server Reflection + +gRPC-go Server Reflection is implemented in package [reflection](https://github.com/grpc/grpc-go/tree/master/reflection). To enable server reflection, you need to import this package and register reflection service on your gRPC server. + +For example, to enable server reflection in `example/helloworld`, we need to make the following changes: + +```diff +--- a/examples/helloworld/greeter_server/main.go ++++ b/examples/helloworld/greeter_server/main.go +@@ -40,6 +40,7 @@ import ( + "golang.org/x/net/context" + "google.golang.org/grpc" + pb "google.golang.org/grpc/examples/helloworld/helloworld" ++ "google.golang.org/grpc/reflection" + ) + + const ( +@@ -61,6 +62,8 @@ func main() { + } + s := grpc.NewServer() + pb.RegisterGreeterServer(s, &server{}) ++ // Register reflection service on gRPC server. ++ reflection.Register(s) + if err := s.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + } +``` + +We have made this change in `example/helloworld`, and we will use it as an example to show the use of gRPC server reflection and gRPC CLI in this tutorial. + +## gRPC CLI + +After enabling Server Reflection in a server application, you can use gRPC CLI to check its services. +gRPC CLI is only available in c++. Instructions on how to use gRPC CLI can be found at [command_line_tool.md](https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md). + +To build gRPC CLI: + +```sh +git clone https://github.com/grpc/grpc +cd grpc +make grpc_cli +cd bins/opt # grpc_cli is in directory bins/opt/ +``` + +## Use gRPC CLI to check services + +First, start the helloworld server in grpc-go directory: + +```sh +$ cd <grpc-go-directory> +$ go run examples/helloworld/greeter_server/main.go +``` + +Open a new terminal and make sure you are in the directory where grpc_cli lives: + +```sh +$ cd <grpc-cpp-dirctory>/bins/opt +``` + +### List services + +`grpc_cli ls` command lists services and methods exposed at a given port: + +- List all the services exposed at a given port + + ```sh + $ ./grpc_cli ls localhost:50051 + ``` + + output: + ```sh + helloworld.Greeter + grpc.reflection.v1alpha.ServerReflection + ``` + +- List one service with details + + `grpc_cli ls` command inspects a service given its full name (in the format of + \<package\>.\<service\>). It can print information with a long listing format + when `-l` flag is set. This flag can be used to get more details about a + service. + + ```sh + $ ./grpc_cli ls localhost:50051 helloworld.Greeter -l + ``` + + output: + ```sh + filename: helloworld.proto + package: helloworld; + service Greeter { + rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {} + } + + ``` + +### List methods + +- List one method with details + + `grpc_cli ls` command also inspects a method given its full name (in the + format of \<package\>.\<service\>.\<method\>). + + ```sh + $ ./grpc_cli ls localhost:50051 helloworld.Greeter.SayHello -l + ``` + + output: + ```sh + rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {} + ``` + +### Inspect message types + +We can use`grpc_cli type` command to inspect request/response types given the +full name of the type (in the format of \<package\>.\<type\>). + +- Get information about the request type + + ```sh + $ ./grpc_cli type localhost:50051 helloworld.HelloRequest + ``` + + output: + ```sh + message HelloRequest { + optional string name = 1[json_name = "name"]; + } + ``` + +### Call a remote method + +We can send RPCs to a server and get responses using `grpc_cli call` command. + +- Call a unary method + + ```sh + $ ./grpc_cli call localhost:50051 SayHello "name: 'gRPC CLI'" + ``` + + output: + ```sh + message: "Hello gRPC CLI" + ``` diff --git a/vendor/google.golang.org/grpc/LICENSE b/vendor/google.golang.org/grpc/LICENSE new file mode 100644 index 0000000..f4988b4 --- /dev/null +++ b/vendor/google.golang.org/grpc/LICENSE @@ -0,0 +1,28 @@ +Copyright 2014, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/google.golang.org/grpc/Makefile b/vendor/google.golang.org/grpc/Makefile new file mode 100644 index 0000000..03bb01f --- /dev/null +++ b/vendor/google.golang.org/grpc/Makefile @@ -0,0 +1,52 @@ +all: test testrace + +deps: + go get -d -v google.golang.org/grpc/... + +updatedeps: + go get -d -v -u -f google.golang.org/grpc/... + +testdeps: + go get -d -v -t google.golang.org/grpc/... + +updatetestdeps: + go get -d -v -t -u -f google.golang.org/grpc/... + +build: deps + go build google.golang.org/grpc/... + +proto: + @ if ! which protoc > /dev/null; then \ + echo "error: protoc not installed" >&2; \ + exit 1; \ + fi + go get -u -v github.com/golang/protobuf/protoc-gen-go + # use $$dir as the root for all proto files in the same directory + for dir in $$(git ls-files '*.proto' | xargs -n1 dirname | uniq); do \ + protoc -I $$dir --go_out=plugins=grpc:$$dir $$dir/*.proto; \ + done + +test: testdeps + go test -v -cpu 1,4 google.golang.org/grpc/... + +testrace: testdeps + go test -v -race -cpu 1,4 google.golang.org/grpc/... + +clean: + go clean -i google.golang.org/grpc/... + +coverage: testdeps + ./coverage.sh --coveralls + +.PHONY: \ + all \ + deps \ + updatedeps \ + testdeps \ + updatetestdeps \ + build \ + proto \ + test \ + testrace \ + clean \ + coverage diff --git a/vendor/google.golang.org/grpc/PATENTS b/vendor/google.golang.org/grpc/PATENTS new file mode 100644 index 0000000..69b4795 --- /dev/null +++ b/vendor/google.golang.org/grpc/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the gRPC project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of gRPC, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of gRPC. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of gRPC or any code incorporated within this +implementation of gRPC constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of gRPC +shall terminate as of the date such litigation is filed. diff --git a/vendor/google.golang.org/grpc/README.md b/vendor/google.golang.org/grpc/README.md new file mode 100644 index 0000000..39120c2 --- /dev/null +++ b/vendor/google.golang.org/grpc/README.md @@ -0,0 +1,57 @@ +#gRPC-Go + +[![Build Status](https://travis-ci.org/grpc/grpc-go.svg)](https://travis-ci.org/grpc/grpc-go) [![GoDoc](https://godoc.org/google.golang.org/grpc?status.svg)](https://godoc.org/google.golang.org/grpc) + +The Go implementation of [gRPC](http://www.grpc.io/): A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. For more information see the [gRPC Quick Start](http://www.grpc.io/docs/) guide. + +Installation +------------ + +To install this package, you need to install Go and setup your Go workspace on your computer. The simplest way to install the library is to run: + +``` +$ go get google.golang.org/grpc +``` + +Prerequisites +------------- + +This requires Go 1.5 or later. + +A note on the version used: significant performance improvements in benchmarks +of grpc-go have been seen by upgrading the go version from 1.5 to the latest +1.7.1. + +From https://golang.org/doc/install, one way to install the latest version of go is: +``` +$ GO_VERSION=1.7.1 +$ OS=linux +$ ARCH=amd64 +$ curl -O https://storage.googleapis.com/golang/go${GO_VERSION}.${OS}-${ARCH}.tar.gz +$ sudo tar -C /usr/local -xzf go$GO_VERSION.$OS-$ARCH.tar.gz +$ # Put go on the PATH, keep the usual installation dir +$ sudo ln -s /usr/local/go/bin/go /usr/bin/go +$ rm go$GO_VERSION.$OS-$ARCH.tar.gz +``` + +Constraints +----------- +The grpc package should only depend on standard Go packages and a small number of exceptions. If your contribution introduces new dependencies which are NOT in the [list](http://godoc.org/google.golang.org/grpc?imports), you need a discussion with gRPC-Go authors and consultants. + +Documentation +------------- +See [API documentation](https://godoc.org/google.golang.org/grpc) for package and API descriptions and find examples in the [examples directory](examples/). + +Status +------ +GA + +FAQ +--- + +#### Compiling error, undefined: grpc.SupportPackageIsVersion + +Please update proto package, gRPC package and rebuild the proto files: + - `go get -u github.com/golang/protobuf/{proto,protoc-gen-go}` + - `go get -u google.golang.org/grpc` + - `protoc --go_out=plugins=grpc:. *.proto` diff --git a/vendor/google.golang.org/grpc/backoff.go b/vendor/google.golang.org/grpc/backoff.go new file mode 100644 index 0000000..c99024e --- /dev/null +++ b/vendor/google.golang.org/grpc/backoff.go @@ -0,0 +1,80 @@ +package grpc + +import ( + "math/rand" + "time" +) + +// DefaultBackoffConfig uses values specified for backoff in +// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. +var ( + DefaultBackoffConfig = BackoffConfig{ + MaxDelay: 120 * time.Second, + baseDelay: 1.0 * time.Second, + factor: 1.6, + jitter: 0.2, + } +) + +// backoffStrategy defines the methodology for backing off after a grpc +// connection failure. +// +// This is unexported until the gRPC project decides whether or not to allow +// alternative backoff strategies. Once a decision is made, this type and its +// method may be exported. +type backoffStrategy interface { + // backoff returns the amount of time to wait before the next retry given + // the number of consecutive failures. + backoff(retries int) time.Duration +} + +// BackoffConfig defines the parameters for the default gRPC backoff strategy. +type BackoffConfig struct { + // MaxDelay is the upper bound of backoff delay. + MaxDelay time.Duration + + // TODO(stevvooe): The following fields are not exported, as allowing + // changes would violate the current gRPC specification for backoff. If + // gRPC decides to allow more interesting backoff strategies, these fields + // may be opened up in the future. + + // baseDelay is the amount of time to wait before retrying after the first + // failure. + baseDelay time.Duration + + // factor is applied to the backoff after each retry. + factor float64 + + // jitter provides a range to randomize backoff delays. + jitter float64 +} + +func setDefaults(bc *BackoffConfig) { + md := bc.MaxDelay + *bc = DefaultBackoffConfig + + if md > 0 { + bc.MaxDelay = md + } +} + +func (bc BackoffConfig) backoff(retries int) time.Duration { + if retries == 0 { + return bc.baseDelay + } + backoff, max := float64(bc.baseDelay), float64(bc.MaxDelay) + for backoff < max && retries > 0 { + backoff *= bc.factor + retries-- + } + if backoff > max { + backoff = max + } + // Randomize backoff delays so that if a cluster of requests start at + // the same time, they won't operate in lockstep. + backoff *= 1 + bc.jitter*(rand.Float64()*2-1) + if backoff < 0 { + return 0 + } + return time.Duration(backoff) +} diff --git a/vendor/google.golang.org/grpc/backoff_test.go b/vendor/google.golang.org/grpc/backoff_test.go new file mode 100644 index 0000000..bfca7b1 --- /dev/null +++ b/vendor/google.golang.org/grpc/backoff_test.go @@ -0,0 +1,11 @@ +package grpc + +import "testing" + +func TestBackoffConfigDefaults(t *testing.T) { + b := BackoffConfig{} + setDefaults(&b) + if b != DefaultBackoffConfig { + t.Fatalf("expected BackoffConfig to pickup default parameters: %v != %v", b, DefaultBackoffConfig) + } +} diff --git a/vendor/google.golang.org/grpc/balancer.go b/vendor/google.golang.org/grpc/balancer.go new file mode 100644 index 0000000..9d943fb --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer.go @@ -0,0 +1,400 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "fmt" + "sync" + + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/naming" +) + +// Address represents a server the client connects to. +// This is the EXPERIMENTAL API and may be changed or extended in the future. +type Address struct { + // Addr is the server address on which a connection will be established. + Addr string + // Metadata is the information associated with Addr, which may be used + // to make load balancing decision. + Metadata interface{} +} + +// BalancerConfig specifies the configurations for Balancer. +type BalancerConfig struct { + // DialCreds is the transport credential the Balancer implementation can + // use to dial to a remote load balancer server. The Balancer implementations + // can ignore this if it does not need to talk to another party securely. + DialCreds credentials.TransportCredentials +} + +// BalancerGetOptions configures a Get call. +// This is the EXPERIMENTAL API and may be changed or extended in the future. +type BalancerGetOptions struct { + // BlockingWait specifies whether Get should block when there is no + // connected address. + BlockingWait bool +} + +// Balancer chooses network addresses for RPCs. +// This is the EXPERIMENTAL API and may be changed or extended in the future. +type Balancer interface { + // Start does the initialization work to bootstrap a Balancer. For example, + // this function may start the name resolution and watch the updates. It will + // be called when dialing. + Start(target string, config BalancerConfig) error + // Up informs the Balancer that gRPC has a connection to the server at + // addr. It returns down which is called once the connection to addr gets + // lost or closed. + // TODO: It is not clear how to construct and take advantage of the meaningful error + // parameter for down. Need realistic demands to guide. + Up(addr Address) (down func(error)) + // Get gets the address of a server for the RPC corresponding to ctx. + // i) If it returns a connected address, gRPC internals issues the RPC on the + // connection to this address; + // ii) If it returns an address on which the connection is under construction + // (initiated by Notify(...)) but not connected, gRPC internals + // * fails RPC if the RPC is fail-fast and connection is in the TransientFailure or + // Shutdown state; + // or + // * issues RPC on the connection otherwise. + // iii) If it returns an address on which the connection does not exist, gRPC + // internals treats it as an error and will fail the corresponding RPC. + // + // Therefore, the following is the recommended rule when writing a custom Balancer. + // If opts.BlockingWait is true, it should return a connected address or + // block if there is no connected address. It should respect the timeout or + // cancellation of ctx when blocking. If opts.BlockingWait is false (for fail-fast + // RPCs), it should return an address it has notified via Notify(...) immediately + // instead of blocking. + // + // The function returns put which is called once the rpc has completed or failed. + // put can collect and report RPC stats to a remote load balancer. + // + // This function should only return the errors Balancer cannot recover by itself. + // gRPC internals will fail the RPC if an error is returned. + Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error) + // Notify returns a channel that is used by gRPC internals to watch the addresses + // gRPC needs to connect. The addresses might be from a name resolver or remote + // load balancer. gRPC internals will compare it with the existing connected + // addresses. If the address Balancer notified is not in the existing connected + // addresses, gRPC starts to connect the address. If an address in the existing + // connected addresses is not in the notification list, the corresponding connection + // is shutdown gracefully. Otherwise, there are no operations to take. Note that + // the Address slice must be the full list of the Addresses which should be connected. + // It is NOT delta. + Notify() <-chan []Address + // Close shuts down the balancer. + Close() error +} + +// downErr implements net.Error. It is constructed by gRPC internals and passed to the down +// call of Balancer. +type downErr struct { + timeout bool + temporary bool + desc string +} + +func (e downErr) Error() string { return e.desc } +func (e downErr) Timeout() bool { return e.timeout } +func (e downErr) Temporary() bool { return e.temporary } + +func downErrorf(timeout, temporary bool, format string, a ...interface{}) downErr { + return downErr{ + timeout: timeout, + temporary: temporary, + desc: fmt.Sprintf(format, a...), + } +} + +// RoundRobin returns a Balancer that selects addresses round-robin. It uses r to watch +// the name resolution updates and updates the addresses available correspondingly. +func RoundRobin(r naming.Resolver) Balancer { + return &roundRobin{r: r} +} + +type addrInfo struct { + addr Address + connected bool +} + +type roundRobin struct { + r naming.Resolver + w naming.Watcher + addrs []*addrInfo // all the addresses the client should potentially connect + mu sync.Mutex + addrCh chan []Address // the channel to notify gRPC internals the list of addresses the client should connect to. + next int // index of the next address to return for Get() + waitCh chan struct{} // the channel to block when there is no connected address available + done bool // The Balancer is closed. +} + +func (rr *roundRobin) watchAddrUpdates() error { + updates, err := rr.w.Next() + if err != nil { + grpclog.Printf("grpc: the naming watcher stops working due to %v.\n", err) + return err + } + rr.mu.Lock() + defer rr.mu.Unlock() + for _, update := range updates { + addr := Address{ + Addr: update.Addr, + Metadata: update.Metadata, + } + switch update.Op { + case naming.Add: + var exist bool + for _, v := range rr.addrs { + if addr == v.addr { + exist = true + grpclog.Println("grpc: The name resolver wanted to add an existing address: ", addr) + break + } + } + if exist { + continue + } + rr.addrs = append(rr.addrs, &addrInfo{addr: addr}) + case naming.Delete: + for i, v := range rr.addrs { + if addr == v.addr { + copy(rr.addrs[i:], rr.addrs[i+1:]) + rr.addrs = rr.addrs[:len(rr.addrs)-1] + break + } + } + default: + grpclog.Println("Unknown update.Op ", update.Op) + } + } + // Make a copy of rr.addrs and write it onto rr.addrCh so that gRPC internals gets notified. + open := make([]Address, len(rr.addrs)) + for i, v := range rr.addrs { + open[i] = v.addr + } + if rr.done { + return ErrClientConnClosing + } + rr.addrCh <- open + return nil +} + +func (rr *roundRobin) Start(target string, config BalancerConfig) error { + rr.mu.Lock() + defer rr.mu.Unlock() + if rr.done { + return ErrClientConnClosing + } + if rr.r == nil { + // If there is no name resolver installed, it is not needed to + // do name resolution. In this case, target is added into rr.addrs + // as the only address available and rr.addrCh stays nil. + rr.addrs = append(rr.addrs, &addrInfo{addr: Address{Addr: target}}) + return nil + } + w, err := rr.r.Resolve(target) + if err != nil { + return err + } + rr.w = w + rr.addrCh = make(chan []Address) + go func() { + for { + if err := rr.watchAddrUpdates(); err != nil { + return + } + } + }() + return nil +} + +// Up sets the connected state of addr and sends notification if there are pending +// Get() calls. +func (rr *roundRobin) Up(addr Address) func(error) { + rr.mu.Lock() + defer rr.mu.Unlock() + var cnt int + for _, a := range rr.addrs { + if a.addr == addr { + if a.connected { + return nil + } + a.connected = true + } + if a.connected { + cnt++ + } + } + // addr is only one which is connected. Notify the Get() callers who are blocking. + if cnt == 1 && rr.waitCh != nil { + close(rr.waitCh) + rr.waitCh = nil + } + return func(err error) { + rr.down(addr, err) + } +} + +// down unsets the connected state of addr. +func (rr *roundRobin) down(addr Address, err error) { + rr.mu.Lock() + defer rr.mu.Unlock() + for _, a := range rr.addrs { + if addr == a.addr { + a.connected = false + break + } + } +} + +// Get returns the next addr in the rotation. +func (rr *roundRobin) Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error) { + var ch chan struct{} + rr.mu.Lock() + if rr.done { + rr.mu.Unlock() + err = ErrClientConnClosing + return + } + + if len(rr.addrs) > 0 { + if rr.next >= len(rr.addrs) { + rr.next = 0 + } + next := rr.next + for { + a := rr.addrs[next] + next = (next + 1) % len(rr.addrs) + if a.connected { + addr = a.addr + rr.next = next + rr.mu.Unlock() + return + } + if next == rr.next { + // Has iterated all the possible address but none is connected. + break + } + } + } + if !opts.BlockingWait { + if len(rr.addrs) == 0 { + rr.mu.Unlock() + err = Errorf(codes.Unavailable, "there is no address available") + return + } + // Returns the next addr on rr.addrs for failfast RPCs. + addr = rr.addrs[rr.next].addr + rr.next++ + rr.mu.Unlock() + return + } + // Wait on rr.waitCh for non-failfast RPCs. + if rr.waitCh == nil { + ch = make(chan struct{}) + rr.waitCh = ch + } else { + ch = rr.waitCh + } + rr.mu.Unlock() + for { + select { + case <-ctx.Done(): + err = ctx.Err() + return + case <-ch: + rr.mu.Lock() + if rr.done { + rr.mu.Unlock() + err = ErrClientConnClosing + return + } + + if len(rr.addrs) > 0 { + if rr.next >= len(rr.addrs) { + rr.next = 0 + } + next := rr.next + for { + a := rr.addrs[next] + next = (next + 1) % len(rr.addrs) + if a.connected { + addr = a.addr + rr.next = next + rr.mu.Unlock() + return + } + if next == rr.next { + // Has iterated all the possible address but none is connected. + break + } + } + } + // The newly added addr got removed by Down() again. + if rr.waitCh == nil { + ch = make(chan struct{}) + rr.waitCh = ch + } else { + ch = rr.waitCh + } + rr.mu.Unlock() + } + } +} + +func (rr *roundRobin) Notify() <-chan []Address { + return rr.addrCh +} + +func (rr *roundRobin) Close() error { + rr.mu.Lock() + defer rr.mu.Unlock() + rr.done = true + if rr.w != nil { + rr.w.Close() + } + if rr.waitCh != nil { + close(rr.waitCh) + rr.waitCh = nil + } + if rr.addrCh != nil { + close(rr.addrCh) + } + return nil +} diff --git a/vendor/google.golang.org/grpc/balancer_test.go b/vendor/google.golang.org/grpc/balancer_test.go new file mode 100644 index 0000000..48f8b27 --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer_test.go @@ -0,0 +1,438 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "fmt" + "math" + "sync" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/naming" +) + +type testWatcher struct { + // the channel to receives name resolution updates + update chan *naming.Update + // the side channel to get to know how many updates in a batch + side chan int + // the channel to notifiy update injector that the update reading is done + readDone chan int +} + +func (w *testWatcher) Next() (updates []*naming.Update, err error) { + n := <-w.side + if n == 0 { + return nil, fmt.Errorf("w.side is closed") + } + for i := 0; i < n; i++ { + u := <-w.update + if u != nil { + updates = append(updates, u) + } + } + w.readDone <- 0 + return +} + +func (w *testWatcher) Close() { +} + +// Inject naming resolution updates to the testWatcher. +func (w *testWatcher) inject(updates []*naming.Update) { + w.side <- len(updates) + for _, u := range updates { + w.update <- u + } + <-w.readDone +} + +type testNameResolver struct { + w *testWatcher + addr string +} + +func (r *testNameResolver) Resolve(target string) (naming.Watcher, error) { + r.w = &testWatcher{ + update: make(chan *naming.Update, 1), + side: make(chan int, 1), + readDone: make(chan int), + } + r.w.side <- 1 + r.w.update <- &naming.Update{ + Op: naming.Add, + Addr: r.addr, + } + go func() { + <-r.w.readDone + }() + return r.w, nil +} + +func startServers(t *testing.T, numServers int, maxStreams uint32) ([]*server, *testNameResolver) { + var servers []*server + for i := 0; i < numServers; i++ { + s := newTestServer() + servers = append(servers, s) + go s.start(t, 0, maxStreams) + s.wait(t, 2*time.Second) + } + // Point to server[0] + addr := "127.0.0.1:" + servers[0].port + return servers, &testNameResolver{ + addr: addr, + } +} + +func TestNameDiscovery(t *testing.T) { + // Start 2 servers on 2 ports. + numServers := 2 + servers, r := startServers(t, numServers, math.MaxUint32) + cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + req := "port" + var reply string + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || ErrorDesc(err) != servers[0].port { + t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want %s", err, servers[0].port) + } + // Inject the name resolution change to remove servers[0] and add servers[1]. + var updates []*naming.Update + updates = append(updates, &naming.Update{ + Op: naming.Delete, + Addr: "127.0.0.1:" + servers[0].port, + }) + updates = append(updates, &naming.Update{ + Op: naming.Add, + Addr: "127.0.0.1:" + servers[1].port, + }) + r.w.inject(updates) + // Loop until the rpcs in flight talks to servers[1]. + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[1].port { + break + } + time.Sleep(10 * time.Millisecond) + } + cc.Close() + for i := 0; i < numServers; i++ { + servers[i].stop() + } +} + +func TestEmptyAddrs(t *testing.T) { + servers, r := startServers(t, 1, math.MaxUint32) + cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + var reply string + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc); err != nil || reply != expectedResponse { + t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, reply = %q, want %q, <nil>", err, reply, expectedResponse) + } + // Inject name resolution change to remove the server so that there is no address + // available after that. + u := &naming.Update{ + Op: naming.Delete, + Addr: "127.0.0.1:" + servers[0].port, + } + r.w.inject([]*naming.Update{u}) + // Loop until the above updates apply. + for { + time.Sleep(10 * time.Millisecond) + ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc); err != nil { + break + } + } + cc.Close() + servers[0].stop() +} + +func TestRoundRobin(t *testing.T) { + // Start 3 servers on 3 ports. + numServers := 3 + servers, r := startServers(t, numServers, math.MaxUint32) + cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + // Add servers[1] to the service discovery. + u := &naming.Update{ + Op: naming.Add, + Addr: "127.0.0.1:" + servers[1].port, + } + r.w.inject([]*naming.Update{u}) + req := "port" + var reply string + // Loop until servers[1] is up + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[1].port { + break + } + time.Sleep(10 * time.Millisecond) + } + // Add server2[2] to the service discovery. + u = &naming.Update{ + Op: naming.Add, + Addr: "127.0.0.1:" + servers[2].port, + } + r.w.inject([]*naming.Update{u}) + // Loop until both servers[2] are up. + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[2].port { + break + } + time.Sleep(10 * time.Millisecond) + } + // Check the incoming RPCs served in a round-robin manner. + for i := 0; i < 10; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || ErrorDesc(err) != servers[i%numServers].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", i, err, servers[i%numServers].port) + } + } + cc.Close() + for i := 0; i < numServers; i++ { + servers[i].stop() + } +} + +func TestCloseWithPendingRPC(t *testing.T) { + servers, r := startServers(t, 1, math.MaxUint32) + cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + var reply string + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err != nil { + t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want %s", err, servers[0].port) + } + // Remove the server. + updates := []*naming.Update{{ + Op: naming.Delete, + Addr: "127.0.0.1:" + servers[0].port, + }} + r.w.inject(updates) + // Loop until the above update applies. + for { + ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); Code(err) == codes.DeadlineExceeded { + break + } + time.Sleep(10 * time.Millisecond) + } + // Issue 2 RPCs which should be completed with error status once cc is closed. + var wg sync.WaitGroup + wg.Add(2) + go func() { + defer wg.Done() + var reply string + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err == nil { + t.Errorf("grpc.Invoke(_, _, _, _, _) = %v, want not nil", err) + } + }() + go func() { + defer wg.Done() + var reply string + time.Sleep(5 * time.Millisecond) + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err == nil { + t.Errorf("grpc.Invoke(_, _, _, _, _) = %v, want not nil", err) + } + }() + time.Sleep(5 * time.Millisecond) + cc.Close() + wg.Wait() + servers[0].stop() +} + +func TestGetOnWaitChannel(t *testing.T) { + servers, r := startServers(t, 1, math.MaxUint32) + cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + // Remove all servers so that all upcoming RPCs will block on waitCh. + updates := []*naming.Update{{ + Op: naming.Delete, + Addr: "127.0.0.1:" + servers[0].port, + }} + r.w.inject(updates) + for { + var reply string + ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); Code(err) == codes.DeadlineExceeded { + break + } + time.Sleep(10 * time.Millisecond) + } + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + var reply string + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err != nil { + t.Errorf("grpc.Invoke(_, _, _, _, _) = %v, want <nil>", err) + } + }() + // Add a connected server to get the above RPC through. + updates = []*naming.Update{{ + Op: naming.Add, + Addr: "127.0.0.1:" + servers[0].port, + }} + r.w.inject(updates) + // Wait until the above RPC succeeds. + wg.Wait() + cc.Close() + servers[0].stop() +} + +func TestOneServerDown(t *testing.T) { + // Start 2 servers. + numServers := 2 + servers, r := startServers(t, numServers, math.MaxUint32) + cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + // Add servers[1] to the service discovery. + var updates []*naming.Update + updates = append(updates, &naming.Update{ + Op: naming.Add, + Addr: "127.0.0.1:" + servers[1].port, + }) + r.w.inject(updates) + req := "port" + var reply string + // Loop until servers[1] is up + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[1].port { + break + } + time.Sleep(10 * time.Millisecond) + } + + var wg sync.WaitGroup + numRPC := 100 + sleepDuration := 10 * time.Millisecond + wg.Add(1) + go func() { + time.Sleep(sleepDuration) + // After sleepDuration, kill server[0]. + servers[0].stop() + wg.Done() + }() + + // All non-failfast RPCs should not block because there's at least one connection available. + for i := 0; i < numRPC; i++ { + wg.Add(1) + go func() { + time.Sleep(sleepDuration) + // After sleepDuration, invoke RPC. + // server[0] is killed around the same time to make it racy between balancer and gRPC internals. + Invoke(context.Background(), "/foo/bar", &req, &reply, cc, FailFast(false)) + wg.Done() + }() + } + wg.Wait() + cc.Close() + for i := 0; i < numServers; i++ { + servers[i].stop() + } +} + +func TestOneAddressRemoval(t *testing.T) { + // Start 2 servers. + numServers := 2 + servers, r := startServers(t, numServers, math.MaxUint32) + cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + // Add servers[1] to the service discovery. + var updates []*naming.Update + updates = append(updates, &naming.Update{ + Op: naming.Add, + Addr: "127.0.0.1:" + servers[1].port, + }) + r.w.inject(updates) + req := "port" + var reply string + // Loop until servers[1] is up + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[1].port { + break + } + time.Sleep(10 * time.Millisecond) + } + + var wg sync.WaitGroup + numRPC := 100 + sleepDuration := 10 * time.Millisecond + wg.Add(1) + go func() { + time.Sleep(sleepDuration) + // After sleepDuration, delete server[0]. + var updates []*naming.Update + updates = append(updates, &naming.Update{ + Op: naming.Delete, + Addr: "127.0.0.1:" + servers[0].port, + }) + r.w.inject(updates) + wg.Done() + }() + + // All non-failfast RPCs should not fail because there's at least one connection available. + for i := 0; i < numRPC; i++ { + wg.Add(1) + go func() { + var reply string + time.Sleep(sleepDuration) + // After sleepDuration, invoke RPC. + // server[0] is removed around the same time to make it racy between balancer and gRPC internals. + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err != nil { + t.Errorf("grpc.Invoke(_, _, _, _, _) = %v, want not nil", err) + } + wg.Done() + }() + } + wg.Wait() + cc.Close() + for i := 0; i < numServers; i++ { + servers[i].stop() + } +} diff --git a/vendor/google.golang.org/grpc/benchmark/benchmark.go b/vendor/google.golang.org/grpc/benchmark/benchmark.go new file mode 100644 index 0000000..fc3304a --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/benchmark.go @@ -0,0 +1,234 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* +Package benchmark implements the building blocks to setup end-to-end gRPC benchmarks. +*/ +package benchmark + +import ( + "fmt" + "io" + "net" + + "golang.org/x/net/context" + "google.golang.org/grpc" + testpb "google.golang.org/grpc/benchmark/grpc_testing" + "google.golang.org/grpc/grpclog" +) + +// Allows reuse of the same testpb.Payload object. +func setPayload(p *testpb.Payload, t testpb.PayloadType, size int) { + if size < 0 { + grpclog.Fatalf("Requested a response with invalid length %d", size) + } + body := make([]byte, size) + switch t { + case testpb.PayloadType_COMPRESSABLE: + case testpb.PayloadType_UNCOMPRESSABLE: + grpclog.Fatalf("PayloadType UNCOMPRESSABLE is not supported") + default: + grpclog.Fatalf("Unsupported payload type: %d", t) + } + p.Type = t + p.Body = body + return +} + +func newPayload(t testpb.PayloadType, size int) *testpb.Payload { + p := new(testpb.Payload) + setPayload(p, t, size) + return p +} + +type testServer struct { +} + +func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + return &testpb.SimpleResponse{ + Payload: newPayload(in.ResponseType, int(in.ResponseSize)), + }, nil +} + +func (s *testServer) StreamingCall(stream testpb.BenchmarkService_StreamingCallServer) error { + response := &testpb.SimpleResponse{ + Payload: new(testpb.Payload), + } + in := new(testpb.SimpleRequest) + for { + // use ServerStream directly to reuse the same testpb.SimpleRequest object + err := stream.(grpc.ServerStream).RecvMsg(in) + if err == io.EOF { + // read done. + return nil + } + if err != nil { + return err + } + setPayload(response.Payload, in.ResponseType, int(in.ResponseSize)) + if err := stream.Send(response); err != nil { + return err + } + } +} + +// byteBufServer is a gRPC server that sends and receives byte buffer. +// The purpose is to benchmark the gRPC performance without protobuf serialization/deserialization overhead. +type byteBufServer struct { + respSize int32 +} + +// UnaryCall is an empty function and is not used for benchmark. +// If bytebuf UnaryCall benchmark is needed later, the function body needs to be updated. +func (s *byteBufServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + return &testpb.SimpleResponse{}, nil +} + +func (s *byteBufServer) StreamingCall(stream testpb.BenchmarkService_StreamingCallServer) error { + for { + var in []byte + err := stream.(grpc.ServerStream).RecvMsg(&in) + if err == io.EOF { + return nil + } + if err != nil { + return err + } + out := make([]byte, s.respSize) + if err := stream.(grpc.ServerStream).SendMsg(&out); err != nil { + return err + } + } +} + +// ServerInfo contains the information to create a gRPC benchmark server. +type ServerInfo struct { + // Addr is the address of the server. + Addr string + + // Type is the type of the server. + // It should be "protobuf" or "bytebuf". + Type string + + // Metadata is an optional configuration. + // For "protobuf", it's ignored. + // For "bytebuf", it should be an int representing response size. + Metadata interface{} +} + +// StartServer starts a gRPC server serving a benchmark service according to info. +// It returns its listen address and a function to stop the server. +func StartServer(info ServerInfo, opts ...grpc.ServerOption) (string, func()) { + lis, err := net.Listen("tcp", info.Addr) + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + s := grpc.NewServer(opts...) + switch info.Type { + case "protobuf": + testpb.RegisterBenchmarkServiceServer(s, &testServer{}) + case "bytebuf": + respSize, ok := info.Metadata.(int32) + if !ok { + grpclog.Fatalf("failed to StartServer, invalid metadata: %v, for Type: %v", info.Metadata, info.Type) + } + testpb.RegisterBenchmarkServiceServer(s, &byteBufServer{respSize: respSize}) + default: + grpclog.Fatalf("failed to StartServer, unknown Type: %v", info.Type) + } + go s.Serve(lis) + return lis.Addr().String(), func() { + s.Stop() + } +} + +// DoUnaryCall performs an unary RPC with given stub and request and response sizes. +func DoUnaryCall(tc testpb.BenchmarkServiceClient, reqSize, respSize int) error { + pl := newPayload(testpb.PayloadType_COMPRESSABLE, reqSize) + req := &testpb.SimpleRequest{ + ResponseType: pl.Type, + ResponseSize: int32(respSize), + Payload: pl, + } + if _, err := tc.UnaryCall(context.Background(), req); err != nil { + return fmt.Errorf("/BenchmarkService/UnaryCall(_, _) = _, %v, want _, <nil>", err) + } + return nil +} + +// DoStreamingRoundTrip performs a round trip for a single streaming rpc. +func DoStreamingRoundTrip(stream testpb.BenchmarkService_StreamingCallClient, reqSize, respSize int) error { + pl := newPayload(testpb.PayloadType_COMPRESSABLE, reqSize) + req := &testpb.SimpleRequest{ + ResponseType: pl.Type, + ResponseSize: int32(respSize), + Payload: pl, + } + if err := stream.Send(req); err != nil { + return fmt.Errorf("/BenchmarkService/StreamingCall.Send(_) = %v, want <nil>", err) + } + if _, err := stream.Recv(); err != nil { + // EOF is a valid error here. + if err == io.EOF { + return nil + } + return fmt.Errorf("/BenchmarkService/StreamingCall.Recv(_) = %v, want <nil>", err) + } + return nil +} + +// DoByteBufStreamingRoundTrip performs a round trip for a single streaming rpc, using a custom codec for byte buffer. +func DoByteBufStreamingRoundTrip(stream testpb.BenchmarkService_StreamingCallClient, reqSize, respSize int) error { + out := make([]byte, reqSize) + if err := stream.(grpc.ClientStream).SendMsg(&out); err != nil { + return fmt.Errorf("/BenchmarkService/StreamingCall.(ClientStream).SendMsg(_) = %v, want <nil>", err) + } + var in []byte + if err := stream.(grpc.ClientStream).RecvMsg(&in); err != nil { + // EOF is a valid error here. + if err == io.EOF { + return nil + } + return fmt.Errorf("/BenchmarkService/StreamingCall.(ClientStream).RecvMsg(_) = %v, want <nil>", err) + } + return nil +} + +// NewClientConn creates a gRPC client connection to addr. +func NewClientConn(addr string, opts ...grpc.DialOption) *grpc.ClientConn { + conn, err := grpc.Dial(addr, opts...) + if err != nil { + grpclog.Fatalf("NewClientConn(%q) failed to create a ClientConn %v", addr, err) + } + return conn +} diff --git a/vendor/google.golang.org/grpc/benchmark/benchmark_test.go b/vendor/google.golang.org/grpc/benchmark/benchmark_test.go new file mode 100644 index 0000000..8fe3fa1 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/benchmark_test.go @@ -0,0 +1,202 @@ +package benchmark + +import ( + "os" + "sync" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + testpb "google.golang.org/grpc/benchmark/grpc_testing" + "google.golang.org/grpc/benchmark/stats" + "google.golang.org/grpc/grpclog" +) + +func runUnary(b *testing.B, maxConcurrentCalls int) { + s := stats.AddStats(b, 38) + b.StopTimer() + target, stopper := StartServer(ServerInfo{Addr: "localhost:0", Type: "protobuf"}) + defer stopper() + conn := NewClientConn(target, grpc.WithInsecure()) + tc := testpb.NewBenchmarkServiceClient(conn) + + // Warm up connection. + for i := 0; i < 10; i++ { + unaryCaller(tc) + } + ch := make(chan int, maxConcurrentCalls*4) + var ( + mu sync.Mutex + wg sync.WaitGroup + ) + wg.Add(maxConcurrentCalls) + + // Distribute the b.N calls over maxConcurrentCalls workers. + for i := 0; i < maxConcurrentCalls; i++ { + go func() { + for range ch { + start := time.Now() + unaryCaller(tc) + elapse := time.Since(start) + mu.Lock() + s.Add(elapse) + mu.Unlock() + } + wg.Done() + }() + } + b.StartTimer() + for i := 0; i < b.N; i++ { + ch <- i + } + b.StopTimer() + close(ch) + wg.Wait() + conn.Close() +} + +func runStream(b *testing.B, maxConcurrentCalls int) { + s := stats.AddStats(b, 38) + b.StopTimer() + target, stopper := StartServer(ServerInfo{Addr: "localhost:0", Type: "protobuf"}) + defer stopper() + conn := NewClientConn(target, grpc.WithInsecure()) + tc := testpb.NewBenchmarkServiceClient(conn) + + // Warm up connection. + stream, err := tc.StreamingCall(context.Background()) + if err != nil { + b.Fatalf("%v.StreamingCall(_) = _, %v", tc, err) + } + for i := 0; i < 10; i++ { + streamCaller(stream) + } + + ch := make(chan int, maxConcurrentCalls*4) + var ( + mu sync.Mutex + wg sync.WaitGroup + ) + wg.Add(maxConcurrentCalls) + + // Distribute the b.N calls over maxConcurrentCalls workers. + for i := 0; i < maxConcurrentCalls; i++ { + go func() { + stream, err := tc.StreamingCall(context.Background()) + if err != nil { + b.Fatalf("%v.StreamingCall(_) = _, %v", tc, err) + } + for range ch { + start := time.Now() + streamCaller(stream) + elapse := time.Since(start) + mu.Lock() + s.Add(elapse) + mu.Unlock() + } + wg.Done() + }() + } + b.StartTimer() + for i := 0; i < b.N; i++ { + ch <- i + } + b.StopTimer() + close(ch) + wg.Wait() + conn.Close() +} +func unaryCaller(client testpb.BenchmarkServiceClient) { + if err := DoUnaryCall(client, 1, 1); err != nil { + grpclog.Fatalf("DoUnaryCall failed: %v", err) + } +} + +func streamCaller(stream testpb.BenchmarkService_StreamingCallClient) { + if err := DoStreamingRoundTrip(stream, 1, 1); err != nil { + grpclog.Fatalf("DoStreamingRoundTrip failed: %v", err) + } +} + +func BenchmarkClientStreamc1(b *testing.B) { + grpc.EnableTracing = true + runStream(b, 1) +} + +func BenchmarkClientStreamc8(b *testing.B) { + grpc.EnableTracing = true + runStream(b, 8) +} + +func BenchmarkClientStreamc64(b *testing.B) { + grpc.EnableTracing = true + runStream(b, 64) +} + +func BenchmarkClientStreamc512(b *testing.B) { + grpc.EnableTracing = true + runStream(b, 512) +} +func BenchmarkClientUnaryc1(b *testing.B) { + grpc.EnableTracing = true + runUnary(b, 1) +} + +func BenchmarkClientUnaryc8(b *testing.B) { + grpc.EnableTracing = true + runUnary(b, 8) +} + +func BenchmarkClientUnaryc64(b *testing.B) { + grpc.EnableTracing = true + runUnary(b, 64) +} + +func BenchmarkClientUnaryc512(b *testing.B) { + grpc.EnableTracing = true + runUnary(b, 512) +} + +func BenchmarkClientStreamNoTracec1(b *testing.B) { + grpc.EnableTracing = false + runStream(b, 1) +} + +func BenchmarkClientStreamNoTracec8(b *testing.B) { + grpc.EnableTracing = false + runStream(b, 8) +} + +func BenchmarkClientStreamNoTracec64(b *testing.B) { + grpc.EnableTracing = false + runStream(b, 64) +} + +func BenchmarkClientStreamNoTracec512(b *testing.B) { + grpc.EnableTracing = false + runStream(b, 512) +} +func BenchmarkClientUnaryNoTracec1(b *testing.B) { + grpc.EnableTracing = false + runUnary(b, 1) +} + +func BenchmarkClientUnaryNoTracec8(b *testing.B) { + grpc.EnableTracing = false + runUnary(b, 8) +} + +func BenchmarkClientUnaryNoTracec64(b *testing.B) { + grpc.EnableTracing = false + runUnary(b, 64) +} + +func BenchmarkClientUnaryNoTracec512(b *testing.B) { + grpc.EnableTracing = false + runUnary(b, 512) +} + +func TestMain(m *testing.M) { + os.Exit(stats.RunTestMain(m)) +} diff --git a/vendor/google.golang.org/grpc/benchmark/client/main.go b/vendor/google.golang.org/grpc/benchmark/client/main.go new file mode 100644 index 0000000..c63d521 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/client/main.go @@ -0,0 +1,162 @@ +package main + +import ( + "flag" + "math" + "net" + "net/http" + _ "net/http/pprof" + "sync" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/benchmark" + testpb "google.golang.org/grpc/benchmark/grpc_testing" + "google.golang.org/grpc/benchmark/stats" + "google.golang.org/grpc/grpclog" +) + +var ( + server = flag.String("server", "", "The server address") + maxConcurrentRPCs = flag.Int("max_concurrent_rpcs", 1, "The max number of concurrent RPCs") + duration = flag.Int("duration", math.MaxInt32, "The duration in seconds to run the benchmark client") + trace = flag.Bool("trace", true, "Whether tracing is on") + rpcType = flag.Int("rpc_type", 0, + `Configure different client rpc type. Valid options are: + 0 : unary call; + 1 : streaming call.`) +) + +func unaryCaller(client testpb.BenchmarkServiceClient) { + benchmark.DoUnaryCall(client, 1, 1) +} + +func streamCaller(stream testpb.BenchmarkService_StreamingCallClient) { + benchmark.DoStreamingRoundTrip(stream, 1, 1) +} + +func buildConnection() (s *stats.Stats, conn *grpc.ClientConn, tc testpb.BenchmarkServiceClient) { + s = stats.NewStats(256) + conn = benchmark.NewClientConn(*server) + tc = testpb.NewBenchmarkServiceClient(conn) + return s, conn, tc +} + +func closeLoopUnary() { + s, conn, tc := buildConnection() + + for i := 0; i < 100; i++ { + unaryCaller(tc) + } + ch := make(chan int, *maxConcurrentRPCs*4) + var ( + mu sync.Mutex + wg sync.WaitGroup + ) + wg.Add(*maxConcurrentRPCs) + + for i := 0; i < *maxConcurrentRPCs; i++ { + go func() { + for range ch { + start := time.Now() + unaryCaller(tc) + elapse := time.Since(start) + mu.Lock() + s.Add(elapse) + mu.Unlock() + } + wg.Done() + }() + } + // Stop the client when time is up. + done := make(chan struct{}) + go func() { + <-time.After(time.Duration(*duration) * time.Second) + close(done) + }() + ok := true + for ok { + select { + case ch <- 0: + case <-done: + ok = false + } + } + close(ch) + wg.Wait() + conn.Close() + grpclog.Println(s.String()) + +} + +func closeLoopStream() { + s, conn, tc := buildConnection() + ch := make(chan int, *maxConcurrentRPCs*4) + var ( + mu sync.Mutex + wg sync.WaitGroup + ) + wg.Add(*maxConcurrentRPCs) + // Distribute RPCs over maxConcurrentCalls workers. + for i := 0; i < *maxConcurrentRPCs; i++ { + go func() { + stream, err := tc.StreamingCall(context.Background()) + if err != nil { + grpclog.Fatalf("%v.StreamingCall(_) = _, %v", tc, err) + } + // Do some warm up. + for i := 0; i < 100; i++ { + streamCaller(stream) + } + for range ch { + start := time.Now() + streamCaller(stream) + elapse := time.Since(start) + mu.Lock() + s.Add(elapse) + mu.Unlock() + } + wg.Done() + }() + } + // Stop the client when time is up. + done := make(chan struct{}) + go func() { + <-time.After(time.Duration(*duration) * time.Second) + close(done) + }() + ok := true + for ok { + select { + case ch <- 0: + case <-done: + ok = false + } + } + close(ch) + wg.Wait() + conn.Close() + grpclog.Println(s.String()) +} + +func main() { + flag.Parse() + grpc.EnableTracing = *trace + go func() { + lis, err := net.Listen("tcp", ":0") + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + grpclog.Println("Client profiling address: ", lis.Addr().String()) + if err := http.Serve(lis, nil); err != nil { + grpclog.Fatalf("Failed to serve: %v", err) + } + }() + switch *rpcType { + case 0: + closeLoopUnary() + case 1: + closeLoopStream() + } +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.pb.go new file mode 100644 index 0000000..8afae81 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.pb.go @@ -0,0 +1,977 @@ +// Code generated by protoc-gen-go. +// source: control.proto +// DO NOT EDIT! + +/* +Package grpc_testing is a generated protocol buffer package. + +It is generated from these files: + control.proto + messages.proto + payloads.proto + services.proto + stats.proto + +It has these top-level messages: + PoissonParams + UniformParams + DeterministicParams + ParetoParams + ClosedLoopParams + LoadParams + SecurityParams + ClientConfig + ClientStatus + Mark + ClientArgs + ServerConfig + ServerArgs + ServerStatus + CoreRequest + CoreResponse + Void + Scenario + Scenarios + Payload + EchoStatus + SimpleRequest + SimpleResponse + StreamingInputCallRequest + StreamingInputCallResponse + ResponseParameters + StreamingOutputCallRequest + StreamingOutputCallResponse + ReconnectParams + ReconnectInfo + ByteBufferParams + SimpleProtoParams + ComplexProtoParams + PayloadConfig + ServerStats + HistogramParams + HistogramData + ClientStats +*/ +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type ClientType int32 + +const ( + ClientType_SYNC_CLIENT ClientType = 0 + ClientType_ASYNC_CLIENT ClientType = 1 +) + +var ClientType_name = map[int32]string{ + 0: "SYNC_CLIENT", + 1: "ASYNC_CLIENT", +} +var ClientType_value = map[string]int32{ + "SYNC_CLIENT": 0, + "ASYNC_CLIENT": 1, +} + +func (x ClientType) String() string { + return proto.EnumName(ClientType_name, int32(x)) +} +func (ClientType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type ServerType int32 + +const ( + ServerType_SYNC_SERVER ServerType = 0 + ServerType_ASYNC_SERVER ServerType = 1 + ServerType_ASYNC_GENERIC_SERVER ServerType = 2 +) + +var ServerType_name = map[int32]string{ + 0: "SYNC_SERVER", + 1: "ASYNC_SERVER", + 2: "ASYNC_GENERIC_SERVER", +} +var ServerType_value = map[string]int32{ + "SYNC_SERVER": 0, + "ASYNC_SERVER": 1, + "ASYNC_GENERIC_SERVER": 2, +} + +func (x ServerType) String() string { + return proto.EnumName(ServerType_name, int32(x)) +} +func (ServerType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type RpcType int32 + +const ( + RpcType_UNARY RpcType = 0 + RpcType_STREAMING RpcType = 1 +) + +var RpcType_name = map[int32]string{ + 0: "UNARY", + 1: "STREAMING", +} +var RpcType_value = map[string]int32{ + "UNARY": 0, + "STREAMING": 1, +} + +func (x RpcType) String() string { + return proto.EnumName(RpcType_name, int32(x)) +} +func (RpcType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// Parameters of poisson process distribution, which is a good representation +// of activity coming in from independent identical stationary sources. +type PoissonParams struct { + // The rate of arrivals (a.k.a. lambda parameter of the exp distribution). + OfferedLoad float64 `protobuf:"fixed64,1,opt,name=offered_load,json=offeredLoad" json:"offered_load,omitempty"` +} + +func (m *PoissonParams) Reset() { *m = PoissonParams{} } +func (m *PoissonParams) String() string { return proto.CompactTextString(m) } +func (*PoissonParams) ProtoMessage() {} +func (*PoissonParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type UniformParams struct { + InterarrivalLo float64 `protobuf:"fixed64,1,opt,name=interarrival_lo,json=interarrivalLo" json:"interarrival_lo,omitempty"` + InterarrivalHi float64 `protobuf:"fixed64,2,opt,name=interarrival_hi,json=interarrivalHi" json:"interarrival_hi,omitempty"` +} + +func (m *UniformParams) Reset() { *m = UniformParams{} } +func (m *UniformParams) String() string { return proto.CompactTextString(m) } +func (*UniformParams) ProtoMessage() {} +func (*UniformParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type DeterministicParams struct { + OfferedLoad float64 `protobuf:"fixed64,1,opt,name=offered_load,json=offeredLoad" json:"offered_load,omitempty"` +} + +func (m *DeterministicParams) Reset() { *m = DeterministicParams{} } +func (m *DeterministicParams) String() string { return proto.CompactTextString(m) } +func (*DeterministicParams) ProtoMessage() {} +func (*DeterministicParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type ParetoParams struct { + InterarrivalBase float64 `protobuf:"fixed64,1,opt,name=interarrival_base,json=interarrivalBase" json:"interarrival_base,omitempty"` + Alpha float64 `protobuf:"fixed64,2,opt,name=alpha" json:"alpha,omitempty"` +} + +func (m *ParetoParams) Reset() { *m = ParetoParams{} } +func (m *ParetoParams) String() string { return proto.CompactTextString(m) } +func (*ParetoParams) ProtoMessage() {} +func (*ParetoParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +// Once an RPC finishes, immediately start a new one. +// No configuration parameters needed. +type ClosedLoopParams struct { +} + +func (m *ClosedLoopParams) Reset() { *m = ClosedLoopParams{} } +func (m *ClosedLoopParams) String() string { return proto.CompactTextString(m) } +func (*ClosedLoopParams) ProtoMessage() {} +func (*ClosedLoopParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +type LoadParams struct { + // Types that are valid to be assigned to Load: + // *LoadParams_ClosedLoop + // *LoadParams_Poisson + // *LoadParams_Uniform + // *LoadParams_Determ + // *LoadParams_Pareto + Load isLoadParams_Load `protobuf_oneof:"load"` +} + +func (m *LoadParams) Reset() { *m = LoadParams{} } +func (m *LoadParams) String() string { return proto.CompactTextString(m) } +func (*LoadParams) ProtoMessage() {} +func (*LoadParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +type isLoadParams_Load interface { + isLoadParams_Load() +} + +type LoadParams_ClosedLoop struct { + ClosedLoop *ClosedLoopParams `protobuf:"bytes,1,opt,name=closed_loop,json=closedLoop,oneof"` +} +type LoadParams_Poisson struct { + Poisson *PoissonParams `protobuf:"bytes,2,opt,name=poisson,oneof"` +} +type LoadParams_Uniform struct { + Uniform *UniformParams `protobuf:"bytes,3,opt,name=uniform,oneof"` +} +type LoadParams_Determ struct { + Determ *DeterministicParams `protobuf:"bytes,4,opt,name=determ,oneof"` +} +type LoadParams_Pareto struct { + Pareto *ParetoParams `protobuf:"bytes,5,opt,name=pareto,oneof"` +} + +func (*LoadParams_ClosedLoop) isLoadParams_Load() {} +func (*LoadParams_Poisson) isLoadParams_Load() {} +func (*LoadParams_Uniform) isLoadParams_Load() {} +func (*LoadParams_Determ) isLoadParams_Load() {} +func (*LoadParams_Pareto) isLoadParams_Load() {} + +func (m *LoadParams) GetLoad() isLoadParams_Load { + if m != nil { + return m.Load + } + return nil +} + +func (m *LoadParams) GetClosedLoop() *ClosedLoopParams { + if x, ok := m.GetLoad().(*LoadParams_ClosedLoop); ok { + return x.ClosedLoop + } + return nil +} + +func (m *LoadParams) GetPoisson() *PoissonParams { + if x, ok := m.GetLoad().(*LoadParams_Poisson); ok { + return x.Poisson + } + return nil +} + +func (m *LoadParams) GetUniform() *UniformParams { + if x, ok := m.GetLoad().(*LoadParams_Uniform); ok { + return x.Uniform + } + return nil +} + +func (m *LoadParams) GetDeterm() *DeterministicParams { + if x, ok := m.GetLoad().(*LoadParams_Determ); ok { + return x.Determ + } + return nil +} + +func (m *LoadParams) GetPareto() *ParetoParams { + if x, ok := m.GetLoad().(*LoadParams_Pareto); ok { + return x.Pareto + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LoadParams) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LoadParams_OneofMarshaler, _LoadParams_OneofUnmarshaler, _LoadParams_OneofSizer, []interface{}{ + (*LoadParams_ClosedLoop)(nil), + (*LoadParams_Poisson)(nil), + (*LoadParams_Uniform)(nil), + (*LoadParams_Determ)(nil), + (*LoadParams_Pareto)(nil), + } +} + +func _LoadParams_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LoadParams) + // load + switch x := m.Load.(type) { + case *LoadParams_ClosedLoop: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ClosedLoop); err != nil { + return err + } + case *LoadParams_Poisson: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Poisson); err != nil { + return err + } + case *LoadParams_Uniform: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Uniform); err != nil { + return err + } + case *LoadParams_Determ: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Determ); err != nil { + return err + } + case *LoadParams_Pareto: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Pareto); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("LoadParams.Load has unexpected type %T", x) + } + return nil +} + +func _LoadParams_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LoadParams) + switch tag { + case 1: // load.closed_loop + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ClosedLoopParams) + err := b.DecodeMessage(msg) + m.Load = &LoadParams_ClosedLoop{msg} + return true, err + case 2: // load.poisson + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PoissonParams) + err := b.DecodeMessage(msg) + m.Load = &LoadParams_Poisson{msg} + return true, err + case 3: // load.uniform + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UniformParams) + err := b.DecodeMessage(msg) + m.Load = &LoadParams_Uniform{msg} + return true, err + case 4: // load.determ + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DeterministicParams) + err := b.DecodeMessage(msg) + m.Load = &LoadParams_Determ{msg} + return true, err + case 5: // load.pareto + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ParetoParams) + err := b.DecodeMessage(msg) + m.Load = &LoadParams_Pareto{msg} + return true, err + default: + return false, nil + } +} + +func _LoadParams_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LoadParams) + // load + switch x := m.Load.(type) { + case *LoadParams_ClosedLoop: + s := proto.Size(x.ClosedLoop) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LoadParams_Poisson: + s := proto.Size(x.Poisson) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LoadParams_Uniform: + s := proto.Size(x.Uniform) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LoadParams_Determ: + s := proto.Size(x.Determ) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LoadParams_Pareto: + s := proto.Size(x.Pareto) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// presence of SecurityParams implies use of TLS +type SecurityParams struct { + UseTestCa bool `protobuf:"varint,1,opt,name=use_test_ca,json=useTestCa" json:"use_test_ca,omitempty"` + ServerHostOverride string `protobuf:"bytes,2,opt,name=server_host_override,json=serverHostOverride" json:"server_host_override,omitempty"` +} + +func (m *SecurityParams) Reset() { *m = SecurityParams{} } +func (m *SecurityParams) String() string { return proto.CompactTextString(m) } +func (*SecurityParams) ProtoMessage() {} +func (*SecurityParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +type ClientConfig struct { + // List of targets to connect to. At least one target needs to be specified. + ServerTargets []string `protobuf:"bytes,1,rep,name=server_targets,json=serverTargets" json:"server_targets,omitempty"` + ClientType ClientType `protobuf:"varint,2,opt,name=client_type,json=clientType,enum=grpc.testing.ClientType" json:"client_type,omitempty"` + SecurityParams *SecurityParams `protobuf:"bytes,3,opt,name=security_params,json=securityParams" json:"security_params,omitempty"` + // How many concurrent RPCs to start for each channel. + // For synchronous client, use a separate thread for each outstanding RPC. + OutstandingRpcsPerChannel int32 `protobuf:"varint,4,opt,name=outstanding_rpcs_per_channel,json=outstandingRpcsPerChannel" json:"outstanding_rpcs_per_channel,omitempty"` + // Number of independent client channels to create. + // i-th channel will connect to server_target[i % server_targets.size()] + ClientChannels int32 `protobuf:"varint,5,opt,name=client_channels,json=clientChannels" json:"client_channels,omitempty"` + // Only for async client. Number of threads to use to start/manage RPCs. + AsyncClientThreads int32 `protobuf:"varint,7,opt,name=async_client_threads,json=asyncClientThreads" json:"async_client_threads,omitempty"` + RpcType RpcType `protobuf:"varint,8,opt,name=rpc_type,json=rpcType,enum=grpc.testing.RpcType" json:"rpc_type,omitempty"` + // The requested load for the entire client (aggregated over all the threads). + LoadParams *LoadParams `protobuf:"bytes,10,opt,name=load_params,json=loadParams" json:"load_params,omitempty"` + PayloadConfig *PayloadConfig `protobuf:"bytes,11,opt,name=payload_config,json=payloadConfig" json:"payload_config,omitempty"` + HistogramParams *HistogramParams `protobuf:"bytes,12,opt,name=histogram_params,json=histogramParams" json:"histogram_params,omitempty"` + // Specify the cores we should run the client on, if desired + CoreList []int32 `protobuf:"varint,13,rep,name=core_list,json=coreList" json:"core_list,omitempty"` + CoreLimit int32 `protobuf:"varint,14,opt,name=core_limit,json=coreLimit" json:"core_limit,omitempty"` +} + +func (m *ClientConfig) Reset() { *m = ClientConfig{} } +func (m *ClientConfig) String() string { return proto.CompactTextString(m) } +func (*ClientConfig) ProtoMessage() {} +func (*ClientConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ClientConfig) GetSecurityParams() *SecurityParams { + if m != nil { + return m.SecurityParams + } + return nil +} + +func (m *ClientConfig) GetLoadParams() *LoadParams { + if m != nil { + return m.LoadParams + } + return nil +} + +func (m *ClientConfig) GetPayloadConfig() *PayloadConfig { + if m != nil { + return m.PayloadConfig + } + return nil +} + +func (m *ClientConfig) GetHistogramParams() *HistogramParams { + if m != nil { + return m.HistogramParams + } + return nil +} + +type ClientStatus struct { + Stats *ClientStats `protobuf:"bytes,1,opt,name=stats" json:"stats,omitempty"` +} + +func (m *ClientStatus) Reset() { *m = ClientStatus{} } +func (m *ClientStatus) String() string { return proto.CompactTextString(m) } +func (*ClientStatus) ProtoMessage() {} +func (*ClientStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ClientStatus) GetStats() *ClientStats { + if m != nil { + return m.Stats + } + return nil +} + +// Request current stats +type Mark struct { + // if true, the stats will be reset after taking their snapshot. + Reset_ bool `protobuf:"varint,1,opt,name=reset" json:"reset,omitempty"` +} + +func (m *Mark) Reset() { *m = Mark{} } +func (m *Mark) String() string { return proto.CompactTextString(m) } +func (*Mark) ProtoMessage() {} +func (*Mark) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +type ClientArgs struct { + // Types that are valid to be assigned to Argtype: + // *ClientArgs_Setup + // *ClientArgs_Mark + Argtype isClientArgs_Argtype `protobuf_oneof:"argtype"` +} + +func (m *ClientArgs) Reset() { *m = ClientArgs{} } +func (m *ClientArgs) String() string { return proto.CompactTextString(m) } +func (*ClientArgs) ProtoMessage() {} +func (*ClientArgs) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +type isClientArgs_Argtype interface { + isClientArgs_Argtype() +} + +type ClientArgs_Setup struct { + Setup *ClientConfig `protobuf:"bytes,1,opt,name=setup,oneof"` +} +type ClientArgs_Mark struct { + Mark *Mark `protobuf:"bytes,2,opt,name=mark,oneof"` +} + +func (*ClientArgs_Setup) isClientArgs_Argtype() {} +func (*ClientArgs_Mark) isClientArgs_Argtype() {} + +func (m *ClientArgs) GetArgtype() isClientArgs_Argtype { + if m != nil { + return m.Argtype + } + return nil +} + +func (m *ClientArgs) GetSetup() *ClientConfig { + if x, ok := m.GetArgtype().(*ClientArgs_Setup); ok { + return x.Setup + } + return nil +} + +func (m *ClientArgs) GetMark() *Mark { + if x, ok := m.GetArgtype().(*ClientArgs_Mark); ok { + return x.Mark + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ClientArgs) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ClientArgs_OneofMarshaler, _ClientArgs_OneofUnmarshaler, _ClientArgs_OneofSizer, []interface{}{ + (*ClientArgs_Setup)(nil), + (*ClientArgs_Mark)(nil), + } +} + +func _ClientArgs_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ClientArgs) + // argtype + switch x := m.Argtype.(type) { + case *ClientArgs_Setup: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Setup); err != nil { + return err + } + case *ClientArgs_Mark: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Mark); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ClientArgs.Argtype has unexpected type %T", x) + } + return nil +} + +func _ClientArgs_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ClientArgs) + switch tag { + case 1: // argtype.setup + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ClientConfig) + err := b.DecodeMessage(msg) + m.Argtype = &ClientArgs_Setup{msg} + return true, err + case 2: // argtype.mark + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mark) + err := b.DecodeMessage(msg) + m.Argtype = &ClientArgs_Mark{msg} + return true, err + default: + return false, nil + } +} + +func _ClientArgs_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ClientArgs) + // argtype + switch x := m.Argtype.(type) { + case *ClientArgs_Setup: + s := proto.Size(x.Setup) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ClientArgs_Mark: + s := proto.Size(x.Mark) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type ServerConfig struct { + ServerType ServerType `protobuf:"varint,1,opt,name=server_type,json=serverType,enum=grpc.testing.ServerType" json:"server_type,omitempty"` + SecurityParams *SecurityParams `protobuf:"bytes,2,opt,name=security_params,json=securityParams" json:"security_params,omitempty"` + // Port on which to listen. Zero means pick unused port. + Port int32 `protobuf:"varint,4,opt,name=port" json:"port,omitempty"` + // Only for async server. Number of threads used to serve the requests. + AsyncServerThreads int32 `protobuf:"varint,7,opt,name=async_server_threads,json=asyncServerThreads" json:"async_server_threads,omitempty"` + // Specify the number of cores to limit server to, if desired + CoreLimit int32 `protobuf:"varint,8,opt,name=core_limit,json=coreLimit" json:"core_limit,omitempty"` + // payload config, used in generic server + PayloadConfig *PayloadConfig `protobuf:"bytes,9,opt,name=payload_config,json=payloadConfig" json:"payload_config,omitempty"` + // Specify the cores we should run the server on, if desired + CoreList []int32 `protobuf:"varint,10,rep,name=core_list,json=coreList" json:"core_list,omitempty"` +} + +func (m *ServerConfig) Reset() { *m = ServerConfig{} } +func (m *ServerConfig) String() string { return proto.CompactTextString(m) } +func (*ServerConfig) ProtoMessage() {} +func (*ServerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ServerConfig) GetSecurityParams() *SecurityParams { + if m != nil { + return m.SecurityParams + } + return nil +} + +func (m *ServerConfig) GetPayloadConfig() *PayloadConfig { + if m != nil { + return m.PayloadConfig + } + return nil +} + +type ServerArgs struct { + // Types that are valid to be assigned to Argtype: + // *ServerArgs_Setup + // *ServerArgs_Mark + Argtype isServerArgs_Argtype `protobuf_oneof:"argtype"` +} + +func (m *ServerArgs) Reset() { *m = ServerArgs{} } +func (m *ServerArgs) String() string { return proto.CompactTextString(m) } +func (*ServerArgs) ProtoMessage() {} +func (*ServerArgs) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +type isServerArgs_Argtype interface { + isServerArgs_Argtype() +} + +type ServerArgs_Setup struct { + Setup *ServerConfig `protobuf:"bytes,1,opt,name=setup,oneof"` +} +type ServerArgs_Mark struct { + Mark *Mark `protobuf:"bytes,2,opt,name=mark,oneof"` +} + +func (*ServerArgs_Setup) isServerArgs_Argtype() {} +func (*ServerArgs_Mark) isServerArgs_Argtype() {} + +func (m *ServerArgs) GetArgtype() isServerArgs_Argtype { + if m != nil { + return m.Argtype + } + return nil +} + +func (m *ServerArgs) GetSetup() *ServerConfig { + if x, ok := m.GetArgtype().(*ServerArgs_Setup); ok { + return x.Setup + } + return nil +} + +func (m *ServerArgs) GetMark() *Mark { + if x, ok := m.GetArgtype().(*ServerArgs_Mark); ok { + return x.Mark + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ServerArgs) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ServerArgs_OneofMarshaler, _ServerArgs_OneofUnmarshaler, _ServerArgs_OneofSizer, []interface{}{ + (*ServerArgs_Setup)(nil), + (*ServerArgs_Mark)(nil), + } +} + +func _ServerArgs_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ServerArgs) + // argtype + switch x := m.Argtype.(type) { + case *ServerArgs_Setup: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Setup); err != nil { + return err + } + case *ServerArgs_Mark: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Mark); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ServerArgs.Argtype has unexpected type %T", x) + } + return nil +} + +func _ServerArgs_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ServerArgs) + switch tag { + case 1: // argtype.setup + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ServerConfig) + err := b.DecodeMessage(msg) + m.Argtype = &ServerArgs_Setup{msg} + return true, err + case 2: // argtype.mark + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Mark) + err := b.DecodeMessage(msg) + m.Argtype = &ServerArgs_Mark{msg} + return true, err + default: + return false, nil + } +} + +func _ServerArgs_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ServerArgs) + // argtype + switch x := m.Argtype.(type) { + case *ServerArgs_Setup: + s := proto.Size(x.Setup) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ServerArgs_Mark: + s := proto.Size(x.Mark) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type ServerStatus struct { + Stats *ServerStats `protobuf:"bytes,1,opt,name=stats" json:"stats,omitempty"` + // the port bound by the server + Port int32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` + // Number of cores available to the server + Cores int32 `protobuf:"varint,3,opt,name=cores" json:"cores,omitempty"` +} + +func (m *ServerStatus) Reset() { *m = ServerStatus{} } +func (m *ServerStatus) String() string { return proto.CompactTextString(m) } +func (*ServerStatus) ProtoMessage() {} +func (*ServerStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *ServerStatus) GetStats() *ServerStats { + if m != nil { + return m.Stats + } + return nil +} + +type CoreRequest struct { +} + +func (m *CoreRequest) Reset() { *m = CoreRequest{} } +func (m *CoreRequest) String() string { return proto.CompactTextString(m) } +func (*CoreRequest) ProtoMessage() {} +func (*CoreRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +type CoreResponse struct { + // Number of cores available on the server + Cores int32 `protobuf:"varint,1,opt,name=cores" json:"cores,omitempty"` +} + +func (m *CoreResponse) Reset() { *m = CoreResponse{} } +func (m *CoreResponse) String() string { return proto.CompactTextString(m) } +func (*CoreResponse) ProtoMessage() {} +func (*CoreResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +type Void struct { +} + +func (m *Void) Reset() { *m = Void{} } +func (m *Void) String() string { return proto.CompactTextString(m) } +func (*Void) ProtoMessage() {} +func (*Void) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +// A single performance scenario: input to qps_json_driver +type Scenario struct { + // Human readable name for this scenario + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Client configuration + ClientConfig *ClientConfig `protobuf:"bytes,2,opt,name=client_config,json=clientConfig" json:"client_config,omitempty"` + // Number of clients to start for the test + NumClients int32 `protobuf:"varint,3,opt,name=num_clients,json=numClients" json:"num_clients,omitempty"` + // Server configuration + ServerConfig *ServerConfig `protobuf:"bytes,4,opt,name=server_config,json=serverConfig" json:"server_config,omitempty"` + // Number of servers to start for the test + NumServers int32 `protobuf:"varint,5,opt,name=num_servers,json=numServers" json:"num_servers,omitempty"` + // Warmup period, in seconds + WarmupSeconds int32 `protobuf:"varint,6,opt,name=warmup_seconds,json=warmupSeconds" json:"warmup_seconds,omitempty"` + // Benchmark time, in seconds + BenchmarkSeconds int32 `protobuf:"varint,7,opt,name=benchmark_seconds,json=benchmarkSeconds" json:"benchmark_seconds,omitempty"` + // Number of workers to spawn locally (usually zero) + SpawnLocalWorkerCount int32 `protobuf:"varint,8,opt,name=spawn_local_worker_count,json=spawnLocalWorkerCount" json:"spawn_local_worker_count,omitempty"` +} + +func (m *Scenario) Reset() { *m = Scenario{} } +func (m *Scenario) String() string { return proto.CompactTextString(m) } +func (*Scenario) ProtoMessage() {} +func (*Scenario) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *Scenario) GetClientConfig() *ClientConfig { + if m != nil { + return m.ClientConfig + } + return nil +} + +func (m *Scenario) GetServerConfig() *ServerConfig { + if m != nil { + return m.ServerConfig + } + return nil +} + +// A set of scenarios to be run with qps_json_driver +type Scenarios struct { + Scenarios []*Scenario `protobuf:"bytes,1,rep,name=scenarios" json:"scenarios,omitempty"` +} + +func (m *Scenarios) Reset() { *m = Scenarios{} } +func (m *Scenarios) String() string { return proto.CompactTextString(m) } +func (*Scenarios) ProtoMessage() {} +func (*Scenarios) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *Scenarios) GetScenarios() []*Scenario { + if m != nil { + return m.Scenarios + } + return nil +} + +func init() { + proto.RegisterType((*PoissonParams)(nil), "grpc.testing.PoissonParams") + proto.RegisterType((*UniformParams)(nil), "grpc.testing.UniformParams") + proto.RegisterType((*DeterministicParams)(nil), "grpc.testing.DeterministicParams") + proto.RegisterType((*ParetoParams)(nil), "grpc.testing.ParetoParams") + proto.RegisterType((*ClosedLoopParams)(nil), "grpc.testing.ClosedLoopParams") + proto.RegisterType((*LoadParams)(nil), "grpc.testing.LoadParams") + proto.RegisterType((*SecurityParams)(nil), "grpc.testing.SecurityParams") + proto.RegisterType((*ClientConfig)(nil), "grpc.testing.ClientConfig") + proto.RegisterType((*ClientStatus)(nil), "grpc.testing.ClientStatus") + proto.RegisterType((*Mark)(nil), "grpc.testing.Mark") + proto.RegisterType((*ClientArgs)(nil), "grpc.testing.ClientArgs") + proto.RegisterType((*ServerConfig)(nil), "grpc.testing.ServerConfig") + proto.RegisterType((*ServerArgs)(nil), "grpc.testing.ServerArgs") + proto.RegisterType((*ServerStatus)(nil), "grpc.testing.ServerStatus") + proto.RegisterType((*CoreRequest)(nil), "grpc.testing.CoreRequest") + proto.RegisterType((*CoreResponse)(nil), "grpc.testing.CoreResponse") + proto.RegisterType((*Void)(nil), "grpc.testing.Void") + proto.RegisterType((*Scenario)(nil), "grpc.testing.Scenario") + proto.RegisterType((*Scenarios)(nil), "grpc.testing.Scenarios") + proto.RegisterEnum("grpc.testing.ClientType", ClientType_name, ClientType_value) + proto.RegisterEnum("grpc.testing.ServerType", ServerType_name, ServerType_value) + proto.RegisterEnum("grpc.testing.RpcType", RpcType_name, RpcType_value) +} + +func init() { proto.RegisterFile("control.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1162 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x6e, 0xdb, 0x46, + 0x13, 0x8d, 0x14, 0xc9, 0x96, 0x86, 0x92, 0xac, 0x6f, 0xbf, 0xa4, 0x60, 0x1c, 0x27, 0x6d, 0xd8, + 0x16, 0x0d, 0x5c, 0xc0, 0x29, 0xd4, 0x02, 0x69, 0xd1, 0x8b, 0x40, 0x56, 0x85, 0xd8, 0x80, 0xe3, + 0xba, 0x2b, 0x27, 0x45, 0xae, 0x08, 0x9a, 0x5a, 0x4b, 0x44, 0x24, 0x2e, 0xbb, 0x4b, 0xc6, 0xf0, + 0x2b, 0xf4, 0x99, 0xfa, 0x1c, 0x7d, 0x8d, 0xbe, 0x42, 0x67, 0xff, 0x64, 0x52, 0x11, 0x10, 0xb7, + 0xbd, 0xe3, 0xce, 0x9c, 0xb3, 0x3b, 0x3b, 0x67, 0x66, 0x96, 0xd0, 0x8d, 0x79, 0x9a, 0x0b, 0xbe, + 0x38, 0xc8, 0x04, 0xcf, 0x39, 0xe9, 0xcc, 0x44, 0x16, 0x1f, 0xe4, 0x4c, 0xe6, 0x49, 0x3a, 0xdb, + 0xed, 0x65, 0xd1, 0xf5, 0x82, 0x47, 0x53, 0x69, 0xbc, 0xbb, 0x9e, 0xcc, 0xa3, 0xdc, 0x2e, 0x82, + 0x01, 0x74, 0xcf, 0x78, 0x22, 0x25, 0x4f, 0xcf, 0x22, 0x11, 0x2d, 0x25, 0x79, 0x02, 0x1d, 0x7e, + 0x79, 0xc9, 0x04, 0x9b, 0x86, 0x8a, 0xe4, 0xd7, 0x3e, 0xab, 0x3d, 0xad, 0x51, 0xcf, 0xda, 0x4e, + 0xd0, 0x14, 0x44, 0xd0, 0x7d, 0x9d, 0x26, 0x97, 0x5c, 0x2c, 0x2d, 0xe7, 0x2b, 0xd8, 0x49, 0xd2, + 0x9c, 0x89, 0x48, 0x88, 0xe4, 0x7d, 0xb4, 0x40, 0xa2, 0xa5, 0xf5, 0xca, 0xe6, 0x13, 0xfe, 0x01, + 0x70, 0x9e, 0xf8, 0xf5, 0x0f, 0x81, 0x47, 0x49, 0xf0, 0x3d, 0xfc, 0xff, 0x27, 0x86, 0x96, 0x65, + 0x92, 0x26, 0x78, 0x8b, 0xf8, 0xf6, 0xc1, 0xfd, 0x02, 0x1d, 0x04, 0xb3, 0x9c, 0x5b, 0xca, 0xd7, + 0xf0, 0xbf, 0xca, 0x91, 0x17, 0x91, 0x64, 0x96, 0xd7, 0x2f, 0x3b, 0x0e, 0xd1, 0x4e, 0xee, 0x41, + 0x33, 0x5a, 0x64, 0xf3, 0xc8, 0x46, 0x65, 0x16, 0x01, 0x81, 0xfe, 0x68, 0xc1, 0xa5, 0x3a, 0x80, + 0x67, 0x66, 0xdb, 0xe0, 0x8f, 0x3a, 0x80, 0x3a, 0xcf, 0x9e, 0x32, 0x04, 0x2f, 0xd6, 0x10, 0x8c, + 0x8b, 0x67, 0x7a, 0x7f, 0x6f, 0xf0, 0xf8, 0xa0, 0xac, 0xc3, 0xc1, 0xfa, 0x1e, 0x47, 0x77, 0x28, + 0xc4, 0x2b, 0x1b, 0x79, 0x0e, 0xdb, 0x99, 0x51, 0x42, 0x9f, 0xee, 0x0d, 0x1e, 0x56, 0xe9, 0x15, + 0x99, 0x90, 0xeb, 0xd0, 0x8a, 0x58, 0x18, 0x39, 0xfc, 0xbb, 0x9b, 0x88, 0x15, 0xad, 0x14, 0xd1, + 0xa2, 0xc9, 0x8f, 0xb0, 0x35, 0xd5, 0x49, 0xf6, 0x1b, 0x9a, 0xf7, 0xa4, 0xca, 0xdb, 0x20, 0x00, + 0xb2, 0x2d, 0x85, 0x7c, 0x07, 0x5b, 0x99, 0xce, 0xb3, 0xdf, 0xd4, 0xe4, 0xdd, 0xb5, 0x68, 0x4b, + 0x1a, 0x28, 0x96, 0xc1, 0x1e, 0x6e, 0x41, 0x43, 0x09, 0x17, 0x5c, 0x40, 0x6f, 0xc2, 0xe2, 0x42, + 0x24, 0xf9, 0xb5, 0xcd, 0xe0, 0x63, 0xf0, 0x0a, 0xc9, 0x42, 0xc5, 0x0f, 0xe3, 0x48, 0x67, 0xb0, + 0x45, 0xdb, 0x68, 0x3a, 0x47, 0xcb, 0x28, 0x22, 0xdf, 0xc0, 0x3d, 0xc9, 0xc4, 0x7b, 0x26, 0xc2, + 0x39, 0x47, 0x08, 0xc7, 0x2f, 0x91, 0x4c, 0x99, 0xce, 0x55, 0x9b, 0x12, 0xe3, 0x3b, 0x42, 0xd7, + 0xcf, 0xd6, 0x13, 0xfc, 0xde, 0x84, 0xce, 0x68, 0x91, 0xb0, 0x34, 0x1f, 0xf1, 0xf4, 0x32, 0x99, + 0x91, 0x2f, 0xa1, 0x67, 0xb7, 0xc8, 0x23, 0x31, 0x63, 0xb9, 0xc4, 0x53, 0xee, 0x22, 0xb9, 0x6b, + 0xac, 0xe7, 0xc6, 0x48, 0x7e, 0x50, 0x5a, 0x2a, 0x5a, 0x98, 0x5f, 0x67, 0xe6, 0x80, 0xde, 0xc0, + 0x5f, 0xd7, 0x52, 0x01, 0xce, 0xd1, 0xaf, 0x34, 0x74, 0xdf, 0x64, 0x0c, 0x3b, 0xd2, 0x5e, 0x2b, + 0xcc, 0xf4, 0xbd, 0xac, 0x24, 0x7b, 0x55, 0x7a, 0xf5, 0xee, 0xb4, 0x27, 0xab, 0xb9, 0x78, 0x01, + 0x7b, 0xbc, 0xc8, 0xb1, 0x4d, 0xd3, 0x29, 0xa2, 0x43, 0x64, 0xca, 0x30, 0xc3, 0xb0, 0xe3, 0x79, + 0x94, 0xa6, 0x6c, 0xa1, 0xe5, 0x6a, 0xd2, 0x07, 0x25, 0x0c, 0x45, 0xc8, 0x19, 0x13, 0x23, 0x03, + 0x50, 0x7d, 0x66, 0xaf, 0x60, 0x29, 0x52, 0xab, 0xd4, 0xa4, 0x3d, 0x63, 0xb6, 0x38, 0xa9, 0xb2, + 0x1a, 0xc9, 0xeb, 0x34, 0x0e, 0xdd, 0x8d, 0xe7, 0x82, 0xe1, 0xa4, 0xf0, 0xb7, 0x35, 0x9a, 0x68, + 0x9f, 0xbd, 0xab, 0xf1, 0x20, 0xa3, 0x85, 0xf1, 0x98, 0xd4, 0xb4, 0x74, 0x6a, 0xee, 0x57, 0xef, + 0x86, 0xa1, 0xe8, 0xbc, 0x6c, 0x0b, 0xf3, 0xa1, 0xf2, 0xa9, 0x34, 0x77, 0x09, 0x01, 0x9d, 0x90, + 0xb5, 0x7c, 0xde, 0xb4, 0x12, 0x85, 0xc5, 0x4d, 0x5b, 0x1d, 0x82, 0x1b, 0x5e, 0x61, 0xac, 0x35, + 0xf4, 0xbd, 0x8d, 0xad, 0x61, 0x30, 0x46, 0x66, 0xda, 0xcd, 0xca, 0x4b, 0x72, 0x04, 0xfd, 0x39, + 0x96, 0x30, 0x9f, 0xe1, 0x8e, 0x2e, 0x86, 0x8e, 0xde, 0xe5, 0x51, 0x75, 0x97, 0x23, 0x87, 0xb2, + 0x81, 0xec, 0xcc, 0xab, 0x06, 0xf2, 0x10, 0xda, 0x31, 0x17, 0x2c, 0x5c, 0xa0, 0xdd, 0xef, 0x62, + 0xe9, 0x34, 0x69, 0x4b, 0x19, 0x4e, 0x70, 0x4d, 0x1e, 0x01, 0x58, 0xe7, 0x32, 0xc9, 0xfd, 0x9e, + 0xce, 0x5f, 0xdb, 0x78, 0xd1, 0x10, 0xbc, 0x70, 0xb5, 0x38, 0xc1, 0xe1, 0x5b, 0x48, 0xf2, 0x0c, + 0x9a, 0x7a, 0x0c, 0xdb, 0x51, 0xf1, 0x60, 0x53, 0x79, 0x29, 0xa8, 0xa4, 0x06, 0x17, 0xec, 0x41, + 0xe3, 0x55, 0x24, 0xde, 0xa9, 0x11, 0x25, 0x98, 0x64, 0xb9, 0xed, 0x10, 0xb3, 0x08, 0x0a, 0x00, + 0xc3, 0x19, 0x8a, 0x99, 0x24, 0x03, 0xdc, 0x9c, 0xe5, 0x85, 0x9b, 0x43, 0xbb, 0x9b, 0x36, 0x37, + 0xd9, 0xc1, 0xd6, 0x34, 0x50, 0xf2, 0x14, 0x1a, 0x4b, 0xdc, 0xdf, 0xce, 0x1e, 0x52, 0xa5, 0xa8, + 0x93, 0x11, 0xaa, 0x11, 0x87, 0x6d, 0xd8, 0xc6, 0x4e, 0x51, 0x05, 0x10, 0xfc, 0x59, 0x87, 0xce, + 0x44, 0x37, 0x8f, 0x4d, 0x36, 0x6a, 0xed, 0x5a, 0x4c, 0x15, 0x48, 0x6d, 0x53, 0xef, 0x18, 0x82, + 0xe9, 0x1d, 0xb9, 0xfa, 0xde, 0xd4, 0x3b, 0xf5, 0x7f, 0xd1, 0x3b, 0x04, 0x1a, 0x19, 0x17, 0xb9, + 0xed, 0x11, 0xfd, 0x7d, 0x53, 0xe5, 0x2e, 0xb6, 0x0d, 0x55, 0x6e, 0xa3, 0xb2, 0x55, 0x5e, 0x55, + 0xb3, 0xb5, 0xa6, 0xe6, 0x86, 0xba, 0x6c, 0xff, 0xe3, 0xba, 0xac, 0x54, 0x13, 0x54, 0xab, 0x49, + 0xe9, 0x69, 0x02, 0xba, 0x85, 0x9e, 0x65, 0x01, 0xfe, 0xa3, 0x9e, 0x89, 0x93, 0xf3, 0x56, 0x55, + 0x7a, 0x03, 0x75, 0x55, 0xba, 0xca, 0x7e, 0xbd, 0x94, 0x7d, 0xac, 0x58, 0x75, 0x2f, 0x33, 0x0a, + 0x9b, 0xd4, 0x2c, 0x82, 0x2e, 0x78, 0x23, 0xfc, 0xa0, 0xec, 0xb7, 0x02, 0xb7, 0x0b, 0xbe, 0xc0, + 0xfe, 0xd0, 0x4b, 0x99, 0xf1, 0xd4, 0xbc, 0xc4, 0x86, 0x54, 0x2b, 0x93, 0xf0, 0xf9, 0x78, 0xc3, + 0x93, 0x69, 0xf0, 0x57, 0x1d, 0x5a, 0x93, 0x98, 0xa5, 0x91, 0x48, 0xb8, 0x3a, 0x33, 0x8d, 0x96, + 0xa6, 0xd8, 0xda, 0x54, 0x7f, 0xe3, 0x04, 0xed, 0xba, 0x01, 0x68, 0xf4, 0xa9, 0x7f, 0xac, 0x13, + 0x68, 0x27, 0x2e, 0xbf, 0x15, 0x9f, 0x82, 0x97, 0x16, 0x4b, 0x3b, 0x16, 0x5d, 0xe8, 0x80, 0x26, + 0xc3, 0x51, 0x33, 0xda, 0x3e, 0x1b, 0xee, 0x84, 0xc6, 0xc7, 0xb4, 0xa1, 0x1d, 0x59, 0x6e, 0x15, + 0x7b, 0x82, 0xb1, 0xb9, 0xf9, 0xac, 0x4e, 0x30, 0x1c, 0xa9, 0x9e, 0xab, 0xab, 0x48, 0x2c, 0x8b, + 0x0c, 0x31, 0x78, 0x06, 0xd6, 0xeb, 0x96, 0xc6, 0x74, 0x8d, 0x75, 0x62, 0x8c, 0xea, 0x07, 0xe7, + 0x82, 0xa5, 0xf1, 0x5c, 0x69, 0xb9, 0x42, 0x9a, 0xca, 0xee, 0xaf, 0x1c, 0x0e, 0xfc, 0x1c, 0x7c, + 0x99, 0x45, 0x57, 0x29, 0xfe, 0xa6, 0xc4, 0xf8, 0x33, 0x74, 0xc5, 0xc5, 0x3b, 0x7d, 0x83, 0x22, + 0x75, 0x55, 0x7e, 0x5f, 0xfb, 0x4f, 0x94, 0xfb, 0x57, 0xed, 0x1d, 0x29, 0x67, 0x30, 0x84, 0xb6, + 0x4b, 0xb8, 0xc4, 0xb7, 0xbf, 0x2d, 0xdd, 0x42, 0xbf, 0xa1, 0xde, 0xe0, 0x93, 0xb5, 0x7b, 0x5b, + 0x37, 0xbd, 0x01, 0xee, 0x3f, 0x73, 0x33, 0x4a, 0xb7, 0xfb, 0x0e, 0x78, 0x93, 0xb7, 0xa7, 0xa3, + 0x70, 0x74, 0x72, 0x3c, 0x3e, 0x3d, 0xef, 0xdf, 0x21, 0x7d, 0xe8, 0x0c, 0xcb, 0x96, 0xda, 0xfe, + 0xb1, 0x6b, 0x82, 0x0a, 0x61, 0x32, 0xa6, 0x6f, 0xc6, 0xb4, 0x4c, 0xb0, 0x96, 0x1a, 0xf1, 0xe1, + 0x9e, 0xb1, 0xbc, 0x1c, 0x9f, 0x8e, 0xe9, 0xf1, 0xca, 0x53, 0xdf, 0xff, 0x1c, 0xb6, 0xed, 0xbb, + 0x44, 0xda, 0xd0, 0x7c, 0x7d, 0x3a, 0xa4, 0x6f, 0x71, 0x87, 0x2e, 0x5e, 0xea, 0x9c, 0x8e, 0x87, + 0xaf, 0x8e, 0x4f, 0x5f, 0xf6, 0x6b, 0x17, 0x5b, 0xfa, 0x97, 0xf8, 0xdb, 0xbf, 0x03, 0x00, 0x00, + 0xff, 0xff, 0x75, 0x59, 0xf4, 0x03, 0x4e, 0x0b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.proto new file mode 100644 index 0000000..e0fe0ec --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.proto @@ -0,0 +1,201 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +import "payloads.proto"; +import "stats.proto"; + +package grpc.testing; + +enum ClientType { + SYNC_CLIENT = 0; + ASYNC_CLIENT = 1; +} + +enum ServerType { + SYNC_SERVER = 0; + ASYNC_SERVER = 1; + ASYNC_GENERIC_SERVER = 2; +} + +enum RpcType { + UNARY = 0; + STREAMING = 1; +} + +// Parameters of poisson process distribution, which is a good representation +// of activity coming in from independent identical stationary sources. +message PoissonParams { + // The rate of arrivals (a.k.a. lambda parameter of the exp distribution). + double offered_load = 1; +} + +message UniformParams { + double interarrival_lo = 1; + double interarrival_hi = 2; +} + +message DeterministicParams { + double offered_load = 1; +} + +message ParetoParams { + double interarrival_base = 1; + double alpha = 2; +} + +// Once an RPC finishes, immediately start a new one. +// No configuration parameters needed. +message ClosedLoopParams { +} + +message LoadParams { + oneof load { + ClosedLoopParams closed_loop = 1; + PoissonParams poisson = 2; + UniformParams uniform = 3; + DeterministicParams determ = 4; + ParetoParams pareto = 5; + }; +} + +// presence of SecurityParams implies use of TLS +message SecurityParams { + bool use_test_ca = 1; + string server_host_override = 2; +} + +message ClientConfig { + // List of targets to connect to. At least one target needs to be specified. + repeated string server_targets = 1; + ClientType client_type = 2; + SecurityParams security_params = 3; + // How many concurrent RPCs to start for each channel. + // For synchronous client, use a separate thread for each outstanding RPC. + int32 outstanding_rpcs_per_channel = 4; + // Number of independent client channels to create. + // i-th channel will connect to server_target[i % server_targets.size()] + int32 client_channels = 5; + // Only for async client. Number of threads to use to start/manage RPCs. + int32 async_client_threads = 7; + RpcType rpc_type = 8; + // The requested load for the entire client (aggregated over all the threads). + LoadParams load_params = 10; + PayloadConfig payload_config = 11; + HistogramParams histogram_params = 12; + + // Specify the cores we should run the client on, if desired + repeated int32 core_list = 13; + int32 core_limit = 14; +} + +message ClientStatus { + ClientStats stats = 1; +} + +// Request current stats +message Mark { + // if true, the stats will be reset after taking their snapshot. + bool reset = 1; +} + +message ClientArgs { + oneof argtype { + ClientConfig setup = 1; + Mark mark = 2; + } +} + +message ServerConfig { + ServerType server_type = 1; + SecurityParams security_params = 2; + // Port on which to listen. Zero means pick unused port. + int32 port = 4; + // Only for async server. Number of threads used to serve the requests. + int32 async_server_threads = 7; + // Specify the number of cores to limit server to, if desired + int32 core_limit = 8; + // payload config, used in generic server + PayloadConfig payload_config = 9; + + // Specify the cores we should run the server on, if desired + repeated int32 core_list = 10; +} + +message ServerArgs { + oneof argtype { + ServerConfig setup = 1; + Mark mark = 2; + } +} + +message ServerStatus { + ServerStats stats = 1; + // the port bound by the server + int32 port = 2; + // Number of cores available to the server + int32 cores = 3; +} + +message CoreRequest { +} + +message CoreResponse { + // Number of cores available on the server + int32 cores = 1; +} + +message Void { +} + +// A single performance scenario: input to qps_json_driver +message Scenario { + // Human readable name for this scenario + string name = 1; + // Client configuration + ClientConfig client_config = 2; + // Number of clients to start for the test + int32 num_clients = 3; + // Server configuration + ServerConfig server_config = 4; + // Number of servers to start for the test + int32 num_servers = 5; + // Warmup period, in seconds + int32 warmup_seconds = 6; + // Benchmark time, in seconds + int32 benchmark_seconds = 7; + // Number of workers to spawn locally (usually zero) + int32 spawn_local_worker_count = 8; +} + +// A set of scenarios to be run with qps_json_driver +message Scenarios { + repeated Scenario scenarios = 1; +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.pb.go new file mode 100644 index 0000000..b3c8cff --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.pb.go @@ -0,0 +1,347 @@ +// Code generated by protoc-gen-go. +// source: messages.proto +// DO NOT EDIT! + +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The type of payload that should be returned. +type PayloadType int32 + +const ( + // Compressable text format. + PayloadType_COMPRESSABLE PayloadType = 0 + // Uncompressable binary format. + PayloadType_UNCOMPRESSABLE PayloadType = 1 + // Randomly chosen from all other formats defined in this enum. + PayloadType_RANDOM PayloadType = 2 +) + +var PayloadType_name = map[int32]string{ + 0: "COMPRESSABLE", + 1: "UNCOMPRESSABLE", + 2: "RANDOM", +} +var PayloadType_value = map[string]int32{ + "COMPRESSABLE": 0, + "UNCOMPRESSABLE": 1, + "RANDOM": 2, +} + +func (x PayloadType) String() string { + return proto.EnumName(PayloadType_name, int32(x)) +} +func (PayloadType) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Compression algorithms +type CompressionType int32 + +const ( + // No compression + CompressionType_NONE CompressionType = 0 + CompressionType_GZIP CompressionType = 1 + CompressionType_DEFLATE CompressionType = 2 +) + +var CompressionType_name = map[int32]string{ + 0: "NONE", + 1: "GZIP", + 2: "DEFLATE", +} +var CompressionType_value = map[string]int32{ + "NONE": 0, + "GZIP": 1, + "DEFLATE": 2, +} + +func (x CompressionType) String() string { + return proto.EnumName(CompressionType_name, int32(x)) +} +func (CompressionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +// A block of data, to simply increase gRPC message size. +type Payload struct { + // The type of data in body. + Type PayloadType `protobuf:"varint,1,opt,name=type,enum=grpc.testing.PayloadType" json:"type,omitempty"` + // Primary contents of payload. + Body []byte `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` +} + +func (m *Payload) Reset() { *m = Payload{} } +func (m *Payload) String() string { return proto.CompactTextString(m) } +func (*Payload) ProtoMessage() {} +func (*Payload) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// A protobuf representation for grpc status. This is used by test +// clients to specify a status that the server should attempt to return. +type EchoStatus struct { + Code int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` +} + +func (m *EchoStatus) Reset() { *m = EchoStatus{} } +func (m *EchoStatus) String() string { return proto.CompactTextString(m) } +func (*EchoStatus) ProtoMessage() {} +func (*EchoStatus) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +// Unary request. +type SimpleRequest struct { + // Desired payload type in the response from the server. + // If response_type is RANDOM, server randomly chooses one from other formats. + ResponseType PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + // Desired payload size in the response from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + ResponseSize int32 `protobuf:"varint,2,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` + // Whether SimpleResponse should include username. + FillUsername bool `protobuf:"varint,4,opt,name=fill_username,json=fillUsername" json:"fill_username,omitempty"` + // Whether SimpleResponse should include OAuth scope. + FillOauthScope bool `protobuf:"varint,5,opt,name=fill_oauth_scope,json=fillOauthScope" json:"fill_oauth_scope,omitempty"` + // Compression algorithm to be used by the server for the response (stream) + ResponseCompression CompressionType `protobuf:"varint,6,opt,name=response_compression,json=responseCompression,enum=grpc.testing.CompressionType" json:"response_compression,omitempty"` + // Whether server should return a given status + ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus" json:"response_status,omitempty"` +} + +func (m *SimpleRequest) Reset() { *m = SimpleRequest{} } +func (m *SimpleRequest) String() string { return proto.CompactTextString(m) } +func (*SimpleRequest) ProtoMessage() {} +func (*SimpleRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *SimpleRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *SimpleRequest) GetResponseStatus() *EchoStatus { + if m != nil { + return m.ResponseStatus + } + return nil +} + +// Unary response, as configured by the request. +type SimpleResponse struct { + // Payload to increase message size. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + // The user the request came from, for verifying authentication was + // successful when the client expected it. + Username string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` + // OAuth scope. + OauthScope string `protobuf:"bytes,3,opt,name=oauth_scope,json=oauthScope" json:"oauth_scope,omitempty"` +} + +func (m *SimpleResponse) Reset() { *m = SimpleResponse{} } +func (m *SimpleResponse) String() string { return proto.CompactTextString(m) } +func (*SimpleResponse) ProtoMessage() {} +func (*SimpleResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *SimpleResponse) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +// Client-streaming request. +type StreamingInputCallRequest struct { + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` +} + +func (m *StreamingInputCallRequest) Reset() { *m = StreamingInputCallRequest{} } +func (m *StreamingInputCallRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingInputCallRequest) ProtoMessage() {} +func (*StreamingInputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *StreamingInputCallRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +// Client-streaming response. +type StreamingInputCallResponse struct { + // Aggregated size of payloads received from the client. + AggregatedPayloadSize int32 `protobuf:"varint,1,opt,name=aggregated_payload_size,json=aggregatedPayloadSize" json:"aggregated_payload_size,omitempty"` +} + +func (m *StreamingInputCallResponse) Reset() { *m = StreamingInputCallResponse{} } +func (m *StreamingInputCallResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingInputCallResponse) ProtoMessage() {} +func (*StreamingInputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +// Configuration for a particular response. +type ResponseParameters struct { + // Desired payload sizes in responses from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + Size int32 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"` + // Desired interval between consecutive responses in the response stream in + // microseconds. + IntervalUs int32 `protobuf:"varint,2,opt,name=interval_us,json=intervalUs" json:"interval_us,omitempty"` +} + +func (m *ResponseParameters) Reset() { *m = ResponseParameters{} } +func (m *ResponseParameters) String() string { return proto.CompactTextString(m) } +func (*ResponseParameters) ProtoMessage() {} +func (*ResponseParameters) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +// Server-streaming request. +type StreamingOutputCallRequest struct { + // Desired payload type in the response from the server. + // If response_type is RANDOM, the payload from each response in the stream + // might be of different types. This is to simulate a mixed type of payload + // stream. + ResponseType PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + // Configuration for each expected response message. + ResponseParameters []*ResponseParameters `protobuf:"bytes,2,rep,name=response_parameters,json=responseParameters" json:"response_parameters,omitempty"` + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` + // Compression algorithm to be used by the server for the response (stream) + ResponseCompression CompressionType `protobuf:"varint,6,opt,name=response_compression,json=responseCompression,enum=grpc.testing.CompressionType" json:"response_compression,omitempty"` + // Whether server should return a given status + ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus" json:"response_status,omitempty"` +} + +func (m *StreamingOutputCallRequest) Reset() { *m = StreamingOutputCallRequest{} } +func (m *StreamingOutputCallRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingOutputCallRequest) ProtoMessage() {} +func (*StreamingOutputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *StreamingOutputCallRequest) GetResponseParameters() []*ResponseParameters { + if m != nil { + return m.ResponseParameters + } + return nil +} + +func (m *StreamingOutputCallRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *StreamingOutputCallRequest) GetResponseStatus() *EchoStatus { + if m != nil { + return m.ResponseStatus + } + return nil +} + +// Server-streaming response, as configured by the request and parameters. +type StreamingOutputCallResponse struct { + // Payload to increase response size. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` +} + +func (m *StreamingOutputCallResponse) Reset() { *m = StreamingOutputCallResponse{} } +func (m *StreamingOutputCallResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingOutputCallResponse) ProtoMessage() {} +func (*StreamingOutputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *StreamingOutputCallResponse) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +// For reconnect interop test only. +// Client tells server what reconnection parameters it used. +type ReconnectParams struct { + MaxReconnectBackoffMs int32 `protobuf:"varint,1,opt,name=max_reconnect_backoff_ms,json=maxReconnectBackoffMs" json:"max_reconnect_backoff_ms,omitempty"` +} + +func (m *ReconnectParams) Reset() { *m = ReconnectParams{} } +func (m *ReconnectParams) String() string { return proto.CompactTextString(m) } +func (*ReconnectParams) ProtoMessage() {} +func (*ReconnectParams) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +// For reconnect interop test only. +// Server tells client whether its reconnects are following the spec and the +// reconnect backoffs it saw. +type ReconnectInfo struct { + Passed bool `protobuf:"varint,1,opt,name=passed" json:"passed,omitempty"` + BackoffMs []int32 `protobuf:"varint,2,rep,name=backoff_ms,json=backoffMs" json:"backoff_ms,omitempty"` +} + +func (m *ReconnectInfo) Reset() { *m = ReconnectInfo{} } +func (m *ReconnectInfo) String() string { return proto.CompactTextString(m) } +func (*ReconnectInfo) ProtoMessage() {} +func (*ReconnectInfo) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func init() { + proto.RegisterType((*Payload)(nil), "grpc.testing.Payload") + proto.RegisterType((*EchoStatus)(nil), "grpc.testing.EchoStatus") + proto.RegisterType((*SimpleRequest)(nil), "grpc.testing.SimpleRequest") + proto.RegisterType((*SimpleResponse)(nil), "grpc.testing.SimpleResponse") + proto.RegisterType((*StreamingInputCallRequest)(nil), "grpc.testing.StreamingInputCallRequest") + proto.RegisterType((*StreamingInputCallResponse)(nil), "grpc.testing.StreamingInputCallResponse") + proto.RegisterType((*ResponseParameters)(nil), "grpc.testing.ResponseParameters") + proto.RegisterType((*StreamingOutputCallRequest)(nil), "grpc.testing.StreamingOutputCallRequest") + proto.RegisterType((*StreamingOutputCallResponse)(nil), "grpc.testing.StreamingOutputCallResponse") + proto.RegisterType((*ReconnectParams)(nil), "grpc.testing.ReconnectParams") + proto.RegisterType((*ReconnectInfo)(nil), "grpc.testing.ReconnectInfo") + proto.RegisterEnum("grpc.testing.PayloadType", PayloadType_name, PayloadType_value) + proto.RegisterEnum("grpc.testing.CompressionType", CompressionType_name, CompressionType_value) +} + +func init() { proto.RegisterFile("messages.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 645 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x55, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0x25, 0xdf, 0xe9, 0x24, 0x4d, 0xa3, 0x85, 0x82, 0x5b, 0x54, 0x51, 0x99, 0x4b, 0x55, 0x89, + 0x20, 0x15, 0x09, 0x24, 0x0e, 0xa0, 0xb4, 0x4d, 0x51, 0x50, 0x9b, 0x84, 0x75, 0x7b, 0xe1, 0x62, + 0x6d, 0x9c, 0x4d, 0x1a, 0x11, 0x7b, 0x8d, 0x77, 0x8d, 0x28, 0x07, 0xee, 0xfc, 0x60, 0xee, 0xec, + 0xae, 0xbd, 0x8e, 0xd3, 0xf6, 0xd0, 0xc2, 0x85, 0xdb, 0xce, 0xcc, 0x9b, 0x97, 0x79, 0x33, 0xcf, + 0x0a, 0xb4, 0x7c, 0xca, 0x39, 0x99, 0x51, 0xde, 0x09, 0x23, 0x26, 0x18, 0x6a, 0xce, 0xa2, 0xd0, + 0xeb, 0x08, 0xca, 0xc5, 0x3c, 0x98, 0xd9, 0xa7, 0x50, 0x1b, 0x91, 0xab, 0x05, 0x23, 0x13, 0xf4, + 0x02, 0xca, 0xe2, 0x2a, 0xa4, 0x56, 0x61, 0xb7, 0xb0, 0xd7, 0x3a, 0xd8, 0xea, 0xe4, 0x71, 0x9d, + 0x14, 0x74, 0x2e, 0x01, 0x58, 0xc3, 0x10, 0x82, 0xf2, 0x98, 0x4d, 0xae, 0xac, 0xa2, 0x84, 0x37, + 0xb1, 0x7e, 0xdb, 0x6f, 0x01, 0x7a, 0xde, 0x25, 0x73, 0x04, 0x11, 0x31, 0x57, 0x08, 0x8f, 0x4d, + 0x12, 0xc2, 0x0a, 0xd6, 0x6f, 0x64, 0x41, 0x2d, 0x9d, 0x47, 0x37, 0xae, 0x61, 0x13, 0xda, 0xbf, + 0x4a, 0xb0, 0xee, 0xcc, 0xfd, 0x70, 0x41, 0x31, 0xfd, 0x1a, 0xcb, 0x9f, 0x45, 0xef, 0x60, 0x3d, + 0xa2, 0x3c, 0x64, 0x01, 0xa7, 0xee, 0xdd, 0x26, 0x6b, 0x1a, 0xbc, 0x8a, 0xd0, 0xf3, 0x5c, 0x3f, + 0x9f, 0xff, 0x48, 0x7e, 0xb1, 0xb2, 0x04, 0x39, 0x32, 0x87, 0x5e, 0x42, 0x2d, 0x4c, 0x18, 0xac, + 0x92, 0x2c, 0x37, 0x0e, 0x36, 0x6f, 0xa5, 0xc7, 0x06, 0xa5, 0x58, 0xa7, 0xf3, 0xc5, 0xc2, 0x8d, + 0x39, 0x8d, 0x02, 0xe2, 0x53, 0xab, 0x2c, 0xdb, 0xea, 0xb8, 0xa9, 0x92, 0x17, 0x69, 0x0e, 0xed, + 0x41, 0x5b, 0x83, 0x18, 0x89, 0xc5, 0xa5, 0xcb, 0x3d, 0x26, 0xa7, 0xaf, 0x68, 0x5c, 0x4b, 0xe5, + 0x87, 0x2a, 0xed, 0xa8, 0x2c, 0x1a, 0xc1, 0xa3, 0x6c, 0x48, 0x8f, 0xf9, 0xa1, 0x0c, 0xf8, 0x9c, + 0x05, 0x56, 0x55, 0x6b, 0xdd, 0x59, 0x1d, 0xe6, 0x68, 0x09, 0xd0, 0x7a, 0x1f, 0x9a, 0xd6, 0x5c, + 0x01, 0x75, 0x61, 0x63, 0x29, 0x5b, 0x5f, 0xc2, 0xaa, 0x69, 0x65, 0xd6, 0x2a, 0xd9, 0xf2, 0x52, + 0xb8, 0x95, 0xad, 0x44, 0xc7, 0xf6, 0x4f, 0x68, 0x99, 0x53, 0x24, 0xf9, 0xfc, 0x9a, 0x0a, 0x77, + 0x5a, 0xd3, 0x36, 0xd4, 0xb3, 0x0d, 0x25, 0x97, 0xce, 0x62, 0xf4, 0x0c, 0x1a, 0xf9, 0xc5, 0x94, + 0x74, 0x19, 0x58, 0xb6, 0x14, 0xe9, 0xca, 0x2d, 0x47, 0x44, 0x94, 0xf8, 0x92, 0xba, 0x1f, 0x84, + 0xb1, 0x38, 0x22, 0x8b, 0x85, 0xb1, 0xc5, 0x7d, 0x47, 0xb1, 0xcf, 0x61, 0xfb, 0x36, 0xb6, 0x54, + 0xd9, 0x6b, 0x78, 0x42, 0x66, 0xb3, 0x88, 0xce, 0x88, 0xa0, 0x13, 0x37, 0xed, 0x49, 0xfc, 0x92, + 0x18, 0x77, 0x73, 0x59, 0x4e, 0xa9, 0x95, 0x71, 0xec, 0x3e, 0x20, 0xc3, 0x31, 0x22, 0x91, 0x94, + 0x25, 0x68, 0xa4, 0x3d, 0x9f, 0x6b, 0xd5, 0x6f, 0x25, 0x77, 0x1e, 0xc8, 0xea, 0x37, 0xa2, 0x5c, + 0x93, 0xba, 0x10, 0x4c, 0xea, 0x82, 0xdb, 0xbf, 0x8b, 0xb9, 0x09, 0x87, 0xb1, 0xb8, 0x26, 0xf8, + 0x5f, 0xbf, 0x83, 0x4f, 0x90, 0xf9, 0x44, 0xea, 0x33, 0xa3, 0xca, 0x39, 0x4a, 0x72, 0x79, 0xbb, + 0xab, 0x2c, 0x37, 0x25, 0x61, 0x14, 0xdd, 0x94, 0x79, 0xef, 0xaf, 0xe6, 0xbf, 0xb4, 0xf9, 0x00, + 0x9e, 0xde, 0xba, 0xf6, 0xbf, 0xf4, 0xbc, 0xfd, 0x11, 0x36, 0x30, 0xf5, 0x58, 0x10, 0x50, 0x4f, + 0xe8, 0x65, 0x71, 0xf4, 0x06, 0x2c, 0x9f, 0x7c, 0x77, 0x23, 0x93, 0x76, 0xc7, 0xc4, 0xfb, 0xc2, + 0xa6, 0x53, 0xd7, 0xe7, 0xc6, 0x5e, 0xb2, 0x9e, 0x75, 0x1d, 0x26, 0xd5, 0x33, 0x6e, 0x9f, 0xc0, + 0x7a, 0x96, 0xed, 0x07, 0x53, 0x86, 0x1e, 0x43, 0x35, 0x24, 0x9c, 0xd3, 0x64, 0x98, 0x3a, 0x4e, + 0x23, 0xb4, 0x03, 0x90, 0xe3, 0x54, 0x47, 0xad, 0xe0, 0xb5, 0xb1, 0xe1, 0xd9, 0x7f, 0x0f, 0x8d, + 0x9c, 0x33, 0x50, 0x1b, 0x9a, 0x47, 0xc3, 0xb3, 0x11, 0xee, 0x39, 0x4e, 0xf7, 0xf0, 0xb4, 0xd7, + 0x7e, 0x20, 0x1d, 0xdb, 0xba, 0x18, 0xac, 0xe4, 0x0a, 0x08, 0xa0, 0x8a, 0xbb, 0x83, 0xe3, 0xe1, + 0x59, 0xbb, 0xb8, 0x7f, 0x00, 0x1b, 0xd7, 0xee, 0x81, 0xea, 0x50, 0x1e, 0x0c, 0x07, 0xaa, 0x59, + 0xbe, 0x3e, 0x7c, 0xee, 0x8f, 0x64, 0x4b, 0x03, 0x6a, 0xc7, 0xbd, 0x93, 0xd3, 0xee, 0x79, 0xaf, + 0x5d, 0x1c, 0x57, 0xf5, 0x5f, 0xcd, 0xab, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x6a, 0xce, + 0x1e, 0x7c, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.proto new file mode 100644 index 0000000..b1abc9e --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.proto @@ -0,0 +1,172 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Message definitions to be used by integration test service definitions. + +syntax = "proto3"; + +package grpc.testing; + +// The type of payload that should be returned. +enum PayloadType { + // Compressable text format. + COMPRESSABLE = 0; + + // Uncompressable binary format. + UNCOMPRESSABLE = 1; + + // Randomly chosen from all other formats defined in this enum. + RANDOM = 2; +} + +// Compression algorithms +enum CompressionType { + // No compression + NONE = 0; + GZIP = 1; + DEFLATE = 2; +} + +// A block of data, to simply increase gRPC message size. +message Payload { + // The type of data in body. + PayloadType type = 1; + // Primary contents of payload. + bytes body = 2; +} + +// A protobuf representation for grpc status. This is used by test +// clients to specify a status that the server should attempt to return. +message EchoStatus { + int32 code = 1; + string message = 2; +} + +// Unary request. +message SimpleRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, server randomly chooses one from other formats. + PayloadType response_type = 1; + + // Desired payload size in the response from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + int32 response_size = 2; + + // Optional input payload sent along with the request. + Payload payload = 3; + + // Whether SimpleResponse should include username. + bool fill_username = 4; + + // Whether SimpleResponse should include OAuth scope. + bool fill_oauth_scope = 5; + + // Compression algorithm to be used by the server for the response (stream) + CompressionType response_compression = 6; + + // Whether server should return a given status + EchoStatus response_status = 7; +} + +// Unary response, as configured by the request. +message SimpleResponse { + // Payload to increase message size. + Payload payload = 1; + // The user the request came from, for verifying authentication was + // successful when the client expected it. + string username = 2; + // OAuth scope. + string oauth_scope = 3; +} + +// Client-streaming request. +message StreamingInputCallRequest { + // Optional input payload sent along with the request. + Payload payload = 1; + + // Not expecting any payload from the response. +} + +// Client-streaming response. +message StreamingInputCallResponse { + // Aggregated size of payloads received from the client. + int32 aggregated_payload_size = 1; +} + +// Configuration for a particular response. +message ResponseParameters { + // Desired payload sizes in responses from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + int32 size = 1; + + // Desired interval between consecutive responses in the response stream in + // microseconds. + int32 interval_us = 2; +} + +// Server-streaming request. +message StreamingOutputCallRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, the payload from each response in the stream + // might be of different types. This is to simulate a mixed type of payload + // stream. + PayloadType response_type = 1; + + // Configuration for each expected response message. + repeated ResponseParameters response_parameters = 2; + + // Optional input payload sent along with the request. + Payload payload = 3; + + // Compression algorithm to be used by the server for the response (stream) + CompressionType response_compression = 6; + + // Whether server should return a given status + EchoStatus response_status = 7; +} + +// Server-streaming response, as configured by the request and parameters. +message StreamingOutputCallResponse { + // Payload to increase response size. + Payload payload = 1; +} + +// For reconnect interop test only. +// Client tells server what reconnection parameters it used. +message ReconnectParams { + int32 max_reconnect_backoff_ms = 1; +} + +// For reconnect interop test only. +// Server tells client whether its reconnects are following the spec and the +// reconnect backoffs it saw. +message ReconnectInfo { + bool passed = 1; + repeated int32 backoff_ms = 2; +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.pb.go new file mode 100644 index 0000000..ffc357d --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.pb.go @@ -0,0 +1,223 @@ +// Code generated by protoc-gen-go. +// source: payloads.proto +// DO NOT EDIT! + +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type ByteBufferParams struct { + ReqSize int32 `protobuf:"varint,1,opt,name=req_size,json=reqSize" json:"req_size,omitempty"` + RespSize int32 `protobuf:"varint,2,opt,name=resp_size,json=respSize" json:"resp_size,omitempty"` +} + +func (m *ByteBufferParams) Reset() { *m = ByteBufferParams{} } +func (m *ByteBufferParams) String() string { return proto.CompactTextString(m) } +func (*ByteBufferParams) ProtoMessage() {} +func (*ByteBufferParams) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +type SimpleProtoParams struct { + ReqSize int32 `protobuf:"varint,1,opt,name=req_size,json=reqSize" json:"req_size,omitempty"` + RespSize int32 `protobuf:"varint,2,opt,name=resp_size,json=respSize" json:"resp_size,omitempty"` +} + +func (m *SimpleProtoParams) Reset() { *m = SimpleProtoParams{} } +func (m *SimpleProtoParams) String() string { return proto.CompactTextString(m) } +func (*SimpleProtoParams) ProtoMessage() {} +func (*SimpleProtoParams) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +type ComplexProtoParams struct { +} + +func (m *ComplexProtoParams) Reset() { *m = ComplexProtoParams{} } +func (m *ComplexProtoParams) String() string { return proto.CompactTextString(m) } +func (*ComplexProtoParams) ProtoMessage() {} +func (*ComplexProtoParams) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +type PayloadConfig struct { + // Types that are valid to be assigned to Payload: + // *PayloadConfig_BytebufParams + // *PayloadConfig_SimpleParams + // *PayloadConfig_ComplexParams + Payload isPayloadConfig_Payload `protobuf_oneof:"payload"` +} + +func (m *PayloadConfig) Reset() { *m = PayloadConfig{} } +func (m *PayloadConfig) String() string { return proto.CompactTextString(m) } +func (*PayloadConfig) ProtoMessage() {} +func (*PayloadConfig) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +type isPayloadConfig_Payload interface { + isPayloadConfig_Payload() +} + +type PayloadConfig_BytebufParams struct { + BytebufParams *ByteBufferParams `protobuf:"bytes,1,opt,name=bytebuf_params,json=bytebufParams,oneof"` +} +type PayloadConfig_SimpleParams struct { + SimpleParams *SimpleProtoParams `protobuf:"bytes,2,opt,name=simple_params,json=simpleParams,oneof"` +} +type PayloadConfig_ComplexParams struct { + ComplexParams *ComplexProtoParams `protobuf:"bytes,3,opt,name=complex_params,json=complexParams,oneof"` +} + +func (*PayloadConfig_BytebufParams) isPayloadConfig_Payload() {} +func (*PayloadConfig_SimpleParams) isPayloadConfig_Payload() {} +func (*PayloadConfig_ComplexParams) isPayloadConfig_Payload() {} + +func (m *PayloadConfig) GetPayload() isPayloadConfig_Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *PayloadConfig) GetBytebufParams() *ByteBufferParams { + if x, ok := m.GetPayload().(*PayloadConfig_BytebufParams); ok { + return x.BytebufParams + } + return nil +} + +func (m *PayloadConfig) GetSimpleParams() *SimpleProtoParams { + if x, ok := m.GetPayload().(*PayloadConfig_SimpleParams); ok { + return x.SimpleParams + } + return nil +} + +func (m *PayloadConfig) GetComplexParams() *ComplexProtoParams { + if x, ok := m.GetPayload().(*PayloadConfig_ComplexParams); ok { + return x.ComplexParams + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PayloadConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PayloadConfig_OneofMarshaler, _PayloadConfig_OneofUnmarshaler, _PayloadConfig_OneofSizer, []interface{}{ + (*PayloadConfig_BytebufParams)(nil), + (*PayloadConfig_SimpleParams)(nil), + (*PayloadConfig_ComplexParams)(nil), + } +} + +func _PayloadConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PayloadConfig) + // payload + switch x := m.Payload.(type) { + case *PayloadConfig_BytebufParams: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BytebufParams); err != nil { + return err + } + case *PayloadConfig_SimpleParams: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SimpleParams); err != nil { + return err + } + case *PayloadConfig_ComplexParams: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ComplexParams); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PayloadConfig.Payload has unexpected type %T", x) + } + return nil +} + +func _PayloadConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PayloadConfig) + switch tag { + case 1: // payload.bytebuf_params + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ByteBufferParams) + err := b.DecodeMessage(msg) + m.Payload = &PayloadConfig_BytebufParams{msg} + return true, err + case 2: // payload.simple_params + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SimpleProtoParams) + err := b.DecodeMessage(msg) + m.Payload = &PayloadConfig_SimpleParams{msg} + return true, err + case 3: // payload.complex_params + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ComplexProtoParams) + err := b.DecodeMessage(msg) + m.Payload = &PayloadConfig_ComplexParams{msg} + return true, err + default: + return false, nil + } +} + +func _PayloadConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PayloadConfig) + // payload + switch x := m.Payload.(type) { + case *PayloadConfig_BytebufParams: + s := proto.Size(x.BytebufParams) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PayloadConfig_SimpleParams: + s := proto.Size(x.SimpleParams) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PayloadConfig_ComplexParams: + s := proto.Size(x.ComplexParams) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*ByteBufferParams)(nil), "grpc.testing.ByteBufferParams") + proto.RegisterType((*SimpleProtoParams)(nil), "grpc.testing.SimpleProtoParams") + proto.RegisterType((*ComplexProtoParams)(nil), "grpc.testing.ComplexProtoParams") + proto.RegisterType((*PayloadConfig)(nil), "grpc.testing.PayloadConfig") +} + +func init() { proto.RegisterFile("payloads.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 250 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2b, 0x48, 0xac, 0xcc, + 0xc9, 0x4f, 0x4c, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x49, 0x2f, 0x2a, 0x48, + 0xd6, 0x2b, 0x49, 0x2d, 0x2e, 0xc9, 0xcc, 0x4b, 0x57, 0xf2, 0xe2, 0x12, 0x70, 0xaa, 0x2c, 0x49, + 0x75, 0x2a, 0x4d, 0x4b, 0x4b, 0x2d, 0x0a, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0x16, 0x92, 0xe4, 0xe2, + 0x28, 0x4a, 0x2d, 0x8c, 0x2f, 0xce, 0xac, 0x4a, 0x95, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x0d, 0x62, + 0x07, 0xf2, 0x83, 0x81, 0x5c, 0x21, 0x69, 0x2e, 0xce, 0xa2, 0xd4, 0xe2, 0x02, 0x88, 0x1c, 0x13, + 0x58, 0x8e, 0x03, 0x24, 0x00, 0x92, 0x54, 0xf2, 0xe6, 0x12, 0x0c, 0xce, 0xcc, 0x2d, 0xc8, 0x49, + 0x0d, 0x00, 0x59, 0x44, 0xa1, 0x61, 0x22, 0x5c, 0x42, 0xce, 0xf9, 0x20, 0xc3, 0x2a, 0x90, 0x4c, + 0x53, 0xfa, 0xc6, 0xc8, 0xc5, 0x1b, 0x00, 0xf1, 0x8f, 0x73, 0x7e, 0x5e, 0x5a, 0x66, 0xba, 0x90, + 0x3b, 0x17, 0x5f, 0x12, 0xd0, 0x03, 0x49, 0xa5, 0x69, 0xf1, 0x05, 0x60, 0x35, 0x60, 0x5b, 0xb8, + 0x8d, 0xe4, 0xf4, 0x90, 0xfd, 0xa9, 0x87, 0xee, 0x49, 0x0f, 0x86, 0x20, 0x5e, 0xa8, 0x3e, 0xa8, + 0x43, 0xdd, 0xb8, 0x78, 0x8b, 0xc1, 0xae, 0x87, 0x99, 0xc3, 0x04, 0x36, 0x47, 0x1e, 0xd5, 0x1c, + 0x0c, 0x0f, 0x02, 0x0d, 0xe2, 0x81, 0xe8, 0x83, 0x9a, 0xe3, 0xc9, 0xc5, 0x97, 0x0c, 0x71, 0x38, + 0xcc, 0x20, 0x66, 0xb0, 0x41, 0x0a, 0xa8, 0x06, 0x61, 0x7a, 0x0e, 0xe4, 0x24, 0xa8, 0x4e, 0x88, + 0x80, 0x13, 0x27, 0x17, 0x3b, 0x34, 0xf2, 0x92, 0xd8, 0xc0, 0x91, 0x67, 0x0c, 0x08, 0x00, 0x00, + 0xff, 0xff, 0xb0, 0x8c, 0x18, 0x4e, 0xce, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.proto new file mode 100644 index 0000000..056fe0c --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.proto @@ -0,0 +1,55 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package grpc.testing; + +message ByteBufferParams { + int32 req_size = 1; + int32 resp_size = 2; +} + +message SimpleProtoParams { + int32 req_size = 1; + int32 resp_size = 2; +} + +message ComplexProtoParams { + // TODO (vpai): Fill this in once the details of complex, representative + // protos are decided +} + +message PayloadConfig { + oneof payload { + ByteBufferParams bytebuf_params = 1; + SimpleProtoParams simple_params = 2; + ComplexProtoParams complex_params = 3; + } +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.pb.go new file mode 100644 index 0000000..2aae317 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.pb.go @@ -0,0 +1,443 @@ +// Code generated by protoc-gen-go. +// source: services.proto +// DO NOT EDIT! + +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for BenchmarkService service + +type BenchmarkServiceClient interface { + // One request followed by one response. + // The server returns the client payload as-is. + UnaryCall(ctx context.Context, in *SimpleRequest, opts ...grpc.CallOption) (*SimpleResponse, error) + // One request followed by one response. + // The server returns the client payload as-is. + StreamingCall(ctx context.Context, opts ...grpc.CallOption) (BenchmarkService_StreamingCallClient, error) +} + +type benchmarkServiceClient struct { + cc *grpc.ClientConn +} + +func NewBenchmarkServiceClient(cc *grpc.ClientConn) BenchmarkServiceClient { + return &benchmarkServiceClient{cc} +} + +func (c *benchmarkServiceClient) UnaryCall(ctx context.Context, in *SimpleRequest, opts ...grpc.CallOption) (*SimpleResponse, error) { + out := new(SimpleResponse) + err := grpc.Invoke(ctx, "/grpc.testing.BenchmarkService/UnaryCall", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *benchmarkServiceClient) StreamingCall(ctx context.Context, opts ...grpc.CallOption) (BenchmarkService_StreamingCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_BenchmarkService_serviceDesc.Streams[0], c.cc, "/grpc.testing.BenchmarkService/StreamingCall", opts...) + if err != nil { + return nil, err + } + x := &benchmarkServiceStreamingCallClient{stream} + return x, nil +} + +type BenchmarkService_StreamingCallClient interface { + Send(*SimpleRequest) error + Recv() (*SimpleResponse, error) + grpc.ClientStream +} + +type benchmarkServiceStreamingCallClient struct { + grpc.ClientStream +} + +func (x *benchmarkServiceStreamingCallClient) Send(m *SimpleRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *benchmarkServiceStreamingCallClient) Recv() (*SimpleResponse, error) { + m := new(SimpleResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for BenchmarkService service + +type BenchmarkServiceServer interface { + // One request followed by one response. + // The server returns the client payload as-is. + UnaryCall(context.Context, *SimpleRequest) (*SimpleResponse, error) + // One request followed by one response. + // The server returns the client payload as-is. + StreamingCall(BenchmarkService_StreamingCallServer) error +} + +func RegisterBenchmarkServiceServer(s *grpc.Server, srv BenchmarkServiceServer) { + s.RegisterService(&_BenchmarkService_serviceDesc, srv) +} + +func _BenchmarkService_UnaryCall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SimpleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BenchmarkServiceServer).UnaryCall(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.BenchmarkService/UnaryCall", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BenchmarkServiceServer).UnaryCall(ctx, req.(*SimpleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BenchmarkService_StreamingCall_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(BenchmarkServiceServer).StreamingCall(&benchmarkServiceStreamingCallServer{stream}) +} + +type BenchmarkService_StreamingCallServer interface { + Send(*SimpleResponse) error + Recv() (*SimpleRequest, error) + grpc.ServerStream +} + +type benchmarkServiceStreamingCallServer struct { + grpc.ServerStream +} + +func (x *benchmarkServiceStreamingCallServer) Send(m *SimpleResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *benchmarkServiceStreamingCallServer) Recv() (*SimpleRequest, error) { + m := new(SimpleRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _BenchmarkService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testing.BenchmarkService", + HandlerType: (*BenchmarkServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UnaryCall", + Handler: _BenchmarkService_UnaryCall_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingCall", + Handler: _BenchmarkService_StreamingCall_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "services.proto", +} + +// Client API for WorkerService service + +type WorkerServiceClient interface { + // Start server with specified workload. + // First request sent specifies the ServerConfig followed by ServerStatus + // response. After that, a "Mark" can be sent anytime to request the latest + // stats. Closing the stream will initiate shutdown of the test server + // and once the shutdown has finished, the OK status is sent to terminate + // this RPC. + RunServer(ctx context.Context, opts ...grpc.CallOption) (WorkerService_RunServerClient, error) + // Start client with specified workload. + // First request sent specifies the ClientConfig followed by ClientStatus + // response. After that, a "Mark" can be sent anytime to request the latest + // stats. Closing the stream will initiate shutdown of the test client + // and once the shutdown has finished, the OK status is sent to terminate + // this RPC. + RunClient(ctx context.Context, opts ...grpc.CallOption) (WorkerService_RunClientClient, error) + // Just return the core count - unary call + CoreCount(ctx context.Context, in *CoreRequest, opts ...grpc.CallOption) (*CoreResponse, error) + // Quit this worker + QuitWorker(ctx context.Context, in *Void, opts ...grpc.CallOption) (*Void, error) +} + +type workerServiceClient struct { + cc *grpc.ClientConn +} + +func NewWorkerServiceClient(cc *grpc.ClientConn) WorkerServiceClient { + return &workerServiceClient{cc} +} + +func (c *workerServiceClient) RunServer(ctx context.Context, opts ...grpc.CallOption) (WorkerService_RunServerClient, error) { + stream, err := grpc.NewClientStream(ctx, &_WorkerService_serviceDesc.Streams[0], c.cc, "/grpc.testing.WorkerService/RunServer", opts...) + if err != nil { + return nil, err + } + x := &workerServiceRunServerClient{stream} + return x, nil +} + +type WorkerService_RunServerClient interface { + Send(*ServerArgs) error + Recv() (*ServerStatus, error) + grpc.ClientStream +} + +type workerServiceRunServerClient struct { + grpc.ClientStream +} + +func (x *workerServiceRunServerClient) Send(m *ServerArgs) error { + return x.ClientStream.SendMsg(m) +} + +func (x *workerServiceRunServerClient) Recv() (*ServerStatus, error) { + m := new(ServerStatus) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *workerServiceClient) RunClient(ctx context.Context, opts ...grpc.CallOption) (WorkerService_RunClientClient, error) { + stream, err := grpc.NewClientStream(ctx, &_WorkerService_serviceDesc.Streams[1], c.cc, "/grpc.testing.WorkerService/RunClient", opts...) + if err != nil { + return nil, err + } + x := &workerServiceRunClientClient{stream} + return x, nil +} + +type WorkerService_RunClientClient interface { + Send(*ClientArgs) error + Recv() (*ClientStatus, error) + grpc.ClientStream +} + +type workerServiceRunClientClient struct { + grpc.ClientStream +} + +func (x *workerServiceRunClientClient) Send(m *ClientArgs) error { + return x.ClientStream.SendMsg(m) +} + +func (x *workerServiceRunClientClient) Recv() (*ClientStatus, error) { + m := new(ClientStatus) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *workerServiceClient) CoreCount(ctx context.Context, in *CoreRequest, opts ...grpc.CallOption) (*CoreResponse, error) { + out := new(CoreResponse) + err := grpc.Invoke(ctx, "/grpc.testing.WorkerService/CoreCount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *workerServiceClient) QuitWorker(ctx context.Context, in *Void, opts ...grpc.CallOption) (*Void, error) { + out := new(Void) + err := grpc.Invoke(ctx, "/grpc.testing.WorkerService/QuitWorker", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for WorkerService service + +type WorkerServiceServer interface { + // Start server with specified workload. + // First request sent specifies the ServerConfig followed by ServerStatus + // response. After that, a "Mark" can be sent anytime to request the latest + // stats. Closing the stream will initiate shutdown of the test server + // and once the shutdown has finished, the OK status is sent to terminate + // this RPC. + RunServer(WorkerService_RunServerServer) error + // Start client with specified workload. + // First request sent specifies the ClientConfig followed by ClientStatus + // response. After that, a "Mark" can be sent anytime to request the latest + // stats. Closing the stream will initiate shutdown of the test client + // and once the shutdown has finished, the OK status is sent to terminate + // this RPC. + RunClient(WorkerService_RunClientServer) error + // Just return the core count - unary call + CoreCount(context.Context, *CoreRequest) (*CoreResponse, error) + // Quit this worker + QuitWorker(context.Context, *Void) (*Void, error) +} + +func RegisterWorkerServiceServer(s *grpc.Server, srv WorkerServiceServer) { + s.RegisterService(&_WorkerService_serviceDesc, srv) +} + +func _WorkerService_RunServer_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(WorkerServiceServer).RunServer(&workerServiceRunServerServer{stream}) +} + +type WorkerService_RunServerServer interface { + Send(*ServerStatus) error + Recv() (*ServerArgs, error) + grpc.ServerStream +} + +type workerServiceRunServerServer struct { + grpc.ServerStream +} + +func (x *workerServiceRunServerServer) Send(m *ServerStatus) error { + return x.ServerStream.SendMsg(m) +} + +func (x *workerServiceRunServerServer) Recv() (*ServerArgs, error) { + m := new(ServerArgs) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _WorkerService_RunClient_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(WorkerServiceServer).RunClient(&workerServiceRunClientServer{stream}) +} + +type WorkerService_RunClientServer interface { + Send(*ClientStatus) error + Recv() (*ClientArgs, error) + grpc.ServerStream +} + +type workerServiceRunClientServer struct { + grpc.ServerStream +} + +func (x *workerServiceRunClientServer) Send(m *ClientStatus) error { + return x.ServerStream.SendMsg(m) +} + +func (x *workerServiceRunClientServer) Recv() (*ClientArgs, error) { + m := new(ClientArgs) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _WorkerService_CoreCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CoreRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkerServiceServer).CoreCount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.WorkerService/CoreCount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkerServiceServer).CoreCount(ctx, req.(*CoreRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WorkerService_QuitWorker_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Void) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkerServiceServer).QuitWorker(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.WorkerService/QuitWorker", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkerServiceServer).QuitWorker(ctx, req.(*Void)) + } + return interceptor(ctx, in, info, handler) +} + +var _WorkerService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testing.WorkerService", + HandlerType: (*WorkerServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CoreCount", + Handler: _WorkerService_CoreCount_Handler, + }, + { + MethodName: "QuitWorker", + Handler: _WorkerService_QuitWorker_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "RunServer", + Handler: _WorkerService_RunServer_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { + StreamName: "RunClient", + Handler: _WorkerService_RunClient_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "services.proto", +} + +func init() { proto.RegisterFile("services.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 254 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x91, 0xc1, 0x4a, 0xc4, 0x30, + 0x10, 0x86, 0xa9, 0x07, 0xa1, 0xc1, 0x2e, 0x92, 0x93, 0x46, 0x1f, 0xc0, 0x53, 0x91, 0xd5, 0x17, + 0x70, 0x8b, 0x1e, 0x05, 0xb7, 0xa8, 0xe7, 0x58, 0x87, 0x1a, 0x36, 0x4d, 0xea, 0xcc, 0x44, 0xf0, + 0x49, 0x7c, 0x07, 0x9f, 0xd2, 0xee, 0x66, 0x0b, 0xb5, 0xe4, 0xb6, 0xc7, 0xf9, 0xbf, 0xe1, 0x23, + 0x7f, 0x46, 0x2c, 0x08, 0xf0, 0xcb, 0x34, 0x40, 0x65, 0x8f, 0x9e, 0xbd, 0x3c, 0x69, 0xb1, 0x6f, + 0x4a, 0x06, 0x62, 0xe3, 0x5a, 0xb5, 0xe8, 0x80, 0x48, 0xb7, 0x23, 0x55, 0x45, 0xe3, 0x1d, 0xa3, + 0xb7, 0x71, 0x5c, 0xfe, 0x66, 0xe2, 0x74, 0x05, 0xae, 0xf9, 0xe8, 0x34, 0x6e, 0xea, 0x28, 0x92, + 0x0f, 0x22, 0x7f, 0x76, 0x1a, 0xbf, 0x2b, 0x6d, 0xad, 0xbc, 0x28, 0xa7, 0xbe, 0xb2, 0x36, 0x5d, + 0x6f, 0x61, 0x0d, 0x9f, 0x61, 0x08, 0xd4, 0x65, 0x1a, 0x52, 0xef, 0x1d, 0x81, 0x7c, 0x14, 0x45, + 0xcd, 0x08, 0xba, 0x1b, 0xd8, 0x81, 0xae, 0xab, 0xec, 0x3a, 0x5b, 0xfe, 0x1c, 0x89, 0xe2, 0xd5, + 0xe3, 0x06, 0x70, 0x7c, 0xe9, 0xbd, 0xc8, 0xd7, 0xc1, 0x6d, 0x27, 0x40, 0x79, 0x36, 0x13, 0xec, + 0xd2, 0x3b, 0x6c, 0x49, 0xa9, 0x14, 0xa9, 0x59, 0x73, 0xa0, 0xad, 0x78, 0xaf, 0xa9, 0xac, 0x01, + 0xc7, 0x73, 0x4d, 0x4c, 0x53, 0x9a, 0x48, 0x26, 0x9a, 0x95, 0xc8, 0x2b, 0x8f, 0x50, 0xf9, 0x30, + 0x68, 0xce, 0x67, 0xcb, 0x03, 0x18, 0x9b, 0xaa, 0x14, 0xda, 0xff, 0xd9, 0xad, 0x10, 0x4f, 0xc1, + 0x70, 0xac, 0x29, 0xe5, 0xff, 0xcd, 0x17, 0x6f, 0xde, 0x55, 0x22, 0x7b, 0x3b, 0xde, 0x5d, 0xf3, + 0xe6, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x3b, 0x84, 0x02, 0xe3, 0x0c, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.proto new file mode 100644 index 0000000..c2acca7 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.proto @@ -0,0 +1,71 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// An integration test service that covers all the method signature permutations +// of unary/streaming requests/responses. +syntax = "proto3"; + +import "messages.proto"; +import "control.proto"; + +package grpc.testing; + +service BenchmarkService { + // One request followed by one response. + // The server returns the client payload as-is. + rpc UnaryCall(SimpleRequest) returns (SimpleResponse); + + // One request followed by one response. + // The server returns the client payload as-is. + rpc StreamingCall(stream SimpleRequest) returns (stream SimpleResponse); +} + +service WorkerService { + // Start server with specified workload. + // First request sent specifies the ServerConfig followed by ServerStatus + // response. After that, a "Mark" can be sent anytime to request the latest + // stats. Closing the stream will initiate shutdown of the test server + // and once the shutdown has finished, the OK status is sent to terminate + // this RPC. + rpc RunServer(stream ServerArgs) returns (stream ServerStatus); + + // Start client with specified workload. + // First request sent specifies the ClientConfig followed by ClientStatus + // response. After that, a "Mark" can be sent anytime to request the latest + // stats. Closing the stream will initiate shutdown of the test client + // and once the shutdown has finished, the OK status is sent to terminate + // this RPC. + rpc RunClient(stream ClientArgs) returns (stream ClientStatus); + + // Just return the core count - unary call + rpc CoreCount(CoreRequest) returns (CoreResponse); + + // Quit this worker + rpc QuitWorker(Void) returns (Void); +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.pb.go new file mode 100644 index 0000000..45b9b4a --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.pb.go @@ -0,0 +1,111 @@ +// Code generated by protoc-gen-go. +// source: stats.proto +// DO NOT EDIT! + +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type ServerStats struct { + // wall clock time change in seconds since last reset + TimeElapsed float64 `protobuf:"fixed64,1,opt,name=time_elapsed,json=timeElapsed" json:"time_elapsed,omitempty"` + // change in user time (in seconds) used by the server since last reset + TimeUser float64 `protobuf:"fixed64,2,opt,name=time_user,json=timeUser" json:"time_user,omitempty"` + // change in server time (in seconds) used by the server process and all + // threads since last reset + TimeSystem float64 `protobuf:"fixed64,3,opt,name=time_system,json=timeSystem" json:"time_system,omitempty"` +} + +func (m *ServerStats) Reset() { *m = ServerStats{} } +func (m *ServerStats) String() string { return proto.CompactTextString(m) } +func (*ServerStats) ProtoMessage() {} +func (*ServerStats) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +// Histogram params based on grpc/support/histogram.c +type HistogramParams struct { + Resolution float64 `protobuf:"fixed64,1,opt,name=resolution" json:"resolution,omitempty"` + MaxPossible float64 `protobuf:"fixed64,2,opt,name=max_possible,json=maxPossible" json:"max_possible,omitempty"` +} + +func (m *HistogramParams) Reset() { *m = HistogramParams{} } +func (m *HistogramParams) String() string { return proto.CompactTextString(m) } +func (*HistogramParams) ProtoMessage() {} +func (*HistogramParams) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +// Histogram data based on grpc/support/histogram.c +type HistogramData struct { + Bucket []uint32 `protobuf:"varint,1,rep,name=bucket" json:"bucket,omitempty"` + MinSeen float64 `protobuf:"fixed64,2,opt,name=min_seen,json=minSeen" json:"min_seen,omitempty"` + MaxSeen float64 `protobuf:"fixed64,3,opt,name=max_seen,json=maxSeen" json:"max_seen,omitempty"` + Sum float64 `protobuf:"fixed64,4,opt,name=sum" json:"sum,omitempty"` + SumOfSquares float64 `protobuf:"fixed64,5,opt,name=sum_of_squares,json=sumOfSquares" json:"sum_of_squares,omitempty"` + Count float64 `protobuf:"fixed64,6,opt,name=count" json:"count,omitempty"` +} + +func (m *HistogramData) Reset() { *m = HistogramData{} } +func (m *HistogramData) String() string { return proto.CompactTextString(m) } +func (*HistogramData) ProtoMessage() {} +func (*HistogramData) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } + +type ClientStats struct { + // Latency histogram. Data points are in nanoseconds. + Latencies *HistogramData `protobuf:"bytes,1,opt,name=latencies" json:"latencies,omitempty"` + // See ServerStats for details. + TimeElapsed float64 `protobuf:"fixed64,2,opt,name=time_elapsed,json=timeElapsed" json:"time_elapsed,omitempty"` + TimeUser float64 `protobuf:"fixed64,3,opt,name=time_user,json=timeUser" json:"time_user,omitempty"` + TimeSystem float64 `protobuf:"fixed64,4,opt,name=time_system,json=timeSystem" json:"time_system,omitempty"` +} + +func (m *ClientStats) Reset() { *m = ClientStats{} } +func (m *ClientStats) String() string { return proto.CompactTextString(m) } +func (*ClientStats) ProtoMessage() {} +func (*ClientStats) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } + +func (m *ClientStats) GetLatencies() *HistogramData { + if m != nil { + return m.Latencies + } + return nil +} + +func init() { + proto.RegisterType((*ServerStats)(nil), "grpc.testing.ServerStats") + proto.RegisterType((*HistogramParams)(nil), "grpc.testing.HistogramParams") + proto.RegisterType((*HistogramData)(nil), "grpc.testing.HistogramData") + proto.RegisterType((*ClientStats)(nil), "grpc.testing.ClientStats") +} + +func init() { proto.RegisterFile("stats.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 342 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x92, 0x4f, 0x4f, 0xe3, 0x30, + 0x10, 0xc5, 0x95, 0xa6, 0xed, 0xb6, 0x93, 0x76, 0x77, 0x65, 0xad, 0x56, 0x41, 0x95, 0xf8, 0x13, + 0x71, 0xe8, 0x29, 0x07, 0x38, 0x71, 0x06, 0x24, 0x6e, 0x54, 0x0d, 0x9c, 0x23, 0x37, 0x4c, 0x2b, + 0x8b, 0xc4, 0x0e, 0x99, 0x09, 0x2a, 0x1f, 0x09, 0xf1, 0x25, 0x71, 0x9c, 0x08, 0x0a, 0x48, 0x70, + 0x49, 0xf2, 0x7e, 0x6f, 0x34, 0xe3, 0xc9, 0x33, 0x04, 0xc4, 0x92, 0x29, 0x2e, 0x2b, 0xc3, 0x46, + 0x4c, 0x36, 0x55, 0x99, 0xc5, 0x8c, 0xc4, 0x4a, 0x6f, 0x22, 0x0d, 0x41, 0x82, 0xd5, 0x23, 0x56, + 0x49, 0x53, 0x22, 0x8e, 0x60, 0xc2, 0xaa, 0xc0, 0x14, 0x73, 0x59, 0x12, 0xde, 0x85, 0xde, 0xa1, + 0x37, 0xf7, 0x96, 0x41, 0xc3, 0x2e, 0x5b, 0x24, 0x66, 0x30, 0x76, 0x25, 0x35, 0x61, 0x15, 0xf6, + 0x9c, 0x3f, 0x6a, 0xc0, 0xad, 0xd5, 0xe2, 0x00, 0x5c, 0x6d, 0x4a, 0x4f, 0xc4, 0x58, 0x84, 0xbe, + 0xb3, 0xa1, 0x41, 0x89, 0x23, 0xd1, 0x0d, 0xfc, 0xb9, 0x52, 0xc4, 0x66, 0x53, 0xc9, 0x62, 0x21, + 0xed, 0x83, 0xc4, 0x3e, 0x40, 0x85, 0x64, 0xf2, 0x9a, 0x95, 0xd1, 0xdd, 0xc4, 0x1d, 0xd2, 0x9c, + 0xa9, 0x90, 0xdb, 0xb4, 0x34, 0x44, 0x6a, 0x95, 0x63, 0x37, 0x33, 0xb0, 0x6c, 0xd1, 0xa1, 0xe8, + 0xc5, 0x83, 0xe9, 0x5b, 0xdb, 0x0b, 0xc9, 0x52, 0xfc, 0x87, 0xe1, 0xaa, 0xce, 0xee, 0x91, 0x6d, + 0x43, 0x7f, 0x3e, 0x5d, 0x76, 0x4a, 0xec, 0xc1, 0xa8, 0x50, 0x3a, 0x25, 0x44, 0xdd, 0x35, 0xfa, + 0x65, 0x75, 0x62, 0xa5, 0xb3, 0xec, 0x1c, 0x67, 0xf9, 0x9d, 0x25, 0xb7, 0xce, 0xfa, 0x0b, 0x3e, + 0xd5, 0x45, 0xd8, 0x77, 0xb4, 0xf9, 0x14, 0xc7, 0xf0, 0xdb, 0xbe, 0x52, 0xb3, 0x4e, 0xe9, 0xa1, + 0x96, 0xf6, 0xb4, 0xe1, 0xc0, 0x99, 0x13, 0x4b, 0xaf, 0xd7, 0x49, 0xcb, 0xc4, 0x3f, 0x18, 0x64, + 0xa6, 0xd6, 0x1c, 0x0e, 0x9d, 0xd9, 0x8a, 0xe8, 0xd9, 0x83, 0xe0, 0x3c, 0x57, 0xa8, 0xb9, 0xfd, + 0xe9, 0x67, 0x30, 0xce, 0x25, 0xa3, 0xce, 0x94, 0x6d, 0xd3, 0xec, 0x1f, 0x9c, 0xcc, 0xe2, 0xdd, + 0x94, 0xe2, 0x0f, 0xbb, 0x2d, 0xdf, 0xab, 0xbf, 0xe4, 0xd5, 0xfb, 0x21, 0x2f, 0xff, 0xfb, 0xbc, + 0xfa, 0x9f, 0xf3, 0x5a, 0x0d, 0xdd, 0xa5, 0x39, 0x7d, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xea, 0x75, + 0x34, 0x90, 0x43, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.proto new file mode 100644 index 0000000..9bc3cb2 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.proto @@ -0,0 +1,70 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package grpc.testing; + +message ServerStats { + // wall clock time change in seconds since last reset + double time_elapsed = 1; + + // change in user time (in seconds) used by the server since last reset + double time_user = 2; + + // change in server time (in seconds) used by the server process and all + // threads since last reset + double time_system = 3; +} + +// Histogram params based on grpc/support/histogram.c +message HistogramParams { + double resolution = 1; // first bucket is [0, 1 + resolution) + double max_possible = 2; // use enough buckets to allow this value +} + +// Histogram data based on grpc/support/histogram.c +message HistogramData { + repeated uint32 bucket = 1; + double min_seen = 2; + double max_seen = 3; + double sum = 4; + double sum_of_squares = 5; + double count = 6; +} + +message ClientStats { + // Latency histogram. Data points are in nanoseconds. + HistogramData latencies = 1; + + // See ServerStats for details. + double time_elapsed = 2; + double time_user = 3; + double time_system = 4; +} diff --git a/vendor/google.golang.org/grpc/benchmark/server/main.go b/vendor/google.golang.org/grpc/benchmark/server/main.go new file mode 100644 index 0000000..d43aad0 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/server/main.go @@ -0,0 +1,35 @@ +package main + +import ( + "flag" + "math" + "net" + "net/http" + _ "net/http/pprof" + "time" + + "google.golang.org/grpc/benchmark" + "google.golang.org/grpc/grpclog" +) + +var ( + duration = flag.Int("duration", math.MaxInt32, "The duration in seconds to run the benchmark server") +) + +func main() { + flag.Parse() + go func() { + lis, err := net.Listen("tcp", ":0") + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + grpclog.Println("Server profiling address: ", lis.Addr().String()) + if err := http.Serve(lis, nil); err != nil { + grpclog.Fatalf("Failed to serve: %v", err) + } + }() + addr, stopper := benchmark.StartServer(benchmark.ServerInfo{Addr: ":0", Type: "protobuf"}) // listen on all interfaces + grpclog.Println("Server Address: ", addr) + <-time.After(time.Duration(*duration) * time.Second) + stopper() +} diff --git a/vendor/google.golang.org/grpc/benchmark/server/testdata/ca.pem b/vendor/google.golang.org/grpc/benchmark/server/testdata/ca.pem new file mode 100644 index 0000000..6c8511a --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/server/testdata/ca.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla +Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 +YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT +BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 ++L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu +g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd +Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau +sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m +oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG +Dfcog5wrJytaQ6UA0wE= +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.key b/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.key new file mode 100644 index 0000000..143a5b8 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD +M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf +3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY +AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm +V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY +tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p +dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q +K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR +81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff +DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd +aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 +ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 +XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe +F98XJ7tIFfJq +-----END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.pem b/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.pem new file mode 100644 index 0000000..f3d43fc --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET +MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx +MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV +BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 +ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco +LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg +zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd +9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy +em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G +CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 +hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh +y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/benchmark/stats/histogram.go b/vendor/google.golang.org/grpc/benchmark/stats/histogram.go new file mode 100644 index 0000000..918bead --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/stats/histogram.go @@ -0,0 +1,198 @@ +package stats + +import ( + "bytes" + "fmt" + "io" + "log" + "math" + "strconv" + "strings" +) + +// Histogram accumulates values in the form of a histogram with +// exponentially increased bucket sizes. +type Histogram struct { + // Count is the total number of values added to the histogram. + Count int64 + // Sum is the sum of all the values added to the histogram. + Sum int64 + // SumOfSquares is the sum of squares of all values. + SumOfSquares int64 + // Min is the minimum of all the values added to the histogram. + Min int64 + // Max is the maximum of all the values added to the histogram. + Max int64 + // Buckets contains all the buckets of the histogram. + Buckets []HistogramBucket + + opts HistogramOptions + logBaseBucketSize float64 + oneOverLogOnePlusGrowthFactor float64 +} + +// HistogramOptions contains the parameters that define the histogram's buckets. +// The first bucket of the created histogram (with index 0) contains [min, min+n) +// where n = BaseBucketSize, min = MinValue. +// Bucket i (i>=1) contains [min + n * m^(i-1), min + n * m^i), where m = 1+GrowthFactor. +// The type of the values is int64. +type HistogramOptions struct { + // NumBuckets is the number of buckets. + NumBuckets int + // GrowthFactor is the growth factor of the buckets. A value of 0.1 + // indicates that bucket N+1 will be 10% larger than bucket N. + GrowthFactor float64 + // BaseBucketSize is the size of the first bucket. + BaseBucketSize float64 + // MinValue is the lower bound of the first bucket. + MinValue int64 +} + +// HistogramBucket represents one histogram bucket. +type HistogramBucket struct { + // LowBound is the lower bound of the bucket. + LowBound float64 + // Count is the number of values in the bucket. + Count int64 +} + +// NewHistogram returns a pointer to a new Histogram object that was created +// with the provided options. +func NewHistogram(opts HistogramOptions) *Histogram { + if opts.NumBuckets == 0 { + opts.NumBuckets = 32 + } + if opts.BaseBucketSize == 0.0 { + opts.BaseBucketSize = 1.0 + } + h := Histogram{ + Buckets: make([]HistogramBucket, opts.NumBuckets), + Min: math.MaxInt64, + Max: math.MinInt64, + + opts: opts, + logBaseBucketSize: math.Log(opts.BaseBucketSize), + oneOverLogOnePlusGrowthFactor: 1 / math.Log(1+opts.GrowthFactor), + } + m := 1.0 + opts.GrowthFactor + delta := opts.BaseBucketSize + h.Buckets[0].LowBound = float64(opts.MinValue) + for i := 1; i < opts.NumBuckets; i++ { + h.Buckets[i].LowBound = float64(opts.MinValue) + delta + delta = delta * m + } + return &h +} + +// Print writes textual output of the histogram values. +func (h *Histogram) Print(w io.Writer) { + avg := float64(h.Sum) / float64(h.Count) + fmt.Fprintf(w, "Count: %d Min: %d Max: %d Avg: %.2f\n", h.Count, h.Min, h.Max, avg) + fmt.Fprintf(w, "%s\n", strings.Repeat("-", 60)) + if h.Count <= 0 { + return + } + + maxBucketDigitLen := len(strconv.FormatFloat(h.Buckets[len(h.Buckets)-1].LowBound, 'f', 6, 64)) + if maxBucketDigitLen < 3 { + // For "inf". + maxBucketDigitLen = 3 + } + maxCountDigitLen := len(strconv.FormatInt(h.Count, 10)) + percentMulti := 100 / float64(h.Count) + + accCount := int64(0) + for i, b := range h.Buckets { + fmt.Fprintf(w, "[%*f, ", maxBucketDigitLen, b.LowBound) + if i+1 < len(h.Buckets) { + fmt.Fprintf(w, "%*f)", maxBucketDigitLen, h.Buckets[i+1].LowBound) + } else { + fmt.Fprintf(w, "%*s)", maxBucketDigitLen, "inf") + } + + accCount += b.Count + fmt.Fprintf(w, " %*d %5.1f%% %5.1f%%", maxCountDigitLen, b.Count, float64(b.Count)*percentMulti, float64(accCount)*percentMulti) + + const barScale = 0.1 + barLength := int(float64(b.Count)*percentMulti*barScale + 0.5) + fmt.Fprintf(w, " %s\n", strings.Repeat("#", barLength)) + } +} + +// String returns the textual output of the histogram values as string. +func (h *Histogram) String() string { + var b bytes.Buffer + h.Print(&b) + return b.String() +} + +// Clear resets all the content of histogram. +func (h *Histogram) Clear() { + h.Count = 0 + h.Sum = 0 + h.SumOfSquares = 0 + h.Min = math.MaxInt64 + h.Max = math.MinInt64 + for i := range h.Buckets { + h.Buckets[i].Count = 0 + } +} + +// Opts returns a copy of the options used to create the Histogram. +func (h *Histogram) Opts() HistogramOptions { + return h.opts +} + +// Add adds a value to the histogram. +func (h *Histogram) Add(value int64) error { + bucket, err := h.findBucket(value) + if err != nil { + return err + } + h.Buckets[bucket].Count++ + h.Count++ + h.Sum += value + h.SumOfSquares += value * value + if value < h.Min { + h.Min = value + } + if value > h.Max { + h.Max = value + } + return nil +} + +func (h *Histogram) findBucket(value int64) (int, error) { + delta := float64(value - h.opts.MinValue) + var b int + if delta >= h.opts.BaseBucketSize { + // b = log_{1+growthFactor} (delta / baseBucketSize) + 1 + // = log(delta / baseBucketSize) / log(1+growthFactor) + 1 + // = (log(delta) - log(baseBucketSize)) * (1 / log(1+growthFactor)) + 1 + b = int((math.Log(delta)-h.logBaseBucketSize)*h.oneOverLogOnePlusGrowthFactor + 1) + } + if b >= len(h.Buckets) { + return 0, fmt.Errorf("no bucket for value: %d", value) + } + return b, nil +} + +// Merge takes another histogram h2, and merges its content into h. +// The two histograms must be created by equivalent HistogramOptions. +func (h *Histogram) Merge(h2 *Histogram) { + if h.opts != h2.opts { + log.Fatalf("failed to merge histograms, created by inequivalent options") + } + h.Count += h2.Count + h.Sum += h2.Sum + h.SumOfSquares += h2.SumOfSquares + if h2.Min < h.Min { + h.Min = h2.Min + } + if h2.Max > h.Max { + h.Max = h2.Max + } + for i, b := range h2.Buckets { + h.Buckets[i].Count += b.Count + } +} diff --git a/vendor/google.golang.org/grpc/benchmark/stats/stats.go b/vendor/google.golang.org/grpc/benchmark/stats/stats.go new file mode 100644 index 0000000..e0edb17 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/stats/stats.go @@ -0,0 +1,116 @@ +package stats + +import ( + "bytes" + "fmt" + "io" + "math" + "time" +) + +// Stats is a simple helper for gathering additional statistics like histogram +// during benchmarks. This is not thread safe. +type Stats struct { + numBuckets int + unit time.Duration + min, max int64 + histogram *Histogram + + durations durationSlice + dirty bool +} + +type durationSlice []time.Duration + +// NewStats creates a new Stats instance. If numBuckets is not positive, +// the default value (16) will be used. +func NewStats(numBuckets int) *Stats { + if numBuckets <= 0 { + numBuckets = 16 + } + return &Stats{ + // Use one more bucket for the last unbounded bucket. + numBuckets: numBuckets + 1, + durations: make(durationSlice, 0, 100000), + } +} + +// Add adds an elapsed time per operation to the stats. +func (stats *Stats) Add(d time.Duration) { + stats.durations = append(stats.durations, d) + stats.dirty = true +} + +// Clear resets the stats, removing all values. +func (stats *Stats) Clear() { + stats.durations = stats.durations[:0] + stats.histogram = nil + stats.dirty = false +} + +// maybeUpdate updates internal stat data if there was any newly added +// stats since this was updated. +func (stats *Stats) maybeUpdate() { + if !stats.dirty { + return + } + + stats.min = math.MaxInt64 + stats.max = 0 + for _, d := range stats.durations { + if stats.min > int64(d) { + stats.min = int64(d) + } + if stats.max < int64(d) { + stats.max = int64(d) + } + } + + // Use the largest unit that can represent the minimum time duration. + stats.unit = time.Nanosecond + for _, u := range []time.Duration{time.Microsecond, time.Millisecond, time.Second} { + if stats.min <= int64(u) { + break + } + stats.unit = u + } + + // Adjust the min/max according to the new unit. + stats.min /= int64(stats.unit) + stats.max /= int64(stats.unit) + numBuckets := stats.numBuckets + if n := int(stats.max - stats.min + 1); n < numBuckets { + numBuckets = n + } + stats.histogram = NewHistogram(HistogramOptions{ + NumBuckets: numBuckets, + // max-min(lower bound of last bucket) = (1 + growthFactor)^(numBuckets-2) * baseBucketSize. + GrowthFactor: math.Pow(float64(stats.max-stats.min), 1/float64(numBuckets-2)) - 1, + BaseBucketSize: 1.0, + MinValue: stats.min}) + + for _, d := range stats.durations { + stats.histogram.Add(int64(d / stats.unit)) + } + + stats.dirty = false +} + +// Print writes textual output of the Stats. +func (stats *Stats) Print(w io.Writer) { + stats.maybeUpdate() + + if stats.histogram == nil { + fmt.Fprint(w, "Histogram (empty)\n") + } else { + fmt.Fprintf(w, "Histogram (unit: %s)\n", fmt.Sprintf("%v", stats.unit)[1:]) + stats.histogram.Print(w) + } +} + +// String returns the textual output of the Stats as string. +func (stats *Stats) String() string { + var b bytes.Buffer + stats.Print(&b) + return b.String() +} diff --git a/vendor/google.golang.org/grpc/benchmark/stats/util.go b/vendor/google.golang.org/grpc/benchmark/stats/util.go new file mode 100644 index 0000000..a9922f9 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/stats/util.go @@ -0,0 +1,191 @@ +package stats + +import ( + "bufio" + "bytes" + "fmt" + "os" + "runtime" + "sort" + "strings" + "sync" + "testing" +) + +var ( + curB *testing.B + curBenchName string + curStats map[string]*Stats + + orgStdout *os.File + nextOutPos int + + injectCond *sync.Cond + injectDone chan struct{} +) + +// AddStats adds a new unnamed Stats instance to the current benchmark. You need +// to run benchmarks by calling RunTestMain() to inject the stats to the +// benchmark results. If numBuckets is not positive, the default value (16) will +// be used. Please note that this calls b.ResetTimer() since it may be blocked +// until the previous benchmark stats is printed out. So AddStats() should +// typically be called at the very beginning of each benchmark function. +func AddStats(b *testing.B, numBuckets int) *Stats { + return AddStatsWithName(b, "", numBuckets) +} + +// AddStatsWithName adds a new named Stats instance to the current benchmark. +// With this, you can add multiple stats in a single benchmark. You need +// to run benchmarks by calling RunTestMain() to inject the stats to the +// benchmark results. If numBuckets is not positive, the default value (16) will +// be used. Please note that this calls b.ResetTimer() since it may be blocked +// until the previous benchmark stats is printed out. So AddStatsWithName() +// should typically be called at the very beginning of each benchmark function. +func AddStatsWithName(b *testing.B, name string, numBuckets int) *Stats { + var benchName string + for i := 1; ; i++ { + pc, _, _, ok := runtime.Caller(i) + if !ok { + panic("benchmark function not found") + } + p := strings.Split(runtime.FuncForPC(pc).Name(), ".") + benchName = p[len(p)-1] + if strings.HasPrefix(benchName, "Benchmark") { + break + } + } + procs := runtime.GOMAXPROCS(-1) + if procs != 1 { + benchName = fmt.Sprintf("%s-%d", benchName, procs) + } + + stats := NewStats(numBuckets) + + if injectCond != nil { + // We need to wait until the previous benchmark stats is printed out. + injectCond.L.Lock() + for curB != nil && curBenchName != benchName { + injectCond.Wait() + } + + curB = b + curBenchName = benchName + curStats[name] = stats + + injectCond.L.Unlock() + } + + b.ResetTimer() + return stats +} + +// RunTestMain runs the tests with enabling injection of benchmark stats. It +// returns an exit code to pass to os.Exit. +func RunTestMain(m *testing.M) int { + startStatsInjector() + defer stopStatsInjector() + return m.Run() +} + +// startStatsInjector starts stats injection to benchmark results. +func startStatsInjector() { + orgStdout = os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + nextOutPos = 0 + + resetCurBenchStats() + + injectCond = sync.NewCond(&sync.Mutex{}) + injectDone = make(chan struct{}) + go func() { + defer close(injectDone) + + scanner := bufio.NewScanner(r) + scanner.Split(splitLines) + for scanner.Scan() { + injectStatsIfFinished(scanner.Text()) + } + if err := scanner.Err(); err != nil { + panic(err) + } + }() +} + +// stopStatsInjector stops stats injection and restores os.Stdout. +func stopStatsInjector() { + os.Stdout.Close() + <-injectDone + injectCond = nil + os.Stdout = orgStdout +} + +// splitLines is a split function for a bufio.Scanner that returns each line +// of text, teeing texts to the original stdout even before each line ends. +func splitLines(data []byte, eof bool) (advance int, token []byte, err error) { + if eof && len(data) == 0 { + return 0, nil, nil + } + + if i := bytes.IndexByte(data, '\n'); i >= 0 { + orgStdout.Write(data[nextOutPos : i+1]) + nextOutPos = 0 + return i + 1, data[0:i], nil + } + + orgStdout.Write(data[nextOutPos:]) + nextOutPos = len(data) + + if eof { + // This is a final, non-terminated line. Return it. + return len(data), data, nil + } + + return 0, nil, nil +} + +// injectStatsIfFinished prints out the stats if the current benchmark finishes. +func injectStatsIfFinished(line string) { + injectCond.L.Lock() + defer injectCond.L.Unlock() + + // We assume that the benchmark results start with the benchmark name. + if curB == nil || !strings.HasPrefix(line, curBenchName) { + return + } + + if !curB.Failed() { + // Output all stats in alphabetical order. + names := make([]string, 0, len(curStats)) + for name := range curStats { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + stats := curStats[name] + // The output of stats starts with a header like "Histogram (unit: ms)" + // followed by statistical properties and the buckets. Add the stats name + // if it is a named stats and indent them as Go testing outputs. + lines := strings.Split(stats.String(), "\n") + if n := len(lines); n > 0 { + if name != "" { + name = ": " + name + } + fmt.Fprintf(orgStdout, "--- %s%s\n", lines[0], name) + for _, line := range lines[1 : n-1] { + fmt.Fprintf(orgStdout, "\t%s\n", line) + } + } + } + } + + resetCurBenchStats() + injectCond.Signal() +} + +// resetCurBenchStats resets the current benchmark stats. +func resetCurBenchStats() { + curB = nil + curBenchName = "" + curStats = make(map[string]*Stats) +} diff --git a/vendor/google.golang.org/grpc/benchmark/worker/benchmark_client.go b/vendor/google.golang.org/grpc/benchmark/worker/benchmark_client.go new file mode 100644 index 0000000..199bbe1 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/worker/benchmark_client.go @@ -0,0 +1,388 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "math" + "runtime" + "sync" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/benchmark" + testpb "google.golang.org/grpc/benchmark/grpc_testing" + "google.golang.org/grpc/benchmark/stats" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" +) + +var ( + caFile = "benchmark/server/testdata/ca.pem" +) + +type lockingHistogram struct { + mu sync.Mutex + histogram *stats.Histogram +} + +func (h *lockingHistogram) add(value int64) { + h.mu.Lock() + defer h.mu.Unlock() + h.histogram.Add(value) +} + +// swap sets h.histogram to new, and returns its old value. +func (h *lockingHistogram) swap(new *stats.Histogram) *stats.Histogram { + h.mu.Lock() + defer h.mu.Unlock() + old := h.histogram + h.histogram = new + return old +} + +func (h *lockingHistogram) mergeInto(merged *stats.Histogram) { + h.mu.Lock() + defer h.mu.Unlock() + merged.Merge(h.histogram) +} + +type benchmarkClient struct { + closeConns func() + stop chan bool + lastResetTime time.Time + histogramOptions stats.HistogramOptions + lockingHistograms []lockingHistogram +} + +func printClientConfig(config *testpb.ClientConfig) { + // Some config options are ignored: + // - client type: + // will always create sync client + // - async client threads. + // - core list + grpclog.Printf(" * client type: %v (ignored, always creates sync client)", config.ClientType) + grpclog.Printf(" * async client threads: %v (ignored)", config.AsyncClientThreads) + // TODO: use cores specified by CoreList when setting list of cores is supported in go. + grpclog.Printf(" * core list: %v (ignored)", config.CoreList) + + grpclog.Printf(" - security params: %v", config.SecurityParams) + grpclog.Printf(" - core limit: %v", config.CoreLimit) + grpclog.Printf(" - payload config: %v", config.PayloadConfig) + grpclog.Printf(" - rpcs per chann: %v", config.OutstandingRpcsPerChannel) + grpclog.Printf(" - channel number: %v", config.ClientChannels) + grpclog.Printf(" - load params: %v", config.LoadParams) + grpclog.Printf(" - rpc type: %v", config.RpcType) + grpclog.Printf(" - histogram params: %v", config.HistogramParams) + grpclog.Printf(" - server targets: %v", config.ServerTargets) +} + +func setupClientEnv(config *testpb.ClientConfig) { + // Use all cpu cores available on machine by default. + // TODO: Revisit this for the optimal default setup. + if config.CoreLimit > 0 { + runtime.GOMAXPROCS(int(config.CoreLimit)) + } else { + runtime.GOMAXPROCS(runtime.NumCPU()) + } +} + +// createConns creates connections according to given config. +// It returns the connections and corresponding function to close them. +// It returns non-nil error if there is anything wrong. +func createConns(config *testpb.ClientConfig) ([]*grpc.ClientConn, func(), error) { + var opts []grpc.DialOption + + // Sanity check for client type. + switch config.ClientType { + case testpb.ClientType_SYNC_CLIENT: + case testpb.ClientType_ASYNC_CLIENT: + default: + return nil, nil, grpc.Errorf(codes.InvalidArgument, "unknow client type: %v", config.ClientType) + } + + // Check and set security options. + if config.SecurityParams != nil { + creds, err := credentials.NewClientTLSFromFile(abs(caFile), config.SecurityParams.ServerHostOverride) + if err != nil { + return nil, nil, grpc.Errorf(codes.InvalidArgument, "failed to create TLS credentials %v", err) + } + opts = append(opts, grpc.WithTransportCredentials(creds)) + } else { + opts = append(opts, grpc.WithInsecure()) + } + + // Use byteBufCodec if it is required. + if config.PayloadConfig != nil { + switch config.PayloadConfig.Payload.(type) { + case *testpb.PayloadConfig_BytebufParams: + opts = append(opts, grpc.WithCodec(byteBufCodec{})) + case *testpb.PayloadConfig_SimpleParams: + default: + return nil, nil, grpc.Errorf(codes.InvalidArgument, "unknow payload config: %v", config.PayloadConfig) + } + } + + // Create connections. + connCount := int(config.ClientChannels) + conns := make([]*grpc.ClientConn, connCount, connCount) + for connIndex := 0; connIndex < connCount; connIndex++ { + conns[connIndex] = benchmark.NewClientConn(config.ServerTargets[connIndex%len(config.ServerTargets)], opts...) + } + + return conns, func() { + for _, conn := range conns { + conn.Close() + } + }, nil +} + +func performRPCs(config *testpb.ClientConfig, conns []*grpc.ClientConn, bc *benchmarkClient) error { + // Read payload size and type from config. + var ( + payloadReqSize, payloadRespSize int + payloadType string + ) + if config.PayloadConfig != nil { + switch c := config.PayloadConfig.Payload.(type) { + case *testpb.PayloadConfig_BytebufParams: + payloadReqSize = int(c.BytebufParams.ReqSize) + payloadRespSize = int(c.BytebufParams.RespSize) + payloadType = "bytebuf" + case *testpb.PayloadConfig_SimpleParams: + payloadReqSize = int(c.SimpleParams.ReqSize) + payloadRespSize = int(c.SimpleParams.RespSize) + payloadType = "protobuf" + default: + return grpc.Errorf(codes.InvalidArgument, "unknow payload config: %v", config.PayloadConfig) + } + } + + // TODO add open loop distribution. + switch config.LoadParams.Load.(type) { + case *testpb.LoadParams_ClosedLoop: + case *testpb.LoadParams_Poisson: + return grpc.Errorf(codes.Unimplemented, "unsupported load params: %v", config.LoadParams) + default: + return grpc.Errorf(codes.InvalidArgument, "unknown load params: %v", config.LoadParams) + } + + rpcCountPerConn := int(config.OutstandingRpcsPerChannel) + + switch config.RpcType { + case testpb.RpcType_UNARY: + bc.doCloseLoopUnary(conns, rpcCountPerConn, payloadReqSize, payloadRespSize) + // TODO open loop. + case testpb.RpcType_STREAMING: + bc.doCloseLoopStreaming(conns, rpcCountPerConn, payloadReqSize, payloadRespSize, payloadType) + // TODO open loop. + default: + return grpc.Errorf(codes.InvalidArgument, "unknown rpc type: %v", config.RpcType) + } + + return nil +} + +func startBenchmarkClient(config *testpb.ClientConfig) (*benchmarkClient, error) { + printClientConfig(config) + + // Set running environment like how many cores to use. + setupClientEnv(config) + + conns, closeConns, err := createConns(config) + if err != nil { + return nil, err + } + + rpcCountPerConn := int(config.OutstandingRpcsPerChannel) + bc := &benchmarkClient{ + histogramOptions: stats.HistogramOptions{ + NumBuckets: int(math.Log(config.HistogramParams.MaxPossible)/math.Log(1+config.HistogramParams.Resolution)) + 1, + GrowthFactor: config.HistogramParams.Resolution, + BaseBucketSize: (1 + config.HistogramParams.Resolution), + MinValue: 0, + }, + lockingHistograms: make([]lockingHistogram, rpcCountPerConn*len(conns), rpcCountPerConn*len(conns)), + + stop: make(chan bool), + lastResetTime: time.Now(), + closeConns: closeConns, + } + + if err = performRPCs(config, conns, bc); err != nil { + // Close all connections if performRPCs failed. + closeConns() + return nil, err + } + + return bc, nil +} + +func (bc *benchmarkClient) doCloseLoopUnary(conns []*grpc.ClientConn, rpcCountPerConn int, reqSize int, respSize int) { + for ic, conn := range conns { + client := testpb.NewBenchmarkServiceClient(conn) + // For each connection, create rpcCountPerConn goroutines to do rpc. + for j := 0; j < rpcCountPerConn; j++ { + // Create histogram for each goroutine. + idx := ic*rpcCountPerConn + j + bc.lockingHistograms[idx].histogram = stats.NewHistogram(bc.histogramOptions) + // Start goroutine on the created mutex and histogram. + go func(idx int) { + // TODO: do warm up if necessary. + // Now relying on worker client to reserve time to do warm up. + // The worker client needs to wait for some time after client is created, + // before starting benchmark. + done := make(chan bool) + for { + go func() { + start := time.Now() + if err := benchmark.DoUnaryCall(client, reqSize, respSize); err != nil { + select { + case <-bc.stop: + case done <- false: + } + return + } + elapse := time.Since(start) + bc.lockingHistograms[idx].add(int64(elapse)) + select { + case <-bc.stop: + case done <- true: + } + }() + select { + case <-bc.stop: + return + case <-done: + } + } + }(idx) + } + } +} + +func (bc *benchmarkClient) doCloseLoopStreaming(conns []*grpc.ClientConn, rpcCountPerConn int, reqSize int, respSize int, payloadType string) { + var doRPC func(testpb.BenchmarkService_StreamingCallClient, int, int) error + if payloadType == "bytebuf" { + doRPC = benchmark.DoByteBufStreamingRoundTrip + } else { + doRPC = benchmark.DoStreamingRoundTrip + } + for ic, conn := range conns { + // For each connection, create rpcCountPerConn goroutines to do rpc. + for j := 0; j < rpcCountPerConn; j++ { + c := testpb.NewBenchmarkServiceClient(conn) + stream, err := c.StreamingCall(context.Background()) + if err != nil { + grpclog.Fatalf("%v.StreamingCall(_) = _, %v", c, err) + } + // Create histogram for each goroutine. + idx := ic*rpcCountPerConn + j + bc.lockingHistograms[idx].histogram = stats.NewHistogram(bc.histogramOptions) + // Start goroutine on the created mutex and histogram. + go func(idx int) { + // TODO: do warm up if necessary. + // Now relying on worker client to reserve time to do warm up. + // The worker client needs to wait for some time after client is created, + // before starting benchmark. + for { + start := time.Now() + if err := doRPC(stream, reqSize, respSize); err != nil { + return + } + elapse := time.Since(start) + bc.lockingHistograms[idx].add(int64(elapse)) + select { + case <-bc.stop: + return + default: + } + } + }(idx) + } + } +} + +// getStats returns the stats for benchmark client. +// It resets lastResetTime and all histograms if argument reset is true. +func (bc *benchmarkClient) getStats(reset bool) *testpb.ClientStats { + var timeElapsed float64 + mergedHistogram := stats.NewHistogram(bc.histogramOptions) + + if reset { + // Merging histogram may take some time. + // Put all histograms aside and merge later. + toMerge := make([]*stats.Histogram, len(bc.lockingHistograms), len(bc.lockingHistograms)) + for i := range bc.lockingHistograms { + toMerge[i] = bc.lockingHistograms[i].swap(stats.NewHistogram(bc.histogramOptions)) + } + + for i := 0; i < len(toMerge); i++ { + mergedHistogram.Merge(toMerge[i]) + } + + timeElapsed = time.Since(bc.lastResetTime).Seconds() + bc.lastResetTime = time.Now() + } else { + // Merge only, not reset. + for i := range bc.lockingHistograms { + bc.lockingHistograms[i].mergeInto(mergedHistogram) + } + timeElapsed = time.Since(bc.lastResetTime).Seconds() + } + + b := make([]uint32, len(mergedHistogram.Buckets), len(mergedHistogram.Buckets)) + for i, v := range mergedHistogram.Buckets { + b[i] = uint32(v.Count) + } + return &testpb.ClientStats{ + Latencies: &testpb.HistogramData{ + Bucket: b, + MinSeen: float64(mergedHistogram.Min), + MaxSeen: float64(mergedHistogram.Max), + Sum: float64(mergedHistogram.Sum), + SumOfSquares: float64(mergedHistogram.SumOfSquares), + Count: float64(mergedHistogram.Count), + }, + TimeElapsed: timeElapsed, + TimeUser: 0, + TimeSystem: 0, + } +} + +func (bc *benchmarkClient) shutdown() { + close(bc.stop) + bc.closeConns() +} diff --git a/vendor/google.golang.org/grpc/benchmark/worker/benchmark_server.go b/vendor/google.golang.org/grpc/benchmark/worker/benchmark_server.go new file mode 100644 index 0000000..667ef2c --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/worker/benchmark_server.go @@ -0,0 +1,173 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "runtime" + "strconv" + "strings" + "sync" + "time" + + "google.golang.org/grpc" + "google.golang.org/grpc/benchmark" + testpb "google.golang.org/grpc/benchmark/grpc_testing" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" +) + +var ( + // File path related to google.golang.org/grpc. + certFile = "benchmark/server/testdata/server1.pem" + keyFile = "benchmark/server/testdata/server1.key" +) + +type benchmarkServer struct { + port int + cores int + closeFunc func() + mu sync.RWMutex + lastResetTime time.Time +} + +func printServerConfig(config *testpb.ServerConfig) { + // Some config options are ignored: + // - server type: + // will always start sync server + // - async server threads + // - core list + grpclog.Printf(" * server type: %v (ignored, always starts sync server)", config.ServerType) + grpclog.Printf(" * async server threads: %v (ignored)", config.AsyncServerThreads) + // TODO: use cores specified by CoreList when setting list of cores is supported in go. + grpclog.Printf(" * core list: %v (ignored)", config.CoreList) + + grpclog.Printf(" - security params: %v", config.SecurityParams) + grpclog.Printf(" - core limit: %v", config.CoreLimit) + grpclog.Printf(" - port: %v", config.Port) + grpclog.Printf(" - payload config: %v", config.PayloadConfig) +} + +func startBenchmarkServer(config *testpb.ServerConfig, serverPort int) (*benchmarkServer, error) { + printServerConfig(config) + + // Use all cpu cores available on machine by default. + // TODO: Revisit this for the optimal default setup. + numOfCores := runtime.NumCPU() + if config.CoreLimit > 0 { + numOfCores = int(config.CoreLimit) + } + runtime.GOMAXPROCS(numOfCores) + + var opts []grpc.ServerOption + + // Sanity check for server type. + switch config.ServerType { + case testpb.ServerType_SYNC_SERVER: + case testpb.ServerType_ASYNC_SERVER: + case testpb.ServerType_ASYNC_GENERIC_SERVER: + default: + return nil, grpc.Errorf(codes.InvalidArgument, "unknow server type: %v", config.ServerType) + } + + // Set security options. + if config.SecurityParams != nil { + creds, err := credentials.NewServerTLSFromFile(abs(certFile), abs(keyFile)) + if err != nil { + grpclog.Fatalf("failed to generate credentials %v", err) + } + opts = append(opts, grpc.Creds(creds)) + } + + // Priority: config.Port > serverPort > default (0). + port := int(config.Port) + if port == 0 { + port = serverPort + } + + // Create different benchmark server according to config. + var ( + addr string + closeFunc func() + err error + ) + if config.PayloadConfig != nil { + switch payload := config.PayloadConfig.Payload.(type) { + case *testpb.PayloadConfig_BytebufParams: + opts = append(opts, grpc.CustomCodec(byteBufCodec{})) + addr, closeFunc = benchmark.StartServer(benchmark.ServerInfo{ + Addr: ":" + strconv.Itoa(port), + Type: "bytebuf", + Metadata: payload.BytebufParams.RespSize, + }, opts...) + case *testpb.PayloadConfig_SimpleParams: + addr, closeFunc = benchmark.StartServer(benchmark.ServerInfo{ + Addr: ":" + strconv.Itoa(port), + Type: "protobuf", + }, opts...) + case *testpb.PayloadConfig_ComplexParams: + return nil, grpc.Errorf(codes.Unimplemented, "unsupported payload config: %v", config.PayloadConfig) + default: + return nil, grpc.Errorf(codes.InvalidArgument, "unknow payload config: %v", config.PayloadConfig) + } + } else { + // Start protobuf server if payload config is nil. + addr, closeFunc = benchmark.StartServer(benchmark.ServerInfo{ + Addr: ":" + strconv.Itoa(port), + Type: "protobuf", + }, opts...) + } + + grpclog.Printf("benchmark server listening at %v", addr) + addrSplitted := strings.Split(addr, ":") + p, err := strconv.Atoi(addrSplitted[len(addrSplitted)-1]) + if err != nil { + grpclog.Fatalf("failed to get port number from server address: %v", err) + } + + return &benchmarkServer{port: p, cores: numOfCores, closeFunc: closeFunc, lastResetTime: time.Now()}, nil +} + +// getStats returns the stats for benchmark server. +// It resets lastResetTime if argument reset is true. +func (bs *benchmarkServer) getStats(reset bool) *testpb.ServerStats { + // TODO wall time, sys time, user time. + bs.mu.RLock() + defer bs.mu.RUnlock() + timeElapsed := time.Since(bs.lastResetTime).Seconds() + if reset { + bs.lastResetTime = time.Now() + } + return &testpb.ServerStats{TimeElapsed: timeElapsed, TimeUser: 0, TimeSystem: 0} +} diff --git a/vendor/google.golang.org/grpc/benchmark/worker/main.go b/vendor/google.golang.org/grpc/benchmark/worker/main.go new file mode 100644 index 0000000..17c5251 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/worker/main.go @@ -0,0 +1,231 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "flag" + "fmt" + "io" + "net" + "runtime" + "strconv" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + testpb "google.golang.org/grpc/benchmark/grpc_testing" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" +) + +var ( + driverPort = flag.Int("driver_port", 10000, "port for communication with driver") + serverPort = flag.Int("server_port", 0, "port for benchmark server if not specified by server config message") +) + +type byteBufCodec struct { +} + +func (byteBufCodec) Marshal(v interface{}) ([]byte, error) { + b, ok := v.(*[]byte) + if !ok { + return nil, fmt.Errorf("failed to marshal: %v is not type of *[]byte", v) + } + return *b, nil +} + +func (byteBufCodec) Unmarshal(data []byte, v interface{}) error { + b, ok := v.(*[]byte) + if !ok { + return fmt.Errorf("failed to marshal: %v is not type of *[]byte", v) + } + *b = data + return nil +} + +func (byteBufCodec) String() string { + return "bytebuffer" +} + +// workerServer implements WorkerService rpc handlers. +// It can create benchmarkServer or benchmarkClient on demand. +type workerServer struct { + stop chan<- bool + serverPort int +} + +func (s *workerServer) RunServer(stream testpb.WorkerService_RunServerServer) error { + var bs *benchmarkServer + defer func() { + // Close benchmark server when stream ends. + grpclog.Printf("closing benchmark server") + if bs != nil { + bs.closeFunc() + } + }() + for { + in, err := stream.Recv() + if err == io.EOF { + return nil + } + if err != nil { + return err + } + + var out *testpb.ServerStatus + switch argtype := in.Argtype.(type) { + case *testpb.ServerArgs_Setup: + grpclog.Printf("server setup received:") + if bs != nil { + grpclog.Printf("server setup received when server already exists, closing the existing server") + bs.closeFunc() + } + bs, err = startBenchmarkServer(argtype.Setup, s.serverPort) + if err != nil { + return err + } + out = &testpb.ServerStatus{ + Stats: bs.getStats(false), + Port: int32(bs.port), + Cores: int32(bs.cores), + } + + case *testpb.ServerArgs_Mark: + grpclog.Printf("server mark received:") + grpclog.Printf(" - %v", argtype) + if bs == nil { + return grpc.Errorf(codes.InvalidArgument, "server does not exist when mark received") + } + out = &testpb.ServerStatus{ + Stats: bs.getStats(argtype.Mark.Reset_), + Port: int32(bs.port), + Cores: int32(bs.cores), + } + } + + if err := stream.Send(out); err != nil { + return err + } + } +} + +func (s *workerServer) RunClient(stream testpb.WorkerService_RunClientServer) error { + var bc *benchmarkClient + defer func() { + // Shut down benchmark client when stream ends. + grpclog.Printf("shuting down benchmark client") + if bc != nil { + bc.shutdown() + } + }() + for { + in, err := stream.Recv() + if err == io.EOF { + return nil + } + if err != nil { + return err + } + + var out *testpb.ClientStatus + switch t := in.Argtype.(type) { + case *testpb.ClientArgs_Setup: + grpclog.Printf("client setup received:") + if bc != nil { + grpclog.Printf("client setup received when client already exists, shuting down the existing client") + bc.shutdown() + } + bc, err = startBenchmarkClient(t.Setup) + if err != nil { + return err + } + out = &testpb.ClientStatus{ + Stats: bc.getStats(false), + } + + case *testpb.ClientArgs_Mark: + grpclog.Printf("client mark received:") + grpclog.Printf(" - %v", t) + if bc == nil { + return grpc.Errorf(codes.InvalidArgument, "client does not exist when mark received") + } + out = &testpb.ClientStatus{ + Stats: bc.getStats(t.Mark.Reset_), + } + } + + if err := stream.Send(out); err != nil { + return err + } + } +} + +func (s *workerServer) CoreCount(ctx context.Context, in *testpb.CoreRequest) (*testpb.CoreResponse, error) { + grpclog.Printf("core count: %v", runtime.NumCPU()) + return &testpb.CoreResponse{Cores: int32(runtime.NumCPU())}, nil +} + +func (s *workerServer) QuitWorker(ctx context.Context, in *testpb.Void) (*testpb.Void, error) { + grpclog.Printf("quiting worker") + s.stop <- true + return &testpb.Void{}, nil +} + +func main() { + grpc.EnableTracing = false + + flag.Parse() + lis, err := net.Listen("tcp", ":"+strconv.Itoa(*driverPort)) + if err != nil { + grpclog.Fatalf("failed to listen: %v", err) + } + grpclog.Printf("worker listening at port %v", *driverPort) + + s := grpc.NewServer() + stop := make(chan bool) + testpb.RegisterWorkerServiceServer(s, &workerServer{ + stop: stop, + serverPort: *serverPort, + }) + + go func() { + <-stop + // Wait for 1 second before stopping the server to make sure the return value of QuitWorker is sent to client. + // TODO revise this once server graceful stop is supported in gRPC. + time.Sleep(time.Second) + s.Stop() + }() + + s.Serve(lis) +} diff --git a/vendor/google.golang.org/grpc/benchmark/worker/util.go b/vendor/google.golang.org/grpc/benchmark/worker/util.go new file mode 100644 index 0000000..f0016ce --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/worker/util.go @@ -0,0 +1,75 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "log" + "os" + "path/filepath" +) + +// abs returns the absolute path the given relative file or directory path, +// relative to the google.golang.org/grpc directory in the user's GOPATH. +// If rel is already absolute, it is returned unmodified. +func abs(rel string) string { + if filepath.IsAbs(rel) { + return rel + } + v, err := goPackagePath("google.golang.org/grpc") + if err != nil { + log.Fatalf("Error finding google.golang.org/grpc/testdata directory: %v", err) + } + return filepath.Join(v, rel) +} + +func goPackagePath(pkg string) (path string, err error) { + gp := os.Getenv("GOPATH") + if gp == "" { + return path, os.ErrNotExist + } + for _, p := range filepath.SplitList(gp) { + dir := filepath.Join(p, "src", filepath.FromSlash(pkg)) + fi, err := os.Stat(dir) + if os.IsNotExist(err) { + continue + } + if err != nil { + return "", err + } + if !fi.IsDir() { + continue + } + return dir, nil + } + return path, os.ErrNotExist +} diff --git a/vendor/google.golang.org/grpc/call.go b/vendor/google.golang.org/grpc/call.go new file mode 100644 index 0000000..c1588c6 --- /dev/null +++ b/vendor/google.golang.org/grpc/call.go @@ -0,0 +1,289 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "io" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/trace" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/stats" + "google.golang.org/grpc/transport" +) + +// recvResponse receives and parses an RPC response. +// On error, it returns the error and indicates whether the call should be retried. +// +// TODO(zhaoq): Check whether the received message sequence is valid. +// TODO ctx is used for stats collection and processing. It is the context passed from the application. +func recvResponse(ctx context.Context, dopts dialOptions, t transport.ClientTransport, c *callInfo, stream *transport.Stream, reply interface{}) (err error) { + // Try to acquire header metadata from the server if there is any. + defer func() { + if err != nil { + if _, ok := err.(transport.ConnectionError); !ok { + t.CloseStream(stream, err) + } + } + }() + c.headerMD, err = stream.Header() + if err != nil { + return + } + p := &parser{r: stream} + var inPayload *stats.InPayload + if dopts.copts.StatsHandler != nil { + inPayload = &stats.InPayload{ + Client: true, + } + } + for { + if err = recv(p, dopts.codec, stream, dopts.dc, reply, dopts.maxMsgSize, inPayload); err != nil { + if err == io.EOF { + break + } + return + } + } + if inPayload != nil && err == io.EOF && stream.StatusCode() == codes.OK { + // TODO in the current implementation, inTrailer may be handled before inPayload in some cases. + // Fix the order if necessary. + dopts.copts.StatsHandler.HandleRPC(ctx, inPayload) + } + c.trailerMD = stream.Trailer() + if peer, ok := peer.FromContext(stream.Context()); ok { + c.peer = peer + } + return nil +} + +// sendRequest writes out various information of an RPC such as Context and Message. +func sendRequest(ctx context.Context, dopts dialOptions, compressor Compressor, callHdr *transport.CallHdr, t transport.ClientTransport, args interface{}, opts *transport.Options) (_ *transport.Stream, err error) { + stream, err := t.NewStream(ctx, callHdr) + if err != nil { + return nil, err + } + defer func() { + if err != nil { + // If err is connection error, t will be closed, no need to close stream here. + if _, ok := err.(transport.ConnectionError); !ok { + t.CloseStream(stream, err) + } + } + }() + var ( + cbuf *bytes.Buffer + outPayload *stats.OutPayload + ) + if compressor != nil { + cbuf = new(bytes.Buffer) + } + if dopts.copts.StatsHandler != nil { + outPayload = &stats.OutPayload{ + Client: true, + } + } + outBuf, err := encode(dopts.codec, args, compressor, cbuf, outPayload) + if err != nil { + return nil, Errorf(codes.Internal, "grpc: %v", err) + } + err = t.Write(stream, outBuf, opts) + if err == nil && outPayload != nil { + outPayload.SentTime = time.Now() + dopts.copts.StatsHandler.HandleRPC(ctx, outPayload) + } + // t.NewStream(...) could lead to an early rejection of the RPC (e.g., the service/method + // does not exist.) so that t.Write could get io.EOF from wait(...). Leave the following + // recvResponse to get the final status. + if err != nil && err != io.EOF { + return nil, err + } + // Sent successfully. + return stream, nil +} + +// Invoke sends the RPC request on the wire and returns after response is received. +// Invoke is called by generated code. Also users can call Invoke directly when it +// is really needed in their use cases. +func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) error { + if cc.dopts.unaryInt != nil { + return cc.dopts.unaryInt(ctx, method, args, reply, cc, invoke, opts...) + } + return invoke(ctx, method, args, reply, cc, opts...) +} + +func invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) (e error) { + c := defaultCallInfo + if mc, ok := cc.getMethodConfig(method); ok { + c.failFast = !mc.WaitForReady + if mc.Timeout > 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, mc.Timeout) + defer cancel() + } + } + for _, o := range opts { + if err := o.before(&c); err != nil { + return toRPCErr(err) + } + } + defer func() { + for _, o := range opts { + o.after(&c) + } + }() + if EnableTracing { + c.traceInfo.tr = trace.New("grpc.Sent."+methodFamily(method), method) + defer c.traceInfo.tr.Finish() + c.traceInfo.firstLine.client = true + if deadline, ok := ctx.Deadline(); ok { + c.traceInfo.firstLine.deadline = deadline.Sub(time.Now()) + } + c.traceInfo.tr.LazyLog(&c.traceInfo.firstLine, false) + // TODO(dsymonds): Arrange for c.traceInfo.firstLine.remoteAddr to be set. + defer func() { + if e != nil { + c.traceInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{e}}, true) + c.traceInfo.tr.SetError() + } + }() + } + sh := cc.dopts.copts.StatsHandler + if sh != nil { + ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method}) + begin := &stats.Begin{ + Client: true, + BeginTime: time.Now(), + FailFast: c.failFast, + } + sh.HandleRPC(ctx, begin) + } + defer func() { + if sh != nil { + end := &stats.End{ + Client: true, + EndTime: time.Now(), + Error: e, + } + sh.HandleRPC(ctx, end) + } + }() + topts := &transport.Options{ + Last: true, + Delay: false, + } + for { + var ( + err error + t transport.ClientTransport + stream *transport.Stream + // Record the put handler from Balancer.Get(...). It is called once the + // RPC has completed or failed. + put func() + ) + // TODO(zhaoq): Need a formal spec of fail-fast. + callHdr := &transport.CallHdr{ + Host: cc.authority, + Method: method, + } + if cc.dopts.cp != nil { + callHdr.SendCompress = cc.dopts.cp.Type() + } + + gopts := BalancerGetOptions{ + BlockingWait: !c.failFast, + } + t, put, err = cc.getTransport(ctx, gopts) + if err != nil { + // TODO(zhaoq): Probably revisit the error handling. + if _, ok := err.(*rpcError); ok { + return err + } + if err == errConnClosing || err == errConnUnavailable { + if c.failFast { + return Errorf(codes.Unavailable, "%v", err) + } + continue + } + // All the other errors are treated as Internal errors. + return Errorf(codes.Internal, "%v", err) + } + if c.traceInfo.tr != nil { + c.traceInfo.tr.LazyLog(&payload{sent: true, msg: args}, true) + } + stream, err = sendRequest(ctx, cc.dopts, cc.dopts.cp, callHdr, t, args, topts) + if err != nil { + if put != nil { + put() + put = nil + } + // Retry a non-failfast RPC when + // i) there is a connection error; or + // ii) the server started to drain before this RPC was initiated. + if _, ok := err.(transport.ConnectionError); ok || err == transport.ErrStreamDrain { + if c.failFast { + return toRPCErr(err) + } + continue + } + return toRPCErr(err) + } + err = recvResponse(ctx, cc.dopts, t, &c, stream, reply) + if err != nil { + if put != nil { + put() + put = nil + } + if _, ok := err.(transport.ConnectionError); ok || err == transport.ErrStreamDrain { + if c.failFast { + return toRPCErr(err) + } + continue + } + return toRPCErr(err) + } + if c.traceInfo.tr != nil { + c.traceInfo.tr.LazyLog(&payload{sent: false, msg: reply}, true) + } + t.CloseStream(stream, nil) + if put != nil { + put() + put = nil + } + return Errorf(stream.StatusCode(), "%s", stream.StatusDesc()) + } +} diff --git a/vendor/google.golang.org/grpc/call_test.go b/vendor/google.golang.org/grpc/call_test.go new file mode 100644 index 0000000..3c2165e --- /dev/null +++ b/vendor/google.golang.org/grpc/call_test.go @@ -0,0 +1,298 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "fmt" + "io" + "math" + "net" + "strconv" + "strings" + "sync" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/transport" +) + +var ( + expectedRequest = "ping" + expectedResponse = "pong" + weirdError = "format verbs: %v%s" + sizeLargeErr = 1024 * 1024 + canceled = 0 +) + +type testCodec struct { +} + +func (testCodec) Marshal(v interface{}) ([]byte, error) { + return []byte(*(v.(*string))), nil +} + +func (testCodec) Unmarshal(data []byte, v interface{}) error { + *(v.(*string)) = string(data) + return nil +} + +func (testCodec) String() string { + return "test" +} + +type testStreamHandler struct { + port string + t transport.ServerTransport +} + +func (h *testStreamHandler) handleStream(t *testing.T, s *transport.Stream) { + p := &parser{r: s} + for { + pf, req, err := p.recvMsg(math.MaxInt32) + if err == io.EOF { + break + } + if err != nil { + return + } + if pf != compressionNone { + t.Errorf("Received the mistaken message format %d, want %d", pf, compressionNone) + return + } + var v string + codec := testCodec{} + if err := codec.Unmarshal(req, &v); err != nil { + t.Errorf("Failed to unmarshal the received message: %v", err) + return + } + if v == "weird error" { + h.t.WriteStatus(s, codes.Internal, weirdError) + return + } + if v == "canceled" { + canceled++ + h.t.WriteStatus(s, codes.Internal, "") + return + } + if v == "port" { + h.t.WriteStatus(s, codes.Internal, h.port) + return + } + + if v != expectedRequest { + h.t.WriteStatus(s, codes.Internal, strings.Repeat("A", sizeLargeErr)) + return + } + } + // send a response back to end the stream. + reply, err := encode(testCodec{}, &expectedResponse, nil, nil, nil) + if err != nil { + t.Errorf("Failed to encode the response: %v", err) + return + } + h.t.Write(s, reply, &transport.Options{}) + h.t.WriteStatus(s, codes.OK, "") +} + +type server struct { + lis net.Listener + port string + startedErr chan error // sent nil or an error after server starts + mu sync.Mutex + conns map[transport.ServerTransport]bool +} + +func newTestServer() *server { + return &server{startedErr: make(chan error, 1)} +} + +// start starts server. Other goroutines should block on s.startedErr for further operations. +func (s *server) start(t *testing.T, port int, maxStreams uint32) { + var err error + if port == 0 { + s.lis, err = net.Listen("tcp", "localhost:0") + } else { + s.lis, err = net.Listen("tcp", "localhost:"+strconv.Itoa(port)) + } + if err != nil { + s.startedErr <- fmt.Errorf("failed to listen: %v", err) + return + } + _, p, err := net.SplitHostPort(s.lis.Addr().String()) + if err != nil { + s.startedErr <- fmt.Errorf("failed to parse listener address: %v", err) + return + } + s.port = p + s.conns = make(map[transport.ServerTransport]bool) + s.startedErr <- nil + for { + conn, err := s.lis.Accept() + if err != nil { + return + } + config := &transport.ServerConfig{ + MaxStreams: maxStreams, + } + st, err := transport.NewServerTransport("http2", conn, config) + if err != nil { + continue + } + s.mu.Lock() + if s.conns == nil { + s.mu.Unlock() + st.Close() + return + } + s.conns[st] = true + s.mu.Unlock() + h := &testStreamHandler{ + port: s.port, + t: st, + } + go st.HandleStreams(func(s *transport.Stream) { + go h.handleStream(t, s) + }, func(ctx context.Context, method string) context.Context { + return ctx + }) + } +} + +func (s *server) wait(t *testing.T, timeout time.Duration) { + select { + case err := <-s.startedErr: + if err != nil { + t.Fatal(err) + } + case <-time.After(timeout): + t.Fatalf("Timed out after %v waiting for server to be ready", timeout) + } +} + +func (s *server) stop() { + s.lis.Close() + s.mu.Lock() + for c := range s.conns { + c.Close() + } + s.conns = nil + s.mu.Unlock() +} + +func setUp(t *testing.T, port int, maxStreams uint32) (*server, *ClientConn) { + server := newTestServer() + go server.start(t, port, maxStreams) + server.wait(t, 2*time.Second) + addr := "localhost:" + server.port + cc, err := Dial(addr, WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + return server, cc +} + +func TestInvoke(t *testing.T) { + server, cc := setUp(t, 0, math.MaxUint32) + var reply string + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc); err != nil || reply != expectedResponse { + t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want <nil>", err) + } + cc.Close() + server.stop() +} + +func TestInvokeLargeErr(t *testing.T) { + server, cc := setUp(t, 0, math.MaxUint32) + var reply string + req := "hello" + err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc) + if _, ok := err.(*rpcError); !ok { + t.Fatalf("grpc.Invoke(_, _, _, _, _) receives non rpc error.") + } + if Code(err) != codes.Internal || len(ErrorDesc(err)) != sizeLargeErr { + t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want an error of code %d and desc size %d", err, codes.Internal, sizeLargeErr) + } + cc.Close() + server.stop() +} + +// TestInvokeErrorSpecialChars checks that error messages don't get mangled. +func TestInvokeErrorSpecialChars(t *testing.T) { + server, cc := setUp(t, 0, math.MaxUint32) + var reply string + req := "weird error" + err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc) + if _, ok := err.(*rpcError); !ok { + t.Fatalf("grpc.Invoke(_, _, _, _, _) receives non rpc error.") + } + if got, want := ErrorDesc(err), weirdError; got != want { + t.Fatalf("grpc.Invoke(_, _, _, _, _) error = %q, want %q", got, want) + } + cc.Close() + server.stop() +} + +// TestInvokeCancel checks that an Invoke with a canceled context is not sent. +func TestInvokeCancel(t *testing.T) { + server, cc := setUp(t, 0, math.MaxUint32) + var reply string + req := "canceled" + for i := 0; i < 100; i++ { + ctx, cancel := context.WithCancel(context.Background()) + cancel() + Invoke(ctx, "/foo/bar", &req, &reply, cc) + } + if canceled != 0 { + t.Fatalf("received %d of 100 canceled requests", canceled) + } + cc.Close() + server.stop() +} + +// TestInvokeCancelClosedNonFail checks that a canceled non-failfast RPC +// on a closed client will terminate. +func TestInvokeCancelClosedNonFailFast(t *testing.T) { + server, cc := setUp(t, 0, math.MaxUint32) + var reply string + cc.Close() + req := "hello" + ctx, cancel := context.WithCancel(context.Background()) + cancel() + if err := Invoke(ctx, "/foo/bar", &req, &reply, cc, FailFast(false)); err == nil { + t.Fatalf("canceled invoke on closed connection should fail") + } + server.stop() +} diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go new file mode 100644 index 0000000..1ba592c --- /dev/null +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -0,0 +1,998 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "errors" + "fmt" + "math" + "net" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/trace" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/stats" + "google.golang.org/grpc/transport" +) + +var ( + // ErrClientConnClosing indicates that the operation is illegal because + // the ClientConn is closing. + ErrClientConnClosing = errors.New("grpc: the client connection is closing") + // ErrClientConnTimeout indicates that the ClientConn cannot establish the + // underlying connections within the specified timeout. + // DEPRECATED: Please use context.DeadlineExceeded instead. This error will be + // removed in Q1 2017. + ErrClientConnTimeout = errors.New("grpc: timed out when dialing") + + // errNoTransportSecurity indicates that there is no transport security + // being set for ClientConn. Users should either set one or explicitly + // call WithInsecure DialOption to disable security. + errNoTransportSecurity = errors.New("grpc: no transport security set (use grpc.WithInsecure() explicitly or set credentials)") + // errTransportCredentialsMissing indicates that users want to transmit security + // information (e.g., oauth2 token) which requires secure connection on an insecure + // connection. + errTransportCredentialsMissing = errors.New("grpc: the credentials require transport level security (use grpc.WithTransportCredentials() to set)") + // errCredentialsConflict indicates that grpc.WithTransportCredentials() + // and grpc.WithInsecure() are both called for a connection. + errCredentialsConflict = errors.New("grpc: transport credentials are set for an insecure connection (grpc.WithTransportCredentials() and grpc.WithInsecure() are both called)") + // errNetworkIO indicates that the connection is down due to some network I/O error. + errNetworkIO = errors.New("grpc: failed with network I/O error") + // errConnDrain indicates that the connection starts to be drained and does not accept any new RPCs. + errConnDrain = errors.New("grpc: the connection is drained") + // errConnClosing indicates that the connection is closing. + errConnClosing = errors.New("grpc: the connection is closing") + // errConnUnavailable indicates that the connection is unavailable. + errConnUnavailable = errors.New("grpc: the connection is unavailable") + errNoAddr = errors.New("grpc: there is no address available to dial") + // minimum time to give a connection to complete + minConnectTimeout = 20 * time.Second +) + +// dialOptions configure a Dial call. dialOptions are set by the DialOption +// values passed to Dial. +type dialOptions struct { + unaryInt UnaryClientInterceptor + streamInt StreamClientInterceptor + codec Codec + cp Compressor + dc Decompressor + bs backoffStrategy + balancer Balancer + block bool + insecure bool + timeout time.Duration + scChan <-chan ServiceConfig + copts transport.ConnectOptions + maxMsgSize int +} + +const defaultClientMaxMsgSize = math.MaxInt32 + +// DialOption configures how we set up the connection. +type DialOption func(*dialOptions) + +// WithMaxMsgSize returns a DialOption which sets the maximum message size the client can receive. +func WithMaxMsgSize(s int) DialOption { + return func(o *dialOptions) { + o.maxMsgSize = s + } +} + +// WithCodec returns a DialOption which sets a codec for message marshaling and unmarshaling. +func WithCodec(c Codec) DialOption { + return func(o *dialOptions) { + o.codec = c + } +} + +// WithCompressor returns a DialOption which sets a CompressorGenerator for generating message +// compressor. +func WithCompressor(cp Compressor) DialOption { + return func(o *dialOptions) { + o.cp = cp + } +} + +// WithDecompressor returns a DialOption which sets a DecompressorGenerator for generating +// message decompressor. +func WithDecompressor(dc Decompressor) DialOption { + return func(o *dialOptions) { + o.dc = dc + } +} + +// WithBalancer returns a DialOption which sets a load balancer. +func WithBalancer(b Balancer) DialOption { + return func(o *dialOptions) { + o.balancer = b + } +} + +// WithServiceConfig returns a DialOption which has a channel to read the service configuration. +func WithServiceConfig(c <-chan ServiceConfig) DialOption { + return func(o *dialOptions) { + o.scChan = c + } +} + +// WithBackoffMaxDelay configures the dialer to use the provided maximum delay +// when backing off after failed connection attempts. +func WithBackoffMaxDelay(md time.Duration) DialOption { + return WithBackoffConfig(BackoffConfig{MaxDelay: md}) +} + +// WithBackoffConfig configures the dialer to use the provided backoff +// parameters after connection failures. +// +// Use WithBackoffMaxDelay until more parameters on BackoffConfig are opened up +// for use. +func WithBackoffConfig(b BackoffConfig) DialOption { + // Set defaults to ensure that provided BackoffConfig is valid and + // unexported fields get default values. + setDefaults(&b) + return withBackoff(b) +} + +// withBackoff sets the backoff strategy used for retries after a +// failed connection attempt. +// +// This can be exported if arbitrary backoff strategies are allowed by gRPC. +func withBackoff(bs backoffStrategy) DialOption { + return func(o *dialOptions) { + o.bs = bs + } +} + +// WithBlock returns a DialOption which makes caller of Dial blocks until the underlying +// connection is up. Without this, Dial returns immediately and connecting the server +// happens in background. +func WithBlock() DialOption { + return func(o *dialOptions) { + o.block = true + } +} + +// WithInsecure returns a DialOption which disables transport security for this ClientConn. +// Note that transport security is required unless WithInsecure is set. +func WithInsecure() DialOption { + return func(o *dialOptions) { + o.insecure = true + } +} + +// WithTransportCredentials returns a DialOption which configures a +// connection level security credentials (e.g., TLS/SSL). +func WithTransportCredentials(creds credentials.TransportCredentials) DialOption { + return func(o *dialOptions) { + o.copts.TransportCredentials = creds + } +} + +// WithPerRPCCredentials returns a DialOption which sets +// credentials which will place auth state on each outbound RPC. +func WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption { + return func(o *dialOptions) { + o.copts.PerRPCCredentials = append(o.copts.PerRPCCredentials, creds) + } +} + +// WithTimeout returns a DialOption that configures a timeout for dialing a ClientConn +// initially. This is valid if and only if WithBlock() is present. +func WithTimeout(d time.Duration) DialOption { + return func(o *dialOptions) { + o.timeout = d + } +} + +// WithDialer returns a DialOption that specifies a function to use for dialing network addresses. +// If FailOnNonTempDialError() is set to true, and an error is returned by f, gRPC checks the error's +// Temporary() method to decide if it should try to reconnect to the network address. +func WithDialer(f func(string, time.Duration) (net.Conn, error)) DialOption { + return func(o *dialOptions) { + o.copts.Dialer = func(ctx context.Context, addr string) (net.Conn, error) { + if deadline, ok := ctx.Deadline(); ok { + return f(addr, deadline.Sub(time.Now())) + } + return f(addr, 0) + } + } +} + +// WithStatsHandler returns a DialOption that specifies the stats handler +// for all the RPCs and underlying network connections in this ClientConn. +func WithStatsHandler(h stats.Handler) DialOption { + return func(o *dialOptions) { + o.copts.StatsHandler = h + } +} + +// FailOnNonTempDialError returns a DialOption that specified if gRPC fails on non-temporary dial errors. +// If f is true, and dialer returns a non-temporary error, gRPC will fail the connection to the network +// address and won't try to reconnect. +// The default value of FailOnNonTempDialError is false. +// This is an EXPERIMENTAL API. +func FailOnNonTempDialError(f bool) DialOption { + return func(o *dialOptions) { + o.copts.FailOnNonTempDialError = f + } +} + +// WithUserAgent returns a DialOption that specifies a user agent string for all the RPCs. +func WithUserAgent(s string) DialOption { + return func(o *dialOptions) { + o.copts.UserAgent = s + } +} + +// WithKeepaliveParams returns a DialOption that specifies keepalive paramaters for the client transport. +func WithKeepaliveParams(kp keepalive.ClientParameters) DialOption { + return func(o *dialOptions) { + o.copts.KeepaliveParams = kp + } +} + +// WithUnaryInterceptor returns a DialOption that specifies the interceptor for unary RPCs. +func WithUnaryInterceptor(f UnaryClientInterceptor) DialOption { + return func(o *dialOptions) { + o.unaryInt = f + } +} + +// WithStreamInterceptor returns a DialOption that specifies the interceptor for streaming RPCs. +func WithStreamInterceptor(f StreamClientInterceptor) DialOption { + return func(o *dialOptions) { + o.streamInt = f + } +} + +// WithAuthority returns a DialOption that specifies the value to be used as +// the :authority pseudo-header. This value only works with WithInsecure and +// has no effect if TransportCredentials are present. +func WithAuthority(a string) DialOption { + return func(o *dialOptions) { + o.copts.Authority = a + } +} + +// Dial creates a client connection to the given target. +func Dial(target string, opts ...DialOption) (*ClientConn, error) { + return DialContext(context.Background(), target, opts...) +} + +// DialContext creates a client connection to the given target. ctx can be used to +// cancel or expire the pending connecting. Once this function returns, the +// cancellation and expiration of ctx will be noop. Users should call ClientConn.Close +// to terminate all the pending operations after this function returns. +// This is the EXPERIMENTAL API. +func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) { + cc := &ClientConn{ + target: target, + conns: make(map[Address]*addrConn), + } + cc.ctx, cc.cancel = context.WithCancel(context.Background()) + cc.dopts.maxMsgSize = defaultClientMaxMsgSize + for _, opt := range opts { + opt(&cc.dopts) + } + if cc.dopts.timeout > 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, cc.dopts.timeout) + defer cancel() + } + + defer func() { + select { + case <-ctx.Done(): + conn, err = nil, ctx.Err() + default: + } + + if err != nil { + cc.Close() + } + }() + + if cc.dopts.scChan != nil { + // Wait for the initial service config. + select { + case sc, ok := <-cc.dopts.scChan: + if ok { + cc.sc = sc + } + case <-ctx.Done(): + return nil, ctx.Err() + } + } + // Set defaults. + if cc.dopts.codec == nil { + cc.dopts.codec = protoCodec{} + } + if cc.dopts.bs == nil { + cc.dopts.bs = DefaultBackoffConfig + } + creds := cc.dopts.copts.TransportCredentials + if creds != nil && creds.Info().ServerName != "" { + cc.authority = creds.Info().ServerName + } else if cc.dopts.insecure && cc.dopts.copts.Authority != "" { + cc.authority = cc.dopts.copts.Authority + } else { + colonPos := strings.LastIndex(target, ":") + if colonPos == -1 { + colonPos = len(target) + } + cc.authority = target[:colonPos] + } + var ok bool + waitC := make(chan error, 1) + go func() { + var addrs []Address + if cc.dopts.balancer == nil && cc.sc.LB != nil { + cc.dopts.balancer = cc.sc.LB + } + if cc.dopts.balancer == nil { + // Connect to target directly if balancer is nil. + addrs = append(addrs, Address{Addr: target}) + } else { + var credsClone credentials.TransportCredentials + if creds != nil { + credsClone = creds.Clone() + } + config := BalancerConfig{ + DialCreds: credsClone, + } + if err := cc.dopts.balancer.Start(target, config); err != nil { + waitC <- err + return + } + ch := cc.dopts.balancer.Notify() + if ch == nil { + // There is no name resolver installed. + addrs = append(addrs, Address{Addr: target}) + } else { + addrs, ok = <-ch + if !ok || len(addrs) == 0 { + waitC <- errNoAddr + return + } + } + } + for _, a := range addrs { + if err := cc.resetAddrConn(a, false, nil); err != nil { + waitC <- err + return + } + } + close(waitC) + }() + select { + case <-ctx.Done(): + return nil, ctx.Err() + case err := <-waitC: + if err != nil { + return nil, err + } + } + + // If balancer is nil or balancer.Notify() is nil, ok will be false here. + // The lbWatcher goroutine will not be created. + if ok { + go cc.lbWatcher() + } + + if cc.dopts.scChan != nil { + go cc.scWatcher() + } + return cc, nil +} + +// ConnectivityState indicates the state of a client connection. +type ConnectivityState int + +const ( + // Idle indicates the ClientConn is idle. + Idle ConnectivityState = iota + // Connecting indicates the ClienConn is connecting. + Connecting + // Ready indicates the ClientConn is ready for work. + Ready + // TransientFailure indicates the ClientConn has seen a failure but expects to recover. + TransientFailure + // Shutdown indicates the ClientConn has started shutting down. + Shutdown +) + +func (s ConnectivityState) String() string { + switch s { + case Idle: + return "IDLE" + case Connecting: + return "CONNECTING" + case Ready: + return "READY" + case TransientFailure: + return "TRANSIENT_FAILURE" + case Shutdown: + return "SHUTDOWN" + default: + panic(fmt.Sprintf("unknown connectivity state: %d", s)) + } +} + +// ClientConn represents a client connection to an RPC server. +type ClientConn struct { + ctx context.Context + cancel context.CancelFunc + + target string + authority string + dopts dialOptions + + mu sync.RWMutex + sc ServiceConfig + conns map[Address]*addrConn +} + +func (cc *ClientConn) lbWatcher() { + for addrs := range cc.dopts.balancer.Notify() { + var ( + add []Address // Addresses need to setup connections. + del []*addrConn // Connections need to tear down. + ) + cc.mu.Lock() + for _, a := range addrs { + if _, ok := cc.conns[a]; !ok { + add = append(add, a) + } + } + for k, c := range cc.conns { + var keep bool + for _, a := range addrs { + if k == a { + keep = true + break + } + } + if !keep { + del = append(del, c) + delete(cc.conns, c.addr) + } + } + cc.mu.Unlock() + for _, a := range add { + cc.resetAddrConn(a, true, nil) + } + for _, c := range del { + c.tearDown(errConnDrain) + } + } +} + +func (cc *ClientConn) scWatcher() { + for { + select { + case sc, ok := <-cc.dopts.scChan: + if !ok { + return + } + cc.mu.Lock() + // TODO: load balance policy runtime change is ignored. + // We may revist this decision in the future. + cc.sc = sc + cc.mu.Unlock() + case <-cc.ctx.Done(): + return + } + } +} + +// resetAddrConn creates an addrConn for addr and adds it to cc.conns. +// If there is an old addrConn for addr, it will be torn down, using tearDownErr as the reason. +// If tearDownErr is nil, errConnDrain will be used instead. +func (cc *ClientConn) resetAddrConn(addr Address, skipWait bool, tearDownErr error) error { + ac := &addrConn{ + cc: cc, + addr: addr, + dopts: cc.dopts, + } + ac.ctx, ac.cancel = context.WithCancel(cc.ctx) + ac.stateCV = sync.NewCond(&ac.mu) + if EnableTracing { + ac.events = trace.NewEventLog("grpc.ClientConn", ac.addr.Addr) + } + if !ac.dopts.insecure { + if ac.dopts.copts.TransportCredentials == nil { + return errNoTransportSecurity + } + } else { + if ac.dopts.copts.TransportCredentials != nil { + return errCredentialsConflict + } + for _, cd := range ac.dopts.copts.PerRPCCredentials { + if cd.RequireTransportSecurity() { + return errTransportCredentialsMissing + } + } + } + // Track ac in cc. This needs to be done before any getTransport(...) is called. + cc.mu.Lock() + if cc.conns == nil { + cc.mu.Unlock() + return ErrClientConnClosing + } + stale := cc.conns[ac.addr] + cc.conns[ac.addr] = ac + cc.mu.Unlock() + if stale != nil { + // There is an addrConn alive on ac.addr already. This could be due to + // 1) a buggy Balancer notifies duplicated Addresses; + // 2) goaway was received, a new ac will replace the old ac. + // The old ac should be deleted from cc.conns, but the + // underlying transport should drain rather than close. + if tearDownErr == nil { + // tearDownErr is nil if resetAddrConn is called by + // 1) Dial + // 2) lbWatcher + // In both cases, the stale ac should drain, not close. + stale.tearDown(errConnDrain) + } else { + stale.tearDown(tearDownErr) + } + } + // skipWait may overwrite the decision in ac.dopts.block. + if ac.dopts.block && !skipWait { + if err := ac.resetTransport(false); err != nil { + if err != errConnClosing { + // Tear down ac and delete it from cc.conns. + cc.mu.Lock() + delete(cc.conns, ac.addr) + cc.mu.Unlock() + ac.tearDown(err) + } + if e, ok := err.(transport.ConnectionError); ok && !e.Temporary() { + return e.Origin() + } + return err + } + // Start to monitor the error status of transport. + go ac.transportMonitor() + } else { + // Start a goroutine connecting to the server asynchronously. + go func() { + if err := ac.resetTransport(false); err != nil { + grpclog.Printf("Failed to dial %s: %v; please retry.", ac.addr.Addr, err) + if err != errConnClosing { + // Keep this ac in cc.conns, to get the reason it's torn down. + ac.tearDown(err) + } + return + } + ac.transportMonitor() + }() + } + return nil +} + +// TODO: Avoid the locking here. +func (cc *ClientConn) getMethodConfig(method string) (m MethodConfig, ok bool) { + cc.mu.RLock() + defer cc.mu.RUnlock() + m, ok = cc.sc.Methods[method] + return +} + +func (cc *ClientConn) getTransport(ctx context.Context, opts BalancerGetOptions) (transport.ClientTransport, func(), error) { + var ( + ac *addrConn + ok bool + put func() + ) + if cc.dopts.balancer == nil { + // If balancer is nil, there should be only one addrConn available. + cc.mu.RLock() + if cc.conns == nil { + cc.mu.RUnlock() + return nil, nil, toRPCErr(ErrClientConnClosing) + } + for _, ac = range cc.conns { + // Break after the first iteration to get the first addrConn. + ok = true + break + } + cc.mu.RUnlock() + } else { + var ( + addr Address + err error + ) + addr, put, err = cc.dopts.balancer.Get(ctx, opts) + if err != nil { + return nil, nil, toRPCErr(err) + } + cc.mu.RLock() + if cc.conns == nil { + cc.mu.RUnlock() + return nil, nil, toRPCErr(ErrClientConnClosing) + } + ac, ok = cc.conns[addr] + cc.mu.RUnlock() + } + if !ok { + if put != nil { + put() + } + return nil, nil, errConnClosing + } + t, err := ac.wait(ctx, cc.dopts.balancer != nil, !opts.BlockingWait) + if err != nil { + if put != nil { + put() + } + return nil, nil, err + } + return t, put, nil +} + +// Close tears down the ClientConn and all underlying connections. +func (cc *ClientConn) Close() error { + cc.cancel() + + cc.mu.Lock() + if cc.conns == nil { + cc.mu.Unlock() + return ErrClientConnClosing + } + conns := cc.conns + cc.conns = nil + cc.mu.Unlock() + if cc.dopts.balancer != nil { + cc.dopts.balancer.Close() + } + for _, ac := range conns { + ac.tearDown(ErrClientConnClosing) + } + return nil +} + +// addrConn is a network connection to a given address. +type addrConn struct { + ctx context.Context + cancel context.CancelFunc + + cc *ClientConn + addr Address + dopts dialOptions + events trace.EventLog + + mu sync.Mutex + state ConnectivityState + stateCV *sync.Cond + down func(error) // the handler called when a connection is down. + // ready is closed and becomes nil when a new transport is up or failed + // due to timeout. + ready chan struct{} + transport transport.ClientTransport + + // The reason this addrConn is torn down. + tearDownErr error +} + +// printf records an event in ac's event log, unless ac has been closed. +// REQUIRES ac.mu is held. +func (ac *addrConn) printf(format string, a ...interface{}) { + if ac.events != nil { + ac.events.Printf(format, a...) + } +} + +// errorf records an error in ac's event log, unless ac has been closed. +// REQUIRES ac.mu is held. +func (ac *addrConn) errorf(format string, a ...interface{}) { + if ac.events != nil { + ac.events.Errorf(format, a...) + } +} + +// getState returns the connectivity state of the Conn +func (ac *addrConn) getState() ConnectivityState { + ac.mu.Lock() + defer ac.mu.Unlock() + return ac.state +} + +// waitForStateChange blocks until the state changes to something other than the sourceState. +func (ac *addrConn) waitForStateChange(ctx context.Context, sourceState ConnectivityState) (ConnectivityState, error) { + ac.mu.Lock() + defer ac.mu.Unlock() + if sourceState != ac.state { + return ac.state, nil + } + done := make(chan struct{}) + var err error + go func() { + select { + case <-ctx.Done(): + ac.mu.Lock() + err = ctx.Err() + ac.stateCV.Broadcast() + ac.mu.Unlock() + case <-done: + } + }() + defer close(done) + for sourceState == ac.state { + ac.stateCV.Wait() + if err != nil { + return ac.state, err + } + } + return ac.state, nil +} + +func (ac *addrConn) resetTransport(closeTransport bool) error { + for retries := 0; ; retries++ { + ac.mu.Lock() + ac.printf("connecting") + if ac.state == Shutdown { + // ac.tearDown(...) has been invoked. + ac.mu.Unlock() + return errConnClosing + } + if ac.down != nil { + ac.down(downErrorf(false, true, "%v", errNetworkIO)) + ac.down = nil + } + ac.state = Connecting + ac.stateCV.Broadcast() + t := ac.transport + ac.mu.Unlock() + if closeTransport && t != nil { + t.Close() + } + sleepTime := ac.dopts.bs.backoff(retries) + timeout := minConnectTimeout + if timeout < sleepTime { + timeout = sleepTime + } + ctx, cancel := context.WithTimeout(ac.ctx, timeout) + connectTime := time.Now() + sinfo := transport.TargetInfo{ + Addr: ac.addr.Addr, + Metadata: ac.addr.Metadata, + } + newTransport, err := transport.NewClientTransport(ctx, sinfo, ac.dopts.copts) + // Don't call cancel in success path due to a race in Go 1.6: + // https://github.com/golang/go/issues/15078. + if err != nil { + cancel() + + if e, ok := err.(transport.ConnectionError); ok && !e.Temporary() { + return err + } + grpclog.Printf("grpc: addrConn.resetTransport failed to create client transport: %v; Reconnecting to %v", err, ac.addr) + ac.mu.Lock() + if ac.state == Shutdown { + // ac.tearDown(...) has been invoked. + ac.mu.Unlock() + return errConnClosing + } + ac.errorf("transient failure: %v", err) + ac.state = TransientFailure + ac.stateCV.Broadcast() + if ac.ready != nil { + close(ac.ready) + ac.ready = nil + } + ac.mu.Unlock() + closeTransport = false + select { + case <-time.After(sleepTime - time.Since(connectTime)): + case <-ac.ctx.Done(): + return ac.ctx.Err() + } + continue + } + ac.mu.Lock() + ac.printf("ready") + if ac.state == Shutdown { + // ac.tearDown(...) has been invoked. + ac.mu.Unlock() + newTransport.Close() + return errConnClosing + } + ac.state = Ready + ac.stateCV.Broadcast() + ac.transport = newTransport + if ac.ready != nil { + close(ac.ready) + ac.ready = nil + } + if ac.cc.dopts.balancer != nil { + ac.down = ac.cc.dopts.balancer.Up(ac.addr) + } + ac.mu.Unlock() + return nil + } +} + +// Run in a goroutine to track the error in transport and create the +// new transport if an error happens. It returns when the channel is closing. +func (ac *addrConn) transportMonitor() { + for { + ac.mu.Lock() + t := ac.transport + ac.mu.Unlock() + select { + // This is needed to detect the teardown when + // the addrConn is idle (i.e., no RPC in flight). + case <-ac.ctx.Done(): + select { + case <-t.Error(): + t.Close() + default: + } + return + case <-t.GoAway(): + // If GoAway happens without any network I/O error, ac is closed without shutting down the + // underlying transport (the transport will be closed when all the pending RPCs finished or + // failed.). + // If GoAway and some network I/O error happen concurrently, ac and its underlying transport + // are closed. + // In both cases, a new ac is created. + select { + case <-t.Error(): + ac.cc.resetAddrConn(ac.addr, true, errNetworkIO) + default: + ac.cc.resetAddrConn(ac.addr, true, errConnDrain) + } + return + case <-t.Error(): + select { + case <-ac.ctx.Done(): + t.Close() + return + case <-t.GoAway(): + ac.cc.resetAddrConn(ac.addr, true, errNetworkIO) + return + default: + } + ac.mu.Lock() + if ac.state == Shutdown { + // ac has been shutdown. + ac.mu.Unlock() + return + } + ac.state = TransientFailure + ac.stateCV.Broadcast() + ac.mu.Unlock() + if err := ac.resetTransport(true); err != nil { + ac.mu.Lock() + ac.printf("transport exiting: %v", err) + ac.mu.Unlock() + grpclog.Printf("grpc: addrConn.transportMonitor exits due to: %v", err) + if err != errConnClosing { + // Keep this ac in cc.conns, to get the reason it's torn down. + ac.tearDown(err) + } + return + } + } + } +} + +// wait blocks until i) the new transport is up or ii) ctx is done or iii) ac is closed or +// iv) transport is in TransientFailure and there is a balancer/failfast is true. +func (ac *addrConn) wait(ctx context.Context, hasBalancer, failfast bool) (transport.ClientTransport, error) { + for { + ac.mu.Lock() + switch { + case ac.state == Shutdown: + if failfast || !hasBalancer { + // RPC is failfast or balancer is nil. This RPC should fail with ac.tearDownErr. + err := ac.tearDownErr + ac.mu.Unlock() + return nil, err + } + ac.mu.Unlock() + return nil, errConnClosing + case ac.state == Ready: + ct := ac.transport + ac.mu.Unlock() + return ct, nil + case ac.state == TransientFailure: + if failfast || hasBalancer { + ac.mu.Unlock() + return nil, errConnUnavailable + } + } + ready := ac.ready + if ready == nil { + ready = make(chan struct{}) + ac.ready = ready + } + ac.mu.Unlock() + select { + case <-ctx.Done(): + return nil, toRPCErr(ctx.Err()) + // Wait until the new transport is ready or failed. + case <-ready: + } + } +} + +// tearDown starts to tear down the addrConn. +// TODO(zhaoq): Make this synchronous to avoid unbounded memory consumption in +// some edge cases (e.g., the caller opens and closes many addrConn's in a +// tight loop. +// tearDown doesn't remove ac from ac.cc.conns. +func (ac *addrConn) tearDown(err error) { + ac.cancel() + + ac.mu.Lock() + defer ac.mu.Unlock() + if ac.down != nil { + ac.down(downErrorf(false, false, "%v", err)) + ac.down = nil + } + if err == errConnDrain && ac.transport != nil { + // GracefulClose(...) may be executed multiple times when + // i) receiving multiple GoAway frames from the server; or + // ii) there are concurrent name resolver/Balancer triggered + // address removal and GoAway. + ac.transport.GracefulClose() + } + if ac.state == Shutdown { + return + } + ac.state = Shutdown + ac.tearDownErr = err + ac.stateCV.Broadcast() + if ac.events != nil { + ac.events.Finish() + ac.events = nil + } + if ac.ready != nil { + close(ac.ready) + ac.ready = nil + } + if ac.transport != nil && err != errConnDrain { + ac.transport.Close() + } + return +} diff --git a/vendor/google.golang.org/grpc/clientconn_test.go b/vendor/google.golang.org/grpc/clientconn_test.go new file mode 100644 index 0000000..93e78a5 --- /dev/null +++ b/vendor/google.golang.org/grpc/clientconn_test.go @@ -0,0 +1,255 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "net" + "testing" + "time" + + "golang.org/x/net/context" + + "google.golang.org/grpc/credentials" +) + +const tlsDir = "testdata/" + +func TestDialTimeout(t *testing.T) { + conn, err := Dial("Non-Existent.Server:80", WithTimeout(time.Millisecond), WithBlock(), WithInsecure()) + if err == nil { + conn.Close() + } + if err != context.DeadlineExceeded { + t.Fatalf("Dial(_, _) = %v, %v, want %v", conn, err, context.DeadlineExceeded) + } +} + +func TestTLSDialTimeout(t *testing.T) { + creds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", "x.test.youtube.com") + if err != nil { + t.Fatalf("Failed to create credentials %v", err) + } + conn, err := Dial("Non-Existent.Server:80", WithTransportCredentials(creds), WithTimeout(time.Millisecond), WithBlock()) + if err == nil { + conn.Close() + } + if err != context.DeadlineExceeded { + t.Fatalf("Dial(_, _) = %v, %v, want %v", conn, err, context.DeadlineExceeded) + } +} + +func TestTLSServerNameOverwrite(t *testing.T) { + overwriteServerName := "over.write.server.name" + creds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", overwriteServerName) + if err != nil { + t.Fatalf("Failed to create credentials %v", err) + } + conn, err := Dial("Non-Existent.Server:80", WithTransportCredentials(creds)) + if err != nil { + t.Fatalf("Dial(_, _) = _, %v, want _, <nil>", err) + } + conn.Close() + if conn.authority != overwriteServerName { + t.Fatalf("%v.authority = %v, want %v", conn, conn.authority, overwriteServerName) + } +} + +func TestWithAuthority(t *testing.T) { + overwriteServerName := "over.write.server.name" + conn, err := Dial("Non-Existent.Server:80", WithInsecure(), WithAuthority(overwriteServerName)) + if err != nil { + t.Fatalf("Dial(_, _) = _, %v, want _, <nil>", err) + } + conn.Close() + if conn.authority != overwriteServerName { + t.Fatalf("%v.authority = %v, want %v", conn, conn.authority, overwriteServerName) + } +} + +func TestWithAuthorityAndTLS(t *testing.T) { + overwriteServerName := "over.write.server.name" + creds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", overwriteServerName) + if err != nil { + t.Fatalf("Failed to create credentials %v", err) + } + conn, err := Dial("Non-Existent.Server:80", WithTransportCredentials(creds), WithAuthority("no.effect.authority")) + if err != nil { + t.Fatalf("Dial(_, _) = _, %v, want _, <nil>", err) + } + conn.Close() + if conn.authority != overwriteServerName { + t.Fatalf("%v.authority = %v, want %v", conn, conn.authority, overwriteServerName) + } +} + +func TestDialContextCancel(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + cancel() + if _, err := DialContext(ctx, "Non-Existent.Server:80", WithBlock(), WithInsecure()); err != context.Canceled { + t.Fatalf("DialContext(%v, _) = _, %v, want _, %v", ctx, err, context.Canceled) + } +} + +// blockingBalancer mimics the behavior of balancers whose initialization takes a long time. +// In this test, reading from blockingBalancer.Notify() blocks forever. +type blockingBalancer struct { + ch chan []Address +} + +func newBlockingBalancer() Balancer { + return &blockingBalancer{ch: make(chan []Address)} +} +func (b *blockingBalancer) Start(target string, config BalancerConfig) error { + return nil +} +func (b *blockingBalancer) Up(addr Address) func(error) { + return nil +} +func (b *blockingBalancer) Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error) { + return Address{}, nil, nil +} +func (b *blockingBalancer) Notify() <-chan []Address { + return b.ch +} +func (b *blockingBalancer) Close() error { + close(b.ch) + return nil +} + +func TestDialWithBlockingBalancer(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + dialDone := make(chan struct{}) + go func() { + DialContext(ctx, "Non-Existent.Server:80", WithBlock(), WithInsecure(), WithBalancer(newBlockingBalancer())) + close(dialDone) + }() + cancel() + <-dialDone +} + +// securePerRPCCredentials always requires transport security. +type securePerRPCCredentials struct{} + +func (c securePerRPCCredentials) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { + return nil, nil +} + +func (c securePerRPCCredentials) RequireTransportSecurity() bool { + return true +} + +func TestCredentialsMisuse(t *testing.T) { + tlsCreds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", "x.test.youtube.com") + if err != nil { + t.Fatalf("Failed to create authenticator %v", err) + } + // Two conflicting credential configurations + if _, err := Dial("Non-Existent.Server:80", WithTransportCredentials(tlsCreds), WithBlock(), WithInsecure()); err != errCredentialsConflict { + t.Fatalf("Dial(_, _) = _, %v, want _, %v", err, errCredentialsConflict) + } + // security info on insecure connection + if _, err := Dial("Non-Existent.Server:80", WithPerRPCCredentials(securePerRPCCredentials{}), WithBlock(), WithInsecure()); err != errTransportCredentialsMissing { + t.Fatalf("Dial(_, _) = _, %v, want _, %v", err, errTransportCredentialsMissing) + } +} + +func TestWithBackoffConfigDefault(t *testing.T) { + testBackoffConfigSet(t, &DefaultBackoffConfig) +} + +func TestWithBackoffConfig(t *testing.T) { + b := BackoffConfig{MaxDelay: DefaultBackoffConfig.MaxDelay / 2} + expected := b + setDefaults(&expected) // defaults should be set + testBackoffConfigSet(t, &expected, WithBackoffConfig(b)) +} + +func TestWithBackoffMaxDelay(t *testing.T) { + md := DefaultBackoffConfig.MaxDelay / 2 + expected := BackoffConfig{MaxDelay: md} + setDefaults(&expected) + testBackoffConfigSet(t, &expected, WithBackoffMaxDelay(md)) +} + +func testBackoffConfigSet(t *testing.T, expected *BackoffConfig, opts ...DialOption) { + opts = append(opts, WithInsecure()) + conn, err := Dial("foo:80", opts...) + if err != nil { + t.Fatalf("unexpected error dialing connection: %v", err) + } + + if conn.dopts.bs == nil { + t.Fatalf("backoff config not set") + } + + actual, ok := conn.dopts.bs.(BackoffConfig) + if !ok { + t.Fatalf("unexpected type of backoff config: %#v", conn.dopts.bs) + } + + if actual != *expected { + t.Fatalf("unexpected backoff config on connection: %v, want %v", actual, expected) + } + conn.Close() +} + +type testErr struct { + temp bool +} + +func (e *testErr) Error() string { + return "test error" +} + +func (e *testErr) Temporary() bool { + return e.temp +} + +var nonTemporaryError = &testErr{false} + +func nonTemporaryErrorDialer(addr string, timeout time.Duration) (net.Conn, error) { + return nil, nonTemporaryError +} + +func TestDialWithBlockErrorOnNonTemporaryErrorDialer(t *testing.T) { + ctx, _ := context.WithTimeout(context.Background(), 100*time.Millisecond) + if _, err := DialContext(ctx, "", WithInsecure(), WithDialer(nonTemporaryErrorDialer), WithBlock(), FailOnNonTempDialError(true)); err != nonTemporaryError { + t.Fatalf("Dial(%q) = %v, want %v", "", err, nonTemporaryError) + } + + // Without FailOnNonTempDialError, gRPC will retry to connect, and dial should exit with time out error. + if _, err := DialContext(ctx, "", WithInsecure(), WithDialer(nonTemporaryErrorDialer), WithBlock()); err != context.DeadlineExceeded { + t.Fatalf("Dial(%q) = %v, want %v", "", err, context.DeadlineExceeded) + } +} diff --git a/vendor/google.golang.org/grpc/codegen.sh b/vendor/google.golang.org/grpc/codegen.sh new file mode 100755 index 0000000..4cdc6ba --- /dev/null +++ b/vendor/google.golang.org/grpc/codegen.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +# This script serves as an example to demonstrate how to generate the gRPC-Go +# interface and the related messages from .proto file. +# +# It assumes the installation of i) Google proto buffer compiler at +# https://github.com/google/protobuf (after v2.6.1) and ii) the Go codegen +# plugin at https://github.com/golang/protobuf (after 2015-02-20). If you have +# not, please install them first. +# +# We recommend running this script at $GOPATH/src. +# +# If this is not what you need, feel free to make your own scripts. Again, this +# script is for demonstration purpose. +# +proto=$1 +protoc --go_out=plugins=grpc:. $proto diff --git a/vendor/google.golang.org/grpc/codes/code_string.go b/vendor/google.golang.org/grpc/codes/code_string.go new file mode 100644 index 0000000..e6762d0 --- /dev/null +++ b/vendor/google.golang.org/grpc/codes/code_string.go @@ -0,0 +1,16 @@ +// generated by stringer -type=Code; DO NOT EDIT + +package codes + +import "fmt" + +const _Code_name = "OKCanceledUnknownInvalidArgumentDeadlineExceededNotFoundAlreadyExistsPermissionDeniedResourceExhaustedFailedPreconditionAbortedOutOfRangeUnimplementedInternalUnavailableDataLossUnauthenticated" + +var _Code_index = [...]uint8{0, 2, 10, 17, 32, 48, 56, 69, 85, 102, 120, 127, 137, 150, 158, 169, 177, 192} + +func (i Code) String() string { + if i+1 >= Code(len(_Code_index)) { + return fmt.Sprintf("Code(%d)", i) + } + return _Code_name[_Code_index[i]:_Code_index[i+1]] +} diff --git a/vendor/google.golang.org/grpc/codes/codes.go b/vendor/google.golang.org/grpc/codes/codes.go new file mode 100644 index 0000000..e14b464 --- /dev/null +++ b/vendor/google.golang.org/grpc/codes/codes.go @@ -0,0 +1,159 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package codes defines the canonical error codes used by gRPC. It is +// consistent across various languages. +package codes // import "google.golang.org/grpc/codes" + +// A Code is an unsigned 32-bit error code as defined in the gRPC spec. +type Code uint32 + +//go:generate stringer -type=Code + +const ( + // OK is returned on success. + OK Code = 0 + + // Canceled indicates the operation was cancelled (typically by the caller). + Canceled Code = 1 + + // Unknown error. An example of where this error may be returned is + // if a Status value received from another address space belongs to + // an error-space that is not known in this address space. Also + // errors raised by APIs that do not return enough error information + // may be converted to this error. + Unknown Code = 2 + + // InvalidArgument indicates client specified an invalid argument. + // Note that this differs from FailedPrecondition. It indicates arguments + // that are problematic regardless of the state of the system + // (e.g., a malformed file name). + InvalidArgument Code = 3 + + // DeadlineExceeded means operation expired before completion. + // For operations that change the state of the system, this error may be + // returned even if the operation has completed successfully. For + // example, a successful response from a server could have been delayed + // long enough for the deadline to expire. + DeadlineExceeded Code = 4 + + // NotFound means some requested entity (e.g., file or directory) was + // not found. + NotFound Code = 5 + + // AlreadyExists means an attempt to create an entity failed because one + // already exists. + AlreadyExists Code = 6 + + // PermissionDenied indicates the caller does not have permission to + // execute the specified operation. It must not be used for rejections + // caused by exhausting some resource (use ResourceExhausted + // instead for those errors). It must not be + // used if the caller cannot be identified (use Unauthenticated + // instead for those errors). + PermissionDenied Code = 7 + + // Unauthenticated indicates the request does not have valid + // authentication credentials for the operation. + Unauthenticated Code = 16 + + // ResourceExhausted indicates some resource has been exhausted, perhaps + // a per-user quota, or perhaps the entire file system is out of space. + ResourceExhausted Code = 8 + + // FailedPrecondition indicates operation was rejected because the + // system is not in a state required for the operation's execution. + // For example, directory to be deleted may be non-empty, an rmdir + // operation is applied to a non-directory, etc. + // + // A litmus test that may help a service implementor in deciding + // between FailedPrecondition, Aborted, and Unavailable: + // (a) Use Unavailable if the client can retry just the failing call. + // (b) Use Aborted if the client should retry at a higher-level + // (e.g., restarting a read-modify-write sequence). + // (c) Use FailedPrecondition if the client should not retry until + // the system state has been explicitly fixed. E.g., if an "rmdir" + // fails because the directory is non-empty, FailedPrecondition + // should be returned since the client should not retry unless + // they have first fixed up the directory by deleting files from it. + // (d) Use FailedPrecondition if the client performs conditional + // REST Get/Update/Delete on a resource and the resource on the + // server does not match the condition. E.g., conflicting + // read-modify-write on the same resource. + FailedPrecondition Code = 9 + + // Aborted indicates the operation was aborted, typically due to a + // concurrency issue like sequencer check failures, transaction aborts, + // etc. + // + // See litmus test above for deciding between FailedPrecondition, + // Aborted, and Unavailable. + Aborted Code = 10 + + // OutOfRange means operation was attempted past the valid range. + // E.g., seeking or reading past end of file. + // + // Unlike InvalidArgument, this error indicates a problem that may + // be fixed if the system state changes. For example, a 32-bit file + // system will generate InvalidArgument if asked to read at an + // offset that is not in the range [0,2^32-1], but it will generate + // OutOfRange if asked to read from an offset past the current + // file size. + // + // There is a fair bit of overlap between FailedPrecondition and + // OutOfRange. We recommend using OutOfRange (the more specific + // error) when it applies so that callers who are iterating through + // a space can easily look for an OutOfRange error to detect when + // they are done. + OutOfRange Code = 11 + + // Unimplemented indicates operation is not implemented or not + // supported/enabled in this service. + Unimplemented Code = 12 + + // Internal errors. Means some invariants expected by underlying + // system has been broken. If you see one of these errors, + // something is very broken. + Internal Code = 13 + + // Unavailable indicates the service is currently unavailable. + // This is a most likely a transient condition and may be corrected + // by retrying with a backoff. + // + // See litmus test above for deciding between FailedPrecondition, + // Aborted, and Unavailable. + Unavailable Code = 14 + + // DataLoss indicates unrecoverable data loss or corruption. + DataLoss Code = 15 +) diff --git a/vendor/google.golang.org/grpc/coverage.sh b/vendor/google.golang.org/grpc/coverage.sh new file mode 100755 index 0000000..b85f918 --- /dev/null +++ b/vendor/google.golang.org/grpc/coverage.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + + +set -e + +workdir=.cover +profile="$workdir/cover.out" +mode=set +end2endtest="google.golang.org/grpc/test" + +generate_cover_data() { + rm -rf "$workdir" + mkdir "$workdir" + + for pkg in "$@"; do + if [ $pkg == "google.golang.org/grpc" -o $pkg == "google.golang.org/grpc/transport" -o $pkg == "google.golang.org/grpc/metadata" -o $pkg == "google.golang.org/grpc/credentials" ] + then + f="$workdir/$(echo $pkg | tr / -)" + go test -covermode="$mode" -coverprofile="$f.cover" "$pkg" + go test -covermode="$mode" -coverpkg "$pkg" -coverprofile="$f.e2e.cover" "$end2endtest" + fi + done + + echo "mode: $mode" >"$profile" + grep -h -v "^mode:" "$workdir"/*.cover >>"$profile" +} + +show_cover_report() { + go tool cover -${1}="$profile" +} + +push_to_coveralls() { + goveralls -coverprofile="$profile" +} + +generate_cover_data $(go list ./...) +show_cover_report func +case "$1" in +"") + ;; +--html) + show_cover_report html ;; +--coveralls) + push_to_coveralls ;; +*) + echo >&2 "error: invalid option: $1" ;; +esac +rm -rf "$workdir" diff --git a/vendor/google.golang.org/grpc/credentials/credentials.go b/vendor/google.golang.org/grpc/credentials/credentials.go new file mode 100644 index 0000000..4d45c3e --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/credentials.go @@ -0,0 +1,230 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package credentials implements various credentials supported by gRPC library, +// which encapsulate all the state needed by a client to authenticate with a +// server and make various assertions, e.g., about the client's identity, role, +// or whether it is authorized to make a particular call. +package credentials // import "google.golang.org/grpc/credentials" + +import ( + "crypto/tls" + "crypto/x509" + "errors" + "fmt" + "io/ioutil" + "net" + "strings" + + "golang.org/x/net/context" +) + +var ( + // alpnProtoStr are the specified application level protocols for gRPC. + alpnProtoStr = []string{"h2"} +) + +// PerRPCCredentials defines the common interface for the credentials which need to +// attach security information to every RPC (e.g., oauth2). +type PerRPCCredentials interface { + // GetRequestMetadata gets the current request metadata, refreshing + // tokens if required. This should be called by the transport layer on + // each request, and the data should be populated in headers or other + // context. uri is the URI of the entry point for the request. When + // supported by the underlying implementation, ctx can be used for + // timeout and cancellation. + // TODO(zhaoq): Define the set of the qualified keys instead of leaving + // it as an arbitrary string. + GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) + // RequireTransportSecurity indicates whether the credentials requires + // transport security. + RequireTransportSecurity() bool +} + +// ProtocolInfo provides information regarding the gRPC wire protocol version, +// security protocol, security protocol version in use, server name, etc. +type ProtocolInfo struct { + // ProtocolVersion is the gRPC wire protocol version. + ProtocolVersion string + // SecurityProtocol is the security protocol in use. + SecurityProtocol string + // SecurityVersion is the security protocol version. + SecurityVersion string + // ServerName is the user-configured server name. + ServerName string +} + +// AuthInfo defines the common interface for the auth information the users are interested in. +type AuthInfo interface { + AuthType() string +} + +var ( + // ErrConnDispatched indicates that rawConn has been dispatched out of gRPC + // and the caller should not close rawConn. + ErrConnDispatched = errors.New("credentials: rawConn is dispatched out of gRPC") +) + +// TransportCredentials defines the common interface for all the live gRPC wire +// protocols and supported transport security protocols (e.g., TLS, SSL). +type TransportCredentials interface { + // ClientHandshake does the authentication handshake specified by the corresponding + // authentication protocol on rawConn for clients. It returns the authenticated + // connection and the corresponding auth information about the connection. + // Implementations must use the provided context to implement timely cancellation. + ClientHandshake(context.Context, string, net.Conn) (net.Conn, AuthInfo, error) + // ServerHandshake does the authentication handshake for servers. It returns + // the authenticated connection and the corresponding auth information about + // the connection. + ServerHandshake(net.Conn) (net.Conn, AuthInfo, error) + // Info provides the ProtocolInfo of this TransportCredentials. + Info() ProtocolInfo + // Clone makes a copy of this TransportCredentials. + Clone() TransportCredentials + // OverrideServerName overrides the server name used to verify the hostname on the returned certificates from the server. + // gRPC internals also use it to override the virtual hosting name if it is set. + // It must be called before dialing. Currently, this is only used by grpclb. + OverrideServerName(string) error +} + +// TLSInfo contains the auth information for a TLS authenticated connection. +// It implements the AuthInfo interface. +type TLSInfo struct { + State tls.ConnectionState +} + +// AuthType returns the type of TLSInfo as a string. +func (t TLSInfo) AuthType() string { + return "tls" +} + +// tlsCreds is the credentials required for authenticating a connection using TLS. +type tlsCreds struct { + // TLS configuration + config *tls.Config +} + +func (c tlsCreds) Info() ProtocolInfo { + return ProtocolInfo{ + SecurityProtocol: "tls", + SecurityVersion: "1.2", + ServerName: c.config.ServerName, + } +} + +func (c *tlsCreds) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (_ net.Conn, _ AuthInfo, err error) { + // use local cfg to avoid clobbering ServerName if using multiple endpoints + cfg := cloneTLSConfig(c.config) + if cfg.ServerName == "" { + colonPos := strings.LastIndex(addr, ":") + if colonPos == -1 { + colonPos = len(addr) + } + cfg.ServerName = addr[:colonPos] + } + conn := tls.Client(rawConn, cfg) + errChannel := make(chan error, 1) + go func() { + errChannel <- conn.Handshake() + }() + select { + case err := <-errChannel: + if err != nil { + return nil, nil, err + } + case <-ctx.Done(): + return nil, nil, ctx.Err() + } + return conn, TLSInfo{conn.ConnectionState()}, nil +} + +func (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) { + conn := tls.Server(rawConn, c.config) + if err := conn.Handshake(); err != nil { + return nil, nil, err + } + return conn, TLSInfo{conn.ConnectionState()}, nil +} + +func (c *tlsCreds) Clone() TransportCredentials { + return NewTLS(c.config) +} + +func (c *tlsCreds) OverrideServerName(serverNameOverride string) error { + c.config.ServerName = serverNameOverride + return nil +} + +// NewTLS uses c to construct a TransportCredentials based on TLS. +func NewTLS(c *tls.Config) TransportCredentials { + tc := &tlsCreds{cloneTLSConfig(c)} + tc.config.NextProtos = alpnProtoStr + return tc +} + +// NewClientTLSFromCert constructs a TLS from the input certificate for client. +// serverNameOverride is for testing only. If set to a non empty string, +// it will override the virtual host name of authority (e.g. :authority header field) in requests. +func NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) TransportCredentials { + return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp}) +} + +// NewClientTLSFromFile constructs a TLS from the input certificate file for client. +// serverNameOverride is for testing only. If set to a non empty string, +// it will override the virtual host name of authority (e.g. :authority header field) in requests. +func NewClientTLSFromFile(certFile, serverNameOverride string) (TransportCredentials, error) { + b, err := ioutil.ReadFile(certFile) + if err != nil { + return nil, err + } + cp := x509.NewCertPool() + if !cp.AppendCertsFromPEM(b) { + return nil, fmt.Errorf("credentials: failed to append certificates") + } + return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp}), nil +} + +// NewServerTLSFromCert constructs a TLS from the input certificate for server. +func NewServerTLSFromCert(cert *tls.Certificate) TransportCredentials { + return NewTLS(&tls.Config{Certificates: []tls.Certificate{*cert}}) +} + +// NewServerTLSFromFile constructs a TLS from the input certificate file and key +// file for server. +func NewServerTLSFromFile(certFile, keyFile string) (TransportCredentials, error) { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return nil, err + } + return NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}), nil +} diff --git a/vendor/google.golang.org/grpc/credentials/credentials_test.go b/vendor/google.golang.org/grpc/credentials/credentials_test.go new file mode 100644 index 0000000..1609374 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/credentials_test.go @@ -0,0 +1,222 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package credentials + +import ( + "crypto/tls" + "net" + "testing" + + "golang.org/x/net/context" +) + +func TestTLSOverrideServerName(t *testing.T) { + expectedServerName := "server.name" + c := NewTLS(nil) + c.OverrideServerName(expectedServerName) + if c.Info().ServerName != expectedServerName { + t.Fatalf("c.Info().ServerName = %v, want %v", c.Info().ServerName, expectedServerName) + } +} + +func TestTLSClone(t *testing.T) { + expectedServerName := "server.name" + c := NewTLS(nil) + c.OverrideServerName(expectedServerName) + cc := c.Clone() + if cc.Info().ServerName != expectedServerName { + t.Fatalf("cc.Info().ServerName = %v, want %v", cc.Info().ServerName, expectedServerName) + } + cc.OverrideServerName("") + if c.Info().ServerName != expectedServerName { + t.Fatalf("Change in clone should not affect the original, c.Info().ServerName = %v, want %v", c.Info().ServerName, expectedServerName) + } + +} + +const tlsDir = "../test/testdata/" + +type serverHandshake func(net.Conn) (AuthInfo, error) + +func TestClientHandshakeReturnsAuthInfo(t *testing.T) { + done := make(chan AuthInfo, 1) + lis := launchServer(t, tlsServerHandshake, done) + defer lis.Close() + lisAddr := lis.Addr().String() + clientAuthInfo := clientHandle(t, gRPCClientHandshake, lisAddr) + // wait until server sends serverAuthInfo or fails. + serverAuthInfo, ok := <-done + if !ok { + t.Fatalf("Error at server-side") + } + if !compare(clientAuthInfo, serverAuthInfo) { + t.Fatalf("c.ClientHandshake(_, %v, _) = %v, want %v.", lisAddr, clientAuthInfo, serverAuthInfo) + } +} + +func TestServerHandshakeReturnsAuthInfo(t *testing.T) { + done := make(chan AuthInfo, 1) + lis := launchServer(t, gRPCServerHandshake, done) + defer lis.Close() + clientAuthInfo := clientHandle(t, tlsClientHandshake, lis.Addr().String()) + // wait until server sends serverAuthInfo or fails. + serverAuthInfo, ok := <-done + if !ok { + t.Fatalf("Error at server-side") + } + if !compare(clientAuthInfo, serverAuthInfo) { + t.Fatalf("ServerHandshake(_) = %v, want %v.", serverAuthInfo, clientAuthInfo) + } +} + +func TestServerAndClientHandshake(t *testing.T) { + done := make(chan AuthInfo, 1) + lis := launchServer(t, gRPCServerHandshake, done) + defer lis.Close() + clientAuthInfo := clientHandle(t, gRPCClientHandshake, lis.Addr().String()) + // wait until server sends serverAuthInfo or fails. + serverAuthInfo, ok := <-done + if !ok { + t.Fatalf("Error at server-side") + } + if !compare(clientAuthInfo, serverAuthInfo) { + t.Fatalf("AuthInfo returned by server: %v and client: %v aren't same", serverAuthInfo, clientAuthInfo) + } +} + +func compare(a1, a2 AuthInfo) bool { + if a1.AuthType() != a2.AuthType() { + return false + } + switch a1.AuthType() { + case "tls": + state1 := a1.(TLSInfo).State + state2 := a2.(TLSInfo).State + if state1.Version == state2.Version && + state1.HandshakeComplete == state2.HandshakeComplete && + state1.CipherSuite == state2.CipherSuite && + state1.NegotiatedProtocol == state2.NegotiatedProtocol { + return true + } + return false + default: + return false + } +} + +func launchServer(t *testing.T, hs serverHandshake, done chan AuthInfo) net.Listener { + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen: %v", err) + } + go serverHandle(t, hs, done, lis) + return lis +} + +// Is run in a seperate goroutine. +func serverHandle(t *testing.T, hs serverHandshake, done chan AuthInfo, lis net.Listener) { + serverRawConn, err := lis.Accept() + if err != nil { + t.Errorf("Server failed to accept connection: %v", err) + close(done) + return + } + serverAuthInfo, err := hs(serverRawConn) + if err != nil { + t.Errorf("Server failed while handshake. Error: %v", err) + serverRawConn.Close() + close(done) + return + } + done <- serverAuthInfo +} + +func clientHandle(t *testing.T, hs func(net.Conn, string) (AuthInfo, error), lisAddr string) AuthInfo { + conn, err := net.Dial("tcp", lisAddr) + if err != nil { + t.Fatalf("Client failed to connect to %s. Error: %v", lisAddr, err) + } + defer conn.Close() + clientAuthInfo, err := hs(conn, lisAddr) + if err != nil { + t.Fatalf("Error on client while handshake. Error: %v", err) + } + return clientAuthInfo +} + +// Server handshake implementation in gRPC. +func gRPCServerHandshake(conn net.Conn) (AuthInfo, error) { + serverTLS, err := NewServerTLSFromFile(tlsDir+"server1.pem", tlsDir+"server1.key") + if err != nil { + return nil, err + } + _, serverAuthInfo, err := serverTLS.ServerHandshake(conn) + if err != nil { + return nil, err + } + return serverAuthInfo, nil +} + +// Client handshake implementation in gRPC. +func gRPCClientHandshake(conn net.Conn, lisAddr string) (AuthInfo, error) { + clientTLS := NewTLS(&tls.Config{InsecureSkipVerify: true}) + _, authInfo, err := clientTLS.ClientHandshake(context.Background(), lisAddr, conn) + if err != nil { + return nil, err + } + return authInfo, nil +} + +func tlsServerHandshake(conn net.Conn) (AuthInfo, error) { + cert, err := tls.LoadX509KeyPair(tlsDir+"server1.pem", tlsDir+"server1.key") + if err != nil { + return nil, err + } + serverTLSConfig := &tls.Config{Certificates: []tls.Certificate{cert}} + serverConn := tls.Server(conn, serverTLSConfig) + err = serverConn.Handshake() + if err != nil { + return nil, err + } + return TLSInfo{State: serverConn.ConnectionState()}, nil +} + +func tlsClientHandshake(conn net.Conn, _ string) (AuthInfo, error) { + clientTLSConfig := &tls.Config{InsecureSkipVerify: true} + clientConn := tls.Client(conn, clientTLSConfig) + if err := clientConn.Handshake(); err != nil { + return nil, err + } + return TLSInfo{State: clientConn.ConnectionState()}, nil +} diff --git a/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go b/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go new file mode 100644 index 0000000..7597b09 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go @@ -0,0 +1,75 @@ +// +build go1.7 +// +build !go1.8 + +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package credentials + +import ( + "crypto/tls" +) + +// cloneTLSConfig returns a shallow clone of the exported +// fields of cfg, ignoring the unexported sync.Once, which +// contains a mutex and must not be copied. +// +// If cfg is nil, a new zero tls.Config is returned. +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return &tls.Config{ + Rand: cfg.Rand, + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + SessionTicketsDisabled: cfg.SessionTicketsDisabled, + SessionTicketKey: cfg.SessionTicketKey, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + DynamicRecordSizingDisabled: cfg.DynamicRecordSizingDisabled, + Renegotiation: cfg.Renegotiation, + } +} diff --git a/vendor/google.golang.org/grpc/credentials/credentials_util_go18.go b/vendor/google.golang.org/grpc/credentials/credentials_util_go18.go new file mode 100644 index 0000000..0ecf342 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/credentials_util_go18.go @@ -0,0 +1,53 @@ +// +build go1.8 + +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package credentials + +import ( + "crypto/tls" +) + +// cloneTLSConfig returns a shallow clone of the exported +// fields of cfg, ignoring the unexported sync.Once, which +// contains a mutex and must not be copied. +// +// If cfg is nil, a new zero tls.Config is returned. +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + + return cfg.Clone() +} diff --git a/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go b/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go new file mode 100644 index 0000000..cfd40df --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go @@ -0,0 +1,72 @@ +// +build !go1.7 + +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package credentials + +import ( + "crypto/tls" +) + +// cloneTLSConfig returns a shallow clone of the exported +// fields of cfg, ignoring the unexported sync.Once, which +// contains a mutex and must not be copied. +// +// If cfg is nil, a new zero tls.Config is returned. +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return &tls.Config{ + Rand: cfg.Rand, + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + SessionTicketsDisabled: cfg.SessionTicketsDisabled, + SessionTicketKey: cfg.SessionTicketKey, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + } +} diff --git a/vendor/google.golang.org/grpc/credentials/oauth/oauth.go b/vendor/google.golang.org/grpc/credentials/oauth/oauth.go new file mode 100644 index 0000000..25393cc --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/oauth/oauth.go @@ -0,0 +1,180 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package oauth implements gRPC credentials using OAuth. +package oauth + +import ( + "fmt" + "io/ioutil" + + "golang.org/x/net/context" + "golang.org/x/oauth2" + "golang.org/x/oauth2/google" + "golang.org/x/oauth2/jwt" + "google.golang.org/grpc/credentials" +) + +// TokenSource supplies PerRPCCredentials from an oauth2.TokenSource. +type TokenSource struct { + oauth2.TokenSource +} + +// GetRequestMetadata gets the request metadata as a map from a TokenSource. +func (ts TokenSource) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { + token, err := ts.Token() + if err != nil { + return nil, err + } + return map[string]string{ + "authorization": token.Type() + " " + token.AccessToken, + }, nil +} + +// RequireTransportSecurity indicates whether the credentials requires transport security. +func (ts TokenSource) RequireTransportSecurity() bool { + return true +} + +type jwtAccess struct { + jsonKey []byte +} + +// NewJWTAccessFromFile creates PerRPCCredentials from the given keyFile. +func NewJWTAccessFromFile(keyFile string) (credentials.PerRPCCredentials, error) { + jsonKey, err := ioutil.ReadFile(keyFile) + if err != nil { + return nil, fmt.Errorf("credentials: failed to read the service account key file: %v", err) + } + return NewJWTAccessFromKey(jsonKey) +} + +// NewJWTAccessFromKey creates PerRPCCredentials from the given jsonKey. +func NewJWTAccessFromKey(jsonKey []byte) (credentials.PerRPCCredentials, error) { + return jwtAccess{jsonKey}, nil +} + +func (j jwtAccess) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { + ts, err := google.JWTAccessTokenSourceFromJSON(j.jsonKey, uri[0]) + if err != nil { + return nil, err + } + token, err := ts.Token() + if err != nil { + return nil, err + } + return map[string]string{ + "authorization": token.TokenType + " " + token.AccessToken, + }, nil +} + +func (j jwtAccess) RequireTransportSecurity() bool { + return true +} + +// oauthAccess supplies PerRPCCredentials from a given token. +type oauthAccess struct { + token oauth2.Token +} + +// NewOauthAccess constructs the PerRPCCredentials using a given token. +func NewOauthAccess(token *oauth2.Token) credentials.PerRPCCredentials { + return oauthAccess{token: *token} +} + +func (oa oauthAccess) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { + return map[string]string{ + "authorization": oa.token.TokenType + " " + oa.token.AccessToken, + }, nil +} + +func (oa oauthAccess) RequireTransportSecurity() bool { + return true +} + +// NewComputeEngine constructs the PerRPCCredentials that fetches access tokens from +// Google Compute Engine (GCE)'s metadata server. It is only valid to use this +// if your program is running on a GCE instance. +// TODO(dsymonds): Deprecate and remove this. +func NewComputeEngine() credentials.PerRPCCredentials { + return TokenSource{google.ComputeTokenSource("")} +} + +// serviceAccount represents PerRPCCredentials via JWT signing key. +type serviceAccount struct { + config *jwt.Config +} + +func (s serviceAccount) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { + token, err := s.config.TokenSource(ctx).Token() + if err != nil { + return nil, err + } + return map[string]string{ + "authorization": token.TokenType + " " + token.AccessToken, + }, nil +} + +func (s serviceAccount) RequireTransportSecurity() bool { + return true +} + +// NewServiceAccountFromKey constructs the PerRPCCredentials using the JSON key slice +// from a Google Developers service account. +func NewServiceAccountFromKey(jsonKey []byte, scope ...string) (credentials.PerRPCCredentials, error) { + config, err := google.JWTConfigFromJSON(jsonKey, scope...) + if err != nil { + return nil, err + } + return serviceAccount{config: config}, nil +} + +// NewServiceAccountFromFile constructs the PerRPCCredentials using the JSON key file +// of a Google Developers service account. +func NewServiceAccountFromFile(keyFile string, scope ...string) (credentials.PerRPCCredentials, error) { + jsonKey, err := ioutil.ReadFile(keyFile) + if err != nil { + return nil, fmt.Errorf("credentials: failed to read the service account key file: %v", err) + } + return NewServiceAccountFromKey(jsonKey, scope...) +} + +// NewApplicationDefault returns "Application Default Credentials". For more +// detail, see https://developers.google.com/accounts/docs/application-default-credentials. +func NewApplicationDefault(ctx context.Context, scope ...string) (credentials.PerRPCCredentials, error) { + t, err := google.DefaultTokenSource(ctx, scope...) + if err != nil { + return nil, err + } + return TokenSource{t}, nil +} diff --git a/vendor/google.golang.org/grpc/doc.go b/vendor/google.golang.org/grpc/doc.go new file mode 100644 index 0000000..a35f218 --- /dev/null +++ b/vendor/google.golang.org/grpc/doc.go @@ -0,0 +1,6 @@ +/* +Package grpc implements an RPC system called gRPC. + +See www.grpc.io for more information about gRPC. +*/ +package grpc // import "google.golang.org/grpc" diff --git a/vendor/google.golang.org/grpc/examples/README.md b/vendor/google.golang.org/grpc/examples/README.md new file mode 100644 index 0000000..6ea6b35 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/README.md @@ -0,0 +1,57 @@ +gRPC in 3 minutes (Go) +====================== + +BACKGROUND +------------- +For this sample, we've already generated the server and client stubs from [helloworld.proto](helloworld/helloworld/helloworld.proto). + +PREREQUISITES +------------- + +- This requires Go 1.5 or later +- Requires that [GOPATH is set](https://golang.org/doc/code.html#GOPATH) + +``` +$ go help gopath +$ # ensure the PATH contains $GOPATH/bin +$ export PATH=$PATH:$GOPATH/bin +``` + +INSTALL +------- + +``` +$ go get -u google.golang.org/grpc/examples/helloworld/greeter_client +$ go get -u google.golang.org/grpc/examples/helloworld/greeter_server +``` + +TRY IT! +------- + +- Run the server + +``` +$ greeter_server & +``` + +- Run the client + +``` +$ greeter_client +``` + +OPTIONAL - Rebuilding the generated code +---------------------------------------- + +1 First [install protoc](https://github.com/google/protobuf/blob/master/README.md) + - For now, this needs to be installed from source + - This is will change once proto3 is officially released + +2 Install the protoc Go plugin. + +``` +$ go get -a github.com/golang/protobuf/protoc-gen-go +$ +$ # from this dir; invoke protoc +$ protoc -I ./helloworld/helloworld/ ./helloworld/helloworld/helloworld.proto --go_out=plugins=grpc:helloworld +``` diff --git a/vendor/google.golang.org/grpc/examples/gotutorial.md b/vendor/google.golang.org/grpc/examples/gotutorial.md new file mode 100644 index 0000000..6770b52 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/gotutorial.md @@ -0,0 +1,431 @@ +#gRPC Basics: Go + +This tutorial provides a basic Go programmer's introduction to working with gRPC. By walking through this example you'll learn how to: + +- Define a service in a .proto file. +- Generate server and client code using the protocol buffer compiler. +- Use the Go gRPC API to write a simple client and server for your service. + +It assumes that you have read the [Getting started](https://github.com/grpc/grpc/tree/master/examples) guide and are familiar with [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). Note that the example in this tutorial uses the proto3 version of the protocol buffers language, which is currently in alpha release:you can find out more in the [proto3 language guide](https://developers.google.com/protocol-buffers/docs/proto3) and see the [release notes](https://github.com/google/protobuf/releases) for the new version in the protocol buffers Github repository. + +This isn't a comprehensive guide to using gRPC in Go: more reference documentation is coming soon. + +## Why use gRPC? + +Our example is a simple route mapping application that lets clients get information about features on their route, create a summary of their route, and exchange route information such as traffic updates with the server and other clients. + +With gRPC we can define our service once in a .proto file and implement clients and servers in any of gRPC's supported languages, which in turn can be run in environments ranging from servers inside Google to your own tablet - all the complexity of communication between different languages and environments is handled for you by gRPC. We also get all the advantages of working with protocol buffers, including efficient serialization, a simple IDL, and easy interface updating. + +## Example code and setup + +The example code for our tutorial is in [grpc/grpc-go/examples/route_guide](https://github.com/grpc/grpc-go/tree/master/examples/route_guide). To download the example, clone the `grpc-go` repository by running the following command: +```shell +$ go get google.golang.org/grpc +``` + +Then change your current directory to `grpc-go/examples/route_guide`: +```shell +$ cd $GOPATH/src/google.golang.org/grpc/examples/route_guide +``` + +You also should have the relevant tools installed to generate the server and client interface code - if you don't already, follow the setup instructions in [the Go quick start guide](https://github.com/grpc/grpc-go/tree/master/examples/). + + +## Defining the service + +Our first step (as you'll know from the [quick start](http://www.grpc.io/docs/#quick-start)) is to define the gRPC *service* and the method *request* and *response* types using [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file in [examples/route_guide/routeguide/route_guide.proto](https://github.com/grpc/grpc-go/tree/master/examples/route_guide/routeguide/route_guide.proto). + +To define a service, you specify a named `service` in your .proto file: + +```proto +service RouteGuide { + ... +} +``` + +Then you define `rpc` methods inside your service definition, specifying their request and response types. gRPC lets you define four kinds of service method, all of which are used in the `RouteGuide` service: + +- A *simple RPC* where the client sends a request to the server using the stub and waits for a response to come back, just like a normal function call. +```proto + // Obtains the feature at a given position. + rpc GetFeature(Point) returns (Feature) {} +``` + +- A *server-side streaming RPC* where the client sends a request to the server and gets a stream to read a sequence of messages back. The client reads from the returned stream until there are no more messages. As you can see in our example, you specify a server-side streaming method by placing the `stream` keyword before the *response* type. +```proto + // Obtains the Features available within the given Rectangle. Results are + // streamed rather than returned at once (e.g. in a response message with a + // repeated field), as the rectangle may cover a large area and contain a + // huge number of features. + rpc ListFeatures(Rectangle) returns (stream Feature) {} +``` + +- A *client-side streaming RPC* where the client writes a sequence of messages and sends them to the server, again using a provided stream. Once the client has finished writing the messages, it waits for the server to read them all and return its response. You specify a client-side streaming method by placing the `stream` keyword before the *request* type. +```proto + // Accepts a stream of Points on a route being traversed, returning a + // RouteSummary when traversal is completed. + rpc RecordRoute(stream Point) returns (RouteSummary) {} +``` + +- A *bidirectional streaming RPC* where both sides send a sequence of messages using a read-write stream. The two streams operate independently, so clients and servers can read and write in whatever order they like: for example, the server could wait to receive all the client messages before writing its responses, or it could alternately read a message then write a message, or some other combination of reads and writes. The order of messages in each stream is preserved. You specify this type of method by placing the `stream` keyword before both the request and the response. +```proto + // Accepts a stream of RouteNotes sent while a route is being traversed, + // while receiving other RouteNotes (e.g. from other users). + rpc RouteChat(stream RouteNote) returns (stream RouteNote) {} +``` + +Our .proto file also contains protocol buffer message type definitions for all the request and response types used in our service methods - for example, here's the `Point` message type: +```proto +// Points are represented as latitude-longitude pairs in the E7 representation +// (degrees multiplied by 10**7 and rounded to the nearest integer). +// Latitudes should be in the range +/- 90 degrees and longitude should be in +// the range +/- 180 degrees (inclusive). +message Point { + int32 latitude = 1; + int32 longitude = 2; +} +``` + + +## Generating client and server code + +Next we need to generate the gRPC client and server interfaces from our .proto service definition. We do this using the protocol buffer compiler `protoc` with a special gRPC Go plugin. + +For simplicity, we've provided a [bash script](https://github.com/grpc/grpc-go/blob/master/codegen.sh) that runs `protoc` for you with the appropriate plugin, input, and output (if you want to run this by yourself, make sure you've installed protoc and followed the gRPC-Go [installation instructions](https://github.com/grpc/grpc-go/blob/master/README.md) first): + +```shell +$ codegen.sh route_guide.proto +``` + +which actually runs: + +```shell +$ protoc --go_out=plugins=grpc:. route_guide.proto +``` + +Running this command generates the following file in your current directory: +- `route_guide.pb.go` + +This contains: +- All the protocol buffer code to populate, serialize, and retrieve our request and response message types +- An interface type (or *stub*) for clients to call with the methods defined in the `RouteGuide` service. +- An interface type for servers to implement, also with the methods defined in the `RouteGuide` service. + + +<a name="server"></a> +## Creating the server + +First let's look at how we create a `RouteGuide` server. If you're only interested in creating gRPC clients, you can skip this section and go straight to [Creating the client](#client) (though you might find it interesting anyway!). + +There are two parts to making our `RouteGuide` service do its job: +- Implementing the service interface generated from our service definition: doing the actual "work" of our service. +- Running a gRPC server to listen for requests from clients and dispatch them to the right service implementation. + +You can find our example `RouteGuide` server in [grpc-go/examples/route_guide/server/server.go](https://github.com/grpc/grpc-go/tree/master/examples/route_guide/server/server.go). Let's take a closer look at how it works. + +### Implementing RouteGuide + +As you can see, our server has a `routeGuideServer` struct type that implements the generated `RouteGuideServer` interface: + +```go +type routeGuideServer struct { + ... +} +... + +func (s *routeGuideServer) GetFeature(ctx context.Context, point *pb.Point) (*pb.Feature, error) { + ... +} +... + +func (s *routeGuideServer) ListFeatures(rect *pb.Rectangle, stream pb.RouteGuide_ListFeaturesServer) error { + ... +} +... + +func (s *routeGuideServer) RecordRoute(stream pb.RouteGuide_RecordRouteServer) error { + ... +} +... + +func (s *routeGuideServer) RouteChat(stream pb.RouteGuide_RouteChatServer) error { + ... +} +... +``` + +#### Simple RPC +`routeGuideServer` implements all our service methods. Let's look at the simplest type first, `GetFeature`, which just gets a `Point` from the client and returns the corresponding feature information from its database in a `Feature`. + +```go +func (s *routeGuideServer) GetFeature(ctx context.Context, point *pb.Point) (*pb.Feature, error) { + for _, feature := range s.savedFeatures { + if proto.Equal(feature.Location, point) { + return feature, nil + } + } + // No feature was found, return an unnamed feature + return &pb.Feature{"", point}, nil +} +``` + +The method is passed a context object for the RPC and the client's `Point` protocol buffer request. It returns a `Feature` protocol buffer object with the response information and an `error`. In the method we populate the `Feature` with the appropriate information, and then `return` it along with an `nil` error to tell gRPC that we've finished dealing with the RPC and that the `Feature` can be returned to the client. + +#### Server-side streaming RPC +Now let's look at one of our streaming RPCs. `ListFeatures` is a server-side streaming RPC, so we need to send back multiple `Feature`s to our client. + +```go +func (s *routeGuideServer) ListFeatures(rect *pb.Rectangle, stream pb.RouteGuide_ListFeaturesServer) error { + for _, feature := range s.savedFeatures { + if inRange(feature.Location, rect) { + if err := stream.Send(feature); err != nil { + return err + } + } + } + return nil +} +``` + +As you can see, instead of getting simple request and response objects in our method parameters, this time we get a request object (the `Rectangle` in which our client wants to find `Feature`s) and a special `RouteGuide_ListFeaturesServer` object to write our responses. + +In the method, we populate as many `Feature` objects as we need to return, writing them to the `RouteGuide_ListFeaturesServer` using its `Send()` method. Finally, as in our simple RPC, we return a `nil` error to tell gRPC that we've finished writing responses. Should any error happen in this call, we return a non-`nil` error; the gRPC layer will translate it into an appropriate RPC status to be sent on the wire. + +#### Client-side streaming RPC +Now let's look at something a little more complicated: the client-side streaming method `RecordRoute`, where we get a stream of `Point`s from the client and return a single `RouteSummary` with information about their trip. As you can see, this time the method doesn't have a request parameter at all. Instead, it gets a `RouteGuide_RecordRouteServer` stream, which the server can use to both read *and* write messages - it can receive client messages using its `Recv()` method and return its single response using its `SendAndClose()` method. + +```go +func (s *routeGuideServer) RecordRoute(stream pb.RouteGuide_RecordRouteServer) error { + var pointCount, featureCount, distance int32 + var lastPoint *pb.Point + startTime := time.Now() + for { + point, err := stream.Recv() + if err == io.EOF { + endTime := time.Now() + return stream.SendAndClose(&pb.RouteSummary{ + PointCount: pointCount, + FeatureCount: featureCount, + Distance: distance, + ElapsedTime: int32(endTime.Sub(startTime).Seconds()), + }) + } + if err != nil { + return err + } + pointCount++ + for _, feature := range s.savedFeatures { + if proto.Equal(feature.Location, point) { + featureCount++ + } + } + if lastPoint != nil { + distance += calcDistance(lastPoint, point) + } + lastPoint = point + } +} +``` + +In the method body we use the `RouteGuide_RecordRouteServer`s `Recv()` method to repeatedly read in our client's requests to a request object (in this case a `Point`) until there are no more messages: the server needs to check the the error returned from `Recv()` after each call. If this is `nil`, the stream is still good and it can continue reading; if it's `io.EOF` the message stream has ended and the server can return its `RouteSummary`. If it has any other value, we return the error "as is" so that it'll be translated to an RPC status by the gRPC layer. + +#### Bidirectional streaming RPC +Finally, let's look at our bidirectional streaming RPC `RouteChat()`. + +```go +func (s *routeGuideServer) RouteChat(stream pb.RouteGuide_RouteChatServer) error { + for { + in, err := stream.Recv() + if err == io.EOF { + return nil + } + if err != nil { + return err + } + key := serialize(in.Location) + ... // look for notes to be sent to client + for _, note := range s.routeNotes[key] { + if err := stream.Send(note); err != nil { + return err + } + } + } +} +``` + +This time we get a `RouteGuide_RouteChatServer` stream that, as in our client-side streaming example, can be used to read and write messages. However, this time we return values via our method's stream while the client is still writing messages to *their* message stream. + +The syntax for reading and writing here is very similar to our client-streaming method, except the server uses the stream's `Send()` method rather than `SendAndClose()` because it's writing multiple responses. Although each side will always get the other's messages in the order they were written, both the client and server can read and write in any order — the streams operate completely independently. + +### Starting the server + +Once we've implemented all our methods, we also need to start up a gRPC server so that clients can actually use our service. The following snippet shows how we do this for our `RouteGuide` service: + +```go +flag.Parse() +lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port)) +if err != nil { + log.Fatalf("failed to listen: %v", err) +} +grpcServer := grpc.NewServer() +pb.RegisterRouteGuideServer(grpcServer, &routeGuideServer{}) +... // determine whether to use TLS +grpcServer.Serve(lis) +``` +To build and start a server, we: + +1. Specify the port we want to use to listen for client requests using `lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))`. +2. Create an instance of the gRPC server using `grpc.NewServer()`. +3. Register our service implementation with the gRPC server. +4. Call `Serve()` on the server with our port details to do a blocking wait until the process is killed or `Stop()` is called. + +<a name="client"></a> +## Creating the client + +In this section, we'll look at creating a Go client for our `RouteGuide` service. You can see our complete example client code in [grpc-go/examples/route_guide/client/client.go](https://github.com/grpc/grpc-go/tree/master/examples/route_guide/client/client.go). + +### Creating a stub + +To call service methods, we first need to create a gRPC *channel* to communicate with the server. We create this by passing the server address and port number to `grpc.Dial()` as follows: + +```go +conn, err := grpc.Dial(*serverAddr) +if err != nil { + ... +} +defer conn.Close() +``` + +You can use `DialOptions` to set the auth credentials (e.g., TLS, GCE credentials, JWT credentials) in `grpc.Dial` if the service you request requires that - however, we don't need to do this for our `RouteGuide` service. + +Once the gRPC *channel* is setup, we need a client *stub* to perform RPCs. We get this using the `NewRouteGuideClient` method provided in the `pb` package we generated from our .proto. + +```go +client := pb.NewRouteGuideClient(conn) +``` + +### Calling service methods + +Now let's look at how we call our service methods. Note that in gRPC-Go, RPCs operate in a blocking/synchronous mode, which means that the RPC call waits for the server to respond, and will either return a response or an error. + +#### Simple RPC + +Calling the simple RPC `GetFeature` is nearly as straightforward as calling a local method. + +```go +feature, err := client.GetFeature(context.Background(), &pb.Point{409146138, -746188906}) +if err != nil { + ... +} +``` + +As you can see, we call the method on the stub we got earlier. In our method parameters we create and populate a request protocol buffer object (in our case `Point`). We also pass a `context.Context` object which lets us change our RPC's behaviour if necessary, such as time-out/cancel an RPC in flight. If the call doesn't return an error, then we can read the response information from the server from the first return value. + +```go +log.Println(feature) +``` + +#### Server-side streaming RPC + +Here's where we call the server-side streaming method `ListFeatures`, which returns a stream of geographical `Feature`s. If you've already read [Creating the server](#server) some of this may look very familiar - streaming RPCs are implemented in a similar way on both sides. + +```go +rect := &pb.Rectangle{ ... } // initialize a pb.Rectangle +stream, err := client.ListFeatures(context.Background(), rect) +if err != nil { + ... +} +for { + feature, err := stream.Recv() + if err == io.EOF { + break + } + if err != nil { + log.Fatalf("%v.ListFeatures(_) = _, %v", client, err) + } + log.Println(feature) +} +``` + +As in the simple RPC, we pass the method a context and a request. However, instead of getting a response object back, we get back an instance of `RouteGuide_ListFeaturesClient`. The client can use the `RouteGuide_ListFeaturesClient` stream to read the server's responses. + +We use the `RouteGuide_ListFeaturesClient`'s `Recv()` method to repeatedly read in the server's responses to a response protocol buffer object (in this case a `Feature`) until there are no more messages: the client needs to check the error `err` returned from `Recv()` after each call. If `nil`, the stream is still good and it can continue reading; if it's `io.EOF` then the message stream has ended; otherwise there must be an RPC error, which is passed over through `err`. + +#### Client-side streaming RPC + +The client-side streaming method `RecordRoute` is similar to the server-side method, except that we only pass the method a context and get a `RouteGuide_RecordRouteClient` stream back, which we can use to both write *and* read messages. + +```go +// Create a random number of random points +r := rand.New(rand.NewSource(time.Now().UnixNano())) +pointCount := int(r.Int31n(100)) + 2 // Traverse at least two points +var points []*pb.Point +for i := 0; i < pointCount; i++ { + points = append(points, randomPoint(r)) +} +log.Printf("Traversing %d points.", len(points)) +stream, err := client.RecordRoute(context.Background()) +if err != nil { + log.Fatalf("%v.RecordRoute(_) = _, %v", client, err) +} +for _, point := range points { + if err := stream.Send(point); err != nil { + log.Fatalf("%v.Send(%v) = %v", stream, point, err) + } +} +reply, err := stream.CloseAndRecv() +if err != nil { + log.Fatalf("%v.CloseAndRecv() got error %v, want %v", stream, err, nil) +} +log.Printf("Route summary: %v", reply) +``` + +The `RouteGuide_RecordRouteClient` has a `Send()` method that we can use to send requests to the server. Once we've finished writing our client's requests to the stream using `Send()`, we need to call `CloseAndRecv()` on the stream to let gRPC know that we've finished writing and are expecting to receive a response. We get our RPC status from the `err` returned from `CloseAndRecv()`. If the status is `nil`, then the first return value from `CloseAndRecv()` will be a valid server response. + +#### Bidirectional streaming RPC + +Finally, let's look at our bidirectional streaming RPC `RouteChat()`. As in the case of `RecordRoute`, we only pass the method a context object and get back a stream that we can use to both write and read messages. However, this time we return values via our method's stream while the server is still writing messages to *their* message stream. + +```go +stream, err := client.RouteChat(context.Background()) +waitc := make(chan struct{}) +go func() { + for { + in, err := stream.Recv() + if err == io.EOF { + // read done. + close(waitc) + return + } + if err != nil { + log.Fatalf("Failed to receive a note : %v", err) + } + log.Printf("Got message %s at point(%d, %d)", in.Message, in.Location.Latitude, in.Location.Longitude) + } +}() +for _, note := range notes { + if err := stream.Send(note); err != nil { + log.Fatalf("Failed to send a note: %v", err) + } +} +stream.CloseSend() +<-waitc +``` + +The syntax for reading and writing here is very similar to our client-side streaming method, except we use the stream's `CloseSend()` method once we've finished our call. Although each side will always get the other's messages in the order they were written, both the client and server can read and write in any order — the streams operate completely independently. + +## Try it out! + +To compile and run the server, assuming you are in the folder +`$GOPATH/src/google.golang.org/grpc/examples/route_guide`, simply: + +```sh +$ go run server/server.go +``` + +Likewise, to run the client: + +```sh +$ go run client/client.go +``` + diff --git a/vendor/google.golang.org/grpc/examples/helloworld/greeter_client/main.go b/vendor/google.golang.org/grpc/examples/helloworld/greeter_client/main.go new file mode 100644 index 0000000..a451c99 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/helloworld/greeter_client/main.go @@ -0,0 +1,69 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "log" + "os" + + "golang.org/x/net/context" + "google.golang.org/grpc" + pb "google.golang.org/grpc/examples/helloworld/helloworld" +) + +const ( + address = "localhost:50051" + defaultName = "world" +) + +func main() { + // Set up a connection to the server. + conn, err := grpc.Dial(address, grpc.WithInsecure()) + if err != nil { + log.Fatalf("did not connect: %v", err) + } + defer conn.Close() + c := pb.NewGreeterClient(conn) + + // Contact the server and print out its response. + name := defaultName + if len(os.Args) > 1 { + name = os.Args[1] + } + r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name}) + if err != nil { + log.Fatalf("could not greet: %v", err) + } + log.Printf("Greeting: %s", r.Message) +} diff --git a/vendor/google.golang.org/grpc/examples/helloworld/greeter_server/main.go b/vendor/google.golang.org/grpc/examples/helloworld/greeter_server/main.go new file mode 100644 index 0000000..162cf90 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/helloworld/greeter_server/main.go @@ -0,0 +1,70 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "log" + "net" + + "golang.org/x/net/context" + "google.golang.org/grpc" + pb "google.golang.org/grpc/examples/helloworld/helloworld" + "google.golang.org/grpc/reflection" +) + +const ( + port = ":50051" +) + +// server is used to implement helloworld.GreeterServer. +type server struct{} + +// SayHello implements helloworld.GreeterServer +func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { + return &pb.HelloReply{Message: "Hello " + in.Name}, nil +} + +func main() { + lis, err := net.Listen("tcp", port) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + s := grpc.NewServer() + pb.RegisterGreeterServer(s, &server{}) + // Register reflection service on gRPC server. + reflection.Register(s) + if err := s.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + } +} diff --git a/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.pb.go b/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.pb.go new file mode 100644 index 0000000..c8c8942 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.pb.go @@ -0,0 +1,151 @@ +// Code generated by protoc-gen-go. +// source: helloworld.proto +// DO NOT EDIT! + +/* +Package helloworld is a generated protocol buffer package. + +It is generated from these files: + helloworld.proto + +It has these top-level messages: + HelloRequest + HelloReply +*/ +package helloworld + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The request message containing the user's name. +type HelloRequest struct { + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *HelloRequest) Reset() { *m = HelloRequest{} } +func (m *HelloRequest) String() string { return proto.CompactTextString(m) } +func (*HelloRequest) ProtoMessage() {} +func (*HelloRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// The response message containing the greetings +type HelloReply struct { + Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` +} + +func (m *HelloReply) Reset() { *m = HelloReply{} } +func (m *HelloReply) String() string { return proto.CompactTextString(m) } +func (*HelloReply) ProtoMessage() {} +func (*HelloReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func init() { + proto.RegisterType((*HelloRequest)(nil), "helloworld.HelloRequest") + proto.RegisterType((*HelloReply)(nil), "helloworld.HelloReply") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Greeter service + +type GreeterClient interface { + // Sends a greeting + SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) +} + +type greeterClient struct { + cc *grpc.ClientConn +} + +func NewGreeterClient(cc *grpc.ClientConn) GreeterClient { + return &greeterClient{cc} +} + +func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) { + out := new(HelloReply) + err := grpc.Invoke(ctx, "/helloworld.Greeter/SayHello", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Greeter service + +type GreeterServer interface { + // Sends a greeting + SayHello(context.Context, *HelloRequest) (*HelloReply, error) +} + +func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) { + s.RegisterService(&_Greeter_serviceDesc, srv) +} + +func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HelloRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GreeterServer).SayHello(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/helloworld.Greeter/SayHello", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Greeter_serviceDesc = grpc.ServiceDesc{ + ServiceName: "helloworld.Greeter", + HandlerType: (*GreeterServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SayHello", + Handler: _Greeter_SayHello_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "helloworld.proto", +} + +func init() { proto.RegisterFile("helloworld.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 174 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0xc8, 0x48, 0xcd, 0xc9, + 0xc9, 0x2f, 0xcf, 0x2f, 0xca, 0x49, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x42, 0x88, + 0x28, 0x29, 0x71, 0xf1, 0x78, 0x80, 0x78, 0x41, 0xa9, 0x85, 0xa5, 0xa9, 0xc5, 0x25, 0x42, 0x42, + 0x5c, 0x2c, 0x79, 0x89, 0xb9, 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x60, 0xb6, 0x92, + 0x1a, 0x17, 0x17, 0x54, 0x4d, 0x41, 0x4e, 0xa5, 0x90, 0x04, 0x17, 0x7b, 0x6e, 0x6a, 0x71, 0x71, + 0x62, 0x3a, 0x4c, 0x11, 0x8c, 0x6b, 0xe4, 0xc9, 0xc5, 0xee, 0x5e, 0x94, 0x9a, 0x5a, 0x92, 0x5a, + 0x24, 0x64, 0xc7, 0xc5, 0x11, 0x9c, 0x58, 0x09, 0xd6, 0x25, 0x24, 0xa1, 0x87, 0xe4, 0x02, 0x64, + 0xcb, 0xa4, 0xc4, 0xb0, 0xc8, 0x00, 0xad, 0x50, 0x62, 0x70, 0x32, 0xe0, 0x92, 0xce, 0xcc, 0xd7, + 0x4b, 0x2f, 0x2a, 0x48, 0xd6, 0x4b, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0x46, 0x52, 0xeb, + 0xc4, 0x0f, 0x56, 0x1c, 0x0e, 0x62, 0x07, 0x80, 0xbc, 0x14, 0xc0, 0x98, 0xc4, 0x06, 0xf6, 0x9b, + 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x0f, 0xb7, 0xcd, 0xf2, 0xef, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.proto b/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.proto new file mode 100644 index 0000000..c3ddd4a --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.proto @@ -0,0 +1,52 @@ +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "io.grpc.examples.helloworld"; +option java_outer_classname = "HelloWorldProto"; + +package helloworld; + +// The greeting service definition. +service Greeter { + // Sends a greeting + rpc SayHello (HelloRequest) returns (HelloReply) {} +} + +// The request message containing the user's name. +message HelloRequest { + string name = 1; +} + +// The response message containing the greetings +message HelloReply { + string message = 1; +} diff --git a/vendor/google.golang.org/grpc/examples/helloworld/mock/hw_test.go b/vendor/google.golang.org/grpc/examples/helloworld/mock/hw_test.go new file mode 100644 index 0000000..b63fec7 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/helloworld/mock/hw_test.go @@ -0,0 +1,49 @@ +package mock_test + +import ( + "fmt" + "testing" + + "github.com/golang/mock/gomock" + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + helloworld "google.golang.org/grpc/examples/helloworld/helloworld" + hwmock "google.golang.org/grpc/examples/helloworld/mock/mock_helloworld" +) + +// rpcMsg implements the gomock.Matcher interface +type rpcMsg struct { + msg proto.Message +} + +func (r *rpcMsg) Matches(msg interface{}) bool { + m, ok := msg.(proto.Message) + if !ok { + return false + } + return proto.Equal(m, r.msg) +} + +func (r *rpcMsg) String() string { + return fmt.Sprintf("is %s", r.msg) +} + +func TestSayHello(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + mockGreeterClient := hwmock.NewMockGreeterClient(ctrl) + req := &helloworld.HelloRequest{Name: "unit_test"} + mockGreeterClient.EXPECT().SayHello( + gomock.Any(), + &rpcMsg{msg: req}, + ).Return(&helloworld.HelloReply{Message: "Mocked Interface"}, nil) + testSayHello(t, mockGreeterClient) +} + +func testSayHello(t *testing.T, client helloworld.GreeterClient) { + r, err := client.SayHello(context.Background(), &helloworld.HelloRequest{Name: "unit_test"}) + if err != nil || r.Message != "Mocked Interface" { + t.Errorf("mocking failed") + } + t.Log("Reply : ", r.Message) +} diff --git a/vendor/google.golang.org/grpc/examples/helloworld/mock/mock_helloworld/hw_mock.go b/vendor/google.golang.org/grpc/examples/helloworld/mock/mock_helloworld/hw_mock.go new file mode 100644 index 0000000..14957ed --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/helloworld/mock/mock_helloworld/hw_mock.go @@ -0,0 +1,48 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: google.golang.org/grpc/examples/helloworld/helloworld (interfaces: GreeterClient) + +package mock_helloworld + +import ( + gomock "github.com/golang/mock/gomock" + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" + helloworld "google.golang.org/grpc/examples/helloworld/helloworld" +) + +// Mock of GreeterClient interface +type MockGreeterClient struct { + ctrl *gomock.Controller + recorder *_MockGreeterClientRecorder +} + +// Recorder for MockGreeterClient (not exported) +type _MockGreeterClientRecorder struct { + mock *MockGreeterClient +} + +func NewMockGreeterClient(ctrl *gomock.Controller) *MockGreeterClient { + mock := &MockGreeterClient{ctrl: ctrl} + mock.recorder = &_MockGreeterClientRecorder{mock} + return mock +} + +func (_m *MockGreeterClient) EXPECT() *_MockGreeterClientRecorder { + return _m.recorder +} + +func (_m *MockGreeterClient) SayHello(_param0 context.Context, _param1 *helloworld.HelloRequest, _param2 ...grpc.CallOption) (*helloworld.HelloReply, error) { + _s := []interface{}{_param0, _param1} + for _, _x := range _param2 { + _s = append(_s, _x) + } + ret := _m.ctrl.Call(_m, "SayHello", _s...) + ret0, _ := ret[0].(*helloworld.HelloReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockGreeterClientRecorder) SayHello(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + _s := append([]interface{}{arg0, arg1}, arg2...) + return _mr.mock.ctrl.RecordCall(_mr.mock, "SayHello", _s...) +} diff --git a/vendor/google.golang.org/grpc/examples/route_guide/README.md b/vendor/google.golang.org/grpc/examples/route_guide/README.md new file mode 100644 index 0000000..a7c0c2b --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/README.md @@ -0,0 +1,35 @@ +# Description +The route guide server and client demonstrate how to use grpc go libraries to +perform unary, client streaming, server streaming and full duplex RPCs. + +Please refer to [gRPC Basics: Go] (http://www.grpc.io/docs/tutorials/basic/go.html) for more information. + +See the definition of the route guide service in proto/route_guide.proto. + +# Run the sample code +To compile and run the server, assuming you are in the root of the route_guide +folder, i.e., .../examples/route_guide/, simply: + +```sh +$ go run server/server.go +``` + +Likewise, to run the client: + +```sh +$ go run client/client.go +``` + +# Optional command line flags +The server and client both take optional command line flags. For example, the +client and server run without TLS by default. To enable TLS: + +```sh +$ go run server/server.go -tls=true +``` + +and + +```sh +$ go run client/client.go -tls=true +``` diff --git a/vendor/google.golang.org/grpc/examples/route_guide/client/client.go b/vendor/google.golang.org/grpc/examples/route_guide/client/client.go new file mode 100644 index 0000000..fff6398 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/client/client.go @@ -0,0 +1,205 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package main implements a simple gRPC client that demonstrates how to use gRPC-Go libraries +// to perform unary, client streaming, server streaming and full duplex RPCs. +// +// It interacts with the route guide service whose definition can be found in proto/route_guide.proto. +package main + +import ( + "flag" + "io" + "math/rand" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + pb "google.golang.org/grpc/examples/route_guide/routeguide" + "google.golang.org/grpc/grpclog" +) + +var ( + tls = flag.Bool("tls", false, "Connection uses TLS if true, else plain TCP") + caFile = flag.String("ca_file", "testdata/ca.pem", "The file containning the CA root cert file") + serverAddr = flag.String("server_addr", "127.0.0.1:10000", "The server address in the format of host:port") + serverHostOverride = flag.String("server_host_override", "x.test.youtube.com", "The server name use to verify the hostname returned by TLS handshake") +) + +// printFeature gets the feature for the given point. +func printFeature(client pb.RouteGuideClient, point *pb.Point) { + grpclog.Printf("Getting feature for point (%d, %d)", point.Latitude, point.Longitude) + feature, err := client.GetFeature(context.Background(), point) + if err != nil { + grpclog.Fatalf("%v.GetFeatures(_) = _, %v: ", client, err) + } + grpclog.Println(feature) +} + +// printFeatures lists all the features within the given bounding Rectangle. +func printFeatures(client pb.RouteGuideClient, rect *pb.Rectangle) { + grpclog.Printf("Looking for features within %v", rect) + stream, err := client.ListFeatures(context.Background(), rect) + if err != nil { + grpclog.Fatalf("%v.ListFeatures(_) = _, %v", client, err) + } + for { + feature, err := stream.Recv() + if err == io.EOF { + break + } + if err != nil { + grpclog.Fatalf("%v.ListFeatures(_) = _, %v", client, err) + } + grpclog.Println(feature) + } +} + +// runRecordRoute sends a sequence of points to server and expects to get a RouteSummary from server. +func runRecordRoute(client pb.RouteGuideClient) { + // Create a random number of random points + r := rand.New(rand.NewSource(time.Now().UnixNano())) + pointCount := int(r.Int31n(100)) + 2 // Traverse at least two points + var points []*pb.Point + for i := 0; i < pointCount; i++ { + points = append(points, randomPoint(r)) + } + grpclog.Printf("Traversing %d points.", len(points)) + stream, err := client.RecordRoute(context.Background()) + if err != nil { + grpclog.Fatalf("%v.RecordRoute(_) = _, %v", client, err) + } + for _, point := range points { + if err := stream.Send(point); err != nil { + grpclog.Fatalf("%v.Send(%v) = %v", stream, point, err) + } + } + reply, err := stream.CloseAndRecv() + if err != nil { + grpclog.Fatalf("%v.CloseAndRecv() got error %v, want %v", stream, err, nil) + } + grpclog.Printf("Route summary: %v", reply) +} + +// runRouteChat receives a sequence of route notes, while sending notes for various locations. +func runRouteChat(client pb.RouteGuideClient) { + notes := []*pb.RouteNote{ + {&pb.Point{Latitude: 0, Longitude: 1}, "First message"}, + {&pb.Point{Latitude: 0, Longitude: 2}, "Second message"}, + {&pb.Point{Latitude: 0, Longitude: 3}, "Third message"}, + {&pb.Point{Latitude: 0, Longitude: 1}, "Fourth message"}, + {&pb.Point{Latitude: 0, Longitude: 2}, "Fifth message"}, + {&pb.Point{Latitude: 0, Longitude: 3}, "Sixth message"}, + } + stream, err := client.RouteChat(context.Background()) + if err != nil { + grpclog.Fatalf("%v.RouteChat(_) = _, %v", client, err) + } + waitc := make(chan struct{}) + go func() { + for { + in, err := stream.Recv() + if err == io.EOF { + // read done. + close(waitc) + return + } + if err != nil { + grpclog.Fatalf("Failed to receive a note : %v", err) + } + grpclog.Printf("Got message %s at point(%d, %d)", in.Message, in.Location.Latitude, in.Location.Longitude) + } + }() + for _, note := range notes { + if err := stream.Send(note); err != nil { + grpclog.Fatalf("Failed to send a note: %v", err) + } + } + stream.CloseSend() + <-waitc +} + +func randomPoint(r *rand.Rand) *pb.Point { + lat := (r.Int31n(180) - 90) * 1e7 + long := (r.Int31n(360) - 180) * 1e7 + return &pb.Point{Latitude: lat, Longitude: long} +} + +func main() { + flag.Parse() + var opts []grpc.DialOption + if *tls { + var sn string + if *serverHostOverride != "" { + sn = *serverHostOverride + } + var creds credentials.TransportCredentials + if *caFile != "" { + var err error + creds, err = credentials.NewClientTLSFromFile(*caFile, sn) + if err != nil { + grpclog.Fatalf("Failed to create TLS credentials %v", err) + } + } else { + creds = credentials.NewClientTLSFromCert(nil, sn) + } + opts = append(opts, grpc.WithTransportCredentials(creds)) + } else { + opts = append(opts, grpc.WithInsecure()) + } + conn, err := grpc.Dial(*serverAddr, opts...) + if err != nil { + grpclog.Fatalf("fail to dial: %v", err) + } + defer conn.Close() + client := pb.NewRouteGuideClient(conn) + + // Looking for a valid feature + printFeature(client, &pb.Point{Latitude: 409146138, Longitude: -746188906}) + + // Feature missing. + printFeature(client, &pb.Point{Latitude: 0, Longitude: 0}) + + // Looking for features between 40, -75 and 42, -73. + printFeatures(client, &pb.Rectangle{ + Lo: &pb.Point{Latitude: 400000000, Longitude: -750000000}, + Hi: &pb.Point{Latitude: 420000000, Longitude: -730000000}, + }) + + // RecordRoute + runRecordRoute(client) + + // RouteChat + runRouteChat(client) +} diff --git a/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.pb.go b/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.pb.go new file mode 100644 index 0000000..cbcf2f3 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.pb.go @@ -0,0 +1,488 @@ +// Code generated by protoc-gen-go. +// source: route_guide.proto +// DO NOT EDIT! + +/* +Package routeguide is a generated protocol buffer package. + +It is generated from these files: + route_guide.proto + +It has these top-level messages: + Point + Rectangle + Feature + RouteNote + RouteSummary +*/ +package routeguide + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Points are represented as latitude-longitude pairs in the E7 representation +// (degrees multiplied by 10**7 and rounded to the nearest integer). +// Latitudes should be in the range +/- 90 degrees and longitude should be in +// the range +/- 180 degrees (inclusive). +type Point struct { + Latitude int32 `protobuf:"varint,1,opt,name=latitude" json:"latitude,omitempty"` + Longitude int32 `protobuf:"varint,2,opt,name=longitude" json:"longitude,omitempty"` +} + +func (m *Point) Reset() { *m = Point{} } +func (m *Point) String() string { return proto.CompactTextString(m) } +func (*Point) ProtoMessage() {} +func (*Point) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// A latitude-longitude rectangle, represented as two diagonally opposite +// points "lo" and "hi". +type Rectangle struct { + // One corner of the rectangle. + Lo *Point `protobuf:"bytes,1,opt,name=lo" json:"lo,omitempty"` + // The other corner of the rectangle. + Hi *Point `protobuf:"bytes,2,opt,name=hi" json:"hi,omitempty"` +} + +func (m *Rectangle) Reset() { *m = Rectangle{} } +func (m *Rectangle) String() string { return proto.CompactTextString(m) } +func (*Rectangle) ProtoMessage() {} +func (*Rectangle) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Rectangle) GetLo() *Point { + if m != nil { + return m.Lo + } + return nil +} + +func (m *Rectangle) GetHi() *Point { + if m != nil { + return m.Hi + } + return nil +} + +// A feature names something at a given point. +// +// If a feature could not be named, the name is empty. +type Feature struct { + // The name of the feature. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The point where the feature is detected. + Location *Point `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"` +} + +func (m *Feature) Reset() { *m = Feature{} } +func (m *Feature) String() string { return proto.CompactTextString(m) } +func (*Feature) ProtoMessage() {} +func (*Feature) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Feature) GetLocation() *Point { + if m != nil { + return m.Location + } + return nil +} + +// A RouteNote is a message sent while at a given point. +type RouteNote struct { + // The location from which the message is sent. + Location *Point `protobuf:"bytes,1,opt,name=location" json:"location,omitempty"` + // The message to be sent. + Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` +} + +func (m *RouteNote) Reset() { *m = RouteNote{} } +func (m *RouteNote) String() string { return proto.CompactTextString(m) } +func (*RouteNote) ProtoMessage() {} +func (*RouteNote) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *RouteNote) GetLocation() *Point { + if m != nil { + return m.Location + } + return nil +} + +// A RouteSummary is received in response to a RecordRoute rpc. +// +// It contains the number of individual points received, the number of +// detected features, and the total distance covered as the cumulative sum of +// the distance between each point. +type RouteSummary struct { + // The number of points received. + PointCount int32 `protobuf:"varint,1,opt,name=point_count,json=pointCount" json:"point_count,omitempty"` + // The number of known features passed while traversing the route. + FeatureCount int32 `protobuf:"varint,2,opt,name=feature_count,json=featureCount" json:"feature_count,omitempty"` + // The distance covered in metres. + Distance int32 `protobuf:"varint,3,opt,name=distance" json:"distance,omitempty"` + // The duration of the traversal in seconds. + ElapsedTime int32 `protobuf:"varint,4,opt,name=elapsed_time,json=elapsedTime" json:"elapsed_time,omitempty"` +} + +func (m *RouteSummary) Reset() { *m = RouteSummary{} } +func (m *RouteSummary) String() string { return proto.CompactTextString(m) } +func (*RouteSummary) ProtoMessage() {} +func (*RouteSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func init() { + proto.RegisterType((*Point)(nil), "routeguide.Point") + proto.RegisterType((*Rectangle)(nil), "routeguide.Rectangle") + proto.RegisterType((*Feature)(nil), "routeguide.Feature") + proto.RegisterType((*RouteNote)(nil), "routeguide.RouteNote") + proto.RegisterType((*RouteSummary)(nil), "routeguide.RouteSummary") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for RouteGuide service + +type RouteGuideClient interface { + // A simple RPC. + // + // Obtains the feature at a given position. + // + // A feature with an empty name is returned if there's no feature at the given + // position. + GetFeature(ctx context.Context, in *Point, opts ...grpc.CallOption) (*Feature, error) + // A server-to-client streaming RPC. + // + // Obtains the Features available within the given Rectangle. Results are + // streamed rather than returned at once (e.g. in a response message with a + // repeated field), as the rectangle may cover a large area and contain a + // huge number of features. + ListFeatures(ctx context.Context, in *Rectangle, opts ...grpc.CallOption) (RouteGuide_ListFeaturesClient, error) + // A client-to-server streaming RPC. + // + // Accepts a stream of Points on a route being traversed, returning a + // RouteSummary when traversal is completed. + RecordRoute(ctx context.Context, opts ...grpc.CallOption) (RouteGuide_RecordRouteClient, error) + // A Bidirectional streaming RPC. + // + // Accepts a stream of RouteNotes sent while a route is being traversed, + // while receiving other RouteNotes (e.g. from other users). + RouteChat(ctx context.Context, opts ...grpc.CallOption) (RouteGuide_RouteChatClient, error) +} + +type routeGuideClient struct { + cc *grpc.ClientConn +} + +func NewRouteGuideClient(cc *grpc.ClientConn) RouteGuideClient { + return &routeGuideClient{cc} +} + +func (c *routeGuideClient) GetFeature(ctx context.Context, in *Point, opts ...grpc.CallOption) (*Feature, error) { + out := new(Feature) + err := grpc.Invoke(ctx, "/routeguide.RouteGuide/GetFeature", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *routeGuideClient) ListFeatures(ctx context.Context, in *Rectangle, opts ...grpc.CallOption) (RouteGuide_ListFeaturesClient, error) { + stream, err := grpc.NewClientStream(ctx, &_RouteGuide_serviceDesc.Streams[0], c.cc, "/routeguide.RouteGuide/ListFeatures", opts...) + if err != nil { + return nil, err + } + x := &routeGuideListFeaturesClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type RouteGuide_ListFeaturesClient interface { + Recv() (*Feature, error) + grpc.ClientStream +} + +type routeGuideListFeaturesClient struct { + grpc.ClientStream +} + +func (x *routeGuideListFeaturesClient) Recv() (*Feature, error) { + m := new(Feature) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *routeGuideClient) RecordRoute(ctx context.Context, opts ...grpc.CallOption) (RouteGuide_RecordRouteClient, error) { + stream, err := grpc.NewClientStream(ctx, &_RouteGuide_serviceDesc.Streams[1], c.cc, "/routeguide.RouteGuide/RecordRoute", opts...) + if err != nil { + return nil, err + } + x := &routeGuideRecordRouteClient{stream} + return x, nil +} + +type RouteGuide_RecordRouteClient interface { + Send(*Point) error + CloseAndRecv() (*RouteSummary, error) + grpc.ClientStream +} + +type routeGuideRecordRouteClient struct { + grpc.ClientStream +} + +func (x *routeGuideRecordRouteClient) Send(m *Point) error { + return x.ClientStream.SendMsg(m) +} + +func (x *routeGuideRecordRouteClient) CloseAndRecv() (*RouteSummary, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(RouteSummary) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *routeGuideClient) RouteChat(ctx context.Context, opts ...grpc.CallOption) (RouteGuide_RouteChatClient, error) { + stream, err := grpc.NewClientStream(ctx, &_RouteGuide_serviceDesc.Streams[2], c.cc, "/routeguide.RouteGuide/RouteChat", opts...) + if err != nil { + return nil, err + } + x := &routeGuideRouteChatClient{stream} + return x, nil +} + +type RouteGuide_RouteChatClient interface { + Send(*RouteNote) error + Recv() (*RouteNote, error) + grpc.ClientStream +} + +type routeGuideRouteChatClient struct { + grpc.ClientStream +} + +func (x *routeGuideRouteChatClient) Send(m *RouteNote) error { + return x.ClientStream.SendMsg(m) +} + +func (x *routeGuideRouteChatClient) Recv() (*RouteNote, error) { + m := new(RouteNote) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for RouteGuide service + +type RouteGuideServer interface { + // A simple RPC. + // + // Obtains the feature at a given position. + // + // A feature with an empty name is returned if there's no feature at the given + // position. + GetFeature(context.Context, *Point) (*Feature, error) + // A server-to-client streaming RPC. + // + // Obtains the Features available within the given Rectangle. Results are + // streamed rather than returned at once (e.g. in a response message with a + // repeated field), as the rectangle may cover a large area and contain a + // huge number of features. + ListFeatures(*Rectangle, RouteGuide_ListFeaturesServer) error + // A client-to-server streaming RPC. + // + // Accepts a stream of Points on a route being traversed, returning a + // RouteSummary when traversal is completed. + RecordRoute(RouteGuide_RecordRouteServer) error + // A Bidirectional streaming RPC. + // + // Accepts a stream of RouteNotes sent while a route is being traversed, + // while receiving other RouteNotes (e.g. from other users). + RouteChat(RouteGuide_RouteChatServer) error +} + +func RegisterRouteGuideServer(s *grpc.Server, srv RouteGuideServer) { + s.RegisterService(&_RouteGuide_serviceDesc, srv) +} + +func _RouteGuide_GetFeature_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Point) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RouteGuideServer).GetFeature(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/routeguide.RouteGuide/GetFeature", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RouteGuideServer).GetFeature(ctx, req.(*Point)) + } + return interceptor(ctx, in, info, handler) +} + +func _RouteGuide_ListFeatures_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(Rectangle) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(RouteGuideServer).ListFeatures(m, &routeGuideListFeaturesServer{stream}) +} + +type RouteGuide_ListFeaturesServer interface { + Send(*Feature) error + grpc.ServerStream +} + +type routeGuideListFeaturesServer struct { + grpc.ServerStream +} + +func (x *routeGuideListFeaturesServer) Send(m *Feature) error { + return x.ServerStream.SendMsg(m) +} + +func _RouteGuide_RecordRoute_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(RouteGuideServer).RecordRoute(&routeGuideRecordRouteServer{stream}) +} + +type RouteGuide_RecordRouteServer interface { + SendAndClose(*RouteSummary) error + Recv() (*Point, error) + grpc.ServerStream +} + +type routeGuideRecordRouteServer struct { + grpc.ServerStream +} + +func (x *routeGuideRecordRouteServer) SendAndClose(m *RouteSummary) error { + return x.ServerStream.SendMsg(m) +} + +func (x *routeGuideRecordRouteServer) Recv() (*Point, error) { + m := new(Point) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _RouteGuide_RouteChat_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(RouteGuideServer).RouteChat(&routeGuideRouteChatServer{stream}) +} + +type RouteGuide_RouteChatServer interface { + Send(*RouteNote) error + Recv() (*RouteNote, error) + grpc.ServerStream +} + +type routeGuideRouteChatServer struct { + grpc.ServerStream +} + +func (x *routeGuideRouteChatServer) Send(m *RouteNote) error { + return x.ServerStream.SendMsg(m) +} + +func (x *routeGuideRouteChatServer) Recv() (*RouteNote, error) { + m := new(RouteNote) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _RouteGuide_serviceDesc = grpc.ServiceDesc{ + ServiceName: "routeguide.RouteGuide", + HandlerType: (*RouteGuideServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetFeature", + Handler: _RouteGuide_GetFeature_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ListFeatures", + Handler: _RouteGuide_ListFeatures_Handler, + ServerStreams: true, + }, + { + StreamName: "RecordRoute", + Handler: _RouteGuide_RecordRoute_Handler, + ClientStreams: true, + }, + { + StreamName: "RouteChat", + Handler: _RouteGuide_RouteChat_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "route_guide.proto", +} + +func init() { proto.RegisterFile("route_guide.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 404 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0xc1, 0x4a, 0xeb, 0x40, + 0x14, 0xed, 0xf4, 0xb5, 0xaf, 0x2f, 0x37, 0x79, 0x3c, 0x3a, 0x0f, 0x21, 0x54, 0x41, 0x8d, 0x9b, + 0x6e, 0x0c, 0xa5, 0x82, 0x4b, 0xc5, 0x16, 0xec, 0xa6, 0x48, 0x8d, 0xdd, 0x97, 0x31, 0x19, 0xd3, + 0x81, 0x24, 0x13, 0x92, 0x09, 0xe8, 0x07, 0xf8, 0x05, 0xfe, 0xb0, 0x93, 0xc9, 0xa4, 0x4d, 0xb5, + 0xc5, 0x5d, 0xe6, 0xdc, 0x73, 0xee, 0x3d, 0xf7, 0x5c, 0x02, 0xfd, 0x8c, 0x17, 0x82, 0xae, 0xc2, + 0x82, 0x05, 0xd4, 0x4d, 0x33, 0x2e, 0x38, 0x06, 0x05, 0x29, 0xc4, 0xb9, 0x83, 0xee, 0x82, 0xb3, + 0x44, 0xe0, 0x01, 0xfc, 0x89, 0x88, 0x60, 0xa2, 0x08, 0xa8, 0x8d, 0xce, 0xd0, 0xb0, 0xeb, 0x6d, + 0xde, 0xf8, 0x04, 0x8c, 0x88, 0x27, 0x61, 0x55, 0x6c, 0xab, 0xe2, 0x16, 0x70, 0x1e, 0xc1, 0xf0, + 0xa8, 0x2f, 0x48, 0x12, 0x46, 0x14, 0x9f, 0x43, 0x3b, 0xe2, 0xaa, 0x81, 0x39, 0xee, 0xbb, 0xdb, + 0x41, 0xae, 0x9a, 0xe2, 0xc9, 0x62, 0x49, 0x59, 0x33, 0xd5, 0x66, 0x3f, 0x65, 0xcd, 0x9c, 0x39, + 0xf4, 0xee, 0x29, 0x11, 0x45, 0x46, 0x31, 0x86, 0x4e, 0x42, 0xe2, 0xca, 0x93, 0xe1, 0xa9, 0x6f, + 0x7c, 0x29, 0xbd, 0x72, 0x5f, 0xba, 0xe3, 0xc9, 0xe1, 0x3e, 0x1b, 0x8a, 0xb3, 0x94, 0x06, 0xcb, + 0xea, 0x03, 0x17, 0xbb, 0x5a, 0xf4, 0xa3, 0x16, 0xdb, 0xd0, 0x8b, 0x69, 0x9e, 0x93, 0xb0, 0x5a, + 0xdc, 0xf0, 0xea, 0xa7, 0xf3, 0x81, 0xc0, 0x52, 0x6d, 0x9f, 0x8a, 0x38, 0x26, 0xd9, 0x1b, 0x3e, + 0x05, 0x33, 0x2d, 0xd5, 0x2b, 0x9f, 0x17, 0x89, 0xd0, 0x21, 0x82, 0x82, 0xa6, 0x25, 0x82, 0x2f, + 0xe0, 0xef, 0x4b, 0xb5, 0x95, 0xa6, 0x54, 0x51, 0x5a, 0x1a, 0xac, 0x48, 0xf2, 0x0e, 0x01, 0xcb, + 0x65, 0x9a, 0x3e, 0xb5, 0x7f, 0x55, 0x77, 0xa8, 0xdf, 0x32, 0x39, 0x8b, 0x46, 0x24, 0xcd, 0x69, + 0xb0, 0x12, 0x4c, 0x66, 0xd2, 0x51, 0x75, 0x53, 0x63, 0x4b, 0x09, 0x8d, 0xdf, 0xdb, 0x00, 0xca, + 0xd5, 0xac, 0x5c, 0x07, 0x5f, 0x03, 0xcc, 0xa8, 0xa8, 0xb3, 0xfc, 0xbe, 0xe9, 0xe0, 0x7f, 0x13, + 0xd2, 0x3c, 0xa7, 0x85, 0x6f, 0xc0, 0x9a, 0xcb, 0xa9, 0x1a, 0xc8, 0xf1, 0x51, 0x93, 0xb6, 0xb9, + 0xf6, 0x01, 0xf5, 0x08, 0x49, 0xbd, 0x29, 0x59, 0x3c, 0x0b, 0x94, 0x97, 0x7d, 0x83, 0xed, 0x9d, + 0x8e, 0x8d, 0x1c, 0x9d, 0xd6, 0x10, 0xe1, 0x5b, 0x7d, 0xb2, 0xe9, 0x9a, 0x88, 0x2f, 0xc3, 0xeb, + 0x4b, 0x0e, 0xf6, 0xc3, 0xa5, 0x7c, 0x84, 0x26, 0x23, 0x38, 0x66, 0xdc, 0x0d, 0xb3, 0xd4, 0x77, + 0xe9, 0x2b, 0x89, 0xd3, 0x88, 0xe6, 0x0d, 0xfa, 0xe4, 0xdf, 0x36, 0xa3, 0x45, 0xf9, 0x4f, 0x2c, + 0xd0, 0xf3, 0x6f, 0xf5, 0x73, 0x5c, 0x7d, 0x06, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe4, 0xef, 0xe6, + 0x31, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.proto b/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.proto new file mode 100644 index 0000000..5a782aa --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.proto @@ -0,0 +1,125 @@ +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "io.grpc.examples.routeguide"; +option java_outer_classname = "RouteGuideProto"; + +package routeguide; + +// Interface exported by the server. +service RouteGuide { + // A simple RPC. + // + // Obtains the feature at a given position. + // + // A feature with an empty name is returned if there's no feature at the given + // position. + rpc GetFeature(Point) returns (Feature) {} + + // A server-to-client streaming RPC. + // + // Obtains the Features available within the given Rectangle. Results are + // streamed rather than returned at once (e.g. in a response message with a + // repeated field), as the rectangle may cover a large area and contain a + // huge number of features. + rpc ListFeatures(Rectangle) returns (stream Feature) {} + + // A client-to-server streaming RPC. + // + // Accepts a stream of Points on a route being traversed, returning a + // RouteSummary when traversal is completed. + rpc RecordRoute(stream Point) returns (RouteSummary) {} + + // A Bidirectional streaming RPC. + // + // Accepts a stream of RouteNotes sent while a route is being traversed, + // while receiving other RouteNotes (e.g. from other users). + rpc RouteChat(stream RouteNote) returns (stream RouteNote) {} +} + +// Points are represented as latitude-longitude pairs in the E7 representation +// (degrees multiplied by 10**7 and rounded to the nearest integer). +// Latitudes should be in the range +/- 90 degrees and longitude should be in +// the range +/- 180 degrees (inclusive). +message Point { + int32 latitude = 1; + int32 longitude = 2; +} + +// A latitude-longitude rectangle, represented as two diagonally opposite +// points "lo" and "hi". +message Rectangle { + // One corner of the rectangle. + Point lo = 1; + + // The other corner of the rectangle. + Point hi = 2; +} + +// A feature names something at a given point. +// +// If a feature could not be named, the name is empty. +message Feature { + // The name of the feature. + string name = 1; + + // The point where the feature is detected. + Point location = 2; +} + +// A RouteNote is a message sent while at a given point. +message RouteNote { + // The location from which the message is sent. + Point location = 1; + + // The message to be sent. + string message = 2; +} + +// A RouteSummary is received in response to a RecordRoute rpc. +// +// It contains the number of individual points received, the number of +// detected features, and the total distance covered as the cumulative sum of +// the distance between each point. +message RouteSummary { + // The number of points received. + int32 point_count = 1; + + // The number of known features passed while traversing the route. + int32 feature_count = 2; + + // The distance covered in metres. + int32 distance = 3; + + // The duration of the traversal in seconds. + int32 elapsed_time = 4; +} diff --git a/vendor/google.golang.org/grpc/examples/route_guide/server/server.go b/vendor/google.golang.org/grpc/examples/route_guide/server/server.go new file mode 100644 index 0000000..5932722 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/server/server.go @@ -0,0 +1,239 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package main implements a simple gRPC server that demonstrates how to use gRPC-Go libraries +// to perform unary, client streaming, server streaming and full duplex RPCs. +// +// It implements the route guide service whose definition can be found in proto/route_guide.proto. +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io" + "io/ioutil" + "math" + "net" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + + "github.com/golang/protobuf/proto" + + pb "google.golang.org/grpc/examples/route_guide/routeguide" +) + +var ( + tls = flag.Bool("tls", false, "Connection uses TLS if true, else plain TCP") + certFile = flag.String("cert_file", "testdata/server1.pem", "The TLS cert file") + keyFile = flag.String("key_file", "testdata/server1.key", "The TLS key file") + jsonDBFile = flag.String("json_db_file", "testdata/route_guide_db.json", "A json file containing a list of features") + port = flag.Int("port", 10000, "The server port") +) + +type routeGuideServer struct { + savedFeatures []*pb.Feature + routeNotes map[string][]*pb.RouteNote +} + +// GetFeature returns the feature at the given point. +func (s *routeGuideServer) GetFeature(ctx context.Context, point *pb.Point) (*pb.Feature, error) { + for _, feature := range s.savedFeatures { + if proto.Equal(feature.Location, point) { + return feature, nil + } + } + // No feature was found, return an unnamed feature + return &pb.Feature{Location: point}, nil +} + +// ListFeatures lists all features contained within the given bounding Rectangle. +func (s *routeGuideServer) ListFeatures(rect *pb.Rectangle, stream pb.RouteGuide_ListFeaturesServer) error { + for _, feature := range s.savedFeatures { + if inRange(feature.Location, rect) { + if err := stream.Send(feature); err != nil { + return err + } + } + } + return nil +} + +// RecordRoute records a route composited of a sequence of points. +// +// It gets a stream of points, and responds with statistics about the "trip": +// number of points, number of known features visited, total distance traveled, and +// total time spent. +func (s *routeGuideServer) RecordRoute(stream pb.RouteGuide_RecordRouteServer) error { + var pointCount, featureCount, distance int32 + var lastPoint *pb.Point + startTime := time.Now() + for { + point, err := stream.Recv() + if err == io.EOF { + endTime := time.Now() + return stream.SendAndClose(&pb.RouteSummary{ + PointCount: pointCount, + FeatureCount: featureCount, + Distance: distance, + ElapsedTime: int32(endTime.Sub(startTime).Seconds()), + }) + } + if err != nil { + return err + } + pointCount++ + for _, feature := range s.savedFeatures { + if proto.Equal(feature.Location, point) { + featureCount++ + } + } + if lastPoint != nil { + distance += calcDistance(lastPoint, point) + } + lastPoint = point + } +} + +// RouteChat receives a stream of message/location pairs, and responds with a stream of all +// previous messages at each of those locations. +func (s *routeGuideServer) RouteChat(stream pb.RouteGuide_RouteChatServer) error { + for { + in, err := stream.Recv() + if err == io.EOF { + return nil + } + if err != nil { + return err + } + key := serialize(in.Location) + if _, present := s.routeNotes[key]; !present { + s.routeNotes[key] = []*pb.RouteNote{in} + } else { + s.routeNotes[key] = append(s.routeNotes[key], in) + } + for _, note := range s.routeNotes[key] { + if err := stream.Send(note); err != nil { + return err + } + } + } +} + +// loadFeatures loads features from a JSON file. +func (s *routeGuideServer) loadFeatures(filePath string) { + file, err := ioutil.ReadFile(filePath) + if err != nil { + grpclog.Fatalf("Failed to load default features: %v", err) + } + if err := json.Unmarshal(file, &s.savedFeatures); err != nil { + grpclog.Fatalf("Failed to load default features: %v", err) + } +} + +func toRadians(num float64) float64 { + return num * math.Pi / float64(180) +} + +// calcDistance calculates the distance between two points using the "haversine" formula. +// This code was taken from http://www.movable-type.co.uk/scripts/latlong.html. +func calcDistance(p1 *pb.Point, p2 *pb.Point) int32 { + const CordFactor float64 = 1e7 + const R float64 = float64(6371000) // metres + lat1 := float64(p1.Latitude) / CordFactor + lat2 := float64(p2.Latitude) / CordFactor + lng1 := float64(p1.Longitude) / CordFactor + lng2 := float64(p2.Longitude) / CordFactor + φ1 := toRadians(lat1) + φ2 := toRadians(lat2) + Δφ := toRadians(lat2 - lat1) + Δλ := toRadians(lng2 - lng1) + + a := math.Sin(Δφ/2)*math.Sin(Δφ/2) + + math.Cos(φ1)*math.Cos(φ2)* + math.Sin(Δλ/2)*math.Sin(Δλ/2) + c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a)) + + distance := R * c + return int32(distance) +} + +func inRange(point *pb.Point, rect *pb.Rectangle) bool { + left := math.Min(float64(rect.Lo.Longitude), float64(rect.Hi.Longitude)) + right := math.Max(float64(rect.Lo.Longitude), float64(rect.Hi.Longitude)) + top := math.Max(float64(rect.Lo.Latitude), float64(rect.Hi.Latitude)) + bottom := math.Min(float64(rect.Lo.Latitude), float64(rect.Hi.Latitude)) + + if float64(point.Longitude) >= left && + float64(point.Longitude) <= right && + float64(point.Latitude) >= bottom && + float64(point.Latitude) <= top { + return true + } + return false +} + +func serialize(point *pb.Point) string { + return fmt.Sprintf("%d %d", point.Latitude, point.Longitude) +} + +func newServer() *routeGuideServer { + s := new(routeGuideServer) + s.loadFeatures(*jsonDBFile) + s.routeNotes = make(map[string][]*pb.RouteNote) + return s +} + +func main() { + flag.Parse() + lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port)) + if err != nil { + grpclog.Fatalf("failed to listen: %v", err) + } + var opts []grpc.ServerOption + if *tls { + creds, err := credentials.NewServerTLSFromFile(*certFile, *keyFile) + if err != nil { + grpclog.Fatalf("Failed to generate credentials %v", err) + } + opts = []grpc.ServerOption{grpc.Creds(creds)} + } + grpcServer := grpc.NewServer(opts...) + pb.RegisterRouteGuideServer(grpcServer, newServer()) + grpcServer.Serve(lis) +} diff --git a/vendor/google.golang.org/grpc/examples/route_guide/testdata/ca.pem b/vendor/google.golang.org/grpc/examples/route_guide/testdata/ca.pem new file mode 100644 index 0000000..6c8511a --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/testdata/ca.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla +Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 +YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT +BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 ++L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu +g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd +Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau +sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m +oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG +Dfcog5wrJytaQ6UA0wE= +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/examples/route_guide/testdata/route_guide_db.json b/vendor/google.golang.org/grpc/examples/route_guide/testdata/route_guide_db.json new file mode 100644 index 0000000..9d6a980 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/testdata/route_guide_db.json @@ -0,0 +1,601 @@ +[{ + "location": { + "latitude": 407838351, + "longitude": -746143763 + }, + "name": "Patriots Path, Mendham, NJ 07945, USA" +}, { + "location": { + "latitude": 408122808, + "longitude": -743999179 + }, + "name": "101 New Jersey 10, Whippany, NJ 07981, USA" +}, { + "location": { + "latitude": 413628156, + "longitude": -749015468 + }, + "name": "U.S. 6, Shohola, PA 18458, USA" +}, { + "location": { + "latitude": 419999544, + "longitude": -740371136 + }, + "name": "5 Conners Road, Kingston, NY 12401, USA" +}, { + "location": { + "latitude": 414008389, + "longitude": -743951297 + }, + "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" +}, { + "location": { + "latitude": 419611318, + "longitude": -746524769 + }, + "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" +}, { + "location": { + "latitude": 406109563, + "longitude": -742186778 + }, + "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" +}, { + "location": { + "latitude": 416802456, + "longitude": -742370183 + }, + "name": "352 South Mountain Road, Wallkill, NY 12589, USA" +}, { + "location": { + "latitude": 412950425, + "longitude": -741077389 + }, + "name": "Bailey Turn Road, Harriman, NY 10926, USA" +}, { + "location": { + "latitude": 412144655, + "longitude": -743949739 + }, + "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" +}, { + "location": { + "latitude": 415736605, + "longitude": -742847522 + }, + "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA" +}, { + "location": { + "latitude": 413843930, + "longitude": -740501726 + }, + "name": "162 Merrill Road, Highland Mills, NY 10930, USA" +}, { + "location": { + "latitude": 410873075, + "longitude": -744459023 + }, + "name": "Clinton Road, West Milford, NJ 07480, USA" +}, { + "location": { + "latitude": 412346009, + "longitude": -744026814 + }, + "name": "16 Old Brook Lane, Warwick, NY 10990, USA" +}, { + "location": { + "latitude": 402948455, + "longitude": -747903913 + }, + "name": "3 Drake Lane, Pennington, NJ 08534, USA" +}, { + "location": { + "latitude": 406337092, + "longitude": -740122226 + }, + "name": "6324 8th Avenue, Brooklyn, NY 11220, USA" +}, { + "location": { + "latitude": 406421967, + "longitude": -747727624 + }, + "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA" +}, { + "location": { + "latitude": 416318082, + "longitude": -749677716 + }, + "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA" +}, { + "location": { + "latitude": 415301720, + "longitude": -748416257 + }, + "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA" +}, { + "location": { + "latitude": 402647019, + "longitude": -747071791 + }, + "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA" +}, { + "location": { + "latitude": 412567807, + "longitude": -741058078 + }, + "name": "New York State Reference Route 987E, Southfields, NY 10975, USA" +}, { + "location": { + "latitude": 416855156, + "longitude": -744420597 + }, + "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA" +}, { + "location": { + "latitude": 404663628, + "longitude": -744820157 + }, + "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA" +}, { + "location": { + "latitude": 407113723, + "longitude": -749746483 + }, + "name": "" +}, { + "location": { + "latitude": 402133926, + "longitude": -743613249 + }, + "name": "" +}, { + "location": { + "latitude": 400273442, + "longitude": -741220915 + }, + "name": "" +}, { + "location": { + "latitude": 411236786, + "longitude": -744070769 + }, + "name": "" +}, { + "location": { + "latitude": 411633782, + "longitude": -746784970 + }, + "name": "211-225 Plains Road, Augusta, NJ 07822, USA" +}, { + "location": { + "latitude": 415830701, + "longitude": -742952812 + }, + "name": "" +}, { + "location": { + "latitude": 413447164, + "longitude": -748712898 + }, + "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA" +}, { + "location": { + "latitude": 405047245, + "longitude": -749800722 + }, + "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA" +}, { + "location": { + "latitude": 418858923, + "longitude": -746156790 + }, + "name": "" +}, { + "location": { + "latitude": 417951888, + "longitude": -748484944 + }, + "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA" +}, { + "location": { + "latitude": 407033786, + "longitude": -743977337 + }, + "name": "26 East 3rd Street, New Providence, NJ 07974, USA" +}, { + "location": { + "latitude": 417548014, + "longitude": -740075041 + }, + "name": "" +}, { + "location": { + "latitude": 410395868, + "longitude": -744972325 + }, + "name": "" +}, { + "location": { + "latitude": 404615353, + "longitude": -745129803 + }, + "name": "" +}, { + "location": { + "latitude": 406589790, + "longitude": -743560121 + }, + "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA" +}, { + "location": { + "latitude": 414653148, + "longitude": -740477477 + }, + "name": "18 Lannis Avenue, New Windsor, NY 12553, USA" +}, { + "location": { + "latitude": 405957808, + "longitude": -743255336 + }, + "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA" +}, { + "location": { + "latitude": 411733589, + "longitude": -741648093 + }, + "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA" +}, { + "location": { + "latitude": 412676291, + "longitude": -742606606 + }, + "name": "1270 Lakes Road, Monroe, NY 10950, USA" +}, { + "location": { + "latitude": 409224445, + "longitude": -748286738 + }, + "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA" +}, { + "location": { + "latitude": 406523420, + "longitude": -742135517 + }, + "name": "652 Garden Street, Elizabeth, NJ 07202, USA" +}, { + "location": { + "latitude": 401827388, + "longitude": -740294537 + }, + "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA" +}, { + "location": { + "latitude": 410564152, + "longitude": -743685054 + }, + "name": "13-17 Stanley Street, West Milford, NJ 07480, USA" +}, { + "location": { + "latitude": 408472324, + "longitude": -740726046 + }, + "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA" +}, { + "location": { + "latitude": 412452168, + "longitude": -740214052 + }, + "name": "5 White Oak Lane, Stony Point, NY 10980, USA" +}, { + "location": { + "latitude": 409146138, + "longitude": -746188906 + }, + "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA" +}, { + "location": { + "latitude": 404701380, + "longitude": -744781745 + }, + "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA" +}, { + "location": { + "latitude": 409642566, + "longitude": -746017679 + }, + "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA" +}, { + "location": { + "latitude": 408031728, + "longitude": -748645385 + }, + "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA" +}, { + "location": { + "latitude": 413700272, + "longitude": -742135189 + }, + "name": "367 Prospect Road, Chester, NY 10918, USA" +}, { + "location": { + "latitude": 404310607, + "longitude": -740282632 + }, + "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA" +}, { + "location": { + "latitude": 409319800, + "longitude": -746201391 + }, + "name": "11 Ward Street, Mount Arlington, NJ 07856, USA" +}, { + "location": { + "latitude": 406685311, + "longitude": -742108603 + }, + "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA" +}, { + "location": { + "latitude": 419018117, + "longitude": -749142781 + }, + "name": "43 Dreher Road, Roscoe, NY 12776, USA" +}, { + "location": { + "latitude": 412856162, + "longitude": -745148837 + }, + "name": "Swan Street, Pine Island, NY 10969, USA" +}, { + "location": { + "latitude": 416560744, + "longitude": -746721964 + }, + "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA" +}, { + "location": { + "latitude": 405314270, + "longitude": -749836354 + }, + "name": "" +}, { + "location": { + "latitude": 414219548, + "longitude": -743327440 + }, + "name": "" +}, { + "location": { + "latitude": 415534177, + "longitude": -742900616 + }, + "name": "565 Winding Hills Road, Montgomery, NY 12549, USA" +}, { + "location": { + "latitude": 406898530, + "longitude": -749127080 + }, + "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA" +}, { + "location": { + "latitude": 407586880, + "longitude": -741670168 + }, + "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA" +}, { + "location": { + "latitude": 400106455, + "longitude": -742870190 + }, + "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA" +}, { + "location": { + "latitude": 400066188, + "longitude": -746793294 + }, + "name": "" +}, { + "location": { + "latitude": 418803880, + "longitude": -744102673 + }, + "name": "40 Mountain Road, Napanoch, NY 12458, USA" +}, { + "location": { + "latitude": 414204288, + "longitude": -747895140 + }, + "name": "" +}, { + "location": { + "latitude": 414777405, + "longitude": -740615601 + }, + "name": "" +}, { + "location": { + "latitude": 415464475, + "longitude": -747175374 + }, + "name": "48 North Road, Forestburgh, NY 12777, USA" +}, { + "location": { + "latitude": 404062378, + "longitude": -746376177 + }, + "name": "" +}, { + "location": { + "latitude": 405688272, + "longitude": -749285130 + }, + "name": "" +}, { + "location": { + "latitude": 400342070, + "longitude": -748788996 + }, + "name": "" +}, { + "location": { + "latitude": 401809022, + "longitude": -744157964 + }, + "name": "" +}, { + "location": { + "latitude": 404226644, + "longitude": -740517141 + }, + "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA" +}, { + "location": { + "latitude": 410322033, + "longitude": -747871659 + }, + "name": "" +}, { + "location": { + "latitude": 407100674, + "longitude": -747742727 + }, + "name": "" +}, { + "location": { + "latitude": 418811433, + "longitude": -741718005 + }, + "name": "213 Bush Road, Stone Ridge, NY 12484, USA" +}, { + "location": { + "latitude": 415034302, + "longitude": -743850945 + }, + "name": "" +}, { + "location": { + "latitude": 411349992, + "longitude": -743694161 + }, + "name": "" +}, { + "location": { + "latitude": 404839914, + "longitude": -744759616 + }, + "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA" +}, { + "location": { + "latitude": 414638017, + "longitude": -745957854 + }, + "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA" +}, { + "location": { + "latitude": 412127800, + "longitude": -740173578 + }, + "name": "" +}, { + "location": { + "latitude": 401263460, + "longitude": -747964303 + }, + "name": "" +}, { + "location": { + "latitude": 412843391, + "longitude": -749086026 + }, + "name": "" +}, { + "location": { + "latitude": 418512773, + "longitude": -743067823 + }, + "name": "" +}, { + "location": { + "latitude": 404318328, + "longitude": -740835638 + }, + "name": "42-102 Main Street, Belford, NJ 07718, USA" +}, { + "location": { + "latitude": 419020746, + "longitude": -741172328 + }, + "name": "" +}, { + "location": { + "latitude": 404080723, + "longitude": -746119569 + }, + "name": "" +}, { + "location": { + "latitude": 401012643, + "longitude": -744035134 + }, + "name": "" +}, { + "location": { + "latitude": 404306372, + "longitude": -741079661 + }, + "name": "" +}, { + "location": { + "latitude": 403966326, + "longitude": -748519297 + }, + "name": "" +}, { + "location": { + "latitude": 405002031, + "longitude": -748407866 + }, + "name": "" +}, { + "location": { + "latitude": 409532885, + "longitude": -742200683 + }, + "name": "" +}, { + "location": { + "latitude": 416851321, + "longitude": -742674555 + }, + "name": "" +}, { + "location": { + "latitude": 406411633, + "longitude": -741722051 + }, + "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" +}, { + "location": { + "latitude": 413069058, + "longitude": -744597778 + }, + "name": "261 Van Sickle Road, Goshen, NY 10924, USA" +}, { + "location": { + "latitude": 418465462, + "longitude": -746859398 + }, + "name": "" +}, { + "location": { + "latitude": 411733222, + "longitude": -744228360 + }, + "name": "" +}, { + "location": { + "latitude": 410248224, + "longitude": -747127767 + }, + "name": "3 Hasta Way, Newton, NJ 07860, USA" +}] diff --git a/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.key b/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.key new file mode 100644 index 0000000..143a5b8 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD +M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf +3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY +AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm +V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY +tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p +dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q +K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR +81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff +DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd +aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 +ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 +XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe +F98XJ7tIFfJq +-----END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.pem b/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.pem new file mode 100644 index 0000000..f3d43fc --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET +MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx +MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV +BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 +ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco +LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg +zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd +9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy +em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G +CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 +hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh +y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.pb.go b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.pb.go new file mode 100644 index 0000000..7be8947 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.pb.go @@ -0,0 +1,557 @@ +// Code generated by protoc-gen-go. +// source: grpclb.proto +// DO NOT EDIT! + +/* +Package grpc_lb_v1 is a generated protocol buffer package. + +It is generated from these files: + grpclb.proto + +It has these top-level messages: + Duration + LoadBalanceRequest + InitialLoadBalanceRequest + ClientStats + LoadBalanceResponse + InitialLoadBalanceResponse + ServerList + Server +*/ +package grpc_lb_v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type Duration struct { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. + Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` +} + +func (m *Duration) Reset() { *m = Duration{} } +func (m *Duration) String() string { return proto.CompactTextString(m) } +func (*Duration) ProtoMessage() {} +func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type LoadBalanceRequest struct { + // Types that are valid to be assigned to LoadBalanceRequestType: + // *LoadBalanceRequest_InitialRequest + // *LoadBalanceRequest_ClientStats + LoadBalanceRequestType isLoadBalanceRequest_LoadBalanceRequestType `protobuf_oneof:"load_balance_request_type"` +} + +func (m *LoadBalanceRequest) Reset() { *m = LoadBalanceRequest{} } +func (m *LoadBalanceRequest) String() string { return proto.CompactTextString(m) } +func (*LoadBalanceRequest) ProtoMessage() {} +func (*LoadBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isLoadBalanceRequest_LoadBalanceRequestType interface { + isLoadBalanceRequest_LoadBalanceRequestType() +} + +type LoadBalanceRequest_InitialRequest struct { + InitialRequest *InitialLoadBalanceRequest `protobuf:"bytes,1,opt,name=initial_request,oneof"` +} +type LoadBalanceRequest_ClientStats struct { + ClientStats *ClientStats `protobuf:"bytes,2,opt,name=client_stats,oneof"` +} + +func (*LoadBalanceRequest_InitialRequest) isLoadBalanceRequest_LoadBalanceRequestType() {} +func (*LoadBalanceRequest_ClientStats) isLoadBalanceRequest_LoadBalanceRequestType() {} + +func (m *LoadBalanceRequest) GetLoadBalanceRequestType() isLoadBalanceRequest_LoadBalanceRequestType { + if m != nil { + return m.LoadBalanceRequestType + } + return nil +} + +func (m *LoadBalanceRequest) GetInitialRequest() *InitialLoadBalanceRequest { + if x, ok := m.GetLoadBalanceRequestType().(*LoadBalanceRequest_InitialRequest); ok { + return x.InitialRequest + } + return nil +} + +func (m *LoadBalanceRequest) GetClientStats() *ClientStats { + if x, ok := m.GetLoadBalanceRequestType().(*LoadBalanceRequest_ClientStats); ok { + return x.ClientStats + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LoadBalanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LoadBalanceRequest_OneofMarshaler, _LoadBalanceRequest_OneofUnmarshaler, _LoadBalanceRequest_OneofSizer, []interface{}{ + (*LoadBalanceRequest_InitialRequest)(nil), + (*LoadBalanceRequest_ClientStats)(nil), + } +} + +func _LoadBalanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LoadBalanceRequest) + // load_balance_request_type + switch x := m.LoadBalanceRequestType.(type) { + case *LoadBalanceRequest_InitialRequest: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InitialRequest); err != nil { + return err + } + case *LoadBalanceRequest_ClientStats: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ClientStats); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("LoadBalanceRequest.LoadBalanceRequestType has unexpected type %T", x) + } + return nil +} + +func _LoadBalanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LoadBalanceRequest) + switch tag { + case 1: // load_balance_request_type.initial_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InitialLoadBalanceRequest) + err := b.DecodeMessage(msg) + m.LoadBalanceRequestType = &LoadBalanceRequest_InitialRequest{msg} + return true, err + case 2: // load_balance_request_type.client_stats + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ClientStats) + err := b.DecodeMessage(msg) + m.LoadBalanceRequestType = &LoadBalanceRequest_ClientStats{msg} + return true, err + default: + return false, nil + } +} + +func _LoadBalanceRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LoadBalanceRequest) + // load_balance_request_type + switch x := m.LoadBalanceRequestType.(type) { + case *LoadBalanceRequest_InitialRequest: + s := proto.Size(x.InitialRequest) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LoadBalanceRequest_ClientStats: + s := proto.Size(x.ClientStats) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type InitialLoadBalanceRequest struct { + // Name of load balanced service (IE, service.grpc.gslb.google.com) + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *InitialLoadBalanceRequest) Reset() { *m = InitialLoadBalanceRequest{} } +func (m *InitialLoadBalanceRequest) String() string { return proto.CompactTextString(m) } +func (*InitialLoadBalanceRequest) ProtoMessage() {} +func (*InitialLoadBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// Contains client level statistics that are useful to load balancing. Each +// count should be reset to zero after reporting the stats. +type ClientStats struct { + // The total number of requests sent by the client since the last report. + TotalRequests int64 `protobuf:"varint,1,opt,name=total_requests" json:"total_requests,omitempty"` + // The number of client rpc errors since the last report. + ClientRpcErrors int64 `protobuf:"varint,2,opt,name=client_rpc_errors" json:"client_rpc_errors,omitempty"` + // The number of dropped requests since the last report. + DroppedRequests int64 `protobuf:"varint,3,opt,name=dropped_requests" json:"dropped_requests,omitempty"` +} + +func (m *ClientStats) Reset() { *m = ClientStats{} } +func (m *ClientStats) String() string { return proto.CompactTextString(m) } +func (*ClientStats) ProtoMessage() {} +func (*ClientStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +type LoadBalanceResponse struct { + // Types that are valid to be assigned to LoadBalanceResponseType: + // *LoadBalanceResponse_InitialResponse + // *LoadBalanceResponse_ServerList + LoadBalanceResponseType isLoadBalanceResponse_LoadBalanceResponseType `protobuf_oneof:"load_balance_response_type"` +} + +func (m *LoadBalanceResponse) Reset() { *m = LoadBalanceResponse{} } +func (m *LoadBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*LoadBalanceResponse) ProtoMessage() {} +func (*LoadBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +type isLoadBalanceResponse_LoadBalanceResponseType interface { + isLoadBalanceResponse_LoadBalanceResponseType() +} + +type LoadBalanceResponse_InitialResponse struct { + InitialResponse *InitialLoadBalanceResponse `protobuf:"bytes,1,opt,name=initial_response,oneof"` +} +type LoadBalanceResponse_ServerList struct { + ServerList *ServerList `protobuf:"bytes,2,opt,name=server_list,oneof"` +} + +func (*LoadBalanceResponse_InitialResponse) isLoadBalanceResponse_LoadBalanceResponseType() {} +func (*LoadBalanceResponse_ServerList) isLoadBalanceResponse_LoadBalanceResponseType() {} + +func (m *LoadBalanceResponse) GetLoadBalanceResponseType() isLoadBalanceResponse_LoadBalanceResponseType { + if m != nil { + return m.LoadBalanceResponseType + } + return nil +} + +func (m *LoadBalanceResponse) GetInitialResponse() *InitialLoadBalanceResponse { + if x, ok := m.GetLoadBalanceResponseType().(*LoadBalanceResponse_InitialResponse); ok { + return x.InitialResponse + } + return nil +} + +func (m *LoadBalanceResponse) GetServerList() *ServerList { + if x, ok := m.GetLoadBalanceResponseType().(*LoadBalanceResponse_ServerList); ok { + return x.ServerList + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LoadBalanceResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LoadBalanceResponse_OneofMarshaler, _LoadBalanceResponse_OneofUnmarshaler, _LoadBalanceResponse_OneofSizer, []interface{}{ + (*LoadBalanceResponse_InitialResponse)(nil), + (*LoadBalanceResponse_ServerList)(nil), + } +} + +func _LoadBalanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LoadBalanceResponse) + // load_balance_response_type + switch x := m.LoadBalanceResponseType.(type) { + case *LoadBalanceResponse_InitialResponse: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InitialResponse); err != nil { + return err + } + case *LoadBalanceResponse_ServerList: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ServerList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("LoadBalanceResponse.LoadBalanceResponseType has unexpected type %T", x) + } + return nil +} + +func _LoadBalanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LoadBalanceResponse) + switch tag { + case 1: // load_balance_response_type.initial_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InitialLoadBalanceResponse) + err := b.DecodeMessage(msg) + m.LoadBalanceResponseType = &LoadBalanceResponse_InitialResponse{msg} + return true, err + case 2: // load_balance_response_type.server_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ServerList) + err := b.DecodeMessage(msg) + m.LoadBalanceResponseType = &LoadBalanceResponse_ServerList{msg} + return true, err + default: + return false, nil + } +} + +func _LoadBalanceResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LoadBalanceResponse) + // load_balance_response_type + switch x := m.LoadBalanceResponseType.(type) { + case *LoadBalanceResponse_InitialResponse: + s := proto.Size(x.InitialResponse) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LoadBalanceResponse_ServerList: + s := proto.Size(x.ServerList) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type InitialLoadBalanceResponse struct { + // This is an application layer redirect that indicates the client should use + // the specified server for load balancing. When this field is non-empty in + // the response, the client should open a separate connection to the + // load_balancer_delegate and call the BalanceLoad method. + LoadBalancerDelegate string `protobuf:"bytes,1,opt,name=load_balancer_delegate" json:"load_balancer_delegate,omitempty"` + // This interval defines how often the client should send the client stats + // to the load balancer. Stats should only be reported when the duration is + // positive. + ClientStatsReportInterval *Duration `protobuf:"bytes,3,opt,name=client_stats_report_interval" json:"client_stats_report_interval,omitempty"` +} + +func (m *InitialLoadBalanceResponse) Reset() { *m = InitialLoadBalanceResponse{} } +func (m *InitialLoadBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*InitialLoadBalanceResponse) ProtoMessage() {} +func (*InitialLoadBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *InitialLoadBalanceResponse) GetClientStatsReportInterval() *Duration { + if m != nil { + return m.ClientStatsReportInterval + } + return nil +} + +type ServerList struct { + // Contains a list of servers selected by the load balancer. The list will + // be updated when server resolutions change or as needed to balance load + // across more servers. The client should consume the server list in order + // unless instructed otherwise via the client_config. + Servers []*Server `protobuf:"bytes,1,rep,name=servers" json:"servers,omitempty"` + // Indicates the amount of time that the client should consider this server + // list as valid. It may be considered stale after waiting this interval of + // time after receiving the list. If the interval is not positive, the + // client can assume the list is valid until the next list is received. + ExpirationInterval *Duration `protobuf:"bytes,3,opt,name=expiration_interval" json:"expiration_interval,omitempty"` +} + +func (m *ServerList) Reset() { *m = ServerList{} } +func (m *ServerList) String() string { return proto.CompactTextString(m) } +func (*ServerList) ProtoMessage() {} +func (*ServerList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ServerList) GetServers() []*Server { + if m != nil { + return m.Servers + } + return nil +} + +func (m *ServerList) GetExpirationInterval() *Duration { + if m != nil { + return m.ExpirationInterval + } + return nil +} + +type Server struct { + // A resolved address for the server, serialized in network-byte-order. It may + // either be an IPv4 or IPv6 address. + IpAddress []byte `protobuf:"bytes,1,opt,name=ip_address,proto3" json:"ip_address,omitempty"` + // A resolved port number for the server. + Port int32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` + // An opaque but printable token given to the frontend for each pick. All + // frontend requests for that pick must include the token in its initial + // metadata. The token is used by the backend to verify the request and to + // allow the backend to report load to the gRPC LB system. + LoadBalanceToken string `protobuf:"bytes,3,opt,name=load_balance_token" json:"load_balance_token,omitempty"` + // Indicates whether this particular request should be dropped by the client + // when this server is chosen from the list. + DropRequest bool `protobuf:"varint,4,opt,name=drop_request" json:"drop_request,omitempty"` +} + +func (m *Server) Reset() { *m = Server{} } +func (m *Server) String() string { return proto.CompactTextString(m) } +func (*Server) ProtoMessage() {} +func (*Server) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func init() { + proto.RegisterType((*Duration)(nil), "grpc.lb.v1.Duration") + proto.RegisterType((*LoadBalanceRequest)(nil), "grpc.lb.v1.LoadBalanceRequest") + proto.RegisterType((*InitialLoadBalanceRequest)(nil), "grpc.lb.v1.InitialLoadBalanceRequest") + proto.RegisterType((*ClientStats)(nil), "grpc.lb.v1.ClientStats") + proto.RegisterType((*LoadBalanceResponse)(nil), "grpc.lb.v1.LoadBalanceResponse") + proto.RegisterType((*InitialLoadBalanceResponse)(nil), "grpc.lb.v1.InitialLoadBalanceResponse") + proto.RegisterType((*ServerList)(nil), "grpc.lb.v1.ServerList") + proto.RegisterType((*Server)(nil), "grpc.lb.v1.Server") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for LoadBalancer service + +type LoadBalancerClient interface { + // Bidirectional rpc to get a list of servers. + BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (LoadBalancer_BalanceLoadClient, error) +} + +type loadBalancerClient struct { + cc *grpc.ClientConn +} + +func NewLoadBalancerClient(cc *grpc.ClientConn) LoadBalancerClient { + return &loadBalancerClient{cc} +} + +func (c *loadBalancerClient) BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (LoadBalancer_BalanceLoadClient, error) { + stream, err := grpc.NewClientStream(ctx, &_LoadBalancer_serviceDesc.Streams[0], c.cc, "/grpc.lb.v1.LoadBalancer/BalanceLoad", opts...) + if err != nil { + return nil, err + } + x := &loadBalancerBalanceLoadClient{stream} + return x, nil +} + +type LoadBalancer_BalanceLoadClient interface { + Send(*LoadBalanceRequest) error + Recv() (*LoadBalanceResponse, error) + grpc.ClientStream +} + +type loadBalancerBalanceLoadClient struct { + grpc.ClientStream +} + +func (x *loadBalancerBalanceLoadClient) Send(m *LoadBalanceRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *loadBalancerBalanceLoadClient) Recv() (*LoadBalanceResponse, error) { + m := new(LoadBalanceResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for LoadBalancer service + +type LoadBalancerServer interface { + // Bidirectional rpc to get a list of servers. + BalanceLoad(LoadBalancer_BalanceLoadServer) error +} + +func RegisterLoadBalancerServer(s *grpc.Server, srv LoadBalancerServer) { + s.RegisterService(&_LoadBalancer_serviceDesc, srv) +} + +func _LoadBalancer_BalanceLoad_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(LoadBalancerServer).BalanceLoad(&loadBalancerBalanceLoadServer{stream}) +} + +type LoadBalancer_BalanceLoadServer interface { + Send(*LoadBalanceResponse) error + Recv() (*LoadBalanceRequest, error) + grpc.ServerStream +} + +type loadBalancerBalanceLoadServer struct { + grpc.ServerStream +} + +func (x *loadBalancerBalanceLoadServer) Send(m *LoadBalanceResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *loadBalancerBalanceLoadServer) Recv() (*LoadBalanceRequest, error) { + m := new(LoadBalanceRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _LoadBalancer_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.lb.v1.LoadBalancer", + HandlerType: (*LoadBalancerServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "BalanceLoad", + Handler: _LoadBalancer_BalanceLoad_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "grpclb.proto", +} + +func init() { proto.RegisterFile("grpclb.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 471 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x93, 0x51, 0x6f, 0xd3, 0x3e, + 0x14, 0xc5, 0x9b, 0x7f, 0xb7, 0xfd, 0xb7, 0x9b, 0xc0, 0xc6, 0xdd, 0x54, 0xda, 0x32, 0x8d, 0x2a, + 0x08, 0x54, 0x90, 0x08, 0x2c, 0xbc, 0xf1, 0x84, 0x0a, 0x0f, 0x45, 0xda, 0xd3, 0xf6, 0x86, 0x90, + 0x2c, 0x27, 0xb9, 0x9a, 0x2c, 0x82, 0x6d, 0x6c, 0xaf, 0x1a, 0xdf, 0x07, 0xf1, 0x39, 0x91, 0xe3, + 0x94, 0x64, 0x54, 0x15, 0xbc, 0xc5, 0xbe, 0x3e, 0xf7, 0x1e, 0xff, 0x7c, 0x02, 0xc9, 0xb5, 0xd1, + 0x65, 0x5d, 0x64, 0xda, 0x28, 0xa7, 0x10, 0xfc, 0x2a, 0xab, 0x8b, 0x6c, 0x75, 0x9e, 0xbe, 0x80, + 0xfd, 0x0f, 0x37, 0x86, 0x3b, 0xa1, 0x24, 0x1e, 0xc2, 0xff, 0x96, 0x4a, 0x25, 0x2b, 0x3b, 0x8e, + 0x66, 0xd1, 0x7c, 0x88, 0xf7, 0x60, 0x57, 0x72, 0xa9, 0xec, 0xf8, 0xbf, 0x59, 0x34, 0xdf, 0x4d, + 0x7f, 0x44, 0x80, 0x17, 0x8a, 0x57, 0x0b, 0x5e, 0x73, 0x59, 0xd2, 0x25, 0x7d, 0xbb, 0x21, 0xeb, + 0xf0, 0x1d, 0x1c, 0x0a, 0x29, 0x9c, 0xe0, 0x35, 0x33, 0x61, 0xab, 0x91, 0xc7, 0xf9, 0xd3, 0xac, + 0x1b, 0x94, 0x7d, 0x0c, 0x47, 0x36, 0xf5, 0xcb, 0x01, 0xbe, 0x82, 0xa4, 0xac, 0x05, 0x49, 0xc7, + 0xac, 0xe3, 0x2e, 0x8c, 0x8b, 0xf3, 0x87, 0x7d, 0xf9, 0xfb, 0xa6, 0x7e, 0xe5, 0xcb, 0xcb, 0xc1, + 0xe2, 0x11, 0x4c, 0x6a, 0xc5, 0x2b, 0x56, 0x84, 0x4e, 0xeb, 0xb9, 0xcc, 0x7d, 0xd7, 0x94, 0x3e, + 0x87, 0xc9, 0xd6, 0x61, 0x98, 0xc0, 0x8e, 0xe4, 0x5f, 0xa9, 0x71, 0x78, 0x90, 0x7e, 0x82, 0xb8, + 0xd7, 0x18, 0x47, 0x70, 0xdf, 0x29, 0xd7, 0xdd, 0x63, 0xcd, 0x61, 0x02, 0x0f, 0x5a, 0x7f, 0x46, + 0x97, 0x8c, 0x8c, 0x51, 0x26, 0x98, 0x1c, 0xe2, 0x18, 0x8e, 0x2a, 0xa3, 0xb4, 0xa6, 0xaa, 0x13, + 0x0d, 0x7d, 0x25, 0xfd, 0x19, 0xc1, 0xf1, 0x1d, 0x03, 0x56, 0x2b, 0x69, 0x09, 0x17, 0x70, 0xd4, + 0xe1, 0x0a, 0x7b, 0x2d, 0xaf, 0x67, 0x7f, 0xe3, 0x15, 0x4e, 0x2f, 0x07, 0xf8, 0x12, 0x62, 0x4b, + 0x66, 0x45, 0x86, 0xd5, 0xc2, 0xba, 0x96, 0xd7, 0xa8, 0x2f, 0xbf, 0x6a, 0xca, 0x17, 0xc2, 0xf3, + 0x5d, 0x9c, 0xc2, 0xf4, 0x0f, 0x5c, 0xa1, 0x53, 0xe0, 0x75, 0x0b, 0xd3, 0xed, 0xc3, 0xf0, 0x0c, + 0x46, 0x7d, 0xad, 0x61, 0x15, 0xd5, 0x74, 0xcd, 0x5d, 0x8b, 0x10, 0xdf, 0xc2, 0x69, 0xff, 0xed, + 0x98, 0x21, 0xad, 0x8c, 0x63, 0x42, 0x3a, 0x32, 0x2b, 0x5e, 0x37, 0x30, 0xe2, 0xfc, 0xa4, 0xef, + 0x6d, 0x1d, 0xb8, 0xb4, 0x02, 0xe8, 0x7c, 0xe2, 0x13, 0x1f, 0x3f, 0xbf, 0xf2, 0xd8, 0x87, 0xf3, + 0x38, 0xc7, 0xcd, 0x0b, 0xe1, 0x39, 0x1c, 0xd3, 0xad, 0x16, 0xa1, 0xc1, 0xbf, 0x4d, 0xf9, 0x0c, + 0x7b, 0xad, 0x18, 0x01, 0x84, 0x66, 0xbc, 0xaa, 0x0c, 0xd9, 0xf0, 0xb6, 0x89, 0x0f, 0x84, 0x37, + 0x1c, 0x22, 0x8e, 0x53, 0xc0, 0x3b, 0xa4, 0x9c, 0xfa, 0x42, 0xb2, 0xe9, 0x7e, 0x80, 0x27, 0x90, + 0xf8, 0xa7, 0xfe, 0x1d, 0xf2, 0x9d, 0x59, 0x34, 0xdf, 0xcf, 0x0b, 0x48, 0x7a, 0xd8, 0x0c, 0x5e, + 0x42, 0xdc, 0x7e, 0xfb, 0x6d, 0x3c, 0xeb, 0x5b, 0xda, 0xcc, 0xe3, 0xf4, 0xf1, 0xd6, 0x7a, 0xe0, + 0x3f, 0x8f, 0x5e, 0x47, 0xc5, 0x5e, 0xf3, 0xdf, 0xbe, 0xf9, 0x15, 0x00, 0x00, 0xff, 0xff, 0x01, + 0x8b, 0xc9, 0x26, 0xc7, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.proto b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.proto new file mode 100644 index 0000000..13219c6 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.proto @@ -0,0 +1,109 @@ +syntax = "proto3"; + +package grpc.lb.v1; + +message Duration { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. + int64 seconds = 1; + + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + int32 nanos = 2; +} + +service LoadBalancer { + // Bidirectional rpc to get a list of servers. + rpc BalanceLoad(stream LoadBalanceRequest) + returns (stream LoadBalanceResponse); +} + +message LoadBalanceRequest { + oneof load_balance_request_type { + // This message should be sent on the first request to the load balancer. + InitialLoadBalanceRequest initial_request = 1; + + // The client stats should be periodically reported to the load balancer + // based on the duration defined in the InitialLoadBalanceResponse. + ClientStats client_stats = 2; + } +} + +message InitialLoadBalanceRequest { + // Name of load balanced service (IE, service.grpc.gslb.google.com) + string name = 1; +} + +// Contains client level statistics that are useful to load balancing. Each +// count should be reset to zero after reporting the stats. +message ClientStats { + // The total number of requests sent by the client since the last report. + int64 total_requests = 1; + + // The number of client rpc errors since the last report. + int64 client_rpc_errors = 2; + + // The number of dropped requests since the last report. + int64 dropped_requests = 3; +} + +message LoadBalanceResponse { + oneof load_balance_response_type { + // This message should be sent on the first response to the client. + InitialLoadBalanceResponse initial_response = 1; + + // Contains the list of servers selected by the load balancer. The client + // should send requests to these servers in the specified order. + ServerList server_list = 2; + } +} + +message InitialLoadBalanceResponse { + // This is an application layer redirect that indicates the client should use + // the specified server for load balancing. When this field is non-empty in + // the response, the client should open a separate connection to the + // load_balancer_delegate and call the BalanceLoad method. + string load_balancer_delegate = 1; + + // This interval defines how often the client should send the client stats + // to the load balancer. Stats should only be reported when the duration is + // positive. + Duration client_stats_report_interval = 3; +} + +message ServerList { + // Contains a list of servers selected by the load balancer. The list will + // be updated when server resolutions change or as needed to balance load + // across more servers. The client should consume the server list in order + // unless instructed otherwise via the client_config. + repeated Server servers = 1; + + // Indicates the amount of time that the client should consider this server + // list as valid. It may be considered stale after waiting this interval of + // time after receiving the list. If the interval is not positive, the + // client can assume the list is valid until the next list is received. + Duration expiration_interval = 3; +} + +message Server { + // A resolved address for the server, serialized in network-byte-order. It may + // either be an IPv4 or IPv6 address. + bytes ip_address = 1; + + // A resolved port number for the server. + int32 port = 2; + + // An opaque but printable token given to the frontend for each pick. All + // frontend requests for that pick must include the token in its initial + // metadata. The token is used by the backend to verify the request and to + // allow the backend to report load to the gRPC LB system. + string load_balance_token = 3; + + // Indicates whether this particular request should be dropped by the client + // when this server is chosen from the list. + bool drop_request = 4; +} diff --git a/vendor/google.golang.org/grpc/grpclb/grpclb.go b/vendor/google.golang.org/grpc/grpclb/grpclb.go new file mode 100644 index 0000000..d9a1a8b --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb/grpclb.go @@ -0,0 +1,560 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package grpclb implements the load balancing protocol defined at +// https://github.com/grpc/grpc/blob/master/doc/load-balancing.md. +// The implementation is currently EXPERIMENTAL. +package grpclb + +import ( + "errors" + "fmt" + "sync" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + lbpb "google.golang.org/grpc/grpclb/grpc_lb_v1" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/naming" +) + +// AddressType indicates the address type returned by name resolution. +type AddressType uint8 + +const ( + // Backend indicates the server is a backend server. + Backend AddressType = iota + // GRPCLB indicates the server is a grpclb load balancer. + GRPCLB +) + +// Metadata contains the information the name resolution for grpclb should provide. The +// name resolver used by grpclb balancer is required to provide this type of metadata in +// its address updates. +type Metadata struct { + // AddrType is the type of server (grpc load balancer or backend). + AddrType AddressType + // ServerName is the name of the grpc load balancer. Used for authentication. + ServerName string +} + +// Balancer creates a grpclb load balancer. +func Balancer(r naming.Resolver) grpc.Balancer { + return &balancer{ + r: r, + } +} + +type remoteBalancerInfo struct { + addr string + // the server name used for authentication with the remote LB server. + name string +} + +// addrInfo consists of the information of a backend server. +type addrInfo struct { + addr grpc.Address + connected bool + // dropRequest indicates whether a particular RPC which chooses this address + // should be dropped. + dropRequest bool +} + +type balancer struct { + r naming.Resolver + mu sync.Mutex + seq int // a sequence number to make sure addrCh does not get stale addresses. + w naming.Watcher + addrCh chan []grpc.Address + rbs []remoteBalancerInfo + addrs []*addrInfo + next int + waitCh chan struct{} + done bool + expTimer *time.Timer +} + +func (b *balancer) watchAddrUpdates(w naming.Watcher, ch chan remoteBalancerInfo) error { + updates, err := w.Next() + if err != nil { + return err + } + b.mu.Lock() + defer b.mu.Unlock() + if b.done { + return grpc.ErrClientConnClosing + } + var bAddr remoteBalancerInfo + if len(b.rbs) > 0 { + bAddr = b.rbs[0] + } + for _, update := range updates { + switch update.Op { + case naming.Add: + var exist bool + for _, v := range b.rbs { + // TODO: Is the same addr with different server name a different balancer? + if update.Addr == v.addr { + exist = true + break + } + } + if exist { + continue + } + md, ok := update.Metadata.(*Metadata) + if !ok { + // TODO: Revisit the handling here and may introduce some fallback mechanism. + grpclog.Printf("The name resolution contains unexpected metadata %v", update.Metadata) + continue + } + switch md.AddrType { + case Backend: + // TODO: Revisit the handling here and may introduce some fallback mechanism. + grpclog.Printf("The name resolution does not give grpclb addresses") + continue + case GRPCLB: + b.rbs = append(b.rbs, remoteBalancerInfo{ + addr: update.Addr, + name: md.ServerName, + }) + default: + grpclog.Printf("Received unknow address type %d", md.AddrType) + continue + } + case naming.Delete: + for i, v := range b.rbs { + if update.Addr == v.addr { + copy(b.rbs[i:], b.rbs[i+1:]) + b.rbs = b.rbs[:len(b.rbs)-1] + break + } + } + default: + grpclog.Println("Unknown update.Op ", update.Op) + } + } + // TODO: Fall back to the basic round-robin load balancing if the resulting address is + // not a load balancer. + if len(b.rbs) > 0 { + // For simplicity, always use the first one now. May revisit this decision later. + if b.rbs[0] != bAddr { + select { + case <-ch: + default: + } + ch <- b.rbs[0] + } + } + return nil +} + +func (b *balancer) serverListExpire(seq int) { + b.mu.Lock() + defer b.mu.Unlock() + // TODO: gRPC interanls do not clear the connections when the server list is stale. + // This means RPCs will keep using the existing server list until b receives new + // server list even though the list is expired. Revisit this behavior later. + if b.done || seq < b.seq { + return + } + b.next = 0 + b.addrs = nil + // Ask grpc internals to close all the corresponding connections. + b.addrCh <- nil +} + +func convertDuration(d *lbpb.Duration) time.Duration { + if d == nil { + return 0 + } + return time.Duration(d.Seconds)*time.Second + time.Duration(d.Nanos)*time.Nanosecond +} + +func (b *balancer) processServerList(l *lbpb.ServerList, seq int) { + if l == nil { + return + } + servers := l.GetServers() + expiration := convertDuration(l.GetExpirationInterval()) + var ( + sl []*addrInfo + addrs []grpc.Address + ) + for _, s := range servers { + md := metadata.Pairs("lb-token", s.LoadBalanceToken) + addr := grpc.Address{ + Addr: fmt.Sprintf("%s:%d", s.IpAddress, s.Port), + Metadata: &md, + } + sl = append(sl, &addrInfo{ + addr: addr, + dropRequest: s.DropRequest, + }) + addrs = append(addrs, addr) + } + b.mu.Lock() + defer b.mu.Unlock() + if b.done || seq < b.seq { + return + } + if len(sl) > 0 { + // reset b.next to 0 when replacing the server list. + b.next = 0 + b.addrs = sl + b.addrCh <- addrs + if b.expTimer != nil { + b.expTimer.Stop() + b.expTimer = nil + } + if expiration > 0 { + b.expTimer = time.AfterFunc(expiration, func() { + b.serverListExpire(seq) + }) + } + } + return +} + +func (b *balancer) callRemoteBalancer(lbc lbpb.LoadBalancerClient, seq int) (retry bool) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + stream, err := lbc.BalanceLoad(ctx, grpc.FailFast(false)) + if err != nil { + grpclog.Printf("Failed to perform RPC to the remote balancer %v", err) + return + } + b.mu.Lock() + if b.done { + b.mu.Unlock() + return + } + b.mu.Unlock() + initReq := &lbpb.LoadBalanceRequest{ + LoadBalanceRequestType: &lbpb.LoadBalanceRequest_InitialRequest{ + InitialRequest: new(lbpb.InitialLoadBalanceRequest), + }, + } + if err := stream.Send(initReq); err != nil { + // TODO: backoff on retry? + return true + } + reply, err := stream.Recv() + if err != nil { + // TODO: backoff on retry? + return true + } + initResp := reply.GetInitialResponse() + if initResp == nil { + grpclog.Println("Failed to receive the initial response from the remote balancer.") + return + } + // TODO: Support delegation. + if initResp.LoadBalancerDelegate != "" { + // delegation + grpclog.Println("TODO: Delegation is not supported yet.") + return + } + // Retrieve the server list. + for { + reply, err := stream.Recv() + if err != nil { + break + } + b.mu.Lock() + if b.done || seq < b.seq { + b.mu.Unlock() + return + } + b.seq++ // tick when receiving a new list of servers. + seq = b.seq + b.mu.Unlock() + if serverList := reply.GetServerList(); serverList != nil { + b.processServerList(serverList, seq) + } + } + return true +} + +func (b *balancer) Start(target string, config grpc.BalancerConfig) error { + // TODO: Fall back to the basic direct connection if there is no name resolver. + if b.r == nil { + return errors.New("there is no name resolver installed") + } + b.mu.Lock() + if b.done { + b.mu.Unlock() + return grpc.ErrClientConnClosing + } + b.addrCh = make(chan []grpc.Address) + w, err := b.r.Resolve(target) + if err != nil { + b.mu.Unlock() + return err + } + b.w = w + b.mu.Unlock() + balancerAddrCh := make(chan remoteBalancerInfo, 1) + // Spawn a goroutine to monitor the name resolution of remote load balancer. + go func() { + for { + if err := b.watchAddrUpdates(w, balancerAddrCh); err != nil { + grpclog.Printf("grpc: the naming watcher stops working due to %v.\n", err) + close(balancerAddrCh) + return + } + } + }() + // Spawn a goroutine to talk to the remote load balancer. + go func() { + var cc *grpc.ClientConn + for { + rb, ok := <-balancerAddrCh + if cc != nil { + cc.Close() + } + if !ok { + // b is closing. + return + } + // Talk to the remote load balancer to get the server list. + var err error + creds := config.DialCreds + if creds == nil { + cc, err = grpc.Dial(rb.addr, grpc.WithInsecure()) + } else { + if rb.name != "" { + if err := creds.OverrideServerName(rb.name); err != nil { + grpclog.Printf("Failed to override the server name in the credentials: %v", err) + continue + } + } + cc, err = grpc.Dial(rb.addr, grpc.WithTransportCredentials(creds)) + } + if err != nil { + grpclog.Printf("Failed to setup a connection to the remote balancer %v: %v", rb.addr, err) + return + } + b.mu.Lock() + b.seq++ // tick when getting a new balancer address + seq := b.seq + b.next = 0 + b.mu.Unlock() + go func(cc *grpc.ClientConn) { + lbc := lbpb.NewLoadBalancerClient(cc) + for { + if retry := b.callRemoteBalancer(lbc, seq); !retry { + cc.Close() + return + } + } + }(cc) + } + }() + return nil +} + +func (b *balancer) down(addr grpc.Address, err error) { + b.mu.Lock() + defer b.mu.Unlock() + for _, a := range b.addrs { + if addr == a.addr { + a.connected = false + break + } + } +} + +func (b *balancer) Up(addr grpc.Address) func(error) { + b.mu.Lock() + defer b.mu.Unlock() + if b.done { + return nil + } + var cnt int + for _, a := range b.addrs { + if a.addr == addr { + if a.connected { + return nil + } + a.connected = true + } + if a.connected && !a.dropRequest { + cnt++ + } + } + // addr is the only one which is connected. Notify the Get() callers who are blocking. + if cnt == 1 && b.waitCh != nil { + close(b.waitCh) + b.waitCh = nil + } + return func(err error) { + b.down(addr, err) + } +} + +func (b *balancer) Get(ctx context.Context, opts grpc.BalancerGetOptions) (addr grpc.Address, put func(), err error) { + var ch chan struct{} + b.mu.Lock() + if b.done { + b.mu.Unlock() + err = grpc.ErrClientConnClosing + return + } + + if len(b.addrs) > 0 { + if b.next >= len(b.addrs) { + b.next = 0 + } + next := b.next + for { + a := b.addrs[next] + next = (next + 1) % len(b.addrs) + if a.connected { + if !a.dropRequest { + addr = a.addr + b.next = next + b.mu.Unlock() + return + } + if !opts.BlockingWait { + b.next = next + b.mu.Unlock() + err = grpc.Errorf(codes.Unavailable, "%s drops requests", a.addr.Addr) + return + } + } + if next == b.next { + // Has iterated all the possible address but none is connected. + break + } + } + } + if !opts.BlockingWait { + if len(b.addrs) == 0 { + b.mu.Unlock() + err = grpc.Errorf(codes.Unavailable, "there is no address available") + return + } + // Returns the next addr on b.addrs for a failfast RPC. + addr = b.addrs[b.next].addr + b.next++ + b.mu.Unlock() + return + } + // Wait on b.waitCh for non-failfast RPCs. + if b.waitCh == nil { + ch = make(chan struct{}) + b.waitCh = ch + } else { + ch = b.waitCh + } + b.mu.Unlock() + for { + select { + case <-ctx.Done(): + err = ctx.Err() + return + case <-ch: + b.mu.Lock() + if b.done { + b.mu.Unlock() + err = grpc.ErrClientConnClosing + return + } + + if len(b.addrs) > 0 { + if b.next >= len(b.addrs) { + b.next = 0 + } + next := b.next + for { + a := b.addrs[next] + next = (next + 1) % len(b.addrs) + if a.connected { + if !a.dropRequest { + addr = a.addr + b.next = next + b.mu.Unlock() + return + } + if !opts.BlockingWait { + b.next = next + b.mu.Unlock() + err = grpc.Errorf(codes.Unavailable, "drop requests for the addreess %s", a.addr.Addr) + return + } + } + if next == b.next { + // Has iterated all the possible address but none is connected. + break + } + } + } + // The newly added addr got removed by Down() again. + if b.waitCh == nil { + ch = make(chan struct{}) + b.waitCh = ch + } else { + ch = b.waitCh + } + b.mu.Unlock() + } + } +} + +func (b *balancer) Notify() <-chan []grpc.Address { + return b.addrCh +} + +func (b *balancer) Close() error { + b.mu.Lock() + defer b.mu.Unlock() + b.done = true + if b.expTimer != nil { + b.expTimer.Stop() + } + if b.waitCh != nil { + close(b.waitCh) + } + if b.addrCh != nil { + close(b.addrCh) + } + if b.w != nil { + b.w.Close() + } + return nil +} diff --git a/vendor/google.golang.org/grpc/grpclb/grpclb_test.go b/vendor/google.golang.org/grpc/grpclb/grpclb_test.go new file mode 100644 index 0000000..f034b6b --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb/grpclb_test.go @@ -0,0 +1,535 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpclb + +import ( + "errors" + "fmt" + "io" + "net" + "strconv" + "strings" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + hwpb "google.golang.org/grpc/examples/helloworld/helloworld" + lbpb "google.golang.org/grpc/grpclb/grpc_lb_v1" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/naming" +) + +var ( + lbsn = "bar.com" + besn = "foo.com" + lbToken = "iamatoken" +) + +type testWatcher struct { + // the channel to receives name resolution updates + update chan *naming.Update + // the side channel to get to know how many updates in a batch + side chan int + // the channel to notifiy update injector that the update reading is done + readDone chan int +} + +func (w *testWatcher) Next() (updates []*naming.Update, err error) { + n, ok := <-w.side + if !ok { + return nil, fmt.Errorf("w.side is closed") + } + for i := 0; i < n; i++ { + u, ok := <-w.update + if !ok { + break + } + if u != nil { + updates = append(updates, u) + } + } + w.readDone <- 0 + return +} + +func (w *testWatcher) Close() { +} + +// Inject naming resolution updates to the testWatcher. +func (w *testWatcher) inject(updates []*naming.Update) { + w.side <- len(updates) + for _, u := range updates { + w.update <- u + } + <-w.readDone +} + +type testNameResolver struct { + w *testWatcher + addr string +} + +func (r *testNameResolver) Resolve(target string) (naming.Watcher, error) { + r.w = &testWatcher{ + update: make(chan *naming.Update, 1), + side: make(chan int, 1), + readDone: make(chan int), + } + r.w.side <- 1 + r.w.update <- &naming.Update{ + Op: naming.Add, + Addr: r.addr, + Metadata: &Metadata{ + AddrType: GRPCLB, + ServerName: lbsn, + }, + } + go func() { + <-r.w.readDone + }() + return r.w, nil +} + +type serverNameCheckCreds struct { + expected string + sn string +} + +func (c *serverNameCheckCreds) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + if _, err := io.WriteString(rawConn, c.sn); err != nil { + fmt.Printf("Failed to write the server name %s to the client %v", c.sn, err) + return nil, nil, err + } + return rawConn, nil, nil +} +func (c *serverNameCheckCreds) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + b := make([]byte, len(c.expected)) + if _, err := rawConn.Read(b); err != nil { + fmt.Printf("Failed to read the server name from the server %v", err) + return nil, nil, err + } + if c.expected != string(b) { + fmt.Printf("Read the server name %s want %s", string(b), c.expected) + return nil, nil, errors.New("received unexpected server name") + } + return rawConn, nil, nil +} +func (c *serverNameCheckCreds) Info() credentials.ProtocolInfo { + return credentials.ProtocolInfo{} +} +func (c *serverNameCheckCreds) Clone() credentials.TransportCredentials { + return &serverNameCheckCreds{ + expected: c.expected, + } +} +func (c *serverNameCheckCreds) OverrideServerName(s string) error { + c.expected = s + return nil +} + +type remoteBalancer struct { + sls []*lbpb.ServerList + intervals []time.Duration + done chan struct{} +} + +func newRemoteBalancer(sls []*lbpb.ServerList, intervals []time.Duration) *remoteBalancer { + return &remoteBalancer{ + sls: sls, + intervals: intervals, + done: make(chan struct{}), + } +} + +func (b *remoteBalancer) stop() { + close(b.done) +} + +func (b *remoteBalancer) BalanceLoad(stream lbpb.LoadBalancer_BalanceLoadServer) error { + resp := &lbpb.LoadBalanceResponse{ + LoadBalanceResponseType: &lbpb.LoadBalanceResponse_InitialResponse{ + InitialResponse: new(lbpb.InitialLoadBalanceResponse), + }, + } + if err := stream.Send(resp); err != nil { + return err + } + for k, v := range b.sls { + time.Sleep(b.intervals[k]) + resp = &lbpb.LoadBalanceResponse{ + LoadBalanceResponseType: &lbpb.LoadBalanceResponse_ServerList{ + ServerList: v, + }, + } + if err := stream.Send(resp); err != nil { + return err + } + } + <-b.done + return nil +} + +type helloServer struct { +} + +func (s *helloServer) SayHello(ctx context.Context, in *hwpb.HelloRequest) (*hwpb.HelloReply, error) { + md, ok := metadata.FromContext(ctx) + if !ok { + return nil, grpc.Errorf(codes.Internal, "failed to receive metadata") + } + if md == nil || md["lb-token"][0] != lbToken { + return nil, grpc.Errorf(codes.Internal, "received unexpected metadata: %v", md) + } + return &hwpb.HelloReply{ + Message: "Hello " + in.Name, + }, nil +} + +func startBackends(t *testing.T, sn string, lis ...net.Listener) (servers []*grpc.Server) { + for _, l := range lis { + creds := &serverNameCheckCreds{ + sn: sn, + } + s := grpc.NewServer(grpc.Creds(creds)) + hwpb.RegisterGreeterServer(s, &helloServer{}) + servers = append(servers, s) + go func(s *grpc.Server, l net.Listener) { + s.Serve(l) + }(s, l) + } + return +} + +func stopBackends(servers []*grpc.Server) { + for _, s := range servers { + s.Stop() + } +} + +func TestGRPCLB(t *testing.T) { + // Start a backend. + beLis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen %v", err) + } + beAddr := strings.Split(beLis.Addr().String(), ":") + bePort, err := strconv.Atoi(beAddr[1]) + backends := startBackends(t, besn, beLis) + defer stopBackends(backends) + + // Start a load balancer. + lbLis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to create the listener for the load balancer %v", err) + } + lbCreds := &serverNameCheckCreds{ + sn: lbsn, + } + lb := grpc.NewServer(grpc.Creds(lbCreds)) + if err != nil { + t.Fatalf("Failed to generate the port number %v", err) + } + be := &lbpb.Server{ + IpAddress: []byte(beAddr[0]), + Port: int32(bePort), + LoadBalanceToken: lbToken, + } + var bes []*lbpb.Server + bes = append(bes, be) + sl := &lbpb.ServerList{ + Servers: bes, + } + sls := []*lbpb.ServerList{sl} + intervals := []time.Duration{0} + ls := newRemoteBalancer(sls, intervals) + lbpb.RegisterLoadBalancerServer(lb, ls) + go func() { + lb.Serve(lbLis) + }() + defer func() { + ls.stop() + lb.Stop() + }() + creds := serverNameCheckCreds{ + expected: besn, + } + ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + cc, err := grpc.DialContext(ctx, besn, grpc.WithBalancer(Balancer(&testNameResolver{ + addr: lbLis.Addr().String(), + })), grpc.WithBlock(), grpc.WithTransportCredentials(&creds)) + if err != nil { + t.Fatalf("Failed to dial to the backend %v", err) + } + helloC := hwpb.NewGreeterClient(cc) + if _, err := helloC.SayHello(context.Background(), &hwpb.HelloRequest{Name: "grpc"}); err != nil { + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, <nil>", helloC, err) + } + cc.Close() +} + +func TestDropRequest(t *testing.T) { + // Start 2 backends. + beLis1, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen %v", err) + } + beAddr1 := strings.Split(beLis1.Addr().String(), ":") + bePort1, err := strconv.Atoi(beAddr1[1]) + + beLis2, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen %v", err) + } + beAddr2 := strings.Split(beLis2.Addr().String(), ":") + bePort2, err := strconv.Atoi(beAddr2[1]) + + backends := startBackends(t, besn, beLis1, beLis2) + defer stopBackends(backends) + + // Start a load balancer. + lbLis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to create the listener for the load balancer %v", err) + } + lbCreds := &serverNameCheckCreds{ + sn: lbsn, + } + lb := grpc.NewServer(grpc.Creds(lbCreds)) + if err != nil { + t.Fatalf("Failed to generate the port number %v", err) + } + var bes []*lbpb.Server + be := &lbpb.Server{ + IpAddress: []byte(beAddr1[0]), + Port: int32(bePort1), + LoadBalanceToken: lbToken, + DropRequest: true, + } + bes = append(bes, be) + be = &lbpb.Server{ + IpAddress: []byte(beAddr2[0]), + Port: int32(bePort2), + LoadBalanceToken: lbToken, + DropRequest: false, + } + bes = append(bes, be) + sl := &lbpb.ServerList{ + Servers: bes, + } + sls := []*lbpb.ServerList{sl} + intervals := []time.Duration{0} + ls := newRemoteBalancer(sls, intervals) + lbpb.RegisterLoadBalancerServer(lb, ls) + go func() { + lb.Serve(lbLis) + }() + defer func() { + ls.stop() + lb.Stop() + }() + creds := serverNameCheckCreds{ + expected: besn, + } + ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + cc, err := grpc.DialContext(ctx, besn, grpc.WithBalancer(Balancer(&testNameResolver{ + addr: lbLis.Addr().String(), + })), grpc.WithBlock(), grpc.WithTransportCredentials(&creds)) + if err != nil { + t.Fatalf("Failed to dial to the backend %v", err) + } + // The 1st fail-fast RPC should fail because the 1st backend has DropRequest set to true. + helloC := hwpb.NewGreeterClient(cc) + if _, err := helloC.SayHello(context.Background(), &hwpb.HelloRequest{Name: "grpc"}); grpc.Code(err) != codes.Unavailable { + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, %s", helloC, err, codes.Unavailable) + } + // The 2nd fail-fast RPC should succeed since it chooses the non-drop-request backend according + // to the round robin policy. + if _, err := helloC.SayHello(context.Background(), &hwpb.HelloRequest{Name: "grpc"}); err != nil { + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, <nil>", helloC, err) + } + // The 3nd non-fail-fast RPC should succeed. + if _, err := helloC.SayHello(context.Background(), &hwpb.HelloRequest{Name: "grpc"}, grpc.FailFast(false)); err != nil { + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, <nil>", helloC, err) + } + cc.Close() +} + +func TestDropRequestFailedNonFailFast(t *testing.T) { + // Start a backend. + beLis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen %v", err) + } + beAddr := strings.Split(beLis.Addr().String(), ":") + bePort, err := strconv.Atoi(beAddr[1]) + backends := startBackends(t, besn, beLis) + defer stopBackends(backends) + + // Start a load balancer. + lbLis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to create the listener for the load balancer %v", err) + } + lbCreds := &serverNameCheckCreds{ + sn: lbsn, + } + lb := grpc.NewServer(grpc.Creds(lbCreds)) + if err != nil { + t.Fatalf("Failed to generate the port number %v", err) + } + be := &lbpb.Server{ + IpAddress: []byte(beAddr[0]), + Port: int32(bePort), + LoadBalanceToken: lbToken, + DropRequest: true, + } + var bes []*lbpb.Server + bes = append(bes, be) + sl := &lbpb.ServerList{ + Servers: bes, + } + sls := []*lbpb.ServerList{sl} + intervals := []time.Duration{0} + ls := newRemoteBalancer(sls, intervals) + lbpb.RegisterLoadBalancerServer(lb, ls) + go func() { + lb.Serve(lbLis) + }() + defer func() { + ls.stop() + lb.Stop() + }() + creds := serverNameCheckCreds{ + expected: besn, + } + ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + cc, err := grpc.DialContext(ctx, besn, grpc.WithBalancer(Balancer(&testNameResolver{ + addr: lbLis.Addr().String(), + })), grpc.WithBlock(), grpc.WithTransportCredentials(&creds)) + if err != nil { + t.Fatalf("Failed to dial to the backend %v", err) + } + helloC := hwpb.NewGreeterClient(cc) + ctx, _ = context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := helloC.SayHello(ctx, &hwpb.HelloRequest{Name: "grpc"}, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, %s", helloC, err, codes.DeadlineExceeded) + } + cc.Close() +} + +func TestServerExpiration(t *testing.T) { + // Start a backend. + beLis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen %v", err) + } + beAddr := strings.Split(beLis.Addr().String(), ":") + bePort, err := strconv.Atoi(beAddr[1]) + backends := startBackends(t, besn, beLis) + defer stopBackends(backends) + + // Start a load balancer. + lbLis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to create the listener for the load balancer %v", err) + } + lbCreds := &serverNameCheckCreds{ + sn: lbsn, + } + lb := grpc.NewServer(grpc.Creds(lbCreds)) + if err != nil { + t.Fatalf("Failed to generate the port number %v", err) + } + be := &lbpb.Server{ + IpAddress: []byte(beAddr[0]), + Port: int32(bePort), + LoadBalanceToken: lbToken, + } + var bes []*lbpb.Server + bes = append(bes, be) + exp := &lbpb.Duration{ + Seconds: 0, + Nanos: 100000000, // 100ms + } + var sls []*lbpb.ServerList + sl := &lbpb.ServerList{ + Servers: bes, + ExpirationInterval: exp, + } + sls = append(sls, sl) + sl = &lbpb.ServerList{ + Servers: bes, + } + sls = append(sls, sl) + var intervals []time.Duration + intervals = append(intervals, 0) + intervals = append(intervals, 500*time.Millisecond) + ls := newRemoteBalancer(sls, intervals) + lbpb.RegisterLoadBalancerServer(lb, ls) + go func() { + lb.Serve(lbLis) + }() + defer func() { + ls.stop() + lb.Stop() + }() + creds := serverNameCheckCreds{ + expected: besn, + } + ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + cc, err := grpc.DialContext(ctx, besn, grpc.WithBalancer(Balancer(&testNameResolver{ + addr: lbLis.Addr().String(), + })), grpc.WithBlock(), grpc.WithTransportCredentials(&creds)) + if err != nil { + t.Fatalf("Failed to dial to the backend %v", err) + } + helloC := hwpb.NewGreeterClient(cc) + if _, err := helloC.SayHello(context.Background(), &hwpb.HelloRequest{Name: "grpc"}); err != nil { + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, <nil>", helloC, err) + } + // Sleep and wake up when the first server list gets expired. + time.Sleep(150 * time.Millisecond) + if _, err := helloC.SayHello(context.Background(), &hwpb.HelloRequest{Name: "grpc"}); grpc.Code(err) != codes.Unavailable { + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, %s", helloC, err, codes.Unavailable) + } + // A non-failfast rpc should be succeeded after the second server list is received from + // the remote load balancer. + if _, err := helloC.SayHello(context.Background(), &hwpb.HelloRequest{Name: "grpc"}, grpc.FailFast(false)); err != nil { + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, <nil>", helloC, err) + } + cc.Close() +} diff --git a/vendor/google.golang.org/grpc/grpclog/glogger/glogger.go b/vendor/google.golang.org/grpc/grpclog/glogger/glogger.go new file mode 100644 index 0000000..43b886c --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclog/glogger/glogger.go @@ -0,0 +1,74 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* +Package glogger defines glog-based logging for grpc. +*/ +package glogger + +import ( + "fmt" + + "github.com/golang/glog" + "google.golang.org/grpc/grpclog" +) + +func init() { + grpclog.SetLogger(&glogger{}) +} + +type glogger struct{} + +func (g *glogger) Fatal(args ...interface{}) { + glog.FatalDepth(2, args...) +} + +func (g *glogger) Fatalf(format string, args ...interface{}) { + glog.FatalDepth(2, fmt.Sprintf(format, args...)) +} + +func (g *glogger) Fatalln(args ...interface{}) { + glog.FatalDepth(2, fmt.Sprintln(args...)) +} + +func (g *glogger) Print(args ...interface{}) { + glog.InfoDepth(2, args...) +} + +func (g *glogger) Printf(format string, args ...interface{}) { + glog.InfoDepth(2, fmt.Sprintf(format, args...)) +} + +func (g *glogger) Println(args ...interface{}) { + glog.InfoDepth(2, fmt.Sprintln(args...)) +} diff --git a/vendor/google.golang.org/grpc/grpclog/logger.go b/vendor/google.golang.org/grpc/grpclog/logger.go new file mode 100644 index 0000000..3b29330 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclog/logger.go @@ -0,0 +1,93 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* +Package grpclog defines logging for grpc. +*/ +package grpclog // import "google.golang.org/grpc/grpclog" + +import ( + "log" + "os" +) + +// Use golang's standard logger by default. +// Access is not mutex-protected: do not modify except in init() +// functions. +var logger Logger = log.New(os.Stderr, "", log.LstdFlags) + +// Logger mimics golang's standard Logger as an interface. +type Logger interface { + Fatal(args ...interface{}) + Fatalf(format string, args ...interface{}) + Fatalln(args ...interface{}) + Print(args ...interface{}) + Printf(format string, args ...interface{}) + Println(args ...interface{}) +} + +// SetLogger sets the logger that is used in grpc. Call only from +// init() functions. +func SetLogger(l Logger) { + logger = l +} + +// Fatal is equivalent to Print() followed by a call to os.Exit() with a non-zero exit code. +func Fatal(args ...interface{}) { + logger.Fatal(args...) +} + +// Fatalf is equivalent to Printf() followed by a call to os.Exit() with a non-zero exit code. +func Fatalf(format string, args ...interface{}) { + logger.Fatalf(format, args...) +} + +// Fatalln is equivalent to Println() followed by a call to os.Exit()) with a non-zero exit code. +func Fatalln(args ...interface{}) { + logger.Fatalln(args...) +} + +// Print prints to the logger. Arguments are handled in the manner of fmt.Print. +func Print(args ...interface{}) { + logger.Print(args...) +} + +// Printf prints to the logger. Arguments are handled in the manner of fmt.Printf. +func Printf(format string, args ...interface{}) { + logger.Printf(format, args...) +} + +// Println prints to the logger. Arguments are handled in the manner of fmt.Println. +func Println(args ...interface{}) { + logger.Println(args...) +} diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go new file mode 100644 index 0000000..89c4d45 --- /dev/null +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go @@ -0,0 +1,176 @@ +// Code generated by protoc-gen-go. +// source: health.proto +// DO NOT EDIT! + +/* +Package grpc_health_v1 is a generated protocol buffer package. + +It is generated from these files: + health.proto + +It has these top-level messages: + HealthCheckRequest + HealthCheckResponse +*/ +package grpc_health_v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type HealthCheckResponse_ServingStatus int32 + +const ( + HealthCheckResponse_UNKNOWN HealthCheckResponse_ServingStatus = 0 + HealthCheckResponse_SERVING HealthCheckResponse_ServingStatus = 1 + HealthCheckResponse_NOT_SERVING HealthCheckResponse_ServingStatus = 2 +) + +var HealthCheckResponse_ServingStatus_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SERVING", + 2: "NOT_SERVING", +} +var HealthCheckResponse_ServingStatus_value = map[string]int32{ + "UNKNOWN": 0, + "SERVING": 1, + "NOT_SERVING": 2, +} + +func (x HealthCheckResponse_ServingStatus) String() string { + return proto.EnumName(HealthCheckResponse_ServingStatus_name, int32(x)) +} +func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{1, 0} +} + +type HealthCheckRequest struct { + Service string `protobuf:"bytes,1,opt,name=service" json:"service,omitempty"` +} + +func (m *HealthCheckRequest) Reset() { *m = HealthCheckRequest{} } +func (m *HealthCheckRequest) String() string { return proto.CompactTextString(m) } +func (*HealthCheckRequest) ProtoMessage() {} +func (*HealthCheckRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type HealthCheckResponse struct { + Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"` +} + +func (m *HealthCheckResponse) Reset() { *m = HealthCheckResponse{} } +func (m *HealthCheckResponse) String() string { return proto.CompactTextString(m) } +func (*HealthCheckResponse) ProtoMessage() {} +func (*HealthCheckResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func init() { + proto.RegisterType((*HealthCheckRequest)(nil), "grpc.health.v1.HealthCheckRequest") + proto.RegisterType((*HealthCheckResponse)(nil), "grpc.health.v1.HealthCheckResponse") + proto.RegisterEnum("grpc.health.v1.HealthCheckResponse_ServingStatus", HealthCheckResponse_ServingStatus_name, HealthCheckResponse_ServingStatus_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Health service + +type HealthClient interface { + Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) +} + +type healthClient struct { + cc *grpc.ClientConn +} + +func NewHealthClient(cc *grpc.ClientConn) HealthClient { + return &healthClient{cc} +} + +func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) { + out := new(HealthCheckResponse) + err := grpc.Invoke(ctx, "/grpc.health.v1.Health/Check", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Health service + +type HealthServer interface { + Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) +} + +func RegisterHealthServer(s *grpc.Server, srv HealthServer) { + s.RegisterService(&_Health_serviceDesc, srv) +} + +func _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HealthCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(HealthServer).Check(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.health.v1.Health/Check", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Health_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.health.v1.Health", + HandlerType: (*HealthServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Check", + Handler: _Health_Check_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "health.proto", +} + +func init() { proto.RegisterFile("health.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 204 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0xc9, 0x48, 0x4d, 0xcc, + 0x29, 0xc9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4b, 0x2f, 0x2a, 0x48, 0xd6, 0x83, + 0x0a, 0x95, 0x19, 0x2a, 0xe9, 0x71, 0x09, 0x79, 0x80, 0x39, 0xce, 0x19, 0xa9, 0xc9, 0xd9, 0x41, + 0xa9, 0x85, 0xa5, 0xa9, 0xc5, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0x45, 0x65, 0x99, 0xc9, + 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x30, 0xae, 0xd2, 0x1c, 0x46, 0x2e, 0x61, 0x14, + 0x0d, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x42, 0x9e, 0x5c, 0x6c, 0xc5, 0x25, 0x89, 0x25, 0xa5, + 0xc5, 0x60, 0x0d, 0x7c, 0x46, 0x86, 0x7a, 0xa8, 0x16, 0xe9, 0x61, 0xd1, 0xa4, 0x17, 0x0c, 0x32, + 0x34, 0x2f, 0x3d, 0x18, 0xac, 0x31, 0x08, 0x6a, 0x80, 0x92, 0x15, 0x17, 0x2f, 0x8a, 0x84, 0x10, + 0x37, 0x17, 0x7b, 0xa8, 0x9f, 0xb7, 0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0x03, 0x88, 0x13, 0xec, 0x1a, + 0x14, 0xe6, 0xe9, 0xe7, 0x2e, 0xc0, 0x28, 0xc4, 0xcf, 0xc5, 0xed, 0xe7, 0x1f, 0x12, 0x0f, 0x13, + 0x60, 0x32, 0x8a, 0xe2, 0x62, 0x83, 0x58, 0x24, 0x14, 0xc0, 0xc5, 0x0a, 0xb6, 0x4c, 0x48, 0x09, + 0xaf, 0x4b, 0xc0, 0xfe, 0x95, 0x52, 0x26, 0xc2, 0xb5, 0x49, 0x6c, 0xe0, 0x10, 0x34, 0x06, 0x04, + 0x00, 0x00, 0xff, 0xff, 0xac, 0x56, 0x2a, 0xcb, 0x51, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.proto b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.proto new file mode 100644 index 0000000..e2dc088 --- /dev/null +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; + +package grpc.health.v1; + +message HealthCheckRequest { + string service = 1; +} + +message HealthCheckResponse { + enum ServingStatus { + UNKNOWN = 0; + SERVING = 1; + NOT_SERVING = 2; + } + ServingStatus status = 1; +} + +service Health{ + rpc Check(HealthCheckRequest) returns (HealthCheckResponse); +} diff --git a/vendor/google.golang.org/grpc/health/health.go b/vendor/google.golang.org/grpc/health/health.go new file mode 100644 index 0000000..3425529 --- /dev/null +++ b/vendor/google.golang.org/grpc/health/health.go @@ -0,0 +1,52 @@ +// Package health provides some utility functions to health-check a server. The implementation +// is based on protobuf. Users need to write their own implementations if other IDLs are used. +package health + +import ( + "sync" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + healthpb "google.golang.org/grpc/health/grpc_health_v1" +) + +// Server implements `service Health`. +type Server struct { + mu sync.Mutex + // statusMap stores the serving status of the services this Server monitors. + statusMap map[string]healthpb.HealthCheckResponse_ServingStatus +} + +// NewServer returns a new Server. +func NewServer() *Server { + return &Server{ + statusMap: make(map[string]healthpb.HealthCheckResponse_ServingStatus), + } +} + +// Check implements `service Health`. +func (s *Server) Check(ctx context.Context, in *healthpb.HealthCheckRequest) (*healthpb.HealthCheckResponse, error) { + s.mu.Lock() + defer s.mu.Unlock() + if in.Service == "" { + // check the server overall health status. + return &healthpb.HealthCheckResponse{ + Status: healthpb.HealthCheckResponse_SERVING, + }, nil + } + if status, ok := s.statusMap[in.Service]; ok { + return &healthpb.HealthCheckResponse{ + Status: status, + }, nil + } + return nil, grpc.Errorf(codes.NotFound, "unknown service") +} + +// SetServingStatus is called when need to reset the serving status of a service +// or insert a new service entry into the statusMap. +func (s *Server) SetServingStatus(service string, status healthpb.HealthCheckResponse_ServingStatus) { + s.mu.Lock() + s.statusMap[service] = status + s.mu.Unlock() +} diff --git a/vendor/google.golang.org/grpc/interceptor.go b/vendor/google.golang.org/grpc/interceptor.go new file mode 100644 index 0000000..8d932ef --- /dev/null +++ b/vendor/google.golang.org/grpc/interceptor.go @@ -0,0 +1,90 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "golang.org/x/net/context" +) + +// UnaryInvoker is called by UnaryClientInterceptor to complete RPCs. +type UnaryInvoker func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error + +// UnaryClientInterceptor intercepts the execution of a unary RPC on the client. inovker is the handler to complete the RPC +// and it is the responsibility of the interceptor to call it. +// This is the EXPERIMENTAL API. +type UnaryClientInterceptor func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error + +// Streamer is called by StreamClientInterceptor to create a ClientStream. +type Streamer func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) + +// StreamClientInterceptor intercepts the creation of ClientStream. It may return a custom ClientStream to intercept all I/O +// operations. streamer is the handlder to create a ClientStream and it is the responsibility of the interceptor to call it. +// This is the EXPERIMENTAL API. +type StreamClientInterceptor func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error) + +// UnaryServerInfo consists of various information about a unary RPC on +// server side. All per-rpc information may be mutated by the interceptor. +type UnaryServerInfo struct { + // Server is the service implementation the user provides. This is read-only. + Server interface{} + // FullMethod is the full RPC method string, i.e., /package.service/method. + FullMethod string +} + +// UnaryHandler defines the handler invoked by UnaryServerInterceptor to complete the normal +// execution of a unary RPC. +type UnaryHandler func(ctx context.Context, req interface{}) (interface{}, error) + +// UnaryServerInterceptor provides a hook to intercept the execution of a unary RPC on the server. info +// contains all the information of this RPC the interceptor can operate on. And handler is the wrapper +// of the service method implementation. It is the responsibility of the interceptor to invoke handler +// to complete the RPC. +type UnaryServerInterceptor func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (resp interface{}, err error) + +// StreamServerInfo consists of various information about a streaming RPC on +// server side. All per-rpc information may be mutated by the interceptor. +type StreamServerInfo struct { + // FullMethod is the full RPC method string, i.e., /package.service/method. + FullMethod string + // IsClientStream indicates whether the RPC is a client streaming RPC. + IsClientStream bool + // IsServerStream indicates whether the RPC is a server streaming RPC. + IsServerStream bool +} + +// StreamServerInterceptor provides a hook to intercept the execution of a streaming RPC on the server. +// info contains all the information of this RPC the interceptor can operate on. And handler is the +// service method implementation. It is the responsibility of the interceptor to invoke handler to +// complete the RPC. +type StreamServerInterceptor func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go new file mode 100644 index 0000000..5489143 --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/internal.go @@ -0,0 +1,49 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package internal contains gRPC-internal code for testing, to avoid polluting +// the godoc of the top-level grpc package. +package internal + +// TestingCloseConns closes all existing transports but keeps +// grpcServer.lis accepting new connections. +// +// The provided grpcServer must be of type *grpc.Server. It is untyped +// for circular dependency reasons. +var TestingCloseConns func(grpcServer interface{}) + +// TestingUseHandlerImpl enables the http.Handler-based server implementation. +// It must be called before Serve and requires TLS credentials. +// +// The provided grpcServer must be of type *grpc.Server. It is untyped +// for circular dependency reasons. +var TestingUseHandlerImpl func(grpcServer interface{}) diff --git a/vendor/google.golang.org/grpc/interop/client/client.go b/vendor/google.golang.org/grpc/interop/client/client.go new file mode 100644 index 0000000..38bad3f --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/client/client.go @@ -0,0 +1,202 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "flag" + "net" + "strconv" + + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/oauth" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/interop" + testpb "google.golang.org/grpc/interop/grpc_testing" +) + +var ( + useTLS = flag.Bool("use_tls", false, "Connection uses TLS if true, else plain TCP") + testCA = flag.Bool("use_test_ca", false, "Whether to replace platform root CAs with test CA as the CA root") + serviceAccountKeyFile = flag.String("service_account_key_file", "", "Path to service account json key file") + oauthScope = flag.String("oauth_scope", "", "The scope for OAuth2 tokens") + defaultServiceAccount = flag.String("default_service_account", "", "Email of GCE default service account") + serverHost = flag.String("server_host", "localhost", "The server host name") + serverPort = flag.Int("server_port", 10000, "The server port number") + tlsServerName = flag.String("server_host_override", "", "The server name use to verify the hostname returned by TLS handshake if it is not empty. Otherwise, --server_host is used.") + testCase = flag.String("test_case", "large_unary", + `Configure different test cases. Valid options are: + empty_unary : empty (zero bytes) request and response; + large_unary : single request and (large) response; + client_streaming : request streaming with single response; + server_streaming : single request with response streaming; + ping_pong : full-duplex streaming; + empty_stream : full-duplex streaming with zero message; + timeout_on_sleeping_server: fullduplex streaming on a sleeping server; + compute_engine_creds: large_unary with compute engine auth; + service_account_creds: large_unary with service account auth; + jwt_token_creds: large_unary with jwt token auth; + per_rpc_creds: large_unary with per rpc token; + oauth2_auth_token: large_unary with oauth2 token auth; + cancel_after_begin: cancellation after metadata has been sent but before payloads are sent; + cancel_after_first_response: cancellation after receiving 1st message from the server; + status_code_and_message: status code propagated back to client; + custom_metadata: server will echo custom metadata; + unimplemented_method: client attempts to call unimplemented method; + unimplemented_service: client attempts to call unimplemented service.`) + + // The test CA root cert file + testCAFile = "testdata/ca.pem" +) + +func main() { + flag.Parse() + serverAddr := net.JoinHostPort(*serverHost, strconv.Itoa(*serverPort)) + var opts []grpc.DialOption + if *useTLS { + var sn string + if *tlsServerName != "" { + sn = *tlsServerName + } + var creds credentials.TransportCredentials + if *testCA { + var err error + creds, err = credentials.NewClientTLSFromFile(testCAFile, sn) + if err != nil { + grpclog.Fatalf("Failed to create TLS credentials %v", err) + } + } else { + creds = credentials.NewClientTLSFromCert(nil, sn) + } + opts = append(opts, grpc.WithTransportCredentials(creds)) + if *testCase == "compute_engine_creds" { + opts = append(opts, grpc.WithPerRPCCredentials(oauth.NewComputeEngine())) + } else if *testCase == "service_account_creds" { + jwtCreds, err := oauth.NewServiceAccountFromFile(*serviceAccountKeyFile, *oauthScope) + if err != nil { + grpclog.Fatalf("Failed to create JWT credentials: %v", err) + } + opts = append(opts, grpc.WithPerRPCCredentials(jwtCreds)) + } else if *testCase == "jwt_token_creds" { + jwtCreds, err := oauth.NewJWTAccessFromFile(*serviceAccountKeyFile) + if err != nil { + grpclog.Fatalf("Failed to create JWT credentials: %v", err) + } + opts = append(opts, grpc.WithPerRPCCredentials(jwtCreds)) + } else if *testCase == "oauth2_auth_token" { + opts = append(opts, grpc.WithPerRPCCredentials(oauth.NewOauthAccess(interop.GetToken(*serviceAccountKeyFile, *oauthScope)))) + } + } else { + opts = append(opts, grpc.WithInsecure()) + } + conn, err := grpc.Dial(serverAddr, opts...) + if err != nil { + grpclog.Fatalf("Fail to dial: %v", err) + } + defer conn.Close() + tc := testpb.NewTestServiceClient(conn) + switch *testCase { + case "empty_unary": + interop.DoEmptyUnaryCall(tc) + grpclog.Println("EmptyUnaryCall done") + case "large_unary": + interop.DoLargeUnaryCall(tc) + grpclog.Println("LargeUnaryCall done") + case "client_streaming": + interop.DoClientStreaming(tc) + grpclog.Println("ClientStreaming done") + case "server_streaming": + interop.DoServerStreaming(tc) + grpclog.Println("ServerStreaming done") + case "ping_pong": + interop.DoPingPong(tc) + grpclog.Println("Pingpong done") + case "empty_stream": + interop.DoEmptyStream(tc) + grpclog.Println("Emptystream done") + case "timeout_on_sleeping_server": + interop.DoTimeoutOnSleepingServer(tc) + grpclog.Println("TimeoutOnSleepingServer done") + case "compute_engine_creds": + if !*useTLS { + grpclog.Fatalf("TLS is not enabled. TLS is required to execute compute_engine_creds test case.") + } + interop.DoComputeEngineCreds(tc, *defaultServiceAccount, *oauthScope) + grpclog.Println("ComputeEngineCreds done") + case "service_account_creds": + if !*useTLS { + grpclog.Fatalf("TLS is not enabled. TLS is required to execute service_account_creds test case.") + } + interop.DoServiceAccountCreds(tc, *serviceAccountKeyFile, *oauthScope) + grpclog.Println("ServiceAccountCreds done") + case "jwt_token_creds": + if !*useTLS { + grpclog.Fatalf("TLS is not enabled. TLS is required to execute jwt_token_creds test case.") + } + interop.DoJWTTokenCreds(tc, *serviceAccountKeyFile) + grpclog.Println("JWTtokenCreds done") + case "per_rpc_creds": + if !*useTLS { + grpclog.Fatalf("TLS is not enabled. TLS is required to execute per_rpc_creds test case.") + } + interop.DoPerRPCCreds(tc, *serviceAccountKeyFile, *oauthScope) + grpclog.Println("PerRPCCreds done") + case "oauth2_auth_token": + if !*useTLS { + grpclog.Fatalf("TLS is not enabled. TLS is required to execute oauth2_auth_token test case.") + } + interop.DoOauth2TokenCreds(tc, *serviceAccountKeyFile, *oauthScope) + grpclog.Println("Oauth2TokenCreds done") + case "cancel_after_begin": + interop.DoCancelAfterBegin(tc) + grpclog.Println("CancelAfterBegin done") + case "cancel_after_first_response": + interop.DoCancelAfterFirstResponse(tc) + grpclog.Println("CancelAfterFirstResponse done") + case "status_code_and_message": + interop.DoStatusCodeAndMessage(tc) + grpclog.Println("StatusCodeAndMessage done") + case "custom_metadata": + interop.DoCustomMetadata(tc) + grpclog.Println("CustomMetadata done") + case "unimplemented_method": + interop.DoUnimplementedMethod(conn) + grpclog.Println("UnimplementedMethod done") + case "unimplemented_service": + interop.DoUnimplementedService(testpb.NewUnimplementedServiceClient(conn)) + grpclog.Println("UnimplementedService done") + default: + grpclog.Fatal("Unsupported test case: ", *testCase) + } +} diff --git a/vendor/google.golang.org/grpc/interop/client/testdata/ca.pem b/vendor/google.golang.org/grpc/interop/client/testdata/ca.pem new file mode 100644 index 0000000..6c8511a --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/client/testdata/ca.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla +Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 +YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT +BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 ++L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu +g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd +Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau +sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m +oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG +Dfcog5wrJytaQ6UA0wE= +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/interop/client/testdata/server1.key b/vendor/google.golang.org/grpc/interop/client/testdata/server1.key new file mode 100644 index 0000000..143a5b8 --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/client/testdata/server1.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD +M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf +3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY +AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm +V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY +tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p +dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q +K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR +81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff +DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd +aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 +ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 +XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe +F98XJ7tIFfJq +-----END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/interop/client/testdata/server1.pem b/vendor/google.golang.org/grpc/interop/client/testdata/server1.pem new file mode 100644 index 0000000..f3d43fc --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/client/testdata/server1.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET +MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx +MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV +BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 +ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco +LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg +zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd +9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy +em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G +CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 +hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh +y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/interop/grpc_testing/test.pb.go b/vendor/google.golang.org/grpc/interop/grpc_testing/test.pb.go new file mode 100755 index 0000000..76ae564 --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/grpc_testing/test.pb.go @@ -0,0 +1,906 @@ +// Code generated by protoc-gen-go. +// source: test.proto +// DO NOT EDIT! + +/* +Package grpc_testing is a generated protocol buffer package. + +It is generated from these files: + test.proto + +It has these top-level messages: + Empty + Payload + EchoStatus + SimpleRequest + SimpleResponse + StreamingInputCallRequest + StreamingInputCallResponse + ResponseParameters + StreamingOutputCallRequest + StreamingOutputCallResponse +*/ +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The type of payload that should be returned. +type PayloadType int32 + +const ( + // Compressable text format. + PayloadType_COMPRESSABLE PayloadType = 0 + // Uncompressable binary format. + PayloadType_UNCOMPRESSABLE PayloadType = 1 + // Randomly chosen from all other formats defined in this enum. + PayloadType_RANDOM PayloadType = 2 +) + +var PayloadType_name = map[int32]string{ + 0: "COMPRESSABLE", + 1: "UNCOMPRESSABLE", + 2: "RANDOM", +} +var PayloadType_value = map[string]int32{ + "COMPRESSABLE": 0, + "UNCOMPRESSABLE": 1, + "RANDOM": 2, +} + +func (x PayloadType) Enum() *PayloadType { + p := new(PayloadType) + *p = x + return p +} +func (x PayloadType) String() string { + return proto.EnumName(PayloadType_name, int32(x)) +} +func (x *PayloadType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(PayloadType_value, data, "PayloadType") + if err != nil { + return err + } + *x = PayloadType(value) + return nil +} +func (PayloadType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type Empty struct { + XXX_unrecognized []byte `json:"-"` +} + +func (m *Empty) Reset() { *m = Empty{} } +func (m *Empty) String() string { return proto.CompactTextString(m) } +func (*Empty) ProtoMessage() {} +func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// A block of data, to simply increase gRPC message size. +type Payload struct { + // The type of data in body. + Type *PayloadType `protobuf:"varint,1,opt,name=type,enum=grpc.testing.PayloadType" json:"type,omitempty"` + // Primary contents of payload. + Body []byte `protobuf:"bytes,2,opt,name=body" json:"body,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Payload) Reset() { *m = Payload{} } +func (m *Payload) String() string { return proto.CompactTextString(m) } +func (*Payload) ProtoMessage() {} +func (*Payload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Payload) GetType() PayloadType { + if m != nil && m.Type != nil { + return *m.Type + } + return PayloadType_COMPRESSABLE +} + +func (m *Payload) GetBody() []byte { + if m != nil { + return m.Body + } + return nil +} + +// A protobuf representation for grpc status. This is used by test +// clients to specify a status that the server should attempt to return. +type EchoStatus struct { + Code *int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EchoStatus) Reset() { *m = EchoStatus{} } +func (m *EchoStatus) String() string { return proto.CompactTextString(m) } +func (*EchoStatus) ProtoMessage() {} +func (*EchoStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *EchoStatus) GetCode() int32 { + if m != nil && m.Code != nil { + return *m.Code + } + return 0 +} + +func (m *EchoStatus) GetMessage() string { + if m != nil && m.Message != nil { + return *m.Message + } + return "" +} + +// Unary request. +type SimpleRequest struct { + // Desired payload type in the response from the server. + // If response_type is RANDOM, server randomly chooses one from other formats. + ResponseType *PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + // Desired payload size in the response from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + ResponseSize *int32 `protobuf:"varint,2,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` + // Whether SimpleResponse should include username. + FillUsername *bool `protobuf:"varint,4,opt,name=fill_username,json=fillUsername" json:"fill_username,omitempty"` + // Whether SimpleResponse should include OAuth scope. + FillOauthScope *bool `protobuf:"varint,5,opt,name=fill_oauth_scope,json=fillOauthScope" json:"fill_oauth_scope,omitempty"` + // Whether server should return a given status + ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus" json:"response_status,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SimpleRequest) Reset() { *m = SimpleRequest{} } +func (m *SimpleRequest) String() string { return proto.CompactTextString(m) } +func (*SimpleRequest) ProtoMessage() {} +func (*SimpleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *SimpleRequest) GetResponseType() PayloadType { + if m != nil && m.ResponseType != nil { + return *m.ResponseType + } + return PayloadType_COMPRESSABLE +} + +func (m *SimpleRequest) GetResponseSize() int32 { + if m != nil && m.ResponseSize != nil { + return *m.ResponseSize + } + return 0 +} + +func (m *SimpleRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *SimpleRequest) GetFillUsername() bool { + if m != nil && m.FillUsername != nil { + return *m.FillUsername + } + return false +} + +func (m *SimpleRequest) GetFillOauthScope() bool { + if m != nil && m.FillOauthScope != nil { + return *m.FillOauthScope + } + return false +} + +func (m *SimpleRequest) GetResponseStatus() *EchoStatus { + if m != nil { + return m.ResponseStatus + } + return nil +} + +// Unary response, as configured by the request. +type SimpleResponse struct { + // Payload to increase message size. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + // The user the request came from, for verifying authentication was + // successful when the client expected it. + Username *string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` + // OAuth scope. + OauthScope *string `protobuf:"bytes,3,opt,name=oauth_scope,json=oauthScope" json:"oauth_scope,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SimpleResponse) Reset() { *m = SimpleResponse{} } +func (m *SimpleResponse) String() string { return proto.CompactTextString(m) } +func (*SimpleResponse) ProtoMessage() {} +func (*SimpleResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *SimpleResponse) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *SimpleResponse) GetUsername() string { + if m != nil && m.Username != nil { + return *m.Username + } + return "" +} + +func (m *SimpleResponse) GetOauthScope() string { + if m != nil && m.OauthScope != nil { + return *m.OauthScope + } + return "" +} + +// Client-streaming request. +type StreamingInputCallRequest struct { + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *StreamingInputCallRequest) Reset() { *m = StreamingInputCallRequest{} } +func (m *StreamingInputCallRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingInputCallRequest) ProtoMessage() {} +func (*StreamingInputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *StreamingInputCallRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +// Client-streaming response. +type StreamingInputCallResponse struct { + // Aggregated size of payloads received from the client. + AggregatedPayloadSize *int32 `protobuf:"varint,1,opt,name=aggregated_payload_size,json=aggregatedPayloadSize" json:"aggregated_payload_size,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *StreamingInputCallResponse) Reset() { *m = StreamingInputCallResponse{} } +func (m *StreamingInputCallResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingInputCallResponse) ProtoMessage() {} +func (*StreamingInputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *StreamingInputCallResponse) GetAggregatedPayloadSize() int32 { + if m != nil && m.AggregatedPayloadSize != nil { + return *m.AggregatedPayloadSize + } + return 0 +} + +// Configuration for a particular response. +type ResponseParameters struct { + // Desired payload sizes in responses from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + Size *int32 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"` + // Desired interval between consecutive responses in the response stream in + // microseconds. + IntervalUs *int32 `protobuf:"varint,2,opt,name=interval_us,json=intervalUs" json:"interval_us,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ResponseParameters) Reset() { *m = ResponseParameters{} } +func (m *ResponseParameters) String() string { return proto.CompactTextString(m) } +func (*ResponseParameters) ProtoMessage() {} +func (*ResponseParameters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ResponseParameters) GetSize() int32 { + if m != nil && m.Size != nil { + return *m.Size + } + return 0 +} + +func (m *ResponseParameters) GetIntervalUs() int32 { + if m != nil && m.IntervalUs != nil { + return *m.IntervalUs + } + return 0 +} + +// Server-streaming request. +type StreamingOutputCallRequest struct { + // Desired payload type in the response from the server. + // If response_type is RANDOM, the payload from each response in the stream + // might be of different types. This is to simulate a mixed type of payload + // stream. + ResponseType *PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + // Configuration for each expected response message. + ResponseParameters []*ResponseParameters `protobuf:"bytes,2,rep,name=response_parameters,json=responseParameters" json:"response_parameters,omitempty"` + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` + // Whether server should return a given status + ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus" json:"response_status,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *StreamingOutputCallRequest) Reset() { *m = StreamingOutputCallRequest{} } +func (m *StreamingOutputCallRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingOutputCallRequest) ProtoMessage() {} +func (*StreamingOutputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *StreamingOutputCallRequest) GetResponseType() PayloadType { + if m != nil && m.ResponseType != nil { + return *m.ResponseType + } + return PayloadType_COMPRESSABLE +} + +func (m *StreamingOutputCallRequest) GetResponseParameters() []*ResponseParameters { + if m != nil { + return m.ResponseParameters + } + return nil +} + +func (m *StreamingOutputCallRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *StreamingOutputCallRequest) GetResponseStatus() *EchoStatus { + if m != nil { + return m.ResponseStatus + } + return nil +} + +// Server-streaming response, as configured by the request and parameters. +type StreamingOutputCallResponse struct { + // Payload to increase response size. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *StreamingOutputCallResponse) Reset() { *m = StreamingOutputCallResponse{} } +func (m *StreamingOutputCallResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingOutputCallResponse) ProtoMessage() {} +func (*StreamingOutputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *StreamingOutputCallResponse) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func init() { + proto.RegisterType((*Empty)(nil), "grpc.testing.Empty") + proto.RegisterType((*Payload)(nil), "grpc.testing.Payload") + proto.RegisterType((*EchoStatus)(nil), "grpc.testing.EchoStatus") + proto.RegisterType((*SimpleRequest)(nil), "grpc.testing.SimpleRequest") + proto.RegisterType((*SimpleResponse)(nil), "grpc.testing.SimpleResponse") + proto.RegisterType((*StreamingInputCallRequest)(nil), "grpc.testing.StreamingInputCallRequest") + proto.RegisterType((*StreamingInputCallResponse)(nil), "grpc.testing.StreamingInputCallResponse") + proto.RegisterType((*ResponseParameters)(nil), "grpc.testing.ResponseParameters") + proto.RegisterType((*StreamingOutputCallRequest)(nil), "grpc.testing.StreamingOutputCallRequest") + proto.RegisterType((*StreamingOutputCallResponse)(nil), "grpc.testing.StreamingOutputCallResponse") + proto.RegisterEnum("grpc.testing.PayloadType", PayloadType_name, PayloadType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for TestService service + +type TestServiceClient interface { + // One empty request followed by one empty response. + EmptyCall(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) + // One request followed by one response. + // The server returns the client payload as-is. + UnaryCall(ctx context.Context, in *SimpleRequest, opts ...grpc.CallOption) (*SimpleResponse, error) + // One request followed by a sequence of responses (streamed download). + // The server returns the payload with client desired type and sizes. + StreamingOutputCall(ctx context.Context, in *StreamingOutputCallRequest, opts ...grpc.CallOption) (TestService_StreamingOutputCallClient, error) + // A sequence of requests followed by one response (streamed upload). + // The server returns the aggregated size of client payload as the result. + StreamingInputCall(ctx context.Context, opts ...grpc.CallOption) (TestService_StreamingInputCallClient, error) + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + FullDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_FullDuplexCallClient, error) + // A sequence of requests followed by a sequence of responses. + // The server buffers all the client requests and then serves them in order. A + // stream of responses are returned to the client when the server starts with + // first request. + HalfDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_HalfDuplexCallClient, error) +} + +type testServiceClient struct { + cc *grpc.ClientConn +} + +func NewTestServiceClient(cc *grpc.ClientConn) TestServiceClient { + return &testServiceClient{cc} +} + +func (c *testServiceClient) EmptyCall(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := grpc.Invoke(ctx, "/grpc.testing.TestService/EmptyCall", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testServiceClient) UnaryCall(ctx context.Context, in *SimpleRequest, opts ...grpc.CallOption) (*SimpleResponse, error) { + out := new(SimpleResponse) + err := grpc.Invoke(ctx, "/grpc.testing.TestService/UnaryCall", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testServiceClient) StreamingOutputCall(ctx context.Context, in *StreamingOutputCallRequest, opts ...grpc.CallOption) (TestService_StreamingOutputCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[0], c.cc, "/grpc.testing.TestService/StreamingOutputCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceStreamingOutputCallClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type TestService_StreamingOutputCallClient interface { + Recv() (*StreamingOutputCallResponse, error) + grpc.ClientStream +} + +type testServiceStreamingOutputCallClient struct { + grpc.ClientStream +} + +func (x *testServiceStreamingOutputCallClient) Recv() (*StreamingOutputCallResponse, error) { + m := new(StreamingOutputCallResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *testServiceClient) StreamingInputCall(ctx context.Context, opts ...grpc.CallOption) (TestService_StreamingInputCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[1], c.cc, "/grpc.testing.TestService/StreamingInputCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceStreamingInputCallClient{stream} + return x, nil +} + +type TestService_StreamingInputCallClient interface { + Send(*StreamingInputCallRequest) error + CloseAndRecv() (*StreamingInputCallResponse, error) + grpc.ClientStream +} + +type testServiceStreamingInputCallClient struct { + grpc.ClientStream +} + +func (x *testServiceStreamingInputCallClient) Send(m *StreamingInputCallRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *testServiceStreamingInputCallClient) CloseAndRecv() (*StreamingInputCallResponse, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(StreamingInputCallResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *testServiceClient) FullDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_FullDuplexCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[2], c.cc, "/grpc.testing.TestService/FullDuplexCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceFullDuplexCallClient{stream} + return x, nil +} + +type TestService_FullDuplexCallClient interface { + Send(*StreamingOutputCallRequest) error + Recv() (*StreamingOutputCallResponse, error) + grpc.ClientStream +} + +type testServiceFullDuplexCallClient struct { + grpc.ClientStream +} + +func (x *testServiceFullDuplexCallClient) Send(m *StreamingOutputCallRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *testServiceFullDuplexCallClient) Recv() (*StreamingOutputCallResponse, error) { + m := new(StreamingOutputCallResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *testServiceClient) HalfDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_HalfDuplexCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[3], c.cc, "/grpc.testing.TestService/HalfDuplexCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceHalfDuplexCallClient{stream} + return x, nil +} + +type TestService_HalfDuplexCallClient interface { + Send(*StreamingOutputCallRequest) error + Recv() (*StreamingOutputCallResponse, error) + grpc.ClientStream +} + +type testServiceHalfDuplexCallClient struct { + grpc.ClientStream +} + +func (x *testServiceHalfDuplexCallClient) Send(m *StreamingOutputCallRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *testServiceHalfDuplexCallClient) Recv() (*StreamingOutputCallResponse, error) { + m := new(StreamingOutputCallResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for TestService service + +type TestServiceServer interface { + // One empty request followed by one empty response. + EmptyCall(context.Context, *Empty) (*Empty, error) + // One request followed by one response. + // The server returns the client payload as-is. + UnaryCall(context.Context, *SimpleRequest) (*SimpleResponse, error) + // One request followed by a sequence of responses (streamed download). + // The server returns the payload with client desired type and sizes. + StreamingOutputCall(*StreamingOutputCallRequest, TestService_StreamingOutputCallServer) error + // A sequence of requests followed by one response (streamed upload). + // The server returns the aggregated size of client payload as the result. + StreamingInputCall(TestService_StreamingInputCallServer) error + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + FullDuplexCall(TestService_FullDuplexCallServer) error + // A sequence of requests followed by a sequence of responses. + // The server buffers all the client requests and then serves them in order. A + // stream of responses are returned to the client when the server starts with + // first request. + HalfDuplexCall(TestService_HalfDuplexCallServer) error +} + +func RegisterTestServiceServer(s *grpc.Server, srv TestServiceServer) { + s.RegisterService(&_TestService_serviceDesc, srv) +} + +func _TestService_EmptyCall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestServiceServer).EmptyCall(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.TestService/EmptyCall", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestServiceServer).EmptyCall(ctx, req.(*Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestService_UnaryCall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SimpleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestServiceServer).UnaryCall(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.TestService/UnaryCall", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestServiceServer).UnaryCall(ctx, req.(*SimpleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestService_StreamingOutputCall_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(StreamingOutputCallRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(TestServiceServer).StreamingOutputCall(m, &testServiceStreamingOutputCallServer{stream}) +} + +type TestService_StreamingOutputCallServer interface { + Send(*StreamingOutputCallResponse) error + grpc.ServerStream +} + +type testServiceStreamingOutputCallServer struct { + grpc.ServerStream +} + +func (x *testServiceStreamingOutputCallServer) Send(m *StreamingOutputCallResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _TestService_StreamingInputCall_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(TestServiceServer).StreamingInputCall(&testServiceStreamingInputCallServer{stream}) +} + +type TestService_StreamingInputCallServer interface { + SendAndClose(*StreamingInputCallResponse) error + Recv() (*StreamingInputCallRequest, error) + grpc.ServerStream +} + +type testServiceStreamingInputCallServer struct { + grpc.ServerStream +} + +func (x *testServiceStreamingInputCallServer) SendAndClose(m *StreamingInputCallResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *testServiceStreamingInputCallServer) Recv() (*StreamingInputCallRequest, error) { + m := new(StreamingInputCallRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _TestService_FullDuplexCall_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(TestServiceServer).FullDuplexCall(&testServiceFullDuplexCallServer{stream}) +} + +type TestService_FullDuplexCallServer interface { + Send(*StreamingOutputCallResponse) error + Recv() (*StreamingOutputCallRequest, error) + grpc.ServerStream +} + +type testServiceFullDuplexCallServer struct { + grpc.ServerStream +} + +func (x *testServiceFullDuplexCallServer) Send(m *StreamingOutputCallResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *testServiceFullDuplexCallServer) Recv() (*StreamingOutputCallRequest, error) { + m := new(StreamingOutputCallRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _TestService_HalfDuplexCall_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(TestServiceServer).HalfDuplexCall(&testServiceHalfDuplexCallServer{stream}) +} + +type TestService_HalfDuplexCallServer interface { + Send(*StreamingOutputCallResponse) error + Recv() (*StreamingOutputCallRequest, error) + grpc.ServerStream +} + +type testServiceHalfDuplexCallServer struct { + grpc.ServerStream +} + +func (x *testServiceHalfDuplexCallServer) Send(m *StreamingOutputCallResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *testServiceHalfDuplexCallServer) Recv() (*StreamingOutputCallRequest, error) { + m := new(StreamingOutputCallRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _TestService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testing.TestService", + HandlerType: (*TestServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "EmptyCall", + Handler: _TestService_EmptyCall_Handler, + }, + { + MethodName: "UnaryCall", + Handler: _TestService_UnaryCall_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingOutputCall", + Handler: _TestService_StreamingOutputCall_Handler, + ServerStreams: true, + }, + { + StreamName: "StreamingInputCall", + Handler: _TestService_StreamingInputCall_Handler, + ClientStreams: true, + }, + { + StreamName: "FullDuplexCall", + Handler: _TestService_FullDuplexCall_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { + StreamName: "HalfDuplexCall", + Handler: _TestService_HalfDuplexCall_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "test.proto", +} + +// Client API for UnimplementedService service + +type UnimplementedServiceClient interface { + // A call that no server should implement + UnimplementedCall(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) +} + +type unimplementedServiceClient struct { + cc *grpc.ClientConn +} + +func NewUnimplementedServiceClient(cc *grpc.ClientConn) UnimplementedServiceClient { + return &unimplementedServiceClient{cc} +} + +func (c *unimplementedServiceClient) UnimplementedCall(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := grpc.Invoke(ctx, "/grpc.testing.UnimplementedService/UnimplementedCall", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for UnimplementedService service + +type UnimplementedServiceServer interface { + // A call that no server should implement + UnimplementedCall(context.Context, *Empty) (*Empty, error) +} + +func RegisterUnimplementedServiceServer(s *grpc.Server, srv UnimplementedServiceServer) { + s.RegisterService(&_UnimplementedService_serviceDesc, srv) +} + +func _UnimplementedService_UnimplementedCall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UnimplementedServiceServer).UnimplementedCall(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.UnimplementedService/UnimplementedCall", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UnimplementedServiceServer).UnimplementedCall(ctx, req.(*Empty)) + } + return interceptor(ctx, in, info, handler) +} + +var _UnimplementedService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testing.UnimplementedService", + HandlerType: (*UnimplementedServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UnimplementedCall", + Handler: _UnimplementedService_UnimplementedCall_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: fileDescriptor0, +} + +func init() { proto.RegisterFile("test.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 649 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xbc, 0x54, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0xc5, 0x69, 0x42, 0xda, 0x49, 0x6a, 0xc2, 0x94, 0x0a, 0x37, 0x45, 0x22, 0x32, 0x07, 0x0c, + 0x12, 0x01, 0x45, 0x82, 0x03, 0x12, 0xa0, 0xd2, 0xa6, 0xa2, 0x52, 0xdb, 0x14, 0xbb, 0x39, 0x47, + 0x4b, 0x32, 0x75, 0x2d, 0xf9, 0x0b, 0x7b, 0x5d, 0x91, 0x1e, 0xf8, 0x33, 0xfc, 0x08, 0x0e, 0xfc, + 0x39, 0xb4, 0x6b, 0x3b, 0x71, 0xd2, 0x54, 0x34, 0x7c, 0xdd, 0x76, 0xdf, 0xbe, 0xf9, 0x78, 0x33, + 0xcf, 0x06, 0xe0, 0x14, 0xf3, 0x76, 0x18, 0x05, 0x3c, 0xc0, 0xba, 0x1d, 0x85, 0xc3, 0xb6, 0x00, + 0x1c, 0xdf, 0xd6, 0xab, 0x50, 0xe9, 0x7a, 0x21, 0x1f, 0xeb, 0x87, 0x50, 0x3d, 0x61, 0x63, 0x37, + 0x60, 0x23, 0x7c, 0x06, 0x65, 0x3e, 0x0e, 0x49, 0x53, 0x5a, 0x8a, 0xa1, 0x76, 0xb6, 0xda, 0xc5, + 0x80, 0x76, 0x46, 0x3a, 0x1d, 0x87, 0x64, 0x4a, 0x1a, 0x22, 0x94, 0x3f, 0x05, 0xa3, 0xb1, 0x56, + 0x6a, 0x29, 0x46, 0xdd, 0x94, 0x67, 0xfd, 0x35, 0x40, 0x77, 0x78, 0x1e, 0x58, 0x9c, 0xf1, 0x24, + 0x16, 0x8c, 0x61, 0x30, 0x4a, 0x13, 0x56, 0x4c, 0x79, 0x46, 0x0d, 0xaa, 0x1e, 0xc5, 0x31, 0xb3, + 0x49, 0x06, 0xae, 0x99, 0xf9, 0x55, 0xff, 0x5e, 0x82, 0x75, 0xcb, 0xf1, 0x42, 0x97, 0x4c, 0xfa, + 0x9c, 0x50, 0xcc, 0xf1, 0x2d, 0xac, 0x47, 0x14, 0x87, 0x81, 0x1f, 0xd3, 0xe0, 0x66, 0x9d, 0xd5, + 0x73, 0xbe, 0xb8, 0xe1, 0xa3, 0x42, 0x7c, 0xec, 0x5c, 0xa6, 0x15, 0x2b, 0x53, 0x92, 0xe5, 0x5c, + 0x12, 0x3e, 0x87, 0x6a, 0x98, 0x66, 0xd0, 0x56, 0x5a, 0x8a, 0x51, 0xeb, 0x6c, 0x2e, 0x4c, 0x6f, + 0xe6, 0x2c, 0x91, 0xf5, 0xcc, 0x71, 0xdd, 0x41, 0x12, 0x53, 0xe4, 0x33, 0x8f, 0xb4, 0x72, 0x4b, + 0x31, 0x56, 0xcd, 0xba, 0x00, 0xfb, 0x19, 0x86, 0x06, 0x34, 0x24, 0x29, 0x60, 0x09, 0x3f, 0x1f, + 0xc4, 0xc3, 0x20, 0x24, 0xad, 0x22, 0x79, 0xaa, 0xc0, 0x7b, 0x02, 0xb6, 0x04, 0x8a, 0x3b, 0x70, + 0x67, 0xda, 0xa4, 0x9c, 0x9b, 0x56, 0x95, 0x7d, 0x68, 0xb3, 0x7d, 0x4c, 0xe7, 0x6a, 0xaa, 0x13, + 0x01, 0xf2, 0xae, 0x7f, 0x05, 0x35, 0x1f, 0x5c, 0x8a, 0x17, 0x45, 0x29, 0x37, 0x12, 0xd5, 0x84, + 0xd5, 0x89, 0x9e, 0x74, 0x2f, 0x93, 0x3b, 0x3e, 0x84, 0x5a, 0x51, 0xc6, 0x8a, 0x7c, 0x86, 0x60, + 0x22, 0x41, 0x3f, 0x84, 0x2d, 0x8b, 0x47, 0xc4, 0x3c, 0xc7, 0xb7, 0x0f, 0xfc, 0x30, 0xe1, 0xbb, + 0xcc, 0x75, 0xf3, 0x25, 0x2e, 0xdb, 0x8a, 0x7e, 0x0a, 0xcd, 0x45, 0xd9, 0x32, 0x65, 0xaf, 0xe0, + 0x3e, 0xb3, 0xed, 0x88, 0x6c, 0xc6, 0x69, 0x34, 0xc8, 0x62, 0xd2, 0xed, 0xa6, 0x36, 0xdb, 0x9c, + 0x3e, 0x67, 0xa9, 0xc5, 0x9a, 0xf5, 0x03, 0xc0, 0x3c, 0xc7, 0x09, 0x8b, 0x98, 0x47, 0x9c, 0x22, + 0xe9, 0xd0, 0x42, 0xa8, 0x3c, 0x0b, 0xb9, 0x8e, 0xcf, 0x29, 0xba, 0x60, 0x62, 0xc7, 0x99, 0x67, + 0x20, 0x87, 0xfa, 0xb1, 0xfe, 0xad, 0x54, 0xe8, 0xb0, 0x97, 0xf0, 0x39, 0xc1, 0x7f, 0xea, 0xda, + 0x8f, 0xb0, 0x31, 0x89, 0x0f, 0x27, 0xad, 0x6a, 0xa5, 0xd6, 0x8a, 0x51, 0xeb, 0xb4, 0x66, 0xb3, + 0x5c, 0x95, 0x64, 0x62, 0x74, 0x55, 0xe6, 0xd2, 0x1e, 0xff, 0x0b, 0xa6, 0x3c, 0x86, 0xed, 0x85, + 0x43, 0xfa, 0x4d, 0x87, 0x3e, 0x7d, 0x07, 0xb5, 0xc2, 0xcc, 0xb0, 0x01, 0xf5, 0xdd, 0xde, 0xd1, + 0x89, 0xd9, 0xb5, 0xac, 0x9d, 0xf7, 0x87, 0xdd, 0xc6, 0x2d, 0x44, 0x50, 0xfb, 0xc7, 0x33, 0x98, + 0x82, 0x00, 0xb7, 0xcd, 0x9d, 0xe3, 0xbd, 0xde, 0x51, 0xa3, 0xd4, 0xf9, 0x51, 0x86, 0xda, 0x29, + 0xc5, 0xdc, 0xa2, 0xe8, 0xc2, 0x19, 0x12, 0xbe, 0x84, 0x35, 0xf9, 0x0b, 0x14, 0x6d, 0xe1, 0xc6, + 0x9c, 0x2e, 0xf1, 0xd0, 0x5c, 0x04, 0xe2, 0x3e, 0xac, 0xf5, 0x7d, 0x16, 0xa5, 0x61, 0xdb, 0xb3, + 0x8c, 0x99, 0xdf, 0x57, 0xf3, 0xc1, 0xe2, 0xc7, 0x6c, 0x00, 0x2e, 0x6c, 0x2c, 0x98, 0x0f, 0x1a, + 0x73, 0x41, 0xd7, 0xfa, 0xac, 0xf9, 0xe4, 0x06, 0xcc, 0xb4, 0xd6, 0x0b, 0x05, 0x1d, 0xc0, 0xab, + 0x1f, 0x15, 0x3e, 0xbe, 0x26, 0xc5, 0xfc, 0x47, 0xdc, 0x34, 0x7e, 0x4d, 0x4c, 0x4b, 0x19, 0xa2, + 0x94, 0xba, 0x9f, 0xb8, 0xee, 0x5e, 0x12, 0xba, 0xf4, 0xe5, 0x9f, 0x69, 0x32, 0x14, 0xa9, 0x4a, + 0xfd, 0xc0, 0xdc, 0xb3, 0xff, 0x50, 0xaa, 0xd3, 0x87, 0x7b, 0x7d, 0x5f, 0x6e, 0xd0, 0x23, 0x9f, + 0xd3, 0x28, 0x77, 0xd1, 0x1b, 0xb8, 0x3b, 0x83, 0x2f, 0xe7, 0xa6, 0x9f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xdd, 0xb5, 0x50, 0x6f, 0xa2, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/interop/grpc_testing/test.proto b/vendor/google.golang.org/grpc/interop/grpc_testing/test.proto new file mode 100644 index 0000000..cc2bb74 --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/grpc_testing/test.proto @@ -0,0 +1,160 @@ +// An integration test service that covers all the method signature permutations +// of unary/streaming requests/responses. +syntax = "proto2"; + +package grpc.testing; + +message Empty {} + +// The type of payload that should be returned. +enum PayloadType { + // Compressable text format. + COMPRESSABLE = 0; + + // Uncompressable binary format. + UNCOMPRESSABLE = 1; + + // Randomly chosen from all other formats defined in this enum. + RANDOM = 2; +} + +// A block of data, to simply increase gRPC message size. +message Payload { + // The type of data in body. + optional PayloadType type = 1; + // Primary contents of payload. + optional bytes body = 2; +} + +// A protobuf representation for grpc status. This is used by test +// clients to specify a status that the server should attempt to return. +message EchoStatus { + optional int32 code = 1; + optional string message = 2; +} + +// Unary request. +message SimpleRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, server randomly chooses one from other formats. + optional PayloadType response_type = 1; + + // Desired payload size in the response from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + optional int32 response_size = 2; + + // Optional input payload sent along with the request. + optional Payload payload = 3; + + // Whether SimpleResponse should include username. + optional bool fill_username = 4; + + // Whether SimpleResponse should include OAuth scope. + optional bool fill_oauth_scope = 5; + + // Whether server should return a given status + optional EchoStatus response_status = 7; +} + +// Unary response, as configured by the request. +message SimpleResponse { + // Payload to increase message size. + optional Payload payload = 1; + + // The user the request came from, for verifying authentication was + // successful when the client expected it. + optional string username = 2; + + // OAuth scope. + optional string oauth_scope = 3; +} + +// Client-streaming request. +message StreamingInputCallRequest { + // Optional input payload sent along with the request. + optional Payload payload = 1; + + // Not expecting any payload from the response. +} + +// Client-streaming response. +message StreamingInputCallResponse { + // Aggregated size of payloads received from the client. + optional int32 aggregated_payload_size = 1; +} + +// Configuration for a particular response. +message ResponseParameters { + // Desired payload sizes in responses from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + optional int32 size = 1; + + // Desired interval between consecutive responses in the response stream in + // microseconds. + optional int32 interval_us = 2; +} + +// Server-streaming request. +message StreamingOutputCallRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, the payload from each response in the stream + // might be of different types. This is to simulate a mixed type of payload + // stream. + optional PayloadType response_type = 1; + + // Configuration for each expected response message. + repeated ResponseParameters response_parameters = 2; + + // Optional input payload sent along with the request. + optional Payload payload = 3; + + // Whether server should return a given status + optional EchoStatus response_status = 7; +} + +// Server-streaming response, as configured by the request and parameters. +message StreamingOutputCallResponse { + // Payload to increase response size. + optional Payload payload = 1; +} + +// A simple service to test the various types of RPCs and experiment with +// performance with various types of payload. +service TestService { + // One empty request followed by one empty response. + rpc EmptyCall(Empty) returns (Empty); + + // One request followed by one response. + // The server returns the client payload as-is. + rpc UnaryCall(SimpleRequest) returns (SimpleResponse); + + // One request followed by a sequence of responses (streamed download). + // The server returns the payload with client desired type and sizes. + rpc StreamingOutputCall(StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); + + // A sequence of requests followed by one response (streamed upload). + // The server returns the aggregated size of client payload as the result. + rpc StreamingInputCall(stream StreamingInputCallRequest) + returns (StreamingInputCallResponse); + + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + rpc FullDuplexCall(stream StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); + + // A sequence of requests followed by a sequence of responses. + // The server buffers all the client requests and then serves them in order. A + // stream of responses are returned to the client when the server starts with + // first request. + rpc HalfDuplexCall(stream StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); +} + +// A simple service NOT implemented at servers so clients can test for +// that case. +service UnimplementedService { + // A call that no server should implement + rpc UnimplementedCall(grpc.testing.Empty) returns (grpc.testing.Empty); +} diff --git a/vendor/google.golang.org/grpc/interop/http2/negative_http2_client.go b/vendor/google.golang.org/grpc/interop/http2/negative_http2_client.go new file mode 100644 index 0000000..9c09ad7 --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/http2/negative_http2_client.go @@ -0,0 +1,174 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + * Client used to test http2 error edge cases like GOAWAYs and RST_STREAMs + * + * Documentation: + * https://github.com/grpc/grpc/blob/master/doc/negative-http2-interop-test-descriptions.md + */ + +package main + +import ( + "flag" + "net" + "strconv" + "sync" + "time" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/interop" + testpb "google.golang.org/grpc/interop/grpc_testing" +) + +var ( + serverHost = flag.String("server_host", "127.0.0.1", "The server host name") + serverPort = flag.Int("server_port", 8080, "The server port number") + testCase = flag.String("test_case", "goaway", + `Configure different test cases. Valid options are: + goaway : client sends two requests, the server will send a goaway in between; + rst_after_header : server will send rst_stream after it sends headers; + rst_during_data : server will send rst_stream while sending data; + rst_after_data : server will send rst_stream after sending data; + ping : server will send pings between each http2 frame; + max_streams : server will ensure that the max_concurrent_streams limit is upheld;`) + largeReqSize = 271828 + largeRespSize = 314159 +) + +func largeSimpleRequest() *testpb.SimpleRequest { + pl := interop.ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) + return &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(int32(largeRespSize)), + Payload: pl, + } +} + +// sends two unary calls. The server asserts that the calls use different connections. +func goaway(tc testpb.TestServiceClient) { + interop.DoLargeUnaryCall(tc) + // sleep to ensure that the client has time to recv the GOAWAY. + // TODO(ncteisen): make this less hacky. + time.Sleep(1 * time.Second) + interop.DoLargeUnaryCall(tc) +} + +func rstAfterHeader(tc testpb.TestServiceClient) { + req := largeSimpleRequest() + reply, err := tc.UnaryCall(context.Background(), req) + if reply != nil { + grpclog.Fatalf("Client received reply despite server sending rst stream after header") + } + if grpc.Code(err) != codes.Internal { + grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, grpc.Code(err), codes.Internal) + } +} + +func rstDuringData(tc testpb.TestServiceClient) { + req := largeSimpleRequest() + reply, err := tc.UnaryCall(context.Background(), req) + if reply != nil { + grpclog.Fatalf("Client received reply despite server sending rst stream during data") + } + if grpc.Code(err) != codes.Unknown { + grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, grpc.Code(err), codes.Unknown) + } +} + +func rstAfterData(tc testpb.TestServiceClient) { + req := largeSimpleRequest() + reply, err := tc.UnaryCall(context.Background(), req) + if reply != nil { + grpclog.Fatalf("Client received reply despite server sending rst stream after data") + } + if grpc.Code(err) != codes.Internal { + grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, grpc.Code(err), codes.Internal) + } +} + +func ping(tc testpb.TestServiceClient) { + // The server will assert that every ping it sends was ACK-ed by the client. + interop.DoLargeUnaryCall(tc) +} + +func maxStreams(tc testpb.TestServiceClient) { + interop.DoLargeUnaryCall(tc) + var wg sync.WaitGroup + for i := 0; i < 15; i++ { + wg.Add(1) + go func() { + defer wg.Done() + interop.DoLargeUnaryCall(tc) + }() + } + wg.Wait() +} + +func main() { + flag.Parse() + serverAddr := net.JoinHostPort(*serverHost, strconv.Itoa(*serverPort)) + var opts []grpc.DialOption + opts = append(opts, grpc.WithInsecure()) + conn, err := grpc.Dial(serverAddr, opts...) + if err != nil { + grpclog.Fatalf("Fail to dial: %v", err) + } + defer conn.Close() + tc := testpb.NewTestServiceClient(conn) + switch *testCase { + case "goaway": + goaway(tc) + grpclog.Println("goaway done") + case "rst_after_header": + rstAfterHeader(tc) + grpclog.Println("rst_after_header done") + case "rst_during_data": + rstDuringData(tc) + grpclog.Println("rst_during_data done") + case "rst_after_data": + rstAfterData(tc) + grpclog.Println("rst_after_data done") + case "ping": + ping(tc) + grpclog.Println("ping done") + case "max_streams": + maxStreams(tc) + grpclog.Println("max_streams done") + default: + grpclog.Fatal("Unsupported test case: ", *testCase) + } +} diff --git a/vendor/google.golang.org/grpc/interop/server/server.go b/vendor/google.golang.org/grpc/interop/server/server.go new file mode 100644 index 0000000..36ebcb6 --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/server/server.go @@ -0,0 +1,73 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "flag" + "net" + "strconv" + + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/interop" + testpb "google.golang.org/grpc/interop/grpc_testing" +) + +var ( + useTLS = flag.Bool("use_tls", false, "Connection uses TLS if true, else plain TCP") + certFile = flag.String("tls_cert_file", "testdata/server1.pem", "The TLS cert file") + keyFile = flag.String("tls_key_file", "testdata/server1.key", "The TLS key file") + port = flag.Int("port", 10000, "The server port") +) + +func main() { + flag.Parse() + p := strconv.Itoa(*port) + lis, err := net.Listen("tcp", ":"+p) + if err != nil { + grpclog.Fatalf("failed to listen: %v", err) + } + var opts []grpc.ServerOption + if *useTLS { + creds, err := credentials.NewServerTLSFromFile(*certFile, *keyFile) + if err != nil { + grpclog.Fatalf("Failed to generate credentials %v", err) + } + opts = []grpc.ServerOption{grpc.Creds(creds)} + } + server := grpc.NewServer(opts...) + testpb.RegisterTestServiceServer(server, interop.NewTestServer()) + server.Serve(lis) +} diff --git a/vendor/google.golang.org/grpc/interop/server/testdata/ca.pem b/vendor/google.golang.org/grpc/interop/server/testdata/ca.pem new file mode 100644 index 0000000..6c8511a --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/server/testdata/ca.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla +Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 +YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT +BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 ++L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu +g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd +Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau +sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m +oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG +Dfcog5wrJytaQ6UA0wE= +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/interop/server/testdata/server1.key b/vendor/google.golang.org/grpc/interop/server/testdata/server1.key new file mode 100644 index 0000000..143a5b8 --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/server/testdata/server1.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD +M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf +3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY +AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm +V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY +tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p +dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q +K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR +81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff +DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd +aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 +ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 +XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe +F98XJ7tIFfJq +-----END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/interop/server/testdata/server1.pem b/vendor/google.golang.org/grpc/interop/server/testdata/server1.pem new file mode 100644 index 0000000..f3d43fc --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/server/testdata/server1.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET +MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx +MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV +BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 +ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco +LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg +zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd +9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy +em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G +CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 +hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh +y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/interop/test_utils.go b/vendor/google.golang.org/grpc/interop/test_utils.go new file mode 100644 index 0000000..e4e427c --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/test_utils.go @@ -0,0 +1,761 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package interop + +import ( + "fmt" + "io" + "io/ioutil" + "strings" + "time" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "golang.org/x/oauth2" + "golang.org/x/oauth2/google" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + testpb "google.golang.org/grpc/interop/grpc_testing" + "google.golang.org/grpc/metadata" +) + +var ( + reqSizes = []int{27182, 8, 1828, 45904} + respSizes = []int{31415, 9, 2653, 58979} + largeReqSize = 271828 + largeRespSize = 314159 + initialMetadataKey = "x-grpc-test-echo-initial" + trailingMetadataKey = "x-grpc-test-echo-trailing-bin" +) + +// ClientNewPayload returns a payload of the given type and size. +func ClientNewPayload(t testpb.PayloadType, size int) *testpb.Payload { + if size < 0 { + grpclog.Fatalf("Requested a response with invalid length %d", size) + } + body := make([]byte, size) + switch t { + case testpb.PayloadType_COMPRESSABLE: + case testpb.PayloadType_UNCOMPRESSABLE: + grpclog.Fatalf("PayloadType UNCOMPRESSABLE is not supported") + default: + grpclog.Fatalf("Unsupported payload type: %d", t) + } + return &testpb.Payload{ + Type: t.Enum(), + Body: body, + } +} + +// DoEmptyUnaryCall performs a unary RPC with empty request and response messages. +func DoEmptyUnaryCall(tc testpb.TestServiceClient, args ...grpc.CallOption) { + reply, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, args...) + if err != nil { + grpclog.Fatal("/TestService/EmptyCall RPC failed: ", err) + } + if !proto.Equal(&testpb.Empty{}, reply) { + grpclog.Fatalf("/TestService/EmptyCall receives %v, want %v", reply, testpb.Empty{}) + } +} + +// DoLargeUnaryCall performs a unary RPC with large payload in the request and response. +func DoLargeUnaryCall(tc testpb.TestServiceClient, args ...grpc.CallOption) { + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(int32(largeRespSize)), + Payload: pl, + } + reply, err := tc.UnaryCall(context.Background(), req, args...) + if err != nil { + grpclog.Fatal("/TestService/UnaryCall RPC failed: ", err) + } + t := reply.GetPayload().GetType() + s := len(reply.GetPayload().GetBody()) + if t != testpb.PayloadType_COMPRESSABLE || s != largeRespSize { + grpclog.Fatalf("Got the reply with type %d len %d; want %d, %d", t, s, testpb.PayloadType_COMPRESSABLE, largeRespSize) + } +} + +// DoClientStreaming performs a client streaming RPC. +func DoClientStreaming(tc testpb.TestServiceClient, args ...grpc.CallOption) { + stream, err := tc.StreamingInputCall(context.Background(), args...) + if err != nil { + grpclog.Fatalf("%v.StreamingInputCall(_) = _, %v", tc, err) + } + var sum int + for _, s := range reqSizes { + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, s) + req := &testpb.StreamingInputCallRequest{ + Payload: pl, + } + if err := stream.Send(req); err != nil { + grpclog.Fatalf("%v has error %v while sending %v", stream, err, req) + } + sum += s + } + reply, err := stream.CloseAndRecv() + if err != nil { + grpclog.Fatalf("%v.CloseAndRecv() got error %v, want %v", stream, err, nil) + } + if reply.GetAggregatedPayloadSize() != int32(sum) { + grpclog.Fatalf("%v.CloseAndRecv().GetAggregatePayloadSize() = %v; want %v", stream, reply.GetAggregatedPayloadSize(), sum) + } +} + +// DoServerStreaming performs a server streaming RPC. +func DoServerStreaming(tc testpb.TestServiceClient, args ...grpc.CallOption) { + respParam := make([]*testpb.ResponseParameters, len(respSizes)) + for i, s := range respSizes { + respParam[i] = &testpb.ResponseParameters{ + Size: proto.Int32(int32(s)), + } + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + } + stream, err := tc.StreamingOutputCall(context.Background(), req, args...) + if err != nil { + grpclog.Fatalf("%v.StreamingOutputCall(_) = _, %v", tc, err) + } + var rpcStatus error + var respCnt int + var index int + for { + reply, err := stream.Recv() + if err != nil { + rpcStatus = err + break + } + t := reply.GetPayload().GetType() + if t != testpb.PayloadType_COMPRESSABLE { + grpclog.Fatalf("Got the reply of type %d, want %d", t, testpb.PayloadType_COMPRESSABLE) + } + size := len(reply.GetPayload().GetBody()) + if size != int(respSizes[index]) { + grpclog.Fatalf("Got reply body of length %d, want %d", size, respSizes[index]) + } + index++ + respCnt++ + } + if rpcStatus != io.EOF { + grpclog.Fatalf("Failed to finish the server streaming rpc: %v", rpcStatus) + } + if respCnt != len(respSizes) { + grpclog.Fatalf("Got %d reply, want %d", len(respSizes), respCnt) + } +} + +// DoPingPong performs ping-pong style bi-directional streaming RPC. +func DoPingPong(tc testpb.TestServiceClient, args ...grpc.CallOption) { + stream, err := tc.FullDuplexCall(context.Background(), args...) + if err != nil { + grpclog.Fatalf("%v.FullDuplexCall(_) = _, %v", tc, err) + } + var index int + for index < len(reqSizes) { + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(int32(respSizes[index])), + }, + } + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, reqSizes[index]) + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: pl, + } + if err := stream.Send(req); err != nil { + grpclog.Fatalf("%v has error %v while sending %v", stream, err, req) + } + reply, err := stream.Recv() + if err != nil { + grpclog.Fatalf("%v.Recv() = %v", stream, err) + } + t := reply.GetPayload().GetType() + if t != testpb.PayloadType_COMPRESSABLE { + grpclog.Fatalf("Got the reply of type %d, want %d", t, testpb.PayloadType_COMPRESSABLE) + } + size := len(reply.GetPayload().GetBody()) + if size != int(respSizes[index]) { + grpclog.Fatalf("Got reply body of length %d, want %d", size, respSizes[index]) + } + index++ + } + if err := stream.CloseSend(); err != nil { + grpclog.Fatalf("%v.CloseSend() got %v, want %v", stream, err, nil) + } + if _, err := stream.Recv(); err != io.EOF { + grpclog.Fatalf("%v failed to complele the ping pong test: %v", stream, err) + } +} + +// DoEmptyStream sets up a bi-directional streaming with zero message. +func DoEmptyStream(tc testpb.TestServiceClient, args ...grpc.CallOption) { + stream, err := tc.FullDuplexCall(context.Background(), args...) + if err != nil { + grpclog.Fatalf("%v.FullDuplexCall(_) = _, %v", tc, err) + } + if err := stream.CloseSend(); err != nil { + grpclog.Fatalf("%v.CloseSend() got %v, want %v", stream, err, nil) + } + if _, err := stream.Recv(); err != io.EOF { + grpclog.Fatalf("%v failed to complete the empty stream test: %v", stream, err) + } +} + +// DoTimeoutOnSleepingServer performs an RPC on a sleep server which causes RPC timeout. +func DoTimeoutOnSleepingServer(tc testpb.TestServiceClient, args ...grpc.CallOption) { + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Millisecond) + defer cancel() + stream, err := tc.FullDuplexCall(ctx, args...) + if err != nil { + if grpc.Code(err) == codes.DeadlineExceeded { + return + } + grpclog.Fatalf("%v.FullDuplexCall(_) = _, %v", tc, err) + } + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, 27182) + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + Payload: pl, + } + if err := stream.Send(req); err != nil { + if grpc.Code(err) != codes.DeadlineExceeded { + grpclog.Fatalf("%v.Send(_) = %v", stream, err) + } + } + if _, err := stream.Recv(); grpc.Code(err) != codes.DeadlineExceeded { + grpclog.Fatalf("%v.Recv() = _, %v, want error code %d", stream, err, codes.DeadlineExceeded) + } +} + +// DoComputeEngineCreds performs a unary RPC with compute engine auth. +func DoComputeEngineCreds(tc testpb.TestServiceClient, serviceAccount, oauthScope string) { + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(int32(largeRespSize)), + Payload: pl, + FillUsername: proto.Bool(true), + FillOauthScope: proto.Bool(true), + } + reply, err := tc.UnaryCall(context.Background(), req) + if err != nil { + grpclog.Fatal("/TestService/UnaryCall RPC failed: ", err) + } + user := reply.GetUsername() + scope := reply.GetOauthScope() + if user != serviceAccount { + grpclog.Fatalf("Got user name %q, want %q.", user, serviceAccount) + } + if !strings.Contains(oauthScope, scope) { + grpclog.Fatalf("Got OAuth scope %q which is NOT a substring of %q.", scope, oauthScope) + } +} + +func getServiceAccountJSONKey(keyFile string) []byte { + jsonKey, err := ioutil.ReadFile(keyFile) + if err != nil { + grpclog.Fatalf("Failed to read the service account key file: %v", err) + } + return jsonKey +} + +// DoServiceAccountCreds performs a unary RPC with service account auth. +func DoServiceAccountCreds(tc testpb.TestServiceClient, serviceAccountKeyFile, oauthScope string) { + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(int32(largeRespSize)), + Payload: pl, + FillUsername: proto.Bool(true), + FillOauthScope: proto.Bool(true), + } + reply, err := tc.UnaryCall(context.Background(), req) + if err != nil { + grpclog.Fatal("/TestService/UnaryCall RPC failed: ", err) + } + jsonKey := getServiceAccountJSONKey(serviceAccountKeyFile) + user := reply.GetUsername() + scope := reply.GetOauthScope() + if !strings.Contains(string(jsonKey), user) { + grpclog.Fatalf("Got user name %q which is NOT a substring of %q.", user, jsonKey) + } + if !strings.Contains(oauthScope, scope) { + grpclog.Fatalf("Got OAuth scope %q which is NOT a substring of %q.", scope, oauthScope) + } +} + +// DoJWTTokenCreds performs a unary RPC with JWT token auth. +func DoJWTTokenCreds(tc testpb.TestServiceClient, serviceAccountKeyFile string) { + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(int32(largeRespSize)), + Payload: pl, + FillUsername: proto.Bool(true), + } + reply, err := tc.UnaryCall(context.Background(), req) + if err != nil { + grpclog.Fatal("/TestService/UnaryCall RPC failed: ", err) + } + jsonKey := getServiceAccountJSONKey(serviceAccountKeyFile) + user := reply.GetUsername() + if !strings.Contains(string(jsonKey), user) { + grpclog.Fatalf("Got user name %q which is NOT a substring of %q.", user, jsonKey) + } +} + +// GetToken obtains an OAUTH token from the input. +func GetToken(serviceAccountKeyFile string, oauthScope string) *oauth2.Token { + jsonKey := getServiceAccountJSONKey(serviceAccountKeyFile) + config, err := google.JWTConfigFromJSON(jsonKey, oauthScope) + if err != nil { + grpclog.Fatalf("Failed to get the config: %v", err) + } + token, err := config.TokenSource(context.Background()).Token() + if err != nil { + grpclog.Fatalf("Failed to get the token: %v", err) + } + return token +} + +// DoOauth2TokenCreds performs a unary RPC with OAUTH2 token auth. +func DoOauth2TokenCreds(tc testpb.TestServiceClient, serviceAccountKeyFile, oauthScope string) { + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(int32(largeRespSize)), + Payload: pl, + FillUsername: proto.Bool(true), + FillOauthScope: proto.Bool(true), + } + reply, err := tc.UnaryCall(context.Background(), req) + if err != nil { + grpclog.Fatal("/TestService/UnaryCall RPC failed: ", err) + } + jsonKey := getServiceAccountJSONKey(serviceAccountKeyFile) + user := reply.GetUsername() + scope := reply.GetOauthScope() + if !strings.Contains(string(jsonKey), user) { + grpclog.Fatalf("Got user name %q which is NOT a substring of %q.", user, jsonKey) + } + if !strings.Contains(oauthScope, scope) { + grpclog.Fatalf("Got OAuth scope %q which is NOT a substring of %q.", scope, oauthScope) + } +} + +// DoPerRPCCreds performs a unary RPC with per RPC OAUTH2 token. +func DoPerRPCCreds(tc testpb.TestServiceClient, serviceAccountKeyFile, oauthScope string) { + jsonKey := getServiceAccountJSONKey(serviceAccountKeyFile) + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(int32(largeRespSize)), + Payload: pl, + FillUsername: proto.Bool(true), + FillOauthScope: proto.Bool(true), + } + token := GetToken(serviceAccountKeyFile, oauthScope) + kv := map[string]string{"authorization": token.TokenType + " " + token.AccessToken} + ctx := metadata.NewContext(context.Background(), metadata.MD{"authorization": []string{kv["authorization"]}}) + reply, err := tc.UnaryCall(ctx, req) + if err != nil { + grpclog.Fatal("/TestService/UnaryCall RPC failed: ", err) + } + user := reply.GetUsername() + scope := reply.GetOauthScope() + if !strings.Contains(string(jsonKey), user) { + grpclog.Fatalf("Got user name %q which is NOT a substring of %q.", user, jsonKey) + } + if !strings.Contains(oauthScope, scope) { + grpclog.Fatalf("Got OAuth scope %q which is NOT a substring of %q.", scope, oauthScope) + } +} + +var ( + testMetadata = metadata.MD{ + "key1": []string{"value1"}, + "key2": []string{"value2"}, + } +) + +// DoCancelAfterBegin cancels the RPC after metadata has been sent but before payloads are sent. +func DoCancelAfterBegin(tc testpb.TestServiceClient, args ...grpc.CallOption) { + ctx, cancel := context.WithCancel(metadata.NewContext(context.Background(), testMetadata)) + stream, err := tc.StreamingInputCall(ctx, args...) + if err != nil { + grpclog.Fatalf("%v.StreamingInputCall(_) = _, %v", tc, err) + } + cancel() + _, err = stream.CloseAndRecv() + if grpc.Code(err) != codes.Canceled { + grpclog.Fatalf("%v.CloseAndRecv() got error code %d, want %d", stream, grpc.Code(err), codes.Canceled) + } +} + +// DoCancelAfterFirstResponse cancels the RPC after receiving the first message from the server. +func DoCancelAfterFirstResponse(tc testpb.TestServiceClient, args ...grpc.CallOption) { + ctx, cancel := context.WithCancel(context.Background()) + stream, err := tc.FullDuplexCall(ctx, args...) + if err != nil { + grpclog.Fatalf("%v.FullDuplexCall(_) = _, %v", tc, err) + } + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(31415), + }, + } + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, 27182) + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: pl, + } + if err := stream.Send(req); err != nil { + grpclog.Fatalf("%v has error %v while sending %v", stream, err, req) + } + if _, err := stream.Recv(); err != nil { + grpclog.Fatalf("%v.Recv() = %v", stream, err) + } + cancel() + if _, err := stream.Recv(); grpc.Code(err) != codes.Canceled { + grpclog.Fatalf("%v compleled with error code %d, want %d", stream, grpc.Code(err), codes.Canceled) + } +} + +var ( + initialMetadataValue = "test_initial_metadata_value" + trailingMetadataValue = "\x0a\x0b\x0a\x0b\x0a\x0b" + customMetadata = metadata.Pairs( + initialMetadataKey, initialMetadataValue, + trailingMetadataKey, trailingMetadataValue, + ) +) + +func validateMetadata(header, trailer metadata.MD) { + if len(header[initialMetadataKey]) != 1 { + grpclog.Fatalf("Expected exactly one header from server. Received %d", len(header[initialMetadataKey])) + } + if header[initialMetadataKey][0] != initialMetadataValue { + grpclog.Fatalf("Got header %s; want %s", header[initialMetadataKey][0], initialMetadataValue) + } + if len(trailer[trailingMetadataKey]) != 1 { + grpclog.Fatalf("Expected exactly one trailer from server. Received %d", len(trailer[trailingMetadataKey])) + } + if trailer[trailingMetadataKey][0] != trailingMetadataValue { + grpclog.Fatalf("Got trailer %s; want %s", trailer[trailingMetadataKey][0], trailingMetadataValue) + } +} + +// DoCustomMetadata checks that metadata is echoed back to the client. +func DoCustomMetadata(tc testpb.TestServiceClient, args ...grpc.CallOption) { + // Testing with UnaryCall. + pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, 1) + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(int32(1)), + Payload: pl, + } + ctx := metadata.NewContext(context.Background(), customMetadata) + var header, trailer metadata.MD + args = append(args, grpc.Header(&header), grpc.Trailer(&trailer)) + reply, err := tc.UnaryCall( + ctx, + req, + args..., + ) + if err != nil { + grpclog.Fatal("/TestService/UnaryCall RPC failed: ", err) + } + t := reply.GetPayload().GetType() + s := len(reply.GetPayload().GetBody()) + if t != testpb.PayloadType_COMPRESSABLE || s != 1 { + grpclog.Fatalf("Got the reply with type %d len %d; want %d, %d", t, s, testpb.PayloadType_COMPRESSABLE, 1) + } + validateMetadata(header, trailer) + + // Testing with FullDuplex. + stream, err := tc.FullDuplexCall(ctx, args...) + if err != nil { + grpclog.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(1), + }, + } + streamReq := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: pl, + } + if err := stream.Send(streamReq); err != nil { + grpclog.Fatalf("%v has error %v while sending %v", stream, err, streamReq) + } + streamHeader, err := stream.Header() + if err != nil { + grpclog.Fatalf("%v.Header() = %v", stream, err) + } + if _, err := stream.Recv(); err != nil { + grpclog.Fatalf("%v.Recv() = %v", stream, err) + } + if err := stream.CloseSend(); err != nil { + grpclog.Fatalf("%v.CloseSend() = %v, want <nil>", stream, err) + } + if _, err := stream.Recv(); err != io.EOF { + grpclog.Fatalf("%v failed to complete the custom metadata test: %v", stream, err) + } + streamTrailer := stream.Trailer() + validateMetadata(streamHeader, streamTrailer) +} + +// DoStatusCodeAndMessage checks that the status code is propagated back to the client. +func DoStatusCodeAndMessage(tc testpb.TestServiceClient, args ...grpc.CallOption) { + var code int32 = 2 + msg := "test status message" + expectedErr := grpc.Errorf(codes.Code(code), msg) + respStatus := &testpb.EchoStatus{ + Code: proto.Int32(code), + Message: proto.String(msg), + } + // Test UnaryCall. + req := &testpb.SimpleRequest{ + ResponseStatus: respStatus, + } + if _, err := tc.UnaryCall(context.Background(), req, args...); err == nil || err.Error() != expectedErr.Error() { + grpclog.Fatalf("%v.UnaryCall(_, %v) = _, %v, want _, %v", tc, req, err, expectedErr) + } + // Test FullDuplexCall. + stream, err := tc.FullDuplexCall(context.Background(), args...) + if err != nil { + grpclog.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + streamReq := &testpb.StreamingOutputCallRequest{ + ResponseStatus: respStatus, + } + if err := stream.Send(streamReq); err != nil { + grpclog.Fatalf("%v has error %v while sending %v, want <nil>", stream, err, streamReq) + } + if err := stream.CloseSend(); err != nil { + grpclog.Fatalf("%v.CloseSend() = %v, want <nil>", stream, err) + } + if _, err = stream.Recv(); err.Error() != expectedErr.Error() { + grpclog.Fatalf("%v.Recv() returned error %v, want %v", stream, err, expectedErr) + } +} + +// DoUnimplementedService attempts to call a method from an unimplemented service. +func DoUnimplementedService(tc testpb.UnimplementedServiceClient) { + _, err := tc.UnimplementedCall(context.Background(), &testpb.Empty{}) + if grpc.Code(err) != codes.Unimplemented { + grpclog.Fatalf("%v.UnimplementedCall() = _, %v, want _, %v", tc, grpc.Code(err), codes.Unimplemented) + } +} + +// DoUnimplementedMethod attempts to call an unimplemented method. +func DoUnimplementedMethod(cc *grpc.ClientConn) { + var req, reply proto.Message + if err := grpc.Invoke(context.Background(), "/grpc.testing.TestService/UnimplementedCall", req, reply, cc); err == nil || grpc.Code(err) != codes.Unimplemented { + grpclog.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want error code %s", err, codes.Unimplemented) + } +} + +type testServer struct { +} + +// NewTestServer creates a test server for test service. +func NewTestServer() testpb.TestServiceServer { + return &testServer{} +} + +func (s *testServer) EmptyCall(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { + return new(testpb.Empty), nil +} + +func serverNewPayload(t testpb.PayloadType, size int32) (*testpb.Payload, error) { + if size < 0 { + return nil, fmt.Errorf("requested a response with invalid length %d", size) + } + body := make([]byte, size) + switch t { + case testpb.PayloadType_COMPRESSABLE: + case testpb.PayloadType_UNCOMPRESSABLE: + return nil, fmt.Errorf("payloadType UNCOMPRESSABLE is not supported") + default: + return nil, fmt.Errorf("unsupported payload type: %d", t) + } + return &testpb.Payload{ + Type: t.Enum(), + Body: body, + }, nil +} + +func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + status := in.GetResponseStatus() + if md, ok := metadata.FromContext(ctx); ok { + if initialMetadata, ok := md[initialMetadataKey]; ok { + header := metadata.Pairs(initialMetadataKey, initialMetadata[0]) + grpc.SendHeader(ctx, header) + } + if trailingMetadata, ok := md[trailingMetadataKey]; ok { + trailer := metadata.Pairs(trailingMetadataKey, trailingMetadata[0]) + grpc.SetTrailer(ctx, trailer) + } + } + if status != nil && *status.Code != 0 { + return nil, grpc.Errorf(codes.Code(*status.Code), *status.Message) + } + pl, err := serverNewPayload(in.GetResponseType(), in.GetResponseSize()) + if err != nil { + return nil, err + } + return &testpb.SimpleResponse{ + Payload: pl, + }, nil +} + +func (s *testServer) StreamingOutputCall(args *testpb.StreamingOutputCallRequest, stream testpb.TestService_StreamingOutputCallServer) error { + cs := args.GetResponseParameters() + for _, c := range cs { + if us := c.GetIntervalUs(); us > 0 { + time.Sleep(time.Duration(us) * time.Microsecond) + } + pl, err := serverNewPayload(args.GetResponseType(), c.GetSize()) + if err != nil { + return err + } + if err := stream.Send(&testpb.StreamingOutputCallResponse{ + Payload: pl, + }); err != nil { + return err + } + } + return nil +} + +func (s *testServer) StreamingInputCall(stream testpb.TestService_StreamingInputCallServer) error { + var sum int + for { + in, err := stream.Recv() + if err == io.EOF { + return stream.SendAndClose(&testpb.StreamingInputCallResponse{ + AggregatedPayloadSize: proto.Int32(int32(sum)), + }) + } + if err != nil { + return err + } + p := in.GetPayload().GetBody() + sum += len(p) + } +} + +func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServer) error { + if md, ok := metadata.FromContext(stream.Context()); ok { + if initialMetadata, ok := md[initialMetadataKey]; ok { + header := metadata.Pairs(initialMetadataKey, initialMetadata[0]) + stream.SendHeader(header) + } + if trailingMetadata, ok := md[trailingMetadataKey]; ok { + trailer := metadata.Pairs(trailingMetadataKey, trailingMetadata[0]) + stream.SetTrailer(trailer) + } + } + for { + in, err := stream.Recv() + if err == io.EOF { + // read done. + return nil + } + if err != nil { + return err + } + status := in.GetResponseStatus() + if status != nil && *status.Code != 0 { + return grpc.Errorf(codes.Code(*status.Code), *status.Message) + } + cs := in.GetResponseParameters() + for _, c := range cs { + if us := c.GetIntervalUs(); us > 0 { + time.Sleep(time.Duration(us) * time.Microsecond) + } + pl, err := serverNewPayload(in.GetResponseType(), c.GetSize()) + if err != nil { + return err + } + if err := stream.Send(&testpb.StreamingOutputCallResponse{ + Payload: pl, + }); err != nil { + return err + } + } + } +} + +func (s *testServer) HalfDuplexCall(stream testpb.TestService_HalfDuplexCallServer) error { + var msgBuf []*testpb.StreamingOutputCallRequest + for { + in, err := stream.Recv() + if err == io.EOF { + // read done. + break + } + if err != nil { + return err + } + msgBuf = append(msgBuf, in) + } + for _, m := range msgBuf { + cs := m.GetResponseParameters() + for _, c := range cs { + if us := c.GetIntervalUs(); us > 0 { + time.Sleep(time.Duration(us) * time.Microsecond) + } + pl, err := serverNewPayload(m.GetResponseType(), c.GetSize()) + if err != nil { + return err + } + if err := stream.Send(&testpb.StreamingOutputCallResponse{ + Payload: pl, + }); err != nil { + return err + } + } + } + return nil +} diff --git a/vendor/google.golang.org/grpc/keepalive/keepalive.go b/vendor/google.golang.org/grpc/keepalive/keepalive.go new file mode 100644 index 0000000..20672e4 --- /dev/null +++ b/vendor/google.golang.org/grpc/keepalive/keepalive.go @@ -0,0 +1,52 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package keepalive defines configurable parameters for point-to-point healthcheck. +package keepalive + +import ( + "time" +) + +// ClientParameters is used to set keepalive parameters on the client-side. +// These configure how the client will actively probe to notice when a connection broken +// and to cause activity so intermediaries are aware the connection is still in use. +type ClientParameters struct { + // After a duration of this time if the client doesn't see any activity it pings the server to see if the transport is still alive. + Time time.Duration // The current default value is infinity. + // After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that + // the connection is closed. + Timeout time.Duration // The current default value is 20 seconds. + // If true, client runs keepalive checks even with no active RPCs. + PermitWithoutStream bool +} diff --git a/vendor/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go new file mode 100644 index 0000000..7332395 --- /dev/null +++ b/vendor/google.golang.org/grpc/metadata/metadata.go @@ -0,0 +1,152 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package metadata define the structure of the metadata supported by gRPC library. +// Please refer to http://www.grpc.io/docs/guides/wire.html for more information about custom-metadata. +package metadata // import "google.golang.org/grpc/metadata" + +import ( + "encoding/base64" + "fmt" + "strings" + + "golang.org/x/net/context" +) + +const ( + binHdrSuffix = "-bin" +) + +// encodeKeyValue encodes key and value qualified for transmission via gRPC. +// Transmitting binary headers violates HTTP/2 spec. +// TODO(zhaoq): Maybe check if k is ASCII also. +func encodeKeyValue(k, v string) (string, string) { + k = strings.ToLower(k) + if strings.HasSuffix(k, binHdrSuffix) { + val := base64.StdEncoding.EncodeToString([]byte(v)) + v = string(val) + } + return k, v +} + +// DecodeKeyValue returns the original key and value corresponding to the +// encoded data in k, v. +// If k is a binary header and v contains comma, v is split on comma before decoded, +// and the decoded v will be joined with comma before returned. +func DecodeKeyValue(k, v string) (string, string, error) { + if !strings.HasSuffix(k, binHdrSuffix) { + return k, v, nil + } + vvs := strings.Split(v, ",") + for i, vv := range vvs { + val, err := base64.StdEncoding.DecodeString(vv) + if err != nil { + return "", "", err + } + vvs[i] = string(val) + } + return k, strings.Join(vvs, ","), nil +} + +// MD is a mapping from metadata keys to values. Users should use the following +// two convenience functions New and Pairs to generate MD. +type MD map[string][]string + +// New creates a MD from given key-value map. +// Keys are automatically converted to lowercase. And for keys having "-bin" as suffix, their values will be applied Base64 encoding. +func New(m map[string]string) MD { + md := MD{} + for k, v := range m { + key, val := encodeKeyValue(k, v) + md[key] = append(md[key], val) + } + return md +} + +// Pairs returns an MD formed by the mapping of key, value ... +// Pairs panics if len(kv) is odd. +// Keys are automatically converted to lowercase. And for keys having "-bin" as suffix, their values will be appplied Base64 encoding. +func Pairs(kv ...string) MD { + if len(kv)%2 == 1 { + panic(fmt.Sprintf("metadata: Pairs got the odd number of input pairs for metadata: %d", len(kv))) + } + md := MD{} + var k string + for i, s := range kv { + if i%2 == 0 { + k = s + continue + } + key, val := encodeKeyValue(k, s) + md[key] = append(md[key], val) + } + return md +} + +// Len returns the number of items in md. +func (md MD) Len() int { + return len(md) +} + +// Copy returns a copy of md. +func (md MD) Copy() MD { + return Join(md) +} + +// Join joins any number of MDs into a single MD. +// The order of values for each key is determined by the order in which +// the MDs containing those values are presented to Join. +func Join(mds ...MD) MD { + out := MD{} + for _, md := range mds { + for k, v := range md { + out[k] = append(out[k], v...) + } + } + return out +} + +type mdKey struct{} + +// NewContext creates a new context with md attached. +func NewContext(ctx context.Context, md MD) context.Context { + return context.WithValue(ctx, mdKey{}, md) +} + +// FromContext returns the MD in ctx if it exists. +// The returned md should be immutable, writing to it may cause races. +// Modification should be made to the copies of the returned md. +func FromContext(ctx context.Context) (md MD, ok bool) { + md, ok = ctx.Value(mdKey{}).(MD) + return +} diff --git a/vendor/google.golang.org/grpc/metadata/metadata_test.go b/vendor/google.golang.org/grpc/metadata/metadata_test.go new file mode 100644 index 0000000..fef0a0f --- /dev/null +++ b/vendor/google.golang.org/grpc/metadata/metadata_test.go @@ -0,0 +1,139 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package metadata + +import ( + "reflect" + "testing" +) + +const binaryValue = string(128) + +func TestEncodeKeyValue(t *testing.T) { + for _, test := range []struct { + // input + kin string + vin string + // output + kout string + vout string + }{ + {"key", "abc", "key", "abc"}, + {"KEY", "abc", "key", "abc"}, + {"key-bin", "abc", "key-bin", "YWJj"}, + {"key-bin", binaryValue, "key-bin", "woA="}, + } { + k, v := encodeKeyValue(test.kin, test.vin) + if k != test.kout || !reflect.DeepEqual(v, test.vout) { + t.Fatalf("encodeKeyValue(%q, %q) = %q, %q, want %q, %q", test.kin, test.vin, k, v, test.kout, test.vout) + } + } +} + +func TestDecodeKeyValue(t *testing.T) { + for _, test := range []struct { + // input + kin string + vin string + // output + kout string + vout string + err error + }{ + {"a", "abc", "a", "abc", nil}, + {"key-bin", "Zm9vAGJhcg==", "key-bin", "foo\x00bar", nil}, + {"key-bin", "woA=", "key-bin", binaryValue, nil}, + {"a", "abc,efg", "a", "abc,efg", nil}, + {"key-bin", "Zm9vAGJhcg==,Zm9vAGJhcg==", "key-bin", "foo\x00bar,foo\x00bar", nil}, + } { + k, v, err := DecodeKeyValue(test.kin, test.vin) + if k != test.kout || !reflect.DeepEqual(v, test.vout) || !reflect.DeepEqual(err, test.err) { + t.Fatalf("DecodeKeyValue(%q, %q) = %q, %q, %v, want %q, %q, %v", test.kin, test.vin, k, v, err, test.kout, test.vout, test.err) + } + } +} + +func TestPairsMD(t *testing.T) { + for _, test := range []struct { + // input + kv []string + // output + md MD + size int + }{ + {[]string{}, MD{}, 0}, + {[]string{"k1", "v1", "k2-bin", binaryValue}, New(map[string]string{ + "k1": "v1", + "k2-bin": binaryValue, + }), 2}, + } { + md := Pairs(test.kv...) + if !reflect.DeepEqual(md, test.md) { + t.Fatalf("Pairs(%v) = %v, want %v", test.kv, md, test.md) + } + if md.Len() != test.size { + t.Fatalf("Pairs(%v) generates md of size %d, want %d", test.kv, md.Len(), test.size) + } + } +} + +func TestCopy(t *testing.T) { + const key, val = "key", "val" + orig := Pairs(key, val) + copy := orig.Copy() + if !reflect.DeepEqual(orig, copy) { + t.Errorf("copied value not equal to the original, got %v, want %v", copy, orig) + } + orig[key][0] = "foo" + if v := copy[key][0]; v != val { + t.Errorf("change in original should not affect copy, got %q, want %q", v, val) + } +} + +func TestJoin(t *testing.T) { + for _, test := range []struct { + mds []MD + want MD + }{ + {[]MD{}, MD{}}, + {[]MD{Pairs("foo", "bar")}, Pairs("foo", "bar")}, + {[]MD{Pairs("foo", "bar"), Pairs("foo", "baz")}, Pairs("foo", "bar", "foo", "baz")}, + {[]MD{Pairs("foo", "bar"), Pairs("foo", "baz"), Pairs("zip", "zap")}, Pairs("foo", "bar", "foo", "baz", "zip", "zap")}, + } { + md := Join(test.mds...) + if !reflect.DeepEqual(md, test.want) { + t.Errorf("context's metadata is %v, want %v", md, test.want) + } + } +} diff --git a/vendor/google.golang.org/grpc/naming/naming.go b/vendor/google.golang.org/grpc/naming/naming.go new file mode 100644 index 0000000..c2e0871 --- /dev/null +++ b/vendor/google.golang.org/grpc/naming/naming.go @@ -0,0 +1,74 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package naming defines the naming API and related data structures for gRPC. +// The interface is EXPERIMENTAL and may be suject to change. +package naming + +// Operation defines the corresponding operations for a name resolution change. +type Operation uint8 + +const ( + // Add indicates a new address is added. + Add Operation = iota + // Delete indicates an exisiting address is deleted. + Delete +) + +// Update defines a name resolution update. Notice that it is not valid having both +// empty string Addr and nil Metadata in an Update. +type Update struct { + // Op indicates the operation of the update. + Op Operation + // Addr is the updated address. It is empty string if there is no address update. + Addr string + // Metadata is the updated metadata. It is nil if there is no metadata update. + // Metadata is not required for a custom naming implementation. + Metadata interface{} +} + +// Resolver creates a Watcher for a target to track its resolution changes. +type Resolver interface { + // Resolve creates a Watcher for target. + Resolve(target string) (Watcher, error) +} + +// Watcher watches for the updates on the specified target. +type Watcher interface { + // Next blocks until an update or error happens. It may return one or more + // updates. The first call should get the full set of the results. It should + // return an error if and only if Watcher cannot recover. + Next() ([]*Update, error) + // Close closes the Watcher. + Close() +} diff --git a/vendor/google.golang.org/grpc/peer/peer.go b/vendor/google.golang.org/grpc/peer/peer.go new file mode 100644 index 0000000..bfa6205 --- /dev/null +++ b/vendor/google.golang.org/grpc/peer/peer.go @@ -0,0 +1,65 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package peer defines various peer information associated with RPCs and +// corresponding utils. +package peer + +import ( + "net" + + "golang.org/x/net/context" + "google.golang.org/grpc/credentials" +) + +// Peer contains the information of the peer for an RPC. +type Peer struct { + // Addr is the peer address. + Addr net.Addr + // AuthInfo is the authentication information of the transport. + // It is nil if there is no transport security being used. + AuthInfo credentials.AuthInfo +} + +type peerKey struct{} + +// NewContext creates a new context with peer information attached. +func NewContext(ctx context.Context, p *Peer) context.Context { + return context.WithValue(ctx, peerKey{}, p) +} + +// FromContext returns the peer information in ctx if it exists. +func FromContext(ctx context.Context) (p *Peer, ok bool) { + p, ok = ctx.Value(peerKey{}).(*Peer) + return +} diff --git a/vendor/google.golang.org/grpc/reflection/README.md b/vendor/google.golang.org/grpc/reflection/README.md new file mode 100644 index 0000000..04b6371 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/README.md @@ -0,0 +1,18 @@ +# Reflection + +Package reflection implements server reflection service. + +The service implemented is defined in: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1alpha/reflection.proto. + +To register server reflection on a gRPC server: +```go +import "google.golang.org/grpc/reflection" + +s := grpc.NewServer() +pb.RegisterYourOwnServer(s, &server{}) + +// Register reflection service on gRPC server. +reflection.Register(s) + +s.Serve(lis) +``` diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go new file mode 100644 index 0000000..76987a4 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go @@ -0,0 +1,694 @@ +// Code generated by protoc-gen-go. +// source: reflection.proto +// DO NOT EDIT! + +/* +Package grpc_reflection_v1alpha is a generated protocol buffer package. + +It is generated from these files: + reflection.proto + +It has these top-level messages: + ServerReflectionRequest + ExtensionRequest + ServerReflectionResponse + FileDescriptorResponse + ExtensionNumberResponse + ListServiceResponse + ServiceResponse + ErrorResponse +*/ +package grpc_reflection_v1alpha + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The message sent by the client when calling ServerReflectionInfo method. +type ServerReflectionRequest struct { + Host string `protobuf:"bytes,1,opt,name=host" json:"host,omitempty"` + // To use reflection service, the client should set one of the following + // fields in message_request. The server distinguishes requests by their + // defined field and then handles them using corresponding methods. + // + // Types that are valid to be assigned to MessageRequest: + // *ServerReflectionRequest_FileByFilename + // *ServerReflectionRequest_FileContainingSymbol + // *ServerReflectionRequest_FileContainingExtension + // *ServerReflectionRequest_AllExtensionNumbersOfType + // *ServerReflectionRequest_ListServices + MessageRequest isServerReflectionRequest_MessageRequest `protobuf_oneof:"message_request"` +} + +func (m *ServerReflectionRequest) Reset() { *m = ServerReflectionRequest{} } +func (m *ServerReflectionRequest) String() string { return proto.CompactTextString(m) } +func (*ServerReflectionRequest) ProtoMessage() {} +func (*ServerReflectionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isServerReflectionRequest_MessageRequest interface { + isServerReflectionRequest_MessageRequest() +} + +type ServerReflectionRequest_FileByFilename struct { + FileByFilename string `protobuf:"bytes,3,opt,name=file_by_filename,json=fileByFilename,oneof"` +} +type ServerReflectionRequest_FileContainingSymbol struct { + FileContainingSymbol string `protobuf:"bytes,4,opt,name=file_containing_symbol,json=fileContainingSymbol,oneof"` +} +type ServerReflectionRequest_FileContainingExtension struct { + FileContainingExtension *ExtensionRequest `protobuf:"bytes,5,opt,name=file_containing_extension,json=fileContainingExtension,oneof"` +} +type ServerReflectionRequest_AllExtensionNumbersOfType struct { + AllExtensionNumbersOfType string `protobuf:"bytes,6,opt,name=all_extension_numbers_of_type,json=allExtensionNumbersOfType,oneof"` +} +type ServerReflectionRequest_ListServices struct { + ListServices string `protobuf:"bytes,7,opt,name=list_services,json=listServices,oneof"` +} + +func (*ServerReflectionRequest_FileByFilename) isServerReflectionRequest_MessageRequest() {} +func (*ServerReflectionRequest_FileContainingSymbol) isServerReflectionRequest_MessageRequest() {} +func (*ServerReflectionRequest_FileContainingExtension) isServerReflectionRequest_MessageRequest() {} +func (*ServerReflectionRequest_AllExtensionNumbersOfType) isServerReflectionRequest_MessageRequest() {} +func (*ServerReflectionRequest_ListServices) isServerReflectionRequest_MessageRequest() {} + +func (m *ServerReflectionRequest) GetMessageRequest() isServerReflectionRequest_MessageRequest { + if m != nil { + return m.MessageRequest + } + return nil +} + +func (m *ServerReflectionRequest) GetFileByFilename() string { + if x, ok := m.GetMessageRequest().(*ServerReflectionRequest_FileByFilename); ok { + return x.FileByFilename + } + return "" +} + +func (m *ServerReflectionRequest) GetFileContainingSymbol() string { + if x, ok := m.GetMessageRequest().(*ServerReflectionRequest_FileContainingSymbol); ok { + return x.FileContainingSymbol + } + return "" +} + +func (m *ServerReflectionRequest) GetFileContainingExtension() *ExtensionRequest { + if x, ok := m.GetMessageRequest().(*ServerReflectionRequest_FileContainingExtension); ok { + return x.FileContainingExtension + } + return nil +} + +func (m *ServerReflectionRequest) GetAllExtensionNumbersOfType() string { + if x, ok := m.GetMessageRequest().(*ServerReflectionRequest_AllExtensionNumbersOfType); ok { + return x.AllExtensionNumbersOfType + } + return "" +} + +func (m *ServerReflectionRequest) GetListServices() string { + if x, ok := m.GetMessageRequest().(*ServerReflectionRequest_ListServices); ok { + return x.ListServices + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ServerReflectionRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ServerReflectionRequest_OneofMarshaler, _ServerReflectionRequest_OneofUnmarshaler, _ServerReflectionRequest_OneofSizer, []interface{}{ + (*ServerReflectionRequest_FileByFilename)(nil), + (*ServerReflectionRequest_FileContainingSymbol)(nil), + (*ServerReflectionRequest_FileContainingExtension)(nil), + (*ServerReflectionRequest_AllExtensionNumbersOfType)(nil), + (*ServerReflectionRequest_ListServices)(nil), + } +} + +func _ServerReflectionRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ServerReflectionRequest) + // message_request + switch x := m.MessageRequest.(type) { + case *ServerReflectionRequest_FileByFilename: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.FileByFilename) + case *ServerReflectionRequest_FileContainingSymbol: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.FileContainingSymbol) + case *ServerReflectionRequest_FileContainingExtension: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.FileContainingExtension); err != nil { + return err + } + case *ServerReflectionRequest_AllExtensionNumbersOfType: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeStringBytes(x.AllExtensionNumbersOfType) + case *ServerReflectionRequest_ListServices: + b.EncodeVarint(7<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ListServices) + case nil: + default: + return fmt.Errorf("ServerReflectionRequest.MessageRequest has unexpected type %T", x) + } + return nil +} + +func _ServerReflectionRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ServerReflectionRequest) + switch tag { + case 3: // message_request.file_by_filename + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.MessageRequest = &ServerReflectionRequest_FileByFilename{x} + return true, err + case 4: // message_request.file_containing_symbol + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.MessageRequest = &ServerReflectionRequest_FileContainingSymbol{x} + return true, err + case 5: // message_request.file_containing_extension + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ExtensionRequest) + err := b.DecodeMessage(msg) + m.MessageRequest = &ServerReflectionRequest_FileContainingExtension{msg} + return true, err + case 6: // message_request.all_extension_numbers_of_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.MessageRequest = &ServerReflectionRequest_AllExtensionNumbersOfType{x} + return true, err + case 7: // message_request.list_services + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.MessageRequest = &ServerReflectionRequest_ListServices{x} + return true, err + default: + return false, nil + } +} + +func _ServerReflectionRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ServerReflectionRequest) + // message_request + switch x := m.MessageRequest.(type) { + case *ServerReflectionRequest_FileByFilename: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.FileByFilename))) + n += len(x.FileByFilename) + case *ServerReflectionRequest_FileContainingSymbol: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.FileContainingSymbol))) + n += len(x.FileContainingSymbol) + case *ServerReflectionRequest_FileContainingExtension: + s := proto.Size(x.FileContainingExtension) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ServerReflectionRequest_AllExtensionNumbersOfType: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AllExtensionNumbersOfType))) + n += len(x.AllExtensionNumbersOfType) + case *ServerReflectionRequest_ListServices: + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ListServices))) + n += len(x.ListServices) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The type name and extension number sent by the client when requesting +// file_containing_extension. +type ExtensionRequest struct { + // Fully-qualified type name. The format should be <package>.<type> + ContainingType string `protobuf:"bytes,1,opt,name=containing_type,json=containingType" json:"containing_type,omitempty"` + ExtensionNumber int32 `protobuf:"varint,2,opt,name=extension_number,json=extensionNumber" json:"extension_number,omitempty"` +} + +func (m *ExtensionRequest) Reset() { *m = ExtensionRequest{} } +func (m *ExtensionRequest) String() string { return proto.CompactTextString(m) } +func (*ExtensionRequest) ProtoMessage() {} +func (*ExtensionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// The message sent by the server to answer ServerReflectionInfo method. +type ServerReflectionResponse struct { + ValidHost string `protobuf:"bytes,1,opt,name=valid_host,json=validHost" json:"valid_host,omitempty"` + OriginalRequest *ServerReflectionRequest `protobuf:"bytes,2,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The server set one of the following fields accroding to the message_request + // in the request. + // + // Types that are valid to be assigned to MessageResponse: + // *ServerReflectionResponse_FileDescriptorResponse + // *ServerReflectionResponse_AllExtensionNumbersResponse + // *ServerReflectionResponse_ListServicesResponse + // *ServerReflectionResponse_ErrorResponse + MessageResponse isServerReflectionResponse_MessageResponse `protobuf_oneof:"message_response"` +} + +func (m *ServerReflectionResponse) Reset() { *m = ServerReflectionResponse{} } +func (m *ServerReflectionResponse) String() string { return proto.CompactTextString(m) } +func (*ServerReflectionResponse) ProtoMessage() {} +func (*ServerReflectionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isServerReflectionResponse_MessageResponse interface { + isServerReflectionResponse_MessageResponse() +} + +type ServerReflectionResponse_FileDescriptorResponse struct { + FileDescriptorResponse *FileDescriptorResponse `protobuf:"bytes,4,opt,name=file_descriptor_response,json=fileDescriptorResponse,oneof"` +} +type ServerReflectionResponse_AllExtensionNumbersResponse struct { + AllExtensionNumbersResponse *ExtensionNumberResponse `protobuf:"bytes,5,opt,name=all_extension_numbers_response,json=allExtensionNumbersResponse,oneof"` +} +type ServerReflectionResponse_ListServicesResponse struct { + ListServicesResponse *ListServiceResponse `protobuf:"bytes,6,opt,name=list_services_response,json=listServicesResponse,oneof"` +} +type ServerReflectionResponse_ErrorResponse struct { + ErrorResponse *ErrorResponse `protobuf:"bytes,7,opt,name=error_response,json=errorResponse,oneof"` +} + +func (*ServerReflectionResponse_FileDescriptorResponse) isServerReflectionResponse_MessageResponse() {} +func (*ServerReflectionResponse_AllExtensionNumbersResponse) isServerReflectionResponse_MessageResponse() { +} +func (*ServerReflectionResponse_ListServicesResponse) isServerReflectionResponse_MessageResponse() {} +func (*ServerReflectionResponse_ErrorResponse) isServerReflectionResponse_MessageResponse() {} + +func (m *ServerReflectionResponse) GetMessageResponse() isServerReflectionResponse_MessageResponse { + if m != nil { + return m.MessageResponse + } + return nil +} + +func (m *ServerReflectionResponse) GetOriginalRequest() *ServerReflectionRequest { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *ServerReflectionResponse) GetFileDescriptorResponse() *FileDescriptorResponse { + if x, ok := m.GetMessageResponse().(*ServerReflectionResponse_FileDescriptorResponse); ok { + return x.FileDescriptorResponse + } + return nil +} + +func (m *ServerReflectionResponse) GetAllExtensionNumbersResponse() *ExtensionNumberResponse { + if x, ok := m.GetMessageResponse().(*ServerReflectionResponse_AllExtensionNumbersResponse); ok { + return x.AllExtensionNumbersResponse + } + return nil +} + +func (m *ServerReflectionResponse) GetListServicesResponse() *ListServiceResponse { + if x, ok := m.GetMessageResponse().(*ServerReflectionResponse_ListServicesResponse); ok { + return x.ListServicesResponse + } + return nil +} + +func (m *ServerReflectionResponse) GetErrorResponse() *ErrorResponse { + if x, ok := m.GetMessageResponse().(*ServerReflectionResponse_ErrorResponse); ok { + return x.ErrorResponse + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ServerReflectionResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ServerReflectionResponse_OneofMarshaler, _ServerReflectionResponse_OneofUnmarshaler, _ServerReflectionResponse_OneofSizer, []interface{}{ + (*ServerReflectionResponse_FileDescriptorResponse)(nil), + (*ServerReflectionResponse_AllExtensionNumbersResponse)(nil), + (*ServerReflectionResponse_ListServicesResponse)(nil), + (*ServerReflectionResponse_ErrorResponse)(nil), + } +} + +func _ServerReflectionResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ServerReflectionResponse) + // message_response + switch x := m.MessageResponse.(type) { + case *ServerReflectionResponse_FileDescriptorResponse: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.FileDescriptorResponse); err != nil { + return err + } + case *ServerReflectionResponse_AllExtensionNumbersResponse: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AllExtensionNumbersResponse); err != nil { + return err + } + case *ServerReflectionResponse_ListServicesResponse: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ListServicesResponse); err != nil { + return err + } + case *ServerReflectionResponse_ErrorResponse: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ErrorResponse); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ServerReflectionResponse.MessageResponse has unexpected type %T", x) + } + return nil +} + +func _ServerReflectionResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ServerReflectionResponse) + switch tag { + case 4: // message_response.file_descriptor_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(FileDescriptorResponse) + err := b.DecodeMessage(msg) + m.MessageResponse = &ServerReflectionResponse_FileDescriptorResponse{msg} + return true, err + case 5: // message_response.all_extension_numbers_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ExtensionNumberResponse) + err := b.DecodeMessage(msg) + m.MessageResponse = &ServerReflectionResponse_AllExtensionNumbersResponse{msg} + return true, err + case 6: // message_response.list_services_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ListServiceResponse) + err := b.DecodeMessage(msg) + m.MessageResponse = &ServerReflectionResponse_ListServicesResponse{msg} + return true, err + case 7: // message_response.error_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ErrorResponse) + err := b.DecodeMessage(msg) + m.MessageResponse = &ServerReflectionResponse_ErrorResponse{msg} + return true, err + default: + return false, nil + } +} + +func _ServerReflectionResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ServerReflectionResponse) + // message_response + switch x := m.MessageResponse.(type) { + case *ServerReflectionResponse_FileDescriptorResponse: + s := proto.Size(x.FileDescriptorResponse) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ServerReflectionResponse_AllExtensionNumbersResponse: + s := proto.Size(x.AllExtensionNumbersResponse) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ServerReflectionResponse_ListServicesResponse: + s := proto.Size(x.ListServicesResponse) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ServerReflectionResponse_ErrorResponse: + s := proto.Size(x.ErrorResponse) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Serialized FileDescriptorProto messages sent by the server answering +// a file_by_filename, file_containing_symbol, or file_containing_extension +// request. +type FileDescriptorResponse struct { + // Serialized FileDescriptorProto messages. We avoid taking a dependency on + // descriptor.proto, which uses proto2 only features, by making them opaque + // bytes instead. + FileDescriptorProto [][]byte `protobuf:"bytes,1,rep,name=file_descriptor_proto,json=fileDescriptorProto,proto3" json:"file_descriptor_proto,omitempty"` +} + +func (m *FileDescriptorResponse) Reset() { *m = FileDescriptorResponse{} } +func (m *FileDescriptorResponse) String() string { return proto.CompactTextString(m) } +func (*FileDescriptorResponse) ProtoMessage() {} +func (*FileDescriptorResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +// A list of extension numbers sent by the server answering +// all_extension_numbers_of_type request. +type ExtensionNumberResponse struct { + // Full name of the base type, including the package name. The format + // is <package>.<type> + BaseTypeName string `protobuf:"bytes,1,opt,name=base_type_name,json=baseTypeName" json:"base_type_name,omitempty"` + ExtensionNumber []int32 `protobuf:"varint,2,rep,name=extension_number,json=extensionNumber" json:"extension_number,omitempty"` +} + +func (m *ExtensionNumberResponse) Reset() { *m = ExtensionNumberResponse{} } +func (m *ExtensionNumberResponse) String() string { return proto.CompactTextString(m) } +func (*ExtensionNumberResponse) ProtoMessage() {} +func (*ExtensionNumberResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +// A list of ServiceResponse sent by the server answering list_services request. +type ListServiceResponse struct { + // The information of each service may be expanded in the future, so we use + // ServiceResponse message to encapsulate it. + Service []*ServiceResponse `protobuf:"bytes,1,rep,name=service" json:"service,omitempty"` +} + +func (m *ListServiceResponse) Reset() { *m = ListServiceResponse{} } +func (m *ListServiceResponse) String() string { return proto.CompactTextString(m) } +func (*ListServiceResponse) ProtoMessage() {} +func (*ListServiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ListServiceResponse) GetService() []*ServiceResponse { + if m != nil { + return m.Service + } + return nil +} + +// The information of a single service used by ListServiceResponse to answer +// list_services request. +type ServiceResponse struct { + // Full name of a registered service, including its package name. The format + // is <package>.<service> + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *ServiceResponse) Reset() { *m = ServiceResponse{} } +func (m *ServiceResponse) String() string { return proto.CompactTextString(m) } +func (*ServiceResponse) ProtoMessage() {} +func (*ServiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +// The error code and error message sent by the server when an error occurs. +type ErrorResponse struct { + // This field uses the error codes defined in grpc::StatusCode. + ErrorCode int32 `protobuf:"varint,1,opt,name=error_code,json=errorCode" json:"error_code,omitempty"` + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage" json:"error_message,omitempty"` +} + +func (m *ErrorResponse) Reset() { *m = ErrorResponse{} } +func (m *ErrorResponse) String() string { return proto.CompactTextString(m) } +func (*ErrorResponse) ProtoMessage() {} +func (*ErrorResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func init() { + proto.RegisterType((*ServerReflectionRequest)(nil), "grpc.reflection.v1alpha.ServerReflectionRequest") + proto.RegisterType((*ExtensionRequest)(nil), "grpc.reflection.v1alpha.ExtensionRequest") + proto.RegisterType((*ServerReflectionResponse)(nil), "grpc.reflection.v1alpha.ServerReflectionResponse") + proto.RegisterType((*FileDescriptorResponse)(nil), "grpc.reflection.v1alpha.FileDescriptorResponse") + proto.RegisterType((*ExtensionNumberResponse)(nil), "grpc.reflection.v1alpha.ExtensionNumberResponse") + proto.RegisterType((*ListServiceResponse)(nil), "grpc.reflection.v1alpha.ListServiceResponse") + proto.RegisterType((*ServiceResponse)(nil), "grpc.reflection.v1alpha.ServiceResponse") + proto.RegisterType((*ErrorResponse)(nil), "grpc.reflection.v1alpha.ErrorResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ServerReflection service + +type ServerReflectionClient interface { + // The reflection service is structured as a bidirectional stream, ensuring + // all related requests go to a single server. + ServerReflectionInfo(ctx context.Context, opts ...grpc.CallOption) (ServerReflection_ServerReflectionInfoClient, error) +} + +type serverReflectionClient struct { + cc *grpc.ClientConn +} + +func NewServerReflectionClient(cc *grpc.ClientConn) ServerReflectionClient { + return &serverReflectionClient{cc} +} + +func (c *serverReflectionClient) ServerReflectionInfo(ctx context.Context, opts ...grpc.CallOption) (ServerReflection_ServerReflectionInfoClient, error) { + stream, err := grpc.NewClientStream(ctx, &_ServerReflection_serviceDesc.Streams[0], c.cc, "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo", opts...) + if err != nil { + return nil, err + } + x := &serverReflectionServerReflectionInfoClient{stream} + return x, nil +} + +type ServerReflection_ServerReflectionInfoClient interface { + Send(*ServerReflectionRequest) error + Recv() (*ServerReflectionResponse, error) + grpc.ClientStream +} + +type serverReflectionServerReflectionInfoClient struct { + grpc.ClientStream +} + +func (x *serverReflectionServerReflectionInfoClient) Send(m *ServerReflectionRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *serverReflectionServerReflectionInfoClient) Recv() (*ServerReflectionResponse, error) { + m := new(ServerReflectionResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for ServerReflection service + +type ServerReflectionServer interface { + // The reflection service is structured as a bidirectional stream, ensuring + // all related requests go to a single server. + ServerReflectionInfo(ServerReflection_ServerReflectionInfoServer) error +} + +func RegisterServerReflectionServer(s *grpc.Server, srv ServerReflectionServer) { + s.RegisterService(&_ServerReflection_serviceDesc, srv) +} + +func _ServerReflection_ServerReflectionInfo_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ServerReflectionServer).ServerReflectionInfo(&serverReflectionServerReflectionInfoServer{stream}) +} + +type ServerReflection_ServerReflectionInfoServer interface { + Send(*ServerReflectionResponse) error + Recv() (*ServerReflectionRequest, error) + grpc.ServerStream +} + +type serverReflectionServerReflectionInfoServer struct { + grpc.ServerStream +} + +func (x *serverReflectionServerReflectionInfoServer) Send(m *ServerReflectionResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *serverReflectionServerReflectionInfoServer) Recv() (*ServerReflectionRequest, error) { + m := new(ServerReflectionRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _ServerReflection_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.reflection.v1alpha.ServerReflection", + HandlerType: (*ServerReflectionServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "ServerReflectionInfo", + Handler: _ServerReflection_ServerReflectionInfo_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "reflection.proto", +} + +func init() { proto.RegisterFile("reflection.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 646 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xd3, 0x4c, + 0x10, 0xfd, 0xd2, 0xe6, 0x47, 0x99, 0xfc, 0xf9, 0xdb, 0x86, 0xc4, 0x05, 0x15, 0x21, 0x43, 0x21, + 0x45, 0x28, 0xb4, 0x46, 0xe2, 0x01, 0x52, 0x40, 0x45, 0x2a, 0x2d, 0x72, 0xb8, 0x41, 0x5c, 0x58, + 0x8e, 0xb3, 0x4e, 0x0d, 0x8e, 0xd7, 0xec, 0xba, 0x81, 0x5c, 0xf1, 0x10, 0x3c, 0x14, 0xaf, 0xc4, + 0x25, 0xbb, 0xeb, 0x9f, 0x38, 0xae, 0x0d, 0xea, 0x95, 0xad, 0xb3, 0x33, 0x7b, 0x66, 0xe6, 0x9c, + 0x59, 0x50, 0x28, 0x76, 0x3c, 0x6c, 0x87, 0x2e, 0xf1, 0xc7, 0x01, 0x25, 0x21, 0x41, 0xc3, 0x05, + 0x0d, 0xec, 0x71, 0x06, 0x5e, 0x9d, 0x58, 0x5e, 0x70, 0x65, 0x69, 0xbf, 0x77, 0x60, 0x38, 0xc5, + 0x74, 0x85, 0xa9, 0x91, 0x1e, 0x1a, 0xf8, 0xeb, 0x35, 0x66, 0x21, 0x42, 0x50, 0xbd, 0x22, 0x2c, + 0x54, 0x2b, 0x0f, 0x2a, 0xa3, 0xa6, 0x21, 0xff, 0xd1, 0x53, 0x50, 0x1c, 0xd7, 0xc3, 0xe6, 0x6c, + 0x6d, 0x8a, 0xaf, 0x6f, 0x2d, 0xb1, 0xba, 0x2b, 0xce, 0xcf, 0xfe, 0x33, 0xba, 0x02, 0x99, 0xac, + 0xdf, 0xc4, 0x38, 0x7a, 0x09, 0x03, 0x19, 0x6b, 0x13, 0x3f, 0xb4, 0x5c, 0xdf, 0xf5, 0x17, 0x26, + 0x5b, 0x2f, 0x67, 0xc4, 0x53, 0xab, 0x71, 0x46, 0x5f, 0x9c, 0x9f, 0xa6, 0xc7, 0x53, 0x79, 0x8a, + 0x16, 0xb0, 0x9f, 0xcf, 0xc3, 0xdf, 0x43, 0xec, 0x33, 0x5e, 0x9b, 0x5a, 0xe3, 0xa9, 0x2d, 0xfd, + 0x68, 0x5c, 0xd2, 0xd0, 0xf8, 0x75, 0x12, 0x19, 0x77, 0xc1, 0x59, 0x86, 0xdb, 0x2c, 0x69, 0x04, + 0x9a, 0xc0, 0x81, 0xe5, 0x79, 0x9b, 0xcb, 0x4d, 0xff, 0x7a, 0x39, 0xc3, 0x94, 0x99, 0xc4, 0x31, + 0xc3, 0x75, 0x80, 0xd5, 0x7a, 0x5c, 0xe7, 0x3e, 0x0f, 0x4b, 0xd3, 0x2e, 0xa2, 0xa0, 0x4b, 0xe7, + 0x03, 0x0f, 0x41, 0x87, 0xd0, 0xf1, 0x5c, 0x16, 0x9a, 0x8c, 0x0f, 0xd1, 0xb5, 0x31, 0x53, 0x1b, + 0x71, 0x4e, 0x5b, 0xc0, 0xd3, 0x18, 0x9d, 0xfc, 0x0f, 0xbd, 0x25, 0x66, 0xcc, 0x5a, 0x60, 0x93, + 0x46, 0x85, 0x69, 0x0e, 0x28, 0xf9, 0x62, 0xd1, 0x13, 0xe8, 0x65, 0xba, 0x96, 0x35, 0x44, 0xd3, + 0xef, 0x6e, 0x60, 0x49, 0x7b, 0x04, 0x4a, 0xbe, 0x6c, 0x75, 0x87, 0x47, 0xd6, 0x8c, 0x1e, 0xde, + 0x2e, 0x54, 0xfb, 0x55, 0x05, 0xf5, 0xa6, 0xc4, 0x2c, 0x20, 0x3e, 0xc3, 0xe8, 0x00, 0x60, 0x65, + 0x79, 0xee, 0xdc, 0xcc, 0x28, 0xdd, 0x94, 0xc8, 0x99, 0x90, 0xfb, 0x13, 0x28, 0x84, 0xba, 0x0b, + 0xd7, 0xb7, 0xbc, 0xa4, 0x6e, 0x49, 0xd3, 0xd2, 0x8f, 0x4b, 0x15, 0x28, 0xb1, 0x93, 0xd1, 0x4b, + 0x6e, 0x4a, 0x9a, 0xfd, 0x02, 0xaa, 0xd4, 0x79, 0x8e, 0x99, 0x4d, 0xdd, 0x20, 0x24, 0x94, 0x73, + 0x44, 0x75, 0x49, 0x87, 0xb4, 0xf4, 0xe7, 0xa5, 0x24, 0xc2, 0x64, 0xaf, 0xd2, 0xbc, 0xa4, 0x1d, + 0x3e, 0x76, 0x69, 0xb9, 0x9b, 0x27, 0xe8, 0x1b, 0xdc, 0x2f, 0xd6, 0x3a, 0xa5, 0xac, 0xfd, 0xa3, + 0xaf, 0x9c, 0x01, 0x32, 0x9c, 0xf7, 0x0a, 0xec, 0x91, 0x12, 0xcf, 0x61, 0xb0, 0x65, 0x90, 0x0d, + 0x61, 0x5d, 0x12, 0x3e, 0x2b, 0x25, 0x3c, 0xdf, 0x18, 0x28, 0x43, 0xd6, 0xcf, 0xfa, 0x2a, 0x65, + 0xb9, 0x84, 0x2e, 0xa6, 0x34, 0x3b, 0xc1, 0x86, 0xbc, 0xfd, 0x71, 0x79, 0x3b, 0x22, 0x3c, 0x73, + 0x6f, 0x07, 0x67, 0x81, 0x09, 0x02, 0x65, 0x63, 0xd8, 0x08, 0xd3, 0xce, 0x61, 0x50, 0x3c, 0x77, + 0xa4, 0xc3, 0x9d, 0xbc, 0x94, 0xf2, 0xe1, 0xe1, 0x8e, 0xda, 0x1d, 0xb5, 0x8d, 0xbd, 0x6d, 0x51, + 0xde, 0x8b, 0x23, 0xed, 0x33, 0x0c, 0x4b, 0x46, 0x8a, 0x1e, 0x41, 0x77, 0x66, 0x31, 0x2c, 0x17, + 0xc0, 0x94, 0x6f, 0x4c, 0xe4, 0xcc, 0xb6, 0x40, 0x85, 0xff, 0x2f, 0xc4, 0xfb, 0x52, 0xbc, 0x03, + 0xbb, 0x45, 0x3b, 0xf0, 0x11, 0xf6, 0x0a, 0xa6, 0xc9, 0x1f, 0x80, 0x46, 0x2c, 0x8b, 0x2c, 0xb4, + 0xa5, 0x8f, 0xfe, 0xea, 0xea, 0x4c, 0xaa, 0x91, 0x24, 0x6a, 0x87, 0xd0, 0xcb, 0x5f, 0xcb, 0x1f, + 0xce, 0x4c, 0xd1, 0xf2, 0x5f, 0x9b, 0x42, 0x67, 0x6b, 0xe2, 0x62, 0xf3, 0x22, 0xc5, 0x6c, 0x32, + 0x8f, 0x42, 0x6b, 0x46, 0x53, 0x22, 0xa7, 0x1c, 0x40, 0x0f, 0x21, 0x12, 0xc4, 0x8c, 0x55, 0x90, + 0x6b, 0xc7, 0x27, 0x20, 0xc1, 0x77, 0x11, 0xa6, 0xff, 0xac, 0x80, 0x92, 0x5f, 0x37, 0xf4, 0x03, + 0xfa, 0x79, 0xec, 0xad, 0xef, 0x10, 0x74, 0xeb, 0x8d, 0xbd, 0x7b, 0x72, 0x8b, 0x8c, 0xa8, 0xab, + 0x51, 0xe5, 0xb8, 0x32, 0xab, 0x4b, 0xe9, 0x5f, 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x3f, + 0x7b, 0x08, 0x87, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto new file mode 100644 index 0000000..276ff0e --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto @@ -0,0 +1,151 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Service exported by server reflection + +syntax = "proto3"; + +package grpc.reflection.v1alpha; + +service ServerReflection { + // The reflection service is structured as a bidirectional stream, ensuring + // all related requests go to a single server. + rpc ServerReflectionInfo(stream ServerReflectionRequest) + returns (stream ServerReflectionResponse); +} + +// The message sent by the client when calling ServerReflectionInfo method. +message ServerReflectionRequest { + string host = 1; + // To use reflection service, the client should set one of the following + // fields in message_request. The server distinguishes requests by their + // defined field and then handles them using corresponding methods. + oneof message_request { + // Find a proto file by the file name. + string file_by_filename = 3; + + // Find the proto file that declares the given fully-qualified symbol name. + // This field should be a fully-qualified symbol name + // (e.g. <package>.<service>[.<method>] or <package>.<type>). + string file_containing_symbol = 4; + + // Find the proto file which defines an extension extending the given + // message type with the given field number. + ExtensionRequest file_containing_extension = 5; + + // Finds the tag numbers used by all known extensions of extendee_type, and + // appends them to ExtensionNumberResponse in an undefined order. + // Its corresponding method is best-effort: it's not guaranteed that the + // reflection service will implement this method, and it's not guaranteed + // that this method will provide all extensions. Returns + // StatusCode::UNIMPLEMENTED if it's not implemented. + // This field should be a fully-qualified type name. The format is + // <package>.<type> + string all_extension_numbers_of_type = 6; + + // List the full names of registered services. The content will not be + // checked. + string list_services = 7; + } +} + +// The type name and extension number sent by the client when requesting +// file_containing_extension. +message ExtensionRequest { + // Fully-qualified type name. The format should be <package>.<type> + string containing_type = 1; + int32 extension_number = 2; +} + +// The message sent by the server to answer ServerReflectionInfo method. +message ServerReflectionResponse { + string valid_host = 1; + ServerReflectionRequest original_request = 2; + // The server set one of the following fields accroding to the message_request + // in the request. + oneof message_response { + // This message is used to answer file_by_filename, file_containing_symbol, + // file_containing_extension requests with transitive dependencies. As + // the repeated label is not allowed in oneof fields, we use a + // FileDescriptorResponse message to encapsulate the repeated fields. + // The reflection service is allowed to avoid sending FileDescriptorProtos + // that were previously sent in response to earlier requests in the stream. + FileDescriptorResponse file_descriptor_response = 4; + + // This message is used to answer all_extension_numbers_of_type requst. + ExtensionNumberResponse all_extension_numbers_response = 5; + + // This message is used to answer list_services request. + ListServiceResponse list_services_response = 6; + + // This message is used when an error occurs. + ErrorResponse error_response = 7; + } +} + +// Serialized FileDescriptorProto messages sent by the server answering +// a file_by_filename, file_containing_symbol, or file_containing_extension +// request. +message FileDescriptorResponse { + // Serialized FileDescriptorProto messages. We avoid taking a dependency on + // descriptor.proto, which uses proto2 only features, by making them opaque + // bytes instead. + repeated bytes file_descriptor_proto = 1; +} + +// A list of extension numbers sent by the server answering +// all_extension_numbers_of_type request. +message ExtensionNumberResponse { + // Full name of the base type, including the package name. The format + // is <package>.<type> + string base_type_name = 1; + repeated int32 extension_number = 2; +} + +// A list of ServiceResponse sent by the server answering list_services request. +message ListServiceResponse { + // The information of each service may be expanded in the future, so we use + // ServiceResponse message to encapsulate it. + repeated ServiceResponse service = 1; +} + +// The information of a single service used by ListServiceResponse to answer +// list_services request. +message ServiceResponse { + // Full name of a registered service, including its package name. The format + // is <package>.<service> + string name = 1; +} + +// The error code and error message sent by the server when an error occurs. +message ErrorResponse { + // This field uses the error codes defined in grpc::StatusCode. + int32 error_code = 1; + string error_message = 2; +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.pb.go new file mode 100644 index 0000000..0b503d6 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.pb.go @@ -0,0 +1,78 @@ +// Code generated by protoc-gen-go. +// source: proto2.proto +// DO NOT EDIT! + +/* +Package grpc_testing is a generated protocol buffer package. + +It is generated from these files: + proto2.proto + proto2_ext.proto + proto2_ext2.proto + test.proto + +It has these top-level messages: + ToBeExtended + Extension + AnotherExtension + SearchResponse + SearchRequest +*/ +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type ToBeExtended struct { + Foo *int32 `protobuf:"varint,1,req,name=foo" json:"foo,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ToBeExtended) Reset() { *m = ToBeExtended{} } +func (m *ToBeExtended) String() string { return proto.CompactTextString(m) } +func (*ToBeExtended) ProtoMessage() {} +func (*ToBeExtended) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +var extRange_ToBeExtended = []proto.ExtensionRange{ + {10, 30}, +} + +func (*ToBeExtended) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_ToBeExtended +} + +func (m *ToBeExtended) GetFoo() int32 { + if m != nil && m.Foo != nil { + return *m.Foo + } + return 0 +} + +func init() { + proto.RegisterType((*ToBeExtended)(nil), "grpc.testing.ToBeExtended") +} + +func init() { proto.RegisterFile("proto2.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 86 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x28, 0xca, 0x2f, + 0xc9, 0x37, 0xd2, 0x03, 0x53, 0x42, 0x3c, 0xe9, 0x45, 0x05, 0xc9, 0x7a, 0x25, 0xa9, 0xc5, 0x25, + 0x99, 0x79, 0xe9, 0x4a, 0x6a, 0x5c, 0x3c, 0x21, 0xf9, 0x4e, 0xa9, 0xae, 0x15, 0x25, 0xa9, 0x79, + 0x29, 0xa9, 0x29, 0x42, 0x02, 0x5c, 0xcc, 0x69, 0xf9, 0xf9, 0x12, 0x8c, 0x0a, 0x4c, 0x1a, 0xac, + 0x41, 0x20, 0xa6, 0x16, 0x0b, 0x07, 0x97, 0x80, 0x3c, 0x20, 0x00, 0x00, 0xff, 0xff, 0x74, 0x86, + 0x9c, 0x08, 0x44, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.proto b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.proto new file mode 100644 index 0000000..6b120f3 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.proto @@ -0,0 +1,8 @@ +syntax = "proto2"; + +package grpc.testing; + +message ToBeExtended { + required int32 foo = 1; + extensions 10 to 30; +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.pb.go new file mode 100644 index 0000000..dbd0942 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.pb.go @@ -0,0 +1,83 @@ +// Code generated by protoc-gen-go. +// source: proto2_ext.proto +// DO NOT EDIT! + +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type Extension struct { + Whatzit *int32 `protobuf:"varint,1,opt,name=whatzit" json:"whatzit,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Extension) Reset() { *m = Extension{} } +func (m *Extension) String() string { return proto.CompactTextString(m) } +func (*Extension) ProtoMessage() {} +func (*Extension) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Extension) GetWhatzit() int32 { + if m != nil && m.Whatzit != nil { + return *m.Whatzit + } + return 0 +} + +var E_Foo = &proto.ExtensionDesc{ + ExtendedType: (*ToBeExtended)(nil), + ExtensionType: (*int32)(nil), + Field: 13, + Name: "grpc.testing.foo", + Tag: "varint,13,opt,name=foo", + Filename: "proto2_ext.proto", +} + +var E_Bar = &proto.ExtensionDesc{ + ExtendedType: (*ToBeExtended)(nil), + ExtensionType: (*Extension)(nil), + Field: 17, + Name: "grpc.testing.bar", + Tag: "bytes,17,opt,name=bar", + Filename: "proto2_ext.proto", +} + +var E_Baz = &proto.ExtensionDesc{ + ExtendedType: (*ToBeExtended)(nil), + ExtensionType: (*SearchRequest)(nil), + Field: 19, + Name: "grpc.testing.baz", + Tag: "bytes,19,opt,name=baz", + Filename: "proto2_ext.proto", +} + +func init() { + proto.RegisterType((*Extension)(nil), "grpc.testing.Extension") + proto.RegisterExtension(E_Foo) + proto.RegisterExtension(E_Bar) + proto.RegisterExtension(E_Baz) +} + +func init() { proto.RegisterFile("proto2_ext.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 179 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0x28, 0x28, 0xca, 0x2f, + 0xc9, 0x37, 0x8a, 0x4f, 0xad, 0x28, 0xd1, 0x03, 0x33, 0x85, 0x78, 0xd2, 0x8b, 0x0a, 0x92, 0xf5, + 0x4a, 0x52, 0x8b, 0x4b, 0x32, 0xf3, 0xd2, 0xa5, 0x78, 0x20, 0xf2, 0x10, 0x39, 0x29, 0x2e, 0x90, + 0x30, 0x84, 0xad, 0xa4, 0xca, 0xc5, 0xe9, 0x5a, 0x51, 0x92, 0x9a, 0x57, 0x9c, 0x99, 0x9f, 0x27, + 0x24, 0xc1, 0xc5, 0x5e, 0x9e, 0x91, 0x58, 0x52, 0x95, 0x59, 0x22, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, + 0x1a, 0x04, 0xe3, 0x5a, 0xe9, 0x70, 0x31, 0xa7, 0xe5, 0xe7, 0x0b, 0x49, 0xe9, 0x21, 0x1b, 0xab, + 0x17, 0x92, 0xef, 0x94, 0x0a, 0xd6, 0x9d, 0x92, 0x9a, 0x22, 0xc1, 0x0b, 0xd6, 0x01, 0x52, 0x66, + 0xe5, 0xca, 0xc5, 0x9c, 0x94, 0x58, 0x84, 0x57, 0xb5, 0xa0, 0x02, 0xa3, 0x06, 0xb7, 0x91, 0x38, + 0xaa, 0x0a, 0xb8, 0x4b, 0x82, 0x40, 0xfa, 0xad, 0x3c, 0x41, 0xc6, 0x54, 0xe1, 0x35, 0x46, 0x18, + 0x6c, 0x8c, 0x34, 0xaa, 0x8a, 0xe0, 0xd4, 0xc4, 0xa2, 0xe4, 0x8c, 0xa0, 0xd4, 0xc2, 0xd2, 0xd4, + 0xe2, 0x12, 0x90, 0x51, 0x55, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x71, 0x6b, 0x94, 0x9f, 0x21, + 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.proto b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.proto new file mode 100644 index 0000000..b669141 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.proto @@ -0,0 +1,16 @@ +syntax = "proto2"; + +package grpc.testing; + +import "proto2.proto"; +import "test.proto"; + +extend ToBeExtended { + optional int32 foo = 13; + optional Extension bar = 17; + optional SearchRequest baz = 19; +} + +message Extension { + optional int32 whatzit = 1; +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.pb.go new file mode 100644 index 0000000..0aaec7c --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.pb.go @@ -0,0 +1,72 @@ +// Code generated by protoc-gen-go. +// source: proto2_ext2.proto +// DO NOT EDIT! + +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type AnotherExtension struct { + Whatchamacallit *int32 `protobuf:"varint,1,opt,name=whatchamacallit" json:"whatchamacallit,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AnotherExtension) Reset() { *m = AnotherExtension{} } +func (m *AnotherExtension) String() string { return proto.CompactTextString(m) } +func (*AnotherExtension) ProtoMessage() {} +func (*AnotherExtension) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *AnotherExtension) GetWhatchamacallit() int32 { + if m != nil && m.Whatchamacallit != nil { + return *m.Whatchamacallit + } + return 0 +} + +var E_Frob = &proto.ExtensionDesc{ + ExtendedType: (*ToBeExtended)(nil), + ExtensionType: (*string)(nil), + Field: 23, + Name: "grpc.testing.frob", + Tag: "bytes,23,opt,name=frob", + Filename: "proto2_ext2.proto", +} + +var E_Nitz = &proto.ExtensionDesc{ + ExtendedType: (*ToBeExtended)(nil), + ExtensionType: (*AnotherExtension)(nil), + Field: 29, + Name: "grpc.testing.nitz", + Tag: "bytes,29,opt,name=nitz", + Filename: "proto2_ext2.proto", +} + +func init() { + proto.RegisterType((*AnotherExtension)(nil), "grpc.testing.AnotherExtension") + proto.RegisterExtension(E_Frob) + proto.RegisterExtension(E_Nitz) +} + +func init() { proto.RegisterFile("proto2_ext2.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 165 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0x2c, 0x28, 0xca, 0x2f, + 0xc9, 0x37, 0x8a, 0x4f, 0xad, 0x28, 0x31, 0xd2, 0x03, 0xb3, 0x85, 0x78, 0xd2, 0x8b, 0x0a, 0x92, + 0xf5, 0x4a, 0x52, 0x8b, 0x4b, 0x32, 0xf3, 0xd2, 0xa5, 0x78, 0x20, 0x0a, 0x20, 0x72, 0x4a, 0x36, + 0x5c, 0x02, 0x8e, 0x79, 0xf9, 0x25, 0x19, 0xa9, 0x45, 0xae, 0x15, 0x25, 0xa9, 0x79, 0xc5, 0x99, + 0xf9, 0x79, 0x42, 0x1a, 0x5c, 0xfc, 0xe5, 0x19, 0x89, 0x25, 0xc9, 0x19, 0x89, 0xb9, 0x89, 0xc9, + 0x89, 0x39, 0x39, 0x99, 0x25, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0xe8, 0xc2, 0x56, 0x7a, + 0x5c, 0x2c, 0x69, 0x45, 0xf9, 0x49, 0x42, 0x52, 0x7a, 0xc8, 0x56, 0xe8, 0x85, 0xe4, 0x3b, 0xa5, + 0x82, 0x8d, 0x4b, 0x49, 0x4d, 0x91, 0x10, 0x57, 0x60, 0xd4, 0xe0, 0x0c, 0x02, 0xab, 0xb3, 0xf2, + 0xe3, 0x62, 0xc9, 0xcb, 0x2c, 0xa9, 0xc2, 0xab, 0x5e, 0x56, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x0e, + 0x55, 0x05, 0xba, 0x1b, 0x83, 0xc0, 0xe6, 0x00, 0x02, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x7e, 0x0d, + 0x26, 0xed, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.proto b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.proto new file mode 100644 index 0000000..16fa69e --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.proto @@ -0,0 +1,14 @@ +syntax = "proto2"; + +package grpc.testing; + +import "proto2.proto"; + +extend ToBeExtended { + optional string frob = 23; + optional AnotherExtension nitz = 29; +} + +message AnotherExtension { + optional int32 whatchamacallit = 1; +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/test.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testing/test.pb.go new file mode 100644 index 0000000..27d71fc --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/test.pb.go @@ -0,0 +1,248 @@ +// Code generated by protoc-gen-go. +// source: test.proto +// DO NOT EDIT! + +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type SearchResponse struct { + Results []*SearchResponse_Result `protobuf:"bytes,1,rep,name=results" json:"results,omitempty"` +} + +func (m *SearchResponse) Reset() { *m = SearchResponse{} } +func (m *SearchResponse) String() string { return proto.CompactTextString(m) } +func (*SearchResponse) ProtoMessage() {} +func (*SearchResponse) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *SearchResponse) GetResults() []*SearchResponse_Result { + if m != nil { + return m.Results + } + return nil +} + +type SearchResponse_Result struct { + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + Snippets []string `protobuf:"bytes,3,rep,name=snippets" json:"snippets,omitempty"` +} + +func (m *SearchResponse_Result) Reset() { *m = SearchResponse_Result{} } +func (m *SearchResponse_Result) String() string { return proto.CompactTextString(m) } +func (*SearchResponse_Result) ProtoMessage() {} +func (*SearchResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +func (m *SearchResponse_Result) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *SearchResponse_Result) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *SearchResponse_Result) GetSnippets() []string { + if m != nil { + return m.Snippets + } + return nil +} + +type SearchRequest struct { + Query string `protobuf:"bytes,1,opt,name=query" json:"query,omitempty"` +} + +func (m *SearchRequest) Reset() { *m = SearchRequest{} } +func (m *SearchRequest) String() string { return proto.CompactTextString(m) } +func (*SearchRequest) ProtoMessage() {} +func (*SearchRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *SearchRequest) GetQuery() string { + if m != nil { + return m.Query + } + return "" +} + +func init() { + proto.RegisterType((*SearchResponse)(nil), "grpc.testing.SearchResponse") + proto.RegisterType((*SearchResponse_Result)(nil), "grpc.testing.SearchResponse.Result") + proto.RegisterType((*SearchRequest)(nil), "grpc.testing.SearchRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for SearchService service + +type SearchServiceClient interface { + Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error) + StreamingSearch(ctx context.Context, opts ...grpc.CallOption) (SearchService_StreamingSearchClient, error) +} + +type searchServiceClient struct { + cc *grpc.ClientConn +} + +func NewSearchServiceClient(cc *grpc.ClientConn) SearchServiceClient { + return &searchServiceClient{cc} +} + +func (c *searchServiceClient) Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error) { + out := new(SearchResponse) + err := grpc.Invoke(ctx, "/grpc.testing.SearchService/Search", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *searchServiceClient) StreamingSearch(ctx context.Context, opts ...grpc.CallOption) (SearchService_StreamingSearchClient, error) { + stream, err := grpc.NewClientStream(ctx, &_SearchService_serviceDesc.Streams[0], c.cc, "/grpc.testing.SearchService/StreamingSearch", opts...) + if err != nil { + return nil, err + } + x := &searchServiceStreamingSearchClient{stream} + return x, nil +} + +type SearchService_StreamingSearchClient interface { + Send(*SearchRequest) error + Recv() (*SearchResponse, error) + grpc.ClientStream +} + +type searchServiceStreamingSearchClient struct { + grpc.ClientStream +} + +func (x *searchServiceStreamingSearchClient) Send(m *SearchRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *searchServiceStreamingSearchClient) Recv() (*SearchResponse, error) { + m := new(SearchResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for SearchService service + +type SearchServiceServer interface { + Search(context.Context, *SearchRequest) (*SearchResponse, error) + StreamingSearch(SearchService_StreamingSearchServer) error +} + +func RegisterSearchServiceServer(s *grpc.Server, srv SearchServiceServer) { + s.RegisterService(&_SearchService_serviceDesc, srv) +} + +func _SearchService_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SearchServiceServer).Search(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.SearchService/Search", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SearchServiceServer).Search(ctx, req.(*SearchRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SearchService_StreamingSearch_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SearchServiceServer).StreamingSearch(&searchServiceStreamingSearchServer{stream}) +} + +type SearchService_StreamingSearchServer interface { + Send(*SearchResponse) error + Recv() (*SearchRequest, error) + grpc.ServerStream +} + +type searchServiceStreamingSearchServer struct { + grpc.ServerStream +} + +func (x *searchServiceStreamingSearchServer) Send(m *SearchResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *searchServiceStreamingSearchServer) Recv() (*SearchRequest, error) { + m := new(SearchRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _SearchService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testing.SearchService", + HandlerType: (*SearchServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Search", + Handler: _SearchService_Search_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingSearch", + Handler: _SearchService_StreamingSearch_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "test.proto", +} + +func init() { proto.RegisterFile("test.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 231 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x91, 0xbd, 0x4a, 0xc5, 0x40, + 0x10, 0x85, 0x59, 0x83, 0xd1, 0x3b, 0xfe, 0x32, 0x58, 0x84, 0x68, 0x11, 0xae, 0x08, 0xa9, 0x16, + 0xb9, 0xd6, 0x56, 0xb6, 0x16, 0xb2, 0x79, 0x82, 0x6b, 0x18, 0xe2, 0x42, 0x4c, 0x36, 0x33, 0x13, + 0xc1, 0x87, 0xb1, 0xf5, 0x39, 0x25, 0x59, 0x23, 0x0a, 0x62, 0x63, 0xb7, 0xe7, 0xe3, 0xcc, 0xb7, + 0xbb, 0x0c, 0x80, 0x92, 0xa8, 0x0d, 0xdc, 0x6b, 0x8f, 0x87, 0x0d, 0x87, 0xda, 0x4e, 0xc0, 0x77, + 0xcd, 0xfa, 0xcd, 0xc0, 0x71, 0x45, 0x5b, 0xae, 0x9f, 0x1c, 0x49, 0xe8, 0x3b, 0x21, 0xbc, 0x85, + 0x3d, 0x26, 0x19, 0x5b, 0x95, 0xcc, 0x14, 0x49, 0x79, 0xb0, 0xb9, 0xb4, 0xdf, 0x47, 0xec, 0xcf, + 0xba, 0x75, 0x73, 0xd7, 0x2d, 0x33, 0xf9, 0x3d, 0xa4, 0x11, 0xe1, 0x29, 0x24, 0x23, 0xb7, 0x99, + 0x29, 0x4c, 0xb9, 0x72, 0xd3, 0x11, 0xcf, 0x60, 0x57, 0xbd, 0xb6, 0x94, 0xed, 0xcc, 0x2c, 0x06, + 0xcc, 0x61, 0x5f, 0x3a, 0x1f, 0x02, 0xa9, 0x64, 0x49, 0x91, 0x94, 0x2b, 0xf7, 0x95, 0xd7, 0x57, + 0x70, 0xb4, 0xdc, 0x37, 0x8c, 0x24, 0x3a, 0x29, 0x86, 0x91, 0xf8, 0xf5, 0x53, 0x1b, 0xc3, 0xe6, + 0xdd, 0x2c, 0xbd, 0x8a, 0xf8, 0xc5, 0xd7, 0x84, 0x77, 0x90, 0x46, 0x80, 0xe7, 0xbf, 0x3f, 0x7f, + 0xd6, 0xe5, 0x17, 0x7f, 0xfd, 0x0d, 0x1f, 0xe0, 0xa4, 0x52, 0xa6, 0xed, 0xb3, 0xef, 0x9a, 0x7f, + 0xdb, 0x4a, 0x73, 0x6d, 0x1e, 0xd3, 0x79, 0x09, 0x37, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x20, + 0xd6, 0x09, 0xb8, 0x92, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/test.proto b/vendor/google.golang.org/grpc/reflection/grpc_testing/test.proto new file mode 100644 index 0000000..d74d0fc --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/test.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; + +package grpc.testing; + +message SearchResponse { + message Result { + string url = 1; + string title = 2; + repeated string snippets = 3; + } + repeated Result results = 1; +} + +message SearchRequest { + string query = 1; +} + +service SearchService { + rpc Search(SearchRequest) returns (SearchResponse); + rpc StreamingSearch(stream SearchRequest) returns (stream SearchResponse); +} diff --git a/vendor/google.golang.org/grpc/reflection/serverreflection.go b/vendor/google.golang.org/grpc/reflection/serverreflection.go new file mode 100644 index 0000000..f28304d --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/serverreflection.go @@ -0,0 +1,394 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* +Package reflection implements server reflection service. + +The service implemented is defined in: +https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1alpha/reflection.proto. + +To register server reflection on a gRPC server: + import "google.golang.org/grpc/reflection" + + s := grpc.NewServer() + pb.RegisterYourOwnServer(s, &server{}) + + // Register reflection service on gRPC server. + reflection.Register(s) + + s.Serve(lis) + +*/ +package reflection // import "google.golang.org/grpc/reflection" + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "reflect" + "strings" + + "github.com/golang/protobuf/proto" + dpb "github.com/golang/protobuf/protoc-gen-go/descriptor" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" +) + +type serverReflectionServer struct { + s *grpc.Server + // TODO add more cache if necessary + serviceInfo map[string]grpc.ServiceInfo // cache for s.GetServiceInfo() +} + +// Register registers the server reflection service on the given gRPC server. +func Register(s *grpc.Server) { + rpb.RegisterServerReflectionServer(s, &serverReflectionServer{ + s: s, + }) +} + +// protoMessage is used for type assertion on proto messages. +// Generated proto message implements function Descriptor(), but Descriptor() +// is not part of interface proto.Message. This interface is needed to +// call Descriptor(). +type protoMessage interface { + Descriptor() ([]byte, []int) +} + +// fileDescForType gets the file descriptor for the given type. +// The given type should be a proto message. +func (s *serverReflectionServer) fileDescForType(st reflect.Type) (*dpb.FileDescriptorProto, error) { + m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(protoMessage) + if !ok { + return nil, fmt.Errorf("failed to create message from type: %v", st) + } + enc, _ := m.Descriptor() + + return s.decodeFileDesc(enc) +} + +// decodeFileDesc does decompression and unmarshalling on the given +// file descriptor byte slice. +func (s *serverReflectionServer) decodeFileDesc(enc []byte) (*dpb.FileDescriptorProto, error) { + raw, err := decompress(enc) + if err != nil { + return nil, fmt.Errorf("failed to decompress enc: %v", err) + } + + fd := new(dpb.FileDescriptorProto) + if err := proto.Unmarshal(raw, fd); err != nil { + return nil, fmt.Errorf("bad descriptor: %v", err) + } + return fd, nil +} + +// decompress does gzip decompression. +func decompress(b []byte) ([]byte, error) { + r, err := gzip.NewReader(bytes.NewReader(b)) + if err != nil { + return nil, fmt.Errorf("bad gzipped descriptor: %v", err) + } + out, err := ioutil.ReadAll(r) + if err != nil { + return nil, fmt.Errorf("bad gzipped descriptor: %v", err) + } + return out, nil +} + +func (s *serverReflectionServer) typeForName(name string) (reflect.Type, error) { + pt := proto.MessageType(name) + if pt == nil { + return nil, fmt.Errorf("unknown type: %q", name) + } + st := pt.Elem() + + return st, nil +} + +func (s *serverReflectionServer) fileDescContainingExtension(st reflect.Type, ext int32) (*dpb.FileDescriptorProto, error) { + m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message) + if !ok { + return nil, fmt.Errorf("failed to create message from type: %v", st) + } + + var extDesc *proto.ExtensionDesc + for id, desc := range proto.RegisteredExtensions(m) { + if id == ext { + extDesc = desc + break + } + } + + if extDesc == nil { + return nil, fmt.Errorf("failed to find registered extension for extension number %v", ext) + } + + return s.decodeFileDesc(proto.FileDescriptor(extDesc.Filename)) +} + +func (s *serverReflectionServer) allExtensionNumbersForType(st reflect.Type) ([]int32, error) { + m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message) + if !ok { + return nil, fmt.Errorf("failed to create message from type: %v", st) + } + + exts := proto.RegisteredExtensions(m) + out := make([]int32, 0, len(exts)) + for id := range exts { + out = append(out, id) + } + return out, nil +} + +// fileDescEncodingByFilename finds the file descriptor for given filename, +// does marshalling on it and returns the marshalled result. +func (s *serverReflectionServer) fileDescEncodingByFilename(name string) ([]byte, error) { + enc := proto.FileDescriptor(name) + if enc == nil { + return nil, fmt.Errorf("unknown file: %v", name) + } + fd, err := s.decodeFileDesc(enc) + if err != nil { + return nil, err + } + return proto.Marshal(fd) +} + +// serviceMetadataForSymbol finds the metadata for name in s.serviceInfo. +// name should be a service name or a method name. +func (s *serverReflectionServer) serviceMetadataForSymbol(name string) (interface{}, error) { + if s.serviceInfo == nil { + s.serviceInfo = s.s.GetServiceInfo() + } + + // Check if it's a service name. + if info, ok := s.serviceInfo[name]; ok { + return info.Metadata, nil + } + + // Check if it's a method name. + pos := strings.LastIndex(name, ".") + // Not a valid method name. + if pos == -1 { + return nil, fmt.Errorf("unknown symbol: %v", name) + } + + info, ok := s.serviceInfo[name[:pos]] + // Substring before last "." is not a service name. + if !ok { + return nil, fmt.Errorf("unknown symbol: %v", name) + } + + // Search the method name in info.Methods. + var found bool + for _, m := range info.Methods { + if m.Name == name[pos+1:] { + found = true + break + } + } + if found { + return info.Metadata, nil + } + + return nil, fmt.Errorf("unknown symbol: %v", name) +} + +// fileDescEncodingContainingSymbol finds the file descriptor containing the given symbol, +// does marshalling on it and returns the marshalled result. +// The given symbol can be a type, a service or a method. +func (s *serverReflectionServer) fileDescEncodingContainingSymbol(name string) ([]byte, error) { + var ( + fd *dpb.FileDescriptorProto + ) + // Check if it's a type name. + if st, err := s.typeForName(name); err == nil { + fd, err = s.fileDescForType(st) + if err != nil { + return nil, err + } + } else { // Check if it's a service name or a method name. + meta, err := s.serviceMetadataForSymbol(name) + + // Metadata not found. + if err != nil { + return nil, err + } + + // Metadata not valid. + fileNameForMeta, ok := meta.(string) + if !ok { + return nil, fmt.Errorf("invalid file descriptor for symbol: %v", name) + } + + enc := proto.FileDescriptor(fileNameForMeta) + fd, err = s.decodeFileDesc(enc) + if err != nil { + return nil, err + } + } + + return proto.Marshal(fd) +} + +// fileDescEncodingContainingExtension finds the file descriptor containing given extension, +// does marshalling on it and returns the marshalled result. +func (s *serverReflectionServer) fileDescEncodingContainingExtension(typeName string, extNum int32) ([]byte, error) { + st, err := s.typeForName(typeName) + if err != nil { + return nil, err + } + fd, err := s.fileDescContainingExtension(st, extNum) + if err != nil { + return nil, err + } + return proto.Marshal(fd) +} + +// allExtensionNumbersForTypeName returns all extension numbers for the given type. +func (s *serverReflectionServer) allExtensionNumbersForTypeName(name string) ([]int32, error) { + st, err := s.typeForName(name) + if err != nil { + return nil, err + } + extNums, err := s.allExtensionNumbersForType(st) + if err != nil { + return nil, err + } + return extNums, nil +} + +// ServerReflectionInfo is the reflection service handler. +func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflection_ServerReflectionInfoServer) error { + for { + in, err := stream.Recv() + if err == io.EOF { + return nil + } + if err != nil { + return err + } + + out := &rpb.ServerReflectionResponse{ + ValidHost: in.Host, + OriginalRequest: in, + } + switch req := in.MessageRequest.(type) { + case *rpb.ServerReflectionRequest_FileByFilename: + b, err := s.fileDescEncodingByFilename(req.FileByFilename) + if err != nil { + out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &rpb.ErrorResponse{ + ErrorCode: int32(codes.NotFound), + ErrorMessage: err.Error(), + }, + } + } else { + out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{ + FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}, + } + } + case *rpb.ServerReflectionRequest_FileContainingSymbol: + b, err := s.fileDescEncodingContainingSymbol(req.FileContainingSymbol) + if err != nil { + out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &rpb.ErrorResponse{ + ErrorCode: int32(codes.NotFound), + ErrorMessage: err.Error(), + }, + } + } else { + out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{ + FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}, + } + } + case *rpb.ServerReflectionRequest_FileContainingExtension: + typeName := req.FileContainingExtension.ContainingType + extNum := req.FileContainingExtension.ExtensionNumber + b, err := s.fileDescEncodingContainingExtension(typeName, extNum) + if err != nil { + out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &rpb.ErrorResponse{ + ErrorCode: int32(codes.NotFound), + ErrorMessage: err.Error(), + }, + } + } else { + out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{ + FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}, + } + } + case *rpb.ServerReflectionRequest_AllExtensionNumbersOfType: + extNums, err := s.allExtensionNumbersForTypeName(req.AllExtensionNumbersOfType) + if err != nil { + out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &rpb.ErrorResponse{ + ErrorCode: int32(codes.NotFound), + ErrorMessage: err.Error(), + }, + } + } else { + out.MessageResponse = &rpb.ServerReflectionResponse_AllExtensionNumbersResponse{ + AllExtensionNumbersResponse: &rpb.ExtensionNumberResponse{ + BaseTypeName: req.AllExtensionNumbersOfType, + ExtensionNumber: extNums, + }, + } + } + case *rpb.ServerReflectionRequest_ListServices: + if s.serviceInfo == nil { + s.serviceInfo = s.s.GetServiceInfo() + } + serviceResponses := make([]*rpb.ServiceResponse, 0, len(s.serviceInfo)) + for n := range s.serviceInfo { + serviceResponses = append(serviceResponses, &rpb.ServiceResponse{ + Name: n, + }) + } + out.MessageResponse = &rpb.ServerReflectionResponse_ListServicesResponse{ + ListServicesResponse: &rpb.ListServiceResponse{ + Service: serviceResponses, + }, + } + default: + return grpc.Errorf(codes.InvalidArgument, "invalid MessageRequest: %v", in.MessageRequest) + } + + if err := stream.Send(out); err != nil { + return err + } + } +} diff --git a/vendor/google.golang.org/grpc/reflection/serverreflection_test.go b/vendor/google.golang.org/grpc/reflection/serverreflection_test.go new file mode 100644 index 0000000..daef8ff --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/serverreflection_test.go @@ -0,0 +1,506 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package reflection + +import ( + "fmt" + "net" + "reflect" + "sort" + "testing" + + "github.com/golang/protobuf/proto" + dpb "github.com/golang/protobuf/protoc-gen-go/descriptor" + "golang.org/x/net/context" + "google.golang.org/grpc" + rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" + pb "google.golang.org/grpc/reflection/grpc_testing" +) + +var ( + s = &serverReflectionServer{} + // fileDescriptor of each test proto file. + fdTest *dpb.FileDescriptorProto + fdProto2 *dpb.FileDescriptorProto + fdProto2Ext *dpb.FileDescriptorProto + fdProto2Ext2 *dpb.FileDescriptorProto + // fileDescriptor marshalled. + fdTestByte []byte + fdProto2Byte []byte + fdProto2ExtByte []byte + fdProto2Ext2Byte []byte +) + +func loadFileDesc(filename string) (*dpb.FileDescriptorProto, []byte) { + enc := proto.FileDescriptor(filename) + if enc == nil { + panic(fmt.Sprintf("failed to find fd for file: %v", filename)) + } + fd, err := s.decodeFileDesc(enc) + if err != nil { + panic(fmt.Sprintf("failed to decode enc: %v", err)) + } + b, err := proto.Marshal(fd) + if err != nil { + panic(fmt.Sprintf("failed to marshal fd: %v", err)) + } + return fd, b +} + +func init() { + fdTest, fdTestByte = loadFileDesc("test.proto") + fdProto2, fdProto2Byte = loadFileDesc("proto2.proto") + fdProto2Ext, fdProto2ExtByte = loadFileDesc("proto2_ext.proto") + fdProto2Ext2, fdProto2Ext2Byte = loadFileDesc("proto2_ext2.proto") +} + +func TestFileDescForType(t *testing.T) { + for _, test := range []struct { + st reflect.Type + wantFd *dpb.FileDescriptorProto + }{ + {reflect.TypeOf(pb.SearchResponse_Result{}), fdTest}, + {reflect.TypeOf(pb.ToBeExtended{}), fdProto2}, + } { + fd, err := s.fileDescForType(test.st) + if err != nil || !reflect.DeepEqual(fd, test.wantFd) { + t.Errorf("fileDescForType(%q) = %q, %v, want %q, <nil>", test.st, fd, err, test.wantFd) + } + } +} + +func TestTypeForName(t *testing.T) { + for _, test := range []struct { + name string + want reflect.Type + }{ + {"grpc.testing.SearchResponse", reflect.TypeOf(pb.SearchResponse{})}, + } { + r, err := s.typeForName(test.name) + if err != nil || r != test.want { + t.Errorf("typeForName(%q) = %q, %v, want %q, <nil>", test.name, r, err, test.want) + } + } +} + +func TestTypeForNameNotFound(t *testing.T) { + for _, test := range []string{ + "grpc.testing.not_exiting", + } { + _, err := s.typeForName(test) + if err == nil { + t.Errorf("typeForName(%q) = _, %v, want _, <non-nil>", test, err) + } + } +} + +func TestFileDescContainingExtension(t *testing.T) { + for _, test := range []struct { + st reflect.Type + extNum int32 + want *dpb.FileDescriptorProto + }{ + {reflect.TypeOf(pb.ToBeExtended{}), 13, fdProto2Ext}, + {reflect.TypeOf(pb.ToBeExtended{}), 17, fdProto2Ext}, + {reflect.TypeOf(pb.ToBeExtended{}), 19, fdProto2Ext}, + {reflect.TypeOf(pb.ToBeExtended{}), 23, fdProto2Ext2}, + {reflect.TypeOf(pb.ToBeExtended{}), 29, fdProto2Ext2}, + } { + fd, err := s.fileDescContainingExtension(test.st, test.extNum) + if err != nil || !reflect.DeepEqual(fd, test.want) { + t.Errorf("fileDescContainingExtension(%q) = %q, %v, want %q, <nil>", test.st, fd, err, test.want) + } + } +} + +// intArray is used to sort []int32 +type intArray []int32 + +func (s intArray) Len() int { return len(s) } +func (s intArray) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s intArray) Less(i, j int) bool { return s[i] < s[j] } + +func TestAllExtensionNumbersForType(t *testing.T) { + for _, test := range []struct { + st reflect.Type + want []int32 + }{ + {reflect.TypeOf(pb.ToBeExtended{}), []int32{13, 17, 19, 23, 29}}, + } { + r, err := s.allExtensionNumbersForType(test.st) + sort.Sort(intArray(r)) + if err != nil || !reflect.DeepEqual(r, test.want) { + t.Errorf("allExtensionNumbersForType(%q) = %v, %v, want %v, <nil>", test.st, r, err, test.want) + } + } +} + +// Do end2end tests. + +type server struct{} + +func (s *server) Search(ctx context.Context, in *pb.SearchRequest) (*pb.SearchResponse, error) { + return &pb.SearchResponse{}, nil +} + +func (s *server) StreamingSearch(stream pb.SearchService_StreamingSearchServer) error { + return nil +} + +func TestReflectionEnd2end(t *testing.T) { + // Start server. + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("failed to listen: %v", err) + } + s := grpc.NewServer() + pb.RegisterSearchServiceServer(s, &server{}) + // Register reflection service on s. + Register(s) + go s.Serve(lis) + + // Create client. + conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure()) + if err != nil { + t.Fatalf("cannot connect to server: %v", err) + } + defer conn.Close() + + c := rpb.NewServerReflectionClient(conn) + stream, err := c.ServerReflectionInfo(context.Background()) + if err != nil { + t.Fatalf("cannot get ServerReflectionInfo: %v", err) + } + + testFileByFilename(t, stream) + testFileByFilenameError(t, stream) + testFileContainingSymbol(t, stream) + testFileContainingSymbolError(t, stream) + testFileContainingExtension(t, stream) + testFileContainingExtensionError(t, stream) + testAllExtensionNumbersOfType(t, stream) + testAllExtensionNumbersOfTypeError(t, stream) + testListServices(t, stream) + + s.Stop() +} + +func testFileByFilename(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + for _, test := range []struct { + filename string + want []byte + }{ + {"test.proto", fdTestByte}, + {"proto2.proto", fdProto2Byte}, + {"proto2_ext.proto", fdProto2ExtByte}, + } { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_FileByFilename{ + FileByFilename: test.filename, + }, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_FileDescriptorResponse: + if !reflect.DeepEqual(r.GetFileDescriptorResponse().FileDescriptorProto[0], test.want) { + t.Errorf("FileByFilename(%v)\nreceived: %q,\nwant: %q", test.filename, r.GetFileDescriptorResponse().FileDescriptorProto[0], test.want) + } + default: + t.Errorf("FileByFilename(%v) = %v, want type <ServerReflectionResponse_FileDescriptorResponse>", test.filename, r.MessageResponse) + } + } +} + +func testFileByFilenameError(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + for _, test := range []string{ + "test.poto", + "proo2.proto", + "proto2_et.proto", + } { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_FileByFilename{ + FileByFilename: test, + }, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_ErrorResponse: + default: + t.Errorf("FileByFilename(%v) = %v, want type <ServerReflectionResponse_ErrorResponse>", test, r.MessageResponse) + } + } +} + +func testFileContainingSymbol(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + for _, test := range []struct { + symbol string + want []byte + }{ + {"grpc.testing.SearchService", fdTestByte}, + {"grpc.testing.SearchService.Search", fdTestByte}, + {"grpc.testing.SearchService.StreamingSearch", fdTestByte}, + {"grpc.testing.SearchResponse", fdTestByte}, + {"grpc.testing.ToBeExtended", fdProto2Byte}, + } { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_FileContainingSymbol{ + FileContainingSymbol: test.symbol, + }, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_FileDescriptorResponse: + if !reflect.DeepEqual(r.GetFileDescriptorResponse().FileDescriptorProto[0], test.want) { + t.Errorf("FileContainingSymbol(%v)\nreceived: %q,\nwant: %q", test.symbol, r.GetFileDescriptorResponse().FileDescriptorProto[0], test.want) + } + default: + t.Errorf("FileContainingSymbol(%v) = %v, want type <ServerReflectionResponse_FileDescriptorResponse>", test.symbol, r.MessageResponse) + } + } +} + +func testFileContainingSymbolError(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + for _, test := range []string{ + "grpc.testing.SerchService", + "grpc.testing.SearchService.SearchE", + "grpc.tesing.SearchResponse", + "gpc.testing.ToBeExtended", + } { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_FileContainingSymbol{ + FileContainingSymbol: test, + }, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_ErrorResponse: + default: + t.Errorf("FileContainingSymbol(%v) = %v, want type <ServerReflectionResponse_ErrorResponse>", test, r.MessageResponse) + } + } +} + +func testFileContainingExtension(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + for _, test := range []struct { + typeName string + extNum int32 + want []byte + }{ + {"grpc.testing.ToBeExtended", 13, fdProto2ExtByte}, + {"grpc.testing.ToBeExtended", 17, fdProto2ExtByte}, + {"grpc.testing.ToBeExtended", 19, fdProto2ExtByte}, + {"grpc.testing.ToBeExtended", 23, fdProto2Ext2Byte}, + {"grpc.testing.ToBeExtended", 29, fdProto2Ext2Byte}, + } { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_FileContainingExtension{ + FileContainingExtension: &rpb.ExtensionRequest{ + ContainingType: test.typeName, + ExtensionNumber: test.extNum, + }, + }, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_FileDescriptorResponse: + if !reflect.DeepEqual(r.GetFileDescriptorResponse().FileDescriptorProto[0], test.want) { + t.Errorf("FileContainingExtension(%v, %v)\nreceived: %q,\nwant: %q", test.typeName, test.extNum, r.GetFileDescriptorResponse().FileDescriptorProto[0], test.want) + } + default: + t.Errorf("FileContainingExtension(%v, %v) = %v, want type <ServerReflectionResponse_FileDescriptorResponse>", test.typeName, test.extNum, r.MessageResponse) + } + } +} + +func testFileContainingExtensionError(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + for _, test := range []struct { + typeName string + extNum int32 + }{ + {"grpc.testing.ToBExtended", 17}, + {"grpc.testing.ToBeExtended", 15}, + } { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_FileContainingExtension{ + FileContainingExtension: &rpb.ExtensionRequest{ + ContainingType: test.typeName, + ExtensionNumber: test.extNum, + }, + }, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_ErrorResponse: + default: + t.Errorf("FileContainingExtension(%v, %v) = %v, want type <ServerReflectionResponse_FileDescriptorResponse>", test.typeName, test.extNum, r.MessageResponse) + } + } +} + +func testAllExtensionNumbersOfType(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + for _, test := range []struct { + typeName string + want []int32 + }{ + {"grpc.testing.ToBeExtended", []int32{13, 17, 19, 23, 29}}, + } { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_AllExtensionNumbersOfType{ + AllExtensionNumbersOfType: test.typeName, + }, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_AllExtensionNumbersResponse: + extNum := r.GetAllExtensionNumbersResponse().ExtensionNumber + sort.Sort(intArray(extNum)) + if r.GetAllExtensionNumbersResponse().BaseTypeName != test.typeName || + !reflect.DeepEqual(extNum, test.want) { + t.Errorf("AllExtensionNumbersOfType(%v)\nreceived: %v,\nwant: {%q %v}", r.GetAllExtensionNumbersResponse(), test.typeName, test.typeName, test.want) + } + default: + t.Errorf("AllExtensionNumbersOfType(%v) = %v, want type <ServerReflectionResponse_AllExtensionNumbersResponse>", test.typeName, r.MessageResponse) + } + } +} + +func testAllExtensionNumbersOfTypeError(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + for _, test := range []string{ + "grpc.testing.ToBeExtendedE", + } { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_AllExtensionNumbersOfType{ + AllExtensionNumbersOfType: test, + }, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_ErrorResponse: + default: + t.Errorf("AllExtensionNumbersOfType(%v) = %v, want type <ServerReflectionResponse_ErrorResponse>", test, r.MessageResponse) + } + } +} + +func testListServices(t *testing.T, stream rpb.ServerReflection_ServerReflectionInfoClient) { + if err := stream.Send(&rpb.ServerReflectionRequest{ + MessageRequest: &rpb.ServerReflectionRequest_ListServices{}, + }); err != nil { + t.Fatalf("failed to send request: %v", err) + } + r, err := stream.Recv() + if err != nil { + // io.EOF is not ok. + t.Fatalf("failed to recv response: %v", err) + } + + switch r.MessageResponse.(type) { + case *rpb.ServerReflectionResponse_ListServicesResponse: + services := r.GetListServicesResponse().Service + want := []string{"grpc.testing.SearchService", "grpc.reflection.v1alpha.ServerReflection"} + // Compare service names in response with want. + if len(services) != len(want) { + t.Errorf("= %v, want service names: %v", services, want) + } + m := make(map[string]int) + for _, e := range services { + m[e.Name]++ + } + for _, e := range want { + if m[e] > 0 { + m[e]-- + continue + } + t.Errorf("ListService\nreceived: %v,\nwant: %q", services, want) + } + default: + t.Errorf("ListServices = %v, want type <ServerReflectionResponse_ListServicesResponse>", r.MessageResponse) + } +} diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go new file mode 100644 index 0000000..73c3a96 --- /dev/null +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -0,0 +1,529 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "compress/gzip" + "encoding/binary" + "fmt" + "io" + "io/ioutil" + "math" + "os" + "time" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/stats" + "google.golang.org/grpc/transport" +) + +// Codec defines the interface gRPC uses to encode and decode messages. +type Codec interface { + // Marshal returns the wire format of v. + Marshal(v interface{}) ([]byte, error) + // Unmarshal parses the wire format into v. + Unmarshal(data []byte, v interface{}) error + // String returns the name of the Codec implementation. The returned + // string will be used as part of content type in transmission. + String() string +} + +// protoCodec is a Codec implementation with protobuf. It is the default codec for gRPC. +type protoCodec struct{} + +func (protoCodec) Marshal(v interface{}) ([]byte, error) { + return proto.Marshal(v.(proto.Message)) +} + +func (protoCodec) Unmarshal(data []byte, v interface{}) error { + return proto.Unmarshal(data, v.(proto.Message)) +} + +func (protoCodec) String() string { + return "proto" +} + +// Compressor defines the interface gRPC uses to compress a message. +type Compressor interface { + // Do compresses p into w. + Do(w io.Writer, p []byte) error + // Type returns the compression algorithm the Compressor uses. + Type() string +} + +// NewGZIPCompressor creates a Compressor based on GZIP. +func NewGZIPCompressor() Compressor { + return &gzipCompressor{} +} + +type gzipCompressor struct { +} + +func (c *gzipCompressor) Do(w io.Writer, p []byte) error { + z := gzip.NewWriter(w) + if _, err := z.Write(p); err != nil { + return err + } + return z.Close() +} + +func (c *gzipCompressor) Type() string { + return "gzip" +} + +// Decompressor defines the interface gRPC uses to decompress a message. +type Decompressor interface { + // Do reads the data from r and uncompress them. + Do(r io.Reader) ([]byte, error) + // Type returns the compression algorithm the Decompressor uses. + Type() string +} + +type gzipDecompressor struct { +} + +// NewGZIPDecompressor creates a Decompressor based on GZIP. +func NewGZIPDecompressor() Decompressor { + return &gzipDecompressor{} +} + +func (d *gzipDecompressor) Do(r io.Reader) ([]byte, error) { + z, err := gzip.NewReader(r) + if err != nil { + return nil, err + } + defer z.Close() + return ioutil.ReadAll(z) +} + +func (d *gzipDecompressor) Type() string { + return "gzip" +} + +// callInfo contains all related configuration and information about an RPC. +type callInfo struct { + failFast bool + headerMD metadata.MD + trailerMD metadata.MD + peer *peer.Peer + traceInfo traceInfo // in trace.go +} + +var defaultCallInfo = callInfo{failFast: true} + +// CallOption configures a Call before it starts or extracts information from +// a Call after it completes. +type CallOption interface { + // before is called before the call is sent to any server. If before + // returns a non-nil error, the RPC fails with that error. + before(*callInfo) error + + // after is called after the call has completed. after cannot return an + // error, so any failures should be reported via output parameters. + after(*callInfo) +} + +type beforeCall func(c *callInfo) error + +func (o beforeCall) before(c *callInfo) error { return o(c) } +func (o beforeCall) after(c *callInfo) {} + +type afterCall func(c *callInfo) + +func (o afterCall) before(c *callInfo) error { return nil } +func (o afterCall) after(c *callInfo) { o(c) } + +// Header returns a CallOptions that retrieves the header metadata +// for a unary RPC. +func Header(md *metadata.MD) CallOption { + return afterCall(func(c *callInfo) { + *md = c.headerMD + }) +} + +// Trailer returns a CallOptions that retrieves the trailer metadata +// for a unary RPC. +func Trailer(md *metadata.MD) CallOption { + return afterCall(func(c *callInfo) { + *md = c.trailerMD + }) +} + +// Peer returns a CallOption that retrieves peer information for a +// unary RPC. +func Peer(peer *peer.Peer) CallOption { + return afterCall(func(c *callInfo) { + *peer = *c.peer + }) +} + +// FailFast configures the action to take when an RPC is attempted on broken +// connections or unreachable servers. If failfast is true, the RPC will fail +// immediately. Otherwise, the RPC client will block the call until a +// connection is available (or the call is canceled or times out) and will retry +// the call if it fails due to a transient error. Please refer to +// https://github.com/grpc/grpc/blob/master/doc/fail_fast.md. Note: failFast is default to true. +func FailFast(failFast bool) CallOption { + return beforeCall(func(c *callInfo) error { + c.failFast = failFast + return nil + }) +} + +// The format of the payload: compressed or not? +type payloadFormat uint8 + +const ( + compressionNone payloadFormat = iota // no compression + compressionMade +) + +// parser reads complete gRPC messages from the underlying reader. +type parser struct { + // r is the underlying reader. + // See the comment on recvMsg for the permissible + // error types. + r io.Reader + + // The header of a gRPC message. Find more detail + // at http://www.grpc.io/docs/guides/wire.html. + header [5]byte +} + +// recvMsg reads a complete gRPC message from the stream. +// +// It returns the message and its payload (compression/encoding) +// format. The caller owns the returned msg memory. +// +// If there is an error, possible values are: +// * io.EOF, when no messages remain +// * io.ErrUnexpectedEOF +// * of type transport.ConnectionError +// * of type transport.StreamError +// No other error values or types must be returned, which also means +// that the underlying io.Reader must not return an incompatible +// error. +func (p *parser) recvMsg(maxMsgSize int) (pf payloadFormat, msg []byte, err error) { + if _, err := io.ReadFull(p.r, p.header[:]); err != nil { + return 0, nil, err + } + + pf = payloadFormat(p.header[0]) + length := binary.BigEndian.Uint32(p.header[1:]) + + if length == 0 { + return pf, nil, nil + } + if length > uint32(maxMsgSize) { + return 0, nil, Errorf(codes.Internal, "grpc: received message length %d exceeding the max size %d", length, maxMsgSize) + } + // TODO(bradfitz,zhaoq): garbage. reuse buffer after proto decoding instead + // of making it for each message: + msg = make([]byte, int(length)) + if _, err := io.ReadFull(p.r, msg); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return 0, nil, err + } + return pf, msg, nil +} + +// encode serializes msg and prepends the message header. If msg is nil, it +// generates the message header of 0 message length. +func encode(c Codec, msg interface{}, cp Compressor, cbuf *bytes.Buffer, outPayload *stats.OutPayload) ([]byte, error) { + var ( + b []byte + length uint + ) + if msg != nil { + var err error + // TODO(zhaoq): optimize to reduce memory alloc and copying. + b, err = c.Marshal(msg) + if err != nil { + return nil, err + } + if outPayload != nil { + outPayload.Payload = msg + // TODO truncate large payload. + outPayload.Data = b + outPayload.Length = len(b) + } + if cp != nil { + if err := cp.Do(cbuf, b); err != nil { + return nil, err + } + b = cbuf.Bytes() + } + length = uint(len(b)) + } + if length > math.MaxUint32 { + return nil, Errorf(codes.InvalidArgument, "grpc: message too large (%d bytes)", length) + } + + const ( + payloadLen = 1 + sizeLen = 4 + ) + + var buf = make([]byte, payloadLen+sizeLen+len(b)) + + // Write payload format + if cp == nil { + buf[0] = byte(compressionNone) + } else { + buf[0] = byte(compressionMade) + } + // Write length of b into buf + binary.BigEndian.PutUint32(buf[1:], uint32(length)) + // Copy encoded msg to buf + copy(buf[5:], b) + + if outPayload != nil { + outPayload.WireLength = len(buf) + } + + return buf, nil +} + +func checkRecvPayload(pf payloadFormat, recvCompress string, dc Decompressor) error { + switch pf { + case compressionNone: + case compressionMade: + if dc == nil || recvCompress != dc.Type() { + return Errorf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) + } + default: + return Errorf(codes.Internal, "grpc: received unexpected payload format %d", pf) + } + return nil +} + +func recv(p *parser, c Codec, s *transport.Stream, dc Decompressor, m interface{}, maxMsgSize int, inPayload *stats.InPayload) error { + pf, d, err := p.recvMsg(maxMsgSize) + if err != nil { + return err + } + if inPayload != nil { + inPayload.WireLength = len(d) + } + if err := checkRecvPayload(pf, s.RecvCompress(), dc); err != nil { + return err + } + if pf == compressionMade { + d, err = dc.Do(bytes.NewReader(d)) + if err != nil { + return Errorf(codes.Internal, "grpc: failed to decompress the received message %v", err) + } + } + if len(d) > maxMsgSize { + // TODO: Revisit the error code. Currently keep it consistent with java + // implementation. + return Errorf(codes.Internal, "grpc: received a message of %d bytes exceeding %d limit", len(d), maxMsgSize) + } + if err := c.Unmarshal(d, m); err != nil { + return Errorf(codes.Internal, "grpc: failed to unmarshal the received message %v", err) + } + if inPayload != nil { + inPayload.RecvTime = time.Now() + inPayload.Payload = m + // TODO truncate large payload. + inPayload.Data = d + inPayload.Length = len(d) + } + return nil +} + +// rpcError defines the status from an RPC. +type rpcError struct { + code codes.Code + desc string +} + +func (e *rpcError) Error() string { + return fmt.Sprintf("rpc error: code = %s desc = %s", e.code, e.desc) +} + +// Code returns the error code for err if it was produced by the rpc system. +// Otherwise, it returns codes.Unknown. +func Code(err error) codes.Code { + if err == nil { + return codes.OK + } + if e, ok := err.(*rpcError); ok { + return e.code + } + return codes.Unknown +} + +// ErrorDesc returns the error description of err if it was produced by the rpc system. +// Otherwise, it returns err.Error() or empty string when err is nil. +func ErrorDesc(err error) string { + if err == nil { + return "" + } + if e, ok := err.(*rpcError); ok { + return e.desc + } + return err.Error() +} + +// Errorf returns an error containing an error code and a description; +// Errorf returns nil if c is OK. +func Errorf(c codes.Code, format string, a ...interface{}) error { + if c == codes.OK { + return nil + } + return &rpcError{ + code: c, + desc: fmt.Sprintf(format, a...), + } +} + +// toRPCErr converts an error into a rpcError. +func toRPCErr(err error) error { + switch e := err.(type) { + case *rpcError: + return err + case transport.StreamError: + return &rpcError{ + code: e.Code, + desc: e.Desc, + } + case transport.ConnectionError: + return &rpcError{ + code: codes.Internal, + desc: e.Desc, + } + default: + switch err { + case context.DeadlineExceeded: + return &rpcError{ + code: codes.DeadlineExceeded, + desc: err.Error(), + } + case context.Canceled: + return &rpcError{ + code: codes.Canceled, + desc: err.Error(), + } + case ErrClientConnClosing: + return &rpcError{ + code: codes.FailedPrecondition, + desc: err.Error(), + } + } + + } + return Errorf(codes.Unknown, "%v", err) +} + +// convertCode converts a standard Go error into its canonical code. Note that +// this is only used to translate the error returned by the server applications. +func convertCode(err error) codes.Code { + switch err { + case nil: + return codes.OK + case io.EOF: + return codes.OutOfRange + case io.ErrClosedPipe, io.ErrNoProgress, io.ErrShortBuffer, io.ErrShortWrite, io.ErrUnexpectedEOF: + return codes.FailedPrecondition + case os.ErrInvalid: + return codes.InvalidArgument + case context.Canceled: + return codes.Canceled + case context.DeadlineExceeded: + return codes.DeadlineExceeded + } + switch { + case os.IsExist(err): + return codes.AlreadyExists + case os.IsNotExist(err): + return codes.NotFound + case os.IsPermission(err): + return codes.PermissionDenied + } + return codes.Unknown +} + +// MethodConfig defines the configuration recommended by the service providers for a +// particular method. +// This is EXPERIMENTAL and subject to change. +type MethodConfig struct { + // WaitForReady indicates whether RPCs sent to this method should wait until + // the connection is ready by default (!failfast). The value specified via the + // gRPC client API will override the value set here. + WaitForReady bool + // Timeout is the default timeout for RPCs sent to this method. The actual + // deadline used will be the minimum of the value specified here and the value + // set by the application via the gRPC client API. If either one is not set, + // then the other will be used. If neither is set, then the RPC has no deadline. + Timeout time.Duration + // MaxReqSize is the maximum allowed payload size for an individual request in a + // stream (client->server) in bytes. The size which is measured is the serialized + // payload after per-message compression (but before stream compression) in bytes. + // The actual value used is the minumum of the value specified here and the value set + // by the application via the gRPC client API. If either one is not set, then the other + // will be used. If neither is set, then the built-in default is used. + // TODO: support this. + MaxReqSize uint32 + // MaxRespSize is the maximum allowed payload size for an individual response in a + // stream (server->client) in bytes. + // TODO: support this. + MaxRespSize uint32 +} + +// ServiceConfig is provided by the service provider and contains parameters for how +// clients that connect to the service should behave. +// This is EXPERIMENTAL and subject to change. +type ServiceConfig struct { + // LB is the load balancer the service providers recommends. The balancer specified + // via grpc.WithBalancer will override this. + LB Balancer + // Methods contains a map for the methods in this service. + Methods map[string]MethodConfig +} + +// SupportPackageIsVersion4 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the grpc package. +// +// This constant may be renamed in the future if a change in the generated code +// requires a synchronised update of grpc-go and protoc-gen-go. This constant +// should not be referenced from any other code. +const SupportPackageIsVersion4 = true diff --git a/vendor/google.golang.org/grpc/rpc_util_test.go b/vendor/google.golang.org/grpc/rpc_util_test.go new file mode 100644 index 0000000..375e42b --- /dev/null +++ b/vendor/google.golang.org/grpc/rpc_util_test.go @@ -0,0 +1,234 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "io" + "math" + "reflect" + "testing" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + perfpb "google.golang.org/grpc/test/codec_perf" + "google.golang.org/grpc/transport" +) + +func TestSimpleParsing(t *testing.T) { + bigMsg := bytes.Repeat([]byte{'x'}, 1<<24) + for _, test := range []struct { + // input + p []byte + // outputs + err error + b []byte + pt payloadFormat + }{ + {nil, io.EOF, nil, compressionNone}, + {[]byte{0, 0, 0, 0, 0}, nil, nil, compressionNone}, + {[]byte{0, 0, 0, 0, 1, 'a'}, nil, []byte{'a'}, compressionNone}, + {[]byte{1, 0}, io.ErrUnexpectedEOF, nil, compressionNone}, + {[]byte{0, 0, 0, 0, 10, 'a'}, io.ErrUnexpectedEOF, nil, compressionNone}, + // Check that messages with length >= 2^24 are parsed. + {append([]byte{0, 1, 0, 0, 0}, bigMsg...), nil, bigMsg, compressionNone}, + } { + buf := bytes.NewReader(test.p) + parser := &parser{r: buf} + pt, b, err := parser.recvMsg(math.MaxInt32) + if err != test.err || !bytes.Equal(b, test.b) || pt != test.pt { + t.Fatalf("parser{%v}.recvMsg(_) = %v, %v, %v\nwant %v, %v, %v", test.p, pt, b, err, test.pt, test.b, test.err) + } + } +} + +func TestMultipleParsing(t *testing.T) { + // Set a byte stream consists of 3 messages with their headers. + p := []byte{0, 0, 0, 0, 1, 'a', 0, 0, 0, 0, 2, 'b', 'c', 0, 0, 0, 0, 1, 'd'} + b := bytes.NewReader(p) + parser := &parser{r: b} + + wantRecvs := []struct { + pt payloadFormat + data []byte + }{ + {compressionNone, []byte("a")}, + {compressionNone, []byte("bc")}, + {compressionNone, []byte("d")}, + } + for i, want := range wantRecvs { + pt, data, err := parser.recvMsg(math.MaxInt32) + if err != nil || pt != want.pt || !reflect.DeepEqual(data, want.data) { + t.Fatalf("after %d calls, parser{%v}.recvMsg(_) = %v, %v, %v\nwant %v, %v, <nil>", + i, p, pt, data, err, want.pt, want.data) + } + } + + pt, data, err := parser.recvMsg(math.MaxInt32) + if err != io.EOF { + t.Fatalf("after %d recvMsgs calls, parser{%v}.recvMsg(_) = %v, %v, %v\nwant _, _, %v", + len(wantRecvs), p, pt, data, err, io.EOF) + } +} + +func TestEncode(t *testing.T) { + for _, test := range []struct { + // input + msg proto.Message + cp Compressor + // outputs + b []byte + err error + }{ + {nil, nil, []byte{0, 0, 0, 0, 0}, nil}, + } { + b, err := encode(protoCodec{}, test.msg, nil, nil, nil) + if err != test.err || !bytes.Equal(b, test.b) { + t.Fatalf("encode(_, _, %v, _) = %v, %v\nwant %v, %v", test.cp, b, err, test.b, test.err) + } + } +} + +func TestCompress(t *testing.T) { + for _, test := range []struct { + // input + data []byte + cp Compressor + dc Decompressor + // outputs + err error + }{ + {make([]byte, 1024), &gzipCompressor{}, &gzipDecompressor{}, nil}, + } { + b := new(bytes.Buffer) + if err := test.cp.Do(b, test.data); err != test.err { + t.Fatalf("Compressor.Do(_, %v) = %v, want %v", test.data, err, test.err) + } + if b.Len() >= len(test.data) { + t.Fatalf("The compressor fails to compress data.") + } + if p, err := test.dc.Do(b); err != nil || !bytes.Equal(test.data, p) { + t.Fatalf("Decompressor.Do(%v) = %v, %v, want %v, <nil>", b, p, err, test.data) + } + } +} + +func TestToRPCErr(t *testing.T) { + for _, test := range []struct { + // input + errIn error + // outputs + errOut *rpcError + }{ + {transport.StreamError{codes.Unknown, ""}, Errorf(codes.Unknown, "").(*rpcError)}, + {transport.ErrConnClosing, Errorf(codes.Internal, transport.ErrConnClosing.Desc).(*rpcError)}, + } { + err := toRPCErr(test.errIn) + rpcErr, ok := err.(*rpcError) + if !ok { + t.Fatalf("toRPCErr{%v} returned type %T, want %T", test.errIn, err, rpcError{}) + } + if *rpcErr != *test.errOut { + t.Fatalf("toRPCErr{%v} = %v \nwant %v", test.errIn, err, test.errOut) + } + } +} + +func TestContextErr(t *testing.T) { + for _, test := range []struct { + // input + errIn error + // outputs + errOut transport.StreamError + }{ + {context.DeadlineExceeded, transport.StreamError{codes.DeadlineExceeded, context.DeadlineExceeded.Error()}}, + {context.Canceled, transport.StreamError{codes.Canceled, context.Canceled.Error()}}, + } { + err := transport.ContextErr(test.errIn) + if err != test.errOut { + t.Fatalf("ContextErr{%v} = %v \nwant %v", test.errIn, err, test.errOut) + } + } +} + +func TestErrorsWithSameParameters(t *testing.T) { + const description = "some description" + e1 := Errorf(codes.AlreadyExists, description).(*rpcError) + e2 := Errorf(codes.AlreadyExists, description).(*rpcError) + if e1 == e2 { + t.Fatalf("Error interfaces should not be considered equal - e1: %p - %v e2: %p - %v", e1, e1, e2, e2) + } + if Code(e1) != Code(e2) || ErrorDesc(e1) != ErrorDesc(e2) { + t.Fatalf("Expected errors to have same code and description - e1: %p - %v e2: %p - %v", e1, e1, e2, e2) + } +} + +// bmEncode benchmarks encoding a Protocol Buffer message containing mSize +// bytes. +func bmEncode(b *testing.B, mSize int) { + msg := &perfpb.Buffer{Body: make([]byte, mSize)} + encoded, _ := encode(protoCodec{}, msg, nil, nil, nil) + encodedSz := int64(len(encoded)) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + encode(protoCodec{}, msg, nil, nil, nil) + } + b.SetBytes(encodedSz) +} + +func BenchmarkEncode1B(b *testing.B) { + bmEncode(b, 1) +} + +func BenchmarkEncode1KiB(b *testing.B) { + bmEncode(b, 1024) +} + +func BenchmarkEncode8KiB(b *testing.B) { + bmEncode(b, 8*1024) +} + +func BenchmarkEncode64KiB(b *testing.B) { + bmEncode(b, 64*1024) +} + +func BenchmarkEncode512KiB(b *testing.B) { + bmEncode(b, 512*1024) +} + +func BenchmarkEncode1MiB(b *testing.B) { + bmEncode(b, 1024*1024) +} diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go new file mode 100644 index 0000000..157f35e --- /dev/null +++ b/vendor/google.golang.org/grpc/server.go @@ -0,0 +1,1085 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "errors" + "fmt" + "io" + "net" + "net/http" + "reflect" + "runtime" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "golang.org/x/net/trace" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/internal" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/stats" + "google.golang.org/grpc/tap" + "google.golang.org/grpc/transport" +) + +type methodHandler func(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor UnaryServerInterceptor) (interface{}, error) + +// MethodDesc represents an RPC service's method specification. +type MethodDesc struct { + MethodName string + Handler methodHandler +} + +// ServiceDesc represents an RPC service's specification. +type ServiceDesc struct { + ServiceName string + // The pointer to the service interface. Used to check whether the user + // provided implementation satisfies the interface requirements. + HandlerType interface{} + Methods []MethodDesc + Streams []StreamDesc + Metadata interface{} +} + +// service consists of the information of the server serving this service and +// the methods in this service. +type service struct { + server interface{} // the server for service methods + md map[string]*MethodDesc + sd map[string]*StreamDesc + mdata interface{} +} + +// Server is a gRPC server to serve RPC requests. +type Server struct { + opts options + + mu sync.Mutex // guards following + lis map[net.Listener]bool + conns map[io.Closer]bool + drain bool + ctx context.Context + cancel context.CancelFunc + // A CondVar to let GracefulStop() blocks until all the pending RPCs are finished + // and all the transport goes away. + cv *sync.Cond + m map[string]*service // service name -> service info + events trace.EventLog +} + +type options struct { + creds credentials.TransportCredentials + codec Codec + cp Compressor + dc Decompressor + maxMsgSize int + unaryInt UnaryServerInterceptor + streamInt StreamServerInterceptor + inTapHandle tap.ServerInHandle + statsHandler stats.Handler + maxConcurrentStreams uint32 + useHandlerImpl bool // use http.Handler-based server + unknownStreamDesc *StreamDesc +} + +var defaultMaxMsgSize = 1024 * 1024 * 4 // use 4MB as the default message size limit + +// A ServerOption sets options. +type ServerOption func(*options) + +// CustomCodec returns a ServerOption that sets a codec for message marshaling and unmarshaling. +func CustomCodec(codec Codec) ServerOption { + return func(o *options) { + o.codec = codec + } +} + +// RPCCompressor returns a ServerOption that sets a compressor for outbound messages. +func RPCCompressor(cp Compressor) ServerOption { + return func(o *options) { + o.cp = cp + } +} + +// RPCDecompressor returns a ServerOption that sets a decompressor for inbound messages. +func RPCDecompressor(dc Decompressor) ServerOption { + return func(o *options) { + o.dc = dc + } +} + +// MaxMsgSize returns a ServerOption to set the max message size in bytes for inbound mesages. +// If this is not set, gRPC uses the default 4MB. +func MaxMsgSize(m int) ServerOption { + return func(o *options) { + o.maxMsgSize = m + } +} + +// MaxConcurrentStreams returns a ServerOption that will apply a limit on the number +// of concurrent streams to each ServerTransport. +func MaxConcurrentStreams(n uint32) ServerOption { + return func(o *options) { + o.maxConcurrentStreams = n + } +} + +// Creds returns a ServerOption that sets credentials for server connections. +func Creds(c credentials.TransportCredentials) ServerOption { + return func(o *options) { + o.creds = c + } +} + +// UnaryInterceptor returns a ServerOption that sets the UnaryServerInterceptor for the +// server. Only one unary interceptor can be installed. The construction of multiple +// interceptors (e.g., chaining) can be implemented at the caller. +func UnaryInterceptor(i UnaryServerInterceptor) ServerOption { + return func(o *options) { + if o.unaryInt != nil { + panic("The unary server interceptor has been set.") + } + o.unaryInt = i + } +} + +// StreamInterceptor returns a ServerOption that sets the StreamServerInterceptor for the +// server. Only one stream interceptor can be installed. +func StreamInterceptor(i StreamServerInterceptor) ServerOption { + return func(o *options) { + if o.streamInt != nil { + panic("The stream server interceptor has been set.") + } + o.streamInt = i + } +} + +// InTapHandle returns a ServerOption that sets the tap handle for all the server +// transport to be created. Only one can be installed. +func InTapHandle(h tap.ServerInHandle) ServerOption { + return func(o *options) { + if o.inTapHandle != nil { + panic("The tap handle has been set.") + } + o.inTapHandle = h + } +} + +// StatsHandler returns a ServerOption that sets the stats handler for the server. +func StatsHandler(h stats.Handler) ServerOption { + return func(o *options) { + o.statsHandler = h + } +} + +// UnknownServiceHandler returns a ServerOption that allows for adding a custom +// unknown service handler. The provided method is a bidi-streaming RPC service +// handler that will be invoked instead of returning the the "unimplemented" gRPC +// error whenever a request is received for an unregistered service or method. +// The handling function has full access to the Context of the request and the +// stream, and the invocation passes through interceptors. +func UnknownServiceHandler(streamHandler StreamHandler) ServerOption { + return func(o *options) { + o.unknownStreamDesc = &StreamDesc{ + StreamName: "unknown_service_handler", + Handler: streamHandler, + // We need to assume that the users of the streamHandler will want to use both. + ClientStreams: true, + ServerStreams: true, + } + } +} + +// NewServer creates a gRPC server which has no service registered and has not +// started to accept requests yet. +func NewServer(opt ...ServerOption) *Server { + var opts options + opts.maxMsgSize = defaultMaxMsgSize + for _, o := range opt { + o(&opts) + } + if opts.codec == nil { + // Set the default codec. + opts.codec = protoCodec{} + } + s := &Server{ + lis: make(map[net.Listener]bool), + opts: opts, + conns: make(map[io.Closer]bool), + m: make(map[string]*service), + } + s.cv = sync.NewCond(&s.mu) + s.ctx, s.cancel = context.WithCancel(context.Background()) + if EnableTracing { + _, file, line, _ := runtime.Caller(1) + s.events = trace.NewEventLog("grpc.Server", fmt.Sprintf("%s:%d", file, line)) + } + return s +} + +// printf records an event in s's event log, unless s has been stopped. +// REQUIRES s.mu is held. +func (s *Server) printf(format string, a ...interface{}) { + if s.events != nil { + s.events.Printf(format, a...) + } +} + +// errorf records an error in s's event log, unless s has been stopped. +// REQUIRES s.mu is held. +func (s *Server) errorf(format string, a ...interface{}) { + if s.events != nil { + s.events.Errorf(format, a...) + } +} + +// RegisterService register a service and its implementation to the gRPC +// server. Called from the IDL generated code. This must be called before +// invoking Serve. +func (s *Server) RegisterService(sd *ServiceDesc, ss interface{}) { + ht := reflect.TypeOf(sd.HandlerType).Elem() + st := reflect.TypeOf(ss) + if !st.Implements(ht) { + grpclog.Fatalf("grpc: Server.RegisterService found the handler of type %v that does not satisfy %v", st, ht) + } + s.register(sd, ss) +} + +func (s *Server) register(sd *ServiceDesc, ss interface{}) { + s.mu.Lock() + defer s.mu.Unlock() + s.printf("RegisterService(%q)", sd.ServiceName) + if _, ok := s.m[sd.ServiceName]; ok { + grpclog.Fatalf("grpc: Server.RegisterService found duplicate service registration for %q", sd.ServiceName) + } + srv := &service{ + server: ss, + md: make(map[string]*MethodDesc), + sd: make(map[string]*StreamDesc), + mdata: sd.Metadata, + } + for i := range sd.Methods { + d := &sd.Methods[i] + srv.md[d.MethodName] = d + } + for i := range sd.Streams { + d := &sd.Streams[i] + srv.sd[d.StreamName] = d + } + s.m[sd.ServiceName] = srv +} + +// MethodInfo contains the information of an RPC including its method name and type. +type MethodInfo struct { + // Name is the method name only, without the service name or package name. + Name string + // IsClientStream indicates whether the RPC is a client streaming RPC. + IsClientStream bool + // IsServerStream indicates whether the RPC is a server streaming RPC. + IsServerStream bool +} + +// ServiceInfo contains unary RPC method info, streaming RPC methid info and metadata for a service. +type ServiceInfo struct { + Methods []MethodInfo + // Metadata is the metadata specified in ServiceDesc when registering service. + Metadata interface{} +} + +// GetServiceInfo returns a map from service names to ServiceInfo. +// Service names include the package names, in the form of <package>.<service>. +func (s *Server) GetServiceInfo() map[string]ServiceInfo { + ret := make(map[string]ServiceInfo) + for n, srv := range s.m { + methods := make([]MethodInfo, 0, len(srv.md)+len(srv.sd)) + for m := range srv.md { + methods = append(methods, MethodInfo{ + Name: m, + IsClientStream: false, + IsServerStream: false, + }) + } + for m, d := range srv.sd { + methods = append(methods, MethodInfo{ + Name: m, + IsClientStream: d.ClientStreams, + IsServerStream: d.ServerStreams, + }) + } + + ret[n] = ServiceInfo{ + Methods: methods, + Metadata: srv.mdata, + } + } + return ret +} + +var ( + // ErrServerStopped indicates that the operation is now illegal because of + // the server being stopped. + ErrServerStopped = errors.New("grpc: the server has been stopped") +) + +func (s *Server) useTransportAuthenticator(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + if s.opts.creds == nil { + return rawConn, nil, nil + } + return s.opts.creds.ServerHandshake(rawConn) +} + +// Serve accepts incoming connections on the listener lis, creating a new +// ServerTransport and service goroutine for each. The service goroutines +// read gRPC requests and then call the registered handlers to reply to them. +// Serve returns when lis.Accept fails with fatal errors. lis will be closed when +// this method returns. +// Serve always returns non-nil error. +func (s *Server) Serve(lis net.Listener) error { + s.mu.Lock() + s.printf("serving") + if s.lis == nil { + s.mu.Unlock() + lis.Close() + return ErrServerStopped + } + s.lis[lis] = true + s.mu.Unlock() + defer func() { + s.mu.Lock() + if s.lis != nil && s.lis[lis] { + lis.Close() + delete(s.lis, lis) + } + s.mu.Unlock() + }() + + var tempDelay time.Duration // how long to sleep on accept failure + + for { + rawConn, err := lis.Accept() + if err != nil { + if ne, ok := err.(interface { + Temporary() bool + }); ok && ne.Temporary() { + if tempDelay == 0 { + tempDelay = 5 * time.Millisecond + } else { + tempDelay *= 2 + } + if max := 1 * time.Second; tempDelay > max { + tempDelay = max + } + s.mu.Lock() + s.printf("Accept error: %v; retrying in %v", err, tempDelay) + s.mu.Unlock() + select { + case <-time.After(tempDelay): + case <-s.ctx.Done(): + } + continue + } + s.mu.Lock() + s.printf("done serving; Accept = %v", err) + s.mu.Unlock() + return err + } + tempDelay = 0 + // Start a new goroutine to deal with rawConn + // so we don't stall this Accept loop goroutine. + go s.handleRawConn(rawConn) + } +} + +// handleRawConn is run in its own goroutine and handles a just-accepted +// connection that has not had any I/O performed on it yet. +func (s *Server) handleRawConn(rawConn net.Conn) { + conn, authInfo, err := s.useTransportAuthenticator(rawConn) + if err != nil { + s.mu.Lock() + s.errorf("ServerHandshake(%q) failed: %v", rawConn.RemoteAddr(), err) + s.mu.Unlock() + grpclog.Printf("grpc: Server.Serve failed to complete security handshake from %q: %v", rawConn.RemoteAddr(), err) + // If serverHandShake returns ErrConnDispatched, keep rawConn open. + if err != credentials.ErrConnDispatched { + rawConn.Close() + } + return + } + + s.mu.Lock() + if s.conns == nil { + s.mu.Unlock() + conn.Close() + return + } + s.mu.Unlock() + + if s.opts.useHandlerImpl { + s.serveUsingHandler(conn) + } else { + s.serveHTTP2Transport(conn, authInfo) + } +} + +// serveHTTP2Transport sets up a http/2 transport (using the +// gRPC http2 server transport in transport/http2_server.go) and +// serves streams on it. +// This is run in its own goroutine (it does network I/O in +// transport.NewServerTransport). +func (s *Server) serveHTTP2Transport(c net.Conn, authInfo credentials.AuthInfo) { + config := &transport.ServerConfig{ + MaxStreams: s.opts.maxConcurrentStreams, + AuthInfo: authInfo, + InTapHandle: s.opts.inTapHandle, + StatsHandler: s.opts.statsHandler, + } + st, err := transport.NewServerTransport("http2", c, config) + if err != nil { + s.mu.Lock() + s.errorf("NewServerTransport(%q) failed: %v", c.RemoteAddr(), err) + s.mu.Unlock() + c.Close() + grpclog.Println("grpc: Server.Serve failed to create ServerTransport: ", err) + return + } + if !s.addConn(st) { + st.Close() + return + } + s.serveStreams(st) +} + +func (s *Server) serveStreams(st transport.ServerTransport) { + defer s.removeConn(st) + defer st.Close() + var wg sync.WaitGroup + st.HandleStreams(func(stream *transport.Stream) { + wg.Add(1) + go func() { + defer wg.Done() + s.handleStream(st, stream, s.traceInfo(st, stream)) + }() + }, func(ctx context.Context, method string) context.Context { + if !EnableTracing { + return ctx + } + tr := trace.New("grpc.Recv."+methodFamily(method), method) + return trace.NewContext(ctx, tr) + }) + wg.Wait() +} + +var _ http.Handler = (*Server)(nil) + +// serveUsingHandler is called from handleRawConn when s is configured +// to handle requests via the http.Handler interface. It sets up a +// net/http.Server to handle the just-accepted conn. The http.Server +// is configured to route all incoming requests (all HTTP/2 streams) +// to ServeHTTP, which creates a new ServerTransport for each stream. +// serveUsingHandler blocks until conn closes. +// +// This codepath is only used when Server.TestingUseHandlerImpl has +// been configured. This lets the end2end tests exercise the ServeHTTP +// method as one of the environment types. +// +// conn is the *tls.Conn that's already been authenticated. +func (s *Server) serveUsingHandler(conn net.Conn) { + if !s.addConn(conn) { + conn.Close() + return + } + defer s.removeConn(conn) + h2s := &http2.Server{ + MaxConcurrentStreams: s.opts.maxConcurrentStreams, + } + h2s.ServeConn(conn, &http2.ServeConnOpts{ + Handler: s, + }) +} + +func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { + st, err := transport.NewServerHandlerTransport(w, r) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + if !s.addConn(st) { + st.Close() + return + } + defer s.removeConn(st) + s.serveStreams(st) +} + +// traceInfo returns a traceInfo and associates it with stream, if tracing is enabled. +// If tracing is not enabled, it returns nil. +func (s *Server) traceInfo(st transport.ServerTransport, stream *transport.Stream) (trInfo *traceInfo) { + tr, ok := trace.FromContext(stream.Context()) + if !ok { + return nil + } + + trInfo = &traceInfo{ + tr: tr, + } + trInfo.firstLine.client = false + trInfo.firstLine.remoteAddr = st.RemoteAddr() + + if dl, ok := stream.Context().Deadline(); ok { + trInfo.firstLine.deadline = dl.Sub(time.Now()) + } + return trInfo +} + +func (s *Server) addConn(c io.Closer) bool { + s.mu.Lock() + defer s.mu.Unlock() + if s.conns == nil || s.drain { + return false + } + s.conns[c] = true + return true +} + +func (s *Server) removeConn(c io.Closer) { + s.mu.Lock() + defer s.mu.Unlock() + if s.conns != nil { + delete(s.conns, c) + s.cv.Broadcast() + } +} + +func (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Stream, msg interface{}, cp Compressor, opts *transport.Options) error { + var ( + cbuf *bytes.Buffer + outPayload *stats.OutPayload + ) + if cp != nil { + cbuf = new(bytes.Buffer) + } + if s.opts.statsHandler != nil { + outPayload = &stats.OutPayload{} + } + p, err := encode(s.opts.codec, msg, cp, cbuf, outPayload) + if err != nil { + // This typically indicates a fatal issue (e.g., memory + // corruption or hardware faults) the application program + // cannot handle. + // + // TODO(zhaoq): There exist other options also such as only closing the + // faulty stream locally and remotely (Other streams can keep going). Find + // the optimal option. + grpclog.Fatalf("grpc: Server failed to encode response %v", err) + } + err = t.Write(stream, p, opts) + if err == nil && outPayload != nil { + outPayload.SentTime = time.Now() + s.opts.statsHandler.HandleRPC(stream.Context(), outPayload) + } + return err +} + +func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport.Stream, srv *service, md *MethodDesc, trInfo *traceInfo) (err error) { + sh := s.opts.statsHandler + if sh != nil { + begin := &stats.Begin{ + BeginTime: time.Now(), + } + sh.HandleRPC(stream.Context(), begin) + } + defer func() { + if sh != nil { + end := &stats.End{ + EndTime: time.Now(), + } + if err != nil && err != io.EOF { + end.Error = toRPCErr(err) + } + sh.HandleRPC(stream.Context(), end) + } + }() + if trInfo != nil { + defer trInfo.tr.Finish() + trInfo.firstLine.client = false + trInfo.tr.LazyLog(&trInfo.firstLine, false) + defer func() { + if err != nil && err != io.EOF { + trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.SetError() + } + }() + } + if s.opts.cp != nil { + // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. + stream.SetSendCompress(s.opts.cp.Type()) + } + p := &parser{r: stream} + for { + pf, req, err := p.recvMsg(s.opts.maxMsgSize) + if err == io.EOF { + // The entire stream is done (for unary RPC only). + return err + } + if err == io.ErrUnexpectedEOF { + err = Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) + } + if err != nil { + switch err := err.(type) { + case *rpcError: + if e := t.WriteStatus(stream, err.code, err.desc); e != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) + } + case transport.ConnectionError: + // Nothing to do here. + case transport.StreamError: + if e := t.WriteStatus(stream, err.Code, err.Desc); e != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) + } + default: + panic(fmt.Sprintf("grpc: Unexpected error (%T) from recvMsg: %v", err, err)) + } + return err + } + + if err := checkRecvPayload(pf, stream.RecvCompress(), s.opts.dc); err != nil { + switch err := err.(type) { + case *rpcError: + if e := t.WriteStatus(stream, err.code, err.desc); e != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) + } + return err + default: + if e := t.WriteStatus(stream, codes.Internal, err.Error()); e != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) + } + // TODO checkRecvPayload always return RPC error. Add a return here if necessary. + } + } + var inPayload *stats.InPayload + if sh != nil { + inPayload = &stats.InPayload{ + RecvTime: time.Now(), + } + } + statusCode := codes.OK + statusDesc := "" + df := func(v interface{}) error { + if inPayload != nil { + inPayload.WireLength = len(req) + } + if pf == compressionMade { + var err error + req, err = s.opts.dc.Do(bytes.NewReader(req)) + if err != nil { + if err := t.WriteStatus(stream, codes.Internal, err.Error()); err != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", err) + } + return Errorf(codes.Internal, err.Error()) + } + } + if len(req) > s.opts.maxMsgSize { + // TODO: Revisit the error code. Currently keep it consistent with + // java implementation. + statusCode = codes.Internal + statusDesc = fmt.Sprintf("grpc: server received a message of %d bytes exceeding %d limit", len(req), s.opts.maxMsgSize) + } + if err := s.opts.codec.Unmarshal(req, v); err != nil { + return err + } + if inPayload != nil { + inPayload.Payload = v + inPayload.Data = req + inPayload.Length = len(req) + sh.HandleRPC(stream.Context(), inPayload) + } + if trInfo != nil { + trInfo.tr.LazyLog(&payload{sent: false, msg: v}, true) + } + return nil + } + reply, appErr := md.Handler(srv.server, stream.Context(), df, s.opts.unaryInt) + if appErr != nil { + if err, ok := appErr.(*rpcError); ok { + statusCode = err.code + statusDesc = err.desc + } else { + statusCode = convertCode(appErr) + statusDesc = appErr.Error() + } + if trInfo != nil && statusCode != codes.OK { + trInfo.tr.LazyLog(stringer(statusDesc), true) + trInfo.tr.SetError() + } + if err := t.WriteStatus(stream, statusCode, statusDesc); err != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status: %v", err) + } + return Errorf(statusCode, statusDesc) + } + if trInfo != nil { + trInfo.tr.LazyLog(stringer("OK"), false) + } + opts := &transport.Options{ + Last: true, + Delay: false, + } + if err := s.sendResponse(t, stream, reply, s.opts.cp, opts); err != nil { + switch err := err.(type) { + case transport.ConnectionError: + // Nothing to do here. + case transport.StreamError: + statusCode = err.Code + statusDesc = err.Desc + default: + statusCode = codes.Unknown + statusDesc = err.Error() + } + return err + } + if trInfo != nil { + trInfo.tr.LazyLog(&payload{sent: true, msg: reply}, true) + } + errWrite := t.WriteStatus(stream, statusCode, statusDesc) + if statusCode != codes.OK { + return Errorf(statusCode, statusDesc) + } + return errWrite + } +} + +func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transport.Stream, srv *service, sd *StreamDesc, trInfo *traceInfo) (err error) { + sh := s.opts.statsHandler + if sh != nil { + begin := &stats.Begin{ + BeginTime: time.Now(), + } + sh.HandleRPC(stream.Context(), begin) + } + defer func() { + if sh != nil { + end := &stats.End{ + EndTime: time.Now(), + } + if err != nil && err != io.EOF { + end.Error = toRPCErr(err) + } + sh.HandleRPC(stream.Context(), end) + } + }() + if s.opts.cp != nil { + stream.SetSendCompress(s.opts.cp.Type()) + } + ss := &serverStream{ + t: t, + s: stream, + p: &parser{r: stream}, + codec: s.opts.codec, + cp: s.opts.cp, + dc: s.opts.dc, + maxMsgSize: s.opts.maxMsgSize, + trInfo: trInfo, + statsHandler: sh, + } + if ss.cp != nil { + ss.cbuf = new(bytes.Buffer) + } + if trInfo != nil { + trInfo.tr.LazyLog(&trInfo.firstLine, false) + defer func() { + ss.mu.Lock() + if err != nil && err != io.EOF { + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.SetError() + } + ss.trInfo.tr.Finish() + ss.trInfo.tr = nil + ss.mu.Unlock() + }() + } + var appErr error + var server interface{} + if srv != nil { + server = srv.server + } + if s.opts.streamInt == nil { + appErr = sd.Handler(server, ss) + } else { + info := &StreamServerInfo{ + FullMethod: stream.Method(), + IsClientStream: sd.ClientStreams, + IsServerStream: sd.ServerStreams, + } + appErr = s.opts.streamInt(server, ss, info, sd.Handler) + } + if appErr != nil { + if err, ok := appErr.(*rpcError); ok { + ss.statusCode = err.code + ss.statusDesc = err.desc + } else if err, ok := appErr.(transport.StreamError); ok { + ss.statusCode = err.Code + ss.statusDesc = err.Desc + } else { + ss.statusCode = convertCode(appErr) + ss.statusDesc = appErr.Error() + } + } + if trInfo != nil { + ss.mu.Lock() + if ss.statusCode != codes.OK { + ss.trInfo.tr.LazyLog(stringer(ss.statusDesc), true) + ss.trInfo.tr.SetError() + } else { + ss.trInfo.tr.LazyLog(stringer("OK"), false) + } + ss.mu.Unlock() + } + errWrite := t.WriteStatus(ss.s, ss.statusCode, ss.statusDesc) + if ss.statusCode != codes.OK { + return Errorf(ss.statusCode, ss.statusDesc) + } + return errWrite + +} + +func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Stream, trInfo *traceInfo) { + sm := stream.Method() + if sm != "" && sm[0] == '/' { + sm = sm[1:] + } + pos := strings.LastIndex(sm, "/") + if pos == -1 { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"Malformed method name %q", []interface{}{sm}}, true) + trInfo.tr.SetError() + } + errDesc := fmt.Sprintf("malformed method name: %q", stream.Method()) + if err := t.WriteStatus(stream, codes.InvalidArgument, errDesc); err != nil { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.SetError() + } + grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + } + if trInfo != nil { + trInfo.tr.Finish() + } + return + } + service := sm[:pos] + method := sm[pos+1:] + srv, ok := s.m[service] + if !ok { + if unknownDesc := s.opts.unknownStreamDesc; unknownDesc != nil { + s.processStreamingRPC(t, stream, nil, unknownDesc, trInfo) + return + } + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"Unknown service %v", []interface{}{service}}, true) + trInfo.tr.SetError() + } + errDesc := fmt.Sprintf("unknown service %v", service) + if err := t.WriteStatus(stream, codes.Unimplemented, errDesc); err != nil { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.SetError() + } + grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + } + if trInfo != nil { + trInfo.tr.Finish() + } + return + } + // Unary RPC or Streaming RPC? + if md, ok := srv.md[method]; ok { + s.processUnaryRPC(t, stream, srv, md, trInfo) + return + } + if sd, ok := srv.sd[method]; ok { + s.processStreamingRPC(t, stream, srv, sd, trInfo) + return + } + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"Unknown method %v", []interface{}{method}}, true) + trInfo.tr.SetError() + } + if unknownDesc := s.opts.unknownStreamDesc; unknownDesc != nil { + s.processStreamingRPC(t, stream, nil, unknownDesc, trInfo) + return + } + errDesc := fmt.Sprintf("unknown method %v", method) + if err := t.WriteStatus(stream, codes.Unimplemented, errDesc); err != nil { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.SetError() + } + grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + } + if trInfo != nil { + trInfo.tr.Finish() + } +} + +// Stop stops the gRPC server. It immediately closes all open +// connections and listeners. +// It cancels all active RPCs on the server side and the corresponding +// pending RPCs on the client side will get notified by connection +// errors. +func (s *Server) Stop() { + s.mu.Lock() + listeners := s.lis + s.lis = nil + st := s.conns + s.conns = nil + // interrupt GracefulStop if Stop and GracefulStop are called concurrently. + s.cv.Broadcast() + s.mu.Unlock() + + for lis := range listeners { + lis.Close() + } + for c := range st { + c.Close() + } + + s.mu.Lock() + s.cancel() + if s.events != nil { + s.events.Finish() + s.events = nil + } + s.mu.Unlock() +} + +// GracefulStop stops the gRPC server gracefully. It stops the server to accept new +// connections and RPCs and blocks until all the pending RPCs are finished. +func (s *Server) GracefulStop() { + s.mu.Lock() + defer s.mu.Unlock() + if s.conns == nil { + return + } + for lis := range s.lis { + lis.Close() + } + s.lis = nil + s.cancel() + if !s.drain { + for c := range s.conns { + c.(transport.ServerTransport).Drain() + } + s.drain = true + } + for len(s.conns) != 0 { + s.cv.Wait() + } + s.conns = nil + if s.events != nil { + s.events.Finish() + s.events = nil + } +} + +func init() { + internal.TestingCloseConns = func(arg interface{}) { + arg.(*Server).testingCloseConns() + } + internal.TestingUseHandlerImpl = func(arg interface{}) { + arg.(*Server).opts.useHandlerImpl = true + } +} + +// testingCloseConns closes all existing transports but keeps s.lis +// accepting new connections. +func (s *Server) testingCloseConns() { + s.mu.Lock() + for c := range s.conns { + c.Close() + delete(s.conns, c) + } + s.mu.Unlock() +} + +// SetHeader sets the header metadata. +// When called multiple times, all the provided metadata will be merged. +// All the metadata will be sent out when one of the following happens: +// - grpc.SendHeader() is called; +// - The first response is sent out; +// - An RPC status is sent out (error or success). +func SetHeader(ctx context.Context, md metadata.MD) error { + if md.Len() == 0 { + return nil + } + stream, ok := transport.StreamFromContext(ctx) + if !ok { + return Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) + } + return stream.SetHeader(md) +} + +// SendHeader sends header metadata. It may be called at most once. +// The provided md and headers set by SetHeader() will be sent. +func SendHeader(ctx context.Context, md metadata.MD) error { + stream, ok := transport.StreamFromContext(ctx) + if !ok { + return Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) + } + t := stream.ServerTransport() + if t == nil { + grpclog.Fatalf("grpc: SendHeader: %v has no ServerTransport to send header metadata.", stream) + } + if err := t.WriteHeader(stream, md); err != nil { + return toRPCErr(err) + } + return nil +} + +// SetTrailer sets the trailer metadata that will be sent when an RPC returns. +// When called more than once, all the provided metadata will be merged. +func SetTrailer(ctx context.Context, md metadata.MD) error { + if md.Len() == 0 { + return nil + } + stream, ok := transport.StreamFromContext(ctx) + if !ok { + return Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) + } + return stream.SetTrailer(md) +} diff --git a/vendor/google.golang.org/grpc/server_test.go b/vendor/google.golang.org/grpc/server_test.go new file mode 100644 index 0000000..53968cc --- /dev/null +++ b/vendor/google.golang.org/grpc/server_test.go @@ -0,0 +1,113 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "net" + "reflect" + "strings" + "testing" +) + +type emptyServiceServer interface{} + +type testServer struct{} + +func TestStopBeforeServe(t *testing.T) { + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("failed to create listener: %v", err) + } + + server := NewServer() + server.Stop() + err = server.Serve(lis) + if err != ErrServerStopped { + t.Fatalf("server.Serve() error = %v, want %v", err, ErrServerStopped) + } + + // server.Serve is responsible for closing the listener, even if the + // server was already stopped. + err = lis.Close() + if got, want := ErrorDesc(err), "use of closed"; !strings.Contains(got, want) { + t.Errorf("Close() error = %q, want %q", got, want) + } +} + +func TestGetServiceInfo(t *testing.T) { + testSd := ServiceDesc{ + ServiceName: "grpc.testing.EmptyService", + HandlerType: (*emptyServiceServer)(nil), + Methods: []MethodDesc{ + { + MethodName: "EmptyCall", + Handler: nil, + }, + }, + Streams: []StreamDesc{ + { + StreamName: "EmptyStream", + Handler: nil, + ServerStreams: false, + ClientStreams: true, + }, + }, + Metadata: []int{0, 2, 1, 3}, + } + + server := NewServer() + server.RegisterService(&testSd, &testServer{}) + + info := server.GetServiceInfo() + want := map[string]ServiceInfo{ + "grpc.testing.EmptyService": { + Methods: []MethodInfo{ + { + Name: "EmptyCall", + IsClientStream: false, + IsServerStream: false, + }, + { + Name: "EmptyStream", + IsClientStream: true, + IsServerStream: false, + }}, + Metadata: []int{0, 2, 1, 3}, + }, + } + + if !reflect.DeepEqual(info, want) { + t.Errorf("GetServiceInfo() = %+v, want %+v", info, want) + } +} diff --git a/vendor/google.golang.org/grpc/stats/grpc_testing/test.pb.go b/vendor/google.golang.org/grpc/stats/grpc_testing/test.pb.go new file mode 100644 index 0000000..b24dcd8 --- /dev/null +++ b/vendor/google.golang.org/grpc/stats/grpc_testing/test.pb.go @@ -0,0 +1,225 @@ +// Code generated by protoc-gen-go. +// source: test.proto +// DO NOT EDIT! + +/* +Package grpc_testing is a generated protocol buffer package. + +It is generated from these files: + test.proto + +It has these top-level messages: + SimpleRequest + SimpleResponse +*/ +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Unary request. +type SimpleRequest struct { + Id int32 `protobuf:"varint,2,opt,name=id" json:"id,omitempty"` +} + +func (m *SimpleRequest) Reset() { *m = SimpleRequest{} } +func (m *SimpleRequest) String() string { return proto.CompactTextString(m) } +func (*SimpleRequest) ProtoMessage() {} +func (*SimpleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Unary response, as configured by the request. +type SimpleResponse struct { + Id int32 `protobuf:"varint,3,opt,name=id" json:"id,omitempty"` +} + +func (m *SimpleResponse) Reset() { *m = SimpleResponse{} } +func (m *SimpleResponse) String() string { return proto.CompactTextString(m) } +func (*SimpleResponse) ProtoMessage() {} +func (*SimpleResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func init() { + proto.RegisterType((*SimpleRequest)(nil), "grpc.testing.SimpleRequest") + proto.RegisterType((*SimpleResponse)(nil), "grpc.testing.SimpleResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for TestService service + +type TestServiceClient interface { + // One request followed by one response. + // The server returns the client id as-is. + UnaryCall(ctx context.Context, in *SimpleRequest, opts ...grpc.CallOption) (*SimpleResponse, error) + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + FullDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_FullDuplexCallClient, error) +} + +type testServiceClient struct { + cc *grpc.ClientConn +} + +func NewTestServiceClient(cc *grpc.ClientConn) TestServiceClient { + return &testServiceClient{cc} +} + +func (c *testServiceClient) UnaryCall(ctx context.Context, in *SimpleRequest, opts ...grpc.CallOption) (*SimpleResponse, error) { + out := new(SimpleResponse) + err := grpc.Invoke(ctx, "/grpc.testing.TestService/UnaryCall", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testServiceClient) FullDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_FullDuplexCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[0], c.cc, "/grpc.testing.TestService/FullDuplexCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceFullDuplexCallClient{stream} + return x, nil +} + +type TestService_FullDuplexCallClient interface { + Send(*SimpleRequest) error + Recv() (*SimpleResponse, error) + grpc.ClientStream +} + +type testServiceFullDuplexCallClient struct { + grpc.ClientStream +} + +func (x *testServiceFullDuplexCallClient) Send(m *SimpleRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *testServiceFullDuplexCallClient) Recv() (*SimpleResponse, error) { + m := new(SimpleResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for TestService service + +type TestServiceServer interface { + // One request followed by one response. + // The server returns the client id as-is. + UnaryCall(context.Context, *SimpleRequest) (*SimpleResponse, error) + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + FullDuplexCall(TestService_FullDuplexCallServer) error +} + +func RegisterTestServiceServer(s *grpc.Server, srv TestServiceServer) { + s.RegisterService(&_TestService_serviceDesc, srv) +} + +func _TestService_UnaryCall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SimpleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestServiceServer).UnaryCall(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.TestService/UnaryCall", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestServiceServer).UnaryCall(ctx, req.(*SimpleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestService_FullDuplexCall_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(TestServiceServer).FullDuplexCall(&testServiceFullDuplexCallServer{stream}) +} + +type TestService_FullDuplexCallServer interface { + Send(*SimpleResponse) error + Recv() (*SimpleRequest, error) + grpc.ServerStream +} + +type testServiceFullDuplexCallServer struct { + grpc.ServerStream +} + +func (x *testServiceFullDuplexCallServer) Send(m *SimpleResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *testServiceFullDuplexCallServer) Recv() (*SimpleRequest, error) { + m := new(SimpleRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _TestService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testing.TestService", + HandlerType: (*TestServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UnaryCall", + Handler: _TestService_UnaryCall_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "FullDuplexCall", + Handler: _TestService_FullDuplexCall_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "test.proto", +} + +func init() { proto.RegisterFile("test.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 167 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0x49, 0x2d, 0x2e, + 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x49, 0x2f, 0x2a, 0x48, 0xd6, 0x03, 0x09, 0x64, + 0xe6, 0xa5, 0x2b, 0xc9, 0x73, 0xf1, 0x06, 0x67, 0xe6, 0x16, 0xe4, 0xa4, 0x06, 0xa5, 0x16, 0x96, + 0xa6, 0x16, 0x97, 0x08, 0xf1, 0x71, 0x31, 0x65, 0xa6, 0x48, 0x30, 0x29, 0x30, 0x6a, 0xb0, 0x06, + 0x31, 0x65, 0xa6, 0x28, 0x29, 0x70, 0xf1, 0xc1, 0x14, 0x14, 0x17, 0xe4, 0xe7, 0x15, 0xa7, 0x42, + 0x55, 0x30, 0xc3, 0x54, 0x18, 0x2d, 0x63, 0xe4, 0xe2, 0x0e, 0x49, 0x2d, 0x2e, 0x09, 0x4e, 0x2d, + 0x2a, 0xcb, 0x4c, 0x4e, 0x15, 0x72, 0xe3, 0xe2, 0x0c, 0xcd, 0x4b, 0x2c, 0xaa, 0x74, 0x4e, 0xcc, + 0xc9, 0x11, 0x92, 0xd6, 0x43, 0xb6, 0x4e, 0x0f, 0xc5, 0x2e, 0x29, 0x19, 0xec, 0x92, 0x50, 0x7b, + 0xfc, 0xb9, 0xf8, 0xdc, 0x4a, 0x73, 0x72, 0x5c, 0x4a, 0x0b, 0x72, 0x52, 0x2b, 0x28, 0x34, 0x4c, + 0x83, 0xd1, 0x80, 0x31, 0x89, 0x0d, 0x1c, 0x00, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8d, + 0x82, 0x5b, 0xdd, 0x0e, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/stats/grpc_testing/test.proto b/vendor/google.golang.org/grpc/stats/grpc_testing/test.proto new file mode 100644 index 0000000..54e6f74 --- /dev/null +++ b/vendor/google.golang.org/grpc/stats/grpc_testing/test.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; + +package grpc.testing; + +message SimpleRequest { + int32 id = 2; +} + +message SimpleResponse { + int32 id = 3; +} + +// A simple test service. +service TestService { + // One request followed by one response. + // The server returns the client id as-is. + rpc UnaryCall(SimpleRequest) returns (SimpleResponse); + + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + rpc FullDuplexCall(stream SimpleRequest) returns (stream SimpleResponse); +} diff --git a/vendor/google.golang.org/grpc/stats/handlers.go b/vendor/google.golang.org/grpc/stats/handlers.go new file mode 100644 index 0000000..26e1a8e --- /dev/null +++ b/vendor/google.golang.org/grpc/stats/handlers.go @@ -0,0 +1,76 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package stats + +import ( + "net" + + "golang.org/x/net/context" +) + +// ConnTagInfo defines the relevant information needed by connection context tagger. +type ConnTagInfo struct { + // RemoteAddr is the remote address of the corresponding connection. + RemoteAddr net.Addr + // LocalAddr is the local address of the corresponding connection. + LocalAddr net.Addr + // TODO add QOS related fields. +} + +// RPCTagInfo defines the relevant information needed by RPC context tagger. +type RPCTagInfo struct { + // FullMethodName is the RPC method in the format of /package.service/method. + FullMethodName string +} + +// Handler defines the interface for the related stats handling (e.g., RPCs, connections). +type Handler interface { + // TagRPC can attach some information to the given context. + // The returned context is used in the rest lifetime of the RPC. + TagRPC(context.Context, *RPCTagInfo) context.Context + // HandleRPC processes the RPC stats. + HandleRPC(context.Context, RPCStats) + + // TagConn can attach some information to the given context. + // The returned context will be used for stats handling. + // For conn stats handling, the context used in HandleConn for this + // connection will be derived from the context returned. + // For RPC stats handling, + // - On server side, the context used in HandleRPC for all RPCs on this + // connection will be derived from the context returned. + // - On client side, the context is not derived from the context returned. + TagConn(context.Context, *ConnTagInfo) context.Context + // HandleConn processes the Conn stats. + HandleConn(context.Context, ConnStats) +} diff --git a/vendor/google.golang.org/grpc/stats/stats.go b/vendor/google.golang.org/grpc/stats/stats.go new file mode 100644 index 0000000..a82448a --- /dev/null +++ b/vendor/google.golang.org/grpc/stats/stats.go @@ -0,0 +1,223 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package stats is for collecting and reporting various network and RPC stats. +// This package is for monitoring purpose only. All fields are read-only. +// All APIs are experimental. +package stats // import "google.golang.org/grpc/stats" + +import ( + "net" + "time" +) + +// RPCStats contains stats information about RPCs. +type RPCStats interface { + isRPCStats() + // IsClient returns true if this RPCStats is from client side. + IsClient() bool +} + +// Begin contains stats when an RPC begins. +// FailFast are only valid if Client is true. +type Begin struct { + // Client is true if this Begin is from client side. + Client bool + // BeginTime is the time when the RPC begins. + BeginTime time.Time + // FailFast indicates if this RPC is failfast. + FailFast bool +} + +// IsClient indicates if this is from client side. +func (s *Begin) IsClient() bool { return s.Client } + +func (s *Begin) isRPCStats() {} + +// InPayload contains the information for an incoming payload. +type InPayload struct { + // Client is true if this InPayload is from client side. + Client bool + // Payload is the payload with original type. + Payload interface{} + // Data is the serialized message payload. + Data []byte + // Length is the length of uncompressed data. + Length int + // WireLength is the length of data on wire (compressed, signed, encrypted). + WireLength int + // RecvTime is the time when the payload is received. + RecvTime time.Time +} + +// IsClient indicates if this is from client side. +func (s *InPayload) IsClient() bool { return s.Client } + +func (s *InPayload) isRPCStats() {} + +// InHeader contains stats when a header is received. +// FullMethod, addresses and Compression are only valid if Client is false. +type InHeader struct { + // Client is true if this InHeader is from client side. + Client bool + // WireLength is the wire length of header. + WireLength int + + // FullMethod is the full RPC method string, i.e., /package.service/method. + FullMethod string + // RemoteAddr is the remote address of the corresponding connection. + RemoteAddr net.Addr + // LocalAddr is the local address of the corresponding connection. + LocalAddr net.Addr + // Compression is the compression algorithm used for the RPC. + Compression string +} + +// IsClient indicates if this is from client side. +func (s *InHeader) IsClient() bool { return s.Client } + +func (s *InHeader) isRPCStats() {} + +// InTrailer contains stats when a trailer is received. +type InTrailer struct { + // Client is true if this InTrailer is from client side. + Client bool + // WireLength is the wire length of trailer. + WireLength int +} + +// IsClient indicates if this is from client side. +func (s *InTrailer) IsClient() bool { return s.Client } + +func (s *InTrailer) isRPCStats() {} + +// OutPayload contains the information for an outgoing payload. +type OutPayload struct { + // Client is true if this OutPayload is from client side. + Client bool + // Payload is the payload with original type. + Payload interface{} + // Data is the serialized message payload. + Data []byte + // Length is the length of uncompressed data. + Length int + // WireLength is the length of data on wire (compressed, signed, encrypted). + WireLength int + // SentTime is the time when the payload is sent. + SentTime time.Time +} + +// IsClient indicates if this is from client side. +func (s *OutPayload) IsClient() bool { return s.Client } + +func (s *OutPayload) isRPCStats() {} + +// OutHeader contains stats when a header is sent. +// FullMethod, addresses and Compression are only valid if Client is true. +type OutHeader struct { + // Client is true if this OutHeader is from client side. + Client bool + // WireLength is the wire length of header. + WireLength int + + // FullMethod is the full RPC method string, i.e., /package.service/method. + FullMethod string + // RemoteAddr is the remote address of the corresponding connection. + RemoteAddr net.Addr + // LocalAddr is the local address of the corresponding connection. + LocalAddr net.Addr + // Compression is the compression algorithm used for the RPC. + Compression string +} + +// IsClient indicates if this is from client side. +func (s *OutHeader) IsClient() bool { return s.Client } + +func (s *OutHeader) isRPCStats() {} + +// OutTrailer contains stats when a trailer is sent. +type OutTrailer struct { + // Client is true if this OutTrailer is from client side. + Client bool + // WireLength is the wire length of trailer. + WireLength int +} + +// IsClient indicates if this is from client side. +func (s *OutTrailer) IsClient() bool { return s.Client } + +func (s *OutTrailer) isRPCStats() {} + +// End contains stats when an RPC ends. +type End struct { + // Client is true if this End is from client side. + Client bool + // EndTime is the time when the RPC ends. + EndTime time.Time + // Error is the error just happened. Its type is gRPC error. + Error error +} + +// IsClient indicates if this is from client side. +func (s *End) IsClient() bool { return s.Client } + +func (s *End) isRPCStats() {} + +// ConnStats contains stats information about connections. +type ConnStats interface { + isConnStats() + // IsClient returns true if this ConnStats is from client side. + IsClient() bool +} + +// ConnBegin contains the stats of a connection when it is established. +type ConnBegin struct { + // Client is true if this ConnBegin is from client side. + Client bool +} + +// IsClient indicates if this is from client side. +func (s *ConnBegin) IsClient() bool { return s.Client } + +func (s *ConnBegin) isConnStats() {} + +// ConnEnd contains the stats of a connection when it ends. +type ConnEnd struct { + // Client is true if this ConnEnd is from client side. + Client bool +} + +// IsClient indicates if this is from client side. +func (s *ConnEnd) IsClient() bool { return s.Client } + +func (s *ConnEnd) isConnStats() {} diff --git a/vendor/google.golang.org/grpc/stats/stats_test.go b/vendor/google.golang.org/grpc/stats/stats_test.go new file mode 100644 index 0000000..3e5424b --- /dev/null +++ b/vendor/google.golang.org/grpc/stats/stats_test.go @@ -0,0 +1,981 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package stats_test + +import ( + "fmt" + "io" + "net" + "reflect" + "sync" + "testing" + "time" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/stats" + testpb "google.golang.org/grpc/stats/grpc_testing" +) + +func init() { + grpc.EnableTracing = false +} + +type connCtxKey struct{} +type rpcCtxKey struct{} + +var ( + // For headers: + testMetadata = metadata.MD{ + "key1": []string{"value1"}, + "key2": []string{"value2"}, + } + // For trailers: + testTrailerMetadata = metadata.MD{ + "tkey1": []string{"trailerValue1"}, + "tkey2": []string{"trailerValue2"}, + } + // The id for which the service handler should return error. + errorID int32 = 32202 +) + +type testServer struct{} + +func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + md, ok := metadata.FromContext(ctx) + if ok { + if err := grpc.SendHeader(ctx, md); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SendHeader(_, %v) = %v, want <nil>", md, err) + } + if err := grpc.SetTrailer(ctx, testTrailerMetadata); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SetTrailer(_, %v) = %v, want <nil>", testTrailerMetadata, err) + } + } + + if in.Id == errorID { + return nil, fmt.Errorf("got error id: %v", in.Id) + } + + return &testpb.SimpleResponse{Id: in.Id}, nil +} + +func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServer) error { + md, ok := metadata.FromContext(stream.Context()) + if ok { + if err := stream.SendHeader(md); err != nil { + return grpc.Errorf(grpc.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) + } + stream.SetTrailer(testTrailerMetadata) + } + for { + in, err := stream.Recv() + if err == io.EOF { + // read done. + return nil + } + if err != nil { + return err + } + + if in.Id == errorID { + return fmt.Errorf("got error id: %v", in.Id) + } + + if err := stream.Send(&testpb.SimpleResponse{Id: in.Id}); err != nil { + return err + } + } +} + +// test is an end-to-end test. It should be created with the newTest +// func, modified as needed, and then started with its startServer method. +// It should be cleaned up with the tearDown method. +type test struct { + t *testing.T + compress string + clientStatsHandler stats.Handler + serverStatsHandler stats.Handler + + testServer testpb.TestServiceServer // nil means none + // srv and srvAddr are set once startServer is called. + srv *grpc.Server + srvAddr string + + cc *grpc.ClientConn // nil until requested via clientConn +} + +func (te *test) tearDown() { + if te.cc != nil { + te.cc.Close() + te.cc = nil + } + te.srv.Stop() +} + +type testConfig struct { + compress string +} + +// newTest returns a new test using the provided testing.T and +// environment. It is returned with default values. Tests should +// modify it before calling its startServer and clientConn methods. +func newTest(t *testing.T, tc *testConfig, ch stats.Handler, sh stats.Handler) *test { + te := &test{ + t: t, + compress: tc.compress, + clientStatsHandler: ch, + serverStatsHandler: sh, + } + return te +} + +// startServer starts a gRPC server listening. Callers should defer a +// call to te.tearDown to clean up. +func (te *test) startServer(ts testpb.TestServiceServer) { + te.testServer = ts + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + te.t.Fatalf("Failed to listen: %v", err) + } + var opts []grpc.ServerOption + if te.compress == "gzip" { + opts = append(opts, + grpc.RPCCompressor(grpc.NewGZIPCompressor()), + grpc.RPCDecompressor(grpc.NewGZIPDecompressor()), + ) + } + if te.serverStatsHandler != nil { + opts = append(opts, grpc.StatsHandler(te.serverStatsHandler)) + } + s := grpc.NewServer(opts...) + te.srv = s + if te.testServer != nil { + testpb.RegisterTestServiceServer(s, te.testServer) + } + _, port, err := net.SplitHostPort(lis.Addr().String()) + if err != nil { + te.t.Fatalf("Failed to parse listener address: %v", err) + } + addr := "127.0.0.1:" + port + + go s.Serve(lis) + te.srvAddr = addr +} + +func (te *test) clientConn() *grpc.ClientConn { + if te.cc != nil { + return te.cc + } + opts := []grpc.DialOption{grpc.WithInsecure(), grpc.WithBlock()} + if te.compress == "gzip" { + opts = append(opts, + grpc.WithCompressor(grpc.NewGZIPCompressor()), + grpc.WithDecompressor(grpc.NewGZIPDecompressor()), + ) + } + if te.clientStatsHandler != nil { + opts = append(opts, grpc.WithStatsHandler(te.clientStatsHandler)) + } + + var err error + te.cc, err = grpc.Dial(te.srvAddr, opts...) + if err != nil { + te.t.Fatalf("Dial(%q) = %v", te.srvAddr, err) + } + return te.cc +} + +type rpcConfig struct { + count int // Number of requests and responses for streaming RPCs. + success bool // Whether the RPC should succeed or return error. + failfast bool + streaming bool // Whether the rpc should be a streaming RPC. +} + +func (te *test) doUnaryCall(c *rpcConfig) (*testpb.SimpleRequest, *testpb.SimpleResponse, error) { + var ( + resp *testpb.SimpleResponse + req *testpb.SimpleRequest + err error + ) + tc := testpb.NewTestServiceClient(te.clientConn()) + if c.success { + req = &testpb.SimpleRequest{Id: errorID + 1} + } else { + req = &testpb.SimpleRequest{Id: errorID} + } + ctx := metadata.NewContext(context.Background(), testMetadata) + + resp, err = tc.UnaryCall(ctx, req, grpc.FailFast(c.failfast)) + return req, resp, err +} + +func (te *test) doFullDuplexCallRoundtrip(c *rpcConfig) ([]*testpb.SimpleRequest, []*testpb.SimpleResponse, error) { + var ( + reqs []*testpb.SimpleRequest + resps []*testpb.SimpleResponse + err error + ) + tc := testpb.NewTestServiceClient(te.clientConn()) + stream, err := tc.FullDuplexCall(metadata.NewContext(context.Background(), testMetadata), grpc.FailFast(c.failfast)) + if err != nil { + return reqs, resps, err + } + var startID int32 + if !c.success { + startID = errorID + } + for i := 0; i < c.count; i++ { + req := &testpb.SimpleRequest{ + Id: int32(i) + startID, + } + reqs = append(reqs, req) + if err = stream.Send(req); err != nil { + return reqs, resps, err + } + var resp *testpb.SimpleResponse + if resp, err = stream.Recv(); err != nil { + return reqs, resps, err + } + resps = append(resps, resp) + } + if err = stream.CloseSend(); err != nil && err != io.EOF { + return reqs, resps, err + } + if _, err = stream.Recv(); err != io.EOF { + return reqs, resps, err + } + + return reqs, resps, nil +} + +type expectedData struct { + method string + serverAddr string + compression string + reqIdx int + requests []*testpb.SimpleRequest + respIdx int + responses []*testpb.SimpleResponse + err error + failfast bool +} + +type gotData struct { + ctx context.Context + client bool + s interface{} // This could be RPCStats or ConnStats. +} + +const ( + begin int = iota + end + inPayload + inHeader + inTrailer + outPayload + outHeader + outTrailer + connbegin + connend +) + +func checkBegin(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.Begin + ) + if st, ok = d.s.(*stats.Begin); !ok { + t.Fatalf("got %T, want Begin", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + if st.BeginTime.IsZero() { + t.Fatalf("st.BeginTime = %v, want <non-zero>", st.BeginTime) + } + if d.client { + if st.FailFast != e.failfast { + t.Fatalf("st.FailFast = %v, want %v", st.FailFast, e.failfast) + } + } +} + +func checkInHeader(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.InHeader + ) + if st, ok = d.s.(*stats.InHeader); !ok { + t.Fatalf("got %T, want InHeader", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + // TODO check real length, not just > 0. + if st.WireLength <= 0 { + t.Fatalf("st.Lenght = 0, want > 0") + } + if !d.client { + if st.FullMethod != e.method { + t.Fatalf("st.FullMethod = %s, want %v", st.FullMethod, e.method) + } + if st.LocalAddr.String() != e.serverAddr { + t.Fatalf("st.LocalAddr = %v, want %v", st.LocalAddr, e.serverAddr) + } + if st.Compression != e.compression { + t.Fatalf("st.Compression = %v, want %v", st.Compression, e.compression) + } + + if connInfo, ok := d.ctx.Value(connCtxKey{}).(*stats.ConnTagInfo); ok { + if connInfo.RemoteAddr != st.RemoteAddr { + t.Fatalf("connInfo.RemoteAddr = %v, want %v", connInfo.RemoteAddr, st.RemoteAddr) + } + if connInfo.LocalAddr != st.LocalAddr { + t.Fatalf("connInfo.LocalAddr = %v, want %v", connInfo.LocalAddr, st.LocalAddr) + } + } else { + t.Fatalf("got context %v, want one with connCtxKey", d.ctx) + } + if rpcInfo, ok := d.ctx.Value(rpcCtxKey{}).(*stats.RPCTagInfo); ok { + if rpcInfo.FullMethodName != st.FullMethod { + t.Fatalf("rpcInfo.FullMethod = %s, want %v", rpcInfo.FullMethodName, st.FullMethod) + } + } else { + t.Fatalf("got context %v, want one with rpcCtxKey", d.ctx) + } + } +} + +func checkInPayload(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.InPayload + ) + if st, ok = d.s.(*stats.InPayload); !ok { + t.Fatalf("got %T, want InPayload", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + if d.client { + b, err := proto.Marshal(e.responses[e.respIdx]) + if err != nil { + t.Fatalf("failed to marshal message: %v", err) + } + if reflect.TypeOf(st.Payload) != reflect.TypeOf(e.responses[e.respIdx]) { + t.Fatalf("st.Payload = %T, want %T", st.Payload, e.responses[e.respIdx]) + } + e.respIdx++ + if string(st.Data) != string(b) { + t.Fatalf("st.Data = %v, want %v", st.Data, b) + } + if st.Length != len(b) { + t.Fatalf("st.Lenght = %v, want %v", st.Length, len(b)) + } + } else { + b, err := proto.Marshal(e.requests[e.reqIdx]) + if err != nil { + t.Fatalf("failed to marshal message: %v", err) + } + if reflect.TypeOf(st.Payload) != reflect.TypeOf(e.requests[e.reqIdx]) { + t.Fatalf("st.Payload = %T, want %T", st.Payload, e.requests[e.reqIdx]) + } + e.reqIdx++ + if string(st.Data) != string(b) { + t.Fatalf("st.Data = %v, want %v", st.Data, b) + } + if st.Length != len(b) { + t.Fatalf("st.Lenght = %v, want %v", st.Length, len(b)) + } + } + // TODO check WireLength and ReceivedTime. + if st.RecvTime.IsZero() { + t.Fatalf("st.ReceivedTime = %v, want <non-zero>", st.RecvTime) + } +} + +func checkInTrailer(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.InTrailer + ) + if st, ok = d.s.(*stats.InTrailer); !ok { + t.Fatalf("got %T, want InTrailer", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + // TODO check real length, not just > 0. + if st.WireLength <= 0 { + t.Fatalf("st.Lenght = 0, want > 0") + } +} + +func checkOutHeader(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.OutHeader + ) + if st, ok = d.s.(*stats.OutHeader); !ok { + t.Fatalf("got %T, want OutHeader", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + // TODO check real length, not just > 0. + if st.WireLength <= 0 { + t.Fatalf("st.Lenght = 0, want > 0") + } + if d.client { + if st.FullMethod != e.method { + t.Fatalf("st.FullMethod = %s, want %v", st.FullMethod, e.method) + } + if st.RemoteAddr.String() != e.serverAddr { + t.Fatalf("st.RemoteAddr = %v, want %v", st.RemoteAddr, e.serverAddr) + } + if st.Compression != e.compression { + t.Fatalf("st.Compression = %v, want %v", st.Compression, e.compression) + } + + if rpcInfo, ok := d.ctx.Value(rpcCtxKey{}).(*stats.RPCTagInfo); ok { + if rpcInfo.FullMethodName != st.FullMethod { + t.Fatalf("rpcInfo.FullMethod = %s, want %v", rpcInfo.FullMethodName, st.FullMethod) + } + } else { + t.Fatalf("got context %v, want one with rpcCtxKey", d.ctx) + } + } +} + +func checkOutPayload(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.OutPayload + ) + if st, ok = d.s.(*stats.OutPayload); !ok { + t.Fatalf("got %T, want OutPayload", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + if d.client { + b, err := proto.Marshal(e.requests[e.reqIdx]) + if err != nil { + t.Fatalf("failed to marshal message: %v", err) + } + if reflect.TypeOf(st.Payload) != reflect.TypeOf(e.requests[e.reqIdx]) { + t.Fatalf("st.Payload = %T, want %T", st.Payload, e.requests[e.reqIdx]) + } + e.reqIdx++ + if string(st.Data) != string(b) { + t.Fatalf("st.Data = %v, want %v", st.Data, b) + } + if st.Length != len(b) { + t.Fatalf("st.Lenght = %v, want %v", st.Length, len(b)) + } + } else { + b, err := proto.Marshal(e.responses[e.respIdx]) + if err != nil { + t.Fatalf("failed to marshal message: %v", err) + } + if reflect.TypeOf(st.Payload) != reflect.TypeOf(e.responses[e.respIdx]) { + t.Fatalf("st.Payload = %T, want %T", st.Payload, e.responses[e.respIdx]) + } + e.respIdx++ + if string(st.Data) != string(b) { + t.Fatalf("st.Data = %v, want %v", st.Data, b) + } + if st.Length != len(b) { + t.Fatalf("st.Lenght = %v, want %v", st.Length, len(b)) + } + } + // TODO check WireLength and ReceivedTime. + if st.SentTime.IsZero() { + t.Fatalf("st.SentTime = %v, want <non-zero>", st.SentTime) + } +} + +func checkOutTrailer(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.OutTrailer + ) + if st, ok = d.s.(*stats.OutTrailer); !ok { + t.Fatalf("got %T, want OutTrailer", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + if st.Client { + t.Fatalf("st IsClient = true, want false") + } + // TODO check real length, not just > 0. + if st.WireLength <= 0 { + t.Fatalf("st.Lenght = 0, want > 0") + } +} + +func checkEnd(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.End + ) + if st, ok = d.s.(*stats.End); !ok { + t.Fatalf("got %T, want End", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + if st.EndTime.IsZero() { + t.Fatalf("st.EndTime = %v, want <non-zero>", st.EndTime) + } + if grpc.Code(st.Error) != grpc.Code(e.err) || grpc.ErrorDesc(st.Error) != grpc.ErrorDesc(e.err) { + t.Fatalf("st.Error = %v, want %v", st.Error, e.err) + } +} + +func checkConnBegin(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.ConnBegin + ) + if st, ok = d.s.(*stats.ConnBegin); !ok { + t.Fatalf("got %T, want ConnBegin", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + st.IsClient() // TODO remove this. +} + +func checkConnEnd(t *testing.T, d *gotData, e *expectedData) { + var ( + ok bool + st *stats.ConnEnd + ) + if st, ok = d.s.(*stats.ConnEnd); !ok { + t.Fatalf("got %T, want ConnEnd", d.s) + } + if d.ctx == nil { + t.Fatalf("d.ctx = nil, want <non-nil>") + } + st.IsClient() // TODO remove this. +} + +type statshandler struct { + mu sync.Mutex + gotRPC []*gotData + gotConn []*gotData +} + +func (h *statshandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context { + return context.WithValue(ctx, connCtxKey{}, info) +} + +func (h *statshandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context { + return context.WithValue(ctx, rpcCtxKey{}, info) +} + +func (h *statshandler) HandleConn(ctx context.Context, s stats.ConnStats) { + h.mu.Lock() + defer h.mu.Unlock() + h.gotConn = append(h.gotConn, &gotData{ctx, s.IsClient(), s}) +} + +func (h *statshandler) HandleRPC(ctx context.Context, s stats.RPCStats) { + h.mu.Lock() + defer h.mu.Unlock() + h.gotRPC = append(h.gotRPC, &gotData{ctx, s.IsClient(), s}) +} + +func checkConnStats(t *testing.T, got []*gotData) { + if len(got) <= 0 || len(got)%2 != 0 { + for i, g := range got { + t.Errorf(" - %v, %T = %+v, ctx: %v", i, g.s, g.s, g.ctx) + } + t.Fatalf("got %v stats, want even positive number", len(got)) + } + // The first conn stats must be a ConnBegin. + checkConnBegin(t, got[0], nil) + // The last conn stats must be a ConnEnd. + checkConnEnd(t, got[len(got)-1], nil) +} + +func checkServerStats(t *testing.T, got []*gotData, expect *expectedData, checkFuncs []func(t *testing.T, d *gotData, e *expectedData)) { + if len(got) != len(checkFuncs) { + for i, g := range got { + t.Errorf(" - %v, %T", i, g.s) + } + t.Fatalf("got %v stats, want %v stats", len(got), len(checkFuncs)) + } + + var rpcctx context.Context + for i := 0; i < len(got); i++ { + if _, ok := got[i].s.(stats.RPCStats); ok { + if rpcctx != nil && got[i].ctx != rpcctx { + t.Fatalf("got different contexts with stats %T", got[i].s) + } + rpcctx = got[i].ctx + } + } + + for i, f := range checkFuncs { + f(t, got[i], expect) + } +} + +func testServerStats(t *testing.T, tc *testConfig, cc *rpcConfig, checkFuncs []func(t *testing.T, d *gotData, e *expectedData)) { + h := &statshandler{} + te := newTest(t, tc, nil, h) + te.startServer(&testServer{}) + defer te.tearDown() + + var ( + reqs []*testpb.SimpleRequest + resps []*testpb.SimpleResponse + err error + ) + if !cc.streaming { + req, resp, e := te.doUnaryCall(cc) + reqs = []*testpb.SimpleRequest{req} + resps = []*testpb.SimpleResponse{resp} + err = e + } else { + reqs, resps, err = te.doFullDuplexCallRoundtrip(cc) + } + if cc.success != (err == nil) { + t.Fatalf("cc.success: %v, got error: %v", cc.success, err) + } + te.cc.Close() + te.srv.GracefulStop() // Wait for the server to stop. + + for { + h.mu.Lock() + if len(h.gotRPC) >= len(checkFuncs) { + h.mu.Unlock() + break + } + h.mu.Unlock() + time.Sleep(10 * time.Millisecond) + } + + for { + h.mu.Lock() + if _, ok := h.gotConn[len(h.gotConn)-1].s.(*stats.ConnEnd); ok { + h.mu.Unlock() + break + } + h.mu.Unlock() + time.Sleep(10 * time.Millisecond) + } + + expect := &expectedData{ + serverAddr: te.srvAddr, + compression: tc.compress, + requests: reqs, + responses: resps, + err: err, + } + if !cc.streaming { + expect.method = "/grpc.testing.TestService/UnaryCall" + } else { + expect.method = "/grpc.testing.TestService/FullDuplexCall" + } + + checkConnStats(t, h.gotConn) + checkServerStats(t, h.gotRPC, expect, checkFuncs) +} + +func TestServerStatsUnaryRPC(t *testing.T) { + testServerStats(t, &testConfig{compress: ""}, &rpcConfig{success: true}, []func(t *testing.T, d *gotData, e *expectedData){ + checkInHeader, + checkBegin, + checkInPayload, + checkOutHeader, + checkOutPayload, + checkOutTrailer, + checkEnd, + }) +} + +func TestServerStatsUnaryRPCError(t *testing.T) { + testServerStats(t, &testConfig{compress: ""}, &rpcConfig{success: false}, []func(t *testing.T, d *gotData, e *expectedData){ + checkInHeader, + checkBegin, + checkInPayload, + checkOutHeader, + checkOutTrailer, + checkEnd, + }) +} + +func TestServerStatsStreamingRPC(t *testing.T) { + count := 5 + checkFuncs := []func(t *testing.T, d *gotData, e *expectedData){ + checkInHeader, + checkBegin, + checkOutHeader, + } + ioPayFuncs := []func(t *testing.T, d *gotData, e *expectedData){ + checkInPayload, + checkOutPayload, + } + for i := 0; i < count; i++ { + checkFuncs = append(checkFuncs, ioPayFuncs...) + } + checkFuncs = append(checkFuncs, + checkOutTrailer, + checkEnd, + ) + testServerStats(t, &testConfig{compress: "gzip"}, &rpcConfig{count: count, success: true, streaming: true}, checkFuncs) +} + +func TestServerStatsStreamingRPCError(t *testing.T) { + count := 5 + testServerStats(t, &testConfig{compress: "gzip"}, &rpcConfig{count: count, success: false, streaming: true}, []func(t *testing.T, d *gotData, e *expectedData){ + checkInHeader, + checkBegin, + checkOutHeader, + checkInPayload, + checkOutTrailer, + checkEnd, + }) +} + +type checkFuncWithCount struct { + f func(t *testing.T, d *gotData, e *expectedData) + c int // expected count +} + +func checkClientStats(t *testing.T, got []*gotData, expect *expectedData, checkFuncs map[int]*checkFuncWithCount) { + var expectLen int + for _, v := range checkFuncs { + expectLen += v.c + } + if len(got) != expectLen { + for i, g := range got { + t.Errorf(" - %v, %T", i, g.s) + } + t.Fatalf("got %v stats, want %v stats", len(got), expectLen) + } + + var rpcctx context.Context + for i := 0; i < len(got); i++ { + if _, ok := got[i].s.(stats.RPCStats); ok { + if rpcctx != nil && got[i].ctx != rpcctx { + t.Fatalf("got different contexts with stats %T", got[i].s) + } + rpcctx = got[i].ctx + } + } + + for _, s := range got { + switch s.s.(type) { + case *stats.Begin: + if checkFuncs[begin].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[begin].f(t, s, expect) + checkFuncs[begin].c-- + case *stats.OutHeader: + if checkFuncs[outHeader].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[outHeader].f(t, s, expect) + checkFuncs[outHeader].c-- + case *stats.OutPayload: + if checkFuncs[outPayload].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[outPayload].f(t, s, expect) + checkFuncs[outPayload].c-- + case *stats.InHeader: + if checkFuncs[inHeader].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[inHeader].f(t, s, expect) + checkFuncs[inHeader].c-- + case *stats.InPayload: + if checkFuncs[inPayload].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[inPayload].f(t, s, expect) + checkFuncs[inPayload].c-- + case *stats.InTrailer: + if checkFuncs[inTrailer].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[inTrailer].f(t, s, expect) + checkFuncs[inTrailer].c-- + case *stats.End: + if checkFuncs[end].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[end].f(t, s, expect) + checkFuncs[end].c-- + case *stats.ConnBegin: + if checkFuncs[connbegin].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[connbegin].f(t, s, expect) + checkFuncs[connbegin].c-- + case *stats.ConnEnd: + if checkFuncs[connend].c <= 0 { + t.Fatalf("unexpected stats: %T", s.s) + } + checkFuncs[connend].f(t, s, expect) + checkFuncs[connend].c-- + default: + t.Fatalf("unexpected stats: %T", s.s) + } + } +} + +func testClientStats(t *testing.T, tc *testConfig, cc *rpcConfig, checkFuncs map[int]*checkFuncWithCount) { + h := &statshandler{} + te := newTest(t, tc, h, nil) + te.startServer(&testServer{}) + defer te.tearDown() + + var ( + reqs []*testpb.SimpleRequest + resps []*testpb.SimpleResponse + err error + ) + if !cc.streaming { + req, resp, e := te.doUnaryCall(cc) + reqs = []*testpb.SimpleRequest{req} + resps = []*testpb.SimpleResponse{resp} + err = e + } else { + reqs, resps, err = te.doFullDuplexCallRoundtrip(cc) + } + if cc.success != (err == nil) { + t.Fatalf("cc.success: %v, got error: %v", cc.success, err) + } + te.cc.Close() + te.srv.GracefulStop() // Wait for the server to stop. + + lenRPCStats := 0 + for _, v := range checkFuncs { + lenRPCStats += v.c + } + for { + h.mu.Lock() + if len(h.gotRPC) >= lenRPCStats { + h.mu.Unlock() + break + } + h.mu.Unlock() + time.Sleep(10 * time.Millisecond) + } + + for { + h.mu.Lock() + if _, ok := h.gotConn[len(h.gotConn)-1].s.(*stats.ConnEnd); ok { + h.mu.Unlock() + break + } + h.mu.Unlock() + time.Sleep(10 * time.Millisecond) + } + + expect := &expectedData{ + serverAddr: te.srvAddr, + compression: tc.compress, + requests: reqs, + responses: resps, + failfast: cc.failfast, + err: err, + } + if !cc.streaming { + expect.method = "/grpc.testing.TestService/UnaryCall" + } else { + expect.method = "/grpc.testing.TestService/FullDuplexCall" + } + + checkConnStats(t, h.gotConn) + checkClientStats(t, h.gotRPC, expect, checkFuncs) +} + +func TestClientStatsUnaryRPC(t *testing.T) { + testClientStats(t, &testConfig{compress: ""}, &rpcConfig{success: true, failfast: false}, map[int]*checkFuncWithCount{ + begin: {checkBegin, 1}, + outHeader: {checkOutHeader, 1}, + outPayload: {checkOutPayload, 1}, + inHeader: {checkInHeader, 1}, + inPayload: {checkInPayload, 1}, + inTrailer: {checkInTrailer, 1}, + end: {checkEnd, 1}, + }) +} + +func TestClientStatsUnaryRPCError(t *testing.T) { + testClientStats(t, &testConfig{compress: ""}, &rpcConfig{success: false, failfast: false}, map[int]*checkFuncWithCount{ + begin: {checkBegin, 1}, + outHeader: {checkOutHeader, 1}, + outPayload: {checkOutPayload, 1}, + inHeader: {checkInHeader, 1}, + inTrailer: {checkInTrailer, 1}, + end: {checkEnd, 1}, + }) +} + +func TestClientStatsStreamingRPC(t *testing.T) { + count := 5 + testClientStats(t, &testConfig{compress: "gzip"}, &rpcConfig{count: count, success: true, failfast: false, streaming: true}, map[int]*checkFuncWithCount{ + begin: {checkBegin, 1}, + outHeader: {checkOutHeader, 1}, + outPayload: {checkOutPayload, count}, + inHeader: {checkInHeader, 1}, + inPayload: {checkInPayload, count}, + inTrailer: {checkInTrailer, 1}, + end: {checkEnd, 1}, + }) +} + +func TestClientStatsStreamingRPCError(t *testing.T) { + count := 5 + testClientStats(t, &testConfig{compress: "gzip"}, &rpcConfig{count: count, success: false, failfast: false, streaming: true}, map[int]*checkFuncWithCount{ + begin: {checkBegin, 1}, + outHeader: {checkOutHeader, 1}, + outPayload: {checkOutPayload, 1}, + inHeader: {checkInHeader, 1}, + inTrailer: {checkInTrailer, 1}, + end: {checkEnd, 1}, + }) +} diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go new file mode 100644 index 0000000..0ef2077 --- /dev/null +++ b/vendor/google.golang.org/grpc/stream.go @@ -0,0 +1,626 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "errors" + "io" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/trace" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/stats" + "google.golang.org/grpc/transport" +) + +// StreamHandler defines the handler called by gRPC server to complete the +// execution of a streaming RPC. +type StreamHandler func(srv interface{}, stream ServerStream) error + +// StreamDesc represents a streaming RPC service's method specification. +type StreamDesc struct { + StreamName string + Handler StreamHandler + + // At least one of these is true. + ServerStreams bool + ClientStreams bool +} + +// Stream defines the common interface a client or server stream has to satisfy. +type Stream interface { + // Context returns the context for this stream. + Context() context.Context + // SendMsg blocks until it sends m, the stream is done or the stream + // breaks. + // On error, it aborts the stream and returns an RPC status on client + // side. On server side, it simply returns the error to the caller. + // SendMsg is called by generated code. Also Users can call SendMsg + // directly when it is really needed in their use cases. + SendMsg(m interface{}) error + // RecvMsg blocks until it receives a message or the stream is + // done. On client side, it returns io.EOF when the stream is done. On + // any other error, it aborts the stream and returns an RPC status. On + // server side, it simply returns the error to the caller. + RecvMsg(m interface{}) error +} + +// ClientStream defines the interface a client stream has to satisfy. +type ClientStream interface { + // Header returns the header metadata received from the server if there + // is any. It blocks if the metadata is not ready to read. + Header() (metadata.MD, error) + // Trailer returns the trailer metadata from the server, if there is any. + // It must only be called after stream.CloseAndRecv has returned, or + // stream.Recv has returned a non-nil error (including io.EOF). + Trailer() metadata.MD + // CloseSend closes the send direction of the stream. It closes the stream + // when non-nil error is met. + CloseSend() error + Stream +} + +// NewClientStream creates a new Stream for the client side. This is called +// by generated code. +func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { + if cc.dopts.streamInt != nil { + return cc.dopts.streamInt(ctx, desc, cc, method, newClientStream, opts...) + } + return newClientStream(ctx, desc, cc, method, opts...) +} + +func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { + var ( + t transport.ClientTransport + s *transport.Stream + put func() + cancel context.CancelFunc + ) + c := defaultCallInfo + if mc, ok := cc.getMethodConfig(method); ok { + c.failFast = !mc.WaitForReady + if mc.Timeout > 0 { + ctx, cancel = context.WithTimeout(ctx, mc.Timeout) + } + } + for _, o := range opts { + if err := o.before(&c); err != nil { + return nil, toRPCErr(err) + } + } + callHdr := &transport.CallHdr{ + Host: cc.authority, + Method: method, + Flush: desc.ServerStreams && desc.ClientStreams, + } + if cc.dopts.cp != nil { + callHdr.SendCompress = cc.dopts.cp.Type() + } + var trInfo traceInfo + if EnableTracing { + trInfo.tr = trace.New("grpc.Sent."+methodFamily(method), method) + trInfo.firstLine.client = true + if deadline, ok := ctx.Deadline(); ok { + trInfo.firstLine.deadline = deadline.Sub(time.Now()) + } + trInfo.tr.LazyLog(&trInfo.firstLine, false) + ctx = trace.NewContext(ctx, trInfo.tr) + defer func() { + if err != nil { + // Need to call tr.finish() if error is returned. + // Because tr will not be returned to caller. + trInfo.tr.LazyPrintf("RPC: [%v]", err) + trInfo.tr.SetError() + trInfo.tr.Finish() + } + }() + } + sh := cc.dopts.copts.StatsHandler + if sh != nil { + ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method}) + begin := &stats.Begin{ + Client: true, + BeginTime: time.Now(), + FailFast: c.failFast, + } + sh.HandleRPC(ctx, begin) + } + defer func() { + if err != nil && sh != nil { + // Only handle end stats if err != nil. + end := &stats.End{ + Client: true, + Error: err, + } + sh.HandleRPC(ctx, end) + } + }() + gopts := BalancerGetOptions{ + BlockingWait: !c.failFast, + } + for { + t, put, err = cc.getTransport(ctx, gopts) + if err != nil { + // TODO(zhaoq): Probably revisit the error handling. + if _, ok := err.(*rpcError); ok { + return nil, err + } + if err == errConnClosing || err == errConnUnavailable { + if c.failFast { + return nil, Errorf(codes.Unavailable, "%v", err) + } + continue + } + // All the other errors are treated as Internal errors. + return nil, Errorf(codes.Internal, "%v", err) + } + + s, err = t.NewStream(ctx, callHdr) + if err != nil { + if put != nil { + put() + put = nil + } + if _, ok := err.(transport.ConnectionError); ok || err == transport.ErrStreamDrain { + if c.failFast { + return nil, toRPCErr(err) + } + continue + } + return nil, toRPCErr(err) + } + break + } + cs := &clientStream{ + opts: opts, + c: c, + desc: desc, + codec: cc.dopts.codec, + cp: cc.dopts.cp, + dc: cc.dopts.dc, + maxMsgSize: cc.dopts.maxMsgSize, + cancel: cancel, + + put: put, + t: t, + s: s, + p: &parser{r: s}, + + tracing: EnableTracing, + trInfo: trInfo, + + statsCtx: ctx, + statsHandler: cc.dopts.copts.StatsHandler, + } + if cc.dopts.cp != nil { + cs.cbuf = new(bytes.Buffer) + } + // Listen on ctx.Done() to detect cancellation and s.Done() to detect normal termination + // when there is no pending I/O operations on this stream. + go func() { + select { + case <-t.Error(): + // Incur transport error, simply exit. + case <-s.Done(): + // TODO: The trace of the RPC is terminated here when there is no pending + // I/O, which is probably not the optimal solution. + if s.StatusCode() == codes.OK { + cs.finish(nil) + } else { + cs.finish(Errorf(s.StatusCode(), "%s", s.StatusDesc())) + } + cs.closeTransportStream(nil) + case <-s.GoAway(): + cs.finish(errConnDrain) + cs.closeTransportStream(errConnDrain) + case <-s.Context().Done(): + err := s.Context().Err() + cs.finish(err) + cs.closeTransportStream(transport.ContextErr(err)) + } + }() + return cs, nil +} + +// clientStream implements a client side Stream. +type clientStream struct { + opts []CallOption + c callInfo + t transport.ClientTransport + s *transport.Stream + p *parser + desc *StreamDesc + codec Codec + cp Compressor + cbuf *bytes.Buffer + dc Decompressor + maxMsgSize int + cancel context.CancelFunc + + tracing bool // set to EnableTracing when the clientStream is created. + + mu sync.Mutex + put func() + closed bool + // trInfo.tr is set when the clientStream is created (if EnableTracing is true), + // and is set to nil when the clientStream's finish method is called. + trInfo traceInfo + + // statsCtx keeps the user context for stats handling. + // All stats collection should use the statsCtx (instead of the stream context) + // so that all the generated stats for a particular RPC can be associated in the processing phase. + statsCtx context.Context + statsHandler stats.Handler +} + +func (cs *clientStream) Context() context.Context { + return cs.s.Context() +} + +func (cs *clientStream) Header() (metadata.MD, error) { + m, err := cs.s.Header() + if err != nil { + if _, ok := err.(transport.ConnectionError); !ok { + cs.closeTransportStream(err) + } + } + return m, err +} + +func (cs *clientStream) Trailer() metadata.MD { + return cs.s.Trailer() +} + +func (cs *clientStream) SendMsg(m interface{}) (err error) { + if cs.tracing { + cs.mu.Lock() + if cs.trInfo.tr != nil { + cs.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) + } + cs.mu.Unlock() + } + // TODO Investigate how to signal the stats handling party. + // generate error stats if err != nil && err != io.EOF? + defer func() { + if err != nil { + cs.finish(err) + } + if err == nil { + return + } + if err == io.EOF { + // Specialize the process for server streaming. SendMesg is only called + // once when creating the stream object. io.EOF needs to be skipped when + // the rpc is early finished (before the stream object is created.). + // TODO: It is probably better to move this into the generated code. + if !cs.desc.ClientStreams && cs.desc.ServerStreams { + err = nil + } + return + } + if _, ok := err.(transport.ConnectionError); !ok { + cs.closeTransportStream(err) + } + err = toRPCErr(err) + }() + var outPayload *stats.OutPayload + if cs.statsHandler != nil { + outPayload = &stats.OutPayload{ + Client: true, + } + } + out, err := encode(cs.codec, m, cs.cp, cs.cbuf, outPayload) + defer func() { + if cs.cbuf != nil { + cs.cbuf.Reset() + } + }() + if err != nil { + return Errorf(codes.Internal, "grpc: %v", err) + } + err = cs.t.Write(cs.s, out, &transport.Options{Last: false}) + if err == nil && outPayload != nil { + outPayload.SentTime = time.Now() + cs.statsHandler.HandleRPC(cs.statsCtx, outPayload) + } + return err +} + +func (cs *clientStream) RecvMsg(m interface{}) (err error) { + defer func() { + if err != nil && cs.statsHandler != nil { + // Only generate End if err != nil. + // If err == nil, it's not the last RecvMsg. + // The last RecvMsg gets either an RPC error or io.EOF. + end := &stats.End{ + Client: true, + EndTime: time.Now(), + } + if err != io.EOF { + end.Error = toRPCErr(err) + } + cs.statsHandler.HandleRPC(cs.statsCtx, end) + } + }() + var inPayload *stats.InPayload + if cs.statsHandler != nil { + inPayload = &stats.InPayload{ + Client: true, + } + } + err = recv(cs.p, cs.codec, cs.s, cs.dc, m, cs.maxMsgSize, inPayload) + defer func() { + // err != nil indicates the termination of the stream. + if err != nil { + cs.finish(err) + } + }() + if err == nil { + if cs.tracing { + cs.mu.Lock() + if cs.trInfo.tr != nil { + cs.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) + } + cs.mu.Unlock() + } + if inPayload != nil { + cs.statsHandler.HandleRPC(cs.statsCtx, inPayload) + } + if !cs.desc.ClientStreams || cs.desc.ServerStreams { + return + } + // Special handling for client streaming rpc. + // This recv expects EOF or errors, so we don't collect inPayload. + err = recv(cs.p, cs.codec, cs.s, cs.dc, m, cs.maxMsgSize, nil) + cs.closeTransportStream(err) + if err == nil { + return toRPCErr(errors.New("grpc: client streaming protocol violation: get <nil>, want <EOF>")) + } + if err == io.EOF { + if cs.s.StatusCode() == codes.OK { + cs.finish(err) + return nil + } + return Errorf(cs.s.StatusCode(), "%s", cs.s.StatusDesc()) + } + return toRPCErr(err) + } + if _, ok := err.(transport.ConnectionError); !ok { + cs.closeTransportStream(err) + } + if err == io.EOF { + if cs.s.StatusCode() == codes.OK { + // Returns io.EOF to indicate the end of the stream. + return + } + return Errorf(cs.s.StatusCode(), "%s", cs.s.StatusDesc()) + } + return toRPCErr(err) +} + +func (cs *clientStream) CloseSend() (err error) { + err = cs.t.Write(cs.s, nil, &transport.Options{Last: true}) + defer func() { + if err != nil { + cs.finish(err) + } + }() + if err == nil || err == io.EOF { + return nil + } + if _, ok := err.(transport.ConnectionError); !ok { + cs.closeTransportStream(err) + } + err = toRPCErr(err) + return +} + +func (cs *clientStream) closeTransportStream(err error) { + cs.mu.Lock() + if cs.closed { + cs.mu.Unlock() + return + } + cs.closed = true + cs.mu.Unlock() + cs.t.CloseStream(cs.s, err) +} + +func (cs *clientStream) finish(err error) { + defer func() { + if cs.cancel != nil { + cs.cancel() + } + }() + cs.mu.Lock() + defer cs.mu.Unlock() + for _, o := range cs.opts { + o.after(&cs.c) + } + if cs.put != nil { + cs.put() + cs.put = nil + } + if !cs.tracing { + return + } + if cs.trInfo.tr != nil { + if err == nil || err == io.EOF { + cs.trInfo.tr.LazyPrintf("RPC: [OK]") + } else { + cs.trInfo.tr.LazyPrintf("RPC: [%v]", err) + cs.trInfo.tr.SetError() + } + cs.trInfo.tr.Finish() + cs.trInfo.tr = nil + } +} + +// ServerStream defines the interface a server stream has to satisfy. +type ServerStream interface { + // SetHeader sets the header metadata. It may be called multiple times. + // When call multiple times, all the provided metadata will be merged. + // All the metadata will be sent out when one of the following happens: + // - ServerStream.SendHeader() is called; + // - The first response is sent out; + // - An RPC status is sent out (error or success). + SetHeader(metadata.MD) error + // SendHeader sends the header metadata. + // The provided md and headers set by SetHeader() will be sent. + // It fails if called multiple times. + SendHeader(metadata.MD) error + // SetTrailer sets the trailer metadata which will be sent with the RPC status. + // When called more than once, all the provided metadata will be merged. + SetTrailer(metadata.MD) + Stream +} + +// serverStream implements a server side Stream. +type serverStream struct { + t transport.ServerTransport + s *transport.Stream + p *parser + codec Codec + cp Compressor + dc Decompressor + cbuf *bytes.Buffer + maxMsgSize int + statusCode codes.Code + statusDesc string + trInfo *traceInfo + + statsHandler stats.Handler + + mu sync.Mutex // protects trInfo.tr after the service handler runs. +} + +func (ss *serverStream) Context() context.Context { + return ss.s.Context() +} + +func (ss *serverStream) SetHeader(md metadata.MD) error { + if md.Len() == 0 { + return nil + } + return ss.s.SetHeader(md) +} + +func (ss *serverStream) SendHeader(md metadata.MD) error { + return ss.t.WriteHeader(ss.s, md) +} + +func (ss *serverStream) SetTrailer(md metadata.MD) { + if md.Len() == 0 { + return + } + ss.s.SetTrailer(md) + return +} + +func (ss *serverStream) SendMsg(m interface{}) (err error) { + defer func() { + if ss.trInfo != nil { + ss.mu.Lock() + if ss.trInfo.tr != nil { + if err == nil { + ss.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) + } else { + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.SetError() + } + } + ss.mu.Unlock() + } + }() + var outPayload *stats.OutPayload + if ss.statsHandler != nil { + outPayload = &stats.OutPayload{} + } + out, err := encode(ss.codec, m, ss.cp, ss.cbuf, outPayload) + defer func() { + if ss.cbuf != nil { + ss.cbuf.Reset() + } + }() + if err != nil { + err = Errorf(codes.Internal, "grpc: %v", err) + return err + } + if err := ss.t.Write(ss.s, out, &transport.Options{Last: false}); err != nil { + return toRPCErr(err) + } + if outPayload != nil { + outPayload.SentTime = time.Now() + ss.statsHandler.HandleRPC(ss.s.Context(), outPayload) + } + return nil +} + +func (ss *serverStream) RecvMsg(m interface{}) (err error) { + defer func() { + if ss.trInfo != nil { + ss.mu.Lock() + if ss.trInfo.tr != nil { + if err == nil { + ss.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) + } else if err != io.EOF { + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.SetError() + } + } + ss.mu.Unlock() + } + }() + var inPayload *stats.InPayload + if ss.statsHandler != nil { + inPayload = &stats.InPayload{} + } + if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxMsgSize, inPayload); err != nil { + if err == io.EOF { + return err + } + if err == io.ErrUnexpectedEOF { + err = Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) + } + return toRPCErr(err) + } + if inPayload != nil { + ss.statsHandler.HandleRPC(ss.s.Context(), inPayload) + } + return nil +} diff --git a/vendor/google.golang.org/grpc/stress/client/main.go b/vendor/google.golang.org/grpc/stress/client/main.go new file mode 100644 index 0000000..dff85ff --- /dev/null +++ b/vendor/google.golang.org/grpc/stress/client/main.go @@ -0,0 +1,347 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// client starts an interop client to do stress test and a metrics server to report qps. +package main + +import ( + "flag" + "fmt" + "math/rand" + "net" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/interop" + testpb "google.golang.org/grpc/interop/grpc_testing" + metricspb "google.golang.org/grpc/stress/grpc_testing" +) + +var ( + serverAddresses = flag.String("server_addresses", "localhost:8080", "a list of server addresses") + testCases = flag.String("test_cases", "", "a list of test cases along with the relative weights") + testDurationSecs = flag.Int("test_duration_secs", -1, "test duration in seconds") + numChannelsPerServer = flag.Int("num_channels_per_server", 1, "Number of channels (i.e connections) to each server") + numStubsPerChannel = flag.Int("num_stubs_per_channel", 1, "Number of client stubs per each connection to server") + metricsPort = flag.Int("metrics_port", 8081, "The port at which the stress client exposes QPS metrics") + useTLS = flag.Bool("use_tls", false, "Connection uses TLS if true, else plain TCP") + testCA = flag.Bool("use_test_ca", false, "Whether to replace platform root CAs with test CA as the CA root") + tlsServerName = flag.String("server_host_override", "foo.test.google.fr", "The server name use to verify the hostname returned by TLS handshake if it is not empty. Otherwise, --server_host is used.") + + // The test CA root cert file + testCAFile = "testdata/ca.pem" +) + +// testCaseWithWeight contains the test case type and its weight. +type testCaseWithWeight struct { + name string + weight int +} + +// parseTestCases converts test case string to a list of struct testCaseWithWeight. +func parseTestCases(testCaseString string) []testCaseWithWeight { + testCaseStrings := strings.Split(testCaseString, ",") + testCases := make([]testCaseWithWeight, len(testCaseStrings)) + for i, str := range testCaseStrings { + testCase := strings.Split(str, ":") + if len(testCase) != 2 { + panic(fmt.Sprintf("invalid test case with weight: %s", str)) + } + // Check if test case is supported. + switch testCase[0] { + case + "empty_unary", + "large_unary", + "client_streaming", + "server_streaming", + "ping_pong", + "empty_stream", + "timeout_on_sleeping_server", + "cancel_after_begin", + "cancel_after_first_response", + "status_code_and_message", + "custom_metadata": + default: + panic(fmt.Sprintf("unknown test type: %s", testCase[0])) + } + testCases[i].name = testCase[0] + w, err := strconv.Atoi(testCase[1]) + if err != nil { + panic(fmt.Sprintf("%v", err)) + } + testCases[i].weight = w + } + return testCases +} + +// weightedRandomTestSelector defines a weighted random selector for test case types. +type weightedRandomTestSelector struct { + tests []testCaseWithWeight + totalWeight int +} + +// newWeightedRandomTestSelector constructs a weightedRandomTestSelector with the given list of testCaseWithWeight. +func newWeightedRandomTestSelector(tests []testCaseWithWeight) *weightedRandomTestSelector { + var totalWeight int + for _, t := range tests { + totalWeight += t.weight + } + rand.Seed(time.Now().UnixNano()) + return &weightedRandomTestSelector{tests, totalWeight} +} + +func (selector weightedRandomTestSelector) getNextTest() string { + random := rand.Intn(selector.totalWeight) + var weightSofar int + for _, test := range selector.tests { + weightSofar += test.weight + if random < weightSofar { + return test.name + } + } + panic("no test case selected by weightedRandomTestSelector") +} + +// gauge stores the qps of one interop client (one stub). +type gauge struct { + mutex sync.RWMutex + val int64 +} + +func (g *gauge) set(v int64) { + g.mutex.Lock() + defer g.mutex.Unlock() + g.val = v +} + +func (g *gauge) get() int64 { + g.mutex.RLock() + defer g.mutex.RUnlock() + return g.val +} + +// server implements metrics server functions. +type server struct { + mutex sync.RWMutex + // gauges is a map from /stress_test/server_<n>/channel_<n>/stub_<n>/qps to its qps gauge. + gauges map[string]*gauge +} + +// newMetricsServer returns a new metrics server. +func newMetricsServer() *server { + return &server{gauges: make(map[string]*gauge)} +} + +// GetAllGauges returns all gauges. +func (s *server) GetAllGauges(in *metricspb.EmptyMessage, stream metricspb.MetricsService_GetAllGaugesServer) error { + s.mutex.RLock() + defer s.mutex.RUnlock() + + for name, gauge := range s.gauges { + if err := stream.Send(&metricspb.GaugeResponse{Name: name, Value: &metricspb.GaugeResponse_LongValue{LongValue: gauge.get()}}); err != nil { + return err + } + } + return nil +} + +// GetGauge returns the gauge for the given name. +func (s *server) GetGauge(ctx context.Context, in *metricspb.GaugeRequest) (*metricspb.GaugeResponse, error) { + s.mutex.RLock() + defer s.mutex.RUnlock() + + if g, ok := s.gauges[in.Name]; ok { + return &metricspb.GaugeResponse{Name: in.Name, Value: &metricspb.GaugeResponse_LongValue{LongValue: g.get()}}, nil + } + return nil, grpc.Errorf(codes.InvalidArgument, "gauge with name %s not found", in.Name) +} + +// createGauge creates a gauge using the given name in metrics server. +func (s *server) createGauge(name string) *gauge { + s.mutex.Lock() + defer s.mutex.Unlock() + + if _, ok := s.gauges[name]; ok { + // gauge already exists. + panic(fmt.Sprintf("gauge %s already exists", name)) + } + var g gauge + s.gauges[name] = &g + return &g +} + +func startServer(server *server, port int) { + lis, err := net.Listen("tcp", ":"+strconv.Itoa(port)) + if err != nil { + grpclog.Fatalf("failed to listen: %v", err) + } + + s := grpc.NewServer() + metricspb.RegisterMetricsServiceServer(s, server) + s.Serve(lis) + +} + +// performRPCs uses weightedRandomTestSelector to select test case and runs the tests. +func performRPCs(gauge *gauge, conn *grpc.ClientConn, selector *weightedRandomTestSelector, stop <-chan bool) { + client := testpb.NewTestServiceClient(conn) + var numCalls int64 + startTime := time.Now() + for { + test := selector.getNextTest() + switch test { + case "empty_unary": + interop.DoEmptyUnaryCall(client, grpc.FailFast(false)) + case "large_unary": + interop.DoLargeUnaryCall(client, grpc.FailFast(false)) + case "client_streaming": + interop.DoClientStreaming(client, grpc.FailFast(false)) + case "server_streaming": + interop.DoServerStreaming(client, grpc.FailFast(false)) + case "ping_pong": + interop.DoPingPong(client, grpc.FailFast(false)) + case "empty_stream": + interop.DoEmptyStream(client, grpc.FailFast(false)) + case "timeout_on_sleeping_server": + interop.DoTimeoutOnSleepingServer(client, grpc.FailFast(false)) + case "cancel_after_begin": + interop.DoCancelAfterBegin(client, grpc.FailFast(false)) + case "cancel_after_first_response": + interop.DoCancelAfterFirstResponse(client, grpc.FailFast(false)) + case "status_code_and_message": + interop.DoStatusCodeAndMessage(client, grpc.FailFast(false)) + case "custom_metadata": + interop.DoCustomMetadata(client, grpc.FailFast(false)) + } + numCalls++ + gauge.set(int64(float64(numCalls) / time.Since(startTime).Seconds())) + + select { + case <-stop: + return + default: + } + } +} + +func logParameterInfo(addresses []string, tests []testCaseWithWeight) { + grpclog.Printf("server_addresses: %s", *serverAddresses) + grpclog.Printf("test_cases: %s", *testCases) + grpclog.Printf("test_duration_secs: %d", *testDurationSecs) + grpclog.Printf("num_channels_per_server: %d", *numChannelsPerServer) + grpclog.Printf("num_stubs_per_channel: %d", *numStubsPerChannel) + grpclog.Printf("metrics_port: %d", *metricsPort) + grpclog.Printf("use_tls: %t", *useTLS) + grpclog.Printf("use_test_ca: %t", *testCA) + grpclog.Printf("server_host_override: %s", *tlsServerName) + + grpclog.Println("addresses:") + for i, addr := range addresses { + grpclog.Printf("%d. %s\n", i+1, addr) + } + grpclog.Println("tests:") + for i, test := range tests { + grpclog.Printf("%d. %v\n", i+1, test) + } +} + +func newConn(address string, useTLS, testCA bool, tlsServerName string) (*grpc.ClientConn, error) { + var opts []grpc.DialOption + if useTLS { + var sn string + if tlsServerName != "" { + sn = tlsServerName + } + var creds credentials.TransportCredentials + if testCA { + var err error + creds, err = credentials.NewClientTLSFromFile(testCAFile, sn) + if err != nil { + grpclog.Fatalf("Failed to create TLS credentials %v", err) + } + } else { + creds = credentials.NewClientTLSFromCert(nil, sn) + } + opts = append(opts, grpc.WithTransportCredentials(creds)) + } else { + opts = append(opts, grpc.WithInsecure()) + } + return grpc.Dial(address, opts...) +} + +func main() { + flag.Parse() + addresses := strings.Split(*serverAddresses, ",") + tests := parseTestCases(*testCases) + logParameterInfo(addresses, tests) + testSelector := newWeightedRandomTestSelector(tests) + metricsServer := newMetricsServer() + + var wg sync.WaitGroup + wg.Add(len(addresses) * *numChannelsPerServer * *numStubsPerChannel) + stop := make(chan bool) + + for serverIndex, address := range addresses { + for connIndex := 0; connIndex < *numChannelsPerServer; connIndex++ { + conn, err := newConn(address, *useTLS, *testCA, *tlsServerName) + if err != nil { + grpclog.Fatalf("Fail to dial: %v", err) + } + defer conn.Close() + for clientIndex := 0; clientIndex < *numStubsPerChannel; clientIndex++ { + name := fmt.Sprintf("/stress_test/server_%d/channel_%d/stub_%d/qps", serverIndex+1, connIndex+1, clientIndex+1) + go func() { + defer wg.Done() + g := metricsServer.createGauge(name) + performRPCs(g, conn, testSelector, stop) + }() + } + + } + } + go startServer(metricsServer, *metricsPort) + if *testDurationSecs > 0 { + time.Sleep(time.Duration(*testDurationSecs) * time.Second) + close(stop) + } + wg.Wait() + grpclog.Printf(" ===== ALL DONE ===== ") + +} diff --git a/vendor/google.golang.org/grpc/stress/client/testdata/ca.pem b/vendor/google.golang.org/grpc/stress/client/testdata/ca.pem new file mode 100644 index 0000000..6c8511a --- /dev/null +++ b/vendor/google.golang.org/grpc/stress/client/testdata/ca.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla +Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 +YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT +BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 ++L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu +g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd +Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau +sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m +oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG +Dfcog5wrJytaQ6UA0wE= +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/stress/client/testdata/server1.key b/vendor/google.golang.org/grpc/stress/client/testdata/server1.key new file mode 100644 index 0000000..143a5b8 --- /dev/null +++ b/vendor/google.golang.org/grpc/stress/client/testdata/server1.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD +M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf +3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY +AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm +V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY +tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p +dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q +K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR +81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff +DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd +aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 +ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 +XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe +F98XJ7tIFfJq +-----END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/stress/client/testdata/server1.pem b/vendor/google.golang.org/grpc/stress/client/testdata/server1.pem new file mode 100644 index 0000000..f3d43fc --- /dev/null +++ b/vendor/google.golang.org/grpc/stress/client/testdata/server1.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET +MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx +MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV +BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 +ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco +LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg +zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd +9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy +em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G +CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 +hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh +y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.pb.go b/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.pb.go new file mode 100644 index 0000000..a1310b5 --- /dev/null +++ b/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.pb.go @@ -0,0 +1,361 @@ +// Code generated by protoc-gen-go. +// source: metrics.proto +// DO NOT EDIT! + +/* +Package grpc_testing is a generated protocol buffer package. + +It is generated from these files: + metrics.proto + +It has these top-level messages: + GaugeResponse + GaugeRequest + EmptyMessage +*/ +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Reponse message containing the gauge name and value +type GaugeResponse struct { + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Types that are valid to be assigned to Value: + // *GaugeResponse_LongValue + // *GaugeResponse_DoubleValue + // *GaugeResponse_StringValue + Value isGaugeResponse_Value `protobuf_oneof:"value"` +} + +func (m *GaugeResponse) Reset() { *m = GaugeResponse{} } +func (m *GaugeResponse) String() string { return proto.CompactTextString(m) } +func (*GaugeResponse) ProtoMessage() {} +func (*GaugeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isGaugeResponse_Value interface { + isGaugeResponse_Value() +} + +type GaugeResponse_LongValue struct { + LongValue int64 `protobuf:"varint,2,opt,name=long_value,json=longValue,oneof"` +} +type GaugeResponse_DoubleValue struct { + DoubleValue float64 `protobuf:"fixed64,3,opt,name=double_value,json=doubleValue,oneof"` +} +type GaugeResponse_StringValue struct { + StringValue string `protobuf:"bytes,4,opt,name=string_value,json=stringValue,oneof"` +} + +func (*GaugeResponse_LongValue) isGaugeResponse_Value() {} +func (*GaugeResponse_DoubleValue) isGaugeResponse_Value() {} +func (*GaugeResponse_StringValue) isGaugeResponse_Value() {} + +func (m *GaugeResponse) GetValue() isGaugeResponse_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *GaugeResponse) GetLongValue() int64 { + if x, ok := m.GetValue().(*GaugeResponse_LongValue); ok { + return x.LongValue + } + return 0 +} + +func (m *GaugeResponse) GetDoubleValue() float64 { + if x, ok := m.GetValue().(*GaugeResponse_DoubleValue); ok { + return x.DoubleValue + } + return 0 +} + +func (m *GaugeResponse) GetStringValue() string { + if x, ok := m.GetValue().(*GaugeResponse_StringValue); ok { + return x.StringValue + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*GaugeResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _GaugeResponse_OneofMarshaler, _GaugeResponse_OneofUnmarshaler, _GaugeResponse_OneofSizer, []interface{}{ + (*GaugeResponse_LongValue)(nil), + (*GaugeResponse_DoubleValue)(nil), + (*GaugeResponse_StringValue)(nil), + } +} + +func _GaugeResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*GaugeResponse) + // value + switch x := m.Value.(type) { + case *GaugeResponse_LongValue: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.LongValue)) + case *GaugeResponse_DoubleValue: + b.EncodeVarint(3<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.DoubleValue)) + case *GaugeResponse_StringValue: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case nil: + default: + return fmt.Errorf("GaugeResponse.Value has unexpected type %T", x) + } + return nil +} + +func _GaugeResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*GaugeResponse) + switch tag { + case 2: // value.long_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &GaugeResponse_LongValue{int64(x)} + return true, err + case 3: // value.double_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Value = &GaugeResponse_DoubleValue{math.Float64frombits(x)} + return true, err + case 4: // value.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Value = &GaugeResponse_StringValue{x} + return true, err + default: + return false, nil + } +} + +func _GaugeResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*GaugeResponse) + // value + switch x := m.Value.(type) { + case *GaugeResponse_LongValue: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.LongValue)) + case *GaugeResponse_DoubleValue: + n += proto.SizeVarint(3<<3 | proto.WireFixed64) + n += 8 + case *GaugeResponse_StringValue: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request message containing the gauge name +type GaugeRequest struct { + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GaugeRequest) Reset() { *m = GaugeRequest{} } +func (m *GaugeRequest) String() string { return proto.CompactTextString(m) } +func (*GaugeRequest) ProtoMessage() {} +func (*GaugeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type EmptyMessage struct { +} + +func (m *EmptyMessage) Reset() { *m = EmptyMessage{} } +func (m *EmptyMessage) String() string { return proto.CompactTextString(m) } +func (*EmptyMessage) ProtoMessage() {} +func (*EmptyMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func init() { + proto.RegisterType((*GaugeResponse)(nil), "grpc.testing.GaugeResponse") + proto.RegisterType((*GaugeRequest)(nil), "grpc.testing.GaugeRequest") + proto.RegisterType((*EmptyMessage)(nil), "grpc.testing.EmptyMessage") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for MetricsService service + +type MetricsServiceClient interface { + // Returns the values of all the gauges that are currently being maintained by + // the service + GetAllGauges(ctx context.Context, in *EmptyMessage, opts ...grpc.CallOption) (MetricsService_GetAllGaugesClient, error) + // Returns the value of one gauge + GetGauge(ctx context.Context, in *GaugeRequest, opts ...grpc.CallOption) (*GaugeResponse, error) +} + +type metricsServiceClient struct { + cc *grpc.ClientConn +} + +func NewMetricsServiceClient(cc *grpc.ClientConn) MetricsServiceClient { + return &metricsServiceClient{cc} +} + +func (c *metricsServiceClient) GetAllGauges(ctx context.Context, in *EmptyMessage, opts ...grpc.CallOption) (MetricsService_GetAllGaugesClient, error) { + stream, err := grpc.NewClientStream(ctx, &_MetricsService_serviceDesc.Streams[0], c.cc, "/grpc.testing.MetricsService/GetAllGauges", opts...) + if err != nil { + return nil, err + } + x := &metricsServiceGetAllGaugesClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type MetricsService_GetAllGaugesClient interface { + Recv() (*GaugeResponse, error) + grpc.ClientStream +} + +type metricsServiceGetAllGaugesClient struct { + grpc.ClientStream +} + +func (x *metricsServiceGetAllGaugesClient) Recv() (*GaugeResponse, error) { + m := new(GaugeResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *metricsServiceClient) GetGauge(ctx context.Context, in *GaugeRequest, opts ...grpc.CallOption) (*GaugeResponse, error) { + out := new(GaugeResponse) + err := grpc.Invoke(ctx, "/grpc.testing.MetricsService/GetGauge", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for MetricsService service + +type MetricsServiceServer interface { + // Returns the values of all the gauges that are currently being maintained by + // the service + GetAllGauges(*EmptyMessage, MetricsService_GetAllGaugesServer) error + // Returns the value of one gauge + GetGauge(context.Context, *GaugeRequest) (*GaugeResponse, error) +} + +func RegisterMetricsServiceServer(s *grpc.Server, srv MetricsServiceServer) { + s.RegisterService(&_MetricsService_serviceDesc, srv) +} + +func _MetricsService_GetAllGauges_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(EmptyMessage) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(MetricsServiceServer).GetAllGauges(m, &metricsServiceGetAllGaugesServer{stream}) +} + +type MetricsService_GetAllGaugesServer interface { + Send(*GaugeResponse) error + grpc.ServerStream +} + +type metricsServiceGetAllGaugesServer struct { + grpc.ServerStream +} + +func (x *metricsServiceGetAllGaugesServer) Send(m *GaugeResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _MetricsService_GetGauge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GaugeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricsServiceServer).GetGauge(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.MetricsService/GetGauge", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricsServiceServer).GetGauge(ctx, req.(*GaugeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _MetricsService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testing.MetricsService", + HandlerType: (*MetricsServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetGauge", + Handler: _MetricsService_GetGauge_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "GetAllGauges", + Handler: _MetricsService_GetAllGauges_Handler, + ServerStreams: true, + }, + }, + Metadata: "metrics.proto", +} + +func init() { proto.RegisterFile("metrics.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 253 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0xcd, 0x4d, 0x2d, 0x29, + 0xca, 0x4c, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x49, 0x2f, 0x2a, 0x48, 0xd6, + 0x2b, 0x49, 0x2d, 0x2e, 0xc9, 0xcc, 0x4b, 0x57, 0x9a, 0xce, 0xc8, 0xc5, 0xeb, 0x9e, 0x58, 0x9a, + 0x9e, 0x1a, 0x94, 0x5a, 0x5c, 0x90, 0x9f, 0x57, 0x9c, 0x2a, 0x24, 0xc4, 0xc5, 0x92, 0x97, 0x98, + 0x9b, 0x2a, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0x04, 0x66, 0x0b, 0xc9, 0x73, 0x71, 0xe5, 0xe4, + 0xe7, 0xa5, 0xc7, 0x97, 0x25, 0xe6, 0x94, 0xa6, 0x4a, 0x30, 0x01, 0x65, 0x98, 0x3d, 0x18, 0x82, + 0x38, 0x41, 0x62, 0x61, 0x20, 0x21, 0x21, 0x65, 0x2e, 0x9e, 0x94, 0xfc, 0xd2, 0xa4, 0x9c, 0x54, + 0xa8, 0x12, 0x66, 0xa0, 0x12, 0x46, 0xa0, 0x12, 0x6e, 0x88, 0x28, 0x5c, 0x51, 0x31, 0xd0, 0x25, + 0x70, 0x73, 0x58, 0x40, 0x36, 0x80, 0x14, 0x41, 0x44, 0xc1, 0x8a, 0x9c, 0xd8, 0xb9, 0x58, 0xc1, + 0xb2, 0x4a, 0x4a, 0x5c, 0x3c, 0x50, 0x87, 0x15, 0x96, 0x02, 0x1d, 0x8b, 0xcd, 0x5d, 0x4a, 0x7c, + 0x5c, 0x3c, 0xae, 0xb9, 0x05, 0x25, 0x95, 0xbe, 0xa9, 0xc5, 0xc5, 0x89, 0xe9, 0xa9, 0x46, 0x0b, + 0x18, 0xb9, 0xf8, 0x7c, 0x21, 0xbe, 0x0d, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x15, 0xf2, 0x04, + 0x1a, 0x93, 0x5a, 0xe2, 0x98, 0x93, 0x03, 0x36, 0xac, 0x58, 0x48, 0x4a, 0x0f, 0xd9, 0xff, 0x7a, + 0xc8, 0xda, 0xa5, 0xa4, 0x51, 0xe5, 0x50, 0xc2, 0xc5, 0x80, 0x51, 0xc8, 0x99, 0x8b, 0x03, 0x68, + 0x14, 0x58, 0x14, 0xdd, 0x18, 0x64, 0x97, 0xe2, 0x35, 0x26, 0x89, 0x0d, 0x1c, 0x0b, 0xc6, 0x80, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x7d, 0xb2, 0xc9, 0x96, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.proto b/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.proto new file mode 100644 index 0000000..1202b20 --- /dev/null +++ b/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.proto @@ -0,0 +1,64 @@ +// Copyright 2015-2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Contains the definitions for a metrics service and the type of metrics +// exposed by the service. +// +// Currently, 'Gauge' (i.e a metric that represents the measured value of +// something at an instant of time) is the only metric type supported by the +// service. +syntax = "proto3"; + +package grpc.testing; + +// Reponse message containing the gauge name and value +message GaugeResponse { + string name = 1; + oneof value { + int64 long_value = 2; + double double_value = 3; + string string_value = 4; + } +} + +// Request message containing the gauge name +message GaugeRequest { + string name = 1; +} + +message EmptyMessage {} + +service MetricsService { + // Returns the values of all the gauges that are currently being maintained by + // the service + rpc GetAllGauges(EmptyMessage) returns (stream GaugeResponse); + + // Returns the value of one gauge + rpc GetGauge(GaugeRequest) returns (GaugeResponse); +} diff --git a/vendor/google.golang.org/grpc/stress/metrics_client/main.go b/vendor/google.golang.org/grpc/stress/metrics_client/main.go new file mode 100644 index 0000000..983a8ff --- /dev/null +++ b/vendor/google.golang.org/grpc/stress/metrics_client/main.go @@ -0,0 +1,97 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package main + +import ( + "flag" + "fmt" + "io" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/grpclog" + metricspb "google.golang.org/grpc/stress/grpc_testing" +) + +var ( + metricsServerAddress = flag.String("metrics_server_address", "", "The metrics server addresses in the fomrat <hostname>:<port>") + totalOnly = flag.Bool("total_only", false, "If true, this prints only the total value of all gauges") +) + +func printMetrics(client metricspb.MetricsServiceClient, totalOnly bool) { + stream, err := client.GetAllGauges(context.Background(), &metricspb.EmptyMessage{}) + if err != nil { + grpclog.Fatalf("failed to call GetAllGuages: %v", err) + } + + var ( + overallQPS int64 + rpcStatus error + ) + for { + gaugeResponse, err := stream.Recv() + if err != nil { + rpcStatus = err + break + } + if _, ok := gaugeResponse.GetValue().(*metricspb.GaugeResponse_LongValue); !ok { + panic(fmt.Sprintf("gauge %s is not a long value", gaugeResponse.Name)) + } + v := gaugeResponse.GetLongValue() + if !totalOnly { + grpclog.Printf("%s: %d", gaugeResponse.Name, v) + } + overallQPS += v + } + if rpcStatus != io.EOF { + grpclog.Fatalf("failed to finish server streaming: %v", rpcStatus) + } + grpclog.Printf("overall qps: %d", overallQPS) +} + +func main() { + flag.Parse() + if *metricsServerAddress == "" { + grpclog.Fatalf("Metrics server address is empty.") + } + + conn, err := grpc.Dial(*metricsServerAddress, grpc.WithInsecure()) + if err != nil { + grpclog.Fatalf("cannot connect to metrics server: %v", err) + } + defer conn.Close() + + c := metricspb.NewMetricsServiceClient(conn) + printMetrics(c, *totalOnly) +} diff --git a/vendor/google.golang.org/grpc/tap/tap.go b/vendor/google.golang.org/grpc/tap/tap.go new file mode 100644 index 0000000..0f36647 --- /dev/null +++ b/vendor/google.golang.org/grpc/tap/tap.go @@ -0,0 +1,54 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package tap defines the function handles which are executed on the transport +// layer of gRPC-Go and related information. Everything here is EXPERIMENTAL. +package tap + +import ( + "golang.org/x/net/context" +) + +// Info defines the relevant information needed by the handles. +type Info struct { + // FullMethodName is the string of grpc method (in the format of + // /package.service/method). + FullMethodName string + // TODO: More to be added. +} + +// ServerInHandle defines the function which runs when a new stream is created +// on the server side. Note that it is executed in the per-connection I/O goroutine(s) instead +// of per-RPC goroutine. Therefore, users should NOT have any blocking/time-consuming +// work in this handle. Otherwise all the RPCs would slow down. +type ServerInHandle func(ctx context.Context, info *Info) (context.Context, error) diff --git a/vendor/google.golang.org/grpc/test/codec_perf/perf.pb.go b/vendor/google.golang.org/grpc/test/codec_perf/perf.pb.go new file mode 100644 index 0000000..c88756e --- /dev/null +++ b/vendor/google.golang.org/grpc/test/codec_perf/perf.pb.go @@ -0,0 +1,63 @@ +// Code generated by protoc-gen-go. +// source: perf.proto +// DO NOT EDIT! + +/* +Package codec_perf is a generated protocol buffer package. + +It is generated from these files: + perf.proto + +It has these top-level messages: + Buffer +*/ +package codec_perf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Buffer is a message that contains a body of bytes that is used to exercise +// encoding and decoding overheads. +type Buffer struct { + Body []byte `protobuf:"bytes,1,opt,name=body" json:"body,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Buffer) Reset() { *m = Buffer{} } +func (m *Buffer) String() string { return proto.CompactTextString(m) } +func (*Buffer) ProtoMessage() {} +func (*Buffer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Buffer) GetBody() []byte { + if m != nil { + return m.Body + } + return nil +} + +func init() { + proto.RegisterType((*Buffer)(nil), "codec.perf.Buffer") +} + +func init() { proto.RegisterFile("perf.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 73 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0x48, 0x2d, 0x4a, + 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4a, 0xce, 0x4f, 0x49, 0x4d, 0xd6, 0x03, 0x89, + 0x28, 0xc9, 0x70, 0xb1, 0x39, 0x95, 0xa6, 0xa5, 0xa5, 0x16, 0x09, 0x09, 0x71, 0xb1, 0x24, 0xe5, + 0xa7, 0x54, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x04, 0x81, 0xd9, 0x80, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x3a, 0x58, 0x92, 0x53, 0x36, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/test/codec_perf/perf.proto b/vendor/google.golang.org/grpc/test/codec_perf/perf.proto new file mode 100644 index 0000000..4cf561f --- /dev/null +++ b/vendor/google.golang.org/grpc/test/codec_perf/perf.proto @@ -0,0 +1,11 @@ +// Messages used for performance tests that may not reference grpc directly for +// reasons of import cycles. +syntax = "proto2"; + +package codec.perf; + +// Buffer is a message that contains a body of bytes that is used to exercise +// encoding and decoding overheads. +message Buffer { + optional bytes body = 1; +} diff --git a/vendor/google.golang.org/grpc/test/end2end_test.go b/vendor/google.golang.org/grpc/test/end2end_test.go new file mode 100644 index 0000000..98d590e --- /dev/null +++ b/vendor/google.golang.org/grpc/test/end2end_test.go @@ -0,0 +1,3638 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc_test + +import ( + "bytes" + "crypto/tls" + "errors" + "flag" + "fmt" + "io" + "log" + "math" + "net" + "os" + "reflect" + "runtime" + "sort" + "strings" + "sync" + "syscall" + "testing" + "time" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "golang.org/x/net/http2" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/health" + healthpb "google.golang.org/grpc/health/grpc_health_v1" + "google.golang.org/grpc/internal" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/tap" + testpb "google.golang.org/grpc/test/grpc_testing" +) + +var ( + // For headers: + testMetadata = metadata.MD{ + "key1": []string{"value1"}, + "key2": []string{"value2"}, + } + testMetadata2 = metadata.MD{ + "key1": []string{"value12"}, + "key2": []string{"value22"}, + } + // For trailers: + testTrailerMetadata = metadata.MD{ + "tkey1": []string{"trailerValue1"}, + "tkey2": []string{"trailerValue2"}, + } + testTrailerMetadata2 = metadata.MD{ + "tkey1": []string{"trailerValue12"}, + "tkey2": []string{"trailerValue22"}, + } + // capital "Key" is illegal in HTTP/2. + malformedHTTP2Metadata = metadata.MD{ + "Key": []string{"foo"}, + } + testAppUA = "myApp1/1.0 myApp2/0.9" +) + +var raceMode bool // set by race_test.go in race mode + +type testServer struct { + security string // indicate the authentication protocol used by this server. + earlyFail bool // whether to error out the execution of a service handler prematurely. + setAndSendHeader bool // whether to call setHeader and sendHeader. + setHeaderOnly bool // whether to only call setHeader, not sendHeader. + multipleSetTrailer bool // whether to call setTrailer multiple times. +} + +func (s *testServer) EmptyCall(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { + if md, ok := metadata.FromContext(ctx); ok { + // For testing purpose, returns an error if there is attached metadata other than + // the user agent set by the client application. + if _, ok := md["user-agent"]; !ok { + return nil, grpc.Errorf(codes.DataLoss, "missing expected user-agent") + } + var str []string + for _, entry := range md["user-agent"] { + str = append(str, "ua", entry) + } + grpc.SendHeader(ctx, metadata.Pairs(str...)) + } + return new(testpb.Empty), nil +} + +func newPayload(t testpb.PayloadType, size int32) (*testpb.Payload, error) { + if size < 0 { + return nil, fmt.Errorf("Requested a response with invalid length %d", size) + } + body := make([]byte, size) + switch t { + case testpb.PayloadType_COMPRESSABLE: + case testpb.PayloadType_UNCOMPRESSABLE: + return nil, fmt.Errorf("PayloadType UNCOMPRESSABLE is not supported") + default: + return nil, fmt.Errorf("Unsupported payload type: %d", t) + } + return &testpb.Payload{ + Type: t.Enum(), + Body: body, + }, nil +} + +func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + md, ok := metadata.FromContext(ctx) + if ok { + if _, exists := md[":authority"]; !exists { + return nil, grpc.Errorf(codes.DataLoss, "expected an :authority metadata: %v", md) + } + if s.setAndSendHeader { + if err := grpc.SetHeader(ctx, md); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SetHeader(_, %v) = %v, want <nil>", md, err) + } + if err := grpc.SendHeader(ctx, testMetadata2); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SendHeader(_, %v) = %v, want <nil>", testMetadata2, err) + } + } else if s.setHeaderOnly { + if err := grpc.SetHeader(ctx, md); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SetHeader(_, %v) = %v, want <nil>", md, err) + } + if err := grpc.SetHeader(ctx, testMetadata2); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SetHeader(_, %v) = %v, want <nil>", testMetadata2, err) + } + } else { + if err := grpc.SendHeader(ctx, md); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SendHeader(_, %v) = %v, want <nil>", md, err) + } + } + if err := grpc.SetTrailer(ctx, testTrailerMetadata); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SetTrailer(_, %v) = %v, want <nil>", testTrailerMetadata, err) + } + if s.multipleSetTrailer { + if err := grpc.SetTrailer(ctx, testTrailerMetadata2); err != nil { + return nil, grpc.Errorf(grpc.Code(err), "grpc.SetTrailer(_, %v) = %v, want <nil>", testTrailerMetadata2, err) + } + } + } + pr, ok := peer.FromContext(ctx) + if !ok { + return nil, grpc.Errorf(codes.DataLoss, "failed to get peer from ctx") + } + if pr.Addr == net.Addr(nil) { + return nil, grpc.Errorf(codes.DataLoss, "failed to get peer address") + } + if s.security != "" { + // Check Auth info + var authType, serverName string + switch info := pr.AuthInfo.(type) { + case credentials.TLSInfo: + authType = info.AuthType() + serverName = info.State.ServerName + default: + return nil, grpc.Errorf(codes.Unauthenticated, "Unknown AuthInfo type") + } + if authType != s.security { + return nil, grpc.Errorf(codes.Unauthenticated, "Wrong auth type: got %q, want %q", authType, s.security) + } + if serverName != "x.test.youtube.com" { + return nil, grpc.Errorf(codes.Unauthenticated, "Unknown server name %q", serverName) + } + } + // Simulate some service delay. + time.Sleep(time.Second) + + payload, err := newPayload(in.GetResponseType(), in.GetResponseSize()) + if err != nil { + return nil, err + } + + return &testpb.SimpleResponse{ + Payload: payload, + }, nil +} + +func (s *testServer) StreamingOutputCall(args *testpb.StreamingOutputCallRequest, stream testpb.TestService_StreamingOutputCallServer) error { + if md, ok := metadata.FromContext(stream.Context()); ok { + if _, exists := md[":authority"]; !exists { + return grpc.Errorf(codes.DataLoss, "expected an :authority metadata: %v", md) + } + // For testing purpose, returns an error if there is attached metadata except for authority. + if len(md) > 1 { + return grpc.Errorf(codes.DataLoss, "got extra metadata") + } + } + cs := args.GetResponseParameters() + for _, c := range cs { + if us := c.GetIntervalUs(); us > 0 { + time.Sleep(time.Duration(us) * time.Microsecond) + } + + payload, err := newPayload(args.GetResponseType(), c.GetSize()) + if err != nil { + return err + } + + if err := stream.Send(&testpb.StreamingOutputCallResponse{ + Payload: payload, + }); err != nil { + return err + } + } + return nil +} + +func (s *testServer) StreamingInputCall(stream testpb.TestService_StreamingInputCallServer) error { + var sum int + for { + in, err := stream.Recv() + if err == io.EOF { + return stream.SendAndClose(&testpb.StreamingInputCallResponse{ + AggregatedPayloadSize: proto.Int32(int32(sum)), + }) + } + if err != nil { + return err + } + p := in.GetPayload().GetBody() + sum += len(p) + if s.earlyFail { + return grpc.Errorf(codes.NotFound, "not found") + } + } +} + +func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServer) error { + md, ok := metadata.FromContext(stream.Context()) + if ok { + if s.setAndSendHeader { + if err := stream.SetHeader(md); err != nil { + return grpc.Errorf(grpc.Code(err), "%v.SetHeader(_, %v) = %v, want <nil>", stream, md, err) + } + if err := stream.SendHeader(testMetadata2); err != nil { + return grpc.Errorf(grpc.Code(err), "%v.SendHeader(_, %v) = %v, want <nil>", stream, testMetadata2, err) + } + } else if s.setHeaderOnly { + if err := stream.SetHeader(md); err != nil { + return grpc.Errorf(grpc.Code(err), "%v.SetHeader(_, %v) = %v, want <nil>", stream, md, err) + } + if err := stream.SetHeader(testMetadata2); err != nil { + return grpc.Errorf(grpc.Code(err), "%v.SetHeader(_, %v) = %v, want <nil>", stream, testMetadata2, err) + } + } else { + if err := stream.SendHeader(md); err != nil { + return grpc.Errorf(grpc.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) + } + } + stream.SetTrailer(testTrailerMetadata) + if s.multipleSetTrailer { + stream.SetTrailer(testTrailerMetadata2) + } + } + for { + in, err := stream.Recv() + if err == io.EOF { + // read done. + return nil + } + if err != nil { + return err + } + cs := in.GetResponseParameters() + for _, c := range cs { + if us := c.GetIntervalUs(); us > 0 { + time.Sleep(time.Duration(us) * time.Microsecond) + } + + payload, err := newPayload(in.GetResponseType(), c.GetSize()) + if err != nil { + return err + } + + if err := stream.Send(&testpb.StreamingOutputCallResponse{ + Payload: payload, + }); err != nil { + return err + } + } + } +} + +func (s *testServer) HalfDuplexCall(stream testpb.TestService_HalfDuplexCallServer) error { + var msgBuf []*testpb.StreamingOutputCallRequest + for { + in, err := stream.Recv() + if err == io.EOF { + // read done. + break + } + if err != nil { + return err + } + msgBuf = append(msgBuf, in) + } + for _, m := range msgBuf { + cs := m.GetResponseParameters() + for _, c := range cs { + if us := c.GetIntervalUs(); us > 0 { + time.Sleep(time.Duration(us) * time.Microsecond) + } + + payload, err := newPayload(m.GetResponseType(), c.GetSize()) + if err != nil { + return err + } + + if err := stream.Send(&testpb.StreamingOutputCallResponse{ + Payload: payload, + }); err != nil { + return err + } + } + } + return nil +} + +const tlsDir = "testdata/" + +type env struct { + name string + network string // The type of network such as tcp, unix, etc. + security string // The security protocol such as TLS, SSH, etc. + httpHandler bool // whether to use the http.Handler ServerTransport; requires TLS + balancer bool // whether to use balancer +} + +func (e env) runnable() bool { + if runtime.GOOS == "windows" && e.network == "unix" { + return false + } + return true +} + +func (e env) dialer(addr string, timeout time.Duration) (net.Conn, error) { + return net.DialTimeout(e.network, addr, timeout) +} + +var ( + tcpClearEnv = env{name: "tcp-clear", network: "tcp", balancer: true} + tcpTLSEnv = env{name: "tcp-tls", network: "tcp", security: "tls", balancer: true} + unixClearEnv = env{name: "unix-clear", network: "unix", balancer: true} + unixTLSEnv = env{name: "unix-tls", network: "unix", security: "tls", balancer: true} + handlerEnv = env{name: "handler-tls", network: "tcp", security: "tls", httpHandler: true, balancer: true} + noBalancerEnv = env{name: "no-balancer", network: "tcp", security: "tls", balancer: false} + // TODO add handlerEnv back when ServeHTTP is stable. + allEnv = []env{tcpClearEnv, tcpTLSEnv, unixClearEnv, unixTLSEnv /*handlerEnv,*/, noBalancerEnv} +) + +var onlyEnv = flag.String("only_env", "", "If non-empty, one of 'tcp-clear', 'tcp-tls', 'unix-clear', 'unix-tls', or 'handler-tls' to only run the tests for that environment. Empty means all.") + +func listTestEnv() (envs []env) { + if *onlyEnv != "" { + for _, e := range allEnv { + if e.name == *onlyEnv { + if !e.runnable() { + panic(fmt.Sprintf("--only_env environment %q does not run on %s", *onlyEnv, runtime.GOOS)) + } + return []env{e} + } + } + panic(fmt.Sprintf("invalid --only_env value %q", *onlyEnv)) + } + for _, e := range allEnv { + if e.runnable() { + envs = append(envs, e) + } + } + return envs +} + +// test is an end-to-end test. It should be created with the newTest +// func, modified as needed, and then started with its startServer method. +// It should be cleaned up with the tearDown method. +type test struct { + t *testing.T + e env + + ctx context.Context // valid for life of test, before tearDown + cancel context.CancelFunc + + // Configurable knobs, after newTest returns: + testServer testpb.TestServiceServer // nil means none + healthServer *health.Server // nil means disabled + maxStream uint32 + tapHandle tap.ServerInHandle + maxMsgSize int + userAgent string + clientCompression bool + serverCompression bool + unaryClientInt grpc.UnaryClientInterceptor + streamClientInt grpc.StreamClientInterceptor + unaryServerInt grpc.UnaryServerInterceptor + streamServerInt grpc.StreamServerInterceptor + unknownHandler grpc.StreamHandler + sc <-chan grpc.ServiceConfig + + // srv and srvAddr are set once startServer is called. + srv *grpc.Server + srvAddr string + + cc *grpc.ClientConn // nil until requested via clientConn + restoreLogs func() // nil unless declareLogNoise is used +} + +func (te *test) tearDown() { + if te.cancel != nil { + te.cancel() + te.cancel = nil + } + if te.cc != nil { + te.cc.Close() + te.cc = nil + } + if te.restoreLogs != nil { + te.restoreLogs() + te.restoreLogs = nil + } + if te.srv != nil { + te.srv.Stop() + } +} + +// newTest returns a new test using the provided testing.T and +// environment. It is returned with default values. Tests should +// modify it before calling its startServer and clientConn methods. +func newTest(t *testing.T, e env) *test { + te := &test{ + t: t, + e: e, + maxStream: math.MaxUint32, + } + te.ctx, te.cancel = context.WithCancel(context.Background()) + return te +} + +// startServer starts a gRPC server listening. Callers should defer a +// call to te.tearDown to clean up. +func (te *test) startServer(ts testpb.TestServiceServer) { + te.testServer = ts + te.t.Logf("Running test in %s environment...", te.e.name) + sopts := []grpc.ServerOption{grpc.MaxConcurrentStreams(te.maxStream)} + if te.maxMsgSize > 0 { + sopts = append(sopts, grpc.MaxMsgSize(te.maxMsgSize)) + } + if te.tapHandle != nil { + sopts = append(sopts, grpc.InTapHandle(te.tapHandle)) + } + if te.serverCompression { + sopts = append(sopts, + grpc.RPCCompressor(grpc.NewGZIPCompressor()), + grpc.RPCDecompressor(grpc.NewGZIPDecompressor()), + ) + } + if te.unaryServerInt != nil { + sopts = append(sopts, grpc.UnaryInterceptor(te.unaryServerInt)) + } + if te.streamServerInt != nil { + sopts = append(sopts, grpc.StreamInterceptor(te.streamServerInt)) + } + if te.unknownHandler != nil { + sopts = append(sopts, grpc.UnknownServiceHandler(te.unknownHandler)) + } + la := "localhost:0" + switch te.e.network { + case "unix": + la = "/tmp/testsock" + fmt.Sprintf("%d", time.Now().UnixNano()) + syscall.Unlink(la) + } + lis, err := net.Listen(te.e.network, la) + if err != nil { + te.t.Fatalf("Failed to listen: %v", err) + } + switch te.e.security { + case "tls": + creds, err := credentials.NewServerTLSFromFile(tlsDir+"server1.pem", tlsDir+"server1.key") + if err != nil { + te.t.Fatalf("Failed to generate credentials %v", err) + } + sopts = append(sopts, grpc.Creds(creds)) + case "clientAlwaysFailCred": + sopts = append(sopts, grpc.Creds(clientAlwaysFailCred{})) + case "clientTimeoutCreds": + sopts = append(sopts, grpc.Creds(&clientTimeoutCreds{})) + } + s := grpc.NewServer(sopts...) + te.srv = s + if te.e.httpHandler { + internal.TestingUseHandlerImpl(s) + } + if te.healthServer != nil { + healthpb.RegisterHealthServer(s, te.healthServer) + } + if te.testServer != nil { + testpb.RegisterTestServiceServer(s, te.testServer) + } + addr := la + switch te.e.network { + case "unix": + default: + _, port, err := net.SplitHostPort(lis.Addr().String()) + if err != nil { + te.t.Fatalf("Failed to parse listener address: %v", err) + } + addr = "localhost:" + port + } + + go s.Serve(lis) + te.srvAddr = addr +} + +func (te *test) clientConn() *grpc.ClientConn { + if te.cc != nil { + return te.cc + } + opts := []grpc.DialOption{ + grpc.WithDialer(te.e.dialer), + grpc.WithUserAgent(te.userAgent), + } + + if te.sc != nil { + opts = append(opts, grpc.WithServiceConfig(te.sc)) + } + + if te.clientCompression { + opts = append(opts, + grpc.WithCompressor(grpc.NewGZIPCompressor()), + grpc.WithDecompressor(grpc.NewGZIPDecompressor()), + ) + } + if te.unaryClientInt != nil { + opts = append(opts, grpc.WithUnaryInterceptor(te.unaryClientInt)) + } + if te.streamClientInt != nil { + opts = append(opts, grpc.WithStreamInterceptor(te.streamClientInt)) + } + if te.maxMsgSize > 0 { + opts = append(opts, grpc.WithMaxMsgSize(te.maxMsgSize)) + } + switch te.e.security { + case "tls": + creds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", "x.test.youtube.com") + if err != nil { + te.t.Fatalf("Failed to load credentials: %v", err) + } + opts = append(opts, grpc.WithTransportCredentials(creds)) + case "clientAlwaysFailCred": + opts = append(opts, grpc.WithTransportCredentials(clientAlwaysFailCred{})) + case "clientTimeoutCreds": + opts = append(opts, grpc.WithTransportCredentials(&clientTimeoutCreds{})) + default: + opts = append(opts, grpc.WithInsecure()) + } + if te.e.balancer { + opts = append(opts, grpc.WithBalancer(grpc.RoundRobin(nil))) + } + var err error + te.cc, err = grpc.Dial(te.srvAddr, opts...) + if err != nil { + te.t.Fatalf("Dial(%q) = %v", te.srvAddr, err) + } + return te.cc +} + +func (te *test) declareLogNoise(phrases ...string) { + te.restoreLogs = declareLogNoise(te.t, phrases...) +} + +func (te *test) withServerTester(fn func(st *serverTester)) { + c, err := te.e.dialer(te.srvAddr, 10*time.Second) + if err != nil { + te.t.Fatal(err) + } + defer c.Close() + if te.e.security == "tls" { + c = tls.Client(c, &tls.Config{ + InsecureSkipVerify: true, + NextProtos: []string{http2.NextProtoTLS}, + }) + } + st := newServerTesterFromConn(te.t, c) + st.greet() + fn(st) +} + +func TestTimeoutOnDeadServer(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testTimeoutOnDeadServer(t, e) + } +} + +func testTimeoutOnDeadServer(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + ) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, <nil>", err) + } + te.srv.Stop() + ctx, _ := context.WithTimeout(context.Background(), time.Millisecond) + _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)) + if e.balancer && grpc.Code(err) != codes.DeadlineExceeded { + // If e.balancer == nil, the ac will stop reconnecting because the dialer returns non-temp error, + // the error will be an internal error. + t.Fatalf("TestService/EmptyCall(%v, _) = _, %v, want _, error code: %s", ctx, err, codes.DeadlineExceeded) + } + awaitNewConnLogOutput() +} + +func TestServerGracefulStopIdempotent(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testServerGracefulStopIdempotent(t, e) + } +} + +func testServerGracefulStopIdempotent(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + for i := 0; i < 3; i++ { + te.srv.GracefulStop() + } +} + +func TestServerGoAway(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testServerGoAway(t, e) + } +} + +func testServerGoAway(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + // Finish an RPC to make sure the connection is good. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, <nil>", err) + } + ch := make(chan struct{}) + go func() { + te.srv.GracefulStop() + close(ch) + }() + // Loop until the server side GoAway signal is propagated to the client. + for { + ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err == nil { + continue + } + break + } + // A new RPC should fail. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable && grpc.Code(err) != codes.Internal { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s or %s", err, codes.Unavailable, codes.Internal) + } + <-ch + awaitNewConnLogOutput() +} + +func TestServerGoAwayPendingRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testServerGoAwayPendingRPC(t, e) + } +} + +func testServerGoAwayPendingRPC(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + ) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + ctx, cancel := context.WithCancel(context.Background()) + stream, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + // Finish an RPC to make sure the connection is good. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { + t.Fatalf("%v.EmptyCall(_, _, _) = _, %v, want _, <nil>", tc, err) + } + ch := make(chan struct{}) + go func() { + te.srv.GracefulStop() + close(ch) + }() + // Loop until the server side GoAway signal is propagated to the client. + for { + ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err == nil { + continue + } + break + } + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(1), + }, + } + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(100)) + if err != nil { + t.Fatal(err) + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + // The existing RPC should be still good to proceed. + if err := stream.Send(req); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, req, err) + } + if _, err := stream.Recv(); err != nil { + t.Fatalf("%v.Recv() = _, %v, want _, <nil>", stream, err) + } + cancel() + <-ch + awaitNewConnLogOutput() +} + +func TestServerMultipleGoAwayPendingRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testServerMultipleGoAwayPendingRPC(t, e) + } +} + +func testServerMultipleGoAwayPendingRPC(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + ) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + ctx, cancel := context.WithCancel(context.Background()) + stream, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + // Finish an RPC to make sure the connection is good. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { + t.Fatalf("%v.EmptyCall(_, _, _) = _, %v, want _, <nil>", tc, err) + } + ch1 := make(chan struct{}) + go func() { + te.srv.GracefulStop() + close(ch1) + }() + ch2 := make(chan struct{}) + go func() { + te.srv.GracefulStop() + close(ch2) + }() + // Loop until the server side GoAway signal is propagated to the client. + for { + ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err == nil { + continue + } + break + } + select { + case <-ch1: + t.Fatal("GracefulStop() terminated early") + case <-ch2: + t.Fatal("GracefulStop() terminated early") + default: + } + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(1), + }, + } + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(100)) + if err != nil { + t.Fatal(err) + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + // The existing RPC should be still good to proceed. + if err := stream.Send(req); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, req, err) + } + if _, err := stream.Recv(); err != nil { + t.Fatalf("%v.Recv() = _, %v, want _, <nil>", stream, err) + } + if err := stream.CloseSend(); err != nil { + t.Fatalf("%v.CloseSend() = %v, want <nil>", stream, err) + } + <-ch1 + <-ch2 + cancel() + awaitNewConnLogOutput() +} + +func TestConcurrentClientConnCloseAndServerGoAway(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testConcurrentClientConnCloseAndServerGoAway(t, e) + } +} + +func testConcurrentClientConnCloseAndServerGoAway(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + ) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { + t.Fatalf("%v.EmptyCall(_, _, _) = _, %v, want _, <nil>", tc, err) + } + ch := make(chan struct{}) + // Close ClientConn and Server concurrently. + go func() { + te.srv.GracefulStop() + close(ch) + }() + go func() { + cc.Close() + }() + <-ch +} + +func TestConcurrentServerStopAndGoAway(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testConcurrentServerStopAndGoAway(t, e) + } +} + +func testConcurrentServerStopAndGoAway(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + ) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + stream, err := tc.FullDuplexCall(context.Background(), grpc.FailFast(false)) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + // Finish an RPC to make sure the connection is good. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { + t.Fatalf("%v.EmptyCall(_, _, _) = _, %v, want _, <nil>", tc, err) + } + ch := make(chan struct{}) + go func() { + te.srv.GracefulStop() + close(ch) + }() + // Loop until the server side GoAway signal is propagated to the client. + for { + ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err == nil { + continue + } + break + } + // Stop the server and close all the connections. + te.srv.Stop() + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(1), + }, + } + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(100)) + if err != nil { + t.Fatal(err) + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + if err := stream.Send(req); err == nil { + if _, err := stream.Recv(); err == nil { + t.Fatalf("%v.Recv() = _, %v, want _, <nil>", stream, err) + } + } + <-ch + awaitNewConnLogOutput() +} + +func TestFailFast(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testFailFast(t, e) + } +} + +func testFailFast(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + ) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, <nil>", err) + } + // Stop the server and tear down all the exisiting connections. + te.srv.Stop() + // Loop until the server teardown is propagated to the client. + for { + _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}) + if grpc.Code(err) == codes.Unavailable { + break + } + fmt.Printf("%v.EmptyCall(_, _) = _, %v", tc, err) + time.Sleep(10 * time.Millisecond) + } + // The client keeps reconnecting and ongoing fail-fast RPCs should fail with code.Unavailable. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable { + t.Fatalf("TestService/EmptyCall(_, _, _) = _, %v, want _, error code: %s", err, codes.Unavailable) + } + if _, err := tc.StreamingInputCall(context.Background()); grpc.Code(err) != codes.Unavailable { + t.Fatalf("TestService/StreamingInputCall(_) = _, %v, want _, error code: %s", err, codes.Unavailable) + } + + awaitNewConnLogOutput() +} + +func TestServiceConfig(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testServiceConfig(t, e) + } +} + +func testServiceConfig(t *testing.T, e env) { + te := newTest(t, e) + ch := make(chan grpc.ServiceConfig) + te.sc = ch + te.userAgent = testAppUA + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + "Failed to dial : context canceled; please retry.", + ) + defer te.tearDown() + + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + mc := grpc.MethodConfig{ + WaitForReady: true, + Timeout: time.Millisecond, + } + m := make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/EmptyCall"] = mc + m["/grpc.testing.TestService/FullDuplexCall"] = mc + sc := grpc.ServiceConfig{ + Methods: m, + } + ch <- sc + }() + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + // The following RPCs are expected to become non-fail-fast ones with 1ms deadline. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) + } + if _, err := tc.FullDuplexCall(context.Background()); grpc.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) + } + wg.Wait() + // Generate a service config update. + mc := grpc.MethodConfig{ + WaitForReady: false, + } + m := make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/EmptyCall"] = mc + m["/grpc.testing.TestService/FullDuplexCall"] = mc + sc := grpc.ServiceConfig{ + Methods: m, + } + ch <- sc + // Loop until the new update becomes effective. + for { + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable { + continue + } + break + } + // The following RPCs are expected to become fail-fast. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.Unavailable) + } + if _, err := tc.FullDuplexCall(context.Background()); grpc.Code(err) != codes.Unavailable { + t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.Unavailable) + } +} + +func TestTap(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testTap(t, e) + } +} + +type myTap struct { + cnt int +} + +func (t *myTap) handle(ctx context.Context, info *tap.Info) (context.Context, error) { + if info != nil { + if info.FullMethodName == "/grpc.testing.TestService/EmptyCall" { + t.cnt++ + } else if info.FullMethodName == "/grpc.testing.TestService/UnaryCall" { + return nil, fmt.Errorf("tap error") + } + } + return ctx, nil +} + +func testTap(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + ttap := &myTap{} + te.tapHandle = ttap.handle + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + ) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, <nil>", err) + } + if ttap.cnt != 1 { + t.Fatalf("Get the count in ttap %d, want 1", ttap.cnt) + } + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 31) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(45), + Payload: payload, + } + if _, err := tc.UnaryCall(context.Background(), req); grpc.Code(err) != codes.Unavailable { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, %s", err, codes.Unavailable) + } +} + +func healthCheck(d time.Duration, cc *grpc.ClientConn, serviceName string) (*healthpb.HealthCheckResponse, error) { + ctx, _ := context.WithTimeout(context.Background(), d) + hc := healthpb.NewHealthClient(cc) + req := &healthpb.HealthCheckRequest{ + Service: serviceName, + } + return hc.Check(ctx, req) +} + +func TestHealthCheckOnSuccess(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testHealthCheckOnSuccess(t, e) + } +} + +func testHealthCheckOnSuccess(t *testing.T, e env) { + te := newTest(t, e) + hs := health.NewServer() + hs.SetServingStatus("grpc.health.v1.Health", 1) + te.healthServer = hs + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + if _, err := healthCheck(1*time.Second, cc, "grpc.health.v1.Health"); err != nil { + t.Fatalf("Health/Check(_, _) = _, %v, want _, <nil>", err) + } +} + +func TestHealthCheckOnFailure(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testHealthCheckOnFailure(t, e) + } +} + +func testHealthCheckOnFailure(t *testing.T, e env) { + defer leakCheck(t)() + te := newTest(t, e) + te.declareLogNoise( + "Failed to dial ", + "grpc: the client connection is closing; please retry", + ) + hs := health.NewServer() + hs.SetServingStatus("grpc.health.v1.HealthCheck", 1) + te.healthServer = hs + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + wantErr := grpc.Errorf(codes.DeadlineExceeded, "context deadline exceeded") + if _, err := healthCheck(0*time.Second, cc, "grpc.health.v1.Health"); !equalErrors(err, wantErr) { + t.Fatalf("Health/Check(_, _) = _, %v, want _, error code %s", err, codes.DeadlineExceeded) + } + awaitNewConnLogOutput() +} + +func TestHealthCheckOff(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + // TODO(bradfitz): Temporarily skip this env due to #619. + if e.name == "handler-tls" { + continue + } + testHealthCheckOff(t, e) + } +} + +func testHealthCheckOff(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + want := grpc.Errorf(codes.Unimplemented, "unknown service grpc.health.v1.Health") + if _, err := healthCheck(1*time.Second, te.clientConn(), ""); !equalErrors(err, want) { + t.Fatalf("Health/Check(_, _) = _, %v, want _, %v", err, want) + } +} + +func TestUnknownHandler(t *testing.T) { + defer leakCheck(t)() + // An example unknownHandler that returns a different code and a different method, making sure that we do not + // expose what methods are implemented to a client that is not authenticated. + unknownHandler := func(srv interface{}, stream grpc.ServerStream) error { + return grpc.Errorf(codes.Unauthenticated, "user unauthenticated") + } + for _, e := range listTestEnv() { + // TODO(bradfitz): Temporarily skip this env due to #619. + if e.name == "handler-tls" { + continue + } + testUnknownHandler(t, e, unknownHandler) + } +} + +func testUnknownHandler(t *testing.T, e env, unknownHandler grpc.StreamHandler) { + te := newTest(t, e) + te.unknownHandler = unknownHandler + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + want := grpc.Errorf(codes.Unauthenticated, "user unauthenticated") + if _, err := healthCheck(1*time.Second, te.clientConn(), ""); !equalErrors(err, want) { + t.Fatalf("Health/Check(_, _) = _, %v, want _, %v", err, want) + } +} + +func TestHealthCheckServingStatus(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testHealthCheckServingStatus(t, e) + } +} + +func testHealthCheckServingStatus(t *testing.T, e env) { + te := newTest(t, e) + hs := health.NewServer() + te.healthServer = hs + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + out, err := healthCheck(1*time.Second, cc, "") + if err != nil { + t.Fatalf("Health/Check(_, _) = _, %v, want _, <nil>", err) + } + if out.Status != healthpb.HealthCheckResponse_SERVING { + t.Fatalf("Got the serving status %v, want SERVING", out.Status) + } + wantErr := grpc.Errorf(codes.NotFound, "unknown service") + if _, err := healthCheck(1*time.Second, cc, "grpc.health.v1.Health"); !equalErrors(err, wantErr) { + t.Fatalf("Health/Check(_, _) = _, %v, want _, error code %s", err, codes.NotFound) + } + hs.SetServingStatus("grpc.health.v1.Health", healthpb.HealthCheckResponse_SERVING) + out, err = healthCheck(1*time.Second, cc, "grpc.health.v1.Health") + if err != nil { + t.Fatalf("Health/Check(_, _) = _, %v, want _, <nil>", err) + } + if out.Status != healthpb.HealthCheckResponse_SERVING { + t.Fatalf("Got the serving status %v, want SERVING", out.Status) + } + hs.SetServingStatus("grpc.health.v1.Health", healthpb.HealthCheckResponse_NOT_SERVING) + out, err = healthCheck(1*time.Second, cc, "grpc.health.v1.Health") + if err != nil { + t.Fatalf("Health/Check(_, _) = _, %v, want _, <nil>", err) + } + if out.Status != healthpb.HealthCheckResponse_NOT_SERVING { + t.Fatalf("Got the serving status %v, want NOT_SERVING", out.Status) + } + +} + +func TestErrorChanNoIO(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testErrorChanNoIO(t, e) + } +} + +func testErrorChanNoIO(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + tc := testpb.NewTestServiceClient(te.clientConn()) + if _, err := tc.FullDuplexCall(context.Background()); err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } +} + +func TestEmptyUnaryWithUserAgent(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testEmptyUnaryWithUserAgent(t, e) + } +} + +func testEmptyUnaryWithUserAgent(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + var header metadata.MD + reply, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Header(&header)) + if err != nil || !proto.Equal(&testpb.Empty{}, reply) { + t.Fatalf("TestService/EmptyCall(_, _) = %v, %v, want %v, <nil>", reply, err, &testpb.Empty{}) + } + if v, ok := header["ua"]; !ok || v[0] != testAppUA { + t.Fatalf("header[\"ua\"] = %q, %t, want %q, true", v, ok, testAppUA) + } + + te.srv.Stop() +} + +func TestFailedEmptyUnary(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testFailedEmptyUnary(t, e) + } +} + +func testFailedEmptyUnary(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + ctx := metadata.NewContext(context.Background(), testMetadata) + wantErr := grpc.Errorf(codes.DataLoss, "missing expected user-agent") + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}); !equalErrors(err, wantErr) { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %v", err, wantErr) + } +} + +func TestLargeUnary(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testLargeUnary(t, e) + } +} + +func testLargeUnary(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const argSize = 271828 + const respSize = 314159 + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + reply, err := tc.UnaryCall(context.Background(), req) + if err != nil { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, <nil>", err) + } + pt := reply.GetPayload().GetType() + ps := len(reply.GetPayload().GetBody()) + if pt != testpb.PayloadType_COMPRESSABLE || ps != respSize { + t.Fatalf("Got the reply with type %d len %d; want %d, %d", pt, ps, testpb.PayloadType_COMPRESSABLE, respSize) + } +} + +func TestExceedMsgLimit(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testExceedMsgLimit(t, e) + } +} + +func testExceedMsgLimit(t *testing.T, e env) { + te := newTest(t, e) + te.maxMsgSize = 1024 + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + argSize := int32(te.maxMsgSize + 1) + const smallSize = 1 + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + smallPayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, smallSize) + if err != nil { + t.Fatal(err) + } + + // test on server side for unary RPC + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(smallSize), + Payload: payload, + } + if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.Internal { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.Internal) + } + // test on client side for unary RPC + req.ResponseSize = proto.Int32(int32(te.maxMsgSize) + 1) + req.Payload = smallPayload + if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.Internal { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.Internal) + } + + // test on server side for streaming RPC + stream, err := tc.FullDuplexCall(te.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(1), + }, + } + + spayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(te.maxMsgSize+1)) + if err != nil { + t.Fatal(err) + } + + sreq := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: spayload, + } + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, sreq, err) + } + if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.Internal { + t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.Internal) + } + + // test on client side for streaming RPC + stream, err = tc.FullDuplexCall(te.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + respParam[0].Size = proto.Int32(int32(te.maxMsgSize) + 1) + sreq.Payload = smallPayload + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, sreq, err) + } + if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.Internal { + t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.Internal) + } + +} + +func TestPeerClientSide(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testPeerClientSide(t, e) + } +} + +func testPeerClientSide(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + peer := new(peer.Peer) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(peer), grpc.FailFast(false)); err != nil { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, <nil>", err) + } + pa := peer.Addr.String() + if e.network == "unix" { + if pa != te.srvAddr { + t.Fatalf("peer.Addr = %v, want %v", pa, te.srvAddr) + } + return + } + _, pp, err := net.SplitHostPort(pa) + if err != nil { + t.Fatalf("Failed to parse address from peer.") + } + _, sp, err := net.SplitHostPort(te.srvAddr) + if err != nil { + t.Fatalf("Failed to parse address of test server.") + } + if pp != sp { + t.Fatalf("peer.Addr = localhost:%v, want localhost:%v", pp, sp) + } +} + +func TestMetadataUnaryRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testMetadataUnaryRPC(t, e) + } +} + +func testMetadataUnaryRPC(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const argSize = 2718 + const respSize = 314 + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + var header, trailer metadata.MD + ctx := metadata.NewContext(context.Background(), testMetadata) + if _, err := tc.UnaryCall(ctx, req, grpc.Header(&header), grpc.Trailer(&trailer)); err != nil { + t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, <nil>", ctx, err) + } + // Ignore optional response headers that Servers may set: + if header != nil { + delete(header, "trailer") // RFC 2616 says server SHOULD (but optional) declare trailers + delete(header, "date") // the Date header is also optional + } + if !reflect.DeepEqual(header, testMetadata) { + t.Fatalf("Received header metadata %v, want %v", header, testMetadata) + } + if !reflect.DeepEqual(trailer, testTrailerMetadata) { + t.Fatalf("Received trailer metadata %v, want %v", trailer, testTrailerMetadata) + } +} + +func TestMultipleSetTrailerUnaryRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testMultipleSetTrailerUnaryRPC(t, e) + } +} + +func testMultipleSetTrailerUnaryRPC(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, multipleSetTrailer: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const ( + argSize = 1 + respSize = 1 + ) + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + var trailer metadata.MD + ctx := metadata.NewContext(context.Background(), testMetadata) + if _, err := tc.UnaryCall(ctx, req, grpc.Trailer(&trailer), grpc.FailFast(false)); err != nil { + t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, <nil>", ctx, err) + } + expectedTrailer := metadata.Join(testTrailerMetadata, testTrailerMetadata2) + if !reflect.DeepEqual(trailer, expectedTrailer) { + t.Fatalf("Received trailer metadata %v, want %v", trailer, expectedTrailer) + } +} + +func TestMultipleSetTrailerStreamingRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testMultipleSetTrailerStreamingRPC(t, e) + } +} + +func testMultipleSetTrailerStreamingRPC(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, multipleSetTrailer: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + ctx := metadata.NewContext(context.Background(), testMetadata) + stream, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + if err := stream.CloseSend(); err != nil { + t.Fatalf("%v.CloseSend() got %v, want %v", stream, err, nil) + } + if _, err := stream.Recv(); err != io.EOF { + t.Fatalf("%v failed to complele the FullDuplexCall: %v", stream, err) + } + + trailer := stream.Trailer() + expectedTrailer := metadata.Join(testTrailerMetadata, testTrailerMetadata2) + if !reflect.DeepEqual(trailer, expectedTrailer) { + t.Fatalf("Received trailer metadata %v, want %v", trailer, expectedTrailer) + } +} + +func TestSetAndSendHeaderUnaryRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testSetAndSendHeaderUnaryRPC(t, e) + } +} + +// To test header metadata is sent on SendHeader(). +func testSetAndSendHeaderUnaryRPC(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, setAndSendHeader: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const ( + argSize = 1 + respSize = 1 + ) + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + var header metadata.MD + ctx := metadata.NewContext(context.Background(), testMetadata) + if _, err := tc.UnaryCall(ctx, req, grpc.Header(&header), grpc.FailFast(false)); err != nil { + t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, <nil>", ctx, err) + } + expectedHeader := metadata.Join(testMetadata, testMetadata2) + if !reflect.DeepEqual(header, expectedHeader) { + t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) + } +} + +func TestMultipleSetHeaderUnaryRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testMultipleSetHeaderUnaryRPC(t, e) + } +} + +// To test header metadata is sent when sending response. +func testMultipleSetHeaderUnaryRPC(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, setHeaderOnly: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const ( + argSize = 1 + respSize = 1 + ) + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + + var header metadata.MD + ctx := metadata.NewContext(context.Background(), testMetadata) + if _, err := tc.UnaryCall(ctx, req, grpc.Header(&header), grpc.FailFast(false)); err != nil { + t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, <nil>", ctx, err) + } + expectedHeader := metadata.Join(testMetadata, testMetadata2) + if !reflect.DeepEqual(header, expectedHeader) { + t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) + } +} + +func TestMultipleSetHeaderUnaryRPCError(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testMultipleSetHeaderUnaryRPCError(t, e) + } +} + +// To test header metadata is sent when sending status. +func testMultipleSetHeaderUnaryRPCError(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, setHeaderOnly: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const ( + argSize = 1 + respSize = -1 // Invalid respSize to make RPC fail. + ) + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + var header metadata.MD + ctx := metadata.NewContext(context.Background(), testMetadata) + if _, err := tc.UnaryCall(ctx, req, grpc.Header(&header), grpc.FailFast(false)); err == nil { + t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, <non-nil>", ctx, err) + } + expectedHeader := metadata.Join(testMetadata, testMetadata2) + if !reflect.DeepEqual(header, expectedHeader) { + t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) + } +} + +func TestSetAndSendHeaderStreamingRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testSetAndSendHeaderStreamingRPC(t, e) + } +} + +// To test header metadata is sent on SendHeader(). +func testSetAndSendHeaderStreamingRPC(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, setAndSendHeader: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const ( + argSize = 1 + respSize = 1 + ) + ctx := metadata.NewContext(context.Background(), testMetadata) + stream, err := tc.FullDuplexCall(ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + if err := stream.CloseSend(); err != nil { + t.Fatalf("%v.CloseSend() got %v, want %v", stream, err, nil) + } + if _, err := stream.Recv(); err != io.EOF { + t.Fatalf("%v failed to complele the FullDuplexCall: %v", stream, err) + } + + header, err := stream.Header() + if err != nil { + t.Fatalf("%v.Header() = _, %v, want _, <nil>", stream, err) + } + expectedHeader := metadata.Join(testMetadata, testMetadata2) + if !reflect.DeepEqual(header, expectedHeader) { + t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) + } +} + +func TestMultipleSetHeaderStreamingRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testMultipleSetHeaderStreamingRPC(t, e) + } +} + +// To test header metadata is sent when sending response. +func testMultipleSetHeaderStreamingRPC(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, setHeaderOnly: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const ( + argSize = 1 + respSize = 1 + ) + ctx := metadata.NewContext(context.Background(), testMetadata) + stream, err := tc.FullDuplexCall(ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: []*testpb.ResponseParameters{ + {Size: proto.Int32(respSize)}, + }, + Payload: payload, + } + if err := stream.Send(req); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, req, err) + } + if _, err := stream.Recv(); err != nil { + t.Fatalf("%v.Recv() = %v, want <nil>", stream, err) + } + if err := stream.CloseSend(); err != nil { + t.Fatalf("%v.CloseSend() got %v, want %v", stream, err, nil) + } + if _, err := stream.Recv(); err != io.EOF { + t.Fatalf("%v failed to complele the FullDuplexCall: %v", stream, err) + } + + header, err := stream.Header() + if err != nil { + t.Fatalf("%v.Header() = _, %v, want _, <nil>", stream, err) + } + expectedHeader := metadata.Join(testMetadata, testMetadata2) + if !reflect.DeepEqual(header, expectedHeader) { + t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) + } + +} + +func TestMultipleSetHeaderStreamingRPCError(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testMultipleSetHeaderStreamingRPCError(t, e) + } +} + +// To test header metadata is sent when sending status. +func testMultipleSetHeaderStreamingRPCError(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, setHeaderOnly: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const ( + argSize = 1 + respSize = -1 + ) + ctx := metadata.NewContext(context.Background(), testMetadata) + stream, err := tc.FullDuplexCall(ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: []*testpb.ResponseParameters{ + {Size: proto.Int32(respSize)}, + }, + Payload: payload, + } + if err := stream.Send(req); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, req, err) + } + if _, err := stream.Recv(); err == nil { + t.Fatalf("%v.Recv() = %v, want <non-nil>", stream, err) + } + + header, err := stream.Header() + if err != nil { + t.Fatalf("%v.Header() = _, %v, want _, <nil>", stream, err) + } + expectedHeader := metadata.Join(testMetadata, testMetadata2) + if !reflect.DeepEqual(header, expectedHeader) { + t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) + } + + if err := stream.CloseSend(); err != nil { + t.Fatalf("%v.CloseSend() got %v, want %v", stream, err, nil) + } +} + +// TestMalformedHTTP2Metedata verfies the returned error when the client +// sends an illegal metadata. +func TestMalformedHTTP2Metadata(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testMalformedHTTP2Metadata(t, e) + } +} + +func testMalformedHTTP2Metadata(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 2718) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(314), + Payload: payload, + } + ctx := metadata.NewContext(context.Background(), malformedHTTP2Metadata) + if _, err := tc.UnaryCall(ctx, req); grpc.Code(err) != codes.Internal { + t.Fatalf("TestService.UnaryCall(%v, _) = _, %v; want _, %s", ctx, err, codes.Internal) + } +} + +func performOneRPC(t *testing.T, tc testpb.TestServiceClient, wg *sync.WaitGroup) { + defer wg.Done() + const argSize = 2718 + const respSize = 314 + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Error(err) + return + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + reply, err := tc.UnaryCall(context.Background(), req, grpc.FailFast(false)) + if err != nil { + t.Errorf("TestService/UnaryCall(_, _) = _, %v, want _, <nil>", err) + return + } + pt := reply.GetPayload().GetType() + ps := len(reply.GetPayload().GetBody()) + if pt != testpb.PayloadType_COMPRESSABLE || ps != respSize { + t.Errorf("Got reply with type %d len %d; want %d, %d", pt, ps, testpb.PayloadType_COMPRESSABLE, respSize) + return + } +} + +func TestRetry(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testRetry(t, e) + } +} + +// This test mimics a user who sends 1000 RPCs concurrently on a faulty transport. +// TODO(zhaoq): Refactor to make this clearer and add more cases to test racy +// and error-prone paths. +func testRetry(t *testing.T, e env) { + te := newTest(t, e) + te.declareLogNoise("transport: http2Client.notifyError got notified that the client transport was broken") + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + var wg sync.WaitGroup + + numRPC := 1000 + rpcSpacing := 2 * time.Millisecond + if raceMode { + // The race detector has a limit on how many goroutines it can track. + // This test is near the upper limit, and goes over the limit + // depending on the environment (the http.Handler environment uses + // more goroutines) + t.Logf("Shortening test in race mode.") + numRPC /= 2 + rpcSpacing *= 2 + } + + wg.Add(1) + go func() { + // Halfway through starting RPCs, kill all connections: + time.Sleep(time.Duration(numRPC/2) * rpcSpacing) + + // The server shuts down the network connection to make a + // transport error which will be detected by the client side + // code. + internal.TestingCloseConns(te.srv) + wg.Done() + }() + // All these RPCs should succeed eventually. + for i := 0; i < numRPC; i++ { + time.Sleep(rpcSpacing) + wg.Add(1) + go performOneRPC(t, tc, &wg) + } + wg.Wait() +} + +func TestRPCTimeout(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testRPCTimeout(t, e) + } +} + +// TODO(zhaoq): Have a better test coverage of timeout and cancellation mechanism. +func testRPCTimeout(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + + const argSize = 2718 + const respSize = 314 + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + for i := -1; i <= 10; i++ { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(i)*time.Millisecond) + if _, err := tc.UnaryCall(ctx, req); grpc.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/UnaryCallv(_, _) = _, %v; want <nil>, error code: %s", err, codes.DeadlineExceeded) + } + } +} + +func TestCancel(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testCancel(t, e) + } +} + +func testCancel(t *testing.T, e env) { + te := newTest(t, e) + te.declareLogNoise("grpc: the client connection is closing; please retry") + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + + const argSize = 2718 + const respSize = 314 + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + ctx, cancel := context.WithCancel(context.Background()) + time.AfterFunc(1*time.Millisecond, cancel) + if r, err := tc.UnaryCall(ctx, req); grpc.Code(err) != codes.Canceled { + t.Fatalf("TestService/UnaryCall(_, _) = %v, %v; want _, error code: %s", r, err, codes.Canceled) + } + awaitNewConnLogOutput() +} + +func TestCancelNoIO(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testCancelNoIO(t, e) + } +} + +func testCancelNoIO(t *testing.T, e env) { + te := newTest(t, e) + te.declareLogNoise("http2Client.notifyError got notified that the client transport was broken") + te.maxStream = 1 // Only allows 1 live stream per server transport. + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + + // Start one blocked RPC for which we'll never send streaming + // input. This will consume the 1 maximum concurrent streams, + // causing future RPCs to hang. + ctx, cancelFirst := context.WithCancel(context.Background()) + _, err := tc.StreamingInputCall(ctx) + if err != nil { + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, <nil>", tc, err) + } + + // Loop until the ClientConn receives the initial settings + // frame from the server, notifying it about the maximum + // concurrent streams. We know when it's received it because + // an RPC will fail with codes.DeadlineExceeded instead of + // succeeding. + // TODO(bradfitz): add internal test hook for this (Issue 534) + for { + ctx, cancelSecond := context.WithTimeout(context.Background(), 250*time.Millisecond) + _, err := tc.StreamingInputCall(ctx) + cancelSecond() + if err == nil { + time.Sleep(50 * time.Millisecond) + continue + } + if grpc.Code(err) == codes.DeadlineExceeded { + break + } + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, %s", tc, err, codes.DeadlineExceeded) + } + // If there are any RPCs in flight before the client receives + // the max streams setting, let them be expired. + // TODO(bradfitz): add internal test hook for this (Issue 534) + time.Sleep(500 * time.Millisecond) + + ch := make(chan struct{}) + go func() { + defer close(ch) + + // This should be blocked until the 1st is canceled. + ctx, cancelThird := context.WithTimeout(context.Background(), 2*time.Second) + if _, err := tc.StreamingInputCall(ctx); err != nil { + t.Errorf("%v.StreamingInputCall(_) = _, %v, want _, <nil>", tc, err) + } + cancelThird() + }() + cancelFirst() + <-ch +} + +// The following tests the gRPC streaming RPC implementations. +// TODO(zhaoq): Have better coverage on error cases. +var ( + reqSizes = []int{27182, 8, 1828, 45904} + respSizes = []int{31415, 9, 2653, 58979} +) + +func TestNoService(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testNoService(t, e) + } +} + +func testNoService(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(nil) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + + stream, err := tc.FullDuplexCall(te.ctx, grpc.FailFast(false)) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + if _, err := stream.Recv(); grpc.Code(err) != codes.Unimplemented { + t.Fatalf("stream.Recv() = _, %v, want _, error code %s", err, codes.Unimplemented) + } +} + +func TestPingPong(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testPingPong(t, e) + } +} + +func testPingPong(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + stream, err := tc.FullDuplexCall(te.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + var index int + for index < len(reqSizes) { + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(int32(respSizes[index])), + }, + } + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(reqSizes[index])) + if err != nil { + t.Fatal(err) + } + + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + if err := stream.Send(req); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, req, err) + } + reply, err := stream.Recv() + if err != nil { + t.Fatalf("%v.Recv() = %v, want <nil>", stream, err) + } + pt := reply.GetPayload().GetType() + if pt != testpb.PayloadType_COMPRESSABLE { + t.Fatalf("Got the reply of type %d, want %d", pt, testpb.PayloadType_COMPRESSABLE) + } + size := len(reply.GetPayload().GetBody()) + if size != int(respSizes[index]) { + t.Fatalf("Got reply body of length %d, want %d", size, respSizes[index]) + } + index++ + } + if err := stream.CloseSend(); err != nil { + t.Fatalf("%v.CloseSend() got %v, want %v", stream, err, nil) + } + if _, err := stream.Recv(); err != io.EOF { + t.Fatalf("%v failed to complele the ping pong test: %v", stream, err) + } +} + +func TestMetadataStreamingRPC(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testMetadataStreamingRPC(t, e) + } +} + +func testMetadataStreamingRPC(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + ctx := metadata.NewContext(te.ctx, testMetadata) + stream, err := tc.FullDuplexCall(ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + go func() { + headerMD, err := stream.Header() + if e.security == "tls" { + delete(headerMD, "transport_security_type") + } + delete(headerMD, "trailer") // ignore if present + if err != nil || !reflect.DeepEqual(testMetadata, headerMD) { + t.Errorf("#1 %v.Header() = %v, %v, want %v, <nil>", stream, headerMD, err, testMetadata) + } + // test the cached value. + headerMD, err = stream.Header() + delete(headerMD, "trailer") // ignore if present + if err != nil || !reflect.DeepEqual(testMetadata, headerMD) { + t.Errorf("#2 %v.Header() = %v, %v, want %v, <nil>", stream, headerMD, err, testMetadata) + } + var index int + for index < len(reqSizes) { + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(int32(respSizes[index])), + }, + } + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(reqSizes[index])) + if err != nil { + t.Fatal(err) + } + + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + if err := stream.Send(req); err != nil { + t.Errorf("%v.Send(%v) = %v, want <nil>", stream, req, err) + return + } + index++ + } + // Tell the server we're done sending args. + stream.CloseSend() + }() + for { + if _, err := stream.Recv(); err != nil { + break + } + } + trailerMD := stream.Trailer() + if !reflect.DeepEqual(testTrailerMetadata, trailerMD) { + t.Fatalf("%v.Trailer() = %v, want %v", stream, trailerMD, testTrailerMetadata) + } +} + +func TestServerStreaming(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testServerStreaming(t, e) + } +} + +func testServerStreaming(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + respParam := make([]*testpb.ResponseParameters, len(respSizes)) + for i, s := range respSizes { + respParam[i] = &testpb.ResponseParameters{ + Size: proto.Int32(int32(s)), + } + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + } + stream, err := tc.StreamingOutputCall(context.Background(), req) + if err != nil { + t.Fatalf("%v.StreamingOutputCall(_) = _, %v, want <nil>", tc, err) + } + var rpcStatus error + var respCnt int + var index int + for { + reply, err := stream.Recv() + if err != nil { + rpcStatus = err + break + } + pt := reply.GetPayload().GetType() + if pt != testpb.PayloadType_COMPRESSABLE { + t.Fatalf("Got the reply of type %d, want %d", pt, testpb.PayloadType_COMPRESSABLE) + } + size := len(reply.GetPayload().GetBody()) + if size != int(respSizes[index]) { + t.Fatalf("Got reply body of length %d, want %d", size, respSizes[index]) + } + index++ + respCnt++ + } + if rpcStatus != io.EOF { + t.Fatalf("Failed to finish the server streaming rpc: %v, want <EOF>", rpcStatus) + } + if respCnt != len(respSizes) { + t.Fatalf("Got %d reply, want %d", len(respSizes), respCnt) + } +} + +func TestFailedServerStreaming(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testFailedServerStreaming(t, e) + } +} + +func testFailedServerStreaming(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + respParam := make([]*testpb.ResponseParameters, len(respSizes)) + for i, s := range respSizes { + respParam[i] = &testpb.ResponseParameters{ + Size: proto.Int32(int32(s)), + } + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + } + ctx := metadata.NewContext(te.ctx, testMetadata) + stream, err := tc.StreamingOutputCall(ctx, req) + if err != nil { + t.Fatalf("%v.StreamingOutputCall(_) = _, %v, want <nil>", tc, err) + } + wantErr := grpc.Errorf(codes.DataLoss, "got extra metadata") + if _, err := stream.Recv(); !equalErrors(err, wantErr) { + t.Fatalf("%v.Recv() = _, %v, want _, %v", stream, err, wantErr) + } +} + +// concurrentSendServer is a TestServiceServer whose +// StreamingOutputCall makes ten serial Send calls, sending payloads +// "0".."9", inclusive. TestServerStreamingConcurrent verifies they +// were received in the correct order, and that there were no races. +// +// All other TestServiceServer methods crash if called. +type concurrentSendServer struct { + testpb.TestServiceServer +} + +func (s concurrentSendServer) StreamingOutputCall(args *testpb.StreamingOutputCallRequest, stream testpb.TestService_StreamingOutputCallServer) error { + for i := 0; i < 10; i++ { + stream.Send(&testpb.StreamingOutputCallResponse{ + Payload: &testpb.Payload{ + Body: []byte{'0' + uint8(i)}, + }, + }) + } + return nil +} + +// Tests doing a bunch of concurrent streaming output calls. +func TestServerStreamingConcurrent(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testServerStreamingConcurrent(t, e) + } +} + +func testServerStreamingConcurrent(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(concurrentSendServer{}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + + doStreamingCall := func() { + req := &testpb.StreamingOutputCallRequest{} + stream, err := tc.StreamingOutputCall(context.Background(), req) + if err != nil { + t.Errorf("%v.StreamingOutputCall(_) = _, %v, want <nil>", tc, err) + return + } + var ngot int + var buf bytes.Buffer + for { + reply, err := stream.Recv() + if err == io.EOF { + break + } + if err != nil { + t.Fatal(err) + } + ngot++ + if buf.Len() > 0 { + buf.WriteByte(',') + } + buf.Write(reply.GetPayload().GetBody()) + } + if want := 10; ngot != want { + t.Errorf("Got %d replies, want %d", ngot, want) + } + if got, want := buf.String(), "0,1,2,3,4,5,6,7,8,9"; got != want { + t.Errorf("Got replies %q; want %q", got, want) + } + } + + var wg sync.WaitGroup + for i := 0; i < 20; i++ { + wg.Add(1) + go func() { + defer wg.Done() + doStreamingCall() + }() + } + wg.Wait() + +} + +func TestClientStreaming(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testClientStreaming(t, e) + } +} + +func testClientStreaming(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + stream, err := tc.StreamingInputCall(te.ctx) + if err != nil { + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want <nil>", tc, err) + } + + var sum int + for _, s := range reqSizes { + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(s)) + if err != nil { + t.Fatal(err) + } + + req := &testpb.StreamingInputCallRequest{ + Payload: payload, + } + if err := stream.Send(req); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, req, err) + } + sum += s + } + reply, err := stream.CloseAndRecv() + if err != nil { + t.Fatalf("%v.CloseAndRecv() got error %v, want %v", stream, err, nil) + } + if reply.GetAggregatedPayloadSize() != int32(sum) { + t.Fatalf("%v.CloseAndRecv().GetAggregatePayloadSize() = %v; want %v", stream, reply.GetAggregatedPayloadSize(), sum) + } +} + +func TestClientStreamingError(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + if e.name == "handler-tls" { + continue + } + testClientStreamingError(t, e) + } +} + +func testClientStreamingError(t *testing.T, e env) { + te := newTest(t, e) + te.startServer(&testServer{security: e.security, earlyFail: true}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + stream, err := tc.StreamingInputCall(te.ctx) + if err != nil { + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want <nil>", tc, err) + } + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 1) + if err != nil { + t.Fatal(err) + } + + req := &testpb.StreamingInputCallRequest{ + Payload: payload, + } + // The 1st request should go through. + if err := stream.Send(req); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, req, err) + } + for { + if err := stream.Send(req); err != io.EOF { + continue + } + if _, err := stream.CloseAndRecv(); grpc.Code(err) != codes.NotFound { + t.Fatalf("%v.CloseAndRecv() = %v, want error %s", stream, err, codes.NotFound) + } + break + } +} + +func TestExceedMaxStreamsLimit(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testExceedMaxStreamsLimit(t, e) + } +} + +func testExceedMaxStreamsLimit(t *testing.T, e env) { + te := newTest(t, e) + te.declareLogNoise( + "http2Client.notifyError got notified that the client transport was broken", + "Conn.resetTransport failed to create client transport", + "grpc: the connection is closing", + ) + te.maxStream = 1 // Only allows 1 live stream per server transport. + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + + _, err := tc.StreamingInputCall(te.ctx) + if err != nil { + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, <nil>", tc, err) + } + // Loop until receiving the new max stream setting from the server. + for { + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + _, err := tc.StreamingInputCall(ctx) + if err == nil { + time.Sleep(time.Second) + continue + } + if grpc.Code(err) == codes.DeadlineExceeded { + break + } + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, %s", tc, err, codes.DeadlineExceeded) + } +} + +const defaultMaxStreamsClient = 100 + +func TestExceedDefaultMaxStreamsLimit(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testExceedDefaultMaxStreamsLimit(t, e) + } +} + +func testExceedDefaultMaxStreamsLimit(t *testing.T, e env) { + te := newTest(t, e) + te.declareLogNoise( + "http2Client.notifyError got notified that the client transport was broken", + "Conn.resetTransport failed to create client transport", + "grpc: the connection is closing", + ) + // When masStream is set to 0 the server doesn't send a settings frame for + // MaxConcurrentStreams, essentially allowing infinite (math.MaxInt32) streams. + // In such a case, there should be a default cap on the client-side. + te.maxStream = 0 + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + + // Create as many streams as a client can. + for i := 0; i < defaultMaxStreamsClient; i++ { + if _, err := tc.StreamingInputCall(te.ctx); err != nil { + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, <nil>", tc, err) + } + } + + // Trying to create one more should timeout. + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + _, err := tc.StreamingInputCall(ctx) + if err == nil || grpc.Code(err) != codes.DeadlineExceeded { + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, %s", tc, err, codes.DeadlineExceeded) + } +} + +func TestStreamsQuotaRecovery(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testStreamsQuotaRecovery(t, e) + } +} + +func testStreamsQuotaRecovery(t *testing.T, e env) { + te := newTest(t, e) + te.declareLogNoise( + "http2Client.notifyError got notified that the client transport was broken", + "Conn.resetTransport failed to create client transport", + "grpc: the connection is closing", + ) + te.maxStream = 1 // Allows 1 live stream. + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.StreamingInputCall(context.Background()); err != nil { + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, <nil>", tc, err) + } + // Loop until the new max stream setting is effective. + for { + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + _, err := tc.StreamingInputCall(ctx) + if err == nil { + time.Sleep(time.Second) + continue + } + if grpc.Code(err) == codes.DeadlineExceeded { + break + } + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, %s", tc, err, codes.DeadlineExceeded) + } + + var wg sync.WaitGroup + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 314) + if err != nil { + t.Fatal(err) + } + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(1592), + Payload: payload, + } + // No rpc should go through due to the max streams limit. + ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := tc.UnaryCall(ctx, req, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { + t.Errorf("TestService/UnaryCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) + } + }() + } + wg.Wait() +} + +func TestCompressServerHasNoSupport(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testCompressServerHasNoSupport(t, e) + } +} + +func testCompressServerHasNoSupport(t *testing.T, e env) { + te := newTest(t, e) + te.serverCompression = false + te.clientCompression = true + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + const argSize = 271828 + const respSize = 314159 + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.Unimplemented { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code %s", err, codes.Unimplemented) + } + // Streaming RPC + stream, err := tc.FullDuplexCall(context.Background()) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(31415), + }, + } + payload, err = newPayload(testpb.PayloadType_COMPRESSABLE, int32(31415)) + if err != nil { + t.Fatal(err) + } + sreq := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, sreq, err) + } + if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.Unimplemented { + t.Fatalf("%v.Recv() = %v, want error code %s", stream, err, codes.Unimplemented) + } +} + +func TestCompressOK(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testCompressOK(t, e) + } +} + +func testCompressOK(t *testing.T, e env) { + te := newTest(t, e) + te.serverCompression = true + te.clientCompression = true + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + // Unary call + const argSize = 271828 + const respSize = 314159 + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseSize: proto.Int32(respSize), + Payload: payload, + } + ctx := metadata.NewContext(context.Background(), metadata.Pairs("something", "something")) + if _, err := tc.UnaryCall(ctx, req); err != nil { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, <nil>", err) + } + // Streaming RPC + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + stream, err := tc.FullDuplexCall(ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(31415), + }, + } + payload, err = newPayload(testpb.PayloadType_COMPRESSABLE, int32(31415)) + if err != nil { + t.Fatal(err) + } + sreq := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, sreq, err) + } + if _, err := stream.Recv(); err != nil { + t.Fatalf("%v.Recv() = %v, want <nil>", stream, err) + } +} + +func TestUnaryClientInterceptor(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testUnaryClientInterceptor(t, e) + } +} + +func failOkayRPC(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { + err := invoker(ctx, method, req, reply, cc, opts...) + if err == nil { + return grpc.Errorf(codes.NotFound, "") + } + return err +} + +func testUnaryClientInterceptor(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.unaryClientInt = failOkayRPC + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + tc := testpb.NewTestServiceClient(te.clientConn()) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.NotFound { + t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, error code %s", tc, err, codes.NotFound) + } +} + +func TestStreamClientInterceptor(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testStreamClientInterceptor(t, e) + } +} + +func failOkayStream(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { + s, err := streamer(ctx, desc, cc, method, opts...) + if err == nil { + return nil, grpc.Errorf(codes.NotFound, "") + } + return s, nil +} + +func testStreamClientInterceptor(t *testing.T, e env) { + te := newTest(t, e) + te.streamClientInt = failOkayStream + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + tc := testpb.NewTestServiceClient(te.clientConn()) + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(int32(1)), + }, + } + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(1)) + if err != nil { + t.Fatal(err) + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + if _, err := tc.StreamingOutputCall(context.Background(), req); grpc.Code(err) != codes.NotFound { + t.Fatalf("%v.StreamingOutputCall(_) = _, %v, want _, error code %s", tc, err, codes.NotFound) + } +} + +func TestUnaryServerInterceptor(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testUnaryServerInterceptor(t, e) + } +} + +func errInjector(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + return nil, grpc.Errorf(codes.PermissionDenied, "") +} + +func testUnaryServerInterceptor(t *testing.T, e env) { + te := newTest(t, e) + te.unaryServerInt = errInjector + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + tc := testpb.NewTestServiceClient(te.clientConn()) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.PermissionDenied { + t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, error code %s", tc, err, codes.PermissionDenied) + } +} + +func TestStreamServerInterceptor(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + // TODO(bradfitz): Temporarily skip this env due to #619. + if e.name == "handler-tls" { + continue + } + testStreamServerInterceptor(t, e) + } +} + +func fullDuplexOnly(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { + if info.FullMethod == "/grpc.testing.TestService/FullDuplexCall" { + return handler(srv, ss) + } + // Reject the other methods. + return grpc.Errorf(codes.PermissionDenied, "") +} + +func testStreamServerInterceptor(t *testing.T, e env) { + te := newTest(t, e) + te.streamServerInt = fullDuplexOnly + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + tc := testpb.NewTestServiceClient(te.clientConn()) + respParam := []*testpb.ResponseParameters{ + { + Size: proto.Int32(int32(1)), + }, + } + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(1)) + if err != nil { + t.Fatal(err) + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseParameters: respParam, + Payload: payload, + } + s1, err := tc.StreamingOutputCall(context.Background(), req) + if err != nil { + t.Fatalf("%v.StreamingOutputCall(_) = _, %v, want _, <nil>", tc, err) + } + if _, err := s1.Recv(); grpc.Code(err) != codes.PermissionDenied { + t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, error code %s", tc, err, codes.PermissionDenied) + } + s2, err := tc.FullDuplexCall(context.Background()) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err) + } + if err := s2.Send(req); err != nil { + t.Fatalf("%v.Send(_) = %v, want <nil>", s2, err) + } + if _, err := s2.Recv(); err != nil { + t.Fatalf("%v.Recv() = _, %v, want _, <nil>", s2, err) + } +} + +// funcServer implements methods of TestServiceServer using funcs, +// similar to an http.HandlerFunc. +// Any unimplemented method will crash. Tests implement the method(s) +// they need. +type funcServer struct { + testpb.TestServiceServer + unaryCall func(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) + streamingInputCall func(stream testpb.TestService_StreamingInputCallServer) error +} + +func (s *funcServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + return s.unaryCall(ctx, in) +} + +func (s *funcServer) StreamingInputCall(stream testpb.TestService_StreamingInputCallServer) error { + return s.streamingInputCall(stream) +} + +func TestClientRequestBodyErrorUnexpectedEOF(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testClientRequestBodyErrorUnexpectedEOF(t, e) + } +} + +func testClientRequestBodyErrorUnexpectedEOF(t *testing.T, e env) { + te := newTest(t, e) + ts := &funcServer{unaryCall: func(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + errUnexpectedCall := errors.New("unexpected call func server method") + t.Error(errUnexpectedCall) + return nil, errUnexpectedCall + }} + te.startServer(ts) + defer te.tearDown() + te.withServerTester(func(st *serverTester) { + st.writeHeadersGRPC(1, "/grpc.testing.TestService/UnaryCall") + // Say we have 5 bytes coming, but set END_STREAM flag: + st.writeData(1, true, []byte{0, 0, 0, 0, 5}) + st.wantAnyFrame() // wait for server to crash (it used to crash) + }) +} + +func TestClientRequestBodyErrorCloseAfterLength(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testClientRequestBodyErrorCloseAfterLength(t, e) + } +} + +func testClientRequestBodyErrorCloseAfterLength(t *testing.T, e env) { + te := newTest(t, e) + te.declareLogNoise("Server.processUnaryRPC failed to write status") + ts := &funcServer{unaryCall: func(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + errUnexpectedCall := errors.New("unexpected call func server method") + t.Error(errUnexpectedCall) + return nil, errUnexpectedCall + }} + te.startServer(ts) + defer te.tearDown() + te.withServerTester(func(st *serverTester) { + st.writeHeadersGRPC(1, "/grpc.testing.TestService/UnaryCall") + // say we're sending 5 bytes, but then close the connection instead. + st.writeData(1, false, []byte{0, 0, 0, 0, 5}) + st.cc.Close() + }) +} + +func TestClientRequestBodyErrorCancel(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testClientRequestBodyErrorCancel(t, e) + } +} + +func testClientRequestBodyErrorCancel(t *testing.T, e env) { + te := newTest(t, e) + gotCall := make(chan bool, 1) + ts := &funcServer{unaryCall: func(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { + gotCall <- true + return new(testpb.SimpleResponse), nil + }} + te.startServer(ts) + defer te.tearDown() + te.withServerTester(func(st *serverTester) { + st.writeHeadersGRPC(1, "/grpc.testing.TestService/UnaryCall") + // Say we have 5 bytes coming, but cancel it instead. + st.writeRSTStream(1, http2.ErrCodeCancel) + st.writeData(1, false, []byte{0, 0, 0, 0, 5}) + + // Verify we didn't a call yet. + select { + case <-gotCall: + t.Fatal("unexpected call") + default: + } + + // And now send an uncanceled (but still invalid), just to get a response. + st.writeHeadersGRPC(3, "/grpc.testing.TestService/UnaryCall") + st.writeData(3, true, []byte{0, 0, 0, 0, 0}) + <-gotCall + st.wantAnyFrame() + }) +} + +func TestClientRequestBodyErrorCancelStreamingInput(t *testing.T) { + defer leakCheck(t)() + for _, e := range listTestEnv() { + testClientRequestBodyErrorCancelStreamingInput(t, e) + } +} + +func testClientRequestBodyErrorCancelStreamingInput(t *testing.T, e env) { + te := newTest(t, e) + recvErr := make(chan error, 1) + ts := &funcServer{streamingInputCall: func(stream testpb.TestService_StreamingInputCallServer) error { + _, err := stream.Recv() + recvErr <- err + return nil + }} + te.startServer(ts) + defer te.tearDown() + te.withServerTester(func(st *serverTester) { + st.writeHeadersGRPC(1, "/grpc.testing.TestService/StreamingInputCall") + // Say we have 5 bytes coming, but cancel it instead. + st.writeData(1, false, []byte{0, 0, 0, 0, 5}) + st.writeRSTStream(1, http2.ErrCodeCancel) + + var got error + select { + case got = <-recvErr: + case <-time.After(3 * time.Second): + t.Fatal("timeout waiting for error") + } + if grpc.Code(got) != codes.Canceled { + t.Errorf("error = %#v; want error code %s", got, codes.Canceled) + } + }) +} + +const clientAlwaysFailCredErrorMsg = "clientAlwaysFailCred always fails" + +var errClientAlwaysFailCred = errors.New(clientAlwaysFailCredErrorMsg) + +type clientAlwaysFailCred struct{} + +func (c clientAlwaysFailCred) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return nil, nil, errClientAlwaysFailCred +} +func (c clientAlwaysFailCred) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return rawConn, nil, nil +} +func (c clientAlwaysFailCred) Info() credentials.ProtocolInfo { + return credentials.ProtocolInfo{} +} +func (c clientAlwaysFailCred) Clone() credentials.TransportCredentials { + return nil +} +func (c clientAlwaysFailCred) OverrideServerName(s string) error { + return nil +} + +func TestDialWithBlockErrorOnBadCertificates(t *testing.T) { + te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: true}) + te.startServer(&testServer{security: te.e.security}) + defer te.tearDown() + + var ( + err error + opts []grpc.DialOption + ) + opts = append(opts, grpc.WithTransportCredentials(clientAlwaysFailCred{}), grpc.WithBlock()) + te.cc, err = grpc.Dial(te.srvAddr, opts...) + if err != errClientAlwaysFailCred { + te.t.Fatalf("Dial(%q) = %v, want %v", te.srvAddr, err, errClientAlwaysFailCred) + } +} + +func TestFailFastRPCErrorOnBadCertificates(t *testing.T) { + te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: true}) + te.startServer(&testServer{security: te.e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); !strings.Contains(err.Error(), clientAlwaysFailCredErrorMsg) { + te.t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want err.Error() contains %q", err, clientAlwaysFailCredErrorMsg) + } +} + +func TestFailFastRPCWithNoBalancerErrorOnBadCertificates(t *testing.T) { + te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: false}) + te.startServer(&testServer{security: te.e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); !strings.Contains(err.Error(), clientAlwaysFailCredErrorMsg) { + te.t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want err.Error() contains %q", err, clientAlwaysFailCredErrorMsg) + } +} + +func TestNonFailFastRPCWithNoBalancerErrorOnBadCertificates(t *testing.T) { + te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: false}) + te.startServer(&testServer{security: te.e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); !strings.Contains(err.Error(), clientAlwaysFailCredErrorMsg) { + te.t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want err.Error() contains %q", err, clientAlwaysFailCredErrorMsg) + } +} + +type clientTimeoutCreds struct { + timeoutReturned bool +} + +func (c *clientTimeoutCreds) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + if !c.timeoutReturned { + c.timeoutReturned = true + return nil, nil, context.DeadlineExceeded + } + return rawConn, nil, nil +} +func (c *clientTimeoutCreds) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return rawConn, nil, nil +} +func (c *clientTimeoutCreds) Info() credentials.ProtocolInfo { + return credentials.ProtocolInfo{} +} +func (c *clientTimeoutCreds) Clone() credentials.TransportCredentials { + return nil +} +func (c *clientTimeoutCreds) OverrideServerName(s string) error { + return nil +} + +func TestNonFailFastRPCSucceedOnTimeoutCreds(t *testing.T) { + te := newTest(t, env{name: "timeout-cred", network: "tcp", security: "clientTimeoutCreds", balancer: false}) + te.userAgent = testAppUA + te.startServer(&testServer{security: te.e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + // This unary call should succeed, because ClientHandshake will succeed for the second time. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { + te.t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want <nil>", err) + } +} + +type serverDispatchCred struct { + ready chan struct{} + rawConn net.Conn +} + +func newServerDispatchCred() *serverDispatchCred { + return &serverDispatchCred{ + ready: make(chan struct{}), + } +} +func (c *serverDispatchCred) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return rawConn, nil, nil +} +func (c *serverDispatchCred) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + c.rawConn = rawConn + close(c.ready) + return nil, nil, credentials.ErrConnDispatched +} +func (c *serverDispatchCred) Info() credentials.ProtocolInfo { + return credentials.ProtocolInfo{} +} +func (c *serverDispatchCred) Clone() credentials.TransportCredentials { + return nil +} +func (c *serverDispatchCred) OverrideServerName(s string) error { + return nil +} +func (c *serverDispatchCred) getRawConn() net.Conn { + <-c.ready + return c.rawConn +} + +func TestServerCredsDispatch(t *testing.T) { + lis, err := net.Listen("tcp", ":0") + if err != nil { + t.Fatalf("Failed to listen: %v", err) + } + cred := newServerDispatchCred() + s := grpc.NewServer(grpc.Creds(cred)) + go s.Serve(lis) + defer s.Stop() + + cc, err := grpc.Dial(lis.Addr().String(), grpc.WithTransportCredentials(cred)) + if err != nil { + t.Fatalf("grpc.Dial(%q) = %v", lis.Addr().String(), err) + } + defer cc.Close() + + // Check rawConn is not closed. + if n, err := cred.getRawConn().Write([]byte{0}); n <= 0 || err != nil { + t.Errorf("Read() = %v, %v; want n>0, <nil>", n, err) + } +} + +func TestFlowControlLogicalRace(t *testing.T) { + // Test for a regression of https://github.com/grpc/grpc-go/issues/632, + // and other flow control bugs. + + defer leakCheck(t)() + + const ( + itemCount = 100 + itemSize = 1 << 10 + recvCount = 2 + maxFailures = 3 + + requestTimeout = time.Second + ) + + requestCount := 10000 + if raceMode { + requestCount = 1000 + } + + lis, err := net.Listen("tcp", ":0") + if err != nil { + t.Fatalf("Failed to listen: %v", err) + } + defer lis.Close() + + s := grpc.NewServer() + testpb.RegisterTestServiceServer(s, &flowControlLogicalRaceServer{ + itemCount: itemCount, + itemSize: itemSize, + }) + defer s.Stop() + + go s.Serve(lis) + + ctx := context.Background() + + cc, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure(), grpc.WithBlock()) + if err != nil { + t.Fatalf("grpc.Dial(%q) = %v", lis.Addr().String(), err) + } + defer cc.Close() + cl := testpb.NewTestServiceClient(cc) + + failures := 0 + for i := 0; i < requestCount; i++ { + ctx, cancel := context.WithTimeout(ctx, requestTimeout) + output, err := cl.StreamingOutputCall(ctx, &testpb.StreamingOutputCallRequest{}) + if err != nil { + t.Fatalf("StreamingOutputCall; err = %q", err) + } + + j := 0 + loop: + for ; j < recvCount; j++ { + _, err := output.Recv() + if err != nil { + if err == io.EOF { + break loop + } + switch grpc.Code(err) { + case codes.DeadlineExceeded: + break loop + default: + t.Fatalf("Recv; err = %q", err) + } + } + } + cancel() + <-ctx.Done() + + if j < recvCount { + t.Errorf("got %d responses to request %d", j, i) + failures++ + if failures >= maxFailures { + // Continue past the first failure to see if the connection is + // entirely broken, or if only a single RPC was affected + break + } + } + } +} + +type flowControlLogicalRaceServer struct { + testpb.TestServiceServer + + itemSize int + itemCount int +} + +func (s *flowControlLogicalRaceServer) StreamingOutputCall(req *testpb.StreamingOutputCallRequest, srv testpb.TestService_StreamingOutputCallServer) error { + for i := 0; i < s.itemCount; i++ { + err := srv.Send(&testpb.StreamingOutputCallResponse{ + Payload: &testpb.Payload{ + // Sending a large stream of data which the client reject + // helps to trigger some types of flow control bugs. + // + // Reallocating memory here is inefficient, but the stress it + // puts on the GC leads to more frequent flow control + // failures. The GC likely causes more variety in the + // goroutine scheduling orders. + Body: bytes.Repeat([]byte("a"), s.itemSize), + }, + }) + if err != nil { + return err + } + } + return nil +} + +// interestingGoroutines returns all goroutines we care about for the purpose +// of leak checking. It excludes testing or runtime ones. +func interestingGoroutines() (gs []string) { + buf := make([]byte, 2<<20) + buf = buf[:runtime.Stack(buf, true)] + for _, g := range strings.Split(string(buf), "\n\n") { + sl := strings.SplitN(g, "\n", 2) + if len(sl) != 2 { + continue + } + stack := strings.TrimSpace(sl[1]) + if strings.HasPrefix(stack, "testing.RunTests") { + continue + } + + if stack == "" || + strings.Contains(stack, "testing.Main(") || + strings.Contains(stack, "testing.tRunner(") || + strings.Contains(stack, "runtime.goexit") || + strings.Contains(stack, "created by runtime.gc") || + strings.Contains(stack, "created by runtime/trace.Start") || + strings.Contains(stack, "created by google3/base/go/log.init") || + strings.Contains(stack, "interestingGoroutines") || + strings.Contains(stack, "runtime.MHeap_Scavenger") || + strings.Contains(stack, "signal.signal_recv") || + strings.Contains(stack, "sigterm.handler") || + strings.Contains(stack, "runtime_mcall") || + strings.Contains(stack, "goroutine in C code") { + continue + } + gs = append(gs, g) + } + sort.Strings(gs) + return +} + +// leakCheck snapshots the currently-running goroutines and returns a +// function to be run at the end of tests to see whether any +// goroutines leaked. +func leakCheck(t testing.TB) func() { + orig := map[string]bool{} + for _, g := range interestingGoroutines() { + orig[g] = true + } + return func() { + // Loop, waiting for goroutines to shut down. + // Wait up to 10 seconds, but finish as quickly as possible. + deadline := time.Now().Add(10 * time.Second) + for { + var leaked []string + for _, g := range interestingGoroutines() { + if !orig[g] { + leaked = append(leaked, g) + } + } + if len(leaked) == 0 { + return + } + if time.Now().Before(deadline) { + time.Sleep(50 * time.Millisecond) + continue + } + for _, g := range leaked { + t.Errorf("Leaked goroutine: %v", g) + } + return + } + } +} + +type lockingWriter struct { + mu sync.Mutex + w io.Writer +} + +func (lw *lockingWriter) Write(p []byte) (n int, err error) { + lw.mu.Lock() + defer lw.mu.Unlock() + return lw.w.Write(p) +} + +func (lw *lockingWriter) setWriter(w io.Writer) { + lw.mu.Lock() + defer lw.mu.Unlock() + lw.w = w +} + +var testLogOutput = &lockingWriter{w: os.Stderr} + +// awaitNewConnLogOutput waits for any of grpc.NewConn's goroutines to +// terminate, if they're still running. It spams logs with this +// message. We wait for it so our log filter is still +// active. Otherwise the "defer restore()" at the top of various test +// functions restores our log filter and then the goroutine spams. +func awaitNewConnLogOutput() { + awaitLogOutput(50*time.Millisecond, "grpc: the client connection is closing; please retry") +} + +func awaitLogOutput(maxWait time.Duration, phrase string) { + pb := []byte(phrase) + + timer := time.NewTimer(maxWait) + defer timer.Stop() + wakeup := make(chan bool, 1) + for { + if logOutputHasContents(pb, wakeup) { + return + } + select { + case <-timer.C: + // Too slow. Oh well. + return + case <-wakeup: + } + } +} + +func logOutputHasContents(v []byte, wakeup chan<- bool) bool { + testLogOutput.mu.Lock() + defer testLogOutput.mu.Unlock() + fw, ok := testLogOutput.w.(*filterWriter) + if !ok { + return false + } + fw.mu.Lock() + defer fw.mu.Unlock() + if bytes.Contains(fw.buf.Bytes(), v) { + return true + } + fw.wakeup = wakeup + return false +} + +func init() { + grpclog.SetLogger(log.New(testLogOutput, "", log.LstdFlags)) +} + +var verboseLogs = flag.Bool("verbose_logs", false, "show all grpclog output, without filtering") + +func noop() {} + +// declareLogNoise declares that t is expected to emit the following noisy phrases, +// even on success. Those phrases will be filtered from grpclog output +// and only be shown if *verbose_logs or t ends up failing. +// The returned restore function should be called with defer to be run +// before the test ends. +func declareLogNoise(t *testing.T, phrases ...string) (restore func()) { + if *verboseLogs { + return noop + } + fw := &filterWriter{dst: os.Stderr, filter: phrases} + testLogOutput.setWriter(fw) + return func() { + if t.Failed() { + fw.mu.Lock() + defer fw.mu.Unlock() + if fw.buf.Len() > 0 { + t.Logf("Complete log output:\n%s", fw.buf.Bytes()) + } + } + testLogOutput.setWriter(os.Stderr) + } +} + +type filterWriter struct { + dst io.Writer + filter []string + + mu sync.Mutex + buf bytes.Buffer + wakeup chan<- bool // if non-nil, gets true on write +} + +func (fw *filterWriter) Write(p []byte) (n int, err error) { + fw.mu.Lock() + fw.buf.Write(p) + if fw.wakeup != nil { + select { + case fw.wakeup <- true: + default: + } + } + fw.mu.Unlock() + + ps := string(p) + for _, f := range fw.filter { + if strings.Contains(ps, f) { + return len(p), nil + } + } + return fw.dst.Write(p) +} + +func equalErrors(l, r error) bool { + return grpc.Code(l) == grpc.Code(r) && grpc.ErrorDesc(l) == grpc.ErrorDesc(r) +} diff --git a/vendor/google.golang.org/grpc/test/grpc_testing/test.pb.go b/vendor/google.golang.org/grpc/test/grpc_testing/test.pb.go new file mode 100644 index 0000000..e584c4d --- /dev/null +++ b/vendor/google.golang.org/grpc/test/grpc_testing/test.pb.go @@ -0,0 +1,788 @@ +// Code generated by protoc-gen-go. +// source: test.proto +// DO NOT EDIT! + +/* +Package grpc_testing is a generated protocol buffer package. + +It is generated from these files: + test.proto + +It has these top-level messages: + Empty + Payload + SimpleRequest + SimpleResponse + StreamingInputCallRequest + StreamingInputCallResponse + ResponseParameters + StreamingOutputCallRequest + StreamingOutputCallResponse +*/ +package grpc_testing + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The type of payload that should be returned. +type PayloadType int32 + +const ( + // Compressable text format. + PayloadType_COMPRESSABLE PayloadType = 0 + // Uncompressable binary format. + PayloadType_UNCOMPRESSABLE PayloadType = 1 + // Randomly chosen from all other formats defined in this enum. + PayloadType_RANDOM PayloadType = 2 +) + +var PayloadType_name = map[int32]string{ + 0: "COMPRESSABLE", + 1: "UNCOMPRESSABLE", + 2: "RANDOM", +} +var PayloadType_value = map[string]int32{ + "COMPRESSABLE": 0, + "UNCOMPRESSABLE": 1, + "RANDOM": 2, +} + +func (x PayloadType) Enum() *PayloadType { + p := new(PayloadType) + *p = x + return p +} +func (x PayloadType) String() string { + return proto.EnumName(PayloadType_name, int32(x)) +} +func (x *PayloadType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(PayloadType_value, data, "PayloadType") + if err != nil { + return err + } + *x = PayloadType(value) + return nil +} +func (PayloadType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type Empty struct { + XXX_unrecognized []byte `json:"-"` +} + +func (m *Empty) Reset() { *m = Empty{} } +func (m *Empty) String() string { return proto.CompactTextString(m) } +func (*Empty) ProtoMessage() {} +func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// A block of data, to simply increase gRPC message size. +type Payload struct { + // The type of data in body. + Type *PayloadType `protobuf:"varint,1,opt,name=type,enum=grpc.testing.PayloadType" json:"type,omitempty"` + // Primary contents of payload. + Body []byte `protobuf:"bytes,2,opt,name=body" json:"body,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Payload) Reset() { *m = Payload{} } +func (m *Payload) String() string { return proto.CompactTextString(m) } +func (*Payload) ProtoMessage() {} +func (*Payload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Payload) GetType() PayloadType { + if m != nil && m.Type != nil { + return *m.Type + } + return PayloadType_COMPRESSABLE +} + +func (m *Payload) GetBody() []byte { + if m != nil { + return m.Body + } + return nil +} + +// Unary request. +type SimpleRequest struct { + // Desired payload type in the response from the server. + // If response_type is RANDOM, server randomly chooses one from other formats. + ResponseType *PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + // Desired payload size in the response from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + ResponseSize *int32 `protobuf:"varint,2,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` + // Whether SimpleResponse should include username. + FillUsername *bool `protobuf:"varint,4,opt,name=fill_username,json=fillUsername" json:"fill_username,omitempty"` + // Whether SimpleResponse should include OAuth scope. + FillOauthScope *bool `protobuf:"varint,5,opt,name=fill_oauth_scope,json=fillOauthScope" json:"fill_oauth_scope,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SimpleRequest) Reset() { *m = SimpleRequest{} } +func (m *SimpleRequest) String() string { return proto.CompactTextString(m) } +func (*SimpleRequest) ProtoMessage() {} +func (*SimpleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *SimpleRequest) GetResponseType() PayloadType { + if m != nil && m.ResponseType != nil { + return *m.ResponseType + } + return PayloadType_COMPRESSABLE +} + +func (m *SimpleRequest) GetResponseSize() int32 { + if m != nil && m.ResponseSize != nil { + return *m.ResponseSize + } + return 0 +} + +func (m *SimpleRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *SimpleRequest) GetFillUsername() bool { + if m != nil && m.FillUsername != nil { + return *m.FillUsername + } + return false +} + +func (m *SimpleRequest) GetFillOauthScope() bool { + if m != nil && m.FillOauthScope != nil { + return *m.FillOauthScope + } + return false +} + +// Unary response, as configured by the request. +type SimpleResponse struct { + // Payload to increase message size. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + // The user the request came from, for verifying authentication was + // successful when the client expected it. + Username *string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` + // OAuth scope. + OauthScope *string `protobuf:"bytes,3,opt,name=oauth_scope,json=oauthScope" json:"oauth_scope,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SimpleResponse) Reset() { *m = SimpleResponse{} } +func (m *SimpleResponse) String() string { return proto.CompactTextString(m) } +func (*SimpleResponse) ProtoMessage() {} +func (*SimpleResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *SimpleResponse) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *SimpleResponse) GetUsername() string { + if m != nil && m.Username != nil { + return *m.Username + } + return "" +} + +func (m *SimpleResponse) GetOauthScope() string { + if m != nil && m.OauthScope != nil { + return *m.OauthScope + } + return "" +} + +// Client-streaming request. +type StreamingInputCallRequest struct { + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *StreamingInputCallRequest) Reset() { *m = StreamingInputCallRequest{} } +func (m *StreamingInputCallRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingInputCallRequest) ProtoMessage() {} +func (*StreamingInputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *StreamingInputCallRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +// Client-streaming response. +type StreamingInputCallResponse struct { + // Aggregated size of payloads received from the client. + AggregatedPayloadSize *int32 `protobuf:"varint,1,opt,name=aggregated_payload_size,json=aggregatedPayloadSize" json:"aggregated_payload_size,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *StreamingInputCallResponse) Reset() { *m = StreamingInputCallResponse{} } +func (m *StreamingInputCallResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingInputCallResponse) ProtoMessage() {} +func (*StreamingInputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *StreamingInputCallResponse) GetAggregatedPayloadSize() int32 { + if m != nil && m.AggregatedPayloadSize != nil { + return *m.AggregatedPayloadSize + } + return 0 +} + +// Configuration for a particular response. +type ResponseParameters struct { + // Desired payload sizes in responses from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + Size *int32 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"` + // Desired interval between consecutive responses in the response stream in + // microseconds. + IntervalUs *int32 `protobuf:"varint,2,opt,name=interval_us,json=intervalUs" json:"interval_us,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ResponseParameters) Reset() { *m = ResponseParameters{} } +func (m *ResponseParameters) String() string { return proto.CompactTextString(m) } +func (*ResponseParameters) ProtoMessage() {} +func (*ResponseParameters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ResponseParameters) GetSize() int32 { + if m != nil && m.Size != nil { + return *m.Size + } + return 0 +} + +func (m *ResponseParameters) GetIntervalUs() int32 { + if m != nil && m.IntervalUs != nil { + return *m.IntervalUs + } + return 0 +} + +// Server-streaming request. +type StreamingOutputCallRequest struct { + // Desired payload type in the response from the server. + // If response_type is RANDOM, the payload from each response in the stream + // might be of different types. This is to simulate a mixed type of payload + // stream. + ResponseType *PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + // Configuration for each expected response message. + ResponseParameters []*ResponseParameters `protobuf:"bytes,2,rep,name=response_parameters,json=responseParameters" json:"response_parameters,omitempty"` + // Optional input payload sent along with the request. + Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *StreamingOutputCallRequest) Reset() { *m = StreamingOutputCallRequest{} } +func (m *StreamingOutputCallRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingOutputCallRequest) ProtoMessage() {} +func (*StreamingOutputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *StreamingOutputCallRequest) GetResponseType() PayloadType { + if m != nil && m.ResponseType != nil { + return *m.ResponseType + } + return PayloadType_COMPRESSABLE +} + +func (m *StreamingOutputCallRequest) GetResponseParameters() []*ResponseParameters { + if m != nil { + return m.ResponseParameters + } + return nil +} + +func (m *StreamingOutputCallRequest) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +// Server-streaming response, as configured by the request and parameters. +type StreamingOutputCallResponse struct { + // Payload to increase response size. + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *StreamingOutputCallResponse) Reset() { *m = StreamingOutputCallResponse{} } +func (m *StreamingOutputCallResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingOutputCallResponse) ProtoMessage() {} +func (*StreamingOutputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *StreamingOutputCallResponse) GetPayload() *Payload { + if m != nil { + return m.Payload + } + return nil +} + +func init() { + proto.RegisterType((*Empty)(nil), "grpc.testing.Empty") + proto.RegisterType((*Payload)(nil), "grpc.testing.Payload") + proto.RegisterType((*SimpleRequest)(nil), "grpc.testing.SimpleRequest") + proto.RegisterType((*SimpleResponse)(nil), "grpc.testing.SimpleResponse") + proto.RegisterType((*StreamingInputCallRequest)(nil), "grpc.testing.StreamingInputCallRequest") + proto.RegisterType((*StreamingInputCallResponse)(nil), "grpc.testing.StreamingInputCallResponse") + proto.RegisterType((*ResponseParameters)(nil), "grpc.testing.ResponseParameters") + proto.RegisterType((*StreamingOutputCallRequest)(nil), "grpc.testing.StreamingOutputCallRequest") + proto.RegisterType((*StreamingOutputCallResponse)(nil), "grpc.testing.StreamingOutputCallResponse") + proto.RegisterEnum("grpc.testing.PayloadType", PayloadType_name, PayloadType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for TestService service + +type TestServiceClient interface { + // One empty request followed by one empty response. + EmptyCall(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) + // One request followed by one response. + // The server returns the client payload as-is. + UnaryCall(ctx context.Context, in *SimpleRequest, opts ...grpc.CallOption) (*SimpleResponse, error) + // One request followed by a sequence of responses (streamed download). + // The server returns the payload with client desired type and sizes. + StreamingOutputCall(ctx context.Context, in *StreamingOutputCallRequest, opts ...grpc.CallOption) (TestService_StreamingOutputCallClient, error) + // A sequence of requests followed by one response (streamed upload). + // The server returns the aggregated size of client payload as the result. + StreamingInputCall(ctx context.Context, opts ...grpc.CallOption) (TestService_StreamingInputCallClient, error) + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + FullDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_FullDuplexCallClient, error) + // A sequence of requests followed by a sequence of responses. + // The server buffers all the client requests and then serves them in order. A + // stream of responses are returned to the client when the server starts with + // first request. + HalfDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_HalfDuplexCallClient, error) +} + +type testServiceClient struct { + cc *grpc.ClientConn +} + +func NewTestServiceClient(cc *grpc.ClientConn) TestServiceClient { + return &testServiceClient{cc} +} + +func (c *testServiceClient) EmptyCall(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := grpc.Invoke(ctx, "/grpc.testing.TestService/EmptyCall", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testServiceClient) UnaryCall(ctx context.Context, in *SimpleRequest, opts ...grpc.CallOption) (*SimpleResponse, error) { + out := new(SimpleResponse) + err := grpc.Invoke(ctx, "/grpc.testing.TestService/UnaryCall", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *testServiceClient) StreamingOutputCall(ctx context.Context, in *StreamingOutputCallRequest, opts ...grpc.CallOption) (TestService_StreamingOutputCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[0], c.cc, "/grpc.testing.TestService/StreamingOutputCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceStreamingOutputCallClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type TestService_StreamingOutputCallClient interface { + Recv() (*StreamingOutputCallResponse, error) + grpc.ClientStream +} + +type testServiceStreamingOutputCallClient struct { + grpc.ClientStream +} + +func (x *testServiceStreamingOutputCallClient) Recv() (*StreamingOutputCallResponse, error) { + m := new(StreamingOutputCallResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *testServiceClient) StreamingInputCall(ctx context.Context, opts ...grpc.CallOption) (TestService_StreamingInputCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[1], c.cc, "/grpc.testing.TestService/StreamingInputCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceStreamingInputCallClient{stream} + return x, nil +} + +type TestService_StreamingInputCallClient interface { + Send(*StreamingInputCallRequest) error + CloseAndRecv() (*StreamingInputCallResponse, error) + grpc.ClientStream +} + +type testServiceStreamingInputCallClient struct { + grpc.ClientStream +} + +func (x *testServiceStreamingInputCallClient) Send(m *StreamingInputCallRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *testServiceStreamingInputCallClient) CloseAndRecv() (*StreamingInputCallResponse, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(StreamingInputCallResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *testServiceClient) FullDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_FullDuplexCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[2], c.cc, "/grpc.testing.TestService/FullDuplexCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceFullDuplexCallClient{stream} + return x, nil +} + +type TestService_FullDuplexCallClient interface { + Send(*StreamingOutputCallRequest) error + Recv() (*StreamingOutputCallResponse, error) + grpc.ClientStream +} + +type testServiceFullDuplexCallClient struct { + grpc.ClientStream +} + +func (x *testServiceFullDuplexCallClient) Send(m *StreamingOutputCallRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *testServiceFullDuplexCallClient) Recv() (*StreamingOutputCallResponse, error) { + m := new(StreamingOutputCallResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *testServiceClient) HalfDuplexCall(ctx context.Context, opts ...grpc.CallOption) (TestService_HalfDuplexCallClient, error) { + stream, err := grpc.NewClientStream(ctx, &_TestService_serviceDesc.Streams[3], c.cc, "/grpc.testing.TestService/HalfDuplexCall", opts...) + if err != nil { + return nil, err + } + x := &testServiceHalfDuplexCallClient{stream} + return x, nil +} + +type TestService_HalfDuplexCallClient interface { + Send(*StreamingOutputCallRequest) error + Recv() (*StreamingOutputCallResponse, error) + grpc.ClientStream +} + +type testServiceHalfDuplexCallClient struct { + grpc.ClientStream +} + +func (x *testServiceHalfDuplexCallClient) Send(m *StreamingOutputCallRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *testServiceHalfDuplexCallClient) Recv() (*StreamingOutputCallResponse, error) { + m := new(StreamingOutputCallResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for TestService service + +type TestServiceServer interface { + // One empty request followed by one empty response. + EmptyCall(context.Context, *Empty) (*Empty, error) + // One request followed by one response. + // The server returns the client payload as-is. + UnaryCall(context.Context, *SimpleRequest) (*SimpleResponse, error) + // One request followed by a sequence of responses (streamed download). + // The server returns the payload with client desired type and sizes. + StreamingOutputCall(*StreamingOutputCallRequest, TestService_StreamingOutputCallServer) error + // A sequence of requests followed by one response (streamed upload). + // The server returns the aggregated size of client payload as the result. + StreamingInputCall(TestService_StreamingInputCallServer) error + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + FullDuplexCall(TestService_FullDuplexCallServer) error + // A sequence of requests followed by a sequence of responses. + // The server buffers all the client requests and then serves them in order. A + // stream of responses are returned to the client when the server starts with + // first request. + HalfDuplexCall(TestService_HalfDuplexCallServer) error +} + +func RegisterTestServiceServer(s *grpc.Server, srv TestServiceServer) { + s.RegisterService(&_TestService_serviceDesc, srv) +} + +func _TestService_EmptyCall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestServiceServer).EmptyCall(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.TestService/EmptyCall", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestServiceServer).EmptyCall(ctx, req.(*Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestService_UnaryCall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SimpleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TestServiceServer).UnaryCall(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testing.TestService/UnaryCall", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TestServiceServer).UnaryCall(ctx, req.(*SimpleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TestService_StreamingOutputCall_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(StreamingOutputCallRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(TestServiceServer).StreamingOutputCall(m, &testServiceStreamingOutputCallServer{stream}) +} + +type TestService_StreamingOutputCallServer interface { + Send(*StreamingOutputCallResponse) error + grpc.ServerStream +} + +type testServiceStreamingOutputCallServer struct { + grpc.ServerStream +} + +func (x *testServiceStreamingOutputCallServer) Send(m *StreamingOutputCallResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _TestService_StreamingInputCall_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(TestServiceServer).StreamingInputCall(&testServiceStreamingInputCallServer{stream}) +} + +type TestService_StreamingInputCallServer interface { + SendAndClose(*StreamingInputCallResponse) error + Recv() (*StreamingInputCallRequest, error) + grpc.ServerStream +} + +type testServiceStreamingInputCallServer struct { + grpc.ServerStream +} + +func (x *testServiceStreamingInputCallServer) SendAndClose(m *StreamingInputCallResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *testServiceStreamingInputCallServer) Recv() (*StreamingInputCallRequest, error) { + m := new(StreamingInputCallRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _TestService_FullDuplexCall_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(TestServiceServer).FullDuplexCall(&testServiceFullDuplexCallServer{stream}) +} + +type TestService_FullDuplexCallServer interface { + Send(*StreamingOutputCallResponse) error + Recv() (*StreamingOutputCallRequest, error) + grpc.ServerStream +} + +type testServiceFullDuplexCallServer struct { + grpc.ServerStream +} + +func (x *testServiceFullDuplexCallServer) Send(m *StreamingOutputCallResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *testServiceFullDuplexCallServer) Recv() (*StreamingOutputCallRequest, error) { + m := new(StreamingOutputCallRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _TestService_HalfDuplexCall_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(TestServiceServer).HalfDuplexCall(&testServiceHalfDuplexCallServer{stream}) +} + +type TestService_HalfDuplexCallServer interface { + Send(*StreamingOutputCallResponse) error + Recv() (*StreamingOutputCallRequest, error) + grpc.ServerStream +} + +type testServiceHalfDuplexCallServer struct { + grpc.ServerStream +} + +func (x *testServiceHalfDuplexCallServer) Send(m *StreamingOutputCallResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *testServiceHalfDuplexCallServer) Recv() (*StreamingOutputCallRequest, error) { + m := new(StreamingOutputCallRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _TestService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testing.TestService", + HandlerType: (*TestServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "EmptyCall", + Handler: _TestService_EmptyCall_Handler, + }, + { + MethodName: "UnaryCall", + Handler: _TestService_UnaryCall_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingOutputCall", + Handler: _TestService_StreamingOutputCall_Handler, + ServerStreams: true, + }, + { + StreamName: "StreamingInputCall", + Handler: _TestService_StreamingInputCall_Handler, + ClientStreams: true, + }, + { + StreamName: "FullDuplexCall", + Handler: _TestService_FullDuplexCall_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { + StreamName: "HalfDuplexCall", + Handler: _TestService_HalfDuplexCall_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "test.proto", +} + +func init() { proto.RegisterFile("test.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 567 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xbc, 0x54, 0x51, 0x6f, 0xd2, 0x50, + 0x14, 0xb6, 0x03, 0x64, 0x1c, 0x58, 0x43, 0x0e, 0x59, 0x64, 0x9d, 0x89, 0x4b, 0x7d, 0xb0, 0x9a, + 0x88, 0x86, 0x44, 0x1f, 0x35, 0x73, 0x63, 0x71, 0x09, 0x03, 0x6c, 0xe1, 0x99, 0x5c, 0xe1, 0x0e, + 0x9b, 0x94, 0xb6, 0xb6, 0xb7, 0x46, 0x7c, 0xf0, 0x8f, 0xf9, 0x67, 0xfc, 0x11, 0xfe, 0x00, 0xef, + 0xbd, 0x6d, 0xa1, 0x40, 0x17, 0x99, 0xc6, 0xbd, 0xb5, 0xdf, 0xf9, 0xce, 0x77, 0xbe, 0xef, 0x9e, + 0xdb, 0x02, 0x30, 0x1a, 0xb2, 0x96, 0x1f, 0x78, 0xcc, 0xc3, 0xda, 0x2c, 0xf0, 0x27, 0x2d, 0x01, + 0xd8, 0xee, 0x4c, 0x2f, 0x43, 0xa9, 0x33, 0xf7, 0xd9, 0x42, 0xef, 0x42, 0x79, 0x40, 0x16, 0x8e, + 0x47, 0xa6, 0xf8, 0x1c, 0x8a, 0x6c, 0xe1, 0xd3, 0xa6, 0x72, 0xa2, 0x18, 0x6a, 0xfb, 0xa8, 0x95, + 0x6d, 0x68, 0x25, 0xa4, 0x21, 0x27, 0x98, 0x92, 0x86, 0x08, 0xc5, 0x8f, 0xde, 0x74, 0xd1, 0xdc, + 0xe3, 0xf4, 0x9a, 0x29, 0x9f, 0xf5, 0x5f, 0x0a, 0x1c, 0x58, 0xf6, 0xdc, 0x77, 0xa8, 0x49, 0x3f, + 0x47, 0xbc, 0x15, 0xdf, 0xc0, 0x41, 0x40, 0x43, 0xdf, 0x73, 0x43, 0x3a, 0xde, 0x4d, 0xbd, 0x96, + 0xf2, 0xc5, 0x1b, 0x3e, 0xce, 0xf4, 0x87, 0xf6, 0x37, 0x2a, 0xc7, 0x95, 0x56, 0x24, 0x8b, 0x63, + 0xf8, 0x02, 0xca, 0x7e, 0xac, 0xd0, 0x2c, 0xf0, 0x72, 0xb5, 0x7d, 0x98, 0x2b, 0x6f, 0xa6, 0x2c, + 0xa1, 0x7a, 0x6d, 0x3b, 0xce, 0x38, 0x0a, 0x69, 0xe0, 0x92, 0x39, 0x6d, 0x16, 0x79, 0xdb, 0xbe, + 0x59, 0x13, 0xe0, 0x28, 0xc1, 0xd0, 0x80, 0xba, 0x24, 0x79, 0x24, 0x62, 0x9f, 0xc6, 0xe1, 0xc4, + 0xe3, 0xee, 0x4b, 0x92, 0xa7, 0x0a, 0xbc, 0x2f, 0x60, 0x4b, 0xa0, 0xfa, 0x77, 0x50, 0xd3, 0xd4, + 0xb1, 0xab, 0xac, 0x23, 0x65, 0x27, 0x47, 0x1a, 0xec, 0x2f, 0xcd, 0x88, 0x88, 0x15, 0x73, 0xf9, + 0x8e, 0x8f, 0xa0, 0x9a, 0xf5, 0x50, 0x90, 0x65, 0xf0, 0x56, 0xf3, 0xbb, 0x70, 0x64, 0xb1, 0x80, + 0x92, 0x39, 0x97, 0xbe, 0x74, 0xfd, 0x88, 0x9d, 0x11, 0xc7, 0x49, 0x37, 0x70, 0x5b, 0x2b, 0xfa, + 0x10, 0xb4, 0x3c, 0xb5, 0x24, 0xd9, 0x6b, 0x78, 0x40, 0x66, 0xb3, 0x80, 0xce, 0x08, 0xa3, 0xd3, + 0x71, 0xd2, 0x13, 0xaf, 0x46, 0x91, 0xab, 0x39, 0x5c, 0x95, 0x13, 0x69, 0xb1, 0x23, 0xfd, 0x12, + 0x30, 0xd5, 0x18, 0x90, 0x80, 0xc7, 0x62, 0x34, 0x08, 0xc5, 0x25, 0xca, 0xb4, 0xca, 0x67, 0x11, + 0xd7, 0x76, 0x79, 0xf5, 0x0b, 0x11, 0x0b, 0x4a, 0x16, 0x0e, 0x29, 0x34, 0x0a, 0xf5, 0x9f, 0x4a, + 0xc6, 0x61, 0x3f, 0x62, 0x1b, 0x81, 0xff, 0xf5, 0xca, 0x7d, 0x80, 0xc6, 0xb2, 0xdf, 0x5f, 0x5a, + 0xe5, 0x3e, 0x0a, 0xfc, 0xf0, 0x4e, 0xd6, 0x55, 0xb6, 0x23, 0x99, 0x18, 0x6c, 0xc7, 0xbc, 0xed, + 0x05, 0xd5, 0x7b, 0x70, 0x9c, 0x9b, 0xf0, 0x2f, 0xaf, 0xd7, 0xb3, 0xb7, 0x50, 0xcd, 0x04, 0xc6, + 0x3a, 0xd4, 0xce, 0xfa, 0x57, 0x03, 0xb3, 0x63, 0x59, 0xa7, 0xef, 0xba, 0x9d, 0xfa, 0x3d, 0xbe, + 0x08, 0x75, 0xd4, 0x5b, 0xc3, 0x14, 0x04, 0xb8, 0x6f, 0x9e, 0xf6, 0xce, 0xfb, 0x57, 0xf5, 0xbd, + 0xf6, 0x8f, 0x22, 0x54, 0x87, 0x5c, 0xdd, 0xe2, 0x4b, 0xb0, 0x27, 0x14, 0x5f, 0x41, 0x45, 0xfe, + 0x40, 0x84, 0x2d, 0x6c, 0xac, 0x4f, 0x97, 0x05, 0x2d, 0x0f, 0xc4, 0x0b, 0xa8, 0x8c, 0x5c, 0x12, + 0xc4, 0x6d, 0xc7, 0xeb, 0x8c, 0xb5, 0x1f, 0x87, 0xf6, 0x30, 0xbf, 0x98, 0x1c, 0x80, 0x03, 0x8d, + 0x9c, 0xf3, 0x41, 0x63, 0xa3, 0xe9, 0xc6, 0x4b, 0xa2, 0x3d, 0xdd, 0x81, 0x19, 0xcf, 0x7a, 0xa9, + 0xa0, 0x0d, 0xb8, 0xfd, 0x45, 0xe0, 0x93, 0x1b, 0x24, 0x36, 0xbf, 0x40, 0xcd, 0xf8, 0x33, 0x31, + 0x1e, 0x65, 0x88, 0x51, 0xea, 0x45, 0xe4, 0x38, 0xe7, 0x11, 0x4f, 0xfb, 0xf5, 0xbf, 0x65, 0x32, + 0x14, 0x99, 0x4a, 0x7d, 0x4f, 0x9c, 0xeb, 0x3b, 0x18, 0xf5, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x4c, + 0x41, 0xfe, 0xb6, 0x89, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/test/grpc_testing/test.proto b/vendor/google.golang.org/grpc/test/grpc_testing/test.proto new file mode 100644 index 0000000..b5bfe05 --- /dev/null +++ b/vendor/google.golang.org/grpc/test/grpc_testing/test.proto @@ -0,0 +1,140 @@ +// An integration test service that covers all the method signature permutations +// of unary/streaming requests/responses. +syntax = "proto2"; + +package grpc.testing; + +message Empty {} + +// The type of payload that should be returned. +enum PayloadType { + // Compressable text format. + COMPRESSABLE = 0; + + // Uncompressable binary format. + UNCOMPRESSABLE = 1; + + // Randomly chosen from all other formats defined in this enum. + RANDOM = 2; +} + +// A block of data, to simply increase gRPC message size. +message Payload { + // The type of data in body. + optional PayloadType type = 1; + // Primary contents of payload. + optional bytes body = 2; +} + +// Unary request. +message SimpleRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, server randomly chooses one from other formats. + optional PayloadType response_type = 1; + + // Desired payload size in the response from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + optional int32 response_size = 2; + + // Optional input payload sent along with the request. + optional Payload payload = 3; + + // Whether SimpleResponse should include username. + optional bool fill_username = 4; + + // Whether SimpleResponse should include OAuth scope. + optional bool fill_oauth_scope = 5; +} + +// Unary response, as configured by the request. +message SimpleResponse { + // Payload to increase message size. + optional Payload payload = 1; + + // The user the request came from, for verifying authentication was + // successful when the client expected it. + optional string username = 2; + + // OAuth scope. + optional string oauth_scope = 3; +} + +// Client-streaming request. +message StreamingInputCallRequest { + // Optional input payload sent along with the request. + optional Payload payload = 1; + + // Not expecting any payload from the response. +} + +// Client-streaming response. +message StreamingInputCallResponse { + // Aggregated size of payloads received from the client. + optional int32 aggregated_payload_size = 1; +} + +// Configuration for a particular response. +message ResponseParameters { + // Desired payload sizes in responses from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + optional int32 size = 1; + + // Desired interval between consecutive responses in the response stream in + // microseconds. + optional int32 interval_us = 2; +} + +// Server-streaming request. +message StreamingOutputCallRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, the payload from each response in the stream + // might be of different types. This is to simulate a mixed type of payload + // stream. + optional PayloadType response_type = 1; + + // Configuration for each expected response message. + repeated ResponseParameters response_parameters = 2; + + // Optional input payload sent along with the request. + optional Payload payload = 3; +} + +// Server-streaming response, as configured by the request and parameters. +message StreamingOutputCallResponse { + // Payload to increase response size. + optional Payload payload = 1; +} + +// A simple service to test the various types of RPCs and experiment with +// performance with various types of payload. +service TestService { + // One empty request followed by one empty response. + rpc EmptyCall(Empty) returns (Empty); + + // One request followed by one response. + // The server returns the client payload as-is. + rpc UnaryCall(SimpleRequest) returns (SimpleResponse); + + // One request followed by a sequence of responses (streamed download). + // The server returns the payload with client desired type and sizes. + rpc StreamingOutputCall(StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); + + // A sequence of requests followed by one response (streamed upload). + // The server returns the aggregated size of client payload as the result. + rpc StreamingInputCall(stream StreamingInputCallRequest) + returns (StreamingInputCallResponse); + + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + rpc FullDuplexCall(stream StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); + + // A sequence of requests followed by a sequence of responses. + // The server buffers all the client requests and then serves them in order. A + // stream of responses are returned to the client when the server starts with + // first request. + rpc HalfDuplexCall(stream StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); +} diff --git a/vendor/google.golang.org/grpc/test/race_test.go b/vendor/google.golang.org/grpc/test/race_test.go new file mode 100644 index 0000000..b3a7056 --- /dev/null +++ b/vendor/google.golang.org/grpc/test/race_test.go @@ -0,0 +1,39 @@ +// +build race + +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc_test + +func init() { + raceMode = true +} diff --git a/vendor/google.golang.org/grpc/test/servertester_test.go b/vendor/google.golang.org/grpc/test/servertester_test.go new file mode 100644 index 0000000..0225a85 --- /dev/null +++ b/vendor/google.golang.org/grpc/test/servertester_test.go @@ -0,0 +1,289 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package grpc_test + +import ( + "bytes" + "errors" + "io" + "strings" + "testing" + "time" + + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" +) + +// This is a subset of http2's serverTester type. +// +// serverTester wraps a io.ReadWriter (acting like the underlying +// network connection) and provides utility methods to read and write +// http2 frames. +// +// NOTE(bradfitz): this could eventually be exported somewhere. Others +// have asked for it too. For now I'm still experimenting with the +// API and don't feel like maintaining a stable testing API. + +type serverTester struct { + cc io.ReadWriteCloser // client conn + t testing.TB + fr *http2.Framer + + // writing headers: + headerBuf bytes.Buffer + hpackEnc *hpack.Encoder + + // reading frames: + frc chan http2.Frame + frErrc chan error + readTimer *time.Timer +} + +func newServerTesterFromConn(t testing.TB, cc io.ReadWriteCloser) *serverTester { + st := &serverTester{ + t: t, + cc: cc, + frc: make(chan http2.Frame, 1), + frErrc: make(chan error, 1), + } + st.hpackEnc = hpack.NewEncoder(&st.headerBuf) + st.fr = http2.NewFramer(cc, cc) + st.fr.ReadMetaHeaders = hpack.NewDecoder(4096 /*initialHeaderTableSize*/, nil) + + return st +} + +func (st *serverTester) readFrame() (http2.Frame, error) { + go func() { + fr, err := st.fr.ReadFrame() + if err != nil { + st.frErrc <- err + } else { + st.frc <- fr + } + }() + t := time.NewTimer(2 * time.Second) + defer t.Stop() + select { + case f := <-st.frc: + return f, nil + case err := <-st.frErrc: + return nil, err + case <-t.C: + return nil, errors.New("timeout waiting for frame") + } +} + +// greet initiates the client's HTTP/2 connection into a state where +// frames may be sent. +func (st *serverTester) greet() { + st.writePreface() + st.writeInitialSettings() + st.wantSettings() + st.writeSettingsAck() + for { + f, err := st.readFrame() + if err != nil { + st.t.Fatal(err) + } + switch f := f.(type) { + case *http2.WindowUpdateFrame: + // grpc's transport/http2_server sends this + // before the settings ack. The Go http2 + // server uses a setting instead. + case *http2.SettingsFrame: + if f.IsAck() { + return + } + st.t.Fatalf("during greet, got non-ACK settings frame") + default: + st.t.Fatalf("during greet, unexpected frame type %T", f) + } + } +} + +func (st *serverTester) writePreface() { + n, err := st.cc.Write([]byte(http2.ClientPreface)) + if err != nil { + st.t.Fatalf("Error writing client preface: %v", err) + } + if n != len(http2.ClientPreface) { + st.t.Fatalf("Writing client preface, wrote %d bytes; want %d", n, len(http2.ClientPreface)) + } +} + +func (st *serverTester) writeInitialSettings() { + if err := st.fr.WriteSettings(); err != nil { + st.t.Fatalf("Error writing initial SETTINGS frame from client to server: %v", err) + } +} + +func (st *serverTester) writeSettingsAck() { + if err := st.fr.WriteSettingsAck(); err != nil { + st.t.Fatalf("Error writing ACK of server's SETTINGS: %v", err) + } +} + +func (st *serverTester) wantSettings() *http2.SettingsFrame { + f, err := st.readFrame() + if err != nil { + st.t.Fatalf("Error while expecting a SETTINGS frame: %v", err) + } + sf, ok := f.(*http2.SettingsFrame) + if !ok { + st.t.Fatalf("got a %T; want *SettingsFrame", f) + } + return sf +} + +func (st *serverTester) wantSettingsAck() { + f, err := st.readFrame() + if err != nil { + st.t.Fatal(err) + } + sf, ok := f.(*http2.SettingsFrame) + if !ok { + st.t.Fatalf("Wanting a settings ACK, received a %T", f) + } + if !sf.IsAck() { + st.t.Fatal("Settings Frame didn't have ACK set") + } +} + +// wait for any activity from the server +func (st *serverTester) wantAnyFrame() http2.Frame { + f, err := st.fr.ReadFrame() + if err != nil { + st.t.Fatal(err) + } + return f +} + +func (st *serverTester) encodeHeaderField(k, v string) { + err := st.hpackEnc.WriteField(hpack.HeaderField{Name: k, Value: v}) + if err != nil { + st.t.Fatalf("HPACK encoding error for %q/%q: %v", k, v, err) + } +} + +// encodeHeader encodes headers and returns their HPACK bytes. headers +// must contain an even number of key/value pairs. There may be +// multiple pairs for keys (e.g. "cookie"). The :method, :path, and +// :scheme headers default to GET, / and https. +func (st *serverTester) encodeHeader(headers ...string) []byte { + if len(headers)%2 == 1 { + panic("odd number of kv args") + } + + st.headerBuf.Reset() + + if len(headers) == 0 { + // Fast path, mostly for benchmarks, so test code doesn't pollute + // profiles when we're looking to improve server allocations. + st.encodeHeaderField(":method", "GET") + st.encodeHeaderField(":path", "/") + st.encodeHeaderField(":scheme", "https") + return st.headerBuf.Bytes() + } + + if len(headers) == 2 && headers[0] == ":method" { + // Another fast path for benchmarks. + st.encodeHeaderField(":method", headers[1]) + st.encodeHeaderField(":path", "/") + st.encodeHeaderField(":scheme", "https") + return st.headerBuf.Bytes() + } + + pseudoCount := map[string]int{} + keys := []string{":method", ":path", ":scheme"} + vals := map[string][]string{ + ":method": {"GET"}, + ":path": {"/"}, + ":scheme": {"https"}, + } + for len(headers) > 0 { + k, v := headers[0], headers[1] + headers = headers[2:] + if _, ok := vals[k]; !ok { + keys = append(keys, k) + } + if strings.HasPrefix(k, ":") { + pseudoCount[k]++ + if pseudoCount[k] == 1 { + vals[k] = []string{v} + } else { + // Allows testing of invalid headers w/ dup pseudo fields. + vals[k] = append(vals[k], v) + } + } else { + vals[k] = append(vals[k], v) + } + } + for _, k := range keys { + for _, v := range vals[k] { + st.encodeHeaderField(k, v) + } + } + return st.headerBuf.Bytes() +} + +func (st *serverTester) writeHeadersGRPC(streamID uint32, path string) { + st.writeHeaders(http2.HeadersFrameParam{ + StreamID: streamID, + BlockFragment: st.encodeHeader( + ":method", "POST", + ":path", path, + "content-type", "application/grpc", + "te", "trailers", + ), + EndStream: false, + EndHeaders: true, + }) +} + +func (st *serverTester) writeHeaders(p http2.HeadersFrameParam) { + if err := st.fr.WriteHeaders(p); err != nil { + st.t.Fatalf("Error writing HEADERS: %v", err) + } +} + +func (st *serverTester) writeData(streamID uint32, endStream bool, data []byte) { + if err := st.fr.WriteData(streamID, endStream, data); err != nil { + st.t.Fatalf("Error writing DATA: %v", err) + } +} + +func (st *serverTester) writeRSTStream(streamID uint32, code http2.ErrCode) { + if err := st.fr.WriteRSTStream(streamID, code); err != nil { + st.t.Fatalf("Error writing RST_STREAM: %v", err) + } +} diff --git a/vendor/google.golang.org/grpc/test/testdata/ca.pem b/vendor/google.golang.org/grpc/test/testdata/ca.pem new file mode 100644 index 0000000..6c8511a --- /dev/null +++ b/vendor/google.golang.org/grpc/test/testdata/ca.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla +Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 +YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT +BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 ++L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu +g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd +Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau +sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m +oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG +Dfcog5wrJytaQ6UA0wE= +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/test/testdata/server1.key b/vendor/google.golang.org/grpc/test/testdata/server1.key new file mode 100644 index 0000000..143a5b8 --- /dev/null +++ b/vendor/google.golang.org/grpc/test/testdata/server1.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD +M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf +3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY +AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm +V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY +tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p +dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q +K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR +81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff +DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd +aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 +ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 +XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe +F98XJ7tIFfJq +-----END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/test/testdata/server1.pem b/vendor/google.golang.org/grpc/test/testdata/server1.pem new file mode 100644 index 0000000..f3d43fc --- /dev/null +++ b/vendor/google.golang.org/grpc/test/testdata/server1.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET +MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx +MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV +BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 +ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco +LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg +zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd +9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy +em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G +CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 +hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh +y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/testdata/ca.pem b/vendor/google.golang.org/grpc/testdata/ca.pem new file mode 100644 index 0000000..6c8511a --- /dev/null +++ b/vendor/google.golang.org/grpc/testdata/ca.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla +Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 +YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT +BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 ++L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu +g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd +Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau +sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m +oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG +Dfcog5wrJytaQ6UA0wE= +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/testdata/server1.key b/vendor/google.golang.org/grpc/testdata/server1.key new file mode 100644 index 0000000..143a5b8 --- /dev/null +++ b/vendor/google.golang.org/grpc/testdata/server1.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD +M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf +3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY +AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm +V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY +tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p +dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q +K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR +81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff +DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd +aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 +ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 +XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe +F98XJ7tIFfJq +-----END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/testdata/server1.pem b/vendor/google.golang.org/grpc/testdata/server1.pem new file mode 100644 index 0000000..f3d43fc --- /dev/null +++ b/vendor/google.golang.org/grpc/testdata/server1.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET +MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx +MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV +BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 +ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco +LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg +zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd +9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy +em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G +CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 +hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh +y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/trace.go b/vendor/google.golang.org/grpc/trace.go new file mode 100644 index 0000000..f6747e1 --- /dev/null +++ b/vendor/google.golang.org/grpc/trace.go @@ -0,0 +1,119 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "fmt" + "io" + "net" + "strings" + "time" + + "golang.org/x/net/trace" +) + +// EnableTracing controls whether to trace RPCs using the golang.org/x/net/trace package. +// This should only be set before any RPCs are sent or received by this program. +var EnableTracing = true + +// methodFamily returns the trace family for the given method. +// It turns "/pkg.Service/GetFoo" into "pkg.Service". +func methodFamily(m string) string { + m = strings.TrimPrefix(m, "/") // remove leading slash + if i := strings.Index(m, "/"); i >= 0 { + m = m[:i] // remove everything from second slash + } + if i := strings.LastIndex(m, "."); i >= 0 { + m = m[i+1:] // cut down to last dotted component + } + return m +} + +// traceInfo contains tracing information for an RPC. +type traceInfo struct { + tr trace.Trace + firstLine firstLine +} + +// firstLine is the first line of an RPC trace. +type firstLine struct { + client bool // whether this is a client (outgoing) RPC + remoteAddr net.Addr + deadline time.Duration // may be zero +} + +func (f *firstLine) String() string { + var line bytes.Buffer + io.WriteString(&line, "RPC: ") + if f.client { + io.WriteString(&line, "to") + } else { + io.WriteString(&line, "from") + } + fmt.Fprintf(&line, " %v deadline:", f.remoteAddr) + if f.deadline != 0 { + fmt.Fprint(&line, f.deadline) + } else { + io.WriteString(&line, "none") + } + return line.String() +} + +// payload represents an RPC request or response payload. +type payload struct { + sent bool // whether this is an outgoing payload + msg interface{} // e.g. a proto.Message + // TODO(dsymonds): add stringifying info to codec, and limit how much we hold here? +} + +func (p payload) String() string { + if p.sent { + return fmt.Sprintf("sent: %v", p.msg) + } + return fmt.Sprintf("recv: %v", p.msg) +} + +type fmtStringer struct { + format string + a []interface{} +} + +func (f *fmtStringer) String() string { + return fmt.Sprintf(f.format, f.a...) +} + +type stringer string + +func (s stringer) String() string { return string(s) } diff --git a/vendor/google.golang.org/grpc/transport/control.go b/vendor/google.golang.org/grpc/transport/control.go new file mode 100644 index 0000000..0edbe53 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/control.go @@ -0,0 +1,199 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "fmt" + "math" + "sync" + "time" + + "golang.org/x/net/http2" +) + +const ( + // The default value of flow control window size in HTTP2 spec. + defaultWindowSize = 65535 + // The initial window size for flow control. + initialWindowSize = defaultWindowSize // for an RPC + initialConnWindowSize = defaultWindowSize * 16 // for a connection + infinity = time.Duration(math.MaxInt64) + defaultKeepaliveTime = infinity + defaultKeepaliveTimeout = time.Duration(20 * time.Second) + defaultMaxStreamsClient = 100 +) + +// The following defines various control items which could flow through +// the control buffer of transport. They represent different aspects of +// control tasks, e.g., flow control, settings, streaming resetting, etc. +type windowUpdate struct { + streamID uint32 + increment uint32 +} + +func (*windowUpdate) item() {} + +type settings struct { + ack bool + ss []http2.Setting +} + +func (*settings) item() {} + +type resetStream struct { + streamID uint32 + code http2.ErrCode +} + +func (*resetStream) item() {} + +type goAway struct { +} + +func (*goAway) item() {} + +type flushIO struct { +} + +func (*flushIO) item() {} + +type ping struct { + ack bool + data [8]byte +} + +func (*ping) item() {} + +// quotaPool is a pool which accumulates the quota and sends it to acquire() +// when it is available. +type quotaPool struct { + c chan int + + mu sync.Mutex + quota int +} + +// newQuotaPool creates a quotaPool which has quota q available to consume. +func newQuotaPool(q int) *quotaPool { + qb := "aPool{ + c: make(chan int, 1), + } + if q > 0 { + qb.c <- q + } else { + qb.quota = q + } + return qb +} + +// add cancels the pending quota sent on acquired, incremented by v and sends +// it back on acquire. +func (qb *quotaPool) add(v int) { + qb.mu.Lock() + defer qb.mu.Unlock() + select { + case n := <-qb.c: + qb.quota += n + default: + } + qb.quota += v + if qb.quota <= 0 { + return + } + // After the pool has been created, this is the only place that sends on + // the channel. Since mu is held at this point and any quota that was sent + // on the channel has been retrieved, we know that this code will always + // place any positive quota value on the channel. + select { + case qb.c <- qb.quota: + qb.quota = 0 + default: + } +} + +// acquire returns the channel on which available quota amounts are sent. +func (qb *quotaPool) acquire() <-chan int { + return qb.c +} + +// inFlow deals with inbound flow control +type inFlow struct { + // The inbound flow control limit for pending data. + limit uint32 + + mu sync.Mutex + // pendingData is the overall data which have been received but not been + // consumed by applications. + pendingData uint32 + // The amount of data the application has consumed but grpc has not sent + // window update for them. Used to reduce window update frequency. + pendingUpdate uint32 +} + +// onData is invoked when some data frame is received. It updates pendingData. +func (f *inFlow) onData(n uint32) error { + f.mu.Lock() + defer f.mu.Unlock() + f.pendingData += n + if f.pendingData+f.pendingUpdate > f.limit { + return fmt.Errorf("received %d-bytes data exceeding the limit %d bytes", f.pendingData+f.pendingUpdate, f.limit) + } + return nil +} + +// onRead is invoked when the application reads the data. It returns the window size +// to be sent to the peer. +func (f *inFlow) onRead(n uint32) uint32 { + f.mu.Lock() + defer f.mu.Unlock() + if f.pendingData == 0 { + return 0 + } + f.pendingData -= n + f.pendingUpdate += n + if f.pendingUpdate >= f.limit/4 { + wu := f.pendingUpdate + f.pendingUpdate = 0 + return wu + } + return 0 +} + +func (f *inFlow) resetPendingData() uint32 { + f.mu.Lock() + defer f.mu.Unlock() + n := f.pendingData + f.pendingData = 0 + return n +} diff --git a/vendor/google.golang.org/grpc/transport/go16.go b/vendor/google.golang.org/grpc/transport/go16.go new file mode 100644 index 0000000..ee1c46b --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/go16.go @@ -0,0 +1,46 @@ +// +build go1.6,!go1.7 + +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "net" + + "golang.org/x/net/context" +) + +// dialContext connects to the address on the named network. +func dialContext(ctx context.Context, network, address string) (net.Conn, error) { + return (&net.Dialer{Cancel: ctx.Done()}).Dial(network, address) +} diff --git a/vendor/google.golang.org/grpc/transport/go17.go b/vendor/google.golang.org/grpc/transport/go17.go new file mode 100644 index 0000000..356f13f --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/go17.go @@ -0,0 +1,46 @@ +// +build go1.7 + +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "net" + + "golang.org/x/net/context" +) + +// dialContext connects to the address on the named network. +func dialContext(ctx context.Context, network, address string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, network, address) +} diff --git a/vendor/google.golang.org/grpc/transport/handler_server.go b/vendor/google.golang.org/grpc/transport/handler_server.go new file mode 100644 index 0000000..10b6dc0 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/handler_server.go @@ -0,0 +1,397 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// This file is the implementation of a gRPC server using HTTP/2 which +// uses the standard Go http2 Server implementation (via the +// http.Handler interface), rather than speaking low-level HTTP/2 +// frames itself. It is the implementation of *grpc.Server.ServeHTTP. + +package transport + +import ( + "errors" + "fmt" + "io" + "net" + "net/http" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" +) + +// NewServerHandlerTransport returns a ServerTransport handling gRPC +// from inside an http.Handler. It requires that the http Server +// supports HTTP/2. +func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request) (ServerTransport, error) { + if r.ProtoMajor != 2 { + return nil, errors.New("gRPC requires HTTP/2") + } + if r.Method != "POST" { + return nil, errors.New("invalid gRPC request method") + } + if !validContentType(r.Header.Get("Content-Type")) { + return nil, errors.New("invalid gRPC request content-type") + } + if _, ok := w.(http.Flusher); !ok { + return nil, errors.New("gRPC requires a ResponseWriter supporting http.Flusher") + } + if _, ok := w.(http.CloseNotifier); !ok { + return nil, errors.New("gRPC requires a ResponseWriter supporting http.CloseNotifier") + } + + st := &serverHandlerTransport{ + rw: w, + req: r, + closedCh: make(chan struct{}), + writes: make(chan func()), + } + + if v := r.Header.Get("grpc-timeout"); v != "" { + to, err := decodeTimeout(v) + if err != nil { + return nil, streamErrorf(codes.Internal, "malformed time-out: %v", err) + } + st.timeoutSet = true + st.timeout = to + } + + var metakv []string + if r.Host != "" { + metakv = append(metakv, ":authority", r.Host) + } + for k, vv := range r.Header { + k = strings.ToLower(k) + if isReservedHeader(k) && !isWhitelistedPseudoHeader(k) { + continue + } + for _, v := range vv { + if k == "user-agent" { + // user-agent is special. Copying logic of http_util.go. + if i := strings.LastIndex(v, " "); i == -1 { + // There is no application user agent string being set + continue + } else { + v = v[:i] + } + } + metakv = append(metakv, k, v) + } + } + st.headerMD = metadata.Pairs(metakv...) + + return st, nil +} + +// serverHandlerTransport is an implementation of ServerTransport +// which replies to exactly one gRPC request (exactly one HTTP request), +// using the net/http.Handler interface. This http.Handler is guaranteed +// at this point to be speaking over HTTP/2, so it's able to speak valid +// gRPC. +type serverHandlerTransport struct { + rw http.ResponseWriter + req *http.Request + timeoutSet bool + timeout time.Duration + didCommonHeaders bool + + headerMD metadata.MD + + closeOnce sync.Once + closedCh chan struct{} // closed on Close + + // writes is a channel of code to run serialized in the + // ServeHTTP (HandleStreams) goroutine. The channel is closed + // when WriteStatus is called. + writes chan func() +} + +func (ht *serverHandlerTransport) Close() error { + ht.closeOnce.Do(ht.closeCloseChanOnce) + return nil +} + +func (ht *serverHandlerTransport) closeCloseChanOnce() { close(ht.closedCh) } + +func (ht *serverHandlerTransport) RemoteAddr() net.Addr { return strAddr(ht.req.RemoteAddr) } + +// strAddr is a net.Addr backed by either a TCP "ip:port" string, or +// the empty string if unknown. +type strAddr string + +func (a strAddr) Network() string { + if a != "" { + // Per the documentation on net/http.Request.RemoteAddr, if this is + // set, it's set to the IP:port of the peer (hence, TCP): + // https://golang.org/pkg/net/http/#Request + // + // If we want to support Unix sockets later, we can + // add our own grpc-specific convention within the + // grpc codebase to set RemoteAddr to a different + // format, or probably better: we can attach it to the + // context and use that from serverHandlerTransport.RemoteAddr. + return "tcp" + } + return "" +} + +func (a strAddr) String() string { return string(a) } + +// do runs fn in the ServeHTTP goroutine. +func (ht *serverHandlerTransport) do(fn func()) error { + select { + case ht.writes <- fn: + return nil + case <-ht.closedCh: + return ErrConnClosing + } +} + +func (ht *serverHandlerTransport) WriteStatus(s *Stream, statusCode codes.Code, statusDesc string) error { + err := ht.do(func() { + ht.writeCommonHeaders(s) + + // And flush, in case no header or body has been sent yet. + // This forces a separation of headers and trailers if this is the + // first call (for example, in end2end tests's TestNoService). + ht.rw.(http.Flusher).Flush() + + h := ht.rw.Header() + h.Set("Grpc-Status", fmt.Sprintf("%d", statusCode)) + if statusDesc != "" { + h.Set("Grpc-Message", encodeGrpcMessage(statusDesc)) + } + if md := s.Trailer(); len(md) > 0 { + for k, vv := range md { + // Clients don't tolerate reading restricted headers after some non restricted ones were sent. + if isReservedHeader(k) { + continue + } + for _, v := range vv { + // http2 ResponseWriter mechanism to + // send undeclared Trailers after the + // headers have possibly been written. + h.Add(http2.TrailerPrefix+k, v) + } + } + } + }) + close(ht.writes) + return err +} + +// writeCommonHeaders sets common headers on the first write +// call (Write, WriteHeader, or WriteStatus). +func (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) { + if ht.didCommonHeaders { + return + } + ht.didCommonHeaders = true + + h := ht.rw.Header() + h["Date"] = nil // suppress Date to make tests happy; TODO: restore + h.Set("Content-Type", "application/grpc") + + // Predeclare trailers we'll set later in WriteStatus (after the body). + // This is a SHOULD in the HTTP RFC, and the way you add (known) + // Trailers per the net/http.ResponseWriter contract. + // See https://golang.org/pkg/net/http/#ResponseWriter + // and https://golang.org/pkg/net/http/#example_ResponseWriter_trailers + h.Add("Trailer", "Grpc-Status") + h.Add("Trailer", "Grpc-Message") + + if s.sendCompress != "" { + h.Set("Grpc-Encoding", s.sendCompress) + } +} + +func (ht *serverHandlerTransport) Write(s *Stream, data []byte, opts *Options) error { + return ht.do(func() { + ht.writeCommonHeaders(s) + ht.rw.Write(data) + if !opts.Delay { + ht.rw.(http.Flusher).Flush() + } + }) +} + +func (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error { + return ht.do(func() { + ht.writeCommonHeaders(s) + h := ht.rw.Header() + for k, vv := range md { + // Clients don't tolerate reading restricted headers after some non restricted ones were sent. + if isReservedHeader(k) { + continue + } + for _, v := range vv { + h.Add(k, v) + } + } + ht.rw.WriteHeader(200) + ht.rw.(http.Flusher).Flush() + }) +} + +func (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream), traceCtx func(context.Context, string) context.Context) { + // With this transport type there will be exactly 1 stream: this HTTP request. + + var ctx context.Context + var cancel context.CancelFunc + if ht.timeoutSet { + ctx, cancel = context.WithTimeout(context.Background(), ht.timeout) + } else { + ctx, cancel = context.WithCancel(context.Background()) + } + + // requestOver is closed when either the request's context is done + // or the status has been written via WriteStatus. + requestOver := make(chan struct{}) + + // clientGone receives a single value if peer is gone, either + // because the underlying connection is dead or because the + // peer sends an http2 RST_STREAM. + clientGone := ht.rw.(http.CloseNotifier).CloseNotify() + go func() { + select { + case <-requestOver: + return + case <-ht.closedCh: + case <-clientGone: + } + cancel() + }() + + req := ht.req + + s := &Stream{ + id: 0, // irrelevant + windowHandler: func(int) {}, // nothing + cancel: cancel, + buf: newRecvBuffer(), + st: ht, + method: req.URL.Path, + recvCompress: req.Header.Get("grpc-encoding"), + } + pr := &peer.Peer{ + Addr: ht.RemoteAddr(), + } + if req.TLS != nil { + pr.AuthInfo = credentials.TLSInfo{State: *req.TLS} + } + ctx = metadata.NewContext(ctx, ht.headerMD) + ctx = peer.NewContext(ctx, pr) + s.ctx = newContextWithStream(ctx, s) + s.dec = &recvBufferReader{ctx: s.ctx, recv: s.buf} + + // readerDone is closed when the Body.Read-ing goroutine exits. + readerDone := make(chan struct{}) + go func() { + defer close(readerDone) + + // TODO: minimize garbage, optimize recvBuffer code/ownership + const readSize = 8196 + for buf := make([]byte, readSize); ; { + n, err := req.Body.Read(buf) + if n > 0 { + s.buf.put(&recvMsg{data: buf[:n:n]}) + buf = buf[n:] + } + if err != nil { + s.buf.put(&recvMsg{err: mapRecvMsgError(err)}) + return + } + if len(buf) == 0 { + buf = make([]byte, readSize) + } + } + }() + + // startStream is provided by the *grpc.Server's serveStreams. + // It starts a goroutine serving s and exits immediately. + // The goroutine that is started is the one that then calls + // into ht, calling WriteHeader, Write, WriteStatus, Close, etc. + startStream(s) + + ht.runStream() + close(requestOver) + + // Wait for reading goroutine to finish. + req.Body.Close() + <-readerDone +} + +func (ht *serverHandlerTransport) runStream() { + for { + select { + case fn, ok := <-ht.writes: + if !ok { + return + } + fn() + case <-ht.closedCh: + return + } + } +} + +func (ht *serverHandlerTransport) Drain() { + panic("Drain() is not implemented") +} + +// mapRecvMsgError returns the non-nil err into the appropriate +// error value as expected by callers of *grpc.parser.recvMsg. +// In particular, in can only be: +// * io.EOF +// * io.ErrUnexpectedEOF +// * of type transport.ConnectionError +// * of type transport.StreamError +func mapRecvMsgError(err error) error { + if err == io.EOF || err == io.ErrUnexpectedEOF { + return err + } + if se, ok := err.(http2.StreamError); ok { + if code, ok := http2ErrConvTab[se.Code]; ok { + return StreamError{ + Code: code, + Desc: se.Error(), + } + } + } + return connectionErrorf(true, err, err.Error()) +} diff --git a/vendor/google.golang.org/grpc/transport/handler_server_test.go b/vendor/google.golang.org/grpc/transport/handler_server_test.go new file mode 100644 index 0000000..44adf2e --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/handler_server_test.go @@ -0,0 +1,398 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "errors" + "fmt" + "io" + "net/http" + "net/http/httptest" + "net/url" + "reflect" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" +) + +func TestHandlerTransport_NewServerHandlerTransport(t *testing.T) { + type testCase struct { + name string + req *http.Request + wantErr string + modrw func(http.ResponseWriter) http.ResponseWriter + check func(*serverHandlerTransport, *testCase) error + } + tests := []testCase{ + { + name: "http/1.1", + req: &http.Request{ + ProtoMajor: 1, + ProtoMinor: 1, + }, + wantErr: "gRPC requires HTTP/2", + }, + { + name: "bad method", + req: &http.Request{ + ProtoMajor: 2, + Method: "GET", + Header: http.Header{}, + RequestURI: "/", + }, + wantErr: "invalid gRPC request method", + }, + { + name: "bad content type", + req: &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": {"application/foo"}, + }, + RequestURI: "/service/foo.bar", + }, + wantErr: "invalid gRPC request content-type", + }, + { + name: "not flusher", + req: &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": {"application/grpc"}, + }, + RequestURI: "/service/foo.bar", + }, + modrw: func(w http.ResponseWriter) http.ResponseWriter { + // Return w without its Flush method + type onlyCloseNotifier interface { + http.ResponseWriter + http.CloseNotifier + } + return struct{ onlyCloseNotifier }{w.(onlyCloseNotifier)} + }, + wantErr: "gRPC requires a ResponseWriter supporting http.Flusher", + }, + { + name: "not closenotifier", + req: &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": {"application/grpc"}, + }, + RequestURI: "/service/foo.bar", + }, + modrw: func(w http.ResponseWriter) http.ResponseWriter { + // Return w without its CloseNotify method + type onlyFlusher interface { + http.ResponseWriter + http.Flusher + } + return struct{ onlyFlusher }{w.(onlyFlusher)} + }, + wantErr: "gRPC requires a ResponseWriter supporting http.CloseNotifier", + }, + { + name: "valid", + req: &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": {"application/grpc"}, + }, + URL: &url.URL{ + Path: "/service/foo.bar", + }, + RequestURI: "/service/foo.bar", + }, + check: func(t *serverHandlerTransport, tt *testCase) error { + if t.req != tt.req { + return fmt.Errorf("t.req = %p; want %p", t.req, tt.req) + } + if t.rw == nil { + return errors.New("t.rw = nil; want non-nil") + } + return nil + }, + }, + { + name: "with timeout", + req: &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": []string{"application/grpc"}, + "Grpc-Timeout": {"200m"}, + }, + URL: &url.URL{ + Path: "/service/foo.bar", + }, + RequestURI: "/service/foo.bar", + }, + check: func(t *serverHandlerTransport, tt *testCase) error { + if !t.timeoutSet { + return errors.New("timeout not set") + } + if want := 200 * time.Millisecond; t.timeout != want { + return fmt.Errorf("timeout = %v; want %v", t.timeout, want) + } + return nil + }, + }, + { + name: "with bad timeout", + req: &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": []string{"application/grpc"}, + "Grpc-Timeout": {"tomorrow"}, + }, + URL: &url.URL{ + Path: "/service/foo.bar", + }, + RequestURI: "/service/foo.bar", + }, + wantErr: `stream error: code = Internal desc = "malformed time-out: transport: timeout unit is not recognized: \"tomorrow\""`, + }, + { + name: "with metadata", + req: &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": []string{"application/grpc"}, + "meta-foo": {"foo-val"}, + "meta-bar": {"bar-val1", "bar-val2"}, + "user-agent": {"x/y a/b"}, + }, + URL: &url.URL{ + Path: "/service/foo.bar", + }, + RequestURI: "/service/foo.bar", + }, + check: func(ht *serverHandlerTransport, tt *testCase) error { + want := metadata.MD{ + "meta-bar": {"bar-val1", "bar-val2"}, + "user-agent": {"x/y"}, + "meta-foo": {"foo-val"}, + } + if !reflect.DeepEqual(ht.headerMD, want) { + return fmt.Errorf("metdata = %#v; want %#v", ht.headerMD, want) + } + return nil + }, + }, + } + + for _, tt := range tests { + rw := newTestHandlerResponseWriter() + if tt.modrw != nil { + rw = tt.modrw(rw) + } + got, gotErr := NewServerHandlerTransport(rw, tt.req) + if (gotErr != nil) != (tt.wantErr != "") || (gotErr != nil && gotErr.Error() != tt.wantErr) { + t.Errorf("%s: error = %v; want %q", tt.name, gotErr, tt.wantErr) + continue + } + if gotErr != nil { + continue + } + if tt.check != nil { + if err := tt.check(got.(*serverHandlerTransport), &tt); err != nil { + t.Errorf("%s: %v", tt.name, err) + } + } + } +} + +type testHandlerResponseWriter struct { + *httptest.ResponseRecorder + closeNotify chan bool +} + +func (w testHandlerResponseWriter) CloseNotify() <-chan bool { return w.closeNotify } +func (w testHandlerResponseWriter) Flush() {} + +func newTestHandlerResponseWriter() http.ResponseWriter { + return testHandlerResponseWriter{ + ResponseRecorder: httptest.NewRecorder(), + closeNotify: make(chan bool, 1), + } +} + +type handleStreamTest struct { + t *testing.T + bodyw *io.PipeWriter + req *http.Request + rw testHandlerResponseWriter + ht *serverHandlerTransport +} + +func newHandleStreamTest(t *testing.T) *handleStreamTest { + bodyr, bodyw := io.Pipe() + req := &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": {"application/grpc"}, + }, + URL: &url.URL{ + Path: "/service/foo.bar", + }, + RequestURI: "/service/foo.bar", + Body: bodyr, + } + rw := newTestHandlerResponseWriter().(testHandlerResponseWriter) + ht, err := NewServerHandlerTransport(rw, req) + if err != nil { + t.Fatal(err) + } + return &handleStreamTest{ + t: t, + bodyw: bodyw, + ht: ht.(*serverHandlerTransport), + rw: rw, + } +} + +func TestHandlerTransport_HandleStreams(t *testing.T) { + st := newHandleStreamTest(t) + handleStream := func(s *Stream) { + if want := "/service/foo.bar"; s.method != want { + t.Errorf("stream method = %q; want %q", s.method, want) + } + st.bodyw.Close() // no body + st.ht.WriteStatus(s, codes.OK, "") + } + st.ht.HandleStreams( + func(s *Stream) { go handleStream(s) }, + func(ctx context.Context, method string) context.Context { return ctx }, + ) + wantHeader := http.Header{ + "Date": nil, + "Content-Type": {"application/grpc"}, + "Trailer": {"Grpc-Status", "Grpc-Message"}, + "Grpc-Status": {"0"}, + } + if !reflect.DeepEqual(st.rw.HeaderMap, wantHeader) { + t.Errorf("Header+Trailer Map: %#v; want %#v", st.rw.HeaderMap, wantHeader) + } +} + +// Tests that codes.Unimplemented will close the body, per comment in handler_server.go. +func TestHandlerTransport_HandleStreams_Unimplemented(t *testing.T) { + handleStreamCloseBodyTest(t, codes.Unimplemented, "thingy is unimplemented") +} + +// Tests that codes.InvalidArgument will close the body, per comment in handler_server.go. +func TestHandlerTransport_HandleStreams_InvalidArgument(t *testing.T) { + handleStreamCloseBodyTest(t, codes.InvalidArgument, "bad arg") +} + +func handleStreamCloseBodyTest(t *testing.T, statusCode codes.Code, msg string) { + st := newHandleStreamTest(t) + handleStream := func(s *Stream) { + st.ht.WriteStatus(s, statusCode, msg) + } + st.ht.HandleStreams( + func(s *Stream) { go handleStream(s) }, + func(ctx context.Context, method string) context.Context { return ctx }, + ) + wantHeader := http.Header{ + "Date": nil, + "Content-Type": {"application/grpc"}, + "Trailer": {"Grpc-Status", "Grpc-Message"}, + "Grpc-Status": {fmt.Sprint(uint32(statusCode))}, + "Grpc-Message": {encodeGrpcMessage(msg)}, + } + if !reflect.DeepEqual(st.rw.HeaderMap, wantHeader) { + t.Errorf("Header+Trailer mismatch.\n got: %#v\nwant: %#v", st.rw.HeaderMap, wantHeader) + } +} + +func TestHandlerTransport_HandleStreams_Timeout(t *testing.T) { + bodyr, bodyw := io.Pipe() + req := &http.Request{ + ProtoMajor: 2, + Method: "POST", + Header: http.Header{ + "Content-Type": {"application/grpc"}, + "Grpc-Timeout": {"200m"}, + }, + URL: &url.URL{ + Path: "/service/foo.bar", + }, + RequestURI: "/service/foo.bar", + Body: bodyr, + } + rw := newTestHandlerResponseWriter().(testHandlerResponseWriter) + ht, err := NewServerHandlerTransport(rw, req) + if err != nil { + t.Fatal(err) + } + runStream := func(s *Stream) { + defer bodyw.Close() + select { + case <-s.ctx.Done(): + case <-time.After(5 * time.Second): + t.Errorf("timeout waiting for ctx.Done") + return + } + err := s.ctx.Err() + if err != context.DeadlineExceeded { + t.Errorf("ctx.Err = %v; want %v", err, context.DeadlineExceeded) + return + } + ht.WriteStatus(s, codes.DeadlineExceeded, "too slow") + } + ht.HandleStreams( + func(s *Stream) { go runStream(s) }, + func(ctx context.Context, method string) context.Context { return ctx }, + ) + wantHeader := http.Header{ + "Date": nil, + "Content-Type": {"application/grpc"}, + "Trailer": {"Grpc-Status", "Grpc-Message"}, + "Grpc-Status": {"4"}, + "Grpc-Message": {encodeGrpcMessage("too slow")}, + } + if !reflect.DeepEqual(rw.HeaderMap, wantHeader) { + t.Errorf("Header+Trailer Map mismatch.\n got: %#v\nwant: %#v", rw.HeaderMap, wantHeader) + } +} diff --git a/vendor/google.golang.org/grpc/transport/http2_client.go b/vendor/google.golang.org/grpc/transport/http2_client.go new file mode 100644 index 0000000..627a590 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/http2_client.go @@ -0,0 +1,1234 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "bytes" + "fmt" + "io" + "math" + "net" + "strings" + "sync" + "sync/atomic" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/stats" +) + +// http2Client implements the ClientTransport interface with HTTP2. +type http2Client struct { + ctx context.Context + target string // server name/addr + userAgent string + md interface{} + conn net.Conn // underlying communication channel + remoteAddr net.Addr + localAddr net.Addr + authInfo credentials.AuthInfo // auth info about the connection + nextID uint32 // the next stream ID to be used + + // writableChan synchronizes write access to the transport. + // A writer acquires the write lock by sending a value on writableChan + // and releases it by receiving from writableChan. + writableChan chan int + // shutdownChan is closed when Close is called. + // Blocking operations should select on shutdownChan to avoid + // blocking forever after Close. + // TODO(zhaoq): Maybe have a channel context? + shutdownChan chan struct{} + // errorChan is closed to notify the I/O error to the caller. + errorChan chan struct{} + // goAway is closed to notify the upper layer (i.e., addrConn.transportMonitor) + // that the server sent GoAway on this transport. + goAway chan struct{} + // awakenKeepalive is used to wake up keepalive when after it has gone dormant. + awakenKeepalive chan struct{} + + framer *framer + hBuf *bytes.Buffer // the buffer for HPACK encoding + hEnc *hpack.Encoder // HPACK encoder + + // controlBuf delivers all the control related tasks (e.g., window + // updates, reset streams, and various settings) to the controller. + controlBuf *recvBuffer + fc *inFlow + // sendQuotaPool provides flow control to outbound message. + sendQuotaPool *quotaPool + // streamsQuota limits the max number of concurrent streams. + streamsQuota *quotaPool + + // The scheme used: https if TLS is on, http otherwise. + scheme string + + creds []credentials.PerRPCCredentials + + // Boolean to keep track of reading activity on transport. + // 1 is true and 0 is false. + activity uint32 // Accessed atomically. + kp keepalive.ClientParameters + + statsHandler stats.Handler + + mu sync.Mutex // guard the following variables + state transportState // the state of underlying connection + activeStreams map[uint32]*Stream + // The max number of concurrent streams + maxStreams int + // the per-stream outbound flow control window size set by the peer. + streamSendQuota uint32 + // goAwayID records the Last-Stream-ID in the GoAway frame from the server. + goAwayID uint32 + // prevGoAway ID records the Last-Stream-ID in the previous GOAway frame. + prevGoAwayID uint32 +} + +func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr string) (net.Conn, error) { + if fn != nil { + return fn(ctx, addr) + } + return dialContext(ctx, "tcp", addr) +} + +func isTemporary(err error) bool { + switch err { + case io.EOF: + // Connection closures may be resolved upon retry, and are thus + // treated as temporary. + return true + case context.DeadlineExceeded: + // In Go 1.7, context.DeadlineExceeded implements Timeout(), and this + // special case is not needed. Until then, we need to keep this + // clause. + return true + } + + switch err := err.(type) { + case interface { + Temporary() bool + }: + return err.Temporary() + case interface { + Timeout() bool + }: + // Timeouts may be resolved upon retry, and are thus treated as + // temporary. + return err.Timeout() + } + return false +} + +// newHTTP2Client constructs a connected ClientTransport to addr based on HTTP2 +// and starts to receive messages on it. Non-nil error returns if construction +// fails. +func newHTTP2Client(ctx context.Context, addr TargetInfo, opts ConnectOptions) (_ ClientTransport, err error) { + scheme := "http" + conn, err := dial(ctx, opts.Dialer, addr.Addr) + if err != nil { + if opts.FailOnNonTempDialError { + return nil, connectionErrorf(isTemporary(err), err, "transport: %v", err) + } + return nil, connectionErrorf(true, err, "transport: %v", err) + } + // Any further errors will close the underlying connection + defer func(conn net.Conn) { + if err != nil { + conn.Close() + } + }(conn) + var authInfo credentials.AuthInfo + if creds := opts.TransportCredentials; creds != nil { + scheme = "https" + conn, authInfo, err = creds.ClientHandshake(ctx, addr.Addr, conn) + if err != nil { + // Credentials handshake errors are typically considered permanent + // to avoid retrying on e.g. bad certificates. + temp := isTemporary(err) + return nil, connectionErrorf(temp, err, "transport: %v", err) + } + } + ua := primaryUA + if opts.UserAgent != "" { + ua = opts.UserAgent + " " + ua + } + kp := opts.KeepaliveParams + // Validate keepalive parameters. + if kp.Time == 0 { + kp.Time = defaultKeepaliveTime + } + if kp.Timeout == 0 { + kp.Timeout = defaultKeepaliveTimeout + } + var buf bytes.Buffer + t := &http2Client{ + ctx: ctx, + target: addr.Addr, + userAgent: ua, + md: addr.Metadata, + conn: conn, + remoteAddr: conn.RemoteAddr(), + localAddr: conn.LocalAddr(), + authInfo: authInfo, + // The client initiated stream id is odd starting from 1. + nextID: 1, + writableChan: make(chan int, 1), + shutdownChan: make(chan struct{}), + errorChan: make(chan struct{}), + goAway: make(chan struct{}), + awakenKeepalive: make(chan struct{}, 1), + framer: newFramer(conn), + hBuf: &buf, + hEnc: hpack.NewEncoder(&buf), + controlBuf: newRecvBuffer(), + fc: &inFlow{limit: initialConnWindowSize}, + sendQuotaPool: newQuotaPool(defaultWindowSize), + scheme: scheme, + state: reachable, + activeStreams: make(map[uint32]*Stream), + creds: opts.PerRPCCredentials, + maxStreams: defaultMaxStreamsClient, + streamsQuota: newQuotaPool(defaultMaxStreamsClient), + streamSendQuota: defaultWindowSize, + kp: kp, + statsHandler: opts.StatsHandler, + } + // Make sure awakenKeepalive can't be written upon. + // keepalive routine will make it writable, if need be. + t.awakenKeepalive <- struct{}{} + if t.statsHandler != nil { + t.ctx = t.statsHandler.TagConn(t.ctx, &stats.ConnTagInfo{ + RemoteAddr: t.remoteAddr, + LocalAddr: t.localAddr, + }) + connBegin := &stats.ConnBegin{ + Client: true, + } + t.statsHandler.HandleConn(t.ctx, connBegin) + } + // Start the reader goroutine for incoming message. Each transport has + // a dedicated goroutine which reads HTTP2 frame from network. Then it + // dispatches the frame to the corresponding stream entity. + go t.reader() + // Send connection preface to server. + n, err := t.conn.Write(clientPreface) + if err != nil { + t.Close() + return nil, connectionErrorf(true, err, "transport: %v", err) + } + if n != len(clientPreface) { + t.Close() + return nil, connectionErrorf(true, err, "transport: preface mismatch, wrote %d bytes; want %d", n, len(clientPreface)) + } + if initialWindowSize != defaultWindowSize { + err = t.framer.writeSettings(true, http2.Setting{ + ID: http2.SettingInitialWindowSize, + Val: uint32(initialWindowSize), + }) + } else { + err = t.framer.writeSettings(true) + } + if err != nil { + t.Close() + return nil, connectionErrorf(true, err, "transport: %v", err) + } + // Adjust the connection flow control window if needed. + if delta := uint32(initialConnWindowSize - defaultWindowSize); delta > 0 { + if err := t.framer.writeWindowUpdate(true, 0, delta); err != nil { + t.Close() + return nil, connectionErrorf(true, err, "transport: %v", err) + } + } + go t.controller() + if t.kp.Time != infinity { + go t.keepalive() + } + t.writableChan <- 0 + return t, nil +} + +func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *Stream { + // TODO(zhaoq): Handle uint32 overflow of Stream.id. + s := &Stream{ + id: t.nextID, + done: make(chan struct{}), + goAway: make(chan struct{}), + method: callHdr.Method, + sendCompress: callHdr.SendCompress, + buf: newRecvBuffer(), + fc: &inFlow{limit: initialWindowSize}, + sendQuotaPool: newQuotaPool(int(t.streamSendQuota)), + headerChan: make(chan struct{}), + } + t.nextID += 2 + s.windowHandler = func(n int) { + t.updateWindow(s, uint32(n)) + } + // The client side stream context should have exactly the same life cycle with the user provided context. + // That means, s.ctx should be read-only. And s.ctx is done iff ctx is done. + // So we use the original context here instead of creating a copy. + s.ctx = ctx + s.dec = &recvBufferReader{ + ctx: s.ctx, + goAway: s.goAway, + recv: s.buf, + } + return s +} + +// NewStream creates a stream and register it into the transport as "active" +// streams. +func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Stream, err error) { + pr := &peer.Peer{ + Addr: t.remoteAddr, + } + // Attach Auth info if there is any. + if t.authInfo != nil { + pr.AuthInfo = t.authInfo + } + userCtx := ctx + ctx = peer.NewContext(ctx, pr) + authData := make(map[string]string) + for _, c := range t.creds { + // Construct URI required to get auth request metadata. + var port string + if pos := strings.LastIndex(t.target, ":"); pos != -1 { + // Omit port if it is the default one. + if t.target[pos+1:] != "443" { + port = ":" + t.target[pos+1:] + } + } + pos := strings.LastIndex(callHdr.Method, "/") + if pos == -1 { + return nil, streamErrorf(codes.InvalidArgument, "transport: malformed method name: %q", callHdr.Method) + } + audience := "https://" + callHdr.Host + port + callHdr.Method[:pos] + data, err := c.GetRequestMetadata(ctx, audience) + if err != nil { + return nil, streamErrorf(codes.InvalidArgument, "transport: %v", err) + } + for k, v := range data { + authData[k] = v + } + } + t.mu.Lock() + if t.activeStreams == nil { + t.mu.Unlock() + return nil, ErrConnClosing + } + if t.state == draining { + t.mu.Unlock() + return nil, ErrStreamDrain + } + if t.state != reachable { + t.mu.Unlock() + return nil, ErrConnClosing + } + t.mu.Unlock() + sq, err := wait(ctx, nil, nil, t.shutdownChan, t.streamsQuota.acquire()) + if err != nil { + return nil, err + } + // Returns the quota balance back. + if sq > 1 { + t.streamsQuota.add(sq - 1) + } + if _, err := wait(ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + // Return the quota back now because there is no stream returned to the caller. + if _, ok := err.(StreamError); ok { + t.streamsQuota.add(1) + } + return nil, err + } + t.mu.Lock() + if t.state == draining { + t.mu.Unlock() + t.streamsQuota.add(1) + // Need to make t writable again so that the rpc in flight can still proceed. + t.writableChan <- 0 + return nil, ErrStreamDrain + } + if t.state != reachable { + t.mu.Unlock() + return nil, ErrConnClosing + } + s := t.newStream(ctx, callHdr) + s.clientStatsCtx = userCtx + t.activeStreams[s.id] = s + // If the number of active streams change from 0 to 1, then check if keepalive + // has gone dormant. If so, wake it up. + if len(t.activeStreams) == 1 { + select { + case t.awakenKeepalive <- struct{}{}: + t.framer.writePing(false, false, [8]byte{}) + default: + } + } + + t.mu.Unlock() + + // HPACK encodes various headers. Note that once WriteField(...) is + // called, the corresponding headers/continuation frame has to be sent + // because hpack.Encoder is stateful. + t.hBuf.Reset() + t.hEnc.WriteField(hpack.HeaderField{Name: ":method", Value: "POST"}) + t.hEnc.WriteField(hpack.HeaderField{Name: ":scheme", Value: t.scheme}) + t.hEnc.WriteField(hpack.HeaderField{Name: ":path", Value: callHdr.Method}) + t.hEnc.WriteField(hpack.HeaderField{Name: ":authority", Value: callHdr.Host}) + t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + t.hEnc.WriteField(hpack.HeaderField{Name: "user-agent", Value: t.userAgent}) + t.hEnc.WriteField(hpack.HeaderField{Name: "te", Value: "trailers"}) + + if callHdr.SendCompress != "" { + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-encoding", Value: callHdr.SendCompress}) + } + if dl, ok := ctx.Deadline(); ok { + // Send out timeout regardless its value. The server can detect timeout context by itself. + timeout := dl.Sub(time.Now()) + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-timeout", Value: encodeTimeout(timeout)}) + } + + for k, v := range authData { + // Capital header names are illegal in HTTP/2. + k = strings.ToLower(k) + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: v}) + } + var ( + hasMD bool + endHeaders bool + ) + if md, ok := metadata.FromContext(ctx); ok { + hasMD = true + for k, v := range md { + // HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set. + if isReservedHeader(k) { + continue + } + for _, entry := range v { + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: entry}) + } + } + } + if md, ok := t.md.(*metadata.MD); ok { + for k, v := range *md { + if isReservedHeader(k) { + continue + } + for _, entry := range v { + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: entry}) + } + } + } + first := true + bufLen := t.hBuf.Len() + // Sends the headers in a single batch even when they span multiple frames. + for !endHeaders { + size := t.hBuf.Len() + if size > http2MaxFrameLen { + size = http2MaxFrameLen + } else { + endHeaders = true + } + var flush bool + if endHeaders && (hasMD || callHdr.Flush) { + flush = true + } + if first { + // Sends a HeadersFrame to server to start a new stream. + p := http2.HeadersFrameParam{ + StreamID: s.id, + BlockFragment: t.hBuf.Next(size), + EndStream: false, + EndHeaders: endHeaders, + } + // Do a force flush for the buffered frames iff it is the last headers frame + // and there is header metadata to be sent. Otherwise, there is flushing until + // the corresponding data frame is written. + err = t.framer.writeHeaders(flush, p) + first = false + } else { + // Sends Continuation frames for the leftover headers. + err = t.framer.writeContinuation(flush, s.id, endHeaders, t.hBuf.Next(size)) + } + if err != nil { + t.notifyError(err) + return nil, connectionErrorf(true, err, "transport: %v", err) + } + } + if t.statsHandler != nil { + outHeader := &stats.OutHeader{ + Client: true, + WireLength: bufLen, + FullMethod: callHdr.Method, + RemoteAddr: t.remoteAddr, + LocalAddr: t.localAddr, + Compression: callHdr.SendCompress, + } + t.statsHandler.HandleRPC(s.clientStatsCtx, outHeader) + } + t.writableChan <- 0 + return s, nil +} + +// CloseStream clears the footprint of a stream when the stream is not needed any more. +// This must not be executed in reader's goroutine. +func (t *http2Client) CloseStream(s *Stream, err error) { + t.mu.Lock() + if t.activeStreams == nil { + t.mu.Unlock() + return + } + delete(t.activeStreams, s.id) + if t.state == draining && len(t.activeStreams) == 0 { + // The transport is draining and s is the last live stream on t. + t.mu.Unlock() + t.Close() + return + } + t.mu.Unlock() + // rstStream is true in case the stream is being closed at the client-side + // and the server needs to be intimated about it by sending a RST_STREAM + // frame. + // To make sure this frame is written to the wire before the headers of the + // next stream waiting for streamsQuota, we add to streamsQuota pool only + // after having acquired the writableChan to send RST_STREAM out (look at + // the controller() routine). + var rstStream bool + var rstError http2.ErrCode + defer func() { + // In case, the client doesn't have to send RST_STREAM to server + // we can safely add back to streamsQuota pool now. + if !rstStream { + t.streamsQuota.add(1) + return + } + t.controlBuf.put(&resetStream{s.id, rstError}) + }() + s.mu.Lock() + rstStream = s.rstStream + rstError = s.rstError + if q := s.fc.resetPendingData(); q > 0 { + if n := t.fc.onRead(q); n > 0 { + t.controlBuf.put(&windowUpdate{0, n}) + } + } + if s.state == streamDone { + s.mu.Unlock() + return + } + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.state = streamDone + s.mu.Unlock() + if _, ok := err.(StreamError); ok { + rstStream = true + rstError = http2.ErrCodeCancel + } +} + +// Close kicks off the shutdown process of the transport. This should be called +// only once on a transport. Once it is called, the transport should not be +// accessed any more. +func (t *http2Client) Close() (err error) { + t.mu.Lock() + if t.state == closing { + t.mu.Unlock() + return + } + if t.state == reachable || t.state == draining { + close(t.errorChan) + } + t.state = closing + t.mu.Unlock() + close(t.shutdownChan) + err = t.conn.Close() + t.mu.Lock() + streams := t.activeStreams + t.activeStreams = nil + t.mu.Unlock() + // Notify all active streams. + for _, s := range streams { + s.mu.Lock() + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.mu.Unlock() + s.write(recvMsg{err: ErrConnClosing}) + } + if t.statsHandler != nil { + connEnd := &stats.ConnEnd{ + Client: true, + } + t.statsHandler.HandleConn(t.ctx, connEnd) + } + return +} + +func (t *http2Client) GracefulClose() error { + t.mu.Lock() + switch t.state { + case unreachable: + // The server may close the connection concurrently. t is not available for + // any streams. Close it now. + t.mu.Unlock() + t.Close() + return nil + case closing: + t.mu.Unlock() + return nil + } + // Notify the streams which were initiated after the server sent GOAWAY. + select { + case <-t.goAway: + n := t.prevGoAwayID + if n == 0 && t.nextID > 1 { + n = t.nextID - 2 + } + m := t.goAwayID + 2 + if m == 2 { + m = 1 + } + for i := m; i <= n; i += 2 { + if s, ok := t.activeStreams[i]; ok { + close(s.goAway) + } + } + default: + } + if t.state == draining { + t.mu.Unlock() + return nil + } + t.state = draining + active := len(t.activeStreams) + t.mu.Unlock() + if active == 0 { + return t.Close() + } + return nil +} + +// Write formats the data into HTTP2 data frame(s) and sends it out. The caller +// should proceed only if Write returns nil. +// TODO(zhaoq): opts.Delay is ignored in this implementation. Support it later +// if it improves the performance. +func (t *http2Client) Write(s *Stream, data []byte, opts *Options) error { + r := bytes.NewBuffer(data) + for { + var p []byte + if r.Len() > 0 { + size := http2MaxFrameLen + // Wait until the stream has some quota to send the data. + sq, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, s.sendQuotaPool.acquire()) + if err != nil { + return err + } + // Wait until the transport has some quota to send the data. + tq, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, t.sendQuotaPool.acquire()) + if err != nil { + return err + } + if sq < size { + size = sq + } + if tq < size { + size = tq + } + p = r.Next(size) + ps := len(p) + if ps < sq { + // Overbooked stream quota. Return it back. + s.sendQuotaPool.add(sq - ps) + } + if ps < tq { + // Overbooked transport quota. Return it back. + t.sendQuotaPool.add(tq - ps) + } + } + var ( + endStream bool + forceFlush bool + ) + if opts.Last && r.Len() == 0 { + endStream = true + } + // Indicate there is a writer who is about to write a data frame. + t.framer.adjustNumWriters(1) + // Got some quota. Try to acquire writing privilege on the transport. + if _, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, t.writableChan); err != nil { + if _, ok := err.(StreamError); ok || err == io.EOF { + // Return the connection quota back. + t.sendQuotaPool.add(len(p)) + } + if t.framer.adjustNumWriters(-1) == 0 { + // This writer is the last one in this batch and has the + // responsibility to flush the buffered frames. It queues + // a flush request to controlBuf instead of flushing directly + // in order to avoid the race with other writing or flushing. + t.controlBuf.put(&flushIO{}) + } + return err + } + select { + case <-s.ctx.Done(): + t.sendQuotaPool.add(len(p)) + if t.framer.adjustNumWriters(-1) == 0 { + t.controlBuf.put(&flushIO{}) + } + t.writableChan <- 0 + return ContextErr(s.ctx.Err()) + default: + } + if r.Len() == 0 && t.framer.adjustNumWriters(0) == 1 { + // Do a force flush iff this is last frame for the entire gRPC message + // and the caller is the only writer at this moment. + forceFlush = true + } + // If WriteData fails, all the pending streams will be handled + // by http2Client.Close(). No explicit CloseStream() needs to be + // invoked. + if err := t.framer.writeData(forceFlush, s.id, endStream, p); err != nil { + t.notifyError(err) + return connectionErrorf(true, err, "transport: %v", err) + } + if t.framer.adjustNumWriters(-1) == 0 { + t.framer.flushWrite() + } + t.writableChan <- 0 + if r.Len() == 0 { + break + } + } + if !opts.Last { + return nil + } + s.mu.Lock() + if s.state != streamDone { + s.state = streamWriteDone + } + s.mu.Unlock() + return nil +} + +func (t *http2Client) getStream(f http2.Frame) (*Stream, bool) { + t.mu.Lock() + defer t.mu.Unlock() + s, ok := t.activeStreams[f.Header().StreamID] + return s, ok +} + +// updateWindow adjusts the inbound quota for the stream and the transport. +// Window updates will deliver to the controller for sending when +// the cumulative quota exceeds the corresponding threshold. +func (t *http2Client) updateWindow(s *Stream, n uint32) { + s.mu.Lock() + defer s.mu.Unlock() + if s.state == streamDone { + return + } + if w := t.fc.onRead(n); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + if w := s.fc.onRead(n); w > 0 { + t.controlBuf.put(&windowUpdate{s.id, w}) + } +} + +func (t *http2Client) handleData(f *http2.DataFrame) { + size := f.Header().Length + if err := t.fc.onData(uint32(size)); err != nil { + t.notifyError(connectionErrorf(true, err, "%v", err)) + return + } + // Select the right stream to dispatch. + s, ok := t.getStream(f) + if !ok { + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + return + } + if size > 0 { + if f.Header().Flags.Has(http2.FlagDataPadded) { + if w := t.fc.onRead(uint32(size) - uint32(len(f.Data()))); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + } + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + // The stream has been closed. Release the corresponding quota. + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + return + } + if err := s.fc.onData(uint32(size)); err != nil { + s.state = streamDone + s.statusCode = codes.Internal + s.statusDesc = err.Error() + s.rstStream = true + s.rstError = http2.ErrCodeFlowControl + close(s.done) + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) + return + } + if f.Header().Flags.Has(http2.FlagDataPadded) { + if w := s.fc.onRead(uint32(size) - uint32(len(f.Data()))); w > 0 { + t.controlBuf.put(&windowUpdate{s.id, w}) + } + } + s.mu.Unlock() + // TODO(bradfitz, zhaoq): A copy is required here because there is no + // guarantee f.Data() is consumed before the arrival of next frame. + // Can this copy be eliminated? + if len(f.Data()) > 0 { + data := make([]byte, len(f.Data())) + copy(data, f.Data()) + s.write(recvMsg{data: data}) + } + } + // The server has closed the stream without sending trailers. Record that + // the read direction is closed, and set the status appropriately. + if f.FrameHeader.Flags.Has(http2.FlagDataEndStream) { + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + return + } + s.state = streamDone + s.statusCode = codes.Internal + s.statusDesc = "server closed the stream without sending trailers" + close(s.done) + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) + } +} + +func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) { + s, ok := t.getStream(f) + if !ok { + return + } + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + return + } + s.state = streamDone + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.statusCode, ok = http2ErrConvTab[http2.ErrCode(f.ErrCode)] + if !ok { + grpclog.Println("transport: http2Client.handleRSTStream found no mapped gRPC status for the received http2 error ", f.ErrCode) + s.statusCode = codes.Unknown + } + s.statusDesc = fmt.Sprintf("stream terminated by RST_STREAM with error code: %d", f.ErrCode) + close(s.done) + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) +} + +func (t *http2Client) handleSettings(f *http2.SettingsFrame) { + if f.IsAck() { + return + } + var ss []http2.Setting + f.ForeachSetting(func(s http2.Setting) error { + ss = append(ss, s) + return nil + }) + // The settings will be applied once the ack is sent. + t.controlBuf.put(&settings{ack: true, ss: ss}) +} + +func (t *http2Client) handlePing(f *http2.PingFrame) { + if f.IsAck() { // Do nothing. + return + } + pingAck := &ping{ack: true} + copy(pingAck.data[:], f.Data[:]) + t.controlBuf.put(pingAck) +} + +func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { + t.mu.Lock() + if t.state == reachable || t.state == draining { + if f.LastStreamID > 0 && f.LastStreamID%2 != 1 { + t.mu.Unlock() + t.notifyError(connectionErrorf(true, nil, "received illegal http2 GOAWAY frame: stream ID %d is even", f.LastStreamID)) + return + } + select { + case <-t.goAway: + id := t.goAwayID + // t.goAway has been closed (i.e.,multiple GoAways). + if id < f.LastStreamID { + t.mu.Unlock() + t.notifyError(connectionErrorf(true, nil, "received illegal http2 GOAWAY frame: previously recv GOAWAY frame with LastStramID %d, currently recv %d", id, f.LastStreamID)) + return + } + t.prevGoAwayID = id + t.goAwayID = f.LastStreamID + t.mu.Unlock() + return + default: + } + t.goAwayID = f.LastStreamID + close(t.goAway) + } + t.mu.Unlock() +} + +func (t *http2Client) handleWindowUpdate(f *http2.WindowUpdateFrame) { + id := f.Header().StreamID + incr := f.Increment + if id == 0 { + t.sendQuotaPool.add(int(incr)) + return + } + if s, ok := t.getStream(f); ok { + s.sendQuotaPool.add(int(incr)) + } +} + +// operateHeaders takes action on the decoded headers. +func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { + s, ok := t.getStream(frame) + if !ok { + return + } + var state decodeState + for _, hf := range frame.Fields { + state.processHeaderField(hf) + } + if state.err != nil { + s.mu.Lock() + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.mu.Unlock() + s.write(recvMsg{err: state.err}) + // Something wrong. Stops reading even when there is remaining. + return + } + + endStream := frame.StreamEnded() + var isHeader bool + defer func() { + if t.statsHandler != nil { + if isHeader { + inHeader := &stats.InHeader{ + Client: true, + WireLength: int(frame.Header().Length), + } + t.statsHandler.HandleRPC(s.clientStatsCtx, inHeader) + } else { + inTrailer := &stats.InTrailer{ + Client: true, + WireLength: int(frame.Header().Length), + } + t.statsHandler.HandleRPC(s.clientStatsCtx, inTrailer) + } + } + }() + + s.mu.Lock() + if !endStream { + s.recvCompress = state.encoding + } + if !s.headerDone { + if !endStream && len(state.mdata) > 0 { + s.header = state.mdata + } + close(s.headerChan) + s.headerDone = true + isHeader = true + } + if !endStream || s.state == streamDone { + s.mu.Unlock() + return + } + + if len(state.mdata) > 0 { + s.trailer = state.mdata + } + s.statusCode = state.statusCode + s.statusDesc = state.statusDesc + close(s.done) + s.state = streamDone + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) +} + +func handleMalformedHTTP2(s *Stream, err error) { + s.mu.Lock() + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.mu.Unlock() + s.write(recvMsg{err: err}) +} + +// reader runs as a separate goroutine in charge of reading data from network +// connection. +// +// TODO(zhaoq): currently one reader per transport. Investigate whether this is +// optimal. +// TODO(zhaoq): Check the validity of the incoming frame sequence. +func (t *http2Client) reader() { + // Check the validity of server preface. + frame, err := t.framer.readFrame() + if err != nil { + t.notifyError(err) + return + } + atomic.CompareAndSwapUint32(&t.activity, 0, 1) + sf, ok := frame.(*http2.SettingsFrame) + if !ok { + t.notifyError(err) + return + } + t.handleSettings(sf) + + // loop to keep reading incoming messages on this transport. + for { + frame, err := t.framer.readFrame() + atomic.CompareAndSwapUint32(&t.activity, 0, 1) + if err != nil { + // Abort an active stream if the http2.Framer returns a + // http2.StreamError. This can happen only if the server's response + // is malformed http2. + if se, ok := err.(http2.StreamError); ok { + t.mu.Lock() + s := t.activeStreams[se.StreamID] + t.mu.Unlock() + if s != nil { + // use error detail to provide better err message + handleMalformedHTTP2(s, streamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.errorDetail())) + } + continue + } else { + // Transport error. + t.notifyError(err) + return + } + } + switch frame := frame.(type) { + case *http2.MetaHeadersFrame: + t.operateHeaders(frame) + case *http2.DataFrame: + t.handleData(frame) + case *http2.RSTStreamFrame: + t.handleRSTStream(frame) + case *http2.SettingsFrame: + t.handleSettings(frame) + case *http2.PingFrame: + t.handlePing(frame) + case *http2.GoAwayFrame: + t.handleGoAway(frame) + case *http2.WindowUpdateFrame: + t.handleWindowUpdate(frame) + default: + grpclog.Printf("transport: http2Client.reader got unhandled frame type %v.", frame) + } + } +} + +func (t *http2Client) applySettings(ss []http2.Setting) { + for _, s := range ss { + switch s.ID { + case http2.SettingMaxConcurrentStreams: + // TODO(zhaoq): This is a hack to avoid significant refactoring of the + // code to deal with the unrealistic int32 overflow. Probably will try + // to find a better way to handle this later. + if s.Val > math.MaxInt32 { + s.Val = math.MaxInt32 + } + t.mu.Lock() + ms := t.maxStreams + t.maxStreams = int(s.Val) + t.mu.Unlock() + t.streamsQuota.add(int(s.Val) - ms) + case http2.SettingInitialWindowSize: + t.mu.Lock() + for _, stream := range t.activeStreams { + // Adjust the sending quota for each stream. + stream.sendQuotaPool.add(int(s.Val - t.streamSendQuota)) + } + t.streamSendQuota = s.Val + t.mu.Unlock() + } + } +} + +// controller running in a separate goroutine takes charge of sending control +// frames (e.g., window update, reset stream, setting, etc.) to the server. +func (t *http2Client) controller() { + for { + select { + case i := <-t.controlBuf.get(): + t.controlBuf.load() + select { + case <-t.writableChan: + switch i := i.(type) { + case *windowUpdate: + t.framer.writeWindowUpdate(true, i.streamID, i.increment) + case *settings: + if i.ack { + t.framer.writeSettingsAck(true) + t.applySettings(i.ss) + } else { + t.framer.writeSettings(true, i.ss...) + } + case *resetStream: + // If the server needs to be to intimated about stream closing, + // then we need to make sure the RST_STREAM frame is written to + // the wire before the headers of the next stream waiting on + // streamQuota. We ensure this by adding to the streamsQuota pool + // only after having acquired the writableChan to send RST_STREAM. + t.streamsQuota.add(1) + t.framer.writeRSTStream(true, i.streamID, i.code) + case *flushIO: + t.framer.flushWrite() + case *ping: + t.framer.writePing(true, i.ack, i.data) + default: + grpclog.Printf("transport: http2Client.controller got unexpected item type %v\n", i) + } + t.writableChan <- 0 + continue + case <-t.shutdownChan: + return + } + case <-t.shutdownChan: + return + } + } +} + +// keepalive running in a separate goroutune makes sure the connection is alive by sending pings. +func (t *http2Client) keepalive() { + p := &ping{data: [8]byte{}} + timer := time.NewTimer(t.kp.Time) + for { + select { + case <-timer.C: + if atomic.CompareAndSwapUint32(&t.activity, 1, 0) { + timer.Reset(t.kp.Time) + continue + } + // Check if keepalive should go dormant. + t.mu.Lock() + if len(t.activeStreams) < 1 && !t.kp.PermitWithoutStream { + // Make awakenKeepalive writable. + <-t.awakenKeepalive + t.mu.Unlock() + select { + case <-t.awakenKeepalive: + // If the control gets here a ping has been sent + // need to reset the timer with keepalive.Timeout. + case <-t.shutdownChan: + return + } + } else { + t.mu.Unlock() + // Send ping. + t.controlBuf.put(p) + } + + // By the time control gets here a ping has been sent one way or the other. + timer.Reset(t.kp.Timeout) + select { + case <-timer.C: + if atomic.CompareAndSwapUint32(&t.activity, 1, 0) { + timer.Reset(t.kp.Time) + continue + } + t.Close() + return + case <-t.shutdownChan: + if !timer.Stop() { + <-timer.C + } + return + } + case <-t.shutdownChan: + if !timer.Stop() { + <-timer.C + } + return + } + } +} + +func (t *http2Client) Error() <-chan struct{} { + return t.errorChan +} + +func (t *http2Client) GoAway() <-chan struct{} { + return t.goAway +} + +func (t *http2Client) notifyError(err error) { + t.mu.Lock() + // make sure t.errorChan is closed only once. + if t.state == draining { + t.mu.Unlock() + t.Close() + return + } + if t.state == reachable { + t.state = unreachable + close(t.errorChan) + grpclog.Printf("transport: http2Client.notifyError got notified that the client transport was broken %v.", err) + } + t.mu.Unlock() +} diff --git a/vendor/google.golang.org/grpc/transport/http2_server.go b/vendor/google.golang.org/grpc/transport/http2_server.go new file mode 100644 index 0000000..f5c590f --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/http2_server.go @@ -0,0 +1,847 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "bytes" + "errors" + "io" + "math" + "net" + "strconv" + "sync" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/stats" + "google.golang.org/grpc/tap" +) + +// ErrIllegalHeaderWrite indicates that setting header is illegal because of +// the stream's state. +var ErrIllegalHeaderWrite = errors.New("transport: the stream is done or WriteHeader was already called") + +// http2Server implements the ServerTransport interface with HTTP2. +type http2Server struct { + ctx context.Context + conn net.Conn + remoteAddr net.Addr + localAddr net.Addr + maxStreamID uint32 // max stream ID ever seen + authInfo credentials.AuthInfo // auth info about the connection + inTapHandle tap.ServerInHandle + // writableChan synchronizes write access to the transport. + // A writer acquires the write lock by receiving a value on writableChan + // and releases it by sending on writableChan. + writableChan chan int + // shutdownChan is closed when Close is called. + // Blocking operations should select on shutdownChan to avoid + // blocking forever after Close. + shutdownChan chan struct{} + framer *framer + hBuf *bytes.Buffer // the buffer for HPACK encoding + hEnc *hpack.Encoder // HPACK encoder + + // The max number of concurrent streams. + maxStreams uint32 + // controlBuf delivers all the control related tasks (e.g., window + // updates, reset streams, and various settings) to the controller. + controlBuf *recvBuffer + fc *inFlow + // sendQuotaPool provides flow control to outbound message. + sendQuotaPool *quotaPool + + stats stats.Handler + + mu sync.Mutex // guard the following + state transportState + activeStreams map[uint32]*Stream + // the per-stream outbound flow control window size set by the peer. + streamSendQuota uint32 +} + +// newHTTP2Server constructs a ServerTransport based on HTTP2. ConnectionError is +// returned if something goes wrong. +func newHTTP2Server(conn net.Conn, config *ServerConfig) (_ ServerTransport, err error) { + framer := newFramer(conn) + // Send initial settings as connection preface to client. + var settings []http2.Setting + // TODO(zhaoq): Have a better way to signal "no limit" because 0 is + // permitted in the HTTP2 spec. + maxStreams := config.MaxStreams + if maxStreams == 0 { + maxStreams = math.MaxUint32 + } else { + settings = append(settings, http2.Setting{ + ID: http2.SettingMaxConcurrentStreams, + Val: maxStreams, + }) + } + if initialWindowSize != defaultWindowSize { + settings = append(settings, http2.Setting{ + ID: http2.SettingInitialWindowSize, + Val: uint32(initialWindowSize)}) + } + if err := framer.writeSettings(true, settings...); err != nil { + return nil, connectionErrorf(true, err, "transport: %v", err) + } + // Adjust the connection flow control window if needed. + if delta := uint32(initialConnWindowSize - defaultWindowSize); delta > 0 { + if err := framer.writeWindowUpdate(true, 0, delta); err != nil { + return nil, connectionErrorf(true, err, "transport: %v", err) + } + } + var buf bytes.Buffer + t := &http2Server{ + ctx: context.Background(), + conn: conn, + remoteAddr: conn.RemoteAddr(), + localAddr: conn.LocalAddr(), + authInfo: config.AuthInfo, + framer: framer, + hBuf: &buf, + hEnc: hpack.NewEncoder(&buf), + maxStreams: maxStreams, + inTapHandle: config.InTapHandle, + controlBuf: newRecvBuffer(), + fc: &inFlow{limit: initialConnWindowSize}, + sendQuotaPool: newQuotaPool(defaultWindowSize), + state: reachable, + writableChan: make(chan int, 1), + shutdownChan: make(chan struct{}), + activeStreams: make(map[uint32]*Stream), + streamSendQuota: defaultWindowSize, + stats: config.StatsHandler, + } + if t.stats != nil { + t.ctx = t.stats.TagConn(t.ctx, &stats.ConnTagInfo{ + RemoteAddr: t.remoteAddr, + LocalAddr: t.localAddr, + }) + connBegin := &stats.ConnBegin{} + t.stats.HandleConn(t.ctx, connBegin) + } + go t.controller() + t.writableChan <- 0 + return t, nil +} + +// operateHeader takes action on the decoded headers. +func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func(*Stream), traceCtx func(context.Context, string) context.Context) (close bool) { + buf := newRecvBuffer() + s := &Stream{ + id: frame.Header().StreamID, + st: t, + buf: buf, + fc: &inFlow{limit: initialWindowSize}, + } + + var state decodeState + for _, hf := range frame.Fields { + state.processHeaderField(hf) + } + if err := state.err; err != nil { + if se, ok := err.(StreamError); ok { + t.controlBuf.put(&resetStream{s.id, statusCodeConvTab[se.Code]}) + } + return + } + + if frame.StreamEnded() { + // s is just created by the caller. No lock needed. + s.state = streamReadDone + } + s.recvCompress = state.encoding + if state.timeoutSet { + s.ctx, s.cancel = context.WithTimeout(t.ctx, state.timeout) + } else { + s.ctx, s.cancel = context.WithCancel(t.ctx) + } + pr := &peer.Peer{ + Addr: t.remoteAddr, + } + // Attach Auth info if there is any. + if t.authInfo != nil { + pr.AuthInfo = t.authInfo + } + s.ctx = peer.NewContext(s.ctx, pr) + // Cache the current stream to the context so that the server application + // can find out. Required when the server wants to send some metadata + // back to the client (unary call only). + s.ctx = newContextWithStream(s.ctx, s) + // Attach the received metadata to the context. + if len(state.mdata) > 0 { + s.ctx = metadata.NewContext(s.ctx, state.mdata) + } + + s.dec = &recvBufferReader{ + ctx: s.ctx, + recv: s.buf, + } + s.recvCompress = state.encoding + s.method = state.method + if t.inTapHandle != nil { + var err error + info := &tap.Info{ + FullMethodName: state.method, + } + s.ctx, err = t.inTapHandle(s.ctx, info) + if err != nil { + // TODO: Log the real error. + t.controlBuf.put(&resetStream{s.id, http2.ErrCodeRefusedStream}) + return + } + } + t.mu.Lock() + if t.state != reachable { + t.mu.Unlock() + return + } + if uint32(len(t.activeStreams)) >= t.maxStreams { + t.mu.Unlock() + t.controlBuf.put(&resetStream{s.id, http2.ErrCodeRefusedStream}) + return + } + if s.id%2 != 1 || s.id <= t.maxStreamID { + t.mu.Unlock() + // illegal gRPC stream id. + grpclog.Println("transport: http2Server.HandleStreams received an illegal stream id: ", s.id) + return true + } + t.maxStreamID = s.id + s.sendQuotaPool = newQuotaPool(int(t.streamSendQuota)) + t.activeStreams[s.id] = s + t.mu.Unlock() + s.windowHandler = func(n int) { + t.updateWindow(s, uint32(n)) + } + s.ctx = traceCtx(s.ctx, s.method) + if t.stats != nil { + s.ctx = t.stats.TagRPC(s.ctx, &stats.RPCTagInfo{FullMethodName: s.method}) + inHeader := &stats.InHeader{ + FullMethod: s.method, + RemoteAddr: t.remoteAddr, + LocalAddr: t.localAddr, + Compression: s.recvCompress, + WireLength: int(frame.Header().Length), + } + t.stats.HandleRPC(s.ctx, inHeader) + } + handle(s) + return +} + +// HandleStreams receives incoming streams using the given handler. This is +// typically run in a separate goroutine. +// traceCtx attaches trace to ctx and returns the new context. +func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context.Context, string) context.Context) { + // Check the validity of client preface. + preface := make([]byte, len(clientPreface)) + if _, err := io.ReadFull(t.conn, preface); err != nil { + grpclog.Printf("transport: http2Server.HandleStreams failed to receive the preface from client: %v", err) + t.Close() + return + } + if !bytes.Equal(preface, clientPreface) { + grpclog.Printf("transport: http2Server.HandleStreams received bogus greeting from client: %q", preface) + t.Close() + return + } + + frame, err := t.framer.readFrame() + if err == io.EOF || err == io.ErrUnexpectedEOF { + t.Close() + return + } + if err != nil { + grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err) + t.Close() + return + } + sf, ok := frame.(*http2.SettingsFrame) + if !ok { + grpclog.Printf("transport: http2Server.HandleStreams saw invalid preface type %T from client", frame) + t.Close() + return + } + t.handleSettings(sf) + + for { + frame, err := t.framer.readFrame() + if err != nil { + if se, ok := err.(http2.StreamError); ok { + t.mu.Lock() + s := t.activeStreams[se.StreamID] + t.mu.Unlock() + if s != nil { + t.closeStream(s) + } + t.controlBuf.put(&resetStream{se.StreamID, se.Code}) + continue + } + if err == io.EOF || err == io.ErrUnexpectedEOF { + t.Close() + return + } + grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err) + t.Close() + return + } + switch frame := frame.(type) { + case *http2.MetaHeadersFrame: + if t.operateHeaders(frame, handle, traceCtx) { + t.Close() + break + } + case *http2.DataFrame: + t.handleData(frame) + case *http2.RSTStreamFrame: + t.handleRSTStream(frame) + case *http2.SettingsFrame: + t.handleSettings(frame) + case *http2.PingFrame: + t.handlePing(frame) + case *http2.WindowUpdateFrame: + t.handleWindowUpdate(frame) + case *http2.GoAwayFrame: + // TODO: Handle GoAway from the client appropriately. + default: + grpclog.Printf("transport: http2Server.HandleStreams found unhandled frame type %v.", frame) + } + } +} + +func (t *http2Server) getStream(f http2.Frame) (*Stream, bool) { + t.mu.Lock() + defer t.mu.Unlock() + if t.activeStreams == nil { + // The transport is closing. + return nil, false + } + s, ok := t.activeStreams[f.Header().StreamID] + if !ok { + // The stream is already done. + return nil, false + } + return s, true +} + +// updateWindow adjusts the inbound quota for the stream and the transport. +// Window updates will deliver to the controller for sending when +// the cumulative quota exceeds the corresponding threshold. +func (t *http2Server) updateWindow(s *Stream, n uint32) { + s.mu.Lock() + defer s.mu.Unlock() + if s.state == streamDone { + return + } + if w := t.fc.onRead(n); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + if w := s.fc.onRead(n); w > 0 { + t.controlBuf.put(&windowUpdate{s.id, w}) + } +} + +func (t *http2Server) handleData(f *http2.DataFrame) { + size := f.Header().Length + if err := t.fc.onData(uint32(size)); err != nil { + grpclog.Printf("transport: http2Server %v", err) + t.Close() + return + } + // Select the right stream to dispatch. + s, ok := t.getStream(f) + if !ok { + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + return + } + if size > 0 { + if f.Header().Flags.Has(http2.FlagDataPadded) { + if w := t.fc.onRead(uint32(size) - uint32(len(f.Data()))); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + } + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + // The stream has been closed. Release the corresponding quota. + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + return + } + if err := s.fc.onData(uint32(size)); err != nil { + s.mu.Unlock() + t.closeStream(s) + t.controlBuf.put(&resetStream{s.id, http2.ErrCodeFlowControl}) + return + } + if f.Header().Flags.Has(http2.FlagDataPadded) { + if w := s.fc.onRead(uint32(size) - uint32(len(f.Data()))); w > 0 { + t.controlBuf.put(&windowUpdate{s.id, w}) + } + } + s.mu.Unlock() + // TODO(bradfitz, zhaoq): A copy is required here because there is no + // guarantee f.Data() is consumed before the arrival of next frame. + // Can this copy be eliminated? + if len(f.Data()) > 0 { + data := make([]byte, len(f.Data())) + copy(data, f.Data()) + s.write(recvMsg{data: data}) + } + } + if f.Header().Flags.Has(http2.FlagDataEndStream) { + // Received the end of stream from the client. + s.mu.Lock() + if s.state != streamDone { + s.state = streamReadDone + } + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) + } +} + +func (t *http2Server) handleRSTStream(f *http2.RSTStreamFrame) { + s, ok := t.getStream(f) + if !ok { + return + } + t.closeStream(s) +} + +func (t *http2Server) handleSettings(f *http2.SettingsFrame) { + if f.IsAck() { + return + } + var ss []http2.Setting + f.ForeachSetting(func(s http2.Setting) error { + ss = append(ss, s) + return nil + }) + // The settings will be applied once the ack is sent. + t.controlBuf.put(&settings{ack: true, ss: ss}) +} + +func (t *http2Server) handlePing(f *http2.PingFrame) { + if f.IsAck() { // Do nothing. + return + } + pingAck := &ping{ack: true} + copy(pingAck.data[:], f.Data[:]) + t.controlBuf.put(pingAck) +} + +func (t *http2Server) handleWindowUpdate(f *http2.WindowUpdateFrame) { + id := f.Header().StreamID + incr := f.Increment + if id == 0 { + t.sendQuotaPool.add(int(incr)) + return + } + if s, ok := t.getStream(f); ok { + s.sendQuotaPool.add(int(incr)) + } +} + +func (t *http2Server) writeHeaders(s *Stream, b *bytes.Buffer, endStream bool) error { + first := true + endHeaders := false + var err error + // Sends the headers in a single batch. + for !endHeaders { + size := t.hBuf.Len() + if size > http2MaxFrameLen { + size = http2MaxFrameLen + } else { + endHeaders = true + } + if first { + p := http2.HeadersFrameParam{ + StreamID: s.id, + BlockFragment: b.Next(size), + EndStream: endStream, + EndHeaders: endHeaders, + } + err = t.framer.writeHeaders(endHeaders, p) + first = false + } else { + err = t.framer.writeContinuation(endHeaders, s.id, endHeaders, b.Next(size)) + } + if err != nil { + t.Close() + return connectionErrorf(true, err, "transport: %v", err) + } + } + return nil +} + +// WriteHeader sends the header metedata md back to the client. +func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { + s.mu.Lock() + if s.headerOk || s.state == streamDone { + s.mu.Unlock() + return ErrIllegalHeaderWrite + } + s.headerOk = true + if md.Len() > 0 { + if s.header.Len() > 0 { + s.header = metadata.Join(s.header, md) + } else { + s.header = md + } + } + md = s.header + s.mu.Unlock() + if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + return err + } + t.hBuf.Reset() + t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + if s.sendCompress != "" { + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-encoding", Value: s.sendCompress}) + } + for k, v := range md { + if isReservedHeader(k) { + // Clients don't tolerate reading restricted headers after some non restricted ones were sent. + continue + } + for _, entry := range v { + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: entry}) + } + } + bufLen := t.hBuf.Len() + if err := t.writeHeaders(s, t.hBuf, false); err != nil { + return err + } + if t.stats != nil { + outHeader := &stats.OutHeader{ + WireLength: bufLen, + } + t.stats.HandleRPC(s.Context(), outHeader) + } + t.writableChan <- 0 + return nil +} + +// WriteStatus sends stream status to the client and terminates the stream. +// There is no further I/O operations being able to perform on this stream. +// TODO(zhaoq): Now it indicates the end of entire stream. Revisit if early +// OK is adopted. +func (t *http2Server) WriteStatus(s *Stream, statusCode codes.Code, statusDesc string) error { + var headersSent, hasHeader bool + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + return nil + } + if s.headerOk { + headersSent = true + } + if s.header.Len() > 0 { + hasHeader = true + } + s.mu.Unlock() + + if !headersSent && hasHeader { + t.WriteHeader(s, nil) + headersSent = true + } + + if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + return err + } + t.hBuf.Reset() + if !headersSent { + t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + } + t.hEnc.WriteField( + hpack.HeaderField{ + Name: "grpc-status", + Value: strconv.Itoa(int(statusCode)), + }) + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(statusDesc)}) + // Attach the trailer metadata. + for k, v := range s.trailer { + // Clients don't tolerate reading restricted headers after some non restricted ones were sent. + if isReservedHeader(k) { + continue + } + for _, entry := range v { + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: entry}) + } + } + bufLen := t.hBuf.Len() + if err := t.writeHeaders(s, t.hBuf, true); err != nil { + t.Close() + return err + } + if t.stats != nil { + outTrailer := &stats.OutTrailer{ + WireLength: bufLen, + } + t.stats.HandleRPC(s.Context(), outTrailer) + } + t.closeStream(s) + t.writableChan <- 0 + return nil +} + +// Write converts the data into HTTP2 data frame and sends it out. Non-nil error +// is returns if it fails (e.g., framing error, transport error). +func (t *http2Server) Write(s *Stream, data []byte, opts *Options) error { + // TODO(zhaoq): Support multi-writers for a single stream. + var writeHeaderFrame bool + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + return streamErrorf(codes.Unknown, "the stream has been done") + } + if !s.headerOk { + writeHeaderFrame = true + } + s.mu.Unlock() + if writeHeaderFrame { + t.WriteHeader(s, nil) + } + r := bytes.NewBuffer(data) + for { + if r.Len() == 0 { + return nil + } + size := http2MaxFrameLen + // Wait until the stream has some quota to send the data. + sq, err := wait(s.ctx, nil, nil, t.shutdownChan, s.sendQuotaPool.acquire()) + if err != nil { + return err + } + // Wait until the transport has some quota to send the data. + tq, err := wait(s.ctx, nil, nil, t.shutdownChan, t.sendQuotaPool.acquire()) + if err != nil { + return err + } + if sq < size { + size = sq + } + if tq < size { + size = tq + } + p := r.Next(size) + ps := len(p) + if ps < sq { + // Overbooked stream quota. Return it back. + s.sendQuotaPool.add(sq - ps) + } + if ps < tq { + // Overbooked transport quota. Return it back. + t.sendQuotaPool.add(tq - ps) + } + t.framer.adjustNumWriters(1) + // Got some quota. Try to acquire writing privilege on the + // transport. + if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + if _, ok := err.(StreamError); ok { + // Return the connection quota back. + t.sendQuotaPool.add(ps) + } + if t.framer.adjustNumWriters(-1) == 0 { + // This writer is the last one in this batch and has the + // responsibility to flush the buffered frames. It queues + // a flush request to controlBuf instead of flushing directly + // in order to avoid the race with other writing or flushing. + t.controlBuf.put(&flushIO{}) + } + return err + } + select { + case <-s.ctx.Done(): + t.sendQuotaPool.add(ps) + if t.framer.adjustNumWriters(-1) == 0 { + t.controlBuf.put(&flushIO{}) + } + t.writableChan <- 0 + return ContextErr(s.ctx.Err()) + default: + } + var forceFlush bool + if r.Len() == 0 && t.framer.adjustNumWriters(0) == 1 && !opts.Last { + forceFlush = true + } + if err := t.framer.writeData(forceFlush, s.id, false, p); err != nil { + t.Close() + return connectionErrorf(true, err, "transport: %v", err) + } + if t.framer.adjustNumWriters(-1) == 0 { + t.framer.flushWrite() + } + t.writableChan <- 0 + } + +} + +func (t *http2Server) applySettings(ss []http2.Setting) { + for _, s := range ss { + if s.ID == http2.SettingInitialWindowSize { + t.mu.Lock() + defer t.mu.Unlock() + for _, stream := range t.activeStreams { + stream.sendQuotaPool.add(int(s.Val - t.streamSendQuota)) + } + t.streamSendQuota = s.Val + } + + } +} + +// controller running in a separate goroutine takes charge of sending control +// frames (e.g., window update, reset stream, setting, etc.) to the server. +func (t *http2Server) controller() { + for { + select { + case i := <-t.controlBuf.get(): + t.controlBuf.load() + select { + case <-t.writableChan: + switch i := i.(type) { + case *windowUpdate: + t.framer.writeWindowUpdate(true, i.streamID, i.increment) + case *settings: + if i.ack { + t.framer.writeSettingsAck(true) + t.applySettings(i.ss) + } else { + t.framer.writeSettings(true, i.ss...) + } + case *resetStream: + t.framer.writeRSTStream(true, i.streamID, i.code) + case *goAway: + t.mu.Lock() + if t.state == closing { + t.mu.Unlock() + // The transport is closing. + return + } + sid := t.maxStreamID + t.state = draining + t.mu.Unlock() + t.framer.writeGoAway(true, sid, http2.ErrCodeNo, nil) + case *flushIO: + t.framer.flushWrite() + case *ping: + t.framer.writePing(true, i.ack, i.data) + default: + grpclog.Printf("transport: http2Server.controller got unexpected item type %v\n", i) + } + t.writableChan <- 0 + continue + case <-t.shutdownChan: + return + } + case <-t.shutdownChan: + return + } + } +} + +// Close starts shutting down the http2Server transport. +// TODO(zhaoq): Now the destruction is not blocked on any pending streams. This +// could cause some resource issue. Revisit this later. +func (t *http2Server) Close() (err error) { + t.mu.Lock() + if t.state == closing { + t.mu.Unlock() + return errors.New("transport: Close() was already called") + } + t.state = closing + streams := t.activeStreams + t.activeStreams = nil + t.mu.Unlock() + close(t.shutdownChan) + err = t.conn.Close() + // Cancel all active streams. + for _, s := range streams { + s.cancel() + } + if t.stats != nil { + connEnd := &stats.ConnEnd{} + t.stats.HandleConn(t.ctx, connEnd) + } + return +} + +// closeStream clears the footprint of a stream when the stream is not needed +// any more. +func (t *http2Server) closeStream(s *Stream) { + t.mu.Lock() + delete(t.activeStreams, s.id) + if t.state == draining && len(t.activeStreams) == 0 { + defer t.Close() + } + t.mu.Unlock() + // In case stream sending and receiving are invoked in separate + // goroutines (e.g., bi-directional streaming), cancel needs to be + // called to interrupt the potential blocking on other goroutines. + s.cancel() + s.mu.Lock() + if q := s.fc.resetPendingData(); q > 0 { + if w := t.fc.onRead(q); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + } + if s.state == streamDone { + s.mu.Unlock() + return + } + s.state = streamDone + s.mu.Unlock() +} + +func (t *http2Server) RemoteAddr() net.Addr { + return t.remoteAddr +} + +func (t *http2Server) Drain() { + t.controlBuf.put(&goAway{}) +} diff --git a/vendor/google.golang.org/grpc/transport/http_util.go b/vendor/google.golang.org/grpc/transport/http_util.go new file mode 100644 index 0000000..a3c68d4 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/http_util.go @@ -0,0 +1,513 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "bufio" + "bytes" + "fmt" + "io" + "net" + "strconv" + "strings" + "sync/atomic" + "time" + + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" +) + +const ( + // The primary user agent + primaryUA = "grpc-go/1.0" + // http2MaxFrameLen specifies the max length of a HTTP2 frame. + http2MaxFrameLen = 16384 // 16KB frame + // http://http2.github.io/http2-spec/#SettingValues + http2InitHeaderTableSize = 4096 + // http2IOBufSize specifies the buffer size for sending frames. + http2IOBufSize = 32 * 1024 +) + +var ( + clientPreface = []byte(http2.ClientPreface) + http2ErrConvTab = map[http2.ErrCode]codes.Code{ + http2.ErrCodeNo: codes.Internal, + http2.ErrCodeProtocol: codes.Internal, + http2.ErrCodeInternal: codes.Internal, + http2.ErrCodeFlowControl: codes.ResourceExhausted, + http2.ErrCodeSettingsTimeout: codes.Internal, + http2.ErrCodeStreamClosed: codes.Internal, + http2.ErrCodeFrameSize: codes.Internal, + http2.ErrCodeRefusedStream: codes.Unavailable, + http2.ErrCodeCancel: codes.Canceled, + http2.ErrCodeCompression: codes.Internal, + http2.ErrCodeConnect: codes.Internal, + http2.ErrCodeEnhanceYourCalm: codes.ResourceExhausted, + http2.ErrCodeInadequateSecurity: codes.PermissionDenied, + http2.ErrCodeHTTP11Required: codes.FailedPrecondition, + } + statusCodeConvTab = map[codes.Code]http2.ErrCode{ + codes.Internal: http2.ErrCodeInternal, + codes.Canceled: http2.ErrCodeCancel, + codes.Unavailable: http2.ErrCodeRefusedStream, + codes.ResourceExhausted: http2.ErrCodeEnhanceYourCalm, + codes.PermissionDenied: http2.ErrCodeInadequateSecurity, + } +) + +// Records the states during HPACK decoding. Must be reset once the +// decoding of the entire headers are finished. +type decodeState struct { + err error // first error encountered decoding + + encoding string + // statusCode caches the stream status received from the trailer + // the server sent. Client side only. + statusCode codes.Code + statusDesc string + // Server side only fields. + timeoutSet bool + timeout time.Duration + method string + // key-value metadata map from the peer. + mdata map[string][]string +} + +// isReservedHeader checks whether hdr belongs to HTTP2 headers +// reserved by gRPC protocol. Any other headers are classified as the +// user-specified metadata. +func isReservedHeader(hdr string) bool { + if hdr != "" && hdr[0] == ':' { + return true + } + switch hdr { + case "content-type", + "grpc-message-type", + "grpc-encoding", + "grpc-message", + "grpc-status", + "grpc-timeout", + "te": + return true + default: + return false + } +} + +// isWhitelistedPseudoHeader checks whether hdr belongs to HTTP2 pseudoheaders +// that should be propagated into metadata visible to users. +func isWhitelistedPseudoHeader(hdr string) bool { + switch hdr { + case ":authority": + return true + default: + return false + } +} + +func (d *decodeState) setErr(err error) { + if d.err == nil { + d.err = err + } +} + +func validContentType(t string) bool { + e := "application/grpc" + if !strings.HasPrefix(t, e) { + return false + } + // Support variations on the content-type + // (e.g. "application/grpc+blah", "application/grpc;blah"). + if len(t) > len(e) && t[len(e)] != '+' && t[len(e)] != ';' { + return false + } + return true +} + +func (d *decodeState) processHeaderField(f hpack.HeaderField) { + switch f.Name { + case "content-type": + if !validContentType(f.Value) { + d.setErr(streamErrorf(codes.FailedPrecondition, "transport: received the unexpected content-type %q", f.Value)) + return + } + case "grpc-encoding": + d.encoding = f.Value + case "grpc-status": + code, err := strconv.Atoi(f.Value) + if err != nil { + d.setErr(streamErrorf(codes.Internal, "transport: malformed grpc-status: %v", err)) + return + } + d.statusCode = codes.Code(code) + case "grpc-message": + d.statusDesc = decodeGrpcMessage(f.Value) + case "grpc-timeout": + d.timeoutSet = true + var err error + d.timeout, err = decodeTimeout(f.Value) + if err != nil { + d.setErr(streamErrorf(codes.Internal, "transport: malformed time-out: %v", err)) + return + } + case ":path": + d.method = f.Value + default: + if !isReservedHeader(f.Name) || isWhitelistedPseudoHeader(f.Name) { + if f.Name == "user-agent" { + i := strings.LastIndex(f.Value, " ") + if i == -1 { + // There is no application user agent string being set. + return + } + // Extract the application user agent string. + f.Value = f.Value[:i] + } + if d.mdata == nil { + d.mdata = make(map[string][]string) + } + k, v, err := metadata.DecodeKeyValue(f.Name, f.Value) + if err != nil { + grpclog.Printf("Failed to decode (%q, %q): %v", f.Name, f.Value, err) + return + } + d.mdata[k] = append(d.mdata[k], v) + } + } +} + +type timeoutUnit uint8 + +const ( + hour timeoutUnit = 'H' + minute timeoutUnit = 'M' + second timeoutUnit = 'S' + millisecond timeoutUnit = 'm' + microsecond timeoutUnit = 'u' + nanosecond timeoutUnit = 'n' +) + +func timeoutUnitToDuration(u timeoutUnit) (d time.Duration, ok bool) { + switch u { + case hour: + return time.Hour, true + case minute: + return time.Minute, true + case second: + return time.Second, true + case millisecond: + return time.Millisecond, true + case microsecond: + return time.Microsecond, true + case nanosecond: + return time.Nanosecond, true + default: + } + return +} + +const maxTimeoutValue int64 = 100000000 - 1 + +// div does integer division and round-up the result. Note that this is +// equivalent to (d+r-1)/r but has less chance to overflow. +func div(d, r time.Duration) int64 { + if m := d % r; m > 0 { + return int64(d/r + 1) + } + return int64(d / r) +} + +// TODO(zhaoq): It is the simplistic and not bandwidth efficient. Improve it. +func encodeTimeout(t time.Duration) string { + if t <= 0 { + return "0n" + } + if d := div(t, time.Nanosecond); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "n" + } + if d := div(t, time.Microsecond); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "u" + } + if d := div(t, time.Millisecond); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "m" + } + if d := div(t, time.Second); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "S" + } + if d := div(t, time.Minute); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "M" + } + // Note that maxTimeoutValue * time.Hour > MaxInt64. + return strconv.FormatInt(div(t, time.Hour), 10) + "H" +} + +func decodeTimeout(s string) (time.Duration, error) { + size := len(s) + if size < 2 { + return 0, fmt.Errorf("transport: timeout string is too short: %q", s) + } + unit := timeoutUnit(s[size-1]) + d, ok := timeoutUnitToDuration(unit) + if !ok { + return 0, fmt.Errorf("transport: timeout unit is not recognized: %q", s) + } + t, err := strconv.ParseInt(s[:size-1], 10, 64) + if err != nil { + return 0, err + } + return d * time.Duration(t), nil +} + +const ( + spaceByte = ' ' + tildaByte = '~' + percentByte = '%' +) + +// encodeGrpcMessage is used to encode status code in header field +// "grpc-message". +// It checks to see if each individual byte in msg is an +// allowable byte, and then either percent encoding or passing it through. +// When percent encoding, the byte is converted into hexadecimal notation +// with a '%' prepended. +func encodeGrpcMessage(msg string) string { + if msg == "" { + return "" + } + lenMsg := len(msg) + for i := 0; i < lenMsg; i++ { + c := msg[i] + if !(c >= spaceByte && c < tildaByte && c != percentByte) { + return encodeGrpcMessageUnchecked(msg) + } + } + return msg +} + +func encodeGrpcMessageUnchecked(msg string) string { + var buf bytes.Buffer + lenMsg := len(msg) + for i := 0; i < lenMsg; i++ { + c := msg[i] + if c >= spaceByte && c < tildaByte && c != percentByte { + buf.WriteByte(c) + } else { + buf.WriteString(fmt.Sprintf("%%%02X", c)) + } + } + return buf.String() +} + +// decodeGrpcMessage decodes the msg encoded by encodeGrpcMessage. +func decodeGrpcMessage(msg string) string { + if msg == "" { + return "" + } + lenMsg := len(msg) + for i := 0; i < lenMsg; i++ { + if msg[i] == percentByte && i+2 < lenMsg { + return decodeGrpcMessageUnchecked(msg) + } + } + return msg +} + +func decodeGrpcMessageUnchecked(msg string) string { + var buf bytes.Buffer + lenMsg := len(msg) + for i := 0; i < lenMsg; i++ { + c := msg[i] + if c == percentByte && i+2 < lenMsg { + parsed, err := strconv.ParseUint(msg[i+1:i+3], 16, 8) + if err != nil { + buf.WriteByte(c) + } else { + buf.WriteByte(byte(parsed)) + i += 2 + } + } else { + buf.WriteByte(c) + } + } + return buf.String() +} + +type framer struct { + numWriters int32 + reader io.Reader + writer *bufio.Writer + fr *http2.Framer +} + +func newFramer(conn net.Conn) *framer { + f := &framer{ + reader: bufio.NewReaderSize(conn, http2IOBufSize), + writer: bufio.NewWriterSize(conn, http2IOBufSize), + } + f.fr = http2.NewFramer(f.writer, f.reader) + f.fr.ReadMetaHeaders = hpack.NewDecoder(http2InitHeaderTableSize, nil) + return f +} + +func (f *framer) adjustNumWriters(i int32) int32 { + return atomic.AddInt32(&f.numWriters, i) +} + +// The following writeXXX functions can only be called when the caller gets +// unblocked from writableChan channel (i.e., owns the privilege to write). + +func (f *framer) writeContinuation(forceFlush bool, streamID uint32, endHeaders bool, headerBlockFragment []byte) error { + if err := f.fr.WriteContinuation(streamID, endHeaders, headerBlockFragment); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeData(forceFlush bool, streamID uint32, endStream bool, data []byte) error { + if err := f.fr.WriteData(streamID, endStream, data); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeGoAway(forceFlush bool, maxStreamID uint32, code http2.ErrCode, debugData []byte) error { + if err := f.fr.WriteGoAway(maxStreamID, code, debugData); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeHeaders(forceFlush bool, p http2.HeadersFrameParam) error { + if err := f.fr.WriteHeaders(p); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writePing(forceFlush, ack bool, data [8]byte) error { + if err := f.fr.WritePing(ack, data); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writePriority(forceFlush bool, streamID uint32, p http2.PriorityParam) error { + if err := f.fr.WritePriority(streamID, p); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writePushPromise(forceFlush bool, p http2.PushPromiseParam) error { + if err := f.fr.WritePushPromise(p); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeRSTStream(forceFlush bool, streamID uint32, code http2.ErrCode) error { + if err := f.fr.WriteRSTStream(streamID, code); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeSettings(forceFlush bool, settings ...http2.Setting) error { + if err := f.fr.WriteSettings(settings...); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeSettingsAck(forceFlush bool) error { + if err := f.fr.WriteSettingsAck(); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeWindowUpdate(forceFlush bool, streamID, incr uint32) error { + if err := f.fr.WriteWindowUpdate(streamID, incr); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) flushWrite() error { + return f.writer.Flush() +} + +func (f *framer) readFrame() (http2.Frame, error) { + return f.fr.ReadFrame() +} + +func (f *framer) errorDetail() error { + return f.fr.ErrorDetail() +} diff --git a/vendor/google.golang.org/grpc/transport/http_util_test.go b/vendor/google.golang.org/grpc/transport/http_util_test.go new file mode 100644 index 0000000..a5f8a85 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/http_util_test.go @@ -0,0 +1,145 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "fmt" + "testing" + "time" +) + +func TestTimeoutEncode(t *testing.T) { + for _, test := range []struct { + in string + out string + }{ + {"12345678ns", "12345678n"}, + {"123456789ns", "123457u"}, + {"12345678us", "12345678u"}, + {"123456789us", "123457m"}, + {"12345678ms", "12345678m"}, + {"123456789ms", "123457S"}, + {"12345678s", "12345678S"}, + {"123456789s", "2057614M"}, + {"12345678m", "12345678M"}, + {"123456789m", "2057614H"}, + } { + d, err := time.ParseDuration(test.in) + if err != nil { + t.Fatalf("failed to parse duration string %s: %v", test.in, err) + } + out := encodeTimeout(d) + if out != test.out { + t.Fatalf("timeoutEncode(%s) = %s, want %s", test.in, out, test.out) + } + } +} + +func TestTimeoutDecode(t *testing.T) { + for _, test := range []struct { + // input + s string + // output + d time.Duration + err error + }{ + {"1234S", time.Second * 1234, nil}, + {"1234x", 0, fmt.Errorf("transport: timeout unit is not recognized: %q", "1234x")}, + {"1", 0, fmt.Errorf("transport: timeout string is too short: %q", "1")}, + {"", 0, fmt.Errorf("transport: timeout string is too short: %q", "")}, + } { + d, err := decodeTimeout(test.s) + if d != test.d || fmt.Sprint(err) != fmt.Sprint(test.err) { + t.Fatalf("timeoutDecode(%q) = %d, %v, want %d, %v", test.s, int64(d), err, int64(test.d), test.err) + } + } +} + +func TestValidContentType(t *testing.T) { + tests := []struct { + h string + want bool + }{ + {"application/grpc", true}, + {"application/grpc+", true}, + {"application/grpc+blah", true}, + {"application/grpc;", true}, + {"application/grpc;blah", true}, + {"application/grpcd", false}, + {"application/grpd", false}, + {"application/grp", false}, + } + for _, tt := range tests { + got := validContentType(tt.h) + if got != tt.want { + t.Errorf("validContentType(%q) = %v; want %v", tt.h, got, tt.want) + } + } +} + +func TestEncodeGrpcMessage(t *testing.T) { + for _, tt := range []struct { + input string + expected string + }{ + {"", ""}, + {"Hello", "Hello"}, + {"my favorite character is \u0000", "my favorite character is %00"}, + {"my favorite character is %", "my favorite character is %25"}, + } { + actual := encodeGrpcMessage(tt.input) + if tt.expected != actual { + t.Errorf("encodeGrpcMessage(%v) = %v, want %v", tt.input, actual, tt.expected) + } + } +} + +func TestDecodeGrpcMessage(t *testing.T) { + for _, tt := range []struct { + input string + expected string + }{ + {"", ""}, + {"Hello", "Hello"}, + {"H%61o", "Hao"}, + {"H%6", "H%6"}, + {"%G0", "%G0"}, + {"%E7%B3%BB%E7%BB%9F", "系统"}, + } { + actual := decodeGrpcMessage(tt.input) + if tt.expected != actual { + t.Errorf("dncodeGrpcMessage(%v) = %v, want %v", tt.input, actual, tt.expected) + } + } +} diff --git a/vendor/google.golang.org/grpc/transport/pre_go16.go b/vendor/google.golang.org/grpc/transport/pre_go16.go new file mode 100644 index 0000000..33d91c1 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/pre_go16.go @@ -0,0 +1,51 @@ +// +build !go1.6 + +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "net" + "time" + + "golang.org/x/net/context" +) + +// dialContext connects to the address on the named network. +func dialContext(ctx context.Context, network, address string) (net.Conn, error) { + var dialer net.Dialer + if deadline, ok := ctx.Deadline(); ok { + dialer.Timeout = deadline.Sub(time.Now()) + } + return dialer.Dial(network, address) +} diff --git a/vendor/google.golang.org/grpc/transport/testdata/ca.pem b/vendor/google.golang.org/grpc/transport/testdata/ca.pem new file mode 100644 index 0000000..6c8511a --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/testdata/ca.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla +Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 +YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT +BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 ++L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu +g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd +Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau +sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m +oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG +Dfcog5wrJytaQ6UA0wE= +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/transport/testdata/server1.key b/vendor/google.golang.org/grpc/transport/testdata/server1.key new file mode 100644 index 0000000..143a5b8 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/testdata/server1.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD +M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf +3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY +AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm +V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY +tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p +dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q +K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR +81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff +DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd +aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 +ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 +XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe +F98XJ7tIFfJq +-----END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/transport/testdata/server1.pem b/vendor/google.golang.org/grpc/transport/testdata/server1.pem new file mode 100644 index 0000000..f3d43fc --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/testdata/server1.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET +MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx +MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV +BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 +ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco +LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg +zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd +9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy +em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G +CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 +hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh +y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +-----END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/transport/transport.go b/vendor/google.golang.org/grpc/transport/transport.go new file mode 100644 index 0000000..beb0a52 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/transport.go @@ -0,0 +1,620 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* +Package transport defines and implements message oriented communication channel +to complete various transactions (e.g., an RPC). +*/ +package transport // import "google.golang.org/grpc/transport" + +import ( + "bytes" + "fmt" + "io" + "net" + "sync" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/stats" + "google.golang.org/grpc/tap" +) + +// recvMsg represents the received msg from the transport. All transport +// protocol specific info has been removed. +type recvMsg struct { + data []byte + // nil: received some data + // io.EOF: stream is completed. data is nil. + // other non-nil error: transport failure. data is nil. + err error +} + +func (*recvMsg) item() {} + +// All items in an out of a recvBuffer should be the same type. +type item interface { + item() +} + +// recvBuffer is an unbounded channel of item. +type recvBuffer struct { + c chan item + mu sync.Mutex + backlog []item +} + +func newRecvBuffer() *recvBuffer { + b := &recvBuffer{ + c: make(chan item, 1), + } + return b +} + +func (b *recvBuffer) put(r item) { + b.mu.Lock() + defer b.mu.Unlock() + if len(b.backlog) == 0 { + select { + case b.c <- r: + return + default: + } + } + b.backlog = append(b.backlog, r) +} + +func (b *recvBuffer) load() { + b.mu.Lock() + defer b.mu.Unlock() + if len(b.backlog) > 0 { + select { + case b.c <- b.backlog[0]: + b.backlog = b.backlog[1:] + default: + } + } +} + +// get returns the channel that receives an item in the buffer. +// +// Upon receipt of an item, the caller should call load to send another +// item onto the channel if there is any. +func (b *recvBuffer) get() <-chan item { + return b.c +} + +// recvBufferReader implements io.Reader interface to read the data from +// recvBuffer. +type recvBufferReader struct { + ctx context.Context + goAway chan struct{} + recv *recvBuffer + last *bytes.Reader // Stores the remaining data in the previous calls. + err error +} + +// Read reads the next len(p) bytes from last. If last is drained, it tries to +// read additional data from recv. It blocks if there no additional data available +// in recv. If Read returns any non-nil error, it will continue to return that error. +func (r *recvBufferReader) Read(p []byte) (n int, err error) { + if r.err != nil { + return 0, r.err + } + defer func() { r.err = err }() + if r.last != nil && r.last.Len() > 0 { + // Read remaining data left in last call. + return r.last.Read(p) + } + select { + case <-r.ctx.Done(): + return 0, ContextErr(r.ctx.Err()) + case <-r.goAway: + return 0, ErrStreamDrain + case i := <-r.recv.get(): + r.recv.load() + m := i.(*recvMsg) + if m.err != nil { + return 0, m.err + } + r.last = bytes.NewReader(m.data) + return r.last.Read(p) + } +} + +type streamState uint8 + +const ( + streamActive streamState = iota + streamWriteDone // EndStream sent + streamReadDone // EndStream received + streamDone // the entire stream is finished. +) + +// Stream represents an RPC in the transport layer. +type Stream struct { + id uint32 + // nil for client side Stream. + st ServerTransport + // clientStatsCtx keeps the user context for stats handling. + // It's only valid on client side. Server side stats context is same as s.ctx. + // All client side stats collection should use the clientStatsCtx (instead of the stream context) + // so that all the generated stats for a particular RPC can be associated in the processing phase. + clientStatsCtx context.Context + // ctx is the associated context of the stream. + ctx context.Context + // cancel is always nil for client side Stream. + cancel context.CancelFunc + // done is closed when the final status arrives. + done chan struct{} + // goAway is closed when the server sent GoAways signal before this stream was initiated. + goAway chan struct{} + // method records the associated RPC method of the stream. + method string + recvCompress string + sendCompress string + buf *recvBuffer + dec io.Reader + fc *inFlow + recvQuota uint32 + // The accumulated inbound quota pending for window update. + updateQuota uint32 + // The handler to control the window update procedure for both this + // particular stream and the associated transport. + windowHandler func(int) + + sendQuotaPool *quotaPool + // Close headerChan to indicate the end of reception of header metadata. + headerChan chan struct{} + // header caches the received header metadata. + header metadata.MD + // The key-value map of trailer metadata. + trailer metadata.MD + + mu sync.RWMutex // guard the following + // headerOK becomes true from the first header is about to send. + headerOk bool + state streamState + // true iff headerChan is closed. Used to avoid closing headerChan + // multiple times. + headerDone bool + // the status received from the server. + statusCode codes.Code + statusDesc string + // rstStream indicates whether a RST_STREAM frame needs to be sent + // to the server to signify that this stream is closing. + rstStream bool + // rstError is the error that needs to be sent along with the RST_STREAM frame. + rstError http2.ErrCode +} + +// RecvCompress returns the compression algorithm applied to the inbound +// message. It is empty string if there is no compression applied. +func (s *Stream) RecvCompress() string { + return s.recvCompress +} + +// SetSendCompress sets the compression algorithm to the stream. +func (s *Stream) SetSendCompress(str string) { + s.sendCompress = str +} + +// Done returns a chanel which is closed when it receives the final status +// from the server. +func (s *Stream) Done() <-chan struct{} { + return s.done +} + +// GoAway returns a channel which is closed when the server sent GoAways signal +// before this stream was initiated. +func (s *Stream) GoAway() <-chan struct{} { + return s.goAway +} + +// Header acquires the key-value pairs of header metadata once it +// is available. It blocks until i) the metadata is ready or ii) there is no +// header metadata or iii) the stream is cancelled/expired. +func (s *Stream) Header() (metadata.MD, error) { + select { + case <-s.ctx.Done(): + return nil, ContextErr(s.ctx.Err()) + case <-s.goAway: + return nil, ErrStreamDrain + case <-s.headerChan: + return s.header.Copy(), nil + } +} + +// Trailer returns the cached trailer metedata. Note that if it is not called +// after the entire stream is done, it could return an empty MD. Client +// side only. +func (s *Stream) Trailer() metadata.MD { + s.mu.RLock() + defer s.mu.RUnlock() + return s.trailer.Copy() +} + +// ServerTransport returns the underlying ServerTransport for the stream. +// The client side stream always returns nil. +func (s *Stream) ServerTransport() ServerTransport { + return s.st +} + +// Context returns the context of the stream. +func (s *Stream) Context() context.Context { + return s.ctx +} + +// Method returns the method for the stream. +func (s *Stream) Method() string { + return s.method +} + +// StatusCode returns statusCode received from the server. +func (s *Stream) StatusCode() codes.Code { + return s.statusCode +} + +// StatusDesc returns statusDesc received from the server. +func (s *Stream) StatusDesc() string { + return s.statusDesc +} + +// SetHeader sets the header metadata. This can be called multiple times. +// Server side only. +func (s *Stream) SetHeader(md metadata.MD) error { + s.mu.Lock() + defer s.mu.Unlock() + if s.headerOk || s.state == streamDone { + return ErrIllegalHeaderWrite + } + if md.Len() == 0 { + return nil + } + s.header = metadata.Join(s.header, md) + return nil +} + +// SetTrailer sets the trailer metadata which will be sent with the RPC status +// by the server. This can be called multiple times. Server side only. +func (s *Stream) SetTrailer(md metadata.MD) error { + if md.Len() == 0 { + return nil + } + s.mu.Lock() + defer s.mu.Unlock() + s.trailer = metadata.Join(s.trailer, md) + return nil +} + +func (s *Stream) write(m recvMsg) { + s.buf.put(&m) +} + +// Read reads all the data available for this Stream from the transport and +// passes them into the decoder, which converts them into a gRPC message stream. +// The error is io.EOF when the stream is done or another non-nil error if +// the stream broke. +func (s *Stream) Read(p []byte) (n int, err error) { + n, err = s.dec.Read(p) + if err != nil { + return + } + s.windowHandler(n) + return +} + +// The key to save transport.Stream in the context. +type streamKey struct{} + +// newContextWithStream creates a new context from ctx and attaches stream +// to it. +func newContextWithStream(ctx context.Context, stream *Stream) context.Context { + return context.WithValue(ctx, streamKey{}, stream) +} + +// StreamFromContext returns the stream saved in ctx. +func StreamFromContext(ctx context.Context) (s *Stream, ok bool) { + s, ok = ctx.Value(streamKey{}).(*Stream) + return +} + +// state of transport +type transportState int + +const ( + reachable transportState = iota + unreachable + closing + draining +) + +// ServerConfig consists of all the configurations to establish a server transport. +type ServerConfig struct { + MaxStreams uint32 + AuthInfo credentials.AuthInfo + InTapHandle tap.ServerInHandle + StatsHandler stats.Handler +} + +// NewServerTransport creates a ServerTransport with conn or non-nil error +// if it fails. +func NewServerTransport(protocol string, conn net.Conn, config *ServerConfig) (ServerTransport, error) { + return newHTTP2Server(conn, config) +} + +// ConnectOptions covers all relevant options for communicating with the server. +type ConnectOptions struct { + // UserAgent is the application user agent. + UserAgent string + // Authority is the :authority pseudo-header to use. This field has no effect if + // TransportCredentials is set. + Authority string + // Dialer specifies how to dial a network address. + Dialer func(context.Context, string) (net.Conn, error) + // FailOnNonTempDialError specifies if gRPC fails on non-temporary dial errors. + FailOnNonTempDialError bool + // PerRPCCredentials stores the PerRPCCredentials required to issue RPCs. + PerRPCCredentials []credentials.PerRPCCredentials + // TransportCredentials stores the Authenticator required to setup a client connection. + TransportCredentials credentials.TransportCredentials + // KeepaliveParams stores the keepalive parameters. + KeepaliveParams keepalive.ClientParameters + // StatsHandler stores the handler for stats. + StatsHandler stats.Handler +} + +// TargetInfo contains the information of the target such as network address and metadata. +type TargetInfo struct { + Addr string + Metadata interface{} +} + +// NewClientTransport establishes the transport with the required ConnectOptions +// and returns it to the caller. +func NewClientTransport(ctx context.Context, target TargetInfo, opts ConnectOptions) (ClientTransport, error) { + return newHTTP2Client(ctx, target, opts) +} + +// Options provides additional hints and information for message +// transmission. +type Options struct { + // Last indicates whether this write is the last piece for + // this stream. + Last bool + + // Delay is a hint to the transport implementation for whether + // the data could be buffered for a batching write. The + // Transport implementation may ignore the hint. + Delay bool +} + +// CallHdr carries the information of a particular RPC. +type CallHdr struct { + // Host specifies the peer's host. + Host string + + // Method specifies the operation to perform. + Method string + + // RecvCompress specifies the compression algorithm applied on + // inbound messages. + RecvCompress string + + // SendCompress specifies the compression algorithm applied on + // outbound message. + SendCompress string + + // Flush indicates whether a new stream command should be sent + // to the peer without waiting for the first data. This is + // only a hint. The transport may modify the flush decision + // for performance purposes. + Flush bool +} + +// ClientTransport is the common interface for all gRPC client-side transport +// implementations. +type ClientTransport interface { + // Close tears down this transport. Once it returns, the transport + // should not be accessed any more. The caller must make sure this + // is called only once. + Close() error + + // GracefulClose starts to tear down the transport. It stops accepting + // new RPCs and wait the completion of the pending RPCs. + GracefulClose() error + + // Write sends the data for the given stream. A nil stream indicates + // the write is to be performed on the transport as a whole. + Write(s *Stream, data []byte, opts *Options) error + + // NewStream creates a Stream for an RPC. + NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, error) + + // CloseStream clears the footprint of a stream when the stream is + // not needed any more. The err indicates the error incurred when + // CloseStream is called. Must be called when a stream is finished + // unless the associated transport is closing. + CloseStream(stream *Stream, err error) + + // Error returns a channel that is closed when some I/O error + // happens. Typically the caller should have a goroutine to monitor + // this in order to take action (e.g., close the current transport + // and create a new one) in error case. It should not return nil + // once the transport is initiated. + Error() <-chan struct{} + + // GoAway returns a channel that is closed when ClientTranspor + // receives the draining signal from the server (e.g., GOAWAY frame in + // HTTP/2). + GoAway() <-chan struct{} +} + +// ServerTransport is the common interface for all gRPC server-side transport +// implementations. +// +// Methods may be called concurrently from multiple goroutines, but +// Write methods for a given Stream will be called serially. +type ServerTransport interface { + // HandleStreams receives incoming streams using the given handler. + HandleStreams(func(*Stream), func(context.Context, string) context.Context) + + // WriteHeader sends the header metadata for the given stream. + // WriteHeader may not be called on all streams. + WriteHeader(s *Stream, md metadata.MD) error + + // Write sends the data for the given stream. + // Write may not be called on all streams. + Write(s *Stream, data []byte, opts *Options) error + + // WriteStatus sends the status of a stream to the client. + // WriteStatus is the final call made on a stream and always + // occurs. + WriteStatus(s *Stream, statusCode codes.Code, statusDesc string) error + + // Close tears down the transport. Once it is called, the transport + // should not be accessed any more. All the pending streams and their + // handlers will be terminated asynchronously. + Close() error + + // RemoteAddr returns the remote network address. + RemoteAddr() net.Addr + + // Drain notifies the client this ServerTransport stops accepting new RPCs. + Drain() +} + +// streamErrorf creates an StreamError with the specified error code and description. +func streamErrorf(c codes.Code, format string, a ...interface{}) StreamError { + return StreamError{ + Code: c, + Desc: fmt.Sprintf(format, a...), + } +} + +// connectionErrorf creates an ConnectionError with the specified error description. +func connectionErrorf(temp bool, e error, format string, a ...interface{}) ConnectionError { + return ConnectionError{ + Desc: fmt.Sprintf(format, a...), + temp: temp, + err: e, + } +} + +// ConnectionError is an error that results in the termination of the +// entire connection and the retry of all the active streams. +type ConnectionError struct { + Desc string + temp bool + err error +} + +func (e ConnectionError) Error() string { + return fmt.Sprintf("connection error: desc = %q", e.Desc) +} + +// Temporary indicates if this connection error is temporary or fatal. +func (e ConnectionError) Temporary() bool { + return e.temp +} + +// Origin returns the original error of this connection error. +func (e ConnectionError) Origin() error { + // Never return nil error here. + // If the original error is nil, return itself. + if e.err == nil { + return e + } + return e.err +} + +var ( + // ErrConnClosing indicates that the transport is closing. + ErrConnClosing = connectionErrorf(true, nil, "transport is closing") + // ErrStreamDrain indicates that the stream is rejected by the server because + // the server stops accepting new RPCs. + ErrStreamDrain = streamErrorf(codes.Unavailable, "the server stops accepting new RPCs") +) + +// StreamError is an error that only affects one stream within a connection. +type StreamError struct { + Code codes.Code + Desc string +} + +func (e StreamError) Error() string { + return fmt.Sprintf("stream error: code = %s desc = %q", e.Code, e.Desc) +} + +// ContextErr converts the error from context package into a StreamError. +func ContextErr(err error) StreamError { + switch err { + case context.DeadlineExceeded: + return streamErrorf(codes.DeadlineExceeded, "%v", err) + case context.Canceled: + return streamErrorf(codes.Canceled, "%v", err) + } + panic(fmt.Sprintf("Unexpected error from context packet: %v", err)) +} + +// wait blocks until it can receive from ctx.Done, closing, or proceed. +// If it receives from ctx.Done, it returns 0, the StreamError for ctx.Err. +// If it receives from done, it returns 0, io.EOF if ctx is not done; otherwise +// it return the StreamError for ctx.Err. +// If it receives from goAway, it returns 0, ErrStreamDrain. +// If it receives from closing, it returns 0, ErrConnClosing. +// If it receives from proceed, it returns the received integer, nil. +func wait(ctx context.Context, done, goAway, closing <-chan struct{}, proceed <-chan int) (int, error) { + select { + case <-ctx.Done(): + return 0, ContextErr(ctx.Err()) + case <-done: + // User cancellation has precedence. + select { + case <-ctx.Done(): + return 0, ContextErr(ctx.Err()) + default: + } + return 0, io.EOF + case <-goAway: + return 0, ErrStreamDrain + case <-closing: + return 0, ErrConnClosing + case i := <-proceed: + return i, nil + } +} diff --git a/vendor/google.golang.org/grpc/transport/transport_test.go b/vendor/google.golang.org/grpc/transport/transport_test.go new file mode 100644 index 0000000..05686fb --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/transport_test.go @@ -0,0 +1,976 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "bytes" + "fmt" + "io" + "math" + "net" + "strconv" + "strings" + "sync" + "testing" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/keepalive" +) + +type server struct { + lis net.Listener + port string + startedErr chan error // error (or nil) with server start value + mu sync.Mutex + conns map[ServerTransport]bool +} + +var ( + expectedRequest = []byte("ping") + expectedResponse = []byte("pong") + expectedRequestLarge = make([]byte, initialWindowSize*2) + expectedResponseLarge = make([]byte, initialWindowSize*2) + expectedInvalidHeaderField = "invalid/content-type" +) + +type testStreamHandler struct { + t *http2Server +} + +type hType int + +const ( + normal hType = iota + suspended + misbehaved + encodingRequiredStatus + invalidHeaderField +) + +func (h *testStreamHandler) handleStream(t *testing.T, s *Stream) { + req := expectedRequest + resp := expectedResponse + if s.Method() == "foo.Large" { + req = expectedRequestLarge + resp = expectedResponseLarge + } + p := make([]byte, len(req)) + _, err := io.ReadFull(s, p) + if err != nil { + return + } + if !bytes.Equal(p, req) { + t.Fatalf("handleStream got %v, want %v", p, req) + } + // send a response back to the client. + h.t.Write(s, resp, &Options{}) + // send the trailer to end the stream. + h.t.WriteStatus(s, codes.OK, "") +} + +// handleStreamSuspension blocks until s.ctx is canceled. +func (h *testStreamHandler) handleStreamSuspension(s *Stream) { + go func() { + <-s.ctx.Done() + }() +} + +func (h *testStreamHandler) handleStreamMisbehave(t *testing.T, s *Stream) { + conn, ok := s.ServerTransport().(*http2Server) + if !ok { + t.Fatalf("Failed to convert %v to *http2Server", s.ServerTransport()) + } + var sent int + p := make([]byte, http2MaxFrameLen) + for sent < initialWindowSize { + <-conn.writableChan + n := initialWindowSize - sent + // The last message may be smaller than http2MaxFrameLen + if n <= http2MaxFrameLen { + if s.Method() == "foo.Connection" { + // Violate connection level flow control window of client but do not + // violate any stream level windows. + p = make([]byte, n) + } else { + // Violate stream level flow control window of client. + p = make([]byte, n+1) + } + } + if err := conn.framer.writeData(true, s.id, false, p); err != nil { + conn.writableChan <- 0 + break + } + conn.writableChan <- 0 + sent += len(p) + } +} + +func (h *testStreamHandler) handleStreamEncodingRequiredStatus(t *testing.T, s *Stream) { + // raw newline is not accepted by http2 framer so it must be encoded. + h.t.WriteStatus(s, encodingTestStatusCode, encodingTestStatusDesc) +} + +func (h *testStreamHandler) handleStreamInvalidHeaderField(t *testing.T, s *Stream) { + <-h.t.writableChan + h.t.hBuf.Reset() + h.t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: expectedInvalidHeaderField}) + if err := h.t.writeHeaders(s, h.t.hBuf, false); err != nil { + t.Fatalf("Failed to write headers: %v", err) + } + h.t.writableChan <- 0 +} + +// start starts server. Other goroutines should block on s.readyChan for further operations. +func (s *server) start(t *testing.T, port int, maxStreams uint32, ht hType) { + var err error + if port == 0 { + s.lis, err = net.Listen("tcp", "localhost:0") + } else { + s.lis, err = net.Listen("tcp", "localhost:"+strconv.Itoa(port)) + } + if err != nil { + s.startedErr <- fmt.Errorf("failed to listen: %v", err) + return + } + _, p, err := net.SplitHostPort(s.lis.Addr().String()) + if err != nil { + s.startedErr <- fmt.Errorf("failed to parse listener address: %v", err) + return + } + s.port = p + s.conns = make(map[ServerTransport]bool) + s.startedErr <- nil + for { + conn, err := s.lis.Accept() + if err != nil { + return + } + config := &ServerConfig{ + MaxStreams: maxStreams, + } + transport, err := NewServerTransport("http2", conn, config) + if err != nil { + return + } + s.mu.Lock() + if s.conns == nil { + s.mu.Unlock() + transport.Close() + return + } + s.conns[transport] = true + s.mu.Unlock() + h := &testStreamHandler{transport.(*http2Server)} + switch ht { + case suspended: + go transport.HandleStreams(h.handleStreamSuspension, + func(ctx context.Context, method string) context.Context { + return ctx + }) + case misbehaved: + go transport.HandleStreams(func(s *Stream) { + go h.handleStreamMisbehave(t, s) + }, func(ctx context.Context, method string) context.Context { + return ctx + }) + case encodingRequiredStatus: + go transport.HandleStreams(func(s *Stream) { + go h.handleStreamEncodingRequiredStatus(t, s) + }, func(ctx context.Context, method string) context.Context { + return ctx + }) + case invalidHeaderField: + go transport.HandleStreams(func(s *Stream) { + go h.handleStreamInvalidHeaderField(t, s) + }, func(ctx context.Context, method string) context.Context { + return ctx + }) + default: + go transport.HandleStreams(func(s *Stream) { + go h.handleStream(t, s) + }, func(ctx context.Context, method string) context.Context { + return ctx + }) + } + } +} + +func (s *server) wait(t *testing.T, timeout time.Duration) { + select { + case err := <-s.startedErr: + if err != nil { + t.Fatal(err) + } + case <-time.After(timeout): + t.Fatalf("Timed out after %v waiting for server to be ready", timeout) + } +} + +func (s *server) stop() { + s.lis.Close() + s.mu.Lock() + for c := range s.conns { + c.Close() + } + s.conns = nil + s.mu.Unlock() +} + +func setUp(t *testing.T, port int, maxStreams uint32, ht hType) (*server, ClientTransport) { + return setUpWithOptions(t, port, maxStreams, ht, ConnectOptions{}) +} + +func setUpWithOptions(t *testing.T, port int, maxStreams uint32, ht hType, copts ConnectOptions) (*server, ClientTransport) { + server := &server{startedErr: make(chan error, 1)} + go server.start(t, port, maxStreams, ht) + server.wait(t, 2*time.Second) + addr := "localhost:" + server.port + var ( + ct ClientTransport + connErr error + ) + target := TargetInfo{ + Addr: addr, + } + ct, connErr = NewClientTransport(context.Background(), target, copts) + if connErr != nil { + t.Fatalf("failed to create transport: %v", connErr) + } + return server, ct +} + +func setUpWithNoPingServer(t *testing.T, copts ConnectOptions, done chan net.Conn) ClientTransport { + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen: %v", err) + } + // Launch a non responsive server. + go func() { + defer lis.Close() + conn, err := lis.Accept() + if err != nil { + t.Errorf("Error at server-side while accepting: %v", err) + close(done) + return + } + done <- conn + }() + tr, err := NewClientTransport(context.Background(), TargetInfo{Addr: lis.Addr().String()}, copts) + if err != nil { + // Server clean-up. + lis.Close() + if conn, ok := <-done; ok { + conn.Close() + } + t.Fatalf("Failed to dial: %v", err) + } + return tr +} + +func TestKeepaliveClientClosesIdleTransport(t *testing.T) { + done := make(chan net.Conn, 1) + tr := setUpWithNoPingServer(t, ConnectOptions{KeepaliveParams: keepalive.ClientParameters{ + Time: 2 * time.Second, // Keepalive time = 2 sec. + Timeout: 1 * time.Second, // Keepalive timeout = 1 sec. + PermitWithoutStream: true, // Run keepalive even with no RPCs. + }}, done) + defer tr.Close() + conn, ok := <-done + if !ok { + t.Fatalf("Server didn't return connection object") + } + defer conn.Close() + // Sleep for keepalive to close the connection. + time.Sleep(4 * time.Second) + // Assert that the connection was closed. + ct := tr.(*http2Client) + ct.mu.Lock() + defer ct.mu.Unlock() + if ct.state == reachable { + t.Fatalf("Test Failed: Expected client transport to have closed.") + } +} + +func TestKeepaliveClientStaysHealthyOnIdleTransport(t *testing.T) { + done := make(chan net.Conn, 1) + tr := setUpWithNoPingServer(t, ConnectOptions{KeepaliveParams: keepalive.ClientParameters{ + Time: 2 * time.Second, // Keepalive time = 2 sec. + Timeout: 1 * time.Second, // Keepalive timeout = 1 sec. + }}, done) + defer tr.Close() + conn, ok := <-done + if !ok { + t.Fatalf("server didn't reutrn connection object") + } + defer conn.Close() + // Give keepalive some time. + time.Sleep(4 * time.Second) + // Assert that connections is still healthy. + ct := tr.(*http2Client) + ct.mu.Lock() + defer ct.mu.Unlock() + if ct.state != reachable { + t.Fatalf("Test failed: Expected client transport to be healthy.") + } +} + +func TestKeepaliveClientClosesWithActiveStreams(t *testing.T) { + done := make(chan net.Conn, 1) + tr := setUpWithNoPingServer(t, ConnectOptions{KeepaliveParams: keepalive.ClientParameters{ + Time: 2 * time.Second, // Keepalive time = 2 sec. + Timeout: 1 * time.Second, // Keepalive timeout = 1 sec. + }}, done) + defer tr.Close() + conn, ok := <-done + if !ok { + t.Fatalf("Server didn't return connection object") + } + defer conn.Close() + // Create a stream. + _, err := tr.NewStream(context.Background(), &CallHdr{}) + if err != nil { + t.Fatalf("Failed to create a new stream: %v", err) + } + // Give keepalive some time. + time.Sleep(4 * time.Second) + // Assert that transport was closed. + ct := tr.(*http2Client) + ct.mu.Lock() + defer ct.mu.Unlock() + if ct.state == reachable { + t.Fatalf("Test failed: Expected client transport to have closed.") + } +} + +func TestKeepaliveClientStaysHealthyWithResponsiveServer(t *testing.T) { + s, tr := setUpWithOptions(t, 0, math.MaxUint32, normal, ConnectOptions{KeepaliveParams: keepalive.ClientParameters{ + Time: 2 * time.Second, // Keepalive time = 2 sec. + Timeout: 1 * time.Second, // Keepalive timeout = 1 sec. + PermitWithoutStream: true, // Run keepalive even with no RPCs. + }}) + defer s.stop() + defer tr.Close() + // Give keep alive some time. + time.Sleep(4 * time.Second) + // Assert that transport is healthy. + ct := tr.(*http2Client) + ct.mu.Lock() + defer ct.mu.Unlock() + if ct.state != reachable { + t.Fatalf("Test failed: Expected client transport to be healthy.") + } +} + +func TestClientSendAndReceive(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, normal) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo.Small", + } + s1, err1 := ct.NewStream(context.Background(), callHdr) + if err1 != nil { + t.Fatalf("failed to open stream: %v", err1) + } + if s1.id != 1 { + t.Fatalf("wrong stream id: %d", s1.id) + } + s2, err2 := ct.NewStream(context.Background(), callHdr) + if err2 != nil { + t.Fatalf("failed to open stream: %v", err2) + } + if s2.id != 3 { + t.Fatalf("wrong stream id: %d", s2.id) + } + opts := Options{ + Last: true, + Delay: false, + } + if err := ct.Write(s1, expectedRequest, &opts); err != nil && err != io.EOF { + t.Fatalf("failed to send data: %v", err) + } + p := make([]byte, len(expectedResponse)) + _, recvErr := io.ReadFull(s1, p) + if recvErr != nil || !bytes.Equal(p, expectedResponse) { + t.Fatalf("Error: %v, want <nil>; Result: %v, want %v", recvErr, p, expectedResponse) + } + _, recvErr = io.ReadFull(s1, p) + if recvErr != io.EOF { + t.Fatalf("Error: %v; want <EOF>", recvErr) + } + ct.Close() + server.stop() +} + +func TestClientErrorNotify(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, normal) + go server.stop() + // ct.reader should detect the error and activate ct.Error(). + <-ct.Error() + ct.Close() +} + +func performOneRPC(ct ClientTransport) { + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo.Small", + } + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + return + } + opts := Options{ + Last: true, + Delay: false, + } + if err := ct.Write(s, expectedRequest, &opts); err == nil || err == io.EOF { + time.Sleep(5 * time.Millisecond) + // The following s.Recv()'s could error out because the + // underlying transport is gone. + // + // Read response + p := make([]byte, len(expectedResponse)) + io.ReadFull(s, p) + // Read io.EOF + io.ReadFull(s, p) + } +} + +func TestClientMix(t *testing.T) { + s, ct := setUp(t, 0, math.MaxUint32, normal) + go func(s *server) { + time.Sleep(5 * time.Second) + s.stop() + }(s) + go func(ct ClientTransport) { + <-ct.Error() + ct.Close() + }(ct) + for i := 0; i < 1000; i++ { + time.Sleep(10 * time.Millisecond) + go performOneRPC(ct) + } +} + +func TestLargeMessage(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, normal) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo.Large", + } + var wg sync.WaitGroup + for i := 0; i < 2; i++ { + wg.Add(1) + go func() { + defer wg.Done() + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + t.Errorf("%v.NewStream(_, _) = _, %v, want _, <nil>", ct, err) + } + if err := ct.Write(s, expectedRequestLarge, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { + t.Errorf("%v.Write(_, _, _) = %v, want <nil>", ct, err) + } + p := make([]byte, len(expectedResponseLarge)) + if _, err := io.ReadFull(s, p); err != nil || !bytes.Equal(p, expectedResponseLarge) { + t.Errorf("io.ReadFull(_, %v) = _, %v, want %v, <nil>", err, p, expectedResponse) + } + if _, err = io.ReadFull(s, p); err != io.EOF { + t.Errorf("Failed to complete the stream %v; want <EOF>", err) + } + }() + } + wg.Wait() + ct.Close() + server.stop() +} + +func TestGracefulClose(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, normal) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo.Small", + } + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + t.Fatalf("%v.NewStream(_, _) = _, %v, want _, <nil>", ct, err) + } + if err = ct.GracefulClose(); err != nil { + t.Fatalf("%v.GracefulClose() = %v, want <nil>", ct, err) + } + var wg sync.WaitGroup + // Expect the failure for all the follow-up streams because ct has been closed gracefully. + for i := 0; i < 100; i++ { + wg.Add(1) + go func() { + defer wg.Done() + if _, err := ct.NewStream(context.Background(), callHdr); err != ErrStreamDrain { + t.Errorf("%v.NewStream(_, _) = _, %v, want _, %v", ct, err, ErrStreamDrain) + } + }() + } + opts := Options{ + Last: true, + Delay: false, + } + // The stream which was created before graceful close can still proceed. + if err := ct.Write(s, expectedRequest, &opts); err != nil && err != io.EOF { + t.Fatalf("%v.Write(_, _, _) = %v, want <nil>", ct, err) + } + p := make([]byte, len(expectedResponse)) + if _, err := io.ReadFull(s, p); err != nil || !bytes.Equal(p, expectedResponse) { + t.Fatalf("io.ReadFull(_, %v) = _, %v, want %v, <nil>", err, p, expectedResponse) + } + if _, err = io.ReadFull(s, p); err != io.EOF { + t.Fatalf("Failed to complete the stream %v; want <EOF>", err) + } + wg.Wait() + ct.Close() + server.stop() +} + +func TestLargeMessageSuspension(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, suspended) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo.Large", + } + // Set a long enough timeout for writing a large message out. + ctx, _ := context.WithTimeout(context.Background(), time.Second) + s, err := ct.NewStream(ctx, callHdr) + if err != nil { + t.Fatalf("failed to open stream: %v", err) + } + // Write should not be done successfully due to flow control. + err = ct.Write(s, expectedRequestLarge, &Options{Last: true, Delay: false}) + expectedErr := streamErrorf(codes.DeadlineExceeded, "%v", context.DeadlineExceeded) + if err != expectedErr { + t.Fatalf("Write got %v, want %v", err, expectedErr) + } + ct.Close() + server.stop() +} + +func TestMaxStreams(t *testing.T) { + server, ct := setUp(t, 0, 1, suspended) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo.Large", + } + // Have a pending stream which takes all streams quota. + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + t.Fatalf("Failed to open stream: %v", err) + } + cc, ok := ct.(*http2Client) + if !ok { + t.Fatalf("Failed to convert %v to *http2Client", ct) + } + done := make(chan struct{}) + ch := make(chan int) + ready := make(chan struct{}) + go func() { + for { + select { + case <-time.After(5 * time.Millisecond): + select { + case ch <- 0: + case <-ready: + return + } + case <-time.After(5 * time.Second): + close(done) + return + case <-ready: + return + } + } + }() + for { + select { + case <-ch: + case <-done: + t.Fatalf("Client has not received the max stream setting in 5 seconds.") + } + cc.mu.Lock() + // cc.streamsQuota should be initialized once receiving the 1st setting frame from + // the server. + if cc.streamsQuota != nil { + cc.mu.Unlock() + select { + case <-cc.streamsQuota.acquire(): + t.Fatalf("streamsQuota.acquire() becomes readable mistakenly.") + default: + cc.streamsQuota.mu.Lock() + quota := cc.streamsQuota.quota + cc.streamsQuota.mu.Unlock() + if quota != 0 { + t.Fatalf("streamsQuota.quota got non-zero quota mistakenly.") + } + } + break + } + cc.mu.Unlock() + } + close(ready) + // Close the pending stream so that the streams quota becomes available for the next new stream. + ct.CloseStream(s, nil) + select { + case i := <-cc.streamsQuota.acquire(): + if i != 1 { + t.Fatalf("streamsQuota.acquire() got %d quota, want 1.", i) + } + cc.streamsQuota.add(i) + default: + t.Fatalf("streamsQuota.acquire() is not readable.") + } + if _, err := ct.NewStream(context.Background(), callHdr); err != nil { + t.Fatalf("Failed to open stream: %v", err) + } + ct.Close() + server.stop() +} + +func TestServerContextCanceledOnClosedConnection(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, suspended) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo", + } + var sc *http2Server + // Wait until the server transport is setup. + for { + server.mu.Lock() + if len(server.conns) == 0 { + server.mu.Unlock() + time.Sleep(time.Millisecond) + continue + } + for k := range server.conns { + var ok bool + sc, ok = k.(*http2Server) + if !ok { + t.Fatalf("Failed to convert %v to *http2Server", k) + } + } + server.mu.Unlock() + break + } + cc, ok := ct.(*http2Client) + if !ok { + t.Fatalf("Failed to convert %v to *http2Client", ct) + } + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + t.Fatalf("Failed to open stream: %v", err) + } + // Make sure the headers frame is flushed out. + <-cc.writableChan + if err = cc.framer.writeData(true, s.id, false, make([]byte, http2MaxFrameLen)); err != nil { + t.Fatalf("Failed to write data: %v", err) + } + cc.writableChan <- 0 + // Loop until the server side stream is created. + var ss *Stream + for { + time.Sleep(time.Second) + sc.mu.Lock() + if len(sc.activeStreams) == 0 { + sc.mu.Unlock() + continue + } + ss = sc.activeStreams[s.id] + sc.mu.Unlock() + break + } + cc.Close() + select { + case <-ss.Context().Done(): + if ss.Context().Err() != context.Canceled { + t.Fatalf("ss.Context().Err() got %v, want %v", ss.Context().Err(), context.Canceled) + } + case <-time.After(5 * time.Second): + t.Fatalf("Failed to cancel the context of the sever side stream.") + } + server.stop() +} + +func TestServerWithMisbehavedClient(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, suspended) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo", + } + var sc *http2Server + // Wait until the server transport is setup. + for { + server.mu.Lock() + if len(server.conns) == 0 { + server.mu.Unlock() + time.Sleep(time.Millisecond) + continue + } + for k := range server.conns { + var ok bool + sc, ok = k.(*http2Server) + if !ok { + t.Fatalf("Failed to convert %v to *http2Server", k) + } + } + server.mu.Unlock() + break + } + cc, ok := ct.(*http2Client) + if !ok { + t.Fatalf("Failed to convert %v to *http2Client", ct) + } + // Test server behavior for violation of stream flow control window size restriction. + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + t.Fatalf("Failed to open stream: %v", err) + } + var sent int + // Drain the stream flow control window + <-cc.writableChan + if err = cc.framer.writeData(true, s.id, false, make([]byte, http2MaxFrameLen)); err != nil { + t.Fatalf("Failed to write data: %v", err) + } + cc.writableChan <- 0 + sent += http2MaxFrameLen + // Wait until the server creates the corresponding stream and receive some data. + var ss *Stream + for { + time.Sleep(time.Millisecond) + sc.mu.Lock() + if len(sc.activeStreams) == 0 { + sc.mu.Unlock() + continue + } + ss = sc.activeStreams[s.id] + sc.mu.Unlock() + ss.fc.mu.Lock() + if ss.fc.pendingData > 0 { + ss.fc.mu.Unlock() + break + } + ss.fc.mu.Unlock() + } + if ss.fc.pendingData != http2MaxFrameLen || ss.fc.pendingUpdate != 0 || sc.fc.pendingData != http2MaxFrameLen || sc.fc.pendingUpdate != 0 { + t.Fatalf("Server mistakenly updates inbound flow control params: got %d, %d, %d, %d; want %d, %d, %d, %d", ss.fc.pendingData, ss.fc.pendingUpdate, sc.fc.pendingData, sc.fc.pendingUpdate, http2MaxFrameLen, 0, http2MaxFrameLen, 0) + } + // Keep sending until the server inbound window is drained for that stream. + for sent <= initialWindowSize { + <-cc.writableChan + if err = cc.framer.writeData(true, s.id, false, make([]byte, 1)); err != nil { + t.Fatalf("Failed to write data: %v", err) + } + cc.writableChan <- 0 + sent++ + } + // Server sent a resetStream for s already. + code := http2ErrConvTab[http2.ErrCodeFlowControl] + if _, err := io.ReadFull(s, make([]byte, 1)); err != io.EOF || s.statusCode != code { + t.Fatalf("%v got err %v with statusCode %d, want err <EOF> with statusCode %d", s, err, s.statusCode, code) + } + + if ss.fc.pendingData != 0 || ss.fc.pendingUpdate != 0 || sc.fc.pendingData != 0 || sc.fc.pendingUpdate <= initialWindowSize { + t.Fatalf("Server mistakenly resets inbound flow control params: got %d, %d, %d, %d; want 0, 0, 0, >%d", ss.fc.pendingData, ss.fc.pendingUpdate, sc.fc.pendingData, sc.fc.pendingUpdate, initialWindowSize) + } + ct.CloseStream(s, nil) + // Test server behavior for violation of connection flow control window size restriction. + // + // Keep creating new streams until the connection window is drained on the server and + // the server tears down the connection. + for { + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + // The server tears down the connection. + break + } + <-cc.writableChan + cc.framer.writeData(true, s.id, true, make([]byte, http2MaxFrameLen)) + cc.writableChan <- 0 + } + ct.Close() + server.stop() +} + +func TestClientWithMisbehavedServer(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, misbehaved) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo.Stream", + } + conn, ok := ct.(*http2Client) + if !ok { + t.Fatalf("Failed to convert %v to *http2Client", ct) + } + // Test the logic for the violation of stream flow control window size restriction. + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + t.Fatalf("Failed to open stream: %v", err) + } + d := make([]byte, 1) + if err := ct.Write(s, d, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { + t.Fatalf("Failed to write: %v", err) + } + // Read without window update. + for { + p := make([]byte, http2MaxFrameLen) + if _, err = s.dec.Read(p); err != nil { + break + } + } + if s.fc.pendingData <= initialWindowSize || s.fc.pendingUpdate != 0 || conn.fc.pendingData <= initialWindowSize || conn.fc.pendingUpdate != 0 { + t.Fatalf("Client mistakenly updates inbound flow control params: got %d, %d, %d, %d; want >%d, %d, >%d, %d", s.fc.pendingData, s.fc.pendingUpdate, conn.fc.pendingData, conn.fc.pendingUpdate, initialWindowSize, 0, initialWindowSize, 0) + } + if err != io.EOF || s.statusCode != codes.Internal { + t.Fatalf("Got err %v and the status code %d, want <EOF> and the code %d", err, s.statusCode, codes.Internal) + } + conn.CloseStream(s, err) + if s.fc.pendingData != 0 || s.fc.pendingUpdate != 0 || conn.fc.pendingData != 0 || conn.fc.pendingUpdate <= initialWindowSize { + t.Fatalf("Client mistakenly resets inbound flow control params: got %d, %d, %d, %d; want 0, 0, 0, >%d", s.fc.pendingData, s.fc.pendingUpdate, conn.fc.pendingData, conn.fc.pendingUpdate, initialWindowSize) + } + // Test the logic for the violation of the connection flow control window size restriction. + // + // Generate enough streams to drain the connection window. Make the server flood the traffic + // to violate flow control window size of the connection. + callHdr.Method = "foo.Connection" + for i := 0; i < int(initialConnWindowSize/initialWindowSize+10); i++ { + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + break + } + if err := ct.Write(s, d, &Options{Last: true, Delay: false}); err != nil { + break + } + } + // http2Client.errChan is closed due to connection flow control window size violation. + <-conn.Error() + ct.Close() + server.stop() +} + +var ( + encodingTestStatusCode = codes.Internal + encodingTestStatusDesc = "\n" +) + +func TestEncodingRequiredStatus(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, encodingRequiredStatus) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo", + } + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + return + } + opts := Options{ + Last: true, + Delay: false, + } + if err := ct.Write(s, expectedRequest, &opts); err != nil && err != io.EOF { + t.Fatalf("Failed to write the request: %v", err) + } + p := make([]byte, http2MaxFrameLen) + if _, err := s.dec.Read(p); err != io.EOF { + t.Fatalf("Read got error %v, want %v", err, io.EOF) + } + if s.StatusCode() != encodingTestStatusCode || s.StatusDesc() != encodingTestStatusDesc { + t.Fatalf("stream with status code %d, status desc %v, want %d, %v", s.StatusCode(), s.StatusDesc(), encodingTestStatusCode, encodingTestStatusDesc) + } + ct.Close() + server.stop() +} + +func TestInvalidHeaderField(t *testing.T) { + server, ct := setUp(t, 0, math.MaxUint32, invalidHeaderField) + callHdr := &CallHdr{ + Host: "localhost", + Method: "foo", + } + s, err := ct.NewStream(context.Background(), callHdr) + if err != nil { + return + } + opts := Options{ + Last: true, + Delay: false, + } + if err := ct.Write(s, expectedRequest, &opts); err != nil && err != io.EOF { + t.Fatalf("Failed to write the request: %v", err) + } + p := make([]byte, http2MaxFrameLen) + _, err = s.dec.Read(p) + if se, ok := err.(StreamError); !ok || se.Code != codes.FailedPrecondition || !strings.Contains(err.Error(), expectedInvalidHeaderField) { + t.Fatalf("Read got error %v, want error with code %s and contains %q", err, codes.FailedPrecondition, expectedInvalidHeaderField) + } + ct.Close() + server.stop() +} + +func TestStreamContext(t *testing.T) { + expectedStream := &Stream{} + ctx := newContextWithStream(context.Background(), expectedStream) + s, ok := StreamFromContext(ctx) + if !ok || expectedStream != s { + t.Fatalf("GetStreamFromContext(%v) = %v, %t, want: %v, true", ctx, s, ok, expectedStream) + } +} + +func TestIsReservedHeader(t *testing.T) { + tests := []struct { + h string + want bool + }{ + {"", false}, // but should be rejected earlier + {"foo", false}, + {"content-type", true}, + {"grpc-message-type", true}, + {"grpc-encoding", true}, + {"grpc-message", true}, + {"grpc-status", true}, + {"grpc-timeout", true}, + {"te", true}, + } + for _, tt := range tests { + got := isReservedHeader(tt.h) + if got != tt.want { + t.Errorf("isReservedHeader(%q) = %v; want %v", tt.h, got, tt.want) + } + } +}